postgis-2.1.2+dfsg.orig/0000755000000000000000000000000012315456266013572 5ustar rootrootpostgis-2.1.2+dfsg.orig/libpgcommon/0000755000000000000000000000000012317530606016071 5ustar rootrootpostgis-2.1.2+dfsg.orig/libpgcommon/lwgeom_cache.c0000644000000000000000000001400011773666416020663 0ustar rootroot/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "../postgis_config.h" #include "lwgeom_cache.h" /* * Generic statement caching infrastructure. We cache * the following kinds of objects: * * geometries-with-trees * PreparedGeometry, RTree, CIRC_TREE, RECT_TREE * srids-with-projections * projPJ * * Each GenericCache* has a type, and after that * some data. Similar to generic LWGEOM*. Test that * the type number is what you expect before casting * and de-referencing struct members. */ typedef struct { int type; char data[1]; } GenericCache; /* * Although there are only two basic kinds of * cache entries, the actual trees stored in the * geometries-with-trees pattern are quite diverse, * and they might be used in combination, so we have * one slot for each tree type as well as a slot for * projections. */ typedef struct { GenericCache* entry[NUM_CACHE_ENTRIES]; } GenericCacheCollection; /** * Utility function to read the upper memory context off a function call * info data. */ static MemoryContext FIContext(FunctionCallInfoData* fcinfo) { return fcinfo->flinfo->fn_mcxt; } /** * Get the generic collection off the statement, allocate a * new one if we don't have one already. */ static GenericCacheCollection* GetGenericCacheCollection(FunctionCallInfoData* fcinfo) { GenericCacheCollection* cache = fcinfo->flinfo->fn_extra; if ( ! cache ) { cache = MemoryContextAlloc(FIContext(fcinfo), sizeof(GenericCacheCollection)); memset(cache, 0, sizeof(GenericCacheCollection)); fcinfo->flinfo->fn_extra = cache; } return cache; } /** * Get the Proj4 entry from the generic cache if one exists. * If it doesn't exist, make a new empty one and return it. */ PROJ4PortalCache* GetPROJ4SRSCache(FunctionCallInfoData* fcinfo) { GenericCacheCollection* generic_cache = GetGenericCacheCollection(fcinfo); PROJ4PortalCache* cache = (PROJ4PortalCache*)(generic_cache->entry[PROJ_CACHE_ENTRY]); if ( ! cache ) { /* Allocate in the upper context */ cache = MemoryContextAlloc(FIContext(fcinfo), sizeof(PROJ4PortalCache)); if (cache) { int i; POSTGIS_DEBUGF(3, "Allocating PROJ4Cache for portal with transform() MemoryContext %p", FIContext(fcinfo)); /* Put in any required defaults */ for (i = 0; i < PROJ4_CACHE_ITEMS; i++) { cache->PROJ4SRSCache[i].srid = SRID_UNKNOWN; cache->PROJ4SRSCache[i].projection = NULL; cache->PROJ4SRSCache[i].projection_mcxt = NULL; } cache->type = PROJ_CACHE_ENTRY; cache->PROJ4SRSCacheCount = 0; cache->PROJ4SRSCacheContext = FIContext(fcinfo); /* Store the pointer in GenericCache */ generic_cache->entry[PROJ_CACHE_ENTRY] = (GenericCache*)cache; } } return cache; } /** * Get an appropriate (based on the entry type number) * GeomCache entry from the generic cache if one exists. * Returns a cache pointer if there is a cache hit and we have an * index built and ready to use. Returns NULL otherwise. */ GeomCache* GetGeomCache(FunctionCallInfoData* fcinfo, const GeomCacheMethods* cache_methods, const GSERIALIZED* g1, const GSERIALIZED* g2) { GeomCache* cache; int cache_hit = 0; MemoryContext old_context; const GSERIALIZED *geom; GenericCacheCollection* generic_cache = GetGenericCacheCollection(fcinfo); int entry_number = cache_methods->entry_number; Assert(entry_number >= 0); Assert(entry_number < NUM_CACHE_ENTRIES); cache = (GeomCache*)(generic_cache->entry[entry_number]); if ( ! cache ) { old_context = MemoryContextSwitchTo(FIContext(fcinfo)); /* Allocate in the upper context */ cache = cache_methods->GeomCacheAllocator(); MemoryContextSwitchTo(old_context); /* Store the pointer in GenericCache */ cache->type = entry_number; generic_cache->entry[entry_number] = (GenericCache*)cache; } /* Cache hit on the first argument */ if ( g1 && cache->argnum != 2 && cache->geom1_size == VARSIZE(g1) && memcmp(cache->geom1, g1, cache->geom1_size) == 0 ) { cache_hit = 1; geom = cache->geom1; } /* Cache hit on second argument */ else if ( g2 && cache->argnum != 1 && cache->geom2_size == VARSIZE(g2) && memcmp(cache->geom2, g2, cache->geom2_size) == 0 ) { cache_hit = 2; geom = cache->geom2; } /* No cache hit. If we have a tree, free it. */ else { cache_hit = 0; if ( cache->argnum ) { cache_methods->GeomIndexFreer(cache); cache->argnum = 0; } } /* Cache hit, but no tree built yet, build it! */ if ( cache_hit && ! cache->argnum ) { int rv; LWGEOM *lwgeom = lwgeom_from_gserialized(geom); /* Can't build a tree on a NULL or empty */ if ( (!lwgeom) || lwgeom_is_empty(lwgeom) ) return NULL; old_context = MemoryContextSwitchTo(FIContext(fcinfo)); rv = cache_methods->GeomIndexBuilder(lwgeom, cache); MemoryContextSwitchTo(old_context); cache->argnum = cache_hit; /* Something went awry in the tree build phase */ if ( ! rv ) { cache->argnum = 0; return NULL; } } /* We have a hit and a calculated tree, we're done */ if ( cache_hit && cache->argnum ) return cache; /* Argument one didn't match, so copy the new value in. */ if ( g1 && cache_hit != 1 ) { if ( cache->geom1 ) pfree(cache->geom1); cache->geom1_size = VARSIZE(g1); cache->geom1 = MemoryContextAlloc(FIContext(fcinfo), cache->geom1_size); memcpy(cache->geom1, g1, cache->geom1_size); } /* Argument two didn't match, so copy the new value in. */ if ( g2 && cache_hit != 2 ) { if ( cache->geom2 ) pfree(cache->geom2); cache->geom2_size = VARSIZE(g2); cache->geom2 = MemoryContextAlloc(FIContext(fcinfo), cache->geom2_size); memcpy(cache->geom2, g2, cache->geom2_size); } return NULL; } postgis-2.1.2+dfsg.orig/libpgcommon/gserialized_gist.h0000644000000000000000000000707312152360377021604 0ustar rootroot /********************************************************************** ** GIDX structure. ** ** This is an n-dimensional (practically, the ** implementation is 2-4 dimensions) box used for index keys. The ** coordinates are anonymous, so we can have any number of dimensions. ** The sizeof a GIDX is 1 + 2 * ndims * sizeof(float). ** The order of values in a GIDX is ** xmin,xmax,ymin,ymax,zmin,zmax... */ typedef struct { int32 varsize; float c[1]; } GIDX; /* ** For some GiST support functions, it is more efficient to allocate ** memory for our GIDX off the stack and cast that memory into a GIDX. ** But, GIDX is variable length, what to do? We'll bake in the assumption ** that no GIDX is more than 4-dimensional for now, and ensure that much ** space is available. ** 4 bytes varsize + 4 dimensions * 2 ordinates * 4 bytes float size = 36 bytes */ #define GIDX_MAX_SIZE 36 /********************************************************************** ** BOX2DF structure. ** ** This is a 2-dimensional key for simple cartesian indexes, ** with backwards compatible behavior to previous indexes in ** PostGIS */ typedef struct { float xmin, xmax, ymin, ymax; } BOX2DF; /********************************************************************************* ** GIDX support functions. ** ** We put the GIDX support here rather than libgeom because it is a specialized ** type only used for indexing purposes. It also makes use of some PgSQL ** infrastructure like the VARSIZE() macros. */ /* allocate a new gidx object on the heap */ GIDX* gidx_new(int ndims) ; /* Convert a gidx to a gbox */ void gbox_from_gidx(GIDX *gidx, GBOX *gbox); /* Convert a gbox to a new gidx */ GIDX* gidx_from_gbox(GBOX box); /* Increase the size of a GIDX */ void gidx_expand(GIDX *a, float d); /* Generate human readable form for GIDX. */ #if POSTGIS_DEBUG_LEVEL > 0 char* gidx_to_string(GIDX *a) ; #endif /* typedef to correct array-bounds checking for casts to GIDX - do not use this ANYWHERE except in the casts below */ typedef float _gidx_float_array[sizeof(float) * 2 * 4]; /* Returns number of dimensions for this GIDX */ #define GIDX_NDIMS(gidx) ((VARSIZE((gidx)) - VARHDRSZ) / (2 * sizeof(float))) /* Minimum accessor. */ #define GIDX_GET_MIN(gidx, dimension) (*((_gidx_float_array *)(&(gidx)->c)))[2*(dimension)] /* Maximum accessor. */ #define GIDX_GET_MAX(gidx, dimension) (*((_gidx_float_array *)(&(gidx)->c)))[2*(dimension)+1] /* Minimum setter. */ #define GIDX_SET_MIN(gidx, dimension, value) ((gidx)->c[2*(dimension)] = (value)) /* Maximum setter. */ #define GIDX_SET_MAX(gidx, dimension, value) ((gidx)->c[2*(dimension)+1] = (value)) /* Returns the size required to store a GIDX of requested dimension */ #define GIDX_SIZE(dimensions) (sizeof(int32) + 2*(dimensions)*sizeof(float)) /********************************************************************************* ** GSERIALIZED support functions. ** ** Fast functions for pulling boxes out of serializations. */ /* Pull out the #GIDX bounding box with a absolute minimum system overhead */ int gserialized_datum_get_gidx_p(Datum gserialized_datum, GIDX *gidx); /* Pull out the gidx bounding box from an already de-toasted geography */ int gserialized_get_gidx_p(GSERIALIZED *g, GIDX *gidx); /* Copy a new bounding box into an existing gserialized */ GSERIALIZED* gserialized_set_gidx(GSERIALIZED *g, GIDX *gidx); /* Given two datums, do they overlap? Computed very fast using embedded boxes. */ /* int gserialized_datum_overlaps(Datum gs1, Datum gs2); */ /* Remove the box from a disk serialization */ GSERIALIZED* gserialized_drop_gidx(GSERIALIZED *g); postgis-2.1.2+dfsg.orig/libpgcommon/gserialized_gist.c0000644000000000000000000002312312057452365021574 0ustar rootroot/********************************************************************** * $Id$ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "access/gist.h" /* For GiST */ #include "access/itup.h" #include "access/skey.h" #include "../postgis_config.h" #include "liblwgeom.h" /* For standard geometry types. */ #include "lwgeom_pg.h" /* For debugging macros. */ #include "gserialized_gist.h" /* Generate human readable form for GIDX. */ #if POSTGIS_DEBUG_LEVEL > 0 char* gidx_to_string(GIDX *a) { char *str, *rv; int i, ndims; if ( a == NULL ) return pstrdup(""); str = (char*)palloc(128); rv = str; ndims = GIDX_NDIMS(a); str += sprintf(str, "GIDX("); for ( i = 0; i < ndims; i++ ) str += sprintf(str, " %.12g", GIDX_GET_MIN(a,i)); str += sprintf(str, ","); for ( i = 0; i < ndims; i++ ) str += sprintf(str, " %.12g", GIDX_GET_MAX(a,i)); str += sprintf(str, " )"); return rv; } #endif static uint8_t gserialized_datum_get_flags(Datum gsdatum) { GSERIALIZED *gpart; POSTGIS_DEBUG(4, "entered function"); gpart = (GSERIALIZED*)PG_DETOAST_DATUM_SLICE(gsdatum, 0, 40); POSTGIS_DEBUGF(4, "got flags %d", gpart->flags); return gpart->flags; } /** * Given a #GSERIALIZED datum, as quickly as possible (peaking into the top * of the memory) return the gbox extents. Does not deserialize the geometry, * but WARNING returns a slightly larger bounding box than actually * encompasses the objects. For geography objects returns geocentric bounding * box, for geometry objects returns cartesian bounding box. */ int gserialized_datum_get_gbox_p(Datum gsdatum, GBOX *gbox) { char gboxmem[GIDX_MAX_SIZE]; GIDX *gidx = (GIDX*)gboxmem; if( LW_FAILURE == gserialized_datum_get_gidx_p(gsdatum, gidx) ) return LW_FAILURE; gbox_from_gidx(gidx, gbox); gbox->flags = gserialized_datum_get_flags(gsdatum); return LW_SUCCESS; } /** * Update the bounding box of a #GSERIALIZED, allocating a fresh one * if there is not enough space to just write the new box in. * WARNING if a new object needs to be created, the * input pointer will have to be freed by the caller! Check * to see if input == output. Returns null if there's a problem * like mismatched dimensions. */ GSERIALIZED* gserialized_set_gidx(GSERIALIZED *g, GIDX *gidx) { int g_ndims = (FLAGS_GET_GEODETIC(g->flags) ? 3 : FLAGS_NDIMS(g->flags)); int box_ndims = GIDX_NDIMS(gidx); GSERIALIZED *g_out = NULL; size_t box_size = 2 * g_ndims * sizeof(float); /* The dimensionality of the inputs has to match or we are SOL. */ if ( g_ndims != box_ndims ) { return NULL; } /* Serialized already has room for a box. */ if ( FLAGS_GET_BBOX(g->flags) ) { g_out = g; } /* Serialized has no box. We need to allocate enough space for the old data plus the box, and leave a gap in the memory segment to write the new values into. */ else { size_t varsize_new = VARSIZE(g) + box_size; uint8_t *ptr; g_out = palloc(varsize_new); /* Copy the head of g into place */ memcpy(g_out, g, 8); /* Copy the body of g into place after leaving space for the box */ ptr = g_out->data; ptr += box_size; memcpy(ptr, g->data, VARSIZE(g) - 8); FLAGS_SET_BBOX(g_out->flags, 1); SET_VARSIZE(g_out, varsize_new); } /* Now write the gidx values into the memory segement */ memcpy(g_out->data, gidx->c, box_size); return g_out; } /** * Remove the bounding box from a #GSERIALIZED. Returns a freshly * allocated #GSERIALIZED every time. */ GSERIALIZED* gserialized_drop_gidx(GSERIALIZED *g) { int g_ndims = (FLAGS_GET_GEODETIC(g->flags) ? 3 : FLAGS_NDIMS(g->flags)); size_t box_size = 2 * g_ndims * sizeof(float); size_t g_out_size = VARSIZE(g) - box_size; GSERIALIZED *g_out = palloc(g_out_size); /* Copy the contents while omitting the box */ if ( FLAGS_GET_BBOX(g->flags) ) { uint8_t *outptr = (uint8_t*)g_out; uint8_t *inptr = (uint8_t*)g; /* Copy the header (size+type) of g into place */ memcpy(outptr, inptr, 8); outptr += 8; inptr += 8 + box_size; /* Copy parts after the box into place */ memcpy(outptr, inptr, g_out_size - 8); FLAGS_SET_BBOX(g_out->flags, 0); SET_VARSIZE(g_out, g_out_size); } /* No box? Nothing to do but copy and return. */ else { memcpy(g_out, g, g_out_size); } return g_out; } /* Convert a double-based GBOX into a float-based GIDX, ensuring the float box is larger than the double box */ static int gidx_from_gbox_p(GBOX box, GIDX *a) { int ndims; ndims = (FLAGS_GET_GEODETIC(box.flags) ? 3 : FLAGS_NDIMS(box.flags)); SET_VARSIZE(a, VARHDRSZ + ndims * 2 * sizeof(float)); GIDX_SET_MIN(a,0,next_float_down(box.xmin)); GIDX_SET_MAX(a,0,next_float_up(box.xmax)); GIDX_SET_MIN(a,1,next_float_down(box.ymin)); GIDX_SET_MAX(a,1,next_float_up(box.ymax)); /* Geodetic indexes are always 3d, geocentric x/y/z */ if ( FLAGS_GET_GEODETIC(box.flags) ) { GIDX_SET_MIN(a,2,next_float_down(box.zmin)); GIDX_SET_MAX(a,2,next_float_up(box.zmax)); } else { /* Cartesian with Z implies Z is third dimension */ if ( FLAGS_GET_Z(box.flags) ) { GIDX_SET_MIN(a,2,next_float_down(box.zmin)); GIDX_SET_MAX(a,2,next_float_up(box.zmax)); if ( FLAGS_GET_M(box.flags) ) { GIDX_SET_MIN(a,3,next_float_down(box.mmin)); GIDX_SET_MAX(a,3,next_float_up(box.mmax)); } } /* Unless there's no Z, in which case M is third dimension */ else if ( FLAGS_GET_M(box.flags) ) { GIDX_SET_MIN(a,2,next_float_down(box.mmin)); GIDX_SET_MAX(a,2,next_float_up(box.mmax)); } } POSTGIS_DEBUGF(5, "converted %s to %s", gbox_to_string(&box), gidx_to_string(a)); return LW_SUCCESS; } GIDX* gidx_from_gbox(GBOX box) { int ndims; GIDX *a; ndims = (FLAGS_GET_GEODETIC(box.flags) ? 3 : FLAGS_NDIMS(box.flags)); a = gidx_new(ndims); gidx_from_gbox_p(box, a); return a; } void gbox_from_gidx(GIDX *a, GBOX *gbox) { gbox->xmin = (double)GIDX_GET_MIN(a,0); gbox->ymin = (double)GIDX_GET_MIN(a,1); gbox->zmin = (double)GIDX_GET_MIN(a,2); gbox->xmax = (double)GIDX_GET_MAX(a,0); gbox->ymax = (double)GIDX_GET_MAX(a,1); gbox->zmax = (double)GIDX_GET_MAX(a,2); } /** * Peak into a #GSERIALIZED datum to find the bounding box. If the * box is there, copy it out and return it. If not, calculate the box from the * full object and return the box based on that. If no box is available, * return #LW_FAILURE, otherwise #LW_SUCCESS. */ int gserialized_datum_get_gidx_p(Datum gsdatum, GIDX *gidx) { GSERIALIZED *gpart; int result = LW_SUCCESS; POSTGIS_DEBUG(4, "entered function"); /* ** The most info we need is the 8 bytes of serialized header plus the 32 bytes ** of floats necessary to hold the 8 floats of the largest XYZM index ** bounding box, so 40 bytes. */ gpart = (GSERIALIZED*)PG_DETOAST_DATUM_SLICE(gsdatum, 0, 40); POSTGIS_DEBUGF(4, "got flags %d", gpart->flags); /* Do we even have a serialized bounding box? */ if ( FLAGS_GET_BBOX(gpart->flags) ) { /* Yes! Copy it out into the GIDX! */ const size_t size = gbox_serialized_size(gpart->flags); POSTGIS_DEBUG(4, "copying box out of serialization"); memcpy(gidx->c, gpart->data, size); SET_VARSIZE(gidx, VARHDRSZ + size); result = LW_SUCCESS; } else { /* No, we need to calculate it from the full object. */ GSERIALIZED *g = (GSERIALIZED*)PG_DETOAST_DATUM(gsdatum); LWGEOM *lwgeom = lwgeom_from_gserialized(g); GBOX gbox; if ( lwgeom_calculate_gbox(lwgeom, &gbox) == LW_FAILURE ) { POSTGIS_DEBUG(4, "could not calculate bbox, returning failure"); lwgeom_free(lwgeom); return LW_FAILURE; } lwgeom_free(lwgeom); result = gidx_from_gbox_p(gbox, gidx); } if ( result == LW_SUCCESS ) { POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx)); } return result; } /* ** Peak into a geography to find the bounding box. If the ** box is there, copy it out and return it. If not, calculate the box from the ** full geography and return the box based on that. If no box is available, ** return LW_FAILURE, otherwise LW_SUCCESS. */ int gserialized_get_gidx_p(GSERIALIZED *g, GIDX *gidx) { int result = LW_SUCCESS; POSTGIS_DEBUG(4, "entered function"); POSTGIS_DEBUGF(4, "got flags %d", g->flags); if ( FLAGS_GET_BBOX(g->flags) ) { int ndims = FLAGS_NDIMS_BOX(g->flags); const size_t size = 2 * ndims * sizeof(float); POSTGIS_DEBUG(4, "copying box out of serialization"); memcpy(gidx->c, g->data, size); SET_VARSIZE(gidx, VARHDRSZ + size); } else { /* No, we need to calculate it from the full object. */ LWGEOM *lwgeom = lwgeom_from_gserialized(g); GBOX gbox; if ( lwgeom_calculate_gbox(lwgeom, &gbox) == LW_FAILURE ) { POSTGIS_DEBUG(4, "could not calculate bbox, returning failure"); lwgeom_free(lwgeom); return LW_FAILURE; } lwgeom_free(lwgeom); result = gidx_from_gbox_p(gbox, gidx); } if ( result == LW_SUCCESS ) { POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx)); } return result; } /* ** GIDX expansion, make d units bigger in all dimensions. */ void gidx_expand(GIDX *a, float d) { int i; POSTGIS_DEBUG(5, "entered function"); if ( a == NULL ) return; for (i = 0; i < GIDX_NDIMS(a); i++) { GIDX_SET_MIN(a, i, GIDX_GET_MIN(a, i) - d); GIDX_SET_MAX(a, i, GIDX_GET_MAX(a, i) + d); } } /* Allocates a new GIDX on the heap of the requested dimensionality */ GIDX* gidx_new(int ndims) { size_t size = GIDX_SIZE(ndims); GIDX *g = (GIDX*)palloc(size); POSTGIS_DEBUGF(5,"created new gidx of %d dimensions, size %d", ndims, (int)size); SET_VARSIZE(g, size); return g; } postgis-2.1.2+dfsg.orig/libpgcommon/lwgeom_transform.c0000644000000000000000000005064412011230037021615 0ustar rootroot/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* PostgreSQL headers */ #include "postgres.h" #include "fmgr.h" #include "miscadmin.h" #include "utils/memutils.h" #include "executor/spi.h" #include "access/hash.h" #include "utils/hsearch.h" /* PostGIS headers */ #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" #include "lwgeom_cache.h" #include "lwgeom_transform.h" /* C headers */ #include #include #include #include /* Expose an internal Proj function */ int pj_transform_nodatum(projPJ srcdefn, projPJ dstdefn, long point_count, int point_offset, double *x, double *y, double *z ); /* * PROJ 4 backend hash table initial hash size * (since 16 is the default portal hash table size, and we would * typically have 2 entries per portal * then we shall use a default size of 32) */ #define PROJ4_BACKEND_HASH_SIZE 32 /** * Backend projPJ hash table * * This hash table stores a key/value pair of MemoryContext/projPJ objects. * Whenever we create a projPJ object using pj_init(), we create a separate * MemoryContext as a child context of the current executor context. * The MemoryContext/projPJ object is stored in this hash table so * that when PROJ4SRSCacheDelete() is called during query cleanup, we can * lookup the projPJ object based upon the MemoryContext parameter and hence * pj_free() it. */ static HTAB *PJHash = NULL; typedef struct struct_PJHashEntry { MemoryContext ProjectionContext; projPJ projection; } PJHashEntry; /* PJ Hash API */ uint32 mcxt_ptr_hash(const void *key, Size keysize); static HTAB *CreatePJHash(void); static void AddPJHashEntry(MemoryContext mcxt, projPJ projection); static projPJ GetPJHashEntry(MemoryContext mcxt); static void DeletePJHashEntry(MemoryContext mcxt); /* Internal Cache API */ /* static PROJ4PortalCache *GetPROJ4SRSCache(FunctionCallInfo fcinfo) ; */ static bool IsInPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid); static projPJ GetProjectionFromPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid); static void AddToPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid, int other_srid); static void DeleteFromPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid); /* Search path for PROJ.4 library */ static bool IsPROJ4LibPathSet = false; void SetPROJ4LibPath(void); /* Memory context cache functions */ static void PROJ4SRSCacheInit(MemoryContext context); static void PROJ4SRSCacheDelete(MemoryContext context); static void PROJ4SRSCacheReset(MemoryContext context); static bool PROJ4SRSCacheIsEmpty(MemoryContext context); static void PROJ4SRSCacheStats(MemoryContext context, int level); #ifdef MEMORY_CONTEXT_CHECKING static void PROJ4SRSCacheCheck(MemoryContext context); #endif /* Memory context definition must match the current version of PostgreSQL */ static MemoryContextMethods PROJ4SRSCacheContextMethods = { NULL, NULL, NULL, PROJ4SRSCacheInit, PROJ4SRSCacheReset, PROJ4SRSCacheDelete, NULL, PROJ4SRSCacheIsEmpty, PROJ4SRSCacheStats #ifdef MEMORY_CONTEXT_CHECKING ,PROJ4SRSCacheCheck #endif }; static void PROJ4SRSCacheInit(MemoryContext context) { /* * Do nothing as the cache is initialised when the transform() * function is first called */ } static void PROJ4SRSCacheDelete(MemoryContext context) { projPJ projection; /* Lookup the projPJ pointer in the global hash table so we can free it */ projection = GetPJHashEntry(context); if (!projection) elog(ERROR, "PROJ4SRSCacheDelete: Trying to delete non-existant projection object with MemoryContext key (%p)", (void *)context); POSTGIS_DEBUGF(3, "deleting projection object (%p) with MemoryContext key (%p)", projection, context); /* Free it */ pj_free(projection); /* Remove the hash entry as it is no longer needed */ DeletePJHashEntry(context); } static void PROJ4SRSCacheReset(MemoryContext context) { /* * Do nothing, but we must supply a function since this call is mandatory according to tgl * (see postgis-devel archives July 2007) */ } static bool PROJ4SRSCacheIsEmpty(MemoryContext context) { /* * Always return false since this call is mandatory according to tgl * (see postgis-devel archives July 2007) */ return FALSE; } static void PROJ4SRSCacheStats(MemoryContext context, int level) { /* * Simple stats display function - we must supply a function since this call is mandatory according to tgl * (see postgis-devel archives July 2007) */ fprintf(stderr, "%s: PROJ4 context\n", context->name); } #ifdef MEMORY_CONTEXT_CHECKING static void PROJ4SRSCacheCheck(MemoryContext context) { /* * Do nothing - stub required for when PostgreSQL is compiled * with MEMORY_CONTEXT_CHECKING defined */ } #endif /* * PROJ4 projPJ Hash Table functions */ /** * A version of tag_hash - we specify this here as the implementation * has changed over the years.... */ uint32 mcxt_ptr_hash(const void *key, Size keysize) { uint32 hashval; hashval = DatumGetUInt32(hash_any(key, keysize)); return hashval; } static HTAB *CreatePJHash(void) { HASHCTL ctl; ctl.keysize = sizeof(MemoryContext); ctl.entrysize = sizeof(PJHashEntry); ctl.hash = mcxt_ptr_hash; return hash_create("PostGIS PROJ4 Backend projPJ MemoryContext Hash", PROJ4_BACKEND_HASH_SIZE, &ctl, (HASH_ELEM | HASH_FUNCTION)); } static void AddPJHashEntry(MemoryContext mcxt, projPJ projection) { bool found; void **key; PJHashEntry *he; /* The hash key is the MemoryContext pointer */ key = (void *)&mcxt; he = (PJHashEntry *) hash_search(PJHash, key, HASH_ENTER, &found); if (!found) { /* Insert the entry into the new hash element */ he->ProjectionContext = mcxt; he->projection = projection; } else { elog(ERROR, "AddPJHashEntry: PROJ4 projection object already exists for this MemoryContext (%p)", (void *)mcxt); } } static projPJ GetPJHashEntry(MemoryContext mcxt) { void **key; PJHashEntry *he; /* The hash key is the MemoryContext pointer */ key = (void *)&mcxt; /* Return the projection object from the hash */ he = (PJHashEntry *) hash_search(PJHash, key, HASH_FIND, NULL); return he->projection; } static void DeletePJHashEntry(MemoryContext mcxt) { void **key; PJHashEntry *he; /* The hash key is the MemoryContext pointer */ key = (void *)&mcxt; /* Delete the projection object from the hash */ he = (PJHashEntry *) hash_search(PJHash, key, HASH_REMOVE, NULL); he->projection = NULL; if (!he) elog(ERROR, "DeletePJHashEntry: There was an error removing the PROJ4 projection object from this MemoryContext (%p)", (void *)mcxt); } bool IsInPROJ4Cache(Proj4Cache PROJ4Cache, int srid) { return IsInPROJ4SRSCache((PROJ4PortalCache *)PROJ4Cache, srid) ; } /* * Per-cache management functions */ static bool IsInPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid) { /* * Return true/false depending upon whether the item * is in the SRS cache. */ int i; for (i = 0; i < PROJ4_CACHE_ITEMS; i++) { if (PROJ4Cache->PROJ4SRSCache[i].srid == srid) return 1; } /* Otherwise not found */ return 0; } projPJ GetProjectionFromPROJ4Cache(Proj4Cache cache, int srid) { return GetProjectionFromPROJ4SRSCache((PROJ4PortalCache *)cache, srid) ; } /** * Return the projection object from the cache (we should * already have checked it exists using IsInPROJ4SRSCache first) */ static projPJ GetProjectionFromPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid) { int i; for (i = 0; i < PROJ4_CACHE_ITEMS; i++) { if (PROJ4Cache->PROJ4SRSCache[i].srid == srid) return PROJ4Cache->PROJ4SRSCache[i].projection; } return NULL; } char* GetProj4StringSPI(int srid) { static int maxproj4len = 512; int spi_result; char *proj_str = palloc(maxproj4len); char proj4_spi_buffer[256]; /* Connect */ spi_result = SPI_connect(); if (spi_result != SPI_OK_CONNECT) { elog(ERROR, "GetProj4StringSPI: Could not connect to database using SPI"); } /* Execute the lookup query */ snprintf(proj4_spi_buffer, 255, "SELECT proj4text FROM spatial_ref_sys WHERE srid = %d LIMIT 1", srid); spi_result = SPI_exec(proj4_spi_buffer, 1); /* Read back the PROJ4 text */ if (spi_result == SPI_OK_SELECT && SPI_processed > 0) { /* Select the first (and only tuple) */ TupleDesc tupdesc = SPI_tuptable->tupdesc; SPITupleTable *tuptable = SPI_tuptable; HeapTuple tuple = tuptable->vals[0]; char *proj4text = SPI_getvalue(tuple, tupdesc, 1); if ( proj4text ) { /* Make a projection object out of it */ strncpy(proj_str, proj4text, maxproj4len - 1); } else { proj_str[0] = 0; } } else { elog(ERROR, "GetProj4StringSPI: Cannot find SRID (%d) in spatial_ref_sys", srid); } spi_result = SPI_finish(); if (spi_result != SPI_OK_FINISH) { elog(ERROR, "GetProj4StringSPI: Could not disconnect from database using SPI"); } return proj_str; } /** * Given an SRID, return the proj4 text. * If the integer is one of the "well known" projections we support * (WGS84 UTM N/S, Polar Stereographic N/S - see SRID_* macros), * return the proj4text for those. */ static char* GetProj4String(int srid) { static int maxproj4len = 512; /* SRIDs in SPATIAL_REF_SYS */ if ( srid < SRID_RESERVE_OFFSET ) { return GetProj4StringSPI(srid); } /* Automagic SRIDs */ else { char *proj_str = palloc(maxproj4len); int id = srid; /* UTM North */ if ( id >= SRID_NORTH_UTM_START && id <= SRID_NORTH_UTM_END ) { snprintf(proj_str, maxproj4len, "+proj=utm +zone=%d +ellps=WGS84 +datum=WGS84 +units=m +no_defs", id - SRID_NORTH_UTM_START + 1); } /* UTM South */ else if ( id >= SRID_SOUTH_UTM_START && id <= SRID_SOUTH_UTM_END ) { snprintf(proj_str, maxproj4len, "+proj=utm +zone=%d +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs", id - SRID_SOUTH_UTM_START + 1); } /* Lambert zones (about 30x30, larger in higher latitudes) */ /* There are three latitude zones, divided at -90,-60,-30,0,30,60,90. */ /* In yzones 2,3 (equator) zones, the longitudinal zones are divided every 30 degrees (12 of them) */ /* In yzones 1,4 (temperate) zones, the longitudinal zones are every 45 degrees (8 of them) */ /* In yzones 0,5 (polar) zones, the longitudinal zones are ever 90 degrees (4 of them) */ else if ( id >= SRID_LAEA_START && id <= SRID_LAEA_END ) { int zone = id - SRID_LAEA_START; int xzone = zone % 20; int yzone = zone / 20; double lat_0 = 30.0 * (yzone - 3) + 15.0; double lon_0 = 0.0; /* The number of xzones is variable depending on yzone */ if ( yzone == 2 || yzone == 3 ) lon_0 = 30.0 * (xzone - 6) + 15.0; else if ( yzone == 1 || yzone == 4 ) lon_0 = 45.0 * (xzone - 4) + 22.5; else if ( yzone == 0 || yzone == 5 ) lon_0 = 90.0 * (xzone - 2) + 45.0; else lwerror("Unknown yzone encountered!"); snprintf(proj_str, maxproj4len, "+proj=laea +ellps=WGS84 +datum=WGS84 +lat_0=%g +lon_0=%g +units=m +no_defs", lat_0, lon_0); } /* Lambert Azimuthal Equal Area South Pole */ else if ( id == SRID_SOUTH_LAMBERT ) { strncpy(proj_str, "+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs", maxproj4len ); } /* Polar Sterographic South */ else if ( id == SRID_SOUTH_STEREO ) { strncpy(proj_str, "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs", maxproj4len); } /* Lambert Azimuthal Equal Area North Pole */ else if ( id == SRID_NORTH_LAMBERT ) { strncpy(proj_str, "+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs", maxproj4len ); } /* Polar Stereographic North */ else if ( id == SRID_NORTH_STEREO ) { strncpy(proj_str, "+proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs", maxproj4len ); } /* World Mercator */ else if ( id == SRID_WORLD_MERCATOR ) { strncpy(proj_str, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs", maxproj4len ); } else { elog(ERROR, "Invalid reserved SRID (%d)", srid); return NULL; } POSTGIS_DEBUGF(3, "returning on SRID=%d: %s", srid, proj_str); return proj_str; } } void AddToPROJ4Cache(Proj4Cache cache, int srid, int other_srid) { AddToPROJ4SRSCache((PROJ4PortalCache *)cache, srid, other_srid) ; } /** * Add an entry to the local PROJ4 SRS cache. If we need to wrap around then * we must make sure the entry we choose to delete does not contain other_srid * which is the definition for the other half of the transformation. */ static void AddToPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid, int other_srid) { MemoryContext PJMemoryContext; projPJ projection = NULL; char *proj_str = NULL; /* ** Turn the SRID number into a proj4 string, by reading from spatial_ref_sys ** or instantiating a magical value from a negative srid. */ proj_str = GetProj4String(srid); if ( ! proj_str ) { elog(ERROR, "GetProj4String returned NULL for SRID (%d)", srid); } projection = lwproj_from_string(proj_str); if ( projection == NULL ) { char *pj_errstr = pj_strerrno(*pj_get_errno_ref()); if ( ! pj_errstr ) pj_errstr = ""; elog(ERROR, "AddToPROJ4SRSCache: could not parse proj4 string '%s' %s", proj_str, pj_errstr); } /* * If the cache is already full then find the first entry * that doesn't contain other_srid and use this as the * subsequent value of PROJ4SRSCacheCount */ if (PROJ4Cache->PROJ4SRSCacheCount == PROJ4_CACHE_ITEMS) { bool found = false; int i; for (i = 0; i < PROJ4_CACHE_ITEMS; i++) { if (PROJ4Cache->PROJ4SRSCache[i].srid != other_srid && found == false) { POSTGIS_DEBUGF(3, "choosing to remove item from query cache with SRID %d and index %d", PROJ4Cache->PROJ4SRSCache[i].srid, i); DeleteFromPROJ4SRSCache(PROJ4Cache, PROJ4Cache->PROJ4SRSCache[i].srid); PROJ4Cache->PROJ4SRSCacheCount = i; found = true; } } } /* * Now create a memory context for this projection and * store it in the backend hash */ POSTGIS_DEBUGF(3, "adding SRID %d with proj4text \"%s\" to query cache at index %d", srid, proj_str, PROJ4Cache->PROJ4SRSCacheCount); PJMemoryContext = MemoryContextCreate(T_AllocSetContext, 8192, &PROJ4SRSCacheContextMethods, PROJ4Cache->PROJ4SRSCacheContext, "PostGIS PROJ4 PJ Memory Context"); /* Create the backend hash if it doesn't already exist */ if (!PJHash) PJHash = CreatePJHash(); /* * Add the MemoryContext to the backend hash so we can * clean up upon portal shutdown */ POSTGIS_DEBUGF(3, "adding projection object (%p) to hash table with MemoryContext key (%p)", projection, PJMemoryContext); AddPJHashEntry(PJMemoryContext, projection); PROJ4Cache->PROJ4SRSCache[PROJ4Cache->PROJ4SRSCacheCount].srid = srid; PROJ4Cache->PROJ4SRSCache[PROJ4Cache->PROJ4SRSCacheCount].projection = projection; PROJ4Cache->PROJ4SRSCache[PROJ4Cache->PROJ4SRSCacheCount].projection_mcxt = PJMemoryContext; PROJ4Cache->PROJ4SRSCacheCount++; /* Free the projection string */ pfree(proj_str); } void DeleteFromPROJ4Cache(Proj4Cache cache, int srid) { DeleteFromPROJ4SRSCache((PROJ4PortalCache *)cache, srid) ; } static void DeleteFromPROJ4SRSCache(PROJ4PortalCache *PROJ4Cache, int srid) { /* * Delete the SRID entry from the cache */ int i; for (i = 0; i < PROJ4_CACHE_ITEMS; i++) { if (PROJ4Cache->PROJ4SRSCache[i].srid == srid) { POSTGIS_DEBUGF(3, "removing query cache entry with SRID %d at index %d", srid, i); /* * Zero out the entries and free the PROJ4 handle * by deleting the memory context */ MemoryContextDelete(PROJ4Cache->PROJ4SRSCache[i].projection_mcxt); PROJ4Cache->PROJ4SRSCache[i].projection = NULL; PROJ4Cache->PROJ4SRSCache[i].projection_mcxt = NULL; PROJ4Cache->PROJ4SRSCache[i].srid = SRID_UNKNOWN; } } } /** * Specify an alternate directory for the PROJ.4 grid files * (this should augment the PROJ.4 compile-time path) * * It's main purpose is to allow Win32 PROJ.4 installations * to find a set grid shift files, although other platforms * may find this useful too. * * Note that we currently ignore this on PostgreSQL < 8.0 * since the method of determining the current installation * path are different on older PostgreSQL versions. */ void SetPROJ4LibPath(void) { char *path; char *share_path; const char **proj_lib_path; if (!IsPROJ4LibPathSet) { /* * Get the sharepath and append /contrib/postgis/proj to form a suitable * directory in which to store the grid shift files */ proj_lib_path = palloc(sizeof(char *)); share_path = palloc(MAXPGPATH); get_share_path(my_exec_path, share_path); path = palloc(MAXPGPATH); *proj_lib_path = path; snprintf(path, MAXPGPATH - 1, "%s/contrib/postgis-%s.%s/proj", share_path, POSTGIS_MAJOR_VERSION, POSTGIS_MINOR_VERSION); /* Set the search path for PROJ.4 */ pj_set_searchpath(1, proj_lib_path); /* Ensure we only do this once... */ IsPROJ4LibPathSet = true; } } Proj4Cache GetPROJ4Cache(FunctionCallInfo fcinfo) { return (Proj4Cache)GetPROJ4SRSCache(fcinfo); } #if 0 static PROJ4PortalCache *GetPROJ4SRSCache(FunctionCallInfo fcinfo) { PROJ4PortalCache *PROJ4Cache = (GetGeomCache(fcinfo))->proj; /* * If we have not already created PROJ4 cache for this portal * then create it */ if (fcinfo->flinfo->fn_extra == NULL) { MemoryContext old_context; old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt); PROJ4Cache = palloc(sizeof(PROJ4PortalCache)); MemoryContextSwitchTo(old_context); if (PROJ4Cache) { int i; POSTGIS_DEBUGF(3, "Allocating PROJ4Cache for portal with transform() MemoryContext %p", fcinfo->flinfo->fn_mcxt); /* Put in any required defaults */ for (i = 0; i < PROJ4_CACHE_ITEMS; i++) { PROJ4Cache->PROJ4SRSCache[i].srid = SRID_UNKNOWN; PROJ4Cache->PROJ4SRSCache[i].projection = NULL; PROJ4Cache->PROJ4SRSCache[i].projection_mcxt = NULL; } PROJ4Cache->PROJ4SRSCacheCount = 0; PROJ4Cache->PROJ4SRSCacheContext = fcinfo->flinfo->fn_mcxt; /* Store the pointer in fcinfo->flinfo->fn_extra */ fcinfo->flinfo->fn_extra = PROJ4Cache; } } else { /* Use the existing cache */ PROJ4Cache = fcinfo->flinfo->fn_extra; } return PROJ4Cache ; } #endif int GetProjectionsUsingFCInfo(FunctionCallInfo fcinfo, int srid1, int srid2, projPJ *pj1, projPJ *pj2) { Proj4Cache *proj_cache = NULL; /* Set the search path if we haven't already */ SetPROJ4LibPath(); /* get or initialize the cache for this round */ proj_cache = GetPROJ4Cache(fcinfo); if ( !proj_cache ) return LW_FAILURE; /* Add the output srid to the cache if it's not already there */ if (!IsInPROJ4Cache(proj_cache, srid1)) AddToPROJ4Cache(proj_cache, srid1, srid2); /* Add the input srid to the cache if it's not already there */ if (!IsInPROJ4Cache(proj_cache, srid2)) AddToPROJ4Cache(proj_cache, srid2, srid1); /* Get the projections */ *pj1 = GetProjectionFromPROJ4Cache(proj_cache, srid1); *pj2 = GetProjectionFromPROJ4Cache(proj_cache, srid2); return LW_SUCCESS; } int spheroid_init_from_srid(FunctionCallInfo fcinfo, int srid, SPHEROID *s) { projPJ pj1, pj2; #if POSTGIS_PROJ_VERSION >= 48 double major_axis, minor_axis, eccentricity_squared; #endif if ( GetProjectionsUsingFCInfo(fcinfo, srid, srid, &pj1, &pj2) == LW_FAILURE) return LW_FAILURE; if ( ! pj_is_latlong(pj1) ) return LW_FAILURE; #if POSTGIS_PROJ_VERSION >= 48 /* For newer versions of Proj we can pull the spheroid paramaeters and initialize */ /* using them */ pj_get_spheroid_defn(pj1, &major_axis, &eccentricity_squared); minor_axis = major_axis * sqrt(1-eccentricity_squared); spheroid_init(s, major_axis, minor_axis); #else /* For old versions of Proj we cannot lookup the spheroid parameters from the API */ /* So we use the WGS84 parameters (boo!) */ spheroid_init(s, WGS84_MAJOR_AXIS, WGS84_MINOR_AXIS); #endif return LW_SUCCESS; } void srid_is_latlong(FunctionCallInfo fcinfo, int srid) { projPJ pj1; projPJ pj2; if ( srid == SRID_DEFAULT || srid == SRID_UNKNOWN ) return; if ( GetProjectionsUsingFCInfo(fcinfo, srid, srid, &pj1, &pj2) == LW_FAILURE) return; if ( pj_is_latlong(pj1) ) return; ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Only lon/lat coordinate systems are supported in geography."))); } postgis-2.1.2+dfsg.orig/libpgcommon/pgsql_compat.h0000644000000000000000000000102211722777314020736 0ustar rootroot#ifndef _PGSQL_COMPAT_H #define _PGSQL_COMPAT_H 1 /* Make sure PG_NARGS is defined for older PostgreSQL versions */ #ifndef PG_NARGS #define PG_NARGS() (fcinfo->nargs) #endif /* Define ARR_OVERHEAD_NONULLS for PostgreSQL < 8.2 */ #if POSTGIS_PGSQL_VERSION < 82 #define ARR_OVERHEAD_NONULLS(x) ARR_OVERHEAD((x)) #endif /* PostgreSQL < 8.3 uses VARATT_SIZEP rather than SET_VARSIZE for varlena types */ #if POSTGIS_PGSQL_VERSION < 83 #define SET_VARSIZE(var, size) VARATT_SIZEP(var) = size #endif #endif /* _PGSQL_COMPAT_H */ postgis-2.1.2+dfsg.orig/libpgcommon/lwgeom_pg.h0000644000000000000000000001132312067042633020222 0ustar rootroot/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2009-2011 Paul Ramsey * Copyright (C) 2008 Mark Cave-Ayland * Copyright (C) 2004-2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef _LWGEOM_PG_H #define _LWGEOM_PG_H 1 #include "postgres.h" #include "utils/geo_decls.h" #include "fmgr.h" #include "liblwgeom.h" #include "pgsql_compat.h" /* Install PosgreSQL handlers for liblwgeom use */ void pg_install_lwgeom_handlers(void); /* Debugging macros */ #if POSTGIS_DEBUG_LEVEL > 0 /* Display a simple message at NOTICE level */ #define POSTGIS_DEBUG(level, msg) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ ereport(NOTICE, (errmsg_internal("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__))); \ } while (0); /* Display a formatted message at NOTICE level (like printf, with variadic arguments) */ #define POSTGIS_DEBUGF(level, msg, ...) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ ereport(NOTICE, (errmsg_internal("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__, __VA_ARGS__))); \ } while (0); #else /* Empty prototype that can be optimised away by the compiler for non-debug builds */ #define POSTGIS_DEBUG(level, msg) \ ((void) 0) /* Empty prototype that can be optimised away by the compiler for non-debug builds */ #define POSTGIS_DEBUGF(level, msg, ...) \ ((void) 0) #endif /* * Standard macro for reporting parser errors to PostgreSQL */ extern void pg_parser_errhint(LWGEOM_PARSER_RESULT *lwg_parser_result); extern void pg_unparser_errhint(LWGEOM_UNPARSER_RESULT *lwg_unparser_result); #define PG_PARSER_ERROR(lwg_parser_result) \ do { \ pg_parser_errhint(&lwg_parser_result); \ } while(0); /* * Standard macro for reporting unparser errors to PostgreSQL */ #define PG_UNPARSER_ERROR(lwg_unparser_result) \ do { \ pg_unparser_errhint(&lwg_unparser_result); \ } while(0); /* ** GSERIALIED prototypes used outside the index functions */ /** * Remove the embedded bounding box */ GSERIALIZED* gserialized_drop_gidx(GSERIALIZED *g); /** * Utility method to call the serialization and then set the * PgSQL varsize header appropriately with the serialized size. */ GSERIALIZED *geometry_serialize(LWGEOM *lwgeom); /** * Utility method to call the serialization and then set the * PgSQL varsize header appropriately with the serialized size. */ GSERIALIZED* geography_serialize(LWGEOM *lwgeom); /** * Pull out a gbox bounding box as fast as possible. * Tries to read cached box from front of serialized vardata. * If no cached box, calculates box from scratch. * Fails on empty. */ int gserialized_datum_get_gbox_p(Datum gsdatum, GBOX *gbox); /** * Convert cstrings (null-terminated byte array) to textp pointers * (PgSQL varlena structure with VARSIZE header). */ text* cstring2text(const char *cstring); /** * Convert textp (PgSQL varlena structure with VARSIZE header) to * cstrings (null-terminated byte array). */ char* text2cstring(const text *textptr); /* * For PostgreSQL >= 8.5 redefine the STATRELATT macro to its * new value of STATRELATTINH */ #if POSTGIS_PGSQL_VERSION >= 85 #define STATRELATT STATRELATTINH #endif /* PG-exposed */ Datum BOX2D_same(PG_FUNCTION_ARGS); Datum BOX2D_overlap(PG_FUNCTION_ARGS); Datum BOX2D_overleft(PG_FUNCTION_ARGS); Datum BOX2D_left(PG_FUNCTION_ARGS); Datum BOX2D_right(PG_FUNCTION_ARGS); Datum BOX2D_overright(PG_FUNCTION_ARGS); Datum BOX2D_overbelow(PG_FUNCTION_ARGS); Datum BOX2D_below(PG_FUNCTION_ARGS); Datum BOX2D_above(PG_FUNCTION_ARGS); Datum BOX2D_overabove(PG_FUNCTION_ARGS); Datum BOX2D_contained(PG_FUNCTION_ARGS); Datum BOX2D_contain(PG_FUNCTION_ARGS); Datum BOX2D_intersects(PG_FUNCTION_ARGS); Datum BOX2D_union(PG_FUNCTION_ARGS); Datum LWGEOM_same(PG_FUNCTION_ARGS); Datum BOX3D_construct(PG_FUNCTION_ARGS); Datum LWGEOM_force_2d(PG_FUNCTION_ARGS); Datum LWGEOM_force_3dm(PG_FUNCTION_ARGS); Datum LWGEOM_force_3dz(PG_FUNCTION_ARGS); Datum LWGEOM_force_4d(PG_FUNCTION_ARGS); Datum LWGEOM_force_collection(PG_FUNCTION_ARGS); Datum LWGEOM_force_multi(PG_FUNCTION_ARGS); Datum LWGEOMFromWKB(PG_FUNCTION_ARGS); Datum WKBFromLWGEOM(PG_FUNCTION_ARGS); Datum LWGEOM_getBBOX(PG_FUNCTION_ARGS); Datum LWGEOM_addBBOX(PG_FUNCTION_ARGS); Datum LWGEOM_dropBBOX(PG_FUNCTION_ARGS); #endif /* !defined _LWGEOM_PG_H */ postgis-2.1.2+dfsg.orig/libpgcommon/cunit/0000755000000000000000000000000012317530606017213 5ustar rootrootpostgis-2.1.2+dfsg.orig/libpgcommon/cunit/Makefile.in0000644000000000000000000000075211732444773021275 0ustar rootroot# ********************************************************************** # * $Id: Makefile.in # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** all check clean : distclean: clean rm -f Makefile postgis-2.1.2+dfsg.orig/libpgcommon/Makefile.in0000644000000000000000000000252611766740407020154 0ustar rootroot# ********************************************************************** # * $Id: Makefile.in # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** CC=@CC@ CFLAGS=@CFLAGS@ -I../liblwgeom @PGSQL_BE_CPPFLAGS@ @PROJ_CPPFLAGS@ @PICFLAGS@ @WARNFLAGS@ @GETTEXT_CFLAGS@ LDFLAGS=@GETTEXT_LDFLAGS@ @LIBINTL@ NUMERICFLAGS=@NUMERICFLAGS@ YACC=@YACC@ LEX=@LEX@ # Standalone COMMON objects SA_OBJS = \ gserialized_gist.o \ lwgeom_transform.o \ lwgeom_cache.o \ lwgeom_pg.o SA_HEADERS = \ lwgeom_pg.h \ lwgeom_transform.h \ lwgeom_cache.h \ gserialized_gist.h \ pgsql_compat.h all: libpgcommon.a # nothing to install or uninstall install uninstall: libpgcommon.a: $(SA_OBJS) $(SA_HEADERS) ar rs libpgcommon.a $(SA_OBJS) maintainer-clean: clean clean: $(MAKE) -C cunit clean rm -f $(SA_OBJS) rm -f $(NM_OBJS) rm -f libpgcommon.a distclean: clean $(MAKE) -C cunit distclean rm -f Makefile check: libpgcommon.a $(MAKE) -C cunit check # Command to build each of the .o files $(SA_OBJS): %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< $(SA_OBJS): ../postgis_config.h postgis-2.1.2+dfsg.orig/libpgcommon/lwgeom_pg.c0000644000000000000000000001174512143123367020224 0ustar rootroot/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * http://postgis.refractions.net * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2009-2011 Paul Ramsey * Copyright (C) 2008 Mark Cave-Ayland * Copyright (C) 2004-2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include #include #include #include #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" #include #include #include #define PARANOIA_LEVEL 1 /** * Utility to convert cstrings to textp pointers */ text* cstring2text(const char *cstring) { text *output; size_t sz; /* Guard against null input */ if( !cstring ) return NULL; sz = strlen(cstring); output = palloc(sz + VARHDRSZ); if ( ! output ) return NULL; SET_VARSIZE(output, sz + VARHDRSZ); if ( sz ) memcpy(VARDATA(output),cstring,sz); return output; } char* text2cstring(const text *textptr) { size_t size = VARSIZE(textptr) - VARHDRSZ; char *str = lwalloc(size+1); memcpy(str, VARDATA(textptr), size); str[size]='\0'; return str; } /* * Error message parsing functions * * Produces nicely formatted messages for parser/unparser errors with optional HINT */ void pg_parser_errhint(LWGEOM_PARSER_RESULT *lwg_parser_result) { char *hintbuffer; /* Only display the parser position if the location is > 0; this provides a nicer output when the first token within the input stream cannot be matched */ if (lwg_parser_result->errlocation > 0) { /* Return a copy of the input string start truncated * at the error location */ hintbuffer = lwmessage_truncate( (char *)lwg_parser_result->wkinput, 0, lwg_parser_result->errlocation - 1, 40, 0); ereport(ERROR, (errmsg("%s", lwg_parser_result->message), errhint("\"%s\" <-- parse error at position %d within geometry", hintbuffer, lwg_parser_result->errlocation)) ); } else { ereport(ERROR, (errmsg("%s", lwg_parser_result->message), errhint("You must specify a valid OGC WKT geometry type such as POINT, LINESTRING or POLYGON")) ); } } void pg_unparser_errhint(LWGEOM_UNPARSER_RESULT *lwg_unparser_result) { /* For the unparser simply output the error message without any associated HINT */ elog(ERROR, "%s", lwg_unparser_result->message); } static void * pg_alloc(size_t size) { void * result; CHECK_FOR_INTERRUPTS(); /* give interrupter a chance */ POSTGIS_DEBUGF(5, " pg_alloc(%d) called", (int)size); result = palloc(size); POSTGIS_DEBUGF(5, " pg_alloc(%d) returning %p", (int)size, result); if ( ! result ) { ereport(ERROR, (errmsg_internal("Out of virtual memory"))); return NULL; } return result; } static void * pg_realloc(void *mem, size_t size) { void * result; CHECK_FOR_INTERRUPTS(); /* give interrupter a chance */ POSTGIS_DEBUGF(5, " pg_realloc(%p, %d) called", mem, (int)size); result = repalloc(mem, size); POSTGIS_DEBUGF(5, " pg_realloc(%p, %d) returning %p", mem, (int)size, result); return result; } static void pg_free(void *ptr) { pfree(ptr); } static void pg_error(const char *fmt, va_list ap) { #define ERRMSG_MAXLEN 256 char errmsg[ERRMSG_MAXLEN+1]; vsnprintf (errmsg, ERRMSG_MAXLEN, fmt, ap); errmsg[ERRMSG_MAXLEN]='\0'; ereport(ERROR, (errmsg_internal("%s", errmsg))); } static void pg_notice(const char *fmt, va_list ap) { char *msg; /* * This is a GNU extension. * Dunno how to handle errors here. */ if (!lw_vasprintf (&msg, fmt, ap)) { va_end (ap); return; } ereport(NOTICE, (errmsg_internal("%s", msg))); free(msg); } void pg_install_lwgeom_handlers(void) { /* install PostgreSQL handlers */ lwgeom_set_handlers(pg_alloc, pg_realloc, pg_free, pg_error, pg_notice); } /** * Utility method to call the serialization and then set the * PgSQL varsize header appropriately with the serialized size. */ /** * Utility method to call the serialization and then set the * PgSQL varsize header appropriately with the serialized size. */ GSERIALIZED* geography_serialize(LWGEOM *lwgeom) { static int is_geodetic = 1; size_t ret_size = 0; GSERIALIZED *g = NULL; g = gserialized_from_lwgeom(lwgeom, is_geodetic, &ret_size); if ( ! g ) lwerror("Unable to serialize lwgeom."); SET_VARSIZE(g, ret_size); return g; } /** * Utility method to call the serialization and then set the * PgSQL varsize header appropriately with the serialized size. */ GSERIALIZED* geometry_serialize(LWGEOM *lwgeom) { static int is_geodetic = 0; size_t ret_size = 0; GSERIALIZED *g = NULL; g = gserialized_from_lwgeom(lwgeom, is_geodetic, &ret_size); if ( ! g ) lwerror("Unable to serialize lwgeom."); SET_VARSIZE(g, ret_size); return g; } postgis-2.1.2+dfsg.orig/libpgcommon/lwgeom_cache.h0000644000000000000000000000573112105011517020653 0ustar rootroot/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef LWGEOM_CACHE_H_ #define LWGEOM_CACHE_H_ 1 #include "postgres.h" #include "fmgr.h" #include "liblwgeom_internal.h" #include "lwgeodetic_tree.h" #include "lwgeom_pg.h" #define PROJ_CACHE_ENTRY 0 #define PREP_CACHE_ENTRY 1 #define RTREE_CACHE_ENTRY 2 #define CIRC_CACHE_ENTRY 3 #define RECT_CACHE_ENTRY 4 #define NUM_CACHE_ENTRIES 16 /* * A generic GeomCache just needs space for the cache type, * the cache keys (GSERIALIZED geometries), the key sizes, * and the argument number the cached index/tree is going * to refer to. */ typedef struct { int type; GSERIALIZED* geom1; GSERIALIZED* geom2; size_t geom1_size; size_t geom2_size; int32 argnum; } GeomCache; /* * Other specific geometry cache types are the * RTreeGeomCache - lwgeom_rtree.h * PrepGeomCache - lwgeom_geos_prepared.h */ /* * Proj4 caching has it's own mechanism, but is * integrated into the generic caching system because * some geography functions make cached SRID lookup * calls and also CircTree accelerated calls, so * there needs to be a management object on * fcinfo->flinfo->fn_extra to avoid collisions. */ /* An entry in the PROJ4 SRS cache */ typedef struct struct_PROJ4SRSCacheItem { int srid; projPJ projection; MemoryContext projection_mcxt; } PROJ4SRSCacheItem; /* PROJ 4 lookup transaction cache methods */ #define PROJ4_CACHE_ITEMS 8 /* * The proj4 cache holds a fixed number of reprojection * entries. In normal usage we don't expect it to have * many entries, so we always linearly scan the list. */ typedef struct struct_PROJ4PortalCache { int type; PROJ4SRSCacheItem PROJ4SRSCache[PROJ4_CACHE_ITEMS]; int PROJ4SRSCacheCount; MemoryContext PROJ4SRSCacheContext; } PROJ4PortalCache; /** * Generic signature for functions to manage a geometry * cache structure. */ typedef struct { int entry_number; /* What kind of structure is this? */ int (*GeomIndexBuilder)(const LWGEOM* lwgeom, GeomCache* cache); /* Build an index/tree and add it to your cache */ int (*GeomIndexFreer)(GeomCache* cache); /* Free the index/tree in your cache */ GeomCache* (*GeomCacheAllocator)(void); /* Allocate the kind of cache object you use (GeomCache+some extra space) */ } GeomCacheMethods; /* * Cache retrieval functions */ PROJ4PortalCache* GetPROJ4SRSCache(FunctionCallInfoData *fcinfo); GeomCache* GetGeomCache(FunctionCallInfoData *fcinfo, const GeomCacheMethods* cache_methods, const GSERIALIZED* g1, const GSERIALIZED* g2); #endif /* LWGEOM_CACHE_H_ */ postgis-2.1.2+dfsg.orig/libpgcommon/lwgeom_transform.h0000644000000000000000000000464312011230037021620 0ustar rootroot/********************************************************************** * $Id: lwgeom_transform.h -1M 2011-08-11 11:15:57Z (local) $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "liblwgeom.h" #include "lwgeom_pg.h" char* GetProj4StringSPI(int srid); void SetPROJ4LibPath(void) ; /** * Opaque type to use in the projection cache API. */ typedef void *Proj4Cache ; void SetPROJ4LibPath(void); Proj4Cache GetPROJ4Cache(FunctionCallInfo fcinfo) ; bool IsInPROJ4Cache(Proj4Cache cache, int srid) ; void AddToPROJ4Cache(Proj4Cache cache, int srid, int other_srid); void DeleteFromPROJ4Cache(Proj4Cache cache, int srid) ; projPJ GetProjectionFromPROJ4Cache(Proj4Cache cache, int srid); int GetProjectionsUsingFCInfo(FunctionCallInfo fcinfo, int srid1, int srid2, projPJ *pj1, projPJ *pj2); int spheroid_init_from_srid(FunctionCallInfo fcinfo, int srid, SPHEROID *s); void srid_is_latlong(FunctionCallInfo fcinfo, int srid); /** * Builtin SRID values * @{ */ /** Start of the reserved offset */ #define SRID_RESERVE_OFFSET 999000 /** World Mercator, equivalent to EPSG:3395 */ #define SRID_WORLD_MERCATOR 999000 /** Start of UTM North zone, equivalent to EPSG:32601 */ #define SRID_NORTH_UTM_START 999001 /** End of UTM North zone, equivalent to EPSG:32660 */ #define SRID_NORTH_UTM_END 999060 /** Lambert Azimuthal Equal Area (LAEA) North Pole, equivalent to EPSG:3574 */ #define SRID_NORTH_LAMBERT 999061 /** PolarSteregraphic North, equivalent to EPSG:3995 */ #define SRID_NORTH_STEREO 999062 /** Start of UTM South zone, equivalent to EPSG:32701 */ #define SRID_SOUTH_UTM_START 999101 /** Start of UTM South zone, equivalent to EPSG:32760 */ #define SRID_SOUTH_UTM_END 999160 /** Lambert Azimuthal Equal Area (LAEA) South Pole, equivalent to EPSG:3409 */ #define SRID_SOUTH_LAMBERT 999161 /** PolarSteregraphic South, equivalent to EPSG:3031 */ #define SRID_SOUTH_STEREO 999162 /** LAEA zones start (6 latitude bands x up to 20 longitude bands) */ #define SRID_LAEA_START 999163 /** LAEA zones end (6 latitude bands x up to 20 longitude bands) */ #define SRID_LAEA_END 999283 /** @} */ postgis-2.1.2+dfsg.orig/libpgcommon/common.h0000644000000000000000000000113311722777314017540 0ustar rootroot/********************************************************************** * $Id: common.h 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2011 OSGeo * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef PG_LIBCOMMON_H #define PG_LIBCOMMON_H #include "pgsql_compat.h" #include "lwgeom_pg.h" #include "lwgeom_transform.h" #endif /* PG_LIBCOMMON_H */ postgis-2.1.2+dfsg.orig/Version.config0000644000000000000000000000036212315455701016400 0ustar rootroot# Version numbering central repository, to be included from various # places during the build process # See HOWTO_RELEASE file in SVN for definitions of those three. POSTGIS_MAJOR_VERSION=2 POSTGIS_MINOR_VERSION=1 POSTGIS_MICRO_VERSION=2 postgis-2.1.2+dfsg.orig/configure.ac0000644000000000000000000012676412314516156016072 0ustar rootrootdnl ********************************************************************** dnl * $Id: configure.ac 2797 2008-05-31 09:56:44Z mcayland $ dnl * dnl * PostGIS - Spatial Types for PostgreSQL dnl * http://postgis.refractions.net dnl * Copyright 2008 Mark Cave-Ayland dnl * dnl * This is free software; you can redistribute and/or modify it under dnl * the terms of the GNU General Public Licence. See the COPYING file. dnl * dnl ********************************************************************** AC_INIT() AC_CONFIG_HEADERS([postgis_config.h]) AC_CONFIG_MACRO_DIR([macros]) dnl Invoke libtool: we do this as it is the easiest way to find the PIC dnl flags required to build liblwgeom AC_PROG_LIBTOOL dnl dnl Compilers dnl AC_PROG_CC AC_PROG_CPP AC_PROG_CXX AC_PROG_GREP AC_PATH_PROG([ANT], [ant], []) AC_SUBST([ANT]) dnl dnl SQL Preprocessor dnl AC_PATH_PROG([CPPBIN], [cpp], []) if test "x$CPPBIN" != "x"; then SQLPP="${CPPBIN} -w -traditional-cpp -P" else AC_PATH_PROG([GPP], [gpp_], []) if test "x$GPP" != "x"; then SQLPP="${GPP} -C -s \'" dnl Use better string support else if test "x${CPP}" != "x"; then SQLPP="${CPP} -w -traditional-cpp" else AC_MSG_ERROR([Required "cpp" command not found]) fi fi fi AC_SUBST([SQLPP]) dnl dnl Define PIC flags in PICFLAGS (note: this variable is set as part of libtool initialisation above) dnl PICFLAGS="$lt_prog_compiler_pic" AC_SUBST([PICFLAGS]) dnl dnl For GCC enable additional warning flags -Wall and -Wmissing-prototypes (using macro included with libtool) dnl WARNFLAGS="" AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -Wall], [_cv_wall], [-Wall], [], [WARNFLAGS="$WARNFLAGS -Wall"], []) AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -Wmissing-prototypes], [_cv_misprot], [-Wmissing-prototypes], [], [WARNFLAGS="$WARNFLAGS -Wmissing-prototypes"], []) AC_SUBST([WARNFLAGS]) dnl dnl For some GCC versions and platforms, floating point issues need to be dnl ironed out. NUMERICFLAGS="" AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -ffloat-store], [dummy_cv_ffloat_store], [-ffloat-store], [], [NUMERICFLAGS="$NUMERICFLAGS -ffloat-store"], []) AC_SUBST([NUMERICFLAGS]) dnl dnl Define executable suffix for use with the loader Makefiles dnl EXESUFFIX="$ac_cv_exeext" AC_SUBST([EXESUFFIX]) dnl dnl Version Information imported from Version.config dnl POSTGIS_MAJOR_VERSION=`cat Version.config | grep POSTGIS_MAJOR_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'` POSTGIS_MINOR_VERSION=`cat Version.config | grep POSTGIS_MINOR_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'` POSTGIS_MICRO_VERSION=`cat Version.config | grep POSTGIS_MICRO_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'` AC_DEFINE_UNQUOTED([POSTGIS_MAJOR_VERSION], ["$POSTGIS_MAJOR_VERSION"], [PostGIS major version]) AC_DEFINE_UNQUOTED([POSTGIS_MINOR_VERSION], ["$POSTGIS_MINOR_VERSION"], [PostGIS minor version]) AC_DEFINE_UNQUOTED([POSTGIS_MICRO_VERSION], ["$POSTGIS_MICRO_VERSION"], [PostGIS micro version]) AC_SUBST([POSTGIS_MAJOR_VERSION]) AC_SUBST([POSTGIS_MINOR_VERSION]) AC_SUBST([POSTGIS_MICRO_VERSION]) dnl dnl Search for flex/bison to build the parser dnl AC_PROG_LEX AC_PROG_YACC AC_SUBST([LEX]) AC_SUBST([YACC]) dnl dnl Search for OS-specific headers dnl AC_CHECK_HEADER([ieeefp.h], [HAVE_IEEEFP_H=1], [HAVE_IEEEFP_H=0]) AC_DEFINE_UNQUOTED([HAVE_IEEEFP_H], [$HAVE_IEEEFP_H], [ieeefp.h header]) AC_CHECK_HEADER([termios.h], [HAVE_TERMIOS_H=1], [HAVE_TERMIOS_H=0]) AC_DEFINE_UNQUOTED([HAVE_TERMIOS_H], [$HAVE_TERMIOS_H], [termios.h header]) dnl dnl Check for platform-specific functions dnl AC_CHECK_FUNC(vasprintf, [HAVE_VASPRINTF=1], [HAVE_VASPRINTF=0]) AC_DEFINE([HAVE_VASPRINTF]) AC_CHECK_FUNC(asprintf, [HAVE_ASPRINTF=1], [HAVE_ASPRINTF=0]) AC_DEFINE([HAVE_ASPRINTF]) AC_FUNC_FSEEKO() dnl dnl MingW requires use of pwd -W to give proper Windows (not MingW) paths dnl for in-place regression tests dnl case $host_os in *mingw*) MINGWBUILD=1 ;; *) MINGWBUILD=0 ;; esac AC_SUBST([MINGWBUILD]) AC_PATH_PROG([PERL], [perl], []) if test "x$PERL" = "x"; then AC_MSG_ERROR([Perl was not found. Building PostGIS requires Perl.]) fi AC_SUBST([PERL]) dnl =========================================================================== dnl Find components needed to build documentation dnl =========================================================================== dnl dnl Search for xsltproc which is required for building documentation dnl AC_PATH_PROG([IMAGEMAGICK], [convert], []) if test "x$IMAGEMAGICK" = "x"; then AC_MSG_WARN([ImageMagick does not seem to be installed. Documentation cannot be built]) fi AC_PATH_PROG([XSLTPROC], [xsltproc], []) if test "x$XSLTPROC" = "x"; then AC_MSG_WARN([xsltproc is not installed so documentation cannot be built]) fi AC_PATH_PROG([XMLLINT], [xmllint], []) if test "x$XMLLINT" = "x"; then AC_MSG_WARN([xmllint is not installed so documentation cannot be checked]) fi AC_PATH_PROG([DBLATEX], [dblatex], []) if test "x$DBLATEX" = "x"; then AC_MSG_WARN([dblatex is not installed so PDF documentation cannot be built]) fi dnl dnl Allow the user to specify the location of the html/docbook.xsl stylesheet dnl AC_ARG_WITH([xsldir], [AS_HELP_STRING([--with-xsldir=PATH], [specify the directory containing the docbook.xsl stylesheet])], [XSLBASE="$withval"], [XSLBASE=""]) XSLBASE_AUTO="" if test "x$XSLBASE" = "x"; then dnl If the user did not specify a directory for the docbook dnl stylesheet, choose the first directory dnl that matches from the following list SEARCHPATH=" /usr/share/sgml/docbook/xsl-stylesheets /usr/share/xml/docbook/stylesheet/nwalsh /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /opt/local/share/xsl/docbook-xsl /usr/local/share/xsl/docbook-xsl /usr/share/xsl/docbook-xsl " for p in ${SEARCHPATH}; do if test -r "${p}"/html/docbook.xsl; then XSLBASE_AUTO="${p}" break fi done dnl Check to see if the automatically searched paths above located a dnl valid Docbook stylesheet if test "x$XSLBASE_AUTO" = "x"; then AC_MSG_WARN([could not locate Docbook stylesheets required to build the documentation]) fi else dnl The user specified an alternate directory so make sure everything dnl looks sensible if test ! -d "$XSLBASE"; then AC_MSG_ERROR([the docbook stylesheet directory specified using --with-xsldir does not exist]) fi if test ! -f "$XSLBASE/html/docbook.xsl"; then AC_MSG_ERROR([the docbook stylesheet directory specified using --with-xsldir does not contain the html/docbook.xsl file]) fi fi dnl dnl If XSLBASE has been set then at this point we know it must be dnl valid and so we can just use it. If XSLBASE_AUTO has been set, and XSLBASE dnl is empty then a valid stylesheet was found in XSLBASE_AUTO so we dnl should use that. Otherwise just continue silently with a blank XSLBASE dnl variable which will trigger the error message in the documentation Makefile dnl if test "x$XSLBASE" = "x"; then if test ! "x$XSLBASE_AUTO" = "x"; then XSLBASE="$XSLBASE_AUTO" fi fi AC_SUBST([XSLBASE]) dnl dnl Let's see if we can find mathml2.dtd dnl AC_ARG_WITH([mathmldtd], [AS_HELP_STRING([--with-mathmldtd=PATH], [specify the dtd path for mathml2.dtd])], [MATHML2_DTD="$withval"], [MATHML2_DTD=""]) dnl TODO: get more paths to add here... if test "x$MATHML2_DTD" = "x"; then MATHML2_DTD="http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" SEARCHPATH=" /usr/share/xml/schema/w3c/mathml/dtd " for p in ${SEARCHPATH}; do if test -r "${p}"/mathml2.dtd; then MATHML2_DTD="${p}/mathml2.dtd" break fi done fi AC_SUBST([MATHML2_DTD]) dnl =========================================================================== dnl Detect CUnit if it is installed (used for unit testing) dnl dnl Note that we pass any specified CPPFLAGS and LDFLAGS into the Makefile dnl as CUnit is the only compile-time dependency that cannot obtain any dnl specialised flags using a --with-X parameter, and so we allow this dnl information to be passed in if required. dnl =========================================================================== CUNIT_LDFLAGS="" AC_CHECK_HEADER([CUnit/CUnit.h], [ CUNIT_CPPFLAGS="$CPPFLAGS" AC_CHECK_LIB([cunit], [CU_initialize_registry], [CUNIT_LDFLAGS="$LDFLAGS -lcunit"], [AC_MSG_WARN([could not locate CUnit required for unit tests])]) ], [ AC_MSG_WARN([could not locate CUnit required for unit tests]) ]) AC_SUBST([CUNIT_CPPFLAGS]) AC_SUBST([CUNIT_LDFLAGS]) dnl =========================================================================== dnl Detect iconv if it is installed (used for shp2pgsql encoding conversion dnl if available) dnl =========================================================================== ICONV_CFLAGS="" ICONV_LDFLAGS="" AC_ARG_WITH([libiconv], [AS_HELP_STRING([--with-libiconv=PATH], [specify a path to non-default libiconv installation])], [LIBICONV_PATH="$withval"], [LIBICONV_PATH=""]) LDFLAGS_SAVE="$LDFLAGS" CFLAGS_SAVE="$CFLAGS" if test "x$LIBICONV_PATH" != "x"; then AC_MSG_RESULT([checking user-specified libiconv location: $LIBICONV_PATH]) ICONV_CFLAGS="-I$LIBICONV_PATH/include" ICONV_LDFLAGS="-L$LIBICONV_PATH/lib" LDFLAGS="$ICONV_LDFLAGS $LDFLAGS" CFLAGS="$ICONV_CFLAGS $CFLAGS" fi HAVE_ICONV_H=0 AC_CHECK_HEADER([iconv.h], [HAVE_ICONV_H=1], []) dnl If we find the header file, try and link against the library if test "x$HAVE_ICONV_H" = "x1"; then dnl libconv defines iconv_open to libiconv_open, so we'll check that directly AC_CHECK_LIB([iconv], [libiconv_open], [ICONV_LDFLAGS="$ICONV_LDFLAGS -liconv" HAVE_ICONV=1], []) if test "x$HAVE_ICONV" = "x"; then dnl Check for iconv included as part of libc, using iconv_open AC_CHECK_LIB([c], [iconv_open], [ICONV_LDFLAGS="$ICONV_LDFLAGS -lc" HAVE_ICONV=1], []) if test "x$HAVE_ICONV" = "x"; then dnl But it's possible this implementation of libiconv doesn't have a libiconv_* define AC_CHECK_LIB([iconv], [iconv_open], [ICONV_LDFLAGS="$ICONV_LDFLAGS -liconv" HAVE_ICONV=1], []) if test "x$HAVE_ICONV" = "x"; then dnl No iconv library was found; issue a warning to the console AC_MSG_ERROR([Could not find libiconv. Please install libiconv and libiconv-devel.]) fi fi fi else dnl No iconv header was found; issue a warning to the console AC_MSG_ERROR([Could not find iconv.h header. Please install libiconv and libiconv-devel.]) fi AC_CHECK_FUNCS([iconvctl libiconvctl],[],[]) LDFLAGS="$LDFLAGS_SAVE" CFLAGS="$CFLAGS_SAVE" dnl Only define HAVE_ICONV in postgis_config.h if we detect iconv sucessfully if test "x$HAVE_ICONV" != "x"; then AC_DEFINE_UNQUOTED([HAVE_ICONV], [$HAVE_ICONV], [Defined if libiconv headers and library are present]) fi AC_SUBST([ICONV_LDFLAGS]) AC_SUBST([ICONV_CFLAGS]) dnl =========================================================================== dnl Detect the version of PostgreSQL installed on the system dnl =========================================================================== AC_ARG_VAR(PG_CONFIG, [PostgreSQL configure command to determine Postgres version to bulid against.]) AC_ARG_WITH([pgconfig], [AS_HELP_STRING([--with-pgconfig=FILE], [specify an alternative pg_config file])], [PG_CONFIG="$withval"], []) if test "x$PG_CONFIG" = "xno"; then dnl disabling pg_config doesn't make sense AC_MSG_ERROR([Cannot disable pg_config.]) elif test "x$PG_CONFIG" = "x"; then dnl PG_CONFIG was not specified, so search within the current path AC_PATH_PROG([PG_CONFIG], [pg_config]) dnl If we couldn't find pg_config, display an error if test "x$PG_CONFIG" = "x"; then AC_MSG_ERROR([could not find pg_config within the current path. You may need to try re-running configure with a --with-pg_config parameter.]) fi else dnl PG_CONFIG was specified; display a message to the user if test "x$PG_CONFIG" = "xyes"; then AC_MSG_ERROR([you must specify a parameter to --with-pgconfig, e.g. --with-pgconfig=/path/to/pg_config]) else if test -f $PG_CONFIG; then AC_MSG_RESULT([Using user-specified pg_config file: $PG_CONFIG]) else AC_MSG_ERROR([the user-specified pg_config file $PG_CONFIG does not exist]) fi fi fi dnl =========================================================================== dnl Ensure that $PG_CONFIG --pgxs points to a valid file. This is because some dnl distributions such as Debian also include pg_config as part of libpq-dev dnl packages, but don't install the Makefile it points to unless dnl the postgresql-server-dev packages are installed :) dnl =========================================================================== PGXS=`$PG_CONFIG --pgxs` if test ! -f $PGXS; then AC_MSG_ERROR([the PGXS Makefile $PGXS cannot be found. Please install the PostgreSQL server development packages and re-run configure.]) fi AC_SUBST([PGXS]) dnl Extract the version information from pg_config dnl Note: we extract the major & minor separately, ensure they are numeric, and then combine to give dnl the final version. This is to guard against user error... PGSQL_MAJOR_VERSION=`$PG_CONFIG --version | sed 's/[[^0-9]]*\([[0-9]]\)\.\([[0-9]]\).*/\1/'` PGSQL_MINOR_VERSION=`$PG_CONFIG --version | sed 's/[[^0-9]]*\([[0-9]]\)\.\([[0-9]]\).*/\2/'` PGSQL_FULL_VERSION=`$PG_CONFIG --version` POSTGIS_PGSQL_VERSION="$PGSQL_MAJOR_VERSION$PGSQL_MINOR_VERSION" PGSQL_PKGLIBDIR=`$PG_CONFIG --pkglibdir` PGSQL_LIBDIR=`$PG_CONFIG --libdir` PGSQL_SHAREDIR=`$PG_CONFIG --sharedir` AC_MSG_RESULT([checking PostgreSQL version... $PGSQL_FULL_VERSION]) dnl Ensure that we are using PostgreSQL >= 9.0 if test ! "$PGSQL_MAJOR_VERSION" -ge 9; then AC_MSG_ERROR([PostGIS requires PostgreSQL >= 9.0]) fi dnl Temporary hack until minimum PostgreSQL version is 9.0: dnl If PostgreSQL < 9.0 is detected, trigger the inclusion of the new versioned PGXS targets PGXSOVERRIDE=0 if test ! "$PGSQL_MAJOR_VERSION" -ge 9; then PGXSOVERRIDE=1 fi AC_SUBST([PGXSOVERRIDE]) dnl Note: We don't need the server-side LDFLAGS or CPPFLAGS because we get these from PGXS dnl Extract the linker and include flags for the frontend (for programs that use libpq) PGSQL_FE_LDFLAGS=-L`$PG_CONFIG --libdir`" -lpq" PGSQL_FE_CPPFLAGS=-I`$PG_CONFIG --includedir` AC_SUBST([PGSQL_FE_LDFLAGS]) AC_SUBST([PGSQL_FE_CPPFLAGS]) dnl Extract the include flags for the backend (libpgcommon) PGSRV_INC=`$PG_CONFIG --includedir-server` PGSQL_BE_CPPFLAGS="-I${PGSRV_INC}" dnl Add $PGSRV_INC/port/win32 to MinGW build to pick up netdb.h case $host in *mingw32*) PGSQL_BE_CPPFLAGS="${PGSQL_BE_CPPFLAGS} -I${PGSRV_INC}/port/win32" ;; esac AC_SUBST([PGSQL_BE_CPPFLAGS]) dnl Extract the documentation and man page directories PGSQL_DOCDIR=`$PG_CONFIG --docdir` PGSQL_MANDIR=`$PG_CONFIG --mandir` AC_SUBST([PGSQL_DOCDIR]) AC_SUBST([PGSQL_MANDIR]) dnl Extract the locale directory PGSQL_LOCALEDIR=`$PG_CONFIG --localedir` AC_DEFINE_UNQUOTED([PGSQL_LOCALEDIR], ["$PGSQL_LOCALEDIR"], [Location of PostgreSQL locale directory]) dnl Extract the executable directory PGSQL_BINDIR=`$PG_CONFIG --bindir` AC_SUBST([PGSQL_BINDIR]) dnl Extract the share directory PGSQL_SHAREDIR=`$PG_CONFIG --sharedir` AC_SUBST([PGSQL_SHAREDIR]) dnl Ensure that we can parse libpq-fe.h CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$PGSQL_FE_CPPFLAGS" AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([could not find libpq-fe.h])]) CPPFLAGS="$CPPFLAGS_SAVE" dnl Ensure we can link against libpq LIBS_SAVE="$LIBS" LIBS="$PGSQL_FE_LDFLAGS" AC_CHECK_LIB([pq], [PQserverVersion], [], [AC_MSG_ERROR([could not find libpq])], []) LIBS="$LIBS_SAVE" AC_DEFINE_UNQUOTED([POSTGIS_PGSQL_VERSION], [$POSTGIS_PGSQL_VERSION], [PostgreSQL server version]) AC_SUBST([POSTGIS_PGSQL_VERSION]) dnl =========================================================================== dnl Explain our prefix policy if necessary. dnl =========================================================================== if test "$prefix" != "NONE"; then AC_MSG_RESULT([------------------------------------------------------------------------]) AC_MSG_RESULT([ WARNING: You have set the --prefix to '$prefix'. But we mostly ]) AC_MSG_RESULT([ ignore the --prefix. For your info, using the values determined from ]) AC_MSG_RESULT([ $PG_CONFIG we will be installing: ]) AC_MSG_RESULT([ * postgis shared library in $PGSQL_LIBDIR ]) AC_MSG_RESULT([ * postgis SQL files in $PGSQL_SHAREDIR/contrib/postgis-$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION ]) AC_MSG_RESULT([ * postgis executables in $PGSQL_BINDIR ]) AC_MSG_RESULT([------------------------------------------------------------------------]) fi dnl =========================================================================== dnl Detect libxml2 if it is installed dnl (needed to GeomFromGML and GeomFromKML functions) dnl =========================================================================== AC_ARG_WITH([xml2config], [AS_HELP_STRING([--with-xml2config=FILE], [specify an alternative xml2-config file])], [XML2CONFIG="$withval"], [XML2CONFIG=""]) if test "x$XML2CONFIG" = "x"; then dnl XML2CONFIG was not specified, so search within the current path AC_PATH_PROG([XML2CONFIG], [xml2-config]) dnl If we couldn't find xml2-config, display a warning if test "x$XML2CONFIG" = "x"; then AC_MSG_ERROR([could not find xml2-config from libxml2 within the current path. You may need to try re-running configure with a --with-xml2config parameter.]) fi else dnl XML2CONFIG was specified; display a message to the user if test "x$XML2CONFIG" = "xyes"; then AC_MSG_ERROR([you must specify a parameter to --with-xml2config, e.g. --with-xml2config=/path/to/xml2-config]) else if test -f $XML2CONFIG; then AC_MSG_RESULT([Using user-specified xml2-config file: $XML2CONFIG]) else AC_MSG_ERROR([the user-specified xml2-config file $XML2CONFIG does not exist]) fi fi fi dnl Extract the linker and include flags XML2_LDFLAGS=`$XML2CONFIG --libs` XML2_CPPFLAGS=`$XML2CONFIG --cflags` dnl Extract the version POSTGIS_LIBXML2_VERSION=`$XML2CONFIG --version` dnl Check headers file CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$XML2_CPPFLAGS" AC_CHECK_HEADERS([libxml/tree.h libxml/parser.h libxml/xpath.h libxml/xpathInternals.h], [], [AC_MSG_ERROR([could not find headers include related to libxml2])]) CPPFLAGS="$CPPFLAGS_SAVE" dnl Ensure we can link against libxml2 LIBS_SAVE="$LIBS" LIBS="$XML2_LDFLAGS" AC_CHECK_LIB([xml2], [xmlInitParser], [], [AC_MSG_ERROR([could not find libxml2])], []) LIBS="$LIBS_SAVE" AC_DEFINE_UNQUOTED([POSTGIS_LIBXML2_VERSION], ["$POSTGIS_LIBXML2_VERSION"], [PostGIS libxml2 version]) AC_SUBST([POSTGIS_LIBXML2_VERSION]) dnl =========================================================================== dnl Detect the version of GEOS installed on the system dnl =========================================================================== AC_ARG_WITH([geosconfig], [AS_HELP_STRING([--with-geosconfig=FILE], [specify an alternative geos-config file])], [GEOSCONFIG="$withval"], [GEOSCONFIG=""]) if test "x$GEOSCONFIG" = "x"; then dnl GEOSCONFIG was not specified, so search within the current path AC_PATH_PROG([GEOSCONFIG], [geos-config]) dnl If we couldn't find geos-config, display an error if test "x$GEOSCONFIG" = "x"; then AC_MSG_ERROR([could not find geos-config within the current path. You may need to try re-running configure with a --with-geosconfig parameter.]) fi else dnl GEOSCONFIG was specified; display a message to the user if test "x$GEOSCONFIG" = "xyes"; then AC_MSG_ERROR([you must specify a parameter to --with-geosconfig, e.g. --with-geosconfig=/path/to/geos-config]) else if test -f $GEOSCONFIG; then AC_MSG_RESULT([Using user-specified geos-config file: $GEOSCONFIG]) else AC_MSG_ERROR([the user-specified geos-config file $GEOSCONFIG does not exist]) fi fi fi dnl Extract the version information from geos_config dnl Note: we extract the major & minor separately, ensure they are numeric, dnl and then combine to give the final version. dnl This is to guard against user error... GEOS_MAJOR_VERSION=`$GEOSCONFIG --version | cut -d. -f1 | sed 's/[[^0-9]]//g'` GEOS_MINOR_VERSION=`$GEOSCONFIG --version | cut -d. -f2 | sed 's/[[^0-9]]//g'` GEOS_PATCH_VERSION=`$GEOSCONFIG --version | cut -d. -f3 | sed 's/[[^0-9]]//g'` if test "x$GEOS_PATCH_VERSION" = "x"; then GEOS_PATCH_VERSION="0"; fi GEOS_FULL_VERSION=`$GEOSCONFIG --version` POSTGIS_GEOS_VERSION="$GEOS_MAJOR_VERSION$GEOS_MINOR_VERSION" GEOS_NUMERIC_PATCH_VERSION=`printf "%02d" $GEOS_PATCH_VERSION` GEOS_NUMERIC_MINOR_VERSION=`printf "%02d" $GEOS_MINOR_VERSION` GEOS_NUMERIC_VERSION="$GEOS_MAJOR_VERSION$GEOS_NUMERIC_MINOR_VERSION$GEOS_NUMERIC_PATCH_VERSION" dnl Ensure that we are using GEOS >= 3.3.0 AC_MSG_RESULT([checking GEOS version... $GEOS_FULL_VERSION]) if test ! "$GEOS_NUMERIC_VERSION" -ge 30300; then AC_MSG_ERROR([PostGIS requires GEOS >= 3.3.0]) fi dnl Extract the linker and include flags GEOS_LDFLAGS=`$GEOSCONFIG --ldflags` GEOS_CPPFLAGS=-I`$GEOSCONFIG --includes` AC_SUBST([GEOS_LDFLAGS]) AC_SUBST([GEOS_CPPFLAGS]) dnl Ensure that we can parse geos_c.h CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$GEOS_CPPFLAGS" AC_CHECK_HEADER([geos_c.h], [], [AC_MSG_ERROR([could not find geos_c.h - you may need to specify the directory of a geos-config file using --with-geosconfig])]) CPPFLAGS="$CPPFLAGS_SAVE" dnl Ensure we can link against libgeos_c LIBS_SAVE="$LIBS" LIBS="$GEOS_LDFLAGS" AC_CHECK_LIB([geos_c], [initGEOS], [], [AC_MSG_ERROR([could not find libgeos_c - you may need to specify the directory of a geos-config file using --with-geosconfig])], []) LIBS="$LIBS_SAVE" AC_DEFINE_UNQUOTED([POSTGIS_GEOS_VERSION], [$POSTGIS_GEOS_VERSION], [GEOS library version]) AC_SUBST([POSTGIS_GEOS_VERSION]) AC_SUBST([GEOS_NUMERIC_VERSION]) dnl =========================================================================== dnl SFCGAL library support dnl =========================================================================== AC_ARG_WITH([sfcgal], [AS_HELP_STRING([--with-sfcgal=PATH], [Add SFCGAL support. ARG allows to specify an alternate PATH to sfcgal-config])], [SFCGAL_CONFIG="$withval"], [AC_PATH_PROG([SFCGAL_CONFIG], [sfcgal-config], [])]) HAVE_SFCGAL="no" if test "x$with_sfcgal" != "xno"; then if test -x "$SFCGAL_CONFIG"; then SFCGAL_VERSION=`$SFCGAL_CONFIG --version` SFCGAL_LDFLAGS=`$SFCGAL_CONFIG --libs` SFCGAL_CPPFLAGS=`$SFCGAL_CONFIG --cflags`" -DHAVE_SFCGAL" SFCGAL_STATIC=`$SFCGAL_CONFIG --static` if test "x$SFCGAL_STATIC" = "xON"; then AC_MSG_WARN([The SFCGAL version found is not installed as a dynamic library.]) else SFCGAL="sfcgal" HAVE_SFCGAL="yes" fi else if test "x$with_sfcgal" != "x"; then AC_MSG_ERROR([sfcgal-config cannot be found. Please install sfcgal]) fi fi fi AC_SUBST([SFCGAL_VERSION]) AC_SUBST([SFCGAL_CPPFLAGS]) AC_SUBST([SFCGAL_LDFLAGS]) AC_SUBST([SFCGAL_OBJS]) AC_SUBST([SFCGAL]) AC_SUBST([HAVE_SFCGAL]) dnl =========================================================================== dnl Detect gettext dnl =========================================================================== GETTEXT_CFLAGS="" GETTEXT_LDFLAGS="" AC_ARG_WITH([gettext], [AS_HELP_STRING([--with-gettext=PATH], [specify a path to non-default gettext installation])], [GETTEXT_PATH="$withval"], [GETTEXT_PATH="yes"]) LDFLAGS_SAVE="$LDFLAGS" CFLAGS_SAVE="$CFLAGS" if test "x$GETTEXT_PATH" != "xno"; then dnl If user has specified a custom gettext installation path, use it. if test "x$GETTEXT_PATH" != "xyes"; then AC_MSG_RESULT([checking user-specified gettext location: $GETTEXT_PATH]) GETTEXT_CFLAGS="-I$GETTEXT_PATH/include" GETTEXT_LDFLAGS="-L$GETTEXT_PATH/lib" LDFLAGS="$GETTEXT_LDFLAGS $LDFLAGS" CFLAGS="$GETTEXT_CFLAGS $CFLAGS" fi AM_GNU_GETTEXT([external], [], []) if test "x$LIBINTL" = "x"; then USE_NLS=no fi fi AC_SUBST([GETTEXT_CFLAGS]) AC_SUBST([GETTEXT_LDFLAGS]) LDFLAGS="$LDFLAGS_SAVE" CFLAGS="$CFLAGS_SAVE" dnl =========================================================================== dnl Detect the version of PROJ.4 installed dnl =========================================================================== AC_ARG_WITH([projdir], [AS_HELP_STRING([--with-projdir=PATH], [specify the PROJ.4 installation directory])], [PROJDIR="$withval"], [PROJDIR=""]) if test ! "x$PROJDIR" = "x"; then dnl Make sure that the directory exists if test "x$PROJDIR" = "xyes"; then AC_MSG_ERROR([you must specify a parameter to --with-projdir, e.g. --with-projdir=/path/to]) else if test -d "$PROJDIR"; then AC_MSG_RESULT([Using user-specified proj directory: $PROJDIR]) dnl Add the include directory to PROJ_CPPFLAGS PROJ_CPPFLAGS="-I$PROJDIR/include" PROJ_LDFLAGS="-L$PROJDIR/lib" else AC_MSG_ERROR([the --with-projdir directory "$PROJDIR" cannot be found]) fi fi fi dnl Check that we can find the proj_api.h header file CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$PROJ_CPPFLAGS" AC_CHECK_HEADER([proj_api.h], [], [AC_MSG_ERROR([could not find proj_api.h - you may need to specify the directory of a PROJ.4 installation using --with-projdir])]) dnl Return the PROJ.4 version number AC_PROJ_VERSION([POSTGIS_PROJ_VERSION]) AC_DEFINE_UNQUOTED([POSTGIS_PROJ_VERSION], [$POSTGIS_PROJ_VERSION], [PROJ library version]) AC_SUBST([POSTGIS_PROJ_VERSION]) CPPFLAGS="$CPPFLAGS_SAVE" AC_SUBST([PROJ_CPPFLAGS]) AC_SUBST([PROJ_LDFLAGS]) dnl Ensure that we are using PROJ >= 4.6.0 (requires pj_set_searchpath) if test ! "$POSTGIS_PROJ_VERSION" -ge 46; then AC_MSG_ERROR([PostGIS requires PROJ >= 4.6.0]) fi dnl Ensure we can link against libproj LIBS_SAVE="$LIBS" LIBS="$PROJ_LDFLAGS" AC_CHECK_LIB([proj], [pj_get_release], [], [AC_MSG_ERROR([could not find libproj - you may need to specify the directory of a PROJ.4 installation using --with-projdir])], []) LIBS="$LIBS_SAVE" dnl =========================================================================== dnl Detect if json-c installed dnl =========================================================================== CHECK_JSON=yes HAVE_JSON=no AC_ARG_WITH([json], [AS_HELP_STRING([--without-json], [build without json-c support])], [CHECK_JSON="$withval"], []) if test "$CHECK_JSON" != "no"; then dnl { AC_ARG_WITH([jsondir], [AS_HELP_STRING([--with-jsondir=PATH], [specify the json-c installation directory])], [JSONDIR="$withval"], [JSONDIR=]) if test ! "x$JSONDIR" = "x"; then dnl Make sure that the directory exists if test "x$JSONDIR" = "xyes"; then AC_MSG_ERROR([you must specify a parameter to --with-jsondir, e.g. --with-jsondir=/path/to]) else dnl We need (libjson.so OR libjson.a OR libjson.dll) AND json/json.h if test ! -e "${JSONDIR}/include/json/json.h" -o \ ! \( -e "${JSONDIR}/lib/libjson.so" -o \ -e "${JSONDIR}/lib/libjson.dll" -o \ -e "${JSONDIR}/lib/libjson.dylib" -o \ -e "${JSONDIR}/bin/libjson.dll" -o \ -e "${JSONDIR}/lib/libjson.a" \) then AC_MSG_ERROR([Cannot find json dev files in "$JSONDIR"]) fi AC_MSG_RESULT([Using user-specified json-c directory: $JSONDIR]) dnl Add the include directory to JSON_CPPFLAGS JSON_CPPFLAGS="-I$JSONDIR/include" JSON_LDFLAGS="-L$JSONDIR/lib" fi fi dnl Check that we can find the json/json.h header file CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$JSON_CPPFLAGS" AC_CHECK_HEADER([json-c/json.h], [HAVE_JSON=yes], [ AC_CHECK_HEADER([json/json.h], [HAVE_JSON=yes], [])]) CPPFLAGS="$CPPFLAGS_SAVE" dnl Ensure we can link against libjson LIBS_SAVE="$LIBS" LIBS="$JSON_LDFLAGS" AC_CHECK_LIB([json-c], [json_object_get], [HAVE_JSON=yes; JSON_LDFLAGS="${JSON_LDFLAGS} -ljson-c"], [ AC_CHECK_LIB([json], [json_object_get], [HAVE_JSON=yes; JSON_LDFLAGS="${JSON_LDFLAGS} -ljson"], [], []) ], []) LIBS="$LIBS_SAVE" if test "$HAVE_JSON" = "yes"; then AC_DEFINE([HAVE_LIBJSON], 1, [Define to 1 if libjson is present]) fi AC_SUBST([JSON_CPPFLAGS]) AC_SUBST([JSON_LDFLAGS]) AC_SUBST([HAVE_JSON]) fi dnl } dnl =========================================================================== dnl Detect GTK+2.0 for GUI dnl =========================================================================== AC_ARG_WITH([gui], [AS_HELP_STRING([--with-gui], [compile the data import GUI (requires GTK+2.0)])], [GUI="yes"], [GUI="no"]) if test "x$GUI" = "xyes"; then AC_MSG_RESULT([GUI: Build requested, checking for dependencies (GKT+2.0)]) dnl Try to find the GTK libs with pkgconfig AM_PATH_GTK_2_0([2.8.0], [GTK_BUILD="gui"], [GTK_BUILD=""]) dnl Add -mwindows to MinGW GUI build case $host in *mingw32*) GTK_WIN32_FLAGS=-mwindows GTK_WIN32_RES=shp2pgsql-gui.res GTK_WIN32_BUILD=gui-win32 ;; esac fi AC_SUBST([GTK_CFLAGS]) AC_SUBST([GTK_LIBS]) AC_SUBST([GTK_WIN32_FLAGS]) AC_SUBST([GTK_WIN32_RES]) AC_SUBST([GTK_BUILD]) AC_SUBST([IGE_MAC_CFLAGS]) AC_SUBST([IGE_MAC_LIBS]) dnl =========================================================================== dnl Allow the user to enable debugging with --enable-debug dnl dnl Currently we default to debug level 4. See DEBUG for more information. dnl AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug], [Enable verbose debugging messages]), [POSTGIS_DEBUG_LEVEL=4], [POSTGIS_DEBUG_LEVEL=0]) AC_DEFINE_UNQUOTED([POSTGIS_DEBUG_LEVEL], [$POSTGIS_DEBUG_LEVEL], [PostGIS library debug level (0=disabled)]) dnl =========================================================================== dnl Allow the user to enable GEOS profiling with --enable-profile dnl AC_ARG_ENABLE([profile], AC_HELP_STRING([--enable-profile], [Enable GEOS profiling messages]), [POSTGIS_PROFILE=1], [POSTGIS_PROFILE=0]) AC_DEFINE_UNQUOTED([POSTGIS_PROFILE], [$POSTGIS_PROFILE], [Enable GEOS profiling (0=disabled)]) dnl =========================================================================== dnl Define version macros dnl POSTGIS_VERSION="$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION USE_GEOS=1 USE_PROJ=1 USE_STATS=1" if test "$HAVE_LIBXML2" = "1"; then POSTGIS_VERSION="$POSTGIS_VERSION USE_LIBXML2=1" fi POSTGIS_LIB_VERSION="$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION.$POSTGIS_MICRO_VERSION" POSTGIS_BUILD_DATE=`date -u "+%Y-%m-%d %H:%M:%S"` POSTGIS_SCRIPTS_VERSION="$POSTGIS_LIB_VERSION" AC_DEFINE_UNQUOTED([POSTGIS_VERSION], ["$POSTGIS_VERSION"], [PostGIS version]) AC_DEFINE_UNQUOTED([POSTGIS_LIB_VERSION], ["$POSTGIS_LIB_VERSION"], [PostGIS library version]) AC_DEFINE_UNQUOTED([POSTGIS_BUILD_DATE], ["$POSTGIS_BUILD_DATE"], [PostGIS build date]) AC_DEFINE_UNQUOTED([POSTGIS_SCRIPTS_VERSION], ["$POSTGIS_SCRIPTS_VERSION"], [PostGIS scripts version]) AC_SUBST([POSTGIS_VERSION]) AC_SUBST([POSTGIS_LIB_VERSION]) AC_SUBST([POSTGIS_BUILD_DATE]) AC_SUBST([POSTGIS_SCRIPTS_VERSION]) dnl =========================================================================== dnl Other parameters dnl dnl Always enable BBOX caching by default AC_DEFINE_UNQUOTED([POSTGIS_AUTOCACHE_BBOX], [1], [Enable caching of bounding box within geometries]) dnl Always enable use of ANALYZE statistics by default AC_DEFINE_UNQUOTED([POSTGIS_USE_STATS], [1], [Enable use of ANALYZE statistics]) CPPFLAGS="$PGSQL_CPPFLAGS $GEOS_CPPFLAGS $PROJ_CPPFLAGS $XML2_CPPFLAGS $SFCGAL_CPPFLAGS $CPPFLAGS" AC_MSG_RESULT([CPPFLAGS: $CPPFLAGS]) SHLIB_LINK="$PGSQL_LDFLAGS $GEOS_LDFLAGS $PROJ_LDFLAGS -lgeos_c -lproj $JSON_LDFLAGS $XML2_LDFLAGS $SFCGAL_LDFLAGS" AC_SUBST([SHLIB_LINK]) dnl AC_MSG_RESULT([SHLIB_LINK: $SHLIB_LINK]) dnl ==================================== dnl topology stuff dnl ==================================== AC_ARG_WITH([topology], [AS_HELP_STRING([--without-topology], [Disable the topology extension])], [], []) if test "x$with_topology" != "xno"; then TOPOLOGY="topology" AC_MSG_RESULT([TOPOLOGY: Topology support requested]) if test "$GEOS_NUMERIC_VERSION" -lt 30302; then AC_MSG_ERROR([Topology requires GEOS version >= 3.3.2. Use --without-topology or install a newer GEOS.]) fi else AC_MSG_RESULT([TOPOLOGY: Topology support disabled]) fi AC_SUBST([TOPOLOGY]) dnl =========================================================================== dnl SRID stuff dnl =========================================================================== SRID_MAX=999999 SRID_USR_MAX=998999 AC_SUBST([SRID_MAX]) AC_SUBST([SRID_USR_MAX]) dnl ==================================== dnl raster stuff dnl ==================================== AC_ARG_WITH( [raster], AC_HELP_STRING([--without-raster], [Disable the raster extension]), [], []) if test "x$with_raster" != "xno"; then RASTER="raster" AC_MSG_RESULT([RASTER: Raster support requested]) AC_CONFIG_HEADERS([raster/raster_config.h]) dnl dnl Raster Version Information imported from raster/Version.config dnl POSTGIS_RASTER_MAJOR_VERSION=`cat raster/Version.config | grep POSTGIS_RASTER_MAJOR_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'` POSTGIS_RASTER_MINOR_VERSION=`cat raster/Version.config | grep POSTGIS_RASTER_MINOR_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'` POSTGIS_RASTER_MICRO_VERSION=`cat raster/Version.config | grep POSTGIS_RASTER_MICRO_VERSION | sed 's/[[^=]]*=\([[0-9]]\)/\1/g'` AC_DEFINE_UNQUOTED([POSTGIS_RASTER_MAJOR_VERSION], ["$POSTGIS_RASTER_MAJOR_VERSION"], [PostGIS Raster major version]) AC_DEFINE_UNQUOTED([POSTGIS_RASTER_MINOR_VERSION], ["$POSTGIS_RASTER_MINOR_VERSION"], [PostGIS Raster minor version]) AC_DEFINE_UNQUOTED([POSTGIS_RASTER_MICRO_VERSION], ["$POSTGIS_RASTER_MICRO_VERSION"], [PostGIS Raster micro version]) AC_SUBST([POSTGIS_RASTER_MAJOR_VERSION]) AC_SUBST([POSTGIS_RASTER_MINOR_VERSION]) AC_SUBST([POSTGIS_RASTER_MICRO_VERSION]) dnl ============================== dnl Define raster version macros dnl ============================== POSTGIS_RASTER_VERSION="$POSTGIS_RASTER_MAJOR_VERSION.$POSTGIS_RASTER_MINOR_VERSION" POSTGIS_RASTER_LIB_VERSION="$POSTGIS_RASTER_MAJOR_VERSION.$POSTGIS_RASTER_MINOR_VERSION.$POSTGIS_RASTER_MICRO_VERSION" POSTGIS_RASTER_BUILD_DATE=`date -u "+%Y-%m-%d %H:%M:%S"` POSTGIS_RASTER_SCRIPTS_VERSION="$POSTGIS_RASTER_LIB_VERSION" AC_DEFINE_UNQUOTED([POSTGIS_RASTER_VERSION], ["$POSTGIS_RASTER_VERSION"], [PostGIS Raster version]) AC_DEFINE_UNQUOTED([POSTGIS_RASTER_LIB_VERSION], ["$POSTGIS_RASTER_LIB_VERSION"], [PostGIS Raster library version]) AC_DEFINE_UNQUOTED([POSTGIS_RASTER_BUILD_DATE], ["$POSTGIS_RASTER_BUILD_DATE"], [PostGIS Raster build date]) AC_DEFINE_UNQUOTED([POSTGIS_RASTER_SCRIPTS_VERSION], ["$POSTGIS_RASTER_SCRIPTS_VERSION"], [PostGIS Raster scripts version]) AC_SUBST([POSTGIS_RASTER_VERSION]) AC_SUBST([POSTGIS_RASTER_LIB_VERSION]) AC_SUBST([POSTGIS_RASTER_BUILD_DATE]) AC_SUBST([POSTGIS_RASTER_SCRIPTS_VERSION]) dnl =========================================================================== dnl Allow output of double truncation warnings with --with-raster-dblwarning dnl =========================================================================== AC_ARG_WITH( [raster-dblwarning], AC_HELP_STRING([--with-raster-dblwarning], [output double truncation warnings. Only used with --with-raster]), [POSTGIS_RASTER_WARN_ON_TRUNCATION=1], [POSTGIS_RASTER_WARN_ON_TRUNCATION=0]) AC_DEFINE_UNQUOTED( [POSTGIS_RASTER_WARN_ON_TRUNCATION], [$POSTGIS_RASTER_WARN_ON_TRUNCATION], [Define to 1 if a warning is outputted every time a double is truncated]) dnl ======================================================================== dnl Determine GDAL Support dnl dnl TODO: Now, --with-gdalconfig can have only 1 value: path to gdal-config. It dnl could be useful to allow path to GDAL tree, because the cflags and the dnl libs can be obtained from GDAL tree too, apart from gdal-config dnl How to get cflags and libs from GDAL tree? dnl dnl LIBGDAL_CFLAGS="-I$with_gdal/port -I$with_gdal/ogr -I$with_gdal/alg -I$with_gdal/gcore -I$with_gdal/frmts " dnl LIBGDAL_LDFLAGS="-L${with_gdal}/.libs -lgdal -L${with_gdal}/ -lgdal" dnl ======================================================================== dnl not used right now USE_GDAL_SOURCE_TREE="no" LIBGDAL_CFLAGS="" LIBGDAL_LDFLAGS="" LIBGDAL_DEPLIBS_LDFLAGS="" dnl GDAL version constants, update here GDAL_MIN_VERSION=1.8.0 GDAL_MIN_VERSION_NUMBER=180 dnl TODO: Use GDAL version calculation MAJOR*1000+MINOR*100+REV*10+BUILD AC_ARG_WITH( [gdalconfig], AC_HELP_STRING([--with-gdalconfig=@<:@ARG@:>@],[specify location of gdal-config (ARG=path). Only used with --with-raster]), [GDAL_CONFIG="$withval"], [AC_PATH_PROG([GDAL_CONFIG], [gdal-config], [])] ) AC_MSG_CHECKING([GDAL version]) if test -x "$GDAL_CONFIG"; then dnl Extract the version information from gdal-config dnl Note: we extract the major & minor separately, ensure they are numeric, dnl and then combine to give the final version. dnl This is to guard against user error... GDAL_MAJOR_VERSION=`$GDAL_CONFIG --version | cut -d. -f1 | sed 's/[[^0-9]]//g'` GDAL_MINOR_VERSION=`$GDAL_CONFIG --version | cut -d. -f2 | sed 's/[[^0-9]]//g'` GDAL_PATCH_VERSION=`$GDAL_CONFIG --version | cut -d. -f3 | sed 's/[[^0-9]]//g'` GDAL_FULL_VERSION=`$GDAL_CONFIG --version` POSTGIS_GDAL_VERSION="$GDAL_MAJOR_VERSION$GDAL_MINOR_VERSION" GDAL_VERSION_NUMBER="$GDAL_MAJOR_VERSION$GDAL_MINOR_VERSION$GDAL_PATCH_VERSION" AC_MSG_RESULT([$GDAL_FULL_VERSION]) dnl Ensure we are using minimum required version of GDAL if test ! "$GDAL_VERSION_NUMBER" -ge "$GDAL_MIN_VERSION_NUMBER" ; then AC_MSG_ERROR([PostGIS raster requires GDAL >= $GDAL_MIN_VERSION. Use --without-raster to build without raster support.]) fi AC_DEFINE_UNQUOTED([POSTGIS_GDAL_VERSION], [$POSTGIS_GDAL_VERSION], [GDAL library version]) AC_SUBST([POSTGIS_GDAL_VERSION]) dnl Check that OGR is enabled AC_MSG_CHECKING([for OGR enabled]) OGR_ENABLED=`$GDAL_CONFIG --ogr-enabled` if test "x$OGR_ENABLED" != "xyes"; then AC_MSG_RESULT([$OGR_ENABLED]) AC_MSG_ERROR([PostGIS raster requires OGR to be enabled in GDAL. Use --without-raster to build without raster support.]) fi AC_MSG_RESULT([$OGR_ENABLED]) dnl Extract the linker and include flags LIBGDAL_LDFLAGS=`$GDAL_CONFIG --libs` dnl LIBGDAL_DEPLIBS_LDFLAGS=`$GDAL_CONFIG --dep-libs` LIBGDAL_CFLAGS=`$GDAL_CONFIG --cflags` CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$LIBGDAL_CFLAGS" CFLAGS_SAVE="$CFLAGS" CFLAGS="" LIBS_SAVE="$LIBS" LIBS="$LIBGDAL_LDFLAGS" dnl Check headers file AC_CHECK_HEADERS( [gdal.h ogr_api.h cpl_conv.h], [], [AC_MSG_ERROR([could not find GDAL headers])]) dnl Ensure we can link against gdal AC_SEARCH_LIBS([GDALAllRegister], [gdal], [], [AC_MSG_ERROR([could not find GDAL])], []) LIBS="$LIBGDAL_LDFLAGS" dnl Ensure we can link against ogr AC_SEARCH_LIBS([OGRRegisterAll], [gdal], [], [AC_MSG_ERROR([could not find OGR])], []) LIBS="$LIBGDAL_LDFLAGS" dnl Check if the new polygonize function is present AC_SEARCH_LIBS( [GDALFPolygonize], [gdal], [AC_DEFINE_UNQUOTED([GDALFPOLYGONIZE], [1], [Define to 1 if GDALFPolygonize function is available])], []) CPPFLAGS="$CPPFLAGS_SAVE" CFLAGS="$CFLAGS_SAVE" LIBS="$LIBS_SAVE" AC_SUBST([LIBGDAL_CFLAGS]) AC_SUBST([LIBGDAL_LDFLAGS]) AC_SUBST([LIBGDAL_DEPLIBS_LDFLAGS]) AC_SUBST([GDALFPOLYGONIZE]) else AC_MSG_RESULT([not found]) AC_MSG_ERROR([gdal-config not found. Use --without-raster or try --with-gdalconfig=]) fi dnl Define raster objects, for makefiles RT_CORE_LIB=corelib RT_PG_LIB=pglib RT_LOADER=rtloader RT_POSTGIS_SQL=rtpostgis.sql AC_SUBST([RASTER]) AC_SUBST([RT_CORE_LIB]) AC_SUBST([RT_PG_LIB]) AC_SUBST([RT_LOADER]) AC_SUBST([RT_POSTGIS_SQL]) RT_MAKEFILE_LIST=" raster/Makefile \ raster/rt_core/Makefile \ raster/rt_pg/Makefile \ raster/loader/Makefile \ raster/test/Makefile \ raster/test/cunit/Makefile \ raster/test/regress/Makefile \ raster/scripts/Makefile \ raster/scripts/python/Makefile" else AC_MSG_RESULT([RASTER: Raster support disabled]) RT_MAKEFILE_LIST="raster/Makefile" fi dnl =========================================================================== dnl See if we have the requirements for building the extensions, namely dnl PostgreSQL 9.1 or better and the xlstproc tool for generating the commends dnl SQL file. dnl =========================================================================== EXTENSIONS="" if test $POSTGIS_PGSQL_VERSION -ge 91; then if test \ "x$XSLTPROC" != "x" -o \ -e doc/postgis_comments.sql -a \ -e doc/raster_comments.sql; then if test "x$RASTER" = "xraster"; then AC_MSG_RESULT([enabling PostgreSQL extension support...]) EXTENSIONS=extensions AC_SUBST([EXTENSIONS]) fi fi fi dnl =========================================================================== dnl Output the relevant files dnl =========================================================================== AC_OUTPUT([GNUmakefile extensions/Makefile extensions/postgis/Makefile extensions/postgis/postgis.control extensions/postgis_topology/Makefile extensions/postgis_topology/postgis_topology.control extensions/postgis_tiger_geocoder/Makefile extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control liblwgeom/Makefile liblwgeom/cunit/Makefile liblwgeom/liblwgeom.h libpgcommon/Makefile libpgcommon/cunit/Makefile postgis/Makefile postgis/sqldefines.h loader/Makefile loader/cunit/Makefile topology/Makefile topology/test/Makefile regress/Makefile doc/Makefile doc/Makefile.comments doc/html/image_src/Makefile utils/Makefile java/jdbc/Makefile $RT_MAKEFILE_LIST]) dnl =========================================================================== dnl Display the configuration status information dnl =========================================================================== AC_MSG_RESULT() AC_MSG_RESULT([ PostGIS is now configured for ${host}]) AC_MSG_RESULT() AC_MSG_RESULT([ -------------- Compiler Info ------------- ]) AC_MSG_RESULT([ C compiler: ${CC} ${CFLAGS}]) AC_MSG_RESULT([ C++ compiler: ${CXX} ${CXXFLAGS}]) AC_MSG_RESULT([ SQL preprocessor: ${SQLPP}]) AC_MSG_RESULT() AC_MSG_RESULT([ -------------- Dependencies -------------- ]) AC_MSG_RESULT([ GEOS config: ${GEOSCONFIG}]) AC_MSG_RESULT([ GEOS version: ${GEOS_FULL_VERSION}]) if test "x$RASTER" = "xraster"; then AC_MSG_RESULT([ GDAL config: ${GDAL_CONFIG}]) AC_MSG_RESULT([ GDAL version: ${GDAL_FULL_VERSION}]) fi if test "x$SFCGAL" = "xsfcgal"; then AC_MSG_RESULT([ SFCGAL config: ${SFCGAL_CONFIG}]) AC_MSG_RESULT([ SFCGAL version: ${SFCGAL_VERSION}]) fi AC_MSG_RESULT([ PostgreSQL config: ${PG_CONFIG}]) AC_MSG_RESULT([ PostgreSQL version: ${PGSQL_FULL_VERSION}]) AC_MSG_RESULT([ PROJ4 version: ${POSTGIS_PROJ_VERSION}]) AC_MSG_RESULT([ Libxml2 config: ${XML2CONFIG}]) AC_MSG_RESULT([ Libxml2 version: ${POSTGIS_LIBXML2_VERSION}]) AC_MSG_RESULT([ JSON-C support: ${HAVE_JSON}]) AC_MSG_RESULT([ PostGIS debug level: ${POSTGIS_DEBUG_LEVEL}]) AC_MSG_RESULT([ Perl: ${PERL}]) AC_MSG_RESULT() AC_MSG_RESULT([ --------------- Extensions --------------- ]) if test "x$RASTER" = "xraster"; then AC_MSG_RESULT([ PostGIS Raster: enabled]) else AC_MSG_RESULT([ PostGIS Raster: disabled]) fi if test "x$TOPOLOGY" = "xtopology"; then AC_MSG_RESULT([ PostGIS Topology: enabled]) else AC_MSG_RESULT([ PostGIS Topology: disabled]) fi if test "x$SFCGAL" = "xsfcgal"; then AC_MSG_RESULT([ SFCGAL support: enabled]) else AC_MSG_RESULT([ SFCGAL support: disabled]) fi AC_MSG_RESULT() AC_MSG_RESULT([ -------- Documentation Generation -------- ]) AC_MSG_RESULT([ xsltproc: ${XSLTPROC}]) AC_MSG_RESULT([ xsl style sheets: ${XSLBASE}]) AC_MSG_RESULT([ dblatex: ${DBLATEX}]) AC_MSG_RESULT([ convert: ${IMAGEMAGICK}]) AC_MSG_RESULT([ mathml2.dtd: ${MATHML2_DTD}]) AC_MSG_RESULT() if test "$GEOS_NUMERIC_VERSION" -lt 30302; then AC_MSG_RESULT([ --------- GEOS VERSION NOTICE ------------ ]) AC_MSG_RESULT([ You are building against GEOS ${GEOS_FULL_VERSION} ]) AC_MSG_RESULT([ To take advantage of all the features of ]) AC_MSG_RESULT([ PostGIS we recommend you build using ]) AC_MSG_RESULT([ GEOS 3.3.2 or higher. You can download ]) AC_MSG_RESULT([ the latest versions from ]) AC_MSG_RESULT([ http://trac.osgeo.org/geos ]) AC_MSG_RESULT() fi postgis-2.1.2+dfsg.orig/config.rpath0000755000000000000000000004364711500177531016106 0ustar rootroot#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2007 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix4* | aix5*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' < psql -f postgis/postgis.sql -d Your database should now be spatially enabled. ADDING RASTER SUPPORT TO A SPATIAL DATABASE ------------------------------------------- To enable raster support you must first load the ``postgis.sql`` file. You can then load the ``rtpostgis.sql`` file. psql -f postgis/rtpostgis.sql -d UPGRADING EXISTING SPATIAL DATABASES ------------------------------------ Upgrading existing spatial databases can be tricky as it requires replacement or introduction of new PostGIS object definitions. Unfortunately not all definitions can be easily replaced in a live database, so sometimes your best bet is a dump/reload process. PostGIS provides a SOFT UPGRADE procedure for minor or bugfix releases, and an HARD UPGRADE procedure for major releases. SOFT UPGRADE ~~~~~~~~~~~~ Soft upgrade consists of sourcing the ``postgis_upgrade_*.sql`` script in your spatial database: * ``postgis_upgrade_13_to_15.sql``, upgrade a 1.3.x database to 1.5 * ``postgis_upgrade_15_to_15.sql``, upgrade a 1.4.x database to 1.5 * ``postgis_upgrade_16_minor.sql``, upgrade a 1.5.x database to the latest minor release If a soft upgrade is not possible the script will abort and no harm will be done. You can then move on to the HARD UPGRADE process. Always try a soft upgrade first; they are much simpler. HARD UPGRADE ~~~~~~~~~~~~ Hard upgrade is a PostgreSQL dump/restore procedure combined with a filter to selectively update PostGIS functions and objects to point to a new library version. Hard upgrades are required when object definitions have changed, aggregates have changed or been added, and when the underlying PostgreSQL database itself has undergone a major update. For this purpose, PostGIS provides a utility script to restore a dump in "custom" format. The hard upgrade procedure is as follows:: # [1] Create a "custom-format" dump of the database you want # to upgrade (let's call it "olddb") $ pg_dump -Fc -f olddb.dump olddb # [2] Do a fresh install of PostGIS in a new database # (let's call it "newdb"). # Refer to CREATING NEW SPATIAL DATABASES for instructions # [3] Restore the dump into your new database. $ perl utils/postgis_restore.pl -v olddb.dump \ 2> restore.log | psql newdb 2> errors.log The ``spatial_ref_sys`` entries found in your dump will be restored, but they will not override existing ones in ``spatial_ref_sys``. This is to ensure that fixes in the official set will be properly propagated to restored databases. If for any reason you really want your own overrides of standard entries just don't load the ``spatial_ref_sys.sql`` file when creating the new database. If your database is really old or you know you've been using long deprecated functions in your views and functions, you might need to load ``legacy.sql`` before restoring the dump for all your functions and views etc. to properly come back. Only do this if *really* needed. Consider upgrading your views and functions before dumping instead, if possible. The deprecated functions can be later removed by loading ``uninstall_legacy.sql``. USAGE ----- Try the following example SQL statements to create non-OpenGIS tables and geometries:: CREATE TABLE geom_test ( gid int4, geom geometry, name varchar(25) ); INSERT INTO geom_test ( gid, geom, name ) VALUES ( 1, 'POLYGON((0 0 0,0 5 0,5 5 0,5 0 0,0 0 0))', '3D Square'); INSERT INTO geom_test ( gid, geom, name ) VALUES ( 2, 'LINESTRING(1 1 1,5 5 5,7 7 5)', '3D Line' ); INSERT INTO geom_test ( gid, geom, name ) VALUES ( 3, 'MULTIPOINT(3 4,8 9)', '2D Aggregate Point' ); SELECT * from geom_test WHERE geom && 'BOX3D(2 2 0,3 3 0)'::box3d; The following SQL creates proper OpenGIS entries in the ``SPATIAL_REF_SYS`` and ``GEOMETRY_COLUMNS`` tables, and ensures that all geometries are created with an SRID:: INSERT INTO SPATIAL_REF_SYS ( SRID, AUTH_NAME, AUTH_SRID, SRTEXT ) VALUES ( 1, 'EPSG', 4269, 'GEOGCS["NAD83", DATUM[ "North_American_Datum_1983", SPHEROID[ "GRS 1980", 6378137, 298.257222101 ] ], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433]]' ); CREATE TABLE geotest ( id INT4, name VARCHAR(32) ); SELECT AddGeometryColumn('db', 'geotest', 'geopoint', 1, 'POINT', 2); INSERT INTO geotest (id, name, geopoint) VALUES (1, 'Olympia', ST_GeomFromText('POINT(-122.90 46.97)', 1)); INSERT INTO geotest (id, name, geopoint) VALUES (2, 'Renton', ST_GeomFromText('POINT(-122.22 47.50)', 1)); SELECT name, AsText(geopoint) FROM geotest; Spatial Indexes ~~~~~~~~~~~~~~~ PostgreSQL provides support for GiST spatial indexing. The GiST scheme offers indexing even on large objects, using a system of "lossy" indexing where a large object is proxied by a smaller one in the index. In the case of the PostGIS indexing system, all objects are proxied in the index by their bounding boxes. You can build a GiST index with:: CREATE INDEX ON USING GIST ( ); Always run the ``VACUUM ANALYZE `` on your tables after creating an index. This gathers statistics which the query planner uses to optimize index usage. PostGIS Topology support ~~~~~~~~~~~~~~~~~~~~~~~~ See topology/README for more informations about topology support. postgis-2.1.2+dfsg.orig/aclocal.m40000644000000000000000000000464012315456233015430 0ustar rootroot# generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for 'mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl FIXME we are no longer going to remove this! adjust warning dnl FIXME message accordingly. AC_DIAGNOSE([obsolete], [$0: this macro is deprecated, and will soon be removed. You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead, and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.]) dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) m4_include([macros/ac_proj4_version.m4]) m4_include([macros/gettext.m4]) m4_include([macros/gtk-2.0.m4]) m4_include([macros/iconv.m4]) m4_include([macros/intlmacosx.m4]) m4_include([macros/lib-ld.m4]) m4_include([macros/lib-link.m4]) m4_include([macros/lib-prefix.m4]) m4_include([macros/libtool.m4]) m4_include([macros/ltoptions.m4]) m4_include([macros/ltsugar.m4]) m4_include([macros/ltversion.m4]) m4_include([macros/lt~obsolete.m4]) m4_include([macros/nls.m4]) m4_include([macros/po.m4]) m4_include([macros/progtest.m4]) postgis-2.1.2+dfsg.orig/config.guess0000755000000000000000000012675512315456230016121 0ustar rootroot#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011 Free Software Foundation, Inc. timestamp='2011-10-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo hexagon-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: postgis-2.1.2+dfsg.orig/postgis_svn_revision.h0000644000000000000000000000004312315456252020227 0ustar rootroot#define POSTGIS_SVN_REVISION 12389 postgis-2.1.2+dfsg.orig/.travis.yml0000644000000000000000000000140512312073012015660 0ustar rootroot--- env: global: - PGUSER=postgres - RUNTESTFLAGS=-v before_install: - rm .travis.yml - sudo apt-get update - apt-cache search libgdal - sudo apt-get install -q build-essential flex autoconf libtool gfortran postgresql-server-dev-9.1 xsltproc libjson0-dev libproj-dev dblatex xsltproc libcunit1-dev libcunit1 docbook-xsl docbook-mathml libgdal-dev libgeos-dev - git config --global user.name "PostGIS Travis CI" - git config --global user.email $HOSTNAME":not-for-mail@travis-ci.org" - ./autogen.sh language: c compiler: - gcc notifications: email: false irc: channels: - "irc.freenode.org#postgis" on_success: change on_failure: always use_notice: true #after_failure: # - cat /tmp/pgis_reg/* postgis-2.1.2+dfsg.orig/CREDITS0000644000000000000000000000022312140640344014573 0ustar rootrootFor updated credits, see the PostGIS manual. Offline: see doc/README Online: http://postgis.net/docs/manual-dev/postgis_introduction.html#credits postgis-2.1.2+dfsg.orig/NEWS0000644000000000000000000017777212315351750014306 0ustar rootroot PostGIS 2.1.2 2014/03/31 * Important Changes * * Bug Fixes * - #2666, Error out at configure time if no SQL preprocessor can be found - #2534, st_distance returning incorrect results for large geographies - #2539, Check for json-c/json.h presence/usability before json/json.h - #2543, invalid join selectivity error from simple query - #2546, GeoJSON with string coordinates parses incorrectly - #2547, Fix ST_Simplify(TopoGeometry) for hierarchical topogeoms - #2552, Fix NULL raster handling in ST_AsPNG, ST_AsTIFF and ST_AsJPEG - #2555, Fix parsing issue of range arguments of ST_Reclass - #2556, geography ST_Intersects results depending on insert order - #2580, Do not allow installing postgis twice in the same database - #2589, Remove use of unnecessary void pointers - #2607, Cannot open more than 1024 out-db files in one process - #2610, Ensure face splitting algorithm uses the edge index - #2615, EstimatedExtent (and hence, underlying stats) gathering wrong bbox - #2619, Empty rings array in GeoJSON polygon causes crash - #2634, regression in sphere distance code - #2638, Geography distance on M geometries sometimes wrong - #2648, #2653, Fix topology functions when "topology" is not in search_path - #2654, Drop deprecated calls from topology - #2655, Let users without topology privileges call postgis_full_version() - #2674, Fix missing operator = and hash_raster_ops opclass on raster - #2675, #2534, #2636, #2634, #2638, Geography distance issues with tree optimization * Enhancements * - #2494, avoid memcopy in GiST index (hayamiz) - #2560, soft upgrade: avoid drop/recreate of aggregates that hadn't changed PostGIS 2.1.1 2013/11/08 * Important Changes * - #2514, Change raster license from GPL v3+ to v2+, allowing distribution of PostGIS Extension as GPLv2. * Bug Fixes * - #2396, Make regression tests more endian-agnostic - #2434, Fix ST_Intersection(geog,geog) regression in rare cases - #2454, Fix behavior of ST_PixelAsXXX functions regarding exclude_nodata_value parameter - #2449, Fix potential infinite loop in index building - #2489, Fix upgrades from 2.0 leaving stale function signatures - #2493, Fix behavior of ST_DumpValues when passed an empty raster - #2502, Fix postgis_topology_scripts_installed() install schema - #2504, Fix segfault on bogus pgsql2shp call - #2512, Support for foreign tables and materialized views in raster_columns and raster_overviews - #2525, Fix handling of SRID in nested collections - #2528, Fix memory leak in ST_Split / lwline_split_by_line - #2532, Add missing raster/geometry commutator operators - #2533, Remove duplicated signatures * Enhancements * - #2463, support for exact length calculations on arc geometries - #2478, support for tiger 2013 - #2527, Added -k flag to raster2pgsql to skip checking that band is NODATA PostGIS 2.1.0 2013/08/17 * Important / Breaking Changes * - #1653, Removed srid parameter from ST_Resample(raster) and variants with reference raster no longer apply reference raster's SRID. - #1962 ST_Segmentize - As a result of the introduction of geography support, The construct: SELECT ST_Segmentize('LINESTRING(1 2, 3 4)',0.5); will result in ambiguous function error - #2026, ST_Union(raster) now unions all bands of all rasters - #2089, liblwgeom: lwgeom_set_handlers replaces lwgeom_init_allocators. - #2150, regular_blocking is no longer a constraint. column of same name in raster_columns now checks for existance of spatially_unique and coverage_tile constraints - ST_Intersects(raster, geometry) behaves in the same manner as ST_Intersects(geometry, raster). - point variant of ST_SetValue(raster) previously did not check SRID of input geometry and raster. - ST_Hillshade parameters azimuth and altitude are now in degrees instead of radians. - ST_Slope and ST_Aspect return pixel values in degrees instead of radians. * Deprecated signatures * - #2104, ST_World2RasterCoord, ST_World2RasterCoordX and ST_World2RasterCoordY renamed to ST_WorldToRasterCoord, ST_WorldToRasterCoordX and ST_WorldToRasterCoordY. ST_Raster2WorldCoord, ST_Raster2WorldCoordX and ST_Raster2WorldCoordY renamed to ST_RasterToWorldCoord, ST_RasterToWorldCoordX and ST_RasterToWorldCoordY - ST_Estimated_Extent renamed to ST_EstimatedExtent - ST_Line_Interpolate_Point renamed to ST_LineInterpolatePoint - ST_Line_Substring renamed to ST_LineSubstring - ST_Line_Locate_Point renamed to ST_LineLocatePoint - ST_Force_XXX renamed to ST_ForceXXX - ST_MapAlgebraFctNgb and 1 and 2 raster variants of ST_MapAlgebraFct. Use ST_MapAlgebra instead - 1 and 2 raster variants of ST_MapAlgebraExpr. Use expression variants of ST_MapAlgebra instead * New Features * Refer to http://postgis.net/docs/manual-2.1/PostGIS_Special_Functions_Index.html#NewFunctions_2_1 for complete list of new functions - #310, ST_DumpPoints converted to a C function (Nathan Wagner) - #739, UpdateRasterSRID() - #945, improved join selectivity, N-D selectivity calculations, user accessible selectivity and stats reader functions for testing (Paul Ramsey / OpenGeo) - toTopoGeom with TopoGeometry sink (Sandro Santilli / Vizzuality) - clearTopoGeom (Sandro Santilli / Vizzuality) - ST_Segmentize(geography) (Paul Ramsey / OpenGeo) - ST_DelaunayTriangles (Sandro Santilli / Vizzuality) - ST_NearestValue, ST_Neighborhood (Bborie Park / UC Davis) - ST_PixelAsPoint, ST_PixelAsPoints (Bborie Park / UC Davis) - ST_PixelAsCentroid, ST_PixelAsCentroids (Bborie Park / UC Davis) - ST_Raster2WorldCoord, ST_World2RasterCoord (Bborie Park / UC Davis) - Additional raster/raster spatial relationship functions (ST_Contains, ST_ContainsProperly, ST_Covers, ST_CoveredBy, ST_Disjoint, ST_Overlaps, ST_Touches, ST_Within, ST_DWithin, ST_DFullyWithin) (Bborie Park / UC Davis) - Added array variants of ST_SetValues() to set many pixel values of a band in one call (Bborie Park / UC Davis) - #1293, ST_Resize(raster) to resize rasters based upon width/height - #1627, package tiger_geocoder as a PostgreSQL extension - #1643, #2076, Upgrade tiger geocoder to support loading tiger 2011 and 2012 (Regina Obe / Paragon Corporation) Funded by Hunter Systems Group - GEOMETRYCOLLECTION support for ST_MakeValid (Sandro Santilli / Vizzuality) - #1709, ST_NotSameAlignmentReason(raster, raster) - #1818, ST_GeomFromGeoHash and friends (Jason Smith (darkpanda)) - #1856, reverse geocoder rating setting for prefer numbered highway name - ST_PixelOfValue (Bborie Park / UC Davis) - Casts to/from PostgreSQL geotypes (point/path/polygon). - Added geomval array variant of ST_SetValues() to set many pixel values of a band using a set of geometries and corresponding values in one call (Bborie Park / UC Davis) - ST_Tile(raster) to break up a raster into tiles (Bborie Park / UC Davis) - #1895, new r-tree node splitting algorithm (Alex Korotkov) - #2011, ST_DumpValues to output raster as array (Bborie Park / UC Davis) - #2018, ST_Distance support for CircularString, CurvePolygon, MultiCurve, MultiSurface, CompoundCurve - #2030, n-raster (and n-band) ST_MapAlgebra (Bborie Park / UC Davis) - #2193, Utilize PAGC parser as drop in replacement for tiger normalizer (Steve Woodbridge, Regina Obe) - #2210, ST_MinConvexHull(raster) - lwgeom_from_geojson in liblwgeom (Sandro Santilli / Vizzuality) - #1687, ST_Simplify for TopoGeometry (Sandro Santilli / Vizzuality) - #2228, TopoJSON output for TopoGeometry (Sandro Santilli / Vizzuality) - #2123, ST_FromGDALRaster - #613, ST_SetGeoReference with numerical parameters instead of text - #2276, ST_AddBand(raster) variant for out-db bands - #2280, ST_Summary(raster) - #2163, ST_TPI for raster (Nathaniel Clay) - #2164, ST_TRI for raster (Nathaniel Clay) - #2302, ST_Roughness for raster (Nathaniel Clay) - #2290, ST_ColorMap(raster) to generate RGBA bands - #2254, Add SFCGAL backend support. (Backend selection throught postgis.backend var) Functions available both throught GEOS or SFCGAL: ST_Intersects, ST_3DIntersects, ST_Intersection, ST_Area, ST_Distance, ST_3DDistance New functions available only with SFCGAL backend: ST_3DIntersection, ST_Tesselate, ST_3DArea, ST_Extrude, ST_ForceLHR ST_Orientation, ST_Minkowski, ST_StraightSkeleton postgis_sfcgal_version New function available in PostGIS: ST_ForceSFS (Olivier Courtin and Hugo Mercier / Oslandia) * Enhancements * - #823, tiger geocoder: Make loader_generate_script download portion less greedy - #826, raster2pgsql no longer defaults to padding tiles. Flag -P can be used to pad tiles - #1363, ST_AddBand(raster, ...) array version rewritten in C - #1364, ST_Union(raster, ...) aggregate function rewritten in C - #1655, Additional default values for parameters of ST_Slope - #1661, Add aggregate variant of ST_SameAlignment - #1719, Add support for Point and GeometryCollection ST_MakeValid inputs - #1780, support ST_GeoHash for geography - #1796, Big performance boost for distance calculations in geography - #1802, improved function interruptibility. - #1823, add parameter in ST_AsGML to use id column for GML 3 output (become mandatory since GML 3.2.1) - #1856, tiger geocoder: reverse geocoder rating setting for prefer numbered highway name - #1938, Refactor basic ST_AddBand to add multiple new bands in one call - #1978, wrong answer when calculating length of a closed circular arc (circle) - #1989, Preprocess input geometry to just intersection with raster to be clipped - #2021, Added multi-band support to ST_Union(raster, ...) aggregate function - #2006, better support of ST_Area(geography) over poles and dateline - #2065, ST_Clip(raster, ...) now a C function - #2069, Added parameters to ST_Tile(raster) to control padding of tiles - #2078, New variants of ST_Slope, ST_Aspect and ST_HillShade to provide solution to handling tiles in a coverage - #2097, Added RANGE uniontype option for ST_Union(raster) - #2105, Added ST_Transform(raster) variant for aligning output to reference raster - #2119, Rasters passed to ST_Resample(), ST_Rescale(), ST_Reskew(), and ST_SnapToGrid() no longer require an SRID - #2141, More verbose output when constraints fail to be added to a raster column - #2143, Changed blocksize constraint of raster to allow multiple values - #2148, Addition of coverage_tile constraint for raster - #2149, Addition of spatially_unique constraint for raster - TopologySummary output now includes unregistered layers and a count of missing TopoGeometry objects from their natural layer. - ST_HillShade(), ST_Aspect() and ST_Slope() have one new optional parameter to interpolate NODATA pixels before running the operation. - Point variant of ST_SetValue(raster) is now a wrapper around geomval variant of ST_SetValues(rast). - Proper support for raster band's isnodata flag in core API and loader. - Additional default values for parameters of ST_Aspect and ST_HillShade - #2178, ST_Summary now advertises presence of known srid with an [S] flag - #2202, Make libjson-c optional (--without-json configure switch) - #2213, Add support libjson-c 0.10+ - #2231, raster2pgsql supports user naming of filename column with -n - #2200, ST_Union(raster, uniontype) unions all bands of all rasters - #2264, postgis_restore.pl support for restoring into databases with postgis in a custom schema - #2244, emit warning when changing raster's georeference if raster has out-db bands - #2222, add parameter OutAsIn to flag whether ST_AsBinary should return out-db bands as in-db bands * Fixes * - #1839, handling of subdatasets in GeoTIFF in raster2pgsql. - #1840, fix logic of when to compute # of tiles in raster2pgsql. - #1870, align the docs and actual behavior of raster's ST_Intersects - #1872, fix ST_ApproxSummarystats to prevent division by zero - #1875, ST_SummaryStats returns NULL for all parameters except count when count is zero - #1932, fix raster2pgsql of syntax for index tablespaces - #1936, ST_GeomFromGML on CurvePolygon causes server crash - #1939, remove custom data types: summarystats, histogram, quantile, valuecount - #1951, remove crash on zero-length linestrings - #1957, ST_Distance to a one-point LineString returns NULL - #1976, Geography point-in-ring code overhauled for more reliability - #1981, cleanup of unused variables causing warnings with gcc 4.6+ - #1996, support POINT EMPTY in GeoJSON output - #2062, improve performance of distance calculations - #2057, Fixed linking issue for raster2psql to libpq - #2077, Fixed incorrect values returning from ST_Hillshade() - #2019, ST_FlipCoordinates does not update bbox - #2100, ST_AsRaster may not return raster with specified pixel type - #2126, Better handling of empty rasters from ST_ConvexHull() - #2165, ST_NumPoints regression failure with CircularString - #2168, ST_Distance is not always commutative - #2182, Fix issue with outdb rasters with no SRID and ST_Resize - #2188, Fix function parameter value overflow that caused problems when copying data from a GDAL dataset - #2198, Fix incorrect dimensions used when generating bands of out-db rasters in ST_Tile() - #2201, ST_GeoHash wrong on boundaries - #2203, Changed how rasters with unknown SRID and default geotransform are handled when passing to GDAL Warp API - #2215, Fixed raster exclusion constraint for conflicting name of implicit index - #2251, Fix bad dimensions when rescaling rasters with default geotransform matrix - #2133, Fix performance regression in expression variant of ST_MapAlgebra - #2257, GBOX variables not initialized when testing with empty geometries - #2271, Prevent parallel make of raster - #2282, Fix call to undefined function nd_stats_to_grid() in debug mode - #2307, ST_MakeValid outputs invalid geometries - #2309, Remove confusing INFO message when trying to get SRS info - #2336, FIPS 20 (KS) causes wildcard expansion to wget all files - #2348, Provide raster upgrade path for 2.0 to 2.1 - #2351, st_distance between geographies wrong - #2359, Fix handling of schema name when adding overview constraints - #2371, Support GEOS versions with more than 1 digit in micro - #2383, Remove unsafe use of \' from raster warning message - #2384, Incorrect variable datatypes for ST_Neighborhood * Known Issues * - #2111, Raster bands can only reference the first 256 bands of out-db rasters PostGIS 2.0.4 2013/09/06 * Bug Fixes * - #2110, Equality operator between EMPTY and point on origin - Allow adding points at precision distance with TopoGeo_addPoint - #1968, Fix missing edge from toTopoGeom return - #2165, ST_NumPoints regression failure with CircularString - #2168, ST_Distance is not always commutative - #2186, gui progress bar updates too frequent - #2201, ST_GeoHash wrong on boundaries - #2257, GBOX variables not initialized when testing with empty geometries - #2271, Prevent parallel make of raster - #2267, Server crash from analyze table - #2277, potential segfault removed - #2307, ST_MakeValid outputs invalid geometries - #2351, st_distance between geographies wrong - #2359, Incorrect handling of schema for overview constraints - #2371, Support GEOS versions with more than 1 digit in micro - #2372, Cannot parse space-padded KML coordinates - Fix build with systemwide liblwgeom installed - #2383, Fix unsafe use of \' in warning message - #2410, Fix segmentize of collinear curve - #2415, ST_Multi support for COMPOUNDCURVE and CURVEPOLYGON - #2412, ST_LineToCurve support for lines with less than 4 vertices - #2420, ST_LineToCurve: require at least 8 edges to define a full circle - #2423, ST_LineToCurve: require all arc edges to form the same angle - #2424, ST_CurveToLine: add support for COMPOUNDCURVE in MULTICURVE - #2427, Make sure to retain first point of curves on ST_CurveToLine * Enhancements * - #2269, Avoid uselessly de-toasting full geometries on ANALYZE * Known Issues * - #2111, Raster bands can only reference the first 256 bands of out-db rasters PostGIS 2.0.3 2013/03/01 * Bug Fixes * - #2134, Fixed handling of SRS strings as they are passed to GDAL functions PostGIS 2.0.2 2012/12/03 * Bug Fixes * - #1287, Drop of "gist_geometry_ops" broke a few clients package of legacy_gist.sql for these cases - #1391, Errors during upgrade from 1.5 - #1828, Poor selectivity estimate on ST_DWithin - #1838, error importing tiger/line data - #1869, ST_AsBinary is not unique - added to legacy_minor/legacy.sql scripts - #1885, Missing field from tabblock table in tiger2010 census_loader.sql - #1891, Use LDFLAGS environment when building liblwgeom - #1899, Enhance toTopoGeom error on unsupported input - #1900, Fix pgsql2shp for big-endian systems - #1932, Fix raster2pgsql for invalid syntax for setting index tablespace - #1936, ST_GeomFromGML on CurvePolygon causes server crash - #1955, ST_ModEdgeHeal and ST_NewEdgeHeal for doubly connected edges - #1957, ST_Distance to a one-point LineString returns NULL - #1976, Geography point-in-ring code overhauled for more reliability - #1978, wrong answer calculating length of closed circular arc (circle) - #1981, Remove unused but set variables as found with gcc 4.6+ - #1987, Restore 1.5.x behaviour of ST_Simplify - #1989, Preprocess input geometry to just intersection with raster to be clipped - #1991, geocode really slow on PostgreSQL 9.2 - #1996, support POINT EMPTY in GeoJSON output - #1998, Fix ST_{Mod,New}EdgeHeal joining edges sharing both endpoints - #2001, ST_CurveToLine has no effect if the geometry doesn't actually contain an arc - #2015, ST_IsEmpty('POLYGON(EMPTY)') returns False - #2019, ST_FlipCoordinates does not update bbox - #2025, Fix side location conflict at TopoGeo_AddLineString - #2062, improve performance of distance calculations - #2033, Fix adding a splitting point into a 2.5d topology - #2051, Fix excess of precision in ST_AsGeoJSON output - #2052, Fix buffer overflow in lwgeom_to_geojson - #2056, Fixed lack of SRID check of raster and geometry in ST_SetValue() - #2057, Fixed linking issue for raster2psql to libpq - #2060, Fix "dimension" check violation by GetTopoGeomElementArray - #2072, Removed outdated checks preventing ST_Intersects(raster) from working on out-db bands - #2077, Fixed incorrect answers from ST_Hillshade(raster) - #2092, Namespace issue with ST_GeomFromKML,ST_GeomFromGML for libxml 2.8+ - #2099, Fix double free on exception in ST_OffsetCurve - #2100, ST_AsRaster() may not return raster with specified pixel type - #2108, Ensure ST_Line_Interpolate_Point always returns POINT - #2109, Ensure ST_Centroid always returns POINT - #2117, Ensure ST_PointOnSurface always returns POINT - #2129, Fix SRID in ST_Homogenize output with collection input - #2130, Fix memory error in MultiPolygon GeoJson parsing - Update URL of Maven jar * Enhancements * - #1581, ST_Clip(raster, ...) no longer imposes NODATA on a band if the corresponding band from the source raster did not have NODATA - #1928, Accept array properties in GML input multi-geom input (Kashif Rasul and Shoaib Burq / SpacialDB) - #2082, Add indices on start_node and end_node of topology edge tables - #2087, Speedup topology.GetRingEdges using a recursive CTE PostGIS 2.0.1 2012/06/22 * Bug Fixes * - #1264, fix st_dwithin(geog, geog, 0). - #1468 shp2pgsql-gui table column schema get shifted - #1694, fix building with clang. (vince) - #1708, improve restore of pre-PostGIS 2.0 backups. - #1714, more robust handling of high topology tolerance. - #1755, ST_GeographyFromText support for higher dimensions. - #1759, loading transformed shapefiles in raster enabled db. - #1761, handling of subdatasets in NetCDF, HDF4 and HDF5 in raster2pgsql. - #1763, topology.toTopoGeom use with custom search_path. - #1766, don't let ST_RemEdge* destroy peripheral TopoGeometry objects. - #1774, Clearer error on setting an edge geometry to an invalid one. - #1775, ST_ChangeEdgeGeom collision detection with 2-vertex target. - #1776, fix ST_SymDifference(empty, geom) to return geom. - #1779, install SQL comment files. - #1782, fix spatial reference string handling in raster. - #1789, fix false edge-node crossing report in ValidateTopology. - #1790, fix toTopoGeom handling of duplicated primitives. - #1791, fix ST_Azimuth with very close but distinct points. - #1797, fix (ValidateTopology(xxx)).* syntax calls. - #1805, put back the 900913 SRID entry. - #1813, Only show readable relations in metadata tables. - #1819, fix floating point issues with ST_World2RasterCoord and ST_Raster2WorldCoord variants. - #1820 compilation on 9.2beta1. - #1822, topology load on PostgreSQL 9.2beta1. - #1825, fix prepared geometry cache lookup - #1829, fix uninitialized read in GeoJSON parser - #1834, revise postgis extension to only backup user specified spatial_ref_sys - #1839, handling of subdatasets in GeoTIFF in raster2pgsql. - #1840, fix logic of when to compute # of tiles in raster2pgsql. - #1851, fix spatial_ref_system parameters for EPSG:3844 - #1857, fix failure to detect endpoint mismatch in ST_AddEdge*Face* - #1865, data loss in postgis_restore.pl when data rows have leading dashes. - #1867, catch invalid topology name passed to topogeo_add* - #1870, align the docs and actual behavior of raster's ST_Intersects - #1872, fix ST_ApproxSummarystats to prevent division by zero - #1873, fix ptarray_locate_point to return interpolated Z/M values for on-the-line case - #1875, ST_SummaryStats returns NULL for all parameters except count when count is zero - #1881, shp2pgsql-gui -- editing a field sometimes triggers removing row - #1883, Geocoder install fails trying to run create_census_base_tables() (Brian Panulla) * Enhancements * - More detailed exception message from topology editing functions. - #1786, improved build dependencies - #1806, speedup of ST_BuildArea, ST_MakeValid and ST_GetFaceGeometry. - #1812, Add lwgeom_normalize in LIBLWGEOM for more stable testing. PostGIS 2.0.0 2012/04/03 * Important / Breaking Changes * - Upgrading to PostGIS 2.0 REQUIRES a dump and restore. See the "Hard Upgrade" section of the documentation. - Functions deprecated during the 1.X series (mostly non-ST variants) have been removed. Update your application to the new signatures. If you cannot update your application, see the legacy.sql file to enable the old signatures. - GEOMETRY_COLUMNS is now a view, not a table. Code that manually updates the table must be changed to either use the management functions (eg AddGeometryColumn) or the new geometry typmod options (eg CREATE TABLE t (g GEOMETRY(Polgyon, 4326))) - ST_AsBinary and ST_AsText now return 3D/4D results in ISO SQL/MM format when called on 3D/4D features. - The "unknonwn SRID" is now 0, not -1. (eg ST_SRID(ST_GeomFromText('POINT(0 0)')) returns 0) - ST_NumGeometries returns 1 for singletons. ST_GeometryN returns the the geometry for singletons. - probe_geometry_columns(), rename_geometry_table_constraints(), fix_geometry_columns(), have been removed since GEOMETRY_COLUMNS is now a view. - 3D analysis functions are now named with "3D" as a prefix instead of a suffix (eg ST_Length3D has become ST_3DLength) - Operator && does not check for SRID mismatch anymore * New Features * - KNN Gist index based centroid (<->) and box (<#>) distance operators (Paul Ramsey / funded by Vizzuality) - PostgreSQL 9.1+ "extension" support (Regina Obe) - Typmod support for geometry (Paul Ramsey) - Support for TIN and PolyHedralSurface (Olivier Courtin / Oslandia) - Raster support integrated and documented (Pierre Racine, Jorge Arévalo, Mateusz Loskot, Sandro Santilli, Regina Obe, David Zwarg) (Company developer and funding: University Laval, Deimos Space, CadCorp, Michigan Tech Research Institute, Paragon Corporation, Azavea) - N-Dimensional spatial indexes (Paul Ramsey / OpenGeo) - Topology support improved, documented, testing, bug fixes (Sandro Santilli / Faunalia for RT-SIGTA, Regina Obe, Andrea Peri, Jose Carlos Martinez Llari) - 3D relationship support functions (Nicklas Avèn) ST_3DDistance, ST_3DClosestPoint, ST_3DIntersects, ST_3DShortestLine - ST_Split (Sandro Santilli / Faunalia for RT-SIGTA) - ST_Node (Sandro Santilli) - ST_isValidDetail (Sandro Santilli / Faunalia for RT-SIGTA) - ST_MakeValid (Sandro Santilli / Faunalia for RT-SIGTA) - ST_RemoveRepeatedPoints (Sandro Santilli / Faunalia for RT-SIGTA) - ST_GeometryN and ST_NumGeometries support for non-collections (Sandro Santilli) - ST_IsCollection (Sandro Santilli, Maxime van Noppen) - ST_SharedPaths (Sandro Santilli / Faunalia for RT-SIGTA) - ST_Snap (Sandro Santilli) - ST_RelateMatch (Sandro Santilli / Faunalia for RT-SIGTA) - ST_ConcaveHull (Regina Obe and Leo Hsu / Paragon Corporation) - ST_UnaryUnion (Sandro Santilli) - ST_Relate with boundary node rule (Sandro Santilli / Faunalia for RT-SIGTA) - ST_AsX3D (Regina Obe / Arrival 3D) - ST_OffsetCurve (Sandro Santilli, Rafal Magda) - ST_GeomFromGeoJSON (Kashif Rasul, Paul Ramsey / Vizzuality) - ST_AsBinary byte endian support for geography * Enhancements * - Made loader tolerant of truncated multibyte values found in some free worldwide shapefiles (Sandro Santilli) - Lots of bug fixes and enhancements to shp2pgsql Beefing up regression tests for loaders Reproject support for both geometry and geography during import (Jeff Adams / Azavea, Mark Cave-Ayland) - pgsql2shp conversion from predefined list (Loic Dachary / Mark Cave-Ayland) - Shp-pgsql GUI - support loading multiple files. (Mark Leslie) - Shp-pgsql GUI - support exporting multiple tablee. (Mark Cave-Ayland) - Extras - upgraded tiger_geocoder from using old TIGER format to use new TIGER shp and file structure format (Stephen Frost) - Enhancements and documentation of TIGER geocoder (Regina Obe, Leo Hsu / Paragon Corporation / funding provided by Hunter Systems Group) - Documentation proofreading and corrections. (Kasif Rasul) * All Fixes and Enhancements * - http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS+2.0.0 * Acknowledgements * We are most indebted to the numerous members in the PostGIS community who were brave enough to TEST out the new features in this release. No major release can be successful without lots of testing. Below is an incomplete list of some of the many folks who helped us get to this release. - Andrea Peri - Lots of testing on topology, checking for correctness - Andreas Forø Tollefsen - raster testing - Chris English - topology stress testing loader functions - Salvatore Larosa - Lots of topology testing - Brian Hamlin - Benchmarking, general testing all components - Mike Pease - Tiger geocoder testing, very detailed reports of issues - Tom van Tilburg - raster testing PostGIS 1.5.3 2011/06/25 - This is a bug fix release, addressing issues that have been filed since the 1.5.2 release. - Bug Fixes - #1056, produce correct bboxes for arc geometries, fixes index errors (Paul Ramsey) - #1007, ST_IsValid crash - fix requires GEOS 3.3.0+ or 3.2.3+ (Sandro Santilli, reported by Birgit Laggner) - #940, support for PostgreSQL 9.1 beta 1 (Regina Obe, Paul Ramsey, patch submitted by stl) - #845, ST_Intersects precision error (Sandro Santilli, Nicklas Avén) Reported by cdestigter - #884, Unstable results with ST_Within, ST_Intersects (Chris Hodgson) - #779, shp2pgsql -S option seems to fail on points (Jeff Adams) - #666, ST_DumpPoints is not null safe (Regina Obe) - #631, Update NZ projections for grid transformation support (jpalmer) - #630, Peculiar Null treatment in arrays in ST_Collect (Chris Hodgson) Reported by David Bitner - #624, Memory leak in ST_GeogFromText (ryang, Paul Ramsey) - #609, Bad source code in manual section 5.2 Java Clients (simoc, Regina Obe) - #604, shp2pgsql usage touchups (Mike Toews, Paul Ramsey) - #573 ST_Union fails on a group of linestrings Not a PostGIS bug, fixed in GEOS 3.3.0 - #457 ST_CollectionExtract returns non-requested type (Nicklas Avén, Paul Ramsey) - #441 ST_AsGeoJson Bbox on GeometryCollection error (Olivier Courtin) - #411 Ability to backup invalid geometries (Sando Santilli) Reported by Regione Toscana - #409 ST_AsSVG - degraded (Olivier Courtin) Reported by Sdikiy - #373 Documentation syntax error in hard upgrade (Paul Ramsey) Reported by psvensso PostGIS 1.5.2 2010/09/27 - This is a bug fix release, addressing issues that have been filed since the 1.5.1 release. - Bug Fixes - Loader: fix handling of empty (0-verticed) geometries in shapefiles. (Sandro Santilli) - #536, Geography ST_Intersects, ST_Covers, ST_CoveredBy and Geometry ST_Equals not using spatial index (Regina Obe, Nicklas Avén) - #573, Improvement to ST_Contains geography - Loader: Add support for command-q shutdown in Mac GTK build (Paul Ramsey) - #393, Loader: Add temporary patch for large DBF files (Maxime Guillaud, Paul Ramsey) - #507, Fix wrong OGC URN in GeoJSON and GML output (Olivier Courtin) - spatial_ref_sys.sql Add datum conversion for projection SRID 3021 (Paul Ramsey) - Geography - remove crash for case when all geographies are out of the estimate (Paul Ramsey) - #469, Fix for array_aggregation error (Greg Stark, Paul Ramsey) - #532, Temporary geography tables showing up in other user sessions (Paul Ramsey) - #562, ST_Dwithin errors for large geographies (Paul Ramsey) - #513, shape loading GUI tries to make spatial index when loading DBF only mode (Paul Ramsey) - #527, shape loading GUI should always append log messages (Mark Cave-Ayland) - #504 shp2pgsql should rename xmin/xmax fields (Sandro Santilli) - #458 postgis_comments being installed in contrib instead of version folder (Mark Cave-Ayland) - #474 Analyzing a table with geography column crashes server (Paul Ramsey) - #581 LWGEOM-expand produces inconsistent results (Mark Cave-Ayland) - #471 DocBook dtd errors (Olivier Courtin) - Fix further build issues against PostgreSQL 9.0 (Mark Cave-Ayland) - #572 Password whitespace for Shape File to PostGIS Import not supported (Mark Cave-Ayland) - #603: shp2pgsql: "-w" produces invalid WKT for MULTI* objects. (Mark Cave-Ayland) - Enhancement - #513 Add dbf filter to shp2pgsql-gui and allow uploading dbf only (Paul Ramsey) PostGIS 1.5.1 2010/03/11 - This is a bug fix release, addressing issues that have been filed since the 1.5.0 release. - Bug Fixes - #410, update embedded bbox when applying ST_SetPoint, ST_AddPoint ST_RemovePoint to a linestring (Paul Ramsey) - #411, allow dumping tables with invalid geometries (Sandro Santilli, for Regione Toscana-SIGTA) - #414, include geography_columns view when running upgrade scripts (Paul Ramsey) - #419, allow support for multilinestring in ST_Line_Substring (Paul Ramsey, for Lidwala Consulting Engineers) - #421, fix computed string length in ST_AsGML() (Olivier Courtin) - #441, fix GML generation with heterogeneous collections (Olivier Courtin) - #443, incorrect coordinate reversal in GML 3 generation (Olivier Courtin) - #450, #451, wrong area calculation for geography features that cross the date line (Paul Ramsey) - Ensure support for upcoming 9.0 PgSQL release (Paul Ramsey) PostGIS 1.5.0 2010/02/04 * Important Changes * - =~ operator now indicates bounding box equality, not feature equality - GEOS 3.1 is now the minimum accepted version of GEOS - GEOS 3.2 is needed if you want to use enhanced buffering features and ST_HausdorffDistance - GEOS, LibXML2, and Proj4 are now mandatory dependencies * New Features * - Added Hausdorff distance calculations (#209) (Vincent Picavet) - Added parameters argument to ST_Buffer operation to support one-sided buffering and other buffering styles (Sandro Santilli) - Performance improvements to ST_Distance (Nicklas Avén) - Addition of other Distance related visualization and analysis functions (Nicklas Avén) - ST_ClosestPoint - ST_DFullyWithin - ST_LongestLine - ST_MaxDistance - ST_ShortestLine - KML, GML input via ST_GeomFromGML and ST_GeomFromKML (Olivier Courtin) - Extract homogeneous collection with ST_CollectionExtract (Paul Ramsey) - Add measure values to existing linestring with ST_AddMeasure (Paul Ramsey) - History table implementation in utils (George Silva) - Win32 support and improvement of core shp2pgsql-gui (Mark Cave-Ayland) - In place 'make check' support (Paul Ramsey) - Geography type and supporting functions - Spherical algorithms from Dave Skea - Object/index implementation from Paul Ramsey - Selectivitiy implementation from Mark Cave-Ayland - Serializations (KML, GML, JSON) from Olivier Courtin - ST_Area, ST_Distance, ST_DWithin, ST_GeogFromText, ST_GeogFromWKB, ST_Intersects, ST_Covers, ST_Buffer - Documentation updates and improvements (Regina Obe, Kevin Neufeld) - Testing and quality control (Regina Obe) - PostGIS 1.5 support PostgreSQL 8.5 trunk (Guillaume Lelarge) - Many many other changes: http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS+1.5.0 PostGIS 1.4.1 2009/11/28 - This is a bug fix release, addressing issues that have been filed since the 1.4.0 release. - Bug Fixes - #241, crash in ST_LineCrossingDirection - #210, segmentation faults in ST_Union with NULLs - #277, crash on very large numeric inputs - #179, ST_MakeLine crash server with NULLs - #253, inconsistent results when using the ~= operator - #276, ST_AsGML producing non-compliant GML - #239, memory issues with ST_As* functions - #272, ST_LineCrossingDirection should be negatively symmetric - #316, parsing problem for invalid higher dimensional geometries PostGIS 1.4.0 2009/06/XX - API Stability - As of the 1.4 release series, the public API of PostGIS will not change during minor releases. - Compatibility - The versions below are the *minimum* requirements for PostGIS 1.4 - PostgreSQL 8.2 and higher on all platforms - GEOS 3.0 and higher only - PROJ4 4.5 and higher only - New Features - ST_Union() uses high-speed cascaded union when compiled against GEOS 3.1+ (Paul Ramsey) - ST_ContainsProperly() requires GEOS 3.1+ - ST_Intersects(), ST_Contains(), ST_Within() use high-speed cached prepared geometry against GEOS 3.1+ (Paul Ramsey / funded by Zonar Systems) - Vastly improved documentation and reference manual (Regina Obe & Kevin Neufeld) - Figures and diagram examples in the reference manual (Kevin Neufeld) - ST_IsValidReason() returns readable explanations for validity failures (Paul Ramsey) - ST_GeoHash() returns a geohash.org signature for geometries (Paul Ramsey) - GTK+ multi-platform GUI for shape file loading (Paul Ramsey) - ST_LineCrossingDirection() returns crossing directions (Paul Ramsey) - ST_LocateBetweenElevations() returns sub-string based on Z-ordinate. (Paul Ramsey) - Geometry parser returns explicit error message about location of syntax errors (Mark Cave-Ayland) - ST_AsGeoJSON() return JSON formatted geometry (Olivier Courtin) - Populate_Geometry_Columns() -- automatically add records to geometry_columns for TABLES and VIEWS (Kevin Neufeld) -- ST_MinimumBoundingCircle() -- returns the smallest circle polygon that can encompass a geometry (Bruce Rindahl) - Enhancements - Core geometry system moved into independent library, liblwgeom. (Mark Cave-Ayland) - New build system uses PostgreSQL "pgxs" build bootstrapper. (Mark Cave-Ayland) - Debugging framework formalized and simplified. (Mark Cave-Ayland) - All build-time #defines generated at configure time and placed in headers for easier cross-platform support (Mark Cave-Ayland) - Logging framework formalized and simplified (Mark Cave-Ayland) - Expanded and more stable support for CIRCULARSTRING, COMPOUNDCURVE and CURVEPOLYGON, better parsing, wider support in functions (Mark Leslie & Mark Cave-Ayland) - Improved support for OpenSolaris builds (Paul Ramsey) - Improved support for MSVC builds (Mateusz Loskot) - Updated KML support (Olivier Courtin) - Unit testing framework for liblwgeom (Paul Ramsey) - New testing framework to comprehensively exercise every PostGIS function (Regine Obe) - Performance improvements to all geometry aggregate functions (Paul Ramsey) - Support for the upcoming PostgreSQL 8.4 (Mark Cave-Ayland, Talha Bin Rizwan) - Shp2pgsql and pgsql2shp re-worked to depend on the common parsing/unparsing code in liblwgeom (Mark Cave-Ayland) - Use of PDF DbLatex to build PDF docs and preliminary instructions for build (Jean David Techer) - Automated User documentation build (PDF and HTML) and Developer Doxygen Documentation (Kevin Neufeld) - Automated build of document images using ImageMagick from WKT geometry text files (Kevin Neufeld) - More attractive CSS for HTML documentation (Dane Springmeyer) - Bug fixes - http://trac.osgeo.org/postgis/query?status=closed&milestone=postgis+1.4.0&order=priority PostGIS 1.3.6 2009/05/04 - Enhancement - PostgreSQL 8.4 compile support (Talha Rizwan, Mark Cave-Ayland) - Fix Big fixes for CURVE handling in many functions (Mark Cave-Ayland, Mark Leslie) - Enhancement Trac#34 - pgsql2shp now creates .prj files where applicable (Regina Obe) - Fix Trac#88 - Windows Vista pgsql2shp memory bug (Regina Obe) - Fix Trac#146 - for distance calculation on collections (Nicklas Avén, Paul Ramsey) - Fix Trac#116 - crashers for rare EWKB cases (Paul Ramsey) - Fix to address an SRID of -1 in probe_geometry_columns (Kevin Neufeld) - Fix Trac#99 shp2pgsql logical error when importing DBF-only (Regina Obe) - Fix Trac#105 pgsql2shp dbase file creation (EOF marker issue) (Paul Ramsey) - Fix updated AddGeometryColumn to throw an error if then specified schema does not exist, rather than throwing a notice and then an error. (Kevin Neufeld) - Fix - Documentation corrections for better handling with PDF DbLatex (Kevin Neufeld) PostGIS 1.3.5 2008/12/15 - A quick bug fix release, to remove crashes in cases of collecting LINESTRING (ST_Force_Collection(), ST_Multi()) that had a large affect on Mapserver with LINE layers. - Enhancements and Bug Fixes - GBT#21: improve LRS fix to apply to more platforms - GBT#72: fix st_estimated_extent for better schema sensitivity - GBT#80: segfault on st_multi in MULTILINESTRING repaired - GBT#83: segfault on collecting LINESTRING repaired PostGIS 1.3.4 2008/11/24 - New Features - Add new ST_AsGeoJSON() function to allow conversion of geometries to GeoJSON format within the database. (Olivier Courtin) - Add forthcoming PostgreSQL 8.4 support (Paul Ramsey, Mark Cave-Ayland) - Improved CSS for PostGIS documentation (Dane Springmeyer) - Inclusion of new "postgis_comments.sql" file to enable detailed function comments to be installed for PostGIS functions. This attaches a description and associated parameter information to each function so that this information is available directly within psql/pgAdmin (Regina Obe) - Enhancements and Bug Fixes - General documentation improvements (Regina Obe, Kevin Neufield) - Improve PiP code by removing substantial memory leaks and adding multi-polygon support (Paul Ramsey) - Improve GiST consistent performance (Paul Ramsey) - GBT#20: Improved algorithm for ST_DWithin (Paul Ramsey) - GBT#21: locate_along_measure: wrong values, invalid data (Mark Cave-Ayland) - GBT#23: wrong proj4text in spatial_ref_sys for SRID 31300 and 31370 (Paul Ramsey) - GBT#43: Heap over-read in compute_geometry_stats() (Landon Fuller) - GBT#44: ST_Relate(geom,geom,pattern) is case sensitive (Paul Ramsey) - GBT#45: bug in postgis_restore.pl - not passing options to createdb (Paul Ramsey) - GBT#58: bounding box of circular string is incorrect (Mark Leslie) - GBT#65: ST_AsGML kills the backend when fed a CIRCULAR STRING (Mark Cave-Ayland) - GBT#66: ST_Dump kills backend when fed CIRCULAR STRING (Mark Cave-Ayland) - GBT#68: ST_Shift_Longitude doesn't work with MULTIPOINT (Mark Cave-Ayland) - GBT#69: ST_Translate crashes when fed circular string (Mark Cave-Ayland) - GBT#70: ST_NPoints Crashes with Curves (Mark Cave-Ayland) PostGIS 1.3.3 2008/04/12 - shp2pgsql, pgsql2shp improvements - regression tests on Windows - OS/X 10.5 compatibility - DBF-only loading flag (-n) - fix to Date DBF output - ST_SimplifyPreserveTopology(geometry, float8) Allows simplification of polygons without creating invalid geometries. - Fix to |>> and <<| operators - Build system more sensitive to GEOS version number - KML support updates (from Eduin Carrillo) - SVG support updates (from Marco Hugentobler) PostGIS 1.3.2 2007/12/01 - Improvements in the TIGER geocoder - Fix to ST_EndPoint() crasher bug - Modified ST_AsGML() improving v2 and adding v3 support - Fix to ensure ST_Envelope() returns valid geometries - Change JDBC build to use Ant - Fix for better OS/X support - Fix to WKB parser to do simple validity checks PostGIS 1.3.1 2007/08/13 - Fixed documentation bugs and release number errors in previous cut PostGIS 1.3.0 2007/08/09 - Began migration of functions to the SQL-MM-centric naming convension using the spatial type (SP) prefix - Performance enhancements: - Created cached and indexed point-in-polygon short-circuits for the functions ST_Contains, ST_Intersects, ST_Within ST_Disjoint. - Added inline index support for relational functions (except disjoint) - Added ST_Covers, ST_CoveredBy and ST_DWithin relational functions - Extended curved geometry support to geometry accessor functions and some geometry processing functions - JDBC: Added Hibernate Dialect from Norman Barker - Enhanced regression tests for curved geometries and kml functions PostGIS 1.2.1 2007/01/11 - Fix point-in-polygon shortcut bug in Within() - Fix PgSQL 8.2 null handling for indexes - Update RPM spec files - Add AsKML() function - Add short-circuit for transform() in no-op case - JDBC: - Fixed JTS handling for multi-dimensional geometries (thanks to Thomas Marti for hint and partial patch) - Additionally, now JavaDoc is compiled and packaged - Fixed classpath problems with GCJ - Fixed pgjdbc 8.2 compatibility, losing support for jdk 1.3 and older. PostGIS 1.2.0 2006/12/08 - Added curved geometry type support for serialization/deserialization. - Added point-in-polygon shortcircuit to Contains and Within functions. - JDBC: Added awt.shape implementation for JTS geometries - EJB3: Fixed NullPointer bug, thanks to Norman Barker PostGIS 1.1.6 2006/11/02 - fixed CAPI change that broke 64-bit platforms - use Z ordinate in reprojections - spatial_ref_sys.sql updated to EPSG 6.11.1 - Simplified Version.config infrastructure to use a single pack of version variables for everything. - Include the Version.config in loader/dumper USAGE messages - Replace hand-made, fragile JDBC version parser with Properties - Fixed setSRID() bug in JDBC, thanks to Thomas Marti - loader/dumper: fixed regression tests and usage output PostGIS 1.1.5 2006/10/13 - Java: - Removed obsolete synchronization from Jts code. - fixed nullpointer Exception in Geometry.equals() method - Added EJB3Spatial.odt to fulfill the GPL requirement of distributing the "preferred form of modification" - Added -S option for non-multi geometries to shp2pgsql - Updated heavily outdated README files for shp2pgsql/pgsql2shp by merging them with the manpages. - Fixed MingW link error that was causing pgsql2shp to segfault on Win32 when compiled for PostgreSQL 8.2 PostGIS 1.1.4 2006/09/27 - Fixed support for PostgreSQL 8.2 - Fixed bug in collect() function discarding SRID of input - Added SRID match check in MakeBox2d and MakeBox3d - Fixed regress tests to pass with GEOS-3.0.0 - Improved pgsql2shp run concurrency. - Java: - reworked JTS support to reflect new upstream JTS developers' attitude to SRID handling. Simplifies code and drops build depend on GNU trove. - Added EJB2 support generously donated by the "Geodetix s.r.l. Company" http://www.geodetix.it/ - Added EJB3 tutorial / examples donated by Norman Barker - Reorganized java directory layout a little. PostGIS 1.1.3 2006/06/30 - NEW Long Transactions support. - Can run the regress tests with 'make check' now. - New regress test support for loader/dumper. - BUGFIX in pgsql2shp successful return code. - BUGFIX in shp2pgsql handling of MultiLine WKT. - BUGFIX in affine() failing to update bounding box. - WKT parser: forbidden construction of multigeometries with EMPTY elements (still supported for GEOMETRYCOLLECTION). - Added --with-proj-libdir and --with-geos-libdir configure switches. - JDBC: - Improved regression tests: MultiPoint and scientific ordinates - Fixed some minor bugs in jdbc code - Added proper accessor functions for all fields in preparation of making those fields private later - Support for build Tru64 build. - Use Jade for generating documentation. - NEW DumpRings() function. - BUGFIX in distance(poly,poly) giving wrong results. - NEW AsHEXEWKB(geom, XDR|NDR) function. - Don't link pgsql2shp to more libs then required. - Initial support for PostgreSQL 8.2. PostGIS 1.1.2 2006/03/30 - Regress tests can now be run *before* postgis intallation - BUGFIX in SnapToGrid() computation of output bounding box - More portable ./configure script - Changed ./run_test script to have more sane default behaviour - Fixed support for 64bit archs - jdbc2 SRID handling fixes in JTS code - New affine() matrix transformation functions - New rotate{,X,Y,Z}() function - Old translating and scaling functions now use affine() internally - BUGFIX in EnforceRHR() - Embedded access control in estimated_extent() for builds against pgsql >= 8.0.0 PostGIS 1.1.1 2006/01/23 - Source code cleanups - Solaris 2.7 and MingW support improvements - added NumInteriorRing() alias due to OpenGIS ambiguity - BUGFIX in geometrycollection handling of GEOS-CAPI connector - BUGFIX in line_locate_point() - Fixed handling of postgresql paths - Fixed a premature exit in postgis_restore.pl - BUGFIX in line_substring() - New Z and M interpolation in line_substring() - New Z and M interpolation in line_interpolate_point() - Added support for localized cluster in regress tester PostGIS 1.1.0 2005/12/21 - New functions: - scale() and transscale() companion methods to translate() - line_substring() - line_locate_point() - M(point) - LineMerge(geometry) - shift_longitude(geometry) - azimuth(geometry) - locate_along_measure(geometry, float8) - locate_between_measures(geometry, float8, float8) - SnapToGrid by point offset (up to 4d support) - BuildArea(any_geometry) - OGC BdPolyFromText(linestring_wkt, srid) - OGC BdMPolyFromText(linestring_wkt, srid) - RemovePoint(linestring, offset) - ReplacePoint(linestring, offset, point) - Bug fixes: - Fixed memory leak in polygonize() - Fixed bug in lwgeom_as_anytype cast funcions - Fixed USE_GEOS, USE_PROJ and USE_STATS elements of postgis_version() output to always reflect library state. - Function semantic changes: - SnapToGrid doesn't discard higher dimensions - Changed Z() function to return NULL if requested dimension is not available - Peformance improvements: - Much faster transform() function, caching proj4 objects - Removed automatic call to fix_geometry_columns() in AddGeometryColumns() and update_geometry_stats() - jdbc2 works: - Makefile improvements - JTS support improvements - Improved regression test system - Basic consistency check method for geometry collections - Support for (Hex)(E)wkb - Autoprobing DriverWrapper for HexWKB / EWKT switching - fix compile problems in ValueSetter for ancient jdk releases. - fix EWKT constructors to accept SRID=4711; representation - added preliminary read-only support for java2d geometries - Other new things: - Full autoconf-based configuration, with PostgreSQL source dependency relief - GEOS C-API support (2.2.0 and higher) - Initial support for topology modelling - Debian and RPM specfiles - New lwpostgis_upgrade.sql script - Other changes: - JTS support improvements - Stricter mapping between DBF and SQL integer and string attributes - Wider and cleaner regression test suite - old jdbc code removed from release - obsoleted direct use of postgis_proc_upgrade.pl - scripts version unified with release version PostGIS 1.0.6 2005/12/06 - Fixed palloc(0) call in collection deserializer (only gives problem with --enable-cassert) - Fixed bbox cache handling bugs - Fixed geom_accum(NULL, NULL) segfault - Initial support for postgresql 8.2 - Fixed segfault in addPoint() - Fixed short-allocation in lwcollection_clone() - Fixed bug in segmentize() - Added missing SRID mismatch checks in GEOS ops - Fixed bbox computation of SnapToGrid output PostGIS 1.0.5 2005/11/25 - New "Reporting Bugs" chapter in manual - Segfault fix in shp2pgsql (utf8 encoding) - Fixed computation of null values fraction in analyzer - Fixed return code of shp2pgsql - Fixed handling of trailing dots in dbf numerical attributes - Schema aware postgis_proc_upgrade.pl, support for pgsql 7.2+ - Fixed a small bug in the getPoint4d_p() low-level function - Fixed memory alignment problems - Speedup of serializer functions - Bug fix in force_4d, force_3dm and force_3dz functions PostGIS 1.0.4 2005/09/09 - Memory leak plugged in GiST indexing - Segfault fix in transform() handling of proj4 errors - Fixed some proj4 texts in spatial_ref_sys (missing +proj) - GiST indexing cleanup - Loader: fixed string functions usage, reworked NULL objects check, fixed segfault on MULTILINESTRING input. - Fixed bug in MakeLine dimension handling - Looser syntax acceptance in box3d parser - Documentation improvements - More robust selectivity estimator - Minor speedup in distance() - Minor cleanups - Fixed bug in translate() corrupting output bounding box - Initial implementation of postgis_proc_upgrade script PostGIS 1.0.3 2005/08/08 - Severe bugfix in lwgeom's 2d bounding box computation - Bugfix in WKT (-w) POINT handling in loader - Bugfix in dumper on 64bit machines - Bugfix in dumper handling of user-defined queries - Bugfix in create_undef.pl script - Small performance improvement in canonical input function - Minor cleanups in loader - Support for multibyte field names in loader - Improvement in the postgis_restore.pl script - New rebuild_bbox_caches.pl util script PostGIS 1.0.2 2005/07/04 - Fault tolerant btree ops - Memory Leak fix in pg_error - Rtree index fix. See: http://archives.postgresql.org/pgsql-hackers/2005-06/msg01108.php - Initial support for postgresql 8.1dev - Cleaner build scripts: avoided mix of CFLAGS and CXXFLAGS - NEW -I switch for pgsql2shp (GiST index) PostGIS 1.0.1 2005/05/24 - BUGFIX in shp2pgql escape functions - BUGFIX in 3d computation of lenght_spheroid - better support for concurrent postgis in multiple schemas - documentation fixes - BUGFIX in join selectivity estimator returning invalid estimates (>1) - jdbc2: compile with "-target 1.2 -source 1.2" by default - NEW support for custom createdb options in postgis_restore.pl - NEW -k switch for pgsql2shp - BUGFIX in pgsql2shp attribute names unicity enforcement - BUGFIX in Paris projections definitions - postgis_restore.pl cleanups PostGIS 1.0.0 2005/04/19 - NEW manual pages for loader/dumper - NEW shp2pgsql support for old (HWGEOM) postgis versions - NEW -p flag for shp2pgsql - BUGFIX in transform() releasing random memory address - BUGFIX in force_3dm() allocating less memory then required - NEW chapter about OGC compliancy enforcement - BUGFIX in shp2pgsql escape of values starting with "'" or "\t" - NEW autoconf support for JTS lib - BUGFIX in estimator testers (support for LWGEOM and schema parsing) - BUGFIX in join selectivity estimator (defaults, leaks, tuplecount, sd) PostGIS 1.0.0RC6 2005/03/30 - BUGFIX dumper 64bit - BUGFIX in multi() - BUGFIX in postgis_restore.pl script - early return [when noop] from multi() - dropped {x,y}{min,max}(box2d) functions PostGIS 1.0.0RC5 2005/03/25 - small build scripts refinements - BUGFIX in box3d computation (yes, another!) - BUGFIX in estimated_extent() - additional performance tips documented PostGIS 1.0.0RC4 2005/03/18 - early return from force_collection - segfault fix in geom_accum() - consistency check fix in SnapToGrid() - jdbc2: code cleanups, Makefile improvements - FLEX & YACC variables set *after* pgsql Makefile.global is included and only if the pgsql *stripped* version evaulates to the empty string - added already generated parser in release - build scripts refinements - MultiLine handling BUG fix in loader and dumper - improved version handling, central Version.config - added distance_sphere function - subselects support in selectivity estimator - bug fixes for 64bit architectures - bugfix in loaded, skipping all but first hole of polygons. - changed get_proj4_from_srid implementation to use plpgsql instead of sql to workaround a pgsql80x bug. - box2d output changed back to 15 significant digits - BUGFIX in box3d computation function with collections - improvements in postgis_restore.pl PostGIS 1.0.0RC3 2005/02/24 - transform(): missing SRID bugfix, better error handling - jdbc2: small patches, box2d/3d tests, revised docs and license. - jdbc2: bug fix and testcase in for pgjdbc 8.0 type autoregistration - few changes in autoconf - reduced precision of box2d output. - some functions made IMMUTABLE from STABLE, for performance improvement - new performance tips chapter in manual - BUILDDATE extraction made more portable - fixed bogus 72 index bindings - prefixed DEBUG macros with PGIS_ to avoid clash with pgsql one - fixes in probe_geometry_columns() to work with PG72 and support multiple geometry columns in a single table - fixed spatial_ref_sys.sql to avoid vacuuming the whole database. - jdbc2: Removed use of jdk1.4 only features to enable build with older jdk releases. - jdbc2: Added support for building against pg72jdbc2.jar - documentation updates: pgsql72 requirement, lwpostgis.sql - memory alignment handling - fixed bug in force_collection causing mapserver connector failures on simple (single) geometry types. - jdbc2: updated and cleaned makefile - plugged a leak in GEOS2POSTGIS converter - jdbc2: added BETA support for jts geometry classes - jdbc2: Skip known-to-fail tests against older PostGIS servers. - jdbc2: Fixed handling of measured geometries in EWKT. - Reduced memory usage by early releasing query-context palloced one. - Added bool::text cast in lwpostgis.sql - bug fix in GeometryFromText() missing to add a bbox cache. - spatial_ref_sys: changed Paris entries to match the ones distributed with 0.x. PostGIS 1.0.0RC2 2005/01/26 - More correct STABLE, IMMUTABLE, STRICT uses in lwpostgis.sql - GEOMETRYCOLLECTION(EMPTY) syntax support for backward compatibility - faster and more robust loader (both i18n and not) - faster binary outputs - bug fix in pointarray box3d computation - initial autoconf script - bug fix in distance_spheroid definition - stricter OGC WKB constructors - stricter OGC WKT constructors - bug fix in transform() missing to update bbox cache - LWGEOM aware JDBC driver (jdbc2) PostGIS 1.0.0RC1 2005/01/13 - New Things - Objects are all now "lightweight" with a smaller disk and index representation. Large databases should see a moderate to large performance increase. - Objects now have a hexidecimal canonical representation. To see a "user friendly" version of the objects use the AsText() function. - The loader and dumper use the hexidecimal canonical representation, so coordinate drift due to floating point string parsing is now eliminated. - New functions: UpdateGeometrySRID(), AsGML(), SnapToGrid(), ForceRHR(), estimated_extent(), Accum(). - Vertical positioning operators. - Geometry constructors/editors. - Coordinate dimensions handling (up to 4d). - API. - Join selectivity. - Bug Fixes - Numerous small fixes. PostGIS 0.9.0 2004/09/10 - New Things - GEOMETRY_COLUMNS management functions - fix_geometry_columns(), probe_geometry_columns() - Support for PgSQL 8.0 / Support for Win32 - Support for GEOS 2.0 - Bug Fixes - Schema support in shp2pgsql/pgsql2shp improved - Spatial index estimator improved - Build system streamlined PostGIS 0.8.2 2004/05/27 - New Things - PgSQL 7.5 Support - Integrated PgSQL 7.5 statistics rathering - Improved schema support - Optional experimental lightweight geometries (LWGEOM) - Faster performance - Lower disk usage - Multi() function to create MULTI* geometries - line_interpolate_point() function for linear referencing - Bug Fixes - Minor memory leaks gone - Solaris support cleaner - shp2pgsql/pgsql2shp more corner cases fixed PostGIS 0.8.1 2004/01/12 - New Things - Schema support in AddGeometryColumn and loader/dumper - Bug Fixes - Memory fixes - GEOS translation fixes PostGIS 0.8.0 2003/11/24 - New Things - Support for PostgreSQL 7.4 - Support for all OpenGIS SFSQL functions (requires GEOS) - Contains() - Within() - GeomUnion() - Intersection() - Buffer() - and many more...! - Includes OpenGIS conformance tests - Passes all OpenGIS conformance tests - Spatial aggregate functions - GeomUnion() - Collect() - Bug Fixes - shp2pgsql/pgsql2shp - Numerous special cases in rings and attributes repaired - Some OpenGIS conformance changes PostGIS 0.7.5 2003/04/08 - Bug Fixes - shp2pgsql - Z coordinate handling - M coordinate handling - Ring handling fixed in some cases - Support for large numbers in attribute tables - Some obscure operators fixed - Some cygwin build improvements PostGIS 0.7.4 2003/02/12 - Bug Fixes - Several shp2pgsql enhancements and bugs. - Cleaner compile, fewer warnings. - Better undef support. - Fixed stateplane/feet proj definitions. - New Things - Support for PostgreSQL 7.3 - Optional spatial index selectivity system PostGIS 0.7.3 2002/09/05 - Bug Fixes - Stupid bug in .sql install script breaks install for many. Squashed. New release needed. - Automatic version detection for appropriate GiST bindings - postgis_transform now supports box3d types as well as geometry PostGIS 0.7.2 2002/09/01 - Bug Fixes - Numerous subtle bugs fixed in pgsql2shp and shp2pgsql DBF and SHP file handling - Some pgsql 7.3 preparations - Patch to truly_inside() corner case - Updates to the ~ and @ operators - Update to translate() function to also translate bbox PostGIS 0.7.1 2002/05/14 - Bug Fixes - PgSQL 7.2 RTree-over-GIST bug fix. Rare data cases caused index building to fail. - Carriage returns removed from source code. Were causing compilation failures. - collect() now returns simplest homogeneous type being aggregated (e.g.M ULTIPOLYGON for collect(*POLYGON)) PostGIS 0.7.0 2002/05/04 - New Things - transform() function provides coordinate reprojection using proj4 library - spatial_ref_sys.sql has a complete set of proj4 definitions for each EPSG coordinate system - support for PostgreSQL 7.2 GiST index API - refactoring of source code to separate index support functions from other functions - max_distance() function - distance_spheroid() function - collect() aggregate function - xmin(),ymin(),zmin(),xmax(),ymax(),zmax() functions - Bug Fixes - transform() more graceful when grid shifts are missing - setsrid() made cachable - patches to loader/dumper PostGIS 0.6.2 2001/11/07 - New Things - spatial_ref_sys.sql complete set of SRID and WKT - generate postgis_undef.sql automatically at build - Bug fixes - Memory problem in shp2pgsql - Compilation problems with shp2pgsql PostGIS 0.6.1 2001/10/15 - Bug fixes - Cygwin compilation fix - Improved getopts handling in utility programs - Text casting fixes PostGIS 0.6 2001/09/19 - New functions - postgis_version() Return the PostGIS version number. - find_srid(::varchar, ::varchar, ::varchar) Return the SRID number for a particular column of a database. - AddGeometryColumn(::varchar,
::varchar, ::varchar, ::integer, ::varchar, ::integer) Appends a geometry column to an existing table and updates the metadata tables appropriately. - DropGeometryColumn(::varchar,
::varchar, ::varchar) Removes a geometry column from an existing spatial table. - Distance(::geometry, ::geometry) Returns the cartesian distance between two geometries. - AsText(::geometry) Returns the OGC well-known text version of the geometry. - SRID(::geometry) Returns the integer SRID of the geometry. - GeometryFromText(::varchar, ::integer) Creates a geometry object given the OGC well-known text and a valid SRID. - SetSRID(::geometry) Sets the SRID of a geometry to a particular value. - IsClosed(::geometry) Returns true of first and last points of geometry are coincident. - StartPoint(::geometry) Returns the first point of a geometry. - EndPoint(::geometry) Returns the last point of a geometry. - Centroid(::geometry) Returns the centroid of a geometry. - More OpenGIS SFSQL compatibility - SPATIAL_REF_SYS table - GEOMETRY_COLUMNS table - SRID integrity checking - Better Mapserver compatibility - Minor fixes/changes - Support for WKB in the tables - Miscellaneous bug fixes - Placeholders for precision grid PostGIS 0.5 2001/07/20 - New functions - Dimension() - GeometryType() - Envelope() - X(), Y(), Z() - NumPoints() - PointN() - ExteriorRing() - NumInteriorRings() - InteriorRingN() - NumGeometries() - GeometryN() - Length_Spheroid() - Length3D_Spheroid() - AsBinary() + XDR and NDR variants - force_collection() - Removed functions - wkb_ndr() - wkb_xdr() - New Objects - SPHEROID(,,) To be used with the length_spheroid functions for accurate length calculations on lat/lon data. - Minor bug fixes - Internal Functions - Extra constructors to make geometry manipulation easier - Structural Reorganization - Broke postgis.c up into four new files postgis_debug.c -- debugging functions postgis_fn.c -- generic functions (like length()) postgis_ops.c -- operators and indexing functions postgis_inout.c -- type support functions and data conversion functions PostGIS 0.2 2001/06/19 - New functions - extent() - force_2d() - force_3d() - wkb_xdr() - wkb_ndr() - translate() - Fixes - Cygwin compilation (Norman Vine) - i386 byte alignment fixed - 'VACUUM ANALYZE' fixed - Other - documentation in docbook xml - example program for WKB access - removed 'make test' until we can get regression working more cleanly PostGIS 0.1 2001/05/25 - Initial release! - 'geometry' and 'box3d' types. - Parsing routines for all possible geometries in OGIS text format (POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION). - Output routines for all possible geometries in OGIS text format. - area2d(), area3d() - length3d(), length3d() - perimeter2d(), perimeter3d() - truely_inside() - rtree index support functions - gist index support functions postgis-2.1.2+dfsg.orig/autogen.sh0000755000000000000000000000335511722777314015602 0ustar rootroot#!/bin/sh # # $Id: autogen.sh 9324 2012-02-27 22:08:12Z pramsey $ # # PostGIS Bootstrapping Script # giveup() { echo echo " Something went wrong, giving up!" echo exit 1 } OSTYPE=`uname -s` AUTOCONF=`which autoconf 2>/dev/null` if [ ! ${AUTOCONF} ]; then echo "Missing autoconf!" exit fi AUTOCONF_VER=`${AUTOCONF} --version | grep -E "^.*[0-9]$" | sed 's/^.* //'` for aclocal in aclocal aclocal-1.10 aclocal-1.9; do ACLOCAL=`which $aclocal 2>/dev/null` if test -x "${ACLOCAL}"; then break; fi done if [ ! ${ACLOCAL} ]; then echo "Missing aclocal!" exit fi ACLOCAL_VER=`${ACLOCAL} --version | grep -E "^.*[0-9]$" | sed 's/^.* //'` for libtoolize in libtoolize glibtoolize; do LIBTOOLIZE=`which $libtoolize 2>/dev/null` if test -x "${LIBTOOLIZE}"; then break; fi done if [ ! ${LIBTOOLIZE} ]; then echo "Missing libtoolize!" exit fi LIBTOOLIZE_VER=`${LIBTOOLIZE} --version | grep -E "^.*[0-9]\.[0-9]" | sed 's/^.* //'` LIBTOOLIZE_MAJOR_VER=`echo ${LIBTOOLIZE_VER} | cut -f1 -d'.'` # TODO: Check libtool version and add --install option only for 1.9b+ LTOPTS="--force --copy" if test ${LIBTOOLIZE_MAJOR_VER} -ge 2; then LTOPTS="${LTOPTS} --install" fi echo "* Running ${LIBTOOLIZE} (${LIBTOOLIZE_VER})" echo " OPTIONS = ${LTOPTS}" ${LIBTOOLIZE} ${LTOPTS} || giveup echo "* Running $ACLOCAL (${ACLOCAL_VER})" ${ACLOCAL} -I macros || giveup echo "* Running ${AUTOCONF} (${AUTOCONF_VER})" ${AUTOCONF} || giveup if test -f "${PWD}/configure"; then echo "======================================" echo "Now you are ready to run './configure'" echo "======================================" else echo " Failed to generate ./configure script!" giveup fi postgis-2.1.2+dfsg.orig/doc/0000755000000000000000000000000012317530606014330 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/raster_comments.sql0000644000000000000000000020334512315456265020273 0ustar rootroot COMMENT ON FUNCTION AddRasterConstraints(name , name , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean ) IS 'args: rasttable, rastcolumn, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands=true, pixel_types=true, nodata_values=true, out_db=true, extent=true - Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize, alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to be inferred. Returns true of the constraint setting was accomplished and if issues a notice.'; COMMENT ON FUNCTION AddRasterConstraints(name , name , text[] ) IS 'args: rasttable, rastcolumn, VARIADIC constraints - Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize, alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to be inferred. Returns true of the constraint setting was accomplished and if issues a notice.'; COMMENT ON FUNCTION AddRasterConstraints(name , name , name , text[] ) IS 'args: rastschema, rasttable, rastcolumn, VARIADIC constraints - Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize, alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to be inferred. Returns true of the constraint setting was accomplished and if issues a notice.'; COMMENT ON FUNCTION AddRasterConstraints(name , name , name , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean ) IS 'args: rastschema, rasttable, rastcolumn, srid=true, scale_x=true, scale_y=true, blocksize_x=true, blocksize_y=true, same_alignment=true, regular_blocking=false, num_bands=true, pixel_types=true, nodata_values=true, out_db=true, extent=true - Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize, alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to be inferred. Returns true of the constraint setting was accomplished and if issues a notice.'; COMMENT ON FUNCTION DropRasterConstraints(name , name , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean ) IS 'args: rasttable, rastcolumn, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands=true, pixel_types=true, nodata_values=true, out_db=true, extent=true - Drops PostGIS raster constraints that refer to a raster table column. Useful if you need to reload data or update your raster column data.'; COMMENT ON FUNCTION DropRasterConstraints(name , name , name , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean , boolean ) IS 'args: rastschema, rasttable, rastcolumn, srid=true, scale_x=true, scale_y=true, blocksize_x=true, blocksize_y=true, same_alignment=true, regular_blocking=false, num_bands=true, pixel_types=true, nodata_values=true, out_db=true, extent=true - Drops PostGIS raster constraints that refer to a raster table column. Useful if you need to reload data or update your raster column data.'; COMMENT ON FUNCTION DropRasterConstraints(name , name , name , text[] ) IS 'args: rastschema, rasttable, rastcolumn, constraints - Drops PostGIS raster constraints that refer to a raster table column. Useful if you need to reload data or update your raster column data.'; COMMENT ON FUNCTION PostGIS_Raster_Lib_Build_Date() IS 'Reports full raster library build date.'; COMMENT ON FUNCTION PostGIS_Raster_Lib_Version() IS 'Reports full raster version and build configuration infos.'; COMMENT ON FUNCTION ST_GDALDrivers() IS 'args: OUT idx, OUT short_name, OUT long_name, OUT create_options - Returns a list of raster formats supported by your lib gdal. These are the formats you can output your raster using ST_AsGDALRaster.'; COMMENT ON FUNCTION UpdateRasterSRID(name , name , name , integer ) IS 'args: schema_name, table_name, column_name, new_srid - Change the SRID of all rasters in the user-specified column and table.'; COMMENT ON FUNCTION UpdateRasterSRID(name , name , integer ) IS 'args: table_name, column_name, new_srid - Change the SRID of all rasters in the user-specified column and table.'; COMMENT ON FUNCTION ST_AddBand(raster , addbandarg[] ) IS 'args: rast, addbandargset - Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end.'; COMMENT ON FUNCTION ST_AddBand(raster , integer , text , double precision , double precision ) IS 'args: rast, index, pixeltype, initialvalue=0, nodataval=NULL - Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end.'; COMMENT ON FUNCTION ST_AddBand(raster , text , double precision , double precision ) IS 'args: rast, pixeltype, initialvalue=0, nodataval=NULL - Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end.'; COMMENT ON FUNCTION ST_AddBand(raster , raster , integer , integer ) IS 'args: torast, fromrast, fromband=1, torastindex=at_end - Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end.'; COMMENT ON FUNCTION ST_AddBand(raster , raster[] , integer , integer ) IS 'args: torast, fromrasts, fromband=1, torastindex=at_end - Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end.'; COMMENT ON FUNCTION ST_AddBand(raster , integer , text , integer[] , double precision ) IS 'args: rast, index, outdbfile, outdbindex, nodataval=NULL - Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end.'; COMMENT ON FUNCTION ST_AddBand(raster , text , integer[] , integer , double precision ) IS 'args: rast, outdbfile, outdbindex, index=at_end, nodataval=NULL - Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end.'; COMMENT ON FUNCTION ST_AsRaster(geometry , raster , text , double precision , double precision , boolean ) IS 'args: geom, ref, pixeltype, value=1, nodataval=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , raster , text[] , double precision[] , double precision[] , boolean ) IS 'args: geom, ref, pixeltype=ARRAY[''8BUI''], value=ARRAY[1], nodataval=ARRAY[0], touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , double precision , double precision , double precision , double precision , text , double precision , double precision , double precision , double precision , boolean ) IS 'args: geom, scalex, scaley, gridx, gridy, pixeltype, value=1, nodataval=0, skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , double precision , double precision , double precision , double precision , text[] , double precision[] , double precision[] , double precision , double precision , boolean ) IS 'args: geom, scalex, scaley, gridx=NULL, gridy=NULL, pixeltype=ARRAY[''8BUI''], value=ARRAY[1], nodataval=ARRAY[0], skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , double precision , double precision , text , double precision , double precision , double precision , double precision , double precision , double precision , boolean ) IS 'args: geom, scalex, scaley, pixeltype, value=1, nodataval=0, upperleftx=NULL, upperlefty=NULL, skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , double precision , double precision , text[] , double precision[] , double precision[] , double precision , double precision , double precision , double precision , boolean ) IS 'args: geom, scalex, scaley, pixeltype, value=ARRAY[1], nodataval=ARRAY[0], upperleftx=NULL, upperlefty=NULL, skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , integer , integer , double precision , double precision , text , double precision , double precision , double precision , double precision , boolean ) IS 'args: geom, width, height, gridx, gridy, pixeltype, value=1, nodataval=0, skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , integer , integer , double precision , double precision , text[] , double precision[] , double precision[] , double precision , double precision , boolean ) IS 'args: geom, width, height, gridx=NULL, gridy=NULL, pixeltype=ARRAY[''8BUI''], value=ARRAY[1], nodataval=ARRAY[0], skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , integer , integer , text , double precision , double precision , double precision , double precision , double precision , double precision , boolean ) IS 'args: geom, width, height, pixeltype, value=1, nodataval=0, upperleftx=NULL, upperlefty=NULL, skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_AsRaster(geometry , integer , integer , text[] , double precision[] , double precision[] , double precision , double precision , double precision , double precision , boolean ) IS 'args: geom, width, height, pixeltype, value=ARRAY[1], nodataval=ARRAY[0], upperleftx=NULL, upperlefty=NULL, skewx=0, skewy=0, touched=false - Converts a PostGIS geometry to a PostGIS raster.'; COMMENT ON FUNCTION ST_Band(raster , integer[] ) IS 'args: rast, nbands = ARRAY[1] - Returns one or more bands of an existing raster as a new raster. Useful for building new rasters from existing rasters.'; COMMENT ON FUNCTION ST_Band(raster , text , character ) IS 'args: rast, nbands, delimiter=, - Returns one or more bands of an existing raster as a new raster. Useful for building new rasters from existing rasters.'; COMMENT ON FUNCTION ST_Band(raster , integer ) IS 'args: rast, nband - Returns one or more bands of an existing raster as a new raster. Useful for building new rasters from existing rasters.'; COMMENT ON FUNCTION ST_MakeEmptyRaster(raster ) IS 'args: rast - Returns an empty raster (having no bands) of given dimensions (width & height), upperleft X and Y, pixel size and rotation (scalex, scaley, skewx & skewy) and reference system (srid). If a raster is passed in, returns a new raster with the same size, alignment and SRID. If srid is left out, the spatial ref is set to unknown (0).'; COMMENT ON FUNCTION ST_MakeEmptyRaster(integer , integer , float8 , float8 , float8 , float8 , float8 , float8 , integer ) IS 'args: width, height, upperleftx, upperlefty, scalex, scaley, skewx, skewy, srid=unknown - Returns an empty raster (having no bands) of given dimensions (width & height), upperleft X and Y, pixel size and rotation (scalex, scaley, skewx & skewy) and reference system (srid). If a raster is passed in, returns a new raster with the same size, alignment and SRID. If srid is left out, the spatial ref is set to unknown (0).'; COMMENT ON FUNCTION ST_MakeEmptyRaster(integer , integer , float8 , float8 , float8 ) IS 'args: width, height, upperleftx, upperlefty, pixelsize - Returns an empty raster (having no bands) of given dimensions (width & height), upperleft X and Y, pixel size and rotation (scalex, scaley, skewx & skewy) and reference system (srid). If a raster is passed in, returns a new raster with the same size, alignment and SRID. If srid is left out, the spatial ref is set to unknown (0).'; COMMENT ON FUNCTION ST_Tile(raster , int[] , integer , integer , boolean , double precision ) IS 'args: rast, nband, width, height, padwithnodata=FALSE, nodataval=NULL - Returns a set of rasters resulting from the split of the input raster based upon the desired dimensions of the output rasters.'; COMMENT ON FUNCTION ST_Tile(raster , integer , integer , integer , boolean , double precision ) IS 'args: rast, nband, width, height, padwithnodata=FALSE, nodataval=NULL - Returns a set of rasters resulting from the split of the input raster based upon the desired dimensions of the output rasters.'; COMMENT ON FUNCTION ST_Tile(raster , integer , integer , boolean , double precision ) IS 'args: rast, width, height, padwithnodata=FALSE, nodataval=NULL - Returns a set of rasters resulting from the split of the input raster based upon the desired dimensions of the output rasters.'; COMMENT ON FUNCTION ST_FromGDALRaster(bytea , integer ) IS 'args: gdaldata, srid=NULL - Returns a raster from a supported GDAL raster file.'; COMMENT ON FUNCTION ST_GeoReference(raster , text ) IS 'args: rast, format=GDAL - Returns the georeference meta data in GDAL or ESRI format as commonly seen in a world file. Default is GDAL.'; COMMENT ON FUNCTION ST_Height(raster ) IS 'args: rast - Returns the height of the raster in pixels.'; COMMENT ON FUNCTION ST_IsEmpty(raster ) IS 'args: rast - Returns true if the raster is empty (width = 0 and height = 0). Otherwise, returns false.'; COMMENT ON FUNCTION ST_MetaData(raster ) IS 'args: rast - Returns basic meta data about a raster object such as pixel size, rotation (skew), upper, lower left, etc.'; COMMENT ON FUNCTION ST_NumBands(raster ) IS 'args: rast - Returns the number of bands in the raster object.'; COMMENT ON FUNCTION ST_PixelHeight(raster ) IS 'args: rast - Returns the pixel height in geometric units of the spatial reference system.'; COMMENT ON FUNCTION ST_PixelWidth(raster ) IS 'args: rast - Returns the pixel width in geometric units of the spatial reference system.'; COMMENT ON FUNCTION ST_ScaleX(raster ) IS 'args: rast - Returns the X component of the pixel width in units of coordinate reference system.'; COMMENT ON FUNCTION ST_ScaleY(raster ) IS 'args: rast - Returns the Y component of the pixel height in units of coordinate reference system.'; COMMENT ON FUNCTION ST_RasterToWorldCoord(raster , integer , integer ) IS 'args: rast, xcolumn, yrow - Returns the rasters upper left corner as geometric X and Y (longitude and latitude) given a column and row. Column and row starts at 1.'; COMMENT ON FUNCTION ST_RasterToWorldCoordX(raster , integer ) IS 'args: rast, xcolumn - Returns the geometric X coordinate upper left of a raster, column and row. Numbering of columns and rows starts at 1.'; COMMENT ON FUNCTION ST_RasterToWorldCoordX(raster , integer , integer ) IS 'args: rast, xcolumn, yrow - Returns the geometric X coordinate upper left of a raster, column and row. Numbering of columns and rows starts at 1.'; COMMENT ON FUNCTION ST_RasterToWorldCoordY(raster , integer ) IS 'args: rast, yrow - Returns the geometric Y coordinate upper left corner of a raster, column and row. Numbering of columns and rows starts at 1.'; COMMENT ON FUNCTION ST_RasterToWorldCoordY(raster , integer , integer ) IS 'args: rast, xcolumn, yrow - Returns the geometric Y coordinate upper left corner of a raster, column and row. Numbering of columns and rows starts at 1.'; COMMENT ON FUNCTION ST_Rotation(raster) IS 'args: rast - Returns the rotation of the raster in radian.'; COMMENT ON FUNCTION ST_SkewX(raster ) IS 'args: rast - Returns the georeference X skew (or rotation parameter).'; COMMENT ON FUNCTION ST_SkewY(raster ) IS 'args: rast - Returns the georeference Y skew (or rotation parameter).'; COMMENT ON FUNCTION ST_SRID(raster ) IS 'args: rast - Returns the spatial reference identifier of the raster as defined in spatial_ref_sys table.'; COMMENT ON FUNCTION ST_Summary(raster ) IS 'args: rast - Returns a text summary of the contents of the raster.'; COMMENT ON FUNCTION ST_UpperLeftX(raster ) IS 'args: rast - Returns the upper left X coordinate of raster in projected spatial ref.'; COMMENT ON FUNCTION ST_UpperLeftY(raster ) IS 'args: rast - Returns the upper left Y coordinate of raster in projected spatial ref.'; COMMENT ON FUNCTION ST_Width(raster ) IS 'args: rast - Returns the width of the raster in pixels.'; COMMENT ON FUNCTION ST_WorldToRasterCoord(raster , geometry ) IS 'args: rast, pt - Returns the upper left corner as column and row given geometric X and Y (longitude and latitude) or a point geometry expressed in the spatial reference coordinate system of the raster.'; COMMENT ON FUNCTION ST_WorldToRasterCoord(raster , double precision , double precision ) IS 'args: rast, longitude, latitude - Returns the upper left corner as column and row given geometric X and Y (longitude and latitude) or a point geometry expressed in the spatial reference coordinate system of the raster.'; COMMENT ON FUNCTION ST_WorldToRasterCoordX(raster , geometry ) IS 'args: rast, pt - Returns the column in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster.'; COMMENT ON FUNCTION ST_WorldToRasterCoordX(raster , double precision ) IS 'args: rast, xw - Returns the column in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster.'; COMMENT ON FUNCTION ST_WorldToRasterCoordX(raster , double precision , double precision ) IS 'args: rast, xw, yw - Returns the column in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster.'; COMMENT ON FUNCTION ST_WorldToRasterCoordY(raster , geometry ) IS 'args: rast, pt - Returns the row in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster.'; COMMENT ON FUNCTION ST_WorldToRasterCoordY(raster , double precision ) IS 'args: rast, xw - Returns the row in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster.'; COMMENT ON FUNCTION ST_WorldToRasterCoordY(raster , double precision , double precision ) IS 'args: rast, xw, yw - Returns the row in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster.'; COMMENT ON FUNCTION ST_BandMetaData(raster , integer ) IS 'args: rast, bandnum=1 - Returns basic meta data for a specific raster band. band num 1 is assumed if none-specified.'; COMMENT ON FUNCTION ST_BandNoDataValue(raster , integer ) IS 'args: rast, bandnum=1 - Returns the value in a given band that represents no data. If no band num 1 is assumed.'; COMMENT ON FUNCTION ST_BandIsNoData(raster , integer , boolean ) IS 'args: rast, band, forceChecking=true - Returns true if the band is filled with only nodata values.'; COMMENT ON FUNCTION ST_BandIsNoData(raster , boolean ) IS 'args: rast, forceChecking=true - Returns true if the band is filled with only nodata values.'; COMMENT ON FUNCTION ST_BandPath(raster , integer ) IS 'args: rast, bandnum=1 - Returns system file path to a band stored in file system. If no bandnum specified, 1 is assumed.'; COMMENT ON FUNCTION ST_BandPixelType(raster , integer ) IS 'args: rast, bandnum=1 - Returns the type of pixel for given band. If no bandnum specified, 1 is assumed.'; COMMENT ON FUNCTION ST_HasNoBand(raster , integer ) IS 'args: rast, bandnum=1 - Returns true if there is no band with given band number. If no band number is specified, then band number 1 is assumed.'; COMMENT ON FUNCTION ST_PixelAsPolygon(raster , integer , integer ) IS 'args: rast, columnx, rowy - Returns the polygon geometry that bounds the pixel for a particular row and column.'; COMMENT ON FUNCTION ST_PixelAsPolygons(raster , integer , boolean ) IS 'args: rast, band=1, exclude_nodata_value=TRUE - Returns the polygon geometry that bounds every pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel.'; COMMENT ON FUNCTION ST_PixelAsPoint(raster , integer , integer ) IS 'args: rast, columnx, rowy - Returns a point geometry of the pixels upper-left corner.'; COMMENT ON FUNCTION ST_PixelAsPoints(raster , integer , boolean ) IS 'args: rast, band=1, exclude_nodata_value=TRUE - Returns a point geometry for each pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel. The coordinates of the point geometry are of the pixels upper-left corner.'; COMMENT ON FUNCTION ST_PixelAsCentroid(raster , integer , integer ) IS 'args: rast, columnx, rowy - Returns the centroid (point geometry) of the area represented by a pixel.'; COMMENT ON FUNCTION ST_PixelAsCentroids(raster , integer , boolean ) IS 'args: rast, band=1, exclude_nodata_value=TRUE - Returns the centroid (point geometry) for each pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel. The point geometry is the centroid of the area represented by a pixel.'; COMMENT ON FUNCTION ST_Value(raster , geometry , boolean ) IS 'args: rast, pt, exclude_nodata_value=true - Returns the value of a given band in a given columnx, rowy pixel or at a particular geometric point. Band numbers start at 1 and assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and return value. If exclude_nodata_value is not passed in then reads it from metadata of raster.'; COMMENT ON FUNCTION ST_Value(raster , integer , geometry , boolean ) IS 'args: rast, bandnum, pt, exclude_nodata_value=true - Returns the value of a given band in a given columnx, rowy pixel or at a particular geometric point. Band numbers start at 1 and assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and return value. If exclude_nodata_value is not passed in then reads it from metadata of raster.'; COMMENT ON FUNCTION ST_Value(raster , integer , integer , boolean ) IS 'args: rast, columnx, rowy, exclude_nodata_value=true - Returns the value of a given band in a given columnx, rowy pixel or at a particular geometric point. Band numbers start at 1 and assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and return value. If exclude_nodata_value is not passed in then reads it from metadata of raster.'; COMMENT ON FUNCTION ST_Value(raster , integer , integer , integer , boolean ) IS 'args: rast, bandnum, columnx, rowy, exclude_nodata_value=true - Returns the value of a given band in a given columnx, rowy pixel or at a particular geometric point. Band numbers start at 1 and assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and return value. If exclude_nodata_value is not passed in then reads it from metadata of raster.'; COMMENT ON FUNCTION ST_NearestValue(raster , integer , geometry , boolean ) IS 'args: rast, bandnum, pt, exclude_nodata_value=true - Returns the nearest non-NODATA value of a given bands pixel specified by a columnx and rowy or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_NearestValue(raster , geometry , boolean ) IS 'args: rast, pt, exclude_nodata_value=true - Returns the nearest non-NODATA value of a given bands pixel specified by a columnx and rowy or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_NearestValue(raster , integer , integer , integer , boolean ) IS 'args: rast, bandnum, columnx, rowy, exclude_nodata_value=true - Returns the nearest non-NODATA value of a given bands pixel specified by a columnx and rowy or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_NearestValue(raster , integer , integer , boolean ) IS 'args: rast, columnx, rowy, exclude_nodata_value=true - Returns the nearest non-NODATA value of a given bands pixel specified by a columnx and rowy or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_Neighborhood(raster , integer , integer , integer , integer , integer , boolean ) IS 'args: rast, bandnum, columnX, rowY, distanceX, distanceY, exclude_nodata_value=true - Returns a 2-D double precision array of the non-NODATA values around a given bands pixel specified by either a columnX and rowY or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_Neighborhood(raster , integer , integer , integer , integer , boolean ) IS 'args: rast, columnX, rowY, distanceX, distanceY, exclude_nodata_value=true - Returns a 2-D double precision array of the non-NODATA values around a given bands pixel specified by either a columnX and rowY or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_Neighborhood(raster , integer , geometry , integer , integer , boolean ) IS 'args: rast, bandnum, pt, distanceX, distanceY, exclude_nodata_value=true - Returns a 2-D double precision array of the non-NODATA values around a given bands pixel specified by either a columnX and rowY or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_Neighborhood(raster , geometry , integer , integer , boolean ) IS 'args: rast, pt, distanceX, distanceY, exclude_nodata_value=true - Returns a 2-D double precision array of the non-NODATA values around a given bands pixel specified by either a columnX and rowY or a geometric point expressed in the same spatial reference coordinate system as the raster.'; COMMENT ON FUNCTION ST_SetValue(raster , integer , geometry , double precision ) IS 'args: rast, bandnum, geom, newvalue - Returns modified raster resulting from setting the value of a given band in a given columnx, rowy pixel or the pixels that intersect a particular geometry. Band numbers start at 1 and assumed to be 1 if not specified.'; COMMENT ON FUNCTION ST_SetValue(raster , geometry , double precision ) IS 'args: rast, geom, newvalue - Returns modified raster resulting from setting the value of a given band in a given columnx, rowy pixel or the pixels that intersect a particular geometry. Band numbers start at 1 and assumed to be 1 if not specified.'; COMMENT ON FUNCTION ST_SetValue(raster , integer , integer , integer , double precision ) IS 'args: rast, bandnum, columnx, rowy, newvalue - Returns modified raster resulting from setting the value of a given band in a given columnx, rowy pixel or the pixels that intersect a particular geometry. Band numbers start at 1 and assumed to be 1 if not specified.'; COMMENT ON FUNCTION ST_SetValue(raster , integer , integer , double precision ) IS 'args: rast, columnx, rowy, newvalue - Returns modified raster resulting from setting the value of a given band in a given columnx, rowy pixel or the pixels that intersect a particular geometry. Band numbers start at 1 and assumed to be 1 if not specified.'; COMMENT ON FUNCTION ST_SetValues(raster , integer , integer , integer , double precision[][] , boolean[][] , boolean ) IS 'args: rast, nband, columnx, rowy, newvalueset, noset=NULL, keepnodata=FALSE - Returns modified raster resulting from setting the values of a given band.'; COMMENT ON FUNCTION ST_SetValues(raster , integer , integer , integer , double precision[][] , double precision , boolean ) IS 'args: rast, nband, columnx, rowy, newvalueset, nosetvalue, keepnodata=FALSE - Returns modified raster resulting from setting the values of a given band.'; COMMENT ON FUNCTION ST_SetValues(raster , integer , integer , integer , integer , integer , double precision , boolean ) IS 'args: rast, nband, columnx, rowy, width, height, newvalue, keepnodata=FALSE - Returns modified raster resulting from setting the values of a given band.'; COMMENT ON FUNCTION ST_SetValues(raster , integer , integer , integer , integer , double precision , boolean ) IS 'args: rast, columnx, rowy, width, height, newvalue, keepnodata=FALSE - Returns modified raster resulting from setting the values of a given band.'; COMMENT ON FUNCTION ST_SetValues(raster , integer , geomval[] , boolean ) IS 'args: rast, nband, geomvalset, keepnodata=FALSE - Returns modified raster resulting from setting the values of a given band.'; COMMENT ON FUNCTION ST_DumpValues(raster , integer[] , boolean ) IS 'args: rast, nband, exclude_nodata_value=true - Get the values of the specified band as a 2-dimension array.'; COMMENT ON FUNCTION ST_DumpValues(raster , integer , boolean ) IS 'args: rast, nband, exclude_nodata_value=true - Get the values of the specified band as a 2-dimension array.'; COMMENT ON FUNCTION ST_PixelOfValue(raster , integer , double precision[] , boolean ) IS 'args: rast, nband, search, exclude_nodata_value=true - Get the columnx, rowy coordinates of the pixel whose value equals the search value.'; COMMENT ON FUNCTION ST_PixelOfValue(raster , double precision[] , boolean ) IS 'args: rast, search, exclude_nodata_value=true - Get the columnx, rowy coordinates of the pixel whose value equals the search value.'; COMMENT ON FUNCTION ST_PixelOfValue(raster , integer , double precision , boolean ) IS 'args: rast, nband, search, exclude_nodata_value=true - Get the columnx, rowy coordinates of the pixel whose value equals the search value.'; COMMENT ON FUNCTION ST_PixelOfValue(raster , double precision , boolean ) IS 'args: rast, search, exclude_nodata_value=true - Get the columnx, rowy coordinates of the pixel whose value equals the search value.'; COMMENT ON FUNCTION ST_SetGeoReference(raster , text , text ) IS 'args: rast, georefcoords, format=GDAL - Set Georeference 6 georeference parameters in a single call. Numbers should be separated by white space. Accepts inputs in GDAL or ESRI format. Default is GDAL.'; COMMENT ON FUNCTION ST_SetGeoReference(raster , double precision , double precision , double precision , double precision , double precision , double precision ) IS 'args: rast, upperleftx, upperlefty, scalex, scaley, skewx, skewy - Set Georeference 6 georeference parameters in a single call. Numbers should be separated by white space. Accepts inputs in GDAL or ESRI format. Default is GDAL.'; COMMENT ON FUNCTION ST_SetRotation(raster, float8) IS 'args: rast, rotation - Set the rotation of the raster in radian.'; COMMENT ON FUNCTION ST_SetScale(raster , float8 ) IS 'args: rast, xy - Sets the X and Y size of pixels in units of coordinate reference system. Number units/pixel width/height.'; COMMENT ON FUNCTION ST_SetScale(raster , float8 , float8 ) IS 'args: rast, x, y - Sets the X and Y size of pixels in units of coordinate reference system. Number units/pixel width/height.'; COMMENT ON FUNCTION ST_SetSkew(raster , float8 ) IS 'args: rast, skewxy - Sets the georeference X and Y skew (or rotation parameter). If only one is passed in, sets X and Y to the same value.'; COMMENT ON FUNCTION ST_SetSkew(raster , float8 , float8 ) IS 'args: rast, skewx, skewy - Sets the georeference X and Y skew (or rotation parameter). If only one is passed in, sets X and Y to the same value.'; COMMENT ON FUNCTION ST_SetSRID(raster , integer ) IS 'args: rast, srid - Sets the SRID of a raster to a particular integer srid defined in the spatial_ref_sys table.'; COMMENT ON FUNCTION ST_SetUpperLeft(raster , double precision , double precision ) IS 'args: rast, x, y - Sets the value of the upper left corner of the pixel to projected X and Y coordinates.'; COMMENT ON FUNCTION ST_Resample(raster , integer , integer , double precision , double precision , double precision , double precision , text , double precision ) IS 'args: rast, width, height, gridx=NULL, gridy=NULL, skewx=0, skewy=0, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster using a specified resampling algorithm, new dimensions, an arbitrary grid corner and a set of raster georeferencing attributes defined or borrowed from another raster.'; COMMENT ON FUNCTION ST_Resample(raster , double precision , double precision , double precision , double precision , double precision , double precision , text , double precision ) IS 'args: rast, scalex=0, scaley=0, gridx=NULL, gridy=NULL, skewx=0, skewy=0, algorithm=NearestNeighbor, maxerr=0.125 - Resample a raster using a specified resampling algorithm, new dimensions, an arbitrary grid corner and a set of raster georeferencing attributes defined or borrowed from another raster.'; COMMENT ON FUNCTION ST_Resample(raster , raster , text , double precision , boolean ) IS 'args: rast, ref, algorithm=NearestNeighbour, maxerr=0.125, usescale=true - Resample a raster using a specified resampling algorithm, new dimensions, an arbitrary grid corner and a set of raster georeferencing attributes defined or borrowed from another raster.'; COMMENT ON FUNCTION ST_Resample(raster , raster , boolean , text , double precision ) IS 'args: rast, ref, usescale, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster using a specified resampling algorithm, new dimensions, an arbitrary grid corner and a set of raster georeferencing attributes defined or borrowed from another raster.'; COMMENT ON FUNCTION ST_Rescale(raster , double precision , text , double precision ) IS 'args: rast, scalexy, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster by adjusting only its scale (or pixel size). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.'; COMMENT ON FUNCTION ST_Rescale(raster , double precision , double precision , text , double precision ) IS 'args: rast, scalex, scaley, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster by adjusting only its scale (or pixel size). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.'; COMMENT ON FUNCTION ST_Reskew(raster , double precision , text , double precision ) IS 'args: rast, skewxy, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster by adjusting only its skew (or rotation parameters). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.'; COMMENT ON FUNCTION ST_Reskew(raster , double precision , double precision , text , double precision ) IS 'args: rast, skewx, skewy, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster by adjusting only its skew (or rotation parameters). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.'; COMMENT ON FUNCTION ST_SnapToGrid(raster , double precision , double precision , text , double precision , double precision , double precision ) IS 'args: rast, gridx, gridy, algorithm=NearestNeighbour, maxerr=0.125, scalex=DEFAULT 0, scaley=DEFAULT 0 - Resample a raster by snapping it to a grid. New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.'; COMMENT ON FUNCTION ST_SnapToGrid(raster , double precision , double precision , double precision , double precision , text , double precision ) IS 'args: rast, gridx, gridy, scalex, scaley, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster by snapping it to a grid. New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.'; COMMENT ON FUNCTION ST_SnapToGrid(raster , double precision , double precision , double precision , text , double precision ) IS 'args: rast, gridx, gridy, scalexy, algorithm=NearestNeighbour, maxerr=0.125 - Resample a raster by snapping it to a grid. New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.'; COMMENT ON FUNCTION ST_Resize(raster , integer , integer , text , double precision ) IS 'args: rast, width, height, algorithm=NearestNeighbor, maxerr=0.125 - Resize a raster to a new width/height'; COMMENT ON FUNCTION ST_Resize(raster , double precision , double precision , text , double precision ) IS 'args: rast, percentwidth, percentheight, algorithm=NearestNeighbor, maxerr=0.125 - Resize a raster to a new width/height'; COMMENT ON FUNCTION ST_Resize(raster , text , text , text , double precision ) IS 'args: rast, width, height, algorithm=NearestNeighbor, maxerr=0.125 - Resize a raster to a new width/height'; COMMENT ON FUNCTION ST_Transform(raster , integer , text , double precision , double precision , double precision ) IS 'args: rast, srid, algorithm=NearestNeighbor, maxerr=0.125, scalex, scaley - Reprojects a raster in a known spatial reference system to another known spatial reference system using specified resampling algorithm. Options are NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos defaulting to NearestNeighbor.'; COMMENT ON FUNCTION ST_Transform(raster , integer , double precision , double precision , text , double precision ) IS 'args: rast, srid, scalex, scaley, algorithm=NearestNeighbor, maxerr=0.125 - Reprojects a raster in a known spatial reference system to another known spatial reference system using specified resampling algorithm. Options are NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos defaulting to NearestNeighbor.'; COMMENT ON FUNCTION ST_Transform(raster , raster , text , double precision ) IS 'args: rast, alignto, algorithm=NearestNeighbor, maxerr=0.125 - Reprojects a raster in a known spatial reference system to another known spatial reference system using specified resampling algorithm. Options are NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos defaulting to NearestNeighbor.'; COMMENT ON FUNCTION ST_SetBandNoDataValue(raster , double precision ) IS 'args: rast, nodatavalue - Sets the value for the given band that represents no data. Band 1 is assumed if no band is specified. To mark a band as having no nodata value, set the nodata value = NULL.'; COMMENT ON FUNCTION ST_SetBandNoDataValue(raster , integer , double precision , boolean ) IS 'args: rast, band, nodatavalue, forcechecking=false - Sets the value for the given band that represents no data. Band 1 is assumed if no band is specified. To mark a band as having no nodata value, set the nodata value = NULL.'; COMMENT ON FUNCTION ST_SetBandIsNoData(raster , integer ) IS 'args: rast, band=1 - Sets the isnodata flag of the band to TRUE.'; COMMENT ON FUNCTION ST_Count(raster , integer , boolean ) IS 'args: rast, nband=1, exclude_nodata_value=true - Returns the number of pixels in a given band of a raster or raster coverage. If no band is specified defaults to band 1. If exclude_nodata_value is set to true, will only count pixels that are not equal to the nodata value.'; COMMENT ON FUNCTION ST_Count(raster , boolean ) IS 'args: rast, exclude_nodata_value - Returns the number of pixels in a given band of a raster or raster coverage. If no band is specified defaults to band 1. If exclude_nodata_value is set to true, will only count pixels that are not equal to the nodata value.'; COMMENT ON FUNCTION ST_Count(text , text , integer , boolean ) IS 'args: rastertable, rastercolumn, nband=1, exclude_nodata_value=true - Returns the number of pixels in a given band of a raster or raster coverage. If no band is specified defaults to band 1. If exclude_nodata_value is set to true, will only count pixels that are not equal to the nodata value.'; COMMENT ON FUNCTION ST_Count(text , text , boolean ) IS 'args: rastertable, rastercolumn, exclude_nodata_value - Returns the number of pixels in a given band of a raster or raster coverage. If no band is specified defaults to band 1. If exclude_nodata_value is set to true, will only count pixels that are not equal to the nodata value.'; COMMENT ON FUNCTION ST_Histogram(raster , integer , boolean , integer , double precision[] , boolean ) IS 'args: rast, nband=1, exclude_nodata_value=true, bins=autocomputed, width=NULL, right=false - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Histogram(raster , integer , integer , double precision[] , boolean ) IS 'args: rast, nband, bins, width=NULL, right=false - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Histogram(raster , integer , boolean , integer , boolean ) IS 'args: rast, nband, exclude_nodata_value, bins, right - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Histogram(raster , integer , integer , boolean ) IS 'args: rast, nband, bins, right - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Histogram(text , text , integer , integer , boolean ) IS 'args: rastertable, rastercolumn, nband, bins, right - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Histogram(text , text , integer , boolean , integer , boolean ) IS 'args: rastertable, rastercolumn, nband, exclude_nodata_value, bins, right - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Histogram(text , text , integer , boolean , integer , double precision[] , boolean ) IS 'args: rastertable, rastercolumn, nband=1, exclude_nodata_value=true, bins=autocomputed, width=NULL, right=false - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Histogram(text , text , integer , integer , double precision[] , boolean ) IS 'args: rastertable, rastercolumn, nband=1, bins, width=NULL, right=false - Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.'; COMMENT ON FUNCTION ST_Quantile(raster , integer , boolean , double precision[] ) IS 'args: rast, nband=1, exclude_nodata_value=true, quantiles=NULL - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(raster , double precision[] ) IS 'args: rast, quantiles - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(raster , integer , double precision[] ) IS 'args: rast, nband, quantiles - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(raster , double precision ) IS 'args: rast, quantile - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(raster , boolean , double precision ) IS 'args: rast, exclude_nodata_value, quantile=NULL - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(raster , integer , double precision ) IS 'args: rast, nband, quantile - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(raster , integer , boolean , double precision ) IS 'args: rast, nband, exclude_nodata_value, quantile - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(raster , integer , double precision ) IS 'args: rast, nband, quantile - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(text , text , integer , boolean , double precision[] ) IS 'args: rastertable, rastercolumn, nband=1, exclude_nodata_value=true, quantiles=NULL - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_Quantile(text , text , integer , double precision[] ) IS 'args: rastertable, rastercolumn, nband, quantiles - Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the rasters 25%, 50%, 75% percentile.'; COMMENT ON FUNCTION ST_SummaryStats(text , text , boolean ) IS 'args: rastertable, rastercolumn, exclude_nodata_value - Returns record consisting of count, sum, mean, stddev, min, max for a given raster band of a raster or raster coverage. Band 1 is assumed is no band is specified.'; COMMENT ON FUNCTION ST_SummaryStats(raster , boolean ) IS 'args: rast, exclude_nodata_value - Returns record consisting of count, sum, mean, stddev, min, max for a given raster band of a raster or raster coverage. Band 1 is assumed is no band is specified.'; COMMENT ON FUNCTION ST_SummaryStats(text , text , integer , boolean ) IS 'args: rastertable, rastercolumn, nband=1, exclude_nodata_value=true - Returns record consisting of count, sum, mean, stddev, min, max for a given raster band of a raster or raster coverage. Band 1 is assumed is no band is specified.'; COMMENT ON FUNCTION ST_SummaryStats(raster , integer , boolean ) IS 'args: rast, nband, exclude_nodata_value - Returns record consisting of count, sum, mean, stddev, min, max for a given raster band of a raster or raster coverage. Band 1 is assumed is no band is specified.'; COMMENT ON FUNCTION ST_ValueCount(raster , integer , boolean , double precision[] , double precision ) IS 'args: rast, nband=1, exclude_nodata_value=true, searchvalues=NULL, roundto=0, OUT value, OUT count - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(raster , integer , double precision[] , double precision ) IS 'args: rast, nband, searchvalues, roundto=0, OUT value, OUT count - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(raster , double precision[] , double precision ) IS 'args: rast, searchvalues, roundto=0, OUT value, OUT count - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(raster , double precision , double precision ) IS 'args: rast, searchvalue, roundto=0 - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(raster , integer , boolean , double precision , double precision ) IS 'args: rast, nband, exclude_nodata_value, searchvalue, roundto=0 - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(raster , integer , double precision , double precision ) IS 'args: rast, nband, searchvalue, roundto=0 - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(text , text , integer , boolean , double precision[] , double precision ) IS 'args: rastertable, rastercolumn, nband=1, exclude_nodata_value=true, searchvalues=NULL, roundto=0, OUT value, OUT count - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(text , text , double precision[] , double precision ) IS 'args: rastertable, rastercolumn, searchvalues, roundto=0, OUT value, OUT count - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(text , text , integer , double precision[] , double precision ) IS 'args: rastertable, rastercolumn, nband, searchvalues, roundto=0, OUT value, OUT count - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(text , text , integer , boolean , double precision , double precision ) IS 'args: rastertable, rastercolumn, nband, exclude_nodata_value, searchvalue, roundto=0 - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(text , text , double precision , double precision ) IS 'args: rastertable, rastercolumn, searchvalue, roundto=0 - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_ValueCount(text , text , integer , double precision , double precision ) IS 'args: rastertable, rastercolumn, nband, searchvalue, roundto=0 - Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer.'; COMMENT ON FUNCTION ST_AsBinary(raster , boolean ) IS 'args: rast, outasin=FALSE - Return the Well-Known Binary (WKB) representation of the raster without SRID meta data.'; COMMENT ON FUNCTION ST_AsGDALRaster(raster , text , text[] , integer ) IS 'args: rast, format, options=NULL, srid=sameassource - Return the raster tile in the designated GDAL Raster format. Raster formats are one of those supported by your compiled library. Use ST_GDALRasters() to get a list of formats supported by your library.'; COMMENT ON FUNCTION ST_AsJPEG(raster , text[] ) IS 'args: rast, options=NULL - Return the raster tile selected bands as a single Joint Photographic Exports Group (JPEG) image (byte array). If no band is specified and 1 or more than 3 bands, then only the first band is used. If only 3 bands then all 3 bands are used and mapped to RGB.'; COMMENT ON FUNCTION ST_AsJPEG(raster , integer , integer ) IS 'args: rast, nband, quality - Return the raster tile selected bands as a single Joint Photographic Exports Group (JPEG) image (byte array). If no band is specified and 1 or more than 3 bands, then only the first band is used. If only 3 bands then all 3 bands are used and mapped to RGB.'; COMMENT ON FUNCTION ST_AsJPEG(raster , integer , text[] ) IS 'args: rast, nband, options=NULL - Return the raster tile selected bands as a single Joint Photographic Exports Group (JPEG) image (byte array). If no band is specified and 1 or more than 3 bands, then only the first band is used. If only 3 bands then all 3 bands are used and mapped to RGB.'; COMMENT ON FUNCTION ST_AsJPEG(raster , integer[] , text[] ) IS 'args: rast, nbands, options=NULL - Return the raster tile selected bands as a single Joint Photographic Exports Group (JPEG) image (byte array). If no band is specified and 1 or more than 3 bands, then only the first band is used. If only 3 bands then all 3 bands are used and mapped to RGB.'; COMMENT ON FUNCTION ST_AsJPEG(raster , integer[] , integer ) IS 'args: rast, nbands, quality - Return the raster tile selected bands as a single Joint Photographic Exports Group (JPEG) image (byte array). If no band is specified and 1 or more than 3 bands, then only the first band is used. If only 3 bands then all 3 bands are used and mapped to RGB.'; COMMENT ON FUNCTION ST_AsPNG(raster , text[] ) IS 'args: rast, options=NULL - Return the raster tile selected bands as a single portable network graphics (PNG) image (byte array). If 1, 3, or 4 bands in raster and no bands are specified, then all bands are used. If more 2 or more than 4 bands and no bands specified, then only band 1 is used. Bands are mapped to RGB or RGBA space.'; COMMENT ON FUNCTION ST_AsPNG(raster , integer , integer ) IS 'args: rast, nband, compression - Return the raster tile selected bands as a single portable network graphics (PNG) image (byte array). If 1, 3, or 4 bands in raster and no bands are specified, then all bands are used. If more 2 or more than 4 bands and no bands specified, then only band 1 is used. Bands are mapped to RGB or RGBA space.'; COMMENT ON FUNCTION ST_AsPNG(raster , integer , text[] ) IS 'args: rast, nband, options=NULL - Return the raster tile selected bands as a single portable network graphics (PNG) image (byte array). If 1, 3, or 4 bands in raster and no bands are specified, then all bands are used. If more 2 or more than 4 bands and no bands specified, then only band 1 is used. Bands are mapped to RGB or RGBA space.'; COMMENT ON FUNCTION ST_AsPNG(raster , integer[] , integer ) IS 'args: rast, nbands, compression - Return the raster tile selected bands as a single portable network graphics (PNG) image (byte array). If 1, 3, or 4 bands in raster and no bands are specified, then all bands are used. If more 2 or more than 4 bands and no bands specified, then only band 1 is used. Bands are mapped to RGB or RGBA space.'; COMMENT ON FUNCTION ST_AsPNG(raster , integer[] , text[] ) IS 'args: rast, nbands, options=NULL - Return the raster tile selected bands as a single portable network graphics (PNG) image (byte array). If 1, 3, or 4 bands in raster and no bands are specified, then all bands are used. If more 2 or more than 4 bands and no bands specified, then only band 1 is used. Bands are mapped to RGB or RGBA space.'; COMMENT ON FUNCTION ST_AsTIFF(raster , text[] , integer ) IS 'args: rast, options='', srid=sameassource - Return the raster selected bands as a single TIFF image (byte array). If no band is specified, then will try to use all bands.'; COMMENT ON FUNCTION ST_AsTIFF(raster , text , integer ) IS 'args: rast, compression='', srid=sameassource - Return the raster selected bands as a single TIFF image (byte array). If no band is specified, then will try to use all bands.'; COMMENT ON FUNCTION ST_AsTIFF(raster , integer[] , text , integer ) IS 'args: rast, nbands, compression='', srid=sameassource - Return the raster selected bands as a single TIFF image (byte array). If no band is specified, then will try to use all bands.'; COMMENT ON FUNCTION ST_AsTIFF(raster , integer[] , text[] , integer ) IS 'args: rast, nbands, options, srid=sameassource - Return the raster selected bands as a single TIFF image (byte array). If no band is specified, then will try to use all bands.'; COMMENT ON FUNCTION ST_Contains(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if no points of raster rastB lie in the exterior of raster rastA and at least one point of the interior of rastB lies in the interior of rastA.'; COMMENT ON FUNCTION ST_Contains(raster , raster ) IS 'args: rastA, rastB - Return true if no points of raster rastB lie in the exterior of raster rastA and at least one point of the interior of rastB lies in the interior of rastA.'; COMMENT ON FUNCTION ST_ContainsProperly(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if rastB intersects the interior of rastA but not the boundary or exterior of rastA.'; COMMENT ON FUNCTION ST_ContainsProperly(raster , raster ) IS 'args: rastA, rastB - Return true if rastB intersects the interior of rastA but not the boundary or exterior of rastA.'; COMMENT ON FUNCTION ST_Covers(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if no points of raster rastB lie outside raster rastA.'; COMMENT ON FUNCTION ST_Covers(raster , raster ) IS 'args: rastA, rastB - Return true if no points of raster rastB lie outside raster rastA.'; COMMENT ON FUNCTION ST_CoveredBy(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if no points of raster rastA lie outside raster rastB.'; COMMENT ON FUNCTION ST_CoveredBy(raster , raster ) IS 'args: rastA, rastB - Return true if no points of raster rastA lie outside raster rastB.'; COMMENT ON FUNCTION ST_Disjoint(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if raster rastA does not spatially intersect rastB.'; COMMENT ON FUNCTION ST_Disjoint(raster , raster ) IS 'args: rastA, rastB - Return true if raster rastA does not spatially intersect rastB.'; COMMENT ON FUNCTION ST_Intersects(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if raster rastA spatially intersects raster rastB.'; COMMENT ON FUNCTION ST_Intersects(raster , raster ) IS 'args: rastA, rastB - Return true if raster rastA spatially intersects raster rastB.'; COMMENT ON FUNCTION ST_Intersects(raster , integer , geometry ) IS 'args: rast, nband, geommin - Return true if raster rastA spatially intersects raster rastB.'; COMMENT ON FUNCTION ST_Intersects(raster , geometry , integer ) IS 'args: rast, geommin, nband=NULL - Return true if raster rastA spatially intersects raster rastB.'; COMMENT ON FUNCTION ST_Intersects(geometry , raster , integer ) IS 'args: geommin, rast, nband=NULL - Return true if raster rastA spatially intersects raster rastB.'; COMMENT ON FUNCTION ST_Overlaps(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if raster rastA and rastB intersect but one does not completely contain the other.'; COMMENT ON FUNCTION ST_Overlaps(raster , raster ) IS 'args: rastA, rastB - Return true if raster rastA and rastB intersect but one does not completely contain the other.'; COMMENT ON FUNCTION ST_Touches(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if raster rastA and rastB have at least one point in common but their interiors do not intersect.'; COMMENT ON FUNCTION ST_Touches(raster , raster ) IS 'args: rastA, rastB - Return true if raster rastA and rastB have at least one point in common but their interiors do not intersect.'; COMMENT ON FUNCTION ST_SameAlignment(raster , raster ) IS 'args: rastA, rastB - Returns true if rasters have same skew, scale, spatial ref and false if they dont with notice detailing issue.'; COMMENT ON FUNCTION ST_SameAlignment(double precision , double precision , double precision , double precision , double precision , double precision , double precision , double precision , double precision , double precision , double precision , double precision ) IS 'args: ulx1, uly1, scalex1, scaley1, skewx1, skewy1, ulx2, uly2, scalex2, scaley2, skewx2, skewy2 - Returns true if rasters have same skew, scale, spatial ref and false if they dont with notice detailing issue.'; COMMENT ON AGGREGATE ST_SameAlignment(raster) IS 'args: rastfield - Returns true if rasters have same skew, scale, spatial ref and false if they dont with notice detailing issue.'; COMMENT ON FUNCTION ST_SameAlignment(raster , raster ) IS 'args: rastA, rastB - Returns text stating if rasters are aligned and if not aligned, a reason why.'; COMMENT ON FUNCTION ST_Within(raster , integer , raster , integer ) IS 'args: rastA, nbandA, rastB, nbandB - Return true if no points of raster rastA lie in the exterior of raster rastB and at least one point of the interior of rastA lies in the interior of rastB.'; COMMENT ON FUNCTION ST_Within(raster , raster ) IS 'args: rastA, rastB - Return true if no points of raster rastA lie in the exterior of raster rastB and at least one point of the interior of rastA lies in the interior of rastB.'; COMMENT ON FUNCTION ST_DWithin(raster , integer , raster , integer , double precision ) IS 'args: rastA, nbandA, rastB, nbandB, distance_of_srid - Return true if rasters rastA and rastB are within the specified distance of each other.'; COMMENT ON FUNCTION ST_DWithin(raster , raster , double precision ) IS 'args: rastA, rastB, distance_of_srid - Return true if rasters rastA and rastB are within the specified distance of each other.'; COMMENT ON FUNCTION ST_DFullyWithin(raster , integer , raster , integer , double precision ) IS 'args: rastA, nbandA, rastB, nbandB, distance_of_srid - Return true if rasters rastA and rastB are fully within the specified distance of each other.'; COMMENT ON FUNCTION ST_DFullyWithin(raster , raster , double precision ) IS 'args: rastA, rastB, distance_of_srid - Return true if rasters rastA and rastB are fully within the specified distance of each other.'; COMMENT ON TYPE geomval IS 'postgis raster type: A spatial datatype with two fields - geom (holding a geometry object) and val (holding a double precision pixel value from a raster band).'; COMMENT ON TYPE addbandarg IS 'postgis raster type: A composite type used as input into the ST_AddBand function defining the attributes and initial value of the new band.'; COMMENT ON TYPE rastbandarg IS 'postgis raster type: A composite type for use when needing to express a raster and a band index of that raster.'; COMMENT ON TYPE raster IS 'postgis raster type: raster spatial data type.'; COMMENT ON TYPE reclassarg IS 'postgis raster type: A composite type used as input into the ST_Reclass function defining the behavior of reclassification.'; COMMENT ON TYPE unionarg IS 'postgis raster type: A composite type used as input into the ST_Union function defining the bands to be processed and behavior of the UNION operation.'; postgis-2.1.2+dfsg.orig/doc/Makefile.comments0000644000000000000000000000321112315456245017615 0ustar rootroot# ********************************************************************** # * $Id$ # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2010 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** # Separate PGXS-enabled Makefile for documentation installation (it is # not possible to merge into the main Makefile as has been done for # the shapefile loader) MODULE_doc=postgis-2.1 MODULEDIR=contrib/$(MODULE_doc) # Files to be copied to the contrib/ directory DATA_built=postgis_comments.sql raster_comments.sql topology_comments.sql # PGXS information PG_CONFIG = /opt/pgsql/9.2/bin/pg_config PGXS := /opt/pgsql/9.2/lib/pgxs/src/makefiles/pgxs.mk include $(PGXS) # PGXS override feature. The ability to allow PostGIS to install itself # in a versioned directory is only available in PostgreSQL >= 8.5. To # do this by default on older PostgreSQL versions, we need to override # the existing PGXS targets. # # Once PostgreSQL 8.5 becomes the minimum supported version, this entire # section and its associated Makefile.pgxs should be removed. PGXSOVERRIDE = 0 ifeq ($(PGXSOVERRIDE),1) include ../postgis/Makefile.pgxs endif # If REGRESS=1 passed as a parameter, change the default install paths # so that no prefix is included. This allows us to relocate to a temporary # directory for regression testing. ifeq ($(REGRESS),1) bindir=/bin pkglibdir=/lib datadir=/share datamoduledir=contrib/postgis endif postgis-2.1.2+dfsg.orig/doc/reference_operator.xml0000644000000000000000000011156512027233315020727 0ustar rootroot Operators && Returns TRUE if A's 2D bounding box intersects B's 2D bounding box. boolean && geometry A geometry B boolean && geography A geography B Description The && operator returns TRUE if the 2D bounding box of geometry A intersects the 2D bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. Availability: 1.5.0 support for geography was introduced. &curve_support; &P_support; Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 && tbl2.column2 AS overlaps FROM ( VALUES (1, 'LINESTRING(0 0, 3 3)'::geometry), (2, 'LINESTRING(0 1, 0 5)'::geometry)) AS tbl1, ( VALUES (3, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2; column1 | column1 | overlaps ---------+---------+---------- 1 | 3 | t 2 | 3 | f (2 rows) See Also , , , , , &&& Returns TRUE if A's 3D bounding box intersects B's 3D bounding box. boolean &&& geometry A geometry B Description The &&& operator returns TRUE if the n-D bounding box of geometry A intersects the n-D bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Availability: 2.0.0 &curve_support; &P_support; &T_support; &Z_support; Examples: 3D LineStrings SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3d, tbl1.column2 && tbl2.column2 AS overlaps_2d FROM ( VALUES (1, 'LINESTRING Z(0 0 1, 3 3 2)'::geometry), (2, 'LINESTRING Z(1 2 0, 0 5 -1)'::geometry)) AS tbl1, ( VALUES (3, 'LINESTRING Z(1 2 1, 4 6 1)'::geometry)) AS tbl2; column1 | column1 | overlaps_3d | overlaps_2d ---------+---------+-------------+------------- 1 | 3 | t | t 2 | 3 | f | t Examples: 3M LineStrings SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3zm, tbl1.column2 && tbl2.column2 AS overlaps_2d FROM ( VALUES (1, 'LINESTRING M(0 0 1, 3 3 2)'::geometry), (2, 'LINESTRING M(1 2 0, 0 5 -1)'::geometry)) AS tbl1, ( VALUES (3, 'LINESTRING M(1 2 1, 4 6 1)'::geometry)) AS tbl2; column1 | column1 | overlaps_3zm | overlaps_2d ---------+---------+-------------+------------- 1 | 3 | t | t 2 | 3 | f | t See Also &< Returns TRUE if A's bounding box overlaps or is to the left of B's. boolean &< geometry A geometry B Description The &< operator returns TRUE if the bounding box of geometry A overlaps or is to the left of the bounding box of geometry B, or more accurately, overlaps or is NOT to the right of the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 &< tbl2.column2 AS overleft FROM ( VALUES (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING(0 0, 3 3)'::geometry), (3, 'LINESTRING(0 1, 0 5)'::geometry), (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2; column1 | column1 | overleft ---------+---------+---------- 1 | 2 | f 1 | 3 | f 1 | 4 | t (3 rows) See Also , , , &<| Returns TRUE if A's bounding box overlaps or is below B's. boolean &<| geometry A geometry B Description The &<| operator returns TRUE if the bounding box of geometry A overlaps or is below of the bounding box of geometry B, or more accurately, overlaps or is NOT above the bounding box of geometry B. &curve_support; &P_support; This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 &<| tbl2.column2 AS overbelow FROM ( VALUES (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING(0 0, 3 3)'::geometry), (3, 'LINESTRING(0 1, 0 5)'::geometry), (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2; column1 | column1 | overbelow ---------+---------+----------- 1 | 2 | f 1 | 3 | t 1 | 4 | t (3 rows) See Also , , , &> Returns TRUE if A' bounding box overlaps or is to the right of B's. boolean &> geometry A geometry B Description The &> operator returns TRUE if the bounding box of geometry A overlaps or is to the right of the bounding box of geometry B, or more accurately, overlaps or is NOT to the left of the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 &> tbl2.column2 AS overright FROM ( VALUES (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING(0 0, 3 3)'::geometry), (3, 'LINESTRING(0 1, 0 5)'::geometry), (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2; column1 | column1 | overright ---------+---------+----------- 1 | 2 | t 1 | 3 | t 1 | 4 | f (3 rows) See Also , , , << Returns TRUE if A's bounding box is strictly to the left of B's. boolean << geometry A geometry B Description The << operator returns TRUE if the bounding box of geometry A is strictly to the left of the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 << tbl2.column2 AS left FROM ( VALUES (1, 'LINESTRING (1 2, 1 5)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING (0 0, 4 3)'::geometry), (3, 'LINESTRING (6 0, 6 5)'::geometry), (4, 'LINESTRING (2 2, 5 6)'::geometry)) AS tbl2; column1 | column1 | left ---------+---------+------ 1 | 2 | f 1 | 3 | t 1 | 4 | t (3 rows) See Also , , <<| Returns TRUE if A's bounding box is strictly below B's. boolean <<| geometry A geometry B Description The <<| operator returns TRUE if the bounding box of geometry A is strictly below the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 <<| tbl2.column2 AS below FROM ( VALUES (1, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING (1 4, 1 7)'::geometry), (3, 'LINESTRING (6 1, 6 5)'::geometry), (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2; column1 | column1 | below ---------+---------+------- 1 | 2 | t 1 | 3 | f 1 | 4 | f (3 rows) See Also , , = Returns TRUE if A's bounding box is the same as B's. Uses double precision bounding box. boolean = geometry A geometry B boolean = geography A geography B Description The = operator returns TRUE if the bounding box of geometry/geography A is the same as the bounding box of geometry/geography B. PostgreSQL uses the =, <, and > operators defined for geometries to perform internal orderings and comparison of geometries (ie. in a GROUP BY or ORDER BY clause). This is cause for a lot of confusion. When you compare geometryA = geometryB it will return true even when the geometries are clearly different IF their bounding boxes are the same. To check for true equality use or This operand will NOT make use of any indexes that may be available on the geometries. &curve_support; &P_support; Changed: 2.0.0 , the bounding box of geometries was changed to use double precision instead of float4 precision of prior. The side effect of this is that in particular points in prior versions that were a little different may have returned true in prior versions and false in 2.0+ since their float4 boxes would be the same but there float8 (double precision), would be different. Examples SELECT 'LINESTRING(0 0, 0 1, 1 0)'::geometry = 'LINESTRING(1 1, 0 0)'::geometry; ?column? ---------- t (1 row) SELECT ST_AsText(column1) FROM ( VALUES ('LINESTRING(0 0, 1 1)'::geometry), ('LINESTRING(1 1, 0 0)'::geometry)) AS foo; st_astext --------------------- LINESTRING(0 0,1 1) LINESTRING(1 1,0 0) (2 rows) -- Note: the GROUP BY uses the "=" to compare for geometry equivalency. SELECT ST_AsText(column1) FROM ( VALUES ('LINESTRING(0 0, 1 1)'::geometry), ('LINESTRING(1 1, 0 0)'::geometry)) AS foo GROUP BY column1; st_astext --------------------- LINESTRING(0 0,1 1) (1 row) -- In versions prior to 2.0, this used to return true -- SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') = ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect; --pt_intersect -- f See Also , >> Returns TRUE if A's bounding box is strictly to the right of B's. boolean >> geometry A geometry B Description The >> operator returns TRUE if the bounding box of geometry A is strictly to the right of the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 >> tbl2.column2 AS right FROM ( VALUES (1, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING (1 4, 1 7)'::geometry), (3, 'LINESTRING (6 1, 6 5)'::geometry), (4, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl2; column1 | column1 | right ---------+---------+------- 1 | 2 | t 1 | 3 | f 1 | 4 | f (3 rows) See Also , , @ Returns TRUE if A's bounding box is contained by B's. boolean @ geometry A geometry B Description The @ operator returns TRUE if the bounding box of geometry A is completely contained by the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 @ tbl2.column2 AS contained FROM ( VALUES (1, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING (0 0, 4 4)'::geometry), (3, 'LINESTRING (2 2, 4 4)'::geometry), (4, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl2; column1 | column1 | contained ---------+---------+----------- 1 | 2 | t 1 | 3 | f 1 | 4 | t (3 rows) See Also , |&> Returns TRUE if A's bounding box overlaps or is above B's. boolean |&> geometry A geometry B Description The |&> operator returns TRUE if the bounding box of geometry A overlaps or is above the bounding box of geometry B, or more accurately, overlaps or is NOT below the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 |&> tbl2.column2 AS overabove FROM ( VALUES (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING(0 0, 3 3)'::geometry), (3, 'LINESTRING(0 1, 0 5)'::geometry), (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2; column1 | column1 | overabove ---------+---------+----------- 1 | 2 | t 1 | 3 | f 1 | 4 | f (3 rows) See Also , , , |>> Returns TRUE if A's bounding box is strictly above B's. boolean |>> geometry A geometry B Description The |>> operator returns TRUE if the bounding box of geometry A is strictly to the right of the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 |>> tbl2.column2 AS above FROM ( VALUES (1, 'LINESTRING (1 4, 1 7)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING (0 0, 4 2)'::geometry), (3, 'LINESTRING (6 1, 6 5)'::geometry), (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2; column1 | column1 | above ---------+---------+------- 1 | 2 | t 1 | 3 | f 1 | 4 | f (3 rows) See Also , , ~ Returns TRUE if A's bounding box contains B's. boolean ~ geometry A geometry B Description The ~ operator returns TRUE if the bounding box of geometry A completely contains the bounding box of geometry B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT tbl1.column1, tbl2.column1, tbl1.column2 ~ tbl2.column2 AS contains FROM ( VALUES (1, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl1, ( VALUES (2, 'LINESTRING (0 0, 4 4)'::geometry), (3, 'LINESTRING (1 1, 2 2)'::geometry), (4, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl2; column1 | column1 | contains ---------+---------+---------- 1 | 2 | f 1 | 3 | t 1 | 4 | t (3 rows) See Also , ~= Returns TRUE if A's bounding box is the same as B's. boolean ~= geometry A geometry B Description The ~= operator returns TRUE if the bounding box of geometry/geography A is the same as the bounding box of geometry/geography B. This operand will make use of any indexes that may be available on the geometries. Availability: 1.5.0 changed behavior &P_support; This operator has changed behavior in PostGIS 1.5 from testing for actual geometric equality to only checking for bounding box equality. To complicate things it also depends on if you have done a hard or soft upgrade which behavior your database has. To find out which behavior your database has you can run the query below. To check for true equality use or and to check for bounding box equality ; operator is a safer option. Examples select 'LINESTRING(0 0, 1 1)'::geometry ~= 'LINESTRING(0 1, 1 0)'::geometry as equality; equality | -----------------+ t | The above can be used to test if you have the new or old behavior of ~= operator. See Also , , <-> Returns the distance between two points. For point / point checks it uses floating point accuracy (as opposed to the double precision accuracy of the underlying point geometry). For other geometry types the distance between the floating point bounding box centroids is returned. Useful for doing distance ordering and nearest neighbor limits using KNN gist functionality. double precision <-> geometry A geometry B Description The <-> operator returns distance between two points read from the spatial index for points (float precision). For other geometries it returns the distance from centroid of bounding box of geometries. Useful for doing nearest neighbor approximate distance ordering. This operand will make use of any indexes that may be available on the geometries. It is different from other operators that use spatial indexes in that the spatial index is only used when the operator is in the ORDER BY clause. Index only kicks in if one of the geometries is a constant (not in a subquery/cte). e.g. 'SRID=3005;POINT(1011102 450541)'::geometry instead of a.geom Refer to OpenGeo workshop: Nearest-Neighbour Searching for real live example. Availability: 2.0.0 only available for PostgreSQL 9.1+ Examples d | edabbr | vaabbr ------------------+--------+-------- 0 | ALQ | 128 5541.57712511724 | ALQ | 129A 5579.67450712005 | ALQ | 001 6083.4207708641 | ALQ | 131 7691.2205404848 | ALQ | 003 7900.75451037313 | ALQ | 122 8694.20710669982 | ALQ | 129B 9564.24289057111 | ALQ | 130 12089.665931705 | ALQ | 127 18472.5531479404 | ALQ | 002 (10 rows) Then the KNN raw answer: 'SRID=3005;POINT(1011102 450541)'::geometry limit 10;]]> d | edabbr | vaabbr ------------------+--------+-------- 0 | ALQ | 128 5579.67450712005 | ALQ | 001 5541.57712511724 | ALQ | 129A 8694.20710669982 | ALQ | 129B 9564.24289057111 | ALQ | 130 6083.4207708641 | ALQ | 131 12089.665931705 | ALQ | 127 24795.264503022 | ALQ | 124 24587.6584922302 | ALQ | 123 26764.2555463114 | ALQ | 125 (10 rows) Note the misordering in the actual distances and the different entries that actually show up in the top 10. Finally the hybrid: 'SRID=3005;POINT(1011102 450541)'::geometry LIMIT 100) SELECT * FROM index_query ORDER BY d limit 10;]]> d | edabbr | vaabbr ------------------+--------+-------- 0 | ALQ | 128 5541.57712511724 | ALQ | 129A 5579.67450712005 | ALQ | 001 6083.4207708641 | ALQ | 131 7691.2205404848 | ALQ | 003 7900.75451037313 | ALQ | 122 8694.20710669982 | ALQ | 129B 9564.24289057111 | ALQ | 130 12089.665931705 | ALQ | 127 18472.5531479404 | ALQ | 002 (10 rows) See Also , , <#> Returns the distance between bounding box of 2 geometries. For point / point checks it's almost the same as distance (though may be different since the bounding box is at floating point accuracy and geometries are double precision). Useful for doing distance ordering and nearest neighbor limits using KNN gist functionality. double precision <#> geometry A geometry B Description The <#> KNN GIST operator returns distance between two floating point bounding boxes read from the spatial index if available. Useful for doing nearest neighbor approximate distance ordering. This operand will make use of any indexes that may be available on the geometries. It is different from other operators that use spatial indexes in that the spatial index is only used when the operator is in the ORDER BY clause. Index only kicks in if one of the geometries is a constant e.g. ORDER BY (ST_GeomFromText('POINT(1 2)') <#> geom) instead of g1.geom <#>. Availability: 2.0.0 only available for PostgreSQL 9.1+ Examples ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576, 745787 2948499,745740 2948468,745712 2948438, 745690 2948384,745677 2948319)',2249) As b_dist, ST_Distance(b.geom, ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576, 745787 2948499,745740 2948468,745712 2948438, 745690 2948384,745677 2948319)',2249)) As act_dist FROM bos_roads As b ORDER BY b_dist, b.tlid LIMIT 100) As foo ORDER BY act_dist, tlid LIMIT 10;]]> tlid | mtfcc | b_dist | act_dist -----------+-------+------------------+------------------ 85732027 | S1400 | 0 | 0 85732029 | S1400 | 0 | 0 85732031 | S1400 | 0 | 0 85734335 | S1400 | 0 | 0 85736037 | S1400 | 0 | 0 624683742 | S1400 | 0 | 128.528874268666 85719343 | S1400 | 260.839270432962 | 260.839270432962 85741826 | S1400 | 164.759294123275 | 260.839270432962 85732032 | S1400 | 277.75 | 311.830282365264 85735592 | S1400 | 222.25 | 311.830282365264 (10 rows) See Also , , postgis-2.1.2+dfsg.orig/doc/geography.txt0000644000000000000000000001455111722777314017074 0ustar rootrootIntroduction to the Geography Type ================================== The geography type provides native support for spatial features represented on "geographic" coordinates (sometimes called "geodetic" coordinates, or "lat/lon", or "lon/lat"). Geographic coordinates are spherical coordinates expressed in angular units (degrees). The basis for the PostGIS geometry type is a plane. The shortest path between two points on the plane is a straight line. That means calculations on geometries (areas, distances, lengths, intersections, etc) can be calculated using cartesian mathematics and straight line vectors. The basis for the PostGIS geographic type is a sphere. The shortest path between two points on the sphere is a great circle arc. That means that calculations on geographies (areas, distances, lengths, intersections, etc) must be calculated on the sphere, using more complicated mathematics. For more accurate measurements, the calculations must take the actual spheroidal shape of the world into account, and the mathematics becomes very complicated indeed. Because the underlying mathematics is much more complicated, there are fewer functions defined for the geography type than for the geometry type. Over time, as new algorithms are added, the capabilities of the geography type will expand. Geography Basics ================ The geography type only supports the simplest of simple features: * POINT * LINESTRING * POLYGON * MULTIPOINT * MULTILINESTRING * MULTIPOLYGON * GEOMETRYCOLLECTION Properly handing curves on spherical surface would be very difficult indeed. The text representations for geography objects are the same as for geometries: * POINT(0 0) * LINESTRING(0 0, 1 1) * POLYGON((0 0, 1 0, 1 1, 1 0, 0 0)) * ..etc.. The coordinates for geography objects are expected to be in decimal degrees, with longitude as the first ordinate and latitude as the second: * POINT(-126 45) is a legal geography point * POINT(45 -126) is an illegal geography point The geography implementation currently assumes that all coordinates are relative to the WGS84 spheroid (using an SRID of 4326), and does not allow any other SRID values to be used. Future enhancements may allow multiple spheroids to be supported and transformations between spheroids. An SRID value of 0 (undefined) will be treated as implicitly using WGS84 (4326). Installing the Geography Extension ================================== * Pull the source from the geography sandbox. svn checkout http://svn.osgeo.org/postgis/spike/pramsey/geodetic postgis-geodetic-svn * Compile and install PostGIS as usual. cd postgis-geodetic-svn ./configure make make install * Then, create a database and install PostGIS into that database. (Assuming your PostgreSQL is installed in /usr/local/pgsql.) createdb geography psql geography < /usr/local/pgsql/share/contrib/postgis.sql psql geography < /usr/local/pgsql/share/contrib/spatial_ref_sys * Then, install the geography extension. psql geography < /usr/local/pgsql/share/contrib/geography.sql * That's it! Creating a Geography Table ========================== You can create a geography-enabled table using the CREATE TABLE statement as follows: CREATE TABLE gtable ( id integer primary key, geog geography ); Check out the contents of "gtable": \d gtable Table "public.gtable" Column | Type | Modifiers --------+-----------+----------- id | integer | not null geog | geography | Indexes: "gtable_pkey" PRIMARY KEY, btree (id) Now, check the "geography_columns" view and see that your table is listed: SELECT * FROM geography_columns; Note that "geography_columns" metadata is a view against the system tables and kept up to date automatically. This is a big improvement on the manually maintained "geometry_columns" table. Insert some data into the table and then pull it out: INSERT INTO gtable1 VALUES (1, 'POINT(0 0)'); SELECT id,ST_AsText(geog) FROM gtable2; Try inserting some invalid geography data and see the database complain: INSERT INTO gtable1 values (1, 'POINT(1000 0)'); Using Type Restrictions ======================= You can restrict the geography types allowed in a column by adding a type restriction when you create the table: CREATE TABLE gtable2 ( id integer, geog geography(linestring) ); \d gtable2 Table "public.gtable2" Column | Type | Modifiers --------+-----------------------+----------- id | integer | geog | geography(LineString) | Now, if you try to insert a point, the database will complain: INSERT INTO gtable2 VALUES (1, 'POINT(0 0)'); You can also add SRID restrictions to a column, though at this point (with only one SRID supported) there is not a lot of utility to the feature: CREATE TABLE gtable3 ( id integer, geog geography(polygon, 4326) ); \d gtable3 Table "public.gtable3" Column | Type | Modifiers --------+-------------------------+----------- id | integer | geog | geography(Polygon,4326) | Using Input/Output Functions ============================ There are only four input/output functions at this time supporting the OGC well-known text (WKT) and well-known binary (WKB) formats. Adding further output formats (GML, GeoJSON) should be straight-forward, borrowing code from the geometry implementations. * ST_AsText(geography) returns text * ST_AsBinary(geography) returns bytea * ST_GeographyFromText(text) returns geography * ST_GeographyFromBinary(bytea) returns geography You can test that they are bi-directional by stringing them together: SELECT ST_AsText(ST_GeographyFromBinary(ST_AsBinary(ST_GeographyFromText('LINESTRING(0 0, 1 1)')))); Casting from Geometry ===================== There is currently a simple cast from geometry to geography, which can be useful for importing larger selections of data into geography until the data loader is upgraded to allow direct shape file imports. In the future, it is possible the cast could do coordinate conversions, and other magic, but for now it is a direct conversion -- if your coordinates are out of range it will error out. CREATE TABLE geomtable ( id integer, geom geometry ); INSERT INTO geomtable VALUES ( 2, 'POINT(0 0)' ); CREATE TABLE geogtable AS SELECT id, geom::geography AS geog FROM geomtable; SELECT ST_AsText(geog), id FROM geogtable; postgis-2.1.2+dfsg.orig/doc/reference_raster.xml0000644000000000000000000177611012210402370020371 0ustar rootroot Raster Reference The functions given below are the ones which a user of PostGIS Raster is likely to need and which are currently available in PostGIS Raster. There are other functions which are required support functions to the raster objects which are not of use to a general user. raster is a new PostGIS type for storing and analyzing raster data. For loading rasters from raster files please refer to For the examples in this reference we will be using a raster table of dummy rasters - Formed with the following code CREATE TABLE dummy_rast(rid integer, rast raster); INSERT INTO dummy_rast(rid, rast) VALUES (1, ('01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ), -- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0 (2, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' || '41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' || 'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster); This section lists the PostgreSQL data types specifically created to support raster functionality. Raster Support Data types geomval A spatial datatype with two fields - geom (holding a geometry object) and val (holding a double precision pixel value from a raster band). Description geomval is a compound data type consisting of a geometry object referenced by the .geom field and val, a double precision value that represents the pixel value at a particular geometric location in a raster band. It is used by the ST_DumpAsPolygon and Raster intersection family of functions as an output type to explode a raster band into geometry polygons. See Also addbandarg A composite type used as input into the ST_AddBand function defining the attributes and initial value of the new band. Description A composite type used as input into the ST_AddBand function defining the attributes and initial value of the new band. index integer 1-based value indicating the position where the new band will be added amongst the raster's bands. If NULL, the new band will be added at the end of the raster's bands. pixeltype text Pixel type of the new band. One of defined pixel types as described in . initialvalue double precision Initial value that all pixels of new band will be set to. nodataval double precision NODATA value of the new band. If NULL, the new band will not have a NODATA value assigned. See Also rastbandarg A composite type for use when needing to express a raster and a band index of that raster. Description A composite type for use when needing to express a raster and a band index of that raster. rast raster The raster in question/ nband integer 1-based value indicating the band of raster See Also raster raster spatial data type. Description raster is a spatial data type used to represent raster data such as those imported from jpegs, tiffs, pngs, digital elevation models. Each raster has 1 or more bands each having a set of pixel values. Rasters can be georeferenced. Requires PostGIS be compiled with GDAL support. Currently rasters can be implicitly converted to geometry type, but the conversion returns the of the raster. This auto casting may be removed in the near future so don't rely on it. Casting Behavior This section lists the automatic as well as explicit casts allowed for this data type Cast To Behavior geometry automatic See Also reclassarg A composite type used as input into the ST_Reclass function defining the behavior of reclassification. Description A composite type used as input into the ST_Reclass function defining the behavior of reclassification. nband integer The band number of band to reclassify. reclassexpr text range expression consisting of comma delimited range:map_range mappings. : to define mapping that defines how to map old band values to new band values. ( means >, ) means less than, ] < or equal, [ means > or equal 1. [a-b] = a <= x <= b 2. (a-b] = a < x <= b 3. [a-b) = a <= x < b 4. (a-b) = a < x < b ( notation is optional so a-b means the same as (a-b) pixeltype text One of defined pixel types as described in nodataval double precision Value to treat as no data. For image outputs that support transparency, these will be blank. Example: Reclassify band 2 as an 8BUI where 255 is nodata value SELECT ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255)::reclassarg; Example: Reclassify band 1 as an 1BB and no nodata value defined SELECT ROW(1, '0-100]:0, (100-255:1', '1BB', NULL)::reclassarg; See Also unionarg A composite type used as input into the ST_Union function defining the bands to be processed and behavior of the UNION operation. Description A composite type used as input into the ST_Union function defining the bands to be processed and behavior of the UNION operation. nband integer 1-based value indicating the band of each input raster to be processed. uniontype text Type of UNION operation. One of defined types as described in . See Also Raster Management AddRasterConstraints Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize, alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to be inferred. Returns true of the constraint setting was accomplished and if issues a notice. boolean AddRasterConstraints name rasttable name rastcolumn boolean srid boolean scale_x boolean scale_y boolean blocksize_x boolean blocksize_y boolean same_alignment boolean regular_blocking boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true boolean AddRasterConstraints name rasttable name rastcolumn text[] VARIADIC constraints boolean AddRasterConstraints name rastschema name rasttable name rastcolumn text[] VARIADIC constraints boolean AddRasterConstraints name rastschema name rasttable name rastcolumn boolean srid=true boolean scale_x=true boolean scale_y=true boolean blocksize_x=true boolean blocksize_y=true boolean same_alignment=true boolean regular_blocking=false boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true Description Generates constraints on a raster column that are used to display information in the raster_columns raster catalog. The rastschema is the name of the table schema the table resides in. The srid must be an integer value reference to an entry in the SPATIAL_REF_SYS table. raster2pgsql loader uses this function to register raster tables Valid constraint names to pass in: refer to for more details. blocksize sets both X and Y blocksize blocksize_x sets X tile (width in pixels of each tile) blocksize_y sets Y tile (height in pixels of each tile) extent computes extent of whole table and applys constraint all rasters must be within that extent num_bands number of bands pixel_types reads array of pixel types for each band ensure all band n have same pixel type regular_blocking sets spatially unique (no two rasters can be spatially the same) and coverage tile (raster is aligned to a coverage) constraints same_alignment ensures they all have same alignment meaning any two tiles you compare will return true for. Refer to srid ensures all have same srid More -- any listed as inputs into the above functions This function infers the constraints from the data already present in the table. As such for it to work, you must create the raster column first and then load it with data. If you need to load more data in your tables after you have already applied constraints, you may want to run the DropRasterConstraints if the extent of your data has changed. Availability: 2.0.0 Examples: Apply all possible constraints on column based on data CREATE TABLE myrasters(rid SERIAL primary key, rast raster); INSERT INTO myrasters(rast) SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0,4326), 1, '8BSI'::text, -129, NULL); SELECT AddRasterConstraints('myrasters'::name, 'rast'::name); -- verify if registered correctly in the raster_columns view -- SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values FROM raster_columns WHERE r_table_name = 'myrasters'; srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values ------+---------+---------+-------------+-------------+-----------+-------------+--------------- 4326 | 2 | 2 | 1000 | 1000 | 1 | {8BSI} | {0} Examples: Apply single constraint CREATE TABLE public.myrasters2(rid SERIAL primary key, rast raster); INSERT INTO myrasters2(rast) SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0,4326), 1, '8BSI'::text, -129, NULL); SELECT AddRasterConstraints('public'::name, 'myrasters2'::name, 'rast'::name,'regular_blocking', 'blocksize'); -- get notice-- NOTICE: Adding regular blocking constraint NOTICE: Adding blocksize-X constraint NOTICE: Adding blocksize-Y constraint See Also , , , , , DropRasterConstraints Drops PostGIS raster constraints that refer to a raster table column. Useful if you need to reload data or update your raster column data. boolean DropRasterConstraints name rasttable name rastcolumn boolean srid boolean scale_x boolean scale_y boolean blocksize_x boolean blocksize_y boolean same_alignment boolean regular_blocking boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true boolean DropRasterConstraints name rastschema name rasttable name rastcolumn boolean srid=true boolean scale_x=true boolean scale_y=true boolean blocksize_x=true boolean blocksize_y=true boolean same_alignment=true boolean regular_blocking=false boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true boolean DropRasterConstraints name rastschema name rasttable name rastcolumn text[] constraints Description Drops PostGIS raster constraints that refer to a raster table column that were added by . Useful if you need to load more data or update your raster column data. You do not need to do this if you want to get rid of a raster table or a raster column. To drop a raster table use the standard DROP TABLE mytable To drop just a raster column and leave the rest of the table, use standard SQL ALTER TABLE mytable DROP COLUMN rast the table will disappear from the raster_columns catalog if the column or table is dropped. However if only the constraints are dropped, the raster column will still be listed in the raster_columns catalog, but there will be no other information about it aside from the column name and table. Availability: 2.0.0 Examples SELECT DropRasterConstraints ('myrasters','rast'); ----RESULT output --- t -- verify change in raster_columns -- SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values FROM raster_columns WHERE r_table_name = 'myrasters'; srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values ------+---------+---------+-------------+-------------+-----------+-------------+--------------- 0 | | | | | | | See Also PostGIS_Raster_Lib_Build_Date Reports full raster library build date. text PostGIS_Raster_Lib_Build_Date Description Reports raster build date Examples SELECT PostGIS_Raster_Lib_Build_Date(); postgis_raster_lib_build_date ----------------------------- 2010-04-28 21:15:10 See Also PostGIS_Raster_Lib_Version Reports full raster version and build configuration infos. text PostGIS_Raster_Lib_Version Description Reports full raster version and build configuration infos. Examples SELECT PostGIS_Raster_Lib_Version(); postgis_raster_lib_version ----------------------------- 2.0.0 See Also ST_GDALDrivers Returns a list of raster formats supported by your lib gdal. These are the formats you can output your raster using ST_AsGDALRaster. setof record ST_GDALDrivers integer OUT idx text OUT short_name text OUT long_name text OUT create_options Description Returns a list of raster formats short_name,long_name and creator options of each format supported by your lib gdal. Use the short_name as input in the format parameter of . Options vary depending on what drivers your libgdal was compiled with. create_options returns an xml formatted set of CreationOptionList/Option consisting of name and optional type, description and set of VALUE for each creator option for the specific driver. Availability: 2.0.0 - requires GDAL >= 1.6.0. Examples: List of Drivers SELECT short_name, long_name FROM st_gdaldrivers() ORDER BY short_name; short_name | long_name ----------------+-------------------------------------- AAIGrid | Arc/Info ASCII Grid DTED | DTED Elevation Raster EHdr | ESRI .hdr Labelled FIT | FIT Image GIF | Graphics Interchange Format (.gif) GSAG | Golden Software ASCII Grid (.grd) GSBG | Golden Software Binary Grid (.grd) GTiff | GeoTIFF HF2 | HF2/HFZ heightfield raster HFA | Erdas Imagine Images (.img) ILWIS | ILWIS Raster Map INGR | Intergraph Raster JPEG | JPEG JFIF KMLSUPEROVERLAY | Kml Super Overlay NITF | National Imagery Transmission Format PNG | Portable Network Graphics R | R Object Data Store SAGA | SAGA GIS Binary Grid (.sdat) SRTMHGT | SRTMHGT File Format USGSDEM | USGS Optional ASCII DEM (and CDED) VRT | Virtual Raster XPM | X11 PixMap Format Example: List of options for each driver -- Output the create options XML column of JPEG as a table -- -- Note you can use these creator options in ST_AsGDALRaster options argument SELECT (xpath('@name', g.opt))[1]::text As oname, (xpath('@type', g.opt))[1]::text As otype, (xpath('@description', g.opt))[1]::text As descrip FROM (SELECT unnest(xpath('/CreationOptionList/Option', create_options::xml)) As opt FROM st_gdaldrivers() WHERE short_name = 'JPEG') As g; oname | otype | descrip -------------+---------+----------------------------- PROGRESSIVE | boolean | QUALITY | int | good=100, bad=0, default=75 WORLDFILE | boolean | -- raw xml output for creator options for GeoTiff -- SELECT create_options FROM st_gdaldrivers() WHERE short_name = 'GTiff'; See Also , UpdateRasterSRID Change the SRID of all rasters in the user-specified column and table. raster UpdateRasterSRID name schema_name name table_name name column_name integer new_srid raster UpdateRasterSRID name table_name name column_name integer new_srid Description Change the SRID of all rasters in the user-specified column and table. The function will drop all appropriate column constraints (extent, alignment and SRID) before changing the SRID of the specified column's rasters. The data (band pixel values) of the rasters are not touched by this function. Only the raster's metadata is changed. Availability: 2.1.0 Raster Constructors ST_AddBand Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is specified, the band is added to the end. (1) raster ST_AddBand raster rast addbandarg[] addbandargset (2) raster ST_AddBand raster rast integer index text pixeltype double precision initialvalue=0 double precision nodataval=NULL (3) raster ST_AddBand raster rast text pixeltype double precision initialvalue=0 double precision nodataval=NULL (4) raster ST_AddBand raster torast raster fromrast integer fromband=1 integer torastindex=at_end (5) raster ST_AddBand raster torast raster[] fromrasts integer fromband=1 integer torastindex=at_end (6) raster ST_AddBand raster rast integer index text outdbfile integer[] outdbindex double precision nodataval=NULL (7) raster ST_AddBand raster rast text outdbfile integer[] outdbindex integer index=at_end double precision nodataval=NULL Description Returns a raster with a new band added in given position (index), of given type, of given initial value, and of given nodata value. If no index is specified, the band is added to the end. If no fromband is specified, band 1 is assumed. Pixel type is a string representation of one of the pixel types specified in . If an existing index is specified all subsequent bands >= that index are incremented by 1. If an initial value greater than the max of the pixel type is specified, then the initial value is set to the highest value allowed by the pixel type. For the variant that takes an array of (Variant 1), a specific addbandarg's index value is relative to the raster at the time when the band described by that addbandarg is being added to the raster. See the Multiple New Bands example below. For the variant that takes an array of rasters (Variant 5), if torast is NULL then the fromband band of each raster in the array is accumulated into a new raster. For the variants that take outdbfile (Variants 6 and 7), the value must include the full path to the raster file. The file must also be accessible to the postgres server process. Enhanced: 2.1.0 support for addbandarg added. Enhanced: 2.1.0 support for new out-db bands added. Examples: Single New Band -- Add another band of type 8 bit unsigned integer with pixels initialized to 200 UPDATE dummy_rast SET rast = ST_AddBand(rast,'8BUI'::text,200) WHERE rid = 1; -- Create an empty raster 100x100 units, with upper left right at 0, add 2 bands (band 1 is 0/1 boolean bit switch, band2 allows values 0-15) -- uses addbandargs INSERT INTO dummy_rast(rid,rast) VALUES(10, ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 1, -1, 0, 0, 0), ARRAY[ ROW(1, '1BB'::text, 0, NULL), ROW(2, '4BUI'::text, 0, NULL) ]::addbandarg[] ) ); -- output meta data of raster bands to verify all is right -- SELECT (bmd).* FROM (SELECT ST_BandMetaData(rast,generate_series(1,2)) As bmd FROM dummy_rast WHERE rid = 10) AS foo; --result -- pixeltype | nodatavalue | isoutdb | path -----------+----------------+-------------+---------+------ 1BB | | f | 4BUI | | f | -- output meta data of raster - SELECT (rmd).width, (rmd).height, (rmd).numbands FROM (SELECT ST_MetaData(rast) As rmd FROM dummy_rast WHERE rid = 10) AS foo; -- result -- upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands ------------+------------+-------+--------+------------+------------+-------+-------+------+---------- 0 | 0 | 100 | 100 | 1 | -1 | 0 | 0 | 0 | 2 Examples: Multiple New Bands SELECT * FROM ST_BandMetadata( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0), ARRAY[ ROW(NULL, '8BUI', 255, 0), ROW(NULL, '16BUI', 1, 2), ROW(2, '32BUI', 100, 12), ROW(2, '32BF', 3.14, -1) ]::addbandarg[] ), ARRAY[]::integer[] ); bandnum | pixeltype | nodatavalue | isoutdb | path ---------+-----------+-------------+---------+------ 1 | 8BUI | 0 | f | 2 | 32BF | -1 | f | 3 | 32BUI | 12 | f | 4 | 16BUI | 2 | f | -- Aggregate the 1st band of a table of like rasters into a single raster -- with as many bands as there are test_types and as many rows (new rasters) as there are mice -- NOTE: The ORDER BY test_type is only supported in PostgreSQL 9.0+ -- for 8.4 and below it usually works to order your data in a subselect (but not guaranteed) -- The resulting raster will have a band for each test_type alphabetical by test_type -- For mouse lovers: No mice were harmed in this exercise SELECT mouse, ST_AddBand(NULL, array_agg(rast ORDER BY test_type), 1) As rast FROM mice_studies GROUP BY mouse; Examples: New Out-db band SELECT * FROM ST_BandMetadata( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0), '/home/raster/mytestraster.tif'::text, NULL::int[] ), ARRAY[]::integer[] ); bandnum | pixeltype | nodatavalue | isoutdb | path ---------+-----------+-------------+---------+------ 1 | 8BUI | | t | /home/raster/mytestraster.tif 2 | 8BUI | | t | /home/raster/mytestraster.tif 3 | 8BUI | | t | /home/raster/mytestraster.tif See Also , , , , , ST_AsRaster Converts a PostGIS geometry to a PostGIS raster. raster ST_AsRaster geometry geom raster ref text pixeltype double precision value=1 double precision nodataval=0 boolean touched=false raster ST_AsRaster geometry geom raster ref text[] pixeltype=ARRAY['8BUI'] double precision[] value=ARRAY[1] double precision[] nodataval=ARRAY[0] boolean touched=false raster ST_AsRaster geometry geom double precision scalex double precision scaley double precision gridx double precision gridy text pixeltype double precision value=1 double precision nodataval=0 double precision skewx=0 double precision skewy=0 boolean touched=false raster ST_AsRaster geometry geom double precision scalex double precision scaley double precision gridx=NULL double precision gridy=NULL text[] pixeltype=ARRAY['8BUI'] double precision[] value=ARRAY[1] double precision[] nodataval=ARRAY[0] double precision skewx=0 double precision skewy=0 boolean touched=false raster ST_AsRaster geometry geom double precision scalex double precision scaley text pixeltype double precision value=1 double precision nodataval=0 double precision upperleftx=NULL double precision upperlefty=NULL double precision skewx=0 double precision skewy=0 boolean touched=false raster ST_AsRaster geometry geom double precision scalex double precision scaley text[] pixeltype double precision[] value=ARRAY[1] double precision[] nodataval=ARRAY[0] double precision upperleftx=NULL double precision upperlefty=NULL double precision skewx=0 double precision skewy=0 boolean touched=false raster ST_AsRaster geometry geom integer width integer height double precision gridx double precision gridy text pixeltype double precision value=1 double precision nodataval=0 double precision skewx=0 double precision skewy=0 boolean touched=false raster ST_AsRaster geometry geom integer width integer height double precision gridx=NULL double precision gridy=NULL text[] pixeltype=ARRAY['8BUI'] double precision[] value=ARRAY[1] double precision[] nodataval=ARRAY[0] double precision skewx=0 double precision skewy=0 boolean touched=false raster ST_AsRaster geometry geom integer width integer height text pixeltype double precision value=1 double precision nodataval=0 double precision upperleftx=NULL double precision upperlefty=NULL double precision skewx=0 double precision skewy=0 boolean touched=false raster ST_AsRaster geometry geom integer width integer height text[] pixeltype double precision[] value=ARRAY[1] double precision[] nodataval=ARRAY[0] double precision upperleftx=NULL double precision upperlefty=NULL double precision skewx=0 double precision skewy=0 boolean touched=false Description Converts a PostGIS geometry to a PostGIS raster. The many variants offers three groups of possibilities for setting the alignment and pixelsize of the resulting raster. The first group, composed of the two first variants, produce a raster having the same alignment (scalex, scaley, gridx and gridy), pixel type and nodata value as the provided reference raster. You generally pass this reference raster by joining the table containing the geometry with the table containing the reference raster. The second group, composed of four variants, let you set the dimensions of the raster by providing the parameters of a pixel size (scalex & scaley and skewx & skewy). The width & height of the resulting raster will be adjusted to fit the extent of the geometry. In most cases, you must cast integer scalex & scaley arguments to double precision so that PostgreSQL choose the right variant. The third group, composed of four variants, let you fix the dimensions of the raster by providing the dimensions of the raster (width & height). The parameters of the pixel size (scalex & scaley and skewx & skewy) of the resulting raster will be adjusted to fit the extent of the geometry. The two first variants of each of those two last groups let you specify the alignment with an arbitrary corner of the alignment grid (gridx & gridy) and the two last variants takes the upper left corner (upperleftx & upperlefty). Each group of variant allows producing a one band raster or a multiple bands raster. To produce a multiple bands raster, you must provide an array of pixel types (pixeltype[]), an array of initial values (value) and an array of nodata values (nodataval). If not provided pixeltyped defaults to 8BUI, values to 1 and nodataval to 0. The output raster will be in the same spatial reference as the source geometry. The only exception is for variants with a reference raster. In this case the resulting raster will get the same SRID as the reference raster. The optional touched parameter defaults to false and maps to the GDAL ALL_TOUCHED rasterization option, which determines if pixels touched by lines or polygons will be burned. Not just those on the line render path, or whose center point is within the polygon. This is particularly useful for rendering jpegs and pngs of geometries directly from the database when using in combination with and other family of functions. Availability: 2.0.0 - requires GDAL >= 1.6.0. Not yet capable of rendering complex geometry types such as curves, TINS, and PolyhedralSurfaces, but should be able too once GDAL can. Examples: Output geometries as PNG files -- this will output a black circle taking up 150 x 150 pixels -- SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150, '2BUI')); -- the bands map to RGB bands - the value (118,154,118) - teal -- SELECT ST_AsPNG( ST_AsRaster( ST_Buffer( ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10,'join=bevel'), 200,200,ARRAY['8BUI', '8BUI', '8BUI'], ARRAY[118,154,118], ARRAY[0,0,0])); See Also , , , , , , ST_Band Returns one or more bands of an existing raster as a new raster. Useful for building new rasters from existing rasters. raster ST_Band raster rast integer[] nbands = ARRAY[1] raster ST_Band raster rast text nbands character delimiter=, raster ST_Band raster rast integer nband Description Returns a single band of an existing raster as a new raster. Useful for building new rasters from existing rasters or export of only selected bands of a raster. If no band is specified, band 1 is assumed. Used as a helper function in various functions such as for deleting a band. Availability: 2.0.0 Examples -- Make 2 new rasters: 1 containing band 1 of dummy, second containing band 2 of dummy and then reclassified as a 2BUI SELECT ST_NumBands(rast1) As numb1, ST_BandPixelType(rast1) As pix1, ST_NumBands(rast2) As numb2, ST_BandPixelType(rast2) As pix2 FROM ( SELECT ST_Band(rast) As rast1, ST_Reclass(ST_Band(rast,3), '100-200):1, [200-254:2', '2BUI') As rast2 FROM dummy_rast WHERE rid = 2) As foo; numb1 | pix1 | numb2 | pix2 -------+------+-------+------ 1 | 8BUI | 1 | 2BUI -- Return bands 2 and 3. Use text to define bands SELECT ST_NumBands(ST_Band(rast, '2,3')) As num_bands FROM dummy_rast WHERE rid=2; num_bands ---------- 2 -- Return bands 2 and 3. Use array to define bands SELECT ST_NumBands(ST_Band(rast, ARRAY[2,3])) As num_bands FROM dummy_rast WHERE rid=2; --Make a new raster with 2nd band of original and 1st band repeated twice, and another with just the third band SELECT rast, ST_Band(rast, ARRAY[2,1,1]) As dupe_band, ST_Band(rast, 3) As sing_band FROM samples.than_chunked WHERE rid=35; See Also , , , ST_MakeEmptyRaster Returns an empty raster (having no bands) of given dimensions (width & height), upperleft X and Y, pixel size and rotation (scalex, scaley, skewx & skewy) and reference system (srid). If a raster is passed in, returns a new raster with the same size, alignment and SRID. If srid is left out, the spatial ref is set to unknown (0). raster ST_MakeEmptyRaster raster rast raster ST_MakeEmptyRaster integer width integer height float8 upperleftx float8 upperlefty float8 scalex float8 scaley float8 skewx float8 skewy integer srid=unknown raster ST_MakeEmptyRaster integer width integer height float8 upperleftx float8 upperlefty float8 pixelsize Description Returns an empty raster (having no band) of given dimensions (width & height) and georeferenced in spatial (or world) coordinates with upper left X (upperleftx), upper left Y (upperlefty), pixel size and rotation (scalex, scaley, skewx & skewy) and reference system (srid). The last version use a single parameter to specify the pixel size (pixelsize). scalex is set to this argument and scaley is set to the negative value of this argument. skewx and skewy are set to 0. If an existing raster is passed in, it returns a new raster with the same meta data settings (without the bands). If no srid is specified it defaults to 0. After you create an empty raster you probably want to add bands to it and maybe edit it. Refer to to define bands and to set initial pixel values. Examples INSERT INTO dummy_rast(rid,rast) VALUES(3, ST_MakeEmptyRaster( 100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) ); --use an existing raster as template for new raster INSERT INTO dummy_rast(rid,rast) SELECT 4, ST_MakeEmptyRaster(rast) FROM dummy_rast WHERE rid = 3; -- output meta data of rasters we just added SELECT rid, (md).* FROM (SELECT rid, ST_MetaData(rast) As md FROM dummy_rast WHERE rid IN(3,4)) As foo; -- output -- rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands -----+------------+------------+-------+--------+------------+------------+-------+-------+------+---------- 3 | 0.0005 | 0.0005 | 100 | 100 | 1 | 1 | 0 | 0 | 4326 | 0 4 | 0.0005 | 0.0005 | 100 | 100 | 1 | 1 | 0 | 0 | 4326 | 0 See Also , , , , , , , ST_Tile Returns a set of rasters resulting from the split of the input raster based upon the desired dimensions of the output rasters. setof raster ST_Tile raster rast int[] nband integer width integer height boolean padwithnodata=FALSE double precision nodataval=NULL setof raster ST_Tile raster rast integer nband integer width integer height boolean padwithnodata=FALSE double precision nodataval=NULL setof raster ST_Tile raster rast integer width integer height boolean padwithnodata=FALSE double precision nodataval=NULL Description Returns a set of rasters resulting from the split of the input raster based upon the desired dimensions of the output rasters. If padwithnodata = FALSE, edge tiles on the right and bottom sides of the raster may have different dimensions than the rest of the tiles. If padwithnodata = TRUE, all tiles will have the same dimensions with the possibilty that edge tiles being padded with NODATA values. If raster band(s) do not have NODATA value(s) specified, one can be specified by setting nodataval. If a specified band of the input raster is out-of-db, the corresponding band in the output rasters will also be out-of-db. Availability: 2.1.0 Examples WITH foo AS ( SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast ), bar AS ( SELECT ST_Union(rast) AS rast FROM foo ), baz AS ( SELECT ST_Tile(rast, 3, 3, TRUE) AS rast FROM bar ) SELECT ST_DumpValues(rast) FROM baz; st_dumpvalues ------------------------------------------ (1,"{{1,1,1},{1,1,1},{1,1,1}}") (2,"{{10,10,10},{10,10,10},{10,10,10}}") (1,"{{2,2,2},{2,2,2},{2,2,2}}") (2,"{{20,20,20},{20,20,20},{20,20,20}}") (1,"{{3,3,3},{3,3,3},{3,3,3}}") (2,"{{30,30,30},{30,30,30},{30,30,30}}") (1,"{{4,4,4},{4,4,4},{4,4,4}}") (2,"{{40,40,40},{40,40,40},{40,40,40}}") (1,"{{5,5,5},{5,5,5},{5,5,5}}") (2,"{{50,50,50},{50,50,50},{50,50,50}}") (1,"{{6,6,6},{6,6,6},{6,6,6}}") (2,"{{60,60,60},{60,60,60},{60,60,60}}") (1,"{{7,7,7},{7,7,7},{7,7,7}}") (2,"{{70,70,70},{70,70,70},{70,70,70}}") (1,"{{8,8,8},{8,8,8},{8,8,8}}") (2,"{{80,80,80},{80,80,80},{80,80,80}}") (1,"{{9,9,9},{9,9,9},{9,9,9}}") (2,"{{90,90,90},{90,90,90},{90,90,90}}") (18 rows) WITH foo AS ( SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast ), bar AS ( SELECT ST_Union(rast) AS rast FROM foo ), baz AS ( SELECT ST_Tile(rast, 3, 3, 2) AS rast FROM bar ) SELECT ST_DumpValues(rast) FROM baz; st_dumpvalues ------------------------------------------ (1,"{{10,10,10},{10,10,10},{10,10,10}}") (1,"{{20,20,20},{20,20,20},{20,20,20}}") (1,"{{30,30,30},{30,30,30},{30,30,30}}") (1,"{{40,40,40},{40,40,40},{40,40,40}}") (1,"{{50,50,50},{50,50,50},{50,50,50}}") (1,"{{60,60,60},{60,60,60},{60,60,60}}") (1,"{{70,70,70},{70,70,70},{70,70,70}}") (1,"{{80,80,80},{80,80,80},{80,80,80}}") (1,"{{90,90,90},{90,90,90},{90,90,90}}") (9 rows) See Also ST_FromGDALRaster Returns a raster from a supported GDAL raster file. raster ST_FromGDALRaster bytea gdaldata integer srid=NULL Description Returns a raster from a supported GDAL raster file. gdaldata is of type bytea and should be the contents of the GDAL raster file. If srid is NULL, the function will try to autmatically assign the SRID from the GDAL raster. If srid is provided, the value provided will override any automatically assigned SRID. Availability: 2.1.0 Examples WITH foo AS ( SELECT ST_AsPNG(ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.1, -0.1, 0, 0, 4326), 1, '8BUI', 1, 0), 2, '8BUI', 2, 0), 3, '8BUI', 3, 0)) AS png ), bar AS ( SELECT 1 AS rid, ST_FromGDALRaster(png) AS rast FROM foo UNION ALL SELECT 2 AS rid, ST_FromGDALRaster(png, 3310) AS rast FROM foo ) SELECT rid, ST_Metadata(rast) AS metadata, ST_SummaryStats(rast, 1) AS stats1, ST_SummaryStats(rast, 2) AS stats2, ST_SummaryStats(rast, 3) AS stats3 FROM bar ORDER BY rid; rid | metadata | stats1 | stats2 | stats3 -----+---------------------------+---------------+---------------+---------------- 1 | (0,0,2,2,1,-1,0,0,0,3) | (4,4,1,0,1,1) | (4,8,2,0,2,2) | (4,12,3,0,3,3) 2 | (0,0,2,2,1,-1,0,0,3310,3) | (4,4,1,0,1,1) | (4,8,2,0,2,2) | (4,12,3,0,3,3) (2 rows) See Also Raster Accessors ST_GeoReference Returns the georeference meta data in GDAL or ESRI format as commonly seen in a world file. Default is GDAL. text ST_GeoReference raster rast text format=GDAL Description Returns the georeference meta data including carriage return in GDAL or ESRI format as commonly seen in a world file. Default is GDAL if no type specified. type is string 'GDAL' or 'ESRI'. Difference between format representations is as follows: GDAL: scalex skewy skewx scaley upperleftx upperlefty ESRI: scalex skewy skewx scaley upperleftx + scalex*0.5 upperlefty + scaley*0.5 Examples SELECT ST_GeoReference(rast, 'ESRI') As esri_ref, ST_GeoReference(rast, 'GDAL') As gdal_ref FROM dummy_rast WHERE rid=1; esri_ref | gdal_ref --------------+-------------- 2.0000000000 | 2.0000000000 0.0000000000 : 0.0000000000 0.0000000000 : 0.0000000000 3.0000000000 : 3.0000000000 1.5000000000 : 0.5000000000 2.0000000000 : 0.5000000000 See Also , , ST_Height Returns the height of the raster in pixels. integer ST_Height raster rast Description Returns the height of the raster. Examples SELECT rid, ST_Height(rast) As rastheight FROM dummy_rast; rid | rastheight -----+------------ 1 | 20 2 | 5 See Also ST_IsEmpty Returns true if the raster is empty (width = 0 and height = 0). Otherwise, returns false. boolean ST_IsEmpty raster rast Description Returns true if the raster is empty (width = 0 and height = 0). Otherwise, returns false. Availability: 2.0.0 Examples SELECT ST_IsEmpty(ST_MakeEmptyRaster(100, 100, 0, 0, 0, 0, 0, 0)) st_isempty | -----------+ f | SELECT ST_IsEmpty(ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0)) st_isempty | -----------+ t | See Also ST_MetaData Returns basic meta data about a raster object such as pixel size, rotation (skew), upper, lower left, etc. record ST_MetaData raster rast Description Returns basic meta data about a raster object such as pixel size, rotation (skew), upper, lower left, etc. Columns returned: upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands Examples SELECT rid, (foo.md).* FROM (SELECT rid, ST_MetaData(rast) As md FROM dummy_rast) As foo; rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands ----+------------+------------+-------+--------+--------+-----------+-------+-------+------+------- 1 | 0.5 | 0.5 | 10 | 20 | 2 | 3 | 0 | 0 | 0 | 0 2 | 3427927.75 | 5793244 | 5 | 5 | 0.05 | -0.05 | 0 | 0 | 0 | 3 See Also , ST_NumBands Returns the number of bands in the raster object. integer ST_NumBands raster rast Description Returns the number of bands in the raster object. Examples SELECT rid, ST_NumBands(rast) As numbands FROM dummy_rast; rid | numbands ----+---------- 1 | 0 2 | 3 See Also ST_PixelHeight Returns the pixel height in geometric units of the spatial reference system. double precision ST_PixelHeight raster rast Description Returns the height of a pixel in geometric units of the spatial reference system. In the common case where there is no skew, the pixel height is just the scale ratio between geometric coordinates and raster pixels. Refer to for a diagrammatic visualization of the relationship. Examples: Rasters with no skew SELECT ST_Height(rast) As rastheight, ST_PixelHeight(rast) As pixheight, ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy FROM dummy_rast; rastheight | pixheight | scalex | scaley | skewx | skewy ------------+-----------+--------+--------+-------+---------- 20 | 3 | 2 | 3 | 0 | 0 5 | 0.05 | 0.05 | -0.05 | 0 | 0 Examples: Rasters with skew different than 0 SELECT ST_Height(rast) As rastheight, ST_PixelHeight(rast) As pixheight, ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy FROM (SELECT ST_SetSKew(rast,0.5,0.5) As rast FROM dummy_rast) As skewed; rastheight | pixheight | scalex | scaley | skewx | skewy -----------+-------------------+--------+--------+-------+---------- 20 | 3.04138126514911 | 2 | 3 | 0.5 | 0.5 5 | 0.502493781056044 | 0.05 | -0.05 | 0.5 | 0.5 See Also , , , , ST_PixelWidth Returns the pixel width in geometric units of the spatial reference system. double precision ST_PixelWidth raster rast Description Returns the width of a pixel in geometric units of the spatial reference system. In the common case where there is no skew, the pixel width is just the scale ratio between geometric coordinates and raster pixels. The following diagram demonstrates the relationship: Examples: Rasters with no skew SELECT ST_Width(rast) As rastwidth, ST_PixelWidth(rast) As pixwidth, ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy FROM dummy_rast; rastwidth | pixwidth | scalex | scaley | skewx | skewy -----------+----------+--------+--------+-------+---------- 10 | 2 | 2 | 3 | 0 | 0 5 | 0.05 | 0.05 | -0.05 | 0 | 0 Examples: Rasters with skew different than 0 SELECT ST_Width(rast) As rastwidth, ST_PixelWidth(rast) As pixwidth, ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy FROM (SELECT ST_SetSkew(rast,0.5,0.5) As rast FROM dummy_rast) As skewed; rastwidth | pixwidth | scalex | scaley | skewx | skewy -----------+-------------------+--------+--------+-------+---------- 10 | 2.06155281280883 | 2 | 3 | 0.5 | 0.5 5 | 0.502493781056044 | 0.05 | -0.05 | 0.5 | 0.5 See Also , , , , ST_ScaleX Returns the X component of the pixel width in units of coordinate reference system. float8 ST_ScaleX raster rast Description Returns the X component of the pixel width in units of coordinate reference system. Refer to World File for more details. Changed: 2.0.0. In WKTRaster versions this was called ST_PixelSizeX. Examples SELECT rid, ST_ScaleX(rast) As rastpixwidth FROM dummy_rast; rid | rastpixwidth -----+-------------- 1 | 2 2 | 0.05 See Also ST_ScaleY Returns the Y component of the pixel height in units of coordinate reference system. float8 ST_ScaleY raster rast Description Returns the Y component of the pixel height in units of coordinate reference system. May be negative. Refer to World File for more details. Changed: 2.0.0. In WKTRaster versions this was called ST_PixelSizeY. Examples SELECT rid, ST_ScaleY(rast) As rastpixheight FROM dummy_rast; rid | rastpixheight -----+--------------- 1 | 3 2 | -0.05 See Also ST_RasterToWorldCoord Returns the raster's upper left corner as geometric X and Y (longitude and latitude) given a column and row. Column and row starts at 1. record ST_RasterToWorldCoord raster rast integer xcolumn integer yrow Description Returns the upper left corner as geometric X and Y (longitude and latitude) given a column and row. Returned X and Y are in geometric units of the georeferenced raster. Numbering of column and row starts at 1 but if either parameter is passed a zero, a negative number or a number greater than the respective dimension of the raster, it will return coordinates outside of the raster assuming the raster's grid is applicable outside the raster's bounds. Availability: 2.1.0 Examples -- non-skewed raster SELECT rid, (ST_RasterToWorldCoord(rast,1, 1)).*, (ST_RasterToWorldCoord(rast,2, 2)).* FROM dummy_rast rid | longitude | latitude | longitude | latitude -----+------------+----------+-----------+------------ 1 | 0.5 | 0.5 | 2.5 | 3.5 2 | 3427927.75 | 5793244 | 3427927.8 | 5793243.95 -- skewed raster SELECT rid, (ST_RasterToWorldCoord(rast, 1, 1)).*, (ST_RasterToWorldCoord(rast, 2, 3)).* FROM ( SELECT rid, ST_SetSkew(rast, 100.5, 0) As rast FROM dummy_rast ) As foo rid | longitude | latitude | longitude | latitude -----+------------+----------+-----------+----------- 1 | 0.5 | 0.5 | 203.5 | 6.5 2 | 3427927.75 | 5793244 | 3428128.8 | 5793243.9 See Also , , ST_RasterToWorldCoordX Returns the geometric X coordinate upper left of a raster, column and row. Numbering of columns and rows starts at 1. float8 ST_RasterToWorldCoordX raster rast integer xcolumn float8 ST_RasterToWorldCoordX raster rast integer xcolumn integer yrow Description Returns the upper left X coordinate of a raster column row in geometric units of the georeferenced raster. Numbering of columns and rows starts at 1 but if you pass in a negative number or number higher than number of columns in raster, it will give you coordinates outside of the raster file to left or right with the assumption that the skew and pixel sizes are same as selected raster. For non-skewed rasters, providing the X column is sufficient. For skewed rasters, the georeferenced coordinate is a function of the ST_ScaleX and ST_SkewX and row and column. An error will be raised if you give just the X column for a skewed raster. Changed: 2.1.0 In prior versions, this was called ST_Raster2WorldCoordX Examples -- non-skewed raster providing column is sufficient SELECT rid, ST_RasterToWorldCoordX(rast,1) As x1coord, ST_RasterToWorldCoordX(rast,2) As x2coord, ST_ScaleX(rast) As pixelx FROM dummy_rast; rid | x1coord | x2coord | pixelx -----+------------+-----------+-------- 1 | 0.5 | 2.5 | 2 2 | 3427927.75 | 3427927.8 | 0.05 -- for fun lets skew it SELECT rid, ST_RasterToWorldCoordX(rast, 1, 1) As x1coord, ST_RasterToWorldCoordX(rast, 2, 3) As x2coord, ST_ScaleX(rast) As pixelx FROM (SELECT rid, ST_SetSkew(rast, 100.5, 0) As rast FROM dummy_rast) As foo; rid | x1coord | x2coord | pixelx -----+------------+-----------+-------- 1 | 0.5 | 203.5 | 2 2 | 3427927.75 | 3428128.8 | 0.05 See Also , , , ST_RasterToWorldCoordY Returns the geometric Y coordinate upper left corner of a raster, column and row. Numbering of columns and rows starts at 1. float8 ST_RasterToWorldCoordY raster rast integer yrow float8 ST_RasterToWorldCoordY raster rast integer xcolumn integer yrow Description Returns the upper left Y coordinate of a raster column row in geometric units of the georeferenced raster. Numbering of columns and rows starts at 1 but if you pass in a negative number or number higher than number of columns/rows in raster, it will give you coordinates outside of the raster file to left or right with the assumption that the skew and pixel sizes are same as selected raster tile. For non-skewed rasters, providing the Y column is sufficient. For skewed rasters, the georeferenced coordinate is a function of the ST_ScaleY and ST_SkewY and row and column. An error will be raised if you give just the Y row for a skewed raster. Changed: 2.1.0 In prior versions, this was called ST_Raster2WorldCoordY Examples -- non-skewed raster providing row is sufficient SELECT rid, ST_RasterToWorldCoordY(rast,1) As y1coord, ST_RasterToWorldCoordY(rast,3) As y2coord, ST_ScaleY(rast) As pixely FROM dummy_rast; rid | y1coord | y2coord | pixely -----+---------+-----------+-------- 1 | 0.5 | 6.5 | 3 2 | 5793244 | 5793243.9 | -0.05 -- for fun lets skew it SELECT rid, ST_RasterToWorldCoordY(rast,1,1) As y1coord, ST_RasterToWorldCoordY(rast,2,3) As y2coord, ST_ScaleY(rast) As pixely FROM (SELECT rid, ST_SetSkew(rast,0,100.5) As rast FROM dummy_rast) As foo; rid | y1coord | y2coord | pixely -----+---------+-----------+-------- 1 | 0.5 | 107 | 3 2 | 5793244 | 5793344.4 | -0.05 See Also , , , ST_Rotation Returns the rotation of the raster in radian. float8 ST_Rotation raster rast Description Returns the uniform rotation of the raster in radian. If a raster does not have uniform rotation, NaN is returned. Refer to World File for more details. Examples SELECT rid, ST_Rotation(ST_SetScale(ST_SetSkew(rast, sqrt(2)), sqrt(2))) as rot FROM dummy_rast; rid | rot -----+------------------- 1 | 0.785398163397448 2 | 0.785398163397448 See Also , , ST_SkewX Returns the georeference X skew (or rotation parameter). float8 ST_SkewX raster rast Description Returns the georeference X skew (or rotation parameter). Refer to World File for more details. Examples SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy, ST_GeoReference(rast) as georef FROM dummy_rast; rid | skewx | skewy | georef -----+-------+-------+-------------------- 1 | 0 | 0 | 2.0000000000 : 0.0000000000 : 0.0000000000 : 3.0000000000 : 0.5000000000 : 0.5000000000 : 2 | 0 | 0 | 0.0500000000 : 0.0000000000 : 0.0000000000 : -0.0500000000 : 3427927.7500000000 : 5793244.0000000000 See Also , , ST_SkewY Returns the georeference Y skew (or rotation parameter). float8 ST_SkewY raster rast Description Returns the georeference Y skew (or rotation parameter). Refer to World File for more details. Examples SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy, ST_GeoReference(rast) as georef FROM dummy_rast; rid | skewx | skewy | georef -----+-------+-------+-------------------- 1 | 0 | 0 | 2.0000000000 : 0.0000000000 : 0.0000000000 : 3.0000000000 : 0.5000000000 : 0.5000000000 : 2 | 0 | 0 | 0.0500000000 : 0.0000000000 : 0.0000000000 : -0.0500000000 : 3427927.7500000000 : 5793244.0000000000 See Also , , ST_SRID Returns the spatial reference identifier of the raster as defined in spatial_ref_sys table. integer ST_SRID raster rast Description Returns the spatial reference identifier of the raster object as defined in the spatial_ref_sys table. From PostGIS 2.0+ the srid of a non-georeferenced raster/geometry is 0 instead of the prior -1. Examples SELECT ST_SRID(rast) As srid FROM dummy_rast WHERE rid=1; srid ---------------- 0 See Also , ST_Summary Returns a text summary of the contents of the raster. text ST_Summary raster rast Description Returns a text summary of the contents of the raster. Availability: 2.1.0 Examples SELECT ST_Summary( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 1, 0 ) , 2, '32BF', 0, -9999 ) , 3, '16BSI', 0, NULL ) ); st_summary ------------------------------------------------------------------ Raster of 10x10 pixels has 3 bands and extent of BOX(0 -10,10 0)+ band 1 of pixtype 8BUI is in-db with NODATA value of 0 + band 2 of pixtype 32BF is in-db with NODATA value of -9999 + band 3 of pixtype 16BSI is in-db with no NODATA value (1 row) See Also , , ST_UpperLeftX Returns the upper left X coordinate of raster in projected spatial ref. float8 ST_UpperLeftX raster rast Description Returns the upper left X coordinate of raster in projected spatial ref. Examples SELECt rid, ST_UpperLeftX(rast) As ulx FROM dummy_rast; rid | ulx -----+------------ 1 | 0.5 2 | 3427927.75 See Also , , ST_UpperLeftY Returns the upper left Y coordinate of raster in projected spatial ref. float8 ST_UpperLeftY raster rast Description Returns the upper left Y coordinate of raster in projected spatial ref. Examples SELECT rid, ST_UpperLeftY(rast) As uly FROM dummy_rast; rid | uly -----+--------- 1 | 0.5 2 | 5793244 See Also , , ST_Width Returns the width of the raster in pixels. integer ST_Width raster rast Description Returns the width of the raster in pixels. Examples SELECT ST_Width(rast) As rastwidth FROM dummy_rast WHERE rid=1; rastwidth ---------------- 10 See Also ST_WorldToRasterCoord Returns the upper left corner as column and row given geometric X and Y (longitude and latitude) or a point geometry expressed in the spatial reference coordinate system of the raster. record ST_WorldToRasterCoord raster rast geometry pt record ST_WorldToRasterCoord raster rast double precision longitude double precision latitude Description Returns the upper left corner as column and row given geometric X and Y (longitude and latitude) or a point geometry. This function works regardless of whether or not the geometric X and Y or point geometry is outside the extent of the raster. Geometric X and Y must be expressed in the spatial reference coordinate system of the raster. Availability: 2.1.0 Examples SELECT rid, (ST_WorldToRasterCoord(rast,3427927.8,20.5)).*, (ST_WorldToRasterCoord(rast,ST_GeomFromText('POINT(3427927.8 20.5)',ST_SRID(rast)))).* FROM dummy_rast; rid | columnx | rowy | columnx | rowy -----+---------+-----------+---------+----------- 1 | 1713964 | 7 | 1713964 | 7 2 | 2 | 115864471 | 2 | 115864471 See Also , , , , ST_WorldToRasterCoordX Returns the column in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster. integer ST_WorldToRasterCoordX raster rast geometry pt integer ST_WorldToRasterCoordX raster rast double precision xw integer ST_WorldToRasterCoordX raster rast double precision xw double precision yw Description Returns the column in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw). A point, or (both xw and yw world coordinates are required if a raster is skewed). If a raster is not skewed then xw is sufficient. World coordinates are in the spatial reference coordinate system of the raster. Changed: 2.1.0 In prior versions, this was called ST_World2RasterCoordX Examples SELECT rid, ST_WorldToRasterCoordX(rast,3427927.8) As xcoord, ST_WorldToRasterCoordX(rast,3427927.8,20.5) As xcoord_xwyw, ST_WorldToRasterCoordX(rast,ST_GeomFromText('POINT(3427927.8 20.5)',ST_SRID(rast))) As ptxcoord FROM dummy_rast; rid | xcoord | xcoord_xwyw | ptxcoord -----+---------+---------+---------- 1 | 1713964 | 1713964 | 1713964 2 | 1 | 1 | 1 See Also , , ST_WorldToRasterCoordY Returns the row in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in world spatial reference system of raster. integer ST_WorldToRasterCoordY raster rast geometry pt integer ST_WorldToRasterCoordY raster rast double precision xw integer ST_WorldToRasterCoordY raster rast double precision xw double precision yw Description Returns the row in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw). A point, or (both xw and yw world coordinates are required if a raster is skewed). If a raster is not skewed then xw is sufficient. World coordinates are in the spatial reference coordinate system of the raster. Changed: 2.1.0 In prior versions, this was called ST_World2RasterCoordY Examples SELECT rid, ST_WorldToRasterCoordY(rast,20.5) As ycoord, ST_WorldToRasterCoordY(rast,3427927.8,20.5) As ycoord_xwyw, ST_WorldToRasterCoordY(rast,ST_GeomFromText('POINT(3427927.8 20.5)',ST_SRID(rast))) As ptycoord FROM dummy_rast; rid | ycoord | ycoord_xwyw | ptycoord -----+-----------+-------------+----------- 1 | 7 | 7 | 7 2 | 115864471 | 115864471 | 115864471 See Also , , Raster Band Accessors ST_BandMetaData Returns basic meta data for a specific raster band. band num 1 is assumed if none-specified. record ST_BandMetaData raster rast integer bandnum=1 Description Returns basic meta data about a raster band. Columns returned pixeltype | nodatavalue | isoutdb | path. If raster contains no bands then an error is thrown. If band has no NODATA value, nodatavalue will be NULL. Examples SELECT rid, (foo.md).* FROM (SELECT rid, ST_BandMetaData(rast,1) As md FROM dummy_rast WHERE rid=2) As foo; rid | pixeltype | nodatavalue | isoutdb | path -----+-----------+----------------+-------------+---------+------ 2 | 8BUI | 0 | f | See Also , ST_BandNoDataValue Returns the value in a given band that represents no data. If no band num 1 is assumed. double precision ST_BandNoDataValue raster rast integer bandnum=1 Description Returns the value that represents no data for the band Examples SELECT ST_BandNoDataValue(rast,1) As bnval1, ST_BandNoDataValue(rast,2) As bnval2, ST_BandNoDataValue(rast,3) As bnval3 FROM dummy_rast WHERE rid = 2; bnval1 | bnval2 | bnval3 --------+--------+-------- 0 | 0 | 0 See Also ST_BandIsNoData Returns true if the band is filled with only nodata values. boolean ST_BandIsNoData raster rast integer band boolean forceChecking=true boolean ST_BandIsNoData raster rast boolean forceChecking=true Description Returns true if the band is filled with only nodata values. Band 1 is assumed if not specified. If the last argument is TRUE, the entire band is checked pixel by pixel. Otherwise, the function simply returns the value of the isnodata flag for the band. The default value for this parameter is FALSE, if not specified. Availability: 2.0.0 If the flag is dirty (this is, the result is different using TRUE as last parameter and not using it) you should update the raster to set this flag to true, by using ST_SetBandIsNodata(), or ST_SetBandNodataValue() with TRUE as last argument. See . Examples -- Create dummy table with one raster column create table dummy_rast (rid integer, rast raster); -- Add raster with two bands, one pixel/band. In the first band, nodatavalue = pixel value = 3. -- In the second band, nodatavalue = 13, pixel value = 4 insert into dummy_rast values(1, ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '6' -- hasnodatavalue and isnodata value set to true. || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); select st_bandisnodata(rast, 1) from dummy_rast where rid = 1; -- Expected true select st_bandisnodata(rast, 2) from dummy_rast where rid = 1; -- Expected false See Also , , , ST_BandPath Returns system file path to a band stored in file system. If no bandnum specified, 1 is assumed. text ST_BandPath raster rast integer bandnum=1 Description Returns system file path to a band. Throws an error if called with an in db band. Examples See Also ST_BandPixelType Returns the type of pixel for given band. If no bandnum specified, 1 is assumed. text ST_BandPixelType raster rast integer bandnum=1 Description Returns the value that represents no data for the band There are 11 pixel types. Pixel Types supported are as follows: 1BB - 1-bit boolean 2BUI - 2-bit unsigned integer 4BUI - 4-bit unsigned integer 8BSI - 8-bit signed integer 8BUI - 8-bit unsigned integer 16BSI - 16-bit signed integer 16BUI - 16-bit unsigned integer 32BSI - 32-bit signed integer 32BUI - 32-bit unsigned integer 32BF - 32-bit float 64BF - 64-bit float Examples SELECT ST_BandPixelType(rast,1) As btype1, ST_BandPixelType(rast,2) As btype2, ST_BandPixelType(rast,3) As btype3 FROM dummy_rast WHERE rid = 2; btype1 | btype2 | btype3 --------+--------+-------- 8BUI | 8BUI | 8BUI See Also ST_HasNoBand Returns true if there is no band with given band number. If no band number is specified, then band number 1 is assumed. boolean ST_HasNoBand raster rast integer bandnum=1 Description Returns true if there is no band with given band number. If no band number is specified, then band number 1 is assumed. Availability: 2.0.0 Examples SELECT rid, ST_HasNoBand(rast) As hb1, ST_HasNoBand(rast,2) as hb2, ST_HasNoBand(rast,4) as hb4, ST_NumBands(rast) As numbands FROM dummy_rast; rid | hb1 | hb2 | hb4 | numbands -----+-----+-----+-----+---------- 1 | t | t | t | 0 2 | f | f | t | 3 See Also Raster Pixel Accessors and Setters ST_PixelAsPolygon Returns the polygon geometry that bounds the pixel for a particular row and column. geometry ST_PixelAsPolygon raster rast integer columnx integer rowy Description Returns the polygon geometry that bounds the pixel for a particular row and column. Availability: 2.0.0 Examples -- get raster pixel polygon SELECT i,j, ST_AsText(ST_PixelAsPolygon(foo.rast, i,j)) As b1pgeom FROM dummy_rast As foo CROSS JOIN generate_series(1,2) As i CROSS JOIN generate_series(1,1) As j WHERE rid=2; i | j | b1pgeom ---+---+----------------------------------------------------------------------------- 1 | 1 | POLYGON((3427927.75 5793244,3427927.8 5793244,3427927.8 5793243.95,... 2 | 1 | POLYGON((3427927.8 5793244,3427927.85 5793244,3427927.85 5793243.95, .. See Also , , , , , , , ST_PixelAsPolygons Returns the polygon geometry that bounds every pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel. setof record ST_PixelAsPolygons raster rast integer band=1 boolean exclude_nodata_value=TRUE Description Returns the polygon geometry that bounds every pixel of a raster band along with the value (double precision), the X and the Y raster coordinates (integers) of each pixel. ST_PixelAsPolygons returns one polygon geometry for every pixel. This is different than ST_DumpAsPolygons where each geometry represents one or more pixels with the same pixel value. When exclude_nodata_value = TRUE, only those pixels whose values are not NODATA are returned as polygons. Availability: 2.0.0 Enhanced: 2.1.0 exclude_nodata_value optional argument was added. Changed: 2.1.1 Changed behavior of exclude_nodata_value. Examples -- get raster pixel polygon SELECT (gv).x, (gv).y, (gv).val, ST_AsText((gv).geom) geom FROM (SELECT ST_PixelAsPolygons( ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.001, -0.001, 0.001, 0.001, 4269), '8BUI'::text, 1, 0), 2, 2, 10), 1, 1, NULL) ) gv ) foo; x | y | val | geom ---+---+----------------------------------------------------------------------------- 1 | 1 | | POLYGON((0 0,0.001 0.001,0.002 0,0.001 -0.001,0 0)) 1 | 2 | 1 | POLYGON((0.001 -0.001,0.002 0,0.003 -0.001,0.002 -0.002,0.001 -0.001)) 2 | 1 | 1 | POLYGON((0.001 0.001,0.002 0.002,0.003 0.001,0.002 0,0.001 0.001)) 2 | 2 | 10 | POLYGON((0.002 0,0.003 0.001,0.004 0,0.003 -0.001,0.002 0)) See Also , , , , , , ST_PixelAsPoint Returns a point geometry of the pixel's upper-left corner. geometry ST_PixelAsPoint raster rast integer columnx integer rowy Description Returns a point geometry of the pixel's upper-left corner. Availability: 2.1.0 Examples SELECT ST_AsText(ST_PixelAsPoint(rast, 1, 1)) FROM dummy_rast WHERE rid = 1; st_astext ---------------- POINT(0.5 0.5) See Also , , , , , ST_PixelAsPoints Returns a point geometry for each pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel. The coordinates of the point geometry are of the pixel's upper-left corner. geometry ST_PixelAsPoints raster rast integer band=1 boolean exclude_nodata_value=TRUE Description Returns a point geometry for each pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel. The coordinates of the point geometry are of the pixel's upper-left corner. When exclude_nodata_value = TRUE, only those pixels whose values are not NODATA are returned as points. Availability: 2.1.0 Changed: 2.1.1 Changed behavior of exclude_nodata_value. Examples SELECT x, y, val, ST_AsText(geom) FROM (SELECT (ST_PixelAsPoints(rast, 1)).* FROM dummy_rast WHERE rid = 2) foo; x | y | val | st_astext ---+---+-----+------------------------------ 1 | 1 | 253 | POINT(3427927.75 5793244) 2 | 1 | 254 | POINT(3427927.8 5793244) 3 | 1 | 253 | POINT(3427927.85 5793244) 4 | 1 | 254 | POINT(3427927.9 5793244) 5 | 1 | 254 | POINT(3427927.95 5793244) 1 | 2 | 253 | POINT(3427927.75 5793243.95) 2 | 2 | 254 | POINT(3427927.8 5793243.95) 3 | 2 | 254 | POINT(3427927.85 5793243.95) 4 | 2 | 253 | POINT(3427927.9 5793243.95) 5 | 2 | 249 | POINT(3427927.95 5793243.95) 1 | 3 | 250 | POINT(3427927.75 5793243.9) 2 | 3 | 254 | POINT(3427927.8 5793243.9) 3 | 3 | 254 | POINT(3427927.85 5793243.9) 4 | 3 | 252 | POINT(3427927.9 5793243.9) 5 | 3 | 249 | POINT(3427927.95 5793243.9) 1 | 4 | 251 | POINT(3427927.75 5793243.85) 2 | 4 | 253 | POINT(3427927.8 5793243.85) 3 | 4 | 254 | POINT(3427927.85 5793243.85) 4 | 4 | 254 | POINT(3427927.9 5793243.85) 5 | 4 | 253 | POINT(3427927.95 5793243.85) 1 | 5 | 252 | POINT(3427927.75 5793243.8) 2 | 5 | 250 | POINT(3427927.8 5793243.8) 3 | 5 | 254 | POINT(3427927.85 5793243.8) 4 | 5 | 254 | POINT(3427927.9 5793243.8) 5 | 5 | 254 | POINT(3427927.95 5793243.8) See Also , , , , , ST_PixelAsCentroid Returns the centroid (point geometry) of the area represented by a pixel. geometry ST_PixelAsCentroid raster rast integer columnx integer rowy Description Returns the centroid (point geometry) of the area represented by a pixel. Availability: 2.1.0 Examples SELECT ST_AsText(ST_PixelAsCentroid(rast, 1, 1)) FROM dummy_rast WHERE rid = 1; st_astext -------------- POINT(1.5 2) See Also , , , , , ST_PixelAsCentroids Returns the centroid (point geometry) for each pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel. The point geometry is the centroid of the area represented by a pixel. geometry ST_PixelAsCentroids raster rast integer band=1 boolean exclude_nodata_value=TRUE Description Returns the centroid (point geometry) for each pixel of a raster band along with the value, the X and the Y raster coordinates of each pixel. The point geometry is the centroid of the area represented by a pixel. When exclude_nodata_value = TRUE, only those pixels whose values are not NODATA are returned as points. Availability: 2.1.0 Changed: 2.1.1 Changed behavior of exclude_nodata_value. Examples SELECT x, y, val, ST_AsText(geom) FROM (SELECT (ST_PixelAsCentroids(rast, 1)).* FROM dummy_rast WHERE rid = 2) foo; x | y | val | st_astext ---+---+-----+-------------------------------- 1 | 1 | 253 | POINT(3427927.775 5793243.975) 2 | 1 | 254 | POINT(3427927.825 5793243.975) 3 | 1 | 253 | POINT(3427927.875 5793243.975) 4 | 1 | 254 | POINT(3427927.925 5793243.975) 5 | 1 | 254 | POINT(3427927.975 5793243.975) 1 | 2 | 253 | POINT(3427927.775 5793243.925) 2 | 2 | 254 | POINT(3427927.825 5793243.925) 3 | 2 | 254 | POINT(3427927.875 5793243.925) 4 | 2 | 253 | POINT(3427927.925 5793243.925) 5 | 2 | 249 | POINT(3427927.975 5793243.925) 1 | 3 | 250 | POINT(3427927.775 5793243.875) 2 | 3 | 254 | POINT(3427927.825 5793243.875) 3 | 3 | 254 | POINT(3427927.875 5793243.875) 4 | 3 | 252 | POINT(3427927.925 5793243.875) 5 | 3 | 249 | POINT(3427927.975 5793243.875) 1 | 4 | 251 | POINT(3427927.775 5793243.825) 2 | 4 | 253 | POINT(3427927.825 5793243.825) 3 | 4 | 254 | POINT(3427927.875 5793243.825) 4 | 4 | 254 | POINT(3427927.925 5793243.825) 5 | 4 | 253 | POINT(3427927.975 5793243.825) 1 | 5 | 252 | POINT(3427927.775 5793243.775) 2 | 5 | 250 | POINT(3427927.825 5793243.775) 3 | 5 | 254 | POINT(3427927.875 5793243.775) 4 | 5 | 254 | POINT(3427927.925 5793243.775) 5 | 5 | 254 | POINT(3427927.975 5793243.775) See Also , , , , , ST_Value Returns the value of a given band in a given columnx, rowy pixel or at a particular geometric point. Band numbers start at 1 and assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and return value. If exclude_nodata_value is not passed in then reads it from metadata of raster. double precision ST_Value raster rast geometry pt boolean exclude_nodata_value=true double precision ST_Value raster rast integer bandnum geometry pt boolean exclude_nodata_value=true double precision ST_Value raster rast integer columnx integer rowy boolean exclude_nodata_value=true double precision ST_Value raster rast integer bandnum integer columnx integer rowy boolean exclude_nodata_value=true Description Returns the value of a given band in a given columnx, rowy pixel or at a given geometry point. Band numbers start at 1 and band is assumed to be 1 if not specified. If exclude_nodata_value is set to true, then only non nodata pixels are considered. If exclude_nodata_value is set to false, then all pixels are considered. Enhanced: 2.0.0 exclude_nodata_value optional argument was added. Examples -- get raster values at particular postgis geometry points -- the srid of your geometry should be same as for your raster SELECT rid, ST_Value(rast, foo.pt_geom) As b1pval, ST_Value(rast, 2, foo.pt_geom) As b2pval FROM dummy_rast CROSS JOIN (SELECT ST_SetSRID(ST_Point(3427927.77, 5793243.76), 0) As pt_geom) As foo WHERE rid=2; rid | b1pval | b2pval -----+--------+-------- 2 | 252 | 79 -- general fictitious example using a real table SELECT rid, ST_Value(rast, 3, sometable.geom) As b3pval FROM sometable WHERE ST_Intersects(rast,sometable.geom); SELECT rid, ST_Value(rast, 1, 1, 1) As b1pval, ST_Value(rast, 2, 1, 1) As b2pval, ST_Value(rast, 3, 1, 1) As b3pval FROM dummy_rast WHERE rid=2; rid | b1pval | b2pval | b3pval -----+--------+--------+-------- 2 | 253 | 78 | 70 --- Get all values in bands 1,2,3 of each pixel -- SELECT x, y, ST_Value(rast, 1, x, y) As b1val, ST_Value(rast, 2, x, y) As b2val, ST_Value(rast, 3, x, y) As b3val FROM dummy_rast CROSS JOIN generate_series(1, 1000) As x CROSS JOIN generate_series(1, 1000) As y WHERE rid = 2 AND x <= ST_Width(rast) AND y <= ST_Height(rast); x | y | b1val | b2val | b3val ---+---+-------+-------+------- 1 | 1 | 253 | 78 | 70 1 | 2 | 253 | 96 | 80 1 | 3 | 250 | 99 | 90 1 | 4 | 251 | 89 | 77 1 | 5 | 252 | 79 | 62 2 | 1 | 254 | 98 | 86 2 | 2 | 254 | 118 | 108 : : --- Get all values in bands 1,2,3 of each pixel same as above but returning the upper left point point of each pixel -- SELECT ST_AsText(ST_SetSRID( ST_Point(ST_UpperLeftX(rast) + ST_ScaleX(rast)*x, ST_UpperLeftY(rast) + ST_ScaleY(rast)*y), ST_SRID(rast))) As uplpt , ST_Value(rast, 1, x, y) As b1val, ST_Value(rast, 2, x, y) As b2val, ST_Value(rast, 3, x, y) As b3val FROM dummy_rast CROSS JOIN generate_series(1,1000) As x CROSS JOIN generate_series(1,1000) As y WHERE rid = 2 AND x <= ST_Width(rast) AND y <= ST_Height(rast); uplpt | b1val | b2val | b3val -----------------------------+-------+-------+------- POINT(3427929.25 5793245.5) | 253 | 78 | 70 POINT(3427929.25 5793247) | 253 | 96 | 80 POINT(3427929.25 5793248.5) | 250 | 99 | 90 : --- Get a polygon formed by union of all pixels that fall in a particular value range and intersect particular polygon -- SELECT ST_AsText(ST_Union(pixpolyg)) As shadow FROM (SELECT ST_Translate(ST_MakeEnvelope( ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_UpperLeftX(rast) + ST_ScaleX(rast), ST_UpperLeftY(rast) + ST_ScaleY(rast), 0 ), ST_ScaleX(rast)*x, ST_ScaleY(rast)*y ) As pixpolyg, ST_Value(rast, 2, x, y) As b2val FROM dummy_rast CROSS JOIN generate_series(1,1000) As x CROSS JOIN generate_series(1,1000) As y WHERE rid = 2 AND x <= ST_Width(rast) AND y <= ST_Height(rast)) As foo WHERE ST_Intersects( pixpolyg, ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0) ) AND b2val != 254; shadow ------------------------------------------------------------------------------------ MULTIPOLYGON(((3427928 5793243.9,3427928 5793243.85,3427927.95 5793243.85,3427927.95 5793243.9, 3427927.95 5793243.95,3427928 5793243.95,3427928.05 5793243.95,3427928.05 5793243.9,3427928 5793243.9)),((3427927.95 5793243.9,3427927.95 579324 3.85,3427927.9 5793243.85,3427927.85 5793243.85,3427927.85 5793243.9,3427927.9 5793243.9,3427927.9 5793243.95, 3427927.95 5793243.95,3427927.95 5793243.9)),((3427927.85 5793243.75,3427927.85 5793243.7,3427927.8 5793243.7,3427927.8 5793243.75 ,3427927.8 5793243.8,3427927.8 5793243.85,3427927.85 5793243.85,3427927.85 5793243.8,3427927.85 5793243.75)), ((3427928.05 5793243.75,3427928.05 5793243.7,3427928 5793243.7,3427927.95 5793243.7,3427927.95 5793243.75,3427927.95 5793243.8,3427 927.95 5793243.85,3427928 5793243.85,3427928 5793243.8,3427928.05 5793243.8, 3427928.05 5793243.75)),((3427927.95 5793243.75,3427927.95 5793243.7,3427927.9 5793243.7,3427927.85 5793243.7, 3427927.85 5793243.75,3427927.85 5793243.8,3427927.85 5793243.85,3427927.9 5793243.85, 3427927.95 5793243.85,3427927.95 5793243.8,3427927.95 5793243.75))) --- Checking all the pixels of a large raster tile can take a long time. --- You can dramatically improve speed at some lose of precision by orders of magnitude -- by sampling pixels using the step optional parameter of generate_series. -- This next example does the same as previous but by checking 1 for every 4 (2x2) pixels and putting in the last checked -- putting in the checked pixel as the value for subsequent 4 SELECT ST_AsText(ST_Union(pixpolyg)) As shadow FROM (SELECT ST_Translate(ST_MakeEnvelope( ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_UpperLeftX(rast) + ST_ScaleX(rast)*2, ST_UpperLeftY(rast) + ST_ScaleY(rast)*2, 0 ), ST_ScaleX(rast)*x, ST_ScaleY(rast)*y ) As pixpolyg, ST_Value(rast, 2, x, y) As b2val FROM dummy_rast CROSS JOIN generate_series(1,1000,2) As x CROSS JOIN generate_series(1,1000,2) As y WHERE rid = 2 AND x <= ST_Width(rast) AND y <= ST_Height(rast) ) As foo WHERE ST_Intersects( pixpolyg, ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0) ) AND b2val != 254; shadow ------------------------------------------------------------------------------------ MULTIPOLYGON(((3427927.9 5793243.85,3427927.8 5793243.85,3427927.8 5793243.95, 3427927.9 5793243.95,3427928 5793243.95,3427928.1 5793243.95,3427928.1 5793243.85,3427928 5793243.85,3427927.9 5793243.85)), ((3427927.9 5793243.65,3427927.8 5793243.65,3427927.8 5793243.75,3427927.8 5793243.85,3427927.9 5793243.85, 3427928 5793243.85,3427928 5793243.75,3427928.1 5793243.75,3427928.1 5793243.65,3427928 5793243.65,3427927.9 5793243.65))) See Also , , , , , , , , , , , , , , ST_NearestValue Returns the nearest non-NODATA value of a given band's pixel specified by a columnx and rowy or a geometric point expressed in the same spatial reference coordinate system as the raster. double precision ST_NearestValue raster rast integer bandnum geometry pt boolean exclude_nodata_value=true double precision ST_NearestValue raster rast geometry pt boolean exclude_nodata_value=true double precision ST_NearestValue raster rast integer bandnum integer columnx integer rowy boolean exclude_nodata_value=true double precision ST_NearestValue raster rast integer columnx integer rowy boolean exclude_nodata_value=true Description Returns the nearest non-NODATA value of a given band in a given columnx, rowy pixel or at a specific geometric point. If the columnx, rowy pixel or the pixel at the specified geometric point is NODATA, the function will find the nearest pixel to the columnx, rowy pixel or geometric point whose value is not NODATA. Band numbers start at 1 and bandnum is assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and return value. If exclude_nodata_value is not passed in then reads it from metadata of raster. Availability: 2.1.0 ST_NearestValue is a drop-in replacement for ST_Value. Examples -- pixel 2x2 has value SELECT ST_Value(rast, 2, 2) AS value, ST_NearestValue(rast, 2, 2) AS nearestvalue FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0), '8BUI'::text, 1, 0 ), 1, 1, 0. ), 2, 3, 0. ), 3, 5, 0. ), 4, 2, 0. ), 5, 4, 0. ) AS rast ) AS foo value | nearestvalue -------+-------------- 1 | 1 -- pixel 2x3 is NODATA SELECT ST_Value(rast, 2, 3) AS value, ST_NearestValue(rast, 2, 3) AS nearestvalue FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0), '8BUI'::text, 1, 0 ), 1, 1, 0. ), 2, 3, 0. ), 3, 5, 0. ), 4, 2, 0. ), 5, 4, 0. ) AS rast ) AS foo value | nearestvalue -------+-------------- | 1 See Also , ST_Neighborhood Returns a 2-D double precision array of the non-NODATA values around a given band's pixel specified by either a columnX and rowY or a geometric point expressed in the same spatial reference coordinate system as the raster. double precision[][] ST_Neighborhood raster rast integer bandnum integer columnX integer rowY integer distanceX integer distanceY boolean exclude_nodata_value=true double precision[][] ST_Neighborhood raster rast integer columnX integer rowY integer distanceX integer distanceY boolean exclude_nodata_value=true double precision[][] ST_Neighborhood raster rast integer bandnum geometry pt integer distanceX integer distanceY boolean exclude_nodata_value=true double precision[][] ST_Neighborhood raster rast geometry pt integer distanceX integer distanceY boolean exclude_nodata_value=true Description Returns a 2-D double precision array of the non-NODATA values around a given band's pixel specified by either a columnX and rowY or a geometric point expressed in the same spatial reference coordinate system as the raster. The distanceX and distanceY parameters define the number of pixels around the specified pixel in the X and Y axes, e.g. I want all values within 3 pixel distance along the X axis and 2 pixel distance along the Y axis around my pixel of interest. The center value of the 2-D array will be the value at the pixel specified by the columnX and rowY or the geometric point. Band numbers start at 1 and bandnum is assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and return value. If exclude_nodata_value is not passed in then reads it from metadata of raster. The number of elements along each axis of the returning 2-D array is 2 * (distanceX|distanceY) + 1. So for a distanceX and distanceY of 1, the returning array will be 3x3. The 2-D array output can be passed to any of the raster processing builtin functions, e.g. ST_Min4ma, ST_Sum4ma, ST_Mean4ma. Availability: 2.1.0 Examples -- pixel 2x2 has value SELECT ST_Neighborhood(rast, 2, 2, 1, 1) FROM ( SELECT ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0), '8BUI'::text, 1, 0 ), 1, 1, 1, ARRAY[ [0, 1, 1, 1, 1], [1, 1, 1, 0, 1], [1, 0, 1, 1, 1], [1, 1, 1, 1, 0], [1, 1, 0, 1, 1] ]::double precision[], 1 ) AS rast ) AS foo st_neighborhood --------------------------------- {{NULL,1,1},{1,1,NULL},{1,1,1}} -- pixel 2x3 is NODATA SELECT ST_Neighborhood(rast, 2, 3, 1, 1) FROM ( SELECT ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0), '8BUI'::text, 1, 0 ), 1, 1, 1, ARRAY[ [0, 1, 1, 1, 1], [1, 1, 1, 0, 1], [1, 0, 1, 1, 1], [1, 1, 1, 1, 0], [1, 1, 0, 1, 1] ]::double precision[], 1 ) AS rast ) AS foo st_neighborhood ------------------------------ {{1,1,1},{1,NULL,1},{1,1,1}} -- pixel 3x3 has value -- exclude_nodata_value = FALSE SELECT ST_Neighborhood(rast, 3, 3, 1, 1, false) FROM ( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0), '8BUI'::text, 1, 0 ), 1, 1, 1, ARRAY[ [0, 1, 1, 1, 1], [1, 1, 1, 0, 1], [1, 0, 1, 1, 1], [1, 1, 1, 1, 0], [1, 1, 0, 1, 1] ]::double precision[], 1 ) AS rast ) AS foo st_neighborhood --------------------------- {{1,0,1},{1,1,1},{0,1,1}} See Also , , , , , , , ST_SetValue Returns modified raster resulting from setting the value of a given band in a given columnx, rowy pixel or the pixels that intersect a particular geometry. Band numbers start at 1 and assumed to be 1 if not specified. raster ST_SetValue raster rast integer bandnum geometry geom double precision newvalue raster ST_SetValue raster rast geometry geom double precision newvalue raster ST_SetValue raster rast integer bandnum integer columnx integer rowy double precision newvalue raster ST_SetValue raster rast integer columnx integer rowy double precision newvalue Description Returns modified raster resulting from setting the specified pixels' values to new value for the designed band given the raster's row and column or a geometry. If no band is specified, then band 1 is assumed. Enhanced: 2.1.0 Geometry variant of ST_SetValue() now supports any geometry type, not just point. The geometry variant is a wrapper around the geomval[] variant of ST_SetValues() Examples -- Geometry example SELECT (foo.geomval).val, ST_AsText(ST_Union((foo.geomval).geom)) FROM (SELECT ST_DumpAsPolygons( ST_SetValue(rast,1, ST_Point(3427927.75, 5793243.95), 50) ) As geomval FROM dummy_rast where rid = 2) As foo WHERE (foo.geomval).val < 250 GROUP BY (foo.geomval).val; val | st_astext -----+------------------------------------------------------------------- 50 | POLYGON((3427927.75 5793244,3427927.75 5793243.95,3427927.8 579324 ... 249 | POLYGON((3427927.95 5793243.95,3427927.95 5793243.85,3427928 57932 ... -- Store the changed raster -- UPDATE dummy_rast SET rast = ST_SetValue(rast,1, ST_Point(3427927.75, 5793243.95),100) WHERE rid = 2 ; See Also , ST_SetValues Returns modified raster resulting from setting the values of a given band. raster ST_SetValues raster rast integer nband integer columnx integer rowy double precision[][] newvalueset boolean[][] noset=NULL boolean keepnodata=FALSE raster ST_SetValues raster rast integer nband integer columnx integer rowy double precision[][] newvalueset double precision nosetvalue boolean keepnodata=FALSE raster ST_SetValues raster rast integer nband integer columnx integer rowy integer width integer height double precision newvalue boolean keepnodata=FALSE raster ST_SetValues raster rast integer columnx integer rowy integer width integer height double precision newvalue boolean keepnodata=FALSE raster ST_SetValues raster rast integer nband geomval[] geomvalset boolean keepnodata=FALSE Description Returns modified raster resulting from setting specified pixels to new value(s) for the designated band. If keepnodata is TRUE, those pixels whose values are NODATA will not be set with the corresponding value in newvalueset. For Variant 1, the specific pixels to be set are determined by the columnx, rowy pixel coordinates and the dimensions of the newvalueset array. noset can be used to prevent pixels with values present in newvalueset from being set (due to PostgreSQL not permitting ragged/jagged arrays). See example Variant 1. Variant 2 is like Variant 1 but with a simple double precision nosetvalue instead of a boolean noset array. Elements in newvalueset with the nosetvalue value with be skipped. See example Variant 2. For Variant 3, the specific pixels to be set are determined by the columnx, rowy pixel coordinates, width and height. See example Variant 3. Variant 4 is the same as Variant 3 with the exception that it assumes that the first band's pixels of rast will be set. For Variant 5, an array of is used to determine the specific pixels to be set. If all the geometries in the array are of type POINT or MULTIPOINT, the function uses a shortcut where the longitude and latitude of each point is used to set a pixel directly. Otherwise, the geometries are converted to rasters and then iterated through in one pass. See example Variant 5. Availability: 2.1.0 Examples: Variant 1 /* The ST_SetValues() does the following... + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 1 | 1 | + - + - + - + + - + - + - + | 1 | 1 | 1 | => | 1 | 9 | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 2, 2, ARRAY[[9, 9], [9, 9]]::double precision[][] ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 2 | 1 | 1 2 | 2 | 9 2 | 3 | 9 3 | 1 | 1 3 | 2 | 9 3 | 3 | 9 /* The ST_SetValues() does the following... + - + - + - + + - + - + - + | 1 | 1 | 1 | | 9 | 9 | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | => | 9 | | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 9 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 1, 1, ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][] ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 9 1 | 2 | 9 1 | 3 | 9 2 | 1 | 9 2 | 2 | 2 | 3 | 9 3 | 1 | 9 3 | 2 | 9 3 | 3 | 9 /* The ST_SetValues() does the following... + - + - + - + + - + - + - + | 1 | 1 | 1 | | 9 | 9 | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | => | 1 | | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 9 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 1, 1, ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][], ARRAY[[false], [true]]::boolean[][] ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 9 1 | 2 | 1 1 | 3 | 9 2 | 1 | 9 2 | 2 | 2 | 3 | 9 3 | 1 | 9 3 | 2 | 9 3 | 3 | 9 /* The ST_SetValues() does the following... + - + - + - + + - + - + - + | | 1 | 1 | | | 9 | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | => | 1 | | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 9 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 1, 1, NULL ), 1, 1, 1, ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][], ARRAY[[false], [true]]::boolean[][], TRUE ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 1 | 2 | 1 1 | 3 | 9 2 | 1 | 9 2 | 2 | 2 | 3 | 9 3 | 1 | 9 3 | 2 | 9 3 | 3 | 9 Examples: Variant 2 /* The ST_SetValues() does the following... + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 1 | 1 | + - + - + - + + - + - + - + | 1 | 1 | 1 | => | 1 | 9 | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 1, 1, ARRAY[[-1, -1, -1], [-1, 9, 9], [-1, 9, 9]]::double precision[][], -1 ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 2 | 1 | 1 2 | 2 | 9 2 | 3 | 9 3 | 1 | 1 3 | 2 | 9 3 | 3 | 9 /* This example is like the previous one. Instead of nosetvalue = -1, nosetvalue = NULL The ST_SetValues() does the following... + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 1 | 1 | + - + - + - + + - + - + - + | 1 | 1 | 1 | => | 1 | 9 | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 1, 1, ARRAY[[NULL, NULL, NULL], [NULL, 9, 9], [NULL, 9, 9]]::double precision[][], NULL::double precision ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 2 | 1 | 1 2 | 2 | 9 2 | 3 | 9 3 | 1 | 1 3 | 2 | 9 3 | 3 | 9 Examples: Variant 3 /* The ST_SetValues() does the following... + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 1 | 1 | + - + - + - + + - + - + - + | 1 | 1 | 1 | => | 1 | 9 | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 2, 2, 2, 2, 9 ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 2 | 1 | 1 2 | 2 | 9 2 | 3 | 9 3 | 1 | 1 3 | 2 | 9 3 | 3 | 9 /* The ST_SetValues() does the following... + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 1 | 1 | + - + - + - + + - + - + - + | 1 | | 1 | => | 1 | | 9 | + - + - + - + + - + - + - + | 1 | 1 | 1 | | 1 | 9 | 9 | + - + - + - + + - + - + - + */ SELECT (poly).x, (poly).y, (poly).val FROM ( SELECT ST_PixelAsPolygons( ST_SetValues( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), 1, 2, 2, NULL ), 1, 2, 2, 2, 2, 9, TRUE ) ) AS poly ) foo ORDER BY 1, 2; x | y | val ---+---+----- 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 2 | 1 | 1 2 | 2 | 2 | 3 | 9 3 | 1 | 1 3 | 2 | 9 3 | 3 | 9 Examples: Variant 5 WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast ), bar AS ( SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1, 4 -1, 4 -4, 1 -4, 1 -1))'::geometry geom UNION ALL SELECT 3 AS gid, 'SRID=0;POLYGON((0 0, 5 0, 5 -1, 1 -1, 1 -4, 0 -4, 0 0))'::geometry geom UNION ALL SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0, 4 4, 4 -4)'::geometry ) SELECT rid, gid, ST_DumpValues(ST_SetValue(rast, 1, geom, gid)) FROM foo t1 CROSS JOIN bar t2 ORDER BY rid, gid; rid | gid | st_dumpvalues -----+-----+--------------------------------------------------------------------------------------------------------------------------------------------- 1 | 1 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,1,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1 | 2 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1 | 3 | (1,"{{3,3,3,3,3},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1 | 4 | (1,"{{4,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,4}}") (4 rows) The following shows that geomvals later in the array can overwrite prior geomvals WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast ), bar AS ( SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1, 4 -1, 4 -4, 1 -4, 1 -1))'::geometry geom UNION ALL SELECT 3 AS gid, 'SRID=0;POLYGON((0 0, 5 0, 5 -1, 1 -1, 1 -4, 0 -4, 0 0))'::geometry geom UNION ALL SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0, 4 4, 4 -4)'::geometry ) SELECT t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, t2.gid), ROW(t3.geom, t3.gid)]::geomval[])) FROM foo t1 CROSS JOIN bar t2 CROSS JOIN bar t3 WHERE t2.gid = 1 AND t3.gid = 2 ORDER BY t1.rid, t2.gid, t3.gid; rid | gid | gid | st_dumpvalues -----+-----+-----+--------------------------------------------------------------------------------------------------------------------- 1 | 1 | 2 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}") (1 row) This example is the opposite of the prior example WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast ), bar AS ( SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1, 4 -1, 4 -4, 1 -4, 1 -1))'::geometry geom UNION ALL SELECT 3 AS gid, 'SRID=0;POLYGON((0 0, 5 0, 5 -1, 1 -1, 1 -4, 0 -4, 0 0))'::geometry geom UNION ALL SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0, 4 4, 4 -4)'::geometry ) SELECT t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, t2.gid), ROW(t3.geom, t3.gid)]::geomval[])) FROM foo t1 CROSS JOIN bar t2 CROSS JOIN bar t3 WHERE t2.gid = 2 AND t3.gid = 1 ORDER BY t1.rid, t2.gid, t3.gid; rid | gid | gid | st_dumpvalues -----+-----+-----+--------------------------------------------------------------------------------------------------------------------- 1 | 2 | 1 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,1,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}") (1 row) See Also , , ST_DumpValues Get the values of the specified band as a 2-dimension array. setof record ST_DumpValues raster rast integer[] nband boolean exclude_nodata_value=true double precision[][] ST_DumpValues raster rast integer nband boolean exclude_nodata_value=true Description Get the values of the specified band as a 2-dimension array. If nband is NULL or not provided, all raster bands are processed. Availability: 2.1.0 Examples WITH foo AS ( SELECT ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '32BF', 3, -9999), 3, '16BSI', 0, 0) AS rast ) SELECT (ST_DumpValues(rast)).* FROM foo; nband | valarray -------+------------------------------------------------------ 1 | {{1,1,1},{1,1,1},{1,1,1}} 2 | {{3,3,3},{3,3,3},{3,3,3}} 3 | {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}} (3 rows) WITH foo AS ( SELECT ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '32BF', 3, -9999), 3, '16BSI', 0, 0) AS rast ) SELECT (ST_DumpValues(rast, ARRAY[3, 1])).* FROM foo; nband | valarray -------+------------------------------------------------------ 3 | {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}} 1 | {{1,1,1},{1,1,1},{1,1,1}} (2 rows) See Also , , ST_PixelOfValue Get the columnx, rowy coordinates of the pixel whose value equals the search value. setof record ST_PixelOfValue raster rast integer nband double precision[] search boolean exclude_nodata_value=true setof record ST_PixelOfValue raster rast double precision[] search boolean exclude_nodata_value=true setof record ST_PixelOfValue raster rast integer nband double precision search boolean exclude_nodata_value=true setof record ST_PixelOfValue raster rast double precision search boolean exclude_nodata_value=true Description Get the columnx, rowy coordinates of the pixel whose value equals the search value. If no band is specified, then band 1 is assumed. Availability: 2.1.0 Examples SELECT (pixels).* FROM ( SELECT ST_PixelOfValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0), '8BUI'::text, 1, 0 ), 1, 1, 0 ), 2, 3, 0 ), 3, 5, 0 ), 4, 2, 0 ), 5, 4, 255 ) , 1, ARRAY[1, 255]) AS pixels ) AS foo val | x | y -----+---+--- 1 | 1 | 2 1 | 1 | 3 1 | 1 | 4 1 | 1 | 5 1 | 2 | 1 1 | 2 | 2 1 | 2 | 4 1 | 2 | 5 1 | 3 | 1 1 | 3 | 2 1 | 3 | 3 1 | 3 | 4 1 | 4 | 1 1 | 4 | 3 1 | 4 | 4 1 | 4 | 5 1 | 5 | 1 1 | 5 | 2 1 | 5 | 3 255 | 5 | 4 1 | 5 | 5 Raster Editors ST_SetGeoReference Set Georeference 6 georeference parameters in a single call. Numbers should be separated by white space. Accepts inputs in GDAL or ESRI format. Default is GDAL. raster ST_SetGeoReference raster rast text georefcoords text format=GDAL raster ST_SetGeoReference raster rast double precision upperleftx double precision upperlefty double precision scalex double precision scaley double precision skewx double precision skewy Description Set Georeference 6 georeference parameters in a single call. Accepts inputs in 'GDAL' or 'ESRI' format. Default is GDAL. If 6 coordinates are not provided will return null. Difference between format representations is as follows: GDAL: scalex skewy skewx scaley upperleftx upperlefty ESRI: scalex skewy skewx scaley upperleftx + scalex*0.5 upperlefty + scaley*0.5 If the raster has out-db bands, changing the georeference may result in incorrect access of the band's externally stored data. Enhanced: 2.1.0 Addition of ST_SetGeoReference(raster, double precision, ...) variant Examples WITH foo AS ( SELECT ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0) AS rast ) SELECT 0 AS rid, (ST_Metadata(rast)).* FROM foo UNION ALL SELECT 1, (ST_Metadata(ST_SetGeoReference(rast, '10 0 0 -10 0.1 0.1', 'GDAL'))).* FROM foo UNION ALL SELECT 2, (ST_Metadata(ST_SetGeoReference(rast, '10 0 0 -10 5.1 -4.9', 'ESRI'))).* FROM foo UNION ALL SELECT 3, (ST_Metadata(ST_SetGeoReference(rast, 1, 1, 10, -10, 0.001, 0.001))).* FROM foo rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands -----+--------------------+--------------------+-------+--------+--------+--------+-------+-------+------+---------- 0 | 0 | 0 | 5 | 5 | 1 | -1 | 0 | 0 | 0 | 0 1 | 0.1 | 0.1 | 5 | 5 | 10 | -10 | 0 | 0 | 0 | 0 2 | 0.0999999999999996 | 0.0999999999999996 | 5 | 5 | 10 | -10 | 0 | 0 | 0 | 0 3 | 1 | 1 | 5 | 5 | 10 | -10 | 0.001 | 0.001 | 0 | 0 See Also , , , , ST_SetRotation Set the rotation of the raster in radian. float8 ST_SetRotation raster rast float8 rotation Description Uniformly rotate the raster. Rotation is in radian. Refer to World File for more details. Examples SELECT ST_ScaleX(rast1), ST_ScaleY(rast1), ST_SkewX(rast1), ST_SkewY(rast1), ST_ScaleX(rast2), ST_ScaleY(rast2), ST_SkewX(rast2), ST_SkewY(rast2) FROM ( SELECT ST_SetRotation(rast, 15) AS rast1, rast as rast2 FROM dummy_rast ) AS foo; st_scalex | st_scaley | st_skewx | st_skewy | st_scalex | st_scaley | st_skewx | st_skewy ---------------------+---------------------+--------------------+--------------------+-----------+-----------+----------+---------- -1.51937582571764 | -2.27906373857646 | 1.95086352047135 | 1.30057568031423 | 2 | 3 | 0 | 0 -0.0379843956429411 | -0.0379843956429411 | 0.0325143920078558 | 0.0325143920078558 | 0.05 | -0.05 | 0 | 0 See Also , , , , ST_SetScale Sets the X and Y size of pixels in units of coordinate reference system. Number units/pixel width/height. raster ST_SetScale raster rast float8 xy raster ST_SetScale raster rast float8 x float8 y Description Sets the X and Y size of pixels in units of coordinate reference system. Number units/pixel width/height. If only one unit passed in, assumed X and Y are the same number. ST_SetScale is different from in that ST_SetScale do not resample the raster to match the raster extent. It only changes the metadata (or georeference) of the raster to correct an originally mis-specified scaling. ST_Rescale results in a raster having different width and height computed to fit the geographic extent of the input raster. ST_SetScale do not modify the width, nor the height of the raster. Changed: 2.0.0 In WKTRaster versions this was called ST_SetPixelSize. This was changed in 2.0.0. Examples UPDATE dummy_rast SET rast = ST_SetScale(rast, 1.5) WHERE rid = 2; SELECT ST_ScaleX(rast) As pixx, ST_ScaleY(rast) As pixy, Box3D(rast) As newbox FROM dummy_rast WHERE rid = 2; pixx | pixy | newbox ------+------+---------------------------------------------- 1.5 | 1.5 | BOX(3427927.75 5793244 0, 3427935.25 5793251.5 0) UPDATE dummy_rast SET rast = ST_SetScale(rast, 1.5, 0.55) WHERE rid = 2; SELECT ST_ScaleX(rast) As pixx, ST_ScaleY(rast) As pixy, Box3D(rast) As newbox FROM dummy_rast WHERE rid = 2; pixx | pixy | newbox ------+------+-------------------------------------------- 1.5 | 0.55 | BOX(3427927.75 5793244 0,3427935.25 5793247 0) See Also , , ST_SetSkew Sets the georeference X and Y skew (or rotation parameter). If only one is passed in, sets X and Y to the same value. raster ST_SetSkew raster rast float8 skewxy raster ST_SetSkew raster rast float8 skewx float8 skewy Description Sets the georeference X and Y skew (or rotation parameter). If only one is passed in, sets X and Y to the same value. Refer to World File for more details. Examples -- Example 1 UPDATE dummy_rast SET rast = ST_SetSkew(rast,1,2) WHERE rid = 1; SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy, ST_GeoReference(rast) as georef FROM dummy_rast WHERE rid = 1; rid | skewx | skewy | georef ----+-------+-------+-------------- 1 | 1 | 2 | 2.0000000000 : 2.0000000000 : 1.0000000000 : 3.0000000000 : 0.5000000000 : 0.5000000000 -- Example 2 set both to same number: UPDATE dummy_rast SET rast = ST_SetSkew(rast,0) WHERE rid = 1; SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy, ST_GeoReference(rast) as georef FROM dummy_rast WHERE rid = 1; rid | skewx | skewy | georef -----+-------+-------+-------------- 1 | 0 | 0 | 2.0000000000 : 0.0000000000 : 0.0000000000 : 3.0000000000 : 0.5000000000 : 0.5000000000 See Also , , , ST_SetSRID Sets the SRID of a raster to a particular integer srid defined in the spatial_ref_sys table. raster ST_SetSRID raster rast integer srid Description Sets the SRID on a raster to a particular integer value. This function does not transform the raster in any way - it simply sets meta data defining the spatial ref of the coordinate reference system that it's currently in. Useful for transformations later. See Also , ST_SetUpperLeft Sets the value of the upper left corner of the pixel to projected X and Y coordinates. raster ST_SetUpperLeft raster rast double precision x double precision y Description Set the value of the upper left corner of raster to the projected X coordinates Examples SELECT ST_SetUpperLeft(rast,-71.01,42.37) FROM dummy_rast WHERE rid = 2; See Also , ST_Resample Resample a raster using a specified resampling algorithm, new dimensions, an arbitrary grid corner and a set of raster georeferencing attributes defined or borrowed from another raster. raster ST_Resample raster rast integer width integer height double precision gridx=NULL double precision gridy=NULL double precision skewx=0 double precision skewy=0 text algorithm=NearestNeighbour double precision maxerr=0.125 raster ST_Resample raster rast double precision scalex=0 double precision scaley=0 double precision gridx=NULL double precision gridy=NULL double precision skewx=0 double precision skewy=0 text algorithm=NearestNeighbor double precision maxerr=0.125 raster ST_Resample raster rast raster ref text algorithm=NearestNeighbour double precision maxerr=0.125 boolean usescale=true raster ST_Resample raster rast raster ref boolean usescale text algorithm=NearestNeighbour double precision maxerr=0.125 Description Resample a raster using a specified resampling algorithm, new dimensions (width & height), a grid corner (gridx & gridy) and a set of raster georeferencing attributes (scalex, scaley, skewx & skewy) defined or borrowed from another raster. If using a reference raster, the two rasters must have the same SRID. New pixel values are computed using the NearestNeighbor (English or American spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor which is the fastest but produce the worst interpolation. A maxerror percent of 0.125 is used if no maxerr is specified. Refer to: GDAL Warp resampling methods for more details. Availability: 2.0.0 Requires GDAL 1.6.1+ Changed: 2.1.0 Parameter srid removed. Variants with a reference raster no longer applies the reference raster's SRID. Use ST_Transform() to reproject raster. Works on rasters with no SRID. Examples SELECT ST_Width(orig) AS orig_width, ST_Width(reduce_100) AS new_width FROM ( SELECT rast AS orig, ST_Resample(rast,100,100) AS reduce_100 FROM aerials.boston WHERE ST_Intersects(rast, ST_Transform( ST_MakeEnvelope(-71.128, 42.2392,-71.1277, 42.2397, 4326),26986) ) LIMIT 1 ) AS foo; orig_width | new_width ------------+------------- 200 | 100 See Also , ST_Rescale Resample a raster by adjusting only its scale (or pixel size). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor. raster ST_Rescale raster rast double precision scalexy text algorithm=NearestNeighbour double precision maxerr=0.125 raster ST_Rescale raster rast double precision scalex double precision scaley text algorithm=NearestNeighbour double precision maxerr=0.125 Description Resample a raster by adjusting only its scale (or pixel size). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. The default is NearestNeighbor which is the fastest but results in the worst interpolation. scalex and scaley define the new pixel size. scaley must often be negative to get well oriented raster. When the new scalex or scaley is not a divisor of the raster width or height, the extent of the resulting raster is expanded to encompass the extent of the provided raster. A maxerror percent of 0.125 is used if no maxerr is specified. Refer to: GDAL Warp resampling methods for more details. ST_Rescale is different from in that ST_SetScale do not resample the raster to match the raster extent. ST_SetScale only changes the metadata (or georeference) of the raster to correct an originally mis-specified scaling. ST_Rescale results in a raster having different width and height computed to fit the geographic extent of the input raster. ST_SetScale do not modify the width, nor the height of the raster. Availability: 2.0.0 Requires GDAL 1.6.1+ Changed: 2.1.0 Works on rasters with no SRID Examples A simple example rescaling a raster from a pixel size of 0.001 degree to a pixel size of 0.0015 degree. -- the original raster pixel size SELECT ST_PixelWidth(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0)) width width ---------- 0.001 -- the rescaled raster raster pixel size SELECT ST_PixelWidth(ST_Rescale(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0015)) width width ---------- 0.0015 See Also , , , , ST_Reskew Resample a raster by adjusting only its skew (or rotation parameters). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor. raster ST_Reskew raster rast double precision skewxy text algorithm=NearestNeighbour double precision maxerr=0.125 raster ST_Reskew raster rast double precision skewx double precision skewy text algorithm=NearestNeighbour double precision maxerr=0.125 Description Resample a raster by adjusting only its skew (or rotation parameters). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. The default is NearestNeighbor which is the fastest but results in the worst interpolation. skewx and skewy define the new skew. The extent of the new raster will encompass the extent of the provided raster. A maxerror percent of 0.125 if no maxerr is specified. Refer to: GDAL Warp resampling methods for more details. ST_Reskew is different from in that ST_SetSkew do not resample the raster to match the raster extent. ST_SetSkew only changes the metadata (or georeference) of the raster to correct an originally mis-specified skew. ST_Reskew results in a raster having different width and height computed to fit the geographic extent of the input raster. ST_SetSkew do not modify the width, nor the height of the raster. Availability: 2.0.0 Requires GDAL 1.6.1+ Changed: 2.1.0 Works on rasters with no SRID Examples A simple example reskewing a raster from a skew of 0.0 to a skew of 0.0015. -- the original raster pixel size SELECT ST_Rotation(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0)) -- the rescaled raster raster pixel size SELECT ST_Rotation(ST_Reskew(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0015)) See Also , , , , , , ST_SnapToGrid Resample a raster by snapping it to a grid. New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor. raster ST_SnapToGrid raster rast double precision gridx double precision gridy text algorithm=NearestNeighbour double precision maxerr=0.125 double precision scalex=DEFAULT 0 double precision scaley=DEFAULT 0 raster ST_SnapToGrid raster rast double precision gridx double precision gridy double precision scalex double precision scaley text algorithm=NearestNeighbour double precision maxerr=0.125 raster ST_SnapToGrid raster rast double precision gridx double precision gridy double precision scalexy text algorithm=NearestNeighbour double precision maxerr=0.125 Description Resample a raster by snapping it to a grid defined by an arbitrary pixel corner (gridx & gridy) and optionally a pixel size (scalex & scaley). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. The default is NearestNeighbor which is the fastest but results in the worst interpolation. gridx and gridy define any arbitrary pixel corner of the new grid. This is not necessarily the upper left corner of the new raster and it does not have to be inside or on the edge of the new raster extent. You can optionnal define the pixel size of the new grid with scalex and scaley. The extent of the new raster will encompass the extent of the provided raster. A maxerror percent of 0.125 if no maxerr is specified. Refer to: GDAL Warp resampling methods for more details. Use if you need more control over the grid parameters. Availability: 2.0.0 Requires GDAL 1.6.1+ Changed: 2.1.0 Works on rasters with no SRID Examples A simple example snapping a raster to a slightly different grid. -- the original raster pixel size SELECT ST_UpperLeftX(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0)) -- the rescaled raster raster pixel size SELECT ST_UpperLeftX(ST_SnapToGrid(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0002, 0.0002)) See Also , , , ST_Resize Resize a raster to a new width/height raster ST_Resize raster rast integer width integer height text algorithm=NearestNeighbor double precision maxerr=0.125 raster ST_Resize raster rast double precision percentwidth double precision percentheight text algorithm=NearestNeighbor double precision maxerr=0.125 raster ST_Resize raster rast text width text height text algorithm=NearestNeighbor double precision maxerr=0.125 Description Resize a raster to a new width/height. The new width/height can be specified in exact number of pixels or a percentage of the raster's width/height. New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. The default is NearestNeighbor which is the fastest but results in the worst interpolation. Variant 1 expects the actual width/height of the output raster. Variant 2 expects decimal values between zero (0) and one (1) indicating the percentage of the input raster's width/height. Variant 3 takes either the actual width/height of the output raster or a textual percentage ("20%") indicating the percentage of the input raster's width/height. Availability: 2.1.0 Requires GDAL 1.6.1+ Examples WITH foo AS( SELECT 1 AS rid, ST_Resize( ST_AddBand( ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 255, 0 ) , '50%', '500') AS rast UNION ALL SELECT 2 AS rid, ST_Resize( ST_AddBand( ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 255, 0 ) , 500, 100) AS rast UNION ALL SELECT 3 AS rid, ST_Resize( ST_AddBand( ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 255, 0 ) , 0.25, 0.9) AS rast ), bar AS ( SELECT rid, ST_Metadata(rast) AS meta, rast FROM foo ) SELECT rid, (meta).* FROM bar rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands -----+------------+------------+-------+--------+--------+--------+-------+-------+------+---------- 1 | 0 | 0 | 500 | 500 | 1 | -1 | 0 | 0 | 0 | 1 2 | 0 | 0 | 500 | 100 | 1 | -1 | 0 | 0 | 0 | 1 3 | 0 | 0 | 250 | 900 | 1 | -1 | 0 | 0 | 0 | 1 (3 rows) See Also , , , ST_Transform Reprojects a raster in a known spatial reference system to another known spatial reference system using specified resampling algorithm. Options are NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos defaulting to NearestNeighbor. raster ST_Transform raster rast integer srid text algorithm=NearestNeighbor double precision maxerr=0.125 double precision scalex double precision scaley raster ST_Transform raster rast integer srid double precision scalex double precision scaley text algorithm=NearestNeighbor double precision maxerr=0.125 raster ST_Transform raster rast raster alignto text algorithm=NearestNeighbor double precision maxerr=0.125 Description Reprojects a raster in a known spatial reference system to another known spatial reference system using specified pixel warping algorithm. Uses 'NearestNeighbor' if no algorithm is specified and maxerror percent of 0.125 if no maxerr is specified. Algorithm options are: 'NearestNeighbor', 'Bilinear', 'Cubic', 'CubicSpline', and 'Lanczos'. Refer to: GDAL Warp resampling methods for more details. ST_Transform is often confused with ST_SetSRID(). ST_Transform actually changes the coordinates of a raster (and resamples the pixel values) from one spatial reference system to another, while ST_SetSRID() simply changes the SRID identifier of the raster. Unlike the other variants, Variant 3 requires a reference raster as alignto. The transformed raster will be transformed to the spatial reference system (SRID) of the reference raster and be aligned (ST_SameAlignment = TRUE) to the reference raster. If you find your transformation support is not working right, you may need to set the environment variable PROJSO to the .so or .dll projection library your PostGIS is using. This just needs to have the name of the file. So for example on windows, you would in Control Panel -> System -> Environment Variables add a system variable called PROJSO and set it to libproj.dll (if you are using proj 4.6.1). You'll have to restart your PostgreSQL service/daemon after this change. Availability: 2.0.0 Requires GDAL 1.6.1+ Enhanced: 2.1.0 Addition of ST_Transform(rast, alignto) variant Examples SELECT ST_Width(mass_stm) As w_before, ST_Width(wgs_84) As w_after, ST_Height(mass_stm) As h_before, ST_Height(wgs_84) As h_after FROM ( SELECT rast As mass_stm, ST_Transform(rast,4326) As wgs_84 , ST_Transform(rast,4326, 'Bilinear') AS wgs_84_bilin FROM aerials.o_2_boston WHERE ST_Intersects(rast, ST_Transform(ST_MakeEnvelope(-71.128, 42.2392,-71.1277, 42.2397, 4326),26986) ) LIMIT 1) As foo; w_before | w_after | h_before | h_after ----------+---------+----------+--------- 200 | 228 | 200 | 170 Examples: Variant 3 The following shows the difference between using ST_Transform(raster, srid) and ST_Transform(raster, alignto) WITH foo AS ( SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 1, 0) AS rast UNION ALL SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 2, 0) AS rast UNION ALL SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 3, 0) AS rast UNION ALL SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 10, 0) AS rast UNION ALL SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 20, 0) AS rast UNION ALL SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 30, 0) AS rast UNION ALL SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 100, 0) AS rast UNION ALL SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 200, 0) AS rast UNION ALL SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 300, 0) AS rast ), bar AS ( SELECT ST_Transform(rast, 4269) AS alignto FROM foo LIMIT 1 ), baz AS ( SELECT rid, rast, ST_Transform(rast, 4269) AS not_aligned, ST_Transform(rast, alignto) AS aligned FROM foo CROSS JOIN bar ) SELECT ST_SameAlignment(rast) AS rast, ST_SameAlignment(not_aligned) AS not_aligned, ST_SameAlignment(aligned) AS aligned FROM baz rast | not_aligned | aligned ------+-------------+--------- t | f | t See Also , Raster Band Editors ST_SetBandNoDataValue Sets the value for the given band that represents no data. Band 1 is assumed if no band is specified. To mark a band as having no nodata value, set the nodata value = NULL. raster ST_SetBandNoDataValue raster rast double precision nodatavalue raster ST_SetBandNoDataValue raster rast integer band double precision nodatavalue boolean forcechecking=false Description Sets the value that represents no data for the band. Band 1 is assumed if not specified. This will affect results from , , and the ST_PixelAs...() functions. Examples -- change just first band no data value UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,1, 254) WHERE rid = 2; -- change no data band value of bands 1,2,3 UPDATE dummy_rast SET rast = ST_SetBandNoDataValue( ST_SetBandNoDataValue( ST_SetBandNoDataValue( rast,1, 254) ,2,99), 3,108) WHERE rid = 2; -- wipe out the nodata value this will ensure all pixels are considered for all processing functions UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,1, NULL) WHERE rid = 2; See Also , ST_SetBandIsNoData Sets the isnodata flag of the band to TRUE. raster ST_SetBandIsNoData raster rast integer band=1 Description Sets the isnodata flag for the band to true. Band 1 is assumed if not specified. This function should be called only when the flag is considered dirty. That is, when the result calling is different using TRUE as last argument and without using it Availability: 2.0.0 Examples -- Create dummy table with one raster column create table dummy_rast (rid integer, rast raster); -- Add raster with two bands, one pixel/band. In the first band, nodatavalue = pixel value = 3. -- In the second band, nodatavalue = 13, pixel value = 4 insert into dummy_rast values(1, ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true, isnodata value set to false (when it should be true) || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); select st_bandisnodata(rast, 1) from dummy_rast where rid = 1; -- Expected false select st_bandisnodata(rast, 1, TRUE) from dummy_rast where rid = 1; -- Expected true -- The isnodata flag is dirty. We are going to set it to true update dummy_rast set rast = st_setbandisnodata(rast, 1) where rid = 1; select st_bandisnodata(rast, 1) from dummy_rast where rid = 1; -- Expected true See Also , , , Raster Band Statistics and Analytics ST_Count Returns the number of pixels in a given band of a raster or raster coverage. If no band is specified defaults to band 1. If exclude_nodata_value is set to true, will only count pixels that are not equal to the nodata value. bigint ST_Count raster rast integer nband=1 boolean exclude_nodata_value=true bigint ST_Count raster rast boolean exclude_nodata_value bigint ST_Count text rastertable text rastercolumn integer nband=1 boolean exclude_nodata_value=true bigint ST_Count text rastertable text rastercolumn boolean exclude_nodata_value Description Returns the number of pixels in a given band of a raster or raster coverage. If no band is specified nband defaults to 1. If exclude_nodata_value is set to true, will only count pixels with value not equal to the nodata value of the raster. Set exclude_nodata_value to false to get count all pixels Availability: 2.0.0 Examples --example will count all pixels not 249 and one will count all pixels. -- SELECT rid, ST_Count(ST_SetBandNoDataValue(rast,249)) As exclude_nodata, ST_Count(ST_SetBandNoDataValue(rast,249),false) As include_nodata FROM dummy_rast WHERE rid=2; rid | exclude_nodata | include_nodata -----+----------------+---------------- 2 | 23 | 25 See Also ST_Histogram Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified. SETOF record ST_Histogram raster rast integer nband=1 boolean exclude_nodata_value=true integer bins=autocomputed double precision[] width=NULL boolean right=false SETOF record ST_Histogram raster rast integer nband integer bins double precision[] width=NULL boolean right=false SETOF record ST_Histogram raster rast integer nband boolean exclude_nodata_value integer bins boolean right SETOF record ST_Histogram raster rast integer nband integer bins boolean right SETOF record ST_Histogram text rastertable text rastercolumn integer nband integer bins boolean right SETOF record ST_Histogram text rastertable text rastercolumn integer nband boolean exclude_nodata_value integer bins boolean right SETOF record ST_Histogram text rastertable text rastercolumn integer nband=1 boolean exclude_nodata_value=true integer bins=autocomputed double precision[] width=NULL boolean right=false SETOF record ST_Histogram text rastertable text rastercolumn integer nband=1 integer bins double precision[] width=NULL boolean right=false Description Returns set of records consisting of min, max, count, percent for a given raster band for each bin. If no band is specified nband defaults to 1. By default only considers pixel values not equal to the nodata value . Set exclude_nodata_value to false to get count all pixels. width double precision[] width: an array indicating the width of each category/bin. If the number of bins is greater than the number of widths, the widths are repeated. Example: 9 bins, widths are [a, b, c] will have the output be [a, b, c, a, b, c, a, b, c] bins integer Number of breakouts -- this is the number of records you'll get back from the function if specified. If not specified then the number of breakouts is autocomputed. right boolean compute the histogram from the right rather than from the left (default). This changes the criteria for evaluating a value x from [a, b) to (a, b] Availability: 2.0.0 Example: Single raster tile - compute histograms for bands 1, 2, 3 and autocompute bins SELECT band, (stats).* FROM (SELECT rid, band, ST_Histogram(rast, band) As stats FROM dummy_rast CROSS JOIN generate_series(1,3) As band WHERE rid=2) As foo; band | min | max | count | percent ------+-------+-------+-------+--------- 1 | 249 | 250 | 2 | 0.08 1 | 250 | 251 | 2 | 0.08 1 | 251 | 252 | 1 | 0.04 1 | 252 | 253 | 2 | 0.08 1 | 253 | 254 | 18 | 0.72 2 | 78 | 113.2 | 11 | 0.44 2 | 113.2 | 148.4 | 4 | 0.16 2 | 148.4 | 183.6 | 4 | 0.16 2 | 183.6 | 218.8 | 1 | 0.04 2 | 218.8 | 254 | 5 | 0.2 3 | 62 | 100.4 | 11 | 0.44 3 | 100.4 | 138.8 | 5 | 0.2 3 | 138.8 | 177.2 | 4 | 0.16 3 | 177.2 | 215.6 | 1 | 0.04 3 | 215.6 | 254 | 4 | 0.16 Example: Just band 2 but for 6 bins SELECT (stats).* FROM (SELECT rid, ST_Histogram(rast, 2,6) As stats FROM dummy_rast WHERE rid=2) As foo; min | max | count | percent ------------+------------+-------+--------- 78 | 107.333333 | 9 | 0.36 107.333333 | 136.666667 | 6 | 0.24 136.666667 | 166 | 0 | 0 166 | 195.333333 | 4 | 0.16 195.333333 | 224.666667 | 1 | 0.04 224.666667 | 254 | 5 | 0.2 (6 rows) -- Same as previous but we explicitly control the pixel value range of each bin. SELECT (stats).* FROM (SELECT rid, ST_Histogram(rast, 2,6,ARRAY[0.5,1,4,100,5]) As stats FROM dummy_rast WHERE rid=2) As foo; min | max | count | percent -------+-------+-------+---------- 78 | 78.5 | 1 | 0.08 78.5 | 79.5 | 1 | 0.04 79.5 | 83.5 | 0 | 0 83.5 | 183.5 | 17 | 0.0068 183.5 | 188.5 | 0 | 0 188.5 | 254 | 6 | 0.003664 (6 rows) See Also , ST_Quantile Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the raster's 25%, 50%, 75% percentile. SETOF record ST_Quantile raster rast integer nband=1 boolean exclude_nodata_value=true double precision[] quantiles=NULL SETOF record ST_Quantile raster rast double precision[] quantiles SETOF record ST_Quantile raster rast integer nband double precision[] quantiles double precision ST_Quantile raster rast double precision quantile double precision ST_Quantile raster rast boolean exclude_nodata_value double precision quantile=NULL double precision ST_Quantile raster rast integer nband double precision quantile double precision ST_Quantile raster rast integer nband boolean exclude_nodata_value double precision quantile double precision ST_Quantile raster rast integer nband double precision quantile SETOF record ST_Quantile text rastertable text rastercolumn integer nband=1 boolean exclude_nodata_value=true double precision[] quantiles=NULL SETOF record ST_Quantile text rastertable text rastercolumn integer nband double precision[] quantiles Description Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be examined to be at the raster's 25%, 50%, 75% percentile. If exclude_nodata_value is set to false, will also count pixels with no data. Availability: 2.0.0 Examples UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,249) WHERE rid=2; --Example will consider only pixels of band 1 that are not 249 and in named quantiles -- SELECT (pvq).* FROM (SELECT ST_Quantile(rast, ARRAY[0.25,0.75]) As pvq FROM dummy_rast WHERE rid=2) As foo ORDER BY (pvq).quantile; quantile | value ----------+------- 0.25 | 253 0.75 | 254 SELECT ST_Quantile(rast, 0.75) As value FROM dummy_rast WHERE rid=2; value ------ 254 --real live example. Quantile of all pixels in band 2 intersecting a geometry SELECT rid, (ST_Quantile(rast,2)).* As pvc FROM o_4_boston WHERE ST_Intersects(rast, ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))',26986) ) ORDER BY value, quantile,rid ; rid | quantile | value -----+----------+------- 1 | 0 | 0 2 | 0 | 0 14 | 0 | 1 15 | 0 | 2 14 | 0.25 | 37 1 | 0.25 | 42 15 | 0.25 | 47 2 | 0.25 | 50 14 | 0.5 | 56 1 | 0.5 | 64 15 | 0.5 | 66 2 | 0.5 | 77 14 | 0.75 | 81 15 | 0.75 | 87 1 | 0.75 | 94 2 | 0.75 | 106 14 | 1 | 199 1 | 1 | 244 2 | 1 | 255 15 | 1 | 255 See Also , ST_SummaryStats Returns record consisting of count, sum, mean, stddev, min, max for a given raster band of a raster or raster coverage. Band 1 is assumed is no band is specified. record ST_SummaryStats text rastertable text rastercolumn boolean exclude_nodata_value record ST_SummaryStats raster rast boolean exclude_nodata_value record ST_SummaryStats text rastertable text rastercolumn integer nband=1 boolean exclude_nodata_value=true record ST_SummaryStats raster rast integer nband boolean exclude_nodata_value Description Returns record consisting of count, sum, mean, stddev, min, max for a given raster band of a raster or raster coverage. If no band is specified nband defaults to 1. By default only considers pixel values not equal to the nodata value. Set exclude_nodata_value to false to get count of all pixels. By default will sample all pixels. To get faster response, set sample_percent to lower than 1 Availability: 2.0.0 Example: Single raster tile SELECT rid, band, (stats).* FROM (SELECT rid, band, ST_SummaryStats(rast, band) As stats FROM dummy_rast CROSS JOIN generate_series(1,3) As band WHERE rid=2) As foo; rid | band | count | sum | mean | stddev | min | max -----+------+-------+------+------------+-----------+-----+----- 2 | 1 | 23 | 5821 | 253.086957 | 1.248061 | 250 | 254 2 | 2 | 25 | 3682 | 147.28 | 59.862188 | 78 | 254 2 | 3 | 25 | 3290 | 131.6 | 61.647384 | 62 | 254 Example: Summarize pixels that intersect buildings of interest This example took 574ms on PostGIS windows 64-bit with all of Boston Buildings and aerial Tiles (tiles each 150x150 pixels ~ 134,000 tiles), ~102,000 building records WITH -- our features of interest feat AS (SELECT gid As building_id, geom_26986 As geom FROM buildings AS b WHERE gid IN(100, 103,150) ), -- clip band 2 of raster tiles to boundaries of builds -- then get stats for these clipped regions b_stats AS (SELECT building_id, (stats).* FROM (SELECT building_id, ST_SummaryStats(ST_Clip(rast,2,geom)) As stats FROM aerials.boston INNER JOIN feat ON ST_Intersects(feat.geom,rast) ) As foo ) -- finally summarize stats SELECT building_id, SUM(count) As num_pixels , MIN(min) As min_pval , MAX(max) As max_pval , SUM(mean*count)/SUM(count) As avg_pval FROM b_stats WHERE count > 0 GROUP BY building_id ORDER BY building_id; building_id | num_pixels | min_pval | max_pval | avg_pval -------------+------------+----------+----------+------------------ 100 | 1090 | 1 | 255 | 61.0697247706422 103 | 655 | 7 | 182 | 70.5038167938931 150 | 895 | 2 | 252 | 185.642458100559 Example: Raster coverage -- stats for each band -- SELECT band, (stats).* FROM (SELECT band, ST_SummaryStats('o_4_boston','rast', band) As stats FROM generate_series(1,3) As band) As foo; band | count | sum | mean | stddev | min | max ------+---------+--------+------------------+------------------+-----+----- 1 | 8450000 | 725799 | 82.7064349112426 | 45.6800222638537 | 0 | 255 2 | 8450000 | 700487 | 81.4197705325444 | 44.2161184161765 | 0 | 255 3 | 8450000 | 575943 | 74.682739408284 | 44.2143885481407 | 0 | 255 -- For a table -- will get better speed if set sampling to less than 100% -- Here we set to 25% and get a much faster answer SELECT band, (stats).* FROM (SELECT band, ST_SummaryStats('o_4_boston','rast', band,true,0.25) As stats FROM generate_series(1,3) As band) As foo; band | count | sum | mean | stddev | min | max ------+---------+--------+------------------+------------------+-----+----- 1 | 2112500 | 180686 | 82.6890480473373 | 45.6961043857248 | 0 | 255 2 | 2112500 | 174571 | 81.448503668639 | 44.2252623171821 | 0 | 255 3 | 2112500 | 144364 | 74.6765884023669 | 44.2014869384578 | 0 | 255 See Also , ST_ValueCount Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and all other values in the pixel are output and pixel band values are rounded to the nearest integer. SETOF record ST_ValueCount raster rast integer nband=1 boolean exclude_nodata_value=true double precision[] searchvalues=NULL double precision roundto=0 double precision OUT value integer OUT count SETOF record ST_ValueCount raster rast integer nband double precision[] searchvalues double precision roundto=0 double precision OUT value integer OUT count SETOF record ST_ValueCount raster rast double precision[] searchvalues double precision roundto=0 double precision OUT value integer OUT count bigint ST_ValueCount raster rast double precision searchvalue double precision roundto=0 bigint ST_ValueCount raster rast integer nband boolean exclude_nodata_value double precision searchvalue double precision roundto=0 bigint ST_ValueCount raster rast integer nband double precision searchvalue double precision roundto=0 SETOF record ST_ValueCount text rastertable text rastercolumn integer nband=1 boolean exclude_nodata_value=true double precision[] searchvalues=NULL double precision roundto=0 double precision OUT value integer OUT count SETOF record ST_ValueCount text rastertable text rastercolumn double precision[] searchvalues double precision roundto=0 double precision OUT value integer OUT count SETOF record ST_ValueCount text rastertable text rastercolumn integer nband double precision[] searchvalues double precision roundto=0 double precision OUT value integer OUT count bigintST_ValueCount text rastertable text rastercolumn integer nband boolean exclude_nodata_value double precision searchvalue double precision roundto=0 bigint ST_ValueCount text rastertable text rastercolumn double precision searchvalue double precision roundto=0 bigint ST_ValueCount text rastertable text rastercolumn integer nband double precision searchvalue double precision roundto=0 Description Returns a set of records with columns value count which contain the pixel band value and count of pixels in the raster tile or raster coverage of selected band. If no band is specified nband defaults to 1. If no searchvalues are specified, will return all pixel values found in the raster or raster coverage. If one searchvalue is given, will return an integer instead of records denoting the count of pixels having that pixel band value If exclude_nodata_value is set to false, will also count pixels with no data. Availability: 2.0.0 Examples UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,249) WHERE rid=2; --Example will count only pixels of band 1 that are not 249. -- SELECT (pvc).* FROM (SELECT ST_ValueCount(rast) As pvc FROM dummy_rast WHERE rid=2) As foo ORDER BY (pvc).value; value | count -------+------- 250 | 2 251 | 1 252 | 2 253 | 6 254 | 12 -- Example will coount all pixels of band 1 including 249 -- SELECT (pvc).* FROM (SELECT ST_ValueCount(rast,1,false) As pvc FROM dummy_rast WHERE rid=2) As foo ORDER BY (pvc).value; value | count -------+------- 249 | 2 250 | 2 251 | 1 252 | 2 253 | 6 254 | 12 -- Example will count only non-nodata value pixels of band 2 SELECT (pvc).* FROM (SELECT ST_ValueCount(rast,2) As pvc FROM dummy_rast WHERE rid=2) As foo ORDER BY (pvc).value; value | count -------+------- 78 | 1 79 | 1 88 | 1 89 | 1 96 | 1 97 | 1 98 | 1 99 | 2 112 | 2 : --real live example. Count all the pixels in an aerial raster tile band 2 intersecting a geometry -- and return only the pixel band values that have a count > 500 SELECT (pvc).value, SUM((pvc).count) As total FROM (SELECT ST_ValueCount(rast,2) As pvc FROM o_4_boston WHERE ST_Intersects(rast, ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))',26986) ) ) As foo GROUP BY (pvc).value HAVING SUM((pvc).count) > 500 ORDER BY (pvc).value; value | total -------+----- 51 | 502 54 | 521 -- Just return count of pixels in each raster tile that have value of 100 of tiles that intersect a specific geometry -- SELECT rid, ST_ValueCount(rast,2,100) As count FROM o_4_boston WHERE ST_Intersects(rast, ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))',26986) ) ; rid | count -----+------- 1 | 56 2 | 95 14 | 37 15 | 64 See Also , Raster Outputs ST_AsBinary Return the Well-Known Binary (WKB) representation of the raster without SRID meta data. bytea ST_AsBinary raster rast boolean outasin=FALSE Description Returns the Binary representation of the raster. If outasin is TRUE, out-db bands are treated as in-db. This is useful in binary cursors to pull data out of the database without converting it to a string representation. By default, WKB output contains the external file path for out-db bands. If the client does not have access to the raster file underlying an out-db band, set outasin to TRUE. Enhanced: 2.1.0 Addition of outasin Examples SELECT ST_AsBinary(rast) As rastbin FROM dummy_rast WHERE rid=1; rastbin --------------------------------------------------------------------------------- \001\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\010@\ 000\000\000\000\000\000\340?\000\000\000\000\000\000\340?\000\000\000\000\000\00 0\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\024\000 ST_AsGDALRaster Return the raster tile in the designated GDAL Raster format. Raster formats are one of those supported by your compiled library. Use ST_GDALRasters() to get a list of formats supported by your library. bytea ST_AsGDALRaster raster rast text format text[] options=NULL integer srid=sameassource Description Returns the raster tile in the designated format. Arguments are itemized below: format format to output. This is dependent on the drivers compiled in your libgdal library. Generally available are 'JPEG', 'GTIff', 'PNG'. Use to get a list of formats supported by your library. options text array of GDAL options. Valid options are dependent on the format. Refer to GDAL Raster format options for more details. srs The proj4text or srtext (from spatial_ref_sys) to embed in the image Availability: 2.0.0 - requires GDAL >= 1.6.0. JPEG Output Examples SELECT ST_AsGDALRaster(rast, 'JPEG') As rastjpg FROM dummy_rast WHERE rid=1; SELECT ST_AsGDALRaster(rast, 'JPEG', ARRAY['QUALITY=50']) As rastjpg FROM dummy_rast WHERE rid=2; GTIFF Output Examples SELECT ST_AsGDALRaster(rast, 'GTiff') As rastjpg FROM dummy_rast WHERE rid=2; -- Out GeoTiff with jpeg compression, 90% quality SELECT ST_AsGDALRaster(rast, 'GTiff', ARRAY['COMPRESS=JPEG', 'JPEG_QUALITY=90'], 4269) As rasttiff FROM dummy_rast WHERE rid=2; See Also , , ST_AsJPEG Return the raster tile selected bands as a single Joint Photographic Exports Group (JPEG) image (byte array). If no band is specified and 1 or more than 3 bands, then only the first band is used. If only 3 bands then all 3 bands are used and mapped to RGB. bytea ST_AsJPEG raster rast text[] options=NULL bytea ST_AsJPEG raster rast integer nband integer quality bytea ST_AsJPEG raster rast integer nband text[] options=NULL bytea ST_AsJPEG raster rast integer[] nbands text[] options=NULL bytea ST_AsJPEG raster rast integer[] nbands integer quality Description Returns the selected bands of the raster as a single Joint Photographic Exports Group Image (JPEG). Use if you need to export as less common raster types. If no band is specified and 1 or more than 3 bands, then only the first band is used. If 3 bands then all 3 bands are used. There are many variants of the function with many options. These are itemized below: nband is for single band exports. nbands is an array of bands to export (note that max is 3 for JPEG) and the order of the bands is RGB. e.g ARRAY[3,2,1] means map band 3 to Red, band 2 to green and band 1 to blue quality number from 0 to 100. The higher the number the crisper the image. options text Array of GDAL options as defined for JPEG (look at create_options for JPEG ). For JPEG valid ones are PROGRESSIVE ON or OFF and QUALITY a range from 0 to 100 and default to 75. Refer to GDAL Raster format options for more details. Availability: 2.0.0 - requires GDAL >= 1.6.0. Examples: Output -- output first 3 bands 75% quality SELECT ST_AsJPEG(rast) As rastjpg FROM dummy_rast WHERE rid=2; -- output only first band as 90% quality SELECT ST_AsJPEG(rast,1,90) As rastjpg FROM dummy_rast WHERE rid=2; -- output first 3 bands (but make band 2 Red, band 1 green, and band 3 blue, progressive and 90% quality SELECT ST_AsJPEG(rast,ARRAY[2,1,3],ARRAY['QUALITY=90','PROGRESSIVE=ON']) As rastjpg FROM dummy_rast WHERE rid=2; See Also , , , , ST_AsPNG Return the raster tile selected bands as a single portable network graphics (PNG) image (byte array). If 1, 3, or 4 bands in raster and no bands are specified, then all bands are used. If more 2 or more than 4 bands and no bands specified, then only band 1 is used. Bands are mapped to RGB or RGBA space. bytea ST_AsPNG raster rast text[] options=NULL bytea ST_AsPNG raster rast integer nband integer compression bytea ST_AsPNG raster rast integer nband text[] options=NULL bytea ST_AsPNG raster rast integer[] nbands integer compression bytea ST_AsPNG raster rast integer[] nbands text[] options=NULL Description Returns the selected bands of the raster as a single Portable Network Graphics Image (PNG). Use if you need to export as less common raster types. If no band is specified, then the first 3 bands are exported. There are many variants of the function with many options. If no srid is specified then then srid of the raster is used. These are itemized below: nband is for single band exports. nbands is an array of bands to export (note that max is 3 for PNG) and the order of the bands is RGB. e.g ARRAY[3,2,1] means map band 3 to Red, band 2 to green and band 1 to blue compression number from 1 to 9. The higher the number the greater the compression. options text Array of GDAL options as defined for PNG (look at create_options for PNG of ). For PNG valid one is only ZLEVEL (amount of time to spend on compression -- default 6) e.g. ARRAY['ZLEVEL=9']. WORLDFILE is not allowed since the function would have to output two outputs. Refer to GDAL Raster format options for more details. Availability: 2.0.0 - requires GDAL >= 1.6.0. Examples SELECT ST_AsPNG(rast) As rastpng FROM dummy_rast WHERE rid=2; -- export the first 3 bands and map band 3 to Red, band 1 to Green, band 2 to blue SELECT ST_AsPNG(rast, ARRAY[3,1,2]) As rastpng FROM dummy_rast WHERE rid=2; See Also , , , ST_AsTIFF Return the raster selected bands as a single TIFF image (byte array). If no band is specified, then will try to use all bands. bytea ST_AsTIFF raster rast text[] options='' integer srid=sameassource bytea ST_AsTIFF raster rast text compression='' integer srid=sameassource bytea ST_AsTIFF raster rast integer[] nbands text compression='' integer srid=sameassource bytea ST_AsTIFF raster rast integer[] nbands text[] options integer srid=sameassource Description Returns the selected bands of the raster as a single Tagged Image File Format (TIFF). If no band is specified, will try to use all bands. This is a wrapper around . Use if you need to export as less common raster types. There are many variants of the function with many options. If no spatial reference SRS text is present, the spatial reference of the raster is used. These are itemized below: nbands is an array of bands to export (note that max is 3 for PNG) and the order of the bands is RGB. e.g ARRAY[3,2,1] means map band 3 to Red, band 2 to green and band 1 to blue compression Compression expression -- JPEG90 (or some other percent), LZW, JPEG, DEFLATE9. options text Array of GDAL create options as defined for GTiff (look at create_options for GTiff of ). or refer to GDAL Raster format options for more details. srid srid of spatial_ref_sys of the raster. This is used to populate the georeference information Availability: 2.0.0 - requires GDAL >= 1.6.0. Examples: Use jpeg compression 90% SELECT ST_AsTIFF(rast, 'JPEG90') As rasttiff FROM dummy_rast WHERE rid=2; See Also , , Raster Processing Map Algebra ST_Clip Returns the raster clipped by the input geometry. If band number not is specified, all bands are processed. If crop is not specified or TRUE, the output raster is cropped. raster ST_Clip raster rast integer[] nband geometry geom double precision[] nodataval=NULL boolean crop=TRUE raster ST_Clip raster rast integer nband geometry geom double precision nodataval boolean crop=TRUE raster ST_Clip raster rast integer nband geometry geom boolean crop raster ST_Clip raster rast geometry geom double precision[] nodataval=NULL boolean crop=TRUE raster ST_Clip raster rast geometry geom double precision nodataval boolean crop=TRUE raster ST_Clip raster rast geometry geom boolean crop Description Returns a raster that is clipped by the input geometry geom. If band index is not specified, all bands are processed. Rasters resulting from ST_Clip must have a nodata value assigned for areas clipped, one for each band. If none are provided and the input raster do not have a nodata value defined, nodata values of the resulting raster are set to ST_MinPossibleValue(ST_BandPixelType(rast, band)). When the number of nodata value in the array is smaller than the number of band, the last one in the array is used for the remaining bands. If the number of nodata value is greater than the number of band, the extra nodata values are ignored. All variants accepting an array of nodata values also accept a single value which will be assigned to each band. If crop is not specified, true is assumed meaning the output raster is cropped to the intersection of the geomand rast extents. If crop is set to false, the new raster gets the same extent as rast. Availability: 2.0.0 Enhanced: 2.1.0 Rewritten in C Examples here use Massachusetts aerial data available on MassGIS site MassGIS Aerial Orthos. Coordinates are in Massachusetts State Plane Meters. Examples: 1 band clipping -- Clip the first band of an aerial tile by a 20 meter buffer. SELECT ST_Clip(rast, 1, ST_Buffer(ST_Centroid(ST_Envelope(rast)),20) ) from aerials.boston WHERE rid = 4; -- Demonstrate effect of crop on final dimensions of raster -- Note how final extent is clipped to that of the geometry -- if crop = true SELECT ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, true))) As xmax_w_trim, ST_XMax(clipper) As xmax_clipper, ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, false))) As xmax_wo_trim, ST_XMax(ST_Envelope(rast)) As xmax_rast_orig FROM (SELECT rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)),6) As clipper FROM aerials.boston WHERE rid = 6) As foo; xmax_w_trim | xmax_clipper | xmax_wo_trim | xmax_rast_orig ------------------+------------------+------------------+------------------ 230657.436173996 | 230657.436173996 | 230666.436173996 | 230666.436173996 Examples: 1 band clipping with no crop and add back other bands unchanged -- Same example as before, but we need to set crop to false to be able to use ST_AddBand -- because ST_AddBand requires all bands be the same Width and height SELECT ST_AddBand(ST_Clip(rast, 1, ST_Buffer(ST_Centroid(ST_Envelope(rast)),20),false ), ARRAY[ST_Band(rast,2),ST_Band(rast,3)] ) from aerials.boston WHERE rid = 6; Examples: Clip all bands -- Clip all bands of an aerial tile by a 20 meter buffer. -- Only difference is we don't specify a specific band to clip -- so all bands are clipped SELECT ST_Clip(rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)), 20), false ) from aerials.boston WHERE rid = 4; See Also , , ST_ColorMap Creates a new raster of up to four 8BUI bands (grayscale, RGB, RGBA) from the source raster and a specified band. Band 1 is assumed if not specified. raster ST_ColorMap raster rast integer nband=1 text colormap=grayscale text method=INTERPOLATE raster ST_ColorMap raster rast text colormap text method=INTERPOLATE Description Apply a colormap to the band at nband of rast resulting a new raster comprised of up to four 8BUI bands. The number of 8BUI bands in the new raster is determined by the number of color components defined in colormap. If nband is not specified, then band 1 is assumed. colormap can be a keyword of a pre-defined colormap or a set of lines defining the value and the color components. Valid pre-defined colormap keyword: grayscale or greyscale for a one 8BUI band raster of shades of gray. pseudocolor for a four 8BUI (RGBA) band raster with colors going from blue to green to red. fire for a four 8BUI (RGBA) band raster with colors going from black to red to pale yellow. bluered for a four 8BUI (RGBA) band raster with colors going from blue to pale white to red. Users can pass a set of entries (one per line) to colormap to specify custom colormaps. Each entry generally consists of five values: the pixel value and corresponding Red, Green, Blue, Alpha components (color components between 0 and 255). Percent values can be used instead of pixel values where 0% and 100% are the minimum and maximum values found in the raster band. Values can be separated with commas (','), tabs, colons (':') and/or spaces. The pixel value can be set to nv, null or nodata for the NODATA value. An example is provided below. 5 0 0 0 255 4 100:50 55 255 1 150,100 150 255 0% 255 255 255 255 nv 0 0 0 0 The syntax of colormap is similar to that of the color-relief mode of GDAL gdaldem. Valid keywords for method: INTERPOLATE to use linear interpolation to smoothly blend the colors between the given pixel values EXACT to strictly match only those pixels values found in the colormap. Pixels whose value does not match a colormap entry will be set to 0 0 0 0 (RGBA) NEAREST to use the colormap entry whose value is closest to the pixel value A great reference for colormaps is ColorBrewer. The resulting bands of new raster will have no NODATA value set. Use to set a NODATA value if one is needed. Availability: 2.1.0 Examples This is a junk table to play with -- setup test raster table -- DROP TABLE IF EXISTS funky_shapes; CREATE TABLE funky_shapes(rast raster); INSERT INTO funky_shapes(rast) WITH ref AS ( SELECT ST_MakeEmptyRaster( 200, 200, 0, 200, 1, -1, 0, 0) AS rast ) SELECT ST_Union(rast) FROM ( SELECT ST_AsRaster( ST_Rotate( ST_Buffer( ST_GeomFromText('LINESTRING(0 2,50 50,150 150,125 50)'), i*2 ), pi() * i * 0.125, ST_Point(50,50) ), ref.rast, '8BUI'::text, i * 5 ) AS rast FROM ref CROSS JOIN generate_series(1, 10, 3) AS i ) AS shapes; SELECT ST_NumBands(rast) As n_orig, ST_NumBands(ST_ColorMap(rast,1, 'greyscale')) As ngrey, ST_NumBands(ST_ColorMap(rast,1, 'pseudocolor')) As npseudo, ST_NumBands(ST_ColorMap(rast,1, 'fire')) As nfire, ST_NumBands(ST_ColorMap(rast,1, 'bluered')) As nbluered, ST_NumBands(ST_ColorMap(rast,1, ' 100% 255 0 0 80% 160 0 0 50% 130 0 0 30% 30 0 0 20% 60 0 0 0% 0 0 0 nv 255 255 255 ')) As nred FROM funky_shapes; n_orig | ngrey | npseudo | nfire | nbluered | nred --------+-------+---------+-------+----------+------ 1 | 1 | 4 | 4 | 4 | 3 Examples: Compare different color map looks using ST_AsPNG SELECT ST_AsPNG(rast) As orig_png, ST_AsPNG(ST_ColorMap(rast,1,'greyscale')) As grey_png, ST_AsPNG(ST_ColorMap(rast,1, 'pseudocolor')) As pseudo_png, ST_AsPNG(ST_ColorMap(rast,1, 'nfire')) As fire_png, ST_AsPNG(ST_ColorMap(rast,1, 'bluered')) As bluered_png, ST_AsPNG(ST_ColorMap(rast,1, ' 100% 255 0 0 80% 160 0 0 50% 130 0 0 30% 30 0 0 20% 60 0 0 0% 0 0 0 nv 255 255 255 ')) As red_png FROM funky_shapes; See Also , , , , , ST_Intersection Returns a raster or a set of geometry-pixelvalue pairs representing the shared portion of two rasters or the geometrical intersection of a vectorization of the raster and a geometry. setof geomval ST_Intersection geometry geom raster rast integer band_num=1 setof geomval ST_Intersection raster rast geometry geom setof geomval ST_Intersection raster rast integer band_num geometry geom raster ST_Intersection raster rast1 raster rast2 double precision[] nodataval raster ST_Intersection raster rast1 raster rast2 text returnband='BOTH' double precision[] nodataval=NULL raster ST_Intersection raster rast1 integer band_num1 raster rast2 integer band_num2 double precision[] nodataval raster ST_Intersection raster rast1 integer band_num1 raster rast2 integer band_num2 text returnband='BOTH' double precision[] nodataval=NULL Description Returns a raster or a set of geometry-pixelvalue pairs representing the shared portion of two rasters or the geometrical intersection of a vectorization of the raster and a geometry. The first three variants, returning a setof geomval, works in vector space. The raster is first vectorized (using ST_DumpAsPolygon) into a set of geomval rows and those rows are then intersected with the geometry using the ST_Intersection(geometry, geometry) PostGIS function. Geometries intersecting only with a nodata value area of a raster returns an empty geometry. They are normally excluded from the results by the proper usage of ST_Intersect in the WHERE clause. You can access the geometry and the value parts of the resulting set of geomval by surrounding them with parenthesis and adding '.geom' or '.val' at the end of the expression. e.g. (ST_Intersection(rast, geom)).geom The other variants, returning a raster, works in raster space. They are using the two rasters version of ST_MapAlgebraExpr to perform the intersection. The extent of the resulting raster corresponds to the geometrical intersection of the two raster extents. The resulting raster includes 'BAND1', 'BAND2' or 'BOTH' bands, following what is passed as the returnband parameter. Nodata value areas present in any band results in nodata value areas in every bands of the result. In other words, any pixel intersecting with a nodata value pixel becomes a nodata value pixel in the result. Rasters resulting from ST_Intersection must have a nodata value assigned for areas not intersecting. You can define or replace the nodata value for any resulting band by providing a nodataval[] array of one or two nodata values depending if you request 'BAND1', 'BAND2' or 'BOTH' bands. The first value in the array replace the nodata value in the first band and the second value replace the nodata value in the second band. If one input band do not have a nodata value defined and none are provided as an array, one is chosen using the ST_MinPossibleValue function. All variant accepting an array of nodata value can also accept a single value which will be assigned to each requested band. In all variants, if no band number is specified band 1 is assumed. To get more control on the resulting extent or on what to return when encountering a nodata value, use the two rasters version of . To compute the intersection of a raster band with a geometry in raster space, use . ST_Clip works on multiple bands rasters and does not return a band corresponding to the rasterized geometry. ST_Intersection should be used in conjunction with ST_Intersects and an index on the raster column and/or the geometry column. Enhanced: 2.0.0 - Intersection in the raster space was introduced. In earlier pre-2.0.0 versions, only intersection performed in vector space were supported. Examples: Geometry, Raster -- resulting in geometry vals SELECT foo.rid, foo.gid, ST_AsText((foo.geomval).geom) As geomwkt, (foo.geomval).val FROM ( SELECT A.rid, g.gid, ST_Intersection(A.rast, g.geom) As geomval FROM dummy_rast AS A CROSS JOIN ( VALUES (1, ST_Point(3427928, 5793243.85) ), (2, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')), (3, ST_GeomFromText('LINESTRING(1 2, 3 4)')) ) As g(gid,geom) WHERE A.rid = 2 ) As foo; rid | gid | geomwkt | val -----+-----+--------------------------------------------------------------------------------------------- 2 | 1 | POINT(3427928 5793243.85) | 249 2 | 1 | POINT(3427928 5793243.85) | 253 2 | 2 | POINT(3427927.85 5793243.75) | 254 2 | 2 | POINT(3427927.8 5793243.8) | 251 2 | 2 | POINT(3427927.8 5793243.8) | 253 2 | 2 | LINESTRING(3427927.8 5793243.75,3427927.8 5793243.8) | 252 2 | 2 | MULTILINESTRING((3427927.8 5793243.8,3427927.8 5793243.75),...) | 250 2 | 3 | GEOMETRYCOLLECTION EMPTY Example: Raster, Geometry -- resulting is a raster Examples coming soon See Also , , , , ST_MapAlgebra Callback function version - Returns a one-band raster given one or more input rasters, band indexes and one user-specified callback function. raster ST_MapAlgebra rastbandarg[] rastbandargset regprocedure callbackfunc text pixeltype=NULL text extenttype=INTERSECTION raster customextent=NULL integer distancex=0 integer distancey=0 text[] VARIADIC userargs=NULL raster ST_MapAlgebra raster rast integer[] nband regprocedure callbackfunc text pixeltype=NULL text extenttype=FIRST raster customextent=NULL integer distancex=0 integer distancey=0 text[] VARIADIC userargs=NULL raster ST_MapAlgebra raster rast integer nband regprocedure callbackfunc text pixeltype=NULL text extenttype=FIRST raster customextent=NULL integer distancex=0 integer distancey=0 text[] VARIADIC userargs=NULL raster ST_MapAlgebra raster rast1 integer nband1 raster rast2 integer nband2 regprocedure callbackfunc text pixeltype=NULL text extenttype=INTERSECTION raster customextent=NULL integer distancex=0 integer distancey=0 text[] VARIADIC userargs=NULL Description Returns a one-band raster given one or more input rasters, band indexes and one user-specified callback function. rast,rast1,rast2, rastbandargset Rasters on which the map algebra process is evaluated.rastbandargset allows the use of a map algebra operation on many rasters and/or many bands. See example Variant 1. nband, nband1, nband2 Band numbers of the raster to be evaluated. nband can be an integer or integer[] denoting the bands. nband1 is band on rast1 and nband2 is band on rast2 for hte 2 raster/2band case. callbackfunc The callbackfunc parameter must be the name and signature of an SQL or PL/pgSQL function, cast to a regprocedure. An example PL/pgSQL function example is: CREATE OR REPLACE FUNCTION sample_callbackfunc(value double precision[][][], position integer[][], VARIADIC userargs text[]) RETURNS double precision AS $$ BEGIN RETURN 0; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; The callbackfunc must have three arguments: a 3-dimension double precision array, a 2-dimension integer array and a variadic 1-dimension text array. The first argument value is the set of values (as double precision) from all input rasters. The three dimensions (where indexes are 1-based) are: raster #, row y, column x. The second argument position is the set of pixel positions from the output raster and input rasters. The outer dimension (where indexes are 0-based) is the raster #. The position at outer dimension index 0 is the output raster's pixel position. For each outer dimension, there are two elements in the inner dimension for X and Y. The third argument userargs is for passing through any user-specified arguments. Passing a regprocedure argument to a SQL function requires the full function signature to be passed, then cast to a regprocedure type. To pass the above example PL/pgSQL function as an argument, the SQL for the argument is: 'sample_callbackfunc(double precision[], integer[], text[])'::regprocedure Note that the argument contains the name of the function, the types of the function arguments, quotes around the name and argument types, and a cast to a regprocedure. pixeltype If pixeltype is passed in, the one band of the new raster will be of that pixeltype. If pixeltype is passed NULL or left out, the new raster band will have the same pixeltype as the specified band of the first raster (for extent types: INTERSECTION, UNION, FIRST, CUSTOM) or the specified band of the appropriate raster (for extent types: SECOND, LAST). If in doubt, always specify pixeltype. The resulting pixel type of the output raster must be one listed in or left out or set to NULL. extenttype Possible values are INTERSECTION (default), UNION, FIRST (default for one raster variants), SECOND, LAST, CUSTOM. customextent If extentype is CUSTOM, a raster must be provided for customextent. See example 4 of Variant 1. distancex The distance in pixels from the reference cell. So width of resulting matrix would be 2*distancex + 1.If not specified only the reference cell is considered (neighborhood of 0). distancey The distance in pixels from reference cell in y direction. Height of resulting matrix would be 2*distancey + 1 .If not specified only the reference cell is considered (neighborhood of 0). userargs The third argument to the callbackfunc is a variadic text array. All trailing text arguments are passed through to the specified callbackfunc, and are contained in the userargs argument. For more information about the VARIADIC keyword, please refer to the PostgreSQL documentation and the "SQL Functions with Variable Numbers of Arguments" section of Query Language (SQL) Functions. The text[] argument to the callbackfunc is required, regardless of whether you choose to pass any arguments to the callback function for processing or not. Variant 1 accepts an array of rastbandarg allowing the use of a map algebra operation on many rasters and/or many bands. See example Variant 1. Variants 2 and 3 operate upon one or more bands of one raster. See example Variant 2 and 3. Variant 4 operate upon two rasters with one band per raster. See example Variant 4. Availability: 2.1.0 Examples: Variant 1 One raster, one band WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast ) SELECT ST_MapAlgebra( ARRAY[ROW(rast, 1)]::rastbandarg[], 'sample_callbackfunc(double precision[], int[], text[])'::regprocedure ) AS rast FROM foo One raster, several bands WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast ) SELECT ST_MapAlgebra( ARRAY[ROW(rast, 3), ROW(rast, 1), ROW(rast, 3), ROW(rast, 2)]::rastbandarg[], 'sample_callbackfunc(double precision[], int[], text[])'::regprocedure ) AS rast FROM foo Several rasters, several bands WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast ) SELECT ST_MapAlgebra( ARRAY[ROW(t1.rast, 3), ROW(t2.rast, 1), ROW(t2.rast, 3), ROW(t1.rast, 2)]::rastbandarg[], 'sample_callbackfunc(double precision[], int[], text[])'::regprocedure ) AS rast FROM foo t1 CROSS JOIN foo t2 WHERE t1.rid = 1 AND t2.rid = 2 Complete example of tiles of a coverage with neighborhood. This query only works with PostgreSQL 9.1 or higher. WITH foo AS ( SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast UNION ALL SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast UNION ALL SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast UNION ALL SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast UNION ALL SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast UNION ALL SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast UNION ALL SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast ) SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], 'sample_callbackfunc(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1 ) AS rast FROM foo t1 CROSS JOIN foo t2 WHERE t1.rid = 4 AND t2.rid BETWEEN 0 AND 8 AND ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rid, t1.rast Example like the prior one for tiles of a coverage with neighborhood but works with PostgreSQL 9.0. WITH src AS ( SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast UNION ALL SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast UNION ALL SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast UNION ALL SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast UNION ALL SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast UNION ALL SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast UNION ALL SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast ) WITH foo AS ( SELECT t1.rid, ST_Union(t2.rast) AS rast FROM src t1 JOIN src t2 ON ST_Intersects(t1.rast, t2.rast) AND t2.rid BETWEEN 0 AND 8 WHERE t1.rid = 4 GROUP BY t1.rid ), bar AS ( SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1 ) AS rast FROM src t1 JOIN foo t2 ON t1.rid = t2.rid ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) FROM bar; Examples: Variants 2 and 3 One raster, several bands WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast ) SELECT ST_MapAlgebra( rast, ARRAY[3, 1, 3, 2]::integer[], 'sample_callbackfunc(double precision[], int[], text[])'::regprocedure ) AS rast FROM foo One raster, one band WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast ) SELECT ST_MapAlgebra( rast, 2, 'sample_callbackfunc(double precision[], int[], text[])'::regprocedure ) AS rast FROM foo Examples: Variant 4 Two rasters, two bands WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast ) SELECT ST_MapAlgebra( t1.rast, 2, t2.rast, 1, 'sample_callbackfunc(double precision[], int[], text[])'::regprocedure ) AS rast FROM foo t1 CROSS JOIN foo t2 WHERE t1.rid = 1 AND t2.rid = 2 See Also , , ST_MapAlgebra Expression version - Returns a one-band raster given one or two input rasters, band indexes and one or more user-specified SQL expressions. raster ST_MapAlgebra raster rast integer nband text pixeltype text expression double precision nodataval=NULL raster ST_MapAlgebra raster rast text pixeltype text expression double precision nodataval=NULL raster ST_MapAlgebra raster rast1 integer nband1 raster rast2 integer nband2 text expression text pixeltype=NULL text extenttype=INTERSECTION text nodata1expr=NULL text nodata2expr=NULL double precision nodatanodataval=NULL raster ST_MapAlgebra raster rast1 raster rast2 text expression text pixeltype=NULL text extenttype=INTERSECTION text nodata1expr=NULL text nodata2expr=NULL double precision nodatanodataval=NULL Description Expression version - Returns a one-band raster given one or two input rasters, band indexes and one or more user-specified SQL expressions. Availability: 2.1.0 Description: Variants 1 and 2 (one raster) Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation defined by the expression on the input raster (rast). If nband is not provided, band 1 is assumed. The new raster will have the same georeference, width, and height as the original raster but will only have one band. If pixeltype is passed in, then the new raster will have a band of that pixeltype. If pixeltype is passed NULL, then the new raster band will have the same pixeltype as the input rast band. Keywords permitted for expression [rast] - Pixel value of the pixel of interest [rast.val] - Pixel value of the pixel of interest [rast.x] - 1-based pixel column of the pixel of interest [rast.y] - 1-based pixel row of the pixel of interest Description: Variants 3 and 4 (two raster) Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation to the two bands defined by the expression on the two input raster bands rast1, (rast2). If no band1, band2 is specified band 1 is assumed. The resulting raster will be aligned (scale, skew and pixel corners) on the grid defined by the first raster. The resulting raster will have the extent defined by the extenttype parameter. expression A PostgreSQL algebraic expression involving the two rasters and PostgreSQL defined functions/operators that will define the pixel value when pixels intersect. e.g. (([rast1] + [rast2])/2.0)::integer pixeltype The resulting pixel type of the output raster. Must be one listed in , left out or set to NULL. If not passed in or set to NULL, will default to the pixeltype of the first raster. extenttype Controls the extent of resulting raster INTERSECTION - The extent of the new raster is the intersection of the two rasters. This is the default. UNION - The extent of the new raster is the union of the two rasters. FIRST - The extent of the new raster is the same as the one of the first raster. SECOND - The extent of the new raster is the same as the one of the second raster. nodata1expr An algebraic expression involving only rast2 or a constant that defines what to return when pixels of rast1 are nodata values and spatially corresponding rast2 pixels have values. nodata2expr An algebraic expression involving only rast1 or a constant that defines what to return when pixels of rast2 are nodata values and spatially corresponding rast1 pixels have values. nodatanodataval A numeric constant to return when spatially corresponding rast1 and rast2 pixels are both nodata values. Keywords permitted in expression, nodata1expr and nodata2expr [rast1] - Pixel value of the pixel of interest from rast1 [rast1.val] - Pixel value of the pixel of interest from rast1 [rast1.x] - 1-based pixel column of the pixel of interest from rast1 [rast1.y] - 1-based pixel row of the pixel of interest from rast1 [rast2] - Pixel value of the pixel of interest from rast2 [rast2.val] - Pixel value of the pixel of interest from rast2 [rast2.x] - 1-based pixel column of the pixel of interest from rast2 [rast2.y] - 1-based pixel row of the pixel of interest from rast2 Examples: Variants 1 and 2 WITH foo AS ( SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF', 1, -1) AS rast ) SELECT ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])') FROM foo Examples: Variant 3 and 4 WITH foo AS ( SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast ) SELECT ST_MapAlgebra( t1.rast, 2, t2.rast, 1, '([rast2] + [rast1.val]) / 2' ) AS rast FROM foo t1 CROSS JOIN foo t2 WHERE t1.rid = 1 AND t2.rid = 2 See Also , , ST_MapAlgebraExpr 1 raster band version: Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation on the input raster band and of pixeltype provided. Band 1 is assumed if no band is specified. raster ST_MapAlgebraExpr raster rast integer band text pixeltype text expression double precision nodataval=NULL raster ST_MapAlgebraExpr raster rast text pixeltype text expression double precision nodataval=NULL Description is deprecated as of 2.1.0. Use instead. Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation defined by the expression on the input raster (rast). If no band is specified band 1 is assumed. The new raster will have the same georeference, width, and height as the original raster but will only have one band. If pixeltype is passed in, then the new raster will have a band of that pixeltype. If pixeltype is passed NULL, then the new raster band will have the same pixeltype as the input rast band. In the expression you can use the term [rast] to refer to the pixel value of the original band, [rast.x] to refer to the 1-based pixel column index, [rast.y] to refer to the 1-based pixel row index. Availability: 2.0.0 Examples Create a new 1 band raster from our original that is a function of modulo 2 of the original raster band. ALTER TABLE dummy_rast ADD COLUMN map_rast raster; UPDATE dummy_rast SET map_rast = ST_MapAlgebraExpr(rast,NULL,'mod([rast],2)') WHERE rid = 2; SELECT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast, 1, i, j) As mapval FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j WHERE rid = 2; origval | mapval ---------+-------- 253 | 1 254 | 0 253 | 1 253 | 1 254 | 0 254 | 0 250 | 0 254 | 0 254 | 0 Create a new 1 band raster of pixel-type 2BUI from our original that is reclassified and set the nodata value to be 0. ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster; UPDATE dummy_rast SET map_rast2 = ST_MapAlgebraExpr(rast,'2BUI','CASE WHEN [rast] BETWEEN 100 and 250 THEN 1 WHEN [rast] = 252 THEN 2 WHEN [rast] BETWEEN 253 and 254 THEN 3 ELSE 0 END', '0') WHERE rid = 2; SELECT DISTINCT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast2, 1, i, j) As mapval FROM dummy_rast CROSS JOIN generate_series(1, 5) AS i CROSS JOIN generate_series(1,5) AS j WHERE rid = 2; origval | mapval ---------+-------- 249 | 1 250 | 1 251 | 252 | 2 253 | 3 254 | 3 SELECT ST_BandPixelType(map_rast2) As b1pixtyp FROM dummy_rast WHERE rid = 2; b1pixtyp ---------- 2BUI Create a new 3 band raster same pixel type from our original 3 band raster with first band altered by map algebra and remaining 2 bands unaltered. SELECT ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(rast_view), ST_MapAlgebraExpr(rast_view,1,NULL,'tan([rast])*[rast]') ), ST_Band(rast_view,2) ), ST_Band(rast_view, 3) As rast_view_ma ) FROM wind WHERE rid=167; See Also , , , , ST_MapAlgebraExpr 2 raster band version: Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation on the two input raster bands and of pixeltype provided. band 1 of each raster is assumed if no band numbers are specified. The resulting raster will be aligned (scale, skew and pixel corners) on the grid defined by the first raster and have its extent defined by the "extenttype" parameter. Values for "extenttype" can be: INTERSECTION, UNION, FIRST, SECOND. raster ST_MapAlgebraExpr raster rast1 raster rast2 text expression text pixeltype=same_as_rast1_band text extenttype=INTERSECTION text nodata1expr=NULL text nodata2expr=NULL double precision nodatanodataval=NULL raster ST_MapAlgebraExpr raster rast1 integer band1 raster rast2 integer band2 text expression text pixeltype=same_as_rast1_band text extenttype=INTERSECTION text nodata1expr=NULL text nodata2expr=NULL double precision nodatanodataval=NULL Description is deprecated as of 2.1.0. Use instead. Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation to the two bands defined by the expression on the two input raster bands rast1, (rast2). If no band1, band2 is specified band 1 is assumed. The resulting raster will be aligned (scale, skew and pixel corners) on the grid defined by the first raster. The resulting raster will have the extent defined by the extenttype parameter. expression A PostgreSQL algebraic expression involving the two rasters and PostgreSQL defined functions/operators that will define the pixel value when pixels intersect. e.g. (([rast1] + [rast2])/2.0)::integer pixeltype The resulting pixel type of the output raster. Must be one listed in , left out or set to NULL. If not passed in or set to NULL, will default to the pixeltype of the first raster. extenttype Controls the extent of resulting raster INTERSECTION - The extent of the new raster is the intersection of the two rasters. This is the default. UNION - The extent of the new raster is the union of the two rasters. FIRST - The extent of the new raster is the same as the one of the first raster. SECOND - The extent of the new raster is the same as the one of the second raster. nodata1expr An algebraic expression involving only rast2 or a constant that defines what to return when pixels of rast1 are nodata values and spatially corresponding rast2 pixels have values. nodata2expr An algebraic expression involving only rast1 or a constant that defines what to return when pixels of rast2 are nodata values and spatially corresponding rast1 pixels have values. nodatanodataval A numeric constant to return when spatially corresponding rast1 and rast2 pixels are both nodata values. If pixeltype is passed in, then the new raster will have a band of that pixeltype. If pixeltype is passed NULL or no pixel type specified, then the new raster band will have the same pixeltype as the input rast1 band. Use the term [rast1.val] [rast2.val] to refer to the pixel value of the original raster bands and [rast1.x], [rast1.y] etc. to refer to the column / row positions of the pixels. Availability: 2.0.0 Example: 2 Band Intersection and Union Create a new 1 band raster from our original that is a function of modulo 2 of the original raster band. --Create a cool set of rasters -- DROP TABLE IF EXISTS fun_shapes; CREATE TABLE fun_shapes(rid serial PRIMARY KEY, fun_name text, rast raster); -- Insert some cool shapes around Boston in Massachusetts state plane meters -- INSERT INTO fun_shapes(fun_name, rast) VALUES ('ref', ST_AsRaster(ST_MakeEnvelope(235229, 899970, 237229, 901930,26986),200,200,'8BUI',0,0)); INSERT INTO fun_shapes(fun_name,rast) WITH ref(rast) AS (SELECT rast FROM fun_shapes WHERE fun_name = 'ref' ) SELECT 'area' AS fun_name, ST_AsRaster(ST_Buffer(ST_SetSRID(ST_Point(236229, 900930),26986), 1000), ref.rast,'8BUI', 10, 0) As rast FROM ref UNION ALL SELECT 'rand bubbles', ST_AsRaster( (SELECT ST_Collect(geom) FROM (SELECT ST_Buffer(ST_SetSRID(ST_Point(236229 + i*random()*100, 900930 + j*random()*100),26986), random()*20) As geom FROM generate_series(1,10) As i, generate_series(1,10) As j ) As foo ), ref.rast,'8BUI', 200, 0) FROM ref; --map them - SELECT ST_MapAlgebraExpr( area.rast, bub.rast, '[rast2.val]', '8BUI', 'INTERSECTION', '[rast2.val]', '[rast1.val]') As interrast, ST_MapAlgebraExpr( area.rast, bub.rast, '[rast2.val]', '8BUI', 'UNION', '[rast2.val]', '[rast1.val]') As unionrast FROM (SELECT rast FROM fun_shapes WHERE fun_name = 'area') As area CROSS JOIN (SELECT rast FROM fun_shapes WHERE fun_name = 'rand bubbles') As bub Example: Overlaying rasters on a canvas as separate bands -- we use ST_AsPNG to render the image so all single band ones look grey -- WITH mygeoms AS ( SELECT 2 As bnum, ST_Buffer(ST_Point(1,5),10) As geom UNION ALL SELECT 3 AS bnum, ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10,'join=bevel') As geom UNION ALL SELECT 1 As bnum, ST_Buffer(ST_GeomFromText('LINESTRING(60 50,150 150,150 50)'), 5,'join=bevel') As geom ), -- define our canvas to be 1 to 1 pixel to geometry canvas AS (SELECT ST_AddBand(ST_MakeEmptyRaster(200, 200, ST_XMin(e)::integer, ST_YMax(e)::integer, 1, -1, 0, 0) , '8BUI'::text,0) As rast FROM (SELECT ST_Extent(geom) As e, Max(ST_SRID(geom)) As srid from mygeoms ) As foo ), rbands AS (SELECT ARRAY(SELECT ST_MapAlgebraExpr(canvas.rast, ST_AsRaster(m.geom, canvas.rast, '8BUI', 100), '[rast2.val]', '8BUI', 'FIRST', '[rast2.val]', '[rast1.val]') As rast FROM mygeoms AS m CROSS JOIN canvas ORDER BY m.bnum) As rasts ) SELECT rasts[1] As rast1 , rasts[2] As rast2, rasts[3] As rast3, ST_AddBand( ST_AddBand(rasts[1],rasts[2]), rasts[3]) As final_rast FROM rbands; Example: Overlay 2 meter boundary of select parcels over an aerial imagery -- Create new 3 band raster composed of first 2 clipped bands, and overlay of 3rd band with our geometry -- This query took 3.6 seconds on PostGIS windows 64-bit install WITH pr AS -- Note the order of operation: we clip all the rasters to dimensions of our region (SELECT ST_Clip(rast,ST_Expand(geom,50) ) As rast, g.geom FROM aerials.o_2_boston AS r INNER JOIN -- union our parcels of interest so they form a single geometry we can later intersect with (SELECT ST_Union(ST_Transform(the_geom,26986)) AS geom FROM landparcels WHERE pid IN('0303890000', '0303900000')) As g ON ST_Intersects(rast::geometry, ST_Expand(g.geom,50)) ), -- we then union the raster shards together -- ST_Union on raster is kinda of slow but much faster the smaller you can get the rasters -- therefore we want to clip first and then union prunion AS (SELECT ST_AddBand(NULL, ARRAY[ST_Union(rast,1),ST_Union(rast,2),ST_Union(rast,3)] ) As clipped,geom FROM pr GROUP BY geom) -- return our final raster which is the unioned shard with -- with the overlay of our parcel boundaries -- add first 2 bands, then mapalgebra of 3rd band + geometry SELECT ST_AddBand(ST_Band(clipped,ARRAY[1,2]) , ST_MapAlgebraExpr(ST_Band(clipped,3), ST_AsRaster(ST_Buffer(ST_Boundary(geom),2),clipped, '8BUI',250), '[rast2.val]', '8BUI', 'FIRST', '[rast2.val]', '[rast1.val]') ) As rast FROM prunion; See Also , , , , , , , , , ST_MapAlgebraFct 1 band version - Creates a new one band raster formed by applying a valid PostgreSQL function on the input raster band and of pixeltype prodived. Band 1 is assumed if no band is specified. raster ST_MapAlgebraFct raster rast regprocedure onerasteruserfunc raster ST_MapAlgebraFct raster rast regprocedure onerasteruserfunc text[] VARIADIC args raster ST_MapAlgebraFct raster rast text pixeltype regprocedure onerasteruserfunc raster ST_MapAlgebraFct raster rast text pixeltype regprocedure onerasteruserfunc text[] VARIADIC args raster ST_MapAlgebraFct raster rast integer band regprocedure onerasteruserfunc raster ST_MapAlgebraFct raster rast integer band regprocedure onerasteruserfunc text[] VARIADIC args raster ST_MapAlgebraFct raster rast integer band text pixeltype regprocedure onerasteruserfunc raster ST_MapAlgebraFct raster rast integer band text pixeltype regprocedure onerasteruserfunc text[] VARIADIC args Description is deprecated as of 2.1.0. Use instead. Creates a new one band raster formed by applying a valid PostgreSQL function specified by the onerasteruserfunc on the input raster (rast). If no band is specified, band 1 is assumed. The new raster will have the same georeference, width, and height as the original raster but will only have one band. If pixeltype is passed in, then the new raster will have a band of that pixeltype. If pixeltype is passed NULL, then the new raster band will have the same pixeltype as the input rast band. The onerasteruserfunc parameter must be the name and signature of a SQL or PL/pgSQL function, cast to a regprocedure. A very simple and quite useless PL/pgSQL function example is: CREATE OR REPLACE FUNCTION simple_function(pixel FLOAT, pos INTEGER[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN RETURN 0.0; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; The userfunction may accept two or three arguments: a float value, an optional integer array, and a variadic text array. The first argument is the value of an individual raster cell (regardless of the raster datatype). The second argument is the position of the current processing cell in the form '{x,y}'. The third argument indicates that all remaining parameters to shall be passed through to the userfunction. Passing a regprodedure argument to a SQL function requires the full function signature to be passed, then cast to a regprocedure type. To pass the above example PL/pgSQL function as an argument, the SQL for the argument is:'simple_function(float,integer[],text[])'::regprocedureNote that the argument contains the name of the function, the types of the function arguments, quotes around the name and argument types, and a cast to a regprocedure. The third argument to the userfunction is a variadic text array. All trailing text arguments to any call are passed through to the specified userfunction, and are contained in the args argument. For more information about the VARIADIC keyword, please refer to the PostgreSQL documentation and the "SQL Functions with Variable Numbers of Arguments" section of Query Language (SQL) Functions. The text[] argument to the userfunction is required, regardless of whether you choose to pass any arguments to your user function for processing or not. Availability: 2.0.0 Examples Create a new 1 band raster from our original that is a function of modulo 2 of the original raster band. ALTER TABLE dummy_rast ADD COLUMN map_rast raster; CREATE FUNCTION mod_fct(pixel float, pos integer[], variadic args text[]) RETURNS float AS $$ BEGIN RETURN pixel::integer % 2; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; UPDATE dummy_rast SET map_rast = ST_MapAlgebraFct(rast,NULL,'mod_fct(float,integer[],text[])'::regprocedure) WHERE rid = 2; SELECT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast, 1, i, j) As mapval FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j WHERE rid = 2; origval | mapval ---------+-------- 253 | 1 254 | 0 253 | 1 253 | 1 254 | 0 254 | 0 250 | 0 254 | 0 254 | 0 Create a new 1 band raster of pixel-type 2BUI from our original that is reclassified and set the nodata value to a passed parameter to the user function (0). ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster; CREATE FUNCTION classify_fct(pixel float, pos integer[], variadic args text[]) RETURNS float AS $$ DECLARE nodata float := 0; BEGIN IF NOT args[1] IS NULL THEN nodata := args[1]; END IF; IF pixel < 251 THEN RETURN 1; ELSIF pixel = 252 THEN RETURN 2; ELSIF pixel > 252 THEN RETURN 3; ELSE RETURN nodata; END IF; END; $$ LANGUAGE 'plpgsql'; UPDATE dummy_rast SET map_rast2 = ST_MapAlgebraFct(rast,'2BUI','classify_fct(float,integer[],text[])'::regprocedure, '0') WHERE rid = 2; SELECT DISTINCT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast2, 1, i, j) As mapval FROM dummy_rast CROSS JOIN generate_series(1, 5) AS i CROSS JOIN generate_series(1,5) AS j WHERE rid = 2; origval | mapval ---------+-------- 249 | 1 250 | 1 251 | 252 | 2 253 | 3 254 | 3 SELECT ST_BandPixelType(map_rast2) As b1pixtyp FROM dummy_rast WHERE rid = 2; b1pixtyp ---------- 2BUI Create a new 3 band raster same pixel type from our original 3 band raster with first band altered by map algebra and remaining 2 bands unaltered.CREATE FUNCTION rast_plus_tan(pixel float, pos integer[], variadic args text[]) RETURNS float AS $$ BEGIN RETURN tan(pixel) * pixel; END; $$ LANGUAGE 'plpgsql'; SELECT ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(rast_view), ST_MapAlgebraFct(rast_view,1,NULL,'rast_plus_tan(float,integer[],text[])'::regprocedure) ), ST_Band(rast_view,2) ), ST_Band(rast_view, 3) As rast_view_ma ) FROM wind WHERE rid=167; See Also , , , ST_MapAlgebraFct 2 band version - Creates a new one band raster formed by applying a valid PostgreSQL function on the 2 input raster bands and of pixeltype prodived. Band 1 is assumed if no band is specified. Extent type defaults to INTERSECTION if not specified. raster ST_MapAlgebraFct raster rast1 raster rast2 regprocedure tworastuserfunc text pixeltype=same_as_rast1 text extenttype=INTERSECTION text[] VARIADIC userargs raster ST_MapAlgebraFct raster rast1 integer band1 raster rast2 integer band2 regprocedure tworastuserfunc text pixeltype=same_as_rast1 text extenttype=INTERSECTION text[] VARIADIC userargs Description is deprecated as of 2.1.0. Use instead. Creates a new one band raster formed by applying a valid PostgreSQL function specified by the tworastuserfunc on the input raster rast1, rast2. If no band1 or band2 is specified, band 1 is assumed. The new raster will have the same georeference, width, and height as the original rasters but will only have one band. If pixeltype is passed in, then the new raster will have a band of that pixeltype. If pixeltype is passed NULL or left out, then the new raster band will have the same pixeltype as the input rast1 band. The tworastuserfunc parameter must be the name and signature of an SQL or PL/pgSQL function, cast to a regprocedure. An example PL/pgSQL function example is: CREATE OR REPLACE FUNCTION simple_function_for_two_rasters(pixel1 FLOAT, pixel2 FLOAT, pos INTEGER[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN RETURN 0.0; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; The tworastuserfunc may accept three or four arguments: a double precision value, a double precision value, an optional integer array, and a variadic text array. The first argument is the value of an individual raster cell in rast1 (regardless of the raster datatype). The second argument is an individual raster cell value in rast2. The third argument is the position of the current processing cell in the form '{x,y}'. The fourth argument indicates that all remaining parameters to shall be passed through to the tworastuserfunc. Passing a regprodedure argument to a SQL function requires the full function signature to be passed, then cast to a regprocedure type. To pass the above example PL/pgSQL function as an argument, the SQL for the argument is:'simple_function(double precision, double precision, integer[], text[])'::regprocedureNote that the argument contains the name of the function, the types of the function arguments, quotes around the name and argument types, and a cast to a regprocedure. The third argument to the tworastuserfunc is a variadic text array. All trailing text arguments to any call are passed through to the specified tworastuserfunc, and are contained in the userargs argument. For more information about the VARIADIC keyword, please refer to the PostgreSQL documentation and the "SQL Functions with Variable Numbers of Arguments" section of Query Language (SQL) Functions. The text[] argument to the tworastuserfunc is required, regardless of whether you choose to pass any arguments to your user function for processing or not. Availability: 2.0.0 Example: Overlaying rasters on a canvas as separate bands -- define our user defined function -- CREATE OR REPLACE FUNCTION raster_mapalgebra_union( rast1 double precision, rast2 double precision, pos integer[], VARIADIC userargs text[] ) RETURNS double precision AS $$ DECLARE BEGIN CASE WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN RETURN ((rast1 + rast2)/2.); WHEN rast1 IS NULL AND rast2 IS NULL THEN RETURN NULL; WHEN rast1 IS NULL THEN RETURN rast2; ELSE RETURN rast1; END CASE; RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE COST 1000; -- prep our test table of rasters DROP TABLE IF EXISTS map_shapes; CREATE TABLE map_shapes(rid serial PRIMARY KEY, rast raster, bnum integer, descrip text); INSERT INTO map_shapes(rast,bnum, descrip) WITH mygeoms AS ( SELECT 2 As bnum, ST_Buffer(ST_Point(90,90),30) As geom, 'circle' As descrip UNION ALL SELECT 3 AS bnum, ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 15) As geom, 'big road' As descrip UNION ALL SELECT 1 As bnum, ST_Translate(ST_Buffer(ST_GeomFromText('LINESTRING(60 50,150 150,150 50)'), 8,'join=bevel'), 10,-6) As geom, 'small road' As descrip ), -- define our canvas to be 1 to 1 pixel to geometry canvas AS ( SELECT ST_AddBand(ST_MakeEmptyRaster(250, 250, ST_XMin(e)::integer, ST_YMax(e)::integer, 1, -1, 0, 0 ) , '8BUI'::text,0) As rast FROM (SELECT ST_Extent(geom) As e, Max(ST_SRID(geom)) As srid from mygeoms ) As foo ) -- return our rasters aligned with our canvas SELECT ST_AsRaster(m.geom, canvas.rast, '8BUI', 240) As rast, bnum, descrip FROM mygeoms AS m CROSS JOIN canvas UNION ALL SELECT canvas.rast, 4, 'canvas' FROM canvas; -- Map algebra on single band rasters and then collect with ST_AddBand INSERT INTO map_shapes(rast,bnum,descrip) SELECT ST_AddBand(ST_AddBand(rasts[1], rasts[2]),rasts[3]), 4, 'map bands overlay fct union (canvas)' FROM (SELECT ARRAY(SELECT ST_MapAlgebraFct(m1.rast, m2.rast, 'raster_mapalgebra_union(double precision, double precision, integer[], text[])'::regprocedure, '8BUI', 'FIRST') FROM map_shapes As m1 CROSS JOIN map_shapes As m2 WHERE m1.descrip = 'canvas' AND m2.descrip <> 'canvas' ORDER BY m2.bnum) As rasts) As foo; User Defined function that takes extra args CREATE OR REPLACE FUNCTION raster_mapalgebra_userargs( rast1 double precision, rast2 double precision, pos integer[], VARIADIC userargs text[] ) RETURNS double precision AS $$ DECLARE BEGIN CASE WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN RETURN least(userargs[1]::integer,(rast1 + rast2)/2.); WHEN rast1 IS NULL AND rast2 IS NULL THEN RETURN userargs[2]::integer; WHEN rast1 IS NULL THEN RETURN greatest(rast2,random()*userargs[3]::integer)::integer; ELSE RETURN greatest(rast1, random()*userargs[4]::integer)::integer; END CASE; RETURN NULL; END; $$ LANGUAGE 'plpgsql' VOLATILE COST 1000; SELECT ST_MapAlgebraFct(m1.rast, 1, m1.rast, 3, 'raster_mapalgebra_userargs(double precision, double precision, integer[], text[])'::regprocedure, '8BUI', 'INTERSECT', '100','200','200','0') FROM map_shapes As m1 WHERE m1.descrip = 'map bands overlay fct union (canvas)'; See Also , , , ST_MapAlgebraFctNgb 1-band version: Map Algebra Nearest Neighbor using user-defined PostgreSQL function. Return a raster which values are the result of a PLPGSQL user function involving a neighborhood of values from the input raster band. raster ST_MapAlgebraFctNgb raster rast integer band text pixeltype integer ngbwidth integer ngbheight regprocedure onerastngbuserfunc text nodatamode text[] VARIADIC args Description is deprecated as of 2.1.0. Use instead. (one raster version) Return a raster which values are the result of a PLPGSQL user function involving a neighborhood of values from the input raster band. The user function takes the neighborhood of pixel values as an array of numbers, for each pixel, returns the result from the user function, replacing pixel value of currently inspected pixel with the function result. rast Raster on which the user function is evaluated. band Band number of the raster to be evaluated. Default to 1. pixeltype The resulting pixel type of the output raster. Must be one listed in or left out or set to NULL. If not passed in or set to NULL, will default to the pixeltype of the rast. Results are truncated if they are larger than what is allowed for the pixeltype. ngbwidth The width of the neighborhood, in cells. ngbheight The height of the neighborhood, in cells. onerastngbuserfunc PLPGSQL/psql user function to apply to neighborhood pixels of a single band of a raster. The first element is a 2-dimensional array of numbers representing the rectangular pixel neighborhood nodatamode Defines what value to pass to the function for a neighborhood pixel that is nodata or NULL 'ignore': any NODATA values encountered in the neighborhood are ignored by the computation -- this flag must be sent to the user callback function, and the user function decides how to ignore it. 'NULL': any NODATA values encountered in the neighborhood will cause the resulting pixel to be NULL -- the user callback function is skipped in this case. 'value': any NODATA values encountered in the neighborhood are replaced by the reference pixel (the one in the center of the neighborhood). Note that if this value is NODATA, the behavior is the same as 'NULL' (for the affected neighborhood) args Arguments to pass into the user function. Availability: 2.0.0 Examples Examples utilize the katrina raster loaded as a single tile described in http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html and then prepared in the examples -- -- A simple 'callback' user function that averages up all the values in a neighborhood. -- CREATE OR REPLACE FUNCTION rast_avg(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE _matrix float[][]; x1 integer; x2 integer; y1 integer; y2 integer; sum float; BEGIN _matrix := matrix; sum := 0; FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP sum := sum + _matrix[x][y]; END LOOP; END LOOP; RETURN (sum*1.0/(array_upper(matrix,1)*array_upper(matrix,2) ))::integer ; END; $$ LANGUAGE 'plpgsql' IMMUTABLE COST 1000; -- now we apply to our raster averaging pixels within 2 pixels of each other in X and Y direction -- SELECT ST_MapAlgebraFctNgb(rast, 1, '8BUI', 4,4, 'rast_avg(float[][], text, text[])'::regprocedure, 'NULL', NULL) As nn_with_border FROM katrinas_rescaled limit 1; See Also , , ST_Reclass Creates a new raster composed of band types reclassified from original. The nband is the band to be changed. If nband is not specified assumed to be 1. All other bands are returned unchanged. Use case: convert a 16BUI band to a 8BUI and so forth for simpler rendering as viewable formats. raster ST_Reclass raster rast integer nband text reclassexpr text pixeltype double precision nodataval=NULL raster ST_Reclass raster rast reclassarg[] VARIADIC reclassargset raster ST_Reclass raster rast text reclassexpr text pixeltype Description Creates a new raster formed by applying a valid PostgreSQL algebraic operation defined by the reclassexpr on the input raster (rast). If no band is specified band 1 is assumed. The new raster will have the same georeference, width, and height as the original raster. Bands not designated will come back unchanged. Refer to for description of valid reclassification expressions. The bands of the new raster will have pixel type of pixeltype. If reclassargset is passed in then each reclassarg defines behavior of each band generated. Availability: 2.0.0 Examples Basic Create a new raster from the original where band 2 is converted from 8BUI to 4BUI and all values from 101-254 are set to nodata value. ALTER TABLE dummy_rast ADD COLUMN reclass_rast raster; UPDATE dummy_rast SET reclass_rast = ST_Reclass(rast,2,'0-87:1-10, 88-100:11-15, 101-254:0-0', '4BUI',0) WHERE rid = 2; SELECT i as col, j as row, ST_Value(rast,2,i,j) As origval, ST_Value(reclass_rast, 2, i, j) As reclassval, ST_Value(reclass_rast, 2, i, j, false) As reclassval_include_nodata FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j WHERE rid = 2; col | row | origval | reclassval | reclassval_include_nodata -----+-----+---------+------------+--------------------------- 1 | 1 | 78 | 9 | 9 2 | 1 | 98 | 14 | 14 3 | 1 | 122 | | 0 1 | 2 | 96 | 14 | 14 2 | 2 | 118 | | 0 3 | 2 | 180 | | 0 1 | 3 | 99 | 15 | 15 2 | 3 | 112 | | 0 3 | 3 | 169 | | 0 Example: Advanced using multiple reclassargs Create a new raster from the original where band 1,2,3 is converted to 1BB,4BUI, 4BUI respectively and reclassified. Note this uses the variadic reclassarg argument which can take as input an indefinite number of reclassargs (theoretically as many bands as you have) UPDATE dummy_rast SET reclass_rast = ST_Reclass(rast, ROW(2,'0-87]:1-10, (87-100]:11-15, (101-254]:0-0', '4BUI',NULL)::reclassarg, ROW(1,'0-253]:1, 254:0', '1BB', NULL)::reclassarg, ROW(3,'0-70]:1, (70-86:2, [86-150):3, [150-255:4', '4BUI', NULL)::reclassarg ) WHERE rid = 2; SELECT i as col, j as row,ST_Value(rast,1,i,j) As ov1, ST_Value(reclass_rast, 1, i, j) As rv1, ST_Value(rast,2,i,j) As ov2, ST_Value(reclass_rast, 2, i, j) As rv2, ST_Value(rast,3,i,j) As ov3, ST_Value(reclass_rast, 3, i, j) As rv3 FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j WHERE rid = 2; col | row | ov1 | rv1 | ov2 | rv2 | ov3 | rv3 ----+-----+-----+-----+-----+-----+-----+----- 1 | 1 | 253 | 1 | 78 | 9 | 70 | 1 2 | 1 | 254 | 0 | 98 | 14 | 86 | 3 3 | 1 | 253 | 1 | 122 | 0 | 100 | 3 1 | 2 | 253 | 1 | 96 | 14 | 80 | 2 2 | 2 | 254 | 0 | 118 | 0 | 108 | 3 3 | 2 | 254 | 0 | 180 | 0 | 162 | 4 1 | 3 | 250 | 1 | 99 | 15 | 90 | 3 2 | 3 | 254 | 0 | 112 | 0 | 108 | 3 3 | 3 | 254 | 0 | 169 | 0 | 175 | 4 Example: Advanced Map a single band 32BF raster to multiple viewable bands Create a new 3 band (8BUI,8BUI,8BUI viewable raster) from a raster that has only one 32bf band ALTER TABLE wind ADD COLUMN rast_view raster; UPDATE wind set rast_view = ST_AddBand( NULL, ARRAY[ ST_Reclass(rast, 1,'0.1-10]:1-10,9-10]:11,(11-33:0'::text, '8BUI'::text,0), ST_Reclass(rast,1, '11-33):0-255,[0-32:0,(34-1000:0'::text, '8BUI'::text,0), ST_Reclass(rast,1,'0-32]:0,(32-100:100-255'::text, '8BUI'::text,0) ] ); See Also , , , , , ST_Union Returns the union of a set of raster tiles into a single raster composed of 1 or more bands. raster ST_Union setof raster rast raster ST_Union setof raster rast unionarg[] unionargset raster ST_Union setof raster rast integer nband raster ST_Union setof raster rast text uniontype raster ST_Union setof raster rast integer nband text uniontype Description Returns the union of a set of raster tiles into a single raster composed of at least one band. The resulting raster's extent is the extent of the whole set. In the case of intersection, the resulting value is defined by uniontype which is one of the following: LAST (default), FIRST, MIN, MAX, COUNT, SUM, MEAN, RANGE. Availability: 2.0.0 Enhanced: 2.1.0 Improved Speed (fully C-Based). Availability: 2.1.0 ST_Union(rast, unionarg) variant was introduced. Enhanced: 2.1.0 ST_Union(rast) (variant 1) unions all bands of all input rasters. Prior versions of PostGIS assumed the first band. Enhanced: 2.1.0 ST_Union(rast, uniontype) (variant 4) unions all bands of all input rasters. Examples: Reconstitute a single band chunked raster tile -- this creates a single band from first band of raster tiles -- that form the original file system tile SELECT filename, ST_Union(rast,1) As file_rast FROM sometable WHERE filename IN('dem01', 'dem02') GROUP BY filename; Examples: Return a multi-band raster that is the union of tiles intersecting geometry -- this creates a multi band raster collecting all the tiles that intersect a line -- Note: In 2.0, this would have just returned a single band raster -- , new union works on all bands by default -- this is equivalent to unionarg: ARRAY[ROW(1, 'LAST'), ROW(2, 'LAST'), ROW(3, 'LAST')]::unionarg[] SELECT ST_Union(rast) FROM aerials.boston WHERE ST_Intersects(rast, ST_GeomFromText('LINESTRING(230486 887771, 230500 88772)',26986) ); Examples: Return a multi-band raster that is the union of tiles intersecting geometry Here we use the longer syntax if we only wanted a subset of bands or we want to change order of bands -- this creates a multi band raster collecting all the tiles that intersect a line SELECT ST_Union(rast,ARRAY[ROW(2, 'LAST'), ROW(1, 'LAST'), ROW(3, 'LAST')]::unionarg[]) FROM aerials.boston WHERE ST_Intersects(rast, ST_GeomFromText('LINESTRING(230486 887771, 230500 88772)',26986) ); See Also , , , , Built-in Map Algebra Callback Functions ST_Distinct4ma Raster processing function that calculates the number of unique pixel values in a neighborhood. float8 ST_Distinct4ma float8[][] matrix text nodatamode text[] VARIADIC args double precision ST_Distinct4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate the number of unique pixel values in a neighborhood of pixels. Variant 1 is a specialized callback function for use as a callback parameter to . Variant 2 is a specialized callback function for use as a callback parameter to . Use of Variant 1 is discouraged since has been deprecated as of 2.1.0. Availability: 2.0.0 Enhanced: 2.1.0 Addition of Variant 2 Examples SELECT rid, st_value( st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_distinct4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2 ) FROM dummy_rast WHERE rid = 2; rid | st_value -----+---------- 2 | 3 (1 row) See Also , , , , , , , ST_InvDistWeight4ma Raster processing function that interpolates a pixel's value from the pixel's neighborhood. double precision ST_InvDistWeight4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate an interpolated value for a pixel using the Inverse Distance Weighted method. There are two optional parameters that can be passed through userargs. The first parameter is the power factor (variable k in the equation below) between 0 and 1 used in the Inverse Distance Weighted equation. If not specified, default value is 1. The second parameter is the weight percentage applied only when the value of the pixel of interest is included with the interpolated value from the neighborhood. If not specified and the pixel of interest has a value, that value is returned. The basic inverse distance weight equation is: This function is a specialized callback function for use as a callback parameter to . Availability: 2.1.0 Examples -- NEEDS EXAMPLE See Also , ST_Max4ma Raster processing function that calculates the maximum pixel value in a neighborhood. float8 ST_Max4ma float8[][] matrix text nodatamode text[] VARIADIC args double precision ST_Max4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate the maximum pixel value in a neighborhood of pixels. For Variant 2, a substitution value for NODATA pixels can be specified by passing that value to userargs. Variant 1 is a specialized callback function for use as a callback parameter to . Variant 2 is a specialized callback function for use as a callback parameter to . Use of Variant 1 is discouraged since has been deprecated as of 2.1.0. Availability: 2.0.0 Enhanced: 2.1.0 Addition of Variant 2 Examples SELECT rid, st_value( st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_max4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2 ) FROM dummy_rast WHERE rid = 2; rid | st_value -----+---------- 2 | 254 (1 row) See Also , , , , , , , ST_Mean4ma Raster processing function that calculates the mean pixel value in a neighborhood. float8 ST_Mean4ma float8[][] matrix text nodatamode text[] VARIADIC args double precision ST_Mean4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate the mean pixel value in a neighborhood of pixels. For Variant 2, a substitution value for NODATA pixels can be specified by passing that value to userargs. Variant 1 is a specialized callback function for use as a callback parameter to . Variant 2 is a specialized callback function for use as a callback parameter to . Use of Variant 1 is discouraged since has been deprecated as of 2.1.0. Availability: 2.0.0 Enhanced: 2.1.0 Addition of Variant 2 Examples SELECT rid, st_value( st_mapalgebrafctngb(rast, 1, '32BF', 1, 1, 'st_mean4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2 ) FROM dummy_rast WHERE rid = 2; rid | st_value -----+------------------ 2 | 253.222229003906 (1 row) See Also , , , , , , ST_Min4ma Raster processing function that calculates the minimum pixel value in a neighborhood. float8 ST_Min4ma float8[][] matrix text nodatamode text[] VARIADIC args double precision ST_Min4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate the minimum pixel value in a neighborhood of pixels. For Variant 2, a substitution value for NODATA pixels can be specified by passing that value to userargs. Variant 1 is a specialized callback function for use as a callback parameter to . Variant 2 is a specialized callback function for use as a callback parameter to . Use of Variant 1 is discouraged since has been deprecated as of 2.1.0. Availability: 2.0.0 Enhanced: 2.1.0 Addition of Variant 2 Examples SELECT rid, st_value( st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_min4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2 ) FROM dummy_rast WHERE rid = 2; rid | st_value -----+---------- 2 | 250 (1 row) See Also , , , , , , , ST_MinDist4ma Raster processing function that returns the minimum distance (in number of pixels) between the pixel of interest and a neighboring pixel with value. double precision ST_MinDist4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Return the shortest distance (in number of pixels) between the pixel of interest and the closest pixel with value in the neighborhood. The intent of this function is to provide an informative data point that helps infer the usefulness of the pixel of interest's interpolated value from . This function is particularly useful when the neighborhood is sparsely populated. This function is a specialized callback function for use as a callback parameter to . Availability: 2.1.0 Examples -- NEEDS EXAMPLE See Also , ST_Range4ma Raster processing function that calculates the range of pixel values in a neighborhood. float8 ST_Range4ma float8[][] matrix text nodatamode text[] VARIADIC args double precision ST_Range4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate the range of pixel values in a neighborhood of pixels. For Variant 2, a substitution value for NODATA pixels can be specified by passing that value to userargs. Variant 1 is a specialized callback function for use as a callback parameter to . Variant 2 is a specialized callback function for use as a callback parameter to . Use of Variant 1 is discouraged since has been deprecated as of 2.1.0. Availability: 2.0.0 Enhanced: 2.1.0 Addition of Variant 2 Examples SELECT rid, st_value( st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_range4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2 ) FROM dummy_rast WHERE rid = 2; rid | st_value -----+---------- 2 | 4 (1 row) See Also , , , , , , , ST_StdDev4ma Raster processing function that calculates the standard deviation of pixel values in a neighborhood. float8 ST_StdDev4ma float8[][] matrix text nodatamode text[] VARIADIC args double precision ST_StdDev4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate the standard deviation of pixel values in a neighborhood of pixels. Variant 1 is a specialized callback function for use as a callback parameter to . Variant 2 is a specialized callback function for use as a callback parameter to . Use of Variant 1 is discouraged since has been deprecated as of 2.1.0. Availability: 2.0.0 Enhanced: 2.1.0 Addition of Variant 2 Examples SELECT rid, st_value( st_mapalgebrafctngb(rast, 1, '32BF', 1, 1, 'st_stddev4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2 ) FROM dummy_rast WHERE rid = 2; rid | st_value -----+------------------ 2 | 1.30170822143555 (1 row) See Also , , , , , , , ST_Sum4ma Raster processing function that calculates the sum of all pixel values in a neighborhood. float8 ST_Sum4ma float8[][] matrix text nodatamode text[] VARIADIC args double precision ST_Sum4ma double precision[][][] value integer[][] pos text[] VARIADIC userargs Description Calculate the sum of all pixel values in a neighborhood of pixels. For Variant 2, a substitution value for NODATA pixels can be specified by passing that value to userargs. Variant 1 is a specialized callback function for use as a callback parameter to . Variant 2 is a specialized callback function for use as a callback parameter to . Use of Variant 1 is discouraged since has been deprecated as of 2.1.0. Availability: 2.0.0 Enhanced: 2.1.0 Addition of Variant 2 Examples SELECT rid, st_value( st_mapalgebrafctngb(rast, 1, '32BF', 1, 1, 'st_sum4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2 ) FROM dummy_rast WHERE rid = 2; rid | st_value -----+---------- 2 | 2279 (1 row) See Also , , , , , , , DEM (Elevation) ST_Aspect Returns the aspect (in degrees by default) of an elevation raster band. Useful for analyzing terrain. raster ST_Aspect raster rast integer band=1 text pixeltype=32BF text units=DEGREES boolean interpolate_nodata=FALSE raster ST_Aspect raster rast integer band raster customextent text pixeltype=32BF text units=DEGREES boolean interpolate_nodata=FALSE Description Returns the aspect (in degrees by default) of an elevation raster band. Utilizes map algebra and applies the aspect equation to neighboring pixels. units indicates the units of the aspect. Possible values are: RADIANS, DEGREES (default). When units = RADIANS, values are between 0 and 2 * pi radians measured clockwise from North. When units = DEGREES, values are between 0 and 360 degrees measured clockwise from North. If slope of pixel is zero, aspect of pixel is -1. For more information about Slope, Aspect and Hillshade, please refer to ESRI - How hillshade works and ERDAS Field Guide - Aspect Images. Availability: 2.0.0 Enhanced: 2.1.0 Uses ST_MapAlgebra() and added optional interpolate_nodata function parameter Changed: 2.1.0 In prior versions, return values were in radians. Now, return values default to degrees Examples: Variant 1 WITH foo AS ( SELECT ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1], [1, 2, 2, 2, 1], [1, 2, 3, 2, 1], [1, 2, 2, 2, 1], [1, 1, 1, 1, 1] ]::double precision[][] ) AS rast ) SELECT ST_DumpValues(ST_Aspect(rast, 1, '32BF')) FROM foo st_dumpvalues ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------- (1,"{{315,341.565063476562,0,18.4349479675293,45},{288.434936523438,315,0,45,71.5650482177734},{270,270,-1,90,90},{251.565048217773,225,180,135,108.434951782227},{225,198.43495178 2227,180,161.565048217773,135}}") (1 row) Examples: Variant 2 Complete example of tiles of a coverage. This query only works with PostgreSQL 9.1 or higher. WITH foo AS ( SELECT ST_Tile( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999 ), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2, 1], [1, 2, 2, 3, 3, 1], [1, 1, 3, 2, 1, 1], [1, 2, 2, 1, 2, 1], [1, 1, 1, 1, 1, 1] ]::double precision[] ), 2, 2 ) AS rast ) SELECT t1.rast, ST_Aspect(ST_Union(t2.rast), 1, t1.rast) FROM foo t1 CROSS JOIN foo t2 WHERE ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rast; See Also , , , , , ST_HillShade Returns the hypothetical illumination of an elevation raster band using provided azimuth, altitude, brightness and scale inputs. raster ST_HillShade raster rast integer band=1 text pixeltype=32BF double precision azimuth=315 double precision altitude=45 double precision max_bright=255 double precision scale=1.0 boolean interpolate_nodata=FALSE raster ST_HillShade raster rast integer band raster customextent text pixeltype=32BF double precision azimuth=315 double precision altitude=45 double precision max_bright=255 double precision scale=1.0 boolean interpolate_nodata=FALSE Description Returns the hypothetical illumination of an elevation raster band using the azimuth, altitude, brightness, and scale inputs. Utilizes map algebra and applies the hill shade equation to neighboring pixels. Return pixel values are between 0 and 255. azimuth is a value between 0 and 360 degrees measured clockwise from North. altitude is a value between 0 and 90 degrees where 0 degrees is at the horizon and 90 degrees is directly overhead. max_bright is a value between 0 and 255 with 0 as no brightness and 255 as max brightness. scale is the ratio of vertical units to horizontal. For Feet:LatLon use scale=370400, for Meters:LatLon use scale=111120. If interpolate_nodata is TRUE, values for NODATA pixels from the input raster will be interpolated using before computing the hillshade illumination. For more information about Hillshade, please refer to How hillshade works. Availability: 2.0.0 Enhanced: 2.1.0 Uses ST_MapAlgebra() and added optional interpolate_nodata function parameter Changed: 2.1.0 In prior versions, azimuth and altitude were expressed in radians. Now, azimuth and altitude are expressed in degrees Examples: Variant 1 WITH foo AS ( SELECT ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1], [1, 2, 2, 2, 1], [1, 2, 3, 2, 1], [1, 2, 2, 2, 1], [1, 1, 1, 1, 1] ]::double precision[][] ) AS rast ) SELECT ST_DumpValues(ST_Hillshade(rast, 1, '32BF')) FROM foo st_dumpvalues ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------- (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,251.32763671875,220.749786376953,147.224319458008,NULL},{NULL,220.749786376953,180.312225341797,67.7497863769531,NULL},{NULL,147.224319458008 ,67.7497863769531,43.1210060119629,NULL},{NULL,NULL,NULL,NULL,NULL}}") (1 row) Examples: Variant 2 Complete example of tiles of a coverage. This query only works with PostgreSQL 9.1 or higher. WITH foo AS ( SELECT ST_Tile( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999 ), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2, 1], [1, 2, 2, 3, 3, 1], [1, 1, 3, 2, 1, 1], [1, 2, 2, 1, 2, 1], [1, 1, 1, 1, 1, 1] ]::double precision[] ), 2, 2 ) AS rast ) SELECT t1.rast, ST_Hillshade(ST_Union(t2.rast), 1, t1.rast) FROM foo t1 CROSS JOIN foo t2 WHERE ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rast; See Also , , , , , ST_Roughness Returns a raster with the calculated "roughness" of a DEM. raster ST_Roughness raster rast integer nband raster customextent text pixeltype="32BF" boolean interpolate_nodata=FALSE Description Calculates the "roughness" of a DEM, by subtracting the maximum from the minimum for a given area. Availability: 2.1.0 Examples -- needs examples See Also , , , , , ST_Slope Returns the slope (in degrees by default) of an elevation raster band. Useful for analyzing terrain. raster ST_Slope raster rast integer nband=1 text pixeltype=32BF text units=DEGREES double precision scale=1.0 boolean interpolate_nodata=FALSE raster ST_Slope raster rast integer nband raster customextent text pixeltype=32BF text units=DEGREES double precision scale=1.0 boolean interpolate_nodata=FALSE Description Returns the slope (in degrees by default) of an elevation raster band. Utilizes map algebra and applies the slope equation to neighboring pixels. units indicates the units of the slope. Possible values are: RADIANS, DEGREES (default), PERCENT. scale is the ratio of vertical units to horizontal. For Feet:LatLon use scale=370400, for Meters:LatLon use scale=111120. If interpolate_nodata is TRUE, values for NODATA pixels from the input raster will be interpolated using before computing the surface slope. For more information about Slope, Aspect and Hillshade, please refer to ESRI - How hillshade works and ERDAS Field Guide - Slope Images. Availability: 2.0.0 Enhanced: 2.1.0 Uses ST_MapAlgebra() and added optional units, scale, interpolate_nodata function parameters Changed: 2.1.0 In prior versions, return values were in radians. Now, return values default to degrees Examples: Variant 1 WITH foo AS ( SELECT ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1], [1, 2, 2, 2, 1], [1, 2, 3, 2, 1], [1, 2, 2, 2, 1], [1, 1, 1, 1, 1] ]::double precision[][] ) AS rast ) SELECT ST_DumpValues(ST_Slope(rast, 1, '32BF')) FROM foo st_dumpvalues ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------- (1,"{{10.0249881744385,21.5681285858154,26.5650520324707,21.5681285858154,10.0249881744385},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154}, {26.5650520324707,36.8698959350586,0,36.8698959350586,26.5650520324707},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154},{10.0249881744385,21. 5681285858154,26.5650520324707,21.5681285858154,10.0249881744385}}") (1 row) Examples: Variant 2 Complete example of tiles of a coverage. This query only works with PostgreSQL 9.1 or higher. WITH foo AS ( SELECT ST_Tile( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999 ), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2, 1], [1, 2, 2, 3, 3, 1], [1, 1, 3, 2, 1, 1], [1, 2, 2, 1, 2, 1], [1, 1, 1, 1, 1, 1] ]::double precision[] ), 2, 2 ) AS rast ) SELECT t1.rast, ST_Slope(ST_Union(t2.rast), 1, t1.rast) FROM foo t1 CROSS JOIN foo t2 WHERE ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rast; See Also , , , , , ST_TPI Returns a raster with the calculated Topographic Position Index. raster ST_TPI raster rast integer nband raster customextent text pixeltype="32BF" boolean interpolate_nodata=FALSE Description Calculates the Topographic Position Index, which is defined as the folcal mean with radius of one minus the center cell. This function only supports a focalmean radius of one. Availability: 2.1.0 Examples -- needs examples See Also , , , , , ST_TRI Returns a raster with the calculated Terrain Ruggedness Index. raster ST_TRI raster rast integer nband raster customextent text pixeltype="32BF" boolean interpolate_nodata=FALSE Description Terrain Ruggedness Index is calculated by comparing a central pixel with its neighbors, taking the absolute values of the differences, and averaging the result. This function only supports a focalmean radius of one. Availability: 2.1.0 Examples -- needs examples See Also , , , , , Raster to Geometry Box3D Returns the box 3d representation of the enclosing box of the raster. box3d Box3D raster rast Description Returns the box representing the extent of the raster. The polygon is defined by the corner points of the bounding box ((MINX, MINY), (MAXX, MAXY)) Changed: 2.0.0 In pre-2.0 versions, there used to be a box2d instead of box3d. Since box2d is a deprecated type, this was changed to box3d. Examples SELECT rid, Box3D(rast) AS rastbox FROM dummy_rast; rid | rastbox ----+------------------------------------------------- 1 | BOX3D(0.5 0.5 0,20.5 60.5 0) 2 | BOX3D(3427927.75 5793243.5 0,3427928 5793244 0) See Also ST_ConvexHull Return the convex hull geometry of the raster including pixel values equal to BandNoDataValue. For regular shaped and non-skewed rasters, this gives the same result as ST_Envelope so only useful for irregularly shaped or skewed rasters. geometry ST_ConvexHull raster rast Description Return the convex hull geometry of the raster including the NoDataBandValue band pixels. For regular shaped and non-skewed rasters, this gives more or less the same result as ST_Envelope so only useful for irregularly shaped or skewed rasters. ST_Envelope floors the coordinates and hence add a little buffer around the raster so the answer is subtly different from ST_ConvexHull which does not floor. Examples Refer to PostGIS Raster Specification for a diagram of this. -- Note envelope and convexhull are more or less the same SELECT ST_AsText(ST_ConvexHull(rast)) As convhull, ST_AsText(ST_Envelope(rast)) As env FROM dummy_rast WHERE rid=1; convhull | env --------------------------------------------------------+------------------------------------ POLYGON((0.5 0.5,20.5 0.5,20.5 60.5,0.5 60.5,0.5 0.5)) | POLYGON((0 0,20 0,20 60,0 60,0 0)) -- now we skew the raster -- note how the convex hull and envelope are now different SELECT ST_AsText(ST_ConvexHull(rast)) As convhull, ST_AsText(ST_Envelope(rast)) As env FROM (SELECT ST_SetRotation(rast, 0.1, 0.1) As rast FROM dummy_rast WHERE rid=1) As foo; convhull | env --------------------------------------------------------+------------------------------------ POLYGON((0.5 0.5,20.5 1.5,22.5 61.5,2.5 60.5,0.5 0.5)) | POLYGON((0 0,22 0,22 61,0 61,0 0)) See Also , , , ST_DumpAsPolygons Returns a set of geomval (geom,val) rows, from a given raster band. If no band number is specified, band num defaults to 1. setof geomval ST_DumpAsPolygons raster rast integer band_num=1 boolean exclude_nodata_value=TRUE Description This is a set-returning function (SRF). It returns a set of geomval rows, formed by a geometry (geom) and a pixel band value (val). Each polygon is the union of all pixels for that band that have the same pixel value denoted by val. ST_DumpAsPolygon is useful for polygonizing rasters. It is the reverse of a GROUP BY in that it creates new rows. For example it can be used to expand a single raster into multiple POLYGONS/MULTIPOLYGONS. Availability: Requires GDAL 1.7 or higher. If there is a no data value set for a band, pixels with that value will not be returned. If you only care about count of pixels with a given value in a raster, it is faster to use . This is different than ST_PixelAsPolygons where one geometry is returned for each pixel regardless of pixel value. Examples SELECT val, ST_AsText(geom) As geomwkt FROM ( SELECT (ST_DumpAsPolygons(rast)).* FROM dummy_rast WHERE rid = 2 ) As foo WHERE val BETWEEN 249 and 251 ORDER BY val; val | geomwkt -----+-------------------------------------------------------------------------- 249 | POLYGON((3427927.95 5793243.95,3427927.95 5793243.85,3427928 5793243.85, 3427928 5793243.95,3427927.95 5793243.95)) 250 | POLYGON((3427927.75 5793243.9,3427927.75 5793243.85,3427927.8 5793243.85, 3427927.8 5793243.9,3427927.75 5793243.9)) 250 | POLYGON((3427927.8 5793243.8,3427927.8 5793243.75,3427927.85 5793243.75, 3427927.85 5793243.8, 3427927.8 5793243.8)) 251 | POLYGON((3427927.75 5793243.85,3427927.75 5793243.8,3427927.8 5793243.8, 3427927.8 5793243.85,3427927.75 5793243.85)) See Also , , , ST_Envelope Returns the polygon representation of the extent of the raster. geometry ST_Envelope raster rast Description Returns the polygon representation of the extent of the raster in spatial coordinate units defined by srid. It is a float8 minimum bounding box represented as a polygon. The polygon is defined by the corner points of the bounding box ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY)) Examples SELECT rid, ST_AsText(ST_Envelope(rast)) As envgeomwkt FROM dummy_rast; rid | envgeomwkt -----+-------------------------------------------------------------------- 1 | POLYGON((0 0,20 0,20 60,0 60,0 0)) 2 | POLYGON((3427927 5793243,3427928 5793243, 3427928 5793244,3427927 5793244, 3427927 5793243)) See Also , , ST_MinConvexHull Return the convex hull geometry of the raster excluding NODATA pixels. geometry ST_MinConvexHull raster rast integer nband=NULL Description Return the convex hull geometry of the raster excluding NODATA pixels. If nband is NULL, all bands of the raster are considered. Availability: 2.1.0 Examples WITH foo AS ( SELECT ST_SetValues( ST_SetValues( ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(9, 9, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0), 2, '8BUI', 1, 0), 1, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 1], [0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0] ]::double precision[][] ), 2, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0] ]::double precision[][] ) AS rast ) SELECT ST_AsText(ST_ConvexHull(rast)) AS hull, ST_AsText(ST_MinConvexHull(rast)) AS mhull, ST_AsText(ST_MinConvexHull(rast, 1)) AS mhull_1, ST_AsText(ST_MinConvexHull(rast, 2)) AS mhull_2 FROM foo hull | mhull | mhull_1 | mhull_2 ----------------------------------+-------------------------------------+-------------------------------------+------------------------------------- POLYGON((0 0,9 0,9 -9,0 -9,0 0)) | POLYGON((0 -3,9 -3,9 -9,0 -9,0 -3)) | POLYGON((3 -3,9 -3,9 -6,3 -6,3 -3)) | POLYGON((0 -3,6 -3,6 -9,0 -9,0 -3)) See Also , , , ST_Polygon Returns a multipolygon geometry formed by the union of pixels that have a pixel value that is not no data value. If no band number is specified, band num defaults to 1. geometry ST_Polygon raster rast integer band_num=1 Description Availability: 0.1.6 Requires GDAL 1.7 or higher. Enhanced: 2.1.0 Improved Speed (fully C-Based) and the returning multipolygon is ensured to be valid. Changed: 2.1.0 In prior versions would sometimes return a polygon, changed to always return multipolygon. Examples -- by default no data band value is 0 or not set, so polygon will return a square polygon SELECT ST_AsText(ST_Polygon(rast)) As geomwkt FROM dummy_rast WHERE rid = 2; geomwkt -------------------------------------------- MULTIPOLYGON(((3427927.75 5793244,3427928 5793244,3427928 5793243.75,3427927.75 5793243.75,3427927.75 5793244))) -- now we change the no data value of first band UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,1,254) WHERE rid = 2; SELECt rid, ST_BandNoDataValue(rast) from dummy_rast where rid = 2; -- ST_Polygon excludes the pixel value 254 and returns a multipolygon SELECT ST_AsText(ST_Polygon(rast)) As geomwkt FROM dummy_rast WHERE rid = 2; geomwkt --------------------------------------------------------- MULTIPOLYGON(((3427927.9 5793243.95,3427927.85 5793243.95,3427927.85 5793244,3427927.9 5793244,3427927.9 5793243.95)),((3427928 5793243.85,3427928 5793243.8,3427927.95 5793243.8,3427927.95 5793243.85,3427927.9 5793243.85,3427927.9 5793243.9,3427927.9 5793243.95,3427927.95 5793243.95,3427928 5793243.95,3427928 5793243.85)),((3427927.8 5793243.75,3427927.75 5793243.75,3427927.75 5793243.8,3427927.75 5793243.85,3427927.75 5793243.9,3427927.75 5793244,3427927.8 5793244,3427927.8 5793243.9,3427927.8 5793243.85,3427927.85 5793243.85,3427927.85 5793243.8,3427927.85 5793243.75,3427927.8 5793243.75))) -- Or if you want the no data value different for just one time SELECT ST_AsText( ST_Polygon( ST_SetBandNoDataValue(rast,1,252) ) ) As geomwkt FROM dummy_rast WHERE rid =2; geomwkt --------------------------------- MULTIPOLYGON(((3427928 5793243.85,3427928 5793243.8,3427928 5793243.75,3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8,3427927.75 5793243.8,3427927.75 5793243.85,3427927.75 5793243.9,3427927.75 5793244,3427927.8 5793244,3427927.85 5793244,3427927.9 5793244,3427928 5793244,3427928 5793243.95,3427928 5793243.85),(3427927.9 5793243.9,3427927.9 5793243.85,3427927.95 5793243.85,3427927.95 5793243.9,3427927.9 5793243.9))) See Also , Raster Operators && Returns TRUE if A's bounding box intersects B's bounding box. boolean && raster A raster B Description The && operator returns TRUE if the bounding box of raster A intersects the bounding box of raster B. This operand will make use of any indexes that may be available on the rasters. Examples SELECT A.rid As a_rid, B.rid As b_rid, A.rast && B.rast As intersect FROM dummy_rast AS A CROSS JOIN dummy_rast AS B LIMIT 3; a_rid | b_rid | intersect -------+-------+--------- 2 | 2 | t 2 | 3 | f 2 | 1 | f &< Returns TRUE if A's bounding box is to the left of B's. boolean &< raster A raster B Description The &< operator returns TRUE if the bounding box of raster A overlaps or is to the left of the bounding box of raster B, or more accurately, overlaps or is NOT to the right of the bounding box of raster B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT A.rid As a_rid, B.rid As b_rid, A.rast &< B.rast As overleft FROM dummy_rast AS A CROSS JOIN dummy_rast AS B; a_rid | b_rid | overleft ------+-------+---------- 2 | 2 | t 2 | 3 | f 2 | 1 | f 3 | 2 | t 3 | 3 | t 3 | 1 | f 1 | 2 | t 1 | 3 | t 1 | 1 | t &> Returns TRUE if A's bounding box is to the right of B's. boolean &> raster A raster B Description The &> operator returns TRUE if the bounding box of raster A overlaps or is to the right of the bounding box of raster B, or more accurately, overlaps or is NOT to the left of the bounding box of raster B. This operand will make use of any indexes that may be available on the geometries. Examples SELECT A.rid As a_rid, B.rid As b_rid, A.rast &> B.rast As overright FROM dummy_rast AS A CROSS JOIN dummy_rast AS B; a_rid | b_rid | overright -------+-------+---------- 2 | 2 | t 2 | 3 | t 2 | 1 | t 3 | 2 | f 3 | 3 | t 3 | 1 | f 1 | 2 | f 1 | 3 | t 1 | 1 | t Raster and Raster Band Spatial Relationships ST_Contains Return true if no points of raster rastB lie in the exterior of raster rastA and at least one point of the interior of rastB lies in the interior of rastA. boolean ST_Contains raster rastA integer nbandA raster rastB integer nbandB boolean ST_Contains raster rastA raster rastB Description Raster rastA contains rastB if and only if no points of rastB lie in the exterior of rastA and at least one point of the interior of rastB lies in the interior of rastA. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This function will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_Contains(ST_Polygon(raster), geometry) or ST_Contains(geometry, ST_Polygon(raster)). ST_Contains() is the inverse of ST_Within(). So, ST_Contains(rastA, rastB) implies ST_Within(rastB, rastA). Availability: 2.1.0 Examples -- specified band numbers SELECT r1.rid, r2.rid, ST_Contains(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1; NOTICE: The first raster provided has no bands rid | rid | st_contains -----+-----+------------- 1 | 1 | 1 | 2 | f -- no band numbers specified SELECT r1.rid, r2.rid, ST_Contains(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1; rid | rid | st_contains -----+-----+------------- 1 | 1 | t 1 | 2 | f See Also , ST_ContainsProperly Return true if rastB intersects the interior of rastA but not the boundary or exterior of rastA. boolean ST_ContainsProperly raster rastA integer nbandA raster rastB integer nbandB boolean ST_ContainsProperly raster rastA raster rastB Description Raster rastA contains properly rastB if rastB intersects the interior of rastA but not the boundary or exterior of rastA. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. Raster rastA does not contain properly itself but does contain itself. This function will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_ContainsProperly(ST_Polygon(raster), geometry) or ST_ContainsProperly(geometry, ST_Polygon(raster)). Availability: 2.1.0 Examples SELECT r1.rid, r2.rid, ST_ContainsProperly(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_containsproperly -----+-----+--------------------- 2 | 1 | f 2 | 2 | f See Also , ST_Covers Return true if no points of raster rastB lie outside raster rastA. boolean ST_Covers raster rastA integer nbandA raster rastB integer nbandB boolean ST_Covers raster rastA raster rastB Description Raster rastA covers rastB if and only if no points of rastB lie in the exterior of rastA. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This function will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_Covers(ST_Polygon(raster), geometry) or ST_Covers(geometry, ST_Polygon(raster)). Availability: 2.1.0 Examples SELECT r1.rid, r2.rid, ST_Covers(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_covers -----+-----+----------- 2 | 1 | f 2 | 2 | t See Also , ST_CoveredBy Return true if no points of raster rastA lie outside raster rastB. boolean ST_CoveredBy raster rastA integer nbandA raster rastB integer nbandB boolean ST_CoveredBy raster rastA raster rastB Description Raster rastA is covered by rastB if and only if no points of rastA lie in the exterior of rastB. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This function will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_CoveredBy(ST_Polygon(raster), geometry) or ST_CoveredBy(geometry, ST_Polygon(raster)). Availability: 2.1.0 Examples SELECT r1.rid, r2.rid, ST_CoveredBy(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_coveredby -----+-----+-------------- 2 | 1 | f 2 | 2 | t See Also , ST_Disjoint Return true if raster rastA does not spatially intersect rastB. boolean ST_Disjoint raster rastA integer nbandA raster rastB integer nbandB boolean ST_Disjoint raster rastA raster rastB Description Raster rastA and rastB are disjointed if they do not share any space together. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This function does NOT use any indexes. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_Disjoint(ST_Polygon(raster), geometry). Availability: 2.1.0 Examples -- rid = 1 has no bands, hence the NOTICE and the NULL value for st_disjoint SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; NOTICE: The second raster provided has no bands rid | rid | st_disjoint -----+-----+------------- 2 | 1 | 2 | 2 | f -- this time, without specifying band numbers SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_disjoint -----+-----+------------- 2 | 1 | t 2 | 2 | f See Also ST_Intersects Return true if raster rastA spatially intersects raster rastB. boolean ST_Intersects raster rastA integer nbandA raster rastB integer nbandB boolean ST_Intersects raster rastA raster rastB boolean ST_Intersects raster rast integer nband geometry geommin boolean ST_Intersects raster rast geometry geommin integer nband=NULL boolean ST_Intersects geometry geommin raster rast integer nband=NULL Description Return true if raster rastA spatially intersects raster rastB. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This function will make use of any indexes that may be available on the rasters. Enhanced: 2.0.0 support raster/raster intersects was introduced. Changed: 2.1.0 The behavior of the ST_Intersects(raster, geometry) variants changed to match that of ST_Intersects(geometry, raster). Examples -- different bands of same raster SELECT ST_Intersects(rast, 2, rast, 3) FROM dummy_rast WHERE rid = 2; st_intersects --------------- t See Also , ST_Overlaps Return true if raster rastA and rastB intersect but one does not completely contain the other. boolean ST_Overlaps raster rastA integer nbandA raster rastB integer nbandB boolean ST_Overlaps raster rastA raster rastB Description Return true if raster rastA spatially overlaps raster rastB. This means that rastA and rastB intersect but one does not completely contain the other. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This function will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_Overlaps(ST_Polygon(raster), geometry). Availability: 2.1.0 Examples -- comparing different bands of same raster SELECT ST_Overlaps(rast, 1, rast, 2) FROM dummy_rast WHERE rid = 2; st_overlaps ------------- f See Also ST_Touches Return true if raster rastA and rastB have at least one point in common but their interiors do not intersect. boolean ST_Touches raster rastA integer nbandA raster rastB integer nbandB boolean ST_Touches raster rastA raster rastB Description Return true if raster rastA spatially touches raster rastB. This means that rastA and rastB have at least one point in common but their interiors do not intersect. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This function will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_Touches(ST_Polygon(raster), geometry). Availability: 2.1.0 Examples SELECT r1.rid, r2.rid, ST_Touches(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_touches -----+-----+------------ 2 | 1 | f 2 | 2 | f See Also ST_SameAlignment Returns true if rasters have same skew, scale, spatial ref and false if they don't with notice detailing issue. boolean ST_SameAlignment raster rastA raster rastB boolean ST_SameAlignment double precision ulx1 double precision uly1 double precision scalex1 double precision scaley1 double precision skewx1 double precision skewy1 double precision ulx2 double precision uly2 double precision scalex2 double precision scaley2 double precision skewx2 double precision skewy2 boolean ST_SameAlignment raster set rastfield Description Non-Aggregate version (Variants 1 and 2): Returns true if the two rasters (either provided directly or made using the values for upperleft, scale, skew and srid) have the same scale, skew, srid and at least one of any of the four corners of any pixel of one raster falls on any corner of the grid of the other raster. Returns false if they don't and a NOTICE detailing the alignment issue. Aggregate version (Variant 3): From a set of rasters, returns true if all rasters in the set are aligned. The ST_SameAlignment() function is an "aggregate" function in the terminology of PostgreSQL. That means that it operates on rows of data, in the same way the SUM() and AVG() functions do. Availability: 2.0.0 Enhanced: 2.1.0 addition of Aggegrate variant Examples: Rasters SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0) ) as sm; sm ---- t SELECT ST_SameAlignment(A.rast,b.rast) FROM dummy_rast AS A CROSS JOIN dummy_rast AS B; NOTICE: The two rasters provided have different SRIDs NOTICE: The two rasters provided have different SRIDs st_samealignment ------------------ t f f f See Also , , ST_NotSameAlignmentReason Returns text stating if rasters are aligned and if not aligned, a reason why. boolean ST_SameAlignment raster rastA raster rastB Description Returns text stating if rasters are aligned and if not aligned, a reason why. If there are several reasons why the rasters are not aligned, only one reason (the first test to fail) will be returned. Availability: 2.1.0 Examples SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0) ) ; st_samealignment | st_notsamealignmentreason ------------------+------------------------------------------------- f | The rasters have different scales on the X axis (1 row) See Also , ST_Within Return true if no points of raster rastA lie in the exterior of raster rastB and at least one point of the interior of rastA lies in the interior of rastB. boolean ST_Within raster rastA integer nbandA raster rastB integer nbandB boolean ST_Within raster rastA raster rastB Description Raster rastA is within rastB if and only if no points of rastA lie in the exterior of rastB and at least one point of the interior of rastA lies in the interior of rastB. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. This operand will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_Within(ST_Polygon(raster), geometry) or ST_Within(geometry, ST_Polygon(raster)). ST_Within() is the inverse of ST_Contains(). So, ST_Within(rastA, rastB) implies ST_Contains(rastB, rastA). Availability: 2.1.0 Examples SELECT r1.rid, r2.rid, ST_Within(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_within -----+-----+----------- 2 | 1 | f 2 | 2 | t See Also , , , ST_DWithin Return true if rasters rastA and rastB are within the specified distance of each other. boolean ST_DWithin raster rastA integer nbandA raster rastB integer nbandB double precision distance_of_srid boolean ST_DWithin raster rastA raster rastB double precision distance_of_srid Description Return true if rasters rastA and rastB are within the specified distance of each other. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. The distance is specified in units defined by the spatial reference system of the rasters. For this function to make sense, the source rasters must both be of the same coordinate projection, having the same SRID. This operand will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_DWithin(ST_Polygon(raster), geometry). Availability: 2.1.0 Examples SELECT r1.rid, r2.rid, ST_DWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_dwithin -----+-----+------------ 2 | 1 | f 2 | 2 | t See Also , ST_DFullyWithin Return true if rasters rastA and rastB are fully within the specified distance of each other. boolean ST_DFullyWithin raster rastA integer nbandA raster rastB integer nbandB double precision distance_of_srid boolean ST_DFullyWithin raster rastA raster rastB double precision distance_of_srid Description Return true if rasters rastA and rastB are fully within the specified distance of each other. If the band number is not provided (or set to NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are considered in the test. The distance is specified in units defined by the spatial reference system of the rasters. For this function to make sense, the source rasters must both be of the same coordinate projection, having the same SRID. This operand will make use of any indexes that may be available on the rasters. To test the spatial relationship of a raster and a geometry, use ST_Polygon on the raster, e.g. ST_DFullyWithin(ST_Polygon(raster), geometry). Availability: 2.1.0 Examples SELECT r1.rid, r2.rid, ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2; rid | rid | st_dfullywithin -----+-----+----------------- 2 | 1 | f 2 | 2 | t See Also , postgis-2.1.2+dfsg.orig/doc/release_notes.xml0000644000000000000000000030052512315351750017706 0ustar rootroot Appendix Release Notes Release 2.1.2 Release date: 2014/03/31 This is a bug fix release, addressing issues that have been filed since the 2.1.1 release. Bug Fixes #2666, Error out at configure time if no SQL preprocessor can be found #2534, st_distance returning incorrect results for large geographies #2539, Check for json-c/json.h presence/usability before json/json.h #2543, invalid join selectivity error from simple query #2546, GeoJSON with string coordinates parses incorrectly #2547, Fix ST_Simplify(TopoGeometry) for hierarchical topogeoms #2552, Fix NULL raster handling in ST_AsPNG, ST_AsTIFF and ST_AsJPEG #2555, Fix parsing issue of range arguments of ST_Reclass #2556, geography ST_Intersects results depending on insert order #2580, Do not allow installing postgis twice in the same database #2589, Remove use of unnecessary void pointers #2607, Cannot open more than 1024 out-db files in one process #2610, Ensure face splitting algorithm uses the edge index #2615, EstimatedExtent (and hence, underlying stats) gathering wrong bbox #2619, Empty rings array in GeoJSON polygon causes crash #2634, regression in sphere distance code #2638, Geography distance on M geometries sometimes wrong #2648, #2653, Fix topology functions when "topology" is not in search_path #2654, Drop deprecated calls from topology #2655, Let users without topology privileges call postgis_full_version() #2674, Fix missing operator = and hash_raster_ops opclass on raster #2675, #2534, #2636, #2634, #2638, Geography distance issues with tree optimization Enhancements #2494, avoid memcopy in GiST index (hayamiz) #2560, soft upgrade: avoid drop/recreate of aggregates that hadn't changed Release 2.1.1 Release date: 2013/11/06 This is a bug fix release, addressing issues that have been filed since the 2.1.0 release. Important Changes #2514, Change raster license from GPL v3+ to v2+, allowing distribution of PostGIS Extension as GPLv2. Bug Fixes #2396, Make regression tests more endian-agnostic #2434, Fix ST_Intersection(geog,geog) regression in rare cases #2454, Fix behavior of ST_PixelAsXXX functions regarding exclude_nodata_value parameter #2489, Fix upgrades from 2.0 leaving stale function signatures #2525, Fix handling of SRID in nested collections #2449, Fix potential infinite loop in index building #2493, Fix behavior of ST_DumpValues when passed an empty raster #2502, Fix postgis_topology_scripts_installed() install schema #2504, Fix segfault on bogus pgsql2shp call #2512, Support for foreign tables and materialized views in raster_columns and raster_overviews Enhancements #2478, support for tiger 2013 #2463, support for exact length calculations on arc geometries Release 2.1.0 Release date: 2013/08/17 This is a minor release addressing both bug fixes and performance and functionality enhancements addressing issues since 2.0.3 release. If you are upgrading from 2.0+, only a soft upgrade is required. If you are upgrading from 1.5 or earlier, a hard upgrade is required. Important / Breaking Changes #1653, Removed srid parameter from ST_Resample(raster) and variants with reference raster no longer apply reference raster's SRID. #1962 ST_Segmentize - As a result of the introduction of geography support, The construct: SELECT ST_Segmentize('LINESTRING(1 2, 3 4)',0.5); will result in ambiguous function error #2026, ST_Union(raster) now unions all bands of all rasters #2089, liblwgeom: lwgeom_set_handlers replaces lwgeom_init_allocators. #2150, regular_blocking is no longer a constraint. column of same name in raster_columns now checks for existance of spatially_unique and coverage_tile constraints ST_Intersects(raster, geometry) behaves in the same manner as ST_Intersects(geometry, raster). point variant of ST_SetValue(raster) previously did not check SRID of input geometry and raster. ST_Hillshade parameters azimuth and altitude are now in degrees instead of radians. ST_Slope and ST_Aspect return pixel values in degrees instead of radians. #2104, ST_World2RasterCoord, ST_World2RasterCoordX and ST_World2RasterCoordY renamed to ST_WorldToRasterCoord, ST_WorldToRasterCoordX and ST_WorldToRasterCoordY. ST_Raster2WorldCoord, ST_Raster2WorldCoordX and ST_Raster2WorldCoordY renamed to ST_RasterToWorldCoord, ST_RasterToWorldCoordX and ST_RasterToWorldCoordY ST_Estimated_Extent renamed to ST_EstimatedExtent ST_Line_Interpolate_Point renamed to ST_LineInterpolatePoint ST_Line_Substring renamed to ST_LineSubstring ST_Line_Locate_Point renamed to ST_LineLocatePoint ST_Force_XXX renamed to ST_ForceXXX ST_MapAlgebraFctNgb and 1 and 2 raster variants of ST_MapAlgebraFct. Use ST_MapAlgebra instead 1 and 2 raster variants of ST_MapAlgebraExpr. Use expression variants of ST_MapAlgebra instead New Features - Refer to http://postgis.net/docs/manual-2.1/PostGIS_Special_Functions_Index.html#NewFunctions_2_1 for complete list of new functions #310, ST_DumpPoints converted to a C function (Nathan Wagner) and much faster #739, UpdateRasterSRID() #945, improved join selectivity, N-D selectivity calculations, user accessible selectivity and stats reader functions for testing (Paul Ramsey / OpenGeo) toTopoGeom with TopoGeometry sink (Sandro Santilli / Vizzuality) clearTopoGeom (Sandro Santilli / Vizzuality) ST_Segmentize(geography) (Paul Ramsey / OpenGeo) ST_DelaunayTriangles (Sandro Santilli / Vizzuality) ST_NearestValue, ST_Neighborhood (Bborie Park / UC Davis) ST_PixelAsPoint, ST_PixelAsPoints (Bborie Park / UC Davis) ST_PixelAsCentroid, ST_PixelAsCentroids (Bborie Park / UC Davis) ST_Raster2WorldCoord, ST_World2RasterCoord (Bborie Park / UC Davis) Additional raster/raster spatial relationship functions (ST_Contains, ST_ContainsProperly, ST_Covers, ST_CoveredBy, ST_Disjoint, ST_Overlaps, ST_Touches, ST_Within, ST_DWithin, ST_DFullyWithin) (Bborie Park / UC Davis) Added array variants of ST_SetValues() to set many pixel values of a band in one call (Bborie Park / UC Davis) #1293, ST_Resize(raster) to resize rasters based upon width/height #1627, package tiger_geocoder as a PostgreSQL extension #1643, #2076, Upgrade tiger geocoder to support loading tiger 2011 and 2012 (Regina Obe / Paragon Corporation) Funded by Hunter Systems Group GEOMETRYCOLLECTION support for ST_MakeValid (Sandro Santilli / Vizzuality) #1709, ST_NotSameAlignmentReason(raster, raster) #1818, ST_GeomFromGeoHash and friends (Jason Smith (darkpanda)) #1856, reverse geocoder rating setting for prefer numbered highway name ST_PixelOfValue (Bborie Park / UC Davis) Casts to/from PostgreSQL geotypes (point/path/polygon). Added geomval array variant of ST_SetValues() to set many pixel values of a band using a set of geometries and corresponding values in one call (Bborie Park / UC Davis) ST_Tile(raster) to break up a raster into tiles (Bborie Park / UC Davis) #1895, new r-tree node splitting algorithm (Alex Korotkov) #2011, ST_DumpValues to output raster as array (Bborie Park / UC Davis) #2018, ST_Distance support for CircularString, CurvePolygon, MultiCurve, MultiSurface, CompoundCurve #2030, n-raster (and n-band) ST_MapAlgebra (Bborie Park / UC Davis) #2193, Utilize PAGC parser as drop in replacement for tiger normalizer (Steve Woodbridge, Regina Obe) #2210, ST_MinConvexHull(raster) lwgeom_from_geojson in liblwgeom (Sandro Santilli / Vizzuality) #1687, ST_Simplify for TopoGeometry (Sandro Santilli / Vizzuality) #2228, TopoJSON output for TopoGeometry (Sandro Santilli / Vizzuality) #2123, ST_FromGDALRaster #613, ST_SetGeoReference with numerical parameters instead of text #2276, ST_AddBand(raster) variant for out-db bands #2280, ST_Summary(raster) #2163, ST_TPI for raster (Nathaniel Clay) #2164, ST_TRI for raster (Nathaniel Clay) #2302, ST_Roughness for raster (Nathaniel Clay) #2290, ST_ColorMap(raster) to generate RGBA bands #2254, Add SFCGAL backend support. (Backend selection throught postgis.backend var) Functions available both throught GEOS or SFCGAL: ST_Intersects, ST_3DIntersects, ST_Intersection, ST_Area, ST_Distance, ST_3DDistance New functions available only with SFCGAL backend: ST_3DIntersection, ST_Tesselate, ST_3DArea, ST_Extrude, ST_ForceLHR ST_Orientation, ST_Minkowski, ST_StraightSkeleton postgis_sfcgal_version New function available in PostGIS: ST_ForceSFS (Olivier Courtin and Hugo Mercier / Oslandia) Enhancements For detail of new functions and function improvements, please refer to . Much faster raster ST_Union, ST_Clip and many more function additions operations For geometry/geography better planner selectivity and a lot more functions. #823, tiger geocoder: Make loader_generate_script download portion less greedy #826, raster2pgsql no longer defaults to padding tiles. Flag -P can be used to pad tiles #1363, ST_AddBand(raster, ...) array version rewritten in C #1364, ST_Union(raster, ...) aggregate function rewritten in C #1655, Additional default values for parameters of ST_Slope #1661, Add aggregate variant of ST_SameAlignment #1719, Add support for Point and GeometryCollection ST_MakeValid inputs #1780, support ST_GeoHash for geography #1796, Big performance boost for distance calculations in geography #1802, improved function interruptibility. #1823, add parameter in ST_AsGML to use id column for GML 3 output (become mandatory since GML 3.2.1) #1856, tiger geocoder: reverse geocoder rating setting for prefer numbered highway name #1938, Refactor basic ST_AddBand to add multiple new bands in one call #1978, wrong answer when calculating length of a closed circular arc (circle) #1989, Preprocess input geometry to just intersection with raster to be clipped #2021, Added multi-band support to ST_Union(raster, ...) aggregate function #2006, better support of ST_Area(geography) over poles and dateline #2065, ST_Clip(raster, ...) now a C function #2069, Added parameters to ST_Tile(raster) to control padding of tiles #2078, New variants of ST_Slope, ST_Aspect and ST_HillShade to provide solution to handling tiles in a coverage #2097, Added RANGE uniontype option for ST_Union(raster) #2105, Added ST_Transform(raster) variant for aligning output to reference raster #2119, Rasters passed to ST_Resample(), ST_Rescale(), ST_Reskew(), and ST_SnapToGrid() no longer require an SRID #2141, More verbose output when constraints fail to be added to a raster column #2143, Changed blocksize constraint of raster to allow multiple values #2148, Addition of coverage_tile constraint for raster #2149, Addition of spatially_unique constraint for raster TopologySummary output now includes unregistered layers and a count of missing TopoGeometry objects from their natural layer. ST_HillShade(), ST_Aspect() and ST_Slope() have one new optional parameter to interpolate NODATA pixels before running the operation. Point variant of ST_SetValue(raster) is now a wrapper around geomval variant of ST_SetValues(rast). Proper support for raster band's isnodata flag in core API and loader. Additional default values for parameters of ST_Aspect and ST_HillShade #2178, ST_Summary now advertises presence of known srid with an [S] flag #2202, Make libjson-c optional (--without-json configure switch) #2213, Add support libjson-c 0.10+ #2231, raster2pgsql supports user naming of filename column with -n #2200, ST_Union(raster, uniontype) unions all bands of all rasters #2264, postgis_restore.pl support for restoring into databases with postgis in a custom schema #2244, emit warning when changing raster's georeference if raster has out-db bands #2222, add parameter OutAsIn to flag whether ST_AsBinary should return out-db bands as in-db bands Fixes #1839, handling of subdatasets in GeoTIFF in raster2pgsql. #1840, fix logic of when to compute # of tiles in raster2pgsql. #1870, align the docs and actual behavior of raster's ST_Intersects #1872, fix ST_ApproxSummarystats to prevent division by zero #1875, ST_SummaryStats returns NULL for all parameters except count when count is zero #1932, fix raster2pgsql of syntax for index tablespaces #1936, ST_GeomFromGML on CurvePolygon causes server crash #1939, remove custom data types: summarystats, histogram, quantile, valuecount #1951, remove crash on zero-length linestrings #1957, ST_Distance to a one-point LineString returns NULL #1976, Geography point-in-ring code overhauled for more reliability #1981, cleanup of unused variables causing warnings with gcc 4.6+ #1996, support POINT EMPTY in GeoJSON output #2062, improve performance of distance calculations #2057, Fixed linking issue for raster2psql to libpq #2077, Fixed incorrect values returning from ST_Hillshade() #2019, ST_FlipCoordinates does not update bbox #2100, ST_AsRaster may not return raster with specified pixel type #2126, Better handling of empty rasters from ST_ConvexHull() #2165, ST_NumPoints regression failure with CircularString #2168, ST_Distance is not always commutative #2182, Fix issue with outdb rasters with no SRID and ST_Resize #2188, Fix function parameter value overflow that caused problems when copying data from a GDAL dataset #2198, Fix incorrect dimensions used when generating bands of out-db rasters in ST_Tile() #2201, ST_GeoHash wrong on boundaries #2203, Changed how rasters with unknown SRID and default geotransform are handled when passing to GDAL Warp API #2215, Fixed raster exclusion constraint for conflicting name of implicit index #2251, Fix bad dimensions when rescaling rasters with default geotransform matrix #2133, Fix performance regression in expression variant of ST_MapAlgebra #2257, GBOX variables not initialized when testing with empty geometries #2271, Prevent parallel make of raster #2282, Fix call to undefined function nd_stats_to_grid() in debug mode #2307, ST_MakeValid outputs invalid geometries #2309, Remove confusing INFO message when trying to get SRS info #2336, FIPS 20 (KS) causes wildcard expansion to wget all files #2348, Provide raster upgrade path for 2.0 to 2.1 #2351, st_distance between geographies wrong #2359, Fix handling of schema name when adding overview constraints #2371, Support GEOS versions with more than 1 digit in micro #2383, Remove unsafe use of \' from raster warning message #2384, Incorrect variable datatypes for ST_Neighborhood Known Issues #2111, Raster bands can only reference the first 256 bands of out-db rasters Release 2.0.3 Release date: 2013/03/01 This is a bug fix release, addressing issues that have been filed since the 2.0.2 release. If you are using PostGIS 2.0+ a soft upgrade is required. For users of PostGIS 1.5 or below, a hard upgrade is required. Bug Fixes #2126, Better handling of empty rasters from ST_ConvexHull() #2134, Make sure to process SRS before passing it off to GDAL functions Fix various memory leaks in liblwgeom #2173, Fix robustness issue in splitting a line with own vertex also affecting topology building (#2172) #2174, Fix usage of wrong function lwpoly_free() #2176, Fix robustness issue with ST_ChangeEdgeGeom #2184, Properly copy topologies with Z value postgis_restore.pl support for mixed case geometry column name in dumps #2188, Fix function parameter value overflow that caused problems when copying data from a GDAL dataset #2216, More memory errors in MultiPolygon GeoJSON parsing (with holes) Fix Memory leak in GeoJSON parser Enhancements #2141, More verbose output when constraints fail to be added to a raster column Speedup ST_ChangeEdgeGeom Release 2.0.2 Release date: 2012/12/03 This is a bug fix release, addressing issues that have been filed since the 2.0.1 release. Bug Fixes #1287, Drop of "gist_geometry_ops" broke a few clients package of legacy_gist.sql for these cases #1391, Errors during upgrade from 1.5 #1828, Poor selectivity estimate on ST_DWithin #1838, error importing tiger/line data #1869, ST_AsBinary is not unique added to legacy_minor/legacy.sql scripts #1885, Missing field from tabblock table in tiger2010 census_loader.sql #1891, Use LDFLAGS environment when building liblwgeom #1900, Fix pgsql2shp for big-endian systems #1932, Fix raster2pgsql for invalid syntax for setting index tablespace #1936, ST_GeomFromGML on CurvePolygon causes server crash #1955, ST_ModEdgeHeal and ST_NewEdgeHeal for doubly connected edges #1957, ST_Distance to a one-point LineString returns NULL #1976, Geography point-in-ring code overhauled for more reliability #1978, wrong answer calculating length of closed circular arc (circle) #1981, Remove unused but set variables as found with gcc 4.6+ #1987, Restore 1.5.x behaviour of ST_Simplify #1989, Preprocess input geometry to just intersection with raster to be clipped #1991, geocode really slow on PostgreSQL 9.2 #1996, support POINT EMPTY in GeoJSON output #1998, Fix ST_{Mod,New}EdgeHeal joining edges sharing both endpoints #2001, ST_CurveToLine has no effect if the geometry doesn't actually contain an arc #2015, ST_IsEmpty('POLYGON(EMPTY)') returns False #2019, ST_FlipCoordinates does not update bbox #2025, Fix side location conflict at TopoGeo_AddLineString #2026, improve performance of distance calculations #2033, Fix adding a splitting point into a 2.5d topology #2051, Fix excess of precision in ST_AsGeoJSON output #2052, Fix buffer overflow in lwgeom_to_geojson #2056, Fixed lack of SRID check of raster and geometry in ST_SetValue() #2057, Fixed linking issue for raster2psql to libpq #2060, Fix "dimension" check violation by GetTopoGeomElementArray #2072, Removed outdated checks preventing ST_Intersects(raster) from working on out-db bands #2077, Fixed incorrect answers from ST_Hillshade(raster) #2092, Namespace issue with ST_GeomFromKML,ST_GeomFromGML for libxml 2.8+ #2099, Fix double free on exception in ST_OffsetCurve #2100, ST_AsRaster() may not return raster with specified pixel type #2108, Ensure ST_Line_Interpolate_Point always returns POINT #2109, Ensure ST_Centroid always returns POINT #2117, Ensure ST_PointOnSurface always returns POINT #2129, Fix SRID in ST_Homogenize output with collection input #2130, Fix memory error in MultiPolygon GeoJson parsing Update URL of Maven jar Enhancements #1581, ST_Clip(raster, ...) no longer imposes NODATA on a band if the corresponding band from the source raster did not have NODATA #1928, Accept array properties in GML input multi-geom input (Kashif Rasul and Shoaib Burq / SpacialDB) #2082, Add indices on start_node and end_node of topology edge tables #2087, Speedup topology.GetRingEdges using a recursive CTE Release 2.0.1 Release date: 2012/06/22 This is a bug fix release, addressing issues that have been filed since the 2.0.0 release. Bug Fixes #1264, fix st_dwithin(geog, geog, 0). #1468 shp2pgsql-gui table column schema get shifted #1694, fix building with clang. (vince) #1708, improve restore of pre-PostGIS 2.0 backups. #1714, more robust handling of high topology tolerance. #1755, ST_GeographyFromText support for higher dimensions. #1759, loading transformed shapefiles in raster enabled db. #1761, handling of subdatasets in NetCDF, HDF4 and HDF5 in raster2pgsql. #1763, topology.toTopoGeom use with custom search_path. #1766, don't let ST_RemEdge* destroy peripheral TopoGeometry objects. #1774, Clearer error on setting an edge geometry to an invalid one. #1775, ST_ChangeEdgeGeom collision detection with 2-vertex target. #1776, fix ST_SymDifference(empty, geom) to return geom. #1779, install SQL comment files. #1782, fix spatial reference string handling in raster. #1789, fix false edge-node crossing report in ValidateTopology. #1790, fix toTopoGeom handling of duplicated primitives. #1791, fix ST_Azimuth with very close but distinct points. #1797, fix (ValidateTopology(xxx)).* syntax calls. #1805, put back the 900913 SRID entry. #1813, Only show readable relations in metadata tables. #1819, fix floating point issues with ST_World2RasterCoord and ST_Raster2WorldCoord variants. #1820 compilation on 9.2beta1. #1822, topology load on PostgreSQL 9.2beta1. #1825, fix prepared geometry cache lookup #1829, fix uninitialized read in GeoJSON parser #1834, revise postgis extension to only backup user specified spatial_ref_sys #1839, handling of subdatasets in GeoTIFF in raster2pgsql. #1840, fix logic of when to compute # of tiles in raster2pgsql. #1851, fix spatial_ref_system parameters for EPSG:3844 #1857, fix failure to detect endpoint mismatch in ST_AddEdge*Face* #1865, data loss in postgis_restore.pl when data rows have leading dashes. #1867, catch invalid topology name passed to topogeo_add* #1872, fix ST_ApproxSummarystats to prevent division by zero #1873, fix ptarray_locate_point to return interpolated Z/M values for on-the-line case #1875, ST_SummaryStats returns NULL for all parameters except count when count is zero #1881, shp2pgsql-gui -- editing a field sometimes triggers removing row #1883, Geocoder install fails trying to run create_census_base_tables() (Brian Panulla) Enhancements More detailed exception message from topology editing functions. #1786, improved build dependencies #1806, speedup of ST_BuildArea, ST_MakeValid and ST_GetFaceGeometry. #1812, Add lwgeom_normalize in LIBLWGEOM for more stable testing. Release 2.0.0 Release date: 2012/04/03 This is a major release. A hard upgrade is required. Yes this means a full dump reload and some special preparations if you are using obsolete functions. Refer to for details on upgrading. Refer to for more details and changed/new functions. Testers - Our unsung heroes We are most indebted to the numerous members in the PostGIS community who were brave enough to test out the new features in this release. No major release can be successful without these folk. Below are those who have been most valiant, provided very detailed and thorough bug reports, and detailed analysis. Andrea Peri - Lots of testing on topology, checking for correctness Andreas Forø Tollefsen - raster testing Chris English - topology stress testing loader functions Salvatore Larosa - topology robustness testing Brian Hamlin - Benchmarking (also experimental experimental branches before they are folded into core) , general testing of various pieces including Tiger and Topology. Testing on various server VMs Mike Pease - Tiger geocoder testing - very detailed reports of issues Tom van Tilburg - raster testing Important / Breaking Changes #722, #302, Most deprecated functions removed (over 250 functions) (Regina Obe, Paul Ramsey) Unknown SRID changed from -1 to 0. (Paul Ramsey) -- (most deprecated in 1.2) removed non-ST variants buffer, length, intersects (and internal functions renamed) etc. -- If you have been using deprecated functions CHANGE your apps or suffer the consequences. If you don't see a function documented -- it ain't supported or it is an internal function. Some constraints in older tables were built with deprecated functions. If you restore you may need to rebuild table constraints with populate_geometry_columns(). If you have applications or tools that rely on deprecated functions, please refer to for more details. #944 geometry_columns is now a view instead of a table (Paul Ramsey, Regina Obe) for tables created the old way reads (srid, type, dims) constraints for geometry columns created with type modifiers reads rom column definition #1081, #1082, #1084, #1088 - Mangement functions support typmod geometry column creation functions now default to typmod creation (Regina Obe) #1083 probe_geometry_columns(), rename_geometry_table_constraints(), fix_geometry_columns(); removed - now obsolete with geometry_column view (Regina Obe) #817 Renaming old 3D functions to the convention ST_3D (Nicklas Avén) #548 (sorta), ST_NumGeometries,ST_GeometryN now returns 1 (or the geometry) instead of null for single geometries (Sandro Santilli, Maxime van Noppen) New Features KNN Gist index based centroid (<->) and box (<#>) distance operators (Paul Ramsey / funded by Vizzuality) Support for TIN and PolyHedralSurface and enhancement of many functions to support 3D (Olivier Courtin / Oslandia) Raster support integrated and documented (Pierre Racine, Jorge Arévalo, Mateusz Loskot, Sandro Santilli, David Zwarg, Regina Obe, Bborie Park) (Company developer and funding: University Laval, Deimos Space, CadCorp, Michigan Tech Research Institute, Azavea, Paragon Corporation, UC Davis Center for Vectorborne Diseases) Making spatial indexes 3D aware - in progress (Paul Ramsey, Mark Cave-Ayland) Topology support improved (more functions), documented, testing (Sandro Santilli / Faunalia for RT-SIGTA), Andrea Peri, Regina Obe, Jose Carlos Martinez Llari 3D relationship and measurement support functions (Nicklas Avén) ST_3DDistance, ST_3DClosestPoint, ST_3DIntersects, ST_3DShortestLine and more... N-Dimensional spatial indexes (Paul Ramsey / OpenGeo) ST_Split (Sandro Santilli / Faunalia for RT-SIGTA) ST_IsValidDetail (Sandro Santilli / Faunalia for RT-SIGTA) ST_MakeValid (Sandro Santilli / Faunalia for RT-SIGTA) ST_RemoveRepeatedPoints (Sandro Santilli / Faunalia for RT-SIGTA) ST_GeometryN and ST_NumGeometries support for non-collections (Sandro Santilli) ST_IsCollection (Sandro Santilli, Maxime van Noppen) ST_SharedPaths (Sandro Santilli / Faunalia for RT-SIGTA) ST_Snap (Sandro Santilli) ST_RelateMatch (Sandro Santilli / Faunalia for RT-SIGTA) ST_ConcaveHull (Regina Obe and Leo Hsu / Paragon Corporation) ST_UnaryUnion (Sandro Santilli / Faunalia for RT-SIGTA) ST_AsX3D (Regina Obe / Arrival 3D funding) ST_OffsetCurve (Sandro Santilli, Rafal Magda) ST_GeomFromGeoJSON (Kashif Rasul, Paul Ramsey / Vizzuality funding) Enhancements Made shape file loader tolerant of truncated multibyte values found in some free worldwide shapefiles (Sandro Santilli) Lots of bug fixes and enhancements to shp2pgsql Beefing up regression tests for loaders Reproject support for both geometry and geography during import (Jeff Adams / Azavea, Mark Cave-Ayland) pgsql2shp conversion from predefined list (Loic Dachary / Mark Cave-Ayland) Shp-pgsql GUI loader - support loading multiple files at a time. (Mark Leslie) Extras - upgraded tiger_geocoder from using old TIGER format to use new TIGER shp and file structure format (Stephen Frost) Extras - revised tiger_geocoder to work with TIGER census 2010 data, addition of reverse geocoder function, various bug fixes, accuracy enhancements, limit max result return, speed improvements, loading routines. (Regina Obe, Leo Hsu / Paragon Corporation / funding provided by Hunter Systems Group) Overall Documentation proofreading and corrections. (Kasif Rasul) Cleanup PostGIS JDBC classes, revise to use Maven build. (Maria Arias de Reyna, Sandro Santilli) Bug Fixes #1335 ST_AddPoint returns incorrect result on Linux (Even Rouault) Release specific credits We thank U.S Department of State Human Information Unit (HIU) and Vizzuality for general monetary support to get PostGIS 2.0 out the door. Release 1.5.4 Release date: 2012/05/07 This is a bug fix release, addressing issues that have been filed since the 1.5.3 release. Bug Fixes #547, ST_Contains memory problems (Sandro Santilli) #621, Problem finding intersections with geography (Paul Ramsey) #627, PostGIS/PostgreSQL process die on invalid geometry (Paul Ramsey) #810, Increase accuracy of area calculation (Paul Ramsey) #852, improve spatial predicates robustness (Sandro Santilli, Nicklas Avén) #877, ST_Estimated_Extent returns NULL on empty tables (Sandro Santilli) #1028, ST_AsSVG kills whole postgres server when fails (Paul Ramsey) #1056, Fix boxes of arcs and circle stroking code (Paul Ramsey) #1121, populate_geometry_columns using deprecated functions (Regin Obe, Paul Ramsey) #1135, improve testsuite predictability (Andreas 'ads' Scherbaum) #1146, images generator crashes (bronaugh) #1170, North Pole intersection fails (Paul Ramsey) #1179, ST_AsText crash with bad value (kjurka) #1184, honour DESTDIR in documentation Makefile (Bryce L Nordgren) #1227, server crash on invalid GML #1252, SRID appearing in WKT (Paul Ramsey) #1264, st_dwithin(g, g, 0) doesn't work (Paul Ramsey) #1344, allow exporting tables with invalid geometries (Sandro Santilli) #1389, wrong proj4text for SRID 31300 and 31370 (Paul Ramsey) #1406, shp2pgsql crashes when loading into geography (Sandro Santilli) #1595, fixed SRID redundancy in ST_Line_SubString (Sandro Santilli) #1596, check SRID in UpdateGeometrySRID (Mike Toews, Sandro Santilli) #1602, fix ST_Polygonize to retain Z (Sandro Santilli) #1697, fix crash with EMPTY entries in GiST index (Paul Ramsey) #1772, fix ST_Line_Locate_Point with collapsed input (Sandro Santilli) #1799, Protect ST_Segmentize from max_length=0 (Sandro Santilli) Alter parameter order in 900913 (Paul Ramsey) Support builds with "gmake" (Greg Troxel) Release 1.5.3 Release date: 2011/06/25 This is a bug fix release, addressing issues that have been filed since the 1.5.2 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. Bug Fixes #1056, produce correct bboxes for arc geometries, fixes index errors (Paul Ramsey) #1007, ST_IsValid crash fix requires GEOS 3.3.0+ or 3.2.3+ (Sandro Santilli, reported by Birgit Laggner) #940, support for PostgreSQL 9.1 beta 1 (Regina Obe, Paul Ramsey, patch submitted by stl) #845, ST_Intersects precision error (Sandro Santilli, Nicklas Avén) Reported by cdestigter #884, Unstable results with ST_Within, ST_Intersects (Chris Hodgson) #779, shp2pgsql -S option seems to fail on points (Jeff Adams) #666, ST_DumpPoints is not null safe (Regina Obe) #631, Update NZ projections for grid transformation support (jpalmer) #630, Peculiar Null treatment in arrays in ST_Collect (Chris Hodgson) Reported by David Bitner #624, Memory leak in ST_GeogFromText (ryang, Paul Ramsey) #609, Bad source code in manual section 5.2 Java Clients (simoc, Regina Obe) #604, shp2pgsql usage touchups (Mike Toews, Paul Ramsey) #573 ST_Union fails on a group of linestrings Not a PostGIS bug, fixed in GEOS 3.3.0 #457 ST_CollectionExtract returns non-requested type (Nicklas Avén, Paul Ramsey) #441 ST_AsGeoJson Bbox on GeometryCollection error (Olivier Courtin) #411 Ability to backup invalid geometries (Sando Santilli) Reported by Regione Toscana #409 ST_AsSVG - degraded (Olivier Courtin) Reported by Sdikiy #373 Documentation syntax error in hard upgrade (Paul Ramsey) Reported by psvensso Release 1.5.2 Release date: 2010/09/27 This is a bug fix release, addressing issues that have been filed since the 1.5.1 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. Bug Fixes Loader: fix handling of empty (0-verticed) geometries in shapefiles. (Sandro Santilli) #536, Geography ST_Intersects, ST_Covers, ST_CoveredBy and Geometry ST_Equals not using spatial index (Regina Obe, Nicklas Aven) #573, Improvement to ST_Contains geography (Paul Ramsey) Loader: Add support for command-q shutdown in Mac GTK build (Paul Ramsey) #393, Loader: Add temporary patch for large DBF files (Maxime Guillaud, Paul Ramsey) #507, Fix wrong OGC URN in GeoJSON and GML output (Olivier Courtin) spatial_ref_sys.sql Add datum conversion for projection SRID 3021 (Paul Ramsey) Geography - remove crash for case when all geographies are out of the estimate (Paul Ramsey) #469, Fix for array_aggregation error (Greg Stark, Paul Ramsey) #532, Temporary geography tables showing up in other user sessions (Paul Ramsey) #562, ST_Dwithin errors for large geographies (Paul Ramsey) #513, shape loading GUI tries to make spatial index when loading DBF only mode (Paul Ramsey) #527, shape loading GUI should always append log messages (Mark Cave-Ayland) #504, shp2pgsql should rename xmin/xmax fields (Sandro Santilli) #458, postgis_comments being installed in contrib instead of version folder (Mark Cave-Ayland) #474, Analyzing a table with geography column crashes server (Paul Ramsey) #581, LWGEOM-expand produces inconsistent results (Mark Cave-Ayland) #513, Add dbf filter to shp2pgsql-gui and allow uploading dbf only (Paul Ramsey) Fix further build issues against PostgreSQL 9.0 (Mark Cave-Ayland) #572, Password whitespace for Shape File (Mark Cave-Ayland) #603, shp2pgsql: "-w" produces invalid WKT for MULTI* objects. (Mark Cave-Ayland) Release 1.5.1 Release date: 2010/03/11 This is a bug fix release, addressing issues that have been filed since the 1.4.1 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. Bug Fixes #410, update embedded bbox when applying ST_SetPoint, ST_AddPoint ST_RemovePoint to a linestring (Paul Ramsey) #411, allow dumping tables with invalid geometries (Sandro Santilli, for Regione Toscana-SIGTA) #414, include geography_columns view when running upgrade scripts (Paul Ramsey) #419, allow support for multilinestring in ST_Line_Substring (Paul Ramsey, for Lidwala Consulting Engineers) #421, fix computed string length in ST_AsGML() (Olivier Courtin) #441, fix GML generation with heterogeneous collections (Olivier Courtin) #443, incorrect coordinate reversal in GML 3 generation (Olivier Courtin) #450, #451, wrong area calculation for geography features that cross the date line (Paul Ramsey) Ensure support for upcoming 9.0 PgSQL release (Paul Ramsey) Release 1.5.0 Release date: 2010/02/04 This release provides support for geographic coordinates (lat/lon) via a new GEOGRAPHY type. Also performance enhancements, new input format support (GML,KML) and general upkeep. API Stability The public API of PostGIS will not change during minor (0.0.X) releases. The definition of the =~ operator has changed from an exact geometric equality check to a bounding box equality check. Compatibility GEOS, Proj4, and LibXML2 are now mandatory dependencies The library versions below are the minimum requirements for PostGIS 1.5 PostgreSQL 8.3 and higher on all platforms GEOS 3.1 and higher only (GEOS 3.2+ to take advantage of all features) LibXML2 2.5+ related to new ST_GeomFromGML/KML functionality Proj4 4.5 and higher only New Features Added Hausdorff distance calculations (#209) (Vincent Picavet) Added parameters argument to ST_Buffer operation to support one-sided buffering and other buffering styles (Sandro Santilli) Addition of other Distance related visualization and analysis functions (Nicklas Aven) ST_ClosestPoint ST_DFullyWithin ST_LongestLine ST_MaxDistance ST_ShortestLine ST_DumpPoints (Maxime van Noppen) KML, GML input via ST_GeomFromGML and ST_GeomFromKML (Olivier Courtin) Extract homogeneous collection with ST_CollectionExtract (Paul Ramsey) Add measure values to an existing linestring with ST_AddMeasure (Paul Ramsey) History table implementation in utils (George Silva) Geography type and supporting functions Spherical algorithms (Dave Skea) Object/index implementation (Paul Ramsey) Selectivity implementation (Mark Cave-Ayland) Serializations to KML, GML and JSON (Olivier Courtin) ST_Area, ST_Distance, ST_DWithin, ST_GeogFromText, ST_GeogFromWKB, ST_Intersects, ST_Covers, ST_Buffer (Paul Ramsey) Enhancements Performance improvements to ST_Distance (Nicklas Aven) Documentation updates and improvements (Regina Obe, Kevin Neufeld) Testing and quality control (Regina Obe) PostGIS 1.5 support PostgreSQL 8.5 trunk (Guillaume Lelarge) Win32 support and improvement of core shp2pgsql-gui (Mark Cave-Ayland) In place 'make check' support (Paul Ramsey) Bug fixes http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS+1.5.0&order=priority Release 1.4.0 Release date: 2009/07/24 This release provides performance enhancements, improved internal structures and testing, new features, and upgraded documentation. If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. API Stability As of the 1.4 release series, the public API of PostGIS will not change during minor releases. Compatibility The versions below are the *minimum* requirements for PostGIS 1.4 PostgreSQL 8.2 and higher on all platforms GEOS 3.0 and higher only PROJ4 4.5 and higher only New Features ST_Union() uses high-speed cascaded union when compiled against GEOS 3.1+ (Paul Ramsey) ST_ContainsProperly() requires GEOS 3.1+ ST_Intersects(), ST_Contains(), ST_Within() use high-speed cached prepared geometry against GEOS 3.1+ (Paul Ramsey / funded by Zonar Systems) Vastly improved documentation and reference manual (Regina Obe & Kevin Neufeld) Figures and diagram examples in the reference manual (Kevin Neufeld) ST_IsValidReason() returns readable explanations for validity failures (Paul Ramsey) ST_GeoHash() returns a geohash.org signature for geometries (Paul Ramsey) GTK+ multi-platform GUI for shape file loading (Paul Ramsey) ST_LineCrossingDirection() returns crossing directions (Paul Ramsey) ST_LocateBetweenElevations() returns sub-string based on Z-ordinate. (Paul Ramsey) Geometry parser returns explicit error message about location of syntax errors (Mark Cave-Ayland) ST_AsGeoJSON() return JSON formatted geometry (Olivier Courtin) Populate_Geometry_Columns() -- automatically add records to geometry_columns for TABLES and VIEWS (Kevin Neufeld) ST_MinimumBoundingCircle() -- returns the smallest circle polygon that can encompass a geometry (Bruce Rindahl) Enhancements Core geometry system moved into independent library, liblwgeom. (Mark Cave-Ayland) New build system uses PostgreSQL "pgxs" build bootstrapper. (Mark Cave-Ayland) Debugging framework formalized and simplified. (Mark Cave-Ayland) All build-time #defines generated at configure time and placed in headers for easier cross-platform support (Mark Cave-Ayland) Logging framework formalized and simplified (Mark Cave-Ayland) Expanded and more stable support for CIRCULARSTRING, COMPOUNDCURVE and CURVEPOLYGON, better parsing, wider support in functions (Mark Leslie & Mark Cave-Ayland) Improved support for OpenSolaris builds (Paul Ramsey) Improved support for MSVC builds (Mateusz Loskot) Updated KML support (Olivier Courtin) Unit testing framework for liblwgeom (Paul Ramsey) New testing framework to comprehensively exercise every PostGIS function (Regine Obe) Performance improvements to all geometry aggregate functions (Paul Ramsey) Support for the upcoming PostgreSQL 8.4 (Mark Cave-Ayland, Talha Bin Rizwan) Shp2pgsql and pgsql2shp re-worked to depend on the common parsing/unparsing code in liblwgeom (Mark Cave-Ayland) Use of PDF DbLatex to build PDF docs and preliminary instructions for build (Jean David Techer) Automated User documentation build (PDF and HTML) and Developer Doxygen Documentation (Kevin Neufeld) Automated build of document images using ImageMagick from WKT geometry text files (Kevin Neufeld) More attractive CSS for HTML documentation (Dane Springmeyer) Bug fixes http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS+1.4.0&order=priority Release 1.3.6 Release date: 2009/05/04 If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. This release adds support for PostgreSQL 8.4, exporting prj files from the database with shape data, some crash fixes for shp2pgsql, and several small bug fixes in the handling of "curve" types, logical error importing dbf only files, improved error handling of AddGeometryColumns. Release 1.3.5 Release date: 2008/12/15 If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. This release is a bug fix release to address a failure in ST_Force_Collection and related functions that critically affects using MapServer with LINE layers. Release 1.3.4 Release date: 2008/11/24 This release adds support for GeoJSON output, building with PostgreSQL 8.4, improves documentation quality and output aesthetics, adds function-level SQL documentation, and improves performance for some spatial predicates (point-in-polygon tests). Bug fixes include removal of crashers in handling circular strings for many functions, some memory leaks removed, a linear referencing failure for measures on vertices, and more. See the NEWS file for details. Release 1.3.3 Release date: 2008/04/12 This release fixes bugs shp2pgsql, adds enhancements to SVG and KML support, adds a ST_SimplifyPreserveTopology function, makes the build more sensitive to GEOS versions, and fixes a handful of severe but rare failure cases. Release 1.3.2 Release date: 2007/12/01 This release fixes bugs in ST_EndPoint() and ST_Envelope, improves support for JDBC building and OS/X, and adds better support for GML output with ST_AsGML(), including GML3 output. Release 1.3.1 Release date: 2007/08/13 This release fixes some oversights in the previous release around version numbering, documentation, and tagging. Release 1.3.0 Release date: 2007/08/09 This release provides performance enhancements to the relational functions, adds new relational functions and begins the migration of our function names to the SQL-MM convention, using the spatial type (SP) prefix. Added Functionality JDBC: Added Hibernate Dialect (thanks to Norman Barker) Added ST_Covers and ST_CoveredBy relational functions. Description and justification of these functions can be found at http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html Added ST_DWithin relational function. Performance Enhancements Added cached and indexed point-in-polygon short-circuits for the functions ST_Contains, ST_Intersects, ST_Within and ST_Disjoint Added inline index support for relational functions (except ST_Disjoint) Other Changes Extended curved geometry support into the geometry accessor and some processing functions Began migration of functions to the SQL-MM naming convention; using a spatial type (ST) prefix. Added initial support for PostgreSQL 8.3 Release 1.2.1 Release date: 2007/01/11 This release provides bug fixes in PostgreSQL 8.2 support and some small performance enhancements. Changes Fixed point-in-polygon shortcut bug in Within(). Fixed PostgreSQL 8.2 NULL handling for indexes. Updated RPM spec files. Added short-circuit for Transform() in no-op case. JDBC: Fixed JTS handling for multi-dimensional geometries (thanks to Thomas Marti for hint and partial patch). Additionally, now JavaDoc is compiled and packaged. Fixed classpath problems with GCJ. Fixed pgjdbc 8.2 compatibility, losing support for jdk 1.3 and older. Release 1.2.0 Release date: 2006/12/08 This release provides type definitions along with serialization/deserialization capabilities for SQL-MM defined curved geometries, as well as performance enhancements. Changes Added curved geometry type support for serialization/deserialization Added point-in-polygon shortcircuit to the Contains and Within functions to improve performance for these cases. Release 1.1.6 Release date: 2006/11/02 This is a bugfix release, in particular fixing a critical error with GEOS interface in 64bit systems. Includes an updated of the SRS parameters and an improvement in reprojections (take Z in consideration). Upgrade is encouraged. Upgrading If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes fixed CAPI change that broke 64-bit platforms loader/dumper: fixed regression tests and usage output Fixed setSRID() bug in JDBC, thanks to Thomas Marti Other changes use Z ordinate in reprojections spatial_ref_sys.sql updated to EPSG 6.11.1 Simplified Version.config infrastructure to use a single pack of version variables for everything. Include the Version.config in loader/dumper USAGE messages Replace hand-made, fragile JDBC version parser with Properties Release 1.1.5 Release date: 2006/10/13 This is an bugfix release, including a critical segfault on win32. Upgrade is encouraged. Upgrading If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes Fixed MingW link error that was causing pgsql2shp to segfault on Win32 when compiled for PostgreSQL 8.2 fixed nullpointer Exception in Geometry.equals() method in Java Added EJB3Spatial.odt to fulfill the GPL requirement of distributing the "preferred form of modification" Removed obsolete synchronization from JDBC Jts code. Updated heavily outdated README files for shp2pgsql/pgsql2shp by merging them with the manpages. Fixed version tag in jdbc code that still said "1.1.3" in the "1.1.4" release. New Features Added -S option for non-multi geometries to shp2pgsql Release 1.1.4 Release date: 2006/09/27 This is an bugfix release including some improvements in the Java interface. Upgrade is encouraged. Upgrading If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes Fixed support for PostgreSQL 8.2 Fixed bug in collect() function discarding SRID of input Added SRID match check in MakeBox2d and MakeBox3d Fixed regress tests to pass with GEOS-3.0.0 Improved pgsql2shp run concurrency. Java changes reworked JTS support to reflect new upstream JTS developers' attitude to SRID handling. Simplifies code and drops build depend on GNU trove. Added EJB2 support generously donated by the "Geodetix s.r.l. Company" http://www.geodetix.it/ Added EJB3 tutorial / examples donated by Norman Barker <nbarker@ittvis.com> Reorganized java directory layout a little. Release 1.1.3 Release date: 2006/06/30 This is an bugfix release including also some new functionalities (most notably long transaction support) and portability enhancements. Upgrade is encouraged. Upgrading If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes / correctness BUGFIX in distance(poly,poly) giving wrong results. BUGFIX in pgsql2shp successful return code. BUGFIX in shp2pgsql handling of MultiLine WKT. BUGFIX in affine() failing to update bounding box. WKT parser: forbidden construction of multigeometries with EMPTY elements (still supported for GEOMETRYCOLLECTION). New functionalities NEW Long Transactions support. NEW DumpRings() function. NEW AsHEXEWKB(geom, XDR|NDR) function. JDBC changes Improved regression tests: MultiPoint and scientific ordinates Fixed some minor bugs in jdbc code Added proper accessor functions for all fields in preparation of making those fields private later Other changes NEW regress test support for loader/dumper. Added --with-proj-libdir and --with-geos-libdir configure switches. Support for build Tru64 build. Use Jade for generating documentation. Don't link pgsql2shp to more libs then required. Initial support for PostgreSQL 8.2. Release 1.1.2 Release date: 2006/03/30 This is an bugfix release including some new functions and portability enhancements. Upgrade is encouraged. Upgrading If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes BUGFIX in SnapToGrid() computation of output bounding box BUGFIX in EnforceRHR() jdbc2 SRID handling fixes in JTS code Fixed support for 64bit archs New functionalities Regress tests can now be run *before* postgis installation New affine() matrix transformation functions New rotate{,X,Y,Z}() function Old translating and scaling functions now use affine() internally Embedded access control in estimated_extent() for builds against pgsql >= 8.0.0 Other changes More portable ./configure script Changed ./run_test script to have more sane default behaviour Release 1.1.1 Release date: 2006/01/23 This is an important Bugfix release, upgrade is highly recommended. Previous version contained a bug in postgis_restore.pl preventing hard upgrade procedure to complete and a bug in GEOS-2.2+ connector preventing GeometryCollection objects to be used in topological operations. Upgrading If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes Fixed a premature exit in postgis_restore.pl BUGFIX in geometrycollection handling of GEOS-CAPI connector Solaris 2.7 and MingW support improvements BUGFIX in line_locate_point() Fixed handling of postgresql paths BUGFIX in line_substring() Added support for localized cluster in regress tester New functionalities New Z and M interpolation in line_substring() New Z and M interpolation in line_interpolate_point() added NumInteriorRing() alias due to OpenGIS ambiguity Release 1.1.0 Release date: 2005/12/21 This is a Minor release, containing many improvements and new things. Most notably: build procedure greatly simplified; transform() performance drastically improved; more stable GEOS connectivity (CAPI support); lots of new functions; draft topology support. It is highly recommended that you upgrade to GEOS-2.2.x before installing PostGIS, this will ensure future GEOS upgrades won't require a rebuild of the PostGIS library. Credits This release includes code from Mark Cave Ayland for caching of proj4 objects. Markus Schaber added many improvements in his JDBC2 code. Alex Bodnaru helped with PostgreSQL source dependency relief and provided Debian specfiles. Michael Fuhr tested new things on Solaris arch. David Techer and Gerald Fenoy helped testing GEOS C-API connector. Hartmut Tschauner provided code for the azimuth() function. Devrim GUNDUZ provided RPM specfiles. Carl Anderson helped with the new area building functions. See the credits section for more names. Upgrading If you are upgrading from release 1.0.3 or later you DO NOT need a dump/reload. Simply sourcing the new lwpostgis_upgrade.sql script in all your existing databases will work. See the soft upgrade chapter for more information. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. New functions scale() and transscale() companion methods to translate() line_substring() line_locate_point() M(point) LineMerge(geometry) shift_longitude(geometry) azimuth(geometry) locate_along_measure(geometry, float8) locate_between_measures(geometry, float8, float8) SnapToGrid by point offset (up to 4d support) BuildArea(any_geometry) OGC BdPolyFromText(linestring_wkt, srid) OGC BdMPolyFromText(linestring_wkt, srid) RemovePoint(linestring, offset) ReplacePoint(linestring, offset, point) Bug fixes Fixed memory leak in polygonize() Fixed bug in lwgeom_as_anytype cast functions Fixed USE_GEOS, USE_PROJ and USE_STATS elements of postgis_version() output to always reflect library state. Function semantic changes SnapToGrid doesn't discard higher dimensions Changed Z() function to return NULL if requested dimension is not available Performance improvements Much faster transform() function, caching proj4 objects Removed automatic call to fix_geometry_columns() in AddGeometryColumns() and update_geometry_stats() JDBC2 works Makefile improvements JTS support improvements Improved regression test system Basic consistency check method for geometry collections Support for (Hex)(E)wkb Autoprobing DriverWrapper for HexWKB / EWKT switching fix compile problems in ValueSetter for ancient jdk releases. fix EWKT constructors to accept SRID=4711; representation added preliminary read-only support for java2d geometries Other new things Full autoconf-based configuration, with PostgreSQL source dependency relief GEOS C-API support (2.2.0 and higher) Initial support for topology modelling Debian and RPM specfiles New lwpostgis_upgrade.sql script Other changes JTS support improvements Stricter mapping between DBF and SQL integer and string attributes Wider and cleaner regression test suite old jdbc code removed from release obsoleted direct use of postgis_proc_upgrade.pl scripts version unified with release version Release 1.0.6 Release date: 2005/12/06 Contains a few bug fixes and improvements. Upgrading If you are upgrading from release 1.0.3 or later you DO NOT need a dump/reload. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes Fixed palloc(0) call in collection deserializer (only gives problem with --enable-cassert) Fixed bbox cache handling bugs Fixed geom_accum(NULL, NULL) segfault Fixed segfault in addPoint() Fixed short-allocation in lwcollection_clone() Fixed bug in segmentize() Fixed bbox computation of SnapToGrid output Improvements Initial support for postgresql 8.2 Added missing SRID mismatch checks in GEOS ops Release 1.0.5 Release date: 2005/11/25 Contains memory-alignment fixes in the library, a segfault fix in loader's handling of UTF8 attributes and a few improvements and cleanups. Return code of shp2pgsql changed from previous releases to conform to unix standards (return 0 on success). Upgrading If you are upgrading from release 1.0.3 or later you DO NOT need a dump/reload. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Library changes Fixed memory alignment problems Fixed computation of null values fraction in analyzer Fixed a small bug in the getPoint4d_p() low-level function Speedup of serializer functions Fixed a bug in force_3dm(), force_3dz() and force_4d() Loader changes Fixed return code of shp2pgsql Fixed back-compatibility issue in loader (load of null shapefiles) Fixed handling of trailing dots in dbf numerical attributes Segfault fix in shp2pgsql (utf8 encoding) Other changes Schema aware postgis_proc_upgrade.pl, support for pgsql 7.2+ New "Reporting Bugs" chapter in manual Release 1.0.4 Release date: 2005/09/09 Contains important bug fixes and a few improvements. In particular, it fixes a memory leak preventing successful build of GiST indexes for large spatial tables. Upgrading If you are upgrading from release 1.0.3 you DO NOT need a dump/reload. If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter. Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade. Bug fixes Memory leak plugged in GiST indexing Segfault fix in transform() handling of proj4 errors Fixed some proj4 texts in spatial_ref_sys (missing +proj) Loader: fixed string functions usage, reworked NULL objects check, fixed segfault on MULTILINESTRING input. Fixed bug in MakeLine dimension handling Fixed bug in translate() corrupting output bounding box Improvements Documentation improvements More robust selectivity estimator Minor speedup in distance() Minor cleanups GiST indexing cleanup Looser syntax acceptance in box3d parser Release 1.0.3 Release date: 2005/08/08 Contains some bug fixes - including a severe one affecting correctness of stored geometries - and a few improvements. Upgrading Due to a bug in a bounding box computation routine, the upgrade procedure requires special attention, as bounding boxes cached in the database could be incorrect. An hard upgrade procedure (dump/reload) will force recomputation of all bounding boxes (not included in dumps). This is required if upgrading from releases prior to 1.0.0RC6. If you are upgrading from versions 1.0.0RC6 or up, this release includes a perl script (utils/rebuild_bbox_caches.pl) to force recomputation of geometries' bounding boxes and invoke all operations required to propagate eventual changes in them (geometry statistics update, reindexing). Invoke the script after a make install (run with no args for syntax help). Optionally run utils/postgis_proc_upgrade.pl to refresh postgis procedures and functions signatures (see Soft upgrade). Bug fixes Severe bugfix in lwgeom's 2d bounding box computation Bugfix in WKT (-w) POINT handling in loader Bugfix in dumper on 64bit machines Bugfix in dumper handling of user-defined queries Bugfix in create_undef.pl script Improvements Small performance improvement in canonical input function Minor cleanups in loader Support for multibyte field names in loader Improvement in the postgis_restore.pl script New rebuild_bbox_caches.pl util script Release 1.0.2 Release date: 2005/07/04 Contains a few bug fixes and improvements. Upgrading If you are upgrading from release 1.0.0RC6 or up you DO NOT need a dump/reload. Upgrading from older releases requires a dump/reload. See the upgrading chapter for more informations. Bug fixes Fault tolerant btree ops Memory leak plugged in pg_error Rtree index fix Cleaner build scripts (avoided mix of CFLAGS and CXXFLAGS) Improvements New index creation capabilities in loader (-I switch) Initial support for postgresql 8.1dev Release 1.0.1 Release date: 2005/05/24 Contains a few bug fixes and some improvements. Upgrading If you are upgrading from release 1.0.0RC6 or up you DO NOT need a dump/reload. Upgrading from older releases requires a dump/reload. See the upgrading chapter for more informations. Library changes BUGFIX in 3d computation of length_spheroid() BUGFIX in join selectivity estimator Other changes/additions BUGFIX in shp2pgsql escape functions better support for concurrent postgis in multiple schemas documentation fixes jdbc2: compile with "-target 1.2 -source 1.2" by default NEW -k switch for pgsql2shp NEW support for custom createdb options in postgis_restore.pl BUGFIX in pgsql2shp attribute names unicity enforcement BUGFIX in Paris projections definitions postgis_restore.pl cleanups Release 1.0.0 Release date: 2005/04/19 Final 1.0.0 release. Contains a few bug fixes, some improvements in the loader (most notably support for older postgis versions), and more docs. Upgrading If you are upgrading from release 1.0.0RC6 you DO NOT need a dump/reload. Upgrading from any other precedent release requires a dump/reload. See the upgrading chapter for more informations. Library changes BUGFIX in transform() releasing random memory address BUGFIX in force_3dm() allocating less memory then required BUGFIX in join selectivity estimator (defaults, leaks, tuplecount, sd) Other changes/additions BUGFIX in shp2pgsql escape of values starting with tab or single-quote NEW manual pages for loader/dumper NEW shp2pgsql support for old (HWGEOM) postgis versions NEW -p (prepare) flag for shp2pgsql NEW manual chapter about OGC compliancy enforcement NEW autoconf support for JTS lib BUGFIX in estimator testers (support for LWGEOM and schema parsing) Release 1.0.0RC6 Release date: 2005/03/30 Sixth release candidate for 1.0.0. Contains a few bug fixes and cleanups. Upgrading You need a dump/reload to upgrade from precedent releases. See the upgrading chapter for more informations. Library changes BUGFIX in multi() early return [when noop] from multi() Scripts changes dropped {x,y}{min,max}(box2d) functions Other changes BUGFIX in postgis_restore.pl scrip BUGFIX in dumper's 64bit support Release 1.0.0RC5 Release date: 2005/03/25 Fifth release candidate for 1.0.0. Contains a few bug fixes and a improvements. Upgrading If you are upgrading from release 1.0.0RC4 you DO NOT need a dump/reload. Upgrading from any other precedent release requires a dump/reload. See the upgrading chapter for more informations. Library changes BUGFIX (segfaulting) in box3d computation (yes, another!). BUGFIX (segfaulting) in estimated_extent(). Other changes Small build scripts and utilities refinements. Additional performance tips documented. Release 1.0.0RC4 Release date: 2005/03/18 Fourth release candidate for 1.0.0. Contains bug fixes and a few improvements. Upgrading You need a dump/reload to upgrade from precedent releases. See the upgrading chapter for more informations. Library changes BUGFIX (segfaulting) in geom_accum(). BUGFIX in 64bit architectures support. BUGFIX in box3d computation function with collections. NEW subselects support in selectivity estimator. Early return from force_collection. Consistency check fix in SnapToGrid(). Box2d output changed back to 15 significant digits. Scripts changes NEW distance_sphere() function. Changed get_proj4_from_srid implementation to use PL/PGSQL instead of SQL. Other changes BUGFIX in loader and dumper handling of MultiLine shapes BUGFIX in loader, skipping all but first hole of polygons. jdbc2: code cleanups, Makefile improvements FLEX and YACC variables set *after* pgsql Makefile.global is included and only if the pgsql *stripped* version evaluates to the empty string Added already generated parser in release Build scripts refinements improved version handling, central Version.config improvements in postgis_restore.pl Release 1.0.0RC3 Release date: 2005/02/24 Third release candidate for 1.0.0. Contains many bug fixes and improvements. Upgrading You need a dump/reload to upgrade from precedent releases. See the upgrading chapter for more informations. Library changes BUGFIX in transform(): missing SRID, better error handling. BUGFIX in memory alignment handling BUGFIX in force_collection() causing mapserver connector failures on simple (single) geometry types. BUGFIX in GeometryFromText() missing to add a bbox cache. reduced precision of box2d output. prefixed DEBUG macros with PGIS_ to avoid clash with pgsql one plugged a leak in GEOS2POSTGIS converter Reduced memory usage by early releasing query-context palloced one. Scripts changes BUGFIX in 72 index bindings. BUGFIX in probe_geometry_columns() to work with PG72 and support multiple geometry columns in a single table NEW bool::text cast Some functions made IMMUTABLE from STABLE, for performance improvement. JDBC changes jdbc2: small patches, box2d/3d tests, revised docs and license. jdbc2: bug fix and testcase in for pgjdbc 8.0 type autoregistration jdbc2: Removed use of jdk1.4 only features to enable build with older jdk releases. jdbc2: Added support for building against pg72jdbc2.jar jdbc2: updated and cleaned makefile jdbc2: added BETA support for jts geometry classes jdbc2: Skip known-to-fail tests against older PostGIS servers. jdbc2: Fixed handling of measured geometries in EWKT. Other changes new performance tips chapter in manual documentation updates: pgsql72 requirement, lwpostgis.sql few changes in autoconf BUILDDATE extraction made more portable fixed spatial_ref_sys.sql to avoid vacuuming the whole database. spatial_ref_sys: changed Paris entries to match the ones distributed with 0.x. Release 1.0.0RC2 Release date: 2005/01/26 Second release candidate for 1.0.0 containing bug fixes and a few improvements. Upgrading You need a dump/reload to upgrade from precedent releases. See the upgrading chapter for more informations. Library changes BUGFIX in pointarray box3d computation BUGFIX in distance_spheroid definition BUGFIX in transform() missing to update bbox cache NEW jdbc driver (jdbc2) GEOMETRYCOLLECTION(EMPTY) syntax support for backward compatibility Faster binary outputs Stricter OGC WKB/WKT constructors Scripts changes More correct STABLE, IMMUTABLE, STRICT uses in lwpostgis.sql stricter OGC WKB/WKT constructors Other changes Faster and more robust loader (both i18n and not) Initial autoconf script Release 1.0.0RC1 Release date: 2005/01/13 This is the first candidate of a major postgis release, with internal storage of postgis types redesigned to be smaller and faster on indexed queries. Upgrading You need a dump/reload to upgrade from precedent releases. See the upgrading chapter for more informations. Changes Faster canonical input parsing. Lossless canonical output. EWKB Canonical binary IO with PG>73. Support for up to 4d coordinates, providing lossless shapefile->postgis->shapefile conversion. New function: UpdateGeometrySRID(), AsGML(), SnapToGrid(), ForceRHR(), estimated_extent(), accum(). Vertical positioning indexed operators. JOIN selectivity function. More geometry constructors / editors. PostGIS extension API. UTF8 support in loader. postgis-2.1.2+dfsg.orig/doc/reference_misc.xml0000644000000000000000000005263012105356565020036 0ustar rootroot Miscellaneous Functions ST_Accum Aggregate. Constructs an array of geometries. geometry[] ST_Accum geometry set geomfield Description Aggregate. Constructs an array of geometries. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &Z_support; &curve_support; &P_support; &T_support; Examples SELECT (ST_Accum(the_geom)) As all_em, ST_AsText((ST_Accum(the_geom))[1]) As grabone, (ST_Accum(the_geom))[2:4] as grab_rest FROM (SELECT ST_MakePoint(a*CAST(random()*10 As integer), a*CAST(random()*10 As integer), a*CAST(random()*10 As integer)) As the_geom FROM generate_series(1,4) a) As foo; all_em|grabone | grab_rest -------------------------------------------------------------------------------+ {0101000080000000000000144000000000000024400000000000001040: 0101000080000000000 00018400000000000002C400000000000003040: 0101000080000000000000354000000000000038400000000000001840: 010100008000000000000040400000000000003C400000000000003040} | POINT(5 10) | {010100008000000000000018400000000000002C400000000000003040: 0101000080000000000000354000000000000038400000000000001840: 010100008000000000000040400000000000003C400000000000003040} (1 row) See Also Box2D Returns a BOX2D representing the maximum extents of the geometry. box2d Box2D geometry geomA Description Returns a BOX2D representing the maximum extents of the geometry. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &curve_support; &P_support; &T_support; Examples SELECT Box2D(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6)')); box2d --------- BOX(1 2,5 6) SELECT Box2D(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')); box2d -------- BOX(220186.984375 150406,220288.25 150506.140625) See Also , Box3D Returns a BOX3D representing the maximum extents of the geometry. box3d Box3D geometry geomA Description Returns a BOX3D representing the maximum extents of the geometry. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &curve_support; &P_support; &T_support; &Z_support; Examples SELECT Box3D(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 5, 5 6 5)')); Box3d --------- BOX3D(1 2 3,5 6 5) SELECT Box3D(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 1,220227 150406 1)')); Box3d -------- BOX3D(220227 150406 1,220268 150415 1) See Also , ST_EstimatedExtent Return the 'estimated' extent of the given spatial table. The estimated is taken from the geometry column's statistics. The current schema will be used if not specified. box2d ST_EstimatedExtent text schema_name text table_name text geocolumn_name box2d ST_EstimatedExtent text table_name text geocolumn_name Description Return the 'estimated' extent of the given spatial table. The estimated is taken from the geometry column's statistics. The current schema will be used if not specified. For PostgreSQL>=8.0.0 statistics are gathered by VACUUM ANALYZE and resulting extent will be about 95% of the real one. In absence of statistics (empty table or no ANALYZE called) this function returns NULL. Prior to version 1.5.4 an exception was thrown instead. For PostgreSQL<8.0.0 statistics are gathered by update_geometry_stats() and resulting extent will be exact. Availability: 1.0.0 Changed: 2.1.0. Up to 2.0.x this was called ST_Estimated_Extent. &curve_support; Examples SELECT ST_EstimatedExtent('ny', 'edges', 'the_geom'); --result-- BOX(-8877653 4912316,-8010225.5 5589284) SELECT ST_EstimatedExtent('feature_poly', 'the_geom'); --result-- BOX(-124.659652709961 24.6830825805664,-67.7798080444336 49.0012092590332) See Also ST_Expand Returns bounding box expanded in all directions from the bounding box of the input geometry. Uses double-precision geometry ST_Expand geometry g1 float units_to_expand box2d ST_Expand box2d g1 float units_to_expand box3d ST_Expand box3d g1 float units_to_expand Description This function returns a bounding box expanded in all directions from the bounding box of the input geometry, by an amount specified in the second argument. Uses double-precision. Very useful for distance() queries, or bounding box queries to add an index filter to the query. There are 3 variants of this. The one that takes a geometry will return a POLYGON geometry representation of the bounding box and is the most commonly used variant. ST_Expand is similar in concept to ST_Buffer except while buffer expands the geometry in all directions, ST_Expand expands the bounding box an x,y,z unit amount. Units are in the units of the spatial reference system in use denoted by the SRID Pre 1.3, ST_Expand was used in conjunction with distance to do indexable queries. Something of the form the_geom && ST_Expand('POINT(10 20)', 10) AND ST_Distance(the_geom, 'POINT(10 20)') < 10 Post 1.2, this was replaced with the easier ST_DWithin construct. Availability: 1.5.0 behavior changed to output double precision instead of float4 coordinates. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &P_support; &T_support; Examples Examples below use US National Atlas Equal Area (SRID=2163) which is a meter projection --10 meter expanded box around bbox of a linestring SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 110701,2312892 110714)', 2163),10) As box2d); st_expand ------------------------------------ BOX(2312882 110666,2312990 110724) --10 meter expanded 3d box of a 3d box SELECT ST_Expand(CAST('BOX3D(778783 2951741 1,794875 2970042.61545891 10)' As box3d),10) st_expand ----------------------------------------------------- BOX3D(778773 2951731 -9,794885 2970052.61545891 20) --10 meter geometry astext rep of a expand box around a point geometry SELECT ST_AsEWKT(ST_Expand(ST_GeomFromEWKT('SRID=2163;POINT(2312980 110676)'),10)); st_asewkt ------------------------------------------------------------------------------------------------- SRID=2163;POLYGON((2312970 110666,2312970 110686,2312990 110686,2312990 110666,2312970 110666)) See Also , , , , , ST_Extent an aggregate function that returns the bounding box that bounds rows of geometries. box2d ST_Extent geometry set geomfield Description ST_Extent returns a bounding box that encloses a set of geometries. The ST_Extent function is an "aggregate" function in the terminology of SQL. That means that it operates on lists of data, in the same way the SUM() and AVG() functions do. Since it returns a bounding box, the spatial Units are in the units of the spatial reference system in use denoted by the SRID ST_Extent is similar in concept to Oracle Spatial/Locator's SDO_AGGR_MBR Since ST_Extent returns a bounding box, the SRID meta-data is lost. Use ST_SetSRID to force it back into a geometry with SRID meta data. The coordinates are in the units of the spatial ref of the orginal geometries. ST_Extent will return boxes with only an x and y component even with (x,y,z) coordinate geometries. To maintain x,y,z use ST_3DExtent instead. Availability: 1.4.0 Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &P_support; &T_support; Examples Examples below use Massachusetts State Plane ft (SRID=2249) SELECT ST_Extent(the_geom) as bextent FROM sometable; st_bextent ------------------------------------ BOX(739651.875 2908247.25,794875.8125 2970042.75) --Return extent of each category of geometries SELECT ST_Extent(the_geom) as bextent FROM sometable GROUP BY category ORDER BY category; bextent | name ----------------------------------------------------+---------------- BOX(778783.5625 2951741.25,794875.8125 2970042.75) | A BOX(751315.8125 2919164.75,765202.6875 2935417.25) | B BOX(739651.875 2917394.75,756688.375 2935866) | C --Force back into a geometry -- and render the extended text representation of that geometry SELECT ST_SetSRID(ST_Extent(the_geom),2249) as bextent FROM sometable; bextent -------------------------------------------------------------------------------- SRID=2249;POLYGON((739651.875 2908247.25,739651.875 2970042.75,794875.8125 2970042.75, 794875.8125 2908247.25,739651.875 2908247.25)) See Also , , , ST_3DExtent an aggregate function that returns the box3D bounding box that bounds rows of geometries. box3d ST_3DExtent geometry set geomfield Description ST_3DExtent returns a box3d (includes Z coordinate) bounding box that encloses a set of geometries. The ST_3DExtent function is an "aggregate" function in the terminology of SQL. That means that it operates on lists of data, in the same way the SUM() and AVG() functions do. Since it returns a bounding box, the spatial Units are in the units of the spatial reference system in use denoted by the SRID Since ST_3DExtent returns a bounding box, the SRID meta-data is lost. Use ST_SetSRID to force it back into a geometry with SRID meta data. The coordinates are in the units of the spatial ref of the orginal geometries. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Changed: 2.0.0 In prior versions this used to be called ST_Extent3D &Z_support; &curve_support; &P_support; &T_support; Examples SELECT ST_3DExtent(foo.the_geom) As b3extent FROM (SELECT ST_MakePoint(x,y,z) As the_geom FROM generate_series(1,3) As x CROSS JOIN generate_series(1,2) As y CROSS JOIN generate_series(0,2) As Z) As foo; b3extent -------------------- BOX3D(1 1 0,3 2 2) --Get the extent of various elevated circular strings SELECT ST_3DExtent(foo.the_geom) As b3extent FROM (SELECT ST_Translate(ST_Force_3DZ(ST_LineToCurve(ST_Buffer(ST_MakePoint(x,y),1))),0,0,z) As the_geom FROM generate_series(1,3) As x CROSS JOIN generate_series(1,2) As y CROSS JOIN generate_series(0,2) As Z) As foo; b3extent -------------------- BOX3D(1 0 0,4 2 2) See Also , Find_SRID The syntax is find_srid(a_db_schema, a_table, a_column) and the function returns the integer SRID of the specified column by searching through the GEOMETRY_COLUMNS table. integer Find_SRID varchar a_schema_name varchar a_table_name varchar a_geomfield_name Description The syntax is find_srid(<db/schema>, <table>, <column>) and the function returns the integer SRID of the specified column by searching through the GEOMETRY_COLUMNS table. If the geometry column has not been properly added with the AddGeometryColumns() function, this function will not work either. Examples SELECT Find_SRID('public', 'tiger_us_state_2007', 'the_geom_4269'); find_srid ---------- 4269 See Also ST_Mem_Size Returns the amount of space (in bytes) the geometry takes. integer ST_Mem_Size geometry geomA Description Returns the amount of space (in bytes) the geometry takes. This is a nice compliment to PostgreSQL built in functions pg_size_pretty, pg_relation_size, pg_total_relation_size. pg_relation_size which gives the byte size of a table may return byte size lower than ST_Mem_Size. This is because pg_relation_size does not add toasted table contribution and large geometries are stored in TOAST tables. pg_total_relation_size - includes, the table, the toasted tables, and the indexes. &Z_support; &curve_support; &P_support; &T_support; Examples --Return how much byte space Boston takes up in our Mass data set SELECT pg_size_pretty(SUM(ST_Mem_Size(the_geom))) as totgeomsum, pg_size_pretty(SUM(CASE WHEN town = 'BOSTON' THEN st_mem_size(the_geom) ELSE 0 END)) As bossum, CAST(SUM(CASE WHEN town = 'BOSTON' THEN st_mem_size(the_geom) ELSE 0 END)*1.00 / SUM(st_mem_size(the_geom))*100 As numeric(10,2)) As perbos FROM towns; totgeomsum bossum perbos ---------- ------ ------ 1522 kB 30 kB 1.99 SELECT ST_Mem_Size(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')); --- 73 --What percentage of our table is taken up by just the geometry SELECT pg_total_relation_size('public.neighborhoods') As fulltable_size, sum(ST_Mem_Size(the_geom)) As geomsize, sum(ST_Mem_Size(the_geom))*1.00/pg_total_relation_size('public.neighborhoods')*100 As pergeom FROM neighborhoods; fulltable_size geomsize pergeom ------------------------------------------------ 262144 96238 36.71188354492187500000 See Also ST_Point_Inside_Circle Is the point geometry insert circle defined by center_x, center_y, radius boolean ST_Point_Inside_Circle geometry a_point float center_x float center_y float radius Description The syntax for this functions is point_inside_circle(<geometry>,<circle_center_x>,<circle_center_y>,<radius>). Returns the true if the geometry is a point and is inside the circle. Returns false otherwise. This only works for points as the name suggests Examples SELECT ST_Point_Inside_Circle(ST_Point(1,2), 0.5, 2, 3); st_point_inside_circle ------------------------ t See Also postgis-2.1.2+dfsg.orig/doc/using_raster_dataman.xml0000644000000000000000000011527012277306731021257 0ustar rootroot Raster Data Management, Queries, and Applications Loading and Creating Rasters For most use cases, you will create PostGIS rasters by loading existing raster files using the packaged raster2pgsql raster loader. Using raster2pgsql to load rasters The raster2pgsql is a raster loader executable that loads GDAL supported raster formats into sql suitable for loading into a PostGIS raster table. It is capable of loading folders of raster files as well as creating overviews of rasters. Since the raster2pgsql is compiled as part of PostGIS most often (unless you compile your own GDAL library), the raster types supported by the executable will be the same as those compiled in the GDAL dependency library. To get a list of raster types your particular raster2pgsql supports use the -G switch. These should be the same as those provided by your PostGIS install documented here if you are using the same gdal library for both. The older version of this tool was a python script. The executable has replaced the python script. If you still find the need for the Python script Examples of the python one can be found at GDAL PostGIS Raster Driver Usage. Please note that the raster2pgsql python script may not work with future versions of PostGIS raster and is no longer supported. When creating overviews of a specific factor from a set of rasters that are aligned, it is possible for the overviews to not align. Visit http://trac.osgeo.org/postgis/ticket/1764 for an example where the overviews do not align. EXAMPLE USAGE: raster2pgsql raster_options_go_here raster_file someschema.sometable > out.sql -? Display help screen. Help will also display if you don't pass in any arguments. -G Print the supported raster formats. (c|a|d|p) These are mutually exclusive options: -c Create new table and populate it with raster(s), this is the default mode -a Append raster(s) to an existing table. -d Drop table, create new one and populate it with raster(s) -p Prepare mode, only create the table. Raster processing: Applying constraints for proper registering in raster catalogs -C Apply raster constraints -- srid, pixelsize etc. to ensure raster is properly registered in raster_columns view. -x Disable setting the max extent constraint. Only applied if -C flag is also used. -r Set the constraints (spatially unique and coverage tile) for regular blocking. Only applied if -C flag is also used. Raster processing: Optional parameters used to manipulate input raster dataset -s <SRID> Assign output raster with specified SRID. If not provided or is zero, raster's metadata will be checked to determine an appropriate SRID. -b BAND Index (1-based) of band to extract from raster. For more than one band index, separate with comma (,). If unspecified, all bands of raster will be extracted. -t TILE_SIZE Cut raster into tiles to be inserted one per table row. TILE_SIZE is expressed as WIDTHxHEIGHT or set to the value "auto" to allow the loader to compute an appropriate tile size using the first raster and applied to all rasters. -R, --register Register the raster as a filesystem (out-db) raster. Only the metadata of the raster and path location to the raster is stored in the database (not the pixels). -l OVERVIEW_FACTOR Create overview of the raster. For more than one factor, separate with comma(,). Overview table name follows the pattern o_overview factor_table, where overview factor is a placeholder for numerical overview factor and table is replaced with the base table name. Created overview is stored in the database and is not affected by -R. Note that your generated sql file will contain both the main table and overview tables. -N NODATA NODATA value to use on bands without a NODATA value. Optional parameters used to manipulate database objects -q Wrap PostgreSQL identifiers in quotes -f COLUMN Specify name of destination raster column, default is 'rast' -F Add a column with the name of the file -I Create a GiST index on the raster column. -M Vacuum analyze the raster table. -T tablespace Specify the tablespace for the new table. Note that indices (including the primary key) will still use the default tablespace unless the -X flag is also used. -X tablespace Specify the tablespace for the table's new index. This applies to the primary key and the spatial index if the -I flag is used. -Y Use copy statements instead of insert statements. -e Execute each statement individually, do not use a transaction. -E ENDIAN Control endianness of generated binary output of raster; specify 0 for XDR and 1 for NDR (default); only NDR output is supported now -V version Specify version of output format. Default is 0. Only 0 is supported at this time. An example session using the loader to create an input file and uploading it chunked in 100x100 tiles might look like this: You can leave the schema name out e.g demelevation instead of public.demelevation and the raster table will be created in the default schema of the database or user raster2pgsql -s 4236 -I -C -M *.tif -F -t 100x100 public.demelevation > elev.sql psql -d gisdb -f elev.sql A conversion and upload can be done all in one step using UNIX pipes: raster2pgsql -s 4236 -I -C -M *.tif -F -t 100x100 public.demelevation | psql -d gisdb Load rasters Massachusetts state plane meters aerial tiles into a schema called aerial and create a full view, 2 and 4 level overview tables, use copy mode for inserting (no intermediary file just straight to db), and -e don't force everything in a transaction (good if you want to see data in tables right away without waiting). Break up the rasters into 128x128 pixel tiles and apply raster constraints. Use copy mode instead of table insert. (-F) Include a field called filename to hold the name of the file the tiles were cut from. raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432 --get a list of raster types supported: raster2pgsql -G The -G commands outputs a list something like Available GDAL raster formats: Virtual Raster GeoTIFF National Imagery Transmission Format Raster Product Format TOC format ECRG TOC format Erdas Imagine Images (.img) CEOS SAR Image CEOS Image JAXA PALSAR Product Reader (Level 1.1/1.5) Ground-based SAR Applications Testbed File Format (.gff) ELAS Arc/Info Binary Grid Arc/Info ASCII Grid GRASS ASCII Grid SDTS Raster DTED Elevation Raster Portable Network Graphics JPEG JFIF In Memory Raster Japanese DEM (.mem) Graphics Interchange Format (.gif) Graphics Interchange Format (.gif) Envisat Image Format Maptech BSB Nautical Charts X11 PixMap Format MS Windows Device Independent Bitmap SPOT DIMAP AirSAR Polarimetric Image RadarSat 2 XML Product PCIDSK Database File PCRaster Raster File ILWIS Raster Map SGI Image File Format 1.0 SRTMHGT File Format Leveller heightfield Terragen heightfield USGS Astrogeology ISIS cube (Version 3) USGS Astrogeology ISIS cube (Version 2) NASA Planetary Data System EarthWatch .TIL ERMapper .ers Labelled NOAA Polar Orbiter Level 1b Data Set FIT Image GRIdded Binary (.grb) Raster Matrix Format EUMETSAT Archive native (.nat) Idrisi Raster A.1 Intergraph Raster Golden Software ASCII Grid (.grd) Golden Software Binary Grid (.grd) Golden Software 7 Binary Grid (.grd) COSAR Annotated Binary Matrix (TerraSAR-X) TerraSAR-X Product DRDC COASP SAR Processor Raster R Object Data Store Portable Pixmap Format (netpbm) USGS DOQ (Old Style) USGS DOQ (New Style) ENVI .hdr Labelled ESRI .hdr Labelled Generic Binary (.hdr Labelled) PCI .aux Labelled Vexcel MFF Raster Vexcel MFF2 (HKV) Raster Fuji BAS Scanner Image GSC Geogrid EOSAT FAST Format VTP .bt (Binary Terrain) 1.3 Format Erdas .LAN/.GIS Convair PolGASP Image Data and Analysis NLAPS Data Format Erdas Imagine Raw DIPEx FARSITE v.4 Landscape File (.lcp) NOAA Vertical Datum .GTX NADCON .los/.las Datum Grid Shift NTv2 Datum Grid Shift ACE2 Snow Data Assimilation System Swedish Grid RIK (.rik) USGS Optional ASCII DEM (and CDED) GeoSoft Grid Exchange Format Northwood Numeric Grid Format .grd/.tab Northwood Classified Grid Format .grc/.tab ARC Digitized Raster Graphics Standard Raster Product (ASRP/USRP) Magellan topo (.blx) SAGA GIS Binary Grid (.sdat) Kml Super Overlay ASCII Gridded XYZ HF2/HFZ heightfield raster OziExplorer Image File USGS LULC Composite Theme Grid Arc/Info Export E00 GRID ZMap Plus Grid NOAA NGS Geoid Height Grids Creating rasters using PostGIS raster functions On many occasions, you'll want to create rasters and raster tables right in the database. There are a plethora of functions to do that. The general steps to follow. Create a table with a raster column to hold the new raster records which can be accomplished with: CREATE TABLE myrasters(rid serial primary key, rast raster); There are many functions to help with that goal. If you are creating rasters not as a derivative of other rasters, you will want to start with: , followed by You can also create rasters from geometries. To achieve that you'll want to use perhaps accompanied with other functions such as or or any of the family of other map algebra functions. There are even many more options for creating new raster tables from existing tables. For example you can create a raster table in a different projection from an existing one using Once you are done populating your table initially, you'll want to create a spatial index on the raster column with something like: CREATE INDEX myrasters_rast_st_convexhull_idx ON myrasters USING gist( ST_ConvexHull(rast) ); Note the use of since most raster operators are based on the convex hull of the rasters. Pre-2.0 versions of PostGIS raster were based on the envelope rather than the convex hull. For the spatial indexes to work properly you'll need to drop those and replace with convex hull based index. Apply raster constraints using Raster Catalogs There are two raster catalog views that come packaged with PostGIS. Both views utilize information embedded in the constraints of the raster tables. As a result the catalog views are always consistent with the raster data in the tables since the constraints are enforced. raster_columns this view catalogs all the raster table columns in your database. raster_overviews this view catalogs all the raster table columns in your database that serve as overviews for a finer grained table. Tables of this type are generated when you use the -l switch during load. Raster Columns Catalog The raster_columns is a catalog of all raster table columns in your database that are of type raster. It is a view utilizing the constraints on the tables so the information is always consistent even if you restore one raster table from a backup of another database. The following columns exist in the raster_columns catalog. If you created your tables not with the loader or forgot to specify the -C flag during load, you can enforce the constraints after the fact using so that the raster_columns catalog registers the common information about your raster tiles. r_table_catalog The database the table is in. This will always read the current database. r_table_schema The database schema the raster table belongs to. r_table_name raster table r_raster_column the column in the r_table_name table that is of type raster. There is nothing in PostGIS preventing you from having multiple raster columns per table so its possible to have a raster table listed multiple times with a different raster column for each. srid The spatial reference identifier of the raster. Should be an entry in the . scale_x The scaling between geometric spatial coordinates and pixel. This is only available if all tiles in the raster column have the same scale_x and this constraint is applied. Refer to for more details. scale_y The scaling between geometric spatial coordinates and pixel. This is only available if all tiles in the raster column have the same scale_y and the scale_y constraint is applied. Refer to for more details. blocksize_x The width (number of pixels across) of each raster tile . Refer to for more details. blocksize_y The width (number of pixels down) of each raster tile . Refer to for more details. same_alignment A boolean that is true if all the raster tiles have the same alignment . Refer to for more details. regular_blocking If the raster column has the spatially unique and coverage tile constraints, the value with be TRUE. Otherwise, it will be FALSE. num_bands The number of bands in each tile of your raster set. This is the same information as what is provided by pixel_types An array defining the pixel type for each band. You will have the same number of elements in this array as you have number of bands. The pixel_types are one of the following defined in . nodata_values An array of double precision numbers denoting the nodata_value for each band. You will have the same number of elements in this array as you have number of bands. These numbers define the pixel value for each band that should be ignored for most operations. This is similar information provided by . extent This is the extent of all the raster rows in your raster set. If you plan to load more data that will change the extent of the set, you'll want to run the function before load and then reapply constraints with after load. Raster Overviews raster_overviews catalogs information about raster table columns used for overviews and additional information about them that is useful to know when utilizing overviews. Overview tables are cataloged in both raster_columns and raster_overviews because they are rasters in their own right but also serve an additional special purpose of being a lower resolution caricature of a higher resolution table. These are generated along-side the main raster table when you use the -l switch in raster loading. Overview tables contain the same constraints as other raster tables as well as additional informational only constraints specific to overviews. The information in raster_overviews does not duplicate the information in raster_columns. If you need the information about an overview table present in raster_columns you can join the raster_overviews and raster_columns together to get the full set of information you need. Two main reasons for overviews are: Low resolution representation of the core tables commonly used for fast mapping zoom-out. Computations are generally faster to do on them than their higher resolution parents because there are fewer records and each pixel covers more territory. Though the computations are not as accurate as the high-res tables they support, they can be sufficient in many rule-of-thumb computations. The raster_overviews catalog contains the following columns of information. o_table_catalog The database the overview table is in. This will always read the current database. o_table_schema The database schema the overview raster table belongs to. o_table_name raster overview table name o_raster_column the raster column in the overview table. r_table_catalog The database the raster table that this overview services is in. This will always read the current database. r_table_schema The database schema the raster table that this overview services belongs to. r_table_name raster table that this overview services. r_raster_column the raster column that this overview column services. overview_factor - this is the pyramid level of the overview table. The higher the number the lower the resolution of the table. raster2pgsql if given a folder of images, will compute overview of each image file and load separately. Level 1 is assumed and always the original file. Level 2 is will have each tile represent 4 of the original. So for example if you have a folder of 5000x5000 pixel image files that you chose to chunk 125x125, for each image file your base table will have (5000*5000)/(125*125) records = 1600, your (l=2) o_2 table will have ceiling(1600/Power(2,2)) = 400 rows, your (l=3) o_3 will have ceiling(1600/Power(2,3) ) = 200 rows. If your pixels aren't divisible by the size of your tiles, you'll get some scrap tiles (tiles not completely filled). Note that each overview tile generated by raster2pgsql has the same number of pixels as its parent, but is of a lower resolution where each pixel of it represents (Power(2,overview_factor) pixels of the original). Building Custom Applications with PostGIS Raster The fact that PostGIS raster provides you with SQL functions to render rasters in known image formats gives you a lot of optoins for rendering them. For example you can use OpenOffice / LibreOffice for rendering as demonstrated in Rendering PostGIS Raster graphics with LibreOffice Base Reports. In addition you can use a wide variety of languages as demonstrated in this section. PHP Example Outputting using ST_AsPNG in concert with other raster functions In this section, we'll demonstrate how to use the PHP PostgreSQL driver and the family of functions to output band 1,2,3 of a raster to a PHP request stream that can then be embedded in an img src html tag. The sample query demonstrates how to combine a whole bunch of raster functions together to grab all tiles that intersect a particular wgs 84 bounding box and then unions with the intersecting tiles together returning all bands, transforms to user specified projection using , and then outputs the results as a png using . You would call the below using http://mywebserver/test_raster.php?srid=2249 to get the raster image in Massachusetts state plane feet. ]]> ASP.NET C# Example Outputting using ST_AsPNG in concert with other raster functions In this section, we'll demonstrate how to use Npgsql PostgreSQL .NET driver and the family of functions to output band 1,2,3 of a raster to a PHP request stream that can then be embedded in an img src html tag. You will need the npgsql .NET PostgreSQL driver for this exercise which you can get the latest of from http://npgsql.projects.postgresql.org/. Just download the latest and drop into your ASP.NET bin folder and you'll be good to go. The sample query demonstrates how to combine a whole bunch of raster functions together to grab all tiles that intersect a particular wgs 84 bounding box and then unions with the intersecting tiles together returning all bands, transforms to user specified projection using , and then outputs the results as a png using . This is same example as except implemented in C#. You would call the below using http://mywebserver/TestRaster.ashx?srid=2249 to get the raster image in Massachusetts state plane feet. -- web.config connection string section -- ]]> // Code for TestRaster.ashx using System; using System.Data; using System.Web; using Npgsql; public class TestRaster : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/png"; context.Response.BinaryWrite(GetResults(context)); } public bool IsReusable { get { return false; } } public byte[] GetResults(HttpContext context) { byte[] result = null; NpgsqlCommand command; string sql = null; int input_srid = 26986; try { using (NpgsqlConnection conn = new NpgsqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DSN"].ConnectionString)) { conn.Open(); if (context.Request["srid"] != null) { input_srid = Convert.ToInt32(context.Request["srid"]); } sql = @"SELECT ST_AsPNG( ST_Transform( ST_AddBand( ST_Union(rast,1), ARRAY[ST_Union(rast,2),ST_Union(rast,3)]) ,:input_srid) ) As new_rast FROM aerials.boston WHERE ST_Intersects(rast, ST_Transform(ST_MakeEnvelope(-71.1217, 42.227, -71.1210, 42.218,4326),26986) )"; command = new NpgsqlCommand(sql, conn); command.Parameters.Add(new NpgsqlParameter("input_srid", input_srid)); result = (byte[]) command.ExecuteScalar(); conn.Close(); } } catch (Exception ex) { result = null; context.Response.Write(ex.Message.Trim()); } return result; } }]]> Java console app that outputs raster query as Image file This is a simple java console app that takes a query that returns one image and outputs to specified file. You can download the latest PostgreSQL JDBC drivers from http://jdbc.postgresql.org/download.html You can compile the following code using a command something like: set env CLASSPATH .:..\postgresql-9.0-801.jdbc4.jar javac SaveQueryImage.java jar cfm SaveQueryImage.jar Manifest.txt *.class And call it from the command-line with something like java -jar SaveQueryImage.jar "SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10, 'quad_segs=2'),150, 150, '8BUI',100));" "test.png" -- Manifest.txt -- // Code for SaveQueryImage.java Use PLPython to dump out images via SQL This is a plpython stored function that creates a file in the server directory for each record. plpython postgresql stored proc. Requires you have plpython installed. Should work fine with both plpythonu and plpython3u. --write out 5 images to the PostgreSQL server in varying sizes -- note the postgresql daemon account needs to have write access to folder -- this echos back the file names created; SELECT write_file(ST_AsPNG( ST_AsRaster(ST_Buffer(ST_Point(1,5),j*5, 'quad_segs=2'),150*j, 150*j, '8BUI',100)), 'C:/temp/slices'|| j || '.png') FROM generate_series(1,5) As j; write_file --------------------- C:/temp/slices1.png C:/temp/slices2.png C:/temp/slices3.png C:/temp/slices4.png C:/temp/slices5.png Outputting Rasters with PSQL Sadly PSQL doesn't have easy to use built-in functionality for outputting binaries. This is a bit of a hack and based on one of the suggestions outlined in Clever Trick Challenge -- Outputting bytea with psql that piggy backs on PostgreSQL somewhat legacy large object support. To use first launch your psql commandline connected to your database. Unlike the python approach, this approach creates the file on your local computer. SELECT oid, lowrite(lo_open(oid, 131072), png) As num_bytes FROM ( VALUES (lo_create(0), ST_AsPNG( (SELECT rast FROM aerials.boston WHERE rid=1) ) ) ) As v(oid,png); -- you'll get an output something like -- oid | num_bytes ---------+----------- 2630819 | 74860 -- next note the oid and do this replacing the c:/test.png to file path location -- on your local computer \lo_export 2630819 'C:/temp/aerial_samp.png' -- this deletes the file from large object storage on db SELECT lo_unlink(2630819); postgis-2.1.2+dfsg.orig/doc/extras_topology.xml0000644000000000000000000040053512274123162020320 0ustar rootroot Topology The PostGIS Topology types and functions are used to manage topological objects such as faces, edges and nodes. Sandro Santilli's presentation at PostGIS Day Paris 2011 conference gives a good synopsis of PostGIS Topology and where it is headed Topology with PostGIS 2.0 slide deck. Vincent Picavet provides a good synopsis and overview of what is Topology, how is it used, and various FOSS4G tools that support it in State of the art of FOSS4G for topology and network analysis. An example of a topologically based GIS database is the US Census Topologically Integrated Geographic Encoding and Reference System (TIGER) database. If you want to experiment with PostGIS topology and need some data, check out . The PostGIS topology module has existed in prior versions of PostGIS but was never part of the Official PostGIS documentation. In PostGIS 2.0.0 major cleanup is going on to remove use of all deprecated functions in it, fix known usability issues, better document the features and functions, add new functions, and enhance to closer conform to SQL-MM standards. Details of this project can be found at PostGIS Topology Wiki All functions and tables associated with this module are installed in a schema called topology. Functions that are defined in SQL/MM standard are prefixed with ST_ and functions specific to PostGIS are not prefixed. To build PostGIS 2.0 with topology support, compile with the --with-topology option as described in . Some functions depend on GEOS 3.3+ so you should compile with GEOS 3.3+ to fully utilize the topology support. This section lists the PostgreSQL data types installed by PostGIS Topology. Note we describe the casting behavior of these which is very important especially when designing your own functions. Topology Types getfaceedges_returntype A composite type that consists of a sequence number and edge number. This is the return type for ST_GetFaceEdges Description A composite type that consists of a sequence number and edge number. This is the return type for ST_GetFaceEdges function. sequence is an integer: Refers to a topology defined in the topology.topology table which defines the topology schema and srid. edge is an integer: The identifier of an edge. TopoGeometry A composite type representing a topologically defined geometry Description A composite type that refers to a topology geometry in a specific topology layer, having a specific type and a specific id. The elements of a TopoGeometry are the properties: topology_id, layer_id, id integer, type integer. topology_id is an integer: Refers to a topology defined in the topology.topology table which defines the topology schema and srid. layer_id is an integer: The layer_id in the layers table that the TopoGeometry belongs to. The combination of topology_id, layer_id provides a unique reference in the topology.layers table. id is an integer: The id is the autogenerated sequence number that uniquely defines the topogeometry in the respective topology layer. type integer between 1 - 4 that defines the geometry type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection Casting Behavior This section lists the automatic as well as explicit casts allowed for this data type Cast To Behavior geometry automatic See Also validatetopology_returntype A composite type that consists of an error message and id1 and id2 to denote location of error. This is the return type for ValidateTopology Description A composite type that consists of an error message and two integers. The function returns a set of these to denote validation errors and the id1 and id2 to denote the ids of the topology objects involved in the error. error is varchar: Denotes type of error. Current error descriptors are: coincident nodes, edge crosses node, edge not simple, edge end node geometry mis-match, edge start node geometry mismatch, face overlaps face,face within face, id1 is an integer: Denotes identifier of edge / face / nodes in error. id2 is an integer: For errors that involve 2 objects denotes the secondary edge / or node See Also This section lists the PostgreSQL domains installed by PostGIS Topology. Domains can be used like object types as return objects of functions or table columns. The distinction between a domain and a type is that a domain is an existing type with a check constraint bound to it. Topology Domains TopoElement An array of 2 integers generally used to identify a TopoGeometry component. Description An array of 2 integers used to represent the id (first element) and type (second element) of a topology primitive or the id (first element) and layer (second element) of a TopoGeometry. Sets of such pairs are used to define TopoGeometry objects (either simple or hierarchical). Examples SELECT te[1] AS id, te[2] AS type FROM ( SELECT ARRAY[1,2]::topology.topoelement AS te ) f; id | type ----+------ 1 | 2 SELECT ARRAY[1,2]::topology.topoelement; te ------- {1,2} --Example of what happens when you try to case a 3 element array to topoelement -- NOTE: topoement has to be a 2 element array so fails dimension check SELECT ARRAY[1,2,3]::topology.topoelement; ERROR: value for domain topology.topoelement violates check constraint "dimensions" See Also , TopoElementArray An array of TopoElement objects Description An array of 1 or more TopoElement objects, generally used to pass around components of TopoGeometry objects. Examples SELECT '{{1,2},{4,3}}'::topology.topoelementarray As tea; tea ------- {{1,2},{4,3}} -- more verbose equivalent -- SELECT ARRAY[ARRAY[1,2], ARRAY[4,3]]::topology.topoelementarray As tea; tea ------- {{1,2},{4,3}} --using the array agg function packaged with topology -- SELECT topology.TopoElementArray_Agg(ARRAY[e,t]) As tea FROM generate_series(1,4) As e CROSS JOIN generate_series(1,3) As t; tea -------------------------------------------------------------------------- {{1,1},{1,2},{1,3},{2,1},{2,2},{2,3},{3,1},{3,2},{3,3},{4,1},{4,2},{4,3}} SELECT '{{1,2,4},{3,4,5}}'::topology.topoelementarray As tea; ERROR: value for domain topology.topoelementarray violates check constraint "dimensions" See Also , , This section lists the Topology functions for building new Topology schemas, validating topologies, and managing TopoGeometry Columns Topology and TopoGeometry Management AddTopoGeometryColumn Adds a topogeometry column to an existing table, registers this new column as a layer in topology.layer and returns the new layer_id. text AddTopoGeometryColumn varchar topology_name varchar schema_name varchar table_name varchar column_name varchar feature_type text AddTopoGeometryColumn varchar topology_name varchar schema_name varchar table_name varchar column_name varchar feature_type integer child_layer Description Each TopoGeometry object belongs to a specific Layer of a specific Topology. Before creating a TopoGeometry object you need to create its TopologyLayer. A Topology Layer is an association of a feature-table with the topology. It also contain type and hierarchy information. We create a layer using the AddTopoGeometryColumn() function: This function will both add the requested column to the table and add a record to the topology.layer table with all the given info. If you don't specify [child_layer] (or set it to NULL) this layer would contain Basic TopoGeometries (composed by primitive topology elements). Otherwise this layer will contain hierarchical TopoGeometries (composed by TopoGeometries from the child_layer). Once the layer is created (it's id is returned by the AddTopoGeometryColumn function) you're ready to construct TopoGeometry objects in it Valid feature_types are: POINT, LINE, POLYGON, COLLECTION Availability: 1.? Examples -- Note for this example we created our new table in the ma_topo schema -- though we could have created it in a different schema -- in which case topology_name and schema_name would be different CREATE SCHEMA ma; CREATE TABLE ma.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, address text); SELECT topology.AddTopoGeometryColumn('ma_topo', 'ma', 'parcels', 'topo', 'POLYGON'); CREATE SCHEMA ri; CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text); SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE'); See Also , DropTopology Use with caution: Drops a topology schema and deletes its reference from topology.topology table and references to tables in that schema from the geometry_columns table. integer DropTopology varchar topology_schema_name Description Drops a topology schema and deletes its reference from topology.topology table and references to tables in that schema from the geometry_columns table. This function should be USED WITH CAUTION, as it could destroy data you care about. If the schema does not exist, it just removes reference entries the named schema. Availability: 1.? Examples Cascade drops the ma_topo schema and removes all references to it in topology.topology and geometry_columns. SELECT topology.DropTopology('ma_topo'); See Also DropTopoGeometryColumn Drops the topogeometry column from the table named table_name in schema schema_name and unregisters the columns from topology.layer table. text DropTopoGeometryColumn varchar schema_name varchar table_name varchar column_name Description Drops the topogeometry column from the table named table_name in schema schema_name and unregisters the columns from topology.layer table. Returns summary of drop status. NOTE: it first sets all values to NULL before dropping to bypass referential integrity checks. Availability: 1.? Examples SELECT topology.DropTopoGeometryColumn('ma_topo', 'parcel_topo', 'topo'); See Also TopologySummary Takes a topology name and provides summary totals of types of objects in topology text TopologySummary varchar topology_schema_name Description Takes a topology name and provides summary totals of types of objects in topology. Availability: 2.0.0 Examples SELECT topology.topologysummary('city_data'); topologysummary -------------------------------------------------------- Topology city_data (329), SRID 4326, precision: 0 22 nodes, 24 edges, 10 faces, 29 topogeoms in 5 layers Layer 1, type Polygonal (3), 9 topogeoms Deploy: features.land_parcels.feature Layer 2, type Puntal (1), 8 topogeoms Deploy: features.traffic_signs.feature Layer 3, type Lineal (2), 8 topogeoms Deploy: features.city_streets.feature Layer 4, type Polygonal (3), 3 topogeoms Hierarchy level 1, child layer 1 Deploy: features.big_parcels.feature Layer 5, type Puntal (1), 1 topogeoms Hierarchy level 1, child layer 2 Deploy: features.big_signs.feature See Also ValidateTopology Returns a set of validatetopology_returntype objects detailing issues with topology setof validatetopology_returntype ValidateTopology varchar topology_schema_name Description Returns a set of objects detailing issues with topology. Refer to for listing of possible errors. Availability: 1.? Enhanced: 2.0.0 more efficient edge crossing detection and fixes for false positives that were existent in prior versions. Examples SELECT * FROM topology.ValidateTopology('ma_topo'); error | id1 | id2 -------------------+-----+----- face without edges | 0 | See Also , This section covers the topology functions for creating new topologies. Topology Constructors CreateTopology Creates a new topology schema and registers this new schema in the topology.topology table. integer CreateTopology varchar topology_schema_name integer CreateTopology varchar topology_schema_name integer srid integer CreateTopology varchar topology_schema_name integer srid double precision tolerance integer CreateTopology varchar topology_schema_name integer srid double precision tolerance boolean hasz Description Creates a new schema with name topology_name consisting of tables (edge_data,face,node, relation and registers this new topology in the topology.topology table. It returns the id of the topology in the topology table. The srid is the spatial reference identified as defined in spatial_ref_sys table for that topology. Topologies must be uniquely named. The tolerance is measured in the units of the spatial reference system. If the tolerance is not specified defaults to 0. This is similar to the SQL/MM but a bit more functional. hasz defaults to false if not specified. Availability: 1.? Examples This example creates a new schema called ma_topo that will store edges, faces, and relations in Massachusetts State Plane meters. The tolerance represents 1/2 meter since the spatial reference system is a meter based spatial reference system SELECT topology.CreateTopology('ma_topo',26986, 0.5); Create Rhode Island topology in State Plane ft SELECT topology.CreateTopology('ri_topo',3438) As topoid; topoid ------ 2 See Also , , CopyTopology Makes a copy of a topology structure (nodes, edges, faces, layers and TopoGeometries). integer CopyTopology varchar existing_topology_name varchar new_name Description Creates a new topology with name new_topology_name and SRID and precision taken from existing_topology_name, copies all nodes, edges and faces in there, copies layers and their TopoGeometries too. The new rows in topology.layer will contain synthesized values for schema_name, table_name and feature_column. This is because the TopoGeometry will only exist as a definition but won't be available in any user-level table yet. Availability: 2.0.0 Examples This example makes a backup of a topology called ma_topo SELECT topology.CopyTopology('ma_topo', 'ma_topo_bakup'); See Also , ST_InitTopoGeo Creates a new topology schema and registers this new schema in the topology.topology table and details summary of process. text ST_InitTopoGeo varchar topology_schema_name Description This is an SQL-MM equivalent of CreateTopology but lacks the spatial reference and tolerance options of CreateTopology and outputs a text description of creation instead of topology id. Availability: 1.? &sqlmm_compliant; SQL-MM 3 Topo-Geo and Topo-Net 3: Routine Details: X.3.17 Examples SELECT topology.ST_InitTopoGeo('topo_schema_to_create') AS topocreation; astopocreation ------------------------------------------------------------ Topology-Geometry 'topo_schema_to_create' (id:7) created. See Also ST_CreateTopoGeo Adds a collection of geometries to a given empty topology and returns a message detailing success. text ST_CreateTopoGeo varchar atopology geometry acollection Description Adds a collection of geometries to a given empty topology and returns a message detailing success. Useful for populating an empty topology. Availability: 2.0 &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details -- X.3.18 Examples -- Populate topology -- SELECT topology.ST_CreateTopoGeo('ri_topo', ST_GeomFromText('MULTILINESTRING((384744 236928,384750 236923,384769 236911,384799 236895,384811 236890,384833 236884, 384844 236882,384866 236881,384879 236883,384954 236898,385087 236932,385117 236938, 385167 236938,385203 236941,385224 236946,385233 236950,385241 236956,385254 236971, 385260 236979,385268 236999,385273 237018,385273 237037,385271 237047,385267 237057, 385225 237125,385210 237144,385192 237161,385167 237192,385162 237202,385159 237214, 385159 237227,385162 237241,385166 237256,385196 237324,385209 237345,385234 237375, 385237 237383,385238 237399,385236 237407,385227 237419,385213 237430,385193 237439, 385174 237451,385170 237455,385169 237460,385171 237475,385181 237503,385190 237521, 385200 237533,385206 237538,385213 237541,385221 237542,385235 237540,385242 237541, 385249 237544,385260 237555,385270 237570,385289 237584,385292 237589,385291 237596,385284 237630))',3438) ); st_createtopogeo ---------------------------- Topology ri_topo populated -- create tables and topo geometries -- CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text); SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE'); See Also , , TopoGeo_AddPoint Adds a point to an existing topology using a tolerance and possibly splitting an existing edge. integer TopoGeo_AddPoint varchar toponame geometry apoint float8 tolerance Description Adds a point to an existing topology and return its identifier. The given point will snap to existing nodes or edges within given tolerance. An existing edge may be split by the snapped point. Availability: 2.0.0 See Also , , , TopoGeo_AddLineString Adds a linestring to an existing topology using a tolerance and possibly splitting existing edges/faces. Returns edge identifiers SETOF integer TopoGeo_AddLineString varchar toponame geometry aline float8 tolerance Description Adds a linestring to an existing topology and return a set of edge identifiers forming it up. The given line will snap to existing nodes or edges within given tolerance. Existing edges and faces may be split by the line. Availability: 2.0.0 See Also , , , TopoGeo_AddPolygon Adds a polygon to an existing topology using a tolerance and possibly splitting existing edges/faces. integer TopoGeo_AddPolygon varchar atopology geometry apoly float8 atolerance Description Adds a polygon to an existing topology and return a set of face identifiers forming it up. The boundary of the given polygon will snap to existing nodes or edges within given tolerance. Existing edges and faces may be split by the boundary of the new polygon. Availability: 2.0.0 See Also , , , This section covers topology functions for adding, moving, deleting, and splitting edges, faces, and nodes. All of these functions are defined by ISO SQL/MM. Topology Editors ST_AddIsoNode Adds an isolated node to a face in a topology and returns the nodeid of the new node. If face is null, the node is still created. integer ST_AddIsoNode varchar atopology integer aface geometry apoint Description Adds an isolated node with point location apoint to an existing face with faceid aface to a topology atopology and returns the nodeid of the new node. If the spatial reference system (srid) of the point geometry is not the same as the topology, the apoint is not a point geometry, the point is null, or the point intersects an existing edge (even at the boundaries) then an exception is thrown. If the point already exists as a node, an exception is thrown. If aface is not null and the apoint is not within the face, then an exception is thrown. Availability: 1.? &sqlmm_compliant; SQL-MM: Topo-Net Routines: X+1.3.1 Examples See Also , , , ST_AddIsoEdge Adds an isolated edge defined by geometry alinestring to a topology connecting two existing isolated nodes anode and anothernode and returns the edge id of the new edge. integer ST_AddIsoEdge varchar atopology integer anode integer anothernode geometry alinestring Description Adds an isolated edge defined by geometry alinestring to a topology connecting two existing isolated nodes anode and anothernode and returns the edge id of the new edge. If the spatial reference system (srid) of the alinestring geometry is not the same as the topology, any of the input arguments are null, or the nodes are contained in more than one face, or the nodes are start or end nodes of an existing edge, then an exception is thrown. If the alinestring is not within the face of the face the anode and anothernode belong to, then an exception is thrown. If the anode and anothernode are not the start and end points of the alinestring then an exception is thrown. Availability: 1.? &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.4 Examples See Also , , ST_AddEdgeNewFaces Add a new edge and, if in doing so it splits a face, delete the original face and replace it with two new faces. integer ST_AddEdgeNewFaces varchar atopology integer anode integer anothernode geometry acurve Description Add a new edge and, if in doing so it splits a face, delete the original face and replace it with two new faces. Returns the id of the newly added edge. Updates all existing joined edges and relationships accordingly. If any arguments are null, the given nodes are unknown (must already exist in the node table of the topology schema) , the acurve is not a LINESTRING, the anode and anothernode are not the start and endpoints of acurve then an error is thrown. If the spatial reference system (srid) of the acurve geometry is not the same as the topology an exception is thrown. Availability: 2.0 &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.12 Examples See Also ST_AddEdgeModFace Add a new edge and, if in doing so it splits a face, modify the original face and add a new face. integer ST_AddEdgeModFace varchar atopology integer anode integer anothernode geometry acurve Description Add a new edge and, if in doing so it splits a face, modify the original face and add a new face. Unless the face being split is the Universal Face, the new face will be on the right side of the newly added edge. Returns the id of the newly added edge. Updates all existing joined edges and relationships accordingly. If any arguments are null, the given nodes are unknown (must already exist in the node table of the topology schema) , the acurve is not a LINESTRING, the anode and anothernode are not the start and endpoints of acurve then an error is thrown. If the spatial reference system (srid) of the acurve geometry is not the same as the topology an exception is thrown. Availability: 2.0 &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.13 Examples See Also ST_RemEdgeNewFace Removes an edge and, if the removed edge separated two faces, delete the original faces and replace them with a new face. integer ST_RemEdgeNewFace varchar atopology integer anedge Description Removes an edge and, if the removed edge separated two faces, delete the original faces and replace them with a new face. Returns the id of a newly created face or NULL, if no new face is created. No new face is created when the removed edge is dangling or isolated or confined with the universe face (possibly making the universe flood into the face on the other side). Updates all existing joined edges and relationships accordingly. Refuses to remove an edge partecipating in the definition of an existing TopoGeometry. Refuses to heal two faces if any TopoGeometry is defined by only one of them (and not the other). If any arguments are null, the given edge is unknown (must already exist in the edge table of the topology schema), the topology name is invalid then an error is thrown. Availability: 2.0 &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.14 Examples See Also ST_RemEdgeModFace Removes an edge and, if the removed edge separated two faces, delete one of the them and modify the other to take the space of both. integer ST_RemEdgeModFace varchar atopology integer anedge Description Removes an edge and, if the removed edge separated two faces, delete one of the them and modify the other to take the space of both. Preferentially keeps the face on the right, to be symmetric with ST_AddEdgeModFace also keeping it. Returns the id of the face remaining in place of the removed edge. Updates all existing joined edges and relationships accordingly. Refuses to remove an edge partecipating in the definition of an existing TopoGeometry. Refuses to heal two faces if any TopoGeometry is defined by only one of them (and not the other). If any arguments are null, the given edge is unknown (must already exist in the edge table of the topology schema), the topology name is invalid then an error is thrown. Availability: 2.0 &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.15 Examples See Also ST_ChangeEdgeGeom Changes the shape of an edge without affecting the topology structure. integer ST_ChangeEdgeGeom varchar atopology integer anedge geometry acurve Description Changes the shape of an edge without affecting the topology structure. If any arguments are null, the given edge does not exist in the node table of the topology schema, the acurve is not a LINESTRING, the anode and anothernode are not the start and endpoints of acurve or the modification would change the underlying topology then an error is thrown. If the spatial reference system (srid) of the acurve geometry is not the same as the topology an exception is thrown. If the new acurve is not simple, then an error is thrown. If moving the edge from old to new position would hit an obstacle then an error is thrown. Availability: 1.1.0 Enhanced: 2.0.0 adds topological consistency enforcement &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details X.3.6 Examples SELECT topology.ST_ChangeEdgeGeom('ma_topo', 1, ST_GeomFromText('LINESTRING(227591.9 893900.4,227622.6 893844.3,227641.6 893816.6, 227704.5 893778.5)', 26986) ); ---- Edge 1 changed See Also ST_ModEdgeSplit Split an edge by creating a new node along an existing edge, modifying the original edge and adding a new edge. integer ST_ModEdgeSplit varchar atopology integer anedge geometry apoint Description Split an edge by creating a new node along an existing edge, modifying the original edge and adding a new edge. Updates all existing joined edges and relationships accordingly. Returns the identifier of the newly added node. Availability: 1.? Changed: 2.0 - In prior versions, this was misnamed ST_ModEdgesSplit &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.9 Examples -- Add an edge -- SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227592 893910, 227600 893910)', 26986) ) As edgeid; -- edgeid- 3 -- Split the edge -- SELECT topology.ST_ModEdgeSplit('ma_topo', 3, ST_SetSRID(ST_Point(227594,893910),26986) ) As node_id; node_id ------------------------- 7 See Also , , , ST_ModEdgeHeal Heal two edges by deleting the node connecting them, modifying the first edge and deleting the second edge. Returns the id of the deleted node. int ST_ModEdgeHeal varchar atopology integer anedge integer anotheredge Description Heal two edges by deleting the node connecting them, modifying the first edge and deleting the second edge. Returns the id of the deleted node. Updates all existing joined edges and relationships accordingly. Availability: 2.0 &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.9 See Also ST_NewEdgeHeal Heal two edges by deleting the node connecting them, deleting both edges, and replacing them with an edge whose direction is the same as the first edge provided. int ST_NewEdgeHeal varchar atopology integer anedge integer anotheredge Description Heal two edges by deleting the node connecting them, deleting both edges, and replacing them with an edge whose direction is the same as the first edge provided. Returns the id of the new edge replacing the healed ones. Updates all existing joined edges and relationships accordingly. Availability: 2.0 &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.9 See Also ST_MoveIsoNode Moves an isolated node in a topology from one point to another. If new apoint geometry exists as a node an error is thrown. REturns description of move. text ST_MoveIsoNode varchar atopology integer anedge geometry apoint Description Moves an isolated node in a topology from one point to another. If new apoint geometry exists as a node an error is thrown. If any arguments are null, the apoint is not a point, the existing node is not isolated (is a start or end point of an existing edge), new node location intersects an existing edge (even at the end points) then an exception is thrown. If the spatial reference system (srid) of the point geometry is not the same as the topology an exception is thrown. Availability: 1.? &sqlmm_compliant; SQL-MM: Topo-Net Routines: X.3.2 Examples -- Add an isolated node with no face -- SELECT topology.ST_AddIsoNode('ma_topo', NULL, ST_GeomFromText('POINT(227579 893916)', 26986) ) As nodeid; nodeid -------- 7 -- Move the new node -- SELECT topology.ST_MoveIsoNode('ma_topo', 7, ST_GeomFromText('POINT(227579.5 893916.5)', 26986) ) As descrip; descrip ---------------------------------------------------- Isolated Node 7 moved to location 227579.5,893916.5 See Also ST_NewEdgesSplit Split an edge by creating a new node along an existing edge, deleting the original edge and replacing it with two new edges. Returns the id of the new node created that joins the new edges. integer ST_NewEdgesSplit varchar atopology integer anedge geometry apoint Description Split an edge with edge id anedge by creating a new node with point location apoint along current edge, deleting the original edge and replacing it with two new edges. Returns the id of the new node created that joins the new edges. Updates all existing joined edges and relationships accordingly. If the spatial reference system (srid) of the point geometry is not the same as the topology, the apoint is not a point geometry, the point is null, the point already exists as a node, the edge does not correspond to an existing edge or the point is not within the edge then an exception is thrown. Availability: 1.? &sqlmm_compliant; SQL-MM: Topo-Net Routines: X.3.8 Examples -- Add an edge -- SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575 893917,227592 893900)', 26986) ) As edgeid; -- result- edgeid ------ 2 -- Split the new edge -- SELECT topology.ST_NewEdgesSplit('ma_topo', 2, ST_GeomFromText('POINT(227578.5 893913.5)', 26986) ) As newnodeid; newnodeid --------- 6 See Also ST_RemoveIsoNode Removes an isolated node and returns description of action. If the node is not isolated (is start or end of an edge), then an exception is thrown. text ST_RemoveIsoNode varchar atopology integer anode Description Removes an isolated node and returns description of action. If the node is not isolated (is start or end of an edge), then an exception is thrown. Availability: 1.? &sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X+1.3.3 Examples -- Add an isolated node with no face -- SELECT topology.ST_RemoveIsoNode('ma_topo', 7 ) As result; result ------------------------- Isolated node 7 removed See Also Topology Accessors GetEdgeByPoint Find the edge-id of an edge that intersects a given point integer GetEdgeByPoint varchar atopology geometry apoint float8 tol Retrieve the id of an edge that intersects a Point The function returns an integer (id-edge) given a topology, a POINT and a tolerance. If tolerance = 0 then the point has to intersect the edge. If the point is the location of a node, then an exception is thrown. To avoid this run the GetNodeByPoint function. If the point doesn't intersect an edge, returns 0 (zero). If use tolerance > 0 and there is more than one edge near the point then an exception is thrown. If tolerance = 0, the function use ST_Intersects otherwise uses ST_DWithin. Availability: 2.0.0 - requires GEOS >= 3.3.0. Examples These examples use edges we created in SELECT topology.GetEdgeByPoint('ma_topo',geom, 1) As with1mtol, topology.GetEdgeByPoint('ma_topo',geom,0) As withnotol FROM ST_GeomFromEWKT('SRID=26986;POINT(227622.6 893843)') As geom; with1mtol | withnotol -----------+----------- 2 | 0 SELECT topology.GetEdgeByPoint('ma_topo',geom, 1) As nearnode FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom; -- get error -- ERROR: Two or more edges found See Also , GetFaceByPoint Find the face-id of a face that intersects a given point integer GetFaceByPoint varchar atopology geometry apoint float8 tol Description Retrieve the id of a face that intersects a Point. The function returns an integer (id-face) given a topology, a POINT and a tolerance. If tolerance = 0 then the point has to intersect the face. If the point is the location of a node, then an exception is thrown. To avoid this run the GetNodeByPoint function. If the point doesn't intersect a face, returns 0 (zero). If use tolerance > 0 and there is more than one face near the point then an exception is thrown. If tolerance = 0, the function uses ST_Intersects otherwise uses ST_DWithin. Availability: 2.0.0 - requires GEOS >= 3.3.0. Examples These examples use edges faces created in SELECT topology.GetFaceByPoint('ma_topo',geom, 10) As with1mtol, topology.GetFaceByPoint('ma_topo',geom,0) As withnotol FROM ST_GeomFromEWKT('POINT(234604.6 899382.0)') As geom; with1mtol | withnotol -----------+----------- 1 | 0 SELECT topology.GetFaceByPoint('ma_topo',geom, 1) As nearnode FROM ST_GeomFromEWKT('POINT(227591.9 893900.4)') As geom; -- get error -- ERROR: Two or more faces found See Also , , GetNodeByPoint Find the id of a node at a point location integer GetNodeByPoint varchar atopology geometry point float8 tol Retrieve the id of a node at a point location The function return an integer (id-node) given a topology, a POINT and a tolerance. If tolerance = 0 mean exactly intersection otherwise retrieve the node from an interval. If there isn't a node at the point, it return 0 (zero). If use tolerance > 0 and near the point there are more than one node it throw an exception. If tolerance = 0, the function use ST_Intersects otherwise will use ST_DWithin. Availability: 2.0.0 - requires GEOS >= 3.3.0. Examples These examples use edges we created in SELECT topology.GetNodeByPoint('ma_topo',geom, 1) As nearnode FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom; nearnode ---------- 2 SELECT topology.GetNodeByPoint('ma_topo',geom, 1000) As too_much_tolerance FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom; ----get error-- ERROR: Two or more nodes found See Also , GetTopologyID Returns the id of a topology in the topology.topology table given the name of the topology. integer GetTopologyID varchar toponame Description Returns the id of a topology in the topology.topology table given the name of the topology. Availability: 1.? Examples SELECT topology.GetTopologyID('ma_topo') As topo_id; topo_id --------- 1 See Also , , , GetTopologySRID Returns the SRID of a topology in the topology.topology table given the name of the topology. integer GetTopologyID varchar toponame Description Returns the spatial reference id of a topology in the topology.topology table given the name of the topology. Availability: 2.0.0 Examples SELECT topology.GetTopologySRID('ma_topo') As SRID; SRID ------- 4326 See Also , , , GetTopologyName Returns the name of a topology (schema) given the id of the topology. varchar GetTopologyName integer topology_id Description Returns the topology name (schema) of a topology from the topology.topology table given the topology id of the topology. Availability: 1.? Examples SELECT topology.GetTopologyName(1) As topo_name; topo_name ----------- ma_topo See Also , , , ST_GetFaceEdges Returns a set of ordered edges that bound aface. getfaceedges_returntype ST_GetFaceEdges varchar atopology integer aface Description Returns a set of ordered edges that bound aface. Each output consists of a sequence and edgeid. Sequence numbers start with value 1. Enumeration of each ring edges start from the edge with smallest identifier. Order of edges follows a left-hand-rule (bound face is on the left of each directed edge). Availability: 2.0 &sqlmm_compliant; SQL-MM 3 Topo-Geo and Topo-Net 3: Routine Details: X.3.5 Examples -- Returns the edges bounding face 1 SELECT (topology.ST_GetFaceEdges('tt', 1)).*; -- result -- sequence | edge ----------+------ 1 | -4 2 | 5 3 | 7 4 | -6 5 | 1 6 | 2 7 | 3 (7 rows) -- Returns the sequenc, edge id -- , and geometry of the edges that bound face 1 -- If you just need geom and seq, can use ST_GetFaceGeometry SELECT t.seq, t.edge, geom FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge) INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id; See Also , , ST_GetFaceGeometry Returns the polygon in the given topology with the specified face id. geometry ST_GetFaceGeometry varchar atopology integer aface Description Returns the polygon in the given topology with the specified face id. Builds the polygon from the edges making up the face. Availability: 1.? &sqlmm_compliant; SQL-MM 3 Topo-Geo and Topo-Net 3: Routine Details: X.3.16 Examples -- Returns the wkt of the polygon added with AddFace SELECT ST_AsText(topology.ST_GetFaceGeometry('ma_topo', 1)) As facegeomwkt; -- result -- facegeomwkt -------------------------------------------------------------------------------- POLYGON((234776.9 899563.7,234896.5 899456.7,234914 899436.4,234946.6 899356.9, 234872.5 899328.7,234891 899285.4,234992.5 899145,234890.6 899069, 234755.2 899255.4,234612.7 899379.4,234776.9 899563.7)) See Also GetRingEdges Returns an ordered set of edges forming a ring with the given edge . getfaceedges_returntype GetRingEdges varchar atopology integer aring integer max_edges=null Description Returns an ordered set of edges forming a ring with the given edge. Each output consists of a sequence and a signed edge id. Sequence numbers start with value 1. A negative edge identifier means that the given edge is taken backward. You can pass a negative edge id to start walking backward. If max_edges is not null no more than those records are returned by that function. This is meant to be a safety parameter when dealing with possibly invalid topologies. Availability: 2.0 See Also , GetNodeEdges Returns an ordered set of edges incident to the given node. getfaceedges_returntype GetNodeEdges varchar atopology integer anode Description Returns an ordered set of edges incident to the given node. Each output consists of a sequence and a signed edge id. Sequence numbers start with value 1. A positive edge starts at the given node. A negative edge ends into the given node. Closed edges will appear twice (with both signs). Order is clockwise starting from northbound. This function computes ordering rather than deriving from metadata and is thus usable to build edge ring linking. Availability: 2.0 See Also , This section covers the functions for processing topologies in non-standard ways. Topology Processing Polygonize Find and register all faces defined by topology edges text Polygonize varchar toponame Description Register all faces that can be built out a topology edge primitives. The target topology is assumed to contain no self-intersecting edges. Already known faces are recognized, so it is safe to call Polygonize multiple times on the same topology. This function does not use nor set the next_left_edge and next_right_edge fields of the edge table. Availability: 2.0.0 See Also , AddNode Adds a point node to the node table in the specified topology schema and returns the nodeid of new node. If point already exists as node, the existing nodeid is returned. integer AddNode varchar toponame geometry apoint boolean allowEdgeSplitting=false boolean computeContainingFace=false Description Adds a point node to the node table in the specified topology schema. The function automatically adds start and end points of an edge when called so not necessary to explicitly add nodes of an edge. If any edge crossing the node is found either an exception is raised or the edge is splitted, depending on the allowEdgeSplitting parameter value. If computeContainingFace is true a newly added node would get the correct containing face computed. If the apoint geometry already exists as a node, the node is not added but the existing nodeid is returned. Availability: 2.0.0 Examples SELECT topology.AddNode('ma_topo', ST_GeomFromText('POINT(227641.6 893816.5)', 26986) ) As nodeid; -- result -- nodeid -------- 4 See Also , AddEdge Adds a linestring edge to the edge table and associated start and end points to the point nodes table of the specified topology schema using the specified linestring geometry and returns the edgeid of the new (or existing) edge. integer AddEdge varchar toponame geometry aline Description Adds an edge to the edge table and associated nodes to the nodes table of the specified toponame schema using the specified linestring geometry and returns the edgeid of the new or existing record. The newly added edge has "universe" face on both sides and links to itself. If the aline geometry crosses, overlaps, contains or is contained by an existing linestring edge, then an error is thrown and the edge is not added. The geometry of aline must have the same srid as defined for the topology otherwise an invalid spatial reference sys error will be thrown. Availability: 2.0.0 requires GEOS >= 3.3.0. Examples SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575.8 893917.2,227591.9 893900.4)', 26986) ) As edgeid; -- result- edgeid -------- 1 SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.9 893900.4,227622.6 893844.2,227641.6 893816.5, 227704.5 893778.5)', 26986) ) As edgeid; -- result -- edgeid -------- 2 SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.2 893900, 227591.9 893900.4, 227704.5 893778.5)', 26986) ) As edgeid; -- gives error -- ERROR: Edge intersects (not on endpoints) with existing edge 1 See Also , AddFace Registers a face primitive to a topology and get it's identifier. integer AddFace varchar toponame geometry apolygon boolean force_new=false Description Registers a face primitive to a topology and get it's identifier. For a newly added face, the edges forming its boundaries and the ones contained in the face will be updated to have correct values in the left_face and right_face fields. Isolated nodes contained in the face will also be updated to have a correct containing_face field value. This function does not use nor set the next_left_edge and next_right_edge fields of the edge table. The target topology is assumed to be valid (containing no self-intersecting edges). An exception is raised if: The polygon boundary is not fully defined by existing edges or the polygon overlaps an existing face. If the apolygon geometry already exists as a face, then: if force_new is false (the default) the face id of the existing face is returned; if force_new is true a new id will be assigned to the newly registered face. When a new registration of an existing face is performed (force_new=true), no action will be taken to resolve dangling references to the existing face in the edge, node an relation tables, nor will the MBR field of the existing face record be updated. It is up to the caller to deal with that. The apolygon geometry must have the same srid as defined for the topology otherwise an invalid spatial reference sys error will be thrown. Availability: 2.0.0 Examples -- first add the edges we use generate_series as an iterator (the below -- will only work for polygons with < 10000 points because of our max in gs) SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN(geom, i + 1) )) As edgeid FROM (SELECT ST_NPoints(geom) AS npt, geom FROM (SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7, 234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4, 234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As geom ) As geoms) As facen CROSS JOIN generate_series(1,10000) As i WHERE i < npt; -- result -- edgeid -------- 3 4 5 6 7 8 9 10 11 12 (10 rows) -- then add the face - SELECT topology.AddFace('ma_topo', ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7, 234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4, 234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As faceid; -- result -- faceid -------- 1 See Also , , ST_Simplify Returns a "simplified" geometry version of the given TopoGeometry using the Douglas-Peucker algorithm. geometry ST_Simplify TopoGeometry geomA float tolerance Description Returns a "simplified" geometry version of the given TopoGeometry using the Douglas-Peucker algorithm on each component edge. The returned geometry may be non-simple or non-valid. Splitting component edges may help retaining simplicity/validity. Performed by the GEOS module. Availability: 2.1.0 See Also Geometry , , , This section covers the topology functions for creating new topogeometries. TopoGeometry Constructors CreateTopoGeom Creates a new topo geometry object from topo element array - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection topogeometry CreateTopoGeom varchar toponame integer tg_type integer layer_id topoelementarray tg_objs topogeometry CreateTopoGeom varchar toponame integer tg_type integer layer_id Description Creates a topogeometry object for layer denoted by layer_id and registers it in the relations table in the toponame schema. tg_type is an integer: 1:[multi]point (punctal), 2:[multi]line (lineal), 3:[multi]poly (areal), 4:collection. layer_id is the layer id in the topology.layer table. punctal layers are formed from set of nodes, lineal layers are formed from a set of edges, areal layers are formed from a set of faces, and collections can be formed from a mixture of nodes, edges, and faces. Omitting the array of components generates an empty TopoGeometry object. Availability: 1.? Examples: Form from existing edges Create a topogeom in ri_topo schema for layer 2 (our ri_roads), of type (2) LINE, for the first edge (we loaded in ST_CreateTopoGeo. INSERT INTO ri.ri_roads(road_name, topo) VALUES('Unknown', topology.CreateTopoGeom('ri_topo',2,2,'{{1,2}}'::topology.topoelementarray); Examples: Convert an areal geometry to best guess topogeometry Lets say we have geometries that should be formed from a collection of faces. We have for example blockgroups table and want to know the topo geometry of each block group. If our data was perfectly aligned, we could do this: -- create our topo geometry column -- SELECT topology.AddTopoGeometryColumn( 'topo_boston', 'boston', 'blockgroups', 'topo', 'POLYGON'); -- addtopgeometrycolumn -- 1 -- update our column assuming -- everything is perfectly aligned with our edges UPDATE boston.blockgroups AS bg SET topo = topology.CreateTopoGeom('topo_boston' ,3,1 , foo.bfaces) FROM (SELECT b.gid, topology.TopoElementArray_Agg(ARRAY[f.face_id,3]) As bfaces FROM boston.blockgroups As b INNER JOIN topo_boston.face As f ON b.geom && f.mbr WHERE ST_Covers(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id)) GROUP BY b.gid) As foo WHERE foo.gid = bg.gid; --the world is rarely perfect allow for some error --count the face if 50% of it falls -- within what we think is our blockgroup boundary UPDATE boston.blockgroups AS bg SET topo = topology.CreateTopoGeom('topo_boston' ,3,1 , foo.bfaces) FROM (SELECT b.gid, topology.TopoElementArray_Agg(ARRAY[f.face_id,3]) As bfaces FROM boston.blockgroups As b INNER JOIN topo_boston.face As f ON b.geom && f.mbr WHERE ST_Covers(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id)) OR ( ST_Intersects(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id)) AND ST_Area(ST_Intersection(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id) ) ) > ST_Area(topology.ST_GetFaceGeometry('topo_boston', f.face_id))*0.5 ) GROUP BY b.gid) As foo WHERE foo.gid = bg.gid; -- and if we wanted to convert our topogeometry back -- to a denomalized geometry aligned with our faces and edges -- cast the topo to a geometry -- The really cool thing is my new geometries -- are now aligned with my tiger street centerlines UPDATE boston.blockgroups SET new_geom = topo::geometry; See Also , , , , toTopoGeom Converts a simple Geometry into a topo geometry topogeometry toTopoGeom geometry geom varchar toponame integer layer_id float8 tolerance topogeometry toTopoGeom geometry geom topogeometry topogeom float8 tolerance Description Converts a simple Geometry into a . Topological primitives required to represent the input geometry will be added to the underlying topology, possibly splitting existing ones, and they will be associated with the output TopoGeometry in the relation table. Existing TopoGeometry objects (with the possible exception of topogeom, if given) will retain their shapes. When tolerance is given it will be used to snap the input geometry to existing primitives. In the first form a new TopoGeometry will be created for the given layer (layer_id) of the given topology (toponame). In the second form the primitives resulting from the conversion will be added to the pre-existing TopoGeometry (topogeom), possibly adding space to its final shape. To have the new shape completely replace the old one see . Availability: 2.0 Enhanced: 2.1.0 adds the version taking an existing TopoGeometry. Examples This is a full self-contained workflow -- do this if you don't have a topology setup already -- creates topology not allowing any tolerance SELECT topology.CreateTopology('topo_boston_test', 2249); -- create a new table CREATE TABLE nei_topo(gid serial primary key, nei varchar(30)); --add a topogeometry column to it SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') As new_layer_id; new_layer_id ----------- 1 --use new layer id in populating the new topogeometry column -- we add the topogeoms to the new layer with 0 tolerance INSERT INTO nei_topo(nei, topo) SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1) FROM neighborhoods WHERE gid BETWEEN 1 and 15; --use to verify what has happened -- SELECT * FROM topology.TopologySummary('topo_boston_test'); -- summary-- Topology topo_boston_test (5), SRID 2249, precision 0 61 nodes, 87 edges, 35 faces, 15 topogeoms in 1 layers Layer 1, type Polygonal (3), 15 topogeoms Deploy: public.nei_topo.topo -- Shrink all TopoGeometry polygons by 10 meters UPDATE nei_topo SET topo = ST_Buffer(clearTopoGeom(topo), -10); -- Get the no-one-lands left by the above operation -- I think GRASS calls this "polygon0 layer" SELECT ST_GetFaceGeometry('topo_boston_test', f.face_id) FROM topo_boston_test.face f WHERE f.face_id > 0 -- don't consider the universe face AND NOT EXISTS ( -- check that no TopoGeometry references the face SELECT * FROM topo_boston_test.relation WHERE layer_id = 1 AND element_id = f.face_id ); See Also , , , , TopoElementArray_Agg Returns a topoelementarray for a set of element_id, type arrays (topoelements) topoelementarray TopoElementArray_Agg topoelement set tefield Description Used to create a from a set of . Availability: 2.0.0 Examples SELECT topology.TopoElementArray_Agg(ARRAY[e,t]) As tea FROM generate_series(1,3) As e CROSS JOIN generate_series(1,4) As t; tea -------------------------------------------------------------------------- {{1,1},{1,2},{1,3},{1,4},{2,1},{2,2},{2,3},{2,4},{3,1},{3,2},{3,3},{3,4}} See Also , This section covers the topology functions for editing existing topogeometries. TopoGeometry Editors clearTopoGeom Clears the content of a topo geometry topogeometry clearTopoGeom topogeometry topogeom Description Clears the content a turning it into an empty one. Mostly useful in conjunction with to replace the shape of existing objects and any dependent object in higher hierarchical levels. Availability: 2.1 Examples -- Shrink all TopoGeometry polygons by 10 meters UPDATE nei_topo SET topo = ST_Buffer(clearTopoGeom(topo), -10); See Also toTopoGeom Adds a geometry shape to an existing topo geometry Description Refer to TopoGeometry Accessors GetTopoGeomElementArray Returns a topoelementarray (an array of topoelements) containing the topological elements and type of the given TopoGeometry (primitive elements) topoelementarray GetTopoGeomElementArray varchar toponame integer layer_id integer tg_id topoelementarray topoelement GetTopoGeomElementArray topogeometry tg Description Returns a containing the topological elements and type of the given TopoGeometry (primitive elements). This is similar to GetTopoGeomElements except it returns the elements as an array rather than as a dataset. tg_id is the topogeometry id of the topogeometry object in the topology in the layer denoted by layer_id in the topology.layer table. Availability: 1.? Examples See Also , GetTopoGeomElements Returns a set of topoelement objects containing the topological element_id,element_type of the given TopoGeometry (primitive elements) setof topoelement GetTopoGeomElements varchar toponame integer layer_id integer tg_id setof topoelement GetTopoGeomElements topogeometry tg Description Returns a set of element_id,element_type (topoelements) for a given topogeometry object in toponame schema. tg_id is the topogeometry id of the topogeometry object in the topology in the layer denoted by layer_id in the topology.layer table. Availability: 1.? Examples See Also , TopoGeometry Outputs AsGML Returns the GML representation of a topogeometry. text AsGML topogeometry tg text AsGML topogeometry tg text nsprefix_in text AsGML topogeometry tg regclass visitedTable text AsGML topogeometry tg regclass visitedTable text nsprefix text AsGML topogeometry tg text nsprefix_in integer precision integer options text AsGML topogeometry tg text nsprefix_in integer precision integer options regclass visitedTable text AsGML topogeometry tg text nsprefix_in integer precision integer options regclass visitedTable text idprefix text AsGML topogeometry tg text nsprefix_in integer precision integer options regclass visitedTable text idprefix int gmlversion Description Returns the GML representation of a topogeometry in version GML3 format. If no nsprefix_in is specified then gml is used. Pass in an empty string for nsprefix to get a non-qualified name space. The precision (default: 15) and options (default 1) parameters, if given, are passed untouched to the underlying call to ST_AsGML. The visitedTable parameter, if given, is used for keeping track of the visited Node and Edge elements so to use cross-references (xlink:xref) rather than duplicating definitions. The table is expected to have (at least) two integer fields: 'element_type' and 'element_id'. The calling user must have both read and write privileges on the given table. For best performance, an index should be defined on element_type and element_id, in that order. Such index would be created automatically by adding a unique constraint to the fields. Example: CREATE TABLE visited ( element_type integer, element_id integer, unique(element_type, element_id) ); The idprefix parameter, if given, will be prepended to Edge and Node tag identifiers. The gmlver parameter, if given, will be passed to the underlying ST_AsGML. Defaults to 3. Availability: 2.0.0 Examples This uses the topo geometry we created in SELECT topology.AsGML(topo) As rdgml FROM ri.roads WHERE road_name = 'Unknown'; -- rdgml-- 384744 236928 384750 236923 384769 236911 384799 236895 384811 236890 384833 236884 384844 236882 384866 236881 384879 236883 384954 236898 385087 236932 385117 236938 385167 236938 385203 236941 385224 236946 385233 236950 385241 236956 385254 236971 385260 236979 385268 236999 385273 237018 385273 237037 385271 237047 385267 237057 385225 237125 385210 237144 385192 237161 385167 237192 385162 237202 385159 237214 385159 237227 385162 237241 385166 237256 385196 237324 385209 237345 385234 237375 385237 237383 385238 237399 385236 237407 385227 237419 385213 237430 385193 237439 385174 237451 385170 237455 385169 237460 385171 237475 385181 237503 385190 237521 385200 237533 385206 237538 385213 237541 385221 237542 385235 237540 385242 237541 385249 237544 385260 237555 385270 237570 385289 237584 385292 237589 385291 237596 385284 237630 ]]> Same exercise as previous without namespace SELECT topology.AsGML(topo,'') As rdgml FROM ri.roads WHERE road_name = 'Unknown'; -- rdgml-- 384744 236928 384750 236923 384769 236911 384799 236895 384811 236890 384833 236884 384844 236882 384866 236881 384879 236883 384954 236898 385087 236932 385117 236938 385167 236938 385203 236941 385224 236946 385233 236950 385241 236956 385254 236971 385260 236979 385268 236999 385273 237018 385273 237037 385271 237047 385267 237057 385225 237125 385210 237144 385192 237161 385167 237192 385162 237202 385159 237214 385159 237227 385162 237241 385166 237256 385196 237324 385209 237345 385234 237375 385237 237383 385238 237399 385236 237407 385227 237419 385213 237430 385193 237439 385174 237451 385170 237455 385169 237460 385171 237475 385181 237503 385190 237521 385200 237533 385206 237538 385213 237541 385221 237542 385235 237540 385242 237541 385249 237544 385260 237555 385270 237570 385289 237584 385292 237589 385291 237596 385284 237630 ]]> See Also , AsTopoJSON Returns the TopoJSON representation of a topogeometry. text AsTopoJSON topogeometry tg regclass edgeMapTable Description Returns the TopoJSON representation of a topogeometry. If edgeMapTable is not null, it will be used as a lookup/storage mapping of edge identifiers to arc indices. This is to be able to allow for a compact "arcs" array in the final document. The table, if given, is expected to have an "arc_id" field of type "serial" and an "edge_id" of type integer; the code will query the table for "edge_id" so it is recommended to add an index on that field. Arc indices in the TopoJSONjoutput are 0-based but they are 1-based in the "edgeMapTable" table. A full TopoJSON document will be need to contain, in addition to the snippets returned by this function, the actual arcs plus some headers. See the TopoJSON specification. Availability: 2.1.0 See Also Examples CREATE TEMP TABLE edgemap(arc_id serial, edge_id int unique); -- header SELECT '{ "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": {'; -- objects SELECT '"' || feature_name || '": ' || AsTopoJSON(feature, 'edgemap') FROM features.big_parcels WHERE feature_name = 'P3P4'; -- arcs SELECT '}, "arcs": [' UNION ALL SELECT (regexp_matches(ST_AsGEOJSON(ST_SnapToGrid(e.geom,1)), '\[.*\]'))[1] as t FROM edgemap m, city_data.edge e WHERE e.edge_id = m.edge_id; -- footer SELECT ']}'::text as t -- Result: { "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": { "P3P4": { "type": "MultiPolygon", "arcs": [[[-1]],[[6,5,-5,-4,-3,1]]]} }, "arcs": [ [[25,30],[31,30],[31,40],[17,40],[17,30],[25,30]] [[35,6],[35,14]] [[35,6],[47,6]] [[47,6],[47,14]] [[47,14],[47,22]] [[35,22],[47,22]] [[35,14],[35,22]] ]} This section lists the Topology functions used to check relationships between topogeometries and topology primitives Topology Spatial Relationships Equals Returns true if two topogeometries are composed of the same topology primitives. boolean Equals topogeometry tg1 topogeometry tg2 Description Returns true if two topogeometries are composed of the same topology primitives: faces, edges, nodes. This function not supported for topogeometries that are geometry collections. It also can not compare topogeometries from different topologies. Availability: 1.? &Z_support; Examples See Also , Intersects Returns true if two topogeometries are composed of the same topology primitives. boolean Equals topogeometry tg1 topogeometry tg2 Description Returns true if two topogeometries share primitives or primitives intersect This function not supported for topogeometries that are geometry collections. It also can not compare topogeometries from different topologies. Also not currently supported for hierarchichal topogeometries (topogeometries composed of other topogeometries). Availability: 1.? &Z_support; Examples See Also postgis-2.1.2+dfsg.orig/doc/topology_comments.sql0000644000000000000000000003462712315456266020655 0ustar rootroot COMMENT ON TYPE topology.getfaceedges_returntype IS 'postgis type: A composite type that consists of a sequence number and edge number. This is the return type for ST_GetFaceEdges'; COMMENT ON TYPE topology.TopoGeometry IS 'postgis type: A composite type representing a topologically defined geometry'; COMMENT ON TYPE topology.validatetopology_returntype IS 'postgis type: A composite type that consists of an error message and id1 and id2 to denote location of error. This is the return type for ValidateTopology'; COMMENT ON DOMAIN topology.TopoElement IS 'postgis domain: An array of 2 integers generally used to identify a TopoGeometry component.'; COMMENT ON DOMAIN topology.TopoElementArray IS 'postgis domain: An array of TopoElement objects'; COMMENT ON FUNCTION topology.AddTopoGeometryColumn(varchar , varchar , varchar , varchar , varchar ) IS 'args: topology_name, schema_name, table_name, column_name, feature_type - Adds a topogeometry column to an existing table, registers this new column as a layer in topology.layer and returns the new layer_id.'; COMMENT ON FUNCTION topology.AddTopoGeometryColumn(varchar , varchar , varchar , varchar , varchar , integer ) IS 'args: topology_name, schema_name, table_name, column_name, feature_type, child_layer - Adds a topogeometry column to an existing table, registers this new column as a layer in topology.layer and returns the new layer_id.'; COMMENT ON FUNCTION topology.DropTopology(varchar ) IS 'args: topology_schema_name - Use with caution: Drops a topology schema and deletes its reference from topology.topology table and references to tables in that schema from the geometry_columns table.'; COMMENT ON FUNCTION topology.DropTopoGeometryColumn(varchar , varchar , varchar ) IS 'args: schema_name, table_name, column_name - Drops the topogeometry column from the table named table_name in schema schema_name and unregisters the columns from topology.layer table.'; COMMENT ON FUNCTION topology.TopologySummary(varchar ) IS 'args: topology_schema_name - Takes a topology name and provides summary totals of types of objects in topology'; COMMENT ON FUNCTION topology.ValidateTopology(varchar ) IS 'args: topology_schema_name - Returns a set of validatetopology_returntype objects detailing issues with topology'; COMMENT ON FUNCTION topology.CreateTopology(varchar ) IS 'args: topology_schema_name - Creates a new topology schema and registers this new schema in the topology.topology table.'; COMMENT ON FUNCTION topology.CreateTopology(varchar , integer ) IS 'args: topology_schema_name, srid - Creates a new topology schema and registers this new schema in the topology.topology table.'; COMMENT ON FUNCTION topology.CreateTopology(varchar , integer , double precision ) IS 'args: topology_schema_name, srid, tolerance - Creates a new topology schema and registers this new schema in the topology.topology table.'; COMMENT ON FUNCTION topology.CreateTopology(varchar , integer , double precision , boolean ) IS 'args: topology_schema_name, srid, tolerance, hasz - Creates a new topology schema and registers this new schema in the topology.topology table.'; COMMENT ON FUNCTION topology.CopyTopology(varchar , varchar ) IS 'args: existing_topology_name, new_name - Makes a copy of a topology structure (nodes, edges, faces, layers and TopoGeometries).'; COMMENT ON FUNCTION topology.ST_InitTopoGeo(varchar ) IS 'args: topology_schema_name - Creates a new topology schema and registers this new schema in the topology.topology table and details summary of process.'; COMMENT ON FUNCTION topology.ST_CreateTopoGeo(varchar , geometry ) IS 'args: atopology, acollection - Adds a collection of geometries to a given empty topology and returns a message detailing success.'; COMMENT ON FUNCTION topology.TopoGeo_AddPoint(varchar , geometry , float8 ) IS 'args: toponame, apoint, tolerance - Adds a point to an existing topology using a tolerance and possibly splitting an existing edge.'; COMMENT ON FUNCTION topology.TopoGeo_AddLineString(varchar , geometry , float8 ) IS 'args: toponame, aline, tolerance - Adds a linestring to an existing topology using a tolerance and possibly splitting existing edges/faces. Returns edge identifiers'; COMMENT ON FUNCTION topology.TopoGeo_AddPolygon(varchar , geometry , float8 ) IS 'args: atopology, apoly, atolerance - Adds a polygon to an existing topology using a tolerance and possibly splitting existing edges/faces.'; COMMENT ON FUNCTION topology.ST_AddIsoNode(varchar , integer , geometry ) IS 'args: atopology, aface, apoint - Adds an isolated node to a face in a topology and returns the nodeid of the new node. If face is null, the node is still created.'; COMMENT ON FUNCTION topology.ST_AddIsoEdge(varchar , integer , integer , geometry ) IS 'args: atopology, anode, anothernode, alinestring - Adds an isolated edge defined by geometry alinestring to a topology connecting two existing isolated nodes anode and anothernode and returns the edge id of the new edge.'; COMMENT ON FUNCTION topology.ST_AddEdgeNewFaces(varchar , integer , integer , geometry ) IS 'args: atopology, anode, anothernode, acurve - Add a new edge and, if in doing so it splits a face, delete the original face and replace it with two new faces.'; COMMENT ON FUNCTION topology.ST_AddEdgeModFace(varchar , integer , integer , geometry ) IS 'args: atopology, anode, anothernode, acurve - Add a new edge and, if in doing so it splits a face, modify the original face and add a new face.'; COMMENT ON FUNCTION topology.ST_RemEdgeNewFace(varchar , integer ) IS 'args: atopology, anedge - Removes an edge and, if the removed edge separated two faces,delete the original faces and replace them with a new face.'; COMMENT ON FUNCTION topology.ST_RemEdgeModFace(varchar , integer ) IS 'args: atopology, anedge - Removes an edge and, if the removed edge separated two faces,delete one of the them and modify the other to take the space of both.'; COMMENT ON FUNCTION topology.ST_ChangeEdgeGeom(varchar , integer , geometry ) IS 'args: atopology, anedge, acurve - Changes the shape of an edge without affecting the topology structure.'; COMMENT ON FUNCTION topology.ST_ModEdgeSplit(varchar , integer , geometry ) IS 'args: atopology, anedge, apoint - Split an edge by creating a new node along an existing edge, modifying the original edge and adding a new edge.'; COMMENT ON FUNCTION topology.ST_ModEdgeHeal(varchar , integer , integer ) IS 'args: atopology, anedge, anotheredge - Heal two edges by deleting the node connecting them, modifying the first edgeand deleting the second edge. Returns the id of the deleted node.'; COMMENT ON FUNCTION topology.ST_NewEdgeHeal(varchar , integer , integer ) IS 'args: atopology, anedge, anotheredge - Heal two edges by deleting the node connecting them, deleting both edges,and replacing them with an edge whose direction is the same as the firstedge provided.'; COMMENT ON FUNCTION topology.ST_MoveIsoNode(varchar , integer , geometry ) IS 'args: atopology, anedge, apoint - Moves an isolated node in a topology from one point to another. If new apoint geometry exists as a node an error is thrown. REturns description of move.'; COMMENT ON FUNCTION topology.ST_NewEdgesSplit(varchar , integer , geometry ) IS 'args: atopology, anedge, apoint - Split an edge by creating a new node along an existing edge, deleting the original edge and replacing it with two new edges. Returns the id of the new node created that joins the new edges.'; COMMENT ON FUNCTION topology.ST_RemoveIsoNode(varchar , integer ) IS 'args: atopology, anode - Removes an isolated node and returns description of action. If the node is not isolated (is start or end of an edge), then an exception is thrown.'; COMMENT ON FUNCTION topology.GetEdgeByPoint(varchar , geometry , float8 ) IS 'args: atopology, apoint, tol - Find the edge-id of an edge that intersects a given point'; COMMENT ON FUNCTION topology.GetFaceByPoint(varchar , geometry , float8 ) IS 'args: atopology, apoint, tol - Find the face-id of a face that intersects a given point'; COMMENT ON FUNCTION topology.GetNodeByPoint(varchar , geometry , float8 ) IS 'args: atopology, point, tol - Find the id of a node at a point location'; COMMENT ON FUNCTION topology.GetTopologyID(varchar) IS 'args: toponame - Returns the id of a topology in the topology.topology table given the name of the topology.'; COMMENT ON FUNCTION topology.GetTopologyID(varchar) IS 'args: toponame - Returns the SRID of a topology in the topology.topology table given the name of the topology.'; COMMENT ON FUNCTION topology.GetTopologyName(integer) IS 'args: topology_id - Returns the name of a topology (schema) given the id of the topology.'; COMMENT ON FUNCTION topology.ST_GetFaceEdges(varchar , integer ) IS 'args: atopology, aface - Returns a set of ordered edges that bound aface.'; COMMENT ON FUNCTION topology.ST_GetFaceGeometry(varchar , integer ) IS 'args: atopology, aface - Returns the polygon in the given topology with the specified face id.'; COMMENT ON FUNCTION topology.GetRingEdges(varchar , integer , integer ) IS 'args: atopology, aring, max_edges=null - Returns an ordered set of edges forming a ring with the given edge .'; COMMENT ON FUNCTION topology.GetNodeEdges(varchar , integer ) IS 'args: atopology, anode - Returns an ordered set of edges incident to the given node.'; COMMENT ON FUNCTION topology.Polygonize(varchar ) IS 'args: toponame - Find and register all faces defined by topology edges'; COMMENT ON FUNCTION topology.AddNode(varchar , geometry , boolean , boolean ) IS 'args: toponame, apoint, allowEdgeSplitting=false, computeContainingFace=false - Adds a point node to the node table in the specified topology schema and returns the nodeid of new node. If point already exists as node, the existing nodeid is returned.'; COMMENT ON FUNCTION topology.AddEdge(varchar , geometry ) IS 'args: toponame, aline - Adds a linestring edge to the edge table and associated start and end points to the point nodes table of the specified topology schema using the specified linestring geometry and returns the edgeid of the new (or existing) edge.'; COMMENT ON FUNCTION topology.AddFace(varchar , geometry , boolean ) IS 'args: toponame, apolygon, force_new=false - Registers a face primitive to a topology and get its identifier.'; COMMENT ON FUNCTION topology.ST_Simplify(TopoGeometry, float) IS 'args: geomA, tolerance - Returns a "simplified" geometry version of the given TopoGeometry using the Douglas-Peucker algorithm.'; COMMENT ON FUNCTION topology.CreateTopoGeom(varchar , integer , integer, topoelementarray) IS 'args: toponame, tg_type, layer_id, tg_objs - Creates a new topo geometry object from topo element array - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection'; COMMENT ON FUNCTION topology.CreateTopoGeom(varchar , integer , integer) IS 'args: toponame, tg_type, layer_id - Creates a new topo geometry object from topo element array - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection'; COMMENT ON FUNCTION topology.toTopoGeom(geometry , varchar , integer, float8) IS 'args: geom, toponame, layer_id, tolerance - Converts a simple Geometry into a topo geometry'; COMMENT ON FUNCTION topology.toTopoGeom(geometry , topogeometry , float8) IS 'args: geom, topogeom, tolerance - Converts a simple Geometry into a topo geometry'; COMMENT ON AGGREGATE topology.TopoElementArray_Agg(topoelement) IS 'args: tefield - Returns a topoelementarray for a set of element_id, type arrays (topoelements)'; COMMENT ON FUNCTION topology.clearTopoGeom(topogeometry ) IS 'args: topogeom - Clears the content of a topo geometry'; COMMENT ON FUNCTION topology.GetTopoGeomElementArray(varchar , integer , integer) IS 'args: toponame, layer_id, tg_id - Returns a topoelementarray (an array of topoelements) containing the topological elements and type of the given TopoGeometry (primitive elements)'; COMMENT ON FUNCTION topology.GetTopoGeomElementArray(topogeometry ) IS 'args: tg - Returns a topoelementarray (an array of topoelements) containing the topological elements and type of the given TopoGeometry (primitive elements)'; COMMENT ON FUNCTION topology.GetTopoGeomElements(varchar , integer , integer) IS 'args: toponame, layer_id, tg_id - Returns a set of topoelement objects containing the topological element_id,element_type of the given TopoGeometry (primitive elements)'; COMMENT ON FUNCTION topology.GetTopoGeomElements(topogeometry ) IS 'args: tg - Returns a set of topoelement objects containing the topological element_id,element_type of the given TopoGeometry (primitive elements)'; COMMENT ON FUNCTION topology.AsGML(topogeometry ) IS 'args: tg - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsGML(topogeometry , text ) IS 'args: tg, nsprefix_in - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsGML(topogeometry , regclass ) IS 'args: tg, visitedTable - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsGML(topogeometry , regclass , text ) IS 'args: tg, visitedTable, nsprefix - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsGML(topogeometry , text , integer , integer ) IS 'args: tg, nsprefix_in, precision, options - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsGML(topogeometry , text , integer , integer , regclass ) IS 'args: tg, nsprefix_in, precision, options, visitedTable - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsGML(topogeometry , text , integer , integer , regclass , text ) IS 'args: tg, nsprefix_in, precision, options, visitedTable, idprefix - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsGML(topogeometry , text , integer , integer , regclass , text , int ) IS 'args: tg, nsprefix_in, precision, options, visitedTable, idprefix, gmlversion - Returns the GML representation of a topogeometry.'; COMMENT ON FUNCTION topology.AsTopoJSON(topogeometry , regclass ) IS 'args: tg, edgeMapTable - Returns the TopoJSON representation of a topogeometry.'; COMMENT ON FUNCTION topology.Equals(topogeometry , topogeometry ) IS 'args: tg1, tg2 - Returns true if two topogeometries are composed of the same topology primitives.'; COMMENT ON FUNCTION topology.Equals(topogeometry , topogeometry ) IS 'args: tg1, tg2 - Returns true if two topogeometries are composed of the same topology primitives.'; postgis-2.1.2+dfsg.orig/doc/faq_raster.xml0000644000000000000000000004231512125334555017210 0ustar rootroot PostGIS Raster Frequently Asked Questions Where can I find out more about the PostGIS Raster Project? Refer to the PostGIS Raster home page. Are there any books or tutorials to get me started with this wonderful invention? There is a full length beginner tutorial Intersecting vector buffers with large raster coverage using PostGIS Raster. Jorge has a series of blog articles on PostGIS Raster that demonstrate how to load raster data as well as cross compare to same tasks in Oracle GeoRaster. Check out Jorge's PostGIS Raster / Oracle GeoRaster Series. There is a whole chapter (more than 35 pages of content) dedicated to PostGIS Raster with free code and data downloads at PostGIS in Action - Raster chapter. You can buy PostGIS in Action now from Manning in hard-copy (significant discounts for bulk purchases) or just the E-book format. You can also buy from Amazon and various other book distributors. All hard-copy books come with a free coupon to download the E-book version. Here is a review from a PostGIS Raster user PostGIS raster applied to land classification urban forestry How do I install Raster support in my PostGIS database? The easiest is to download binaries for PostGIS and Raster which are currently available for windows and latest versions of Mac OSX. First you need a working PostGIS 2.0.0 or above and be running PostgreSQL 8.4, 9.0, or 9.1. Note in PostGIS 2.0 PostGIS Raster is fully integrated, so it will be compiled when you compile PostGIS. Instructions for installing and running under windows are available at How to Install and Configure PostGIS raster on windows If you are on windows, you can compile yourself, or use the pre-compiled PostGIS Raster windows binaries. If you are on Mac OSX Leopard or Snow Leopard, there are binaries available at Kyng Chaos Mac OSX PostgreSQL/GIS binaries. Then to enable raster support in your database, run the rtpostgis.sql file in your database. To upgrade an existing install use rtpostgis_upgrade_minor..sql instead of rtpostgis.sql For other platforms, you generally need to compile yourself. Dependencies are PostGIS and GDAL. For more details about compiling from source, please refer to Installing PostGIS Raster from source (in prior versions of PostGIS) I get error could not load library "C:/Program Files/PostgreSQL/8.4/lib/rtpostgis.dll": The specified module could not be found. or could not load library on Linux when trying to run rtpostgis.sql rtpostgis.so/dll is built with dependency on libgdal.dll/so. Make sure for Windows you have libgdal-1.dll in the bin folder of your PostgreSQL install. For Linux libgdal has to be in your path or bin folder. You may also run into different errors if you don't have PostGIS installed in your database. Make sure to install PostGIS first in your database before trying to install the raster support. How do I load Raster data into PostGIS? The latest version of PostGIS comes packaged with a raster2pgsql raster loader executable capable of loading many kinds of rasters and also generating lower resolution overviews without any additional software. Please refer to for more details. Pre-2.0 versions came with a raster2pgsql.py that required python with numpy and GDAL. This is no longer needed. What kind of raster file formats can I load into my database? Any that your GDAL library supports. GDAL supported formats are documented GDAL File Formats. Your particular GDAL install may not support all formats. To verify the ones supported by your particular GDAL install, you can use raster2pgsql -G Can I export my PostGIS raster data to other raster formats? Yes GDAL 1.7+ has a PostGIS raster driver, but is only compiled in if you choose to compile with PostgreSQL support. The driver currently doesn't support irregularly blocked rasters, although you can store irregularly blocked rasters in PostGIS raster data type. If you are compiling from source, you need to include in your configure --with-pg=path/to/pg_config to enable the driver. Refer to GDAL Build Hints for tips on building GDAL against in various OS platforms. If your version of GDAL is compiled with the PostGIS Raster driver you should see PostGIS Raster in list when you do gdalinfo --formats To get a summary about your raster via GDAL use gdalinfo: gdalinfo "PG:host=localhost port=5432 dbname='mygisdb' user='postgres' password='whatever' schema='someschema' table=sometable" To export data to other raster formats, use gdal_translate the below will export all data from a table to a PNG file at 10% size. Depending on your pixel band types, some translations may not work if the export format does not support that Pixel type. For example floating point band types and 32 bit unsigned ints will not translate easily to JPG or some others. Here is an example simple translation gdal_translate -of PNG -outsize 10% 10% "PG:host=localhost port=5432 dbname='mygisdb' user='postgres' password='whatever' schema='someschema' table=sometable" C:\somefile.png You can also use SQL where clauses in your export using the where=... in your driver connection string. Below are some using a where clause gdal_translate -of PNG -outsize 10% 10% "PG:host=localhost port=5432 dbname='mygisdb' user='postgres' password='whatever' schema='someschema' table=sometable where='filename=\'abcd.sid\''" " C:\somefile.png gdal_translate -of PNG -outsize 10% 10% "PG:host=localhost port=5432 dbname='mygisdb' user='postgres' password='whatever' schema='someschema' table=sometable where='ST_Intersects(rast, ST_SetSRID(ST_Point(-71.032,42.3793),4326) )' " C:\intersectregion.png To see more examples and syntax refer to Reading Raster Data of PostGIS Raster section Are their binaries of GDAL available already compiled with PostGIS Raster suppport? Yes. Check out the page GDAL Binaries page. Any compiled with PostgreSQL support should have PostGIS Raster in them. PostGIS Raster is undergoing many changes. If you want to get the latest nightly build for Windows -- then check out the Tamas Szekeres nightly builds built with Visual Studio which contain GDAL trunk, Python Bindings and MapServer executables and PostGIS Raster driver built-in. Just click the SDK bat and run your commands from there. http://vbkto.dyndns.org/sdk/. Also available are VS project files. FWTools latest stable version for Windows is compiled with Raster support. What tools can I use to view PostGIS raster data? You can use MapServer compiled with GDAL 1.7+ and PostGIS Raster driver support to view Raster data. QuantumGIS (QGIS) now supports viewing of PostGIS Raster if you have PostGIS raster driver installed. In theory any tool that renders data using GDAL can support PostGIS raster data or support it with fairly minimal effort. Again for Windows, Tamas' binaries http://vbkto.dyndns.org/sdk/ are a good choice if you don't want the hassle of having to setup to compile your own. How can I add a PostGIS raster layer to my MapServer map? First you need GDAL 1.7 or higher compiled with PostGIS raster support. GDAL 1.8 or above is preferred since many issues have been fixed in 1.8 and more PostGIS raster issues fixed in trunk version. You can much like you can with any other raster. Refer to MapServer Raster processing options for list of various processing functions you can use with MapServer raster layers. What makes PostGIS raster data particularly interesting, is that since each tile can have various standard database columns, you can segment it in your data source Below is an example of how you would define a PostGIS raster layer in MapServer. The mode=2 is required for tiled rasters and was added in PostGIS 2.0 and GDAL 1.8 drivers. This does not exist in GDAL 1.7 drivers. -- displaying raster with standard raster options LAYER NAME coolwktraster TYPE raster STATUS ON DATA "PG:host=localhost port=5432 dbname='somedb' user='someuser' password='whatever' schema='someschema' table='cooltable' mode='2'" PROCESSING "NODATA=0" PROCESSING "SCALE=AUTO" #... other standard raster processing functions here #... classes are optional but useful for 1 band data CLASS NAME "boring" EXPRESSION ([pixel] < 20) COLOR 250 250 250 END CLASS NAME "mildly interesting" EXPRESSION ([pixel] > 20 AND [pixel] < 1000) COLOR 255 0 0 END CLASS NAME "very interesting" EXPRESSION ([pixel] >= 1000) COLOR 0 255 0 END END -- displaying raster with standard raster options and a where clause LAYER NAME soil_survey2009 TYPE raster STATUS ON DATA "PG:host=localhost port=5432 dbname='somedb' user='someuser' password='whatever' schema='someschema' table='cooltable' where='survey_year=2009' mode='2'" PROCESSING "NODATA=0" #... other standard raster processing functions here #... classes are optional but useful for 1 band data END What functions can I currently use with my raster data? Refer to the list of . There are more, but this is still a work in progress. Refer to the PostGIS Raster roadmap page for details of what you can expect in the future. I am getting error ERROR: function st_intersects(raster, unknown) is not unique or st_union(geometry,text) is not unique. How do I fix? The function is not unique error happens if one of your arguments is a textual representation of a geometry instead of a geometry. In these cases, PostgreSQL marks the textual representation as an unknown type, which means it can fall into the st_intersects(raster, geometry) or st_intersects(raster,raster) thus resulting in a non-unique case since both functions can in theory support your request. To prevent this, you need to cast the geometry to a geometry. For example if your code looks like this: SELECT rast FROM my_raster WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)'); Cast the textual geometry representation to a geometry by changing your code to this: SELECT rast FROM my_raster WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)'::geometry); How is PostGIS Raster different from Oracle GeoRaster (SDO_GEORASTER) and SDO_RASTER types? For a more extensive discussion on this topic, check out Jorge Arévalo Oracle GeoRaster and PostGIS Raster: First impressions The major advantage of one-georeference-by-raster over one-georeference-by-layer is to allow: * coverages to be not necessarily rectangular (which is often the case of raster coverage covering large extents. See the possible raster arrangements in the documentation) * rasters to overlaps (which is necessary to implement lossless vector to raster conversion) These arrangements are possible in Oracle as well, but they imply the storage of multiple SDO_GEORASTER objects linked to as many SDO_RASTER tables. A complex coverage can lead to hundreds of tables in the database. With PostGIS Raster you can store a similar raster arrangement into a unique table. It's a bit like if PostGIS would force you to store only full rectangular vector coverage without gaps or overlaps (a perfect rectangular topological layer). This is very practical in some applications but practice has shown that it is not realistic or desirable for most geographical coverages. Vector structures needs the flexibility to store discontinuous and non-rectangular coverages. We think it is a big advantage that raster structure should benefit as well. raster2pgsql load of large file fails with String of N bytes is too long for encoding conversion? raster2pgsql doesn't make any connections to your database when generating the file to load. If your database has set an explicit client encoding different from your database encoding, then when loading large raster files (above 30 MB in size), you may run into a bytes is too long for encoding conversion. This generally happens if for example you have your database in UTF8, but to support windows apps, you have the client encoding set to WIN1252. To work around this make sure the client encoding is the same as your database encoding during load. You can do this by explicitly setting the encoding in your load script. Example, if you are on windows: set PGCLIENTENCODING=UTF8 If you are on Unix/Linux export PGCLIENTENCODING=UTF8 Gory details of this issue are detailed in http://trac.osgeo.org/postgis/ticket/2209 postgis-2.1.2+dfsg.orig/doc/ZMSgeoms.txt0000644000000000000000000001233011722777314016604 0ustar rootroot------------------------------------------------------------------------- TITLE: ZM values and SRID for Simple Features AUTHOR: Name: Sandro Santilli Email: strk@refractions.net DATE: 27 December 2005 CATEGORY: Simple Features Revision Proposal ------------------------------------------------------------------------- 1. Background OpenGIS document 99-402r2 introduces semantic and well-known representations for Z-geometries. This proposal extend the well-known representations to optionally also hold a measure (M) and a SRID. Misures, as Z values, are attributes of 2D vertexes, but their semantic is unspecified in this document, as they could be used for any kind 'misurement'. SRID is an attribute of the whole feature. This document defines how geometry can have Z,M or both values and SRID in a way which is compatible to the existing 2D OpenGIS Simple Features specification AND to the Z-Geometry documented in OpenGIS 99-402r2. 2. Proposal 2.1. Definition of ZM-Geometry a) A geometry can have either 2, 3 or 4 dimensions. b) 3rd dimension of a 3d geometry can either represent Z or M (3DZ or 3DM). c) 4d geometries contain both Z and M (in this order). d) M and Z values are associated with every vertex. e) M and Z values are undefined within surface interiors. Any ZM-Geometry can be converted into a 2D geometry by discarding all its Z and M values. The resulting 2D geometry is the "shadow" of the ZM-Geometry. 2D geometries cannot be safely converted into ZM-Geometries, since their Z and M values are undefined, and not necessarily zero. 2.2. Extensions to Well-Known-Binary format The 2d OpenGIS Simple Features specification has the following geometry types: enum wkbGeometryType { wkbPoint = 1, wkbLineString = 2, wkbPolygon = 3, wkbMultiPoint = 4, wkbMultiLineString = 5, wkbMultiPolygon = 6, wkbGeometryCollection = 7 } Document 99-402r2 introduces a Z-presence flag (wkbZ) which OR'ed to the type specifies the presence of Z coordinate: wkbZ = 0x80000000 This proposal suggest the use of an M-presence flag (wkbM) to allow for XY, XYM, XYZ and XYZM geometries, and SRID-presence flag to allow for embedded SRID: wkbM = 0x40000000 wkbSRID = 0x20000000 Possible resulting geometry types are: enum wkbGeometryTypeZ { wkbPoint = 1, wkbLineString = 2, wkbPolygon = 3, wkbMultiPoint = 4, wkbMultiLineString = 5, wkbMultiPolygon = 6, wkbGeometryCollection = 7, // | 0x80000000 wkbPointZ = 0x80000001, wkbLineStringZ = 0x80000002, wkbPolygonZ = 0x80000003, wkbMultiPointZ = 0x80000004, wkbMultiLineStringZ = 0x80000005, wkbMultiPolygonZ = 0x80000006, wkbGeometryCollectionZ = 0x80000007, // | 0x40000000 wkbPointM = 0x40000001, wkbLineStringM = 0x40000002, wkbPolygonM = 0x40000003, wkbMultiPointM = 0x40000004, wkbMultiLineStringM = 0x40000005, wkbMultiPolygonM = 0x40000006, wkbGeometryCollectionM = 0x40000007, // | 0x40000000 | 0x80000000 wkbPointZM = 0xC0000001, wkbLineStringZM = 0xC0000002, wkbPolygonZM = 0xC0000003, wkbMultiPointZM = 0xC0000004, wkbMultiLineStringZM = 0xC0000005, wkbMultiPolygonZM = 0xC0000006, wkbGeometryCollectionZM = 0xC0000007, // | 0x20000000 wkbPointS = 0x20000001, wkbLineStringS = 0x20000002, wkbPolygonS = 0x20000003, wkbMultiPointS = 0x20000004, wkbMultiLineStringS = 0x20000005, wkbMultiPolygonS = 0x20000006, wkbGeometryCollectionS = 0x20000007, // | 0x20000000 | 0x80000000 wkbPointZS = 0xA0000001, wkbLineStringZS = 0xA0000002, wkbPolygonZS = 0xA0000003, wkbMultiPointZS = 0xA0000004, wkbMultiLineStringZS = 0xA0000005, wkbMultiPolygonZS = 0xA0000006, wkbGeometryCollectionZS = 0xA0000007, // | 0x20000000 | 0x40000000 wkbPointMS = 0x60000001, wkbLineStringMS = 0x60000002, wkbPolygonMS = 0x60000003, wkbMultiPointMS = 0x60000004, wkbMultiLineStringMS = 0x60000005, wkbMultiPolygonMS = 0x60000006, wkbGeometryCollectionMS = 0x60000007, // | 0x20000000 | 0x40000000 | 0x80000000 wkbPointZMS = 0xE0000001, wkbLineStringZMS = 0xE0000002, wkbPolygonZMS = 0xE0000003, wkbMultiPointZMS = 0xE0000004, wkbMultiLineStringZMS = 0xE0000005, wkbMultiPolygonZMS = 0xE0000006, wkbGeometryCollectionZMS = 0xE0000007, } If the SRID flag is set it's value is encoded as a 4byte integer right after the type integer. If only wkbZ or wkbM flags are set Point coordinates will be XYZ or XYM, if both wkbZ and wkbM flags are set Point coordinates will be XYZM (Z first). For example, a ZM-Point geometry at the location (10,20) with Z==30, M==40 and SRID=4326 would be: WKBPoint { byte byteOrder; // wkbXDR or wkbNDR uint32 wkbType; // (wkbPoint+wkbZ+wkbM+wkbSRID) = // 0xE0000001 uint32 SRID; // 4326 Point { Double x; // 10.0 Double y; // 20.0 Double z; // 30.0 Double m; // 40.0 } } 2.3. Extensions to Well-Known-Text format Geometry SRID presence and value would be represented using a "SRID=#;" prefix to the WKT text: "SRID=4326;POINT(1 2)" 3DZ geometry will be represented as: "POINT(1 2 3)" 4D geometry will be represented as: "POINT(1 2 3 4)" 3DM geometry will be represented as: "POINTM(1 2 3)" or "GEOMETRYCOLLECTIONM(POINTM(1 2 3), LINESTRINGM(1 2 3, 4 5 6))" Note that the coordinates structure of a geometry must be consistent, you can't mix dimensions in a single geometry. postgis-2.1.2+dfsg.orig/doc/tiger_geocoder_comments.sql0000644000000000000000000001367512315456266021762 0ustar rootroot COMMENT ON FUNCTION Drop_Indexes_Generate_Script(text ) IS 'args: param_schema=tiger_data - Generates a script that drops all non-primary key and non-unique indexes on tiger schema and user specified schema. Defaults schema to tiger_data if no schema is specified.'; COMMENT ON FUNCTION Drop_Nation_Tables_Generate_Script(text ) IS 'args: param_schema=tiger_data - Generates a script that drops all tables in the specified schema that start with county_all, state_all or stae code followed by county or state.'; COMMENT ON FUNCTION Drop_State_Tables_Generate_Script(text , text ) IS 'args: param_state, param_schema=tiger_data - Generates a script that drops all tables in the specified schema that are prefixed with the state abbreviation. Defaults schema to tiger_data if no schema is specified.'; COMMENT ON FUNCTION geocode(varchar , integer , geometry ) IS 'args: address, max_results=10, restrict_region=NULL, OUT addy, OUT geomout, OUT rating - Takes in an address as a string (or other normalized address) and outputs a set of possible locations which include a point geometry in NAD 83 long lat, a normalized address for each, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10, and restrict_region (defaults to NULL)'; COMMENT ON FUNCTION geocode(norm_addy , integer , geometry ) IS 'args: in_addy, max_results=10, restrict_region=NULL, OUT addy, OUT geomout, OUT rating - Takes in an address as a string (or other normalized address) and outputs a set of possible locations which include a point geometry in NAD 83 long lat, a normalized address for each, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10, and restrict_region (defaults to NULL)'; COMMENT ON FUNCTION geocode_intersection(text , text , text , text , text , integer ) IS 'args: roadway1, roadway2, in_state, in_city, in_zip, max_results=10, OUT addy, OUT geomout, OUT rating - Takes in 2 streets that intersect and a state, city, zip, and outputs a set of possible locations on the first cross street that is at the intersection, also includes a point geometry in NAD 83 long lat, a normalized address for each location, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10'; COMMENT ON FUNCTION Get_Geocode_Setting(text ) IS 'args: setting_name - Returns value of specific setting stored in tiger.geocode_settings table.'; COMMENT ON FUNCTION get_tract(geometry , text ) IS 'args: loc_geom, output_field=name - Returns census tract or field from tract table of where the geometry is located. Default to returning short name of tract.'; COMMENT ON FUNCTION Install_Missing_Indexes() IS 'Finds all tables with key columns used in geocoder joins and filter conditions that are missing used indexes on those columns and will add them.'; COMMENT ON FUNCTION loader_generate_census_script(text[], text) IS 'args: param_states, os - Generates a shell script for the specified platform for the specified states that will download Tiger census state tract, bg, and tabblocks data tables, stage and load into tiger_data schema. Each state script is returned as a separate record.'; COMMENT ON FUNCTION loader_generate_script(text[], text) IS 'args: param_states, os - Generates a shell script for the specified platform for the specified states that will download Tiger data, stage and load into tiger_data schema. Each state script is returned as a separate record. Latest version supports Tiger 2010 structural changes and also loads census tract, block groups, and blocks tables.'; COMMENT ON FUNCTION loader_generate_nation_script(text) IS 'args: os - Generates a shell script for the specified platform that loads in the county and state lookup tables.'; COMMENT ON FUNCTION Missing_Indexes_Generate_Script() IS 'Finds all tables with key columns used in geocoder joins that are missing indexes on those columns and will output the SQL DDL to define the index for those tables.'; COMMENT ON FUNCTION normalize_address(varchar ) IS 'args: in_address - Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This function will work with just the lookup data packaged with the tiger_geocoder (no need for tiger census data).'; COMMENT ON FUNCTION pagc_normalize_address(varchar ) IS 'args: in_address - Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This function will work with just the lookup data packaged with the tiger_geocoder (no need for tiger census data). Requires address_standardizer extension.'; COMMENT ON FUNCTION pprint_addy(norm_addy ) IS 'args: in_addy - Given a norm_addy composite type object, returns a pretty print representation of it. Usually used in conjunction with normalize_address.'; COMMENT ON FUNCTION Reverse_Geocode(geometry , boolean ) IS 'args: pt, include_strnum_range=false, OUT intpt, OUT addy, OUT street - Takes a geometry point in a known spatial ref sys and returns a record containing an array of theoretically possible addresses and an array of cross streets. If include_strnum_range = true, includes the street range in the cross streets.'; COMMENT ON FUNCTION Topology_Load_Tiger(varchar , varchar , varchar ) IS 'args: topo_name, region_type, region_id - Loads a defined region of tiger data into a PostGIS Topology and transforming the tiger data to spatial reference of the topology and snapping to the precision tolerance of the topology.'; COMMENT ON FUNCTION Set_Geocode_Setting(text , text ) IS 'args: setting_name, setting_value - Sets a setting that affects behavior of geocoder functions.'; postgis-2.1.2+dfsg.orig/doc/extras.xml0000644000000000000000000000064311722777314016373 0ustar rootroot &extras_topology; PostGIS Extras This chapter documents features found in the extras folder of the PostGIS source tarballs and source repository. These are not always packaged with PostGIS binary releases, but are usually plpgsql based or standard shell scripts that can be run as is. &extras_tigergeocoder; postgis-2.1.2+dfsg.orig/doc/extras_historytable.xml0000644000000000000000000001456211722777314021171 0ustar rootroot History Tracking Suppose you have a table of data that represents the current state of a particular geographic feature. A parcels table, or a roads table, or a fruit trees table, whatever. Generally, GIS tools understand a table as a single entity into which they can update, insert and delete rows from. How you do allow common GIS tools to work against your data, while maintaining an audit trail of what changes have been made, by whom, and what the past state of the data is? This history_table extra module provides some utility functions for creating and maintaining history. The history_table was also packaged in PostGIS 1.5, but added to the documentation in PostGIS 2.0. This package is written in plpgsql and located in the extras/history_table of PostGIS source tar balls and source repository. If you have a table 'roads', this module will maintain a 'roads_history' side table, which contains all the columns of the parent table, and the following additional columns: history_id | integer | not null default date_added | timestamp without time zone | not null default now() date_deleted | timestamp without time zone | last_operation | character varying(30) | not null active_user | character varying(90) | not null default "current_user"() current_version | text | not null When you insert a new record into 'roads' a record is automatically inserted into 'roads_history', with the 'date_added' filled in the 'date_deleted' set to NULL, a unique 'history_id', a 'last_operation' of 'INSERT' and 'active_user' set. When you delete a record in 'roads', the record in the history table is *not* deleted, but the 'date_deleted' is set to the current date. When you update a record in 'roads', the current record has 'date_deleted' filled in and a new record is created with the 'date_added' set and 'date_deleted' NULL. With this information maintained, it is possible to retrieve the history of any record in the roads table: SELECT * FROM roads_history WHERE roads_pk = 111; Or, to retrieve a view of the roads table at any point in the past: SELECT * FROM roads_history WHERE date_added < 'January 1, 2001' AND ( date_deleted >= 'January 1, 2001' OR date_deleted IS NULL ); Postgis_Install_History Creates a table that will hold some interesting values for managing history tables. void Postgis_Install_History Description Creates a table that will hold some interesting values for managing history tables. Creates a table called historic_information Availability: 1.5.0 Examples SELECT postgis_install_history(); See Also Postgis_Enable_History Registers a tablein the history_information table for tracking and also adds in side line history table and insert, update, delete rules on the table. boolean Postgis_Enable_History text p_schema text p_table Description Registers a table in the history_information table for tracking and also adds in side line history table with same name as table but prefixed with history in the same schema as the original table. Puts in insert, update, delete rules on the table. Any inserts,updates,deletes of the geometry are recorded in the history table. This function currently relies on a geometry column being registered in geometry_columns and fails if the geometry column is not present in geometry_columns table. Availability: 1.5.0 Examples CREATE TABLE roads(gid SERIAL PRIMARY KEY, road_name varchar(150)); SELECT AddGeometryColumn('roads', 'geom', 26986, 'LINESTRING', 2); SELECT postgis_enable_history('public', 'roads', 'geom') As register_table; register_table -------------- t INSERT INTO roads(road_name, geom) VALUES('Test Street', ST_GeomFromText('LINESTRING(231660.5 832170,231647 832202,231627.5 832250.5)',26986)); -- check transaction detail -- SELECT date_added, last_operation, current_version FROM roads_history WHERE road_name = 'Test Street' ORDER BY date_added DESC; date_added | last_operation | current_version ------------------------+----------------+----------------- 2011-02-07 12:44:36.92 | INSERT | 2 See Also postgis-2.1.2+dfsg.orig/doc/man/0000755000000000000000000000000012317530606015103 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/man/shp2pgsql.10000644000000000000000000001205712133444045017112 0ustar rootroot.TH "shp2pgsql" "1" "" "" "PostGIS" .SH "NAME" .LP shp2pgsql - shapefile to postgis loader .SH "SYNTAX" .LP shp2pgsql [\fIoptions\fR] \fIshapefile\fR [\fIschema\fR\fB.\fR]\fItable\fR .SH "DESCRIPTION" .LP The shp2pgsql data loader converts ESRI Shape files into SQL suitable for insertion into a PostGIS/PostgreSQL database. Version: 1.1.5 (2006/10/06) .SH "USAGE" .LP The is the name of the shape file, without any extension information. For example, 'roads' would be the name of the shapefile comprising the 'roads.shp', 'roads.shx', and 'roads.dbf' files. The is the (optionally schema-qualified) name of the database table you want the data stored in in the database. Within that table, the geometry will be placed in the 'geo_value' column by default. .SH "OPTIONS" .LP The loader has several operating modes distinguished by command line flags: (Note that \-a, \-c, \-d and \-p are mutually exclusive.) .TP \fB\-d\fR Drops the database table before creating a new table with the data in the Shape file. .TP \fB\-a\fR Appends data from the Shape file into the database table. Note that to use this option to load multiple files, the files must have the same attributes and same data types. .TP \fB\-c\fR Creates a new table and populates it from the Shape file. This is the default mode. .TP \fB\-p\fR Only produces the table creation SQL code, without adding any actual data. This can be used if you need to completely separate the table creation and data loading steps. .TP \fB\-D\fR Use the PostgreSQL "dump" format for the output data. This can be combined with \-a, \-c and \-d. It is much faster to load than the default "insert" SQL format. Use this for very large data sets. .TP \fB\-w\fR Output WKT format, instead of WKB. Note that this can introduce coordinate drifts due to loss of precision. .TP \fB\-e\fR Execute each statement on its own, without using a transaction. This allows loading of the majority of good data when there are some bad geometries that generate errors. Note that this cannot be used with the \-D flag as the "dump" format always uses a transaction. .TP \fB\-s\fR [<\fIFROM_SRID\fR>:]<\fISRID\fR> Creates and populates the geometry tables with the specified SRID. If FROM_SRID is given, the geometries will be reprojected. Reprojection cannot be used with \-D. .TP \fB\-G\fR Use the geography type instead of geometry. Geography is used to store lat/lon data. At the moment the only spatial reference supported is 4326. .TP \fB\-g\fR <\fIgeometry_column\fR> Specify the name of the geometry column (mostly useful in append mode). .TP \fB\-k\fR Keep idendifiers case (column, schema and attributes). Note that attributes in Shapefile are usually all UPPERCASE. .TP \fB\-i\fR Coerce all integers to standard 32\-bit integers, do not create 64\-bit bigints, even if the DBF header signature appears to warrant it. .TP \fB\-S\fR Generate simple Geometries instead of MULTIgeometries. Shape files don't differ between LINESTRINGs and MULTILINESTRINGs, so shp2pgsql generates MULTILINESTRINGs by default. This switch will produce LINESTRINGs instead, but shp2pgsql will fail when it hits a real MULTILINESTRING. The same works for POLYGONs vs. MULTIPOLYGONs. .TP \fB\-W\fR <\fIencoding\fR> Specify the character \fIencoding\fR of Shapefile's attributes. If this option is used the output will be encoded in UTF-8. .TP \fB\-I\fR Create a GiST index on the geometry column. .TP \fB\-N\fR <\fIpolicy\fR> Specify NULL geometries handling policy (insert,skip,abort). .TP \fB\-T\fR <\fItablespace\fR> Specify the tablespace for the new table. Indexes will still use the default tablespace unless the \-X parameter is also used. The PostgreSQL documentation has a good description on when to use custom tablespaces. .TP \fB\-X\fR <\fItablespace\fR> Specify the tablespace for the new table's indexes. This applies to the primary key index, and the GIST spatial index if \-I is also used. .TP \fB\-?\fR Display version and usage information. .SH "INSTALLATION" .LP To compile the program from source, simply run "make" in the source directory. Then copy the binary in your shell search path (or wherever you like). This text is also available as a man page in the ../doc/man/ directory, ready for copying it into the manual search path on unixoid systems. .SH "EXAMPLES" .LP An example session using the loader to create an input file and uploading it might look like this: # \fBshp2pgsql shaperoads roadstable roadsdb > roads.sql\fR .br # \fBpsql \-d roadsdb \-f roads.sql\fR A conversion and upload can be done all in one step using UNIX pipes: # \fBshp2pgsql shaperoads roadstable roadsdb | psql \-d roadsdb\fR .SH "AUTHORS" .LP Originally written by Jeff Lounsbury . Improved and maintained by Sandro Santilli . Includes small contributions and improvements by others. This application uses functionality from shapelib 1.2.9 by Frank Warmerdam to read from ESRI Shape files. .SH "SEE ALSO" .LP pgsql2shp(1) More information is available at http://postgis.refractions.net postgis-2.1.2+dfsg.orig/doc/man/pgsql2shp.10000644000000000000000000000642412133444045017113 0ustar rootroot.TH "pgsql2shp" "1" "" "" "PostGIS" .SH "NAME" .LP pgsql2shp - postgis to shapefile dumper .SH "SYNTAX" .LP pgsql2shp [\fIoptions\fR] \fIdatabase\fR [\fIschema\fR\fB.\fR]\fItable\fR .br pgsql2shp [\fIoptions\fR] \fIdatabase\fR \fIquery\fR .SH "DESCRIPTION" .LP The pgsql2shp table dumper connects directly to the database and converts a table (possibly created by user query) into a shape file. It is compatible with all versions of PostGIS. Version: 1.1.5 (2006/10/06) .SH "USAGE" .LP The is the name of the database to connect to. The
black circle example from buffer rendered with just PostGIS original (column rast) dupe_band sing_band Pixel Width: Pixel size in the i directionPixel Height: Pixel size in the j direction original mass state plane meters (mass_stm) After transform to wgs 84 long lat (wgs_84) After transform to wgs 84 long lat with bilinear algorithm instead of NN default (wgs_84_bilin) Full raster tile before clipping After Clipping Full raster tile before clipping After Clipping - surreal Full raster tile before clipping After Clipping orig_png grey_png pseudo_png fire_png bluered_png red_png original (column rast-view) rast_view_ma mapalgebra intersection map algebra union rast1 rast2 rast3 final_rast The blue lines are the boundaries of select parcels original (column rast-view) rast_view_ma map bands overlay (canvas) (R: small road, G: circle, B: big road) user defined with extra args and different bands from same raster First band of our raster new raster after averaging pixels withing 4x4 pixels of each other k = power factor, a real number between 0 and 1
is the (optionally schema-qualified) table to read spatial data from. Alternatively, you can specify a QUERY whose result will be written into the shapefile. .SH "OPTIONS" .LP The commandline options are: .TP \fB\-f\fR <\fIfilename\fR> Write the output to a particular filename. .TP \fB\-h\fR <\fIhost\fR> The database host to connect to. .TP \fB\-p\fR <\fIport\fR> The port to connect to on the database host. .TP \fB\-P\fR <\fIpassword\fR> The password to use when connecting to the database. .TP \fB\-u\fR <\fIuser\fR> The username to use when connecting to the database. .TP \fB\-g\fR <\fIgeometry column\fR> In the case of tables with multiple geometry columns, the geometry column to use when writing the shape file. .TP \fB\-b\fR Use a binary cursor. When used on pre\-1.0.0 PostGIS versions this will reduce the likelihood of coordinate drift due to conversion to and from WKT format. Coordinate drifts will not occur with PostGIS 1.0.0 and newer versions. It will be slightly faster, but might fail if any NON\-geometry column lacks a cast to text. .TP \fB\-r\fR Raw mode. Do not drop the gid field, or escape column names. .TP \fB\-d\fR For backward compatibility: write a 3\-dimensional shape file when dumping from old (pre\-1.0.0) postgis databases (the default is to write a 2\-dimensional shape file in that case). Starting from postgis\-1.0.0+, dimensions are fully encoded. .TP \fB\-k\fR Keep identifiers case (don't uppercase field names). .TP \fB\-m\fR <\fIfilename\fR> Specify a file containing a set of mappings of (long) column names to 10 character DBF column names. The content of the file is one or more lines of two names separated by white space and no trailing or leading space: COLUMNNAME DBFFIELD1\\n .br AVERYLONGCOLUMNNAME DBFFIELD2\\n etc. .TP \fB\-?\fR Display version and usage information. .SH "INSTALLATION" .LP To compile the program from source, simply run "make" in the source directory. Then copy the binary in your shell search path (or wherever you like). This text is also available as a man page in the ../doc/man/ directory, ready for copying it into the manual search path on unixoid systems. .SH "EXAMPLES" .LP An example session using the dumper to create shape file from a database might look like this: # \fBpgsql2shp \-f myfile \-p 5555 my_db roads_table\fR .SH "AUTHORS" .LP Originally written by Jeff Lounsbury . Improved and maintained by Sandro Santilli . Includes small contributions and improvements by others. This application uses functionality from shapelib 1.2.9 by Frank Warmerdam to write to ESRI Shape files. .SH "SEE ALSO" .LP shp2pgsql(1) More information is available at http://postgis.refractions.net postgis-2.1.2+dfsg.orig/doc/reference_processing.xml0000644000000000000000000033375312153412472021260 0ustar rootroot Geometry Processing ST_Buffer (T) For geometry: Returns a geometry that represents all points whose distance from this Geometry is less than or equal to distance. Calculations are in the Spatial Reference System of this Geometry. For geography: Uses a planar transform wrapper. Introduced in 1.5 support for different end cap and mitre settings to control shape. buffer_style options: quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.# geometry ST_Buffer geometry g1 float radius_of_buffer geometry ST_Buffer geometry g1 float radius_of_buffer integer num_seg_quarter_circle geometry ST_Buffer geometry g1 float radius_of_buffer text buffer_style_parameters geography ST_Buffer geography g1 float radius_of_buffer_in_meters Description Returns a geometry/geography that represents all points whose distance from this Geometry/geography is less than or equal to distance. Geometry: Calculations are in the Spatial Reference System of the geometry. Introduced in 1.5 support for different end cap and mitre settings to control shape. Negative radii: For polygons, a negative radius can be used, which will shrink the polygon rather than expanding it. Geography: For geography this is really a thin wrapper around the geometry implementation. It first determines the best SRID that fits the bounding box of the geography object (favoring UTM, Lambert Azimuthal Equal Area (LAEA) north/south pole, and falling back on mercator in worst case scenario) and then buffers in that planar spatial ref and retransforms back to WGS84 geography. For geography this may not behave as expected if object is sufficiently large that it falls between two UTM zones or crosses the dateline Availability: 1.5 - ST_Buffer was enhanced to support different endcaps and join types. These are useful for example to convert road linestrings into polygon roads with flat or square edges instead of rounded edges. Thin wrapper for geography was added. - requires GEOS >= 3.2 to take advantage of advanced geometry functionality. The optional third parameter (currently only applies to geometry) can either specify number of segments used to approximate a quarter circle (integer case, defaults to 8) or a list of blank-separated key=value pairs (string case) to tweak operations as follows: 'quad_segs=#' : number of segments used to approximate a quarter circle (defaults to 8). 'endcap=round|flat|square' : endcap style (defaults to "round", needs GEOS-3.2 or higher for a different value). 'butt' is also accepted as a synonym for 'flat'. 'join=round|mitre|bevel' : join style (defaults to "round", needs GEOS-3.2 or higher for a different value). 'miter' is also accepted as a synonym for 'mitre'. 'mitre_limit=#.#' : mitre ratio limit (only affects mitered join style). 'miter_limit' is also accepted as a synonym for 'mitre_limit'. Units of radius are measured in units of the spatial reference system. The inputs can be POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS, and GeometryCollections. This function ignores the third dimension (z) and will always give a 2-d buffer even when presented with a 3d-geometry. Performed by the GEOS module. &sfs_compliant; s2.1.1.3 &sqlmm_compliant; SQL-MM 3: 5.1.17 People often make the mistake of using this function to try to do radius searches. Creating a buffer to to a radius search is slow and pointless. Use instead. Examples SELECT ST_Buffer( ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=8'); SELECT ST_Buffer( ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=2'); SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'endcap=round join=round'); SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'endcap=square join=round'); SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'endcap=flat join=round'); SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'join=bevel'); SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'join=mitre mitre_limit=5.0'); SELECT ST_Buffer( ST_GeomFromText( 'LINESTRING(50 50,150 150,150 50)' ), 10, 'join=mitre mitre_limit=1.0'); --A buffered point approximates a circle -- A buffered point forcing approximation of (see diagram) -- 2 points per circle is poly with 8 sides (see diagram) SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As promisingcircle_pcount, ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 2)) As lamecircle_pcount; promisingcircle_pcount | lamecircle_pcount ------------------------+------------------- 33 | 9 --A lighter but lamer circle -- only 2 points per quarter circle is an octagon --Below is a 100 meter octagon -- Note coordinates are in NAD 83 long lat which we transform to Mass state plane meter and then buffer to get measurements in meters; SELECT ST_AsText(ST_Buffer( ST_Transform( ST_SetSRID(ST_MakePoint(-71.063526, 42.35785),4269), 26986) ,100,2)) As octagon; ---------------------- POLYGON((236057.59057465 900908.759918696,236028.301252769 900838.049240578,235 957.59057465 900808.759918696,235886.879896532 900838.049240578,235857.59057465 900908.759918696,235886.879896532 900979.470596815,235957.59057465 901008.759918 696,236028.301252769 900979.470596815,236057.59057465 900908.759918696)) See Also , , , , ST_BuildArea Creates an areal geometry formed by the constituent linework of given geometry geometry ST_BuildArea geometry A Description Creates an areal geometry formed by the constituent linework of given geometry. The return type can be a Polygon or MultiPolygon, depending on input. If the input lineworks do not form polygons NULL is returned. The inputs can be LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS, and GeometryCollections. This function will assume all inner geometries represent holes Input linework must be correctly noded for this function to work properly Availability: 1.1.0 - requires GEOS >= 2.1.0. Examples SELECT ST_BuildArea(ST_Collect(smallc,bigc)) FROM (SELECT ST_Buffer( ST_GeomFromText('POINT(100 90)'), 25) As smallc, ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As bigc) As foo; SELECT ST_BuildArea(ST_Collect(line,circle)) FROM (SELECT ST_Buffer( ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)), 5) As line, ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo; --this creates the same gaping hole --but using linestrings instead of polygons SELECT ST_BuildArea( ST_Collect(ST_ExteriorRing(line),ST_ExteriorRing(circle)) ) FROM (SELECT ST_Buffer( ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) ,5) As line, ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo; See Also , , , wrappers to this function with standard OGC interface ST_Collect Return a specified ST_Geometry value from a collection of other geometries. geometry ST_Collect geometry set g1field geometry ST_Collect geometry g1 geometry g2 geometry ST_Collect geometry[] g1_array Description Output type can be a MULTI* or a GEOMETRYCOLLECTION. Comes in 2 variants. Variant 1 collects 2 geometries. Variant 2 is an aggregate function that takes a set of geometries and collects them into a single ST_Geometry. Aggregate version: This function returns a GEOMETRYCOLLECTION or a MULTI object from a set of geometries. The ST_Collect() function is an "aggregate" function in the terminology of PostgreSQL. That means that it operates on rows of data, in the same way the SUM() and AVG() functions do. For example, "SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN" will return a separate GEOMETRYCOLLECTION for each distinct value of ATTRCOLUMN. Non-Aggregate version: This function returns a geometry being a collection of two input geometries. Output type can be a MULTI* or a GEOMETRYCOLLECTION. ST_Collect and ST_Union are often interchangeable. ST_Collect is in general orders of magnitude faster than ST_Union because it does not try to dissolve boundaries or validate that a constructed MultiPolgon doesn't have overlapping regions. It merely rolls up single geometries into MULTI and MULTI or mixed geometry types into Geometry Collections. Unfortunately geometry collections are not well-supported by GIS tools. To prevent ST_Collect from returning a Geometry Collection when collecting MULTI geometries, one can use the below trick that utilizes to expand the MULTIs out to singles and then regroup them. Availability: 1.4.0 - ST_Collect(geomarray) was introduced. ST_Collect was enhanced to handle more geometries faster. &Z_support; &curve_support; This method supports Circular Strings and Curves, but will never return a MULTICURVE or MULTI as one would expect and PostGIS does not currently support those. Examples Aggregate example (http://postgis.refractions.net/pipermail/postgis-users/2008-June/020331.html) SELECT stusps, ST_Multi(ST_Collect(f.the_geom)) as singlegeom FROM (SELECT stusps, (ST_Dump(the_geom)).geom As the_geom FROM somestatetable ) As f GROUP BY stusps Non-Aggregate example SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(-2 3)') )); st_astext ---------- MULTIPOINT(1 2,-2 3) --Collect 2 d points SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(1 2)') ) ); st_astext ---------- MULTIPOINT(1 2,1 2) --Collect 3d points SELECT ST_AsEWKT(ST_Collect(ST_GeomFromEWKT('POINT(1 2 3)'), ST_GeomFromEWKT('POINT(1 2 4)') ) ); st_asewkt ------------------------- MULTIPOINT(1 2 3,1 2 4) --Example with curves SELECT ST_AsText(ST_Collect(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'), ST_GeomFromText('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'))); st_astext ------------------------------------------------------------------------------------ GEOMETRYCOLLECTION(CIRCULARSTRING(220268 150415,220227 150505,220227 150406), CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)) --New ST_Collect array construct SELECT ST_Collect(ARRAY(SELECT the_geom FROM sometable)); SELECT ST_AsText(ST_Collect(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'), ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktcollect; --wkt collect -- MULTILINESTRING((1 2,3 4),(3 4,4 5)) See Also , ST_ConcaveHull The concave hull of a geometry represents a possibly concave geometry that encloses all geometries within the set. You can think of it as shrink wrapping. geometry ST_ConcaveHull geometry geomA float target_percent boolean allow_holes=false Description The concave hull of a geometry represents a possibly concave geometry that encloses all geometries within the set. Defaults to false for allowing polygons with holes. The result is never higher than a single polygon. The target_percent is the target percent of area of convex hull the PostGIS solution will try to approach before giving up or exiting. One can think of the concave hull as the geometry you get by vacuum sealing a set of geometries. The target_percent of 1 will give you the same answer as the convex hull. A target_percent between 0 and 0.99 will give you something that should have a smaller area than the convex hull. This is different from a convex hull which is more like wrapping a rubber band around the set of geometries. It is usually used with MULTI and Geometry Collections. Although it is not an aggregate - you can use it in conjunction with ST_Collect or ST_Union to get the concave hull of a set of points/linestring/polygons ST_ConcaveHull(ST_Collect(somepointfield), 0.80). It is much slower to compute than convex hull but encloses the geometry better and is also useful for image recognition. Performed by the GEOS module Note - If you are using with points, linestrings, or geometry collections use ST_Collect. If you are using with polygons, use ST_Union since it may fail with invalid geometries. Note - The smaller you make the target percent, the longer it takes to process the concave hull and more likely to run into topological exceptions. Also the more floating points and number of points you accrue. First try a 0.99 which does a first hop, is usually very fast, sometimes as fast as computing the convex hull, and usually gives much better than 99% of shrink since it almost always overshoots. Second hope of 0.98 it slower, others get slower usually quadratically. To reduce precision and float points, use or after ST_ConcaveHull. ST_SnapToGrid is a bit faster, but could result in invalid geometries where as ST_SimplifyPreserveTopology almost always preserves the validity of the geometry. More real world examples and brief explanation of the technique are shown http://www.bostongis.com/postgis_concavehull.snippet Also check out Simon Greener's article on demonstrating ConcaveHull introduced in Oracle 11G R2. http://www.spatialdbadvisor.com/oracle_spatial_tips_tricks/172/concave-hull-geometries-in-oracle-11gr2. The solution we get at 0.75 target percent of convex hull is similar to the shape Simon gets with Oracle SDO_CONCAVEHULL_BOUNDARY. Availability: 2.0.0 Examples --Get estimate of infected area based on point observations SELECT d.disease_type, ST_ConcaveHull(ST_Collect(d.pnt_geom), 0.99) As geom FROM disease_obs As d GROUP BY d.disease_type; -- geometries overlaid with concavehull -- at target 100% shrink (this is the same as convex hull - since no shrink) SELECT ST_ConcaveHull( ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ), 1) As convexhull; -- geometries overlaid with concavehull at target 90% shrink SELECT ST_ConcaveHull( ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ), 0.9) As target_90; -- this produces a table of 42 points that form an L shape SELECT (ST_DumpPoints(ST_GeomFromText( 'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14, 150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6, 14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130, 6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114, 14 94,14 74,14 54,14 34,14 14)'))).geom INTO TABLE l_shape; SELECT ST_ConvexHull(ST_Collect(geom)) FROM l_shape; SELECT ST_ConcaveHull(ST_Collect(geom), 0.99) FROM l_shape; -- Concave Hull L shape points -- at target 80% of convexhull SELECT ST_ConcaveHull(ST_Collect(geom), 0.80) FROM l_shape; SELECT ST_ConcaveHull(ST_GeomFromText('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94, 130 62,122 40,156 32,162 76,172 88), (132 178,134 148,128 136,96 128,132 108,150 130, 170 142,174 110,156 96,158 90,158 88), (22 64,66 28,94 38,94 68,114 76,112 30, 132 10,168 18,178 34,186 52,184 74,190 100, 190 122,182 148,178 170,176 184,156 164,146 178, 132 186,92 182,56 158,36 150,62 150,76 128,88 118))'),0.99) See Also , , , ST_ConvexHull The convex hull of a geometry represents the minimum convex geometry that encloses all geometries within the set. geometry ST_ConvexHull geometry geomA Description The convex hull of a geometry represents the minimum convex geometry that encloses all geometries within the set. One can think of the convex hull as the geometry you get by wrapping an elastic band around a set of geometries. This is different from a concave hull which is analogous to shrink-wrapping your geometries. It is usually used with MULTI and Geometry Collections. Although it is not an aggregate - you can use it in conjunction with ST_Collect to get the convex hull of a set of points. ST_ConvexHull(ST_Collect(somepointfield)). It is often used to determine an affected area based on a set of point observations. Performed by the GEOS module &sfs_compliant; s2.1.1.3 &sqlmm_compliant; SQL-MM 3: 5.1.16 &Z_support; Examples --Get estimate of infected area based on point observations SELECT d.disease_type, ST_ConvexHull(ST_Collect(d.the_geom)) As the_geom FROM disease_obs As d GROUP BY d.disease_type; SELECT ST_AsText(ST_ConvexHull( ST_Collect( ST_GeomFromText('MULTILINESTRING((100 190,10 8),(150 10, 20 30))'), ST_GeomFromText('MULTIPOINT(50 5, 150 30, 50 10, 10 10)') )) ); ---st_astext-- POLYGON((50 5,10 8,10 10,100 190,150 30,150 10,50 5)) See Also , , ST_CurveToLine Converts a CIRCULARSTRING/CURVEDPOLYGON to a LINESTRING/POLYGON geometry ST_CurveToLine geometry curveGeom geometry ST_CurveToLine geometry curveGeom integer segments_per_qtr_circle Description Converst a CIRCULAR STRING to regular LINESTRING or CURVEPOLYGON to POLYGON. Useful for outputting to devices that can't support CIRCULARSTRING geometry types Converts a given geometry to a linear geometry. Each curved geometry or segment is converted into a linear approximation using the default value of 32 segments per quarter circle Availability: 1.2.2? &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 7.1.7 &Z_support; &curve_support; Examples SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'))); --Result -- LINESTRING(220268 150415,220269.95064912 150416.539364228,220271.823415575 150418.17258804,220273.613787707 150419.895736857, 220275.317452352 150421.704659462,220276.930305234 150423.594998003,220278.448460847 150425.562198489, 220279.868261823 150427.60152176,220281.186287736 150429.708054909,220282.399363347 150431.876723113, 220283.50456625 150434.10230186,220284.499233914 150436.379429536,220285.380970099 150438.702620341,220286.147650624 150441.066277505, 220286.797428488 150443.464706771,220287.328738321 150445.892130112,220287.740300149 150448.342699654, 220288.031122486 150450.810511759,220288.200504713 150453.289621251,220288.248038775 150455.77405574, 220288.173610157 150458.257830005,220287.977398166 150460.734960415,220287.659875492 150463.199479347, 220287.221807076 150465.64544956,220286.664248262 150468.066978495,220285.988542259 150470.458232479,220285.196316903 150472.81345077, 220284.289480732 150475.126959442,220283.270218395 150477.39318505,220282.140985384 150479.606668057, 220280.90450212 150481.762075989,220279.5637474 150483.85421628,220278.12195122 150485.87804878, 220276.582586992 150487.828697901,220274.949363179 150489.701464356,220273.226214362 150491.491836488, 220271.417291757 150493.195501133,220269.526953216 150494.808354014,220267.559752731 150496.326509628, 220265.520429459 150497.746310603,220263.41389631 150499.064336517,220261.245228106 150500.277412127, 220259.019649359 150501.38261503,220256.742521683 150502.377282695,220254.419330878 150503.259018879, 220252.055673714 150504.025699404,220249.657244448 150504.675477269,220247.229821107 150505.206787101, 220244.779251566 150505.61834893,220242.311439461 150505.909171266,220239.832329968 150506.078553494, 220237.347895479 150506.126087555,220234.864121215 150506.051658938,220232.386990804 150505.855446946, 220229.922471872 150505.537924272,220227.47650166 150505.099855856,220225.054972724 150504.542297043, 220222.663718741 150503.86659104,220220.308500449 150503.074365683, 220217.994991777 150502.167529512,220215.72876617 150501.148267175, 220213.515283163 150500.019034164,220211.35987523 150498.7825509, 220209.267734939 150497.441796181,220207.243902439 150496, 220205.293253319 150494.460635772,220203.420486864 150492.82741196,220201.630114732 150491.104263143, 220199.926450087 150489.295340538,220198.313597205 150487.405001997,220196.795441592 150485.437801511, 220195.375640616 150483.39847824,220194.057614703 150481.291945091,220192.844539092 150479.123276887,220191.739336189 150476.89769814, 220190.744668525 150474.620570464,220189.86293234 150472.297379659,220189.096251815 150469.933722495, 220188.446473951 150467.535293229,220187.915164118 150465.107869888,220187.50360229 150462.657300346, 220187.212779953 150460.189488241,220187.043397726 150457.710378749,220186.995863664 150455.22594426, 220187.070292282 150452.742169995,220187.266504273 150450.265039585,220187.584026947 150447.800520653, 220188.022095363 150445.35455044,220188.579654177 150442.933021505,220189.25536018 150440.541767521, 220190.047585536 150438.18654923,220190.954421707 150435.873040558,220191.973684044 150433.60681495, 220193.102917055 150431.393331943,220194.339400319 150429.237924011,220195.680155039 150427.14578372,220197.12195122 150425.12195122, 220198.661315447 150423.171302099,220200.29453926 150421.298535644,220202.017688077 150419.508163512,220203.826610682 150417.804498867, 220205.716949223 150416.191645986,220207.684149708 150414.673490372,220209.72347298 150413.253689397,220211.830006129 150411.935663483, 220213.998674333 150410.722587873,220216.22425308 150409.61738497,220218.501380756 150408.622717305,220220.824571561 150407.740981121, 220223.188228725 150406.974300596,220225.586657991 150406.324522731,220227 150406) --3d example SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'))); Output ------ LINESTRING(220268 150415 1,220269.95064912 150416.539364228 1.0181172856673, 220271.823415575 150418.17258804 1.03623457133459,220273.613787707 150419.895736857 1.05435185700189,....AD INFINITUM .... 220225.586657991 150406.324522731 1.32611114201132,220227 150406 3) --use only 2 segments to approximate quarter circle SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),2)); st_astext ------------------------------ LINESTRING(220268 150415,220287.740300149 150448.342699654,220278.12195122 150485.87804878, 220244.779251566 150505.61834893,220207.243902439 150496,220187.50360229 150462.657300346, 220197.12195122 150425.12195122,220227 150406) See Also ST_DelaunayTriangles Return a Delaunay triangulation around the given input points. geometry ST_DelaunayTriangles geometry g1 float tolerance int4 flags Description Return a Delaunay triangulation around the vertices of the input geometry. Output is a COLLECTION of polygons (for flags=0) or a MULTILINESTRING (for flags=1) or TIN (for flags=2). The tolerance, if any, is used to snap input vertices togheter. Availability: 2.1.0 - requires GEOS >= 3.4.0. &Z_support; &T_support; 2D Examples -- our original geometry -- ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ) -- geometries overlaid multilinestring triangles SELECT ST_DelaunayTriangles( ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) )) As dtriag; SELECT ST_DelaunayTriangles( ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ),0.001,1) As dtriag; -- this produces a table of 42 points that form an L shape SELECT (ST_DumpPoints(ST_GeomFromText( 'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14, 150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6, 14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130, 6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114, 14 94,14 74,14 54,14 34,14 14)'))).geom INTO TABLE l_shape; -- output as individual polygon triangles SELECT ST_AsText((ST_Dump(geom)).geom) As wkt FROM ( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geom FROM l_shape) As foo; ---wkt --- POLYGON((6 194,6 190,14 194,6 194)) POLYGON((14 194,6 190,14 174,14 194)) POLYGON((14 194,14 174,154 14,14 194)) POLYGON((154 14,14 174,14 154,154 14)) POLYGON((154 14,14 154,150 14,154 14)) POLYGON((154 14,150 14,154 6,154 14)) : : 3D Examples -- 3D multipoint -- SELECT ST_AsText(ST_DelaunayTriangles(ST_GeomFromText( 'MULTIPOINT Z(14 14 10, 150 14 100,34 6 25, 20 10 150)'))) As wkt; -----wkt---- GEOMETRYCOLLECTION Z (POLYGON Z ((14 14 10,20 10 150,34 6 25,14 14 10)) ,POLYGON Z ((14 14 10,34 6 25,150 14 100,14 14 10))) See Also , ST_Difference Returns a geometry that represents that part of geometry A that does not intersect with geometry B. geometry ST_Difference geometry geomA geometry geomB Description Returns a geometry that represents that part of geometry A that does not intersect with geometry B. One can think of this as GeometryA - ST_Intersection(A,B). If A is completely contained in B then an empty geometry collection is returned. Note - order matters. B - A will always return a portion of B Performed by the GEOS module Do not call with a GeometryCollection as an argument &sfs_compliant; s2.1.1.3 &sqlmm_compliant; SQL-MM 3: 5.1.20 &Z_support; However it seems to only consider x y when doing the difference and tacks back on the Z-Index Examples --Safe for 2d. This is same geometries as what is shown for st_symdifference SELECT ST_AsText( ST_Difference( ST_GeomFromText('LINESTRING(50 100, 50 200)'), ST_GeomFromText('LINESTRING(50 50, 50 150)') ) ); st_astext --------- LINESTRING(50 150,50 200) --When used in 3d doesn't quite do the right thing SELECT ST_AsEWKT(ST_Difference(ST_GeomFromEWKT('MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)'), ST_GeomFromEWKT('POINT(-118.614 38.281 5)'))); st_asewkt --------- MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5) See Also ST_Dump Returns a set of geometry_dump (geom,path) rows, that make up a geometry g1. geometry_dump[] ST_Dump geometry g1 Description This is a set-returning function (SRF). It returns a set of geometry_dump rows, formed by a geometry (geom) and an array of integers (path). When the input geometry is a simple type (POINT,LINESTRING,POLYGON) a single record will be returned with an empty path array and the input geometry as geom. When the input geometry is a collection or multi it will return a record for each of the collection components, and the path will express the position of the component inside the collection. ST_Dump is useful for expanding geometries. It is the reverse of a GROUP BY in that it creates new rows. For example it can be use to expand MULTIPOLYGONS into POLYGONS. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Availability: PostGIS 1.0.0RC1. Requires PostgreSQL 7.3 or higher. Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ &curve_support; &P_support; &T_support; &Z_support; Standard Examples SELECT sometable.field1, sometable.field1, (ST_Dump(sometable.the_geom)).geom AS the_geom FROM sometable; -- Break a compound curve into its constituent linestrings and circularstrings SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom) FROM ( SELECT (ST_Dump(p_geom)).geom AS geom FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') AS p_geom) AS b ) AS a; st_asewkt | st_hasarc -----------------------------+---------- CIRCULARSTRING(0 0,1 1,1 0) | t LINESTRING(1 0,0 1) | f (2 rows) Polyhedral Surfaces, TIN and Triangle Examples -- Polyhedral surface example -- Break a Polyhedral surface into its faces SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt FROM (SELECT ST_Dump(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') ) AS p_geom ) AS a; path | geom_ewkt ------+------------------------------------------ 1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)) 2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)) 3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)) 4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)) 5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)) 6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) -- TIN -- SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt FROM (SELECT ST_Dump( ST_GeomFromEWKT('TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )') ) AS gdump ) AS g; -- result -- path | wkt ------+------------------------------------- {1} | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0)) {2} | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0)) See Also , , , , ST_DumpPoints Returns a set of geometry_dump (geom,path) rows of all points that make up a geometry. geometry_dump[]ST_DumpPoints geometry geom Description This set-returning function (SRF) returns a set of geometry_dump rows formed by a geometry (geom) and an array of integers (path). The geom component of geometry_dump are all the POINTs that make up the supplied geometry The path component of geometry_dump (an integer[]) is an index reference enumerating the POINTs of the supplied geometry. For example, if a LINESTRING is supplied, a path of {i} is returned where i is the nth coordinate in the LINESTRING. If a POLYGON is supplied, a path of {i,j} is returned where i is the ring number (1 is outer; inner rings follow) and j enumerates the POINTs (again 1-based index). Enhanced: 2.1.0 Faster speed. Reimplemented as native-C. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Availability: 1.5.0 &curve_support; &P_support; &T_support; &Z_support; Classic Explode a Table of LineStrings into nodes SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode FROM (SELECT 1 As edge_id , ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dp UNION ALL SELECT 2 As edge_id , ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp ) As foo; edge_id | index | wktnode ---------+-------+-------------- 1 | 1 | POINT(1 2) 1 | 2 | POINT(3 4) 1 | 3 | POINT(10 10) 2 | 1 | POINT(3 5) 2 | 2 | POINT(5 6) 2 | 3 | POINT(9 10) Standard Geometry Examples SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'GEOMETRYCOLLECTION( POINT ( 0 1 ), LINESTRING ( 0 3, 3 4 ), POLYGON (( 2 0, 2 3, 0 2, 2 0 )), POLYGON (( 3 0, 3 3, 6 3, 6 0, 3 0 ), ( 5 1, 4 2, 5 2, 5 1 )), MULTIPOLYGON ( (( 0 5, 0 8, 4 8, 4 5, 0 5 ), ( 1 6, 3 6, 2 7, 1 6 )), (( 5 4, 5 8, 6 7, 5 4 )) ) )'::geometry AS geom ) AS g ) j; path | st_astext -----------+------------ {1,1} | POINT(0 1) {2,1} | POINT(0 3) {2,2} | POINT(3 4) {3,1,1} | POINT(2 0) {3,1,2} | POINT(2 3) {3,1,3} | POINT(0 2) {3,1,4} | POINT(2 0) {4,1,1} | POINT(3 0) {4,1,2} | POINT(3 3) {4,1,3} | POINT(6 3) {4,1,4} | POINT(6 0) {4,1,5} | POINT(3 0) {4,2,1} | POINT(5 1) {4,2,2} | POINT(4 2) {4,2,3} | POINT(5 2) {4,2,4} | POINT(5 1) {5,1,1,1} | POINT(0 5) {5,1,1,2} | POINT(0 8) {5,1,1,3} | POINT(4 8) {5,1,1,4} | POINT(4 5) {5,1,1,5} | POINT(0 5) {5,1,2,1} | POINT(1 6) {5,1,2,2} | POINT(3 6) {5,1,2,3} | POINT(2 7) {5,1,2,4} | POINT(1 6) {5,2,1,1} | POINT(5 4) {5,2,1,2} | POINT(5 8) {5,2,1,3} | POINT(6 7) {5,2,1,4} | POINT(5 4) (29 rows) Polyhedral Surfaces, TIN and Triangle Examples -- Polyhedral surface cube -- SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt FROM (SELECT ST_DumpPoints(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') ) AS gdump ) AS g; -- result -- path | wkt ---------+-------------- {1,1,1} | POINT(0 0 0) {1,1,2} | POINT(0 0 1) {1,1,3} | POINT(0 1 1) {1,1,4} | POINT(0 1 0) {1,1,5} | POINT(0 0 0) {2,1,1} | POINT(0 0 0) {2,1,2} | POINT(0 1 0) {2,1,3} | POINT(1 1 0) {2,1,4} | POINT(1 0 0) {2,1,5} | POINT(0 0 0) {3,1,1} | POINT(0 0 0) {3,1,2} | POINT(1 0 0) {3,1,3} | POINT(1 0 1) {3,1,4} | POINT(0 0 1) {3,1,5} | POINT(0 0 0) {4,1,1} | POINT(1 1 0) {4,1,2} | POINT(1 1 1) {4,1,3} | POINT(1 0 1) {4,1,4} | POINT(1 0 0) {4,1,5} | POINT(1 1 0) {5,1,1} | POINT(0 1 0) {5,1,2} | POINT(0 1 1) {5,1,3} | POINT(1 1 1) {5,1,4} | POINT(1 1 0) {5,1,5} | POINT(0 1 0) {6,1,1} | POINT(0 0 1) {6,1,2} | POINT(1 0 1) {6,1,3} | POINT(1 1 1) {6,1,4} | POINT(0 1 1) {6,1,5} | POINT(0 0 1) (30 rows) -- Triangle -- SELECT (g.gdump).path, ST_AsText((g.gdump).geom) as wkt FROM (SELECT ST_DumpPoints( ST_GeomFromEWKT('TRIANGLE (( 0 0, 0 9, 9 0, 0 0 ))') ) AS gdump ) AS g; -- result -- path | wkt ------+------------ {1} | POINT(0 0) {2} | POINT(0 9) {3} | POINT(9 0) {4} | POINT(0 0) -- TIN -- SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt FROM (SELECT ST_DumpPoints( ST_GeomFromEWKT('TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )') ) AS gdump ) AS g; -- result -- path | wkt ---------+-------------- {1,1,1} | POINT(0 0 0) {1,1,2} | POINT(0 0 1) {1,1,3} | POINT(0 1 0) {1,1,4} | POINT(0 0 0) {2,1,1} | POINT(0 0 0) {2,1,2} | POINT(0 1 0) {2,1,3} | POINT(1 1 0) {2,1,4} | POINT(0 0 0) (8 rows) See Also , , , ST_DumpRings Returns a set of geometry_dump rows, representing the exterior and interior rings of a polygon. geometry_dump[] ST_DumpRings geometry a_polygon Description This is a set-returning function (SRF). It returns a set of geometry_dump rows, defined as an integer[] and a geometry, aliased "path" and "geom" respectively. The "path" field holds the polygon ring index containing a single integer: 0 for the shell, >0 for holes. The "geom" field contains the corresponding ring as a polygon. Availability: PostGIS 1.1.3. Requires PostgreSQL 7.3 or higher. This only works for POLYGON geometries. It will not work for MULTIPOLYGONS &Z_support; Examples SELECT sometable.field1, sometable.field1, (ST_DumpRings(sometable.the_geom)).geom As the_geom FROM sometableOfpolys; SELECT ST_AsEWKT(geom) As the_geom, path FROM ST_DumpRings( ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1, -8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1, -8150305 5132788 1,-8149064 5133092 1), (-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))') ) as foo; path | the_geom ---------------------------------------------------------------------------------------------------------------- {0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1, | -8148941 5132466 1,-8148924 5132394 1, | -8148903 5132210 1,-8148930 5131967 1, | -8148992 5131978 1,-8149237 5132093 1, | -8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 1,-8149064 5133092 1)) {1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1, | -8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1)) See Also , , , , ST_FlipCoordinates Returns a version of the given geometry with X and Y axis flipped. Useful for people who have built latitude/longitude features and need to fix them. geometry ST_FlipCoordinates geometry geom Description Returns a version of the given geometry with X and Y axis flipped. &curve_support; &Z_support; &M_support; Availability: 2.0.0 &P_support; &T_support; Example ST_Intersection (T) Returns a geometry that represents the shared portion of geomA and geomB. The geography implementation does a transform to geometry to do the intersection and then transform back to WGS84. geometry ST_Intersection geometry geomA geometry geomB geography ST_Intersection geography geogA geography geogB Description Returns a geometry that represents the point set intersection of the Geometries. In other words - that portion of geometry A and geometry B that is shared between the two geometries. If the geometries do not share any space (are disjoint), then an empty geometry collection is returned. ST_Intersection in conjunction with ST_Intersects is very useful for clipping geometries such as in bounding box, buffer, region queries where you only want to return that portion of a geometry that sits in a country or region of interest. Geography: For geography this is really a thin wrapper around the geometry implementation. It first determines the best SRID that fits the bounding box of the 2 geography objects (if geography objects are within one half zone UTM but not same UTM will pick one of those) (favoring UTM or Lambert Azimuthal Equal Area (LAEA) north/south pole, and falling back on mercator in worst case scenario) and then intersection in that best fit planar spatial ref and retransforms back to WGS84 geography. Do not call with a GEOMETRYCOLLECTION as an argument Performed by the GEOS module &sfcgal_enhanced; Availability: 1.5 support for geography data type was introduced. &sfs_compliant; s2.1.1.3 &sqlmm_compliant; SQL-MM 3: 5.1.18 Examples SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry)); st_astext --------------- GEOMETRYCOLLECTION EMPTY (1 row) SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry)); st_astext --------------- POINT(0 0) (1 row) ---Clip all lines (trails) by country (here we assume country geom are POLYGON or MULTIPOLYGONS) -- NOTE: we are only keeping intersections that result in a LINESTRING or MULTILINESTRING because we don't -- care about trails that just share a point -- the dump is needed to expand a geometry collection into individual single MULT* parts -- the below is fairly generic and will work for polys, etc. by just changing the where clause SELECT clipped.gid, clipped.f_name, clipped_geom FROM (SELECT trails.gid, trails.f_name, (ST_Dump(ST_Intersection(country.the_geom, trails.the_geom))).geom As clipped_geom FROM country INNER JOIN trails ON ST_Intersects(country.the_geom, trails.the_geom)) As clipped WHERE ST_Dimension(clipped.clipped_geom) = 1 ; --For polys e.g. polygon landmarks, you can also use the sometimes faster hack that buffering anything by 0.0 -- except a polygon results in an empty geometry collection --(so a geometry collection containing polys, lines and points) -- buffered by 0.0 would only leave the polygons and dissolve the collection shell SELECT poly.gid, ST_Multi(ST_Buffer( ST_Intersection(country.the_geom, poly.the_geom), 0.0) ) As clipped_geom FROM country INNER JOIN poly ON ST_Intersects(country.the_geom, poly.the_geom) WHERE Not ST_IsEmpty(ST_Buffer(ST_Intersection(country.the_geom, poly.the_geom),0.0)); See Also , , , , , ST_LineToCurve Converts a LINESTRING/POLYGON to a CIRCULARSTRING, CURVED POLYGON geometry ST_LineToCurve geometry geomANoncircular Description Converts plain LINESTRING/POLYGONS to CIRCULAR STRINGs and Curved Polygons. Note much fewer points are needed to describe the curved equivalent. Availability: 1.2.2? &Z_support; &curve_support; Examples SELECT ST_AsText(ST_LineToCurve(foo.the_geom)) As curvedastext,ST_AsText(foo.the_geom) As non_curvedastext FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3) As the_geom) As foo; curvedatext non_curvedastext --------------------------------------------------------------------|----------------------------------------------------------------- CURVEPOLYGON(CIRCULARSTRING(4 3,3.12132034355964 0.878679656440359, | POLYGON((4 3,3.94235584120969 2.41472903395162,3.77163859753386 1.85194970290473, 1 0,-1.12132034355965 5.12132034355963,4 3)) | 3.49440883690764 1.33328930094119,3.12132034355964 0.878679656440359, | 2.66671069905881 0.505591163092366,2.14805029709527 0.228361402466141, | 1.58527096604839 0.0576441587903094,1 0, | 0.414729033951621 0.0576441587903077,-0.148050297095264 0.228361402466137, | -0.666710699058802 0.505591163092361,-1.12132034355964 0.878679656440353, | -1.49440883690763 1.33328930094119,-1.77163859753386 1.85194970290472 | --ETC-- ,3.94235584120969 3.58527096604839,4 3)) --3D example SELECT ST_AsEWKT(ST_LineToCurve(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 8, 5 6 4, 7 8 4, 9 10 4)'))); st_asewkt ------------------------------------ CIRCULARSTRING(1 2 3,5 6 4,9 10 4) See Also ST_MakeValid Attempts to make an invalid geometry valid without losing vertices. geometry ST_MakeValid geometry input Description The function attempts to create a valid representation of a given invalid geometry without losing any of the input vertices. Already-valid geometries are returned without further intervention. Supported inputs are: POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS and GEOMETRYCOLLECTIONS containing any mix of them. In case of full or partial dimensional collapses, the output geometry may be a collection of lower-to-equal dimension geometries or a geometry of lower dimension. Single polygons may become multi-geometries in case of self-intersections. Availability: 2.0.0, requires GEOS-3.3.0 Enhanced: 2.0.1, speed improvements requires GEOS-3.3.4 Enhanced: 2.1.0 added support for GEOMETRYCOLLECTION and MULTIPOINT. &Z_support; See Also ST_MemUnion Same as ST_Union, only memory-friendly (uses less memory and more processor time). geometry ST_MemUnion geometry set geomfield Description Some useful description here. Same as ST_Union, only memory-friendly (uses less memory and more processor time). This aggregate function works by unioning the geometries one at a time to previous result as opposed to ST_Union aggregate which first creates an array and then unions &Z_support; Examples See ST_Union See Also ST_MinimumBoundingCircle Returns the smallest circle polygon that can fully contain a geometry. Default uses 48 segments per quarter circle. geometry ST_MinimumBoundingCircle geometry geomA integer num_segs_per_qt_circ=48 Description Returns the smallest circle polygon that can fully contain a geometry. The circle is approximated by a polygon with a default of 48 segments per quarter circle. This number can be increased with little performance penalty to obtain a more accurate result. It is often used with MULTI and Geometry Collections. Although it is not an aggregate - you can use it in conjunction with ST_Collect to get the minimum bounding circle of a set of geometries. ST_MinimumBoundingCircle(ST_Collect(somepointfield)). The ratio of the area of a polygon divided by the area of its Minimum Bounding Circle is often referred to as the Roeck test. Availability: 1.4.0 - requires GEOS Examples SELECT d.disease_type, ST_MinimumBoundingCircle(ST_Collect(d.the_geom)) As the_geom FROM disease_obs As d GROUP BY d.disease_type; SELECT ST_AsText(ST_MinimumBoundingCircle( ST_Collect( ST_GeomFromEWKT('LINESTRING(55 75,125 150)'), ST_Point(20, 80)), 8 )) As wktmbc; wktmbc ----------- POLYGON((135.59714732062 115,134.384753327498 102.690357210921,130.79416296937 90.8537670908995,124.963360620072 79.9451031602111,117.116420743937 70.3835792560632,107.554896839789 62.5366393799277,96.6462329091006 56.70583703063,84.8096427890789 53.115246672502,72.5000000000001 51.9028526793802,60.1903572109213 53.1152466725019,48.3537670908996 56.7058370306299,37.4451031602112 62.5366393799276,27.8835792560632 70.383579256063,20.0366393799278 79.9451031602109,14.20583703063 90.8537670908993,10.615246672502 102.690357210921,9.40285267938019 115,10.6152466725019 127.309642789079,14.2058370306299 139.1462329091,20.0366393799275 150.054896839789,27.883579256063 159.616420743937, 37.4451031602108 167.463360620072,48.3537670908992 173.29416296937,60.190357210921 176.884753327498, 72.4999999999998 178.09714732062,84.8096427890786 176.884753327498,96.6462329091003 173.29416296937,107.554896839789 167.463360620072, 117.116420743937 159.616420743937,124.963360620072 150.054896839789,130.79416296937 139.146232909101,134.384753327498 127.309642789079,135.59714732062 115)) See Also , ST_Polygonize Aggregate. Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries. geometry ST_Polygonize geometry set geomfield geometry ST_Polygonize geometry[] geom_array Description Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries. Geometry Collections are often difficult to deal with with third party tools, so use ST_Polygonize in conjunction with to dump the polygons out into individual polygons. Input linework must be correctly noded for this function to work properly Availability: 1.0.0RC1 - requires GEOS >= 2.1.0. Examples: Polygonizing single linestrings SELECT ST_AsEWKT(ST_Polygonize(the_geom_4269)) As geomtextrep FROM (SELECT the_geom_4269 FROM ma.suffolk_edges ORDER BY tlid LIMIT 45) As foo; geomtextrep ------------------------------------- SRID=4269;GEOMETRYCOLLECTION(POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,-71.040878 42.285678)), POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358,-71.171794 42.354971,-71.170511 42.354855, -71.17112 42.354238,-71.17166 42.353675))) (1 row) --Use ST_Dump to dump out the polygonize geoms into individual polygons SELECT ST_AsEWKT((ST_Dump(foofoo.polycoll)).geom) As geomtextrep FROM (SELECT ST_Polygonize(the_geom_4269) As polycoll FROM (SELECT the_geom_4269 FROM ma.suffolk_edges ORDER BY tlid LIMIT 45) As foo) As foofoo; geomtextrep ------------------------ SRID=4269;POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752, -71.040878 42.285678)) SRID=4269;POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358 ,-71.171794 42.354971,-71.170511 42.354855,-71.17112 42.354238,-71.17166 42.353675)) (2 rows) See Also , ST_Node Node a set of linestrings. geometry ST_Node geometry geom Description Fully node a set of linestrings using the least possible number of nodes while preserving all of the input ones. &Z_support; Availability: 2.0.0 - requires GEOS >= 3.3.0. Due to a bug in GEOS up to 3.3.1 this function fails to node self-intersecting lines. This is fixed with GEOS 3.3.2 or higher. Examples SELECT ST_AsEWKT( ST_Node('LINESTRINGZ(0 0 0, 10 10 10, 0 10 5, 10 0 3)'::geometry) ) As output; output ----------- MULTILINESTRING((0 0 0,5 5 4.5),(5 5 4.5,10 10 10,0 10 5,5 5 4.5),(5 5 4.5,10 0 3)) See Also ST_OffsetCurve Return an offset line at a given distance and side from an input line. Useful for computing parallel lines about a center line geometry ST_OffsetCurve geometry line float signed_distance text style_parameters='' Description Return an offset line at a given distance and side from an input line. All points of the returned geometries are not further than the given distance from the input geometry. For positive distance the offset will be at the left side of the input line and retain the same direction. For a negative distance it'll be at the right side and in the opposite direction. Availability: 2.0 - requires GEOS >= 3.2, improved with GEOS >= 3.3 The optional third parameter allows specifying a list of blank-separated key=value pairs to tweak operations as follows: 'quad_segs=#' : number of segments used to approximate a quarter circle (defaults to 8). 'join=round|mitre|bevel' : join style (defaults to "round"). 'miter' is also accepted as a synonym for 'mitre'. 'mitre_limit=#.#' : mitre ratio limit (only affects mitred join style). 'miter_limit' is also accepted as a synonym for 'mitre_limit'. Units of distance are measured in units of the spatial reference system. The inputs can only be LINESTRINGS. Performed by the GEOS module. This function ignores the third dimension (z) and will always give a 2-d result even when presented with a 3d-geometry. Examples Compute an open buffer around roads SELECT ST_Union( ST_OffsetCurve(f.the_geom, f.width/2, 'quad_segs=4 join=round'), ST_OffsetCurve(f.the_geom, -f.width/2, 'quad_segs=4 join=round') ) as track FROM someroadstable; SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText( 'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16, 44 16,24 16,20 16,18 16,17 17, 16 18,16 20,16 40,16 60,16 80,16 100, 16 120,16 140,16 160,16 180,16 195)'), 15, 'quad_segs=4 join=round')); --output -- LINESTRING(164 1,18 1,12.2597485145237 2.1418070123307, 7.39339828220179 5.39339828220179, 5.39339828220179 7.39339828220179, 2.14180701233067 12.2597485145237,1 18,1 195) SELECT ST_AsText(ST_OffsetCurve(geom, -15, 'quad_segs=4 join=round')) As notsocurvy FROM ST_GeomFromText( 'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16, 44 16,24 16,20 16,18 16,17 17, 16 18,16 20,16 40,16 60,16 80,16 100, 16 120,16 140,16 160,16 180,16 195)') As geom; -- notsocurvy -- LINESTRING(31 195,31 31,164 31) SELECT ST_AsText(ST_OffsetCurve(ST_OffsetCurve(geom, -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')) As morecurvy FROM ST_GeomFromText( 'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16, 44 16,24 16,20 16,18 16,17 17, 16 18,16 20,16 40,16 60,16 80,16 100, 16 120,16 140,16 160,16 180,16 195)') As geom; -- morecurvy -- LINESTRING(164 31,46 31,40.2597485145236 32.1418070123307, 35.3933982822018 35.3933982822018, 32.1418070123307 40.2597485145237,31 46,31 195) SELECT ST_AsText(ST_Collect( ST_OffsetCurve(geom, 15, 'quad_segs=4 join=round'), ST_OffsetCurve(ST_OffsetCurve(geom, -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round') ) ) As parallel_curves FROM ST_GeomFromText( 'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16, 44 16,24 16,20 16,18 16,17 17, 16 18,16 20,16 40,16 60,16 80,16 100, 16 120,16 140,16 160,16 180,16 195)') As geom; -- parallel curves -- MULTILINESTRING((164 1,18 1,12.2597485145237 2.1418070123307, 7.39339828220179 5.39339828220179,5.39339828220179 7.39339828220179, 2.14180701233067 12.2597485145237,1 18,1 195), (164 31,46 31,40.2597485145236 32.1418070123307,35.3933982822018 35.3933982822018, 32.1418070123307 40.2597485145237,31 46,31 195)) SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText( 'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16, 44 16,24 16,20 16,18 16,17 17, 16 18,16 20,16 40,16 60,16 80,16 100, 16 120,16 140,16 160,16 180,16 195)'), 15, 'quad_segs=4 join=bevel')); -- output -- LINESTRING(164 1,18 1,7.39339828220179 5.39339828220179, 5.39339828220179 7.39339828220179,1 18,1 195) SELECT ST_AsText(ST_Collect( ST_OffsetCurve(geom, 15, 'quad_segs=4 join=mitre mitre_limit=2.2'), ST_OffsetCurve(geom, -15, 'quad_segs=4 join=mitre mitre_limit=2.2') ) ) FROM ST_GeomFromText( 'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16, 44 16,24 16,20 16,18 16,17 17, 16 18,16 20,16 40,16 60,16 80,16 100, 16 120,16 140,16 160,16 180,16 195)') As geom; -- output -- MULTILINESTRING((164 1,11.7867965644036 1,1 11.7867965644036,1 195), (31 195,31 31,164 31)) See Also ST_RemoveRepeatedPoints Returns a version of the given geometry with duplicated points removed. geometry ST_RemoveRepeatedPoints geometry geom Description Returns a version of the given geometry with duplicated points removed. Will actually do something only with (multi)lines, (multi)polygons and multipoints but you can safely call it with any kind of geometry. Since simplification occurs on a object-by-object basis you can also feed a GeometryCollection to this function. Availability: 2.0.0 &P_support; &Z_support; See Also ST_SharedPaths Returns a collection containing paths shared by the two input linestrings/multilinestrings. geometry ST_SharedPaths geometry lineal1 geometry lineal2 Description Returns a collection containing paths shared by the two input geometries. Those going in the same direction are in the first element of the collection, those going in the opposite direction are in the second element. The paths themselves are given in the direction of the first geometry. Availability: 2.0.0 requires GEOS >= 3.3.0. Examples: Finding shared paths SELECT ST_AsText( ST_SharedPaths( ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125), (51 150,101 150,76 175,51 150))'), ST_GeomFromText('LINESTRING(151 100,126 156.25,126 125,90 161, 76 175)') ) ) As wkt wkt ------------------------------------------------------------- GEOMETRYCOLLECTION(MULTILINESTRING((126 156.25,126 125), (101 150,90 161),(90 161,76 175)),MULTILINESTRING EMPTY) -- same example but linestring orientation flipped SELECT ST_AsText( ST_SharedPaths( ST_GeomFromText('LINESTRING(76 175,90 161,126 125,126 156.25,151 100)'), ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125), (51 150,101 150,76 175,51 150))') ) ) As wkt wkt ------------------------------------------------------------- GEOMETRYCOLLECTION(MULTILINESTRING EMPTY, MULTILINESTRING((76 175,90 161),(90 161,101 150),(126 125,126 156.25))) See Also , , ST_Shift_Longitude Reads every point/vertex in every component of every feature in a geometry, and if the longitude coordinate is <0, adds 360 to it. The result would be a 0-360 version of the data to be plotted in a 180 centric map geometry ST_Shift_Longitude geometry geomA Description Reads every point/vertex in every component of every feature in a geometry, and if the longitude coordinate is <0, adds 360 to it. The result would be a 0-360 version of the data to be plotted in a 180 centric map This is only useful for data in long lat e.g. 4326 (WGS 84 long lat) Pre-1.3.4 bug prevented this from working for MULTIPOINT. 1.3.4+ works with MULTIPOINT as well. &Z_support; Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced. &P_support; &T_support; Examples --3d points SELECT ST_AsEWKT(ST_Shift_Longitude(ST_GeomFromEWKT('SRID=4326;POINT(-118.58 38.38 10)'))) As geomA, ST_AsEWKT(ST_Shift_Longitude(ST_GeomFromEWKT('SRID=4326;POINT(241.42 38.38 10)'))) As geomb geomA geomB ---------- ----------- SRID=4326;POINT(241.42 38.38 10) SRID=4326;POINT(-118.58 38.38 10) --regular line string SELECT ST_AsText(ST_Shift_Longitude(ST_GeomFromText('LINESTRING(-118.58 38.38, -118.20 38.45)'))) st_astext ---------- LINESTRING(241.42 38.38,241.8 38.45) See Also , , ST_Simplify Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm. geometry ST_Simplify geometry geomA float tolerance Description Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm. Will actually do something only with (multi)lines and (multi)polygons but you can safely call it with any kind of geometry. Since simplification occurs on a object-by-object basis you can also feed a GeometryCollection to this function. Note that returned geometry might loose its simplicity (see ) Note topology may not be preserved and may result in invalid geometries. Use (see ) to preserve topology. Performed by the GEOS module. Availability: 1.2.2 Examples A circle simplified too much becomes a triangle, medium an octagon, SELECT ST_Npoints(the_geom) As np_before, ST_NPoints(ST_Simplify(the_geom,0.1)) As np01_notbadcircle, ST_NPoints(ST_Simplify(the_geom,0.5)) As np05_notquitecircle, ST_NPoints(ST_Simplify(the_geom,1)) As np1_octagon, ST_NPoints(ST_Simplify(the_geom,10)) As np10_triangle, (ST_Simplify(the_geom,100) is null) As np100_geometrygoesaway FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As the_geom) As foo; -result np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_triangle | np100_geometrygoesaway -----------+-------------------+---------------------+-------------+---------------+------------------------ 49 | 33 | 17 | 9 | 4 | t See Also , , Topology ST_SimplifyPreserveTopology Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm. Will avoid creating derived geometries (polygons in particular) that are invalid. geometry ST_SimplifyPreserveTopology geometry geomA float tolerance Description Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm. Will avoid creating derived geometries (polygons in particular) that are invalid. Will actually do something only with (multi)lines and (multi)polygons but you can safely call it with any kind of geometry. Since simplification occurs on a object-by-object basis you can also feed a GeometryCollection to this function. Performed by the GEOS module. Requires GEOS 3.0.0+ Availability: 1.3.3 Examples Same example as Simplify, but we see Preserve Topology prevents oversimplification. The circle can at most become a square. SELECT ST_Npoints(the_geom) As np_before, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,0.1)) As np01_notbadcircle, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,0.5)) As np05_notquitecircle, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,1)) As np1_octagon, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,10)) As np10_square, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,100)) As np100_stillsquare FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As the_geom) As foo; --result-- np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_square | np100_stillsquare -----------+-------------------+---------------------+-------------+---------------+------------------- 49 | 33 | 17 | 9 | 5 | 5 See Also ST_Split Returns a collection of geometries resulting by splitting a geometry. geometry ST_Split geometry input geometry blade Description The function supports splitting a line by point, a line by line, a polygon by line. The returned geometry is always a collection. Think of this function as the opposite of ST_Union. Theoretically applying ST_Union to the elements of the returned collection should always yield the original geometry. Availability: 2.0.0 To improve the robustness of ST_Split it may be convenient to the input to the blade in advance using a very low tolerance. Otherwise the internally used coordinate grid may cause tolerance problems, where coordinates of input and blade do not fall onto each other and the input is not being split correctly (see #2192). Examples Polygon Cut by Line -- this creates a geometry collection consisting of the 2 halves of the polygon -- this is similar to the example we demonstrated in ST_BuildArea SELECT ST_Split(circle, line) FROM (SELECT ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line, ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo; -- result -- GEOMETRYCOLLECTION(POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..), POLYGON(..))) -- To convert to individual polygons, you can use ST_Dump or ST_GeometryN SELECT ST_AsText((ST_Dump(ST_Split(circle, line))).geom) As wkt FROM (SELECT ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line, ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo; -- result -- wkt --------------- POLYGON((150 90,149.039264020162 80.2454838991936,..)) POLYGON((60.1371179574584 60.1371179574584,58.4265193848728 62.2214883490198,53.8060233744357 ..)) Multilinestring Cut by point SELECT ST_AsText(ST_Split(mline, pt)) As wktcut FROM (SELECT ST_GeomFromText('MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))') As mline, ST_Point(30,30) As pt) As foo; wktcut ------ GEOMETRYCOLLECTION( LINESTRING(10 10,30 30), LINESTRING(30 30,190 190), LINESTRING(15 15,30 30), LINESTRING(30 30,100 90) ) See Also , , , , ST_SymDifference Returns a geometry that represents the portions of A and B that do not intersect. It is called a symmetric difference because ST_SymDifference(A,B) = ST_SymDifference(B,A). geometry ST_SymDifference geometry geomA geometry geomB Description Returns a geometry that represents the portions of A and B that do not intersect. It is called a symmetric difference because ST_SymDifference(A,B) = ST_SymDifference(B,A). One can think of this as ST_Union(geomA,geomB) - ST_Intersection(A,B). Performed by the GEOS module Do not call with a GeometryCollection as an argument &sfs_compliant; s2.1.1.3 &sqlmm_compliant; SQL-MM 3: 5.1.21 &Z_support; However it seems to only consider x y when doing the difference and tacks back on the Z-Index Examples --Safe for 2d - symmetric difference of 2 linestrings SELECT ST_AsText( ST_SymDifference( ST_GeomFromText('LINESTRING(50 100, 50 200)'), ST_GeomFromText('LINESTRING(50 50, 50 150)') ) ); st_astext --------- MULTILINESTRING((50 150,50 200),(50 50,50 100)) --When used in 3d doesn't quite do the right thing SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 2)'), ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)'))) st_astext ------------ MULTILINESTRING((1 3 2.75,1 4 2),(1 1 3,1 2 2.25)) See Also , , ST_Union Returns a geometry that represents the point set union of the Geometries. geometry ST_Union geometry set g1field geometry ST_Union geometry g1 geometry g2 geometry ST_Union geometry[] g1_array Description Output type can be a MULTI*, single geometry, or Geometry Collection. Comes in 2 variants. Variant 1 unions 2 geometries resulting in a new geometry with no intersecting regions. Variant 2 is an aggregate function that takes a set of geometries and unions them into a single ST_Geometry resulting in no intersecting regions. Aggregate version: This function returns a MULTI geometry or NON-MULTI geometry from a set of geometries. The ST_Union() function is an "aggregate" function in the terminology of PostgreSQL. That means that it operates on rows of data, in the same way the SUM() and AVG() functions do and like most aggregates, it also ignores NULL geometries. Non-Aggregate version: This function returns a geometry being a union of two input geometries. Output type can be a MULTI*, NON-MULTI or GEOMETRYCOLLECTION. If any are NULL, then NULL is returned. ST_Collect and ST_Union are often interchangeable. ST_Union is in general orders of magnitude slower than ST_Collect because it tries to dissolve boundaries and reorder geometries to ensure that a constructed Multi* doesn't have intersecting regions. Performed by the GEOS module. NOTE: this function was formerly called GeomUnion(), which was renamed from "Union" because UNION is an SQL reserved word. Availability: 1.4.0 - ST_Union was enhanced. ST_Union(geomarray) was introduced and also faster aggregate collection in PostgreSQL. If you are using GEOS 3.1.0+ ST_Union will use the faster Cascaded Union algorithm described in http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html &sfs_compliant; s2.1.1.3 Aggregate version is not explicitly defined in OGC SPEC. &sqlmm_compliant; SQL-MM 3: 5.1.19 the z-index (elevation) when polygons are involved. Examples Aggregate example SELECT stusps, ST_Multi(ST_Union(f.the_geom)) as singlegeom FROM sometable As f GROUP BY stusps Non-Aggregate example SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(-2 3)') ) ) st_astext ---------- MULTIPOINT(-2 3,1 2) SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(1 2)') ) ); st_astext ---------- POINT(1 2) --3d example - sort of supports 3d (and with mixed dimensions!) SELECT ST_AsEWKT(st_union(the_geom)) FROM (SELECT ST_GeomFromEWKT('POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3, -7 4.2))') as the_geom UNION ALL SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom UNION ALL SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom UNION ALL SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_geom ) as foo; st_asewkt --------- GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5))); --3d example not mixing dimensions SELECT ST_AsEWKT(st_union(the_geom)) FROM (SELECT ST_GeomFromEWKT('POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2, -7 4.2 2))') as the_geom UNION ALL SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom UNION ALL SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom UNION ALL SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_geom ) as foo; st_asewkt --------- GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2))) --Examples using new Array construct SELECT ST_Union(ARRAY(SELECT the_geom FROM sometable)); SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'), ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion; --wktunion--- MULTILINESTRING((3 4,4 5),(1 2,3 4)) See Also ST_UnaryUnion Like ST_Union, but working at the geometry component level. geometry ST_UnaryUnion geometry geom Description Unlike ST_Union, ST_UnaryUnion does dissolve boundaries between components of a multipolygon (invalid) and does perform union between the components of a geometrycollection. Each components of the input geometry is assumed to be valid, so you won't get a valid multipolygon out of a bow-tie polygon (invalid). You may use this function to node a set of linestrings. You may mix ST_UnaryUnion with ST_Collect to fine-tune how many geometries at once you want to dissolve to be nice on both memory size and CPU time, finding the balance between ST_Union and ST_MemUnion. &Z_support; Availability: 2.0.0 - requires GEOS >= 3.3.0. See Also postgis-2.1.2+dfsg.orig/doc/xsl/0000755000000000000000000000000012317530606015136 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/xsl/tiger_geocoder_cheatsheet.html.xsl0000644000000000000000000002337612105355715024023 0ustar rootroot 2.1 Availability: Enhanced: true true http://postgis.net/docs/manual-dev/ PostGIS ]]></xsl:text> <xsl:value-of select="$postgis_version" /> Tiger Geocoder Cheat Sheet <xsl:text><![CDATA[

PostGIS ]]> ]]> New in this release 1 Enhanced in this release2]]> ]]> ]]> ]]> ]]>

]]> class="evenrowoddrow" ]]> ]]> ]]> class="evenrowoddrow"]]> ]]>
]]>]]> ]]> ]]> , postgis-2.1.2+dfsg.orig/doc/xsl/topology_gardentest.sql.xsl0000644000000000000000000010465512141211416022561 0ustar rootroot 2.0.0 AddTopoGeometryColumn DropTopoGeometryColumn CreateTopology 3395 1 3 5 0.5 0.75 100 1 2 XDR 'monkey' 'test' 'SPHEROID["GRS_1980",6378137,298.257222101]' 'FF1FF0102' false postgis_topology_garden_log21 UPDATE SET log_end = clock_timestamp() FROM (SELECT logid FROM ORDER BY logid DESC limit 1) As foo WHERE .logid = foo.logid AND .log_end IS NULL; INSERT INTO _output(logid, log_output) SELECT logid, query_to_xml(log_sql, false,false,'') As log_output FROM ORDER BY logid DESC LIMIT 1; (SELECT ST_SetSRID(ST_Point(i,j),4326) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) j ORDER BY i,j ) (SELECT ST_MakeLine(ST_SetSRID(ST_Point(i,j),4326),ST_SetSRID(ST_Point(j,i),4326)) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) As j WHERE NOT(i = j) ORDER BY i, i*j) (SELECT ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j*0.05) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, i*j, j) (SELECT ST_SetSRID(ST_MakePointM(i,j,m),4326) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(50,70, 20) AS j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, i*j*m) (SELECT ST_MakeLine(ST_SetSRID(ST_MakePointM(i,j,m),4326),ST_SetSRID(ST_MakePointM(j,i,m),4326)) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m WHERE NOT(i = j) ORDER BY i, j, m, i*j*m) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2503 1,-71.132 42.2502 3,-71.1323 42.2504 -2,-71.1322 42.2505 1,-71.1319 42.2503 0))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2512 0,-71.1318 42.2511 20,-71.1317 42.2511 -20,-71.1317 42.251 5,-71.1317 42.2509 4,-71.132 42.2511 6,-71.1319 42.2512 30))') ) ) As g(geom)) (SELECT ST_SetSRID(ST_MakePoint(i,j,k),4326) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 20) j CROSS JOIN generate_series(1,2) k ORDER BY i,i*j, j*k, i + j + k) (SELECT ST_SetSRID(ST_MakeLine(ST_MakePoint(i,j,k), ST_MakePoint(i+k,j+k,k)),4326) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 20) j CROSS JOIN generate_series(1,2) k ORDER BY i, j, i+j+k, k, i*j*k) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0771 42.3866 1,-71.0767 42.3872 1,-71.0767 42.3863 1,-71.0771 42.3866 1))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0775 42.386 2,-71.0773 42.3863 1.75,-71.0773 42.3859 1.75,-71.0775 42.386 2))') ) ) As g(geom)) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0771 42.3866 1 2,-71.0767 42.3872 1 2.3,-71.0767 42.3863 1 2.3,-71.0771 42.3866 1 2))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0775 42.386 2 1.5,-71.0773 42.3863 1.75 1.5,-71.0773 42.3859 1.75 1.5,-71.0775 42.386 2 1.5))') ) ) As g(geom)) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_SetSRID(ST_Point(i,j),4326) As the_geom FROM generate_series(-10,50,15) As i CROSS JOIN generate_series(40,70, 15) j ) As s) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_MakeLine(ST_SetSRID(ST_Point(i,j),4326),ST_SetSRID(ST_Point(j,i),4326)) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 15) As j WHERE NOT(i = j)) As s) (SELECT ST_Multi(ST_Union(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j*0.05))) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 25) As j) (SELECT ST_Collect(ST_SetSRID(ST_MakePoint(i,j,k),4326)) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 25) j CROSS JOIN generate_series(1,3) k ) (SELECT ST_Multi(ST_Union(ST_SetSRID(ST_MakeLine(ST_MakePoint(i,j,k), ST_MakePoint(i+k,j+k,k)),4326))) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 25) j CROSS JOIN generate_series(1,2) k ) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;MULTIPOLYGON(((-71.0821 42.3036 2,-71.0822 42.3036 2,-71.082 42.3038 2,-71.0819 42.3037 2,-71.0821 42.3036 2)))') ), ( ST_GeomFromEWKT('SRID=4326;MULTIPOLYGON(((-71.1261 42.2703 1,-71.1257 42.2703 1,-71.1257 42.2701 1,-71.126 42.2701 1,-71.1261 42.2702 1,-71.1261 42.2703 1)))') ) ) As g(geom)) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_SetSRID(ST_MakePointM(i - 0.0821,j + 0.3036,m),4326) As the_geom FROM generate_series(-71,50,15) As i CROSS JOIN generate_series(42,70, 25) AS j CROSS JOIN generate_series(1,2) As m ) As s) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_MakeLine(ST_SetSRID(ST_MakePointM(i - 0.0821,j + 0.3036,m),4326),ST_SetSRID(ST_MakePointM(j,i,m),4326)) As the_geom FROM generate_series(-71,50,15) As i CROSS JOIN generate_series(50,70, 25) As j CROSS JOIN generate_series(1,2) As m WHERE NOT(i = j)) As s) ( SELECT ST_GeomFromEWKT('SRID=4326;MULTIPOLYGONM(((0 0 2,10 0 1,10 10 -2,0 10 -5,0 0 -5),(5 5 6,7 5 6,7 7 6,5 7 10,5 5 -2)))') As the_geom ) DROP TABLE IF EXISTS ; CREATE TABLE (logid serial PRIMARY KEY, log_label text, spatial_class text, func text, g1 text, g2 text, log_start timestamp, log_end timestamp, log_sql text); DROP TABLE IF EXISTS _output; CREATE TABLE _output(logid integer PRIMARY KEY, log_output xml); table Test SELECT ': Start Testing'; CREATE TABLE pgis_garden (gid serial); SELECT AddGeometryColumn('pgis_garden','the_geom',ST_SRID(the_geom),GeometryType(the_geom),ST_CoordDim(the_geom)) FROM () As foo limit 1; SELECT AddGeometryColumn('pgis_garden','the_geom_multi',ST_SRID(the_geom),GeometryType(ST_Multi(the_geom)),ST_CoordDim(the_geom)) FROM () As foo limit 1; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' AddGeometryColumn','AddGeometryColumn', '', clock_timestamp(), ''); BEGIN; COMMIT; SELECT ' Geometry index: Start Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' gist index Geometry','CREATE gist index geometry', '', clock_timestamp()); BEGIN; CREATE INDEX idx_pgis_geom_gist ON pgis_garden USING gist(the_geom); COMMIT; SELECT ' geometry index: End Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' insert data Geometry','insert data', '', clock_timestamp()); BEGIN; INSERT INTO pgis_garden(the_geom, the_geom_multi) SELECT the_geom, ST_Multi(the_geom) FROM () As foo; COMMIT; INSERT INTO (log_label, func, g1, log_start) VALUES(' UpdateGeometrySRID','UpdateGeometrySRID', '', clock_timestamp()); BEGIN; SELECT UpdateGeometrySRID('pgis_garden', 'the_geom', 4269); COMMIT; INSERT INTO (log_label, func, g1, log_start) VALUES(' vacuum analyze Geometry','vacuum analyze Geometry', '', clock_timestamp()); VACUUM ANALYZE pgis_garden; INSERT INTO (log_label, func, g1, log_start) VALUES(' DropGeometryColumn','DropGeometryColumn', '', clock_timestamp()); BEGIN; SELECT DropGeometryColumn ('pgis_garden','the_geom'); COMMIT; INSERT INTO (log_label, func, g1, log_start) VALUES(' DropGeometryTable','DropGeometryTable', '', clock_timestamp()); BEGIN; SELECT DropGeometryTable ('pgis_garden'); COMMIT; SELECT ': End Testing '; SELECT ' Geography: Start Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' Create Table / Add data - Geography','CREATE TABLE geography', '', clock_timestamp()); BEGIN; CREATE TABLE pgis_geoggarden (gid serial PRIMARY KEY, the_geog geography(, 4326)); INSERT INTO pgis_geoggarden(the_geog) SELECT the_geom FROM () As foo; COMMIT; SELECT ' Geography: End Testing '; SELECT ' Geography index: Start Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' gist index Geography','CREATE gist index geography', '', clock_timestamp()); BEGIN; CREATE INDEX idx_pgis_geoggarden_geog_gist ON pgis_geoggarden USING gist(the_geog); COMMIT; SELECT ' Geography index: End Testing '; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' vacuum analyze Geography','analyze geography table', '', clock_timestamp(), 'VACUUM ANALYZE pgis_geoggarden;'); VACUUM ANALYZE pgis_geoggarden; INSERT INTO (log_label, func, g1, log_start) VALUES(' drop Geography table','drop geography table', '', clock_timestamp()); BEGIN; SELECT 'BEFORE DROP' As look_at, * FROM geography_columns; DROP TABLE pgis_geoggarden; SELECT 'AFTER DROP' As look_at, * FROM geography_columns; COMMIT; SELECT ' Geography: End Testing'; against other types SELECT ': Start Testing '; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' Geography ','', '','', clock_timestamp(), ' SELECT ST_AsEWKT(foo1.the_geom) as ewktgeog1, ST_AsEWKT(foo2.the_geom) as ewktgeog2, geography(foo1.the_geom) geography(foo2.the_geom) As geog1_op_geog2 FROM () As foo1 CROSS JOIN () As foo2 WHERE (geography(foo1.the_geom) geography(foo2.the_geom)) = true OR (geography(foo1.the_geom) geography(foo2.the_geom)) = false; '); SELECT 'Geography : Start Testing , '; BEGIN; COMMIT; SELECT 'Geometry : Start Testing , '; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' Geometry ','', '','', clock_timestamp(), ' SELECT ST_AsEWKT(foo1.the_geom) as ewktgeom1, ST_AsEWKT(foo2.the_geom) as ewktgeom2, foo1.the_geom foo2.the_geom As geom1_op_geom2 FROM () As foo1 CROSS JOIN () As foo2 WHERE (foo1.the_geom foo2.the_geom) = true OR (foo1.the_geom foo2.the_geom) = false;'); BEGIN; COMMIT; SELECT ' : End Testing against other types'; () SELECT 'Starting ()'; INSERT INTO (log_label, func, log_start, log_sql) VALUES(' ','', clock_timestamp(), ' SELECT () As output;'); BEGIN; COMMIT; SELECT 'Ending ()'; SELECT ' : Start Testing'; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' ','', '', clock_timestamp(), ' SELECT () As result FROM () As foo1 LIMIT 3;'); BEGIN; COMMIT; SELECT ' : End Testing'; SELECT ' (): Start Testing against other types'; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' ','','', '', clock_timestamp(), ' SELECT () As result, ST_AsText(foo1.the_geom) As ref1_geom, ST_AsText(foo2.the_geom) As ref2_geom FROM () As foo1 CROSS JOIN () As foo2 LIMIT 2;'); BEGIN; COMMIT; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' Other ','', '','', clock_timestamp(), ' SELECT ()'); SELECT 'Other (): Start Testing , '; BEGIN; COMMIT; SELECT '() : End Testing , '; SELECT ' (): End Testing against other types'; UPDATE SET spatial_class = 'geography' WHERE (log_label ILIKE '%geography%' or log_sql ILIKE '%geography%') AND spatial_class IS NULL; UPDATE SET spatial_class = 'geometry' WHERE log_label ILIKE '%geometry%' or log_label ILIKE '%other%' AND spatial_class IS NULL; '' ST_AsGML(foo1.the_geom) ST_AsKML(foo1.the_geom) foo1.the_geom geography(foo1.the_geom) foo2.the_geom geography(foo2.the_geom) ARRAY[foo1.the_geom] ARRAY[foo2.the_geom] ST_AsEWKT(foo1.the_geom) ST_AsText(foo1.the_geom) ST_AsEWKB(foo1.the_geom) ST_AsBinary(foo1.the_geom) '2009-01-01' , , ' '' postgis-2.1.2+dfsg.orig/doc/xsl/postgis_gardentest.sql.xsl0000644000000000000000000012476412141211416022400 0ustar rootroot 2.1.0 AddGeometryColumn DropGeometryColumn DropGeometryTable AddGeometryColumn DropGeometryColumn DropGeometryTable 3395 1 3 5 0.5 0.75 100 1 2 1 XDR 'monkey' 'quad_segs=1 endcap=square join=mitre mitre_limit=1.1' 'test' 'SPHEROID["GRS_1980",6378137,298.257222101]' 'FF1FF0102' false postgis_garden_log21 UPDATE SET log_end = clock_timestamp() FROM (SELECT logid FROM ORDER BY logid DESC limit 1) As foo WHERE .logid = foo.logid AND .log_end IS NULL; INSERT INTO _output(logid, log_output) SELECT logid, query_to_xml(log_sql, false,false,'') As log_output FROM ORDER BY logid DESC LIMIT 1; (SELECT ST_SetSRID(ST_Point(i,j),4326) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,2) As a) As i(i) CROSS JOIN generate_series(40,70, 5) j ORDER BY i,j ) (SELECT ST_MakeLine(ST_SetSRID(ST_Point(i,j),4326),ST_SetSRID(ST_Point(j,i),4326)) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) As j WHERE NOT(i = j) ORDER BY i, i*j) (SELECT ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j*0.05) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, i*j, j) (SELECT ST_SetSRID(ST_MakePointM(i,j,m),4326) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(50,70, 20) AS j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, i*j*m) (SELECT ST_MakeLine(ST_SetSRID(ST_MakePointM(i,j,m),4326),ST_SetSRID(ST_MakePointM(j,i,m),4326)) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m WHERE NOT(i = j) ORDER BY i, j, m, i*j*m) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2503 1,-71.132 42.2502 3,-71.1323 42.2504 -2,-71.1322 42.2505 1,-71.1319 42.2503 0))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2512 0,-71.1318 42.2511 20,-71.1317 42.2511 -20,-71.1317 42.251 5,-71.1317 42.2509 4,-71.132 42.2511 6,-71.1319 42.2512 30))') ) ) As g(geom)) (SELECT ST_SetSRID(ST_MakePoint(i,j,k),4326) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 20) j CROSS JOIN generate_series(1,2) k ORDER BY i,i*j, j*k, i + j + k) (SELECT ST_SetSRID(ST_MakeLine(ST_MakePoint(i,j,k), ST_MakePoint(i+k,j+k,k)),4326) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 20) j CROSS JOIN generate_series(1,2) k ORDER BY i, j, i+j+k, k, i*j*k) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0771 42.3866 1,-71.0767 42.3872 1,-71.0767 42.3863 1,-71.0771 42.3866 1))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0775 42.386 2,-71.0773 42.3863 1.75,-71.0773 42.3859 1.75,-71.0775 42.386 2))') ) ) As g(geom)) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0771 42.3866 1 2,-71.0767 42.3872 1 2.3,-71.0767 42.3863 1 2.3,-71.0771 42.3866 1 2))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.0775 42.386 2 1.5,-71.0773 42.3863 1.75 1.5,-71.0773 42.3859 1.75 1.5,-71.0775 42.386 2 1.5))') ) ) As g(geom)) (SELECT ST_Translate(the_geom,-72.2, 41.755) As the_geom FROM (VALUES ( ST_GeomFromEWKT( 'SRID=4326;PolyhedralSurface( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') ) , ( ST_GeomFromEWKT( 'SRID=4326;PolyhedralSurface( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)) )') ) ) As foo(the_geom) ) (SELECT ST_GeomFromEWKT( 'SRID=4326;TRIANGLE (( -71.0821 42.3036, -71.0821 42.3936, -71.0901 42.3036, -71.0821 42.3036 ))') As the_geom) (SELECT ST_GeomFromEWKT( 'SRID=4326;TIN ((( -71.0821 42.3036 0, -71.0821 42.3036 1, -71.0821 42.3436 0, -71.0821 42.3036 0 )), (( -71.0821 42.3036 0, -71.0821 42.3436 0, -71.0831 42.3436 0, -71.0821 42.3036 0 )) )') As the_geom) (SELECT ST_Collect(geom) As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;MULTIPOLYGON(((-71.0821 42.3036 2,-71.0822 42.3036 2,-71.082 42.3038 2,-71.0819 42.3037 2,-71.0821 42.3036 2)))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGON((-71.1261 42.2703 1,-71.1257 42.2703 1,-71.1257 42.2701 1,-71.126 42.2701 1,-71.1261 42.2702 1,-71.1261 42.2703 1))') ) ) As g(geom) CROSS JOIN generate_series(1,3) As i GROUP BY i ) (SELECT ST_Collect(geom) As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;MULTIPOLYGONM(((-71.0821 42.3036 2,-71.0822 42.3036 3,-71.082 42.3038 2,-71.0819 42.3037 2,-71.0821 42.3036 2)))') ), ( ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1261 42.2703 1,-71.1257 42.2703 1,-71.1257 42.2701 2,-71.126 42.2701 1,-71.1261 42.2702 1,-71.1261 42.2703 1))') ) ) As g(geom) CROSS JOIN generate_series(1,3) As i GROUP BY i ) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_SetSRID(ST_Point(i,j),4326) As the_geom FROM generate_series(-10,50,15) As i CROSS JOIN generate_series(40,70, 15) j ) As s) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_MakeLine(ST_SetSRID(ST_Point(i,j),4326),ST_SetSRID(ST_Point(j,i),4326)) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 15) As j WHERE NOT(i = j)) As s) (SELECT ST_Multi(ST_Union(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j*0.05))) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 25) As j) (SELECT ST_Collect(ST_SetSRID(ST_MakePoint(i,j,k),4326)) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 25) j CROSS JOIN generate_series(1,3) k ) (SELECT ST_Multi(ST_Union(ST_SetSRID(ST_MakeLine(ST_MakePoint(i,j,k), ST_MakePoint(i+k,j+k,k)),4326))) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(40,70, 25) j CROSS JOIN generate_series(1,2) k ) (SELECT geom As the_geom FROM (VALUES ( ST_GeomFromEWKT('SRID=4326;MULTIPOLYGON(((-71.0821 42.3036 2,-71.0822 42.3036 2,-71.082 42.3038 2,-71.0819 42.3037 2,-71.0821 42.3036 2)))') ), ( ST_GeomFromEWKT('SRID=4326;MULTIPOLYGON(((-71.1261 42.2703 1,-71.1257 42.2703 1,-71.1257 42.2701 1,-71.126 42.2701 1,-71.1261 42.2702 1,-71.1261 42.2703 1)))') ) ) As g(geom)) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_SetSRID(ST_MakePointM(i - 0.0821,j + 0.3036,m),4326) As the_geom FROM generate_series(-71,50,15) As i CROSS JOIN generate_series(42,70, 25) AS j CROSS JOIN generate_series(1,2) As m ) As s) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_MakeLine(ST_SetSRID(ST_MakePointM(i - 0.0821,j + 0.3036,m),4326),ST_SetSRID(ST_MakePointM(j,i,m),4326)) As the_geom FROM generate_series(-71,50,15) As i CROSS JOIN generate_series(50,70, 25) As j CROSS JOIN generate_series(1,2) As m WHERE NOT(i = j)) As s) ( SELECT ST_GeomFromEWKT('SRID=4326;MULTIPOLYGONM(((0 0 2,10 0 1,10 10 -2,0 10 -5,0 0 -5),(5 5 6,7 5 6,7 7 6,5 7 10,5 5 -2)))') As the_geom ) (SELECT ST_GeomFromEWKT('SRID=4326;CURVEPOLYGON(CIRCULARSTRING(-71.0821 42.3036, -71.4821 42.3036, -71.7821 42.7036, -71.0821 42.7036, -71.0821 42.3036),(-71.1821 42.4036, -71.3821 42.6036, -71.3821 42.4036, -71.1821 42.4036) ) ') As the_geom) (SELECT ST_LineToCurve(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j)) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, j, i*j) (SELECT ST_GeomFromEWKT('SRID=4326;CIRCULARSTRING(-71.0821 42.3036,-71.4821 42.3036,-71.7821 42.7036,-71.0821 42.7036,-71.0821 42.3036)') As the_geom) (SELECT ST_GeomFromEWKT('SRID=4326;MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-71.0821 42.3036, -71.4821 42.3036, -71.7821 42.7036, -71.0821 42.7036, -71.0821 42.3036),(-71.1821 42.4036, -71.3821 42.6036, -71.3821 42.4036, -71.1821 42.4036) ))') As the_geom) (SELECT ST_GeomFromText('POINT EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTIPOINT EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTIPOLYGON EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('LINESTRING EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTILINESTRING EMPTY',4326) As the_geom ) (SELECT ST_GeomFromText('GEOMETRYCOLLECTION EMPTY',4326) As the_geom ) (SELECT CAST(Null As geometry) As the_geom) (SELECT CAST(Null As geometry) As the_geom FROM generate_series(1,4) As foo) (SELECT ST_LineToCurve(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j)) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, j, i*j) (SELECT ST_LineToCurve(ST_Boundary(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j))) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, j, i*j) (SELECT ST_Collect(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY',4326), ST_GeomFromText('POLYGON EMPTY',4326)) As the_geom UNION ALL SELECT ST_COLLECT(ST_GeomFromText('POLYGON EMPTY',4326),ST_GeomFromText('TRIANGLE EMPTY',4326)) As the_geom UNION ALL SELECT ST_Collect(ST_GeomFromText('POINT EMPTY',4326), ST_GeomFromText('MULTIPOINT EMPTY',4326)) As the_geom ) (SELECT ST_GeomFromText('POLYGON EMPTY',4326) As the_geom) DROP TABLE IF EXISTS ; CREATE TABLE (logid serial PRIMARY KEY, log_label text, spatial_class text, func text, g1 text, g2 text, log_start timestamp, log_end timestamp, log_sql text); DROP TABLE IF EXISTS _output; CREATE TABLE _output(logid integer PRIMARY KEY, log_output xml); table Test SELECT ': Start Testing'; CREATE TABLE pgis_garden (gid serial); SELECT AddGeometryColumn('pgis_garden','the_geom',ST_SRID(the_geom),GeometryType(the_geom),ST_CoordDim(the_geom)) FROM () As foo limit 1; SELECT AddGeometryColumn('pgis_garden','the_geom_multi',ST_SRID(the_geom),GeometryType(ST_Multi(the_geom)),ST_CoordDim(the_geom)) FROM () As foo limit 1; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' AddGeometryColumn','AddGeometryColumn', '', clock_timestamp(), ''); BEGIN; COMMIT; SELECT ' Geometry index: Start Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' gist index Geometry','CREATE gist index geometry', '', clock_timestamp()); BEGIN; CREATE INDEX idx_pgis_geom_gist ON pgis_garden USING gist(the_geom); COMMIT; SELECT ' geometry index: End Testing '; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' insert data Geometry','insert data', '', clock_timestamp(), ' INSERT INTO pgis_garden(the_geom, the_geom_multi) SELECT the_geom, ST_Multi(the_geom) FROM () As foo;'); BEGIN; INSERT INTO pgis_garden(the_geom, the_geom_multi) SELECT the_geom, ST_Multi(the_geom) FROM () As foo; COMMIT; SELECT ' Geometry index overlaps: Start Testing '; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' gist index Geometry overlaps test','Gist index overlap', '', clock_timestamp(), 'SELECT count(*) As result FROM pgis_garden As foo1 INNER JOIN pgis_garden As foo2 ON foo1.the_geom && foo2.the_geom'); BEGIN; COMMIT; SELECT ' geometry index overlaps: End Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' UpdateGeometrySRID','UpdateGeometrySRID', '', clock_timestamp()); BEGIN; SELECT UpdateGeometrySRID('pgis_garden', 'the_geom', 4269); COMMIT; INSERT INTO (log_label, func, g1, log_start) VALUES(' vacuum analyze Geometry','vacuum analyze Geometry', '', clock_timestamp()); VACUUM ANALYZE pgis_garden; INSERT INTO (log_label, func, g1, log_start) VALUES(' DropGeometryColumn','DropGeometryColumn', '', clock_timestamp()); BEGIN; SELECT DropGeometryColumn ('pgis_garden','the_geom'); COMMIT; INSERT INTO (log_label, func, g1, log_start) VALUES(' DropGeometryTable','DropGeometryTable', '', clock_timestamp()); BEGIN; SELECT DropGeometryTable ('pgis_garden'); COMMIT; SELECT ': End Testing '; SELECT ' Geography: Start Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' Create Table / Add data - Geography','CREATE TABLE geography', '', clock_timestamp()); BEGIN; CREATE TABLE pgis_geoggarden (gid serial PRIMARY KEY, the_geog geography(, 4326)); INSERT INTO pgis_geoggarden(the_geog) SELECT the_geom FROM () As foo; COMMIT; SELECT ' Geography: End Testing '; SELECT ' Geography index: Start Testing '; INSERT INTO (log_label, func, g1, log_start) VALUES(' gist index Geography','CREATE gist index geography', '', clock_timestamp()); BEGIN; CREATE INDEX idx_pgis_geoggarden_geog_gist ON pgis_geoggarden USING gist(the_geog); COMMIT; SELECT ' Geography index: End Testing '; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' vacuum analyze Geography','analyze geography table', '', clock_timestamp(), 'VACUUM ANALYZE pgis_geoggarden;'); VACUUM ANALYZE pgis_geoggarden; INSERT INTO (log_label, func, g1, log_start) VALUES(' drop Geography table','drop geography table', '', clock_timestamp()); BEGIN; SELECT 'BEFORE DROP' As look_at, * FROM geography_columns; DROP TABLE pgis_geoggarden; SELECT 'AFTER DROP' As look_at, * FROM geography_columns; COMMIT; SELECT ' Geography: End Testing'; against other types SELECT ': Start Testing '; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' Geography ','', '','', clock_timestamp(), ' SELECT ST_AsEWKT(foo1.the_geom) as ewktgeog1, ST_AsEWKT(foo2.the_geom) as ewktgeog2, geography(foo1.the_geom) geography(foo2.the_geom) As geog1_op_geog2 FROM () As foo1 CROSS JOIN () As foo2 WHERE (geography(foo1.the_geom) geography(foo2.the_geom)) = true OR (geography(foo1.the_geom) geography(foo2.the_geom)) = false; '); SELECT 'Geography : Start Testing , '; BEGIN; COMMIT; SELECT 'Geometry : Start Testing , '; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' Geometry ','', '','', clock_timestamp(), ' SELECT ST_AsEWKT(foo1.the_geom) as ewktgeom1, ST_AsEWKT(foo2.the_geom) as ewktgeom2, foo1.the_geom foo2.the_geom As geom1_op_geom2 FROM () As foo1 CROSS JOIN () As foo2 WHERE (foo1.the_geom foo2.the_geom) = true OR (foo1.the_geom foo2.the_geom) = false;'); BEGIN; COMMIT; SELECT ' : End Testing against other types'; () SELECT 'Starting ()'; INSERT INTO (log_label, func, log_start, log_sql) VALUES(' ','', clock_timestamp(), ' SELECT () As output;'); BEGIN; COMMIT; SELECT 'Ending ()'; SELECT ' : Start Testing'; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' ','', '', clock_timestamp(), ' SELECT () As result FROM () As foo1 LIMIT 3;'); BEGIN; COMMIT; SELECT ' : End Testing'; SELECT ' (): Start Testing against other types'; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' ','','', '', clock_timestamp(), ' SELECT () As result, ST_AsText(foo1.the_geom) As ref1_geom, ST_AsText(foo2.the_geom) As ref2_geom FROM () As foo1 CROSS JOIN () As foo2 LIMIT 2;'); BEGIN; COMMIT; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' Other ','', '','', clock_timestamp(), ' SELECT ()'); SELECT 'Other (): Start Testing , '; BEGIN; COMMIT; SELECT '() : End Testing , '; SELECT ' (): End Testing against other types'; UPDATE SET spatial_class = 'geography' WHERE (log_label ILIKE '%geography%' or log_sql ILIKE '%geography%') AND spatial_class IS NULL; UPDATE SET spatial_class = 'geometry' WHERE log_label ILIKE '%geometry%' or log_label ILIKE '%other%' AND spatial_class IS NULL; '' ST_AsGML(foo1.the_geom) ST_AsKML(foo1.the_geom) foo1.the_geom geography(foo1.the_geom) foo2.the_geom geography(foo2.the_geom) ARRAY[foo1.the_geom] ARRAY[foo2.the_geom] ST_AsEWKT(foo1.the_geom) ST_AsText(foo1.the_geom) ST_AsEWKB(foo1.the_geom) ST_AsBinary(foo1.the_geom) '2009-01-01' , , ' '' postgis-2.1.2+dfsg.orig/doc/xsl/postgis_cheatsheet.html.xsl0000644000000000000000000002636012105363736022530 0ustar rootroot 2.1 Availability: Enhanced: false true http://postgis.net/docs/manual-dev/ PostGIS Cheat Sheet

PostGIS ]]> ]]> New in this release 1 Enhanced in this release 2 Requires GEOS 3.4 or higherg3.4  2.5/3D support3d SQL-MMmm  Supports geography G
]]> ]]> ]]> ]]> ]]> ]]>
]]>

]]> class="evenrowoddrow" ]]>
]]> ]]>
]]> class="evenrowoddrow"]]> ]]>
]]>]]>
]]> ]]> , postgis-2.1.2+dfsg.orig/doc/xsl/postgis_gardentest_subset.sql.xsl0000644000000000000000000005252112141211416023754 0ustar rootroot 2.1.0 3395 1 3 5 0.5 0.75 100 1 2 XDR 'monkey' 'test' 'SPHEROID["GRS_1980",6378137,298.257222101]' 'FF1FF0102' false (SELECT ST_SetSRID(ST_Point(i,j),4326) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) j ORDER BY i,j ) (SELECT ST_MakeLine(ST_SetSRID(ST_Point(i,j),4326),ST_SetSRID(ST_Point(j,i),4326)) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) As j WHERE NOT(i = j) ORDER BY i, i*j) (SELECT ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j*0.05) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, i*j, j) (SELECT ST_SetSRID(ST_MakePointM(i,j,m),4326) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 20) AS j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, i*j*m) (SELECT ST_MakeLine(ST_SetSRID(ST_MakePointM(i,j,m),4326),ST_SetSRID(ST_MakePointM(j,i,m),4326)) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m WHERE NOT(i = j) ORDER BY i, j, m, i*j*m) (SELECT ST_MakePolygon(ST_AddPoint(ST_AddPoint(ST_MakeLine(ST_SetSRID(ST_MakePointM(i+m,j,m),4326),ST_SetSRID(ST_MakePointM(j+m,i-m,m),4326)),ST_SetSRID(ST_MakePointM(i,j,m),4326)),ST_SetSRID(ST_MakePointM(i+m,j,m),4326))) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, m, i*j*m ) (SELECT ST_SetSRID(ST_MakePoint(i,j,k),4326) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 20) j CROSS JOIN generate_series(1,2) k ORDER BY i,i*j, j*k, i + j + k) (SELECT ST_SetSRID(ST_MakeLine(ST_MakePoint(i,j,k), ST_MakePoint(i+k,j+k,k)),4326) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 20) j CROSS JOIN generate_series(1,2) k ORDER BY i, j, i+j+k, k, i*j*k) (SELECT ST_SetSRID(ST_MakePolygon(ST_AddPoint(ST_AddPoint(ST_MakeLine(ST_MakePoint(i+m,j,m),ST_MakePoint(j+m,i-m,m)),ST_MakePoint(i,j,m)),ST_MakePointM(i+m,j,m))),4326) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, i+j+m, m, i*j*m) (SELECT ST_GeomFromEWKT( 'SRID=0;PolyhedralSurface( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') ) (SELECT ST_Collect(ST_Collect(ST_SetSRID(ST_MakePoint(i,j,m),4326),ST_SetSRID(ST_MakePolygon(ST_AddPoint(ST_AddPoint(ST_MakeLine(ST_MakePoint(i+m,j,m),ST_MakePoint(j+m,i-m,m)),ST_MakePoint(i,j,m)),ST_MakePointM(i+m,j,m))),4326))) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m ) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_SetSRID(ST_Point(i,j),4326) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) j ) As s) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_MakeLine(ST_SetSRID(ST_Point(i,j),4326),ST_SetSRID(ST_Point(j,i),4326)) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) As j WHERE NOT(i = j)) As s) (SELECT ST_Multi(ST_Union(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j*0.05))) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 25) As j) (SELECT ST_Collect(ST_SetSRID(ST_MakePoint(i,j,k),4326)) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 25) j CROSS JOIN generate_series(1,3) k ) (SELECT ST_Multi(ST_Union(ST_SetSRID(ST_MakeLine(ST_MakePoint(i,j,k), ST_MakePoint(i+k,j+k,k)),4326))) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 25) j CROSS JOIN generate_series(1,2) k ) (SELECT ST_Multi(ST_Union(s.the_geom)) As the_geom FROM (SELECT ST_MakePolygon(ST_AddPoint(ST_AddPoint(ST_MakeLine(ST_SetSRID(ST_MakePoint(i+m,j,m),4326),ST_SetSRID(ST_MakePoint(j+m,i-m,m),4326)),ST_SetSRID(ST_MakePoint(i,j,m),4326)),ST_SetSRID(ST_MakePoint(i+m,j,m),4326))) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 25) As j CROSS JOIN generate_series(1,2) As m ) As s) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_SetSRID(ST_MakePointM(i,j,m),4326) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 25) AS j CROSS JOIN generate_series(1,2) As m ) As s) (SELECT ST_Collect(s.the_geom) As the_geom FROM (SELECT ST_MakeLine(ST_SetSRID(ST_MakePointM(i,j,m),4326),ST_SetSRID(ST_MakePointM(j,i,m),4326)) As the_geom FROM (SELECT a*1.01234567890 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(50,70, 25) As j CROSS JOIN generate_series(1,2) As m WHERE NOT(i = j)) As s) ( SELECT ST_GeomFromEWKT('SRID=4326;MULTIPOLYGONM(((0 0 2,10 0 1,10 10 -2,0 10 -5,0 0 -5),(5 5 6,7 5 6,7 7 6,5 7 10,5 5 -2)))') As the_geom ) (SELECT ST_GeomFromText('GEOMETRYCOLLECTION EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('POLYGON EMPTY',4326) As the_geom ) (SELECT CAST(Null As geometry) As the_geom) (SELECT CAST(Null As geometry) As the_geom FROM generate_series(1,4) As foo) (SELECT ST_LineToCurve(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j)) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, j, i*j) (SELECT ST_LineToCurve(ST_Boundary(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j))) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, j, i*j) SELECT 'Starting ()';BEGIN; SELECT (); COMMIT; SELECT 'Ending ()'; SELECT 'Geometry : Start Testing '; BEGIN; SELECT ST_AsEWKT(()) SELECT 'Geography : Start Testing '; BEGIN; SELECT ST_AsText(()) SELECT 'Other : Start Testing '; BEGIN; SELECT () FROM () As foo1 LIMIT 3; COMMIT; SELECT ' : End Testing '; SELECT ' (): Start Testing against other types'; SELECT 'Geography (): Start Testing , '; BEGIN; SELECT (), ST_AsText(foo1.the_geom) As ref1_geom, ST_AsText(foo2.the_geom) As ref2_geom SELECT 'Geometry (): Start Testing , '; BEGIN; SELECT (), ST_AsEWKT(foo1.the_geom) As ref1_geom, ST_AsEWKT(foo2.the_geom) As ref2_geom SELECT 'Other (): Start Testing , '; BEGIN; SELECT () FROM () As foo1 CROSS JOIN () As foo2 LIMIT 2; COMMIT; SELECT '() : End Testing , '; SELECT ' (): End Testing against other types'; '' ST_AsGML(foo1.the_geom) foo1.the_geom geography(foo1.the_geom) foo2.the_geom geography(foo2.the_geom) ARRAY[foo1.the_geom] ARRAY[foo2.the_geom] ST_AsEWKT(foo1.the_geom) ST_AsText(foo1.the_geom) ST_AsEWKB(foo1.the_geom) ST_AsBinary(foo1.the_geom) '2009-01-01' , , postgis-2.1.2+dfsg.orig/doc/xsl/tiger_geocoder_comments.sql.xsl0000644000000000000000000001101211607551735023354 0ustar rootroot ' COMMENT ON AGGREGATEFUNCTION ( geometry, ) IS ' '; args: , - postgis-2.1.2+dfsg.orig/doc/xsl/raster_cheatsheet.html.xsl0000644000000000000000000002471612105355667022347 0ustar rootroot 2.1 Availability: Enhanced: false true http://postgis.net/docs/manual-dev/ PostGIS Raster Cheat Sheet

PostGIS ]]> ]]> New in this release 1 Enhanced in this release 2 Requires GEOS 3.3 or higherg3.3  2.5/3D support3d SQL-MMmm  Supports geography G
]]> ]]> ]]> ]]> ]]>

]]> class="evenrowoddrow" ]]> ]]> ]]> class="evenrowoddrow"]]> ]]>
]]>]]>
]]> ]]> , postgis-2.1.2+dfsg.orig/doc/xsl/postgis_comments.sql.xsl0000644000000000000000000001170312142775451022070 0ustar rootroot ' COMMENT ON TYPE IS 'postgis type: '; COMMENT ON AGGREGATEFUNCTION ( geometry, ) IS ' '; args: , - postgis-2.1.2+dfsg.orig/doc/xsl/sfcgal_cheatsheet.html.xsl0000644000000000000000000002335612142775451022303 0ustar rootroot 2.1 Availability: Enhanced: false true http://postgis.net/docs/manual-dev/ PostGIS SFCGAL Cheat Sheet

PostGIS ]]> ]]>

]]> ]]> ]]> ]]> ]]> ]]> class="evenrowoddrow" ]]> ]]> class="evenrowoddrow"]]> ]]>
]]>]]> ]]> ]]> , postgis-2.1.2+dfsg.orig/doc/xsl/raster_comments.sql.xsl0000644000000000000000000001565511720443625021706 0ustar rootroot ' COMMENT ON AGGREGATEFUNCTION ( geometryraster, ) IS ' '; ' COMMENT ON TYPE IS 'postgis raster type: '; ' '' args: , - postgis-2.1.2+dfsg.orig/doc/xsl/topology_cheatsheet.html.xsl0000644000000000000000000002411612105363736022711 0ustar rootroot 2.1 Availability: Enhanced: false true http://postgis.net/docs/manual-dev/ PostGIS Topology Cheat Sheet

PostGIS ]]> ]]> New in this release 1  Enhanced in this release 2 Requires GEOS 3.4 or higher3.4
]]> ]]> ]]> ]]> ]]>

]]> class="evenrowoddrow" ]]> ]]> ]]> class="evenrowoddrow"]]> ]]>
]]>]]> ]]> ]]> , postgis-2.1.2+dfsg.orig/doc/xsl/topology_comments.sql.xsl0000644000000000000000000001203711734371614022254 0ustar rootroot ' COMMENT ON TYPE topology. IS 'postgis type: '; COMMENT ON DOMAIN topology. IS 'postgis domain: '; COMMENT ON AGGREGATEFUNCTION topology.( topoelement, ) IS ' '; args: , - postgis-2.1.2+dfsg.orig/doc/xsl/postgis_reference.xml.xsl0000644000000000000000000000304112044041701022157 0ustar rootroot command: postgis-2.1.2+dfsg.orig/doc/xsl/raster_gardentest.sql.xsl0000644000000000000000000010317312142641556022214 0ustar rootroot 2.1.0 AddRasterColumn AddRasterConstraints DropRasterConstraints DropRasterColumn DropRasterTable 'GDAL' 3395 1 1 2 1.5 1.75 100 XDR 'monkey' 'test' NULL 'monkey_oneuserfunc(float,integer[],text[])'::regprocedure '1BB' 8BUI 0 'rast' 'pgis_rgarden_1bb' false raster_garden_log21 {8BUI,1BB} {255,0} 'Lanczos' ST_Centroid(rast1.rast::geometry) ROW(NULL, '8BUI', 255, 0)::addbandarg ARRAY[ROW(1, '1BB'::text, 0, NULL),ROW(2, '4BUI'::text, 0, NULL)]::addbandarg[] ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255) '2 0 0 3 0.5 0.5' UPDATE SET log_end = clock_timestamp() FROM (SELECT logid FROM ORDER BY logid DESC limit 1) As foo WHERE .logid = foo.logid AND .log_end IS NULL; INSERT INTO _output(logid, log_output) SELECT logid, query_to_xml(log_sql, false,false,'') As log_output FROM ORDER BY logid DESC LIMIT 1; (SELECT ST_SetSRID(ST_Point(i,j),4326) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) j ORDER BY i,j ) (SELECT ST_MakeLine(ST_SetSRID(ST_Point(i,j),4326),ST_SetSRID(ST_Point(j,i),4326)) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 15) As j WHERE NOT(i = j) ORDER BY i, i*j) (SELECT ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j*0.05) As the_geom FROM (SELECT a*1.11111111 FROM generate_series(-10,50,10) As a) As i(i) CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, i*j, j) (SELECT CAST(Null As geometry) As the_geom) (SELECT CAST(Null As geometry) As the_geom FROM generate_series(1,4) As foo) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '1BB'), i, (i+1),0),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '2BUI'), i, (i+1),1),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '4BUI'), i, (i+1),14),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '8BSI'), i, (i+1),-50),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '8BUI'), i, (i+1),150),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '16BSI'), i, (i+1),-6000),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '16BUI'), i, (i+1),64567),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '32BSI'), i, (i+1),-429496),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '32BUI'), i, (i+1),42949),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '32BF'), i, (i+1),-4294),4326) As rast FROM generate_series(1,10) As i) (SELECT ST_SetSRID(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster( 100, 100, (i-1)*100, (i-1)*100, 0.0005, -0.0005, 0*i, 0*i), '64BF'), i, (i+1),42949.12345),4326) As rast FROM generate_series(1,10) As i) DROP TABLE IF EXISTS ; CREATE TABLE (logid serial PRIMARY KEY, log_label text, spatial_class text DEFAULT 'raster', func text, g1 text, g2 text, log_start timestamp, log_end timestamp, log_sql text); DROP TABLE IF EXISTS _output; CREATE TABLE _output(logid integer PRIMARY KEY, log_output xml); DROP TABLE IF EXISTS pgis_rgarden_mega; CREATE TABLE pgis_rgarden_mega(rid serial PRIMARY KEY, rast raster); CREATE OR REPLACE FUNCTION monkey_oneuserfunc(pixel FLOAT, pos INTEGER[], VARIADIC args TEXT[])RETURNS FLOAT AS $$ BEGIN RETURN 0.0; END; $$ LANGUAGE plpgsql IMMUTABLE; create table Test SELECT ': Start Testing'; CREATE TABLE pgis_rgarden_(rid serial PRIMARY KEY); ALTER TABLE pgis_rgarden_ ADD COLUMN rast raster; ALTER TABLE pgis_rgarden_ ADD COLUMN r_rasttothrow raster; INSERT INTO (log_label, func, g1, log_start,log_sql) VALUES(' add raster column','add raster column', '', clock_timestamp(), ''); BEGIN; COMMIT; INSERT INTO (log_label, func, g1, log_start,log_sql) VALUES(' insert data raster','insert data', '', clock_timestamp(), 'INSERT INTO pgis_rgarden_(rast, r_rasttothrow) SELECT rast, rast FROM () As foo;'); BEGIN; INSERT INTO pgis_rgarden_(rast, r_rasttothrow) SELECT rast, rast FROM () As foo; COMMIT; INSERT INTO (log_label, func, g1, log_start,log_sql) VALUES(' apply raster constraints','apply raster constraints', '', clock_timestamp(), 'SELECT AddRasterConstraints(CAST(lower('pgis_rgarden_') AS name), CAST('rast' AS name));'); BEGIN; SELECT AddRasterConstraints(CAST(lower('pgis_rgarden_') As name), CAST('rast' AS name)); COMMIT; INSERT INTO (log_label, func, g1, log_start,log_sql) VALUES(' drop raster constraints','drop raster constraints', '', clock_timestamp(), 'SELECT DropRasterConstraints(CAST(lower('pgis_rgarden_') AS name), CAST('rast' AS name));'); BEGIN; SELECT DropRasterConstraints(CAST(lower('pgis_rgarden_') As name), CAST('rast' AS name)); COMMIT; against other types SELECT ': Start Testing '; SELECT 'Geometry : Start Testing , '; SELECT foo1.the_geom foo2.the_geom FROM () As foo1 CROSS JOIN () As foo2; INSERT INTO (log_label, func, g1, g2, log_start,log_sql) VALUES(' Geometry ','', '','', clock_timestamp(), ''); BEGIN; COMMIT; SELECT rast1.rast rast2.rast FROM () As rast1 CROSS JOIN () As rast2; SELECT 'Raster : Start Testing , '; INSERT INTO (log_label, func, g1, g2, log_start, log_sql) VALUES(' Raster ','', '','', clock_timestamp(), ''); BEGIN; COMMIT; SELECT ' : End Testing against other types'; -- () SELECT 'Starting ()'; SELECT (); INSERT INTO (log_label, func, log_start, log_sql) VALUES('','', clock_timestamp(), ''); BEGIN; COMMIT; SELECT 'Ending ()'; SELECT ' : Start Testing '; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' ','', '', clock_timestamp(), 'SELECT ST_AsEWKT(ST_ConvexHull(())) FROM () As rast1 LIMIT 3;' ); SELECT 'Other : Start Testing '; INSERT INTO (log_label, func, g1, log_start, log_sql) VALUES(' ','', '', clock_timestamp(), 'SELECT () FROM () As rast1 LIMIT 3;' ); BEGIN; COMMIT; SELECT ' : End Testing '; SELECT ' : Start Testing '; SELECT ' (): Start Testing against other types'; INSERT INTO (log_label, func, g1, g2, log_start) VALUES(' ','', '','', clock_timestamp()); BEGIN; SELECT 'Raster (): Start Testing , '; SELECT ST_ConvexHull(() ) SELECT () , ST_AsText(ST_ConvexHull(rast1.rast)) As ref1_geom, ST_AsText(ST_ConvexHull(rast2.rast)) As ref2_geom SELECT ' (): Start Testing , '; SELECT ST_ConvexHull(() ) SELECT () , ST_AsEWKT(rast1.rast::geometry) As ref1_geom, ST_AsEWKT(rast2.rast::geometry) As ref2_geom SELECT 'Other (): Start Testing , '; SELECT ST_AsText(()) FROM () As rast1 CROSS JOIN () As rast2 LIMIT 2; COMMIT; SELECT '() : End Testing , '; SELECT ' (): End Testing against other types'; ARRAY[] '' rast1.rast::geometry rast1.rast::geometry::geography rast2.rast::geometry geography(rast2.rast::geometry) ARRAY[rast1.rast] ARRAY[rast2.rast] rast1.rast rast2.rast rast2.rast ARRAY[foo1.the_geom] ARRAY[foo2.the_geom] ST_AsEWKT(foo1.the_geom) ST_AsText(foo1.the_geom) ST_AsEWKB(foo1.the_geom) ST_AsBinary(foo1.the_geom) '2009-01-01' , , ' '' postgis-2.1.2+dfsg.orig/doc/xsl/post_gis_day_cards.html.xsl0000644000000000000000000002332512051431413022465 0ustar rootroot 2.1 Availability: Enhanced: Post GIS PostGIS Playing Cards

Post GIS ]]>    http://www.postgis.org

Celebrate this Post GIS day with these versatile Post GIS day commemorative playing cards. The number of games and fun-filled hours you can have with these cards is priceless. Here is a small listing of the infinite number of games you can play with Post GIS cards:

  • Name that thing In this game you have the descriptions face up and have the opponent guess the name of the function, type, or operator.
  • What does it do? In this game you have the name of the thing face up and have the opponent describe what the thing does or is for. Your friends and even strangers you tricked into playing this game will be amazed at your mastery of the 400 some-odd functions PostGIS provides. To be able to exercise all 400 some-odd functions, you need to be running PostGIS ]]>
  • Post GIS war game This game requires no knowledge of PostGIS what-so-ever. In this game, you play with the descriptions face up. Even your kids will like this game, and may learn how to use PostGIS better than you. There are two joker cards -- the "What Is Post GIS?" and "What does Post GIS?". Any player that is dealt either of these cards wins - period. For other cards the order of precedence is: 1 - Is super and beats anything else except another 1 or joker card. In the event of multiple 1, the one that happens alphabetically first trumps the others. Symbols always trump letters.
    2 - Second favorite, alphabetical rules apply (is beaten by a joker, 1)
    mm - third highest ranking
    All other cards precedence by alphabetical order.
  • Post GIS in a language I don't understand To celebrate the ubiquity of PostGIS, you can create Post GIS playing cards in a language you don't understand. Here is what you do. Go to http://translate.google.com and paste in the URL to this page in the first text box (make sure it is set to English), in the To: drop down, pick a language you do not know, but preferably you have friends that speak that language and can laugh at your grammar and pronounciation. In no time you'll be able to impress your friends living far far away with your command of their language. Warning: because of the great number of functions PostGIS has to offer, Google (or any other translator) may refuse to translate all cards leaving you with a mix of some other language and English cards.
  • Post GIS in a language I do understand Similar to the I don't understand game, except you pick a non-english language that you do understand. Enjoy many moments of laughter reading machine generated translations that are sorta accurate but often comical.
  • The Scotch and Milk moment, the beginning of all brilliant ideas You realize there are 66 pages each of which has 6 cards. You realize you are a grown-up and grown-ups look silly cutting out cards from paper unless if accompanied by a minor. You have a kid staring at you wondering why this day is so special. Eureka Moment Pour yourself a glass of scotch and the kid a glass of milk and whip out the old scissors, glue, and print outs. Serving suggestion: It might be a good idea to pour the Scotch in a clear glass so you don't hand out the wrong glass to the kids. After the second helping, it might be prudent to stay away from the scissors.
  • Invent your own Post GIS card game. The possiblities are only limited by your imagination.

WHAT IS POST GIS?
POSTGIS
 
WHAT DOES POST GIS?
POSTGIS
 
]]> ]]> ]]>
]]>1 ]]> 2 ]]> mm ]]> G ]]> g3.4 ]]> 3d ]]>
]]>
 
]]> ]]> postgis-2.1.2+dfsg.orig/doc/xsl/postgis_aggs_mm.xml.xsl0000644000000000000000000011622212220103635021642 0ustar rootroot PostGIS Special Functions Index PostGIS Aggregate Functions The functions given below are spatial aggregate functions provided with PostGIS that can be used just like any other sql aggregate function such as sum, average. - PostGIS SQL-MM Compliant Functions The functions given below are PostGIS functions that conform to the SQL/MM 3 standard SQL-MM defines the default SRID of all geometry constructors as 0. PostGIS uses a default SRID of -1. - PostGIS Geography Support Functions The functions and operators given below are PostGIS functions/operators that take as input or return as output a geography data type object. Functions with a (T) are not native geodetic functions, and use a ST_Transform call to and from geometry to do the operation. As a result, they may not behave as expected when going over dateline, poles, and for large geometries or geometry pairs that cover more than one UTM zone. Basic tranform - (favoring UTM, Lambert Azimuthal (North/South), and falling back on mercator in worst case scenario) - PostGIS Raster Support Functions The functions and operators given below are PostGIS functions/operators that take as input or return as output a data type object. Listed in alphabetical order. - PostGIS Geometry / Geography / Raster Dump Functions The functions given below are PostGIS functions that take as input or return as output a set of or single geometry_dump or geomval data type object. - PostGIS Box Functions The functions given below are PostGIS functions that take as input or return as output the box* family of PostGIS spatial types. The box family of types consists of box2d, and box3d - PostGIS Functions that support 3D The functions given below are PostGIS functions that do not throw away the Z-Index. - PostGIS Curved Geometry Support Functions The functions given below are PostGIS functions that can use CIRCULARSTRING, CURVEDPOLYGON, and other curved geometry types - PostGIS Polyhedral Surface Support Functions The functions given below are PostGIS functions that can use POLYHEDRALSURFACE, POLYHEDRALSURFACEM geometries - ]]> ]]> ]]> ]]> ]]> PostGIS Function Support Matrix Below is an alphabetical listing of spatial specific functions in PostGIS and the kinds of spatial types they work with or OGC/SQL compliance they try to conform to. A means the function works with the type or subtype natively. A means it works but with a transform cast built-in using cast to geometry, transform to a "best srid" spatial ref and then cast back. Results may not be as expected for large areas or areas at poles and may accumulate floating point junk. A means the function works with the type because of a auto-cast to another such as to box3d rather than direct type support. A means the function only available if PostGIS compiled with SFCGAL support. A means the function support is provided by SFCGAL if PostGIS compiled with SFCGAL support, otherwise GEOS/built-in support. geom - Basic 2D geometry support (x,y). geog - Basic 2D geography support (x,y). 2.5D - basic 2D geometries in 3 D/4D space (has Z or M coord). PS - Polyhedral surfaces T - Triangles and Triangulated Irregular Network surfaces (TIN)

Function geom geog 2.5D Curves SQL MM PS T New, Enhanced or changed PostGIS Functions PostGIS Functions new or enhanced in 2.1 The functions given below are PostGIS functions that were added or enhanced. More Topology performance Improvements. Please refer to for more details. Bug fixes (particularly with handling of out-of-band rasters), many new functions (often shortening code you have to write to accomplish a common task) and massive speed improvements to raster functionality. Refer to for more details. Tiger Geocoder upgraded to work with TIGER 2012 census data in 2.1.0 and TIGER 2013 in 2.1.1. geocode_settings added for debugging and tweaking rating preferences, loader made less greedy, now only downloads tables to be loaded. Please refer to for more details. Raster bands can only reference the first 256 bands of out-db rasters. Functions new in PostGIS 2.1 - The functions given below are PostGIS functions that are enhanced in PostGIS 2.1. - PostGIS functions breaking changes in 2.1 The functions given below are PostGIS functions that have possibly breaking changes in PostGIS 2.1. If you use any of these, you may need to check your existing code. - PostGIS Functions new, behavior changed, or enhanced in 2.0 The functions given below are PostGIS functions that were added, enhanced, or have breaking changes in 2.0 releases. New geometry types: TIN and Polyhedral surfaces was introduced in 2.0 Greatly improved support for Topology. Please refer to for more details. In PostGIS 2.0, raster type and raster functionality has been integrated. There are way too many new raster functions to list here and all are new so please refer to for more details of the raster functions available. Earlier pre-2.0 versions had raster_columns/raster_overviews as real tables. These were changed to views before release. Functions such as ST_AddRasterColumn were removed and replaced with , as a result some apps that created raster tables may need changing. Tiger Geocoder upgraded to work with TIGER 2010 census data and now included in the core PostGIS documentation. A reverse geocoder function was also added. Please refer to for more details. - The functions given below are PostGIS functions that are enhanced in PostGIS 2.0. - PostGIS Functions changed behavior in 2.0 The functions given below are PostGIS functions that have changed behavior in PostGIS 2.0 and may require application changes. Most deprecated functions have been removed. These are functions that haven't been documented since 1.2 or some internal functions that were never documented. If you are using a function that you don't see documented, it's probably deprecated, about to be deprecated, or internal and should be avoided. If you have applications or tools that rely on deprecated functions, please refer to for more details. Bounding boxes of geometries have been changed from float4 to double precision (float8). This has an impact on answers you get using bounding box operators and casting of bounding boxes to geometries. E.g ST_SetSRID(abbox) will often return a different more accurate answer in PostGIS 2.0+ than it did in prior versions which may very well slightly change answers to view port queries. The arguments hasnodata was replaced with exclude_nodata_value which has the same meaning as the older hasnodata but clearer in purpose. - PostGIS Functions new, behavior changed, or enhanced in 1.5 The functions given below are PostGIS functions that were introduced or enhanced in this minor release. - PostGIS Functions new, behavior changed, or enhanced in 1.4 The functions given below are PostGIS functions that were introduced or enhanced in the 1.4 release. - PostGIS Functions new in 1.3 The functions given below are PostGIS functions that were introduced in the 1.3 release. - args: , - postgis-2.1.2+dfsg.orig/doc/xsl/sfcgal_comments.sql.xsl0000644000000000000000000001277112142775451021645 0ustar rootroot ' COMMENT ON AGGREGATEFUNCTION ( geometry, ) IS ' '; ' '' args: , - postgis-2.1.2+dfsg.orig/doc/postgis.xml0000644000000000000000000001472412315455701016552 0ustar rootroot This method implements the OpenGIS Simple Features Implementation Specification for SQL 1.1."> This method implements the SQL/MM specification."> This method is also provided by SFCGAL backend."> This method needs SFCGAL backend."> This method supports Circular Strings and Curves"> This function supports 3d and will not drop the z-index."> This function supports M coordinates."> This function supports Polyhedral surfaces."> This function supports Triangles and Triangulated Irregular Network Surfaces (TIN)."> ]> PostGIS &last_release_version; Manual The PostGIS Development Group Paul Ramsey clever elephant
Victoria British Columbia Canada pramsey@cleverelephant.ca
PostGIS &last_release_version; PostGIS is an extension to the PostgreSQL object-relational database system which allows GIS (Geographic Information Systems) objects to be stored in the database. PostGIS includes support for GiST-based R-Tree spatial indexes, and functions for analysis and processing of GIS objects. This is the manual for version &last_release_version; This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License. Feel free to use this material any way you like, but we ask that you attribute credit to the PostGIS Project and wherever possible, a link back to http://postgis.net.
&introduction; &installation; &faq; &using_postgis_dataman; &using_raster_dataman; &using_postgis_app; &performance_tips; &reference; &reference_raster; &faq_raster; &extras; &postgis_aggs_mm; &reporting; &release_notes;
postgis-2.1.2+dfsg.orig/doc/bnf-wkb.txt0000644000000000000000000003305112026713620016415 0ustar rootroot ::= | | | ::= | | | ::= | | | ::= | | | ::= | | | ::= ::= ::= ::= ::= | | ::= | | ::= | | ::= | | ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= | | ::= | | ::= | | ::= | | ::= ::= ::= ::= ::= ::= ::= ::= ::= | | | ::= | | | ::= | | | ::= | | | ::= ::= ::= ::= ::= | ::= | ::= | ::= | ::= ::= ::= ::= ::= | | ::= | | ::= | | ::= | | ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= | ::= | ::= | ::= | ::= | | ::= | | ::= | | ::= | | ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ... ::= ... ::= ... ::= ... ::= 3001 ::= 2001 ::= 1001 ::= 1 ::= 3002 ::= 2002 ::= 1002 ::= 2 ::= 3003 ::= 2003 ::= 1003 ::= 3 ::= 3004 ::= 2004 ::= 1004 ::= 4 ::= 3005 ::= 2005 ::= 1005 ::= 5 ::= 3006 ::= 2006 ::= 1006 ::= 6 ::= 3007 ::= 2007 ::= 1007 ::= 7 ::= 3008 ::= 2008 ::= 1008 ::= 8 ::= 3009 ::= 2009 ::= 1009 ::= 9 ::= 3010 ::= 2010 ::= 1010 ::= 10 ::= 3011 ::= 2011 ::= 1011 ::= 11 ::= 3012 ::= 2012 ::= 1012 ::= 12 ::= 3015 ::= 2015 ::= 1015 ::= 15 ::= 3016 ::= 2016 ::= 1016 ::= 16 ::= 3017 ::= 2017 ::= 1017 ::= 17 ::= !! 1 = little, 0 = big ::= !! 8 bits byte ::= !! 32 bits unsigned integer ::= !! 64 bits ieee double postgis-2.1.2+dfsg.orig/doc/Makefile.comments.in0000644000000000000000000000321212133266206020215 0ustar rootroot# ********************************************************************** # * $Id$ # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2010 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** # Separate PGXS-enabled Makefile for documentation installation (it is # not possible to merge into the main Makefile as has been done for # the shapefile loader) MODULE_doc=postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ MODULEDIR=contrib/$(MODULE_doc) # Files to be copied to the contrib/ directory DATA_built=postgis_comments.sql raster_comments.sql topology_comments.sql # PGXS information PG_CONFIG = @PG_CONFIG@ PGXS := @PGXS@ include $(PGXS) # PGXS override feature. The ability to allow PostGIS to install itself # in a versioned directory is only available in PostgreSQL >= 8.5. To # do this by default on older PostgreSQL versions, we need to override # the existing PGXS targets. # # Once PostgreSQL 8.5 becomes the minimum supported version, this entire # section and its associated Makefile.pgxs should be removed. PGXSOVERRIDE = @PGXSOVERRIDE@ ifeq ($(PGXSOVERRIDE),1) include ../postgis/Makefile.pgxs endif # If REGRESS=1 passed as a parameter, change the default install paths # so that no prefix is included. This allows us to relocate to a temporary # directory for regression testing. ifeq ($(REGRESS),1) bindir=/bin pkglibdir=/lib datadir=/share datamoduledir=contrib/postgis endif postgis-2.1.2+dfsg.orig/doc/template.xml0000644000000000000000000000531212024714372016665 0ustar rootroot ST_MyMethod Returns something useful boolean ST_MyMethod geometry g1 geometry g2 boolean ST_MyMethod geometry g1 geometry g2 varchar myparam varchar myparam=the_default_value Description Some useful description here. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. Availability: version goes here - requires GEOS >= 3.3.0. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Changed: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 5.1.40 &Z_support; &curve_support; &P_support; &T_support; Examples See Also , ... postgis-2.1.2+dfsg.orig/doc/reference_management.xml0000644000000000000000000010071412036445016021205 0ustar rootroot Management Functions AddGeometryColumn Adds a geometry column to an existing table of attributes. By default uses type modifier to define rather than constraints. Pass in false for use_typmod to get old check constraint based behavior text AddGeometryColumn varchar table_name varchar column_name integer srid varchar type integer dimension boolean use_typmod=true text AddGeometryColumn varchar schema_name varchar table_name varchar column_name integer srid varchar type integer dimension boolean use_typmod=true text AddGeometryColumn varchar catalog_name varchar schema_name varchar table_name varchar column_name integer srid varchar type integer dimension boolean use_typmod=true Description Adds a geometry column to an existing table of attributes. The schema_name is the name of the table schema. The srid must be an integer value reference to an entry in the SPATIAL_REF_SYS table. The type must be a string corresponding to the geometry type, eg, 'POLYGON' or 'MULTILINESTRING' . An error is thrown if the schemaname doesn't exist (or not visible in the current search_path) or the specified SRID, geometry type, or dimension is invalid. Changed: 2.0.0 This function no longer updates geometry_columns since geometry_columns is a view that reads from system catalogs. It by default also does not create constraints, but instead uses the built in type modifier behavior of PostgreSQL. So for example building a wgs84 POINT column with this function is now equivalent to: ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326); Changed: 2.0.0 If you require the old behavior of constraints use the default use_typmod, but set it to false. Changed: 2.0.0 Views can no longer be manually registered in geometry_columns, however views built against geometry typmod tables geometries and used without wrapper functions will register themselves correctly because they inherit the typmod behavior of their parent table column. Views that use geometry functions that output other geometries will need to be cast to typmod geometries for these view geometry columns to be registered correctly in geometry_columns. Refer to . &sfs_compliant; &Z_support; &curve_support; Enhanced: 2.0.0 use_typmod argument introduced. Defaults to creating typmod geometry column instead of constraint-based. Examples -- Create schema to hold data CREATE SCHEMA my_schema; -- Create a new simple PostgreSQL table CREATE TABLE my_schema.my_spatial_table (id serial); -- Describing the table shows a simple table with a single "id" column. postgis=# \d my_schema.my_spatial_table Table "my_schema.my_spatial_table" Column | Type | Modifiers --------+---------+------------------------------------------------------------------------- id | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass) -- Add a spatial column to the table SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom',4326,'POINT',2); -- Add a point using the old constraint based behavior SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',2, false); --Add a curvepolygon using old constraint behavior SELECT AddGeometryColumn ('my_schema','my_spatial_table','geomcp_c',4326,'CURVEPOLYGON',2, false); -- Describe the table again reveals the addition of a new geometry columns. \d my_schema.my_spatial_table addgeometrycolumn ------------------------------------------------------------------------- my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2 (1 row) Table "my_schema.my_spatial_table" Column | Type | Modifiers ----------+----------------------+------------------------------------------------------------------------- id | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass) geom | geometry(Point,4326) | geom_c | geometry | geomcp_c | geometry | Check constraints: "enforce_dims_geom_c" CHECK (st_ndims(geom_c) = 2) "enforce_dims_geomcp_c" CHECK (st_ndims(geomcp_c) = 2) "enforce_geotype_geom_c" CHECK (geometrytype(geom_c) = 'POINT'::text OR geom_c IS NULL) "enforce_geotype_geomcp_c" CHECK (geometrytype(geomcp_c) = 'CURVEPOLYGON'::text OR geomcp_c IS NULL) "enforce_srid_geom_c" CHECK (st_srid(geom_c) = 4326) "enforce_srid_geomcp_c" CHECK (st_srid(geomcp_c) = 4326) -- geometry_columns view also registers the new columns -- SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims FROM geometry_columns WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema'; col_name | type | srid | ndims ----------+--------------+------+------- geom | Point | 4326 | 2 geom_c | Point | 4326 | 2 geomcp_c | CurvePolygon | 4326 | 2 See Also , , , DropGeometryColumn Removes a geometry column from a spatial table. text DropGeometryColumn varchar table_name varchar column_name text DropGeometryColumn varchar schema_name varchar table_name varchar column_name text DropGeometryColumn varchar catalog_name varchar schema_name varchar table_name varchar column_name Description Removes a geometry column from a spatial table. Note that schema_name will need to match the f_table_schema field of the table's row in the geometry_columns table. &sfs_compliant; &Z_support; &curve_support; Changed: 2.0.0 This function is provided for backward compatibility. Now that since geometry_columns is now a view against the system catalogs, you can drop a geometry column like any other table column using ALTER TABLE Examples SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom'); ----RESULT output --- dropgeometrycolumn ------------------------------------------------------ my_schema.my_spatial_table.geom effectively removed. -- In PostGIS 2.0+ the above is also equivalent to the standard -- the standard alter table. Both will deregister from geometry_columns ALTER TABLE my_schema.my_spatial_table DROP column geom; See Also , , DropGeometryTable Drops a table and all its references in geometry_columns. boolean DropGeometryTable varchar table_name boolean DropGeometryTable varchar schema_name varchar table_name boolean DropGeometryTable varchar catalog_name varchar schema_name varchar table_name Description Drops a table and all its references in geometry_columns. Note: uses current_schema() on schema-aware pgsql installations if schema is not provided. Changed: 2.0.0 This function is provided for backward compatibility. Now that since geometry_columns is now a view against the system catalogs, you can drop a table with geometry columns like any other table using DROP TABLE Examples SELECT DropGeometryTable ('my_schema','my_spatial_table'); ----RESULT output --- my_schema.my_spatial_table dropped. -- The above is now equivalent to -- DROP TABLE my_schema.my_spatial_table; See Also , , PostGIS_Full_Version Reports full postgis version and build configuration infos. text PostGIS_Full_Version Description Reports full postgis version and build configuration infos. Also informs about synchronization between libraries and scripts suggesting upgrades as needed. Examples SELECT PostGIS_Full_Version(); postgis_full_version ---------------------------------------------------------------------------------- POSTGIS="1.3.3" GEOS="3.1.0-CAPI-1.5.0" PROJ="Rel. 4.4.9, 29 Oct 2004" USE_STATS (1 row) See Also , , , , , PostGIS_GEOS_Version Returns the version number of the GEOS library. text PostGIS_GEOS_Version Description Returns the version number of the GEOS library, or NULL if GEOS support is not enabled. Examples SELECT PostGIS_GEOS_Version(); postgis_geos_version ---------------------- 3.1.0-CAPI-1.5.0 (1 row) See Also , , , , PostGIS_LibXML_Version Returns the version number of the libxml2 library. text PostGIS_LibXML_Version Description Returns the version number of the LibXML2 library. Availability: 1.5 Examples SELECT PostGIS_LibXML_Version(); postgis_libxml_version ---------------------- 2.7.6 (1 row) See Also , , , , PostGIS_Lib_Build_Date Returns build date of the PostGIS library. text PostGIS_Lib_Build_Date Description Returns build date of the PostGIS library. Examples SELECT PostGIS_Lib_Build_Date(); postgis_lib_build_date ------------------------ 2008-06-21 17:53:21 (1 row) PostGIS_Lib_Version Returns the version number of the PostGIS library. text PostGIS_Lib_Version Description Returns the version number of the PostGIS library. Examples SELECT PostGIS_Lib_Version(); postgis_lib_version --------------------- 1.3.3 (1 row) See Also , , , , PostGIS_PROJ_Version Returns the version number of the PROJ4 library. text PostGIS_PROJ_Version Description Returns the version number of the PROJ4 library, or NULL if PROJ4 support is not enabled. Examples SELECT PostGIS_PROJ_Version(); postgis_proj_version ------------------------- Rel. 4.4.9, 29 Oct 2004 (1 row) See Also , , , , PostGIS_Scripts_Build_Date Returns build date of the PostGIS scripts. text PostGIS_Scripts_Build_Date Description Returns build date of the PostGIS scripts. Availability: 1.0.0RC1 Examples SELECT PostGIS_Scripts_Build_Date(); postgis_scripts_build_date ------------------------- 2007-08-18 09:09:26 (1 row) See Also , , , , PostGIS_Scripts_Installed Returns version of the postgis scripts installed in this database. text PostGIS_Scripts_Installed Description Returns version of the postgis scripts installed in this database. If the output of this function doesn't match the output of you probably missed to properly upgrade an existing database. See the Upgrading section for more info. Availability: 0.9.0 Examples SELECT PostGIS_Scripts_Installed(); postgis_scripts_installed ------------------------- 1.5.0SVN (1 row) See Also , , PostGIS_Scripts_Released Returns the version number of the postgis.sql script released with the installed postgis lib. text PostGIS_Scripts_Released Description Returns the version number of the postgis.sql script released with the installed postgis lib. Starting with version 1.1.0 this function returns the same value of . Kept for backward compatibility. Availability: 0.9.0 Examples SELECT PostGIS_Scripts_Released(); postgis_scripts_released ------------------------- 1.3.4SVN (1 row) See Also , , PostGIS_Version Returns PostGIS version number and compile-time options. text PostGIS_Version Description Returns PostGIS version number and compile-time options. Examples SELECT PostGIS_Version(); postgis_version --------------------------------------- 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1 (1 row) See Also , , , , Populate_Geometry_Columns Ensures geometry columns are defined with type modifiers or have appropriate spatial constraints This ensures they will be registered correctly in geometry_columns view. By default will convert all geometry columns with no type modifier to ones with type modifiers. To get old behavior set use_typmod=false text Populate_Geometry_Columns boolean use_typmod=true int Populate_Geometry_Columns oid relation_oid boolean use_typmod=true Description Ensures geometry columns have appropriate type modifiers or spatial constraints to ensure they are registered correctly in geometry_columns table. For backwards compatibility and for spatial needs such as tble inheritance where each child table may have different geometry type, the old check constraint behavior is still supported. If you need the old behavior, you need to pass in the new optional argument as false use_typmod=false. When this is done geometry columns will be created with no type modifiers but will have 3 constraints defined. In particular, this means that every geometry column belonging to a table has at least three constraints: enforce_dims_the_geom - ensures every geometry has the same dimension (see ) enforce_geotype_the_geom - ensures every geometry is of the same type (see ) enforce_srid_the_geom - ensures every geometry is in the same projection (see ) If a table oid is provided, this function tries to determine the srid, dimension, and geometry type of all geometry columns in the table, adding constraints as necessary. If successful, an appropriate row is inserted into the geometry_columns table, otherwise, the exception is caught and an error notice is raised describing the problem. If the oid of a view is provided, as with a table oid, this function tries to determine the srid, dimension, and type of all the geometries in the view, inserting appropriate entries into the geometry_columns table, but nothing is done to enforce constraints. The parameterless variant is a simple wrapper for the parameterized variant that first truncates and repopulates the geometry_columns table for every spatial table and view in the database, adding spatial constraints to tables where appropriate. It returns a summary of the number of geometry columns detected in the database and the number that were inserted into the geometry_columns table. The parameterized version simply returns the number of rows inserted into the geometry_columns table. Availability: 1.4.0 Changed: 2.0.0 By default, now uses type modifiers instead of check constraints to constrain geometry types. You can still use check constraint behavior instead by using the new use_typmod and setting it to false. Enhanced: 2.0.0 use_typmod optional argument was introduced that allows controlling if columns are created with typmodifiers or with check constraints. Examples CREATE TABLE public.myspatial_table(gid serial, geom geometry); INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) ); -- This will now use typ modifiers. For this to work, there must exist data SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass); populate_geometry_columns -------------------------- 1 \d myspatial_table Table "public.myspatial_table" Column | Type | Modifiers --------+---------------------------+--------------------------------------------------------------- gid | integer | not null default nextval('myspatial_table_gid_seq'::regclass) geom | geometry(LineString,4326) | -- This will change the geometry columns to use constraints if they are not typmod or have constraints already. --For this to work, there must exist data CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry); INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) ); SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false); populate_geometry_columns -------------------------- 1 \d myspatial_table_cs Table "public.myspatial_table_cs" Column | Type | Modifiers --------+----------+------------------------------------------------------------------ gid | integer | not null default nextval('myspatial_table_cs_gid_seq'::regclass) geom | geometry | Check constraints: "enforce_dims_geom" CHECK (st_ndims(geom) = 2) "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL) "enforce_srid_geom" CHECK (st_srid(geom) = 4326) UpdateGeometrySRID Updates the SRID of all features in a geometry column, geometry_columns metadata and srid. If it was enforced with constraints, the constraints will be updated with new srid constraint. If the old was enforced by type definition, the type definition will be changed. text UpdateGeometrySRID varchar table_name varchar column_name integer srid text UpdateGeometrySRID varchar schema_name varchar table_name varchar column_name integer srid text UpdateGeometrySRID varchar catalog_name varchar schema_name varchar table_name varchar column_name integer srid Description Updates the SRID of all features in a geometry column, updating constraints and reference in geometry_columns. Note: uses current_schema() on schema-aware pgsql installations if schema is not provided. &Z_support; &curve_support; Examples This will change the srid of the roads table to 4326 from whatever it was before SELECT UpdateGeometrySRID('roads','geom',4326); The prior example is equivalent to this DDL statement ALTER TABLE roads ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 4326) USING ST_SetSRID(geom,4326); If you got the projection wrong (or brought it in as unknown) in load and you wanted to transform to web mercator all in one shot You can do this with DDL but there is no equivalent PostGIS management function to do so in one go. ALTER TABLE roads ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 3857) USING ST_Transform(ST_SetSRID(geom,4326),3857) ; See Also , postgis-2.1.2+dfsg.orig/doc/Makefile0000644000000000000000000003041212315456245015774 0ustar rootroot# # PostGIS - Spatial Types for PostgreSQL # http://www.postgis.net # # This is free software; you can redistribute and/or modify it under # the terms of the GNU General Public Licence. See the COPYING file. # # PostGIS documentation build Makefile # # Copyright 2003-2012 Sandro Santilli # Copyright 2004-2012 Paul Ramsey # Copyright 2009-2011 Regina Obe # Copyright 2008-2010 Mark Cave-Ayland # Copyright 2008-2010 Kevin Neufeld # Copyright 2009-2010 Olivier Courtin # Copyright 2005-2006 Markus Schaber # # NOTE: We don't use a standard PGXS Makefile here since the DOCS target # only allows files to be stored within contrib/ and we currently # store documentation under contrib/postgis due to the possibility # that we could produce a large number of files (think chunked HTML) # translations = it_IT pt_BR POSTGIS_MAJOR_VERSION=2 POSTGIS_MINOR_VERSION=1 POSTGIS_MICRO_VERSION=2 INSTALL=/usr/bin/install -c INSTALL_DATA=${INSTALL} -m 644 XSLTPROC=/opt/local/bin/xsltproc XSLBASE= XMLLINT=/opt/local/bin/xmllint PERL=/opt/local/bin/perl # To allow network access use: # # make html XSLTPROCFLAGS= # ifeq ($(XSLTPROCFLAGS),) XSLTPROCFLAGS=--nonet endif XSLTPROC_COMMONOPTS= \ --param section.autolabel 1 \ --param section.label.includes.component.label 1 \ --param chunk.section.depth 0 \ --param generate.section.toc.level 2 \ --param funcsynopsis.style kr \ --param admon.graphics 1 \ --param admon.textlabel 0 \ --param simplesect.in.toc 0 \ --param use.id.as.filename 1 \ --param chunk.quietly 1 \ $(XSLTPROCFLAGS) XSLTPROC_HTMLOPTS= \ --stringparam html.stylesheet style.css \ HTML_DOCBOOK_XSL=$(XSLBASE)/html/docbook.xsl CHUNK_HTML_DOCBOOK_XSL=$(XSLBASE)/html/chunk.xsl # DBLatex's dblatex script for PDF generation from DocBook DBLATEX= # Imagemagick's convert utility program for generated images used in the documentation IMAGEMAGICK=/opt/local/bin/convert # Gettext for translated documentation MSGMERGE=msgmerge # XML gettext tools XML2POT=xml2pot # DOCBOOK to EPUB DBTOEPUB=dbtoepub # Directories for postgresql subdirectories PGSQL_DOCDIR=/opt/pgsql/9.2/share/doc PGSQL_MANDIR=/opt/pgsql/9.2/share/man PGSQL_SHAREDIR=/opt/pgsql/9.2/share # If XSLTPROC or XSLBASE were not found during configure, we cannot # build the documentation ifeq ($(XSLTPROC),) all: requirements_not_met_xsltproc else ifeq ($(XSLBASE),) all: requirements_not_met_xslbase else ifeq ($(IMAGEMAGICK),) all: requirements_not_met_imagemagick else all: comments endif endif endif XML_SOURCES = \ extras_historytable.xml \ extras_tigergeocoder.xml \ extras_topology.xml \ extras.xml \ faq_raster.xml \ faq.xml \ installation.xml \ introduction.xml \ performance_tips.xml \ postgis.xml \ reference_accessor.xml \ reference_constructor.xml \ reference_editor.xml \ reference_exception.xml \ reference_lrs.xml \ reference_management.xml \ reference_measure.xml \ reference_sfcgal.xml \ reference_misc.xml \ reference_operator.xml \ reference_output.xml \ reference_processing.xml \ reference_raster.xml \ reference_transaction.xml \ reference_type.xml \ reference.xml \ release_notes.xml \ reporting.xml \ using_postgis_app.xml \ using_postgis_dataman.xml \ using_raster_dataman.xml XML_GENERATED_SOURCES = \ postgis_aggs_mm.xml \ postgis-out.xml \ XML_INPUTS = $(XML_SOURCES) $(XML_GENERATED_SOURCES) XML_INPUTS_POT = $(XML_SOURCES:%.xml=po/templates/%.xml.pot) $(XML_INPUTS_POT): po/templates/%.xml.pot: %.xml $(XML2POT) $< > $@ # Creates or updates translation files update-po: $(XML_INPUTS_POT) @for lang in $(translations); do \ echo "Creating po files for language $$lang..." ; \ for pot in $(XML_INPUTS_POT); do \ mkdir -p po/$$lang; \ po=po/$$lang/`basename $$pot .pot`.po; \ if test -f $$po; then \ $(MSGMERGE) --update $$po $$pot; \ else \ cp $$pot $$po; \ fi; \ done; \ done ifeq ($(XSLTPROC),) postgis_aggs_mm.xml: requirements_not_met_xsltproc else postgis_aggs_mm.xml: ./xsl/postgis_aggs_mm.xml.xsl postgis-out.xml Makefile $(XSLTPROC) --novalid ./xsl/postgis_aggs_mm.xml.xsl postgis-out.xml > $@ endif postgis_comments.sql: ./xsl/postgis_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/postgis_comments.sql.xsl postgis-out.xml > $@ postgis_cheatsheet.html: ./xsl/postgis_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/postgis_cheatsheet.html.xsl postgis-out.xml > $@ raster_comments.sql: ./xsl/raster_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) ./xsl/raster_comments.sql.xsl postgis-out.xml > $@ raster_cheatsheet.html: ./xsl/raster_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/raster_cheatsheet.html.xsl postgis-out.xml > $@ topology_comments.sql: ./xsl/topology_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/topology_comments.sql.xsl postgis-out.xml > $@ topology_cheatsheet.html: ./xsl/topology_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/topology_cheatsheet.html.xsl postgis-out.xml > $@ sfcgal_comments.sql: ./xsl/sfcgal_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/sfcgal_comments.sql.xsl postgis-out.xml > $@ sfcgal_cheatsheet.html: ./xsl/sfcgal_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/sfcgal_cheatsheet.html.xsl postgis-out.xml > $@ tiger_geocoder_comments.sql: ./xsl/tiger_geocoder_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/tiger_geocoder_comments.sql.xsl postgis-out.xml > $@ tiger_geocoder_cheatsheet.html: ./xsl/tiger_geocoder_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/tiger_geocoder_cheatsheet.html.xsl postgis-out.xml > $@ postgis-out.xml: postgis.xml Makefile $(PERL) -lpe "s'@@LAST_RELEASE_VERSION@@'${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}'g" $< > $@ chunked-html: postgis-out.xml Makefile images $(XML_INPUTS) $(XSLTPROC) $(XSLTPROC_COMMONOPTS) $(XSLTPROC_HTMLOPTS) \ --output html/ \ --stringparam saxon.character.representation decimal \ $(CHUNK_HTML_DOCBOOK_XSL) \ $< html: html/postgis$(DOCSUFFIX).html html-localized: @for lang in $(translations); do \ echo "Creating html for language $$lang..."; \ $(MAKE) -C po/$$lang local-html; \ done html/postgis$(DOCSUFFIX).html: postgis-out.xml Makefile images $(XML_INPUTS) $(XSLTPROC) $(XSLTPROC_COMMONOPTS) $(XSLTPROC_HTMLOPTS) \ --output html/postgis$(DOCSUFFIX).html \ $(HTML_DOCBOOK_XSL) \ $< postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).pdf: postgis-out.xml images $(XML_INPUTS) if test x"$(DBLATEX)" = x; then \ echo "Error: dblatex not found, can't build pdf"; \ echo " try installing dblatex and then re-run configure"; \ false; \ else \ dblatex -T native -t pdf \ -I "${PWD}/html" \ -P doc.collab.show=0 \ -P figure.note="${PWD}/html/images/note" \ -P figure.tip="${PWD}/html/images/tip" \ -P figure.important="${PWD}/html/images/important" \ -P figure.warning="${PWD}/html/images/warning" \ -P figure.caution="${PWD}/html/images/caution" \ -P latex.output.revhistory=0 \ -o postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).pdf $<; \ fi postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).epub: postgis-out.xml images $(XML_INPUTS) if test x"$(DBTOEPUB)" = x; then \ echo "Error: dbtoepub not found, can't build epub"; \ echo " try installing dbtoepub"; \ false; \ else \ $(DBTOEPUB) -c "${PWD}/html/style.css" \ -o postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).epub \ $<; \ fi epub: postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).epub pdf: postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).pdf pdf-localized: @for lang in $(translations); do \ echo "Creating pdf for language $$lang..."; \ $(MAKE) -C po/$$lang local-pdf; \ done doxygen.cfg: doxygen.cfg.in $(PERL) -lpe "s'@@LAST_RELEASE_VERSION@@'${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}'g" $< > $@ doxygen: doxygen.cfg doxygen $< images: $(MAKE) -C html/image_src images images-clean: $(MAKE) -C html/image_src images-clean clean: rm -f html/*.html rm -f postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}.pdf rm -f *.epub $(MAKE) -C html/image_src clean rm -f $(XML_GENERATED_SOURCES) distclean: clean $(MAKE) -C html/image_src distclean rm -f Makefile maintainer-clean: clean images-clean rm -f postgis_comments.sql raster_comments.sql topology_comments.sql tiger_geocoder_comments.sql ifeq ($(XSLTPROC),) comments: requirements_not_met_xsltproc else comments: postgis_comments.sql raster_comments.sql topology_comments.sql sfcgal_comments.sql tiger_geocoder_comments.sql endif cheatsheets: postgis_cheatsheet.html raster_cheatsheet.html topology_cheatsheet.html sfcgal_cheatsheet.html tiger_geocoder_cheatsheet.html ifeq ($(XSLTPROC),) comments-install: if test -e postgis_comments.sql -a \ -e raster_comments.sql -a \ -e topology_comments.sql -a \ -e sfcgal_comments.sql -a \ -e tiger_geocoder_comments.sql; then \ $(MAKE) -f Makefile.comments install; \ fi else comments-install: comments $(MAKE) -f Makefile.comments install endif comments-uninstall: $(MAKE) -f Makefile.comments uninstall man-install: man/shp2pgsql.1 man/pgsql2shp.1 mkdir -p $(DESTDIR)$(PGSQL_MANDIR)/man1 $(INSTALL_DATA) man/pgsql2shp.1 $(DESTDIR)$(PGSQL_MANDIR)/man1/pgsql2shp.1 $(INSTALL_DATA) man/shp2pgsql.1 $(DESTDIR)$(PGSQL_MANDIR)/man1/shp2pgsql.1 man-uninstall: rm -f $(DESTDIR)$(PGSQL_MANDIR)/man1/shp2pgsql.1 rm -f $(DESTDIR)$(PGSQL_MANDIR)/man1/pgsql2shp.1 docs-install: html/postgis.html html/style.css mkdir -p $(DESTDIR)$(PGSQL_DOCDIR)/postgis/images $(INSTALL_DATA) html/postgis.html $(DESTDIR)$(PGSQL_DOCDIR)/postgis/ $(INSTALL_DATA) html/style.css $(DESTDIR)$(PGSQL_DOCDIR)/postgis/ $(INSTALL_DATA) html/images/* $(DESTDIR)$(PGSQL_DOCDIR)/postgis/images/ $(INSTALL_DATA) ../README.postgis $(DESTDIR)$(PGSQL_DOCDIR)/postgis/README.postgis docs-uninstall: rm -f $(DESTDIR)$(PGSQL_DOCDIR)/postgis/postgis.html rm -f $(DESTDIR)$(PGSQL_DOCDIR)/postgis/style.css rm -rf $(DESTDIR)$(PGSQL_DOCDIR)/postgis/images rm -f $(DESTDIR)$(PGSQL_DOCDIR)/postgis/README.postgis install: comments-install uninstall: comments-uninstall ifeq ($(XSLTPROC),) garden: requirements_not_met_xsltproc else garden: xsl/postgis_gardentest.sql.xsl $(XML_INPUTS) $(XSLTPROC) -o postgis_gardentest_${POSTGIS_MAJOR_VERSION}${POSTGIS_MINOR_VERSION}.sql xsl/postgis_gardentest.sql.xsl postgis-out.xml $(XSLTPROC) -o raster_gardentest_${POSTGIS_MAJOR_VERSION}${POSTGIS_MINOR_VERSION}.sql xsl/raster_gardentest.sql.xsl postgis-out.xml endif ifeq ($(XMLLINT),) check: requirements_not_met_xmllint else check: $(XML_INPUTS) $(XMLLINT) --loaddtd --xinclude --valid postgis-out.xml > /dev/null endif requirements_not_met_xsltproc: @echo @echo "configure was unable to find 'xsltproc' which is required" @echo "to build the documentation." @echo "Install xsltproc and then re-run configure. Alternatively " @echo "refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo requirements_not_met_xmllint: @echo @echo "configure was unable to find 'xmllint' which is required" @echo "to test the documentation." @echo "Install xmllint and then re-run configure. Alternatively " @echo "refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo requirements_not_met_xslbase: @echo @echo "configure was unable to find the Docbook XSL stylesheet directory" @echo "which is required to build the documentation." @echo "Install the Docbook XSL stylesheets and/or re-run configure " @echo "with the --with-xsldir option." @echo "Alternatively refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo requirements_not_met_imagemagick: @echo @echo "configure was unable to find the ImageMagick's 'convert' utility program." @echo "To build the documentation, install ImageMagick and then re-run configure. Alternatively " @echo "refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo postgis-2.1.2+dfsg.orig/doc/using_postgis_app.xml0000644000000000000000000004536011722777314020627 0ustar rootroot Using PostGIS Geometry: Building Applications Using MapServer The Minnesota MapServer is an internet web-mapping server which conforms to the OpenGIS Web Mapping Server specification. The MapServer homepage is at http://mapserver.org. The OpenGIS Web Map Specification is at http://www.opengeospatial.org/standards/wms. Basic Usage To use PostGIS with MapServer, you will need to know about how to configure MapServer, which is beyond the scope of this documentation. This section will cover specific PostGIS issues and configuration details. To use PostGIS with MapServer, you will need: Version 0.6 or newer of PostGIS. Version 3.5 or newer of MapServer. MapServer accesses PostGIS/PostgreSQL data like any other PostgreSQL client -- using the libpq interface. This means that MapServer can be installed on any machine with network access to the PostGIS server, and use PostGIS as a source of data. The faster the connection between the systems, the better. Compile and install MapServer, with whatever options you desire, including the "--with-postgis" configuration option. In your MapServer map file, add a PostGIS layer. For example: LAYER CONNECTIONTYPE postgis NAME "widehighways" # Connect to a remote spatial database CONNECTION "user=dbuser dbname=gisdatabase host=bigserver" PROCESSING "CLOSE_CONNECTION=DEFER" # Get the lines from the 'geom' column of the 'roads' table DATA "geom from roads using srid=4326 using unique gid" STATUS ON TYPE LINE # Of the lines in the extents, only render the wide highways FILTER "type = 'highway' and numlanes >= 4" CLASS # Make the superhighways brighter and 2 pixels wide EXPRESSION ([numlanes] >= 6) STYLE COLOR 255 22 22 WIDTH 2 END END CLASS # All the rest are darker and only 1 pixel wide EXPRESSION ([numlanes] < 6) STYLE COLOR 205 92 82 END END END In the example above, the PostGIS-specific directives are as follows: CONNECTIONTYPE For PostGIS layers, this is always "postgis". CONNECTION The database connection is governed by the a 'connection string' which is a standard set of keys and values like this (with the default values in <>): user=<username> password=<password> dbname=<username> hostname=<server> port=<5432> An empty connection string is still valid, and any of the key/value pairs can be omitted. At a minimum you will generally supply the database name and username to connect with. DATA The form of this parameter is "<geocolumn> from <tablename> using srid=<srid> using unique <primary key>" where the column is the spatial column to be rendered to the map, the SRID is SRID used by the column and the primary key is the table primary key (or any other uniquely-valued column with an index). You can omit the "using srid" and "using unique" clauses and MapServer will automatically determine the correct values if possible, but at the cost of running a few extra queries on the server for each map draw. PROCESSING Putting in a CLOSE_CONNECTION=DEFER if you have multiple layers reuses existing connections instead of closing them. This improves speed. Refer to for MapServer PostGIS Performance Tips for a more detailed explanation. FILTER The filter must be a valid SQL string corresponding to the logic normally following the "WHERE" keyword in a SQL query. So, for example, to render only roads with 6 or more lanes, use a filter of "num_lanes >= 6". In your spatial database, ensure you have spatial (GiST) indexes built for any the layers you will be drawing. CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] ); If you will be querying your layers using MapServer you will also need to use the "using unique" clause in your DATA statement. MapServer requires unique identifiers for each spatial record when doing queries, and the PostGIS module of MapServer uses the unique value you specify in order to provide these unique identifiers. Using the table primary key is the best practice. Frequently Asked Questions When I use an EXPRESSION in my map file, the condition never returns as true, even though I know the values exist in my table. Unlike shape files, PostGIS field names have to be referenced in EXPRESSIONS using lower case. EXPRESSION ([numlanes] >= 6) The FILTER I use for my Shape files is not working for my PostGIS table of the same data. Unlike shape files, filters for PostGIS layers use SQL syntax (they are appended to the SQL statement the PostGIS connector generates for drawing layers in MapServer). FILTER "type = 'highway' and numlanes >= 4" My PostGIS layer draws much slower than my Shape file layer, is this normal? In general, the more features you are drawing into a given map, the more likely it is that PostGIS will be slower than Shape files. For maps with relatively few features (100s), PostGIS will often be faster. For maps with high feature density (1000s), PostGIS will always be slower. If you are finding substantial draw performance problems, it is possible that you have not built a spatial index on your table. postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn ); postgis# VACUUM ANALYZE; My PostGIS layer draws fine, but queries are really slow. What is wrong? For queries to be fast, you must have a unique key for your spatial table and you must have an index on that unique key. You can specify what unique key for mapserver to use with the USING UNIQUE clause in your DATA line: DATA "geom FROM geotable USING UNIQUE gid" Can I use "geography" columns (new in PostGIS 1.5) as a source for MapServer layers? Yes! MapServer understands geography columns as being the same as geometry columns, but always using an SRID of 4326. Just make sure to include a "using srid=4326" clause in your DATA statement. Everything else works exactly the same as with geometry. DATA "geog FROM geogtable USING SRID=4326 USING UNIQUE gid" Advanced Usage The USING pseudo-SQL clause is used to add some information to help mapserver understand the results of more complex queries. More specifically, when either a view or a subselect is used as the source table (the thing to the right of "FROM" in a DATA definition) it is more difficult for mapserver to automatically determine a unique identifier for each row and also the SRID for the table. The USING clause can provide mapserver with these two pieces of information as follows: DATA "geom FROM ( SELECT table1.geom AS geom, table1.gid AS gid, table2.data AS data FROM table1 LEFT JOIN table2 ON table1.id = table2.id ) AS new_table USING UNIQUE gid USING SRID=4326" USING UNIQUE <uniqueid> MapServer requires a unique id for each row in order to identify the row when doing map queries. Normally it identifies the primary key from the system tables. However, views and subselects don't automatically have an known unique column. If you want to use MapServer's query functionality, you need to ensure your view or subselect includes a uniquely valued column, and declare it with USING UNIQUE. For example, you could explicitly select nee of the table's primary key values for this purpose, or any other column which is guaranteed to be unique for the result set. "Querying a Map" is the action of clicking on a map to ask for information about the map features in that location. Don't confuse "map queries" with the SQL query in a DATA definition. USING SRID=<srid> PostGIS needs to know which spatial referencing system is being used by the geometries in order to return the correct data back to MapServer. Normally it is possible to find this information in the "geometry_columns" table in the PostGIS database, however, this is not possible for tables which are created on the fly such as subselects and views. So the USING SRID= option allows the correct SRID to be specified in the DATA definition. Examples Lets start with a simple example and work our way up. Consider the following MapServer layer definition: LAYER CONNECTIONTYPE postgis NAME "roads" CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" DATA "geom from roads" STATUS ON TYPE LINE CLASS STYLE COLOR 0 0 0 END END END This layer will display all the road geometries in the roads table as black lines. Now lets say we want to show only the highways until we get zoomed in to at least a 1:100000 scale - the next two layers will achieve this effect: LAYER CONNECTIONTYPE postgis CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" PROCESSING "CLOSE_CONNECTION=DEFER" DATA "geom from roads" MINSCALE 100000 STATUS ON TYPE LINE FILTER "road_type = 'highway'" CLASS COLOR 0 0 0 END END LAYER CONNECTIONTYPE postgis CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" PROCESSING "CLOSE_CONNECTION=DEFER" DATA "geom from roads" MAXSCALE 100000 STATUS ON TYPE LINE CLASSITEM road_type CLASS EXPRESSION "highway" STYLE WIDTH 2 COLOR 255 0 0 END END CLASS STYLE COLOR 0 0 0 END END END The first layer is used when the scale is greater than 1:100000, and displays only the roads of type "highway" as black lines. The FILTER option causes only roads of type "highway" to be displayed. The second layer is used when the scale is less than 1:100000, and will display highways as double-thick red lines, and other roads as regular black lines. So, we have done a couple of interesting things using only MapServer functionality, but our DATA SQL statement has remained simple. Suppose that the name of the road is stored in another table (for whatever reason) and we need to do a join to get it and label our roads. LAYER CONNECTIONTYPE postgis CONNECTION "user=theuser password=thepass dbname=thedb host=theserver" DATA "geom FROM (SELECT roads.gid AS gid, roads.geom AS geom, road_names.name as name FROM roads LEFT JOIN road_names ON roads.road_name_id = road_names.road_name_id) AS named_roads USING UNIQUE gid USING SRID=4326" MAXSCALE 20000 STATUS ON TYPE ANNOTATION LABELITEM name CLASS LABEL ANGLE auto SIZE 8 COLOR 0 192 0 TYPE truetype FONT arial END END END This annotation layer adds green labels to all the roads when the scale gets down to 1:20000 or less. It also demonstrates how to use an SQL join in a DATA definition. Java Clients (JDBC) Java clients can access PostGIS "geometry" objects in the PostgreSQL database either directly as text representations or using the JDBC extension objects bundled with PostGIS. In order to use the extension objects, the "postgis.jar" file must be in your CLASSPATH along with the "postgresql.jar" JDBC driver package. import java.sql.*; import java.util.*; import java.lang.*; import org.postgis.*; public class JavaGIS { public static void main(String[] args) { java.sql.Connection conn; try { /* * Load the JDBC driver and establish a connection. */ Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://localhost:5432/database"; conn = DriverManager.getConnection(url, "postgres", ""); /* * Add the geometry types to the connection. Note that you * must cast the connection to the pgsql-specific connection * implementation before calling the addDataType() method. */ ((org.postgresql.PGConnection)conn).addDataType("geometry",Class.forName("org.postgis.PGgeometry")); ((org.postgresql.PGConnection)conn).addDataType("box3d",Class.forName("org.postgis.PGbox3d")); /* * Create a statement and execute a select query. */ Statement s = conn.createStatement(); ResultSet r = s.executeQuery("select geom,id from geomtable"); while( r.next() ) { /* * Retrieve the geometry as an object then cast it to the geometry type. * Print things out. */ PGgeometry geom = (PGgeometry)r.getObject(1); int id = r.getInt(2); System.out.println("Row " + id + ":"); System.out.println(geom.toString()); } s.close(); conn.close(); } catch( Exception e ) { e.printStackTrace(); } } } The "PGgeometry" object is a wrapper object which contains a specific topological geometry object (subclasses of the abstract class "Geometry") depending on the type: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon. PGgeometry geom = (PGgeometry)r.getObject(1); if( geom.getType() == Geometry.POLYGON ) { Polygon pl = (Polygon)geom.getGeometry(); for( int r = 0; r < pl.numRings(); r++) { LinearRing rng = pl.getRing(r); System.out.println("Ring: " + r); for( int p = 0; p < rng.numPoints(); p++ ) { Point pt = rng.getPoint(p); System.out.println("Point: " + p); System.out.println(pt.toString()); } } } The JavaDoc for the extension objects provides a reference for the various data accessor functions in the geometric objects. C Clients (libpq) ... Text Cursors ... Binary Cursors ... postgis-2.1.2+dfsg.orig/doc/reference_exception.xml0000644000000000000000000001221411722777314021076 0ustar rootroot Exceptional Functions These functions are rarely used functions that should only be used if your data is corrupted in someway. They are used for troubleshooting corruption and also fixing things that should under normal circumstances, never happen. PostGIS_AddBBox Add bounding box to the geometry. geometry PostGIS_AddBBox geometry geomA Description Add bounding box to the geometry. This would make bounding box based queries faster, but will increase the size of the geometry. Bounding boxes are automatically added to geometries so in general this is not needed unless the generated bounding box somehow becomes corrupted or you have an old install that is lacking bounding boxes. Then you need to drop the old and readd. &curve_support; Examples UPDATE sometable SET the_geom = PostGIS_AddBBox(the_geom) WHERE PostGIS_HasBBox(the_geom) = false; See Also , PostGIS_DropBBox Drop the bounding box cache from the geometry. geometry PostGIS_DropBBox geometry geomA Description Drop the bounding box cache from the geometry. This reduces geometry size, but makes bounding-box based queries slower. It is also used to drop a corrupt bounding box. A tale-tell sign of a corrupt cached bounding box is when your ST_Intersects and other relation queries leave out geometries that rightfully should return true. Bounding boxes are automatically added to geometries and improve speed of queries so in general this is not needed unless the generated bounding box somehow becomes corrupted or you have an old install that is lacking bounding boxes. Then you need to drop the old and readd. This kind of corruption has been observed in 8.3-8.3.6 series whereby cached bboxes were not always recalculated when a geometry changed and upgrading to a newer version without a dump reload will not correct already corrupted boxes. So one can manually correct using below and readd the bbox or do a dump reload. &curve_support; Examples --This example drops bounding boxes where the cached box is not correct --The force to ST_AsBinary before applying Box2D forces a recalculation of the box, and Box2D applied to the table geometry always -- returns the cached bounding box. UPDATE sometable SET the_geom = PostGIS_DropBBox(the_geom) WHERE Not (Box2D(ST_AsBinary(the_geom)) = Box2D(the_geom)); UPDATE sometable SET the_geom = PostGIS_AddBBox(the_geom) WHERE Not PostGIS_HasBBOX(the_geom); See Also , , PostGIS_HasBBox Returns TRUE if the bbox of this geometry is cached, FALSE otherwise. boolean PostGIS_HasBBox geometry geomA Description Returns TRUE if the bbox of this geometry is cached, FALSE otherwise. Use and to control caching. &curve_support; Examples SELECT the_geom FROM sometable WHERE PostGIS_HasBBox(the_geom) = false; See Also , postgis-2.1.2+dfsg.orig/doc/rfc/0000755000000000000000000000000012317530606015102 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/rfc/postgis_rfc_04.txt0000644000000000000000000001032111722777314020475 0ustar rootrootISSUE ----- I've been working away in an isolated little spike to try and sort out the parser issues that have kept me from finishing the marshalling / unmarshalling support for curved geometries. The issue that I've run up against is that the parsers validation for things like closed linestrings, minimum points and the odd point (added for circular strings) assume that these checks are constant across sub-elements. As an example parsing a linestring and a polygon: LINESTRING The linestring is alloc'd a tuple, and the minpoints are set to 2. A point array tuple (counting tuple) is alloc'd and then each point has a tuple. When the point array tuple is pop'd the minpoints are checked. POLYGON For a polygon, it is alloc'd a tuple just the same except closed is flagged and minpoints set to 4. Then there's a ring counting tuple alloc'd followed by one or more point array tuples. As each point array tuple is pop'd the minpoints and is-closed are checked. This is perfectly sensible and fast-fail. But this falls down with the introduction of compound curves and curved polygons. Under this model, the following happens when parsing a curved polygon: CURVEPOLYGON The curved polygon is alloc'd a tuple, minpoints set to 4 and closed flagged. A ring counter is alloc'd. Then there are options. If the first ring is a linestring it is alloc'd a tuple and the minpoints set to 2. If it's a circularstring minpoints are 3 and isodd is flagged. If it's a compound curve it gets minpoints = 2, and then sub-geometries are alloc'd. As well as overwriting the minpoints and isodd, the compound curve breaks the isclosed, as it must be closed but it's sub-geometries can't be. There is currently no way to check the continuity of a compound curve (one sub-geometry ends on the same point the next sub-geometry begins) or the closedness using thing mechanism, as it only operates on distinct point arrays tuples. PROPOSAL -------- My proposed fix is to change how and where these basic validations are performed. Instead of tracking the validation requirements in global variable they will be handled by the parser. By adding calls to validation methods as the parser closes each geometry or sub-geometry we know the proper context and can evaluate the geometry as a whole. To pick an example, the parser will call a method 'void check_linestring(void)' before popping a parsed linestrings tuple from the stack. This method will currently implement the minpoints check. In the case of a closed linestring, an aditional method 'void check_geometry_closed(void)' will be called. With this process, the point arrays themselves have no validation, since point arrays have no nonempty_linestring : { alloc_linestring(); } linestring_1 { check_linestring(); pop(); } nonempty_linestring_closed : { alloc_linestring_closed(); } linestring_1 { check_geometry_closed(); check_linestring(); pop(); } This is a change in paradigm for how we currently validate geometries. The previous method was very efficient as only a single tuple was ever handled at a time, start and end points were copied into global variables during parsing to perform closed checks, and the parser would report any invalidities at the end of the offending point array making debugging easier for the user. This solution requires traversing the tuple chain from the geometry into point array tuples and in some cases sub-geometries. While this won't have a large effect on linestrings it can be expected to have a negative performance impact on polygons, as each point needs to be fully traversed in order to validate it. Compound curves have a similar problem, but under the current mechanism are simply not fully validated. The other negative impact of this changes is the invalidity reporting. Because validation is performed at the end of the geometry, it is not simple to identify where in the WKT string an error occured. For example, if a polygon consists of several rings, one of which is not closed, the Hint provided to the user will indicate the end of the polygon, not the end of the unclosed point array. I have yet to resolve this issue. The advantages here are the proper support of compound curves and curve polygons and the validation mechanism is much more clear and flexible. postgis-2.1.2+dfsg.orig/doc/rfc/postgis_rfc_02.txt0000644000000000000000000001365011722777314020503 0ustar rootrootGetting into Alignment ---------------------- - Goal 1: Get our on-disk format aligned, so that we can read directly out of it after it has been brought into memory. - Goal 2: Sacrifice as little of the compactness of the current scheme as possible - Goal 3: Retain the ability to represent structures like GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(...)) PG_LWGEOM/LWGEOM ---------------- Right now, PG_LWGEOM is just an LWGEOM with an extra 4-bytes of information tacked onto the front. The "align" keyword in CREATE TYPE is guaranteed to align the complete PG structure, so the front of the PG_LWGEOM can be guaranteed to be on an alignment boundary. That means that the front of the LWGEOM will be four-bytes *off* the boundary. The simplest fix is to make our LWGEOM/PG_LWGEOM be the same struct, and have LWGEOM carry around the PG_LWGEOM 'size' attribute, even though there is not internal use for it. It can be "application data", where most of the time the application is PostgreSQL. Since our main goal is the keep size-on-disk down, increasing our size-in-memory for non-PostgreSQL applications of liblwgeom seems like a reasonable trade-off. TYPE ---- The type char at the head of the serialized form is a problem. By expanding it to 2-bytes, and in combination with some 2-byte length fields further down, we can achieve alignment at the cost of just 1 extra byte. See below in SRID for an approach that combines type and srid to reduce the cost to 1 byte. BBOX ---- Because the bbox is 4 floats ( = 2 doubles ) wide, we can ignore it. The fact that it is optional is not a problem, adding or removing it does not change the alignment of anything. SRID ---- Right now the SRID is optional and 4 bytes. That's a problem, because it knocks us in/out of alignment depending on its presence. I see two approaches: -- Make it smaller and mandatory. o Reduce it to 2 bytes, and expand the type byte to 2 bytes, and you have a 4-byte block that should be easy to add to another 4-byte block to get aligned. o Reduce it to 3 bytes, and use the spare bit in the type char for extra geometry types. Currently, none of the SRID values in the EPSG database exceed 32000, so they fit into an unsigned short (65536). With three bytes, SRID can be as large as 16M. Users will have filled in their spatial_ref_sys tables with god-knows-what, however. -- Make it larger and keep it optional. Doubling SRID to 8-bytes makes it a no-pain optional field, like the bbox, but at 4-byte cost. However, since most geometries in production *do* carry SRID information, this is a size hit that will likely apply to many users. LENGTHS ------- Lengths (ordinate array lengths, ring counts, sub-object counts) are the hardest thing to deal with. They are 4-bytes long and they mostly come one at a time, which has the effect of misaligning the structure each and every time we hit one. - Basic fix, simply pad all the lengths out to 8 bytes. - More complex fix, move to a serialized form more like the shape file, which stores all the offsets in one block at the front, and then all the doubles in one uninterrupted set afterwards. That means the net lack of alignment for a given group of offsets is only ever four bytes at the most. FULLY PADDED EXAMPLES --------------------- The simplest approach is to pad out everything as needed. Here is what things look like for some examples. The leanest features (2d points, two-vertex 2d lines) take the biggest hit, as expected. The balance between speed increase gained from aligned access versus lost to disk I/O is going to require some empirical testing, unfortunately. :: POINT2D :: Pg VarSize type srid X Y Old size: 25 bytes New size: 32 bytes (28% larger) :: LINESTRING2D (w/ bbox and srid) :: Pg VarSize type srid bbox mins bbox maxs npoints X0 Y0 X1 Y1 Old size: 61 bytes New size: 72 bytes (18% larger) :: POLYGON2D (w/ bbox and srid) :: Pg VarSize type srid bbox mins bbox maxs nrings npoints X0 Y0 X1 Y1 X2 Y2 X3 Y3 Old size: 97 bytes New size: 112 bytes (15% larger) :: MULTILINESTRING2D (w/ bbox and srid and just one part) :: Note that the bbox and srid are dropped from the subgeometry. Pg VarSize type srid bbox mins bbox maxs nlines Pg VarSize type npoints X0 Y0 X1 Y1 Old size: 66 bytes New size: 88 bytes (33% larger) SCRUNCHED HEADER EXAMPLES ------------------------- Keeping the "type" at 8 bits, and reducing "srid" to 24 bits, scrunches that metadata complex into a single 32-bit space. Because SRID is made mandatory, a bit is also freed up in "type" for more geometry types. :: POINT2D :: Pg VarSize type / srid X Y Old size: 25 bytes New size: 24 bytes (4% smaller) :: LINESTRING2D (w/ bbox and srid) :: Pg VarSize type / srid bbox mins bbox maxs npoints X0 Y0 X1 Y1 Old size: 61 bytes New size: 64 bytes (5% larger) :: POLYGON2D (w/ bbox and srid) :: Pg VarSize type / srid bbox mins bbox maxs nrings npoints X0 Y0 X1 Y1 X2 Y2 X3 Y3 Old size: 97 bytes New size: 104 bytes (7% larger) :: MULTILINESTRING2D (w/ bbox and srid and just one part) :: Note that the bbox and srid are dropped from the subgeometry. Pg VarSize type / srid bbox mins bbox maxs nlines Pg VarSize type / srid npoints X0 Y0 X1 Y1 Old size: 66 bytes New size: 80 bytes (21% larger) postgis-2.1.2+dfsg.orig/doc/rfc/postgis_rfc_03.txt0000644000000000000000000000023511722777314020477 0ustar rootrootThe functions listed in postgis_rfc_03_sheet.txt should be updated per the instructions in the sheet. Functions that are PUBLIC/KEEP should be documented. postgis-2.1.2+dfsg.orig/doc/rfc/postgis_rfc_03_sheet.txt0000644000000000000000000010770411722777314021700 0ustar rootrootType Name Visibility Action Rename Notes FUNCTION spheroid_in(cstring) PRIVATE KEEP FUNCTION ST_spheroid_in(cstring) PRIVATE DELETE FUNCTION spheroid_out(spheroid) PRIVATE KEEP FUNCTION ST_spheroid_out(spheroid) PRIVATE DELETE FUNCTION geometry_in(cstring) PRIVATE KEEP FUNCTION ST_geometry_in(cstring) PRIVATE DELETE FUNCTION geometry_out(geometry) PRIVATE KEEP FUNCTION ST_geometry_out(geometry) PRIVATE DELETE FUNCTION geometry_analyze(internal) PRIVATE KEEP FUNCTION ST_geometry_analyze(internal) PRIVATE DELETE FUNCTION geometry_recv(internal) PRIVATE KEEP FUNCTION ST_geometry_recv(internal) PRIVATE DELETE FUNCTION geometry_send(geometry) PRIVATE KEEP FUNCTION ST_geometry_send(geometry) PRIVATE DELETE FUNCTION "Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)" PUBLIC KEEP FUNCTION "Affine(geometry,float8,float8,float8,float8,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_Affine(geometry,float8,float8,float8,float8,float8,float8)" PUBLIC KEEP FUNCTION "RotateZ(geometry,float8)" PUBLIC DEPRECATE FUNCTION "ST_RotateZ(geometry,float8)" PUBLIC KEEP FUNCTION "Rotate(geometry,float8)" PUBLIC DEPRECATE FUNCTION "ST_Rotate(geometry,float8)" PUBLIC KEEP FUNCTION "RotateX(geometry,float8)" PUBLIC DEPRECATE FUNCTION "ST_RotateX(geometry,float8)" PUBLIC KEEP FUNCTION "RotateY(geometry,float8)" PUBLIC DEPRECATE FUNCTION "ST_RotateY(geometry,float8)" PUBLIC KEEP FUNCTION "Translate(geometry,float8,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_Translate(geometry,float8,float8,float8)" PUBLIC KEEP FUNCTION "Translate(geometry,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_Translate(geometry,float8,float8)" PUBLIC KEEP FUNCTION "Scale(geometry,float8,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_Scale(geometry,float8,float8,float8)" PUBLIC KEEP FUNCTION "Scale(geometry,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_Scale(geometry,float8,float8)" PUBLIC KEEP FUNCTION "transscale(geometry,float8,float8,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_transscale(geometry,float8,float8,float8,float8)" PUBLIC KEEP FUNCTION shift_longitude(geometry) PUBLIC DEPRECATE FUNCTION ST_shift_longitude(geometry) PUBLIC KEEP FUNCTION box3d_in(cstring) PRIVATE KEEP FUNCTION box3d_out(box3d) PRIVATE KEEP FUNCTION ST_box3d_in(cstring) PRIVATE DELETE FUNCTION ST_box3d_out(box3d) PRIVATE DELETE FUNCTION xmin(box3d) PUBLIC DEPRECATE FUNCTION ST_XMin(box3d) PUBLIC KEEP FUNCTION ymin(box3d) PUBLIC DEPRECATE FUNCTION ST_YMin(box3d) PUBLIC KEEP FUNCTION zmin(box3d) PUBLIC DEPRECATE FUNCTION ST_ZMin(box3d) PUBLIC KEEP FUNCTION xmax(box3d) PUBLIC DEPRECATE FUNCTION ST_XMax(box3d) PUBLIC KEEP FUNCTION ymax(box3d) PUBLIC DEPRECATE FUNCTION ST_YMax(box3d) PUBLIC KEEP FUNCTION zmax(box3d) PUBLIC DEPRECATE FUNCTION ST_ZMax(box3d) PUBLIC KEEP FUNCTION chip_in(cstring) PRIVATE DELETE FUNCTION ST_chip_in(cstring) PRIVATE DELETE FUNCTION chip_out(chip) PRIVATE DELETE FUNCTION ST_chip_out(chip) PRIVATE DELETE FUNCTION box2d_in(cstring) PRIVATE KEEP FUNCTION ST_box2d_in(cstring) PRIVATE DELETE FUNCTION box2d_out(box2d) PRIVATE KEEP FUNCTION ST_box2d_out(box2d) PRIVATE DELETE FUNCTION "box2d_overleft(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_overleft(box2d, box2d)" PRIVATE DELETE FUNCTION "box2d_overright(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_overright(box2d, box2d)" PRIVATE DELETE FUNCTION "box2d_left(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_left(box2d, box2d)" PRIVATE DELETE FUNCTION "box2d_right(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_right(box2d, box2d)" PRIVATE DELETE FUNCTION "box2d_contain(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_contain(box2d, box2d)" PRIVATE DELETE FUNCTION "box2d_contained(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_contained(box2d, box2d)" PRIVATE DELETE FUNCTION "box2d_overlap(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_overlap(box2d, box2d)" PRIVATE DELETE FUNCTION "box2d_intersects(box2d, box2d)" PRIVATE KEEP FUNCTION "ST_box2d_intersects(box2d, box2d)" PRIVATE DELETE FUNCTION "geometry_lt(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_lt(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_le(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_le(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_gt(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_gt(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_ge(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_ge(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_eq(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_eq(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_cmp(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_cmp(geometry, geometry)" PRIVATE DELETE FUNCTION "postgis_gist_sel (internal, oid, internal, int4)" PRIVATE KEEP FUNCTION "ST_postgis_gist_sel (internal, oid, internal, int4)" PRIVATE DELETE FUNCTION "postgis_gist_joinsel(internal, oid, internal, smallint)" PRIVATE KEEP FUNCTION "ST_postgis_gist_joinsel(internal, oid, internal, smallint)" PRIVATE DELETE FUNCTION "geometry_overleft(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_overleft(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_overright(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_overright(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_overabove(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_overabove(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_overbelow(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_overbelow(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_left(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_left(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_right(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_right(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_above(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_above(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_below(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_below(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_contain(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_contain(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_contained(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_contained(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_overlap(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_overlap(geometry, geometry)" PRIVATE DELETE FUNCTION "geometry_same(geometry, geometry)" PRIVATE KEEP FUNCTION "ST_geometry_same(geometry, geometry)" PRIVATE DELETE FUNCTION "LWGEOM_gist_consistent(internal,geometry,int4)" PRIVATE RENAME postgis_gist_consistent FUNCTION LWGEOM_gist_compress(internal) PRIVATE RENAME postgis_gist_compress FUNCTION "LWGEOM_gist_penalty(internal,internal,internal)" PRIVATE RENAME postgis_gist_penalty FUNCTION "LWGEOM_gist_picksplit(internal, internal)" PRIVATE RENAME postgis_gist_picksplit FUNCTION "LWGEOM_gist_union(bytea, internal)" PRIVATE RENAME postgis_gist_union FUNCTION "LWGEOM_gist_same(box2d, box2d, internal)" PRIVATE RENAME postgis_gist_same FUNCTION LWGEOM_gist_decompress(internal) PRIVATE RENAME postgis_gist_decompress FUNCTION addBBOX(geometry) PUBLIC DEPRECATE FUNCTION ST_addBBOX(geometry) PUBLIC KEEP FUNCTION dropBBOX(geometry) PUBLIC DEPRECATE FUNCTION ST_dropBBOX(geometry) PUBLIC KEEP FUNCTION getSRID(geometry) PUBLIC DEPRECATE FUNCTION getSRID(geometry) PUBLIC DELETE duplicate FUNCTION getBBOX(geometry) PUBLIC DEPRECATE FUNCTION getBBOX(geometry) PUBLIC DELETE duplicate FUNCTION srid(chip) PUBLIC DELETE FUNCTION ST_srid(chip) PUBLIC DELETE FUNCTION height(chip) PUBLIC DELETE FUNCTION ST_height(chip) PUBLIC DELETE FUNCTION factor(chip) PUBLIC DELETE FUNCTION ST_factor(chip) PUBLIC DELETE FUNCTION width(chip) PUBLIC DELETE FUNCTION ST_width(chip) PUBLIC DELETE FUNCTION dataTYPE(chip) PUBLIC DELETE FUNCTION ST_dataTYPE(chip) PUBLIC DELETE FUNCTION compression(chip) PUBLIC DELETE FUNCTION ST_compression(chip) PUBLIC DELETE FUNCTION "setSRID(chip,int4)" PUBLIC DELETE FUNCTION "setFactor(chip,float4)" PUBLIC DELETE FUNCTION "ST_setFactor(chip,float4)" PUBLIC DELETE FUNCTION mem_size(geometry) PUBLIC DEPRECATE FUNCTION ST_mem_size(geometry) PUBLIC KEEP FUNCTION summary(geometry) PUBLIC DEPRECATE FUNCTION ST_summary(geometry) PUBLIC KEEP FUNCTION npoints(geometry) PUBLIC DEPRECATE FUNCTION ST_npoints(geometry) PUBLIC KEEP FUNCTION nrings(geometry) PUBLIC DEPRECATE FUNCTION ST_nrings(geometry) PUBLIC KEEP FUNCTION length3d(geometry) PUBLIC DEPRECATE FUNCTION ST_3dlength(geometry) PUBLIC DEPRECATE FUNCTION length2d(geometry) PUBLIC DEPRECATE FUNCTION ST_length2d(geometry) PUBLIC DEPRECATE FUNCTION "ST_Length(geometry, dims)" PUBLIC NEW calculate length using n dims FUNCTION length(geometry) PUBLIC DEPRECATE FUNCTION ST_Length(geometry) PUBLIC KEEP "calculate length using 2 or 3 dims, whatever is available" FUNCTION ST_Length_WGS84(geometry) PUBLIC NEW spheroid length with WGS84 set automatically FUNCTION "length3d_spheroid(geometry, spheroid)" PUBLIC DEPRECATE FUNCTION "ST_3dlength_spheroid(geometry, spheroid)" PUBLIC DEPRECATE FUNCTION "length_spheroid(geometry, spheroid)" PUBLIC DEPRECATE FUNCTION "ST_length_spheroid(geometry, spheroid)" PUBLIC KEEP FUNCTION "length2d_spheroid(geometry, spheroid)" PUBLIC DEPRECATE FUNCTION "ST_length2d_spheroid(geometry, spheroid)" PUBLIC DEPRECATE FUNCTION perimeter3d(geometry) PUBLIC DEPRECATE FUNCTION ST_3DPerimeter(geometry) PUBLIC DEPRECATE FUNCTION perimeter2d(geometry) PUBLIC DEPRECATE FUNCTION ST_perimeter2d(geometry) PUBLIC DEPRECATE FUNCTION perimeter(geometry) PUBLIC DEPRECATE FUNCTION ST_Perimeter(geometry) PUBLIC KEEP FUNCTION area2d(geometry) PUBLIC DEPRECATE FUNCTION ST_area2d(geometry) PUBLIC DEPRECATE FUNCTION area(geometry) PUBLIC DEPRECATE FUNCTION ST_Area(geometry) PUBLIC KEEP FUNCTION "distance_spheroid(geometry,geometry,spheroid)" PUBLIC DEPRECATE FUNCTION "ST_Distance_WGS84(geometry,geometry)" PUBLIC NEW calculate distance with WGS84 autoset for spheroid FUNCTION "ST_distance_spheroid(geometry,geometry,spheroid)" PUBLIC KEEP FUNCTION "distance_sphere(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_distance_sphere(geometry,geometry)" PUBLIC KEEP FUNCTION "distance(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Distance(geometry,geometry)" PUBLIC KEEP FUNCTION "max_distance(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_max_distance(geometry,geometry)" PUBLIC KEEP FUNCTION "point_inside_circle(geometry,float8,float8,float8)" PUBLIC DEPRECATE FUNCTION "ST_point_inside_circle(geometry,float8,float8,float8)" PUBLIC KEEP FUNCTION "azimuth(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_azimuth(geometry,geometry)" PUBLIC KEEP FUNCTION force_2d(geometry) PUBLIC DEPRECATE FUNCTION ST_force_2d(geometry) PUBLIC KEEP FUNCTION force_3dz(geometry) PUBLIC DEPRECATE FUNCTION ST_force_3dz(geometry) PUBLIC KEEP FUNCTION force_3d(geometry) PUBLIC DEPRECATE FUNCTION ST_force_3d(geometry) PUBLIC KEEP FUNCTION force_3dm(geometry) PUBLIC DEPRECATE FUNCTION ST_force_3dm(geometry) PUBLIC KEEP FUNCTION force_4d(geometry) PUBLIC DEPRECATE FUNCTION ST_force_4d(geometry) PUBLIC KEEP FUNCTION force_collection(geometry) PUBLIC DEPRECATE FUNCTION ST_force_collection(geometry) PUBLIC KEEP FUNCTION multi(geometry) PUBLIC DEPRECATE FUNCTION ST_multi(geometry) PUBLIC KEEP FUNCTION "expand(box3d,float8)" PUBLIC DEPRECATE FUNCTION "ST_Expand(box3d,float8)" PUBLIC KEEP FUNCTION "expand(box2d,float8)" PUBLIC DEPRECATE FUNCTION "ST_expand(box2d,float8)" PUBLIC KEEP FUNCTION "expand(geometry,float8)" PUBLIC DEPRECATE FUNCTION "ST_expand(geometry,float8)" PUBLIC KEEP FUNCTION envelope(geometry) PUBLIC DEPRECATE FUNCTION ST_Envelope(geometry) PUBLIC KEEP FUNCTION reverse(geometry) PUBLIC DEPRECATE FUNCTION ST_Reverse(geometry) PUBLIC KEEP FUNCTION ForceRHR(geometry) PUBLIC DEPRECATE FUNCTION ST_ForceRHR(geometry) PUBLIC KEEP FUNCTION noop(geometry) PRIVATE RENAME postgis_noop(geometry) FUNCTION ST_noop(geometry) PRIVATE DELETE FUNCTION zmflag(geometry) PUBLIC DEPRECATE FUNCTION ST_zmflag(geometry) PUBLIC DEPRECATE "replace with st_hasz, st_hasm from iso" FUNCTION hasBBOX(geometry) PRIVATE RENAME postgis_bbox_cached(geometry) FUNCTION ST_HasBBOX(geometry) PRIVATE DELETE FUNCTION ndims(geometry) PUBLIC DEPRECATE FUNCTION ST_NDims(geometry) PUBLIC KEEP FUNCTION AsEWKT(geometry) PUBLIC DEPRECATE FUNCTION ST_AsEWKT(geometry) PUBLIC KEEP FUNCTION AsEWKB(geometry) PUBLIC DEPRECATE FUNCTION ST_AsEWKB(geometry) PUBLIC KEEP FUNCTION AsHEXEWKB(geometry) PUBLIC DEPRECATE FUNCTION ST_AsHEXEWKB(geometry) PUBLIC KEEP FUNCTION "AsHEXEWKB(geometry, text)" PUBLIC DEPRECATE FUNCTION "ST_AsHEXEWKB(geometry, text)" PUBLIC KEEP FUNCTION "AsEWKB(geometry,text)" PUBLIC DEPRECATE FUNCTION "ST_AsEWKB(geometry,text)" PUBLIC KEEP FUNCTION GeomFromEWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_GeomFromEWKB(bytea) PUBLIC KEEP FUNCTION GeomFromEWKT(text) PUBLIC DEPRECATE FUNCTION ST_GeomFromEWKT(text) PUBLIC KEEP FUNCTION cache_bbox() PUBLIC RENAME postgis_cache_bbox() this is a utility trigger FUNCTION ST_Cache_BBox() PUBLIC DEPRECATE FUNCTION "MakePoint(float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_MakePoint(float8, float8)" PUBLIC KEEP FUNCTION "MakePoint(float8, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_MakePoint(float8, float8, float8)" PUBLIC KEEP FUNCTION "MakePoint(float8, float8, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_MakePoint(float8, float8, float8, float8)" PUBLIC KEEP FUNCTION "MakePointM(float8, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_MakePointM(float8, float8, float8)" PUBLIC KEEP FUNCTION "MakeBox2d(geometry, geometry)" PUBLIC DEPRECATE FUNCTION "ST_MakeBox2d(geometry, geometry)" PUBLIC KEEP FUNCTION "MakeBox3d(geometry, geometry)" PUBLIC DEPRECATE FUNCTION "ST_3DMakeBox(geometry, geometry)" PUBLIC KEEP FUNCTION makeline_garray (geometry[]) PUBLIC DEPRECATE FUNCTION ST_MakeLine_GArray (geometry[]) PUBLIC DEPRECATE FUNCTION ST_MakeLine (geometry[]) PUBLIC KEEP FUNCTION LineFromMultiPoint(geometry) PUBLIC DEPRECATE FUNCTION ST_LineFromMultiPoint(geometry) PUBLIC KEEP FUNCTION "MakeLine(geometry, geometry)" PUBLIC DEPRECATE FUNCTION "ST_MakeLine(geometry, geometry)" PUBLIC KEEP FUNCTION "AddPoint(geometry, geometry)" PUBLIC DEPRECATE FUNCTION "ST_AddPoint(geometry, geometry)" PUBLIC KEEP FUNCTION "AddPoint(geometry, geometry, integer)" PUBLIC DEPRECATE FUNCTION "ST_AddPoint(geometry, geometry, integer)" PUBLIC KEEP FUNCTION "RemovePoint(geometry, integer)" PUBLIC DEPRECATE FUNCTION "ST_RemovePoint(geometry, integer)" PUBLIC KEEP FUNCTION "SetPoint(geometry, integer, geometry)" PUBLIC DEPRECATE FUNCTION "ST_SetPoint(geometry, integer, geometry)" PUBLIC KEEP FUNCTION "MakePolygon(geometry, geometry[])" PUBLIC DEPRECATE FUNCTION "ST_MakePolygon(geometry, geometry[])" PUBLIC KEEP FUNCTION MakePolygon(geometry) PUBLIC DEPRECATE FUNCTION ST_MakePolygon(geometry) PUBLIC KEEP FUNCTION BuildArea(geometry) PUBLIC DEPRECATE FUNCTION ST_BuildArea(geometry) PUBLIC KEEP FUNCTION Polygonize_GArray (geometry[]) PUBLIC DEPRECATE FUNCTION ST_Polygonize_GArray (geometry[]) PUBLIC DEPRECATE FUNCTION ST_Polygonize (geometry[]) PUBLIC KEEP FUNCTION LineMerge(geometry) PUBLIC DEPRECATE FUNCTION ST_LineMerge(geometry) PUBLIC KEEP FUNCTION Dump(geometry) PUBLIC DEPRECATE FUNCTION ST_Dump(geometry) PUBLIC KEEP FUNCTION DumpRings(geometry) PUBLIC DEPRECATE FUNCTION ST_DumpRings(geometry) PUBLIC KEEP FUNCTION "combine_bbox(box2d,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Combine_BBox(box2d,geometry)" PUBLIC RENAME "postgis_combine_bbox(box2d, geometry)" AGGREGATE Extent( PUBLIC DEPRECATE AGGREGATE ST_Extent( PUBLIC KEEP FUNCTION "combine_bbox(box3d,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Combine_BBox(box3d,geometry)" PUBLIC KEEP AGGREGATE Extent3d( PUBLIC DEPRECATE AGGREGATE ST_3DExtent( PUBLIC KEEP FUNCTION "estimated_extent(text,text,text) RETURNS box2d AS" PUBLIC DEPRECATE FUNCTION "ST_estimated_extent(text,text,text) RETURNS box2d AS" PUBLIC KEEP FUNCTION "estimated_extent(text,text) RETURNS box2d AS" PUBLIC DEPRECATE FUNCTION "ST_estimated_extent(text,text) RETURNS box2d AS" PUBLIC KEEP FUNCTION "find_extent(text,text,text) RETURNS box2d AS" PUBLIC DEPRECATE FUNCTION "ST_find_extent(text,text,text) RETURNS box2d AS" PUBLIC KEEP FUNCTION "find_extent(text,text) RETURNS box2d AS" PUBLIC DEPRECATE FUNCTION "ST_find_extent(text,text) RETURNS box2d AS" PUBLIC KEEP FUNCTION rename_geometry_table_constraints() RETURNS text PUBLIC KEEP FUNCTION fix_geometry_columns() RETURNS text PUBLIC KEEP FUNCTION populate_geometry_columns() PUBLIC KEEP FUNCTION populate_geometry_columns(tbl_oid oid) PUBLIC KEEP FUNCTION probe_geometry_columns() RETURNS text AS PUBLIC KEEP FUNCTION "AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer)" PUBLIC KEEP FUNCTION "AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS $$" PUBLIC KEEP FUNCTION "AddGeometryColumn(varchar,varchar,integer,varchar,integer) RETURNS text AS $$" PUBLIC KEEP FUNCTION "DropGeometryColumn(varchar, varchar,varchar,varchar)" PUBLIC KEEP FUNCTION "DropGeometryColumn(varchar,varchar,varchar)" PUBLIC KEEP FUNCTION "DropGeometryColumn(varchar,varchar)" PUBLIC KEEP FUNCTION "DropGeometryTable(varchar, varchar,varchar)" PUBLIC KEEP FUNCTION "DropGeometryTable(varchar,varchar) RETURNS text AS" PUBLIC KEEP FUNCTION DropGeometryTable(varchar) RETURNS text AS PUBLIC KEEP FUNCTION "UpdateGeometrySRID(varchar,varchar,varchar,varchar,integer)" PUBLIC KEEP FUNCTION "UpdateGeometrySRID(varchar,varchar,varchar,integer)" PUBLIC KEEP FUNCTION "UpdateGeometrySRID(varchar,varchar,integer)" PUBLIC KEEP FUNCTION "find_srid(varchar,varchar,varchar) RETURNS int4 AS" PUBLIC KEEP FUNCTION get_proj4_from_srid(integer) RETURNS text AS PUBLIC KEEP FUNCTION "transform_geometry(geometry,text,text,int)" PRIVATE RENAME "postgis_transform_geometry(geometry, text, text, int)" FUNCTION "transform(geometry,integer)" PUBLIC DEPRECATE FUNCTION "ST_Transform(geometry,integer)" PUBLIC KEEP FUNCTION postgis_version() RETURNS text PUBLIC KEEP FUNCTION postgis_proj_version() RETURNS text PUBLIC KEEP FUNCTION postgis_scripts_installed() RETURNS text PUBLIC KEEP FUNCTION postgis_lib_version() RETURNS text PUBLIC KEEP FUNCTION postgis_scripts_released() RETURNS text PUBLIC KEEP FUNCTION postgis_uses_stats() RETURNS bool PUBLIC KEEP FUNCTION postgis_geos_version() RETURNS text PUBLIC KEEP FUNCTION postgis_scripts_build_date() RETURNS text PUBLIC KEEP FUNCTION postgis_lib_build_date() RETURNS text PUBLIC KEEP FUNCTION postgis_full_version() RETURNS text PUBLIC KEEP FUNCTION box2d(geometry) PRIVATE KEEP FUNCTION ST_box2d(geometry) PRIVATE DEPRECATE "these are pgsql casts, they should use pgsql convention" FUNCTION box3d(geometry) PRIVATE KEEP FUNCTION ST_box3d(geometry) PRIVATE DEPRECATE FUNCTION box(geometry) PRIVATE KEEP FUNCTION ST_box(geometry) PRIVATE DEPRECATE FUNCTION box2d(box3d) PRIVATE KEEP FUNCTION ST_box2d(box3d) PRIVATE DEPRECATE FUNCTION box3d(box2d) PRIVATE KEEP FUNCTION ST_box3d(box2d) PRIVATE DEPRECATE FUNCTION box(box3d) PRIVATE KEEP FUNCTION ST_box(box3d) PRIVATE DEPRECATE FUNCTION text(geometry) PRIVATE KEEP FUNCTION ST_text(geometry) PRIVATE DEPRECATE FUNCTION box3dtobox(box3d) PRIVATE KEEP FUNCTION geometry(box2d) PRIVATE KEEP FUNCTION ST_geometry(box2d) PRIVATE DEPRECATE FUNCTION geometry(box3d) PRIVATE KEEP FUNCTION ST_geometry(box3d) PRIVATE DEPRECATE FUNCTION geometry(text) PRIVATE KEEP FUNCTION ST_geometry(text) PRIVATE DEPRECATE FUNCTION geometry(chip) PRIVATE DELETE FUNCTION ST_geometry(chip) PRIVATE DELETE FUNCTION geometry(bytea) PRIVATE KEEP FUNCTION ST_geometry(bytea) PRIVATE DEPRECATE FUNCTION bytea(geometry) PRIVATE KEEP FUNCTION ST_bytea(geometry) PRIVATE DEPRECATE FUNCTION text(bool) PRIVATE KEEP FUNCTION ST_text(bool) PRIVATE DEPRECATE FUNCTION "Simplify(geometry, float8)" PUBLIC DEPRECATE FUNCTION "ST_Simplify(geometry, float8)" PUBLIC KEEP FUNCTION "SnapToGrid(geometry, float8, float8, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_SnapToGrid(geometry, float8, float8, float8, float8)" PUBLIC KEEP FUNCTION "SnapToGrid(geometry, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_SnapToGrid(geometry, float8, float8)" PUBLIC KEEP FUNCTION "SnapToGrid(geometry, float8)" PUBLIC DEPRECATE FUNCTION "ST_SnapToGrid(geometry, float8)" PUBLIC KEEP FUNCTION "SnapToGrid(geometry, geometry, float8, float8, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_SnapToGrid(geometry, geometry, float8, float8, float8, float8)" PUBLIC KEEP FUNCTION "Segmentize(geometry, float8)" PUBLIC DEPRECATE FUNCTION "ST_Segmentize(geometry, float8)" PUBLIC KEEP FUNCTION "line_interpolate_point(geometry, float8)" PUBLIC DEPRECATE FUNCTION "ST_line_interpolate_point(geometry, float8)" PUBLIC KEEP FUNCTION "line_substring(geometry, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_line_substring(geometry, float8, float8)" PUBLIC KEEP FUNCTION "line_locate_point(geometry, geometry)" PUBLIC DEPRECATE FUNCTION "ST_line_locate_point(geometry, geometry)" PUBLIC KEEP FUNCTION "locate_between_measures(geometry, float8, float8)" PUBLIC DEPRECATE FUNCTION "ST_locate_between_measures(geometry, float8, float8)" PUBLIC KEEP FUNCTION "locate_along_measure(geometry, float8)" PUBLIC DEPRECATE FUNCTION "ST_locate_along_measure(geometry, float8)" PUBLIC KEEP FUNCTION "intersection(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Intersection(geometry,geometry)" PUBLIC KEEP FUNCTION "buffer(geometry,float8)" PUBLIC DEPRECATE FUNCTION "ST_Buffer(geometry,float8)" PUBLIC KEEP FUNCTION "buffer(geometry,float8,integer)" PUBLIC DEPRECATE FUNCTION "ST_buffer(geometry,float8,integer)" PUBLIC KEEP FUNCTION convexhull(geometry) PUBLIC DEPRECATE FUNCTION ST_ConvexHull(geometry) PUBLIC KEEP FUNCTION "_ST_LineCrossingDirection(geometry, geometry)" PUBLIC KEEP FUNCTION "ST_LineCrossingDirection(geometry, geometry)" PUBLIC KEEP FUNCTION "ST_LocateBetweenElevations(geometry, float8, float8)" PUBLIC KEEP FUNCTION "ST_SimplifyPreserveTopology(geometry, float8)" PUBLIC KEEP FUNCTION ST_IsValidReason(geometry) PUBLIC KEEP FUNCTION "difference(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Difference(geometry,geometry)" PUBLIC KEEP FUNCTION boundary(geometry) PUBLIC DEPRECATE FUNCTION ST_Boundary(geometry) PUBLIC KEEP FUNCTION "symdifference(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_SymDifference(geometry,geometry)" PUBLIC KEEP FUNCTION "symmetricdifference(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_symmetricdifference(geometry,geometry)" PUBLIC KEEP FUNCTION "GeomUnion(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Union(geometry,geometry)" PUBLIC KEEP FUNCTION "collector(geometry, geometry)" PUBLIC DELETE dupe of st_collect FUNCTION "ST_collector(geometry, geometry)" PUBLIC DELETE dupe of st_collect FUNCTION "collect(geometry, geometry)" PUBLIC DEPRECATE FUNCTION "ST_collect(geometry, geometry)" PUBLIC KEEP AGGREGATE memcollect( PUBLIC DEPRECATE AGGREGATE ST_memcollect( PUBLIC KEEP FUNCTION "geom_accum (geometry[],geometry)" PUBLIC DELETE superceded by new aggregator FUNCTION "ST_geom_accum (geometry[],geometry)" PUBLIC DELETE superceded by new aggregator FUNCTION collect_garray (geometry[]) PUBLIC DELETE superceded by new aggregator FUNCTION ST_collect_garray (geometry[]) PUBLIC DELETE superceded by new aggregator FUNCTION ST_collect (geometry[]) PUBLIC KEEP AGGREGATE MemGeomUnion ( PUBLIC DEPRECATE AGGREGATE ST_MemUnion ( PUBLIC KEEP FUNCTION pgis_abs_in(cstring) PRIVATE KEEP FUNCTION pgis_abs_out(pgis_abs) PRIVATE KEEP TYPE pgis_abs ( PRIVATE KEEP FUNCTION "pgis_geometry_accum_transfn(pgis_abs, geometry)" PRIVATE KEEP FUNCTION pgis_geometry_accum_finalfn(pgis_abs) PRIVATE KEEP FUNCTION pgis_geometry_union_finalfn(pgis_abs) PRIVATE KEEP FUNCTION pgis_geometry_collect_finalfn(pgis_abs) PRIVATE KEEP FUNCTION pgis_geometry_polygonize_finalfn(pgis_abs) PRIVATE KEEP FUNCTION pgis_geometry_makeline_finalfn(pgis_abs) PRIVATE KEEP AGGREGATE accum ( PUBLIC DEPRECATE AGGREGATE ST_Accum ( PUBLIC KEEP AGGREGATE accum_old ( PUBLIC DELETE AGGREGATE ST_accum_old ( PUBLIC DELETE FUNCTION unite_garray (geometry[]) PUBLIC DEPRECATE FUNCTION ST_unite_garray (geometry[]) PUBLIC DEPRECATE superceded by st_union(geometry[]) FUNCTION ST_Union (geometry[]) PUBLIC KEEP AGGREGATE GeomUnion_Old ( PUBLIC DELETE AGGREGATE ST_Union_Old ( PUBLIC DELETE AGGREGATE ST_Union ( PUBLIC KEEP AGGREGATE collect ( PUBLIC DEPRECATE AGGREGATE ST_Collect ( PUBLIC KEEP AGGREGATE Polygonize ( PUBLIC DEPRECATE AGGREGATE ST_Polygonize ( PUBLIC KEEP AGGREGATE makeline ( PUBLIC DEPRECATE AGGREGATE ST_MakeLine ( PUBLIC KEEP FUNCTION "relate(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_relate(geometry,geometry)" PUBLIC KEEP FUNCTION "relate(geometry,geometry,text)" PUBLIC DEPRECATE FUNCTION "ST_Relate(geometry,geometry,text)" PUBLIC KEEP FUNCTION "disjoint(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Disjoint(geometry,geometry)" PUBLIC KEEP FUNCTION "touches(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "_ST_Touches(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_Touches(geometry,geometry)" PUBLIC KEEP FUNCTION "_ST_DWithin(geometry,geometry,float8)" PUBLIC KEEP FUNCTION "ST_DWithin(geometry, geometry, float8)" PUBLIC KEEP FUNCTION "intersects(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "_ST_Intersects(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_Intersects(geometry,geometry)" PUBLIC KEEP FUNCTION "crosses(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "_ST_Crosses(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_Crosses(geometry,geometry)" PUBLIC KEEP FUNCTION "within(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "_ST_Within(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_Within(geometry,geometry)" PUBLIC KEEP FUNCTION "Contains(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "_ST_Contains(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_Contains(geometry,geometry)" PUBLIC KEEP FUNCTION "_ST_CoveredBy(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_CoveredBy(geometry,geometry)" PUBLIC KEEP FUNCTION "_ST_Covers(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_Covers(geometry,geometry)" PUBLIC KEEP FUNCTION "_ST_ContainsProperly(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_ContainsProperly(geometry,geometry)" PUBLIC KEEP FUNCTION "overlaps(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "_ST_Overlaps(geometry,geometry)" PUBLIC KEEP FUNCTION "ST_Overlaps(geometry,geometry)" PUBLIC KEEP FUNCTION IsValid(geometry) PUBLIC DEPRECATE FUNCTION ST_IsValid(geometry) PUBLIC KEEP FUNCTION GEOSnoop(geometry) PRIVATE RENAME postgis_geos_noop FUNCTION Centroid(geometry) PUBLIC DEPRECATE FUNCTION ST_Centroid(geometry) PUBLIC KEEP FUNCTION IsRing(geometry) PUBLIC DEPRECATE FUNCTION ST_IsRing(geometry) PUBLIC KEEP FUNCTION PointOnSurface(geometry) PUBLIC DEPRECATE FUNCTION ST_PointOnSurface(geometry) PUBLIC KEEP FUNCTION IsSimple(geometry) PUBLIC DEPRECATE FUNCTION ST_IsSimple(geometry) PUBLIC KEEP FUNCTION "Equals(geometry,geometry)" PUBLIC DEPRECATE FUNCTION "ST_Equals(geometry,geometry)" PUBLIC KEEP FUNCTION "AsSVG(geometry,int4,int4)" PUBLIC DEPRECATE FUNCTION "ST_AsSVG(geometry,int4,int4)" PUBLIC KEEP FUNCTION "AsSVG(geometry,int4)" PUBLIC DEPRECATE FUNCTION "ST_AsSVG(geometry,int4)" PUBLIC KEEP FUNCTION AsSVG(geometry) PUBLIC DEPRECATE FUNCTION ST_AsSVG(geometry) PUBLIC KEEP FUNCTION "_ST_AsGML(int4, geometry, int4)" PUBLIC KEEP FUNCTION "AsGML(geometry, int4)" PUBLIC DEPRECATE FUNCTION "ST_AsGML(geometry, int4)" PUBLIC KEEP FUNCTION AsGML(geometry) PUBLIC DEPRECATE FUNCTION ST_AsGML(geometry) PUBLIC KEEP FUNCTION "ST_AsGML(int4, geometry)" PUBLIC KEEP FUNCTION "ST_AsGML(int4, geometry, int4)" PUBLIC KEEP FUNCTION "_ST_AsKML(int4, geometry, int4)" PUBLIC KEEP FUNCTION "AsKML(geometry, int4)" PUBLIC DEPRECATE FUNCTION "ST_AsKML(geometry, int4)" PUBLIC KEEP FUNCTION AsKML(geometry) PUBLIC DEPRECATE FUNCTION "AsKML(int4, geometry, int4)" PUBLIC DEPRECATE FUNCTION ST_AsKML(geometry) PUBLIC KEEP FUNCTION "ST_AsKML(int4, geometry)" PUBLIC KEEP FUNCTION "ST_AsKML(int4, geometry, int4)" PUBLIC KEEP FUNCTION "_ST_AsGeoJson(int4, geometry, int4, int4)" PUBLIC KEEP FUNCTION "ST_AsGeoJson(geometry, int4)" PUBLIC KEEP FUNCTION ST_AsGeoJson(geometry) PUBLIC KEEP FUNCTION "ST_AsGeoJson(int4, geometry)" PUBLIC KEEP FUNCTION "ST_AsGeoJson(int4, geometry, int4)" PUBLIC KEEP FUNCTION "ST_AsGeoJson(geometry, int4, int4)" PUBLIC KEEP FUNCTION "ST_AsGeoJson(int4, geometry, int4, int4)" PUBLIC KEEP FUNCTION NumPoints(geometry) PUBLIC DEPRECATE FUNCTION ST_NumPoints(geometry) PUBLIC KEEP FUNCTION NumGeometries(geometry) PUBLIC DEPRECATE FUNCTION ST_NumGeometries(geometry) PUBLIC KEEP FUNCTION "GeometryN(geometry,integer)" PUBLIC DEPRECATE FUNCTION "ST_GeometryN(geometry,integer)" PUBLIC KEEP FUNCTION Dimension(geometry) PUBLIC DEPRECATE FUNCTION ST_Dimension(geometry) PUBLIC KEEP FUNCTION ExteriorRing(geometry) PUBLIC DEPRECATE FUNCTION ST_ExteriorRing(geometry) PUBLIC KEEP FUNCTION NumInteriorRings(geometry) PUBLIC DEPRECATE FUNCTION ST_NumInteriorRings(geometry) PUBLIC KEEP FUNCTION NumInteriorRing(geometry) PUBLIC DEPRECATE FUNCTION ST_NumInteriorRing(geometry) PUBLIC KEEP FUNCTION "InteriorRingN(geometry,integer)" PUBLIC DEPRECATE FUNCTION "ST_InteriorRingN(geometry,integer)" PUBLIC KEEP FUNCTION GeometryTYPE(geometry) PUBLIC DEPRECATE FUNCTION ST_GeometryTYPE(geometry) PUBLIC KEEP FUNCTION "PointN(geometry,integer)" PUBLIC DEPRECATE FUNCTION "ST_PointN(geometry,integer)" PUBLIC KEEP FUNCTION X(geometry) PUBLIC DEPRECATE FUNCTION ST_X(geometry) PUBLIC KEEP FUNCTION Y(geometry) PUBLIC DEPRECATE FUNCTION ST_Y(geometry) PUBLIC KEEP FUNCTION Z(geometry) PUBLIC DEPRECATE FUNCTION SE_Z(geometry) PUBLIC KEEP FUNCTION ST_Z(geometry) PUBLIC KEEP ESRI compatibility (feh!) FUNCTION M(geometry) PUBLIC DEPRECATE FUNCTION ST_M(geometry) PUBLIC KEEP FUNCTION StartPoint(geometry) PUBLIC DEPRECATE FUNCTION ST_StartPoint(geometry) PUBLIC KEEP FUNCTION EndPoint(geometry) PUBLIC DEPRECATE FUNCTION ST_EndPoint(geometry) PUBLIC KEEP FUNCTION IsClosed(geometry) PUBLIC DEPRECATE FUNCTION ST_IsClosed(geometry) PUBLIC KEEP FUNCTION IsEmpty(geometry) PUBLIC DEPRECATE FUNCTION ST_IsEmpty(geometry) PUBLIC KEEP FUNCTION SRID(geometry) PUBLIC DEPRECATE FUNCTION ST_SRID(geometry) PUBLIC KEEP FUNCTION "SetSRID(geometry,int4)" PUBLIC DEPRECATE FUNCTION "ST_SetSRID(geometry,int4)" PUBLIC KEEP FUNCTION AsBinary(geometry) PUBLIC DEPRECATE FUNCTION ST_AsBinary(geometry) PUBLIC KEEP FUNCTION "AsBinary(geometry,text)" PUBLIC DEPRECATE FUNCTION "ST_AsBinary(geometry,text)" PUBLIC KEEP FUNCTION AsText(geometry) PUBLIC DEPRECATE FUNCTION ST_AsText(geometry) PUBLIC KEEP FUNCTION GeometryFromText(text) PUBLIC DEPRECATE FUNCTION ST_GeometryFromText(text) PUBLIC KEEP FUNCTION "GeometryFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_GeometryFromText(text, int4)" PUBLIC KEEP FUNCTION GeomFromText(text) PUBLIC DEPRECATE FUNCTION ST_GeomFromText(text) PUBLIC KEEP FUNCTION "GeomFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_GeomFromText(text, int4)" PUBLIC KEEP FUNCTION PointFromText(text) PUBLIC DEPRECATE FUNCTION ST_PointFromText(text) PUBLIC KEEP FUNCTION "PointFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_PointFromText(text, int4)" PUBLIC KEEP FUNCTION LineFromText(text) PUBLIC DEPRECATE FUNCTION ST_LineFromText(text) PUBLIC KEEP FUNCTION "LineFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_LineFromText(text, int4)" PUBLIC KEEP FUNCTION LineStringFromText(text) PUBLIC DEPRECATE FUNCTION "LineStringFromText(text, int4)" PUBLIC DEPRECATE FUNCTION PolyFromText(text) PUBLIC DEPRECATE FUNCTION ST_PolyFromText(text) PUBLIC KEEP FUNCTION "PolyFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_PolyFromText(text, int4)" PUBLIC KEEP FUNCTION "PolygonFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_PolygonFromText(text, int4)" PUBLIC KEEP FUNCTION PolygonFromText(text) PUBLIC DEPRECATE FUNCTION ST_PolygonFromText(text) PUBLIC KEEP FUNCTION "MLineFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_MLineFromText(text, int4)" PUBLIC KEEP FUNCTION MLineFromText(text) PUBLIC DEPRECATE FUNCTION ST_MLineFromText(text) PUBLIC KEEP FUNCTION MultiLineStringFromText(text) PUBLIC DEPRECATE FUNCTION ST_MultiLineStringFromText(text) PUBLIC KEEP FUNCTION "MultiLineStringFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_MultiLineStringFromText(text, int4)" PUBLIC KEEP FUNCTION "MPointFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_MPointFromText(text, int4)" PUBLIC KEEP FUNCTION MPointFromText(text) PUBLIC DEPRECATE FUNCTION ST_MPointFromText(text) PUBLIC KEEP FUNCTION "MultiPointFromText(text, int4)" PUBLIC DEPRECATE FUNCTION MultiPointFromText(text) PUBLIC DEPRECATE FUNCTION ST_MultiPointFromText(text) PUBLIC KEEP FUNCTION MultiPointFromText(text) PUBLIC DEPRECATE FUNCTION ST_MultiPointFromText(text) PUBLIC KEEP FUNCTION "MPolyFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_MPolyFromText(text, int4)" PUBLIC KEEP FUNCTION MPolyFromText(text) PUBLIC DEPRECATE FUNCTION ST_MPolyFromText(text) PUBLIC KEEP FUNCTION "MultiPolygonFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_MultiPolygonFromText(text, int4)" PUBLIC KEEP FUNCTION MultiPolygonFromText(text) PUBLIC DEPRECATE FUNCTION ST_MultiPolygonFromText(text) PUBLIC KEEP FUNCTION "GeomCollFromText(text, int4)" PUBLIC DEPRECATE FUNCTION "ST_GeomCollFromText(text, int4)" PUBLIC KEEP FUNCTION GeomCollFromText(text) PUBLIC DEPRECATE FUNCTION ST_GeomCollFromText(text) PUBLIC KEEP FUNCTION GeomFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_GeomFromWKB(bytea) PUBLIC KEEP FUNCTION "GeomFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_GeomFromWKB(bytea, int)" PUBLIC KEEP FUNCTION "PointFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_PointFromWKB(bytea, int)" PUBLIC KEEP FUNCTION PointFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_PointFromWKB(bytea) PUBLIC KEEP FUNCTION "LineFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_LineFromWKB(bytea, int)" PUBLIC KEEP FUNCTION LineFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_LineFromWKB(bytea) PUBLIC KEEP FUNCTION "LinestringFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_LinestringFromWKB(bytea, int)" PUBLIC KEEP FUNCTION LinestringFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_LinestringFromWKB(bytea) PUBLIC KEEP FUNCTION "PolyFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_PolyFromWKB(bytea, int)" PUBLIC KEEP FUNCTION PolyFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_PolyFromWKB(bytea) PUBLIC KEEP FUNCTION "PolygonFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_PolygonFromWKB(bytea, int)" PUBLIC KEEP FUNCTION PolygonFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_PolygonFromWKB(bytea) PUBLIC KEEP FUNCTION "MPointFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_MPointFromWKB(bytea, int)" PUBLIC KEEP FUNCTION MPointFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_MPointFromWKB(bytea) PUBLIC KEEP FUNCTION "MultiPointFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_MultiPointFromWKB(bytea, int)" PUBLIC KEEP FUNCTION MultiPointFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_MultiPointFromWKB(bytea) PUBLIC KEEP FUNCTION "MultiLineFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "MultiLineFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION MultiLineFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_MultiLineFromWKB(bytea) PUBLIC KEEP FUNCTION "MLineFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_MLineFromWKB(bytea, int)" PUBLIC KEEP FUNCTION MLineFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_MLineFromWKB(bytea) PUBLIC KEEP FUNCTION "MPolyFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_MPolyFromWKB(bytea, int)" PUBLIC KEEP FUNCTION MPolyFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_MPolyFromWKB(bytea) PUBLIC KEEP FUNCTION "MultiPolyFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_MultiPolyFromWKB(bytea, int)" PUBLIC KEEP FUNCTION MultiPolyFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_MultiPolyFromWKB(bytea) PUBLIC KEEP FUNCTION "GeomCollFromWKB(bytea, int)" PUBLIC DEPRECATE FUNCTION "ST_GeomCollFromWKB(bytea, int)" PUBLIC KEEP FUNCTION GeomCollFromWKB(bytea) PUBLIC DEPRECATE FUNCTION ST_GeomCollFromWKB(bytea) PUBLIC KEEP FUNCTION "BdPolyFromText(text, integer)" PUBLIC DEPRECATE FUNCTION "ST_BdPolyFromText(text, integer)" PUBLIC KEEP FUNCTION "BdMPolyFromText(text, integer)" PUBLIC DEPRECATE FUNCTION "ST_BdMPolyFromText(text, integer)" PUBLIC KEEP FUNCTION "ST_CurveToLine(geometry, integer)" PUBLIC KEEP FUNCTION ST_CurveToLine(geometry) PUBLIC KEEP FUNCTION ST_HasArc(geometry) PUBLIC KEEP FUNCTION ST_LineToCurve(geometry) PUBLIC KEEP postgis-2.1.2+dfsg.orig/doc/extras_tigergeocoder.xml0000644000000000000000000022470712220103635021265 0ustar rootroot A plpgsql based geocoder written to work with the TIGER (Topologically Integrated Geographic Encoding and Referencing system ) / Line and Master Address database export released by the US Census Bureau. There are four components to the geocoder: the data loader functions, the address normalizer, the address geocoder, and the reverse geocoder. The latest version updated to use the TIGER 2011 and 2012 census data is located in the extras/tiger_geocoder/tiger_2011 folder. It defaults to downloading and installing TIGER 2012 files in PostGIS 2.1.0 and TIGER 2013 in PostGIS 2.1.1+. Although it is designed specifically for the US, a lot of the concepts and functions are applicable and can be adapted to work with other country address and road networks. The script builds a schema called tiger to house all the tiger related functions, reusable lookup data such as road type prefixes, suffixes, states, various control tables for managing data load, and skeleton base tables from which all the tiger loaded tables inherit from. Another schema called tiger_data is also created which houses all the census data for each state that the loader downloads from Census site and loads into the database. In the current model, each set of state tables is prefixed with the state code e.g ma_addr, ma_edges etc with constraints to enforce only that state data. Each of these tables inherits from the tables addr, faces, edges, etc located in the tiger schema. All the geocode functions only reference the base tables, so there is no requirement that the data schema be called tiger_data or that data can't be further partitioned into other schemas -- e.g a different schema for each state, as long as all the tables inherit from the tables in the tiger schema. If you are using tiger geocoder (tiger_2010), you can upgrade the scripts using the accompanying upgrade_geocoder.bat / .sh scripts in tiger_2011. One major change between tiger_2010 and tiger_2011/tiger_2012 is that the county and county and state tables are no longer broken out by state. We'll be refining the upgrade scripts until release. If you have data from tiger_2010 and want replace with tiger_2012 or tiger_2013 refer to New in PostGIS 2.1.0 release is ability to install tiger geocoder with PostgreSQL extension model if you are running PostgreSQL 9.1+. Refer to for details. Also new in PostGIS 2.1.0 is integration with pagc address standardizer PostgreSQL extension which source can be downloaded from PAGC PostgreSQL address standardizer extension and after install and install of the library in your PostGIS database, you can use the function as a drop in replacement for in-built . Refer to for compile and installation instructions. Design: The goal of this project is to build a fully functional geocoder that can process an arbitrary United States address string and using normalized TIGER census data, produce a point geometry and rating reflecting the location of the given address and likeliness of the location. The higher the rating number the worse the result. The reverse_geocode function, introduced in PostGIS 2.0.0 is useful for deriving the street address and cross streets of a GPS location. The geocoder should be simple for anyone familiar with PostGIS to install and use, and should be easily installable and usable on all platforms supported by PostGIS. It should be robust enough to function properly despite formatting and spelling errors. It should be extensible enough to be used with future data updates, or alternate data sources with a minimum of coding changes. The tiger schema must be added to the database search path for the functions to work properly. Tiger Geocoder There are a couple other open source geocoders for PostGIS, that unlike tiger geocoder have the advantage of multi-country geocoding support Nominatim and uses OpenStreetMap gazeteer formatted data. It requires osm2pgsql for loading the data, PostgreSQL 8.4+ and PostGIS 1.5+ to function. It is packaged as a webservice interface and seems designed to be called as a webservice. Just like the tiger geocoder, it has both a geocoder and a reverse geocoder component. From the documentation, it is unclear if it has a pure SQL interface like the tiger geocoder, or if a good deal of the logic is implemented in the web interface. GIS Graphy also utilizes PostGIS and like Nominatim works with OpenStreetMap (OSM) data. It comes with a loader to load OSM data and similar to Nominatim is capable of geocoding not just US. Much like Nominatim, it runs as a webservice and relies on Java 1.5, Servlet apps, Solr. GisGraphy is cross-platform and also has a reverse geocoder among some other neat features. Drop_Indexes_Generate_Script Generates a script that drops all non-primary key and non-unique indexes on tiger schema and user specified schema. Defaults schema to tiger_data if no schema is specified. text Drop_Indexes_Generate_Script text param_schema=tiger_data Description Generates a script that drops all non-primary key and non-unique indexes on tiger schema and user specified schema. Defaults schema to tiger_data if no schema is specified. This is useful for minimizing index bloat that may confuse the query planner or take up unnecessary space. Use in combination with to add just the indexes used by the geocoder. Availability: 2.0.0 Examples SELECT drop_indexes_generate_script() As actionsql; actionsql --------------------------------------------------------- DROP INDEX tiger.idx_tiger_countysub_lookup_lower_name; DROP INDEX tiger.idx_tiger_edges_countyfp; DROP INDEX tiger.idx_tiger_faces_countyfp; DROP INDEX tiger.tiger_place_the_geom_gist; DROP INDEX tiger.tiger_edges_the_geom_gist; DROP INDEX tiger.tiger_state_the_geom_gist; DROP INDEX tiger.idx_tiger_addr_least_address; DROP INDEX tiger.idx_tiger_addr_tlid; DROP INDEX tiger.idx_tiger_addr_zip; DROP INDEX tiger.idx_tiger_county_countyfp; DROP INDEX tiger.idx_tiger_county_lookup_lower_name; DROP INDEX tiger.idx_tiger_county_lookup_snd_name; DROP INDEX tiger.idx_tiger_county_lower_name; DROP INDEX tiger.idx_tiger_county_snd_name; DROP INDEX tiger.idx_tiger_county_the_geom_gist; DROP INDEX tiger.idx_tiger_countysub_lookup_snd_name; DROP INDEX tiger.idx_tiger_cousub_countyfp; DROP INDEX tiger.idx_tiger_cousub_cousubfp; DROP INDEX tiger.idx_tiger_cousub_lower_name; DROP INDEX tiger.idx_tiger_cousub_snd_name; DROP INDEX tiger.idx_tiger_cousub_the_geom_gist; DROP INDEX tiger_data.idx_tiger_data_ma_addr_least_address; DROP INDEX tiger_data.idx_tiger_data_ma_addr_tlid; DROP INDEX tiger_data.idx_tiger_data_ma_addr_zip; DROP INDEX tiger_data.idx_tiger_data_ma_county_countyfp; DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_lower_name; DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_snd_name; DROP INDEX tiger_data.idx_tiger_data_ma_county_lower_name; DROP INDEX tiger_data.idx_tiger_data_ma_county_snd_name; : : See Also , Drop_Nation_Tables_Generate_Script Generates a script that drops all tables in the specified schema that start with county_all, state_all or stae code followed by county or state. text Drop_Nation_Tables_Generate_Script text param_schema=tiger_data Description Generates a script that drops all tables in the specified schema that start with county_all, state_all or stae code followed by county or state. This is needed if you are upgrading from tiger_2010 to tiger_2011 data. Availability: 2.1.0 Examples SELECT drop_nation_tables_generate_script(); DROP TABLE tiger_data.county_all; DROP TABLE tiger_data.county_all_lookup; DROP TABLE tiger_data.state_all; DROP TABLE tiger_data.ma_county; DROP TABLE tiger_data.ma_state; See Also Drop_State_Tables_Generate_Script Generates a script that drops all tables in the specified schema that are prefixed with the state abbreviation. Defaults schema to tiger_data if no schema is specified. text Drop_State_Tables_Generate_Script text param_state text param_schema=tiger_data Description Generates a script that drops all tables in the specified schema that are prefixed with the state abbreviation. Defaults schema to tiger_data if no schema is specified. This function is useful for dropping tables of a state just before you reload a state in case something went wrong during your previous load. Availability: 2.0.0 Examples SELECT drop_state_tables_generate_script('PA'); DROP TABLE tiger_data.pa_addr; DROP TABLE tiger_data.pa_county; DROP TABLE tiger_data.pa_county_lookup; DROP TABLE tiger_data.pa_cousub; DROP TABLE tiger_data.pa_edges; DROP TABLE tiger_data.pa_faces; DROP TABLE tiger_data.pa_featnames; DROP TABLE tiger_data.pa_place; DROP TABLE tiger_data.pa_state; DROP TABLE tiger_data.pa_zip_lookup_base; DROP TABLE tiger_data.pa_zip_state; DROP TABLE tiger_data.pa_zip_state_loc; See Also Geocode Takes in an address as a string (or other normalized address) and outputs a set of possible locations which include a point geometry in NAD 83 long lat, a normalized address for each, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10, and restrict_region (defaults to NULL) setof record geocode varchar address integer max_results=10 geometry restrict_region=NULL norm_addy OUT addy geometry OUT geomout integer OUT rating setof record geocode norm_addy in_addy integer max_results=10 geometry restrict_region=NULL norm_addy OUT addy geometry OUT geomout integer OUT rating Description Takes in an address as a string (or already normalized address) and outputs a set of possible locations which include a point geometry in NAD 83 long lat, a normalized_address (addy) for each, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Uses Tiger data (edges,faces,addr), PostgreSQL fuzzy string matching (soundex,levenshtein) and PostGIS line interpolation functions to interpolate address along the Tiger edges. The higher the rating the less likely the geocode is right. The geocoded point is defaulted to offset 10 meters from center-line off to side (L/R) of street address is located on. Enhanced: 2.0.0 to support Tiger 2010 structured data and revised some logic to improve speed, accuracy of geocoding, and to offset point from centerline to side of street address is located on. New parameter max_results useful for specifying ot just return the best result. Examples: Basic The below examples timings are on a 3.0 GHZ single processor Windows 7 machine with 2GB ram running PostgreSQL 9.1rc1/PostGIS 2.0 loaded with all of MA,MN,CA, RI state Tiger data loaded. Exact matches are faster to compute (61ms) SELECT g.rating, ST_X(g.geomout) As lon, ST_Y(g.geomout) As lat, (addy).address As stno, (addy).streetname As street, (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip FROM geocode('75 State Street, Boston MA 02109') As g; rating | lon | lat | stno | street | styp | city | st | zip --------+-------------------+------------------+------+--------+------+--------+----+------- 0 | -71.0556722990239 | 42.3589914927049 | 75 | State | St | Boston | MA | 02109 Even if zip is not passed in the geocoder can guess (took about 122-150 ms) SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, (addy).address As stno, (addy).streetname As street, (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip FROM geocode('226 Hanover Street, Boston, MA',1) As g; rating | wktlonlat | stno | street | styp | city | st | zip --------+---------------------------+------+---------+------+--------+----+------- 1 | POINT(-71.05528 42.36316) | 226 | Hanover | St | Boston | MA | 02113 Can handle misspellings and provides more than one possible solution with ratings and takes longer (500ms). SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, (addy).address As stno, (addy).streetname As street, (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip FROM geocode('31 - 37 Stewart Street, Boston, MA 02116') As g; rating | wktlonlat | stno | street | styp | city | st | zip --------+---------------------------+------+--------+------+--------+----+------- 70 | POINT(-71.06459 42.35113) | 31 | Stuart | St | Boston | MA | 02116 Using to do a batch geocode of addresses. Easiest is to set max_results=1. Only process those not yet geocoded (have no rating). CREATE TABLE addresses_to_geocode(addid serial PRIMARY KEY, address text, lon numeric, lat numeric, new_address text, rating integer); INSERT INTO addresses_to_geocode(address) VALUES ('529 Main Street, Boston MA, 02129'), ('77 Massachusetts Avenue, Cambridge, MA 02139'), ('25 Wizard of Oz, Walaford, KS 99912323'), ('26 Capen Street, Medford, MA'), ('124 Mount Auburn St, Cambridge, Massachusetts 02138'), ('950 Main Street, Worcester, MA 01610'); -- only update the first 3 addresses (323-704 ms - there are caching and shared memory effects so first geocode you do is always slower) -- -- for large numbers of addresses you don't want to update all at once -- since the whole geocode must commit at once -- For this example we rejoin with LEFT JOIN -- and set to rating to -1 rating if no match -- to ensure we don't regeocode a bad address UPDATE addresses_to_geocode SET (rating, new_address, lon, lat) = ( COALESCE((g.geo).rating,-1), pprint_addy((g.geo).addy), ST_X((g.geo).geomout)::numeric(8,5), ST_Y((g.geo).geomout)::numeric(8,5) ) FROM (SELECT addid FROM addresses_to_geocode WHERE rating IS NULL ORDER BY addid LIMIT 3) As a LEFT JOIN (SELECT addid, (geocode(address,1)) As geo FROM addresses_to_geocode As ag WHERE ag.rating IS NULL ORDER BY addid LIMIT 3) As g ON a.addid = g.addid WHERE a.addid = addresses_to_geocode.addid; result ----- Query returned successfully: 3 rows affected, 480 ms execution time. SELECT * FROM addresses_to_geocode WHERE rating is not null; addid | address | lon | lat | new_address | rating -------+----------------------------------------------+-----------+----------+-------------------------------------------+-------- 1 | 529 Main Street, Boston MA, 02129 | -71.07181 | 42.38359 | 529 Main St, Boston, MA 02129 | 0 2 | 77 Massachusetts Avenue, Cambridge, MA 02139 | -71.09428 | 42.35988 | 77 Massachusetts Ave, Cambridge, MA 02139 | 0 3 | 25 Wizard of Oz, Walaford, KS 99912323 | | | | -1 Examples: Using Geometry filter SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, (addy).address As stno, (addy).streetname As street, (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip FROM geocode('100 Federal Street, MA', 3, (SELECT ST_Union(the_geom) FROM place WHERE statefp = '25' AND name = 'Lynn')::geometry ) As g; rating | wktlonlat | stno | street | styp | city | st | zip --------+--------------------------+------+---------+------+------+----+------- 8 | POINT(-70.96796 42.4659) | 100 | Federal | St | Lynn | MA | 01905 Total query runtime: 245 ms. See Also , , , , , Geocode_Intersection Takes in 2 streets that intersect and a state, city, zip, and outputs a set of possible locations on the first cross street that is at the intersection, also includes a point geometry in NAD 83 long lat, a normalized address for each location, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10 setof record geocode_intersection text roadway1 text roadway2 text in_state text in_city text in_zip integer max_results=10 norm_addy OUT addy geometry OUT geomout integer OUT rating Description Takes in 2 streets that intersect and a state, city, zip, and outputs a set of possible locations on the first cross street that is at the intersection, also includes a point geometry in NAD 83 long lat, a normalized address for each location, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10. Returns normalized_address (addy) for each, geomout as the point location in nad 83 long lat, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Uses Tiger data (edges,faces,addr), PostgreSQL fuzzy string matching (soundex,levenshtein) Availability: 2.0.0 Examples: Basic The below examples timings are on a 3.0 GHZ single processor Windows 7 machine with 2GB ram running PostgreSQL 9.0/PostGIS 1.5 loaded with all of MA state Tiger data loaded. Currently a bit slow (3000 ms) Testing on Windows 2003 64-bit 8GB on PostGIS 2.0 PostgreSQL 64-bit Tiger 2011 data loaded -- (41ms) SELECT pprint_addy(addy), st_astext(geomout),rating FROM geocode_intersection( 'Haverford St','Germania St', 'MA', 'Boston', '02130',1); pprint_addy | st_astext | rating ----------------------------------+----------------------------+-------- 98 Haverford St, Boston, MA 02130 | POINT(-71.101375 42.31376) | 0 Even if zip is not passed in the geocoder can guess (took about 3500 ms on the windows 7 box), on the windows 2003 64-bit 741 ms SELECT pprint_addy(addy), st_astext(geomout),rating FROM geocode_intersection('Weld', 'School', 'MA', 'Boston'); pprint_addy | st_astext | rating -------------------------------+--------------------------+-------- 98 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) | 3 99 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) | 3 See Also , , Get_Geocode_Setting Returns value of specific setting stored in tiger.geocode_settings table. text Get_Geocode_Setting text setting_name Description Returns value of specific setting stored in tiger.geocode_settings table. Settings allow you to toggle debugging of functions. Later plans will be to control rating with settings. Current list of settings are as follows: name | setting | unit | category | short_desc --------------------------------+---------+---------+-----------+------------------------------------------------------------------------------------------------------ debug_geocode_address | false | boolean | debug | outputs debug information in notice log such as queries when geocode_addresss is called if true debug_geocode_intersection | false | boolean | debug | outputs debug information in notice log such as queries when geocode_intersection is called if true debug_normalize_address | false | boolean | debug | outputs debug information in notice log such as queries | | | | and intermediate expressions when normalize_address is called if true debug_reverse_geocode | false | boolean | debug | if true, outputs debug information in notice log such as queries | and intermediate expressions when reverse_geocode reverse_geocode_numbered_roads | 0 | integer | rating | For state and county highways, 0 - no preference in name | | | | , 1 - prefer the numbered highway name, 2 - prefer local state/county name use_pagc_address_parser | false | boolean | normalize | If set to true, will try to use the pagc_address normalizer instead of tiger built one Availability: 2.1.0 Example return debugging setting SELECT get_geocode_setting('debug_geocode_address) As result; result --------- false See Also Get_Tract Returns census tract or field from tract table of where the geometry is located. Default to returning short name of tract. text get_tract geometry loc_geom text output_field=name Description Given a geometry will return the census tract location of that geometry. NAD 83 long lat is assumed if no spatial ref sys is specified. Availability: 2.0.0 Examples: Basic SELECT get_tract(ST_Point(-71.101375, 42.31376) ) As tract_name; tract_name --------- 1203.01 --this one returns the tiger geoid SELECT get_tract(ST_Point(-71.101375, 42.31376), 'tract_id' ) As tract_id; tract_id --------- 25025120301 See Also > Install_Missing_Indexes Finds all tables with key columns used in geocoder joins and filter conditions that are missing used indexes on those columns and will add them. boolean Install_Missing_Indexes Description Finds all tables in tiger and tiger_data schemas with key columns used in geocoder joins and filters that are missing indexes on those columns and will output the SQL DDL to define the index for those tables and then execute the generated script. This is a helper function that adds new indexes needed to make queries faster that may have been missing during the load process. This function is a companion to that in addition to generating the create index script, also executes it. It is called as part of the update_geocode.sql upgrade script. Availability: 2.0.0 Examples SELECT install_missing_indexes(); install_missing_indexes ------------------------- t See Also , Loader_Generate_Census_Script Generates a shell script for the specified platform for the specified states that will download Tiger census state tract, bg, and tabblocks data tables, stage and load into tiger_data schema. Each state script is returned as a separate record. setof text loader_generate_census_script text[] param_states text os Description Generates a shell script for the specified platform for the specified states that will download Tiger data census state tract, block groups bg, and tabblocks data tables, stage and load into tiger_data schema. Each state script is returned as a separate record. It uses unzip on Linux (7-zip on Windows by default) and wget to do the downloading. It uses to load in the data. Note the smallest unit it does is a whole state. It will only process the files in the staging and temp folders. It uses the following control tables to control the process and different OS shell syntax variations. loader_variables keeps track of various variables such as census site, year, data and staging schemas loader_platform profiles of various platforms and where the various executables are located. Comes with windows and linux. More can be added. loader_lookuptables each record defines a kind of table (state, county), whether to process records in it and how to load them in. Defines the steps to import data, stage data, add, removes columns, indexes, and constraints for each. Each table is prefixed with the state and inherits from a table in the tiger schema. e.g. creates tiger_data.ma_faces which inherits from tiger.faces Availability: 2.0.0 includes this logic, but if you installed tiger geocoder prior to PostGIS 2.0.0 alpha5, you'll need to run this on the states you have already done to get these additional tables. Examples Generate script to load up data for select states in Windows shell script format. SELECT loader_generate_census_script(ARRAY['MA'], 'windows'); -- result -- set STATEDIR="\gisdata\www2.census.gov\geo\pvs\tiger2010st\25_Massachusetts" set TMPDIR=\gisdata\temp\ set UNZIPTOOL="C:\Program Files\7-Zip\7z.exe" set WGETTOOL="C:\wget\wget.exe" set PGBIN=C:\projects\pg\pg91win\bin\ set PGPORT=5432 set PGHOST=localhost set PGUSER=postgres set PGPASSWORD=yourpasswordhere set PGDATABASE=tiger_postgis20 set PSQL="%PGBIN%psql" set SHP2PGSQL="%PGBIN%shp2pgsql" cd \gisdata %WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --reject=html del %TMPDIR%\*.* /Q %PSQL% -c "DROP SCHEMA tiger_staging CASCADE;" %PSQL% -c "CREATE SCHEMA tiger_staging;" cd %STATEDIR% for /r %%z in (*.zip) do %UNZIPTOOL% e %%z -o%TMPDIR% cd %TMPDIR% %PSQL% -c "CREATE TABLE tiger_data.MA_tract(CONSTRAINT pk_MA_tract PRIMARY KEY (tract_id) ) INHERITS(tiger.tract); " %SHP2PGSQL% -c -s 4269 -g the_geom -W "latin1" tl_2010_25_tract10.dbf tiger_staging.ma_tract10 | %PSQL% %PSQL% -c "ALTER TABLE tiger_staging.MA_tract10 RENAME geoid10 TO tract_id; SELECT loader_load_staged_data(lower('MA_tract10'), lower('MA_tract')); " %PSQL% -c "CREATE INDEX tiger_data_MA_tract_the_geom_gist ON tiger_data.MA_tract USING gist(the_geom);" %PSQL% -c "VACUUM ANALYZE tiger_data.MA_tract;" %PSQL% -c "ALTER TABLE tiger_data.MA_tract ADD CONSTRAINT chk_statefp CHECK (statefp = '25');" : Generate sh script STATEDIR="/gisdata/www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts" TMPDIR="/gisdata/temp/" UNZIPTOOL=unzip WGETTOOL="/usr/bin/wget" export PGBIN=/usr/pgsql-9.0/bin export PGPORT=5432 export PGHOST=localhost export PGUSER=postgres export PGPASSWORD=yourpasswordhere export PGDATABASE=geocoder PSQL=${PGBIN}/psql SHP2PGSQL=${PGBIN}/shp2pgsql cd /gisdata wget http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --reject=html rm -f ${TMPDIR}/*.* ${PSQL} -c "DROP SCHEMA tiger_staging CASCADE;" ${PSQL} -c "CREATE SCHEMA tiger_staging;" cd $STATEDIR for z in *.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done : : See Also Loader_Generate_Script Generates a shell script for the specified platform for the specified states that will download Tiger data, stage and load into tiger_data schema. Each state script is returned as a separate record. Latest version supports Tiger 2010 structural changes and also loads census tract, block groups, and blocks tables. setof text loader_generate_script text[] param_states text os Description Generates a shell script for the specified platform for the specified states that will download Tiger data, stage and load into tiger_data schema. Each state script is returned as a separate record. It uses unzip on Linux (7-zip on Windows by default) and wget to do the downloading. It uses to load in the data. Note the smallest unit it does is a whole state, but you can overwrite this by downloading the files yourself. It will only process the files in the staging and temp folders. It uses the following control tables to control the process and different OS shell syntax variations. loader_variables keeps track of various variables such as census site, year, data and staging schemas loader_platform profiles of various platforms and where the various executables are located. Comes with windows and linux. More can be added. loader_lookuptables each record defines a kind of table (state, county), whether to process records in it and how to load them in. Defines the steps to import data, stage data, add, removes columns, indexes, and constraints for each. Each table is prefixed with the state and inherits from a table in the tiger schema. e.g. creates tiger_data.ma_faces which inherits from tiger.faces Availability: 2.0.0 to support Tiger 2010 structured data and load census tract (tract), block groups (bg), and blocks (tabblocks) tables . Examples Generate script to load up data for 2 states in Windows shell script format. SELECT loader_generate_script(ARRAY['MA','RI'], 'windows') AS result; -- result -- set STATEDIR="\gisdata\www2.census.gov\geo\pvs\tiger2010st\44_Rhode_Island" set TMPDIR=\gisdata\temp\ set UNZIPTOOL="C:\Program Files\7-Zip\7z.exe" set WGETTOOL="C:\wget\wget.exe" set PGBIN=C:\Program Files\PostgreSQL\8.4\bin\ set PGPORT=5432 set PGHOST=localhost set PGUSER=postgres set PGPASSWORD=yourpasswordhere set PGDATABASE=geocoder set PSQL="%PGBIN%psql" set SHP2PGSQL="%PGBIN%shp2pgsql" %WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island/ --no-parent --relative --recursive --level=2 --accept=zip,txt --mirror --reject=html : : Generate sh script SELECT loader_generate_script(ARRAY['MA','RI'], 'sh') AS result; -- result -- STATEDIR="/gisdata/www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island" TMPDIR="/gisdata/temp/" UNZIPTOOL=unzip PGPORT=5432 PGHOST=localhost PGUSER=postgres PGPASSWORD=yourpasswordhere PGDATABASE=geocoder PSQL=psql SHP2PGSQ=shp2pgsql wget http://www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island/ --no-parent --relative --recursive --level=2 --accept=zip,txt --mirror --reject=html : : See Also Loader_Generate_Nation_Script Generates a shell script for the specified platform that loads in the county and state lookup tables. text loader_generate_nation_script text os Description Generates a shell script for the specified platform that loads in the county_all, county_all_lookup, state_all tables into tiger_data schema. These inherit respectively from the county, county_lookup, state tables in tiger schema. It uses unzip on Linux (7-zip on Windows by default) and wget to do the downloading. It uses to load in the data. It uses the following control tables tiger.loader_platform, tiger.loader_variables, and tiger.loader_lookuptables to control the process and different OS shell syntax variations. loader_variables keeps track of various variables such as census site, year, data and staging schemas loader_platform profiles of various platforms and where the various executables are located. Comes with windows and linux/unix. More can be added. loader_lookuptables each record defines a kind of table (state, county), whether to process records in it and how to load them in. Defines the steps to import data, stage data, add, removes columns, indexes, and constraints for each. Each table is prefixed with the state and inherits from a table in the tiger schema. e.g. creates tiger_data.ma_faces which inherits from tiger.faces Availability: 2.1.0 If you were running tiger_2010 version and you want to reload as state with tiger_2011, you'll need to for the very first load generate and run drop statements before you run this script. Examples Generate script script to load nation data Windows. SELECT loader_generate_nation_script('windows'); Generate script to load up data for Linux/Unix systems. SELECT loader_generate_nation_script('sh'); See Also Missing_Indexes_Generate_Script Finds all tables with key columns used in geocoder joins that are missing indexes on those columns and will output the SQL DDL to define the index for those tables. text Missing_Indexes_Generate_Script Description Finds all tables in tiger and tiger_data schemas with key columns used in geocoder joins that are missing indexes on those columns and will output the SQL DDL to define the index for those tables. This is a helper function that adds new indexes needed to make queries faster that may have been missing during the load process. As the geocoder is improved, this function will be updated to accommodate new indexes being used. If this function outputs nothing, it means all your tables have what we think are the key indexes already in place. Availability: 2.0.0 Examples SELECT missing_indexes_generate_script(); -- output: This was run on a database that was created before many corrections were made to the loading script --- CREATE INDEX idx_tiger_county_countyfp ON tiger.county USING btree(countyfp); CREATE INDEX idx_tiger_cousub_countyfp ON tiger.cousub USING btree(countyfp); CREATE INDEX idx_tiger_edges_tfidr ON tiger.edges USING btree(tfidr); CREATE INDEX idx_tiger_edges_tfidl ON tiger.edges USING btree(tfidl); CREATE INDEX idx_tiger_zip_lookup_all_zip ON tiger.zip_lookup_all USING btree(zip); CREATE INDEX idx_tiger_data_ma_county_countyfp ON tiger_data.ma_county USING btree(countyfp); CREATE INDEX idx_tiger_data_ma_cousub_countyfp ON tiger_data.ma_cousub USING btree(countyfp); CREATE INDEX idx_tiger_data_ma_edges_countyfp ON tiger_data.ma_edges USING btree(countyfp); CREATE INDEX idx_tiger_data_ma_faces_countyfp ON tiger_data.ma_faces USING btree(countyfp); See Also , Normalize_Address Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This function will work with just the lookup data packaged with the tiger_geocoder (no need for tiger census data). norm_addy normalize_address varchar in_address Description Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This is the first step in the geocoding process to get all addresses into normalized postal form. No other data is required aside from what is packaged with the geocoder. This function just uses the various direction/state/suffix lookup tables preloaded with the tiger_geocoder and located in the tiger schema, so it doesn't need you to download tiger census data or any other additional data to make use of it. You may find the need to add more abbreviations or alternative namings to the various lookup tables in the tiger schema. It uses various control lookup tables located in tiger schema to normalize the input address. Fields in the norm_addy type object returned by this function in this order where () indicates a field required by the geocoder, [] indicates an optional field: (address) [predirAbbrev] (streetName) [streetTypeAbbrev] [postdirAbbrev] [internal] [location] [stateAbbrev] [zip] address is an integer: The street number predirAbbrev is varchar: Directional prefix of road such as N, S, E, W etc. These are controlled using the direction_lookup table. streetName varchar streetTypeAbbrev varchar abbreviated version of street type: e.g. St, Ave, Cir. These are controlled using the street_type_lookup table. postdirAbbrev varchar abbreviated directional suffice of road N, S, E, W etc. These are controlled using the direction_lookup table. internal varchar internal address such as an apartment or suite number. location varchar usually a city or governing province. stateAbbrev varchar two character US State. e.g MA, NY, MI. These are controlled by the state_lookup table. zip varchar 5-digit zipcode. e.g. 02109. parsed boolean - denotes if addess was formed from normalize process. The normalize_address function sets this to true before returning the address. Examples Output select fields. Use if you want a pretty textual output. SELECT address As orig, (g.na).streetname, (g.na).streettypeabbrev FROM (SELECT address, normalize_address(address) As na FROM addresses_to_geocode) As g; orig | streetname | streettypeabbrev -----------------------------------------------------+---------------+------------------ 28 Capen Street, Medford, MA | Capen | St 124 Mount Auburn St, Cambridge, Massachusetts 02138 | Mount Auburn | St 950 Main Street, Worcester, MA 01610 | Main | St 529 Main Street, Boston MA, 02129 | Main | St 77 Massachusetts Avenue, Cambridge, MA 02139 | Massachusetts | Ave 25 Wizard of Oz, Walaford, KS 99912323 | Wizard of Oz | See Also , Pagc_Normalize_Address Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This function will work with just the lookup data packaged with the tiger_geocoder (no need for tiger census data). Requires address_standardizer extension. norm_addy pagc_normalize_address varchar in_address Description Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This is the first step in the geocoding process to get all addresses into normalized postal form. No other data is required aside from what is packaged with the geocoder. This function just uses the various pagc_* lookup tables preloaded with the tiger_geocoder and located in the tiger schema, so it doesn't need you to download tiger census data or any other additional data to make use of it. You may find the need to add more abbreviations or alternative namings to the various lookup tables in the tiger schema. It uses various control lookup tables located in tiger schema to normalize the input address. Fields in the norm_addy type object returned by this function in this order where () indicates a field required by the geocoder, [] indicates an optional field: This version uses the PAGC address standardizer C extension which you can download. There are slight variations in casing and formatting and also provides a richer breakout. Availability: 2.1.0 (address) [predirAbbrev] (streetName) [streetTypeAbbrev] [postdirAbbrev] [internal] [location] [stateAbbrev] [zip] The native standardaddr of address_standardizer extension is at this time a bit richer than norm_addy since its designed to support international addresses (including country). standardaddr equivalent fields are: house_num,predir, name, suftype, sufdir, unit, city, state, postcode address is an integer: The street number predirAbbrev is varchar: Directional prefix of road such as N, S, E, W etc. These are controlled using the direction_lookup table. streetName varchar streetTypeAbbrev varchar abbreviated version of street type: e.g. St, Ave, Cir. These are controlled using the street_type_lookup table. postdirAbbrev varchar abbreviated directional suffice of road N, S, E, W etc. These are controlled using the direction_lookup table. internal varchar internal address such as an apartment or suite number. location varchar usually a city or governing province. stateAbbrev varchar two character US State. e.g MA, NY, MI. These are controlled by the state_lookup table. zip varchar 5-digit zipcode. e.g. 02109. parsed boolean - denotes if addess was formed from normalize process. The normalize_address function sets this to true before returning the address. Examples Single call example SELECT addy.* FROM pagc_normalize_address('9000 E ROO ST STE 999, Springfield, CO') AS addy; address | predirabbrev | streetname | streettypeabbrev | postdirabbrev | internal | location | stateabbrev | zip | parsed ---------+--------------+------------+------------------+---------------+-----------+-------------+-------------+-----+-------- 9000 | E | ROO | ST | | SUITE 999 | SPRINGFIELD | CO | | t Batch call. There are currently speed issues with the way postgis_tiger_geocoder wraps the address_standardizer. These will hopefully be resolved in later editions. To work around them, if you need speed for batch geocoding to call generate a normaddy in batch mode, you are encouraged to directly call the address_standardizer standardize_address function as shown below which is similar exercise to what we did in that uses data created in . WITH g AS (SELECT address, ROW((sa).house_num, (sa).predir, (sa).name , (sa).suftype, (sa).sufdir, (sa).unit , (sa).city, (sa).state, (sa).postcode, true)::norm_addy As na FROM (SELECT address, standardize_address('tiger.pagc_lex' , 'tiger.pagc_gaz' , 'tiger.pagc_rules', address) As sa FROM addresses_to_geocode) As g) SELECT address As orig, (g.na).streetname, (g.na).streettypeabbrev FROM g; orig | streetname | streettypeabbrev -----------------------------------------------------+---------------+------------------ 529 Main Street, Boston MA, 02129 | MAIN | ST 77 Massachusetts Avenue, Cambridge, MA 02139 | MASSACHUSETTS | AVE 25 Wizard of Oz, Walaford, KS 99912323 | WIZARD OF | 26 Capen Street, Medford, MA | CAPEN | ST 124 Mount Auburn St, Cambridge, Massachusetts 02138 | MOUNT AUBURN | ST 950 Main Street, Worcester, MA 01610 | MAIN | ST See Also , Pprint_Addy Given a norm_addy composite type object, returns a pretty print representation of it. Usually used in conjunction with normalize_address. varchar pprint_addy norm_addy in_addy Description Given a norm_addy composite type object, returns a pretty print representation of it. No other data is required aside from what is packaged with the geocoder. Usually used in conjunction with . Examples Pretty print a single address SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address; pretty_address --------------------------------------- 202 E Fremont St, Las Vegas, NV 89101 Pretty print address a table of addresses SELECT address As orig, pprint_addy(normalize_address(address)) As pretty_address FROM addresses_to_geocode; orig | pretty_address -----------------------------------------------------+------------------------------------------- 529 Main Street, Boston MA, 02129 | 529 Main St, Boston MA, 02129 77 Massachusetts Avenue, Cambridge, MA 02139 | 77 Massachusetts Ave, Cambridge, MA 02139 28 Capen Street, Medford, MA | 28 Capen St, Medford, MA 124 Mount Auburn St, Cambridge, Massachusetts 02138 | 124 Mount Auburn St, Cambridge, MA 02138 950 Main Street, Worcester, MA 01610 | 950 Main St, Worcester, MA 01610 See Also Reverse_Geocode Takes a geometry point in a known spatial ref sys and returns a record containing an array of theoretically possible addresses and an array of cross streets. If include_strnum_range = true, includes the street range in the cross streets. record Reverse_Geocode geometry pt boolean include_strnum_range=false geometry[] OUT intpt norm_addy[] OUT addy varchar[] OUT street Description Takes a geometry point in a known spatial ref and returns a record containing an array of theoretically possible addresses and an array of cross streets. If include_strnum_range = true, includes the street range in the cross streets. include_strnum_range defaults to false if not passed in. Addresses are sorted according to which road a point is closest to so first address is most likely the right one. Why do we say theoretical instead of actual addresses. The Tiger data doesn't have real addresses, but just street ranges. As such the theoretical address is an interpolated address based on the street ranges. Like for example interpolating one of my addresses returns a 26 Court St. and 26 Court Sq., though there is no such place as 26 Court Sq. This is because a point may be at a corner of 2 streets and thus the logic interpolates along both streets. The logic also assumes addresses are equally spaced along a street, which of course is wrong since you can have a municipal building taking up a good chunk of the street range and the rest of the buildings are clustered at the end. Note: Hmm this function relies on Tiger data. If you have not loaded data covering the region of this point, then hmm you will get a record filled with NULLS. Returned elements of the record are as follows: intpt is an array of points: These are the center line points on the street closest to the input point. There are as many points as there are addresses. addy is an array of norm_addy (normalized addresses): These are an array of possible addresses that fit the input point. The first one in the array is most likely. Generally there should be only one, except in the case when a point is at the corner of 2 or 3 streets, or the point is somewhere on the road and not off to the side. street an array of varchar: These are cross streets (or the street) (streets that intersect or are the street the point is projected to be on). Availability: 2.0.0 Examples Example of a point at the corner of two streets, but closest to one. This is approximate location of MIT: 77 Massachusetts Ave, Cambridge, MA 02139 Note that although we don't have 3 streets, PostgreSQL will just return null for entries above our upper bound so safe to use. This includes street ranges SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, pprint_addy(r.addy[3]) As st3, array_to_string(r.street, ',') As cross_streets FROM reverse_geocode(ST_GeomFromText('POINT(-71.093902 42.359446)',4269),true) As r; result ------ st1 | st2 | st3 | cross_streets -------------------------------------------+-----+-----+---------------------------------------------- 67 Massachusetts Ave, Cambridge, MA 02139 | | | 67 - 127 Massachusetts Ave,32 - 88 Vassar St Here we choose not to include the address ranges for the cross streets and picked a location really really close to a corner of 2 streets thus could be known by two different addresses. SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, pprint_addy(r.addy[3]) As st3, array_to_string(r.street, ',') As cross_str FROM reverse_geocode(ST_GeomFromText('POINT(-71.06941 42.34225)',4269)) As r; result -------- st1 | st2 | st3 | cross_str ---------------------------------+---------------------------------+-----+------------------------ 5 Bradford St, Boston, MA 02118 | 49 Waltham St, Boston, MA 02118 | | Waltham St For this one we reuse our geocoded example from and we only want the primary address and at most 2 cross streets. SELECT actual_addr, lon, lat, pprint_addy((rg).addy[1]) As int_addr1, (rg).street[1] As cross1, (rg).street[2] As cross2 FROM (SELECT address As actual_addr, lon, lat, reverse_geocode( ST_SetSRID(ST_Point(lon,lat),4326) ) As rg FROM addresses_to_geocode WHERE rating > -1) As foo; actual_addr | lon | lat | int_addr1 | cross1 | cross2 -----------------------------------------------------+-----------+----------+-------------------------------------------+-----------------+------------ 529 Main Street, Boston MA, 02129 | -71.07181 | 42.38359 | 527 Main St, Boston, MA 02129 | Medford St | 77 Massachusetts Avenue, Cambridge, MA 02139 | -71.09428 | 42.35988 | 77 Massachusetts Ave, Cambridge, MA 02139 | Vassar St | 26 Capen Street, Medford, MA | -71.12377 | 42.41101 | 9 Edison Ave, Medford, MA 02155 | Capen St | Tesla Ave 124 Mount Auburn St, Cambridge, Massachusetts 02138 | -71.12304 | 42.37328 | 3 University Rd, Cambridge, MA 02138 | Mount Auburn St | 950 Main Street, Worcester, MA 01610 | -71.82368 | 42.24956 | 3 Maywood St, Worcester, MA 01603 | Main St | Maywood Pl See Also , Topology_Load_Tiger Loads a defined region of tiger data into a PostGIS Topology and transforming the tiger data to spatial reference of the topology and snapping to the precision tolerance of the topology. text Topology_Load_Tiger varchar topo_name varchar region_type varchar region_id Description Loads a defined region of tiger data into a PostGIS Topology. The faces, nodes and edges are transformed to the spatial reference system of the target topology and points are snapped to the tolerance of the target topology. The created faces, nodes, edges maintain the same ids as the original Tiger data faces, nodes, edges so that datasets can be in the future be more easily reconciled with tiger data. Returns summary details about the process. This would be useful for example for redistricting data where you require the newly formed polygons to follow the center lines of streets and for the resulting polygons not to overlap. This function relies on Tiger data as well as the installation of the PostGIS topology module. For more information, refer to and . If you have not loaded data covering the region of interest, then no topology records will be created. This function will also fail if you have not created a topology using the topology functions. Most topology validation errors are a result of tolerance issues where after transformation the edges points don't quite line up or overlap. To remedy the situation you may want to increase or lower the precision if you get topology validation failures. Required arguments: topo_name The name of an existing PostGIS topology to load data into. region_type The type of bounding region. Currently only place and county are supported. Plan is to have several more. This is the table to look into to define the region bounds. e.g tiger.place, tiger.county region_id This is what TIGER calls the geoid. It is the unique identifier of the region in the table. For place it is the plcidfp column in tiger.place. For county it is the cntyidfp column in tiger.county Availability: 2.0.0 Example: Boston, Massachusetts Topology Create a topology for Boston, Massachusetts in Mass State Plane Feet (2249) with tolerance 0.25 feet and then load in Boston city tiger faces, edges, nodes. SELECT topology.CreateTopology('topo_boston', 2249, 0.25); createtopology -------------- 15 -- 60,902 ms ~ 1 minute on windows 7 desktop running 9.1 (with 5 states tiger data loaded) SELECT tiger.topology_load_tiger('topo_boston', 'place', '2507000'); -- topology_loader_tiger -- 29722 edges holding in temporary. 11108 faces added. 1875 edges of faces added. 20576 nodes added. 19962 nodes contained in a face. 0 edge start end corrected. 31597 edges added. -- 41 ms -- SELECT topology.TopologySummary('topo_boston'); -- topologysummary-- Topology topo_boston (15), SRID 2249, precision 0.25 20576 nodes, 31597 edges, 11109 faces, 0 topogeoms in 0 layers -- 28,797 ms to validate yeh returned no errors -- SELECT * FROM topology.ValidateTopology('topo_boston'); error | id1 | id2 -------------------+----------+----------- Example: Suffolk, Massachusetts Topology Create a topology for Suffolk, Massachusetts in Mass State Plane Meters (26986) with tolerance 0.25 meters and then load in Suffolk county tiger faces, edges, nodes. SELECT topology.CreateTopology('topo_suffolk', 26986, 0.25); -- this took 56,275 ms ~ 1 minute on Windows 7 32-bit with 5 states of tiger loaded -- must have been warmed up after loading boston SELECT tiger.topology_load_tiger('topo_suffolk', 'county', '25025'); -- topology_loader_tiger -- 36003 edges holding in temporary. 13518 faces added. 2172 edges of faces added. 24761 nodes added. 24075 nodes contained in a face. 0 edge start end corrected. 38175 edges added. -- 31 ms -- SELECT topology.TopologySummary('topo_suffolk'); -- topologysummary-- Topology topo_suffolk (14), SRID 26986, precision 0.25 24761 nodes, 38175 edges, 13519 faces, 0 topogeoms in 0 layers -- 33,606 ms to validate -- SELECT * FROM topology.ValidateTopology('topo_suffolk'); error | id1 | id2 -------------------+----------+----------- coincident nodes | 81045651 | 81064553 edge crosses node | 81045651 | 85737793 edge crosses node | 81045651 | 85742215 edge crosses node | 81045651 | 620628939 edge crosses node | 81064553 | 85697815 edge crosses node | 81064553 | 85728168 edge crosses node | 81064553 | 85733413 See Also , , , Set_Geocode_Setting Sets a setting that affects behavior of geocoder functions. text Set_Geocode_Setting text setting_name text setting_value Description Sets value of specific setting stored in tiger.geocode_settings table. Settings allow you to toggle debugging of functions. Later plans will be to control rating with settings. Current list of settings are listed in . Availability: 2.1.0 Example return debugging setting If you run when this function is true, the NOTICE log will output timing and queries. SELECT set_geocode_setting('debug_geocode_address', 'true') As result; result --------- true See Also postgis-2.1.2+dfsg.orig/doc/reference_accessor.xml0000644000000000000000000023604412203274524020701 0ustar rootroot Geometry Accessors GeometryType Returns the type of the geometry as a string. Eg: 'LINESTRING', 'POLYGON', 'MULTIPOINT', etc. text GeometryType geometry geomA Description Returns the type of the geometry as a string. Eg: 'LINESTRING', 'POLYGON', 'MULTIPOINT', etc. OGC SPEC s2.1.1.1 - Returns the name of the instantiable subtype of Geometry of which this Geometry instance is a member. The name of the instantiable subtype of Geometry is returned as a string. This function also indicates if the geometry is measured, by returning a string of the form 'POINTM'. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &sfs_compliant; &curve_support; &Z_support; &P_support; &T_support; Examples SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')); geometrytype -------------- LINESTRING SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')); --result POLYHEDRALSURFACE SELECT GeometryType(geom) as result FROM (SELECT ST_GeomFromEWKT('TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )') AS geom ) AS g; result -------- TIN See Also ST_Boundary Returns the closure of the combinatorial boundary of this Geometry. geometry ST_Boundary geometry geomA Description Returns the closure of the combinatorial boundary of this Geometry. The combinatorial boundary is defined as described in section 3.12.3.2 of the OGC SPEC. Because the result of this function is a closure, and hence topologically closed, the resulting boundary can be represented using representational geometry primitives as discussed in the OGC SPEC, section 3.12.2. Performed by the GEOS module Prior to 2.0.0, this function throws an exception if used with GEOMETRYCOLLECTION. From 2.0.0 up it will return NULL instead (unsupported input). &sfs_compliant; OGC SPEC s2.1.1.1 &sqlmm_compliant; SQL-MM 3: 5.1.14 &Z_support; Enhanced: 2.1.0 support for Triangle was introduced Examples SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)'))); st_astext ----------- MULTIPOINT(1 1,-1 1) SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))'))); st_astext ---------- LINESTRING(1 1,0 0,-1 1,1 1) --Using a 3d polygon SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, 1 1 1))'))); st_asewkt ----------------------------------- LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1) --Using a 3d multilinestring SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )'))); st_asewkt ---------- MULTIPOINT(-1 1 1,1 1 0.75) See Also , ST_CoordDim Return the coordinate dimension of the ST_Geometry value. integer ST_CoordDim geometry geomA Description Return the coordinate dimension of the ST_Geometry value. This is the MM compliant alias name for &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 5.1.3 &curve_support; &Z_support; &P_support; &T_support; Examples SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)'); ---result-- 3 SELECT ST_CoordDim(ST_Point(1,2)); --result-- 2 See Also ST_Dimension The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. integer ST_Dimension geometry g Description The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. OGC SPEC s2.1.1.1 - returns 0 for POINT, 1 for LINESTRING, 2 for POLYGON, and the largest dimension of the components of a GEOMETRYCOLLECTION. If unknown (empty geometry) null is returned. &sqlmm_compliant; SQL-MM 3: 5.1.2 Enhanced: 2.0.0 support for Polyhedral surfaces and TINs was introduced. No longer throws an exception if given empty geometry. Prior to 2.0.0, this function throws an exception if used with empty geometry. &P_support; &T_support; Examples SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))'); ST_Dimension ----------- 1 See Also ST_EndPoint Returns the last point of a LINESTRING geometry as a POINT. boolean ST_EndPoint geometry g Description Returns the last point of a LINESTRING geometry as a POINT or NULL if the input parameter is not a LINESTRING. &sqlmm_compliant; SQL-MM 3: 7.1.4 &Z_support; Changed: 2.0.0 no longer works with single geometry multilinestrings. In older versions of PostGIS -- a single line multilinestring would work happily with this function and return the start point. In 2.0.0 it just returns NULL like any other multilinestring. The older behavior was an undocumented feature, but people who assumed they had their data stored as LINESTRING may experience these returning NULL in 2.0 now. Examples postgis=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry)); st_astext ------------ POINT(3 3) (1 row) postgis=# SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null; is_null ---------- t (1 row) --3d endpoint SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)')); st_asewkt -------------- POINT(0 0 5) (1 row) See Also , ST_Envelope Returns a geometry representing the double precision (float8) bounding box of the supplied geometry. geometry ST_Envelope geometry g1 Description Returns the float8 minimum bounding box for the supplied geometry, as a geometry. The polygon is defined by the corner points of the bounding box ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY)). (PostGIS will add a ZMIN/ZMAX coordinate as well). Degenerate cases (vertical lines, points) will return a geometry of lower dimension than POLYGON, ie. POINT or LINESTRING. Availability: 1.5.0 behavior changed to output double precision instead of float4 &sfs_compliant; s2.1.1.1 &sqlmm_compliant; SQL-MM 3: 5.1.15 Examples SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry)); st_astext ------------ POINT(1 3) (1 row) SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry)); st_astext -------------------------------- POLYGON((0 0,0 3,1 3,1 0,0 0)) (1 row) SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 0))'::geometry)); st_astext -------------------------------------------------------------- POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0)) (1 row) SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, 1.0000000001 0, 0 0))'::geometry)); st_astext -------------------------------------------------------------- POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0)) (1 row) SELECT Box3D(geom), Box2D(geom), ST_AsText(ST_Envelope(geom)) As envelopewkt FROM (SELECT 'POLYGON((0 0, 0 1000012333334.34545678, 1.0000001 1, 1.0000001 0, 0 0))'::geometry As geom) As foo; See Also , ST_ExteriorRing Returns a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon. Will not work with MULTIPOLYGON geometry ST_ExteriorRing geometry a_polygon Description Returns a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon. Only works with POLYGON geometry types &sfs_compliant; 2.1.5.1 &sqlmm_compliant; SQL-MM 3: 8.2.3, 8.3.3 &Z_support; Examples --If you have a table of polygons SELECT gid, ST_ExteriorRing(the_geom) AS ering FROM sometable; --If you have a table of MULTIPOLYGONs --and want to return a MULTILINESTRING composed of the exterior rings of each polygon SELECT gid, ST_Collect(ST_ExteriorRing(the_geom)) AS erings FROM (SELECT gid, (ST_Dump(the_geom)).geom As the_geom FROM sometable) As foo GROUP BY gid; --3d Example SELECT ST_AsEWKT( ST_ExteriorRing( ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))') ) ); st_asewkt --------- LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1) See Also , , ST_GeometryN Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE Otherwise, return NULL. geometry ST_GeometryN geometry geomA integer n Description Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE Otherwise, return NULL Index is 1-based as for OGC specs since version 0.8.0. Previous versions implemented this as 0-based instead. If you want to extract all geometries, of a geometry, ST_Dump is more efficient and will also work for singular geoms. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Changed: 2.0.0 Prior versions would return NULL for singular geometries. This was changed to return the geometry for ST_GeometryN(..,1) case. &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 9.1.5 &Z_support; &curve_support; &P_support; &T_support; Standard Examples --Extracting a subset of points from a 3d multipoint SELECT n, ST_AsEWKT(ST_GeometryN(the_geom, n)) As geomewkt FROM ( VALUES (ST_GeomFromEWKT('MULTIPOINT(1 2 7, 3 4 7, 5 6 7, 8 9 10)') ), ( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') ) )As foo(the_geom) CROSS JOIN generate_series(1,100) n WHERE n <= ST_NumGeometries(the_geom); n | geomewkt ---+----------------------------------------- 1 | POINT(1 2 7) 2 | POINT(3 4 7) 3 | POINT(5 6 7) 4 | POINT(8 9 10) 1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5) 2 | LINESTRING(10 11,12 11) --Extracting all geometries (useful when you want to assign an id) SELECT gid, n, ST_GeometryN(the_geom, n) FROM sometable CROSS JOIN generate_series(1,100) n WHERE n <= ST_NumGeometries(the_geom); Polyhedral Surfaces, TIN and Triangle Examples -- Polyhedral surface example -- Break a Polyhedral surface into its faces SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt FROM (SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') AS p_geom ) AS a; geom_ewkt ------------------------------------------ POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)) -- TIN -- SELECT ST_AsEWKT(ST_GeometryN(geom,2)) as wkt FROM (SELECT ST_GeomFromEWKT('TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )') AS geom ) AS g; -- result -- wkt ------------------------------------- TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0)) See Also , ST_GeometryType Return the geometry type of the ST_Geometry value. text ST_GeometryType geometry g1 Description Returns the type of the geometry as a string. EG: 'ST_Linestring', 'ST_Polygon','ST_MultiPolygon' etc. This function differs from GeometryType(geometry) in the case of the string and ST in front that is returned, as well as the fact that it will not indicate whether the geometry is measured. Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. &sqlmm_compliant; SQL-MM 3: 5.1.4 &Z_support; &P_support; Examples SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')); --result ST_LineString SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')); --result ST_PolyhedralSurface SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')); --result ST_PolyhedralSurface SELECT ST_GeometryType(geom) as result FROM (SELECT ST_GeomFromEWKT('TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )') AS geom ) AS g; result -------- ST_Tin See Also ST_InteriorRingN Return the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range. geometry ST_InteriorRingN geometry a_polygon integer n Description Return the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range. index starts at 1. This will not work for MULTIPOLYGONs. Use in conjunction with ST_Dump for MULTIPOLYGONS &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 8.2.6, 8.3.5 &Z_support; Examples SELECT ST_AsText(ST_InteriorRingN(the_geom, 1)) As the_geom FROM (SELECT ST_BuildArea( ST_Collect(ST_Buffer(ST_Point(1,2), 20,3), ST_Buffer(ST_Point(1, 2), 10,3))) As the_geom ) as foo See Also , , , , ST_IsClosed Returns TRUE if the LINESTRING's start and end points are coincident. For Polyhedral surface is closed (volumetric). boolean ST_IsClosed geometry g Description Returns TRUE if the LINESTRING's start and end points are coincident. For Polyhedral Surfaces, it tells you if the surface is areal (open) or volumetric (closed). &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 7.1.5, 9.3.3 SQL-MM defines the result of ST_IsClosed(NULL) to be 0, while PostGIS returns NULL. &Z_support; &curve_support; Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. &P_support; Line String and Point Examples postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry); st_isclosed ------------- f (1 row) postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry); st_isclosed ------------- t (1 row) postgis=# SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry); st_isclosed ------------- f (1 row) postgis=# SELECT ST_IsClosed('POINT(0 0)'::geometry); st_isclosed ------------- t (1 row) postgis=# SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry); st_isclosed ------------- t (1 row) Polyhedral Surface Examples -- A cube -- SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')); st_isclosed ------------- t -- Same as cube but missing a side -- SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)) )')); st_isclosed ------------- f See Also ST_IsCollection Returns TRUE if the argument is a collection (MULTI*, GEOMETRYCOLLECTION, ...) boolean ST_IsCollection geometry g Description Returns TRUE if the geometry type of the argument is either: GEOMETRYCOLLECTION MULTI{POINT,POLYGON,LINESTRING,CURVE,SURFACE} COMPOUNDCURVE This function analyzes the type of the geometry. This means that it will return TRUE on collections that are empty or that contain a single element. &Z_support; &curve_support; Examples postgis=# SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry); st_iscollection ------------- f (1 row) postgis=# SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry); st_iscollection ------------- t (1 row) postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry); st_iscollection ------------- t (1 row) postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry); st_iscollection ------------- t (1 row) postgis=# SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry); st_iscollection ------------- t (1 row) See Also ST_IsEmpty Returns true if this Geometry is an empty geometrycollection, polygon, point etc. boolean ST_IsEmpty geometry geomA Description Returns true if this Geometry is an empty geometry. If true, then this Geometry represents an empty geometry collection, polygon, point etc. SQL-MM defines the result of ST_IsEmpty(NULL) to be 0, while PostGIS returns NULL. &sfs_compliant; s2.1.1.1 &sqlmm_compliant; SQL-MM 3: 5.1.7 &curve_support; Changed: 2.0.0 In prior versions of PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') was allowed. This is now illegal in PostGIS 2.0.0 to better conform with SQL/MM standards Examples SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')); st_isempty ------------ t (1 row) SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY')); st_isempty ------------ t (1 row) SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')); st_isempty ------------ f (1 row) SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = false; ?column? ---------- t (1 row) SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY')); st_isempty ------------ t (1 row) ST_IsRing Returns TRUE if this LINESTRING is both closed and simple. boolean ST_IsRing geometry g Description Returns TRUE if this LINESTRING is both (ST_StartPoint(g) ~= ST_Endpoint(g)) and (does not self intersect). &sfs_compliant; 2.1.5.1 &sqlmm_compliant; SQL-MM 3: 7.1.6 SQL-MM defines the result of ST_IsRing(NULL) to be 0, while PostGIS returns NULL. Examples SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom) FROM (SELECT 'LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'::geometry AS the_geom) AS foo; st_isring | st_isclosed | st_issimple -----------+-------------+------------- t | t | t (1 row) SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom) FROM (SELECT 'LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)'::geometry AS the_geom) AS foo; st_isring | st_isclosed | st_issimple -----------+-------------+------------- f | t | f (1 row) See Also , , , ST_IsSimple Returns (TRUE) if this Geometry has no anomalous geometric points, such as self intersection or self tangency. boolean ST_IsSimple geometry geomA Description Returns true if this Geometry has no anomalous geometric points, such as self intersection or self tangency. For more information on the OGC's definition of geometry simplicity and validity, refer to "Ensuring OpenGIS compliancy of geometries" SQL-MM defines the result of ST_IsSimple(NULL) to be 0, while PostGIS returns NULL. &sfs_compliant; s2.1.1.1 &sqlmm_compliant; SQL-MM 3: 5.1.8 &Z_support; Examples SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')); st_issimple ------------- t (1 row) SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)')); st_issimple ------------- f (1 row) See Also ST_IsValid Returns true if the ST_Geometry is well formed. boolean ST_IsValid geometry g boolean ST_IsValid geometry g integer flags Description Test if an ST_Geometry value is well formed. For geometries that are invalid, the PostgreSQL NOTICE will provide details of why it is not valid. For more information on the OGC's definition of geometry simplicity and validity, refer to "Ensuring OpenGIS compliancy of geometries" SQL-MM defines the result of ST_IsValid(NULL) to be 0, while PostGIS returns NULL. The version accepting flags is available starting with 2.0.0 and requires GEOS >= 3.3.0. Such version does not print a NOTICE explaining the invalidity. Allowed flags are documented in . &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 5.1.9 Examples SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line, ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) As bad_poly --results NOTICE: Self-intersection at or near point 0 0 good_line | bad_poly -----------+---------- t | f See Also , , , ST_IsValidReason Returns text stating if a geometry is valid or not and if not valid, a reason why. text ST_IsValidReason geometry geomA text ST_IsValidReason geometry geomA integer flags Description Returns text stating if a geometry is valid or not an if not valid, a reason why. Useful in combination with ST_IsValid to generate a detailed report of invalid geometries and reasons. Allowed flags are documented in . Availability: 1.4 - requires GEOS >= 3.1.0. Availability: 2.0 - requires GEOS >= 3.3.0 for the version taking flags. Examples --First 3 Rejects from a successful quintuplet experiment SELECT gid, ST_IsValidReason(the_geom) as validity_info FROM (SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), ST_Accum(f.line)) As the_geom, gid FROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid FROM generate_series(-4,6) x1 CROSS JOIN generate_series(2,5) y1 CROSS JOIN generate_series(1,8) z1 WHERE x1 > y1*0.5 AND z1 < x1*y1) As e INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_MakePoint(x1*10,y1), z1)),y1*1, z1*2) As line FROM generate_series(-3,6) x1 CROSS JOIN generate_series(2,5) y1 CROSS JOIN generate_series(1,10) z1 WHERE x1 > y1*0.75 AND z1 < x1*y1) As f ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line)) GROUP BY gid, e.buff) As quintuplet_experiment WHERE ST_IsValid(the_geom) = false ORDER BY gid LIMIT 3; gid | validity_info ------+-------------------------- 5330 | Self-intersection [32 5] 5340 | Self-intersection [42 5] 5350 | Self-intersection [52 5] --simple example SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)'); st_isvalidreason ------------------ Valid Geometry See Also , ST_IsValidDetail Returns a valid_detail (valid,reason,location) row stating if a geometry is valid or not and if not valid, a reason why and a location where. valid_detail ST_IsValidDetail geometry geom valid_detail ST_IsValidDetail geometry geom integer flags Description Returns a valid_detail row, formed by a boolean (valid) stating if a geometry is valid, a varchar (reason) stating a reason why it is invalid and a geometry (location) pointing out where it is invalid. Useful to substitute and improve the combination of ST_IsValid and ST_IsValidReason to generate a detailed report of invalid geometries. The 'flags' argument is a bitfield. It can have the following values: 1: Consider self-intersecting rings forming holes as valid. This is also know as "the ESRI flag". Note that this is against the OGC model. Availability: 2.0.0 - requires GEOS >= 3.3.0. Examples --First 3 Rejects from a successful quintuplet experiment SELECT gid, reason(ST_IsValidDetail(the_geom)), ST_AsText(location(ST_IsValidDetail(the_geom))) as location FROM (SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), ST_Accum(f.line)) As the_geom, gid FROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid FROM generate_series(-4,6) x1 CROSS JOIN generate_series(2,5) y1 CROSS JOIN generate_series(1,8) z1 WHERE x1 > y1*0.5 AND z1 < x1*y1) As e INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_MakePoint(x1*10,y1), z1)),y1*1, z1*2) As line FROM generate_series(-3,6) x1 CROSS JOIN generate_series(2,5) y1 CROSS JOIN generate_series(1,10) z1 WHERE x1 > y1*0.75 AND z1 < x1*y1) As f ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line)) GROUP BY gid, e.buff) As quintuplet_experiment WHERE ST_IsValid(the_geom) = false ORDER BY gid LIMIT 3; gid | reason | location ------+-------------------+------------- 5330 | Self-intersection | POINT(32 5) 5340 | Self-intersection | POINT(42 5) 5350 | Self-intersection | POINT(52 5) --simple example SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)'); valid | reason | location -------+--------+---------- t | | See Also , ST_M Return the M coordinate of the point, or NULL if not available. Input must be a point. float ST_M geometry a_point Description Return the M coordinate of the point, or NULL if not available. Input must be a point. This is not (yet) part of the OGC spec, but is listed here to complete the point coordinate extractor function list. &sfs_compliant; &sqlmm_compliant; &Z_support; Examples SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)')); st_m ------ 4 (1 row) See Also , , , ST_NDims Returns coordinate dimension of the geometry as a small int. Values are: 2,3 or 4. integer ST_NDims geometry g1 Description Returns the coordinate dimension of the geometry. PostGIS supports 2 - (x,y) , 3 - (x,y,z) or 2D with measure - x,y,m, and 4 - 3D with measure space x,y,z,m &Z_support; Examples SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point, ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point, ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm; d2point | d3point | d2pointm ---------+---------+---------- 2 | 3 | 3 See Also , , ST_NPoints Return the number of points (vertexes) in a geometry. integer ST_NPoints geometry g1 Description Return the number of points in a geometry. Works for all geometries. Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ &Z_support; &curve_support; &P_support; Examples SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')); --result 4 --Polygon in 3D space SELECT ST_NPoints(ST_GeomFromEWKT('LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)')) --result 4 See Also ST_NRings If the geometry is a polygon or multi-polygon returns the number of rings. integer ST_NRings geometry geomA Description If the geometry is a polygon or multi-polygon returns the number of rings. Unlike NumInteriorRings, it counts the outer rings as well. &Z_support; &curve_support; Examples SELECT ST_NRings(the_geom) As Nrings, ST_NumInteriorRings(the_geom) As ninterrings FROM (SELECT ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))') As the_geom) As foo; nrings | ninterrings --------+------------- 1 | 0 (1 row) See Also ST_NumGeometries If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single geometries will return 1, otherwise return NULL. integer ST_NumGeometries geometry geom Description Returns the number of Geometries. If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single geometries will return 1, otherwise return NULL. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Changed: 2.0.0 In prior versions this would return NULL if the geometry was not a collection/MULTI type. 2.0.0+ now returns 1 for single geometries e.g POLYGON, LINESTRING, POINT. &sqlmm_compliant; SQL-MM 3: 9.1.4 &Z_support; &P_support; &T_support; Examples --Prior versions would have returned NULL for this -- in 2.0.0 this returns 1 SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')); --result 1 --Geometry Collection Example - multis count as one geom in a collection SELECT ST_NumGeometries(ST_GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2), LINESTRING(5 5 ,10 10), POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))')); --result 3 See Also , ST_NumInteriorRings Return the number of interior rings of the first polygon in the geometry. This will work with both POLYGON and MULTIPOLYGON types but only looks at the first polygon. Return NULL if there is no polygon in the geometry. integer ST_NumInteriorRings geometry a_polygon Description Return the number of interior rings of the first polygon in the geometry. This will work with both POLYGON and MULTIPOLYGON types but only looks at the first polygon. Return NULL if there is no polygon in the geometry. &sqlmm_compliant; SQL-MM 3: 8.2.5 Examples --If you have a regular polygon SELECT gid, field1, field2, ST_NumInteriorRings(the_geom) AS numholes FROM sometable; --If you have multipolygons --And you want to know the total number of interior rings in the MULTIPOLYGON SELECT gid, field1, field2, SUM(ST_NumInteriorRings(the_geom)) AS numholes FROM (SELECT gid, field1, field2, (ST_Dump(the_geom)).geom As the_geom FROM sometable) As foo GROUP BY gid, field1,field2; See Also ST_NumInteriorRing Return the number of interior rings of the first polygon in the geometry. Synonym to ST_NumInteriorRings. integer ST_NumInteriorRing geometry a_polygon Description Return the number of interior rings of the first polygon in the geometry. Synonym to ST_NumInteriorRings. The OpenGIS specs are ambiguous about the exact function naming, so we provide both spellings. &sqlmm_compliant; SQL-MM 3: 8.2.5 See Also ST_NumPatches Return the number of faces on a Polyhedral Surface. Will return null for non-polyhedral geometries. integer ST_NumPatches geometry g1 Description Return the number of faces on a Polyhedral Surface. Will return null for non-polyhedral geometries. This is an alias for ST_NumGeometries to support MM naming. Faster to use ST_NumGeometries if you don't care about MM convention. Availability: 2.0.0 &Z_support; &sfs_compliant; &sqlmm_compliant; SQL-MM 3: ? &P_support; Examples SELECT ST_NumPatches(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')); --result 6 See Also , ST_NumPoints Return the number of points in an ST_LineString or ST_CircularString value. integer ST_NumPoints geometry g1 Description Return the number of points in an ST_LineString or ST_CircularString value. Prior to 1.4 only works with Linestrings as the specs state. From 1.4 forward this is an alias for ST_NPoints which returns number of vertexes for not just line strings. Consider using ST_NPoints instead which is multi-purpose and works with many geometry types. &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 7.2.4 Examples SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')); --result 4 See Also ST_PatchN Return the 1-based Nth geometry (face) if the geometry is a POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise, return NULL. geometry ST_PatchN geometry geomA integer n Description >Return the 1-based Nth geometry (face) if the geometry is a POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise, return NULL. This returns the same answer as ST_GeometryN for Polyhedral Surfaces. Using ST_GemoetryN is faster. Index is 1-based. If you want to extract all geometries, of a geometry, ST_Dump is more efficient. Availability: 2.0.0 &sqlmm_compliant; SQL-MM 3: ? &Z_support; &P_support; Examples --Extract the 2nd face of the polyhedral surface SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt FROM ( VALUES (ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ) As foo(geom); geomewkt ---+----------------------------------------- POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)) See Also , , , , ST_PointN Return the Nth point in the first linestring or circular linestring in the geometry. Return NULL if there is no linestring in the geometry. geometry ST_PointN geometry a_linestring integer n Description Return the Nth point in a single linestring or circular linestring in the geometry. Return NULL if there is no linestring in the geometry. Index is 1-based as for OGC specs since version 0.8.0. Previous versions implemented this as 0-based instead. If you want to get the nth point of each line string in a multilinestring, use in conjunction with ST_Dump &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 7.2.5, 7.3.5 &Z_support; &curve_support; Changed: 2.0.0 no longer works with single geometry multilinestrings. In older versions of PostGIS -- a single line multilinestring would work happily with this function and return the start point. In 2.0.0 it just returns NULL like any other multilinestring. Examples -- Extract all POINTs from a LINESTRING SELECT ST_AsText( ST_PointN( column1, generate_series(1, ST_NPoints(column1)) )) FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo; st_astext ------------ POINT(0 0) POINT(1 1) POINT(2 2) (3 rows) --Example circular string SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'),2)); st_astext ---------- POINT(3 2) See Also ST_SRID Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table. integer ST_SRID geometry g1 Description Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table. spatial_ref_sys table is a table that catalogs all spatial reference systems known to PostGIS and is used for transformations from one spatial reference system to another. So verifying you have the right spatial reference system identifier is important if you plan to ever transform your geometries. &sfs_compliant; s2.1.1.1 &sqlmm_compliant; SQL-MM 3: 5.1.5 &curve_support; Examples SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326)); --result 4326 See Also , , , ST_StartPoint Returns the first point of a LINESTRING geometry as a POINT. geometry ST_StartPoint geometry geomA Description Returns the first point of a LINESTRING geometry as a POINT or NULL if the input parameter is not a LINESTRING. &sqlmm_compliant; SQL-MM 3: 7.1.3 &Z_support; Changed: 2.0.0 no longer works with single geometry multilinestrings. In older versions of PostGIS -- a single line multilinestring would work happily with this function and return the start point. In 2.0.0 it just returns NULL like any other multilinestring. The older behavior was an undocumented feature, but people who assumed they had their data stored as LINESTRING may experience these returning NULL in 2.0 now. Examples SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry)); st_astext ------------ POINT(0 1) (1 row) SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null; is_null ---------- t (1 row) --3d line SELECT ST_AsEWKT(ST_StartPoint('LINESTRING(0 1 1, 0 2 2)'::geometry)); st_asewkt ------------ POINT(0 1 1) (1 row) See Also , ST_Summary Returns a text summary of the contents of the geometry. text ST_Summary geometry g text ST_Summary geography g Description Returns a text summary of the contents of the geometry. Flags shown square brackets after the geometry type have the following meaning: M: has M ordinate Z: has Z ordinate B: has a cached bounding box G: is geodetic (geography) S: has spatial reference system Availability: 1.2.2 Enhanced: 2.0.0 added support for geography Enhanced: 2.1.0 S flag to denote if has a known spatial reference system Examples =# SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom, ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) geog; geom | geog -----------------------------+-------------------------- LineString[B] with 2 points | Polygon[BGS] with 1 rings | ring 0 has 5 points : (1 row) =# SELECT ST_Summary(ST_GeogFromText('LINESTRING(0 0 1, 1 1 1)')) As geog_line, ST_Summary(ST_GeomFromText('SRID=4326;POLYGON((0 0 1, 1 1 2, 1 2 3, 1 1 1, 0 0 1))')) As geom_poly; ; geog_line | geom_poly -------------------------------- +-------------------------- LineString[ZBGS] with 2 points | Polygon[ZBS] with 1 rings : ring 0 has 5 points : (1 row) See Also , , , , , , , , ST_X Return the X coordinate of the point, or NULL if not available. Input must be a point. float ST_X geometry a_point Description Return the X coordinate of the point, or NULL if not available. Input must be a point. If you want to get the max min x values of any geometry look at ST_XMin, ST_XMax functions. &sqlmm_compliant; SQL-MM 3: 6.1.3 &Z_support; Examples SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)')); st_x ------ 1 (1 row) SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)'))); st_y ------ 1.5 (1 row) See Also , , , , , , ST_XMax Returns X maxima of a bounding box 2d or 3d or a geometry. float ST_XMax box3d aGeomorBox2DorBox3D Description Returns X maxima of a bounding box 2d or 3d or a geometry. Although this function is only defined for box3d, it will work for box2d and geometry because of the auto-casting behavior defined for geometries and box2d. However you can not feed it a geometry or box2d text representation, since that will not auto-cast. &Z_support; &curve_support; Examples SELECT ST_XMax('BOX3D(1 2 3, 4 5 6)'); st_xmax ------- 4 SELECT ST_XMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)')); st_xmax ------- 5 SELECT ST_XMax(CAST('BOX(-3 2, 3 4)' As box2d)); st_xmax ------- 3 --Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D SELECT ST_XMax('LINESTRING(1 3, 5 6)'); --ERROR: BOX3D parser - doesnt start with BOX3D( SELECT ST_XMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')); st_xmax -------- 220288.248780547 See Also , , , , ST_XMin Returns X minima of a bounding box 2d or 3d or a geometry. float ST_XMin box3d aGeomorBox2DorBox3D Description Returns X minima of a bounding box 2d or 3d or a geometry. Although this function is only defined for box3d, it will work for box2d and geometry because of the auto-casting behavior defined for geometries and box2d. However you can not feed it a geometry or box2d text representation, since that will not auto-cast. &Z_support; &curve_support; Examples SELECT ST_XMin('BOX3D(1 2 3, 4 5 6)'); st_xmin ------- 1 SELECT ST_XMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)')); st_xmin ------- 1 SELECT ST_XMin(CAST('BOX(-3 2, 3 4)' As box2d)); st_xmin ------- -3 --Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D SELECT ST_XMin('LINESTRING(1 3, 5 6)'); --ERROR: BOX3D parser - doesnt start with BOX3D( SELECT ST_XMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')); st_xmin -------- 220186.995121892 See Also , , , , ST_Y Return the Y coordinate of the point, or NULL if not available. Input must be a point. float ST_Y geometry a_point Description Return the Y coordinate of the point, or NULL if not available. Input must be a point. &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 6.1.4 &Z_support; Examples SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)')); st_y ------ 2 (1 row) SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)'))); st_y ------ 1.5 (1 row) See Also , , , , , , ST_YMax Returns Y maxima of a bounding box 2d or 3d or a geometry. float ST_YMax box3d aGeomorBox2DorBox3D Description Returns Y maxima of a bounding box 2d or 3d or a geometry. Although this function is only defined for box3d, it will work for box2d and geometry because of the auto-casting behavior defined for geometries and box2d. However you can not feed it a geometry or box2d text representation, since that will not auto-cast. &Z_support; &curve_support; Examples SELECT ST_YMax('BOX3D(1 2 3, 4 5 6)'); st_ymax ------- 5 SELECT ST_YMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)')); st_ymax ------- 6 SELECT ST_YMax(CAST('BOX(-3 2, 3 4)' As box2d)); st_ymax ------- 4 --Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D SELECT ST_YMax('LINESTRING(1 3, 5 6)'); --ERROR: BOX3D parser - doesnt start with BOX3D( SELECT ST_YMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')); st_ymax -------- 150506.126829327 See Also , , , , ST_YMin Returns Y minima of a bounding box 2d or 3d or a geometry. float ST_YMin box3d aGeomorBox2DorBox3D Description Returns Y minima of a bounding box 2d or 3d or a geometry. Although this function is only defined for box3d, it will work for box2d and geometry because of the auto-casting behavior defined for geometries and box2d. However you can not feed it a geometry or box2d text representation, since that will not auto-cast. &Z_support; &curve_support; Examples SELECT ST_YMin('BOX3D(1 2 3, 4 5 6)'); st_ymin ------- 2 SELECT ST_YMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)')); st_ymin ------- 3 SELECT ST_YMin(CAST('BOX(-3 2, 3 4)' As box2d)); st_ymin ------- 2 --Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D SELECT ST_YMin('LINESTRING(1 3, 5 6)'); --ERROR: BOX3D parser - doesnt start with BOX3D( SELECT ST_YMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')); st_ymin -------- 150406 See Also , , , , , ST_Z Return the Z coordinate of the point, or NULL if not available. Input must be a point. float ST_Z geometry a_point Description Return the Z coordinate of the point, or NULL if not available. Input must be a point. &sqlmm_compliant; &Z_support; Examples SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)')); st_z ------ 3 (1 row) See Also , , , , , ST_ZMax Returns Z minima of a bounding box 2d or 3d or a geometry. float ST_ZMax box3d aGeomorBox2DorBox3D Description Returns Z maxima of a bounding box 2d or 3d or a geometry. Although this function is only defined for box3d, it will work for box2d and geometry because of the auto-casting behavior defined for geometries and box2d. However you can not feed it a geometry or box2d text representation, since that will not auto-cast. &Z_support; &curve_support; Examples SELECT ST_ZMax('BOX3D(1 2 3, 4 5 6)'); st_zmax ------- 6 SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)')); st_zmax ------- 7 SELECT ST_ZMax('BOX3D(-3 2 1, 3 4 1)' ); st_zmax ------- 1 --Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D SELECT ST_ZMax('LINESTRING(1 3 4, 5 6 7)'); --ERROR: BOX3D parser - doesnt start with BOX3D( SELECT ST_ZMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')); st_zmax -------- 3 See Also , , , , , ST_Zmflag Returns ZM (dimension semantic) flag of the geometries as a small int. Values are: 0=2d, 1=3dm, 2=3dz, 3=4d. smallint ST_Zmflag geometry geomA Description Returns ZM (dimension semantic) flag of the geometries as a small int. Values are: 0=2d, 1=3dm, 2=3dz, 3=4d. &Z_support; &curve_support; Examples SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)')); st_zmflag ----------- 0 SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)')); st_zmflag ----------- 1 SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)')); st_zmflag ----------- 2 SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)')); st_zmflag ----------- 3 See Also , , ST_ZMin Returns Z minima of a bounding box 2d or 3d or a geometry. float ST_ZMin box3d aGeomorBox2DorBox3D Description Returns Z minima of a bounding box 2d or 3d or a geometry. Although this function is only defined for box3d, it will work for box2d and geometry because of the auto-casting behavior defined for geometries and box2d. However you can not feed it a geometry or box2d text representation, since that will not auto-cast. &Z_support; &curve_support; Examples SELECT ST_ZMin('BOX3D(1 2 3, 4 5 6)'); st_zmin ------- 3 SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)')); st_zmin ------- 4 SELECT ST_ZMin('BOX3D(-3 2 1, 3 4 1)' ); st_zmin ------- 1 --Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D SELECT ST_ZMin('LINESTRING(1 3 4, 5 6 7)'); --ERROR: BOX3D parser - doesnt start with BOX3D( SELECT ST_ZMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')); st_zmin -------- 1 See Also , , , , , , postgis-2.1.2+dfsg.orig/doc/performance_tips.xml0000644000000000000000000003024612143205626020415 0ustar rootroot Performance tips Small tables of large geometries Problem description Current PostgreSQL versions (including 8.0) suffer from a query optimizer weakness regarding TOAST tables. TOAST tables are a kind of "extension room" used to store large (in the sense of data size) values that do not fit into normal data pages (like long texts, images or complex geometries with lots of vertices), see the PostgreSQL Documentation for TOAST for more information). The problem appears if you happen to have a table with rather large geometries, but not too much rows of them (like a table containing the boundaries of all European countries in high resolution). Then the table itself is small, but it uses lots of TOAST space. In our example case, the table itself had about 80 rows and used only 3 data pages, but the TOAST table used 8225 pages. Now issue a query where you use the geometry operator && to search for a bounding box that matches only very few of those rows. Now the query optimizer sees that the table has only 3 pages and 80 rows. He estimates that a sequential scan on such a small table is much faster than using an index. And so he decides to ignore the GIST index. Usually, this estimation is correct. But in our case, the && operator has to fetch every geometry from disk to compare the bounding boxes, thus reading all TOAST pages, too. To see whether your suffer from this bug, use the "EXPLAIN ANALYZE" postgresql command. For more information and the technical details, you can read the thread on the postgres performance mailing list: http://archives.postgresql.org/pgsql-performance/2005-02/msg00030.php Workarounds The PostgreSQL people are trying to solve this issue by making the query estimation TOAST-aware. For now, here are two workarounds: The first workaround is to force the query planner to use the index. Send "SET enable_seqscan TO off;" to the server before issuing the query. This basically forces the query planner to avoid sequential scans whenever possible. So it uses the GIST index as usual. But this flag has to be set on every connection, and it causes the query planner to make misestimations in other cases, so you should "SET enable_seqscan TO on;" after the query. The second workaround is to make the sequential scan as fast as the query planner thinks. This can be achieved by creating an additional column that "caches" the bbox, and matching against this. In our example, the commands are like: SELECT AddGeometryColumn('myschema','mytable','bbox','4326','GEOMETRY','2'); UPDATE mytable SET bbox = ST_Envelope(ST_Force2D(the_geom)); Now change your query to use the && operator against bbox instead of geom_column, like: SELECT geom_column FROM mytable WHERE bbox && ST_SetSRID('BOX3D(0 0,1 1)'::box3d,4326); Of course, if you change or add rows to mytable, you have to keep the bbox "in sync". The most transparent way to do this would be triggers, but you also can modify your application to keep the bbox column current or run the UPDATE query above after every modification. CLUSTERing on geometry indices For tables that are mostly read-only, and where a single index is used for the majority of queries, PostgreSQL offers the CLUSTER command. This command physically reorders all the data rows in the same order as the index criteria, yielding two performance advantages: First, for index range scans, the number of seeks on the data table is drastically reduced. Second, if your working set concentrates to some small intervals on the indices, you have a more efficient caching because the data rows are spread along fewer data pages. (Feel invited to read the CLUSTER command documentation from the PostgreSQL manual at this point.) However, currently PostgreSQL does not allow clustering on PostGIS GIST indices because GIST indices simply ignores NULL values, you get an error message like: lwgeom=# CLUSTER my_geom_index ON my_table; ERROR: cannot cluster when index access method does not handle null values HINT: You may be able to work around this by marking column "the_geom" NOT NULL. As the HINT message tells you, one can work around this deficiency by adding a "not null" constraint to the table: lwgeom=# ALTER TABLE my_table ALTER COLUMN the_geom SET not null; ALTER TABLE Of course, this will not work if you in fact need NULL values in your geometry column. Additionally, you must use the above method to add the constraint, using a CHECK constraint like "ALTER TABLE blubb ADD CHECK (geometry is not null);" will not work. Avoiding dimension conversion Sometimes, you happen to have 3D or 4D data in your table, but always access it using OpenGIS compliant ST_AsText() or ST_AsBinary() functions that only output 2D geometries. They do this by internally calling the ST_Force2D() function, which introduces a significant overhead for large geometries. To avoid this overhead, it may be feasible to pre-drop those additional dimensions once and forever: UPDATE mytable SET the_geom = ST_Force2D(the_geom); VACUUM FULL ANALYZE mytable; Note that if you added your geometry column using AddGeometryColumn() there'll be a constraint on geometry dimension. To bypass it you will need to drop the constraint. Remember to update the entry in the geometry_columns table and recreate the constraint afterwards. In case of large tables, it may be wise to divide this UPDATE into smaller portions by constraining the UPDATE to a part of the table via a WHERE clause and your primary key or another feasible criteria, and running a simple "VACUUM;" between your UPDATEs. This drastically reduces the need for temporary disk space. Additionally, if you have mixed dimension geometries, restricting the UPDATE by "WHERE dimension(the_geom)>2" skips re-writing of geometries that already are in 2D. Tuning your configuration These tips are taken from Kevin Neufeld's presentation "Tips for the PostGIS Power User" at the FOSS4G 2007 conference. Depending on your use of PostGIS (for example, static data and complex analysis vs frequently updated data and lots of users) these changes can provide significant speedups to your queries. For a more tips (and better formatting), the original presentation is at http://2007.foss4g.org/presentations/view.php?abstract_id=117. Startup These settings are configured in postgresql.conf: checkpoint_segments Maximum number of log file segments between automatic WAL checkpoints (each segment is normally 16MB); default is 3 Set to at least 10 or 30 for databases with heavy write activity, or more for large database loads. Another article on the topic worth reading Greg Smith: Checkpoint and Background writer Possibly store the xlog on a separate disk device constraint_exclusion Default: off (prior to PostgreSQL 8.4 and for PostgreSQL 8.4+ is set to partition) This is generally used for table partitioning. If you are running PostgreSQL versions below 8.4, set to "on" to ensure the query planner will optimize as desired. As of PostgreSQL 8.4, the default for this is set to "partition" which is ideal for PostgreSQL 8.4 and above since it will force the planner to only analyze tables for constraint consideration if they are in an inherited hierarchy and not pay the planner penalty otherwise. shared_buffers Default: ~32MB Set to about 1/3 to 3/4 of available RAM Runtime work_mem (the memory used for sort operations and complex queries) Default: 1MB Adjust up for large dbs, complex queries, lots of RAM Adjust down for many concurrent users or low RAM. If you have lots of RAM and few developers: SET work_mem TO 1200000; maintenance_work_mem (used for VACUUM, CREATE INDEX, etc.) Default: 16MB Generally too low - ties up I/O, locks objects while swapping memory Recommend 32MB to 256MB on production servers w/lots of RAM, but depends on the # of concurrent users. If you have lots of RAM and few developers: SET maintainence_work_mem TO 1200000; postgis-2.1.2+dfsg.orig/doc/reporting.xml0000644000000000000000000000653311722777314017102 0ustar rootroot Reporting Problems Reporting Software Bugs Reporting bugs effectively is a fundamental way to help PostGIS development. The most effective bug report is that enabling PostGIS developers to reproduce it, so it would ideally contain a script triggering it and every information regarding the environment in which it was detected. Good enough info can be extracted running SELECT postgis_full_version() [for postgis] and SELECT version() [for postgresql]. If you aren't using the latest release, it's worth taking a look at its release changelog first, to find out if your bug has already been fixed. Using the PostGIS bug tracker will ensure your reports are not discarded, and will keep you informed on its handling process. Before reporting a new bug please query the database to see if it is a known one, and if it is please add any new information you have about it. You might want to read Simon Tatham's paper about How to Report Bugs Effectively before filing a new report. Reporting Documentation Issues The documentation should accurately reflect the features and behavior of the software. If it doesn't, it could be because of a software bug or because the documentation is in error or deficient. Documentation issues can also be reported to the PostGIS bug tracker. If your revision is trivial, just describe it in a new bug tracker issue, being specific about its location in the documentation. If your changes are more extensive, a Subversion patch is definitely preferred. This is a four step process on Unix (assuming you already have Subversion installed): Check out a copy of PostGIS' Subversion trunk. On Unix, type: svn checkout http://svn.osgeo.org/postgis/trunk/ This will be stored in the directory ./trunk Make your changes to the documentation with your favorite text editor. On Unix, type (for example): vim trunk/doc/postgis.xml Note that the documentation is written in DocBook XML rather than HTML, so if you are not familiar with it please follow the example of the rest of the documentation. Make a patch file containing the differences from the master copy of the documentation. On Unix, type: svn diff trunk/doc/postgis.xml > doc.patch Attach the patch to a new issue in bug tracker. postgis-2.1.2+dfsg.orig/doc/postgis_comments.sql0000644000000000000000000020017212315456253020453 0ustar rootroot COMMENT ON TYPE box2d IS 'postgis type: A box composed of x min, ymin, xmax, ymax. Often used to return the 2d enclosing box of a geometry.'; COMMENT ON TYPE box3d IS 'postgis type: A box composed of x min, ymin, zmin, xmax, ymax, zmax. Often used to return the 3d extent of a geometry or collection of geometries.'; COMMENT ON TYPE geometry IS 'postgis type: Planar spatial data type.'; COMMENT ON TYPE geometry_dump IS 'postgis type: A spatial datatype with two fields - geom (holding a geometry object) and path[] (a 1-d array holding the position of the geometry within the dumped object.)'; COMMENT ON TYPE geography IS 'postgis type: Ellipsoidal spatial data type.'; COMMENT ON FUNCTION AddGeometryColumn(varchar , varchar , integer , varchar , integer , boolean ) IS 'args: table_name, column_name, srid, type, dimension, use_typmod=true - Adds a geometry column to an existing table of attributes. By default uses type modifier to define rather than constraints. Pass in false for use_typmod to get old check constraint based behavior'; COMMENT ON FUNCTION AddGeometryColumn(varchar , varchar , varchar , integer , varchar , integer , boolean ) IS 'args: schema_name, table_name, column_name, srid, type, dimension, use_typmod=true - Adds a geometry column to an existing table of attributes. By default uses type modifier to define rather than constraints. Pass in false for use_typmod to get old check constraint based behavior'; COMMENT ON FUNCTION AddGeometryColumn(varchar , varchar , varchar , varchar , integer , varchar , integer , boolean ) IS 'args: catalog_name, schema_name, table_name, column_name, srid, type, dimension, use_typmod=true - Adds a geometry column to an existing table of attributes. By default uses type modifier to define rather than constraints. Pass in false for use_typmod to get old check constraint based behavior'; COMMENT ON FUNCTION DropGeometryColumn(varchar , varchar ) IS 'args: table_name, column_name - Removes a geometry column from a spatial table.'; COMMENT ON FUNCTION DropGeometryColumn(varchar , varchar , varchar ) IS 'args: schema_name, table_name, column_name - Removes a geometry column from a spatial table.'; COMMENT ON FUNCTION DropGeometryColumn(varchar , varchar , varchar , varchar ) IS 'args: catalog_name, schema_name, table_name, column_name - Removes a geometry column from a spatial table.'; COMMENT ON FUNCTION DropGeometryTable(varchar ) IS 'args: table_name - Drops a table and all its references in geometry_columns.'; COMMENT ON FUNCTION DropGeometryTable(varchar , varchar ) IS 'args: schema_name, table_name - Drops a table and all its references in geometry_columns.'; COMMENT ON FUNCTION DropGeometryTable(varchar , varchar , varchar ) IS 'args: catalog_name, schema_name, table_name - Drops a table and all its references in geometry_columns.'; COMMENT ON FUNCTION PostGIS_Full_Version() IS 'Reports full postgis version and build configuration infos.'; COMMENT ON FUNCTION PostGIS_GEOS_Version() IS 'Returns the version number of the GEOS library.'; COMMENT ON FUNCTION PostGIS_LibXML_Version() IS 'Returns the version number of the libxml2 library.'; COMMENT ON FUNCTION PostGIS_Lib_Build_Date() IS 'Returns build date of the PostGIS library.'; COMMENT ON FUNCTION PostGIS_Lib_Version() IS 'Returns the version number of the PostGIS library.'; COMMENT ON FUNCTION PostGIS_PROJ_Version() IS 'Returns the version number of the PROJ4 library.'; COMMENT ON FUNCTION PostGIS_Scripts_Build_Date() IS 'Returns build date of the PostGIS scripts.'; COMMENT ON FUNCTION PostGIS_Scripts_Installed() IS 'Returns version of the postgis scripts installed in this database.'; COMMENT ON FUNCTION PostGIS_Scripts_Released() IS 'Returns the version number of the postgis.sql script released with the installed postgis lib.'; COMMENT ON FUNCTION PostGIS_Version() IS 'Returns PostGIS version number and compile-time options.'; COMMENT ON FUNCTION Populate_Geometry_Columns(boolean ) IS 'args: use_typmod=true - Ensures geometry columns are defined with type modifiers or have appropriate spatial constraints This ensures they will be registered correctly in geometry_columns view. By default will convert all geometry columns with no type modifier to ones with type modifiers. To get old behavior set use_typmod=false'; COMMENT ON FUNCTION Populate_Geometry_Columns(oid, boolean ) IS 'args: relation_oid, use_typmod=true - Ensures geometry columns are defined with type modifiers or have appropriate spatial constraints This ensures they will be registered correctly in geometry_columns view. By default will convert all geometry columns with no type modifier to ones with type modifiers. To get old behavior set use_typmod=false'; COMMENT ON FUNCTION UpdateGeometrySRID(varchar , varchar , integer ) IS 'args: table_name, column_name, srid - Updates the SRID of all features in a geometry column, geometry_columns metadata and srid. If it was enforced with constraints, the constraints will be updated with new srid constraint. If the old was enforced by type definition, the type definition will be changed.'; COMMENT ON FUNCTION UpdateGeometrySRID(varchar , varchar , varchar , integer ) IS 'args: schema_name, table_name, column_name, srid - Updates the SRID of all features in a geometry column, geometry_columns metadata and srid. If it was enforced with constraints, the constraints will be updated with new srid constraint. If the old was enforced by type definition, the type definition will be changed.'; COMMENT ON FUNCTION UpdateGeometrySRID(varchar , varchar , varchar , varchar , integer ) IS 'args: catalog_name, schema_name, table_name, column_name, srid - Updates the SRID of all features in a geometry column, geometry_columns metadata and srid. If it was enforced with constraints, the constraints will be updated with new srid constraint. If the old was enforced by type definition, the type definition will be changed.'; COMMENT ON FUNCTION ST_BdPolyFromText(text , integer ) IS 'args: WKT, srid - Construct a Polygon given an arbitrary collection of closed linestrings as a MultiLineString Well-Known text representation.'; COMMENT ON FUNCTION ST_BdMPolyFromText(text , integer ) IS 'args: WKT, srid - Construct a MultiPolygon given an arbitrary collection of closed linestrings as a MultiLineString text representation Well-Known text representation.'; COMMENT ON FUNCTION ST_Box2dFromGeoHash(text , integer ) IS 'args: geohash, precision=full_precision_of_geohash - Return a BOX2D from a GeoHash string.'; COMMENT ON FUNCTION ST_GeogFromText(text ) IS 'args: EWKT - Return a specified geography value from Well-Known Text representation or extended (WKT).'; COMMENT ON FUNCTION ST_GeographyFromText(text ) IS 'args: EWKT - Return a specified geography value from Well-Known Text representation or extended (WKT).'; COMMENT ON FUNCTION ST_GeogFromWKB(bytea ) IS 'args: geom - Creates a geography instance from a Well-Known Binary geometry representation (WKB) or extended Well Known Binary (EWKB).'; COMMENT ON FUNCTION ST_GeomCollFromText(text , integer ) IS 'args: WKT, srid - Makes a collection Geometry from collection WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_GeomCollFromText(text ) IS 'args: WKT - Makes a collection Geometry from collection WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_GeomFromEWKB(bytea ) IS 'args: EWKB - Return a specified ST_Geometry value from Extended Well-Known Binary representation (EWKB).'; COMMENT ON FUNCTION ST_GeomFromEWKT(text ) IS 'args: EWKT - Return a specified ST_Geometry value from Extended Well-Known Text representation (EWKT).'; COMMENT ON FUNCTION ST_GeometryFromText(text ) IS 'args: WKT - Return a specified ST_Geometry value from Well-Known Text representation (WKT). This is an alias name for ST_GeomFromText'; COMMENT ON FUNCTION ST_GeometryFromText(text , integer ) IS 'args: WKT, srid - Return a specified ST_Geometry value from Well-Known Text representation (WKT). This is an alias name for ST_GeomFromText'; COMMENT ON FUNCTION ST_GeomFromGeoHash(text , integer ) IS 'args: geohash, precision=full_precision_of_geohash - Return a geometry from a GeoHash string.'; COMMENT ON FUNCTION ST_GeomFromGML(text ) IS 'args: geomgml - Takes as input GML representation of geometry and outputs a PostGIS geometry object'; COMMENT ON FUNCTION ST_GeomFromGML(text , integer ) IS 'args: geomgml, srid - Takes as input GML representation of geometry and outputs a PostGIS geometry object'; COMMENT ON FUNCTION ST_GeomFromGeoJSON(text ) IS 'args: geomjson - Takes as input a geojson representation of a geometry and outputs a PostGIS geometry object'; COMMENT ON FUNCTION ST_GeomFromKML(text ) IS 'args: geomkml - Takes as input KML representation of geometry and outputs a PostGIS geometry object'; COMMENT ON FUNCTION ST_GMLToSQL(text ) IS 'args: geomgml - Return a specified ST_Geometry value from GML representation. This is an alias name for ST_GeomFromGML'; COMMENT ON FUNCTION ST_GMLToSQL(text , integer ) IS 'args: geomgml, srid - Return a specified ST_Geometry value from GML representation. This is an alias name for ST_GeomFromGML'; COMMENT ON FUNCTION ST_GeomFromText(text ) IS 'args: WKT - Return a specified ST_Geometry value from Well-Known Text representation (WKT).'; COMMENT ON FUNCTION ST_GeomFromText(text , integer ) IS 'args: WKT, srid - Return a specified ST_Geometry value from Well-Known Text representation (WKT).'; COMMENT ON FUNCTION ST_GeomFromWKB(bytea ) IS 'args: geom - Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID.'; COMMENT ON FUNCTION ST_GeomFromWKB(bytea , integer ) IS 'args: geom, srid - Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID.'; COMMENT ON FUNCTION ST_LineFromMultiPoint(geometry ) IS 'args: aMultiPoint - Creates a LineString from a MultiPoint geometry.'; COMMENT ON FUNCTION ST_LineFromText(text ) IS 'args: WKT - Makes a Geometry from WKT representation with the given SRID. If SRID is not given, it defaults to 0.'; COMMENT ON FUNCTION ST_LineFromText(text , integer ) IS 'args: WKT, srid - Makes a Geometry from WKT representation with the given SRID. If SRID is not given, it defaults to 0.'; COMMENT ON FUNCTION ST_LineFromWKB(bytea ) IS 'args: WKB - Makes a LINESTRING from WKB with the given SRID'; COMMENT ON FUNCTION ST_LineFromWKB(bytea , integer ) IS 'args: WKB, srid - Makes a LINESTRING from WKB with the given SRID'; COMMENT ON FUNCTION ST_LinestringFromWKB(bytea ) IS 'args: WKB - Makes a geometry from WKB with the given SRID.'; COMMENT ON FUNCTION ST_LinestringFromWKB(bytea , integer ) IS 'args: WKB, srid - Makes a geometry from WKB with the given SRID.'; COMMENT ON FUNCTION ST_MakeBox2D(geometry , geometry ) IS 'args: pointLowLeft, pointUpRight - Creates a BOX2D defined by the given point geometries.'; COMMENT ON FUNCTION ST_3DMakeBox(geometry , geometry ) IS 'args: point3DLowLeftBottom, point3DUpRightTop - Creates a BOX3D defined by the given 3d point geometries.'; COMMENT ON AGGREGATE ST_MakeLine(geometry) IS 'args: geoms - Creates a Linestring from point or line geometries.'; COMMENT ON FUNCTION ST_MakeLine(geometry, geometry) IS 'args: geom1, geom2 - Creates a Linestring from point or line geometries.'; COMMENT ON FUNCTION ST_MakeLine(geometry[]) IS 'args: geoms_array - Creates a Linestring from point or line geometries.'; COMMENT ON FUNCTION ST_MakeEnvelope(double precision, double precision, double precision, double precision, integer ) IS 'args: xmin, ymin, xmax, ymax, srid=unknown - Creates a rectangular Polygon formed from the given minimums and maximums. Input values must be in SRS specified by the SRID.'; COMMENT ON FUNCTION ST_MakePolygon(geometry) IS 'args: linestring - Creates a Polygon formed by the given shell. Input geometries must be closed LINESTRINGS.'; COMMENT ON FUNCTION ST_MakePolygon(geometry, geometry[]) IS 'args: outerlinestring, interiorlinestrings - Creates a Polygon formed by the given shell. Input geometries must be closed LINESTRINGS.'; COMMENT ON FUNCTION ST_MakePoint(double precision, double precision) IS 'args: x, y - Creates a 2D,3DZ or 4D point geometry.'; COMMENT ON FUNCTION ST_MakePoint(double precision, double precision, double precision) IS 'args: x, y, z - Creates a 2D,3DZ or 4D point geometry.'; COMMENT ON FUNCTION ST_MakePoint(double precision, double precision, double precision, double precision) IS 'args: x, y, z, m - Creates a 2D,3DZ or 4D point geometry.'; COMMENT ON FUNCTION ST_MakePointM(float, float, float) IS 'args: x, y, m - Creates a point geometry with an x y and m coordinate.'; COMMENT ON FUNCTION ST_MLineFromText(text , integer ) IS 'args: WKT, srid - Return a specified ST_MultiLineString value from WKT representation.'; COMMENT ON FUNCTION ST_MLineFromText(text ) IS 'args: WKT - Return a specified ST_MultiLineString value from WKT representation.'; COMMENT ON FUNCTION ST_MPointFromText(text , integer ) IS 'args: WKT, srid - Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_MPointFromText(text ) IS 'args: WKT - Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_MPolyFromText(text , integer ) IS 'args: WKT, srid - Makes a MultiPolygon Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_MPolyFromText(text ) IS 'args: WKT - Makes a MultiPolygon Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_Point(float , float ) IS 'args: x_lon, y_lat - Returns an ST_Point with the given coordinate values. OGC alias for ST_MakePoint.'; COMMENT ON FUNCTION ST_PointFromGeoHash(text , integer ) IS 'args: geohash, precision=full_precision_of_geohash - Return a point from a GeoHash string.'; COMMENT ON FUNCTION ST_PointFromText(text ) IS 'args: WKT - Makes a point Geometry from WKT with the given SRID. If SRID is not given, it defaults to unknown.'; COMMENT ON FUNCTION ST_PointFromText(text , integer ) IS 'args: WKT, srid - Makes a point Geometry from WKT with the given SRID. If SRID is not given, it defaults to unknown.'; COMMENT ON FUNCTION ST_GeomFromWKB(bytea ) IS 'args: geom - Makes a geometry from WKB with the given SRID'; COMMENT ON FUNCTION ST_GeomFromWKB(bytea , integer ) IS 'args: geom, srid - Makes a geometry from WKB with the given SRID'; COMMENT ON FUNCTION ST_Polygon(geometry , integer ) IS 'args: aLineString, srid - Returns a polygon built from the specified linestring and SRID.'; COMMENT ON FUNCTION ST_PolygonFromText(text ) IS 'args: WKT - Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_PolygonFromText(text , integer ) IS 'args: WKT, srid - Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0.'; COMMENT ON FUNCTION ST_WKBToSQL(bytea ) IS 'args: WKB - Return a specified ST_Geometry value from Well-Known Binary representation (WKB). This is an alias name for ST_GeomFromWKB that takes no srid'; COMMENT ON FUNCTION ST_WKTToSQL(text ) IS 'args: WKT - Return a specified ST_Geometry value from Well-Known Text representation (WKT). This is an alias name for ST_GeomFromText'; COMMENT ON FUNCTION GeometryType(geometry ) IS 'args: geomA - Returns the type of the geometry as a string. Eg: LINESTRING, POLYGON, MULTIPOINT, etc.'; COMMENT ON FUNCTION ST_Boundary(geometry ) IS 'args: geomA - Returns the closure of the combinatorial boundary of this Geometry.'; COMMENT ON FUNCTION ST_CoordDim(geometry ) IS 'args: geomA - Return the coordinate dimension of the ST_Geometry value.'; COMMENT ON FUNCTION ST_Dimension(geometry ) IS 'args: g - The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension.'; COMMENT ON FUNCTION ST_EndPoint(geometry ) IS 'args: g - Returns the last point of a LINESTRING geometry as a POINT.'; COMMENT ON FUNCTION ST_Envelope(geometry ) IS 'args: g1 - Returns a geometry representing the double precision (float8) bounding box of the supplied geometry.'; COMMENT ON FUNCTION ST_ExteriorRing(geometry ) IS 'args: a_polygon - Returns a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon. Will not work with MULTIPOLYGON'; COMMENT ON FUNCTION ST_GeometryN(geometry , integer ) IS 'args: geomA, n - Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE Otherwise, return NULL.'; COMMENT ON FUNCTION ST_GeometryType(geometry ) IS 'args: g1 - Return the geometry type of the ST_Geometry value.'; COMMENT ON FUNCTION ST_InteriorRingN(geometry , integer ) IS 'args: a_polygon, n - Return the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range.'; COMMENT ON FUNCTION ST_IsClosed(geometry ) IS 'args: g - Returns TRUE if the LINESTRINGs start and end points are coincident. For Polyhedral surface is closed (volumetric).'; COMMENT ON FUNCTION ST_IsCollection(geometry ) IS 'args: g - Returns TRUE if the argument is a collection (MULTI*, GEOMETRYCOLLECTION, ...)'; COMMENT ON FUNCTION ST_IsEmpty(geometry ) IS 'args: geomA - Returns true if this Geometry is an empty geometrycollection, polygon, point etc.'; COMMENT ON FUNCTION ST_IsRing(geometry ) IS 'args: g - Returns TRUE if this LINESTRING is both closed and simple.'; COMMENT ON FUNCTION ST_IsSimple(geometry ) IS 'args: geomA - Returns (TRUE) if this Geometry has no anomalous geometric points, such as self intersection or self tangency.'; COMMENT ON FUNCTION ST_IsValid(geometry ) IS 'args: g - Returns true if the ST_Geometry is well formed.'; COMMENT ON FUNCTION ST_IsValid(geometry , integer ) IS 'args: g, flags - Returns true if the ST_Geometry is well formed.'; COMMENT ON FUNCTION ST_IsValidReason(geometry ) IS 'args: geomA - Returns text stating if a geometry is valid or not and if not valid, a reason why.'; COMMENT ON FUNCTION ST_IsValidReason(geometry , integer ) IS 'args: geomA, flags - Returns text stating if a geometry is valid or not and if not valid, a reason why.'; COMMENT ON FUNCTION ST_IsValidDetail(geometry ) IS 'args: geom - Returns a valid_detail (valid,reason,location) row stating if a geometry is valid or not and if not valid, a reason why and a location where.'; COMMENT ON FUNCTION ST_IsValidDetail(geometry , integer ) IS 'args: geom, flags - Returns a valid_detail (valid,reason,location) row stating if a geometry is valid or not and if not valid, a reason why and a location where.'; COMMENT ON FUNCTION ST_M(geometry ) IS 'args: a_point - Return the M coordinate of the point, or NULL if not available. Input must be a point.'; COMMENT ON FUNCTION ST_NDims(geometry ) IS 'args: g1 - Returns coordinate dimension of the geometry as a small int. Values are: 2,3 or 4.'; COMMENT ON FUNCTION ST_NPoints(geometry ) IS 'args: g1 - Return the number of points (vertexes) in a geometry.'; COMMENT ON FUNCTION ST_NRings(geometry ) IS 'args: geomA - If the geometry is a polygon or multi-polygon returns the number of rings.'; COMMENT ON FUNCTION ST_NumGeometries(geometry ) IS 'args: geom - If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single geometries will return 1, otherwise return NULL.'; COMMENT ON FUNCTION ST_NumInteriorRings(geometry ) IS 'args: a_polygon - Return the number of interior rings of the first polygon in the geometry. This will work with both POLYGON and MULTIPOLYGON types but only looks at the first polygon. Return NULL if there is no polygon in the geometry.'; COMMENT ON FUNCTION ST_NumInteriorRing(geometry ) IS 'args: a_polygon - Return the number of interior rings of the first polygon in the geometry. Synonym to ST_NumInteriorRings.'; COMMENT ON FUNCTION ST_NumPatches(geometry ) IS 'args: g1 - Return the number of faces on a Polyhedral Surface. Will return null for non-polyhedral geometries.'; COMMENT ON FUNCTION ST_NumPoints(geometry ) IS 'args: g1 - Return the number of points in an ST_LineString or ST_CircularString value.'; COMMENT ON FUNCTION ST_PatchN(geometry , integer ) IS 'args: geomA, n - Return the 1-based Nth geometry (face) if the geometry is a POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise, return NULL.'; COMMENT ON FUNCTION ST_PointN(geometry , integer ) IS 'args: a_linestring, n - Return the Nth point in the first linestring or circular linestring in the geometry. Return NULL if there is no linestring in the geometry.'; COMMENT ON FUNCTION ST_SRID(geometry ) IS 'args: g1 - Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table.'; COMMENT ON FUNCTION ST_StartPoint(geometry ) IS 'args: geomA - Returns the first point of a LINESTRING geometry as a POINT.'; COMMENT ON FUNCTION ST_Summary(geometry ) IS 'args: g - Returns a text summary of the contents of the geometry.'; COMMENT ON FUNCTION ST_Summary(geography ) IS 'args: g - Returns a text summary of the contents of the geometry.'; COMMENT ON FUNCTION ST_X(geometry ) IS 'args: a_point - Return the X coordinate of the point, or NULL if not available. Input must be a point.'; COMMENT ON FUNCTION ST_XMax(box3d ) IS 'args: aGeomorBox2DorBox3D - Returns X maxima of a bounding box 2d or 3d or a geometry.'; COMMENT ON FUNCTION ST_XMin(box3d ) IS 'args: aGeomorBox2DorBox3D - Returns X minima of a bounding box 2d or 3d or a geometry.'; COMMENT ON FUNCTION ST_Y(geometry ) IS 'args: a_point - Return the Y coordinate of the point, or NULL if not available. Input must be a point.'; COMMENT ON FUNCTION ST_YMax(box3d ) IS 'args: aGeomorBox2DorBox3D - Returns Y maxima of a bounding box 2d or 3d or a geometry.'; COMMENT ON FUNCTION ST_YMin(box3d ) IS 'args: aGeomorBox2DorBox3D - Returns Y minima of a bounding box 2d or 3d or a geometry.'; COMMENT ON FUNCTION ST_Z(geometry ) IS 'args: a_point - Return the Z coordinate of the point, or NULL if not available. Input must be a point.'; COMMENT ON FUNCTION ST_ZMax(box3d ) IS 'args: aGeomorBox2DorBox3D - Returns Z minima of a bounding box 2d or 3d or a geometry.'; COMMENT ON FUNCTION ST_Zmflag(geometry ) IS 'args: geomA - Returns ZM (dimension semantic) flag of the geometries as a small int. Values are: 0=2d, 1=3dm, 2=3dz, 3=4d.'; COMMENT ON FUNCTION ST_ZMin(box3d ) IS 'args: aGeomorBox2DorBox3D - Returns Z minima of a bounding box 2d or 3d or a geometry.'; COMMENT ON FUNCTION ST_AddPoint(geometry, geometry) IS 'args: linestring, point - Adds a point to a LineString before point (0-based index).'; COMMENT ON FUNCTION ST_AddPoint(geometry, geometry, integer) IS 'args: linestring, point, position - Adds a point to a LineString before point (0-based index).'; COMMENT ON FUNCTION ST_Affine(geometry , float , float , float , float , float , float , float , float , float , float , float , float ) IS 'args: geomA, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff - Applies a 3d affine transformation to the geometry to do things like translate, rotate, scale in one step.'; COMMENT ON FUNCTION ST_Affine(geometry , float , float , float , float , float , float ) IS 'args: geomA, a, b, d, e, xoff, yoff - Applies a 3d affine transformation to the geometry to do things like translate, rotate, scale in one step.'; COMMENT ON FUNCTION ST_Force2D(geometry ) IS 'args: geomA - Forces the geometries into a "2-dimensional mode" so that all output representations will only have the X and Y coordinates.'; COMMENT ON FUNCTION ST_Force3D(geometry ) IS 'args: geomA - Forces the geometries into XYZ mode. This is an alias for ST_Force3DZ.'; COMMENT ON FUNCTION ST_Force3DZ(geometry ) IS 'args: geomA - Forces the geometries into XYZ mode. This is a synonym for ST_Force3D.'; COMMENT ON FUNCTION ST_Force3DM(geometry ) IS 'args: geomA - Forces the geometries into XYM mode.'; COMMENT ON FUNCTION ST_Force4D(geometry ) IS 'args: geomA - Forces the geometries into XYZM mode.'; COMMENT ON FUNCTION ST_ForceCollection(geometry ) IS 'args: geomA - Converts the geometry into a GEOMETRYCOLLECTION.'; COMMENT ON FUNCTION ST_ForceSFS(geometry ) IS 'args: geomA - Forces the geometries to use SFS 1.1 geometry types only.'; COMMENT ON FUNCTION ST_ForceSFS(geometry , text ) IS 'args: geomA, version - Forces the geometries to use SFS 1.1 geometry types only.'; COMMENT ON FUNCTION ST_ForceRHR(geometry) IS 'args: g - Forces the orientation of the vertices in a polygon to follow the Right-Hand-Rule.'; COMMENT ON FUNCTION ST_LineMerge(geometry ) IS 'args: amultilinestring - Returns a (set of) LineString(s) formed by sewing together a MULTILINESTRING.'; COMMENT ON FUNCTION ST_CollectionExtract(geometry , integer ) IS 'args: collection, type - Given a (multi)geometry, returns a (multi)geometry consisting only of elements of the specified type.'; COMMENT ON FUNCTION ST_CollectionHomogenize(geometry ) IS 'args: collection - Given a geometry collection, returns the "simplest" representation of the contents.'; COMMENT ON FUNCTION ST_Multi(geometry ) IS 'args: g1 - Returns the geometry as a MULTI* geometry. If the geometry is already a MULTI*, it is returned unchanged.'; COMMENT ON FUNCTION ST_RemovePoint(geometry, integer) IS 'args: linestring, offset - Removes point from a linestring. Offset is 0-based.'; COMMENT ON FUNCTION ST_Reverse(geometry ) IS 'args: g1 - Returns the geometry with vertex order reversed.'; COMMENT ON FUNCTION ST_Rotate(geometry, float) IS 'args: geomA, rotRadians - Rotate a geometry rotRadians counter-clockwise about an origin.'; COMMENT ON FUNCTION ST_Rotate(geometry, float, float, float) IS 'args: geomA, rotRadians, x0, y0 - Rotate a geometry rotRadians counter-clockwise about an origin.'; COMMENT ON FUNCTION ST_Rotate(geometry, float, geometry) IS 'args: geomA, rotRadians, pointOrigin - Rotate a geometry rotRadians counter-clockwise about an origin.'; COMMENT ON FUNCTION ST_RotateX(geometry, float) IS 'args: geomA, rotRadians - Rotate a geometry rotRadians about the X axis.'; COMMENT ON FUNCTION ST_RotateY(geometry, float) IS 'args: geomA, rotRadians - Rotate a geometry rotRadians about the Y axis.'; COMMENT ON FUNCTION ST_RotateZ(geometry, float) IS 'args: geomA, rotRadians - Rotate a geometry rotRadians about the Z axis.'; COMMENT ON FUNCTION ST_Scale(geometry , float, float, float) IS 'args: geomA, XFactor, YFactor, ZFactor - Scales the geometry to a new size by multiplying the ordinates with the parameters. Ie: ST_Scale(geom, Xfactor, Yfactor, Zfactor).'; COMMENT ON FUNCTION ST_Scale(geometry , float, float) IS 'args: geomA, XFactor, YFactor - Scales the geometry to a new size by multiplying the ordinates with the parameters. Ie: ST_Scale(geom, Xfactor, Yfactor, Zfactor).'; COMMENT ON FUNCTION ST_Segmentize(geometry , float ) IS 'args: geom, max_segment_length - Return a modified geometry/geography having no segment longer than the given distance. Distance computation is performed in 2d only. For geometry, length units are in units of spatial reference. For geography, units are in meters.'; COMMENT ON FUNCTION ST_Segmentize(geography , float ) IS 'args: geog, max_segment_length - Return a modified geometry/geography having no segment longer than the given distance. Distance computation is performed in 2d only. For geometry, length units are in units of spatial reference. For geography, units are in meters.'; COMMENT ON FUNCTION ST_SetPoint(geometry, integer, geometry) IS 'args: linestring, zerobasedposition, point - Replace point N of linestring with given point. Index is 0-based.'; COMMENT ON FUNCTION ST_SetSRID(geometry , integer ) IS 'args: geom, srid - Sets the SRID on a geometry to a particular integer value.'; COMMENT ON FUNCTION ST_SnapToGrid(geometry , float , float , float , float ) IS 'args: geomA, originX, originY, sizeX, sizeY - Snap all points of the input geometry to a regular grid.'; COMMENT ON FUNCTION ST_SnapToGrid(geometry , float , float ) IS 'args: geomA, sizeX, sizeY - Snap all points of the input geometry to a regular grid.'; COMMENT ON FUNCTION ST_SnapToGrid(geometry , float ) IS 'args: geomA, size - Snap all points of the input geometry to a regular grid.'; COMMENT ON FUNCTION ST_SnapToGrid(geometry , geometry , float , float , float , float ) IS 'args: geomA, pointOrigin, sizeX, sizeY, sizeZ, sizeM - Snap all points of the input geometry to a regular grid.'; COMMENT ON FUNCTION ST_Snap(geometry , geometry , float ) IS 'args: input, reference, tolerance - Snap segments and vertices of input geometry to vertices of a reference geometry.'; COMMENT ON FUNCTION ST_Transform(geometry , integer ) IS 'args: g1, srid - Returns a new geometry with its coordinates transformed to the SRID referenced by the integer parameter.'; COMMENT ON FUNCTION ST_Translate(geometry , float , float ) IS 'args: g1, deltax, deltay - Translates the geometry to a new location using the numeric parameters as offsets. Ie: ST_Translate(geom, X, Y) or ST_Translate(geom, X, Y,Z).'; COMMENT ON FUNCTION ST_Translate(geometry , float , float , float ) IS 'args: g1, deltax, deltay, deltaz - Translates the geometry to a new location using the numeric parameters as offsets. Ie: ST_Translate(geom, X, Y) or ST_Translate(geom, X, Y,Z).'; COMMENT ON FUNCTION ST_TransScale(geometry , float, float, float, float) IS 'args: geomA, deltaX, deltaY, XFactor, YFactor - Translates the geometry using the deltaX and deltaY args, then scales it using the XFactor, YFactor args, working in 2D only.'; COMMENT ON FUNCTION ST_AsBinary(geometry ) IS 'args: g1 - Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.'; COMMENT ON FUNCTION ST_AsBinary(geometry , text ) IS 'args: g1, NDR_or_XDR - Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.'; COMMENT ON FUNCTION ST_AsBinary(geography ) IS 'args: g1 - Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.'; COMMENT ON FUNCTION ST_AsBinary(geography , text ) IS 'args: g1, NDR_or_XDR - Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.'; COMMENT ON FUNCTION ST_AsEWKB(geometry ) IS 'args: g1 - Return the Well-Known Binary (WKB) representation of the geometry with SRID meta data.'; COMMENT ON FUNCTION ST_AsEWKB(geometry , text ) IS 'args: g1, NDR_or_XDR - Return the Well-Known Binary (WKB) representation of the geometry with SRID meta data.'; COMMENT ON FUNCTION ST_AsEWKT(geometry ) IS 'args: g1 - Return the Well-Known Text (WKT) representation of the geometry with SRID meta data.'; COMMENT ON FUNCTION ST_AsEWKT(geography ) IS 'args: g1 - Return the Well-Known Text (WKT) representation of the geometry with SRID meta data.'; COMMENT ON FUNCTION ST_AsGeoJSON(geometry , integer , integer ) IS 'args: geom, maxdecimaldigits=15, options=0 - Return the geometry as a GeoJSON element.'; COMMENT ON FUNCTION ST_AsGeoJSON(geography , integer , integer ) IS 'args: geog, maxdecimaldigits=15, options=0 - Return the geometry as a GeoJSON element.'; COMMENT ON FUNCTION ST_AsGeoJSON(integer , geometry , integer , integer ) IS 'args: gj_version, geom, maxdecimaldigits=15, options=0 - Return the geometry as a GeoJSON element.'; COMMENT ON FUNCTION ST_AsGeoJSON(integer , geography , integer , integer ) IS 'args: gj_version, geog, maxdecimaldigits=15, options=0 - Return the geometry as a GeoJSON element.'; COMMENT ON FUNCTION ST_AsGML(integer , geometry , integer , integer , text , text ) IS 'args: version, geom, maxdecimaldigits=15, options=0, nprefix=null, id=null - Return the geometry as a GML version 2 or 3 element.'; COMMENT ON FUNCTION ST_AsGML(integer , geography , integer , integer , text , text ) IS 'args: version, geog, maxdecimaldigits=15, options=0, nprefix=null, id=null - Return the geometry as a GML version 2 or 3 element.'; COMMENT ON FUNCTION ST_AsHEXEWKB(geometry , text ) IS 'args: g1, NDRorXDR - Returns a Geometry in HEXEWKB format (as text) using either little-endian (NDR) or big-endian (XDR) encoding.'; COMMENT ON FUNCTION ST_AsHEXEWKB(geometry ) IS 'args: g1 - Returns a Geometry in HEXEWKB format (as text) using either little-endian (NDR) or big-endian (XDR) encoding.'; COMMENT ON FUNCTION ST_AsKML(geometry , integer ) IS 'args: geom, maxdecimaldigits=15 - Return the geometry as a KML element. Several variants. Default version=2, default precision=15'; COMMENT ON FUNCTION ST_AsKML(geography , integer ) IS 'args: geog, maxdecimaldigits=15 - Return the geometry as a KML element. Several variants. Default version=2, default precision=15'; COMMENT ON FUNCTION ST_AsKML(integer , geometry , integer , text ) IS 'args: version, geom, maxdecimaldigits=15, nprefix=NULL - Return the geometry as a KML element. Several variants. Default version=2, default precision=15'; COMMENT ON FUNCTION ST_AsKML(integer , geography , integer , text ) IS 'args: version, geog, maxdecimaldigits=15, nprefix=NULL - Return the geometry as a KML element. Several variants. Default version=2, default precision=15'; COMMENT ON FUNCTION ST_AsSVG(geometry , integer , integer ) IS 'args: geom, rel=0, maxdecimaldigits=15 - Returns a Geometry in SVG path data given a geometry or geography object.'; COMMENT ON FUNCTION ST_AsSVG(geography , integer , integer ) IS 'args: geog, rel=0, maxdecimaldigits=15 - Returns a Geometry in SVG path data given a geometry or geography object.'; COMMENT ON FUNCTION ST_AsX3D(geometry , integer , integer ) IS 'args: g1, maxdecimaldigits=15, options=0 - Returns a Geometry in X3D xml node element format: ISO-IEC-19776-1.2-X3DEncodings-XML'; COMMENT ON FUNCTION ST_GeoHash(geometry , integer ) IS 'args: geom, maxchars=full_precision_of_point - Return a GeoHash representation of the geometry.'; COMMENT ON FUNCTION ST_AsText(geometry ) IS 'args: g1 - Return the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata.'; COMMENT ON FUNCTION ST_AsText(geography ) IS 'args: g1 - Return the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata.'; COMMENT ON FUNCTION ST_AsLatLonText(geometry ) IS 'args: pt - Return the Degrees, Minutes, Seconds representation of the given point.'; COMMENT ON FUNCTION ST_AsLatLonText(geometry , text ) IS 'args: pt, format - Return the Degrees, Minutes, Seconds representation of the given point.'; COMMENT ON FUNCTION ST_3DClosestPoint(geometry , geometry ) IS 'args: g1, g2 - Returns the 3-dimensional point on g1 that is closest to g2. This is the first point of the 3D shortest line.'; COMMENT ON FUNCTION ST_3DDistance(geometry , geometry ) IS 'args: g1, g2 - For geometry type Returns the 3-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units.'; COMMENT ON FUNCTION ST_3DDWithin(geometry , geometry , double precision ) IS 'args: g1, g2, distance_of_srid - For 3d (z) geometry type Returns true if two geometries 3d distance is within number of units.'; COMMENT ON FUNCTION ST_3DDFullyWithin(geometry , geometry , double precision ) IS 'args: g1, g2, distance - Returns true if all of the 3D geometries are within the specified distance of one another.'; COMMENT ON FUNCTION ST_3DIntersects(geometry, geometry) IS 'args: geomA, geomB - Returns TRUE if the Geometries "spatially intersect" in 3d - only for points and linestrings'; COMMENT ON FUNCTION ST_3DLongestLine(geometry , geometry ) IS 'args: g1, g2 - Returns the 3-dimensional longest line between two geometries'; COMMENT ON FUNCTION ST_3DMaxDistance(geometry , geometry ) IS 'args: g1, g2 - For geometry type Returns the 3-dimensional cartesian maximum distance (based on spatial ref) between two geometries in projected units.'; COMMENT ON FUNCTION ST_3DShortestLine(geometry , geometry ) IS 'args: g1, g2 - Returns the 3-dimensional shortest line between two geometries'; COMMENT ON FUNCTION ST_Area(geometry ) IS 'args: g1 - Returns the area of the surface if it is a polygon or multi-polygon. For "geometry" type area is in SRID units. For "geography" area is in square meters.'; COMMENT ON FUNCTION ST_Area(geography , boolean ) IS 'args: geog, use_spheroid=true - Returns the area of the surface if it is a polygon or multi-polygon. For "geometry" type area is in SRID units. For "geography" area is in square meters.'; COMMENT ON FUNCTION ST_Azimuth(geometry , geometry ) IS 'args: pointA, pointB - Returns the north-based azimuth as the angle in radians measured clockwise from the vertical on pointA to pointB.'; COMMENT ON FUNCTION ST_Azimuth(geography , geography ) IS 'args: pointA, pointB - Returns the north-based azimuth as the angle in radians measured clockwise from the vertical on pointA to pointB.'; COMMENT ON FUNCTION ST_Centroid(geometry ) IS 'args: g1 - Returns the geometric center of a geometry.'; COMMENT ON FUNCTION ST_ClosestPoint(geometry , geometry ) IS 'args: g1, g2 - Returns the 2-dimensional point on g1 that is closest to g2. This is the first point of the shortest line.'; COMMENT ON FUNCTION ST_Contains(geometry , geometry ) IS 'args: geomA, geomB - Returns true if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A.'; COMMENT ON FUNCTION ST_ContainsProperly(geometry , geometry ) IS 'args: geomA, geomB - Returns true if B intersects the interior of A but not the boundary (or exterior). A does not contain properly itself, but does contain itself.'; COMMENT ON FUNCTION ST_Covers(geometry , geometry ) IS 'args: geomA, geomB - Returns 1 (TRUE) if no point in Geometry B is outside Geometry A'; COMMENT ON FUNCTION ST_Covers(geography , geography ) IS 'args: geogpolyA, geogpointB - Returns 1 (TRUE) if no point in Geometry B is outside Geometry A'; COMMENT ON FUNCTION ST_CoveredBy(geometry , geometry ) IS 'args: geomA, geomB - Returns 1 (TRUE) if no point in Geometry/Geography A is outside Geometry/Geography B'; COMMENT ON FUNCTION ST_CoveredBy(geography , geography ) IS 'args: geogA, geogB - Returns 1 (TRUE) if no point in Geometry/Geography A is outside Geometry/Geography B'; COMMENT ON FUNCTION ST_Crosses(geometry , geometry ) IS 'args: g1, g2 - Returns TRUE if the supplied geometries have some, but not all, interior points in common.'; COMMENT ON FUNCTION ST_LineCrossingDirection(geometry , geometry ) IS 'args: linestringA, linestringB - Given 2 linestrings, returns a number between -3 and 3 denoting what kind of crossing behavior. 0 is no crossing.'; COMMENT ON FUNCTION ST_Disjoint(geometry, geometry) IS 'args: A, B - Returns TRUE if the Geometries do not "spatially intersect" - if they do not share any space together.'; COMMENT ON FUNCTION ST_Distance(geometry , geometry ) IS 'args: g1, g2 - For geometry type Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters.'; COMMENT ON FUNCTION ST_Distance(geography , geography ) IS 'args: gg1, gg2 - For geometry type Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters.'; COMMENT ON FUNCTION ST_Distance(geography , geography , boolean ) IS 'args: gg1, gg2, use_spheroid - For geometry type Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters.'; COMMENT ON FUNCTION ST_HausdorffDistance(geometry , geometry ) IS 'args: g1, g2 - Returns the Hausdorff distance between two geometries. Basically a measure of how similar or dissimilar 2 geometries are. Units are in the units of the spatial reference system of the geometries.'; COMMENT ON FUNCTION ST_HausdorffDistance(geometry , geometry , float) IS 'args: g1, g2, densifyFrac - Returns the Hausdorff distance between two geometries. Basically a measure of how similar or dissimilar 2 geometries are. Units are in the units of the spatial reference system of the geometries.'; COMMENT ON FUNCTION ST_MaxDistance(geometry , geometry ) IS 'args: g1, g2 - Returns the 2-dimensional largest distance between two geometries in projected units.'; COMMENT ON FUNCTION ST_Distance_Sphere(geometry , geometry ) IS 'args: geomlonlatA, geomlonlatB - Returns minimum distance in meters between two lon/lat geometries. Uses a spherical earth and radius of 6370986 meters. Faster than ST_Distance_Spheroid , but less accurate. PostGIS versions prior to 1.5 only implemented for points.'; COMMENT ON FUNCTION ST_Distance_Spheroid(geometry , geometry , spheroid ) IS 'args: geomlonlatA, geomlonlatB, measurement_spheroid - Returns the minimum distance between two lon/lat geometries given a particular spheroid. PostGIS versions prior to 1.5 only support points.'; COMMENT ON FUNCTION ST_DFullyWithin(geometry , geometry , double precision ) IS 'args: g1, g2, distance - Returns true if all of the geometries are within the specified distance of one another'; COMMENT ON FUNCTION ST_DWithin(geometry , geometry , double precision ) IS 'args: g1, g2, distance_of_srid - Returns true if the geometries are within the specified distance of one another. For geometry units are in those of spatial reference and For geography units are in meters and measurement is defaulted to use_spheroid=true (measure around spheroid), for faster check, use_spheroid=false to measure along sphere.'; COMMENT ON FUNCTION ST_DWithin(geography , geography , double precision ) IS 'args: gg1, gg2, distance_meters - Returns true if the geometries are within the specified distance of one another. For geometry units are in those of spatial reference and For geography units are in meters and measurement is defaulted to use_spheroid=true (measure around spheroid), for faster check, use_spheroid=false to measure along sphere.'; COMMENT ON FUNCTION ST_DWithin(geography , geography , double precision , boolean ) IS 'args: gg1, gg2, distance_meters, use_spheroid - Returns true if the geometries are within the specified distance of one another. For geometry units are in those of spatial reference and For geography units are in meters and measurement is defaulted to use_spheroid=true (measure around spheroid), for faster check, use_spheroid=false to measure along sphere.'; COMMENT ON FUNCTION ST_Equals(geometry , geometry ) IS 'args: A, B - Returns true if the given geometries represent the same geometry. Directionality is ignored.'; COMMENT ON FUNCTION ST_HasArc(geometry ) IS 'args: geomA - Returns true if a geometry or geometry collection contains a circular string'; COMMENT ON FUNCTION ST_Intersects(geometry, geometry) IS 'args: geomA, geomB - Returns TRUE if the Geometries/Geography "spatially intersect in 2D" - (share any portion of space) and FALSE if they dont (they are Disjoint). For geography -- tolerance is 0.00001 meters (so any points that close are considered to intersect)'; COMMENT ON FUNCTION ST_Intersects(geography, geography) IS 'args: geogA, geogB - Returns TRUE if the Geometries/Geography "spatially intersect in 2D" - (share any portion of space) and FALSE if they dont (they are Disjoint). For geography -- tolerance is 0.00001 meters (so any points that close are considered to intersect)'; COMMENT ON FUNCTION ST_Length(geometry ) IS 'args: a_2dlinestring - Returns the 2d length of the geometry if it is a linestring or multilinestring. geometry are in units of spatial reference and geography are in meters (default spheroid)'; COMMENT ON FUNCTION ST_Length(geography , boolean ) IS 'args: geog, use_spheroid=true - Returns the 2d length of the geometry if it is a linestring or multilinestring. geometry are in units of spatial reference and geography are in meters (default spheroid)'; COMMENT ON FUNCTION ST_Length2D(geometry ) IS 'args: a_2dlinestring - Returns the 2-dimensional length of the geometry if it is a linestring or multi-linestring. This is an alias for ST_Length'; COMMENT ON FUNCTION ST_3DLength(geometry ) IS 'args: a_3dlinestring - Returns the 3-dimensional or 2-dimensional length of the geometry if it is a linestring or multi-linestring.'; COMMENT ON FUNCTION ST_Length_Spheroid(geometry , spheroid ) IS 'args: a_linestring, a_spheroid - Calculates the 2D or 3D length of a linestring/multilinestring on an ellipsoid. This is useful if the coordinates of the geometry are in longitude/latitude and a length is desired without reprojection.'; COMMENT ON FUNCTION ST_Length2D_Spheroid(geometry , spheroid ) IS 'args: a_linestring, a_spheroid - Calculates the 2D length of a linestring/multilinestring on an ellipsoid. This is useful if the coordinates of the geometry are in longitude/latitude and a length is desired without reprojection.'; COMMENT ON FUNCTION ST_3DLength_Spheroid(geometry , spheroid ) IS 'args: a_linestring, a_spheroid - Calculates the length of a geometry on an ellipsoid, taking the elevation into account. This is just an alias for ST_Length_Spheroid.'; COMMENT ON FUNCTION ST_LongestLine(geometry , geometry ) IS 'args: g1, g2 - Returns the 2-dimensional longest line points of two geometries. The function will only return the first longest line if more than one, that the function finds. The line returned will always start in g1 and end in g2. The length of the line this function returns will always be the same as st_maxdistance returns for g1 and g2.'; COMMENT ON FUNCTION ST_OrderingEquals(geometry , geometry ) IS 'args: A, B - Returns true if the given geometries represent the same geometry and points are in the same directional order.'; COMMENT ON FUNCTION ST_Overlaps(geometry , geometry ) IS 'args: A, B - Returns TRUE if the Geometries share space, are of the same dimension, but are not completely contained by each other.'; COMMENT ON FUNCTION ST_Perimeter(geometry ) IS 'args: g1 - Return the length measurement of the boundary of an ST_Surface or ST_MultiSurface geometry or geography. (Polygon, Multipolygon). geometry measurement is in units of spatial reference and geography is in meters.'; COMMENT ON FUNCTION ST_Perimeter(geography , boolean ) IS 'args: geog, use_spheroid=true - Return the length measurement of the boundary of an ST_Surface or ST_MultiSurface geometry or geography. (Polygon, Multipolygon). geometry measurement is in units of spatial reference and geography is in meters.'; COMMENT ON FUNCTION ST_Perimeter2D(geometry ) IS 'args: geomA - Returns the 2-dimensional perimeter of the geometry, if it is a polygon or multi-polygon. This is currently an alias for ST_Perimeter.'; COMMENT ON FUNCTION ST_3DPerimeter(geometry ) IS 'args: geomA - Returns the 3-dimensional perimeter of the geometry, if it is a polygon or multi-polygon.'; COMMENT ON FUNCTION ST_PointOnSurface(geometry ) IS 'args: g1 - Returns a POINT guaranteed to lie on the surface.'; COMMENT ON FUNCTION ST_Project(geography , float , float ) IS 'args: g1, distance, azimuth - Returns a POINT projected from a start point using a distance in meters and bearing (azimuth) in radians.'; COMMENT ON FUNCTION ST_Relate(geometry , geometry , text ) IS 'args: geomA, geomB, intersectionMatrixPattern - Returns true if this Geometry is spatially related to anotherGeometry, by testing for intersections between the Interior, Boundary and Exterior of the two geometries as specified by the values in the intersectionMatrixPattern. If no intersectionMatrixPattern is passed in, then returns the maximum intersectionMatrixPattern that relates the 2 geometries.'; COMMENT ON FUNCTION ST_Relate(geometry , geometry ) IS 'args: geomA, geomB - Returns true if this Geometry is spatially related to anotherGeometry, by testing for intersections between the Interior, Boundary and Exterior of the two geometries as specified by the values in the intersectionMatrixPattern. If no intersectionMatrixPattern is passed in, then returns the maximum intersectionMatrixPattern that relates the 2 geometries.'; COMMENT ON FUNCTION ST_Relate(geometry , geometry , int ) IS 'args: geomA, geomB, BoundaryNodeRule - Returns true if this Geometry is spatially related to anotherGeometry, by testing for intersections between the Interior, Boundary and Exterior of the two geometries as specified by the values in the intersectionMatrixPattern. If no intersectionMatrixPattern is passed in, then returns the maximum intersectionMatrixPattern that relates the 2 geometries.'; COMMENT ON FUNCTION ST_RelateMatch(text , text ) IS 'args: intersectionMatrix, intersectionMatrixPattern - Returns true if intersectionMattrixPattern1 implies intersectionMatrixPattern2'; COMMENT ON FUNCTION ST_ShortestLine(geometry , geometry ) IS 'args: g1, g2 - Returns the 2-dimensional shortest line between two geometries'; COMMENT ON FUNCTION ST_Touches(geometry , geometry ) IS 'args: g1, g2 - Returns TRUE if the geometries have at least one point in common, but their interiors do not intersect.'; COMMENT ON FUNCTION ST_Within(geometry , geometry ) IS 'args: A, B - Returns true if the geometry A is completely inside geometry B'; COMMENT ON FUNCTION ST_Buffer(geometry , float ) IS 'args: g1, radius_of_buffer - (T) For geometry: Returns a geometry that represents all points whose distance from this Geometry is less than or equal to distance. Calculations are in the Spatial Reference System of this Geometry. For geography: Uses a planar transform wrapper. Introduced in 1.5 support for different end cap and mitre settings to control shape. buffer_style options: quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.#'; COMMENT ON FUNCTION ST_Buffer(geometry , float , integer ) IS 'args: g1, radius_of_buffer, num_seg_quarter_circle - (T) For geometry: Returns a geometry that represents all points whose distance from this Geometry is less than or equal to distance. Calculations are in the Spatial Reference System of this Geometry. For geography: Uses a planar transform wrapper. Introduced in 1.5 support for different end cap and mitre settings to control shape. buffer_style options: quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.#'; COMMENT ON FUNCTION ST_Buffer(geometry , float , text ) IS 'args: g1, radius_of_buffer, buffer_style_parameters - (T) For geometry: Returns a geometry that represents all points whose distance from this Geometry is less than or equal to distance. Calculations are in the Spatial Reference System of this Geometry. For geography: Uses a planar transform wrapper. Introduced in 1.5 support for different end cap and mitre settings to control shape. buffer_style options: quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.#'; COMMENT ON FUNCTION ST_Buffer(geography , float ) IS 'args: g1, radius_of_buffer_in_meters - (T) For geometry: Returns a geometry that represents all points whose distance from this Geometry is less than or equal to distance. Calculations are in the Spatial Reference System of this Geometry. For geography: Uses a planar transform wrapper. Introduced in 1.5 support for different end cap and mitre settings to control shape. buffer_style options: quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.#'; COMMENT ON FUNCTION ST_BuildArea(geometry ) IS 'args: A - Creates an areal geometry formed by the constituent linework of given geometry'; COMMENT ON AGGREGATE ST_Collect(geometry) IS 'args: g1field - Return a specified ST_Geometry value from a collection of other geometries.'; COMMENT ON FUNCTION ST_Collect(geometry, geometry) IS 'args: g1, g2 - Return a specified ST_Geometry value from a collection of other geometries.'; COMMENT ON FUNCTION ST_Collect(geometry[]) IS 'args: g1_array - Return a specified ST_Geometry value from a collection of other geometries.'; COMMENT ON FUNCTION ST_ConcaveHull(geometry , float , boolean ) IS 'args: geomA, target_percent, allow_holes=false - The concave hull of a geometry represents a possibly concave geometry that encloses all geometries within the set. You can think of it as shrink wrapping.'; COMMENT ON FUNCTION ST_ConvexHull(geometry ) IS 'args: geomA - The convex hull of a geometry represents the minimum convex geometry that encloses all geometries within the set.'; COMMENT ON FUNCTION ST_CurveToLine(geometry) IS 'args: curveGeom - Converts a CIRCULARSTRING/CURVEDPOLYGON to a LINESTRING/POLYGON'; COMMENT ON FUNCTION ST_CurveToLine(geometry, integer) IS 'args: curveGeom, segments_per_qtr_circle - Converts a CIRCULARSTRING/CURVEDPOLYGON to a LINESTRING/POLYGON'; COMMENT ON FUNCTION ST_DelaunayTriangles(geometry , float , int4 ) IS 'args: g1, tolerance, flags - Return a Delaunay triangulation around the given input points.'; COMMENT ON FUNCTION ST_Difference(geometry , geometry ) IS 'args: geomA, geomB - Returns a geometry that represents that part of geometry A that does not intersect with geometry B.'; COMMENT ON FUNCTION ST_Dump(geometry ) IS 'args: g1 - Returns a set of geometry_dump (geom,path) rows, that make up a geometry g1.'; COMMENT ON FUNCTION ST_DumpPoints(geometry ) IS 'args: geom - Returns a set of geometry_dump (geom,path) rows of all points that make up a geometry.'; COMMENT ON FUNCTION ST_DumpRings(geometry ) IS 'args: a_polygon - Returns a set of geometry_dump rows, representing the exterior and interior rings of a polygon.'; COMMENT ON FUNCTION ST_FlipCoordinates(geometry) IS 'args: geom - Returns a version of the given geometry with X and Y axis flipped. Useful for people who have built latitude/longitude features and need to fix them.'; COMMENT ON FUNCTION ST_Intersection(geometry, geometry) IS 'args: geomA, geomB - (T) Returns a geometry that represents the shared portion of geomA and geomB. The geography implementation does a transform to geometry to do the intersection and then transform back to WGS84.'; COMMENT ON FUNCTION ST_Intersection(geography, geography) IS 'args: geogA, geogB - (T) Returns a geometry that represents the shared portion of geomA and geomB. The geography implementation does a transform to geometry to do the intersection and then transform back to WGS84.'; COMMENT ON FUNCTION ST_LineToCurve(geometry ) IS 'args: geomANoncircular - Converts a LINESTRING/POLYGON to a CIRCULARSTRING, CURVED POLYGON'; COMMENT ON FUNCTION ST_MakeValid(geometry) IS 'args: input - Attempts to make an invalid geometry valid without losing vertices.'; COMMENT ON AGGREGATE ST_MemUnion(geometry) IS 'args: geomfield - Same as ST_Union, only memory-friendly (uses less memory and more processor time).'; COMMENT ON FUNCTION ST_MinimumBoundingCircle(geometry , integer ) IS 'args: geomA, num_segs_per_qt_circ=48 - Returns the smallest circle polygon that can fully contain a geometry. Default uses 48 segments per quarter circle.'; COMMENT ON AGGREGATE ST_Polygonize(geometry) IS 'args: geomfield - Aggregate. Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries.'; COMMENT ON FUNCTION ST_Polygonize(geometry[]) IS 'args: geom_array - Aggregate. Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries.'; COMMENT ON FUNCTION ST_Node(geometry ) IS 'args: geom - Node a set of linestrings.'; COMMENT ON FUNCTION ST_OffsetCurve(geometry , float , text ) IS 'args: line, signed_distance, style_parameters='' - Return an offset line at a given distance and side from an input line. Useful for computing parallel lines about a center line'; COMMENT ON FUNCTION ST_RemoveRepeatedPoints(geometry) IS 'args: geom - Returns a version of the given geometry with duplicated points removed.'; COMMENT ON FUNCTION ST_SharedPaths(geometry, geometry) IS 'args: lineal1, lineal2 - Returns a collection containing paths shared by the two input linestrings/multilinestrings.'; COMMENT ON FUNCTION ST_Shift_Longitude(geometry ) IS 'args: geomA - Reads every point/vertex in every component of every feature in a geometry, and if the longitude coordinate is <0, adds 360 to it. The result would be a 0-360 version of the data to be plotted in a 180 centric map'; COMMENT ON FUNCTION ST_Simplify(geometry, float) IS 'args: geomA, tolerance - Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm.'; COMMENT ON FUNCTION ST_SimplifyPreserveTopology(geometry, float) IS 'args: geomA, tolerance - Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm. Will avoid creating derived geometries (polygons in particular) that are invalid.'; COMMENT ON FUNCTION ST_Split(geometry, geometry) IS 'args: input, blade - Returns a collection of geometries resulting by splitting a geometry.'; COMMENT ON FUNCTION ST_SymDifference(geometry , geometry ) IS 'args: geomA, geomB - Returns a geometry that represents the portions of A and B that do not intersect. It is called a symmetric difference because ST_SymDifference(A,B) = ST_SymDifference(B,A).'; COMMENT ON AGGREGATE ST_Union(geometry) IS 'args: g1field - Returns a geometry that represents the point set union of the Geometries.'; COMMENT ON FUNCTION ST_Union(geometry, geometry) IS 'args: g1, g2 - Returns a geometry that represents the point set union of the Geometries.'; COMMENT ON FUNCTION ST_Union(geometry[]) IS 'args: g1_array - Returns a geometry that represents the point set union of the Geometries.'; COMMENT ON FUNCTION ST_UnaryUnion(geometry ) IS 'args: geom - Like ST_Union, but working at the geometry component level.'; COMMENT ON FUNCTION ST_LineInterpolatePoint(geometry , float ) IS 'args: a_linestring, a_fraction - Returns a point interpolated along a line. Second argument is a float8 between 0 and 1 representing fraction of total length of linestring the point has to be located.'; COMMENT ON FUNCTION ST_LineLocatePoint(geometry , geometry ) IS 'args: a_linestring, a_point - Returns a float between 0 and 1 representing the location of the closest point on LineString to the given Point, as a fraction of total 2d line length.'; COMMENT ON FUNCTION ST_LineSubstring(geometry , float , float ) IS 'args: a_linestring, startfraction, endfraction - Return a linestring being a substring of the input one starting and ending at the given fractions of total 2d length. Second and third arguments are float8 values between 0 and 1.'; COMMENT ON FUNCTION ST_LocateAlong(geometry , float , float ) IS 'args: ageom_with_measure, a_measure, offset - Return a derived geometry collection value with elements that match the specified measure. Polygonal elements are not supported.'; COMMENT ON FUNCTION ST_LocateBetween(geometry , float , float , float ) IS 'args: geomA, measure_start, measure_end, offset - Return a derived geometry collection value with elements that match the specified range of measures inclusively. Polygonal elements are not supported.'; COMMENT ON FUNCTION ST_LocateBetweenElevations(geometry , float , float ) IS 'args: geom_mline, elevation_start, elevation_end - Return a derived geometry (collection) value with elements that intersect the specified range of elevations inclusively. Only 3D, 4D LINESTRINGS and MULTILINESTRINGS are supported.'; COMMENT ON FUNCTION ST_InterpolatePoint(geometry , geometry ) IS 'args: line, point - Return the value of the measure dimension of a geometry at the point closed to the provided point.'; COMMENT ON FUNCTION ST_AddMeasure(geometry , float , float ) IS 'args: geom_mline, measure_start, measure_end - Return a derived geometry with measure elements linearly interpolated between the start and end points. If the geometry has no measure dimension, one is added. If the geometry has a measure dimension, it is over-written with new values. Only LINESTRINGS and MULTILINESTRINGS are supported.'; COMMENT ON FUNCTION AddAuth(text ) IS 'args: auth_token - Add an authorization token to be used in current transaction.'; COMMENT ON FUNCTION CheckAuth(text , text , text ) IS 'args: a_schema_name, a_table_name, a_key_column_name - Creates trigger on a table to prevent/allow updates and deletes of rows based on authorization token.'; COMMENT ON FUNCTION CheckAuth(text , text ) IS 'args: a_table_name, a_key_column_name - Creates trigger on a table to prevent/allow updates and deletes of rows based on authorization token.'; COMMENT ON FUNCTION DisableLongTransactions() IS 'Disable long transaction support. This function removes the long transaction support metadata tables, and drops all triggers attached to lock-checked tables.'; COMMENT ON FUNCTION EnableLongTransactions() IS 'Enable long transaction support. This function creates the required metadata tables, needs to be called once before using the other functions in this section. Calling it twice is harmless.'; COMMENT ON FUNCTION LockRow(text , text , text , text, timestamp) IS 'args: a_schema_name, a_table_name, a_row_key, an_auth_token, expire_dt - Set lock/authorization for specific row in table'; COMMENT ON FUNCTION LockRow(text , text , text, timestamp) IS 'args: a_table_name, a_row_key, an_auth_token, expire_dt - Set lock/authorization for specific row in table'; COMMENT ON FUNCTION LockRow(text , text , text) IS 'args: a_table_name, a_row_key, an_auth_token - Set lock/authorization for specific row in table'; COMMENT ON FUNCTION UnlockRows(text ) IS 'args: auth_token - Remove all locks held by specified authorization id. Returns the number of locks released.'; COMMENT ON AGGREGATE ST_Accum(geometry) IS 'args: geomfield - Aggregate. Constructs an array of geometries.'; COMMENT ON FUNCTION Box2D(geometry ) IS 'args: geomA - Returns a BOX2D representing the maximum extents of the geometry.'; COMMENT ON FUNCTION Box3D(geometry ) IS 'args: geomA - Returns a BOX3D representing the maximum extents of the geometry.'; COMMENT ON FUNCTION ST_EstimatedExtent(text , text , text ) IS 'args: schema_name, table_name, geocolumn_name - Return the estimated extent of the given spatial table. The estimated is taken from the geometry columns statistics. The current schema will be used if not specified.'; COMMENT ON FUNCTION ST_EstimatedExtent(text , text ) IS 'args: table_name, geocolumn_name - Return the estimated extent of the given spatial table. The estimated is taken from the geometry columns statistics. The current schema will be used if not specified.'; COMMENT ON FUNCTION ST_Expand(geometry , float) IS 'args: g1, units_to_expand - Returns bounding box expanded in all directions from the bounding box of the input geometry. Uses double-precision'; COMMENT ON FUNCTION ST_Expand(box2d , float) IS 'args: g1, units_to_expand - Returns bounding box expanded in all directions from the bounding box of the input geometry. Uses double-precision'; COMMENT ON FUNCTION ST_Expand(box3d , float) IS 'args: g1, units_to_expand - Returns bounding box expanded in all directions from the bounding box of the input geometry. Uses double-precision'; COMMENT ON AGGREGATE ST_Extent(geometry) IS 'args: geomfield - an aggregate function that returns the bounding box that bounds rows of geometries.'; COMMENT ON AGGREGATE ST_3DExtent(geometry) IS 'args: geomfield - an aggregate function that returns the box3D bounding box that bounds rows of geometries.'; COMMENT ON FUNCTION Find_SRID(varchar , varchar , varchar ) IS 'args: a_schema_name, a_table_name, a_geomfield_name - The syntax is find_srid(a_db_schema, a_table, a_column) and the function returns the integer SRID of the specified column by searching through the GEOMETRY_COLUMNS table.'; COMMENT ON FUNCTION ST_Mem_Size(geometry ) IS 'args: geomA - Returns the amount of space (in bytes) the geometry takes.'; COMMENT ON FUNCTION ST_Point_Inside_Circle(geometry , float , float , float ) IS 'args: a_point, center_x, center_y, radius - Is the point geometry insert circle defined by center_x, center_y, radius'; COMMENT ON FUNCTION PostGIS_AddBBox(geometry ) IS 'args: geomA - Add bounding box to the geometry.'; COMMENT ON FUNCTION PostGIS_DropBBox(geometry ) IS 'args: geomA - Drop the bounding box cache from the geometry.'; COMMENT ON FUNCTION PostGIS_HasBBox(geometry ) IS 'args: geomA - Returns TRUE if the bbox of this geometry is cached, FALSE otherwise.'; postgis-2.1.2+dfsg.orig/doc/po/0000755000000000000000000000000012317530606014746 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/po/templates/0000755000000000000000000000000012315456222016743 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/po/templates/using_raster_dataman.xml.pot0000644000000000000000000013072112025614072024461 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: using_raster_dataman.xml:3 #, no-c-format msgid "Raster Data Management, Queries, and Applications" msgstr "" #. Tag: title #: using_raster_dataman.xml:5 #, no-c-format msgid "Loading and Creating Rasters" msgstr "" #. Tag: para #: using_raster_dataman.xml:6 #, no-c-format msgid "For most use cases, you will create PostGIS rasters by loading existing raster files using the packaged raster2pgsql raster loader." msgstr "" #. Tag: title #: using_raster_dataman.xml:9 #, no-c-format msgid "Using raster2pgsql to load rasters" msgstr "" #. Tag: para #: using_raster_dataman.xml:10 #, no-c-format msgid "The raster2pgsql is a raster loader executable that loads GDAL supported raster formats into sql suitable for loading into a PostGIS raster table. It is capable of loading folders of raster files as well as creating overviews of rasters." msgstr "" #. Tag: para #: using_raster_dataman.xml:13 #, no-c-format msgid "Since the raster2pgsql is compiled as part of PostGIS most often (unless you compile your own GDAL library), the raster types supported by the executable will be the same as those compiled in the GDAL dependency library. To get a list of raster types your particular raster2pgsql supports use the -G switch. These should be the same as those provided by your PostGIS install documented here if you are using the same gdal library for both." msgstr "" #. Tag: para #: using_raster_dataman.xml:16 #, no-c-format msgid "The older version of this tool was a python script. The executable has replaced the python script. If you still find the need for the Python script Examples of the python one can be found at GDAL PostGIS Raster Driver Usage. Please note that the raster2pgsql python script may not work with future versions of PostGIS raster and is no longer supported." msgstr "" #. Tag: para #: using_raster_dataman.xml:21 #, no-c-format msgid "When creating overviews of a specific factor from a set of rasters that are aligned, it is possible for the overviews to not align. Visit http://trac.osgeo.org/postgis/ticket/1764 for an example where the overviews do not align." msgstr "" #. Tag: para #: using_raster_dataman.xml:25 #, no-c-format msgid "EXAMPLE USAGE:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:26 #, no-c-format msgid "raster2pgsql raster_options_go_here raster_file someschema.sometable > out.sql" msgstr "" #. Tag: term #: using_raster_dataman.xml:30 #, no-c-format msgid "-?" msgstr "" #. Tag: para #: using_raster_dataman.xml:32 #, no-c-format msgid "Display help screen. Help will also display if you don't pass in any arguments." msgstr "" #. Tag: term #: using_raster_dataman.xml:39 #, no-c-format msgid "-G" msgstr "" #. Tag: para #: using_raster_dataman.xml:41 #, no-c-format msgid "Print the supported raster formats." msgstr "" #. Tag: term #: using_raster_dataman.xml:48 #, no-c-format msgid "(c|a|d|p) These are mutually exclusive options:" msgstr "" #. Tag: term #: using_raster_dataman.xml:53 #, no-c-format msgid "-c" msgstr "" #. Tag: para #: using_raster_dataman.xml:55 #, no-c-format msgid "Create new table and populate it with raster(s), this is the default mode" msgstr "" #. Tag: term #: using_raster_dataman.xml:62 #, no-c-format msgid "-a" msgstr "" #. Tag: para #: using_raster_dataman.xml:64 #, no-c-format msgid "Append raster(s) to an existing table." msgstr "" #. Tag: term #: using_raster_dataman.xml:71 #, no-c-format msgid "-d" msgstr "" #. Tag: para #: using_raster_dataman.xml:73 #, no-c-format msgid "Drop table, create new one and populate it with raster(s)" msgstr "" #. Tag: term #: using_raster_dataman.xml:80 #, no-c-format msgid "-p" msgstr "" #. Tag: para #: using_raster_dataman.xml:82 #, no-c-format msgid "Prepare mode, only create the table." msgstr "" #. Tag: term #: using_raster_dataman.xml:93 #, no-c-format msgid "Raster processing: Applying constraints for proper registering in raster catalogs" msgstr "" #. Tag: term #: using_raster_dataman.xml:98 #, no-c-format msgid "-C" msgstr "" #. Tag: para #: using_raster_dataman.xml:100 #, no-c-format msgid "Apply raster constraints -- srid, pixelsize etc. to ensure raster is properly registered in raster_columns view." msgstr "" #. Tag: term #: using_raster_dataman.xml:106 #, no-c-format msgid "-x" msgstr "" #. Tag: para #: using_raster_dataman.xml:108 #, no-c-format msgid "Disable setting the max extent constraint. Only applied if -C flag is also used." msgstr "" #. Tag: term #: using_raster_dataman.xml:114 #, no-c-format msgid "-r" msgstr "" #. Tag: para #: using_raster_dataman.xml:116 #, no-c-format msgid "Set the regular blocking constraint. Only applied if -C flag is also used." msgstr "" #. Tag: term #: using_raster_dataman.xml:127 #, no-c-format msgid "Raster processing: Optional parameters used to manipulate input raster dataset" msgstr "" #. Tag: term #: using_raster_dataman.xml:132 #, no-c-format msgid "-s <SRID>" msgstr "" #. Tag: para #: using_raster_dataman.xml:134 #, no-c-format msgid "Assign output raster with specified SRID. If not provided or is zero, raster's metadata will be checked to determine an appropriate SRID." msgstr "" #. Tag: term #: using_raster_dataman.xml:141 #, no-c-format msgid "-b BAND" msgstr "" #. Tag: para #: using_raster_dataman.xml:143 #, no-c-format msgid "Index (1-based) of band to extract from raster. For more than one band index, separate with comma (,). If unspecified, all bands of raster will be extracted." msgstr "" #. Tag: term #: using_raster_dataman.xml:151 #, no-c-format msgid "-t TILE_SIZE" msgstr "" #. Tag: para #: using_raster_dataman.xml:153 #, no-c-format msgid "Cut raster into tiles to be inserted one per table row. TILE_SIZE is expressed as WIDTHxHEIGHT." msgstr "" #. Tag: term #: using_raster_dataman.xml:160 #, no-c-format msgid "-R, --register" msgstr "" #. Tag: para #: using_raster_dataman.xml:162 #, no-c-format msgid "Register the raster as a filesystem (out-db) raster." msgstr "" #. Tag: para #: using_raster_dataman.xml:163 #, no-c-format msgid "Only the metadata of the raster and path location to the raster is stored in the database (not the pixels)." msgstr "" #. Tag: term #: using_raster_dataman.xml:168 #, no-c-format msgid "-l OVERVIEW_FACTOR" msgstr "" #. Tag: para #: using_raster_dataman.xml:169 #, no-c-format msgid "Create overview of the raster. For more than one factor, separate with comma(,). Overview table name follows the pattern o_overview factor_table. Created overview is stored in the database and is not affected by -R. Note that your generated sql file will contain both the main table and overview tables." msgstr "" #. Tag: term #: using_raster_dataman.xml:177 #, no-c-format msgid "-N NODATA" msgstr "" #. Tag: para #: using_raster_dataman.xml:179 #, no-c-format msgid "NODATA value to use on bands without a NODATA value." msgstr "" #. Tag: term #: using_raster_dataman.xml:191 #, no-c-format msgid "Optional parameters used to manipulate database objects" msgstr "" #. Tag: term #: using_raster_dataman.xml:196 #, no-c-format msgid "-q" msgstr "" #. Tag: para #: using_raster_dataman.xml:198 #, no-c-format msgid "Wrap PostgreSQL identifiers in quotes" msgstr "" #. Tag: term #: using_raster_dataman.xml:203 #, no-c-format msgid "-f COLUMN" msgstr "" #. Tag: para #: using_raster_dataman.xml:205 #, no-c-format msgid "Specify name of destination raster column, default is 'rast'" msgstr "" #. Tag: term #: using_raster_dataman.xml:211 #, no-c-format msgid "-F" msgstr "" #. Tag: para #: using_raster_dataman.xml:213 #, no-c-format msgid "Add a column with the name of the file" msgstr "" #. Tag: term #: using_raster_dataman.xml:218 #, no-c-format msgid "-I" msgstr "" #. Tag: para #: using_raster_dataman.xml:220 #, no-c-format msgid "Create a GiST index on the raster column." msgstr "" #. Tag: term #: using_raster_dataman.xml:227 #, no-c-format msgid "-M" msgstr "" #. Tag: para #: using_raster_dataman.xml:229 #, no-c-format msgid "Vacuum analyze the raster table." msgstr "" #. Tag: term #: using_raster_dataman.xml:236 #, no-c-format msgid "-T tablespace" msgstr "" #. Tag: para #: using_raster_dataman.xml:238 #, no-c-format msgid "Specify the tablespace for the new table. Note that indices (including the primary key) will still use the default tablespace unless the -X flag is also used." msgstr "" #. Tag: term #: using_raster_dataman.xml:247 #, no-c-format msgid "-X tablespace" msgstr "" #. Tag: para #: using_raster_dataman.xml:249 #, no-c-format msgid "Specify the tablespace for the table's new index. This applies to the primary key and the spatial index if the -I flag is used." msgstr "" #. Tag: term #: using_raster_dataman.xml:258 #, no-c-format msgid "-Y" msgstr "" #. Tag: para #: using_raster_dataman.xml:260 #, no-c-format msgid "Use copy statements instead of insert statements." msgstr "" #. Tag: term #: using_raster_dataman.xml:271 #, no-c-format msgid "-e" msgstr "" #. Tag: para #: using_raster_dataman.xml:272 #, no-c-format msgid "Execute each statement individually, do not use a transaction." msgstr "" #. Tag: term #: using_raster_dataman.xml:276 #, no-c-format msgid "-E ENDIAN" msgstr "" #. Tag: para #: using_raster_dataman.xml:277 #, no-c-format msgid "Control endianness of generated binary output of raster; specify 0 for XDR and 1 for NDR (default); only NDR output is supported now" msgstr "" #. Tag: term #: using_raster_dataman.xml:281 #, no-c-format msgid "-V version" msgstr "" #. Tag: para #: using_raster_dataman.xml:282 #, no-c-format msgid "Specify version of output format. Default is 0. Only 0 is supported at this time." msgstr "" #. Tag: para #: using_raster_dataman.xml:285 #, no-c-format msgid "An example session using the loader to create an input file and uploading it chunked in 100x100 tiles might look like this:" msgstr "" #. Tag: para #: using_raster_dataman.xml:286 #, no-c-format msgid "You can leave the schema name out e.g demelevation instead of public.demelevation and the raster table will be created in the default schema of the database or user" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:288 #, no-c-format msgid "" "raster2pgsql -s 4236 -I -C -M *.tif -F -t 100x100 public.demelevation > elev.sql\n" "psql -d gisdb -f elev.sql" msgstr "" #. Tag: para #: using_raster_dataman.xml:290 #, no-c-format msgid "A conversion and upload can be done all in one step using UNIX pipes:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:292 #, no-c-format msgid "raster2pgsql -s 4236 -I -C -M *.tif -F -t 100x100 public.demelevation | psql -d gisdb" msgstr "" #. Tag: para #: using_raster_dataman.xml:294 #, no-c-format msgid "Load rasters Massachusetts state plane meters aerial tiles into a schema called aerial and create a full view, 2 and 4 level overview tables, use copy mode for inserting (no intermediary file just straight to db), and -e don't force everything in a transaction (good if you want to see data in tables right away without waiting). Break up the rasters into 128x128 pixel tiles and apply raster constraints. Use copy mode instead of table insert. (-F) Include a field called filename to hold the name of the file the tiles were cut from." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:296 #, no-c-format msgid "raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:298 #, no-c-format msgid "" "--get a list of raster types supported:\n" "raster2pgsql -G" msgstr "" #. Tag: para #: using_raster_dataman.xml:300 #, no-c-format msgid "The -G commands outputs a list something like" msgstr "" #. Tag: screen #: using_raster_dataman.xml:301 #, no-c-format msgid "" "Available GDAL raster formats:\n" " Virtual Raster\n" " GeoTIFF\n" " National Imagery Transmission Format\n" " Raster Product Format TOC format\n" " ECRG TOC format\n" " Erdas Imagine Images (.img)\n" " CEOS SAR Image\n" " CEOS Image\n" " JAXA PALSAR Product Reader (Level 1.1/1.5)\n" " Ground-based SAR Applications Testbed File Format (.gff)\n" " ELAS\n" " Arc/Info Binary Grid\n" " Arc/Info ASCII Grid\n" " GRASS ASCII Grid\n" " SDTS Raster\n" " DTED Elevation Raster\n" " Portable Network Graphics\n" " JPEG JFIF\n" " In Memory Raster\n" " Japanese DEM (.mem)\n" " Graphics Interchange Format (.gif)\n" " Graphics Interchange Format (.gif)\n" " Envisat Image Format\n" " Maptech BSB Nautical Charts\n" " X11 PixMap Format\n" " MS Windows Device Independent Bitmap\n" " SPOT DIMAP\n" " AirSAR Polarimetric Image\n" " RadarSat 2 XML Product\n" " PCIDSK Database File\n" " PCRaster Raster File\n" " ILWIS Raster Map\n" " SGI Image File Format 1.0\n" " SRTMHGT File Format\n" " Leveller heightfield\n" " Terragen heightfield\n" " USGS Astrogeology ISIS cube (Version 3)\n" " USGS Astrogeology ISIS cube (Version 2)\n" " NASA Planetary Data System\n" " EarthWatch .TIL\n" " ERMapper .ers Labelled\n" " NOAA Polar Orbiter Level 1b Data Set\n" " FIT Image\n" " GRIdded Binary (.grb)\n" " Raster Matrix Format\n" " EUMETSAT Archive native (.nat)\n" " Idrisi Raster A.1\n" " Intergraph Raster\n" " Golden Software ASCII Grid (.grd)\n" " Golden Software Binary Grid (.grd)\n" " Golden Software 7 Binary Grid (.grd)\n" " COSAR Annotated Binary Matrix (TerraSAR-X)\n" " TerraSAR-X Product\n" " DRDC COASP SAR Processor Raster\n" " R Object Data Store\n" " Portable Pixmap Format (netpbm)\n" " USGS DOQ (Old Style)\n" " USGS DOQ (New Style)\n" " ENVI .hdr Labelled\n" " ESRI .hdr Labelled\n" " Generic Binary (.hdr Labelled)\n" " PCI .aux Labelled\n" " Vexcel MFF Raster\n" " Vexcel MFF2 (HKV) Raster\n" " Fuji BAS Scanner Image\n" " GSC Geogrid\n" " EOSAT FAST Format\n" " VTP .bt (Binary Terrain) 1.3 Format\n" " Erdas .LAN/.GIS\n" " Convair PolGASP\n" " Image Data and Analysis\n" " NLAPS Data Format\n" " Erdas Imagine Raw\n" " DIPEx\n" " FARSITE v.4 Landscape File (.lcp)\n" " NOAA Vertical Datum .GTX\n" " NADCON .los/.las Datum Grid Shift\n" " NTv2 Datum Grid Shift\n" " ACE2\n" " Snow Data Assimilation System\n" " Swedish Grid RIK (.rik)\n" " USGS Optional ASCII DEM (and CDED)\n" " GeoSoft Grid Exchange Format\n" " Northwood Numeric Grid Format .grd/.tab\n" " Northwood Classified Grid Format .grc/.tab\n" " ARC Digitized Raster Graphics\n" " Standard Raster Product (ASRP/USRP)\n" " Magellan topo (.blx)\n" " SAGA GIS Binary Grid (.sdat)\n" " Kml Super Overlay\n" " ASCII Gridded XYZ\n" " HF2/HFZ heightfield raster\n" " OziExplorer Image File\n" " USGS LULC Composite Theme Grid\n" " Arc/Info Export E00 GRID\n" " ZMap Plus Grid\n" " NOAA NGS Geoid Height Grids" msgstr "" #. Tag: title #: using_raster_dataman.xml:304 #, no-c-format msgid "Creating rasters using PostGIS raster functions" msgstr "" #. Tag: para #: using_raster_dataman.xml:305 #, no-c-format msgid "On many occasions, you'll want to create rasters and raster tables right in the database. There are a plethora of functions to do that. The general steps to follow." msgstr "" #. Tag: para #: using_raster_dataman.xml:307 #, no-c-format msgid "Create a table with a raster column to hold the new raster records which can be accomplished with:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:308 #, no-c-format msgid "CREATE TABLE myrasters(rid serial primary key, rast raster);" msgstr "" #. Tag: para #: using_raster_dataman.xml:311 #, no-c-format msgid "There are many functions to help with that goal. If you are creating rasters not as a derivative of other rasters, you will want to start with: , followed by " msgstr "" #. Tag: para #: using_raster_dataman.xml:313 #, no-c-format msgid "You can also create rasters from geometries. To achieve that you'll want to use perhaps accompanied with other functions such as or or any of the family of other map algebra functions." msgstr "" #. Tag: para #: using_raster_dataman.xml:315 #, no-c-format msgid "There are even many more options for creating new raster tables from existing tables. For example you can create a raster table in a different projection from an existing one using " msgstr "" #. Tag: para #: using_raster_dataman.xml:317 #, no-c-format msgid "Once you are done populating your table initially, you'll want to create a spatial index on the raster column with something like:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:318 #, no-c-format msgid "CREATE INDEX myrasters_rast_st_convexhull_idx ON myrasters USING gist( ST_ConvexHull(rast) );" msgstr "" #. Tag: para #: using_raster_dataman.xml:319 #, no-c-format msgid "Note the use of since most raster operators are based on the convex hull of the rasters." msgstr "" #. Tag: para #: using_raster_dataman.xml:320 #, no-c-format msgid "Pre-2.0 versions of PostGIS raster were based on the envelop rather than the convex hull. For the spatial indexes to work properly you'll need to drop those and replace with convex hull based index." msgstr "" #. Tag: para #: using_raster_dataman.xml:321 #, no-c-format msgid "Apply raster constraints using " msgstr "" #. Tag: title #: using_raster_dataman.xml:326 #, no-c-format msgid "Raster Catalogs" msgstr "" #. Tag: para #: using_raster_dataman.xml:327 #, no-c-format msgid "There are two raster catalog views that come packaged with PostGIS. Both views utilize information embedded in the constraints of the raster tables. As a result the catalog views are always consistent with the raster data in the tables since the constraints are enforced." msgstr "" #. Tag: para #: using_raster_dataman.xml:331 #, no-c-format msgid "raster_columns this view catalogs all the raster table columns in your database." msgstr "" #. Tag: para #: using_raster_dataman.xml:334 #, no-c-format msgid "raster_overviews this view catalogs all the raster table columns in your database that serve as overviews for a finer grained table. Tables of this type are generated when you use the -l switch during load." msgstr "" #. Tag: title #: using_raster_dataman.xml:338 #, no-c-format msgid "Raster Columns Catalog" msgstr "" #. Tag: para #: using_raster_dataman.xml:339 #, no-c-format msgid "The raster_columns is a catalog of all raster table columns in your database that are of type raster. It is a view utilizing the constraints on the tables so the information is always consistent even if you restore one raster table from a backup of another database. The following columns exist in the raster_columns catalog." msgstr "" #. Tag: para #: using_raster_dataman.xml:341 #, no-c-format msgid "If you created your tables not with the loader or forgot to specify the -C flag during load, you can enforce the constraints after the fact using so that the raster_columns catalog registers the common information about your raster tiles." msgstr "" #. Tag: para #: using_raster_dataman.xml:346 #, no-c-format msgid "r_table_catalog The database the table is in. This will always read the current database." msgstr "" #. Tag: para #: using_raster_dataman.xml:349 #, no-c-format msgid "r_table_schema The database schema the raster table belongs to." msgstr "" #. Tag: para #: using_raster_dataman.xml:352 #, no-c-format msgid "r_table_name raster table" msgstr "" #. Tag: para #: using_raster_dataman.xml:355 #, no-c-format msgid "r_raster_column the column in the r_table_name table that is of type raster. There is nothing in PostGIS preventing you from having multiple raster columns per table so its possible to have a raster table listed multiple times with a different raster column for each." msgstr "" #. Tag: para #: using_raster_dataman.xml:358 #, no-c-format msgid "srid The spatial reference identifier of the raster. Should be an entry in the ." msgstr "" #. Tag: para #: using_raster_dataman.xml:361 #, no-c-format msgid "scale_x The scaling between geometric spatial coordinates and pixel. This is only available if all tiles in the raster column have the same scale_x and this constraint is applied. Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:364 #, no-c-format msgid "scale_y The scaling between geometric spatial coordinates and pixel. This is only available if all tiles in the raster column have the same scale_y and the scale_y constraint is applied. Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:367 #, no-c-format msgid "blocksize_x The width (number of pixels across) of each raster tile . Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:370 #, no-c-format msgid "blocksize_y The width (number of pixels down) of each raster tile . Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:373 #, no-c-format msgid "same_alignment A boolean that is true if all the raster tiles have the same alignment . Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:376 #, no-c-format msgid "regular_blocking This is a true/false constraint flag set on the table to denote that the tiles do not overlap, are of the same alignment, pixel size, srid etc. It is not really validated but just taken as a given so should be used for informational. In the future we plan to properly constrain this so that this inforamtion is guaranteed to be right when it returns true" msgstr "" #. Tag: para #: using_raster_dataman.xml:379 #, no-c-format msgid "num_bands The number of bands in each tile of your raster set. This is the same information as what is provided by" msgstr "" #. Tag: para #: using_raster_dataman.xml:382 #, no-c-format msgid "pixel_types An array defining the pixel type for each band. You will have the same number of elements in this array as you have number of bands. The pixel_types are one of the following defined in ." msgstr "" #. Tag: para #: using_raster_dataman.xml:385 #, no-c-format msgid "nodata_values An array of double precision numbers denoting the nodata_value for each band. You will have the same number of elements in this array as you have number of bands. These numbers define the pixel value for each band that should be ignored for most operations. This is similar information provided by ." msgstr "" #. Tag: para #: using_raster_dataman.xml:388 #, no-c-format msgid "extent This is the extent of all the raster rows in your raster set. If you plan to load more data that will change the extent of the set, you'll want to run the function before load and then reapply constraints with after load." msgstr "" #. Tag: title #: using_raster_dataman.xml:393 #, no-c-format msgid "Raster Overviews" msgstr "" #. Tag: para #: using_raster_dataman.xml:394 #, no-c-format msgid "raster_overviews catalogs information about raster table columns used for overviews and additional information about them that is useful to know when utilizing overviews. Overview tables are cataloged in both raster_columns and raster_overviews because they are rasters in their own right but also serve an additional special purpose of being a lower resolution caricature of a higher resolution table. These are generated along-side the main raster table when you use the -l switch in raster loading." msgstr "" #. Tag: para #: using_raster_dataman.xml:395 #, no-c-format msgid "Overview tables contain the same constraints as other raster tables as well as additional informational only constraints specific to overviews." msgstr "" #. Tag: para #: using_raster_dataman.xml:396 #, no-c-format msgid "The information in raster_overviews does not duplicate the information in raster_columns. If you need the information about an overview table present in raster_columns you can join the raster_overviews and raster_columns together to get the full set of information you need." msgstr "" #. Tag: para #: using_raster_dataman.xml:397 #, no-c-format msgid "Two main reasons for overviews are:" msgstr "" #. Tag: para #: using_raster_dataman.xml:399 #, no-c-format msgid "Low resolution representation of the core tables commonly used for fast mapping zoom-out." msgstr "" #. Tag: para #: using_raster_dataman.xml:400 #, no-c-format msgid "Computations are generally faster to do on them than their higher resolution parents because there are fewer records and each pixel covers more territory. Though the computations are not as accurate as the high-res tables they support, they can be sufficient in many rule-of-thumb computations." msgstr "" #. Tag: para #: using_raster_dataman.xml:403 #, no-c-format msgid "The raster_overviews catalog contains the following columns of information." msgstr "" #. Tag: para #: using_raster_dataman.xml:406 #, no-c-format msgid "o_table_catalog The database the overview table is in. This will always read the current database." msgstr "" #. Tag: para #: using_raster_dataman.xml:409 #, no-c-format msgid "o_table_schema The database schema the overview raster table belongs to." msgstr "" #. Tag: para #: using_raster_dataman.xml:412 #, no-c-format msgid "o_table_name raster overview table name" msgstr "" #. Tag: para #: using_raster_dataman.xml:415 #, no-c-format msgid "o_raster_column the raster column in the overview table." msgstr "" #. Tag: para #: using_raster_dataman.xml:419 #, no-c-format msgid "r_table_catalog The database the raster table that this overview services is in. This will always read the current database." msgstr "" #. Tag: para #: using_raster_dataman.xml:422 #, no-c-format msgid "r_table_schema The database schema the raster table that this overview services belongs to." msgstr "" #. Tag: para #: using_raster_dataman.xml:425 #, no-c-format msgid "r_table_name raster table that this overview services." msgstr "" #. Tag: para #: using_raster_dataman.xml:428 #, no-c-format msgid "r_raster_column the raster column that this overview column services." msgstr "" #. Tag: para #: using_raster_dataman.xml:431 #, no-c-format msgid "overview_factor - this is the pyramid level of the overview table. The higher the number the lower the resolution of the table. raster2pgsql if given a folder of images, will compute overview of each image file and load separately. Level 1 is assumed and always the original file. Level 2 is will have each tile represent 4 of the original. So for example if you have a folder of 5000x5000 pixel image files that you chose to chunk 125x125, for each image file your base table will have (5000*5000)/(125*125) records = 1600, your (l=2) o_2 table will have ceiling(1600/Power(2,2)) = 400 rows, your (l=3) o_3 will have ceiling(1600/Power(2,3) ) = 200 rows. If your pixels aren't divisible by the size of your tiles, you'll get some scrap tiles (tiles not completely filled). Note that each overview tile generated by raster2pgsql has the same number of pixels as its parent, but is of a lower resolution where each pixel of it represents (Power(2,overview_factor) pixels of the original)." msgstr "" #. Tag: title #: using_raster_dataman.xml:443 #, no-c-format msgid "Building Custom Applications with PostGIS Raster" msgstr "" #. Tag: para #: using_raster_dataman.xml:444 #, no-c-format msgid "The fact that PostGIS raster provides you with SQL functions to render rasters in known image formats gives you a lot of optoins for rendering them. For example you can use OpenOffice / LibreOffice for rendering as demonstrated in Rendering PostGIS Raster graphics with LibreOffice Base Reports. In addition you can use a wide variety of languages as demonstrated in this section." msgstr "" #. Tag: title #: using_raster_dataman.xml:447 #, no-c-format msgid "PHP Example Outputting using ST_AsPNG in concert with other raster functions" msgstr "" #. Tag: para #: using_raster_dataman.xml:448 #, no-c-format msgid "In this section, we'll demonstrate how to use the PHP PostgreSQL driver and the family of functions to output band 1,2,3 of a raster to a PHP request stream that can then be embedded in an img src html tag." msgstr "" #. Tag: para #: using_raster_dataman.xml:451 using_raster_dataman.xml:463 #, no-c-format msgid "The sample query demonstrates how to combine a whole bunch of raster functions together to grab all tiles that intersect a particular wgs 84 bounding box and then unions with the intersecting tiles together returning all bands, transforms to user specified projection using , and then outputs the results as a png using ." msgstr "" #. Tag: para #: using_raster_dataman.xml:454 #, no-c-format msgid "You would call the below using http://mywebserver/test_raster.php?srid=2249 to get the raster image in Massachusetts state plane feet." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:455 #, no-c-format msgid "" "]]>" msgstr "" #. Tag: title #: using_raster_dataman.xml:458 #, no-c-format msgid "ASP.NET C# Example Outputting using ST_AsPNG in concert with other raster functions" msgstr "" #. Tag: para #: using_raster_dataman.xml:459 #, no-c-format msgid "In this section, we'll demonstrate how to use Npgsql PostgreSQL .NET driver and the family of functions to output band 1,2,3 of a raster to a PHP request stream that can then be embedded in an img src html tag." msgstr "" #. Tag: para #: using_raster_dataman.xml:462 #, no-c-format msgid "You will need the npgsql .NET PostgreSQL driver for this exercise which you can get the latest of from http://npgsql.projects.postgresql.org/. Just download the latest and drop into your ASP.NET bin folder and you'll be good to go." msgstr "" #. Tag: para #: using_raster_dataman.xml:466 #, no-c-format msgid "This is same example as except implemented in C#." msgstr "" #. Tag: para #: using_raster_dataman.xml:467 #, no-c-format msgid "You would call the below using http://mywebserver/TestRaster.ashx?srid=2249 to get the raster image in Massachusetts state plane feet." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:468 #, no-c-format msgid "" "-- web.config connection string section --\n" "\n" " \n" "]]>" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:469 #, no-c-format msgid "" "// Code for TestRaster.ashx\n" "\n" "using System;\n" "using System.Data;\n" "using System.Web;\n" "using Npgsql;\n" "\n" "public class TestRaster : IHttpHandler\n" "{\n" " public void ProcessRequest(HttpContext context)\n" " {\n" " \n" " context.Response.ContentType = \"image/png\";\n" " context.Response.BinaryWrite(GetResults(context));\n" " \n" " }\n" "\n" " public bool IsReusable {\n" " get { return false; }\n" " }\n" "\n" " public byte[] GetResults(HttpContext context)\n" " {\n" " byte[] result = null;\n" " NpgsqlCommand command;\n" " string sql = null;\n" " int input_srid = 26986;\n" " try {\n" " using (NpgsqlConnection conn = new NpgsqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[\"DSN\"].ConnectionString)) {\n" " conn.Open();\n" "\n" " if (context.Request[\"srid\"] != null)\n" " {\n" " input_srid = Convert.ToInt32(context.Request[\"srid\"]); \n" " }\n" " sql = @\"SELECT ST_AsPNG(\n" " ST_Transform(\n" " ST_AddBand(\n" " ST_Union(rast,1), ARRAY[ST_Union(rast,2),ST_Union(rast,3)])\n" " ,:input_srid) ) As new_rast \n" " FROM aerials.boston \n" " WHERE \n" " ST_Intersects(rast, \n" " ST_Transform(ST_MakeEnvelope(-71.1217, 42.227, -71.1210, 42.218,4326),26986) )\";\n" " command = new NpgsqlCommand(sql, conn);\n" " command.Parameters.Add(new NpgsqlParameter(\"input_srid\", input_srid));\n" " \n" " \n" " result = (byte[]) command.ExecuteScalar();\n" " conn.Close();\n" " }\n" "\n" " }\n" " catch (Exception ex)\n" " {\n" " result = null;\n" " context.Response.Write(ex.Message.Trim());\n" " }\n" " return result;\n" " }\n" "}]]>" msgstr "" #. Tag: title #: using_raster_dataman.xml:472 #, no-c-format msgid "Java console app that outputs raster query as Image file" msgstr "" #. Tag: para #: using_raster_dataman.xml:473 #, no-c-format msgid "This is a simple java console app that takes a query that returns one image and outputs to specified file." msgstr "" #. Tag: para #: using_raster_dataman.xml:474 #, no-c-format msgid "You can download the latest PostgreSQL JDBC drivers from http://jdbc.postgresql.org/download.html" msgstr "" #. Tag: para #: using_raster_dataman.xml:475 #, no-c-format msgid "You can compile the following code using a command something like:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:476 #, no-c-format msgid "" "set env CLASSPATH .:..\\postgresql-9.0-801.jdbc4.jar\n" "javac SaveQueryImage.java\n" "jar cfm SaveQueryImage.jar Manifest.txt *.class" msgstr "" #. Tag: para #: using_raster_dataman.xml:477 #, no-c-format msgid "And call it from the command-line with something like" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:478 #, no-c-format msgid "java -jar SaveQueryImage.jar \"SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10, 'quad_segs=2'),150, 150, '8BUI',100));\" \"test.png\"" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:479 #, no-c-format msgid "" "-- Manifest.txt --\n" "" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:480 #, no-c-format msgid "" "// Code for SaveQueryImage.java\n" "" msgstr "" #. Tag: title #: using_raster_dataman.xml:484 #, no-c-format msgid "Use PLPython to dump out images via SQL" msgstr "" #. Tag: para #: using_raster_dataman.xml:485 #, no-c-format msgid "This is a plpython stored function that creates a file in the server directory for each record." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:486 #, no-c-format msgid "" "//plpython postgresql stored proc. Requires you have plpython installed\n" "" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:487 #, no-c-format msgid "" "--write out 5 images to the PostgreSQL server in varying sizes\n" "-- note the postgresql daemon account needs to have write access to folder\n" "-- this echos back the file names created;\n" " SELECT write_file(ST_AsPNG(\n" " ST_AsRaster(ST_Buffer(ST_Point(1,5),j*5, 'quad_segs=2'),150*j, 150*j, '8BUI',100)),\n" " 'C:/temp/slices'|| j || '.png')\n" " FROM generate_series(1,5) As j;\n" " \n" " write_file\n" "---------------------\n" " C:/temp/slices1.png\n" " C:/temp/slices2.png\n" " C:/temp/slices3.png\n" " C:/temp/slices4.png\n" " C:/temp/slices5.png" msgstr "" #. Tag: title #: using_raster_dataman.xml:490 #, no-c-format msgid "Outputting Rasters with PSQL" msgstr "" #. Tag: para #: using_raster_dataman.xml:491 #, no-c-format msgid "Sadly PSQL doesn't have easy to use built-in functionality for outputting binaries. This is a bit of a hack and based on one of the suggestions outlined in Clever Trick Challenge -- Outputting bytea with psql that piggy backs on PostgreSQL somewhat legacy large object support. To use first launch your psql commandline connected to your database." msgstr "" #. Tag: para #: using_raster_dataman.xml:494 #, no-c-format msgid "Unlike the python approach, this approach creates the file on your local computer." msgstr "" #. Tag: screen #: using_raster_dataman.xml:495 #, no-c-format msgid "" "SELECT oid, lowrite(lo_open(oid, 131072), png) As num_bytes\n" " FROM \n" " ( VALUES (lo_create(0), \n" " ST_AsPNG( (SELECT rast FROM aerials.boston WHERE rid=1) ) \n" " ) ) As v(oid,png);\n" "-- you'll get an output something like --\n" " oid | num_bytes\n" "---------+-----------\n" " 2630819 | 74860\n" " \n" "-- next note the oid and do this replacing the c:/test.png to file path location\n" "-- on your local computer\n" " \\lo_export 2630819 'C:/temp/aerial_samp.png'\n" " \n" "-- this deletes the file from large object storage on db\n" "SELECT lo_unlink(2630819);" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_exception.xml.pot0000644000000000000000000001401712025614072024302 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_exception.xml:3 #, no-c-format msgid "Exceptional Functions" msgstr "" #. Tag: para #: reference_exception.xml:4 #, no-c-format msgid "These functions are rarely used functions that should only be used if your data is corrupted in someway. They are used for troubleshooting corruption and also fixing things that should under normal circumstances, never happen." msgstr "" #. Tag: refname #: reference_exception.xml:9 #, no-c-format msgid "PostGIS_AddBBox" msgstr "" #. Tag: refpurpose #: reference_exception.xml:11 #, no-c-format msgid "Add bounding box to the geometry." msgstr "" #. Tag: funcprototype #: reference_exception.xml:16 #, no-c-format msgid "geometry PostGIS_AddBBox geometry geomA" msgstr "" #. Tag: title #: reference_exception.xml:24 reference_exception.xml:70 reference_exception.xml:119 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_exception.xml:26 #, no-c-format msgid "Add bounding box to the geometry. This would make bounding box based queries faster, but will increase the size of the geometry." msgstr "" #. Tag: para #: reference_exception.xml:31 #, no-c-format msgid "Bounding boxes are automatically added to geometries so in general this is not needed unless the generated bounding box somehow becomes corrupted or you have an old install that is lacking bounding boxes. Then you need to drop the old and readd." msgstr "" #. Tag: para #: reference_exception.xml:35 reference_exception.xml:83 reference_exception.xml:124 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: title #: reference_exception.xml:40 reference_exception.xml:88 reference_exception.xml:129 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_exception.xml:42 #, no-c-format msgid "" "UPDATE sometable\n" " SET the_geom = PostGIS_AddBBox(the_geom)\n" " WHERE PostGIS_HasBBox(the_geom) = false;" msgstr "" #. Tag: title #: reference_exception.xml:47 reference_exception.xml:95 reference_exception.xml:136 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_exception.xml:49 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_exception.xml:55 #, no-c-format msgid "PostGIS_DropBBox" msgstr "" #. Tag: refpurpose #: reference_exception.xml:57 #, no-c-format msgid "Drop the bounding box cache from the geometry." msgstr "" #. Tag: funcprototype #: reference_exception.xml:62 #, no-c-format msgid "geometry PostGIS_DropBBox geometry geomA" msgstr "" #. Tag: para #: reference_exception.xml:72 #, no-c-format msgid "Drop the bounding box cache from the geometry. This reduces geometry size, but makes bounding-box based queries slower. It is also used to drop a corrupt bounding box. A tale-tell sign of a corrupt cached bounding box is when your ST_Intersects and other relation queries leave out geometries that rightfully should return true." msgstr "" #. Tag: para #: reference_exception.xml:77 #, no-c-format msgid "Bounding boxes are automatically added to geometries and improve speed of queries so in general this is not needed unless the generated bounding box somehow becomes corrupted or you have an old install that is lacking bounding boxes. Then you need to drop the old and readd. This kind of corruption has been observed in 8.3-8.3.6 series whereby cached bboxes were not always recalculated when a geometry changed and upgrading to a newer version without a dump reload will not correct already corrupted boxes. So one can manually correct using below and readd the bbox or do a dump reload." msgstr "" #. Tag: programlisting #: reference_exception.xml:90 #, no-c-format msgid "" "--This example drops bounding boxes where the cached box is not correct\n" " --The force to ST_AsBinary before applying Box2D forces a recalculation of the box, and Box2D applied to the table geometry always\n" " -- returns the cached bounding box.\n" " UPDATE sometable\n" " SET the_geom = PostGIS_DropBBox(the_geom)\n" " WHERE Not (Box2D(ST_AsBinary(the_geom)) = Box2D(the_geom));\n" "\n" " UPDATE sometable\n" " SET the_geom = PostGIS_AddBBox(the_geom)\n" " WHERE Not PostGIS_HasBBOX(the_geom);" msgstr "" #. Tag: para #: reference_exception.xml:97 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_exception.xml:104 #, no-c-format msgid "PostGIS_HasBBox" msgstr "" #. Tag: refpurpose #: reference_exception.xml:106 #, no-c-format msgid "Returns TRUE if the bbox of this geometry is cached, FALSE otherwise." msgstr "" #. Tag: funcprototype #: reference_exception.xml:111 #, no-c-format msgid "boolean PostGIS_HasBBox geometry geomA" msgstr "" #. Tag: para #: reference_exception.xml:121 #, no-c-format msgid "Returns TRUE if the bbox of this geometry is cached, FALSE otherwise. Use and to control caching." msgstr "" #. Tag: programlisting #: reference_exception.xml:131 #, no-c-format msgid "" "SELECT the_geom\n" "FROM sometable WHERE PostGIS_HasBBox(the_geom) = false;" msgstr "" #. Tag: para #: reference_exception.xml:138 #, no-c-format msgid ", " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_processing.xml.pot0000644000000000000000000035115112025614072024463 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_processing.xml:3 #, no-c-format msgid "Geometry Processing" msgstr "" #. Tag: refname #: reference_processing.xml:6 #, no-c-format msgid "ST_Buffer" msgstr "" #. Tag: refpurpose #: reference_processing.xml:8 #, no-c-format msgid "(T) For geometry: Returns a geometry that represents all points whose distance from this Geometry is less than or equal to distance. Calculations are in the Spatial Reference System of this Geometry. For geography: Uses a planar transform wrapper. Introduced in 1.5 support for different end cap and mitre settings to control shape. buffer_style options: quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.#" msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:16 #, no-c-format msgid " geometry ST_Buffer geometry g1 float radius_of_buffer geometry ST_Buffer geometry g1 float radius_of_buffer integer num_seg_quarter_circle geometry ST_Buffer geometry g1 float radius_of_buffer text buffer_style_parameters geography ST_Buffer geography g1 float radius_of_buffer_in_meters " msgstr "" #. Tag: title #: reference_processing.xml:47 reference_processing.xml:221 reference_processing.xml:307 reference_processing.xml:373 reference_processing.xml:522 reference_processing.xml:590 reference_processing.xml:638 reference_processing.xml:736 reference_processing.xml:816 reference_processing.xml:874 reference_processing.xml:942 reference_processing.xml:989 reference_processing.xml:1041 reference_processing.xml:1093 reference_processing.xml:1133 reference_processing.xml:1192 reference_processing.xml:1239 reference_processing.xml:1298 reference_processing.xml:1350 reference_processing.xml:1404 reference_processing.xml:1557 reference_processing.xml:1593 reference_processing.xml:1670 reference_processing.xml:1720 reference_processing.xml:1766 reference_processing.xml:1808 reference_processing.xml:1919 reference_processing.xml:2012 reference_processing.xml:2081 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_processing.xml:49 #, no-c-format msgid "Returns a geometry/geography that represents all points whose distance from this Geometry/geography is less than or equal to distance." msgstr "" #. Tag: para #: reference_processing.xml:51 #, no-c-format msgid "Geometry: Calculations are in the Spatial Reference System of the geometry. Introduced in 1.5 support for different end cap and mitre settings to control shape." msgstr "" #. Tag: para #: reference_processing.xml:54 #, no-c-format msgid "Negative radii: For polygons, a negative radius can be used, which will shrink the polygon rather than expanding it." msgstr "" #. Tag: para #: reference_processing.xml:55 #, no-c-format msgid "Geography: For geography this is really a thin wrapper around the geometry implementation. It first determines the best SRID that fits the bounding box of the geography object (favoring UTM, Lambert Azimuthal Equal Area (LAEA) north/south pole, and falling back on mercator in worst case scenario) and then buffers in that planar spatial ref and retransforms back to WGS84 geography." msgstr "" #. Tag: para #: reference_processing.xml:57 #, no-c-format msgid "For geography this may not behave as expected if object is sufficiently large that it falls between two UTM zones or crosses the dateline" msgstr "" #. Tag: para #: reference_processing.xml:59 #, no-c-format msgid "Availability: 1.5 - ST_Buffer was enhanced to support different endcaps and join types. These are useful for example to convert road linestrings into polygon roads with flat or square edges instead of rounded edges. Thin wrapper for geography was added. - requires GEOS >= 3.2 to take advantage of advanced geometry functionality." msgstr "" #. Tag: para #: reference_processing.xml:62 #, no-c-format msgid "The optional third parameter (currently only applies to geometry) can either specify number of segments used to approximate a quarter circle (integer case, defaults to 8) or a list of blank-separated key=value pairs (string case) to tweak operations as follows:" msgstr "" #. Tag: para #: reference_processing.xml:66 reference_processing.xml:1427 #, no-c-format msgid "'quad_segs=#' : number of segments used to approximate a quarter circle (defaults to 8)." msgstr "" #. Tag: para #: reference_processing.xml:69 #, no-c-format msgid "'endcap=round|flat|square' : endcap style (defaults to \"round\", needs GEOS-3.2 or higher for a different value). 'butt' is also accepted as a synonym for 'flat'." msgstr "" #. Tag: para #: reference_processing.xml:72 #, no-c-format msgid "'join=round|mitre|bevel' : join style (defaults to \"round\", needs GEOS-3.2 or higher for a different value). 'miter' is also accepted as a synonym for 'mitre'." msgstr "" #. Tag: para #: reference_processing.xml:75 #, no-c-format msgid "'mitre_limit=#.#' : mitre ratio limit (only affects mitered join style). 'miter_limit' is also accepted as a synonym for 'mitre_limit'." msgstr "" #. Tag: para #: reference_processing.xml:80 #, no-c-format msgid "Units of radius are measured in units of the spatial reference system." msgstr "" #. Tag: para #: reference_processing.xml:81 #, no-c-format msgid "The inputs can be POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS, and GeometryCollections." msgstr "" #. Tag: para #: reference_processing.xml:82 #, no-c-format msgid "This function ignores the third dimension (z) and will always give a 2-d buffer even when presented with a 3d-geometry." msgstr "" #. Tag: para #: reference_processing.xml:84 reference_processing.xml:1444 reference_processing.xml:1732 reference_processing.xml:1775 reference_processing.xml:2032 #, no-c-format msgid "Performed by the GEOS module." msgstr "" #. Tag: para #: reference_processing.xml:85 reference_processing.xml:541 reference_processing.xml:747 reference_processing.xml:1063 reference_processing.xml:1930 reference_processing.xml:2041 #, no-c-format msgid "&sfs_compliant; s2.1.1.3" msgstr "" #. Tag: para #: reference_processing.xml:86 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.17" msgstr "" #. Tag: para #: reference_processing.xml:88 #, no-c-format msgid "People often make the mistake of using this function to try to do radius searches. Creating a buffer to to a radius search is slow and pointless. Use instead." msgstr "" #. Tag: title #: reference_processing.xml:93 reference_processing.xml:238 reference_processing.xml:343 reference_processing.xml:411 reference_processing.xml:547 reference_processing.xml:604 reference_processing.xml:754 reference_processing.xml:957 reference_processing.xml:1067 reference_processing.xml:1104 reference_processing.xml:1208 reference_processing.xml:1256 reference_processing.xml:1367 reference_processing.xml:1453 reference_processing.xml:1690 reference_processing.xml:1737 reference_processing.xml:1781 reference_processing.xml:1823 reference_processing.xml:1938 reference_processing.xml:2048 #, no-c-format msgid "Examples" msgstr "" #. Tag: para #: reference_processing.xml:104 #, no-c-format msgid "quad_segs=8 (default)" msgstr "" #. Tag: programlisting #: reference_processing.xml:107 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText('POINT(100 90)'),\n" " 50, 'quad_segs=8');" msgstr "" #. Tag: para #: reference_processing.xml:115 #, no-c-format msgid "quad_segs=2 (lame)" msgstr "" #. Tag: programlisting #: reference_processing.xml:118 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText('POINT(100 90)'),\n" " 50, 'quad_segs=2');" msgstr "" #. Tag: para #: reference_processing.xml:127 #, no-c-format msgid "endcap=round join=round (default)" msgstr "" #. Tag: programlisting #: reference_processing.xml:130 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'endcap=round join=round');" msgstr "" #. Tag: para #: reference_processing.xml:138 #, no-c-format msgid "endcap=square" msgstr "" #. Tag: programlisting #: reference_processing.xml:141 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'endcap=square join=round');" msgstr "" #. Tag: para #: reference_processing.xml:149 #, no-c-format msgid "endcap=flat" msgstr "" #. Tag: programlisting #: reference_processing.xml:152 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'endcap=flat join=round');" msgstr "" #. Tag: para #: reference_processing.xml:161 #, no-c-format msgid "join=bevel" msgstr "" #. Tag: programlisting #: reference_processing.xml:164 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'join=bevel');" msgstr "" #. Tag: para #: reference_processing.xml:172 #, no-c-format msgid "join=mitre mitre_limit=5.0 (default mitre limit)" msgstr "" #. Tag: programlisting #: reference_processing.xml:175 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'join=mitre mitre_limit=5.0');" msgstr "" #. Tag: para #: reference_processing.xml:183 #, no-c-format msgid "join=mitre mitre_limit=1" msgstr "" #. Tag: programlisting #: reference_processing.xml:186 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'join=mitre mitre_limit=1.0');" msgstr "" #. Tag: programlisting #: reference_processing.xml:193 #, no-c-format msgid "" "--A buffered point approximates a circle\n" "-- A buffered point forcing approximation of (see diagram)\n" "-- 2 points per circle is poly with 8 sides (see diagram)\n" "SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As promisingcircle_pcount,\n" "ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 2)) As lamecircle_pcount;\n" "\n" "promisingcircle_pcount | lamecircle_pcount\n" "------------------------+-------------------\n" " 33 | 9\n" "\n" "--A lighter but lamer circle\n" "-- only 2 points per quarter circle is an octagon\n" "--Below is a 100 meter octagon\n" "-- Note coordinates are in NAD 83 long lat which we transform\n" "to Mass state plane meter and then buffer to get measurements in meters;\n" "SELECT ST_AsText(ST_Buffer(\n" "ST_Transform(\n" "ST_SetSRID(ST_MakePoint(-71.063526, 42.35785),4269), 26986)\n" ",100,2)) As octagon;\n" "----------------------\n" "POLYGON((236057.59057465 900908.759918696,236028.301252769 900838.049240578,235\n" "957.59057465 900808.759918696,235886.879896532 900838.049240578,235857.59057465\n" "900908.759918696,235886.879896532 900979.470596815,235957.59057465 901008.759918\n" "696,236028.301252769 900979.470596815,236057.59057465 900908.759918696))" msgstr "" #. Tag: title #: reference_processing.xml:197 reference_processing.xml:272 reference_processing.xml:350 reference_processing.xml:500 reference_processing.xml:563 reference_processing.xml:611 reference_processing.xml:711 reference_processing.xml:794 reference_processing.xml:853 reference_processing.xml:920 reference_processing.xml:964 reference_processing.xml:1071 reference_processing.xml:1111 reference_processing.xml:1165 reference_processing.xml:1215 reference_processing.xml:1269 reference_processing.xml:1322 reference_processing.xml:1373 reference_processing.xml:1535 reference_processing.xml:1571 reference_processing.xml:1641 reference_processing.xml:1697 reference_processing.xml:1742 reference_processing.xml:1786 reference_processing.xml:1894 reference_processing.xml:1979 reference_processing.xml:2055 reference_processing.xml:2109 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_processing.xml:199 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:205 #, no-c-format msgid "ST_BuildArea" msgstr "" #. Tag: refpurpose #: reference_processing.xml:207 #, no-c-format msgid "Creates an areal geometry formed by the constituent linework of given geometry" msgstr "" #. Tag: funcprototype #: reference_processing.xml:213 #, no-c-format msgid "geometry ST_BuildArea geometry A" msgstr "" #. Tag: para #: reference_processing.xml:223 #, no-c-format msgid "Creates an areal geometry formed by the constituent linework of given geometry. The return type can be a Polygon or MultiPolygon, depending on input. If the input lineworks do not form polygons NULL is returned. The inputs can be LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS, and GeometryCollections." msgstr "" #. Tag: para #: reference_processing.xml:228 #, no-c-format msgid "This function will assume all inner geometries represent holes" msgstr "" #. Tag: para #: reference_processing.xml:231 reference_processing.xml:1310 #, no-c-format msgid "Input linework must be correctly noded for this function to work properly" msgstr "" #. Tag: para #: reference_processing.xml:234 #, no-c-format msgid "Availability: 1.1.0 - requires GEOS >= 2.1.0." msgstr "" #. Tag: para #: reference_processing.xml:248 #, no-c-format msgid "This will create a donut" msgstr "" #. Tag: programlisting #: reference_processing.xml:251 #, no-c-format msgid "" "SELECT ST_BuildArea(ST_Collect(smallc,bigc))\n" "FROM (SELECT\n" " ST_Buffer(\n" " ST_GeomFromText('POINT(100 90)'), 25) As smallc,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As bigc) As foo;" msgstr "" #. Tag: para #: reference_processing.xml:260 #, no-c-format msgid "This will create a gaping hole inside the circle with prongs sticking out" msgstr "" #. Tag: programlisting #: reference_processing.xml:263 #, no-c-format msgid "" "SELECT ST_BuildArea(ST_Collect(line,circle))\n" "FROM (SELECT\n" " ST_Buffer(\n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)),\n" " 5) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;\n" "\n" "--this creates the same gaping hole\n" "--but using linestrings instead of polygons\n" "SELECT ST_BuildArea(\n" " ST_Collect(ST_ExteriorRing(line),ST_ExteriorRing(circle))\n" " )\n" "FROM (SELECT ST_Buffer(\n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190))\n" " ,5) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;" msgstr "" #. Tag: para #: reference_processing.xml:274 #, no-c-format msgid ", , , wrappers to this function with standard OGC interface" msgstr "" #. Tag: refname #: reference_processing.xml:284 #, no-c-format msgid "ST_Collect" msgstr "" #. Tag: refpurpose #: reference_processing.xml:285 #, no-c-format msgid "Return a specified ST_Geometry value from a collection of other geometries." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:289 #, no-c-format msgid " geometry ST_Collect geometry set g1field geometry ST_Collect geometry g1 geometry g2 geometry ST_Collect geometry[] g1_array " msgstr "" #. Tag: para #: reference_processing.xml:308 #, no-c-format msgid "Output type can be a MULTI* or a GEOMETRYCOLLECTION. Comes in 2 variants. Variant 1 collects 2 geometries. Variant 2 is an aggregate function that takes a set of geometries and collects them into a single ST_Geometry." msgstr "" #. Tag: para #: reference_processing.xml:312 #, no-c-format msgid "Aggregate version: This function returns a GEOMETRYCOLLECTION or a MULTI object from a set of geometries. The ST_Collect() function is an \"aggregate\" function in the terminology of PostgreSQL. That means that it operates on rows of data, in the same way the SUM() and AVG() functions do. For example, \"SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN\" will return a separate GEOMETRYCOLLECTION for each distinct value of ATTRCOLUMN." msgstr "" #. Tag: para #: reference_processing.xml:320 #, no-c-format msgid "Non-Aggregate version: This function returns a geometry being a collection of two input geometries. Output type can be a MULTI* or a GEOMETRYCOLLECTION." msgstr "" #. Tag: para #: reference_processing.xml:324 #, no-c-format msgid "ST_Collect and ST_Union are often interchangeable. ST_Collect is in general orders of magnitude faster than ST_Union because it does not try to dissolve boundaries or validate that a constructed MultiPolgon doesn't have overlapping regions. It merely rolls up single geometries into MULTI and MULTI or mixed geometry types into Geometry Collections. Unfortunately geometry collections are not well-supported by GIS tools. To prevent ST_Collect from returning a Geometry Collection when collecting MULTI geometries, one can use the below trick that utilizes to expand the MULTIs out to singles and then regroup them." msgstr "" #. Tag: para #: reference_processing.xml:335 #, no-c-format msgid "Availability: 1.4.0 - ST_Collect(geomarray) was introduced. ST_Collect was enhanced to handle more geometries faster." msgstr "" #. Tag: para #: reference_processing.xml:336 reference_processing.xml:543 reference_processing.xml:598 reference_processing.xml:650 reference_processing.xml:840 reference_processing.xml:894 reference_processing.xml:952 reference_processing.xml:992 reference_processing.xml:1098 reference_processing.xml:1160 reference_processing.xml:1203 reference_processing.xml:1357 reference_processing.xml:1567 reference_processing.xml:1682 reference_processing.xml:2101 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_processing.xml:337 #, no-c-format msgid "&curve_support; This method supports Circular Strings and Curves, but will never return a MULTICURVE or MULTI as one would expect and PostGIS does not currently support those." msgstr "" #. Tag: para #: reference_processing.xml:344 #, no-c-format msgid "Aggregate example (http://postgis.refractions.net/pipermail/postgis-users/2008-June/020331.html)" msgstr "" #. Tag: programlisting #: reference_processing.xml:345 #, no-c-format msgid "" "SELECT stusps,\n" " ST_Multi(ST_Collect(f.the_geom)) as singlegeom\n" " FROM (SELECT stusps, (ST_Dump(the_geom)).geom As the_geom\n" " FROM\n" " somestatetable ) As f\n" "GROUP BY stusps" msgstr "" #. Tag: para #: reference_processing.xml:346 reference_processing.xml:2051 #, no-c-format msgid "Non-Aggregate example" msgstr "" #. Tag: programlisting #: reference_processing.xml:347 #, no-c-format msgid "" "SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(-2 3)') ));\n" "\n" "st_astext\n" "----------\n" "MULTIPOINT(1 2,-2 3)\n" "\n" "--Collect 2 d points\n" "SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(1 2)') ) );\n" "\n" "st_astext\n" "----------\n" "MULTIPOINT(1 2,1 2)\n" "\n" "--Collect 3d points\n" "SELECT ST_AsEWKT(ST_Collect(ST_GeomFromEWKT('POINT(1 2 3)'),\n" " ST_GeomFromEWKT('POINT(1 2 4)') ) );\n" "\n" " st_asewkt\n" "-------------------------\n" " MULTIPOINT(1 2 3,1 2 4)\n" "\n" " --Example with curves\n" "SELECT ST_AsText(ST_Collect(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),\n" "ST_GeomFromText('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)')));\n" " st_astext\n" "------------------------------------------------------------------------------------\n" " GEOMETRYCOLLECTION(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),\n" " CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))\n" "\n" "--New ST_Collect array construct\n" "SELECT ST_Collect(ARRAY(SELECT the_geom FROM sometable));\n" "\n" "SELECT ST_AsText(ST_Collect(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),\n" " ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktcollect;\n" "\n" "--wkt collect --\n" "MULTILINESTRING((1 2,3 4),(3 4,4 5))" msgstr "" #. Tag: para #: reference_processing.xml:351 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:356 #, no-c-format msgid "ST_ConcaveHull" msgstr "" #. Tag: refpurpose #: reference_processing.xml:357 #, no-c-format msgid "The concave hull of a geometry represents a possibly concave geometry that encloses all geometries within the set. You can think of it as shrink wrapping." msgstr "" #. Tag: funcprototype #: reference_processing.xml:363 #, no-c-format msgid "geometry ST_ConcaveHull geometry geomA float target_percent boolean allow_holes=false" msgstr "" #. Tag: para #: reference_processing.xml:374 #, no-c-format msgid "The concave hull of a geometry represents a possibly concave geometry that encloses all geometries within the set. Defaults to false for allowing polygons with holes. The result is never higher than a single polygon." msgstr "" #. Tag: para #: reference_processing.xml:378 #, no-c-format msgid "The target_percent is the target percent of area of convex hull the PostGIS solution will try to approach before giving up or exiting. One can think of the concave hull as the geometry you get by vacuum sealing a set of geometries. The target_percent of 1 will give you the same answer as the convex hull. A target_percent between 0 and 0.99 will give you something that should have a smaller area than the convex hull. This is different from a convex hull which is more like wrapping a rubber band around the set of geometries." msgstr "" #. Tag: para #: reference_processing.xml:383 #, no-c-format msgid "It is usually used with MULTI and Geometry Collections. Although it is not an aggregate - you can use it in conjunction with ST_Collect or ST_Union to get the concave hull of a set of points/linestring/polygons ST_ConcaveHull(ST_Collect(somepointfield), 0.80)." msgstr "" #. Tag: para #: reference_processing.xml:388 #, no-c-format msgid "It is much slower to compute than convex hull but encloses the geometry better and is also useful for image recognition." msgstr "" #. Tag: para #: reference_processing.xml:391 reference_processing.xml:539 reference_processing.xml:743 reference_processing.xml:1059 reference_processing.xml:1926 #, no-c-format msgid "Performed by the GEOS module" msgstr "" #. Tag: para #: reference_processing.xml:392 #, no-c-format msgid "Note - If you are using with points, linestrings, or geometry collections use ST_Collect. If you are using with polygons, use ST_Union since it may fail with invalid geometries." msgstr "" #. Tag: para #: reference_processing.xml:395 #, no-c-format msgid "Note - The smaller you make the target percent, the longer it takes to process the concave hull and more likely to run into topological exceptions. Also the more floating points and number of points you accrue. First try a 0.99 which does a first hop, is usually very fast, sometimes as fast as computing the convex hull, and usually gives much better than 99% of shrink since it almost always overshoots. Second hope of 0.98 it slower, others get slower usually quadratically. To reduce precision and float points, use or after ST_ConcaveHull. ST_SnapToGrid is a bit faster, but could result in invalid geometries where as ST_SimplifyPreserveTopology almost always preserves the validity of the geometry." msgstr "" #. Tag: para #: reference_processing.xml:400 #, no-c-format msgid "More real world examples and brief explanation of the technique are shown http://www.bostongis.com/postgis_concavehull.snippet" msgstr "" #. Tag: para #: reference_processing.xml:403 #, no-c-format msgid "Also check out Simon Greener's article on demonstrating ConcaveHull introduced in Oracle 11G R2. http://www.spatialdbadvisor.com/oracle_spatial_tips_tricks/172/concave-hull-geometries-in-oracle-11gr2. The solution we get at 0.75 target percent of convex hull is similar to the shape Simon gets with Oracle SDO_CONCAVEHULL_BOUNDARY." msgstr "" #. Tag: para #: reference_processing.xml:407 reference_processing.xml:994 reference_processing.xml:1565 reference_processing.xml:1819 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: programlisting #: reference_processing.xml:412 #, no-c-format msgid "" "--Get estimate of infected area based on point observations\n" "SELECT d.disease_type,\n" " ST_ConcaveHull(ST_Collect(d.pnt_geom), 0.99) As geom\n" " FROM disease_obs As d\n" " GROUP BY d.disease_type;" msgstr "" #. Tag: para #: reference_processing.xml:422 #, no-c-format msgid "ST_ConcaveHull of 2 polygons encased in target 100% shrink concave hull" msgstr "" #. Tag: programlisting #: reference_processing.xml:425 #, no-c-format msgid "" "-- geometries overlaid with concavehull \n" "-- at target 100% shrink (this is the same as convex hull - since no shrink)\n" "SELECT \n" " ST_ConcaveHull(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ), 1) \n" " As convexhull;" msgstr "" #. Tag: para #: reference_processing.xml:432 #, no-c-format msgid "-- geometries overlaid with concavehull at target 90% of convex hull area" msgstr "" #. Tag: programlisting #: reference_processing.xml:436 #, no-c-format msgid "" "-- geometries overlaid with concavehull at target 90% shrink\n" "SELECT \n" " ST_ConcaveHull(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ), 0.9) \n" " As target_90;" msgstr "" #. Tag: para #: reference_processing.xml:445 #, no-c-format msgid "L Shape points overlaid with convex hull" msgstr "" #. Tag: programlisting #: reference_processing.xml:448 #, no-c-format msgid "" "-- this produces a table of 42 points that form an L shape\n" "SELECT (ST_DumpPoints(ST_GeomFromText(\n" "'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14,\n" "150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6,\n" "14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130,\n" "6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114,\n" "14 94,14 74,14 54,14 34,14 14)'))).geom \n" " INTO TABLE l_shape;\n" "\n" "SELECT ST_ConvexHull(ST_Collect(geom))\n" "FROM l_shape;" msgstr "" #. Tag: para #: reference_processing.xml:455 #, no-c-format msgid "ST_ConcaveHull of L points at target 99% of convex hull" msgstr "" #. Tag: programlisting #: reference_processing.xml:458 #, no-c-format msgid "" "SELECT ST_ConcaveHull(ST_Collect(geom), 0.99)\n" " FROM l_shape;" msgstr "" #. Tag: para #: reference_processing.xml:467 #, no-c-format msgid "Concave Hull of L points at target 80% convex hull area" msgstr "" #. Tag: programlisting #: reference_processing.xml:470 #, no-c-format msgid "" "-- Concave Hull L shape points\n" " -- at target 80% of convexhull\n" " SELECT ST_ConcaveHull(ST_Collect(geom), 0.80)\n" " FROM l_shape;" msgstr "" #. Tag: para #: reference_processing.xml:479 #, no-c-format msgid "multilinestring overlaid with Convex hull" msgstr "" #. Tag: para #: reference_processing.xml:487 #, no-c-format msgid "multilinestring with overlaid with Concave hull of linestrings at 99% target -- first hop" msgstr "" #. Tag: programlisting #: reference_processing.xml:491 #, no-c-format msgid "" "SELECT ST_ConcaveHull(ST_GeomFromText('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94,\n" " 130 62,122 40,156 32,162 76,172 88),\n" "(132 178,134 148,128 136,96 128,132 108,150 130,\n" "170 142,174 110,156 96,158 90,158 88),\n" "(22 64,66 28,94 38,94 68,114 76,112 30,\n" "132 10,168 18,178 34,186 52,184 74,190 100,\n" "190 122,182 148,178 170,176 184,156 164,146 178,\n" "132 186,92 182,56 158,36 150,62 150,76 128,88 118))'),0.99)" msgstr "" #. Tag: para #: reference_processing.xml:501 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_processing.xml:507 #, no-c-format msgid "ST_ConvexHull" msgstr "" #. Tag: refpurpose #: reference_processing.xml:508 #, no-c-format msgid "The convex hull of a geometry represents the minimum convex geometry that encloses all geometries within the set." msgstr "" #. Tag: funcprototype #: reference_processing.xml:514 #, no-c-format msgid "geometry ST_ConvexHull geometry geomA" msgstr "" #. Tag: para #: reference_processing.xml:523 #, no-c-format msgid "The convex hull of a geometry represents the minimum convex geometry that encloses all geometries within the set." msgstr "" #. Tag: para #: reference_processing.xml:526 #, no-c-format msgid "One can think of the convex hull as the geometry you get by wrapping an elastic band around a set of geometries. This is different from a concave hull which is analogous to shrink-wrapping your geometries." msgstr "" #. Tag: para #: reference_processing.xml:530 #, no-c-format msgid "It is usually used with MULTI and Geometry Collections. Although it is not an aggregate - you can use it in conjunction with ST_Collect to get the convex hull of a set of points. ST_ConvexHull(ST_Collect(somepointfield))." msgstr "" #. Tag: para #: reference_processing.xml:535 #, no-c-format msgid "It is often used to determine an affected area based on a set of point observations." msgstr "" #. Tag: para #: reference_processing.xml:542 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.16" msgstr "" #. Tag: programlisting #: reference_processing.xml:548 #, no-c-format msgid "" "--Get estimate of infected area based on point observations\n" "SELECT d.disease_type,\n" " ST_ConvexHull(ST_Collect(d.the_geom)) As the_geom\n" " FROM disease_obs As d\n" " GROUP BY d.disease_type;" msgstr "" #. Tag: para #: reference_processing.xml:556 #, no-c-format msgid "Convex Hull of a MultiLinestring and a MultiPoint seen together with the MultiLinestring and MultiPoint" msgstr "" #. Tag: programlisting #: reference_processing.xml:559 #, no-c-format msgid "" "SELECT ST_AsText(ST_ConvexHull(\n" " ST_Collect(\n" " ST_GeomFromText('MULTILINESTRING((100 190,10 8),(150 10, 20 30))'),\n" " ST_GeomFromText('MULTIPOINT(50 5, 150 30, 50 10, 10 10)')\n" " )) );\n" "---st_astext--\n" "POLYGON((50 5,10 8,10 10,100 190,150 30,150 10,50 5))" msgstr "" #. Tag: para #: reference_processing.xml:564 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_processing.xml:570 #, no-c-format msgid "ST_CurveToLine" msgstr "" #. Tag: refpurpose #: reference_processing.xml:572 #, no-c-format msgid "Converts a CIRCULARSTRING/CURVEDPOLYGON to a LINESTRING/POLYGON" msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:576 #, no-c-format msgid " geometry ST_CurveToLine geometry curveGeom geometry ST_CurveToLine geometry curveGeom integer segments_per_qtr_circle " msgstr "" #. Tag: para #: reference_processing.xml:592 #, no-c-format msgid "Converst a CIRCULAR STRING to regular LINESTRING or CURVEPOLYGON to POLYGON. Useful for outputting to devices that can't support CIRCULARSTRING geometry types" msgstr "" #. Tag: para #: reference_processing.xml:593 #, no-c-format msgid "Converts a given geometry to a linear geometry. Each curved geometry or segment is converted into a linear approximation using the default value of 32 segments per quarter circle" msgstr "" #. Tag: para #: reference_processing.xml:595 reference_processing.xml:1097 #, no-c-format msgid "Availability: 1.2.2?" msgstr "" #. Tag: para #: reference_processing.xml:596 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_processing.xml:597 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.7" msgstr "" #. Tag: para #: reference_processing.xml:599 reference_processing.xml:837 reference_processing.xml:891 reference_processing.xml:991 reference_processing.xml:1099 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: programlisting #: reference_processing.xml:606 #, no-c-format msgid "" "SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')));\n" "\n" "--Result --\n" " LINESTRING(220268 150415,220269.95064912 150416.539364228,220271.823415575 150418.17258804,220273.613787707 150419.895736857,\n" " 220275.317452352 150421.704659462,220276.930305234 150423.594998003,220278.448460847 150425.562198489,\n" " 220279.868261823 150427.60152176,220281.186287736 150429.708054909,220282.399363347 150431.876723113,\n" " 220283.50456625 150434.10230186,220284.499233914 150436.379429536,220285.380970099 150438.702620341,220286.147650624 150441.066277505,\n" " 220286.797428488 150443.464706771,220287.328738321 150445.892130112,220287.740300149 150448.342699654,\n" " 220288.031122486 150450.810511759,220288.200504713 150453.289621251,220288.248038775 150455.77405574,\n" " 220288.173610157 150458.257830005,220287.977398166 150460.734960415,220287.659875492 150463.199479347,\n" " 220287.221807076 150465.64544956,220286.664248262 150468.066978495,220285.988542259 150470.458232479,220285.196316903 150472.81345077,\n" " 220284.289480732 150475.126959442,220283.270218395 150477.39318505,220282.140985384 150479.606668057,\n" " 220280.90450212 150481.762075989,220279.5637474 150483.85421628,220278.12195122 150485.87804878,\n" " 220276.582586992 150487.828697901,220274.949363179 150489.701464356,220273.226214362 150491.491836488,\n" " 220271.417291757 150493.195501133,220269.526953216 150494.808354014,220267.559752731 150496.326509628,\n" " 220265.520429459 150497.746310603,220263.41389631 150499.064336517,220261.245228106 150500.277412127,\n" " 220259.019649359 150501.38261503,220256.742521683 150502.377282695,220254.419330878 150503.259018879,\n" " 220252.055673714 150504.025699404,220249.657244448 150504.675477269,220247.229821107 150505.206787101,\n" " 220244.779251566 150505.61834893,220242.311439461 150505.909171266,220239.832329968 150506.078553494,\n" " 220237.347895479 150506.126087555,220234.864121215 150506.051658938,220232.386990804 150505.855446946,\n" " 220229.922471872 150505.537924272,220227.47650166 150505.099855856,220225.054972724 150504.542297043,\n" " 220222.663718741 150503.86659104,220220.308500449 150503.074365683,\n" " 220217.994991777 150502.167529512,220215.72876617 150501.148267175,\n" " 220213.515283163 150500.019034164,220211.35987523 150498.7825509,\n" " 220209.267734939 150497.441796181,220207.243902439 150496,\n" " 220205.293253319 150494.460635772,220203.420486864 150492.82741196,220201.630114732 150491.104263143,\n" " 220199.926450087 150489.295340538,220198.313597205 150487.405001997,220196.795441592 150485.437801511,\n" " 220195.375640616 150483.39847824,220194.057614703 150481.291945091,220192.844539092 150479.123276887,220191.739336189 150476.89769814,\n" " 220190.744668525 150474.620570464,220189.86293234 150472.297379659,220189.096251815 150469.933722495,\n" " 220188.446473951 150467.535293229,220187.915164118 150465.107869888,220187.50360229 150462.657300346,\n" " 220187.212779953 150460.189488241,220187.043397726 150457.710378749,220186.995863664 150455.22594426,\n" " 220187.070292282 150452.742169995,220187.266504273 150450.265039585,220187.584026947 150447.800520653,\n" " 220188.022095363 150445.35455044,220188.579654177 150442.933021505,220189.25536018 150440.541767521,\n" " 220190.047585536 150438.18654923,220190.954421707 150435.873040558,220191.973684044 150433.60681495,\n" " 220193.102917055 150431.393331943,220194.339400319 150429.237924011,220195.680155039 150427.14578372,220197.12195122 150425.12195122,\n" " 220198.661315447 150423.171302099,220200.29453926 150421.298535644,220202.017688077 150419.508163512,220203.826610682 150417.804498867,\n" " 220205.716949223 150416.191645986,220207.684149708 150414.673490372,220209.72347298 150413.253689397,220211.830006129 150411.935663483,\n" " 220213.998674333 150410.722587873,220216.22425308 150409.61738497,220218.501380756 150408.622717305,220220.824571561 150407.740981121,\n" " 220223.188228725 150406.974300596,220225.586657991 150406.324522731,220227 150406)\n" "\n" "--3d example\n" "SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')));\n" "Output\n" "------\n" " LINESTRING(220268 150415 1,220269.95064912 150416.539364228 1.0181172856673,\n" " 220271.823415575 150418.17258804 1.03623457133459,220273.613787707 150419.895736857 1.05435185700189,....AD INFINITUM ....\n" " 220225.586657991 150406.324522731 1.32611114201132,220227 150406 3)\n" "\n" "--use only 2 segments to approximate quarter circle\n" "SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),2));\n" "st_astext\n" "------------------------------\n" " LINESTRING(220268 150415,220287.740300149 150448.342699654,220278.12195122 150485.87804878,\n" " 220244.779251566 150505.61834893,220207.243902439 150496,220187.50360229 150462.657300346,\n" " 220197.12195122 150425.12195122,220227 150406)" msgstr "" #. Tag: refname #: reference_processing.xml:619 #, no-c-format msgid "ST_DelaunayTriangles" msgstr "" #. Tag: refpurpose #: reference_processing.xml:621 #, no-c-format msgid "Return a Delaunay triangulation around the given input points." msgstr "" #. Tag: funcprototype #: reference_processing.xml:628 #, no-c-format msgid "geometry ST_DelaunayTriangles geometry g1 float tolerance int4 flags" msgstr "" #. Tag: para #: reference_processing.xml:640 #, no-c-format msgid "Return a Delaunay triangulation around the vertices of the input geometry. Output is a COLLECTION of polygons (for flags=0) or a MULTILINESTRING (for flags=1). The tolerance, if any, is used to snap input vertices togheter." msgstr "" #. Tag: para #: reference_processing.xml:649 #, no-c-format msgid "Availability: 2.1.0 - requires GEOS >= 3.4.0." msgstr "" #. Tag: title #: reference_processing.xml:654 #, no-c-format msgid "2D Examples" msgstr "" #. Tag: para #: reference_processing.xml:663 #, no-c-format msgid "Original polygons" msgstr "" #. Tag: programlisting #: reference_processing.xml:666 #, no-c-format msgid "" "-- our original geometry --\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " )" msgstr "" #. Tag: para #: reference_processing.xml:674 #, no-c-format msgid "ST_DelaunayTriangles of 2 polygons: delaunay triangle polygons each triangle themed in different color" msgstr "" #. Tag: programlisting #: reference_processing.xml:677 #, no-c-format msgid "" "-- geometries overlaid multilinestring triangles\n" "SELECT \n" " ST_DelaunayTriangles(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " )) \n" " As dtriag;" msgstr "" #. Tag: para #: reference_processing.xml:684 #, no-c-format msgid "-- delaunay triangles as multilinestring" msgstr "" #. Tag: programlisting #: reference_processing.xml:687 #, no-c-format msgid "" "SELECT \n" " ST_DelaunayTriangles(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ),0.001,1) \n" " As dtriag;" msgstr "" #. Tag: para #: reference_processing.xml:695 #, no-c-format msgid "-- delaunay triangles of 45 points as 55 triangle polygons" msgstr "" #. Tag: programlisting #: reference_processing.xml:698 #, no-c-format msgid "" "-- this produces a table of 42 points that form an L shape\n" "SELECT (ST_DumpPoints(ST_GeomFromText(\n" "'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14,\n" "150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6,\n" "14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130,\n" "6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114,\n" "14 94,14 74,14 54,14 34,14 14)'))).geom \n" " INTO TABLE l_shape;\n" "-- output as individual polygon triangles\n" "SELECT ST_AsText((ST_Dump(geom)).geom) As wkt\n" "FROM ( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geom\n" "FROM l_shape) As foo;\n" "\n" "---wkt ---\n" "POLYGON((6 194,6 190,14 194,6 194))\n" "POLYGON((14 194,6 190,14 174,14 194))\n" "POLYGON((14 194,14 174,154 14,14 194))\n" "POLYGON((154 14,14 174,14 154,154 14))\n" "POLYGON((154 14,14 154,150 14,154 14))\n" "POLYGON((154 14,150 14,154 6,154 14))\n" ":\n" ":" msgstr "" #. Tag: title #: reference_processing.xml:707 #, no-c-format msgid "3D Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:708 #, no-c-format msgid "" "-- 3D multipoint --\n" "SELECT ST_AsText(ST_DelaunayTriangles(ST_GeomFromText(\n" "'MULTIPOINT Z(14 14 10,\n" "150 14 100,34 6 25, 20 10 150)'))) As wkt;\n" "\n" "-----wkt----\n" "GEOMETRYCOLLECTION Z (POLYGON Z ((14 14 10,20 10 150,34 6 25,14 14 10))\n" " ,POLYGON Z ((14 14 10,34 6 25,150 14 100,14 14 10)))" msgstr "" #. Tag: para #: reference_processing.xml:712 reference_processing.xml:1323 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:719 #, no-c-format msgid "ST_Difference" msgstr "" #. Tag: refpurpose #: reference_processing.xml:721 #, no-c-format msgid "Returns a geometry that represents that part of geometry A that does not intersect with geometry B." msgstr "" #. Tag: funcprototype #: reference_processing.xml:727 #, no-c-format msgid "geometry ST_Difference geometry geomA geometry geomB" msgstr "" #. Tag: para #: reference_processing.xml:738 #, no-c-format msgid "Returns a geometry that represents that part of geometry A that does not intersect with geometry B. One can think of this as GeometryA - ST_Intersection(A,B). If A is completely contained in B then an empty geometry collection is returned." msgstr "" #. Tag: para #: reference_processing.xml:741 #, no-c-format msgid "Note - order matters. B - A will always return a portion of B" msgstr "" #. Tag: para #: reference_processing.xml:745 reference_processing.xml:1928 #, no-c-format msgid "Do not call with a GeometryCollection as an argument" msgstr "" #. Tag: para #: reference_processing.xml:748 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.20" msgstr "" #. Tag: para #: reference_processing.xml:749 reference_processing.xml:1932 #, no-c-format msgid "&Z_support; However it seems to only consider x y when doing the difference and tacks back on the Z-Index" msgstr "" #. Tag: para #: reference_processing.xml:766 #, no-c-format msgid "The original linestrings shown together." msgstr "" #. Tag: para #: reference_processing.xml:778 #, no-c-format msgid "The difference of the two linestrings" msgstr "" #. Tag: programlisting #: reference_processing.xml:787 #, no-c-format msgid "" "--Safe for 2d. This is same geometries as what is shown for st_symdifference\n" "SELECT ST_AsText(\n" " ST_Difference(\n" " ST_GeomFromText('LINESTRING(50 100, 50 200)'),\n" " ST_GeomFromText('LINESTRING(50 50, 50 150)')\n" " )\n" " );\n" "\n" "st_astext\n" "---------\n" "LINESTRING(50 150,50 200)" msgstr "" #. Tag: programlisting #: reference_processing.xml:789 #, no-c-format msgid "" "--When used in 3d doesn't quite do the right thing\n" "SELECT ST_AsEWKT(ST_Difference(ST_GeomFromEWKT('MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)'), ST_GeomFromEWKT('POINT(-118.614 38.281 5)')));\n" "st_asewkt\n" "---------\n" "MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)" msgstr "" #. Tag: refname #: reference_processing.xml:802 #, no-c-format msgid "ST_Dump" msgstr "" #. Tag: refpurpose #: reference_processing.xml:803 #, no-c-format msgid "Returns a set of geometry_dump (geom,path) rows, that make up a geometry g1." msgstr "" #. Tag: funcprototype #: reference_processing.xml:808 #, no-c-format msgid "geometry_dump[] ST_Dump geometry g1" msgstr "" #. Tag: para #: reference_processing.xml:817 #, no-c-format msgid "This is a set-returning function (SRF). It returns a set of geometry_dump rows, formed by a geometry (geom) and an array of integers (path). When the input geometry is a simple type (POINT,LINESTRING,POLYGON) a single record will be returned with an empty path array and the input geometry as geom. When the input geometry is a collection or multi it will return a record for each of the collection components, and the path will express the position of the component inside the collection." msgstr "" #. Tag: para #: reference_processing.xml:826 #, no-c-format msgid "ST_Dump is useful for expanding geometries. It is the reverse of a GROUP BY in that it creates new rows. For example it can be use to expand MULTIPOLYGONS into POLYGONS." msgstr "" #. Tag: para #: reference_processing.xml:830 reference_processing.xml:889 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced." msgstr "" #. Tag: para #: reference_processing.xml:831 #, no-c-format msgid "Availability: PostGIS 1.0.0RC1. Requires PostgreSQL 7.3 or higher." msgstr "" #. Tag: para #: reference_processing.xml:833 #, no-c-format msgid "Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+" msgstr "" #. Tag: para #: reference_processing.xml:838 reference_processing.xml:892 reference_processing.xml:995 reference_processing.xml:1566 reference_processing.xml:1684 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_processing.xml:839 reference_processing.xml:893 reference_processing.xml:996 reference_processing.xml:1685 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: title #: reference_processing.xml:844 #, no-c-format msgid "Standard Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:845 #, no-c-format msgid "" "SELECT sometable.field1, sometable.field1,\n" " (ST_Dump(sometable.the_geom)).geom AS the_geom\n" "FROM sometable;\n" "\n" "-- Break a compound curve into its constituent linestrings and circularstrings\n" "SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)\n" " FROM ( SELECT (ST_Dump(p_geom)).geom AS geom\n" " FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') AS p_geom) AS b\n" " ) AS a;\n" " st_asewkt | st_hasarc\n" "-----------------------------+----------\n" " CIRCULARSTRING(0 0,1 1,1 0) | t\n" " LINESTRING(1 0,0 1) | f\n" "(2 rows)" msgstr "" #. Tag: title #: reference_processing.xml:847 reference_processing.xml:914 #, no-c-format msgid "Polyhedral Surfaces, TIN and Triangle Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:848 #, no-c-format msgid "" "-- Polyhedral surface example\n" "-- Break a Polyhedral surface into its faces\n" "SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt\n" " FROM (SELECT ST_Dump(ST_GeomFromEWKT('POLYHEDRALSURFACE( \n" "((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) \n" ")') ) AS p_geom ) AS a;\n" "\n" " path | geom_ewkt\n" "------+------------------------------------------\n" " 1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))\n" " 2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))\n" " 3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))\n" " 4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))\n" " 5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))\n" " 6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))" msgstr "" #. Tag: programlisting #: reference_processing.xml:850 #, no-c-format msgid "" "-- TIN -- \n" "SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_Dump( ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "------+-------------------------------------\n" " {1} | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))\n" " {2} | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))" msgstr "" #. Tag: para #: reference_processing.xml:854 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:860 #, no-c-format msgid "ST_DumpPoints" msgstr "" #. Tag: refpurpose #: reference_processing.xml:861 #, no-c-format msgid "Returns a set of geometry_dump (geom,path) rows of all points that make up a geometry." msgstr "" #. Tag: funcprototype #: reference_processing.xml:866 #, no-c-format msgid "geometry_dump[]ST_DumpPoints geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:875 #, no-c-format msgid "This set-returning function (SRF) returns a set of geometry_dump rows formed by a geometry (geom) and an array of integers (path)." msgstr "" #. Tag: para #: reference_processing.xml:878 #, no-c-format msgid "The geom component of geometry_dump are all the POINTs that make up the supplied geometry" msgstr "" #. Tag: para #: reference_processing.xml:881 #, no-c-format msgid "The path component of geometry_dump (an integer[]) is an index reference enumerating the POINTs of the supplied geometry. For example, if a LINESTRING is supplied, a path of {i} is returned where i is the nth coordinate in the LINESTRING. If a POLYGON is supplied, a path of {i,j} is returned where i is the ring number (1 is outer; inner rings follow) and j enumerates the POINTs (again 1-based index)." msgstr "" #. Tag: para #: reference_processing.xml:890 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: title #: reference_processing.xml:897 #, no-c-format msgid "Classic Explode a Table of LineStrings into nodes" msgstr "" #. Tag: programlisting #: reference_processing.xml:898 #, no-c-format msgid "" "SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode\n" "FROM (SELECT 1 As edge_id\n" " , ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dp\n" " UNION ALL\n" " SELECT 2 As edge_id\n" " , ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp\n" " ) As foo;\n" " edge_id | index | wktnode\n" "---------+-------+--------------\n" " 1 | 1 | POINT(1 2)\n" " 1 | 2 | POINT(3 4)\n" " 1 | 3 | POINT(10 10)\n" " 2 | 1 | POINT(3 5)\n" " 2 | 2 | POINT(5 6)\n" " 2 | 3 | POINT(9 10)" msgstr "" #. Tag: title #: reference_processing.xml:901 #, no-c-format msgid "Standard Geometry Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:911 #, no-c-format msgid "" "SELECT path, ST_AsText(geom) \n" "FROM (\n" " SELECT (ST_DumpPoints(g.geom)).* \n" " FROM\n" " (SELECT \n" " 'GEOMETRYCOLLECTION(\n" " POINT ( 0 1 ), \n" " LINESTRING ( 0 3, 3 4 ),\n" " POLYGON (( 2 0, 2 3, 0 2, 2 0 )),\n" " POLYGON (( 3 0, 3 3, 6 3, 6 0, 3 0 ), \n" " ( 5 1, 4 2, 5 2, 5 1 )),\n" " MULTIPOLYGON (\n" " (( 0 5, 0 8, 4 8, 4 5, 0 5 ), \n" " ( 1 6, 3 6, 2 7, 1 6 )), \n" " (( 5 4, 5 8, 6 7, 5 4 ))\n" " )\n" " )'::geometry AS geom\n" " ) AS g\n" " ) j;\n" " \n" " path | st_astext \n" "-----------+------------\n" " {1,1} | POINT(0 1)\n" " {2,1} | POINT(0 3)\n" " {2,2} | POINT(3 4)\n" " {3,1,1} | POINT(2 0)\n" " {3,1,2} | POINT(2 3)\n" " {3,1,3} | POINT(0 2)\n" " {3,1,4} | POINT(2 0)\n" " {4,1,1} | POINT(3 0)\n" " {4,1,2} | POINT(3 3)\n" " {4,1,3} | POINT(6 3)\n" " {4,1,4} | POINT(6 0)\n" " {4,1,5} | POINT(3 0)\n" " {4,2,1} | POINT(5 1)\n" " {4,2,2} | POINT(4 2)\n" " {4,2,3} | POINT(5 2)\n" " {4,2,4} | POINT(5 1)\n" " {5,1,1,1} | POINT(0 5)\n" " {5,1,1,2} | POINT(0 8)\n" " {5,1,1,3} | POINT(4 8)\n" " {5,1,1,4} | POINT(4 5)\n" " {5,1,1,5} | POINT(0 5)\n" " {5,1,2,1} | POINT(1 6)\n" " {5,1,2,2} | POINT(3 6)\n" " {5,1,2,3} | POINT(2 7)\n" " {5,1,2,4} | POINT(1 6)\n" " {5,2,1,1} | POINT(5 4)\n" " {5,2,1,2} | POINT(5 8)\n" " {5,2,1,3} | POINT(6 7)\n" " {5,2,1,4} | POINT(5 4)\n" "(29 rows)" msgstr "" #. Tag: programlisting #: reference_processing.xml:915 #, no-c-format msgid "" "-- Polyhedral surface cube -- \n" "SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_DumpPoints(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" "((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "---------+--------------\n" " {1,1,1} | POINT(0 0 0)\n" " {1,1,2} | POINT(0 0 1)\n" " {1,1,3} | POINT(0 1 1)\n" " {1,1,4} | POINT(0 1 0)\n" " {1,1,5} | POINT(0 0 0)\n" " {2,1,1} | POINT(0 0 0)\n" " {2,1,2} | POINT(0 1 0)\n" " {2,1,3} | POINT(1 1 0)\n" " {2,1,4} | POINT(1 0 0)\n" " {2,1,5} | POINT(0 0 0)\n" " {3,1,1} | POINT(0 0 0)\n" " {3,1,2} | POINT(1 0 0)\n" " {3,1,3} | POINT(1 0 1)\n" " {3,1,4} | POINT(0 0 1)\n" " {3,1,5} | POINT(0 0 0)\n" " {4,1,1} | POINT(1 1 0)\n" " {4,1,2} | POINT(1 1 1)\n" " {4,1,3} | POINT(1 0 1)\n" " {4,1,4} | POINT(1 0 0)\n" " {4,1,5} | POINT(1 1 0)\n" " {5,1,1} | POINT(0 1 0)\n" " {5,1,2} | POINT(0 1 1)\n" " {5,1,3} | POINT(1 1 1)\n" " {5,1,4} | POINT(1 1 0)\n" " {5,1,5} | POINT(0 1 0)\n" " {6,1,1} | POINT(0 0 1)\n" " {6,1,2} | POINT(1 0 1)\n" " {6,1,3} | POINT(1 1 1)\n" " {6,1,4} | POINT(0 1 1)\n" " {6,1,5} | POINT(0 0 1)\n" "(30 rows)" msgstr "" #. Tag: programlisting #: reference_processing.xml:916 #, no-c-format msgid "" "-- Triangle -- \n" "SELECT (g.gdump).path, ST_AsText((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_DumpPoints( ST_GeomFromEWKT('TRIANGLE ((\n" " 0 0, \n" " 0 9, \n" " 9 0, \n" " 0 0\n" " ))') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "------+------------\n" " {1} | POINT(0 0)\n" " {2} | POINT(0 9)\n" " {3} | POINT(9 0)\n" " {4} | POINT(0 0)" msgstr "" #. Tag: programlisting #: reference_processing.xml:917 #, no-c-format msgid "" "-- TIN -- \n" "SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_DumpPoints( ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "---------+--------------\n" " {1,1,1} | POINT(0 0 0)\n" " {1,1,2} | POINT(0 0 1)\n" " {1,1,3} | POINT(0 1 0)\n" " {1,1,4} | POINT(0 0 0)\n" " {2,1,1} | POINT(0 0 0)\n" " {2,1,2} | POINT(0 1 0)\n" " {2,1,3} | POINT(1 1 0)\n" " {2,1,4} | POINT(0 0 0)\n" "(8 rows)" msgstr "" #. Tag: para #: reference_processing.xml:921 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_processing.xml:926 #, no-c-format msgid "ST_DumpRings" msgstr "" #. Tag: refpurpose #: reference_processing.xml:928 #, no-c-format msgid "Returns a set of geometry_dump rows, representing the exterior and interior rings of a polygon." msgstr "" #. Tag: funcprototype #: reference_processing.xml:934 #, no-c-format msgid "geometry_dump[] ST_DumpRings geometry a_polygon" msgstr "" #. Tag: para #: reference_processing.xml:944 #, no-c-format msgid "This is a set-returning function (SRF). It returns a set of geometry_dump rows, defined as an integer[] and a geometry, aliased \"path\" and \"geom\" respectively. The \"path\" field holds the polygon ring index containing a single integer: 0 for the shell, >0 for holes. The \"geom\" field contains the corresponding ring as a polygon." msgstr "" #. Tag: para #: reference_processing.xml:950 #, no-c-format msgid "Availability: PostGIS 1.1.3. Requires PostgreSQL 7.3 or higher." msgstr "" #. Tag: para #: reference_processing.xml:951 #, no-c-format msgid "This only works for POLYGON geometries. It will not work for MULTIPOLYGONS" msgstr "" #. Tag: programlisting #: reference_processing.xml:959 #, no-c-format msgid "" "SELECT sometable.field1, sometable.field1,\n" " (ST_DumpRings(sometable.the_geom)).geom As the_geom\n" "FROM sometableOfpolys;\n" "\n" "SELECT ST_AsEWKT(geom) As the_geom, path\n" " FROM ST_DumpRings(\n" " ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1,\n" " -8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,\n" " -8150305 5132788 1,-8149064 5133092 1),\n" " (-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))')\n" " ) as foo;\n" " path | the_geom\n" "----------------------------------------------------------------------------------------------------------------\n" " {0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,\n" " | -8148941 5132466 1,-8148924 5132394 1,\n" " | -8148903 5132210 1,-8148930 5131967 1,\n" " | -8148992 5131978 1,-8149237 5132093 1,\n" " | -8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 1,-8149064 5133092 1))\n" " {1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1,\n" " | -8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))" msgstr "" #. Tag: para #: reference_processing.xml:966 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:972 #, no-c-format msgid "ST_FlipCoordinates" msgstr "" #. Tag: refpurpose #: reference_processing.xml:973 #, no-c-format msgid "Returns a version of the given geometry with X and Y axis flipped. Useful for people who have built latitude/longitude features and need to fix them." msgstr "" #. Tag: funcprototype #: reference_processing.xml:981 #, no-c-format msgid "geometry ST_FlipCoordinates geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:990 #, no-c-format msgid "Returns a version of the given geometry with X and Y axis flipped." msgstr "" #. Tag: para #: reference_processing.xml:993 #, no-c-format msgid "&M_support;" msgstr "" #. Tag: title #: reference_processing.xml:1000 #, no-c-format msgid "Example" msgstr "" #. Tag: programlisting #: reference_processing.xml:1001 #, no-c-format msgid "" "" msgstr "" #. Tag: refname #: reference_processing.xml:1008 #, no-c-format msgid "ST_Intersection" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1010 #, no-c-format msgid "(T) Returns a geometry that represents the shared portion of geomA and geomB. The geography implementation does a transform to geometry to do the intersection and then transform back to WGS84." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:1015 #, no-c-format msgid " geometry ST_Intersection geometry geomA geometry geomB geography ST_Intersection geography geogA geography geogB " msgstr "" #. Tag: para #: reference_processing.xml:1042 #, no-c-format msgid "Returns a geometry that represents the point set intersection of the Geometries." msgstr "" #. Tag: para #: reference_processing.xml:1045 #, no-c-format msgid "In other words - that portion of geometry A and geometry B that is shared between the two geometries." msgstr "" #. Tag: para #: reference_processing.xml:1048 #, no-c-format msgid "If the geometries do not share any space (are disjoint), then an empty geometry collection is returned." msgstr "" #. Tag: para #: reference_processing.xml:1050 #, no-c-format msgid "ST_Intersection in conjunction with ST_Intersects is very useful for clipping geometries such as in bounding box, buffer, region queries where you only want to return that portion of a geometry that sits in a country or region of interest." msgstr "" #. Tag: para #: reference_processing.xml:1053 #, no-c-format msgid "Geography: For geography this is really a thin wrapper around the geometry implementation. It first determines the best SRID that fits the bounding box of the 2 geography objects (if geography objects are within one half zone UTM but not same UTM will pick one of those) (favoring UTM or Lambert Azimuthal Equal Area (LAEA) north/south pole, and falling back on mercator in worst case scenario) and then intersection in that best fit planar spatial ref and retransforms back to WGS84 geography." msgstr "" #. Tag: para #: reference_processing.xml:1056 #, no-c-format msgid "Do not call with a GEOMETRYCOLLECTION as an argument" msgstr "" #. Tag: para #: reference_processing.xml:1061 #, no-c-format msgid "Availability: 1.5 support for geography data type was introduced." msgstr "" #. Tag: para #: reference_processing.xml:1064 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.18" msgstr "" #. Tag: programlisting #: reference_processing.xml:1068 #, no-c-format msgid "" "SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry));\n" " st_astext\n" "---------------\n" "GEOMETRYCOLLECTION EMPTY\n" "(1 row)\n" "SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry));\n" " st_astext\n" "---------------\n" "POINT(0 0)\n" "(1 row)\n" "\n" "---Clip all lines (trails) by country (here we assume country geom are POLYGON or MULTIPOLYGONS)\n" "-- NOTE: we are only keeping intersections that result in a LINESTRING or MULTILINESTRING because we don't\n" "-- care about trails that just share a point\n" "-- the dump is needed to expand a geometry collection into individual single MULT* parts\n" "-- the below is fairly generic and will work for polys, etc. by just changing the where clause\n" "SELECT clipped.gid, clipped.f_name, clipped_geom\n" "FROM (SELECT trails.gid, trails.f_name, (ST_Dump(ST_Intersection(country.the_geom, trails.the_geom))).geom As clipped_geom\n" "FROM country\n" " INNER JOIN trails\n" " ON ST_Intersects(country.the_geom, trails.the_geom)) As clipped\n" " WHERE ST_Dimension(clipped.clipped_geom) = 1 ;\n" "\n" "--For polys e.g. polygon landmarks, you can also use the sometimes faster hack that buffering anything by 0.0\n" "-- except a polygon results in an empty geometry collection\n" "--(so a geometry collection containing polys, lines and points)\n" "-- buffered by 0.0 would only leave the polygons and dissolve the collection shell\n" "SELECT poly.gid, ST_Multi(ST_Buffer(\n" " ST_Intersection(country.the_geom, poly.the_geom),\n" " 0.0)\n" " ) As clipped_geom\n" "FROM country\n" " INNER JOIN poly\n" " ON ST_Intersects(country.the_geom, poly.the_geom)\n" " WHERE Not ST_IsEmpty(ST_Buffer(ST_Intersection(country.the_geom, poly.the_geom),0.0));" msgstr "" #. Tag: para #: reference_processing.xml:1072 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_processing.xml:1078 #, no-c-format msgid "ST_LineToCurve" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1080 #, no-c-format msgid "Converts a LINESTRING/POLYGON to a CIRCULARSTRING, CURVED POLYGON" msgstr "" #. Tag: funcprototype #: reference_processing.xml:1085 #, no-c-format msgid "geometry ST_LineToCurve geometry geomANoncircular" msgstr "" #. Tag: para #: reference_processing.xml:1095 #, no-c-format msgid "Converts plain LINESTRING/POLYGONS to CIRCULAR STRINGs and Curved Polygons. Note much fewer points are needed to describe the curved equivalent." msgstr "" #. Tag: programlisting #: reference_processing.xml:1106 #, no-c-format msgid "" "SELECT ST_AsText(ST_LineToCurve(foo.the_geom)) As curvedastext,ST_AsText(foo.the_geom) As non_curvedastext\n" " FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3) As the_geom) As foo;\n" "\n" "curvedatext non_curvedastext\n" "--------------------------------------------------------------------|-----------------------------------------------------------------\n" "CURVEPOLYGON(CIRCULARSTRING(4 3,3.12132034355964 0.878679656440359, | POLYGON((4 3,3.94235584120969 2.41472903395162,3.77163859753386 1.85194970290473,\n" "1 0,-1.12132034355965 5.12132034355963,4 3)) | 3.49440883690764 1.33328930094119,3.12132034355964 0.878679656440359,\n" " | 2.66671069905881 0.505591163092366,2.14805029709527 0.228361402466141,\n" " | 1.58527096604839 0.0576441587903094,1 0,\n" " | 0.414729033951621 0.0576441587903077,-0.148050297095264 0.228361402466137,\n" " | -0.666710699058802 0.505591163092361,-1.12132034355964 0.878679656440353,\n" " | -1.49440883690763 1.33328930094119,-1.77163859753386 1.85194970290472\n" " | --ETC-- ,3.94235584120969 3.58527096604839,4 3))\n" "--3D example\n" "SELECT ST_AsEWKT(ST_LineToCurve(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 8, 5 6 4, 7 8 4, 9 10 4)')));\n" "\n" " st_asewkt\n" "------------------------------------\n" " CIRCULARSTRING(1 2 3,5 6 4,9 10 4)" msgstr "" #. Tag: refname #: reference_processing.xml:1119 #, no-c-format msgid "ST_MakeValid" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1120 #, no-c-format msgid "Attempts to make an invalid geometry valid w/out loosing vertices." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1125 #, no-c-format msgid "geometry ST_MakeValid geometry input" msgstr "" #. Tag: para #: reference_processing.xml:1134 #, no-c-format msgid "The function attempts to create a valid representation of a given invalid geometry without loosing any of the input vertices. Already-valid geometries are returned w/out further intervention." msgstr "" #. Tag: para #: reference_processing.xml:1140 #, no-c-format msgid "Supported inputs are: POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS and GEOMETRYCOLLECTIONS containing any mix of them." msgstr "" #. Tag: para #: reference_processing.xml:1146 #, no-c-format msgid "In case of full or partial dimensional collapses, the output geometry may be a collection of lower-to-equal dimension geometries or a geometry of lower dimension." msgstr "" #. Tag: para #: reference_processing.xml:1152 #, no-c-format msgid "Single polygons may become multi-geometries in case of self-intersections." msgstr "" #. Tag: para #: reference_processing.xml:1156 #, no-c-format msgid "Availability: 2.0.0, requires GEOS-3.3.0" msgstr "" #. Tag: para #: reference_processing.xml:1157 #, no-c-format msgid "Enahnced: 2.0.1, speed improvements requires GEOS-3.3.4" msgstr "" #. Tag: para #: reference_processing.xml:1158 #, no-c-format msgid "Enhanced: 2.1.0 added support for GEOMETRYCOLLECTION and MULTIPOINT." msgstr "" #. Tag: refname #: reference_processing.xml:1175 #, no-c-format msgid "ST_MemUnion" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1177 #, no-c-format msgid "Same as ST_Union, only memory-friendly (uses less memory and more processor time)." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1183 #, no-c-format msgid "geometry ST_MemUnion geometry set geomfield" msgstr "" #. Tag: para #: reference_processing.xml:1194 #, no-c-format msgid "Some useful description here." msgstr "" #. Tag: para #: reference_processing.xml:1198 #, no-c-format msgid "Same as ST_Union, only memory-friendly (uses less memory and more processor time). This aggregate function works by unioning the geometries one at a time to previous result as opposed to ST_Union aggregate which first creates an array and then unions" msgstr "" #. Tag: programlisting #: reference_processing.xml:1210 #, no-c-format msgid "See ST_Union" msgstr "" #. Tag: refname #: reference_processing.xml:1223 #, no-c-format msgid "ST_MinimumBoundingCircle" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1224 #, no-c-format msgid "Returns the smallest circle polygon that can fully contain a geometry. Default uses 48 segments per quarter circle." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1230 #, no-c-format msgid "geometry ST_MinimumBoundingCircle geometry geomA integer num_segs_per_qt_circ=48" msgstr "" #. Tag: para #: reference_processing.xml:1240 #, no-c-format msgid "Returns the smallest circle polygon that can fully contain a geometry." msgstr "" #. Tag: para #: reference_processing.xml:1241 #, no-c-format msgid "The circle is approximated by a polygon with a default of 48 segments per quarter circle. This number can be increased with little performance penalty to obtain a more accurate result." msgstr "" #. Tag: para #: reference_processing.xml:1243 #, no-c-format msgid "It is often used with MULTI and Geometry Collections. Although it is not an aggregate - you can use it in conjunction with ST_Collect to get the minimum bounding circle of a set of geometries. ST_MinimumBoundingCircle(ST_Collect(somepointfield))." msgstr "" #. Tag: para #: reference_processing.xml:1248 #, no-c-format msgid "The ratio of the area of a polygon divided by the area of its Minimum Bounding Circle is often referred to as the Roeck test." msgstr "" #. Tag: para #: reference_processing.xml:1250 #, no-c-format msgid "Availability: 1.4.0 - requires GEOS" msgstr "" #. Tag: programlisting #: reference_processing.xml:1257 #, no-c-format msgid "" "SELECT d.disease_type,\n" " ST_MinimumBoundingCircle(ST_Collect(d.the_geom)) As the_geom\n" " FROM disease_obs As d\n" " GROUP BY d.disease_type;" msgstr "" #. Tag: para #: reference_processing.xml:1263 #, no-c-format msgid "Minimum bounding circle of a point and linestring. Using 8 segs to approximate a quarter circle" msgstr "" #. Tag: programlisting #: reference_processing.xml:1266 #, no-c-format msgid "" "SELECT ST_AsText(ST_MinimumBoundingCircle(\n" " ST_Collect(\n" " ST_GeomFromEWKT('LINESTRING(55 75,125 150)'),\n" " ST_Point(20, 80)), 8\n" " )) As wktmbc;\n" "wktmbc\n" "-----------\n" "POLYGON((135.59714732062 115,134.384753327498 102.690357210921,130.79416296937 90.8537670908995,124.963360620072 79.9451031602111,117.116420743937 70.3835792560632,107.554896839789 62.5366393799277,96.6462329091006 56.70583703063,84.8096427890789 53.115246672502,72.5000000000001 51.9028526793802,60.1903572109213 53.1152466725019,48.3537670908996 56.7058370306299,37.4451031602112 62.5366393799276,27.8835792560632 70.383579256063,20.0366393799278 79.9451031602109,14.20583703063 90.8537670908993,10.615246672502 102.690357210921,9.40285267938019 115,10.6152466725019 127.309642789079,14.2058370306299 139.1462329091,20.0366393799275 150.054896839789,27.883579256063 159.616420743937,\n" "37.4451031602108 167.463360620072,48.3537670908992 173.29416296937,60.190357210921 176.884753327498,\n" "72.4999999999998 178.09714732062,84.8096427890786 176.884753327498,96.6462329091003 173.29416296937,107.554896839789 167.463360620072,\n" "117.116420743937 159.616420743937,124.963360620072 150.054896839789,130.79416296937 139.146232909101,134.384753327498 127.309642789079,135.59714732062 115))" msgstr "" #. Tag: para #: reference_processing.xml:1270 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:1276 #, no-c-format msgid "ST_Polygonize" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1278 #, no-c-format msgid "Aggregate. Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:1284 #, no-c-format msgid " geometry ST_Polygonize geometry set geomfield geometry ST_Polygonize geometry[] geom_array " msgstr "" #. Tag: para #: reference_processing.xml:1300 #, no-c-format msgid "Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries." msgstr "" #. Tag: para #: reference_processing.xml:1305 #, no-c-format msgid "Geometry Collections are often difficult to deal with with third party tools, so use ST_Polygonize in conjunction with to dump the polygons out into individual polygons." msgstr "" #. Tag: para #: reference_processing.xml:1313 #, no-c-format msgid "Availability: 1.0.0RC1 - requires GEOS >= 2.1.0." msgstr "" #. Tag: title #: reference_processing.xml:1317 #, no-c-format msgid "Examples: Polygonizing single linestrings" msgstr "" #. Tag: programlisting #: reference_processing.xml:1318 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_Polygonize(the_geom_4269)) As geomtextrep\n" "FROM (SELECT the_geom_4269 FROM ma.suffolk_edges ORDER BY tlid LIMIT 45) As foo;\n" "\n" "geomtextrep\n" "-------------------------------------\n" " SRID=4269;GEOMETRYCOLLECTION(POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,-71.040878 42.285678)),\n" " POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358,-71.171794 42.354971,-71.170511 42.354855,\n" " -71.17112 42.354238,-71.17166 42.353675)))\n" "(1 row)\n" "\n" "--Use ST_Dump to dump out the polygonize geoms into individual polygons\n" "SELECT ST_AsEWKT((ST_Dump(foofoo.polycoll)).geom) As geomtextrep\n" "FROM (SELECT ST_Polygonize(the_geom_4269) As polycoll\n" " FROM (SELECT the_geom_4269 FROM ma.suffolk_edges\n" " ORDER BY tlid LIMIT 45) As foo) As foofoo;\n" "\n" "geomtextrep\n" "------------------------\n" " SRID=4269;POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,\n" "-71.040878 42.285678))\n" " SRID=4269;POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358\n" ",-71.171794 42.354971,-71.170511 42.354855,-71.17112 42.354238,-71.17166 42.353675))\n" "(2 rows)" msgstr "" #. Tag: refname #: reference_processing.xml:1332 #, no-c-format msgid "ST_Node" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1334 #, no-c-format msgid "Node a set of linestrings." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1341 #, no-c-format msgid "geometry ST_Node geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:1352 #, no-c-format msgid "Fully node a set of linestrings using the least possible number of nodes while preserving all of the input ones." msgstr "" #. Tag: para #: reference_processing.xml:1359 reference_processing.xml:2103 #, no-c-format msgid "Availability: 2.0.0 - requires GEOS >= 3.3.0." msgstr "" #. Tag: para #: reference_processing.xml:1361 #, no-c-format msgid "Due to a bug in GEOS up to 3.3.1 this function fails to node self-intersecting lines. This is fixed with GEOS 3.3.2 or higher." msgstr "" #. Tag: programlisting #: reference_processing.xml:1368 #, no-c-format msgid "" "SELECT ST_AsEWKT(\n" " ST_Node('LINESTRINGZ(0 0 0, 10 10 10, 0 10 5, 10 0 3)'::geometry)\n" " ) As output;\n" "output\n" "-----------\n" "MULTILINESTRING((0 0 0,5 5 4.5),(5 5 4.5,10 10 10,0 10 5,5 5 4.5),(5 5 4.5,10 0 3))" msgstr "" #. Tag: refname #: reference_processing.xml:1383 #, no-c-format msgid "ST_OffsetCurve" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1385 #, no-c-format msgid "Return an offset line at a given distance and side from an input line. Useful for computing parallel lines about a center line" msgstr "" #. Tag: funcprototype #: reference_processing.xml:1393 #, no-c-format msgid "geometry ST_OffsetCurve geometry line float signed_distance text style_parameters=''" msgstr "" #. Tag: para #: reference_processing.xml:1406 #, no-c-format msgid "Return an offset line at a given distance and side from an input line. All points of the returned geometries are not further than the given distance from the input geometry." msgstr "" #. Tag: para #: reference_processing.xml:1412 #, no-c-format msgid "For positive distance the offset will be at the left side of the input line and retain the same direction. For a negative distance it'll be at the right side and in the opposite direction." msgstr "" #. Tag: para #: reference_processing.xml:1418 #, no-c-format msgid "Availability: 2.0 - requires GEOS >= 3.2, improved with GEOS >= 3.3" msgstr "" #. Tag: para #: reference_processing.xml:1422 #, no-c-format msgid "The optional third parameter allows specifying a list of blank-separated key=value pairs to tweak operations as follows:" msgstr "" #. Tag: para #: reference_processing.xml:1430 #, no-c-format msgid "'join=round|mitre|bevel' : join style (defaults to \"round\"). 'miter' is also accepted as a synonym for 'mitre'." msgstr "" #. Tag: para #: reference_processing.xml:1433 #, no-c-format msgid "'mitre_limit=#.#' : mitre ratio limit (only affects mitred join style). 'miter_limit' is also accepted as a synonym for 'mitre_limit'." msgstr "" #. Tag: para #: reference_processing.xml:1438 #, no-c-format msgid "Units of distance are measured in units of the spatial reference system." msgstr "" #. Tag: para #: reference_processing.xml:1442 #, no-c-format msgid "The inputs can only be LINESTRINGS." msgstr "" #. Tag: para #: reference_processing.xml:1446 #, no-c-format msgid "This function ignores the third dimension (z) and will always give a 2-d result even when presented with a 3d-geometry." msgstr "" #. Tag: para #: reference_processing.xml:1454 #, no-c-format msgid "Compute an open buffer around roads" msgstr "" #. Tag: programlisting #: reference_processing.xml:1455 #, no-c-format msgid "" "SELECT ST_Union(\n" " ST_OffsetCurve(f.the_geom, f.width/2, 'quad_segs=4 join=round'),\n" " ST_OffsetCurve(f.the_geom, -f.width/2, 'quad_segs=4 join=round')\n" ") as track\n" "FROM someroadstable;" msgstr "" #. Tag: para #: reference_processing.xml:1465 #, no-c-format msgid "15, 'quad_segs=4 join=round' original line and its offset 15 units." msgstr "" #. Tag: programlisting #: reference_processing.xml:1469 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)'),\n" " 15, 'quad_segs=4 join=round'));\n" "--output --\n" "LINESTRING(164 1,18 1,12.2597485145237 2.1418070123307,\n" " 7.39339828220179 5.39339828220179,\n" " 5.39339828220179 7.39339828220179,\n" " 2.14180701233067 12.2597485145237,1 18,1 195)" msgstr "" #. Tag: para #: reference_processing.xml:1476 #, no-c-format msgid "-15, 'quad_segs=4 join=round' original line and its offset -15 units" msgstr "" #. Tag: programlisting #: reference_processing.xml:1480 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(geom,\n" " -15, 'quad_segs=4 join=round')) As notsocurvy\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- notsocurvy --\n" "LINESTRING(31 195,31 31,164 31)" msgstr "" #. Tag: para #: reference_processing.xml:1489 #, no-c-format msgid "double-offset to get more curvy, note the first reverses direction, so -30 + 15 = -15" msgstr "" #. Tag: programlisting #: reference_processing.xml:1492 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(ST_OffsetCurve(geom,\n" " -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')) As morecurvy\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- morecurvy --\n" "LINESTRING(164 31,46 31,40.2597485145236 32.1418070123307,\n" "35.3933982822018 35.3933982822018,\n" "32.1418070123307 40.2597485145237,31 46,31 195)" msgstr "" #. Tag: para #: reference_processing.xml:1499 #, no-c-format msgid "double-offset to get more curvy,combined with regular offset 15 to get parallel lines. Overlaid with original." msgstr "" #. Tag: programlisting #: reference_processing.xml:1502 #, no-c-format msgid "" "SELECT ST_AsText(ST_Collect(\n" " ST_OffsetCurve(geom, 15, 'quad_segs=4 join=round'), \n" " ST_OffsetCurve(ST_OffsetCurve(geom,\n" " -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')\n" " )\n" ") As parallel_curves\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- parallel curves --\n" "MULTILINESTRING((164 1,18 1,12.2597485145237 2.1418070123307,\n" "7.39339828220179 5.39339828220179,5.39339828220179 7.39339828220179,\n" "2.14180701233067 12.2597485145237,1 18,1 195),\n" "(164 31,46 31,40.2597485145236 32.1418070123307,35.3933982822018 35.3933982822018,\n" "32.1418070123307 40.2597485145237,31 46,31 195))" msgstr "" #. Tag: para #: reference_processing.xml:1511 #, no-c-format msgid "15, 'quad_segs=4 join=bevel' shown with original line" msgstr "" #. Tag: programlisting #: reference_processing.xml:1514 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)'), \n" " 15, 'quad_segs=4 join=bevel'));\n" "-- output --\n" "LINESTRING(164 1,18 1,7.39339828220179 5.39339828220179,\n" " 5.39339828220179 7.39339828220179,1 18,1 195)" msgstr "" #. Tag: para #: reference_processing.xml:1522 #, no-c-format msgid "15,-15 collected, join=mitre mitre_limit=2.1" msgstr "" #. Tag: programlisting #: reference_processing.xml:1525 #, no-c-format msgid "" "SELECT ST_AsText(ST_Collect(\n" " ST_OffsetCurve(geom, 15, 'quad_segs=4 join=mitre mitre_limit=2.2'),\n" " ST_OffsetCurve(geom, -15, 'quad_segs=4 join=mitre mitre_limit=2.2')\n" " ) )\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- output --\n" "MULTILINESTRING((164 1,11.7867965644036 1,1 11.7867965644036,1 195),\n" " (31 195,31 31,164 31))" msgstr "" #. Tag: refname #: reference_processing.xml:1542 #, no-c-format msgid "ST_RemoveRepeatedPoints" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1543 #, no-c-format msgid "Returns a version of the given geometry with duplicated points removed." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1549 #, no-c-format msgid "geometry ST_RemoveRepeatedPoints geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:1558 #, no-c-format msgid "Returns a version of the given geometry with duplicated points removed. Will actually do something only with (multi)lines, (multi)polygons and multipoints but you can safely call it with any kind of geometry. Since simplification occurs on a object-by-object basis you can also feed a GeometryCollection to this function." msgstr "" #. Tag: refname #: reference_processing.xml:1578 #, no-c-format msgid "ST_SharedPaths" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1579 #, no-c-format msgid "Returns a collection containing paths shared by the two input linestrings/multilinestrings." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1584 #, no-c-format msgid "geometry ST_SharedPaths geometry lineal1 geometry lineal2" msgstr "" #. Tag: para #: reference_processing.xml:1594 #, no-c-format msgid "Returns a collection containing paths shared by the two input geometries. Those going in the same direction are in the first element of the collection, those going in the opposite direction are in the second element. The paths themselves are given in the direction of the first geometry." msgstr "" #. Tag: para #: reference_processing.xml:1599 #, no-c-format msgid "Availability: 2.0.0 requires GEOS >= 3.3.0." msgstr "" #. Tag: title #: reference_processing.xml:1602 #, no-c-format msgid "Examples: Finding shared paths" msgstr "" #. Tag: para #: reference_processing.xml:1612 #, no-c-format msgid "A multilinestring and a linestring" msgstr "" #. Tag: para #: reference_processing.xml:1623 #, no-c-format msgid "The shared path of multilinestring and linestring overlaid with original geometries." msgstr "" #. Tag: programlisting #: reference_processing.xml:1626 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_SharedPaths(\n" " ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),\n" " (51 150,101 150,76 175,51 150))'),\n" " ST_GeomFromText('LINESTRING(151 100,126 156.25,126 125,90 161, 76 175)')\n" " )\n" " ) As wkt\n" "\n" " wkt\n" "-------------------------------------------------------------\n" "GEOMETRYCOLLECTION(MULTILINESTRING((126 156.25,126 125),\n" " (101 150,90 161),(90 161,76 175)),MULTILINESTRING EMPTY)" msgstr "" #. Tag: programlisting #: reference_processing.xml:1632 #, no-c-format msgid "" "-- same example but linestring orientation flipped\n" "SELECT ST_AsText(\n" " ST_SharedPaths(\n" " ST_GeomFromText('LINESTRING(76 175,90 161,126 125,126 156.25,151 100)'),\n" " ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),\n" " (51 150,101 150,76 175,51 150))')\n" " )\n" " ) As wkt\n" "\n" " wkt\n" "-------------------------------------------------------------\n" "GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,\n" "MULTILINESTRING((76 175,90 161),(90 161,101 150),(126 125,126 156.25)))" msgstr "" #. Tag: para #: reference_processing.xml:1642 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_processing.xml:1652 #, no-c-format msgid "ST_Shift_Longitude" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1654 #, no-c-format msgid "Reads every point/vertex in every component of every feature in a geometry, and if the longitude coordinate is <0, adds 360 to it. The result would be a 0-360 version of the data to be plotted in a 180 centric map" msgstr "" #. Tag: funcprototype #: reference_processing.xml:1662 #, no-c-format msgid "geometry ST_Shift_Longitude geometry geomA" msgstr "" #. Tag: para #: reference_processing.xml:1672 #, no-c-format msgid "Reads every point/vertex in every component of every feature in a geometry, and if the longitude coordinate is <0, adds 360 to it. The result would be a 0-360 version of the data to be plotted in a 180 centric map" msgstr "" #. Tag: para #: reference_processing.xml:1676 #, no-c-format msgid "This is only useful for data in long lat e.g. 4326 (WGS 84 long lat)" msgstr "" #. Tag: para #: reference_processing.xml:1678 #, no-c-format msgid "Pre-1.3.4 bug prevented this from working for MULTIPOINT. 1.3.4+ works with MULTIPOINT as well." msgstr "" #. Tag: para #: reference_processing.xml:1683 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced." msgstr "" #. Tag: programlisting #: reference_processing.xml:1692 #, no-c-format msgid "" "--3d points\n" "SELECT ST_AsEWKT(ST_Shift_Longitude(ST_GeomFromEWKT('SRID=4326;POINT(-118.58 38.38 10)'))) As geomA,\n" " ST_AsEWKT(ST_Shift_Longitude(ST_GeomFromEWKT('SRID=4326;POINT(241.42 38.38 10)'))) As geomb\n" "geomA geomB\n" "---------- -----------\n" "SRID=4326;POINT(241.42 38.38 10) SRID=4326;POINT(-118.58 38.38 10)\n" "\n" "--regular line string\n" "SELECT ST_AsText(ST_Shift_Longitude(ST_GeomFromText('LINESTRING(-118.58 38.38, -118.20 38.45)')))\n" "\n" "st_astext\n" "----------\n" "LINESTRING(241.42 38.38,241.8 38.45)" msgstr "" #. Tag: para #: reference_processing.xml:1698 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_processing.xml:1704 #, no-c-format msgid "ST_Simplify" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1705 #, no-c-format msgid "Returns a \"simplified\" version of the given geometry using the Douglas-Peucker algorithm." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1711 #, no-c-format msgid "geometry ST_Simplify geometry geomA float tolerance" msgstr "" #. Tag: para #: reference_processing.xml:1721 #, no-c-format msgid "Returns a \"simplified\" version of the given geometry using the Douglas-Peucker algorithm. Will actually do something only with (multi)lines and (multi)polygons but you can safely call it with any kind of geometry. Since simplification occurs on a object-by-object basis you can also feed a GeometryCollection to this function." msgstr "" #. Tag: para #: reference_processing.xml:1728 #, no-c-format msgid "Note that returned geometry might loose its simplicity (see )" msgstr "" #. Tag: para #: reference_processing.xml:1730 #, no-c-format msgid "Note topology may not be preserved and may result in invalid geometries. Use (see ) to preserve topology." msgstr "" #. Tag: para #: reference_processing.xml:1733 #, no-c-format msgid "Availability: 1.2.2" msgstr "" #. Tag: para #: reference_processing.xml:1738 #, no-c-format msgid "A circle simplified too much becomes a triangle, medium an octagon," msgstr "" #. Tag: programlisting #: reference_processing.xml:1739 #, no-c-format msgid "" "SELECT ST_Npoints(the_geom) As np_before, ST_NPoints(ST_Simplify(the_geom,0.1)) As np01_notbadcircle, ST_NPoints(ST_Simplify(the_geom,0.5)) As np05_notquitecircle,\n" "ST_NPoints(ST_Simplify(the_geom,1)) As np1_octagon, ST_NPoints(ST_Simplify(the_geom,10)) As np10_triangle,\n" "(ST_Simplify(the_geom,100) is null) As np100_geometrygoesaway\n" "FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As the_geom) As foo;\n" "-result\n" " np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_triangle | np100_geometrygoesaway\n" "-----------+-------------------+---------------------+-------------+---------------+------------------------\n" " 49 | 33 | 17 | 9 | 4 | t" msgstr "" #. Tag: para #: reference_processing.xml:1743 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:1749 #, no-c-format msgid "ST_SimplifyPreserveTopology" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1750 #, no-c-format msgid "Returns a \"simplified\" version of the given geometry using the Douglas-Peucker algorithm. Will avoid creating derived geometries (polygons in particular) that are invalid." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1757 #, no-c-format msgid "geometry ST_SimplifyPreserveTopology geometry geomA float tolerance" msgstr "" #. Tag: para #: reference_processing.xml:1767 #, no-c-format msgid "Returns a \"simplified\" version of the given geometry using the Douglas-Peucker algorithm. Will avoid creating derived geometries (polygons in particular) that are invalid. Will actually do something only with (multi)lines and (multi)polygons but you can safely call it with any kind of geometry. Since simplification occurs on a object-by-object basis you can also feed a GeometryCollection to this function." msgstr "" #. Tag: para #: reference_processing.xml:1776 #, no-c-format msgid "Requires GEOS 3.0.0+" msgstr "" #. Tag: para #: reference_processing.xml:1777 #, no-c-format msgid "Availability: 1.3.3" msgstr "" #. Tag: para #: reference_processing.xml:1782 #, no-c-format msgid "Same example as Simplify, but we see Preserve Topology prevents oversimplification. The circle can at most become a square." msgstr "" #. Tag: programlisting #: reference_processing.xml:1783 #, no-c-format msgid "" "SELECT ST_Npoints(the_geom) As np_before, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,0.1)) As np01_notbadcircle, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,0.5)) As np05_notquitecircle,\n" "ST_NPoints(ST_SimplifyPreserveTopology(the_geom,1)) As np1_octagon, ST_NPoints(ST_SimplifyPreserveTopology(the_geom,10)) As np10_square,\n" "ST_NPoints(ST_SimplifyPreserveTopology(the_geom,100)) As np100_stillsquare\n" "FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As the_geom) As foo;\n" "\n" "--result--\n" " np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_square | np100_stillsquare\n" "-----------+-------------------+---------------------+-------------+---------------+-------------------\n" " 49 | 33 | 17 | 9 | 5 | 5" msgstr "" #. Tag: refname #: reference_processing.xml:1793 #, no-c-format msgid "ST_Split" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1794 #, no-c-format msgid "Returns a collection of geometries resulting by splitting a geometry." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1799 #, no-c-format msgid "geometry ST_Split geometry input geometry blade" msgstr "" #. Tag: para #: reference_processing.xml:1809 #, no-c-format msgid "The function supports splitting a line by point, a line by line, a polygon by line. The returned geometry is always a collection." msgstr "" #. Tag: para #: reference_processing.xml:1813 #, no-c-format msgid "Think of this function as the opposite of ST_Union. Theoretically applying ST_Union to the elements of the returned collection should always yield the original geometry." msgstr "" #. Tag: para #: reference_processing.xml:1824 #, no-c-format msgid "Polygon Cut by Line" msgstr "" #. Tag: para #: reference_processing.xml:1836 reference_processing.xml:1870 #, no-c-format msgid "Before Split" msgstr "" #. Tag: para #: reference_processing.xml:1848 reference_processing.xml:1882 #, no-c-format msgid "After split" msgstr "" #. Tag: programlisting #: reference_processing.xml:1857 #, no-c-format msgid "" "-- this creates a geometry collection consisting of the 2 halves of the polygon\n" "-- this is similar to the example we demonstrated in ST_BuildArea\n" "SELECT ST_Split(circle, line)\n" "FROM (SELECT \n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;\n" " \n" "-- result --\n" " GEOMETRYCOLLECTION(POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..), POLYGON(..)))\n" " \n" "-- To convert to individual polygons, you can use ST_Dump or ST_GeometryN\n" "SELECT ST_AsText((ST_Dump(ST_Split(circle, line))).geom) As wkt\n" "FROM (SELECT \n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;\n" " \n" "-- result --\n" "wkt\n" "---------------\n" "POLYGON((150 90,149.039264020162 80.2454838991936,..))\n" "POLYGON((60.1371179574584 60.1371179574584,58.4265193848728 62.2214883490198,53.8060233744357 ..))" msgstr "" #. Tag: para #: reference_processing.xml:1858 #, no-c-format msgid "Multilinestring Cut by point" msgstr "" #. Tag: programlisting #: reference_processing.xml:1891 #, no-c-format msgid "" "SELECT ST_AsText(ST_Split(mline, pt)) As wktcut\n" " FROM (SELECT \n" " ST_GeomFromText('MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))') As mline,\n" " ST_Point(30,30) As pt) As foo;\n" " \n" "wktcut\n" "------\n" "GEOMETRYCOLLECTION(\n" " LINESTRING(10 10,30 30),\n" " LINESTRING(30 30,190 190),\n" " LINESTRING(15 15,30 30),\n" " LINESTRING(30 30,100 90)\n" ")" msgstr "" #. Tag: para #: reference_processing.xml:1895 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:1901 #, no-c-format msgid "ST_SymDifference" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1903 #, no-c-format msgid "Returns a geometry that represents the portions of A and B that do not intersect. It is called a symmetric difference because ST_SymDifference(A,B) = ST_SymDifference(B,A)." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1910 #, no-c-format msgid "geometry ST_SymDifference geometry geomA geometry geomB" msgstr "" #. Tag: para #: reference_processing.xml:1921 #, no-c-format msgid "Returns a geometry that represents the portions of A and B that do not intersect. It is called a symmetric difference because ST_SymDifference(A,B) = ST_SymDifference(B,A). One can think of this as ST_Union(geomA,geomB) - ST_Intersection(A,B)." msgstr "" #. Tag: para #: reference_processing.xml:1931 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.21" msgstr "" #. Tag: para #: reference_processing.xml:1951 #, no-c-format msgid "The original linestrings shown together" msgstr "" #. Tag: para #: reference_processing.xml:1963 #, no-c-format msgid "The symmetric difference of the two linestrings" msgstr "" #. Tag: programlisting #: reference_processing.xml:1972 #, no-c-format msgid "" "--Safe for 2d - symmetric difference of 2 linestrings\n" "SELECT ST_AsText(\n" " ST_SymDifference(\n" " ST_GeomFromText('LINESTRING(50 100, 50 200)'),\n" " ST_GeomFromText('LINESTRING(50 50, 50 150)')\n" " )\n" ");\n" "\n" "st_astext\n" "---------\n" "MULTILINESTRING((50 150,50 200),(50 50,50 100))" msgstr "" #. Tag: programlisting #: reference_processing.xml:1974 #, no-c-format msgid "" "--When used in 3d doesn't quite do the right thing\n" "SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 2)'),\n" " ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)')))\n" "\n" "st_astext\n" "------------\n" "MULTILINESTRING((1 3 2.75,1 4 2),(1 1 3,1 2 2.25))" msgstr "" #. Tag: para #: reference_processing.xml:1981 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_processing.xml:1988 #, no-c-format msgid "ST_Union" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1989 #, no-c-format msgid "Returns a geometry that represents the point set union of the Geometries." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:1994 #, no-c-format msgid " geometry ST_Union geometry set g1field geometry ST_Union geometry g1 geometry g2 geometry ST_Union geometry[] g1_array " msgstr "" #. Tag: para #: reference_processing.xml:2013 #, no-c-format msgid "Output type can be a MULTI*, single geometry, or Geometry Collection. Comes in 2 variants. Variant 1 unions 2 geometries resulting in a new geometry with no intersecting regions. Variant 2 is an aggregate function that takes a set of geometries and unions them into a single ST_Geometry resulting in no intersecting regions." msgstr "" #. Tag: para #: reference_processing.xml:2017 #, no-c-format msgid "Aggregate version: This function returns a MULTI geometry or NON-MULTI geometry from a set of geometries. The ST_Union() function is an \"aggregate\" function in the terminology of PostgreSQL. That means that it operates on rows of data, in the same way the SUM() and AVG() functions do." msgstr "" #. Tag: para #: reference_processing.xml:2023 #, no-c-format msgid "Non-Aggregate version: This function returns a geometry being a union of two input geometries. Output type can be a MULTI*, NON-MULTI or GEOMETRYCOLLECTION." msgstr "" #. Tag: para #: reference_processing.xml:2027 #, no-c-format msgid "ST_Collect and ST_Union are often interchangeable. ST_Union is in general orders of magnitude slower than ST_Collect because it tries to dissolve boundaries and reorder geometries to ensure that a constructed Multi* doesn't have intersecting regions." msgstr "" #. Tag: para #: reference_processing.xml:2033 #, no-c-format msgid "NOTE: this function was formerly called GeomUnion(), which was renamed from \"Union\" because UNION is an SQL reserved word." msgstr "" #. Tag: para #: reference_processing.xml:2036 #, no-c-format msgid "Availability: 1.4.0 - ST_Union was enhanced. ST_Union(geomarray) was introduced and also faster aggregate collection in PostgreSQL. If you are using GEOS 3.1.0+ ST_Union will use the faster Cascaded Union algorithm described in http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html" msgstr "" #. Tag: para #: reference_processing.xml:2042 #, no-c-format msgid "Aggregate version is not explicitly defined in OGC SPEC." msgstr "" #. Tag: para #: reference_processing.xml:2043 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.19 the z-index (elevation) when polygons are involved." msgstr "" #. Tag: para #: reference_processing.xml:2049 #, no-c-format msgid "Aggregate example" msgstr "" #. Tag: programlisting #: reference_processing.xml:2050 #, no-c-format msgid "" "SELECT stusps,\n" " ST_Multi(ST_Union(f.the_geom)) as singlegeom\n" " FROM sometable As f\n" "GROUP BY stusps" msgstr "" #. Tag: programlisting #: reference_processing.xml:2052 #, no-c-format msgid "" "SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(-2 3)') ) )\n" "\n" "st_astext\n" "----------\n" "MULTIPOINT(-2 3,1 2)\n" "\n" "\n" "SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(1 2)') ) );\n" "st_astext\n" "----------\n" "POINT(1 2)\n" "\n" "--3d example - sort of supports 3d (and with mixed dimensions!)\n" "SELECT ST_AsEWKT(st_union(the_geom))\n" "FROM\n" "(SELECT ST_GeomFromEWKT('POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3,\n" "-7 4.2))') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom\n" "UNION ALL\n" " SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_geom ) as foo;\n" "\n" "st_asewkt\n" "---------\n" "GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5)));\n" "\n" "--3d example not mixing dimensions\n" "SELECT ST_AsEWKT(st_union(the_geom))\n" "FROM\n" "(SELECT ST_GeomFromEWKT('POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,\n" "-7 4.2 2))') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom\n" "UNION ALL\n" " SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_geom ) as foo;\n" "\n" "st_asewkt\n" "---------\n" "GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2)))\n" "\n" "--Examples using new Array construct\n" "SELECT ST_Union(ARRAY(SELECT the_geom FROM sometable));\n" "\n" "SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),\n" " ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion;\n" "\n" "--wktunion---\n" "MULTILINESTRING((3 4,4 5),(1 2,3 4))" msgstr "" #. Tag: refname #: reference_processing.xml:2065 #, no-c-format msgid "ST_UnaryUnion" msgstr "" #. Tag: refpurpose #: reference_processing.xml:2067 #, no-c-format msgid "Like ST_Union, but working at the geometry component level." msgstr "" #. Tag: funcprototype #: reference_processing.xml:2072 #, no-c-format msgid "geometry ST_UnaryUnion geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:2083 #, no-c-format msgid "Unlike ST_Union, ST_UnaryUnion does dissolve boundaries between components of a multipolygon (invalid) and does perform union between the components of a geometrycollection. Each components of the input geometry is assumed to be valid, so you won't get a valid multipolygon out of a bow-tie polygon (invalid)." msgstr "" #. Tag: para #: reference_processing.xml:2093 #, no-c-format msgid "You may use this function to node a set of linestrings. You may mix ST_UnaryUnion with ST_Collect to fine-tune how many geometries at once you want to dissolve to be nice on both memory size and CPU time, finding the balance between ST_Union and ST_MemUnion." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_constructor.xml.pot0000644000000000000000000025435012025614072024677 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_constructor.xml:3 #, no-c-format msgid "Geometry Constructors" msgstr "" #. Tag: refname #: reference_constructor.xml:6 #, no-c-format msgid "ST_BdPolyFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:8 #, no-c-format msgid "Construct a Polygon given an arbitrary collection of closed linestrings as a MultiLineString Well-Known text representation." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:14 #, no-c-format msgid "geometry ST_BdPolyFromText text WKT integer srid" msgstr "" #. Tag: title #: reference_constructor.xml:23 reference_constructor.xml:72 reference_constructor.xml:119 reference_constructor.xml:148 reference_constructor.xml:175 reference_constructor.xml:227 reference_constructor.xml:278 reference_constructor.xml:326 reference_constructor.xml:369 reference_constructor.xml:400 reference_constructor.xml:474 reference_constructor.xml:513 reference_constructor.xml:564 reference_constructor.xml:596 reference_constructor.xml:649 reference_constructor.xml:695 reference_constructor.xml:740 reference_constructor.xml:799 reference_constructor.xml:867 reference_constructor.xml:927 reference_constructor.xml:966 reference_constructor.xml:1023 reference_constructor.xml:1094 reference_constructor.xml:1139 reference_constructor.xml:1220 reference_constructor.xml:1263 reference_constructor.xml:1305 reference_constructor.xml:1366 reference_constructor.xml:1427 reference_constructor.xml:1481 reference_constructor.xml:1535 reference_constructor.xml:1591 reference_constructor.xml:1640 reference_constructor.xml:1694 reference_constructor.xml:1737 reference_constructor.xml:1760 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_constructor.xml:25 #, no-c-format msgid "Construct a Polygon given an arbitrary collection of closed linestrings as a MultiLineString Well-Known text representation." msgstr "" #. Tag: para #: reference_constructor.xml:30 #, no-c-format msgid "Throws an error if WKT is not a MULTILINESTRING. Throws an error if output is a MULTIPOLYGON; use ST_BdMPolyFromText in that case, or see ST_BuildArea() for a postgis-specific approach." msgstr "" #. Tag: para #: reference_constructor.xml:36 reference_constructor.xml:88 reference_constructor.xml:241 reference_constructor.xml:756 reference_constructor.xml:824 reference_constructor.xml:890 reference_constructor.xml:1321 reference_constructor.xml:1443 reference_constructor.xml:1705 #, no-c-format msgid "&sfs_compliant; s3.2.6.2" msgstr "" #. Tag: para #: reference_constructor.xml:38 reference_constructor.xml:90 #, no-c-format msgid "Availability: 1.1.0 - requires GEOS >= 2.1.0." msgstr "" #. Tag: title #: reference_constructor.xml:42 reference_constructor.xml:94 reference_constructor.xml:125 reference_constructor.xml:190 reference_constructor.xml:248 reference_constructor.xml:292 reference_constructor.xml:340 reference_constructor.xml:485 reference_constructor.xml:617 reference_constructor.xml:665 reference_constructor.xml:703 reference_constructor.xml:763 reference_constructor.xml:831 reference_constructor.xml:895 reference_constructor.xml:935 reference_constructor.xml:982 reference_constructor.xml:1235 reference_constructor.xml:1270 reference_constructor.xml:1328 reference_constructor.xml:1389 reference_constructor.xml:1450 reference_constructor.xml:1559 reference_constructor.xml:1609 reference_constructor.xml:1658 reference_constructor.xml:1710 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_constructor.xml:44 reference_constructor.xml:96 #, no-c-format msgid "Forthcoming" msgstr "" #. Tag: title #: reference_constructor.xml:48 reference_constructor.xml:100 reference_constructor.xml:129 reference_constructor.xml:153 reference_constructor.xml:195 reference_constructor.xml:255 reference_constructor.xml:305 reference_constructor.xml:346 reference_constructor.xml:374 reference_constructor.xml:453 reference_constructor.xml:492 reference_constructor.xml:540 reference_constructor.xml:571 reference_constructor.xml:621 reference_constructor.xml:672 reference_constructor.xml:710 reference_constructor.xml:770 reference_constructor.xml:838 reference_constructor.xml:902 reference_constructor.xml:942 reference_constructor.xml:989 reference_constructor.xml:1066 reference_constructor.xml:1109 reference_constructor.xml:1173 reference_constructor.xml:1239 reference_constructor.xml:1276 reference_constructor.xml:1335 reference_constructor.xml:1396 reference_constructor.xml:1457 reference_constructor.xml:1508 reference_constructor.xml:1563 reference_constructor.xml:1616 reference_constructor.xml:1665 reference_constructor.xml:1717 reference_constructor.xml:1741 reference_constructor.xml:1764 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_constructor.xml:49 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:55 #, no-c-format msgid "ST_BdMPolyFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:56 #, no-c-format msgid "Construct a MultiPolygon given an arbitrary collection of closed linestrings as a MultiLineString text representation Well-Known text representation." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:63 #, no-c-format msgid "geometry ST_BdMPolyFromText text WKT integer srid" msgstr "" #. Tag: para #: reference_constructor.xml:74 #, no-c-format msgid "Construct a Polygon given an arbitrary collection of closed linestrings, polygons, MultiLineStrings as Well-Known text representation." msgstr "" #. Tag: para #: reference_constructor.xml:79 #, no-c-format msgid "Throws an error if WKT is not a MULTILINESTRING. Forces MULTIPOLYGON output even when result is really only composed by a single POLYGON; use ST_BdPolyFromText if you're sure a single POLYGON will result from operation, or see ST_BuildArea() for a postgis-specific approach." msgstr "" #. Tag: para #: reference_constructor.xml:101 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:107 #, no-c-format msgid "ST_GeogFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:108 reference_constructor.xml:137 #, no-c-format msgid "Return a specified geography value from Well-Known Text representation or extended (WKT)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:112 #, no-c-format msgid "geography ST_GeogFromText text EWKT" msgstr "" #. Tag: para #: reference_constructor.xml:120 #, no-c-format msgid "Returns a geography object from the well-known text or extended well-known representation. SRID 4326 is assumed. This is an alias for ST_GeographyFromText. Points are always expressed in long lat form." msgstr "" #. Tag: programlisting #: reference_constructor.xml:126 #, no-c-format msgid "" "--- converting lon lat coords to geography\n" "ALTER TABLE sometable ADD COLUMN geog geography(POINT,4326);\n" "UPDATE sometable SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' || lat || ')');" msgstr "" #. Tag: para #: reference_constructor.xml:130 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:136 #, no-c-format msgid "ST_GeographyFromText" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:141 #, no-c-format msgid "geography ST_GeographyFromText text EWKT" msgstr "" #. Tag: para #: reference_constructor.xml:149 #, no-c-format msgid "Returns a geography object from the well-known text representation. SRID 4326 is assumed." msgstr "" #. Tag: para #: reference_constructor.xml:154 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:160 #, no-c-format msgid "ST_GeogFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:161 #, no-c-format msgid "Creates a geography instance from a Well-Known Binary geometry representation (WKB) or extended Well Known Binary (EWKB)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:167 #, no-c-format msgid "geography ST_GeogFromWKB bytea geom" msgstr "" #. Tag: para #: reference_constructor.xml:177 #, no-c-format msgid "The ST_GeogFromWKB function, takes a well-known binary representation (WKB) of a geometry or PostGIS Extended WKB and creates an instance of the appropriate geography type. This function plays the role of the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:182 #, no-c-format msgid "If SRID is not specified, it defaults to 4326 (WGS 84 long lat)." msgstr "" #. Tag: para #: reference_constructor.xml:184 reference_constructor.xml:286 reference_constructor.xml:334 reference_constructor.xml:610 reference_constructor.xml:660 reference_constructor.xml:1605 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:192 #, no-c-format msgid "" "--Although bytea rep contains single \\, these need to be escaped when inserting into a table\n" "SELECT ST_AsText(\n" "ST_GeogFromWKB(E'\\\\001\\\\002\\\\000\\\\000\\\\000\\\\002\\\\000\\\\000\\\\000\\\\037\\\\205\\\\353Q\\\\270~\\\\\\\\\\\\300\\\\323Mb\\\\020X\\\\231C@\\\\020X9\\\\264\\\\310~\\\\\\\\\\\\300)\\\\\\\\\\\\217\\\\302\\\\365\\\\230C@')\n" ");\n" " st_astext\n" "------------------------------------------------------\n" " LINESTRING(-113.98 39.198,-113.981 39.195)\n" "(1 row)" msgstr "" #. Tag: para #: reference_constructor.xml:197 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:204 #, no-c-format msgid "ST_GeomCollFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:206 #, no-c-format msgid "Makes a collection Geometry from collection WKT with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:211 #, no-c-format msgid " geometry ST_GeomCollFromText text WKT integer srid geometry ST_GeomCollFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:229 #, no-c-format msgid "Makes a collection Geometry from the Well-Known-Text (WKT) representation with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:232 reference_constructor.xml:1310 reference_constructor.xml:1371 reference_constructor.xml:1432 reference_constructor.xml:1700 #, no-c-format msgid "OGC SPEC 3.2.6.2 - option SRID is from the conformance suite" msgstr "" #. Tag: para #: reference_constructor.xml:234 #, no-c-format msgid "Returns null if the WKT is not a GEOMETRYCOLLECTION" msgstr "" #. Tag: para #: reference_constructor.xml:236 #, no-c-format msgid "If you are absolutely sure all your WKT geometries are collections, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step." msgstr "" #. Tag: para #: reference_constructor.xml:242 #, no-c-format msgid "&sqlmm_compliant;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:250 #, no-c-format msgid "SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 4))');" msgstr "" #. Tag: para #: reference_constructor.xml:257 reference_constructor.xml:1459 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:264 #, no-c-format msgid "ST_GeomFromEWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:265 #, no-c-format msgid "Return a specified ST_Geometry value from Extended Well-Known Binary representation (EWKB)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:270 #, no-c-format msgid "geometry ST_GeomFromEWKB bytea EWKB" msgstr "" #. Tag: para #: reference_constructor.xml:279 #, no-c-format msgid "Constructs a PostGIS ST_Geometry object from the OGC Extended Well-Known binary (EWKT) representation." msgstr "" #. Tag: para #: reference_constructor.xml:281 #, no-c-format msgid "The EWKB format is not an OGC standard, but a PostGIS specific format that includes the spatial reference system (SRID) identifier" msgstr "" #. Tag: para #: reference_constructor.xml:284 reference_constructor.xml:332 reference_constructor.xml:420 reference_constructor.xml:567 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced." msgstr "" #. Tag: para #: reference_constructor.xml:285 reference_constructor.xml:333 reference_constructor.xml:422 reference_constructor.xml:481 reference_constructor.xml:527 reference_constructor.xml:698 reference_constructor.xml:1034 reference_constructor.xml:1151 reference_constructor.xml:1230 reference_constructor.xml:1604 reference_constructor.xml:1652 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_constructor.xml:287 reference_constructor.xml:335 reference_constructor.xml:423 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_constructor.xml:288 reference_constructor.xml:336 reference_constructor.xml:424 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: para #: reference_constructor.xml:293 #, no-c-format msgid "line string binary rep 0f LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932) in NAD 83 long lat (4269)." msgstr "" #. Tag: para #: reference_constructor.xml:295 #, no-c-format msgid "NOTE: Even though byte arrays are delimited with \\ and may have ', we need to escape both out with \\ and '' if standard_conforming_strings is off. So it does not look exactly like its AsEWKB representation." msgstr "" #. Tag: programlisting #: reference_constructor.xml:297 #, no-c-format msgid "" "SELECT ST_GeomFromEWKB(E'\\\\001\\\\002\\\\000\\\\000 \\\\255\\\\020\\\\000\\\\000\\\\003\\\\000\\\\000\\\\000\\\\344J=\n" "\\\\013B\\\\312Q\\\\300n\\\\303(\\\\010\\\\036!E@''\\\\277E''K\n" "\\\\312Q\\\\300\\\\366{b\\\\235*!E@\\\\225|\\\\354.P\\\\312Q\n" "\\\\300p\\\\231\\\\323e1!E@');" msgstr "" #. Tag: para #: reference_constructor.xml:299 #, no-c-format msgid "In PostgreSQL 9.1+ - standard_conforming_strings is set to on by default, where as in past versions it was set to on. You can change defaults as needed for a single query or at the database or server level. Below is how you would do it with standard_conforming_strings = on. In this case we escape the ' with standard ansi ', but slashes are not escaped" msgstr "" #. Tag: programlisting #: reference_constructor.xml:302 #, no-c-format msgid "" "set standard_conforming_strings = on;\n" "SELECT ST_GeomFromEWKB('\\001\\002\\000\\000 \\255\\020\\000\\000\\003\\000\\000\\000\\344J=\\012\\013B\n" " \\312Q\\300n\\303(\\010\\036!E@''\\277E''K\\012\\312Q\\300\\366{b\\235*!E@\\225|\\354.P\\312Q\\012\\300p\\231\\323e1')" msgstr "" #. Tag: para #: reference_constructor.xml:306 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:312 #, no-c-format msgid "ST_GeomFromEWKT" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:313 #, no-c-format msgid "Return a specified ST_Geometry value from Extended Well-Known Text representation (EWKT)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:318 #, no-c-format msgid "geometry ST_GeomFromEWKT text EWKT" msgstr "" #. Tag: para #: reference_constructor.xml:327 #, no-c-format msgid "Constructs a PostGIS ST_Geometry object from the OGC Extended Well-Known text (EWKT) representation." msgstr "" #. Tag: para #: reference_constructor.xml:329 #, no-c-format msgid "The EWKT format is not an OGC standard, but an PostGIS specific format that includes the spatial reference system (SRID) identifier" msgstr "" #. Tag: programlisting #: reference_constructor.xml:341 #, no-c-format msgid "" "SELECT ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');\n" "SELECT ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');\n" "\n" "SELECT ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)');\n" "\n" "SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,\n" "-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');\n" "\n" "SELECT ST_GeomFromEWKT('SRID=4269;MULTIPOLYGON(((-71.1031880899493 42.3152774590236,\n" "-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,\n" "-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,\n" "-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,\n" "-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,\n" "-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,\n" "-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,\n" "-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,\n" "-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,\n" "-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,\n" "-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,\n" "-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,\n" "-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,\n" "-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,\n" "-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,\n" "-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,\n" "-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,\n" "-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,\n" "-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,\n" "-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,\n" "-71.1031880899493 42.3152774590236)),\n" "((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,\n" "-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))');" msgstr "" #. Tag: programlisting #: reference_constructor.xml:342 #, no-c-format msgid "" "--3d circular string\n" "SELECT ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)');" msgstr "" #. Tag: programlisting #: reference_constructor.xml:343 #, no-c-format msgid "" "--Polyhedral Surface example\n" "SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE( \n" " ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), \n" " ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), \n" " ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) \n" ")');" msgstr "" #. Tag: para #: reference_constructor.xml:347 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:352 #, no-c-format msgid "ST_GeometryFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:353 reference_constructor.xml:1749 #, no-c-format msgid "Return a specified ST_Geometry value from Well-Known Text representation (WKT). This is an alias name for ST_GeomFromText" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:356 #, no-c-format msgid " geometry ST_GeometryFromText text WKT geometry ST_GeometryFromText text WKT integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:370 reference_constructor.xml:1650 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_constructor.xml:371 reference_constructor.xml:609 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.40" msgstr "" #. Tag: refname #: reference_constructor.xml:381 #, no-c-format msgid "ST_GeomFromGML" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:382 #, no-c-format msgid "Takes as input GML representation of geometry and outputs a PostGIS geometry object" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:386 #, no-c-format msgid " geometry ST_GeomFromGML text geomgml geometry ST_GeomFromGML text geomgml integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:401 #, no-c-format msgid "Constructs a PostGIS ST_Geometry object from the OGC GML representation." msgstr "" #. Tag: para #: reference_constructor.xml:402 #, no-c-format msgid "ST_GeomFromGML works only for GML Geometry fragments. It throws an error if you try to use it on a whole GML document." msgstr "" #. Tag: para #: reference_constructor.xml:403 #, no-c-format msgid "OGC GML versions supported: GML 3.2.1 Namespace GML 3.1.1 Simple Features profile SF-2 (with GML 3.1.0 and 3.0.0 backward compatibility) GML 2.1.2 OGC GML standards, cf: http://www.opengeospatial.org/standards/gml:" msgstr "" #. Tag: para #: reference_constructor.xml:419 reference_constructor.xml:566 #, no-c-format msgid "Availability: 1.5, requires libxml2 1.6+" msgstr "" #. Tag: para #: reference_constructor.xml:421 reference_constructor.xml:568 #, no-c-format msgid "Enhanced: 2.0.0 default srid optional parameter added." msgstr "" #. Tag: para #: reference_constructor.xml:425 #, no-c-format msgid "GML allow mixed dimensions (2D and 3D inside the same MultiGeometry for instance). As PostGIS geometries don't, ST_GeomFromGML convert the whole geometry to 2D if a missing Z dimension is found once." msgstr "" #. Tag: para #: reference_constructor.xml:427 #, no-c-format msgid "GML support mixed SRS inside the same MultiGeometry. As PostGIS geometries don't, ST_GeomFromGML, in this case, reproject all subgeometries to the SRS root node. If no srsName attribute available for the GML root node, the function throw an error." msgstr "" #. Tag: para #: reference_constructor.xml:429 #, no-c-format msgid "ST_GeomFromGML function is not pedantic about an explicit GML namespace. You could avoid to mention it explicitly for common usages. But you need it if you want to use XLink feature inside GML." msgstr "" #. Tag: para #: reference_constructor.xml:431 #, no-c-format msgid "ST_GeomFromGML function not support SQL/MM curves geometries." msgstr "" #. Tag: title #: reference_constructor.xml:437 reference_constructor.xml:535 #, no-c-format msgid "Examples - A single geometry with srsName" msgstr "" #. Tag: programlisting #: reference_constructor.xml:438 #, no-c-format msgid "" "SELECT ST_GeomFromGML('\n" " \n" " -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932\n" " \n" " ']]>);" msgstr "" #. Tag: title #: reference_constructor.xml:442 #, no-c-format msgid "Examples - XLink usage" msgstr "" #. Tag: programlisting #: reference_constructor.xml:443 #, no-c-format msgid "" "SELECT \n" " \n" " 42.258729 -71.16028\n" " \n" " 42.259112 -71.160837\n" " \n" " \n" " \n" " ');]]>);" msgstr "" #. Tag: title #: reference_constructor.xml:447 #, no-c-format msgid "Examples - Polyhedral Surface" msgstr "" #. Tag: programlisting #: reference_constructor.xml:448 #, no-c-format msgid "" "SELECT ST_AsEWKT(\n" "\n" " \n" " \n" " 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0\n" " \n" " \n" " \n" " \n" " 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0\n" " \n" " \n" " \n" " \n" " 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0\n" " \n" " \n" " \n" " \n" " 1 1 0 1 1 1 1 0 1 1 0 0 1 1 0\n" " \n" " \n" " \n" " \n" " 0 1 0 0 1 1 1 1 1 1 1 0 0 1 0\n" " \n" " \n" " \n" " \n" " 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1\n" " \n" " \n" "\n" "']]>));\n" "\n" "-- result --\n" " POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),\n" " ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),\n" " ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),\n" " ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),\n" " ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),\n" " ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))" msgstr "" #. Tag: para #: reference_constructor.xml:454 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:460 #, no-c-format msgid "ST_GeomFromGeoJSON" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:461 #, no-c-format msgid "Takes as input a geojson representation of a geometry and outputs a PostGIS geometry object" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:466 #, no-c-format msgid "geometry ST_GeomFromGeoJSON text geomjson" msgstr "" #. Tag: para #: reference_constructor.xml:475 #, no-c-format msgid "Constructs a PostGIS geometry object from the GeoJSON representation." msgstr "" #. Tag: para #: reference_constructor.xml:476 #, no-c-format msgid "ST_GeomFromGeoJSON works only for JSON Geometry fragments. It throws an error if you try to use it on a whole JSON document." msgstr "" #. Tag: para #: reference_constructor.xml:478 #, no-c-format msgid "Availability: 2.0.0 requires - JSON-C >= 0.9" msgstr "" #. Tag: para #: reference_constructor.xml:479 #, no-c-format msgid "If you do not have JSON-C enabled, support you will get an error notice instead of seeing an output. To enable JSON-C, run configure --with-jsondir=/path/to/json-c. See for details." msgstr "" #. Tag: programlisting #: reference_constructor.xml:486 #, no-c-format msgid "" "SELECT ST_AsText(ST_GeomFromGeoJSON('{\"type\":\"Point\",\"coordinates\":[-48.23456,20.12345]}')) As wkt;\n" "wkt\n" "------\n" "POINT(-48.23456 20.12345)" msgstr "" #. Tag: programlisting #: reference_constructor.xml:487 #, no-c-format msgid "" "-- a 3D linestring\n" "SELECT ST_AsText(ST_GeomFromGeoJSON('{\"type\":\"LineString\",\"coordinates\":[[1,2,3],[4,5,6],[7,8,9]]}')) As wkt;\n" "\n" "wkt\n" "-------------------\n" "LINESTRING(1 2,4 5,7 8)" msgstr "" #. Tag: para #: reference_constructor.xml:493 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:499 #, no-c-format msgid "ST_GeomFromKML" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:500 #, no-c-format msgid "Takes as input KML representation of geometry and outputs a PostGIS geometry object" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:505 #, no-c-format msgid "geometry ST_GeomFromKML text geomkml" msgstr "" #. Tag: para #: reference_constructor.xml:514 #, no-c-format msgid "Constructs a PostGIS ST_Geometry object from the OGC KML representation." msgstr "" #. Tag: para #: reference_constructor.xml:515 #, no-c-format msgid "ST_GeomFromKML works only for KML Geometry fragments. It throws an error if you try to use it on a whole KML document." msgstr "" #. Tag: para #: reference_constructor.xml:516 #, no-c-format msgid "OGC KML versions supported: KML 2.2.0 Namespace OGC KML standards, cf: http://www.opengeospatial.org/standards/kml:" msgstr "" #. Tag: para #: reference_constructor.xml:526 #, no-c-format msgid "Availability: 1.5,libxml2 2.6+" msgstr "" #. Tag: para #: reference_constructor.xml:529 #, no-c-format msgid "ST_GeomFromKML function not support SQL/MM curves geometries." msgstr "" #. Tag: programlisting #: reference_constructor.xml:536 #, no-c-format msgid "" "SELECT ST_GeomFromKML('\n" " -71.1663,42.2614 \n" " -71.1667,42.2616\n" " ']]>);" msgstr "" #. Tag: para #: reference_constructor.xml:541 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:547 #, no-c-format msgid "ST_GMLToSQL" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:548 #, no-c-format msgid "Return a specified ST_Geometry value from GML representation. This is an alias name for ST_GeomFromGML" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:551 #, no-c-format msgid " geometry ST_GMLToSQL text geomgml geometry ST_GMLToSQL text geomgml integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:565 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.50 (except for curves support)." msgstr "" #. Tag: para #: reference_constructor.xml:572 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:578 #, no-c-format msgid "ST_GeomFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:579 #, no-c-format msgid "Return a specified ST_Geometry value from Well-Known Text representation (WKT)." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:582 #, no-c-format msgid " geometry ST_GeomFromText text WKT geometry ST_GeomFromText text WKT integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:598 #, no-c-format msgid "Constructs a PostGIS ST_Geometry object from the OGC Well-Known text representation." msgstr "" #. Tag: para #: reference_constructor.xml:602 #, no-c-format msgid "There are 2 variants of ST_GeomFromText function, the first takes no SRID and returns a geometry with no defined spatial reference system. The second takes a spatial reference id as the second argument and returns an ST_Geometry that includes this srid as part of its meta-data. The srid must be defined in the spatial_ref_sys table." msgstr "" #. Tag: para #: reference_constructor.xml:608 reference_constructor.xml:1554 #, no-c-format msgid "&sfs_compliant; s3.2.6.2 - option SRID is from the conformance suite." msgstr "" #. Tag: para #: reference_constructor.xml:611 #, no-c-format msgid "Changed: 2.0.0 In prior versions of PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') was allowed. This is now illegal in PostGIS 2.0.0 to better conform with SQL/MM standards. This should now be written as ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')" msgstr "" #. Tag: programlisting #: reference_constructor.xml:618 #, no-c-format msgid "" "SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');\n" "SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)',4269);\n" "\n" "SELECT ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');\n" "\n" "SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');\n" "\n" "SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,\n" "-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');\n" "\n" "SELECT ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236,\n" "-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,\n" "-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,\n" "-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,\n" "-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,\n" "-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,\n" "-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,\n" "-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,\n" "-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,\n" "-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,\n" "-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,\n" "-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,\n" "-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,\n" "-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,\n" "-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,\n" "-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,\n" "-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,\n" "-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,\n" "-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,\n" "-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,\n" "-71.1031880899493 42.3152774590236)),\n" "((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,\n" "-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))',4326);\n" "\n" "SELECT ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)');" msgstr "" #. Tag: para #: reference_constructor.xml:622 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:628 #, no-c-format msgid "ST_GeomFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:629 #, no-c-format msgid "Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:634 reference_constructor.xml:1576 #, no-c-format msgid " geometry ST_GeomFromWKB bytea geom geometry ST_GeomFromWKB bytea geom integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:651 #, no-c-format msgid "The ST_GeomFromWKB function, takes a well-known binary representation of a geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type. This function plays the role of the Geometry Factory in SQL. This is an alternate name for ST_WKBToSQL." msgstr "" #. Tag: para #: reference_constructor.xml:657 #, no-c-format msgid "If SRID is not specified, it defaults to -1 (Unknown)." msgstr "" #. Tag: para #: reference_constructor.xml:658 #, no-c-format msgid "&sfs_compliant; s3.2.7.2 - the optional SRID is from the conformance suite" msgstr "" #. Tag: para #: reference_constructor.xml:659 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.41" msgstr "" #. Tag: programlisting #: reference_constructor.xml:667 #, no-c-format msgid "" "--Although bytea rep contains single \\, these need to be escaped when inserting into a table \n" " -- unless standard_conforming_strings is set to on.\n" "SELECT ST_AsEWKT(\n" "ST_GeomFromWKB(E'\\\\001\\\\002\\\\000\\\\000\\\\000\\\\002\\\\000\\\\000\\\\000\\\\037\\\\205\\\\353Q\\\\270~\\\\\\\\\\\\300\\\\323Mb\\\\020X\\\\231C@\\\\020X9\\\\264\\\\310~\\\\\\\\\\\\300)\\\\\\\\\\\\217\\\\302\\\\365\\\\230C@',4326)\n" ");\n" " st_asewkt\n" "------------------------------------------------------\n" " SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195)\n" "(1 row)\n" "\n" "SELECT\n" " ST_AsText(\n" " ST_GeomFromWKB(\n" " ST_AsEWKB('POINT(2 5)'::geometry)\n" " )\n" " );\n" " st_astext\n" "------------\n" " POINT(2 5)\n" "(1 row)" msgstr "" #. Tag: para #: reference_constructor.xml:674 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:680 #, no-c-format msgid "ST_LineFromMultiPoint" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:682 #, no-c-format msgid "Creates a LineString from a MultiPoint geometry." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:687 #, no-c-format msgid "geometry ST_LineFromMultiPoint geometry aMultiPoint" msgstr "" #. Tag: para #: reference_constructor.xml:697 #, no-c-format msgid "Creates a LineString from a MultiPoint geometry." msgstr "" #. Tag: programlisting #: reference_constructor.xml:705 #, no-c-format msgid "" "--Create a 3d line string from a 3d multipoint\n" "SELECT ST_AsEWKT(ST_LineFromMultiPoint(ST_GeomFromEWKT('MULTIPOINT(1 2 3, 4 5 6, 7 8 9)')));\n" "--result--\n" "LINESTRING(1 2 3,4 5 6,7 8 9)" msgstr "" #. Tag: para #: reference_constructor.xml:712 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:718 #, no-c-format msgid "ST_LineFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:720 #, no-c-format msgid "Makes a Geometry from WKT representation with the given SRID. If SRID is not given, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:725 #, no-c-format msgid " geometry ST_LineFromText text WKT geometry ST_LineFromText text WKT integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:742 #, no-c-format msgid "Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to -1. If WKT passed in is not a LINESTRING, then null is returned." msgstr "" #. Tag: para #: reference_constructor.xml:746 reference_constructor.xml:812 #, no-c-format msgid "OGC SPEC 3.2.6.2 - option SRID is from the conformance suite." msgstr "" #. Tag: para #: reference_constructor.xml:751 #, no-c-format msgid "If you know all your geometries are LINESTRINGS, its more efficient to just use ST_GeomFromText. This just calls ST_GeomFromText and adds additional validation that it returns a linestring." msgstr "" #. Tag: para #: reference_constructor.xml:757 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.8" msgstr "" #. Tag: programlisting #: reference_constructor.xml:765 #, no-c-format msgid "" "SELECT ST_LineFromText('LINESTRING(1 2, 3 4)') AS aline, ST_LineFromText('POINT(1 2)') AS null_return;\n" "aline | null_return\n" "------------------------------------------------\n" "010200000002000000000000000000F ... | t" msgstr "" #. Tag: refname #: reference_constructor.xml:778 #, no-c-format msgid "ST_LineFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:780 #, no-c-format msgid "Makes a LINESTRING from WKB with the given SRID" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:784 #, no-c-format msgid " geometry ST_LineFromWKB bytea WKB geometry ST_LineFromWKB bytea WKB integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:801 #, no-c-format msgid "The ST_LineFromWKB function, takes a well-known binary representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this case, a LINESTRING geometry. This function plays the role of the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:807 #, no-c-format msgid "If an SRID is not specified, it defaults to -1. NULL is returned if the input bytea does not represent a LINESTRING." msgstr "" #. Tag: para #: reference_constructor.xml:817 #, no-c-format msgid "If you know all your geometries are LINESTRINGs, its more efficient to just use . This function just calls and adds additional validation that it returns a linestring." msgstr "" #. Tag: para #: reference_constructor.xml:825 reference_constructor.xml:891 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.9" msgstr "" #. Tag: programlisting #: reference_constructor.xml:833 #, no-c-format msgid "" "SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,\n" " ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;\n" "aline | null_return\n" "------------------------------------------------\n" "010200000002000000000000000000F ... | t" msgstr "" #. Tag: para #: reference_constructor.xml:840 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:846 #, no-c-format msgid "ST_LinestringFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:848 #, no-c-format msgid "Makes a geometry from WKB with the given SRID." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:852 #, no-c-format msgid " geometry ST_LinestringFromWKB bytea WKB geometry ST_LinestringFromWKB bytea WKB integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:869 #, no-c-format msgid "The ST_LinestringFromWKB function, takes a well-known binary representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this case, a LINESTRING geometry. This function plays the role of the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:875 #, no-c-format msgid "If an SRID is not specified, it defaults to -1. NULL is returned if the input bytea does not represent a LINESTRING geometry. This an alias for ." msgstr "" #. Tag: para #: reference_constructor.xml:880 #, no-c-format msgid "OGC SPEC 3.2.6.2 - optional SRID is from the conformance suite." msgstr "" #. Tag: para #: reference_constructor.xml:884 #, no-c-format msgid "If you know all your geometries are LINESTRINGs, it's more efficient to just use . This function just calls and adds additional validation that it returns a LINESTRING." msgstr "" #. Tag: programlisting #: reference_constructor.xml:897 #, no-c-format msgid "" "SELECT\n" " ST_LineStringFromWKB(\n" " ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))\n" " ) AS aline,\n" " ST_LinestringFromWKB(\n" " ST_AsBinary(ST_GeomFromText('POINT(1 2)'))\n" " ) IS NULL AS null_return;\n" " aline | null_return\n" "------------------------------------------------\n" "010200000002000000000000000000F ... | t" msgstr "" #. Tag: para #: reference_constructor.xml:904 reference_constructor.xml:1618 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:910 #, no-c-format msgid "ST_MakeBox2D" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:912 #, no-c-format msgid "Creates a BOX2D defined by the given point geometries." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:918 #, no-c-format msgid "box2d ST_MakeBox2D geometry pointLowLeft geometry pointUpRight" msgstr "" #. Tag: para #: reference_constructor.xml:929 #, no-c-format msgid "Creates a BOX2D defined by the given point geometries. This is useful for doing range queries" msgstr "" #. Tag: programlisting #: reference_constructor.xml:937 #, no-c-format msgid "" "--Return all features that fall reside or partly reside in a US national atlas coordinate bounding box\n" "--It is assumed here that the geometries are stored with SRID = 2163 (US National atlas equal area)\n" "SELECT feature_id, feature_name, the_geom\n" "FROM features\n" "WHERE the_geom && ST_SetSRID(ST_MakeBox2D(ST_Point(-989502.1875, 528439.5625),\n" " ST_Point(-987121.375 ,529933.1875)),2163)" msgstr "" #. Tag: para #: reference_constructor.xml:944 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:950 #, no-c-format msgid "ST_3DMakeBox" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:952 #, no-c-format msgid "Creates a BOX3D defined by the given 3d point geometries." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:957 #, no-c-format msgid "box3d ST_3DMakeBox geometry point3DLowLeftBottom geometry point3DUpRightTop" msgstr "" #. Tag: para #: reference_constructor.xml:968 #, no-c-format msgid "Creates a BOX3D defined by the given 2 3D point geometries." msgstr "" #. Tag: para #: reference_constructor.xml:975 #, no-c-format msgid "This function supports 3d and will not drop the z-index." msgstr "" #. Tag: para #: reference_constructor.xml:977 #, no-c-format msgid "Changed: 2.0.0 In prior versions this used to be called ST_MakeBox3D" msgstr "" #. Tag: programlisting #: reference_constructor.xml:984 #, no-c-format msgid "" "SELECT ST_3DMakeBox(ST_MakePoint(-989502.1875, 528439.5625, 10),\n" " ST_MakePoint(-987121.375 ,529933.1875, 10)) As abb3d\n" "\n" "--bb3d--\n" "--------\n" "BOX3D(-989502.1875 528439.5625 10,-987121.375 529933.1875 10)" msgstr "" #. Tag: para #: reference_constructor.xml:991 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:997 #, no-c-format msgid "ST_MakeLine" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:999 #, no-c-format msgid "Creates a Linestring from point or line geometries." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1003 #, no-c-format msgid " geometry ST_MakeLine geometry set geoms geometry ST_MakeLine geometry geom1 geometry geom2 geometry ST_MakeLine geometry[] geoms_array " msgstr "" #. Tag: para #: reference_constructor.xml:1025 #, no-c-format msgid "ST_MakeLine comes in 3 forms: a spatial aggregate that takes rows of point-or-line geometries and returns a line string, a function that takes an array of point-or-lines, and a regular function that takes two point-or-line geometries. You might want to use a subselect to order points before feeding them to the aggregate version of this function." msgstr "" #. Tag: para #: reference_constructor.xml:1030 #, no-c-format msgid "When adding line components a common node is removed from the output." msgstr "" #. Tag: para #: reference_constructor.xml:1035 #, no-c-format msgid "Availability: 1.4.0 - ST_MakeLine(geomarray) was introduced. ST_MakeLine aggregate functions was enhanced to handle more points faster." msgstr "" #. Tag: para #: reference_constructor.xml:1036 #, no-c-format msgid "Availability: 2.0.0 - Support for linestring input elements was introduced" msgstr "" #. Tag: title #: reference_constructor.xml:1040 #, no-c-format msgid "Examples: Spatial Aggregate version" msgstr "" #. Tag: para #: reference_constructor.xml:1041 #, no-c-format msgid "This example takes a sequence of GPS points and creates one record for each gps travel where the geometry field is a line string composed of the gps points in the order of the travel." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1045 #, no-c-format msgid "" "-- For pre-PostgreSQL 9.0 - this usually works, \n" "-- but the planner may on occasion choose not to respect the order of the subquery\n" "SELECT gps.gps_track, ST_MakeLine(gps.the_geom) As newgeom\n" " FROM (SELECT gps_track,gps_time, the_geom\n" " FROM gps_points ORDER BY gps_track, gps_time) As gps\n" " GROUP BY gps.gps_track;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1047 #, no-c-format msgid "" "-- If you are using PostgreSQL 9.0+ \n" "-- (you can use the new ORDER BY support for aggregates)\n" "-- this is a guaranteed way to get a correctly ordered linestring\n" "-- Your order by part can order by more than one column if needed\n" "SELECT gps.gps_track, ST_MakeLine(gps.the_geom ORDER BY gps_time) As newgeom\n" " FROM gps_points As gps\n" " GROUP BY gps.gps_track;" msgstr "" #. Tag: title #: reference_constructor.xml:1050 #, no-c-format msgid "Examples: Non-Spatial Aggregate version" msgstr "" #. Tag: para #: reference_constructor.xml:1052 #, no-c-format msgid "First example is a simple one off line string composed of 2 points. The second formulates line strings from 2 points a user draws. The third is a one-off that joins 2 3d points to create a line in 3d space." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1054 #, no-c-format msgid "" "SELECT ST_AsText(ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(3,4)));\n" " st_astext\n" "---------------------\n" " LINESTRING(1 2,3 4)\n" "\n" "SELECT userpoints.id, ST_MakeLine(startpoint, endpoint) As drawn_line\n" " FROM userpoints ;\n" "\n" "SELECT ST_AsEWKT(ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5)));\n" " st_asewkt\n" "-------------------------\n" " LINESTRING(1 2 3,3 4 5)" msgstr "" #. Tag: title #: reference_constructor.xml:1058 #, no-c-format msgid "Examples: Using Array version" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1060 #, no-c-format msgid "" "SELECT ST_MakeLine(ARRAY(SELECT ST_Centroid(the_geom) FROM visit_locations ORDER BY visit_time));\n" "\n" "--Making a 3d line with 3 3-d points\n" "SELECT ST_AsEWKT(ST_MakeLine(ARRAY[ST_MakePoint(1,2,3),\n" " ST_MakePoint(3,4,5), ST_MakePoint(6,6,6)]));\n" " st_asewkt\n" "-------------------------\n" "LINESTRING(1 2 3,3 4 5,6 6 6)" msgstr "" #. Tag: para #: reference_constructor.xml:1067 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1074 #, no-c-format msgid "ST_MakeEnvelope" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1076 #, no-c-format msgid "Creates a rectangular Polygon formed from the given minimums and maximums. Input values must be in SRS specified by the SRID." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1082 #, no-c-format msgid "geometry ST_MakeEnvelope double precision xmin double precision ymin double precision xmax double precision ymax integer srid=unknown" msgstr "" #. Tag: para #: reference_constructor.xml:1096 #, no-c-format msgid "Creates a rectangular Polygon formed from the minima and maxima. by the given shell. Input values must be in SRS specified by the SRID. If no SRID is specified the unknown spatial reference system is assumed" msgstr "" #. Tag: para #: reference_constructor.xml:1099 #, no-c-format msgid "Availability: 1.5" msgstr "" #. Tag: para #: reference_constructor.xml:1100 #, no-c-format msgid "Enhanced: 2.0: Ability to specify an envelope without specifying an SRID was introduced." msgstr "" #. Tag: title #: reference_constructor.xml:1105 #, no-c-format msgid "Example: Building a bounding box polygon" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1106 #, no-c-format msgid "" "SELECT ST_AsText(ST_MakeEnvelope(10, 10, 11, 11, 4326));\n" "\n" "st_asewkt\n" "-----------\n" "POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))" msgstr "" #. Tag: para #: reference_constructor.xml:1110 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:1116 #, no-c-format msgid "ST_MakePolygon" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1118 #, no-c-format msgid "Creates a Polygon formed by the given shell. Input geometries must be closed LINESTRINGS." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1124 #, no-c-format msgid "geometry ST_MakePolygon geometry linestring" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1130 #, no-c-format msgid "geometry ST_MakePolygon geometry outerlinestring geometry[] interiorlinestrings" msgstr "" #. Tag: para #: reference_constructor.xml:1141 #, no-c-format msgid "Creates a Polygon formed by the given shell. Input geometries must be closed LINESTRINGS. Comes in 2 variants." msgstr "" #. Tag: para #: reference_constructor.xml:1143 #, no-c-format msgid "Variant 1: takes one closed linestring." msgstr "" #. Tag: para #: reference_constructor.xml:1144 #, no-c-format msgid "Variant 2: Creates a Polygon formed by the given shell and array of holes. You can construct a geometry array using ST_Accum or the PostgreSQL ARRAY[] and ARRAY() constructs. Input geometries must be closed LINESTRINGS." msgstr "" #. Tag: para #: reference_constructor.xml:1148 #, no-c-format msgid "This function will not accept a MULTILINESTRING. Use or to generate line strings." msgstr "" #. Tag: title #: reference_constructor.xml:1155 #, no-c-format msgid "Examples: Single closed LINESTRING" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1156 #, no-c-format msgid "" "--2d line\n" "SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)'));\n" "--If linestring is not closed\n" "--you can add the start point to close it\n" "SELECT ST_MakePolygon(ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)))\n" "FROM (\n" "SELECT ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5)') As open_line) As foo;\n" "\n" "--3d closed line\n" "SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'));\n" "\n" "st_asewkt\n" "-----------\n" "POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))\n" "\n" "--measured line --\n" "SELECT ST_MakePolygon(ST_GeomFromText('LINESTRINGM(75.15 29.53 1,77 29 1,77.6 29.5 2, 75.15 29.53 2)'));\n" "\n" "st_asewkt\n" "----------\n" "POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2))" msgstr "" #. Tag: title #: reference_constructor.xml:1159 #, no-c-format msgid "Examples: Outter shell with inner shells" msgstr "" #. Tag: para #: reference_constructor.xml:1161 #, no-c-format msgid "Build a donut with an ant hole" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1162 #, no-c-format msgid "" "SELECT ST_MakePolygon(\n" " ST_ExteriorRing(ST_Buffer(foo.line,10)),\n" " ARRAY[ST_Translate(foo.line,1,1),\n" " ST_ExteriorRing(ST_Buffer(ST_MakePoint(20,20),1)) ]\n" " )\n" "FROM\n" " (SELECT ST_ExteriorRing(ST_Buffer(ST_MakePoint(10,10),10,10))\n" " As line )\n" " As foo;" msgstr "" #. Tag: para #: reference_constructor.xml:1163 #, no-c-format msgid "Build province boundaries with holes representing lakes in the province from a set of province polygons/multipolygons and water line strings this is an example of using PostGIS ST_Accum" msgstr "" #. Tag: para #: reference_constructor.xml:1167 #, no-c-format msgid "The use of CASE because feeding a null array into ST_MakePolygon results in NULL" msgstr "" #. Tag: para #: reference_constructor.xml:1169 #, no-c-format msgid "the use of left join to guarantee we get all provinces back even if they have no lakes" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1170 #, no-c-format msgid "" "SELECT p.gid, p.province_name,\n" " CASE WHEN\n" " ST_Accum(w.the_geom) IS NULL THEN p.the_geom\n" " ELSE ST_MakePolygon(ST_LineMerge(ST_Boundary(p.the_geom)), ST_Accum(w.the_geom)) END\n" " FROM\n" " provinces p LEFT JOIN waterlines w\n" " ON (ST_Within(w.the_geom, p.the_geom) AND ST_IsClosed(w.the_geom))\n" " GROUP BY p.gid, p.province_name, p.the_geom;\n" "\n" " --Same example above but utilizing a correlated subquery\n" " --and PostgreSQL built-in ARRAY() function that converts a row set to an array\n" "\n" " SELECT p.gid, p.province_name, CASE WHEN\n" " EXISTS(SELECT w.the_geom\n" " FROM waterlines w\n" " WHERE ST_Within(w.the_geom, p.the_geom)\n" " AND ST_IsClosed(w.the_geom))\n" " THEN\n" " ST_MakePolygon(ST_LineMerge(ST_Boundary(p.the_geom)),\n" " ARRAY(SELECT w.the_geom\n" " FROM waterlines w\n" " WHERE ST_Within(w.the_geom, p.the_geom)\n" " AND ST_IsClosed(w.the_geom)))\n" " ELSE p.the_geom END As the_geom\n" " FROM\n" " provinces p;" msgstr "" #. Tag: para #: reference_constructor.xml:1174 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1187 #, no-c-format msgid "ST_MakePoint" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1189 #, no-c-format msgid "Creates a 2D,3DZ or 4D point geometry." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1194 #, no-c-format msgid "geometry ST_MakePoint double precision x double precision y" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1201 #, no-c-format msgid "geometry ST_MakePoint double precision x double precision y double precision z" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1209 #, no-c-format msgid "geometry ST_MakePoint double precision x double precision y double precision z double precision m" msgstr "" #. Tag: para #: reference_constructor.xml:1222 #, no-c-format msgid "Creates a 2D,3DZ or 4D point geometry (geometry with measure). ST_MakePoint while not being OGC compliant is generally faster and more precise than and . It is also easier to use if you have raw coordinates rather than WKT." msgstr "" #. Tag: para #: reference_constructor.xml:1228 #, no-c-format msgid "Note x is longitude and y is latitude" msgstr "" #. Tag: para #: reference_constructor.xml:1229 #, no-c-format msgid "Use if you need to make a point with x,y,m." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1236 #, no-c-format msgid "" "--Return point with unknown SRID\n" "SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829);\n" "\n" "--Return point marked as WGS 84 long lat\n" "SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);\n" "\n" "--Return a 3D point (e.g. has altitude)\n" "SELECT ST_MakePoint(1, 2,1.5);\n" "\n" "--Get z of point\n" "SELECT ST_Z(ST_MakePoint(1, 2,1.5));\n" "result\n" "-------\n" "1.5" msgstr "" #. Tag: para #: reference_constructor.xml:1240 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1246 #, no-c-format msgid "ST_MakePointM" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1248 #, no-c-format msgid "Creates a point geometry with an x y and m coordinate." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1253 #, no-c-format msgid "geometry ST_MakePointM float x float y float m" msgstr "" #. Tag: para #: reference_constructor.xml:1265 #, no-c-format msgid "Creates a point with x, y and measure coordinates." msgstr "" #. Tag: para #: reference_constructor.xml:1266 #, no-c-format msgid "Note x is longitude and y is latitude." msgstr "" #. Tag: para #: reference_constructor.xml:1271 #, no-c-format msgid "We use ST_AsEWKT in these examples to show the text representation instead of ST_AsText because ST_AsText does not support returning M." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1273 #, no-c-format msgid "" "--Return EWKT representation of point with unknown SRID\n" "SELECT ST_AsEWKT(ST_MakePointM(-71.1043443253471, 42.3150676015829, 10));\n" "\n" "--result\n" " st_asewkt\n" "-----------------------------------------------\n" " POINTM(-71.1043443253471 42.3150676015829 10)\n" "\n" "--Return EWKT representation of point with measure marked as WGS 84 long lat\n" "SELECT ST_AsEWKT(ST_SetSRID(ST_MakePointM(-71.1043443253471, 42.3150676015829,10),4326));\n" "\n" " st_asewkt\n" "---------------------------------------------------------\n" "SRID=4326;POINTM(-71.1043443253471 42.3150676015829 10)\n" "\n" "--Return a 3d point (e.g. has altitude)\n" "SELECT ST_MakePoint(1, 2,1.5);\n" "\n" "--Get m of point\n" "SELECT ST_M(ST_MakePointM(-71.1043443253471, 42.3150676015829,10));\n" "result\n" "-------\n" "10" msgstr "" #. Tag: para #: reference_constructor.xml:1277 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:1283 #, no-c-format msgid "ST_MLineFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1285 #, no-c-format msgid "Return a specified ST_MultiLineString value from WKT representation." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1289 #, no-c-format msgid " geometry ST_MLineFromText text WKT integer srid geometry ST_MLineFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:1307 #, no-c-format msgid "Makes a Geometry from Well-Known-Text (WKT) with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:1313 #, no-c-format msgid "Returns null if the WKT is not a MULTILINESTRING" msgstr "" #. Tag: para #: reference_constructor.xml:1316 reference_constructor.xml:1377 #, no-c-format msgid "If you are absolutely sure all your WKT geometries are points, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step." msgstr "" #. Tag: para #: reference_constructor.xml:1322 #, no-c-format msgid "&sqlmm_compliant;SQL-MM 3: 9.4.4" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1330 #, no-c-format msgid "SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))');" msgstr "" #. Tag: refname #: reference_constructor.xml:1343 #, no-c-format msgid "ST_MPointFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1345 reference_constructor.xml:1675 #, no-c-format msgid "Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1350 #, no-c-format msgid " geometry ST_MPointFromText text WKT integer srid geometry ST_MPointFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:1368 #, no-c-format msgid "Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:1374 #, no-c-format msgid "Returns null if the WKT is not a MULTIPOINT" msgstr "" #. Tag: para #: reference_constructor.xml:1382 #, no-c-format msgid "&sfs_compliant; 3.2.6.2" msgstr "" #. Tag: para #: reference_constructor.xml:1383 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.2.4" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1391 #, no-c-format msgid "" "SELECT ST_MPointFromText('MULTIPOINT(1 2, 3 4)');\n" "SELECT ST_MPointFromText('MULTIPOINT(-70.9590 42.1180, -70.9611 42.1223)', 4326);" msgstr "" #. Tag: refname #: reference_constructor.xml:1404 #, no-c-format msgid "ST_MPolyFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1406 #, no-c-format msgid "Makes a MultiPolygon Geometry from WKT with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1411 #, no-c-format msgid " geometry ST_MPolyFromText text WKT integer srid geometry ST_MPolyFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:1429 #, no-c-format msgid "Makes a MultiPolygon from WKT with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:1435 #, no-c-format msgid "Throws an error if the WKT is not a MULTIPOLYGON" msgstr "" #. Tag: para #: reference_constructor.xml:1438 #, no-c-format msgid "If you are absolutely sure all your WKT geometries are multipolygons, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step." msgstr "" #. Tag: para #: reference_constructor.xml:1444 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.6.4" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1452 #, no-c-format msgid "" "SELECT ST_MPolyFromText('MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),(5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))');\n" "SELECt ST_MPolyFromText('MULTIPOLYGON(((-70.916 42.1002,-70.9468 42.0946,-70.9765 42.0872,-70.9754 42.0875,-70.9749 42.0879,-70.9752 42.0881,-70.9754 42.0891,-70.9758 42.0894,-70.9759 42.0897,-70.9759 42.0899,-70.9754 42.0902,-70.9756 42.0906,-70.9753 42.0907,-70.9753 42.0917,-70.9757 42.0924,-70.9755 42.0928,-70.9755 42.0942,-70.9751 42.0948,-70.9755 42.0953,-70.9751 42.0958,-70.9751 42.0962,-70.9759 42.0983,-70.9767 42.0987,-70.9768 42.0991,-70.9771 42.0997,-70.9771 42.1003,-70.9768 42.1005,-70.977 42.1011,-70.9766 42.1019,-70.9768 42.1026,-70.9769 42.1033,-70.9775 42.1042,-70.9773 42.1043,-70.9776 42.1043,-70.9778 42.1048,-70.9773 42.1058,-70.9774 42.1061,-70.9779 42.1065,-70.9782 42.1078,-70.9788 42.1085,-70.9798 42.1087,-70.9806 42.109,-70.9807 42.1093,-70.9806 42.1099,-70.9809 42.1109,-70.9808 42.1112,-70.9798 42.1116,-70.9792 42.1127,-70.979 42.1129,-70.9787 42.1134,-70.979 42.1139,-70.9791 42.1141,-70.9987 42.1116,-71.0022 42.1273,\n" " -70.9408 42.1513,-70.9315 42.1165,-70.916 42.1002)))',4326);" msgstr "" #. Tag: refname #: reference_constructor.xml:1465 #, no-c-format msgid "ST_Point" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1467 #, no-c-format msgid "Returns an ST_Point with the given coordinate values. OGC alias for ST_MakePoint." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1472 #, no-c-format msgid "geometry ST_Point float x_lon float y_lat" msgstr "" #. Tag: para #: reference_constructor.xml:1483 #, no-c-format msgid "Returns an ST_Point with the given coordinate values. MM compliant alias for ST_MakePoint that takes just an x and y." msgstr "" #. Tag: para #: reference_constructor.xml:1486 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.2" msgstr "" #. Tag: title #: reference_constructor.xml:1492 #, no-c-format msgid "Examples: Geometry" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1494 #, no-c-format msgid "SELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326)" msgstr "" #. Tag: title #: reference_constructor.xml:1498 #, no-c-format msgid "Examples: Geography" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1500 #, no-c-format msgid "SELECT CAST(ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326) As geography);" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1501 #, no-c-format msgid "" "-- the :: is PostgreSQL short-hand for casting.\n" "SELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326)::geography;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1503 #, no-c-format msgid "" "--If your point coordinates are in a different spatial reference from WGS-84 long lat, then you need to transform before casting\n" "-- This example we convert a point in Pennsylvania State Plane feet to WGS 84 and then geography\n" "SELECT ST_Transform(ST_SetSRID(ST_Point(3637510, 3014852),2273),4326)::geography;" msgstr "" #. Tag: para #: reference_constructor.xml:1510 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1516 #, no-c-format msgid "ST_PointFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1517 #, no-c-format msgid "Makes a point Geometry from WKT with the given SRID. If SRID is not given, it defaults to unknown." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1521 #, no-c-format msgid " geometry ST_PointFromText text WKT geometry ST_PointFromText text WKT integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:1537 #, no-c-format msgid "Constructs a PostGIS ST_Geometry point object from the OGC Well-Known text representation. If SRID is not give, it defaults to unknown (currently -1). If geometry is not a WKT point representation, returns null. If completely invalid WKT, then throws an error." msgstr "" #. Tag: para #: reference_constructor.xml:1543 #, no-c-format msgid "There are 2 variants of ST_PointFromText function, the first takes no SRID and returns a geometry with no defined spatial reference system. The second takes a spatial reference id as the second argument and returns an ST_Geometry that includes this srid as part of its meta-data. The srid must be defined in the spatial_ref_sys table." msgstr "" #. Tag: para #: reference_constructor.xml:1550 #, no-c-format msgid "If you are absolutely sure all your WKT geometries are points, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step. If you are building points from long lat coordinates and care more about performance and accuracy than OGC compliance, use or OGC compliant alias ." msgstr "" #. Tag: para #: reference_constructor.xml:1555 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.8" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1560 #, no-c-format msgid "" "SELECT ST_PointFromText('POINT(-71.064544 42.28787)');\n" "SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);" msgstr "" #. Tag: para #: reference_constructor.xml:1564 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1570 #, no-c-format msgid "ST_PointFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1572 #, no-c-format msgid "Makes a geometry from WKB with the given SRID" msgstr "" #. Tag: para #: reference_constructor.xml:1593 #, no-c-format msgid "The ST_PointFromWKB function, takes a well-known binary representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this case, a POINT geometry. This function plays the role of the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:1599 #, no-c-format msgid "If an SRID is not specified, it defaults to -1. NULL is returned if the input bytea does not represent a POINT geometry." msgstr "" #. Tag: para #: reference_constructor.xml:1602 #, no-c-format msgid "&sfs_compliant; s3.2.7.2" msgstr "" #. Tag: para #: reference_constructor.xml:1603 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.9" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1611 #, no-c-format msgid "" "SELECT\n" " ST_AsText(\n" " ST_PointFromWKB(\n" " ST_AsEWKB('POINT(2 5)'::geometry)\n" " )\n" " );\n" " st_astext\n" "------------\n" " POINT(2 5)\n" "(1 row)\n" "\n" "SELECT\n" " ST_AsText(\n" " ST_PointFromWKB(\n" " ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry)\n" " )\n" " );\n" " st_astext\n" "-----------\n" "\n" "(1 row)" msgstr "" #. Tag: refname #: reference_constructor.xml:1624 #, no-c-format msgid "ST_Polygon" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1626 #, no-c-format msgid "Returns a polygon built from the specified linestring and SRID." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1631 #, no-c-format msgid "geometry ST_Polygon geometry aLineString integer srid" msgstr "" #. Tag: para #: reference_constructor.xml:1642 #, no-c-format msgid "Returns a polygon built from the specified linestring and SRID." msgstr "" #. Tag: para #: reference_constructor.xml:1646 #, no-c-format msgid "ST_Polygon is similar to first version oST_MakePolygon except it also sets the spatial ref sys (SRID) of the polygon. Will not work with MULTILINESTRINGS so use LineMerge to merge multilines. Also does not create polygons with holes. Use ST_MakePolygon for that." msgstr "" #. Tag: para #: reference_constructor.xml:1651 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.3.2" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1660 #, no-c-format msgid "" "--a 2d polygon\n" "SELECT ST_Polygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)'), 4326);\n" "\n" "--result--\n" "POLYGON((75.15 29.53,77 29,77.6 29.5,75.15 29.53))\n" "--a 3d polygon\n" "SELECT ST_AsEWKT(ST_Polygon(ST_GeomFromEWKT('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'), 4326));\n" "\n" "result\n" "------\n" "SRID=4326;POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))" msgstr "" #. Tag: para #: reference_constructor.xml:1667 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1673 #, no-c-format msgid "ST_PolygonFromText" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1680 #, no-c-format msgid " geometry ST_PolygonFromText text WKT geometry ST_PolygonFromText text WKT integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:1696 #, no-c-format msgid "Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to -1. Returns null if WKT is not a polygon." msgstr "" #. Tag: para #: reference_constructor.xml:1703 #, no-c-format msgid "If you are absolutely sure all your WKT geometries are polygons, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step." msgstr "" #. Tag: para #: reference_constructor.xml:1706 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.3.6" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1712 #, no-c-format msgid "" "SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,\n" "-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');\n" "st_polygonfromtext\n" "------------------\n" "010300000001000000050000006...\n" "\n" "\n" "SELECT ST_PolygonFromText('POINT(1 2)') IS NULL as point_is_notpoly;\n" "\n" "point_is_not_poly\n" "----------\n" "t" msgstr "" #. Tag: refname #: reference_constructor.xml:1725 #, no-c-format msgid "ST_WKBToSQL" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1726 #, no-c-format msgid "Return a specified ST_Geometry value from Well-Known Binary representation (WKB). This is an alias name for ST_GeomFromWKB that takes no srid" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1730 #, no-c-format msgid "geometry ST_WKBToSQL bytea WKB" msgstr "" #. Tag: para #: reference_constructor.xml:1738 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.36" msgstr "" #. Tag: refname #: reference_constructor.xml:1748 #, no-c-format msgid "ST_WKTToSQL" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1753 #, no-c-format msgid "geometry ST_WKTToSQL text WKT" msgstr "" #. Tag: para #: reference_constructor.xml:1761 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.34" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_accessor.xml.pot0000644000000000000000000026124612025614072024116 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_accessor.xml:4 #, no-c-format msgid "Geometry Accessors" msgstr "" #. Tag: refname #: reference_accessor.xml:8 #, no-c-format msgid "GeometryType" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:10 #, no-c-format msgid "Returns the type of the geometry as a string. Eg: 'LINESTRING', 'POLYGON', 'MULTIPOINT', etc." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:16 #, no-c-format msgid "text GeometryType geometry geomA" msgstr "" #. Tag: title #: reference_accessor.xml:24 reference_accessor.xml:81 reference_accessor.xml:128 reference_accessor.xml:176 reference_accessor.xml:224 reference_accessor.xml:273 reference_accessor.xml:325 reference_accessor.xml:374 reference_accessor.xml:435 reference_accessor.xml:486 reference_accessor.xml:545 reference_accessor.xml:604 reference_accessor.xml:659 reference_accessor.xml:703 reference_accessor.xml:754 reference_accessor.xml:811 reference_accessor.xml:876 reference_accessor.xml:928 reference_accessor.xml:987 reference_accessor.xml:1033 reference_accessor.xml:1068 reference_accessor.xml:1107 reference_accessor.xml:1147 reference_accessor.xml:1193 reference_accessor.xml:1232 reference_accessor.xml:1265 reference_accessor.xml:1306 reference_accessor.xml:1350 reference_accessor.xml:1407 reference_accessor.xml:1460 reference_accessor.xml:1503 reference_accessor.xml:1554 reference_accessor.xml:1618 reference_accessor.xml:1661 reference_accessor.xml:1706 reference_accessor.xml:1752 reference_accessor.xml:1794 reference_accessor.xml:1839 reference_accessor.xml:1885 reference_accessor.xml:1927 reference_accessor.xml:1973 reference_accessor.xml:2014 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_accessor.xml:26 #, no-c-format msgid "Returns the type of the geometry as a string. Eg: 'LINESTRING', 'POLYGON', 'MULTIPOINT', etc." msgstr "" #. Tag: para #: reference_accessor.xml:29 #, no-c-format msgid "OGC SPEC s2.1.1.1 - Returns the name of the instantiable subtype of Geometry of which this Geometry instance is a member. The name of the instantiable subtype of Geometry is returned as a string." msgstr "" #. Tag: para #: reference_accessor.xml:35 #, no-c-format msgid "This function also indicates if the geometry is measured, by returning a string of the form 'POINTM'." msgstr "" #. Tag: para #: reference_accessor.xml:38 reference_accessor.xml:388 reference_accessor.xml:1152 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced." msgstr "" #. Tag: para #: reference_accessor.xml:39 reference_accessor.xml:134 reference_accessor.xml:390 reference_accessor.xml:497 reference_accessor.xml:550 reference_accessor.xml:830 reference_accessor.xml:996 reference_accessor.xml:1272 reference_accessor.xml:1314 reference_accessor.xml:1423 reference_accessor.xml:1757 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_accessor.xml:40 reference_accessor.xml:136 reference_accessor.xml:393 reference_accessor.xml:559 reference_accessor.xml:624 reference_accessor.xml:670 reference_accessor.xml:1074 reference_accessor.xml:1112 reference_accessor.xml:1426 reference_accessor.xml:1468 reference_accessor.xml:1671 reference_accessor.xml:1716 reference_accessor.xml:1804 reference_accessor.xml:1849 reference_accessor.xml:1937 reference_accessor.xml:1979 reference_accessor.xml:2024 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_accessor.xml:41 reference_accessor.xml:96 reference_accessor.xml:137 reference_accessor.xml:231 reference_accessor.xml:334 reference_accessor.xml:392 reference_accessor.xml:441 reference_accessor.xml:499 reference_accessor.xml:558 reference_accessor.xml:623 reference_accessor.xml:768 reference_accessor.xml:998 reference_accessor.xml:1038 reference_accessor.xml:1073 reference_accessor.xml:1111 reference_accessor.xml:1156 reference_accessor.xml:1271 reference_accessor.xml:1367 reference_accessor.xml:1425 reference_accessor.xml:1510 reference_accessor.xml:1626 reference_accessor.xml:1670 reference_accessor.xml:1715 reference_accessor.xml:1759 reference_accessor.xml:1803 reference_accessor.xml:1848 reference_accessor.xml:1893 reference_accessor.xml:1936 reference_accessor.xml:1978 reference_accessor.xml:2023 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_accessor.xml:42 reference_accessor.xml:138 reference_accessor.xml:189 reference_accessor.xml:394 reference_accessor.xml:442 reference_accessor.xml:562 reference_accessor.xml:1075 reference_accessor.xml:1157 reference_accessor.xml:1274 reference_accessor.xml:1368 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_accessor.xml:43 reference_accessor.xml:139 reference_accessor.xml:190 reference_accessor.xml:395 reference_accessor.xml:1158 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: title #: reference_accessor.xml:49 reference_accessor.xml:100 reference_accessor.xml:144 reference_accessor.xml:194 reference_accessor.xml:241 reference_accessor.xml:295 reference_accessor.xml:339 reference_accessor.xml:447 reference_accessor.xml:505 reference_accessor.xml:629 reference_accessor.xml:677 reference_accessor.xml:722 reference_accessor.xml:773 reference_accessor.xml:837 reference_accessor.xml:893 reference_accessor.xml:953 reference_accessor.xml:1004 reference_accessor.xml:1042 reference_accessor.xml:1080 reference_accessor.xml:1117 reference_accessor.xml:1163 reference_accessor.xml:1204 reference_accessor.xml:1278 reference_accessor.xml:1319 reference_accessor.xml:1374 reference_accessor.xml:1432 reference_accessor.xml:1473 reference_accessor.xml:1520 reference_accessor.xml:1574 reference_accessor.xml:1632 reference_accessor.xml:1676 reference_accessor.xml:1721 reference_accessor.xml:1765 reference_accessor.xml:1809 reference_accessor.xml:1854 reference_accessor.xml:1898 reference_accessor.xml:1942 reference_accessor.xml:1984 reference_accessor.xml:2029 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:51 #, no-c-format msgid "" "SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));\n" " geometrytype\n" "--------------\n" " LINESTRING" msgstr "" #. Tag: programlisting #: reference_accessor.xml:52 #, no-c-format msgid "" "SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));\n" " --result\n" " POLYHEDRALSURFACE" msgstr "" #. Tag: programlisting #: reference_accessor.xml:53 #, no-c-format msgid "" "SELECT GeometryType(geom) as result\n" " FROM\n" " (SELECT \n" " ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') AS geom\n" " ) AS g;\n" " result\n" "--------\n" " TIN" msgstr "" #. Tag: title #: reference_accessor.xml:58 reference_accessor.xml:105 reference_accessor.xml:151 reference_accessor.xml:199 reference_accessor.xml:247 reference_accessor.xml:300 reference_accessor.xml:344 reference_accessor.xml:414 reference_accessor.xml:458 reference_accessor.xml:512 reference_accessor.xml:579 reference_accessor.xml:635 reference_accessor.xml:728 reference_accessor.xml:779 reference_accessor.xml:843 reference_accessor.xml:900 reference_accessor.xml:960 reference_accessor.xml:1010 reference_accessor.xml:1047 reference_accessor.xml:1085 reference_accessor.xml:1124 reference_accessor.xml:1168 reference_accessor.xml:1209 reference_accessor.xml:1243 reference_accessor.xml:1283 reference_accessor.xml:1324 reference_accessor.xml:1381 reference_accessor.xml:1438 reference_accessor.xml:1478 reference_accessor.xml:1526 reference_accessor.xml:1580 reference_accessor.xml:1638 reference_accessor.xml:1683 reference_accessor.xml:1728 reference_accessor.xml:1771 reference_accessor.xml:1816 reference_accessor.xml:1861 reference_accessor.xml:1904 reference_accessor.xml:1949 reference_accessor.xml:1991 reference_accessor.xml:2036 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_accessor.xml:64 #, no-c-format msgid "ST_Boundary" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:66 #, no-c-format msgid "Returns the closure of the combinatorial boundary of this Geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:72 #, no-c-format msgid "geometry ST_Boundary geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:83 #, no-c-format msgid "Returns the closure of the combinatorial boundary of this Geometry. The combinatorial boundary is defined as described in section 3.12.3.2 of the OGC SPEC. Because the result of this function is a closure, and hence topologically closed, the resulting boundary can be represented using representational geometry primitives as discussed in the OGC SPEC, section 3.12.2." msgstr "" #. Tag: para #: reference_accessor.xml:90 #, no-c-format msgid "Performed by the GEOS module" msgstr "" #. Tag: para #: reference_accessor.xml:92 #, no-c-format msgid "Prior to 2.0.0, this function throws an exception if used with GEOMETRYCOLLECTION. From 2.0.0 up it will return NULL instead (unsupported input)." msgstr "" #. Tag: para #: reference_accessor.xml:94 #, no-c-format msgid "&sfs_compliant; OGC SPEC s2.1.1.1" msgstr "" #. Tag: para #: reference_accessor.xml:95 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.14" msgstr "" #. Tag: programlisting #: reference_accessor.xml:102 #, no-c-format msgid "" "SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')));\n" "st_astext\n" "-----------\n" "MULTIPOINT(1 1,-1 1)\n" "\n" "SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')));\n" "st_astext\n" "----------\n" "LINESTRING(1 1,0 0,-1 1,1 1)\n" "\n" "--Using a 3d polygon\n" "SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, 1 1 1))')));\n" "\n" "st_asewkt\n" "-----------------------------------\n" "LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1)\n" "\n" "--Using a 3d multilinestring\n" "SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )')));\n" "\n" "st_asewkt\n" "----------\n" "MULTIPOINT(-1 1 1,1 1 0.75)" msgstr "" #. Tag: para #: reference_accessor.xml:107 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:113 #, no-c-format msgid "ST_CoordDim" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:115 #, no-c-format msgid "Return the coordinate dimension of the ST_Geometry value." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:120 #, no-c-format msgid "integer ST_CoordDim geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:130 #, no-c-format msgid "Return the coordinate dimension of the ST_Geometry value." msgstr "" #. Tag: para #: reference_accessor.xml:132 #, no-c-format msgid "This is the MM compliant alias name for " msgstr "" #. Tag: para #: reference_accessor.xml:135 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:146 #, no-c-format msgid "" "SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)');\n" " ---result--\n" " 3\n" "\n" " SELECT ST_CoordDim(ST_Point(1,2));\n" " --result--\n" " 2" msgstr "" #. Tag: refname #: reference_accessor.xml:159 #, no-c-format msgid "ST_Dimension" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:161 #, no-c-format msgid "The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:167 #, no-c-format msgid "integer ST_Dimension geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:178 #, no-c-format msgid "The inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension. OGC SPEC s2.1.1.1 - returns 0 for POINT, 1 for LINESTRING, 2 for POLYGON, and the largest dimension of the components of a GEOMETRYCOLLECTION. If unknown (empty geometry) null is returned." msgstr "" #. Tag: para #: reference_accessor.xml:186 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.2" msgstr "" #. Tag: para #: reference_accessor.xml:187 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces and TINs was introduced. No longer throws an exception if given empty geometry." msgstr "" #. Tag: para #: reference_accessor.xml:188 #, no-c-format msgid "Prior to 2.0.0, this function throws an exception if used with empty geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:196 #, no-c-format msgid "" "SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');\n" "ST_Dimension\n" "-----------\n" "1" msgstr "" #. Tag: refname #: reference_accessor.xml:207 #, no-c-format msgid "ST_EndPoint" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:209 #, no-c-format msgid "Returns the last point of a LINESTRING geometry as a POINT." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:215 #, no-c-format msgid "boolean ST_EndPoint geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:226 #, no-c-format msgid "Returns the last point of a LINESTRING geometry as a POINT or NULL if the input parameter is not a LINESTRING." msgstr "" #. Tag: para #: reference_accessor.xml:230 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.4" msgstr "" #. Tag: para #: reference_accessor.xml:232 reference_accessor.xml:1511 #, no-c-format msgid "Changed: 2.0.0 no longer works with single geometry multilinestrings. In older versions of PostGIS -- a single line multilinestring would work happily with this function and return the start point. In 2.0.0 it just returns NULL like any other multilinestring. The older behavior was an undocumented feature, but people who assumed they had their data stored as LINESTRING may experience these returning NULL in 2.0 now." msgstr "" #. Tag: programlisting #: reference_accessor.xml:243 #, no-c-format msgid "" "postgis=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));\n" " st_astext\n" "------------\n" " POINT(3 3)\n" "(1 row)\n" "\n" "postgis=# SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;\n" " is_null\n" "----------\n" " t\n" "(1 row)\n" "\n" "--3d endpoint\n" "SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)'));\n" " st_asewkt\n" "--------------\n" " POINT(0 0 5)\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:249 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:256 #, no-c-format msgid "ST_Envelope" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:258 #, no-c-format msgid "Returns a geometry representing the double precision (float8) bounding box of the supplied geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:264 #, no-c-format msgid "geometry ST_Envelope geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:275 #, no-c-format msgid "Returns the float8 minimum bounding box for the supplied geometry, as a geometry. The polygon is defined by the corner points of the bounding box ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY)). (PostGIS will add a ZMIN/ZMAX coordinate as well)." msgstr "" #. Tag: para #: reference_accessor.xml:285 #, no-c-format msgid "Degenerate cases (vertical lines, points) will return a geometry of lower dimension than POLYGON, ie. POINT or LINESTRING." msgstr "" #. Tag: para #: reference_accessor.xml:289 #, no-c-format msgid "Availability: 1.5.0 behavior changed to output double precision instead of float4" msgstr "" #. Tag: para #: reference_accessor.xml:290 reference_accessor.xml:668 reference_accessor.xml:766 reference_accessor.xml:1466 #, no-c-format msgid "&sfs_compliant; s2.1.1.1" msgstr "" #. Tag: para #: reference_accessor.xml:291 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.15" msgstr "" #. Tag: programlisting #: reference_accessor.xml:297 #, no-c-format msgid "" "SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));\n" " st_astext\n" "------------\n" " POINT(1 3)\n" "(1 row)\n" "\n" "\n" "SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));\n" " st_astext\n" "--------------------------------\n" " POLYGON((0 0,0 3,1 3,1 0,0 0))\n" "(1 row)\n" "\n" "\n" "SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 0))'::geometry));\n" " st_astext\n" "--------------------------------------------------------------\n" " POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))\n" "(1 row)\n" "SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, 1.0000000001 0, 0 0))'::geometry));\n" " st_astext\n" "--------------------------------------------------------------\n" " POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))\n" "(1 row)\n" " \n" "SELECT Box3D(geom), Box2D(geom), ST_AsText(ST_Envelope(geom)) As envelopewkt\n" " FROM (SELECT 'POLYGON((0 0, 0 1000012333334.34545678, 1.0000001 1, 1.0000001 0, 0 0))'::geometry As geom) As foo;\n" "\n" "" msgstr "" #. Tag: para #: reference_accessor.xml:302 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:308 #, no-c-format msgid "ST_ExteriorRing" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:310 #, no-c-format msgid "Returns a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon. Will not work with MULTIPOLYGON" msgstr "" #. Tag: funcprototype #: reference_accessor.xml:316 #, no-c-format msgid "geometry ST_ExteriorRing geometry a_polygon" msgstr "" #. Tag: para #: reference_accessor.xml:327 #, no-c-format msgid "Returns a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon." msgstr "" #. Tag: para #: reference_accessor.xml:330 #, no-c-format msgid "Only works with POLYGON geometry types" msgstr "" #. Tag: para #: reference_accessor.xml:332 reference_accessor.xml:712 #, no-c-format msgid "&sfs_compliant; 2.1.5.1" msgstr "" #. Tag: para #: reference_accessor.xml:333 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.2.3, 8.3.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:340 #, no-c-format msgid "" "--If you have a table of polygons\n" "SELECT gid, ST_ExteriorRing(the_geom) AS ering\n" "FROM sometable;\n" "\n" "--If you have a table of MULTIPOLYGONs\n" "--and want to return a MULTILINESTRING composed of the exterior rings of each polygon\n" "SELECT gid, ST_Collect(ST_ExteriorRing(the_geom)) AS erings\n" " FROM (SELECT gid, (ST_Dump(the_geom)).geom As the_geom\n" " FROM sometable) As foo\n" "GROUP BY gid;\n" "\n" "--3d Example\n" "SELECT ST_AsEWKT(\n" " ST_ExteriorRing(\n" " ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))')\n" " )\n" ");\n" "\n" "st_asewkt\n" "---------\n" "LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)" msgstr "" #. Tag: para #: reference_accessor.xml:346 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_accessor.xml:356 #, no-c-format msgid "ST_GeometryN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:358 #, no-c-format msgid "Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE Otherwise, return NULL." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:365 #, no-c-format msgid "geometry ST_GeometryN geometry geomA integer n" msgstr "" #. Tag: para #: reference_accessor.xml:376 #, no-c-format msgid "Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE Otherwise, return NULL" msgstr "" #. Tag: para #: reference_accessor.xml:381 reference_accessor.xml:1414 #, no-c-format msgid "Index is 1-based as for OGC specs since version 0.8.0. Previous versions implemented this as 0-based instead." msgstr "" #. Tag: para #: reference_accessor.xml:386 #, no-c-format msgid "If you want to extract all geometries, of a geometry, ST_Dump is more efficient and will also work for singular geoms." msgstr "" #. Tag: para #: reference_accessor.xml:389 #, no-c-format msgid "Changed: 2.0.0 Prior versions would return NULL for singular geometries. This was changed to return the geometry for ST_GeometryN(..,1) case." msgstr "" #. Tag: para #: reference_accessor.xml:391 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.1.5" msgstr "" #. Tag: title #: reference_accessor.xml:401 #, no-c-format msgid "Standard Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:403 #, no-c-format msgid "" "--Extracting a subset of points from a 3d multipoint\n" "SELECT n, ST_AsEWKT(ST_GeometryN(the_geom, n)) As geomewkt\n" "FROM (\n" "VALUES (ST_GeomFromEWKT('MULTIPOINT(1 2 7, 3 4 7, 5 6 7, 8 9 10)') ),\n" "( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') )\n" " )As foo(the_geom)\n" " CROSS JOIN generate_series(1,100) n\n" "WHERE n <= ST_NumGeometries(the_geom);\n" "\n" " n | geomewkt\n" "---+-----------------------------------------\n" " 1 | POINT(1 2 7)\n" " 2 | POINT(3 4 7)\n" " 3 | POINT(5 6 7)\n" " 4 | POINT(8 9 10)\n" " 1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)\n" " 2 | LINESTRING(10 11,12 11)\n" "\n" "\n" "--Extracting all geometries (useful when you want to assign an id)\n" "SELECT gid, n, ST_GeometryN(the_geom, n)\n" "FROM sometable CROSS JOIN generate_series(1,100) n\n" "WHERE n <= ST_NumGeometries(the_geom);" msgstr "" #. Tag: title #: reference_accessor.xml:406 #, no-c-format msgid "Polyhedral Surfaces, TIN and Triangle Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:407 #, no-c-format msgid "" "-- Polyhedral surface example\n" "-- Break a Polyhedral surface into its faces\n" "SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt\n" " FROM (SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE( \n" "((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), \n" "((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" "((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), \n" "((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) \n" ")') AS p_geom ) AS a;\n" "\n" " geom_ewkt\n" "------------------------------------------\n" " POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))" msgstr "" #. Tag: programlisting #: reference_accessor.xml:409 #, no-c-format msgid "" "-- TIN -- \n" "SELECT ST_AsEWKT(ST_GeometryN(geom,2)) as wkt\n" " FROM\n" " (SELECT \n" " ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') AS geom\n" " ) AS g;\n" "-- result --\n" " wkt\n" "-------------------------------------\n" " TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))" msgstr "" #. Tag: para #: reference_accessor.xml:416 reference_accessor.xml:1285 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:422 #, no-c-format msgid "ST_GeometryType" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:423 #, no-c-format msgid "Return the geometry type of the ST_Geometry value." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:428 #, no-c-format msgid "text ST_GeometryType geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:437 #, no-c-format msgid "Returns the type of the geometry as a string. EG: 'ST_Linestring', 'ST_Polygon','ST_MultiPolygon' etc. This function differs from GeometryType(geometry) in the case of the string and ST in front that is returned, as well as the fact that it will not indicate whether the geometry is measured." msgstr "" #. Tag: para #: reference_accessor.xml:439 reference_accessor.xml:560 reference_accessor.xml:1071 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces was introduced." msgstr "" #. Tag: para #: reference_accessor.xml:440 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:449 #, no-c-format msgid "" "SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));\n" " --result\n" " ST_LineString" msgstr "" #. Tag: programlisting #: reference_accessor.xml:451 reference_accessor.xml:453 #, no-c-format msgid "" "SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));\n" " --result\n" " ST_PolyhedralSurface" msgstr "" #. Tag: programlisting #: reference_accessor.xml:455 #, no-c-format msgid "" "SELECT ST_GeometryType(geom) as result\n" " FROM\n" " (SELECT \n" " ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') AS geom\n" " ) AS g;\n" " result\n" "--------\n" " ST_Tin" msgstr "" #. Tag: refname #: reference_accessor.xml:468 #, no-c-format msgid "ST_InteriorRingN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:470 #, no-c-format msgid "Return the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:477 #, no-c-format msgid "geometry ST_InteriorRingN geometry a_polygon integer n" msgstr "" #. Tag: para #: reference_accessor.xml:488 #, no-c-format msgid "Return the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range. index starts at 1." msgstr "" #. Tag: para #: reference_accessor.xml:494 #, no-c-format msgid "This will not work for MULTIPOLYGONs. Use in conjunction with ST_Dump for MULTIPOLYGONS" msgstr "" #. Tag: para #: reference_accessor.xml:498 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.2.6, 8.3.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:507 #, no-c-format msgid "" "SELECT ST_AsText(ST_InteriorRingN(the_geom, 1)) As the_geom\n" "FROM (SELECT ST_BuildArea(\n" " ST_Collect(ST_Buffer(ST_Point(1,2), 20,3),\n" " ST_Buffer(ST_Point(1, 2), 10,3))) As the_geom\n" " ) as foo" msgstr "" #. Tag: para #: reference_accessor.xml:514 #, no-c-format msgid ", , , ," msgstr "" #. Tag: refname #: reference_accessor.xml:527 #, no-c-format msgid "ST_IsClosed" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:529 #, no-c-format msgid "Returns TRUE if the LINESTRING's start and end points are coincident. For Polyhedral surface is closed (volumetric)." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:536 #, no-c-format msgid "boolean ST_IsClosed geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:547 #, no-c-format msgid "Returns TRUE if the LINESTRING's start and end points are coincident. For Polyhedral Surfaces, it tells you if the surface is areal (open) or volumetric (closed)." msgstr "" #. Tag: para #: reference_accessor.xml:551 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.5, 9.3.3" msgstr "" #. Tag: para #: reference_accessor.xml:553 #, no-c-format msgid "SQL-MM defines the result of ST_IsClosed(NULL) to be 0, while PostGIS returns NULL." msgstr "" #. Tag: title #: reference_accessor.xml:567 #, no-c-format msgid "Line String and Point Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:569 #, no-c-format msgid "" "postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);\n" " st_isclosed\n" "-------------\n" " f\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);\n" " st_isclosed\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry);\n" " st_isclosed\n" "-------------\n" " f\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('POINT(0 0)'::geometry);\n" " st_isclosed\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);\n" " st_isclosed\n" "-------------\n" " t\n" "(1 row)" msgstr "" #. Tag: title #: reference_accessor.xml:573 #, no-c-format msgid "Polyhedral Surface Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:575 #, no-c-format msgid "" "-- A cube --\n" " SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));\n" "\n" " st_isclosed\n" "-------------\n" " t\n" "\n" "\n" " -- Same as cube but missing a side --\n" " SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)) )'));\n" "\n" " st_isclosed\n" "-------------\n" " f" msgstr "" #. Tag: refname #: reference_accessor.xml:587 #, no-c-format msgid "ST_IsCollection" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:589 #, no-c-format msgid "Returns TRUE if the argument is a collection (MULTI*, GEOMETRYCOLLECTION, ...)" msgstr "" #. Tag: funcprototype #: reference_accessor.xml:596 #, no-c-format msgid "boolean ST_IsCollection geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:606 #, no-c-format msgid "Returns TRUE if the geometry type of the argument is either:" msgstr "" #. Tag: para #: reference_accessor.xml:609 #, no-c-format msgid "GEOMETRYCOLLECTION" msgstr "" #. Tag: para #: reference_accessor.xml:610 #, no-c-format msgid "MULTI{POINT,POLYGON,LINESTRING,CURVE,SURFACE}" msgstr "" #. Tag: para #: reference_accessor.xml:611 #, no-c-format msgid "COMPOUNDCURVE" msgstr "" #. Tag: para #: reference_accessor.xml:616 #, no-c-format msgid "This function analyzes the type of the geometry. This means that it will return TRUE on collections that are empty or that contain a single element." msgstr "" #. Tag: programlisting #: reference_accessor.xml:631 #, no-c-format msgid "" "postgis=# SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);\n" " st_iscollection\n" "-------------\n" " f\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:643 #, no-c-format msgid "ST_IsEmpty" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:645 #, no-c-format msgid "Returns true if this Geometry is an empty geometrycollection, polygon, point etc." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:651 #, no-c-format msgid "boolean ST_IsEmpty geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:661 #, no-c-format msgid "Returns true if this Geometry is an empty geometry. If true, then this Geometry represents an empty geometry collection, polygon, point etc." msgstr "" #. Tag: para #: reference_accessor.xml:664 #, no-c-format msgid "SQL-MM defines the result of ST_IsEmpty(NULL) to be 0, while PostGIS returns NULL." msgstr "" #. Tag: para #: reference_accessor.xml:669 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.7" msgstr "" #. Tag: para #: reference_accessor.xml:671 #, no-c-format msgid "Changed: 2.0.0 In prior versions of PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') was allowed. This is now illegal in PostGIS 2.0.0 to better conform with SQL/MM standards" msgstr "" #. Tag: programlisting #: reference_accessor.xml:679 #, no-c-format msgid "" "SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));\n" " st_isempty\n" "------------\n" " t\n" "(1 row)\n" "\n" " SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));\n" " st_isempty\n" "------------\n" " t\n" "(1 row)\n" "\n" "SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));\n" "\n" " st_isempty\n" "------------\n" " f\n" "(1 row)\n" "\n" " SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = false;\n" " ?column?\n" "----------\n" " t\n" "(1 row)\n" "\n" " SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY'));\n" " st_isempty\n" "------------\n" " t\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:686 #, no-c-format msgid "ST_IsRing" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:688 #, no-c-format msgid "Returns TRUE if this LINESTRING is both closed and simple." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:694 #, no-c-format msgid "boolean ST_IsRing geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:705 #, no-c-format msgid "Returns TRUE if this LINESTRING is both (ST_StartPoint(g) ~= ST_Endpoint(g)) and (does not self intersect)." msgstr "" #. Tag: para #: reference_accessor.xml:713 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.6" msgstr "" #. Tag: para #: reference_accessor.xml:715 #, no-c-format msgid "SQL-MM defines the result of ST_IsRing(NULL) to be 0, while PostGIS returns NULL." msgstr "" #. Tag: programlisting #: reference_accessor.xml:724 #, no-c-format msgid "" "SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom)\n" "FROM (SELECT 'LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'::geometry AS the_geom) AS foo;\n" " st_isring | st_isclosed | st_issimple\n" "-----------+-------------+-------------\n" " t | t | t\n" "(1 row)\n" "\n" "SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom)\n" "FROM (SELECT 'LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)'::geometry AS the_geom) AS foo;\n" " st_isring | st_isclosed | st_issimple\n" "-----------+-------------+-------------\n" " f | t | f\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:730 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:738 #, no-c-format msgid "ST_IsSimple" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:740 #, no-c-format msgid "Returns (TRUE) if this Geometry has no anomalous geometric points, such as self intersection or self tangency." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:746 #, no-c-format msgid "boolean ST_IsSimple geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:756 #, no-c-format msgid "Returns true if this Geometry has no anomalous geometric points, such as self intersection or self tangency. For more information on the OGC's definition of geometry simplicity and validity, refer to \"Ensuring OpenGIS compliancy of geometries\"" msgstr "" #. Tag: para #: reference_accessor.xml:762 #, no-c-format msgid "SQL-MM defines the result of ST_IsSimple(NULL) to be 0, while PostGIS returns NULL." msgstr "" #. Tag: para #: reference_accessor.xml:767 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.8" msgstr "" #. Tag: programlisting #: reference_accessor.xml:775 #, no-c-format msgid "" "SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));\n" " st_issimple\n" "-------------\n" " t\n" "(1 row)\n" "\n" " SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));\n" " st_issimple\n" "-------------\n" " f\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:787 #, no-c-format msgid "ST_IsValid" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:789 #, no-c-format msgid "Returns true if the ST_Geometry is well formed." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:795 #, no-c-format msgid " boolean ST_IsValid geometry g boolean ST_IsValid geometry g integer flags " msgstr "" #. Tag: para #: reference_accessor.xml:813 #, no-c-format msgid "Test if an ST_Geometry value is well formed. For geometries that are invalid, the PostgreSQL NOTICE will provide details of why it is not valid. For more information on the OGC's definition of geometry simplicity and validity, refer to \"Ensuring OpenGIS compliancy of geometries\"" msgstr "" #. Tag: para #: reference_accessor.xml:819 #, no-c-format msgid "SQL-MM defines the result of ST_IsValid(NULL) to be 0, while PostGIS returns NULL." msgstr "" #. Tag: para #: reference_accessor.xml:823 #, no-c-format msgid "The version accepting flags is available starting with 2.0.0 and requires GEOS >= 3.3.0. Such version does not print a NOTICE explaining the invalidity. Allowed flags are documented in ." msgstr "" #. Tag: para #: reference_accessor.xml:831 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.9" msgstr "" #. Tag: programlisting #: reference_accessor.xml:839 #, no-c-format msgid "" "SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line,\n" " ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) As bad_poly\n" "--results\n" "NOTICE: Self-intersection at or near point 0 0\n" " good_line | bad_poly\n" "-----------+----------\n" " t | f" msgstr "" #. Tag: para #: reference_accessor.xml:845 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:856 #, no-c-format msgid "ST_IsValidReason" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:858 #, no-c-format msgid "Returns text stating if a geometry is valid or not and if not valid, a reason why." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:862 #, no-c-format msgid " text ST_IsValidReason geometry geomA text ST_IsValidReason geometry geomA integer flags " msgstr "" #. Tag: para #: reference_accessor.xml:878 #, no-c-format msgid "Returns text stating if a geometry is valid or not an if not valid, a reason why." msgstr "" #. Tag: para #: reference_accessor.xml:880 #, no-c-format msgid "Useful in combination with ST_IsValid to generate a detailed report of invalid geometries and reasons." msgstr "" #. Tag: para #: reference_accessor.xml:882 #, no-c-format msgid "Allowed flags are documented in ." msgstr "" #. Tag: para #: reference_accessor.xml:886 #, no-c-format msgid "Availability: 1.4 - requires GEOS >= 3.1.0." msgstr "" #. Tag: para #: reference_accessor.xml:887 #, no-c-format msgid "Availability: 2.0 - requires GEOS >= 3.3.0 for the version taking flags." msgstr "" #. Tag: programlisting #: reference_accessor.xml:895 #, no-c-format msgid "" "--First 3 Rejects from a successful quintuplet experiment\n" "SELECT gid, ST_IsValidReason(the_geom) as validity_info\n" "FROM\n" "(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), ST_Accum(f.line)) As the_geom, gid\n" "FROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid\n" " FROM generate_series(-4,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,8) z1\n" " WHERE x1 > y1*0.5 AND z1 < x1*y1) As e\n" " INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_MakePoint(x1*10,y1), z1)),y1*1, z1*2) As line\n" " FROM generate_series(-3,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,10) z1\n" " WHERE x1 > y1*0.75 AND z1 < x1*y1) As f\n" "ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))\n" "GROUP BY gid, e.buff) As quintuplet_experiment\n" "WHERE ST_IsValid(the_geom) = false\n" "ORDER BY gid\n" "LIMIT 3;\n" "\n" " gid | validity_info\n" "------+--------------------------\n" " 5330 | Self-intersection [32 5]\n" " 5340 | Self-intersection [42 5]\n" " 5350 | Self-intersection [52 5]\n" "\n" " --simple example\n" "SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');\n" "\n" " st_isvalidreason\n" "------------------\n" " Valid Geometry" msgstr "" #. Tag: para #: reference_accessor.xml:902 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:908 #, no-c-format msgid "ST_IsValidDetail" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:910 #, no-c-format msgid "Returns a valid_detail (valid,reason,location) row stating if a geometry is valid or not and if not valid, a reason why and a location where." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:914 #, no-c-format msgid " valid_detail ST_IsValidDetail geometry geom valid_detail ST_IsValidDetail geometry geom integer flags " msgstr "" #. Tag: para #: reference_accessor.xml:930 #, no-c-format msgid "Returns a valid_detail row, formed by a boolean (valid) stating if a geometry is valid, a varchar (reason) stating a reason why it is invalid and a geometry (location) pointing out where it is invalid." msgstr "" #. Tag: para #: reference_accessor.xml:932 #, no-c-format msgid "Useful to substitute and improve the combination of ST_IsValid and ST_IsValidReason to generate a detailed report of invalid geometries." msgstr "" #. Tag: para #: reference_accessor.xml:934 #, no-c-format msgid "The 'flags' argument is a bitfield. It can have the following values:" msgstr "" #. Tag: para #: reference_accessor.xml:938 #, no-c-format msgid "1: Consider self-intersecting rings forming holes as valid. This is also know as \"the ESRI flag\". Note that this is against the OGC model." msgstr "" #. Tag: para #: reference_accessor.xml:947 #, no-c-format msgid "Availability: 2.0.0 - requires GEOS >= 3.3.0." msgstr "" #. Tag: programlisting #: reference_accessor.xml:955 #, no-c-format msgid "" "--First 3 Rejects from a successful quintuplet experiment\n" "SELECT gid, reason(ST_IsValidDetail(the_geom)), ST_AsText(location(ST_IsValidDetail(the_geom))) as location \n" "FROM\n" "(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), ST_Accum(f.line)) As the_geom, gid\n" "FROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid\n" " FROM generate_series(-4,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,8) z1\n" " WHERE x1 > y1*0.5 AND z1 < x1*y1) As e\n" " INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_MakePoint(x1*10,y1), z1)),y1*1, z1*2) As line\n" " FROM generate_series(-3,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,10) z1\n" " WHERE x1 > y1*0.75 AND z1 < x1*y1) As f\n" "ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))\n" "GROUP BY gid, e.buff) As quintuplet_experiment\n" "WHERE ST_IsValid(the_geom) = false\n" "ORDER BY gid\n" "LIMIT 3;\n" "\n" " gid | reason | location\n" "------+-------------------+-------------\n" " 5330 | Self-intersection | POINT(32 5)\n" " 5340 | Self-intersection | POINT(42 5)\n" " 5350 | Self-intersection | POINT(52 5)\n" "\n" " --simple example\n" "SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)');\n" "\n" " valid | reason | location\n" "-------+--------+----------\n" " t | |" msgstr "" #. Tag: para #: reference_accessor.xml:962 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:971 #, no-c-format msgid "ST_M" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:973 #, no-c-format msgid "Return the M coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:979 #, no-c-format msgid "float ST_M geometry a_point" msgstr "" #. Tag: para #: reference_accessor.xml:989 #, no-c-format msgid "Return the M coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: para #: reference_accessor.xml:993 #, no-c-format msgid "This is not (yet) part of the OGC spec, but is listed here to complete the point coordinate extractor function list." msgstr "" #. Tag: para #: reference_accessor.xml:997 reference_accessor.xml:1892 #, no-c-format msgid "&sqlmm_compliant;" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1005 #, no-c-format msgid "" "SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_m\n" "------\n" " 4\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1012 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1018 #, no-c-format msgid "ST_NDims" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1019 #, no-c-format msgid "Returns coordinate dimension of the geometry as a small int. Values are: 2,3 or 4." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1025 #, no-c-format msgid "integer ST_NDims geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1035 #, no-c-format msgid "Returns the coordinate dimension of the geometry. PostGIS supports 2 - (x,y) , 3 - (x,y,z) or 2D with measure - x,y,m, and 4 - 3D with measure space x,y,z,m" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1044 #, no-c-format msgid "" "SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,\n" " ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,\n" " ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;\n" "\n" " d2point | d3point | d2pointm\n" "---------+---------+----------\n" " 2 | 3 | 3" msgstr "" #. Tag: para #: reference_accessor.xml:1048 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_accessor.xml:1054 #, no-c-format msgid "ST_NPoints" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1055 #, no-c-format msgid "Return the number of points (vertexes) in a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1060 #, no-c-format msgid "integer ST_NPoints geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1070 #, no-c-format msgid "Return the number of points in a geometry. Works for all geometries." msgstr "" #. Tag: para #: reference_accessor.xml:1072 #, no-c-format msgid "Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1082 #, no-c-format msgid "" "SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));\n" "--result\n" "4\n" "\n" "--Polygon in 3D space\n" "SELECT ST_NPoints(ST_GeomFromEWKT('LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)'))\n" "--result\n" "4" msgstr "" #. Tag: refname #: reference_accessor.xml:1093 #, no-c-format msgid "ST_NRings" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1094 #, no-c-format msgid "If the geometry is a polygon or multi-polygon returns the number of rings." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1099 #, no-c-format msgid "integer ST_NRings geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:1109 #, no-c-format msgid "If the geometry is a polygon or multi-polygon returns the number of rings. Unlike NumInteriorRings, it counts the outer rings as well." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1119 #, no-c-format msgid "" "SELECT ST_NRings(the_geom) As Nrings, ST_NumInteriorRings(the_geom) As ninterrings\n" " FROM (SELECT ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))') As the_geom) As foo;\n" " nrings | ninterrings\n" "--------+-------------\n" " 1 | 0\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:1132 #, no-c-format msgid "ST_NumGeometries" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1133 #, no-c-format msgid "If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single geometries will return 1, otherwise return NULL." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1139 #, no-c-format msgid "integer ST_NumGeometries geometry geom" msgstr "" #. Tag: para #: reference_accessor.xml:1149 #, no-c-format msgid "Returns the number of Geometries. If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single geometries will return 1, otherwise return NULL." msgstr "" #. Tag: para #: reference_accessor.xml:1153 #, no-c-format msgid "Changed: 2.0.0 In prior versions this would return NULL if the geometry was not a collection/MULTI type. 2.0.0+ now returns 1 for single geometries e.g POLYGON, LINESTRING, POINT." msgstr "" #. Tag: para #: reference_accessor.xml:1155 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.1.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1165 #, no-c-format msgid "" "--Prior versions would have returned NULL for this -- in 2.0.0 this returns 1\n" "SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));\n" "--result\n" "1\n" "\n" "--Geometry Collection Example - multis count as one geom in a collection\n" "SELECT ST_NumGeometries(ST_GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2),\n" "LINESTRING(5 5 ,10 10),\n" "POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))'));\n" "--result\n" "3" msgstr "" #. Tag: para #: reference_accessor.xml:1170 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:1176 #, no-c-format msgid "ST_NumInteriorRings" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1177 #, no-c-format msgid "Return the number of interior rings of the first polygon in the geometry. This will work with both POLYGON and MULTIPOLYGON types but only looks at the first polygon. Return NULL if there is no polygon in the geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1185 #, no-c-format msgid "integer ST_NumInteriorRings geometry a_polygon" msgstr "" #. Tag: para #: reference_accessor.xml:1195 #, no-c-format msgid "Return the number of interior rings of the first polygon in the geometry. This will work with both POLYGON and MULTIPOLYGON types but only looks at the first polygon. Return NULL if there is no polygon in the geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1200 reference_accessor.xml:1239 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.2.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1206 #, no-c-format msgid "" "--If you have a regular polygon\n" "SELECT gid, field1, field2, ST_NumInteriorRings(the_geom) AS numholes\n" "FROM sometable;\n" "\n" "--If you have multipolygons\n" "--And you want to know the total number of interior rings in the MULTIPOLYGON\n" "SELECT gid, field1, field2, SUM(ST_NumInteriorRings(the_geom)) AS numholes\n" "FROM (SELECT gid, field1, field2, (ST_Dump(the_geom)).geom As the_geom\n" " FROM sometable) As foo\n" "GROUP BY gid, field1,field2;" msgstr "" #. Tag: refname #: reference_accessor.xml:1217 #, no-c-format msgid "ST_NumInteriorRing" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1218 #, no-c-format msgid "Return the number of interior rings of the first polygon in the geometry. Synonym to ST_NumInteriorRings." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1224 #, no-c-format msgid "integer ST_NumInteriorRing geometry a_polygon" msgstr "" #. Tag: para #: reference_accessor.xml:1234 #, no-c-format msgid "Return the number of interior rings of the first polygon in the geometry. Synonym to ST_NumInteriorRings. The OpenGIS specs are ambiguous about the exact function naming, so we provide both spellings." msgstr "" #. Tag: refname #: reference_accessor.xml:1251 #, no-c-format msgid "ST_NumPatches" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1252 #, no-c-format msgid "Return the number of faces on a Polyhedral Surface. Will return null for non-polyhedral geometries." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1257 #, no-c-format msgid "integer ST_NumPatches geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1267 #, no-c-format msgid "Return the number of faces on a Polyhedral Surface. Will return null for non-polyhedral geometries. This is an alias for ST_NumGeometries to support MM naming. Faster to use ST_NumGeometries if you don't care about MM convention." msgstr "" #. Tag: para #: reference_accessor.xml:1270 reference_accessor.xml:1365 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: para #: reference_accessor.xml:1273 reference_accessor.xml:1366 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: ?" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1280 #, no-c-format msgid "" "SELECT ST_NumPatches(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));\n" " --result\n" " 6" msgstr "" #. Tag: refname #: reference_accessor.xml:1291 #, no-c-format msgid "ST_NumPoints" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1292 #, no-c-format msgid "Return the number of points in an ST_LineString or ST_CircularString value." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1298 #, no-c-format msgid "integer ST_NumPoints geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1308 #, no-c-format msgid "Return the number of points in an ST_LineString or ST_CircularString value. Prior to 1.4 only works with Linestrings as the specs state. From 1.4 forward this is an alias for ST_NPoints which returns number of vertexes for not just line strings. Consider using ST_NPoints instead which is multi-purpose and works with many geometry types." msgstr "" #. Tag: para #: reference_accessor.xml:1315 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1321 #, no-c-format msgid "" "SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));\n" " --result\n" " 4" msgstr "" #. Tag: refname #: reference_accessor.xml:1332 #, no-c-format msgid "ST_PatchN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1334 #, no-c-format msgid "Return the 1-based Nth geometry (face) if the geometry is a POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise, return NULL." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1341 #, no-c-format msgid "geometry ST_PatchN geometry geomA integer n" msgstr "" #. Tag: para #: reference_accessor.xml:1352 #, no-c-format msgid ">Return the 1-based Nth geometry (face) if the geometry is a POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise, return NULL. This returns the same answer as ST_GeometryN for Polyhedral Surfaces. Using ST_GemoetryN is faster." msgstr "" #. Tag: para #: reference_accessor.xml:1358 #, no-c-format msgid "Index is 1-based." msgstr "" #. Tag: para #: reference_accessor.xml:1362 #, no-c-format msgid "If you want to extract all geometries, of a geometry, ST_Dump is more efficient." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1376 #, no-c-format msgid "" "--Extract the 2nd face of the polyhedral surface\n" "SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt\n" "FROM (\n" "VALUES (ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ) As foo(geom);\n" "\n" " geomewkt\n" "---+-----------------------------------------\n" " POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))" msgstr "" #. Tag: para #: reference_accessor.xml:1383 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1389 #, no-c-format msgid "ST_PointN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1391 #, no-c-format msgid "Return the Nth point in the first linestring or circular linestring in the geometry. Return NULL if there is no linestring in the geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1398 #, no-c-format msgid "geometry ST_PointN geometry a_linestring integer n" msgstr "" #. Tag: para #: reference_accessor.xml:1409 #, no-c-format msgid "Return the Nth point in the first linestring or circular linestring in the geometry. Return NULL if there is no linestring in the geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1419 #, no-c-format msgid "If you want to get the nth point of each line string in a multilinestring, use in conjunction with ST_Dump" msgstr "" #. Tag: para #: reference_accessor.xml:1424 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.5, 7.3.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1434 #, no-c-format msgid "" "-- Extract all POINTs from a LINESTRING\n" "SELECT ST_AsText(\n" " ST_PointN(\n" " column1,\n" " generate_series(1, ST_NPoints(column1))\n" " ))\n" "FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo;\n" "\n" " st_astext\n" "------------\n" " POINT(0 0)\n" " POINT(1 1)\n" " POINT(2 2)\n" "(3 rows)\n" "\n" "--Example circular string\n" "SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'),2));\n" "\n" "st_astext\n" "----------\n" "POINT(3 2)" msgstr "" #. Tag: refname #: reference_accessor.xml:1446 #, no-c-format msgid "ST_SRID" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1447 #, no-c-format msgid "Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1452 #, no-c-format msgid "integer ST_SRID geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1462 #, no-c-format msgid "Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table. " msgstr "" #. Tag: para #: reference_accessor.xml:1463 #, no-c-format msgid "spatial_ref_sys table is a table that catalogs all spatial reference systems known to PostGIS and is used for transformations from one spatial reference system to another. So verifying you have the right spatial reference system identifier is important if you plan to ever transform your geometries." msgstr "" #. Tag: para #: reference_accessor.xml:1467 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1475 #, no-c-format msgid "" "SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));\n" " --result\n" " 4326" msgstr "" #. Tag: para #: reference_accessor.xml:1480 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1486 #, no-c-format msgid "ST_StartPoint" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1488 #, no-c-format msgid "Returns the first point of a LINESTRING geometry as a POINT." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1494 #, no-c-format msgid "geometry ST_StartPoint geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:1505 #, no-c-format msgid "Returns the first point of a LINESTRING geometry as a POINT or NULL if the input parameter is not a LINESTRING." msgstr "" #. Tag: para #: reference_accessor.xml:1509 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1522 #, no-c-format msgid "" "SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));\n" " st_astext\n" "------------\n" " POINT(0 1)\n" "(1 row)\n" "\n" "SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null;\n" " is_null\n" "----------\n" " t\n" "(1 row)\n" "\n" "--3d line\n" "SELECT ST_AsEWKT(ST_StartPoint('LINESTRING(0 1 1, 0 2 2)'::geometry));\n" " st_asewkt\n" "------------\n" " POINT(0 1 1)\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1528 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:1533 #, no-c-format msgid "ST_Summary" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1535 #, no-c-format msgid "Returns a text summary of the contents of the geometry." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:1541 #, no-c-format msgid " text ST_Summary geometry g text ST_Summary geography g " msgstr "" #. Tag: para #: reference_accessor.xml:1556 #, no-c-format msgid "Returns a text summary of the contents of the geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1558 #, no-c-format msgid "Flags shown square brackets after the geometry type have the following meaning:" msgstr "" #. Tag: para #: reference_accessor.xml:1562 #, no-c-format msgid "M: has M ordinate" msgstr "" #. Tag: para #: reference_accessor.xml:1563 #, no-c-format msgid "Z: has Z ordinate" msgstr "" #. Tag: para #: reference_accessor.xml:1564 #, no-c-format msgid "B: has a cached bounding box" msgstr "" #. Tag: para #: reference_accessor.xml:1565 #, no-c-format msgid "G: is geodetic (geography)" msgstr "" #. Tag: para #: reference_accessor.xml:1569 #, no-c-format msgid "Availability: 1.2.2 - 2.0.0 added support for geography" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1576 #, no-c-format msgid "" "=# SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom,\n" " ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) geog;\n" " geom | geog \n" "-----------------------------+--------------------------\n" " LineString[B] with 2 points | Polygon[BG] with 1 rings\n" " : ring 0 has 5 points\n" " :\n" "(1 row)\n" "\n" "\n" "=# SELECT ST_Summary(ST_GeogFromText('LINESTRING(0 0 1, 1 1 1)')) As geog_line,\n" " ST_Summary(ST_GeomFromText('POLYGON((0 0 1, 1 1 2, 1 2 3, 1 1 1, 0 0 1))')) As geom_poly;\n" ";\n" " geog_line | geom_poly\n" "-------------------------------+--------------------------\n" " LineString[ZBG] with 2 points | Polygon[ZB] with 1 rings\n" " : ring 0 has 5 points\n" " :\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1582 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: para #: reference_accessor.xml:1591 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1602 #, no-c-format msgid "ST_X" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1604 #, no-c-format msgid "Return the X coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1610 #, no-c-format msgid "float ST_X geometry a_point" msgstr "" #. Tag: para #: reference_accessor.xml:1620 #, no-c-format msgid "Return the X coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: para #: reference_accessor.xml:1623 #, no-c-format msgid "If you want to get the max min x values of any geometry look at ST_XMin, ST_XMax functions." msgstr "" #. Tag: para #: reference_accessor.xml:1625 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1633 #, no-c-format msgid "" "SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_x\n" "------\n" " 1\n" "(1 row)\n" "\n" "SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));\n" " st_y\n" "------\n" " 1.5\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1640 #, no-c-format msgid ", , , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1646 #, no-c-format msgid "ST_XMax" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1648 #, no-c-format msgid "Returns X maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1653 #, no-c-format msgid "float ST_XMax box3d aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1663 #, no-c-format msgid "Returns X maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1666 reference_accessor.xml:1711 reference_accessor.xml:1799 reference_accessor.xml:1844 reference_accessor.xml:1932 reference_accessor.xml:2019 #, no-c-format msgid "Although this function is only defined for box3d, it will work for box2d and geometry because of the auto-casting behavior defined for geometries and box2d. However you can not feed it a geometry or box2d text representation, since that will not auto-cast." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1678 #, no-c-format msgid "" "SELECT ST_XMax('BOX3D(1 2 3, 4 5 6)');\n" "st_xmax\n" "-------\n" "4\n" "\n" "SELECT ST_XMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_xmax\n" "-------\n" "5\n" "\n" "SELECT ST_XMax(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_xmax\n" "-------\n" "3\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D\n" "SELECT ST_XMax('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_XMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));\n" "st_xmax\n" "--------\n" "220288.248780547" msgstr "" #. Tag: para #: reference_accessor.xml:1685 reference_accessor.xml:1730 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1691 #, no-c-format msgid "ST_XMin" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1693 #, no-c-format msgid "Returns X minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1698 #, no-c-format msgid "float ST_XMin box3d aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1708 #, no-c-format msgid "Returns X minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1723 #, no-c-format msgid "" "SELECT ST_XMin('BOX3D(1 2 3, 4 5 6)');\n" "st_xmin\n" "-------\n" "1\n" "\n" "SELECT ST_XMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_xmin\n" "-------\n" "1\n" "\n" "SELECT ST_XMin(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_xmin\n" "-------\n" "-3\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D\n" "SELECT ST_XMin('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_XMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));\n" "st_xmin\n" "--------\n" "220186.995121892" msgstr "" #. Tag: refname #: reference_accessor.xml:1736 #, no-c-format msgid "ST_Y" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1738 #, no-c-format msgid "Return the Y coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1744 #, no-c-format msgid "float ST_Y geometry a_point" msgstr "" #. Tag: para #: reference_accessor.xml:1754 #, no-c-format msgid "Return the Y coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: para #: reference_accessor.xml:1758 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1766 #, no-c-format msgid "" "SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_y\n" "------\n" " 2\n" "(1 row)\n" "\n" "SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));\n" " st_y\n" "------\n" " 1.5\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1773 #, no-c-format msgid ", , , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1779 #, no-c-format msgid "ST_YMax" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1781 #, no-c-format msgid "Returns Y maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1786 #, no-c-format msgid "float ST_YMax box3d aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1796 #, no-c-format msgid "Returns Y maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1811 #, no-c-format msgid "" "SELECT ST_YMax('BOX3D(1 2 3, 4 5 6)');\n" "st_ymax\n" "-------\n" "5\n" "\n" "SELECT ST_YMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_ymax\n" "-------\n" "6\n" "\n" "SELECT ST_YMax(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_ymax\n" "-------\n" "4\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D\n" "SELECT ST_YMax('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_YMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));\n" "st_ymax\n" "--------\n" "150506.126829327" msgstr "" #. Tag: para #: reference_accessor.xml:1818 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1824 #, no-c-format msgid "ST_YMin" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1826 #, no-c-format msgid "Returns Y minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1831 #, no-c-format msgid "float ST_YMin box3d aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1841 #, no-c-format msgid "Returns Y minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1856 #, no-c-format msgid "" "SELECT ST_YMin('BOX3D(1 2 3, 4 5 6)');\n" "st_ymin\n" "-------\n" "2\n" "\n" "SELECT ST_YMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_ymin\n" "-------\n" "3\n" "\n" "SELECT ST_YMin(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_ymin\n" "-------\n" "2\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D\n" "SELECT ST_YMin('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_YMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));\n" "st_ymin\n" "--------\n" "150406" msgstr "" #. Tag: para #: reference_accessor.xml:1863 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1869 #, no-c-format msgid "ST_Z" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1871 #, no-c-format msgid "Return the Z coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1877 #, no-c-format msgid "float ST_Z geometry a_point" msgstr "" #. Tag: para #: reference_accessor.xml:1887 #, no-c-format msgid "Return the Z coordinate of the point, or NULL if not available. Input must be a point." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1899 #, no-c-format msgid "" "SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_z\n" "------\n" " 3\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1906 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1912 #, no-c-format msgid "ST_ZMax" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1914 reference_accessor.xml:2001 #, no-c-format msgid "Returns Z minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1919 #, no-c-format msgid "float ST_ZMax box3d aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1929 #, no-c-format msgid "Returns Z maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1944 #, no-c-format msgid "" "SELECT ST_ZMax('BOX3D(1 2 3, 4 5 6)');\n" "st_zmax\n" "-------\n" "6\n" "\n" "SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));\n" "st_zmax\n" "-------\n" "7\n" "\n" "SELECT ST_ZMax('BOX3D(-3 2 1, 3 4 1)' );\n" "st_zmax\n" "-------\n" "1\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D\n" "SELECT ST_ZMax('LINESTRING(1 3 4, 5 6 7)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_ZMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));\n" "st_zmax\n" "--------\n" "3" msgstr "" #. Tag: para #: reference_accessor.xml:1951 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1957 #, no-c-format msgid "ST_Zmflag" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1959 #, no-c-format msgid "Returns ZM (dimension semantic) flag of the geometries as a small int. Values are: 0=2d, 1=3dm, 2=3dz, 3=4d." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1965 #, no-c-format msgid "smallint ST_Zmflag geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:1975 #, no-c-format msgid "Returns ZM (dimension semantic) flag of the geometries as a small int. Values are: 0=2d, 1=3dm, 2=3dz, 3=4d." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1986 #, no-c-format msgid "" "SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));\n" " st_zmflag\n" "-----------\n" " 0\n" "\n" "SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));\n" " st_zmflag\n" "-----------\n" " 1\n" "\n" "SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));\n" " st_zmflag\n" "-----------\n" " 2\n" "SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_zmflag\n" "-----------\n" " 3" msgstr "" #. Tag: para #: reference_accessor.xml:1993 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_accessor.xml:1999 #, no-c-format msgid "ST_ZMin" msgstr "" #. Tag: funcprototype #: reference_accessor.xml:2006 #, no-c-format msgid "float ST_ZMin box3d aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:2016 #, no-c-format msgid "Returns Z minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:2031 #, no-c-format msgid "" "SELECT ST_ZMin('BOX3D(1 2 3, 4 5 6)');\n" "st_zmin\n" "-------\n" "3\n" "\n" "SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));\n" "st_zmin\n" "-------\n" "4\n" "\n" "SELECT ST_ZMin('BOX3D(-3 2 1, 3 4 1)' );\n" "st_zmin\n" "-------\n" "1\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string representation to a BOX3D\n" "SELECT ST_ZMin('LINESTRING(1 3 4, 5 6 7)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_ZMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));\n" "st_zmin\n" "--------\n" "1" msgstr "" #. Tag: para #: reference_accessor.xml:2038 #, no-c-format msgid ", , , , , , " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_type.xml.pot0000644000000000000000000001527512025614072023274 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 21:04+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: para #: reference_type.xml:5 #, no-c-format msgid "This section lists the PostgreSQL data types installed by PostGIS. Note we describe the casting behavior of these which is very important especially when designing your own functions." msgstr "" #. Tag: para #: reference_type.xml:8 #, no-c-format msgid "A Cast is when one type is coerced into another type. PostgreSQL is unique from most databases in that it allows you to define casting behavior for custom types and the functions used for casting. A cast can be specified as automatic in which case, you do not have to do a CAST(myfoo As otherfootype) or myfoo::otherfootype if you are feeding it to a function that only works with otherfootype and there is an automatic cast in place for it." msgstr "" #. Tag: para #: reference_type.xml:13 #, no-c-format msgid "The danger of relying on automatic cast behavior is when you have an overloaded function say one that takes a box2d and one that takes a box3d but no geometry. What happens is that both functions are equally good to use with geometry since geometry has an autocast for both -- so you end up with an ambiguous function error. To force PostgreSQL to choose, you do a CAST(mygeom As box3d) or mygeom::box3d." msgstr "" #. Tag: para #: reference_type.xml:17 #, no-c-format msgid "At least as of PostgreSQL 8.3 - Everything can be CAST to text (presumably because of the magical unknown type), so no defined CASTS for that need to be present for you to CAST an object to text." msgstr "" #. Tag: title #: reference_type.xml:20 #, no-c-format msgid "PostgreSQL PostGIS Geometry/Geography/Box Types" msgstr "" #. Tag: refname #: reference_type.xml:24 #, no-c-format msgid "box2d" msgstr "" #. Tag: refpurpose #: reference_type.xml:25 #, no-c-format msgid "A box composed of x min, ymin, xmax, ymax. Often used to return the 2d enclosing box of a geometry." msgstr "" #. Tag: title #: reference_type.xml:29 reference_type.xml:40 reference_type.xml:79 reference_type.xml:136 reference_type.xml:155 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_type.xml:30 #, no-c-format msgid "box2d is a spatial data type used to represent the enclosing box of a geometry or set of geometries. ST_Extent in earlier versions prior to PostGIS 1.4 would return a box2d." msgstr "" #. Tag: refname #: reference_type.xml:35 #, no-c-format msgid "box3d" msgstr "" #. Tag: refpurpose #: reference_type.xml:36 #, no-c-format msgid "A box composed of x min, ymin, zmin, xmax, ymax, zmax. Often used to return the 3d extent of a geometry or collection of geometries." msgstr "" #. Tag: para #: reference_type.xml:41 #, no-c-format msgid "box3d is a postgis spatial data type used to represent the enclosing box of a geometry or set of geometries. ST_3DExtent returns a box3d object." msgstr "" #. Tag: title #: reference_type.xml:45 reference_type.xml:84 reference_type.xml:160 #, no-c-format msgid "Casting Behavior" msgstr "" #. Tag: para #: reference_type.xml:46 reference_type.xml:85 reference_type.xml:161 #, no-c-format msgid "This section lists the automatic as well as explicit casts allowed for this data type" msgstr "" #. Tag: entry #: reference_type.xml:51 reference_type.xml:90 reference_type.xml:166 #, no-c-format msgid "Cast To" msgstr "" #. Tag: entry #: reference_type.xml:52 reference_type.xml:91 reference_type.xml:167 #, no-c-format msgid "Behavior" msgstr "" #. Tag: entry #: reference_type.xml:55 reference_type.xml:94 #, no-c-format msgid "box" msgstr "" #. Tag: entry #: reference_type.xml:56 reference_type.xml:60 reference_type.xml:64 reference_type.xml:95 reference_type.xml:99 reference_type.xml:103 reference_type.xml:107 reference_type.xml:111 reference_type.xml:115 #, no-c-format msgid "automatic" msgstr "" #. Tag: entry #: reference_type.xml:59 reference_type.xml:98 #, no-c-format msgid "box2d" msgstr "" #. Tag: entry #: reference_type.xml:63 reference_type.xml:170 #, no-c-format msgid "geometry" msgstr "" #. Tag: refname #: reference_type.xml:74 #, no-c-format msgid "geometry" msgstr "" #. Tag: refpurpose #: reference_type.xml:75 #, no-c-format msgid "Planar spatial data type." msgstr "" #. Tag: para #: reference_type.xml:80 #, no-c-format msgid "geometry is a fundamental postgis spatial data type used to represent a feature in the Euclidean coordinate system." msgstr "" #. Tag: entry #: reference_type.xml:102 #, no-c-format msgid "box3d" msgstr "" #. Tag: entry #: reference_type.xml:106 #, no-c-format msgid "bytea" msgstr "" #. Tag: entry #: reference_type.xml:110 #, no-c-format msgid "geography" msgstr "" #. Tag: entry #: reference_type.xml:114 #, no-c-format msgid "text" msgstr "" #. Tag: title #: reference_type.xml:123 reference_type.xml:143 reference_type.xml:179 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_type.xml:130 #, no-c-format msgid "geometry_dump" msgstr "" #. Tag: refpurpose #: reference_type.xml:131 #, no-c-format msgid "A spatial datatype with two fields - geom (holding a geometry object) and path[] (a 1-d array holding the position of the geometry within the dumped object.)" msgstr "" #. Tag: para #: reference_type.xml:137 #, no-c-format msgid "geometry_dump is a compound data type consisting of a geometry object referenced by the .geom field and path[] a 1-dimensional integer array (starting at 1 e.g. path[1] to get first element) array that defines the navigation path within the dumped geometry to find this element. It is used by the ST_Dump* family of functions as an output type to explode a more complex geometry into its constituent parts and location of parts." msgstr "" #. Tag: refname #: reference_type.xml:150 #, no-c-format msgid "geography" msgstr "" #. Tag: refpurpose #: reference_type.xml:151 #, no-c-format msgid "Ellipsoidal spatial data type." msgstr "" #. Tag: para #: reference_type.xml:156 #, no-c-format msgid "geography is a spatial data type used to represent a feature in the round-earth coordinate system." msgstr "" #. Tag: entry #: reference_type.xml:171 #, no-c-format msgid "explicit" msgstr "" #. Tag: para #: reference_type.xml:180 #, no-c-format msgid ", " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_transaction.xml.pot0000644000000000000000000002560112025614072024632 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_transaction.xml:3 #, no-c-format msgid "Long Transactions Support" msgstr "" #. Tag: para #: reference_transaction.xml:5 #, no-c-format msgid "This module and associated pl/pgsql functions have been implemented to provide long locking support required by Web Feature Service specification." msgstr "" #. Tag: para #: reference_transaction.xml:10 #, no-c-format msgid "Users must use serializable transaction level otherwise locking mechanism would break." msgstr "" #. Tag: refname #: reference_transaction.xml:18 #, no-c-format msgid "AddAuth" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:20 #, no-c-format msgid "Add an authorization token to be used in current transaction." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:25 #, no-c-format msgid "boolean AddAuth text auth_token" msgstr "" #. Tag: title #: reference_transaction.xml:33 reference_transaction.xml:83 reference_transaction.xml:130 reference_transaction.xml:177 reference_transaction.xml:241 reference_transaction.xml:284 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_transaction.xml:35 #, no-c-format msgid "Add an authorization token to be used in current transaction." msgstr "" #. Tag: para #: reference_transaction.xml:37 #, no-c-format msgid "Creates/adds to a temp table called temp_lock_have_table the current transaction identifier and authorization token key." msgstr "" #. Tag: para #: reference_transaction.xml:40 reference_transaction.xml:92 reference_transaction.xml:138 reference_transaction.xml:185 reference_transaction.xml:248 reference_transaction.xml:289 #, no-c-format msgid "Availability: 1.1.3" msgstr "" #. Tag: title #: reference_transaction.xml:45 reference_transaction.xml:98 reference_transaction.xml:144 reference_transaction.xml:191 reference_transaction.xml:253 reference_transaction.xml:294 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_transaction.xml:47 #, no-c-format msgid "" "SELECT LockRow('towns', '353', 'priscilla');\n" " BEGIN TRANSACTION;\n" " SELECT AddAuth('joey');\n" " UPDATE towns SET the_geom = ST_Translate(the_geom,2,2) WHERE gid = 353;\n" " COMMIT;\n" "\n" "\n" " ---Error--\n" " ERROR: UPDATE where \"gid\" = '353' requires authorization 'priscilla'" msgstr "" #. Tag: title #: reference_transaction.xml:52 reference_transaction.xml:105 reference_transaction.xml:151 reference_transaction.xml:198 reference_transaction.xml:260 reference_transaction.xml:301 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_transaction.xml:60 #, no-c-format msgid "CheckAuth" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:62 #, no-c-format msgid "Creates trigger on a table to prevent/allow updates and deletes of rows based on authorization token." msgstr "" #. Tag: funcsynopsis #: reference_transaction.xml:66 #, no-c-format msgid " integer CheckAuth text a_schema_name text a_table_name text a_key_column_name integer CheckAuth text a_table_name text a_key_column_name " msgstr "" #. Tag: para #: reference_transaction.xml:85 #, no-c-format msgid "Creates trigger on a table to prevent/allow updates and deletes of rows based on authorization token. Identify rows using <rowid_col> column." msgstr "" #. Tag: para #: reference_transaction.xml:87 #, no-c-format msgid "If a_schema_name is not passed in, then searches for table in current schema." msgstr "" #. Tag: para #: reference_transaction.xml:88 #, no-c-format msgid "If an authorization trigger already exists on this table function errors." msgstr "" #. Tag: para #: reference_transaction.xml:89 #, no-c-format msgid "If Transaction support is not enabled, function throws an exception." msgstr "" #. Tag: programlisting #: reference_transaction.xml:100 #, no-c-format msgid "" "SELECT CheckAuth('public', 'towns', 'gid');\n" " result\n" " ------\n" " 0" msgstr "" #. Tag: refname #: reference_transaction.xml:113 #, no-c-format msgid "DisableLongTransactions" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:115 #, no-c-format msgid "Disable long transaction support. This function removes the long transaction support metadata tables, and drops all triggers attached to lock-checked tables." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:122 #, no-c-format msgid "text DisableLongTransactions " msgstr "" #. Tag: para #: reference_transaction.xml:132 #, no-c-format msgid "Disable long transaction support. This function removes the long transaction support metadata tables, and drops all triggers attached to lock-checked tables." msgstr "" #. Tag: para #: reference_transaction.xml:135 #, no-c-format msgid "Drops meta table called authorization_table and a view called authorized_tables and all triggers called checkauthtrigger" msgstr "" #. Tag: programlisting #: reference_transaction.xml:146 #, no-c-format msgid "" "SELECT DisableLongTransactions();\n" "--result--\n" "Long transactions support disabled" msgstr "" #. Tag: refname #: reference_transaction.xml:159 #, no-c-format msgid "EnableLongTransactions" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:161 #, no-c-format msgid "Enable long transaction support. This function creates the required metadata tables, needs to be called once before using the other functions in this section. Calling it twice is harmless." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:169 #, no-c-format msgid "text EnableLongTransactions " msgstr "" #. Tag: para #: reference_transaction.xml:179 #, no-c-format msgid "Enable long transaction support. This function creates the required metadata tables, needs to be called once before using the other functions in this section. Calling it twice is harmless." msgstr "" #. Tag: para #: reference_transaction.xml:183 #, no-c-format msgid "Creates a meta table called authorization_table and a view called authorized_tables" msgstr "" #. Tag: programlisting #: reference_transaction.xml:193 #, no-c-format msgid "" "SELECT EnableLongTransactions();\n" "--result--\n" "Long transactions support enabled" msgstr "" #. Tag: refname #: reference_transaction.xml:206 #, no-c-format msgid "LockRow" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:208 #, no-c-format msgid "Set lock/authorization for specific row in table" msgstr "" #. Tag: funcsynopsis #: reference_transaction.xml:212 #, no-c-format msgid " integer LockRow text a_schema_name text a_table_name text a_row_key text an_auth_token timestamp expire_dt integer LockRow text a_table_name text a_row_key text an_auth_token timestamp expire_dt integer LockRow text a_table_name text a_row_key text an_auth_token " msgstr "" #. Tag: para #: reference_transaction.xml:243 #, no-c-format msgid "Set lock/authorization for specific row in table <authid> is a text value, <expires> is a timestamp defaulting to now()+1hour. Returns 1 if lock has been assigned, 0 otherwise (already locked by other auth)" msgstr "" #. Tag: programlisting #: reference_transaction.xml:255 #, no-c-format msgid "" "SELECT LockRow('public', 'towns', '2', 'joey');\n" "LockRow\n" "-------\n" "1\n" "\n" "--Joey has already locked the record and Priscilla is out of luck\n" "SELECT LockRow('public', 'towns', '2', 'priscilla');\n" "LockRow\n" "-------\n" "0" msgstr "" #. Tag: refname #: reference_transaction.xml:268 #, no-c-format msgid "UnlockRows" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:270 #, no-c-format msgid "Remove all locks held by specified authorization id. Returns the number of locks released." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:276 #, no-c-format msgid "integer UnlockRows text auth_token" msgstr "" #. Tag: para #: reference_transaction.xml:286 #, no-c-format msgid "Remove all locks held by specified authorization id. Returns the number of locks released." msgstr "" #. Tag: programlisting #: reference_transaction.xml:296 #, no-c-format msgid "" "SELECT LockRow('towns', '353', 'priscilla');\n" " SELECT LockRow('towns', '2', 'priscilla');\n" " SELECT UnLockRows('priscilla');\n" " UnLockRows\n" " ------------\n" " 2" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/using_postgis_app.xml.pot0000644000000000000000000005316712025614072024034 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: using_postgis_app.xml:3 #, no-c-format msgid "Using PostGIS Geometry: Building Applications" msgstr "" #. Tag: title #: using_postgis_app.xml:5 #, no-c-format msgid "Using MapServer" msgstr "" #. Tag: para #: using_postgis_app.xml:7 #, no-c-format msgid "The Minnesota MapServer is an internet web-mapping server which conforms to the OpenGIS Web Mapping Server specification." msgstr "" #. Tag: para #: using_postgis_app.xml:12 #, no-c-format msgid "The MapServer homepage is at http://mapserver.org." msgstr "" #. Tag: para #: using_postgis_app.xml:17 #, no-c-format msgid "The OpenGIS Web Map Specification is at http://www.opengeospatial.org/standards/wms." msgstr "" #. Tag: title #: using_postgis_app.xml:23 #, no-c-format msgid "Basic Usage" msgstr "" #. Tag: para #: using_postgis_app.xml:25 #, no-c-format msgid "To use PostGIS with MapServer, you will need to know about how to configure MapServer, which is beyond the scope of this documentation. This section will cover specific PostGIS issues and configuration details." msgstr "" #. Tag: para #: using_postgis_app.xml:30 #, no-c-format msgid "To use PostGIS with MapServer, you will need:" msgstr "" #. Tag: para #: using_postgis_app.xml:34 #, no-c-format msgid "Version 0.6 or newer of PostGIS." msgstr "" #. Tag: para #: using_postgis_app.xml:38 #, no-c-format msgid "Version 3.5 or newer of MapServer." msgstr "" #. Tag: para #: using_postgis_app.xml:42 #, no-c-format msgid "MapServer accesses PostGIS/PostgreSQL data like any other PostgreSQL client -- using the libpq interface. This means that MapServer can be installed on any machine with network access to the PostGIS server, and use PostGIS as a source of data. The faster the connection between the systems, the better." msgstr "" #. Tag: para #: using_postgis_app.xml:50 #, no-c-format msgid "Compile and install MapServer, with whatever options you desire, including the \"--with-postgis\" configuration option." msgstr "" #. Tag: para #: using_postgis_app.xml:55 #, no-c-format msgid "In your MapServer map file, add a PostGIS layer. For example:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:58 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis \n" " NAME \"widehighways\" \n" " # Connect to a remote spatial database\n" " CONNECTION \"user=dbuser dbname=gisdatabase host=bigserver\"\n" " PROCESSING \"CLOSE_CONNECTION=DEFER\"\n" " # Get the lines from the 'geom' column of the 'roads' table \n" " DATA \"geom from roads using srid=4326 using unique gid\" \n" " STATUS ON\n" " TYPE LINE \n" " # Of the lines in the extents, only render the wide highways \n" " FILTER \"type = 'highway' and numlanes >= 4\" \n" " CLASS \n" " # Make the superhighways brighter and 2 pixels wide\n" " EXPRESSION ([numlanes] >= 6) \n" " STYLE\n" " COLOR 255 22 22 \n" " WIDTH 2 \n" " END\n" " END \n" " CLASS \n" " # All the rest are darker and only 1 pixel wide \n" " EXPRESSION ([numlanes] < 6) \n" " STYLE\n" " COLOR 205 92 82\n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:60 #, no-c-format msgid "In the example above, the PostGIS-specific directives are as follows:" msgstr "" #. Tag: term #: using_postgis_app.xml:65 #, no-c-format msgid "CONNECTIONTYPE" msgstr "" #. Tag: para #: using_postgis_app.xml:68 #, no-c-format msgid "For PostGIS layers, this is always \"postgis\"." msgstr "" #. Tag: term #: using_postgis_app.xml:73 #, no-c-format msgid "CONNECTION" msgstr "" #. Tag: para #: using_postgis_app.xml:76 #, no-c-format msgid "The database connection is governed by the a 'connection string' which is a standard set of keys and values like this (with the default values in <>):" msgstr "" #. Tag: para #: using_postgis_app.xml:80 #, no-c-format msgid "user=<username> password=<password> dbname=<username> hostname=<server> port=<5432>" msgstr "" #. Tag: para #: using_postgis_app.xml:84 #, no-c-format msgid "An empty connection string is still valid, and any of the key/value pairs can be omitted. At a minimum you will generally supply the database name and username to connect with." msgstr "" #. Tag: term #: using_postgis_app.xml:92 #, no-c-format msgid "DATA" msgstr "" #. Tag: para #: using_postgis_app.xml:95 #, no-c-format msgid "The form of this parameter is \"<geocolumn> from <tablename> using srid=<srid> using unique <primary key>\" where the column is the spatial column to be rendered to the map, the SRID is SRID used by the column and the primary key is the table primary key (or any other uniquely-valued column with an index)." msgstr "" #. Tag: para #: using_postgis_app.xml:99 #, no-c-format msgid "You can omit the \"using srid\" and \"using unique\" clauses and MapServer will automatically determine the correct values if possible, but at the cost of running a few extra queries on the server for each map draw." msgstr "" #. Tag: term #: using_postgis_app.xml:106 #, no-c-format msgid "PROCESSING" msgstr "" #. Tag: para #: using_postgis_app.xml:109 #, no-c-format msgid "Putting in a CLOSE_CONNECTION=DEFER if you have multiple layers reuses existing connections instead of closing them. This improves speed. Refer to for MapServer PostGIS Performance Tips for a more detailed explanation." msgstr "" #. Tag: term #: using_postgis_app.xml:115 #, no-c-format msgid "FILTER" msgstr "" #. Tag: para #: using_postgis_app.xml:118 #, no-c-format msgid "The filter must be a valid SQL string corresponding to the logic normally following the \"WHERE\" keyword in a SQL query. So, for example, to render only roads with 6 or more lanes, use a filter of \"num_lanes >= 6\"." msgstr "" #. Tag: para #: using_postgis_app.xml:128 #, no-c-format msgid "In your spatial database, ensure you have spatial (GiST) indexes built for any the layers you will be drawing." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:131 #, no-c-format msgid "CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] );" msgstr "" #. Tag: para #: using_postgis_app.xml:135 #, no-c-format msgid "If you will be querying your layers using MapServer you will also need to use the \"using unique\" clause in your DATA statement." msgstr "" #. Tag: para #: using_postgis_app.xml:138 #, no-c-format msgid "MapServer requires unique identifiers for each spatial record when doing queries, and the PostGIS module of MapServer uses the unique value you specify in order to provide these unique identifiers. Using the table primary key is the best practice." msgstr "" #. Tag: title #: using_postgis_app.xml:147 #, no-c-format msgid "Frequently Asked Questions" msgstr "" #. Tag: para #: using_postgis_app.xml:152 #, no-c-format msgid "When I use an EXPRESSION in my map file, the condition never returns as true, even though I know the values exist in my table." msgstr "" #. Tag: para #: using_postgis_app.xml:158 #, no-c-format msgid "Unlike shape files, PostGIS field names have to be referenced in EXPRESSIONS using lower case." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:162 #, no-c-format msgid "EXPRESSION ([numlanes] >= 6)" msgstr "" #. Tag: para #: using_postgis_app.xml:168 #, no-c-format msgid "The FILTER I use for my Shape files is not working for my PostGIS table of the same data." msgstr "" #. Tag: para #: using_postgis_app.xml:173 #, no-c-format msgid "Unlike shape files, filters for PostGIS layers use SQL syntax (they are appended to the SQL statement the PostGIS connector generates for drawing layers in MapServer)." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:177 #, no-c-format msgid "FILTER \"type = 'highway' and numlanes >= 4\"" msgstr "" #. Tag: para #: using_postgis_app.xml:183 #, no-c-format msgid "My PostGIS layer draws much slower than my Shape file layer, is this normal?" msgstr "" #. Tag: para #: using_postgis_app.xml:188 #, no-c-format msgid "In general, the more features you are drawing into a given map, the more likely it is that PostGIS will be slower than Shape files. For maps with relatively few features (100s), PostGIS will often be faster. For maps with high feature density (1000s), PostGIS will always be slower." msgstr "" #. Tag: para #: using_postgis_app.xml:194 #, no-c-format msgid "If you are finding substantial draw performance problems, it is possible that you have not built a spatial index on your table." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:198 #, no-c-format msgid "" "postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn ); \n" "postgis# VACUUM ANALYZE;" msgstr "" #. Tag: para #: using_postgis_app.xml:204 #, no-c-format msgid "My PostGIS layer draws fine, but queries are really slow. What is wrong?" msgstr "" #. Tag: para #: using_postgis_app.xml:209 #, no-c-format msgid "For queries to be fast, you must have a unique key for your spatial table and you must have an index on that unique key." msgstr "" #. Tag: para #: using_postgis_app.xml:213 #, no-c-format msgid "You can specify what unique key for mapserver to use with the USING UNIQUE clause in your DATA line:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:217 #, no-c-format msgid "DATA \"geom FROM geotable USING UNIQUE gid\"" msgstr "" #. Tag: para #: using_postgis_app.xml:224 #, no-c-format msgid "Can I use \"geography\" columns (new in PostGIS 1.5) as a source for MapServer layers?" msgstr "" #. Tag: para #: using_postgis_app.xml:229 #, no-c-format msgid "Yes! MapServer understands geography columns as being the same as geometry columns, but always using an SRID of 4326. Just make sure to include a \"using srid=4326\" clause in your DATA statement. Everything else works exactly the same as with geometry." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:234 #, no-c-format msgid "DATA \"geog FROM geogtable USING SRID=4326 USING UNIQUE gid\"" msgstr "" #. Tag: title #: using_postgis_app.xml:244 #, no-c-format msgid "Advanced Usage" msgstr "" #. Tag: para #: using_postgis_app.xml:246 #, no-c-format msgid "The USING pseudo-SQL clause is used to add some information to help mapserver understand the results of more complex queries. More specifically, when either a view or a subselect is used as the source table (the thing to the right of \"FROM\" in a DATA definition) it is more difficult for mapserver to automatically determine a unique identifier for each row and also the SRID for the table. The USING clause can provide mapserver with these two pieces of information as follows:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:255 #, no-c-format msgid "" "DATA \"geom FROM (\n" " SELECT \n" " table1.geom AS geom, \n" " table1.gid AS gid, \n" " table2.data AS data \n" " FROM table1 \n" " LEFT JOIN table2 \n" " ON table1.id = table2.id\n" ") AS new_table USING UNIQUE gid USING SRID=4326\"" msgstr "" #. Tag: term #: using_postgis_app.xml:259 #, no-c-format msgid "USING UNIQUE <uniqueid>" msgstr "" #. Tag: para #: using_postgis_app.xml:262 #, no-c-format msgid "MapServer requires a unique id for each row in order to identify the row when doing map queries. Normally it identifies the primary key from the system tables. However, views and subselects don't automatically have an known unique column. If you want to use MapServer's query functionality, you need to ensure your view or subselect includes a uniquely valued column, and declare it with USING UNIQUE. For example, you could explicitly select nee of the table's primary key values for this purpose, or any other column which is guaranteed to be unique for the result set." msgstr "" #. Tag: para #: using_postgis_app.xml:273 #, no-c-format msgid "\"Querying a Map\" is the action of clicking on a map to ask for information about the map features in that location. Don't confuse \"map queries\" with the SQL query in a DATA definition." msgstr "" #. Tag: term #: using_postgis_app.xml:282 #, no-c-format msgid "USING SRID=<srid>" msgstr "" #. Tag: para #: using_postgis_app.xml:285 #, no-c-format msgid "PostGIS needs to know which spatial referencing system is being used by the geometries in order to return the correct data back to MapServer. Normally it is possible to find this information in the \"geometry_columns\" table in the PostGIS database, however, this is not possible for tables which are created on the fly such as subselects and views. So the USING SRID= option allows the correct SRID to be specified in the DATA definition." msgstr "" #. Tag: title #: using_postgis_app.xml:300 #, no-c-format msgid "Examples" msgstr "" #. Tag: para #: using_postgis_app.xml:302 #, no-c-format msgid "Lets start with a simple example and work our way up. Consider the following MapServer layer definition:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:305 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis \n" " NAME \"roads\"\n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\" \n" " DATA \"geom from roads\" \n" " STATUS ON \n" " TYPE LINE \n" " CLASS \n" " STYLE\n" " COLOR 0 0 0 \n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:307 #, no-c-format msgid "This layer will display all the road geometries in the roads table as black lines." msgstr "" #. Tag: para #: using_postgis_app.xml:310 #, no-c-format msgid "Now lets say we want to show only the highways until we get zoomed in to at least a 1:100000 scale - the next two layers will achieve this effect:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:314 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis \n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\" \n" " PROCESSING \"CLOSE_CONNECTION=DEFER\"\n" " DATA \"geom from roads\"\n" " MINSCALE 100000 \n" " STATUS ON \n" " TYPE LINE \n" " FILTER \"road_type = 'highway'\" \n" " CLASS \n" " COLOR 0 0 0 \n" " END \n" "END \n" "LAYER \n" " CONNECTIONTYPE postgis \n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\"\n" " PROCESSING \"CLOSE_CONNECTION=DEFER\"\n" " DATA \"geom from roads\" \n" " MAXSCALE 100000 \n" " STATUS ON \n" " TYPE LINE\n" " CLASSITEM road_type \n" " CLASS \n" " EXPRESSION \"highway\" \n" " STYLE\n" " WIDTH 2 \n" " COLOR 255 0 0 \n" " END\n" " END \n" " CLASS \n" " STYLE\n" " COLOR 0 0 0 \n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:316 #, no-c-format msgid "The first layer is used when the scale is greater than 1:100000, and displays only the roads of type \"highway\" as black lines. The FILTER option causes only roads of type \"highway\" to be displayed." msgstr "" #. Tag: para #: using_postgis_app.xml:321 #, no-c-format msgid "The second layer is used when the scale is less than 1:100000, and will display highways as double-thick red lines, and other roads as regular black lines." msgstr "" #. Tag: para #: using_postgis_app.xml:325 #, no-c-format msgid "So, we have done a couple of interesting things using only MapServer functionality, but our DATA SQL statement has remained simple. Suppose that the name of the road is stored in another table (for whatever reason) and we need to do a join to get it and label our roads." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:331 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis\n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\" \n" " DATA \"geom FROM (SELECT roads.gid AS gid, roads.geom AS geom, \n" " road_names.name as name FROM roads LEFT JOIN road_names ON \n" " roads.road_name_id = road_names.road_name_id) \n" " AS named_roads USING UNIQUE gid USING SRID=4326\" \n" " MAXSCALE 20000 \n" " STATUS ON \n" " TYPE ANNOTATION \n" " LABELITEM name\n" " CLASS \n" " LABEL \n" " ANGLE auto \n" " SIZE 8 \n" " COLOR 0 192 0 \n" " TYPE truetype \n" " FONT arial\n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:333 #, no-c-format msgid "This annotation layer adds green labels to all the roads when the scale gets down to 1:20000 or less. It also demonstrates how to use an SQL join in a DATA definition." msgstr "" #. Tag: title #: using_postgis_app.xml:340 #, no-c-format msgid "Java Clients (JDBC)" msgstr "" #. Tag: para #: using_postgis_app.xml:342 #, no-c-format msgid "Java clients can access PostGIS \"geometry\" objects in the PostgreSQL database either directly as text representations or using the JDBC extension objects bundled with PostGIS. In order to use the extension objects, the \"postgis.jar\" file must be in your CLASSPATH along with the \"postgresql.jar\" JDBC driver package." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:348 #, no-c-format msgid "" "import java.sql.*; \n" "import java.util.*; \n" "import java.lang.*; \n" "import org.postgis.*; \n" "\n" "public class JavaGIS { \n" "\n" "public static void main(String[] args) { \n" "\n" " java.sql.Connection conn; \n" "\n" " try { \n" " /* \n" " * Load the JDBC driver and establish a connection. \n" " */\n" " Class.forName(\"org.postgresql.Driver\"); \n" " String url = \"jdbc:postgresql://localhost:5432/database\"; \n" " conn = DriverManager.getConnection(url, \"postgres\", \"\"); \n" " /* \n" " * Add the geometry types to the connection. Note that you \n" " * must cast the connection to the pgsql-specific connection \n" " * implementation before calling the addDataType() method. \n" " */\n" " ((org.postgresql.PGConnection)conn).addDataType(\"geometry\",Class.forName(\"org.postgis.PGgeometry\"));\n" " ((org.postgresql.PGConnection)conn).addDataType(\"box3d\",Class.forName(\"org.postgis.PGbox3d\"));\n" " /* \n" " * Create a statement and execute a select query. \n" " */ \n" " Statement s = conn.createStatement(); \n" " ResultSet r = s.executeQuery(\"select geom,id from geomtable\"); \n" " while( r.next() ) { \n" " /* \n" " * Retrieve the geometry as an object then cast it to the geometry type. \n" " * Print things out. \n" " */ \n" " PGgeometry geom = (PGgeometry)r.getObject(1); \n" " int id = r.getInt(2); \n" " System.out.println(\"Row \" + id + \":\");\n" " System.out.println(geom.toString()); \n" " } \n" " s.close(); \n" " conn.close(); \n" " } \n" "catch( Exception e ) { \n" " e.printStackTrace(); \n" " } \n" "} \n" "}" msgstr "" #. Tag: para #: using_postgis_app.xml:350 #, no-c-format msgid "The \"PGgeometry\" object is a wrapper object which contains a specific topological geometry object (subclasses of the abstract class \"Geometry\") depending on the type: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:355 #, no-c-format msgid "" "PGgeometry geom = (PGgeometry)r.getObject(1); \n" "if( geom.getType() == Geometry.POLYGON ) { \n" " Polygon pl = (Polygon)geom.getGeometry(); \n" " for( int r = 0; r < pl.numRings(); r++) { \n" " LinearRing rng = pl.getRing(r); \n" " System.out.println(\"Ring: \" + r); \n" " for( int p = 0; p < rng.numPoints(); p++ ) { \n" " Point pt = rng.getPoint(p); \n" " System.out.println(\"Point: \" + p);\n" " System.out.println(pt.toString()); \n" " } \n" " } \n" "}" msgstr "" #. Tag: para #: using_postgis_app.xml:357 #, no-c-format msgid "The JavaDoc for the extension objects provides a reference for the various data accessor functions in the geometric objects." msgstr "" #. Tag: title #: using_postgis_app.xml:362 #, no-c-format msgid "C Clients (libpq)" msgstr "" #. Tag: para #: using_postgis_app.xml:364 using_postgis_app.xml:369 using_postgis_app.xml:375 #, no-c-format msgid "..." msgstr "" #. Tag: title #: using_postgis_app.xml:367 #, no-c-format msgid "Text Cursors" msgstr "" #. Tag: title #: using_postgis_app.xml:373 #, no-c-format msgid "Binary Cursors" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_misc.xml.pot0000644000000000000000000006037312025614072023245 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_misc.xml:3 #, no-c-format msgid "Miscellaneous Functions" msgstr "" #. Tag: refname #: reference_misc.xml:7 #, no-c-format msgid "ST_Accum" msgstr "" #. Tag: refpurpose #: reference_misc.xml:9 #, no-c-format msgid "Aggregate. Constructs an array of geometries." msgstr "" #. Tag: funcprototype #: reference_misc.xml:14 #, no-c-format msgid "geometry[] ST_Accum geometry set geomfield" msgstr "" #. Tag: title #: reference_misc.xml:22 reference_misc.xml:64 reference_misc.xml:106 reference_misc.xml:158 reference_misc.xml:229 reference_misc.xml:289 reference_misc.xml:343 reference_misc.xml:396 reference_misc.xml:438 reference_misc.xml:488 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_misc.xml:24 #, no-c-format msgid "Aggregate. Constructs an array of geometries." msgstr "" #. Tag: para #: reference_misc.xml:25 reference_misc.xml:68 reference_misc.xml:109 reference_misc.xml:255 reference_misc.xml:309 reference_misc.xml:355 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced." msgstr "" #. Tag: para #: reference_misc.xml:26 reference_misc.xml:113 reference_misc.xml:357 reference_misc.xml:447 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_misc.xml:27 reference_misc.xml:69 reference_misc.xml:110 reference_misc.xml:183 reference_misc.xml:358 reference_misc.xml:448 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_misc.xml:28 reference_misc.xml:70 reference_misc.xml:111 reference_misc.xml:256 reference_misc.xml:310 reference_misc.xml:359 reference_misc.xml:449 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_misc.xml:29 reference_misc.xml:71 reference_misc.xml:112 reference_misc.xml:257 reference_misc.xml:311 reference_misc.xml:360 reference_misc.xml:450 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: title #: reference_misc.xml:34 reference_misc.xml:76 reference_misc.xml:118 reference_misc.xml:188 reference_misc.xml:262 reference_misc.xml:316 reference_misc.xml:364 reference_misc.xml:408 reference_misc.xml:455 reference_misc.xml:499 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_misc.xml:36 #, no-c-format msgid "" "SELECT (ST_Accum(the_geom)) As all_em, ST_AsText((ST_Accum(the_geom))[1]) As grabone,\n" "(ST_Accum(the_geom))[2:4] as grab_rest\n" " FROM (SELECT ST_MakePoint(a*CAST(random()*10 As integer), a*CAST(random()*10 As integer), a*CAST(random()*10 As integer)) As the_geom\n" " FROM generate_series(1,4) a) As foo;\n" "\n" "all_em|grabone | grab_rest\n" "\n" "-------------------------------------------------------------------------------+\n" "\n" " {0101000080000000000000144000000000000024400000000000001040:\n" " 0101000080000000000\n" "00018400000000000002C400000000000003040:\n" "0101000080000000000000354000000000000038400000000000001840:\n" "010100008000000000000040400000000000003C400000000000003040} |\n" " POINT(5 10) | {010100008000000000000018400000000000002C400000000000003040:\n" " 0101000080000000000000354000000000000038400000000000001840:\n" " 010100008000000000000040400000000000003C400000000000003040}\n" "(1 row)" msgstr "" #. Tag: title #: reference_misc.xml:41 reference_misc.xml:83 reference_misc.xml:125 reference_misc.xml:195 reference_misc.xml:268 reference_misc.xml:322 reference_misc.xml:369 reference_misc.xml:415 reference_misc.xml:462 reference_misc.xml:506 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_misc.xml:49 #, no-c-format msgid "Box2D" msgstr "" #. Tag: refpurpose #: reference_misc.xml:51 #, no-c-format msgid "Returns a BOX2D representing the maximum extents of the geometry." msgstr "" #. Tag: funcprototype #: reference_misc.xml:56 #, no-c-format msgid "box2d Box2D geometry geomA" msgstr "" #. Tag: para #: reference_misc.xml:66 #, no-c-format msgid "Returns a BOX2D representing the maximum extents of the geometry." msgstr "" #. Tag: programlisting #: reference_misc.xml:78 #, no-c-format msgid "" "SELECT Box2D(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6)'));\n" " box2d\n" " ---------\n" " BOX(1 2,5 6)\n" "\n" " SELECT Box2D(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));\n" " box2d\n" " --------\n" " BOX(220186.984375 150406,220288.25 150506.140625)" msgstr "" #. Tag: para #: reference_misc.xml:85 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_misc.xml:91 #, no-c-format msgid "Box3D" msgstr "" #. Tag: refpurpose #: reference_misc.xml:93 #, no-c-format msgid "Returns a BOX3D representing the maximum extents of the geometry." msgstr "" #. Tag: funcprototype #: reference_misc.xml:98 #, no-c-format msgid "box3d Box3D geometry geomA" msgstr "" #. Tag: para #: reference_misc.xml:108 #, no-c-format msgid "Returns a BOX3D representing the maximum extents of the geometry." msgstr "" #. Tag: programlisting #: reference_misc.xml:120 #, no-c-format msgid "" "SELECT Box3D(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 5, 5 6 5)'));\n" " Box3d\n" " ---------\n" " BOX3D(1 2 3,5 6 5)\n" "\n" " SELECT Box3D(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 1,220227 150406 1)'));\n" " Box3d\n" " --------\n" " BOX3D(220227 150406 1,220268 150415 1)" msgstr "" #. Tag: para #: reference_misc.xml:127 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_misc.xml:133 #, no-c-format msgid "ST_EstimatedExtent" msgstr "" #. Tag: refpurpose #: reference_misc.xml:135 #, no-c-format msgid "Return the 'estimated' extent of the given spatial table. The estimated is taken from the geometry column's statistics. The current schema will be used if not specified." msgstr "" #. Tag: funcsynopsis #: reference_misc.xml:141 #, no-c-format msgid " box2d ST_EstimatedExtent text schema_name text table_name text geocolumn_name box2d ST_EstimatedExtent text table_name text geocolumn_name " msgstr "" #. Tag: para #: reference_misc.xml:160 #, no-c-format msgid "Return the 'estimated' extent of the given spatial table. The estimated is taken from the geometry column's statistics. The current schema will be used if not specified." msgstr "" #. Tag: para #: reference_misc.xml:164 #, no-c-format msgid "For PostgreSQL>=8.0.0 statistics are gathered by VACUUM ANALYZE and resulting extent will be about 95% of the real one." msgstr "" #. Tag: para #: reference_misc.xml:169 #, no-c-format msgid "In absence of statistics (empty table or no ANALYZE called) this function returns NULL. Prior to version 1.5.4 an exception was thrown instead." msgstr "" #. Tag: para #: reference_misc.xml:177 #, no-c-format msgid "For PostgreSQL<8.0.0 statistics are gathered by update_geometry_stats() and resulting extent will be exact." msgstr "" #. Tag: para #: reference_misc.xml:180 #, no-c-format msgid "Availability: 1.0.0" msgstr "" #. Tag: para #: reference_misc.xml:181 #, no-c-format msgid "Changed: 2.1.0. Up to 2.0.x this was called ST_Estimated_Extent." msgstr "" #. Tag: programlisting #: reference_misc.xml:190 #, no-c-format msgid "" "SELECT ST_EstimatedExtent('ny', 'edges', 'the_geom');\n" "--result--\n" "BOX(-8877653 4912316,-8010225.5 5589284)\n" "\n" "SELECT ST_EstimatedExtent('feature_poly', 'the_geom');\n" "--result--\n" "BOX(-124.659652709961 24.6830825805664,-67.7798080444336 49.0012092590332)" msgstr "" #. Tag: refname #: reference_misc.xml:202 #, no-c-format msgid "ST_Expand" msgstr "" #. Tag: refpurpose #: reference_misc.xml:203 #, no-c-format msgid "Returns bounding box expanded in all directions from the bounding box of the input geometry. Uses double-precision" msgstr "" #. Tag: funcsynopsis #: reference_misc.xml:207 #, no-c-format msgid " geometry ST_Expand geometry g1 float units_to_expand box2d ST_Expand box2d g1 float units_to_expand box3d ST_Expand box3d g1 float units_to_expand " msgstr "" #. Tag: para #: reference_misc.xml:231 #, no-c-format msgid "This function returns a bounding box expanded in all directions from the bounding box of the input geometry, by an amount specified in the second argument. Uses double-precision. Very useful for distance() queries, or bounding box queries to add an index filter to the query." msgstr "" #. Tag: para #: reference_misc.xml:235 #, no-c-format msgid "There are 3 variants of this. The one that takes a geometry will return a POLYGON geometry representation of the bounding box and is the most commonly used variant." msgstr "" #. Tag: para #: reference_misc.xml:237 #, no-c-format msgid "ST_Expand is similar in concept to ST_Buffer except while buffer expands the geometry in all directions, ST_Expand expands the bounding box an x,y,z unit amount." msgstr "" #. Tag: para #: reference_misc.xml:239 #, no-c-format msgid "Units are in the units of the spatial reference system in use denoted by the SRID" msgstr "" #. Tag: para #: reference_misc.xml:242 #, no-c-format msgid "Pre 1.3, ST_Expand was used in conjunction with distance to do indexable queries. Something of the form the_geom && ST_Expand('POINT(10 20)', 10) AND ST_Distance(the_geom, 'POINT(10 20)') < 10 Post 1.2, this was replaced with the easier ST_DWithin construct." msgstr "" #. Tag: para #: reference_misc.xml:248 #, no-c-format msgid "Bounding boxes of all geometries are currently 2-d even if they are 3-dimensional geometries." msgstr "" #. Tag: para #: reference_misc.xml:252 #, no-c-format msgid "Availability: 1.5.0 behavior changed to output double precision instead of float4 coordinates." msgstr "" #. Tag: para #: reference_misc.xml:263 #, no-c-format msgid "Examples below use US National Atlas Equal Area (SRID=2163) which is a meter projection" msgstr "" #. Tag: programlisting #: reference_misc.xml:264 #, no-c-format msgid "" "\n" "--10 meter expanded box around bbox of a linestring\n" "SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 110701,2312892 110714)', 2163),10) As box2d);\n" " st_expand\n" "------------------------------------\n" " BOX(2312882 110666,2312990 110724)\n" "\n" "--10 meter expanded 3d box of a 3d box\n" "SELECT ST_Expand(CAST('BOX3D(778783 2951741 1,794875 2970042.61545891 10)' As box3d),10)\n" " st_expand\n" "-----------------------------------------------------\n" " BOX3D(778773 2951731 -9,794885 2970052.61545891 20)\n" "\n" " --10 meter geometry astext rep of a expand box around a point geometry\n" " SELECT ST_AsEWKT(ST_Expand(ST_GeomFromEWKT('SRID=2163;POINT(2312980 110676)'),10));\n" " st_asewkt\n" "-------------------------------------------------------------------------------------------------\n" " SRID=2163;POLYGON((2312970 110666,2312970 110686,2312990 110686,2312990 110666,2312970 110666))" msgstr "" #. Tag: para #: reference_misc.xml:269 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_misc.xml:275 #, no-c-format msgid "ST_Extent" msgstr "" #. Tag: refpurpose #: reference_misc.xml:276 #, no-c-format msgid "an aggregate function that returns the bounding box that bounds rows of geometries." msgstr "" #. Tag: funcprototype #: reference_misc.xml:281 #, no-c-format msgid "box2d ST_Extent geometry set geomfield" msgstr "" #. Tag: para #: reference_misc.xml:291 #, no-c-format msgid "ST_Extent returns a bounding box that encloses a set of geometries. The ST_Extent function is an \"aggregate\" function in the terminology of SQL. That means that it operates on lists of data, in the same way the SUM() and AVG() functions do." msgstr "" #. Tag: para #: reference_misc.xml:294 reference_misc.xml:348 #, no-c-format msgid "Since it returns a bounding box, the spatial Units are in the units of the spatial reference system in use denoted by the SRID" msgstr "" #. Tag: para #: reference_misc.xml:295 #, no-c-format msgid "ST_Extent is similar in concept to Oracle Spatial/Locator's SDO_AGGR_MBR" msgstr "" #. Tag: para #: reference_misc.xml:297 #, no-c-format msgid "Since ST_Extent returns a bounding box, the SRID meta-data is lost. Use ST_SetSRID to force it back into a geometry with SRID meta data. The coordinates are in the units of the spatial ref of the orginal geometries." msgstr "" #. Tag: para #: reference_misc.xml:302 #, no-c-format msgid "ST_Extent will return boxes with only an x and y component even with (x,y,z) coordinate geometries. To maintain x,y,z use ST_3DExtent instead." msgstr "" #. Tag: para #: reference_misc.xml:306 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: para #: reference_misc.xml:317 #, no-c-format msgid "Examples below use Massachusetts State Plane ft (SRID=2249)" msgstr "" #. Tag: programlisting #: reference_misc.xml:318 #, no-c-format msgid "" "SELECT ST_Extent(the_geom) as bextent FROM sometable;\n" " st_bextent\n" "------------------------------------\n" "BOX(739651.875 2908247.25,794875.8125 2970042.75)\n" "\n" "\n" "--Return extent of each category of geometries\n" "SELECT ST_Extent(the_geom) as bextent\n" "FROM sometable\n" "GROUP BY category ORDER BY category;\n" "\n" " bextent | name\n" "----------------------------------------------------+----------------\n" " BOX(778783.5625 2951741.25,794875.8125 2970042.75) | A\n" " BOX(751315.8125 2919164.75,765202.6875 2935417.25) | B\n" " BOX(739651.875 2917394.75,756688.375 2935866) | C\n" "\n" " --Force back into a geometry\n" " -- and render the extended text representation of that geometry\n" "SELECT ST_SetSRID(ST_Extent(the_geom),2249) as bextent FROM sometable;\n" "\n" " bextent\n" "--------------------------------------------------------------------------------\n" " SRID=2249;POLYGON((739651.875 2908247.25,739651.875 2970042.75,794875.8125 2970042.75,\n" " 794875.8125 2908247.25,739651.875 2908247.25))" msgstr "" #. Tag: para #: reference_misc.xml:323 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_misc.xml:329 #, no-c-format msgid "ST_3DExtent" msgstr "" #. Tag: refpurpose #: reference_misc.xml:330 #, no-c-format msgid "an aggregate function that returns the box3D bounding box that bounds rows of geometries." msgstr "" #. Tag: funcprototype #: reference_misc.xml:335 #, no-c-format msgid "box3d ST_3DExtent geometry set geomfield" msgstr "" #. Tag: para #: reference_misc.xml:345 #, no-c-format msgid "ST_3DExtent returns a box3d (includes Z coordinate) bounding box that encloses a set of geometries. The ST_3DExtent function is an \"aggregate\" function in the terminology of SQL. That means that it operates on lists of data, in the same way the SUM() and AVG() functions do." msgstr "" #. Tag: para #: reference_misc.xml:351 #, no-c-format msgid "Since ST_3DExtent returns a bounding box, the SRID meta-data is lost. Use ST_SetSRID to force it back into a geometry with SRID meta data. The coordinates are in the units of the spatial ref of the orginal geometries." msgstr "" #. Tag: para #: reference_misc.xml:356 #, no-c-format msgid "Changed: 2.0.0 In prior versions this used to be called ST_Extent3D" msgstr "" #. Tag: programlisting #: reference_misc.xml:365 #, no-c-format msgid "" "SELECT ST_3DExtent(foo.the_geom) As b3extent\n" "FROM (SELECT ST_MakePoint(x,y,z) As the_geom\n" " FROM generate_series(1,3) As x\n" " CROSS JOIN generate_series(1,2) As y\n" " CROSS JOIN generate_series(0,2) As Z) As foo;\n" " b3extent\n" "--------------------\n" " BOX3D(1 1 0,3 2 2)\n" "\n" "--Get the extent of various elevated circular strings\n" "SELECT ST_3DExtent(foo.the_geom) As b3extent\n" "FROM (SELECT ST_Translate(ST_Force_3DZ(ST_LineToCurve(ST_Buffer(ST_MakePoint(x,y),1))),0,0,z) As the_geom\n" " FROM generate_series(1,3) As x\n" " CROSS JOIN generate_series(1,2) As y\n" " CROSS JOIN generate_series(0,2) As Z) As foo;\n" "\n" " b3extent\n" "--------------------\n" " BOX3D(1 0 0,4 2 2)" msgstr "" #. Tag: para #: reference_misc.xml:370 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_misc.xml:377 #, no-c-format msgid "Find_SRID" msgstr "" #. Tag: refpurpose #: reference_misc.xml:379 #, no-c-format msgid "The syntax is find_srid(<db/schema>, <table>, <column>) and the function returns the integer SRID of the specified column by searching through the GEOMETRY_COLUMNS table." msgstr "" #. Tag: funcprototype #: reference_misc.xml:386 #, no-c-format msgid "integer Find_SRID varchar a_schema_name varchar a_table_name varchar a_geomfield_name" msgstr "" #. Tag: para #: reference_misc.xml:398 #, no-c-format msgid "The syntax is find_srid(<db/schema>, <table>, <column>) and the function returns the integer SRID of the specified column by searching through the GEOMETRY_COLUMNS table. If the geometry column has not been properly added with the AddGeometryColumns() function, this function will not work either." msgstr "" #. Tag: programlisting #: reference_misc.xml:410 #, no-c-format msgid "" "SELECT Find_SRID('public', 'tiger_us_state_2007', 'the_geom_4269');\n" "find_srid\n" "----------\n" "4269" msgstr "" #. Tag: refname #: reference_misc.xml:423 #, no-c-format msgid "ST_Mem_Size" msgstr "" #. Tag: refpurpose #: reference_misc.xml:425 #, no-c-format msgid "Returns the amount of space (in bytes) the geometry takes." msgstr "" #. Tag: funcprototype #: reference_misc.xml:430 #, no-c-format msgid "integer ST_Mem_Size geometry geomA" msgstr "" #. Tag: para #: reference_misc.xml:440 #, no-c-format msgid "Returns the amount of space (in bytes) the geometry takes." msgstr "" #. Tag: para #: reference_misc.xml:441 #, no-c-format msgid "This is a nice compliment to PostgreSQL built in functions pg_size_pretty, pg_relation_size, pg_total_relation_size." msgstr "" #. Tag: para #: reference_misc.xml:442 #, no-c-format msgid "pg_relation_size which gives the byte size of a table may return byte size lower than ST_Mem_Size. This is because pg_relation_size does not add toasted table contribution and large geometries are stored in TOAST tables." msgstr "" #. Tag: para #: reference_misc.xml:444 #, no-c-format msgid "pg_total_relation_size - includes, the table, the toasted tables, and the indexes." msgstr "" #. Tag: programlisting #: reference_misc.xml:457 #, no-c-format msgid "" "--Return how much byte space Boston takes up in our Mass data set\n" "SELECT pg_size_pretty(SUM(ST_Mem_Size(the_geom))) as totgeomsum,\n" "pg_size_pretty(SUM(CASE WHEN town = 'BOSTON' THEN st_mem_size(the_geom) ELSE 0 END)) As bossum,\n" "CAST(SUM(CASE WHEN town = 'BOSTON' THEN st_mem_size(the_geom) ELSE 0 END)*1.00 /\n" " SUM(st_mem_size(the_geom))*100 As numeric(10,2)) As perbos\n" "FROM towns;\n" "\n" "totgeomsum bossum perbos\n" "---------- ------ ------\n" "1522 kB 30 kB 1.99\n" "\n" "\n" "SELECT ST_Mem_Size(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));\n" "\n" "---\n" "73\n" "\n" "--What percentage of our table is taken up by just the geometry\n" "SELECT pg_total_relation_size('public.neighborhoods') As fulltable_size, sum(ST_Mem_Size(the_geom)) As geomsize,\n" "sum(ST_Mem_Size(the_geom))*1.00/pg_total_relation_size('public.neighborhoods')*100 As pergeom\n" "FROM neighborhoods;\n" "fulltable_size geomsize pergeom\n" "------------------------------------------------\n" "262144 96238 36.71188354492187500000" msgstr "" #. Tag: refname #: reference_misc.xml:470 #, no-c-format msgid "ST_Point_Inside_Circle" msgstr "" #. Tag: refpurpose #: reference_misc.xml:472 #, no-c-format msgid "Is the point geometry insert circle defined by center_x, center_y, radius" msgstr "" #. Tag: funcprototype #: reference_misc.xml:477 #, no-c-format msgid "boolean ST_Point_Inside_Circle geometry a_point float center_x float center_y float radius" msgstr "" #. Tag: para #: reference_misc.xml:490 #, no-c-format msgid "The syntax for this functions is point_inside_circle(<geometry>,<circle_center_x>,<circle_center_y>,<radius>). Returns the true if the geometry is a point and is inside the circle. Returns false otherwise." msgstr "" #. Tag: para #: reference_misc.xml:494 #, no-c-format msgid "This only works for points as the name suggests" msgstr "" #. Tag: programlisting #: reference_misc.xml:501 #, no-c-format msgid "" "SELECT ST_Point_Inside_Circle(ST_Point(1,2), 0.5, 2, 3);\n" " st_point_inside_circle\n" "------------------------\n" " t" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/introduction.xml.pot0000644000000000000000000003266712025614072023022 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: introduction.xml:3 #, no-c-format msgid "Introduction" msgstr "" #. Tag: para #: introduction.xml:5 #, no-c-format msgid "PostGIS was developed by Refractions Research Inc, as a spatial database technology research project. Refractions is a GIS and database consulting company in Victoria, British Columbia, Canada, specializing in data integration and custom software development. We plan on supporting and developing PostGIS to support a range of important GIS functionality, including full OpenGIS support, advanced topological constructs (coverages, surfaces, networks), desktop user interface tools for viewing and editing GIS data, and web-based access tools." msgstr "" #. Tag: para #: introduction.xml:15 #, no-c-format msgid "PostGIS is an incubation project of the OSGeo Foundation. PostGIS is being continually improved and funded by many FOSS4G Developers as well as corporations all over the world that gain great benefit from its functionality and versatility." msgstr "" #. Tag: title #: introduction.xml:21 #, no-c-format msgid "Project Steering Committee" msgstr "" #. Tag: para #: introduction.xml:22 #, no-c-format msgid "The PostGIS Project Steering Committee (PSC) coordinates the general direction, release cycles, documentation, and outreach efforts for the PostGIS project. In addition the PSC provides general user support, accepts and approves patches from the general PostGIS community and votes on miscellaneous issues involving PostGIS such as developer commit access, new PSC members or significant API changes." msgstr "" #. Tag: term #: introduction.xml:31 #, no-c-format msgid "Mark Cave-Ayland" msgstr "" #. Tag: para #: introduction.xml:33 #, no-c-format msgid "Coordinates bug fixing and maintenance effort, alignment of PostGIS with PostgreSQL releases, spatial index selectivity and binding, loader/dumper, and Shapefile GUI Loader, integration of new and new function enhancements." msgstr "" #. Tag: term #: introduction.xml:40 #, no-c-format msgid "Regina Obe" msgstr "" #. Tag: para #: introduction.xml:42 #, no-c-format msgid "Buildbot Maintenance, windows production and experimental builds, Documentation, general user support on PostGIS newsgroup, X3D support, Tiger Geocoder Support, management functions, and smoke testing new functionality or major code changes." msgstr "" #. Tag: term #: introduction.xml:49 #, no-c-format msgid "Paul Ramsey (Chair)" msgstr "" #. Tag: para #: introduction.xml:51 #, no-c-format msgid "Co-founder of PostGIS project. General bug fixing, geography support, geography and geometry index support (2D, 3D, nD index and anything spatial index), underlying geometry internal structures, GEOS functionality integration and alignment with GEOS releases, loader/dumper, and Shapefile GUI loader." msgstr "" #. Tag: term #: introduction.xml:57 #, no-c-format msgid "Sandro Santilli" msgstr "" #. Tag: para #: introduction.xml:60 #, no-c-format msgid "Bug fixes and maintenance and integration of new GEOS functionality and alignment with GEOS releases, Topology support, and Raster framework and low level api functions." msgstr "" #. Tag: title #: introduction.xml:67 #, no-c-format msgid "Contributors Past and Present" msgstr "" #. Tag: term #: introduction.xml:71 #, no-c-format msgid "Chris Hodgson" msgstr "" #. Tag: para #: introduction.xml:73 #, no-c-format msgid "Prior PSC Member. General development, site and buildbot maintenance, OSGeo incubation management" msgstr "" #. Tag: term #: introduction.xml:77 #, no-c-format msgid "Kevin Neufeld" msgstr "" #. Tag: para #: introduction.xml:79 #, no-c-format msgid "Prior PSC Member. Documentation and documentation support tools, advanced user support on PostGIS newsgroup, and PostGIS maintenance function enhancements." msgstr "" #. Tag: term #: introduction.xml:85 #, no-c-format msgid "Dave Blasby" msgstr "" #. Tag: para #: introduction.xml:88 #, no-c-format msgid "The original developer/Co-founder of PostGIS. Dave wrote the server side objects, index bindings, and many of the server side analytical functions." msgstr "" #. Tag: term #: introduction.xml:95 #, no-c-format msgid "Jeff Lounsbury" msgstr "" #. Tag: para #: introduction.xml:97 #, no-c-format msgid "Original development of the Shape file loader/dumper. Current PostGIS Project Owner representative." msgstr "" #. Tag: term #: introduction.xml:102 #, no-c-format msgid "Olivier Courtin" msgstr "" #. Tag: para #: introduction.xml:104 #, no-c-format msgid "Input output XML (KML,GML)/GeoJSON functions, 3D support and bug fixes." msgstr "" #. Tag: term #: introduction.xml:109 #, no-c-format msgid "Mark Leslie" msgstr "" #. Tag: para #: introduction.xml:111 #, no-c-format msgid "Ongoing maintenance and development of core functions. Enhanced curve support. Shapefile GUI loader." msgstr "" #. Tag: term #: introduction.xml:116 #, no-c-format msgid "Pierre Racine" msgstr "" #. Tag: para #: introduction.xml:118 #, no-c-format msgid "Raster overall architecture, prototyping, programming support" msgstr "" #. Tag: term #: introduction.xml:123 #, no-c-format msgid "Nicklas Avén" msgstr "" #. Tag: para #: introduction.xml:126 #, no-c-format msgid "Distance function enhancements (including 3D distance and relationship functions) and additions, Windows testing, and general user support" msgstr "" #. Tag: term #: introduction.xml:131 #, no-c-format msgid "Jorge Arévalo" msgstr "" #. Tag: para #: introduction.xml:134 #, no-c-format msgid "Raster development, GDAL driver support, loader" msgstr "" #. Tag: term #: introduction.xml:139 #, no-c-format msgid "Bborie Park" msgstr "" #. Tag: para #: introduction.xml:141 #, no-c-format msgid "Raster development, raster loader" msgstr "" #. Tag: term #: introduction.xml:146 #, no-c-format msgid "Mateusz Loskot" msgstr "" #. Tag: para #: introduction.xml:148 #, no-c-format msgid "Raster loader, low level raster api functions" msgstr "" #. Tag: term #: introduction.xml:153 #, no-c-format msgid "David Zwarg" msgstr "" #. Tag: para #: introduction.xml:156 #, no-c-format msgid "Raster development" msgstr "" #. Tag: term #: introduction.xml:161 #, no-c-format msgid "Other contributors: Individuals" msgstr "" #. Tag: para #: introduction.xml:164 #, no-c-format msgid "In alphabetical order: Alex Bodnaru, Alex Mayrhofer, Andrea Peri, Andreas Forø Tollefsen, Andreas Neumann, Anne Ghisla, Barbara Phillipot, Ben Jubb, Bernhard Reiter, Brian Hamlin, Bruce Rindahl, Bruno Wolff III, Bryce L. Nordgren, Carl Anderson, Charlie Savage, Dane Springmeyer, David Skea, David Techer, Eduin Carrillo, Even Rouault, Frank Warmerdam, George Silva, Gerald Fenoy, Gino Lucrezi, Guillaume Lelarge, IIDA Tetsushi, Ingvild Nystuen, Jeff Adams, Jose Carlos Martinez Llari, Kashif Rasul, Klaus Foerster, Kris Jurka, Leo Hsu, Loic Dachary, Luca S. Percich, Maria Arias de Reyna, Mark Sondheim, Markus Schaber, Maxime Guillaud, Maxime van Noppen, Michael Fuhr, Nikita Shulga, Norman Vine, Rafal Magda, Ralph Mason, Richard Greenwood, Silvio Grosso, Steffen Macke, Stephen Frost, Tom van Tilburg, Vincent Picavet" msgstr "" #. Tag: term #: introduction.xml:221 #, no-c-format msgid "Other contributors: Corporate Sponsors" msgstr "" #. Tag: para #: introduction.xml:224 #, no-c-format msgid "These are corporate entities that have contributed developer time, hosting, or direct monetary funding to the PostGIS project" msgstr "" #. Tag: para #: introduction.xml:225 #, no-c-format msgid "In alphabetical order: Arrival 3D, Associazione Italiana per l'Informazione Geografica Libera (GFOSS.it), AusVet, Avencia, Azavea, Cadcorp, CampToCamp, City of Boston (DND), Clever Elephant Solutions, Cooperativa Alveo, Deimos Space, Faunalia, Geographic Data BC, Hunter Systems Group, Lidwala Consulting Engineers, LisaSoft, Logical Tracking & Tracing International AG, Michigan Tech Research Institute, Norwegian Forest and Landscape Institute, OpenGeo, OSGeo, Oslandia, Paragon Corporation, R3 GIS,, Refractions Research, Regione Toscana-SIGTA, Safe Software, Sirius Corporation plc, Stadt Uster, UC Davis Center for Vectorborne Diseases, University of Laval, U.S Department of State (HIU), Vizzuality, Zonar Systems" msgstr "" #. Tag: term #: introduction.xml:265 #, no-c-format msgid "Crowd Funding Campaigns" msgstr "" #. Tag: para #: introduction.xml:268 #, no-c-format msgid "Crowd funding campaigns are campaigns we run to get badly wanted features funded that can service a large number of people. Each campaign is specifically focused on a particular feature or set of features. Each sponsor chips in a small fraction of the needed funding and with enough people/organizations contributing, we have the funds to pay for the work that will help many. If you have an idea for a feature you think many others would be willing to co-fund, please post to the PostGIS newsgroup your thoughts and together we can make it happen." msgstr "" #. Tag: para #: introduction.xml:269 #, no-c-format msgid "PostGIS 2.0.0 was the first release we tried this strategy. We used PledgeBank and we got two successful campaigns out of it." msgstr "" #. Tag: para #: introduction.xml:270 #, no-c-format msgid "postgistopology - 10 plus sponsors each contributed $250 USD to build toTopoGeometry function and beef up topology support in 2.0.0. It happened." msgstr "" #. Tag: para #: introduction.xml:271 #, no-c-format msgid "postgis64windows - 20 someodd sponsors each contributed $100 USD to pay for the work needed to work out PostGIS 64-bit on windows issues. It happened. We now have a 64-bit beta release for PostGIS 2.0.0 and a final one planned for release that will be available on PostgreSQL stack builder." msgstr "" #. Tag: term #: introduction.xml:276 #, no-c-format msgid "Important Support Libraries" msgstr "" #. Tag: para #: introduction.xml:279 #, no-c-format msgid "The GEOS geometry operations library, and the algorithmic work of Martin Davis in making it all work, ongoing maintenance and support of Mateusz Loskot, Sandro Santilli (strk), Paul Ramsey and others." msgstr "" #. Tag: para #: introduction.xml:284 #, no-c-format msgid "The GDAL Geospatial Data Abstraction Library, by Frank Warmerdam and others is used to power much of the raster functionality introduced in PostGIS 2.0.0. In kind, improvements needed in GDAL to support PostGIS are contributed back to the GDAL project." msgstr "" #. Tag: para #: introduction.xml:289 #, no-c-format msgid "The Proj4 cartographic projection library, and the work of Gerald Evenden and Frank Warmerdam in creating and maintaining it." msgstr "" #. Tag: para #: introduction.xml:293 #, no-c-format msgid "Last but not least, the PostgreSQL DBMS, The giant that PostGIS stands on. Much of the speed and flexibility of PostGIS would not be possible without the extensibility, great query planner, GIST index, and plethora of SQL features provided by PostgreSQL." msgstr "" #. Tag: title #: introduction.xml:302 #, no-c-format msgid "More Information" msgstr "" #. Tag: para #: introduction.xml:306 #, no-c-format msgid "The latest software, documentation and news items are available at the PostGIS web site, http://www.postgis.org." msgstr "" #. Tag: para #: introduction.xml:312 #, no-c-format msgid "More information about the GEOS geometry operations library is available at http://trac.osgeo.org/geos/." msgstr "" #. Tag: para #: introduction.xml:318 #, no-c-format msgid "More information about the Proj4 reprojection library is available at http://trac.osgeo.org/proj/." msgstr "" #. Tag: para #: introduction.xml:324 #, no-c-format msgid "More information about the PostgreSQL database server is available at the PostgreSQL main site http://www.postgresql.org." msgstr "" #. Tag: para #: introduction.xml:330 #, no-c-format msgid "More information about GiST indexing is available at the PostgreSQL GiST development site, http://www.sai.msu.su/~megera/postgres/gist/." msgstr "" #. Tag: para #: introduction.xml:336 #, no-c-format msgid "More information about MapServer internet map server is available at http://mapserver.org." msgstr "" #. Tag: para #: introduction.xml:342 #, no-c-format msgid "The "Simple Features for Specification for SQL" is available at the OpenGIS Consortium web site: http://www.opengeospatial.org/." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_raster.xml.pot0000644000000000000000000155375212035636370023631 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-11 21:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_raster.xml:3 #, no-c-format msgid "Raster Reference" msgstr "" #. Tag: para #: reference_raster.xml:5 #, no-c-format msgid "The functions given below are the ones which a user of PostGIS Raster is likely to need and which are currently available in PostGIS Raster. There are other functions which are required support functions to the raster objects which are not of use to a general user." msgstr "" #. Tag: para #: reference_raster.xml:9 #, no-c-format msgid "raster is a new PostGIS type for storing and analyzing raster data." msgstr "" #. Tag: para #: reference_raster.xml:10 #, no-c-format msgid "For loading rasters from raster files please refer to " msgstr "" #. Tag: para #: reference_raster.xml:12 #, no-c-format msgid "For the examples in this reference we will be using a raster table of dummy rasters - Formed with the following code" msgstr "" #. Tag: programlisting #: reference_raster.xml:13 #, no-c-format msgid "" "CREATE TABLE dummy_rast(rid integer, rast raster);\n" "INSERT INTO dummy_rast(rid, rast)\n" "VALUES (1,\n" "('01' -- little endian (uint8 ndr)\n" "|| \n" "'0000' -- version (uint16 0)\n" "||\n" "'0000' -- nBands (uint16 0)\n" "||\n" "'0000000000000040' -- scaleX (float64 2)\n" "||\n" "'0000000000000840' -- scaleY (float64 3)\n" "||\n" "'000000000000E03F' -- ipX (float64 0.5)\n" "||\n" "'000000000000E03F' -- ipY (float64 0.5)\n" "||\n" "'0000000000000000' -- skewX (float64 0)\n" "||\n" "'0000000000000000' -- skewY (float64 0)\n" "||\n" "'00000000' -- SRID (int32 0)\n" "||\n" "'0A00' -- width (uint16 10)\n" "||\n" "'1400' -- height (uint16 20)\n" ")::raster\n" "),\n" "-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0\n" "(2, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||\n" "'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||\n" "'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);" msgstr "" #. Tag: para #: reference_raster.xml:17 #, no-c-format msgid "This section lists the PostgreSQL data types specifically created to support raster functionality." msgstr "" #. Tag: title #: reference_raster.xml:20 #, no-c-format msgid "Raster Support Data types" msgstr "" #. Tag: refname #: reference_raster.xml:24 #, no-c-format msgid "geomval" msgstr "" #. Tag: refpurpose #: reference_raster.xml:25 #, no-c-format msgid "A spatial datatype with two fields - geom (holding a geometry object) and val (holding a double precision pixel value from a raster band)." msgstr "" #. Tag: title #: reference_raster.xml:30 reference_raster.xml:49 reference_raster.xml:121 reference_raster.xml:171 reference_raster.xml:211 reference_raster.xml:257 reference_raster.xml:439 reference_raster.xml:613 reference_raster.xml:652 reference_raster.xml:689 reference_raster.xml:730 reference_raster.xml:820 reference_raster.xml:1022 reference_raster.xml:1109 reference_raster.xml:1203 reference_raster.xml:1248 reference_raster.xml:1287 reference_raster.xml:1321 reference_raster.xml:1356 reference_raster.xml:1390 reference_raster.xml:1435 reference_raster.xml:1489 reference_raster.xml:1526 reference_raster.xml:1566 reference_raster.xml:1621 reference_raster.xml:1673 reference_raster.xml:1717 reference_raster.xml:1752 reference_raster.xml:1788 reference_raster.xml:1824 reference_raster.xml:1859 reference_raster.xml:1893 reference_raster.xml:1927 reference_raster.xml:1971 reference_raster.xml:2033 reference_raster.xml:2087 reference_raster.xml:2122 reference_raster.xml:2162 reference_raster.xml:2209 reference_raster.xml:2251 reference_raster.xml:2305 reference_raster.xml:2340 reference_raster.xml:2415 reference_raster.xml:2458 reference_raster.xml:2504 reference_raster.xml:2556 reference_raster.xml:2599 reference_raster.xml:2644 reference_raster.xml:2687 reference_raster.xml:2753 reference_raster.xml:2829 reference_raster.xml:2916 reference_raster.xml:3004 reference_raster.xml:3081 reference_raster.xml:3215 reference_raster.xml:3254 reference_raster.xml:3293 reference_raster.xml:3336 reference_raster.xml:3383 reference_raster.xml:3427 reference_raster.xml:3465 reference_raster.xml:3540 reference_raster.xml:3595 reference_raster.xml:3657 reference_raster.xml:3735 reference_raster.xml:3800 reference_raster.xml:3887 reference_raster.xml:3926 reference_raster.xml:3996 reference_raster.xml:4102 reference_raster.xml:4222 reference_raster.xml:4283 reference_raster.xml:4438 reference_raster.xml:4480 reference_raster.xml:4517 reference_raster.xml:4602 reference_raster.xml:4693 reference_raster.xml:4781 reference_raster.xml:4842 reference_raster.xml:4900 reference_raster.xml:5031 reference_raster.xml:5093 reference_raster.xml:5138 reference_raster.xml:5183 reference_raster.xml:5222 reference_raster.xml:5287 reference_raster.xml:5401 reference_raster.xml:5513 reference_raster.xml:5651 reference_raster.xml:5747 reference_raster.xml:5984 reference_raster.xml:6080 reference_raster.xml:6172 reference_raster.xml:6284 reference_raster.xml:6334 reference_raster.xml:6419 reference_raster.xml:6480 reference_raster.xml:6530 reference_raster.xml:6580 reference_raster.xml:6630 reference_raster.xml:6679 reference_raster.xml:6729 reference_raster.xml:6779 reference_raster.xml:6829 reference_raster.xml:6893 reference_raster.xml:6956 reference_raster.xml:7000 reference_raster.xml:7045 reference_raster.xml:7112 reference_raster.xml:7201 reference_raster.xml:7286 reference_raster.xml:7367 reference_raster.xml:7448 reference_raster.xml:7577 reference_raster.xml:7661 reference_raster.xml:7741 reference_raster.xml:7860 reference_raster.xml:7932 reference_raster.xml:8029 reference_raster.xml:8122 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_raster.xml:31 #, no-c-format msgid "geomval is a compound data type consisting of a geometry object referenced by the .geom field and val, a double precision value that represents the pixel value at a particular geometric location in a raster band. It is used by the ST_DumpAsPolygon and Raster intersection family of functions as an output type to explode a raster band into geometry polygons." msgstr "" #. Tag: title #: reference_raster.xml:37 reference_raster.xml:107 reference_raster.xml:157 reference_raster.xml:200 reference_raster.xml:245 reference_raster.xml:292 reference_raster.xml:487 reference_raster.xml:628 reference_raster.xml:664 reference_raster.xml:702 reference_raster.xml:750 reference_raster.xml:857 reference_raster.xml:1074 reference_raster.xml:1163 reference_raster.xml:1223 reference_raster.xml:1266 reference_raster.xml:1300 reference_raster.xml:1335 reference_raster.xml:1369 reference_raster.xml:1413 reference_raster.xml:1468 reference_raster.xml:1505 reference_raster.xml:1543 reference_raster.xml:1588 reference_raster.xml:1644 reference_raster.xml:1696 reference_raster.xml:1731 reference_raster.xml:1767 reference_raster.xml:1803 reference_raster.xml:1838 reference_raster.xml:1872 reference_raster.xml:1906 reference_raster.xml:1941 reference_raster.xml:1991 reference_raster.xml:2047 reference_raster.xml:2101 reference_raster.xml:2137 reference_raster.xml:2187 reference_raster.xml:2222 reference_raster.xml:2280 reference_raster.xml:2318 reference_raster.xml:2393 reference_raster.xml:2430 reference_raster.xml:2472 reference_raster.xml:2524 reference_raster.xml:2567 reference_raster.xml:2612 reference_raster.xml:2655 reference_raster.xml:2700 reference_raster.xml:2775 reference_raster.xml:2854 reference_raster.xml:2948 reference_raster.xml:3019 reference_raster.xml:3138 reference_raster.xml:3271 reference_raster.xml:3306 reference_raster.xml:3355 reference_raster.xml:3400 reference_raster.xml:3440 reference_raster.xml:3478 reference_raster.xml:3560 reference_raster.xml:3622 reference_raster.xml:3685 reference_raster.xml:3764 reference_raster.xml:3852 reference_raster.xml:3900 reference_raster.xml:3949 reference_raster.xml:4010 reference_raster.xml:4137 reference_raster.xml:4237 reference_raster.xml:4311 reference_raster.xml:4456 reference_raster.xml:4556 reference_raster.xml:4647 reference_raster.xml:4738 reference_raster.xml:4818 reference_raster.xml:4860 reference_raster.xml:5008 reference_raster.xml:5070 reference_raster.xml:5117 reference_raster.xml:5157 reference_raster.xml:5198 reference_raster.xml:5263 reference_raster.xml:5328 reference_raster.xml:5440 reference_raster.xml:5612 reference_raster.xml:5705 reference_raster.xml:5910 reference_raster.xml:6042 reference_raster.xml:6142 reference_raster.xml:6260 reference_raster.xml:6295 reference_raster.xml:6369 reference_raster.xml:6449 reference_raster.xml:6499 reference_raster.xml:6549 reference_raster.xml:6599 reference_raster.xml:6649 reference_raster.xml:6698 reference_raster.xml:6748 reference_raster.xml:6798 reference_raster.xml:6867 reference_raster.xml:6916 reference_raster.xml:7147 reference_raster.xml:7232 reference_raster.xml:7313 reference_raster.xml:7394 reference_raster.xml:7478 reference_raster.xml:7607 reference_raster.xml:7688 reference_raster.xml:7768 reference_raster.xml:7881 reference_raster.xml:7965 reference_raster.xml:8060 reference_raster.xml:8153 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_raster.xml:44 #, no-c-format msgid "addbandarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:45 #, no-c-format msgid "A composite type used as input into the ST_AddBand function defining the attributes and initial value of the new band." msgstr "" #. Tag: para #: reference_raster.xml:50 #, no-c-format msgid "A composite type used as input into the ST_AddBand function defining the attributes and initial value of the new band." msgstr "" #. Tag: term #: reference_raster.xml:55 #, no-c-format msgid "index integer" msgstr "" #. Tag: para #: reference_raster.xml:60 #, no-c-format msgid "1-based value indicating the position where the new band will be added amongst the raster's bands. If NULL, the new band will be added at the end of the raster's bands." msgstr "" #. Tag: term #: reference_raster.xml:67 #, no-c-format msgid "pixeltype text" msgstr "" #. Tag: para #: reference_raster.xml:72 #, no-c-format msgid "Pixel type of the new band. One of defined pixel types as described in ." msgstr "" #. Tag: term #: reference_raster.xml:79 #, no-c-format msgid "initialvalue double precision" msgstr "" #. Tag: para #: reference_raster.xml:84 #, no-c-format msgid "Initial value that all pixels of new band will be set to." msgstr "" #. Tag: term #: reference_raster.xml:91 #, no-c-format msgid "nodataval double precision" msgstr "" #. Tag: para #: reference_raster.xml:96 #, no-c-format msgid "NODATA value of the new band. If NULL, the new band will not have a NODATA value assigned." msgstr "" #. Tag: refname #: reference_raster.xml:116 #, no-c-format msgid "rastbandarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:117 #, no-c-format msgid "A composite type for use when needing to express a raster and a band index of that raster." msgstr "" #. Tag: para #: reference_raster.xml:122 #, no-c-format msgid "A composite type for use when needing to express a raster and a band index of that raster." msgstr "" #. Tag: term #: reference_raster.xml:128 #, no-c-format msgid "rast raster" msgstr "" #. Tag: para #: reference_raster.xml:133 #, no-c-format msgid "The raster in question/" msgstr "" #. Tag: term #: reference_raster.xml:140 reference_raster.xml:263 #, no-c-format msgid "nband integer" msgstr "" #. Tag: para #: reference_raster.xml:145 #, no-c-format msgid "1-based value indicating the band of raster" msgstr "" #. Tag: refname #: reference_raster.xml:166 #, no-c-format msgid "raster" msgstr "" #. Tag: refpurpose #: reference_raster.xml:167 #, no-c-format msgid "raster spatial data type." msgstr "" #. Tag: para #: reference_raster.xml:172 #, no-c-format msgid "raster is a spatial data type used to represent raster data such as those imported from jpegs, tiffs, pngs, digital elevation models. Each raster has 1 or more bands each having a set of pixel values. Rasters can be georeferenced." msgstr "" #. Tag: para #: reference_raster.xml:175 #, no-c-format msgid "Requires PostGIS be compiled with GDAL support. Currently rasters can be implicitly converted to geometry type, but the conversion returns the of the raster. This auto casting may be removed in the near future so don't rely on it." msgstr "" #. Tag: title #: reference_raster.xml:181 #, no-c-format msgid "Casting Behavior" msgstr "" #. Tag: para #: reference_raster.xml:182 #, no-c-format msgid "This section lists the automatic as well as explicit casts allowed for this data type" msgstr "" #. Tag: entry #: reference_raster.xml:187 #, no-c-format msgid "Cast To" msgstr "" #. Tag: entry #: reference_raster.xml:188 #, no-c-format msgid "Behavior" msgstr "" #. Tag: entry #: reference_raster.xml:191 #, no-c-format msgid "geometry" msgstr "" #. Tag: entry #: reference_raster.xml:192 #, no-c-format msgid "automatic" msgstr "" #. Tag: refname #: reference_raster.xml:207 #, no-c-format msgid "reclassarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:208 #, no-c-format msgid "A composite type used as input into the ST_Reclass function defining the behavior of reclassification." msgstr "" #. Tag: para #: reference_raster.xml:212 #, no-c-format msgid "A composite type used as input into the ST_Reclass function defining the behavior of reclassification." msgstr "" #. Tag: term #: reference_raster.xml:215 #, no-c-format msgid "nband integer" msgstr "" #. Tag: para #: reference_raster.xml:216 #, no-c-format msgid "The band number of band to reclassify." msgstr "" #. Tag: term #: reference_raster.xml:219 #, no-c-format msgid "reclassexpr text" msgstr "" #. Tag: para #: reference_raster.xml:220 #, no-c-format msgid "range expression consisting of comma delimited range:map_range mappings. : to define mapping that defines how to map old band values to new band values. ( means >, ) means less than, ] < or equal, [ means > or equal" msgstr "" #. Tag: programlisting #: reference_raster.xml:221 #, no-c-format msgid "" "1. [a-b] = a <= x <= b\n" "\n" "2. (a-b] = a < x <= b\n" "\n" "3. [a-b) = a <= x < b\n" "\n" "4. (a-b) = a < x < b" msgstr "" #. Tag: para #: reference_raster.xml:222 #, no-c-format msgid "( notation is optional so a-b means the same as (a-b)" msgstr "" #. Tag: term #: reference_raster.xml:227 #, no-c-format msgid "pixeltype text" msgstr "" #. Tag: para #: reference_raster.xml:228 #, no-c-format msgid "One of defined pixel types as described in " msgstr "" #. Tag: term #: reference_raster.xml:231 #, no-c-format msgid "nodataval double precision" msgstr "" #. Tag: para #: reference_raster.xml:232 #, no-c-format msgid "Value to treat as no data. For image outputs that support transparency, these will be blank." msgstr "" #. Tag: title #: reference_raster.xml:237 #, no-c-format msgid "Example: Reclassify band 2 as an 8BUI where 255 is nodata value" msgstr "" #. Tag: programlisting #: reference_raster.xml:238 #, no-c-format msgid "SELECT ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255)::reclassarg;" msgstr "" #. Tag: title #: reference_raster.xml:241 #, no-c-format msgid "Example: Reclassify band 1 as an 1BB and no nodata value defined" msgstr "" #. Tag: programlisting #: reference_raster.xml:242 #, no-c-format msgid "SELECT ROW(1, '0-100]:0, (100-255:1', '1BB', NULL)::reclassarg;" msgstr "" #. Tag: refname #: reference_raster.xml:252 #, no-c-format msgid "unionarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:253 #, no-c-format msgid "A composite type used as input into the ST_Union function defining the bands to be processed and behavior of the UNION operation." msgstr "" #. Tag: para #: reference_raster.xml:258 #, no-c-format msgid "A composite type used as input into the ST_Union function defining the bands to be processed and behavior of the UNION operation." msgstr "" #. Tag: para #: reference_raster.xml:268 #, no-c-format msgid "1-based value indicating the band of each input raster to be processed." msgstr "" #. Tag: term #: reference_raster.xml:275 #, no-c-format msgid "uniontype text" msgstr "" #. Tag: para #: reference_raster.xml:280 #, no-c-format msgid "Type of UNION operation. One of defined types as described in ." msgstr "" #. Tag: title #: reference_raster.xml:302 #, no-c-format msgid "Raster Management" msgstr "" #. Tag: refname #: reference_raster.xml:305 #, no-c-format msgid "AddRasterConstraints" msgstr "" #. Tag: refpurpose #: reference_raster.xml:307 #, no-c-format msgid "Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize, alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to be inferred. Returns true of the constraint setting was accomplished and if issues a notice." msgstr "" #. Tag: funcsynopsis #: reference_raster.xml:311 #, no-c-format msgid " boolean AddRasterConstraints name rasttable name rastcolumn boolean srid boolean scale_x boolean scale_y boolean blocksize_x boolean blocksize_y boolean same_alignment boolean regular_blocking boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true boolean AddRasterConstraints name rasttable name rastcolumn text[] VARIADIC constraints boolean AddRasterConstraints name rastschema name rasttable name rastcolumn text[] VARIADIC constraints boolean AddRasterConstraints name rastschema name rasttable name rastcolumn boolean srid=true boolean scale_x=true boolean scale_y=true boolean blocksize_x=true boolean blocksize_y=true boolean same_alignment=true boolean regular_blocking=true boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true " msgstr "" #. Tag: para #: reference_raster.xml:441 #, no-c-format msgid "Generates constraints on a raster column that are used to display information in the raster_columns raster catalog. The rastschema is the name of the table schema the table resides in. The srid must be an integer value reference to an entry in the SPATIAL_REF_SYS table." msgstr "" #. Tag: para #: reference_raster.xml:446 #, no-c-format msgid "raster2pgsql loader uses this function to register raster tables" msgstr "" #. Tag: para #: reference_raster.xml:447 #, no-c-format msgid "Valid constraint names to pass in: refer to for more details." msgstr "" #. Tag: para #: reference_raster.xml:449 #, no-c-format msgid "blocksize sets both X and Y blocksize" msgstr "" #. Tag: para #: reference_raster.xml:450 #, no-c-format msgid "blocksize_x sets X tile (width in pixels of each tile)" msgstr "" #. Tag: para #: reference_raster.xml:451 #, no-c-format msgid "blocksize_y sets Y tile (height in pixels of each tile)" msgstr "" #. Tag: para #: reference_raster.xml:452 #, no-c-format msgid "extent computes extent of whole table and applys constraint all rasters must be within that extent" msgstr "" #. Tag: para #: reference_raster.xml:454 #, no-c-format msgid "num_bands number of bands" msgstr "" #. Tag: para #: reference_raster.xml:455 #, no-c-format msgid "pixel_types reads array of pixel types for each band ensure all band n have same pixel type" msgstr "" #. Tag: para #: reference_raster.xml:456 #, no-c-format msgid "regular_blocking apply informational flag to denote all tiles are regularly blocked" msgstr "" #. Tag: para #: reference_raster.xml:457 #, no-c-format msgid "same_alignment ensures they all have same alignment meaning any two tiles you compare will return true for. Refer to" msgstr "" #. Tag: para #: reference_raster.xml:458 #, no-c-format msgid "srid ensures all have same srid" msgstr "" #. Tag: para #: reference_raster.xml:459 #, no-c-format msgid "More -- any listed as inputs into the above functions" msgstr "" #. Tag: para #: reference_raster.xml:462 #, no-c-format msgid "This function infers the constraints from the data already present in the table. As such for it to work, you must create the raster column first and then load it with data." msgstr "" #. Tag: para #: reference_raster.xml:467 #, no-c-format msgid "If you need to load more data in your tables after you have already applied constraints, you may want to run the DropRasterConstraints if the extent of your data has changed." msgstr "" #. Tag: para #: reference_raster.xml:471 reference_raster.xml:620 reference_raster.xml:1114 reference_raster.xml:2126 reference_raster.xml:2259 reference_raster.xml:2419 reference_raster.xml:2462 reference_raster.xml:2514 reference_raster.xml:3934 reference_raster.xml:4000 reference_raster.xml:4123 reference_raster.xml:4226 reference_raster.xml:4290 reference_raster.xml:4443 reference_raster.xml:4908 reference_raster.xml:5187 reference_raster.xml:5252 reference_raster.xml:5317 reference_raster.xml:5663 reference_raster.xml:5800 reference_raster.xml:6002 reference_raster.xml:6099 reference_raster.xml:6219 reference_raster.xml:6343 reference_raster.xml:6423 reference_raster.xml:6488 reference_raster.xml:6538 reference_raster.xml:6588 reference_raster.xml:6638 reference_raster.xml:6687 reference_raster.xml:6737 reference_raster.xml:6787 reference_raster.xml:7870 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: title #: reference_raster.xml:475 #, no-c-format msgid "Examples: Apply all possible constraints on column based on data" msgstr "" #. Tag: programlisting #: reference_raster.xml:477 #, no-c-format msgid "" "CREATE TABLE myrasters(rid SERIAL primary key, rast raster);\n" "INSERT INTO myrasters(rast)\n" "SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0,4326), 1, '8BSI'::text, -129, NULL);\n" "\n" "SELECT AddRasterConstraints('myrasters'::name, 'rast'::name);\n" "\n" "\n" "-- verify if registered correctly in the raster_columns view --\n" "SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values\n" " FROM raster_columns\n" " WHERE r_table_name = 'myrasters';\n" " \n" " srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values\n" "------+---------+---------+-------------+-------------+-----------+-------------+---------------\n" " 4326 | 2 | 2 | 1000 | 1000 | 1 | {8BSI} | {0}" msgstr "" #. Tag: title #: reference_raster.xml:481 #, no-c-format msgid "Examples: Apply single constraint" msgstr "" #. Tag: programlisting #: reference_raster.xml:483 #, no-c-format msgid "" "CREATE TABLE public.myrasters2(rid SERIAL primary key, rast raster);\n" "INSERT INTO myrasters2(rast)\n" "SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0,4326), 1, '8BSI'::text, -129, NULL);\n" "\n" "SELECT AddRasterConstraints('public'::name, 'myrasters2'::name, 'rast'::name,'regular_blocking', 'blocksize');\n" "-- get notice--\n" "NOTICE: Adding regular blocking constraint\n" "INFO: The regular_blocking constraint is just a flag indicating that the column \"rast\" is regularly blocked. As no function exist yet to assert that a raster column is regularly blocked, it is up to the end-user to ensure that the column is truly regularly blocked.\n" "CONTEXT: PL/pgSQL function \"addrasterconstraints\" line 85 at assignment\n" "NOTICE: Adding blocksize-X constraint\n" "NOTICE: Adding blocksize-Y constraint" msgstr "" #. Tag: para #: reference_raster.xml:489 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_raster.xml:495 #, no-c-format msgid "DropRasterConstraints" msgstr "" #. Tag: refpurpose #: reference_raster.xml:497 #, no-c-format msgid "Drops PostGIS raster constraints that refer to a raster table column. Useful if you need to reload data or update your raster column data." msgstr "" #. Tag: funcsynopsis #: reference_raster.xml:501 #, no-c-format msgid " boolean DropRasterConstraints name rasttable name rastcolumn boolean srid boolean scale_x boolean scale_y boolean blocksize_x boolean blocksize_y boolean same_alignment boolean regular_blocking boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true boolean DropRasterConstraints name rastschema name rasttable name rastcolumn boolean srid=true boolean scale_x=true boolean scale_y=true boolean blocksize_x=true boolean blocksize_y=true boolean same_alignment=true boolean regular_blocking=true boolean num_bands=true boolean pixel_types=true boolean nodata_values=true boolean out_db=true boolean extent=true boolean DropRasterConstraints name rastschema name rasttable name rastcolumn text[] constraints " msgstr "" #. Tag: para #: reference_raster.xml:614 #, no-c-format msgid "Drops PostGIS raster constraints that refer to a raster table column that were added by . Useful if you need to load more data or update your raster column data. You do not need to do this if you want to get rid of a raster table or a raster column." msgstr "" #. Tag: para #: reference_raster.xml:616 #, no-c-format msgid "To drop a raster table use the standard" msgstr "" #. Tag: programlisting #: reference_raster.xml:616 #, no-c-format msgid "DROP TABLE mytable" msgstr "" #. Tag: para #: reference_raster.xml:617 #, no-c-format msgid "To drop just a raster column and leave the rest of the table, use standard SQL" msgstr "" #. Tag: programlisting #: reference_raster.xml:617 #, no-c-format msgid "ALTER TABLE mytable DROP COLUMN rast" msgstr "" #. Tag: para #: reference_raster.xml:618 #, no-c-format msgid "the table will disappear from the raster_columns catalog if the column or table is dropped. However if only the constraints are dropped, the raster column will still be listed in the raster_columns catalog, but there will be no other information about it aside from the column name and table." msgstr "" #. Tag: title #: reference_raster.xml:623 reference_raster.xml:658 reference_raster.xml:696 reference_raster.xml:1118 reference_raster.xml:1216 reference_raster.xml:1260 reference_raster.xml:1293 reference_raster.xml:1328 reference_raster.xml:1362 reference_raster.xml:1497 reference_raster.xml:1535 reference_raster.xml:1578 reference_raster.xml:1634 reference_raster.xml:1686 reference_raster.xml:1724 reference_raster.xml:1759 reference_raster.xml:1795 reference_raster.xml:1831 reference_raster.xml:1865 reference_raster.xml:1899 reference_raster.xml:1933 reference_raster.xml:1984 reference_raster.xml:2040 reference_raster.xml:2094 reference_raster.xml:2130 reference_raster.xml:2180 reference_raster.xml:2215 reference_raster.xml:2273 reference_raster.xml:2311 reference_raster.xml:2386 reference_raster.xml:2423 reference_raster.xml:2467 reference_raster.xml:2519 reference_raster.xml:2562 reference_raster.xml:2607 reference_raster.xml:2650 reference_raster.xml:2695 reference_raster.xml:2762 reference_raster.xml:2845 reference_raster.xml:2937 reference_raster.xml:3012 reference_raster.xml:3224 reference_raster.xml:3265 reference_raster.xml:3299 reference_raster.xml:3347 reference_raster.xml:3390 reference_raster.xml:3471 reference_raster.xml:3554 reference_raster.xml:3615 reference_raster.xml:3677 reference_raster.xml:3756 reference_raster.xml:3811 reference_raster.xml:3893 reference_raster.xml:3942 reference_raster.xml:4004 reference_raster.xml:4230 reference_raster.xml:4447 reference_raster.xml:4490 reference_raster.xml:4730 reference_raster.xml:4853 reference_raster.xml:5043 reference_raster.xml:5113 reference_raster.xml:5150 reference_raster.xml:5667 reference_raster.xml:6006 reference_raster.xml:6226 reference_raster.xml:6291 reference_raster.xml:6492 reference_raster.xml:6542 reference_raster.xml:6592 reference_raster.xml:6642 reference_raster.xml:6691 reference_raster.xml:6741 reference_raster.xml:6791 reference_raster.xml:6862 reference_raster.xml:6911 reference_raster.xml:6966 reference_raster.xml:7011 reference_raster.xml:7056 reference_raster.xml:7140 reference_raster.xml:7227 reference_raster.xml:7308 reference_raster.xml:7389 reference_raster.xml:7470 reference_raster.xml:7602 reference_raster.xml:7683 reference_raster.xml:7763 reference_raster.xml:7960 reference_raster.xml:8055 reference_raster.xml:8148 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_raster.xml:625 #, no-c-format msgid "" "SELECT DropRasterConstraints ('myrasters','rast');\n" "----RESULT output ---\n" "t\n" "\n" "-- verify change in raster_columns --\n" "SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values\n" " FROM raster_columns\n" " WHERE r_table_name = 'myrasters';\n" " \n" " srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values\n" "------+---------+---------+-------------+-------------+-----------+-------------+---------------\n" " 0 | | | | | | |" msgstr "" #. Tag: refname #: reference_raster.xml:636 #, no-c-format msgid "PostGIS_Raster_Lib_Build_Date" msgstr "" #. Tag: refpurpose #: reference_raster.xml:638 #, no-c-format msgid "Reports full raster library build date." msgstr "" #. Tag: funcprototype #: reference_raster.xml:643 #, no-c-format msgid "text PostGIS_Raster_Lib_Build_Date " msgstr "" #. Tag: para #: reference_raster.xml:654 #, no-c-format msgid "Reports raster build date" msgstr "" #. Tag: programlisting #: reference_raster.xml:660 #, no-c-format msgid "" "SELECT PostGIS_Raster_Lib_Build_Date();\n" "postgis_raster_lib_build_date\n" "-----------------------------\n" "2010-04-28 21:15:10" msgstr "" #. Tag: refname #: reference_raster.xml:672 #, no-c-format msgid "PostGIS_Raster_Lib_Version" msgstr "" #. Tag: refpurpose #: reference_raster.xml:674 #, no-c-format msgid "Reports full raster version and build configuration infos." msgstr "" #. Tag: funcprototype #: reference_raster.xml:680 #, no-c-format msgid "text PostGIS_Raster_Lib_Version " msgstr "" #. Tag: para #: reference_raster.xml:691 #, no-c-format msgid "Reports full raster version and build configuration infos." msgstr "" #. Tag: programlisting #: reference_raster.xml:698 #, no-c-format msgid "" "SELECT PostGIS_Raster_Lib_Version();\n" "postgis_raster_lib_version\n" "-----------------------------\n" " 2.0.0" msgstr "" #. Tag: refname #: reference_raster.xml:712 #, no-c-format msgid "ST_GDALDrivers" msgstr "" #. Tag: refpurpose #: reference_raster.xml:714 #, no-c-format msgid "Returns a list of raster formats supported by your lib gdal. These are the formats you can output your raster using ST_AsGDALRaster." msgstr "" #. Tag: funcprototype #: reference_raster.xml:719 #, no-c-format msgid "setof record ST_GDALDrivers integer OUT idx text OUT short_name text OUT long_name text OUT create_options" msgstr "" #. Tag: para #: reference_raster.xml:732 #, no-c-format msgid "Returns a list of raster formats short_name,long_name and creator options of each format supported by your lib gdal. Use the short_name as input in the format parameter of . Options vary depending on what drivers your libgdal was compiled with. create_options returns an xml formatted set of CreationOptionList/Option consisting of name and optional type, description and set of VALUE for each creator option for the specific driver." msgstr "" #. Tag: para #: reference_raster.xml:735 reference_raster.xml:1042 reference_raster.xml:4537 reference_raster.xml:4635 reference_raster.xml:4726 reference_raster.xml:4806 #, no-c-format msgid "Availability: 2.0.0 - requires GDAL >= 1.6.0." msgstr "" #. Tag: title #: reference_raster.xml:739 #, no-c-format msgid "Examples: List of Drivers" msgstr "" #. Tag: programlisting #: reference_raster.xml:741 #, no-c-format msgid "" "SELECT short_name, long_name\n" "FROM st_gdaldrivers()\n" "ORDER BY short_name;\n" " short_name | long_name\n" "----------------+--------------------------------------\n" "AAIGrid | Arc/Info ASCII Grid\n" "DTED | DTED Elevation Raster\n" "EHdr | ESRI .hdr Labelled\n" "FIT | FIT Image\n" "GIF | Graphics Interchange Format (.gif)\n" "GSAG | Golden Software ASCII Grid (.grd)\n" "GSBG | Golden Software Binary Grid (.grd)\n" "GTiff | GeoTIFF\n" "HF2 | HF2/HFZ heightfield raster\n" "HFA | Erdas Imagine Images (.img)\n" "ILWIS | ILWIS Raster Map\n" "INGR | Intergraph Raster\n" "JPEG | JPEG JFIF\n" "KMLSUPEROVERLAY | Kml Super Overlay\n" "NITF | National Imagery Transmission Format\n" "PNG | Portable Network Graphics\n" "R | R Object Data Store\n" "SAGA | SAGA GIS Binary Grid (.sdat)\n" "SRTMHGT | SRTMHGT File Format\n" "USGSDEM | USGS Optional ASCII DEM (and CDED)\n" "VRT | Virtual Raster\n" "XPM | X11 PixMap Format" msgstr "" #. Tag: title #: reference_raster.xml:743 #, no-c-format msgid "Example: List of options for each driver" msgstr "" #. Tag: programlisting #: reference_raster.xml:744 #, no-c-format msgid "" "-- Output the create options XML column of JPEG as a table --\n" "-- Note you can use these creator options in ST_AsGDALRaster options argument\n" "SELECT (xpath('@name', g.opt))[1]::text As oname,\n" " (xpath('@type', g.opt))[1]::text As otype,\n" " (xpath('@description', g.opt))[1]::text As descrip\n" "FROM (SELECT unnest(xpath('/CreationOptionList/Option', create_options::xml)) As opt\n" "FROM st_gdaldrivers()\n" "WHERE short_name = 'JPEG') As g;\n" "\n" " oname | otype | descrip\n" "-------------+---------+-----------------------------\n" " PROGRESSIVE | boolean |\n" " QUALITY | int | good=100, bad=0, default=75\n" " WORLDFILE | boolean |" msgstr "" #. Tag: programlisting #: reference_raster.xml:746 #, no-c-format msgid "" "-- raw xml output for creator options for GeoTiff --\n" "SELECT create_options\n" "FROM st_gdaldrivers()\n" "WHERE short_name = 'GTiff';\n" "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "\n" " --3d linestring\n" " SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3, 4 5 6)');\n" " 1,2,3 4,5,6\n" " ]]>" msgstr "" #. Tag: para #: reference_output.xml:529 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_output.xml:534 #, no-c-format msgid "ST_AsSVG" msgstr "" #. Tag: refpurpose #: reference_output.xml:536 #, no-c-format msgid "Returns a Geometry in SVG path data given a geometry or geography object." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:540 #, no-c-format msgid " text ST_AsSVG geometry geom integer rel=0 integer maxdecimaldigits=15 text ST_AsSVG geography geog integer rel=0 integer maxdecimaldigits=15 " msgstr "" #. Tag: para #: reference_output.xml:559 #, no-c-format msgid "Return the geometry as Scalar Vector Graphics (SVG) path data. Use 1 as second argument to have the path data implemented in terms of relative moves, the default (or 0) uses absolute moves. Third argument may be used to reduce the maximum number of decimal digits used in output (defaults to 15). Point geometries will be rendered as cx/cy when 'rel' arg is 0, x/y when 'rel' is 1. Multipoint geometries are delimited by commas (\",\"), GeometryCollection geometries are delimited by semicolons (\";\")." msgstr "" #. Tag: para #: reference_output.xml:569 #, no-c-format msgid "Availability: 1.2.2. Availability: 1.4.0 Changed in PostGIS 1.4.0 to include L command in absolute path to conform to http://www.w3.org/TR/SVG/paths.html#PathDataBNF" msgstr "" #. Tag: para #: reference_output.xml:572 #, no-c-format msgid "Changed: 2.0.0 to use default args and support named args" msgstr "" #. Tag: programlisting #: reference_output.xml:577 #, no-c-format msgid "" "SELECT ST_AsSVG(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));\n" "\n" " st_assvg\n" " --------\n" " M 0 0 L 0 -1 1 -1 1 0 Z" msgstr "" #. Tag: refname #: reference_output.xml:583 #, no-c-format msgid "ST_AsX3D" msgstr "" #. Tag: refpurpose #: reference_output.xml:585 #, no-c-format msgid "Returns a Geometry in X3D xml node element format: ISO-IEC-19776-1.2-X3DEncodings-XML" msgstr "" #. Tag: funcprototype #: reference_output.xml:590 #, no-c-format msgid "text ST_AsX3D geometry g1 integer maxdecimaldigits=15 integer options=0" msgstr "" #. Tag: para #: reference_output.xml:602 #, no-c-format msgid "Returns a geometry as an X3D xml formatted node element http://web3d.org/x3d/specifications/ISO-IEC-19776-1.2-X3DEncodings-XML/Part01/EncodingOfNodes.html. If maxdecimaldigits (precision) is not specified then defaults to 15." msgstr "" #. Tag: para #: reference_output.xml:604 #, no-c-format msgid "There are various options for translating PostGIS geometries to X3D since X3D geometry types don't map directly to PostGIS geometry types and some newer X3D types that might be better mappings we ahve avoided since most rendering tools don't currently support them. These are the mappings we have settled on. Feel free to post a bug ticket if you have thoughts on the idea or ways we can allow people to denote their preferred mappings." msgstr "" #. Tag: para #: reference_output.xml:606 #, no-c-format msgid "Below is how we currently map PostGIS 2D/3D types to X3D types" msgstr "" #. Tag: entry #: reference_output.xml:613 #, no-c-format msgid "PostGIS Type" msgstr "" #. Tag: entry #: reference_output.xml:614 #, no-c-format msgid "2D X3D Type" msgstr "" #. Tag: entry #: reference_output.xml:615 #, no-c-format msgid "3D X3D Type" msgstr "" #. Tag: entry #: reference_output.xml:620 #, no-c-format msgid "LINESTRING" msgstr "" #. Tag: entry #: reference_output.xml:621 reference_output.xml:626 #, no-c-format msgid "not yet implemented - will be PolyLine2D" msgstr "" #. Tag: entry #: reference_output.xml:622 #, no-c-format msgid "LineSet" msgstr "" #. Tag: entry #: reference_output.xml:625 #, no-c-format msgid "MULTILINESTRING" msgstr "" #. Tag: entry #: reference_output.xml:627 #, no-c-format msgid "IndexedLineSet" msgstr "" #. Tag: entry #: reference_output.xml:630 #, no-c-format msgid "MULTIPOINT" msgstr "" #. Tag: entry #: reference_output.xml:631 #, no-c-format msgid "Polypoint2D" msgstr "" #. Tag: entry #: reference_output.xml:632 #, no-c-format msgid "PointSet" msgstr "" #. Tag: entry #: reference_output.xml:635 #, no-c-format msgid "POINT" msgstr "" #. Tag: entry #: reference_output.xml:636 reference_output.xml:637 #, no-c-format msgid "outputs the space delimited coordinates" msgstr "" #. Tag: entry #: reference_output.xml:640 #, no-c-format msgid "(MULTI) POLYGON, POLYHEDRALSURFACE" msgstr "" #. Tag: entry #: reference_output.xml:641 #, no-c-format msgid "Invalid X3D markup" msgstr "" #. Tag: entry #: reference_output.xml:642 #, no-c-format msgid "IndexedFaceSet (inner rings currently output as another faceset)" msgstr "" #. Tag: entry #: reference_output.xml:645 #, no-c-format msgid "TIN" msgstr "" #. Tag: entry #: reference_output.xml:646 #, no-c-format msgid "TriangleSet2D (Not Yet Implemented)" msgstr "" #. Tag: entry #: reference_output.xml:647 #, no-c-format msgid "IndexedTriangleSet" msgstr "" #. Tag: para #: reference_output.xml:652 #, no-c-format msgid "2D geometry support not yet complete. Inner rings currently just drawn as separate polygons. We are working on these." msgstr "" #. Tag: para #: reference_output.xml:653 #, no-c-format msgid "Lots of advancements happening in 3D space particularly with X3D Integration with HTML5" msgstr "" #. Tag: para #: reference_output.xml:654 #, no-c-format msgid "There is also a nice open source X3D viewer you can use to view rendered geometries. Free Wrl http://freewrl.sourceforge.net/ binaries available for Mac, Linux, and Windows. Use the FreeWRL_Launcher packaged to view the geometries." msgstr "" #. Tag: para #: reference_output.xml:655 #, no-c-format msgid "Availability: 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML" msgstr "" #. Tag: title #: reference_output.xml:667 #, no-c-format msgid "Example: Create a fully functional X3D document - This will generate a cube that is viewable in FreeWrl and other X3D viewers." msgstr "" #. Tag: programlisting #: reference_output.xml:668 #, no-c-format msgid "" "\n" "\n" "\n" " \n" " \n" " \n" " \n" " \n" " ' || \n" " ST_AsX3D( ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" "((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ||\n" " '\n" " \n" " \n" "' As x3ddoc;]]>\n" "\n" " x3ddoc\n" " --------\n" "\n" "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "]]>" msgstr "" #. Tag: title #: reference_output.xml:671 #, no-c-format msgid "Example: An Octagon elevated 3 Units and decimal precision of 6" msgstr "" #. Tag: programlisting #: reference_output.xml:672 #, no-c-format msgid "" "SELECT ST_AsX3D(\n" "ST_Translate(\n" " ST_Force_3d(\n" " ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,\n" " 3)\n" " ,6) As x3dfrag;\n" "\n" "x3dfrag\n" "--------\n" "\n" " \n" "]]>" msgstr "" #. Tag: title #: reference_output.xml:675 #, no-c-format msgid "Example: TIN" msgstr "" #. Tag: programlisting #: reference_output.xml:676 #, no-c-format msgid "" "\n" "\n" " x3dfrag\n" " --------\n" "]]>" msgstr "" #. Tag: title #: reference_output.xml:679 #, no-c-format msgid "Example: Closed multilinestring (the boundary of a polygon with holes)" msgstr "" #. Tag: programlisting #: reference_output.xml:680 #, no-c-format msgid "" "\n" "\n" " x3dfrag\n" " --------\n" "\n" " \n" " ]]>" msgstr "" #. Tag: refname #: reference_output.xml:686 #, no-c-format msgid "ST_GeoHash" msgstr "" #. Tag: refpurpose #: reference_output.xml:688 #, no-c-format msgid "Return a GeoHash representation (geohash.org) of the geometry." msgstr "" #. Tag: funcprototype #: reference_output.xml:693 #, no-c-format msgid "text ST_GeoHash geometry geom integer maxchars=full_precision_of_point" msgstr "" #. Tag: para #: reference_output.xml:704 #, no-c-format msgid "Return a GeoHash representation (geohash.org) of the geometry. A GeoHash encodes a point into a text form that is sortable and searchable based on prefixing. A shorter GeoHash is a less precise representation of a point. It can also be thought of as a box, that contains the actual point." msgstr "" #. Tag: para #: reference_output.xml:706 #, no-c-format msgid "If no maxchars is specficified ST_GeoHash returns a GeoHash based on full precision of the input geometry type. Points return a GeoHash with 20 characters of precision (about enough to hold the full double precision of the input). Other types return a GeoHash with a variable amount of precision, based on the size of the feature. Larger features are represented with less precision, smaller features with more precision. The idea is that the box implied by the GeoHash will always contain the input feature." msgstr "" #. Tag: para #: reference_output.xml:708 #, no-c-format msgid "If maxchars is specified ST_GeoHash returns a GeoHash with at most that many characters so a possibly lower precision representation of the input geometry. For non-points, the starting point of the calculation is the center of the bounding box of the geometry." msgstr "" #. Tag: para #: reference_output.xml:710 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: para #: reference_output.xml:713 #, no-c-format msgid "ST_GeoHash will not work with geometries that are not in geographic (lon/lat) coordinates." msgstr "" #. Tag: programlisting #: reference_output.xml:721 #, no-c-format msgid "" "" msgstr "" #. Tag: refname #: reference_output.xml:733 #, no-c-format msgid "ST_AsText" msgstr "" #. Tag: refpurpose #: reference_output.xml:734 #, no-c-format msgid "Return the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:738 #, no-c-format msgid " text ST_AsText geometry g1 text ST_AsText geography g1 " msgstr "" #. Tag: para #: reference_output.xml:753 #, no-c-format msgid "Returns the Well-Known Text representation of the geometry/geography." msgstr "" #. Tag: para #: reference_output.xml:756 #, no-c-format msgid "The WKT spec does not include the SRID. To get the SRID as part of the data, use the non-standard PostGIS " msgstr "" #. Tag: para #: reference_output.xml:763 #, no-c-format msgid "ST_AsText is the reverse of . Use to convert to a postgis geometry from ST_AsText representation." msgstr "" #. Tag: para #: reference_output.xml:766 #, no-c-format msgid "Availability: 1.5 - support for geography was introduced." msgstr "" #. Tag: para #: reference_output.xml:768 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.25" msgstr "" #. Tag: programlisting #: reference_output.xml:776 #, no-c-format msgid "" "SELECT ST_AsText('01030000000100000005000000000000000000\n" "000000000000000000000000000000000000000000000000\n" "F03F000000000000F03F000000000000F03F000000000000F03\n" "F000000000000000000000000000000000000000000000000');\n" "\n" " st_astext\n" "--------------------------------\n" " POLYGON((0 0,0 1,1 1,1 0,0 0))\n" "(1 row)" msgstr "" #. Tag: para #: reference_output.xml:783 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_output.xml:790 #, no-c-format msgid "ST_AsLatLonText" msgstr "" #. Tag: refpurpose #: reference_output.xml:791 #, no-c-format msgid "Return the Degrees, Minutes, Seconds representation of the given point." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:795 #, no-c-format msgid " text ST_AsLatLonText geometry pt text ST_AsLatLonText geometry pt text format " msgstr "" #. Tag: para #: reference_output.xml:811 #, no-c-format msgid "Returns the Degrees, Minutes, Seconds representation of the point." msgstr "" #. Tag: para #: reference_output.xml:814 #, no-c-format msgid "It is assumed the point is in a lat/lon projection. The X (lon) and Y (lat) coordinates are normalized in the output to the \"normal\" range (-180 to +180 for lon, -90 to +90 for lat)." msgstr "" #. Tag: para #: reference_output.xml:817 #, no-c-format msgid "The text parameter is a format string containing the format for the resulting text, similar to a date format string. Valid tokens are \"D\" for degrees, \"M\" for minutes, \"S\" for seconds, and \"C\" for cardinal direction (NSEW). DMS tokens may be repeated to indicate desired width and precision (\"SSS.SSSS\" means \" 1.0023\")." msgstr "" #. Tag: para #: reference_output.xml:822 #, no-c-format msgid "\"M\", \"S\", and \"C\" are optional. If \"C\" is omitted, degrees are shown with a \"-\" sign if south or west. If \"S\" is omitted, minutes will be shown as decimal with as many digits of precision as you specify. If \"M\" is also omitted, degrees are shown as decimal with as many digits precision as you specify." msgstr "" #. Tag: para #: reference_output.xml:827 #, no-c-format msgid "If the format string is omitted (or zero-length) a default format will be used." msgstr "" #. Tag: para #: reference_output.xml:833 #, no-c-format msgid "Availability: 2.0" msgstr "" #. Tag: para #: reference_output.xml:839 #, no-c-format msgid "Default format." msgstr "" #. Tag: programlisting #: reference_output.xml:840 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));\n" " st_aslatlontext \n" "----------------------------\n" " 2°19'29.928\"S 3°14'3.243\"W" msgstr "" #. Tag: para #: reference_output.xml:841 #, no-c-format msgid "Providing a format (same as the default)." msgstr "" #. Tag: programlisting #: reference_output.xml:842 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS\"C'));\n" " st_aslatlontext \n" "----------------------------\n" " 2°19'29.928\"S 3°14'3.243\"W" msgstr "" #. Tag: para #: reference_output.xml:843 #, no-c-format msgid "Characters other than D, M, S, C and . are just passed through." msgstr "" #. Tag: programlisting #: reference_output.xml:844 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M minutes, S seconds to the C'));\n" " st_aslatlontext \n" "--------------------------------------------------------------------------------------\n" " 2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds to the W" msgstr "" #. Tag: para #: reference_output.xml:845 #, no-c-format msgid "Signed degrees instead of cardinal directions." msgstr "" #. Tag: programlisting #: reference_output.xml:846 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS\"'));\n" " st_aslatlontext \n" "----------------------------\n" " -2°19'29.928\" -3°14'3.243\"" msgstr "" #. Tag: para #: reference_output.xml:847 #, no-c-format msgid "Decimal degrees." msgstr "" #. Tag: programlisting #: reference_output.xml:848 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));\n" " st_aslatlontext \n" "-----------------------------------\n" " 2.3250 degrees S 3.2342 degrees W" msgstr "" #. Tag: para #: reference_output.xml:849 #, no-c-format msgid "Excessively large values are normalized." msgstr "" #. Tag: programlisting #: reference_output.xml:850 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));\n" " st_aslatlontext \n" "-------------------------------\n" " 72°19'29.928\"S 57°45'56.757\"E" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/README0000644000000000000000000000077212025614072017626 0ustar rootrootThis directory contains the template files to use for starting a translation of the PostGIS manual. To start your own language add its code to the ``translations`` variable in POSTGIS/doc/Makefile.in, re-run ./configure and then run ``make update-po``. The rule will take care of creating the initial .po files under POSTGIS/doc/po//, you can then add those files to the repository and send the whole (Makefile.in changes and new .po files) as a patch or pull request. --strk(2012-09-14) postgis-2.1.2+dfsg.orig/doc/po/templates/reference_lrs.xml.pot0000644000000000000000000005560412025614072023113 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_lrs.xml:3 #, no-c-format msgid "Linear Referencing" msgstr "" #. Tag: refname #: reference_lrs.xml:7 #, no-c-format msgid "ST_Line_Interpolate_Point" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:9 #, no-c-format msgid "Returns a point interpolated along a line. Second argument is a float8 between 0 and 1 representing fraction of total length of linestring the point has to be located." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:15 #, no-c-format msgid "geometry ST_Line_Interpolate_Point geometry a_linestring float a_fraction" msgstr "" #. Tag: title #: reference_lrs.xml:24 reference_lrs.xml:85 reference_lrs.xml:136 reference_lrs.xml:202 reference_lrs.xml:260 reference_lrs.xml:311 reference_lrs.xml:356 reference_lrs.xml:400 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_lrs.xml:26 #, no-c-format msgid "Returns a point interpolated along a line. First argument must be a LINESTRING. Second argument is a float8 between 0 and 1 representing fraction of total linestring length the point has to be located." msgstr "" #. Tag: para #: reference_lrs.xml:30 reference_lrs.xml:147 #, no-c-format msgid "See for computing the line location nearest to a Point." msgstr "" #. Tag: para #: reference_lrs.xml:34 #, no-c-format msgid "Since release 1.1.1 this function also interpolates M and Z values (when present), while prior releases set them to 0.0." msgstr "" #. Tag: para #: reference_lrs.xml:38 #, no-c-format msgid "Availability: 0.8.2, Z and M supported added in 1.1.1" msgstr "" #. Tag: para #: reference_lrs.xml:39 reference_lrs.xml:157 reference_lrs.xml:319 reference_lrs.xml:362 reference_lrs.xml:406 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: title #: reference_lrs.xml:44 reference_lrs.xml:101 reference_lrs.xml:161 reference_lrs.xml:225 reference_lrs.xml:276 reference_lrs.xml:323 reference_lrs.xml:366 reference_lrs.xml:410 #, no-c-format msgid "Examples" msgstr "" #. Tag: para #: reference_lrs.xml:50 #, no-c-format msgid "A linestring with the interpolated point at 20% position (0.20)" msgstr "" #. Tag: programlisting #: reference_lrs.xml:53 #, no-c-format msgid "" "--Return point 20% along 2d line\n" "SELECT ST_AsEWKT(ST_Line_Interpolate_Point(the_line, 0.20))\n" " FROM (SELECT ST_GeomFromEWKT('LINESTRING(25 50, 100 125, 150 190)') as the_line) As foo;\n" " st_asewkt\n" "----------------\n" " POINT(51.5974135047432 76.5974135047432)" msgstr "" #. Tag: programlisting #: reference_lrs.xml:54 #, no-c-format msgid "" "--Return point mid-way of 3d line\n" "SELECT ST_AsEWKT(ST_Line_Interpolate_Point(the_line, 0.5))\n" " FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6, 6 7 8)') as the_line) As foo;\n" "\n" " st_asewkt\n" "--------------------\n" " POINT(3.5 4.5 5.5)\n" "\n" "\n" "--find closest point on a line to a point or other geometry\n" " SELECT ST_AsText(ST_Line_Interpolate_Point(foo.the_line, ST_Line_Locate_Point(foo.the_line, ST_GeomFromText('POINT(4 3)'))))\n" "FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo;\n" " st_astext\n" "----------------\n" " POINT(3 4)" msgstr "" #. Tag: title #: reference_lrs.xml:59 reference_lrs.xml:108 reference_lrs.xml:175 reference_lrs.xml:231 reference_lrs.xml:283 reference_lrs.xml:330 reference_lrs.xml:372 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_lrs.xml:61 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_lrs.xml:67 #, no-c-format msgid "ST_Line_Locate_Point" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:69 #, no-c-format msgid "Returns a float between 0 and 1 representing the location of the closest point on LineString to the given Point, as a fraction of total 2d line length." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:76 #, no-c-format msgid "float ST_Line_Locate_Point geometry a_linestring geometry a_point" msgstr "" #. Tag: para #: reference_lrs.xml:87 #, no-c-format msgid "Returns a float between 0 and 1 representing the location of the closest point on LineString to the given Point, as a fraction of total 2d line length." msgstr "" #. Tag: para #: reference_lrs.xml:91 #, no-c-format msgid "You can use the returned location to extract a Point () or a substring ()." msgstr "" #. Tag: para #: reference_lrs.xml:94 #, no-c-format msgid "This is useful for approximating numbers of addresses" msgstr "" #. Tag: para #: reference_lrs.xml:96 #, no-c-format msgid "Availability: 1.1.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:103 #, no-c-format msgid "" "--Rough approximation of finding the street number of a point along the street\n" "--Note the whole foo thing is just to generate dummy data that looks\n" "--like house centroids and street\n" "--We use ST_DWithin to exclude\n" "--houses too far away from the street to be considered on the street\n" "SELECT ST_AsText(house_loc) As as_text_house_loc,\n" " startstreet_num +\n" " CAST( (endstreet_num - startstreet_num)\n" " * ST_Line_Locate_Point(street_line, house_loc) As integer) As street_num\n" "FROM\n" "(SELECT ST_GeomFromText('LINESTRING(1 2, 3 4)') As street_line,\n" " ST_MakePoint(x*1.01,y*1.03) As house_loc, 10 As startstreet_num,\n" " 20 As endstreet_num\n" "FROM generate_series(1,3) x CROSS JOIN generate_series(2,4) As y)\n" "As foo\n" "WHERE ST_DWithin(street_line, house_loc, 0.2);\n" "\n" " as_text_house_loc | street_num\n" "-------------------+------------\n" " POINT(1.01 2.06) | 10\n" " POINT(2.02 3.09) | 15\n" " POINT(3.03 4.12) | 20\n" "\n" " --find closest point on a line to a point or other geometry\n" " SELECT ST_AsText(ST_Line_Interpolate_Point(foo.the_line, ST_Line_Locate_Point(foo.the_line, ST_GeomFromText('POINT(4 3)'))))\n" "FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo;\n" " st_astext\n" "----------------\n" " POINT(3 4)" msgstr "" #. Tag: para #: reference_lrs.xml:110 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_lrs.xml:116 #, no-c-format msgid "ST_Line_Substring" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:118 #, no-c-format msgid "Return a linestring being a substring of the input one starting and ending at the given fractions of total 2d length. Second and third arguments are float8 values between 0 and 1." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:126 #, no-c-format msgid "geometry ST_Line_Substring geometry a_linestring float startfraction float endfraction" msgstr "" #. Tag: para #: reference_lrs.xml:138 #, no-c-format msgid "Return a linestring being a substring of the input one starting and ending at the given fractions of total 2d length. Second and third arguments are float8 values between 0 and 1. This only works with LINESTRINGs. To use with contiguous MULTILINESTRINGs use in conjunction with ." msgstr "" #. Tag: para #: reference_lrs.xml:144 #, no-c-format msgid "If 'start' and 'end' have the same value this is equivalent to ." msgstr "" #. Tag: para #: reference_lrs.xml:151 #, no-c-format msgid "Since release 1.1.1 this function also interpolates M and Z values (when present), while prior releases set them to unspecified values." msgstr "" #. Tag: para #: reference_lrs.xml:156 #, no-c-format msgid "Availability: 1.1.0, Z and M supported added in 1.1.1" msgstr "" #. Tag: para #: reference_lrs.xml:167 #, no-c-format msgid "A linestring seen with 1/3 midrange overlaid (0.333, 0.666)" msgstr "" #. Tag: programlisting #: reference_lrs.xml:170 #, no-c-format msgid "" "--Return the approximate 1/3 mid-range part of a linestring\n" "SELECT ST_AsText(ST_Line_SubString(ST_GeomFromText('LINESTRING(25 50, 100 125, 150 190)'), 0.333, 0.666));\n" "\n" " st_astext\n" "------------------------------------------------------------------------------------------------\n" "LINESTRING(69.2846934853974 94.2846934853974,100 125,111.700356260683 140.210463138888)\n" "\n" "--The below example simulates a while loop in\n" "--SQL using PostgreSQL generate_series() to cut all\n" "--linestrings in a table to 100 unit segments\n" "-- of which no segment is longer than 100 units\n" "-- units are measured in the SRID units of measurement\n" "-- It also assumes all geometries are LINESTRING or contiguous MULTILINESTRING\n" "--and no geometry is longer than 100 units*10000\n" "--for better performance you can reduce the 10000\n" "--to match max number of segments you expect\n" "\n" "SELECT field1, field2, ST_Line_Substring(the_geom, 100.00*n/length,\n" " CASE\n" " WHEN 100.00*(n+1) < length THEN 100.00*(n+1)/length\n" " ELSE 1\n" " END) As the_geom\n" "FROM\n" " (SELECT sometable.field1, sometable.field2,\n" " ST_LineMerge(sometable.the_geom) AS the_geom,\n" " ST_Length(sometable.the_geom) As length\n" " FROM sometable\n" " ) AS t\n" "CROSS JOIN generate_series(0,10000) AS n\n" "WHERE n*100.00/length < 1;" msgstr "" #. Tag: para #: reference_lrs.xml:177 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_lrs.xml:183 #, no-c-format msgid "ST_LocateAlong" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:185 #, no-c-format msgid "Return a derived geometry collection value with elements that match the specified measure. Polygonal elements are not supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:192 #, no-c-format msgid "geometry ST_LocateAlong geometry ageom_with_measure float a_measure float offset" msgstr "" #. Tag: para #: reference_lrs.xml:204 #, no-c-format msgid "Return a derived geometry collection value with elements that match the specified measure. Polygonal elements are not supported." msgstr "" #. Tag: para #: reference_lrs.xml:208 #, no-c-format msgid "If an offset is provided, the resultant will be offset to the left or right of the input line by the specified number of units. A positive offset will be to the left, and a negative one to the right." msgstr "" #. Tag: para #: reference_lrs.xml:213 reference_lrs.xml:266 #, no-c-format msgid "Semantic is specified by: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting" msgstr "" #. Tag: para #: reference_lrs.xml:216 #, no-c-format msgid "Availability: 1.1.0 by old name ST_Locate_Along_Measure." msgstr "" #. Tag: para #: reference_lrs.xml:217 #, no-c-format msgid "Changed: 2.0.0 in prior versions this used to be called ST_Locate_Along_Measure. The old name has been deprecated and will be removed in the future but is still available." msgstr "" #. Tag: para #: reference_lrs.xml:218 #, no-c-format msgid "Use this function only for geometries with an M component" msgstr "" #. Tag: para #: reference_lrs.xml:220 reference_lrs.xml:272 #, no-c-format msgid "&M_support;" msgstr "" #. Tag: programlisting #: reference_lrs.xml:226 #, no-c-format msgid "" "SELECT ST_AsText(the_geom)\n" " FROM\n" " (SELECT ST_LocateAlong(\n" " ST_GeomFromText('MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 3),\n" " (1 2 3, 5 4 5))'),3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "-----------------------------------------------------------\n" " MULTIPOINT M (1 2 3)\n" "\n" "--Geometry collections are difficult animals so dump them\n" "--to make them more digestable\n" "SELECT ST_AsText((ST_Dump(the_geom)).geom)\n" " FROM\n" " (SELECT ST_LocateAlong(\n" " ST_GeomFromText('MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 3),\n" " (1 2 3, 5 4 5))'),3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "---------------\n" " POINTM(1 2 3)\n" " POINTM(9 4 3)\n" " POINTM(1 2 3)" msgstr "" #. Tag: para #: reference_lrs.xml:233 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_lrs.xml:239 #, no-c-format msgid "ST_LocateBetween" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:241 #, no-c-format msgid "Return a derived geometry collection value with elements that match the specified range of measures inclusively. Polygonal elements are not supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:248 #, no-c-format msgid "geometry ST_LocateBetween geometry geomA float measure_start float measure_end float offset" msgstr "" #. Tag: para #: reference_lrs.xml:262 #, no-c-format msgid "Return a derived geometry collection value with elements that match the specified range of measures inclusively. Polygonal elements are not supported." msgstr "" #. Tag: para #: reference_lrs.xml:269 #, no-c-format msgid "Availability: 1.1.0 by old name ST_Locate_Between_Measures." msgstr "" #. Tag: para #: reference_lrs.xml:270 #, no-c-format msgid "Changed: 2.0.0 - in prior versions this used to be called ST_Locate_Between_Measures. The old name has been deprecated and will be removed in the future but is still available for backward compatibility." msgstr "" #. Tag: programlisting #: reference_lrs.xml:278 #, no-c-format msgid "" "SELECT ST_AsText(the_geom)\n" " FROM\n" " (SELECT ST_LocateBetween(\n" " ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3),\n" " (1 2 3, 5 4 5))'),1.5, 3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "------------------------------------------------------------------------\n" " GEOMETRYCOLLECTION M (LINESTRING M (1 2 3,3 4 2,9 4 3),POINT M (1 2 3))\n" "\n" "--Geometry collections are difficult animals so dump them\n" "--to make them more digestable\n" "SELECT ST_AsText((ST_Dump(the_geom)).geom)\n" " FROM\n" " (SELECT ST_LocateBetween(\n" " ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3),\n" " (1 2 3, 5 4 5))'),1.5, 3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "--------------------------------\n" " LINESTRING M (1 2 3,3 4 2,9 4 3)\n" " POINT M (1 2 3)" msgstr "" #. Tag: para #: reference_lrs.xml:285 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_lrs.xml:291 #, no-c-format msgid "ST_LocateBetweenElevations" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:293 #, no-c-format msgid "Return a derived geometry (collection) value with elements that intersect the specified range of elevations inclusively. Only 3D, 4D LINESTRINGS and MULTILINESTRINGS are supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:300 #, no-c-format msgid "geometry ST_LocateBetweenElevations geometry geom_mline float elevation_start float elevation_end" msgstr "" #. Tag: para #: reference_lrs.xml:313 #, no-c-format msgid "Return a derived geometry (collection) value with elements that intersect the specified range of elevations inclusively. Only 3D, 3DM LINESTRINGS and MULTILINESTRINGS are supported." msgstr "" #. Tag: para #: reference_lrs.xml:317 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:325 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_LocateBetweenElevations(\n" " ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6)'),2,4)) As ewelev;\n" " ewelev\n" "----------------------------------------------------------------\n" " MULTILINESTRING((1 2 3,2 3 4))\n" "\n" "SELECT ST_AsEWKT(ST_LocateBetweenElevations(\n" " ST_GeomFromEWKT('LINESTRING(1 2 6, 4 5 -1, 7 8 9)'),6,9)) As ewelev;\n" "\n" " ewelev\n" "----------------------------------------------------------------\n" "GEOMETRYCOLLECTION(POINT(1 2 6),LINESTRING(6.1 7.1 6,7 8 9))\n" "\n" "--Geometry collections are difficult animals so dump them\n" "--to make them more digestable\n" "SELECT ST_AsEWKT((ST_Dump(the_geom)).geom)\n" " FROM\n" " (SELECT ST_LocateBetweenElevations(\n" " ST_GeomFromEWKT('LINESTRING(1 2 6, 4 5 -1, 7 8 9)'),6,9) As the_geom) As foo;\n" "\n" " st_asewkt\n" "--------------------------------\n" "POINT(1 2 6)\n" "LINESTRING(6.1 7.1 6,7 8 9)" msgstr "" #. Tag: refname #: reference_lrs.xml:339 #, no-c-format msgid "ST_InterpolatePoint" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:341 #, no-c-format msgid "Return the value of the measure dimension of a geometry at the point closed to the provided point." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:346 #, no-c-format msgid "float ST_InterpolatePoint geometry line geometry point" msgstr "" #. Tag: para #: reference_lrs.xml:358 #, no-c-format msgid "Return the value of the measure dimension of a geometry at the point closed to the provided point." msgstr "" #. Tag: para #: reference_lrs.xml:360 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:368 #, no-c-format msgid "" "SELECT ST_InterpolatePoint('LINESTRING M (0 0 0, 10 0 20)', 'POINT(5 5)');\n" " st_interpolatepoint \n" " ---------------------\n" " 10" msgstr "" #. Tag: para #: reference_lrs.xml:374 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_lrs.xml:382 #, no-c-format msgid "ST_AddMeasure" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:384 #, no-c-format msgid "Return a derived geometry with measure elements linearly interpolated between the start and end points. If the geometry has no measure dimension, one is added. If the geometry has a measure dimension, it is over-written with new values. Only LINESTRINGS and MULTILINESTRINGS are supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:389 #, no-c-format msgid "geometry ST_AddMeasure geometry geom_mline float measure_start float measure_end" msgstr "" #. Tag: para #: reference_lrs.xml:402 #, no-c-format msgid "Return a derived geometry with measure elements linearly interpolated between the start and end points. If the geometry has no measure dimension, one is added. If the geometry has a measure dimension, it is over-written with new values. Only LINESTRINGS and MULTILINESTRINGS are supported." msgstr "" #. Tag: para #: reference_lrs.xml:404 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:412 #, no-c-format msgid "" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('LINESTRING(1 0, 2 0, 4 0)'),1,4)) As ewelev;\n" " ewelev \n" "--------------------------------\n" " LINESTRINGM(1 0 1,2 0 2,4 0 4)\n" "\n" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('LINESTRING(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;\n" " ewelev \n" "----------------------------------------\n" " LINESTRING(1 0 4 10,2 0 4 20,4 0 4 40)\n" "\n" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('LINESTRINGM(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;\n" " ewelev \n" "----------------------------------------\n" " LINESTRINGM(1 0 10,2 0 20,4 0 40)\n" " \n" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('MULTILINESTRINGM((1 0 4, 2 0 4, 4 0 4),(1 0 4, 2 0 4, 4 0 4))'),10,70)) As ewelev;\n" " ewelev \n" "-----------------------------------------------------------------\n" " MULTILINESTRINGM((1 0 10,2 0 20,4 0 40),(1 0 40,2 0 50,4 0 70))" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/extras_historytable.xml.pot0000644000000000000000000001661712025614072024375 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: extras_historytable.xml:3 #, no-c-format msgid "History Tracking" msgstr "" #. Tag: para #: extras_historytable.xml:6 #, no-c-format msgid "Suppose you have a table of data that represents the current state of a particular geographic feature. A parcels table, or a roads table, or a fruit trees table, whatever. Generally, GIS tools understand a table as a single entity into which they can update, insert and delete rows from. How you do allow common GIS tools to work against your data, while maintaining an audit trail of what changes have been made, by whom, and what the past state of the data is?" msgstr "" #. Tag: para #: extras_historytable.xml:10 #, no-c-format msgid "This history_table extra module provides some utility functions for creating and maintaining history." msgstr "" #. Tag: para #: extras_historytable.xml:14 #, no-c-format msgid "The history_table was also packaged in PostGIS 1.5, but added to the documentation in PostGIS 2.0. This package is written in plpgsql and located in the extras/history_table of PostGIS source tar balls and source repository." msgstr "" #. Tag: para #: extras_historytable.xml:15 #, no-c-format msgid "If you have a table 'roads', this module will maintain a 'roads_history' side table, which contains all the columns of the parent table, and the following additional columns:" msgstr "" #. Tag: programlisting #: extras_historytable.xml:16 #, no-c-format msgid "" "history_id | integer | not null default \n" " date_added | timestamp without time zone | not null default now()\n" " date_deleted | timestamp without time zone | \n" " last_operation | character varying(30) | not null\n" " active_user | character varying(90) | not null default \"current_user\"()\n" " current_version | text | not null" msgstr "" #. Tag: para #: extras_historytable.xml:20 #, no-c-format msgid "When you insert a new record into 'roads' a record is automatically inserted into 'roads_history', with the 'date_added' filled in the 'date_deleted' set to NULL, a unique 'history_id', a 'last_operation' of 'INSERT' and 'active_user' set." msgstr "" #. Tag: para #: extras_historytable.xml:23 #, no-c-format msgid "When you delete a record in 'roads', the record in the history table is *not* deleted, but the 'date_deleted' is set to the current date." msgstr "" #. Tag: para #: extras_historytable.xml:26 #, no-c-format msgid "When you update a record in 'roads', the current record has 'date_deleted' filled in and a new record is created with the 'date_added' set and 'date_deleted' NULL." msgstr "" #. Tag: para #: extras_historytable.xml:30 #, no-c-format msgid "With this information maintained, it is possible to retrieve the history of any record in the roads table:" msgstr "" #. Tag: programlisting #: extras_historytable.xml:31 #, no-c-format msgid "SELECT * FROM roads_history WHERE roads_pk = 111;" msgstr "" #. Tag: para #: extras_historytable.xml:33 #, no-c-format msgid "Or, to retrieve a view of the roads table at any point in the past:" msgstr "" #. Tag: programlisting #: extras_historytable.xml:34 #, no-c-format msgid "" "SELECT * FROM roads_history \n" " WHERE date_added < 'January 1, 2001' AND \n" " ( date_deleted >= 'January 1, 2001' OR date_deleted IS NULL );" msgstr "" #. Tag: refname #: extras_historytable.xml:38 #, no-c-format msgid "Postgis_Install_History" msgstr "" #. Tag: refpurpose #: extras_historytable.xml:39 #, no-c-format msgid "Creates a table that will hold some interesting values for managing history tables." msgstr "" #. Tag: funcprototype #: extras_historytable.xml:44 #, no-c-format msgid "void Postgis_Install_History " msgstr "" #. Tag: title #: extras_historytable.xml:52 extras_historytable.xml:92 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: extras_historytable.xml:54 #, no-c-format msgid "Creates a table that will hold some interesting values for managing history tables. Creates a table called historic_information" msgstr "" #. Tag: para #: extras_historytable.xml:58 extras_historytable.xml:100 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: title #: extras_historytable.xml:63 extras_historytable.xml:105 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: extras_historytable.xml:65 #, no-c-format msgid "SELECT postgis_install_history();" msgstr "" #. Tag: title #: extras_historytable.xml:71 extras_historytable.xml:113 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: extras_historytable.xml:77 #, no-c-format msgid "Postgis_Enable_History" msgstr "" #. Tag: refpurpose #: extras_historytable.xml:78 #, no-c-format msgid "Registers a tablein the history_information table for tracking and also adds in side line history table and insert, update, delete rules on the table." msgstr "" #. Tag: funcprototype #: extras_historytable.xml:83 #, no-c-format msgid "boolean Postgis_Enable_History text p_schema text p_table" msgstr "" #. Tag: para #: extras_historytable.xml:94 #, no-c-format msgid "Registers a table in the history_information table for tracking and also adds in side line history table with same name as table but prefixed with history in the same schema as the original table. Puts in insert, update, delete rules on the table. Any inserts,updates,deletes of the geometry are recorded in the history table." msgstr "" #. Tag: para #: extras_historytable.xml:97 #, no-c-format msgid "This function currently relies on a geometry column being registered in geometry_columns and fails if the geometry column is not present in geometry_columns table." msgstr "" #. Tag: programlisting #: extras_historytable.xml:107 #, no-c-format msgid "" "CREATE TABLE roads(gid SERIAL PRIMARY KEY, road_name varchar(150));\n" "SELECT AddGeometryColumn('roads', 'geom', 26986, 'LINESTRING', 2);\n" " \n" "SELECT postgis_enable_history('public', 'roads', 'geom') As register_table;\n" "register_table\n" "--------------\n" "t\n" "\n" "INSERT INTO roads(road_name, geom) \n" " VALUES('Test Street', ST_GeomFromText('LINESTRING(231660.5 832170,231647 832202,231627.5 832250.5)',26986));\n" "\n" "-- check transaction detail --\n" "SELECT date_added, last_operation, current_version \n" "FROM roads_history \n" "WHERE road_name = 'Test Street' ORDER BY date_added DESC;\n" "\n" " date_added | last_operation | current_version\n" "------------------------+----------------+-----------------\n" " 2011-02-07 12:44:36.92 | INSERT | 2" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reporting.xml.pot0000644000000000000000000001041112025614072022271 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reporting.xml:3 #, no-c-format msgid "Reporting Problems" msgstr "" #. Tag: title #: reporting.xml:6 #, no-c-format msgid "Reporting Software Bugs" msgstr "" #. Tag: para #: reporting.xml:8 #, no-c-format msgid "Reporting bugs effectively is a fundamental way to help PostGIS development. The most effective bug report is that enabling PostGIS developers to reproduce it, so it would ideally contain a script triggering it and every information regarding the environment in which it was detected. Good enough info can be extracted running SELECT postgis_full_version() [for postgis] and SELECT version() [for postgresql]." msgstr "" #. Tag: para #: reporting.xml:16 #, no-c-format msgid "If you aren't using the latest release, it's worth taking a look at its release changelog first, to find out if your bug has already been fixed." msgstr "" #. Tag: para #: reporting.xml:21 #, no-c-format msgid "Using the PostGIS bug tracker will ensure your reports are not discarded, and will keep you informed on its handling process. Before reporting a new bug please query the database to see if it is a known one, and if it is please add any new information you have about it." msgstr "" #. Tag: para #: reporting.xml:28 #, no-c-format msgid "You might want to read Simon Tatham's paper about How to Report Bugs Effectively before filing a new report." msgstr "" #. Tag: title #: reporting.xml:34 #, no-c-format msgid "Reporting Documentation Issues" msgstr "" #. Tag: para #: reporting.xml:36 #, no-c-format msgid "The documentation should accurately reflect the features and behavior of the software. If it doesn't, it could be because of a software bug or because the documentation is in error or deficient." msgstr "" #. Tag: para #: reporting.xml:40 #, no-c-format msgid "Documentation issues can also be reported to the PostGIS bug tracker." msgstr "" #. Tag: para #: reporting.xml:44 #, no-c-format msgid "If your revision is trivial, just describe it in a new bug tracker issue, being specific about its location in the documentation." msgstr "" #. Tag: para #: reporting.xml:47 #, no-c-format msgid "If your changes are more extensive, a Subversion patch is definitely preferred. This is a four step process on Unix (assuming you already have Subversion installed):" msgstr "" #. Tag: para #: reporting.xml:54 #, no-c-format msgid "Check out a copy of PostGIS' Subversion trunk. On Unix, type:" msgstr "" #. Tag: command #: reporting.xml:57 #, no-c-format msgid "svn checkout http://svn.osgeo.org/postgis/trunk/" msgstr "" #. Tag: para #: reporting.xml:60 #, no-c-format msgid "This will be stored in the directory ./trunk" msgstr "" #. Tag: para #: reporting.xml:64 #, no-c-format msgid "Make your changes to the documentation with your favorite text editor. On Unix, type (for example):" msgstr "" #. Tag: command #: reporting.xml:67 #, no-c-format msgid "vim trunk/doc/postgis.xml" msgstr "" #. Tag: para #: reporting.xml:69 #, no-c-format msgid "Note that the documentation is written in DocBook XML rather than HTML, so if you are not familiar with it please follow the example of the rest of the documentation." msgstr "" #. Tag: para #: reporting.xml:75 #, no-c-format msgid "Make a patch file containing the differences from the master copy of the documentation. On Unix, type:" msgstr "" #. Tag: command #: reporting.xml:78 #, no-c-format msgid "svn diff trunk/doc/postgis.xml > doc.patch" msgstr "" #. Tag: para #: reporting.xml:83 #, no-c-format msgid "Attach the patch to a new issue in bug tracker." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/postgis.xml.pot0000644000000000000000000000337012025614072021756 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: postgis.xml:106 #, no-c-format msgid "PostGIS &last_release_version; Manual" msgstr "" #. Tag: affiliation #: postgis.xml:114 #, no-c-format msgid "clever elephant
Victoria British Columbia Canada pramsey@cleverelephant.ca
" msgstr "" #. Tag: para #: postgis.xml:124 #, no-c-format msgid "PostGIS is an extension to the PostgreSQL object-relational database system which allows GIS (Geographic Information Systems) objects to be stored in the database. PostGIS includes support for GiST-based R-Tree spatial indexes, and functions for analysis and processing of GIS objects." msgstr "" #. Tag: para #: postgis.xml:133 #, no-c-format msgid "This is the manual for version &last_release_version;" msgstr "" #. Tag: para #: postgis.xml:134 #, no-c-format msgid "This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License. Feel free to use this material any way you like, but we ask that you attribute credit to the PostGIS Project and wherever possible, a link back to http://www.postgis.org." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/reference_management.xml.pot0000644000000000000000000010555412025614072024427 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_management.xml:3 #, no-c-format msgid "Management Functions" msgstr "" #. Tag: refname #: reference_management.xml:7 #, no-c-format msgid "AddGeometryColumn" msgstr "" #. Tag: refpurpose #: reference_management.xml:9 #, no-c-format msgid "Adds a geometry column to an existing table of attributes. By default uses type modifier to define rather than constraints. Pass in false for use_typmod to get old check constraint based behavior" msgstr "" #. Tag: funcsynopsis #: reference_management.xml:15 #, no-c-format msgid " text AddGeometryColumn varchar table_name varchar column_name integer srid varchar type integer dimension boolean use_typmod=true text AddGeometryColumn varchar schema_name varchar table_name varchar column_name integer srid varchar type integer dimension boolean use_typmod=true text AddGeometryColumn varchar catalog_name varchar schema_name varchar table_name varchar column_name integer srid varchar type integer dimension boolean use_typmod=true " msgstr "" #. Tag: title #: reference_management.xml:92 reference_management.xml:188 reference_management.xml:254 reference_management.xml:298 reference_management.xml:344 reference_management.xml:386 reference_management.xml:427 reference_management.xml:458 reference_management.xml:499 reference_management.xml:540 reference_management.xml:583 reference_management.xml:631 reference_management.xml:677 reference_management.xml:726 reference_management.xml:862 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_management.xml:94 #, no-c-format msgid "Adds a geometry column to an existing table of attributes. The schema_name is the name of the table schema. The srid must be an integer value reference to an entry in the SPATIAL_REF_SYS table. The type must be a string corresponding to the geometry type, eg, 'POLYGON' or 'MULTILINESTRING' . An error is thrown if the schemaname doesn't exist (or not visible in the current search_path) or the specified SRID, geometry type, or dimension is invalid." msgstr "" #. Tag: para #: reference_management.xml:104 #, no-c-format msgid "Changed: 2.0.0 This function no longer updates geometry_columns since geometry_columns is a view that reads from system catalogs. It by default also does not create constraints, but instead uses the built in type modifier behavior of PostgreSQL. So for example building a wgs84 POINT column with this function is now equivalent to: ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);" msgstr "" #. Tag: para #: reference_management.xml:107 #, no-c-format msgid "Changed: 2.0.0 If you require the old behavior of constraints use the default use_typmod, but set it to false." msgstr "" #. Tag: para #: reference_management.xml:111 #, no-c-format msgid "Changed: 2.0.0 Views can no longer be manually registered in geometry_columns, however views built against geometry typmod tables geometries and used without wrapper functions will register themselves correctly because they inherit the typmod behavior of their parent table column. Views that use geometry functions that output other geometries will need to be cast to typmod geometries for these view geometry columns to be registered correctly in geometry_columns. Refer to ." msgstr "" #. Tag: para #: reference_management.xml:117 reference_management.xml:194 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_management.xml:118 reference_management.xml:195 reference_management.xml:868 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_management.xml:119 reference_management.xml:196 reference_management.xml:869 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_management.xml:120 #, no-c-format msgid "Enhanced: 2.0.0 use_typmod argument introduced. Defaults to creating typmod geometry column instead of constraint-based." msgstr "" #. Tag: title #: reference_management.xml:124 reference_management.xml:203 reference_management.xml:267 reference_management.xml:306 reference_management.xml:351 reference_management.xml:393 reference_management.xml:433 reference_management.xml:464 reference_management.xml:506 reference_management.xml:548 reference_management.xml:600 reference_management.xml:646 reference_management.xml:683 reference_management.xml:784 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_management.xml:126 #, no-c-format msgid "" "-- Create schema to hold data\n" "CREATE SCHEMA my_schema;\n" "-- Create a new simple PostgreSQL table\n" "CREATE TABLE my_schema.my_spatial_table (id serial);\n" "\n" "-- Describing the table shows a simple table with a single \"id\" column.\n" "postgis=# \\d my_schema.my_spatial_table\n" " Table \"my_schema.my_spatial_table\"\n" " Column | Type | Modifiers\n" "--------+---------+-------------------------------------------------------------------------\n" " id | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)\n" "\n" "-- Add a spatial column to the table\n" "SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom',4326,'POINT',2);\n" "\n" "-- Add a point using the old constraint based behavior\n" "SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',2, false);\n" "\n" "--Add a curvepolygon using old constraint behavior\n" "SELECT AddGeometryColumn ('my_schema','my_spatial_table','geomcp_c',4326,'CURVEPOLYGON',2, false);\n" "\n" "-- Describe the table again reveals the addition of a new geometry columns.\n" "\\d my_schema.my_spatial_table\n" " addgeometrycolumn \n" "-------------------------------------------------------------------------\n" " my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2 \n" "(1 row)\n" "\n" " Table \"my_schema.my_spatial_table\"\n" " Column | Type | Modifiers \n" "----------+----------------------+-------------------------------------------------------------------------\n" " id | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)\n" " geom | geometry(Point,4326) | \n" " geom_c | geometry | \n" " geomcp_c | geometry | \n" "Check constraints:\n" " \"enforce_dims_geom_c\" CHECK (st_ndims(geom_c) = 2)\n" " \"enforce_dims_geomcp_c\" CHECK (st_ndims(geomcp_c) = 2)\n" " \"enforce_geotype_geom_c\" CHECK (geometrytype(geom_c) = 'POINT'::text OR geom_c IS NULL)\n" " \"enforce_geotype_geomcp_c\" CHECK (geometrytype(geomcp_c) = 'CURVEPOLYGON'::text OR geomcp_c IS NULL)\n" " \"enforce_srid_geom_c\" CHECK (st_srid(geom_c) = 4326)\n" " \"enforce_srid_geomcp_c\" CHECK (st_srid(geomcp_c) = 4326)\n" " \n" "-- geometry_columns view also registers the new columns --\n" "SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims \n" " FROM geometry_columns\n" " WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';\n" "\n" " col_name | type | srid | ndims \n" "----------+--------------+------+-------\n" " geom | Point | 4326 | 2\n" " geom_c | Point | 4326 | 2\n" " geomcp_c | CurvePolygon | 4326 | 2" msgstr "" #. Tag: title #: reference_management.xml:130 reference_management.xml:208 reference_management.xml:272 reference_management.xml:312 reference_management.xml:357 reference_management.xml:399 reference_management.xml:470 reference_management.xml:512 reference_management.xml:554 reference_management.xml:606 reference_management.xml:652 reference_management.xml:689 reference_management.xml:873 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_management.xml:132 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: reference_management.xml:138 #, no-c-format msgid "DropGeometryColumn" msgstr "" #. Tag: refpurpose #: reference_management.xml:140 #, no-c-format msgid "Removes a geometry column from a spatial table." msgstr "" #. Tag: funcsynopsis #: reference_management.xml:145 #, no-c-format msgid " text DropGeometryColumn varchar table_name varchar column_name text DropGeometryColumn varchar schema_name varchar table_name varchar column_name text DropGeometryColumn varchar catalog_name varchar schema_name varchar table_name varchar column_name " msgstr "" #. Tag: para #: reference_management.xml:190 #, no-c-format msgid "Removes a geometry column from a spatial table. Note that schema_name will need to match the f_table_schema field of the table's row in the geometry_columns table." msgstr "" #. Tag: para #: reference_management.xml:198 #, no-c-format msgid "Changed: 2.0.0 This function is provided for backward compatibility. Now that since geometry_columns is now a view against the system catalogs, you can drop a geometry column like any other table column using ALTER TABLE" msgstr "" #. Tag: programlisting #: reference_management.xml:205 #, no-c-format msgid "" "SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom');\n" " ----RESULT output ---\n" " dropgeometrycolumn\n" "------------------------------------------------------\n" " my_schema.my_spatial_table.geom effectively removed.\n" " \n" "-- In PostGIS 2.0+ the above is also equivalent to the standard\n" "-- the standard alter table. Both will deregister from geometry_columns\n" "ALTER TABLE my_schema.my_spatial_table DROP column geom;" msgstr "" #. Tag: para #: reference_management.xml:210 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_management.xml:216 #, no-c-format msgid "DropGeometryTable" msgstr "" #. Tag: refpurpose #: reference_management.xml:218 #, no-c-format msgid "Drops a table and all its references in geometry_columns." msgstr "" #. Tag: funcsynopsis #: reference_management.xml:223 #, no-c-format msgid " boolean DropGeometryTable varchar table_name boolean DropGeometryTable varchar schema_name varchar table_name boolean DropGeometryTable varchar catalog_name varchar schema_name varchar table_name " msgstr "" #. Tag: para #: reference_management.xml:256 #, no-c-format msgid "Drops a table and all its references in geometry_columns. Note: uses current_schema() on schema-aware pgsql installations if schema is not provided." msgstr "" #. Tag: para #: reference_management.xml:261 #, no-c-format msgid "Changed: 2.0.0 This function is provided for backward compatibility. Now that since geometry_columns is now a view against the system catalogs, you can drop a table with geometry columns like any other table using DROP TABLE" msgstr "" #. Tag: programlisting #: reference_management.xml:269 #, no-c-format msgid "" "SELECT DropGeometryTable ('my_schema','my_spatial_table');\n" "----RESULT output ---\n" "my_schema.my_spatial_table dropped.\n" " \n" "-- The above is now equivalent to --\n" "DROP TABLE my_schema.my_spatial_table;" msgstr "" #. Tag: para #: reference_management.xml:274 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_management.xml:281 #, no-c-format msgid "PostGIS_Full_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:283 #, no-c-format msgid "Reports full postgis version and build configuration infos." msgstr "" #. Tag: funcprototype #: reference_management.xml:289 #, no-c-format msgid "text PostGIS_Full_Version " msgstr "" #. Tag: para #: reference_management.xml:300 #, no-c-format msgid "Reports full postgis version and build configuration infos. Also informs about synchronization between libraries and scripts suggesting upgrades as needed." msgstr "" #. Tag: programlisting #: reference_management.xml:308 #, no-c-format msgid "" "SELECT PostGIS_Full_Version();\n" " postgis_full_version\n" "----------------------------------------------------------------------------------\n" " POSTGIS=\"1.3.3\" GEOS=\"3.1.0-CAPI-1.5.0\" PROJ=\"Rel. 4.4.9, 29 Oct 2004\" USE_STATS\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:314 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: reference_management.xml:327 #, no-c-format msgid "PostGIS_GEOS_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:329 #, no-c-format msgid "Returns the version number of the GEOS library." msgstr "" #. Tag: funcprototype #: reference_management.xml:335 #, no-c-format msgid "text PostGIS_GEOS_Version " msgstr "" #. Tag: para #: reference_management.xml:346 #, no-c-format msgid "Returns the version number of the GEOS library, or NULL if GEOS support is not enabled." msgstr "" #. Tag: programlisting #: reference_management.xml:353 #, no-c-format msgid "" "SELECT PostGIS_GEOS_Version();\n" " postgis_geos_version\n" "----------------------\n" " 3.1.0-CAPI-1.5.0\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:359 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:369 #, no-c-format msgid "PostGIS_LibXML_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:371 #, no-c-format msgid "Returns the version number of the libxml2 library." msgstr "" #. Tag: funcprototype #: reference_management.xml:377 #, no-c-format msgid "text PostGIS_LibXML_Version " msgstr "" #. Tag: para #: reference_management.xml:388 #, no-c-format msgid "Returns the version number of the LibXML2 library." msgstr "" #. Tag: para #: reference_management.xml:389 #, no-c-format msgid "Availability: 1.5" msgstr "" #. Tag: programlisting #: reference_management.xml:395 #, no-c-format msgid "" "SELECT PostGIS_LibXML_Version();\n" " postgis_libxml_version\n" "----------------------\n" " 2.7.6\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:401 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:411 #, no-c-format msgid "PostGIS_Lib_Build_Date" msgstr "" #. Tag: refpurpose #: reference_management.xml:413 #, no-c-format msgid "Returns build date of the PostGIS library." msgstr "" #. Tag: funcprototype #: reference_management.xml:418 #, no-c-format msgid "text PostGIS_Lib_Build_Date " msgstr "" #. Tag: para #: reference_management.xml:429 #, no-c-format msgid "Returns build date of the PostGIS library." msgstr "" #. Tag: programlisting #: reference_management.xml:435 #, no-c-format msgid "" "SELECT PostGIS_Lib_Build_Date();\n" " postgis_lib_build_date\n" "------------------------\n" " 2008-06-21 17:53:21\n" "(1 row)" msgstr "" #. Tag: refname #: reference_management.xml:441 #, no-c-format msgid "PostGIS_Lib_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:443 #, no-c-format msgid "Returns the version number of the PostGIS library." msgstr "" #. Tag: funcprototype #: reference_management.xml:449 #, no-c-format msgid "text PostGIS_Lib_Version " msgstr "" #. Tag: para #: reference_management.xml:460 #, no-c-format msgid "Returns the version number of the PostGIS library." msgstr "" #. Tag: programlisting #: reference_management.xml:466 #, no-c-format msgid "" "SELECT PostGIS_Lib_Version();\n" " postgis_lib_version\n" "---------------------\n" " 1.3.3\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:472 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:482 #, no-c-format msgid "PostGIS_PROJ_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:484 #, no-c-format msgid "Returns the version number of the PROJ4 library." msgstr "" #. Tag: funcprototype #: reference_management.xml:490 #, no-c-format msgid "text PostGIS_PROJ_Version " msgstr "" #. Tag: para #: reference_management.xml:501 #, no-c-format msgid "Returns the version number of the PROJ4 library, or NULL if PROJ4 support is not enabled." msgstr "" #. Tag: programlisting #: reference_management.xml:508 #, no-c-format msgid "" "SELECT PostGIS_PROJ_Version();\n" " postgis_proj_version\n" "-------------------------\n" " Rel. 4.4.9, 29 Oct 2004\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:514 reference_management.xml:556 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:524 #, no-c-format msgid "PostGIS_Scripts_Build_Date" msgstr "" #. Tag: refpurpose #: reference_management.xml:526 #, no-c-format msgid "Returns build date of the PostGIS scripts." msgstr "" #. Tag: funcprototype #: reference_management.xml:531 #, no-c-format msgid "text PostGIS_Scripts_Build_Date " msgstr "" #. Tag: para #: reference_management.xml:542 #, no-c-format msgid "Returns build date of the PostGIS scripts." msgstr "" #. Tag: para #: reference_management.xml:544 #, no-c-format msgid "Availability: 1.0.0RC1" msgstr "" #. Tag: programlisting #: reference_management.xml:550 #, no-c-format msgid "" "SELECT PostGIS_Scripts_Build_Date();\n" " postgis_scripts_build_date\n" "-------------------------\n" " 2007-08-18 09:09:26\n" "(1 row)" msgstr "" #. Tag: refname #: reference_management.xml:566 #, no-c-format msgid "PostGIS_Scripts_Installed" msgstr "" #. Tag: refpurpose #: reference_management.xml:568 #, no-c-format msgid "Returns version of the postgis scripts installed in this database." msgstr "" #. Tag: funcprototype #: reference_management.xml:574 #, no-c-format msgid "text PostGIS_Scripts_Installed " msgstr "" #. Tag: para #: reference_management.xml:585 #, no-c-format msgid "Returns version of the postgis scripts installed in this database." msgstr "" #. Tag: para #: reference_management.xml:589 #, no-c-format msgid "If the output of this function doesn't match the output of you probably missed to properly upgrade an existing database. See the Upgrading section for more info." msgstr "" #. Tag: para #: reference_management.xml:596 reference_management.xml:642 #, no-c-format msgid "Availability: 0.9.0" msgstr "" #. Tag: programlisting #: reference_management.xml:602 #, no-c-format msgid "" "SELECT PostGIS_Scripts_Installed();\n" " postgis_scripts_installed\n" "-------------------------\n" " 1.5.0SVN\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:608 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_management.xml:614 #, no-c-format msgid "PostGIS_Scripts_Released" msgstr "" #. Tag: refpurpose #: reference_management.xml:616 #, no-c-format msgid "Returns the version number of the postgis.sql script released with the installed postgis lib." msgstr "" #. Tag: funcprototype #: reference_management.xml:622 #, no-c-format msgid "text PostGIS_Scripts_Released " msgstr "" #. Tag: para #: reference_management.xml:633 #, no-c-format msgid "Returns the version number of the postgis.sql script released with the installed postgis lib." msgstr "" #. Tag: para #: reference_management.xml:637 #, no-c-format msgid "Starting with version 1.1.0 this function returns the same value of . Kept for backward compatibility." msgstr "" #. Tag: programlisting #: reference_management.xml:648 #, no-c-format msgid "" "SELECT PostGIS_Scripts_Released();\n" " postgis_scripts_released\n" "-------------------------\n" " 1.3.4SVN\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:654 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_management.xml:660 #, no-c-format msgid "PostGIS_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:662 #, no-c-format msgid "Returns PostGIS version number and compile-time options." msgstr "" #. Tag: funcprototype #: reference_management.xml:668 #, no-c-format msgid "text PostGIS_Version " msgstr "" #. Tag: para #: reference_management.xml:679 #, no-c-format msgid "Returns PostGIS version number and compile-time options." msgstr "" #. Tag: programlisting #: reference_management.xml:685 #, no-c-format msgid "" "SELECT PostGIS_Version();\n" " postgis_version\n" "---------------------------------------\n" " 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:691 #, no-c-format msgid ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:701 #, no-c-format msgid "Populate_Geometry_Columns" msgstr "" #. Tag: refpurpose #: reference_management.xml:703 #, no-c-format msgid "Ensures geometry columns are defined with type modifiers or have appropriate spatial constraints This ensures they will be registered correctly in geometry_columns view. By default will convert all geometry columns with no type modifier to ones with type modifiers. To get old behavior set use_typmod=false" msgstr "" #. Tag: funcsynopsis #: reference_management.xml:709 #, no-c-format msgid " text Populate_Geometry_Columns boolean use_typmod=true int Populate_Geometry_Columns oid relation_oid boolean use_typmod=true " msgstr "" #. Tag: para #: reference_management.xml:728 #, no-c-format msgid "Ensures geometry columns have appropriate type modifiers or spatial constraints to ensure they are registered correctly in geometry_columns table." msgstr "" #. Tag: para #: reference_management.xml:730 #, no-c-format msgid "For backwards compatibility and for spatial needs such as tble inheritance where each child table may have different geometry type, the old check constraint behavior is still supported. If you need the old behavior, you need to pass in the new optional argument as false use_typmod=false. When this is done geometry columns will be created with no type modifiers but will have 3 constraints defined. In particular, this means that every geometry column belonging to a table has at least three constraints:" msgstr "" #. Tag: para #: reference_management.xml:738 #, no-c-format msgid "enforce_dims_the_geom - ensures every geometry has the same dimension (see )" msgstr "" #. Tag: para #: reference_management.xml:744 #, no-c-format msgid "enforce_geotype_the_geom - ensures every geometry is of the same type (see )" msgstr "" #. Tag: para #: reference_management.xml:750 #, no-c-format msgid "enforce_srid_the_geom - ensures every geometry is in the same projection (see )" msgstr "" #. Tag: para #: reference_management.xml:756 #, no-c-format msgid "If a table oid is provided, this function tries to determine the srid, dimension, and geometry type of all geometry columns in the table, adding constraints as necessary. If successful, an appropriate row is inserted into the geometry_columns table, otherwise, the exception is caught and an error notice is raised describing the problem." msgstr "" #. Tag: para #: reference_management.xml:763 #, no-c-format msgid "If the oid of a view is provided, as with a table oid, this function tries to determine the srid, dimension, and type of all the geometries in the view, inserting appropriate entries into the geometry_columns table, but nothing is done to enforce constraints." msgstr "" #. Tag: para #: reference_management.xml:769 #, no-c-format msgid "The parameterless variant is a simple wrapper for the parameterized variant that first truncates and repopulates the geometry_columns table for every spatial table and view in the database, adding spatial constraints to tables where appropriate. It returns a summary of the number of geometry columns detected in the database and the number that were inserted into the geometry_columns table. The parameterized version simply returns the number of rows inserted into the geometry_columns table." msgstr "" #. Tag: para #: reference_management.xml:777 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: para #: reference_management.xml:778 #, no-c-format msgid "Changed: 2.0.0 By default, now uses type modifiers instead of check constraints to constrain geometry types. You can still use check constraint behavior instead by using the new use_typmod and setting it to false." msgstr "" #. Tag: para #: reference_management.xml:780 #, no-c-format msgid "Enhanced: 2.0.0 use_typmod optional argument was introduced that allows controlling if columns are created with typmodifiers or with check constraints." msgstr "" #. Tag: programlisting #: reference_management.xml:786 #, no-c-format msgid "" "CREATE TABLE public.myspatial_table(gid serial, geom geometry);\n" "INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );\n" "-- This will now use typ modifiers. For this to work, there must exist data\n" "SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);\n" "\n" "populate_geometry_columns\n" "--------------------------\n" " 1\n" " \n" " \n" "\\d myspatial_table\n" "\n" " Table \"public.myspatial_table\"\n" " Column | Type | Modifiers \n" "--------+---------------------------+---------------------------------------------------------------\n" " gid | integer | not null default nextval('myspatial_table_gid_seq'::regclass)\n" " geom | geometry(LineString,4326) |" msgstr "" #. Tag: programlisting #: reference_management.xml:788 #, no-c-format msgid "" "-- This will change the geometry columns to use constraints if they are not typmod or have constraints already. \n" "--For this to work, there must exist data\n" "CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);\n" "INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );\n" "SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false);\n" "populate_geometry_columns\n" "--------------------------\n" " 1\n" "\\d myspatial_table_cs\n" "\n" " Table \"public.myspatial_table_cs\"\n" " Column | Type | Modifiers \n" "--------+----------+------------------------------------------------------------------\n" " gid | integer | not null default nextval('myspatial_table_cs_gid_seq'::regclass)\n" " geom | geometry | \n" "Check constraints:\n" " \"enforce_dims_geom\" CHECK (st_ndims(geom) = 2)\n" " \"enforce_geotype_geom\" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)\n" " \"enforce_srid_geom\" CHECK (st_srid(geom) = 4326)" msgstr "" #. Tag: refname #: reference_management.xml:803 #, no-c-format msgid "UpdateGeometrySRID" msgstr "" #. Tag: refpurpose #: reference_management.xml:805 #, no-c-format msgid "Updates the SRID of all features in a geometry column, geometry_columns metadata and srid table constraint" msgstr "" #. Tag: funcsynopsis #: reference_management.xml:810 #, no-c-format msgid " text UpdateGeometrySRID varchar table_name varchar column_name integer srid text UpdateGeometrySRID varchar schema_name varchar table_name varchar column_name integer srid text UpdateGeometrySRID varchar catalog_name varchar schema_name varchar table_name varchar column_name integer srid " msgstr "" #. Tag: para #: reference_management.xml:864 #, no-c-format msgid "Updates the SRID of all features in a geometry column, updating constraints and reference in geometry_columns. Note: uses current_schema() on schema-aware pgsql installations if schema is not provided." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/installation.xml.pot0000644000000000000000000017706212035745657023020 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-12 07:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: installation.xml:3 installation.xml:231 installation.xml:640 #, no-c-format msgid "Installation" msgstr "" #. Tag: para #: installation.xml:5 #, no-c-format msgid "This chapter details the steps required to install PostGIS." msgstr "" #. Tag: title #: installation.xml:10 #, no-c-format msgid "Short Version" msgstr "" #. Tag: para #: installation.xml:11 #, no-c-format msgid "The raster support is currently optional, but installed by default. For installing using the PostgreSQL 9.1+ extensions model it is required. Please refer to if you are using PostgreSQL 9.1+." msgstr "" #. Tag: para #: installation.xml:13 #, no-c-format msgid "All the .sql files once installed will be installed in share/contrib/postgis-&last_release_version; folder of your PostgreSQL install" msgstr "" #. Tag: para #: installation.xml:15 #, no-c-format msgid "The postgis_comments.sql, raster_comments.sql, topology_comments.sql generate quick help tips for each function that can be accessed via pgAdmin III or psql. In psql with a command of the form e.g.\\dd ST_SetPoint" msgstr "" #. Tag: programlisting #: installation.xml:17 #, no-c-format msgid "" "tar xvfz postgis-&last_release_version;.tar.gz\n" "cd postgis-&last_release_version;\n" "./configure --with-raster --with-topology --with-gui\n" "make\n" "make install\n" "createdb yourdatabase\n" "createlang plpgsql yourdatabase\n" "psql -d yourdatabase -f postgis.sql\n" "psql -d yourdatabase -f postgis_comments.sql\n" "psql -d yourdatabase -f spatial_ref_sys.sql\n" "psql -d yourdatabase -f rtpostgis.sql\n" "psql -d yourdatabase -f raster_comments.sql\n" "psql -d yourdatabase -f topology/topology.sql\n" "psql -d yourdatabase -f doc/topology_comments.sql" msgstr "" #. Tag: para #: installation.xml:18 #, no-c-format msgid "topology_comments.sql since its an optional feature is not installed by make install or make comments-install. However if you do a make comments or make topology_comments.sql, it will be generated in the docs folder" msgstr "" #. Tag: para #: installation.xml:27 #, no-c-format msgid "The rest of this chapter goes into detail each of the above installation steps." msgstr "" #. Tag: title #: installation.xml:34 #, no-c-format msgid "Requirements" msgstr "" #. Tag: para #: installation.xml:36 #, no-c-format msgid "PostGIS has the following requirements for building and usage:" msgstr "" #. Tag: emphasis #: installation.xml:41 #, no-c-format msgid "Required" msgstr "" #. Tag: para #: installation.xml:46 #, no-c-format msgid "PostgreSQL &min_postgres_version; or higher. A complete installation of PostgreSQL (including server headers) is required. PostgreSQL is available from http://www.postgresql.org ." msgstr "" #. Tag: para #: installation.xml:55 #, no-c-format msgid "For a full PostgreSQL / PostGIS support matrix and PostGIS/GEOS support matrix refer to http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS" msgstr "" #. Tag: para #: installation.xml:61 #, no-c-format msgid "GNU C compiler (gcc). Some other ANSI C compilers can be used to compile PostGIS, but we find far fewer problems when compiling with gcc." msgstr "" #. Tag: para #: installation.xml:69 #, no-c-format msgid "GNU Make (gmake or make). For many systems, GNU make is the default version of make. Check the version by invoking make -v. Other versions of make may not process the PostGIS Makefile properly." msgstr "" #. Tag: para #: installation.xml:79 #, no-c-format msgid "Proj4 reprojection library, version 4.6.0 or greater. The Proj4 library is used to provide coordinate reprojection support within PostGIS. Proj4 is available for download from http://trac.osgeo.org/proj/ ." msgstr "" #. Tag: para #: installation.xml:91 #, no-c-format msgid "GEOS geometry library, version 3.3 or greater, but GEOS 3.4+ is recommended to take full advantage of all the new functions and features. Without GEOS 3.4, you will be missing some major enhancements such as ST_Triangles and long-running function interruption, and improvements to geometry validation and making geometries valid such as ST_ValidDetail and ST_MakeValid. GEOS 3.3.2+ is also required for topology support. GEOS is available for download from http://trac.osgeo.org/geos/ and 3.4+ is backward-compatible with older versions so fairly safe to upgrade." msgstr "" #. Tag: para #: installation.xml:101 #, no-c-format msgid "LibXML2, version 2.5.x or higher. LibXML2 is currently used in some imports functions (ST_GeomFromGML and ST_GeomFromKML). LibXML2 is available for download from http://xmlsoft.org/downloads.html." msgstr "" #. Tag: para #: installation.xml:108 #, no-c-format msgid "JSON-C, version 0.9 or higher. JSON-C is currently used to import GeoJSON via the function ST_GeomFromGeoJson. JSON-C is available for download from http://oss.metaparadigm.com/json-c/." msgstr "" #. Tag: para #: installation.xml:116 #, no-c-format msgid "GDAL, version 1.8 or higher (1.9 or higher is strongly recommended since some things will not work well or behavior differently with lower versions). This is required for raster support. http://trac.osgeo.org/gdal/wiki/DownloadSource." msgstr "" #. Tag: emphasis #: installation.xml:124 #, no-c-format msgid "Optional" msgstr "" #. Tag: para #: installation.xml:129 #, no-c-format msgid "GTK (requires GTK+2.0, 2.8+) to compile the shp2pgsql-gui shape file loader. http://www.gtk.org/ ." msgstr "" #. Tag: para #: installation.xml:139 #, no-c-format msgid "CUnit (CUnit). This is needed for regression testing. http://cunit.sourceforge.net/" msgstr "" #. Tag: para #: installation.xml:145 #, no-c-format msgid "Apache Ant (ant) is required for building any of the drivers under the java directory. Ant is available from http://ant.apache.org ." msgstr "" #. Tag: para #: installation.xml:157 #, no-c-format msgid "DocBook (xsltproc) is required for building the documentation. Docbook is available from http://www.docbook.org/ ." msgstr "" #. Tag: para #: installation.xml:168 #, no-c-format msgid "DBLatex (dblatex) is required for building the documentation in PDF format. DBLatex is available from http://dblatex.sourceforge.net/ ." msgstr "" #. Tag: para #: installation.xml:179 #, no-c-format msgid "ImageMagick (convert) is required to generate the images used in the documentation. ImageMagick is available from http://www.imagemagick.org/ ." msgstr "" #. Tag: title #: installation.xml:192 #, no-c-format msgid "Getting the Source" msgstr "" #. Tag: para #: installation.xml:194 #, no-c-format msgid "Retrieve the PostGIS source archive from the downloads website http://www.postgis.org/download/postgis-&last_release_version;.tar.gz " msgstr "" #. Tag: programlisting #: installation.xml:201 #, no-c-format msgid "" "wget http://www.postgis.org/download/postgis-&last_release_version;.tar.gz\n" "tar -xvzf postgis-&last_release_version;.tar.gz" msgstr "" #. Tag: para #: installation.xml:203 #, no-c-format msgid "This will create a directory called postgis-&last_release_version; in the current working directory." msgstr "" #. Tag: para #: installation.xml:209 #, no-c-format msgid "Alternatively, checkout the source from the svn repository http://svn.osgeo.org/postgis/trunk/ ." msgstr "" #. Tag: programlisting #: installation.xml:221 #, no-c-format msgid "svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-&last_release_version;" msgstr "" #. Tag: para #: installation.xml:223 #, no-c-format msgid "Change into the newly created postgis-&last_release_version; directory to continue the installation." msgstr "" #. Tag: para #: installation.xml:234 #, no-c-format msgid "Many OS systems now include pre-built packages for PostgreSQL/PostGIS. In many cases compilation is only necessary if you want the most bleeding edge versions or you are a package maintainer." msgstr "" #. Tag: para #: installation.xml:239 #, no-c-format msgid "This section includes general compilation instructions, if you are compiling for Windows etc or another OS, you may find additional more detailed help at PostGIS User contributed compile guides and PostGIS Dev Wiki." msgstr "" #. Tag: para #: installation.xml:241 #, no-c-format msgid "Pre-Built Packages for various OS are listed in PostGIS Pre-built Packages" msgstr "" #. Tag: para #: installation.xml:242 #, no-c-format msgid "If you are a windows user, you can get stable builds via Stackbuilder or PostGIS Windows download site We also have very bleeding-edge windows experimental builds that are built usually once or twice a week or whenever anything exciting happens. You can use these to experiment with the in progress releases of PostGIS" msgstr "" #. Tag: para #: installation.xml:247 #, no-c-format msgid "The PostGIS module is an extension to the PostgreSQL backend server. As such, PostGIS &last_release_version; requires full PostgreSQL server headers access in order to compile. It can be built against PostgreSQL versions &min_postgres_version; or higher. Earlier versions of PostgreSQL are not supported." msgstr "" #. Tag: para #: installation.xml:255 #, no-c-format msgid "Refer to the PostgreSQL installation guides if you haven't already installed PostgreSQL. http://www.postgresql.org ." msgstr "" #. Tag: para #: installation.xml:265 #, no-c-format msgid "For GEOS functionality, when you install PostgresSQL you may need to explicitly link PostgreSQL against the standard C++ library:" msgstr "" #. Tag: programlisting #: installation.xml:270 #, no-c-format msgid "LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE]" msgstr "" #. Tag: para #: installation.xml:272 #, no-c-format msgid "This is a workaround for bogus C++ exceptions interaction with older development tools. If you experience weird problems (backend unexpectedly closed or similar things) try this trick. This will require recompiling your PostgreSQL from scratch, of course." msgstr "" #. Tag: para #: installation.xml:280 #, no-c-format msgid "The following steps outline the configuration and compilation of the PostGIS source. They are written for Linux users and will not work on Windows or Mac." msgstr "" #. Tag: title #: installation.xml:287 #, no-c-format msgid "Configuration" msgstr "" #. Tag: para #: installation.xml:289 #, no-c-format msgid "As with most linux installations, the first step is to generate the Makefile that will be used to build the source code. This is done by running the shell script" msgstr "" #. Tag: para #: installation.xml:299 #, no-c-format msgid "With no additional parameters, this command will attempt to automatically locate the required components and libraries needed to build the PostGIS source code on your system. Although this is the most common usage of ./configure, the script accepts several parameters for those who have the required libraries and programs in non-standard locations." msgstr "" #. Tag: para #: installation.xml:308 #, no-c-format msgid "The following list shows only the most commonly used parameters. For a complete list, use the --help or --help=short parameters." msgstr "" #. Tag: para #: installation.xml:318 #, no-c-format msgid "This is the location the PostGIS libraries and SQL scripts will be installed to. By default, this location is the same as the detected PostgreSQL installation." msgstr "" #. Tag: para #: installation.xml:325 #, no-c-format msgid "This parameter is currently broken, as the package will only install into the PostgreSQL installation directory. Visit http://trac.osgeo.org/postgis/ticket/635 to track this bug." msgstr "" #. Tag: para #: installation.xml:340 #, no-c-format msgid "PostgreSQL provides a utility called pg_config to enable extensions like PostGIS to locate the PostgreSQL installation directory. Use this parameter (--with-pgconfig=/path/to/pg_config) to manually specify a particular PostgreSQL installation that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:354 #, no-c-format msgid "GDAL, a required library, provides functionality needed for raster support gdal-config to enable software installations to locate the GDAL installation directory. Use this parameter (--with-gdalconfig=/path/to/gdal-config) to manually specify a particular GDAL installation that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:368 #, no-c-format msgid "GEOS, a required geometry library, provides a utility called geos-config to enable software installations to locate the GEOS installation directory. Use this parameter (--with-geosconfig=/path/to/geos-config) to manually specify a particular GEOS installation that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:382 #, no-c-format msgid "LibXML is the library required for doing GeomFromKML/GML processes. It normally is found if you have libxml installed, but if not or you want a specific version used, you'll need to point PostGIS at a specific xml2-config confi file to enable software installations to locate the LibXML installation directory. Use this parameter (>--with-xml2config=/path/to/xml2-config) to manually specify a particular LibXML installation that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:400 #, no-c-format msgid "Proj4 is a reprojection library required by PostGIS. Use this parameter (--with-projdir=/path/to/projdir) to manually specify a particular Proj4 installation directory that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:412 #, no-c-format msgid "Directory where iconv is installed." msgstr "" #. Tag: para #: installation.xml:421 #, no-c-format msgid "JSON-C is an MIT-licensed JSON library required by PostGIS ST_GeomFromJSON support. Use this parameter (--with-jsondir=/path/to/jsondir) to manually specify a particular JSON-C installation directory that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:433 #, no-c-format msgid "Compile the data import GUI (requires GTK+2.0). This will create shp2pgsql-gui graphical interface to shp2pgsql." msgstr "" #. Tag: para #: installation.xml:442 #, no-c-format msgid "Compile with raster support. This will build rtpostgis-&last_release_version; library and rtpostgis.sql file. This may not be required in final release as plan is to build in raster support by default." msgstr "" #. Tag: para #: installation.xml:451 #, no-c-format msgid "Compile with topology support. This will build the topology.sql file. There is no corresponding library as all logic needed for topology is in postgis-&last_release_version; library." msgstr "" #. Tag: para #: installation.xml:460 #, no-c-format msgid "By default PostGIS will try to detect gettext support and compile with it, however if you run into incompatibility issues that cause breakage of loader, you can disable it entirely with this command. Refer to ticket http://trac.osgeo.org/postgis/ticket/748 for an example issue solved by configuring with this. NOTE: that you aren't missing much by turning this off. This is used for international help/label support for the GUI loader which is not yet documented and still experimental." msgstr "" #. Tag: para #: installation.xml:470 #, no-c-format msgid "If you obtained PostGIS from the SVN repository , the first step is really to run the script" msgstr "" #. Tag: para #: installation.xml:482 #, no-c-format msgid "This script will generate the configure script that in turn is used to customize the installation of PostGIS." msgstr "" #. Tag: para #: installation.xml:487 #, no-c-format msgid "If you instead obtained PostGIS as a tarball, running ./autogen.sh is not necessary as configure has already been generated." msgstr "" #. Tag: title #: installation.xml:496 #, no-c-format msgid "Building" msgstr "" #. Tag: para #: installation.xml:498 #, no-c-format msgid "Once the Makefile has been generated, building PostGIS is as simple as running" msgstr "" #. Tag: para #: installation.xml:507 #, no-c-format msgid "The last line of the output should be \"PostGIS was built successfully. Ready to install.\"" msgstr "" #. Tag: para #: installation.xml:512 #, no-c-format msgid "As of PostGIS v1.4.0, all the functions have comments generated from the documentation. If you wish to install these comments into your spatial databases later, run the command which requires docbook. The postgis_comments.sql and other package comments files raster_comments.sql, topology_comments.sql are also packaged in the tar.gz distribution in the doc folder so no need to make comments if installing from the tar ball." msgstr "" #. Tag: command #: installation.xml:522 installation.xml:544 #, no-c-format msgid "make comments" msgstr "" #. Tag: para #: installation.xml:525 #, no-c-format msgid "Introduced in PostGIS 2.0. This generates html cheat sheets suitable for quick reference or for student handouts. This requires xsltproc to build and will generate 4 files in doc folder topology_cheatsheet.html, tiger_geocoder_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.html" msgstr "" #. Tag: para #: installation.xml:530 #, no-c-format msgid "You can download some pre-built ones available in html and pdf from PostGIS / PostgreSQL Study Guides" msgstr "" #. Tag: command #: installation.xml:533 #, no-c-format msgid "make cheatsheets" msgstr "" #. Tag: title #: installation.xml:538 #, no-c-format msgid "Building PostGIS Extensions and Deploying them" msgstr "" #. Tag: para #: installation.xml:540 #, no-c-format msgid "The PostGIS extensions are built and installed automatically if you are using PostgreSQL 9.1+." msgstr "" #. Tag: para #: installation.xml:543 #, no-c-format msgid "If you are building from source repository, you need to build the function descriptions first. These get built if you have docbook installed. You can also manually build with the statement:" msgstr "" #. Tag: para #: installation.xml:545 #, no-c-format msgid "Building the comments is not necessary if you are building from a release tar ball since these are packaged pre-built with the tar ball already." msgstr "" #. Tag: para #: installation.xml:546 #, no-c-format msgid "If you are building against PostgreSQL 9.1, the extensions should automatically build as part of the make install process. You can if needed build from the extensions folders or copy files if you need them on a different server." msgstr "" #. Tag: programlisting #: installation.xml:548 #, no-c-format msgid "" "cd extensions\n" "cd postgis\n" "make clean\n" "make \n" "make install\n" "cd ..\n" "cd postgis_topology\n" "make clean\n" "make \n" "make install" msgstr "" #. Tag: para #: installation.xml:549 #, no-c-format msgid "The extension files will always be the same for the same version of PostGIS regardless of OS, so it is fine to copy over the extension files from one OS to another as long as you have the PostGIS binaries already installed on your servers." msgstr "" #. Tag: para #: installation.xml:551 #, no-c-format msgid "If you want to install the extensions manually on a separate server different from your development, You need to copy the following files from the extensions folder into the PostgreSQL / share / extension folder of your PostgreSQL install as well as the needed binaries for regular PostGIS if you don't have them already on the server." msgstr "" #. Tag: para #: installation.xml:558 #, no-c-format msgid "These are the control files that denote information such as the version of the extension to install if not specified. postgis.control, postgis_topology.control." msgstr "" #. Tag: para #: installation.xml:564 #, no-c-format msgid "All the files in the /sql folder of each extension. Note that these need to be copied to the root of the PostgreSQL share/extension folder extensions/postgis/sql/*.sql, extensions/postgis_topology/sql/*.sql" msgstr "" #. Tag: para #: installation.xml:570 #, no-c-format msgid "Once you do that, you should see postgis, postgis_topology as available extensions in PgAdmin -> extensions." msgstr "" #. Tag: para #: installation.xml:571 #, no-c-format msgid "If you are using psql, you can verify that the extensions are installed by running this query:" msgstr "" #. Tag: programlisting #: installation.xml:572 #, no-c-format msgid "" "SELECT name, default_version,installed_version \n" "FROM pg_available_extensions WHERE name LIKE 'postgis%' ;\n" " name | default_version | installed_version\n" "-----------------+-----------------+-------------------\n" "postgis | &last_release_version; | &last_release_version;\n" "postgis_topology | &last_release_version; |" msgstr "" #. Tag: para #: installation.xml:574 #, no-c-format msgid "If you have the extension installed in the database you are querying, you'll see mention in the installed_version column. If you get no records back, it means you don't have postgis extensions installed on the server at all. PgAdmin III 1.14+ will also provide this information in the extensions section of the database browser tree and will even allow upgrade or uninstall by right-clicking." msgstr "" #. Tag: para #: installation.xml:578 #, no-c-format msgid "If you have the extensions available, you can install postgis extension in your database of choice by either using pgAdmin extension interface or running these sql commands:" msgstr "" #. Tag: programlisting #: installation.xml:579 #, no-c-format msgid "" "CREATE EXTENSION postgis;\n" "CREATE EXTENSION postgis_topology;" msgstr "" #. Tag: para #: installation.xml:581 #, no-c-format msgid "Extension tables spatial_ref_sys, layer, topology can not be explicitly backed up. They can only be backed up when the respective postgis or postgis_topology extension is backed up, which only seems to happen when you backup the whole database. As of PostGIS 2.0.1, only srid records not packaged with PostGIS are backed up when the database is backed up so don't go around changing srids we package and expect your changes to be there. Put in a ticket if you find an issue. The structures of extension tables are never backed up since they are created with CREATE EXTENSION and assumed to be the same for a given version of an extension. These behaviors are built into the current PostgreSQL extension model, so nothing we can do about it." msgstr "" #. Tag: para #: installation.xml:586 #, no-c-format msgid "If you installed &last_release_version;, without using our wonderful extension system, you can change it to be extension based by first upgrading to the latest micro version running the upgrade scripts: postgis_upgrade_20_minor.sql,raster_upgrade_20_minor.sql,topology_upgrade_20_minor.sql." msgstr "" #. Tag: para #: installation.xml:587 #, no-c-format msgid "If you installed postgis without raster support, you'll need to install raster support first (using the full rtpostgis.sql" msgstr "" #. Tag: para #: installation.xml:588 #, no-c-format msgid "Then you can run the below commands to package the functions in their respective extension." msgstr "" #. Tag: programlisting #: installation.xml:589 #, no-c-format msgid "" "CREATE EXTENSION postgis FROM unpackaged;\n" "CREATE EXTENSION postgis_topology FROM unpackaged;" msgstr "" #. Tag: title #: installation.xml:595 #, no-c-format msgid "Testing" msgstr "" #. Tag: para #: installation.xml:597 #, no-c-format msgid "If you wish to test the PostGIS build, run" msgstr "" #. Tag: command #: installation.xml:602 #, no-c-format msgid "make check" msgstr "" #. Tag: para #: installation.xml:605 #, no-c-format msgid "The above command will run through various checks and regression tests using the generated library against an actual PostgreSQL database." msgstr "" #. Tag: para #: installation.xml:611 #, no-c-format msgid "If you configured PostGIS using non-standard PostgreSQL, GEOS, or Proj4 locations, you may need to add their library locations to the LD_LIBRARY_PATH environment variable." msgstr "" #. Tag: para #: installation.xml:619 #, no-c-format msgid "Currently, the make check relies on the PATH and PGPORT environment variables when performing the checks - it does not use the PostgreSQL version that may have been specified using the configuration parameter --with-pgconfig. So make sure to modify your PATH to match the detected PostgreSQL installation during configuration or be prepared to deal with the impending headaches." msgstr "" #. Tag: para #: installation.xml:631 #, no-c-format msgid "If successful, the output of the test should be similar to the following:" msgstr "" #. Tag: programlisting #: installation.xml:636 #, no-c-format msgid "" "CUnit - A Unit testing framework for C - Version 2.1-0\n" " http://cunit.sourceforge.net/\n" "\n" "\n" "Suite: print_suite\n" " Test: test_lwprint_default_format ... passed\n" " Test: test_lwprint_format_orders ... passed\n" " Test: test_lwprint_optional_format ... passed\n" " Test: test_lwprint_oddball_formats ... passed\n" " Test: test_lwprint_bad_formats ... passed\n" "Suite: Misc Suite\n" " Test: test_misc_force_2d ... passed\n" " Test: test_misc_simplify ... passed\n" " Test: test_misc_count_vertices ... passed\n" " Test: test_misc_area ... passed\n" " Test: test_misc_wkb ... passed\n" "Suite: PointArray Suite\n" " Test: test_ptarray_append_point ... passed\n" " Test: test_ptarray_append_ptarray ... passed\n" "Suite: PostGIS Computational Geometry Suite\n" " Test: test_lw_segment_side ... passed\n" " Test: test_lw_segment_intersects ... passed\n" " Test: test_lwline_crossing_short_lines ... passed\n" " Test: test_lwline_crossing_long_lines ... passed\n" " Test: test_lwline_crossing_bugs ... passed\n" " Test: test_lwpoint_set_ordinate ... passed\n" " Test: test_lwpoint_get_ordinate ... passed\n" " Test: test_point_interpolate ... passed\n" " Test: test_lwline_clip ... passed\n" " Test: test_lwline_clip_big ... passed\n" " Test: test_lwmline_clip ... passed\n" " Test: test_geohash_point ... passed\n" " Test: test_geohash_precision ... passed\n" " Test: test_geohash ... passed\n" " Test: test_isclosed ... passed\n" "Suite: PostGIS Measures Suite\n" " Test: test_mindistance2d_tolerance ... passed\n" " Test: test_rect_tree_contains_point ... passed\n" " Test: test_rect_tree_intersects_tree ... passed\n" " Test: test_lwgeom_segmentize2d ... passed\n" "Suite: WKT Out Suite\n" " Test: test_wkt_out_point ... passed\n" " Test: test_wkt_out_linestring ... passed\n" " Test: test_wkt_out_polygon ... passed\n" " Test: test_wkt_out_multipoint ... passed\n" " Test: test_wkt_out_multilinestring ... passed\n" ":\n" ":\n" "--Run Summary: Type Total Ran Passed Failed\n" " suites 17 17 n/a 0\n" " tests 143 143 143 0\n" " asserts 1228 1228 1228 0\n" "\n" "\n" "Creating spatial db postgis_reg\n" " Postgis 2.0.0SVN - 2011-01-11 15:33:37\n" " GEOS: 3.3.0-CAPI-1.7.0\n" " PROJ: Rel. 4.6.1, 21 August 2008\n" "\n" "Running tests\n" "\n" " loader/Point.............. ok\n" " loader/PointM.............. ok\n" " loader/PointZ.............. ok\n" " loader/MultiPoint.............. ok\n" " loader/MultiPointM.............. ok\n" " loader/MultiPointZ.............. ok\n" " loader/Arc.............. ok\n" " loader/ArcM.............. ok\n" " loader/ArcZ.......... ok\n" " loader/Polygon.............. ok\n" " loader/PolygonM.............. ok\n" " loader/PolygonZ.............. ok\n" " regress. ok\n" " regress_index. ok\n" " regress_index_nulls. ok\n" " lwgeom_regress. ok\n" " regress_lrs. ok\n" " removepoint. ok\n" " setpoint. ok\n" " simplify. ok\n" " snaptogrid. ok\n" " affine. ok\n" " measures. ok\n" " long_xact. ok\n" " ctors. ok\n" " sql-mm-serialize. ok\n" " sql-mm-circularstring. ok\n" " sql-mm-compoundcurve. ok\n" " sql-mm-curvepoly. ok\n" " sql-mm-general. ok\n" " sql-mm-multicurve. ok\n" " sql-mm-multisurface. ok\n" " polyhedralsurface. ok\n" " out_geometry. ok\n" " out_geography. ok\n" " in_gml. ok\n" " in_kml. ok\n" " iscollection. ok\n" " regress_ogc. ok\n" " regress_ogc_cover. ok\n" " regress_ogc_prep. ok\n" " regress_bdpoly. ok\n" " regress_proj. ok\n" " dump. ok\n" " dumppoints. ok\n" " wmsservers_new. ok\n" " tickets. ok\n" " remove_repeated_points. ok\n" " split. ok\n" " relatematch. ok\n" " regress_buffer_params. ok\n" " hausdorff. ok\n" " clean. ok\n" " sharedpaths. ok\n" " snap. ok\n" "\n" "Run tests: 55\n" "Failed: 0" msgstr "" #. Tag: para #: installation.xml:642 #, no-c-format msgid "To install PostGIS, type" msgstr "" #. Tag: command #: installation.xml:647 #, no-c-format msgid "make install" msgstr "" #. Tag: para #: installation.xml:650 #, no-c-format msgid "This will copy the PostGIS installation files into their appropriate subdirectory specified by the --prefix configuration parameter. In particular:" msgstr "" #. Tag: para #: installation.xml:658 #, no-c-format msgid "The loader and dumper binaries are installed in [prefix]/bin." msgstr "" #. Tag: para #: installation.xml:665 #, no-c-format msgid "The SQL files, such as postgis.sql, are installed in [prefix]/share/contrib." msgstr "" #. Tag: para #: installation.xml:672 #, no-c-format msgid "The PostGIS libraries are installed in [prefix]/lib." msgstr "" #. Tag: para #: installation.xml:679 #, no-c-format msgid "If you previously ran the make comments command to generate the postgis_comments.sql, raster_comments.sql file, install the sql file by running" msgstr "" #. Tag: command #: installation.xml:686 #, no-c-format msgid "make comments-install" msgstr "" #. Tag: para #: installation.xml:690 #, no-c-format msgid "postgis_comments.sql, raster_comments.sql, topology_comments.sql was separated from the typical build and installation targets since with it comes the extra dependency of xsltproc." msgstr "" #. Tag: title #: installation.xml:700 #, no-c-format msgid "Create a spatially-enabled database on PostgreSQL lower than 9.1" msgstr "" #. Tag: para #: installation.xml:702 #, no-c-format msgid "The first step in creating a PostGIS database is to create a simple PostgreSQL database." msgstr "" #. Tag: command #: installation.xml:708 installation.xml:805 #, no-c-format msgid "createdb [yourdatabase]" msgstr "" #. Tag: para #: installation.xml:711 #, no-c-format msgid "Many of the PostGIS functions are written in the PL/pgSQL procedural language. As such, the next step to create a PostGIS database is to enable the PL/pgSQL language in your new database. This is accomplish by the command below command. For PostgreSQL 8.4+, this is generally already installed" msgstr "" #. Tag: command #: installation.xml:719 #, no-c-format msgid "createlang plpgsql [yourdatabase]" msgstr "" #. Tag: para #: installation.xml:722 #, no-c-format msgid "Now load the PostGIS object and function definitions into your database by loading the postgis.sql definitions file (located in [prefix]/share/contrib as specified during the configuration step)." msgstr "" #. Tag: command #: installation.xml:730 #, no-c-format msgid "psql -d [yourdatabase] -f postgis.sql" msgstr "" #. Tag: para #: installation.xml:733 #, no-c-format msgid "For a complete set of EPSG coordinate system definition identifiers, you can also load the spatial_ref_sys.sql definitions file and populate the spatial_ref_sys table. This will permit you to perform ST_Transform() operations on geometries." msgstr "" #. Tag: command #: installation.xml:741 #, no-c-format msgid "psql -d [yourdatabase] -f spatial_ref_sys.sql" msgstr "" #. Tag: para #: installation.xml:744 #, no-c-format msgid "If you wish to add comments to the PostGIS functions, the final step is to load the postgis_comments.sql into your spatial database. The comments can be viewed by simply typing \\dd [function_name] from a psql terminal window." msgstr "" #. Tag: command #: installation.xml:752 #, no-c-format msgid "psql -d [yourdatabase] -f postgis_comments.sql" msgstr "" #. Tag: para #: installation.xml:755 #, no-c-format msgid "Install raster support" msgstr "" #. Tag: command #: installation.xml:760 #, no-c-format msgid "psql -d [yourdatabase] -f rtpostgis.sql" msgstr "" #. Tag: para #: installation.xml:763 #, no-c-format msgid "Install raster support comments. This will provide quick help info for each raster function using psql or PgAdmin or any other PostgreSQL tool that can show function comments" msgstr "" #. Tag: command #: installation.xml:769 #, no-c-format msgid "psql -d [yourdatabase] -f raster_comments.sql" msgstr "" #. Tag: para #: installation.xml:771 #, no-c-format msgid "Install topology support" msgstr "" #. Tag: command #: installation.xml:776 #, no-c-format msgid "psql -d [yourdatabase] -f topology/topology.sql" msgstr "" #. Tag: para #: installation.xml:779 #, no-c-format msgid "Install topology support comments. This will provide quick help info for each topology function / type using psql or PgAdmin or any other PostgreSQL tool that can show function comments" msgstr "" #. Tag: command #: installation.xml:785 #, no-c-format msgid "psql -d [yourdatabase] -f topology/topology_comments.sql" msgstr "" #. Tag: para #: installation.xml:788 installation.xml:825 #, no-c-format msgid "If you plan to restore an old backup from prior versions in this new db, run:" msgstr "" #. Tag: command #: installation.xml:789 installation.xml:826 #, no-c-format msgid "psql -d [yourdatabase] -f legacy.sql" msgstr "" #. Tag: para #: installation.xml:790 #, no-c-format msgid "There is an alternative legacy_minimal.sql you can run instead which will install barebones needed to recover tables and work with apps like MapServer and GeoServer. If you have views that use things like distance / length etc, you'll need the full blown legacy.sql" msgstr "" #. Tag: para #: installation.xml:793 installation.xml:828 #, no-c-format msgid "You can later run uninstall_legacy.sql to get rid of the deprecated functions after you are done with restoring and cleanup." msgstr "" #. Tag: title #: installation.xml:797 #, no-c-format msgid "Creating a spatial database using EXTENSIONS" msgstr "" #. Tag: para #: installation.xml:799 #, no-c-format msgid "If you are using PostgreSQL 9.1+ and have compiled and installed the extensions/ postgis modules, you can create a spatial database the new way." msgstr "" #. Tag: para #: installation.xml:808 #, no-c-format msgid "The core postgis extension installs PostGIS geometry, geography, raster, spatial_ref_sys and all the functions and comments with a simple: CREATE EXTENSION postgis; command." msgstr "" #. Tag: command #: installation.xml:814 #, no-c-format msgid "psql -d [yourdatabase] -c \"CREATE EXTENSION postgis;\"" msgstr "" #. Tag: para #: installation.xml:817 #, no-c-format msgid "Topology is packaged as a separate extension and installable with command:" msgstr "" #. Tag: command #: installation.xml:822 #, no-c-format msgid "psql -d [yourdatabase] -c \"CREATE EXTENSION postgis_topology;\"" msgstr "" #. Tag: title #: installation.xml:832 #, no-c-format msgid "Installing, Upgrading Tiger Geocoder and loading data" msgstr "" #. Tag: para #: installation.xml:834 #, no-c-format msgid "The Tiger geocoder does not get installed / upgraded with the core PostGIS scripts because it is only of regional use. In fact nothing located in the extras folder is installed by default with the regular PostGIS install / upgrade. Extras like Tiger geocoder may also not be packaged in your PostGIS distribution, but will always be available in the postgis-&last_release_version;.tar.gz file. The instructions provided here are also available in the extras/tiger_geocoder/tiger_2010/README" msgstr "" #. Tag: para #: installation.xml:836 #, no-c-format msgid "If you are on Windows and you don't have tar installed, you can use http://www.7-zip.org/ to unzip the PostGIS tarball." msgstr "" #. Tag: title #: installation.xml:838 #, no-c-format msgid "Tiger Geocoder Enabling your PostGIS database" msgstr "" #. Tag: para #: installation.xml:839 #, no-c-format msgid "First install PostGIS using the prior instructions." msgstr "" #. Tag: para #: installation.xml:843 installation.xml:870 #, no-c-format msgid "If you don't have an extras folder, download http://www.postgis.org/download/postgis-&last_release_version;.tar.gz" msgstr "" #. Tag: command #: installation.xml:848 installation.xml:875 #, no-c-format msgid "tar xvfz postgis-&last_release_version;.tar.gz" msgstr "" #. Tag: command #: installation.xml:852 installation.xml:879 #, no-c-format msgid "cd postgis-&last_release_version;/extras/tiger_geocoder/tiger_2011" msgstr "" #. Tag: para #: installation.xml:855 #, no-c-format msgid "Edit the tiger_loader.sql to the paths of your executables server etc." msgstr "" #. Tag: para #: installation.xml:856 #, no-c-format msgid "If you are installing Tiger geocoder for the first time edit either the create_geocode.bat script If you are on windows or the create_geocode.sh if you are on Linux/Unix/Mac OSX with your PostgreSQL specific settings and run the corresponding script from the commandline. If you don't edit this file, it will just contain common case locations of items. You can edit the generated script after the fact when you run the command." msgstr "" #. Tag: para #: installation.xml:859 #, no-c-format msgid "Verify that you now have a tiger schema in your database and that it is part of your database search_path. If it is not, add it with a command something along the line of:" msgstr "" #. Tag: programlisting #: installation.xml:859 #, no-c-format msgid "ALTER DATABASE geocoder SET search_path=public, tiger;" msgstr "" #. Tag: para #: installation.xml:860 #, no-c-format msgid "The normalizing address functionality works more or less without any data except for tricky addresses. Run this test and verify things look like this:" msgstr "" #. Tag: programlisting #: installation.xml:861 #, no-c-format msgid "" "SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address;\n" "pretty_address\n" "---------------------------------------\n" "202 E Fremont St, Las Vegas, NV 89101" msgstr "" #. Tag: title #: installation.xml:865 #, no-c-format msgid "Upgrading your Tiger Geocoder Install" msgstr "" #. Tag: para #: installation.xml:866 #, no-c-format msgid "If you have Tiger Geocoder packaged with 2.0+ already installed, you can upgrade the functions at any time even from an interim tar ball if there are fixes you badly need." msgstr "" #. Tag: para #: installation.xml:882 #, no-c-format msgid "Locate the upgrade_geocoder.bat script If you are on windows or the upgrade_geocoder.sh if you are on Linux/Unix/Mac OSX. Edit the file to have your postgis database credientials and run then corresponding script from the commandline." msgstr "" #. Tag: para #: installation.xml:885 #, no-c-format msgid "Next drop all nation tables and load up the new ones. Generate a drop script with this SQL statement as detailed in " msgstr "" #. Tag: programlisting #: installation.xml:886 #, no-c-format msgid "SELECT drop_nation_tables_generate_script();" msgstr "" #. Tag: para #: installation.xml:887 #, no-c-format msgid "Run the generated drop SQL statements." msgstr "" #. Tag: para #: installation.xml:888 #, no-c-format msgid "Generate a nation load script with this SELECT statement as detailed in " msgstr "" #. Tag: emphasis #: installation.xml:889 #, no-c-format msgid "For windows" msgstr "" #. Tag: programlisting #: installation.xml:890 #, no-c-format msgid "SELECT loader_generate_nation_script('windows');" msgstr "" #. Tag: emphasis #: installation.xml:891 #, no-c-format msgid "For unix/linux" msgstr "" #. Tag: programlisting #: installation.xml:892 #, no-c-format msgid "SELECT loader_generate_nation_script('sh');" msgstr "" #. Tag: para #: installation.xml:893 #, no-c-format msgid "Refer to for instructions on how to run the generate script. This only needs to be done once." msgstr "" #. Tag: para #: installation.xml:894 #, no-c-format msgid "You can have a mix of 2010/2011 state tables and can upgrade each state separately. Before you upgrade a state to 2011, you first need to drop the 2010 tables for that state using ." msgstr "" #. Tag: title #: installation.xml:897 #, no-c-format msgid "Loading Tiger Data" msgstr "" #. Tag: para #: installation.xml:898 #, no-c-format msgid "The instructions for loading data are available in a more detailed form in the extras/tiger_geocoder/tiger_2011/README. This just includes the general steps." msgstr "" #. Tag: para #: installation.xml:899 #, no-c-format msgid "The load process downloads data from the census website for the respective nation files, states requested, extracts the files, and then loads each state into its own separate set of state tables. Each state table inherits from the tables defined in tiger schema so that its sufficient to just query those tables to access all the data and drop a set of state tables at any time using the if you need to reload a state or just don't need a state anymore." msgstr "" #. Tag: para #: installation.xml:901 #, no-c-format msgid "In order to be able to load data you'll need the following tools:" msgstr "" #. Tag: para #: installation.xml:903 #, no-c-format msgid "A tool to unzip the zip files from census website." msgstr "" #. Tag: para #: installation.xml:904 #, no-c-format msgid "For Unix like systems: unzip executable which is usually already installed on most Unix like platforms." msgstr "" #. Tag: para #: installation.xml:905 #, no-c-format msgid "For Windows, 7-zip which is a free compress/uncompress tool you can download from http://www.7-zip.org/" msgstr "" #. Tag: para #: installation.xml:907 #, no-c-format msgid "shp2pgsql commandline which is installed by default when you install PostGIS." msgstr "" #. Tag: para #: installation.xml:908 #, no-c-format msgid "wget which is a web grabber tool usually installed on most Unix/Linux systems." msgstr "" #. Tag: para #: installation.xml:909 #, no-c-format msgid "If you are on windows, you can get pre-compiled binaries from http://gnuwin32.sourceforge.net/packages/wget.htm" msgstr "" #. Tag: para #: installation.xml:912 #, no-c-format msgid "If you are upgrading from tiger_2010, you'll need to first generate and run . Before you load any state data, you need to load the nation wide data which you do with . Which will generate a loader script for you." msgstr "" #. Tag: para #: installation.xml:914 #, no-c-format msgid "To load data refer to to generate a data load script for your platform for the states you desire. Note that you can install these piecemeal. You don't have to load all the states you want all at once. You can load them as you need them." msgstr "" #. Tag: para #: installation.xml:917 #, no-c-format msgid "After the states you desire have been loaded, make sure to run the: SELECT install_missing_indexes(); as described in ." msgstr "" #. Tag: para #: installation.xml:919 #, no-c-format msgid "To test that things are working as they should, try to run a geocode on an address in your state using " msgstr "" #. Tag: title #: installation.xml:924 #, no-c-format msgid "Create a spatially-enabled database from a template" msgstr "" #. Tag: para #: installation.xml:926 #, no-c-format msgid "Some packaged distributions of PostGIS (in particular the Win32 installers for PostGIS >= 1.1.5) load the PostGIS functions into a template database called template_postgis. If the template_postgis database exists in your PostgreSQL installation then it is possible for users and/or applications to create spatially-enabled databases using a single command. Note that in both cases, the database user must have been granted the privilege to create new databases." msgstr "" #. Tag: para #: installation.xml:937 #, no-c-format msgid "From the shell:" msgstr "" #. Tag: programlisting #: installation.xml:941 #, no-c-format msgid "# createdb -T template_postgis my_spatial_db" msgstr "" #. Tag: para #: installation.xml:943 #, no-c-format msgid "From SQL:" msgstr "" #. Tag: programlisting #: installation.xml:947 #, no-c-format msgid "postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis" msgstr "" #. Tag: title #: installation.xml:951 #, no-c-format msgid "Upgrading" msgstr "" #. Tag: para #: installation.xml:953 #, no-c-format msgid "Upgrading existing spatial databases can be tricky as it requires replacement or introduction of new PostGIS object definitions." msgstr "" #. Tag: para #: installation.xml:958 #, no-c-format msgid "Unfortunately not all definitions can be easily replaced in a live database, so sometimes your best bet is a dump/reload process." msgstr "" #. Tag: para #: installation.xml:963 #, no-c-format msgid "PostGIS provides a SOFT UPGRADE procedure for minor or bugfix releases, and a HARD UPGRADE procedure for major releases." msgstr "" #. Tag: para #: installation.xml:968 #, no-c-format msgid "Before attempting to upgrade PostGIS, it is always worth to backup your data. If you use the -Fc flag to pg_dump you will always be able to restore the dump with a HARD UPGRADE." msgstr "" #. Tag: title #: installation.xml:975 #, no-c-format msgid "Soft upgrade" msgstr "" #. Tag: para #: installation.xml:977 #, no-c-format msgid "If you installed your database using extensions, you'll need to upgrade using the extension model as well. If you installed using the old sql script way, then you should upgrade using the sql script way. Please refer to the appropriate." msgstr "" #. Tag: title #: installation.xml:980 #, no-c-format msgid "Soft Upgrade Pre 9.1+ or without extensions" msgstr "" #. Tag: para #: installation.xml:981 #, no-c-format msgid "This section applies only to those who installed PostGIS not using extensions. If you have extensions and try to upgrade with this approach you'll get messages like:" msgstr "" #. Tag: programlisting #: installation.xml:982 #, no-c-format msgid "can't drop ... because postgis extension depends on it" msgstr "" #. Tag: para #: installation.xml:983 #, no-c-format msgid "After compiling you should find several postgis_upgrade*.sql files. Install the one for your version of PostGIS. For example postgis_upgrade_13_to_15.sql should be used if you are upgrading from PostGIS 1.3 to 1.5. If you are moving from PostGIS 1.* to PostGIS 2.* or from PostGIS 2.* prior to r7409, you need to do a HARD UPGRADE." msgstr "" #. Tag: programlisting #: installation.xml:989 #, no-c-format msgid "psql -f postgis_upgrade_20_minor.sql -d your_spatial_database" msgstr "" #. Tag: para #: installation.xml:991 #, no-c-format msgid "The same procedure applies to raster and topology extensions, with upgrade files named rtpostgis_upgrade*.sql and topology_upgrade*.sql respectively. If you need them:" msgstr "" #. Tag: programlisting #: installation.xml:999 #, no-c-format msgid "psql -f rtpostgis_upgrade_20_minor.sql -d your_spatial_database" msgstr "" #. Tag: programlisting #: installation.xml:1000 #, no-c-format msgid "psql -f topology_upgrade_20_minor.sql -d your_spatial_database" msgstr "" #. Tag: para #: installation.xml:1003 #, no-c-format msgid "If you can't find the postgis_upgrade*.sql specific for upgrading your version you are using a version too early for a soft upgrade and need to do a HARD UPGRADE." msgstr "" #. Tag: para #: installation.xml:1009 #, no-c-format msgid "The function should inform you about the need to run this kind of upgrade using a \"procs need upgrade\" message." msgstr "" #. Tag: title #: installation.xml:1016 #, no-c-format msgid "Soft Upgrade 9.1+ using extensions" msgstr "" #. Tag: para #: installation.xml:1017 #, no-c-format msgid "If you originally installed PostGIS with extensions, then you need to upgrade using extensions as well. Doing a minor upgrade with extensions, is fairly painless." msgstr "" #. Tag: programlisting #: installation.xml:1018 #, no-c-format msgid "" "ALTER EXTENSION postgis UPDATE TO \"&last_release_version;\";\n" "ALTER EXTENSION postgis_topology UPDATE TO \"&last_release_version;\";" msgstr "" #. Tag: para #: installation.xml:1019 #, no-c-format msgid "If you get an error notice something like:" msgstr "" #. Tag: programlisting #: installation.xml:1020 #, no-c-format msgid "No migration path defined for ... to &last_release_version;" msgstr "" #. Tag: para #: installation.xml:1021 #, no-c-format msgid "Then you'll need to backup your database, create a fresh one as described in and then restore your backup ontop of this new database. You might get a message that postgis extension already installed which you can safely ignore." msgstr "" #. Tag: para #: installation.xml:1023 #, no-c-format msgid "If you installed PostGIS originally without a version specified, you can often skip the reinstallation of postgis extension before restoring since the backup just has CREATE EXTENSION postgis and thus picks up the newest latest version during restore. ." msgstr "" #. Tag: title #: installation.xml:1030 #, no-c-format msgid "Hard upgrade" msgstr "" #. Tag: para #: installation.xml:1032 #, no-c-format msgid "By HARD UPGRADE we mean full dump/reload of postgis-enabled databases. You need a HARD UPGRADE when PostGIS objects' internal storage changes or when SOFT UPGRADE is not possible. The Release Notes appendix reports for each version whether you need a dump/reload (HARD UPGRADE) to upgrade." msgstr "" #. Tag: para #: installation.xml:1041 #, no-c-format msgid "The dump/reload process is assisted by the postgis_restore.pl script which takes care of skipping from the dump all definitions which belong to PostGIS (including old ones), allowing you to restore your schemas and data into a database with PostGIS installed without getting duplicate symbol errors or bringing forward deprecated objects." msgstr "" #. Tag: para #: installation.xml:1050 #, no-c-format msgid "Supplementary instructions for windows users are available at Windows Hard upgrade." msgstr "" #. Tag: para #: installation.xml:1053 #, no-c-format msgid "The Procedure is as follows:" msgstr "" #. Tag: para #: installation.xml:1061 #, no-c-format msgid "Create a \"custom-format\" dump of the database you want to upgrade (let's call it olddb) include binary blobs (-b) and verbose (-v) output. The user can be the owner of the db, need not be postgres super account." msgstr "" #. Tag: programlisting #: installation.xml:1069 #, no-c-format msgid "pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f \"/somepath/olddb.backup\" olddb" msgstr "" #. Tag: para #: installation.xml:1075 #, no-c-format msgid "Do a fresh install of PostGIS in a new database -- we'll refer to this database as newdb. Please refer to and for instructions on how to do this." msgstr "" #. Tag: para #: installation.xml:1082 #, no-c-format msgid "The spatial_ref_sys entries found in your dump will be restored, but they will not override existing ones in spatial_ref_sys. This is to ensure that fixes in the official set will be properly propagated to restored databases. If for any reason you really want your own overrides of standard entries just don't load the spatial_ref_sys.sql file when creating the new db." msgstr "" #. Tag: para #: installation.xml:1092 #, no-c-format msgid "If your database is really old or you know you've been using long deprecated functions in your views and functions, you might need to load legacy.sql for all your functions and views etc. to properly come back. Only do this if _really_ needed. Consider upgrading your views and functions before dumping instead, if possible. The deprecated functions can be later removed by loading uninstall_legacy.sql." msgstr "" #. Tag: para #: installation.xml:1108 #, no-c-format msgid "Restore your backup into your fresh newdb database using postgis_restore.pl. Unexpected errors, if any, will be printed to the standard error stream by psql. Keep a log of those." msgstr "" #. Tag: programlisting #: installation.xml:1116 #, no-c-format msgid "perl utils/postgis_restore.pl \"/somepath/olddb.backup\" | psql -h localhost -p 5432 -U postgres newdb 2> errors.txt" msgstr "" #. Tag: para #: installation.xml:1122 #, no-c-format msgid "Errors may arise in the following cases:" msgstr "" #. Tag: para #: installation.xml:1128 #, no-c-format msgid "Some of your views or functions make use of deprecated PostGIS objects. In order to fix this you may try loading legacy.sql script prior to restore or you'll have to restore to a version of PostGIS which still contains those objects and try a migration again after porting your code. If the legacy.sql way works for you, don't forget to fix your code to stop using deprecated functions and drop them loading uninstall_legacy.sql." msgstr "" #. Tag: para #: installation.xml:1140 #, no-c-format msgid "Some custom records of spatial_ref_sys in dump file have an invalid SRID value. Valid SRID values are bigger than 0 and smaller than 999000. Values in the 999000.999999 range are reserved for internal use while values > 999999 can't be used at all. All your custom records with invalid SRIDs will be retained, with those > 999999 moved into the reserved range, but the spatial_ref_sys table would loose a check constraint guarding for that invariant to hold and possibly also its primary key ( when multiple invalid SRIDS get converted to the same reserved SRID value )." msgstr "" #. Tag: para #: installation.xml:1154 #, no-c-format msgid "In order to fix this you should copy your custom SRS to a SRID with a valid value (maybe in the 910000..910999 range), convert all your tables to the new srid (see ), delete the invalid entry from spatial_ref_sys and re-construct the check(s) with:" msgstr "" #. Tag: programlisting #: installation.xml:1161 #, no-c-format msgid "ALTER TABLE spatial_ref_sys ADD CONSTRAINT spatial_ref_sys_srid_check check (srid > 0 AND srid < 999000 );" msgstr "" #. Tag: programlisting #: installation.xml:1163 #, no-c-format msgid "ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid));" msgstr "" #. Tag: title #: installation.xml:1174 #, no-c-format msgid "Common Problems" msgstr "" #. Tag: para #: installation.xml:1175 #, no-c-format msgid "There are several things to check when your installation or upgrade doesn't go as you expected." msgstr "" #. Tag: para #: installation.xml:1182 #, no-c-format msgid "Check that you have installed PostgreSQL &min_postgres_version; or newer, and that you are compiling against the same version of the PostgreSQL source as the version of PostgreSQL that is running. Mix-ups can occur when your (Linux) distribution has already installed PostgreSQL, or you have otherwise installed PostgreSQL before and forgotten about it. PostGIS will only work with PostgreSQL &min_postgres_version; or newer, and strange, unexpected error messages will result if you use an older version. To check the version of PostgreSQL which is running, connect to the database using psql and run this query:" msgstr "" #. Tag: programlisting #: installation.xml:1195 #, no-c-format msgid "SELECT version();" msgstr "" #. Tag: para #: installation.xml:1197 #, no-c-format msgid "If you are running an RPM based distribution, you can check for the existence of pre-installed packages using the rpm command as follows: rpm -qa | grep postgresql" msgstr "" #. Tag: para #: installation.xml:1205 #, no-c-format msgid "If your upgrade fails, make sure you are restoring into a database that already has PostGIS installed." msgstr "" #. Tag: programlisting #: installation.xml:1206 #, no-c-format msgid "SELECT postgis_full_version();" msgstr "" #. Tag: para #: installation.xml:1210 #, no-c-format msgid "Also check that configure has correctly detected the location and version of PostgreSQL, the Proj4 library and the GEOS library." msgstr "" #. Tag: para #: installation.xml:1217 #, no-c-format msgid "The output from configure is used to generate the postgis_config.h file. Check that the POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION and POSTGIS_GEOS_VERSION variables have been set correctly." msgstr "" #. Tag: title #: installation.xml:1230 #, no-c-format msgid "JDBC" msgstr "" #. Tag: para #: installation.xml:1232 #, no-c-format msgid "The JDBC extensions provide Java objects corresponding to the internal PostGIS types. These objects can be used to write Java clients which query the PostGIS database and draw or do calculations on the GIS data in PostGIS." msgstr "" #. Tag: para #: installation.xml:1241 #, no-c-format msgid "Enter the java/jdbc sub-directory of the PostGIS distribution." msgstr "" #. Tag: para #: installation.xml:1248 #, no-c-format msgid "Run the ant command. Copy the postgis.jar file to wherever you keep your java libraries." msgstr "" #. Tag: para #: installation.xml:1256 #, no-c-format msgid "The JDBC extensions require a PostgreSQL JDBC driver to be present in the current CLASSPATH during the build process. If the PostgreSQL JDBC driver is located elsewhere, you may pass the location of the JDBC driver JAR separately using the -D parameter like this:" msgstr "" #. Tag: programlisting #: installation.xml:1263 #, no-c-format msgid "# ant -Dclasspath=/path/to/postgresql-jdbc.jar" msgstr "" #. Tag: para #: installation.xml:1265 #, no-c-format msgid "PostgreSQL JDBC drivers can be downloaded from http://jdbc.postgresql.org ." msgstr "" #. Tag: title #: installation.xml:1275 #, no-c-format msgid "Loader/Dumper" msgstr "" #. Tag: para #: installation.xml:1277 #, no-c-format msgid "The data loader and dumper are built and installed automatically as part of the PostGIS build. To build and install them manually:" msgstr "" #. Tag: programlisting #: installation.xml:1282 #, no-c-format msgid "" "# cd postgis-&last_release_version;/loader\n" "# make\n" "# make install" msgstr "" #. Tag: para #: installation.xml:1284 #, no-c-format msgid "The loader is called shp2pgsql and converts ESRI Shape files into SQL suitable for loading in PostGIS/PostgreSQL. The dumper is called pgsql2shp and converts PostGIS tables (or queries) into ESRI Shape files. For more verbose documentation, see the online help, and the manual pages." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/faq_raster.xml.pot0000644000000000000000000004526312025614072022424 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: faq_raster.xml:3 #, no-c-format msgid "PostGIS Raster Frequently Asked Questions" msgstr "" #. Tag: para #: faq_raster.xml:9 #, no-c-format msgid "Where can I find out more about the PostGIS Raster Project?" msgstr "" #. Tag: para #: faq_raster.xml:13 #, no-c-format msgid "Refer to the PostGIS Raster home page." msgstr "" #. Tag: para #: faq_raster.xml:19 #, no-c-format msgid "Are there any books or tutorials to get me started with this wonderful invention?" msgstr "" #. Tag: para #: faq_raster.xml:23 #, no-c-format msgid "There is a full length beginner tutorial Intersecting vector buffers with large raster coverage using PostGIS Raster. Jorge has a series of blog articles on PostGIS Raster that demonstrate how to load raster data as well as cross compare to same tasks in Oracle GeoRaster. Check out Jorge's PostGIS Raster / Oracle GeoRaster Series. There is a whole chapter (more than 35 pages of content) dedicated to PostGIS Raster with free code and data downloads at PostGIS in Action - Raster chapter. You can buy PostGIS in Action now from Manning in hard-copy (significant discounts for bulk purchases) or just the E-book format. You can also buy from Amazon and various other book distributors. All hard-copy books come with a free coupon to download the E-book version." msgstr "" #. Tag: para #: faq_raster.xml:30 #, no-c-format msgid "Here is a review from a PostGIS Raster user PostGIS raster applied to land classification urban forestry" msgstr "" #. Tag: para #: faq_raster.xml:37 #, no-c-format msgid "How do I install Raster support in my PostGIS database?" msgstr "" #. Tag: para #: faq_raster.xml:41 #, no-c-format msgid "The easiest is to download binaries for PostGIS and Raster which are currently available for windows and latest versions of Mac OSX. First you need a working PostGIS 2.0.0 or above and be running PostgreSQL 8.4, 9.0, or 9.1. Note in PostGIS 2.0 PostGIS Raster is fully integrated, so it will be compiled when you compile PostGIS." msgstr "" #. Tag: para #: faq_raster.xml:43 #, no-c-format msgid "Instructions for installing and running under windows are available at How to Install and Configure PostGIS raster on windows" msgstr "" #. Tag: para #: faq_raster.xml:44 #, no-c-format msgid "If you are on windows, you can compile yourself, or use the pre-compiled PostGIS Raster windows binaries. If you are on Mac OSX Leopard or Snow Leopard, there are binaries available at Kyng Chaos Mac OSX PostgreSQL/GIS binaries." msgstr "" #. Tag: para #: faq_raster.xml:50 #, no-c-format msgid "Then to enable raster support in your database, run the rtpostgis.sql file in your database. To upgrade an existing install use rtpostgis_upgrade_minor..sql instead of rtpostgis.sql" msgstr "" #. Tag: para #: faq_raster.xml:51 #, no-c-format msgid "For other platforms, you generally need to compile yourself. Dependencies are PostGIS and GDAL. For more details about compiling from source, please refer to Installing PostGIS Raster from source (in prior versions of PostGIS)" msgstr "" #. Tag: para #: faq_raster.xml:57 #, no-c-format msgid "I get error could not load library \"C:/Program Files/PostgreSQL/8.4/lib/rtpostgis.dll\": The specified module could not be found. or could not load library on Linux when trying to run rtpostgis.sql" msgstr "" #. Tag: para #: faq_raster.xml:62 #, no-c-format msgid "rtpostgis.so/dll is built with dependency on libgdal.dll/so. Make sure for Windows you have libgdal-1.dll in the bin folder of your PostgreSQL install. For Linux libgdal has to be in your path or bin folder." msgstr "" #. Tag: para #: faq_raster.xml:64 #, no-c-format msgid "You may also run into different errors if you don't have PostGIS installed in your database. Make sure to install PostGIS first in your database before trying to install the raster support." msgstr "" #. Tag: para #: faq_raster.xml:71 #, no-c-format msgid "How do I load Raster data into PostGIS?" msgstr "" #. Tag: para #: faq_raster.xml:75 #, no-c-format msgid "The latest version of PostGIS comes packaged with a raster2pgsql raster loader executable capable of loading many kinds of rasters and also generating lower resolution overviews without any additional software. Please refer to for more details. Pre-2.0 versions came with a raster2pgsql.py that required python with numpy and GDAL. This is no longer needed." msgstr "" #. Tag: para #: faq_raster.xml:81 #, no-c-format msgid "What kind of raster file formats can I load into my database?" msgstr "" #. Tag: para #: faq_raster.xml:85 #, no-c-format msgid "Any that your GDAL library supports. GDAL supported formats are documented GDAL File Formats." msgstr "" #. Tag: para #: faq_raster.xml:86 #, no-c-format msgid "Your particular GDAL install may not support all formats. To verify the ones supported by your particular GDAL install, you can use" msgstr "" #. Tag: programlisting #: faq_raster.xml:87 #, no-c-format msgid "raster2pgsql -G" msgstr "" #. Tag: para #: faq_raster.xml:93 #, no-c-format msgid "Can I export my PostGIS raster data to other raster formats?" msgstr "" #. Tag: para #: faq_raster.xml:97 #, no-c-format msgid "Yes" msgstr "" #. Tag: para #: faq_raster.xml:98 #, no-c-format msgid "GDAL 1.7+ has a PostGIS raster driver, but is only compiled in if you choose to compile with PostgreSQL support." msgstr "" #. Tag: para #: faq_raster.xml:99 #, no-c-format msgid "The driver currently doesn't support irregularly blocked rasters, although you can store irregularly blocked rasters in PostGIS raster data type." msgstr "" #. Tag: para #: faq_raster.xml:101 #, no-c-format msgid "If you are compiling from source, you need to include in your configure --with-pg=path/to/pg_config to enable the driver. Refer to GDAL Build Hints for tips on building GDAL against in various OS platforms." msgstr "" #. Tag: para #: faq_raster.xml:106 #, no-c-format msgid "If your version of GDAL is compiled with the PostGIS Raster driver you should see PostGIS Raster in list when you do" msgstr "" #. Tag: programlisting #: faq_raster.xml:108 #, no-c-format msgid "gdalinfo --formats" msgstr "" #. Tag: para #: faq_raster.xml:110 #, no-c-format msgid "To get a summary about your raster via GDAL use gdalinfo:" msgstr "" #. Tag: programlisting #: faq_raster.xml:111 #, no-c-format msgid "gdalinfo \"PG:host=localhost port=5432 dbname='mygisdb' user='postgres' password='whatever' schema='someschema' table=sometable\"" msgstr "" #. Tag: para #: faq_raster.xml:114 #, no-c-format msgid "To export data to other raster formats, use gdal_translate the below will export all data from a table to a PNG file at 10% size." msgstr "" #. Tag: para #: faq_raster.xml:116 #, no-c-format msgid "Depending on your pixel band types, some translations may not work if the export format does not support that Pixel type. For example floating point band types and 32 bit unsigned ints will not translate easily to JPG or some others." msgstr "" #. Tag: para #: faq_raster.xml:119 #, no-c-format msgid "Here is an example simple translation" msgstr "" #. Tag: programlisting #: faq_raster.xml:120 #, no-c-format msgid "gdal_translate -of PNG -outsize 10% 10% \"PG:host=localhost dbname='mygisdb' user='postgres' password=whatever' schema='someschema' table=sometable\" C:\\somefile.png" msgstr "" #. Tag: para #: faq_raster.xml:121 #, no-c-format msgid "You can also use SQL where clauses in your export using the where=... in your driver connection string. Below are some using a where clause" msgstr "" #. Tag: programlisting #: faq_raster.xml:123 #, no-c-format msgid "gdal_translate -of PNG -outsize 10% 10% \"PG:host=localhost dbname='mygisdb' user='postgres' password=whatever' schema='someschema' table=sometable where=\"owner='jimmy'\" \" C:\\somefile.png" msgstr "" #. Tag: programlisting #: faq_raster.xml:124 #, no-c-format msgid "gdal_translate -of PNG -outsize 10% 10% \"PG:host=localhost dbname='mygisdb' user='postgres' password=whatever' schema='someschema' table=sometable where='ST_Intersects(rast, ST_SetSRID(ST_Point(-71.032,42.3793),4326) )' \" C:\\intersectregion.png" msgstr "" #. Tag: para #: faq_raster.xml:125 #, no-c-format msgid "To see more examples and syntax refer to Reading Raster Data of PostGIS Raster section" msgstr "" #. Tag: para #: faq_raster.xml:130 #, no-c-format msgid "Are their binaries of GDAL available already compiled with PostGIS Raster suppport?" msgstr "" #. Tag: para #: faq_raster.xml:132 #, no-c-format msgid "Yes. Check out the page GDAL Binaries page. Any compiled with PostgreSQL support should have PostGIS Raster in them." msgstr "" #. Tag: para #: faq_raster.xml:134 #, no-c-format msgid "We know for sure the following windows binaries have PostGIS Raster built in." msgstr "" #. Tag: para #: faq_raster.xml:135 #, no-c-format msgid "FWTools latest stable version for Windows is compiled with Raster support." msgstr "" #. Tag: para #: faq_raster.xml:136 #, no-c-format msgid "PostGIS Raster is undergoing many changes. If you want to get the latest nightly build for Windows -- then check out the Tamas Szekeres nightly builds built with Visual Studio which contain GDAL trunk, Python Bindings and MapServer executables and PostGIS Raster driver built-in. Just click the SDK bat and run your commands from there. http://vbkto.dyndns.org/sdk/. Also available are VS project files." msgstr "" #. Tag: para #: faq_raster.xml:145 #, no-c-format msgid "What tools can I use to view PostGIS raster data?" msgstr "" #. Tag: para #: faq_raster.xml:149 #, no-c-format msgid "You can use MapServer compiled with GDAL 1.7+ and PostGIS Raster driver support to view Raster data. QuantumGIS (QGIS) now supports viewing of PostGIS Raster if you have PostGIS raster driver installed." msgstr "" #. Tag: para #: faq_raster.xml:151 #, no-c-format msgid "In theory any tool that renders data using GDAL can support PostGIS raster data or support it with fairly minimal effort. Again for Windows, Tamas' binaries http://vbkto.dyndns.org/sdk/ are a good choice if you don't want the hassle of having to setup to compile your own." msgstr "" #. Tag: para #: faq_raster.xml:158 #, no-c-format msgid "How can I add a PostGIS raster layer to my MapServer map?" msgstr "" #. Tag: para #: faq_raster.xml:162 #, no-c-format msgid "First you need GDAL 1.7 or higher compiled with PostGIS raster support. GDAL 1.8 or above is preferred since many issues have been fixed in 1.8 and more PostGIS raster issues fixed in trunk version." msgstr "" #. Tag: para #: faq_raster.xml:164 #, no-c-format msgid "You can much like you can with any other raster. Refer to MapServer Raster processing options for list of various processing functions you can use with MapServer raster layers." msgstr "" #. Tag: para #: faq_raster.xml:167 #, no-c-format msgid "What makes PostGIS raster data particularly interesting, is that since each tile can have various standard database columns, you can segment it in your data source" msgstr "" #. Tag: para #: faq_raster.xml:169 #, no-c-format msgid "Below is an example of how you would define a PostGIS raster layer in MapServer." msgstr "" #. Tag: para #: faq_raster.xml:170 #, no-c-format msgid "The mode=2 is required for tiled rasters and was added in PostGIS 2.0 and GDAL 1.8 drivers. This does not exist in GDAL 1.7 drivers." msgstr "" #. Tag: programlisting #: faq_raster.xml:171 #, no-c-format msgid "" "-- displaying raster with standard raster options\n" "LAYER\n" " NAME coolwktraster\n" " TYPE raster\n" " STATUS ON\n" " DATA \"PG:host=localhost port=5432 dbname='somedb' user='someuser' password='whatever' \n" " schema='someschema' table='cooltable' mode='2'\" \n" " PROCESSING \"NODATA=0\"\n" " PROCESSING \"SCALE=AUTO\"\n" " #... other standard raster processing functions here\n" " #... classes are optional but useful for 1 band data\n" " CLASS\n" " NAME \"boring\"\n" " EXPRESSION ([pixel] < 20)\n" " COLOR 250 250 250\n" " END\n" " CLASS\n" " NAME \"mildly interesting\"\n" " EXPRESSION ([pixel] > 20 AND [pixel] < 1000)\n" " COLOR 255 0 0\n" " END\n" " CLASS\n" " NAME \"very interesting\"\n" " EXPRESSION ([pixel] >= 1000)\n" " COLOR 0 255 0\n" " END\n" "END" msgstr "" #. Tag: programlisting #: faq_raster.xml:173 #, no-c-format msgid "" "-- displaying raster with standard raster options and a where clause\n" "LAYER\n" " NAME soil_survey2009\n" " TYPE raster\n" " STATUS ON\n" " DATA \"PG:host=localhost port=5432 dbname='somedb' user='someuser' password='whatever' \n" " schema='someschema' table='cooltable' where='survey_year=2009' mode='2'\" \n" " PROCESSING \"NODATA=0\"\n" " #... other standard raster processing functions here\n" " #... classes are optional but useful for 1 band data\n" "END" msgstr "" #. Tag: para #: faq_raster.xml:181 #, no-c-format msgid "What functions can I currently use with my raster data?" msgstr "" #. Tag: para #: faq_raster.xml:185 #, no-c-format msgid "Refer to the list of . There are more, but this is still a work in progress." msgstr "" #. Tag: para #: faq_raster.xml:187 #, no-c-format msgid "Refer to the PostGIS Raster roadmap page for details of what you can expect in the future." msgstr "" #. Tag: para #: faq_raster.xml:195 #, no-c-format msgid "I am getting error ERROR: function st_intersects(raster, unknown) is not unique or st_union(geometry,text) is not unique. How do I fix?" msgstr "" #. Tag: para #: faq_raster.xml:199 #, no-c-format msgid "The function is not unique error happens if one of your arguments is a textual representation of a geometry instead of a geometry. In these cases, PostgreSQL marks the textual representation as an unknown type, which means it can fall into the st_intersects(raster, geometry) or st_intersects(raster,raster) thus resulting in a non-unique case since both functions can in theory support your request. To prevent this, you need to cast the geometry to a geometry." msgstr "" #. Tag: para #: faq_raster.xml:200 #, no-c-format msgid "For example if your code looks like this:" msgstr "" #. Tag: programlisting #: faq_raster.xml:201 #, no-c-format msgid "" "SELECT rast\n" " FROM my_raster\n" " WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)');" msgstr "" #. Tag: para #: faq_raster.xml:202 #, no-c-format msgid "Cast the textual geometry representation to a geometry by changing your code to this:" msgstr "" #. Tag: programlisting #: faq_raster.xml:203 #, no-c-format msgid "" "SELECT rast\n" " FROM my_raster\n" " WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)'::geometry);" msgstr "" #. Tag: para #: faq_raster.xml:211 #, no-c-format msgid "How is PostGIS Raster different from Oracle GeoRaster (SDO_GEORASTER) and SDO_RASTER types?" msgstr "" #. Tag: para #: faq_raster.xml:215 #, no-c-format msgid "For a more extensive discussion on this topic, check out Jorge Arévalo Oracle GeoRaster and PostGIS Raster: First impressions " msgstr "" #. Tag: para #: faq_raster.xml:216 #, no-c-format msgid "The major advantage of one-georeference-by-raster over one-georeference-by-layer is to allow:" msgstr "" #. Tag: para #: faq_raster.xml:217 #, no-c-format msgid "* coverages to be not necessarily rectangular (which is often the case of raster coverage covering large extents. See the possible raster arrangements in the documentation)" msgstr "" #. Tag: para #: faq_raster.xml:218 #, no-c-format msgid "* rasters to overlaps (which is necessary to implement lossless vector to raster conversion)" msgstr "" #. Tag: para #: faq_raster.xml:219 #, no-c-format msgid "These arrangements are possible in Oracle as well, but they imply the storage of multiple SDO_GEORASTER objects linked to as many SDO_RASTER tables. A complex coverage can lead to hundreds of tables in the database. With PostGIS Raster you can store a similar raster arrangement into a unique table." msgstr "" #. Tag: para #: faq_raster.xml:224 #, no-c-format msgid "It's a bit like if PostGIS would force you to store only full rectangular vector coverage without gaps or overlaps (a perfect rectangular topological layer). This is very practical in some applications but practice has shown that it is not realistic or desirable for most geographical coverages. Vector structures needs the flexibility to store discontinuous and non-rectangular coverages. We think it is a big advantage that raster structure should benefit as well." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/performance_tips.xml.pot0000644000000000000000000003150112025614072023623 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: performance_tips.xml:3 #, no-c-format msgid "Performance tips" msgstr "" #. Tag: title #: performance_tips.xml:6 #, no-c-format msgid "Small tables of large geometries" msgstr "" #. Tag: title #: performance_tips.xml:9 #, no-c-format msgid "Problem description" msgstr "" #. Tag: para #: performance_tips.xml:11 #, no-c-format msgid "Current PostgreSQL versions (including 8.0) suffer from a query optimizer weakness regarding TOAST tables. TOAST tables are a kind of \"extension room\" used to store large (in the sense of data size) values that do not fit into normal data pages (like long texts, images or complex geometries with lots of vertices), see the PostgreSQL Documentation for TOAST for more information)." msgstr "" #. Tag: para #: performance_tips.xml:19 #, no-c-format msgid "The problem appears if you happen to have a table with rather large geometries, but not too much rows of them (like a table containing the boundaries of all European countries in high resolution). Then the table itself is small, but it uses lots of TOAST space. In our example case, the table itself had about 80 rows and used only 3 data pages, but the TOAST table used 8225 pages." msgstr "" #. Tag: para #: performance_tips.xml:26 #, no-c-format msgid "Now issue a query where you use the geometry operator && to search for a bounding box that matches only very few of those rows. Now the query optimizer sees that the table has only 3 pages and 80 rows. He estimates that a sequential scan on such a small table is much faster than using an index. And so he decides to ignore the GIST index. Usually, this estimation is correct. But in our case, the && operator has to fetch every geometry from disk to compare the bounding boxes, thus reading all TOAST pages, too." msgstr "" #. Tag: para #: performance_tips.xml:35 #, no-c-format msgid "To see whether your suffer from this bug, use the \"EXPLAIN ANALYZE\" postgresql command. For more information and the technical details, you can read the thread on the postgres performance mailing list: http://archives.postgresql.org/pgsql-performance/2005-02/msg00030.php" msgstr "" #. Tag: title #: performance_tips.xml:43 #, no-c-format msgid "Workarounds" msgstr "" #. Tag: para #: performance_tips.xml:45 #, no-c-format msgid "The PostgreSQL people are trying to solve this issue by making the query estimation TOAST-aware. For now, here are two workarounds:" msgstr "" #. Tag: para #: performance_tips.xml:48 #, no-c-format msgid "The first workaround is to force the query planner to use the index. Send \"SET enable_seqscan TO off;\" to the server before issuing the query. This basically forces the query planner to avoid sequential scans whenever possible. So it uses the GIST index as usual. But this flag has to be set on every connection, and it causes the query planner to make misestimations in other cases, so you should \"SET enable_seqscan TO on;\" after the query." msgstr "" #. Tag: para #: performance_tips.xml:56 #, no-c-format msgid "The second workaround is to make the sequential scan as fast as the query planner thinks. This can be achieved by creating an additional column that \"caches\" the bbox, and matching against this. In our example, the commands are like:" msgstr "" #. Tag: programlisting #: performance_tips.xml:61 #, no-c-format msgid "" "SELECT AddGeometryColumn('myschema','mytable','bbox','4326','GEOMETRY','2'); \n" "UPDATE mytable SET bbox = ST_Envelope(ST_Force_2d(the_geom));" msgstr "" #. Tag: para #: performance_tips.xml:63 #, no-c-format msgid "Now change your query to use the && operator against bbox instead of geom_column, like:" msgstr "" #. Tag: programlisting #: performance_tips.xml:66 #, no-c-format msgid "" "SELECT geom_column \n" "FROM mytable \n" "WHERE bbox && ST_SetSRID('BOX3D(0 0,1 1)'::box3d,4326);" msgstr "" #. Tag: para #: performance_tips.xml:68 #, no-c-format msgid "Of course, if you change or add rows to mytable, you have to keep the bbox \"in sync\". The most transparent way to do this would be triggers, but you also can modify your application to keep the bbox column current or run the UPDATE query above after every modification." msgstr "" #. Tag: title #: performance_tips.xml:77 #, no-c-format msgid "CLUSTERing on geometry indices" msgstr "" #. Tag: para #: performance_tips.xml:79 #, no-c-format msgid "For tables that are mostly read-only, and where a single index is used for the majority of queries, PostgreSQL offers the CLUSTER command. This command physically reorders all the data rows in the same order as the index criteria, yielding two performance advantages: First, for index range scans, the number of seeks on the data table is drastically reduced. Second, if your working set concentrates to some small intervals on the indices, you have a more efficient caching because the data rows are spread along fewer data pages. (Feel invited to read the CLUSTER command documentation from the PostgreSQL manual at this point.)" msgstr "" #. Tag: para #: performance_tips.xml:89 #, no-c-format msgid "However, currently PostgreSQL does not allow clustering on PostGIS GIST indices because GIST indices simply ignores NULL values, you get an error message like:" msgstr "" #. Tag: programlisting #: performance_tips.xml:93 #, no-c-format msgid "" "lwgeom=# CLUSTER my_geom_index ON my_table; \n" "ERROR: cannot cluster when index access method does not handle null values\n" "HINT: You may be able to work around this by marking column \"the_geom\" NOT NULL." msgstr "" #. Tag: para #: performance_tips.xml:95 #, no-c-format msgid "As the HINT message tells you, one can work around this deficiency by adding a \"not null\" constraint to the table:" msgstr "" #. Tag: programlisting #: performance_tips.xml:98 #, no-c-format msgid "" "lwgeom=# ALTER TABLE my_table ALTER COLUMN the_geom SET not null; \n" "ALTER TABLE" msgstr "" #. Tag: para #: performance_tips.xml:100 #, no-c-format msgid "Of course, this will not work if you in fact need NULL values in your geometry column. Additionally, you must use the above method to add the constraint, using a CHECK constraint like \"ALTER TABLE blubb ADD CHECK (geometry is not null);\" will not work." msgstr "" #. Tag: title #: performance_tips.xml:107 #, no-c-format msgid "Avoiding dimension conversion" msgstr "" #. Tag: para #: performance_tips.xml:109 #, no-c-format msgid "Sometimes, you happen to have 3D or 4D data in your table, but always access it using OpenGIS compliant ST_AsText() or ST_AsBinary() functions that only output 2D geometries. They do this by internally calling the ST_Force_2d() function, which introduces a significant overhead for large geometries. To avoid this overhead, it may be feasible to pre-drop those additional dimensions once and forever:" msgstr "" #. Tag: programlisting #: performance_tips.xml:116 #, no-c-format msgid "" "UPDATE mytable SET the_geom = ST_Force_2d(the_geom); \n" "VACUUM FULL ANALYZE mytable;" msgstr "" #. Tag: para #: performance_tips.xml:118 #, no-c-format msgid "Note that if you added your geometry column using AddGeometryColumn() there'll be a constraint on geometry dimension. To bypass it you will need to drop the constraint. Remember to update the entry in the geometry_columns table and recreate the constraint afterwards." msgstr "" #. Tag: para #: performance_tips.xml:124 #, no-c-format msgid "In case of large tables, it may be wise to divide this UPDATE into smaller portions by constraining the UPDATE to a part of the table via a WHERE clause and your primary key or another feasible criteria, and running a simple \"VACUUM;\" between your UPDATEs. This drastically reduces the need for temporary disk space. Additionally, if you have mixed dimension geometries, restricting the UPDATE by \"WHERE dimension(the_geom)>2\" skips re-writing of geometries that already are in 2D." msgstr "" #. Tag: title #: performance_tips.xml:136 #, no-c-format msgid "Tuning your configuration" msgstr "" #. Tag: para #: performance_tips.xml:138 #, no-c-format msgid "These tips are taken from Kevin Neufeld's presentation \"Tips for the PostGIS Power User\" at the FOSS4G 2007 conference. Depending on your use of PostGIS (for example, static data and complex analysis vs frequently updated data and lots of users) these changes can provide significant speedups to your queries." msgstr "" #. Tag: para #: performance_tips.xml:144 #, no-c-format msgid "For a more tips (and better formatting), the original presentation is at http://2007.foss4g.org/presentations/view.php?abstract_id=117." msgstr "" #. Tag: title #: performance_tips.xml:151 #, no-c-format msgid "Startup" msgstr "" #. Tag: para #: performance_tips.xml:153 #, no-c-format msgid "These settings are configured in postgresql.conf:" msgstr "" #. Tag: ulink #: performance_tips.xml:158 #, no-c-format msgid "checkpoint_segments" msgstr "" #. Tag: para #: performance_tips.xml:163 #, no-c-format msgid "Maximum number of log file segments between automatic WAL checkpoints (each segment is normally 16MB); default is 3" msgstr "" #. Tag: para #: performance_tips.xml:169 #, no-c-format msgid "Set to at least 10 or 30 for databases with heavy write activity, or more for large database loads. Another article on the topic worth reading Greg Smith: Checkpoint and Background writer" msgstr "" #. Tag: para #: performance_tips.xml:175 #, no-c-format msgid "Possibly store the xlog on a separate disk device" msgstr "" #. Tag: ulink #: performance_tips.xml:182 #, no-c-format msgid "constraint_exclusion" msgstr "" #. Tag: para #: performance_tips.xml:187 #, no-c-format msgid "Default: off (prior to PostgreSQL 8.4 and for PostgreSQL 8.4+ is set to partition)" msgstr "" #. Tag: para #: performance_tips.xml:192 #, no-c-format msgid "This is generally used for table partitioning. If you are running PostgreSQL versions below 8.4, set to \"on\" to ensure the query planner will optimize as desired. As of PostgreSQL 8.4, the default for this is set to \"partition\" which is ideal for PostgreSQL 8.4 and above since it will force the planner to only analyze tables for constraint consideration if they are in an inherited hierarchy and not pay the planner penalty otherwise." msgstr "" #. Tag: ulink #: performance_tips.xml:202 #, no-c-format msgid "shared_buffers" msgstr "" #. Tag: para #: performance_tips.xml:207 #, no-c-format msgid "Default: ~32MB" msgstr "" #. Tag: para #: performance_tips.xml:212 #, no-c-format msgid "Set to about 1/3 to 3/4 of available RAM" msgstr "" #. Tag: title #: performance_tips.xml:220 #, no-c-format msgid "Runtime" msgstr "" #. Tag: para #: performance_tips.xml:222 #, no-c-format msgid "work_mem (the memory used for sort operations and complex queries)" msgstr "" #. Tag: para #: performance_tips.xml:228 #, no-c-format msgid "Default: 1MB" msgstr "" #. Tag: para #: performance_tips.xml:233 #, no-c-format msgid "Adjust up for large dbs, complex queries, lots of RAM" msgstr "" #. Tag: para #: performance_tips.xml:238 #, no-c-format msgid "Adjust down for many concurrent users or low RAM." msgstr "" #. Tag: para #: performance_tips.xml:243 #, no-c-format msgid "If you have lots of RAM and few developers:" msgstr "" #. Tag: programlisting #: performance_tips.xml:245 #, no-c-format msgid "SET work_mem TO 1200000;" msgstr "" #. Tag: para #: performance_tips.xml:250 #, no-c-format msgid "maintenance_work_mem (used for VACUUM, CREATE INDEX, etc.)" msgstr "" #. Tag: para #: performance_tips.xml:256 #, no-c-format msgid "Default: 16MB" msgstr "" #. Tag: para #: performance_tips.xml:261 #, no-c-format msgid "Generally too low - ties up I/O, locks objects while swapping memory" msgstr "" #. Tag: para #: performance_tips.xml:266 #, no-c-format msgid "Recommend 32MB to 256MB on production servers w/lots of RAM, but depends on the # of concurrent users. If you have lots of RAM and few developers:" msgstr "" #. Tag: programlisting #: performance_tips.xml:269 #, no-c-format msgid "SET maintainence_work_mem TO 1200000;" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/using_postgis_dataman.xml.pot0000644000000000000000000033025012025614072024650 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: using_postgis_dataman.xml:3 #, no-c-format msgid "Using PostGIS: Data Management and Queries" msgstr "" #. Tag: title #: using_postgis_dataman.xml:6 #, no-c-format msgid "GIS Objects" msgstr "" #. Tag: para #: using_postgis_dataman.xml:8 #, no-c-format msgid "The GIS objects supported by PostGIS are a superset of the \"Simple Features\" defined by the OpenGIS Consortium (OGC). As of version 0.9, PostGIS supports all the objects and functions specified in the OGC \"Simple Features for SQL\" specification." msgstr "" #. Tag: para #: using_postgis_dataman.xml:13 #, no-c-format msgid "PostGIS extends the standard with support for 3DZ,3DM and 4D coordinates." msgstr "" #. Tag: title #: using_postgis_dataman.xml:17 #, no-c-format msgid "OpenGIS WKB and WKT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:19 #, no-c-format msgid "The OpenGIS specification defines two standard ways of expressing spatial objects: the Well-Known Text (WKT) form and the Well-Known Binary (WKB) form. Both WKT and WKB include information about the type of the object and the coordinates which form the object." msgstr "" #. Tag: para #: using_postgis_dataman.xml:24 #, no-c-format msgid "Examples of the text representations (WKT) of the spatial objects of the features are as follows:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:29 #, no-c-format msgid "POINT(0 0)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:33 #, no-c-format msgid "LINESTRING(0 0,1 1,1 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:37 #, no-c-format msgid "POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:41 #, no-c-format msgid "MULTIPOINT(0 0,1 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:45 #, no-c-format msgid "MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:49 #, no-c-format msgid "MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:54 #, no-c-format msgid "GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:58 #, no-c-format msgid "The OpenGIS specification also requires that the internal storage format of spatial objects include a spatial referencing system identifier (SRID). The SRID is required when creating spatial objects for insertion into the database." msgstr "" #. Tag: para #: using_postgis_dataman.xml:63 using_postgis_dataman.xml:151 #, no-c-format msgid "Input/Output of these formats are available using the following interfaces:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:66 #, no-c-format msgid "" "bytea WKB = ST_AsBinary(geometry);\n" "text WKT = ST_AsText(geometry);\n" "geometry = ST_GeomFromWKB(bytea WKB, SRID);\n" "geometry = ST_GeometryFromText(text WKT, SRID);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:68 #, no-c-format msgid "For example, a valid insert statement to create and insert an OGC spatial object would be:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:71 #, no-c-format msgid "" "INSERT INTO geotable ( the_geom, the_name )\n" " VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');" msgstr "" #. Tag: title #: using_postgis_dataman.xml:75 #, no-c-format msgid "PostGIS EWKB, EWKT and Canonical Forms" msgstr "" #. Tag: para #: using_postgis_dataman.xml:77 #, no-c-format msgid "OGC formats only support 2d geometries, and the associated SRID is *never* embedded in the input/output representations." msgstr "" #. Tag: para #: using_postgis_dataman.xml:80 #, no-c-format msgid "PostGIS extended formats are currently superset of OGC one (every valid WKB/WKT is a valid EWKB/EWKT) but this might vary in the future, specifically if OGC comes out with a new format conflicting with our extensions. Thus you SHOULD NOT rely on this feature!" msgstr "" #. Tag: para #: using_postgis_dataman.xml:85 #, no-c-format msgid "PostGIS EWKB/EWKT add 3dm,3dz,4d coordinates support and embedded SRID information." msgstr "" #. Tag: para #: using_postgis_dataman.xml:88 #, no-c-format msgid "Examples of the text representations (EWKT) of the extended spatial objects of the features are as follows. The * ones are new in this version of PostGIS:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:93 #, no-c-format msgid "POINT(0 0 0) -- XYZ" msgstr "" #. Tag: para #: using_postgis_dataman.xml:97 #, no-c-format msgid "SRID=32632;POINT(0 0) -- XY with SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:101 #, no-c-format msgid "POINTM(0 0 0) -- XYM" msgstr "" #. Tag: para #: using_postgis_dataman.xml:105 #, no-c-format msgid "POINT(0 0 0 0) -- XYZM" msgstr "" #. Tag: para #: using_postgis_dataman.xml:109 #, no-c-format msgid "SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM with SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:113 #, no-c-format msgid "MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:118 #, no-c-format msgid "POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:123 #, no-c-format msgid "MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:128 #, no-c-format msgid "GEOMETRYCOLLECTIONM( POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:132 #, no-c-format msgid "MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:136 #, no-c-format msgid "POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:142 #, no-c-format msgid "TRIANGLE ((0 0, 0 9, 9 0, 0 0))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:146 #, no-c-format msgid "TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:154 #, no-c-format msgid "" "bytea EWKB = ST_AsEWKB(geometry);\n" "text EWKT = ST_AsEWKT(geometry);\n" "geometry = ST_GeomFromEWKB(bytea EWKB);\n" "geometry = ST_GeomFromEWKT(text EWKT);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:156 #, no-c-format msgid "For example, a valid insert statement to create and insert a PostGIS spatial object would be:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:159 #, no-c-format msgid "" "INSERT INTO geotable ( the_geom, the_name )\n" " VALUES ( ST_GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:161 #, no-c-format msgid "The \"canonical forms\" of a PostgreSQL type are the representations you get with a simple query (without any function call) and the one which is guaranteed to be accepted with a simple insert, update or copy. For the postgis 'geometry' type these are:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:164 #, no-c-format msgid "" "- Output\n" " - binary: EWKB\n" " ascii: HEXEWKB (EWKB in hex form)\n" "- Input\n" " - binary: EWKB\n" " ascii: HEXEWKB|EWKT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:166 #, no-c-format msgid "For example this statement reads EWKT and returns HEXEWKB in the process of canonical ascii input/output:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:169 #, no-c-format msgid "" "=# SELECT 'SRID=4;POINT(0 0)'::geometry;\n" "\n" "geometry\n" "----------------------------------------------------\n" "01010000200400000000000000000000000000000000000000\n" "(1 row)" msgstr "" #. Tag: title #: using_postgis_dataman.xml:172 #, no-c-format msgid "SQL-MM Part 3" msgstr "" #. Tag: para #: using_postgis_dataman.xml:174 #, no-c-format msgid "The SQL Multimedia Applications Spatial specification extends the simple features for SQL spec by defining a number of circularly interpolated curves." msgstr "" #. Tag: para #: using_postgis_dataman.xml:178 #, no-c-format msgid "The SQL-MM definitions include 3dm, 3dz and 4d coordinates, but do not allow the embedding of SRID information." msgstr "" #. Tag: para #: using_postgis_dataman.xml:181 #, no-c-format msgid "The well-known text extensions are not yet fully supported. Examples of some simple curved geometries are shown below:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:186 #, no-c-format msgid "CIRCULARSTRING(0 0, 1 1, 1 0)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:187 #, no-c-format msgid "CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:188 #, no-c-format msgid "The CIRCULARSTRING is the basic curve type, similar to a LINESTRING in the linear world. A single segment required three points, the start and end points (first and third) and any other point on the arc. The exception to this is for a closed circle, where the start and end points are the same. In this case the second point MUST be the center of the arc, ie the opposite side of the circle. To chain arcs together, the last point of the previous arc becomes the first point of the next arc, just like in LINESTRING. This means that a valid circular string must have an odd number of points greated than 1." msgstr "" #. Tag: para #: using_postgis_dataman.xml:201 #, no-c-format msgid "COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:202 #, no-c-format msgid "A compound curve is a single, continuous curve that has both curved (circular) segments and linear segments. That means that in addition to having well-formed components, the end point of every component (except the last) must be coincident with the start point of the following component." msgstr "" #. Tag: para #: using_postgis_dataman.xml:210 #, no-c-format msgid "CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:212 #, no-c-format msgid "Example compound curve in a curve polygon: CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:216 #, no-c-format msgid "A CURVEPOLYGON is just like a polygon, with an outer ring and zero or more inner rings. The difference is that a ring can take the form of a circular string, linear string or compound string." msgstr "" #. Tag: para #: using_postgis_dataman.xml:220 #, no-c-format msgid "As of PostGIS 1.4 PostGIS supports compound curves in a curve polygon." msgstr "" #. Tag: para #: using_postgis_dataman.xml:224 #, no-c-format msgid "MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:225 #, no-c-format msgid "The MULTICURVE is a collection of curves, which can include linear strings, circular strings or compound strings." msgstr "" #. Tag: para #: using_postgis_dataman.xml:230 #, no-c-format msgid "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11)))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:233 #, no-c-format msgid "This is a collection of surfaces, which can be (linear) polygons or curve polygons." msgstr "" #. Tag: para #: using_postgis_dataman.xml:239 #, no-c-format msgid "PostGIS prior to 1.4 does not support compound curves in a curve polygon, but PostGIS 1.4 and above do support the use of Compound Curves in a Curve Polygon." msgstr "" #. Tag: para #: using_postgis_dataman.xml:245 #, no-c-format msgid "All floating point comparisons within the SQL-MM implementation are performed to a specified tolerance, currently 1E-8." msgstr "" #. Tag: title #: using_postgis_dataman.xml:251 #, no-c-format msgid "PostGIS Geography Type" msgstr "" #. Tag: para #: using_postgis_dataman.xml:253 #, no-c-format msgid "The geography type provides native support for spatial features represented on \"geographic\" coordinates (sometimes called \"geodetic\" coordinates, or \"lat/lon\", or \"lon/lat\"). Geographic coordinates are spherical coordinates expressed in angular units (degrees)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:255 #, no-c-format msgid "The basis for the PostGIS geometry type is a plane. The shortest path between two points on the plane is a straight line. That means calculations on geometries (areas, distances, lengths, intersections, etc) can be calculated using cartesian mathematics and straight line vectors." msgstr "" #. Tag: para #: using_postgis_dataman.xml:257 #, no-c-format msgid "The basis for the PostGIS geographic type is a sphere. The shortest path between two points on the sphere is a great circle arc. That means that calculations on geographies (areas, distances, lengths, intersections, etc) must be calculated on the sphere, using more complicated mathematics. For more accurate measurements, the calculations must take the actual spheroidal shape of the world into account, and the mathematics becomes very complicated indeed." msgstr "" #. Tag: para #: using_postgis_dataman.xml:259 #, no-c-format msgid "Because the underlying mathematics is much more complicated, there are fewer functions defined for the geography type than for the geometry type. Over time, as new algorithms are added, the capabilities of the geography type will expand." msgstr "" #. Tag: para #: using_postgis_dataman.xml:262 #, no-c-format msgid "One restriction is that it only supports WGS 84 long lat (SRID:4326). It uses a new data type called geography. None of the GEOS functions support this new type. As a workaround one can convert back and forth between geometry and geography types." msgstr "" #. Tag: para #: using_postgis_dataman.xml:266 #, no-c-format msgid "The new geography type uses the PostgreSQL 8.3+ typmod definition format so that a table with a geography field can be added in a single step. All the standard OGC formats except for curves are supported." msgstr "" #. Tag: title #: using_postgis_dataman.xml:270 #, no-c-format msgid "Geography Basics" msgstr "" #. Tag: para #: using_postgis_dataman.xml:271 #, no-c-format msgid "The geography type only supports the simplest of simple features. Standard geometry type data will autocast to geography if it is of SRID 4326. You can also use the EWKT and EWKB conventions to insert data." msgstr "" #. Tag: para #: using_postgis_dataman.xml:276 #, no-c-format msgid "POINT: Creating a table with 2d point geometry:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:277 #, no-c-format msgid "CREATE TABLE testgeog(gid serial PRIMARY KEY, the_geog geography(POINT,4326) );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:278 #, no-c-format msgid "Creating a table with z coordinate point" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:279 #, no-c-format msgid "CREATE TABLE testgeog(gid serial PRIMARY KEY, the_geog geography(POINTZ,4326) );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:282 #, no-c-format msgid "LINESTRING" msgstr "" #. Tag: para #: using_postgis_dataman.xml:285 #, no-c-format msgid "POLYGON" msgstr "" #. Tag: para #: using_postgis_dataman.xml:288 #, no-c-format msgid "MULTIPOINT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:291 #, no-c-format msgid "MULTILINESTRING" msgstr "" #. Tag: para #: using_postgis_dataman.xml:294 #, no-c-format msgid "MULTIPOLYGON" msgstr "" #. Tag: para #: using_postgis_dataman.xml:297 #, no-c-format msgid "GEOMETRYCOLLECTION" msgstr "" #. Tag: para #: using_postgis_dataman.xml:301 #, no-c-format msgid "The new geography fields don't get registered in the geometry_columns. They get registered in a new view called geography_columns which is a view against the system catalogs so is always automatically kept up to date without need for an AddGeom... like function." msgstr "" #. Tag: para #: using_postgis_dataman.xml:305 #, no-c-format msgid "Now, check the \"geography_columns\" view and see that your table is listed." msgstr "" #. Tag: para #: using_postgis_dataman.xml:307 #, no-c-format msgid "You can create a new table with a GEOGRAPHY column using the CREATE TABLE syntax. Unlike GEOMETRY, there is no need to run a separate AddGeometryColumns() process to register the column in metadata." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:311 #, no-c-format msgid "" "CREATE TABLE global_points ( \n" " id SERIAL PRIMARY KEY,\n" " name VARCHAR(64),\n" " location GEOGRAPHY(POINT,4326)\n" " );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:314 #, no-c-format msgid "Note that the location column has type GEOGRAPHY and that geography type supports two optional modifier: a type modifier that restricts the kind of shapes and dimensions allowed in the column; an SRID modifier that restricts the coordinate reference identifier to a particular number." msgstr "" #. Tag: para #: using_postgis_dataman.xml:315 #, no-c-format msgid "Allowable values for the type modifier are: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON. The modifier also supports dimensionality restrictions through suffixes: Z, M and ZM. So, for example a modifier of 'LINESTRINGM' would only allow line strings with three dimensions in, and would treat the third dimension as a measure. Similarly, 'POINTZM' would expect four dimensional data." msgstr "" #. Tag: para #: using_postgis_dataman.xml:317 #, no-c-format msgid "The SRID modifier is currently of limited use: only 4326 (WGS84) is allowed as a value. If you do not specify an SRID, the a value 0 (undefined spheroid) will be used, and all calculations will proceed using WGS84 anyways." msgstr "" #. Tag: para #: using_postgis_dataman.xml:318 #, no-c-format msgid "In the future, alternate SRIDs will allow calculations on spheroids other than WGS84." msgstr "" #. Tag: para #: using_postgis_dataman.xml:319 #, no-c-format msgid "Once you have created your table, you can see it in the GEOGRAPHY_COLUMNS table:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:320 #, no-c-format msgid "" "-- See the contents of the metadata view\n" "SELECT * FROM geography_columns;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:322 #, no-c-format msgid "You can insert data into the table the same as you would if it was using a GEOMETRY column:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:324 #, no-c-format msgid "" "-- Add some data into the test table\n" "INSERT INTO global_points (name, location) VALUES ('Town', ST_GeographyFromText('SRID=4326;POINT(-110 30)') );\n" "INSERT INTO global_points (name, location) VALUES ('Forest', ST_GeographyFromText('SRID=4326;POINT(-109 29)') );\n" "INSERT INTO global_points (name, location) VALUES ('London', ST_GeographyFromText('SRID=4326;POINT(0 49)') );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:326 #, no-c-format msgid "Creating an index works the same as GEOMETRY. PostGIS will note that the column type is GEOGRAPHY and create an appropriate sphere-based index instead of the usual planar index used for GEOMETRY." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:329 #, no-c-format msgid "" "-- Index the test table with a spherical index\n" " CREATE INDEX global_points_gix ON global_points USING GIST ( location );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:332 #, no-c-format msgid "Query and measurement functions use units of meters. So distance parameters should be expressed in meters, and return values should be expected in meters (or square meters for areas)." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:334 #, no-c-format msgid "" "-- Show a distance query and note, London is outside the 1000km tolerance\n" " SELECT name FROM global_points WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:337 #, no-c-format msgid "You can see the power of GEOGRAPHY in action by calculating the how close a plane flying from Seattle to London (LINESTRING(-122.33 47.606, 0.0 51.5)) comes to Reykjavik (POINT(-21.96 64.15))." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:339 #, no-c-format msgid "" "-- Distance calculation using GEOGRAPHY (122.2km)\n" " SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 'POINT(-21.96 64.15)':: geography);" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:342 #, no-c-format msgid "" "-- Distance calculation using GEOMETRY (13.3 \"degrees\")\n" " SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT(-21.96 64.15)':: geometry);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:345 #, no-c-format msgid "The GEOGRAPHY type calculates the true shortest distance over the sphere between Reykjavik and the great circle flight path between Seattle and London." msgstr "" #. Tag: para #: using_postgis_dataman.xml:347 #, no-c-format msgid "Great Circle mapper The GEOMETRY type calculates a meaningless cartesian distance between Reykjavik and the straight line path from Seattle to London plotted on a flat map of the world. The nominal units of the result might be called \"degrees\", but the result doesn't correspond to any true angular difference between the points, so even calling them \"degrees\" is inaccurate." msgstr "" #. Tag: title #: using_postgis_dataman.xml:351 #, no-c-format msgid "When to use Geography Data type over Geometry data type" msgstr "" #. Tag: para #: using_postgis_dataman.xml:352 #, no-c-format msgid "The new GEOGRAPHY type allows you to store data in longitude/latitude coordinates, but at a cost: there are fewer functions defined on GEOGRAPHY than there are on GEOMETRY; those functions that are defined take more CPU time to execute." msgstr "" #. Tag: para #: using_postgis_dataman.xml:353 #, no-c-format msgid "The type you choose should be conditioned on the expected working area of the application you are building. Will your data span the globe or a large continental area, or is it local to a state, county or municipality?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:355 #, no-c-format msgid "If your data is contained in a small area, you might find that choosing an appropriate projection and using GEOMETRY is the best solution, in terms of performance and functionality available." msgstr "" #. Tag: para #: using_postgis_dataman.xml:356 #, no-c-format msgid "If your data is global or covers a continental region, you may find that GEOGRAPHY allows you to build a system without having to worry about projection details. You store your data in longitude/latitude, and use the functions that have been defined on GEOGRAPHY." msgstr "" #. Tag: para #: using_postgis_dataman.xml:358 #, no-c-format msgid "If you don't understand projections, and you don't want to learn about them, and you're prepared to accept the limitations in functionality available in GEOGRAPHY, then it might be easier for you to use GEOGRAPHY than GEOMETRY. Simply load your data up as longitude/latitude and go from there." msgstr "" #. Tag: para #: using_postgis_dataman.xml:361 #, no-c-format msgid "Refer to for compare between what is supported for Geography vs. Geometry. For a brief listing and description of Geography functions, refer to " msgstr "" #. Tag: title #: using_postgis_dataman.xml:367 #, no-c-format msgid "Geography Advanced FAQ" msgstr "" #. Tag: para #: using_postgis_dataman.xml:371 #, no-c-format msgid "Do you calculate on the sphere or the spheroid?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:375 #, no-c-format msgid "By default, all distance and area calculations are done on the spheroid. You should find that the results of calculations in local areas match up will with local planar results in good local projections. Over larger areas, the spheroidal calculations will be more accurate than any calculation done on a projected plane." msgstr "" #. Tag: para #: using_postgis_dataman.xml:378 #, no-c-format msgid "All the geography functions have the option of using a sphere calculation, by setting a final boolean parameter to 'FALSE'. This will somewhat speed up calculations, particularly for cases where the geometries are very simple." msgstr "" #. Tag: para #: using_postgis_dataman.xml:384 #, no-c-format msgid "What about the date-line and the poles?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:388 #, no-c-format msgid "All the calculations have no conception of date-line or poles, the coordinates are spherical (longitude/latitude) so a shape that crosses the dateline is, from a calculation point of view, no different from any other shape." msgstr "" #. Tag: para #: using_postgis_dataman.xml:396 #, no-c-format msgid "What is the longest arc you can process?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:400 #, no-c-format msgid "We use great circle arcs as the \"interpolation line\" between two points. That means any two points are actually joined up two ways, depending on which direction you travel along the great circle. All our code assumes that the points are joined by the *shorter* of the two paths along the great circle. As a consequence, shapes that have arcs of more than 180 degrees will not be correctly modelled." msgstr "" #. Tag: para #: using_postgis_dataman.xml:407 #, no-c-format msgid "Why is it so slow to calculate the area of Europe / Russia / insert big geographic region here ?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:411 #, no-c-format msgid "Because the polygon is so darned huge! Big areas are bad for two reasons: their bounds are huge, so the index tends to pull the feature no matter what query you run; the number of vertices is huge, and tests (distance, containment) have to traverse the vertex list at least once and sometimes N times (with N being the number of vertices in the other candidate feature)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:416 #, no-c-format msgid "As with GEOMETRY, we recommend that when you have very large polygons, but are doing queries in small areas, you \"denormalize\" your geometric data into smaller chunks so that the index can effectively subquery parts of the object and so queries don't have to pull out the whole object every time. Just because you *can* store all of Europe in one polygon doesn't mean you *should*." msgstr "" #. Tag: title #: using_postgis_dataman.xml:425 #, no-c-format msgid "Using OpenGIS Standards" msgstr "" #. Tag: para #: using_postgis_dataman.xml:427 #, no-c-format msgid "The OpenGIS \"Simple Features Specification for SQL\" defines standard GIS object types, the functions required to manipulate them, and a set of meta-data tables. In order to ensure that meta-data remain consistent, operations such as creating and removing a spatial column are carried out through special procedures defined by OpenGIS." msgstr "" #. Tag: para #: using_postgis_dataman.xml:433 #, no-c-format msgid "There are two OpenGIS meta-data tables: SPATIAL_REF_SYS and GEOMETRY_COLUMNS. The SPATIAL_REF_SYS table holds the numeric IDs and textual descriptions of coordinate systems used in the spatial database." msgstr "" #. Tag: title #: using_postgis_dataman.xml:440 #, no-c-format msgid "The SPATIAL_REF_SYS Table and Spatial Reference Systems" msgstr "" #. Tag: para #: using_postgis_dataman.xml:442 #, no-c-format msgid "The spatial_ref_sys table is a PostGIS included and OGC compliant database table that lists over 3000 known spatial reference systems and details needed to transform/reproject between them." msgstr "" #. Tag: para #: using_postgis_dataman.xml:446 #, no-c-format msgid "Although the PostGIS spatial_ref_sys table contains over 3000 of the more commonly used spatial reference system definitions that can be handled by the proj library, it does not contain all known to man and you can even define your own custom projection if you are familiar with proj4 constructs. Keep in mind that most spatial reference systems are regional and have no meaning when used outside of the bounds they were intended for." msgstr "" #. Tag: para #: using_postgis_dataman.xml:449 #, no-c-format msgid "An excellent resource for finding spatial reference systems not defined in the core set is http://spatialreference.org/" msgstr "" #. Tag: para #: using_postgis_dataman.xml:451 #, no-c-format msgid "Some of the more commonly used spatial reference systems are: 4326 - WGS 84 Long Lat, 4269 - NAD 83 Long Lat, 3395 - WGS 84 World Mercator, 2163 - US National Atlas Equal Area, Spatial reference systems for each NAD 83, WGS 84 UTM zone - UTM zones are one of the most ideal for measurement, but only cover 6-degree regions." msgstr "" #. Tag: para #: using_postgis_dataman.xml:457 #, no-c-format msgid "Various US state plane spatial reference systems (meter or feet based) - usually one or 2 exists per US state. Most of the meter ones are in the core set, but many of the feet based ones or ESRI created ones you will need to pull from spatialreference.org." msgstr "" #. Tag: para #: using_postgis_dataman.xml:461 #, no-c-format msgid "For details on determining which UTM zone to use for your area of interest, check out the utmzone PostGIS plpgsql helper function." msgstr "" #. Tag: para #: using_postgis_dataman.xml:465 #, no-c-format msgid "The SPATIAL_REF_SYS table definition is as follows:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:468 #, no-c-format msgid "" "CREATE TABLE spatial_ref_sys (\n" " srid INTEGER NOT NULL PRIMARY KEY,\n" " auth_name VARCHAR(256),\n" " auth_srid INTEGER,\n" " srtext VARCHAR(2048),\n" " proj4text VARCHAR(2048)\n" ")" msgstr "" #. Tag: para #: using_postgis_dataman.xml:470 #, no-c-format msgid "The SPATIAL_REF_SYS columns are as follows:" msgstr "" #. Tag: ulink #: using_postgis_dataman.xml:475 #, no-c-format msgid "SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:478 #, no-c-format msgid "An integer value that uniquely identifies the Spatial Referencing System (SRS) within the database." msgstr "" #. Tag: term #: using_postgis_dataman.xml:484 #, no-c-format msgid "AUTH_NAME" msgstr "" #. Tag: para #: using_postgis_dataman.xml:487 #, no-c-format msgid "The name of the standard or standards body that is being cited for this reference system. For example, \"EPSG\" would be a valid AUTH_NAME." msgstr "" #. Tag: term #: using_postgis_dataman.xml:494 #, no-c-format msgid "AUTH_SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:497 #, no-c-format msgid "The ID of the Spatial Reference System as defined by the Authority cited in the AUTH_NAME. In the case of EPSG, this is where the EPSG projection code would go." msgstr "" #. Tag: term #: using_postgis_dataman.xml:504 #, no-c-format msgid "SRTEXT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:507 #, no-c-format msgid "The Well-Known Text representation of the Spatial Reference System. An example of a WKT SRS representation is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:510 #, no-c-format msgid "" "PROJCS[\"NAD83 / UTM Zone 10N\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101]\n" " ],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]\n" " ],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",-123],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1]\n" "]" msgstr "" #. Tag: para #: using_postgis_dataman.xml:512 #, no-c-format msgid "For a listing of EPSG projection codes and their corresponding WKT representations, see http://www.opengeospatial.org/. For a discussion of WKT in general, see the OpenGIS \"Coordinate Transformation Services Implementation Specification\" at http://www.opengeospatial.org/standards. For information on the European Petroleum Survey Group (EPSG) and their database of spatial reference systems, see http://www.epsg.org." msgstr "" #. Tag: term #: using_postgis_dataman.xml:525 #, no-c-format msgid "PROJ4TEXT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:528 #, no-c-format msgid "PostGIS uses the Proj4 library to provide coordinate transformation capabilities. The PROJ4TEXT column contains the Proj4 coordinate definition string for a particular SRID. For example:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:533 #, no-c-format msgid "+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m" msgstr "" #. Tag: para #: using_postgis_dataman.xml:535 #, no-c-format msgid "For more information about, see the Proj4 web site at http://trac.osgeo.org/proj/. The spatial_ref_sys.sql file contains both SRTEXT and PROJ4TEXT definitions for all EPSG projections." msgstr "" #. Tag: title #: using_postgis_dataman.xml:546 #, no-c-format msgid "The GEOMETRY_COLUMNS VIEW" msgstr "" #. Tag: para #: using_postgis_dataman.xml:548 #, no-c-format msgid "In versions of PostGIS prior to 2.0.0, geometry_columns was a table that could be directly edited, and sometimes got out of synch with the actual definition of the geometry columns. In PostGIS 2.0.0, GEOMETRY_COLUMNS became a view with the same front-facing structure as prior versions, but reading from database system catalogs Its structure is as follows:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:552 #, no-c-format msgid "\\d geometry_columns" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:553 #, no-c-format msgid "" "View \"public.geometry_columns\"\n" " Column | Type | Modifiers\n" "-------------------+------------------------+-----------\n" " f_table_catalog | character varying(256) |\n" " f_table_schema | character varying(256) |\n" " f_table_name | character varying(256) |\n" " f_geometry_column | character varying(256) |\n" " coord_dimension | integer |\n" " srid | integer |\n" " type | character varying(30) |" msgstr "" #. Tag: para #: using_postgis_dataman.xml:555 #, no-c-format msgid "The column meanings have not changed from prior versions and are:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:559 #, no-c-format msgid "F_TABLE_CATALOG, F_TABLE_SCHEMA, F_TABLE_NAME" msgstr "" #. Tag: para #: using_postgis_dataman.xml:562 #, no-c-format msgid "The fully qualified name of the feature table containing the geometry column. Note that the terms \"catalog\" and \"schema\" are Oracle-ish. There is not PostgreSQL analogue of \"catalog\" so that column is left blank -- for \"schema\" the PostgreSQL schema name is used (public is the default)." msgstr "" #. Tag: term #: using_postgis_dataman.xml:571 #, no-c-format msgid "F_GEOMETRY_COLUMN" msgstr "" #. Tag: para #: using_postgis_dataman.xml:574 #, no-c-format msgid "The name of the geometry column in the feature table." msgstr "" #. Tag: term #: using_postgis_dataman.xml:579 #, no-c-format msgid "COORD_DIMENSION" msgstr "" #. Tag: para #: using_postgis_dataman.xml:582 #, no-c-format msgid "The spatial dimension (2, 3 or 4 dimensional) of the column." msgstr "" #. Tag: term #: using_postgis_dataman.xml:588 #, no-c-format msgid "SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:591 #, no-c-format msgid "The ID of the spatial reference system used for the coordinate geometry in this table. It is a foreign key reference to the SPATIAL_REF_SYS." msgstr "" #. Tag: term #: using_postgis_dataman.xml:598 #, no-c-format msgid "TYPE" msgstr "" #. Tag: para #: using_postgis_dataman.xml:601 #, no-c-format msgid "The type of the spatial object. To restrict the spatial column to a single type, use one of: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION or corresponding XYM versions POINTM, LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTIONM. For heterogeneous (mixed-type) collections, you can use \"GEOMETRY\" as the type." msgstr "" #. Tag: para #: using_postgis_dataman.xml:610 #, no-c-format msgid "This attribute is (probably) not part of the OpenGIS specification, but is required for ensuring type homogeneity." msgstr "" #. Tag: title #: using_postgis_dataman.xml:620 #, no-c-format msgid "Creating a Spatial Table" msgstr "" #. Tag: para #: using_postgis_dataman.xml:622 #, no-c-format msgid "Creating a table with spatial data, can be done in one step. As shown in the following example which creates a roads table with a 2D linestring geometry column in WGS84 long lat" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:624 #, no-c-format msgid "" "CREATE TABLE ROADS ( ID int4\n" " , ROAD_NAME varchar(25), geom geometry(LINESTRING,4326) );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:626 #, no-c-format msgid "We can add additional columns using standard ALTER TABLE command as we do in this next example where we add a 3-D linestring." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:627 #, no-c-format msgid "ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ,4326);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:629 #, no-c-format msgid "For backwards compability, you can still create a spatial table in two stages using the management functions." msgstr "" #. Tag: para #: using_postgis_dataman.xml:633 #, no-c-format msgid "Create a normal non-spatial table." msgstr "" #. Tag: para #: using_postgis_dataman.xml:635 #, no-c-format msgid "For example: CREATE TABLE ROADS ( ID int4, ROAD_NAME varchar(25) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:640 #, no-c-format msgid "Add a spatial column to the table using the OpenGIS \"AddGeometryColumn\" function. Refer to for more details." msgstr "" #. Tag: para #: using_postgis_dataman.xml:643 #, no-c-format msgid "" "The syntax is: AddGeometryColumn(\n" " <schema_name>,\n" " <table_name>,\n" " <column_name>,\n" " <srid>,\n" " <type>,\n" " <dimension>\n" ") Or, using current schema:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:643 #, no-c-format msgid "" "AddGeometryColumn(\n" " <table_name>,\n" " <column_name>,\n" " <srid>,\n" " <type>,\n" " <dimension>\n" ")" msgstr "" #. Tag: para #: using_postgis_dataman.xml:645 #, no-c-format msgid "Example1: SELECT AddGeometryColumn('public', 'roads', 'geom', 423, 'LINESTRING', 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:648 #, no-c-format msgid "Example2: SELECT AddGeometryColumn( 'roads', 'geom', 423, 'LINESTRING', 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:653 #, no-c-format msgid "Here is an example of SQL used to create a table and add a spatial column (assuming that an SRID of 128 exists already):" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:656 #, no-c-format msgid "" "CREATE TABLE parks (\n" " park_id INTEGER,\n" " park_name VARCHAR,\n" " park_date DATE,\n" " park_type VARCHAR\n" ");\n" "SELECT AddGeometryColumn('parks', 'park_geom', 128, 'MULTIPOLYGON', 2 );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:658 #, no-c-format msgid "Here is another example, using the generic \"geometry\" type and the undefined SRID value of 0:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:661 #, no-c-format msgid "" "CREATE TABLE roads (\n" " road_id INTEGER,\n" " road_name VARCHAR\n" ");\n" "SELECT AddGeometryColumn( 'roads', 'roads_geom', 0, 'GEOMETRY', 3 );" msgstr "" #. Tag: title #: using_postgis_dataman.xml:665 #, no-c-format msgid "Manually Registering Geometry Columns in geometry_columns" msgstr "" #. Tag: para #: using_postgis_dataman.xml:666 #, no-c-format msgid "The AddGeometryColumn() approach creates a geometry column and also registers the new column in the geometry_columns table. If your software utilizes geometry_columns, then any geometry columns you need to query by must be registered in this view. Starting with PoastGIS 2.0, geometry_columns is no longer editable and all geometry columns are autoregistered." msgstr "" #. Tag: para #: using_postgis_dataman.xml:670 #, no-c-format msgid "However they may be registered as a generic geometry column if the column was not defined as a specific type during creation." msgstr "" #. Tag: para #: using_postgis_dataman.xml:672 #, no-c-format msgid "Two of the cases where this may happen, but you can't use AddGeometryColumn, is in the case of SQL Views and bulk inserts. For these cases, you can correct the registration in the geometry_columns table by constraining the column. Note in PostGIS 2.0+ if your column is typmod based, the creation process would register it correctly, so no need to do anything." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:677 #, no-c-format msgid "" "--Lets say you have a view created like this\n" "CREATE VIEW public.vwmytablemercator AS\n" " SELECT gid, ST_Transform(geom,3395) As geom, f_name\n" " FROM public.mytable;\n" " \n" "-- For it to register correctly in PostGIS 2.0+ \n" "-- You need to cast the geometry\n" "--\n" "DROP VIEW public.vwmytablemercator;\n" "CREATE VIEW public.vwmytablemercator AS\n" " SELECT gid, ST_Transform(geom,3395)::geometry(Geometry, 3395) As geom, f_name\n" " FROM public.mytable;\n" " \n" "-- If you know the geometry type for sure is a 2D POLYGON then you could do\n" "DROP VIEW public.vwmytablemercator;\n" "CREATE VIEW public.vwmytablemercator AS\n" " SELECT gid, ST_Transform(geom,3395)::geometry(Polygon, 3395) As geom, f_name\n" " FROM public.mytable;" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:678 #, no-c-format msgid "" "--Lets say you created a derivative table by doing a bulk insert\n" "SELECT poi.gid, poi.geom, citybounds.city_name\n" "INTO myschema.my_special_pois\n" "FROM poi INNER JOIN citybounds ON ST_Intersects(citybounds.geom, poi.geom);\n" "\n" "--Create 2d index on new table\n" "CREATE INDEX idx_myschema_myspecialpois_geom_gist\n" " ON myschema.my_special_pois USING gist(geom);\n" " \n" "-- If your points are 3D points or 3M points, \n" "-- then you might want to create an nd index instead of a 2d index\n" "-- like so\n" "CREATE INDEX my_special_pois_geom_gist_nd \n" " ON my_special_pois USING gist(geom gist_geometry_ops_nd);\n" "\n" "--To manually register this new table's geometry column in geometry_columns\n" "-- Note that this approach will work for both PostGIS 2.0+ and PostGIS 1.4+\n" "-- For PostGIS 2.0 it will also change the underlying structure of the table to\n" "-- to make the column typmod based.\n" "-- For PostGIS prior to 2.0, this technique can also be used to register views\n" "SELECT populate_geometry_columns('myschema.my_special_pois'::regclass); \n" "\n" "--If you are using PostGIS 2.0 and for whatever reason, you\n" "-- you need the old constraint based definition behavior \n" "-- (such as case of inherited tables where all children do not have the same type and srid)\n" "-- set new optional use_typmod argument to false\n" "SELECT populate_geometry_columns('myschema.my_special_pois'::regclass, false);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:680 #, no-c-format msgid "Although the old-constraint based method is still supported, a constraint-based geomentry column used directly in a view, will not register correctly in geometry_columns, as will a typmod one. In this example we define a column using typmod and another using constraints." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:683 #, no-c-format msgid "" "CREATE TABLE pois_ny(gid SERIAL PRIMARY KEY\n" " , poi_name text, cat varchar(20)\n" " , geom geometry(POINT,4326) );\n" "SELECT AddGeometryColumn('pois_ny', 'geom_2160', 2160, 'POINT', 2, false);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:684 #, no-c-format msgid "If we run in psql" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:685 #, no-c-format msgid "\\d pois_ny;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:686 #, no-c-format msgid "We observe they are defined differently -- one is typmod, one is constraint" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:687 #, no-c-format msgid "" "Table \"public.pois_ny\"\n" " Column | Type | Modifiers\n" "\n" "-----------+-----------------------+------------------------------------------------------\n" " gid | integer | not null default nextval('pois_ny_gid_seq'::regclass)\n" " poi_name | text |\n" " cat | character varying(20) |\n" " geom | geometry(Point,4326) |\n" " geom_2160 | geometry |\n" "Indexes:\n" " \"pois_ny_pkey\" PRIMARY KEY, btree (gid)\n" "Check constraints:\n" " \"enforce_dims_geom_2160\" CHECK (st_ndims(geom_2160) = 2)\n" " \"enforce_geotype_geom_2160\" CHECK (geometrytype(geom_2160) = 'POINT'::text \n" " OR geom_2160 IS NULL)\n" " \"enforce_srid_geom_2160\" CHECK (st_srid(geom_2160) = 2160)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:688 #, no-c-format msgid "In geometry_columns, they both register correctly" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:689 #, no-c-format msgid "" "SELECT f_table_name, f_geometry_column, srid, type \n" " FROM geometry_columns \n" " WHERE f_table_name = 'pois_ny';" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:690 #, no-c-format msgid "" "f_table_name | f_geometry_column | srid | type\n" "-------------+-------------------+------+-------\n" "pois_ny | geom | 4326 | POINT\n" "pois_ny | geom_2160 | 2160 | POINT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:691 #, no-c-format msgid "However -- if we were to create a view like this" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:692 #, no-c-format msgid "" "CREATE VIEW vw_pois_ny_parks AS \n" "SELECT * \n" " FROM pois_ny \n" " WHERE cat='park';\n" " \n" "SELECT f_table_name, f_geometry_column, srid, type \n" " FROM geometry_columns \n" " WHERE f_table_name = 'vw_pois_ny_parks';" msgstr "" #. Tag: para #: using_postgis_dataman.xml:693 #, no-c-format msgid "The typmod based geom view column registers correctly, but the constraint based one does not." msgstr "" #. Tag: screen #: using_postgis_dataman.xml:695 #, no-c-format msgid "" "f_table_name | f_geometry_column | srid | type\n" "------------------+-------------------+------+----------\n" " vw_pois_ny_parks | geom | 4326 | POINT\n" " vw_pois_ny_parks | geom_2160 | 0 | GEOMETRY" msgstr "" #. Tag: para #: using_postgis_dataman.xml:697 #, no-c-format msgid "This may change in future versions of PostGIS, but for now To force the constraint based view column to register correctly, we need to do this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:699 #, no-c-format msgid "" "DROP VIEW vw_pois_ny_parks;\n" "CREATE VIEW vw_pois_ny_parks AS \n" "SELECT gid, poi_name, cat\n" " , geom\n" " , geom_2160::geometry(POINT,2160) As geom_2160 \n" " FROM pois_ny \n" " WHERE cat='park';\n" "SELECT f_table_name, f_geometry_column, srid, type \n" " FROM geometry_columns \n" " WHERE f_table_name = 'vw_pois_ny_parks';" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:700 #, no-c-format msgid "" "f_table_name | f_geometry_column | srid | type\n" "------------------+-------------------+------+-------\n" " vw_pois_ny_parks | geom | 4326 | POINT\n" " vw_pois_ny_parks | geom_2160 | 2160 | POINT" msgstr "" #. Tag: title #: using_postgis_dataman.xml:704 #, no-c-format msgid "Ensuring OpenGIS compliancy of geometries" msgstr "" #. Tag: para #: using_postgis_dataman.xml:706 #, no-c-format msgid "PostGIS is compliant with the Open Geospatial Consortium’s (OGC) OpenGIS Specifications. As such, many PostGIS methods require, or more accurately, assume that geometries that are operated on are both simple and valid. For example, it does not make sense to calculate the area of a polygon that has a hole defined outside of the polygon, or to construct a polygon from a non-simple boundary line." msgstr "" #. Tag: para #: using_postgis_dataman.xml:713 #, no-c-format msgid "According to the OGC Specifications, a simple geometry is one that has no anomalous geometric points, such as self intersection or self tangency and primarily refers to 0 or 1-dimensional geometries (i.e. [MULTI]POINT, [MULTI]LINESTRING). Geometry validity, on the other hand, primarily refers to 2-dimensional geometries (i.e. [MULTI]POLYGON) and defines the set of assertions that characterizes a valid polygon. The description of each geometric class includes specific conditions that further detail geometric simplicity and validity." msgstr "" #. Tag: para #: using_postgis_dataman.xml:723 #, no-c-format msgid "A POINT is inheritably simple as a 0-dimensional geometry object." msgstr "" #. Tag: para #: using_postgis_dataman.xml:726 #, no-c-format msgid "MULTIPOINTs are simple if no two coordinates (POINTs) are equal (have identical coordinate values)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:730 #, no-c-format msgid "A LINESTRING is simple if it does not pass through the same POINT twice (except for the endpoints, in which case it is referred to as a linear ring and additionally considered closed)." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:745 #, no-c-format msgid "(a)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:755 #, no-c-format msgid "(b)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:767 #, no-c-format msgid "(c)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:777 #, no-c-format msgid "(d)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:787 #, no-c-format msgid "(a) and (c) are simple LINESTRINGs, (b) and (d) are not." msgstr "" #. Tag: para #: using_postgis_dataman.xml:796 #, no-c-format msgid "A MULTILINESTRING is simple only if all of its elements are simple and the only intersection between any two elements occurs at POINTs that are on the boundaries of both elements." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:811 #, no-c-format msgid "(e)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:821 #, no-c-format msgid "(f)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:831 #, no-c-format msgid "(g)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:841 #, no-c-format msgid "(e) and (f) are simple MULTILINESTRINGs, (g) is not." msgstr "" #. Tag: para #: using_postgis_dataman.xml:850 #, no-c-format msgid "By definition, a POLYGON is always simple. It is valid if no two rings in the boundary (made up of an exterior ring and interior rings) cross. The boundary of a POLYGON may intersect at a POINT but only as a tangent (i.e. not on a line). A POLYGON may not have cut lines or spikes and the interior rings must be contained entirely within the exterior ring." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:868 #, no-c-format msgid "(h)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:878 #, no-c-format msgid "(i)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:888 #, no-c-format msgid "(j)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:900 #, no-c-format msgid "(k)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:910 #, no-c-format msgid "(l)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:920 #, no-c-format msgid "(m)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:929 #, no-c-format msgid "(h) and (i) are valid POLYGONs, (j-m) cannot be represented as single POLYGONs, but (j) and (m) could be represented as a valid MULTIPOLYGON." msgstr "" #. Tag: para #: using_postgis_dataman.xml:941 #, no-c-format msgid "A MULTIPOLYGON is valid if and only if all of its elements are valid and the interiors of no two elements intersect. The boundaries of any two elements may touch, but only at a finite number of POINTs." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:956 #, no-c-format msgid "(n)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:966 #, no-c-format msgid "(o)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:976 #, no-c-format msgid "(p)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:985 #, no-c-format msgid "(n) and (o) are not valid MULTIPOLYGONs. (p), however, is valid." msgstr "" #. Tag: para #: using_postgis_dataman.xml:994 #, no-c-format msgid "Most of the functions implemented by the GEOS library rely on the assumption that your geometries are valid as specified by the OpenGIS Simple Feature Specification. To check simplicity or validity of geometries you can use the ST_IsSimple() and ST_IsValid()" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1000 #, no-c-format msgid "" "-- Typically, it doesn't make sense to check\n" "-- for validity on linear features since it will always return TRUE.\n" "-- But in this example, PostGIS extends the definition of the OGC IsValid\n" "-- by returning false if a LineString has less than 2 *distinct* vertices.\n" "gisdb=# SELECT\n" " ST_IsValid('LINESTRING(0 0, 1 1)'),\n" " ST_IsValid('LINESTRING(0 0, 0 0, 0 0)');\n" "\n" " st_isvalid | st_isvalid\n" "------------+-----------\n" " t | f" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1002 #, no-c-format msgid "By default, PostGIS does not apply this validity check on geometry input, because testing for validity needs lots of CPU time for complex geometries, especially polygons. If you do not trust your data sources, you can manually enforce such a check to your tables by adding a check constraint:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1008 #, no-c-format msgid "" "ALTER TABLE mytable\n" " ADD CONSTRAINT geometry_valid_check\n" " CHECK (ST_IsValid(the_geom));" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1010 #, no-c-format msgid "If you encounter any strange error messages such as \"GEOS Intersection() threw an error!\" or \"JTS Intersection() threw an error!\" when calling PostGIS functions with valid input geometries, you likely found an error in either PostGIS or one of the libraries it uses, and you should contact the PostGIS developers. The same is true if a PostGIS function returns an invalid geometry for valid input." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1018 #, no-c-format msgid "Strictly compliant OGC geometries cannot have Z or M values. The ST_IsValid() function won't consider higher dimensioned geometries invalid! Invocations of AddGeometryColumn() will add a constraint checking geometry dimensions, so it is enough to specify 2 there." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1028 #, no-c-format msgid "Dimensionally Extended 9 Intersection Model (DE-9IM)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1030 #, no-c-format msgid "It is sometimes the case that the typical spatial predicates (, , , , ...) are insufficient in and of themselves to adequately provide that desired spatial filter." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1042 #, no-c-format msgid "For example, consider a linear dataset representing a road network. It may be the task of a GIS analyst to identify all road segments that cross each other, not at a point, but on a line, perhaps invalidating some business rule. In this case, does not adequately provide the necessary spatial filter since, for linear features, it returns true only where they cross at a point." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1049 #, no-c-format msgid "One two-step solution might be to first perform the actual intersection () of pairs of road segments that spatially intersect (), and then compare the intersection's with 'LINESTRING' (properly dealing with cases that return GEOMETRYCOLLECTIONs of [MULTI]POINTs, [MULTI]LINESTRINGs, etc.)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1057 #, no-c-format msgid "A more elegant / faster solution may indeed be desirable." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1071 #, no-c-format msgid "A second [theoretical] example may be that of a GIS analyst trying to locate all wharfs or docks that intersect a lake's boundary on a line and where only one end of the wharf is up on shore. In other words, where a wharf is within, but not completely within a lake, intersecting the boundary of a lake on a line, and where the wharf's endpoints are both completely within and on the boundary of the lake. The analyst may need to use a combination of spatial predicates to isolate the sought after features:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1082 #, no-c-format msgid "(lake, wharf) = TRUE" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1086 #, no-c-format msgid "(lake, wharf) = FALSE" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1090 #, no-c-format msgid "((wharf, lake)) = 'LINESTRING'" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1095 #, no-c-format msgid "((((wharf), (lake)))) = 1" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1098 #, no-c-format msgid "... (needless to say, this could get quite complicated)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1107 #, no-c-format msgid "So enters the Dimensionally Extended 9 Intersection Model, or DE-9IM for short." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1111 #, no-c-format msgid "Theory" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1113 #, no-c-format msgid "According to the OpenGIS Simple Features Implementation Specification for SQL, \"the basic approach to comparing two geometries is to make pair-wise tests of the intersections between the Interiors, Boundaries and Exteriors of the two geometries and to classify the relationship between the two geometries based on the entries in the resulting 'intersection' matrix.\"" msgstr "" #. Tag: glossterm #: using_postgis_dataman.xml:1124 #, no-c-format msgid "Boundary" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1127 #, no-c-format msgid "The boundary of a geometry is the set of geometries of the next lower dimension. For POINTs, which have a dimension of 0, the boundary is the empty set. The boundary of a LINESTRING are the two endpoints. For POLYGONs, the boundary is the linework that make up the exterior and interior rings." msgstr "" #. Tag: glossterm #: using_postgis_dataman.xml:1138 #, no-c-format msgid "Interior" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1141 #, no-c-format msgid "The interior of a geometry are those points of a geometry that are left when the boundary is removed. For POINTs, the interior is the POINT itself. The interior of a LINESTRING are the set of real points between the endpoints. For POLYGONs, the interior is the areal surface inside the polygon." msgstr "" #. Tag: glossterm #: using_postgis_dataman.xml:1152 #, no-c-format msgid "Exterior" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1155 #, no-c-format msgid "The exterior of a geometry is the universe, an areal surface, not on the interior or boundary of the geometry." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1162 #, no-c-format msgid "Given geometry a, where the I(a), B(a), and E(a) are the Interior, Boundary, and Exterior of a, the mathematical representation of the matrix is:" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:1174 using_postgis_dataman.xml:1184 using_postgis_dataman.xml:1377 using_postgis_dataman.xml:1390 #, no-c-format msgid "Interior" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:1176 using_postgis_dataman.xml:1227 using_postgis_dataman.xml:1380 using_postgis_dataman.xml:1413 #, no-c-format msgid "Boundary" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:1178 using_postgis_dataman.xml:1270 using_postgis_dataman.xml:1383 using_postgis_dataman.xml:1436 #, no-c-format msgid "Exterior" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1188 #, no-c-format msgid "dim( I(a) ∩ I(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1201 #, no-c-format msgid "dim( I(a) ∩ B(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1214 #, no-c-format msgid "dim( I(a) ∩ E(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1231 #, no-c-format msgid "dim( B(a) ∩ I(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1244 #, no-c-format msgid "dim( B(a) ∩ B(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1257 #, no-c-format msgid "dim( B(a) ∩ E(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1274 #, no-c-format msgid "dim( E(a) ∩ I(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1287 #, no-c-format msgid "dim( E(a) ∩ B(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1300 #, no-c-format msgid "dim( E(a) ∩ E(b) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1315 #, no-c-format msgid "Where dim(a) is the dimension of a as specified by but has the domain of {0,1,2,T,F,*}" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1322 #, no-c-format msgid "0 => point" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1326 #, no-c-format msgid "1 => line" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1330 #, no-c-format msgid "2 => area" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1334 #, no-c-format msgid "T => {0,1,2}" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1339 #, no-c-format msgid "F => empty set" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1343 #, no-c-format msgid "* => don't care" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1347 #, no-c-format msgid "Visually, for two overlapping polygonal geometries, this looks like:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1394 using_postgis_dataman.xml:1406 using_postgis_dataman.xml:1440 using_postgis_dataman.xml:1452 #, no-c-format msgid "dim(...) = 2" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1400 using_postgis_dataman.xml:1417 using_postgis_dataman.xml:1429 using_postgis_dataman.xml:1446 #, no-c-format msgid "dim(...) = 1" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1423 #, no-c-format msgid "dim(...) = 0" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1464 #, no-c-format msgid "Read from left to right and from top to bottom, the dimensional matrix is represented, '212101212'." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1467 #, no-c-format msgid "A relate matrix that would therefore represent our first example of two lines that intersect on a line would be: '1*1***1**'" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1471 #, no-c-format msgid "" "-- Identify road segments that cross on a line\n" "SELECT a.id\n" "FROM roads a, roads b\n" "WHERE a.id != b.id \n" "AND a.geom && b.geom\n" "AND ST_Relate(a.geom, b.geom, '1*1***1**');" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1473 #, no-c-format msgid "A relate matrix that represents the second example of wharfs partly on the lake's shoreline would be '102101FF2'" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1477 #, no-c-format msgid "" "-- Identify wharfs partly on a lake's shoreline\n" "SELECT a.lake_id, b.wharf_id\n" "FROM lakes a, wharfs b\n" "WHERE a.geom && b.geom\n" "AND ST_Relate(a.geom, b.geom, '102101FF2');" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1479 #, no-c-format msgid "For more information or reading, see:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1483 #, no-c-format msgid "OpenGIS Simple Features Implementation Specification for SQL (version 1.1, section 2.1.13.2)" msgstr "" #. Tag: ulink #: using_postgis_dataman.xml:1488 #, no-c-format msgid "Dimensionally Extended Nine-Intersection Model (DE-9IM) by Christian Strobl" msgstr "" #. Tag: ulink #: using_postgis_dataman.xml:1492 #, no-c-format msgid "GeoTools: Point Set Theory and the DE-9IM Matrix" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1495 #, no-c-format msgid "Encyclopedia of GIS By Hui Xiong" msgstr "" #. Tag: title #: using_postgis_dataman.xml:1505 #, no-c-format msgid "Loading GIS Data" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1507 #, no-c-format msgid "Once you have created a spatial table, you are ready to upload GIS data to the database. Currently, there are two ways to get data into a PostGIS/PostgreSQL database: using formatted SQL statements or using the Shape file loader/dumper." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1513 using_postgis_dataman.xml:1789 #, no-c-format msgid "Using SQL" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1515 #, no-c-format msgid "If you can convert your data to a text representation, then using formatted SQL might be the easiest way to get your data into PostGIS. As with Oracle and other SQL databases, data can be bulk loaded by piping a large text file full of SQL \"INSERT\" statements into the SQL terminal monitor." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1521 #, no-c-format msgid "A data upload file (roads.sql for example) might look like this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1524 #, no-c-format msgid "" "BEGIN;\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (1,ST_GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (2,ST_GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (3,ST_GeomFromText('LINESTRING(192783 228138,192612 229814)',-1),'Paul St');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (4,ST_GeomFromText('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (5,ST_GeomFromText('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (6,ST_GeomFromText('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres');\n" "COMMIT;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1526 #, no-c-format msgid "The data file can be piped into PostgreSQL very easily using the \"psql\" SQL terminal monitor:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1529 #, no-c-format msgid "psql -d [database] -f roads.sql" msgstr "" #. Tag: title #: using_postgis_dataman.xml:1533 #, no-c-format msgid "Using the Loader" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1535 #, no-c-format msgid "The shp2pgsql data loader converts ESRI Shape files into SQL suitable for insertion into a PostGIS/PostgreSQL database either in geometry or geography format. The loader has several operating modes distinguished by command line flags:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1540 #, no-c-format msgid "In addition to the shp2pgsql command-line loader, there is an shp2pgsql-gui graphical interface with most of the options as the command-line loader, but may be easier to use for one-off non-scripted loading or if you are new to PostGIS. It can also be configured as a plugin to PgAdminIII." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1547 #, no-c-format msgid "(c|a|d|p) These are mutually exclusive options:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1552 #, no-c-format msgid "-c" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1554 #, no-c-format msgid "Creates a new table and populates it from the shapefile. This is the default mode." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1562 #, no-c-format msgid "-a" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1564 #, no-c-format msgid "Appends data from the Shape file into the database table. Note that to use this option to load multiple files, the files must have the same attributes and same data types." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1573 using_postgis_dataman.xml:1948 #, no-c-format msgid "-d" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1575 #, no-c-format msgid "Drops the database table before creating a new table with the data in the Shape file." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1583 #, no-c-format msgid "-p" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1585 #, no-c-format msgid "Only produces the table creation SQL code, without adding any actual data. This can be used if you need to completely separate the table creation and data loading steps." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1598 #, no-c-format msgid "-?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1600 #, no-c-format msgid "Display help screen." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1607 #, no-c-format msgid "-D" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1609 #, no-c-format msgid "Use the PostgreSQL \"dump\" format for the output data. This can be combined with -a, -c and -d. It is much faster to load than the default \"insert\" SQL format. Use this for very large data sets." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1618 #, no-c-format msgid "-s [<FROM_SRID%gt;:]<SRID>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1620 #, no-c-format msgid "Creates and populates the geometry tables with the specified SRID. Optionally specifies that the input shapefile uses the given FROM_SRID, in which case the geometries will be reprojected to the target SRID. FROM_SRID cannot be specified with -D." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1631 #, no-c-format msgid "-k" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1633 #, no-c-format msgid "Keep identifiers' case (column, schema and attributes). Note that attributes in Shapefile are all UPPERCASE." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1641 #, no-c-format msgid "-i" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1643 #, no-c-format msgid "Coerce all integers to standard 32-bit integers, do not create 64-bit bigints, even if the DBF header signature appears to warrant it." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1651 #, no-c-format msgid "-I" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1653 #, no-c-format msgid "Create a GiST index on the geometry column." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1659 #, no-c-format msgid "-S" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1661 #, no-c-format msgid "Generate simple geometries instead of MULTI geometries. Will only succeed if all the geometries are actually single (I.E. a MULTIPOLYGON with a single shell, or or a MULTIPOINT with a single vertex)." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1670 #, no-c-format msgid "-t <dimensionality>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1672 #, no-c-format msgid "Force the output geometry to have the specified dimensionality. Use the following strings to indicate the dimensionality: 2D, 3DZ, 3DM, 4D." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1676 #, no-c-format msgid "If the input has fewer dimensions that specified, the output will have those dimensions filled in with zeroes. If the input has more dimensions that specified, the unwanted dimensions will be stripped." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1685 #, no-c-format msgid "-w" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1687 #, no-c-format msgid "Output WKT format, instead of WKB. Note that this can introduce coordinate drifts due to loss of precision." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1695 #, no-c-format msgid "-e" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1697 #, no-c-format msgid "Execute each statement on its own, without using a transaction. This allows loading of the majority of good data when there are some bad geometries that generate errors. Note that this cannot be used with the -D flag as the \"dump\" format always uses a transaction." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1707 #, no-c-format msgid "-W <encoding>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1709 #, no-c-format msgid "Specify encoding of the input data (dbf file). When used, all attributes of the dbf are converted from the specified encoding to UTF8. The resulting SQL output will contain a SET CLIENT_ENCODING to UTF8 command, so that the backend will be able to reconvert from UTF8 to whatever encoding the database is configured to use internally." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1719 #, no-c-format msgid "-N <policy>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1721 #, no-c-format msgid "NULL geometries handling policy (insert*,skip,abort)" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1727 #, no-c-format msgid "-n" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1729 #, no-c-format msgid "-n Only import DBF file. If your data has no corresponding shapefile, it will automatically switch to this mode and load just the dbf. So setting this flag is only needed if you have a full shapefile set, and you only want the attribute data and no geometry." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1737 #, no-c-format msgid "-G" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1739 #, no-c-format msgid "Use geography type instead of geometry (requires lon/lat data) in WGS84 long lat (SRID=4326)" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1745 #, no-c-format msgid "-T <tablespace>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1747 #, no-c-format msgid "Specify the tablespace for the new table. Indexes will still use the default tablespace unless the -X parameter is also used. The PostgreSQL documentation has a good description on when to use custom tablespaces." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1755 #, no-c-format msgid "-X <tablespace>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1757 #, no-c-format msgid "Specify the tablespace for the new table's indexes. This applies to the primary key index, and the GIST spatial index if -I is also used." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1765 #, no-c-format msgid "An example session using the loader to create an input file and uploading it might look like this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1770 #, no-c-format msgid "" "# shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql\n" "# psql -d roadsdb -f roads.sql" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1772 #, no-c-format msgid "A conversion and upload can be done all in one step using UNIX pipes:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1776 #, no-c-format msgid "# shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb" msgstr "" #. Tag: title #: using_postgis_dataman.xml:1781 #, no-c-format msgid "Retrieving GIS Data" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1783 #, no-c-format msgid "Data can be extracted from the database using either SQL or the Shape file loader/dumper. In the section on SQL we will discuss some of the operators available to do comparisons and queries on spatial tables." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1791 #, no-c-format msgid "The most straightforward means of pulling data out of the database is to use a SQL select query to reduce the number of RECORDS and COLUMNS returned and dump the resulting columns into a parsable text file:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1796 #, no-c-format msgid "" "db=# SELECT road_id, ST_AsText(road_geom) AS geom, road_name FROM roads;\n" "\n" "road_id | geom | road_name\n" "--------+-----------------------------------------+-----------\n" " 1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd\n" " 2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd\n" " 3 | LINESTRING(192783 228138,192612 229814) | Paul St\n" " 4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave\n" " 5 | LINESTRING(190131 224148,190871 228134) | Phil Tce\n" " 6 | LINESTRING(198231 263418,198213 268322) | Dave Cres\n" " 7 | LINESTRING(218421 284121,224123 241231) | Chris Way\n" "(6 rows)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1798 #, no-c-format msgid "However, there will be times when some kind of restriction is necessary to cut down the number of fields returned. In the case of attribute-based restrictions, just use the same SQL syntax as normal with a non-spatial table. In the case of spatial restrictions, the following operators are available/useful:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1806 #, no-c-format msgid "&&" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1809 #, no-c-format msgid "This operator tells whether the bounding box of one geometry intersects the bounding box of another." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1815 #, no-c-format msgid "ST_OrderingEquals" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1818 #, no-c-format msgid "This tests whether two geometries are geometrically identical. For example, if 'POLYGON((0 0,1 1,1 0,0 0))' is the same as 'POLYGON((0 0,1 1,1 0,0 0))' (it is)." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1825 #, no-c-format msgid "=" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1828 #, no-c-format msgid "This operator is a little more naive, it only tests whether the bounding boxes of two geometries are the same." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1834 #, no-c-format msgid "Next, you can use these operators in queries. Note that when specifying geometries and boxes on the SQL command line, you must explicitly turn the string representations into geometries by using the \"ST_GeomFromText()\" function. The 312 is a fictitious spatial reference system that matches our data. So, for example:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1840 #, no-c-format msgid "" "SELECT road_id, road_name\n" " FROM roads\n" " WHERE ST_OrderingEquals(roads_geom , ST_GeomFromText('LINESTRING(191232 243118,191108 243242)',312) ) ;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1842 #, no-c-format msgid "The above query would return the single record from the \"ROADS_GEOM\" table in which the geometry was equal to that value." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1845 #, no-c-format msgid "When using the \"&&\" operator, you can specify either a BOX3D as the comparison feature or a GEOMETRY. When you specify a GEOMETRY, however, its bounding box will be used for the comparison." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1850 #, no-c-format msgid "" "SELECT road_id, road_name\n" "FROM roads\n" "WHERE roads_geom && ST_GeomFromText('POLYGON((...))',312);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1852 #, no-c-format msgid "The above query will use the bounding box of the polygon for comparison purposes." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1855 #, no-c-format msgid "The most common spatial query will probably be a \"frame-based\" query, used by client software, like data browsers and web mappers, to grab a \"map frame\" worth of data for display. Using a \"BOX3D\" object for the frame, such a query looks like this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1860 #, no-c-format msgid "" "SELECT ST_AsText(roads_geom) AS geom\n" "FROM roads\n" "WHERE\n" " roads_geom && ST_MakeEnvelope(191232, 243117,191232, 243119,312);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1862 #, no-c-format msgid "Note the use of the SRID 312, to specify the projection of the envelope." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1866 #, no-c-format msgid "Using the Dumper" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1868 #, no-c-format msgid "The pgsql2shp table dumper connects directly to the database and converts a table (possibly defined by a query) into a shape file. The basic syntax is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1872 #, no-c-format msgid "pgsql2shp [<options>] <database> [<schema>.]<table>" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1874 #, no-c-format msgid "pgsql2shp [<options>] <database> <query>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1876 #, no-c-format msgid "The commandline options are:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1880 #, no-c-format msgid "-f <filename>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1883 #, no-c-format msgid "Write the output to a particular filename." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1888 #, no-c-format msgid "-h <host>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1891 #, no-c-format msgid "The database host to connect to." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1896 #, no-c-format msgid "-p <port>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1899 #, no-c-format msgid "The port to connect to on the database host." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1904 #, no-c-format msgid "-P <password>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1907 #, no-c-format msgid "The password to use when connecting to the database." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1912 #, no-c-format msgid "-u <user>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1915 #, no-c-format msgid "The username to use when connecting to the database." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1920 #, no-c-format msgid "-g <geometry column>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1923 #, no-c-format msgid "In the case of tables with multiple geometry columns, the geometry column to use when writing the shape file." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1929 #, no-c-format msgid "-b" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1932 #, no-c-format msgid "Use a binary cursor. This will make the operation faster, but will not work if any NON-geometry attribute in the table lacks a cast to text." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1939 #, no-c-format msgid "-r" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1942 #, no-c-format msgid "Raw mode. Do not drop the gid field, or escape column names." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1951 #, no-c-format msgid "For backward compatibility: write a 3-dimensional shape file when dumping from old (pre-1.0.0) postgis databases (the default is to write a 2-dimensional shape file in that case). Starting from postgis-1.0.0+, dimensions are fully encoded." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1959 #, no-c-format msgid "-m filename" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1961 #, no-c-format msgid "Remap identifiers to ten character names. The content of the file is lines of two symbols separated by a single white space and no trailing or leading space: VERYLONGSYMBOL SHORTONE ANOTHERVERYLONGSYMBOL SHORTER etc." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1974 #, no-c-format msgid "Building Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1976 #, no-c-format msgid "Indexes are what make using a spatial database for large data sets possible. Without indexing, any search for a feature would require a \"sequential scan\" of every record in the database. Indexing speeds up searching by organizing the data into a search tree which can be quickly traversed to find a particular record. PostgreSQL supports three kinds of indexes by default: B-Tree indexes, R-Tree indexes, and GiST indexes." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1986 #, no-c-format msgid "B-Trees are used for data which can be sorted along one axis; for example, numbers, letters, dates. GIS data cannot be rationally sorted along one axis (which is greater, (0,0) or (0,1) or (1,0)?) so B-Tree indexing is of no use for us." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1993 #, no-c-format msgid "R-Trees break up data into rectangles, and sub-rectangles, and sub-sub rectangles, etc. R-Trees are used by some spatial databases to index GIS data, but the PostgreSQL R-Tree implementation is not as robust as the GiST implementation." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2000 #, no-c-format msgid "GiST (Generalized Search Trees) indexes break up data into \"things to one side\", \"things which overlap\", \"things which are inside\" and can be used on a wide range of data-types, including GIS data. PostGIS uses an R-Tree index implemented on top of GiST to index GIS data." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2009 #, no-c-format msgid "GiST Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2011 #, no-c-format msgid "GiST stands for \"Generalized Search Tree\" and is a generic form of indexing. In addition to GIS indexing, GiST is used to speed up searches on all kinds of irregular data structures (integer arrays, spectral data, etc) which are not amenable to normal B-Tree indexing." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2016 #, no-c-format msgid "Once a GIS data table exceeds a few thousand rows, you will want to build an index to speed up spatial searches of the data (unless all your searches are based on attributes, in which case you'll want to build a normal index on the attribute fields)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2021 #, no-c-format msgid "The syntax for building a GiST index on a \"geometry\" column is as follows:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2024 #, no-c-format msgid "CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2025 #, no-c-format msgid "The above syntax will always build a 2D-index. To get the an n-dimensional index supported in PostGIS 2.0+ for the geometry type, you can create one using this syntax" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2026 #, no-c-format msgid "CREATE INDEX [indexname] ON [tablename] USING GIST ([geometryfield] gist_geometry_ops_nd);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2028 #, no-c-format msgid "Building a spatial index is a computationally intensive exercise: on tables of around 1 million rows, on a 300MHz Solaris machine, we have found building a GiST index takes about 1 hour. After building an index, it is important to force PostgreSQL to collect table statistics, which are used to optimize query plans:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2034 #, no-c-format msgid "" "VACUUM ANALYZE [table_name] [(column_name)];\n" "-- This is only needed for PostgreSQL 7.4 installations and below\n" "SELECT UPDATE_GEOMETRY_STATS([table_name], [column_name]);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2036 #, no-c-format msgid "GiST indexes have two advantages over R-Tree indexes in PostgreSQL. Firstly, GiST indexes are \"null safe\", meaning they can index columns which include null values. Secondly, GiST indexes support the concept of \"lossiness\" which is important when dealing with GIS objects larger than the PostgreSQL 8K page size. Lossiness allows PostgreSQL to store only the \"important\" part of an object in an index -- in the case of GIS objects, just the bounding box. GIS objects larger than 8K will cause R-Tree indexes to fail in the process of being built." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2048 #, no-c-format msgid "Using Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2050 #, no-c-format msgid "Ordinarily, indexes invisibly speed up data access: once the index is built, the query planner transparently decides when to use index information to speed up a query plan. Unfortunately, the PostgreSQL query planner does not optimize the use of GiST indexes well, so sometimes searches which should use a spatial index instead default to a sequence scan of the whole table." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2057 #, no-c-format msgid "If you find your spatial indexes are not being used (or your attribute indexes, for that matter) there are a couple things you can do:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2063 #, no-c-format msgid "Firstly, make sure statistics are gathered about the number and distributions of values in a table, to provide the query planner with better information to make decisions around index usage. For PostgreSQL 7.4 installations and below this is done by running update_geometry_stats([table_name, column_name]) (compute distribution) and VACUUM ANALYZE [table_name] [column_name] (compute number of values). Starting with PostgreSQL 8.0 running VACUUM ANALYZE will do both operations. You should regularly vacuum your databases anyways -- many PostgreSQL DBAs have VACUUM run as an off-peak cron job on a regular basis." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2077 #, no-c-format msgid "If vacuuming does not work, you can force the planner to use the index information by using the SET ENABLE_SEQSCAN=OFF command. You should only use this command sparingly, and only on spatially indexed queries: generally speaking, the planner knows better than you do about when to use normal B-Tree indexes. Once you have run your query, you should consider setting ENABLE_SEQSCAN back on, so that other queries will utilize the planner as normal." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2087 #, no-c-format msgid "As of version 0.6, it should not be necessary to force the planner to use the index with ENABLE_SEQSCAN." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2094 #, no-c-format msgid "If you find the planner wrong about the cost of sequential vs index scans try reducing the value of random_page_cost in postgresql.conf or using SET random_page_cost=#. Default value for the parameter is 4, try setting it to 1 or 2. Decrementing the value makes the planner more inclined of using Index scans." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2105 #, no-c-format msgid "Complex Queries" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2107 #, no-c-format msgid "The raison d'etre of spatial database functionality is performing queries inside the database which would ordinarily require desktop GIS functionality. Using PostGIS effectively requires knowing what spatial functions are available, and ensuring that appropriate indexes are in place to provide good performance. The SRID of 312 used in these examples is purely for demonstration. You should be using a REAL SRID listed in the the spatial_ref_sys table and one that matches the projection of your data. If your data has no spatial reference system specified, you should be THINKING very thoughtfully why it doesn't and maybe it should. If your reason is because you are modeling something that doesn't have a geographic spatial reference system defined such as the internals of a molecule or a good location on Mars to transport the human race in the event of a nuclear holocaust, then simply leave out the SRID or make one up and insert it in the spatial_ref_sys table." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2121 #, no-c-format msgid "Taking Advantage of Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2123 #, no-c-format msgid "When constructing a query it is important to remember that only the bounding-box-based operators such as && can take advantage of the GiST spatial index. Functions such as ST_Distance() cannot use the index to optimize their operation. For example, the following query would be quite slow on a large table:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2130 #, no-c-format msgid "" "SELECT the_geom\n" "FROM geom_table\n" "WHERE ST_Distance(the_geom, ST_GeomFromText('POINT(100000 200000)', 312)) < 100" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2132 #, no-c-format msgid "This query is selecting all the geometries in geom_table which are within 100 units of the point (100000, 200000). It will be slow because it is calculating the distance between each point in the table and our specified point, ie. one ST_Distance() calculation for each row in the table. We can avoid this by using the && operator to reduce the number of distance calculations required:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2139 #, no-c-format msgid "" "SELECT the_geom\n" "FROM geom_table\n" "WHERE ST_DWithin(the_geom, ST_MakeEnvelope(90900, 190900, 100100, 200100,312), 100)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2141 #, no-c-format msgid "This query selects the same geometries, but it does it in a more efficient way. Assuming there is a GiST index on the_geom, the query planner will recognize that it can use the index to reduce the number of rows before calculating the result of the ST_distance() function. Notice that the ST_MakeEnvelope geometry which is used in the && operation is a 200 unit square box centered on the original point - this is our \"query box\". The && operator uses the index to quickly reduce the result set down to only those geometries which have bounding boxes that overlap the \"query box\". Assuming that our query box is much smaller than the extents of the entire geometry table, this will drastically reduce the number of distance calculations that need to be done." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2155 #, no-c-format msgid "Change in Behavior" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2157 #, no-c-format msgid "As of PostGIS 1.3.0, most of the Geometry Relationship Functions, with the notable exceptions of ST_Disjoint and ST_Relate, include implicit bounding box overlap operators." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2164 #, no-c-format msgid "Examples of Spatial SQL" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2166 #, no-c-format msgid "The examples in this section will make use of two tables, a table of linear roads, and a table of polygonal municipality boundaries. The table definitions for the bc_roads table is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2170 #, no-c-format msgid "" "Column | Type | Description\n" "------------+-------------------+-------------------\n" "gid | integer | Unique ID\n" "name | character varying | Road Name\n" "the_geom | geometry | Location Geometry (Linestring)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2172 #, no-c-format msgid "The table definition for the bc_municipality table is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2175 #, no-c-format msgid "" "Column | Type | Description\n" "-----------+-------------------+-------------------\n" "gid | integer | Unique ID\n" "code | integer | Unique ID\n" "name | character varying | City / Town Name\n" "the_geom | geometry | Location Geometry (Polygon)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2180 #, no-c-format msgid "What is the total length of all roads, expressed in kilometers?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2185 #, no-c-format msgid "You can answer this question with a very simple piece of SQL:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2188 #, no-c-format msgid "" "SELECT sum(ST_Length(the_geom))/1000 AS km_roads FROM bc_roads;\n" "\n" "km_roads\n" "------------------\n" "70842.1243039643\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2194 #, no-c-format msgid "How large is the city of Prince George, in hectares?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2198 #, no-c-format msgid "This query combines an attribute condition (on the municipality name) with a spatial calculation (of the area):" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2202 #, no-c-format msgid "" "SELECT\n" " ST_Area(the_geom)/10000 AS hectares\n" "FROM bc_municipality\n" "WHERE name = 'PRINCE GEORGE';\n" "\n" "hectares\n" "------------------\n" "32657.9103824927\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2208 #, no-c-format msgid "What is the largest municipality in the province, by area?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2213 #, no-c-format msgid "This query brings a spatial measurement into the query condition. There are several ways of approaching this problem, but the most efficient is below:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2217 #, no-c-format msgid "" "SELECT\n" " name,\n" " ST_Area(the_geom)/10000 AS hectares\n" "FROM\n" " bc_municipality\n" "ORDER BY hectares DESC\n" "LIMIT 1;\n" "\n" "name | hectares\n" "---------------+-----------------\n" "TUMBLER RIDGE | 155020.02556131\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2219 #, no-c-format msgid "Note that in order to answer this query we have to calculate the area of every polygon. If we were doing this a lot it would make sense to add an area column to the table that we could separately index for performance. By ordering the results in a descending direction, and them using the PostgreSQL \"LIMIT\" command we can easily pick off the largest value without using an aggregate function like max()." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2231 #, no-c-format msgid "What is the length of roads fully contained within each municipality?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2236 #, no-c-format msgid "This is an example of a \"spatial join\", because we are bringing together data from two tables (doing a join) but using a spatial interaction condition (\"contained\") as the join condition rather than the usual relational approach of joining on a common key:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2242 #, no-c-format msgid "" "SELECT\n" " m.name,\n" " sum(ST_Length(r.the_geom))/1000 as roads_km\n" "FROM\n" " bc_roads AS r,\n" " bc_municipality AS m\n" "WHERE\n" " ST_Contains(m.the_geom,r.the_geom)\n" "GROUP BY m.name\n" "ORDER BY roads_km;\n" "\n" "name | roads_km\n" "----------------------------+------------------\n" "SURREY | 1539.47553551242\n" "VANCOUVER | 1450.33093486576\n" "LANGLEY DISTRICT | 833.793392535662\n" "BURNABY | 773.769091404338\n" "PRINCE GEORGE | 694.37554369147\n" "..." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2244 #, no-c-format msgid "This query takes a while, because every road in the table is summarized into the final result (about 250K roads for our particular example table). For smaller overlays (several thousand records on several hundred) the response can be very fast." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2253 #, no-c-format msgid "Create a new table with all the roads within the city of Prince George." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2258 #, no-c-format msgid "This is an example of an \"overlay\", which takes in two tables and outputs a new table that consists of spatially clipped or cut resultants. Unlike the \"spatial join\" demonstrated above, this query actually creates new geometries. An overlay is like a turbo-charged spatial join, and is useful for more exact analysis work:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2265 #, no-c-format msgid "" "CREATE TABLE pg_roads as\n" "SELECT\n" " ST_Intersection(r.the_geom, m.the_geom) AS intersection_geom,\n" " ST_Length(r.the_geom) AS rd_orig_length,\n" " r.*\n" "FROM\n" " bc_roads AS r,\n" " bc_municipality AS m\n" "WHERE m.name = 'PRINCE GEORGE' AND ST_Intersects(r.the_geom, m.the_geom);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2271 #, no-c-format msgid "What is the length in kilometers of \"Douglas St\" in Victoria?" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2276 #, no-c-format msgid "" "SELECT\n" " sum(ST_Length(r.the_geom))/1000 AS kilometers\n" "FROM\n" " bc_roads r,\n" " bc_municipality m\n" "WHERE r.name = 'Douglas St' AND m.name = 'VICTORIA'\n" " AND ST_Contains(m.the_geom, r.the_geom) ;\n" "\n" "kilometers\n" "------------------\n" "4.89151904172838\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2282 #, no-c-format msgid "What is the largest municipality polygon that has a hole?" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2287 #, no-c-format msgid "" "SELECT gid, name, ST_Area(the_geom) AS area\n" "FROM bc_municipality\n" "WHERE ST_NRings(the_geom) > 1\n" "ORDER BY area DESC LIMIT 1;\n" "\n" "gid | name | area\n" "-----+--------------+------------------\n" "12 | SPALLUMCHEEN | 257374619.430216\n" "(1 row)" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/faq.xml.pot0000644000000000000000000004555512025614072021050 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: faq.xml:3 #, no-c-format msgid "PostGIS Frequently Asked Questions" msgstr "" #. Tag: para #: faq.xml:8 #, no-c-format msgid "My applications and desktop tools worked with PostGIS 1.5,but they don't work with PostGIS 2.0. How do I fix this?" msgstr "" #. Tag: para #: faq.xml:12 #, no-c-format msgid "A lot of deprecated functions were removed from the PostGIS code base in PostGIS 2.0. This has affected applications in addition to third-party tools such as Geoserver, MapServer, QuantumGIS, and OpenJump to name a few. There are a couple of ways to resolve this. For the third-party apps, you can try to upgrade to the latest versions of these which have many of these issues fixed. For your own code, you can change your code to not use the functions removed. Most of these functions are non ST_ aliases of ST_Union, ST_Length etc. and as a last resort, install the whole of legacy.sql or just the portions of legacy.sql you need." msgstr "" #. Tag: para #: faq.xml:18 #, no-c-format msgid "The legacy.sql file is located in the same folder as postgis.sql. You can install this file after you have installed postgis.sql and spatial_ref_sys.sql to get back all the 200 some-odd old functions we removed." msgstr "" #. Tag: para #: faq.xml:24 #, no-c-format msgid "I'm running PostgreSQL 9.0 and I can no longer read/view geometries in OpenJump, Safe FME, and some other tools?" msgstr "" #. Tag: para #: faq.xml:28 #, no-c-format msgid "In PostgreSQL 9.0+, the default encoding for bytea data has been changed to hex and older JDBC drivers still assume escape format. This has affected some applications such as Java applications using older JDBC drivers or .NET applications that use the older npgsql driver that expect the old behavior of ST_AsBinary. There are two approaches to getting this to work again." msgstr "" #. Tag: para #: faq.xml:32 #, no-c-format msgid "You can upgrade your JDBC driver to the latest PostgreSQL 9.0 version which you can get from http://jdbc.postgresql.org/download.html" msgstr "" #. Tag: para #: faq.xml:34 #, no-c-format msgid "If you are running a .NET app, you can use Npgsql 2.0.11 or higher which you can download from http://pgfoundry.org/frs/?group_id=1000140 and as described on Francisco Figueiredo's NpgSQL 2.0.11 released blog entry" msgstr "" #. Tag: para #: faq.xml:38 #, no-c-format msgid "If upgrading your PostgreSQL driver is not an option, then you can set the default back to the old behavior with the following change:" msgstr "" #. Tag: programlisting #: faq.xml:39 #, no-c-format msgid "ALTER DATABASE mypostgisdb SET bytea_output='escape';" msgstr "" #. Tag: para #: faq.xml:46 #, no-c-format msgid "I tried to use PgAdmin to view my geometry column and it is blank, what gives?" msgstr "" #. Tag: para #: faq.xml:50 #, no-c-format msgid "PgAdmin doesn't show anything for large geometries. The best ways to verify you do have data in your geometry columns are?" msgstr "" #. Tag: programlisting #: faq.xml:53 #, no-c-format msgid "" "-- this should return no records if all your geom fields are filled in \n" "SELECT somefield FROM mytable WHERE geom IS NULL;" msgstr "" #. Tag: programlisting #: faq.xml:55 #, no-c-format msgid "" "-- To tell just how large your geometry is do a query of the form\n" "--which will tell you the most number of points you have in any of your geometry columns\n" "SELECT MAX(ST_NPoints(geom)) FROM sometable;" msgstr "" #. Tag: para #: faq.xml:61 #, no-c-format msgid "What kind of geometric objects can I store?" msgstr "" #. Tag: para #: faq.xml:65 #, no-c-format msgid "You can store point, line, polygon, multipoint, multiline, multipolygon, and geometrycollections. In PostGIS 2.0 and above you can also store TINS and Polyhedral Surfaces in the basic geometry type. These are specified in the Open GIS Well Known Text Format (with XYZ,XYM,XYZM extensions). There are three data types currently supported. The standard OGC geometry data type which uses a planar coordinate system for measurement, the geography data type which uses a geodetic coordinate system (not OGC, but you'll find a similar type in Microsoft SQL Server 2008+). Only WGS 84 long lat (SRID:4326) is supported by the geography data type. The newest family member of the PostGIS spatial type family is raster for storing and analyzing raster data. Raster has its very own FAQ. Refer to and for more details." msgstr "" #. Tag: para #: faq.xml:78 #, no-c-format msgid "I'm all confused. Which data store should I use geometry or geography?" msgstr "" #. Tag: para #: faq.xml:82 #, no-c-format msgid "Short Answer: geography is a new data type that supports long range distances measurements, but most computations on it are currently slower than they are on geometry. If you use geography -- you don't need to learn much about planar coordinate systems. Geography is generally best if all you care about is measuring distances and lengths and you have data from all over the world. Geometry data type is an older data type that has many more functions supporting it, enjoys greater support from third party tools, and operations on it are generally faster -- sometimes as much as 10 fold faster for larger geometries. Geometry is best if you are pretty comfortable with spatial reference systems or you are dealing with localized data where all your data fits in a single spatial reference system (SRID), or you need to do a lot of spatial processing. Note: It is fairly easy to do one-off conversions between the two types to gain the benefits of each. Refer to to see what is currently supported and what is not." msgstr "" #. Tag: para #: faq.xml:93 #, no-c-format msgid "Long Answer: Refer to our more lengthy discussion in the and function type matrix." msgstr "" #. Tag: para #: faq.xml:101 #, no-c-format msgid "I have more intense questions about geography, such as how big of a geographic region can I stuff in a geography column and still get reasonable answers. Are there limitations such as poles, everything in the field must fit in a hemisphere (like SQL Server 2008 has), speed etc?" msgstr "" #. Tag: para #: faq.xml:105 #, no-c-format msgid "Your questions are too deep and complex to be adequately answered in this section. Please refer to our ." msgstr "" #. Tag: para #: faq.xml:112 #, no-c-format msgid "How do I insert a GIS object into the database?" msgstr "" #. Tag: para #: faq.xml:116 #, no-c-format msgid "First, you need to create a table with a column of type \"geometry\" or \"geography\" to hold your GIS data. Storing geography type data is a little different than storing geometry. Refer to for details on storing geography." msgstr "" #. Tag: para #: faq.xml:120 #, no-c-format msgid "For geometry: Connect to your database with psql and try the following SQL:" msgstr "" #. Tag: programlisting #: faq.xml:124 #, no-c-format msgid "" "CREATE TABLE gtest ( ID int4, NAME varchar(20) );\n" "SELECT AddGeometryColumn('', 'gtest','geom',-1,'LINESTRING',2);" msgstr "" #. Tag: para #: faq.xml:126 #, no-c-format msgid "If the geometry column addition fails, you probably have not loaded the PostGIS functions and objects into this database. See the ." msgstr "" #. Tag: para #: faq.xml:130 #, no-c-format msgid "Then, you can insert a geometry into the table using a SQL insert statement. The GIS object itself is formatted using the OpenGIS Consortium \"well-known text\" format:" msgstr "" #. Tag: programlisting #: faq.xml:134 #, no-c-format msgid "" "INSERT INTO gtest (ID, NAME, GEOM) \n" "VALUES (\n" " 1, \n" " 'First Geometry', \n" " ST_GeomFromText('LINESTRING(2 3,4 5,6 5,7 8)', -1)\n" ");" msgstr "" #. Tag: para #: faq.xml:136 #, no-c-format msgid "For more information about other GIS objects, see the object reference." msgstr "" #. Tag: para #: faq.xml:139 #, no-c-format msgid "To view your GIS data in the table:" msgstr "" #. Tag: programlisting #: faq.xml:141 #, no-c-format msgid "SELECT id, name, ST_AsText(geom) AS geom FROM gtest;" msgstr "" #. Tag: para #: faq.xml:143 #, no-c-format msgid "The return value should look something like this:" msgstr "" #. Tag: programlisting #: faq.xml:145 #, no-c-format msgid "" "id | name | geom\n" "----+----------------+-----------------------------\n" " 1 | First Geometry | LINESTRING(2 3,4 5,6 5,7 8) \n" "(1 row)" msgstr "" #. Tag: para #: faq.xml:151 #, no-c-format msgid "How do I construct a spatial query?" msgstr "" #. Tag: para #: faq.xml:155 #, no-c-format msgid "The same way you construct any other database query, as an SQL combination of return values, functions, and boolean tests." msgstr "" #. Tag: para #: faq.xml:158 #, no-c-format msgid "For spatial queries, there are two issues that are important to keep in mind while constructing your query: is there a spatial index you can make use of; and, are you doing expensive calculations on a large number of geometries." msgstr "" #. Tag: para #: faq.xml:163 #, no-c-format msgid "In general, you will want to use the \"intersects operator\" (&&) which tests whether the bounding boxes of features intersect. The reason the && operator is useful is because if a spatial index is available to speed up the test, the && operator will make use of this. This can make queries much much faster." msgstr "" #. Tag: para #: faq.xml:170 #, no-c-format msgid "You will also make use of spatial functions, such as Distance(), ST_Intersects(), ST_Contains() and ST_Within(), among others, to narrow down the results of your search. Most spatial queries include both an indexed test and a spatial function test. The index test serves to limit the number of return tuples to only tuples that might meet the condition of interest. The spatial functions are then use to test the condition exactly." msgstr "" #. Tag: programlisting #: faq.xml:178 #, no-c-format msgid "" "SELECT id, the_geom \n" "FROM thetable \n" "WHERE \n" " ST_Contains(the_geom,'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))');" msgstr "" #. Tag: para #: faq.xml:184 #, no-c-format msgid "How do I speed up spatial queries on large tables?" msgstr "" #. Tag: para #: faq.xml:188 #, no-c-format msgid "Fast queries on large tables is the raison d'etre of spatial databases (along with transaction support) so having a good index is important." msgstr "" #. Tag: para #: faq.xml:192 #, no-c-format msgid "To build a spatial index on a table with a geometry column, use the \"CREATE INDEX\" function as follows:" msgstr "" #. Tag: programlisting #: faq.xml:196 #, no-c-format msgid "CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] );" msgstr "" #. Tag: para #: faq.xml:198 #, no-c-format msgid "The \"USING GIST\" option tells the server to use a GiST (Generalized Search Tree) index." msgstr "" #. Tag: para #: faq.xml:202 #, no-c-format msgid "GiST indexes are assumed to be lossy. Lossy indexes uses a proxy object (in the spatial case, a bounding box) for building the index." msgstr "" #. Tag: para #: faq.xml:207 #, no-c-format msgid "You should also ensure that the PostgreSQL query planner has enough information about your index to make rational decisions about when to use it. To do this, you have to \"gather statistics\" on your geometry tables." msgstr "" #. Tag: para #: faq.xml:212 #, no-c-format msgid "For PostgreSQL 8.0.x and greater, just run the VACUUM ANALYZE command." msgstr "" #. Tag: para #: faq.xml:215 #, no-c-format msgid "For PostgreSQL 7.4.x and below, run the SELECT UPDATE_GEOMETRY_STATS() command." msgstr "" #. Tag: para #: faq.xml:222 #, no-c-format msgid "Why aren't PostgreSQL R-Tree indexes supported?" msgstr "" #. Tag: para #: faq.xml:226 #, no-c-format msgid "Early versions of PostGIS used the PostgreSQL R-Tree indexes. However, PostgreSQL R-Trees have been completely discarded since version 0.6, and spatial indexing is provided with an R-Tree-over-GiST scheme." msgstr "" #. Tag: para #: faq.xml:231 #, no-c-format msgid "Our tests have shown search speed for native R-Tree and GiST to be comparable. Native PostgreSQL R-Trees have two limitations which make them undesirable for use with GIS features (note that these limitations are due to the current PostgreSQL native R-Tree implementation, not the R-Tree concept in general):" msgstr "" #. Tag: para #: faq.xml:239 #, no-c-format msgid "R-Tree indexes in PostgreSQL cannot handle features which are larger than 8K in size. GiST indexes can, using the \"lossy\" trick of substituting the bounding box for the feature itself." msgstr "" #. Tag: para #: faq.xml:246 #, no-c-format msgid "R-Tree indexes in PostgreSQL are not \"null safe\", so building an index on a geometry column which contains null geometries will fail." msgstr "" #. Tag: para #: faq.xml:256 #, no-c-format msgid "Why should I use the AddGeometryColumn() function and all the other OpenGIS stuff?" msgstr "" #. Tag: para #: faq.xml:261 #, no-c-format msgid "If you do not want to use the OpenGIS support functions, you do not have to. Simply create tables as in older versions, defining your geometry columns in the CREATE statement. All your geometries will have SRIDs of -1, and the OpenGIS meta-data tables will not be filled in properly. However, this will cause most applications based on PostGIS to fail, and it is generally suggested that you do use AddGeometryColumn() to create geometry tables." msgstr "" #. Tag: para #: faq.xml:270 #, no-c-format msgid "MapServer is one application which makes use of the geometry_columns meta-data. Specifically, MapServer can use the SRID of the geometry column to do on-the-fly reprojection of features into the correct map projection." msgstr "" #. Tag: para #: faq.xml:279 #, no-c-format msgid "What is the best way to find all objects within a radius of another object?" msgstr "" #. Tag: para #: faq.xml:284 #, no-c-format msgid "To use the database most efficiently, it is best to do radius queries which combine the radius test with a bounding box test: the bounding box test uses the spatial index, giving fast access to a subset of data which the radius test is then applied to." msgstr "" #. Tag: para #: faq.xml:289 #, no-c-format msgid "The ST_DWithin(geometry, geometry, distance) function is a handy way of performing an indexed distance search. It works by creating a search rectangle large enough to enclose the distance radius, then performing an exact distance search on the indexed subset of results." msgstr "" #. Tag: para #: faq.xml:295 #, no-c-format msgid "For example, to find all objects with 100 meters of POINT(1000 1000) the following query would work well:" msgstr "" #. Tag: programlisting #: faq.xml:298 #, no-c-format msgid "" "SELECT * FROM geotable \n" "WHERE ST_DWithin(geocolumn, 'POINT(1000 1000)', 100.0);" msgstr "" #. Tag: para #: faq.xml:304 #, no-c-format msgid "How do I perform a coordinate reprojection as part of a query?" msgstr "" #. Tag: para #: faq.xml:309 #, no-c-format msgid "To perform a reprojection, both the source and destination coordinate systems must be defined in the SPATIAL_REF_SYS table, and the geometries being reprojected must already have an SRID set on them. Once that is done, a reprojection is as simple as referring to the desired destination SRID. The below projects a geometry to NAD 83 long lat. The below will only work if the srid of the_geom is not -1 (not undefined spatial ref)" msgstr "" #. Tag: programlisting #: faq.xml:316 #, no-c-format msgid "SELECT ST_Transform(the_geom,4269) FROM geotable;" msgstr "" #. Tag: para #: faq.xml:322 #, no-c-format msgid "I did an ST_AsEWKT and ST_AsText on my rather large geometry and it returned blank field. What gives?" msgstr "" #. Tag: para #: faq.xml:326 #, no-c-format msgid "You are probably using PgAdmin or some other tool that doesn't output large text. If your geometry is big enough, it will appear blank in these tools. Use PSQL if you really need to see it or output it in WKT." msgstr "" #. Tag: programlisting #: faq.xml:329 #, no-c-format msgid "" "--To check number of geometries are really blank\n" " SELECT count(gid) FROM geotable WHERE the_geom IS NULL;" msgstr "" #. Tag: para #: faq.xml:335 #, no-c-format msgid "When I do an ST_Intersects, it says my two geometries don't intersect when I KNOW THEY DO. What gives?" msgstr "" #. Tag: para #: faq.xml:339 #, no-c-format msgid "This generally happens in two common cases. Your geometry is invalid -- check or you are assuming they intersect because ST_AsText truncates the numbers and you have lots of decimals after it is not showing you." msgstr "" #. Tag: para #: faq.xml:347 #, no-c-format msgid "I am releasing software that uses PostGIS, does that mean my software has to be licensed using the GPL like PostGIS? Will I have to publish all my code if I use PostGIS?" msgstr "" #. Tag: para #: faq.xml:351 #, no-c-format msgid "Almost certainly not. As an example, consider Oracle database running on Linux. Linux is GPL, Oracle is not, does Oracle running on Linux have to be distributed using the GPL? No. So your software can use a PostgreSQL/PostGIS database as much as it wants and be under any license you like." msgstr "" #. Tag: para #: faq.xml:352 #, no-c-format msgid "The only exception would be if you made changes to the PostGIS source code, and distributed your changed version of PostGIS. In that case you would have to share the code of your changed PostGIS (but not the code of applications running on top of it). Even in this limited case, you would still only have to distribute source code to people you distributed binaries to. The GPL does not require that you publish your source code, only that you share it with people you give binaries to." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/extras_tigergeocoder.xml.pot0000644000000000000000000021752512035636370024515 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-11 21:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: para #: extras_tigergeocoder.xml:6 #, no-c-format msgid "A plpgsql based geocoder written to work with the TIGER (Topologically Integrated Geographic Encoding and Referencing system ) / Line and Master Address database export released by the US Census Bureau. In versions prior to 2008 the TIGER files were released in ASCII format. The older geocoder used to work with that format and is available in PostGIS source 1.5 and below in extras/tiger_geocoder/tiger_2006andbefore." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:8 #, no-c-format msgid "There are four components to the geocoder: the data loader functions, the address normalizer, the address geocoder, and the reverse geocoder. The latest version updated to use the TIGER 2011 census data is located in the extras/tiger_geocoder/tiger_2011 folder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:9 #, no-c-format msgid "Although it is designed specifically for the US, a lot of the concepts and functions are applicable and can be adapted to work with other country address and road networks." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:10 #, no-c-format msgid "The script builds a schema called tiger to house all the tiger related functions, reusable lookup data such as road type prefixes, suffixes, states, various control tables for managing data load, and skeleton base tables from which all the tiger loaded tables inherit from." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:11 #, no-c-format msgid "Another schema called tiger_data is also created which houses all the census data for each state that the loader downloads from Census site and loads into the database. In the current model, each set of state tables is prefixed with the state code e.g ma_addr, ma_edges etc with constraints to enforce only that state data. Each of these tables inherits from the tables addr, faces, edges, etc located in the tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:13 #, no-c-format msgid "All the geocode functions only reference the base tables, so there is no requirement that the data schema be called tiger_data or that data can't be further partitioned into other schemas -- e.g a different schema for each state, as long as all the tables inherit from the tables in the tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:17 #, no-c-format msgid "If you are using tiger geocoder (tiger_2010), you can upgrade the scripts using the accompanying upgrade_geocoder.bat / .sh scripts in tiger_2011. One major change between tiger_2010 and tiger_2011 is that the county and county and state tables are no longer broken out by state. We'll be refining the upgrade scripts until release. If you have data from tiger_2010 and want replace with tiger_2011 refer to " msgstr "" #. Tag: para #: extras_tigergeocoder.xml:24 #, no-c-format msgid "Design:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:25 #, no-c-format msgid "The goal of this project is to build a fully functional geocoder that can process an arbitrary United States address string and using normalized TIGER census data, produce a point geometry and rating reflecting the location of the given address and likeliness of the location. The higher the rating number the worse the result." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:27 #, no-c-format msgid "The reverse_geocode function, introduced in PostGIS 2.0.0 is useful for deriving the street address and cross streets of a GPS location." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:28 #, no-c-format msgid "The geocoder should be simple for anyone familiar with PostGIS to install and use, and should be easily installable and usable on all platforms supported by PostGIS." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:29 #, no-c-format msgid "It should be robust enough to function properly despite formatting and spelling errors." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:30 #, no-c-format msgid "It should be extensible enough to be used with future data updates, or alternate data sources with a minimum of coding changes." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:32 #, no-c-format msgid "The tiger schema must be added to the database search path for the functions to work properly." msgstr "" #. Tag: title #: extras_tigergeocoder.xml:36 #, no-c-format msgid "Tiger Geocoder" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:38 #, no-c-format msgid "There are a couple other open source geocoders for PostGIS, that unlike tiger geocoder have the advantage of multi-country geocoding support" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:40 #, no-c-format msgid "Nominatim and uses OpenStreetMap gazeteer formatted data. It requires osm2pgsql for loading the data, PostgreSQL 8.4+ and PostGIS 1.5+ to function. It is packaged as a webservice interface and seems designed to be called as a webservice. Just like the tiger geocoder, it has both a geocoder and a reverse geocoder component. From the documentation, it is unclear if it has a pure SQL interface like the tiger geocoder, or if a good deal of the logic is implemented in the web interface." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:43 #, no-c-format msgid "GIS Graphy also utilizes PostGIS and like Nominatim works with OpenStreetMap (OSM) data. It comes with a loader to load OSM data and similar to Nominatim is capable of geocoding not just US. Much like Nominatim, it runs as a webservice and relies on Java 1.5, Servlet apps, Solr. GisGraphy is cross-platform and also has a reverse geocoder among some other neat features." msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:48 #, no-c-format msgid "Drop_Indexes_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:50 #, no-c-format msgid "Generates a script that drops all non-primary key and non-unique indexes on tiger schema and user specified schema. Defaults schema to tiger_data if no schema is specified." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:55 #, no-c-format msgid "text Drop_Indexes_Generate_Script text param_schema=tiger_data" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:63 extras_tigergeocoder.xml:106 extras_tigergeocoder.xml:148 extras_tigergeocoder.xml:204 extras_tigergeocoder.xml:266 extras_tigergeocoder.xml:311 extras_tigergeocoder.xml:351 extras_tigergeocoder.xml:390 extras_tigergeocoder.xml:435 extras_tigergeocoder.xml:493 extras_tigergeocoder.xml:550 extras_tigergeocoder.xml:605 extras_tigergeocoder.xml:650 extras_tigergeocoder.xml:728 extras_tigergeocoder.xml:775 extras_tigergeocoder.xml:847 extras_tigergeocoder.xml:912 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:65 #, no-c-format msgid "Generates a script that drops all non-primary key and non-unique indexes on tiger schema and user specified schema. Defaults schema to tiger_data if no schema is specified." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:66 #, no-c-format msgid "This is useful for minimizing index bloat that may confuse the query planner or take up unnecessary space. Use in combination with to add just the indexes used by the geocoder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:69 extras_tigergeocoder.xml:154 extras_tigergeocoder.xml:273 extras_tigergeocoder.xml:355 extras_tigergeocoder.xml:398 extras_tigergeocoder.xml:453 extras_tigergeocoder.xml:613 extras_tigergeocoder.xml:801 extras_tigergeocoder.xml:873 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:76 extras_tigergeocoder.xml:118 extras_tigergeocoder.xml:161 extras_tigergeocoder.xml:405 extras_tigergeocoder.xml:460 extras_tigergeocoder.xml:518 extras_tigergeocoder.xml:573 extras_tigergeocoder.xml:620 extras_tigergeocoder.xml:696 extras_tigergeocoder.xml:738 extras_tigergeocoder.xml:806 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:77 #, no-c-format msgid "" "SELECT drop_indexes_generate_script() As actionsql;\n" "actionsql\n" "---------------------------------------------------------\n" "DROP INDEX tiger.idx_tiger_countysub_lookup_lower_name;\n" "DROP INDEX tiger.idx_tiger_edges_countyfp;\n" "DROP INDEX tiger.idx_tiger_faces_countyfp;\n" "DROP INDEX tiger.tiger_place_the_geom_gist;\n" "DROP INDEX tiger.tiger_edges_the_geom_gist;\n" "DROP INDEX tiger.tiger_state_the_geom_gist;\n" "DROP INDEX tiger.idx_tiger_addr_least_address;\n" "DROP INDEX tiger.idx_tiger_addr_tlid;\n" "DROP INDEX tiger.idx_tiger_addr_zip;\n" "DROP INDEX tiger.idx_tiger_county_countyfp;\n" "DROP INDEX tiger.idx_tiger_county_lookup_lower_name;\n" "DROP INDEX tiger.idx_tiger_county_lookup_snd_name;\n" "DROP INDEX tiger.idx_tiger_county_lower_name;\n" "DROP INDEX tiger.idx_tiger_county_snd_name;\n" "DROP INDEX tiger.idx_tiger_county_the_geom_gist;\n" "DROP INDEX tiger.idx_tiger_countysub_lookup_snd_name;\n" "DROP INDEX tiger.idx_tiger_cousub_countyfp;\n" "DROP INDEX tiger.idx_tiger_cousub_cousubfp;\n" "DROP INDEX tiger.idx_tiger_cousub_lower_name;\n" "DROP INDEX tiger.idx_tiger_cousub_snd_name;\n" "DROP INDEX tiger.idx_tiger_cousub_the_geom_gist;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_addr_least_address;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_addr_tlid;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_addr_zip;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_countyfp;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_lower_name;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_snd_name;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_lower_name;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_snd_name;\n" ":\n" ":" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:83 extras_tigergeocoder.xml:125 extras_tigergeocoder.xml:168 extras_tigergeocoder.xml:235 extras_tigergeocoder.xml:289 extras_tigergeocoder.xml:328 extras_tigergeocoder.xml:368 extras_tigergeocoder.xml:412 extras_tigergeocoder.xml:470 extras_tigergeocoder.xml:528 extras_tigergeocoder.xml:582 extras_tigergeocoder.xml:627 extras_tigergeocoder.xml:706 extras_tigergeocoder.xml:749 extras_tigergeocoder.xml:821 extras_tigergeocoder.xml:889 extras_tigergeocoder.xml:929 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:84 extras_tigergeocoder.xml:413 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:90 #, no-c-format msgid "Drop_Nation_Tables_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:92 #, no-c-format msgid "Generates a script that drops all tables in the specified schema that start with county_all, state_all or stae code followed by county or state." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:97 extras_tigergeocoder.xml:139 #, no-c-format msgid "text Drop_State_Tables_Generate_Script text param_state text param_schema=tiger_data" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:108 #, no-c-format msgid "Generates a script that drops all tables in the specified schema that start with county_all, state_all or stae code followed by county or state. This is needed if you are upgrading from tiger_2010 to tiger_2011 data." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:111 extras_tigergeocoder.xml:316 extras_tigergeocoder.xml:567 extras_tigergeocoder.xml:916 #, no-c-format msgid "Availability: 2.1.0" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:119 #, no-c-format msgid "" "SELECT drop_nation_tables_generate_script();\n" "DROP TABLE tiger_data.county_all;\n" "DROP TABLE tiger_data.county_all_lookup;\n" "DROP TABLE tiger_data.state_all;\n" "DROP TABLE tiger_data.ma_county;\n" "DROP TABLE tiger_data.ma_state;" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:132 #, no-c-format msgid "Drop_State_Tables_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:134 #, no-c-format msgid "Generates a script that drops all tables in the specified schema that are prefixed with the state abbreviation. Defaults schema to tiger_data if no schema is specified." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:150 #, no-c-format msgid "Generates a script that drops all tables in the specified schema that are prefixed with the state abbreviation. Defaults schema to tiger_data if no schema is specified. This function is useful for dropping tables of a state just before you reload a state in case something went wrong during your previous load." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:162 #, no-c-format msgid "" "SELECT drop_state_tables_generate_script('PA');\n" "DROP TABLE tiger_data.pa_addr;\n" "DROP TABLE tiger_data.pa_county;\n" "DROP TABLE tiger_data.pa_county_lookup;\n" "DROP TABLE tiger_data.pa_cousub;\n" "DROP TABLE tiger_data.pa_edges;\n" "DROP TABLE tiger_data.pa_faces;\n" "DROP TABLE tiger_data.pa_featnames;\n" "DROP TABLE tiger_data.pa_place;\n" "DROP TABLE tiger_data.pa_state;\n" "DROP TABLE tiger_data.pa_zip_lookup_base;\n" "DROP TABLE tiger_data.pa_zip_state;\n" "DROP TABLE tiger_data.pa_zip_state_loc;" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:174 #, no-c-format msgid "Geocode" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:176 #, no-c-format msgid "Takes in an address as a string (or other normalized address) and outputs a set of possible locations which include a point geometry in NAD 83 long lat, a normalized address for each, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10, and restrict_region (defaults to NULL)" msgstr "" #. Tag: funcsynopsis #: extras_tigergeocoder.xml:181 #, no-c-format msgid " setof record geocode varchar address integer max_results=10 geometry restrict_region=NULL norm_addy OUT addy geometry OUT geomout integer OUT rating setof record geocode norm_addy in_addy integer max_results=10 geometry restrict_region=NULL norm_addy OUT addy geometry OUT geomout integer OUT rating " msgstr "" #. Tag: para #: extras_tigergeocoder.xml:206 #, no-c-format msgid "Takes in an address as a string (or already normalized address) and outputs a set of possible locations which include a point geometry in NAD 83 long lat, a normalized_address (addy) for each, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Uses Tiger data (edges,faces,addr), PostgreSQL fuzzy string matching (soundex,levenshtein) and PostGIS line interpolation functions to interpolate address along the Tiger edges. The higher the rating the less likely the geocode is right. The geocoded point is defaulted to offset 10 meters from center-line off to side (L/R) of street address is located on." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:210 #, no-c-format msgid "Enhanced: 2.0.0 to support Tiger 2010 structured data and revised some logic to improve speed, accuracy of geocoding, and to offset point from centerline to side of street address is located on. New parameter max_results useful for specifying ot just return the best result." msgstr "" #. Tag: title #: extras_tigergeocoder.xml:216 extras_tigergeocoder.xml:279 extras_tigergeocoder.xml:361 #, no-c-format msgid "Examples: Basic" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:217 #, no-c-format msgid "The below examples timings are on a 3.0 GHZ single processor Windows 7 machine with 2GB ram running PostgreSQL 9.1rc1/PostGIS 2.0 loaded with all of MA,MN,CA, RI state Tiger data loaded." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:218 #, no-c-format msgid "Exact matches are faster to compute (61ms)" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:219 #, no-c-format msgid "" "SELECT g.rating, ST_X(g.geomout) As lon, ST_Y(g.geomout) As lat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip \n" " FROM geocode('75 State Street, Boston MA 02109') As g; \n" " rating | lon | lat | stno | street | styp | city | st | zip \n" "--------+-------------------+------------------+------+--------+------+--------+----+-------\n" " 0 | -71.0556722990239 | 42.3589914927049 | 75 | State | St | Boston | MA | 02109" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:220 #, no-c-format msgid "Even if zip is not passed in the geocoder can guess (took about 122-150 ms)" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:221 #, no-c-format msgid "" "SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip \n" " FROM geocode('226 Hanover Street, Boston, MA',1) As g; \n" " rating | wktlonlat | stno | street | styp | city | st | zip \n" "--------+---------------------------+------+---------+------+--------+----+-------\n" " 1 | POINT(-71.05528 42.36316) | 226 | Hanover | St | Boston | MA | 02113" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:222 #, no-c-format msgid "Can handle misspellings and provides more than one possible solution with ratings and takes longer (500ms)." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:223 #, no-c-format msgid "" "SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip \n" " FROM geocode('31 - 37 Stewart Street, Boston, MA 02116') As g; \n" " rating | wktlonlat | stno | street | styp | city | st | zip \n" "--------+---------------------------+------+--------+------+--------+----+-------\n" " 70 | POINT(-71.06459 42.35113) | 31 | Stuart | St | Boston | MA | 02116" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:225 #, no-c-format msgid "Using to do a batch geocode of addresses. Easiest is to set max_results=1. Only process those not yet geocoded (have no rating)." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:226 #, no-c-format msgid "" "CREATE TABLE addresses_to_geocode(addid serial PRIMARY KEY, address text,\n" " lon numeric, lat numeric, new_address text, rating integer);\n" "\n" "INSERT INTO addresses_to_geocode(address)\n" "VALUES ('529 Main Street, Boston MA, 02129'),\n" " ('77 Massachusetts Avenue, Cambridge, MA 02139'),\n" " ('25 Wizard of Oz, Walaford, KS 99912323'),\n" " ('26 Capen Street, Medford, MA'),\n" " ('124 Mount Auburn St, Cambridge, Massachusetts 02138'),\n" " ('950 Main Street, Worcester, MA 01610');\n" " \n" "-- only update the first 3 addresses (323-704 ms - there are caching and shared memory effects so first geocode you do is always slower) --\n" "-- for large numbers of addresses you don't want to update all at once\n" "-- since the whole geocode must commit at once \n" "-- For this example we rejoin with LEFT JOIN \n" "-- and set to rating to -1 rating if no match \n" "-- to ensure we don't regeocode a bad address \n" "UPDATE addresses_to_geocode\n" " SET (rating, new_address, lon, lat) \n" " = ( COALESCE((g.geo).rating,-1), pprint_addy((g.geo).addy),\n" " ST_X((g.geo).geomout)::numeric(8,5), ST_Y((g.geo).geomout)::numeric(8,5) )\n" "FROM (SELECT addid \n" " FROM addresses_to_geocode \n" " WHERE rating IS NULL ORDER BY addid LIMIT 3) As a\n" " LEFT JOIN (SELECT addid, (geocode(address,1)) As geo\n" " FROM addresses_to_geocode As ag\n" " WHERE ag.rating IS NULL ORDER BY addid LIMIT 3) As g ON a.addid = g.addid\n" "WHERE a.addid = addresses_to_geocode.addid;\n" "\n" "result\n" "-----\n" "Query returned successfully: 3 rows affected, 480 ms execution time.\n" "\n" "SELECT * FROM addresses_to_geocode WHERE rating is not null;\n" "\n" " addid | address | lon | lat | new_address | rating \n" "-------+----------------------------------------------+-----------+----------+-------------------------------------------+--------\n" " 1 | 529 Main Street, Boston MA, 02129 | -71.07181 | 42.38359 | 529 Main St, Boston, MA 02129 | 0\n" " 2 | 77 Massachusetts Avenue, Cambridge, MA 02139 | -71.09428 | 42.35988 | 77 Massachusetts Ave, Cambridge, MA 02139 | 0\n" " 3 | 25 Wizard of Oz, Walaford, KS 99912323 | | | | -1" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:229 #, no-c-format msgid "Examples: Using Geometry filter" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:230 #, no-c-format msgid "" "SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, \n" " (addy).location As city, (addy).stateabbrev As st,(addy).zip \n" " FROM geocode('100 Federal Street, MA',\n" " 3, \n" " (SELECT ST_Union(the_geom) \n" " FROM place WHERE statefp = '25' AND name = 'Lynn')::geometry\n" " ) As g;\n" "\n" " rating | wktlonlat | stno | street | styp | city | st | zip\n" "--------+--------------------------+------+---------+------+------+----+-------\n" " 8 | POINT(-70.96796 42.4659) | 100 | Federal | St | Lynn | MA | 01905\n" "Total query runtime: 245 ms." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:236 #, no-c-format msgid ", , , , , " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:242 #, no-c-format msgid "Geocode_Intersection" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:244 #, no-c-format msgid "Takes in 2 streets that intersect and a state, city, zip, and outputs a set of possible locations on the first cross street that is at the intersection, also includes a point geometry in NAD 83 long lat, a normalized address for each location, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10" msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:250 #, no-c-format msgid "setof record geocode_intersection text roadway1 text roadway2 text in_state text in_city text in_zip integer max_results=10 norm_addy OUT addy geometry OUT geomout integer OUT rating" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:268 #, no-c-format msgid "Takes in 2 streets that intersect and a state, city, zip, and outputs a set of possible locations on the first cross street that is at the intersection, also includes a point geometry in NAD 83 long lat, a normalized address for each location, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Can optionally pass in maximum results, defaults to 10. Returns normalized_address (addy) for each, geomout as the point location in nad 83 long lat, and the rating. The lower the rating the more likely the match. Results are sorted by lowest rating first. Uses Tiger data (edges,faces,addr), PostgreSQL fuzzy string matching (soundex,levenshtein)" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:280 #, no-c-format msgid "The below examples timings are on a 3.0 GHZ single processor Windows 7 machine with 2GB ram running PostgreSQL 9.0/PostGIS 1.5 loaded with all of MA state Tiger data loaded. Currently a bit slow (3000 ms)" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:281 #, no-c-format msgid "Testing on Windows 2003 64-bit 8GB on PostGIS 2.0 PostgreSQL 64-bit Tiger 2011 data loaded -- (41ms)" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:282 #, no-c-format msgid "" "SELECT pprint_addy(addy), st_astext(geomout),rating \n" " FROM geocode_intersection( 'Haverford St','Germania St', 'MA', 'Boston', '02130',1); \n" " pprint_addy | st_astext | rating\n" "----------------------------------+----------------------------+--------\n" "98 Haverford St, Boston, MA 02130 | POINT(-71.101375 42.31376) | 0" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:283 #, no-c-format msgid "Even if zip is not passed in the geocoder can guess (took about 3500 ms on the windows 7 box), on the windows 2003 64-bit 741 ms" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:284 #, no-c-format msgid "" "SELECT pprint_addy(addy), st_astext(geomout),rating \n" " FROM geocode_intersection('Weld', 'School', 'MA', 'Boston');\n" " pprint_addy | st_astext | rating\n" "-------------------------------+--------------------------+--------\n" " 98 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) | 3\n" " 99 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) | 3" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:290 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:296 #, no-c-format msgid "Get_Geocode_Setting" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:298 #, no-c-format msgid "Returns value of specific setting stored in tiger.geocode_settings table." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:303 #, no-c-format msgid "text Get_Geocode_Setting text setting_name" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:313 #, no-c-format msgid "Returns value of specific setting stored in tiger.geocode_settings table. Settings allow you to toggle debugging of functions. Later plans will be to control rating with settings. Current list of settings are as follows:" msgstr "" #. Tag: screen #: extras_tigergeocoder.xml:314 #, no-c-format msgid "" "name | category | short_desc \n" "----------------------------+----------+----------------------------------------------------------------------------------\n" " debug_geocode_address | debug | outputs debug information in notice log such as queries \n" " | when geocode_addresss is called if true\n" " debug_geocode_intersection | debug | outputs debug information in notice log such as queries \n" " | when geocode_intersection is called if true\n" " debug_normalize_address | debug | outputs debug information in notice log such as queries \n" " | and intermediate expressions when normalize_address is called if true\n" " debug_reverse_geocode | debug | if true, outputs debug information in notice log \n" " such as queries and intermediate expressions when reverse_geocode" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:322 extras_tigergeocoder.xml:922 #, no-c-format msgid "Example return debugging setting" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:323 #, no-c-format msgid "" "SELECT get_geocode_setting('debug_geocode_address) As result;\n" "result\n" "---------\n" "false" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:335 #, no-c-format msgid "Get_Tract" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:337 #, no-c-format msgid "Returns census tract or field from tract table of where the geometry is located. Default to returning short name of tract." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:342 #, no-c-format msgid "text get_tract geometry loc_geom text output_field=name" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:353 #, no-c-format msgid "Given a geometry will return the census tract location of that geometry. NAD 83 long lat is assumed if no spatial ref sys is specified." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:362 #, no-c-format msgid "" "SELECT get_tract(ST_Point(-71.101375, 42.31376) ) As tract_name;\n" "tract_name\n" "---------\n" "1203.01" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:363 #, no-c-format msgid "" "--this one returns the tiger geoid\n" "SELECT get_tract(ST_Point(-71.101375, 42.31376), 'tract_id' ) As tract_id;\n" "tract_id\n" "---------\n" "25025120301" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:369 #, no-c-format msgid ">" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:375 #, no-c-format msgid "Install_Missing_Indexes" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:377 #, no-c-format msgid "Finds all tables with key columns used in geocoder joins and filter conditions that are missing used indexes on those columns and will add them." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:382 #, no-c-format msgid "boolean Install_Missing_Indexes " msgstr "" #. Tag: para #: extras_tigergeocoder.xml:392 #, no-c-format msgid "Finds all tables in tiger and tiger_data schemas with key columns used in geocoder joins and filters that are missing indexes on those columns and will output the SQL DDL to define the index for those tables and then execute the generated script. This is a helper function that adds new indexes needed to make queries faster that may have been missing during the load process. This function is a companion to that in addition to generating the create index script, also executes it. It is called as part of the update_geocode.sql upgrade script." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:406 #, no-c-format msgid "" "SELECT install_missing_indexes();\n" " install_missing_indexes\n" "-------------------------\n" " t" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:419 #, no-c-format msgid "Loader_Generate_Census_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:421 #, no-c-format msgid "Generates a shell script for the specified platform for the specified states that will download Tiger census state tract, bg, and tabblocks data tables, stage and load into tiger_data schema. Each state script is returned as a separate record." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:426 #, no-c-format msgid "setof text loader_generate_census_script text[] param_states text os" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:437 #, no-c-format msgid "Generates a shell script for the specified platform for the specified states that will download Tiger data census state tract, block groups bg, and tabblocks data tables, stage and load into tiger_data schema. Each state script is returned as a separate record." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:438 #, no-c-format msgid "It uses unzip on Linux (7-zip on Windows by default) and wget to do the downloading. It uses to load in the data. Note the smallest unit it does is a whole state. It will only process the files in the staging and temp folders." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:440 extras_tigergeocoder.xml:498 #, no-c-format msgid "It uses the following control tables to control the process and different OS shell syntax variations." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:444 extras_tigergeocoder.xml:502 extras_tigergeocoder.xml:558 #, no-c-format msgid "loader_variables keeps track of various variables such as census site, year, data and staging schemas" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:447 extras_tigergeocoder.xml:505 #, no-c-format msgid "loader_platform profiles of various platforms and where the various executables are located. Comes with windows and linux. More can be added." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:450 extras_tigergeocoder.xml:508 extras_tigergeocoder.xml:564 #, no-c-format msgid "loader_lookuptables each record defines a kind of table (state, county), whether to process records in it and how to load them in. Defines the steps to import data, stage data, add, removes columns, indexes, and constraints for each. Each table is prefixed with the state and inherits from a table in the tiger schema. e.g. creates tiger_data.ma_faces which inherits from tiger.faces" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:454 #, no-c-format msgid "includes this logic, but if you installed tiger geocoder prior to PostGIS 2.0.0 alpha5, you'll need to run this on the states you have already done to get these additional tables." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:461 #, no-c-format msgid "Generate script to load up data for select states in Windows shell script format." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:462 #, no-c-format msgid "" "SELECT loader_generate_census_script(ARRAY['MA'], 'windows');\n" "-- result --\n" "set STATEDIR=\"\\gisdata\\www2.census.gov\\geo\\pvs\\tiger2010st\\25_Massachusetts\"\n" "set TMPDIR=\\gisdata\\temp\\\n" "set UNZIPTOOL=\"C:\\Program Files\\7-Zip\\7z.exe\"\n" "set WGETTOOL=\"C:\\wget\\wget.exe\"\n" "set PGBIN=C:\\projects\\pg\\pg91win\\bin\\\n" "set PGPORT=5432\n" "set PGHOST=localhost\n" "set PGUSER=postgres\n" "set PGPASSWORD=yourpasswordhere\n" "set PGDATABASE=tiger_postgis20\n" "set PSQL=\"%PGBIN%psql\"\n" "set SHP2PGSQL=\"%PGBIN%shp2pgsql\"\n" "cd \\gisdata\n" "\n" "%WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --reject=html\n" "del %TMPDIR%\\*.* /Q\n" "%PSQL% -c \"DROP SCHEMA tiger_staging CASCADE;\"\n" "%PSQL% -c \"CREATE SCHEMA tiger_staging;\"\n" "cd %STATEDIR%\n" "for /r %%z in (*.zip) do %UNZIPTOOL% e %%z -o%TMPDIR% \n" "cd %TMPDIR% \n" "%PSQL% -c \"CREATE TABLE tiger_data.MA_tract(CONSTRAINT pk_MA_tract PRIMARY KEY (tract_id) ) INHERITS(tiger.tract); \" \n" "%SHP2PGSQL% -c -s 4269 -g the_geom -W \"latin1\" tl_2010_25_tract10.dbf tiger_staging.ma_tract10 | %PSQL%\n" "%PSQL% -c \"ALTER TABLE tiger_staging.MA_tract10 RENAME geoid10 TO tract_id; SELECT loader_load_staged_data(lower('MA_tract10'), lower('MA_tract')); \"\n" "%PSQL% -c \"CREATE INDEX tiger_data_MA_tract_the_geom_gist ON tiger_data.MA_tract USING gist(the_geom);\"\n" "%PSQL% -c \"VACUUM ANALYZE tiger_data.MA_tract;\"\n" "%PSQL% -c \"ALTER TABLE tiger_data.MA_tract ADD CONSTRAINT chk_statefp CHECK (statefp = '25');\"\n" ":" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:463 extras_tigergeocoder.xml:521 #, no-c-format msgid "Generate sh script" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:464 #, no-c-format msgid "" "STATEDIR=\"/gisdata/www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts\" \n" "TMPDIR=\"/gisdata/temp/\"\n" "UNZIPTOOL=unzip\n" "WGETTOOL=\"/usr/bin/wget\"\n" "export PGBIN=/usr/pgsql-9.0/bin\n" "export PGPORT=5432\n" "export PGHOST=localhost\n" "export PGUSER=postgres\n" "export PGPASSWORD=yourpasswordhere\n" "export PGDATABASE=geocoder\n" "PSQL=${PGBIN}/psql\n" "SHP2PGSQL=${PGBIN}/shp2pgsql\n" "cd /gisdata\n" "\n" "wget http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --reject=html\n" "rm -f ${TMPDIR}/*.*\n" "${PSQL} -c \"DROP SCHEMA tiger_staging CASCADE;\"\n" "${PSQL} -c \"CREATE SCHEMA tiger_staging;\"\n" "cd $STATEDIR\n" "for z in *.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done\n" ":\n" ":" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:477 #, no-c-format msgid "Loader_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:479 #, no-c-format msgid "Generates a shell script for the specified platform for the specified states that will download Tiger data, stage and load into tiger_data schema. Each state script is returned as a separate record. Latest version supports Tiger 2010 structural changes and also loads census tract, block groups, and blocks tables." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:484 #, no-c-format msgid "setof text loader_generate_script text[] param_states text os" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:495 #, no-c-format msgid "Generates a shell script for the specified platform for the specified states that will download Tiger data, stage and load into tiger_data schema. Each state script is returned as a separate record." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:496 #, no-c-format msgid "It uses unzip on Linux (7-zip on Windows by default) and wget to do the downloading. It uses to load in the data. Note the smallest unit it does is a whole state, but you can overwrite this by downloading the files yourself. It will only process the files in the staging and temp folders." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:511 #, no-c-format msgid "Availability: 2.0.0 to support Tiger 2010 structured data and load census tract (tract), block groups (bg), and blocks (tabblocks) tables ." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:519 #, no-c-format msgid "Generate script to load up data for 2 states in Windows shell script format." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:520 #, no-c-format msgid "" "SELECT loader_generate_script(ARRAY['MA','RI'], 'windows') AS result;\n" "-- result --\n" "set STATEDIR=\"\\gisdata\\www2.census.gov\\geo\\pvs\\tiger2010st\\44_Rhode_Island\"\n" "set TMPDIR=\\gisdata\\temp\\\n" "set UNZIPTOOL=\"C:\\Program Files\\7-Zip\\7z.exe\"\n" "set WGETTOOL=\"C:\\wget\\wget.exe\"\n" "set PGBIN=C:\\Program Files\\PostgreSQL\\8.4\\bin\\\n" "set PGPORT=5432\n" "set PGHOST=localhost\n" "set PGUSER=postgres\n" "set PGPASSWORD=yourpasswordhere\n" "set PGDATABASE=geocoder\n" "set PSQL=\"%PGBIN%psql\"\n" "set SHP2PGSQL=\"%PGBIN%shp2pgsql\"\n" "\n" "%WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island/ --no-parent --relative --recursive --level=2 --accept=zip,txt --mirror --reject=html\n" ":\n" ":" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:522 #, no-c-format msgid "" "SELECT loader_generate_script(ARRAY['MA','RI'], 'sh') AS result;\n" "-- result --\n" "STATEDIR=\"/gisdata/www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island\" \n" "TMPDIR=\"/gisdata/temp/\"\n" "UNZIPTOOL=unzip\n" "PGPORT=5432\n" "PGHOST=localhost\n" "PGUSER=postgres\n" "PGPASSWORD=yourpasswordhere\n" "PGDATABASE=geocoder\n" "PSQL=psql\n" "SHP2PGSQ=shp2pgsql\n" "\n" "wget http://www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island/ --no-parent --relative --recursive --level=2 --accept=zip,txt --mirror --reject=html\n" ":\n" ":" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:535 #, no-c-format msgid "Loader_Generate_Nation_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:537 #, no-c-format msgid "Generates a shell script for the specified platform that loads in the county and state lookup tables." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:542 #, no-c-format msgid "text loader_generate_nation_script text os" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:552 #, no-c-format msgid "Generates a shell script for the specified platform that loads in the county_all, county_all_lookup, state_all tables into tiger_data schema. These inherit respectively from the county, county_lookup, state tables in tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:553 #, no-c-format msgid "It uses unzip on Linux (7-zip on Windows by default) and wget to do the downloading. It uses to load in the data." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:554 #, no-c-format msgid "It uses the following control tables tiger.loader_platform, tiger.loader_variables, and tiger.loader_lookuptables to control the process and different OS shell syntax variations." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:561 #, no-c-format msgid "loader_platform profiles of various platforms and where the various executables are located. Comes with windows and linux/unix. More can be added." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:568 #, no-c-format msgid "If you were running tiger_2010 version and you want to reload as state with tiger_2011, you'll need to for the very first load generate and run drop statements before you run this script." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:574 #, no-c-format msgid "Generate script script to load nation data Windows." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:575 #, no-c-format msgid "SELECT loader_generate_nation_script('windows');" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:576 #, no-c-format msgid "Generate script to load up data for Linux/Unix systems." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:577 #, no-c-format msgid "SELECT loader_generate_nation_script('sh');" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:589 #, no-c-format msgid "Missing_Indexes_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:591 #, no-c-format msgid "Finds all tables with key columns used in geocoder joins that are missing indexes on those columns and will output the SQL DDL to define the index for those tables." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:597 #, no-c-format msgid "text Missing_Indexes_Generate_Script " msgstr "" #. Tag: para #: extras_tigergeocoder.xml:607 #, no-c-format msgid "Finds all tables in tiger and tiger_data schemas with key columns used in geocoder joins that are missing indexes on those columns and will output the SQL DDL to define the index for those tables. This is a helper function that adds new indexes needed to make queries faster that may have been missing during the load process. As the geocoder is improved, this function will be updated to accommodate new indexes being used. If this function outputs nothing, it means all your tables have what we think are the key indexes already in place." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:621 #, no-c-format msgid "" "SELECT missing_indexes_generate_script();\n" "-- output: This was run on a database that was created before many corrections were made to the loading script ---\n" "CREATE INDEX idx_tiger_county_countyfp ON tiger.county USING btree(countyfp);\n" "CREATE INDEX idx_tiger_cousub_countyfp ON tiger.cousub USING btree(countyfp);\n" "CREATE INDEX idx_tiger_edges_tfidr ON tiger.edges USING btree(tfidr);\n" "CREATE INDEX idx_tiger_edges_tfidl ON tiger.edges USING btree(tfidl);\n" "CREATE INDEX idx_tiger_zip_lookup_all_zip ON tiger.zip_lookup_all USING btree(zip);\n" "CREATE INDEX idx_tiger_data_ma_county_countyfp ON tiger_data.ma_county USING btree(countyfp);\n" "CREATE INDEX idx_tiger_data_ma_cousub_countyfp ON tiger_data.ma_cousub USING btree(countyfp);\n" "CREATE INDEX idx_tiger_data_ma_edges_countyfp ON tiger_data.ma_edges USING btree(countyfp);\n" "CREATE INDEX idx_tiger_data_ma_faces_countyfp ON tiger_data.ma_faces USING btree(countyfp);" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:628 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:634 #, no-c-format msgid "Normalize_Address" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:636 #, no-c-format msgid "Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This function will work with just the lookup data packaged with the tiger_geocoder (no need for tiger census data)." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:642 #, no-c-format msgid "norm_addy normalize_address varchar in_address" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:652 #, no-c-format msgid "Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, streetname etc. broken into separate fields. This is the first step in the geocoding process to get all addresses into normalized postal form. No other data is required aside from what is packaged with the geocoder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:654 #, no-c-format msgid "This function just uses the various direction/state/suffix lookup tables preloaded with the tiger_geocoder and located in the tiger schema, so it doesn't need you to download tiger census data or any other additional data to make use of it. You may find the need to add more abbreviations or alternative namings to the various lookup tables in the tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:656 #, no-c-format msgid "It uses various control lookup tables located in tiger schema to normalize the input address." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:657 #, no-c-format msgid "Fields in the norm_addy type object returned by this function in this order where () indicates a field required by the geocoder, [] indicates an optional field:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:658 #, no-c-format msgid "(address) [predirAbbrev] (streetName) [streetTypeAbbrev] [postdirAbbrev] [internal] [location] [stateAbbrev] [zip]" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:661 #, no-c-format msgid "address is an integer: The street number" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:664 #, no-c-format msgid "predirAbbrev is varchar: Directional prefix of road such as N, S, E, W etc. These are controlled using the direction_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:667 #, no-c-format msgid "streetName varchar" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:670 #, no-c-format msgid "streetTypeAbbrev varchar abbreviated version of street type: e.g. St, Ave, Cir. These are controlled using the street_type_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:673 #, no-c-format msgid "postdirAbbrev varchar abbreviated directional suffice of road N, S, E, W etc. These are controlled using the direction_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:676 #, no-c-format msgid "internal varchar internal address such as an apartment or suite number." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:679 #, no-c-format msgid "location varchar usually a city or governing province." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:682 #, no-c-format msgid "stateAbbrev varchar two character US State. e.g MA, NY, MI. These are controlled by the state_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:685 #, no-c-format msgid "zip varchar 5-digit zipcode. e.g. 02109." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:688 #, no-c-format msgid "parsed boolean - denotes if addess was formed from normalize process. The normalize_address function sets this to true before returning the address." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:697 #, no-c-format msgid "Output select fields. Use if you want a pretty textual output." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:698 #, no-c-format msgid "" "SELECT address As orig, (g.na).streetname, (g.na).streettypeabbrev\n" " FROM (SELECT address, normalize_address(address) As na\n" " FROM addresses_to_geocode) As g;\n" " \n" " orig | streetname | streettypeabbrev \n" "-----------------------------------------------------+---------------+------------------\n" " 28 Capen Street, Medford, MA | Capen | St\n" " 124 Mount Auburn St, Cambridge, Massachusetts 02138 | Mount Auburn | St\n" " 950 Main Street, Worcester, MA 01610 | Main | St\n" " 529 Main Street, Boston MA, 02129 | Main | St\n" " 77 Massachusetts Avenue, Cambridge, MA 02139 | Massachusetts | Ave\n" " 25 Wizard of Oz, Walaford, KS 99912323 | Wizard of Oz |" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:707 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:713 #, no-c-format msgid "Pprint_Addy" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:715 #, no-c-format msgid "Given a norm_addy composite type object, returns a pretty print representation of it. Usually used in conjunction with normalize_address." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:720 #, no-c-format msgid "varchar pprint_addy norm_addy in_addy" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:730 #, no-c-format msgid "Given a norm_addy composite type object, returns a pretty print representation of it. No other data is required aside from what is packaged with the geocoder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:731 #, no-c-format msgid "Usually used in conjunction with ." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:739 #, no-c-format msgid "Pretty print a single address" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:740 #, no-c-format msgid "" "SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address;\n" " pretty_address\n" "---------------------------------------\n" " 202 E Fremont St, Las Vegas, NV 89101" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:742 #, no-c-format msgid "Pretty print address a table of addresses" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:743 #, no-c-format msgid "" "SELECT address As orig, pprint_addy(normalize_address(address)) As pretty_address\n" " FROM addresses_to_geocode;\n" " \n" " orig | pretty_address\n" "-----------------------------------------------------+-------------------------------------------\n" " 529 Main Street, Boston MA, 02129 | 529 Main St, Boston MA, 02129\n" " 77 Massachusetts Avenue, Cambridge, MA 02139 | 77 Massachusetts Ave, Cambridge, MA 02139\n" " 28 Capen Street, Medford, MA | 28 Capen St, Medford, MA\n" " 124 Mount Auburn St, Cambridge, Massachusetts 02138 | 124 Mount Auburn St, Cambridge, MA 02138\n" " 950 Main Street, Worcester, MA 01610 | 950 Main St, Worcester, MA 01610" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:756 #, no-c-format msgid "Reverse_Geocode" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:758 #, no-c-format msgid "Takes a geometry point in a known spatial ref sys and returns a record containing an array of theoretically possible addresses and an array of cross streets. If include_strnum_range = true, includes the street range in the cross streets." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:763 #, no-c-format msgid "record Reverse_Geocode geometry pt boolean include_strnum_range=false geometry[] OUT intpt norm_addy[] OUT addy varchar[] OUT street" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:777 #, no-c-format msgid "Takes a geometry point in a known spatial ref and returns a record containing an array of theoretically possible addresses and an array of cross streets. If include_strnum_range = true, includes the street range in the cross streets. include_strnum_range defaults to false if not passed in. Addresses are sorted according to which road a point is closest to so first address is most likely the right one." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:780 #, no-c-format msgid "Why do we say theoretical instead of actual addresses. The Tiger data doesn't have real addresses, but just street ranges. As such the theoretical address is an interpolated address based on the street ranges. Like for example interpolating one of my addresses returns a 26 Court St. and 26 Court Sq., though there is no such place as 26 Court Sq. This is because a point may be at a corner of 2 streets and thus the logic interpolates along both streets. The logic also assumes addresses are equally spaced along a street, which of course is wrong since you can have a municipal building taking up a good chunk of the street range and the rest of the buildings are clustered at the end." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:785 #, no-c-format msgid "Note: Hmm this function relies on Tiger data. If you have not loaded data covering the region of this point, then hmm you will get a record filled with NULLS." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:786 #, no-c-format msgid "Returned elements of the record are as follows:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:789 #, no-c-format msgid "intpt is an array of points: These are the center line points on the street closest to the input point. There are as many points as there are addresses." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:792 #, no-c-format msgid "addy is an array of norm_addy (normalized addresses): These are an array of possible addresses that fit the input point. The first one in the array is most likely. Generally there should be only one, except in the case when a point is at the corner of 2 or 3 streets, or the point is somewhere on the road and not off to the side." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:796 #, no-c-format msgid "street an array of varchar: These are cross streets (or the street) (streets that intersect or are the street the point is projected to be on)." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:807 #, no-c-format msgid "Example of a point at the corner of two streets, but closest to one. This is approximate location of MIT: 77 Massachusetts Ave, Cambridge, MA 02139 Note that although we don't have 3 streets, PostgreSQL will just return null for entries above our upper bound so safe to use. This includes street ranges" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:809 #, no-c-format msgid "" "SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, pprint_addy(r.addy[3]) As st3, \n" " array_to_string(r.street, ',') As cross_streets \n" " FROM reverse_geocode(ST_GeomFromText('POINT(-71.093902 42.359446)',4269),true) As r;\n" " \n" " result\n" " ------\n" " st1 | st2 | st3 | cross_streets\n" "-------------------------------------------+-----+-----+----------------------------------------------\n" " 67 Massachusetts Ave, Cambridge, MA 02139 | | | 67 - 127 Massachusetts Ave,32 - 88 Vassar St" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:811 #, no-c-format msgid "Here we choose not to include the address ranges for the cross streets and picked a location really really close to a corner of 2 streets thus could be known by two different addresses." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:813 #, no-c-format msgid "" "SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, \n" "pprint_addy(r.addy[3]) As st3, array_to_string(r.street, ',') As cross_str\n" "FROM reverse_geocode(ST_GeomFromText('POINT(-71.06941 42.34225)',4269)) As r;\n" "\n" "result\n" "--------\n" " st1 | st2 | st3 | cross_str\n" "---------------------------------+---------------------------------+-----+------------------------\n" " 5 Bradford St, Boston, MA 02118 | 49 Waltham St, Boston, MA 02118 | | Waltham St" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:815 #, no-c-format msgid "For this one we reuse our geocoded example from and we only want the primary address and at most 2 cross streets." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:816 #, no-c-format msgid "" "SELECT actual_addr, lon, lat, pprint_addy((rg).addy[1]) As int_addr1, \n" " (rg).street[1] As cross1, (rg).street[2] As cross2\n" "FROM (SELECT address As actual_addr, lon, lat,\n" " reverse_geocode( ST_SetSRID(ST_Point(lon,lat),4326) ) As rg\n" " FROM addresses_to_geocode WHERE rating > -1) As foo;\n" "\n" " actual_addr | lon | lat | int_addr1 | cross1 | cross2 \n" "-----------------------------------------------------+-----------+----------+-------------------------------------------+-----------------+------------\n" " 529 Main Street, Boston MA, 02129 | -71.07181 | 42.38359 | 527 Main St, Boston, MA 02129 | Medford St | \n" " 77 Massachusetts Avenue, Cambridge, MA 02139 | -71.09428 | 42.35988 | 77 Massachusetts Ave, Cambridge, MA 02139 | Vassar St | \n" " 26 Capen Street, Medford, MA | -71.12377 | 42.41101 | 9 Edison Ave, Medford, MA 02155 | Capen St | Tesla Ave\n" " 124 Mount Auburn St, Cambridge, Massachusetts 02138 | -71.12304 | 42.37328 | 3 University Rd, Cambridge, MA 02138 | Mount Auburn St | \n" " 950 Main Street, Worcester, MA 01610 | -71.82368 | 42.24956 | 3 Maywood St, Worcester, MA 01603 | Main St | Maywood Pl" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:823 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:829 #, no-c-format msgid "Topology_Load_Tiger" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:831 #, no-c-format msgid "Loads a defined region of tiger data into a PostGIS Topology and transforming the tiger data to spatial reference of the topology and snapping to the precision tolerance of the topology." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:837 #, no-c-format msgid "text Topology_Load_Tiger varchar topo_name varchar region_type varchar region_id" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:849 #, no-c-format msgid "Loads a defined region of tiger data into a PostGIS Topology. The faces, nodes and edges are transformed to the spatial reference system of the target topology and points are snapped to the tolerance of the target topology. The created faces, nodes, edges maintain the same ids as the original Tiger data faces, nodes, edges so that datasets can be in the future be more easily reconciled with tiger data. Returns summary details about the process." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:852 #, no-c-format msgid "This would be useful for example for redistricting data where you require the newly formed polygons to follow the center lines of streets and for the resulting polygons not to overlap." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:854 #, no-c-format msgid "This function relies on Tiger data as well as the installation of the PostGIS topology module. For more information, refer to and . If you have not loaded data covering the region of interest, then no topology records will be created. This function will also fail if you have not created a topology using the topology functions." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:856 #, no-c-format msgid "Most topology validation errors are a result of tolerance issues where after transformation the edges points don't quite line up or overlap. To remedy the situation you may want to increase or lower the precision if you get topology validation failures." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:858 #, no-c-format msgid "Required arguments:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:861 #, no-c-format msgid "topo_name The name of an existing PostGIS topology to load data into." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:864 #, no-c-format msgid "region_type The type of bounding region. Currently only place and county are supported. Plan is to have several more. This is the table to look into to define the region bounds. e.g tiger.place, tiger.county" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:867 #, no-c-format msgid "region_id This is what TIGER calls the geoid. It is the unique identifier of the region in the table. For place it is the plcidfp column in tiger.place. For county it is the cntyidfp column in tiger.county" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:876 #, no-c-format msgid "Example: Boston, Massachusetts Topology" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:877 #, no-c-format msgid "Create a topology for Boston, Massachusetts in Mass State Plane Feet (2249) with tolerance 0.25 feet and then load in Boston city tiger faces, edges, nodes." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:879 #, no-c-format msgid "" "SELECT topology.CreateTopology('topo_boston', 2249, 0.25);\n" "createtopology\n" "--------------\n" " 15\n" "-- 60,902 ms ~ 1 minute on windows 7 desktop running 9.1 (with 5 states tiger data loaded) \n" "SELECT tiger.topology_load_tiger('topo_boston', 'place', '2507000'); \n" "-- topology_loader_tiger --\n" "29722 edges holding in temporary. 11108 faces added. 1875 edges of faces added. 20576 nodes added. \n" "19962 nodes contained in a face. 0 edge start end corrected. 31597 edges added. \n" " \n" "-- 41 ms --\n" "SELECT topology.TopologySummary('topo_boston');\n" " -- topologysummary--\n" "Topology topo_boston (15), SRID 2249, precision 0.25\n" "20576 nodes, 31597 edges, 11109 faces, 0 topogeoms in 0 layers\n" "\n" "-- 28,797 ms to validate yeh returned no errors --\n" "SELECT * FROM \n" " topology.ValidateTopology('topo_boston'); \n" " \n" " error | id1 | id2\n" "-------------------+----------+-----------" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:883 #, no-c-format msgid "Example: Suffolk, Massachusetts Topology" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:884 #, no-c-format msgid "Create a topology for Suffolk, Massachusetts in Mass State Plane Meters (26986) with tolerance 0.25 meters and then load in Suffolk county tiger faces, edges, nodes." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:886 #, no-c-format msgid "" "SELECT topology.CreateTopology('topo_suffolk', 26986, 0.25);\n" "-- this took 56,275 ms ~ 1 minute on Windows 7 32-bit with 5 states of tiger loaded\n" "-- must have been warmed up after loading boston\n" "SELECT tiger.topology_load_tiger('topo_suffolk', 'county', '25025'); \n" "-- topology_loader_tiger --\n" " 36003 edges holding in temporary. 13518 faces added. 2172 edges of faces added. \n" " 24761 nodes added. 24075 nodes contained in a face. 0 edge start end corrected. 38175 edges added. \n" "-- 31 ms --\n" "SELECT topology.TopologySummary('topo_suffolk');\n" " -- topologysummary--\n" " Topology topo_suffolk (14), SRID 26986, precision 0.25\n" "24761 nodes, 38175 edges, 13519 faces, 0 topogeoms in 0 layers\n" "\n" "-- 33,606 ms to validate --\n" "SELECT * FROM \n" " topology.ValidateTopology('topo_suffolk'); \n" " \n" " error | id1 | id2\n" "-------------------+----------+-----------\n" " coincident nodes | 81045651 | 81064553\n" " edge crosses node | 81045651 | 85737793\n" " edge crosses node | 81045651 | 85742215\n" " edge crosses node | 81045651 | 620628939\n" " edge crosses node | 81064553 | 85697815\n" " edge crosses node | 81064553 | 85728168\n" " edge crosses node | 81064553 | 85733413" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:890 #, no-c-format msgid ", , , " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:896 #, no-c-format msgid "Set_Geocode_Setting" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:898 #, no-c-format msgid "Sets a setting that affects behavior of geocoder functions." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:903 #, no-c-format msgid "text Set_Geocode_Setting text setting_name text setting_value" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:914 #, no-c-format msgid "Sets value of specific setting stored in tiger.geocode_settings table. Settings allow you to toggle debugging of functions. Later plans will be to control rating with settings. Current list of settings are listed in ." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:923 #, no-c-format msgid "If you run when this function is true, the NOTICE log will output timing and queries." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:924 #, no-c-format msgid "" "SELECT set_geocode_setting('debug_geocode_address', 'true') As result;\n" "result\n" "---------\n" "true" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/templates/release_notes.xml.pot0000644000000000000000000027017512025614072023127 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: release_notes.xml:3 #, no-c-format msgid "Appendix" msgstr "" #. Tag: subtitle #: release_notes.xml:4 #, no-c-format msgid "Release Notes" msgstr "" #. Tag: title #: release_notes.xml:6 #, no-c-format msgid "Release 2.0.1" msgstr "" #. Tag: para #: release_notes.xml:7 #, no-c-format msgid "Release date: 2012/06/22" msgstr "" #. Tag: para #: release_notes.xml:8 #, no-c-format msgid "This is a bug fix release, addressing issues that have been filed since the 2.0.0 release." msgstr "" #. Tag: title #: release_notes.xml:10 release_notes.xml:165 release_notes.xml:179 release_notes.xml:217 release_notes.xml:255 release_notes.xml:286 #, no-c-format msgid "Bug Fixes" msgstr "" #. Tag: para #: release_notes.xml:11 #, no-c-format msgid "#1264, fix st_dwithin(geog, geog, 0)." msgstr "" #. Tag: para #: release_notes.xml:12 #, no-c-format msgid "#1468 shp2pgsql-gui table column schema get shifted" msgstr "" #. Tag: para #: release_notes.xml:13 #, no-c-format msgid "#1694, fix building with clang. (vince)" msgstr "" #. Tag: para #: release_notes.xml:14 #, no-c-format msgid "#1708, improve restore of pre-PostGIS 2.0 backups." msgstr "" #. Tag: para #: release_notes.xml:15 #, no-c-format msgid "#1714, more robust handling of high topology tolerance." msgstr "" #. Tag: para #: release_notes.xml:16 #, no-c-format msgid "#1755, ST_GeographyFromText support for higher dimensions." msgstr "" #. Tag: para #: release_notes.xml:17 #, no-c-format msgid "#1759, loading transformed shapefiles in raster enabled db." msgstr "" #. Tag: para #: release_notes.xml:18 #, no-c-format msgid "#1761, handling of subdatasets in NetCDF, HDF4 and HDF5 in raster2pgsql." msgstr "" #. Tag: para #: release_notes.xml:19 #, no-c-format msgid "#1763, topology.toTopoGeom use with custom search_path." msgstr "" #. Tag: para #: release_notes.xml:20 #, no-c-format msgid "#1766, don't let ST_RemEdge* destroy peripheral TopoGeometry objects." msgstr "" #. Tag: para #: release_notes.xml:21 #, no-c-format msgid "#1774, Clearer error on setting an edge geometry to an invalid one." msgstr "" #. Tag: para #: release_notes.xml:22 #, no-c-format msgid "#1775, ST_ChangeEdgeGeom collision detection with 2-vertex target." msgstr "" #. Tag: para #: release_notes.xml:23 #, no-c-format msgid "#1776, fix ST_SymDifference(empty, geom) to return geom." msgstr "" #. Tag: para #: release_notes.xml:24 #, no-c-format msgid "#1779, install SQL comment files." msgstr "" #. Tag: para #: release_notes.xml:25 #, no-c-format msgid "#1782, fix spatial reference string handling in raster." msgstr "" #. Tag: para #: release_notes.xml:26 #, no-c-format msgid "#1789, fix false edge-node crossing report in ValidateTopology." msgstr "" #. Tag: para #: release_notes.xml:27 #, no-c-format msgid "#1790, fix toTopoGeom handling of duplicated primitives." msgstr "" #. Tag: para #: release_notes.xml:28 #, no-c-format msgid "#1791, fix ST_Azimuth with very close but distinct points." msgstr "" #. Tag: para #: release_notes.xml:29 #, no-c-format msgid "#1797, fix (ValidateTopology(xxx)).* syntax calls." msgstr "" #. Tag: para #: release_notes.xml:30 #, no-c-format msgid "#1805, put back the 900913 SRID entry." msgstr "" #. Tag: para #: release_notes.xml:31 #, no-c-format msgid "#1813, Only show readable relations in metadata tables." msgstr "" #. Tag: para #: release_notes.xml:32 #, no-c-format msgid "#1819, fix floating point issues with ST_World2RasterCoord and ST_Raster2WorldCoord variants." msgstr "" #. Tag: para #: release_notes.xml:34 #, no-c-format msgid "#1820 compilation on 9.2beta1." msgstr "" #. Tag: para #: release_notes.xml:35 #, no-c-format msgid "#1822, topology load on PostgreSQL 9.2beta1." msgstr "" #. Tag: para #: release_notes.xml:36 #, no-c-format msgid "#1825, fix prepared geometry cache lookup" msgstr "" #. Tag: para #: release_notes.xml:37 #, no-c-format msgid "#1829, fix uninitialized read in GeoJSON parser" msgstr "" #. Tag: para #: release_notes.xml:38 #, no-c-format msgid "#1834, revise postgis extension to only backup user specified spatial_ref_sys" msgstr "" #. Tag: para #: release_notes.xml:40 #, no-c-format msgid "#1839, handling of subdatasets in GeoTIFF in raster2pgsql." msgstr "" #. Tag: para #: release_notes.xml:41 #, no-c-format msgid "#1840, fix logic of when to compute # of tiles in raster2pgsql." msgstr "" #. Tag: para #: release_notes.xml:42 #, no-c-format msgid "#1851, fix spatial_ref_system parameters for EPSG:3844" msgstr "" #. Tag: para #: release_notes.xml:43 #, no-c-format msgid "#1857, fix failure to detect endpoint mismatch in ST_AddEdge*Face*" msgstr "" #. Tag: para #: release_notes.xml:44 #, no-c-format msgid "#1865, data loss in postgis_restore.pl when data rows have leading dashes." msgstr "" #. Tag: para #: release_notes.xml:46 #, no-c-format msgid "#1867, catch invalid topology name passed to topogeo_add*" msgstr "" #. Tag: para #: release_notes.xml:47 #, no-c-format msgid "#1872, fix ST_ApproxSummarystats to prevent division by zero" msgstr "" #. Tag: para #: release_notes.xml:48 #, no-c-format msgid "#1873, fix ptarray_locate_point to return interpolated Z/M values for on-the-line case" msgstr "" #. Tag: para #: release_notes.xml:50 #, no-c-format msgid "#1875, ST_SummaryStats returns NULL for all parameters except count when count is zero" msgstr "" #. Tag: para #: release_notes.xml:52 #, no-c-format msgid "#1881, shp2pgsql-gui -- editing a field sometimes triggers removing row" msgstr "" #. Tag: para #: release_notes.xml:54 #, no-c-format msgid "#1883, Geocoder install fails trying to run create_census_base_tables() (Brian Panulla)" msgstr "" #. Tag: title #: release_notes.xml:58 release_notes.xml:148 release_notes.xml:349 release_notes.xml:404 #, no-c-format msgid "Enhancements" msgstr "" #. Tag: para #: release_notes.xml:59 #, no-c-format msgid "More detailed exception message from topology editing functions." msgstr "" #. Tag: para #: release_notes.xml:60 #, no-c-format msgid "#1786, improved build dependencies" msgstr "" #. Tag: para #: release_notes.xml:61 #, no-c-format msgid "#1806, speedup of ST_BuildArea, ST_MakeValid and ST_GetFaceGeometry." msgstr "" #. Tag: para #: release_notes.xml:62 #, no-c-format msgid "#1812, Add lwgeom_normalize in LIBLWGEOM for more stable testing." msgstr "" #. Tag: title #: release_notes.xml:66 #, no-c-format msgid "Release 2.0.0" msgstr "" #. Tag: para #: release_notes.xml:67 #, no-c-format msgid "Release date: 2012/04/03" msgstr "" #. Tag: para #: release_notes.xml:68 #, no-c-format msgid "This is a major release. A hard upgrade is required. Yes this means a full dump reload and some special preparations if you are using obsolete functions. Refer to for details on upgrading. Refer to for more details and changed/new functions." msgstr "" #. Tag: title #: release_notes.xml:72 #, no-c-format msgid "Testers - Our unsung heroes" msgstr "" #. Tag: para #: release_notes.xml:73 #, no-c-format msgid "We are most indebted to the numerous members in the PostGIS community who were brave enough to test out the new features in this release. No major release can be successful without these folk." msgstr "" #. Tag: para #: release_notes.xml:76 #, no-c-format msgid "Below are those who have been most valiant, provided very detailed and thorough bug reports, and detailed analysis." msgstr "" #. Tag: member #: release_notes.xml:80 #, no-c-format msgid "Andrea Peri - Lots of testing on topology, checking for correctness" msgstr "" #. Tag: member #: release_notes.xml:81 #, no-c-format msgid "Andreas Forø Tollefsen - raster testing" msgstr "" #. Tag: member #: release_notes.xml:82 #, no-c-format msgid "Chris English - topology stress testing loader functions" msgstr "" #. Tag: member #: release_notes.xml:83 #, no-c-format msgid "Salvatore Larosa - topology robustness testing" msgstr "" #. Tag: member #: release_notes.xml:84 #, no-c-format msgid "Brian Hamlin - Benchmarking (also experimental experimental branches before they are folded into core) , general testing of various pieces including Tiger and Topology. Testing on various server VMs" msgstr "" #. Tag: member #: release_notes.xml:89 #, no-c-format msgid "Mike Pease - Tiger geocoder testing - very detailed reports of issues" msgstr "" #. Tag: member #: release_notes.xml:90 #, no-c-format msgid "Tom van Tilburg - raster testing" msgstr "" #. Tag: title #: release_notes.xml:94 #, no-c-format msgid "Important / Breaking Changes" msgstr "" #. Tag: para #: release_notes.xml:95 #, no-c-format msgid "#722, #302, Most deprecated functions removed (over 250 functions) (Regina Obe, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:96 #, no-c-format msgid "Unknown SRID changed from -1 to 0. (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:97 #, no-c-format msgid "-- (most deprecated in 1.2) removed non-ST variants buffer, length, intersects (and internal functions renamed) etc." msgstr "" #. Tag: para #: release_notes.xml:99 #, no-c-format msgid "-- If you have been using deprecated functions CHANGE your apps or suffer the consequences. If you don't see a function documented -- it ain't supported or it is an internal function. Some constraints in older tables were built with deprecated functions. If you restore you may need to rebuild table constraints with populate_geometry_columns(). If you have applications or tools that rely on deprecated functions, please refer to for more details." msgstr "" #. Tag: para #: release_notes.xml:104 #, no-c-format msgid "#944 geometry_columns is now a view instead of a table (Paul Ramsey, Regina Obe) for tables created the old way reads (srid, type, dims) constraints for geometry columns created with type modifiers reads rom column definition" msgstr "" #. Tag: para #: release_notes.xml:109 #, no-c-format msgid "#1081, #1082, #1084, #1088 - Mangement functions support typmod geometry column creation functions now default to typmod creation (Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:112 #, no-c-format msgid "#1083 probe_geometry_columns(), rename_geometry_table_constraints(), fix_geometry_columns(); removed - now obsolete with geometry_column view (Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:116 #, no-c-format msgid "#817 Renaming old 3D functions to the convention ST_3D (Nicklas Avén)" msgstr "" #. Tag: para #: release_notes.xml:117 #, no-c-format msgid "#548 (sorta), ST_NumGeometries,ST_GeometryN now returns 1 (or the geometry) instead of null for single geometries (Sandro Santilli, Maxime van Noppen)" msgstr "" #. Tag: title #: release_notes.xml:121 release_notes.xml:321 release_notes.xml:385 release_notes.xml:682 #, no-c-format msgid "New Features" msgstr "" #. Tag: ulink #: release_notes.xml:122 #, no-c-format msgid "KNN Gist index based centroid (<->) and box (<#>) distance operators (Paul Ramsey / funded by Vizzuality)" msgstr "" #. Tag: para #: release_notes.xml:123 #, no-c-format msgid "Support for TIN and PolyHedralSurface and enhancement of many functions to support 3D (Olivier Courtin / Oslandia)" msgstr "" #. Tag: para #: release_notes.xml:124 #, no-c-format msgid "Raster support integrated and documented (Pierre Racine, Jorge Arévalo, Mateusz Loskot, Sandro Santilli, David Zwarg, Regina Obe, Bborie Park) (Company developer and funding: University Laval, Deimos Space, CadCorp, Michigan Tech Research Institute, Azavea, Paragon Corporation, UC Davis Center for Vectorborne Diseases)" msgstr "" #. Tag: para #: release_notes.xml:127 #, no-c-format msgid "Making spatial indexes 3D aware - in progress (Paul Ramsey, Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:128 #, no-c-format msgid "Topology support improved (more functions), documented, testing (Sandro Santilli / Faunalia for RT-SIGTA), Andrea Peri, Regina Obe, Jose Carlos Martinez Llari" msgstr "" #. Tag: para #: release_notes.xml:129 #, no-c-format msgid "3D relationship and measurement support functions (Nicklas Avén)" msgstr "" #. Tag: para #: release_notes.xml:130 #, no-c-format msgid "ST_3DDistance, ST_3DClosestPoint, ST_3DIntersects, ST_3DShortestLine and more..." msgstr "" #. Tag: para #: release_notes.xml:131 #, no-c-format msgid "N-Dimensional spatial indexes (Paul Ramsey / OpenGeo)" msgstr "" #. Tag: para #: release_notes.xml:132 #, no-c-format msgid "ST_Split (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:133 #, no-c-format msgid "ST_IsValidDetail (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:134 #, no-c-format msgid "ST_MakeValid (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:135 #, no-c-format msgid "ST_RemoveRepeatedPoints (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:136 #, no-c-format msgid "ST_GeometryN and ST_NumGeometries support for non-collections (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:137 #, no-c-format msgid "ST_IsCollection (Sandro Santilli, Maxime van Noppen)" msgstr "" #. Tag: para #: release_notes.xml:138 #, no-c-format msgid "ST_SharedPaths (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:139 #, no-c-format msgid "ST_Snap (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:140 #, no-c-format msgid "ST_RelateMatch (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:141 #, no-c-format msgid "ST_ConcaveHull (Regina Obe and Leo Hsu / Paragon Corporation)" msgstr "" #. Tag: para #: release_notes.xml:142 #, no-c-format msgid "ST_UnaryUnion (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:143 #, no-c-format msgid "ST_AsX3D (Regina Obe / Arrival 3D funding)" msgstr "" #. Tag: para #: release_notes.xml:144 #, no-c-format msgid "ST_OffsetCurve (Sandro Santilli, Rafal Magda)" msgstr "" #. Tag: ulink #: release_notes.xml:145 #, no-c-format msgid "ST_GeomFromGeoJSON (Kashif Rasul, Paul Ramsey / Vizzuality funding)" msgstr "" #. Tag: para #: release_notes.xml:149 #, no-c-format msgid "Made shape file loader tolerant of truncated multibyte values found in some free worldwide shapefiles (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:150 #, no-c-format msgid "Lots of bug fixes and enhancements to shp2pgsql Beefing up regression tests for loaders Reproject support for both geometry and geography during import (Jeff Adams / Azavea, Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:154 #, no-c-format msgid "pgsql2shp conversion from predefined list (Loic Dachary / Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:156 #, no-c-format msgid "Shp-pgsql GUI loader - support loading multiple files at a time. (Mark Leslie)" msgstr "" #. Tag: para #: release_notes.xml:157 #, no-c-format msgid "Extras - upgraded tiger_geocoder from using old TIGER format to use new TIGER shp and file structure format (Stephen Frost)" msgstr "" #. Tag: para #: release_notes.xml:158 #, no-c-format msgid "Extras - revised tiger_geocoder to work with TIGER census 2010 data, addition of reverse geocoder function, various bug fixes, accuracy enhancements, limit max result return, speed improvements, loading routines. (Regina Obe, Leo Hsu / Paragon Corporation / funding provided by Hunter Systems Group)" msgstr "" #. Tag: para #: release_notes.xml:161 #, no-c-format msgid "Overall Documentation proofreading and corrections. (Kasif Rasul)" msgstr "" #. Tag: para #: release_notes.xml:162 #, no-c-format msgid "Cleanup PostGIS JDBC classes, revise to use Maven build. (Maria Arias de Reyna, Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:166 #, no-c-format msgid "#1335 ST_AddPoint returns incorrect result on Linux (Even Rouault)" msgstr "" #. Tag: title #: release_notes.xml:169 #, no-c-format msgid "Release specific credits" msgstr "" #. Tag: para #: release_notes.xml:170 #, no-c-format msgid "We thank U.S Department of State Human Information Unit (HIU) and Vizzuality for general monetary support to get PostGIS 2.0 out the door." msgstr "" #. Tag: title #: release_notes.xml:175 #, no-c-format msgid "Release 1.5.4" msgstr "" #. Tag: para #: release_notes.xml:176 #, no-c-format msgid "Release date: 2012/05/07" msgstr "" #. Tag: para #: release_notes.xml:177 #, no-c-format msgid "This is a bug fix release, addressing issues that have been filed since the 1.5.3 release." msgstr "" #. Tag: para #: release_notes.xml:180 #, no-c-format msgid "#547, ST_Contains memory problems (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:181 #, no-c-format msgid "#621, Problem finding intersections with geography (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:182 #, no-c-format msgid "#627, PostGIS/PostgreSQL process die on invalid geometry (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:183 #, no-c-format msgid "#810, Increase accuracy of area calculation (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:184 #, no-c-format msgid "#852, improve spatial predicates robustness (Sandro Santilli, Nicklas Avén)" msgstr "" #. Tag: para #: release_notes.xml:185 #, no-c-format msgid "#877, ST_Estimated_Extent returns NULL on empty tables (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:186 #, no-c-format msgid "#1028, ST_AsSVG kills whole postgres server when fails (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:187 #, no-c-format msgid "#1056, Fix boxes of arcs and circle stroking code (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:188 #, no-c-format msgid "#1121, populate_geometry_columns using deprecated functions (Regin Obe, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:189 #, no-c-format msgid "#1135, improve testsuite predictability (Andreas 'ads' Scherbaum)" msgstr "" #. Tag: para #: release_notes.xml:190 #, no-c-format msgid "#1146, images generator crashes (bronaugh)" msgstr "" #. Tag: para #: release_notes.xml:191 #, no-c-format msgid "#1170, North Pole intersection fails (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:192 #, no-c-format msgid "#1179, ST_AsText crash with bad value (kjurka)" msgstr "" #. Tag: para #: release_notes.xml:193 #, no-c-format msgid "#1184, honour DESTDIR in documentation Makefile (Bryce L Nordgren)" msgstr "" #. Tag: para #: release_notes.xml:194 #, no-c-format msgid "#1227, server crash on invalid GML" msgstr "" #. Tag: para #: release_notes.xml:195 #, no-c-format msgid "#1252, SRID appearing in WKT (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:196 #, no-c-format msgid "#1264, st_dwithin(g, g, 0) doesn't work (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:197 #, no-c-format msgid "#1344, allow exporting tables with invalid geometries (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:198 #, no-c-format msgid "#1389, wrong proj4text for SRID 31300 and 31370 (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:199 #, no-c-format msgid "#1406, shp2pgsql crashes when loading into geography (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:200 #, no-c-format msgid "#1595, fixed SRID redundancy in ST_Line_SubString (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:201 #, no-c-format msgid "#1596, check SRID in UpdateGeometrySRID (Mike Toews, Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:202 #, no-c-format msgid "#1602, fix ST_Polygonize to retain Z (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:203 #, no-c-format msgid "#1697, fix crash with EMPTY entries in GiST index (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:204 #, no-c-format msgid "#1772, fix ST_Line_Locate_Point with collapsed input (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:205 #, no-c-format msgid "#1799, Protect ST_Segmentize from max_length=0 (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:206 #, no-c-format msgid "Alter parameter order in 900913 (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:207 #, no-c-format msgid "Support builds with \"gmake\" (Greg Troxel)" msgstr "" #. Tag: title #: release_notes.xml:212 #, no-c-format msgid "Release 1.5.3" msgstr "" #. Tag: para #: release_notes.xml:213 #, no-c-format msgid "Release date: 2011/06/25" msgstr "" #. Tag: para #: release_notes.xml:214 #, no-c-format msgid "This is a bug fix release, addressing issues that have been filed since the 1.5.2 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient otherwise a hard upgrade is recommended." msgstr "" #. Tag: para #: release_notes.xml:218 #, no-c-format msgid "#1056, produce correct bboxes for arc geometries, fixes index errors (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:220 #, no-c-format msgid "#1007, ST_IsValid crash fix requires GEOS 3.3.0+ or 3.2.3+ (Sandro Santilli, reported by Birgit Laggner)" msgstr "" #. Tag: para #: release_notes.xml:222 #, no-c-format msgid "#940, support for PostgreSQL 9.1 beta 1 (Regina Obe, Paul Ramsey, patch submitted by stl)" msgstr "" #. Tag: para #: release_notes.xml:224 #, no-c-format msgid "#845, ST_Intersects precision error (Sandro Santilli, Nicklas Avén) Reported by cdestigter" msgstr "" #. Tag: para #: release_notes.xml:226 #, no-c-format msgid "#884, Unstable results with ST_Within, ST_Intersects (Chris Hodgson)" msgstr "" #. Tag: para #: release_notes.xml:227 #, no-c-format msgid "#779, shp2pgsql -S option seems to fail on points (Jeff Adams)" msgstr "" #. Tag: para #: release_notes.xml:228 #, no-c-format msgid "#666, ST_DumpPoints is not null safe (Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:229 #, no-c-format msgid "#631, Update NZ projections for grid transformation support (jpalmer)" msgstr "" #. Tag: para #: release_notes.xml:230 #, no-c-format msgid "#630, Peculiar Null treatment in arrays in ST_Collect (Chris Hodgson) Reported by David Bitner" msgstr "" #. Tag: para #: release_notes.xml:232 #, no-c-format msgid "#624, Memory leak in ST_GeogFromText (ryang, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:233 #, no-c-format msgid "#609, Bad source code in manual section 5.2 Java Clients (simoc, Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:234 #, no-c-format msgid "#604, shp2pgsql usage touchups (Mike Toews, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:235 #, no-c-format msgid "#573 ST_Union fails on a group of linestrings Not a PostGIS bug, fixed in GEOS 3.3.0" msgstr "" #. Tag: para #: release_notes.xml:237 #, no-c-format msgid "#457 ST_CollectionExtract returns non-requested type (Nicklas Avén, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:239 #, no-c-format msgid "#441 ST_AsGeoJson Bbox on GeometryCollection error (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:240 #, no-c-format msgid "#411 Ability to backup invalid geometries (Sando Santilli) Reported by Regione Toscana" msgstr "" #. Tag: para #: release_notes.xml:242 #, no-c-format msgid "#409 ST_AsSVG - degraded (Olivier Courtin) Reported by Sdikiy" msgstr "" #. Tag: para #: release_notes.xml:244 #, no-c-format msgid "#373 Documentation syntax error in hard upgrade (Paul Ramsey) Reported by psvensso" msgstr "" #. Tag: title #: release_notes.xml:250 #, no-c-format msgid "Release 1.5.2" msgstr "" #. Tag: para #: release_notes.xml:251 #, no-c-format msgid "Release date: 2010/09/27" msgstr "" #. Tag: para #: release_notes.xml:252 #, no-c-format msgid "This is a bug fix release, addressing issues that have been filed since the 1.5.1 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient otherwise a hard upgrade is recommended." msgstr "" #. Tag: para #: release_notes.xml:256 #, no-c-format msgid "Loader: fix handling of empty (0-verticed) geometries in shapefiles. (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:257 #, no-c-format msgid "#536, Geography ST_Intersects, ST_Covers, ST_CoveredBy and Geometry ST_Equals not using spatial index (Regina Obe, Nicklas Aven)" msgstr "" #. Tag: para #: release_notes.xml:258 #, no-c-format msgid "#573, Improvement to ST_Contains geography (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:259 #, no-c-format msgid "Loader: Add support for command-q shutdown in Mac GTK build (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:260 #, no-c-format msgid "#393, Loader: Add temporary patch for large DBF files (Maxime Guillaud, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:261 #, no-c-format msgid "#507, Fix wrong OGC URN in GeoJSON and GML output (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:262 #, no-c-format msgid "spatial_ref_sys.sql Add datum conversion for projection SRID 3021 (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:263 #, no-c-format msgid "Geography - remove crash for case when all geographies are out of the estimate (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:264 #, no-c-format msgid "#469, Fix for array_aggregation error (Greg Stark, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:265 #, no-c-format msgid "#532, Temporary geography tables showing up in other user sessions (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:266 #, no-c-format msgid "#562, ST_Dwithin errors for large geographies (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:267 #, no-c-format msgid "#513, shape loading GUI tries to make spatial index when loading DBF only mode (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:268 #, no-c-format msgid "#527, shape loading GUI should always append log messages (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:269 #, no-c-format msgid "#504, shp2pgsql should rename xmin/xmax fields (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:270 #, no-c-format msgid "#458, postgis_comments being installed in contrib instead of version folder (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:271 #, no-c-format msgid "#474, Analyzing a table with geography column crashes server (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:272 #, no-c-format msgid "#581, LWGEOM-expand produces inconsistent results (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:273 #, no-c-format msgid "#513, Add dbf filter to shp2pgsql-gui and allow uploading dbf only (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:274 #, no-c-format msgid "Fix further build issues against PostgreSQL 9.0 (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:275 #, no-c-format msgid "#572, Password whitespace for Shape File (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:276 #, no-c-format msgid "#603, shp2pgsql: \"-w\" produces invalid WKT for MULTI* objects. (Mark Cave-Ayland)" msgstr "" #. Tag: title #: release_notes.xml:281 #, no-c-format msgid "Release 1.5.1" msgstr "" #. Tag: para #: release_notes.xml:282 #, no-c-format msgid "Release date: 2010/03/11" msgstr "" #. Tag: para #: release_notes.xml:283 #, no-c-format msgid "This is a bug fix release, addressing issues that have been filed since the 1.4.1 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient otherwise a hard upgrade is recommended." msgstr "" #. Tag: para #: release_notes.xml:287 #, no-c-format msgid "#410, update embedded bbox when applying ST_SetPoint, ST_AddPoint ST_RemovePoint to a linestring (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:288 #, no-c-format msgid "#411, allow dumping tables with invalid geometries (Sandro Santilli, for Regione Toscana-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:289 #, no-c-format msgid "#414, include geography_columns view when running upgrade scripts (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:290 #, no-c-format msgid "#419, allow support for multilinestring in ST_Line_Substring (Paul Ramsey, for Lidwala Consulting Engineers)" msgstr "" #. Tag: para #: release_notes.xml:291 #, no-c-format msgid "#421, fix computed string length in ST_AsGML() (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:292 #, no-c-format msgid "#441, fix GML generation with heterogeneous collections (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:293 #, no-c-format msgid "#443, incorrect coordinate reversal in GML 3 generation (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:294 #, no-c-format msgid "#450, #451, wrong area calculation for geography features that cross the date line (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:295 #, no-c-format msgid "Ensure support for upcoming 9.0 PgSQL release (Paul Ramsey)" msgstr "" #. Tag: title #: release_notes.xml:300 #, no-c-format msgid "Release 1.5.0" msgstr "" #. Tag: para #: release_notes.xml:301 #, no-c-format msgid "Release date: 2010/02/04" msgstr "" #. Tag: para #: release_notes.xml:302 #, no-c-format msgid "This release provides support for geographic coordinates (lat/lon) via a new GEOGRAPHY type. Also performance enhancements, new input format support (GML,KML) and general upkeep." msgstr "" #. Tag: title #: release_notes.xml:305 release_notes.xml:372 #, no-c-format msgid "API Stability" msgstr "" #. Tag: para #: release_notes.xml:306 #, no-c-format msgid "The public API of PostGIS will not change during minor (0.0.X) releases." msgstr "" #. Tag: para #: release_notes.xml:307 #, no-c-format msgid "The definition of the =~ operator has changed from an exact geometric equality check to a bounding box equality check." msgstr "" #. Tag: title #: release_notes.xml:311 release_notes.xml:377 #, no-c-format msgid "Compatibility" msgstr "" #. Tag: para #: release_notes.xml:312 #, no-c-format msgid "GEOS, Proj4, and LibXML2 are now mandatory dependencies" msgstr "" #. Tag: para #: release_notes.xml:313 #, no-c-format msgid "The library versions below are the minimum requirements for PostGIS 1.5" msgstr "" #. Tag: para #: release_notes.xml:314 #, no-c-format msgid "PostgreSQL 8.3 and higher on all platforms" msgstr "" #. Tag: para #: release_notes.xml:315 #, no-c-format msgid "GEOS 3.1 and higher only (GEOS 3.2+ to take advantage of all features)" msgstr "" #. Tag: para #: release_notes.xml:316 #, no-c-format msgid "LibXML2 2.5+ related to new ST_GeomFromGML/KML functionality" msgstr "" #. Tag: para #: release_notes.xml:317 #, no-c-format msgid "Proj4 4.5 and higher only" msgstr "" #. Tag: para #: release_notes.xml:323 #, no-c-format msgid "Added Hausdorff distance calculations (#209) (Vincent Picavet)" msgstr "" #. Tag: para #: release_notes.xml:324 #, no-c-format msgid "Added parameters argument to ST_Buffer operation to support one-sided buffering and other buffering styles (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:325 #, no-c-format msgid "Addition of other Distance related visualization and analysis functions (Nicklas Aven)" msgstr "" #. Tag: para #: release_notes.xml:327 #, no-c-format msgid "ST_ClosestPoint" msgstr "" #. Tag: para #: release_notes.xml:328 #, no-c-format msgid "ST_DFullyWithin" msgstr "" #. Tag: para #: release_notes.xml:329 #, no-c-format msgid "ST_LongestLine" msgstr "" #. Tag: para #: release_notes.xml:330 #, no-c-format msgid "ST_MaxDistance" msgstr "" #. Tag: para #: release_notes.xml:331 #, no-c-format msgid "ST_ShortestLine" msgstr "" #. Tag: para #: release_notes.xml:333 #, no-c-format msgid "ST_DumpPoints (Maxime van Noppen)" msgstr "" #. Tag: para #: release_notes.xml:334 #, no-c-format msgid "KML, GML input via ST_GeomFromGML and ST_GeomFromKML (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:335 #, no-c-format msgid "Extract homogeneous collection with ST_CollectionExtract (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:336 #, no-c-format msgid "Add measure values to an existing linestring with ST_AddMeasure (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:337 #, no-c-format msgid "History table implementation in utils (George Silva)" msgstr "" #. Tag: para #: release_notes.xml:338 #, no-c-format msgid "Geography type and supporting functions" msgstr "" #. Tag: para #: release_notes.xml:340 #, no-c-format msgid "Spherical algorithms (Dave Skea)" msgstr "" #. Tag: para #: release_notes.xml:341 #, no-c-format msgid "Object/index implementation (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:342 #, no-c-format msgid "Selectivity implementation (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:343 #, no-c-format msgid "Serializations to KML, GML and JSON (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:344 #, no-c-format msgid "ST_Area, ST_Distance, ST_DWithin, ST_GeogFromText, ST_GeogFromWKB, ST_Intersects, ST_Covers, ST_Buffer (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:350 #, no-c-format msgid "Performance improvements to ST_Distance (Nicklas Aven)" msgstr "" #. Tag: para #: release_notes.xml:351 #, no-c-format msgid "Documentation updates and improvements (Regina Obe, Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:352 #, no-c-format msgid "Testing and quality control (Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:353 #, no-c-format msgid "PostGIS 1.5 support PostgreSQL 8.5 trunk (Guillaume Lelarge)" msgstr "" #. Tag: para #: release_notes.xml:354 #, no-c-format msgid "Win32 support and improvement of core shp2pgsql-gui (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:355 #, no-c-format msgid "In place 'make check' support (Paul Ramsey)" msgstr "" #. Tag: title #: release_notes.xml:359 release_notes.xml:425 release_notes.xml:610 release_notes.xml:661 release_notes.xml:712 release_notes.xml:846 release_notes.xml:912 release_notes.xml:1022 release_notes.xml:1129 release_notes.xml:1249 release_notes.xml:1314 release_notes.xml:1361 #, no-c-format msgid "Bug fixes" msgstr "" #. Tag: ulink #: release_notes.xml:360 #, no-c-format msgid "http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS+1.5.0&order=priority" msgstr "" #. Tag: title #: release_notes.xml:365 #, no-c-format msgid "Release 1.4.0" msgstr "" #. Tag: para #: release_notes.xml:366 #, no-c-format msgid "Release date: 2009/07/24" msgstr "" #. Tag: para #: release_notes.xml:367 #, no-c-format msgid "This release provides performance enhancements, improved internal structures and testing, new features, and upgraded documentation. If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a hard upgrade is recommended." msgstr "" #. Tag: para #: release_notes.xml:373 #, no-c-format msgid "As of the 1.4 release series, the public API of PostGIS will not change during minor releases." msgstr "" #. Tag: para #: release_notes.xml:378 #, no-c-format msgid "The versions below are the *minimum* requirements for PostGIS 1.4" msgstr "" #. Tag: para #: release_notes.xml:379 #, no-c-format msgid "PostgreSQL 8.2 and higher on all platforms" msgstr "" #. Tag: para #: release_notes.xml:380 #, no-c-format msgid "GEOS 3.0 and higher only" msgstr "" #. Tag: para #: release_notes.xml:381 #, no-c-format msgid "PROJ4 4.5 and higher only" msgstr "" #. Tag: para #: release_notes.xml:386 #, no-c-format msgid "ST_Union() uses high-speed cascaded union when compiled against GEOS 3.1+ (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:388 #, no-c-format msgid "ST_ContainsProperly() requires GEOS 3.1+" msgstr "" #. Tag: para #: release_notes.xml:389 #, no-c-format msgid "ST_Intersects(), ST_Contains(), ST_Within() use high-speed cached prepared geometry against GEOS 3.1+ (Paul Ramsey / funded by Zonar Systems)" msgstr "" #. Tag: para #: release_notes.xml:390 #, no-c-format msgid "Vastly improved documentation and reference manual (Regina Obe & Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:391 #, no-c-format msgid "Figures and diagram examples in the reference manual (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:392 #, no-c-format msgid "ST_IsValidReason() returns readable explanations for validity failures (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:393 #, no-c-format msgid "ST_GeoHash() returns a geohash.org signature for geometries (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:394 #, no-c-format msgid "GTK+ multi-platform GUI for shape file loading (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:395 #, no-c-format msgid "ST_LineCrossingDirection() returns crossing directions (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:396 #, no-c-format msgid "ST_LocateBetweenElevations() returns sub-string based on Z-ordinate. (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:397 #, no-c-format msgid "Geometry parser returns explicit error message about location of syntax errors (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:398 #, no-c-format msgid "ST_AsGeoJSON() return JSON formatted geometry (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:399 #, no-c-format msgid "Populate_Geometry_Columns() -- automatically add records to geometry_columns for TABLES and VIEWS (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:400 #, no-c-format msgid "ST_MinimumBoundingCircle() -- returns the smallest circle polygon that can encompass a geometry (Bruce Rindahl)" msgstr "" #. Tag: para #: release_notes.xml:405 #, no-c-format msgid "Core geometry system moved into independent library, liblwgeom. (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:406 #, no-c-format msgid "New build system uses PostgreSQL \"pgxs\" build bootstrapper. (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:407 #, no-c-format msgid "Debugging framework formalized and simplified. (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:408 #, no-c-format msgid "All build-time #defines generated at configure time and placed in headers for easier cross-platform support (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:409 #, no-c-format msgid "Logging framework formalized and simplified (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:410 #, no-c-format msgid "Expanded and more stable support for CIRCULARSTRING, COMPOUNDCURVE and CURVEPOLYGON, better parsing, wider support in functions (Mark Leslie & Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:411 #, no-c-format msgid "Improved support for OpenSolaris builds (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:412 #, no-c-format msgid "Improved support for MSVC builds (Mateusz Loskot)" msgstr "" #. Tag: para #: release_notes.xml:413 #, no-c-format msgid "Updated KML support (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:414 #, no-c-format msgid "Unit testing framework for liblwgeom (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:415 #, no-c-format msgid "New testing framework to comprehensively exercise every PostGIS function (Regine Obe)" msgstr "" #. Tag: para #: release_notes.xml:416 #, no-c-format msgid "Performance improvements to all geometry aggregate functions (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:417 #, no-c-format msgid "Support for the upcoming PostgreSQL 8.4 (Mark Cave-Ayland, Talha Bin Rizwan)" msgstr "" #. Tag: para #: release_notes.xml:418 #, no-c-format msgid "Shp2pgsql and pgsql2shp re-worked to depend on the common parsing/unparsing code in liblwgeom (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:419 #, no-c-format msgid "Use of PDF DbLatex to build PDF docs and preliminary instructions for build (Jean David Techer)" msgstr "" #. Tag: para #: release_notes.xml:420 #, no-c-format msgid "Automated User documentation build (PDF and HTML) and Developer Doxygen Documentation (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:421 #, no-c-format msgid "Automated build of document images using ImageMagick from WKT geometry text files (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:422 #, no-c-format msgid "More attractive CSS for HTML documentation (Dane Springmeyer)" msgstr "" #. Tag: ulink #: release_notes.xml:426 #, no-c-format msgid "http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS+1.4.0&order=priority" msgstr "" #. Tag: title #: release_notes.xml:431 #, no-c-format msgid "Release 1.3.6" msgstr "" #. Tag: para #: release_notes.xml:432 #, no-c-format msgid "Release date: 2009/05/04" msgstr "" #. Tag: para #: release_notes.xml:433 #, no-c-format msgid "If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. This release adds support for PostgreSQL 8.4, exporting prj files from the database with shape data, some crash fixes for shp2pgsql, and several small bug fixes in the handling of \"curve\" types, logical error importing dbf only files, improved error handling of AddGeometryColumns." msgstr "" #. Tag: title #: release_notes.xml:440 #, no-c-format msgid "Release 1.3.5" msgstr "" #. Tag: para #: release_notes.xml:441 #, no-c-format msgid "Release date: 2008/12/15" msgstr "" #. Tag: para #: release_notes.xml:442 #, no-c-format msgid "If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a hard upgrade is recommended. This release is a bug fix release to address a failure in ST_Force_Collection and related functions that critically affects using MapServer with LINE layers." msgstr "" #. Tag: title #: release_notes.xml:449 #, no-c-format msgid "Release 1.3.4" msgstr "" #. Tag: para #: release_notes.xml:450 #, no-c-format msgid "Release date: 2008/11/24" msgstr "" #. Tag: para #: release_notes.xml:451 #, no-c-format msgid "This release adds support for GeoJSON output, building with PostgreSQL 8.4, improves documentation quality and output aesthetics, adds function-level SQL documentation, and improves performance for some spatial predicates (point-in-polygon tests)." msgstr "" #. Tag: para #: release_notes.xml:456 #, no-c-format msgid "Bug fixes include removal of crashers in handling circular strings for many functions, some memory leaks removed, a linear referencing failure for measures on vertices, and more. See the NEWS file for details." msgstr "" #. Tag: title #: release_notes.xml:463 #, no-c-format msgid "Release 1.3.3" msgstr "" #. Tag: para #: release_notes.xml:465 #, no-c-format msgid "Release date: 2008/04/12" msgstr "" #. Tag: para #: release_notes.xml:467 #, no-c-format msgid "This release fixes bugs shp2pgsql, adds enhancements to SVG and KML support, adds a ST_SimplifyPreserveTopology function, makes the build more sensitive to GEOS versions, and fixes a handful of severe but rare failure cases." msgstr "" #. Tag: title #: release_notes.xml:474 #, no-c-format msgid "Release 1.3.2" msgstr "" #. Tag: para #: release_notes.xml:476 #, no-c-format msgid "Release date: 2007/12/01" msgstr "" #. Tag: para #: release_notes.xml:478 #, no-c-format msgid "This release fixes bugs in ST_EndPoint() and ST_Envelope, improves support for JDBC building and OS/X, and adds better support for GML output with ST_AsGML(), including GML3 output." msgstr "" #. Tag: title #: release_notes.xml:484 #, no-c-format msgid "Release 1.3.1" msgstr "" #. Tag: para #: release_notes.xml:486 #, no-c-format msgid "Release date: 2007/08/13" msgstr "" #. Tag: para #: release_notes.xml:488 #, no-c-format msgid "This release fixes some oversights in the previous release around version numbering, documentation, and tagging." msgstr "" #. Tag: title #: release_notes.xml:493 #, no-c-format msgid "Release 1.3.0" msgstr "" #. Tag: para #: release_notes.xml:495 #, no-c-format msgid "Release date: 2007/08/09" msgstr "" #. Tag: para #: release_notes.xml:497 #, no-c-format msgid "This release provides performance enhancements to the relational functions, adds new relational functions and begins the migration of our function names to the SQL-MM convention, using the spatial type (SP) prefix." msgstr "" #. Tag: title #: release_notes.xml:503 #, no-c-format msgid "Added Functionality" msgstr "" #. Tag: para #: release_notes.xml:505 #, no-c-format msgid "JDBC: Added Hibernate Dialect (thanks to Norman Barker)" msgstr "" #. Tag: para #: release_notes.xml:507 #, no-c-format msgid "Added ST_Covers and ST_CoveredBy relational functions. Description and justification of these functions can be found at http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html" msgstr "" #. Tag: para #: release_notes.xml:511 #, no-c-format msgid "Added ST_DWithin relational function." msgstr "" #. Tag: title #: release_notes.xml:515 #, no-c-format msgid "Performance Enhancements" msgstr "" #. Tag: para #: release_notes.xml:517 #, no-c-format msgid "Added cached and indexed point-in-polygon short-circuits for the functions ST_Contains, ST_Intersects, ST_Within and ST_Disjoint" msgstr "" #. Tag: para #: release_notes.xml:520 #, no-c-format msgid "Added inline index support for relational functions (except ST_Disjoint)" msgstr "" #. Tag: title #: release_notes.xml:525 #, no-c-format msgid "Other Changes" msgstr "" #. Tag: para #: release_notes.xml:527 #, no-c-format msgid "Extended curved geometry support into the geometry accessor and some processing functions" msgstr "" #. Tag: para #: release_notes.xml:530 #, no-c-format msgid "Began migration of functions to the SQL-MM naming convention; using a spatial type (ST) prefix." msgstr "" #. Tag: para #: release_notes.xml:533 #, no-c-format msgid "Added initial support for PostgreSQL 8.3" msgstr "" #. Tag: title #: release_notes.xml:538 #, no-c-format msgid "Release 1.2.1" msgstr "" #. Tag: para #: release_notes.xml:540 #, no-c-format msgid "Release date: 2007/01/11" msgstr "" #. Tag: para #: release_notes.xml:542 #, no-c-format msgid "This release provides bug fixes in PostgreSQL 8.2 support and some small performance enhancements." msgstr "" #. Tag: title #: release_notes.xml:546 release_notes.xml:574 release_notes.xml:1796 #, no-c-format msgid "Changes" msgstr "" #. Tag: para #: release_notes.xml:548 #, no-c-format msgid "Fixed point-in-polygon shortcut bug in Within()." msgstr "" #. Tag: para #: release_notes.xml:550 #, no-c-format msgid "Fixed PostgreSQL 8.2 NULL handling for indexes." msgstr "" #. Tag: para #: release_notes.xml:552 #, no-c-format msgid "Updated RPM spec files." msgstr "" #. Tag: para #: release_notes.xml:554 #, no-c-format msgid "Added short-circuit for Transform() in no-op case." msgstr "" #. Tag: para #: release_notes.xml:556 #, no-c-format msgid "JDBC: Fixed JTS handling for multi-dimensional geometries (thanks to Thomas Marti for hint and partial patch). Additionally, now JavaDoc is compiled and packaged. Fixed classpath problems with GCJ. Fixed pgjdbc 8.2 compatibility, losing support for jdk 1.3 and older." msgstr "" #. Tag: title #: release_notes.xml:565 #, no-c-format msgid "Release 1.2.0" msgstr "" #. Tag: para #: release_notes.xml:567 #, no-c-format msgid "Release date: 2006/12/08" msgstr "" #. Tag: para #: release_notes.xml:569 #, no-c-format msgid "This release provides type definitions along with serialization/deserialization capabilities for SQL-MM defined curved geometries, as well as performance enhancements." msgstr "" #. Tag: para #: release_notes.xml:576 #, no-c-format msgid "Added curved geometry type support for serialization/deserialization" msgstr "" #. Tag: para #: release_notes.xml:579 #, no-c-format msgid "Added point-in-polygon shortcircuit to the Contains and Within functions to improve performance for these cases." msgstr "" #. Tag: title #: release_notes.xml:585 #, no-c-format msgid "Release 1.1.6" msgstr "" #. Tag: para #: release_notes.xml:587 #, no-c-format msgid "Release date: 2006/11/02" msgstr "" #. Tag: para #: release_notes.xml:589 #, no-c-format msgid "This is a bugfix release, in particular fixing a critical error with GEOS interface in 64bit systems. Includes an updated of the SRS parameters and an improvement in reprojections (take Z in consideration). Upgrade is encouraged." msgstr "" #. Tag: title #: release_notes.xml:595 release_notes.xml:646 release_notes.xml:697 release_notes.xml:752 release_notes.xml:831 release_notes.xml:897 release_notes.xml:970 release_notes.xml:1114 release_notes.xml:1171 release_notes.xml:1234 release_notes.xml:1292 release_notes.xml:1350 release_notes.xml:1390 release_notes.xml:1442 release_notes.xml:1494 release_notes.xml:1533 release_notes.xml:1570 release_notes.xml:1637 release_notes.xml:1734 release_notes.xml:1788 #, no-c-format msgid "Upgrading" msgstr "" #. Tag: para #: release_notes.xml:597 release_notes.xml:648 release_notes.xml:699 release_notes.xml:754 release_notes.xml:833 release_notes.xml:899 #, no-c-format msgid "If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure." msgstr "" #. Tag: para #: release_notes.xml:600 release_notes.xml:651 release_notes.xml:702 release_notes.xml:757 release_notes.xml:836 release_notes.xml:902 release_notes.xml:978 release_notes.xml:1119 release_notes.xml:1176 release_notes.xml:1239 #, no-c-format msgid "If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes chapter." msgstr "" #. Tag: para #: release_notes.xml:605 release_notes.xml:656 release_notes.xml:707 release_notes.xml:762 release_notes.xml:841 release_notes.xml:907 release_notes.xml:983 release_notes.xml:1124 release_notes.xml:1181 release_notes.xml:1244 #, no-c-format msgid "Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade." msgstr "" #. Tag: para #: release_notes.xml:612 #, no-c-format msgid "fixed CAPI change that broke 64-bit platforms" msgstr "" #. Tag: para #: release_notes.xml:614 #, no-c-format msgid "loader/dumper: fixed regression tests and usage output" msgstr "" #. Tag: para #: release_notes.xml:616 #, no-c-format msgid "Fixed setSRID() bug in JDBC, thanks to Thomas Marti" msgstr "" #. Tag: title #: release_notes.xml:620 release_notes.xml:804 release_notes.xml:875 release_notes.xml:1089 release_notes.xml:1215 release_notes.xml:1516 release_notes.xml:1553 release_notes.xml:1605 release_notes.xml:1707 release_notes.xml:1770 #, no-c-format msgid "Other changes" msgstr "" #. Tag: para #: release_notes.xml:622 #, no-c-format msgid "use Z ordinate in reprojections" msgstr "" #. Tag: para #: release_notes.xml:624 #, no-c-format msgid "spatial_ref_sys.sql updated to EPSG 6.11.1" msgstr "" #. Tag: para #: release_notes.xml:626 #, no-c-format msgid "Simplified Version.config infrastructure to use a single pack of version variables for everything." msgstr "" #. Tag: para #: release_notes.xml:629 #, no-c-format msgid "Include the Version.config in loader/dumper USAGE messages" msgstr "" #. Tag: para #: release_notes.xml:632 #, no-c-format msgid "Replace hand-made, fragile JDBC version parser with Properties" msgstr "" #. Tag: title #: release_notes.xml:638 #, no-c-format msgid "Release 1.1.5" msgstr "" #. Tag: para #: release_notes.xml:640 #, no-c-format msgid "Release date: 2006/10/13" msgstr "" #. Tag: para #: release_notes.xml:642 #, no-c-format msgid "This is an bugfix release, including a critical segfault on win32. Upgrade is encouraged." msgstr "" #. Tag: para #: release_notes.xml:663 #, no-c-format msgid "Fixed MingW link error that was causing pgsql2shp to segfault on Win32 when compiled for PostgreSQL 8.2" msgstr "" #. Tag: para #: release_notes.xml:666 #, no-c-format msgid "fixed nullpointer Exception in Geometry.equals() method in Java" msgstr "" #. Tag: para #: release_notes.xml:669 #, no-c-format msgid "Added EJB3Spatial.odt to fulfill the GPL requirement of distributing the \"preferred form of modification\"" msgstr "" #. Tag: para #: release_notes.xml:672 #, no-c-format msgid "Removed obsolete synchronization from JDBC Jts code." msgstr "" #. Tag: para #: release_notes.xml:674 #, no-c-format msgid "Updated heavily outdated README files for shp2pgsql/pgsql2shp by merging them with the manpages." msgstr "" #. Tag: para #: release_notes.xml:677 #, no-c-format msgid "Fixed version tag in jdbc code that still said \"1.1.3\" in the \"1.1.4\" release." msgstr "" #. Tag: para #: release_notes.xml:684 #, no-c-format msgid "Added -S option for non-multi geometries to shp2pgsql" msgstr "" #. Tag: title #: release_notes.xml:689 #, no-c-format msgid "Release 1.1.4" msgstr "" #. Tag: para #: release_notes.xml:691 #, no-c-format msgid "Release date: 2006/09/27" msgstr "" #. Tag: para #: release_notes.xml:693 #, no-c-format msgid "This is an bugfix release including some improvements in the Java interface. Upgrade is encouraged." msgstr "" #. Tag: para #: release_notes.xml:714 #, no-c-format msgid "Fixed support for PostgreSQL 8.2" msgstr "" #. Tag: para #: release_notes.xml:716 #, no-c-format msgid "Fixed bug in collect() function discarding SRID of input" msgstr "" #. Tag: para #: release_notes.xml:718 #, no-c-format msgid "Added SRID match check in MakeBox2d and MakeBox3d" msgstr "" #. Tag: para #: release_notes.xml:720 #, no-c-format msgid "Fixed regress tests to pass with GEOS-3.0.0" msgstr "" #. Tag: para #: release_notes.xml:722 #, no-c-format msgid "Improved pgsql2shp run concurrency." msgstr "" #. Tag: title #: release_notes.xml:726 #, no-c-format msgid "Java changes" msgstr "" #. Tag: para #: release_notes.xml:728 #, no-c-format msgid "reworked JTS support to reflect new upstream JTS developers' attitude to SRID handling. Simplifies code and drops build depend on GNU trove." msgstr "" #. Tag: para #: release_notes.xml:732 #, no-c-format msgid "Added EJB2 support generously donated by the \"Geodetix s.r.l. Company\" http://www.geodetix.it/" msgstr "" #. Tag: para #: release_notes.xml:735 #, no-c-format msgid "Added EJB3 tutorial / examples donated by Norman Barker <nbarker@ittvis.com>" msgstr "" #. Tag: para #: release_notes.xml:738 #, no-c-format msgid "Reorganized java directory layout a little." msgstr "" #. Tag: title #: release_notes.xml:743 #, no-c-format msgid "Release 1.1.3" msgstr "" #. Tag: para #: release_notes.xml:745 #, no-c-format msgid "Release date: 2006/06/30" msgstr "" #. Tag: para #: release_notes.xml:747 #, no-c-format msgid "This is an bugfix release including also some new functionalities (most notably long transaction support) and portability enhancements. Upgrade is encouraged." msgstr "" #. Tag: title #: release_notes.xml:767 #, no-c-format msgid "Bug fixes / correctness" msgstr "" #. Tag: para #: release_notes.xml:769 #, no-c-format msgid "BUGFIX in distance(poly,poly) giving wrong results." msgstr "" #. Tag: para #: release_notes.xml:771 #, no-c-format msgid "BUGFIX in pgsql2shp successful return code." msgstr "" #. Tag: para #: release_notes.xml:773 #, no-c-format msgid "BUGFIX in shp2pgsql handling of MultiLine WKT." msgstr "" #. Tag: para #: release_notes.xml:775 #, no-c-format msgid "BUGFIX in affine() failing to update bounding box." msgstr "" #. Tag: para #: release_notes.xml:777 #, no-c-format msgid "WKT parser: forbidden construction of multigeometries with EMPTY elements (still supported for GEOMETRYCOLLECTION)." msgstr "" #. Tag: title #: release_notes.xml:782 release_notes.xml:858 release_notes.xml:931 #, no-c-format msgid "New functionalities" msgstr "" #. Tag: para #: release_notes.xml:784 #, no-c-format msgid "NEW Long Transactions support." msgstr "" #. Tag: para #: release_notes.xml:786 #, no-c-format msgid "NEW DumpRings() function." msgstr "" #. Tag: para #: release_notes.xml:788 #, no-c-format msgid "NEW AsHEXEWKB(geom, XDR|NDR) function." msgstr "" #. Tag: title #: release_notes.xml:792 release_notes.xml:1683 #, no-c-format msgid "JDBC changes" msgstr "" #. Tag: para #: release_notes.xml:794 #, no-c-format msgid "Improved regression tests: MultiPoint and scientific ordinates" msgstr "" #. Tag: para #: release_notes.xml:797 #, no-c-format msgid "Fixed some minor bugs in jdbc code" msgstr "" #. Tag: para #: release_notes.xml:799 #, no-c-format msgid "Added proper accessor functions for all fields in preparation of making those fields private later" msgstr "" #. Tag: para #: release_notes.xml:806 #, no-c-format msgid "NEW regress test support for loader/dumper." msgstr "" #. Tag: para #: release_notes.xml:808 #, no-c-format msgid "Added --with-proj-libdir and --with-geos-libdir configure switches." msgstr "" #. Tag: para #: release_notes.xml:811 #, no-c-format msgid "Support for build Tru64 build." msgstr "" #. Tag: para #: release_notes.xml:813 #, no-c-format msgid "Use Jade for generating documentation." msgstr "" #. Tag: para #: release_notes.xml:815 #, no-c-format msgid "Don't link pgsql2shp to more libs then required." msgstr "" #. Tag: para #: release_notes.xml:817 #, no-c-format msgid "Initial support for PostgreSQL 8.2." msgstr "" #. Tag: title #: release_notes.xml:822 #, no-c-format msgid "Release 1.1.2" msgstr "" #. Tag: para #: release_notes.xml:824 #, no-c-format msgid "Release date: 2006/03/30" msgstr "" #. Tag: para #: release_notes.xml:826 #, no-c-format msgid "This is an bugfix release including some new functions and portability enhancements. Upgrade is encouraged." msgstr "" #. Tag: para #: release_notes.xml:848 #, no-c-format msgid "BUGFIX in SnapToGrid() computation of output bounding box" msgstr "" #. Tag: para #: release_notes.xml:850 #, no-c-format msgid "BUGFIX in EnforceRHR()" msgstr "" #. Tag: para #: release_notes.xml:852 #, no-c-format msgid "jdbc2 SRID handling fixes in JTS code" msgstr "" #. Tag: para #: release_notes.xml:854 #, no-c-format msgid "Fixed support for 64bit archs" msgstr "" #. Tag: para #: release_notes.xml:860 #, no-c-format msgid "Regress tests can now be run *before* postgis installation" msgstr "" #. Tag: para #: release_notes.xml:863 #, no-c-format msgid "New affine() matrix transformation functions" msgstr "" #. Tag: para #: release_notes.xml:865 #, no-c-format msgid "New rotate{,X,Y,Z}() function" msgstr "" #. Tag: para #: release_notes.xml:867 #, no-c-format msgid "Old translating and scaling functions now use affine() internally" msgstr "" #. Tag: para #: release_notes.xml:870 #, no-c-format msgid "Embedded access control in estimated_extent() for builds against pgsql >= 8.0.0" msgstr "" #. Tag: para #: release_notes.xml:877 #, no-c-format msgid "More portable ./configure script" msgstr "" #. Tag: para #: release_notes.xml:879 #, no-c-format msgid "Changed ./run_test script to have more sane default behaviour" msgstr "" #. Tag: title #: release_notes.xml:885 #, no-c-format msgid "Release 1.1.1" msgstr "" #. Tag: para #: release_notes.xml:887 #, no-c-format msgid "Release date: 2006/01/23" msgstr "" #. Tag: para #: release_notes.xml:889 #, no-c-format msgid "This is an important Bugfix release, upgrade is highly recommended. Previous version contained a bug in postgis_restore.pl preventing hard upgrade procedure to complete and a bug in GEOS-2.2+ connector preventing GeometryCollection objects to be used in topological operations." msgstr "" #. Tag: para #: release_notes.xml:914 #, no-c-format msgid "Fixed a premature exit in postgis_restore.pl" msgstr "" #. Tag: para #: release_notes.xml:916 #, no-c-format msgid "BUGFIX in geometrycollection handling of GEOS-CAPI connector" msgstr "" #. Tag: para #: release_notes.xml:919 #, no-c-format msgid "Solaris 2.7 and MingW support improvements" msgstr "" #. Tag: para #: release_notes.xml:921 #, no-c-format msgid "BUGFIX in line_locate_point()" msgstr "" #. Tag: para #: release_notes.xml:923 #, no-c-format msgid "Fixed handling of postgresql paths" msgstr "" #. Tag: para #: release_notes.xml:925 #, no-c-format msgid "BUGFIX in line_substring()" msgstr "" #. Tag: para #: release_notes.xml:927 #, no-c-format msgid "Added support for localized cluster in regress tester" msgstr "" #. Tag: para #: release_notes.xml:933 #, no-c-format msgid "New Z and M interpolation in line_substring()" msgstr "" #. Tag: para #: release_notes.xml:935 #, no-c-format msgid "New Z and M interpolation in line_interpolate_point()" msgstr "" #. Tag: para #: release_notes.xml:937 #, no-c-format msgid "added NumInteriorRing() alias due to OpenGIS ambiguity" msgstr "" #. Tag: title #: release_notes.xml:942 #, no-c-format msgid "Release 1.1.0" msgstr "" #. Tag: para #: release_notes.xml:944 #, no-c-format msgid "Release date: 2005/12/21" msgstr "" #. Tag: para #: release_notes.xml:946 #, no-c-format msgid "This is a Minor release, containing many improvements and new things. Most notably: build procedure greatly simplified; transform() performance drastically improved; more stable GEOS connectivity (CAPI support); lots of new functions; draft topology support." msgstr "" #. Tag: para #: release_notes.xml:951 #, no-c-format msgid "It is highly recommended that you upgrade to GEOS-2.2.x before installing PostGIS, this will ensure future GEOS upgrades won't require a rebuild of the PostGIS library." msgstr "" #. Tag: title #: release_notes.xml:956 #, no-c-format msgid "Credits" msgstr "" #. Tag: para #: release_notes.xml:958 #, no-c-format msgid "This release includes code from Mark Cave Ayland for caching of proj4 objects. Markus Schaber added many improvements in his JDBC2 code. Alex Bodnaru helped with PostgreSQL source dependency relief and provided Debian specfiles. Michael Fuhr tested new things on Solaris arch. David Techer and Gerald Fenoy helped testing GEOS C-API connector. Hartmut Tschauner provided code for the azimuth() function. Devrim GUNDUZ provided RPM specfiles. Carl Anderson helped with the new area building functions. See the credits section for more names." msgstr "" #. Tag: para #: release_notes.xml:972 #, no-c-format msgid "If you are upgrading from release 1.0.3 or later you DO NOT need a dump/reload. Simply sourcing the new lwpostgis_upgrade.sql script in all your existing databases will work. See the soft upgrade chapter for more information." msgstr "" #. Tag: title #: release_notes.xml:988 #, no-c-format msgid "New functions" msgstr "" #. Tag: para #: release_notes.xml:990 #, no-c-format msgid "scale() and transscale() companion methods to translate()" msgstr "" #. Tag: para #: release_notes.xml:992 #, no-c-format msgid "line_substring()" msgstr "" #. Tag: para #: release_notes.xml:994 #, no-c-format msgid "line_locate_point()" msgstr "" #. Tag: para #: release_notes.xml:996 #, no-c-format msgid "M(point)" msgstr "" #. Tag: para #: release_notes.xml:998 #, no-c-format msgid "LineMerge(geometry)" msgstr "" #. Tag: para #: release_notes.xml:1000 #, no-c-format msgid "shift_longitude(geometry)" msgstr "" #. Tag: para #: release_notes.xml:1002 #, no-c-format msgid "azimuth(geometry)" msgstr "" #. Tag: para #: release_notes.xml:1004 #, no-c-format msgid "locate_along_measure(geometry, float8)" msgstr "" #. Tag: para #: release_notes.xml:1006 #, no-c-format msgid "locate_between_measures(geometry, float8, float8)" msgstr "" #. Tag: para #: release_notes.xml:1008 #, no-c-format msgid "SnapToGrid by point offset (up to 4d support)" msgstr "" #. Tag: para #: release_notes.xml:1010 #, no-c-format msgid "BuildArea(any_geometry)" msgstr "" #. Tag: para #: release_notes.xml:1012 #, no-c-format msgid "OGC BdPolyFromText(linestring_wkt, srid)" msgstr "" #. Tag: para #: release_notes.xml:1014 #, no-c-format msgid "OGC BdMPolyFromText(linestring_wkt, srid)" msgstr "" #. Tag: para #: release_notes.xml:1016 #, no-c-format msgid "RemovePoint(linestring, offset)" msgstr "" #. Tag: para #: release_notes.xml:1018 #, no-c-format msgid "ReplacePoint(linestring, offset, point)" msgstr "" #. Tag: para #: release_notes.xml:1024 #, no-c-format msgid "Fixed memory leak in polygonize()" msgstr "" #. Tag: para #: release_notes.xml:1026 #, no-c-format msgid "Fixed bug in lwgeom_as_anytype cast functions" msgstr "" #. Tag: para #: release_notes.xml:1028 #, no-c-format msgid "Fixed USE_GEOS, USE_PROJ and USE_STATS elements of postgis_version() output to always reflect library state." msgstr "" #. Tag: title #: release_notes.xml:1033 #, no-c-format msgid "Function semantic changes" msgstr "" #. Tag: para #: release_notes.xml:1035 #, no-c-format msgid "SnapToGrid doesn't discard higher dimensions" msgstr "" #. Tag: para #: release_notes.xml:1037 #, no-c-format msgid "Changed Z() function to return NULL if requested dimension is not available" msgstr "" #. Tag: title #: release_notes.xml:1042 #, no-c-format msgid "Performance improvements" msgstr "" #. Tag: para #: release_notes.xml:1044 #, no-c-format msgid "Much faster transform() function, caching proj4 objects" msgstr "" #. Tag: para #: release_notes.xml:1046 #, no-c-format msgid "Removed automatic call to fix_geometry_columns() in AddGeometryColumns() and update_geometry_stats()" msgstr "" #. Tag: title #: release_notes.xml:1051 #, no-c-format msgid "JDBC2 works" msgstr "" #. Tag: para #: release_notes.xml:1053 #, no-c-format msgid "Makefile improvements" msgstr "" #. Tag: para #: release_notes.xml:1055 release_notes.xml:1091 #, no-c-format msgid "JTS support improvements" msgstr "" #. Tag: para #: release_notes.xml:1057 #, no-c-format msgid "Improved regression test system" msgstr "" #. Tag: para #: release_notes.xml:1059 #, no-c-format msgid "Basic consistency check method for geometry collections" msgstr "" #. Tag: para #: release_notes.xml:1061 #, no-c-format msgid "Support for (Hex)(E)wkb" msgstr "" #. Tag: para #: release_notes.xml:1063 #, no-c-format msgid "Autoprobing DriverWrapper for HexWKB / EWKT switching" msgstr "" #. Tag: para #: release_notes.xml:1065 #, no-c-format msgid "fix compile problems in ValueSetter for ancient jdk releases." msgstr "" #. Tag: para #: release_notes.xml:1068 #, no-c-format msgid "fix EWKT constructors to accept SRID=4711; representation" msgstr "" #. Tag: para #: release_notes.xml:1070 #, no-c-format msgid "added preliminary read-only support for java2d geometries" msgstr "" #. Tag: title #: release_notes.xml:1074 #, no-c-format msgid "Other new things" msgstr "" #. Tag: para #: release_notes.xml:1076 #, no-c-format msgid "Full autoconf-based configuration, with PostgreSQL source dependency relief" msgstr "" #. Tag: para #: release_notes.xml:1079 #, no-c-format msgid "GEOS C-API support (2.2.0 and higher)" msgstr "" #. Tag: para #: release_notes.xml:1081 #, no-c-format msgid "Initial support for topology modelling" msgstr "" #. Tag: para #: release_notes.xml:1083 #, no-c-format msgid "Debian and RPM specfiles" msgstr "" #. Tag: para #: release_notes.xml:1085 #, no-c-format msgid "New lwpostgis_upgrade.sql script" msgstr "" #. Tag: para #: release_notes.xml:1093 #, no-c-format msgid "Stricter mapping between DBF and SQL integer and string attributes" msgstr "" #. Tag: para #: release_notes.xml:1096 #, no-c-format msgid "Wider and cleaner regression test suite" msgstr "" #. Tag: para #: release_notes.xml:1098 #, no-c-format msgid "old jdbc code removed from release" msgstr "" #. Tag: para #: release_notes.xml:1100 #, no-c-format msgid "obsoleted direct use of postgis_proc_upgrade.pl" msgstr "" #. Tag: para #: release_notes.xml:1102 #, no-c-format msgid "scripts version unified with release version" msgstr "" #. Tag: title #: release_notes.xml:1107 #, no-c-format msgid "Release 1.0.6" msgstr "" #. Tag: para #: release_notes.xml:1109 #, no-c-format msgid "Release date: 2005/12/06" msgstr "" #. Tag: para #: release_notes.xml:1111 release_notes.xml:1347 #, no-c-format msgid "Contains a few bug fixes and improvements." msgstr "" #. Tag: para #: release_notes.xml:1116 release_notes.xml:1173 #, no-c-format msgid "If you are upgrading from release 1.0.3 or later you DO NOT need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1131 #, no-c-format msgid "Fixed palloc(0) call in collection deserializer (only gives problem with --enable-cassert)" msgstr "" #. Tag: para #: release_notes.xml:1134 #, no-c-format msgid "Fixed bbox cache handling bugs" msgstr "" #. Tag: para #: release_notes.xml:1136 #, no-c-format msgid "Fixed geom_accum(NULL, NULL) segfault" msgstr "" #. Tag: para #: release_notes.xml:1138 #, no-c-format msgid "Fixed segfault in addPoint()" msgstr "" #. Tag: para #: release_notes.xml:1140 #, no-c-format msgid "Fixed short-allocation in lwcollection_clone()" msgstr "" #. Tag: para #: release_notes.xml:1142 #, no-c-format msgid "Fixed bug in segmentize()" msgstr "" #. Tag: para #: release_notes.xml:1144 #, no-c-format msgid "Fixed bbox computation of SnapToGrid output" msgstr "" #. Tag: title #: release_notes.xml:1148 release_notes.xml:1266 release_notes.xml:1328 release_notes.xml:1374 #, no-c-format msgid "Improvements" msgstr "" #. Tag: para #: release_notes.xml:1150 #, no-c-format msgid "Initial support for postgresql 8.2" msgstr "" #. Tag: para #: release_notes.xml:1152 #, no-c-format msgid "Added missing SRID mismatch checks in GEOS ops" msgstr "" #. Tag: title #: release_notes.xml:1157 #, no-c-format msgid "Release 1.0.5" msgstr "" #. Tag: para #: release_notes.xml:1159 #, no-c-format msgid "Release date: 2005/11/25" msgstr "" #. Tag: para #: release_notes.xml:1161 #, no-c-format msgid "Contains memory-alignment fixes in the library, a segfault fix in loader's handling of UTF8 attributes and a few improvements and cleanups." msgstr "" #. Tag: para #: release_notes.xml:1166 #, no-c-format msgid "Return code of shp2pgsql changed from previous releases to conform to unix standards (return 0 on success)." msgstr "" #. Tag: title #: release_notes.xml:1186 release_notes.xml:1401 release_notes.xml:1453 release_notes.xml:1502 release_notes.xml:1544 release_notes.xml:1578 release_notes.xml:1645 release_notes.xml:1742 #, no-c-format msgid "Library changes" msgstr "" #. Tag: para #: release_notes.xml:1188 #, no-c-format msgid "Fixed memory alignment problems" msgstr "" #. Tag: para #: release_notes.xml:1190 #, no-c-format msgid "Fixed computation of null values fraction in analyzer" msgstr "" #. Tag: para #: release_notes.xml:1192 #, no-c-format msgid "Fixed a small bug in the getPoint4d_p() low-level function" msgstr "" #. Tag: para #: release_notes.xml:1195 #, no-c-format msgid "Speedup of serializer functions" msgstr "" #. Tag: para #: release_notes.xml:1197 #, no-c-format msgid "Fixed a bug in force_3dm(), force_3dz() and force_4d()" msgstr "" #. Tag: title #: release_notes.xml:1201 #, no-c-format msgid "Loader changes" msgstr "" #. Tag: para #: release_notes.xml:1203 #, no-c-format msgid "Fixed return code of shp2pgsql" msgstr "" #. Tag: para #: release_notes.xml:1205 #, no-c-format msgid "Fixed back-compatibility issue in loader (load of null shapefiles)" msgstr "" #. Tag: para #: release_notes.xml:1208 #, no-c-format msgid "Fixed handling of trailing dots in dbf numerical attributes" msgstr "" #. Tag: para #: release_notes.xml:1211 #, no-c-format msgid "Segfault fix in shp2pgsql (utf8 encoding)" msgstr "" #. Tag: para #: release_notes.xml:1217 #, no-c-format msgid "Schema aware postgis_proc_upgrade.pl, support for pgsql 7.2+" msgstr "" #. Tag: para #: release_notes.xml:1220 #, no-c-format msgid "New \"Reporting Bugs\" chapter in manual" msgstr "" #. Tag: title #: release_notes.xml:1225 #, no-c-format msgid "Release 1.0.4" msgstr "" #. Tag: para #: release_notes.xml:1227 #, no-c-format msgid "Release date: 2005/09/09" msgstr "" #. Tag: para #: release_notes.xml:1229 #, no-c-format msgid "Contains important bug fixes and a few improvements. In particular, it fixes a memory leak preventing successful build of GiST indexes for large spatial tables." msgstr "" #. Tag: para #: release_notes.xml:1236 #, no-c-format msgid "If you are upgrading from release 1.0.3 you DO NOT need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1251 #, no-c-format msgid "Memory leak plugged in GiST indexing" msgstr "" #. Tag: para #: release_notes.xml:1253 #, no-c-format msgid "Segfault fix in transform() handling of proj4 errors" msgstr "" #. Tag: para #: release_notes.xml:1255 #, no-c-format msgid "Fixed some proj4 texts in spatial_ref_sys (missing +proj)" msgstr "" #. Tag: para #: release_notes.xml:1257 #, no-c-format msgid "Loader: fixed string functions usage, reworked NULL objects check, fixed segfault on MULTILINESTRING input." msgstr "" #. Tag: para #: release_notes.xml:1260 #, no-c-format msgid "Fixed bug in MakeLine dimension handling" msgstr "" #. Tag: para #: release_notes.xml:1262 #, no-c-format msgid "Fixed bug in translate() corrupting output bounding box" msgstr "" #. Tag: para #: release_notes.xml:1268 #, no-c-format msgid "Documentation improvements" msgstr "" #. Tag: para #: release_notes.xml:1270 #, no-c-format msgid "More robust selectivity estimator" msgstr "" #. Tag: para #: release_notes.xml:1272 #, no-c-format msgid "Minor speedup in distance()" msgstr "" #. Tag: para #: release_notes.xml:1274 #, no-c-format msgid "Minor cleanups" msgstr "" #. Tag: para #: release_notes.xml:1276 #, no-c-format msgid "GiST indexing cleanup" msgstr "" #. Tag: para #: release_notes.xml:1278 #, no-c-format msgid "Looser syntax acceptance in box3d parser" msgstr "" #. Tag: title #: release_notes.xml:1283 #, no-c-format msgid "Release 1.0.3" msgstr "" #. Tag: para #: release_notes.xml:1285 #, no-c-format msgid "Release date: 2005/08/08" msgstr "" #. Tag: para #: release_notes.xml:1287 #, no-c-format msgid "Contains some bug fixes - including a severe one affecting correctness of stored geometries - and a few improvements." msgstr "" #. Tag: para #: release_notes.xml:1294 #, no-c-format msgid "Due to a bug in a bounding box computation routine, the upgrade procedure requires special attention, as bounding boxes cached in the database could be incorrect." msgstr "" #. Tag: para #: release_notes.xml:1298 #, no-c-format msgid "An hard upgrade procedure (dump/reload) will force recomputation of all bounding boxes (not included in dumps). This is required if upgrading from releases prior to 1.0.0RC6." msgstr "" #. Tag: para #: release_notes.xml:1303 #, no-c-format msgid "If you are upgrading from versions 1.0.0RC6 or up, this release includes a perl script (utils/rebuild_bbox_caches.pl) to force recomputation of geometries' bounding boxes and invoke all operations required to propagate eventual changes in them (geometry statistics update, reindexing). Invoke the script after a make install (run with no args for syntax help). Optionally run utils/postgis_proc_upgrade.pl to refresh postgis procedures and functions signatures (see Soft upgrade)." msgstr "" #. Tag: para #: release_notes.xml:1316 #, no-c-format msgid "Severe bugfix in lwgeom's 2d bounding box computation" msgstr "" #. Tag: para #: release_notes.xml:1318 #, no-c-format msgid "Bugfix in WKT (-w) POINT handling in loader" msgstr "" #. Tag: para #: release_notes.xml:1320 #, no-c-format msgid "Bugfix in dumper on 64bit machines" msgstr "" #. Tag: para #: release_notes.xml:1322 #, no-c-format msgid "Bugfix in dumper handling of user-defined queries" msgstr "" #. Tag: para #: release_notes.xml:1324 #, no-c-format msgid "Bugfix in create_undef.pl script" msgstr "" #. Tag: para #: release_notes.xml:1330 #, no-c-format msgid "Small performance improvement in canonical input function" msgstr "" #. Tag: para #: release_notes.xml:1332 #, no-c-format msgid "Minor cleanups in loader" msgstr "" #. Tag: para #: release_notes.xml:1334 #, no-c-format msgid "Support for multibyte field names in loader" msgstr "" #. Tag: para #: release_notes.xml:1336 #, no-c-format msgid "Improvement in the postgis_restore.pl script" msgstr "" #. Tag: para #: release_notes.xml:1338 #, no-c-format msgid "New rebuild_bbox_caches.pl util script" msgstr "" #. Tag: title #: release_notes.xml:1343 #, no-c-format msgid "Release 1.0.2" msgstr "" #. Tag: para #: release_notes.xml:1345 #, no-c-format msgid "Release date: 2005/07/04" msgstr "" #. Tag: para #: release_notes.xml:1352 release_notes.xml:1392 #, no-c-format msgid "If you are upgrading from release 1.0.0RC6 or up you DO NOT need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1355 release_notes.xml:1395 #, no-c-format msgid "Upgrading from older releases requires a dump/reload. See the upgrading chapter for more informations." msgstr "" #. Tag: para #: release_notes.xml:1363 #, no-c-format msgid "Fault tolerant btree ops" msgstr "" #. Tag: para #: release_notes.xml:1365 #, no-c-format msgid "Memory leak plugged in pg_error" msgstr "" #. Tag: para #: release_notes.xml:1367 #, no-c-format msgid "Rtree index fix" msgstr "" #. Tag: para #: release_notes.xml:1369 #, no-c-format msgid "Cleaner build scripts (avoided mix of CFLAGS and CXXFLAGS)" msgstr "" #. Tag: para #: release_notes.xml:1376 #, no-c-format msgid "New index creation capabilities in loader (-I switch)" msgstr "" #. Tag: para #: release_notes.xml:1378 #, no-c-format msgid "Initial support for postgresql 8.1dev" msgstr "" #. Tag: title #: release_notes.xml:1383 #, no-c-format msgid "Release 1.0.1" msgstr "" #. Tag: para #: release_notes.xml:1385 #, no-c-format msgid "Release date: 2005/05/24" msgstr "" #. Tag: para #: release_notes.xml:1387 #, no-c-format msgid "Contains a few bug fixes and some improvements." msgstr "" #. Tag: para #: release_notes.xml:1403 #, no-c-format msgid "BUGFIX in 3d computation of length_spheroid()" msgstr "" #. Tag: para #: release_notes.xml:1405 #, no-c-format msgid "BUGFIX in join selectivity estimator" msgstr "" #. Tag: title #: release_notes.xml:1409 release_notes.xml:1465 #, no-c-format msgid "Other changes/additions" msgstr "" #. Tag: para #: release_notes.xml:1411 #, no-c-format msgid "BUGFIX in shp2pgsql escape functions" msgstr "" #. Tag: para #: release_notes.xml:1413 #, no-c-format msgid "better support for concurrent postgis in multiple schemas" msgstr "" #. Tag: para #: release_notes.xml:1415 #, no-c-format msgid "documentation fixes" msgstr "" #. Tag: para #: release_notes.xml:1417 #, no-c-format msgid "jdbc2: compile with \"-target 1.2 -source 1.2\" by default" msgstr "" #. Tag: para #: release_notes.xml:1419 #, no-c-format msgid "NEW -k switch for pgsql2shp" msgstr "" #. Tag: para #: release_notes.xml:1421 #, no-c-format msgid "NEW support for custom createdb options in postgis_restore.pl" msgstr "" #. Tag: para #: release_notes.xml:1424 #, no-c-format msgid "BUGFIX in pgsql2shp attribute names unicity enforcement" msgstr "" #. Tag: para #: release_notes.xml:1426 #, no-c-format msgid "BUGFIX in Paris projections definitions" msgstr "" #. Tag: para #: release_notes.xml:1428 #, no-c-format msgid "postgis_restore.pl cleanups" msgstr "" #. Tag: title #: release_notes.xml:1433 #, no-c-format msgid "Release 1.0.0" msgstr "" #. Tag: para #: release_notes.xml:1435 #, no-c-format msgid "Release date: 2005/04/19" msgstr "" #. Tag: para #: release_notes.xml:1437 #, no-c-format msgid "Final 1.0.0 release. Contains a few bug fixes, some improvements in the loader (most notably support for older postgis versions), and more docs." msgstr "" #. Tag: para #: release_notes.xml:1444 #, no-c-format msgid "If you are upgrading from release 1.0.0RC6 you DO NOT need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1447 release_notes.xml:1538 #, no-c-format msgid "Upgrading from any other precedent release requires a dump/reload. See the upgrading chapter for more informations." msgstr "" #. Tag: para #: release_notes.xml:1455 #, no-c-format msgid "BUGFIX in transform() releasing random memory address" msgstr "" #. Tag: para #: release_notes.xml:1457 #, no-c-format msgid "BUGFIX in force_3dm() allocating less memory then required" msgstr "" #. Tag: para #: release_notes.xml:1460 #, no-c-format msgid "BUGFIX in join selectivity estimator (defaults, leaks, tuplecount, sd)" msgstr "" #. Tag: para #: release_notes.xml:1467 #, no-c-format msgid "BUGFIX in shp2pgsql escape of values starting with tab or single-quote" msgstr "" #. Tag: para #: release_notes.xml:1470 #, no-c-format msgid "NEW manual pages for loader/dumper" msgstr "" #. Tag: para #: release_notes.xml:1472 #, no-c-format msgid "NEW shp2pgsql support for old (HWGEOM) postgis versions" msgstr "" #. Tag: para #: release_notes.xml:1474 #, no-c-format msgid "NEW -p (prepare) flag for shp2pgsql" msgstr "" #. Tag: para #: release_notes.xml:1476 #, no-c-format msgid "NEW manual chapter about OGC compliancy enforcement" msgstr "" #. Tag: para #: release_notes.xml:1478 #, no-c-format msgid "NEW autoconf support for JTS lib" msgstr "" #. Tag: para #: release_notes.xml:1480 #, no-c-format msgid "BUGFIX in estimator testers (support for LWGEOM and schema parsing)" msgstr "" #. Tag: title #: release_notes.xml:1486 #, no-c-format msgid "Release 1.0.0RC6" msgstr "" #. Tag: para #: release_notes.xml:1488 #, no-c-format msgid "Release date: 2005/03/30" msgstr "" #. Tag: para #: release_notes.xml:1490 #, no-c-format msgid "Sixth release candidate for 1.0.0. Contains a few bug fixes and cleanups." msgstr "" #. Tag: para #: release_notes.xml:1496 release_notes.xml:1572 release_notes.xml:1639 release_notes.xml:1736 release_notes.xml:1790 #, no-c-format msgid "You need a dump/reload to upgrade from precedent releases. See the upgrading chapter for more informations." msgstr "" #. Tag: para #: release_notes.xml:1504 #, no-c-format msgid "BUGFIX in multi()" msgstr "" #. Tag: para #: release_notes.xml:1506 #, no-c-format msgid "early return [when noop] from multi()" msgstr "" #. Tag: title #: release_notes.xml:1510 release_notes.xml:1596 release_notes.xml:1669 release_notes.xml:1761 #, no-c-format msgid "Scripts changes" msgstr "" #. Tag: para #: release_notes.xml:1512 #, no-c-format msgid "dropped {x,y}{min,max}(box2d) functions" msgstr "" #. Tag: para #: release_notes.xml:1518 #, no-c-format msgid "BUGFIX in postgis_restore.pl scrip" msgstr "" #. Tag: para #: release_notes.xml:1520 #, no-c-format msgid "BUGFIX in dumper's 64bit support" msgstr "" #. Tag: title #: release_notes.xml:1525 #, no-c-format msgid "Release 1.0.0RC5" msgstr "" #. Tag: para #: release_notes.xml:1527 #, no-c-format msgid "Release date: 2005/03/25" msgstr "" #. Tag: para #: release_notes.xml:1529 #, no-c-format msgid "Fifth release candidate for 1.0.0. Contains a few bug fixes and a improvements." msgstr "" #. Tag: para #: release_notes.xml:1535 #, no-c-format msgid "If you are upgrading from release 1.0.0RC4 you DO NOT need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1546 #, no-c-format msgid "BUGFIX (segfaulting) in box3d computation (yes, another!)." msgstr "" #. Tag: para #: release_notes.xml:1549 #, no-c-format msgid "BUGFIX (segfaulting) in estimated_extent()." msgstr "" #. Tag: para #: release_notes.xml:1555 #, no-c-format msgid "Small build scripts and utilities refinements." msgstr "" #. Tag: para #: release_notes.xml:1557 #, no-c-format msgid "Additional performance tips documented." msgstr "" #. Tag: title #: release_notes.xml:1562 #, no-c-format msgid "Release 1.0.0RC4" msgstr "" #. Tag: para #: release_notes.xml:1564 #, no-c-format msgid "Release date: 2005/03/18" msgstr "" #. Tag: para #: release_notes.xml:1566 #, no-c-format msgid "Fourth release candidate for 1.0.0. Contains bug fixes and a few improvements." msgstr "" #. Tag: para #: release_notes.xml:1580 #, no-c-format msgid "BUGFIX (segfaulting) in geom_accum()." msgstr "" #. Tag: para #: release_notes.xml:1582 #, no-c-format msgid "BUGFIX in 64bit architectures support." msgstr "" #. Tag: para #: release_notes.xml:1584 #, no-c-format msgid "BUGFIX in box3d computation function with collections." msgstr "" #. Tag: para #: release_notes.xml:1586 #, no-c-format msgid "NEW subselects support in selectivity estimator." msgstr "" #. Tag: para #: release_notes.xml:1588 #, no-c-format msgid "Early return from force_collection." msgstr "" #. Tag: para #: release_notes.xml:1590 #, no-c-format msgid "Consistency check fix in SnapToGrid()." msgstr "" #. Tag: para #: release_notes.xml:1592 #, no-c-format msgid "Box2d output changed back to 15 significant digits." msgstr "" #. Tag: para #: release_notes.xml:1598 #, no-c-format msgid "NEW distance_sphere() function." msgstr "" #. Tag: para #: release_notes.xml:1600 #, no-c-format msgid "Changed get_proj4_from_srid implementation to use PL/PGSQL instead of SQL." msgstr "" #. Tag: para #: release_notes.xml:1607 #, no-c-format msgid "BUGFIX in loader and dumper handling of MultiLine shapes" msgstr "" #. Tag: para #: release_notes.xml:1609 #, no-c-format msgid "BUGFIX in loader, skipping all but first hole of polygons." msgstr "" #. Tag: para #: release_notes.xml:1612 #, no-c-format msgid "jdbc2: code cleanups, Makefile improvements" msgstr "" #. Tag: para #: release_notes.xml:1614 #, no-c-format msgid "FLEX and YACC variables set *after* pgsql Makefile.global is included and only if the pgsql *stripped* version evaluates to the empty string" msgstr "" #. Tag: para #: release_notes.xml:1618 #, no-c-format msgid "Added already generated parser in release" msgstr "" #. Tag: para #: release_notes.xml:1620 #, no-c-format msgid "Build scripts refinements" msgstr "" #. Tag: para #: release_notes.xml:1622 #, no-c-format msgid "improved version handling, central Version.config" msgstr "" #. Tag: para #: release_notes.xml:1624 #, no-c-format msgid "improvements in postgis_restore.pl" msgstr "" #. Tag: title #: release_notes.xml:1629 #, no-c-format msgid "Release 1.0.0RC3" msgstr "" #. Tag: para #: release_notes.xml:1631 #, no-c-format msgid "Release date: 2005/02/24" msgstr "" #. Tag: para #: release_notes.xml:1633 #, no-c-format msgid "Third release candidate for 1.0.0. Contains many bug fixes and improvements." msgstr "" #. Tag: para #: release_notes.xml:1647 #, no-c-format msgid "BUGFIX in transform(): missing SRID, better error handling." msgstr "" #. Tag: para #: release_notes.xml:1650 #, no-c-format msgid "BUGFIX in memory alignment handling" msgstr "" #. Tag: para #: release_notes.xml:1652 #, no-c-format msgid "BUGFIX in force_collection() causing mapserver connector failures on simple (single) geometry types." msgstr "" #. Tag: para #: release_notes.xml:1655 #, no-c-format msgid "BUGFIX in GeometryFromText() missing to add a bbox cache." msgstr "" #. Tag: para #: release_notes.xml:1657 #, no-c-format msgid "reduced precision of box2d output." msgstr "" #. Tag: para #: release_notes.xml:1659 #, no-c-format msgid "prefixed DEBUG macros with PGIS_ to avoid clash with pgsql one" msgstr "" #. Tag: para #: release_notes.xml:1662 #, no-c-format msgid "plugged a leak in GEOS2POSTGIS converter" msgstr "" #. Tag: para #: release_notes.xml:1664 #, no-c-format msgid "Reduced memory usage by early releasing query-context palloced one." msgstr "" #. Tag: para #: release_notes.xml:1671 #, no-c-format msgid "BUGFIX in 72 index bindings." msgstr "" #. Tag: para #: release_notes.xml:1673 #, no-c-format msgid "BUGFIX in probe_geometry_columns() to work with PG72 and support multiple geometry columns in a single table" msgstr "" #. Tag: para #: release_notes.xml:1676 #, no-c-format msgid "NEW bool::text cast" msgstr "" #. Tag: para #: release_notes.xml:1678 #, no-c-format msgid "Some functions made IMMUTABLE from STABLE, for performance improvement." msgstr "" #. Tag: para #: release_notes.xml:1685 #, no-c-format msgid "jdbc2: small patches, box2d/3d tests, revised docs and license." msgstr "" #. Tag: para #: release_notes.xml:1688 #, no-c-format msgid "jdbc2: bug fix and testcase in for pgjdbc 8.0 type autoregistration" msgstr "" #. Tag: para #: release_notes.xml:1691 #, no-c-format msgid "jdbc2: Removed use of jdk1.4 only features to enable build with older jdk releases." msgstr "" #. Tag: para #: release_notes.xml:1694 #, no-c-format msgid "jdbc2: Added support for building against pg72jdbc2.jar" msgstr "" #. Tag: para #: release_notes.xml:1696 #, no-c-format msgid "jdbc2: updated and cleaned makefile" msgstr "" #. Tag: para #: release_notes.xml:1698 #, no-c-format msgid "jdbc2: added BETA support for jts geometry classes" msgstr "" #. Tag: para #: release_notes.xml:1700 #, no-c-format msgid "jdbc2: Skip known-to-fail tests against older PostGIS servers." msgstr "" #. Tag: para #: release_notes.xml:1703 #, no-c-format msgid "jdbc2: Fixed handling of measured geometries in EWKT." msgstr "" #. Tag: para #: release_notes.xml:1709 #, no-c-format msgid "new performance tips chapter in manual" msgstr "" #. Tag: para #: release_notes.xml:1711 #, no-c-format msgid "documentation updates: pgsql72 requirement, lwpostgis.sql" msgstr "" #. Tag: para #: release_notes.xml:1713 #, no-c-format msgid "few changes in autoconf" msgstr "" #. Tag: para #: release_notes.xml:1715 #, no-c-format msgid "BUILDDATE extraction made more portable" msgstr "" #. Tag: para #: release_notes.xml:1717 #, no-c-format msgid "fixed spatial_ref_sys.sql to avoid vacuuming the whole database." msgstr "" #. Tag: para #: release_notes.xml:1720 #, no-c-format msgid "spatial_ref_sys: changed Paris entries to match the ones distributed with 0.x." msgstr "" #. Tag: title #: release_notes.xml:1726 #, no-c-format msgid "Release 1.0.0RC2" msgstr "" #. Tag: para #: release_notes.xml:1728 #, no-c-format msgid "Release date: 2005/01/26" msgstr "" #. Tag: para #: release_notes.xml:1730 #, no-c-format msgid "Second release candidate for 1.0.0 containing bug fixes and a few improvements." msgstr "" #. Tag: para #: release_notes.xml:1744 #, no-c-format msgid "BUGFIX in pointarray box3d computation" msgstr "" #. Tag: para #: release_notes.xml:1746 #, no-c-format msgid "BUGFIX in distance_spheroid definition" msgstr "" #. Tag: para #: release_notes.xml:1748 #, no-c-format msgid "BUGFIX in transform() missing to update bbox cache" msgstr "" #. Tag: para #: release_notes.xml:1750 #, no-c-format msgid "NEW jdbc driver (jdbc2)" msgstr "" #. Tag: para #: release_notes.xml:1752 #, no-c-format msgid "GEOMETRYCOLLECTION(EMPTY) syntax support for backward compatibility" msgstr "" #. Tag: para #: release_notes.xml:1755 #, no-c-format msgid "Faster binary outputs" msgstr "" #. Tag: para #: release_notes.xml:1757 #, no-c-format msgid "Stricter OGC WKB/WKT constructors" msgstr "" #. Tag: para #: release_notes.xml:1763 #, no-c-format msgid "More correct STABLE, IMMUTABLE, STRICT uses in lwpostgis.sql" msgstr "" #. Tag: para #: release_notes.xml:1766 #, no-c-format msgid "stricter OGC WKB/WKT constructors" msgstr "" #. Tag: para #: release_notes.xml:1772 #, no-c-format msgid "Faster and more robust loader (both i18n and not)" msgstr "" #. Tag: para #: release_notes.xml:1774 #, no-c-format msgid "Initial autoconf script" msgstr "" #. Tag: title #: release_notes.xml:1779 #, no-c-format msgid "Release 1.0.0RC1" msgstr "" #. Tag: para #: release_notes.xml:1781 #, no-c-format msgid "Release date: 2005/01/13" msgstr "" #. Tag: para #: release_notes.xml:1783 #, no-c-format msgid "This is the first candidate of a major postgis release, with internal storage of postgis types redesigned to be smaller and faster on indexed queries." msgstr "" #. Tag: para #: release_notes.xml:1798 #, no-c-format msgid "Faster canonical input parsing." msgstr "" #. Tag: para #: release_notes.xml:1800 #, no-c-format msgid "Lossless canonical output." msgstr "" #. Tag: para #: release_notes.xml:1802 #, no-c-format msgid "EWKB Canonical binary IO with PG>73." msgstr "" #. Tag: para #: release_notes.xml:1804 #, no-c-format msgid "Support for up to 4d coordinates, providing lossless shapefile->postgis->shapefile conversion." msgstr "" #. Tag: para #: release_notes.xml:1807 #, no-c-format msgid "New function: UpdateGeometrySRID(), AsGML(), SnapToGrid(), ForceRHR(), estimated_extent(), accum()." msgstr "" #. Tag: para #: release_notes.xml:1810 #, no-c-format msgid "Vertical positioning indexed operators." msgstr "" #. Tag: para #: release_notes.xml:1812 #, no-c-format msgid "JOIN selectivity function." msgstr "" #. Tag: para #: release_notes.xml:1814 #, no-c-format msgid "More geometry constructors / editors." msgstr "" #. Tag: para #: release_notes.xml:1816 #, no-c-format msgid "PostGIS extension API." msgstr "" #. Tag: para #: release_notes.xml:1818 #, no-c-format msgid "UTF8 support in loader." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/README0000644000000000000000000000051712025614072015625 0ustar rootrootTranslation files for the PostGIS manual. Compilation of the files require the ``poxml`` package, part of the KDE development kit. Run ``make`` in language directories to generate the localized manual. Run ``make update-po`` from the parent directory to update the translation files to be in sync with the official documentation. postgis-2.1.2+dfsg.orig/doc/po/Makefile.local0000644000000000000000000000061312025614072017473 0ustar rootroot# This file should be included by the Makefile # in each language directory local-all: local-html comments local-html: symlinks $(MAKE) html local-pdf: symlinks $(MAKE) pdf symlinks: rm -f html; ln -s ../../html html rm -f xsl; ln -s ../../xsl xsl # for XML_SOURCES include ../../Makefile # XML gettext tools PO2XML=po2xml $(XML_SOURCES): %.xml: %.xml.po $(PO2XML) ../../$@ $< > $@ postgis-2.1.2+dfsg.orig/doc/po/pt_BR/0000755000000000000000000000000012317530606015754 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/po/pt_BR/using_raster_dataman.xml.po0000644000000000000000000012721312025614072023307 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: using_raster_dataman.xml:3 #, no-c-format msgid "Raster Data Management, Queries, and Applications" msgstr "" #. Tag: title #: using_raster_dataman.xml:5 #, no-c-format msgid "Loading and Creating Rasters" msgstr "" #. Tag: para #: using_raster_dataman.xml:6 #, no-c-format msgid "" "For most use cases, you will create PostGIS rasters by loading existing " "raster files using the packaged raster2pgsql raster " "loader." msgstr "" #. Tag: title #: using_raster_dataman.xml:9 #, no-c-format msgid "Using raster2pgsql to load rasters" msgstr "" #. Tag: para #: using_raster_dataman.xml:10 #, no-c-format msgid "" "The raster2pgsql is a raster loader executable that loads " "GDAL supported raster formats into sql suitable for loading into a PostGIS " "raster table. It is capable of loading folders of raster files as well as " "creating overviews of rasters." msgstr "" #. Tag: para #: using_raster_dataman.xml:13 #, no-c-format msgid "" "Since the raster2pgsql is compiled as part of PostGIS most often (unless you " "compile your own GDAL library), the raster types supported by the executable " "will be the same as those compiled in the GDAL dependency library. To get a " "list of raster types your particular raster2pgsql supports use the -" "G switch. These should be the same as those provided by your " "PostGIS install documented here if you " "are using the same gdal library for both." msgstr "" #. Tag: para #: using_raster_dataman.xml:16 #, no-c-format msgid "" "The older version of this tool was a python script. The executable has " "replaced the python script. If you still find the need for the Python script " "Examples of the python one can be found at GDAL PostGIS Raster Driver Usage. Please note that the raster2pgsql python script may not work with " "future versions of PostGIS raster and is no longer supported." msgstr "" #. Tag: para #: using_raster_dataman.xml:21 #, no-c-format msgid "" "When creating overviews of a specific factor from a set of rasters that are " "aligned, it is possible for the overviews to not align. Visit http://trac.osgeo.org/postgis/" "ticket/1764 for an example where the overviews do not align." msgstr "" #. Tag: para #: using_raster_dataman.xml:25 #, no-c-format msgid "EXAMPLE USAGE:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:26 #, no-c-format msgid "" "raster2pgsql raster_options_go_here raster_file someschema.sometable > out." "sql" msgstr "" #. Tag: term #: using_raster_dataman.xml:30 #, no-c-format msgid "-?" msgstr "" #. Tag: para #: using_raster_dataman.xml:32 #, no-c-format msgid "" "Display help screen. Help will also display if you don't pass in any " "arguments." msgstr "" #. Tag: term #: using_raster_dataman.xml:39 #, no-c-format msgid "-G" msgstr "" #. Tag: para #: using_raster_dataman.xml:41 #, no-c-format msgid "Print the supported raster formats." msgstr "" #. Tag: term #: using_raster_dataman.xml:48 #, no-c-format msgid "(c|a|d|p) These are mutually exclusive options:" msgstr "" #. Tag: term #: using_raster_dataman.xml:53 #, no-c-format msgid "-c" msgstr "" #. Tag: para #: using_raster_dataman.xml:55 #, no-c-format msgid "" "Create new table and populate it with raster(s), this is the " "default mode" msgstr "" #. Tag: term #: using_raster_dataman.xml:62 #, no-c-format msgid "-a" msgstr "" #. Tag: para #: using_raster_dataman.xml:64 #, no-c-format msgid "Append raster(s) to an existing table." msgstr "" #. Tag: term #: using_raster_dataman.xml:71 #, no-c-format msgid "-d" msgstr "" #. Tag: para #: using_raster_dataman.xml:73 #, no-c-format msgid "Drop table, create new one and populate it with raster(s)" msgstr "" #. Tag: term #: using_raster_dataman.xml:80 #, no-c-format msgid "-p" msgstr "" #. Tag: para #: using_raster_dataman.xml:82 #, no-c-format msgid "Prepare mode, only create the table." msgstr "" #. Tag: term #: using_raster_dataman.xml:93 #, no-c-format msgid "" "Raster processing: Applying constraints for proper registering in raster " "catalogs" msgstr "" #. Tag: term #: using_raster_dataman.xml:98 #, no-c-format msgid "-C" msgstr "" #. Tag: para #: using_raster_dataman.xml:100 #, no-c-format msgid "" "Apply raster constraints -- srid, pixelsize etc. to ensure raster is " "properly registered in raster_columns view." msgstr "" #. Tag: term #: using_raster_dataman.xml:106 #, no-c-format msgid "-x" msgstr "" #. Tag: para #: using_raster_dataman.xml:108 #, no-c-format msgid "" "Disable setting the max extent constraint. Only applied if -C flag is also " "used." msgstr "" #. Tag: term #: using_raster_dataman.xml:114 #, no-c-format msgid "-r" msgstr "" #. Tag: para #: using_raster_dataman.xml:116 #, no-c-format msgid "" "Set the regular blocking constraint. Only applied if -C flag is also used." msgstr "" #. Tag: term #: using_raster_dataman.xml:127 #, no-c-format msgid "" "Raster processing: Optional parameters used to manipulate input raster " "dataset" msgstr "" #. Tag: term #: using_raster_dataman.xml:132 #, no-c-format msgid "-s <SRID>" msgstr "" #. Tag: para #: using_raster_dataman.xml:134 #, no-c-format msgid "" "Assign output raster with specified SRID. If not provided or is zero, " "raster's metadata will be checked to determine an appropriate SRID." msgstr "" #. Tag: term #: using_raster_dataman.xml:141 #, no-c-format msgid "-b BAND" msgstr "" #. Tag: para #: using_raster_dataman.xml:143 #, no-c-format msgid "" "Index (1-based) of band to extract from raster. For more than one band " "index, separate with comma (,). If unspecified, all bands of raster will be " "extracted." msgstr "" #. Tag: term #: using_raster_dataman.xml:151 #, no-c-format msgid "-t TILE_SIZE" msgstr "" #. Tag: para #: using_raster_dataman.xml:153 #, no-c-format msgid "" "Cut raster into tiles to be inserted one per table row. TILE_SIZE is expressed as WIDTHxHEIGHT." msgstr "" #. Tag: term #: using_raster_dataman.xml:160 #, no-c-format msgid "-R, --register" msgstr "" #. Tag: para #: using_raster_dataman.xml:162 #, no-c-format msgid "Register the raster as a filesystem (out-db) raster." msgstr "" #. Tag: para #: using_raster_dataman.xml:163 #, no-c-format msgid "" "Only the metadata of the raster and path location to the raster is stored in " "the database (not the pixels)." msgstr "" #. Tag: term #: using_raster_dataman.xml:168 #, no-c-format msgid "-l OVERVIEW_FACTOR" msgstr "" #. Tag: para #: using_raster_dataman.xml:169 #, no-c-format msgid "" "Create overview of the raster. For more than one factor, separate with comma" "(,). Overview table name follows the pattern o_overview factor_table. Created overview is stored in the " "database and is not affected by -R. Note that your generated sql file will " "contain both the main table and overview tables." msgstr "" #. Tag: term #: using_raster_dataman.xml:177 #, no-c-format msgid "-N NODATA" msgstr "" #. Tag: para #: using_raster_dataman.xml:179 #, no-c-format msgid "NODATA value to use on bands without a NODATA value." msgstr "" #. Tag: term #: using_raster_dataman.xml:191 #, no-c-format msgid "Optional parameters used to manipulate database objects" msgstr "" #. Tag: term #: using_raster_dataman.xml:196 #, no-c-format msgid "-q" msgstr "" #. Tag: para #: using_raster_dataman.xml:198 #, no-c-format msgid "Wrap PostgreSQL identifiers in quotes" msgstr "" #. Tag: term #: using_raster_dataman.xml:203 #, no-c-format msgid "-f COLUMN" msgstr "" #. Tag: para #: using_raster_dataman.xml:205 #, no-c-format msgid "Specify name of destination raster column, default is 'rast'" msgstr "" #. Tag: term #: using_raster_dataman.xml:211 #, no-c-format msgid "-F" msgstr "" #. Tag: para #: using_raster_dataman.xml:213 #, no-c-format msgid "Add a column with the name of the file" msgstr "" #. Tag: term #: using_raster_dataman.xml:218 #, no-c-format msgid "-I" msgstr "" #. Tag: para #: using_raster_dataman.xml:220 #, no-c-format msgid "Create a GiST index on the raster column." msgstr "" #. Tag: term #: using_raster_dataman.xml:227 #, no-c-format msgid "-M" msgstr "" #. Tag: para #: using_raster_dataman.xml:229 #, no-c-format msgid "Vacuum analyze the raster table." msgstr "" #. Tag: term #: using_raster_dataman.xml:236 #, no-c-format msgid "-T tablespace" msgstr "" #. Tag: para #: using_raster_dataman.xml:238 #, no-c-format msgid "" "Specify the tablespace for the new table. Note that indices (including the " "primary key) will still use the default tablespace unless the -X flag is " "also used." msgstr "" #. Tag: term #: using_raster_dataman.xml:247 #, no-c-format msgid "-X tablespace" msgstr "" #. Tag: para #: using_raster_dataman.xml:249 #, no-c-format msgid "" "Specify the tablespace for the table's new index. This applies to the " "primary key and the spatial index if the -I flag is used." msgstr "" #. Tag: term #: using_raster_dataman.xml:258 #, no-c-format msgid "-Y" msgstr "" #. Tag: para #: using_raster_dataman.xml:260 #, no-c-format msgid "Use copy statements instead of insert statements." msgstr "" #. Tag: term #: using_raster_dataman.xml:271 #, no-c-format msgid "-e" msgstr "" #. Tag: para #: using_raster_dataman.xml:272 #, no-c-format msgid "Execute each statement individually, do not use a transaction." msgstr "" #. Tag: term #: using_raster_dataman.xml:276 #, no-c-format msgid "-E ENDIAN" msgstr "" #. Tag: para #: using_raster_dataman.xml:277 #, no-c-format msgid "" "Control endianness of generated binary output of raster; specify 0 for XDR " "and 1 for NDR (default); only NDR output is supported now" msgstr "" #. Tag: term #: using_raster_dataman.xml:281 #, no-c-format msgid "-V version" msgstr "" #. Tag: para #: using_raster_dataman.xml:282 #, no-c-format msgid "" "Specify version of output format. Default is 0. Only 0 is supported at this " "time." msgstr "" #. Tag: para #: using_raster_dataman.xml:285 #, no-c-format msgid "" "An example session using the loader to create an input file and uploading it " "chunked in 100x100 tiles might look like this:" msgstr "" #. Tag: para #: using_raster_dataman.xml:286 #, no-c-format msgid "" "You can leave the schema name out e.g demelevation " "instead of public.demelevation and the raster table will " "be created in the default schema of the database or user" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:288 #, no-c-format msgid "" "raster2pgsql -s 4236 -I -C -M *.tif -F -t 100x100 public.demelevation > elev." "sql\n" "psql -d gisdb -f elev.sql" msgstr "" #. Tag: para #: using_raster_dataman.xml:290 #, no-c-format msgid "A conversion and upload can be done all in one step using UNIX pipes:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:292 #, no-c-format msgid "" "raster2pgsql -s 4236 -I -C -M *.tif -F -t 100x100 public.demelevation | psql " "-d gisdb" msgstr "" #. Tag: para #: using_raster_dataman.xml:294 #, no-c-format msgid "" "Load rasters Massachusetts state plane meters aerial tiles into a schema " "called aerial and create a full view, 2 and 4 level " "overview tables, use copy mode for inserting (no intermediary file just " "straight to db), and -e don't force everything in a transaction (good if you " "want to see data in tables right away without waiting). Break up the rasters " "into 128x128 pixel tiles and apply raster constraints. Use copy mode instead " "of table insert. (-F) Include a field called filename to hold the name of " "the file the tiles were cut from." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:296 #, no-c-format msgid "" "raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*." "jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:298 #, no-c-format msgid "" "--get a list of raster types supported:\n" "raster2pgsql -G" msgstr "" #. Tag: para #: using_raster_dataman.xml:300 #, no-c-format msgid "The -G commands outputs a list something like" msgstr "" #. Tag: screen #: using_raster_dataman.xml:301 #, no-c-format msgid "" "Available GDAL raster formats:\n" " Virtual Raster\n" " GeoTIFF\n" " National Imagery Transmission Format\n" " Raster Product Format TOC format\n" " ECRG TOC format\n" " Erdas Imagine Images (.img)\n" " CEOS SAR Image\n" " CEOS Image\n" " JAXA PALSAR Product Reader (Level 1.1/1.5)\n" " Ground-based SAR Applications Testbed File Format (.gff)\n" " ELAS\n" " Arc/Info Binary Grid\n" " Arc/Info ASCII Grid\n" " GRASS ASCII Grid\n" " SDTS Raster\n" " DTED Elevation Raster\n" " Portable Network Graphics\n" " JPEG JFIF\n" " In Memory Raster\n" " Japanese DEM (.mem)\n" " Graphics Interchange Format (.gif)\n" " Graphics Interchange Format (.gif)\n" " Envisat Image Format\n" " Maptech BSB Nautical Charts\n" " X11 PixMap Format\n" " MS Windows Device Independent Bitmap\n" " SPOT DIMAP\n" " AirSAR Polarimetric Image\n" " RadarSat 2 XML Product\n" " PCIDSK Database File\n" " PCRaster Raster File\n" " ILWIS Raster Map\n" " SGI Image File Format 1.0\n" " SRTMHGT File Format\n" " Leveller heightfield\n" " Terragen heightfield\n" " USGS Astrogeology ISIS cube (Version 3)\n" " USGS Astrogeology ISIS cube (Version 2)\n" " NASA Planetary Data System\n" " EarthWatch .TIL\n" " ERMapper .ers Labelled\n" " NOAA Polar Orbiter Level 1b Data Set\n" " FIT Image\n" " GRIdded Binary (.grb)\n" " Raster Matrix Format\n" " EUMETSAT Archive native (.nat)\n" " Idrisi Raster A.1\n" " Intergraph Raster\n" " Golden Software ASCII Grid (.grd)\n" " Golden Software Binary Grid (.grd)\n" " Golden Software 7 Binary Grid (.grd)\n" " COSAR Annotated Binary Matrix (TerraSAR-X)\n" " TerraSAR-X Product\n" " DRDC COASP SAR Processor Raster\n" " R Object Data Store\n" " Portable Pixmap Format (netpbm)\n" " USGS DOQ (Old Style)\n" " USGS DOQ (New Style)\n" " ENVI .hdr Labelled\n" " ESRI .hdr Labelled\n" " Generic Binary (.hdr Labelled)\n" " PCI .aux Labelled\n" " Vexcel MFF Raster\n" " Vexcel MFF2 (HKV) Raster\n" " Fuji BAS Scanner Image\n" " GSC Geogrid\n" " EOSAT FAST Format\n" " VTP .bt (Binary Terrain) 1.3 Format\n" " Erdas .LAN/.GIS\n" " Convair PolGASP\n" " Image Data and Analysis\n" " NLAPS Data Format\n" " Erdas Imagine Raw\n" " DIPEx\n" " FARSITE v.4 Landscape File (.lcp)\n" " NOAA Vertical Datum .GTX\n" " NADCON .los/.las Datum Grid Shift\n" " NTv2 Datum Grid Shift\n" " ACE2\n" " Snow Data Assimilation System\n" " Swedish Grid RIK (.rik)\n" " USGS Optional ASCII DEM (and CDED)\n" " GeoSoft Grid Exchange Format\n" " Northwood Numeric Grid Format .grd/.tab\n" " Northwood Classified Grid Format .grc/.tab\n" " ARC Digitized Raster Graphics\n" " Standard Raster Product (ASRP/USRP)\n" " Magellan topo (.blx)\n" " SAGA GIS Binary Grid (.sdat)\n" " Kml Super Overlay\n" " ASCII Gridded XYZ\n" " HF2/HFZ heightfield raster\n" " OziExplorer Image File\n" " USGS LULC Composite Theme Grid\n" " Arc/Info Export E00 GRID\n" " ZMap Plus Grid\n" " NOAA NGS Geoid Height Grids" msgstr "" #. Tag: title #: using_raster_dataman.xml:304 #, no-c-format msgid "Creating rasters using PostGIS raster functions" msgstr "" #. Tag: para #: using_raster_dataman.xml:305 #, no-c-format msgid "" "On many occasions, you'll want to create rasters and raster tables right in " "the database. There are a plethora of functions to do that. The general " "steps to follow." msgstr "" #. Tag: para #: using_raster_dataman.xml:307 #, no-c-format msgid "" "Create a table with a raster column to hold the new raster records which can " "be accomplished with:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:308 #, no-c-format msgid "CREATE TABLE myrasters(rid serial primary key, rast raster);" msgstr "" #. Tag: para #: using_raster_dataman.xml:311 #, no-c-format msgid "" "There are many functions to help with that goal. If you are creating rasters " "not as a derivative of other rasters, you will want to start with: , followed by " msgstr "" #. Tag: para #: using_raster_dataman.xml:313 #, no-c-format msgid "" "You can also create rasters from geometries. To achieve that you'll want to " "use perhaps accompanied with other " "functions such as or or any of the family of other map algebra " "functions." msgstr "" #. Tag: para #: using_raster_dataman.xml:315 #, no-c-format msgid "" "There are even many more options for creating new raster tables from " "existing tables. For example you can create a raster table in a different " "projection from an existing one using " msgstr "" #. Tag: para #: using_raster_dataman.xml:317 #, no-c-format msgid "" "Once you are done populating your table initially, you'll want to create a " "spatial index on the raster column with something like:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:318 #, no-c-format msgid "" "CREATE INDEX myrasters_rast_st_convexhull_idx ON myrasters USING gist" "( ST_ConvexHull(rast) );" msgstr "" #. Tag: para #: using_raster_dataman.xml:319 #, no-c-format msgid "" "Note the use of since most raster " "operators are based on the convex hull of the rasters." msgstr "" #. Tag: para #: using_raster_dataman.xml:320 #, no-c-format msgid "" "Pre-2.0 versions of PostGIS raster were based on the envelop rather than the " "convex hull. For the spatial indexes to work properly you'll need to drop " "those and replace with convex hull based index." msgstr "" #. Tag: para #: using_raster_dataman.xml:321 #, no-c-format msgid "" "Apply raster constraints using " msgstr "" #. Tag: title #: using_raster_dataman.xml:326 #, no-c-format msgid "Raster Catalogs" msgstr "" #. Tag: para #: using_raster_dataman.xml:327 #, no-c-format msgid "" "There are two raster catalog views that come packaged with PostGIS. Both " "views utilize information embedded in the constraints of the raster tables. " "As a result the catalog views are always consistent with the raster data in " "the tables since the constraints are enforced." msgstr "" #. Tag: para #: using_raster_dataman.xml:331 #, no-c-format msgid "" "raster_columns this view catalogs all the raster table " "columns in your database." msgstr "" #. Tag: para #: using_raster_dataman.xml:334 #, no-c-format msgid "" "raster_overviews this view catalogs all the raster table " "columns in your database that serve as overviews for a finer grained table. " "Tables of this type are generated when you use the -l " "switch during load." msgstr "" #. Tag: title #: using_raster_dataman.xml:338 #, no-c-format msgid "Raster Columns Catalog" msgstr "" #. Tag: para #: using_raster_dataman.xml:339 #, no-c-format msgid "" "The raster_columns is a catalog of all raster table " "columns in your database that are of type raster. It is a view utilizing the " "constraints on the tables so the information is always consistent even if " "you restore one raster table from a backup of another database. The " "following columns exist in the raster_columns catalog." msgstr "" #. Tag: para #: using_raster_dataman.xml:341 #, no-c-format msgid "" "If you created your tables not with the loader or forgot to specify the " "-C flag during load, you can enforce the constraints " "after the fact using so that the " "raster_columns catalog registers the common information " "about your raster tiles." msgstr "" #. Tag: para #: using_raster_dataman.xml:346 #, no-c-format msgid "" "r_table_catalog The database the table is in. This will " "always read the current database." msgstr "" #. Tag: para #: using_raster_dataman.xml:349 #, no-c-format msgid "" "r_table_schema The database schema the raster table " "belongs to." msgstr "" #. Tag: para #: using_raster_dataman.xml:352 #, no-c-format msgid "r_table_name raster table" msgstr "" #. Tag: para #: using_raster_dataman.xml:355 #, no-c-format msgid "" "r_raster_column the column in the r_table_name table that is of type raster. There is nothing in PostGIS " "preventing you from having multiple raster columns per table so its possible " "to have a raster table listed multiple times with a different raster column " "for each." msgstr "" #. Tag: para #: using_raster_dataman.xml:358 #, no-c-format msgid "" "srid The spatial reference identifier of the raster. " "Should be an entry in the ." msgstr "" #. Tag: para #: using_raster_dataman.xml:361 #, no-c-format msgid "" "scale_x The scaling between geometric spatial coordinates " "and pixel. This is only available if all tiles in the raster column have the " "same scale_x and this constraint is applied. Refer to " " for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:364 #, no-c-format msgid "" "scale_y The scaling between geometric spatial coordinates " "and pixel. This is only available if all tiles in the raster column have the " "same scale_y and the scale_y " "constraint is applied. Refer to for more " "details." msgstr "" #. Tag: para #: using_raster_dataman.xml:367 #, no-c-format msgid "" "blocksize_x The width (number of pixels across) of each " "raster tile . Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:370 #, no-c-format msgid "" "blocksize_y The width (number of pixels down) of each " "raster tile . Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:373 #, no-c-format msgid "" "same_alignment A boolean that is true if all the raster " "tiles have the same alignment . Refer to for more details." msgstr "" #. Tag: para #: using_raster_dataman.xml:376 #, no-c-format msgid "" "regular_blocking This is a true/false constraint flag set " "on the table to denote that the tiles do not overlap, are of the same " "alignment, pixel size, srid etc. It is not really validated but just taken " "as a given so should be used for informational. In the future we plan to " "properly constrain this so that this inforamtion is guaranteed to be right " "when it returns true" msgstr "" #. Tag: para #: using_raster_dataman.xml:379 #, no-c-format msgid "" "num_bands The number of bands in each tile of your raster " "set. This is the same information as what is provided by" msgstr "" #. Tag: para #: using_raster_dataman.xml:382 #, no-c-format msgid "" "pixel_types An array defining the pixel type for each " "band. You will have the same number of elements in this array as you have " "number of bands. The pixel_types are one of the following defined in ." msgstr "" #. Tag: para #: using_raster_dataman.xml:385 #, no-c-format msgid "" "nodata_values An array of double precision numbers " "denoting the nodata_value for each band. You will have " "the same number of elements in this array as you have number of bands. These " "numbers define the pixel value for each band that should be ignored for most " "operations. This is similar information provided by ." msgstr "" #. Tag: para #: using_raster_dataman.xml:388 #, no-c-format msgid "" "extent This is the extent of all the raster rows in your " "raster set. If you plan to load more data that will change the extent of the " "set, you'll want to run the " "function before load and then reapply constraints with after load." msgstr "" #. Tag: title #: using_raster_dataman.xml:393 #, no-c-format msgid "Raster Overviews" msgstr "" #. Tag: para #: using_raster_dataman.xml:394 #, no-c-format msgid "" "raster_overviews catalogs information about raster table " "columns used for overviews and additional information about them that is " "useful to know when utilizing overviews. Overview tables are cataloged in " "both raster_columns and raster_overviews because they are rasters in their own right but also serve an " "additional special purpose of being a lower resolution caricature of a " "higher resolution table. These are generated along-side the main raster " "table when you use the -l switch in raster loading." msgstr "" #. Tag: para #: using_raster_dataman.xml:395 #, no-c-format msgid "" "Overview tables contain the same constraints as other raster tables as well " "as additional informational only constraints specific to overviews." msgstr "" #. Tag: para #: using_raster_dataman.xml:396 #, no-c-format msgid "" "The information in raster_overviews does not duplicate " "the information in raster_columns. If you need the " "information about an overview table present in raster_columns you can join the raster_overviews and " "raster_columns together to get the full set of " "information you need." msgstr "" #. Tag: para #: using_raster_dataman.xml:397 #, no-c-format msgid "Two main reasons for overviews are:" msgstr "" #. Tag: para #: using_raster_dataman.xml:399 #, no-c-format msgid "" "Low resolution representation of the core tables commonly used for fast " "mapping zoom-out." msgstr "" #. Tag: para #: using_raster_dataman.xml:400 #, no-c-format msgid "" "Computations are generally faster to do on them than their higher resolution " "parents because there are fewer records and each pixel covers more " "territory. Though the computations are not as accurate as the high-res " "tables they support, they can be sufficient in many rule-of-thumb " "computations." msgstr "" #. Tag: para #: using_raster_dataman.xml:403 #, no-c-format msgid "" "The raster_overviews catalog contains the following " "columns of information." msgstr "" #. Tag: para #: using_raster_dataman.xml:406 #, no-c-format msgid "" "o_table_catalog The database the overview table is in. " "This will always read the current database." msgstr "" #. Tag: para #: using_raster_dataman.xml:409 #, no-c-format msgid "" "o_table_schema The database schema the overview raster " "table belongs to." msgstr "" #. Tag: para #: using_raster_dataman.xml:412 #, no-c-format msgid "o_table_name raster overview table name" msgstr "" #. Tag: para #: using_raster_dataman.xml:415 #, no-c-format msgid "" "o_raster_column the raster column in the overview table." msgstr "" #. Tag: para #: using_raster_dataman.xml:419 #, no-c-format msgid "" "r_table_catalog The database the raster table that this " "overview services is in. This will always read the current database." msgstr "" #. Tag: para #: using_raster_dataman.xml:422 #, no-c-format msgid "" "r_table_schema The database schema the raster table that " "this overview services belongs to." msgstr "" #. Tag: para #: using_raster_dataman.xml:425 #, no-c-format msgid "" "r_table_name raster table that this overview services." msgstr "" #. Tag: para #: using_raster_dataman.xml:428 #, no-c-format msgid "" "r_raster_column the raster column that this overview " "column services." msgstr "" #. Tag: para #: using_raster_dataman.xml:431 #, no-c-format msgid "" "overview_factor - this is the pyramid level of the " "overview table. The higher the number the lower the resolution of the table. " "raster2pgsql if given a folder of images, will compute overview of each " "image file and load separately. Level 1 is assumed and always the original " "file. Level 2 is will have each tile represent 4 of the original. So for " "example if you have a folder of 5000x5000 pixel image files that you chose " "to chunk 125x125, for each image file your base table will have (5000*5000)/" "(125*125) records = 1600, your (l=2) o_2 table will have " "ceiling(1600/Power(2,2)) = 400 rows, your (l=3) o_3 will " "have ceiling(1600/Power(2,3) ) = 200 rows. If your pixels aren't divisible " "by the size of your tiles, you'll get some scrap tiles (tiles not completely " "filled). Note that each overview tile generated by raster2pgsql has the same " "number of pixels as its parent, but is of a lower resolution where each " "pixel of it represents (Power(2,overview_factor) pixels of the original)." msgstr "" #. Tag: title #: using_raster_dataman.xml:443 #, no-c-format msgid "Building Custom Applications with PostGIS Raster" msgstr "" #. Tag: para #: using_raster_dataman.xml:444 #, no-c-format msgid "" "The fact that PostGIS raster provides you with SQL functions to render " "rasters in known image formats gives you a lot of optoins for rendering " "them. For example you can use OpenOffice / LibreOffice for rendering as " "demonstrated in Rendering PostGIS Raster graphics with LibreOffice Base Reports. In addition you can use a wide variety of languages as demonstrated " "in this section." msgstr "" #. Tag: title #: using_raster_dataman.xml:447 #, no-c-format msgid "" "PHP Example Outputting using ST_AsPNG in concert with other raster functions" msgstr "" #. Tag: para #: using_raster_dataman.xml:448 #, no-c-format msgid "" "In this section, we'll demonstrate how to use the PHP PostgreSQL driver and " "the family of functions to output " "band 1,2,3 of a raster to a PHP request stream that can then be embedded in " "an img src html tag." msgstr "" #. Tag: para #: using_raster_dataman.xml:451 using_raster_dataman.xml:463 #, no-c-format msgid "" "The sample query demonstrates how to combine a whole bunch of raster " "functions together to grab all tiles that intersect a particular wgs 84 " "bounding box and then unions with the " "intersecting tiles together returning all bands, transforms to user " "specified projection using , and then " "outputs the results as a png using ." msgstr "" #. Tag: para #: using_raster_dataman.xml:454 #, no-c-format msgid "" "You would call the below using http://mywebserver/" "test_raster.php?srid=2249 to get the raster image in " "Massachusetts state plane feet." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:455 #, no-c-format msgid "" "]]>" msgstr "" #. Tag: title #: using_raster_dataman.xml:458 #, no-c-format msgid "" "ASP.NET C# Example Outputting using ST_AsPNG in concert with other raster " "functions" msgstr "" #. Tag: para #: using_raster_dataman.xml:459 #, no-c-format msgid "" "In this section, we'll demonstrate how to use Npgsql PostgreSQL .NET driver " "and the family of functions to output " "band 1,2,3 of a raster to a PHP request stream that can then be embedded in " "an img src html tag." msgstr "" #. Tag: para #: using_raster_dataman.xml:462 #, no-c-format msgid "" "You will need the npgsql .NET PostgreSQL driver for this exercise which you " "can get the latest of from http://npgsql.projects.postgresql.org/. Just download the " "latest and drop into your ASP.NET bin folder and you'll be good to go." msgstr "" #. Tag: para #: using_raster_dataman.xml:466 #, no-c-format msgid "" "This is same example as except implemented " "in C#." msgstr "" #. Tag: para #: using_raster_dataman.xml:467 #, no-c-format msgid "" "You would call the below using http://mywebserver/TestRaster." "ashx?srid=2249 to get the raster image in Massachusetts " "state plane feet." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:468 #, no-c-format msgid "" "-- web.config connection string section --\n" "\n" " \n" "]]>" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:469 #, no-c-format msgid "" "// Code for TestRaster.ashx\n" "\n" "using System;\n" "using System.Data;\n" "using System.Web;\n" "using Npgsql;\n" "\n" "public class TestRaster : IHttpHandler\n" "{\n" " public void ProcessRequest(HttpContext context)\n" " {\n" " \n" " context.Response.ContentType = \"image/png\";\n" " context.Response.BinaryWrite(GetResults(context));\n" " \n" " }\n" "\n" " public bool IsReusable {\n" " get { return false; }\n" " }\n" "\n" " public byte[] GetResults(HttpContext context)\n" " {\n" " byte[] result = null;\n" " NpgsqlCommand command;\n" " string sql = null;\n" " int input_srid = 26986;\n" " try {\n" " using (NpgsqlConnection conn = new NpgsqlConnection" "(System.Configuration.ConfigurationManager.ConnectionStrings[\"DSN\"]." "ConnectionString)) {\n" " conn.Open();\n" "\n" " if (context.Request[\"srid\"] != null)\n" " {\n" " input_srid = Convert.ToInt32(context.Request[\"srid" "\"]); \n" " }\n" " sql = @\"SELECT ST_AsPNG(\n" " ST_Transform(\n" " ST_AddBand(\n" " ST_Union(rast,1), ARRAY[ST_Union(rast,2)," "ST_Union(rast,3)])\n" " ,:input_srid) ) As " "new_rast \n" " FROM aerials.boston \n" " WHERE \n" " ST_Intersects(rast, \n" " ST_Transform(ST_MakeEnvelope(-71.1217, " "42.227, -71.1210, 42.218,4326),26986) )\";\n" " command = new NpgsqlCommand(sql, conn);\n" " command.Parameters.Add(new NpgsqlParameter(\"input_srid\", " "input_srid));\n" " \n" " \n" " result = (byte[]) command.ExecuteScalar();\n" " conn.Close();\n" " }\n" "\n" " }\n" " catch (Exception ex)\n" " {\n" " result = null;\n" " context.Response.Write(ex.Message.Trim());\n" " }\n" " return result;\n" " }\n" "}]]>" msgstr "" #. Tag: title #: using_raster_dataman.xml:472 #, no-c-format msgid "Java console app that outputs raster query as Image file" msgstr "" #. Tag: para #: using_raster_dataman.xml:473 #, no-c-format msgid "" "This is a simple java console app that takes a query that returns one image " "and outputs to specified file." msgstr "" #. Tag: para #: using_raster_dataman.xml:474 #, no-c-format msgid "" "You can download the latest PostgreSQL JDBC drivers from http://jdbc.postgresql.org/download." "html" msgstr "" #. Tag: para #: using_raster_dataman.xml:475 #, no-c-format msgid "You can compile the following code using a command something like:" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:476 #, no-c-format msgid "" "set env CLASSPATH .:..\\postgresql-9.0-801.jdbc4.jar\n" "javac SaveQueryImage.java\n" "jar cfm SaveQueryImage.jar Manifest.txt *.class" msgstr "" #. Tag: para #: using_raster_dataman.xml:477 #, no-c-format msgid "And call it from the command-line with something like" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:478 #, no-c-format msgid "" "java -jar SaveQueryImage.jar \"SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point" "(1,5),10, 'quad_segs=2'),150, 150, '8BUI',100));\" \"test.png\"" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:479 #, no-c-format msgid "" "-- Manifest.txt --\n" "" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:480 #, no-c-format msgid "" "// Code for SaveQueryImage.java\n" "" msgstr "" #. Tag: title #: using_raster_dataman.xml:484 #, no-c-format msgid "Use PLPython to dump out images via SQL" msgstr "" #. Tag: para #: using_raster_dataman.xml:485 #, no-c-format msgid "" "This is a plpython stored function that creates a file in the server " "directory for each record." msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:486 #, no-c-format msgid "" "//plpython postgresql stored proc. Requires you have plpython installed\n" "" msgstr "" #. Tag: programlisting #: using_raster_dataman.xml:487 #, no-c-format msgid "" "--write out 5 images to the PostgreSQL server in varying sizes\n" "-- note the postgresql daemon account needs to have write access to folder\n" "-- this echos back the file names created;\n" " SELECT write_file(ST_AsPNG(\n" " ST_AsRaster(ST_Buffer(ST_Point(1,5),j*5, 'quad_segs=2'),150*j, " "150*j, '8BUI',100)),\n" " 'C:/temp/slices'|| j || '.png')\n" " FROM generate_series(1,5) As j;\n" " \n" " write_file\n" "---------------------\n" " C:/temp/slices1.png\n" " C:/temp/slices2.png\n" " C:/temp/slices3.png\n" " C:/temp/slices4.png\n" " C:/temp/slices5.png" msgstr "" #. Tag: title #: using_raster_dataman.xml:490 #, no-c-format msgid "Outputting Rasters with PSQL" msgstr "" #. Tag: para #: using_raster_dataman.xml:491 #, no-c-format msgid "" "Sadly PSQL doesn't have easy to use built-in functionality for outputting " "binaries. This is a bit of a hack and based on one of the suggestions " "outlined in Clever Trick Challenge -- " "Outputting bytea with psql that piggy backs on PostgreSQL somewhat " "legacy large object support. To use first launch your psql commandline " "connected to your database." msgstr "" #. Tag: para #: using_raster_dataman.xml:494 #, no-c-format msgid "" "Unlike the python approach, this approach creates the file on your local " "computer." msgstr "" #. Tag: screen #: using_raster_dataman.xml:495 #, no-c-format msgid "" "SELECT oid, lowrite(lo_open(oid, 131072), png) As num_bytes\n" " FROM \n" " ( VALUES (lo_create(0), \n" " ST_AsPNG( (SELECT rast FROM aerials.boston WHERE rid=1) ) \n" " ) ) As v(oid,png);\n" "-- you'll get an output something like --\n" " oid | num_bytes\n" "---------+-----------\n" " 2630819 | 74860\n" " \n" "-- next note the oid and do this replacing the c:/test.png to file path " "location\n" "-- on your local computer\n" " \\lo_export 2630819 'C:/temp/aerial_samp.png'\n" " \n" "-- this deletes the file from large object storage on db\n" "SELECT lo_unlink(2630819);" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_output.xml.po0000644000000000000000000015265412025614072022502 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_output.xml:4 #, no-c-format msgid "Geometry Outputs" msgstr "" #. Tag: refname #: reference_output.xml:7 #, no-c-format msgid "ST_AsBinary" msgstr "" #. Tag: refpurpose #: reference_output.xml:8 #, no-c-format msgid "" "Return the Well-Known Binary (WKB) representation of the geometry/geography " "without SRID meta data." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:12 #, no-c-format msgid "" " bytea ST_AsBinary " "geometry g1 bytea ST_AsBinary geometry g1 text NDR_or_XDR bytea " "ST_AsBinary geography " "g1 " "bytea ST_AsBinary " "geography g1 " "text NDR_or_XDR " msgstr "" #. Tag: title #: reference_output.xml:35 reference_output.xml:108 reference_output.xml:161 #: reference_output.xml:233 reference_output.xml:335 reference_output.xml:436 #: reference_output.xml:492 reference_output.xml:557 reference_output.xml:600 #: reference_output.xml:702 reference_output.xml:751 reference_output.xml:809 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_output.xml:37 #, no-c-format msgid "" "Returns the Well-Known Binary representation of the geometry. There are 2 " "variants of the function. The first variant takes no endian encoding " "parameter and defaults to server machine endian. The second variant takes a " "second argument denoting the encoding - using little-endian ('NDR') or big-" "endian ('XDR') encoding." msgstr "" #. Tag: para #: reference_output.xml:40 reference_output.xml:112 #, no-c-format msgid "" "This is useful in binary cursors to pull data out of the database without " "converting it to a string representation." msgstr "" #. Tag: para #: reference_output.xml:44 #, no-c-format msgid "" "The WKB spec does not include the SRID. To get the WKB with SRID format use " "ST_AsEWKB" msgstr "" #. Tag: para #: reference_output.xml:47 #, no-c-format msgid "" "ST_AsBinary is the reverse of for " "geometry. Use to convert to a postgis " "geometry from ST_AsBinary representation." msgstr "" #. Tag: para #: reference_output.xml:51 #, no-c-format msgid "" "The default behavior in PostgreSQL 9.0 has been changed to output bytea in " "hex encoding. ST_AsBinary is the reverse of for geometry. If your GUI tools require the old behavior, then SET " "bytea_output='escape' in your database." msgstr "" #. Tag: para #: reference_output.xml:55 reference_output.xml:120 #, no-c-format msgid "" "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was " "introduced." msgstr "" #. Tag: para #: reference_output.xml:56 #, no-c-format msgid "" "Enhanced: 2.0.0 support for higher coordinate dimensions was introduced." msgstr "" #. Tag: para #: reference_output.xml:57 #, no-c-format msgid "" "Enhanced: 2.0.0 support for specifying endian with geography was introduced." msgstr "" #. Tag: para #: reference_output.xml:58 reference_output.xml:274 reference_output.xml:379 #, no-c-format msgid "Availability: 1.5.0 geography support was introduced." msgstr "" #. Tag: para #: reference_output.xml:59 #, no-c-format msgid "" "Changed: 2.0.0 Inputs to this function can not be unknown -- must be " "geometry. Constructs such as ST_AsBinary('POINT(1 2)') are no " "longer valid and you will get an n st_asbinary(unknown) is not unique " "error. Code like that needs to be changed to ST_AsBinary('POINT" "(1 2)'::geometry);. If that is not possible, then install " "legacy.sql." msgstr "" #. Tag: para #: reference_output.xml:61 reference_output.xml:767 #, no-c-format msgid "&sfs_compliant; s2.1.1.1" msgstr "" #. Tag: para #: reference_output.xml:62 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.37" msgstr "" #. Tag: para #: reference_output.xml:63 reference_output.xml:122 reference_output.xml:176 #: reference_output.xml:445 reference_output.xml:716 reference_output.xml:769 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_output.xml:64 reference_output.xml:123 reference_output.xml:177 #: reference_output.xml:386 reference_output.xml:659 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_output.xml:65 reference_output.xml:124 reference_output.xml:178 #: reference_output.xml:387 reference_output.xml:662 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: para #: reference_output.xml:66 reference_output.xml:121 reference_output.xml:175 #: reference_output.xml:276 reference_output.xml:385 reference_output.xml:444 #: reference_output.xml:519 reference_output.xml:657 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: title #: reference_output.xml:71 reference_output.xml:129 reference_output.xml:183 #: reference_output.xml:280 reference_output.xml:449 reference_output.xml:523 #: reference_output.xml:576 reference_output.xml:720 reference_output.xml:774 #: reference_output.xml:838 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_output.xml:73 #, no-c-format msgid "" "SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));\n" "\n" " st_asbinary\n" "--------------------------------\n" "\\001\\003\\000\\000\\000\\001\\000\\000\\000\\005\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\360?\\000\\000\\000\\000\\000\\000\n" "\\360?\\000\\000\\000\\000\\000\\000\\360?\\000\\000\n" "\\000\\000\\000\\000\\360?\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\n" "(1 row)" msgstr "" #. Tag: programlisting #: reference_output.xml:74 #, no-c-format msgid "" "SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), " "'XDR');\n" " st_asbinary\n" "--------------------------------\n" "\\000\\000\\000\\000\\003\\000\\000\\000\\001\\000\\000\\000\\005\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000?\\360\\000\\000\\000\\000\\000\\000?" "\\360\\000\\000\\000\\000\\000\\000?\\360\\000\\000\n" "\\000\\000\\000\\000?" "\\360\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "(1 row)" msgstr "" #. Tag: title #: reference_output.xml:79 reference_output.xml:137 reference_output.xml:190 #: reference_output.xml:405 reference_output.xml:527 reference_output.xml:724 #: reference_output.xml:781 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_output.xml:80 #, no-c-format msgid ", ," msgstr "" #. Tag: refname #: reference_output.xml:89 #, no-c-format msgid "ST_AsEWKB" msgstr "" #. Tag: refpurpose #: reference_output.xml:90 #, no-c-format msgid "" "Return the Well-Known Binary (WKB) representation of the geometry with SRID " "meta data." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:94 #, no-c-format msgid "" " bytea ST_AsEWKB " "geometry g1 bytea ST_AsEWKB geometry g1 text NDR_or_XDR " msgstr "" #. Tag: para #: reference_output.xml:109 #, no-c-format msgid "" "Returns the Well-Known Binary representation of the geometry with SRID " "metadata. There are 2 variants of the function. The first variant takes no " "endian encoding parameter and defaults to little endian. The second variant " "takes a second argument denoting the encoding - using little-endian ('NDR') " "or big-endian ('XDR') encoding." msgstr "" #. Tag: para #: reference_output.xml:115 #, no-c-format msgid "" "The WKB spec does not include the SRID. To get the OGC WKB format use " "ST_AsBinary" msgstr "" #. Tag: para #: reference_output.xml:118 #, no-c-format msgid "" "ST_AsEWKB is the reverse of ST_GeomFromEWKB. Use ST_GeomFromEWKB to convert " "to a postgis geometry from ST_AsEWKB representation." msgstr "" #. Tag: programlisting #: reference_output.xml:131 #, no-c-format msgid "" "SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));\n" "\n" " st_asewkb\n" "--------------------------------\n" "\\001\\003\\000\\000 \\346\\020\\000\\000\\001\\000\n" "\\000\\000\\005\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\360?\\000\\000\\000\\000\\000\\000\\360?\n" "\\000\\000\\000\\000\\000\\000\\360?\\000\\000\\000\\000\\000\n" "\\000\\360?\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "(1 row)" msgstr "" #. Tag: programlisting #: reference_output.xml:132 #, no-c-format msgid "" "SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), " "'XDR');\n" " st_asewkb\n" "--------------------------------\n" "\\000 " "\\000\\000\\003\\000\\000\\020\\346\\000\\000\\000\\001\\000\\000\\000\\005\\000\\000\\000\\000\\\n" "000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000?\n" "\\360\\000\\000\\000\\000\\000\\000?\\360\\000\\000\\000\\000\\000\\000?" "\\360\\000\\000\\000\\000\n" "\\000\\000?" "\\360\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\n" "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000" msgstr "" #. Tag: para #: reference_output.xml:138 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_output.xml:143 #, no-c-format msgid "ST_AsEWKT" msgstr "" #. Tag: refpurpose #: reference_output.xml:144 #, no-c-format msgid "" "Return the Well-Known Text (WKT) representation of the geometry with SRID " "meta data." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:148 #, no-c-format msgid "" " text ST_AsEWKT " "geometry g1 text ST_AsEWKT geography g1 " msgstr "" #. Tag: para #: reference_output.xml:163 #, no-c-format msgid "" "Returns the Well-Known Text representation of the geometry prefixed with the " "SRID." msgstr "" #. Tag: para #: reference_output.xml:166 #, no-c-format msgid "" "The WKT spec does not include the SRID. To get the OGC WKT format use " "ST_AsText" msgstr "" #. Tag: para #: reference_output.xml:168 reference_output.xml:759 #, no-c-format msgid "" "WKT format does not maintain precision so to prevent floating truncation, " "use ST_AsBinary or ST_AsEWKB format for transport." msgstr "" #. Tag: para #: reference_output.xml:172 #, no-c-format msgid "" "ST_AsEWKT is the reverse of . Use to convert to a postgis geometry from " "ST_AsEWKT representation." msgstr "" #. Tag: para #: reference_output.xml:174 #, no-c-format msgid "" "Enhanced: 2.0.0 support for Geography, Polyhedral surfaces, Triangles and " "TIN was introduced." msgstr "" #. Tag: programlisting #: reference_output.xml:185 #, no-c-format msgid "" "SELECT ST_AsEWKT('0103000020E61000000100000005000000000000\n" " 000000000000000000000000000000000000000000000000000000\n" " F03F000000000000F03F000000000000F03F000000000000F03\n" " F000000000000000000000000000000000000000000000000'::" "geometry);\n" "\n" " st_asewkt\n" "--------------------------------\n" "SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))\n" "(1 row)\n" "\n" "SELECT ST_AsEWKT" "('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018\n" "E20A4100000000485F024100000000000000400000000018\n" "E20A4100000000305C02410000000000000840')\n" "\n" "--st_asewkt---\n" "CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)" msgstr "" #. Tag: para #: reference_output.xml:191 #, no-c-format msgid "," msgstr "" #. Tag: refname #: reference_output.xml:196 #, no-c-format msgid "ST_AsGeoJSON" msgstr "" #. Tag: refpurpose #: reference_output.xml:198 #, no-c-format msgid "Return the geometry as a GeoJSON element." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:202 #, no-c-format msgid "" " text ST_AsGeoJSON " "geometry geom " "integer " "maxdecimaldigits=15 integer options=0 text ST_AsGeoJSON geography geog integer " "maxdecimaldigits=15 integer options=0 text ST_AsGeoJSON integer gj_version geometry geom integer " "maxdecimaldigits=15 integer options=0 text ST_AsGeoJSON integer gj_version geography geog integer " "maxdecimaldigits=15 integer options=0 " msgstr "" #. Tag: para #: reference_output.xml:235 #, no-c-format msgid "" "Return the geometry as a Geometry Javascript Object Notation (GeoJSON) " "element. (Cf GeoJSON " "specifications 1.0). 2D and 3D Geometries are both supported. " "GeoJSON only support SFS 1.1 geometry type (no curve support for example)." msgstr "" #. Tag: para #: reference_output.xml:241 #, no-c-format msgid "" "The gj_version parameter is the major version of the GeoJSON spec. If " "specified, must be 1. This represents the spec version of GeoJSON." msgstr "" #. Tag: para #: reference_output.xml:243 #, no-c-format msgid "" "The third argument may be used to reduce the maximum number of decimal " "places used in output (defaults to 15)." msgstr "" #. Tag: para #: reference_output.xml:246 #, no-c-format msgid "" "The last 'options' argument could be used to add Bbox or Crs in GeoJSON " "output:" msgstr "" #. Tag: para #: reference_output.xml:250 #, no-c-format msgid "0: means no option (default value)" msgstr "" #. Tag: para #: reference_output.xml:254 #, no-c-format msgid "1: GeoJSON Bbox" msgstr "" #. Tag: para #: reference_output.xml:258 #, no-c-format msgid "2: GeoJSON Short CRS (e.g EPSG:4326)" msgstr "" #. Tag: para #: reference_output.xml:262 #, no-c-format msgid "4: GeoJSON Long CRS (e.g urn:ogc:def:crs:EPSG::4326)" msgstr "" #. Tag: para #: reference_output.xml:266 #, no-c-format msgid "Version 1: ST_AsGeoJSON(geom) / precision=15 version=1 options=0" msgstr "" #. Tag: para #: reference_output.xml:267 #, no-c-format msgid "Version 2: ST_AsGeoJSON(geom, precision) / version=1 options=0" msgstr "" #. Tag: para #: reference_output.xml:268 #, no-c-format msgid "Version 3: ST_AsGeoJSON(geom, precision, options) / version=1" msgstr "" #. Tag: para #: reference_output.xml:269 #, no-c-format msgid "Version 4: ST_AsGeoJSON(gj_version, geom) / precision=15 options=0" msgstr "" #. Tag: para #: reference_output.xml:270 #, no-c-format msgid "Version 5: ST_AsGeoJSON(gj_version, geom, precision) /options=0" msgstr "" #. Tag: para #: reference_output.xml:271 #, no-c-format msgid "Version 6: ST_AsGeoJSON(gj_version, geom, precision,options)" msgstr "" #. Tag: para #: reference_output.xml:273 #, no-c-format msgid "Availability: 1.3.4" msgstr "" #. Tag: para #: reference_output.xml:275 #, no-c-format msgid "Changed: 2.0.0 support default args and named args." msgstr "" #. Tag: para #: reference_output.xml:281 #, no-c-format msgid "" "GeoJSON format is generally more efficient than other formats for use in " "ajax mapping. One popular javascript client that supports this is Open " "Layers. Example of its use is OpenLayers GeoJSON Example" msgstr "" #. Tag: programlisting #: reference_output.xml:286 #, no-c-format msgid "" "SELECT ST_AsGeoJSON(the_geom) from fe_edges limit 1;\n" " st_asgeojson\n" "-----------------------------------------------------------------------------------------------------------\n" "\n" "{\"type\":\"MultiLineString\",\"coordinates\":" "[[[-89.734634999999997,31.492072000000000],\n" "[-89.734955999999997,31.492237999999997]]]}\n" "(1 row)\n" "--3d point\n" "SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');\n" "\n" "st_asgeojson\n" "-----------------------------------------------------------------------------------------\n" " {\"type\":\"LineString\",\"coordinates\":[[1,2,3],[4,5,6]]}" msgstr "" #. Tag: refname #: reference_output.xml:291 #, no-c-format msgid "ST_AsGML" msgstr "" #. Tag: refpurpose #: reference_output.xml:292 #, no-c-format msgid "Return the geometry as a GML version 2 or 3 element." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:296 #, no-c-format msgid "" " text ST_AsGML " "integer version " "geometry geom " "integer " "maxdecimaldigits=15 integer options=0 " "text nprefix=null text " "id=null " "text ST_AsGML " "integer version " "geography geog " "integer " "maxdecimaldigits=15 integer options=0 " "text nprefix=null text " "id=null " msgstr "" #. Tag: para #: reference_output.xml:337 #, no-c-format msgid "" "Return the geometry as a Geography Markup Language (GML) element. The " "version parameter, if specified, may be either 2 or 3. If no version " "parameter is specified then the default is assumed to be 2. The precision " "argument may be used to reduce the maximum number of decimal places " "(maxdecimaldigits) used in output (defaults to 15)." msgstr "" #. Tag: para #: reference_output.xml:342 #, no-c-format msgid "GML 2 refer to 2.1.2 version, GML 3 to 3.1.1 version" msgstr "" #. Tag: para #: reference_output.xml:343 #, no-c-format msgid "" "The 'options' argument is a bitfield. It could be used to define CRS output " "type in GML output, and to declare data as lat/lon:" msgstr "" #. Tag: para #: reference_output.xml:347 #, no-c-format msgid "0: GML Short CRS (e.g EPSG:4326), default value" msgstr "" #. Tag: para #: reference_output.xml:351 #, no-c-format msgid "1: GML Long CRS (e.g urn:ogc:def:crs:EPSG::4326)" msgstr "" #. Tag: para #: reference_output.xml:355 #, no-c-format msgid "2: For GML 3 only, remove srsDimension attribute from output." msgstr "" #. Tag: para #: reference_output.xml:359 #, no-c-format msgid "" "4: For GML 3 only, use <LineString> rather than <Curve> tag for " "lines." msgstr "" #. Tag: para #: reference_output.xml:363 #, no-c-format msgid "" "16: Declare that datas are lat/lon (e.g srid=4326). Default is to assume " "that data are planars. This option is useful for GML 3.1.1 output only, " "related to axis order. So if you set it, it will swap the coordinates so " "order is lat lon instead of database lon lat." msgstr "" #. Tag: para #: reference_output.xml:369 #, no-c-format msgid "32: Output the box of the geometry (envelope)." msgstr "" #. Tag: para #: reference_output.xml:374 #, no-c-format msgid "" "The 'namespace prefix' argument may be used to specify a custom namespace " "prefix or no prefix (if empty). If null or omitted 'gml' prefix is used" msgstr "" #. Tag: para #: reference_output.xml:378 #, no-c-format msgid "Availability: 1.3.2" msgstr "" #. Tag: para #: reference_output.xml:380 #, no-c-format msgid "" "Enhanced: 2.0.0 prefix support was introduced. Option 4 for GML3 was " "introduced to allow using LineString instead of Curve tag for lines. GML3 " "Support for Polyhedral surfaces and TINS was introduced. Option 32 was " "introduced to output the box." msgstr "" #. Tag: para #: reference_output.xml:381 #, no-c-format msgid "Changed: 2.0.0 use default named args" msgstr "" #. Tag: para #: reference_output.xml:382 #, no-c-format msgid "Enhanced: 2.1.0 id support was introduced, for GML 3." msgstr "" #. Tag: para #: reference_output.xml:384 #, no-c-format msgid "Only version 3+ of ST_AsGML supports Polyhedral Surfaces and TINS." msgstr "" #. Tag: title #: reference_output.xml:391 #, no-c-format msgid "Examples: Version 2" msgstr "" #. Tag: programlisting #: reference_output.xml:392 #, no-c-format msgid "" "0,0 0,1 1,1 1,0 0,0]]>" msgstr "" #. Tag: title #: reference_output.xml:395 #, no-c-format msgid "Examples: Version 3" msgstr "" #. Tag: programlisting #: reference_output.xml:396 #, no-c-format msgid "" "-- Flip coordinates and output extended EPSG (16 | 1)--\n" "6.34535 5.23423]]>" msgstr "" #. Tag: programlisting #: reference_output.xml:397 #, no-c-format msgid "" "-- Output the envelope (32) --\n" "\n" " 1 2\n" " 10 20\n" " ]]>" msgstr "" #. Tag: programlisting #: reference_output.xml:399 #, no-c-format msgid "" "-- Output the envelope (32) , reverse (lat lon instead of lon lat) (16), " "long srs (1)= 32 | 16 | 1 = 49 --\n" "\n" " 2 1\n" " 20 10\n" "]]>" msgstr "" #. Tag: programlisting #: reference_output.xml:401 #, no-c-format msgid "" "-- Polyhedral Example --\n" "SELECT ST_AsGML(3, ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 " "1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 " "0)), \n" "((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 " "1)) )'));\n" " st_asgml\n" " --------\n" "\n" "\n" " \n" " \n" " \n" " 0 0 0 0 0 " "1 0 1 1 0 1 0 0 0 0\n" " \n" " \n" " \n" " \n" " \n" " \n" " 0 0 0 0 1 " "0 1 1 0 1 0 0 0 0 0\n" " \n" " \n" " \n" " \n" " \n" " \n" " 0 0 0 1 0 " "0 1 0 1 0 0 1 0 0 0\n" " \n" " \n" " \n" " \n" " \n" " \n" " 1 1 0 1 1 " "1 1 0 1 1 0 0 1 1 0\n" " \n" " \n" " \n" " \n" " \n" " \n" " 0 1 0 0 1 " "1 1 1 1 1 1 0 0 1 0\n" " \n" " \n" " \n" " \n" " \n" " \n" " 0 0 1 1 0 " "1 1 1 1 0 1 1 0 0 1\n" " \n" " \n" " \n" "\n" "]]>" msgstr "" #. Tag: refname #: reference_output.xml:414 #, no-c-format msgid "ST_AsHEXEWKB" msgstr "" #. Tag: refpurpose #: reference_output.xml:416 #, no-c-format msgid "" "Returns a Geometry in HEXEWKB format (as text) using either little-endian " "(NDR) or big-endian (XDR) encoding." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:421 #, no-c-format msgid "" " text ST_AsHEXEWKB " "geometry g1 " "text NDRorXDR text ST_AsHEXEWKB geometry g1 " msgstr "" #. Tag: para #: reference_output.xml:438 #, no-c-format msgid "" "Returns a Geometry in HEXEWKB format (as text) using either little-endian " "(NDR) or big-endian (XDR) encoding. If no encoding is specified, then NDR is " "used." msgstr "" #. Tag: para #: reference_output.xml:442 #, no-c-format msgid "Availability: 1.2.2" msgstr "" #. Tag: programlisting #: reference_output.xml:450 #, no-c-format msgid "" "SELECT ST_AsHEXEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 " "0))',4326));\n" " which gives same answer as\n" "\n" " SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 " "0))',4326)::text;\n" "\n" " st_ashexewkb\n" " --------\n" " 0103000020E6100000010000000500\n" " 00000000000000000000000000000000\n" " 00000000000000000000000000000000F03F\n" " 000000000000F03F000000000000F03F000000000000F03\n" " F000000000000000000000000000000000000000000000000" msgstr "" #. Tag: refname #: reference_output.xml:456 #, no-c-format msgid "ST_AsKML" msgstr "" #. Tag: refpurpose #: reference_output.xml:458 #, no-c-format msgid "" "Return the geometry as a KML element. Several variants. Default version=2, " "default precision=15" msgstr "" #. Tag: funcsynopsis #: reference_output.xml:462 #, no-c-format msgid "" " text ST_AsKML " "geometry geom " "integer " "maxdecimaldigits=15 " " text ST_AsKML " "geography geog " "integer " "maxdecimaldigits=15 " " text ST_AsKML " "integer version " "geometry geom " "integer " "maxdecimaldigits=15 text nprefix=NULL text ST_AsKML integer version geography geog integer " "maxdecimaldigits=15 text nprefix=NULL " msgstr "" #. Tag: para #: reference_output.xml:494 #, no-c-format msgid "" "Return the geometry as a Keyhole Markup Language (KML) element. There are " "several variants of this function. maximum number of decimal places used in " "output (defaults to 15), version default to 2 and default namespace is no " "prefix." msgstr "" #. Tag: para #: reference_output.xml:498 #, no-c-format msgid "" "Version 1: ST_AsKML(geom_or_geog, maxdecimaldigits) / version=2 / " "maxdecimaldigits=15" msgstr "" #. Tag: para #: reference_output.xml:499 #, no-c-format msgid "" "Version 2: ST_AsKML(version, geom_or_geog, maxdecimaldigits, nprefix) " "maxdecimaldigits=15 / nprefix=NULL" msgstr "" #. Tag: para #: reference_output.xml:502 #, no-c-format msgid "" "Requires PostGIS be compiled with Proj support. Use to confirm you have proj support compiled in." msgstr "" #. Tag: para #: reference_output.xml:506 #, no-c-format msgid "" "Availability: 1.2.2 - later variants that include version param came in 1.3.2" msgstr "" #. Tag: para #: reference_output.xml:509 #, no-c-format msgid "Enhanced: 2.0.0 - Add prefix namespace. Default is no prefix" msgstr "" #. Tag: para #: reference_output.xml:512 #, no-c-format msgid "Changed: 2.0.0 - uses default args and supports named args" msgstr "" #. Tag: para #: reference_output.xml:516 #, no-c-format msgid "AsKML output will not work with geometries that do not have an SRID" msgstr "" #. Tag: programlisting #: reference_output.xml:524 #, no-c-format msgid "" "0,0 0,1 " "1,1 1,0 0,0
\n" "\n" " --3d linestring\n" " SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3, 4 5 6)');\n" " 1,2,3 4,5,6\n" " ]]>" msgstr "" #. Tag: para #: reference_output.xml:529 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_output.xml:534 #, no-c-format msgid "ST_AsSVG" msgstr "" #. Tag: refpurpose #: reference_output.xml:536 #, no-c-format msgid "" "Returns a Geometry in SVG path data given a geometry or geography object." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:540 #, no-c-format msgid "" " text ST_AsSVG " "geometry geom " "integer rel=0 integer " "maxdecimaldigits=15 " " text ST_AsSVG " "geography geog " "integer rel=0 integer " "maxdecimaldigits=15 " msgstr "" #. Tag: para #: reference_output.xml:559 #, no-c-format msgid "" "Return the geometry as Scalar Vector Graphics (SVG) path data. Use 1 as " "second argument to have the path data implemented in terms of relative " "moves, the default (or 0) uses absolute moves. Third argument may be used to " "reduce the maximum number of decimal digits used in output (defaults to 15). " "Point geometries will be rendered as cx/cy when 'rel' arg is 0, x/y when " "'rel' is 1. Multipoint geometries are delimited by commas (\",\"), " "GeometryCollection geometries are delimited by semicolons (\";\")." msgstr "" #. Tag: para #: reference_output.xml:569 #, no-c-format msgid "" "Availability: 1.2.2. Availability: 1.4.0 Changed in PostGIS 1.4.0 to include " "L command in absolute path to conform to http://www.w3.org/TR/SVG/paths." "html#PathDataBNF" msgstr "" #. Tag: para #: reference_output.xml:572 #, no-c-format msgid "Changed: 2.0.0 to use default args and support named args" msgstr "" #. Tag: programlisting #: reference_output.xml:577 #, no-c-format msgid "" "SELECT ST_AsSVG(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));\n" "\n" " st_assvg\n" " --------\n" " M 0 0 L 0 -1 1 -1 1 0 Z" msgstr "" #. Tag: refname #: reference_output.xml:583 #, no-c-format msgid "ST_AsX3D" msgstr "" #. Tag: refpurpose #: reference_output.xml:585 #, no-c-format msgid "" "Returns a Geometry in X3D xml node element format: ISO-IEC-19776-1.2-" "X3DEncodings-XML" msgstr "" #. Tag: funcprototype #: reference_output.xml:590 #, no-c-format msgid "" "text ST_AsX3D " "geometry g1 " "integer " "maxdecimaldigits=15 integer options=0" msgstr "" #. Tag: para #: reference_output.xml:602 #, no-c-format msgid "" "Returns a geometry as an X3D xml formatted node element http://web3d.org/x3d/specifications/ISO-IEC-19776-1.2-" "X3DEncodings-XML/Part01/EncodingOfNodes.html. If " "maxdecimaldigits (precision) is not specified then " "defaults to 15." msgstr "" #. Tag: para #: reference_output.xml:604 #, no-c-format msgid "" "There are various options for translating PostGIS geometries to X3D since " "X3D geometry types don't map directly to PostGIS geometry types and some " "newer X3D types that might be better mappings we ahve avoided since most " "rendering tools don't currently support them. These are the mappings we have " "settled on. Feel free to post a bug ticket if you have thoughts on the idea " "or ways we can allow people to denote their preferred mappings." msgstr "" #. Tag: para #: reference_output.xml:606 #, no-c-format msgid "Below is how we currently map PostGIS 2D/3D types to X3D types" msgstr "" #. Tag: entry #: reference_output.xml:613 #, no-c-format msgid "PostGIS Type" msgstr "" #. Tag: entry #: reference_output.xml:614 #, no-c-format msgid "2D X3D Type" msgstr "" #. Tag: entry #: reference_output.xml:615 #, no-c-format msgid "3D X3D Type" msgstr "" #. Tag: entry #: reference_output.xml:620 #, no-c-format msgid "LINESTRING" msgstr "" #. Tag: entry #: reference_output.xml:621 reference_output.xml:626 #, no-c-format msgid "not yet implemented - will be PolyLine2D" msgstr "" #. Tag: entry #: reference_output.xml:622 #, no-c-format msgid "LineSet" msgstr "" #. Tag: entry #: reference_output.xml:625 #, no-c-format msgid "MULTILINESTRING" msgstr "" #. Tag: entry #: reference_output.xml:627 #, no-c-format msgid "IndexedLineSet" msgstr "" #. Tag: entry #: reference_output.xml:630 #, no-c-format msgid "MULTIPOINT" msgstr "" #. Tag: entry #: reference_output.xml:631 #, no-c-format msgid "Polypoint2D" msgstr "" #. Tag: entry #: reference_output.xml:632 #, no-c-format msgid "PointSet" msgstr "" #. Tag: entry #: reference_output.xml:635 #, no-c-format msgid "POINT" msgstr "" #. Tag: entry #: reference_output.xml:636 reference_output.xml:637 #, no-c-format msgid "outputs the space delimited coordinates" msgstr "" #. Tag: entry #: reference_output.xml:640 #, no-c-format msgid "(MULTI) POLYGON, POLYHEDRALSURFACE" msgstr "" #. Tag: entry #: reference_output.xml:641 #, no-c-format msgid "Invalid X3D markup" msgstr "" #. Tag: entry #: reference_output.xml:642 #, no-c-format msgid "IndexedFaceSet (inner rings currently output as another faceset)" msgstr "" #. Tag: entry #: reference_output.xml:645 #, no-c-format msgid "TIN" msgstr "" #. Tag: entry #: reference_output.xml:646 #, no-c-format msgid "TriangleSet2D (Not Yet Implemented)" msgstr "" #. Tag: entry #: reference_output.xml:647 #, no-c-format msgid "IndexedTriangleSet" msgstr "" #. Tag: para #: reference_output.xml:652 #, no-c-format msgid "" "2D geometry support not yet complete. Inner rings currently just drawn as " "separate polygons. We are working on these." msgstr "" #. Tag: para #: reference_output.xml:653 #, no-c-format msgid "" "Lots of advancements happening in 3D space particularly with X3D Integration with HTML5" msgstr "" #. Tag: para #: reference_output.xml:654 #, no-c-format msgid "" "There is also a nice open source X3D viewer you can use to view rendered " "geometries. Free Wrl http://" "freewrl.sourceforge.net/ binaries available for Mac, Linux, and " "Windows. Use the FreeWRL_Launcher packaged to view the geometries." msgstr "" #. Tag: para #: reference_output.xml:655 #, no-c-format msgid "Availability: 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML" msgstr "" #. Tag: title #: reference_output.xml:667 #, no-c-format msgid "" "Example: Create a fully functional X3D document - This will generate a cube " "that is viewable in FreeWrl and other X3D viewers." msgstr "" #. Tag: programlisting #: reference_output.xml:668 #, no-c-format msgid "" "\n" "\n" "\n" " \n" " \n" " \n" " \n" " \n" " ' || \n" " ST_AsX3D( ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, " "0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 " "0)), \n" "((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 " "1)) )')) ||\n" " '\n" " \n" " \n" "' As x3ddoc;]]>\n" "\n" " x3ddoc\n" " --------\n" "\n" "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "]]>" msgstr "" #. Tag: title #: reference_output.xml:671 #, no-c-format msgid "Example: An Octagon elevated 3 Units and decimal precision of 6" msgstr "" #. Tag: programlisting #: reference_output.xml:672 #, no-c-format msgid "" "SELECT ST_AsX3D(\n" "ST_Translate(\n" " ST_Force_3d(\n" " ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,\n" " 3)\n" " ,6) As x3dfrag;\n" "\n" "x3dfrag\n" "--------\n" "\n" " \n" "]]>" msgstr "" #. Tag: title #: reference_output.xml:675 #, no-c-format msgid "Example: TIN" msgstr "" #. Tag: programlisting #: reference_output.xml:676 #, no-c-format msgid "" "\n" "\n" " x3dfrag\n" " --------\n" "]]>" msgstr "" #. Tag: title #: reference_output.xml:679 #, no-c-format msgid "Example: Closed multilinestring (the boundary of a polygon with holes)" msgstr "" #. Tag: programlisting #: reference_output.xml:680 #, no-c-format msgid "" "\n" "\n" " x3dfrag\n" " --------\n" "\n" " \n" " ]]>" msgstr "" #. Tag: refname #: reference_output.xml:686 #, no-c-format msgid "ST_GeoHash" msgstr "" #. Tag: refpurpose #: reference_output.xml:688 #, no-c-format msgid "Return a GeoHash representation (geohash.org) of the geometry." msgstr "" #. Tag: funcprototype #: reference_output.xml:693 #, no-c-format msgid "" "text ST_GeoHash " "geometry geom " "integer " "maxchars=full_precision_of_point" msgstr "" #. Tag: para #: reference_output.xml:704 #, no-c-format msgid "" "Return a GeoHash representation (geohash.org) of the geometry. A GeoHash " "encodes a point into a text form that is sortable and searchable based on " "prefixing. A shorter GeoHash is a less precise representation of a point. It " "can also be thought of as a box, that contains the actual point." msgstr "" #. Tag: para #: reference_output.xml:706 #, no-c-format msgid "" "If no maxchars is specficified ST_GeoHash returns a " "GeoHash based on full precision of the input geometry type. Points return a " "GeoHash with 20 characters of precision (about enough to hold the full " "double precision of the input). Other types return a GeoHash with a variable " "amount of precision, based on the size of the feature. Larger features are " "represented with less precision, smaller features with more precision. The " "idea is that the box implied by the GeoHash will always contain the input " "feature." msgstr "" #. Tag: para #: reference_output.xml:708 #, no-c-format msgid "" "If maxchars is specified ST_GeoHash returns a GeoHash " "with at most that many characters so a possibly lower precision " "representation of the input geometry. For non-points, the starting point of " "the calculation is the center of the bounding box of the geometry." msgstr "" #. Tag: para #: reference_output.xml:710 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: para #: reference_output.xml:713 #, no-c-format msgid "" "ST_GeoHash will not work with geometries that are not in geographic (lon/" "lat) coordinates." msgstr "" #. Tag: programlisting #: reference_output.xml:721 #, no-c-format msgid "" "" msgstr "" #. Tag: refname #: reference_output.xml:733 #, no-c-format msgid "ST_AsText" msgstr "" #. Tag: refpurpose #: reference_output.xml:734 #, no-c-format msgid "" "Return the Well-Known Text (WKT) representation of the geometry/geography " "without SRID metadata." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:738 #, no-c-format msgid "" " text ST_AsText " "geometry g1 text ST_AsText geography g1 " msgstr "" #. Tag: para #: reference_output.xml:753 #, no-c-format msgid "Returns the Well-Known Text representation of the geometry/geography." msgstr "" #. Tag: para #: reference_output.xml:756 #, no-c-format msgid "" "The WKT spec does not include the SRID. To get the SRID as part of the data, " "use the non-standard PostGIS " msgstr "" #. Tag: para #: reference_output.xml:763 #, no-c-format msgid "" "ST_AsText is the reverse of . Use to convert to a postgis geometry from " "ST_AsText representation." msgstr "" #. Tag: para #: reference_output.xml:766 #, no-c-format msgid "Availability: 1.5 - support for geography was introduced." msgstr "" #. Tag: para #: reference_output.xml:768 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.25" msgstr "" #. Tag: programlisting #: reference_output.xml:776 #, no-c-format msgid "" "SELECT ST_AsText('01030000000100000005000000000000000000\n" "000000000000000000000000000000000000000000000000\n" "F03F000000000000F03F000000000000F03F000000000000F03\n" "F000000000000000000000000000000000000000000000000');\n" "\n" " st_astext\n" "--------------------------------\n" " POLYGON((0 0,0 1,1 1,1 0,0 0))\n" "(1 row)" msgstr "" #. Tag: para #: reference_output.xml:783 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_output.xml:790 #, no-c-format msgid "ST_AsLatLonText" msgstr "" #. Tag: refpurpose #: reference_output.xml:791 #, no-c-format msgid "Return the Degrees, Minutes, Seconds representation of the given point." msgstr "" #. Tag: funcsynopsis #: reference_output.xml:795 #, no-c-format msgid "" " text ST_AsLatLonText " "geometry pt text ST_AsLatLonText geometry pt text format " msgstr "" #. Tag: para #: reference_output.xml:811 #, no-c-format msgid "Returns the Degrees, Minutes, Seconds representation of the point." msgstr "" #. Tag: para #: reference_output.xml:814 #, no-c-format msgid "" "It is assumed the point is in a lat/lon projection. The X (lon) and Y (lat) " "coordinates are normalized in the output to the \"normal\" range (-180 to " "+180 for lon, -90 to +90 for lat)." msgstr "" #. Tag: para #: reference_output.xml:817 #, no-c-format msgid "" "The text parameter is a format string containing the format for the " "resulting text, similar to a date format string. Valid tokens are \"D\" for " "degrees, \"M\" for minutes, \"S\" for seconds, and \"C\" for cardinal " "direction (NSEW). DMS tokens may be repeated to indicate desired width and " "precision (\"SSS.SSSS\" means \" 1.0023\")." msgstr "" #. Tag: para #: reference_output.xml:822 #, no-c-format msgid "" "\"M\", \"S\", and \"C\" are optional. If \"C\" is omitted, degrees are shown " "with a \"-\" sign if south or west. If \"S\" is omitted, minutes will be " "shown as decimal with as many digits of precision as you specify. If \"M\" " "is also omitted, degrees are shown as decimal with as many digits precision " "as you specify." msgstr "" #. Tag: para #: reference_output.xml:827 #, no-c-format msgid "" "If the format string is omitted (or zero-length) a default format will be " "used." msgstr "" #. Tag: para #: reference_output.xml:833 #, no-c-format msgid "Availability: 2.0" msgstr "" #. Tag: para #: reference_output.xml:839 #, no-c-format msgid "Default format." msgstr "" #. Tag: programlisting #: reference_output.xml:840 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));\n" " st_aslatlontext \n" "----------------------------\n" " 2°19'29.928\"S 3°14'3.243\"W" msgstr "" #. Tag: para #: reference_output.xml:841 #, no-c-format msgid "Providing a format (same as the default)." msgstr "" #. Tag: programlisting #: reference_output.xml:842 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS\"C'));\n" " st_aslatlontext \n" "----------------------------\n" " 2°19'29.928\"S 3°14'3.243\"W" msgstr "" #. Tag: para #: reference_output.xml:843 #, no-c-format msgid "Characters other than D, M, S, C and . are just passed through." msgstr "" #. Tag: programlisting #: reference_output.xml:844 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M " "minutes, S seconds to the C'));\n" " st_aslatlontext \n" "--------------------------------------------------------------------------------------\n" " 2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds " "to the W" msgstr "" #. Tag: para #: reference_output.xml:845 #, no-c-format msgid "Signed degrees instead of cardinal directions." msgstr "" #. Tag: programlisting #: reference_output.xml:846 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS\"'));\n" " st_aslatlontext \n" "----------------------------\n" " -2°19'29.928\" -3°14'3.243\"" msgstr "" #. Tag: para #: reference_output.xml:847 #, no-c-format msgid "Decimal degrees." msgstr "" #. Tag: programlisting #: reference_output.xml:848 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees " "C'));\n" " st_aslatlontext \n" "-----------------------------------\n" " 2.3250 degrees S 3.2342 degrees W" msgstr "" #. Tag: para #: reference_output.xml:849 #, no-c-format msgid "Excessively large values are normalized." msgstr "" #. Tag: programlisting #: reference_output.xml:850 #, no-c-format msgid "" "SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));\n" " st_aslatlontext \n" "-------------------------------\n" " 72°19'29.928\"S 57°45'56.757\"E" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/extras_historytable.xml.po0000644000000000000000000001660512025614072023216 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: extras_historytable.xml:3 #, no-c-format msgid "History Tracking" msgstr "" #. Tag: para #: extras_historytable.xml:6 #, no-c-format msgid "" "Suppose you have a table of data that represents the current state of a " "particular geographic feature. A parcels table, or a roads table, or a fruit " "trees table, whatever. Generally, GIS tools understand a table as a single " "entity into which they can update, insert and delete rows from. How you do " "allow common GIS tools to work against your data, while maintaining an audit " "trail of what changes have been made, by whom, and what the past state of " "the data is?" msgstr "" #. Tag: para #: extras_historytable.xml:10 #, no-c-format msgid "" "This history_table extra module provides some utility " "functions for creating and maintaining history." msgstr "" #. Tag: para #: extras_historytable.xml:14 #, no-c-format msgid "" "The history_table was also packaged in PostGIS 1.5, but " "added to the documentation in PostGIS 2.0. This package is written in " "plpgsql and located in the extras/history_table of " "PostGIS source tar balls and source repository." msgstr "" #. Tag: para #: extras_historytable.xml:15 #, no-c-format msgid "" "If you have a table 'roads', this module will maintain a 'roads_history' " "side table, which contains all the columns of the parent table, and the " "following additional columns:" msgstr "" #. Tag: programlisting #: extras_historytable.xml:16 #, no-c-format msgid "" "history_id | integer | not null default \n" " date_added | timestamp without time zone | not null default now()\n" " date_deleted | timestamp without time zone | \n" " last_operation | character varying(30) | not null\n" " active_user | character varying(90) | not null default " "\"current_user\"()\n" " current_version | text | not null" msgstr "" #. Tag: para #: extras_historytable.xml:20 #, no-c-format msgid "" "When you insert a new record into 'roads' a record is automatically inserted " "into 'roads_history', with the 'date_added' filled in the 'date_deleted' set " "to NULL, a unique 'history_id', a 'last_operation' of 'INSERT' and " "'active_user' set." msgstr "" #. Tag: para #: extras_historytable.xml:23 #, no-c-format msgid "" "When you delete a record in 'roads', the record in the history table is " "*not* deleted, but the 'date_deleted' is set to the current date." msgstr "" #. Tag: para #: extras_historytable.xml:26 #, no-c-format msgid "" "When you update a record in 'roads', the current record has 'date_deleted' " "filled in and a new record is created with the 'date_added' set and " "'date_deleted' NULL." msgstr "" #. Tag: para #: extras_historytable.xml:30 #, no-c-format msgid "" "With this information maintained, it is possible to retrieve the history of " "any record in the roads table:" msgstr "" #. Tag: programlisting #: extras_historytable.xml:31 #, no-c-format msgid "SELECT * FROM roads_history WHERE roads_pk = 111;" msgstr "" #. Tag: para #: extras_historytable.xml:33 #, no-c-format msgid "Or, to retrieve a view of the roads table at any point in the past:" msgstr "" #. Tag: programlisting #: extras_historytable.xml:34 #, no-c-format msgid "" "SELECT * FROM roads_history \n" " WHERE date_added < 'January 1, 2001' AND \n" " ( date_deleted >= 'January 1, 2001' OR date_deleted IS NULL );" msgstr "" #. Tag: refname #: extras_historytable.xml:38 #, no-c-format msgid "Postgis_Install_History" msgstr "" #. Tag: refpurpose #: extras_historytable.xml:39 #, no-c-format msgid "" "Creates a table that will hold some interesting values for managing history " "tables." msgstr "" #. Tag: funcprototype #: extras_historytable.xml:44 #, no-c-format msgid "" "void Postgis_Install_History " "" msgstr "" #. Tag: title #: extras_historytable.xml:52 extras_historytable.xml:92 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: extras_historytable.xml:54 #, no-c-format msgid "" "Creates a table that will hold some interesting values for managing history " "tables. Creates a table called historic_information" msgstr "" #. Tag: para #: extras_historytable.xml:58 extras_historytable.xml:100 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: title #: extras_historytable.xml:63 extras_historytable.xml:105 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: extras_historytable.xml:65 #, no-c-format msgid "SELECT postgis_install_history();" msgstr "" #. Tag: title #: extras_historytable.xml:71 extras_historytable.xml:113 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: extras_historytable.xml:77 #, no-c-format msgid "Postgis_Enable_History" msgstr "" #. Tag: refpurpose #: extras_historytable.xml:78 #, no-c-format msgid "" "Registers a tablein the history_information table for tracking and also adds " "in side line history table and insert, update, delete rules on the table." msgstr "" #. Tag: funcprototype #: extras_historytable.xml:83 #, no-c-format msgid "" "boolean Postgis_Enable_History " "text p_schema " "text p_table" msgstr "" #. Tag: para #: extras_historytable.xml:94 #, no-c-format msgid "" "Registers a table in the history_information table for tracking and also " "adds in side line history table with same name as table but prefixed with " "history in the same schema as the original table. Puts in " "insert, update, delete rules on the table. Any inserts,updates,deletes of " "the geometry are recorded in the history table." msgstr "" #. Tag: para #: extras_historytable.xml:97 #, no-c-format msgid "" "This function currently relies on a geometry column being registered in " "geometry_columns and fails if the geometry column is not " "present in geometry_columns table." msgstr "" #. Tag: programlisting #: extras_historytable.xml:107 #, no-c-format msgid "" "CREATE TABLE roads(gid SERIAL PRIMARY KEY, road_name varchar(150));\n" "SELECT AddGeometryColumn('roads', 'geom', 26986, 'LINESTRING', 2);\n" " \n" "SELECT postgis_enable_history('public', 'roads', 'geom') As register_table;\n" "register_table\n" "--------------\n" "t\n" "\n" "INSERT INTO roads(road_name, geom) \n" " VALUES('Test Street', ST_GeomFromText('LINESTRING(231660.5 832170,231647 " "832202,231627.5 832250.5)',26986));\n" "\n" "-- check transaction detail --\n" "SELECT date_added, last_operation, current_version \n" "FROM roads_history \n" "WHERE road_name = 'Test Street' ORDER BY date_added DESC;\n" "\n" " date_added | last_operation | current_version\n" "------------------------+----------------+-----------------\n" " 2011-02-07 12:44:36.92 | INSERT | 2" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_exception.xml.po0000644000000000000000000001406212025614072023126 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_exception.xml:3 #, no-c-format msgid "Exceptional Functions" msgstr "" #. Tag: para #: reference_exception.xml:4 #, no-c-format msgid "" "These functions are rarely used functions that should only be used if your " "data is corrupted in someway. They are used for troubleshooting corruption " "and also fixing things that should under normal circumstances, never happen." msgstr "" #. Tag: refname #: reference_exception.xml:9 #, no-c-format msgid "PostGIS_AddBBox" msgstr "" #. Tag: refpurpose #: reference_exception.xml:11 #, no-c-format msgid "Add bounding box to the geometry." msgstr "" #. Tag: funcprototype #: reference_exception.xml:16 #, no-c-format msgid "" "geometry PostGIS_AddBBox " "geometry geomA" msgstr "" #. Tag: title #: reference_exception.xml:24 reference_exception.xml:70 #: reference_exception.xml:119 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_exception.xml:26 #, no-c-format msgid "" "Add bounding box to the geometry. This would make bounding box based queries " "faster, but will increase the size of the geometry." msgstr "" #. Tag: para #: reference_exception.xml:31 #, no-c-format msgid "" "Bounding boxes are automatically added to geometries so in general this is " "not needed unless the generated bounding box somehow becomes corrupted or " "you have an old install that is lacking bounding boxes. Then you need to " "drop the old and readd." msgstr "" #. Tag: para #: reference_exception.xml:35 reference_exception.xml:83 #: reference_exception.xml:124 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: title #: reference_exception.xml:40 reference_exception.xml:88 #: reference_exception.xml:129 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_exception.xml:42 #, no-c-format msgid "" "UPDATE sometable\n" " SET the_geom = PostGIS_AddBBox(the_geom)\n" " WHERE PostGIS_HasBBox(the_geom) = false;" msgstr "" #. Tag: title #: reference_exception.xml:47 reference_exception.xml:95 #: reference_exception.xml:136 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_exception.xml:49 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_exception.xml:55 #, no-c-format msgid "PostGIS_DropBBox" msgstr "" #. Tag: refpurpose #: reference_exception.xml:57 #, no-c-format msgid "Drop the bounding box cache from the geometry." msgstr "" #. Tag: funcprototype #: reference_exception.xml:62 #, no-c-format msgid "" "geometry PostGIS_DropBBox " "geometry geomA" msgstr "" #. Tag: para #: reference_exception.xml:72 #, no-c-format msgid "" "Drop the bounding box cache from the geometry. This reduces geometry size, " "but makes bounding-box based queries slower. It is also used to drop a " "corrupt bounding box. A tale-tell sign of a corrupt cached bounding box is " "when your ST_Intersects and other relation queries leave out geometries that " "rightfully should return true." msgstr "" #. Tag: para #: reference_exception.xml:77 #, no-c-format msgid "" "Bounding boxes are automatically added to geometries and improve speed of " "queries so in general this is not needed unless the generated bounding box " "somehow becomes corrupted or you have an old install that is lacking " "bounding boxes. Then you need to drop the old and readd. This kind of " "corruption has been observed in 8.3-8.3.6 series whereby cached bboxes were " "not always recalculated when a geometry changed and upgrading to a newer " "version without a dump reload will not correct already corrupted boxes. So " "one can manually correct using below and readd the bbox or do a dump reload." msgstr "" #. Tag: programlisting #: reference_exception.xml:90 #, no-c-format msgid "" "--This example drops bounding boxes where the cached box is not correct\n" " --The force to ST_AsBinary before applying Box2D " "forces a recalculation of the box, and Box2D applied to the table geometry " "always\n" " -- returns the cached bounding box.\n" " UPDATE sometable\n" " SET the_geom = PostGIS_DropBBox(the_geom)\n" " WHERE Not (Box2D(ST_AsBinary(the_geom)) = Box2D(the_geom));\n" "\n" " UPDATE sometable\n" " SET the_geom = PostGIS_AddBBox(the_geom)\n" " WHERE Not PostGIS_HasBBOX(the_geom);" msgstr "" #. Tag: para #: reference_exception.xml:97 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_exception.xml:104 #, no-c-format msgid "PostGIS_HasBBox" msgstr "" #. Tag: refpurpose #: reference_exception.xml:106 #, no-c-format msgid "Returns TRUE if the bbox of this geometry is cached, FALSE otherwise." msgstr "" #. Tag: funcprototype #: reference_exception.xml:111 #, no-c-format msgid "" "boolean PostGIS_HasBBox " "geometry geomA" msgstr "" #. Tag: para #: reference_exception.xml:121 #, no-c-format msgid "" "Returns TRUE if the bbox of this geometry is cached, FALSE otherwise. Use " " and " "to control caching." msgstr "" #. Tag: programlisting #: reference_exception.xml:131 #, no-c-format msgid "" "SELECT the_geom\n" "FROM sometable WHERE PostGIS_HasBBox(the_geom) = false;" msgstr "" #. Tag: para #: reference_exception.xml:138 #, no-c-format msgid ", " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/extras_tigergeocoder.xml.po0000644000000000000000000021660612035636370023340 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-11 21:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: para #: extras_tigergeocoder.xml:6 #, no-c-format msgid "" "A plpgsql based geocoder written to work with the TIGER (Topologically Integrated Geographic " "Encoding and Referencing system ) / Line and Master Address database export released by the US Census Bureau. In versions prior to 2008 the TIGER " "files were released in ASCII format. The older geocoder used to work with " "that format and is available in PostGIS source 1.5 and below in " "extras/tiger_geocoder/tiger_2006andbefore." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:8 #, no-c-format msgid "" "There are four components to the geocoder: the data loader functions, the " "address normalizer, the address geocoder, and the reverse geocoder. The " "latest version updated to use the TIGER 2011 census data is located in the " "extras/tiger_geocoder/tiger_2011 folder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:9 #, no-c-format msgid "" "Although it is designed specifically for the US, a lot of the concepts and " "functions are applicable and can be adapted to work with other country " "address and road networks." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:10 #, no-c-format msgid "" "The script builds a schema called tiger to house all the " "tiger related functions, reusable lookup data such as road type prefixes, " "suffixes, states, various control tables for managing data load, and " "skeleton base tables from which all the tiger loaded tables inherit from." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:11 #, no-c-format msgid "" "Another schema called tiger_data is also created which " "houses all the census data for each state that the loader downloads from " "Census site and loads into the database. In the current model, each set of " "state tables is prefixed with the state code e.g ma_addr, " "ma_edges etc with constraints to enforce only that state " "data. Each of these tables inherits from the tables addr, " "faces, edges, etc located in the " "tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:13 #, no-c-format msgid "" "All the geocode functions only reference the base tables, so there is no " "requirement that the data schema be called tiger_data or " "that data can't be further partitioned into other schemas -- e.g a different " "schema for each state, as long as all the tables inherit from the tables in " "the tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:17 #, no-c-format msgid "" "If you are using tiger geocoder (tiger_2010), you can upgrade the scripts " "using the accompanying upgrade_geocoder.bat / .sh scripts in tiger_2011. One " "major change between tiger_2010 and tiger_2011 is that the county and county and " "state tables are no longer broken out by state. We'll be " "refining the upgrade scripts until release. If you have data from tiger_2010 " "and want replace with tiger_2011 refer to " msgstr "" #. Tag: para #: extras_tigergeocoder.xml:24 #, no-c-format msgid "Design:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:25 #, no-c-format msgid "" "The goal of this project is to build a fully functional geocoder that can " "process an arbitrary United States address string and using normalized TIGER " "census data, produce a point geometry and rating reflecting the location of " "the given address and likeliness of the location. The higher the rating " "number the worse the result." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:27 #, no-c-format msgid "" "The reverse_geocode function, introduced in PostGIS 2.0.0 " "is useful for deriving the street address and cross streets of a GPS " "location." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:28 #, no-c-format msgid "" "The geocoder should be simple for anyone familiar with PostGIS to install " "and use, and should be easily installable and usable on all platforms " "supported by PostGIS." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:29 #, no-c-format msgid "" "It should be robust enough to function properly despite formatting and " "spelling errors." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:30 #, no-c-format msgid "" "It should be extensible enough to be used with future data updates, or " "alternate data sources with a minimum of coding changes." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:32 #, no-c-format msgid "" "The tiger schema must be added to the database search " "path for the functions to work properly." msgstr "" #. Tag: title #: extras_tigergeocoder.xml:36 #, no-c-format msgid "Tiger Geocoder" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:38 #, no-c-format msgid "" "There are a couple other open source geocoders for PostGIS, that unlike " "tiger geocoder have the advantage of multi-country geocoding support" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:40 #, no-c-format msgid "" "Nominatim and uses OpenStreetMap gazeteer formatted data. It requires osm2pgsql " "for loading the data, PostgreSQL 8.4+ and PostGIS 1.5+ to function. It is " "packaged as a webservice interface and seems designed to be called as a " "webservice. Just like the tiger geocoder, it has both a geocoder and a " "reverse geocoder component. From the documentation, it is unclear if it has " "a pure SQL interface like the tiger geocoder, or if a good deal of the logic " "is implemented in the web interface." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:43 #, no-c-format msgid "" "GIS Graphy also utilizes " "PostGIS and like Nominatim works with OpenStreetMap (OSM) data. It comes " "with a loader to load OSM data and similar to Nominatim is capable of " "geocoding not just US. Much like Nominatim, it runs as a webservice and " "relies on Java 1.5, Servlet apps, Solr. GisGraphy is cross-platform and also " "has a reverse geocoder among some other neat features." msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:48 #, no-c-format msgid "Drop_Indexes_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:50 #, no-c-format msgid "" "Generates a script that drops all non-primary key and non-unique " "indexes on tiger schema and user specified schema. Defaults schema to " "tiger_data if no schema is specified." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:55 #, no-c-format msgid "" "text Drop_Indexes_Generate_Script " "text " "param_schema=tiger_data" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:63 extras_tigergeocoder.xml:106 #: extras_tigergeocoder.xml:148 extras_tigergeocoder.xml:204 #: extras_tigergeocoder.xml:266 extras_tigergeocoder.xml:311 #: extras_tigergeocoder.xml:351 extras_tigergeocoder.xml:390 #: extras_tigergeocoder.xml:435 extras_tigergeocoder.xml:493 #: extras_tigergeocoder.xml:550 extras_tigergeocoder.xml:605 #: extras_tigergeocoder.xml:650 extras_tigergeocoder.xml:728 #: extras_tigergeocoder.xml:775 extras_tigergeocoder.xml:847 #: extras_tigergeocoder.xml:912 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:65 #, no-c-format msgid "" "Generates a script that drops all non-primary key and non-unique " "indexes on tiger schema and user specified schema. Defaults schema to " "tiger_data if no schema is specified." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:66 #, no-c-format msgid "" "This is useful for minimizing index bloat that may confuse the query planner " "or take up unnecessary space. Use in combination with to add just the indexes used by the geocoder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:69 extras_tigergeocoder.xml:154 #: extras_tigergeocoder.xml:273 extras_tigergeocoder.xml:355 #: extras_tigergeocoder.xml:398 extras_tigergeocoder.xml:453 #: extras_tigergeocoder.xml:613 extras_tigergeocoder.xml:801 #: extras_tigergeocoder.xml:873 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:76 extras_tigergeocoder.xml:118 #: extras_tigergeocoder.xml:161 extras_tigergeocoder.xml:405 #: extras_tigergeocoder.xml:460 extras_tigergeocoder.xml:518 #: extras_tigergeocoder.xml:573 extras_tigergeocoder.xml:620 #: extras_tigergeocoder.xml:696 extras_tigergeocoder.xml:738 #: extras_tigergeocoder.xml:806 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:77 #, no-c-format msgid "" "SELECT drop_indexes_generate_script() As actionsql;\n" "actionsql\n" "---------------------------------------------------------\n" "DROP INDEX tiger.idx_tiger_countysub_lookup_lower_name;\n" "DROP INDEX tiger.idx_tiger_edges_countyfp;\n" "DROP INDEX tiger.idx_tiger_faces_countyfp;\n" "DROP INDEX tiger.tiger_place_the_geom_gist;\n" "DROP INDEX tiger.tiger_edges_the_geom_gist;\n" "DROP INDEX tiger.tiger_state_the_geom_gist;\n" "DROP INDEX tiger.idx_tiger_addr_least_address;\n" "DROP INDEX tiger.idx_tiger_addr_tlid;\n" "DROP INDEX tiger.idx_tiger_addr_zip;\n" "DROP INDEX tiger.idx_tiger_county_countyfp;\n" "DROP INDEX tiger.idx_tiger_county_lookup_lower_name;\n" "DROP INDEX tiger.idx_tiger_county_lookup_snd_name;\n" "DROP INDEX tiger.idx_tiger_county_lower_name;\n" "DROP INDEX tiger.idx_tiger_county_snd_name;\n" "DROP INDEX tiger.idx_tiger_county_the_geom_gist;\n" "DROP INDEX tiger.idx_tiger_countysub_lookup_snd_name;\n" "DROP INDEX tiger.idx_tiger_cousub_countyfp;\n" "DROP INDEX tiger.idx_tiger_cousub_cousubfp;\n" "DROP INDEX tiger.idx_tiger_cousub_lower_name;\n" "DROP INDEX tiger.idx_tiger_cousub_snd_name;\n" "DROP INDEX tiger.idx_tiger_cousub_the_geom_gist;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_addr_least_address;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_addr_tlid;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_addr_zip;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_countyfp;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_lower_name;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_snd_name;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_lower_name;\n" "DROP INDEX tiger_data.idx_tiger_data_ma_county_snd_name;\n" ":\n" ":" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:83 extras_tigergeocoder.xml:125 #: extras_tigergeocoder.xml:168 extras_tigergeocoder.xml:235 #: extras_tigergeocoder.xml:289 extras_tigergeocoder.xml:328 #: extras_tigergeocoder.xml:368 extras_tigergeocoder.xml:412 #: extras_tigergeocoder.xml:470 extras_tigergeocoder.xml:528 #: extras_tigergeocoder.xml:582 extras_tigergeocoder.xml:627 #: extras_tigergeocoder.xml:706 extras_tigergeocoder.xml:749 #: extras_tigergeocoder.xml:821 extras_tigergeocoder.xml:889 #: extras_tigergeocoder.xml:929 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:84 extras_tigergeocoder.xml:413 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:90 #, no-c-format msgid "Drop_Nation_Tables_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:92 #, no-c-format msgid "" "Generates a script that drops all tables in the specified schema that start " "with county_all, state_all or stae " "code followed by county or state." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:97 extras_tigergeocoder.xml:139 #, no-c-format msgid "" "text Drop_State_Tables_Generate_Script text param_state text " "param_schema=tiger_data" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:108 #, no-c-format msgid "" "Generates a script that drops all tables in the specified schema that start " "with county_all, state_all or stae " "code followed by county or state. This " "is needed if you are upgrading from tiger_2010 to " "tiger_2011 data." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:111 extras_tigergeocoder.xml:316 #: extras_tigergeocoder.xml:567 extras_tigergeocoder.xml:916 #, no-c-format msgid "Availability: 2.1.0" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:119 #, no-c-format msgid "" "SELECT drop_nation_tables_generate_script();\n" "DROP TABLE tiger_data.county_all;\n" "DROP TABLE tiger_data.county_all_lookup;\n" "DROP TABLE tiger_data.state_all;\n" "DROP TABLE tiger_data.ma_county;\n" "DROP TABLE tiger_data.ma_state;" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:132 #, no-c-format msgid "Drop_State_Tables_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:134 #, no-c-format msgid "" "Generates a script that drops all tables in the specified schema that are " "prefixed with the state abbreviation. Defaults schema to " "tiger_data if no schema is specified." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:150 #, no-c-format msgid "" "Generates a script that drops all tables in the specified schema that are " "prefixed with the state abbreviation. Defaults schema to " "tiger_data if no schema is specified. This function is " "useful for dropping tables of a state just before you reload a state in case " "something went wrong during your previous load." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:162 #, no-c-format msgid "" "SELECT drop_state_tables_generate_script('PA');\n" "DROP TABLE tiger_data.pa_addr;\n" "DROP TABLE tiger_data.pa_county;\n" "DROP TABLE tiger_data.pa_county_lookup;\n" "DROP TABLE tiger_data.pa_cousub;\n" "DROP TABLE tiger_data.pa_edges;\n" "DROP TABLE tiger_data.pa_faces;\n" "DROP TABLE tiger_data.pa_featnames;\n" "DROP TABLE tiger_data.pa_place;\n" "DROP TABLE tiger_data.pa_state;\n" "DROP TABLE tiger_data.pa_zip_lookup_base;\n" "DROP TABLE tiger_data.pa_zip_state;\n" "DROP TABLE tiger_data.pa_zip_state_loc;" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:174 #, no-c-format msgid "Geocode" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:176 #, no-c-format msgid "" "Takes in an address as a string (or other normalized address) and outputs a " "set of possible locations which include a point geometry in NAD 83 long lat, " "a normalized address for each, and the rating. The lower the rating the more " "likely the match. Results are sorted by lowest rating first. Can optionally " "pass in maximum results, defaults to 10, and restrict_region (defaults to " "NULL)" msgstr "" #. Tag: funcsynopsis #: extras_tigergeocoder.xml:181 #, no-c-format msgid "" " setof record geocode " "varchar address " "integer max_results=10 geometry " "restrict_region=NULL " "norm_addy OUT addy " "geometry OUT geomout integer OUT rating setof record " "geocode norm_addy " "in_addy integer max_results=10 " "geometry " "restrict_region=NULL " "norm_addy OUT addy " "geometry OUT geomout integer OUT rating " msgstr "" #. Tag: para #: extras_tigergeocoder.xml:206 #, no-c-format msgid "" "Takes in an address as a string (or already normalized address) and outputs " "a set of possible locations which include a point geometry in NAD 83 long " "lat, a normalized_address (addy) for each, and the " "rating. The lower the rating the more likely the match. Results are sorted " "by lowest rating first. Uses Tiger data (edges,faces,addr), PostgreSQL fuzzy " "string matching (soundex,levenshtein) and PostGIS line interpolation " "functions to interpolate address along the Tiger edges. The higher the " "rating the less likely the geocode is right. The geocoded point is defaulted " "to offset 10 meters from center-line off to side (L/R) of street address is " "located on." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:210 #, no-c-format msgid "" "Enhanced: 2.0.0 to support Tiger 2010 structured data and revised some logic " "to improve speed, accuracy of geocoding, and to offset point from centerline " "to side of street address is located on. New parameter max_results useful " "for specifying ot just return the best result." msgstr "" #. Tag: title #: extras_tigergeocoder.xml:216 extras_tigergeocoder.xml:279 #: extras_tigergeocoder.xml:361 #, no-c-format msgid "Examples: Basic" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:217 #, no-c-format msgid "" "The below examples timings are on a 3.0 GHZ single processor Windows 7 " "machine with 2GB ram running PostgreSQL 9.1rc1/PostGIS 2.0 loaded with all " "of MA,MN,CA, RI state Tiger data loaded." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:218 #, no-c-format msgid "Exact matches are faster to compute (61ms)" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:219 #, no-c-format msgid "" "SELECT g.rating, ST_X(g.geomout) As lon, ST_Y(g.geomout) As lat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, (addy).location As city, (addy)." "stateabbrev As st,(addy).zip \n" " FROM geocode('75 State Street, Boston MA 02109') As g; \n" " rating | lon | lat | stno | street | styp | " "city | st | zip \n" "--------+-------------------+------------------+------+--------+------" "+--------+----+-------\n" " 0 | -71.0556722990239 | 42.3589914927049 | 75 | State | St | " "Boston | MA | 02109" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:220 #, no-c-format msgid "" "Even if zip is not passed in the geocoder can guess (took about 122-150 ms)" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:221 #, no-c-format msgid "" "SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, (addy).location As city, (addy)." "stateabbrev As st,(addy).zip \n" " FROM geocode('226 Hanover Street, Boston, MA',1) As g; \n" " rating | wktlonlat | stno | street | styp | city | st | " "zip \n" "--------+---------------------------+------+---------+------+--------+----" "+-------\n" " 1 | POINT(-71.05528 42.36316) | 226 | Hanover | St | Boston | MA | " "02113" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:222 #, no-c-format msgid "" "Can handle misspellings and provides more than one possible solution with " "ratings and takes longer (500ms)." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:223 #, no-c-format msgid "" "SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, (addy).location As city, (addy)." "stateabbrev As st,(addy).zip \n" " FROM geocode('31 - 37 Stewart Street, Boston, MA 02116') As g; \n" " rating | wktlonlat | stno | street | styp | city | st | " "zip \n" "--------+---------------------------+------+--------+------+--------+----" "+-------\n" " 70 | POINT(-71.06459 42.35113) | 31 | Stuart | St | Boston | MA | " "02116" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:225 #, no-c-format msgid "" "Using to do a batch geocode of addresses. Easiest is to set " "max_results=1. Only process those not yet geocoded (have " "no rating)." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:226 #, no-c-format msgid "" "CREATE TABLE addresses_to_geocode(addid serial PRIMARY KEY, address text,\n" " lon numeric, lat numeric, new_address text, rating " "integer);\n" "\n" "INSERT INTO addresses_to_geocode(address)\n" "VALUES ('529 Main Street, Boston MA, 02129'),\n" " ('77 Massachusetts Avenue, Cambridge, MA 02139'),\n" " ('25 Wizard of Oz, Walaford, KS 99912323'),\n" " ('26 Capen Street, Medford, MA'),\n" " ('124 Mount Auburn St, Cambridge, Massachusetts 02138'),\n" " ('950 Main Street, Worcester, MA 01610');\n" " \n" "-- only update the first 3 addresses (323-704 ms - there are caching and " "shared memory effects so first geocode you do is always slower) --\n" "-- for large numbers of addresses you don't want to update all at once\n" "-- since the whole geocode must commit at once \n" "-- For this example we rejoin with LEFT JOIN \n" "-- and set to rating to -1 rating if no match \n" "-- to ensure we don't regeocode a bad address \n" "UPDATE addresses_to_geocode\n" " SET (rating, new_address, lon, lat) \n" " = ( COALESCE((g.geo).rating,-1), pprint_addy((g.geo).addy),\n" " ST_X((g.geo).geomout)::numeric(8,5), ST_Y((g.geo).geomout)::" "numeric(8,5) )\n" "FROM (SELECT addid \n" " FROM addresses_to_geocode \n" " WHERE rating IS NULL ORDER BY addid LIMIT 3) As a\n" " LEFT JOIN (SELECT addid, (geocode(address,1)) As geo\n" " FROM addresses_to_geocode As ag\n" " WHERE ag.rating IS NULL ORDER BY addid LIMIT 3) As g ON a.addid = g." "addid\n" "WHERE a.addid = addresses_to_geocode.addid;\n" "\n" "result\n" "-----\n" "Query returned successfully: 3 rows affected, 480 ms execution time.\n" "\n" "SELECT * FROM addresses_to_geocode WHERE rating is not null;\n" "\n" " addid | address | lon | lat " "| new_address | rating \n" "-------+----------------------------------------------+-----------+----------" "+-------------------------------------------+--------\n" " 1 | 529 Main Street, Boston MA, 02129 | -71.07181 | 42.38359 " "| 529 Main St, Boston, MA 02129 | 0\n" " 2 | 77 Massachusetts Avenue, Cambridge, MA 02139 | -71.09428 | 42.35988 " "| 77 Massachusetts Ave, Cambridge, MA 02139 | 0\n" " 3 | 25 Wizard of Oz, Walaford, KS 99912323 | | " "| | -1" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:229 #, no-c-format msgid "Examples: Using Geometry filter" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:230 #, no-c-format msgid "" "SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat, \n" " (addy).address As stno, (addy).streetname As street, \n" " (addy).streettypeabbrev As styp, \n" " (addy).location As city, (addy).stateabbrev As st,(addy).zip \n" " FROM geocode('100 Federal Street, MA',\n" " 3, \n" " (SELECT ST_Union(the_geom) \n" " FROM place WHERE statefp = '25' AND name = 'Lynn')::" "geometry\n" " ) As g;\n" "\n" " rating | wktlonlat | stno | street | styp | city | st | " "zip\n" "--------+--------------------------+------+---------+------+------+----" "+-------\n" " 8 | POINT(-70.96796 42.4659) | 100 | Federal | St | Lynn | MA | " "01905\n" "Total query runtime: 245 ms." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:236 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:242 #, no-c-format msgid "Geocode_Intersection" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:244 #, no-c-format msgid "" "Takes in 2 streets that intersect and a state, city, zip, and outputs a set " "of possible locations on the first cross street that is at the intersection, " "also includes a point geometry in NAD 83 long lat, a normalized address for " "each location, and the rating. The lower the rating the more likely the " "match. Results are sorted by lowest rating first. Can optionally pass in " "maximum results, defaults to 10" msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:250 #, no-c-format msgid "" "setof record geocode_intersection " "text roadway1 " "text roadway2 " "text in_state " "text in_city text in_zip integer " "max_results=10 norm_addy OUT addy geometry OUT geomout integer " " OUT rating" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:268 #, no-c-format msgid "" "Takes in 2 streets that intersect and a state, city, zip, and outputs a set " "of possible locations on the first cross street that is at the intersection, " "also includes a point geometry in NAD 83 long lat, a normalized address for " "each location, and the rating. The lower the rating the more likely the " "match. Results are sorted by lowest rating first. Can optionally pass in " "maximum results, defaults to 10. Returns normalized_address (addy) for each, geomout as the point location in nad 83 long lat, " "and the rating. The lower the rating the more likely the match. Results are " "sorted by lowest rating first. Uses Tiger data (edges,faces,addr), " "PostgreSQL fuzzy string matching (soundex,levenshtein)" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:280 #, no-c-format msgid "" "The below examples timings are on a 3.0 GHZ single processor Windows 7 " "machine with 2GB ram running PostgreSQL 9.0/PostGIS 1.5 loaded with all of " "MA state Tiger data loaded. Currently a bit slow (3000 ms)" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:281 #, no-c-format msgid "" "Testing on Windows 2003 64-bit 8GB on PostGIS 2.0 PostgreSQL 64-bit Tiger " "2011 data loaded -- (41ms)" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:282 #, no-c-format msgid "" "SELECT pprint_addy(addy), st_astext(geomout),rating \n" " FROM geocode_intersection( 'Haverford St','Germania " "St', 'MA', 'Boston', '02130',1); \n" " pprint_addy | st_astext | rating\n" "----------------------------------+----------------------------+--------\n" "98 Haverford St, Boston, MA 02130 | POINT(-71.101375 42.31376) | 0" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:283 #, no-c-format msgid "" "Even if zip is not passed in the geocoder can guess (took about 3500 ms on " "the windows 7 box), on the windows 2003 64-bit 741 ms" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:284 #, no-c-format msgid "" "SELECT pprint_addy(addy), st_astext(geomout),rating \n" " FROM geocode_intersection('Weld', 'School', " "'MA', 'Boston');\n" " pprint_addy | st_astext | rating\n" "-------------------------------+--------------------------+--------\n" " 98 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) | 3\n" " 99 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) | 3" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:290 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:296 #, no-c-format msgid "Get_Geocode_Setting" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:298 #, no-c-format msgid "" "Returns value of specific setting stored in tiger.geocode_settings table." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:303 #, no-c-format msgid "" "text Get_Geocode_Setting " "text setting_name" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:313 #, no-c-format msgid "" "Returns value of specific setting stored in tiger.geocode_settings table. " "Settings allow you to toggle debugging of functions. Later plans will be to " "control rating with settings. Current list of settings are as follows:" msgstr "" #. Tag: screen #: extras_tigergeocoder.xml:314 #, no-c-format msgid "" "name | category | " "short_desc \n" "----------------------------+----------" "+----------------------------------------------------------------------------------\n" " debug_geocode_address | debug | outputs debug information in notice " "log such as queries \n" " | when geocode_addresss is called if " "true\n" " debug_geocode_intersection | debug | outputs debug information in notice " "log such as queries \n" " | when geocode_intersection is " "called if true\n" " debug_normalize_address | debug | outputs debug information in notice " "log such as queries \n" " | and intermediate expressions when " "normalize_address is called if true\n" " debug_reverse_geocode | debug | if true, outputs debug information " "in notice log \n" " such as queries and intermediate " "expressions when reverse_geocode" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:322 extras_tigergeocoder.xml:922 #, no-c-format msgid "Example return debugging setting" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:323 #, no-c-format msgid "" "SELECT get_geocode_setting('debug_geocode_address) As result;\n" "result\n" "---------\n" "false" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:335 #, no-c-format msgid "Get_Tract" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:337 #, no-c-format msgid "" "Returns census tract or field from tract table of where the geometry is " "located. Default to returning short name of tract." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:342 #, no-c-format msgid "" "text get_tract " "geometry loc_geom " "text output_field=name" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:353 #, no-c-format msgid "" "Given a geometry will return the census tract location of that geometry. NAD " "83 long lat is assumed if no spatial ref sys is specified." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:362 #, no-c-format msgid "" "SELECT get_tract(ST_Point(-71.101375, 42.31376) ) As tract_name;\n" "tract_name\n" "---------\n" "1203.01" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:363 #, no-c-format msgid "" "--this one returns the tiger geoid\n" "SELECT get_tract(ST_Point(-71.101375, 42.31376), 'tract_id' ) As tract_id;\n" "tract_id\n" "---------\n" "25025120301" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:369 #, no-c-format msgid ">" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:375 #, no-c-format msgid "Install_Missing_Indexes" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:377 #, no-c-format msgid "" "Finds all tables with key columns used in geocoder joins and filter " "conditions that are missing used indexes on those columns and will add them." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:382 #, no-c-format msgid "" "boolean Install_Missing_Indexes " "" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:392 #, no-c-format msgid "" "Finds all tables in tiger and tiger_data schemas with key columns used in geocoder joins and filters that " "are missing indexes on those columns and will output the SQL DDL to define " "the index for those tables and then execute the generated script. This is a " "helper function that adds new indexes needed to make queries faster that may " "have been missing during the load process. This function is a companion to " " that in addition to " "generating the create index script, also executes it. It is called as part " "of the update_geocode.sql upgrade script." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:406 #, no-c-format msgid "" "SELECT install_missing_indexes();\n" " install_missing_indexes\n" "-------------------------\n" " t" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:419 #, no-c-format msgid "Loader_Generate_Census_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:421 #, no-c-format msgid "" "Generates a shell script for the specified platform for the specified states " "that will download Tiger census state tract, bg, and tabblocks data tables, " "stage and load into tiger_data schema. Each state script " "is returned as a separate record." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:426 #, no-c-format msgid "" "setof text loader_generate_census_script text[] param_states text os" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:437 #, no-c-format msgid "" "Generates a shell script for the specified platform for the specified states " "that will download Tiger data census state tract, block " "groups bg, and tabblocks data tables, " "stage and load into tiger_data schema. Each state script " "is returned as a separate record." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:438 #, no-c-format msgid "" "It uses unzip on Linux (7-zip on Windows by default) and wget to do the " "downloading. It uses to load in the " "data. Note the smallest unit it does is a whole state. It will only process " "the files in the staging and temp folders." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:440 extras_tigergeocoder.xml:498 #, no-c-format msgid "" "It uses the following control tables to control the process and different OS " "shell syntax variations." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:444 extras_tigergeocoder.xml:502 #: extras_tigergeocoder.xml:558 #, no-c-format msgid "" "loader_variables keeps track of various variables such as " "census site, year, data and staging schemas" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:447 extras_tigergeocoder.xml:505 #, no-c-format msgid "" "loader_platform profiles of various platforms and where " "the various executables are located. Comes with windows and linux. More can " "be added." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:450 extras_tigergeocoder.xml:508 #: extras_tigergeocoder.xml:564 #, no-c-format msgid "" "loader_lookuptables each record defines a kind of table " "(state, county), whether to process records in it and how to load them in. " "Defines the steps to import data, stage data, add, removes columns, indexes, " "and constraints for each. Each table is prefixed with the state and inherits " "from a table in the tiger schema. e.g. creates tiger_data.ma_faces which inherits from tiger.faces" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:454 #, no-c-format msgid "" "includes this logic, but if you installed tiger geocoder prior to PostGIS " "2.0.0 alpha5, you'll need to run this on the states you have already done to " "get these additional tables." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:461 #, no-c-format msgid "" "Generate script to load up data for select states in Windows shell script " "format." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:462 #, no-c-format msgid "" "SELECT loader_generate_census_script(ARRAY['MA'], 'windows');\n" "-- result --\n" "set STATEDIR=\"\\gisdata\\www2.census.gov\\geo\\pvs\\tiger2010st" "\\25_Massachusetts\"\n" "set TMPDIR=\\gisdata\\temp\\\n" "set UNZIPTOOL=\"C:\\Program Files\\7-Zip\\7z.exe\"\n" "set WGETTOOL=\"C:\\wget\\wget.exe\"\n" "set PGBIN=C:\\projects\\pg\\pg91win\\bin\\\n" "set PGPORT=5432\n" "set PGHOST=localhost\n" "set PGUSER=postgres\n" "set PGPASSWORD=yourpasswordhere\n" "set PGDATABASE=tiger_postgis20\n" "set PSQL=\"%PGBIN%psql\"\n" "set SHP2PGSQL=\"%PGBIN%shp2pgsql\"\n" "cd \\gisdata\n" "\n" "%WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --" "no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --" "mirror --reject=html\n" "del %TMPDIR%\\*.* /Q\n" "%PSQL% -c \"DROP SCHEMA tiger_staging CASCADE;\"\n" "%PSQL% -c \"CREATE SCHEMA tiger_staging;\"\n" "cd %STATEDIR%\n" "for /r %%z in (*.zip) do %UNZIPTOOL% e %%z -o%TMPDIR% \n" "cd %TMPDIR% \n" "%PSQL% -c \"CREATE TABLE tiger_data.MA_tract(CONSTRAINT pk_MA_tract PRIMARY " "KEY (tract_id) ) INHERITS(tiger.tract); \" \n" "%SHP2PGSQL% -c -s 4269 -g the_geom -W \"latin1\" tl_2010_25_tract10.dbf " "tiger_staging.ma_tract10 | %PSQL%\n" "%PSQL% -c \"ALTER TABLE tiger_staging.MA_tract10 RENAME geoid10 TO " "tract_id; SELECT loader_load_staged_data(lower('MA_tract10'), lower" "('MA_tract')); \"\n" "%PSQL% -c \"CREATE INDEX tiger_data_MA_tract_the_geom_gist ON tiger_data." "MA_tract USING gist(the_geom);\"\n" "%PSQL% -c \"VACUUM ANALYZE tiger_data.MA_tract;\"\n" "%PSQL% -c \"ALTER TABLE tiger_data.MA_tract ADD CONSTRAINT chk_statefp CHECK " "(statefp = '25');\"\n" ":" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:463 extras_tigergeocoder.xml:521 #, no-c-format msgid "Generate sh script" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:464 #, no-c-format msgid "" "STATEDIR=\"/gisdata/www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts\" \n" "TMPDIR=\"/gisdata/temp/\"\n" "UNZIPTOOL=unzip\n" "WGETTOOL=\"/usr/bin/wget\"\n" "export PGBIN=/usr/pgsql-9.0/bin\n" "export PGPORT=5432\n" "export PGHOST=localhost\n" "export PGUSER=postgres\n" "export PGPASSWORD=yourpasswordhere\n" "export PGDATABASE=geocoder\n" "PSQL=${PGBIN}/psql\n" "SHP2PGSQL=${PGBIN}/shp2pgsql\n" "cd /gisdata\n" "\n" "wget http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-" "parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --" "reject=html\n" "rm -f ${TMPDIR}/*.*\n" "${PSQL} -c \"DROP SCHEMA tiger_staging CASCADE;\"\n" "${PSQL} -c \"CREATE SCHEMA tiger_staging;\"\n" "cd $STATEDIR\n" "for z in *.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done\n" ":\n" ":" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:477 #, no-c-format msgid "Loader_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:479 #, no-c-format msgid "" "Generates a shell script for the specified platform for the specified states " "that will download Tiger data, stage and load into tiger_data schema. Each state script is returned as a separate record. Latest " "version supports Tiger 2010 structural changes and also loads census tract, " "block groups, and blocks tables." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:484 #, no-c-format msgid "" "setof text loader_generate_script " "text[] param_states " "text os" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:495 #, no-c-format msgid "" "Generates a shell script for the specified platform for the specified states " "that will download Tiger data, stage and load into tiger_data schema. Each state script is returned as a separate record." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:496 #, no-c-format msgid "" "It uses unzip on Linux (7-zip on Windows by default) and wget to do the " "downloading. It uses to load in the " "data. Note the smallest unit it does is a whole state, but you can overwrite " "this by downloading the files yourself. It will only process the files in " "the staging and temp folders." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:511 #, no-c-format msgid "" "Availability: 2.0.0 to support Tiger 2010 structured data and load census " "tract (tract), block groups (bg), and blocks (tabblocks) tables ." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:519 #, no-c-format msgid "" "Generate script to load up data for 2 states in Windows shell script format." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:520 #, no-c-format msgid "" "SELECT loader_generate_script(ARRAY['MA','RI'], 'windows') AS result;\n" "-- result --\n" "set STATEDIR=\"\\gisdata\\www2.census.gov\\geo\\pvs\\tiger2010st" "\\44_Rhode_Island\"\n" "set TMPDIR=\\gisdata\\temp\\\n" "set UNZIPTOOL=\"C:\\Program Files\\7-Zip\\7z.exe\"\n" "set WGETTOOL=\"C:\\wget\\wget.exe\"\n" "set PGBIN=C:\\Program Files\\PostgreSQL\\8.4\\bin\\\n" "set PGPORT=5432\n" "set PGHOST=localhost\n" "set PGUSER=postgres\n" "set PGPASSWORD=yourpasswordhere\n" "set PGDATABASE=geocoder\n" "set PSQL=\"%PGBIN%psql\"\n" "set SHP2PGSQL=\"%PGBIN%shp2pgsql\"\n" "\n" "%WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island/ --no-" "parent --relative --recursive --level=2 --accept=zip,txt --mirror --" "reject=html\n" ":\n" ":" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:522 #, no-c-format msgid "" "SELECT loader_generate_script(ARRAY['MA','RI'], 'sh') AS result;\n" "-- result --\n" "STATEDIR=\"/gisdata/www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island\" \n" "TMPDIR=\"/gisdata/temp/\"\n" "UNZIPTOOL=unzip\n" "PGPORT=5432\n" "PGHOST=localhost\n" "PGUSER=postgres\n" "PGPASSWORD=yourpasswordhere\n" "PGDATABASE=geocoder\n" "PSQL=psql\n" "SHP2PGSQ=shp2pgsql\n" "\n" "wget http://www2.census.gov/geo/pvs/tiger2010st/44_Rhode_Island/ --no-parent " "--relative --recursive --level=2 --accept=zip,txt --mirror --reject=html\n" ":\n" ":" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:535 #, no-c-format msgid "Loader_Generate_Nation_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:537 #, no-c-format msgid "" "Generates a shell script for the specified platform that loads in the county " "and state lookup tables." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:542 #, no-c-format msgid "" "text loader_generate_nation_script " "text os" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:552 #, no-c-format msgid "" "Generates a shell script for the specified platform that loads in the " "county_all, county_all_lookup, " "state_all tables into tiger_data " "schema. These inherit respectively from the county, " "county_lookup, state tables in " "tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:553 #, no-c-format msgid "" "It uses unzip on Linux (7-zip on Windows by default) and wget to do the " "downloading. It uses to load in the data." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:554 #, no-c-format msgid "" "It uses the following control tables tiger.loader_platform, tiger.loader_variables, and tiger." "loader_lookuptables to control the process and different OS shell " "syntax variations." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:561 #, no-c-format msgid "" "loader_platform profiles of various platforms and where " "the various executables are located. Comes with windows and linux/unix. More " "can be added." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:568 #, no-c-format msgid "" "If you were running tiger_2010 version and you want to " "reload as state with tiger_2011, you'll need to for the " "very first load generate and run drop statements before you run this script." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:574 #, no-c-format msgid "Generate script script to load nation data Windows." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:575 #, no-c-format msgid "SELECT loader_generate_nation_script('windows');" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:576 #, no-c-format msgid "Generate script to load up data for Linux/Unix systems." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:577 #, no-c-format msgid "SELECT loader_generate_nation_script('sh');" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:589 #, no-c-format msgid "Missing_Indexes_Generate_Script" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:591 #, no-c-format msgid "" "Finds all tables with key columns used in geocoder joins that are missing " "indexes on those columns and will output the SQL DDL to define the index for " "those tables." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:597 #, no-c-format msgid "" "text Missing_Indexes_Generate_Script " "" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:607 #, no-c-format msgid "" "Finds all tables in tiger and tiger_data schemas with key columns used in geocoder joins that are missing " "indexes on those columns and will output the SQL DDL to define the index for " "those tables. This is a helper function that adds new indexes needed to make " "queries faster that may have been missing during the load process. As the " "geocoder is improved, this function will be updated to accommodate new " "indexes being used. If this function outputs nothing, it means all your " "tables have what we think are the key indexes already in place." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:621 #, no-c-format msgid "" "SELECT missing_indexes_generate_script();\n" "-- output: This was run on a database that was created before many " "corrections were made to the loading script ---\n" "CREATE INDEX idx_tiger_county_countyfp ON tiger.county USING btree" "(countyfp);\n" "CREATE INDEX idx_tiger_cousub_countyfp ON tiger.cousub USING btree" "(countyfp);\n" "CREATE INDEX idx_tiger_edges_tfidr ON tiger.edges USING btree(tfidr);\n" "CREATE INDEX idx_tiger_edges_tfidl ON tiger.edges USING btree(tfidl);\n" "CREATE INDEX idx_tiger_zip_lookup_all_zip ON tiger.zip_lookup_all USING btree" "(zip);\n" "CREATE INDEX idx_tiger_data_ma_county_countyfp ON tiger_data.ma_county USING " "btree(countyfp);\n" "CREATE INDEX idx_tiger_data_ma_cousub_countyfp ON tiger_data.ma_cousub USING " "btree(countyfp);\n" "CREATE INDEX idx_tiger_data_ma_edges_countyfp ON tiger_data.ma_edges USING " "btree(countyfp);\n" "CREATE INDEX idx_tiger_data_ma_faces_countyfp ON tiger_data.ma_faces USING " "btree(countyfp);" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:628 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:634 #, no-c-format msgid "Normalize_Address" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:636 #, no-c-format msgid "" "Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, " "streetname etc. broken into separate fields. This function will work with " "just the lookup data packaged with the tiger_geocoder (no need for tiger " "census data)." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:642 #, no-c-format msgid "" "norm_addy normalize_address " "varchar in_address" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:652 #, no-c-format msgid "" "Given a textual street address, returns a composite norm_addy type that has road suffix, prefix and type standardized, street, " "streetname etc. broken into separate fields. This is the first step in the " "geocoding process to get all addresses into normalized postal form. No other " "data is required aside from what is packaged with the geocoder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:654 #, no-c-format msgid "" "This function just uses the various direction/state/suffix lookup tables " "preloaded with the tiger_geocoder and located in the tiger schema, so it doesn't need you to download tiger census data or any " "other additional data to make use of it. You may find the need to add more " "abbreviations or alternative namings to the various lookup tables in the " "tiger schema." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:656 #, no-c-format msgid "" "It uses various control lookup tables located in tiger " "schema to normalize the input address." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:657 #, no-c-format msgid "" "Fields in the norm_addy type object returned by this " "function in this order where () indicates a field required by the geocoder, " "[] indicates an optional field:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:658 #, no-c-format msgid "" "(address) [predirAbbrev] (streetName) [streetTypeAbbrev] [postdirAbbrev] " "[internal] [location] [stateAbbrev] [zip]" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:661 #, no-c-format msgid "address is an integer: The street number" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:664 #, no-c-format msgid "" "predirAbbrev is varchar: Directional prefix of road such " "as N, S, E, W etc. These are controlled using the direction_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:667 #, no-c-format msgid "streetName varchar" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:670 #, no-c-format msgid "" "streetTypeAbbrev varchar abbreviated version of street " "type: e.g. St, Ave, Cir. These are controlled using the " "street_type_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:673 #, no-c-format msgid "" "postdirAbbrev varchar abbreviated directional suffice of " "road N, S, E, W etc. These are controlled using the " "direction_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:676 #, no-c-format msgid "" "internal varchar internal address such as an apartment or " "suite number." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:679 #, no-c-format msgid "" "location varchar usually a city or governing province." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:682 #, no-c-format msgid "" "stateAbbrev varchar two character US State. e.g MA, NY, " "MI. These are controlled by the state_lookup table." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:685 #, no-c-format msgid "zip varchar 5-digit zipcode. e.g. 02109." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:688 #, no-c-format msgid "" "parsed boolean - denotes if addess was formed from " "normalize process. The normalize_address function sets this to true before " "returning the address." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:697 #, no-c-format msgid "" "Output select fields. Use if you want a " "pretty textual output." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:698 #, no-c-format msgid "" "SELECT address As orig, (g.na).streetname, (g.na).streettypeabbrev\n" " FROM (SELECT address, normalize_address(address) As na\n" " FROM addresses_to_geocode) As g;\n" " \n" " orig | streetname | " "streettypeabbrev \n" "-----------------------------------------------------+---------------" "+------------------\n" " 28 Capen Street, Medford, MA | Capen | St\n" " 124 Mount Auburn St, Cambridge, Massachusetts 02138 | Mount Auburn | St\n" " 950 Main Street, Worcester, MA 01610 | Main | St\n" " 529 Main Street, Boston MA, 02129 | Main | St\n" " 77 Massachusetts Avenue, Cambridge, MA 02139 | Massachusetts | Ave\n" " 25 Wizard of Oz, Walaford, KS 99912323 | Wizard of Oz |" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:707 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:713 #, no-c-format msgid "Pprint_Addy" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:715 #, no-c-format msgid "" "Given a norm_addy composite type object, returns a pretty " "print representation of it. Usually used in conjunction with " "normalize_address." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:720 #, no-c-format msgid "" "varchar pprint_addy " "norm_addy in_addy" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:730 #, no-c-format msgid "" "Given a norm_addy composite type object, returns a pretty " "print representation of it. No other data is required aside from what is " "packaged with the geocoder." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:731 #, no-c-format msgid "Usually used in conjunction with ." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:739 #, no-c-format msgid "Pretty print a single address" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:740 #, no-c-format msgid "" "SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, " "Nevada 89101')) As pretty_address;\n" " pretty_address\n" "---------------------------------------\n" " 202 E Fremont St, Las Vegas, NV 89101" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:742 #, no-c-format msgid "Pretty print address a table of addresses" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:743 #, no-c-format msgid "" "SELECT address As orig, pprint_addy(normalize_address(address)) As " "pretty_address\n" " FROM addresses_to_geocode;\n" " \n" " orig | " "pretty_address\n" "-----------------------------------------------------" "+-------------------------------------------\n" " 529 Main Street, Boston MA, 02129 | 529 Main St, Boston " "MA, 02129\n" " 77 Massachusetts Avenue, Cambridge, MA 02139 | 77 Massachusetts Ave, " "Cambridge, MA 02139\n" " 28 Capen Street, Medford, MA | 28 Capen St, Medford, " "MA\n" " 124 Mount Auburn St, Cambridge, Massachusetts 02138 | 124 Mount Auburn St, " "Cambridge, MA 02138\n" " 950 Main Street, Worcester, MA 01610 | 950 Main St, " "Worcester, MA 01610" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:756 #, no-c-format msgid "Reverse_Geocode" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:758 #, no-c-format msgid "" "Takes a geometry point in a known spatial ref sys and returns a record " "containing an array of theoretically possible addresses and an array of " "cross streets. If include_strnum_range = true, includes the street range in " "the cross streets." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:763 #, no-c-format msgid "" "record Reverse_Geocode " "geometry pt " "boolean " "include_strnum_range=false " "geometry[] OUT intpt norm_addy[] OUT addy varchar[] OUT " "street" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:777 #, no-c-format msgid "" "Takes a geometry point in a known spatial ref and returns a record " "containing an array of theoretically possible addresses and an array of " "cross streets. If include_strnum_range = true, includes the street range in " "the cross streets. include_strnum_range defaults to false if not passed in. " "Addresses are sorted according to which road a point is closest to so first " "address is most likely the right one." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:780 #, no-c-format msgid "" "Why do we say theoretical instead of actual addresses. The Tiger data " "doesn't have real addresses, but just street ranges. As such the theoretical " "address is an interpolated address based on the street ranges. Like for " "example interpolating one of my addresses returns a 26 Court St. and 26 " "Court Sq., though there is no such place as 26 Court Sq. This is because a " "point may be at a corner of 2 streets and thus the logic interpolates along " "both streets. The logic also assumes addresses are equally spaced along a " "street, which of course is wrong since you can have a municipal building " "taking up a good chunk of the street range and the rest of the buildings are " "clustered at the end." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:785 #, no-c-format msgid "" "Note: Hmm this function relies on Tiger data. If you have not loaded data " "covering the region of this point, then hmm you will get a record filled " "with NULLS." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:786 #, no-c-format msgid "Returned elements of the record are as follows:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:789 #, no-c-format msgid "" "intpt is an array of points: These are the center line " "points on the street closest to the input point. There are as many points as " "there are addresses." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:792 #, no-c-format msgid "" "addy is an array of norm_addy (normalized addresses): " "These are an array of possible addresses that fit the input point. The first " "one in the array is most likely. Generally there should be only one, except " "in the case when a point is at the corner of 2 or 3 streets, or the point is " "somewhere on the road and not off to the side." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:796 #, no-c-format msgid "" "street an array of varchar: These are cross streets (or " "the street) (streets that intersect or are the street the point is projected " "to be on)." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:807 #, no-c-format msgid "" "Example of a point at the corner of two streets, but closest to one. This is " "approximate location of MIT: 77 Massachusetts Ave, Cambridge, MA 02139 Note " "that although we don't have 3 streets, PostgreSQL will just return null for " "entries above our upper bound so safe to use. This includes street ranges" msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:809 #, no-c-format msgid "" "SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, " "pprint_addy(r.addy[3]) As st3, \n" " array_to_string(r.street, ',') As cross_streets \n" " FROM reverse_geocode(ST_GeomFromText('POINT(-71.093902 " "42.359446)',4269),true) As r;\n" " \n" " result\n" " ------\n" " st1 | st2 | st3 | " "cross_streets\n" "-------------------------------------------+-----+-----" "+----------------------------------------------\n" " 67 Massachusetts Ave, Cambridge, MA 02139 | | | 67 - 127 " "Massachusetts Ave,32 - 88 Vassar St" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:811 #, no-c-format msgid "" "Here we choose not to include the address ranges for the cross streets and " "picked a location really really close to a corner of 2 streets thus could be " "known by two different addresses." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:813 #, no-c-format msgid "" "SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, \n" "pprint_addy(r.addy[3]) As st3, array_to_string(r.street, ',') As cross_str\n" "FROM reverse_geocode(ST_GeomFromText('POINT(-71.06941 42.34225)',4269)) As " "r;\n" "\n" "result\n" "--------\n" " st1 | st2 | st3 | " "cross_str\n" "---------------------------------+---------------------------------+-----" "+------------------------\n" " 5 Bradford St, Boston, MA 02118 | 49 Waltham St, Boston, MA 02118 | | " "Waltham St" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:815 #, no-c-format msgid "" "For this one we reuse our geocoded example from " "and we only want the primary address and at most 2 cross streets." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:816 #, no-c-format msgid "" "SELECT actual_addr, lon, lat, pprint_addy((rg).addy[1]) As int_addr1, \n" " (rg).street[1] As cross1, (rg).street[2] As cross2\n" "FROM (SELECT address As actual_addr, lon, lat,\n" " reverse_geocode( ST_SetSRID(ST_Point(lon,lat),4326) ) As rg\n" " FROM addresses_to_geocode WHERE rating > -1) As foo;\n" "\n" " actual_addr | lon | lat " "| int_addr1 | cross1 | cross2 \n" "-----------------------------------------------------+-----------+----------" "+-------------------------------------------+-----------------+------------\n" " 529 Main Street, Boston MA, 02129 | -71.07181 | 42.38359 " "| 527 Main St, Boston, MA 02129 | Medford St | \n" " 77 Massachusetts Avenue, Cambridge, MA 02139 | -71.09428 | 42.35988 " "| 77 Massachusetts Ave, Cambridge, MA 02139 | Vassar St | \n" " 26 Capen Street, Medford, MA | -71.12377 | 42.41101 " "| 9 Edison Ave, Medford, MA 02155 | Capen St | Tesla Ave\n" " 124 Mount Auburn St, Cambridge, Massachusetts 02138 | -71.12304 | 42.37328 " "| 3 University Rd, Cambridge, MA 02138 | Mount Auburn St | \n" " 950 Main Street, Worcester, MA 01610 | -71.82368 | 42.24956 " "| 3 Maywood St, Worcester, MA 01603 | Main St | Maywood Pl" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:823 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:829 #, no-c-format msgid "Topology_Load_Tiger" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:831 #, no-c-format msgid "" "Loads a defined region of tiger data into a PostGIS Topology and " "transforming the tiger data to spatial reference of the topology and " "snapping to the precision tolerance of the topology." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:837 #, no-c-format msgid "" "text Topology_Load_Tiger " "varchar topo_name " "varchar region_type varchar region_id" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:849 #, no-c-format msgid "" "Loads a defined region of tiger data into a PostGIS Topology. The faces, " "nodes and edges are transformed to the spatial reference system of the " "target topology and points are snapped to the tolerance of the target " "topology. The created faces, nodes, edges maintain the same ids as the " "original Tiger data faces, nodes, edges so that datasets can be in the " "future be more easily reconciled with tiger data. Returns summary details " "about the process." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:852 #, no-c-format msgid "" "This would be useful for example for redistricting data where you require " "the newly formed polygons to follow the center lines of streets and for the " "resulting polygons not to overlap." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:854 #, no-c-format msgid "" "This function relies on Tiger data as well as the installation of the " "PostGIS topology module. For more information, refer to and . If you " "have not loaded data covering the region of interest, then no topology " "records will be created. This function will also fail if you have not " "created a topology using the topology functions." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:856 #, no-c-format msgid "" "Most topology validation errors are a result of tolerance issues where after " "transformation the edges points don't quite line up or overlap. To remedy " "the situation you may want to increase or lower the precision if you get " "topology validation failures." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:858 #, no-c-format msgid "Required arguments:" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:861 #, no-c-format msgid "" "topo_name The name of an existing PostGIS topology to " "load data into." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:864 #, no-c-format msgid "" "region_type The type of bounding region. Currently only " "place and county are supported. Plan " "is to have several more. This is the table to look into to define the region " "bounds. e.g tiger.place, tiger.county" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:867 #, no-c-format msgid "" "region_id This is what TIGER calls the geoid. It is the " "unique identifier of the region in the table. For place it is the " "plcidfp column in tiger.place. For " "county it is the cntyidfp column in tiger." "county" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:876 #, no-c-format msgid "Example: Boston, Massachusetts Topology" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:877 #, no-c-format msgid "" "Create a topology for Boston, Massachusetts in Mass State Plane Feet (2249) " "with tolerance 0.25 feet and then load in Boston city tiger faces, edges, " "nodes." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:879 #, no-c-format msgid "" "SELECT topology.CreateTopology('topo_boston', 2249, 0.25);\n" "createtopology\n" "--------------\n" " 15\n" "-- 60,902 ms ~ 1 minute on windows 7 desktop running 9.1 (with 5 states " "tiger data loaded) \n" "SELECT tiger.topology_load_tiger('topo_boston', 'place', '2507000'); \n" "-- topology_loader_tiger --\n" "29722 edges holding in temporary. 11108 faces added. 1875 edges of faces " "added. 20576 nodes added. \n" "19962 nodes contained in a face. 0 edge start end corrected. 31597 edges " "added. \n" " \n" "-- 41 ms --\n" "SELECT topology.TopologySummary('topo_boston');\n" " -- topologysummary--\n" "Topology topo_boston (15), SRID 2249, precision 0.25\n" "20576 nodes, 31597 edges, 11109 faces, 0 topogeoms in 0 layers\n" "\n" "-- 28,797 ms to validate yeh returned no errors --\n" "SELECT * FROM \n" " topology.ValidateTopology('topo_boston'); \n" " \n" " error | id1 | id2\n" "-------------------+----------+-----------" msgstr "" #. Tag: title #: extras_tigergeocoder.xml:883 #, no-c-format msgid "Example: Suffolk, Massachusetts Topology" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:884 #, no-c-format msgid "" "Create a topology for Suffolk, Massachusetts in Mass State Plane Meters " "(26986) with tolerance 0.25 meters and then load in Suffolk county tiger " "faces, edges, nodes." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:886 #, no-c-format msgid "" "SELECT topology.CreateTopology('topo_suffolk', 26986, 0.25);\n" "-- this took 56,275 ms ~ 1 minute on Windows 7 32-bit with 5 states of tiger " "loaded\n" "-- must have been warmed up after loading boston\n" "SELECT tiger.topology_load_tiger('topo_suffolk', 'county', '25025'); \n" "-- topology_loader_tiger --\n" " 36003 edges holding in temporary. 13518 faces added. 2172 edges of faces " "added. \n" " 24761 nodes added. 24075 nodes contained in a face. 0 edge start end " "corrected. 38175 edges added. \n" "-- 31 ms --\n" "SELECT topology.TopologySummary('topo_suffolk');\n" " -- topologysummary--\n" " Topology topo_suffolk (14), SRID 26986, precision 0.25\n" "24761 nodes, 38175 edges, 13519 faces, 0 topogeoms in 0 layers\n" "\n" "-- 33,606 ms to validate --\n" "SELECT * FROM \n" " topology.ValidateTopology('topo_suffolk'); \n" " \n" " error | id1 | id2\n" "-------------------+----------+-----------\n" " coincident nodes | 81045651 | 81064553\n" " edge crosses node | 81045651 | 85737793\n" " edge crosses node | 81045651 | 85742215\n" " edge crosses node | 81045651 | 620628939\n" " edge crosses node | 81064553 | 85697815\n" " edge crosses node | 81064553 | 85728168\n" " edge crosses node | 81064553 | 85733413" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:890 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: extras_tigergeocoder.xml:896 #, no-c-format msgid "Set_Geocode_Setting" msgstr "" #. Tag: refpurpose #: extras_tigergeocoder.xml:898 #, no-c-format msgid "Sets a setting that affects behavior of geocoder functions." msgstr "" #. Tag: funcprototype #: extras_tigergeocoder.xml:903 #, no-c-format msgid "" "text Set_Geocode_Setting " "text setting_name " "text setting_value" msgstr "" #. Tag: para #: extras_tigergeocoder.xml:914 #, no-c-format msgid "" "Sets value of specific setting stored in tiger.geocode_settings table. Settings allow you to toggle debugging of functions. Later " "plans will be to control rating with settings. Current list of settings are " "listed in ." msgstr "" #. Tag: para #: extras_tigergeocoder.xml:923 #, no-c-format msgid "" "If you run when this function is true, the " "NOTICE log will output timing and queries." msgstr "" #. Tag: programlisting #: extras_tigergeocoder.xml:924 #, no-c-format msgid "" "SELECT set_geocode_setting('debug_geocode_address', 'true') As result;\n" "result\n" "---------\n" "true" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/installation.xml.po0000644000000000000000000020045612035745657021636 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-12 07:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: installation.xml:3 installation.xml:231 installation.xml:640 #, no-c-format msgid "Installation" msgstr "" #. Tag: para #: installation.xml:5 #, no-c-format msgid "This chapter details the steps required to install PostGIS." msgstr "" #. Tag: title #: installation.xml:10 #, no-c-format msgid "Short Version" msgstr "" #. Tag: para #: installation.xml:11 #, no-c-format msgid "" "The raster support is currently optional, but installed by default. For " "installing using the PostgreSQL 9.1+ extensions model it is required. Please " "refer to if you are " "using PostgreSQL 9.1+." msgstr "" #. Tag: para #: installation.xml:13 #, no-c-format msgid "" "All the .sql files once installed will be installed in share/contrib/postgis-" "&last_release_version; folder of your PostgreSQL install" msgstr "" #. Tag: para #: installation.xml:15 #, no-c-format msgid "" "The postgis_comments.sql, raster_comments.sql, topology_comments.sql generate quick help tips " "for each function that can be accessed via pgAdmin III or psql. In psql with " "a command of the form e.g.\\dd ST_SetPoint" msgstr "" #. Tag: programlisting #: installation.xml:17 #, no-c-format msgid "" "tar xvfz postgis-&last_release_version;.tar.gz\n" "cd postgis-&last_release_version;\n" "./configure --with-raster --with-topology --with-gui\n" "make\n" "make install\n" "createdb yourdatabase\n" "createlang plpgsql yourdatabase\n" "psql -d yourdatabase -f postgis.sql\n" "psql -d yourdatabase -f postgis_comments.sql\n" "psql -d yourdatabase -f spatial_ref_sys.sql\n" "psql -d yourdatabase -f rtpostgis.sql\n" "psql -d yourdatabase -f raster_comments.sql\n" "psql -d yourdatabase -f topology/topology.sql\n" "psql -d yourdatabase -f doc/topology_comments.sql" msgstr "" #. Tag: para #: installation.xml:18 #, no-c-format msgid "" "topology_comments.sql since its an optional feature is " "not installed by make install or make comments-" "install. However if you do a make comments or " "make topology_comments.sql, it will be generated in the " "docs folder" msgstr "" #. Tag: para #: installation.xml:27 #, no-c-format msgid "" "The rest of this chapter goes into detail each of the above installation " "steps." msgstr "" #. Tag: title #: installation.xml:34 #, no-c-format msgid "Requirements" msgstr "" #. Tag: para #: installation.xml:36 #, no-c-format msgid "PostGIS has the following requirements for building and usage:" msgstr "" #. Tag: emphasis #: installation.xml:41 #, no-c-format msgid "Required" msgstr "" #. Tag: para #: installation.xml:46 #, no-c-format msgid "" "PostgreSQL &min_postgres_version; or higher. A complete installation of " "PostgreSQL (including server headers) is required. PostgreSQL is available " "from http://www.postgresql.org ." msgstr "" #. Tag: para #: installation.xml:55 #, no-c-format msgid "" "For a full PostgreSQL / PostGIS support matrix and PostGIS/GEOS support " "matrix refer to http://trac.osgeo.org/postgis/wiki/" "UsersWikiPostgreSQLPostGIS" msgstr "" #. Tag: para #: installation.xml:61 #, no-c-format msgid "" "GNU C compiler (gcc). Some other ANSI C compilers can " "be used to compile PostGIS, but we find far fewer problems when compiling " "with gcc." msgstr "" #. Tag: para #: installation.xml:69 #, no-c-format msgid "" "GNU Make (gmake or make). For many " "systems, GNU make is the default version of make. Check " "the version by invoking make -v. Other versions of " "make may not process the PostGIS Makefile properly." msgstr "" #. Tag: para #: installation.xml:79 #, no-c-format msgid "" "Proj4 reprojection library, version 4.6.0 or greater. The Proj4 library is " "used to provide coordinate reprojection support within PostGIS. Proj4 is " "available for download from " "http://trac.osgeo.org/proj/ ." msgstr "" #. Tag: para #: installation.xml:91 #, no-c-format msgid "" "GEOS geometry library, version 3.3 or greater, but GEOS 3.4+ is recommended " "to take full advantage of all the new functions and features. Without GEOS " "3.4, you will be missing some major enhancements such as ST_Triangles and " "long-running function interruption, and improvements to geometry validation " "and making geometries valid such as ST_ValidDetail and ST_MakeValid. GEOS " "3.3.2+ is also required for topology support. GEOS is available for download " "from http://trac.osgeo.org/geos/ " " and 3.4+ is backward-compatible with older versions so fairly safe " "to upgrade." msgstr "" #. Tag: para #: installation.xml:101 #, no-c-format msgid "" "LibXML2, version 2.5.x or higher. LibXML2 is currently used in some imports " "functions (ST_GeomFromGML and ST_GeomFromKML). LibXML2 is available for " "download from http://" "xmlsoft.org/downloads.html." msgstr "" #. Tag: para #: installation.xml:108 #, no-c-format msgid "" "JSON-C, version 0.9 or higher. JSON-C is currently used to import GeoJSON " "via the function ST_GeomFromGeoJson. JSON-C is available for download from " "http://oss.metaparadigm." "com/json-c/." msgstr "" #. Tag: para #: installation.xml:116 #, no-c-format msgid "" "GDAL, version 1.8 or higher (1.9 or higher is strongly recommended since " "some things will not work well or behavior differently with lower versions). " "This is required for raster support. http://trac.osgeo.org/gdal/wiki/DownloadSource." msgstr "" #. Tag: emphasis #: installation.xml:124 #, no-c-format msgid "Optional" msgstr "" #. Tag: para #: installation.xml:129 #, no-c-format msgid "" "GTK (requires GTK+2.0, 2.8+) to compile the shp2pgsql-gui shape file loader. " " http://www.gtk.org/ ." msgstr "" #. Tag: para #: installation.xml:139 #, no-c-format msgid "" "CUnit (CUnit). This is needed for regression testing. " "http://cunit.sourceforge.net/" msgstr "" #. Tag: para #: installation.xml:145 #, no-c-format msgid "" "Apache Ant (ant) is required for building any of the " "drivers under the java directory. Ant is available from " " http://ant.apache.org ." msgstr "" #. Tag: para #: installation.xml:157 #, no-c-format msgid "" "DocBook (xsltproc) is required for building the " "documentation. Docbook is available from http://www.docbook.org/ ." msgstr "" #. Tag: para #: installation.xml:168 #, no-c-format msgid "" "DBLatex (dblatex) is required for building the " "documentation in PDF format. DBLatex is available from http://dblatex.sourceforge.net/ ." msgstr "" #. Tag: para #: installation.xml:179 #, no-c-format msgid "" "ImageMagick (convert) is required to generate the " "images used in the documentation. ImageMagick is available from http://www.imagemagick.org/ ." msgstr "" #. Tag: title #: installation.xml:192 #, no-c-format msgid "Getting the Source" msgstr "" #. Tag: para #: installation.xml:194 #, no-c-format msgid "" "Retrieve the PostGIS source archive from the downloads website " "http://www.postgis.org/download/postgis-&last_release_version;.tar.gz " msgstr "" #. Tag: programlisting #: installation.xml:201 #, no-c-format msgid "" "wget http://www.postgis.org/download/postgis-&last_release_version;.tar.gz\n" "tar -xvzf postgis-&last_release_version;.tar.gz" msgstr "" #. Tag: para #: installation.xml:203 #, no-c-format msgid "" "This will create a directory called postgis-&last_release_version; in the current working directory." msgstr "" #. Tag: para #: installation.xml:209 #, no-c-format msgid "" "Alternatively, checkout the source from the svn repository http://svn.osgeo.org/postgis/trunk/ ." msgstr "" #. Tag: programlisting #: installation.xml:221 #, no-c-format msgid "" "svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-" "&last_release_version;" msgstr "" #. Tag: para #: installation.xml:223 #, no-c-format msgid "" "Change into the newly created postgis-&last_release_version; directory to continue the installation." msgstr "" #. Tag: para #: installation.xml:234 #, no-c-format msgid "" "Many OS systems now include pre-built packages for PostgreSQL/PostGIS. In " "many cases compilation is only necessary if you want the most bleeding edge " "versions or you are a package maintainer." msgstr "" #. Tag: para #: installation.xml:239 #, no-c-format msgid "" "This section includes general compilation instructions, if you are compiling " "for Windows etc or another OS, you may find additional more detailed help at " "PostGIS " "User contributed compile guides and PostGIS Dev Wiki." msgstr "" #. Tag: para #: installation.xml:241 #, no-c-format msgid "" "Pre-Built Packages for various OS are listed in PostGIS Pre-built Packages" msgstr "" #. Tag: para #: installation.xml:242 #, no-c-format msgid "" "If you are a windows user, you can get stable builds via Stackbuilder or " "PostGIS Windows " "download site We also have very bleeding-edge windows experimental " "builds that are built usually once or twice a week or whenever " "anything exciting happens. You can use these to experiment with the in " "progress releases of PostGIS" msgstr "" #. Tag: para #: installation.xml:247 #, no-c-format msgid "" "The PostGIS module is an extension to the PostgreSQL backend server. As " "such, PostGIS &last_release_version; requires full " "PostgreSQL server headers access in order to compile. It can be built " "against PostgreSQL versions &min_postgres_version; or higher. Earlier " "versions of PostgreSQL are not supported." msgstr "" #. Tag: para #: installation.xml:255 #, no-c-format msgid "" "Refer to the PostgreSQL installation guides if you haven't already installed " "PostgreSQL. http://www.postgresql." "org ." msgstr "" #. Tag: para #: installation.xml:265 #, no-c-format msgid "" "For GEOS functionality, when you install PostgresSQL you may need to " "explicitly link PostgreSQL against the standard C++ library:" msgstr "" #. Tag: programlisting #: installation.xml:270 #, no-c-format msgid "LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE]" msgstr "" #. Tag: para #: installation.xml:272 #, no-c-format msgid "" "This is a workaround for bogus C++ exceptions interaction with older " "development tools. If you experience weird problems (backend unexpectedly " "closed or similar things) try this trick. This will require recompiling your " "PostgreSQL from scratch, of course." msgstr "" #. Tag: para #: installation.xml:280 #, no-c-format msgid "" "The following steps outline the configuration and compilation of the PostGIS " "source. They are written for Linux users and will not work on Windows or Mac." msgstr "" #. Tag: title #: installation.xml:287 #, no-c-format msgid "Configuration" msgstr "" #. Tag: para #: installation.xml:289 #, no-c-format msgid "" "As with most linux installations, the first step is to generate the Makefile " "that will be used to build the source code. This is done by running the " "shell script" msgstr "" #. Tag: para #: installation.xml:299 #, no-c-format msgid "" "With no additional parameters, this command will attempt to automatically " "locate the required components and libraries needed to build the PostGIS " "source code on your system. Although this is the most common usage of " "./configure, the script accepts several parameters for " "those who have the required libraries and programs in non-standard locations." msgstr "" #. Tag: para #: installation.xml:308 #, no-c-format msgid "" "The following list shows only the most commonly used parameters. For a " "complete list, use the --help or --help=short parameters." msgstr "" #. Tag: para #: installation.xml:318 #, no-c-format msgid "" "This is the location the PostGIS libraries and SQL scripts will be installed " "to. By default, this location is the same as the detected PostgreSQL " "installation." msgstr "" #. Tag: para #: installation.xml:325 #, no-c-format msgid "" "This parameter is currently broken, as the package will only install into " "the PostgreSQL installation directory. Visit http://trac.osgeo.org/postgis/ticket/635 " "to track this bug." msgstr "" #. Tag: para #: installation.xml:340 #, no-c-format msgid "" "PostgreSQL provides a utility called pg_config to enable " "extensions like PostGIS to locate the PostgreSQL installation directory. Use " "this parameter (--with-pgconfig=/path/to/pg_config) to " "manually specify a particular PostgreSQL installation that PostGIS will " "build against." msgstr "" #. Tag: para #: installation.xml:354 #, no-c-format msgid "" "GDAL, a required library, provides functionality needed for raster support " "gdal-config to enable software installations to locate " "the GDAL installation directory. Use this parameter (--with-" "gdalconfig=/path/to/gdal-config) to manually specify a particular " "GDAL installation that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:368 #, no-c-format msgid "" "GEOS, a required geometry library, provides a utility called geos-" "config to enable software installations to locate the GEOS " "installation directory. Use this parameter (--with-geosconfig=/path/" "to/geos-config) to manually specify a particular GEOS installation " "that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:382 #, no-c-format msgid "" "LibXML is the library required for doing GeomFromKML/GML processes. It " "normally is found if you have libxml installed, but if not or you want a " "specific version used, you'll need to point PostGIS at a specific " "xml2-config confi file to enable software installations " "to locate the LibXML installation directory. Use this parameter (>--" "with-xml2config=/path/to/xml2-config) to manually specify a " "particular LibXML installation that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:400 #, no-c-format msgid "" "Proj4 is a reprojection library required by PostGIS. Use this parameter " "(--with-projdir=/path/to/projdir) to manually specify a " "particular Proj4 installation directory that PostGIS will build against." msgstr "" #. Tag: para #: installation.xml:412 #, no-c-format msgid "Directory where iconv is installed." msgstr "" #. Tag: para #: installation.xml:421 #, no-c-format msgid "" "JSON-C is an MIT-" "licensed JSON library required by PostGIS ST_GeomFromJSON support. Use this " "parameter (--with-jsondir=/path/to/jsondir) to manually " "specify a particular JSON-C installation directory that PostGIS will build " "against." msgstr "" #. Tag: para #: installation.xml:433 #, no-c-format msgid "" "Compile the data import GUI (requires GTK+2.0). This will create shp2pgsql-" "gui graphical interface to shp2pgsql." msgstr "" #. Tag: para #: installation.xml:442 #, no-c-format msgid "" "Compile with raster support. This will build rtpostgis-" "&last_release_version; library and rtpostgis.sql file. This may not be " "required in final release as plan is to build in raster support by default." msgstr "" #. Tag: para #: installation.xml:451 #, no-c-format msgid "" "Compile with topology support. This will build the topology.sql file. There " "is no corresponding library as all logic needed for topology is in postgis-" "&last_release_version; library." msgstr "" #. Tag: para #: installation.xml:460 #, no-c-format msgid "" "By default PostGIS will try to detect gettext support and compile with it, " "however if you run into incompatibility issues that cause breakage of " "loader, you can disable it entirely with this command. Refer to ticket " "http://trac.osgeo." "org/postgis/ticket/748 for an example issue solved by configuring " "with this. NOTE: that you aren't missing much by turning this off. This is " "used for international help/label support for the GUI loader which is not " "yet documented and still experimental." msgstr "" #. Tag: para #: installation.xml:470 #, no-c-format msgid "" "If you obtained PostGIS from the SVN repository , the first step is really to run the " "script" msgstr "" #. Tag: para #: installation.xml:482 #, no-c-format msgid "" "This script will generate the configure script that in " "turn is used to customize the installation of PostGIS." msgstr "" #. Tag: para #: installation.xml:487 #, no-c-format msgid "" "If you instead obtained PostGIS as a tarball, running ./autogen.sh is not necessary as configure has already been " "generated." msgstr "" #. Tag: title #: installation.xml:496 #, no-c-format msgid "Building" msgstr "" #. Tag: para #: installation.xml:498 #, no-c-format msgid "" "Once the Makefile has been generated, building PostGIS is as simple as " "running" msgstr "" #. Tag: para #: installation.xml:507 #, no-c-format msgid "" "The last line of the output should be \"PostGIS was built " "successfully. Ready to install.\"" msgstr "" #. Tag: para #: installation.xml:512 #, no-c-format msgid "" "As of PostGIS v1.4.0, all the functions have comments generated from the " "documentation. If you wish to install these comments into your spatial " "databases later, run the command which requires docbook. The " "postgis_comments.sql and other package comments files raster_comments.sql, " "topology_comments.sql are also packaged in the tar.gz distribution in the " "doc folder so no need to make comments if installing from the tar ball." msgstr "" #. Tag: command #: installation.xml:522 installation.xml:544 #, no-c-format msgid "make comments" msgstr "" #. Tag: para #: installation.xml:525 #, no-c-format msgid "" "Introduced in PostGIS 2.0. This generates html cheat sheets suitable for " "quick reference or for student handouts. This requires xsltproc to build and " "will generate 4 files in doc folder topology_cheatsheet.html, tiger_geocoder_cheatsheet.html, " "raster_cheatsheet.html, postgis_cheatsheet." "html" msgstr "" #. Tag: para #: installation.xml:530 #, no-c-format msgid "" "You can download some pre-built ones available in html and pdf from PostGIS / PostgreSQL Study " "Guides" msgstr "" #. Tag: command #: installation.xml:533 #, no-c-format msgid "make cheatsheets" msgstr "" #. Tag: title #: installation.xml:538 #, no-c-format msgid "Building PostGIS Extensions and Deploying them" msgstr "" #. Tag: para #: installation.xml:540 #, no-c-format msgid "" "The PostGIS extensions are built and installed automatically if you are " "using PostgreSQL 9.1+." msgstr "" #. Tag: para #: installation.xml:543 #, no-c-format msgid "" "If you are building from source repository, you need to build the function " "descriptions first. These get built if you have docbook installed. You can " "also manually build with the statement:" msgstr "" #. Tag: para #: installation.xml:545 #, no-c-format msgid "" "Building the comments is not necessary if you are building from a release " "tar ball since these are packaged pre-built with the tar ball already." msgstr "" #. Tag: para #: installation.xml:546 #, no-c-format msgid "" "If you are building against PostgreSQL 9.1, the extensions should " "automatically build as part of the make install process. You can if needed " "build from the extensions folders or copy files if you need them on a " "different server." msgstr "" #. Tag: programlisting #: installation.xml:548 #, no-c-format msgid "" "cd extensions\n" "cd postgis\n" "make clean\n" "make \n" "make install\n" "cd ..\n" "cd postgis_topology\n" "make clean\n" "make \n" "make install" msgstr "" #. Tag: para #: installation.xml:549 #, no-c-format msgid "" "The extension files will always be the same for the same version of PostGIS " "regardless of OS, so it is fine to copy over the extension files from one OS " "to another as long as you have the PostGIS binaries already installed on " "your servers." msgstr "" #. Tag: para #: installation.xml:551 #, no-c-format msgid "" "If you want to install the extensions manually on a separate server " "different from your development, You need to copy the following files from " "the extensions folder into the PostgreSQL / share / extension folder of your PostgreSQL install as well as the needed binaries " "for regular PostGIS if you don't have them already on the server." msgstr "" #. Tag: para #: installation.xml:558 #, no-c-format msgid "" "These are the control files that denote information such as the version of " "the extension to install if not specified. postgis.control, " "postgis_topology.control." msgstr "" #. Tag: para #: installation.xml:564 #, no-c-format msgid "" "All the files in the /sql folder of each extension. Note that these need to " "be copied to the root of the PostgreSQL share/extension folder " "extensions/postgis/sql/*.sql, extensions/" "postgis_topology/sql/*.sql" msgstr "" #. Tag: para #: installation.xml:570 #, no-c-format msgid "" "Once you do that, you should see postgis, " "postgis_topology as available extensions in PgAdmin -> " "extensions." msgstr "" #. Tag: para #: installation.xml:571 #, no-c-format msgid "" "If you are using psql, you can verify that the extensions are installed by " "running this query:" msgstr "" #. Tag: programlisting #: installation.xml:572 #, no-c-format msgid "" "SELECT name, default_version,installed_version \n" "FROM pg_available_extensions WHERE name LIKE 'postgis%' ;\n" " name | default_version | installed_version\n" "-----------------+-----------------+-------------------\n" "postgis | &last_release_version; | &last_release_version;\n" "postgis_topology | &last_release_version; |" msgstr "" #. Tag: para #: installation.xml:574 #, no-c-format msgid "" "If you have the extension installed in the database you are querying, you'll " "see mention in the installed_version column. If you get " "no records back, it means you don't have postgis extensions installed on the " "server at all. PgAdmin III 1.14+ will also provide this information in the " "extensions section of the database browser tree and will " "even allow upgrade or uninstall by right-clicking." msgstr "" #. Tag: para #: installation.xml:578 #, no-c-format msgid "" "If you have the extensions available, you can install postgis extension in " "your database of choice by either using pgAdmin extension interface or " "running these sql commands:" msgstr "" #. Tag: programlisting #: installation.xml:579 #, no-c-format msgid "" "CREATE EXTENSION postgis;\n" "CREATE EXTENSION postgis_topology;" msgstr "" #. Tag: para #: installation.xml:581 #, no-c-format msgid "" "Extension tables spatial_ref_sys, layer, topology can not be explicitly backed up. They " "can only be backed up when the respective postgis or " "postgis_topology extension is backed up, which only seems " "to happen when you backup the whole database. As of PostGIS 2.0.1, only srid " "records not packaged with PostGIS are backed up when the database is backed " "up so don't go around changing srids we package and expect your changes to " "be there. Put in a ticket if you find an issue. The structures of extension " "tables are never backed up since they are created with CREATE " "EXTENSION and assumed to be the same for a given version of an " "extension. These behaviors are built into the current PostgreSQL extension " "model, so nothing we can do about it." msgstr "" #. Tag: para #: installation.xml:586 #, no-c-format msgid "" "If you installed &last_release_version;, without using our wonderful " "extension system, you can change it to be extension based by first upgrading " "to the latest micro version running the upgrade scripts: " "postgis_upgrade_20_minor.sql," "raster_upgrade_20_minor.sql," "topology_upgrade_20_minor.sql." msgstr "" #. Tag: para #: installation.xml:587 #, no-c-format msgid "" "If you installed postgis without raster support, you'll need to install " "raster support first (using the full rtpostgis.sql" msgstr "" #. Tag: para #: installation.xml:588 #, no-c-format msgid "" "Then you can run the below commands to package the functions in their " "respective extension." msgstr "" #. Tag: programlisting #: installation.xml:589 #, no-c-format msgid "" "CREATE EXTENSION postgis FROM unpackaged;\n" "CREATE EXTENSION postgis_topology FROM unpackaged;" msgstr "" #. Tag: title #: installation.xml:595 #, no-c-format msgid "Testing" msgstr "" #. Tag: para #: installation.xml:597 #, no-c-format msgid "If you wish to test the PostGIS build, run" msgstr "" #. Tag: command #: installation.xml:602 #, no-c-format msgid "make check" msgstr "" #. Tag: para #: installation.xml:605 #, no-c-format msgid "" "The above command will run through various checks and regression tests using " "the generated library against an actual PostgreSQL database." msgstr "" #. Tag: para #: installation.xml:611 #, no-c-format msgid "" "If you configured PostGIS using non-standard PostgreSQL, GEOS, or Proj4 " "locations, you may need to add their library locations to the " "LD_LIBRARY_PATH environment variable." msgstr "" #. Tag: para #: installation.xml:619 #, no-c-format msgid "" "Currently, the make check relies on the PATH " "and PGPORT environment variables when performing the checks - " "it does not use the PostgreSQL version that may have " "been specified using the configuration parameter --with-pgconfig. So make sure to modify your PATH to match the detected PostgreSQL " "installation during configuration or be prepared to deal with the impending " "headaches." msgstr "" #. Tag: para #: installation.xml:631 #, no-c-format msgid "" "If successful, the output of the test should be similar to the following:" msgstr "" #. Tag: programlisting #: installation.xml:636 #, no-c-format msgid "" "CUnit - A Unit testing framework for C - Version 2.1-0\n" " http://cunit.sourceforge.net/\n" "\n" "\n" "Suite: print_suite\n" " Test: test_lwprint_default_format ... passed\n" " Test: test_lwprint_format_orders ... passed\n" " Test: test_lwprint_optional_format ... passed\n" " Test: test_lwprint_oddball_formats ... passed\n" " Test: test_lwprint_bad_formats ... passed\n" "Suite: Misc Suite\n" " Test: test_misc_force_2d ... passed\n" " Test: test_misc_simplify ... passed\n" " Test: test_misc_count_vertices ... passed\n" " Test: test_misc_area ... passed\n" " Test: test_misc_wkb ... passed\n" "Suite: PointArray Suite\n" " Test: test_ptarray_append_point ... passed\n" " Test: test_ptarray_append_ptarray ... passed\n" "Suite: PostGIS Computational Geometry Suite\n" " Test: test_lw_segment_side ... passed\n" " Test: test_lw_segment_intersects ... passed\n" " Test: test_lwline_crossing_short_lines ... passed\n" " Test: test_lwline_crossing_long_lines ... passed\n" " Test: test_lwline_crossing_bugs ... passed\n" " Test: test_lwpoint_set_ordinate ... passed\n" " Test: test_lwpoint_get_ordinate ... passed\n" " Test: test_point_interpolate ... passed\n" " Test: test_lwline_clip ... passed\n" " Test: test_lwline_clip_big ... passed\n" " Test: test_lwmline_clip ... passed\n" " Test: test_geohash_point ... passed\n" " Test: test_geohash_precision ... passed\n" " Test: test_geohash ... passed\n" " Test: test_isclosed ... passed\n" "Suite: PostGIS Measures Suite\n" " Test: test_mindistance2d_tolerance ... passed\n" " Test: test_rect_tree_contains_point ... passed\n" " Test: test_rect_tree_intersects_tree ... passed\n" " Test: test_lwgeom_segmentize2d ... passed\n" "Suite: WKT Out Suite\n" " Test: test_wkt_out_point ... passed\n" " Test: test_wkt_out_linestring ... passed\n" " Test: test_wkt_out_polygon ... passed\n" " Test: test_wkt_out_multipoint ... passed\n" " Test: test_wkt_out_multilinestring ... passed\n" ":\n" ":\n" "--Run Summary: Type Total Ran Passed Failed\n" " suites 17 17 n/a 0\n" " tests 143 143 143 0\n" " asserts 1228 1228 1228 0\n" "\n" "\n" "Creating spatial db postgis_reg\n" " Postgis 2.0.0SVN - 2011-01-11 15:33:37\n" " GEOS: 3.3.0-CAPI-1.7.0\n" " PROJ: Rel. 4.6.1, 21 August 2008\n" "\n" "Running tests\n" "\n" " loader/Point.............. ok\n" " loader/PointM.............. ok\n" " loader/PointZ.............. ok\n" " loader/MultiPoint.............. ok\n" " loader/MultiPointM.............. ok\n" " loader/MultiPointZ.............. ok\n" " loader/Arc.............. ok\n" " loader/ArcM.............. ok\n" " loader/ArcZ.......... ok\n" " loader/Polygon.............. ok\n" " loader/PolygonM.............. ok\n" " loader/PolygonZ.............. ok\n" " regress. ok\n" " regress_index. ok\n" " regress_index_nulls. ok\n" " lwgeom_regress. ok\n" " regress_lrs. ok\n" " removepoint. ok\n" " setpoint. ok\n" " simplify. ok\n" " snaptogrid. ok\n" " affine. ok\n" " measures. ok\n" " long_xact. ok\n" " ctors. ok\n" " sql-mm-serialize. ok\n" " sql-mm-circularstring. ok\n" " sql-mm-compoundcurve. ok\n" " sql-mm-curvepoly. ok\n" " sql-mm-general. ok\n" " sql-mm-multicurve. ok\n" " sql-mm-multisurface. ok\n" " polyhedralsurface. ok\n" " out_geometry. ok\n" " out_geography. ok\n" " in_gml. ok\n" " in_kml. ok\n" " iscollection. ok\n" " regress_ogc. ok\n" " regress_ogc_cover. ok\n" " regress_ogc_prep. ok\n" " regress_bdpoly. ok\n" " regress_proj. ok\n" " dump. ok\n" " dumppoints. ok\n" " wmsservers_new. ok\n" " tickets. ok\n" " remove_repeated_points. ok\n" " split. ok\n" " relatematch. ok\n" " regress_buffer_params. ok\n" " hausdorff. ok\n" " clean. ok\n" " sharedpaths. ok\n" " snap. ok\n" "\n" "Run tests: 55\n" "Failed: 0" msgstr "" #. Tag: para #: installation.xml:642 #, no-c-format msgid "To install PostGIS, type" msgstr "" #. Tag: command #: installation.xml:647 #, no-c-format msgid "make install" msgstr "" #. Tag: para #: installation.xml:650 #, no-c-format msgid "" "This will copy the PostGIS installation files into their appropriate " "subdirectory specified by the --prefix configuration " "parameter. In particular:" msgstr "" #. Tag: para #: installation.xml:658 #, no-c-format msgid "" "The loader and dumper binaries are installed in [prefix]/bin." msgstr "" #. Tag: para #: installation.xml:665 #, no-c-format msgid "" "The SQL files, such as postgis.sql, are installed in " "[prefix]/share/contrib." msgstr "" #. Tag: para #: installation.xml:672 #, no-c-format msgid "" "The PostGIS libraries are installed in [prefix]/lib." msgstr "" #. Tag: para #: installation.xml:679 #, no-c-format msgid "" "If you previously ran the make comments command to " "generate the postgis_comments.sql, " "raster_comments.sql file, install the sql file by " "running" msgstr "" #. Tag: command #: installation.xml:686 #, no-c-format msgid "make comments-install" msgstr "" #. Tag: para #: installation.xml:690 #, no-c-format msgid "" "postgis_comments.sql, raster_comments.sql, topology_comments.sql was separated from the " "typical build and installation targets since with it comes the extra " "dependency of xsltproc." msgstr "" #. Tag: title #: installation.xml:700 #, no-c-format msgid "Create a spatially-enabled database on PostgreSQL lower than 9.1" msgstr "" #. Tag: para #: installation.xml:702 #, no-c-format msgid "" "The first step in creating a PostGIS database is to create a simple " "PostgreSQL database." msgstr "" #. Tag: command #: installation.xml:708 installation.xml:805 #, no-c-format msgid "createdb [yourdatabase]" msgstr "" #. Tag: para #: installation.xml:711 #, no-c-format msgid "" "Many of the PostGIS functions are written in the PL/pgSQL procedural " "language. As such, the next step to create a PostGIS database is to enable " "the PL/pgSQL language in your new database. This is accomplish by the " "command below command. For PostgreSQL 8.4+, this is generally already " "installed" msgstr "" #. Tag: command #: installation.xml:719 #, no-c-format msgid "createlang plpgsql [yourdatabase]" msgstr "" #. Tag: para #: installation.xml:722 #, no-c-format msgid "" "Now load the PostGIS object and function definitions into your database by " "loading the postgis.sql definitions file (located in " "[prefix]/share/contrib as specified during the " "configuration step)." msgstr "" #. Tag: command #: installation.xml:730 #, no-c-format msgid "psql -d [yourdatabase] -f postgis.sql" msgstr "" #. Tag: para #: installation.xml:733 #, no-c-format msgid "" "For a complete set of EPSG coordinate system definition identifiers, you can " "also load the spatial_ref_sys.sql definitions file and " "populate the spatial_ref_sys table. This will permit you " "to perform ST_Transform() operations on geometries." msgstr "" #. Tag: command #: installation.xml:741 #, no-c-format msgid "psql -d [yourdatabase] -f spatial_ref_sys.sql" msgstr "" #. Tag: para #: installation.xml:744 #, no-c-format msgid "" "If you wish to add comments to the PostGIS functions, the final step is to " "load the postgis_comments.sql into your spatial " "database. The comments can be viewed by simply typing \\dd " "[function_name] from a psql terminal window." msgstr "" #. Tag: command #: installation.xml:752 #, no-c-format msgid "psql -d [yourdatabase] -f postgis_comments.sql" msgstr "" #. Tag: para #: installation.xml:755 #, no-c-format msgid "Install raster support" msgstr "" #. Tag: command #: installation.xml:760 #, no-c-format msgid "psql -d [yourdatabase] -f rtpostgis.sql" msgstr "" #. Tag: para #: installation.xml:763 #, no-c-format msgid "" "Install raster support comments. This will provide quick help info for each " "raster function using psql or PgAdmin or any other PostgreSQL tool that can " "show function comments" msgstr "" #. Tag: command #: installation.xml:769 #, no-c-format msgid "psql -d [yourdatabase] -f raster_comments.sql" msgstr "" #. Tag: para #: installation.xml:771 #, no-c-format msgid "Install topology support" msgstr "" #. Tag: command #: installation.xml:776 #, no-c-format msgid "psql -d [yourdatabase] -f topology/topology.sql" msgstr "" #. Tag: para #: installation.xml:779 #, no-c-format msgid "" "Install topology support comments. This will provide quick help info for " "each topology function / type using psql or PgAdmin or any other PostgreSQL " "tool that can show function comments" msgstr "" #. Tag: command #: installation.xml:785 #, no-c-format msgid "psql -d [yourdatabase] -f topology/topology_comments.sql" msgstr "" #. Tag: para #: installation.xml:788 installation.xml:825 #, no-c-format msgid "" "If you plan to restore an old backup from prior versions in this new db, run:" msgstr "" #. Tag: command #: installation.xml:789 installation.xml:826 #, no-c-format msgid "psql -d [yourdatabase] -f legacy.sql" msgstr "" #. Tag: para #: installation.xml:790 #, no-c-format msgid "" "There is an alternative legacy_minimal.sql you can run " "instead which will install barebones needed to recover tables and work with " "apps like MapServer and GeoServer. If you have views that use things like " "distance / length etc, you'll need the full blown legacy.sql" msgstr "" #. Tag: para #: installation.xml:793 installation.xml:828 #, no-c-format msgid "" "You can later run uninstall_legacy.sql to get rid of " "the deprecated functions after you are done with restoring and cleanup." msgstr "" #. Tag: title #: installation.xml:797 #, no-c-format msgid "Creating a spatial database using EXTENSIONS" msgstr "" #. Tag: para #: installation.xml:799 #, no-c-format msgid "" "If you are using PostgreSQL 9.1+ and have compiled and installed the " "extensions/ postgis modules, you can create a spatial database the new way." msgstr "" #. Tag: para #: installation.xml:808 #, no-c-format msgid "" "The core postgis extension installs PostGIS geometry, geography, raster, " "spatial_ref_sys and all the functions and comments with a simple: " "CREATE EXTENSION postgis; command." msgstr "" #. Tag: command #: installation.xml:814 #, no-c-format msgid "psql -d [yourdatabase] -c \"CREATE EXTENSION postgis;\"" msgstr "" #. Tag: para #: installation.xml:817 #, no-c-format msgid "" "Topology is packaged as a separate extension and installable with command:" msgstr "" #. Tag: command #: installation.xml:822 #, no-c-format msgid "psql -d [yourdatabase] -c \"CREATE EXTENSION postgis_topology;\"" msgstr "" #. Tag: title #: installation.xml:832 #, no-c-format msgid "Installing, Upgrading Tiger Geocoder and loading data" msgstr "" #. Tag: para #: installation.xml:834 #, no-c-format msgid "" "The Tiger geocoder does not get installed / upgraded with the core PostGIS " "scripts because it is only of regional use. In fact nothing located in the " "extras folder is installed by default with the regular PostGIS install / " "upgrade. Extras like Tiger geocoder may also not be packaged in your PostGIS " "distribution, but will always be available in the postgis-" "&last_release_version;.tar.gz file. The instructions provided here are also " "available in the extras/tiger_geocoder/tiger_2010/README" msgstr "" #. Tag: para #: installation.xml:836 #, no-c-format msgid "" "If you are on Windows and you don't have tar installed, you can use http://www.7-zip.org/ to unzip the " "PostGIS tarball." msgstr "" #. Tag: title #: installation.xml:838 #, no-c-format msgid "Tiger Geocoder Enabling your PostGIS database" msgstr "" #. Tag: para #: installation.xml:839 #, no-c-format msgid "First install PostGIS using the prior instructions." msgstr "" #. Tag: para #: installation.xml:843 installation.xml:870 #, no-c-format msgid "" "If you don't have an extras folder, download http://www.postgis.org/" "download/postgis-&last_release_version;.tar.gz" msgstr "" #. Tag: command #: installation.xml:848 installation.xml:875 #, no-c-format msgid "tar xvfz postgis-&last_release_version;.tar.gz" msgstr "" #. Tag: command #: installation.xml:852 installation.xml:879 #, no-c-format msgid "cd postgis-&last_release_version;/extras/tiger_geocoder/tiger_2011" msgstr "" #. Tag: para #: installation.xml:855 #, no-c-format msgid "" "Edit the tiger_loader.sql to the paths of your " "executables server etc." msgstr "" #. Tag: para #: installation.xml:856 #, no-c-format msgid "" "If you are installing Tiger geocoder for the first time edit either the " "create_geocode.bat script If you are on windows or the " "create_geocode.sh if you are on Linux/Unix/Mac OSX with " "your PostgreSQL specific settings and run the corresponding script from the " "commandline. If you don't edit this file, it will just contain common case " "locations of items. You can edit the generated script after the fact when " "you run the command." msgstr "" #. Tag: para #: installation.xml:859 #, no-c-format msgid "" "Verify that you now have a tiger schema in your database " "and that it is part of your database search_path. If it is not, add it with " "a command something along the line of:" msgstr "" #. Tag: programlisting #: installation.xml:859 #, no-c-format msgid "ALTER DATABASE geocoder SET search_path=public, tiger;" msgstr "" #. Tag: para #: installation.xml:860 #, no-c-format msgid "" "The normalizing address functionality works more or less without any data " "except for tricky addresses. Run this test and verify things look like this:" msgstr "" #. Tag: programlisting #: installation.xml:861 #, no-c-format msgid "" "SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, " "Nevada 89101')) As pretty_address;\n" "pretty_address\n" "---------------------------------------\n" "202 E Fremont St, Las Vegas, NV 89101" msgstr "" #. Tag: title #: installation.xml:865 #, no-c-format msgid "Upgrading your Tiger Geocoder Install" msgstr "" #. Tag: para #: installation.xml:866 #, no-c-format msgid "" "If you have Tiger Geocoder packaged with 2.0+ already installed, you can " "upgrade the functions at any time even from an interim tar ball if there are " "fixes you badly need." msgstr "" #. Tag: para #: installation.xml:882 #, no-c-format msgid "" "Locate the upgrade_geocoder.bat script If you are on " "windows or the upgrade_geocoder.sh if you are on Linux/" "Unix/Mac OSX. Edit the file to have your postgis database credientials and " "run then corresponding script from the commandline." msgstr "" #. Tag: para #: installation.xml:885 #, no-c-format msgid "" "Next drop all nation tables and load up the new ones. Generate a drop script " "with this SQL statement as detailed in " msgstr "" #. Tag: programlisting #: installation.xml:886 #, no-c-format msgid "SELECT drop_nation_tables_generate_script();" msgstr "" #. Tag: para #: installation.xml:887 #, no-c-format msgid "Run the generated drop SQL statements." msgstr "" #. Tag: para #: installation.xml:888 #, no-c-format msgid "" "Generate a nation load script with this SELECT statement as detailed in " "" msgstr "" #. Tag: emphasis #: installation.xml:889 #, no-c-format msgid "For windows" msgstr "" #. Tag: programlisting #: installation.xml:890 #, no-c-format msgid "SELECT loader_generate_nation_script('windows');" msgstr "" #. Tag: emphasis #: installation.xml:891 #, no-c-format msgid "For unix/linux" msgstr "" #. Tag: programlisting #: installation.xml:892 #, no-c-format msgid "SELECT loader_generate_nation_script('sh');" msgstr "" #. Tag: para #: installation.xml:893 #, no-c-format msgid "" "Refer to for instructions on " "how to run the generate script. This only needs to be done once." msgstr "" #. Tag: para #: installation.xml:894 #, no-c-format msgid "" "You can have a mix of 2010/2011 state tables and can upgrade each state " "separately. Before you upgrade a state to 2011, you first need to drop the " "2010 tables for that state using ." msgstr "" #. Tag: title #: installation.xml:897 #, no-c-format msgid "Loading Tiger Data" msgstr "" #. Tag: para #: installation.xml:898 #, no-c-format msgid "" "The instructions for loading data are available in a more detailed form in " "the extras/tiger_geocoder/tiger_2011/README. This just " "includes the general steps." msgstr "" #. Tag: para #: installation.xml:899 #, no-c-format msgid "" "The load process downloads data from the census website for the respective " "nation files, states requested, extracts the files, and then loads each " "state into its own separate set of state tables. Each state table inherits " "from the tables defined in tiger schema so that its " "sufficient to just query those tables to access all the data and drop a set " "of state tables at any time using the if you need to reload a state or " "just don't need a state anymore." msgstr "" #. Tag: para #: installation.xml:901 #, no-c-format msgid "In order to be able to load data you'll need the following tools:" msgstr "" #. Tag: para #: installation.xml:903 #, no-c-format msgid "A tool to unzip the zip files from census website." msgstr "" #. Tag: para #: installation.xml:904 #, no-c-format msgid "" "For Unix like systems: unzip executable which is usually " "already installed on most Unix like platforms." msgstr "" #. Tag: para #: installation.xml:905 #, no-c-format msgid "" "For Windows, 7-zip which is a free compress/uncompress tool you can download " "from http://www.7-zip.org/" msgstr "" #. Tag: para #: installation.xml:907 #, no-c-format msgid "" "shp2pgsql commandline which is installed by default " "when you install PostGIS." msgstr "" #. Tag: para #: installation.xml:908 #, no-c-format msgid "" "wget which is a web grabber tool usually installed on " "most Unix/Linux systems." msgstr "" #. Tag: para #: installation.xml:909 #, no-c-format msgid "" "If you are on windows, you can get pre-compiled binaries from http://gnuwin32." "sourceforge.net/packages/wget.htm" msgstr "" #. Tag: para #: installation.xml:912 #, no-c-format msgid "" "If you are upgrading from tiger_2010, you'll need to first generate and run " ". Before you load any " "state data, you need to load the nation wide data which you do with . Which will generate a loader " "script for you." msgstr "" #. Tag: para #: installation.xml:914 #, no-c-format msgid "" "To load data refer to to generate " "a data load script for your platform for the states you desire. Note that " "you can install these piecemeal. You don't have to load all the states you " "want all at once. You can load them as you need them." msgstr "" #. Tag: para #: installation.xml:917 #, no-c-format msgid "" "After the states you desire have been loaded, make sure to run the: " "SELECT install_missing_indexes(); as " "described in ." msgstr "" #. Tag: para #: installation.xml:919 #, no-c-format msgid "" "To test that things are working as they should, try to run a geocode on an " "address in your state using " msgstr "" #. Tag: title #: installation.xml:924 #, no-c-format msgid "Create a spatially-enabled database from a template" msgstr "" #. Tag: para #: installation.xml:926 #, no-c-format msgid "" "Some packaged distributions of PostGIS (in particular the Win32 installers " "for PostGIS >= 1.1.5) load the PostGIS functions into a template database " "called template_postgis. If the " "template_postgis database exists in your PostgreSQL " "installation then it is possible for users and/or applications to create " "spatially-enabled databases using a single command. Note that in both cases, " "the database user must have been granted the privilege to create new " "databases." msgstr "" #. Tag: para #: installation.xml:937 #, no-c-format msgid "From the shell:" msgstr "" #. Tag: programlisting #: installation.xml:941 #, no-c-format msgid "# createdb -T template_postgis my_spatial_db" msgstr "" #. Tag: para #: installation.xml:943 #, no-c-format msgid "From SQL:" msgstr "" #. Tag: programlisting #: installation.xml:947 #, no-c-format msgid "postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis" msgstr "" #. Tag: title #: installation.xml:951 #, no-c-format msgid "Upgrading" msgstr "" #. Tag: para #: installation.xml:953 #, no-c-format msgid "" "Upgrading existing spatial databases can be tricky as it requires " "replacement or introduction of new PostGIS object definitions." msgstr "" #. Tag: para #: installation.xml:958 #, no-c-format msgid "" "Unfortunately not all definitions can be easily replaced in a live database, " "so sometimes your best bet is a dump/reload process." msgstr "" #. Tag: para #: installation.xml:963 #, no-c-format msgid "" "PostGIS provides a SOFT UPGRADE procedure for minor or bugfix releases, and " "a HARD UPGRADE procedure for major releases." msgstr "" #. Tag: para #: installation.xml:968 #, no-c-format msgid "" "Before attempting to upgrade PostGIS, it is always worth to backup your " "data. If you use the -Fc flag to pg_dump you will always be able to restore " "the dump with a HARD UPGRADE." msgstr "" #. Tag: title #: installation.xml:975 #, no-c-format msgid "Soft upgrade" msgstr "" #. Tag: para #: installation.xml:977 #, no-c-format msgid "" "If you installed your database using extensions, you'll need to upgrade " "using the extension model as well. If you installed using the old sql script " "way, then you should upgrade using the sql script way. Please refer to the " "appropriate." msgstr "" #. Tag: title #: installation.xml:980 #, no-c-format msgid "Soft Upgrade Pre 9.1+ or without extensions" msgstr "" #. Tag: para #: installation.xml:981 #, no-c-format msgid "" "This section applies only to those who installed PostGIS not using " "extensions. If you have extensions and try to upgrade with this approach " "you'll get messages like:" msgstr "" #. Tag: programlisting #: installation.xml:982 #, no-c-format msgid "can't drop ... because postgis extension depends on it" msgstr "" #. Tag: para #: installation.xml:983 #, no-c-format msgid "" "After compiling you should find several postgis_upgrade*.sql files. Install the one for your version of PostGIS. For example " "postgis_upgrade_13_to_15.sql should be used if you are " "upgrading from PostGIS 1.3 to 1.5. If you are moving from PostGIS 1.* to " "PostGIS 2.* or from PostGIS 2.* prior to r7409, you need to do a HARD " "UPGRADE." msgstr "" #. Tag: programlisting #: installation.xml:989 #, no-c-format msgid "psql -f postgis_upgrade_20_minor.sql -d your_spatial_database" msgstr "" #. Tag: para #: installation.xml:991 #, no-c-format msgid "" "The same procedure applies to raster and topology extensions, with upgrade " "files named rtpostgis_upgrade*.sql and " "topology_upgrade*.sql respectively. If you need them:" msgstr "" #. Tag: programlisting #: installation.xml:999 #, no-c-format msgid "psql -f rtpostgis_upgrade_20_minor.sql -d your_spatial_database" msgstr "" #. Tag: programlisting #: installation.xml:1000 #, no-c-format msgid "psql -f topology_upgrade_20_minor.sql -d your_spatial_database" msgstr "" #. Tag: para #: installation.xml:1003 #, no-c-format msgid "" "If you can't find the postgis_upgrade*.sql specific for " "upgrading your version you are using a version too early for a soft upgrade " "and need to do a HARD UPGRADE." msgstr "" #. Tag: para #: installation.xml:1009 #, no-c-format msgid "" "The function should inform you " "about the need to run this kind of upgrade using a \"procs need upgrade\" " "message." msgstr "" #. Tag: title #: installation.xml:1016 #, no-c-format msgid "Soft Upgrade 9.1+ using extensions" msgstr "" #. Tag: para #: installation.xml:1017 #, no-c-format msgid "" "If you originally installed PostGIS with extensions, then you need to " "upgrade using extensions as well. Doing a minor upgrade with extensions, is " "fairly painless." msgstr "" #. Tag: programlisting #: installation.xml:1018 #, no-c-format msgid "" "ALTER EXTENSION postgis UPDATE TO \"&last_release_version;\";\n" "ALTER EXTENSION postgis_topology UPDATE TO \"&last_release_version;\";" msgstr "" #. Tag: para #: installation.xml:1019 #, no-c-format msgid "If you get an error notice something like:" msgstr "" #. Tag: programlisting #: installation.xml:1020 #, no-c-format msgid "No migration path defined for ... to &last_release_version;" msgstr "" #. Tag: para #: installation.xml:1021 #, no-c-format msgid "" "Then you'll need to backup your database, create a fresh one as described in " " and then restore your backup " "ontop of this new database. You might get a message that postgis " "extension already installed which you can safely ignore." msgstr "" #. Tag: para #: installation.xml:1023 #, no-c-format msgid "" "If you installed PostGIS originally without a version specified, you can " "often skip the reinstallation of postgis extension before restoring since " "the backup just has CREATE EXTENSION postgis and thus picks up " "the newest latest version during restore. ." msgstr "" #. Tag: title #: installation.xml:1030 #, no-c-format msgid "Hard upgrade" msgstr "" #. Tag: para #: installation.xml:1032 #, no-c-format msgid "" "By HARD UPGRADE we mean full dump/reload of postgis-enabled databases. You " "need a HARD UPGRADE when PostGIS objects' internal storage changes or when " "SOFT UPGRADE is not possible. The Release " "Notes appendix reports for each version whether you need a dump/" "reload (HARD UPGRADE) to upgrade." msgstr "" #. Tag: para #: installation.xml:1041 #, no-c-format msgid "" "The dump/reload process is assisted by the postgis_restore.pl script which " "takes care of skipping from the dump all definitions which belong to PostGIS " "(including old ones), allowing you to restore your schemas and data into a " "database with PostGIS installed without getting duplicate symbol errors or " "bringing forward deprecated objects." msgstr "" #. Tag: para #: installation.xml:1050 #, no-c-format msgid "" "Supplementary instructions for windows users are available at Windows Hard " "upgrade." msgstr "" #. Tag: para #: installation.xml:1053 #, no-c-format msgid "The Procedure is as follows:" msgstr "" #. Tag: para #: installation.xml:1061 #, no-c-format msgid "" "Create a \"custom-format\" dump of the database you want to upgrade (let's " "call it olddb) include binary blobs (-b) and verbose (-v) " "output. The user can be the owner of the db, need not be postgres super " "account." msgstr "" #. Tag: programlisting #: installation.xml:1069 #, no-c-format msgid "" "pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f \"/somepath/olddb." "backup\" olddb" msgstr "" #. Tag: para #: installation.xml:1075 #, no-c-format msgid "" "Do a fresh install of PostGIS in a new database -- we'll refer to this " "database as newdb. Please refer to and for " "instructions on how to do this." msgstr "" #. Tag: para #: installation.xml:1082 #, no-c-format msgid "" "The spatial_ref_sys entries found in your dump will be restored, but they " "will not override existing ones in spatial_ref_sys. This is to ensure that " "fixes in the official set will be properly propagated to restored databases. " "If for any reason you really want your own overrides of standard entries " "just don't load the spatial_ref_sys.sql file when creating the new db." msgstr "" #. Tag: para #: installation.xml:1092 #, no-c-format msgid "" "If your database is really old or you know you've been using long deprecated " "functions in your views and functions, you might need to load " "legacy.sql for all your functions and views etc. to " "properly come back. Only do this if _really_ needed. Consider upgrading your " "views and functions before dumping instead, if possible. The deprecated " "functions can be later removed by loading uninstall_legacy.sql." msgstr "" #. Tag: para #: installation.xml:1108 #, no-c-format msgid "" "Restore your backup into your fresh newdb database using " "postgis_restore.pl. Unexpected errors, if any, will be printed to the " "standard error stream by psql. Keep a log of those." msgstr "" #. Tag: programlisting #: installation.xml:1116 #, no-c-format msgid "" "perl utils/postgis_restore.pl \"/somepath/olddb.backup\" | psql -h localhost " "-p 5432 -U postgres newdb 2> errors.txt" msgstr "" #. Tag: para #: installation.xml:1122 #, no-c-format msgid "Errors may arise in the following cases:" msgstr "" #. Tag: para #: installation.xml:1128 #, no-c-format msgid "" "Some of your views or functions make use of deprecated PostGIS objects. In " "order to fix this you may try loading legacy.sql script " "prior to restore or you'll have to restore to a version of PostGIS which " "still contains those objects and try a migration again after porting your " "code. If the legacy.sql way works for you, don't forget " "to fix your code to stop using deprecated functions and drop them loading " "uninstall_legacy.sql." msgstr "" #. Tag: para #: installation.xml:1140 #, no-c-format msgid "" "Some custom records of spatial_ref_sys in dump file have an invalid SRID " "value. Valid SRID values are bigger than 0 and smaller than 999000. Values " "in the 999000.999999 range are reserved for internal use while values > " "999999 can't be used at all. All your custom records with invalid SRIDs will " "be retained, with those > 999999 moved into the reserved range, but the " "spatial_ref_sys table would loose a check constraint guarding for that " "invariant to hold and possibly also its primary key ( when multiple invalid " "SRIDS get converted to the same reserved SRID value )." msgstr "" #. Tag: para #: installation.xml:1154 #, no-c-format msgid "" "In order to fix this you should copy your custom SRS to a SRID with a valid " "value (maybe in the 910000..910999 range), convert all your tables to the " "new srid (see ), delete the invalid " "entry from spatial_ref_sys and re-construct the check(s) with:" msgstr "" #. Tag: programlisting #: installation.xml:1161 #, no-c-format msgid "" "ALTER TABLE spatial_ref_sys ADD CONSTRAINT spatial_ref_sys_srid_check check " "(srid > 0 AND srid < 999000 );" msgstr "" #. Tag: programlisting #: installation.xml:1163 #, no-c-format msgid "ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid));" msgstr "" #. Tag: title #: installation.xml:1174 #, no-c-format msgid "Common Problems" msgstr "" #. Tag: para #: installation.xml:1175 #, no-c-format msgid "" "There are several things to check when your installation or upgrade doesn't " "go as you expected." msgstr "" #. Tag: para #: installation.xml:1182 #, no-c-format msgid "" "Check that you have installed PostgreSQL &min_postgres_version; or newer, " "and that you are compiling against the same version of the PostgreSQL source " "as the version of PostgreSQL that is running. Mix-ups can occur when your " "(Linux) distribution has already installed PostgreSQL, or you have otherwise " "installed PostgreSQL before and forgotten about it. PostGIS will only work " "with PostgreSQL &min_postgres_version; or newer, and strange, unexpected " "error messages will result if you use an older version. To check the version " "of PostgreSQL which is running, connect to the database using psql and run " "this query:" msgstr "" #. Tag: programlisting #: installation.xml:1195 #, no-c-format msgid "SELECT version();" msgstr "" #. Tag: para #: installation.xml:1197 #, no-c-format msgid "" "If you are running an RPM based distribution, you can check for the " "existence of pre-installed packages using the rpm command " "as follows: rpm -qa | grep postgresql" msgstr "" #. Tag: para #: installation.xml:1205 #, no-c-format msgid "" "If your upgrade fails, make sure you are restoring into a database that " "already has PostGIS installed." msgstr "" #. Tag: programlisting #: installation.xml:1206 #, no-c-format msgid "SELECT postgis_full_version();" msgstr "" #. Tag: para #: installation.xml:1210 #, no-c-format msgid "" "Also check that configure has correctly detected the location and version of " "PostgreSQL, the Proj4 library and the GEOS library." msgstr "" #. Tag: para #: installation.xml:1217 #, no-c-format msgid "" "The output from configure is used to generate the postgis_config." "h file. Check that the POSTGIS_PGSQL_VERSION, " "POSTGIS_PROJ_VERSION and POSTGIS_GEOS_VERSION variables have been set correctly." msgstr "" #. Tag: title #: installation.xml:1230 #, no-c-format msgid "JDBC" msgstr "" #. Tag: para #: installation.xml:1232 #, no-c-format msgid "" "The JDBC extensions provide Java objects corresponding to the internal " "PostGIS types. These objects can be used to write Java clients which query " "the PostGIS database and draw or do calculations on the GIS data in PostGIS." msgstr "" #. Tag: para #: installation.xml:1241 #, no-c-format msgid "" "Enter the java/jdbc sub-directory of the PostGIS " "distribution." msgstr "" #. Tag: para #: installation.xml:1248 #, no-c-format msgid "" "Run the ant command. Copy the postgis.jar file to wherever you keep your java libraries." msgstr "" #. Tag: para #: installation.xml:1256 #, no-c-format msgid "" "The JDBC extensions require a PostgreSQL JDBC driver to be present in the " "current CLASSPATH during the build process. If the PostgreSQL JDBC driver is " "located elsewhere, you may pass the location of the JDBC driver JAR " "separately using the -D parameter like this:" msgstr "" #. Tag: programlisting #: installation.xml:1263 #, no-c-format msgid "# ant -Dclasspath=/path/to/postgresql-jdbc.jar" msgstr "" #. Tag: para #: installation.xml:1265 #, no-c-format msgid "" "PostgreSQL JDBC drivers can be downloaded from http://jdbc.postgresql.org ." msgstr "" #. Tag: title #: installation.xml:1275 #, no-c-format msgid "Loader/Dumper" msgstr "" #. Tag: para #: installation.xml:1277 #, no-c-format msgid "" "The data loader and dumper are built and installed automatically as part of " "the PostGIS build. To build and install them manually:" msgstr "" #. Tag: programlisting #: installation.xml:1282 #, no-c-format msgid "" "# cd postgis-&last_release_version;/loader\n" "# make\n" "# make install" msgstr "" #. Tag: para #: installation.xml:1284 #, no-c-format msgid "" "The loader is called shp2pgsql and converts ESRI Shape " "files into SQL suitable for loading in PostGIS/PostgreSQL. The dumper is " "called pgsql2shp and converts PostGIS tables (or " "queries) into ESRI Shape files. For more verbose documentation, see the " "online help, and the manual pages." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/using_postgis_app.xml.po0000644000000000000000000005205512025614072022653 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: using_postgis_app.xml:3 #, no-c-format msgid "Using PostGIS Geometry: Building Applications" msgstr "" #. Tag: title #: using_postgis_app.xml:5 #, no-c-format msgid "Using MapServer" msgstr "" #. Tag: para #: using_postgis_app.xml:7 #, no-c-format msgid "" "The Minnesota MapServer is an internet web-mapping server which conforms to " "the OpenGIS Web Mapping Server specification." msgstr "" #. Tag: para #: using_postgis_app.xml:12 #, no-c-format msgid "" "The MapServer homepage is at http://" "mapserver.org." msgstr "" #. Tag: para #: using_postgis_app.xml:17 #, no-c-format msgid "" "The OpenGIS Web Map Specification is at http://www.opengeospatial.org/standards/" "wms." msgstr "" #. Tag: title #: using_postgis_app.xml:23 #, no-c-format msgid "Basic Usage" msgstr "" #. Tag: para #: using_postgis_app.xml:25 #, no-c-format msgid "" "To use PostGIS with MapServer, you will need to know about how to configure " "MapServer, which is beyond the scope of this documentation. This section " "will cover specific PostGIS issues and configuration details." msgstr "" #. Tag: para #: using_postgis_app.xml:30 #, no-c-format msgid "To use PostGIS with MapServer, you will need:" msgstr "" #. Tag: para #: using_postgis_app.xml:34 #, no-c-format msgid "Version 0.6 or newer of PostGIS." msgstr "" #. Tag: para #: using_postgis_app.xml:38 #, no-c-format msgid "Version 3.5 or newer of MapServer." msgstr "" #. Tag: para #: using_postgis_app.xml:42 #, no-c-format msgid "" "MapServer accesses PostGIS/PostgreSQL data like any other PostgreSQL client " "-- using the libpq interface. This means that MapServer " "can be installed on any machine with network access to the PostGIS server, " "and use PostGIS as a source of data. The faster the connection between the " "systems, the better." msgstr "" #. Tag: para #: using_postgis_app.xml:50 #, no-c-format msgid "" "Compile and install MapServer, with whatever options you desire, including " "the \"--with-postgis\" configuration option." msgstr "" #. Tag: para #: using_postgis_app.xml:55 #, no-c-format msgid "In your MapServer map file, add a PostGIS layer. For example:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:58 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis \n" " NAME \"widehighways\" \n" " # Connect to a remote spatial database\n" " CONNECTION \"user=dbuser dbname=gisdatabase host=bigserver\"\n" " PROCESSING \"CLOSE_CONNECTION=DEFER\"\n" " # Get the lines from the 'geom' column of the 'roads' table \n" " DATA \"geom from roads using srid=4326 using unique gid\" \n" " STATUS ON\n" " TYPE LINE \n" " # Of the lines in the extents, only render the wide highways \n" " FILTER \"type = 'highway' and numlanes >= 4\" \n" " CLASS \n" " # Make the superhighways brighter and 2 pixels wide\n" " EXPRESSION ([numlanes] >= 6) \n" " STYLE\n" " COLOR 255 22 22 \n" " WIDTH 2 \n" " END\n" " END \n" " CLASS \n" " # All the rest are darker and only 1 pixel wide \n" " EXPRESSION ([numlanes] < 6) \n" " STYLE\n" " COLOR 205 92 82\n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:60 #, no-c-format msgid "In the example above, the PostGIS-specific directives are as follows:" msgstr "" #. Tag: term #: using_postgis_app.xml:65 #, no-c-format msgid "CONNECTIONTYPE" msgstr "" #. Tag: para #: using_postgis_app.xml:68 #, no-c-format msgid "For PostGIS layers, this is always \"postgis\"." msgstr "" #. Tag: term #: using_postgis_app.xml:73 #, no-c-format msgid "CONNECTION" msgstr "" #. Tag: para #: using_postgis_app.xml:76 #, no-c-format msgid "" "The database connection is governed by the a 'connection string' which is a " "standard set of keys and values like this (with the default values in <" ">):" msgstr "" #. Tag: para #: using_postgis_app.xml:80 #, no-c-format msgid "" "user=<username> password=<password> dbname=<username> " "hostname=<server> port=<5432>" msgstr "" #. Tag: para #: using_postgis_app.xml:84 #, no-c-format msgid "" "An empty connection string is still valid, and any of the key/value pairs " "can be omitted. At a minimum you will generally supply the database name and " "username to connect with." msgstr "" #. Tag: term #: using_postgis_app.xml:92 #, no-c-format msgid "DATA" msgstr "" #. Tag: para #: using_postgis_app.xml:95 #, no-c-format msgid "" "The form of this parameter is \"<geocolumn> from <tablename> " "using srid=<srid> using unique <primary key>\" where the column " "is the spatial column to be rendered to the map, the SRID is SRID used by " "the column and the primary key is the table primary key (or any other " "uniquely-valued column with an index)." msgstr "" #. Tag: para #: using_postgis_app.xml:99 #, no-c-format msgid "" "You can omit the \"using srid\" and \"using unique\" clauses and MapServer " "will automatically determine the correct values if possible, but at the cost " "of running a few extra queries on the server for each map draw." msgstr "" #. Tag: term #: using_postgis_app.xml:106 #, no-c-format msgid "PROCESSING" msgstr "" #. Tag: para #: using_postgis_app.xml:109 #, no-c-format msgid "" "Putting in a CLOSE_CONNECTION=DEFER if you have multiple layers reuses " "existing connections instead of closing them. This improves speed. Refer to " "for MapServer PostGIS Performance Tips for a " "more detailed explanation." msgstr "" #. Tag: term #: using_postgis_app.xml:115 #, no-c-format msgid "FILTER" msgstr "" #. Tag: para #: using_postgis_app.xml:118 #, no-c-format msgid "" "The filter must be a valid SQL string corresponding to the logic normally " "following the \"WHERE\" keyword in a SQL query. So, for example, to render " "only roads with 6 or more lanes, use a filter of \"num_lanes >= 6\"." msgstr "" #. Tag: para #: using_postgis_app.xml:128 #, no-c-format msgid "" "In your spatial database, ensure you have spatial (GiST) indexes built for " "any the layers you will be drawing." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:131 #, no-c-format msgid "" "CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] );" msgstr "" #. Tag: para #: using_postgis_app.xml:135 #, no-c-format msgid "" "If you will be querying your layers using MapServer you will also need to " "use the \"using unique\" clause in your DATA statement." msgstr "" #. Tag: para #: using_postgis_app.xml:138 #, no-c-format msgid "" "MapServer requires unique identifiers for each spatial record when doing " "queries, and the PostGIS module of MapServer uses the unique value you " "specify in order to provide these unique identifiers. Using the table " "primary key is the best practice." msgstr "" #. Tag: title #: using_postgis_app.xml:147 #, no-c-format msgid "Frequently Asked Questions" msgstr "" #. Tag: para #: using_postgis_app.xml:152 #, no-c-format msgid "" "When I use an EXPRESSION in my map file, the condition " "never returns as true, even though I know the values exist in my table." msgstr "" #. Tag: para #: using_postgis_app.xml:158 #, no-c-format msgid "" "Unlike shape files, PostGIS field names have to be referenced in EXPRESSIONS " "using lower case." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:162 #, no-c-format msgid "EXPRESSION ([numlanes] >= 6)" msgstr "" #. Tag: para #: using_postgis_app.xml:168 #, no-c-format msgid "" "The FILTER I use for my Shape files is not working for my PostGIS table of " "the same data." msgstr "" #. Tag: para #: using_postgis_app.xml:173 #, no-c-format msgid "" "Unlike shape files, filters for PostGIS layers use SQL syntax (they are " "appended to the SQL statement the PostGIS connector generates for drawing " "layers in MapServer)." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:177 #, no-c-format msgid "FILTER \"type = 'highway' and numlanes >= 4\"" msgstr "" #. Tag: para #: using_postgis_app.xml:183 #, no-c-format msgid "" "My PostGIS layer draws much slower than my Shape file layer, is this normal?" msgstr "" #. Tag: para #: using_postgis_app.xml:188 #, no-c-format msgid "" "In general, the more features you are drawing into a given map, the more " "likely it is that PostGIS will be slower than Shape files. For maps with " "relatively few features (100s), PostGIS will often be faster. For maps with " "high feature density (1000s), PostGIS will always be slower." msgstr "" #. Tag: para #: using_postgis_app.xml:194 #, no-c-format msgid "" "If you are finding substantial draw performance problems, it is possible " "that you have not built a spatial index on your table." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:198 #, no-c-format msgid "" "postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn ); \n" "postgis# VACUUM ANALYZE;" msgstr "" #. Tag: para #: using_postgis_app.xml:204 #, no-c-format msgid "" "My PostGIS layer draws fine, but queries are really slow. What is wrong?" msgstr "" #. Tag: para #: using_postgis_app.xml:209 #, no-c-format msgid "" "For queries to be fast, you must have a unique key for your spatial table " "and you must have an index on that unique key." msgstr "" #. Tag: para #: using_postgis_app.xml:213 #, no-c-format msgid "" "You can specify what unique key for mapserver to use with the USING " "UNIQUE clause in your DATA line:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:217 #, no-c-format msgid "DATA \"geom FROM geotable USING UNIQUE gid\"" msgstr "" #. Tag: para #: using_postgis_app.xml:224 #, no-c-format msgid "" "Can I use \"geography\" columns (new in PostGIS 1.5) as a source for " "MapServer layers?" msgstr "" #. Tag: para #: using_postgis_app.xml:229 #, no-c-format msgid "" "Yes! MapServer understands geography columns as being the same as geometry " "columns, but always using an SRID of 4326. Just make sure to include a " "\"using srid=4326\" clause in your DATA statement. " "Everything else works exactly the same as with geometry." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:234 #, no-c-format msgid "DATA \"geog FROM geogtable USING SRID=4326 USING UNIQUE gid\"" msgstr "" #. Tag: title #: using_postgis_app.xml:244 #, no-c-format msgid "Advanced Usage" msgstr "" #. Tag: para #: using_postgis_app.xml:246 #, no-c-format msgid "" "The USING pseudo-SQL clause is used to add some " "information to help mapserver understand the results of more complex " "queries. More specifically, when either a view or a subselect is used as the " "source table (the thing to the right of \"FROM\" in a DATA definition) it is more difficult for mapserver to automatically " "determine a unique identifier for each row and also the SRID for the table. " "The USING clause can provide mapserver with these two " "pieces of information as follows:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:255 #, no-c-format msgid "" "DATA \"geom FROM (\n" " SELECT \n" " table1.geom AS geom, \n" " table1.gid AS gid, \n" " table2.data AS data \n" " FROM table1 \n" " LEFT JOIN table2 \n" " ON table1.id = table2.id\n" ") AS new_table USING UNIQUE gid USING SRID=4326\"" msgstr "" #. Tag: term #: using_postgis_app.xml:259 #, no-c-format msgid "USING UNIQUE <uniqueid>" msgstr "" #. Tag: para #: using_postgis_app.xml:262 #, no-c-format msgid "" "MapServer requires a unique id for each row in order to identify the row " "when doing map queries. Normally it identifies the primary key from the " "system tables. However, views and subselects don't automatically have an " "known unique column. If you want to use MapServer's query functionality, you " "need to ensure your view or subselect includes a uniquely valued column, and " "declare it with USING UNIQUE. For example, you could " "explicitly select nee of the table's primary key values for this purpose, or " "any other column which is guaranteed to be unique for the result set." msgstr "" #. Tag: para #: using_postgis_app.xml:273 #, no-c-format msgid "" "\"Querying a Map\" is the action of clicking on a map to ask for information " "about the map features in that location. Don't confuse \"map queries\" with " "the SQL query in a DATA definition." msgstr "" #. Tag: term #: using_postgis_app.xml:282 #, no-c-format msgid "USING SRID=<srid>" msgstr "" #. Tag: para #: using_postgis_app.xml:285 #, no-c-format msgid "" "PostGIS needs to know which spatial referencing system is being used by the " "geometries in order to return the correct data back to MapServer. Normally " "it is possible to find this information in the \"geometry_columns\" table in " "the PostGIS database, however, this is not possible for tables which are " "created on the fly such as subselects and views. So the USING " "SRID= option allows the correct SRID to be specified in the " "DATA definition." msgstr "" #. Tag: title #: using_postgis_app.xml:300 #, no-c-format msgid "Examples" msgstr "" #. Tag: para #: using_postgis_app.xml:302 #, no-c-format msgid "" "Lets start with a simple example and work our way up. Consider the following " "MapServer layer definition:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:305 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis \n" " NAME \"roads\"\n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\" \n" " DATA \"geom from roads\" \n" " STATUS ON \n" " TYPE LINE \n" " CLASS \n" " STYLE\n" " COLOR 0 0 0 \n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:307 #, no-c-format msgid "" "This layer will display all the road geometries in the roads table as black " "lines." msgstr "" #. Tag: para #: using_postgis_app.xml:310 #, no-c-format msgid "" "Now lets say we want to show only the highways until we get zoomed in to at " "least a 1:100000 scale - the next two layers will achieve this effect:" msgstr "" #. Tag: programlisting #: using_postgis_app.xml:314 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis \n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\" \n" " PROCESSING \"CLOSE_CONNECTION=DEFER\"\n" " DATA \"geom from roads\"\n" " MINSCALE 100000 \n" " STATUS ON \n" " TYPE LINE \n" " FILTER \"road_type = 'highway'\" \n" " CLASS \n" " COLOR 0 0 0 \n" " END \n" "END \n" "LAYER \n" " CONNECTIONTYPE postgis \n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\"\n" " PROCESSING \"CLOSE_CONNECTION=DEFER\"\n" " DATA \"geom from roads\" \n" " MAXSCALE 100000 \n" " STATUS ON \n" " TYPE LINE\n" " CLASSITEM road_type \n" " CLASS \n" " EXPRESSION \"highway\" \n" " STYLE\n" " WIDTH 2 \n" " COLOR 255 0 0 \n" " END\n" " END \n" " CLASS \n" " STYLE\n" " COLOR 0 0 0 \n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:316 #, no-c-format msgid "" "The first layer is used when the scale is greater than 1:100000, and " "displays only the roads of type \"highway\" as black lines. The " "FILTER option causes only roads of type \"highway\" to be " "displayed." msgstr "" #. Tag: para #: using_postgis_app.xml:321 #, no-c-format msgid "" "The second layer is used when the scale is less than 1:100000, and will " "display highways as double-thick red lines, and other roads as regular black " "lines." msgstr "" #. Tag: para #: using_postgis_app.xml:325 #, no-c-format msgid "" "So, we have done a couple of interesting things using only MapServer " "functionality, but our DATA SQL statement has remained " "simple. Suppose that the name of the road is stored in another table (for " "whatever reason) and we need to do a join to get it and label our roads." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:331 #, no-c-format msgid "" "LAYER \n" " CONNECTIONTYPE postgis\n" " CONNECTION \"user=theuser password=thepass dbname=thedb host=theserver\" \n" " DATA \"geom FROM (SELECT roads.gid AS gid, roads.geom AS geom, \n" " road_names.name as name FROM roads LEFT JOIN road_names ON \n" " roads.road_name_id = road_names.road_name_id) \n" " AS named_roads USING UNIQUE gid USING SRID=4326\" \n" " MAXSCALE 20000 \n" " STATUS ON \n" " TYPE ANNOTATION \n" " LABELITEM name\n" " CLASS \n" " LABEL \n" " ANGLE auto \n" " SIZE 8 \n" " COLOR 0 192 0 \n" " TYPE truetype \n" " FONT arial\n" " END\n" " END \n" "END" msgstr "" #. Tag: para #: using_postgis_app.xml:333 #, no-c-format msgid "" "This annotation layer adds green labels to all the roads when the scale gets " "down to 1:20000 or less. It also demonstrates how to use an SQL join in a " "DATA definition." msgstr "" #. Tag: title #: using_postgis_app.xml:340 #, no-c-format msgid "Java Clients (JDBC)" msgstr "" #. Tag: para #: using_postgis_app.xml:342 #, no-c-format msgid "" "Java clients can access PostGIS \"geometry\" objects in the PostgreSQL " "database either directly as text representations or using the JDBC extension " "objects bundled with PostGIS. In order to use the extension objects, the " "\"postgis.jar\" file must be in your CLASSPATH along with the \"postgresql." "jar\" JDBC driver package." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:348 #, no-c-format msgid "" "import java.sql.*; \n" "import java.util.*; \n" "import java.lang.*; \n" "import org.postgis.*; \n" "\n" "public class JavaGIS { \n" "\n" "public static void main(String[] args) { \n" "\n" " java.sql.Connection conn; \n" "\n" " try { \n" " /* \n" " * Load the JDBC driver and establish a connection. \n" " */\n" " Class.forName(\"org.postgresql.Driver\"); \n" " String url = \"jdbc:postgresql://localhost:5432/database\"; \n" " conn = DriverManager.getConnection(url, \"postgres\", \"\"); \n" " /* \n" " * Add the geometry types to the connection. Note that you \n" " * must cast the connection to the pgsql-specific connection \n" " * implementation before calling the addDataType() method. \n" " */\n" " ((org.postgresql.PGConnection)conn).addDataType(\"geometry\",Class." "forName(\"org.postgis.PGgeometry\"));\n" " ((org.postgresql.PGConnection)conn).addDataType(\"box3d\",Class.forName" "(\"org.postgis.PGbox3d\"));\n" " /* \n" " * Create a statement and execute a select query. \n" " */ \n" " Statement s = conn.createStatement(); \n" " ResultSet r = s.executeQuery(\"select geom,id from geomtable\"); \n" " while( r.next() ) { \n" " /* \n" " * Retrieve the geometry as an object then cast it to the geometry " "type. \n" " * Print things out. \n" " */ \n" " PGgeometry geom = (PGgeometry)r.getObject(1); \n" " int id = r.getInt(2); \n" " System.out.println(\"Row \" + id + \":\");\n" " System.out.println(geom.toString()); \n" " } \n" " s.close(); \n" " conn.close(); \n" " } \n" "catch( Exception e ) { \n" " e.printStackTrace(); \n" " } \n" "} \n" "}" msgstr "" #. Tag: para #: using_postgis_app.xml:350 #, no-c-format msgid "" "The \"PGgeometry\" object is a wrapper object which contains a specific " "topological geometry object (subclasses of the abstract class \"Geometry\") " "depending on the type: Point, LineString, Polygon, MultiPoint, " "MultiLineString, MultiPolygon." msgstr "" #. Tag: programlisting #: using_postgis_app.xml:355 #, no-c-format msgid "" "PGgeometry geom = (PGgeometry)r.getObject(1); \n" "if( geom.getType() == Geometry.POLYGON ) { \n" " Polygon pl = (Polygon)geom.getGeometry(); \n" " for( int r = 0; r < pl.numRings(); r++) { \n" " LinearRing rng = pl.getRing(r); \n" " System.out.println(\"Ring: \" + r); \n" " for( int p = 0; p < rng.numPoints(); p++ ) { \n" " Point pt = rng.getPoint(p); \n" " System.out.println(\"Point: \" + p);\n" " System.out.println(pt.toString()); \n" " } \n" " } \n" "}" msgstr "" #. Tag: para #: using_postgis_app.xml:357 #, no-c-format msgid "" "The JavaDoc for the extension objects provides a reference for the various " "data accessor functions in the geometric objects." msgstr "" #. Tag: title #: using_postgis_app.xml:362 #, no-c-format msgid "C Clients (libpq)" msgstr "" #. Tag: para #: using_postgis_app.xml:364 using_postgis_app.xml:369 #: using_postgis_app.xml:375 #, no-c-format msgid "..." msgstr "" #. Tag: title #: using_postgis_app.xml:367 #, no-c-format msgid "Text Cursors" msgstr "" #. Tag: title #: using_postgis_app.xml:373 #, no-c-format msgid "Binary Cursors" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_management.xml.po0000644000000000000000000010550112025614072023243 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_management.xml:3 #, no-c-format msgid "Management Functions" msgstr "" #. Tag: refname #: reference_management.xml:7 #, no-c-format msgid "AddGeometryColumn" msgstr "" #. Tag: refpurpose #: reference_management.xml:9 #, no-c-format msgid "" "Adds a geometry column to an existing table of attributes. By default uses " "type modifier to define rather than constraints. Pass in false for " "use_typmod to get old check constraint based behavior" msgstr "" #. Tag: funcsynopsis #: reference_management.xml:15 #, no-c-format msgid "" " text AddGeometryColumn varchar table_name varchar column_name integer srid varchar type integer dimension boolean " "use_typmod=true " " text AddGeometryColumn varchar schema_name varchar table_name varchar column_name integer srid varchar type integer dimension boolean " "use_typmod=true " " text AddGeometryColumn varchar catalog_name varchar " "schema_name varchar table_name varchar column_name integer " " srid varchar type integer " "dimension boolean use_typmod=true " msgstr "" #. Tag: title #: reference_management.xml:92 reference_management.xml:188 #: reference_management.xml:254 reference_management.xml:298 #: reference_management.xml:344 reference_management.xml:386 #: reference_management.xml:427 reference_management.xml:458 #: reference_management.xml:499 reference_management.xml:540 #: reference_management.xml:583 reference_management.xml:631 #: reference_management.xml:677 reference_management.xml:726 #: reference_management.xml:862 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_management.xml:94 #, no-c-format msgid "" "Adds a geometry column to an existing table of attributes. The " "schema_name is the name of the table schema. The " "srid must be an integer value reference to an entry in " "the SPATIAL_REF_SYS table. The type must be a string " "corresponding to the geometry type, eg, 'POLYGON' or 'MULTILINESTRING' . An " "error is thrown if the schemaname doesn't exist (or not visible in the " "current search_path) or the specified SRID, geometry type, or dimension is " "invalid." msgstr "" #. Tag: para #: reference_management.xml:104 #, no-c-format msgid "" "Changed: 2.0.0 This function no longer updates geometry_columns since " "geometry_columns is a view that reads from system catalogs. It by default " "also does not create constraints, but instead uses the built in type " "modifier behavior of PostgreSQL. So for example building a wgs84 POINT " "column with this function is now equivalent to: ALTER TABLE some_table " "ADD COLUMN geom geometry(Point,4326);" msgstr "" #. Tag: para #: reference_management.xml:107 #, no-c-format msgid "" "Changed: 2.0.0 If you require the old behavior of constraints use the " "default use_typmod, but set it to false." msgstr "" #. Tag: para #: reference_management.xml:111 #, no-c-format msgid "" "Changed: 2.0.0 Views can no longer be manually registered in " "geometry_columns, however views built against geometry typmod tables " "geometries and used without wrapper functions will register themselves " "correctly because they inherit the typmod behavior of their parent table " "column. Views that use geometry functions that output other geometries will " "need to be cast to typmod geometries for these view geometry columns to be " "registered correctly in geometry_columns. Refer to ." msgstr "" #. Tag: para #: reference_management.xml:117 reference_management.xml:194 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_management.xml:118 reference_management.xml:195 #: reference_management.xml:868 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_management.xml:119 reference_management.xml:196 #: reference_management.xml:869 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_management.xml:120 #, no-c-format msgid "" "Enhanced: 2.0.0 use_typmod argument introduced. Defaults to creating typmod " "geometry column instead of constraint-based." msgstr "" #. Tag: title #: reference_management.xml:124 reference_management.xml:203 #: reference_management.xml:267 reference_management.xml:306 #: reference_management.xml:351 reference_management.xml:393 #: reference_management.xml:433 reference_management.xml:464 #: reference_management.xml:506 reference_management.xml:548 #: reference_management.xml:600 reference_management.xml:646 #: reference_management.xml:683 reference_management.xml:784 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_management.xml:126 #, no-c-format msgid "" "-- Create schema to hold data\n" "CREATE SCHEMA my_schema;\n" "-- Create a new simple PostgreSQL table\n" "CREATE TABLE my_schema.my_spatial_table (id serial);\n" "\n" "-- Describing the table shows a simple table with a single \"id\" column.\n" "postgis=# \\d my_schema.my_spatial_table\n" " Table \"my_schema." "my_spatial_table\"\n" " Column | Type | Modifiers\n" "--------+---------" "+-------------------------------------------------------------------------\n" " id | integer | not null default nextval('my_schema." "my_spatial_table_id_seq'::regclass)\n" "\n" "-- Add a spatial column to the table\n" "SELECT AddGeometryColumn " "('my_schema','my_spatial_table','geom',4326,'POINT',2);\n" "\n" "-- Add a point using the old constraint based behavior\n" "SELECT AddGeometryColumn " "('my_schema','my_spatial_table','geom_c',4326,'POINT',2, false);\n" "\n" "--Add a curvepolygon using old constraint behavior\n" "SELECT AddGeometryColumn " "('my_schema','my_spatial_table','geomcp_c',4326,'CURVEPOLYGON',2, false);\n" "\n" "-- Describe the table again reveals the addition of a new geometry columns.\n" "\\d my_schema.my_spatial_table\n" " addgeometrycolumn \n" "-------------------------------------------------------------------------\n" " my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2 \n" "(1 row)\n" "\n" " Table \"my_schema.my_spatial_table\"\n" " Column | Type | " "Modifiers \n" "----------+----------------------" "+-------------------------------------------------------------------------\n" " id | integer | not null default nextval('my_schema." "my_spatial_table_id_seq'::regclass)\n" " geom | geometry(Point,4326) | \n" " geom_c | geometry | \n" " geomcp_c | geometry | \n" "Check constraints:\n" " \"enforce_dims_geom_c\" CHECK (st_ndims(geom_c) = 2)\n" " \"enforce_dims_geomcp_c\" CHECK (st_ndims(geomcp_c) = 2)\n" " \"enforce_geotype_geom_c\" CHECK (geometrytype(geom_c) = 'POINT'::text " "OR geom_c IS NULL)\n" " \"enforce_geotype_geomcp_c\" CHECK (geometrytype(geomcp_c) = " "'CURVEPOLYGON'::text OR geomcp_c IS NULL)\n" " \"enforce_srid_geom_c\" CHECK (st_srid(geom_c) = 4326)\n" " \"enforce_srid_geomcp_c\" CHECK (st_srid(geomcp_c) = 4326)\n" " \n" "-- geometry_columns view also registers the new columns --\n" "SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims \n" " FROM geometry_columns\n" " WHERE f_table_name = 'my_spatial_table' AND f_table_schema = " "'my_schema';\n" "\n" " col_name | type | srid | ndims \n" "----------+--------------+------+-------\n" " geom | Point | 4326 | 2\n" " geom_c | Point | 4326 | 2\n" " geomcp_c | CurvePolygon | 4326 | 2" msgstr "" #. Tag: title #: reference_management.xml:130 reference_management.xml:208 #: reference_management.xml:272 reference_management.xml:312 #: reference_management.xml:357 reference_management.xml:399 #: reference_management.xml:470 reference_management.xml:512 #: reference_management.xml:554 reference_management.xml:606 #: reference_management.xml:652 reference_management.xml:689 #: reference_management.xml:873 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_management.xml:132 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_management.xml:138 #, no-c-format msgid "DropGeometryColumn" msgstr "" #. Tag: refpurpose #: reference_management.xml:140 #, no-c-format msgid "Removes a geometry column from a spatial table." msgstr "" #. Tag: funcsynopsis #: reference_management.xml:145 #, no-c-format msgid "" " text DropGeometryColumn varchar table_name varchar column_name text " "DropGeometryColumn varchar schema_name varchar " " table_name varchar " " column_name " " text DropGeometryColumn varchar catalog_name varchar " "schema_name varchar table_name varchar column_name " msgstr "" #. Tag: para #: reference_management.xml:190 #, no-c-format msgid "" "Removes a geometry column from a spatial table. Note that schema_name will " "need to match the f_table_schema field of the table's row in the " "geometry_columns table." msgstr "" #. Tag: para #: reference_management.xml:198 #, no-c-format msgid "" "Changed: 2.0.0 This function is provided for backward compatibility. Now " "that since geometry_columns is now a view against the system catalogs, you " "can drop a geometry column like any other table column using ALTER " "TABLE" msgstr "" #. Tag: programlisting #: reference_management.xml:205 #, no-c-format msgid "" "SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom');\n" " ----RESULT output ---\n" " dropgeometrycolumn\n" "------------------------------------------------------\n" " my_schema.my_spatial_table.geom effectively removed.\n" " \n" "-- In PostGIS 2.0+ the above is also equivalent to the standard\n" "-- the standard alter table. Both will deregister from geometry_columns\n" "ALTER TABLE my_schema.my_spatial_table DROP column geom;" msgstr "" #. Tag: para #: reference_management.xml:210 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_management.xml:216 #, no-c-format msgid "DropGeometryTable" msgstr "" #. Tag: refpurpose #: reference_management.xml:218 #, no-c-format msgid "Drops a table and all its references in geometry_columns." msgstr "" #. Tag: funcsynopsis #: reference_management.xml:223 #, no-c-format msgid "" " boolean DropGeometryTable varchar table_name boolean " "DropGeometryTable varchar schema_name varchar " " table_name " " boolean DropGeometryTable varchar catalog_name varchar " "schema_name varchar table_name " msgstr "" #. Tag: para #: reference_management.xml:256 #, no-c-format msgid "" "Drops a table and all its references in geometry_columns. Note: uses " "current_schema() on schema-aware pgsql installations if schema is not " "provided." msgstr "" #. Tag: para #: reference_management.xml:261 #, no-c-format msgid "" "Changed: 2.0.0 This function is provided for backward compatibility. Now " "that since geometry_columns is now a view against the system catalogs, you " "can drop a table with geometry columns like any other table using DROP " "TABLE" msgstr "" #. Tag: programlisting #: reference_management.xml:269 #, no-c-format msgid "" "SELECT DropGeometryTable ('my_schema','my_spatial_table');\n" "----RESULT output ---\n" "my_schema.my_spatial_table dropped.\n" " \n" "-- The above is now equivalent to --\n" "DROP TABLE my_schema.my_spatial_table;" msgstr "" #. Tag: para #: reference_management.xml:274 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_management.xml:281 #, no-c-format msgid "PostGIS_Full_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:283 #, no-c-format msgid "Reports full postgis version and build configuration infos." msgstr "" #. Tag: funcprototype #: reference_management.xml:289 #, no-c-format msgid "" "text PostGIS_Full_Version " "" msgstr "" #. Tag: para #: reference_management.xml:300 #, no-c-format msgid "" "Reports full postgis version and build configuration infos. Also informs " "about synchronization between libraries and scripts suggesting upgrades as " "needed." msgstr "" #. Tag: programlisting #: reference_management.xml:308 #, no-c-format msgid "" "SELECT PostGIS_Full_Version();\n" " postgis_full_version\n" "----------------------------------------------------------------------------------\n" " POSTGIS=\"1.3.3\" GEOS=\"3.1.0-CAPI-1.5.0\" PROJ=\"Rel. 4.4.9, 29 Oct " "2004\" USE_STATS\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:314 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_management.xml:327 #, no-c-format msgid "PostGIS_GEOS_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:329 #, no-c-format msgid "Returns the version number of the GEOS library." msgstr "" #. Tag: funcprototype #: reference_management.xml:335 #, no-c-format msgid "" "text PostGIS_GEOS_Version " "" msgstr "" #. Tag: para #: reference_management.xml:346 #, no-c-format msgid "" "Returns the version number of the GEOS library, or NULL " "if GEOS support is not enabled." msgstr "" #. Tag: programlisting #: reference_management.xml:353 #, no-c-format msgid "" "SELECT PostGIS_GEOS_Version();\n" " postgis_geos_version\n" "----------------------\n" " 3.1.0-CAPI-1.5.0\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:359 #, no-c-format msgid "" ", , , , " "" msgstr "" #. Tag: refname #: reference_management.xml:369 #, no-c-format msgid "PostGIS_LibXML_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:371 #, no-c-format msgid "Returns the version number of the libxml2 library." msgstr "" #. Tag: funcprototype #: reference_management.xml:377 #, no-c-format msgid "" "text PostGIS_LibXML_Version " "" msgstr "" #. Tag: para #: reference_management.xml:388 #, no-c-format msgid "Returns the version number of the LibXML2 library." msgstr "" #. Tag: para #: reference_management.xml:389 #, no-c-format msgid "Availability: 1.5" msgstr "" #. Tag: programlisting #: reference_management.xml:395 #, no-c-format msgid "" "SELECT PostGIS_LibXML_Version();\n" " postgis_libxml_version\n" "----------------------\n" " 2.7.6\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:401 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:411 #, no-c-format msgid "PostGIS_Lib_Build_Date" msgstr "" #. Tag: refpurpose #: reference_management.xml:413 #, no-c-format msgid "Returns build date of the PostGIS library." msgstr "" #. Tag: funcprototype #: reference_management.xml:418 #, no-c-format msgid "" "text PostGIS_Lib_Build_Date " "" msgstr "" #. Tag: para #: reference_management.xml:429 #, no-c-format msgid "Returns build date of the PostGIS library." msgstr "" #. Tag: programlisting #: reference_management.xml:435 #, no-c-format msgid "" "SELECT PostGIS_Lib_Build_Date();\n" " postgis_lib_build_date\n" "------------------------\n" " 2008-06-21 17:53:21\n" "(1 row)" msgstr "" #. Tag: refname #: reference_management.xml:441 #, no-c-format msgid "PostGIS_Lib_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:443 #, no-c-format msgid "" "Returns the version number of the PostGIS library." msgstr "" #. Tag: funcprototype #: reference_management.xml:449 #, no-c-format msgid "" "text PostGIS_Lib_Version " msgstr "" #. Tag: para #: reference_management.xml:460 #, no-c-format msgid "Returns the version number of the PostGIS library." msgstr "" #. Tag: programlisting #: reference_management.xml:466 #, no-c-format msgid "" "SELECT PostGIS_Lib_Version();\n" " postgis_lib_version\n" "---------------------\n" " 1.3.3\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:472 #, no-c-format msgid "" ", , , , " "" msgstr "" #. Tag: refname #: reference_management.xml:482 #, no-c-format msgid "PostGIS_PROJ_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:484 #, no-c-format msgid "Returns the version number of the PROJ4 library." msgstr "" #. Tag: funcprototype #: reference_management.xml:490 #, no-c-format msgid "" "text PostGIS_PROJ_Version " "" msgstr "" #. Tag: para #: reference_management.xml:501 #, no-c-format msgid "" "Returns the version number of the PROJ4 library, or NULL " "if PROJ4 support is not enabled." msgstr "" #. Tag: programlisting #: reference_management.xml:508 #, no-c-format msgid "" "SELECT PostGIS_PROJ_Version();\n" " postgis_proj_version\n" "-------------------------\n" " Rel. 4.4.9, 29 Oct 2004\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:514 reference_management.xml:556 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:524 #, no-c-format msgid "PostGIS_Scripts_Build_Date" msgstr "" #. Tag: refpurpose #: reference_management.xml:526 #, no-c-format msgid "Returns build date of the PostGIS scripts." msgstr "" #. Tag: funcprototype #: reference_management.xml:531 #, no-c-format msgid "" "text PostGIS_Scripts_Build_Date " "" msgstr "" #. Tag: para #: reference_management.xml:542 #, no-c-format msgid "Returns build date of the PostGIS scripts." msgstr "" #. Tag: para #: reference_management.xml:544 #, no-c-format msgid "Availability: 1.0.0RC1" msgstr "" #. Tag: programlisting #: reference_management.xml:550 #, no-c-format msgid "" "SELECT PostGIS_Scripts_Build_Date();\n" " postgis_scripts_build_date\n" "-------------------------\n" " 2007-08-18 09:09:26\n" "(1 row)" msgstr "" #. Tag: refname #: reference_management.xml:566 #, no-c-format msgid "PostGIS_Scripts_Installed" msgstr "" #. Tag: refpurpose #: reference_management.xml:568 #, no-c-format msgid "" "Returns version of the postgis scripts installed in this " "database." msgstr "" #. Tag: funcprototype #: reference_management.xml:574 #, no-c-format msgid "" "text PostGIS_Scripts_Installed " "" msgstr "" #. Tag: para #: reference_management.xml:585 #, no-c-format msgid "" "Returns version of the postgis scripts installed in this database." msgstr "" #. Tag: para #: reference_management.xml:589 #, no-c-format msgid "" "If the output of this function doesn't match the output of you probably missed to properly upgrade an " "existing database. See the Upgrading " "section for more info." msgstr "" #. Tag: para #: reference_management.xml:596 reference_management.xml:642 #, no-c-format msgid "Availability: 0.9.0" msgstr "" #. Tag: programlisting #: reference_management.xml:602 #, no-c-format msgid "" "SELECT PostGIS_Scripts_Installed();\n" " postgis_scripts_installed\n" "-------------------------\n" " 1.5.0SVN\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:608 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_management.xml:614 #, no-c-format msgid "PostGIS_Scripts_Released" msgstr "" #. Tag: refpurpose #: reference_management.xml:616 #, no-c-format msgid "" "Returns the version number of the postgis.sql script released " "with the installed postgis lib." msgstr "" #. Tag: funcprototype #: reference_management.xml:622 #, no-c-format msgid "" "text PostGIS_Scripts_Released " "" msgstr "" #. Tag: para #: reference_management.xml:633 #, no-c-format msgid "" "Returns the version number of the postgis.sql script released with the " "installed postgis lib." msgstr "" #. Tag: para #: reference_management.xml:637 #, no-c-format msgid "" "Starting with version 1.1.0 this function returns the same value of . Kept for backward compatibility." msgstr "" #. Tag: programlisting #: reference_management.xml:648 #, no-c-format msgid "" "SELECT PostGIS_Scripts_Released();\n" " postgis_scripts_released\n" "-------------------------\n" " 1.3.4SVN\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:654 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_management.xml:660 #, no-c-format msgid "PostGIS_Version" msgstr "" #. Tag: refpurpose #: reference_management.xml:662 #, no-c-format msgid "" "Returns PostGIS version number and compile-time options." msgstr "" #. Tag: funcprototype #: reference_management.xml:668 #, no-c-format msgid "" "text PostGIS_Version " msgstr "" #. Tag: para #: reference_management.xml:679 #, no-c-format msgid "Returns PostGIS version number and compile-time options." msgstr "" #. Tag: programlisting #: reference_management.xml:685 #, no-c-format msgid "" "SELECT PostGIS_Version();\n" " postgis_version\n" "---------------------------------------\n" " 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1\n" "(1 row)" msgstr "" #. Tag: para #: reference_management.xml:691 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_management.xml:701 #, no-c-format msgid "Populate_Geometry_Columns" msgstr "" #. Tag: refpurpose #: reference_management.xml:703 #, no-c-format msgid "" "Ensures geometry columns are defined with type modifiers or have appropriate " "spatial constraints This ensures they will be registered correctly in " "geometry_columns view. By default will convert all " "geometry columns with no type modifier to ones with type modifiers. To get " "old behavior set use_typmod=false" msgstr "" #. Tag: funcsynopsis #: reference_management.xml:709 #, no-c-format msgid "" " text Populate_Geometry_Columns boolean " "use_typmod=true " " int Populate_Geometry_Columns oid relation_oid boolean use_typmod=true " msgstr "" #. Tag: para #: reference_management.xml:728 #, no-c-format msgid "" "Ensures geometry columns have appropriate type modifiers or spatial " "constraints to ensure they are registered correctly in " "geometry_columns table." msgstr "" #. Tag: para #: reference_management.xml:730 #, no-c-format msgid "" "For backwards compatibility and for spatial needs such as tble inheritance " "where each child table may have different geometry type, the old check " "constraint behavior is still supported. If you need the old behavior, you " "need to pass in the new optional argument as false " "use_typmod=false. When this is done geometry columns will " "be created with no type modifiers but will have 3 constraints defined. In " "particular, this means that every geometry column belonging to a table has " "at least three constraints:" msgstr "" #. Tag: para #: reference_management.xml:738 #, no-c-format msgid "" "enforce_dims_the_geom - ensures every geometry has the " "same dimension (see )" msgstr "" #. Tag: para #: reference_management.xml:744 #, no-c-format msgid "" "enforce_geotype_the_geom - ensures every geometry is of " "the same type (see )" msgstr "" #. Tag: para #: reference_management.xml:750 #, no-c-format msgid "" "enforce_srid_the_geom - ensures every geometry is in the " "same projection (see )" msgstr "" #. Tag: para #: reference_management.xml:756 #, no-c-format msgid "" "If a table oid is provided, this function tries to " "determine the srid, dimension, and geometry type of all geometry columns in " "the table, adding constraints as necessary. If successful, an appropriate " "row is inserted into the geometry_columns table, otherwise, the exception is " "caught and an error notice is raised describing the problem." msgstr "" #. Tag: para #: reference_management.xml:763 #, no-c-format msgid "" "If the oid of a view is provided, as with a table oid, " "this function tries to determine the srid, dimension, and type of all the " "geometries in the view, inserting appropriate entries into the " "geometry_columns table, but nothing is done to enforce " "constraints." msgstr "" #. Tag: para #: reference_management.xml:769 #, no-c-format msgid "" "The parameterless variant is a simple wrapper for the parameterized variant " "that first truncates and repopulates the geometry_columns table for every " "spatial table and view in the database, adding spatial constraints to tables " "where appropriate. It returns a summary of the number of geometry columns " "detected in the database and the number that were inserted into the " "geometry_columns table. The parameterized version simply " "returns the number of rows inserted into the geometry_columns table." msgstr "" #. Tag: para #: reference_management.xml:777 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: para #: reference_management.xml:778 #, no-c-format msgid "" "Changed: 2.0.0 By default, now uses type modifiers instead of check " "constraints to constrain geometry types. You can still use check constraint " "behavior instead by using the new use_typmod and setting " "it to false." msgstr "" #. Tag: para #: reference_management.xml:780 #, no-c-format msgid "" "Enhanced: 2.0.0 use_typmod optional argument was " "introduced that allows controlling if columns are created with typmodifiers " "or with check constraints." msgstr "" #. Tag: programlisting #: reference_management.xml:786 #, no-c-format msgid "" "CREATE TABLE public.myspatial_table(gid serial, geom geometry);\n" "INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 " "4)',4326) );\n" "-- This will now use typ modifiers. For this to work, there must exist " "data\n" "SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);\n" "\n" "populate_geometry_columns\n" "--------------------------\n" " 1\n" " \n" " \n" "\\d myspatial_table\n" "\n" " Table \"public.myspatial_table\"\n" " Column | Type | " "Modifiers \n" "--------+---------------------------" "+---------------------------------------------------------------\n" " gid | integer | not null default nextval" "('myspatial_table_gid_seq'::regclass)\n" " geom | geometry(LineString,4326) |" msgstr "" #. Tag: programlisting #: reference_management.xml:788 #, no-c-format msgid "" "-- This will change the geometry columns to use constraints if they are not " "typmod or have constraints already. \n" "--For this to work, there must exist data\n" "CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);\n" "INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, " "3 4)',4326) );\n" "SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, " "false);\n" "populate_geometry_columns\n" "--------------------------\n" " 1\n" "\\d myspatial_table_cs\n" "\n" " Table \"public.myspatial_table_cs\"\n" " Column | Type | " "Modifiers \n" "--------+----------" "+------------------------------------------------------------------\n" " gid | integer | not null default nextval('myspatial_table_cs_gid_seq'::" "regclass)\n" " geom | geometry | \n" "Check constraints:\n" " \"enforce_dims_geom\" CHECK (st_ndims(geom) = 2)\n" " \"enforce_geotype_geom\" CHECK (geometrytype(geom) = 'LINESTRING'::text " "OR geom IS NULL)\n" " \"enforce_srid_geom\" CHECK (st_srid(geom) = 4326)" msgstr "" #. Tag: refname #: reference_management.xml:803 #, no-c-format msgid "UpdateGeometrySRID" msgstr "" #. Tag: refpurpose #: reference_management.xml:805 #, no-c-format msgid "" "Updates the SRID of all features in a geometry column, geometry_columns " "metadata and srid table constraint" msgstr "" #. Tag: funcsynopsis #: reference_management.xml:810 #, no-c-format msgid "" " text UpdateGeometrySRID varchar table_name varchar column_name integer srid text " "UpdateGeometrySRID varchar schema_name varchar " " table_name varchar " " column_name " "integer srid text UpdateGeometrySRID varchar catalog_name varchar " "schema_name varchar table_name varchar column_name integer " " srid " msgstr "" #. Tag: para #: reference_management.xml:864 #, no-c-format msgid "" "Updates the SRID of all features in a geometry column, updating constraints " "and reference in geometry_columns. Note: uses current_schema() on schema-" "aware pgsql installations if schema is not provided." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_operator.xml.po0000644000000000000000000011104412025614072022761 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_operator.xml:3 #, no-c-format msgid "Operators" msgstr "" #. Tag: refname #: reference_operator.xml:6 #, no-c-format msgid "&&" msgstr "" #. Tag: refpurpose #: reference_operator.xml:8 #, no-c-format msgid "" "Returns TRUE if A's 2D bounding box intersects B's 2D " "bounding box." msgstr "" #. Tag: funcsynopsis #: reference_operator.xml:12 #, no-c-format msgid "" " boolean && " " geometry A " " geometry B boolean && geography A geography B " msgstr "" #. Tag: title #: reference_operator.xml:50 reference_operator.xml:111 #: reference_operator.xml:176 reference_operator.xml:234 #: reference_operator.xml:295 reference_operator.xml:353 #: reference_operator.xml:406 reference_operator.xml:475 #: reference_operator.xml:546 reference_operator.xml:599 #: reference_operator.xml:654 reference_operator.xml:712 #: reference_operator.xml:765 reference_operator.xml:818 #: reference_operator.xml:883 reference_operator.xml:949 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_operator.xml:52 #, no-c-format msgid "" "The && operator returns TRUE " "if the 2D bounding box of geometry A intersects the 2D bounding box of " "geometry B." msgstr "" #. Tag: para #: reference_operator.xml:54 reference_operator.xml:115 #: reference_operator.xml:182 reference_operator.xml:243 #: reference_operator.xml:301 reference_operator.xml:358 #: reference_operator.xml:411 reference_operator.xml:551 #: reference_operator.xml:605 reference_operator.xml:660 #: reference_operator.xml:717 reference_operator.xml:770 #: reference_operator.xml:823 #, no-c-format msgid "" "This operand will make use of any indexes that may be available on the " "geometries." msgstr "" #. Tag: para #: reference_operator.xml:57 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces was introduced." msgstr "" #. Tag: para #: reference_operator.xml:58 #, no-c-format msgid "Availability: 1.5.0 support for geography was introduced." msgstr "" #. Tag: para #: reference_operator.xml:59 reference_operator.xml:119 #: reference_operator.xml:240 reference_operator.xml:492 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_operator.xml:60 reference_operator.xml:120 #: reference_operator.xml:241 reference_operator.xml:493 #: reference_operator.xml:827 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: title #: reference_operator.xml:64 reference_operator.xml:187 #: reference_operator.xml:248 reference_operator.xml:306 #: reference_operator.xml:363 reference_operator.xml:416 #: reference_operator.xml:502 reference_operator.xml:556 #: reference_operator.xml:611 reference_operator.xml:665 #: reference_operator.xml:722 reference_operator.xml:775 #: reference_operator.xml:843 reference_operator.xml:899 #: reference_operator.xml:963 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_operator.xml:66 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 && tbl2.column2 AS " "overlaps\n" "FROM ( VALUES\n" " (1, 'LINESTRING(0 0, 3 3)'::geometry),\n" " (2, 'LINESTRING(0 1, 0 5)'::geometry)) AS tbl1,\n" "( VALUES\n" " (3, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | overlaps\n" "---------+---------+----------\n" " 1 | 3 | t\n" " 2 | 3 | f\n" "(2 rows)" msgstr "" #. Tag: title #: reference_operator.xml:71 reference_operator.xml:139 #: reference_operator.xml:193 reference_operator.xml:254 #: reference_operator.xml:312 reference_operator.xml:369 #: reference_operator.xml:422 reference_operator.xml:508 #: reference_operator.xml:562 reference_operator.xml:617 #: reference_operator.xml:671 reference_operator.xml:728 #: reference_operator.xml:781 reference_operator.xml:848 #: reference_operator.xml:915 reference_operator.xml:967 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_operator.xml:73 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_operator.xml:85 #, no-c-format msgid "&&&" msgstr "" #. Tag: refpurpose #: reference_operator.xml:87 #, no-c-format msgid "" "Returns TRUE if A's 3D bounding box intersects B's 3D " "bounding box." msgstr "" #. Tag: funcprototype #: reference_operator.xml:92 #, no-c-format msgid "" "boolean &&& " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:113 #, no-c-format msgid "" "The &&& operator returns TRUE if the n-D bounding box of geometry A intersects the n-D bounding " "box of geometry B." msgstr "" #. Tag: para #: reference_operator.xml:118 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: para #: reference_operator.xml:121 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: para #: reference_operator.xml:122 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: title #: reference_operator.xml:126 #, no-c-format msgid "Examples: 3D LineStrings" msgstr "" #. Tag: programlisting #: reference_operator.xml:128 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 " "AS overlaps_3d, \n" " tbl1.column2 && tbl2.column2 AS " "overlaps_2d\n" "FROM ( VALUES\n" " (1, 'LINESTRING Z(0 0 1, 3 3 2)'::geometry),\n" " (2, 'LINESTRING Z(1 2 0, 0 5 -1)'::geometry)) AS tbl1,\n" "( VALUES\n" " (3, 'LINESTRING Z(1 2 1, 4 6 1)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | overlaps_3d | overlaps_2d\n" "---------+---------+-------------+-------------\n" " 1 | 3 | t | t\n" " 2 | 3 | f | t" msgstr "" #. Tag: title #: reference_operator.xml:132 #, no-c-format msgid "Examples: 3M LineStrings" msgstr "" #. Tag: programlisting #: reference_operator.xml:134 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 " "AS overlaps_3zm, \n" " tbl1.column2 && tbl2.column2 AS " "overlaps_2d\n" "FROM ( VALUES\n" " (1, 'LINESTRING M(0 0 1, 3 3 2)'::geometry),\n" " (2, 'LINESTRING M(1 2 0, 0 5 -1)'::geometry)) AS tbl1,\n" "( VALUES\n" " (3, 'LINESTRING M(1 2 1, 4 6 1)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | overlaps_3zm | overlaps_2d\n" "---------+---------+-------------+-------------\n" " 1 | 3 | t | t\n" " 2 | 3 | f | t" msgstr "" #. Tag: refname #: reference_operator.xml:147 #, no-c-format msgid "&<" msgstr "" #. Tag: refpurpose #: reference_operator.xml:149 #, no-c-format msgid "" "Returns TRUE if A's bounding box overlaps or is to the " "left of B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:154 #, no-c-format msgid "" "boolean &< " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:178 #, no-c-format msgid "" "The &< operator returns TRUE if " "the bounding box of geometry A overlaps or is to the left of the bounding " "box of geometry B, or more accurately, overlaps or is NOT to the right of " "the bounding box of geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:189 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 &< tbl2.column2 AS " "overleft\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING(0 0, 3 3)'::geometry),\n" " (3, 'LINESTRING(0 1, 0 5)'::geometry),\n" " (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | overleft\n" "---------+---------+----------\n" " 1 | 2 | f\n" " 1 | 3 | f\n" " 1 | 4 | t\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:195 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_operator.xml:205 #, no-c-format msgid "&<|" msgstr "" #. Tag: refpurpose #: reference_operator.xml:207 #, no-c-format msgid "" "Returns TRUE if A's bounding box overlaps or is below B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:212 #, no-c-format msgid "" "boolean &<| " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:236 #, no-c-format msgid "" "The &<| operator returns TRUE " "if the bounding box of geometry A overlaps or is below of the bounding box " "of geometry B, or more accurately, overlaps or is NOT above the bounding box " "of geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:250 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 &<| tbl2.column2 AS " "overbelow\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING(0 0, 3 3)'::geometry),\n" " (3, 'LINESTRING(0 1, 0 5)'::geometry),\n" " (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | overbelow\n" "---------+---------+-----------\n" " 1 | 2 | f\n" " 1 | 3 | t\n" " 1 | 4 | t\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:256 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_operator.xml:266 #, no-c-format msgid "&>" msgstr "" #. Tag: refpurpose #: reference_operator.xml:268 #, no-c-format msgid "" "Returns TRUE if A' bounding box overlaps or is to the " "right of B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:273 #, no-c-format msgid "" "boolean &> " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:297 #, no-c-format msgid "" "The &> operator returns TRUE if " "the bounding box of geometry A overlaps or is to the right of the bounding " "box of geometry B, or more accurately, overlaps or is NOT to the left of the " "bounding box of geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:308 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 &> tbl2.column2 AS " "overright\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING(0 0, 3 3)'::geometry),\n" " (3, 'LINESTRING(0 1, 0 5)'::geometry),\n" " (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | overright\n" "---------+---------+-----------\n" " 1 | 2 | t\n" " 1 | 3 | t\n" " 1 | 4 | f\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:314 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_operator.xml:324 #, no-c-format msgid "<<" msgstr "" #. Tag: refpurpose #: reference_operator.xml:326 #, no-c-format msgid "" "Returns TRUE if A's bounding box is strictly to the left " "of B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:331 #, no-c-format msgid "" "boolean << " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:355 #, no-c-format msgid "" "The << operator returns TRUE if " "the bounding box of geometry A is strictly to the left of the bounding box " "of geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:365 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 << tbl2.column2 AS " "left\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING (1 2, 1 5)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING (0 0, 4 3)'::geometry),\n" " (3, 'LINESTRING (6 0, 6 5)'::geometry),\n" " (4, 'LINESTRING (2 2, 5 6)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | left\n" "---------+---------+------\n" " 1 | 2 | f\n" " 1 | 3 | t\n" " 1 | 4 | t\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:371 reference_operator.xml:564 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_operator.xml:377 #, no-c-format msgid "<<|" msgstr "" #. Tag: refpurpose #: reference_operator.xml:379 #, no-c-format msgid "" "Returns TRUE if A's bounding box is strictly below B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:384 #, no-c-format msgid "" "boolean <<| " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:408 #, no-c-format msgid "" "The <<| operator returns TRUE if " "the bounding box of geometry A is strictly below the bounding box of " "geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:418 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 <<| tbl2.column2 AS " "below\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING (1 4, 1 7)'::geometry),\n" " (3, 'LINESTRING (6 1, 6 5)'::geometry),\n" " (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | below\n" "---------+---------+-------\n" " 1 | 2 | t\n" " 1 | 3 | f\n" " 1 | 4 | f\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:424 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_operator.xml:430 #, no-c-format msgid "=" msgstr "" #. Tag: refpurpose #: reference_operator.xml:432 #, no-c-format msgid "" "Returns TRUE if A's bounding box is the same as B's. Uses " "double precision bounding box." msgstr "" #. Tag: funcsynopsis #: reference_operator.xml:436 #, no-c-format msgid "" " boolean = " " geometry A " " geometry B boolean = geography A geography B " msgstr "" #. Tag: para #: reference_operator.xml:477 #, no-c-format msgid "" "The = operator returns TRUE if the " "bounding box of geometry/geography A is the same as the bounding box of " "geometry/geography B. PostgreSQL uses the =, <, and > operators " "defined for geometries to perform internal orderings and comparison of " "geometries (ie. in a GROUP BY or ORDER BY clause)." msgstr "" #. Tag: para #: reference_operator.xml:482 #, no-c-format msgid "" "This is cause for a lot of confusion. When you compare geometryA = geometryB " "it will return true even when the geometries are clearly different IF their " "bounding boxes are the same. To check for true equality use or " msgstr "" #. Tag: para #: reference_operator.xml:489 #, no-c-format msgid "" "This operand will NOT make use of any indexes that may be available on the " "geometries." msgstr "" #. Tag: para #: reference_operator.xml:494 #, no-c-format msgid "" "Changed: 2.0.0 , the bounding box of geometries was changed to use double " "precision instead of float4 precision of prior. The side effect of this is " "that in particular points in prior versions that were a little different may " "have returned true in prior versions and false in 2.0+ since their float4 " "boxes would be the same but there float8 (double precision), would be " "different." msgstr "" #. Tag: programlisting #: reference_operator.xml:504 #, no-c-format msgid "" "SELECT 'LINESTRING(0 0, 0 1, 1 0)'::geometry = 'LINESTRING(1 1, 0 0)'::" "geometry;\n" " ?column?\n" "----------\n" " t\n" "(1 row)\n" "\n" "SELECT ST_AsText(column1)\n" "FROM ( VALUES\n" " ('LINESTRING(0 0, 1 1)'::geometry),\n" " ('LINESTRING(1 1, 0 0)'::geometry)) AS foo;\n" " st_astext\n" "---------------------\n" " LINESTRING(0 0,1 1)\n" " LINESTRING(1 1,0 0)\n" "(2 rows)\n" "\n" "-- Note: the GROUP BY uses the \"=\" to compare for geometry equivalency.\n" "SELECT ST_AsText(column1)\n" "FROM ( VALUES\n" " ('LINESTRING(0 0, 1 1)'::geometry),\n" " ('LINESTRING(1 1, 0 0)'::geometry)) AS foo\n" "GROUP BY column1;\n" " st_astext\n" "---------------------\n" " LINESTRING(0 0,1 1)\n" "(1 row)\n" "\n" "-- In versions prior to 2.0, this used to return true --\n" " SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') =\n" " ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect;\n" " \n" "--pt_intersect --\n" "f" msgstr "" #. Tag: para #: reference_operator.xml:510 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_operator.xml:517 #, no-c-format msgid ">>" msgstr "" #. Tag: refpurpose #: reference_operator.xml:519 #, no-c-format msgid "" "Returns TRUE if A's bounding box is strictly to the right " "of B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:524 #, no-c-format msgid "" "boolean >> " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:548 #, no-c-format msgid "" "The >> operator returns TRUE if " "the bounding box of geometry A is strictly to the right of the bounding box " "of geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:558 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 >> tbl2.column2 AS " "right\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING (1 4, 1 7)'::geometry),\n" " (3, 'LINESTRING (6 1, 6 5)'::geometry),\n" " (4, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | right\n" "---------+---------+-------\n" " 1 | 2 | t\n" " 1 | 3 | f\n" " 1 | 4 | f\n" "(3 rows)" msgstr "" #. Tag: refname #: reference_operator.xml:570 #, no-c-format msgid "@" msgstr "" #. Tag: refpurpose #: reference_operator.xml:572 #, no-c-format msgid "" "Returns TRUE if A's bounding box is contained by B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:577 #, no-c-format msgid "" "boolean @ geometry " " A geometry B " msgstr "" #. Tag: para #: reference_operator.xml:601 #, no-c-format msgid "" "The @ operator returns TRUE if the " "bounding box of geometry A is completely contained by the bounding box of " "geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:613 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 @ tbl2.column2 AS contained\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING (0 0, 4 4)'::geometry),\n" " (3, 'LINESTRING (2 2, 4 4)'::geometry),\n" " (4, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | contained\n" "---------+---------+-----------\n" " 1 | 2 | t\n" " 1 | 3 | f\n" " 1 | 4 | t\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:619 reference_operator.xml:783 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_operator.xml:625 #, no-c-format msgid "|&>" msgstr "" #. Tag: refpurpose #: reference_operator.xml:627 #, no-c-format msgid "" "Returns TRUE if A's bounding box overlaps or is above B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:632 #, no-c-format msgid "" "boolean |&> " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:656 #, no-c-format msgid "" "The |&> operator returns TRUE " "if the bounding box of geometry A overlaps or is above the bounding box of " "geometry B, or more accurately, overlaps or is NOT below the bounding box of " "geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:667 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 |&> tbl2.column2 AS " "overabove\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING(0 0, 3 3)'::geometry),\n" " (3, 'LINESTRING(0 1, 0 5)'::geometry),\n" " (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | overabove\n" "---------+---------+-----------\n" " 1 | 2 | t\n" " 1 | 3 | f\n" " 1 | 4 | f\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:673 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_operator.xml:683 #, no-c-format msgid "|>>" msgstr "" #. Tag: refpurpose #: reference_operator.xml:685 #, no-c-format msgid "" "Returns TRUE if A's bounding box is strictly above B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:690 #, no-c-format msgid "" "boolean |>> " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_operator.xml:714 #, no-c-format msgid "" "The |>> operator returns TRUE if " "the bounding box of geometry A is strictly to the right of the bounding box " "of geometry B." msgstr "" #. Tag: programlisting #: reference_operator.xml:724 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 |>> tbl2.column2 AS " "above\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING (1 4, 1 7)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING (0 0, 4 2)'::geometry),\n" " (3, 'LINESTRING (6 1, 6 5)'::geometry),\n" " (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | above\n" "---------+---------+-------\n" " 1 | 2 | t\n" " 1 | 3 | f\n" " 1 | 4 | f\n" "(3 rows)" msgstr "" #. Tag: para #: reference_operator.xml:730 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_operator.xml:736 #, no-c-format msgid "~" msgstr "" #. Tag: refpurpose #: reference_operator.xml:738 #, no-c-format msgid "Returns TRUE if A's bounding box contains B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:743 #, no-c-format msgid "" "boolean ~ geometry " " A geometry B " msgstr "" #. Tag: para #: reference_operator.xml:767 #, no-c-format msgid "" "The ~ operator returns TRUE if the " "bounding box of geometry A completely contains the bounding box of geometry " "B." msgstr "" #. Tag: programlisting #: reference_operator.xml:777 #, no-c-format msgid "" "SELECT tbl1.column1, tbl2.column1, tbl1.column2 ~ tbl2.column2 AS contains\n" "FROM\n" " ( VALUES\n" " (1, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl1,\n" " ( VALUES\n" " (2, 'LINESTRING (0 0, 4 4)'::geometry),\n" " (3, 'LINESTRING (1 1, 2 2)'::geometry),\n" " (4, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl2;\n" "\n" " column1 | column1 | contains\n" "---------+---------+----------\n" " 1 | 2 | f\n" " 1 | 3 | t\n" " 1 | 4 | t\n" "(3 rows)" msgstr "" #. Tag: refname #: reference_operator.xml:789 #, no-c-format msgid "~=" msgstr "" #. Tag: refpurpose #: reference_operator.xml:791 #, no-c-format msgid "Returns TRUE if A's bounding box is the same as B's." msgstr "" #. Tag: funcprototype #: reference_operator.xml:796 #, no-c-format msgid "" "boolean ~= geometry " " A geometry B " msgstr "" #. Tag: para #: reference_operator.xml:820 #, no-c-format msgid "" "The ~= operator returns TRUE if the " "bounding box of geometry/geography A is the same as the bounding box of " "geometry/geography B." msgstr "" #. Tag: para #: reference_operator.xml:826 #, no-c-format msgid "Availability: 1.5.0 changed behavior" msgstr "" #. Tag: para #: reference_operator.xml:830 #, no-c-format msgid "" "This operator has changed behavior in PostGIS 1.5 from testing for actual " "geometric equality to only checking for bounding box equality. To complicate " "things it also depends on if you have done a hard or soft upgrade which " "behavior your database has. To find out which behavior your database has you " "can run the query below. To check for true equality use or and to check for " "bounding box equality ; operator is a " "safer option." msgstr "" #. Tag: programlisting #: reference_operator.xml:844 #, no-c-format msgid "" "select 'LINESTRING(0 0, 1 1)'::geometry ~= 'LINESTRING(0 1, 1 0)'::geometry " "as equality;\n" " equality |\n" "-----------------+\n" " t |" msgstr "" #. Tag: para #: reference_operator.xml:845 #, no-c-format msgid "" "The above can be used to test if you have the new or old behavior of ~= " "operator." msgstr "" #. Tag: para #: reference_operator.xml:849 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_operator.xml:855 #, no-c-format msgid "<->" msgstr "" #. Tag: refpurpose #: reference_operator.xml:857 #, no-c-format msgid "" "Returns the distance between two points. For point / point checks it uses " "floating point accuracy (as opposed to the double precision accuracy of the " "underlying point geometry). For other geometry types the distance between " "the floating point bounding box centroids is returned. Useful for doing " "distance ordering and nearest neighbor limits using KNN gist functionality." msgstr "" #. Tag: funcprototype #: reference_operator.xml:864 #, no-c-format msgid "" "double precision <-> " " geometry A " " geometry B " msgstr "" #. Tag: para #: reference_operator.xml:885 #, no-c-format msgid "" "The <-> operator returns distance between two " "points read from the spatial index for points (float precision). For other " "geometries it returns the distance from centroid of bounding box of " "geometries. Useful for doing nearest neighbor approximate distance ordering." msgstr "" #. Tag: para #: reference_operator.xml:888 reference_operator.xml:953 #, no-c-format msgid "" "This operand will make use of any indexes that may be available on the " "geometries. It is different from other operators that use spatial indexes in " "that the spatial index is only used when the operator is in the ORDER BY " "clause." msgstr "" #. Tag: para #: reference_operator.xml:891 #, no-c-format msgid "" "Index only kicks in if one of the geometries is a constant (not in a " "subquery/cte). e.g. 'SRID=3005;POINT(1011102 450541)'::geometry instead of a." "geom" msgstr "" #. Tag: para #: reference_operator.xml:893 reference_operator.xml:958 #, no-c-format msgid "Availability: 2.0.0 only available for PostgreSQL 9.1+" msgstr "" #. Tag: programlisting #: reference_operator.xml:900 #, no-c-format msgid "" "\n" "\n" " d | edabbr | vaabbr\n" "------------------+--------+--------\n" " 0 | ALQ | 128\n" " 5541.57712511724 | ALQ | 129A\n" " 5579.67450712005 | ALQ | 001\n" " 6083.4207708641 | ALQ | 131\n" " 7691.2205404848 | ALQ | 003\n" " 7900.75451037313 | ALQ | 122\n" " 8694.20710669982 | ALQ | 129B\n" " 9564.24289057111 | ALQ | 130\n" " 12089.665931705 | ALQ | 127\n" " 18472.5531479404 | ALQ | 002\n" "(10 rows)" msgstr "" #. Tag: para #: reference_operator.xml:901 #, no-c-format msgid "Then the KNN raw answer:" msgstr "" #. Tag: programlisting #: reference_operator.xml:904 #, no-c-format msgid "" " 'SRID=3005;POINT(1011102 450541)'::geometry limit 10;]]>\n" "\n" " d | edabbr | vaabbr\n" "------------------+--------+--------\n" " 0 | ALQ | 128\n" " 5579.67450712005 | ALQ | 001\n" " 5541.57712511724 | ALQ | 129A\n" " 8694.20710669982 | ALQ | 129B\n" " 9564.24289057111 | ALQ | 130\n" " 6083.4207708641 | ALQ | 131\n" " 12089.665931705 | ALQ | 127\n" " 24795.264503022 | ALQ | 124\n" " 24587.6584922302 | ALQ | 123\n" " 26764.2555463114 | ALQ | 125\n" "(10 rows)" msgstr "" #. Tag: para #: reference_operator.xml:905 #, no-c-format msgid "" "Note the misordering in the actual distances and the different entries that " "actually show up in the top 10." msgstr "" #. Tag: para #: reference_operator.xml:909 #, no-c-format msgid "Finally the hybrid:" msgstr "" #. Tag: programlisting #: reference_operator.xml:912 #, no-c-format msgid "" " 'SRID=3005;POINT(1011102 450541)'::geometry LIMIT 100) \n" " SELECT * \n" " FROM index_query \n" " ORDER BY d limit 10;]]>\n" "\n" " d | edabbr | vaabbr\n" "------------------+--------+--------\n" " 0 | ALQ | 128\n" " 5541.57712511724 | ALQ | 129A\n" " 5579.67450712005 | ALQ | 001\n" " 6083.4207708641 | ALQ | 131\n" " 7691.2205404848 | ALQ | 003\n" " 7900.75451037313 | ALQ | 122\n" " 8694.20710669982 | ALQ | 129B\n" " 9564.24289057111 | ALQ | 130\n" " 12089.665931705 | ALQ | 127\n" " 18472.5531479404 | ALQ | 002\n" "(10 rows)" msgstr "" #. Tag: para #: reference_operator.xml:916 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_operator.xml:922 #, no-c-format msgid "<#>" msgstr "" #. Tag: refpurpose #: reference_operator.xml:924 #, no-c-format msgid "" "Returns the distance between bounding box of 2 geometries. For point / point " "checks it's almost the same as distance (though may be different since the " "bounding box is at floating point accuracy and geometries are double " "precision). Useful for doing distance ordering and nearest neighbor limits " "using KNN gist functionality." msgstr "" #. Tag: funcprototype #: reference_operator.xml:930 #, no-c-format msgid "" "double precision <#> " " geometry A " " geometry B " msgstr "" #. Tag: para #: reference_operator.xml:951 #, no-c-format msgid "" "The <#> KNN GIST operator returns distance between " "two floating point bounding boxes read from the spatial index if available. " "Useful for doing nearest neighbor approximate distance ordering." msgstr "" #. Tag: para #: reference_operator.xml:956 #, no-c-format msgid "" "Index only kicks in if one of the geometries is a constant e.g. ORDER BY " "(ST_GeomFromText('POINT(1 2)') <#> geom) instead of g1.geom <#>." msgstr "" #. Tag: programlisting #: reference_operator.xml:964 #, no-c-format msgid "" " ST_GeomFromText('LINESTRING(746149 2948672,745954 " "2948576,\n" " 745787 2948499,745740 2948468,745712 2948438,\n" " 745690 2948384,745677 2948319)',2249) As b_dist, \n" " ST_Distance(b.geom, ST_GeomFromText('LINESTRING(746149 " "2948672,745954 2948576,\n" " 745787 2948499,745740 2948468,745712 2948438,\n" " 745690 2948384,745677 2948319)',2249)) As act_dist\n" " FROM bos_roads As b \n" " ORDER BY b_dist, b.tlid\n" " LIMIT 100) As foo\n" " ORDER BY act_dist, tlid LIMIT 10;]]>\n" "\n" " tlid | mtfcc | b_dist | act_dist\n" "-----------+-------+------------------+------------------\n" " 85732027 | S1400 | 0 | 0\n" " 85732029 | S1400 | 0 | 0\n" " 85732031 | S1400 | 0 | 0\n" " 85734335 | S1400 | 0 | 0\n" " 85736037 | S1400 | 0 | 0\n" " 624683742 | S1400 | 0 | 128.528874268666\n" " 85719343 | S1400 | 260.839270432962 | 260.839270432962\n" " 85741826 | S1400 | 164.759294123275 | 260.839270432962\n" " 85732032 | S1400 | 277.75 | 311.830282365264\n" " 85735592 | S1400 | 222.25 | 311.830282365264\n" "(10 rows)" msgstr "" #. Tag: para #: reference_operator.xml:968 #, no-c-format msgid "" ", , " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/performance_tips.xml.po0000644000000000000000000003212412025614072022451 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: performance_tips.xml:3 #, no-c-format msgid "Performance tips" msgstr "" #. Tag: title #: performance_tips.xml:6 #, no-c-format msgid "Small tables of large geometries" msgstr "" #. Tag: title #: performance_tips.xml:9 #, no-c-format msgid "Problem description" msgstr "" #. Tag: para #: performance_tips.xml:11 #, no-c-format msgid "" "Current PostgreSQL versions (including 8.0) suffer from a query optimizer " "weakness regarding TOAST tables. TOAST tables are a kind of \"extension room" "\" used to store large (in the sense of data size) values that do not fit " "into normal data pages (like long texts, images or complex geometries with " "lots of vertices), see the PostgreSQL Documentation for TOAST " "for more information)." msgstr "" #. Tag: para #: performance_tips.xml:19 #, no-c-format msgid "" "The problem appears if you happen to have a table with rather large " "geometries, but not too much rows of them (like a table containing the " "boundaries of all European countries in high resolution). Then the table " "itself is small, but it uses lots of TOAST space. In our example case, the " "table itself had about 80 rows and used only 3 data pages, but the TOAST " "table used 8225 pages." msgstr "" #. Tag: para #: performance_tips.xml:26 #, no-c-format msgid "" "Now issue a query where you use the geometry operator && to search " "for a bounding box that matches only very few of those rows. Now the query " "optimizer sees that the table has only 3 pages and 80 rows. He estimates " "that a sequential scan on such a small table is much faster than using an " "index. And so he decides to ignore the GIST index. Usually, this estimation " "is correct. But in our case, the && operator has to fetch every " "geometry from disk to compare the bounding boxes, thus reading all TOAST " "pages, too." msgstr "" #. Tag: para #: performance_tips.xml:35 #, no-c-format msgid "" "To see whether your suffer from this bug, use the \"EXPLAIN ANALYZE\" " "postgresql command. For more information and the technical details, you can " "read the thread on the postgres performance mailing list: http://archives." "postgresql.org/pgsql-performance/2005-02/msg00030.php" msgstr "" #. Tag: title #: performance_tips.xml:43 #, no-c-format msgid "Workarounds" msgstr "" #. Tag: para #: performance_tips.xml:45 #, no-c-format msgid "" "The PostgreSQL people are trying to solve this issue by making the query " "estimation TOAST-aware. For now, here are two workarounds:" msgstr "" #. Tag: para #: performance_tips.xml:48 #, no-c-format msgid "" "The first workaround is to force the query planner to use the index. Send " "\"SET enable_seqscan TO off;\" to the server before issuing the query. This " "basically forces the query planner to avoid sequential scans whenever " "possible. So it uses the GIST index as usual. But this flag has to be set on " "every connection, and it causes the query planner to make misestimations in " "other cases, so you should \"SET enable_seqscan TO on;\" after the query." msgstr "" #. Tag: para #: performance_tips.xml:56 #, no-c-format msgid "" "The second workaround is to make the sequential scan as fast as the query " "planner thinks. This can be achieved by creating an additional column that " "\"caches\" the bbox, and matching against this. In our example, the commands " "are like:" msgstr "" #. Tag: programlisting #: performance_tips.xml:61 #, no-c-format msgid "" "SELECT AddGeometryColumn" "('myschema','mytable','bbox','4326','GEOMETRY','2'); \n" "UPDATE mytable SET bbox = ST_Envelope(ST_Force_2d(the_geom));" msgstr "" #. Tag: para #: performance_tips.xml:63 #, no-c-format msgid "" "Now change your query to use the && operator against bbox instead of " "geom_column, like:" msgstr "" #. Tag: programlisting #: performance_tips.xml:66 #, no-c-format msgid "" "SELECT geom_column \n" "FROM mytable \n" "WHERE bbox && ST_SetSRID('BOX3D(0 0,1 1)'::box3d,4326);" msgstr "" #. Tag: para #: performance_tips.xml:68 #, no-c-format msgid "" "Of course, if you change or add rows to mytable, you have to keep the bbox " "\"in sync\". The most transparent way to do this would be triggers, but you " "also can modify your application to keep the bbox column current or run the " "UPDATE query above after every modification." msgstr "" #. Tag: title #: performance_tips.xml:77 #, no-c-format msgid "CLUSTERing on geometry indices" msgstr "" #. Tag: para #: performance_tips.xml:79 #, no-c-format msgid "" "For tables that are mostly read-only, and where a single index is used for " "the majority of queries, PostgreSQL offers the CLUSTER command. This command " "physically reorders all the data rows in the same order as the index " "criteria, yielding two performance advantages: First, for index range scans, " "the number of seeks on the data table is drastically reduced. Second, if " "your working set concentrates to some small intervals on the indices, you " "have a more efficient caching because the data rows are spread along fewer " "data pages. (Feel invited to read the CLUSTER command documentation from the " "PostgreSQL manual at this point.)" msgstr "" #. Tag: para #: performance_tips.xml:89 #, no-c-format msgid "" "However, currently PostgreSQL does not allow clustering on PostGIS GIST " "indices because GIST indices simply ignores NULL values, you get an error " "message like:" msgstr "" #. Tag: programlisting #: performance_tips.xml:93 #, no-c-format msgid "" "lwgeom=# CLUSTER my_geom_index ON my_table; \n" "ERROR: cannot cluster when index access method does not handle null values\n" "HINT: You may be able to work around this by marking column \"the_geom\" NOT " "NULL." msgstr "" #. Tag: para #: performance_tips.xml:95 #, no-c-format msgid "" "As the HINT message tells you, one can work around this deficiency by adding " "a \"not null\" constraint to the table:" msgstr "" #. Tag: programlisting #: performance_tips.xml:98 #, no-c-format msgid "" "lwgeom=# ALTER TABLE my_table ALTER COLUMN the_geom SET not null; \n" "ALTER TABLE" msgstr "" #. Tag: para #: performance_tips.xml:100 #, no-c-format msgid "" "Of course, this will not work if you in fact need NULL values in your " "geometry column. Additionally, you must use the above method to add the " "constraint, using a CHECK constraint like \"ALTER TABLE blubb ADD CHECK " "(geometry is not null);\" will not work." msgstr "" #. Tag: title #: performance_tips.xml:107 #, no-c-format msgid "Avoiding dimension conversion" msgstr "" #. Tag: para #: performance_tips.xml:109 #, no-c-format msgid "" "Sometimes, you happen to have 3D or 4D data in your table, but always access " "it using OpenGIS compliant ST_AsText() or ST_AsBinary() functions that only " "output 2D geometries. They do this by internally calling the ST_Force_2d() " "function, which introduces a significant overhead for large geometries. To " "avoid this overhead, it may be feasible to pre-drop those additional " "dimensions once and forever:" msgstr "" #. Tag: programlisting #: performance_tips.xml:116 #, no-c-format msgid "" "UPDATE mytable SET the_geom = ST_Force_2d(the_geom); \n" "VACUUM FULL ANALYZE mytable;" msgstr "" #. Tag: para #: performance_tips.xml:118 #, no-c-format msgid "" "Note that if you added your geometry column using AddGeometryColumn() " "there'll be a constraint on geometry dimension. To bypass it you will need " "to drop the constraint. Remember to update the entry in the geometry_columns " "table and recreate the constraint afterwards." msgstr "" #. Tag: para #: performance_tips.xml:124 #, no-c-format msgid "" "In case of large tables, it may be wise to divide this UPDATE into smaller " "portions by constraining the UPDATE to a part of the table via a WHERE " "clause and your primary key or another feasible criteria, and running a " "simple \"VACUUM;\" between your UPDATEs. This drastically reduces the need " "for temporary disk space. Additionally, if you have mixed dimension " "geometries, restricting the UPDATE by \"WHERE dimension(the_geom)>2\" " "skips re-writing of geometries that already are in 2D." msgstr "" #. Tag: title #: performance_tips.xml:136 #, no-c-format msgid "Tuning your configuration" msgstr "" #. Tag: para #: performance_tips.xml:138 #, no-c-format msgid "" "These tips are taken from Kevin Neufeld's presentation \"Tips for the " "PostGIS Power User\" at the FOSS4G 2007 conference. Depending on your use of " "PostGIS (for example, static data and complex analysis vs frequently updated " "data and lots of users) these changes can provide significant speedups to " "your queries." msgstr "" #. Tag: para #: performance_tips.xml:144 #, no-c-format msgid "" "For a more tips (and better formatting), the original presentation is at " " http://2007.foss4g.org/presentations/view.php?" "abstract_id=117." msgstr "" #. Tag: title #: performance_tips.xml:151 #, no-c-format msgid "Startup" msgstr "" #. Tag: para #: performance_tips.xml:153 #, no-c-format msgid "These settings are configured in postgresql.conf:" msgstr "" #. Tag: ulink #: performance_tips.xml:158 #, no-c-format msgid "checkpoint_segments" msgstr "" #. Tag: para #: performance_tips.xml:163 #, no-c-format msgid "" "Maximum number of log file segments between automatic WAL checkpoints (each " "segment is normally 16MB); default is 3" msgstr "" #. Tag: para #: performance_tips.xml:169 #, no-c-format msgid "" "Set to at least 10 or 30 for databases with heavy write activity, or more " "for large database loads. Another article on the topic worth reading Greg Smith: Checkpoint and Background writer" msgstr "" #. Tag: para #: performance_tips.xml:175 #, no-c-format msgid "Possibly store the xlog on a separate disk device" msgstr "" #. Tag: ulink #: performance_tips.xml:182 #, no-c-format msgid "constraint_exclusion" msgstr "" #. Tag: para #: performance_tips.xml:187 #, no-c-format msgid "" "Default: off (prior to PostgreSQL 8.4 and for PostgreSQL 8.4+ is set to " "partition)" msgstr "" #. Tag: para #: performance_tips.xml:192 #, no-c-format msgid "" "This is generally used for table partitioning. If you are running PostgreSQL " "versions below 8.4, set to \"on\" to ensure the query planner will optimize " "as desired. As of PostgreSQL 8.4, the default for this is set to \"partition" "\" which is ideal for PostgreSQL 8.4 and above since it will force the " "planner to only analyze tables for constraint consideration if they are in " "an inherited hierarchy and not pay the planner penalty otherwise." msgstr "" #. Tag: ulink #: performance_tips.xml:202 #, no-c-format msgid "shared_buffers" msgstr "" #. Tag: para #: performance_tips.xml:207 #, no-c-format msgid "Default: ~32MB" msgstr "" #. Tag: para #: performance_tips.xml:212 #, no-c-format msgid "Set to about 1/3 to 3/4 of available RAM" msgstr "" #. Tag: title #: performance_tips.xml:220 #, no-c-format msgid "Runtime" msgstr "" #. Tag: para #: performance_tips.xml:222 #, no-c-format msgid "" "work_mem (the memory used for sort " "operations and complex queries)" msgstr "" #. Tag: para #: performance_tips.xml:228 #, no-c-format msgid "Default: 1MB" msgstr "" #. Tag: para #: performance_tips.xml:233 #, no-c-format msgid "Adjust up for large dbs, complex queries, lots of RAM" msgstr "" #. Tag: para #: performance_tips.xml:238 #, no-c-format msgid "Adjust down for many concurrent users or low RAM." msgstr "" #. Tag: para #: performance_tips.xml:243 #, no-c-format msgid "If you have lots of RAM and few developers:" msgstr "" #. Tag: programlisting #: performance_tips.xml:245 #, no-c-format msgid "SET work_mem TO 1200000;" msgstr "" #. Tag: para #: performance_tips.xml:250 #, no-c-format msgid "" "maintenance_work_mem (used " "for VACUUM, CREATE INDEX, etc.)" msgstr "" #. Tag: para #: performance_tips.xml:256 #, no-c-format msgid "Default: 16MB" msgstr "" #. Tag: para #: performance_tips.xml:261 #, no-c-format msgid "Generally too low - ties up I/O, locks objects while swapping memory" msgstr "" #. Tag: para #: performance_tips.xml:266 #, no-c-format msgid "" "Recommend 32MB to 256MB on production servers w/lots of RAM, but depends on " "the # of concurrent users. If you have lots of RAM and few developers:" msgstr "" #. Tag: programlisting #: performance_tips.xml:269 #, no-c-format msgid "SET maintainence_work_mem TO 1200000;" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_measure.xml.po0000644000000000000000000044606512035636370022613 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-11 21:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_measure.xml:3 #, no-c-format msgid "Spatial Relationships and Measurements" msgstr "" #. Tag: refname #: reference_measure.xml:6 #, no-c-format msgid "ST_3DClosestPoint" msgstr "" #. Tag: refpurpose #: reference_measure.xml:8 #, no-c-format msgid "" "Returns the 3-dimensional point on g1 that is closest to g2. This is the " "first point of the 3D shortest line." msgstr "" #. Tag: funcprototype #: reference_measure.xml:14 #, no-c-format msgid "" "geometry ST_3DClosestPoint " "geometry g1 " "geometry g2" msgstr "" #. Tag: title #: reference_measure.xml:27 reference_measure.xml:92 reference_measure.xml:143 #: reference_measure.xml:195 reference_measure.xml:252 #: reference_measure.xml:302 reference_measure.xml:371 #: reference_measure.xml:417 reference_measure.xml:489 #: reference_measure.xml:547 reference_measure.xml:621 #: reference_measure.xml:739 reference_measure.xml:812 #: reference_measure.xml:964 reference_measure.xml:1045 #: reference_measure.xml:1127 reference_measure.xml:1187 #: reference_measure.xml:1353 reference_measure.xml:1488 #: reference_measure.xml:1566 reference_measure.xml:1627 #: reference_measure.xml:1679 reference_measure.xml:1726 #: reference_measure.xml:1775 reference_measure.xml:1828 #: reference_measure.xml:1910 reference_measure.xml:1973 #: reference_measure.xml:2022 reference_measure.xml:2082 #: reference_measure.xml:2145 reference_measure.xml:2195 #: reference_measure.xml:2228 reference_measure.xml:2273 #: reference_measure.xml:2325 reference_measure.xml:2376 #: reference_measure.xml:2428 reference_measure.xml:2516 #: reference_measure.xml:2559 reference_measure.xml:2651 #: reference_measure.xml:2700 reference_measure.xml:2737 #: reference_measure.xml:2779 reference_measure.xml:2826 #: reference_measure.xml:2884 reference_measure.xml:2950 #: reference_measure.xml:2993 reference_measure.xml:3072 #: reference_measure.xml:3220 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_measure.xml:29 #, no-c-format msgid "" "Returns the 3-dimensional point on g1 that is closest to g2. This is the " "first point of the 3D shortest line. The 3D length of the 3D shortest line " "is the 3D distance." msgstr "" #. Tag: para #: reference_measure.xml:32 reference_measure.xml:97 reference_measure.xml:148 #: reference_measure.xml:210 reference_measure.xml:265 #: reference_measure.xml:311 reference_measure.xml:376 #: reference_measure.xml:430 reference_measure.xml:2027 #: reference_measure.xml:2232 reference_measure.xml:2287 #: reference_measure.xml:2384 reference_measure.xml:2741 #: reference_measure.xml:2787 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_measure.xml:34 reference_measure.xml:99 reference_measure.xml:150 #: reference_measure.xml:212 reference_measure.xml:267 #: reference_measure.xml:313 reference_measure.xml:378 #: reference_measure.xml:432 reference_measure.xml:499 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_measure.xml:35 reference_measure.xml:102 #: reference_measure.xml:153 reference_measure.xml:209 #: reference_measure.xml:259 reference_measure.xml:310 #: reference_measure.xml:380 reference_measure.xml:429 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: title #: reference_measure.xml:39 reference_measure.xml:106 #: reference_measure.xml:157 reference_measure.xml:217 #: reference_measure.xml:317 reference_measure.xml:384 #: reference_measure.xml:436 reference_measure.xml:505 #: reference_measure.xml:563 reference_measure.xml:647 #: reference_measure.xml:749 reference_measure.xml:850 #: reference_measure.xml:1003 reference_measure.xml:1081 #: reference_measure.xml:1156 reference_measure.xml:1253 #: reference_measure.xml:1388 reference_measure.xml:1511 #: reference_measure.xml:1580 reference_measure.xml:1652 #: reference_measure.xml:1693 reference_measure.xml:1741 #: reference_measure.xml:1789 reference_measure.xml:1846 #: reference_measure.xml:1943 reference_measure.xml:1992 #: reference_measure.xml:2033 reference_measure.xml:2238 #: reference_measure.xml:2292 reference_measure.xml:2344 #: reference_measure.xml:2390 reference_measure.xml:2438 #: reference_measure.xml:2531 reference_measure.xml:2581 #: reference_measure.xml:2747 reference_measure.xml:2791 #: reference_measure.xml:2836 reference_measure.xml:2920 #: reference_measure.xml:2960 reference_measure.xml:3009 #: reference_measure.xml:3122 reference_measure.xml:3252 #, no-c-format msgid "Examples" msgstr "" #. Tag: para #: reference_measure.xml:44 #, no-c-format msgid "linestring and point -- both 3d and 2d closest point" msgstr "" #. Tag: programlisting #: reference_measure.xml:45 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt, \n" " ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt\n" " FROM (SELECT 'POINT(100 100 30)'::geometry As pt, \n" " 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 " "1000)'::geometry As line\n" " ) As foo;\n" " \n" " \n" " cp3d_line_pt " "| cp2d_line_pt\n" "-----------------------------------------------------------" "+------------------------------------------\n" " POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT" "(73.0769230769231 115.384615384615)" msgstr "" #. Tag: para #: reference_measure.xml:49 #, no-c-format msgid "linestring and multipoint -- both 3d and 2d closest point" msgstr "" #. Tag: programlisting #: reference_measure.xml:50 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt, \n" " ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt\n" " FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, \n" " 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 " "900)'::geometry As line\n" " ) As foo;\n" " \n" " \n" " cp3d_line_pt | cp2d_line_pt\n" "-----------------------------------------------------------+--------------\n" " POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(50 75)" msgstr "" #. Tag: para #: reference_measure.xml:54 #, no-c-format msgid "Multilinestring and polygon both 3d and 2d closest point" msgstr "" #. Tag: programlisting #: reference_measure.xml:55 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DClosestPoint(poly, mline)) As cp3d,\n" " ST_AsEWKT(ST_ClosestPoint(poly, mline)) As cp2d \n" " FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, " "50 60 5, 100 100 5, 175 150 5))') As poly,\n" " ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 " "-2, 125 100 1, 175 155 1),\n" " (1 10 2, 5 20 1))') As mline ) As foo;\n" " cp3d | cp2d\n" "-------------------------------------------+--------------\n" " POINT(39.993580415989 54.1889925532825 5) | POINT(20 40)" msgstr "" #. Tag: title #: reference_measure.xml:65 reference_measure.xml:113 #: reference_measure.xml:163 reference_measure.xml:222 #: reference_measure.xml:275 reference_measure.xml:343 #: reference_measure.xml:390 reference_measure.xml:462 #: reference_measure.xml:521 reference_measure.xml:596 #: reference_measure.xml:710 reference_measure.xml:784 #: reference_measure.xml:937 reference_measure.xml:1008 #: reference_measure.xml:1089 reference_measure.xml:1161 #: reference_measure.xml:1458 reference_measure.xml:1517 #: reference_measure.xml:1586 reference_measure.xml:1700 #: reference_measure.xml:1748 reference_measure.xml:1796 #: reference_measure.xml:1851 reference_measure.xml:1948 #: reference_measure.xml:1998 reference_measure.xml:2040 #: reference_measure.xml:2121 reference_measure.xml:2172 #: reference_measure.xml:2204 reference_measure.xml:2247 #: reference_measure.xml:2299 reference_measure.xml:2351 #: reference_measure.xml:2397 reference_measure.xml:2491 #: reference_measure.xml:2536 reference_measure.xml:2623 #: reference_measure.xml:2677 reference_measure.xml:2713 #: reference_measure.xml:2754 reference_measure.xml:2797 #: reference_measure.xml:2842 reference_measure.xml:2926 #: reference_measure.xml:2966 reference_measure.xml:3043 #: reference_measure.xml:3263 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_measure.xml:67 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: reference_measure.xml:72 #, no-c-format msgid "ST_3DDistance" msgstr "" #. Tag: refpurpose #: reference_measure.xml:74 #, no-c-format msgid "" "For geometry type Returns the 3-dimensional cartesian minimum distance " "(based on spatial ref) between two geometries in projected units." msgstr "" #. Tag: funcprototype #: reference_measure.xml:79 #, no-c-format msgid "" "float ST_3DDistance " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:94 #, no-c-format msgid "" "For geometry type returns the 3-dimensional minimum cartesian distance " "between two geometries in projected units (spatial ref units)." msgstr "" #. Tag: para #: reference_measure.xml:100 reference_measure.xml:151 #, no-c-format msgid "&sqlmm_compliant; SQL-MM ?" msgstr "" #. Tag: programlisting #: reference_measure.xml:108 #, no-c-format msgid "" "-- Geometry example - units in meters (SRID: 2163 US National Atlas Equal " "area) (3D point and line compared 2D point and line)\n" "-- Note: currently no vertical datum support so Z is not transformed and " "assumed to be same units as final.\n" "SELECT ST_3DDistance(\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT" "(-72.1235 42.3521 4)'),2163),\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING" "(-72.1260 42.45 15, -72.123 42.1546 20)'),2163)\n" " ) As dist_3d,\n" " ST_Distance(\n" " ST_Transform(ST_GeomFromText('POINT(-72.1235 " "42.3521)',4326),2163),\n" " ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 " "42.45, -72.123 42.1546)', 4326),2163)\n" " ) As dist_2d;\n" "\n" " dist_3d | dist_2d\n" "------------------+-----------------\n" " 127.295059324629 | 126.66425605671" msgstr "" #. Tag: programlisting #: reference_measure.xml:109 #, no-c-format msgid "" "-- Multilinestring and polygon both 3d and 2d distance\n" "-- Same example as 3D closest point example\n" "SELECT ST_3DDistance(poly, mline) As dist3d,\n" " ST_Distance(poly, mline) As dist2d \n" " FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, " "50 60 5, 100 100 5, 175 150 5))') As poly,\n" " ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 " "-2, 125 100 1, 175 155 1),\n" " (1 10 2, 5 20 1))') As mline ) As foo;\n" " dist3d | dist2d\n" "-------------------+--------\n" " 0.716635696066337 | 0" msgstr "" #. Tag: para #: reference_measure.xml:115 #, no-c-format msgid "" ", , , " ", , " "" msgstr "" #. Tag: refname #: reference_measure.xml:121 #, no-c-format msgid "ST_3DDWithin" msgstr "" #. Tag: refpurpose #: reference_measure.xml:123 #, no-c-format msgid "" "For 3d (z) geometry type Returns true if two geometries 3d distance is " "within number of units." msgstr "" #. Tag: funcprototype #: reference_measure.xml:127 #, no-c-format msgid "" "boolean ST_3DDWithin " "geometry g1 " "geometry g2 " "double precision distance_of_srid" msgstr "" #. Tag: para #: reference_measure.xml:145 #, no-c-format msgid "" "For geometry type returns true if the 3d distance between two objects is " "within distance_of_srid specified projected units (spatial ref units)." msgstr "" #. Tag: programlisting #: reference_measure.xml:159 #, no-c-format msgid "" "-- Geometry example - units in meters (SRID: 2163 US National Atlas Equal " "area) (3D point and line compared 2D point and line)\n" "-- Note: currently no vertical datum support so Z is not transformed and " "assumed to be same units as final.\n" "SELECT ST_3DDWithin(\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT" "(-72.1235 42.3521 4)'),2163),\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING" "(-72.1260 42.45 15, -72.123 42.1546 20)'),2163),\n" " 126.8\n" " ) As within_dist_3d,\n" "ST_DWithin(\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT" "(-72.1235 42.3521 4)'),2163),\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING" "(-72.1260 42.45 15, -72.123 42.1546 20)'),2163),\n" " 126.8\n" " ) As within_dist_2d;\n" "\n" " within_dist_3d | within_dist_2d\n" "----------------+----------------\n" " f | t" msgstr "" #. Tag: para #: reference_measure.xml:165 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_measure.xml:171 #, no-c-format msgid "ST_3DDFullyWithin" msgstr "" #. Tag: refpurpose #: reference_measure.xml:173 #, no-c-format msgid "" "Returns true if all of the 3D geometries are within the specified distance " "of one another." msgstr "" #. Tag: funcprototype #: reference_measure.xml:179 #, no-c-format msgid "" "boolean ST_3DDFullyWithin " "geometry g1 " "geometry g2 " "double precision distance" msgstr "" #. Tag: para #: reference_measure.xml:197 #, no-c-format msgid "" "Returns true if the 3D geometries are fully within the specified distance of " "one another. The distance is specified in units defined by the spatial " "reference system of the geometries. For this function to make sense, the " "source geometries must both be of the same coordinate projection, having the " "same SRID." msgstr "" #. Tag: para #: reference_measure.xml:204 reference_measure.xml:261 #: reference_measure.xml:1243 reference_measure.xml:1837 #: reference_measure.xml:1923 reference_measure.xml:2095 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries." msgstr "" #. Tag: programlisting #: reference_measure.xml:218 #, no-c-format msgid "" "-- This compares the difference between fully within and distance within as " "well\n" " -- as the distance fully within for the 2D footprint of the " "line/point vs. the 3d fully within\n" " SELECT ST_3DDFullyWithin(geom_a, geom_b, 10) as " "D3DFullyWithin10, ST_3DDWithin(geom_a, geom_b, 10) as D3DWithin10, \n" " ST_DFullyWithin(geom_a, geom_b, 20) as D2DFullyWithin20, \n" " ST_3DDFullyWithin(geom_a, geom_b, 20) as D3DFullyWithin20 from \n" " (select ST_GeomFromEWKT('POINT(1 1 2)') as geom_a,\n" " ST_GeomFromEWKT('LINESTRING(1 5 2, 2 7 20, 1 9 100, 14 12 " "3)') as geom_b) t1;\n" " d3dfullywithin10 | d3dwithin10 | d2dfullywithin20 | d3dfullywithin20\n" "------------------+-------------+------------------+------------------\n" " f | t | t | f" msgstr "" #. Tag: para #: reference_measure.xml:224 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_measure.xml:230 #, no-c-format msgid "ST_3DIntersects" msgstr "" #. Tag: refpurpose #: reference_measure.xml:232 #, no-c-format msgid "" "Returns TRUE if the Geometries \"spatially intersect\" in 3d - only for " "points and linestrings" msgstr "" #. Tag: funcprototype #: reference_measure.xml:238 #, no-c-format msgid "" "boolean ST_3DIntersects " "geometry geomA " "geometry geomB " msgstr "" #. Tag: para #: reference_measure.xml:253 reference_measure.xml:2083 #, no-c-format msgid "" "Overlaps, Touches, Within all imply spatial intersection. If any of the " "aforementioned returns true, then the geometries also spatially intersect. " "Disjoint implies false for spatial intersection." msgstr "" #. Tag: para #: reference_measure.xml:268 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: ?" msgstr "" #. Tag: title #: reference_measure.xml:271 reference_measure.xml:2113 #: reference_measure.xml:2161 #, no-c-format msgid "Geometry Examples" msgstr "" #. Tag: programlisting #: reference_measure.xml:272 #, no-c-format msgid "" "SELECT ST_3DIntersects(pt, line), ST_Intersects(pt,line) \n" " FROM (SELECT 'POINT(0 0 2)'::geometry As pt, \n" " 'LINESTRING (0 0 1, 0 2 3 )'::geometry As line) As foo;\n" " st_3dintersects | st_intersects\n" "-----------------+---------------\n" " f | t\n" "(1 row)" msgstr "" #. Tag: refname #: reference_measure.xml:282 #, no-c-format msgid "ST_3DLongestLine" msgstr "" #. Tag: refpurpose #: reference_measure.xml:284 #, no-c-format msgid "Returns the 3-dimensional longest line between two geometries" msgstr "" #. Tag: funcprototype #: reference_measure.xml:289 #, no-c-format msgid "" "geometry ST_3DLongestLine " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:304 #, no-c-format msgid "" "Returns the 3-dimensional longest line between two geometries. The function " "will only return the first longest line if more than one. The line returned " "will always start in g1 and end in g2. The 3D length of the line this " "function returns will always be the same as returns for g1 and g2." msgstr "" #. Tag: para #: reference_measure.xml:322 #, no-c-format msgid "linestring and point -- both 3d and 2d longest line" msgstr "" #. Tag: programlisting #: reference_measure.xml:323 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt, \n" " ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt\n" " FROM (SELECT 'POINT(100 100 30)'::geometry As pt, \n" " 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 " "1000)'::geometry As line\n" " ) As foo;\n" " \n" " \n" " lol3d_line_pt | lol2d_line_pt\n" "-----------------------------------+----------------------------\n" " LINESTRING(50 75 1000,100 100 30) | LINESTRING(98 190,100 100)" msgstr "" #. Tag: para #: reference_measure.xml:327 #, no-c-format msgid "linestring and multipoint -- both 3d and 2d longest line" msgstr "" #. Tag: programlisting #: reference_measure.xml:328 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt, \n" " ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt\n" " FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, \n" " 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 " "900)'::geometry As line\n" " ) As foo;\n" " \n" " \n" " lol3d_line_pt | lol2d_line_pt\n" "---------------------------------+--------------------------\n" " LINESTRING(98 190 1,50 74 1000) | LINESTRING(98 190,50 74)" msgstr "" #. Tag: para #: reference_measure.xml:332 #, no-c-format msgid "Multilinestring and polygon both 3d and 2d longest line" msgstr "" #. Tag: programlisting #: reference_measure.xml:333 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DLongestLine(poly, mline)) As lol3d,\n" " ST_AsEWKT(ST_LongestLine(poly, mline)) As lol2d \n" " FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, " "50 60 5, 100 100 5, 175 150 5))') As poly,\n" " ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 " "-2, 125 100 1, 175 155 1),\n" " (1 10 2, 5 20 1))') As mline ) As foo;\n" " lol3d | lol2d\n" "------------------------------+--------------------------\n" " LINESTRING(175 150 5,1 10 2) | LINESTRING(175 150,1 10)" msgstr "" #. Tag: para #: reference_measure.xml:345 #, no-c-format msgid "" ", , , " ", " msgstr "" #. Tag: refname #: reference_measure.xml:351 #, no-c-format msgid "ST_3DMaxDistance" msgstr "" #. Tag: refpurpose #: reference_measure.xml:353 #, no-c-format msgid "" "For geometry type Returns the 3-dimensional cartesian maximum distance " "(based on spatial ref) between two geometries in projected units." msgstr "" #. Tag: funcprototype #: reference_measure.xml:358 #, no-c-format msgid "" "float ST_3DMaxDistance " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:373 #, no-c-format msgid "" "For geometry type returns the 3-dimensional maximum cartesian distance " "between two geometries in projected units (spatial ref units)." msgstr "" #. Tag: programlisting #: reference_measure.xml:386 #, no-c-format msgid "" "-- Geometry example - units in meters (SRID: 2163 US National Atlas Equal " "area) (3D point and line compared 2D point and line)\n" "-- Note: currently no vertical datum support so Z is not transformed and " "assumed to be same units as final.\n" "SELECT ST_3DMaxDistance(\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT" "(-72.1235 42.3521 10000)'),2163),\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING" "(-72.1260 42.45 15, -72.123 42.1546 20)'),2163)\n" " ) As dist_3d,\n" " ST_MaxDistance(\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT" "(-72.1235 42.3521 10000)'),2163),\n" " ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING" "(-72.1260 42.45 15, -72.123 42.1546 20)'),2163)\n" " ) As dist_2d;\n" "\n" " dist_3d | dist_2d\n" "------------------+------------------\n" " 24383.7467488441 | 22247.8472107251" msgstr "" #. Tag: para #: reference_measure.xml:392 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: reference_measure.xml:397 #, no-c-format msgid "ST_3DShortestLine" msgstr "" #. Tag: refpurpose #: reference_measure.xml:399 #, no-c-format msgid "Returns the 3-dimensional shortest line between two geometries" msgstr "" #. Tag: funcprototype #: reference_measure.xml:404 #, no-c-format msgid "" "geometry ST_3DShortestLine " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:419 #, no-c-format msgid "" "Returns the 3-dimensional shortest line between two geometries. The function " "will only return the first shortest line if more than one, that the function " "finds. If g1 and g2 intersects in just one point the function will return a " "line with both start and end in that intersection-point. If g1 and g2 are " "intersecting with more than one point the function will return a line with " "start and end in the same point but it can be any of the intersecting " "points. The line returned will always start in g1 and end in g2. The 3D " "length of the line this function returns will always be the same as returns for g1 and g2." msgstr "" #. Tag: para #: reference_measure.xml:441 #, no-c-format msgid "linestring and point -- both 3d and 2d shortest line" msgstr "" #. Tag: programlisting #: reference_measure.xml:442 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt, \n" " ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_line_pt\n" " FROM (SELECT 'POINT(100 100 30)'::geometry As pt, \n" " 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 " "1000)'::geometry As line\n" " ) As foo;\n" " \n" " \n" " shl3d_line_pt " "| shl2d_line_pt\n" "----------------------------------------------------------------------------" "+------------------------------------------------------\n" " LINESTRING(54.6993798867619 128.935022917228 11.5475869506606,100 100 30) " "| LINESTRING(73.0769230769231 115.384615384615,100 100)" msgstr "" #. Tag: para #: reference_measure.xml:446 #, no-c-format msgid "linestring and multipoint -- both 3d and 2d shortest line" msgstr "" #. Tag: programlisting #: reference_measure.xml:447 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt, \n" " ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_line_pt\n" " FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, \n" " 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 " "900)'::geometry As line\n" " ) As foo;\n" " \n" " \n" " shl3d_line_pt | " "shl2d_line_pt\n" "---------------------------------------------------------------------------" "+------------------------\n" " LINESTRING(54.6993798867619 128.935022917228 11.5475869506606,100 100 30) | " "LINESTRING(50 75,50 74)" msgstr "" #. Tag: para #: reference_measure.xml:451 #, no-c-format msgid "Multilinestring and polygon both 3d and 2d shortest line" msgstr "" #. Tag: programlisting #: reference_measure.xml:452 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_3DShortestLine(poly, mline)) As shl3d,\n" " ST_AsEWKT(ST_ShortestLine(poly, mline)) As shl2d \n" " FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, " "50 60 5, 100 100 5, 175 150 5))') As poly,\n" " ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 " "-2, 125 100 1, 175 155 1),\n" " (1 10 2, 5 20 1))') As mline ) As foo;\n" " shl3d " "| shl2d\n" "---------------------------------------------------------------------------------------------------" "+------------------------\n" " LINESTRING(39.993580415989 54.1889925532825 5,40.4078575708294 " "53.6052383805529 5.03423778139177) | LINESTRING(20 40,20 40)" msgstr "" #. Tag: para #: reference_measure.xml:464 #, no-c-format msgid "" ", , , " ", " msgstr "" #. Tag: refname #: reference_measure.xml:469 #, no-c-format msgid "ST_Area" msgstr "" #. Tag: refpurpose #: reference_measure.xml:471 #, no-c-format msgid "" "Returns the area of the surface if it is a polygon or multi-polygon. For " "\"geometry\" type area is in SRID units. For \"geography\" area is in square " "meters." msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:475 #, no-c-format msgid "" " float ST_Area " "geometry g1 float ST_Area geography geog boolean use_spheroid=true " msgstr "" #. Tag: para #: reference_measure.xml:491 #, no-c-format msgid "" "Returns the area of the geometry if it is a polygon or multi-polygon. Return " "the area measurement of an ST_Surface or ST_MultiSurface value. For geometry " "Area is in the units of the srid. For geography area is in square meters and " "defaults to measuring about the spheroid of the geography (currently only " "WGS84). To measure around the faster but less accurate sphere -- ST_Area" "(geog,false)." msgstr "" #. Tag: para #: reference_measure.xml:496 #, no-c-format msgid "Enhanced: 2.0.0 - support for 2D polyhedral surfaces was introduced." msgstr "" #. Tag: para #: reference_measure.xml:497 reference_measure.xml:642 #: reference_measure.xml:1572 reference_measure.xml:1937 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_measure.xml:498 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.1.2, 9.5.3" msgstr "" #. Tag: para #: reference_measure.xml:500 #, no-c-format msgid "" "For polyhedral surfaces, only supports 2D polyhedral surfaces (not 2.5D). " "For 2.5D, may give a non-zero answer, but only for the faces that sit " "completely in XY plane." msgstr "" #. Tag: para #: reference_measure.xml:506 #, no-c-format msgid "" "Return area in square feet for a plot of Massachusetts land and multiply by " "conversion to get square meters. Note this is in square feet because 2249 is " "Mass State Plane Feet" msgstr "" #. Tag: programlisting #: reference_measure.xml:509 #, no-c-format msgid "" "SELECT ST_Area(the_geom) As sqft, ST_Area(the_geom)*POWER(0.3048,2) As sqm\n" " FROM (SELECT\n" " ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,\n" " 743265 2967450,743265.625 2967416,743238 " "2967416))',2249) ) As foo(the_geom);\n" " sqft | sqm\n" "---------+-------------\n" " 928.625 | 86.27208552" msgstr "" #. Tag: para #: reference_measure.xml:510 #, no-c-format msgid "" "Return area square feet and transform to Massachusetts state plane meters " "(26986) to get square meters. Note this is in square feet because 2249 is " "Mass State Plane Feet and transformed area is in square meters since 26986 " "is state plane mass meters" msgstr "" #. Tag: programlisting #: reference_measure.xml:513 #, no-c-format msgid "" "SELECT ST_Area(the_geom) As sqft, ST_Area(ST_Transform(the_geom,26986)) As " "sqm\n" " FROM (SELECT\n" " ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,\n" " 743265 2967450,743265.625 2967416,743238 " "2967416))',2249) ) As foo(the_geom);\n" " sqft | sqm\n" "---------+------------------\n" " 928.625 | 86.2724304199219" msgstr "" #. Tag: para #: reference_measure.xml:515 #, no-c-format msgid "" "Return area square feet and square meters using Geography data type. Note " "that we transform to our geometry to geography (before you can do that make " "sure your geometry is in WGS 84 long lat 4326). Geography always measures in " "meters. This is just for demonstration to compare. Normally your table will " "be stored in geography data type already." msgstr "" #. Tag: programlisting #: reference_measure.xml:518 #, no-c-format msgid "" "SELECT ST_Area(the_geog)/POWER(0.3048,2) As sqft_spheroid, ST_Area(the_geog," "false)/POWER(0.3048,2) As sqft_sphere, ST_Area(the_geog) As sqm_spheroid\n" " FROM (SELECT\n" " geography(\n" " ST_Transform(\n" " ST_GeomFromText('POLYGON((743238 2967416,743238 " "2967450,743265 2967450,743265.625 2967416,743238 2967416))',\n" " 2249\n" " ) ,4326\n" " )\n" " )\n" " ) As foo(the_geog);\n" " sqft_spheroid | sqft_sphere | sqm_spheroid\n" "-----------------+------------------+------------------\n" "928.684405217197 | 927.186481558724 | 86.2776044452694\n" "\n" " --if your data is in geography already\n" " SELECT ST_Area(the_geog)/POWER(0.3048,2) As sqft, ST_Area(the_geog) As " "sqm\n" " FROM somegeogtable;" msgstr "" #. Tag: para #: reference_measure.xml:522 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: reference_measure.xml:528 #, no-c-format msgid "ST_Azimuth" msgstr "" #. Tag: refpurpose #: reference_measure.xml:530 #, no-c-format msgid "" "Returns the angle in radians from the horizontal of the vector defined by " "pointA and pointB. Angle is computed clockwise from down-to-up: on the " "clock: 12=0; 3=PI/2; 6=PI; 9=3PI/2." msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:533 #, no-c-format msgid "" " float ST_Azimuth " "geometry pointA " "geometry pointB float ST_Azimuth geography pointA geography pointB " msgstr "" #. Tag: para #: reference_measure.xml:549 #, no-c-format msgid "" "Returns the azimuth of the segment defined by the given Point geometries, or " "NULL if the two points are coincident. Return value is in radians. Angle is " "computed clockwise from down-to-up: on the clock: 12=0; 3=PI/2; 6=PI; 9=3PI/2" msgstr "" #. Tag: para #: reference_measure.xml:553 #, no-c-format msgid "" "The Azimuth is mathematical concept defined as the angle, in this case " "measured in radian, between a reference plane and a point." msgstr "" #. Tag: para #: reference_measure.xml:556 #, no-c-format msgid "Availability: 1.1.0" msgstr "" #. Tag: para #: reference_measure.xml:557 #, no-c-format msgid "Enhanced: 2.0.0 support for geography was introduced." msgstr "" #. Tag: para #: reference_measure.xml:558 #, no-c-format msgid "" "Azimuth is especially useful in conjunction with ST_Translate for shifting " "an object along its perpendicular axis. See upgis_lineshift Plpgsqlfunctions PostGIS wiki section for example of this." msgstr "" #. Tag: para #: reference_measure.xml:564 #, no-c-format msgid "Geometry Azimuth in degrees" msgstr "" #. Tag: programlisting #: reference_measure.xml:565 #, no-c-format msgid "" "SELECT ST_Azimuth(ST_Point(25,45), ST_Point(75,100))/(2*pi())*360 as degAz,\n" " ST_Azimuth(ST_Point(75,100), ST_Point(25,45))/(2*pi())*360 As " "degAzrev;\n" " \n" "-- NOTE easier to remember syntax using PostgreSQL built-in degrees function " "--\n" "-- Both yield same answer --\n" "SELECT degrees( ST_Azimuth(ST_Point(25,45), ST_Point(75,100)) ) as degAz,\n" " degrees( ST_Azimuth(ST_Point(75,100), ST_Point(25,45)) ) As " "degAzrev;\n" "\n" " degaz | degazrev\n" "------------------+------------------\n" " 42.2736890060937 | 222.273689006094" msgstr "" #. Tag: para #: reference_measure.xml:575 #, no-c-format msgid "" "degAz is path to travel (azimuth), horizontal line (which starts at the " "start point and ends where we want the end point to fall) and points (start " "point: 25,45 is in green)" msgstr "" #. Tag: para #: reference_measure.xml:585 #, no-c-format msgid "" "degAzrev is azimuth curve shown, horizontal line (which starts at the start " "point and ends where we want the end point to fall) and points (start point: " "75,100 is in green)" msgstr "" #. Tag: para #: reference_measure.xml:597 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:604 #, no-c-format msgid "ST_Centroid" msgstr "" #. Tag: refpurpose #: reference_measure.xml:606 #, no-c-format msgid "Returns the geometric center of a geometry." msgstr "" #. Tag: funcprototype #: reference_measure.xml:611 #, no-c-format msgid "" "geometry ST_Centroid " "geometry g1" msgstr "" #. Tag: para #: reference_measure.xml:623 #, no-c-format msgid "" "Computes the geometric center of a geometry, or equivalently, the center of " "mass of the geometry as a POINT. For [MULTI]POINTs, this is computed as the arithmetric mean " "of the input coordinates. For [MULTI]LINESTRINGs, this is computed as the weighted length of each line segment. For " "[MULTI]POLYGONs, \"weight\" is thought " "in terms of area. If an empty geometry is supplied, an empty " "GEOMETRYCOLLECTION is returned. If NULL is supplied, NULL is returned." msgstr "" #. Tag: para #: reference_measure.xml:635 #, no-c-format msgid "" "The centroid is equal to the centroid of the set of component Geometries of " "highest dimension (since the lower-dimension geometries contribute zero " "\"weight\" to the centroid)." msgstr "" #. Tag: para #: reference_measure.xml:639 #, no-c-format msgid "" "Computation will be more accurate if performed by the GEOS module (enabled " "at compile time)." msgstr "" #. Tag: para #: reference_measure.xml:643 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.1.4, 9.5.5" msgstr "" #. Tag: para #: reference_measure.xml:649 #, no-c-format msgid "" "In each of the following illustrations, the blue dot represents the centroid " "of the source geometry." msgstr "" #. Tag: para #: reference_measure.xml:662 #, no-c-format msgid "Centroid of a MULTIPOINT" msgstr "" #. Tag: para #: reference_measure.xml:673 #, no-c-format msgid "Centroid of a LINESTRING" msgstr "" #. Tag: para #: reference_measure.xml:686 #, no-c-format msgid "Centroid of a POLYGON" msgstr "" #. Tag: para #: reference_measure.xml:697 #, no-c-format msgid "Centroid of a GEOMETRYCOLLECTION" msgstr "" #. Tag: programlisting #: reference_measure.xml:706 #, no-c-format msgid "" "SELECT ST_AsText(ST_Centroid('MULTIPOINT ( -1 0, -1 2, -1 3, -1 4, -1 7, 0 " "1, 0 3, 1 1, 2 0, 6 0, 7 8, 9 8, 10 6 )'));\n" " st_astext\n" "------------------------------------------\n" " POINT(2.30769230769231 3.30769230769231)\n" "(1 row)" msgstr "" #. Tag: refname #: reference_measure.xml:718 #, no-c-format msgid "ST_ClosestPoint" msgstr "" #. Tag: refpurpose #: reference_measure.xml:720 #, no-c-format msgid "" "Returns the 2-dimensional point on g1 that is closest to g2. " "This is the first point of the shortest line." msgstr "" #. Tag: funcprototype #: reference_measure.xml:726 #, no-c-format msgid "" "geometry ST_ClosestPoint " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:741 #, no-c-format msgid "" "Returns the 2-dimensional point on g1 that is closest to g2. This is " "the first point of the shortest line." msgstr "" #. Tag: para #: reference_measure.xml:744 #, no-c-format msgid "" "If you have a 3D Geometry, you may prefer to use ." msgstr "" #. Tag: para #: reference_measure.xml:745 reference_measure.xml:1690 #: reference_measure.xml:1842 reference_measure.xml:2433 #: reference_measure.xml:3005 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: para #: reference_measure.xml:759 #, no-c-format msgid "" "Closest between point and linestring is the point itself, but closest point " "between a linestring and point is the point on line string that is closest." msgstr "" #. Tag: programlisting #: reference_measure.xml:763 #, no-c-format msgid "" "SELECT ST_AsText(ST_ClosestPoint(pt,line)) AS cp_pt_line, \n" " ST_AsText(ST_ClosestPoint(line,pt)) As cp_line_pt\n" "FROM (SELECT 'POINT(100 100)'::geometry As pt, \n" " 'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry As " "line\n" " ) As foo;\n" "\n" " \n" " cp_pt_line | cp_line_pt\n" "----------------+------------------------------------------\n" " POINT(100 100) | POINT(73.0769230769231 115.384615384615)" msgstr "" #. Tag: para #: reference_measure.xml:771 #, no-c-format msgid "closest point on polygon A to polygon B" msgstr "" #. Tag: programlisting #: reference_measure.xml:774 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_ClosestPoint(\n" " ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 " "100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ) \n" " ) As ptwkt;\n" " \n" " ptwkt\n" "------------------------------------------\n" " POINT(140.752120669087 125.695053378061)" msgstr "" #. Tag: para #: reference_measure.xml:786 #, no-c-format msgid "" ",, , , " msgstr "" #. Tag: refname #: reference_measure.xml:792 #, no-c-format msgid "ST_Contains" msgstr "" #. Tag: refpurpose #: reference_measure.xml:794 #, no-c-format msgid "" "Returns true if and only if no points of B lie in the exterior of A, and at " "least one point of the interior of B lies in the interior of A." msgstr "" #. Tag: funcprototype #: reference_measure.xml:799 #, no-c-format msgid "" "boolean ST_Contains " "geometry geomA " "geometry geomB" msgstr "" #. Tag: para #: reference_measure.xml:814 #, no-c-format msgid "" "Geometry A contains Geometry B if and only if no points of B lie in the " "exterior of A, and at least one point of the interior of B lies in the " "interior of A. An important subtlety of this definition is that A does not " "contain its boundary, but A does contain itself. Contrast that to where geometry A does not Contain Properly " "itself." msgstr "" #. Tag: para #: reference_measure.xml:818 #, no-c-format msgid "" "Returns TRUE if geometry B is completely inside geometry A. For this " "function to make sense, the source geometries must both be of the same " "coordinate projection, having the same SRID. ST_Contains is the inverse of " "ST_Within. So ST_Contains(A,B) implies ST_Within(B,A) except in the case of " "invalid geometries where the result is always false regardless or not " "defined." msgstr "" #. Tag: para #: reference_measure.xml:823 reference_measure.xml:1050 #: reference_measure.xml:1132 reference_measure.xml:1497 #: reference_measure.xml:2564 reference_measure.xml:2910 #: reference_measure.xml:3227 #, no-c-format msgid "Performed by the GEOS module" msgstr "" #. Tag: para #: reference_measure.xml:826 reference_measure.xml:988 #: reference_measure.xml:1053 reference_measure.xml:1135 #: reference_measure.xml:1239 reference_measure.xml:1494 #: reference_measure.xml:3108 reference_measure.xml:3230 #, no-c-format msgid "Do not call with a GEOMETRYCOLLECTION as an argument" msgstr "" #. Tag: para #: reference_measure.xml:830 reference_measure.xml:992 #: reference_measure.xml:1061 reference_measure.xml:1139 #: reference_measure.xml:3234 #, no-c-format msgid "" "Do not use this function with invalid geometries. You will get unexpected " "results." msgstr "" #. Tag: para #: reference_measure.xml:833 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries. To avoid " "index use, use the function _ST_Contains." msgstr "" #. Tag: para #: reference_measure.xml:838 reference_measure.xml:1072 #: reference_measure.xml:1147 reference_measure.xml:1503 #: reference_measure.xml:2104 reference_measure.xml:2573 #: reference_measure.xml:3242 #, no-c-format msgid "" "NOTE: this is the \"allowable\" version that returns a boolean, not an " "integer." msgstr "" #. Tag: para #: reference_measure.xml:841 #, no-c-format msgid "" "&sfs_compliant; s2.1.1.2 // s2.1.13.3 - same as within(geometry B, geometry " "A)" msgstr "" #. Tag: para #: reference_measure.xml:843 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.31" msgstr "" #. Tag: para #: reference_measure.xml:845 reference_measure.xml:1076 #: reference_measure.xml:1151 #, no-c-format msgid "" "There are certain subtleties to ST_Contains and ST_Within that are not " "intuitively obvious. For details check out Subtleties of OGC Covers, Contains, Within" msgstr "" #. Tag: para #: reference_measure.xml:852 #, no-c-format msgid "" "The ST_Contains predicate returns TRUE in all the following illustrations." msgstr "" #. Tag: para #: reference_measure.xml:864 #, no-c-format msgid "LINESTRING / MULTIPOINT" msgstr "" #. Tag: para #: reference_measure.xml:874 reference_measure.xml:3186 #, no-c-format msgid "POLYGON / POINT" msgstr "" #. Tag: para #: reference_measure.xml:885 reference_measure.xml:925 #: reference_measure.xml:3155 #, no-c-format msgid "POLYGON / LINESTRING" msgstr "" #. Tag: para #: reference_measure.xml:895 reference_measure.xml:2610 #: reference_measure.xml:3135 reference_measure.xml:3145 #, no-c-format msgid "POLYGON / POLYGON" msgstr "" #. Tag: para #: reference_measure.xml:903 #, no-c-format msgid "" "The ST_Contains predicate returns FALSE in all the following illustrations." msgstr "" #. Tag: para #: reference_measure.xml:915 #, no-c-format msgid "POLYGON / MULTIPOINT" msgstr "" #. Tag: programlisting #: reference_measure.xml:933 #, no-c-format msgid "" "-- A circle within a circle\n" "SELECT ST_Contains(smallc, bigc) As smallcontainsbig,\n" " ST_Contains(bigc,smallc) As bigcontainssmall,\n" " ST_Contains(bigc, ST_Union(smallc, bigc)) as bigcontainsunion,\n" " ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion,\n" " ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,\n" " ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior\n" "FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,\n" " ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As " "bigc) As foo;\n" "\n" "-- Result\n" " smallcontainsbig | bigcontainssmall | bigcontainsunion | bigisunion | " "bigcoversexterior | bigcontainsexterior\n" "------------------+------------------+------------------+------------" "+-------------------+---------------------\n" " f | t | t | t | " "t | f\n" "\n" "-- Example demonstrating difference between contains and contains properly\n" "SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS " "acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,\n" " ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly" "(geomA, ST_Boundary(geomA)) As acontainspropba\n" "FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ),\n" " ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ),\n" " ( ST_Point(1,1) )\n" " ) As foo(geomA);\n" "\n" " geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba\n" "--------------+------------+----------------+-------------" "+-----------------\n" "ST_Polygon | t | f | f | f\n" "ST_LineString | t | f | f | f\n" "ST_Point | t | t | f | f" msgstr "" #. Tag: para #: reference_measure.xml:938 #, no-c-format msgid "" ", , , " ", , " msgstr "" #. Tag: refname #: reference_measure.xml:944 #, no-c-format msgid "ST_ContainsProperly" msgstr "" #. Tag: refpurpose #: reference_measure.xml:946 #, no-c-format msgid "" "Returns true if B intersects the interior of A but not the boundary (or " "exterior). A does not contain properly itself, but does contain itself." msgstr "" #. Tag: funcprototype #: reference_measure.xml:951 #, no-c-format msgid "" "boolean ST_ContainsProperly " "geometry geomA " "geometry geomB" msgstr "" #. Tag: para #: reference_measure.xml:966 #, no-c-format msgid "" "Returns true if B intersects the interior of A but not the boundary (or " "exterior)." msgstr "" #. Tag: para #: reference_measure.xml:968 #, no-c-format msgid "A does not contain properly itself, but does contain itself." msgstr "" #. Tag: para #: reference_measure.xml:969 #, no-c-format msgid "" "Every point of the other geometry is a point of this geometry's interior. " "The DE-9IM Intersection Matrix for the two geometries matches [T**FF*FF*] " "used in " msgstr "" #. Tag: para #: reference_measure.xml:973 #, no-c-format msgid "" "From JTS docs slightly reworded: The advantage to using this predicate over " " and is " "that it can be computed efficiently, with no need to compute topology at " "individual points." msgstr "" #. Tag: para #: reference_measure.xml:975 #, no-c-format msgid "" "An example use case for this predicate is computing the intersections of a " "set of geometries with a large polygonal geometry. Since intersection is a " "fairly slow operation, it can be more efficient to use containsProperly to " "filter out test geometries which lie wholly inside the area. In these cases " "the intersection is known a priori to be exactly the original test geometry." msgstr "" #. Tag: para #: reference_measure.xml:985 #, no-c-format msgid "Availability: 1.4.0 - requires GEOS >= 3.1.0." msgstr "" #. Tag: para #: reference_measure.xml:995 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries. To avoid " "index use, use the function _ST_ContainsProperly." msgstr "" #. Tag: programlisting #: reference_measure.xml:1004 #, no-c-format msgid "" "--a circle within a circle\n" " SELECT ST_ContainsProperly(smallc, bigc) As smallcontainspropbig,\n" " ST_ContainsProperly(bigc,smallc) As bigcontainspropsmall,\n" " ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) as " "bigcontainspropunion,\n" " ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion,\n" " ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,\n" " ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) As " "bigcontainsexterior\n" " FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As " "smallc,\n" " ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;\n" " --Result\n" " smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | " "bigisunion | bigcoversexterior | bigcontainsexterior\n" "------------------+------------------+------------------+------------" "+-------------------+---------------------\n" " f | t | f | " "t | t | f\n" "\n" " --example demonstrating difference between contains and contains properly\n" " SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS " "acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,\n" " ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly" "(geomA, ST_Boundary(geomA)) As acontainspropba\n" " FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ),\n" " ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ),\n" " ( ST_Point(1,1) )\n" " ) As foo(geomA);\n" "\n" " geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba\n" "--------------+------------+----------------+-------------" "+-----------------\n" "ST_Polygon | t | f | f | f\n" "ST_LineString | t | f | f | f\n" "ST_Point | t | t | f | f" msgstr "" #. Tag: para #: reference_measure.xml:1009 #, no-c-format msgid "" ", , , , , , , " msgstr "" #. Tag: refname #: reference_measure.xml:1015 #, no-c-format msgid "ST_Covers" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1017 #, no-c-format msgid "Returns 1 (TRUE) if no point in Geometry B is outside Geometry A" msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:1022 #, no-c-format msgid "" " boolean ST_Covers " "geometry geomA " "geometry geomB boolean ST_Covers geography geogpolyA geography " "geogpointB " msgstr "" #. Tag: para #: reference_measure.xml:1047 #, no-c-format msgid "" "Returns 1 (TRUE) if no point in Geometry/Geography B is outside Geometry/" "Geography A" msgstr "" #. Tag: para #: reference_measure.xml:1057 #, no-c-format msgid "For geography only Polygon covers point is supported." msgstr "" #. Tag: para #: reference_measure.xml:1064 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries. To avoid " "index use, use the function _ST_Covers." msgstr "" #. Tag: para #: reference_measure.xml:1069 reference_measure.xml:1141 #, no-c-format msgid "Availability: 1.2.2 - requires GEOS >= 3.0" msgstr "" #. Tag: para #: reference_measure.xml:1070 #, no-c-format msgid "Availability: 1.5 - support for geography was introduced." msgstr "" #. Tag: para #: reference_measure.xml:1075 reference_measure.xml:1150 #, no-c-format msgid "Not an OGC standard, but Oracle has it too." msgstr "" #. Tag: para #: reference_measure.xml:1082 #, no-c-format msgid "Geometry example" msgstr "" #. Tag: programlisting #: reference_measure.xml:1083 #, no-c-format msgid "" "--a circle covering a circle\n" "SELECT ST_Covers(smallc,smallc) As smallinsmall,\n" " ST_Covers(smallc, bigc) As smallcoversbig,\n" " ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,\n" " ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior\n" "FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,\n" " ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;\n" " --Result\n" " smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior\n" "--------------+----------------+-------------------+---------------------\n" " t | f | t | f\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:1084 #, no-c-format msgid "Geeography Example" msgstr "" #. Tag: programlisting #: reference_measure.xml:1085 #, no-c-format msgid "" "-- a point with a 300 meter buffer compared to a point, a point and its 10 " "meter buffer\n" "SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt, \n" " ST_Covers(ST_Buffer(geog_pt,10), geog_pt) As buff_10m_covers_cent\n" " FROM (SELECT ST_Buffer(ST_GeogFromText('SRID=4326;POINT(-99.327 " "31.4821)'), 300) As geog_poly,\n" " ST_GeogFromText('SRID=4326;POINT(-99.33 " "31.483)') As geog_pt ) As foo;\n" " \n" " poly_covers_pt | buff_10m_covers_cent\n" "----------------+------------------\n" " f | t" msgstr "" #. Tag: para #: reference_measure.xml:1090 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_measure.xml:1096 #, no-c-format msgid "ST_CoveredBy" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1098 #, no-c-format msgid "" "Returns 1 (TRUE) if no point in Geometry/Geography A is outside " "Geometry/Geography B" msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:1103 #, no-c-format msgid "" " boolean ST_CoveredBy " "geometry geomA " "geometry geomB boolean ST_CoveredBy geography geogA geography geogB " msgstr "" #. Tag: para #: reference_measure.xml:1129 #, no-c-format msgid "" "Returns 1 (TRUE) if no point in Geometry/Geography A is outside " "Geometry/Geography B" msgstr "" #. Tag: para #: reference_measure.xml:1142 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries. To avoid " "index use, use the function _ST_CoveredBy." msgstr "" #. Tag: programlisting #: reference_measure.xml:1157 #, no-c-format msgid "" "--a circle coveredby a circle\n" "SELECT ST_CoveredBy(smallc,smallc) As smallinsmall,\n" " ST_CoveredBy(smallc, bigc) As smallcoveredbybig,\n" " ST_CoveredBy(ST_ExteriorRing(bigc), bigc) As exteriorcoveredbybig,\n" " ST_Within(ST_ExteriorRing(bigc),bigc) As exeriorwithinbig\n" "FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,\n" " ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;\n" " --Result\n" " smallinsmall | smallcoveredbybig | exteriorcoveredbybig | exeriorwithinbig\n" "--------------+-------------------+----------------------" "+------------------\n" " t | t | t | f\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:1162 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_measure.xml:1168 #, no-c-format msgid "ST_Crosses" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1170 #, no-c-format msgid "" "Returns TRUE if the supplied geometries have some, but " "not all, interior points in common." msgstr "" #. Tag: funcprototype #: reference_measure.xml:1176 #, no-c-format msgid "" "boolean ST_Crosses " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:1189 #, no-c-format msgid "" "ST_Crosses takes two geometry objects and returns " "TRUE if their intersection \"spatially cross\", that is, " "the geometries have some, but not all interior points in common. The " "intersection of the interiors of the geometries must not be the empty set " "and must have a dimensionality less than the the maximum dimension of the " "two input geometries. Additionally, the intersection of the two geometries " "must not equal either of the source geometries. Otherwise, it returns " "FALSE." msgstr "" #. Tag: para #: reference_measure.xml:1198 #, no-c-format msgid "In mathematical terms, this is expressed as:" msgstr "" #. Tag: remark #: reference_measure.xml:1200 #, no-c-format msgid "" "TODO: Insert appropriate MathML markup here or use a gif. Simple HTML markup " "does not work well in both IE and Firefox." msgstr "" #. Tag: para #: reference_measure.xml:1211 #, no-c-format msgid "The DE-9IM Intersection Matrix for the two geometries is:" msgstr "" #. Tag: para #: reference_measure.xml:1215 #, no-c-format msgid "" "T*T****** (for Point/Line, Point/Area, and Line/Area " "situations)" msgstr "" #. Tag: para #: reference_measure.xml:1220 #, no-c-format msgid "" "T*****T** (for Line/Point, Area/Point, and Area/Line " "situations)" msgstr "" #. Tag: para #: reference_measure.xml:1225 #, no-c-format msgid "0******** (for Line/Line situations)" msgstr "" #. Tag: para #: reference_measure.xml:1229 #, no-c-format msgid "For any other combination of dimensions this predicate returns false." msgstr "" #. Tag: para #: reference_measure.xml:1232 #, no-c-format msgid "" "The OpenGIS Simple Features Specification defines this predicate only for " "Point/Line, Point/Area, Line/Line, and Line/Area situations. JTS / GEOS " "extends the definition to apply to Line/Point, Area/Point and Area/Line " "situations as well. This makes the relation symmetric." msgstr "" #. Tag: para #: reference_measure.xml:1248 #, no-c-format msgid "&sfs_compliant; s2.1.13.3" msgstr "" #. Tag: para #: reference_measure.xml:1249 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.29" msgstr "" #. Tag: para #: reference_measure.xml:1255 reference_measure.xml:2582 #, no-c-format msgid "The following illustrations all return TRUE." msgstr "" #. Tag: para #: reference_measure.xml:1267 #, no-c-format msgid "MULTIPOINT / LINESTRING" msgstr "" #. Tag: para #: reference_measure.xml:1277 #, no-c-format msgid "MULTIPOINT / POLYGON" msgstr "" #. Tag: para #: reference_measure.xml:1289 #, no-c-format msgid "LINESTRING / POLYGON" msgstr "" #. Tag: para #: reference_measure.xml:1299 reference_measure.xml:2602 #: reference_measure.xml:3166 reference_measure.xml:3176 #, no-c-format msgid "LINESTRING / LINESTRING" msgstr "" #. Tag: para #: reference_measure.xml:1307 #, no-c-format msgid "" "Consider a situation where a user has two tables: a table of roads and a " "table of highways." msgstr "" #. Tag: programlisting #: reference_measure.xml:1315 #, no-c-format msgid "" "CREATE TABLE roads (\n" " id serial NOT NULL,\n" " the_geom geometry,\n" " CONSTRAINT roads_pkey PRIMARY KEY (road_id)\n" ");" msgstr "" #. Tag: programlisting #: reference_measure.xml:1319 #, no-c-format msgid "" "CREATE TABLE highways (\n" " id serial NOT NULL,\n" " the_gem geometry,\n" " CONSTRAINT roads_pkey PRIMARY KEY (road_id)\n" ");" msgstr "" #. Tag: para #: reference_measure.xml:1326 #, no-c-format msgid "" "To determine a list of roads that cross a highway, use a query similiar to:" msgstr "" #. Tag: programlisting #: reference_measure.xml:1330 #, no-c-format msgid "" "SELECT roads.id\n" "FROM roads, highways\n" "WHERE ST_Crosses(roads.the_geom, highways.the_geom);" msgstr "" #. Tag: refname #: reference_measure.xml:1337 #, no-c-format msgid "ST_LineCrossingDirection" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1339 #, no-c-format msgid "" "Given 2 linestrings, returns a number between -3 and 3 denoting what kind of " "crossing behavior. 0 is no crossing." msgstr "" #. Tag: funcprototype #: reference_measure.xml:1344 #, no-c-format msgid "" "integer ST_LineCrossingDirection " "geometry linestringA geometry linestringB" msgstr "" #. Tag: para #: reference_measure.xml:1355 #, no-c-format msgid "" "Given 2 linestrings, returns a number between -3 and 3 denoting what kind of " "crossing behavior. 0 is no crossing. This is only supported for " "LINESTRING" msgstr "" #. Tag: para #: reference_measure.xml:1356 #, no-c-format msgid "Definition of integer constants is as follows:" msgstr "" #. Tag: para #: reference_measure.xml:1359 #, no-c-format msgid "0: LINE NO CROSS" msgstr "" #. Tag: para #: reference_measure.xml:1362 #, no-c-format msgid "-1: LINE CROSS LEFT" msgstr "" #. Tag: para #: reference_measure.xml:1365 #, no-c-format msgid "1: LINE CROSS RIGHT" msgstr "" #. Tag: para #: reference_measure.xml:1368 #, no-c-format msgid "-2: LINE MULTICROSS END LEFT" msgstr "" #. Tag: para #: reference_measure.xml:1371 #, no-c-format msgid "2: LINE MULTICROSS END RIGHT" msgstr "" #. Tag: para #: reference_measure.xml:1374 #, no-c-format msgid "-3: LINE MULTICROSS END SAME FIRST LEFT" msgstr "" #. Tag: para #: reference_measure.xml:1377 #, no-c-format msgid "3: LINE MULTICROSS END SAME FIRST RIGHT" msgstr "" #. Tag: para #: reference_measure.xml:1381 #, no-c-format msgid "Availability: 1.4" msgstr "" #. Tag: para #: reference_measure.xml:1399 #, no-c-format msgid "" "Line 1 (green), Line 2 ball is start point, triangle are end points. Query " "below." msgstr "" #. Tag: programlisting #: reference_measure.xml:1403 #, no-c-format msgid "" "SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 ,\n" " ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1\n" "FROM (\n" "SELECT\n" " ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1,\n" " ST_GeomFromText('LINESTRING(171 154,20 140,71 74,161 53)') As line2\n" " ) As foo;\n" "\n" " l1_cross_l2 | l2_cross_l1\n" "-------------+-------------\n" " 3 | -3" msgstr "" #. Tag: para #: reference_measure.xml:1413 reference_measure.xml:1427 #: reference_measure.xml:1441 #, no-c-format msgid "" "Line 1 (green), Line 2 (blue) ball is start point, triangle are end points. " "Query below." msgstr "" #. Tag: programlisting #: reference_measure.xml:1417 #, no-c-format msgid "" "SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 ,\n" " ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1\n" "FROM (\n" " SELECT\n" " ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1,\n" " ST_GeomFromText('LINESTRING (171 154, 20 140, 71 74, 2.99 90.16)') As " "line2\n" ") As foo;\n" "\n" " l1_cross_l2 | l2_cross_l1\n" "-------------+-------------\n" " 2 | -2" msgstr "" #. Tag: programlisting #: reference_measure.xml:1431 #, no-c-format msgid "" "SELECT\n" " ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 ,\n" " ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1\n" "FROM (\n" " SELECT\n" " ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1,\n" " ST_GeomFromText('LINESTRING (20 140, 71 74, 161 53)') As line2\n" " ) As foo;\n" "\n" " l1_cross_l2 | l2_cross_l1\n" "-------------+-------------\n" " -1 | 1" msgstr "" #. Tag: programlisting #: reference_measure.xml:1445 #, no-c-format msgid "" "SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 ,\n" " ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1\n" "FROM (SELECT\n" " ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1,\n" " ST_GeomFromText('LINESTRING(2.99 90.16,71 74,20 140,171 154)') As " "line2\n" " ) As foo;\n" "\n" " l1_cross_l2 | l2_cross_l1\n" "-------------+-------------\n" " -2 | 2" msgstr "" #. Tag: programlisting #: reference_measure.xml:1453 #, no-c-format msgid "" "SELECT s1.gid, s2.gid, ST_LineCrossingDirection(s1.the_geom, s2.the_geom)\n" " FROM streets s1 CROSS JOIN streets s2 ON (s1.gid != s2.gid AND s1." "the_geom && s2.the_geom )\n" "WHERE ST_CrossingDirection(s1.the_geom, s2.the_geom) > 0;" msgstr "" #. Tag: refname #: reference_measure.xml:1466 #, no-c-format msgid "ST_Disjoint" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1468 #, no-c-format msgid "" "Returns TRUE if the Geometries do not \"spatially intersect\" - if they do " "not share any space together." msgstr "" #. Tag: funcprototype #: reference_measure.xml:1474 #, no-c-format msgid "" "boolean ST_Disjoint " "geometry A " "geometry B " msgstr "" #. Tag: para #: reference_measure.xml:1489 #, no-c-format msgid "" "Overlaps, Touches, Within all imply geometries are not spatially disjoint. " "If any of the aforementioned returns true, then the geometries are not " "spatially disjoint. Disjoint implies false for spatial intersection." msgstr "" #. Tag: para #: reference_measure.xml:1499 #, no-c-format msgid "This function call does not use indexes" msgstr "" #. Tag: para #: reference_measure.xml:1506 #, no-c-format msgid "&sfs_compliant; s2.1.1.2 //s2.1.13.3 - a.Relate(b, 'FF*FF****')" msgstr "" #. Tag: para #: reference_measure.xml:1508 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.26" msgstr "" #. Tag: programlisting #: reference_measure.xml:1513 #, no-c-format msgid "" "SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::" "geometry);\n" " st_disjoint\n" "---------------\n" " t\n" "(1 row)\n" "SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::" "geometry);\n" " st_disjoint\n" "---------------\n" " f\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:1518 #, no-c-format msgid "ST_Intersects" msgstr "" #. Tag: refname #: reference_measure.xml:1524 #, no-c-format msgid "ST_Distance" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1526 #, no-c-format msgid "" "For geometry type Returns the 2-dimensional cartesian minimum distance " "(based on spatial ref) between two geometries in projected units. For " "geography type defaults to return spheroidal minimum distance between two " "geographies in meters." msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:1530 #, no-c-format msgid "" " float ST_Distance " "geometry g1 " "geometry g2 float ST_Distance geography gg1 geography gg2 float " "ST_Distance geography " "gg1 geography " "gg2 boolean " "use_spheroid " msgstr "" #. Tag: para #: reference_measure.xml:1568 #, no-c-format msgid "" "For geometry type returns the 2-dimensional minimum cartesian distance " "between two geometries in projected units (spatial ref units). For geography " "type defaults to return the minimum distance around WGS 84 spheroid between " "two geographies in meters. Pass in false to return answer in sphere instead " "of spheroid." msgstr "" #. Tag: para #: reference_measure.xml:1573 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.23" msgstr "" #. Tag: para #: reference_measure.xml:1575 #, no-c-format msgid "" "Availability: 1.5.0 geography support was introduced in 1.5. Speed " "improvements for planar to better handle large or many vertex geometries" msgstr "" #. Tag: para #: reference_measure.xml:1576 reference_measure.xml:1939 #, no-c-format msgid "" "Enhanced: 2.1.0 improved speed for geography. See Making Geography faster for details." msgstr "" #. Tag: programlisting #: reference_measure.xml:1582 #, no-c-format msgid "" "--Geometry example - units in planar degrees 4326 is WGS 84 long lat " "unit=degrees\n" "SELECT ST_Distance(\n" " ST_GeomFromText('POINT(-72.1235 42.3521)',4326),\n" " ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 " "42.1546)', 4326)\n" " );\n" "st_distance\n" "-----------------\n" "0.00150567726382282\n" "\n" "-- Geometry example - units in meters (SRID: 26986 Massachusetts state plane " "meters) (most accurate for Massachusetts)\n" "SELECT ST_Distance(\n" " ST_Transform(ST_GeomFromText('POINT(-72.1235 " "42.3521)',4326),26986),\n" " ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 " "42.45, -72.123 42.1546)', 4326),26986)\n" " );\n" "st_distance\n" "-----------------\n" "123.797937878454\n" "\n" "-- Geometry example - units in meters (SRID: 2163 US National Atlas Equal " "area) (least accurate)\n" "SELECT ST_Distance(\n" " ST_Transform(ST_GeomFromText('POINT(-72.1235 " "42.3521)',4326),2163),\n" " ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 " "42.45, -72.123 42.1546)', 4326),2163)\n" " );\n" "\n" "st_distance\n" "------------------\n" "126.664256056812\n" "\n" "-- Geography example -- same but note units in meters - use sphere for " "slightly faster less accurate\n" "SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) " "As sphere_dist \n" "FROM (SELECT\n" " ST_GeographyFromText('SRID=4326;POINT(-72.1235 42.3521)') As gg1,\n" " ST_GeographyFromText('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 " "42.1546)') As gg2\n" " ) As foo ;\n" "\n" " spheroid_dist | sphere_dist\n" "------------------+------------------\n" " 123.802076746848 | 123.475736916397" msgstr "" #. Tag: para #: reference_measure.xml:1588 #, no-c-format msgid "" ", , , " ", , " msgstr "" #. Tag: refname #: reference_measure.xml:1594 #, no-c-format msgid "ST_HausdorffDistance" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1596 #, no-c-format msgid "" "Returns the Hausdorff distance between two geometries. Basically a measure " "of how similar or dissimilar 2 geometries are. Units are in the units of the " "spatial reference system of the geometries." msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:1601 #, no-c-format msgid "" " float ST_HausdorffDistance geometry g1 geometry g2 float " "ST_HausdorffDistance geometry " " g1 geometry g2 float " "densifyFrac " msgstr "" #. Tag: para #: reference_measure.xml:1629 #, no-c-format msgid "" "Implements algorithm for computing a distance metric which can be thought of " "as the \"Discrete Hausdorff Distance\". This is the Hausdorff distance " "restricted to discrete points for one of the geometries. Wikipedia article on Hausdorff " "distance Martin Davis note on how Hausdorff " "Distance calculation was used to prove correctness of the " "CascadePolygonUnion approach." msgstr "" #. Tag: para #: reference_measure.xml:1632 #, no-c-format msgid "" "When densifyFrac is specified, this function performs a segment " "densification before computing the discrete hausdorff distance. The " "densifyFrac parameter sets the fraction by which to densify each segment. " "Each segment will be split into a number of equal-length subsegments, whose " "fraction of the total length is closest to the given fraction." msgstr "" #. Tag: para #: reference_measure.xml:1637 #, no-c-format msgid "" "The current implementation supports only vertices as the discrete locations. " "This could be extended to allow an arbitrary density of points to be used." msgstr "" #. Tag: para #: reference_measure.xml:1642 #, no-c-format msgid "" "This algorithm is NOT equivalent to the standard Hausdorff distance. " "However, it computes an approximation that is correct for a large subset of " "useful cases. One important part of this subset is Linestrings that are " "roughly parallel to each other, and roughly equal in length. This is a " "useful metric for line matching." msgstr "" #. Tag: para #: reference_measure.xml:1647 #, no-c-format msgid "Availability: 1.5.0 - requires GEOS >= 3.2.0" msgstr "" #. Tag: programlisting #: reference_measure.xml:1654 #, no-c-format msgid "" "postgis=# SELECT st_HausdorffDistance(\n" " 'LINESTRING (0 0, 2 0)'::geometry,\n" " 'MULTIPOINT (0 1, 1 0, 2 1)'::geometry);\n" " st_hausdorffdistance\n" " ----------------------\n" " 1\n" "(1 row)" msgstr "" #. Tag: programlisting #: reference_measure.xml:1655 #, no-c-format msgid "" "postgis=# SELECT st_hausdorffdistance('LINESTRING (130 0, 0 0, 0 150)'::" "geometry, 'LINESTRING (10 10, 10 150, 130 10)'::geometry, 0.5);\n" " st_hausdorffdistance\n" " ----------------------\n" " 70\n" "(1 row)" msgstr "" #. Tag: refname #: reference_measure.xml:1662 #, no-c-format msgid "ST_MaxDistance" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1664 #, no-c-format msgid "" "Returns the 2-dimensional largest distance between two geometries in " "projected units." msgstr "" #. Tag: funcprototype #: reference_measure.xml:1670 #, no-c-format msgid "" "float ST_MaxDistance " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:1681 #, no-c-format msgid "Some useful description here." msgstr "" #. Tag: para #: reference_measure.xml:1685 #, no-c-format msgid "" "Returns the 2-dimensional maximum distance between two linestrings in " "projected units. If g1 and g2 is the same geometry the function will return " "the distance between the two vertices most far from each other in that " "geometry." msgstr "" #. Tag: programlisting #: reference_measure.xml:1695 #, no-c-format msgid "" "postgis=# SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 " "2 )'::geometry);\n" " st_maxdistance\n" "-----------------\n" " 2\n" "(1 row)\n" "\n" "postgis=# SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 2, 2 " "2 )'::geometry);\n" " st_maxdistance \n" "------------------\n" " 2.82842712474619\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:1701 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:1707 #, no-c-format msgid "ST_Distance_Sphere" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1709 #, no-c-format msgid "" "Returns minimum distance in meters between two lon/lat geometries. Uses a " "spherical earth and radius of 6370986 meters. Faster than " "ST_Distance_Spheroid , but less " "accurate. PostGIS versions prior to 1.5 only implemented for points." msgstr "" #. Tag: funcprototype #: reference_measure.xml:1717 #, no-c-format msgid "" "float ST_Distance_Sphere " "geometry geomlonlatA geometry geomlonlatB" msgstr "" #. Tag: para #: reference_measure.xml:1728 #, no-c-format msgid "" "Returns minimum distance in meters between two lon/lat points. Uses a " "spherical earth and radius of 6370986 meters. Faster than , but less accurate. PostGIS Versions prior to 1.5 " "only implemented for points." msgstr "" #. Tag: para #: reference_measure.xml:1733 #, no-c-format msgid "" "This function currently does not look at the SRID of a geometry and will " "always assume its in WGS 84 long lat. Prior versions of this function only " "support points." msgstr "" #. Tag: para #: reference_measure.xml:1736 reference_measure.xml:1784 #, no-c-format msgid "" "Availability: 1.5 - support for other geometry types besides points was " "introduced. Prior versions only work with points." msgstr "" #. Tag: programlisting #: reference_measure.xml:1743 #, no-c-format msgid "" "SELECT round(CAST(ST_Distance_Sphere(ST_Centroid(the_geom), ST_GeomFromText" "('POINT(-118 38)',4326)) As numeric),2) As dist_meters,\n" "round(CAST(ST_Distance(ST_Transform(ST_Centroid(the_geom),32611),\n" " ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) " "As numeric),2) As dist_utm11_meters,\n" "round(CAST(ST_Distance(ST_Centroid(the_geom), ST_GeomFromText('POINT(-118 " "38)', 4326)) As numeric),5) As dist_degrees,\n" "round(CAST(ST_Distance(ST_Transform(the_geom,32611),\n" " ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) " "As numeric),2) As min_dist_line_point_meters\n" "FROM\n" " (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', " "4326) As the_geom) as foo;\n" " dist_meters | dist_utm11_meters | dist_degrees | " "min_dist_line_point_meters\n" " -------------+-------------------+--------------" "+----------------------------\n" " 70424.47 | 70438.00 | 0.72900 " "| 65871.18" msgstr "" #. Tag: para #: reference_measure.xml:1750 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:1756 #, no-c-format msgid "ST_Distance_Spheroid" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1758 #, no-c-format msgid "" "Returns the minimum distance between two lon/lat geometries given a " "particular spheroid. PostGIS versions prior to 1.5 only support points." msgstr "" #. Tag: funcprototype #: reference_measure.xml:1765 #, no-c-format msgid "" "float ST_Distance_Spheroid " "geometry geomlonlatA geometry geomlonlatB spheroid " "measurement_spheroid" msgstr "" #. Tag: para #: reference_measure.xml:1777 #, no-c-format msgid "" "Returns minimum distance in meters between two lon/lat geometries given a " "particular spheroid. See the explanation of spheroids given for . PostGIS version prior to 1.5 only support " "points." msgstr "" #. Tag: para #: reference_measure.xml:1781 #, no-c-format msgid "" "This function currently does not look at the SRID of a geometry and will " "always assume its represented in the coordinates of the passed in spheroid. " "Prior versions of this function only support points." msgstr "" #. Tag: programlisting #: reference_measure.xml:1791 #, no-c-format msgid "" "SELECT round(CAST(\n" " ST_Distance_Spheroid(ST_Centroid(the_geom), ST_GeomFromText" "('POINT(-118 38)',4326), 'SPHEROID[\"WGS 84\",6378137,298.257223563]')\n" " As numeric),2) As dist_meters_spheroid,\n" " round(CAST(ST_Distance_Sphere(ST_Centroid(the_geom), " "ST_GeomFromText('POINT(-118 38)',4326)) As numeric),2) As " "dist_meters_sphere,\n" "round(CAST(ST_Distance(ST_Transform(ST_Centroid(the_geom),32611),\n" " ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) " "As numeric),2) As dist_utm11_meters\n" "FROM\n" " (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', " "4326) As the_geom) as foo;\n" " dist_meters_spheroid | dist_meters_sphere | dist_utm11_meters\n" "----------------------+--------------------+-------------------\n" " 70454.92 | 70424.47 | 70438.00" msgstr "" #. Tag: para #: reference_measure.xml:1798 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:1804 #, no-c-format msgid "ST_DFullyWithin" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1806 #, no-c-format msgid "" "Returns true if all of the geometries are within the specified distance of " "one another" msgstr "" #. Tag: funcprototype #: reference_measure.xml:1812 #, no-c-format msgid "" "boolean ST_DFullyWithin " "geometry g1 " "geometry g2 " "double precision distance" msgstr "" #. Tag: para #: reference_measure.xml:1830 #, no-c-format msgid "" "Returns true if the geometries is fully within the specified distance of one " "another. The distance is specified in units defined by the spatial reference " "system of the geometries. For this function to make sense, the source " "geometries must both be of the same coordinate projection, having the same " "SRID." msgstr "" #. Tag: programlisting #: reference_measure.xml:1847 #, no-c-format msgid "" "postgis=# SELECT ST_DFullyWithin(geom_a, geom_b, 10) as DFullyWithin10, " "ST_DWithin(geom_a, geom_b, 10) as DWithin10, ST_DFullyWithin(geom_a, geom_b, " "20) as DFullyWithin20 from \n" " (select ST_GeomFromText('POINT(1 1)') as geom_a," "ST_GeomFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') as geom_b) t1;\n" " \n" "-----------------\n" " DFullyWithin10 | DWithin10 | DFullyWithin20 |\n" "---------------+----------+---------------+\n" " f | t | t |" msgstr "" #. Tag: para #: reference_measure.xml:1853 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:1859 #, no-c-format msgid "ST_DWithin" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1861 #, no-c-format msgid "" "Returns true if the geometries are within the specified distance of one " "another. For geometry units are in those of spatial reference and For " "geography units are in meters and measurement is defaulted to " "use_spheroid=true (measure around spheroid), for faster check, " "use_spheroid=false to measure along sphere." msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:1867 #, no-c-format msgid "" " boolean ST_DWithin " "geometry g1 " "geometry g2 " "double precision distance_of_srid boolean " "ST_DWithin geography " "gg1 geography " "gg2 double precision distance_meters " " boolean ST_DWithin " "geography gg1 " "geography gg2 " "double precision distance_meters boolean " "use_spheroid " msgstr "" #. Tag: para #: reference_measure.xml:1912 #, no-c-format msgid "" "Returns true if the geometries are within the specified distance of one " "another." msgstr "" #. Tag: para #: reference_measure.xml:1914 #, no-c-format msgid "" "For Geometries: The distance is specified in units defined by the spatial " "reference system of the geometries. For this function to make sense, the " "source geometries must both be of the same coordinate projection, having the " "same SRID." msgstr "" #. Tag: para #: reference_measure.xml:1919 #, no-c-format msgid "" "For geography units are in meters and measurement is defaulted to " "use_spheroid=true (measure around WGS 84 spheroid), for faster check, " "use_spheroid=false to measure along sphere." msgstr "" #. Tag: para #: reference_measure.xml:1929 #, no-c-format msgid "" "Prior to 1.3, ST_Expand was commonly used in conjunction with && and " "ST_Distance to achieve the same effect and in pre-1.3.4 this function was " "basically short-hand for that construct. From 1.3.4, ST_DWithin uses a more " "short-circuit distance function which should make it more efficient than " "prior versions for larger buffer regions." msgstr "" #. Tag: para #: reference_measure.xml:1935 #, no-c-format msgid "Use ST_3DDWithin if you have 3D geometries." msgstr "" #. Tag: para #: reference_measure.xml:1938 #, no-c-format msgid "Availability: 1.5.0 support for geography was introduced" msgstr "" #. Tag: programlisting #: reference_measure.xml:1944 #, no-c-format msgid "" "--Find the nearest hospital to each school\n" "--that is within 3000 units of the school.\n" "-- We do an ST_DWithin search to utilize indexes to limit our search list\n" "-- that the non-indexable ST_Distance needs to process\n" "--If the units of the spatial reference is meters then units would be " "meters\n" "SELECT DISTINCT ON (s.gid) s.gid, s.school_name, s.the_geom, h." "hospital_name\n" " FROM schools s\n" " LEFT JOIN hospitals h ON ST_DWithin(s.the_geom, h.the_geom, " "3000)\n" " ORDER BY s.gid, ST_Distance(s.the_geom, h.the_geom);\n" "\n" "--The schools with no close hospitals\n" "--Find all schools with no hospital within 3000 units\n" "--away from the school. Units is in units of spatial ref (e.g. meters, " "feet, degrees)\n" "SELECT s.gid, s.school_name\n" " FROM schools s\n" " LEFT JOIN hospitals h ON ST_DWithin(s.the_geom, h.the_geom, " "3000)\n" " WHERE h.gid IS NULL;" msgstr "" #. Tag: para #: reference_measure.xml:1950 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:1956 #, no-c-format msgid "ST_Equals" msgstr "" #. Tag: refpurpose #: reference_measure.xml:1958 #, no-c-format msgid "" "Returns true if the given geometries represent the same geometry. " "Directionality is ignored." msgstr "" #. Tag: funcprototype #: reference_measure.xml:1964 #, no-c-format msgid "" "boolean ST_Equals " "geometry A " "geometry B" msgstr "" #. Tag: para #: reference_measure.xml:1975 #, no-c-format msgid "" "Returns TRUE if the given Geometries are \"spatially equal\". Use this for a " "'better' answer than '='. Note by spatially equal we mean ST_Within(A,B) = " "true and ST_Within(B,A) = true and also mean ordering of points can be " "different but represent the same geometry structure. To verify the order of " "points is consistent, use ST_OrderingEquals (it must be noted " "ST_OrderingEquals is a little more stringent than simply verifying order of " "points are the same)." msgstr "" #. Tag: para #: reference_measure.xml:1984 #, no-c-format msgid "" "This function will return false if either geometry is invalid even if they " "are binary equal." msgstr "" #. Tag: para #: reference_measure.xml:1987 #, no-c-format msgid "&sfs_compliant; s2.1.1.2" msgstr "" #. Tag: para #: reference_measure.xml:1988 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.24" msgstr "" #. Tag: programlisting #: reference_measure.xml:1994 #, no-c-format msgid "" "SELECT ST_Equals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),\n" " ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));\n" " st_equals\n" "-----------\n" " t\n" "(1 row)\n" "\n" "SELECT ST_Equals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')),\n" " ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));\n" " st_equals\n" "-----------\n" " t\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:2000 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: reference_measure.xml:2007 #, no-c-format msgid "ST_HasArc" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2009 #, no-c-format msgid "" "Returns true if a geometry or geometry collection contains a " "circular string" msgstr "" #. Tag: funcprototype #: reference_measure.xml:2014 #, no-c-format msgid "" "boolean ST_HasArc " "geometry geomA" msgstr "" #. Tag: para #: reference_measure.xml:2024 #, no-c-format msgid "" "Returns true if a geometry or geometry collection contains a circular " "string" msgstr "" #. Tag: para #: reference_measure.xml:2026 #, no-c-format msgid "Availability: 1.2.3?" msgstr "" #. Tag: para #: reference_measure.xml:2028 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: programlisting #: reference_measure.xml:2035 #, no-c-format msgid "" "SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 " "1, 2 3, 4 5, 6 7, 5 6)'));\n" " st_hasarc\n" " --------\n" " t" msgstr "" #. Tag: para #: reference_measure.xml:2042 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2048 #, no-c-format msgid "ST_Intersects" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2050 #, no-c-format msgid "" "Returns TRUE if the Geometries/Geography \"spatially intersect in 2D\" - " "(share any portion of space) and FALSE if they don't (they are Disjoint). " "For geography -- tolerance is 0.00001 meters (so any points that close are " "considered to intersect)" msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:2056 #, no-c-format msgid "" " boolean ST_Intersects geometry geomA geometry geomB boolean " "ST_Intersects geography geogA geography geogB " msgstr "" #. Tag: para #: reference_measure.xml:2088 #, no-c-format msgid "" "Do not call with a GEOMETRYCOLLECTION as an argument for " "geometry version. The geography version supports GEOMETRYCOLLECTION since " "its a thin wrapper around distance implementation." msgstr "" #. Tag: para #: reference_measure.xml:2092 #, no-c-format msgid "Performed by the GEOS module (for geometry), geography is native" msgstr "" #. Tag: para #: reference_measure.xml:2093 #, no-c-format msgid "Availability: 1.5 support for geography was introduced." msgstr "" #. Tag: para #: reference_measure.xml:2100 #, no-c-format msgid "" "For geography, this function has a distance tolerance of about 0.00001 " "meters and uses the sphere rather than spheroid calculation." msgstr "" #. Tag: para #: reference_measure.xml:2107 #, no-c-format msgid "" "&sfs_compliant; s2.1.1.2 //s2.1.13.3 - ST_Intersects(g1, g2 ) --> Not " "(ST_Disjoint(g1, g2 ))" msgstr "" #. Tag: para #: reference_measure.xml:2110 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.27" msgstr "" #. Tag: programlisting #: reference_measure.xml:2114 #, no-c-format msgid "" "SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::" "geometry);\n" " st_intersects\n" "---------------\n" " f\n" "(1 row)\n" "SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::" "geometry);\n" " st_intersects\n" "---------------\n" " t\n" "(1 row)" msgstr "" #. Tag: title #: reference_measure.xml:2117 reference_measure.xml:2167 #, no-c-format msgid "Geography Examples" msgstr "" #. Tag: programlisting #: reference_measure.xml:2118 #, no-c-format msgid "" "SELECT ST_Intersects(\n" " ST_GeographyFromText('SRID=4326;LINESTRING(-43.23456 " "72.4567,-43.23456 72.4568)'),\n" " ST_GeographyFromText('SRID=4326;POINT(-43.23456 " "72.4567772)')\n" " );\n" "\n" " st_intersects\n" "---------------\n" "t" msgstr "" #. Tag: para #: reference_measure.xml:2122 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2127 #, no-c-format msgid "ST_Length" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2129 #, no-c-format msgid "" "Returns the 2d length of the geometry if it is a linestring or " "multilinestring. geometry are in units of spatial reference and geography " "are in meters (default spheroid)" msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:2132 #, no-c-format msgid "" " float ST_Length " "geometry a_2dlinestring float " "ST_Length geography geog boolean use_spheroid=true " "" msgstr "" #. Tag: para #: reference_measure.xml:2147 #, no-c-format msgid "" "For geometry: Returns the cartesian 2D length of the geometry if it is a " "linestring, multilinestring, ST_Curve, ST_MultiCurve. 0 is returned for " "areal geometries. For areal geometries use ST_Perimeter. Geometry: " "Measurements are in the units of the spatial reference system of the " "geometry. Geography: Units are in meters and also acts as a Perimeter " "function for areal geogs." msgstr "" #. Tag: para #: reference_measure.xml:2151 #, no-c-format msgid "" "Currently for geometry this is an alias for ST_Length2D, but this may change " "to support higher dimensions." msgstr "" #. Tag: para #: reference_measure.xml:2152 #, no-c-format msgid "" "Changed: 2.0.0 Breaking change -- in prior versions applying this to a MULTI/" "POLYGON of type geography would give you the perimeter of the POLYGON/" "MULTIPOLYGON. In 2.0.0 this was changed to return 0 to be in line with " "geometry behavior. Please use ST_Perimeter if you want the perimeter of a " "polygon" msgstr "" #. Tag: para #: reference_measure.xml:2154 #, no-c-format msgid "" "For geography measurement defaults spheroid measurement. To use the faster " "less accurate sphere use ST_Length(gg,false);" msgstr "" #. Tag: para #: reference_measure.xml:2155 reference_measure.xml:2660 #, no-c-format msgid "&sfs_compliant; s2.1.5.1" msgstr "" #. Tag: para #: reference_measure.xml:2156 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.2, 9.3.4" msgstr "" #. Tag: para #: reference_measure.xml:2157 #, no-c-format msgid "Availability: 1.5.0 geography support was introduced in 1.5." msgstr "" #. Tag: para #: reference_measure.xml:2162 #, no-c-format msgid "" "Return length in feet for line string. Note this is in feet because 2249 is " "Mass State Plane Feet" msgstr "" #. Tag: programlisting #: reference_measure.xml:2164 #, no-c-format msgid "" "SELECT ST_Length(ST_GeomFromText('LINESTRING(743238 2967416,743238 " "2967450,743265 2967450,\n" "743265.625 2967416,743238 2967416)',2249));\n" "st_length\n" "---------\n" " 122.630744000095\n" "\n" "\n" "--Transforming WGS 84 linestring to Massachusetts state plane meters\n" "SELECT ST_Length(\n" " ST_Transform(\n" " ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45, " "-72.1240 42.45666, -72.123 42.1546)'),\n" " 26986\n" " )\n" ");\n" "st_length\n" "---------\n" "34309.4563576191" msgstr "" #. Tag: para #: reference_measure.xml:2168 #, no-c-format msgid "Return length of WGS 84 geography line" msgstr "" #. Tag: programlisting #: reference_measure.xml:2169 #, no-c-format msgid "" "-- default calculation is using a sphere rather than spheroid\n" "SELECT ST_Length(the_geog) As length_spheroid, ST_Length(the_geog,false) As " "length_sphere\n" "FROM (SELECT ST_GeographyFromText(\n" "'SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)') " "As the_geog)\n" " As foo;\n" " length_spheroid | length_sphere\n" "------------------+------------------\n" " 34310.5703627305 | 34346.2060960742\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:2173 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_measure.xml:2179 #, no-c-format msgid "ST_Length2D" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2181 #, no-c-format msgid "" "Returns the 2-dimensional length of the geometry if it is a " "linestring or multi-linestring. This is an alias for ST_Length" msgstr "" #. Tag: funcprototype #: reference_measure.xml:2187 #, no-c-format msgid "" "float ST_Length2D " "geometry a_2dlinestring" msgstr "" #. Tag: para #: reference_measure.xml:2197 #, no-c-format msgid "" "Returns the 2-dimensional length of the geometry if it is a linestring " "or multi-linestring. This is an alias for ST_Length" msgstr "" #. Tag: para #: reference_measure.xml:2206 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2212 #, no-c-format msgid "ST_3DLength" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2214 #, no-c-format msgid "" "Returns the 3-dimensional or 2-dimensional length of the geometry if it is a " "linestring or multi-linestring." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2220 #, no-c-format msgid "" "float ST_3DLength " "geometry a_3dlinestring" msgstr "" #. Tag: para #: reference_measure.xml:2230 #, no-c-format msgid "" "Returns the 3-dimensional or 2-dimensional length of the geometry if it is a " "linestring or multi-linestring. For 2-d lines it will just return the 2-d " "length (same as ST_Length and ST_Length2D)" msgstr "" #. Tag: para #: reference_measure.xml:2233 #, no-c-format msgid "Changed: 2.0.0 In prior versions this used to be called ST_Length3D" msgstr "" #. Tag: para #: reference_measure.xml:2240 #, no-c-format msgid "" "Return length in feet for a 3D cable. Note this is in feet because 2249 is " "Mass State Plane Feet" msgstr "" #. Tag: programlisting #: reference_measure.xml:2242 #, no-c-format msgid "" "SELECT ST_3DLength(ST_GeomFromText('LINESTRING(743238 2967416 1,743238 " "2967450 1,743265 2967450 3,\n" "743265.625 2967416 3,743238 2967416 3)',2249));\n" "ST_3DLength\n" "-----------\n" "122.704716741457" msgstr "" #. Tag: para #: reference_measure.xml:2249 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2255 #, no-c-format msgid "ST_Length_Spheroid" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2257 #, no-c-format msgid "" "Calculates the 2D or 3D length of a linestring/multilinestring on an " "ellipsoid. This is useful if the coordinates of the geometry are in " "longitude/latitude and a length is desired without reprojection." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2264 #, no-c-format msgid "" "float ST_Length_Spheroid " "geometry a_linestring spheroid a_spheroid" msgstr "" #. Tag: para #: reference_measure.xml:2275 #, no-c-format msgid "" "Calculates the length of a geometry on an ellipsoid. This is useful if the " "coordinates of the geometry are in longitude/latitude and a length is " "desired without reprojection. The ellipsoid is a separate database type and " "can be constructed as follows:" msgstr "" #. Tag: literallayout #: reference_measure.xml:2281 reference_measure.xml:2333 #, no-c-format msgid "" "SPHEROID[<NAME>,<SEMI-MAJOR\n" " AXIS>,<INVERSE FLATTENING>]" msgstr "" #. Tag: literallayout #: reference_measure.xml:2284 reference_measure.xml:2336 #, no-c-format msgid "SPHEROID[\"GRS_1980\",6378137,298.257222101]" msgstr "" #. Tag: para #: reference_measure.xml:2285 reference_measure.xml:2337 #, no-c-format msgid "Will return 0 for anything that is not a MULTILINESTRING or LINESTRING" msgstr "" #. Tag: programlisting #: reference_measure.xml:2294 #, no-c-format msgid "" "SELECT ST_Length_Spheroid( geometry_column,\n" " 'SPHEROID[\"GRS_1980\",6378137,298.257222101]' )\n" " FROM geometry_table;\n" "\n" "SELECT ST_Length_Spheroid( the_geom, sph_m ) As tot_len,\n" "ST_Length_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,\n" "ST_Length_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2\n" " FROM (SELECT ST_GeomFromText('MULTILINESTRING" "((-118.584 38.374,-118.583 38.5),\n" " (-71.05957 42.3589 , -71.061 43))') As the_geom,\n" "CAST('SPHEROID[\"GRS_1980\",6378137,298.257222101]' As spheroid) As sph_m) " "as foo;\n" " tot_len | len_line1 | len_line2\n" "------------------+------------------+------------------\n" " 85204.5207562955 | 13986.8725229309 | 71217.6482333646\n" "\n" " --3D\n" "SELECT ST_Length_Spheroid( the_geom, sph_m ) As tot_len,\n" "ST_Length_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,\n" "ST_Length_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2\n" " FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING" "((-118.584 38.374 20,-118.583 38.5 30),\n" " (-71.05957 42.3589 75, -71.061 43 90))') As the_geom,\n" "CAST('SPHEROID[\"GRS_1980\",6378137,298.257222101]' As spheroid) As sph_m) " "as foo;\n" "\n" " tot_len | len_line1 | len_line2\n" "------------------+-----------------+------------------\n" " 85204.5259107402 | 13986.876097711 | 71217.6498130292" msgstr "" #. Tag: para #: reference_measure.xml:2301 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_measure.xml:2307 #, no-c-format msgid "ST_Length2D_Spheroid" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2309 #, no-c-format msgid "" "Calculates the 2D length of a linestring/multilinestring on an ellipsoid. " "This is useful if the coordinates of the geometry are in longitude/latitude " "and a length is desired without reprojection." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2316 #, no-c-format msgid "" "float ST_Length2D_Spheroid " "geometry a_linestring spheroid a_spheroid" msgstr "" #. Tag: para #: reference_measure.xml:2327 #, no-c-format msgid "" "Calculates the 2D length of a geometry on an ellipsoid. This is useful if " "the coordinates of the geometry are in longitude/latitude and a length is " "desired without reprojection. The ellipsoid is a separate database type and " "can be constructed as follows:" msgstr "" #. Tag: para #: reference_measure.xml:2338 #, no-c-format msgid "" "This is much like and except it will throw away the Z coordinate in " "calculations." msgstr "" #. Tag: programlisting #: reference_measure.xml:2346 #, no-c-format msgid "" "SELECT ST_Length2D_Spheroid( geometry_column,\n" " 'SPHEROID[\"GRS_1980\",6378137,298.257222101]' )\n" " FROM geometry_table;\n" "\n" "SELECT ST_Length2D_Spheroid( the_geom, sph_m ) As tot_len,\n" "ST_Length2D_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,\n" "ST_Length2D_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2\n" " FROM (SELECT ST_GeomFromText('MULTILINESTRING" "((-118.584 38.374,-118.583 38.5),\n" " (-71.05957 42.3589 , -71.061 43))') As the_geom,\n" "CAST('SPHEROID[\"GRS_1980\",6378137,298.257222101]' As spheroid) As sph_m) " "as foo;\n" " tot_len | len_line1 | len_line2\n" "------------------+------------------+------------------\n" " 85204.5207562955 | 13986.8725229309 | 71217.6482333646\n" "\n" " --3D Observe same answer\n" "SELECT ST_Length2D_Spheroid( the_geom, sph_m ) As tot_len,\n" "ST_Length2D_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,\n" "ST_Length2D_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2\n" " FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING" "((-118.584 38.374 20,-118.583 38.5 30),\n" " (-71.05957 42.3589 75, -71.061 43 90))') As the_geom,\n" "CAST('SPHEROID[\"GRS_1980\",6378137,298.257222101]' As spheroid) As sph_m) " "as foo;\n" "\n" " tot_len | len_line1 | len_line2\n" "------------------+------------------+------------------\n" " 85204.5207562955 | 13986.8725229309 | 71217.6482333646" msgstr "" #. Tag: para #: reference_measure.xml:2353 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_measure.xml:2359 #, no-c-format msgid "ST_3DLength_Spheroid" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2361 #, no-c-format msgid "" "Calculates the length of a geometry on an ellipsoid, taking the " "elevation into account. This is just an alias for ST_Length_Spheroid." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2367 #, no-c-format msgid "" "float ST_3DLength_Spheroid " "geometry a_linestring spheroid a_spheroid" msgstr "" #. Tag: para #: reference_measure.xml:2378 #, no-c-format msgid "" "Calculates the length of a geometry on an ellipsoid, taking the " "elevation into account. This is just an alias for ST_Length_Spheroid." msgstr "" #. Tag: para #: reference_measure.xml:2382 #, no-c-format msgid "" "Changed: 2.0.0 In prior versions this used to return 0 for anything that is " "not a MULTILINESTRING or LINESTRING and in 2.0.0 on returns the perimeter of " "if given a polgon." msgstr "" #. Tag: para #: reference_measure.xml:2383 #, no-c-format msgid "This function is just an alias for ST_Length_Spheroid." msgstr "" #. Tag: para #: reference_measure.xml:2385 #, no-c-format msgid "" "Changed: 2.0.0 In prior versions this used to be called ST_Length3d_Spheroid" msgstr "" #. Tag: programlisting #: reference_measure.xml:2392 #, no-c-format msgid "See ST_Length_Spheroid" msgstr "" #. Tag: para #: reference_measure.xml:2399 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_measure.xml:2405 #, no-c-format msgid "ST_LongestLine" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2407 #, no-c-format msgid "" "Returns the 2-dimensional longest line points of two geometries. The " "function will only return the first longest line if more than one, that the " "function finds. The line returned will always start in g1 and end in g2. The " "length of the line this function returns will always be the same as " "st_maxdistance returns for g1 and g2." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2415 #, no-c-format msgid "" "geometry ST_LongestLine " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:2430 #, no-c-format msgid "" "Returns the 2-dimensional longest line between the points of two geometries." msgstr "" #. Tag: para #: reference_measure.xml:2448 #, no-c-format msgid "Longest line between point and line" msgstr "" #. Tag: programlisting #: reference_measure.xml:2451 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_LongestLine('POINT(100 100)'::geometry, \n" " 'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry)\n" " ) As lline;\n" "\n" " \n" " lline\n" "-----------------\n" "LINESTRING(100 100,98 190)" msgstr "" #. Tag: para #: reference_measure.xml:2459 #, no-c-format msgid "longest line between polygon and polygon" msgstr "" #. Tag: programlisting #: reference_measure.xml:2462 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_LongestLine(\n" " ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ) \n" " ) As llinewkt;\n" " \n" " lline\n" "-----------------\n" "LINESTRING(20 40,121.111404660392 186.629392246051)" msgstr "" #. Tag: para #: reference_measure.xml:2478 #, no-c-format msgid "" "longest straight distance to travel from one part of an elegant city to the " "other Note the max distance = to the length of the line." msgstr "" #. Tag: programlisting #: reference_measure.xml:2482 #, no-c-format msgid "" "SELECT ST_AsText(ST_LongestLine(c.the_geom, c.the_geom)) As llinewkt, \n" " ST_MaxDistance(c.the_geom,c.the_geom) As max_dist, \n" " ST_Length(ST_LongestLine(c.the_geom, c.the_geom)) As lenll \n" "FROM (SELECT ST_BuildArea(ST_Collect(the_geom)) As the_geom\n" " FROM (SELECT ST_Translate(ST_SnapToGrid(ST_Buffer(ST_Point(50 ," "generate_series(50,190, 50) \n" " ),40, 'quad_segs=2'),1), x, 0) As the_geom \n" " FROM generate_series(1,100,50) As x) AS foo\n" ") As c;\n" " \n" " llinewkt | max_dist | lenll\n" "---------------------------+------------------+------------------\n" " LINESTRING(23 22,129 178) | 188.605408193933 | 188.605408193933" msgstr "" #. Tag: para #: reference_measure.xml:2493 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_measure.xml:2499 #, no-c-format msgid "ST_OrderingEquals" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2501 #, no-c-format msgid "" "Returns true if the given geometries represent the same geometry and points " "are in the same directional order." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2507 #, no-c-format msgid "" "boolean ST_OrderingEquals " "geometry A " "geometry B" msgstr "" #. Tag: para #: reference_measure.xml:2518 #, no-c-format msgid "" "ST_OrderingEquals compares two geometries and returns t (TRUE) if the " "geometries are equal and the coordinates are in the same order; otherwise it " "returns f (FALSE)." msgstr "" #. Tag: para #: reference_measure.xml:2523 #, no-c-format msgid "" "This function is implemented as per the ArcSDE SQL specification rather than " "SQL-MM. http://edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3." "htm#ST_OrderingEquals" msgstr "" #. Tag: para #: reference_measure.xml:2527 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.43" msgstr "" #. Tag: programlisting #: reference_measure.xml:2533 #, no-c-format msgid "" "SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),\n" " ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));\n" " st_orderingequals\n" "-----------\n" " f\n" "(1 row)\n" "\n" "SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),\n" " ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)'));\n" " st_orderingequals\n" "-----------\n" " t\n" "(1 row)\n" "\n" "SELECT ST_OrderingEquals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 " "10)')),\n" " ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)'));\n" " st_orderingequals\n" "-----------\n" " f\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:2537 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2543 #, no-c-format msgid "ST_Overlaps" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2545 #, no-c-format msgid "" "Returns TRUE if the Geometries share space, are of the same dimension, but " "are not completely contained by each other." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2550 #, no-c-format msgid "" "boolean ST_Overlaps " "geometry A " "geometry B" msgstr "" #. Tag: para #: reference_measure.xml:2561 #, no-c-format msgid "" "Returns TRUE if the Geometries \"spatially overlap\". By that we mean they " "intersect, but one does not completely contain another." msgstr "" #. Tag: para #: reference_measure.xml:2566 reference_measure.xml:2892 #: reference_measure.xml:2906 #, no-c-format msgid "Do not call with a GeometryCollection as an argument" msgstr "" #. Tag: para #: reference_measure.xml:2568 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries. To avoid " "index use, use the function _ST_Overlaps." msgstr "" #. Tag: para #: reference_measure.xml:2576 reference_measure.xml:2912 #: reference_measure.xml:3117 #, no-c-format msgid "&sfs_compliant; s2.1.1.2 // s2.1.13.3" msgstr "" #. Tag: para #: reference_measure.xml:2577 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.32" msgstr "" #. Tag: para #: reference_measure.xml:2593 #, no-c-format msgid "MULTIPOINT / MULTIPOINT" msgstr "" #. Tag: programlisting #: reference_measure.xml:2617 #, no-c-format msgid "" "--a point on a line is contained by the line and is of a lower dimension, " "and therefore does not overlap the line\n" " nor crosses\n" "\n" "SELECT ST_Overlaps(a,b) As a_overlap_b,\n" " ST_Crosses(a,b) As a_crosses_b,\n" " ST_Intersects(a, b) As a_intersects_b, ST_Contains(b,a) As " "b_contains_a\n" "FROM (SELECT ST_GeomFromText('POINT(1 0.5)') As a, ST_GeomFromText" "('LINESTRING(1 0, 1 1, 3 5)') As b)\n" " As foo\n" "\n" "a_overlap_b | a_crosses_b | a_intersects_b | b_contains_a\n" "------------+-------------+----------------+--------------\n" "f | f | t | t\n" "\n" "--a line that is partly contained by circle, but not fully is defined as " "intersecting and crossing,\n" "-- but since of different dimension it does not overlap\n" "SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Crosses(a,b) As a_crosses_b,\n" " ST_Intersects(a, b) As a_intersects_b,\n" " ST_Contains(a,b) As a_contains_b\n" "FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 0.5)'), 3) As a, " "ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)') As b)\n" " As foo;\n" "\n" " a_overlap_b | a_crosses_b | a_intersects_b | a_contains_b\n" "-------------+-------------+----------------+--------------\n" " f | t | t | f\n" "\n" " -- a 2-dimensional bent hot dog (aka buffered line string) that intersects " "a circle,\n" " -- but is not fully contained by the circle is defined as " "overlapping since they are of the same dimension,\n" "-- but it does not cross, because the intersection of the 2 is of the " "same dimension\n" "-- as the maximum dimension of the 2\n" "\n" "SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Crosses(a,b) As a_crosses_b, " "ST_Intersects(a, b) As a_intersects_b,\n" "ST_Contains(b,a) As b_contains_a,\n" "ST_Dimension(a) As dim_a, ST_Dimension(b) as dim_b, ST_Dimension" "(ST_Intersection(a,b)) As dima_intersection_b\n" "FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 0.5)'), 3) As a,\n" " ST_Buffer(ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)'),0.5) As b)\n" " As foo;\n" "\n" " a_overlap_b | a_crosses_b | a_intersects_b | b_contains_a | dim_a | dim_b | " "dima_intersection_b\n" "-------------+-------------+----------------+--------------+-------+-------" "+---------------------\n" " t | f | t | f | 2 | 2 " "| 2" msgstr "" #. Tag: para #: reference_measure.xml:2625 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_measure.xml:2630 #, no-c-format msgid "ST_Perimeter" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2632 #, no-c-format msgid "" "Return the length measurement of the boundary of an ST_Surface or " "ST_MultiSurface geometry or geography. (Polygon, Multipolygon). geometry " "measurement is in units of spatial reference and geography is in meters." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2637 #, no-c-format msgid "" "float ST_Perimeter " "geometry g1" msgstr "" #. Tag: funcprototype #: reference_measure.xml:2643 #, no-c-format msgid "" "float ST_Perimeter " "geography geog " "boolean use_spheroid=true" msgstr "" #. Tag: para #: reference_measure.xml:2653 #, no-c-format msgid "" "Returns the 2D perimeter of the geometry/geography if it is a ST_Surface, " "ST_MultiSurface (Polygon, Multipolygon). 0 is returned for non-areal " "geometries. For linestrings use ST_Length. Measurements for geometry are in " "the units of the spatial reference system of the geometry. Measurements for " "geography are in meters. If use_spheroid is set to false, " "then will model earth as a sphere instead of a spheroid." msgstr "" #. Tag: para #: reference_measure.xml:2658 #, no-c-format msgid "" "Currently this is an alias for ST_Perimeter2D, but this may change to " "support higher dimensions." msgstr "" #. Tag: para #: reference_measure.xml:2661 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.1.3, 9.5.4" msgstr "" #. Tag: para #: reference_measure.xml:2662 #, no-c-format msgid "Availability 2.0.0: Support for geography was introduced" msgstr "" #. Tag: title #: reference_measure.xml:2666 #, no-c-format msgid "Examples: Geometry" msgstr "" #. Tag: para #: reference_measure.xml:2667 #, no-c-format msgid "" "Return perimeter in feet for polygon and multipolygon. Note this is in feet " "because 2249 is Mass State Plane Feet" msgstr "" #. Tag: programlisting #: reference_measure.xml:2669 #, no-c-format msgid "" "SELECT ST_Perimeter(ST_GeomFromText('POLYGON((743238 2967416,743238 " "2967450,743265 2967450,\n" "743265.625 2967416,743238 2967416))', 2249));\n" "st_perimeter\n" "---------\n" " 122.630744000095\n" "(1 row)\n" "\n" "SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((763104.471273676 " "2949418.44119003,\n" "763104.477769673 2949418.42538203,\n" "763104.189609677 2949418.22343004,763104.471273676 2949418.44119003)),\n" "((763104.471273676 2949418.44119003,763095.804579742 2949436.33850239,\n" "763086.132105649 2949451.46730207,763078.452329651 2949462.11549407,\n" "763075.354136904 2949466.17407812,763064.362142565 2949477.64291974,\n" "763059.953961626 2949481.28983009,762994.637609571 2949532.04103014,\n" "762990.568508415 2949535.06640477,762986.710889563 2949539.61421415,\n" "763117.237897679 2949709.50493431,763235.236617789 2949617.95619822,\n" "763287.718121842 2949562.20592617,763111.553321674 2949423.91664605,\n" "763104.471273676 2949418.44119003)))', 2249));\n" "st_perimeter\n" "---------\n" " 845.227713366825\n" "(1 row)" msgstr "" #. Tag: title #: reference_measure.xml:2672 #, no-c-format msgid "Examples: Geography" msgstr "" #. Tag: para #: reference_measure.xml:2673 #, no-c-format msgid "" "Return perimeter in meters and feet for polygon and multipolygon. Note this " "is geography (WGS 84 long lat)" msgstr "" #. Tag: programlisting #: reference_measure.xml:2674 #, no-c-format msgid "" "SELECT ST_Perimeter(geog) As per_meters, ST_Perimeter(geog)/0.3048 As " "per_ft \n" "FROM ST_GeogFromText('POLYGON((-71.1776848522251 " "42.3902896512902,-71.1776843766326 42.3903829478009,\n" "-71.1775844305465 42.3903826677917,-71.1775825927231 " "42.3902893647987,-71.1776848522251 42.3902896512902))') As geog;\n" "\n" " per_meters | per_ft\n" "-----------------+------------------\n" "37.3790462565251 | 122.634666195949\n" "\n" "\n" "-- Multipolygon example --\n" "SELECT ST_Perimeter(geog) As per_meters, ST_Perimeter(geog,false) As " "per_sphere_meters, ST_Perimeter(geog)/0.3048 As per_ft \n" "FROM ST_GeogFromText('MULTIPOLYGON(((-71.1044543107478 " "42.340674480411,-71.1044542869917 42.3406744369506,\n" "-71.1044553562977 42.340673886454,-71.1044543107478 42.340674480411)),\n" "((-71.1044543107478 42.340674480411,-71.1044860600303 " "42.3407237015564,-71.1045215770124 42.3407653385914,\n" "-71.1045498002983 42.3407946553165,-71.1045611902745 " "42.3408058316308,-71.1046016507427 42.340837442371,\n" "-71.104617893173 42.3408475056957,-71.1048586153981 " "42.3409875993595,-71.1048736143677 42.3409959528211,\n" "-71.1048878050242 42.3410084812078,-71.1044020965803 42.3414730072048,\n" "-71.1039672113619 42.3412202916693,-71.1037740497748 42.3410666421308,\n" "-71.1044280218456 42.3406894151355,-71.1044543107478 42.340674480411)))') As " "geog;\n" "\n" " per_meters | per_sphere_meters | per_ft\n" "------------------+-------------------+------------------\n" " 257.634283683311 | 257.412311446337 | 845.256836231335" msgstr "" #. Tag: para #: reference_measure.xml:2678 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_measure.xml:2684 #, no-c-format msgid "ST_Perimeter2D" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2686 #, no-c-format msgid "" "Returns the 2-dimensional perimeter of the geometry, if it is a polygon or " "multi-polygon. This is currently an alias for ST_Perimeter." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2692 #, no-c-format msgid "" "float ST_Perimeter2D " "geometry geomA" msgstr "" #. Tag: para #: reference_measure.xml:2702 #, no-c-format msgid "" "Returns the 2-dimensional perimeter of the geometry, if it is a polygon or " "multi-polygon." msgstr "" #. Tag: para #: reference_measure.xml:2707 #, no-c-format msgid "" "This is currently an alias for ST_Perimeter. In future versions ST_Perimeter " "may return the highest dimension perimeter for a geometry. This is still " "under consideration" msgstr "" #. Tag: refname #: reference_measure.xml:2721 #, no-c-format msgid "ST_3DPerimeter" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2723 #, no-c-format msgid "" "Returns the 3-dimensional perimeter of the geometry, if it is a polygon or " "multi-polygon." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2729 #, no-c-format msgid "" "float ST_3DPerimeter " "geometry geomA" msgstr "" #. Tag: para #: reference_measure.xml:2739 #, no-c-format msgid "" "Returns the 3-dimensional perimeter of the geometry, if it is a polygon or " "multi-polygon. If the geometry is 2-dimensional, then the 2-dimensional " "perimeter is returned." msgstr "" #. Tag: para #: reference_measure.xml:2742 #, no-c-format msgid "Changed: 2.0.0 In prior versions this used to be called ST_Perimeter3D" msgstr "" #. Tag: para #: reference_measure.xml:2748 #, no-c-format msgid "" "Perimeter of a slightly elevated polygon in the air in Massachusetts state " "plane feet" msgstr "" #. Tag: programlisting #: reference_measure.xml:2749 #, no-c-format msgid "" "SELECT ST_3DPerimeter(the_geom), ST_Perimeter2d(the_geom), ST_Perimeter" "(the_geom) FROM\n" " (SELECT ST_GeomFromEWKT('SRID=2249;POLYGON((743238 " "2967416 2,743238 2967450 1,\n" "743265.625 2967416 1,743238 2967416 2))') As the_geom) As foo;\n" "\n" " ST_3DPerimeter | st_perimeter2d | st_perimeter\n" "------------------+------------------+------------------\n" " 105.465793597674 | 105.432997272188 | 105.432997272188" msgstr "" #. Tag: para #: reference_measure.xml:2756 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_measure.xml:2762 #, no-c-format msgid "ST_PointOnSurface" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2764 #, no-c-format msgid "Returns a POINT guaranteed to lie on the surface." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2769 #, no-c-format msgid "" "geometry ST_PointOnSurface " "geometry g1" msgstr "" #. Tag: para #: reference_measure.xml:2781 #, no-c-format msgid "Returns a POINT guaranteed to intersect a surface." msgstr "" #. Tag: para #: reference_measure.xml:2783 #, no-c-format msgid "&sfs_compliant; s3.2.14.2 // s3.2.18.2" msgstr "" #. Tag: para #: reference_measure.xml:2784 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM 3: 8.1.5, 9.5.6. According to the specs, " "ST_PointOnSurface works for surface geometries (POLYGONs, MULTIPOLYGONS, " "CURVED POLYGONS). So PostGIS seems to be extending what the spec allows " "here. Most databases Oracle,DB II, ESRI SDE seem to only support this " "function for surfaces. SQL Server 2008 like PostGIS supports for all common " "geometries." msgstr "" #. Tag: programlisting #: reference_measure.xml:2793 #, no-c-format msgid "" "SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry));\n" " st_astext\n" "------------\n" " POINT(0 5)\n" "(1 row)\n" "\n" "SELECT ST_AsText(ST_PointOnSurface('LINESTRING(0 5, 0 10)'::geometry));\n" " st_astext\n" "------------\n" " POINT(0 5)\n" "(1 row)\n" "\n" "SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::" "geometry));\n" " st_astext\n" "----------------\n" " POINT(2.5 2.5)\n" "(1 row)\n" "\n" "SELECT ST_AsEWKT(ST_PointOnSurface(ST_GeomFromEWKT('LINESTRING(0 5 1, 0 0 1, " "0 10 2)')));\n" " st_asewkt\n" "----------------\n" " POINT(0 0 1)\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:2799 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2805 #, no-c-format msgid "ST_Project" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2807 #, no-c-format msgid "" "Returns a POINT projected from a start point using a " "bearing and distance." msgstr "" #. Tag: funcprototype #: reference_measure.xml:2812 #, no-c-format msgid "" "geography ST_Project " "geography g1 " "float distance " "float azimuth" msgstr "" #. Tag: para #: reference_measure.xml:2828 #, no-c-format msgid "" "Returns a POINT projected from a start point using an " "azimuth (bearing) and distance." msgstr "" #. Tag: para #: reference_measure.xml:2829 #, no-c-format msgid "" "Distance, azimuth and projection are all aspects of the same operation, " "describing (or in the case of projection, constructing) the relationship " "between two points on the world." msgstr "" #. Tag: para #: reference_measure.xml:2830 #, no-c-format msgid "" "The azimuth is sometimes called the heading or the bearing in navigation. It " "is measured relative to true north (azimuth zero). East is azimuth 90, south " "is azimuth 180, west is azimuth 270." msgstr "" #. Tag: para #: reference_measure.xml:2831 #, no-c-format msgid "The distance is given in meters." msgstr "" #. Tag: programlisting #: reference_measure.xml:2838 #, no-c-format msgid "" "SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, 45));\n" " st_astext\n" " ------------------------------------------\n" " POINT(0.63523102912532 0.63947233472882)\n" " (1 row)" msgstr "" #. Tag: para #: reference_measure.xml:2844 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2850 #, no-c-format msgid "ST_Relate" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2852 #, no-c-format msgid "" "Returns true if this Geometry is spatially related to anotherGeometry, by " "testing for intersections between the Interior, Boundary and Exterior of the " "two geometries as specified by the values in the intersectionMatrixPattern. " "If no intersectionMatrixPattern is passed in, then returns the maximum " "intersectionMatrixPattern that relates the 2 geometries." msgstr "" #. Tag: funcsynopsis #: reference_measure.xml:2860 #, no-c-format msgid "" " boolean ST_Relate " "geometry geomA " "geometry geomB " "text intersectionMatrixPattern text " "ST_Relate geometry " "geomA geometry " "geomB " "text ST_Relate " "geometry geomA " "geometry geomB " "int BoundaryNodeRule " msgstr "" #. Tag: para #: reference_measure.xml:2886 #, no-c-format msgid "" "Version 1: Takes geomA, geomB, intersectionMatrix and Returns 1 (TRUE) if " "this Geometry is spatially related to anotherGeometry, by testing for " "intersections between the Interior, Boundary and Exterior of the two " "geometries as specified by the values in the DE-9IM matrix pattern." msgstr "" #. Tag: para #: reference_measure.xml:2891 #, no-c-format msgid "" "This is especially useful for testing compound checks of intersection, " "crosses, etc in one step." msgstr "" #. Tag: para #: reference_measure.xml:2894 #, no-c-format msgid "" "This is the \"allowable\" version that returns a boolean, not an integer. " "This is defined in OGC spec" msgstr "" #. Tag: para #: reference_measure.xml:2897 #, no-c-format msgid "" "This DOES NOT automagically include an index call. The reason for that is " "some relationships are anti e.g. Disjoint. If you are using a relationship " "pattern that requires intersection, then include the && index call." msgstr "" #. Tag: para #: reference_measure.xml:2902 #, no-c-format msgid "" "Version 2: Takes geomA and geomB and returns the " msgstr "" #. Tag: para #: reference_measure.xml:2904 #, no-c-format msgid "" "Version 3: same as version 2 bu allows to specify a boundary node rule (1:" "OGC/MOD2, 2:Endpoint, 3:MultivalentEndpoint, 4:MonovalentEndpoint)" msgstr "" #. Tag: para #: reference_measure.xml:2908 #, no-c-format msgid "not in OGC spec, but implied. see s2.1.13.2" msgstr "" #. Tag: para #: reference_measure.xml:2913 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.25" msgstr "" #. Tag: para #: reference_measure.xml:2914 #, no-c-format msgid "" "Enhanced: 2.0.0 - added support for specifying boundary node rule (requires " "GEOS >= 3.0)." msgstr "" #. Tag: programlisting #: reference_measure.xml:2921 #, no-c-format msgid "" "--Find all compounds that intersect and not touch a poly (interior " "intersects)\n" "SELECT l.* , b.name As poly_name\n" " FROM polys As b\n" "INNER JOIN compounds As l\n" "ON (p.the_geom && b.the_geom\n" "AND ST_Relate(l.the_geom, b.the_geom,'T********'));\n" "\n" "SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer" "(ST_GeometryFromText('POINT(1 2)'),2));\n" "st_relate\n" "-----------\n" "0FFFFF212\n" "\n" "SELECT ST_Relate(ST_GeometryFromText('LINESTRING(1 2, 3 4)'), " "ST_GeometryFromText('LINESTRING(5 6, 7 8)'));\n" "st_relate\n" "-----------\n" "FF1FF0102\n" "\n" "\n" "SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer" "(ST_GeometryFromText('POINT(1 2)'),2), '0FFFFF212');\n" "st_relate\n" "-----------\n" "t\n" "\n" "SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer" "(ST_GeometryFromText('POINT(1 2)'),2), '*FF*FF212');\n" "st_relate\n" "-----------\n" "t" msgstr "" #. Tag: para #: reference_measure.xml:2928 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_measure.xml:2934 #, no-c-format msgid "ST_RelateMatch" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2936 #, no-c-format msgid "" "Returns true if intersectionMattrixPattern1 implies " "intersectionMatrixPattern2" msgstr "" #. Tag: funcprototype #: reference_measure.xml:2941 #, no-c-format msgid "" "boolean ST_RelateMatch " "text intersectionMatrix text intersectionMatrixPattern" msgstr "" #. Tag: para #: reference_measure.xml:2952 #, no-c-format msgid "" "Takes intersectionMatrix and intersectionMatrixPattern and Returns true if " "the intersectionMatrix satisfies the intersectionMatrixPattern. For more " "information refer to ." msgstr "" #. Tag: para #: reference_measure.xml:2955 #, no-c-format msgid "Availability: 2.0.0 - requires GEOS >= 3.3.0." msgstr "" #. Tag: programlisting #: reference_measure.xml:2961 #, no-c-format msgid "" "SELECT ST_RelateMatch('101202FFF', 'TTTTTTFFF') ;\n" "-- result --\n" "t\n" "--example of common intersection matrix patterns and example matrices\n" "-- comparing relationships of involving one invalid geometry and ( a line " "and polygon that intersect at interior and boundary)\n" "SELECT mat.name, pat.name, ST_RelateMatch(mat.val, pat.val) As satisfied\n" " FROM \n" " ( VALUES ('Equality', 'T1FF1FFF1'),\n" " ('Overlaps', 'T*T***T**'),\n" " ('Within', 'T*F**F***'),\n" " ('Disjoint', 'FF*FF****') As pat(name,val)\n" " CROSS JOIN \n" " ( VALUES ('Self intersections (invalid)', '111111111'),\n" " ('IE2_BI1_BB0_BE1_EI1_EE2', 'FF2101102'),\n" " ('IB1_IE1_BB0_BE0_EI2_EI1_EE2', 'F11F00212')\n" " ) As mat(name,val);" msgstr "" #. Tag: para #: reference_measure.xml:2967 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_measure.xml:2973 #, no-c-format msgid "ST_ShortestLine" msgstr "" #. Tag: refpurpose #: reference_measure.xml:2975 #, no-c-format msgid "Returns the 2-dimensional shortest line between two geometries" msgstr "" #. Tag: funcprototype #: reference_measure.xml:2980 #, no-c-format msgid "" "geometry ST_ShortestLine " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:2995 #, no-c-format msgid "" "Returns the 2-dimensional shortest line between two geometries. The function " "will only return the first shortest line if more than one, that the function " "finds. If g1 and g2 intersects in just one point the function will return a " "line with both start and end in that intersection-point. If g1 and g2 are " "intersecting with more than one point the function will return a line with " "start and end in the same point but it can be any of the intersecting " "points. The line returned will always start in g1 and end in g2. The length " "of the line this function returns will always be the same as st_distance " "returns for g1 and g2." msgstr "" #. Tag: para #: reference_measure.xml:3019 #, no-c-format msgid "Shortest line between point and linestring" msgstr "" #. Tag: programlisting #: reference_measure.xml:3022 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_ShortestLine('POINT(100 100)'::geometry, \n" " 'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry)\n" " ) As sline;\n" "\n" " \n" " sline\n" "-----------------\n" "LINESTRING(100 100,73.0769230769231 115.384615384615)" msgstr "" #. Tag: para #: reference_measure.xml:3030 #, no-c-format msgid "shortest line between polygon and polygon" msgstr "" #. Tag: programlisting #: reference_measure.xml:3033 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_ShortestLine(\n" " ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 " "100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ) \n" " ) As slinewkt;\n" " \n" " LINESTRING(140.752120669087 125.695053378061,121.111404660392 " "153.370607753949)" msgstr "" #. Tag: para #: reference_measure.xml:3045 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_measure.xml:3051 #, no-c-format msgid "ST_Touches" msgstr "" #. Tag: refpurpose #: reference_measure.xml:3053 #, no-c-format msgid "" "Returns TRUE if the geometries have at least one point in " "common, but their interiors do not intersect." msgstr "" #. Tag: funcprototype #: reference_measure.xml:3059 #, no-c-format msgid "" "boolean ST_Touches " "geometry g1 " "geometry g2" msgstr "" #. Tag: para #: reference_measure.xml:3074 #, no-c-format msgid "" "Returns TRUE if the only points in common between " "g1 and g2 lie in the union of " "the boundaries of g1 and g2. " "The ST_Touches relation applies to all Area/Area, Line/" "Line, Line/Area, Point/Area and Point/Line pairs of relationships, but " "not to the Point/Point pair." msgstr "" #. Tag: para #: reference_measure.xml:3081 #, no-c-format msgid "In mathematical terms, this predicate is expressed as:" msgstr "" #. Tag: para #: reference_measure.xml:3091 #, no-c-format msgid "The allowable DE-9IM Intersection Matrices for the two geometries are:" msgstr "" #. Tag: markup #: reference_measure.xml:3095 #, no-c-format msgid "FT*******" msgstr "" #. Tag: markup #: reference_measure.xml:3099 #, no-c-format msgid "F**T*****" msgstr "" #. Tag: markup #: reference_measure.xml:3103 #, no-c-format msgid "F***T****" msgstr "" #. Tag: para #: reference_measure.xml:3112 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries. To avoid " "using an index, use _ST_Touches instead." msgstr "" #. Tag: para #: reference_measure.xml:3118 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.28" msgstr "" #. Tag: para #: reference_measure.xml:3124 #, no-c-format msgid "" "The ST_Touches predicate returns TRUE in all the following illustrations." msgstr "" #. Tag: programlisting #: reference_measure.xml:3194 #, no-c-format msgid "" "SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::" "geometry);\n" " st_touches\n" "------------\n" " f\n" "(1 row)\n" "\n" "SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(0 2)'::" "geometry);\n" " st_touches\n" "------------\n" " t\n" "(1 row)" msgstr "" #. Tag: refname #: reference_measure.xml:3200 #, no-c-format msgid "ST_Within" msgstr "" #. Tag: refpurpose #: reference_measure.xml:3202 #, no-c-format msgid "Returns true if the geometry A is completely inside geometry B" msgstr "" #. Tag: funcprototype #: reference_measure.xml:3207 #, no-c-format msgid "" "boolean ST_Within " "geometry A " "geometry B" msgstr "" #. Tag: para #: reference_measure.xml:3222 #, no-c-format msgid "" "Returns TRUE if geometry A is completely inside geometry B. For this " "function to make sense, the source geometries must both be of the same " "coordinate projection, having the same SRID. It is a given that if ST_Within" "(A,B) is true and ST_Within(B,A) is true, then the two geometries are " "considered spatially equal." msgstr "" #. Tag: para #: reference_measure.xml:3237 #, no-c-format msgid "" "This function call will automatically include a bounding box comparison that " "will make use of any indexes that are available on the geometries. To avoid " "index use, use the function _ST_Within." msgstr "" #. Tag: para #: reference_measure.xml:3245 #, no-c-format msgid "&sfs_compliant; s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***')" msgstr "" #. Tag: para #: reference_measure.xml:3248 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.30" msgstr "" #. Tag: programlisting #: reference_measure.xml:3253 #, no-c-format msgid "" "--a circle within a circle\n" "SELECT ST_Within(smallc,smallc) As smallinsmall,\n" " ST_Within(smallc, bigc) As smallinbig,\n" " ST_Within(bigc,smallc) As biginsmall,\n" " ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,\n" " ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,\n" " ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion\n" "FROM\n" "(\n" "SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,\n" " ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;\n" "--Result\n" " smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | " "bigisunion\n" "--------------+------------+------------+------------+------------" "+------------\n" " t | t | f | t | t | t\n" "(1 row)" msgstr "" #. Tag: para #: reference_measure.xml:3264 #, no-c-format msgid ", , " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/extras_topology.xml.po0000644000000000000000000033147312035636370022372 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-11 21:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: extras_topology.xml:3 #, no-c-format msgid "Topology" msgstr "" #. Tag: para #: extras_topology.xml:4 #, no-c-format msgid "" "The PostGIS Topology types and functions are used to manage topological " "objects such as faces, edges and nodes." msgstr "" #. Tag: para #: extras_topology.xml:5 #, no-c-format msgid "" "Sandro Santilli's presentation at PostGIS Day Paris 2011 conference gives a " "good synopsis of PostGIS Topology and where it is headed Topology with PostGIS 2.0 slide deck." msgstr "" #. Tag: para #: extras_topology.xml:6 #, no-c-format msgid "" "Vincent Picavet provides a good synopsis and overview of what is Topology, " "how is it used, and various FOSS4G tools that support it in State of the art of FOSS4G " "for topology and network analysis." msgstr "" #. Tag: para #: extras_topology.xml:7 #, no-c-format msgid "" "An example of a topologically based GIS database is the US Census Topologically " "Integrated Geographic Encoding and Reference System (TIGER) " "database. If you want to experiment with PostGIS topology and need some " "data, check out ." msgstr "" #. Tag: para #: extras_topology.xml:8 #, no-c-format msgid "" "The PostGIS topology module has existed in prior versions of PostGIS but was " "never part of the Official PostGIS documentation. In PostGIS 2.0.0 major " "cleanup is going on to remove use of all deprecated functions in it, fix " "known usability issues, better document the features and functions, add new " "functions, and enhance to closer conform to SQL-MM standards." msgstr "" #. Tag: para #: extras_topology.xml:10 #, no-c-format msgid "" "Details of this project can be found at PostGIS Topology Wiki" msgstr "" #. Tag: para #: extras_topology.xml:11 #, no-c-format msgid "" "All functions and tables associated with this module are installed in a " "schema called topology." msgstr "" #. Tag: para #: extras_topology.xml:12 #, no-c-format msgid "" "Functions that are defined in SQL/MM standard are prefixed with ST_ and " "functions specific to PostGIS are not prefixed." msgstr "" #. Tag: para #: extras_topology.xml:13 #, no-c-format msgid "" "To build PostGIS 2.0 with topology support, compile with the --with-topology " "option as described in . Some " "functions depend on GEOS 3.3+ so you should compile with GEOS 3.3+ to fully " "utilize the topology support." msgstr "" #. Tag: para #: extras_topology.xml:18 #, no-c-format msgid "" "This section lists the PostgreSQL data types installed by PostGIS Topology. " "Note we describe the casting behavior of these which is very important " "especially when designing your own functions." msgstr "" #. Tag: title #: extras_topology.xml:23 #, no-c-format msgid "Topology Types" msgstr "" #. Tag: refname #: extras_topology.xml:27 #, no-c-format msgid "getfaceedges_returntype" msgstr "" #. Tag: refpurpose #: extras_topology.xml:28 #, no-c-format msgid "" "A composite type that consists of a sequence number and edge number. This is " "the return type for ST_GetFaceEdges" msgstr "" #. Tag: title #: extras_topology.xml:31 extras_topology.xml:50 extras_topology.xml:99 #: extras_topology.xml:138 extras_topology.xml:159 extras_topology.xml:236 #: extras_topology.xml:283 extras_topology.xml:324 extras_topology.xml:363 #: extras_topology.xml:400 extras_topology.xml:470 extras_topology.xml:518 #: extras_topology.xml:566 extras_topology.xml:610 extras_topology.xml:658 #: extras_topology.xml:704 extras_topology.xml:750 extras_topology.xml:805 #: extras_topology.xml:851 extras_topology.xml:898 extras_topology.xml:955 #: extras_topology.xml:1013 extras_topology.xml:1085 extras_topology.xml:1153 #: extras_topology.xml:1219 extras_topology.xml:1273 extras_topology.xml:1321 #: extras_topology.xml:1368 extras_topology.xml:1411 extras_topology.xml:1465 #: extras_topology.xml:1559 extras_topology.xml:1654 extras_topology.xml:1696 #: extras_topology.xml:1738 extras_topology.xml:1781 extras_topology.xml:1830 #: extras_topology.xml:1874 extras_topology.xml:1926 extras_topology.xml:1984 #: extras_topology.xml:2025 extras_topology.xml:2082 extras_topology.xml:2128 #: extras_topology.xml:2219 extras_topology.xml:2281 extras_topology.xml:2329 #: extras_topology.xml:2377 extras_topology.xml:2425 extras_topology.xml:2519 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: extras_topology.xml:32 #, no-c-format msgid "" "A composite type that consists of a sequence number and edge number. This is " "the return type for ST_GetFaceEdges function." msgstr "" #. Tag: para #: extras_topology.xml:35 #, no-c-format msgid "" "sequence is an integer: Refers to a topology defined in " "the topology.topology table which defines the topology schema and srid." msgstr "" #. Tag: para #: extras_topology.xml:38 #, no-c-format msgid "edge is an integer: The identifier of an edge." msgstr "" #. Tag: refname #: extras_topology.xml:46 #, no-c-format msgid "topogeometry" msgstr "" #. Tag: refpurpose #: extras_topology.xml:47 #, no-c-format msgid "" "A composite type that refers to a topology geometry in a specific topology, " "layer, having specific type (1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:" "collection) with specific identifier id in the topology. The id uniquely " "defines the topogeometry in the topology." msgstr "" #. Tag: para #: extras_topology.xml:51 #, no-c-format msgid "" "A composite type that refers to a topology geometry in a specific topology, " "layer, having specific type with specific id. The elements of a topogeometry " "are the properties: topology_id,layer_id,id integer,type integer." msgstr "" #. Tag: para #: extras_topology.xml:54 #, no-c-format msgid "" "topology_id is an integer: Refers to a topology defined " "in the topology.topology table which defines the topology schema and srid." msgstr "" #. Tag: para #: extras_topology.xml:57 #, no-c-format msgid "" "layer_id is an integer: The layer_id in the layers table " "that hte topogeometry belongs to. The combination of topology_id, layer_id " "provides a unique reference in the topology.layers table." msgstr "" #. Tag: para #: extras_topology.xml:60 #, no-c-format msgid "" "type integer between 1 - 4 that defines the geometry " "type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection" msgstr "" #. Tag: para #: extras_topology.xml:63 #, no-c-format msgid "" "id is an integer: The id is the autogenerated sequence " "number that uniquely defines the topogeometry in the respective topology." msgstr "" #. Tag: title #: extras_topology.xml:69 #, no-c-format msgid "Casting Behavior" msgstr "" #. Tag: para #: extras_topology.xml:70 #, no-c-format msgid "" "This section lists the automatic as well as explicit casts allowed for this " "data type" msgstr "" #. Tag: entry #: extras_topology.xml:75 #, no-c-format msgid "Cast To" msgstr "" #. Tag: entry #: extras_topology.xml:76 #, no-c-format msgid "Behavior" msgstr "" #. Tag: entry #: extras_topology.xml:79 #, no-c-format msgid "geometry" msgstr "" #. Tag: entry #: extras_topology.xml:80 #, no-c-format msgid "automatic" msgstr "" #. Tag: title #: extras_topology.xml:88 extras_topology.xml:116 extras_topology.xml:148 #: extras_topology.xml:169 extras_topology.xml:261 extras_topology.xml:301 #: extras_topology.xml:341 extras_topology.xml:378 extras_topology.xml:419 #: extras_topology.xml:495 extras_topology.xml:544 extras_topology.xml:583 #: extras_topology.xml:632 extras_topology.xml:673 extras_topology.xml:719 #: extras_topology.xml:765 extras_topology.xml:826 extras_topology.xml:873 #: extras_topology.xml:929 extras_topology.xml:986 extras_topology.xml:1058 #: extras_topology.xml:1126 extras_topology.xml:1193 extras_topology.xml:1241 #: extras_topology.xml:1290 extras_topology.xml:1340 extras_topology.xml:1388 #: extras_topology.xml:1437 extras_topology.xml:1483 extras_topology.xml:1537 #: extras_topology.xml:1581 extras_topology.xml:1631 extras_topology.xml:1669 #: extras_topology.xml:1711 extras_topology.xml:1753 extras_topology.xml:1803 #: extras_topology.xml:1848 extras_topology.xml:1898 extras_topology.xml:1951 #: extras_topology.xml:2000 extras_topology.xml:2059 extras_topology.xml:2102 #: extras_topology.xml:2177 extras_topology.xml:2249 extras_topology.xml:2307 #: extras_topology.xml:2343 extras_topology.xml:2396 extras_topology.xml:2443 #: extras_topology.xml:2551 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: extras_topology.xml:95 #, no-c-format msgid "validatetopology_returntype" msgstr "" #. Tag: refpurpose #: extras_topology.xml:96 #, no-c-format msgid "" "A composite type that consists of an error message and id1 and id2 to denote " "location of error. This is the return type for ValidateTopology" msgstr "" #. Tag: para #: extras_topology.xml:100 #, no-c-format msgid "" "A composite type that consists of an error message and two integers. The " " function returns a set of these to " "denote validation errors and the id1 and id2 to denote the ids of the " "topology objects involved in the error." msgstr "" #. Tag: para #: extras_topology.xml:103 #, no-c-format msgid "error is varchar: Denotes type of error." msgstr "" #. Tag: para #: extras_topology.xml:104 #, no-c-format msgid "" "Current error descriptors are: coincident nodes, edge crosses node, edge not " "simple, edge end node geometry mis-match, edge start node geometry mismatch, " "face overlaps face,face within face," msgstr "" #. Tag: para #: extras_topology.xml:107 #, no-c-format msgid "" "id1 is an integer: Denotes identifier of edge / face / " "nodes in error." msgstr "" #. Tag: para #: extras_topology.xml:110 #, no-c-format msgid "" "id2 is an integer: For errors that involve 2 objects " "denotes the secondary edge / or node" msgstr "" #. Tag: para #: extras_topology.xml:125 #, no-c-format msgid "" "This section lists the PostgreSQL domains installed by PostGIS Topology. " "Domains can be used like object types as return objects of functions or " "table columns. The distinction between a domain and a type is that a domain " "is an existing type with a check constraint bound to it." msgstr "" #. Tag: title #: extras_topology.xml:130 #, no-c-format msgid "Topology Domains" msgstr "" #. Tag: refname #: extras_topology.xml:134 #, no-c-format msgid "TopoElement" msgstr "" #. Tag: refpurpose #: extras_topology.xml:135 #, no-c-format msgid "" "An array of 2 integers generally used to identify a TopoGeometry component." msgstr "" #. Tag: para #: extras_topology.xml:139 #, no-c-format msgid "" "An array of 2 integers used to represent the id and type of a topology " "primitive or the id and layer of a TopoGeometry. Sets of such pairs are used " "to define TopoGeometry objects (either simple or hierarchical)." msgstr "" #. Tag: title #: extras_topology.xml:142 extras_topology.xml:163 extras_topology.xml:254 #: extras_topology.xml:294 extras_topology.xml:335 extras_topology.xml:373 #: extras_topology.xml:413 extras_topology.xml:484 extras_topology.xml:534 #: extras_topology.xml:577 extras_topology.xml:626 extras_topology.xml:819 #: extras_topology.xml:866 extras_topology.xml:922 extras_topology.xml:979 #: extras_topology.xml:1051 extras_topology.xml:1119 extras_topology.xml:1187 #: extras_topology.xml:1235 extras_topology.xml:1382 extras_topology.xml:1431 #: extras_topology.xml:1477 extras_topology.xml:1529 extras_topology.xml:1574 #: extras_topology.xml:1623 extras_topology.xml:1663 extras_topology.xml:1705 #: extras_topology.xml:1747 extras_topology.xml:1796 extras_topology.xml:1842 #: extras_topology.xml:2053 extras_topology.xml:2096 extras_topology.xml:2171 #: extras_topology.xml:2300 extras_topology.xml:2339 extras_topology.xml:2389 #: extras_topology.xml:2436 extras_topology.xml:2542 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: extras_topology.xml:143 #, no-c-format msgid "" "SELECT ARRAY[1,2]::topology.topoelement;\n" " te\n" "-------\n" " {1,2}" msgstr "" #. Tag: programlisting #: extras_topology.xml:144 #, no-c-format msgid "" "--Example of what happens when you try to case a 3 element array to " "topoelement\n" "-- NOTE: topoement has to be a 2 element array so fails dimension check\n" "SELECT ARRAY[1,2,3]::topology.topoelement;\n" "ERROR: value for domain topology.topoelement violates check constraint " "\"dimensions\"" msgstr "" #. Tag: refname #: extras_topology.xml:155 #, no-c-format msgid "TopoElementArray" msgstr "" #. Tag: refpurpose #: extras_topology.xml:156 #, no-c-format msgid "An array of TopoElement objects" msgstr "" #. Tag: para #: extras_topology.xml:160 #, no-c-format msgid "" "An array of 1 or more TopoElement objects, generally used to pass around " "components of TopoGeometry objects." msgstr "" #. Tag: programlisting #: extras_topology.xml:164 #, no-c-format msgid "" "SELECT '{{1,2},{4,3}}'::topology.topoelementarray As tea;\n" " tea\n" "-------\n" "{{1,2},{4,3}}\n" "\n" "-- more verbose equivalent --\n" "SELECT ARRAY[ARRAY[1,2], ARRAY[4,3]]::topology.topoelementarray As tea;\n" "\n" " tea\n" "-------\n" "{{1,2},{4,3}}\n" "\n" "--using the array agg function packaged with topology --\n" "SELECT topology.TopoElementArray_Agg(ARRAY[e,t]) As tea\n" " FROM generate_series(1,4) As e CROSS JOIN generate_series(1,3) As t;\n" " tea\n" "--------------------------------------------------------------------------\n" "{{1,1},{1,2},{1,3},{2,1},{2,2},{2,3},{3,1},{3,2},{3,3},{4,1},{4,2},{4,3}}" msgstr "" #. Tag: programlisting #: extras_topology.xml:165 #, no-c-format msgid "" "SELECT '{{1,2,4},{3,4,5}}'::topology.topoelementarray As tea;\n" "ERROR: value for domain topology.topoelementarray violates check constraint " "\"dimensions\"" msgstr "" #. Tag: para #: extras_topology.xml:170 #, no-c-format msgid "" ", , " msgstr "" #. Tag: para #: extras_topology.xml:182 #, no-c-format msgid "" "This section lists the Topology functions for building new Topology schemas, " "validating topologies, and managing TopoGeometry Columns" msgstr "" #. Tag: title #: extras_topology.xml:185 #, no-c-format msgid "Topology and TopoGeometry Management" msgstr "" #. Tag: refname #: extras_topology.xml:188 #, no-c-format msgid "AddTopoGeometryColumn" msgstr "" #. Tag: refpurpose #: extras_topology.xml:189 #, no-c-format msgid "" "Adds a topogeometry column to an existing table, registers this new column " "as a layer in topology.layer and returns the new layer_id." msgstr "" #. Tag: funcsynopsis #: extras_topology.xml:193 #, no-c-format msgid "" " text AddTopoGeometryColumn varchar topology_name varchar " "schema_name varchar table_name varchar column_name varchar " " feature_type " " text AddTopoGeometryColumn varchar topology_name varchar " "schema_name varchar table_name varchar column_name varchar " " feature_type " "integer child_layer " msgstr "" #. Tag: para #: extras_topology.xml:238 #, no-c-format msgid "" "Each TopoGeometry object belongs to a specific Layer of a specific Topology. " "Before creating a TopoGeometry object you need to create its TopologyLayer. " "A Topology Layer is an association of a feature-table with the topology. It " "also contain type and hierarchy information. We create a layer using the " "AddTopoGeometryColumn() function:" msgstr "" #. Tag: para #: extras_topology.xml:240 #, no-c-format msgid "" "This function will both add the requested column to the table and add a " "record to the topology.layer table with all the given info." msgstr "" #. Tag: para #: extras_topology.xml:241 #, no-c-format msgid "" "If you don't specify [child_layer] (or set it to NULL) this layer would " "contain Basic TopoGeometries (composed by primitive topology elements). " "Otherwise this layer will contain hierarchical TopoGeometries (composed by " "TopoGeometries from the child_layer)." msgstr "" #. Tag: para #: extras_topology.xml:244 #, no-c-format msgid "" "Once the layer is created (it's id is returned by the AddTopoGeometryColumn " "function) you're ready to construct TopoGeometry objects in it" msgstr "" #. Tag: para #: extras_topology.xml:245 #, no-c-format msgid "" "Valid feature_types are: POINT, LINE, POLYGON, COLLECTION" msgstr "" #. Tag: para #: extras_topology.xml:248 extras_topology.xml:289 extras_topology.xml:330 #: extras_topology.xml:406 extras_topology.xml:479 extras_topology.xml:571 #: extras_topology.xml:813 extras_topology.xml:860 extras_topology.xml:1228 #: extras_topology.xml:1376 extras_topology.xml:1425 extras_topology.xml:1471 #: extras_topology.xml:1658 extras_topology.xml:1742 extras_topology.xml:1836 #: extras_topology.xml:2227 extras_topology.xml:2384 extras_topology.xml:2431 #, no-c-format msgid "Availability: 1.?" msgstr "" #. Tag: programlisting #: extras_topology.xml:255 #, no-c-format msgid "" "-- Note for this example we created our new table in the ma_topo schema \n" "-- though we could have created it in a different schema -- in which case " "topology_name and schema_name would be different \n" "CREATE SCHEMA ma;\n" "CREATE TABLE ma.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, " "address text);\n" "SELECT topology.AddTopoGeometryColumn('ma_topo', 'ma', 'parcels', 'topo', " "'POLYGON');" msgstr "" #. Tag: programlisting #: extras_topology.xml:256 #, no-c-format msgid "" "CREATE SCHEMA ri;\n" "CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);\n" "SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', " "'LINE');" msgstr "" #. Tag: para #: extras_topology.xml:263 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_topology.xml:268 #, no-c-format msgid "DropTopology" msgstr "" #. Tag: refpurpose #: extras_topology.xml:270 #, no-c-format msgid "" "Use with caution: Drops a topology schema and deletes its reference from " "topology.topology table and references to tables in that schema from the " "geometry_columns table." msgstr "" #. Tag: funcprototype #: extras_topology.xml:275 #, no-c-format msgid "" "integer DropTopology " "varchar topology_schema_name" msgstr "" #. Tag: para #: extras_topology.xml:285 #, no-c-format msgid "" "Drops a topology schema and deletes its reference from topology.topology " "table and references to tables in that schema from the geometry_columns " "table. This function should be USED WITH CAUTION, as it could destroy data " "you care about. If the schema does not exist, it just removes reference " "entries the named schema." msgstr "" #. Tag: para #: extras_topology.xml:295 #, no-c-format msgid "" "Cascade drops the ma_topo schema and removes all references to it in " "topology.topology and geometry_columns." msgstr "" #. Tag: programlisting #: extras_topology.xml:296 #, no-c-format msgid "SELECT topology.DropTopology('ma_topo');" msgstr "" #. Tag: refname #: extras_topology.xml:307 #, no-c-format msgid "DropTopoGeometryColumn" msgstr "" #. Tag: refpurpose #: extras_topology.xml:309 #, no-c-format msgid "" "Drops the topogeometry column from the table named table_name in schema schema_name and unregisters the " "columns from topology.layer table." msgstr "" #. Tag: funcprototype #: extras_topology.xml:314 #, no-c-format msgid "" "text DropTopoGeometryColumn " "varchar schema_name varchar table_name varchar column_name" msgstr "" #. Tag: para #: extras_topology.xml:326 #, no-c-format msgid "" "Drops the topogeometry column from the table named table_name in schema schema_name and unregisters the " "columns from topology.layer table. Returns summary of drop status. NOTE: it " "first sets all values to NULL before dropping to bypass referential " "integrity checks." msgstr "" #. Tag: programlisting #: extras_topology.xml:336 #, no-c-format msgid "" "SELECT topology.DropTopoGeometryColumn('ma_topo', 'parcel_topo', 'topo');" msgstr "" #. Tag: refname #: extras_topology.xml:348 #, no-c-format msgid "TopologySummary" msgstr "" #. Tag: refpurpose #: extras_topology.xml:350 #, no-c-format msgid "" "Takes a topology name and provides summary totals of types of objects in " "topology" msgstr "" #. Tag: funcprototype #: extras_topology.xml:355 #, no-c-format msgid "" "text TopologySummary " "varchar topology_schema_name" msgstr "" #. Tag: para #: extras_topology.xml:365 #, no-c-format msgid "" "Takes a topology name and provides summary totals of types of objects in " "topology." msgstr "" #. Tag: para #: extras_topology.xml:368 extras_topology.xml:529 extras_topology.xml:667 #: extras_topology.xml:713 extras_topology.xml:759 extras_topology.xml:1700 #: extras_topology.xml:1995 extras_topology.xml:2048 extras_topology.xml:2166 #: extras_topology.xml:2334 extras_topology.xml:2537 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: programlisting #: extras_topology.xml:374 #, no-c-format msgid "" "SELECT topology.topologysummary('city_data');\n" " topologysummary \n" "--------------------------------------------------------\n" " Topology city_data (329), SRID 4326, precision: 0\n" " 22 nodes, 24 edges, 10 faces, 29 topogeoms in 5 layers\n" " Layer 1, type Polygonal (3), 9 topogeoms\n" " Deploy: features.land_parcels.feature\n" " Layer 2, type Puntal (1), 8 topogeoms\n" " Deploy: features.traffic_signs.feature\n" " Layer 3, type Lineal (2), 8 topogeoms\n" " Deploy: features.city_streets.feature\n" " Layer 4, type Polygonal (3), 3 topogeoms\n" " Hierarchy level 1, child layer 1\n" " Deploy: features.big_parcels.feature\n" " Layer 5, type Puntal (1), 1 topogeoms\n" " Hierarchy level 1, child layer 2\n" " Deploy: features.big_signs.feature" msgstr "" #. Tag: refname #: extras_topology.xml:385 #, no-c-format msgid "ValidateTopology" msgstr "" #. Tag: refpurpose #: extras_topology.xml:387 #, no-c-format msgid "" "Returns a set of validatetopology_returntype objects detailing issues with " "topology" msgstr "" #. Tag: funcprototype #: extras_topology.xml:392 #, no-c-format msgid "" "setof validatetopology_returntype ValidateTopology varchar " "topology_schema_name" msgstr "" #. Tag: para #: extras_topology.xml:402 #, no-c-format msgid "" "Returns a set of objects " "detailing issues with topology. Refer to for listing of possible errors." msgstr "" #. Tag: para #: extras_topology.xml:408 #, no-c-format msgid "" "Enhanced: 2.0.0 more efficient edge crossing detection and fixes for false " "positives that were existent in prior versions." msgstr "" #. Tag: programlisting #: extras_topology.xml:414 #, no-c-format msgid "" "SELECT * FROM topology.ValidateTopology('ma_topo');\n" " error | id1 | id2\n" "-------------------+-----+-----\n" "face without edges | 0 |" msgstr "" #. Tag: para #: extras_topology.xml:420 #, no-c-format msgid ", " msgstr "" #. Tag: para #: extras_topology.xml:428 #, no-c-format msgid "This section covers the topology functions for creating new topologies." msgstr "" #. Tag: title #: extras_topology.xml:431 #, no-c-format msgid "Topology Constructors" msgstr "" #. Tag: refname #: extras_topology.xml:435 #, no-c-format msgid "CreateTopology" msgstr "" #. Tag: refpurpose #: extras_topology.xml:436 #, no-c-format msgid "" "Creates a new topology schema and registers this new schema in the topology." "topology table." msgstr "" #. Tag: funcsynopsis #: extras_topology.xml:440 #, no-c-format msgid "" " integer CreateTopology varchar topology_schema_name integer " "CreateTopology varchar topology_schema_name " "integer srid integer CreateTopology varchar " "topology_schema_name " "integer srid " "double precision tolerance integer " "CreateTopology varchar topology_schema_name " "integer srid " "double precision tolerance boolean hasz " msgstr "" #. Tag: para #: extras_topology.xml:472 #, no-c-format msgid "" "Creates a new schema with name topology_name consisting " "of tables (edge_data,face," "node, relation and registers this new " "topology in the topology.topology table. It returns the id of the topology " "in the topology table. The srid is the spatial reference identified as " "defined in spatial_ref_sys table for that topology. Topologies must be " "uniquely named. The tolerance is measured in the units of the spatial " "reference system. If the tolerance is not specified defaults to 0." msgstr "" #. Tag: para #: extras_topology.xml:476 #, no-c-format msgid "" "This is similar to the SQL/MM but a bit " "more functional. hasz defaults to false if not specified." msgstr "" #. Tag: para #: extras_topology.xml:485 #, no-c-format msgid "" "This example creates a new schema called ma_topo that will store edges, " "faces, and relations in Massachusetts State Plane meters. The tolerance " "represents 1/2 meter since the spatial reference system is a meter based " "spatial reference system" msgstr "" #. Tag: programlisting #: extras_topology.xml:487 #, no-c-format msgid "SELECT topology.CreateTopology('ma_topo',26986, 0.5);" msgstr "" #. Tag: para #: extras_topology.xml:489 #, no-c-format msgid "Create Rhode Island topology in State Plane ft" msgstr "" #. Tag: programlisting #: extras_topology.xml:490 #, no-c-format msgid "" "SELECT topology.CreateTopology('ri_topo',3438) As topoid;\n" "topoid\n" "------\n" "2" msgstr "" #. Tag: para #: extras_topology.xml:497 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: extras_topology.xml:503 #, no-c-format msgid "CopyTopology" msgstr "" #. Tag: refpurpose #: extras_topology.xml:504 #, no-c-format msgid "" "Makes a copy of a topology structure (nodes, edges, faces, layers and " "TopoGeometries)." msgstr "" #. Tag: funcprototype #: extras_topology.xml:509 #, no-c-format msgid "" "integer CopyTopology " "varchar existing_topology_name varchar new_name" msgstr "" #. Tag: para #: extras_topology.xml:520 #, no-c-format msgid "" "Creates a new topology with name new_topology_name and " "SRID and precision taken from existing_topology_name, " "copies all nodes, edges and faces in there, copies layers and their " "TopoGeometries too." msgstr "" #. Tag: para #: extras_topology.xml:524 #, no-c-format msgid "" "The new rows in topology.layer will contain synthesized values for " "schema_name, table_name and feature_column. This is because the TopoGeometry " "will only exist as a definition but won't be available in any user-level " "table yet." msgstr "" #. Tag: para #: extras_topology.xml:535 #, no-c-format msgid "This example makes a backup of a topology called ma_topo" msgstr "" #. Tag: programlisting #: extras_topology.xml:538 #, no-c-format msgid "SELECT topology.CopyTopology('ma_topo', 'ma_topo_bakup');" msgstr "" #. Tag: para #: extras_topology.xml:546 extras_topology.xml:2060 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_topology.xml:552 #, no-c-format msgid "ST_InitTopoGeo" msgstr "" #. Tag: refpurpose #: extras_topology.xml:553 #, no-c-format msgid "" "Creates a new topology schema and registers this new schema in the topology." "topology table and details summary of process." msgstr "" #. Tag: funcprototype #: extras_topology.xml:558 #, no-c-format msgid "" "text ST_InitTopoGeo " "varchar topology_schema_name" msgstr "" #. Tag: para #: extras_topology.xml:568 #, no-c-format msgid "" "This is an SQL-MM equivalent of CreateTopology but lacks the spatial " "reference and tolerance options of CreateTopology and outputs a text " "description of creation instead of topology id." msgstr "" #. Tag: para #: extras_topology.xml:572 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM 3 Topo-Geo and Topo-Net 3: Routine Details: X.3.17" msgstr "" #. Tag: programlisting #: extras_topology.xml:578 #, no-c-format msgid "" "SELECT topology.ST_InitTopoGeo('topo_schema_to_create') AS topocreation;\n" " astopocreation\n" "------------------------------------------------------------\n" " Topology-Geometry 'topo_schema_to_create' (id:7) created." msgstr "" #. Tag: refname #: extras_topology.xml:592 #, no-c-format msgid "ST_CreateTopoGeo" msgstr "" #. Tag: refpurpose #: extras_topology.xml:594 #, no-c-format msgid "" "Adds a collection of geometries to a given empty topology and " "returns a message detailing success." msgstr "" #. Tag: funcprototype #: extras_topology.xml:601 #, no-c-format msgid "" "text ST_CreateTopoGeo " "varchar atopology " "geometry acollection" msgstr "" #. Tag: para #: extras_topology.xml:612 #, no-c-format msgid "" "Adds a collection of geometries to a given empty topology and returns " "a message detailing success." msgstr "" #. Tag: para #: extras_topology.xml:616 #, no-c-format msgid "Useful for populating an empty topology." msgstr "" #. Tag: para #: extras_topology.xml:620 extras_topology.xml:916 extras_topology.xml:973 #: extras_topology.xml:1045 extras_topology.xml:1113 extras_topology.xml:1283 #: extras_topology.xml:1333 extras_topology.xml:1790 extras_topology.xml:1892 #: extras_topology.xml:1946 extras_topology.xml:2297 #, no-c-format msgid "Availability: 2.0" msgstr "" #. Tag: para #: extras_topology.xml:621 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details -- X.3.18" msgstr "" #. Tag: programlisting #: extras_topology.xml:627 #, no-c-format msgid "" "-- Populate topology --\n" "SELECT topology.ST_CreateTopoGeo('ri_topo', \n" " ST_GeomFromText('MULTILINESTRING((384744 236928,384750 236923,384769 " "236911,384799 236895,384811 236890,384833 236884,\n" " 384844 236882,384866 236881,384879 236883,384954 236898,385087 " "236932,385117 236938,\n" " 385167 236938,385203 236941,385224 236946,385233 236950,385241 " "236956,385254 236971,\n" " 385260 236979,385268 236999,385273 237018,385273 237037,385271 " "237047,385267 237057,\n" " 385225 237125,385210 237144,385192 237161,385167 237192,385162 " "237202,385159 237214,\n" " 385159 237227,385162 237241,385166 237256,385196 237324,385209 " "237345,385234 237375,\n" " 385237 237383,385238 237399,385236 237407,385227 237419,385213 " "237430,385193 237439,\n" " 385174 237451,385170 237455,385169 237460,385171 237475,385181 " "237503,385190 237521,\n" " 385200 237533,385206 237538,385213 237541,385221 237542,385235 " "237540,385242 237541,\n" " 385249 237544,385260 237555,385270 237570,385289 237584,385292 " "237589,385291 237596,385284 237630))',3438) \n" " );\n" "\n" " st_createtopogeo\n" "----------------------------\n" " Topology ri_topo populated\n" " \n" " \n" "-- create tables and topo geometries --\n" "CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);\n" "\n" "SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', " "'LINE');" msgstr "" #. Tag: para #: extras_topology.xml:633 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: extras_topology.xml:639 #, no-c-format msgid "TopoGeo_AddPoint" msgstr "" #. Tag: refpurpose #: extras_topology.xml:641 #, no-c-format msgid "" "Adds a point to an existing topology using a tolerance and possibly " "splitting an existing edge." msgstr "" #. Tag: funcprototype #: extras_topology.xml:648 #, no-c-format msgid "" "integer TopoGeo_AddPoint " "varchar toponame " "geometry apoint " "float8 tolerance" msgstr "" #. Tag: para #: extras_topology.xml:660 #, no-c-format msgid "" "Adds a point to an existing topology and return its identifier. The given " "point will snap to existing nodes or edges within given tolerance. An " "existing edge may be split by the snapped point." msgstr "" #. Tag: para #: extras_topology.xml:674 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: extras_topology.xml:685 #, no-c-format msgid "TopoGeo_AddLineString" msgstr "" #. Tag: refpurpose #: extras_topology.xml:687 #, no-c-format msgid "" "Adds a linestring to an existing topology using a tolerance and possibly " "splitting existing edges/faces." msgstr "" #. Tag: funcprototype #: extras_topology.xml:694 #, no-c-format msgid "" "integer TopoGeo_AddLineString " "varchar toponame " "geometry aline " "float8 tolerance" msgstr "" #. Tag: para #: extras_topology.xml:706 #, no-c-format msgid "" "Adds a linestring to an existing topology and return a set of edge " "identifiers forming it up. The given line will snap to existing nodes or " "edges within given tolerance. Existing edges and faces may be split by the " "line." msgstr "" #. Tag: para #: extras_topology.xml:720 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: extras_topology.xml:731 #, no-c-format msgid "TopoGeo_AddPolygon" msgstr "" #. Tag: refpurpose #: extras_topology.xml:733 #, no-c-format msgid "" "Adds a polygon to an existing topology using a tolerance and possibly " "splitting existing edges/faces." msgstr "" #. Tag: funcprototype #: extras_topology.xml:740 #, no-c-format msgid "" "integer TopoGeo_AddPolygon " "varchar atopology " "geometry aline " "float8 atolerance" msgstr "" #. Tag: para #: extras_topology.xml:752 #, no-c-format msgid "" "Adds a polygon to an existing topology and return a set of face identifiers " "forming it up. The boundary of the given polygon will snap to existing nodes " "or edges within given tolerance. Existing edges and faces may be split by " "the boundary of the new polygon." msgstr "" #. Tag: para #: extras_topology.xml:766 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: para #: extras_topology.xml:781 #, no-c-format msgid "" "This section covers topology functions for adding, moving, deleting, and " "splitting edges, faces, and nodes. All of these functions are defined by ISO " "SQL/MM." msgstr "" #. Tag: title #: extras_topology.xml:784 #, no-c-format msgid "Topology Editors" msgstr "" #. Tag: refname #: extras_topology.xml:788 #, no-c-format msgid "ST_AddIsoNode" msgstr "" #. Tag: refpurpose #: extras_topology.xml:790 #, no-c-format msgid "" "Adds an isolated node to a face in a topology and returns the nodeid of the " "new node. If face is null, the node is still created." msgstr "" #. Tag: funcprototype #: extras_topology.xml:795 #, no-c-format msgid "" "integer ST_AddIsoNode " "varchar atopology " "integer aface " "geometry apoint" msgstr "" #. Tag: para #: extras_topology.xml:807 #, no-c-format msgid "" "Adds an isolated node with point location apoint to an " "existing face with faceid aface to a topology " "atopology and returns the nodeid of the new node." msgstr "" #. Tag: para #: extras_topology.xml:808 #, no-c-format msgid "" "If the spatial reference system (srid) of the point geometry is not the same " "as the topology, the apoint is not a point geometry, the " "point is null, or the point intersects an existing edge (even at the " "boundaries) then an exception is thrown. If the point already exists as a " "node, an exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:810 #, no-c-format msgid "" "If aface is not null and the apoint is " "not within the face, then an exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:814 #, no-c-format msgid "&sqlmm_compliant; SQL-MM: Topo-Net Routines: X+1.3.1" msgstr "" #. Tag: para #: extras_topology.xml:827 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: extras_topology.xml:833 #, no-c-format msgid "ST_AddIsoEdge" msgstr "" #. Tag: refpurpose #: extras_topology.xml:835 #, no-c-format msgid "" "Adds an isolated edge defined by geometry alinestring to a topology connecting two existing isolated nodes " "anode and anothernode and returns the " "edge id of the new edge." msgstr "" #. Tag: funcprototype #: extras_topology.xml:840 #, no-c-format msgid "" "integer ST_AddIsoEdge " "varchar atopology " "integer anode " "integer anothernode geometry alinestring" msgstr "" #. Tag: para #: extras_topology.xml:853 #, no-c-format msgid "" "Adds an isolated edge defined by geometry alinestring to a topology connecting two existing isolated nodes " "anode and anothernode and returns the " "edge id of the new edge." msgstr "" #. Tag: para #: extras_topology.xml:854 #, no-c-format msgid "" "If the spatial reference system (srid) of the alinestring " "geometry is not the same as the topology, any of the input arguments are " "null, or the nodes are contained in more than one face, or the nodes are " "start or end nodes of an existing edge, then an exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:856 #, no-c-format msgid "" "If the alinestring is not within the face of the face the " "anode and anothernode belong to, then " "an exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:857 #, no-c-format msgid "" "If the anode and anothernode are not " "the start and end points of the alinestring then an " "exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:861 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.4" msgstr "" #. Tag: para #: extras_topology.xml:874 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: extras_topology.xml:880 #, no-c-format msgid "ST_AddEdgeNewFaces" msgstr "" #. Tag: refpurpose #: extras_topology.xml:882 #, no-c-format msgid "" "Add a new edge and, if in doing so it splits a face, delete the original " "face and replace it with two new faces." msgstr "" #. Tag: funcprototype #: extras_topology.xml:887 #, no-c-format msgid "" "integer ST_AddEdgeNewFaces " "varchar atopology " "integer anode " "integer anothernode geometry acurve" msgstr "" #. Tag: para #: extras_topology.xml:900 #, no-c-format msgid "" "Add a new edge and, if in doing so it splits a face, delete the original " "face and replace it with two new faces. Returns the id of the newly added " "edge." msgstr "" #. Tag: para #: extras_topology.xml:906 extras_topology.xml:964 extras_topology.xml:1027 #: extras_topology.xml:1095 #, no-c-format msgid "Updates all existing joined edges and relationships accordingly." msgstr "" #. Tag: para #: extras_topology.xml:910 extras_topology.xml:968 #, no-c-format msgid "" "If any arguments are null, the given nodes are unknown (must already exist " "in the node table of the topology schema) , the " "acurve is not a LINESTRING, the " "anode and anothernode are not the " "start and endpoints of acurve then an error is thrown." msgstr "" #. Tag: para #: extras_topology.xml:913 extras_topology.xml:971 extras_topology.xml:1166 #, no-c-format msgid "" "If the spatial reference system (srid) of the acurve " "geometry is not the same as the topology an exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:917 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.12" msgstr "" #. Tag: refname #: extras_topology.xml:937 #, no-c-format msgid "ST_AddEdgeModFace" msgstr "" #. Tag: refpurpose #: extras_topology.xml:939 #, no-c-format msgid "" "Add a new edge and, if in doing so it splits a face, modify the original " "face and add a new face." msgstr "" #. Tag: funcprototype #: extras_topology.xml:944 #, no-c-format msgid "" "integer ST_AddEdgeModFace " "varchar atopology " "integer anode " "integer anothernode geometry acurve" msgstr "" #. Tag: para #: extras_topology.xml:957 #, no-c-format msgid "" "Add a new edge and, if in doing so it splits a face, modify the original " "face and add a new face. Unless the face being split is the Universal Face, " "the new face will be on the right side of the newly added edge. Returns the " "id of the newly added edge." msgstr "" #. Tag: para #: extras_topology.xml:974 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.13" msgstr "" #. Tag: refname #: extras_topology.xml:994 #, no-c-format msgid "ST_RemEdgeNewFace" msgstr "" #. Tag: refpurpose #: extras_topology.xml:996 #, no-c-format msgid "" "Removes an edge and, if the removed edge separated two faces, " "delete the original faces and replace them with a new face." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1004 #, no-c-format msgid "" "integer ST_RemEdgeNewFace " "varchar atopology " "integer anedge" msgstr "" #. Tag: para #: extras_topology.xml:1015 #, no-c-format msgid "" "Removes an edge and, if the removed edge separated two faces, delete " "the original faces and replace them with a new face." msgstr "" #. Tag: para #: extras_topology.xml:1020 #, no-c-format msgid "" "Returns the id of a newly created face or NULL, if no new face is created. " "No new face is created when the removed edge is dangling or isolated or " "confined with the universe face (possibly making the universe flood into the " "face on the other side)." msgstr "" #. Tag: para #: extras_topology.xml:1031 extras_topology.xml:1099 #, no-c-format msgid "" "Refuses to remove an edge partecipating in the definition of an existing " "TopoGeometry. Refuses to heal two faces if any TopoGeometry is defined by " "only one of them (and not the other)." msgstr "" #. Tag: para #: extras_topology.xml:1038 extras_topology.xml:1106 #, no-c-format msgid "" "If any arguments are null, the given edge is unknown (must already exist in " "the edge table of the topology schema), the topology name " "is invalid then an error is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1046 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.14" msgstr "" #. Tag: refname #: extras_topology.xml:1066 #, no-c-format msgid "ST_RemEdgeModFace" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1068 #, no-c-format msgid "" "Removes an edge and, if the removed edge separated two faces, delete one of " "the them and modify the other to take the space of both." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1076 #, no-c-format msgid "" "integer ST_RemEdgeModFace " "varchar atopology " "integer anedge" msgstr "" #. Tag: para #: extras_topology.xml:1087 #, no-c-format msgid "" "Removes an edge and, if the removed edge separated two faces, delete one of " "the them and modify the other to take the space of both. Preferentially " "keeps the face on the right, to be symmetric with ST_AddEdgeModFace also " "keeping it. Returns the id of the face remaining in place of the removed " "edge." msgstr "" #. Tag: para #: extras_topology.xml:1114 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.15" msgstr "" #. Tag: refname #: extras_topology.xml:1134 #, no-c-format msgid "ST_ChangeEdgeGeom" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1136 #, no-c-format msgid "" "Changes the shape of an edge without affecting the topology " "structure." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1143 #, no-c-format msgid "" "integer ST_ChangeEdgeGeom " "varchar atopology " "integer anedge " "geometry acurve" msgstr "" #. Tag: para #: extras_topology.xml:1155 #, no-c-format msgid "" "Changes the shape of an edge without affecting the topology structure." "" msgstr "" #. Tag: para #: extras_topology.xml:1158 #, no-c-format msgid "" "If any arguments are null, the given edge does not exist in the " "node table of the topology schema, the acurve is not a LINESTRING, the anode and anothernode are not the start and endpoints " "of acurve or the modification would change the underlying " "topology then an error is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1167 #, no-c-format msgid "" "If the new acurve is not simple, then an error is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1169 #, no-c-format msgid "" "If moving the edge from old to new position would hit an obstacle then an " "error is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1175 #, no-c-format msgid "Availability: 1.1.0" msgstr "" #. Tag: para #: extras_topology.xml:1178 #, no-c-format msgid "Enhanced: 2.0.0 adds topological consistency enforcement" msgstr "" #. Tag: para #: extras_topology.xml:1182 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details X.3.6" msgstr "" #. Tag: programlisting #: extras_topology.xml:1188 #, no-c-format msgid "" "SELECT topology.ST_ChangeEdgeGeom('ma_topo', 1, \n" " ST_GeomFromText('LINESTRING(227591.9 893900.4,227622.6 " "893844.3,227641.6 893816.6, 227704.5 893778.5)', 26986) );\n" " ----\n" " Edge 1 changed" msgstr "" #. Tag: refname #: extras_topology.xml:1202 #, no-c-format msgid "ST_ModEdgeSplit" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1204 #, no-c-format msgid "" "Split an edge by creating a new node along an existing edge, modifying the " "original edge and adding a new edge." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1209 #, no-c-format msgid "" "text ST_ModEdgeSplit " "varchar atopology " "integer anedge " "geometry apoint" msgstr "" #. Tag: para #: extras_topology.xml:1221 #, no-c-format msgid "" "Split an edge by creating a new node along an existing edge, modifying the " "original edge and adding a new edge. Updates all existing joined edges and " "relationships accordingly." msgstr "" #. Tag: para #: extras_topology.xml:1229 #, no-c-format msgid "Changed: 2.0 - In prior versions, this was misnamed ST_ModEdgesSplit" msgstr "" #. Tag: para #: extras_topology.xml:1230 extras_topology.xml:1284 extras_topology.xml:1334 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X.3.9" msgstr "" #. Tag: programlisting #: extras_topology.xml:1236 #, no-c-format msgid "" "-- Add an edge --\n" " SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227592 " "893910, 227600 893910)', 26986) ) As edgeid;\n" " \n" "-- edgeid-\n" "3\n" "\n" "\n" "-- Split the edge --\n" "SELECT topology.ST_ModEdgeSplit('ma_topo', 3, ST_SetSRID(ST_Point" "(227594,893910),26986) ) As result;\n" " result\n" "-------------------------\n" "7" msgstr "" #. Tag: para #: extras_topology.xml:1242 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: extras_topology.xml:1253 #, no-c-format msgid "ST_ModEdgeHeal" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1255 #, no-c-format msgid "" "Heal two edges by deleting the node connecting them, modifying the first " "edge and deleting the second edge. Returns the id of the deleted node." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1263 #, no-c-format msgid "" "int ST_ModEdgeHeal " "varchar atopology " "integer anedge " "integer anotheredge" msgstr "" #. Tag: para #: extras_topology.xml:1275 #, no-c-format msgid "" "Heal two edges by deleting the node connecting them, modifying the first " "edge and deleting the second edge. Returns the id of the deleted node. " "Updates all existing joined edges and relationships accordingly." msgstr "" #. Tag: refname #: extras_topology.xml:1300 #, no-c-format msgid "ST_NewEdgeHeal" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1302 #, no-c-format msgid "" "Heal two edges by deleting the node connecting them, deleting both edges, " "and replacing them with an edge whose direction is the same as the first " "edge provided." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1311 #, no-c-format msgid "" "int ST_NewEdgeHeal " "varchar atopology " "integer anedge " "integer anotheredge" msgstr "" #. Tag: para #: extras_topology.xml:1323 #, no-c-format msgid "" "Heal two edges by deleting the node connecting them, deleting both edges, " "and replacing them with an edge whose direction is the same as the first " "edge provided. Returns the id of the new edge replacing the healed ones. " "Updates all existing joined edges and relationships accordingly." msgstr "" #. Tag: refname #: extras_topology.xml:1351 #, no-c-format msgid "ST_MoveIsoNode" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1353 #, no-c-format msgid "" "Moves an isolated node in a topology from one point to another. If new " "apoint geometry exists as a node an error is thrown. " "REturns description of move." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1358 #, no-c-format msgid "" "text ST_MoveIsoNode " "varchar atopology " "integer anedge " "geometry apoint" msgstr "" #. Tag: para #: extras_topology.xml:1370 #, no-c-format msgid "" "Moves an isolated node in a topology from one point to another. If new " "apoint geometry exists as a node an error is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1371 #, no-c-format msgid "" "If any arguments are null, the apoint is not a point, the " "existing node is not isolated (is a start or end point of an existing edge), " "new node location intersects an existing edge (even at the end points) then " "an exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1372 #, no-c-format msgid "" "If the spatial reference system (srid) of the point geometry is not the same " "as the topology an exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1377 #, no-c-format msgid "&sqlmm_compliant; SQL-MM: Topo-Net Routines: X.3.2" msgstr "" #. Tag: programlisting #: extras_topology.xml:1383 #, no-c-format msgid "" "-- Add an isolated node with no face --\n" "SELECT topology.ST_AddIsoNode('ma_topo', NULL, ST_GeomFromText('POINT" "(227579 893916)', 26986) ) As nodeid;\n" " nodeid\n" "--------\n" " 7\n" "-- Move the new node --\n" "SELECT topology.ST_MoveIsoNode('ma_topo', 7, ST_GeomFromText('POINT" "(227579.5 893916.5)', 26986) ) As descrip; \n" " descrip\n" "----------------------------------------------------\n" "Isolated Node 7 moved to location 227579.5,893916.5" msgstr "" #. Tag: refname #: extras_topology.xml:1394 #, no-c-format msgid "ST_NewEdgesSplit" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1396 #, no-c-format msgid "" "Split an edge by creating a new node along an existing edge, deleting the " "original edge and replacing it with two new edges. Returns the id of the new " "node created that joins the new edges." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1401 #, no-c-format msgid "" "integer ST_NewEdgesSplit " "varchar atopology " "integer anedge " "geometry apoint" msgstr "" #. Tag: para #: extras_topology.xml:1413 #, no-c-format msgid "" "Split an edge with edge id anedge by creating a new node " "with point location apoint along current edge, deleting " "the original edge and replacing it with two new edges. Returns the id of the " "new node created that joins the new edges. Updates all existing joined edges " "and relationships accordingly." msgstr "" #. Tag: para #: extras_topology.xml:1421 #, no-c-format msgid "" "If the spatial reference system (srid) of the point geometry is not the same " "as the topology, the apoint is not a point geometry, the " "point is null, the point already exists as a node, the edge does not " "correspond to an existing edge or the point is not within the edge then an " "exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1426 #, no-c-format msgid "&sqlmm_compliant; SQL-MM: Topo-Net Routines: X.3.8" msgstr "" #. Tag: programlisting #: extras_topology.xml:1432 #, no-c-format msgid "" "-- Add an edge --\n" "SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575 " "893917,227592 893900)', 26986) ) As edgeid;\n" "-- result-\n" "edgeid\n" "------\n" " 2\n" "-- Split the new edge --\n" "SELECT topology.ST_NewEdgesSplit('ma_topo', 2, ST_GeomFromText('POINT" "(227578.5 893913.5)', 26986) ) As newnodeid; \n" " newnodeid\n" "---------\n" " 6" msgstr "" #. Tag: refname #: extras_topology.xml:1449 #, no-c-format msgid "ST_RemoveIsoNode" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1451 #, no-c-format msgid "" "Removes an isolated node and returns description of action. If " "the node is not isolated (is start or end of an edge), then an exception is " "thrown." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1456 #, no-c-format msgid "" "text ST_RemoveIsoNode " "varchar atopology " "integer anode" msgstr "" #. Tag: para #: extras_topology.xml:1467 #, no-c-format msgid "" "Removes an isolated node and returns description of action. If the " "node is not isolated (is start or end of an edge), then an exception is " "thrown." msgstr "" #. Tag: para #: extras_topology.xml:1472 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM: Topo-Geo and Topo-Net 3: Routine Details: X+1.3.3" msgstr "" #. Tag: programlisting #: extras_topology.xml:1478 #, no-c-format msgid "" "-- Add an isolated node with no face --\n" "SELECT topology.ST_RemoveIsoNode('ma_topo', 7 ) As result;\n" " result\n" "-------------------------\n" " Isolated node 7 removed" msgstr "" #. Tag: title #: extras_topology.xml:1490 #, no-c-format msgid "Topology Accessors" msgstr "" #. Tag: refname #: extras_topology.xml:1493 #, no-c-format msgid "GetEdgeByPoint" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1495 #, no-c-format msgid "Find the edge-id of an edge that intersects a given point" msgstr "" #. Tag: funcprototype #: extras_topology.xml:1500 #, no-c-format msgid "" "integer GetEdgeByPoint " "varchar atopology " "geometry apoint " "float8 tol" msgstr "" #. Tag: title #: extras_topology.xml:1511 #, no-c-format msgid "Retrieve the id of an edge that intersects a Point" msgstr "" #. Tag: para #: extras_topology.xml:1513 #, no-c-format msgid "" "The function returns an integer (id-edge) given a topology, a POINT and a " "tolerance. If tolerance = 0 then the point has to intersect the edge." msgstr "" #. Tag: para #: extras_topology.xml:1514 extras_topology.xml:1562 #, no-c-format msgid "" "If the point is the location of a node, then an exception is thrown. To " "avoid this run the GetNodeByPoint function." msgstr "" #. Tag: para #: extras_topology.xml:1515 #, no-c-format msgid "If the point doesn't intersect an edge, returns 0 (zero)." msgstr "" #. Tag: para #: extras_topology.xml:1516 #, no-c-format msgid "" "If use tolerance > 0 and there is more than one edge near the point then an " "exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1521 #, no-c-format msgid "" "If tolerance = 0, the function use ST_Intersects otherwise uses ST_DWithin." msgstr "" #. Tag: para #: extras_topology.xml:1524 extras_topology.xml:1571 extras_topology.xml:1618 #, no-c-format msgid "Availability: 2.0.0 - requires GEOS >= 3.3.0." msgstr "" #. Tag: para #: extras_topology.xml:1530 extras_topology.xml:1624 #, no-c-format msgid "These examples use edges we created in " msgstr "" #. Tag: programlisting #: extras_topology.xml:1531 #, no-c-format msgid "" "SELECT topology.GetEdgeByPoint('ma_topo',geom, 1) As with1mtol, topology." "GetEdgeByPoint('ma_topo',geom,0) As withnotol\n" "FROM ST_GeomFromEWKT('SRID=26986;POINT(227622.6 893843)') As geom;\n" " with1mtol | withnotol\n" "-----------+-----------\n" " 2 | 0" msgstr "" #. Tag: programlisting #: extras_topology.xml:1532 #, no-c-format msgid "" "SELECT topology.GetEdgeByPoint('ma_topo',geom, 1) As nearnode\n" "FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;\n" "\n" "-- get error --\n" "ERROR: Two or more edges found" msgstr "" #. Tag: para #: extras_topology.xml:1539 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_topology.xml:1545 #, no-c-format msgid "GetFaceByPoint" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1546 #, no-c-format msgid "Find the face-id of a face that intersects a given point" msgstr "" #. Tag: funcprototype #: extras_topology.xml:1550 #, no-c-format msgid "" "integer GetFaceByPoint " "varchar atopology " "geometry apoint " "float8 tol" msgstr "" #. Tag: para #: extras_topology.xml:1560 #, no-c-format msgid "Retrieve the id of a face that intersects a Point." msgstr "" #. Tag: para #: extras_topology.xml:1561 #, no-c-format msgid "" "The function returns an integer (id-face) given a topology, a POINT and a " "tolerance. If tolerance = 0 then the point has to intersect the face." msgstr "" #. Tag: para #: extras_topology.xml:1563 #, no-c-format msgid "If the point doesn't intersect a face, returns 0 (zero)." msgstr "" #. Tag: para #: extras_topology.xml:1564 #, no-c-format msgid "" "If use tolerance > 0 and there is more than one face near the point then an " "exception is thrown." msgstr "" #. Tag: para #: extras_topology.xml:1568 #, no-c-format msgid "" "If tolerance = 0, the function uses ST_Intersects otherwise uses ST_DWithin." msgstr "" #. Tag: para #: extras_topology.xml:1575 #, no-c-format msgid "These examples use edges faces created in " msgstr "" #. Tag: programlisting #: extras_topology.xml:1576 #, no-c-format msgid "" "SELECT topology.GetFaceByPoint('ma_topo',geom, 10) As with1mtol, topology." "GetFaceByPoint('ma_topo',geom,0) As withnotol\n" " FROM ST_GeomFromEWKT('POINT(234604.6 899382.0)') As geom;\n" " \n" " with1mtol | withnotol\n" " -----------+-----------\n" " 1 | 0" msgstr "" #. Tag: programlisting #: extras_topology.xml:1577 #, no-c-format msgid "" "SELECT topology.GetFaceByPoint('ma_topo',geom, 1) As nearnode\n" " FROM ST_GeomFromEWKT('POINT(227591.9 893900.4)') As geom;\n" " \n" "-- get error --\n" "ERROR: Two or more faces found" msgstr "" #. Tag: para #: extras_topology.xml:1582 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: extras_topology.xml:1588 #, no-c-format msgid "GetNodeByPoint" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1590 #, no-c-format msgid "Find the id of a node at a point location" msgstr "" #. Tag: funcprototype #: extras_topology.xml:1595 #, no-c-format msgid "" "integer GetNodeByPoint " "varchar atopology " "geometry point " "float8 tol" msgstr "" #. Tag: title #: extras_topology.xml:1606 #, no-c-format msgid "Retrieve the id of a node at a point location" msgstr "" #. Tag: para #: extras_topology.xml:1608 #, no-c-format msgid "" "The function return an integer (id-node) given a topology, a POINT and a " "tolerance. If tolerance = 0 mean exactly intersection otherwise retrieve the " "node from an interval." msgstr "" #. Tag: para #: extras_topology.xml:1609 #, no-c-format msgid "If there isn't a node at the point, it return 0 (zero)." msgstr "" #. Tag: para #: extras_topology.xml:1610 #, no-c-format msgid "" "If use tolerance > 0 and near the point there are more than one node it " "throw an exception." msgstr "" #. Tag: para #: extras_topology.xml:1615 #, no-c-format msgid "" "If tolerance = 0, the function use ST_Intersects otherwise will use " "ST_DWithin." msgstr "" #. Tag: programlisting #: extras_topology.xml:1625 #, no-c-format msgid "" "SELECT topology.GetNodeByPoint('ma_topo',geom, 1) As nearnode \n" " FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;\n" " nearnode\n" "----------\n" " 2" msgstr "" #. Tag: programlisting #: extras_topology.xml:1626 #, no-c-format msgid "" "SELECT topology.GetNodeByPoint('ma_topo',geom, 1000) As too_much_tolerance\n" " FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;\n" " \n" " ----get error--\n" " ERROR: Two or more nodes found" msgstr "" #. Tag: para #: extras_topology.xml:1633 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_topology.xml:1639 #, no-c-format msgid "GetTopologyID" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1641 #, no-c-format msgid "" "Returns the id of a topology in the topology.topology table " "given the name of the topology." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1646 extras_topology.xml:1688 #, no-c-format msgid "" "integer GetTopologyID " "varchar toponame" msgstr "" #. Tag: para #: extras_topology.xml:1656 #, no-c-format msgid "" "Returns the id of a topology in the topology.topology table given the " "name of the topology." msgstr "" #. Tag: programlisting #: extras_topology.xml:1664 #, no-c-format msgid "" "SELECT topology.GetTopologyID('ma_topo') As topo_id;\n" " topo_id\n" "---------\n" " 1" msgstr "" #. Tag: para #: extras_topology.xml:1670 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: extras_topology.xml:1681 #, no-c-format msgid "GetTopologySRID" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1683 #, no-c-format msgid "" "Returns the SRID of a topology in the topology.topology table given the name " "of the topology." msgstr "" #. Tag: para #: extras_topology.xml:1698 #, no-c-format msgid "" "Returns the spatial reference id of a topology in the topology.topology " "table given the name of the topology." msgstr "" #. Tag: programlisting #: extras_topology.xml:1706 #, no-c-format msgid "" "SELECT topology.GetTopologySRID('ma_topo') As SRID;\n" " SRID\n" "-------\n" " 4326" msgstr "" #. Tag: para #: extras_topology.xml:1712 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: extras_topology.xml:1723 #, no-c-format msgid "GetTopologyName" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1725 #, no-c-format msgid "Returns the name of a topology (schema) given the id of the topology." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1730 #, no-c-format msgid "" "varchar GetTopologyName " "integer topology_id" msgstr "" #. Tag: para #: extras_topology.xml:1740 #, no-c-format msgid "" "Returns the topology name (schema) of a topology from the topology.topology " "table given the topology id of the topology." msgstr "" #. Tag: programlisting #: extras_topology.xml:1748 #, no-c-format msgid "" "SELECT topology.GetTopologyName(1) As topo_name;\n" " topo_name\n" "-----------\n" " ma_topo" msgstr "" #. Tag: para #: extras_topology.xml:1754 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: extras_topology.xml:1765 #, no-c-format msgid "ST_GetFaceEdges" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1767 #, no-c-format msgid "" "Returns a set of ordered edges that bound aface includes " "the sequence order." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1772 #, no-c-format msgid "" "getfaceedges_returntype ST_GetFaceEdges varchar atopology integer aface" msgstr "" #. Tag: para #: extras_topology.xml:1783 #, no-c-format msgid "" "Returns a set of ordered edges that bound aface includes " "the sequence order. Each output consists of a sequence and edgeid. Sequence " "numbers start with value 1." msgstr "" #. Tag: para #: extras_topology.xml:1785 #, no-c-format msgid "" "Enumeration of each ring edges start from the edge with smallest identifier." msgstr "" #. Tag: para #: extras_topology.xml:1791 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM 3 Topo-Geo and Topo-Net 3: Routine Details: X.3.5" msgstr "" #. Tag: programlisting #: extras_topology.xml:1797 #, no-c-format msgid "" "-- Returns the edges bounding face 1\n" "SELECT (topology.ST_GetFaceEdges('tt', 1)).*;\n" "-- result --\n" " sequence | edge\n" "----------+------\n" " 1 | -4\n" " 2 | 5\n" " 3 | 7\n" " 4 | -6\n" " 5 | 1\n" " 6 | 2\n" " 7 | 3\n" "(7 rows)" msgstr "" #. Tag: programlisting #: extras_topology.xml:1798 #, no-c-format msgid "" "-- Returns the sequenc, edge id\n" "-- , and geometry of the edges that bound face 1\n" "-- If you just need geom and seq, can use ST_GetFaceGeometry\n" "SELECT t.seq, t.edge, geom\n" "FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)\n" " INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;" msgstr "" #. Tag: para #: extras_topology.xml:1804 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: extras_topology.xml:1814 #, no-c-format msgid "ST_GetFaceGeometry" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1816 #, no-c-format msgid "Returns the polygon in the given topology with the specified face id." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1821 #, no-c-format msgid "" "geometry ST_GetFaceGeometry " "varchar atopology " "integer aface" msgstr "" #. Tag: para #: extras_topology.xml:1832 #, no-c-format msgid "" "Returns the polygon in the given topology with the specified face id. Builds " "the polygon from the edges making up the face." msgstr "" #. Tag: para #: extras_topology.xml:1837 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM 3 Topo-Geo and Topo-Net 3: Routine Details: X.3.16" msgstr "" #. Tag: programlisting #: extras_topology.xml:1843 #, no-c-format msgid "" "-- Returns the wkt of the polygon added with AddFace\n" "SELECT ST_AsText(topology.ST_GetFaceGeometry('ma_topo', 1)) As facegeomwkt;\n" "-- result --\n" " facegeomwkt\n" "\n" "--------------------------------------------------------------------------------\n" " POLYGON((234776.9 899563.7,234896.5 899456.7,234914 899436.4,234946.6 " "899356.9,\n" "234872.5 899328.7,234891 899285.4,234992.5 899145,234890.6 899069,\n" "234755.2 899255.4,234612.7 899379.4,234776.9 899563.7))" msgstr "" #. Tag: refname #: extras_topology.xml:1855 #, no-c-format msgid "GetRingEdges" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1857 #, no-c-format msgid "Returns an ordered set of edges forming a ring with the given edge ." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1864 #, no-c-format msgid "" "getfaceedges_returntype GetRingEdges " "varchar atopology " "integer aring " "integer max_edges=null" msgstr "" #. Tag: para #: extras_topology.xml:1876 #, no-c-format msgid "" "Returns an ordered set of edges forming a ring with the given edge. Each " "output consists of a sequence and a signed edge id. Sequence numbers start " "with value 1. A negative edge identifier means that the given edge is taken " "backward. You can pass a negative edge id to start walking backward." msgstr "" #. Tag: para #: extras_topology.xml:1884 #, no-c-format msgid "" "If max_edges is not null no more than those records are " "returned by that function. This is meant to be a safety parameter when " "dealing with possibly invalid topologies." msgstr "" #. Tag: para #: extras_topology.xml:1899 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_topology.xml:1908 #, no-c-format msgid "GetNodeEdges" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1910 #, no-c-format msgid "Returns an ordered set of edges incident to the given node." msgstr "" #. Tag: funcprototype #: extras_topology.xml:1917 #, no-c-format msgid "" "getfaceedges_returntype GetNodeEdges " "varchar atopology " "integer anode" msgstr "" #. Tag: para #: extras_topology.xml:1928 #, no-c-format msgid "" "Returns an ordered set of edges incident to the given node. Each output " "consists of a sequence and a signed edge id. Sequence numbers start with " "value 1. A positive edge starts at the given node. A negative edge ends into " "the given node. Closed edges will appear twice (with both signs). Order is " "clockwise starting from northbound." msgstr "" #. Tag: para #: extras_topology.xml:1939 #, no-c-format msgid "" "This function computes ordering rather than deriving from metadata and is " "thus usable to build edge ring linking." msgstr "" #. Tag: para #: extras_topology.xml:1952 #, no-c-format msgid ", " msgstr "" #. Tag: para #: extras_topology.xml:1965 #, no-c-format msgid "" "This section covers the functions for processing topologies in non-standard " "ways." msgstr "" #. Tag: title #: extras_topology.xml:1968 #, no-c-format msgid "Topology Processing" msgstr "" #. Tag: refname #: extras_topology.xml:1971 #, no-c-format msgid "Polygonize" msgstr "" #. Tag: refpurpose #: extras_topology.xml:1972 #, no-c-format msgid "Find and register all faces defined by topology edges" msgstr "" #. Tag: funcprototype #: extras_topology.xml:1976 #, no-c-format msgid "" "text Polygonize " "varchar toponame" msgstr "" #. Tag: para #: extras_topology.xml:1986 #, no-c-format msgid "Register all faces that can be built out a topology edge primitives." msgstr "" #. Tag: para #: extras_topology.xml:1987 #, no-c-format msgid "The target topology is assumed to contain no self-intersecting edges." msgstr "" #. Tag: para #: extras_topology.xml:1988 #, no-c-format msgid "" "Already known faces are recognized, so it is safe to call Polygonize " "multiple times on the same topology." msgstr "" #. Tag: para #: extras_topology.xml:1989 extras_topology.xml:2142 #, no-c-format msgid "" "This function does not use nor set the next_left_edge and next_right_edge " "fields of the edge table." msgstr "" #. Tag: para #: extras_topology.xml:2001 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_topology.xml:2007 #, no-c-format msgid "AddNode" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2009 #, no-c-format msgid "" "Adds a point node to the node table in the specified topology schema and " "returns the nodeid of new node. If point already exists as node, the " "existing nodeid is returned." msgstr "" #. Tag: funcprototype #: extras_topology.xml:2014 #, no-c-format msgid "" "integer AddNode " "varchar toponame " "geometry apoint " "boolean " "allowEdgeSplitting=false boolean computeContainingFace=false" msgstr "" #. Tag: para #: extras_topology.xml:2027 #, no-c-format msgid "" "Adds a point node to the node table in the specified topology schema. The " " function automatically adds start and end points " "of an edge when called so not necessary to explicitly add nodes of an edge." msgstr "" #. Tag: para #: extras_topology.xml:2034 #, no-c-format msgid "" "If any edge crossing the node is found either an exception is raised or the " "edge is splitted, depending on the allowEdgeSplitting " "parameter value." msgstr "" #. Tag: para #: extras_topology.xml:2040 #, no-c-format msgid "" "If computeContainingFace is true a newly added node would " "get the correct containing face computed." msgstr "" #. Tag: para #: extras_topology.xml:2045 #, no-c-format msgid "" "If the apoint geometry already exists as a node, the node " "is not added but the existing nodeid is returned." msgstr "" #. Tag: programlisting #: extras_topology.xml:2054 #, no-c-format msgid "" "SELECT topology.AddNode('ma_topo', ST_GeomFromText('POINT(227641.6 " "893816.5)', 26986) ) As nodeid;\n" "-- result --\n" "nodeid\n" "--------\n" " 4" msgstr "" #. Tag: refname #: extras_topology.xml:2066 #, no-c-format msgid "AddEdge" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2068 #, no-c-format msgid "" "Adds a linestring edge to the edge table and associated start and end points " "to the point nodes table of the specified topology schema using the " "specified linestring geometry and returns the edgeid of the new (or " "existing) edge." msgstr "" #. Tag: funcprototype #: extras_topology.xml:2073 #, no-c-format msgid "" "integer AddEdge " "varchar toponame " "geometry aline" msgstr "" #. Tag: para #: extras_topology.xml:2084 #, no-c-format msgid "" "Adds an edge to the edge table and associated nodes to the nodes table of " "the specified toponame schema using the specified " "linestring geometry and returns the edgeid of the new or existing record. " "The newly added edge has \"universe\" face on both sides and links to itself." msgstr "" #. Tag: para #: extras_topology.xml:2086 #, no-c-format msgid "" "If the aline geometry crosses, overlaps, contains or is " "contained by an existing linestring edge, then an error is thrown and the " "edge is not added." msgstr "" #. Tag: para #: extras_topology.xml:2087 #, no-c-format msgid "" "The geometry of aline must have the same srid as defined for the topology otherwise an invalid spatial reference " "sys error will be thrown." msgstr "" #. Tag: para #: extras_topology.xml:2091 #, no-c-format msgid "Availability: 2.0.0 requires GEOS >= 3.3.0." msgstr "" #. Tag: programlisting #: extras_topology.xml:2097 #, no-c-format msgid "" "SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575.8 " "893917.2,227591.9 893900.4)', 26986) ) As edgeid;\n" "-- result-\n" "edgeid\n" "--------\n" " 1\n" " \n" "SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.9 " "893900.4,227622.6 893844.2,227641.6 893816.5,\n" " 227704.5 893778.5)', 26986) ) As edgeid;\n" "-- result --\n" "edgeid\n" "--------\n" " 2\n" " \n" " SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.2 " "893900, 227591.9 893900.4,\n" " 227704.5 893778.5)', 26986) ) As edgeid;\n" " -- gives error --\n" " ERROR: Edge intersects (not on endpoints) with existing edge 1" msgstr "" #. Tag: para #: extras_topology.xml:2103 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: extras_topology.xml:2109 #, no-c-format msgid "AddFace" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2111 #, no-c-format msgid "" "Registers a face primitive to a topology and get it's identifier." "" msgstr "" #. Tag: funcprototype #: extras_topology.xml:2118 #, no-c-format msgid "" "integer AddFace " "varchar toponame " "geometry apolygon " "boolean force_new=false" msgstr "" #. Tag: para #: extras_topology.xml:2130 #, no-c-format msgid "" "Registers a face primitive to a topology and get it's identifier." msgstr "" #. Tag: para #: extras_topology.xml:2134 #, no-c-format msgid "" "For a newly added face, the edges forming its boundaries and the ones " "contained in the face will be updated to have correct values in the " "left_face and right_face fields. Isolated nodes contained in the face will " "also be updated to have a correct containing_face field value." msgstr "" #. Tag: para #: extras_topology.xml:2146 #, no-c-format msgid "" "The target topology is assumed to be valid (containing no self-intersecting " "edges). An exception is raised if: The polygon boundary is not fully defined " "by existing edges or the polygon overlaps an existing face." msgstr "" #. Tag: para #: extras_topology.xml:2148 #, no-c-format msgid "" "If the apolygon geometry already exists as a face, then: " "if force_new is false (the default) the face id of the " "existing face is returned; if force_new is true a new id " "will be assigned to the newly registered face." msgstr "" #. Tag: para #: extras_topology.xml:2156 #, no-c-format msgid "" "When a new registration of an existing face is performed (force_new=true), " "no action will be taken to resolve dangling references to the existing face " "in the edge, node an relation tables, nor will the MBR field of the existing " "face record be updated. It is up to the caller to deal with that." msgstr "" #. Tag: para #: extras_topology.xml:2163 #, no-c-format msgid "" "The apolygon geometry must have the same srid as defined for the topology otherwise an invalid spatial reference " "sys error will be thrown." msgstr "" #. Tag: programlisting #: extras_topology.xml:2172 #, no-c-format msgid "" "-- first add the edges we use generate_series as an iterator (the below \n" "-- will only work for polygons with < 10000 points because of our max in " "gs) \n" "SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN" "(geom, i + 1) )) As edgeid\n" " FROM (SELECT ST_NPoints(geom) AS npt, geom\n" " FROM \n" " (SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 " "899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,\n" " 234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 " "899255.4,\n" " 234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', " "26986) ) As geom\n" " ) As geoms) As facen CROSS JOIN generate_series(1,10000) As i\n" " WHERE i < npt;\n" "-- result --\n" " edgeid\n" "--------\n" " 3\n" " 4\n" " 5\n" " 6\n" " 7\n" " 8\n" " 9\n" " 10\n" " 11\n" " 12\n" "(10 rows)\n" "-- then add the face -\n" " \n" "SELECT topology.AddFace('ma_topo', \n" " ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 " "899356.9,234872.5 899328.7,\n" " 234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,\n" " 234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As " "faceid;\n" "-- result --\n" "faceid\n" "--------\n" " 1" msgstr "" #. Tag: para #: extras_topology.xml:2178 #, no-c-format msgid "" ", , " msgstr "" #. Tag: para #: extras_topology.xml:2188 #, no-c-format msgid "" "This section covers the topology functions for creating new topogeometries." msgstr "" #. Tag: title #: extras_topology.xml:2191 #, no-c-format msgid "TopoGeometry Constructors" msgstr "" #. Tag: refname #: extras_topology.xml:2194 #, no-c-format msgid "CreateTopoGeom" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2196 #, no-c-format msgid "" "Creates a new topo geometry object from topo element array - tg_type: 1:" "[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection" msgstr "" #. Tag: funcsynopsis #: extras_topology.xml:2200 #, no-c-format msgid "" " topogeometry CreateTopoGeom varchar toponame integer tg_type integer layer_id topoelementarray tg_objs topogeometry " "CreateTopoGeom varchar toponame integer tg_type integer layer_id " msgstr "" #. Tag: para #: extras_topology.xml:2221 extras_topology.xml:2283 #, no-c-format msgid "" "Creates a topogeometry object for layer denoted by layer_id and registers it " "in the relations table in the toponame schema." msgstr "" #. Tag: para #: extras_topology.xml:2222 #, no-c-format msgid "" "tg_type is an integer: 1:[multi]point (punctal), 2:[multi]line (lineal), 3:" "[multi]poly (areal), 4:collection. layer_id is the layer id in the topology." "layer table." msgstr "" #. Tag: para #: extras_topology.xml:2223 #, no-c-format msgid "" "punctal layers are formed from set of nodes, lineal layers are formed from a " "set of edges, areal layers are formed from a set of faces, and collections " "can be formed from a mixture of nodes, edges, and faces." msgstr "" #. Tag: para #: extras_topology.xml:2225 #, no-c-format msgid "" "Omitting the array of components generates an empty TopoGeometry object." msgstr "" #. Tag: title #: extras_topology.xml:2232 #, no-c-format msgid "Examples: Form from existing edges" msgstr "" #. Tag: para #: extras_topology.xml:2233 #, no-c-format msgid "" "Create a topogeom in ri_topo schema for layer 2 (our ri_roads), of type (2) " "LINE, for the first edge (we loaded in ST_CreateTopoGeo." msgstr "" #. Tag: programlisting #: extras_topology.xml:2234 #, no-c-format msgid "" "INSERT INTO ri.ri_roads(road_name, topo) VALUES('Unknown', topology." "CreateTopoGeom('ri_topo',2,2,'{{1,2}}'::topology.topoelementarray);" msgstr "" #. Tag: title #: extras_topology.xml:2239 #, no-c-format msgid "Examples: Convert an areal geometry to best guess topogeometry" msgstr "" #. Tag: para #: extras_topology.xml:2240 #, no-c-format msgid "" "Lets say we have geometries that should be formed from a collection of " "faces. We have for example blockgroups table and want to know the topo " "geometry of each block group. If our data was perfectly aligned, we could do " "this:" msgstr "" #. Tag: programlisting #: extras_topology.xml:2242 #, no-c-format msgid "" "-- create our topo geometry column --\n" "SELECT topology.AddTopoGeometryColumn(\n" " 'topo_boston', \n" " 'boston', 'blockgroups', 'topo', 'POLYGON');\n" " \n" "-- addtopgeometrycolumn --\n" "1\n" " \n" "-- update our column assuming \n" "-- everything is perfectly aligned with our edges\n" "UPDATE boston.blockgroups AS bg\n" " SET topo = topology.CreateTopoGeom('topo_boston'\n" " ,3,1\n" " , foo.bfaces)\n" "FROM (SELECT b.gid, topology.TopoElementArray_Agg(ARRAY[f.face_id,3]) As " "bfaces\n" " FROM boston.blockgroups As b\n" " INNER JOIN topo_boston.face As f ON b.geom && f.mbr\n" " WHERE ST_Covers(b.geom, topology.ST_GetFaceGeometry('topo_boston', f." "face_id))\n" " GROUP BY b.gid) As foo\n" "WHERE foo.gid = bg.gid;" msgstr "" #. Tag: programlisting #: extras_topology.xml:2244 #, no-c-format msgid "" "--the world is rarely perfect allow for some error\n" "--count the face if 50% of it falls \n" "-- within what we think is our blockgroup boundary\n" "UPDATE boston.blockgroups AS bg\n" " SET topo = topology.CreateTopoGeom('topo_boston'\n" " ,3,1\n" " , foo.bfaces)\n" "FROM (SELECT b.gid, topology.TopoElementArray_Agg(ARRAY[f.face_id,3]) As " "bfaces\n" " FROM boston.blockgroups As b\n" " INNER JOIN topo_boston.face As f ON b.geom && f.mbr\n" " WHERE ST_Covers(b.geom, topology.ST_GetFaceGeometry('topo_boston', f." "face_id))\n" " OR\n" " ( ST_Intersects(b.geom, topology.ST_GetFaceGeometry('topo_boston', f." "face_id))\n" " AND ST_Area(ST_Intersection(b.geom, topology.ST_GetFaceGeometry" "('topo_boston', f.face_id) ) ) > \n" " ST_Area(topology.ST_GetFaceGeometry('topo_boston', f." "face_id))*0.5\n" " )\n" " GROUP BY b.gid) As foo\n" "WHERE foo.gid = bg.gid; \n" "\n" "-- and if we wanted to convert our topogeometry back\n" "-- to a denomalized geometry aligned with our faces and edges \n" "-- cast the topo to a geometry\n" "-- The really cool thing is my new geometries\n" "-- are now aligned with my tiger street centerlines\n" "UPDATE boston.blockgroups SET new_geom = topo::geometry;" msgstr "" #. Tag: para #: extras_topology.xml:2250 #, no-c-format msgid "" ", , , , " "" msgstr "" #. Tag: refname #: extras_topology.xml:2263 #, no-c-format msgid "toTopoGeom" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2265 #, no-c-format msgid "Creates a new topo geometry from a simple geometry" msgstr "" #. Tag: funcprototype #: extras_topology.xml:2270 #, no-c-format msgid "" "topogeometry toTopoGeom " "geometry geom " "varchar toponame " "integer layer_id " "float8 tolerance" msgstr "" #. Tag: para #: extras_topology.xml:2287 #, no-c-format msgid "" "Topological primitives required to represent the input geometry will be " "added, possibly splitting existing ones. Pre-existing TopoGeometry objects " "will retain their shapes." msgstr "" #. Tag: para #: extras_topology.xml:2292 #, no-c-format msgid "" "When tolerance is given it will be used to snap the input " "geometry to existing primitives." msgstr "" #. Tag: para #: extras_topology.xml:2301 #, no-c-format msgid "This is a full self-contained workflow" msgstr "" #. Tag: programlisting #: extras_topology.xml:2302 #, no-c-format msgid "" "-- do this if you don't have a topology setup already\n" "-- creates topology not allowing any tolerance\n" "SELECT topology.CreateTopology('topo_boston_test', 2249);\n" "-- create a new table\n" "CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));\n" "--add a topogeometry column to it\n" "SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', " "'nei_topo', 'topo', 'MULTIPOLYGON') As new_layer_id;\n" "new_layer_id\n" "-----------\n" "1\n" "\n" "--use new layer id in populating the new topogeometry column\n" "-- we add the topogeoms to the new layer with 0 tolerance\n" "INSERT INTO nei_topo(nei, topo)\n" "SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1)\n" "FROM neighborhoods\n" "WHERE gid BETWEEN 1 and 15;\n" "\n" "--use to verify what has happened --\n" "SELECT * FROM \n" " topology.TopologySummary('topo_boston_test'); \n" " \n" "-- summary--\n" "Topology topo_boston_test (5), SRID 2249, precision 0\n" "61 nodes, 87 edges, 35 faces, 15 topogeoms in 1 layers\n" "Layer 1, type Polygonal (3), 15 topogeoms\n" " Deploy: public.nei_topo.topo" msgstr "" #. Tag: para #: extras_topology.xml:2308 #, no-c-format msgid "" ",, , " msgstr "" #. Tag: refname #: extras_topology.xml:2315 #, no-c-format msgid "TopoElementArray_Agg" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2316 #, no-c-format msgid "" "Returns a topoelementarray for a set of element_id, type " "arrays (topoelements)" msgstr "" #. Tag: funcprototype #: extras_topology.xml:2321 #, no-c-format msgid "" "topoelementarray TopoElementArray_Agg topoelement set tefield" msgstr "" #. Tag: para #: extras_topology.xml:2331 #, no-c-format msgid "" "Used to create a from a set of ." msgstr "" #. Tag: programlisting #: extras_topology.xml:2340 #, no-c-format msgid "" "SELECT topology.TopoElementArray_Agg(ARRAY[e,t]) As tea\n" " FROM generate_series(1,3) As e CROSS JOIN generate_series(1,4) As t;\n" " tea\n" "--------------------------------------------------------------------------\n" "{{1,1},{1,2},{1,3},{1,4},{2,1},{2,2},{2,3},{2,4},{3,1},{3,2},{3,3},{3,4}}" msgstr "" #. Tag: para #: extras_topology.xml:2344 extras_topology.xml:2397 #, no-c-format msgid ", " msgstr "" #. Tag: title #: extras_topology.xml:2350 #, no-c-format msgid "TopoGeometry Accessors" msgstr "" #. Tag: refname #: extras_topology.xml:2354 #, no-c-format msgid "GetTopoGeomElementArray" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2356 #, no-c-format msgid "" "Returns a topoelementarray (an array of topoelements) " "containing the topological elements and type of the given TopoGeometry " "(primitive elements)" msgstr "" #. Tag: funcprototype #: extras_topology.xml:2361 #, no-c-format msgid "" "topoelementarray GetTopoGeomElementArray varchar toponame integer layer_id integer tg_id" msgstr "" #. Tag: funcprototype #: extras_topology.xml:2369 #, no-c-format msgid "" "topoelementarray topoelement GetTopoGeomElementArray topogeometry tg" msgstr "" #. Tag: para #: extras_topology.xml:2379 #, no-c-format msgid "" "Returns a containing the topological " "elements and type of the given TopoGeometry (primitive elements). This is " "similar to GetTopoGeomElements except it returns the elements as an array " "rather than as a dataset." msgstr "" #. Tag: para #: extras_topology.xml:2381 extras_topology.xml:2428 #, no-c-format msgid "" "tg_id is the topogeometry id of the topogeometry object in the topology in " "the layer denoted by layer_id in the topology.layer table." msgstr "" #. Tag: refname #: extras_topology.xml:2402 #, no-c-format msgid "GetTopoGeomElements" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2404 #, no-c-format msgid "" "Returns a set of topoelement objects containing the " "topological element_id,element_type of the given TopoGeometry (primitive " "elements)" msgstr "" #. Tag: funcprototype #: extras_topology.xml:2409 #, no-c-format msgid "" "setof topoelement GetTopoGeomElements varchar toponame integer layer_id integer tg_id" msgstr "" #. Tag: funcprototype #: extras_topology.xml:2417 #, no-c-format msgid "" "setof topoelement GetTopoGeomElements topogeometry tg" msgstr "" #. Tag: para #: extras_topology.xml:2427 #, no-c-format msgid "" "Returns a set of element_id,element_type (topoelements) for a given " "topogeometry object in toponame schema." msgstr "" #. Tag: para #: extras_topology.xml:2444 #, no-c-format msgid ", " msgstr "" #. Tag: title #: extras_topology.xml:2451 #, no-c-format msgid "TopoGeometry Outputs" msgstr "" #. Tag: refname #: extras_topology.xml:2454 #, no-c-format msgid "AsGML" msgstr "" #. Tag: refpurpose #: extras_topology.xml:2456 #, no-c-format msgid "Returns the GML representation of a topogeometry." msgstr "" #. Tag: funcsynopsis #: extras_topology.xml:2460 #, no-c-format msgid "" " text AsGML " "topogeometry tg text AsGML topogeometry tg text nsprefix_in text AsGML topogeometry tg regclass " "visitedTable " " text AsGML " "topogeometry tg " "regclass visitedTable text nsprefix text AsGML topogeometry tg text nsprefix_in integer precision integer options text " "AsGML topogeometry " "tg text " "nsprefix_in integer precision integer options regclass visitedTable " " text AsGML " "topogeometry tg " "text nsprefix_in " "integer precision " "integer options " "regclass visitedTable text idprefix text AsGML topogeometry tg text nsprefix_in integer precision integer options regclass " "visitedTable text " "idprefix int " "gmlversion " msgstr "" #. Tag: para #: extras_topology.xml:2521 #, no-c-format msgid "" "Returns the GML representation of a topogeometry in version GML3 format. If " "no nsprefix_in is specified then gml " "is used. Pass in an empty string for nsprefix to get a non-qualified name " "space. The precision (default: 15) and options (default 1) parameters, if " "given, are passed untouched to the underlying call to ST_AsGML." msgstr "" #. Tag: para #: extras_topology.xml:2523 #, no-c-format msgid "" "The visitedTable parameter, if given, is used for keeping " "track of the visited Node and Edge elements so to use cross-references " "(xlink:xref) rather than duplicating definitions. The table is expected to " "have (at least) two integer fields: 'element_type' and 'element_id'. The " "calling user must have both read and write privileges on the given table. " "For best performance, an index should be defined on element_type and element_id, in that order. Such index would " "be created automatically by adding a unique constraint to the fields. " "Example:" msgstr "" #. Tag: programlisting #: extras_topology.xml:2529 #, no-c-format msgid "" "CREATE TABLE visited (\n" " element_type integer, element_id integer,\n" " unique(element_type, element_id)\n" ");" msgstr "" #. Tag: para #: extras_topology.xml:2532 #, no-c-format msgid "" "The idprefix parameter, if given, will be prepended to " "Edge and Node tag identifiers." msgstr "" #. Tag: para #: extras_topology.xml:2534 #, no-c-format msgid "" "The gmlver parameter, if given, will be passed to the " "underlying ST_AsGML. Defaults to 3." msgstr "" #. Tag: para #: extras_topology.xml:2543 #, no-c-format msgid "" "This uses the topo geometry we created in " msgstr "" #. Tag: programlisting #: extras_topology.xml:2544 #, no-c-format msgid "" "SELECT topology.AsGML(topo) As rdgml \n" " FROM ri.roads \n" " WHERE road_name = 'Unknown';\n" " \n" "-- rdgml--\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " 384744 236928 " "384750 236923 384769 236911 384799 236895 384811 236890 \n" " 384833 236884 384844 236882 384866 236881 384879 " "236883 384954 236898 385087 236932 385117 236938 \n" " 385167 236938 385203 236941 385224 236946 385233 " "236950 385241 236956 385254 236971 \n" " 385260 236979 385268 236999 385273 237018 385273 " "237037 385271 237047 385267 237057 385225 237125 \n" " 385210 237144 385192 237161 385167 237192 385162 " "237202 385159 237214 385159 237227 385162 237241 \n" " 385166 237256 385196 237324 385209 237345 385234 " "237375 385237 237383 385238 237399 385236 237407 \n" " 385227 237419 385213 237430 385193 237439 385174 " "237451 385170 237455 385169 237460 385171 237475 \n" " 385181 237503 385190 237521 385200 237533 385206 " "237538 385213 237541 385221 237542 385235 237540 385242 237541 \n" " 385249 237544 385260 237555 385270 237570 385289 " "237584 385292 237589 385291 237596 385284 237630\n" " \n" " \n" " \n" " \n" " \n" " \n" "]]>" msgstr "" #. Tag: para #: extras_topology.xml:2545 #, no-c-format msgid "Same exercise as previous without namespace" msgstr "" #. Tag: programlisting #: extras_topology.xml:2546 #, no-c-format msgid "" "SELECT topology.AsGML(topo,'') As rdgml \n" " FROM ri.roads \n" " WHERE road_name = 'Unknown';\n" " \n" "-- rdgml--\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " 384744 236928 384750 " "236923 384769 236911 384799 236895 384811 236890 \n" " 384833 236884 384844 236882 384866 236881 384879 " "236883 384954 236898 385087 236932 385117 236938 \n" " 385167 236938 385203 236941 385224 236946 385233 " "236950 385241 236956 385254 236971 \n" " 385260 236979 385268 236999 385273 237018 385273 " "237037 385271 237047 385267 237057 385225 237125 \n" " 385210 237144 385192 237161 385167 237192 385162 " "237202 385159 237214 385159 237227 385162 237241 \n" " 385166 237256 385196 237324 385209 237345 385234 " "237375 385237 237383 385238 237399 385236 237407 \n" " 385227 237419 385213 237430 385193 237439 385174 " "237451 385170 237455 385169 237460 385171 237475 \n" " 385181 237503 385190 237521 385200 237533 385206 " "237538 385213 237541 385221 237542 385235 237540 385242 237541 \n" " 385249 237544 385260 237555 385270 237570 385289 " "237584 385292 237589 385291 237596 385284 237630\n" " \n" " \n" " \n" " \n" " \n" " \n" "]]>" msgstr "" #. Tag: para #: extras_topology.xml:2552 #, no-c-format msgid ", " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/Makefile0000644000000000000000000000005012025614072017403 0ustar rootrootDOCSUFFIX=-br include ../Makefile.local postgis-2.1.2+dfsg.orig/doc/po/pt_BR/faq.xml.po0000644000000000000000000004645312025614072017672 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: faq.xml:3 #, no-c-format msgid "PostGIS Frequently Asked Questions" msgstr "" #. Tag: para #: faq.xml:8 #, no-c-format msgid "" "My applications and desktop tools worked with PostGIS 1.5,but they don't " "work with PostGIS 2.0. How do I fix this?" msgstr "" #. Tag: para #: faq.xml:12 #, no-c-format msgid "" "A lot of deprecated functions were removed from the PostGIS code base in " "PostGIS 2.0. This has affected applications in addition to third-party tools " "such as Geoserver, MapServer, QuantumGIS, and OpenJump to name a few. There " "are a couple of ways to resolve this. For the third-party apps, you can try " "to upgrade to the latest versions of these which have many of these issues " "fixed. For your own code, you can change your code to not use the functions " "removed. Most of these functions are non ST_ aliases of ST_Union, ST_Length " "etc. and as a last resort, install the whole of legacy.sql or just the portions of legacy.sql you need." msgstr "" #. Tag: para #: faq.xml:18 #, no-c-format msgid "" "The legacy.sql file is located in the same folder as " "postgis.sql. You can install this file after you have installed postgis.sql " "and spatial_ref_sys.sql to get back all the 200 some-odd old functions we " "removed." msgstr "" #. Tag: para #: faq.xml:24 #, no-c-format msgid "" "I'm running PostgreSQL 9.0 and I can no longer read/view geometries in " "OpenJump, Safe FME, and some other tools?" msgstr "" #. Tag: para #: faq.xml:28 #, no-c-format msgid "" "In PostgreSQL 9.0+, the default encoding for bytea data has been changed to " "hex and older JDBC drivers still assume escape format. This has affected " "some applications such as Java applications using older JDBC drivers or .NET " "applications that use the older npgsql driver that expect the old behavior " "of ST_AsBinary. There are two approaches to getting this to work again." msgstr "" #. Tag: para #: faq.xml:32 #, no-c-format msgid "" "You can upgrade your JDBC driver to the latest PostgreSQL 9.0 version which " "you can get from http://jdbc.postgresql.org/download.html" msgstr "" #. Tag: para #: faq.xml:34 #, no-c-format msgid "" "If you are running a .NET app, you can use Npgsql 2.0.11 or higher which you " "can download from http://pgfoundry.org/frs/?group_id=1000140 and as " "described on Francisco Figueiredo's NpgSQL 2.0.11 released blog entry" msgstr "" #. Tag: para #: faq.xml:38 #, no-c-format msgid "" "If upgrading your PostgreSQL driver is not an option, then you can set the " "default back to the old behavior with the following change:" msgstr "" #. Tag: programlisting #: faq.xml:39 #, no-c-format msgid "ALTER DATABASE mypostgisdb SET bytea_output='escape';" msgstr "" #. Tag: para #: faq.xml:46 #, no-c-format msgid "" "I tried to use PgAdmin to view my geometry column and it is blank, what " "gives?" msgstr "" #. Tag: para #: faq.xml:50 #, no-c-format msgid "" "PgAdmin doesn't show anything for large geometries. The best ways to verify " "you do have data in your geometry columns are?" msgstr "" #. Tag: programlisting #: faq.xml:53 #, no-c-format msgid "" "-- this should return no records if all your geom fields are filled " "in \n" "SELECT somefield FROM mytable WHERE geom IS NULL;" msgstr "" #. Tag: programlisting #: faq.xml:55 #, no-c-format msgid "" "-- To tell just how large your geometry is do a query of the form\n" "--which will tell you the most number of points you have in any of your " "geometry columns\n" "SELECT MAX(ST_NPoints(geom)) FROM sometable;" msgstr "" #. Tag: para #: faq.xml:61 #, no-c-format msgid "What kind of geometric objects can I store?" msgstr "" #. Tag: para #: faq.xml:65 #, no-c-format msgid "" "You can store point, line, polygon, multipoint, multiline, multipolygon, and " "geometrycollections. In PostGIS 2.0 and above you can also store TINS and " "Polyhedral Surfaces in the basic geometry type. These are specified in the " "Open GIS Well Known Text Format (with XYZ,XYM,XYZM extensions). There are " "three data types currently supported. The standard OGC geometry data type " "which uses a planar coordinate system for measurement, the geography data " "type which uses a geodetic coordinate system (not OGC, but you'll find a " "similar type in Microsoft SQL Server 2008+). Only WGS 84 long lat " "(SRID:4326) is supported by the geography data type. The newest family " "member of the PostGIS spatial type family is raster for storing and " "analyzing raster data. Raster has its very own FAQ. Refer to and for more details." msgstr "" #. Tag: para #: faq.xml:78 #, no-c-format msgid "I'm all confused. Which data store should I use geometry or geography?" msgstr "" #. Tag: para #: faq.xml:82 #, no-c-format msgid "" "Short Answer: geography is a new data type that supports long range " "distances measurements, but most computations on it are currently slower " "than they are on geometry. If you use geography -- you don't need to learn " "much about planar coordinate systems. Geography is generally best if all you " "care about is measuring distances and lengths and you have data from all " "over the world. Geometry data type is an older data type that has many more " "functions supporting it, enjoys greater support from third party tools, and " "operations on it are generally faster -- sometimes as much as 10 fold faster " "for larger geometries. Geometry is best if you are pretty comfortable with " "spatial reference systems or you are dealing with localized data where all " "your data fits in a single spatial " "reference system (SRID), or you need to do a lot of spatial " "processing. Note: It is fairly easy to do one-off conversions between the " "two types to gain the benefits of each. Refer to to see what is currently supported and what " "is not." msgstr "" #. Tag: para #: faq.xml:93 #, no-c-format msgid "" "Long Answer: Refer to our more lengthy discussion in the and function type matrix." msgstr "" #. Tag: para #: faq.xml:101 #, no-c-format msgid "" "I have more intense questions about geography, such as how big of a " "geographic region can I stuff in a geography column and still get reasonable " "answers. Are there limitations such as poles, everything in the field must " "fit in a hemisphere (like SQL Server 2008 has), speed etc?" msgstr "" #. Tag: para #: faq.xml:105 #, no-c-format msgid "" "Your questions are too deep and complex to be adequately answered in this " "section. Please refer to our ." msgstr "" #. Tag: para #: faq.xml:112 #, no-c-format msgid "How do I insert a GIS object into the database?" msgstr "" #. Tag: para #: faq.xml:116 #, no-c-format msgid "" "First, you need to create a table with a column of type \"geometry\" or " "\"geography\" to hold your GIS data. Storing geography type data is a little " "different than storing geometry. Refer to for details on storing geography." msgstr "" #. Tag: para #: faq.xml:120 #, no-c-format msgid "" "For geometry: Connect to your database with psql and " "try the following SQL:" msgstr "" #. Tag: programlisting #: faq.xml:124 #, no-c-format msgid "" "CREATE TABLE gtest ( ID int4, NAME varchar(20) );\n" "SELECT AddGeometryColumn('', 'gtest','geom',-1,'LINESTRING',2);" msgstr "" #. Tag: para #: faq.xml:126 #, no-c-format msgid "" "If the geometry column addition fails, you probably have not loaded the " "PostGIS functions and objects into this database. See the ." msgstr "" #. Tag: para #: faq.xml:130 #, no-c-format msgid "" "Then, you can insert a geometry into the table using a SQL insert statement. " "The GIS object itself is formatted using the OpenGIS Consortium \"well-known " "text\" format:" msgstr "" #. Tag: programlisting #: faq.xml:134 #, no-c-format msgid "" "INSERT INTO gtest (ID, NAME, GEOM) \n" "VALUES (\n" " 1, \n" " 'First Geometry', \n" " ST_GeomFromText('LINESTRING(2 3,4 5,6 5,7 8)', -1)\n" ");" msgstr "" #. Tag: para #: faq.xml:136 #, no-c-format msgid "" "For more information about other GIS objects, see the object reference." msgstr "" #. Tag: para #: faq.xml:139 #, no-c-format msgid "To view your GIS data in the table:" msgstr "" #. Tag: programlisting #: faq.xml:141 #, no-c-format msgid "SELECT id, name, ST_AsText(geom) AS geom FROM gtest;" msgstr "" #. Tag: para #: faq.xml:143 #, no-c-format msgid "The return value should look something like this:" msgstr "" #. Tag: programlisting #: faq.xml:145 #, no-c-format msgid "" "id | name | geom\n" "----+----------------+-----------------------------\n" " 1 | First Geometry | LINESTRING(2 3,4 5,6 5,7 8) \n" "(1 row)" msgstr "" #. Tag: para #: faq.xml:151 #, no-c-format msgid "How do I construct a spatial query?" msgstr "" #. Tag: para #: faq.xml:155 #, no-c-format msgid "" "The same way you construct any other database query, as an SQL combination " "of return values, functions, and boolean tests." msgstr "" #. Tag: para #: faq.xml:158 #, no-c-format msgid "" "For spatial queries, there are two issues that are important to keep in mind " "while constructing your query: is there a spatial index you can make use of; " "and, are you doing expensive calculations on a large number of geometries." msgstr "" #. Tag: para #: faq.xml:163 #, no-c-format msgid "" "In general, you will want to use the \"intersects operator\" (&&) " "which tests whether the bounding boxes of features intersect. The reason the " "&& operator is useful is because if a spatial index is available to " "speed up the test, the && operator will make use of this. This can " "make queries much much faster." msgstr "" #. Tag: para #: faq.xml:170 #, no-c-format msgid "" "You will also make use of spatial functions, such as Distance(), " "ST_Intersects(), ST_Contains() and ST_Within(), among others, to narrow down " "the results of your search. Most spatial queries include both an indexed " "test and a spatial function test. The index test serves to limit the number " "of return tuples to only tuples that might meet the " "condition of interest. The spatial functions are then use to test the " "condition exactly." msgstr "" #. Tag: programlisting #: faq.xml:178 #, no-c-format msgid "" "SELECT id, the_geom \n" "FROM thetable \n" "WHERE \n" " ST_Contains(the_geom,'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))');" msgstr "" #. Tag: para #: faq.xml:184 #, no-c-format msgid "How do I speed up spatial queries on large tables?" msgstr "" #. Tag: para #: faq.xml:188 #, no-c-format msgid "" "Fast queries on large tables is the raison d'etre of " "spatial databases (along with transaction support) so having a good index is " "important." msgstr "" #. Tag: para #: faq.xml:192 #, no-c-format msgid "" "To build a spatial index on a table with a geometry " "column, use the \"CREATE INDEX\" function as follows:" msgstr "" #. Tag: programlisting #: faq.xml:196 #, no-c-format msgid "" "CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometrycolumn] );" msgstr "" #. Tag: para #: faq.xml:198 #, no-c-format msgid "" "The \"USING GIST\" option tells the server to use a GiST (Generalized Search " "Tree) index." msgstr "" #. Tag: para #: faq.xml:202 #, no-c-format msgid "" "GiST indexes are assumed to be lossy. Lossy indexes uses a proxy object (in " "the spatial case, a bounding box) for building the index." msgstr "" #. Tag: para #: faq.xml:207 #, no-c-format msgid "" "You should also ensure that the PostgreSQL query planner has enough " "information about your index to make rational decisions about when to use " "it. To do this, you have to \"gather statistics\" on your geometry tables." msgstr "" #. Tag: para #: faq.xml:212 #, no-c-format msgid "" "For PostgreSQL 8.0.x and greater, just run the VACUUM ANALYZE command." msgstr "" #. Tag: para #: faq.xml:215 #, no-c-format msgid "" "For PostgreSQL 7.4.x and below, run the SELECT UPDATE_GEOMETRY_STATS" "() command." msgstr "" #. Tag: para #: faq.xml:222 #, no-c-format msgid "Why aren't PostgreSQL R-Tree indexes supported?" msgstr "" #. Tag: para #: faq.xml:226 #, no-c-format msgid "" "Early versions of PostGIS used the PostgreSQL R-Tree indexes. However, " "PostgreSQL R-Trees have been completely discarded since version 0.6, and " "spatial indexing is provided with an R-Tree-over-GiST scheme." msgstr "" #. Tag: para #: faq.xml:231 #, no-c-format msgid "" "Our tests have shown search speed for native R-Tree and GiST to be " "comparable. Native PostgreSQL R-Trees have two limitations which make them " "undesirable for use with GIS features (note that these limitations are due " "to the current PostgreSQL native R-Tree implementation, not the R-Tree " "concept in general):" msgstr "" #. Tag: para #: faq.xml:239 #, no-c-format msgid "" "R-Tree indexes in PostgreSQL cannot handle features which are larger than 8K " "in size. GiST indexes can, using the \"lossy\" trick of substituting the " "bounding box for the feature itself." msgstr "" #. Tag: para #: faq.xml:246 #, no-c-format msgid "" "R-Tree indexes in PostgreSQL are not \"null safe\", so building an index on " "a geometry column which contains null geometries will fail." msgstr "" #. Tag: para #: faq.xml:256 #, no-c-format msgid "" "Why should I use the AddGeometryColumn() function and all " "the other OpenGIS stuff?" msgstr "" #. Tag: para #: faq.xml:261 #, no-c-format msgid "" "If you do not want to use the OpenGIS support functions, you do not have to. " "Simply create tables as in older versions, defining your geometry columns in " "the CREATE statement. All your geometries will have SRIDs of -1, and the " "OpenGIS meta-data tables will not be filled in " "properly. However, this will cause most applications based on PostGIS to " "fail, and it is generally suggested that you do use " "AddGeometryColumn() to create geometry tables." msgstr "" #. Tag: para #: faq.xml:270 #, no-c-format msgid "" "MapServer is one application which makes use of the " "geometry_columns meta-data. Specifically, MapServer can " "use the SRID of the geometry column to do on-the-fly reprojection of " "features into the correct map projection." msgstr "" #. Tag: para #: faq.xml:279 #, no-c-format msgid "" "What is the best way to find all objects within a radius of another object?" msgstr "" #. Tag: para #: faq.xml:284 #, no-c-format msgid "" "To use the database most efficiently, it is best to do radius queries which " "combine the radius test with a bounding box test: the bounding box test uses " "the spatial index, giving fast access to a subset of data which the radius " "test is then applied to." msgstr "" #. Tag: para #: faq.xml:289 #, no-c-format msgid "" "The ST_DWithin(geometry, geometry, distance) function is " "a handy way of performing an indexed distance search. It works by creating a " "search rectangle large enough to enclose the distance radius, then " "performing an exact distance search on the indexed subset of results." msgstr "" #. Tag: para #: faq.xml:295 #, no-c-format msgid "" "For example, to find all objects with 100 meters of POINT(1000 1000) the " "following query would work well:" msgstr "" #. Tag: programlisting #: faq.xml:298 #, no-c-format msgid "" "SELECT * FROM geotable \n" "WHERE ST_DWithin(geocolumn, 'POINT(1000 1000)', 100.0);" msgstr "" #. Tag: para #: faq.xml:304 #, no-c-format msgid "How do I perform a coordinate reprojection as part of a query?" msgstr "" #. Tag: para #: faq.xml:309 #, no-c-format msgid "" "To perform a reprojection, both the source and destination coordinate " "systems must be defined in the SPATIAL_REF_SYS table, and the geometries " "being reprojected must already have an SRID set on them. Once that is done, " "a reprojection is as simple as referring to the desired destination SRID. " "The below projects a geometry to NAD 83 long lat. The below will only work " "if the srid of the_geom is not -1 (not undefined spatial ref)" msgstr "" #. Tag: programlisting #: faq.xml:316 #, no-c-format msgid "SELECT ST_Transform(the_geom,4269) FROM geotable;" msgstr "" #. Tag: para #: faq.xml:322 #, no-c-format msgid "" "I did an ST_AsEWKT and ST_AsText on my rather large geometry and it returned " "blank field. What gives?" msgstr "" #. Tag: para #: faq.xml:326 #, no-c-format msgid "" "You are probably using PgAdmin or some other tool that doesn't output large " "text. If your geometry is big enough, it will appear blank in these tools. " "Use PSQL if you really need to see it or output it in WKT." msgstr "" #. Tag: programlisting #: faq.xml:329 #, no-c-format msgid "" "--To check number of geometries are really blank\n" " SELECT count(gid) FROM geotable WHERE " "the_geom IS NULL;" msgstr "" #. Tag: para #: faq.xml:335 #, no-c-format msgid "" "When I do an ST_Intersects, it says my two geometries don't intersect when I " "KNOW THEY DO. What gives?" msgstr "" #. Tag: para #: faq.xml:339 #, no-c-format msgid "" "This generally happens in two common cases. Your geometry is invalid -- " "check or you are assuming they intersect " "because ST_AsText truncates the numbers and you have lots of decimals after " "it is not showing you." msgstr "" #. Tag: para #: faq.xml:347 #, no-c-format msgid "" "I am releasing software that uses PostGIS, does that mean my software has to " "be licensed using the GPL like PostGIS? Will I have to publish all my code " "if I use PostGIS?" msgstr "" #. Tag: para #: faq.xml:351 #, no-c-format msgid "" "Almost certainly not. As an example, consider Oracle database running on " "Linux. Linux is GPL, Oracle is not, does Oracle running on Linux have to be " "distributed using the GPL? No. So your software can use a PostgreSQL/PostGIS " "database as much as it wants and be under any license you like." msgstr "" #. Tag: para #: faq.xml:352 #, no-c-format msgid "" "The only exception would be if you made changes to the PostGIS source code, " "and distributed your changed version of PostGIS. In that case you would have " "to share the code of your changed PostGIS (but not the code of applications " "running on top of it). Even in this limited case, you would still only have " "to distribute source code to people you distributed binaries to. The GPL " "does not require that you publish your source code, " "only that you share it with people you give binaries to." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/introduction.xml.po0000644000000000000000000005650612035636643021655 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: introduction.xml:3 #, no-c-format msgid "Introduction" msgstr "Introdução" #. Tag: para #: introduction.xml:5 #, no-c-format msgid "" "PostGIS was developed by Refractions Research Inc, as a spatial database " "technology research project. Refractions is a GIS and database consulting " "company in Victoria, British Columbia, Canada, specializing in data " "integration and custom software development. We plan on supporting and " "developing PostGIS to support a range of important GIS functionality, " "including full OpenGIS support, advanced topological constructs (coverages, " "surfaces, networks), desktop user interface tools for viewing and editing " "GIS data, and web-based access tools." msgstr "" "O PostGIS foi desenvolvido pela Refractions Research Inc, como uma tecnologia de banco de dados espacial." "Refractions é uma empresa de SIG e consultoria em banco de dados, localizada em Victoria, na Colúmbia " "Britânica - Canadá, especializada em integração de dados e desenvolvimento customizado de software. Nós " "planejamos e suportamos o desenvolvimento do PostGIS para uma ampla de funcionalidades de SIG, incluindo " "suporte a padrões abertos, construções topológicas avançadas (coberturas, superfícies, redes), ferramentas " "desktop com interface gráfica para visualização e edição de dados GIS e ferramentas para o acesso web." #. Tag: para #: introduction.xml:15 #, no-c-format msgid "" "PostGIS is an incubation project of the OSGeo Foundation. PostGIS is being " "continually improved and funded by many FOSS4G Developers as well as " "corporations all over the world that gain great benefit from its " "functionality and versatility." msgstr "" "PostGIS é um projeto sob a tutela da fundação OSGeo. PostGIS é melhorado de forma contínua e " "financiado por muitos desenvolvedores FOSS4G, bem como por corporações por todo o mundo que se beneficiam " "de suas funcionalidades e versatilidade." #. Tag: title #: introduction.xml:21 #, no-c-format msgid "Project Steering Committee" msgstr "Comitê Diretor do Projeto" #. Tag: para #: introduction.xml:22 #, no-c-format msgid "" "The PostGIS Project Steering Committee (PSC) coordinates the general " "direction, release cycles, documentation, and outreach efforts for the " "PostGIS project. In addition the PSC provides general user support, accepts " "and approves patches from the general PostGIS community and votes on " "miscellaneous issues involving PostGIS such as developer commit access, new " "PSC members or significant API changes." msgstr "" "O Comitê Diretor do Projeto PostGIS (PSC - Project Steering Comitee, em inglês) é responsável " "pela direção geral, ciclos de lançamento, documentação e os esforços para o projeto. Além disso, o " "comitê dá suporte ao usuário comum, aceita e aprova novas melhorias da comunidade e vota em questões " "diversas envolvendo o PostGIS, como por exemplo, uma permissão de commit direta, novos membros do comitê e " "mudanças significativas da API (Application Programming Interface)." #. Tag: term #: introduction.xml:31 #, no-c-format msgid "Mark Cave-Ayland" msgstr "" #. Tag: para #: introduction.xml:33 #, no-c-format msgid "" "Coordinates bug fixing and maintenance effort, alignment of PostGIS with " "PostgreSQL releases, spatial index selectivity and binding, loader/dumper, " "and Shapefile GUI Loader, integration of new and new function enhancements." msgstr "" "Coordena o esforço de manutençao e correção de bugs, alinhando as novas versões do PostGIS com " "as novas versões do PostgreSQL, seletividade dos índices espaciais, importador/exportador, " "e o Shapefile GUI Loader, integração de novas funções e novas melhorias." #. Tag: term #: introduction.xml:40 #, no-c-format msgid "Regina Obe" msgstr "" #. Tag: para #: introduction.xml:42 #, no-c-format msgid "" "Buildbot Maintenance, windows production and experimental builds, " "Documentation, general user support on PostGIS newsgroup, X3D support, Tiger " "Geocoder Support, management functions, and smoke testing new functionality " "or major code changes." msgstr "" "Manutenção do Buildbot, produção das versões experimentais e versões Windows, " "documentação, suporte ao usuário na lista de emails do PostGIS, suporte à X3D, " "suporte ao TIGER Geocoder, funções de gerenciamento e testes para novas funcionalidades ou grandes " "mudanças de código." #. Tag: term #: introduction.xml:49 #, no-c-format msgid "Paul Ramsey (Chair)" msgstr "Paul Ramsey (Presidente)" #. Tag: para #: introduction.xml:51 #, no-c-format msgid "" "Co-founder of PostGIS project. General bug fixing, geography support, " "geography and geometry index support (2D, 3D, nD index and anything spatial " "index), underlying geometry internal structures, GEOS functionality " "integration and alignment with GEOS releases, loader/dumper, and Shapefile " "GUI loader." msgstr "" "Co-fundador do projeto PostGIS. Correção de bugs em geral, suporte ao tipo 'geografia', " "suporte a índices geográficos e geométricos (índices 2D, 3D, nD e qualquer índice espacial), " "estruturas internas geométricas, integração com as funcionalidades da GEOS e alinhamento com seu ciclo " "de lançamento, importador/exportador e importador GUI." #. Tag: term #: introduction.xml:57 #, no-c-format msgid "Sandro Santilli" msgstr "" #. Tag: para #: introduction.xml:60 #, no-c-format msgid "" "Bug fixes and maintenance and integration of new GEOS functionality and " "alignment with GEOS releases, Topology support, and Raster framework and low " "level api functions." msgstr "" "Correção de bugs e manutenção, integração de novas funcionalidades da GEOS e alinhamento com o ciclo de vida " "da mesma, suporte a Topologia, framework RASTER e funções de baixo nível." #. Tag: title #: introduction.xml:67 #, no-c-format msgid "Contributors Past and Present" msgstr "Colaboradores Passado e Presente" #. Tag: term #: introduction.xml:71 #, no-c-format msgid "Chris Hodgson" msgstr "" #. Tag: para #: introduction.xml:73 #, no-c-format msgid "" "Prior PSC Member. General development, site and buildbot maintenance, OSGeo " "incubation management" msgstr "" "Antigo membro do comitê. Desenvolvimento em geral, manutenção do website e buildbot, " "gerente da incubação na OSGeo." #. Tag: term #: introduction.xml:77 #, no-c-format msgid "Kevin Neufeld" msgstr "" #. Tag: para #: introduction.xml:79 #, no-c-format msgid "" "Prior PSC Member. Documentation and documentation support tools, advanced " "user support on PostGIS newsgroup, and PostGIS maintenance function " "enhancements." msgstr "" "Antigo membro do comitê. Documentação e suporte a ferramentas de documentação, suporte ao usuário avançado " "nas listas de discussão e melhorias em funções do PostGIS." #. Tag: term #: introduction.xml:85 #, no-c-format msgid "Dave Blasby" msgstr "" #. Tag: para #: introduction.xml:88 #, no-c-format msgid "" "The original developer/Co-founder of PostGIS. Dave wrote the server side " "objects, index bindings, and many of the server side analytical functions." msgstr "" "Desenvolvedor original e co-fundador do PostGIS. Dave escreveu os objetos do servidor, chamadas de índices e muitas das funcionalidades analíticas presentes no servidor." #. Tag: term #: introduction.xml:95 #, no-c-format msgid "Jeff Lounsbury" msgstr "" #. Tag: para #: introduction.xml:97 #, no-c-format msgid "" "Original development of the Shape file loader/dumper. Current PostGIS " "Project Owner representative." msgstr "" "Desenvolvedor original do importador/exportador de shapefiles. Atual representante do Dono do Projeto." #. Tag: term #: introduction.xml:102 #, no-c-format msgid "Olivier Courtin" msgstr "" #. Tag: para #: introduction.xml:104 #, no-c-format msgid "Input output XML (KML,GML)/GeoJSON functions, 3D support and bug fixes." msgstr "" "Funções para entrada e saída de XML (KML, GML)/GeoJSon, suporte a 3D e correção de bugs." #. Tag: term #: introduction.xml:109 #, no-c-format msgid "Mark Leslie" msgstr "" #. Tag: para #: introduction.xml:111 #, no-c-format msgid "" "Ongoing maintenance and development of core functions. Enhanced curve " "support. Shapefile GUI loader." msgstr "" "Manutenção e desenvolvimento de funções do núcleo. Melhorias para o suporte a curvas e no importador GUI." #. Tag: term #: introduction.xml:116 #, no-c-format msgid "Pierre Racine" msgstr "" #. Tag: para #: introduction.xml:118 #, no-c-format msgid "Raster overall architecture, prototyping, programming support" msgstr "Arquitetura Raster, prototipação e suporte ao desenvolvimento." #. Tag: term #: introduction.xml:123 #, no-c-format msgid "Nicklas Avén" msgstr "" #. Tag: para #: introduction.xml:126 #, no-c-format msgid "" "Distance function enhancements (including 3D distance and relationship " "functions) and additions, Windows testing, and general user support" msgstr "" "Melhorias nas funções de distância (incluindo distância em 3D e funções de relacionamento) e somas, " "testes em windows e suporte geral na lista de emails." #. Tag: term #: introduction.xml:131 #, no-c-format msgid "Jorge Arévalo" msgstr "" #. Tag: para #: introduction.xml:134 #, no-c-format msgid "Raster development, GDAL driver support, loader" msgstr "" "Desenvolvimento Raster, suporte do driver GDAL e importador." #. Tag: term #: introduction.xml:139 #, no-c-format msgid "Bborie Park" msgstr "" #. Tag: para #: introduction.xml:141 #, no-c-format msgid "Raster development, raster loader" msgstr "" "Desenvolvimento raster, importador raster." #. Tag: term #: introduction.xml:146 #, no-c-format msgid "Mateusz Loskot" msgstr "" #. Tag: para #: introduction.xml:148 #, no-c-format msgid "Raster loader, low level raster api functions" msgstr "" "Desenvolvimento no importador raster e suporte a funções de baixo nível da API raster." #. Tag: term #: introduction.xml:153 #, no-c-format msgid "David Zwarg" msgstr "" #. Tag: para #: introduction.xml:156 #, no-c-format msgid "Raster development" msgstr "Desenvolvimento Raster" #. Tag: term #: introduction.xml:161 #, no-c-format msgid "Other contributors: Individuals" msgstr "Outros colaboradores: indivíduos" #. Tag: para #: introduction.xml:164 #, no-c-format msgid "" "In alphabetical order: Alex Bodnaru, Alex Mayrhofer, Andrea Peri, Andreas " "Forø Tollefsen, Andreas Neumann, Anne Ghisla, Barbara Phillipot, Ben Jubb, " "Bernhard Reiter, Brian Hamlin, Bruce Rindahl, Bruno Wolff III, Bryce L. " "Nordgren, Carl Anderson, Charlie Savage, Dane Springmeyer, David Skea, David " "Techer, Eduin Carrillo, Even Rouault, Frank Warmerdam, George Silva, Gerald " "Fenoy, Gino Lucrezi, Guillaume Lelarge, IIDA Tetsushi, Ingvild Nystuen, Jeff " "Adams, Jose Carlos Martinez Llari, Kashif Rasul, Klaus Foerster, Kris Jurka, " "Leo Hsu, Loic Dachary, Luca S. Percich, Maria Arias de Reyna, Mark Sondheim, " "Markus Schaber, Maxime Guillaud, Maxime van Noppen, Michael Fuhr, Nikita " "Shulga, Norman Vine, Rafal Magda, Ralph Mason, Richard Greenwood, Silvio " "Grosso, Steffen Macke, Stephen Frost, Tom van Tilburg, Vincent Picavet" msgstr "" "Em ordem alfabética: Alex Bodnaru, Alex Mayrhofer, Andrea Peri, Andreas " "Forø Tollefsen, Andreas Neumann, Anne Ghisla, Barbara Phillipot, Ben Jubb, " "Bernhard Reiter, Brian Hamlin, Bruce Rindahl, Bruno Wolff III, Bryce L. " "Nordgren, Carl Anderson, Charlie Savage, Dane Springmeyer, David Skea, David " "Techer, Eduin Carrillo, Even Rouault, Frank Warmerdam, George Silva, Gerald " "Fenoy, Gino Lucrezi, Guillaume Lelarge, IIDA Tetsushi, Ingvild Nystuen, Jeff " "Adams, Jose Carlos Martinez Llari, Kashif Rasul, Klaus Foerster, Kris Jurka, " "Leo Hsu, Loic Dachary, Luca S. Percich, Maria Arias de Reyna, Mark Sondheim, " "Markus Schaber, Maxime Guillaud, Maxime van Noppen, Michael Fuhr, Nikita " "Shulga, Norman Vine, Rafal Magda, Ralph Mason, Richard Greenwood, Silvio " "Grosso, Steffen Macke, Stephen Frost, Tom van Tilburg, Vincent Picavet" #. Tag: term #: introduction.xml:221 #, no-c-format msgid "Other contributors: Corporate Sponsors" msgstr "Outros colaboradores: Patrocinadores" #. Tag: para #: introduction.xml:224 #, no-c-format msgid "" "These are corporate entities that have contributed developer time, hosting, " "or direct monetary funding to the PostGIS project" msgstr "" "Estas são entidades corporativas que contribuiram com horas home, hospedagem ou suporte monetário direto " "ao projeto PostGIS" #. Tag: para #: introduction.xml:225 #, no-c-format msgid "" "In alphabetical order: Arrival 3D, Associazione Italiana per l'Informazione " "Geografica Libera (GFOSS.it), AusVet, Avencia, Azavea, Cadcorp, CampToCamp, " "City of Boston (DND), Clever Elephant Solutions, Cooperativa Alveo, Deimos " "Space, Faunalia, Geographic Data BC, Hunter Systems Group, Lidwala " "Consulting Engineers, LisaSoft, Logical Tracking & Tracing International " "AG, Michigan Tech Research Institute, Norwegian Forest and Landscape " "Institute, OpenGeo, OSGeo, Oslandia, Paragon Corporation, R3 GIS,, " "Refractions Research, Regione Toscana-SIGTA, Safe Software, Sirius " "Corporation plc, Stadt Uster, UC Davis Center for Vectorborne Diseases, " "University of Laval, U.S Department of State (HIU), Vizzuality, Zonar Systems" msgstr "" "Em ordem alfabética: Arrival 3D, Associazione Italiana per l'Informazione " "Geografica Libera (GFOSS.it), AusVet, Avencia, Azavea, Cadcorp, CampToCamp, " "City of Boston (DND), Clever Elephant Solutions, Cooperativa Alveo, Deimos " "Space, Faunalia, Geographic Data BC, Hunter Systems Group, Lidwala " "Consulting Engineers, LisaSoft, Logical Tracking & Tracing International " "AG, Michigan Tech Research Institute, Norwegian Forest and Landscape " "Institute, OpenGeo, OSGeo, Oslandia, Paragon Corporation, R3 GIS,, " "Refractions Research, Regione Toscana-SIGTA, Safe Software, Sirius " "Corporation plc, Stadt Uster, UC Davis Center for Vectorborne Diseases, " "University of Laval, U.S Department of State (HIU), Vizzuality, Zonar Systems" #. Tag: term #: introduction.xml:265 #, no-c-format msgid "Crowd Funding Campaigns" msgstr "Campanhas de financiamento coletivo" #. Tag: para #: introduction.xml:268 #, no-c-format msgid "" "Crowd funding campaigns are campaigns we run to get badly wanted features " "funded that can service a large number of people. Each campaign is " "specifically focused on a particular feature or set of features. Each " "sponsor chips in a small fraction of the needed funding and with enough " "people/organizations contributing, we have the funds to pay for the work " "that will help many. If you have an idea for a feature you think many others " "would be willing to co-fund, please post to the PostGIS newsgroup your " "thoughts and together we can make it happen." msgstr "" "Campanhas de financiamento coletivo são esforços que conduzimos para conseguirmos " "implementar funções que são desejadas pela comunidade em geral. Cada campanha " "é focada em um conjunto particular de funcionalidades. Cada patrocinador contribui " "com uma fração do valor que precisamos e caso pessoas/entidades suficientes contribuam " "custeamos o trabalho que irá beneficar muitos. Se você tem alguma idéia para uma funcionalidade " "que você acredite que outros estejam dispostos a financiar, poste uma mensagem no link " "grupo PostGIS com suas idéias " "e juntos podemos fazer acontecer." #. Tag: para #: introduction.xml:269 #, no-c-format msgid "" "PostGIS 2.0.0 was the first release we tried this strategy. We used PledgeBank and we got two " "successful campaigns out of it." msgstr "" "A versão 2.0.0 foi a primeira em que testamos esta estratégia. Utilizamos o " "PledgeBank e conseguimos realizar duas " "campanhas bem sucedidas." #. Tag: para #: introduction.xml:270 #, no-c-format msgid "" "postgistopology - 10 plus sponsors each " "contributed $250 USD to build toTopoGeometry function and beef up topology " "support in 2.0.0. It happened." msgstr "" "postgistopology - 10 patrocinadores, cada um contribuiu com USD $250,00 para " "a construção da função toTopoGeometry e melhorias gerais no suporte a topologia da versão 2.0.0. Aconteceu!" #. Tag: para #: introduction.xml:271 #, no-c-format msgid "" "postgis64windows - 20 someodd sponsors each " "contributed $100 USD to pay for the work needed to work out PostGIS 64-bit " "on windows issues. It happened. We now have a 64-bit beta release for " "PostGIS 2.0.0 and a final one planned for release that will be available on " "PostgreSQL stack builder." msgstr "" "postgis64windows - 20 patrocinadores, contribuiram cada um " "com USD $100 para custear o trabalho necessário para um lançamento do PostGIS 64-bits para Windows. " "Aconteceu e agora temos uma release beta 64bits disponível para o PostGIS 2.0.0 e uma versão final planejada " "que será disponibilizada junto com o stack builder." #. Tag: term #: introduction.xml:276 #, no-c-format msgid "Important Support Libraries" msgstr "Bibliotecas importantes" #. Tag: para #: introduction.xml:279 #, no-c-format msgid "" "The GEOS geometry " "operations library, and the algorithmic work of Martin Davis in making it " "all work, ongoing maintenance and support of Mateusz Loskot, Sandro Santilli " "(strk), Paul Ramsey and others." msgstr "A GEOS, biblioteca geométrica e o trabalho em algoritmos " "de Martin Davis, manutenção autal de Mateusz Loskot, Sandro Santilli (strk), Paul Ramsey e outros." #. Tag: para #: introduction.xml:284 #, no-c-format msgid "" "The GDAL Geospatial Data " "Abstraction Library, by Frank Warmerdam and others is used to power much of " "the raster functionality introduced in PostGIS 2.0.0. In kind, improvements " "needed in GDAL to support PostGIS are contributed back to the GDAL project." msgstr "A GDAL, Geospatial Data Abstraction Library " "(Biblioteca de abstração de dados geoespaciais), por Frank Wamerdam e outros é utilizada para rodar muitas das " "funcionalidades raster introduzidas na versão 2.0.0. Em tempo, as melhorias necessárias na GDAL para suportar o " "PostGIS tem sido contribuídas de volta para o projeto." #. Tag: para #: introduction.xml:289 #, no-c-format msgid "" "The Proj4 cartographic " "projection library, and the work of Gerald Evenden and Frank Warmerdam in " "creating and maintaining it." msgstr "A biblioteca Proj4 e o trabalho de Gerald Evenden " "e Frank Wamerdam em sua criação e manutenção." #. Tag: para #: introduction.xml:293 #, no-c-format msgid "" "Last but not least, the PostgreSQL " "DBMS, The giant that PostGIS stands on. Much of the speed and " "flexibility of PostGIS would not be possible without the extensibility, " "great query planner, GIST index, and plethora of SQL features provided by " "PostgreSQL." msgstr "Por último, mas não menos importante, o PostgreSQL " "DBMS, o gigante sobre qual o PostGIS se apóia. Muito da velocidade e flexibilidade do PostGIS não seria " "possível sem a extensibilidade, um grande analisador de consultas, índice GIST e uma variedade de funcionalidades SQL dadas " "pelos PostgreSQl." #. Tag: title #: introduction.xml:302 #, no-c-format msgid "More Information" msgstr "Mais informações" #. Tag: para #: introduction.xml:306 #, no-c-format msgid "" "The latest software, documentation and news items are available at the " "PostGIS web site, http://www.postgis." "org." msgstr "A última versão, documentação e novidades estão disponíveis no " "site do PostGIS, http://www.postgis." "org." #. Tag: para #: introduction.xml:312 #, no-c-format msgid "" "More information about the GEOS geometry operations library is available " "at http://trac.osgeo.org/geos/." msgstr "Mais informações sobre a biblioteca GEOS estão disponíveis em " " http://trac.osgeo.org/geos/." #. Tag: para #: introduction.xml:318 #, no-c-format msgid "" "More information about the Proj4 reprojection library is available at " "http://trac.osgeo.org/proj/." msgstr "" "Mais informações sobre a biblioteca Proj4 estão disponíveis em " "http://trac.osgeo.org/proj/." #. Tag: para #: introduction.xml:324 #, no-c-format msgid "" "More information about the PostgreSQL database server is available at the " "PostgreSQL main site http://www." "postgresql.org." msgstr "Mais informações sobre o PostgreSQL estão disponíveis em http://www." "postgresql.org." #. Tag: para #: introduction.xml:330 #, no-c-format msgid "" "More information about GiST indexing is available at the PostgreSQL GiST " "development site, http://www.sai.msu.su/~megera/postgres/gist/." msgstr "Mais informações sobre o índice GiST estão disponíveis no site de desenvolvimento do PostgreSQL em http://www.sai.msu.su/~megera/postgres/gist/." #. Tag: para #: introduction.xml:336 #, no-c-format msgid "" "More information about MapServer internet map server is available at http://mapserver.org." msgstr "Mais informações sobre o MapServer estão disponíveis em http://mapserver.org" #. Tag: para #: introduction.xml:342 #, no-c-format msgid "" "The "Simple " "Features for Specification for SQL" is available at the OpenGIS " "Consortium web site: http://" "www.opengeospatial.org/." msgstr "As especificações "Simple " "Features for Specification for SQL" estão disponíveis no site da OGC: " "http://www.opengeospatial.org/." postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_accessor.xml.po0000644000000000000000000025407212025614072022741 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_accessor.xml:4 #, no-c-format msgid "Geometry Accessors" msgstr "" #. Tag: refname #: reference_accessor.xml:8 #, no-c-format msgid "GeometryType" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:10 #, no-c-format msgid "" "Returns the type of the geometry as a string. Eg: 'LINESTRING', " "'POLYGON', 'MULTIPOINT', etc." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:16 #, no-c-format msgid "" "text GeometryType " "geometry geomA" msgstr "" #. Tag: title #: reference_accessor.xml:24 reference_accessor.xml:81 #: reference_accessor.xml:128 reference_accessor.xml:176 #: reference_accessor.xml:224 reference_accessor.xml:273 #: reference_accessor.xml:325 reference_accessor.xml:374 #: reference_accessor.xml:435 reference_accessor.xml:486 #: reference_accessor.xml:545 reference_accessor.xml:604 #: reference_accessor.xml:659 reference_accessor.xml:703 #: reference_accessor.xml:754 reference_accessor.xml:811 #: reference_accessor.xml:876 reference_accessor.xml:928 #: reference_accessor.xml:987 reference_accessor.xml:1033 #: reference_accessor.xml:1068 reference_accessor.xml:1107 #: reference_accessor.xml:1147 reference_accessor.xml:1193 #: reference_accessor.xml:1232 reference_accessor.xml:1265 #: reference_accessor.xml:1306 reference_accessor.xml:1350 #: reference_accessor.xml:1407 reference_accessor.xml:1460 #: reference_accessor.xml:1503 reference_accessor.xml:1554 #: reference_accessor.xml:1618 reference_accessor.xml:1661 #: reference_accessor.xml:1706 reference_accessor.xml:1752 #: reference_accessor.xml:1794 reference_accessor.xml:1839 #: reference_accessor.xml:1885 reference_accessor.xml:1927 #: reference_accessor.xml:1973 reference_accessor.xml:2014 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_accessor.xml:26 #, no-c-format msgid "" "Returns the type of the geometry as a string. Eg: 'LINESTRING', " "'POLYGON', 'MULTIPOINT', etc." msgstr "" #. Tag: para #: reference_accessor.xml:29 #, no-c-format msgid "" "OGC SPEC s2.1.1.1 - Returns the name of the instantiable subtype of Geometry " "of which this Geometry instance is a member. The name of the instantiable " "subtype of Geometry is returned as a string." msgstr "" #. Tag: para #: reference_accessor.xml:35 #, no-c-format msgid "" "This function also indicates if the geometry is measured, by returning a " "string of the form 'POINTM'." msgstr "" #. Tag: para #: reference_accessor.xml:38 reference_accessor.xml:388 #: reference_accessor.xml:1152 #, no-c-format msgid "" "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was " "introduced." msgstr "" #. Tag: para #: reference_accessor.xml:39 reference_accessor.xml:134 #: reference_accessor.xml:390 reference_accessor.xml:497 #: reference_accessor.xml:550 reference_accessor.xml:830 #: reference_accessor.xml:996 reference_accessor.xml:1272 #: reference_accessor.xml:1314 reference_accessor.xml:1423 #: reference_accessor.xml:1757 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_accessor.xml:40 reference_accessor.xml:136 #: reference_accessor.xml:393 reference_accessor.xml:559 #: reference_accessor.xml:624 reference_accessor.xml:670 #: reference_accessor.xml:1074 reference_accessor.xml:1112 #: reference_accessor.xml:1426 reference_accessor.xml:1468 #: reference_accessor.xml:1671 reference_accessor.xml:1716 #: reference_accessor.xml:1804 reference_accessor.xml:1849 #: reference_accessor.xml:1937 reference_accessor.xml:1979 #: reference_accessor.xml:2024 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_accessor.xml:41 reference_accessor.xml:96 #: reference_accessor.xml:137 reference_accessor.xml:231 #: reference_accessor.xml:334 reference_accessor.xml:392 #: reference_accessor.xml:441 reference_accessor.xml:499 #: reference_accessor.xml:558 reference_accessor.xml:623 #: reference_accessor.xml:768 reference_accessor.xml:998 #: reference_accessor.xml:1038 reference_accessor.xml:1073 #: reference_accessor.xml:1111 reference_accessor.xml:1156 #: reference_accessor.xml:1271 reference_accessor.xml:1367 #: reference_accessor.xml:1425 reference_accessor.xml:1510 #: reference_accessor.xml:1626 reference_accessor.xml:1670 #: reference_accessor.xml:1715 reference_accessor.xml:1759 #: reference_accessor.xml:1803 reference_accessor.xml:1848 #: reference_accessor.xml:1893 reference_accessor.xml:1936 #: reference_accessor.xml:1978 reference_accessor.xml:2023 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_accessor.xml:42 reference_accessor.xml:138 #: reference_accessor.xml:189 reference_accessor.xml:394 #: reference_accessor.xml:442 reference_accessor.xml:562 #: reference_accessor.xml:1075 reference_accessor.xml:1157 #: reference_accessor.xml:1274 reference_accessor.xml:1368 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_accessor.xml:43 reference_accessor.xml:139 #: reference_accessor.xml:190 reference_accessor.xml:395 #: reference_accessor.xml:1158 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: title #: reference_accessor.xml:49 reference_accessor.xml:100 #: reference_accessor.xml:144 reference_accessor.xml:194 #: reference_accessor.xml:241 reference_accessor.xml:295 #: reference_accessor.xml:339 reference_accessor.xml:447 #: reference_accessor.xml:505 reference_accessor.xml:629 #: reference_accessor.xml:677 reference_accessor.xml:722 #: reference_accessor.xml:773 reference_accessor.xml:837 #: reference_accessor.xml:893 reference_accessor.xml:953 #: reference_accessor.xml:1004 reference_accessor.xml:1042 #: reference_accessor.xml:1080 reference_accessor.xml:1117 #: reference_accessor.xml:1163 reference_accessor.xml:1204 #: reference_accessor.xml:1278 reference_accessor.xml:1319 #: reference_accessor.xml:1374 reference_accessor.xml:1432 #: reference_accessor.xml:1473 reference_accessor.xml:1520 #: reference_accessor.xml:1574 reference_accessor.xml:1632 #: reference_accessor.xml:1676 reference_accessor.xml:1721 #: reference_accessor.xml:1765 reference_accessor.xml:1809 #: reference_accessor.xml:1854 reference_accessor.xml:1898 #: reference_accessor.xml:1942 reference_accessor.xml:1984 #: reference_accessor.xml:2029 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:51 #, no-c-format msgid "" "SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 " "29.26,77.27 29.31,77.29 29.07)'));\n" " geometrytype\n" "--------------\n" " LINESTRING" msgstr "" #. Tag: programlisting #: reference_accessor.xml:52 #, no-c-format msgid "" "SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 " "1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 " "1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 " "1, 0 1 1, 0 0 1)) )'));\n" " --result\n" " POLYHEDRALSURFACE" msgstr "" #. Tag: programlisting #: reference_accessor.xml:53 #, no-c-format msgid "" "SELECT GeometryType(geom) as result\n" " FROM\n" " (SELECT \n" " ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') AS geom\n" " ) AS g;\n" " result\n" "--------\n" " TIN" msgstr "" #. Tag: title #: reference_accessor.xml:58 reference_accessor.xml:105 #: reference_accessor.xml:151 reference_accessor.xml:199 #: reference_accessor.xml:247 reference_accessor.xml:300 #: reference_accessor.xml:344 reference_accessor.xml:414 #: reference_accessor.xml:458 reference_accessor.xml:512 #: reference_accessor.xml:579 reference_accessor.xml:635 #: reference_accessor.xml:728 reference_accessor.xml:779 #: reference_accessor.xml:843 reference_accessor.xml:900 #: reference_accessor.xml:960 reference_accessor.xml:1010 #: reference_accessor.xml:1047 reference_accessor.xml:1085 #: reference_accessor.xml:1124 reference_accessor.xml:1168 #: reference_accessor.xml:1209 reference_accessor.xml:1243 #: reference_accessor.xml:1283 reference_accessor.xml:1324 #: reference_accessor.xml:1381 reference_accessor.xml:1438 #: reference_accessor.xml:1478 reference_accessor.xml:1526 #: reference_accessor.xml:1580 reference_accessor.xml:1638 #: reference_accessor.xml:1683 reference_accessor.xml:1728 #: reference_accessor.xml:1771 reference_accessor.xml:1816 #: reference_accessor.xml:1861 reference_accessor.xml:1904 #: reference_accessor.xml:1949 reference_accessor.xml:1991 #: reference_accessor.xml:2036 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_accessor.xml:64 #, no-c-format msgid "ST_Boundary" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:66 #, no-c-format msgid "Returns the closure of the combinatorial boundary of this Geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:72 #, no-c-format msgid "" "geometry ST_Boundary " "geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:83 #, no-c-format msgid "" "Returns the closure of the combinatorial boundary of this Geometry. The " "combinatorial boundary is defined as described in section 3.12.3.2 of the " "OGC SPEC. Because the result of this function is a closure, and hence " "topologically closed, the resulting boundary can be represented using " "representational geometry primitives as discussed in the OGC SPEC, section " "3.12.2." msgstr "" #. Tag: para #: reference_accessor.xml:90 #, no-c-format msgid "Performed by the GEOS module" msgstr "" #. Tag: para #: reference_accessor.xml:92 #, no-c-format msgid "" "Prior to 2.0.0, this function throws an exception if used with " "GEOMETRYCOLLECTION. From 2.0.0 up it will return NULL " "instead (unsupported input)." msgstr "" #. Tag: para #: reference_accessor.xml:94 #, no-c-format msgid "&sfs_compliant; OGC SPEC s2.1.1.1" msgstr "" #. Tag: para #: reference_accessor.xml:95 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.14" msgstr "" #. Tag: programlisting #: reference_accessor.xml:102 #, no-c-format msgid "" "SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 " "1)')));\n" "st_astext\n" "-----------\n" "MULTIPOINT(1 1,-1 1)\n" "\n" "SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 " "1))')));\n" "st_astext\n" "----------\n" "LINESTRING(1 1,0 0,-1 1,1 1)\n" "\n" "--Using a 3d polygon\n" "SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, " "1 1 1))')));\n" "\n" "st_asewkt\n" "-----------------------------------\n" "LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1)\n" "\n" "--Using a 3d multilinestring\n" "SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('MULTILINESTRING((1 1 1,0 0 " "0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )')));\n" "\n" "st_asewkt\n" "----------\n" "MULTIPOINT(-1 1 1,1 1 0.75)" msgstr "" #. Tag: para #: reference_accessor.xml:107 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:113 #, no-c-format msgid "ST_CoordDim" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:115 #, no-c-format msgid "" "Return the coordinate dimension of the ST_Geometry value." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:120 #, no-c-format msgid "" "integer ST_CoordDim " "geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:130 #, no-c-format msgid "Return the coordinate dimension of the ST_Geometry value." msgstr "" #. Tag: para #: reference_accessor.xml:132 #, no-c-format msgid "This is the MM compliant alias name for " msgstr "" #. Tag: para #: reference_accessor.xml:135 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:146 #, no-c-format msgid "" "SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 " "13)');\n" " ---result--\n" " 3\n" "\n" " SELECT ST_CoordDim(ST_Point(1,2));\n" " --result--\n" " 2" msgstr "" #. Tag: refname #: reference_accessor.xml:159 #, no-c-format msgid "ST_Dimension" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:161 #, no-c-format msgid "" "The inherent dimension of this Geometry object, which must be less than or " "equal to the coordinate dimension." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:167 #, no-c-format msgid "" "integer ST_Dimension " "geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:178 #, no-c-format msgid "" "The inherent dimension of this Geometry object, which must be less than or " "equal to the coordinate dimension. OGC SPEC s2.1.1.1 - returns 0 for " "POINT, 1 for LINESTRING, 2 for " "POLYGON, and the largest dimension of the components of a " "GEOMETRYCOLLECTION. If unknown (empty geometry) null is " "returned." msgstr "" #. Tag: para #: reference_accessor.xml:186 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.2" msgstr "" #. Tag: para #: reference_accessor.xml:187 #, no-c-format msgid "" "Enhanced: 2.0.0 support for Polyhedral surfaces and TINs was introduced. No " "longer throws an exception if given empty geometry." msgstr "" #. Tag: para #: reference_accessor.xml:188 #, no-c-format msgid "" "Prior to 2.0.0, this function throws an exception if used with empty " "geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:196 #, no-c-format msgid "" "SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');\n" "ST_Dimension\n" "-----------\n" "1" msgstr "" #. Tag: refname #: reference_accessor.xml:207 #, no-c-format msgid "ST_EndPoint" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:209 #, no-c-format msgid "" "Returns the last point of a LINESTRING geometry as a " "POINT." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:215 #, no-c-format msgid "" "boolean ST_EndPoint " "geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:226 #, no-c-format msgid "" "Returns the last point of a LINESTRING geometry as a " "POINT or NULL if the input parameter " "is not a LINESTRING." msgstr "" #. Tag: para #: reference_accessor.xml:230 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.4" msgstr "" #. Tag: para #: reference_accessor.xml:232 reference_accessor.xml:1511 #, no-c-format msgid "" "Changed: 2.0.0 no longer works with single geometry multilinestrings. In " "older versions of PostGIS -- a single line multilinestring would work " "happily with this function and return the start point. In 2.0.0 it just " "returns NULL like any other multilinestring. The older behavior was an " "undocumented feature, but people who assumed they had their data stored as " "LINESTRING may experience these returning NULL in 2.0 now." msgstr "" #. Tag: programlisting #: reference_accessor.xml:243 #, no-c-format msgid "" "postgis=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::" "geometry));\n" " st_astext\n" "------------\n" " POINT(3 3)\n" "(1 row)\n" "\n" "postgis=# SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;\n" " is_null\n" "----------\n" " t\n" "(1 row)\n" "\n" "--3d endpoint\n" "SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)'));\n" " st_asewkt\n" "--------------\n" " POINT(0 0 5)\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:249 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:256 #, no-c-format msgid "ST_Envelope" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:258 #, no-c-format msgid "" "Returns a geometry representing the double precision (float8) bounding box " "of the supplied geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:264 #, no-c-format msgid "" "geometry ST_Envelope " "geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:275 #, no-c-format msgid "" "Returns the float8 minimum bounding box for the supplied geometry, as a " "geometry. The polygon is defined by the corner points of the bounding box " "((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), " "(MINX, MINY)). (PostGIS will add a " "ZMIN/ZMAX coordinate as well)." msgstr "" #. Tag: para #: reference_accessor.xml:285 #, no-c-format msgid "" "Degenerate cases (vertical lines, points) will return a geometry of lower " "dimension than POLYGON, ie. POINT or " "LINESTRING." msgstr "" #. Tag: para #: reference_accessor.xml:289 #, no-c-format msgid "" "Availability: 1.5.0 behavior changed to output double precision instead of " "float4" msgstr "" #. Tag: para #: reference_accessor.xml:290 reference_accessor.xml:668 #: reference_accessor.xml:766 reference_accessor.xml:1466 #, no-c-format msgid "&sfs_compliant; s2.1.1.1" msgstr "" #. Tag: para #: reference_accessor.xml:291 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.15" msgstr "" #. Tag: programlisting #: reference_accessor.xml:297 #, no-c-format msgid "" "SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));\n" " st_astext\n" "------------\n" " POINT(1 3)\n" "(1 row)\n" "\n" "\n" "SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));\n" " st_astext\n" "--------------------------------\n" " POLYGON((0 0,0 3,1 3,1 0,0 0))\n" "(1 row)\n" "\n" "\n" "SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 " "0))'::geometry));\n" " st_astext\n" "--------------------------------------------------------------\n" " POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))\n" "(1 row)\n" "SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, " "1.0000000001 0, 0 0))'::geometry));\n" " st_astext\n" "--------------------------------------------------------------\n" " POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))\n" "(1 row)\n" " \n" "SELECT Box3D(geom), Box2D(geom), ST_AsText(ST_Envelope(geom)) As " "envelopewkt\n" " FROM (SELECT 'POLYGON((0 0, 0 1000012333334.34545678, 1.0000001 1, " "1.0000001 0, 0 0))'::geometry As geom) As foo;\n" "\n" "" msgstr "" #. Tag: para #: reference_accessor.xml:302 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:308 #, no-c-format msgid "ST_ExteriorRing" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:310 #, no-c-format msgid "" "Returns a line string representing the exterior ring of the " "POLYGON geometry. Return NULL if the geometry is not a " "polygon. Will not work with MULTIPOLYGON" msgstr "" #. Tag: funcprototype #: reference_accessor.xml:316 #, no-c-format msgid "" "geometry ST_ExteriorRing " "geometry a_polygon" msgstr "" #. Tag: para #: reference_accessor.xml:327 #, no-c-format msgid "" "Returns a line string representing the exterior ring of the " "POLYGON geometry. Return NULL if the geometry is not a " "polygon." msgstr "" #. Tag: para #: reference_accessor.xml:330 #, no-c-format msgid "Only works with POLYGON geometry types" msgstr "" #. Tag: para #: reference_accessor.xml:332 reference_accessor.xml:712 #, no-c-format msgid "&sfs_compliant; 2.1.5.1" msgstr "" #. Tag: para #: reference_accessor.xml:333 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.2.3, 8.3.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:340 #, no-c-format msgid "" "--If you have a table of polygons\n" "SELECT gid, ST_ExteriorRing(the_geom) AS ering\n" "FROM sometable;\n" "\n" "--If you have a table of MULTIPOLYGONs\n" "--and want to return a MULTILINESTRING composed of the exterior rings of " "each polygon\n" "SELECT gid, ST_Collect(ST_ExteriorRing(the_geom)) AS erings\n" " FROM (SELECT gid, (ST_Dump(the_geom)).geom As the_geom\n" " FROM sometable) As foo\n" "GROUP BY gid;\n" "\n" "--3d Example\n" "SELECT ST_AsEWKT(\n" " ST_ExteriorRing(\n" " ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))')\n" " )\n" ");\n" "\n" "st_asewkt\n" "---------\n" "LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)" msgstr "" #. Tag: para #: reference_accessor.xml:346 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_accessor.xml:356 #, no-c-format msgid "ST_GeometryN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:358 #, no-c-format msgid "" "Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, " "(MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, " "POLYHEDRALSURFACE Otherwise, return NULL." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:365 #, no-c-format msgid "" "geometry ST_GeometryN " "geometry geomA " "integer n" msgstr "" #. Tag: para #: reference_accessor.xml:376 #, no-c-format msgid "" "Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, " "(MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, " "POLYHEDRALSURFACE Otherwise, return NULL" msgstr "" #. Tag: para #: reference_accessor.xml:381 reference_accessor.xml:1414 #, no-c-format msgid "" "Index is 1-based as for OGC specs since version 0.8.0. Previous versions " "implemented this as 0-based instead." msgstr "" #. Tag: para #: reference_accessor.xml:386 #, no-c-format msgid "" "If you want to extract all geometries, of a geometry, ST_Dump is more " "efficient and will also work for singular geoms." msgstr "" #. Tag: para #: reference_accessor.xml:389 #, no-c-format msgid "" "Changed: 2.0.0 Prior versions would return NULL for singular geometries. " "This was changed to return the geometry for ST_GeometryN(..,1) case." msgstr "" #. Tag: para #: reference_accessor.xml:391 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.1.5" msgstr "" #. Tag: title #: reference_accessor.xml:401 #, no-c-format msgid "Standard Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:403 #, no-c-format msgid "" "--Extracting a subset of points from a 3d multipoint\n" "SELECT n, ST_AsEWKT(ST_GeometryN(the_geom, n)) As geomewkt\n" "FROM (\n" "VALUES (ST_GeomFromEWKT('MULTIPOINT(1 2 7, 3 4 7, 5 6 7, 8 9 10)') ),\n" "( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 " "11, 12 11))') )\n" " )As foo(the_geom)\n" " CROSS JOIN generate_series(1,100) n\n" "WHERE n <= ST_NumGeometries(the_geom);\n" "\n" " n | geomewkt\n" "---+-----------------------------------------\n" " 1 | POINT(1 2 7)\n" " 2 | POINT(3 4 7)\n" " 3 | POINT(5 6 7)\n" " 4 | POINT(8 9 10)\n" " 1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)\n" " 2 | LINESTRING(10 11,12 11)\n" "\n" "\n" "--Extracting all geometries (useful when you want to assign an id)\n" "SELECT gid, n, ST_GeometryN(the_geom, n)\n" "FROM sometable CROSS JOIN generate_series(1,100) n\n" "WHERE n <= ST_NumGeometries(the_geom);" msgstr "" #. Tag: title #: reference_accessor.xml:406 #, no-c-format msgid "Polyhedral Surfaces, TIN and Triangle Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:407 #, no-c-format msgid "" "-- Polyhedral surface example\n" "-- Break a Polyhedral surface into its faces\n" "SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt\n" " FROM (SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE( \n" "((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), \n" "((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" "((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), \n" "((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) \n" ")') AS p_geom ) AS a;\n" "\n" " geom_ewkt\n" "------------------------------------------\n" " POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))" msgstr "" #. Tag: programlisting #: reference_accessor.xml:409 #, no-c-format msgid "" "-- TIN -- \n" "SELECT ST_AsEWKT(ST_GeometryN(geom,2)) as wkt\n" " FROM\n" " (SELECT \n" " ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') AS geom\n" " ) AS g;\n" "-- result --\n" " wkt\n" "-------------------------------------\n" " TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))" msgstr "" #. Tag: para #: reference_accessor.xml:416 reference_accessor.xml:1285 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:422 #, no-c-format msgid "ST_GeometryType" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:423 #, no-c-format msgid "Return the geometry type of the ST_Geometry value." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:428 #, no-c-format msgid "" "text ST_GeometryType " "geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:437 #, no-c-format msgid "" "Returns the type of the geometry as a string. EG: 'ST_Linestring', " "'ST_Polygon','ST_MultiPolygon' etc. This function differs from GeometryType" "(geometry) in the case of the string and ST in front that is returned, as " "well as the fact that it will not indicate whether the geometry is measured." msgstr "" #. Tag: para #: reference_accessor.xml:439 reference_accessor.xml:560 #: reference_accessor.xml:1071 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces was introduced." msgstr "" #. Tag: para #: reference_accessor.xml:440 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:449 #, no-c-format msgid "" "SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 " "29.26,77.27 29.31,77.29 29.07)'));\n" " --result\n" " ST_LineString" msgstr "" #. Tag: programlisting #: reference_accessor.xml:451 reference_accessor.xml:453 #, no-c-format msgid "" "SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 " "1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 " "1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 " "1, 0 1 1, 0 0 1)) )'));\n" " --result\n" " ST_PolyhedralSurface" msgstr "" #. Tag: programlisting #: reference_accessor.xml:455 #, no-c-format msgid "" "SELECT ST_GeometryType(geom) as result\n" " FROM\n" " (SELECT \n" " ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') AS geom\n" " ) AS g;\n" " result\n" "--------\n" " ST_Tin" msgstr "" #. Tag: refname #: reference_accessor.xml:468 #, no-c-format msgid "ST_InteriorRingN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:470 #, no-c-format msgid "" "Return the Nth interior linestring ring of the polygon geometry. Return NULL " "if the geometry is not a polygon or the given N is out of range." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:477 #, no-c-format msgid "" "geometry ST_InteriorRingN " "geometry a_polygon " "integer n" msgstr "" #. Tag: para #: reference_accessor.xml:488 #, no-c-format msgid "" "Return the Nth interior linestring ring of the polygon geometry. Return NULL " "if the geometry is not a polygon or the given N is out of range. index " "starts at 1." msgstr "" #. Tag: para #: reference_accessor.xml:494 #, no-c-format msgid "" "This will not work for MULTIPOLYGONs. Use in conjunction with ST_Dump for " "MULTIPOLYGONS" msgstr "" #. Tag: para #: reference_accessor.xml:498 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.2.6, 8.3.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:507 #, no-c-format msgid "" "SELECT ST_AsText(ST_InteriorRingN(the_geom, 1)) As the_geom\n" "FROM (SELECT ST_BuildArea(\n" " ST_Collect(ST_Buffer(ST_Point(1,2), 20,3),\n" " ST_Buffer(ST_Point(1, 2), 10,3))) As the_geom\n" " ) as foo" msgstr "" #. Tag: para #: reference_accessor.xml:514 #, no-c-format msgid "" ", , , ," msgstr "" #. Tag: refname #: reference_accessor.xml:527 #, no-c-format msgid "ST_IsClosed" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:529 #, no-c-format msgid "" "Returns TRUE if the LINESTRING's start " "and end points are coincident. For Polyhedral surface is closed (volumetric)." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:536 #, no-c-format msgid "" "boolean ST_IsClosed " "geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:547 #, no-c-format msgid "" "Returns TRUE if the LINESTRING's start " "and end points are coincident. For Polyhedral Surfaces, it tells you if the " "surface is areal (open) or volumetric (closed)." msgstr "" #. Tag: para #: reference_accessor.xml:551 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.5, 9.3.3" msgstr "" #. Tag: para #: reference_accessor.xml:553 #, no-c-format msgid "" "SQL-MM defines the result of ST_IsClosed(NULL) to be 0, while PostGIS returns NULL." msgstr "" #. Tag: title #: reference_accessor.xml:567 #, no-c-format msgid "Line String and Point Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:569 #, no-c-format msgid "" "postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);\n" " st_isclosed\n" "-------------\n" " f\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);\n" " st_isclosed\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 " "1))'::geometry);\n" " st_isclosed\n" "-------------\n" " f\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('POINT(0 0)'::geometry);\n" " st_isclosed\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);\n" " st_isclosed\n" "-------------\n" " t\n" "(1 row)" msgstr "" #. Tag: title #: reference_accessor.xml:573 #, no-c-format msgid "Polyhedral Surface Examples" msgstr "" #. Tag: programlisting #: reference_accessor.xml:575 #, no-c-format msgid "" "-- A cube --\n" " SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 " "0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 " "1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 " "1, 0 1 1, 0 0 1)) )'));\n" "\n" " st_isclosed\n" "-------------\n" " t\n" "\n" "\n" " -- Same as cube but missing a side --\n" " SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 " "1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 " "1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)) )'));\n" "\n" " st_isclosed\n" "-------------\n" " f" msgstr "" #. Tag: refname #: reference_accessor.xml:587 #, no-c-format msgid "ST_IsCollection" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:589 #, no-c-format msgid "" "Returns TRUE if the argument is a collection " "(MULTI*, GEOMETRYCOLLECTION, ...)" msgstr "" #. Tag: funcprototype #: reference_accessor.xml:596 #, no-c-format msgid "" "boolean ST_IsCollection " "geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:606 #, no-c-format msgid "" "Returns TRUE if the geometry type of the argument is " "either:" msgstr "" #. Tag: para #: reference_accessor.xml:609 #, no-c-format msgid "GEOMETRYCOLLECTION" msgstr "" #. Tag: para #: reference_accessor.xml:610 #, no-c-format msgid "MULTI{POINT,POLYGON,LINESTRING,CURVE,SURFACE}" msgstr "" #. Tag: para #: reference_accessor.xml:611 #, no-c-format msgid "COMPOUNDCURVE" msgstr "" #. Tag: para #: reference_accessor.xml:616 #, no-c-format msgid "" "This function analyzes the type of the geometry. This means that it will " "return TRUE on collections that are empty or that contain " "a single element." msgstr "" #. Tag: programlisting #: reference_accessor.xml:631 #, no-c-format msgid "" "postgis=# SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);\n" " st_iscollection\n" "-------------\n" " f\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)\n" "\n" "postgis=# SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::" "geometry);\n" " st_iscollection\n" "-------------\n" " t\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:643 #, no-c-format msgid "ST_IsEmpty" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:645 #, no-c-format msgid "" "Returns true if this Geometry is an empty geometrycollection, polygon, point " "etc." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:651 #, no-c-format msgid "" "boolean ST_IsEmpty " "geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:661 #, no-c-format msgid "" "Returns true if this Geometry is an empty geometry. If true, then this " "Geometry represents an empty geometry collection, polygon, point etc." msgstr "" #. Tag: para #: reference_accessor.xml:664 #, no-c-format msgid "" "SQL-MM defines the result of ST_IsEmpty(NULL) to be 0, while PostGIS returns " "NULL." msgstr "" #. Tag: para #: reference_accessor.xml:669 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.7" msgstr "" #. Tag: para #: reference_accessor.xml:671 #, no-c-format msgid "" "Changed: 2.0.0 In prior versions of PostGIS ST_GeomFromText" "('GEOMETRYCOLLECTION(EMPTY)') was allowed. This is now illegal in PostGIS " "2.0.0 to better conform with SQL/MM standards" msgstr "" #. Tag: programlisting #: reference_accessor.xml:679 #, no-c-format msgid "" "SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));\n" " st_isempty\n" "------------\n" " t\n" "(1 row)\n" "\n" " SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));\n" " st_isempty\n" "------------\n" " t\n" "(1 row)\n" "\n" "SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));\n" "\n" " st_isempty\n" "------------\n" " f\n" "(1 row)\n" "\n" " SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = " "false;\n" " ?column?\n" "----------\n" " t\n" "(1 row)\n" "\n" " SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY'));\n" " st_isempty\n" "------------\n" " t\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:686 #, no-c-format msgid "ST_IsRing" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:688 #, no-c-format msgid "" "Returns TRUE if this LINESTRING is " "both closed and simple." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:694 #, no-c-format msgid "" "boolean ST_IsRing " "geometry g" msgstr "" #. Tag: para #: reference_accessor.xml:705 #, no-c-format msgid "" "Returns TRUE if this LINESTRING is " "both (ST_StartPoint(g) ~= ST_Endpoint" "(g)) and " "(does not self intersect)." msgstr "" #. Tag: para #: reference_accessor.xml:713 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.6" msgstr "" #. Tag: para #: reference_accessor.xml:715 #, no-c-format msgid "" "SQL-MM defines the result of ST_IsRing(NULL) to be 0, while PostGIS returns NULL." msgstr "" #. Tag: programlisting #: reference_accessor.xml:724 #, no-c-format msgid "" "SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom)\n" "FROM (SELECT 'LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'::geometry AS the_geom) AS " "foo;\n" " st_isring | st_isclosed | st_issimple\n" "-----------+-------------+-------------\n" " t | t | t\n" "(1 row)\n" "\n" "SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom)\n" "FROM (SELECT 'LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)'::geometry AS the_geom) AS " "foo;\n" " st_isring | st_isclosed | st_issimple\n" "-----------+-------------+-------------\n" " f | t | f\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:730 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:738 #, no-c-format msgid "ST_IsSimple" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:740 #, no-c-format msgid "" "Returns (TRUE) if this Geometry has no anomalous geometric points, such as " "self intersection or self tangency." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:746 #, no-c-format msgid "" "boolean ST_IsSimple " "geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:756 #, no-c-format msgid "" "Returns true if this Geometry has no anomalous geometric points, such as " "self intersection or self tangency. For more information on the OGC's " "definition of geometry simplicity and validity, refer to \"Ensuring OpenGIS compliancy of geometries\"" msgstr "" #. Tag: para #: reference_accessor.xml:762 #, no-c-format msgid "" "SQL-MM defines the result of ST_IsSimple(NULL) to be 0, while PostGIS " "returns NULL." msgstr "" #. Tag: para #: reference_accessor.xml:767 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.8" msgstr "" #. Tag: programlisting #: reference_accessor.xml:775 #, no-c-format msgid "" "SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));\n" " st_issimple\n" "-------------\n" " t\n" "(1 row)\n" "\n" " SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 " "1)'));\n" " st_issimple\n" "-------------\n" " f\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:787 #, no-c-format msgid "ST_IsValid" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:789 #, no-c-format msgid "" "Returns true if the ST_Geometry is " "well formed." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:795 #, no-c-format msgid "" " boolean ST_IsValid " "geometry g boolean ST_IsValid geometry g integer flags " msgstr "" #. Tag: para #: reference_accessor.xml:813 #, no-c-format msgid "" "Test if an ST_Geometry value is well formed. For geometries that are " "invalid, the PostgreSQL NOTICE will provide details of why it is not valid. " "For more information on the OGC's definition of geometry simplicity and " "validity, refer to \"Ensuring OpenGIS " "compliancy of geometries\"" msgstr "" #. Tag: para #: reference_accessor.xml:819 #, no-c-format msgid "" "SQL-MM defines the result of ST_IsValid(NULL) to be 0, while PostGIS returns " "NULL." msgstr "" #. Tag: para #: reference_accessor.xml:823 #, no-c-format msgid "" "The version accepting flags is available starting with 2.0.0 and requires " "GEOS >= 3.3.0. Such version does not print a NOTICE explaining the " "invalidity. Allowed flags are documented in ." msgstr "" #. Tag: para #: reference_accessor.xml:831 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.9" msgstr "" #. Tag: programlisting #: reference_accessor.xml:839 #, no-c-format msgid "" "SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line,\n" " ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) As " "bad_poly\n" "--results\n" "NOTICE: Self-intersection at or near point 0 0\n" " good_line | bad_poly\n" "-----------+----------\n" " t | f" msgstr "" #. Tag: para #: reference_accessor.xml:845 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:856 #, no-c-format msgid "ST_IsValidReason" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:858 #, no-c-format msgid "" "Returns text stating if a geometry is valid or not and if not valid, a " "reason why." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:862 #, no-c-format msgid "" " text ST_IsValidReason geometry geomA text " "ST_IsValidReason geometry geomA integer flags " msgstr "" #. Tag: para #: reference_accessor.xml:878 #, no-c-format msgid "" "Returns text stating if a geometry is valid or not an if not valid, a reason " "why." msgstr "" #. Tag: para #: reference_accessor.xml:880 #, no-c-format msgid "" "Useful in combination with ST_IsValid to generate a detailed report of " "invalid geometries and reasons." msgstr "" #. Tag: para #: reference_accessor.xml:882 #, no-c-format msgid "" "Allowed flags are documented in ." msgstr "" #. Tag: para #: reference_accessor.xml:886 #, no-c-format msgid "Availability: 1.4 - requires GEOS >= 3.1.0." msgstr "" #. Tag: para #: reference_accessor.xml:887 #, no-c-format msgid "" "Availability: 2.0 - requires GEOS >= 3.3.0 for the version taking flags." msgstr "" #. Tag: programlisting #: reference_accessor.xml:895 #, no-c-format msgid "" "--First 3 Rejects from a successful quintuplet experiment\n" "SELECT gid, ST_IsValidReason(the_geom) as validity_info\n" "FROM\n" "(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), ST_Accum(f.line)) As " "the_geom, gid\n" "FROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + " "z1*1000 As gid\n" " FROM generate_series(-4,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,8) z1\n" " WHERE x1 > y1*0.5 AND z1 < x1*y1) As e\n" " INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer" "(ST_MakePoint(x1*10,y1), z1)),y1*1, z1*2) As line\n" " FROM generate_series(-3,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,10) z1\n" " WHERE x1 > y1*0.75 AND z1 < x1*y1) As f\n" "ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))\n" "GROUP BY gid, e.buff) As quintuplet_experiment\n" "WHERE ST_IsValid(the_geom) = false\n" "ORDER BY gid\n" "LIMIT 3;\n" "\n" " gid | validity_info\n" "------+--------------------------\n" " 5330 | Self-intersection [32 5]\n" " 5340 | Self-intersection [42 5]\n" " 5350 | Self-intersection [52 5]\n" "\n" " --simple example\n" "SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 " "150410)');\n" "\n" " st_isvalidreason\n" "------------------\n" " Valid Geometry" msgstr "" #. Tag: para #: reference_accessor.xml:902 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:908 #, no-c-format msgid "ST_IsValidDetail" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:910 #, no-c-format msgid "" "Returns a valid_detail (valid,reason,location) row stating if a geometry is " "valid or not and if not valid, a reason why and a location where." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:914 #, no-c-format msgid "" " valid_detail ST_IsValidDetail geometry geom valid_detail " "ST_IsValidDetail geometry geom integer " "flags " msgstr "" #. Tag: para #: reference_accessor.xml:930 #, no-c-format msgid "" "Returns a valid_detail row, formed by a boolean (valid) stating if a " "geometry is valid, a varchar (reason) stating a reason why it is invalid and " "a geometry (location) pointing out where it is invalid." msgstr "" #. Tag: para #: reference_accessor.xml:932 #, no-c-format msgid "" "Useful to substitute and improve the combination of ST_IsValid and " "ST_IsValidReason to generate a detailed report of invalid geometries." msgstr "" #. Tag: para #: reference_accessor.xml:934 #, no-c-format msgid "The 'flags' argument is a bitfield. It can have the following values:" msgstr "" #. Tag: para #: reference_accessor.xml:938 #, no-c-format msgid "" "1: Consider self-intersecting rings forming holes as valid. This is also " "know as \"the ESRI flag\". Note that this is against the OGC model." msgstr "" #. Tag: para #: reference_accessor.xml:947 #, no-c-format msgid "Availability: 2.0.0 - requires GEOS >= 3.3.0." msgstr "" #. Tag: programlisting #: reference_accessor.xml:955 #, no-c-format msgid "" "--First 3 Rejects from a successful quintuplet experiment\n" "SELECT gid, reason(ST_IsValidDetail(the_geom)), ST_AsText(location" "(ST_IsValidDetail(the_geom))) as location \n" "FROM\n" "(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), ST_Accum(f.line)) As " "the_geom, gid\n" "FROM (SELECT ST_Buffer(ST_MakePoint(x1*10,y1), z1) As buff, x1*10 + y1*100 + " "z1*1000 As gid\n" " FROM generate_series(-4,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,8) z1\n" " WHERE x1 > y1*0.5 AND z1 < x1*y1) As e\n" " INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer" "(ST_MakePoint(x1*10,y1), z1)),y1*1, z1*2) As line\n" " FROM generate_series(-3,6) x1\n" " CROSS JOIN generate_series(2,5) y1\n" " CROSS JOIN generate_series(1,10) z1\n" " WHERE x1 > y1*0.75 AND z1 < x1*y1) As f\n" "ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))\n" "GROUP BY gid, e.buff) As quintuplet_experiment\n" "WHERE ST_IsValid(the_geom) = false\n" "ORDER BY gid\n" "LIMIT 3;\n" "\n" " gid | reason | location\n" "------+-------------------+-------------\n" " 5330 | Self-intersection | POINT(32 5)\n" " 5340 | Self-intersection | POINT(42 5)\n" " 5350 | Self-intersection | POINT(52 5)\n" "\n" " --simple example\n" "SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 " "150407,222020 150410)');\n" "\n" " valid | reason | location\n" "-------+--------+----------\n" " t | |" msgstr "" #. Tag: para #: reference_accessor.xml:962 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:971 #, no-c-format msgid "ST_M" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:973 #, no-c-format msgid "" "Return the M coordinate of the point, or NULL if not available. " "Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:979 #, no-c-format msgid "" "float ST_M geometry " " a_point" msgstr "" #. Tag: para #: reference_accessor.xml:989 #, no-c-format msgid "" "Return the M coordinate of the point, or NULL if not available. Input " "must be a point." msgstr "" #. Tag: para #: reference_accessor.xml:993 #, no-c-format msgid "" "This is not (yet) part of the OGC spec, but is listed here to complete the " "point coordinate extractor function list." msgstr "" #. Tag: para #: reference_accessor.xml:997 reference_accessor.xml:1892 #, no-c-format msgid "&sqlmm_compliant;" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1005 #, no-c-format msgid "" "SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_m\n" "------\n" " 4\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1012 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1018 #, no-c-format msgid "ST_NDims" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1019 #, no-c-format msgid "" "Returns coordinate dimension of the geometry as a small int. Values are: 2,3 " "or 4." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1025 #, no-c-format msgid "" "integer ST_NDims " "geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1035 #, no-c-format msgid "" "Returns the coordinate dimension of the geometry. PostGIS supports 2 - (x," "y) , 3 - (x,y,z) or 2D with measure - x,y,m, and 4 - 3D with measure space x," "y,z,m" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1044 #, no-c-format msgid "" "SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,\n" " ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,\n" " ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;\n" "\n" " d2point | d3point | d2pointm\n" "---------+---------+----------\n" " 2 | 3 | 3" msgstr "" #. Tag: para #: reference_accessor.xml:1048 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_accessor.xml:1054 #, no-c-format msgid "ST_NPoints" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1055 #, no-c-format msgid "Return the number of points (vertexes) in a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1060 #, no-c-format msgid "" "integer ST_NPoints " "geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1070 #, no-c-format msgid "Return the number of points in a geometry. Works for all geometries." msgstr "" #. Tag: para #: reference_accessor.xml:1072 #, no-c-format msgid "" "Prior to 1.3.4, this function crashes if used with geometries that contain " "CURVES. This is fixed in 1.3.4+" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1082 #, no-c-format msgid "" "SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 " "29.31,77.29 29.07)'));\n" "--result\n" "4\n" "\n" "--Polygon in 3D space\n" "SELECT ST_NPoints(ST_GeomFromEWKT('LINESTRING(77.29 29.07 1,77.42 29.26 " "0,77.27 29.31 -1,77.29 29.07 3)'))\n" "--result\n" "4" msgstr "" #. Tag: refname #: reference_accessor.xml:1093 #, no-c-format msgid "ST_NRings" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1094 #, no-c-format msgid "" "If the geometry is a polygon or multi-polygon returns the number of rings." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1099 #, no-c-format msgid "" "integer ST_NRings " "geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:1109 #, no-c-format msgid "" "If the geometry is a polygon or multi-polygon returns the number of rings. " "Unlike NumInteriorRings, it counts the outer rings as well." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1119 #, no-c-format msgid "" "SELECT ST_NRings(the_geom) As Nrings, ST_NumInteriorRings(the_geom) As " "ninterrings\n" " FROM (SELECT ST_GeomFromText('POLYGON" "((1 2, 3 4, 5 6, 1 2))') As the_geom) As foo;\n" " nrings | ninterrings\n" "--------+-------------\n" " 1 | 0\n" "(1 row)" msgstr "" #. Tag: refname #: reference_accessor.xml:1132 #, no-c-format msgid "ST_NumGeometries" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1133 #, no-c-format msgid "" "If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of " "geometries, for single geometries will return 1, otherwise return NULL." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1139 #, no-c-format msgid "" "integer ST_NumGeometries " "geometry geom" msgstr "" #. Tag: para #: reference_accessor.xml:1149 #, no-c-format msgid "" "Returns the number of Geometries. If geometry is a GEOMETRYCOLLECTION (or " "MULTI*) return the number of geometries, for single geometries will return " "1, otherwise return NULL." msgstr "" #. Tag: para #: reference_accessor.xml:1153 #, no-c-format msgid "" "Changed: 2.0.0 In prior versions this would return NULL if the geometry was " "not a collection/MULTI type. 2.0.0+ now returns 1 for single geometries e.g " "POLYGON, LINESTRING, POINT." msgstr "" #. Tag: para #: reference_accessor.xml:1155 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.1.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1165 #, no-c-format msgid "" "--Prior versions would have returned NULL for this -- in 2.0.0 this returns " "1\n" "SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 " "29.26,77.27 29.31,77.29 29.07)'));\n" "--result\n" "1\n" "\n" "--Geometry Collection Example - multis count as one geom in a collection\n" "SELECT ST_NumGeometries(ST_GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT(-2 " "3 , -2 2),\n" "LINESTRING(5 5 ,10 10),\n" "POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))'));\n" "--result\n" "3" msgstr "" #. Tag: para #: reference_accessor.xml:1170 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:1176 #, no-c-format msgid "ST_NumInteriorRings" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1177 #, no-c-format msgid "" "Return the number of interior rings of the first polygon in the " "geometry. This will work with both POLYGON and MULTIPOLYGON types but only " "looks at the first polygon. Return NULL if there is no polygon in the " "geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1185 #, no-c-format msgid "" "integer ST_NumInteriorRings " "geometry a_polygon" msgstr "" #. Tag: para #: reference_accessor.xml:1195 #, no-c-format msgid "" "Return the number of interior rings of the first polygon in the " "geometry. This will work with both POLYGON and MULTIPOLYGON types but only " "looks at the first polygon. Return NULL if there is no polygon in the " "geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1200 reference_accessor.xml:1239 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.2.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1206 #, no-c-format msgid "" "--If you have a regular polygon\n" "SELECT gid, field1, field2, ST_NumInteriorRings(the_geom) AS numholes\n" "FROM sometable;\n" "\n" "--If you have multipolygons\n" "--And you want to know the total number of interior rings in the " "MULTIPOLYGON\n" "SELECT gid, field1, field2, SUM(ST_NumInteriorRings(the_geom)) AS numholes\n" "FROM (SELECT gid, field1, field2, (ST_Dump(the_geom)).geom As the_geom\n" " FROM sometable) As foo\n" "GROUP BY gid, field1,field2;" msgstr "" #. Tag: refname #: reference_accessor.xml:1217 #, no-c-format msgid "ST_NumInteriorRing" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1218 #, no-c-format msgid "" "Return the number of interior rings of the first polygon in the geometry. " "Synonym to ST_NumInteriorRings." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1224 #, no-c-format msgid "" "integer ST_NumInteriorRing " "geometry a_polygon" msgstr "" #. Tag: para #: reference_accessor.xml:1234 #, no-c-format msgid "" "Return the number of interior rings of the first polygon in the geometry. " "Synonym to ST_NumInteriorRings. The OpenGIS specs are ambiguous about the " "exact function naming, so we provide both spellings." msgstr "" #. Tag: refname #: reference_accessor.xml:1251 #, no-c-format msgid "ST_NumPatches" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1252 #, no-c-format msgid "" "Return the number of faces on a Polyhedral Surface. Will return null for non-" "polyhedral geometries." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1257 #, no-c-format msgid "" "integer ST_NumPatches " "geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1267 #, no-c-format msgid "" "Return the number of faces on a Polyhedral Surface. Will return null for non-" "polyhedral geometries. This is an alias for ST_NumGeometries to support MM " "naming. Faster to use ST_NumGeometries if you don't care about MM convention." msgstr "" #. Tag: para #: reference_accessor.xml:1270 reference_accessor.xml:1365 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: para #: reference_accessor.xml:1273 reference_accessor.xml:1366 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: ?" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1280 #, no-c-format msgid "" "SELECT ST_NumPatches(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 " "1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 " "1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 " "1, 0 1 1, 0 0 1)) )'));\n" " --result\n" " 6" msgstr "" #. Tag: refname #: reference_accessor.xml:1291 #, no-c-format msgid "ST_NumPoints" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1292 #, no-c-format msgid "" "Return the number of points in an ST_LineString or ST_CircularString value." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1298 #, no-c-format msgid "" "integer ST_NumPoints " "geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1308 #, no-c-format msgid "" "Return the number of points in an ST_LineString or ST_CircularString value. " "Prior to 1.4 only works with Linestrings as the specs state. From 1.4 " "forward this is an alias for ST_NPoints which returns number of vertexes for " "not just line strings. Consider using ST_NPoints instead which is multi-" "purpose and works with many geometry types." msgstr "" #. Tag: para #: reference_accessor.xml:1315 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1321 #, no-c-format msgid "" "SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 " "29.26,77.27 29.31,77.29 29.07)'));\n" " --result\n" " 4" msgstr "" #. Tag: refname #: reference_accessor.xml:1332 #, no-c-format msgid "ST_PatchN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1334 #, no-c-format msgid "" "Return the 1-based Nth geometry (face) if the geometry is a " "POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise, return NULL." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1341 #, no-c-format msgid "" "geometry ST_PatchN " "geometry geomA " "integer n" msgstr "" #. Tag: para #: reference_accessor.xml:1352 #, no-c-format msgid "" ">Return the 1-based Nth geometry (face) if the geometry is a " "POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise, return NULL. This returns " "the same answer as ST_GeometryN for Polyhedral Surfaces. Using ST_GemoetryN " "is faster." msgstr "" #. Tag: para #: reference_accessor.xml:1358 #, no-c-format msgid "Index is 1-based." msgstr "" #. Tag: para #: reference_accessor.xml:1362 #, no-c-format msgid "" "If you want to extract all geometries, of a geometry, ST_Dump is more " "efficient." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1376 #, no-c-format msgid "" "--Extract the 2nd face of the polyhedral surface\n" "SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt\n" "FROM (\n" "VALUES (ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 " "0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, " "0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, " "0 0 1)) )')) ) As foo(geom);\n" "\n" " geomewkt\n" "---+-----------------------------------------\n" " POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))" msgstr "" #. Tag: para #: reference_accessor.xml:1383 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1389 #, no-c-format msgid "ST_PointN" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1391 #, no-c-format msgid "" "Return the Nth point in the first linestring or circular " "linestring in the geometry. Return NULL if there is no linestring in the " "geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1398 #, no-c-format msgid "" "geometry ST_PointN " "geometry a_linestring integer n" msgstr "" #. Tag: para #: reference_accessor.xml:1409 #, no-c-format msgid "" "Return the Nth point in the first linestring or circular linestring in " "the geometry. Return NULL if there is no linestring in the geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1419 #, no-c-format msgid "" "If you want to get the nth point of each line string in a multilinestring, " "use in conjunction with ST_Dump" msgstr "" #. Tag: para #: reference_accessor.xml:1424 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.5, 7.3.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1434 #, no-c-format msgid "" "-- Extract all POINTs from a LINESTRING\n" "SELECT ST_AsText(\n" " ST_PointN(\n" " column1,\n" " generate_series(1, ST_NPoints(column1))\n" " ))\n" "FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo;\n" "\n" " st_astext\n" "------------\n" " POINT(0 0)\n" " POINT(1 1)\n" " POINT(2 2)\n" "(3 rows)\n" "\n" "--Example circular string\n" "SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 " "2)'),2));\n" "\n" "st_astext\n" "----------\n" "POINT(3 2)" msgstr "" #. Tag: refname #: reference_accessor.xml:1446 #, no-c-format msgid "ST_SRID" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1447 #, no-c-format msgid "" "Returns the spatial reference identifier for the ST_Geometry as defined in " "spatial_ref_sys table." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1452 #, no-c-format msgid "" "integer ST_SRID " "geometry g1" msgstr "" #. Tag: para #: reference_accessor.xml:1462 #, no-c-format msgid "" "Returns the spatial reference identifier for the ST_Geometry as defined in " "spatial_ref_sys table. " msgstr "" #. Tag: para #: reference_accessor.xml:1463 #, no-c-format msgid "" "spatial_ref_sys table is a table that catalogs all spatial reference systems " "known to PostGIS and is used for transformations from one spatial reference " "system to another. So verifying you have the right spatial reference system " "identifier is important if you plan to ever transform your geometries." msgstr "" #. Tag: para #: reference_accessor.xml:1467 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.5" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1475 #, no-c-format msgid "" "SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));\n" " --result\n" " 4326" msgstr "" #. Tag: para #: reference_accessor.xml:1480 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1486 #, no-c-format msgid "ST_StartPoint" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1488 #, no-c-format msgid "" "Returns the first point of a LINESTRING geometry as a " "POINT." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1494 #, no-c-format msgid "" "geometry ST_StartPoint " "geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:1505 #, no-c-format msgid "" "Returns the first point of a LINESTRING geometry as a " "POINT or NULL if the input parameter " "is not a LINESTRING." msgstr "" #. Tag: para #: reference_accessor.xml:1509 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1522 #, no-c-format msgid "" "SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));\n" " st_astext\n" "------------\n" " POINT(0 1)\n" "(1 row)\n" "\n" "SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null;\n" " is_null\n" "----------\n" " t\n" "(1 row)\n" "\n" "--3d line\n" "SELECT ST_AsEWKT(ST_StartPoint('LINESTRING(0 1 1, 0 2 2)'::geometry));\n" " st_asewkt\n" "------------\n" " POINT(0 1 1)\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1528 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_accessor.xml:1533 #, no-c-format msgid "ST_Summary" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1535 #, no-c-format msgid "" "Returns a text summary of the contents of the geometry." msgstr "" #. Tag: funcsynopsis #: reference_accessor.xml:1541 #, no-c-format msgid "" " text ST_Summary " "geometry g text ST_Summary geography g " msgstr "" #. Tag: para #: reference_accessor.xml:1556 #, no-c-format msgid "Returns a text summary of the contents of the geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1558 #, no-c-format msgid "" "Flags shown square brackets after the geometry type have the following " "meaning:" msgstr "" #. Tag: para #: reference_accessor.xml:1562 #, no-c-format msgid "M: has M ordinate" msgstr "" #. Tag: para #: reference_accessor.xml:1563 #, no-c-format msgid "Z: has Z ordinate" msgstr "" #. Tag: para #: reference_accessor.xml:1564 #, no-c-format msgid "B: has a cached bounding box" msgstr "" #. Tag: para #: reference_accessor.xml:1565 #, no-c-format msgid "G: is geodetic (geography)" msgstr "" #. Tag: para #: reference_accessor.xml:1569 #, no-c-format msgid "Availability: 1.2.2 - 2.0.0 added support for geography" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1576 #, no-c-format msgid "" "=# SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom,\n" " ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) " "geog;\n" " geom | geog \n" "-----------------------------+--------------------------\n" " LineString[B] with 2 points | Polygon[BG] with 1 rings\n" " : ring 0 has 5 points\n" " :\n" "(1 row)\n" "\n" "\n" "=# SELECT ST_Summary(ST_GeogFromText('LINESTRING(0 0 1, 1 1 1)')) As " "geog_line,\n" " ST_Summary(ST_GeomFromText('POLYGON((0 0 1, 1 1 2, 1 2 3, 1 1 1, 0 0 " "1))')) As geom_poly;\n" ";\n" " geog_line | geom_poly\n" "-------------------------------+--------------------------\n" " LineString[ZBG] with 2 points | Polygon[ZB] with 1 rings\n" " : ring 0 has 5 points\n" " :\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1582 #, no-c-format msgid "" ", , , " ", , " msgstr "" #. Tag: para #: reference_accessor.xml:1591 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: reference_accessor.xml:1602 #, no-c-format msgid "ST_X" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1604 #, no-c-format msgid "" "Return the X coordinate of the point, or NULL if not available. " "Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1610 #, no-c-format msgid "" "float ST_X geometry " " a_point" msgstr "" #. Tag: para #: reference_accessor.xml:1620 #, no-c-format msgid "" "Return the X coordinate of the point, or NULL if not available. Input " "must be a point." msgstr "" #. Tag: para #: reference_accessor.xml:1623 #, no-c-format msgid "" "If you want to get the max min x values of any geometry look at ST_XMin, " "ST_XMax functions." msgstr "" #. Tag: para #: reference_accessor.xml:1625 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.3" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1633 #, no-c-format msgid "" "SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_x\n" "------\n" " 1\n" "(1 row)\n" "\n" "SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));\n" " st_y\n" "------\n" " 1.5\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1640 #, no-c-format msgid "" ", , , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1646 #, no-c-format msgid "ST_XMax" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1648 #, no-c-format msgid "" "Returns X maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1653 #, no-c-format msgid "" "float ST_XMax box3d " " aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1663 #, no-c-format msgid "Returns X maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: para #: reference_accessor.xml:1666 reference_accessor.xml:1711 #: reference_accessor.xml:1799 reference_accessor.xml:1844 #: reference_accessor.xml:1932 reference_accessor.xml:2019 #, no-c-format msgid "" "Although this function is only defined for box3d, it will work for box2d and " "geometry because of the auto-casting behavior defined for geometries and " "box2d. However you can not feed it a geometry or box2d text representation, " "since that will not auto-cast." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1678 #, no-c-format msgid "" "SELECT ST_XMax('BOX3D(1 2 3, 4 5 6)');\n" "st_xmax\n" "-------\n" "4\n" "\n" "SELECT ST_XMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_xmax\n" "-------\n" "5\n" "\n" "SELECT ST_XMax(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_xmax\n" "-------\n" "3\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string " "representation to a BOX3D\n" "SELECT ST_XMax('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_XMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 " "2,220227 150406 3)'));\n" "st_xmax\n" "--------\n" "220288.248780547" msgstr "" #. Tag: para #: reference_accessor.xml:1685 reference_accessor.xml:1730 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1691 #, no-c-format msgid "ST_XMin" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1693 #, no-c-format msgid "" "Returns X minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1698 #, no-c-format msgid "" "float ST_XMin box3d " " aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1708 #, no-c-format msgid "Returns X minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1723 #, no-c-format msgid "" "SELECT ST_XMin('BOX3D(1 2 3, 4 5 6)');\n" "st_xmin\n" "-------\n" "1\n" "\n" "SELECT ST_XMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_xmin\n" "-------\n" "1\n" "\n" "SELECT ST_XMin(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_xmin\n" "-------\n" "-3\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string " "representation to a BOX3D\n" "SELECT ST_XMin('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_XMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 " "2,220227 150406 3)'));\n" "st_xmin\n" "--------\n" "220186.995121892" msgstr "" #. Tag: refname #: reference_accessor.xml:1736 #, no-c-format msgid "ST_Y" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1738 #, no-c-format msgid "" "Return the Y coordinate of the point, or NULL if not available. " "Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1744 #, no-c-format msgid "" "float ST_Y geometry " " a_point" msgstr "" #. Tag: para #: reference_accessor.xml:1754 #, no-c-format msgid "" "Return the Y coordinate of the point, or NULL if not available. Input " "must be a point." msgstr "" #. Tag: para #: reference_accessor.xml:1758 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.4" msgstr "" #. Tag: programlisting #: reference_accessor.xml:1766 #, no-c-format msgid "" "SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_y\n" "------\n" " 2\n" "(1 row)\n" "\n" "SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));\n" " st_y\n" "------\n" " 1.5\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1773 #, no-c-format msgid "" ", , , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1779 #, no-c-format msgid "ST_YMax" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1781 #, no-c-format msgid "" "Returns Y maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1786 #, no-c-format msgid "" "float ST_YMax box3d " " aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1796 #, no-c-format msgid "Returns Y maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1811 #, no-c-format msgid "" "SELECT ST_YMax('BOX3D(1 2 3, 4 5 6)');\n" "st_ymax\n" "-------\n" "5\n" "\n" "SELECT ST_YMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_ymax\n" "-------\n" "6\n" "\n" "SELECT ST_YMax(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_ymax\n" "-------\n" "4\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string " "representation to a BOX3D\n" "SELECT ST_YMax('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_YMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 " "2,220227 150406 3)'));\n" "st_ymax\n" "--------\n" "150506.126829327" msgstr "" #. Tag: para #: reference_accessor.xml:1818 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1824 #, no-c-format msgid "ST_YMin" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1826 #, no-c-format msgid "" "Returns Y minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1831 #, no-c-format msgid "" "float ST_YMin box3d " " aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1841 #, no-c-format msgid "Returns Y minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1856 #, no-c-format msgid "" "SELECT ST_YMin('BOX3D(1 2 3, 4 5 6)');\n" "st_ymin\n" "-------\n" "2\n" "\n" "SELECT ST_YMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));\n" "st_ymin\n" "-------\n" "3\n" "\n" "SELECT ST_YMin(CAST('BOX(-3 2, 3 4)' As box2d));\n" "st_ymin\n" "-------\n" "2\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string " "representation to a BOX3D\n" "SELECT ST_YMin('LINESTRING(1 3, 5 6)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_YMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 " "2,220227 150406 3)'));\n" "st_ymin\n" "--------\n" "150406" msgstr "" #. Tag: para #: reference_accessor.xml:1863 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1869 #, no-c-format msgid "ST_Z" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1871 #, no-c-format msgid "" "Return the Z coordinate of the point, or NULL if not available. " "Input must be a point." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1877 #, no-c-format msgid "" "float ST_Z geometry " " a_point" msgstr "" #. Tag: para #: reference_accessor.xml:1887 #, no-c-format msgid "" "Return the Z coordinate of the point, or NULL if not available. Input " "must be a point." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1899 #, no-c-format msgid "" "SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_z\n" "------\n" " 3\n" "(1 row)" msgstr "" #. Tag: para #: reference_accessor.xml:1906 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1912 #, no-c-format msgid "ST_ZMax" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1914 reference_accessor.xml:2001 #, no-c-format msgid "" "Returns Z minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1919 #, no-c-format msgid "" "float ST_ZMax box3d " " aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:1929 #, no-c-format msgid "Returns Z maxima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1944 #, no-c-format msgid "" "SELECT ST_ZMax('BOX3D(1 2 3, 4 5 6)');\n" "st_zmax\n" "-------\n" "6\n" "\n" "SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));\n" "st_zmax\n" "-------\n" "7\n" "\n" "SELECT ST_ZMax('BOX3D(-3 2 1, 3 4 1)' );\n" "st_zmax\n" "-------\n" "1\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string " "representation to a BOX3D\n" "SELECT ST_ZMax('LINESTRING(1 3 4, 5 6 7)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_ZMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 " "2,220227 150406 3)'));\n" "st_zmax\n" "--------\n" "3" msgstr "" #. Tag: para #: reference_accessor.xml:1951 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_accessor.xml:1957 #, no-c-format msgid "ST_Zmflag" msgstr "" #. Tag: refpurpose #: reference_accessor.xml:1959 #, no-c-format msgid "" "Returns ZM (dimension semantic) flag of the geometries as a " "small int. Values are: 0=2d, 1=3dm, 2=3dz, 3=4d." msgstr "" #. Tag: funcprototype #: reference_accessor.xml:1965 #, no-c-format msgid "" "smallint ST_Zmflag " "geometry geomA" msgstr "" #. Tag: para #: reference_accessor.xml:1975 #, no-c-format msgid "" "Returns ZM (dimension semantic) flag of the geometries as a small int. " "Values are: 0=2d, 1=3dm, 2=3dz, 3=4d." msgstr "" #. Tag: programlisting #: reference_accessor.xml:1986 #, no-c-format msgid "" "SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));\n" " st_zmflag\n" "-----------\n" " 0\n" "\n" "SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));\n" " st_zmflag\n" "-----------\n" " 1\n" "\n" "SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));\n" " st_zmflag\n" "-----------\n" " 2\n" "SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)'));\n" " st_zmflag\n" "-----------\n" " 3" msgstr "" #. Tag: para #: reference_accessor.xml:1993 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_accessor.xml:1999 #, no-c-format msgid "ST_ZMin" msgstr "" #. Tag: funcprototype #: reference_accessor.xml:2006 #, no-c-format msgid "" "float ST_ZMin box3d " " aGeomorBox2DorBox3D" msgstr "" #. Tag: para #: reference_accessor.xml:2016 #, no-c-format msgid "Returns Z minima of a bounding box 2d or 3d or a geometry." msgstr "" #. Tag: programlisting #: reference_accessor.xml:2031 #, no-c-format msgid "" "SELECT ST_ZMin('BOX3D(1 2 3, 4 5 6)');\n" "st_zmin\n" "-------\n" "3\n" "\n" "SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));\n" "st_zmin\n" "-------\n" "4\n" "\n" "SELECT ST_ZMin('BOX3D(-3 2 1, 3 4 1)' );\n" "st_zmin\n" "-------\n" "1\n" "--Observe THIS DOES NOT WORK because it will try to autocast the string " "representation to a BOX3D\n" "SELECT ST_ZMin('LINESTRING(1 3 4, 5 6 7)');\n" "\n" "--ERROR: BOX3D parser - doesnt start with BOX3D(\n" "\n" "SELECT ST_ZMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 " "2,220227 150406 3)'));\n" "st_zmin\n" "--------\n" "1" msgstr "" #. Tag: para #: reference_accessor.xml:2038 #, no-c-format msgid "" ", , , , , , " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_constructor.xml.po0000644000000000000000000025306512025614072023525 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_constructor.xml:3 #, no-c-format msgid "Geometry Constructors" msgstr "" #. Tag: refname #: reference_constructor.xml:6 #, no-c-format msgid "ST_BdPolyFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:8 #, no-c-format msgid "" "Construct a Polygon given an arbitrary collection of closed " "linestrings as a MultiLineString Well-Known text representation." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:14 #, no-c-format msgid "" "geometry ST_BdPolyFromText " "text WKT " "integer srid" msgstr "" #. Tag: title #: reference_constructor.xml:23 reference_constructor.xml:72 #: reference_constructor.xml:119 reference_constructor.xml:148 #: reference_constructor.xml:175 reference_constructor.xml:227 #: reference_constructor.xml:278 reference_constructor.xml:326 #: reference_constructor.xml:369 reference_constructor.xml:400 #: reference_constructor.xml:474 reference_constructor.xml:513 #: reference_constructor.xml:564 reference_constructor.xml:596 #: reference_constructor.xml:649 reference_constructor.xml:695 #: reference_constructor.xml:740 reference_constructor.xml:799 #: reference_constructor.xml:867 reference_constructor.xml:927 #: reference_constructor.xml:966 reference_constructor.xml:1023 #: reference_constructor.xml:1094 reference_constructor.xml:1139 #: reference_constructor.xml:1220 reference_constructor.xml:1263 #: reference_constructor.xml:1305 reference_constructor.xml:1366 #: reference_constructor.xml:1427 reference_constructor.xml:1481 #: reference_constructor.xml:1535 reference_constructor.xml:1591 #: reference_constructor.xml:1640 reference_constructor.xml:1694 #: reference_constructor.xml:1737 reference_constructor.xml:1760 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_constructor.xml:25 #, no-c-format msgid "" "Construct a Polygon given an arbitrary collection of closed " "linestrings as a MultiLineString Well-Known text representation." msgstr "" #. Tag: para #: reference_constructor.xml:30 #, no-c-format msgid "" "Throws an error if WKT is not a MULTILINESTRING. Throws an error if output " "is a MULTIPOLYGON; use ST_BdMPolyFromText in that case, or see ST_BuildArea" "() for a postgis-specific approach." msgstr "" #. Tag: para #: reference_constructor.xml:36 reference_constructor.xml:88 #: reference_constructor.xml:241 reference_constructor.xml:756 #: reference_constructor.xml:824 reference_constructor.xml:890 #: reference_constructor.xml:1321 reference_constructor.xml:1443 #: reference_constructor.xml:1705 #, no-c-format msgid "&sfs_compliant; s3.2.6.2" msgstr "" #. Tag: para #: reference_constructor.xml:38 reference_constructor.xml:90 #, no-c-format msgid "Availability: 1.1.0 - requires GEOS >= 2.1.0." msgstr "" #. Tag: title #: reference_constructor.xml:42 reference_constructor.xml:94 #: reference_constructor.xml:125 reference_constructor.xml:190 #: reference_constructor.xml:248 reference_constructor.xml:292 #: reference_constructor.xml:340 reference_constructor.xml:485 #: reference_constructor.xml:617 reference_constructor.xml:665 #: reference_constructor.xml:703 reference_constructor.xml:763 #: reference_constructor.xml:831 reference_constructor.xml:895 #: reference_constructor.xml:935 reference_constructor.xml:982 #: reference_constructor.xml:1235 reference_constructor.xml:1270 #: reference_constructor.xml:1328 reference_constructor.xml:1389 #: reference_constructor.xml:1450 reference_constructor.xml:1559 #: reference_constructor.xml:1609 reference_constructor.xml:1658 #: reference_constructor.xml:1710 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_constructor.xml:44 reference_constructor.xml:96 #, no-c-format msgid "Forthcoming" msgstr "" #. Tag: title #: reference_constructor.xml:48 reference_constructor.xml:100 #: reference_constructor.xml:129 reference_constructor.xml:153 #: reference_constructor.xml:195 reference_constructor.xml:255 #: reference_constructor.xml:305 reference_constructor.xml:346 #: reference_constructor.xml:374 reference_constructor.xml:453 #: reference_constructor.xml:492 reference_constructor.xml:540 #: reference_constructor.xml:571 reference_constructor.xml:621 #: reference_constructor.xml:672 reference_constructor.xml:710 #: reference_constructor.xml:770 reference_constructor.xml:838 #: reference_constructor.xml:902 reference_constructor.xml:942 #: reference_constructor.xml:989 reference_constructor.xml:1066 #: reference_constructor.xml:1109 reference_constructor.xml:1173 #: reference_constructor.xml:1239 reference_constructor.xml:1276 #: reference_constructor.xml:1335 reference_constructor.xml:1396 #: reference_constructor.xml:1457 reference_constructor.xml:1508 #: reference_constructor.xml:1563 reference_constructor.xml:1616 #: reference_constructor.xml:1665 reference_constructor.xml:1717 #: reference_constructor.xml:1741 reference_constructor.xml:1764 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_constructor.xml:49 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:55 #, no-c-format msgid "ST_BdMPolyFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:56 #, no-c-format msgid "" "Construct a MultiPolygon given an arbitrary collection of closed linestrings " "as a MultiLineString text representation Well-Known text representation." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:63 #, no-c-format msgid "" "geometry ST_BdMPolyFromText " "text WKT " "integer srid" msgstr "" #. Tag: para #: reference_constructor.xml:74 #, no-c-format msgid "" "Construct a Polygon given an arbitrary collection of closed linestrings, " "polygons, MultiLineStrings as Well-Known text representation." msgstr "" #. Tag: para #: reference_constructor.xml:79 #, no-c-format msgid "" "Throws an error if WKT is not a MULTILINESTRING. Forces MULTIPOLYGON output " "even when result is really only composed by a single POLYGON; use ST_BdPolyFromText if you're sure a " "single POLYGON will result from operation, or see ST_BuildArea() for a postgis-specific approach." msgstr "" #. Tag: para #: reference_constructor.xml:101 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:107 #, no-c-format msgid "ST_GeogFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:108 reference_constructor.xml:137 #, no-c-format msgid "" "Return a specified geography value from Well-Known Text representation or " "extended (WKT)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:112 #, no-c-format msgid "" "geography ST_GeogFromText " "text EWKT" msgstr "" #. Tag: para #: reference_constructor.xml:120 #, no-c-format msgid "" "Returns a geography object from the well-known text or extended well-known " "representation. SRID 4326 is assumed. This is an alias for " "ST_GeographyFromText. Points are always expressed in long lat form." msgstr "" #. Tag: programlisting #: reference_constructor.xml:126 #, no-c-format msgid "" "--- converting lon lat coords to geography\n" "ALTER TABLE sometable ADD COLUMN geog geography(POINT,4326);\n" "UPDATE sometable SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' " "|| lat || ')');" msgstr "" #. Tag: para #: reference_constructor.xml:130 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:136 #, no-c-format msgid "ST_GeographyFromText" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:141 #, no-c-format msgid "" "geography ST_GeographyFromText " "text EWKT" msgstr "" #. Tag: para #: reference_constructor.xml:149 #, no-c-format msgid "" "Returns a geography object from the well-known text representation. SRID " "4326 is assumed." msgstr "" #. Tag: para #: reference_constructor.xml:154 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:160 #, no-c-format msgid "ST_GeogFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:161 #, no-c-format msgid "" "Creates a geography instance from a Well-Known Binary geometry " "representation (WKB) or extended Well Known Binary (EWKB)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:167 #, no-c-format msgid "" "geography ST_GeogFromWKB " "bytea geom" msgstr "" #. Tag: para #: reference_constructor.xml:177 #, no-c-format msgid "" "The ST_GeogFromWKB function, takes a well-known binary " "representation (WKB) of a geometry or PostGIS Extended WKB and creates an " "instance of the appropriate geography type. This function plays the role of " "the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:182 #, no-c-format msgid "If SRID is not specified, it defaults to 4326 (WGS 84 long lat)." msgstr "" #. Tag: para #: reference_constructor.xml:184 reference_constructor.xml:286 #: reference_constructor.xml:334 reference_constructor.xml:610 #: reference_constructor.xml:660 reference_constructor.xml:1605 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:192 #, no-c-format msgid "" "--Although bytea rep contains single \\, these need to be escaped when " "inserting into a table\n" "SELECT ST_AsText(\n" "ST_GeogFromWKB(E'\\\\001\\\\002\\\\000\\\\000\\\\000\\\\002\\\\000\\\\000\\" "\\000\\\\037\\\\205\\\\353Q\\\\270~\\\\\\\\\\\\300\\\\323Mb\\\\020X\\\\231C@" "\\\\020X9\\\\264\\\\310~\\\\\\\\\\\\300)\\\\\\\\\\\\217\\\\302\\\\365\\" "\\230C@')\n" ");\n" " st_astext\n" "------------------------------------------------------\n" " LINESTRING(-113.98 39.198,-113.981 39.195)\n" "(1 row)" msgstr "" #. Tag: para #: reference_constructor.xml:197 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:204 #, no-c-format msgid "ST_GeomCollFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:206 #, no-c-format msgid "" "Makes a collection Geometry from collection WKT with the given SRID. If SRID " "is not give, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:211 #, no-c-format msgid "" " geometry ST_GeomCollFromText text WKT " "integer srid geometry " "ST_GeomCollFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:229 #, no-c-format msgid "" "Makes a collection Geometry from the Well-Known-Text (WKT) representation " "with the given SRID. If SRID is not give, it defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:232 reference_constructor.xml:1310 #: reference_constructor.xml:1371 reference_constructor.xml:1432 #: reference_constructor.xml:1700 #, no-c-format msgid "OGC SPEC 3.2.6.2 - option SRID is from the conformance suite" msgstr "" #. Tag: para #: reference_constructor.xml:234 #, no-c-format msgid "Returns null if the WKT is not a GEOMETRYCOLLECTION" msgstr "" #. Tag: para #: reference_constructor.xml:236 #, no-c-format msgid "" "If you are absolutely sure all your WKT geometries are collections, don't " "use this function. It is slower than ST_GeomFromText since it adds an " "additional validation step." msgstr "" #. Tag: para #: reference_constructor.xml:242 #, no-c-format msgid "&sqlmm_compliant;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:250 #, no-c-format msgid "" "SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 " "4))');" msgstr "" #. Tag: para #: reference_constructor.xml:257 reference_constructor.xml:1459 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:264 #, no-c-format msgid "ST_GeomFromEWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:265 #, no-c-format msgid "" "Return a specified ST_Geometry value from Extended Well-Known Binary " "representation (EWKB)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:270 #, no-c-format msgid "" "geometry ST_GeomFromEWKB " "bytea EWKB" msgstr "" #. Tag: para #: reference_constructor.xml:279 #, no-c-format msgid "" "Constructs a PostGIS ST_Geometry object from the OGC Extended Well-Known " "binary (EWKT) representation." msgstr "" #. Tag: para #: reference_constructor.xml:281 #, no-c-format msgid "" "The EWKB format is not an OGC standard, but a PostGIS specific format that " "includes the spatial reference system (SRID) identifier" msgstr "" #. Tag: para #: reference_constructor.xml:284 reference_constructor.xml:332 #: reference_constructor.xml:420 reference_constructor.xml:567 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced." msgstr "" #. Tag: para #: reference_constructor.xml:285 reference_constructor.xml:333 #: reference_constructor.xml:422 reference_constructor.xml:481 #: reference_constructor.xml:527 reference_constructor.xml:698 #: reference_constructor.xml:1034 reference_constructor.xml:1151 #: reference_constructor.xml:1230 reference_constructor.xml:1604 #: reference_constructor.xml:1652 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_constructor.xml:287 reference_constructor.xml:335 #: reference_constructor.xml:423 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_constructor.xml:288 reference_constructor.xml:336 #: reference_constructor.xml:424 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: para #: reference_constructor.xml:293 #, no-c-format msgid "" "line string binary rep 0f LINESTRING(-71.160281 42.258729,-71.160837 " "42.259113,-71.161144 42.25932) in NAD 83 long lat (4269)." msgstr "" #. Tag: para #: reference_constructor.xml:295 #, no-c-format msgid "" "NOTE: Even though byte arrays are delimited with \\ and may have ', we need " "to escape both out with \\ and '' if standard_conforming_strings is off. So " "it does not look exactly like its AsEWKB representation." msgstr "" #. Tag: programlisting #: reference_constructor.xml:297 #, no-c-format msgid "" "SELECT ST_GeomFromEWKB(E'\\\\001\\\\002\\\\000\\\\000 \\\\255\\\\020\\\\000\\" "\\000\\\\003\\\\000\\\\000\\\\000\\\\344J=\n" "\\\\013B\\\\312Q\\\\300n\\\\303(\\\\010\\\\036!E@''\\\\277E''K\n" "\\\\312Q\\\\300\\\\366{b\\\\235*!E@\\\\225|\\\\354.P\\\\312Q\n" "\\\\300p\\\\231\\\\323e1!E@');" msgstr "" #. Tag: para #: reference_constructor.xml:299 #, no-c-format msgid "" "In PostgreSQL 9.1+ - standard_conforming_strings is set to on by default, " "where as in past versions it was set to on. You can change defaults as " "needed for a single query or at the database or server level. Below is how " "you would do it with standard_conforming_strings = on. In this case we " "escape the ' with standard ansi ', but slashes are not escaped" msgstr "" #. Tag: programlisting #: reference_constructor.xml:302 #, no-c-format msgid "" "set standard_conforming_strings = on;\n" "SELECT ST_GeomFromEWKB('\\001\\002\\000\\000 " "\\255\\020\\000\\000\\003\\000\\000\\000\\344J=\\012\\013B\n" " \\312Q\\300n\\303(\\010\\036!E@''\\277E''K\\012\\312Q\\300\\366{b\\235*!" "E@\\225|\\354.P\\312Q\\012\\300p\\231\\323e1')" msgstr "" #. Tag: para #: reference_constructor.xml:306 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:312 #, no-c-format msgid "ST_GeomFromEWKT" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:313 #, no-c-format msgid "" "Return a specified ST_Geometry value from Extended Well-Known Text " "representation (EWKT)." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:318 #, no-c-format msgid "" "geometry ST_GeomFromEWKT " "text EWKT" msgstr "" #. Tag: para #: reference_constructor.xml:327 #, no-c-format msgid "" "Constructs a PostGIS ST_Geometry object from the OGC Extended Well-Known " "text (EWKT) representation." msgstr "" #. Tag: para #: reference_constructor.xml:329 #, no-c-format msgid "" "The EWKT format is not an OGC standard, but an PostGIS specific format that " "includes the spatial reference system (SRID) identifier" msgstr "" #. Tag: programlisting #: reference_constructor.xml:341 #, no-c-format msgid "" "SELECT ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 " "42.259113,-71.161144 42.25932)');\n" "SELECT ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 " "42.258729,-71.160837 42.259113,-71.161144 42.25932))');\n" "\n" "SELECT ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)');\n" "\n" "SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((-71.1776585052917 " "42.3902909739571,-71.1776820268866 42.3903701743239,\n" "-71.1776063012595 42.3903825660754,-71.1775826583081 " "42.3903033653531,-71.1776585052917 42.3902909739571))');\n" "\n" "SELECT ST_GeomFromEWKT('SRID=4269;MULTIPOLYGON(((-71.1031880899493 " "42.3152774590236,\n" "-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,\n" "-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,\n" "-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,\n" "-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,\n" "-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,\n" "-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,\n" "-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,\n" "-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,\n" "-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,\n" "-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,\n" "-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,\n" "-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,\n" "-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,\n" "-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,\n" "-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,\n" "-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,\n" "-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,\n" "-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,\n" "-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,\n" "-71.1031880899493 42.3152774590236)),\n" "((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,\n" "-71.1043443253471 42.3150676015829,-71.1043850704575 " "42.3150793250568,-71.1043632495873 42.315113108546)))');" msgstr "" #. Tag: programlisting #: reference_constructor.xml:342 #, no-c-format msgid "" "--3d circular string\n" "SELECT ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 " "2,220227 150406 3)');" msgstr "" #. Tag: programlisting #: reference_constructor.xml:343 #, no-c-format msgid "" "--Polyhedral Surface example\n" "SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE( \n" " ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" " ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), \n" " ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), \n" " ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" " ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), \n" " ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) \n" ")');" msgstr "" #. Tag: para #: reference_constructor.xml:347 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:352 #, no-c-format msgid "ST_GeometryFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:353 reference_constructor.xml:1749 #, no-c-format msgid "" "Return a specified ST_Geometry value from Well-Known Text representation " "(WKT). This is an alias name for ST_GeomFromText" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:356 #, no-c-format msgid "" " geometry ST_GeometryFromText text WKT " " geometry " "ST_GeometryFromText text WKT integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:370 reference_constructor.xml:1650 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_constructor.xml:371 reference_constructor.xml:609 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.40" msgstr "" #. Tag: refname #: reference_constructor.xml:381 #, no-c-format msgid "ST_GeomFromGML" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:382 #, no-c-format msgid "" "Takes as input GML representation of geometry and outputs a PostGIS geometry " "object" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:386 #, no-c-format msgid "" " geometry ST_GeomFromGML text geomgml geometry " "ST_GeomFromGML text " "geomgml integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:401 #, no-c-format msgid "" "Constructs a PostGIS ST_Geometry object from the OGC GML representation." msgstr "" #. Tag: para #: reference_constructor.xml:402 #, no-c-format msgid "" "ST_GeomFromGML works only for GML Geometry fragments. It throws an error if " "you try to use it on a whole GML document." msgstr "" #. Tag: para #: reference_constructor.xml:403 #, no-c-format msgid "" "OGC GML versions supported: GML 3.2.1 " "Namespace GML 3.1.1 Simple Features " "profile SF-2 (with GML 3.1.0 and 3.0.0 backward compatibility) GML 2.1.2 OGC " "GML standards, cf: http://www.opengeospatial.org/standards/gml:" msgstr "" #. Tag: para #: reference_constructor.xml:419 reference_constructor.xml:566 #, no-c-format msgid "Availability: 1.5, requires libxml2 1.6+" msgstr "" #. Tag: para #: reference_constructor.xml:421 reference_constructor.xml:568 #, no-c-format msgid "Enhanced: 2.0.0 default srid optional parameter added." msgstr "" #. Tag: para #: reference_constructor.xml:425 #, no-c-format msgid "" "GML allow mixed dimensions (2D and 3D inside the same MultiGeometry for " "instance). As PostGIS geometries don't, ST_GeomFromGML convert the whole " "geometry to 2D if a missing Z dimension is found once." msgstr "" #. Tag: para #: reference_constructor.xml:427 #, no-c-format msgid "" "GML support mixed SRS inside the same MultiGeometry. As PostGIS geometries " "don't, ST_GeomFromGML, in this case, reproject all subgeometries to the SRS " "root node. If no srsName attribute available for the GML root node, the " "function throw an error." msgstr "" #. Tag: para #: reference_constructor.xml:429 #, no-c-format msgid "" "ST_GeomFromGML function is not pedantic about an explicit GML namespace. You " "could avoid to mention it explicitly for common usages. But you need it if " "you want to use XLink feature inside GML." msgstr "" #. Tag: para #: reference_constructor.xml:431 #, no-c-format msgid "ST_GeomFromGML function not support SQL/MM curves geometries." msgstr "" #. Tag: title #: reference_constructor.xml:437 reference_constructor.xml:535 #, no-c-format msgid "Examples - A single geometry with srsName" msgstr "" #. Tag: programlisting #: reference_constructor.xml:438 #, no-c-format msgid "" "SELECT ST_GeomFromGML('\n" " \n" " -71.16028,42.258729 -71.160837,42.259112 " "-71.161143,42.25932\n" " \n" " ']]>);" msgstr "" #. Tag: title #: reference_constructor.xml:442 #, no-c-format msgid "Examples - XLink usage" msgstr "" #. Tag: programlisting #: reference_constructor.xml:443 #, no-c-format msgid "" "SELECT \n" " \n" " 42.258729 " "-71.16028\n" " \n" " 42.259112 -71.160837\n" " \n" " \n" " \n" " ');]]>);" msgstr "" #. Tag: title #: reference_constructor.xml:447 #, no-c-format msgid "Examples - Polyhedral Surface" msgstr "" #. Tag: programlisting #: reference_constructor.xml:448 #, no-c-format msgid "" "SELECT ST_AsEWKT(\n" "\n" " \n" " \n" " 0 0 0 0 0 1 0 1 1 0 1 " "0 0 0 0\n" " \n" " \n" " \n" " \n" " 0 0 0 0 1 0 1 1 " "0 1 0 0 0 0 0\n" " \n" " \n" " \n" " \n" " 0 0 0 1 0 0 1 0 " "1 0 0 1 0 0 0\n" " \n" " \n" " \n" " \n" " 1 1 0 1 1 1 1 0 " "1 1 0 0 1 1 0\n" " \n" " \n" " \n" " \n" " 0 1 0 0 1 1 1 1 " "1 1 1 0 0 1 0\n" " \n" " \n" " \n" " \n" " 0 0 1 1 0 1 1 1 " "1 0 1 1 0 0 1\n" " \n" " \n" "\n" "']]>));\n" "\n" "-- result --\n" " POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),\n" " ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),\n" " ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),\n" " ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),\n" " ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),\n" " ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))" msgstr "" #. Tag: para #: reference_constructor.xml:454 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:460 #, no-c-format msgid "ST_GeomFromGeoJSON" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:461 #, no-c-format msgid "" "Takes as input a geojson representation of a geometry and outputs a PostGIS " "geometry object" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:466 #, no-c-format msgid "" "geometry ST_GeomFromGeoJSON " "text geomjson" msgstr "" #. Tag: para #: reference_constructor.xml:475 #, no-c-format msgid "Constructs a PostGIS geometry object from the GeoJSON representation." msgstr "" #. Tag: para #: reference_constructor.xml:476 #, no-c-format msgid "" "ST_GeomFromGeoJSON works only for JSON Geometry fragments. It throws an " "error if you try to use it on a whole JSON document." msgstr "" #. Tag: para #: reference_constructor.xml:478 #, no-c-format msgid "Availability: 2.0.0 requires - JSON-C >= 0.9" msgstr "" #. Tag: para #: reference_constructor.xml:479 #, no-c-format msgid "" "If you do not have JSON-C enabled, support you will get an error notice " "instead of seeing an output. To enable JSON-C, run configure --with-jsondir=/" "path/to/json-c. See for " "details." msgstr "" #. Tag: programlisting #: reference_constructor.xml:486 #, no-c-format msgid "" "SELECT ST_AsText(ST_GeomFromGeoJSON('{\"type\":\"Point\",\"coordinates\":" "[-48.23456,20.12345]}')) As wkt;\n" "wkt\n" "------\n" "POINT(-48.23456 20.12345)" msgstr "" #. Tag: programlisting #: reference_constructor.xml:487 #, no-c-format msgid "" "-- a 3D linestring\n" "SELECT ST_AsText(ST_GeomFromGeoJSON('{\"type\":\"LineString\",\"coordinates" "\":[[1,2,3],[4,5,6],[7,8,9]]}')) As wkt;\n" "\n" "wkt\n" "-------------------\n" "LINESTRING(1 2,4 5,7 8)" msgstr "" #. Tag: para #: reference_constructor.xml:493 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:499 #, no-c-format msgid "ST_GeomFromKML" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:500 #, no-c-format msgid "" "Takes as input KML representation of geometry and outputs a PostGIS geometry " "object" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:505 #, no-c-format msgid "" "geometry ST_GeomFromKML " "text geomkml" msgstr "" #. Tag: para #: reference_constructor.xml:514 #, no-c-format msgid "" "Constructs a PostGIS ST_Geometry object from the OGC KML representation." msgstr "" #. Tag: para #: reference_constructor.xml:515 #, no-c-format msgid "" "ST_GeomFromKML works only for KML Geometry fragments. It throws an error if " "you try to use it on a whole KML document." msgstr "" #. Tag: para #: reference_constructor.xml:516 #, no-c-format msgid "" "OGC KML versions supported: KML 2.2.0 " "Namespace OGC KML standards, cf: http://www." "opengeospatial.org/standards/kml:" msgstr "" #. Tag: para #: reference_constructor.xml:526 #, no-c-format msgid "Availability: 1.5,libxml2 2.6+" msgstr "" #. Tag: para #: reference_constructor.xml:529 #, no-c-format msgid "ST_GeomFromKML function not support SQL/MM curves geometries." msgstr "" #. Tag: programlisting #: reference_constructor.xml:536 #, no-c-format msgid "" "SELECT ST_GeomFromKML('\n" " -71.1663,42.2614 \n" " -71.1667,42.2616\n" " ']]>);" msgstr "" #. Tag: para #: reference_constructor.xml:541 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:547 #, no-c-format msgid "ST_GMLToSQL" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:548 #, no-c-format msgid "" "Return a specified ST_Geometry value from GML representation. This is an " "alias name for ST_GeomFromGML" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:551 #, no-c-format msgid "" " geometry ST_GMLToSQL " "text geomgml geometry ST_GMLToSQL text geomgml integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:565 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.50 (except for curves support)." msgstr "" #. Tag: para #: reference_constructor.xml:572 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:578 #, no-c-format msgid "ST_GeomFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:579 #, no-c-format msgid "" "Return a specified ST_Geometry value from Well-Known Text representation " "(WKT)." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:582 #, no-c-format msgid "" " geometry ST_GeomFromText text WKT " " geometry " "ST_GeomFromText text " "WKT integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:598 #, no-c-format msgid "" "Constructs a PostGIS ST_Geometry object from the OGC Well-Known text " "representation." msgstr "" #. Tag: para #: reference_constructor.xml:602 #, no-c-format msgid "" "There are 2 variants of ST_GeomFromText function, the first takes no SRID " "and returns a geometry with no defined spatial reference system. The second " "takes a spatial reference id as the second argument and returns an " "ST_Geometry that includes this srid as part of its meta-data. The srid must " "be defined in the spatial_ref_sys table." msgstr "" #. Tag: para #: reference_constructor.xml:608 reference_constructor.xml:1554 #, no-c-format msgid "&sfs_compliant; s3.2.6.2 - option SRID is from the conformance suite." msgstr "" #. Tag: para #: reference_constructor.xml:611 #, no-c-format msgid "" "Changed: 2.0.0 In prior versions of PostGIS ST_GeomFromText" "('GEOMETRYCOLLECTION(EMPTY)') was allowed. This is now illegal in PostGIS " "2.0.0 to better conform with SQL/MM standards. This should now be written as " "ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')" msgstr "" #. Tag: programlisting #: reference_constructor.xml:618 #, no-c-format msgid "" "SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 " "42.259113,-71.161144 42.25932)');\n" "SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 " "42.259113,-71.161144 42.25932)',4269);\n" "\n" "SELECT ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 " "42.259113,-71.161144 42.25932))');\n" "\n" "SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');\n" "\n" "SELECT ST_GeomFromText('POLYGON((-71.1776585052917 " "42.3902909739571,-71.1776820268866 42.3903701743239,\n" "-71.1776063012595 42.3903825660754,-71.1775826583081 " "42.3903033653531,-71.1776585052917 42.3902909739571))');\n" "\n" "SELECT ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236,\n" "-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,\n" "-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,\n" "-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,\n" "-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,\n" "-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,\n" "-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,\n" "-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,\n" "-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,\n" "-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,\n" "-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,\n" "-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,\n" "-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,\n" "-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,\n" "-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,\n" "-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,\n" "-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,\n" "-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,\n" "-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,\n" "-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,\n" "-71.1031880899493 42.3152774590236)),\n" "((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,\n" "-71.1043443253471 42.3150676015829,-71.1043850704575 " "42.3150793250568,-71.1043632495873 42.315113108546)))',4326);\n" "\n" "SELECT ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 " "150406)');" msgstr "" #. Tag: para #: reference_constructor.xml:622 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:628 #, no-c-format msgid "ST_GeomFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:629 #, no-c-format msgid "" "Creates a geometry instance from a Well-Known Binary geometry representation " "(WKB) and optional SRID." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:634 reference_constructor.xml:1576 #, no-c-format msgid "" " geometry ST_GeomFromWKB bytea geom geometry " "ST_GeomFromWKB bytea " "geom integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:651 #, no-c-format msgid "" "The ST_GeomFromWKB function, takes a well-known binary " "representation of a geometry and a Spatial Reference System ID " "(SRID) and creates an instance of the appropriate " "geometry type. This function plays the role of the Geometry Factory in SQL. " "This is an alternate name for ST_WKBToSQL." msgstr "" #. Tag: para #: reference_constructor.xml:657 #, no-c-format msgid "If SRID is not specified, it defaults to -1 (Unknown)." msgstr "" #. Tag: para #: reference_constructor.xml:658 #, no-c-format msgid "" "&sfs_compliant; s3.2.7.2 - the optional SRID is from the conformance suite" msgstr "" #. Tag: para #: reference_constructor.xml:659 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.41" msgstr "" #. Tag: programlisting #: reference_constructor.xml:667 #, no-c-format msgid "" "--Although bytea rep contains single \\, these need to be escaped when " "inserting into a table \n" " -- unless standard_conforming_strings is set to on.\n" "SELECT ST_AsEWKT(\n" "ST_GeomFromWKB(E'\\\\001\\\\002\\\\000\\\\000\\\\000\\\\002\\\\000\\\\000\\" "\\000\\\\037\\\\205\\\\353Q\\\\270~\\\\\\\\\\\\300\\\\323Mb\\\\020X\\\\231C@" "\\\\020X9\\\\264\\\\310~\\\\\\\\\\\\300)\\\\\\\\\\\\217\\\\302\\\\365\\" "\\230C@',4326)\n" ");\n" " st_asewkt\n" "------------------------------------------------------\n" " SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195)\n" "(1 row)\n" "\n" "SELECT\n" " ST_AsText(\n" " ST_GeomFromWKB(\n" " ST_AsEWKB('POINT(2 5)'::geometry)\n" " )\n" " );\n" " st_astext\n" "------------\n" " POINT(2 5)\n" "(1 row)" msgstr "" #. Tag: para #: reference_constructor.xml:674 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:680 #, no-c-format msgid "ST_LineFromMultiPoint" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:682 #, no-c-format msgid "" "Creates a LineString from a MultiPoint geometry." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:687 #, no-c-format msgid "" "geometry ST_LineFromMultiPoint " "geometry aMultiPoint" msgstr "" #. Tag: para #: reference_constructor.xml:697 #, no-c-format msgid "Creates a LineString from a MultiPoint geometry." msgstr "" #. Tag: programlisting #: reference_constructor.xml:705 #, no-c-format msgid "" "--Create a 3d line string from a 3d multipoint\n" "SELECT ST_AsEWKT(ST_LineFromMultiPoint(ST_GeomFromEWKT('MULTIPOINT(1 2 3, 4 " "5 6, 7 8 9)')));\n" "--result--\n" "LINESTRING(1 2 3,4 5 6,7 8 9)" msgstr "" #. Tag: para #: reference_constructor.xml:712 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:718 #, no-c-format msgid "ST_LineFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:720 #, no-c-format msgid "" "Makes a Geometry from WKT representation with the given SRID. If SRID is not " "given, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:725 #, no-c-format msgid "" " geometry ST_LineFromText text WKT " " geometry " "ST_LineFromText text " "WKT integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:742 #, no-c-format msgid "" "Makes a Geometry from WKT with the given SRID. If SRID is not give, it " "defaults to -1. If WKT passed in is not a LINESTRING, then null is returned." msgstr "" #. Tag: para #: reference_constructor.xml:746 reference_constructor.xml:812 #, no-c-format msgid "OGC SPEC 3.2.6.2 - option SRID is from the conformance suite." msgstr "" #. Tag: para #: reference_constructor.xml:751 #, no-c-format msgid "" "If you know all your geometries are LINESTRINGS, its more efficient to just " "use ST_GeomFromText. This just calls ST_GeomFromText and adds additional " "validation that it returns a linestring." msgstr "" #. Tag: para #: reference_constructor.xml:757 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.8" msgstr "" #. Tag: programlisting #: reference_constructor.xml:765 #, no-c-format msgid "" "SELECT ST_LineFromText('LINESTRING(1 2, 3 4)') AS aline, ST_LineFromText" "('POINT(1 2)') AS null_return;\n" "aline | null_return\n" "------------------------------------------------\n" "010200000002000000000000000000F ... | t" msgstr "" #. Tag: refname #: reference_constructor.xml:778 #, no-c-format msgid "ST_LineFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:780 #, no-c-format msgid "Makes a LINESTRING from WKB with the given SRID" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:784 #, no-c-format msgid "" " geometry ST_LineFromWKB bytea WKB " " geometry ST_LineFromWKB bytea WKB integer srid " msgstr "" #. Tag: para #: reference_constructor.xml:801 #, no-c-format msgid "" "The ST_LineFromWKB function, takes a well-known binary " "representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this " "case, a LINESTRING geometry. This function plays the role " "of the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:807 #, no-c-format msgid "" "If an SRID is not specified, it defaults to -1. NULL is " "returned if the input bytea does not represent a " "LINESTRING." msgstr "" #. Tag: para #: reference_constructor.xml:817 #, no-c-format msgid "" "If you know all your geometries are LINESTRINGs, its more " "efficient to just use . This function just " "calls and adds additional validation that " "it returns a linestring." msgstr "" #. Tag: para #: reference_constructor.xml:825 reference_constructor.xml:891 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.2.9" msgstr "" #. Tag: programlisting #: reference_constructor.xml:833 #, no-c-format msgid "" "SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) " "AS aline,\n" " ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) " "IS NULL AS null_return;\n" "aline | null_return\n" "------------------------------------------------\n" "010200000002000000000000000000F ... | t" msgstr "" #. Tag: para #: reference_constructor.xml:840 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:846 #, no-c-format msgid "ST_LinestringFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:848 #, no-c-format msgid "Makes a geometry from WKB with the given SRID." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:852 #, no-c-format msgid "" " geometry ST_LinestringFromWKB bytea WKB " " geometry " "ST_LinestringFromWKB bytea WKB integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:869 #, no-c-format msgid "" "The ST_LinestringFromWKB function, takes a well-known " "binary representation of geometry and a Spatial Reference System ID " "(SRID) and creates an instance of the appropriate " "geometry type - in this case, a LINESTRING geometry. This " "function plays the role of the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:875 #, no-c-format msgid "" "If an SRID is not specified, it defaults to -1. NULL is " "returned if the input bytea does not represent a " "LINESTRING geometry. This an alias for ." msgstr "" #. Tag: para #: reference_constructor.xml:880 #, no-c-format msgid "OGC SPEC 3.2.6.2 - optional SRID is from the conformance suite." msgstr "" #. Tag: para #: reference_constructor.xml:884 #, no-c-format msgid "" "If you know all your geometries are LINESTRINGs, it's " "more efficient to just use . This function " "just calls and adds additional validation " "that it returns a LINESTRING." msgstr "" #. Tag: programlisting #: reference_constructor.xml:897 #, no-c-format msgid "" "SELECT\n" " ST_LineStringFromWKB(\n" " ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))\n" " ) AS aline,\n" " ST_LinestringFromWKB(\n" " ST_AsBinary(ST_GeomFromText('POINT(1 2)'))\n" " ) IS NULL AS null_return;\n" " aline | null_return\n" "------------------------------------------------\n" "010200000002000000000000000000F ... | t" msgstr "" #. Tag: para #: reference_constructor.xml:904 reference_constructor.xml:1618 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_constructor.xml:910 #, no-c-format msgid "ST_MakeBox2D" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:912 #, no-c-format msgid "Creates a BOX2D defined by the given point geometries." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:918 #, no-c-format msgid "" "box2d ST_MakeBox2D " "geometry pointLowLeft geometry pointUpRight" msgstr "" #. Tag: para #: reference_constructor.xml:929 #, no-c-format msgid "" "Creates a BOX2D defined by the given point geometries. This is useful for " "doing range queries" msgstr "" #. Tag: programlisting #: reference_constructor.xml:937 #, no-c-format msgid "" "--Return all features that fall reside or partly reside in a US national " "atlas coordinate bounding box\n" "--It is assumed here that the geometries are stored with SRID = 2163 (US " "National atlas equal area)\n" "SELECT feature_id, feature_name, the_geom\n" "FROM features\n" "WHERE the_geom && ST_SetSRID(ST_MakeBox2D(ST_Point(-989502.1875, " "528439.5625),\n" " ST_Point(-987121.375 ,529933.1875)),2163)" msgstr "" #. Tag: para #: reference_constructor.xml:944 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:950 #, no-c-format msgid "ST_3DMakeBox" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:952 #, no-c-format msgid "Creates a BOX3D defined by the given 3d point geometries." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:957 #, no-c-format msgid "" "box3d ST_3DMakeBox " "geometry point3DLowLeftBottom geometry " "point3DUpRightTop" msgstr "" #. Tag: para #: reference_constructor.xml:968 #, no-c-format msgid "Creates a BOX3D defined by the given 2 3D point geometries." msgstr "" #. Tag: para #: reference_constructor.xml:975 #, no-c-format msgid "This function supports 3d and will not drop the z-index." msgstr "" #. Tag: para #: reference_constructor.xml:977 #, no-c-format msgid "Changed: 2.0.0 In prior versions this used to be called ST_MakeBox3D" msgstr "" #. Tag: programlisting #: reference_constructor.xml:984 #, no-c-format msgid "" "SELECT ST_3DMakeBox(ST_MakePoint(-989502.1875, 528439.5625, 10),\n" " ST_MakePoint(-987121.375 ,529933.1875, 10)) As abb3d\n" "\n" "--bb3d--\n" "--------\n" "BOX3D(-989502.1875 528439.5625 10,-987121.375 529933.1875 10)" msgstr "" #. Tag: para #: reference_constructor.xml:991 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:997 #, no-c-format msgid "ST_MakeLine" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:999 #, no-c-format msgid "Creates a Linestring from point or line geometries." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1003 #, no-c-format msgid "" " geometry ST_MakeLine " "geometry set geoms " " geometry ST_MakeLine geometry geom1 geometry geom2 geometry " "ST_MakeLine geometry[] " "geoms_array " msgstr "" #. Tag: para #: reference_constructor.xml:1025 #, no-c-format msgid "" "ST_MakeLine comes in 3 forms: a spatial aggregate that takes rows of point-" "or-line geometries and returns a line string, a function that takes an array " "of point-or-lines, and a regular function that takes two point-or-line " "geometries. You might want to use a subselect to order points before feeding " "them to the aggregate version of this function." msgstr "" #. Tag: para #: reference_constructor.xml:1030 #, no-c-format msgid "When adding line components a common node is removed from the output." msgstr "" #. Tag: para #: reference_constructor.xml:1035 #, no-c-format msgid "" "Availability: 1.4.0 - ST_MakeLine(geomarray) was introduced. ST_MakeLine " "aggregate functions was enhanced to handle more points faster." msgstr "" #. Tag: para #: reference_constructor.xml:1036 #, no-c-format msgid "" "Availability: 2.0.0 - Support for linestring input elements was introduced" msgstr "" #. Tag: title #: reference_constructor.xml:1040 #, no-c-format msgid "Examples: Spatial Aggregate version" msgstr "" #. Tag: para #: reference_constructor.xml:1041 #, no-c-format msgid "" "This example takes a sequence of GPS points and creates one record for each " "gps travel where the geometry field is a line string composed of the gps " "points in the order of the travel." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1045 #, no-c-format msgid "" "-- For pre-PostgreSQL 9.0 - this usually works, \n" "-- but the planner may on occasion choose not to respect the order of the " "subquery\n" "SELECT gps.gps_track, ST_MakeLine(gps.the_geom) As newgeom\n" " FROM (SELECT gps_track,gps_time, the_geom\n" " FROM gps_points ORDER BY gps_track, gps_time) As " "gps\n" " GROUP BY gps.gps_track;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1047 #, no-c-format msgid "" "-- If you are using PostgreSQL 9.0+ \n" "-- (you can use the new ORDER BY support for aggregates)\n" "-- this is a guaranteed way to get a correctly ordered linestring\n" "-- Your order by part can order by more than one column if needed\n" "SELECT gps.gps_track, ST_MakeLine(gps.the_geom ORDER BY gps_time) As " "newgeom\n" " FROM gps_points As gps\n" " GROUP BY gps.gps_track;" msgstr "" #. Tag: title #: reference_constructor.xml:1050 #, no-c-format msgid "Examples: Non-Spatial Aggregate version" msgstr "" #. Tag: para #: reference_constructor.xml:1052 #, no-c-format msgid "" "First example is a simple one off line string composed of 2 points. The " "second formulates line strings from 2 points a user draws. The third is a " "one-off that joins 2 3d points to create a line in 3d space." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1054 #, no-c-format msgid "" "SELECT ST_AsText(ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(3,4)));\n" " st_astext\n" "---------------------\n" " LINESTRING(1 2,3 4)\n" "\n" "SELECT userpoints.id, ST_MakeLine(startpoint, endpoint) As drawn_line\n" " FROM userpoints ;\n" "\n" "SELECT ST_AsEWKT(ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5)));\n" " st_asewkt\n" "-------------------------\n" " LINESTRING(1 2 3,3 4 5)" msgstr "" #. Tag: title #: reference_constructor.xml:1058 #, no-c-format msgid "Examples: Using Array version" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1060 #, no-c-format msgid "" "SELECT ST_MakeLine(ARRAY(SELECT ST_Centroid(the_geom) FROM visit_locations " "ORDER BY visit_time));\n" "\n" "--Making a 3d line with 3 3-d points\n" "SELECT ST_AsEWKT(ST_MakeLine(ARRAY[ST_MakePoint(1,2,3),\n" " ST_MakePoint(3,4,5), ST_MakePoint" "(6,6,6)]));\n" " st_asewkt\n" "-------------------------\n" "LINESTRING(1 2 3,3 4 5,6 6 6)" msgstr "" #. Tag: para #: reference_constructor.xml:1067 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1074 #, no-c-format msgid "ST_MakeEnvelope" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1076 #, no-c-format msgid "" "Creates a rectangular Polygon formed from the given minimums and maximums. " "Input values must be in SRS specified by the SRID." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1082 #, no-c-format msgid "" "geometry ST_MakeEnvelope " "double precision xmin double precision ymin double precision " "xmax double precision ymax integer srid=unknown" msgstr "" #. Tag: para #: reference_constructor.xml:1096 #, no-c-format msgid "" "Creates a rectangular Polygon formed from the minima and maxima. by the " "given shell. Input values must be in SRS specified by the SRID. If no SRID " "is specified the unknown spatial reference system is assumed" msgstr "" #. Tag: para #: reference_constructor.xml:1099 #, no-c-format msgid "Availability: 1.5" msgstr "" #. Tag: para #: reference_constructor.xml:1100 #, no-c-format msgid "" "Enhanced: 2.0: Ability to specify an envelope without specifying an SRID was " "introduced." msgstr "" #. Tag: title #: reference_constructor.xml:1105 #, no-c-format msgid "Example: Building a bounding box polygon" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1106 #, no-c-format msgid "" "SELECT ST_AsText(ST_MakeEnvelope(10, 10, 11, 11, 4326));\n" "\n" "st_asewkt\n" "-----------\n" "POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))" msgstr "" #. Tag: para #: reference_constructor.xml:1110 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:1116 #, no-c-format msgid "ST_MakePolygon" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1118 #, no-c-format msgid "" "Creates a Polygon formed by the given shell. Input geometries must be closed " "LINESTRINGS." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1124 #, no-c-format msgid "" "geometry ST_MakePolygon " "geometry linestring" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1130 #, no-c-format msgid "" "geometry ST_MakePolygon " "geometry outerlinestring geometry[] interiorlinestrings" msgstr "" #. Tag: para #: reference_constructor.xml:1141 #, no-c-format msgid "" "Creates a Polygon formed by the given shell. Input geometries must be closed " "LINESTRINGS. Comes in 2 variants." msgstr "" #. Tag: para #: reference_constructor.xml:1143 #, no-c-format msgid "Variant 1: takes one closed linestring." msgstr "" #. Tag: para #: reference_constructor.xml:1144 #, no-c-format msgid "" "Variant 2: Creates a Polygon formed by the given shell and array of holes. " "You can construct a geometry array using ST_Accum or the PostgreSQL ARRAY[] " "and ARRAY() constructs. Input geometries must be closed LINESTRINGS." msgstr "" #. Tag: para #: reference_constructor.xml:1148 #, no-c-format msgid "" "This function will not accept a MULTILINESTRING. Use or to generate line strings." msgstr "" #. Tag: title #: reference_constructor.xml:1155 #, no-c-format msgid "Examples: Single closed LINESTRING" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1156 #, no-c-format msgid "" "--2d line\n" "SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 " "29.5, 75.15 29.53)'));\n" "--If linestring is not closed\n" "--you can add the start point to close it\n" "SELECT ST_MakePolygon(ST_AddPoint(foo.open_line, ST_StartPoint(foo." "open_line)))\n" "FROM (\n" "SELECT ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5)') As " "open_line) As foo;\n" "\n" "--3d closed line\n" "SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53 1,77 29 1,77.6 " "29.5 1, 75.15 29.53 1)'));\n" "\n" "st_asewkt\n" "-----------\n" "POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))\n" "\n" "--measured line --\n" "SELECT ST_MakePolygon(ST_GeomFromText('LINESTRINGM(75.15 29.53 1,77 29 " "1,77.6 29.5 2, 75.15 29.53 2)'));\n" "\n" "st_asewkt\n" "----------\n" "POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2))" msgstr "" #. Tag: title #: reference_constructor.xml:1159 #, no-c-format msgid "Examples: Outter shell with inner shells" msgstr "" #. Tag: para #: reference_constructor.xml:1161 #, no-c-format msgid "Build a donut with an ant hole" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1162 #, no-c-format msgid "" "SELECT ST_MakePolygon(\n" " ST_ExteriorRing(ST_Buffer(foo.line,10)),\n" " ARRAY[ST_Translate(foo.line,1,1),\n" " ST_ExteriorRing(ST_Buffer(ST_MakePoint(20,20),1)) ]\n" " )\n" "FROM\n" " (SELECT ST_ExteriorRing(ST_Buffer(ST_MakePoint(10,10),10,10))\n" " As line )\n" " As foo;" msgstr "" #. Tag: para #: reference_constructor.xml:1163 #, no-c-format msgid "" "Build province boundaries with holes representing lakes in the province from " "a set of province polygons/multipolygons and water line strings this is an " "example of using PostGIS ST_Accum" msgstr "" #. Tag: para #: reference_constructor.xml:1167 #, no-c-format msgid "" "The use of CASE because feeding a null array into ST_MakePolygon results in " "NULL" msgstr "" #. Tag: para #: reference_constructor.xml:1169 #, no-c-format msgid "" "the use of left join to guarantee we get all provinces back even if they " "have no lakes" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1170 #, no-c-format msgid "" "SELECT p.gid, p.province_name,\n" " CASE WHEN\n" " ST_Accum(w.the_geom) IS NULL THEN p.the_geom\n" " ELSE ST_MakePolygon(ST_LineMerge(ST_Boundary(p.the_geom)), " "ST_Accum(w.the_geom)) END\n" " FROM\n" " provinces p LEFT JOIN waterlines w\n" " ON (ST_Within(w.the_geom, p.the_geom) AND ST_IsClosed" "(w.the_geom))\n" " GROUP BY p.gid, p.province_name, p.the_geom;\n" "\n" " --Same example above but utilizing a correlated subquery\n" " --and PostgreSQL built-in ARRAY() function that converts a row set " "to an array\n" "\n" " SELECT p.gid, p.province_name, CASE WHEN\n" " EXISTS(SELECT w.the_geom\n" " FROM waterlines w\n" " WHERE ST_Within(w.the_geom, p.the_geom)\n" " AND ST_IsClosed(w.the_geom))\n" " THEN\n" " ST_MakePolygon(ST_LineMerge(ST_Boundary(p.the_geom)),\n" " ARRAY(SELECT w.the_geom\n" " FROM waterlines w\n" " WHERE ST_Within(w.the_geom, p.the_geom)\n" " AND ST_IsClosed(w.the_geom)))\n" " ELSE p.the_geom END As the_geom\n" " FROM\n" " provinces p;" msgstr "" #. Tag: para #: reference_constructor.xml:1174 #, no-c-format msgid "" ", , , " ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:1187 #, no-c-format msgid "ST_MakePoint" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1189 #, no-c-format msgid "Creates a 2D,3DZ or 4D point geometry." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1194 #, no-c-format msgid "" "geometry ST_MakePoint " "double precision x " "double precision y" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1201 #, no-c-format msgid "" "geometry ST_MakePoint " "double precision x " "double precision y " "double precision z" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1209 #, no-c-format msgid "" "geometry ST_MakePoint " "double precision x " "double precision y " "double precision z " "double precision m" msgstr "" #. Tag: para #: reference_constructor.xml:1222 #, no-c-format msgid "" "Creates a 2D,3DZ or 4D point geometry (geometry with measure). " "ST_MakePoint while not being OGC compliant is generally " "faster and more precise than and . It is also easier to use if you have raw " "coordinates rather than WKT." msgstr "" #. Tag: para #: reference_constructor.xml:1228 #, no-c-format msgid "Note x is longitude and y is latitude" msgstr "" #. Tag: para #: reference_constructor.xml:1229 #, no-c-format msgid "" "Use if you need to make a point with x,y,m." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1236 #, no-c-format msgid "" "--Return point with unknown SRID\n" "SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829);\n" "\n" "--Return point marked as WGS 84 long lat\n" "SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);\n" "\n" "--Return a 3D point (e.g. has altitude)\n" "SELECT ST_MakePoint(1, 2,1.5);\n" "\n" "--Get z of point\n" "SELECT ST_Z(ST_MakePoint(1, 2,1.5));\n" "result\n" "-------\n" "1.5" msgstr "" #. Tag: para #: reference_constructor.xml:1240 #, no-c-format msgid "" ", , , " "" msgstr "" #. Tag: refname #: reference_constructor.xml:1246 #, no-c-format msgid "ST_MakePointM" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1248 #, no-c-format msgid "Creates a point geometry with an x y and m coordinate." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1253 #, no-c-format msgid "" "geometry ST_MakePointM " "float x " "float y " "float m" msgstr "" #. Tag: para #: reference_constructor.xml:1265 #, no-c-format msgid "Creates a point with x, y and measure coordinates." msgstr "" #. Tag: para #: reference_constructor.xml:1266 #, no-c-format msgid "Note x is longitude and y is latitude." msgstr "" #. Tag: para #: reference_constructor.xml:1271 #, no-c-format msgid "" "We use ST_AsEWKT in these examples to show the text representation instead " "of ST_AsText because ST_AsText does not support returning M." msgstr "" #. Tag: programlisting #: reference_constructor.xml:1273 #, no-c-format msgid "" "--Return EWKT representation of point with unknown SRID\n" "SELECT ST_AsEWKT(ST_MakePointM(-71.1043443253471, 42.3150676015829, 10));\n" "\n" "--result\n" " st_asewkt\n" "-----------------------------------------------\n" " POINTM(-71.1043443253471 42.3150676015829 10)\n" "\n" "--Return EWKT representation of point with measure marked as WGS 84 long " "lat\n" "SELECT ST_AsEWKT(ST_SetSRID(ST_MakePointM(-71.1043443253471, " "42.3150676015829,10),4326));\n" "\n" " st_asewkt\n" "---------------------------------------------------------\n" "SRID=4326;POINTM(-71.1043443253471 42.3150676015829 10)\n" "\n" "--Return a 3d point (e.g. has altitude)\n" "SELECT ST_MakePoint(1, 2,1.5);\n" "\n" "--Get m of point\n" "SELECT ST_M(ST_MakePointM(-71.1043443253471, 42.3150676015829,10));\n" "result\n" "-------\n" "10" msgstr "" #. Tag: para #: reference_constructor.xml:1277 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_constructor.xml:1283 #, no-c-format msgid "ST_MLineFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1285 #, no-c-format msgid "Return a specified ST_MultiLineString value from WKT representation." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1289 #, no-c-format msgid "" " geometry ST_MLineFromText text WKT " "integer srid geometry ST_MLineFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:1307 #, no-c-format msgid "" "Makes a Geometry from Well-Known-Text (WKT) with the given SRID. If SRID is " "not give, it defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:1313 #, no-c-format msgid "Returns null if the WKT is not a MULTILINESTRING" msgstr "" #. Tag: para #: reference_constructor.xml:1316 reference_constructor.xml:1377 #, no-c-format msgid "" "If you are absolutely sure all your WKT geometries are points, don't use " "this function. It is slower than ST_GeomFromText since it adds an additional " "validation step." msgstr "" #. Tag: para #: reference_constructor.xml:1322 #, no-c-format msgid "&sqlmm_compliant;SQL-MM 3: 9.4.4" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1330 #, no-c-format msgid "SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))');" msgstr "" #. Tag: refname #: reference_constructor.xml:1343 #, no-c-format msgid "ST_MPointFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1345 reference_constructor.xml:1675 #, no-c-format msgid "" "Makes a Geometry from WKT with the given SRID. If SRID is not " "give, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1350 #, no-c-format msgid "" " geometry ST_MPointFromText text WKT " "integer srid geometry " "ST_MPointFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:1368 #, no-c-format msgid "" "Makes a Geometry from WKT with the given SRID. If SRID is not give, it " "defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:1374 #, no-c-format msgid "Returns null if the WKT is not a MULTIPOINT" msgstr "" #. Tag: para #: reference_constructor.xml:1382 #, no-c-format msgid "&sfs_compliant; 3.2.6.2" msgstr "" #. Tag: para #: reference_constructor.xml:1383 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.2.4" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1391 #, no-c-format msgid "" "SELECT ST_MPointFromText('MULTIPOINT(1 2, 3 4)');\n" "SELECT ST_MPointFromText('MULTIPOINT(-70.9590 42.1180, -70.9611 42.1223)', " "4326);" msgstr "" #. Tag: refname #: reference_constructor.xml:1404 #, no-c-format msgid "ST_MPolyFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1406 #, no-c-format msgid "" "Makes a MultiPolygon Geometry from WKT with the given SRID. If SRID is not " "give, it defaults to -1." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1411 #, no-c-format msgid "" " geometry ST_MPolyFromText text WKT " "integer srid geometry ST_MPolyFromText text WKT " msgstr "" #. Tag: para #: reference_constructor.xml:1429 #, no-c-format msgid "" "Makes a MultiPolygon from WKT with the given SRID. If SRID is not give, it " "defaults to -1." msgstr "" #. Tag: para #: reference_constructor.xml:1435 #, no-c-format msgid "Throws an error if the WKT is not a MULTIPOLYGON" msgstr "" #. Tag: para #: reference_constructor.xml:1438 #, no-c-format msgid "" "If you are absolutely sure all your WKT geometries are multipolygons, don't " "use this function. It is slower than ST_GeomFromText since it adds an " "additional validation step." msgstr "" #. Tag: para #: reference_constructor.xml:1444 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 9.6.4" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1452 #, no-c-format msgid "" "SELECT ST_MPolyFromText('MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1)," "(5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))');\n" "SELECt ST_MPolyFromText('MULTIPOLYGON(((-70.916 42.1002,-70.9468 " "42.0946,-70.9765 42.0872,-70.9754 42.0875,-70.9749 42.0879,-70.9752 " "42.0881,-70.9754 42.0891,-70.9758 42.0894,-70.9759 42.0897,-70.9759 " "42.0899,-70.9754 42.0902,-70.9756 42.0906,-70.9753 42.0907,-70.9753 " "42.0917,-70.9757 42.0924,-70.9755 42.0928,-70.9755 42.0942,-70.9751 " "42.0948,-70.9755 42.0953,-70.9751 42.0958,-70.9751 42.0962,-70.9759 " "42.0983,-70.9767 42.0987,-70.9768 42.0991,-70.9771 42.0997,-70.9771 " "42.1003,-70.9768 42.1005,-70.977 42.1011,-70.9766 42.1019,-70.9768 " "42.1026,-70.9769 42.1033,-70.9775 42.1042,-70.9773 42.1043,-70.9776 " "42.1043,-70.9778 42.1048,-70.9773 42.1058,-70.9774 42.1061,-70.9779 " "42.1065,-70.9782 42.1078,-70.9788 42.1085,-70.9798 42.1087,-70.9806 " "42.109,-70.9807 42.1093,-70.9806 42.1099,-70.9809 42.1109,-70.9808 " "42.1112,-70.9798 42.1116,-70.9792 42.1127,-70.979 42.1129,-70.9787 " "42.1134,-70.979 42.1139,-70.9791 42.1141,-70.9987 42.1116,-71.0022 42.1273,\n" " -70.9408 42.1513,-70.9315 42.1165,-70.916 42.1002)))',4326);" msgstr "" #. Tag: refname #: reference_constructor.xml:1465 #, no-c-format msgid "ST_Point" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1467 #, no-c-format msgid "" "Returns an ST_Point with the given coordinate values. OGC alias for " "ST_MakePoint." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1472 #, no-c-format msgid "" "geometry ST_Point " "float x_lon " "float y_lat" msgstr "" #. Tag: para #: reference_constructor.xml:1483 #, no-c-format msgid "" "Returns an ST_Point with the given coordinate values. MM compliant alias for " "ST_MakePoint that takes just an x and y." msgstr "" #. Tag: para #: reference_constructor.xml:1486 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.2" msgstr "" #. Tag: title #: reference_constructor.xml:1492 #, no-c-format msgid "Examples: Geometry" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1494 #, no-c-format msgid "SELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326)" msgstr "" #. Tag: title #: reference_constructor.xml:1498 #, no-c-format msgid "Examples: Geography" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1500 #, no-c-format msgid "" "SELECT CAST(ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326) " "As geography);" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1501 #, no-c-format msgid "" "-- the :: is PostgreSQL short-hand for casting.\n" "SELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326)::" "geography;" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1503 #, no-c-format msgid "" "--If your point coordinates are in a different spatial reference from WGS-84 " "long lat, then you need to transform before casting\n" "-- This example we convert a point in Pennsylvania State Plane feet to WGS " "84 and then geography\n" "SELECT ST_Transform(ST_SetSRID(ST_Point(3637510, 3014852),2273),4326)::" "geography;" msgstr "" #. Tag: para #: reference_constructor.xml:1510 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1516 #, no-c-format msgid "ST_PointFromText" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1517 #, no-c-format msgid "" "Makes a point Geometry from WKT with the given SRID. If SRID is not given, " "it defaults to unknown." msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1521 #, no-c-format msgid "" " geometry ST_PointFromText text WKT " " geometry " "ST_PointFromText text " "WKT integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:1537 #, no-c-format msgid "" "Constructs a PostGIS ST_Geometry point object from the OGC Well-Known text " "representation. If SRID is not give, it defaults to unknown (currently -1). " "If geometry is not a WKT point representation, returns null. If completely " "invalid WKT, then throws an error." msgstr "" #. Tag: para #: reference_constructor.xml:1543 #, no-c-format msgid "" "There are 2 variants of ST_PointFromText function, the first takes no SRID " "and returns a geometry with no defined spatial reference system. The second " "takes a spatial reference id as the second argument and returns an " "ST_Geometry that includes this srid as part of its meta-data. The srid must " "be defined in the spatial_ref_sys table." msgstr "" #. Tag: para #: reference_constructor.xml:1550 #, no-c-format msgid "" "If you are absolutely sure all your WKT geometries are points, don't use " "this function. It is slower than ST_GeomFromText since it adds an additional " "validation step. If you are building points from long lat coordinates and " "care more about performance and accuracy than OGC compliance, use or OGC compliant alias ." msgstr "" #. Tag: para #: reference_constructor.xml:1555 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.8" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1560 #, no-c-format msgid "" "SELECT ST_PointFromText('POINT(-71.064544 42.28787)');\n" "SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);" msgstr "" #. Tag: para #: reference_constructor.xml:1564 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1570 #, no-c-format msgid "ST_PointFromWKB" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1572 #, no-c-format msgid "Makes a geometry from WKB with the given SRID" msgstr "" #. Tag: para #: reference_constructor.xml:1593 #, no-c-format msgid "" "The ST_PointFromWKB function, takes a well-known binary " "representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this " "case, a POINT geometry. This function plays the role of " "the Geometry Factory in SQL." msgstr "" #. Tag: para #: reference_constructor.xml:1599 #, no-c-format msgid "" "If an SRID is not specified, it defaults to -1. NULL is " "returned if the input bytea does not represent a " "POINT geometry." msgstr "" #. Tag: para #: reference_constructor.xml:1602 #, no-c-format msgid "&sfs_compliant; s3.2.7.2" msgstr "" #. Tag: para #: reference_constructor.xml:1603 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 6.1.9" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1611 #, no-c-format msgid "" "SELECT\n" " ST_AsText(\n" " ST_PointFromWKB(\n" " ST_AsEWKB('POINT(2 5)'::geometry)\n" " )\n" " );\n" " st_astext\n" "------------\n" " POINT(2 5)\n" "(1 row)\n" "\n" "SELECT\n" " ST_AsText(\n" " ST_PointFromWKB(\n" " ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry)\n" " )\n" " );\n" " st_astext\n" "-----------\n" "\n" "(1 row)" msgstr "" #. Tag: refname #: reference_constructor.xml:1624 #, no-c-format msgid "ST_Polygon" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1626 #, no-c-format msgid "" "Returns a polygon built from the specified linestring and SRID." msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1631 #, no-c-format msgid "" "geometry ST_Polygon " "geometry aLineString integer srid" msgstr "" #. Tag: para #: reference_constructor.xml:1642 #, no-c-format msgid "" "Returns a polygon built from the specified linestring and SRID." msgstr "" #. Tag: para #: reference_constructor.xml:1646 #, no-c-format msgid "" "ST_Polygon is similar to first version oST_MakePolygon except it also sets " "the spatial ref sys (SRID) of the polygon. Will not work with " "MULTILINESTRINGS so use LineMerge to merge multilines. Also does not create " "polygons with holes. Use ST_MakePolygon for that." msgstr "" #. Tag: para #: reference_constructor.xml:1651 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.3.2" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1660 #, no-c-format msgid "" "--a 2d polygon\n" "SELECT ST_Polygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, " "75.15 29.53)'), 4326);\n" "\n" "--result--\n" "POLYGON((75.15 29.53,77 29,77.6 29.5,75.15 29.53))\n" "--a 3d polygon\n" "SELECT ST_AsEWKT(ST_Polygon(ST_GeomFromEWKT('LINESTRING(75.15 29.53 1,77 29 " "1,77.6 29.5 1, 75.15 29.53 1)'), 4326));\n" "\n" "result\n" "------\n" "SRID=4326;POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))" msgstr "" #. Tag: para #: reference_constructor.xml:1667 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_constructor.xml:1673 #, no-c-format msgid "ST_PolygonFromText" msgstr "" #. Tag: funcsynopsis #: reference_constructor.xml:1680 #, no-c-format msgid "" " geometry ST_PolygonFromText text WKT " " geometry " "ST_PolygonFromText text WKT integer " "srid " msgstr "" #. Tag: para #: reference_constructor.xml:1696 #, no-c-format msgid "" "Makes a Geometry from WKT with the given SRID. If SRID is not give, it " "defaults to -1. Returns null if WKT is not a polygon." msgstr "" #. Tag: para #: reference_constructor.xml:1703 #, no-c-format msgid "" "If you are absolutely sure all your WKT geometries are polygons, don't use " "this function. It is slower than ST_GeomFromText since it adds an additional " "validation step." msgstr "" #. Tag: para #: reference_constructor.xml:1706 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 8.3.6" msgstr "" #. Tag: programlisting #: reference_constructor.xml:1712 #, no-c-format msgid "" "SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 " "42.3902909739571,-71.1776820268866 42.3903701743239,\n" "-71.1776063012595 42.3903825660754,-71.1775826583081 " "42.3903033653531,-71.1776585052917 42.3902909739571))');\n" "st_polygonfromtext\n" "------------------\n" "010300000001000000050000006...\n" "\n" "\n" "SELECT ST_PolygonFromText('POINT(1 2)') IS NULL as point_is_notpoly;\n" "\n" "point_is_not_poly\n" "----------\n" "t" msgstr "" #. Tag: refname #: reference_constructor.xml:1725 #, no-c-format msgid "ST_WKBToSQL" msgstr "" #. Tag: refpurpose #: reference_constructor.xml:1726 #, no-c-format msgid "" "Return a specified ST_Geometry value from Well-Known Binary representation " "(WKB). This is an alias name for ST_GeomFromWKB that takes no srid" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1730 #, no-c-format msgid "" "geometry ST_WKBToSQL " "bytea WKB" msgstr "" #. Tag: para #: reference_constructor.xml:1738 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.36" msgstr "" #. Tag: refname #: reference_constructor.xml:1748 #, no-c-format msgid "ST_WKTToSQL" msgstr "" #. Tag: funcprototype #: reference_constructor.xml:1753 #, no-c-format msgid "" "geometry ST_WKTToSQL " "text WKT" msgstr "" #. Tag: para #: reference_constructor.xml:1761 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.34" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_type.xml.po0000644000000000000000000001552212025614072022113 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 21:04+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: para #: reference_type.xml:5 #, no-c-format msgid "" "This section lists the PostgreSQL data types installed by PostGIS. Note we " "describe the casting behavior of these which is very important especially " "when designing your own functions." msgstr "" #. Tag: para #: reference_type.xml:8 #, no-c-format msgid "" "A Cast is when one type is coerced into another type. PostgreSQL is unique " "from most databases in that it allows you to define casting behavior for " "custom types and the functions used for casting. A cast can be specified as " "automatic in which case, you do not have to do a CAST(myfoo As otherfootype) " "or myfoo::otherfootype if you are feeding it to a function that only works " "with otherfootype and there is an automatic cast in place for it." msgstr "" #. Tag: para #: reference_type.xml:13 #, no-c-format msgid "" "The danger of relying on automatic cast behavior is when you have an " "overloaded function say one that takes a box2d and one that takes a box3d " "but no geometry. What happens is that both functions are equally good to use " "with geometry since geometry has an autocast for both -- so you end up with " "an ambiguous function error. To force PostgreSQL to choose, you do a CAST" "(mygeom As box3d) or mygeom::box3d." msgstr "" #. Tag: para #: reference_type.xml:17 #, no-c-format msgid "" "At least as of PostgreSQL 8.3 - Everything can be CAST " "to text (presumably because of the magical unknown type), so no defined " "CASTS for that need to be present for you to CAST an object to text." msgstr "" #. Tag: title #: reference_type.xml:20 #, no-c-format msgid "PostgreSQL PostGIS Geometry/Geography/Box Types" msgstr "" #. Tag: refname #: reference_type.xml:24 #, no-c-format msgid "box2d" msgstr "" #. Tag: refpurpose #: reference_type.xml:25 #, no-c-format msgid "" "A box composed of x min, ymin, xmax, ymax. Often used to return the 2d " "enclosing box of a geometry." msgstr "" #. Tag: title #: reference_type.xml:29 reference_type.xml:40 reference_type.xml:79 #: reference_type.xml:136 reference_type.xml:155 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_type.xml:30 #, no-c-format msgid "" "box2d is a spatial data type used to represent the enclosing box of a " "geometry or set of geometries. ST_Extent in earlier versions prior to " "PostGIS 1.4 would return a box2d." msgstr "" #. Tag: refname #: reference_type.xml:35 #, no-c-format msgid "box3d" msgstr "" #. Tag: refpurpose #: reference_type.xml:36 #, no-c-format msgid "" "A box composed of x min, ymin, zmin, xmax, ymax, zmax. Often used to return " "the 3d extent of a geometry or collection of geometries." msgstr "" #. Tag: para #: reference_type.xml:41 #, no-c-format msgid "" "box3d is a postgis spatial data type used to represent the enclosing box of " "a geometry or set of geometries. ST_3DExtent returns a box3d object." msgstr "" #. Tag: title #: reference_type.xml:45 reference_type.xml:84 reference_type.xml:160 #, no-c-format msgid "Casting Behavior" msgstr "" #. Tag: para #: reference_type.xml:46 reference_type.xml:85 reference_type.xml:161 #, no-c-format msgid "" "This section lists the automatic as well as explicit casts allowed for this " "data type" msgstr "" #. Tag: entry #: reference_type.xml:51 reference_type.xml:90 reference_type.xml:166 #, no-c-format msgid "Cast To" msgstr "" #. Tag: entry #: reference_type.xml:52 reference_type.xml:91 reference_type.xml:167 #, no-c-format msgid "Behavior" msgstr "" #. Tag: entry #: reference_type.xml:55 reference_type.xml:94 #, no-c-format msgid "box" msgstr "" #. Tag: entry #: reference_type.xml:56 reference_type.xml:60 reference_type.xml:64 #: reference_type.xml:95 reference_type.xml:99 reference_type.xml:103 #: reference_type.xml:107 reference_type.xml:111 reference_type.xml:115 #, no-c-format msgid "automatic" msgstr "" #. Tag: entry #: reference_type.xml:59 reference_type.xml:98 #, no-c-format msgid "box2d" msgstr "" #. Tag: entry #: reference_type.xml:63 reference_type.xml:170 #, no-c-format msgid "geometry" msgstr "" #. Tag: refname #: reference_type.xml:74 #, no-c-format msgid "geometry" msgstr "" #. Tag: refpurpose #: reference_type.xml:75 #, no-c-format msgid "Planar spatial data type." msgstr "" #. Tag: para #: reference_type.xml:80 #, no-c-format msgid "" "geometry is a fundamental postgis spatial data type used to represent a " "feature in the Euclidean coordinate system." msgstr "" #. Tag: entry #: reference_type.xml:102 #, no-c-format msgid "box3d" msgstr "" #. Tag: entry #: reference_type.xml:106 #, no-c-format msgid "bytea" msgstr "" #. Tag: entry #: reference_type.xml:110 #, no-c-format msgid "geography" msgstr "" #. Tag: entry #: reference_type.xml:114 #, no-c-format msgid "text" msgstr "" #. Tag: title #: reference_type.xml:123 reference_type.xml:143 reference_type.xml:179 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_type.xml:130 #, no-c-format msgid "geometry_dump" msgstr "" #. Tag: refpurpose #: reference_type.xml:131 #, no-c-format msgid "" "A spatial datatype with two fields - geom (holding a geometry object) and " "path[] (a 1-d array holding the position of the geometry within the dumped " "object.)" msgstr "" #. Tag: para #: reference_type.xml:137 #, no-c-format msgid "" "geometry_dump is a compound data type consisting of a geometry object " "referenced by the .geom field and path[] a 1-dimensional integer array " "(starting at 1 e.g. path[1] to get first element) array that defines the " "navigation path within the dumped geometry to find this element. It is used " "by the ST_Dump* family of functions as an output type to explode a more " "complex geometry into its constituent parts and location of parts." msgstr "" #. Tag: refname #: reference_type.xml:150 #, no-c-format msgid "geography" msgstr "" #. Tag: refpurpose #: reference_type.xml:151 #, no-c-format msgid "Ellipsoidal spatial data type." msgstr "" #. Tag: para #: reference_type.xml:156 #, no-c-format msgid "" "geography is a spatial data type used to represent a feature in the round-" "earth coordinate system." msgstr "" #. Tag: entry #: reference_type.xml:171 #, no-c-format msgid "explicit" msgstr "" #. Tag: para #: reference_type.xml:180 #, no-c-format msgid ", " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_editor.xml.po0000644000000000000000000022040712025614072022420 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_editor.xml:3 #, no-c-format msgid "Geometry Editors" msgstr "" #. Tag: refname #: reference_editor.xml:7 #, no-c-format msgid "ST_AddPoint" msgstr "" #. Tag: refpurpose #: reference_editor.xml:8 #, no-c-format msgid "" "Adds a point to a LineString before point <position> (0-based index)." msgstr "" #. Tag: funcprototype #: reference_editor.xml:13 #, no-c-format msgid "" "geometry ST_AddPoint " "geometry linestring " "geometry point" msgstr "" #. Tag: funcprototype #: reference_editor.xml:20 #, no-c-format msgid "" "geometry ST_AddPoint " "geometry linestring " "geometry point " "integer position" msgstr "" #. Tag: title #: reference_editor.xml:30 reference_editor.xml:89 reference_editor.xml:148 #: reference_editor.xml:193 reference_editor.xml:235 reference_editor.xml:277 #: reference_editor.xml:317 reference_editor.xml:357 reference_editor.xml:407 #: reference_editor.xml:453 reference_editor.xml:495 reference_editor.xml:543 #: reference_editor.xml:582 reference_editor.xml:616 reference_editor.xml:649 #: reference_editor.xml:693 reference_editor.xml:742 reference_editor.xml:789 #: reference_editor.xml:838 reference_editor.xml:902 reference_editor.xml:962 #: reference_editor.xml:1004 reference_editor.xml:1047 #: reference_editor.xml:1124 reference_editor.xml:1202 #: reference_editor.xml:1338 reference_editor.xml:1421 #: reference_editor.xml:1475 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_editor.xml:32 #, no-c-format msgid "" "Adds a point to a LineString before point <position> (0-based index). " "Third parameter can be omitted or set to -1 for appending." msgstr "" #. Tag: para #: reference_editor.xml:35 reference_editor.xml:460 reference_editor.xml:619 #: reference_editor.xml:1009 #, no-c-format msgid "Availability: 1.1.0" msgstr "" #. Tag: para #: reference_editor.xml:36 reference_editor.xml:111 reference_editor.xml:158 #: reference_editor.xml:200 reference_editor.xml:241 reference_editor.xml:321 #: reference_editor.xml:366 reference_editor.xml:416 reference_editor.xml:620 #: reference_editor.xml:702 reference_editor.xml:752 reference_editor.xml:800 #: reference_editor.xml:851 reference_editor.xml:917 reference_editor.xml:1011 #: reference_editor.xml:1155 reference_editor.xml:1429 #: reference_editor.xml:1488 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: title #: reference_editor.xml:40 reference_editor.xml:117 reference_editor.xml:163 #: reference_editor.xml:205 reference_editor.xml:247 reference_editor.xml:287 #: reference_editor.xml:327 reference_editor.xml:372 reference_editor.xml:421 #: reference_editor.xml:465 reference_editor.xml:514 reference_editor.xml:554 #: reference_editor.xml:590 reference_editor.xml:624 reference_editor.xml:655 #: reference_editor.xml:711 reference_editor.xml:758 reference_editor.xml:807 #: reference_editor.xml:859 reference_editor.xml:924 reference_editor.xml:976 #: reference_editor.xml:1015 reference_editor.xml:1063 #: reference_editor.xml:1160 reference_editor.xml:1236 #: reference_editor.xml:1366 reference_editor.xml:1434 #: reference_editor.xml:1494 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_editor.xml:41 #, no-c-format msgid "" "--guarantee all linestrings in a table are closed\n" " --by adding the start point of each linestring to the end of " "the line string\n" " --only for those that are not closed\n" " UPDATE sometable\n" " SET the_geom = ST_AddPoint(the_geom, ST_StartPoint" "(the_geom))\n" " FROM sometable\n" " WHERE ST_IsClosed(the_geom) = false;\n" "\n" " --Adding point to a 3-d line\n" " SELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT('LINESTRING(0 0 " "1, 1 1 1)'), ST_MakePoint(1, 2, 3)));\n" "\n" " --result\n" " st_asewkt\n" " ----------\n" " LINESTRING(0 0 1,1 1 1,1 2 3)" msgstr "" #. Tag: title #: reference_editor.xml:44 reference_editor.xml:124 reference_editor.xml:170 #: reference_editor.xml:212 reference_editor.xml:254 reference_editor.xml:294 #: reference_editor.xml:334 reference_editor.xml:381 reference_editor.xml:427 #: reference_editor.xml:470 reference_editor.xml:519 reference_editor.xml:559 #: reference_editor.xml:595 reference_editor.xml:628 reference_editor.xml:718 #: reference_editor.xml:765 reference_editor.xml:814 reference_editor.xml:866 #: reference_editor.xml:931 reference_editor.xml:981 reference_editor.xml:1019 #: reference_editor.xml:1071 reference_editor.xml:1167 #: reference_editor.xml:1311 reference_editor.xml:1388 #: reference_editor.xml:1447 reference_editor.xml:1501 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_editor.xml:45 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_editor.xml:51 #, no-c-format msgid "ST_Affine" msgstr "" #. Tag: refpurpose #: reference_editor.xml:53 #, no-c-format msgid "" "Applies a 3d affine transformation to the geometry to do things " "like translate, rotate, scale in one step." msgstr "" #. Tag: funcsynopsis #: reference_editor.xml:57 #, no-c-format msgid "" " geometry ST_Affine " "geometry geomA " "float a " "float b " "float c " "float d " "float e " "float f " "float g " "float h " "float i " "float xoff " "float yoff " "float zoff geometry ST_Affine geometry geomA float a float b float d float e float xoff float yoff " msgstr "" #. Tag: para #: reference_editor.xml:91 #, no-c-format msgid "" "Applies a 3d affine transformation to the geometry to do things like " "translate, rotate, scale in one step." msgstr "" #. Tag: para #: reference_editor.xml:92 #, no-c-format msgid "" "Version 1: The call ST_Affine(geom, a, b, c, d, e, f, g, h, " "i, xoff, yoff, zoff) represents the transformation matrix " "/ a b c xoff \\\n" "| d e f yoff |\n" "| g h i zoff |\n" "\\ 0 0 0 1 / and the vertices are transformed as " "follows: x' = a*x + b*y + c*z + xoff\n" "y' = d*x + e*y + f*z + yoff\n" "z' = g*x + h*y + i*z + zoff All of the translate / scale " "functions below are expressed via such an affine transformation." msgstr "" #. Tag: para #: reference_editor.xml:99 #, no-c-format msgid "" "Version 2: Applies a 2d affine transformation to the geometry. The call " "ST_Affine(geom, a, b, d, e, xoff, yoff) " "represents the transformation matrix / a b 0 xoff " "\\ / a b xoff \\\n" "| d e 0 yoff | rsp. | d e yoff |\n" "| 0 0 1 0 | \\ 0 0 1 /\n" "\\ 0 0 0 1 / and the vertices are transformed as " "follows: x' = a*x + b*y + xoff\n" "y' = d*x + e*y + yoff\n" "z' = z This method is a subcase of the 3D method above." msgstr "" #. Tag: para #: reference_editor.xml:105 reference_editor.xml:699 reference_editor.xml:749 #: reference_editor.xml:797 reference_editor.xml:846 reference_editor.xml:915 #, no-c-format msgid "" "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was " "introduced." msgstr "" #. Tag: para #: reference_editor.xml:106 #, no-c-format msgid "Availability: 1.1.2. Name changed from Affine to ST_Affine in 1.2.2" msgstr "" #. Tag: para #: reference_editor.xml:107 reference_editor.xml:849 reference_editor.xml:911 #: reference_editor.xml:1356 reference_editor.xml:1426 #: reference_editor.xml:1484 #, no-c-format msgid "" "Prior to 1.3.4, this function crashes if used with geometries that contain " "CURVES. This is fixed in 1.3.4+" msgstr "" #. Tag: para #: reference_editor.xml:109 reference_editor.xml:157 reference_editor.xml:198 #: reference_editor.xml:240 reference_editor.xml:365 reference_editor.xml:417 #: reference_editor.xml:704 reference_editor.xml:751 reference_editor.xml:799 #: reference_editor.xml:853 reference_editor.xml:916 reference_editor.xml:1361 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_editor.xml:110 reference_editor.xml:705 reference_editor.xml:753 #: reference_editor.xml:801 reference_editor.xml:854 reference_editor.xml:919 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: para #: reference_editor.xml:112 reference_editor.xml:156 reference_editor.xml:199 #: reference_editor.xml:242 reference_editor.xml:282 reference_editor.xml:322 #: reference_editor.xml:367 reference_editor.xml:703 reference_editor.xml:852 #: reference_editor.xml:918 reference_editor.xml:1059 #: reference_editor.xml:1360 reference_editor.xml:1430 #: reference_editor.xml:1489 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: programlisting #: reference_editor.xml:119 #, no-c-format msgid "" "--Rotate a 3d line 180 degrees about the z axis. Note this is long-hand for " "doing ST_Rotate();\n" " SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), " "cos(pi()), 0, 0, 0, 1, 0, 0, 0)) As using_affine,\n" " ST_AsEWKT(ST_Rotate(the_geom, pi())) As using_rotate\n" " FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As " "the_geom) As foo;\n" " using_affine | using_rotate\n" "-----------------------------+-----------------------------\n" " LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3)\n" "(1 row)\n" "\n" "--Rotate a 3d line 180 degrees in both the x and z axis\n" "SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos" "(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0))\n" " FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As " "the_geom) As foo;\n" " st_asewkt\n" "-------------------------------\n" " LINESTRING(-1 -2 -3,-1 -4 -3)\n" "(1 row)" msgstr "" #. Tag: para #: reference_editor.xml:126 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_editor.xml:132 #, no-c-format msgid "ST_Force_2D" msgstr "" #. Tag: refpurpose #: reference_editor.xml:134 #, no-c-format msgid "" "Forces the geometries into a \"2-dimensional mode\" so that all output " "representations will only have the X and Y coordinates." msgstr "" #. Tag: funcprototype #: reference_editor.xml:140 #, no-c-format msgid "" "geometry ST_Force_2D " "geometry geomA" msgstr "" #. Tag: para #: reference_editor.xml:150 #, no-c-format msgid "" "Forces the geometries into a \"2-dimensional mode\" so that all output " "representations will only have the X and Y coordinates. This is useful for " "force OGC-compliant output (since OGC only specifies 2-D geometries)." msgstr "" #. Tag: para #: reference_editor.xml:155 reference_editor.xml:197 reference_editor.xml:239 #: reference_editor.xml:362 reference_editor.xml:415 reference_editor.xml:1358 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces was introduced." msgstr "" #. Tag: programlisting #: reference_editor.xml:165 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_Force_2D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 " "5 2, 6 7 2, 5 6 2)')));\n" " st_asewkt\n" "-------------------------------------\n" "CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)\n" "\n" "SELECT ST_AsEWKT(ST_Force_2D('POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 " "2,1 3 2,1 1 2))'));\n" "\n" " st_asewkt\n" "----------------------------------------------\n" " POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))" msgstr "" #. Tag: refname #: reference_editor.xml:178 #, no-c-format msgid "ST_Force_3D" msgstr "" #. Tag: refpurpose #: reference_editor.xml:180 #, no-c-format msgid "Forces the geometries into XYZ mode. This is an alias for ST_Force_3DZ." msgstr "" #. Tag: funcprototype #: reference_editor.xml:185 #, no-c-format msgid "" "geometry ST_Force_3D " "geometry geomA" msgstr "" #. Tag: para #: reference_editor.xml:195 #, no-c-format msgid "" "Forces the geometries into XYZ mode. This is an alias for ST_Force_3DZ. If a " "geometry has no Z component, then a 0 Z coordinate is tacked on." msgstr "" #. Tag: programlisting #: reference_editor.xml:207 #, no-c-format msgid "" "--Nothing happens to an already 3D geometry\n" " SELECT ST_AsEWKT(ST_Force_3D(ST_GeomFromEWKT('CIRCULARSTRING" "(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));\n" " st_asewkt\n" "-----------------------------------------------\n" " CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)\n" "\n" "\n" "SELECT ST_AsEWKT(ST_Force_3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 " "1))'));\n" "\n" " st_asewkt\n" "--------------------------------------------------------------\n" " POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))" msgstr "" #. Tag: para #: reference_editor.xml:214 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_editor.xml:220 #, no-c-format msgid "ST_Force_3DZ" msgstr "" #. Tag: refpurpose #: reference_editor.xml:222 #, no-c-format msgid "Forces the geometries into XYZ mode. This is a synonym for ST_Force_3D." msgstr "" #. Tag: funcprototype #: reference_editor.xml:227 #, no-c-format msgid "" "geometry ST_Force_3DZ " "geometry geomA" msgstr "" #. Tag: para #: reference_editor.xml:237 #, no-c-format msgid "" "Forces the geometries into XYZ mode. This is a synonym for ST_Force_3DZ. If " "a geometry has no Z component, then a 0 Z coordinate is tacked on." msgstr "" #. Tag: programlisting #: reference_editor.xml:249 #, no-c-format msgid "" "--Nothing happens to an already 3D geometry\n" "SELECT ST_AsEWKT(ST_Force_3DZ(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, " "4 5 2, 6 7 2, 5 6 2)')));\n" " st_asewkt\n" "-----------------------------------------------\n" " CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)\n" "\n" "\n" "SELECT ST_AsEWKT(ST_Force_3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 " "1))'));\n" "\n" " st_asewkt\n" "--------------------------------------------------------------\n" " POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))" msgstr "" #. Tag: para #: reference_editor.xml:256 reference_editor.xml:336 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_editor.xml:262 #, no-c-format msgid "ST_Force_3DM" msgstr "" #. Tag: refpurpose #: reference_editor.xml:264 #, no-c-format msgid "Forces the geometries into XYM mode." msgstr "" #. Tag: funcprototype #: reference_editor.xml:269 #, no-c-format msgid "" "geometry ST_Force_3DM " "geometry geomA" msgstr "" #. Tag: para #: reference_editor.xml:279 #, no-c-format msgid "" "Forces the geometries into XYM mode. If a geometry has no M component, then " "a 0 M coordinate is tacked on. If it has a Z component, then Z is removed" msgstr "" #. Tag: programlisting #: reference_editor.xml:289 #, no-c-format msgid "" "--Nothing happens to an already 3D geometry\n" "SELECT ST_AsEWKT(ST_Force_3DM(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, " "4 5 2, 6 7 2, 5 6 2)')));\n" " st_asewkt\n" "------------------------------------------------\n" " CIRCULARSTRINGM(1 1 0,2 3 0,4 5 0,6 7 0,5 6 0)\n" "\n" "\n" "SELECT ST_AsEWKT(ST_Force_3DM('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 " "1,1 3 1,1 1 1))'));\n" "\n" " st_asewkt\n" "---------------------------------------------------------------\n" " POLYGONM((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))" msgstr "" #. Tag: para #: reference_editor.xml:296 reference_editor.xml:383 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_editor.xml:302 #, no-c-format msgid "ST_Force_4D" msgstr "" #. Tag: refpurpose #: reference_editor.xml:304 #, no-c-format msgid "Forces the geometries into XYZM mode." msgstr "" #. Tag: funcprototype #: reference_editor.xml:309 #, no-c-format msgid "" "geometry ST_Force_4D " "geometry geomA" msgstr "" #. Tag: para #: reference_editor.xml:319 #, no-c-format msgid "" "Forces the geometries into XYZM mode. 0 is tacked on for missing Z and M " "dimensions." msgstr "" #. Tag: programlisting #: reference_editor.xml:329 #, no-c-format msgid "" "--Nothing happens to an already 3D geometry\n" "SELECT ST_AsEWKT(ST_Force_4D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 " "5 2, 6 7 2, 5 6 2)')));\n" " st_asewkt\n" "---------------------------------------------------------\n" " CIRCULARSTRING(1 1 2 0,2 3 2 0,4 5 2 0,6 7 2 0,5 6 2 0)\n" "\n" "\n" "\n" "SELECT ST_AsEWKT(ST_Force_4D('MULTILINESTRINGM((0 0 1,0 5 2,5 0 3,0 0 4),(1 " "1 1,3 1 1,1 3 1,1 1 1))'));\n" "\n" " st_asewkt\n" "--------------------------------------------------------------------------------------\n" " MULTILINESTRING((0 0 0 1,0 5 0 2,5 0 0 3,0 0 0 4),(1 1 0 1,3 1 0 1,1 3 0 " "1,1 1 0 1))" msgstr "" #. Tag: refname #: reference_editor.xml:342 #, no-c-format msgid "ST_Force_Collection" msgstr "" #. Tag: refpurpose #: reference_editor.xml:344 #, no-c-format msgid "Converts the geometry into a GEOMETRYCOLLECTION." msgstr "" #. Tag: funcprototype #: reference_editor.xml:349 #, no-c-format msgid "" "geometry ST_Force_Collection " "geometry geomA" msgstr "" #. Tag: para #: reference_editor.xml:359 #, no-c-format msgid "" "Converts the geometry into a GEOMETRYCOLLECTION. This is useful for " "simplifying the WKB representation." msgstr "" #. Tag: para #: reference_editor.xml:363 #, no-c-format msgid "" "Availability: 1.2.2, prior to 1.3.4 this function will crash with Curves. " "This is fixed in 1.3.4+" msgstr "" #. Tag: programlisting #: reference_editor.xml:374 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_Force_Collection('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 " "1 1,3 1 1,1 3 1,1 1 1))'));\n" "\n" " st_asewkt\n" "----------------------------------------------------------------------------------\n" " GEOMETRYCOLLECTION(POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 " "1)))\n" "\n" "\n" " SELECT ST_AsText(ST_Force_Collection('CIRCULARSTRING(220227 150406,2220227 " "150407,220227 150406)'));\n" " st_astext\n" "--------------------------------------------------------------------------------\n" " GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 " "150406))\n" "(1 row)" msgstr "" #. Tag: programlisting #: reference_editor.xml:376 #, no-c-format msgid "" "-- POLYHEDRAL example --\n" "SELECT ST_AsEWKT(ST_Force_Collection('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 " "1,0 1 0,0 0 0)),\n" " ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),\n" " ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),\n" " ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),\n" " ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),\n" " ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))'))\n" "\n" " st_asewkt\n" "----------------------------------------------------------------------------------\n" "GEOMETRYCOLLECTION(\n" " POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),\n" " POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),\n" " POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),\n" " POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),\n" " POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),\n" " POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))\n" ")" msgstr "" #. Tag: refname #: reference_editor.xml:390 #, no-c-format msgid "ST_ForceRHR" msgstr "" #. Tag: refpurpose #: reference_editor.xml:392 #, no-c-format msgid "" "Forces the orientation of the vertices in a polygon to follow the Right-Hand-" "Rule." msgstr "" #. Tag: funcprototype #: reference_editor.xml:398 #, no-c-format msgid "" "boolean ST_ForceRHR " "geometry g" msgstr "" #. Tag: para #: reference_editor.xml:409 #, no-c-format msgid "" "Forces the orientation of the vertices in a polygon to follow the Right-Hand-" "Rule. In GIS terminology, this means that the area that is bounded by the " "polygon is to the right of the boundary. In particular, the exterior ring is " "orientated in a clockwise direction and the interior rings in a counter-" "clockwise direction." msgstr "" #. Tag: programlisting #: reference_editor.xml:423 #, no-c-format msgid "" "SELECT ST_AsEWKT(\n" " ST_ForceRHR(\n" " 'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 " "2))'\n" " )\n" ");\n" " st_asewkt\n" "--------------------------------------------------------------\n" " POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))\n" "(1 row)" msgstr "" #. Tag: para #: reference_editor.xml:429 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_editor.xml:437 #, no-c-format msgid "ST_LineMerge" msgstr "" #. Tag: refpurpose #: reference_editor.xml:439 #, no-c-format msgid "" "Returns a (set of) LineString(s) formed by sewing together a MULTILINESTRING." msgstr "" #. Tag: funcprototype #: reference_editor.xml:445 #, no-c-format msgid "" "geometry ST_LineMerge " "geometry amultilinestring" msgstr "" #. Tag: para #: reference_editor.xml:455 #, no-c-format msgid "" "Returns a (set of) LineString(s) formed by sewing together the constituent " "line work of a MULTILINESTRING." msgstr "" #. Tag: para #: reference_editor.xml:457 #, no-c-format msgid "" "Only use with MULTILINESTRING/LINESTRINGs. If you feed a polygon or geometry " "collection into this function, it will return an empty GEOMETRYCOLLECTION" msgstr "" #. Tag: para #: reference_editor.xml:461 #, no-c-format msgid "requires GEOS >= 2.1.0" msgstr "" #. Tag: programlisting #: reference_editor.xml:467 #, no-c-format msgid "" "SELECT ST_AsText(ST_LineMerge(\n" "ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 " "-33,-46 -32))')\n" " )\n" ");\n" "st_astext\n" "--------------------------------------------------------------------------------------------------\n" "LINESTRING(-29 -27,-30 -29.7,-36 -31,-45 -33,-46 -32)\n" "(1 row)\n" "\n" "--If can't be merged - original MULTILINESTRING is returned\n" "SELECT ST_AsText(ST_LineMerge(\n" "ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 " "-33.2,-46 -32))')\n" ")\n" ");\n" "st_astext\n" "----------------\n" "MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33))" msgstr "" #. Tag: para #: reference_editor.xml:471 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_editor.xml:477 #, no-c-format msgid "ST_CollectionExtract" msgstr "" #. Tag: refpurpose #: reference_editor.xml:479 #, no-c-format msgid "" "Given a (multi)geometry, returns a (multi)geometry consisting only of " "elements of the specified type." msgstr "" #. Tag: funcprototype #: reference_editor.xml:486 #, no-c-format msgid "" "geometry ST_CollectionExtract " "geometry collection integer type" msgstr "" #. Tag: para #: reference_editor.xml:497 #, no-c-format msgid "" "Given a (multi)geometry, returns a (multi)geometry consisting only of " "elements of the specified type. Sub-geometries that are not the specified " "type are ignored. If there are no sub-geometries of the right type, an EMPTY " "geometry will be returned. Only points, lines and polygons are supported. " "Type numbers are 1 == POINT, 2 == LINESTRING, 3 == POLYGON." msgstr "" #. Tag: para #: reference_editor.xml:503 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: para #: reference_editor.xml:505 #, no-c-format msgid "" "Prior to 1.5.3 this function returned non-collection inputs untouched, no " "matter type. In 1.5.3 non-matching single geometries result in a NULL " "return. In of 2.0.0 every case of missing match results in a typed EMPTY " "return." msgstr "" #. Tag: programlisting #: reference_editor.xml:516 #, no-c-format msgid "" "-- Constants: 1 == POINT, 2 == LINESTRING, 3 == POLYGON\n" "SELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION" "(GEOMETRYCOLLECTION(POINT(0 0)))'),1));\n" "st_astext\n" "---------------\n" "MULTIPOINT(0 0)\n" "(1 row)\n" "\n" "SELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION" "(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))'),2));\n" "st_astext\n" "---------------\n" "MULTILINESTRING((0 0, 1 1), (2 2, 3 3))\n" "(1 row)" msgstr "" #. Tag: para #: reference_editor.xml:520 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_editor.xml:526 #, no-c-format msgid "ST_CollectionHomogenize" msgstr "" #. Tag: refpurpose #: reference_editor.xml:528 #, no-c-format msgid "" "Given a geometry collection, returns the \"simplest\" representation of the " "contents." msgstr "" #. Tag: funcprototype #: reference_editor.xml:535 #, no-c-format msgid "" "geometry ST_CollectionHomogenize " "geometry collection" msgstr "" #. Tag: para #: reference_editor.xml:545 #, no-c-format msgid "" "Given a geometry collection, returns the \"simplest\" representation of the " "contents. Singletons will be returned as singletons. Collections that are " "homogeneous will be returned as the appropriate multi-type." msgstr "" #. Tag: para #: reference_editor.xml:549 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: programlisting #: reference_editor.xml:556 #, no-c-format msgid "" "SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 " "0))')); \n" "\n" " st_astext\n" " ------------\n" " POINT(0 0)\n" " (1 row)\n" "\n" " SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0)," "POINT(1 1))')); \n" "\n" " st_astext\n" " ---------------------\n" " MULTIPOINT(0 0,1 1)\n" " (1 row)" msgstr "" #. Tag: para #: reference_editor.xml:560 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_editor.xml:566 #, no-c-format msgid "ST_Multi" msgstr "" #. Tag: refpurpose #: reference_editor.xml:568 #, no-c-format msgid "" "Returns the geometry as a MULTI* geometry. If the geometry is " "already a MULTI*, it is returned unchanged." msgstr "" #. Tag: funcprototype #: reference_editor.xml:574 #, no-c-format msgid "" "geometry ST_Multi " "geometry g1" msgstr "" #. Tag: para #: reference_editor.xml:584 #, no-c-format msgid "" "Returns the geometry as a MULTI* geometry. If the geometry is already " "a MULTI*, it is returned unchanged." msgstr "" #. Tag: programlisting #: reference_editor.xml:592 #, no-c-format msgid "" "SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238 2967416,743238 " "2967450,\n" " 743265 2967450,743265.625 2967416,743238 " "2967416))')));\n" " st_astext\n" " --------------------------------------------------------------------------------------------------\n" " MULTIPOLYGON(((743238 2967416,743238 2967450,743265 " "2967450,743265.625 2967416,\n" " 743238 2967416)))\n" " (1 row)" msgstr "" #. Tag: refname #: reference_editor.xml:602 #, no-c-format msgid "ST_RemovePoint" msgstr "" #. Tag: refpurpose #: reference_editor.xml:603 #, no-c-format msgid "Removes point from a linestring. Offset is 0-based." msgstr "" #. Tag: funcprototype #: reference_editor.xml:607 #, no-c-format msgid "" "geometry ST_RemovePoint " "geometry linestring " "integer offset" msgstr "" #. Tag: para #: reference_editor.xml:618 #, no-c-format msgid "" "Removes point from a linestring. Useful for turning a closed ring into an " "open line string" msgstr "" #. Tag: programlisting #: reference_editor.xml:625 #, no-c-format msgid "" "--guarantee no LINESTRINGS are closed\n" "--by removing the end point. The below assumes the_geom is of type " "LINESTRING\n" "UPDATE sometable\n" " SET the_geom = ST_RemovePoint(the_geom, ST_NPoints(the_geom) - 1)\n" " FROM sometable\n" " WHERE ST_IsClosed(the_geom) = true;" msgstr "" #. Tag: para #: reference_editor.xml:629 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_editor.xml:635 #, no-c-format msgid "ST_Reverse" msgstr "" #. Tag: refpurpose #: reference_editor.xml:636 #, no-c-format msgid "Returns the geometry with vertex order reversed." msgstr "" #. Tag: funcprototype #: reference_editor.xml:641 #, no-c-format msgid "" "geometry ST_Reverse " "geometry g1" msgstr "" #. Tag: para #: reference_editor.xml:651 #, no-c-format msgid "Can be used on any geometry and reverses the order of the vertexes." msgstr "" #. Tag: programlisting #: reference_editor.xml:656 #, no-c-format msgid "" "SELECT ST_AsText(the_geom) as line, ST_AsText(ST_Reverse(the_geom)) As " "reverseline\n" "FROM\n" "(SELECT ST_MakeLine(ST_MakePoint(1,2),\n" " ST_MakePoint(1,10)) As the_geom) as foo;\n" "--result\n" " line | reverseline\n" "---------------------+----------------------\n" "LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)" msgstr "" #. Tag: refname #: reference_editor.xml:662 #, no-c-format msgid "ST_Rotate" msgstr "" #. Tag: refpurpose #: reference_editor.xml:664 #, no-c-format msgid "Rotate a geometry rotRadians counter-clockwise about an origin." msgstr "" #. Tag: funcsynopsis #: reference_editor.xml:668 #, no-c-format msgid "" " geometry ST_Rotate " "geometry geomA " "float rotRadians geometry ST_Rotate geometry geomA float rotRadians float x0 float y0 geometry " "ST_Rotate geometry " "geomA float " "rotRadians geometry " "pointOrigin " msgstr "" #. Tag: para #: reference_editor.xml:695 #, no-c-format msgid "" "Rotates geometry rotRadians counter-clockwise about the origin. The rotation " "origin can be specified either as a POINT geometry, or as x and y " "coordinates. If the origin is not specified, the geometry is rotated about " "POINT(0 0)." msgstr "" #. Tag: para #: reference_editor.xml:700 #, no-c-format msgid "" "Enhanced: 2.0.0 additional parameters for specifying the origin of rotation " "were added." msgstr "" #. Tag: para #: reference_editor.xml:701 #, no-c-format msgid "Availability: 1.1.2. Name changed from Rotate to ST_Rotate in 1.2.2" msgstr "" #. Tag: programlisting #: reference_editor.xml:713 #, no-c-format msgid "" "--Rotate 180 degrees\n" "SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()));\n" " st_asewkt\n" "---------------------------------------\n" " LINESTRING(-50 -160,-50 -50,-100 -50)\n" "(1 row)\n" "\n" "--Rotate 30 degrees counter-clockwise at x=50, y=160\n" "SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()/6, 50, " "160));\n" " st_asewkt\n" "---------------------------------------------------------------------------\n" " LINESTRING(50 160,105 64.7372055837117,148.301270189222 89.7372055837117)\n" "(1 row)\n" "\n" "--Rotate 60 degrees clockwise from centroid\n" "SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom)))\n" "FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry AS geom) AS " "foo;\n" " st_asewkt\n" "--------------------------------------------------------------\n" " LINESTRING(116.4225 130.6721,21.1597 75.6721,46.1597 32.3708)\n" "(1 row)" msgstr "" #. Tag: para #: reference_editor.xml:720 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_editor.xml:726 #, no-c-format msgid "ST_RotateX" msgstr "" #. Tag: refpurpose #: reference_editor.xml:728 #, no-c-format msgid "Rotate a geometry rotRadians about the X axis." msgstr "" #. Tag: funcprototype #: reference_editor.xml:733 #, no-c-format msgid "" "geometry ST_RotateX " "geometry geomA " "float rotRadians" msgstr "" #. Tag: para #: reference_editor.xml:744 #, no-c-format msgid "Rotate a geometry geomA - rotRadians about the X axis." msgstr "" #. Tag: para #: reference_editor.xml:746 #, no-c-format msgid "" "ST_RotateX(geomA, rotRadians) is short-hand for ST_Affine" "(geomA, 1, 0, 0, 0, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), " "cos(rotRadians), 0, 0, 0)." msgstr "" #. Tag: para #: reference_editor.xml:750 #, no-c-format msgid "Availability: 1.1.2. Name changed from RotateX to ST_RotateX in 1.2.2" msgstr "" #. Tag: programlisting #: reference_editor.xml:760 #, no-c-format msgid "" "--Rotate a line 90 degrees along x-axis\n" "SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi" "()/2));\n" " st_asewkt\n" "---------------------------\n" " LINESTRING(1 -3 2,1 -1 1)" msgstr "" #. Tag: para #: reference_editor.xml:767 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_editor.xml:773 #, no-c-format msgid "ST_RotateY" msgstr "" #. Tag: refpurpose #: reference_editor.xml:775 #, no-c-format msgid "Rotate a geometry rotRadians about the Y axis." msgstr "" #. Tag: funcprototype #: reference_editor.xml:780 #, no-c-format msgid "" "geometry ST_RotateY " "geometry geomA " "float rotRadians" msgstr "" #. Tag: para #: reference_editor.xml:791 #, no-c-format msgid "Rotate a geometry geomA - rotRadians about the y axis." msgstr "" #. Tag: para #: reference_editor.xml:793 #, no-c-format msgid "" "ST_RotateY(geomA, rotRadians) is short-hand for ST_Affine" "(geomA, cos(rotRadians), 0, sin(rotRadians), 0, 1, 0, -sin(rotRadians), 0, " "cos(rotRadians), 0, 0, 0)." msgstr "" #. Tag: para #: reference_editor.xml:796 #, no-c-format msgid "Availability: 1.1.2. Name changed from RotateY to ST_RotateY in 1.2.2" msgstr "" #. Tag: programlisting #: reference_editor.xml:809 #, no-c-format msgid "" "--Rotate a line 90 degrees along y-axis\n" " SELECT ST_AsEWKT(ST_RotateY(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi" "()/2));\n" " st_asewkt\n" "---------------------------\n" " LINESTRING(3 2 -1,1 1 -1)" msgstr "" #. Tag: para #: reference_editor.xml:816 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_editor.xml:822 #, no-c-format msgid "ST_RotateZ" msgstr "" #. Tag: refpurpose #: reference_editor.xml:824 #, no-c-format msgid "Rotate a geometry rotRadians about the Z axis." msgstr "" #. Tag: funcprototype #: reference_editor.xml:829 #, no-c-format msgid "" "geometry ST_RotateZ " "geometry geomA " "float rotRadians" msgstr "" #. Tag: para #: reference_editor.xml:840 #, no-c-format msgid "Rotate a geometry geomA - rotRadians about the Z axis." msgstr "" #. Tag: para #: reference_editor.xml:842 #, no-c-format msgid "This is a synonym for ST_Rotate" msgstr "" #. Tag: para #: reference_editor.xml:843 #, no-c-format msgid "" "ST_RotateZ(geomA, rotRadians) is short-hand for SELECT " "ST_Affine(geomA, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos" "(rotRadians), 0, 0, 0, 1, 0, 0, 0)." msgstr "" #. Tag: para #: reference_editor.xml:848 #, no-c-format msgid "Availability: 1.1.2. Name changed from RotateZ to ST_RotateZ in 1.2.2" msgstr "" #. Tag: programlisting #: reference_editor.xml:861 #, no-c-format msgid "" "--Rotate a line 90 degrees along z-axis\n" "SELECT ST_AsEWKT(ST_RotateZ(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi" "()/2));\n" " st_asewkt\n" "---------------------------\n" " LINESTRING(-2 1 3,-1 1 1)\n" "\n" " --Rotate a curved circle around z-axis\n" "SELECT ST_AsEWKT(ST_RotateZ(the_geom, pi()/2))\n" "FROM (SELECT ST_LineToCurve(ST_Buffer(ST_GeomFromText('POINT(234 567)'), 3)) " "As the_geom) As foo;\n" "\n" " st_asewkt\n" "----------------------------------------------------------------------------------------------------------------------------\n" " CURVEPOLYGON(CIRCULARSTRING(-567 237,-564.87867965644 236.12132034356,-564 " "234,-569.12132034356 231.87867965644,-567 237))" msgstr "" #. Tag: para #: reference_editor.xml:868 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_editor.xml:874 #, no-c-format msgid "ST_Scale" msgstr "" #. Tag: refpurpose #: reference_editor.xml:876 #, no-c-format msgid "" "Scales the geometry to a new size by multiplying the ordinates " "with the parameters. Ie: ST_Scale(geom, Xfactor, Yfactor, Zfactor)." msgstr "" #. Tag: funcsynopsis #: reference_editor.xml:883 #, no-c-format msgid "" " geometry ST_Scale " "geometry geomA " "float XFactor " "float YFactor " "float ZFactor geometry ST_Scale geometry geomA float XFactor float YFactor " msgstr "" #. Tag: para #: reference_editor.xml:904 #, no-c-format msgid "" "Scales the geometry to a new size by multiplying the ordinates with " "the parameters. Ie: ST_Scale(geom, Xfactor, Yfactor, Zfactor)." msgstr "" #. Tag: para #: reference_editor.xml:908 #, no-c-format msgid "" "ST_Scale(geomA, XFactor, YFactor, ZFactor) is short-hand for " "ST_Affine(geomA, XFactor, 0, 0, 0, YFactor, 0, 0, 0, ZFactor, 0, 0, 0)" "." msgstr "" #. Tag: para #: reference_editor.xml:914 reference_editor.xml:1487 #, no-c-format msgid "Availability: 1.1.0." msgstr "" #. Tag: programlisting #: reference_editor.xml:926 #, no-c-format msgid "" "--Version 1: scale X, Y, Z\n" "SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, " "0.75, 0.8));\n" " st_asewkt\n" "--------------------------------------\n" " LINESTRING(0.5 1.5 2.4,0.5 0.75 0.8)\n" "\n" "--Version 2: Scale X Y\n" " SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, " "0.75));\n" " st_asewkt\n" "----------------------------------\n" " LINESTRING(0.5 1.5 3,0.5 0.75 1)" msgstr "" #. Tag: para #: reference_editor.xml:933 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_editor.xml:939 #, no-c-format msgid "ST_Segmentize" msgstr "" #. Tag: refpurpose #: reference_editor.xml:941 #, no-c-format msgid "" "Return a modified geometry/geography having no segment longer than the given " "distance. Distance computation is performed in 2d only. For geometry, length " "units are in units of spatial reference. For geography, units are in meters." msgstr "" #. Tag: funcsynopsis #: reference_editor.xml:947 #, no-c-format msgid "" " geometry ST_Segmentize geometry geom float max_segment_length geometry " "ST_Segmentize geography geog float " "max_segment_length " msgstr "" #. Tag: para #: reference_editor.xml:964 #, no-c-format msgid "" "Returns a modified geometry having no segment longer than the given " "max_segment_length. Distance computation is performed in " "2d only. For geometry, length units are in units of spatial reference. For " "geography, units are in meters." msgstr "" #. Tag: para #: reference_editor.xml:967 reference_editor.xml:1428 #, no-c-format msgid "Availability: 1.2.2" msgstr "" #. Tag: para #: reference_editor.xml:968 #, no-c-format msgid "Enhanced: 2.1.0 support for geography was introduced." msgstr "" #. Tag: para #: reference_editor.xml:969 #, no-c-format msgid "" "Changed: 2.1.0 As a result of the introduction of geography support: The " "construct SELECT ST_Segmentize('LINESTRING(1 2, 3 4)',0.5); " "will result in ambiguous function error. You need to have properly typed " "object e.g. a geometry/geography column, use ST_GeomFromText, " "ST_GeogFromText or SELECT ST_Segmentize('LINESTRING(1 2, 3 4)'::" "geometry,0.5);" msgstr "" #. Tag: para #: reference_editor.xml:971 #, no-c-format msgid "" "This will only increase segments. It will not lengthen segments shorter than " "max length" msgstr "" #. Tag: programlisting #: reference_editor.xml:978 #, no-c-format msgid "" "SELECT ST_AsText(ST_Segmentize(\n" "ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 " "-33,-46 -32))')\n" " ,5)\n" ");\n" "st_astext\n" "--------------------------------------------------------------------------------------------------\n" "MULTILINESTRING((-29 -27,-30 -29.7,-34.886615700134 -30.758766735029,-36 " "-31,\n" "-40.8809353009198 -32.0846522890933,-45 -33),\n" "(-45 -33,-46 -32))\n" "(1 row)\n" "\n" "SELECT ST_AsText(ST_Segmentize(ST_GeomFromText('POLYGON((-29 28, -30 40, -29 " "28))'),10));\n" "st_astext\n" "-----------------------\n" "POLYGON((-29 28,-29.8304547985374 37.9654575824488,-30 40,-29.1695452014626 " "30.0345424175512,-29 28))\n" "(1 row)" msgstr "" #. Tag: refname #: reference_editor.xml:988 #, no-c-format msgid "ST_SetPoint" msgstr "" #. Tag: refpurpose #: reference_editor.xml:989 #, no-c-format msgid "Replace point N of linestring with given point. Index is 0-based." msgstr "" #. Tag: funcprototype #: reference_editor.xml:994 #, no-c-format msgid "" "geometry ST_SetPoint " "geometry linestring " "integer zerobasedposition geometry point" msgstr "" #. Tag: para #: reference_editor.xml:1006 #, no-c-format msgid "" "Replace point N of linestring with given point. Index is 0-based. This is " "especially useful in triggers when trying to maintain relationship of joints " "when one vertex moves." msgstr "" #. Tag: programlisting #: reference_editor.xml:1016 #, no-c-format msgid "" "--Change first point in line string from -1 3 to -1 1\n" "SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)'));\n" " st_astext\n" "-----------------------\n" " LINESTRING(-1 1,-1 3)\n" "\n" "---Change last point in a line string (lets play with 3d linestring this " "time)\n" "SELECT ST_AsEWKT(ST_SetPoint(foo.the_geom, ST_NumPoints(foo.the_geom) - 1, " "ST_GeomFromEWKT('POINT(-1 1 3)')))\n" "FROM (SELECT ST_GeomFromEWKT('LINESTRING(-1 2 3,-1 3 4, 5 6 7)') As " "the_geom) As foo;\n" " st_asewkt\n" "-----------------------\n" "LINESTRING(-1 2 3,-1 3 4,-1 1 3)" msgstr "" #. Tag: para #: reference_editor.xml:1020 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_editor.xml:1026 #, no-c-format msgid "ST_SetSRID" msgstr "" #. Tag: refpurpose #: reference_editor.xml:1028 #, no-c-format msgid "Sets the SRID on a geometry to a particular integer value." msgstr "" #. Tag: funcprototype #: reference_editor.xml:1034 #, no-c-format msgid "" "geometry ST_SetSRID " "geometry geom " "integer srid" msgstr "" #. Tag: para #: reference_editor.xml:1049 #, no-c-format msgid "" "Sets the SRID on a geometry to a particular integer value. Useful in " "constructing bounding boxes for queries." msgstr "" #. Tag: para #: reference_editor.xml:1053 #, no-c-format msgid "" "This function does not transform the geometry coordinates in any way - it " "simply sets the meta data defining the spatial reference system the geometry " "is assumed to be in. Use if you want to " "transform the geometry into a new projection." msgstr "" #. Tag: para #: reference_editor.xml:1058 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_editor.xml:1064 #, no-c-format msgid "-- Mark a point as WGS 84 long lat --" msgstr "" #. Tag: programlisting #: reference_editor.xml:1065 #, no-c-format msgid "" "SELECT ST_SetSRID(ST_Point(-123.365556, 48.428611),4326) As wgs84long_lat;\n" "-- the ewkt representation (wrap with ST_AsEWKT) -\n" "SRID=4326;POINT(-123.365556 48.428611)" msgstr "" #. Tag: para #: reference_editor.xml:1066 #, no-c-format msgid "" "-- Mark a point as WGS 84 long lat and then transform to web mercator " "(Spherical Mercator) --" msgstr "" #. Tag: programlisting #: reference_editor.xml:1067 #, no-c-format msgid "" "SELECT ST_Transform(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326),3785) " "As spere_merc;\n" "-- the ewkt representation (wrap with ST_AsEWKT) -\n" "SRID=3785;POINT(-13732990.8753491 6178458.96425423)" msgstr "" #. Tag: para #: reference_editor.xml:1073 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_editor.xml:1080 #, no-c-format msgid "ST_SnapToGrid" msgstr "" #. Tag: refpurpose #: reference_editor.xml:1082 #, no-c-format msgid "Snap all points of the input geometry to a regular grid." msgstr "" #. Tag: funcsynopsis #: reference_editor.xml:1088 #, no-c-format msgid "" " geometry ST_SnapToGrid geometry geomA float originX float originY float sizeX float sizeY geometry " "ST_SnapToGrid geometry geomA float " "sizeX float " "sizeY " "geometry ST_SnapToGrid " "geometry geomA " "float size geometry ST_SnapToGrid geometry geomA geometry " "pointOrigin float " "sizeX float " "sizeY float " "sizeZ float " "sizeM " msgstr "" #. Tag: para #: reference_editor.xml:1126 #, no-c-format msgid "" "Variant 1,2,3: Snap all points of the input geometry to the grid defined by " "its origin and cell size. Remove consecutive points falling on the same " "cell, eventually returning NULL if output points are not enough to define a " "geometry of the given type. Collapsed geometries in a collection are " "stripped from it. Useful for reducing precision." msgstr "" #. Tag: para #: reference_editor.xml:1134 #, no-c-format msgid "" "Variant 4: Introduced 1.1.0 - Snap all points of the input geometry to the " "grid defined by its origin (the second argument, must be a point) and cell " "sizes. Specify 0 as size for any dimension you don't want to snap to a grid." msgstr "" #. Tag: para #: reference_editor.xml:1140 #, no-c-format msgid "" "The returned geometry might loose its simplicity (see )." msgstr "" #. Tag: para #: reference_editor.xml:1145 #, no-c-format msgid "" "Before release 1.1.0 this function always returned a 2d geometry. Starting " "at 1.1.0 the returned geometry will have same dimensionality as the input " "one with higher dimension values untouched. Use the version taking a second " "geometry argument to define all grid dimensions." msgstr "" #. Tag: para #: reference_editor.xml:1152 #, no-c-format msgid "Availability: 1.0.0RC1" msgstr "" #. Tag: para #: reference_editor.xml:1153 #, no-c-format msgid "Availability: 1.1.0 - Z and M support" msgstr "" #. Tag: programlisting #: reference_editor.xml:1162 #, no-c-format msgid "" "--Snap your geometries to a precision grid of 10^-3\n" "UPDATE mytable\n" " SET the_geom = ST_SnapToGrid(the_geom, 0.001);\n" "\n" "SELECT ST_AsText(ST_SnapToGrid(\n" " ST_GeomFromText('LINESTRING(1.1115678 2.123, " "4.111111 3.2374897, 4.11112 3.23748667)'),\n" " 0.001)\n" " );\n" " st_astext\n" "-------------------------------------\n" " LINESTRING(1.112 2.123,4.111 3.237)\n" " --Snap a 4d geometry\n" "SELECT ST_AsEWKT(ST_SnapToGrid(\n" " ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 2.3456 1.11111,\n" " 4.111111 3.2374897 3.1234 1.1111, -1.11111112 2.123 2.3456 " "1.1111112)'),\n" " ST_GeomFromEWKT('POINT(1.12 2.22 3.2 4.4444)'),\n" " 0.1, 0.1, 0.1, 0.01) );\n" " st_asewkt\n" "------------------------------------------------------------------------------\n" " LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 " "1.1144)\n" "\n" "\n" "--With a 4d geometry - the ST_SnapToGrid(geom,size) only touches x and y " "coords but keeps m and z the same\n" "SELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 " "3 2.3456,\n" " 4.111111 3.2374897 3.1234 1.1111)'),\n" " 0.01) );\n" " st_asewkt\n" "---------------------------------------------------------\n" " LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)" msgstr "" #. Tag: para #: reference_editor.xml:1169 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_editor.xml:1182 #, no-c-format msgid "ST_Snap" msgstr "" #. Tag: refpurpose #: reference_editor.xml:1184 #, no-c-format msgid "" "Snap segments and vertices of input geometry to vertices of a reference " "geometry." msgstr "" #. Tag: funcprototype #: reference_editor.xml:1192 #, no-c-format msgid "" "geometry ST_Snap " "geometry input " "geometry reference " "float tolerance" msgstr "" #. Tag: para #: reference_editor.xml:1204 #, no-c-format msgid "" "Snaps the vertices and segments of a geometry another Geometry's vertices. A " "snap distance tolerance is used to control where snapping is performed." msgstr "" #. Tag: para #: reference_editor.xml:1209 #, no-c-format msgid "" "Snapping one geometry to another can improve robustness for overlay " "operations by eliminating nearly-coincident edges (which cause problems " "during noding and intersection calculation)." msgstr "" #. Tag: para #: reference_editor.xml:1216 #, no-c-format msgid "" "Too much snapping can result in invalid topology being created, so the " "number and location of snapped vertices is decided using heuristics to " "determine when it is safe to snap. This can result in some potential snaps " "being omitted, however." msgstr "" #. Tag: para #: reference_editor.xml:1225 #, no-c-format msgid "" "The returned geometry might loose its simplicity (see ) and validity (see )." msgstr "" #. Tag: para #: reference_editor.xml:1232 #, no-c-format msgid "Availability: 2.0.0 requires GEOS >= 3.3.0." msgstr "" #. Tag: para #: reference_editor.xml:1249 #, no-c-format msgid "A multipolygon shown with a linestring (before any snapping)" msgstr "" #. Tag: para #: reference_editor.xml:1260 #, no-c-format msgid "" "A multipolygon snapped to linestring to tolerance: 1.01 of distance. The new " "multipolygon is shown with reference linestring" msgstr "" #. Tag: programlisting #: reference_editor.xml:1264 #, no-c-format msgid "" "SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) AS " "polysnapped\n" "FROM (SELECT \n" " ST_GeomFromText('MULTIPOLYGON(\n" " ((26 125, 26 200, 126 200, 126 125, 26 125 ),\n" " ( 51 150, 101 150, 76 175, 51 150 )), \n" " (( 151 100, 151 200, 176 175, 151 100 )))') As poly,\n" " ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line\n" " \n" " ) As foo;\n" "\n" " polysnapped\n" "---------------------------------------------------------------------\n" " MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),\n" " (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))" msgstr "" #. Tag: para #: reference_editor.xml:1271 #, no-c-format msgid "" "A multipolygon snapped to linestring to tolerance: 1.25 of distance. The new " "multipolygon is shown with reference linestring" msgstr "" #. Tag: programlisting #: reference_editor.xml:1275 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_Snap(poly,line, ST_Distance(poly,line)*1.25)\n" " ) AS polysnapped\n" "FROM (SELECT \n" " ST_GeomFromText('MULTIPOLYGON(\n" " (( 26 125, 26 200, 126 200, 126 125, 26 125 ),\n" " ( 51 150, 101 150, 76 175, 51 150 )),\n" " (( 151 100, 151 200, 176 175, 151 100 )))') As poly,\n" " ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line\n" " \n" " ) As foo;\n" "\n" " polysnapped\n" "---------------------------------------------------------------------\n" "MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),\n" "(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))" msgstr "" #. Tag: para #: reference_editor.xml:1284 #, no-c-format msgid "" "The linestring snapped to the original multipolygon at tolerance 1.01 of " "distance. The new linestring is shown with reference multipolygon" msgstr "" #. Tag: programlisting #: reference_editor.xml:1288 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_Snap(line, poly, ST_Distance(poly,line)*1.01)\n" " ) AS linesnapped\n" "FROM (SELECT \n" " ST_GeomFromText('MULTIPOLYGON(\n" " ((26 125, 26 200, 126 200, 126 125, 26 125),\n" " (51 150, 101 150, 76 175, 51 150 )), \n" " ((151 100, 151 200, 176 175, 151 100)))') As poly,\n" " ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line\n" " ) As foo;\n" "\n" " linesnapped\n" "----------------------------------------\n" " LINESTRING(5 107,26 125,54 84,101 100)" msgstr "" #. Tag: para #: reference_editor.xml:1296 #, no-c-format msgid "" "The linestring snapped to the original multipolygon at tolerance 1.25 of " "distance. The new linestring is shown with reference multipolygon" msgstr "" #. Tag: programlisting #: reference_editor.xml:1300 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_Snap(line, poly, ST_Distance(poly,line)*1.25)\n" " ) AS linesnapped\n" "FROM (SELECT \n" " ST_GeomFromText('MULTIPOLYGON(\n" " (( 26 125, 26 200, 126 200, 126 125, 26 125 ),\n" " (51 150, 101 150, 76 175, 51 150 )), \n" " ((151 100, 151 200, 176 175, 151 100 )))') As poly,\n" " ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As " "line \n" " ) As foo;\n" " linesnapped\n" "---------------------------------------\n" "LINESTRING(26 125,54 84,101 100)" msgstr "" #. Tag: refname #: reference_editor.xml:1321 #, no-c-format msgid "ST_Transform" msgstr "" #. Tag: refpurpose #: reference_editor.xml:1323 #, no-c-format msgid "" "Returns a new geometry with its coordinates transformed to the SRID " "referenced by the integer parameter." msgstr "" #. Tag: funcprototype #: reference_editor.xml:1329 #, no-c-format msgid "" "geometry ST_Transform " "geometry g1 " "integer srid" msgstr "" #. Tag: para #: reference_editor.xml:1340 #, no-c-format msgid "" "Returns a new geometry with its coordinates transformed to spatial reference " "system referenced by the SRID integer parameter. The destination SRID must " "exist in the SPATIAL_REF_SYS table." msgstr "" #. Tag: para #: reference_editor.xml:1343 #, no-c-format msgid "" "ST_Transform is often confused with ST_SetSRID(). ST_Transform actually " "changes the coordinates of a geometry from one spatial reference system to " "another, while ST_SetSRID() simply changes the SRID identifier of the " "geometry" msgstr "" #. Tag: para #: reference_editor.xml:1348 #, no-c-format msgid "" "Requires PostGIS be compiled with Proj support. Use to confirm you have proj support compiled in." msgstr "" #. Tag: para #: reference_editor.xml:1352 #, no-c-format msgid "" "If using more than one transformation, it is useful to have a functional " "index on the commonly used transformations to take advantage of index usage." msgstr "" #. Tag: para #: reference_editor.xml:1359 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.6" msgstr "" #. Tag: para #: reference_editor.xml:1367 #, no-c-format msgid "Change Mass state plane US feet geometry to WGS 84 long lat" msgstr "" #. Tag: programlisting #: reference_editor.xml:1368 #, no-c-format msgid "" "SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 " "2967416,743238 2967450,\n" " 743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As " "wgs_geom;\n" "\n" " wgs_geom\n" "---------------------------\n" " POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 " "42.3903829478009,\n" "-71.1775844305465 42.3903826677917,-71.1775825927231 " "42.3902893647987,-71.177684\n" "8522251 42.3902896512902));\n" "(1 row)\n" "\n" "--3D Circular String example\n" "SELECT ST_AsEWKT(ST_Transform(ST_GeomFromEWKT('SRID=2249;CIRCULARSTRING" "(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 " "3,743238 2967416 4)'),4326));\n" "\n" " st_asewkt\n" "--------------------------------------------------------------------------------------\n" " SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 " "1,-71.1776843766326 42.3903829478009 2,\n" " -71.1775844305465 42.3903826677917 3,\n" " -71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4)" msgstr "" #. Tag: para #: reference_editor.xml:1369 #, no-c-format msgid "" "Example of creating a partial functional index. For tables where you are not " "sure all the geometries will be filled in, its best to use a partial index " "that leaves out null geometries which will both conserve space and make your " "index smaller and more efficient." msgstr "" #. Tag: programlisting #: reference_editor.xml:1371 #, no-c-format msgid "" "CREATE INDEX idx_the_geom_26986_parcels\n" " ON parcels\n" " USING gist\n" " (ST_Transform(the_geom, 26986))\n" " WHERE the_geom IS NOT NULL;" msgstr "" #. Tag: title #: reference_editor.xml:1375 #, no-c-format msgid "Configuring transformation behaviour" msgstr "" #. Tag: para #: reference_editor.xml:1376 #, no-c-format msgid "" "Sometimes coordinate transformation involving a grid-shift can fail, for " "example if PROJ.4 has not been built with grid-shift files or the coordinate " "does not lie within the range for which the grid shift is defined. By " "default, PostGIS will throw an error if a grid shift file is not present, " "but this behaviour can be configured on a per-SRID basis by altering the " "proj4text value within the spatial_ref_sys table." msgstr "" #. Tag: para #: reference_editor.xml:1377 #, no-c-format msgid "" "For example, the proj4text parameter +datum=NAD87 is a shorthand form for " "the following +nadgrids parameter:" msgstr "" #. Tag: programlisting #: reference_editor.xml:1378 #, no-c-format msgid "+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat" msgstr "" #. Tag: para #: reference_editor.xml:1379 #, no-c-format msgid "" "The @ prefix means no error is reported if the files are not present, but if " "the end of the list is reached with no file having been appropriate (ie. " "found and overlapping) then an error is issued." msgstr "" #. Tag: para #: reference_editor.xml:1380 #, no-c-format msgid "" "If, conversely, you wanted to ensure that at least the standard files were " "present, but that if all files were scanned without a hit a null " "transformation is applied you could use:" msgstr "" #. Tag: programlisting #: reference_editor.xml:1381 #, no-c-format msgid "+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null" msgstr "" #. Tag: para #: reference_editor.xml:1382 #, no-c-format msgid "" "The null grid shift file is a valid grid shift file covering the whole world " "and applying no shift. So for a complete example, if you wanted to alter " "PostGIS so that transformations to SRID 4267 that didn't lie within the " "correct range did not throw an ERROR, you would use the following:" msgstr "" #. Tag: programlisting #: reference_editor.xml:1383 #, no-c-format msgid "" "UPDATE spatial_ref_sys SET proj4text = '+proj=longlat +ellps=clrk66 " "+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null +no_defs' WHERE srid " "= 4267;" msgstr "" #. Tag: para #: reference_editor.xml:1390 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_editor.xml:1396 #, no-c-format msgid "ST_Translate" msgstr "" #. Tag: refpurpose #: reference_editor.xml:1398 #, no-c-format msgid "" "Translates the geometry to a new location using the numeric parameters as " "offsets. Ie: ST_Translate(geom, X, Y) or ST_Translate(geom, X, Y,Z)." msgstr "" #. Tag: funcsynopsis #: reference_editor.xml:1403 #, no-c-format msgid "" " geometry ST_Translate geometry g1 float deltax float deltay geometry " "ST_Translate geometry " "g1 float " "deltax float " "deltay float " "deltaz " msgstr "" #. Tag: para #: reference_editor.xml:1423 #, no-c-format msgid "" "Returns a new geometry whose coordinates are translated delta x,delta y," "delta z units. Units are based on the units defined in spatial reference " "(SRID) for this geometry." msgstr "" #. Tag: para #: reference_editor.xml:1435 #, no-c-format msgid "Move a point 1 degree longitude" msgstr "" #. Tag: programlisting #: reference_editor.xml:1436 #, no-c-format msgid "" "SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-71.01 " "42.37)',4326),1,0)) As wgs_transgeomtxt;\n" "\n" " wgs_transgeomtxt\n" " ---------------------\n" " POINT(-70.01 42.37)" msgstr "" #. Tag: para #: reference_editor.xml:1437 #, no-c-format msgid "Move a linestring 1 degree longitude and 1/2 degree latitude" msgstr "" #. Tag: programlisting #: reference_editor.xml:1438 #, no-c-format msgid "" "SELECT ST_AsText(ST_Translate(ST_GeomFromText('LINESTRING(-71.01 " "42.37,-71.11 42.38)',4326),1,0.5)) As wgs_transgeomtxt;\n" " wgs_transgeomtxt\n" " ---------------------------------------\n" " LINESTRING(-70.01 42.87,-70.11 42.88)" msgstr "" #. Tag: para #: reference_editor.xml:1439 #, no-c-format msgid "Move a 3d point" msgstr "" #. Tag: programlisting #: reference_editor.xml:1440 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_Translate(CAST('POINT(0 0 0)' As geometry), 5, 12,3));\n" " st_asewkt\n" " ---------\n" " POINT(5 12 3)" msgstr "" #. Tag: para #: reference_editor.xml:1441 #, no-c-format msgid "Move a curve and a point" msgstr "" #. Tag: programlisting #: reference_editor.xml:1442 #, no-c-format msgid "" "SELECT ST_AsText(ST_Translate(ST_Collect('CURVEPOLYGON(CIRCULARSTRING(4 " "3,3.12 0.878,1 0,-1.121 5.1213,6 7, 8 9,4 3))','POINT(1 3)'),1,2));\n" " st_astext\n" "------------------------------------------------------------------------------------------------------------\n" " GEOMETRYCOLLECTION(CURVEPOLYGON(CIRCULARSTRING(5 5,4.12 2.878,2 2,-0.121 " "7.1213,7 9,9 11,5 5)),POINT(2 5))" msgstr "" #. Tag: para #: reference_editor.xml:1448 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_editor.xml:1454 #, no-c-format msgid "ST_TransScale" msgstr "" #. Tag: refpurpose #: reference_editor.xml:1456 #, no-c-format msgid "" "Translates the geometry using the deltaX and deltaY args, then " "scales it using the XFactor, YFactor args, working in 2D only." msgstr "" #. Tag: funcprototype #: reference_editor.xml:1463 #, no-c-format msgid "" "geometry ST_TransScale " "geometry geomA " "float deltaX " "float deltaY " "float XFactor " "float YFactor" msgstr "" #. Tag: para #: reference_editor.xml:1477 #, no-c-format msgid "" "Translates the geometry using the deltaX and deltaY args, then scales " "it using the XFactor, YFactor args, working in 2D only." msgstr "" #. Tag: para #: reference_editor.xml:1480 #, no-c-format msgid "" "ST_TransScale(geomA, deltaX, deltaY, XFactor, YFactor) is short-" "hand for ST_Affine(geomA, XFactor, 0, 0, 0, YFactor, 0, 0, 0, 1, " "deltaX*XFactor, deltaY*YFactor, 0)." msgstr "" #. Tag: programlisting #: reference_editor.xml:1496 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_TransScale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), " "0.5, 1, 1, 2));\n" " st_asewkt\n" "-----------------------------\n" " LINESTRING(1.5 6 3,1.5 4 1)\n" "\n" "\n" "--Buffer a point to get an approximation of a circle, convert to curve and " "then translate 1,2 and scale it 3,4\n" " SELECT ST_AsText(ST_Transscale(ST_LineToCurve(ST_Buffer('POINT(234 567)', " "3)),1,2,3,4));\n" " st_astext\n" "------------------------------------------------------------------------------------------------------------------------------\n" " CURVEPOLYGON(CIRCULARSTRING(714 2276,711.363961030679 2267.51471862576,705 " "2264,698.636038969321 2284.48528137424,714 2276))" msgstr "" #. Tag: para #: reference_editor.xml:1503 #, no-c-format msgid ", " msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_processing.xml.po0000644000000000000000000034323312025614072023311 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_processing.xml:3 #, no-c-format msgid "Geometry Processing" msgstr "" #. Tag: refname #: reference_processing.xml:6 #, no-c-format msgid "ST_Buffer" msgstr "" #. Tag: refpurpose #: reference_processing.xml:8 #, no-c-format msgid "" "(T) For geometry: Returns a geometry that represents all points whose " "distance from this Geometry is less than or equal to distance. Calculations " "are in the Spatial Reference System of this Geometry. For geography: Uses a " "planar transform wrapper. Introduced in 1.5 support for different end cap " "and mitre settings to control shape. buffer_style options: quad_segs=#," "endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.#" msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:16 #, no-c-format msgid "" " geometry ST_Buffer " "geometry g1 " "float radius_of_buffer geometry " "ST_Buffer geometry " "g1 float " "radius_of_buffer integer num_seg_quarter_circle geometry ST_Buffer geometry g1 float " "radius_of_buffer text buffer_style_parameters geography ST_Buffer geography g1 float " "radius_of_buffer_in_meters " msgstr "" #. Tag: title #: reference_processing.xml:47 reference_processing.xml:221 #: reference_processing.xml:307 reference_processing.xml:373 #: reference_processing.xml:522 reference_processing.xml:590 #: reference_processing.xml:638 reference_processing.xml:736 #: reference_processing.xml:816 reference_processing.xml:874 #: reference_processing.xml:942 reference_processing.xml:989 #: reference_processing.xml:1041 reference_processing.xml:1093 #: reference_processing.xml:1133 reference_processing.xml:1192 #: reference_processing.xml:1239 reference_processing.xml:1298 #: reference_processing.xml:1350 reference_processing.xml:1404 #: reference_processing.xml:1557 reference_processing.xml:1593 #: reference_processing.xml:1670 reference_processing.xml:1720 #: reference_processing.xml:1766 reference_processing.xml:1808 #: reference_processing.xml:1919 reference_processing.xml:2012 #: reference_processing.xml:2081 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_processing.xml:49 #, no-c-format msgid "" "Returns a geometry/geography that represents all points whose distance from " "this Geometry/geography is less than or equal to distance." msgstr "" #. Tag: para #: reference_processing.xml:51 #, no-c-format msgid "" "Geometry: Calculations are in the Spatial Reference System of the geometry. " "Introduced in 1.5 support for different end cap and mitre settings to " "control shape." msgstr "" #. Tag: para #: reference_processing.xml:54 #, no-c-format msgid "" "Negative radii: For polygons, a negative radius can be used, which will " "shrink the polygon rather than expanding it." msgstr "" #. Tag: para #: reference_processing.xml:55 #, no-c-format msgid "" "Geography: For geography this is really a thin wrapper around the geometry " "implementation. It first determines the best SRID that fits the bounding box " "of the geography object (favoring UTM, Lambert Azimuthal Equal Area (LAEA) " "north/south pole, and falling back on mercator in worst case scenario) and " "then buffers in that planar spatial ref and retransforms back to WGS84 " "geography." msgstr "" #. Tag: para #: reference_processing.xml:57 #, no-c-format msgid "" "For geography this may not behave as expected if object is sufficiently " "large that it falls between two UTM zones or crosses the dateline" msgstr "" #. Tag: para #: reference_processing.xml:59 #, no-c-format msgid "" "Availability: 1.5 - ST_Buffer was enhanced to support different endcaps and " "join types. These are useful for example to convert road linestrings into " "polygon roads with flat or square edges instead of rounded edges. Thin " "wrapper for geography was added. - requires GEOS >= 3.2 to take advantage " "of advanced geometry functionality." msgstr "" #. Tag: para #: reference_processing.xml:62 #, no-c-format msgid "" "The optional third parameter (currently only applies to geometry) can either " "specify number of segments used to approximate a quarter circle (integer " "case, defaults to 8) or a list of blank-separated key=value pairs (string " "case) to tweak operations as follows:" msgstr "" #. Tag: para #: reference_processing.xml:66 reference_processing.xml:1427 #, no-c-format msgid "" "'quad_segs=#' : number of segments used to approximate a quarter circle " "(defaults to 8)." msgstr "" #. Tag: para #: reference_processing.xml:69 #, no-c-format msgid "" "'endcap=round|flat|square' : endcap style (defaults to \"round\", needs " "GEOS-3.2 or higher for a different value). 'butt' is also accepted as a " "synonym for 'flat'." msgstr "" #. Tag: para #: reference_processing.xml:72 #, no-c-format msgid "" "'join=round|mitre|bevel' : join style (defaults to \"round\", needs GEOS-3.2 " "or higher for a different value). 'miter' is also accepted as a synonym for " "'mitre'." msgstr "" #. Tag: para #: reference_processing.xml:75 #, no-c-format msgid "" "'mitre_limit=#.#' : mitre ratio limit (only affects mitered join style). " "'miter_limit' is also accepted as a synonym for 'mitre_limit'." msgstr "" #. Tag: para #: reference_processing.xml:80 #, no-c-format msgid "Units of radius are measured in units of the spatial reference system." msgstr "" #. Tag: para #: reference_processing.xml:81 #, no-c-format msgid "" "The inputs can be POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, " "POLYGONS, MULTIPOLYGONS, and GeometryCollections." msgstr "" #. Tag: para #: reference_processing.xml:82 #, no-c-format msgid "" "This function ignores the third dimension (z) and will always give a 2-d " "buffer even when presented with a 3d-geometry." msgstr "" #. Tag: para #: reference_processing.xml:84 reference_processing.xml:1444 #: reference_processing.xml:1732 reference_processing.xml:1775 #: reference_processing.xml:2032 #, no-c-format msgid "Performed by the GEOS module." msgstr "" #. Tag: para #: reference_processing.xml:85 reference_processing.xml:541 #: reference_processing.xml:747 reference_processing.xml:1063 #: reference_processing.xml:1930 reference_processing.xml:2041 #, no-c-format msgid "&sfs_compliant; s2.1.1.3" msgstr "" #. Tag: para #: reference_processing.xml:86 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.17" msgstr "" #. Tag: para #: reference_processing.xml:88 #, no-c-format msgid "" "People often make the mistake of using this function to try to do radius " "searches. Creating a buffer to to a radius search is slow and pointless. Use " " instead." msgstr "" #. Tag: title #: reference_processing.xml:93 reference_processing.xml:238 #: reference_processing.xml:343 reference_processing.xml:411 #: reference_processing.xml:547 reference_processing.xml:604 #: reference_processing.xml:754 reference_processing.xml:957 #: reference_processing.xml:1067 reference_processing.xml:1104 #: reference_processing.xml:1208 reference_processing.xml:1256 #: reference_processing.xml:1367 reference_processing.xml:1453 #: reference_processing.xml:1690 reference_processing.xml:1737 #: reference_processing.xml:1781 reference_processing.xml:1823 #: reference_processing.xml:1938 reference_processing.xml:2048 #, no-c-format msgid "Examples" msgstr "" #. Tag: para #: reference_processing.xml:104 #, no-c-format msgid "quad_segs=8 (default)" msgstr "" #. Tag: programlisting #: reference_processing.xml:107 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText('POINT(100 90)'),\n" " 50, 'quad_segs=8');" msgstr "" #. Tag: para #: reference_processing.xml:115 #, no-c-format msgid "quad_segs=2 (lame)" msgstr "" #. Tag: programlisting #: reference_processing.xml:118 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText('POINT(100 90)'),\n" " 50, 'quad_segs=2');" msgstr "" #. Tag: para #: reference_processing.xml:127 #, no-c-format msgid "endcap=round join=round (default)" msgstr "" #. Tag: programlisting #: reference_processing.xml:130 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'endcap=round join=round');" msgstr "" #. Tag: para #: reference_processing.xml:138 #, no-c-format msgid "endcap=square" msgstr "" #. Tag: programlisting #: reference_processing.xml:141 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'endcap=square join=round');" msgstr "" #. Tag: para #: reference_processing.xml:149 #, no-c-format msgid "endcap=flat" msgstr "" #. Tag: programlisting #: reference_processing.xml:152 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'endcap=flat join=round');" msgstr "" #. Tag: para #: reference_processing.xml:161 #, no-c-format msgid "join=bevel" msgstr "" #. Tag: programlisting #: reference_processing.xml:164 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'join=bevel');" msgstr "" #. Tag: para #: reference_processing.xml:172 #, no-c-format msgid "join=mitre mitre_limit=5.0 (default mitre limit)" msgstr "" #. Tag: programlisting #: reference_processing.xml:175 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'join=mitre mitre_limit=5.0');" msgstr "" #. Tag: para #: reference_processing.xml:183 #, no-c-format msgid "join=mitre mitre_limit=1" msgstr "" #. Tag: programlisting #: reference_processing.xml:186 #, no-c-format msgid "" "SELECT ST_Buffer(\n" " ST_GeomFromText(\n" " 'LINESTRING(50 50,150 150,150 50)'\n" " ), 10, 'join=mitre mitre_limit=1.0');" msgstr "" #. Tag: programlisting #: reference_processing.xml:193 #, no-c-format msgid "" "--A buffered point approximates a circle\n" "-- A buffered point forcing approximation of (see diagram)\n" "-- 2 points per circle is poly with 8 sides (see diagram)\n" "SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As " "promisingcircle_pcount,\n" "ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 2)) As " "lamecircle_pcount;\n" "\n" "promisingcircle_pcount | lamecircle_pcount\n" "------------------------+-------------------\n" " 33 | 9\n" "\n" "--A lighter but lamer circle\n" "-- only 2 points per quarter circle is an octagon\n" "--Below is a 100 meter octagon\n" "-- Note coordinates are in NAD 83 long lat which we transform\n" "to Mass state plane meter and then buffer to get measurements in meters;\n" "SELECT ST_AsText(ST_Buffer(\n" "ST_Transform(\n" "ST_SetSRID(ST_MakePoint(-71.063526, 42.35785),4269), 26986)\n" ",100,2)) As octagon;\n" "----------------------\n" "POLYGON((236057.59057465 900908.759918696,236028.301252769 " "900838.049240578,235\n" "957.59057465 900808.759918696,235886.879896532 " "900838.049240578,235857.59057465\n" "900908.759918696,235886.879896532 900979.470596815,235957.59057465 " "901008.759918\n" "696,236028.301252769 900979.470596815,236057.59057465 900908.759918696))" msgstr "" #. Tag: title #: reference_processing.xml:197 reference_processing.xml:272 #: reference_processing.xml:350 reference_processing.xml:500 #: reference_processing.xml:563 reference_processing.xml:611 #: reference_processing.xml:711 reference_processing.xml:794 #: reference_processing.xml:853 reference_processing.xml:920 #: reference_processing.xml:964 reference_processing.xml:1071 #: reference_processing.xml:1111 reference_processing.xml:1165 #: reference_processing.xml:1215 reference_processing.xml:1269 #: reference_processing.xml:1322 reference_processing.xml:1373 #: reference_processing.xml:1535 reference_processing.xml:1571 #: reference_processing.xml:1641 reference_processing.xml:1697 #: reference_processing.xml:1742 reference_processing.xml:1786 #: reference_processing.xml:1894 reference_processing.xml:1979 #: reference_processing.xml:2055 reference_processing.xml:2109 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_processing.xml:199 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:205 #, no-c-format msgid "ST_BuildArea" msgstr "" #. Tag: refpurpose #: reference_processing.xml:207 #, no-c-format msgid "" "Creates an areal geometry formed by the constituent linework of given " "geometry" msgstr "" #. Tag: funcprototype #: reference_processing.xml:213 #, no-c-format msgid "" "geometry ST_BuildArea " "geometry A" msgstr "" #. Tag: para #: reference_processing.xml:223 #, no-c-format msgid "" "Creates an areal geometry formed by the constituent linework of given " "geometry. The return type can be a Polygon or MultiPolygon, depending on " "input. If the input lineworks do not form polygons NULL is returned. The " "inputs can be LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS, and " "GeometryCollections." msgstr "" #. Tag: para #: reference_processing.xml:228 #, no-c-format msgid "This function will assume all inner geometries represent holes" msgstr "" #. Tag: para #: reference_processing.xml:231 reference_processing.xml:1310 #, no-c-format msgid "" "Input linework must be correctly noded for this function to work properly" msgstr "" #. Tag: para #: reference_processing.xml:234 #, no-c-format msgid "Availability: 1.1.0 - requires GEOS >= 2.1.0." msgstr "" #. Tag: para #: reference_processing.xml:248 #, no-c-format msgid "This will create a donut" msgstr "" #. Tag: programlisting #: reference_processing.xml:251 #, no-c-format msgid "" "SELECT ST_BuildArea(ST_Collect(smallc,bigc))\n" "FROM (SELECT\n" " ST_Buffer(\n" " ST_GeomFromText('POINT(100 90)'), 25) As smallc,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As bigc) As foo;" msgstr "" #. Tag: para #: reference_processing.xml:260 #, no-c-format msgid "" "This will create a gaping hole inside the circle with prongs sticking out" msgstr "" #. Tag: programlisting #: reference_processing.xml:263 #, no-c-format msgid "" "SELECT ST_BuildArea(ST_Collect(line,circle))\n" "FROM (SELECT\n" " ST_Buffer(\n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)),\n" " 5) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;\n" "\n" "--this creates the same gaping hole\n" "--but using linestrings instead of polygons\n" "SELECT ST_BuildArea(\n" " ST_Collect(ST_ExteriorRing(line),ST_ExteriorRing(circle))\n" " )\n" "FROM (SELECT ST_Buffer(\n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190))\n" " ,5) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;" msgstr "" #. Tag: para #: reference_processing.xml:274 #, no-c-format msgid "" ", , , " "wrappers to this function with " "standard OGC interface" msgstr "" #. Tag: refname #: reference_processing.xml:284 #, no-c-format msgid "ST_Collect" msgstr "" #. Tag: refpurpose #: reference_processing.xml:285 #, no-c-format msgid "" "Return a specified ST_Geometry value from a collection of other geometries." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:289 #, no-c-format msgid "" " geometry ST_Collect " "geometry set g1field geometry " "ST_Collect geometry " "g1 geometry " "g2 " "geometry ST_Collect " "geometry[] g1_array " "" msgstr "" #. Tag: para #: reference_processing.xml:308 #, no-c-format msgid "" "Output type can be a MULTI* or a GEOMETRYCOLLECTION. Comes in 2 variants. " "Variant 1 collects 2 geometries. Variant 2 is an aggregate function that " "takes a set of geometries and collects them into a single ST_Geometry." msgstr "" #. Tag: para #: reference_processing.xml:312 #, no-c-format msgid "" "Aggregate version: This function returns a GEOMETRYCOLLECTION or a MULTI " "object from a set of geometries. The ST_Collect() function is an \"aggregate" "\" function in the terminology of PostgreSQL. That means that it operates on " "rows of data, in the same way the SUM() and AVG() functions do. For example, " "\"SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN\" will return a " "separate GEOMETRYCOLLECTION for each distinct value of ATTRCOLUMN." msgstr "" #. Tag: para #: reference_processing.xml:320 #, no-c-format msgid "" "Non-Aggregate version: This function returns a geometry being a collection " "of two input geometries. Output type can be a MULTI* or a GEOMETRYCOLLECTION." msgstr "" #. Tag: para #: reference_processing.xml:324 #, no-c-format msgid "" "ST_Collect and ST_Union are often interchangeable. ST_Collect is in general " "orders of magnitude faster than ST_Union because it does not try to dissolve " "boundaries or validate that a constructed MultiPolgon doesn't have " "overlapping regions. It merely rolls up single geometries into MULTI and " "MULTI or mixed geometry types into Geometry Collections. Unfortunately " "geometry collections are not well-supported by GIS tools. To prevent " "ST_Collect from returning a Geometry Collection when collecting MULTI " "geometries, one can use the below trick that utilizes to expand the MULTIs out to singles and then regroup them." msgstr "" #. Tag: para #: reference_processing.xml:335 #, no-c-format msgid "" "Availability: 1.4.0 - ST_Collect(geomarray) was introduced. ST_Collect was " "enhanced to handle more geometries faster." msgstr "" #. Tag: para #: reference_processing.xml:336 reference_processing.xml:543 #: reference_processing.xml:598 reference_processing.xml:650 #: reference_processing.xml:840 reference_processing.xml:894 #: reference_processing.xml:952 reference_processing.xml:992 #: reference_processing.xml:1098 reference_processing.xml:1160 #: reference_processing.xml:1203 reference_processing.xml:1357 #: reference_processing.xml:1567 reference_processing.xml:1682 #: reference_processing.xml:2101 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_processing.xml:337 #, no-c-format msgid "" "&curve_support; This method supports Circular Strings and Curves, but will " "never return a MULTICURVE or MULTI as one would expect and PostGIS does not " "currently support those." msgstr "" #. Tag: para #: reference_processing.xml:344 #, no-c-format msgid "" "Aggregate example (http://postgis.refractions.net/" "pipermail/postgis-users/2008-June/020331.html)" msgstr "" #. Tag: programlisting #: reference_processing.xml:345 #, no-c-format msgid "" "SELECT stusps,\n" " ST_Multi(ST_Collect(f.the_geom)) as singlegeom\n" " FROM (SELECT stusps, (ST_Dump(the_geom)).geom As the_geom\n" " FROM\n" " somestatetable ) As f\n" "GROUP BY stusps" msgstr "" #. Tag: para #: reference_processing.xml:346 reference_processing.xml:2051 #, no-c-format msgid "Non-Aggregate example" msgstr "" #. Tag: programlisting #: reference_processing.xml:347 #, no-c-format msgid "" "SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(-2 3)') ));\n" "\n" "st_astext\n" "----------\n" "MULTIPOINT(1 2,-2 3)\n" "\n" "--Collect 2 d points\n" "SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(1 2)') ) );\n" "\n" "st_astext\n" "----------\n" "MULTIPOINT(1 2,1 2)\n" "\n" "--Collect 3d points\n" "SELECT ST_AsEWKT(ST_Collect(ST_GeomFromEWKT('POINT(1 2 3)'),\n" " ST_GeomFromEWKT('POINT(1 2 4)') ) );\n" "\n" " st_asewkt\n" "-------------------------\n" " MULTIPOINT(1 2 3,1 2 4)\n" "\n" " --Example with curves\n" "SELECT ST_AsText(ST_Collect(ST_GeomFromText('CIRCULARSTRING(220268 " "150415,220227 150505,220227 150406)'),\n" "ST_GeomFromText('CIRCULARSTRING(220227 150406,2220227 150407,220227 " "150406)')));\n" " st_astext\n" "------------------------------------------------------------------------------------\n" " GEOMETRYCOLLECTION(CIRCULARSTRING(220268 150415,220227 150505,220227 " "150406),\n" " CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))\n" "\n" "--New ST_Collect array construct\n" "SELECT ST_Collect(ARRAY(SELECT the_geom FROM sometable));\n" "\n" "SELECT ST_AsText(ST_Collect(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),\n" " ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As " "wktcollect;\n" "\n" "--wkt collect --\n" "MULTILINESTRING((1 2,3 4),(3 4,4 5))" msgstr "" #. Tag: para #: reference_processing.xml:351 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:356 #, no-c-format msgid "ST_ConcaveHull" msgstr "" #. Tag: refpurpose #: reference_processing.xml:357 #, no-c-format msgid "" "The concave hull of a geometry represents a possibly concave geometry that " "encloses all geometries within the set. You can think of it as shrink " "wrapping." msgstr "" #. Tag: funcprototype #: reference_processing.xml:363 #, no-c-format msgid "" "geometry ST_ConcaveHull " "geometry geomA " "float target_percent boolean " "allow_holes=false" msgstr "" #. Tag: para #: reference_processing.xml:374 #, no-c-format msgid "" "The concave hull of a geometry represents a possibly concave geometry that " "encloses all geometries within the set. Defaults to false for allowing " "polygons with holes. The result is never higher than a single polygon." msgstr "" #. Tag: para #: reference_processing.xml:378 #, no-c-format msgid "" "The target_percent is the target percent of area of convex hull the PostGIS " "solution will try to approach before giving up or exiting. One can think of " "the concave hull as the geometry you get by vacuum sealing a set of " "geometries. The target_percent of 1 will give you the same answer as the " "convex hull. A target_percent between 0 and 0.99 will give you something " "that should have a smaller area than the convex hull. This is different from " "a convex hull which is more like wrapping a rubber band around the set of " "geometries." msgstr "" #. Tag: para #: reference_processing.xml:383 #, no-c-format msgid "" "It is usually used with MULTI and Geometry Collections. Although it is not " "an aggregate - you can use it in conjunction with ST_Collect or ST_Union to " "get the concave hull of a set of points/linestring/polygons ST_ConcaveHull" "(ST_Collect(somepointfield), 0.80)." msgstr "" #. Tag: para #: reference_processing.xml:388 #, no-c-format msgid "" "It is much slower to compute than convex hull but encloses the geometry " "better and is also useful for image recognition." msgstr "" #. Tag: para #: reference_processing.xml:391 reference_processing.xml:539 #: reference_processing.xml:743 reference_processing.xml:1059 #: reference_processing.xml:1926 #, no-c-format msgid "Performed by the GEOS module" msgstr "" #. Tag: para #: reference_processing.xml:392 #, no-c-format msgid "" "Note - If you are using with points, linestrings, or geometry collections " "use ST_Collect. If you are using with polygons, use ST_Union since it may " "fail with invalid geometries." msgstr "" #. Tag: para #: reference_processing.xml:395 #, no-c-format msgid "" "Note - The smaller you make the target percent, the longer it takes to " "process the concave hull and more likely to run into topological exceptions. " "Also the more floating points and number of points you accrue. First try a " "0.99 which does a first hop, is usually very fast, sometimes as fast as " "computing the convex hull, and usually gives much better than 99% of shrink " "since it almost always overshoots. Second hope of 0.98 it slower, others get " "slower usually quadratically. To reduce precision and float points, use " " or after ST_ConcaveHull. ST_SnapToGrid is a bit faster, but " "could result in invalid geometries where as ST_SimplifyPreserveTopology " "almost always preserves the validity of the geometry." msgstr "" #. Tag: para #: reference_processing.xml:400 #, no-c-format msgid "" "More real world examples and brief explanation of the technique are shown " "http://" "www.bostongis.com/postgis_concavehull.snippet" msgstr "" #. Tag: para #: reference_processing.xml:403 #, no-c-format msgid "" "Also check out Simon Greener's article on demonstrating ConcaveHull " "introduced in Oracle 11G R2. http://www.spatialdbadvisor.com/" "oracle_spatial_tips_tricks/172/concave-hull-geometries-in-oracle-11gr2. The solution we get at 0.75 target percent of convex hull is similar " "to the shape Simon gets with Oracle SDO_CONCAVEHULL_BOUNDARY." msgstr "" #. Tag: para #: reference_processing.xml:407 reference_processing.xml:994 #: reference_processing.xml:1565 reference_processing.xml:1819 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: programlisting #: reference_processing.xml:412 #, no-c-format msgid "" "--Get estimate of infected area based on point observations\n" "SELECT d.disease_type,\n" " ST_ConcaveHull(ST_Collect(d.pnt_geom), 0.99) As geom\n" " FROM disease_obs As d\n" " GROUP BY d.disease_type;" msgstr "" #. Tag: para #: reference_processing.xml:422 #, no-c-format msgid "ST_ConcaveHull of 2 polygons encased in target 100% shrink concave hull" msgstr "" #. Tag: programlisting #: reference_processing.xml:425 #, no-c-format msgid "" "-- geometries overlaid with concavehull \n" "-- at target 100% shrink (this is the same as convex hull - since no " "shrink)\n" "SELECT \n" " ST_ConcaveHull(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ), 1) \n" " As convexhull;" msgstr "" #. Tag: para #: reference_processing.xml:432 #, no-c-format msgid "" "-- geometries overlaid with concavehull at target 90% of convex hull area" msgstr "" #. Tag: programlisting #: reference_processing.xml:436 #, no-c-format msgid "" "-- geometries overlaid with concavehull at target 90% shrink\n" "SELECT \n" " ST_ConcaveHull(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ), 0.9) \n" " As target_90;" msgstr "" #. Tag: para #: reference_processing.xml:445 #, no-c-format msgid "L Shape points overlaid with convex hull" msgstr "" #. Tag: programlisting #: reference_processing.xml:448 #, no-c-format msgid "" "-- this produces a table of 42 points that form an L shape\n" "SELECT (ST_DumpPoints(ST_GeomFromText(\n" "'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14,\n" "150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6,\n" "14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130,\n" "6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114,\n" "14 94,14 74,14 54,14 34,14 14)'))).geom \n" " INTO TABLE l_shape;\n" "\n" "SELECT ST_ConvexHull(ST_Collect(geom))\n" "FROM l_shape;" msgstr "" #. Tag: para #: reference_processing.xml:455 #, no-c-format msgid "ST_ConcaveHull of L points at target 99% of convex hull" msgstr "" #. Tag: programlisting #: reference_processing.xml:458 #, no-c-format msgid "" "SELECT ST_ConcaveHull(ST_Collect(geom), 0.99)\n" " FROM l_shape;" msgstr "" #. Tag: para #: reference_processing.xml:467 #, no-c-format msgid "Concave Hull of L points at target 80% convex hull area" msgstr "" #. Tag: programlisting #: reference_processing.xml:470 #, no-c-format msgid "" "-- Concave Hull L shape points\n" " -- at target 80% of convexhull\n" " SELECT ST_ConcaveHull(ST_Collect(geom), 0.80)\n" " FROM l_shape;" msgstr "" #. Tag: para #: reference_processing.xml:479 #, no-c-format msgid "multilinestring overlaid with Convex hull" msgstr "" #. Tag: para #: reference_processing.xml:487 #, no-c-format msgid "" "multilinestring with overlaid with Concave hull of linestrings at 99% target " "-- first hop" msgstr "" #. Tag: programlisting #: reference_processing.xml:491 #, no-c-format msgid "" "SELECT ST_ConcaveHull(ST_GeomFromText('MULTILINESTRING((106 164,30 112,74 " "70,82 112,130 94,\n" " 130 62,122 40,156 32,162 76,172 88),\n" "(132 178,134 148,128 136,96 128,132 108,150 130,\n" "170 142,174 110,156 96,158 90,158 88),\n" "(22 64,66 28,94 38,94 68,114 76,112 30,\n" "132 10,168 18,178 34,186 52,184 74,190 100,\n" "190 122,182 148,178 170,176 184,156 164,146 178,\n" "132 186,92 182,56 158,36 150,62 150,76 128,88 118))'),0.99)" msgstr "" #. Tag: para #: reference_processing.xml:501 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_processing.xml:507 #, no-c-format msgid "ST_ConvexHull" msgstr "" #. Tag: refpurpose #: reference_processing.xml:508 #, no-c-format msgid "" "The convex hull of a geometry represents the minimum convex " "geometry that encloses all geometries within the set." msgstr "" #. Tag: funcprototype #: reference_processing.xml:514 #, no-c-format msgid "" "geometry ST_ConvexHull " "geometry geomA" msgstr "" #. Tag: para #: reference_processing.xml:523 #, no-c-format msgid "" "The convex hull of a geometry represents the minimum convex geometry " "that encloses all geometries within the set." msgstr "" #. Tag: para #: reference_processing.xml:526 #, no-c-format msgid "" "One can think of the convex hull as the geometry you get by wrapping an " "elastic band around a set of geometries. This is different from a concave " "hull which is analogous to shrink-wrapping your geometries." msgstr "" #. Tag: para #: reference_processing.xml:530 #, no-c-format msgid "" "It is usually used with MULTI and Geometry Collections. Although it is not " "an aggregate - you can use it in conjunction with ST_Collect to get the " "convex hull of a set of points. ST_ConvexHull(ST_Collect(somepointfield))." msgstr "" #. Tag: para #: reference_processing.xml:535 #, no-c-format msgid "" "It is often used to determine an affected area based on a set of point " "observations." msgstr "" #. Tag: para #: reference_processing.xml:542 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.16" msgstr "" #. Tag: programlisting #: reference_processing.xml:548 #, no-c-format msgid "" "--Get estimate of infected area based on point observations\n" "SELECT d.disease_type,\n" " ST_ConvexHull(ST_Collect(d.the_geom)) As the_geom\n" " FROM disease_obs As d\n" " GROUP BY d.disease_type;" msgstr "" #. Tag: para #: reference_processing.xml:556 #, no-c-format msgid "" "Convex Hull of a MultiLinestring and a MultiPoint seen together with the " "MultiLinestring and MultiPoint" msgstr "" #. Tag: programlisting #: reference_processing.xml:559 #, no-c-format msgid "" "SELECT ST_AsText(ST_ConvexHull(\n" " ST_Collect(\n" " ST_GeomFromText('MULTILINESTRING((100 190,10 8),(150 10, 20 " "30))'),\n" " ST_GeomFromText('MULTIPOINT(50 5, 150 30, 50 10, 10 " "10)')\n" " )) );\n" "---st_astext--\n" "POLYGON((50 5,10 8,10 10,100 190,150 30,150 10,50 5))" msgstr "" #. Tag: para #: reference_processing.xml:564 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_processing.xml:570 #, no-c-format msgid "ST_CurveToLine" msgstr "" #. Tag: refpurpose #: reference_processing.xml:572 #, no-c-format msgid "Converts a CIRCULARSTRING/CURVEDPOLYGON to a LINESTRING/POLYGON" msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:576 #, no-c-format msgid "" " geometry ST_CurveToLine geometry curveGeom geometry " "ST_CurveToLine geometry curveGeom integer segments_per_qtr_circle " msgstr "" #. Tag: para #: reference_processing.xml:592 #, no-c-format msgid "" "Converst a CIRCULAR STRING to regular LINESTRING or CURVEPOLYGON to POLYGON. " "Useful for outputting to devices that can't support CIRCULARSTRING geometry " "types" msgstr "" #. Tag: para #: reference_processing.xml:593 #, no-c-format msgid "" "Converts a given geometry to a linear geometry. Each curved geometry or " "segment is converted into a linear approximation using the default value of " "32 segments per quarter circle" msgstr "" #. Tag: para #: reference_processing.xml:595 reference_processing.xml:1097 #, no-c-format msgid "Availability: 1.2.2?" msgstr "" #. Tag: para #: reference_processing.xml:596 #, no-c-format msgid "&sfs_compliant;" msgstr "" #. Tag: para #: reference_processing.xml:597 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 7.1.7" msgstr "" #. Tag: para #: reference_processing.xml:599 reference_processing.xml:837 #: reference_processing.xml:891 reference_processing.xml:991 #: reference_processing.xml:1099 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: programlisting #: reference_processing.xml:606 #, no-c-format msgid "" "SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 " "150415,220227 150505,220227 150406)')));\n" "\n" "--Result --\n" " LINESTRING(220268 150415,220269.95064912 150416.539364228,220271.823415575 " "150418.17258804,220273.613787707 150419.895736857,\n" " 220275.317452352 150421.704659462,220276.930305234 " "150423.594998003,220278.448460847 150425.562198489,\n" " 220279.868261823 150427.60152176,220281.186287736 " "150429.708054909,220282.399363347 150431.876723113,\n" " 220283.50456625 150434.10230186,220284.499233914 " "150436.379429536,220285.380970099 150438.702620341,220286.147650624 " "150441.066277505,\n" " 220286.797428488 150443.464706771,220287.328738321 " "150445.892130112,220287.740300149 150448.342699654,\n" " 220288.031122486 150450.810511759,220288.200504713 " "150453.289621251,220288.248038775 150455.77405574,\n" " 220288.173610157 150458.257830005,220287.977398166 " "150460.734960415,220287.659875492 150463.199479347,\n" " 220287.221807076 150465.64544956,220286.664248262 " "150468.066978495,220285.988542259 150470.458232479,220285.196316903 " "150472.81345077,\n" " 220284.289480732 150475.126959442,220283.270218395 " "150477.39318505,220282.140985384 150479.606668057,\n" " 220280.90450212 150481.762075989,220279.5637474 " "150483.85421628,220278.12195122 150485.87804878,\n" " 220276.582586992 150487.828697901,220274.949363179 " "150489.701464356,220273.226214362 150491.491836488,\n" " 220271.417291757 150493.195501133,220269.526953216 " "150494.808354014,220267.559752731 150496.326509628,\n" " 220265.520429459 150497.746310603,220263.41389631 " "150499.064336517,220261.245228106 150500.277412127,\n" " 220259.019649359 150501.38261503,220256.742521683 " "150502.377282695,220254.419330878 150503.259018879,\n" " 220252.055673714 150504.025699404,220249.657244448 " "150504.675477269,220247.229821107 150505.206787101,\n" " 220244.779251566 150505.61834893,220242.311439461 " "150505.909171266,220239.832329968 150506.078553494,\n" " 220237.347895479 150506.126087555,220234.864121215 " "150506.051658938,220232.386990804 150505.855446946,\n" " 220229.922471872 150505.537924272,220227.47650166 " "150505.099855856,220225.054972724 150504.542297043,\n" " 220222.663718741 150503.86659104,220220.308500449 150503.074365683,\n" " 220217.994991777 150502.167529512,220215.72876617 150501.148267175,\n" " 220213.515283163 150500.019034164,220211.35987523 150498.7825509,\n" " 220209.267734939 150497.441796181,220207.243902439 150496,\n" " 220205.293253319 150494.460635772,220203.420486864 " "150492.82741196,220201.630114732 150491.104263143,\n" " 220199.926450087 150489.295340538,220198.313597205 " "150487.405001997,220196.795441592 150485.437801511,\n" " 220195.375640616 150483.39847824,220194.057614703 " "150481.291945091,220192.844539092 150479.123276887,220191.739336189 " "150476.89769814,\n" " 220190.744668525 150474.620570464,220189.86293234 " "150472.297379659,220189.096251815 150469.933722495,\n" " 220188.446473951 150467.535293229,220187.915164118 " "150465.107869888,220187.50360229 150462.657300346,\n" " 220187.212779953 150460.189488241,220187.043397726 " "150457.710378749,220186.995863664 150455.22594426,\n" " 220187.070292282 150452.742169995,220187.266504273 " "150450.265039585,220187.584026947 150447.800520653,\n" " 220188.022095363 150445.35455044,220188.579654177 " "150442.933021505,220189.25536018 150440.541767521,\n" " 220190.047585536 150438.18654923,220190.954421707 " "150435.873040558,220191.973684044 150433.60681495,\n" " 220193.102917055 150431.393331943,220194.339400319 " "150429.237924011,220195.680155039 150427.14578372,220197.12195122 " "150425.12195122,\n" " 220198.661315447 150423.171302099,220200.29453926 " "150421.298535644,220202.017688077 150419.508163512,220203.826610682 " "150417.804498867,\n" " 220205.716949223 150416.191645986,220207.684149708 " "150414.673490372,220209.72347298 150413.253689397,220211.830006129 " "150411.935663483,\n" " 220213.998674333 150410.722587873,220216.22425308 " "150409.61738497,220218.501380756 150408.622717305,220220.824571561 " "150407.740981121,\n" " 220223.188228725 150406.974300596,220225.586657991 150406.324522731,220227 " "150406)\n" "\n" "--3d example\n" "SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(220268 " "150415 1,220227 150505 2,220227 150406 3)')));\n" "Output\n" "------\n" " LINESTRING(220268 150415 1,220269.95064912 150416.539364228 " "1.0181172856673,\n" " 220271.823415575 150418.17258804 1.03623457133459,220273.613787707 " "150419.895736857 1.05435185700189,....AD INFINITUM ....\n" " 220225.586657991 150406.324522731 1.32611114201132,220227 150406 3)\n" "\n" "--use only 2 segments to approximate quarter circle\n" "SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 " "150415,220227 150505,220227 150406)'),2));\n" "st_astext\n" "------------------------------\n" " LINESTRING(220268 150415,220287.740300149 150448.342699654,220278.12195122 " "150485.87804878,\n" " 220244.779251566 150505.61834893,220207.243902439 150496,220187.50360229 " "150462.657300346,\n" " 220197.12195122 150425.12195122,220227 150406)" msgstr "" #. Tag: refname #: reference_processing.xml:619 #, no-c-format msgid "ST_DelaunayTriangles" msgstr "" #. Tag: refpurpose #: reference_processing.xml:621 #, no-c-format msgid "Return a Delaunay triangulation around the given input points." msgstr "" #. Tag: funcprototype #: reference_processing.xml:628 #, no-c-format msgid "" "geometry ST_DelaunayTriangles " "geometry g1 " "float tolerance " "int4 flags" msgstr "" #. Tag: para #: reference_processing.xml:640 #, no-c-format msgid "" "Return a Delaunay triangulation around the vertices of the input geometry. " "Output is a COLLECTION of polygons (for flags=0) or a MULTILINESTRING (for " "flags=1). The tolerance, if any, is used to snap input vertices togheter." msgstr "" #. Tag: para #: reference_processing.xml:649 #, no-c-format msgid "Availability: 2.1.0 - requires GEOS >= 3.4.0." msgstr "" #. Tag: title #: reference_processing.xml:654 #, no-c-format msgid "2D Examples" msgstr "" #. Tag: para #: reference_processing.xml:663 #, no-c-format msgid "Original polygons" msgstr "" #. Tag: programlisting #: reference_processing.xml:666 #, no-c-format msgid "" "-- our original geometry --\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " )" msgstr "" #. Tag: para #: reference_processing.xml:674 #, no-c-format msgid "" "ST_DelaunayTriangles of 2 polygons: delaunay triangle polygons each triangle " "themed in different color" msgstr "" #. Tag: programlisting #: reference_processing.xml:677 #, no-c-format msgid "" "-- geometries overlaid multilinestring triangles\n" "SELECT \n" " ST_DelaunayTriangles(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " )) \n" " As dtriag;" msgstr "" #. Tag: para #: reference_processing.xml:684 #, no-c-format msgid "-- delaunay triangles as multilinestring" msgstr "" #. Tag: programlisting #: reference_processing.xml:687 #, no-c-format msgid "" "SELECT \n" " ST_DelaunayTriangles(\n" " ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, \n" " 50 60, 125 100, 175 150))'),\n" " ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)\n" " ),0.001,1) \n" " As dtriag;" msgstr "" #. Tag: para #: reference_processing.xml:695 #, no-c-format msgid "-- delaunay triangles of 45 points as 55 triangle polygons" msgstr "" #. Tag: programlisting #: reference_processing.xml:698 #, no-c-format msgid "" "-- this produces a table of 42 points that form an L shape\n" "SELECT (ST_DumpPoints(ST_GeomFromText(\n" "'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14,\n" "150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6,\n" "14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130,\n" "6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114,\n" "14 94,14 74,14 54,14 34,14 14)'))).geom \n" " INTO TABLE l_shape;\n" "-- output as individual polygon triangles\n" "SELECT ST_AsText((ST_Dump(geom)).geom) As wkt\n" "FROM ( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geom\n" "FROM l_shape) As foo;\n" "\n" "---wkt ---\n" "POLYGON((6 194,6 190,14 194,6 194))\n" "POLYGON((14 194,6 190,14 174,14 194))\n" "POLYGON((14 194,14 174,154 14,14 194))\n" "POLYGON((154 14,14 174,14 154,154 14))\n" "POLYGON((154 14,14 154,150 14,154 14))\n" "POLYGON((154 14,150 14,154 6,154 14))\n" ":\n" ":" msgstr "" #. Tag: title #: reference_processing.xml:707 #, no-c-format msgid "3D Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:708 #, no-c-format msgid "" "-- 3D multipoint --\n" "SELECT ST_AsText(ST_DelaunayTriangles(ST_GeomFromText(\n" "'MULTIPOINT Z(14 14 10,\n" "150 14 100,34 6 25, 20 10 150)'))) As wkt;\n" "\n" "-----wkt----\n" "GEOMETRYCOLLECTION Z (POLYGON Z ((14 14 10,20 10 150,34 6 25,14 14 10))\n" " ,POLYGON Z ((14 14 10,34 6 25,150 14 100,14 14 10)))" msgstr "" #. Tag: para #: reference_processing.xml:712 reference_processing.xml:1323 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:719 #, no-c-format msgid "ST_Difference" msgstr "" #. Tag: refpurpose #: reference_processing.xml:721 #, no-c-format msgid "" "Returns a geometry that represents that part of geometry A that does not " "intersect with geometry B." msgstr "" #. Tag: funcprototype #: reference_processing.xml:727 #, no-c-format msgid "" "geometry ST_Difference " "geometry geomA " "geometry geomB" msgstr "" #. Tag: para #: reference_processing.xml:738 #, no-c-format msgid "" "Returns a geometry that represents that part of geometry A that does not " "intersect with geometry B. One can think of this as GeometryA - " "ST_Intersection(A,B). If A is completely contained in B then an empty " "geometry collection is returned." msgstr "" #. Tag: para #: reference_processing.xml:741 #, no-c-format msgid "Note - order matters. B - A will always return a portion of B" msgstr "" #. Tag: para #: reference_processing.xml:745 reference_processing.xml:1928 #, no-c-format msgid "Do not call with a GeometryCollection as an argument" msgstr "" #. Tag: para #: reference_processing.xml:748 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.20" msgstr "" #. Tag: para #: reference_processing.xml:749 reference_processing.xml:1932 #, no-c-format msgid "" "&Z_support; However it seems to only consider x y when doing the difference " "and tacks back on the Z-Index" msgstr "" #. Tag: para #: reference_processing.xml:766 #, no-c-format msgid "The original linestrings shown together." msgstr "" #. Tag: para #: reference_processing.xml:778 #, no-c-format msgid "The difference of the two linestrings" msgstr "" #. Tag: programlisting #: reference_processing.xml:787 #, no-c-format msgid "" "--Safe for 2d. This is same geometries as what is shown for " "st_symdifference\n" "SELECT ST_AsText(\n" " ST_Difference(\n" " ST_GeomFromText('LINESTRING(50 100, 50 200)'),\n" " ST_GeomFromText('LINESTRING(50 50, 50 150)')\n" " )\n" " );\n" "\n" "st_astext\n" "---------\n" "LINESTRING(50 150,50 200)" msgstr "" #. Tag: programlisting #: reference_processing.xml:789 #, no-c-format msgid "" "--When used in 3d doesn't quite do the right thing\n" "SELECT ST_AsEWKT(ST_Difference(ST_GeomFromEWKT('MULTIPOINT(-118.58 38.38 " "5,-118.60 38.329 6,-118.614 38.281 7)'), ST_GeomFromEWKT('POINT(-118.614 " "38.281 5)')));\n" "st_asewkt\n" "---------\n" "MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)" msgstr "" #. Tag: refname #: reference_processing.xml:802 #, no-c-format msgid "ST_Dump" msgstr "" #. Tag: refpurpose #: reference_processing.xml:803 #, no-c-format msgid "" "Returns a set of geometry_dump (geom,path) rows, that make up a geometry g1." msgstr "" #. Tag: funcprototype #: reference_processing.xml:808 #, no-c-format msgid "" "geometry_dump[] ST_Dump " "geometry g1" msgstr "" #. Tag: para #: reference_processing.xml:817 #, no-c-format msgid "" "This is a set-returning function (SRF). It returns a set of geometry_dump " "rows, formed by a geometry (geom) and an array of integers (path). When the " "input geometry is a simple type (POINT,LINESTRING,POLYGON) a single record " "will be returned with an empty path array and the input geometry as geom. " "When the input geometry is a collection or multi it will return a record for " "each of the collection components, and the path will express the position of " "the component inside the collection." msgstr "" #. Tag: para #: reference_processing.xml:826 #, no-c-format msgid "" "ST_Dump is useful for expanding geometries. It is the reverse of a GROUP BY " "in that it creates new rows. For example it can be use to expand " "MULTIPOLYGONS into POLYGONS." msgstr "" #. Tag: para #: reference_processing.xml:830 reference_processing.xml:889 #, no-c-format msgid "" "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was " "introduced." msgstr "" #. Tag: para #: reference_processing.xml:831 #, no-c-format msgid "Availability: PostGIS 1.0.0RC1. Requires PostgreSQL 7.3 or higher." msgstr "" #. Tag: para #: reference_processing.xml:833 #, no-c-format msgid "" "Prior to 1.3.4, this function crashes if used with geometries that contain " "CURVES. This is fixed in 1.3.4+" msgstr "" #. Tag: para #: reference_processing.xml:838 reference_processing.xml:892 #: reference_processing.xml:995 reference_processing.xml:1566 #: reference_processing.xml:1684 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_processing.xml:839 reference_processing.xml:893 #: reference_processing.xml:996 reference_processing.xml:1685 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: title #: reference_processing.xml:844 #, no-c-format msgid "Standard Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:845 #, no-c-format msgid "" "SELECT sometable.field1, sometable.field1,\n" " (ST_Dump(sometable.the_geom)).geom AS the_geom\n" "FROM sometable;\n" "\n" "-- Break a compound curve into its constituent linestrings and " "circularstrings\n" "SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)\n" " FROM ( SELECT (ST_Dump(p_geom)).geom AS geom\n" " FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 " "1, 1 0),(1 0, 0 1))') AS p_geom) AS b\n" " ) AS a;\n" " st_asewkt | st_hasarc\n" "-----------------------------+----------\n" " CIRCULARSTRING(0 0,1 1,1 0) | t\n" " LINESTRING(1 0,0 1) | f\n" "(2 rows)" msgstr "" #. Tag: title #: reference_processing.xml:847 reference_processing.xml:914 #, no-c-format msgid "Polyhedral Surfaces, TIN and Triangle Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:848 #, no-c-format msgid "" "-- Polyhedral surface example\n" "-- Break a Polyhedral surface into its faces\n" "SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt\n" " FROM (SELECT ST_Dump(ST_GeomFromEWKT('POLYHEDRALSURFACE( \n" "((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 " "0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 " "1)) \n" ")') ) AS p_geom ) AS a;\n" "\n" " path | geom_ewkt\n" "------+------------------------------------------\n" " 1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))\n" " 2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))\n" " 3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))\n" " 4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))\n" " 5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))\n" " 6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))" msgstr "" #. Tag: programlisting #: reference_processing.xml:850 #, no-c-format msgid "" "-- TIN -- \n" "SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_Dump( ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "------+-------------------------------------\n" " {1} | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))\n" " {2} | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))" msgstr "" #. Tag: para #: reference_processing.xml:854 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:860 #, no-c-format msgid "ST_DumpPoints" msgstr "" #. Tag: refpurpose #: reference_processing.xml:861 #, no-c-format msgid "" "Returns a set of geometry_dump (geom,path) rows of all points that make up a " "geometry." msgstr "" #. Tag: funcprototype #: reference_processing.xml:866 #, no-c-format msgid "" "geometry_dump[]ST_DumpPoints " "geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:875 #, no-c-format msgid "" "This set-returning function (SRF) returns a set of geometry_dump rows formed by a geometry (geom) and an array of " "integers (path)." msgstr "" #. Tag: para #: reference_processing.xml:878 #, no-c-format msgid "" "The geom component of geometry_dump are all the POINTs that make up the supplied " "geometry" msgstr "" #. Tag: para #: reference_processing.xml:881 #, no-c-format msgid "" "The path component of geometry_dump (an integer[]) is an index reference enumerating " "the POINTs of the supplied geometry. For example, if a " "LINESTRING is supplied, a path of {i} " "is returned where i is the nth " "coordinate in the LINESTRING. If a POLYGON is supplied, a path of {i,j} is returned where " "i is the ring number (1 is outer; inner rings follow) and " "j enumerates the POINTs (again 1-based " "index)." msgstr "" #. Tag: para #: reference_processing.xml:890 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: title #: reference_processing.xml:897 #, no-c-format msgid "Classic Explode a Table of LineStrings into nodes" msgstr "" #. Tag: programlisting #: reference_processing.xml:898 #, no-c-format msgid "" "SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode\n" "FROM (SELECT 1 As edge_id\n" " , ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS " "dp\n" " UNION ALL\n" " SELECT 2 As edge_id\n" " , ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS " "dp\n" " ) As foo;\n" " edge_id | index | wktnode\n" "---------+-------+--------------\n" " 1 | 1 | POINT(1 2)\n" " 1 | 2 | POINT(3 4)\n" " 1 | 3 | POINT(10 10)\n" " 2 | 1 | POINT(3 5)\n" " 2 | 2 | POINT(5 6)\n" " 2 | 3 | POINT(9 10)" msgstr "" #. Tag: title #: reference_processing.xml:901 #, no-c-format msgid "Standard Geometry Examples" msgstr "" #. Tag: programlisting #: reference_processing.xml:911 #, no-c-format msgid "" "SELECT path, ST_AsText(geom) \n" "FROM (\n" " SELECT (ST_DumpPoints(g.geom)).* \n" " FROM\n" " (SELECT \n" " 'GEOMETRYCOLLECTION(\n" " POINT ( 0 1 ), \n" " LINESTRING ( 0 3, 3 4 ),\n" " POLYGON (( 2 0, 2 3, 0 2, 2 0 )),\n" " POLYGON (( 3 0, 3 3, 6 3, 6 0, 3 0 ), \n" " ( 5 1, 4 2, 5 2, 5 1 )),\n" " MULTIPOLYGON (\n" " (( 0 5, 0 8, 4 8, 4 5, 0 5 ), \n" " ( 1 6, 3 6, 2 7, 1 6 )), \n" " (( 5 4, 5 8, 6 7, 5 4 ))\n" " )\n" " )'::geometry AS geom\n" " ) AS g\n" " ) j;\n" " \n" " path | st_astext \n" "-----------+------------\n" " {1,1} | POINT(0 1)\n" " {2,1} | POINT(0 3)\n" " {2,2} | POINT(3 4)\n" " {3,1,1} | POINT(2 0)\n" " {3,1,2} | POINT(2 3)\n" " {3,1,3} | POINT(0 2)\n" " {3,1,4} | POINT(2 0)\n" " {4,1,1} | POINT(3 0)\n" " {4,1,2} | POINT(3 3)\n" " {4,1,3} | POINT(6 3)\n" " {4,1,4} | POINT(6 0)\n" " {4,1,5} | POINT(3 0)\n" " {4,2,1} | POINT(5 1)\n" " {4,2,2} | POINT(4 2)\n" " {4,2,3} | POINT(5 2)\n" " {4,2,4} | POINT(5 1)\n" " {5,1,1,1} | POINT(0 5)\n" " {5,1,1,2} | POINT(0 8)\n" " {5,1,1,3} | POINT(4 8)\n" " {5,1,1,4} | POINT(4 5)\n" " {5,1,1,5} | POINT(0 5)\n" " {5,1,2,1} | POINT(1 6)\n" " {5,1,2,2} | POINT(3 6)\n" " {5,1,2,3} | POINT(2 7)\n" " {5,1,2,4} | POINT(1 6)\n" " {5,2,1,1} | POINT(5 4)\n" " {5,2,1,2} | POINT(5 8)\n" " {5,2,1,3} | POINT(6 7)\n" " {5,2,1,4} | POINT(5 4)\n" "(29 rows)" msgstr "" #. Tag: programlisting #: reference_processing.xml:915 #, no-c-format msgid "" "-- Polyhedral surface cube -- \n" "SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_DumpPoints(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 " "1, 0 1 0, 0 0 0)), \n" "((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 " "0)), \n" "((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), \n" "((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 " "1)) )') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "---------+--------------\n" " {1,1,1} | POINT(0 0 0)\n" " {1,1,2} | POINT(0 0 1)\n" " {1,1,3} | POINT(0 1 1)\n" " {1,1,4} | POINT(0 1 0)\n" " {1,1,5} | POINT(0 0 0)\n" " {2,1,1} | POINT(0 0 0)\n" " {2,1,2} | POINT(0 1 0)\n" " {2,1,3} | POINT(1 1 0)\n" " {2,1,4} | POINT(1 0 0)\n" " {2,1,5} | POINT(0 0 0)\n" " {3,1,1} | POINT(0 0 0)\n" " {3,1,2} | POINT(1 0 0)\n" " {3,1,3} | POINT(1 0 1)\n" " {3,1,4} | POINT(0 0 1)\n" " {3,1,5} | POINT(0 0 0)\n" " {4,1,1} | POINT(1 1 0)\n" " {4,1,2} | POINT(1 1 1)\n" " {4,1,3} | POINT(1 0 1)\n" " {4,1,4} | POINT(1 0 0)\n" " {4,1,5} | POINT(1 1 0)\n" " {5,1,1} | POINT(0 1 0)\n" " {5,1,2} | POINT(0 1 1)\n" " {5,1,3} | POINT(1 1 1)\n" " {5,1,4} | POINT(1 1 0)\n" " {5,1,5} | POINT(0 1 0)\n" " {6,1,1} | POINT(0 0 1)\n" " {6,1,2} | POINT(1 0 1)\n" " {6,1,3} | POINT(1 1 1)\n" " {6,1,4} | POINT(0 1 1)\n" " {6,1,5} | POINT(0 0 1)\n" "(30 rows)" msgstr "" #. Tag: programlisting #: reference_processing.xml:916 #, no-c-format msgid "" "-- Triangle -- \n" "SELECT (g.gdump).path, ST_AsText((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_DumpPoints( ST_GeomFromEWKT('TRIANGLE ((\n" " 0 0, \n" " 0 9, \n" " 9 0, \n" " 0 0\n" " ))') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "------+------------\n" " {1} | POINT(0 0)\n" " {2} | POINT(0 9)\n" " {3} | POINT(9 0)\n" " {4} | POINT(0 0)" msgstr "" #. Tag: programlisting #: reference_processing.xml:917 #, no-c-format msgid "" "-- TIN -- \n" "SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt\n" " FROM\n" " (SELECT \n" " ST_DumpPoints( ST_GeomFromEWKT('TIN (((\n" " 0 0 0, \n" " 0 0 1, \n" " 0 1 0, \n" " 0 0 0\n" " )), ((\n" " 0 0 0, \n" " 0 1 0, \n" " 1 1 0, \n" " 0 0 0\n" " ))\n" " )') ) AS gdump\n" " ) AS g;\n" "-- result --\n" " path | wkt\n" "---------+--------------\n" " {1,1,1} | POINT(0 0 0)\n" " {1,1,2} | POINT(0 0 1)\n" " {1,1,3} | POINT(0 1 0)\n" " {1,1,4} | POINT(0 0 0)\n" " {2,1,1} | POINT(0 0 0)\n" " {2,1,2} | POINT(0 1 0)\n" " {2,1,3} | POINT(1 1 0)\n" " {2,1,4} | POINT(0 0 0)\n" "(8 rows)" msgstr "" #. Tag: para #: reference_processing.xml:921 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_processing.xml:926 #, no-c-format msgid "ST_DumpRings" msgstr "" #. Tag: refpurpose #: reference_processing.xml:928 #, no-c-format msgid "" "Returns a set of geometry_dump rows, representing the " "exterior and interior rings of a polygon." msgstr "" #. Tag: funcprototype #: reference_processing.xml:934 #, no-c-format msgid "" "geometry_dump[] ST_DumpRings " "geometry a_polygon" msgstr "" #. Tag: para #: reference_processing.xml:944 #, no-c-format msgid "" "This is a set-returning function (SRF). It returns a set of " "geometry_dump rows, defined as an integer[] and a geometry, aliased \"path\" and \"geom\" " "respectively. The \"path\" field holds the polygon ring index containing a " "single integer: 0 for the shell, >0 for holes. The \"geom\" field contains " "the corresponding ring as a polygon." msgstr "" #. Tag: para #: reference_processing.xml:950 #, no-c-format msgid "Availability: PostGIS 1.1.3. Requires PostgreSQL 7.3 or higher." msgstr "" #. Tag: para #: reference_processing.xml:951 #, no-c-format msgid "" "This only works for POLYGON geometries. It will not work for MULTIPOLYGONS" msgstr "" #. Tag: programlisting #: reference_processing.xml:959 #, no-c-format msgid "" "SELECT sometable.field1, sometable.field1,\n" " (ST_DumpRings(sometable.the_geom)).geom As the_geom\n" "FROM sometableOfpolys;\n" "\n" "SELECT ST_AsEWKT(geom) As the_geom, path\n" " FROM ST_DumpRings(\n" " ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 " "5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,-8148941 " "5132466 1,-8148924 5132394 1,\n" " -8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 " "1,-8149237 5132093 1,-8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 " "1,\n" " -8150305 5132788 1,-8149064 5133092 1),\n" " (-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 " "1,-8149695 5132675 1,-8149362 5132394 1))')\n" " ) as foo;\n" " path | the_geom\n" "----------------------------------------------------------------------------------------------------------------\n" " {0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 " "1,-8148972 5132767 1,-8148958 5132508 1,\n" " | -8148941 5132466 1,-8148924 5132394 1,\n" " | -8148903 5132210 1,-8148930 5131967 1,\n" " | -8148992 5131978 1,-8149237 5132093 1,\n" " | -8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 " "1,-8150305 5132788 1,-8149064 5133092 1))\n" " {1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1,\n" " | -8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 " "1))" msgstr "" #. Tag: para #: reference_processing.xml:966 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:972 #, no-c-format msgid "ST_FlipCoordinates" msgstr "" #. Tag: refpurpose #: reference_processing.xml:973 #, no-c-format msgid "" "Returns a version of the given geometry with X and Y axis flipped. Useful " "for people who have built latitude/longitude features and need to fix them." msgstr "" #. Tag: funcprototype #: reference_processing.xml:981 #, no-c-format msgid "" "geometry ST_FlipCoordinates " "geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:990 #, no-c-format msgid "Returns a version of the given geometry with X and Y axis flipped." msgstr "" #. Tag: para #: reference_processing.xml:993 #, no-c-format msgid "&M_support;" msgstr "" #. Tag: title #: reference_processing.xml:1000 #, no-c-format msgid "Example" msgstr "" #. Tag: programlisting #: reference_processing.xml:1001 #, no-c-format msgid "" "" msgstr "" #. Tag: refname #: reference_processing.xml:1008 #, no-c-format msgid "ST_Intersection" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1010 #, no-c-format msgid "" "(T) Returns a geometry that represents the shared portion of geomA and " "geomB. The geography implementation does a transform to geometry to do the " "intersection and then transform back to WGS84." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:1015 #, no-c-format msgid "" " geometry ST_Intersection geometry geomA geometry geomB geography " "ST_Intersection geography geogA geography geogB " msgstr "" #. Tag: para #: reference_processing.xml:1042 #, no-c-format msgid "" "Returns a geometry that represents the point set intersection of the " "Geometries." msgstr "" #. Tag: para #: reference_processing.xml:1045 #, no-c-format msgid "" "In other words - that portion of geometry A and geometry B that is shared " "between the two geometries." msgstr "" #. Tag: para #: reference_processing.xml:1048 #, no-c-format msgid "" "If the geometries do not share any space (are disjoint), then an empty " "geometry collection is returned." msgstr "" #. Tag: para #: reference_processing.xml:1050 #, no-c-format msgid "" "ST_Intersection in conjunction with ST_Intersects is very useful for " "clipping geometries such as in bounding box, buffer, region queries where " "you only want to return that portion of a geometry that sits in a country or " "region of interest." msgstr "" #. Tag: para #: reference_processing.xml:1053 #, no-c-format msgid "" "Geography: For geography this is really a thin wrapper around the geometry " "implementation. It first determines the best SRID that fits the bounding box " "of the 2 geography objects (if geography objects are within one half zone " "UTM but not same UTM will pick one of those) (favoring UTM or Lambert " "Azimuthal Equal Area (LAEA) north/south pole, and falling back on mercator " "in worst case scenario) and then intersection in that best fit planar " "spatial ref and retransforms back to WGS84 geography." msgstr "" #. Tag: para #: reference_processing.xml:1056 #, no-c-format msgid "Do not call with a GEOMETRYCOLLECTION as an argument" msgstr "" #. Tag: para #: reference_processing.xml:1061 #, no-c-format msgid "Availability: 1.5 support for geography data type was introduced." msgstr "" #. Tag: para #: reference_processing.xml:1064 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.18" msgstr "" #. Tag: programlisting #: reference_processing.xml:1068 #, no-c-format msgid "" "SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, " "0 2 )'::geometry));\n" " st_astext\n" "---------------\n" "GEOMETRYCOLLECTION EMPTY\n" "(1 row)\n" "SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, " "0 2 )'::geometry));\n" " st_astext\n" "---------------\n" "POINT(0 0)\n" "(1 row)\n" "\n" "---Clip all lines (trails) by country (here we assume country geom are " "POLYGON or MULTIPOLYGONS)\n" "-- NOTE: we are only keeping intersections that result in a LINESTRING or " "MULTILINESTRING because we don't\n" "-- care about trails that just share a point\n" "-- the dump is needed to expand a geometry collection into individual single " "MULT* parts\n" "-- the below is fairly generic and will work for polys, etc. by just " "changing the where clause\n" "SELECT clipped.gid, clipped.f_name, clipped_geom\n" "FROM (SELECT trails.gid, trails.f_name, (ST_Dump(ST_Intersection(country." "the_geom, trails.the_geom))).geom As clipped_geom\n" "FROM country\n" " INNER JOIN trails\n" " ON ST_Intersects(country.the_geom, trails.the_geom)) As clipped\n" " WHERE ST_Dimension(clipped.clipped_geom) = 1 ;\n" "\n" "--For polys e.g. polygon landmarks, you can also use the sometimes faster " "hack that buffering anything by 0.0\n" "-- except a polygon results in an empty geometry collection\n" "--(so a geometry collection containing polys, lines and points)\n" "-- buffered by 0.0 would only leave the polygons and dissolve the collection " "shell\n" "SELECT poly.gid, ST_Multi(ST_Buffer(\n" " ST_Intersection(country.the_geom, poly." "the_geom),\n" " 0.0)\n" " ) As clipped_geom\n" "FROM country\n" " INNER JOIN poly\n" " ON ST_Intersects(country.the_geom, poly.the_geom)\n" " WHERE Not ST_IsEmpty(ST_Buffer(ST_Intersection(country.the_geom, " "poly.the_geom),0.0));" msgstr "" #. Tag: para #: reference_processing.xml:1072 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_processing.xml:1078 #, no-c-format msgid "ST_LineToCurve" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1080 #, no-c-format msgid "Converts a LINESTRING/POLYGON to a CIRCULARSTRING, CURVED POLYGON" msgstr "" #. Tag: funcprototype #: reference_processing.xml:1085 #, no-c-format msgid "" "geometry ST_LineToCurve " "geometry geomANoncircular" msgstr "" #. Tag: para #: reference_processing.xml:1095 #, no-c-format msgid "" "Converts plain LINESTRING/POLYGONS to CIRCULAR STRINGs and Curved Polygons. " "Note much fewer points are needed to describe the curved equivalent." msgstr "" #. Tag: programlisting #: reference_processing.xml:1106 #, no-c-format msgid "" "SELECT ST_AsText(ST_LineToCurve(foo.the_geom)) As curvedastext,ST_AsText(foo." "the_geom) As non_curvedastext\n" " FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3) As the_geom) As " "foo;\n" "\n" "curvedatext " "non_curvedastext\n" "--------------------------------------------------------------------|-----------------------------------------------------------------\n" "CURVEPOLYGON(CIRCULARSTRING(4 3,3.12132034355964 0.878679656440359, | POLYGON" "((4 3,3.94235584120969 2.41472903395162,3.77163859753386 1.85194970290473,\n" "1 0,-1.12132034355965 5.12132034355963,4 3)) | " "3.49440883690764 1.33328930094119,3.12132034355964 0.878679656440359,\n" " | " "2.66671069905881 0.505591163092366,2.14805029709527 0.228361402466141,\n" " | " "1.58527096604839 0.0576441587903094,1 0,\n" " | " "0.414729033951621 0.0576441587903077,-0.148050297095264 0.228361402466137,\n" " | " "-0.666710699058802 0.505591163092361,-1.12132034355964 0.878679656440353,\n" " | " "-1.49440883690763 1.33328930094119,-1.77163859753386 1.85194970290472\n" " | --" "ETC-- ,3.94235584120969 3.58527096604839,4 3))\n" "--3D example\n" "SELECT ST_AsEWKT(ST_LineToCurve(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 8, 5 " "6 4, 7 8 4, 9 10 4)')));\n" "\n" " st_asewkt\n" "------------------------------------\n" " CIRCULARSTRING(1 2 3,5 6 4,9 10 4)" msgstr "" #. Tag: refname #: reference_processing.xml:1119 #, no-c-format msgid "ST_MakeValid" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1120 #, no-c-format msgid "Attempts to make an invalid geometry valid w/out loosing vertices." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1125 #, no-c-format msgid "" "geometry ST_MakeValid " "geometry input" msgstr "" #. Tag: para #: reference_processing.xml:1134 #, no-c-format msgid "" "The function attempts to create a valid representation of a given invalid " "geometry without loosing any of the input vertices. Already-valid geometries " "are returned w/out further intervention." msgstr "" #. Tag: para #: reference_processing.xml:1140 #, no-c-format msgid "" "Supported inputs are: POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, " "POLYGONS, MULTIPOLYGONS and GEOMETRYCOLLECTIONS containing any mix of them." msgstr "" #. Tag: para #: reference_processing.xml:1146 #, no-c-format msgid "" "In case of full or partial dimensional collapses, the output geometry may be " "a collection of lower-to-equal dimension geometries or a geometry of lower " "dimension." msgstr "" #. Tag: para #: reference_processing.xml:1152 #, no-c-format msgid "" "Single polygons may become multi-geometries in case of self-intersections." msgstr "" #. Tag: para #: reference_processing.xml:1156 #, no-c-format msgid "Availability: 2.0.0, requires GEOS-3.3.0" msgstr "" #. Tag: para #: reference_processing.xml:1157 #, no-c-format msgid "Enahnced: 2.0.1, speed improvements requires GEOS-3.3.4" msgstr "" #. Tag: para #: reference_processing.xml:1158 #, no-c-format msgid "Enhanced: 2.1.0 added support for GEOMETRYCOLLECTION and MULTIPOINT." msgstr "" #. Tag: refname #: reference_processing.xml:1175 #, no-c-format msgid "ST_MemUnion" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1177 #, no-c-format msgid "" "Same as ST_Union, only memory-friendly (uses less memory and more processor " "time)." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1183 #, no-c-format msgid "" "geometry ST_MemUnion " "geometry set geomfield" msgstr "" #. Tag: para #: reference_processing.xml:1194 #, no-c-format msgid "Some useful description here." msgstr "" #. Tag: para #: reference_processing.xml:1198 #, no-c-format msgid "" "Same as ST_Union, only memory-friendly (uses less memory and more processor " "time). This aggregate function works by unioning the geometries one at a " "time to previous result as opposed to ST_Union aggregate which first creates " "an array and then unions" msgstr "" #. Tag: programlisting #: reference_processing.xml:1210 #, no-c-format msgid "See ST_Union" msgstr "" #. Tag: refname #: reference_processing.xml:1223 #, no-c-format msgid "ST_MinimumBoundingCircle" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1224 #, no-c-format msgid "" "Returns the smallest circle polygon that can fully contain a geometry. " "Default uses 48 segments per quarter circle." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1230 #, no-c-format msgid "" "geometry ST_MinimumBoundingCircle " "geometry geomA " "integer " "num_segs_per_qt_circ=48" msgstr "" #. Tag: para #: reference_processing.xml:1240 #, no-c-format msgid "Returns the smallest circle polygon that can fully contain a geometry." msgstr "" #. Tag: para #: reference_processing.xml:1241 #, no-c-format msgid "" "The circle is approximated by a polygon with a default of 48 segments per " "quarter circle. This number can be increased with little performance penalty " "to obtain a more accurate result." msgstr "" #. Tag: para #: reference_processing.xml:1243 #, no-c-format msgid "" "It is often used with MULTI and Geometry Collections. Although it is not an " "aggregate - you can use it in conjunction with ST_Collect to get the minimum " "bounding circle of a set of geometries. ST_MinimumBoundingCircle(ST_Collect" "(somepointfield))." msgstr "" #. Tag: para #: reference_processing.xml:1248 #, no-c-format msgid "" "The ratio of the area of a polygon divided by the area of its Minimum " "Bounding Circle is often referred to as the Roeck test." msgstr "" #. Tag: para #: reference_processing.xml:1250 #, no-c-format msgid "Availability: 1.4.0 - requires GEOS" msgstr "" #. Tag: programlisting #: reference_processing.xml:1257 #, no-c-format msgid "" "SELECT d.disease_type,\n" " ST_MinimumBoundingCircle(ST_Collect(d.the_geom)) As the_geom\n" " FROM disease_obs As d\n" " GROUP BY d.disease_type;" msgstr "" #. Tag: para #: reference_processing.xml:1263 #, no-c-format msgid "" "Minimum bounding circle of a point and linestring. Using 8 segs to " "approximate a quarter circle" msgstr "" #. Tag: programlisting #: reference_processing.xml:1266 #, no-c-format msgid "" "SELECT ST_AsText(ST_MinimumBoundingCircle(\n" " ST_Collect(\n" " ST_GeomFromEWKT('LINESTRING(55 75,125 150)'),\n" " ST_Point(20, 80)), 8\n" " )) As wktmbc;\n" "wktmbc\n" "-----------\n" "POLYGON((135.59714732062 115,134.384753327498 " "102.690357210921,130.79416296937 90.8537670908995,124.963360620072 " "79.9451031602111,117.116420743937 70.3835792560632,107.554896839789 " "62.5366393799277,96.6462329091006 56.70583703063,84.8096427890789 " "53.115246672502,72.5000000000001 51.9028526793802,60.1903572109213 " "53.1152466725019,48.3537670908996 56.7058370306299,37.4451031602112 " "62.5366393799276,27.8835792560632 70.383579256063,20.0366393799278 " "79.9451031602109,14.20583703063 90.8537670908993,10.615246672502 " "102.690357210921,9.40285267938019 115,10.6152466725019 " "127.309642789079,14.2058370306299 139.1462329091,20.0366393799275 " "150.054896839789,27.883579256063 159.616420743937,\n" "37.4451031602108 167.463360620072,48.3537670908992 " "173.29416296937,60.190357210921 176.884753327498,\n" "72.4999999999998 178.09714732062,84.8096427890786 " "176.884753327498,96.6462329091003 173.29416296937,107.554896839789 " "167.463360620072,\n" "117.116420743937 159.616420743937,124.963360620072 " "150.054896839789,130.79416296937 139.146232909101,134.384753327498 " "127.309642789079,135.59714732062 115))" msgstr "" #. Tag: para #: reference_processing.xml:1270 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:1276 #, no-c-format msgid "ST_Polygonize" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1278 #, no-c-format msgid "" "Aggregate. Creates a GeometryCollection containing possible polygons formed " "from the constituent linework of a set of geometries." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:1284 #, no-c-format msgid "" " geometry ST_Polygonize geometry set geomfield geometry " "ST_Polygonize geometry[] geom_array " msgstr "" #. Tag: para #: reference_processing.xml:1300 #, no-c-format msgid "" "Creates a GeometryCollection containing possible polygons formed from the " "constituent linework of a set of geometries." msgstr "" #. Tag: para #: reference_processing.xml:1305 #, no-c-format msgid "" "Geometry Collections are often difficult to deal with with third party " "tools, so use ST_Polygonize in conjunction with " "to dump the polygons out into individual polygons." msgstr "" #. Tag: para #: reference_processing.xml:1313 #, no-c-format msgid "Availability: 1.0.0RC1 - requires GEOS >= 2.1.0." msgstr "" #. Tag: title #: reference_processing.xml:1317 #, no-c-format msgid "Examples: Polygonizing single linestrings" msgstr "" #. Tag: programlisting #: reference_processing.xml:1318 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_Polygonize(the_geom_4269)) As geomtextrep\n" "FROM (SELECT the_geom_4269 FROM ma.suffolk_edges ORDER BY tlid LIMIT 45) As " "foo;\n" "\n" "geomtextrep\n" "-------------------------------------\n" " SRID=4269;GEOMETRYCOLLECTION(POLYGON((-71.040878 42.285678,-71.040943 " "42.2856,-71.04096 42.285752,-71.040878 42.285678)),\n" " POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 " "42.354358,-71.171794 42.354971,-71.170511 42.354855,\n" " -71.17112 42.354238,-71.17166 42.353675)))\n" "(1 row)\n" "\n" "--Use ST_Dump to dump out the polygonize geoms into individual polygons\n" "SELECT ST_AsEWKT((ST_Dump(foofoo.polycoll)).geom) As geomtextrep\n" "FROM (SELECT ST_Polygonize(the_geom_4269) As polycoll\n" " FROM (SELECT the_geom_4269 FROM ma.suffolk_edges\n" " ORDER BY tlid LIMIT 45) As foo) As foofoo;\n" "\n" "geomtextrep\n" "------------------------\n" " SRID=4269;POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 " "42.285752,\n" "-71.040878 42.285678))\n" " SRID=4269;POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 " "42.354358\n" ",-71.171794 42.354971,-71.170511 42.354855,-71.17112 42.354238,-71.17166 " "42.353675))\n" "(2 rows)" msgstr "" #. Tag: refname #: reference_processing.xml:1332 #, no-c-format msgid "ST_Node" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1334 #, no-c-format msgid "Node a set of linestrings." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1341 #, no-c-format msgid "" "geometry ST_Node " "geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:1352 #, no-c-format msgid "" "Fully node a set of linestrings using the least possible number of nodes " "while preserving all of the input ones." msgstr "" #. Tag: para #: reference_processing.xml:1359 reference_processing.xml:2103 #, no-c-format msgid "Availability: 2.0.0 - requires GEOS >= 3.3.0." msgstr "" #. Tag: para #: reference_processing.xml:1361 #, no-c-format msgid "" "Due to a bug in GEOS up to 3.3.1 this function fails to node self-" "intersecting lines. This is fixed with GEOS 3.3.2 or higher." msgstr "" #. Tag: programlisting #: reference_processing.xml:1368 #, no-c-format msgid "" "SELECT ST_AsEWKT(\n" " ST_Node('LINESTRINGZ(0 0 0, 10 10 10, 0 10 5, 10 0 3)'::" "geometry)\n" " ) As output;\n" "output\n" "-----------\n" "MULTILINESTRING((0 0 0,5 5 4.5),(5 5 4.5,10 10 10,0 10 5,5 5 4.5),(5 5 " "4.5,10 0 3))" msgstr "" #. Tag: refname #: reference_processing.xml:1383 #, no-c-format msgid "ST_OffsetCurve" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1385 #, no-c-format msgid "" "Return an offset line at a given distance and side from an input line. " "Useful for computing parallel lines about a center line" msgstr "" #. Tag: funcprototype #: reference_processing.xml:1393 #, no-c-format msgid "" "geometry ST_OffsetCurve " "geometry line " "float signed_distance text " "style_parameters=''" msgstr "" #. Tag: para #: reference_processing.xml:1406 #, no-c-format msgid "" "Return an offset line at a given distance and side from an input line. All " "points of the returned geometries are not further than the given distance " "from the input geometry." msgstr "" #. Tag: para #: reference_processing.xml:1412 #, no-c-format msgid "" "For positive distance the offset will be at the left side of the input line " "and retain the same direction. For a negative distance it'll be at the right " "side and in the opposite direction." msgstr "" #. Tag: para #: reference_processing.xml:1418 #, no-c-format msgid "" "Availability: 2.0 - requires GEOS >= 3.2, improved with GEOS >= 3.3" msgstr "" #. Tag: para #: reference_processing.xml:1422 #, no-c-format msgid "" "The optional third parameter allows specifying a list of blank-separated " "key=value pairs to tweak operations as follows:" msgstr "" #. Tag: para #: reference_processing.xml:1430 #, no-c-format msgid "" "'join=round|mitre|bevel' : join style (defaults to \"round\"). 'miter' is " "also accepted as a synonym for 'mitre'." msgstr "" #. Tag: para #: reference_processing.xml:1433 #, no-c-format msgid "" "'mitre_limit=#.#' : mitre ratio limit (only affects mitred join style). " "'miter_limit' is also accepted as a synonym for 'mitre_limit'." msgstr "" #. Tag: para #: reference_processing.xml:1438 #, no-c-format msgid "" "Units of distance are measured in units of the spatial reference system." msgstr "" #. Tag: para #: reference_processing.xml:1442 #, no-c-format msgid "The inputs can only be LINESTRINGS." msgstr "" #. Tag: para #: reference_processing.xml:1446 #, no-c-format msgid "" "This function ignores the third dimension (z) and will always give a 2-d " "result even when presented with a 3d-geometry." msgstr "" #. Tag: para #: reference_processing.xml:1454 #, no-c-format msgid "Compute an open buffer around roads" msgstr "" #. Tag: programlisting #: reference_processing.xml:1455 #, no-c-format msgid "" "SELECT ST_Union(\n" " ST_OffsetCurve(f.the_geom, f.width/2, 'quad_segs=4 join=round'),\n" " ST_OffsetCurve(f.the_geom, -f.width/2, 'quad_segs=4 join=round')\n" ") as track\n" "FROM someroadstable;" msgstr "" #. Tag: para #: reference_processing.xml:1465 #, no-c-format msgid "15, 'quad_segs=4 join=round' original line and its offset 15 units." msgstr "" #. Tag: programlisting #: reference_processing.xml:1469 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)'),\n" " 15, 'quad_segs=4 join=round'));\n" "--output --\n" "LINESTRING(164 1,18 1,12.2597485145237 2.1418070123307,\n" " 7.39339828220179 5.39339828220179,\n" " 5.39339828220179 7.39339828220179,\n" " 2.14180701233067 12.2597485145237,1 18,1 195)" msgstr "" #. Tag: para #: reference_processing.xml:1476 #, no-c-format msgid "-15, 'quad_segs=4 join=round' original line and its offset -15 units" msgstr "" #. Tag: programlisting #: reference_processing.xml:1480 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(geom,\n" " -15, 'quad_segs=4 join=round')) As notsocurvy\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- notsocurvy --\n" "LINESTRING(31 195,31 31,164 31)" msgstr "" #. Tag: para #: reference_processing.xml:1489 #, no-c-format msgid "" "double-offset to get more curvy, note the first reverses direction, so -30 + " "15 = -15" msgstr "" #. Tag: programlisting #: reference_processing.xml:1492 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(ST_OffsetCurve(geom,\n" " -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')) As " "morecurvy\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- morecurvy --\n" "LINESTRING(164 31,46 31,40.2597485145236 32.1418070123307,\n" "35.3933982822018 35.3933982822018,\n" "32.1418070123307 40.2597485145237,31 46,31 195)" msgstr "" #. Tag: para #: reference_processing.xml:1499 #, no-c-format msgid "" "double-offset to get more curvy,combined with regular offset 15 to get " "parallel lines. Overlaid with original." msgstr "" #. Tag: programlisting #: reference_processing.xml:1502 #, no-c-format msgid "" "SELECT ST_AsText(ST_Collect(\n" " ST_OffsetCurve(geom, 15, 'quad_segs=4 join=round'), \n" " ST_OffsetCurve(ST_OffsetCurve(geom,\n" " -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')\n" " )\n" ") As parallel_curves\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- parallel curves --\n" "MULTILINESTRING((164 1,18 1,12.2597485145237 2.1418070123307,\n" "7.39339828220179 5.39339828220179,5.39339828220179 7.39339828220179,\n" "2.14180701233067 12.2597485145237,1 18,1 195),\n" "(164 31,46 31,40.2597485145236 32.1418070123307,35.3933982822018 " "35.3933982822018,\n" "32.1418070123307 40.2597485145237,31 46,31 195))" msgstr "" #. Tag: para #: reference_processing.xml:1511 #, no-c-format msgid "15, 'quad_segs=4 join=bevel' shown with original line" msgstr "" #. Tag: programlisting #: reference_processing.xml:1514 #, no-c-format msgid "" "SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)'), \n" " 15, 'quad_segs=4 join=bevel'));\n" "-- output --\n" "LINESTRING(164 1,18 1,7.39339828220179 5.39339828220179,\n" " 5.39339828220179 7.39339828220179,1 18,1 195)" msgstr "" #. Tag: para #: reference_processing.xml:1522 #, no-c-format msgid "15,-15 collected, join=mitre mitre_limit=2.1" msgstr "" #. Tag: programlisting #: reference_processing.xml:1525 #, no-c-format msgid "" "SELECT ST_AsText(ST_Collect(\n" " ST_OffsetCurve(geom, 15, 'quad_segs=4 join=mitre mitre_limit=2.2'),\n" " ST_OffsetCurve(geom, -15, 'quad_segs=4 join=mitre mitre_limit=2.2')\n" " ) )\n" " FROM ST_GeomFromText(\n" "'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,\n" " 44 16,24 16,20 16,18 16,17 17,\n" " 16 18,16 20,16 40,16 60,16 80,16 100,\n" " 16 120,16 140,16 160,16 180,16 195)') As geom;\n" "-- output --\n" "MULTILINESTRING((164 1,11.7867965644036 1,1 11.7867965644036,1 195),\n" " (31 195,31 31,164 31))" msgstr "" #. Tag: refname #: reference_processing.xml:1542 #, no-c-format msgid "ST_RemoveRepeatedPoints" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1543 #, no-c-format msgid "Returns a version of the given geometry with duplicated points removed." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1549 #, no-c-format msgid "" "geometry ST_RemoveRepeatedPoints " "geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:1558 #, no-c-format msgid "" "Returns a version of the given geometry with duplicated points removed. Will " "actually do something only with (multi)lines, (multi)polygons and " "multipoints but you can safely call it with any kind of geometry. Since " "simplification occurs on a object-by-object basis you can also feed a " "GeometryCollection to this function." msgstr "" #. Tag: refname #: reference_processing.xml:1578 #, no-c-format msgid "ST_SharedPaths" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1579 #, no-c-format msgid "" "Returns a collection containing paths shared by the two input linestrings/" "multilinestrings." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1584 #, no-c-format msgid "" "geometry ST_SharedPaths " "geometry lineal1 " "geometry lineal2" msgstr "" #. Tag: para #: reference_processing.xml:1594 #, no-c-format msgid "" "Returns a collection containing paths shared by the two input geometries. " "Those going in the same direction are in the first element of the " "collection, those going in the opposite direction are in the second element. " "The paths themselves are given in the direction of the first geometry." msgstr "" #. Tag: para #: reference_processing.xml:1599 #, no-c-format msgid "Availability: 2.0.0 requires GEOS >= 3.3.0." msgstr "" #. Tag: title #: reference_processing.xml:1602 #, no-c-format msgid "Examples: Finding shared paths" msgstr "" #. Tag: para #: reference_processing.xml:1612 #, no-c-format msgid "A multilinestring and a linestring" msgstr "" #. Tag: para #: reference_processing.xml:1623 #, no-c-format msgid "" "The shared path of multilinestring and linestring overlaid with original " "geometries." msgstr "" #. Tag: programlisting #: reference_processing.xml:1626 #, no-c-format msgid "" "SELECT ST_AsText(\n" " ST_SharedPaths(\n" " ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 " "125),\n" " (51 150,101 150,76 175,51 150))'),\n" " ST_GeomFromText('LINESTRING(151 100,126 156.25,126 125,90 161, 76 " "175)')\n" " )\n" " ) As wkt\n" "\n" " wkt\n" "-------------------------------------------------------------\n" "GEOMETRYCOLLECTION(MULTILINESTRING((126 156.25,126 125),\n" " (101 150,90 161),(90 161,76 175)),MULTILINESTRING EMPTY)" msgstr "" #. Tag: programlisting #: reference_processing.xml:1632 #, no-c-format msgid "" "-- same example but linestring orientation flipped\n" "SELECT ST_AsText(\n" " ST_SharedPaths(\n" " ST_GeomFromText('LINESTRING(76 175,90 161,126 125,126 156.25,151 100)'),\n" " ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),\n" " (51 150,101 150,76 175,51 150))')\n" " )\n" " ) As wkt\n" "\n" " wkt\n" "-------------------------------------------------------------\n" "GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,\n" "MULTILINESTRING((76 175,90 161),(90 161,101 150),(126 125,126 156.25)))" msgstr "" #. Tag: para #: reference_processing.xml:1642 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_processing.xml:1652 #, no-c-format msgid "ST_Shift_Longitude" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1654 #, no-c-format msgid "" "Reads every point/vertex in every component of every feature in " "a geometry, and if the longitude coordinate is <0, adds 360 to it. The " "result would be a 0-360 version of the data to be plotted in a 180 centric " "map" msgstr "" #. Tag: funcprototype #: reference_processing.xml:1662 #, no-c-format msgid "" "geometry ST_Shift_Longitude " "geometry geomA" msgstr "" #. Tag: para #: reference_processing.xml:1672 #, no-c-format msgid "" "Reads every point/vertex in every component of every feature in a " "geometry, and if the longitude coordinate is <0, adds 360 to it. The " "result would be a 0-360 version of the data to be plotted in a 180 centric " "map" msgstr "" #. Tag: para #: reference_processing.xml:1676 #, no-c-format msgid "This is only useful for data in long lat e.g. 4326 (WGS 84 long lat)" msgstr "" #. Tag: para #: reference_processing.xml:1678 #, no-c-format msgid "" "Pre-1.3.4 bug prevented this from working for MULTIPOINT. 1.3.4+ works with " "MULTIPOINT as well." msgstr "" #. Tag: para #: reference_processing.xml:1683 #, no-c-format msgid "Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced." msgstr "" #. Tag: programlisting #: reference_processing.xml:1692 #, no-c-format msgid "" "--3d points\n" "SELECT ST_AsEWKT(ST_Shift_Longitude(ST_GeomFromEWKT('SRID=4326;POINT(-118.58 " "38.38 10)'))) As geomA,\n" " ST_AsEWKT(ST_Shift_Longitude(ST_GeomFromEWKT('SRID=4326;POINT(241.42 " "38.38 10)'))) As geomb\n" "geomA geomB\n" "---------- -----------\n" "SRID=4326;POINT(241.42 38.38 10) SRID=4326;POINT(-118.58 38.38 10)\n" "\n" "--regular line string\n" "SELECT ST_AsText(ST_Shift_Longitude(ST_GeomFromText('LINESTRING(-118.58 " "38.38, -118.20 38.45)')))\n" "\n" "st_astext\n" "----------\n" "LINESTRING(241.42 38.38,241.8 38.45)" msgstr "" #. Tag: para #: reference_processing.xml:1698 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_processing.xml:1704 #, no-c-format msgid "ST_Simplify" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1705 #, no-c-format msgid "" "Returns a \"simplified\" version of the given geometry using the Douglas-" "Peucker algorithm." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1711 #, no-c-format msgid "" "geometry ST_Simplify " "geometry geomA " "float tolerance" msgstr "" #. Tag: para #: reference_processing.xml:1721 #, no-c-format msgid "" "Returns a \"simplified\" version of the given geometry using the Douglas-" "Peucker algorithm. Will actually do something only with (multi)lines and " "(multi)polygons but you can safely call it with any kind of geometry. Since " "simplification occurs on a object-by-object basis you can also feed a " "GeometryCollection to this function." msgstr "" #. Tag: para #: reference_processing.xml:1728 #, no-c-format msgid "" "Note that returned geometry might loose its simplicity (see )" msgstr "" #. Tag: para #: reference_processing.xml:1730 #, no-c-format msgid "" "Note topology may not be preserved and may result in invalid geometries. Use " "(see ) to preserve topology." msgstr "" #. Tag: para #: reference_processing.xml:1733 #, no-c-format msgid "Availability: 1.2.2" msgstr "" #. Tag: para #: reference_processing.xml:1738 #, no-c-format msgid "A circle simplified too much becomes a triangle, medium an octagon," msgstr "" #. Tag: programlisting #: reference_processing.xml:1739 #, no-c-format msgid "" "SELECT ST_Npoints(the_geom) As np_before, ST_NPoints(ST_Simplify" "(the_geom,0.1)) As np01_notbadcircle, ST_NPoints(ST_Simplify(the_geom,0.5)) " "As np05_notquitecircle,\n" "ST_NPoints(ST_Simplify(the_geom,1)) As np1_octagon, ST_NPoints(ST_Simplify" "(the_geom,10)) As np10_triangle,\n" "(ST_Simplify(the_geom,100) is null) As np100_geometrygoesaway\n" "FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As the_geom) As foo;\n" "-result\n" " np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | " "np10_triangle | np100_geometrygoesaway\n" "-----------+-------------------+---------------------+-------------" "+---------------+------------------------\n" " 49 | 33 | 17 | 9 " "| 4 | t" msgstr "" #. Tag: para #: reference_processing.xml:1743 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_processing.xml:1749 #, no-c-format msgid "ST_SimplifyPreserveTopology" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1750 #, no-c-format msgid "" "Returns a \"simplified\" version of the given geometry using the Douglas-" "Peucker algorithm. Will avoid creating derived geometries (polygons in " "particular) that are invalid." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1757 #, no-c-format msgid "" "geometry ST_SimplifyPreserveTopology " "geometry geomA " "float tolerance" msgstr "" #. Tag: para #: reference_processing.xml:1767 #, no-c-format msgid "" "Returns a \"simplified\" version of the given geometry using the Douglas-" "Peucker algorithm. Will avoid creating derived geometries (polygons in " "particular) that are invalid. Will actually do something only with (multi)" "lines and (multi)polygons but you can safely call it with any kind of " "geometry. Since simplification occurs on a object-by-object basis you can " "also feed a GeometryCollection to this function." msgstr "" #. Tag: para #: reference_processing.xml:1776 #, no-c-format msgid "Requires GEOS 3.0.0+" msgstr "" #. Tag: para #: reference_processing.xml:1777 #, no-c-format msgid "Availability: 1.3.3" msgstr "" #. Tag: para #: reference_processing.xml:1782 #, no-c-format msgid "" "Same example as Simplify, but we see Preserve Topology prevents " "oversimplification. The circle can at most become a square." msgstr "" #. Tag: programlisting #: reference_processing.xml:1783 #, no-c-format msgid "" "SELECT ST_Npoints(the_geom) As np_before, ST_NPoints" "(ST_SimplifyPreserveTopology(the_geom,0.1)) As np01_notbadcircle, ST_NPoints" "(ST_SimplifyPreserveTopology(the_geom,0.5)) As np05_notquitecircle,\n" "ST_NPoints(ST_SimplifyPreserveTopology(the_geom,1)) As np1_octagon, " "ST_NPoints(ST_SimplifyPreserveTopology(the_geom,10)) As np10_square,\n" "ST_NPoints(ST_SimplifyPreserveTopology(the_geom,100)) As np100_stillsquare\n" "FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As the_geom) As foo;\n" "\n" "--result--\n" " np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | " "np10_square | np100_stillsquare\n" "-----------+-------------------+---------------------+-------------" "+---------------+-------------------\n" " 49 | 33 | 17 | 9 " "| 5 | 5" msgstr "" #. Tag: refname #: reference_processing.xml:1793 #, no-c-format msgid "ST_Split" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1794 #, no-c-format msgid "Returns a collection of geometries resulting by splitting a geometry." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1799 #, no-c-format msgid "" "geometry ST_Split " "geometry input " "geometry blade" msgstr "" #. Tag: para #: reference_processing.xml:1809 #, no-c-format msgid "" "The function supports splitting a line by point, a line by line, a polygon " "by line. The returned geometry is always a collection." msgstr "" #. Tag: para #: reference_processing.xml:1813 #, no-c-format msgid "" "Think of this function as the opposite of ST_Union. Theoretically applying " "ST_Union to the elements of the returned collection should always yield the " "original geometry." msgstr "" #. Tag: para #: reference_processing.xml:1824 #, no-c-format msgid "Polygon Cut by Line" msgstr "" #. Tag: para #: reference_processing.xml:1836 reference_processing.xml:1870 #, no-c-format msgid "Before Split" msgstr "" #. Tag: para #: reference_processing.xml:1848 reference_processing.xml:1882 #, no-c-format msgid "After split" msgstr "" #. Tag: programlisting #: reference_processing.xml:1857 #, no-c-format msgid "" "-- this creates a geometry collection consisting of the 2 halves of the " "polygon\n" "-- this is similar to the example we demonstrated in ST_BuildArea\n" "SELECT ST_Split(circle, line)\n" "FROM (SELECT \n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;\n" " \n" "-- result --\n" " GEOMETRYCOLLECTION(POLYGON((150 90,149.039264020162 " "80.2454838991936,146.193976625564 70.8658283817455,..), POLYGON(..)))\n" " \n" "-- To convert to individual polygons, you can use ST_Dump or ST_GeometryN\n" "SELECT ST_AsText((ST_Dump(ST_Split(circle, line))).geom) As wkt\n" "FROM (SELECT \n" " ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line,\n" " ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;\n" " \n" "-- result --\n" "wkt\n" "---------------\n" "POLYGON((150 90,149.039264020162 80.2454838991936,..))\n" "POLYGON((60.1371179574584 60.1371179574584,58.4265193848728 " "62.2214883490198,53.8060233744357 ..))" msgstr "" #. Tag: para #: reference_processing.xml:1858 #, no-c-format msgid "Multilinestring Cut by point" msgstr "" #. Tag: programlisting #: reference_processing.xml:1891 #, no-c-format msgid "" "SELECT ST_AsText(ST_Split(mline, pt)) As wktcut\n" " FROM (SELECT \n" " ST_GeomFromText('MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 " "90))') As mline,\n" " ST_Point(30,30) As pt) As foo;\n" " \n" "wktcut\n" "------\n" "GEOMETRYCOLLECTION(\n" " LINESTRING(10 10,30 30),\n" " LINESTRING(30 30,190 190),\n" " LINESTRING(15 15,30 30),\n" " LINESTRING(30 30,100 90)\n" ")" msgstr "" #. Tag: para #: reference_processing.xml:1895 #, no-c-format msgid "" ", , , , " msgstr "" #. Tag: refname #: reference_processing.xml:1901 #, no-c-format msgid "ST_SymDifference" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1903 #, no-c-format msgid "" "Returns a geometry that represents the portions of A and B that do not " "intersect. It is called a symmetric difference because ST_SymDifference(A,B) " "= ST_SymDifference(B,A)." msgstr "" #. Tag: funcprototype #: reference_processing.xml:1910 #, no-c-format msgid "" "geometry ST_SymDifference " "geometry geomA " "geometry geomB" msgstr "" #. Tag: para #: reference_processing.xml:1921 #, no-c-format msgid "" "Returns a geometry that represents the portions of A and B that do not " "intersect. It is called a symmetric difference because ST_SymDifference(A,B) " "= ST_SymDifference(B,A). One can think of this as ST_Union(geomA,geomB) - " "ST_Intersection(A,B)." msgstr "" #. Tag: para #: reference_processing.xml:1931 #, no-c-format msgid "&sqlmm_compliant; SQL-MM 3: 5.1.21" msgstr "" #. Tag: para #: reference_processing.xml:1951 #, no-c-format msgid "The original linestrings shown together" msgstr "" #. Tag: para #: reference_processing.xml:1963 #, no-c-format msgid "The symmetric difference of the two linestrings" msgstr "" #. Tag: programlisting #: reference_processing.xml:1972 #, no-c-format msgid "" "--Safe for 2d - symmetric difference of 2 linestrings\n" "SELECT ST_AsText(\n" " ST_SymDifference(\n" " ST_GeomFromText('LINESTRING(50 100, 50 200)'),\n" " ST_GeomFromText('LINESTRING(50 50, 50 150)')\n" " )\n" ");\n" "\n" "st_astext\n" "---------\n" "MULTILINESTRING((50 150,50 200),(50 50,50 100))" msgstr "" #. Tag: programlisting #: reference_processing.xml:1974 #, no-c-format msgid "" "--When used in 3d doesn't quite do the right thing\n" "SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 " "2)'),\n" " ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)')))\n" "\n" "st_astext\n" "------------\n" "MULTILINESTRING((1 3 2.75,1 4 2),(1 1 3,1 2 2.25))" msgstr "" #. Tag: para #: reference_processing.xml:1981 #, no-c-format msgid ", , " msgstr "" #. Tag: refname #: reference_processing.xml:1988 #, no-c-format msgid "ST_Union" msgstr "" #. Tag: refpurpose #: reference_processing.xml:1989 #, no-c-format msgid "" "Returns a geometry that represents the point set union of the Geometries." msgstr "" #. Tag: funcsynopsis #: reference_processing.xml:1994 #, no-c-format msgid "" " geometry ST_Union " "geometry set g1field geometry " "ST_Union geometry " "g1 geometry " "g2 " "geometry ST_Union " "geometry[] g1_array " "" msgstr "" #. Tag: para #: reference_processing.xml:2013 #, no-c-format msgid "" "Output type can be a MULTI*, single geometry, or Geometry Collection. Comes " "in 2 variants. Variant 1 unions 2 geometries resulting in a new geometry " "with no intersecting regions. Variant 2 is an aggregate function that takes " "a set of geometries and unions them into a single ST_Geometry resulting in " "no intersecting regions." msgstr "" #. Tag: para #: reference_processing.xml:2017 #, no-c-format msgid "" "Aggregate version: This function returns a MULTI geometry or NON-MULTI " "geometry from a set of geometries. The ST_Union() function is an \"aggregate" "\" function in the terminology of PostgreSQL. That means that it operates on " "rows of data, in the same way the SUM() and AVG() functions do." msgstr "" #. Tag: para #: reference_processing.xml:2023 #, no-c-format msgid "" "Non-Aggregate version: This function returns a geometry being a union of two " "input geometries. Output type can be a MULTI*, NON-MULTI or " "GEOMETRYCOLLECTION." msgstr "" #. Tag: para #: reference_processing.xml:2027 #, no-c-format msgid "" "ST_Collect and ST_Union are often interchangeable. ST_Union is in general " "orders of magnitude slower than ST_Collect because it tries to dissolve " "boundaries and reorder geometries to ensure that a constructed Multi* " "doesn't have intersecting regions." msgstr "" #. Tag: para #: reference_processing.xml:2033 #, no-c-format msgid "" "NOTE: this function was formerly called GeomUnion(), which was renamed from " "\"Union\" because UNION is an SQL reserved word." msgstr "" #. Tag: para #: reference_processing.xml:2036 #, no-c-format msgid "" "Availability: 1.4.0 - ST_Union was enhanced. ST_Union(geomarray) was " "introduced and also faster aggregate collection in PostgreSQL. If you are " "using GEOS 3.1.0+ ST_Union will use the faster Cascaded Union algorithm " "described in http://blog.cleverelephant.ca/2009/01/must-" "faster-unions-in-postgis-14.html" msgstr "" #. Tag: para #: reference_processing.xml:2042 #, no-c-format msgid "Aggregate version is not explicitly defined in OGC SPEC." msgstr "" #. Tag: para #: reference_processing.xml:2043 #, no-c-format msgid "" "&sqlmm_compliant; SQL-MM 3: 5.1.19 the z-index (elevation) when polygons are " "involved." msgstr "" #. Tag: para #: reference_processing.xml:2049 #, no-c-format msgid "Aggregate example" msgstr "" #. Tag: programlisting #: reference_processing.xml:2050 #, no-c-format msgid "" "SELECT stusps,\n" " ST_Multi(ST_Union(f.the_geom)) as singlegeom\n" " FROM sometable As f\n" "GROUP BY stusps" msgstr "" #. Tag: programlisting #: reference_processing.xml:2052 #, no-c-format msgid "" "SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(-2 3)') ) )\n" "\n" "st_astext\n" "----------\n" "MULTIPOINT(-2 3,1 2)\n" "\n" "\n" "SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),\n" " ST_GeomFromText('POINT(1 2)') ) );\n" "st_astext\n" "----------\n" "POINT(1 2)\n" "\n" "--3d example - sort of supports 3d (and with mixed dimensions!)\n" "SELECT ST_AsEWKT(st_union(the_geom))\n" "FROM\n" "(SELECT ST_GeomFromEWKT('POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3,\n" "-7 4.2))') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom\n" "UNION ALL\n" " SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_geom ) as foo;\n" "\n" "st_asewkt\n" "---------\n" "GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 " "5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5)));\n" "\n" "--3d example not mixing dimensions\n" "SELECT ST_AsEWKT(st_union(the_geom))\n" "FROM\n" "(SELECT ST_GeomFromEWKT('POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,\n" "-7 4.2 2))') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom\n" "UNION ALL\n" " SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom\n" "UNION ALL\n" "SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_geom ) as foo;\n" "\n" "st_asewkt\n" "---------\n" "GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 " "2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2)))\n" "\n" "--Examples using new Array construct\n" "SELECT ST_Union(ARRAY(SELECT the_geom FROM sometable));\n" "\n" "SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),\n" " ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As " "wktunion;\n" "\n" "--wktunion---\n" "MULTILINESTRING((3 4,4 5),(1 2,3 4))" msgstr "" #. Tag: refname #: reference_processing.xml:2065 #, no-c-format msgid "ST_UnaryUnion" msgstr "" #. Tag: refpurpose #: reference_processing.xml:2067 #, no-c-format msgid "Like ST_Union, but working at the geometry component level." msgstr "" #. Tag: funcprototype #: reference_processing.xml:2072 #, no-c-format msgid "" "geometry ST_UnaryUnion " "geometry geom" msgstr "" #. Tag: para #: reference_processing.xml:2083 #, no-c-format msgid "" "Unlike ST_Union, ST_UnaryUnion does dissolve boundaries between components " "of a multipolygon (invalid) and does perform union between the components of " "a geometrycollection. Each components of the input geometry is assumed to be " "valid, so you won't get a valid multipolygon out of a bow-tie polygon " "(invalid)." msgstr "" #. Tag: para #: reference_processing.xml:2093 #, no-c-format msgid "" "You may use this function to node a set of linestrings. You may mix " "ST_UnaryUnion with ST_Collect to fine-tune how many geometries at once you " "want to dissolve to be nice on both memory size and CPU time, finding the " "balance between ST_Union and ST_MemUnion." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/release_notes.xml.po0000644000000000000000000027266312025614072021757 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: release_notes.xml:3 #, no-c-format msgid "Appendix" msgstr "" #. Tag: subtitle #: release_notes.xml:4 #, no-c-format msgid "Release Notes" msgstr "" #. Tag: title #: release_notes.xml:6 #, no-c-format msgid "Release 2.0.1" msgstr "" #. Tag: para #: release_notes.xml:7 #, no-c-format msgid "Release date: 2012/06/22" msgstr "" #. Tag: para #: release_notes.xml:8 #, no-c-format msgid "" "This is a bug fix release, addressing issues that have been filed since the " "2.0.0 release." msgstr "" #. Tag: title #: release_notes.xml:10 release_notes.xml:165 release_notes.xml:179 #: release_notes.xml:217 release_notes.xml:255 release_notes.xml:286 #, no-c-format msgid "Bug Fixes" msgstr "" #. Tag: para #: release_notes.xml:11 #, no-c-format msgid "#1264, fix st_dwithin(geog, geog, 0)." msgstr "" #. Tag: para #: release_notes.xml:12 #, no-c-format msgid "#1468 shp2pgsql-gui table column schema get shifted" msgstr "" #. Tag: para #: release_notes.xml:13 #, no-c-format msgid "#1694, fix building with clang. (vince)" msgstr "" #. Tag: para #: release_notes.xml:14 #, no-c-format msgid "#1708, improve restore of pre-PostGIS 2.0 backups." msgstr "" #. Tag: para #: release_notes.xml:15 #, no-c-format msgid "#1714, more robust handling of high topology tolerance." msgstr "" #. Tag: para #: release_notes.xml:16 #, no-c-format msgid "#1755, ST_GeographyFromText support for higher dimensions." msgstr "" #. Tag: para #: release_notes.xml:17 #, no-c-format msgid "#1759, loading transformed shapefiles in raster enabled db." msgstr "" #. Tag: para #: release_notes.xml:18 #, no-c-format msgid "" "#1761, handling of subdatasets in NetCDF, HDF4 and HDF5 in raster2pgsql." msgstr "" #. Tag: para #: release_notes.xml:19 #, no-c-format msgid "#1763, topology.toTopoGeom use with custom search_path." msgstr "" #. Tag: para #: release_notes.xml:20 #, no-c-format msgid "#1766, don't let ST_RemEdge* destroy peripheral TopoGeometry objects." msgstr "" #. Tag: para #: release_notes.xml:21 #, no-c-format msgid "#1774, Clearer error on setting an edge geometry to an invalid one." msgstr "" #. Tag: para #: release_notes.xml:22 #, no-c-format msgid "#1775, ST_ChangeEdgeGeom collision detection with 2-vertex target." msgstr "" #. Tag: para #: release_notes.xml:23 #, no-c-format msgid "#1776, fix ST_SymDifference(empty, geom) to return geom." msgstr "" #. Tag: para #: release_notes.xml:24 #, no-c-format msgid "#1779, install SQL comment files." msgstr "" #. Tag: para #: release_notes.xml:25 #, no-c-format msgid "#1782, fix spatial reference string handling in raster." msgstr "" #. Tag: para #: release_notes.xml:26 #, no-c-format msgid "#1789, fix false edge-node crossing report in ValidateTopology." msgstr "" #. Tag: para #: release_notes.xml:27 #, no-c-format msgid "#1790, fix toTopoGeom handling of duplicated primitives." msgstr "" #. Tag: para #: release_notes.xml:28 #, no-c-format msgid "#1791, fix ST_Azimuth with very close but distinct points." msgstr "" #. Tag: para #: release_notes.xml:29 #, no-c-format msgid "#1797, fix (ValidateTopology(xxx)).* syntax calls." msgstr "" #. Tag: para #: release_notes.xml:30 #, no-c-format msgid "#1805, put back the 900913 SRID entry." msgstr "" #. Tag: para #: release_notes.xml:31 #, no-c-format msgid "#1813, Only show readable relations in metadata tables." msgstr "" #. Tag: para #: release_notes.xml:32 #, no-c-format msgid "" "#1819, fix floating point issues with ST_World2RasterCoord and " "ST_Raster2WorldCoord variants." msgstr "" #. Tag: para #: release_notes.xml:34 #, no-c-format msgid "#1820 compilation on 9.2beta1." msgstr "" #. Tag: para #: release_notes.xml:35 #, no-c-format msgid "#1822, topology load on PostgreSQL 9.2beta1." msgstr "" #. Tag: para #: release_notes.xml:36 #, no-c-format msgid "#1825, fix prepared geometry cache lookup" msgstr "" #. Tag: para #: release_notes.xml:37 #, no-c-format msgid "#1829, fix uninitialized read in GeoJSON parser" msgstr "" #. Tag: para #: release_notes.xml:38 #, no-c-format msgid "" "#1834, revise postgis extension to only backup user specified spatial_ref_sys" msgstr "" #. Tag: para #: release_notes.xml:40 #, no-c-format msgid "#1839, handling of subdatasets in GeoTIFF in raster2pgsql." msgstr "" #. Tag: para #: release_notes.xml:41 #, no-c-format msgid "#1840, fix logic of when to compute # of tiles in raster2pgsql." msgstr "" #. Tag: para #: release_notes.xml:42 #, no-c-format msgid "#1851, fix spatial_ref_system parameters for EPSG:3844" msgstr "" #. Tag: para #: release_notes.xml:43 #, no-c-format msgid "#1857, fix failure to detect endpoint mismatch in ST_AddEdge*Face*" msgstr "" #. Tag: para #: release_notes.xml:44 #, no-c-format msgid "" "#1865, data loss in postgis_restore.pl when data rows have leading dashes." msgstr "" #. Tag: para #: release_notes.xml:46 #, no-c-format msgid "#1867, catch invalid topology name passed to topogeo_add*" msgstr "" #. Tag: para #: release_notes.xml:47 #, no-c-format msgid "#1872, fix ST_ApproxSummarystats to prevent division by zero" msgstr "" #. Tag: para #: release_notes.xml:48 #, no-c-format msgid "" "#1873, fix ptarray_locate_point to return interpolated Z/M values for on-the-" "line case" msgstr "" #. Tag: para #: release_notes.xml:50 #, no-c-format msgid "" "#1875, ST_SummaryStats returns NULL for all parameters except count when " "count is zero" msgstr "" #. Tag: para #: release_notes.xml:52 #, no-c-format msgid "#1881, shp2pgsql-gui -- editing a field sometimes triggers removing row" msgstr "" #. Tag: para #: release_notes.xml:54 #, no-c-format msgid "" "#1883, Geocoder install fails trying to run create_census_base_tables() " "(Brian Panulla)" msgstr "" #. Tag: title #: release_notes.xml:58 release_notes.xml:148 release_notes.xml:349 #: release_notes.xml:404 #, no-c-format msgid "Enhancements" msgstr "" #. Tag: para #: release_notes.xml:59 #, no-c-format msgid "More detailed exception message from topology editing functions." msgstr "" #. Tag: para #: release_notes.xml:60 #, no-c-format msgid "#1786, improved build dependencies" msgstr "" #. Tag: para #: release_notes.xml:61 #, no-c-format msgid "#1806, speedup of ST_BuildArea, ST_MakeValid and ST_GetFaceGeometry." msgstr "" #. Tag: para #: release_notes.xml:62 #, no-c-format msgid "#1812, Add lwgeom_normalize in LIBLWGEOM for more stable testing." msgstr "" #. Tag: title #: release_notes.xml:66 #, no-c-format msgid "Release 2.0.0" msgstr "" #. Tag: para #: release_notes.xml:67 #, no-c-format msgid "Release date: 2012/04/03" msgstr "" #. Tag: para #: release_notes.xml:68 #, no-c-format msgid "" "This is a major release. A hard upgrade is required. Yes this means a full " "dump reload and some special preparations if you are using obsolete " "functions. Refer to for details on " "upgrading. Refer to for more details " "and changed/new functions." msgstr "" #. Tag: title #: release_notes.xml:72 #, no-c-format msgid "Testers - Our unsung heroes" msgstr "" #. Tag: para #: release_notes.xml:73 #, no-c-format msgid "" "We are most indebted to the numerous members in the PostGIS community who " "were brave enough to test out the new features in this release. No major " "release can be successful without these folk." msgstr "" #. Tag: para #: release_notes.xml:76 #, no-c-format msgid "" "Below are those who have been most valiant, provided very detailed and " "thorough bug reports, and detailed analysis." msgstr "" #. Tag: member #: release_notes.xml:80 #, no-c-format msgid "Andrea Peri - Lots of testing on topology, checking for correctness" msgstr "" #. Tag: member #: release_notes.xml:81 #, no-c-format msgid "Andreas Forø Tollefsen - raster testing" msgstr "" #. Tag: member #: release_notes.xml:82 #, no-c-format msgid "Chris English - topology stress testing loader functions" msgstr "" #. Tag: member #: release_notes.xml:83 #, no-c-format msgid "Salvatore Larosa - topology robustness testing" msgstr "" #. Tag: member #: release_notes.xml:84 #, no-c-format msgid "" "Brian Hamlin - Benchmarking (also experimental experimental branches before " "they are folded into core) , general testing of various pieces including " "Tiger and Topology. Testing on various server VMs" msgstr "" #. Tag: member #: release_notes.xml:89 #, no-c-format msgid "Mike Pease - Tiger geocoder testing - very detailed reports of issues" msgstr "" #. Tag: member #: release_notes.xml:90 #, no-c-format msgid "Tom van Tilburg - raster testing" msgstr "" #. Tag: title #: release_notes.xml:94 #, no-c-format msgid "Important / Breaking Changes" msgstr "" #. Tag: para #: release_notes.xml:95 #, no-c-format msgid "" "#722, #302, Most deprecated functions removed (over 250 functions) (Regina " "Obe, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:96 #, no-c-format msgid "Unknown SRID changed from -1 to 0. (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:97 #, no-c-format msgid "" "-- (most deprecated in 1.2) removed non-ST variants buffer, length, " "intersects (and internal functions renamed) etc." msgstr "" #. Tag: para #: release_notes.xml:99 #, no-c-format msgid "" "-- If you have been using deprecated functions CHANGE your apps or suffer " "the consequences. If you don't see a function documented -- it ain't " "supported or it is an internal function. Some constraints in older tables " "were built with deprecated functions. If you restore you may need to rebuild " "table constraints with populate_geometry_columns(). If you have applications " "or tools that rely on deprecated functions, please refer to for more details." msgstr "" #. Tag: para #: release_notes.xml:104 #, no-c-format msgid "" "#944 geometry_columns is now a view instead of a table (Paul Ramsey, Regina " "Obe) for tables created the old way reads (srid, type, dims) constraints for " "geometry columns created with type modifiers reads rom column definition" msgstr "" #. Tag: para #: release_notes.xml:109 #, no-c-format msgid "" "#1081, #1082, #1084, #1088 - Mangement functions support typmod geometry " "column creation functions now default to typmod creation (Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:112 #, no-c-format msgid "" "#1083 probe_geometry_columns(), rename_geometry_table_constraints(), " "fix_geometry_columns(); removed - now obsolete with geometry_column view " "(Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:116 #, no-c-format msgid "#817 Renaming old 3D functions to the convention ST_3D (Nicklas Avén)" msgstr "" #. Tag: para #: release_notes.xml:117 #, no-c-format msgid "" "#548 (sorta), ST_NumGeometries,ST_GeometryN now returns 1 (or the geometry) " "instead of null for single geometries (Sandro Santilli, Maxime van Noppen)" msgstr "" #. Tag: title #: release_notes.xml:121 release_notes.xml:321 release_notes.xml:385 #: release_notes.xml:682 #, no-c-format msgid "New Features" msgstr "" #. Tag: ulink #: release_notes.xml:122 #, no-c-format msgid "" "KNN Gist index based centroid (<->) and box (<#>) distance " "operators (Paul Ramsey / funded by Vizzuality)" msgstr "" #. Tag: para #: release_notes.xml:123 #, no-c-format msgid "" "Support for TIN and PolyHedralSurface and enhancement of many functions to " "support 3D (Olivier Courtin / Oslandia)" msgstr "" #. Tag: para #: release_notes.xml:124 #, no-c-format msgid "" "Raster support integrated and documented (Pierre Racine, Jorge " "Arévalo, Mateusz Loskot, Sandro Santilli, David Zwarg, Regina Obe, Bborie " "Park) (Company developer and funding: University Laval, Deimos Space, " "CadCorp, Michigan Tech Research Institute, Azavea, Paragon Corporation, UC " "Davis Center for Vectorborne Diseases)" msgstr "" #. Tag: para #: release_notes.xml:127 #, no-c-format msgid "" "Making spatial indexes 3D aware - in progress (Paul Ramsey, Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:128 #, no-c-format msgid "" "Topology support improved (more functions), documented, testing (Sandro " "Santilli / Faunalia for RT-SIGTA), Andrea Peri, Regina Obe, Jose Carlos " "Martinez Llari" msgstr "" #. Tag: para #: release_notes.xml:129 #, no-c-format msgid "3D relationship and measurement support functions (Nicklas Avén)" msgstr "" #. Tag: para #: release_notes.xml:130 #, no-c-format msgid "" "ST_3DDistance, ST_3DClosestPoint, ST_3DIntersects, ST_3DShortestLine and " "more..." msgstr "" #. Tag: para #: release_notes.xml:131 #, no-c-format msgid "N-Dimensional spatial indexes (Paul Ramsey / OpenGeo)" msgstr "" #. Tag: para #: release_notes.xml:132 #, no-c-format msgid "ST_Split (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:133 #, no-c-format msgid "ST_IsValidDetail (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:134 #, no-c-format msgid "ST_MakeValid (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:135 #, no-c-format msgid "ST_RemoveRepeatedPoints (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:136 #, no-c-format msgid "" "ST_GeometryN and ST_NumGeometries support for non-collections (Sandro " "Santilli)" msgstr "" #. Tag: para #: release_notes.xml:137 #, no-c-format msgid "ST_IsCollection (Sandro Santilli, Maxime van Noppen)" msgstr "" #. Tag: para #: release_notes.xml:138 #, no-c-format msgid "ST_SharedPaths (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:139 #, no-c-format msgid "ST_Snap (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:140 #, no-c-format msgid "ST_RelateMatch (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:141 #, no-c-format msgid "ST_ConcaveHull (Regina Obe and Leo Hsu / Paragon Corporation)" msgstr "" #. Tag: para #: release_notes.xml:142 #, no-c-format msgid "ST_UnaryUnion (Sandro Santilli / Faunalia for RT-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:143 #, no-c-format msgid "ST_AsX3D (Regina Obe / Arrival 3D funding)" msgstr "" #. Tag: para #: release_notes.xml:144 #, no-c-format msgid "ST_OffsetCurve (Sandro Santilli, Rafal Magda)" msgstr "" #. Tag: ulink #: release_notes.xml:145 #, no-c-format msgid "ST_GeomFromGeoJSON (Kashif Rasul, Paul Ramsey / Vizzuality funding)" msgstr "" #. Tag: para #: release_notes.xml:149 #, no-c-format msgid "" "Made shape file loader tolerant of truncated multibyte values found in some " "free worldwide shapefiles (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:150 #, no-c-format msgid "" "Lots of bug fixes and enhancements to shp2pgsql Beefing up regression tests " "for loaders Reproject support for both geometry and geography during import " "(Jeff Adams / Azavea, Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:154 #, no-c-format msgid "" "pgsql2shp conversion from predefined list (Loic Dachary / Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:156 #, no-c-format msgid "" "Shp-pgsql GUI loader - support loading multiple files at a time. (Mark " "Leslie)" msgstr "" #. Tag: para #: release_notes.xml:157 #, no-c-format msgid "" "Extras - upgraded tiger_geocoder from using old TIGER format to use new " "TIGER shp and file structure format (Stephen Frost)" msgstr "" #. Tag: para #: release_notes.xml:158 #, no-c-format msgid "" "Extras - revised tiger_geocoder to work with TIGER census 2010 data, " "addition of reverse geocoder function, various bug fixes, accuracy " "enhancements, limit max result return, speed improvements, loading routines. " "(Regina Obe, Leo Hsu / Paragon Corporation / funding provided by Hunter " "Systems Group)" msgstr "" #. Tag: para #: release_notes.xml:161 #, no-c-format msgid "Overall Documentation proofreading and corrections. (Kasif Rasul)" msgstr "" #. Tag: para #: release_notes.xml:162 #, no-c-format msgid "" "Cleanup PostGIS JDBC classes, revise to use Maven build. (Maria Arias de " "Reyna, Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:166 #, no-c-format msgid "#1335 ST_AddPoint returns incorrect result on Linux (Even Rouault)" msgstr "" #. Tag: title #: release_notes.xml:169 #, no-c-format msgid "Release specific credits" msgstr "" #. Tag: para #: release_notes.xml:170 #, no-c-format msgid "" "We thank U.S Department of State Human Information Unit (HIU) and Vizzuality for general monetary support to " "get PostGIS 2.0 out the door." msgstr "" #. Tag: title #: release_notes.xml:175 #, no-c-format msgid "Release 1.5.4" msgstr "" #. Tag: para #: release_notes.xml:176 #, no-c-format msgid "Release date: 2012/05/07" msgstr "" #. Tag: para #: release_notes.xml:177 #, no-c-format msgid "" "This is a bug fix release, addressing issues that have been filed since the " "1.5.3 release." msgstr "" #. Tag: para #: release_notes.xml:180 #, no-c-format msgid "#547, ST_Contains memory problems (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:181 #, no-c-format msgid "#621, Problem finding intersections with geography (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:182 #, no-c-format msgid "#627, PostGIS/PostgreSQL process die on invalid geometry (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:183 #, no-c-format msgid "#810, Increase accuracy of area calculation (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:184 #, no-c-format msgid "" "#852, improve spatial predicates robustness (Sandro Santilli, Nicklas Avén)" msgstr "" #. Tag: para #: release_notes.xml:185 #, no-c-format msgid "" "#877, ST_Estimated_Extent returns NULL on empty tables (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:186 #, no-c-format msgid "#1028, ST_AsSVG kills whole postgres server when fails (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:187 #, no-c-format msgid "#1056, Fix boxes of arcs and circle stroking code (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:188 #, no-c-format msgid "" "#1121, populate_geometry_columns using deprecated functions (Regin Obe, Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:189 #, no-c-format msgid "#1135, improve testsuite predictability (Andreas 'ads' Scherbaum)" msgstr "" #. Tag: para #: release_notes.xml:190 #, no-c-format msgid "#1146, images generator crashes (bronaugh)" msgstr "" #. Tag: para #: release_notes.xml:191 #, no-c-format msgid "#1170, North Pole intersection fails (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:192 #, no-c-format msgid "#1179, ST_AsText crash with bad value (kjurka)" msgstr "" #. Tag: para #: release_notes.xml:193 #, no-c-format msgid "#1184, honour DESTDIR in documentation Makefile (Bryce L Nordgren)" msgstr "" #. Tag: para #: release_notes.xml:194 #, no-c-format msgid "#1227, server crash on invalid GML" msgstr "" #. Tag: para #: release_notes.xml:195 #, no-c-format msgid "#1252, SRID appearing in WKT (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:196 #, no-c-format msgid "#1264, st_dwithin(g, g, 0) doesn't work (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:197 #, no-c-format msgid "#1344, allow exporting tables with invalid geometries (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:198 #, no-c-format msgid "#1389, wrong proj4text for SRID 31300 and 31370 (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:199 #, no-c-format msgid "#1406, shp2pgsql crashes when loading into geography (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:200 #, no-c-format msgid "#1595, fixed SRID redundancy in ST_Line_SubString (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:201 #, no-c-format msgid "#1596, check SRID in UpdateGeometrySRID (Mike Toews, Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:202 #, no-c-format msgid "#1602, fix ST_Polygonize to retain Z (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:203 #, no-c-format msgid "#1697, fix crash with EMPTY entries in GiST index (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:204 #, no-c-format msgid "#1772, fix ST_Line_Locate_Point with collapsed input (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:205 #, no-c-format msgid "#1799, Protect ST_Segmentize from max_length=0 (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:206 #, no-c-format msgid "Alter parameter order in 900913 (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:207 #, no-c-format msgid "Support builds with \"gmake\" (Greg Troxel)" msgstr "" #. Tag: title #: release_notes.xml:212 #, no-c-format msgid "Release 1.5.3" msgstr "" #. Tag: para #: release_notes.xml:213 #, no-c-format msgid "Release date: 2011/06/25" msgstr "" #. Tag: para #: release_notes.xml:214 #, no-c-format msgid "" "This is a bug fix release, addressing issues that have been filed since the " "1.5.2 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient " "otherwise a hard upgrade is recommended." msgstr "" #. Tag: para #: release_notes.xml:218 #, no-c-format msgid "" "#1056, produce correct bboxes for arc geometries, fixes index errors (Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:220 #, no-c-format msgid "" "#1007, ST_IsValid crash fix requires GEOS 3.3.0+ or 3.2.3+ (Sandro Santilli, " "reported by Birgit Laggner)" msgstr "" #. Tag: para #: release_notes.xml:222 #, no-c-format msgid "" "#940, support for PostgreSQL 9.1 beta 1 (Regina Obe, Paul Ramsey, patch " "submitted by stl)" msgstr "" #. Tag: para #: release_notes.xml:224 #, no-c-format msgid "" "#845, ST_Intersects precision error (Sandro Santilli, Nicklas Avén) Reported " "by cdestigter" msgstr "" #. Tag: para #: release_notes.xml:226 #, no-c-format msgid "#884, Unstable results with ST_Within, ST_Intersects (Chris Hodgson)" msgstr "" #. Tag: para #: release_notes.xml:227 #, no-c-format msgid "#779, shp2pgsql -S option seems to fail on points (Jeff Adams)" msgstr "" #. Tag: para #: release_notes.xml:228 #, no-c-format msgid "#666, ST_DumpPoints is not null safe (Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:229 #, no-c-format msgid "#631, Update NZ projections for grid transformation support (jpalmer)" msgstr "" #. Tag: para #: release_notes.xml:230 #, no-c-format msgid "" "#630, Peculiar Null treatment in arrays in ST_Collect (Chris Hodgson) " "Reported by David Bitner" msgstr "" #. Tag: para #: release_notes.xml:232 #, no-c-format msgid "#624, Memory leak in ST_GeogFromText (ryang, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:233 #, no-c-format msgid "" "#609, Bad source code in manual section 5.2 Java Clients (simoc, Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:234 #, no-c-format msgid "#604, shp2pgsql usage touchups (Mike Toews, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:235 #, no-c-format msgid "" "#573 ST_Union fails on a group of linestrings Not a PostGIS bug, fixed in " "GEOS 3.3.0" msgstr "" #. Tag: para #: release_notes.xml:237 #, no-c-format msgid "" "#457 ST_CollectionExtract returns non-requested type (Nicklas Avén, Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:239 #, no-c-format msgid "#441 ST_AsGeoJson Bbox on GeometryCollection error (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:240 #, no-c-format msgid "" "#411 Ability to backup invalid geometries (Sando Santilli) Reported by " "Regione Toscana" msgstr "" #. Tag: para #: release_notes.xml:242 #, no-c-format msgid "#409 ST_AsSVG - degraded (Olivier Courtin) Reported by Sdikiy" msgstr "" #. Tag: para #: release_notes.xml:244 #, no-c-format msgid "" "#373 Documentation syntax error in hard upgrade (Paul Ramsey) Reported by " "psvensso" msgstr "" #. Tag: title #: release_notes.xml:250 #, no-c-format msgid "Release 1.5.2" msgstr "" #. Tag: para #: release_notes.xml:251 #, no-c-format msgid "Release date: 2010/09/27" msgstr "" #. Tag: para #: release_notes.xml:252 #, no-c-format msgid "" "This is a bug fix release, addressing issues that have been filed since the " "1.5.1 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient " "otherwise a hard upgrade is recommended." msgstr "" #. Tag: para #: release_notes.xml:256 #, no-c-format msgid "" "Loader: fix handling of empty (0-verticed) geometries in shapefiles. (Sandro " "Santilli)" msgstr "" #. Tag: para #: release_notes.xml:257 #, no-c-format msgid "" "#536, Geography ST_Intersects, ST_Covers, ST_CoveredBy and Geometry " "ST_Equals not using spatial index (Regina Obe, Nicklas Aven)" msgstr "" #. Tag: para #: release_notes.xml:258 #, no-c-format msgid "#573, Improvement to ST_Contains geography (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:259 #, no-c-format msgid "" "Loader: Add support for command-q shutdown in Mac GTK build (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:260 #, no-c-format msgid "" "#393, Loader: Add temporary patch for large DBF files (Maxime Guillaud, Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:261 #, no-c-format msgid "#507, Fix wrong OGC URN in GeoJSON and GML output (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:262 #, no-c-format msgid "" "spatial_ref_sys.sql Add datum conversion for projection SRID 3021 (Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:263 #, no-c-format msgid "" "Geography - remove crash for case when all geographies are out of the " "estimate (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:264 #, no-c-format msgid "#469, Fix for array_aggregation error (Greg Stark, Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:265 #, no-c-format msgid "" "#532, Temporary geography tables showing up in other user sessions (Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:266 #, no-c-format msgid "#562, ST_Dwithin errors for large geographies (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:267 #, no-c-format msgid "" "#513, shape loading GUI tries to make spatial index when loading DBF only " "mode (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:268 #, no-c-format msgid "" "#527, shape loading GUI should always append log messages (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:269 #, no-c-format msgid "#504, shp2pgsql should rename xmin/xmax fields (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:270 #, no-c-format msgid "" "#458, postgis_comments being installed in contrib instead of version folder " "(Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:271 #, no-c-format msgid "" "#474, Analyzing a table with geography column crashes server (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:272 #, no-c-format msgid "#581, LWGEOM-expand produces inconsistent results (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:273 #, no-c-format msgid "" "#513, Add dbf filter to shp2pgsql-gui and allow uploading dbf only (Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:274 #, no-c-format msgid "Fix further build issues against PostgreSQL 9.0 (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:275 #, no-c-format msgid "#572, Password whitespace for Shape File (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:276 #, no-c-format msgid "" "#603, shp2pgsql: \"-w\" produces invalid WKT for MULTI* objects. (Mark Cave-" "Ayland)" msgstr "" #. Tag: title #: release_notes.xml:281 #, no-c-format msgid "Release 1.5.1" msgstr "" #. Tag: para #: release_notes.xml:282 #, no-c-format msgid "Release date: 2010/03/11" msgstr "" #. Tag: para #: release_notes.xml:283 #, no-c-format msgid "" "This is a bug fix release, addressing issues that have been filed since the " "1.4.1 release. If you are running PostGIS 1.3+, a soft upgrade is sufficient " "otherwise a hard upgrade is recommended." msgstr "" #. Tag: para #: release_notes.xml:287 #, no-c-format msgid "" "#410, update embedded bbox when applying ST_SetPoint, ST_AddPoint " "ST_RemovePoint to a linestring (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:288 #, no-c-format msgid "" "#411, allow dumping tables with invalid geometries (Sandro Santilli, for " "Regione Toscana-SIGTA)" msgstr "" #. Tag: para #: release_notes.xml:289 #, no-c-format msgid "" "#414, include geography_columns view when running upgrade scripts (Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:290 #, no-c-format msgid "" "#419, allow support for multilinestring in ST_Line_Substring (Paul Ramsey, " "for Lidwala Consulting Engineers)" msgstr "" #. Tag: para #: release_notes.xml:291 #, no-c-format msgid "#421, fix computed string length in ST_AsGML() (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:292 #, no-c-format msgid "" "#441, fix GML generation with heterogeneous collections (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:293 #, no-c-format msgid "" "#443, incorrect coordinate reversal in GML 3 generation (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:294 #, no-c-format msgid "" "#450, #451, wrong area calculation for geography features that cross the " "date line (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:295 #, no-c-format msgid "Ensure support for upcoming 9.0 PgSQL release (Paul Ramsey)" msgstr "" #. Tag: title #: release_notes.xml:300 #, no-c-format msgid "Release 1.5.0" msgstr "" #. Tag: para #: release_notes.xml:301 #, no-c-format msgid "Release date: 2010/02/04" msgstr "" #. Tag: para #: release_notes.xml:302 #, no-c-format msgid "" "This release provides support for geographic coordinates (lat/lon) via a new " "GEOGRAPHY type. Also performance enhancements, new input format support (GML," "KML) and general upkeep." msgstr "" #. Tag: title #: release_notes.xml:305 release_notes.xml:372 #, no-c-format msgid "API Stability" msgstr "" #. Tag: para #: release_notes.xml:306 #, no-c-format msgid "" "The public API of PostGIS will not change during minor (0.0.X) releases." msgstr "" #. Tag: para #: release_notes.xml:307 #, no-c-format msgid "" "The definition of the =~ operator has changed from an exact geometric " "equality check to a bounding box equality check." msgstr "" #. Tag: title #: release_notes.xml:311 release_notes.xml:377 #, no-c-format msgid "Compatibility" msgstr "" #. Tag: para #: release_notes.xml:312 #, no-c-format msgid "GEOS, Proj4, and LibXML2 are now mandatory dependencies" msgstr "" #. Tag: para #: release_notes.xml:313 #, no-c-format msgid "The library versions below are the minimum requirements for PostGIS 1.5" msgstr "" #. Tag: para #: release_notes.xml:314 #, no-c-format msgid "PostgreSQL 8.3 and higher on all platforms" msgstr "" #. Tag: para #: release_notes.xml:315 #, no-c-format msgid "GEOS 3.1 and higher only (GEOS 3.2+ to take advantage of all features)" msgstr "" #. Tag: para #: release_notes.xml:316 #, no-c-format msgid "LibXML2 2.5+ related to new ST_GeomFromGML/KML functionality" msgstr "" #. Tag: para #: release_notes.xml:317 #, no-c-format msgid "Proj4 4.5 and higher only" msgstr "" #. Tag: para #: release_notes.xml:323 #, no-c-format msgid "Added Hausdorff distance calculations (#209) (Vincent Picavet)" msgstr "" #. Tag: para #: release_notes.xml:324 #, no-c-format msgid "" "Added parameters argument to ST_Buffer operation to support one-sided " "buffering and other buffering styles (Sandro Santilli)" msgstr "" #. Tag: para #: release_notes.xml:325 #, no-c-format msgid "" "Addition of other Distance related visualization and analysis functions " "(Nicklas Aven)" msgstr "" #. Tag: para #: release_notes.xml:327 #, no-c-format msgid "ST_ClosestPoint" msgstr "" #. Tag: para #: release_notes.xml:328 #, no-c-format msgid "ST_DFullyWithin" msgstr "" #. Tag: para #: release_notes.xml:329 #, no-c-format msgid "ST_LongestLine" msgstr "" #. Tag: para #: release_notes.xml:330 #, no-c-format msgid "ST_MaxDistance" msgstr "" #. Tag: para #: release_notes.xml:331 #, no-c-format msgid "ST_ShortestLine" msgstr "" #. Tag: para #: release_notes.xml:333 #, no-c-format msgid "ST_DumpPoints (Maxime van Noppen)" msgstr "" #. Tag: para #: release_notes.xml:334 #, no-c-format msgid "KML, GML input via ST_GeomFromGML and ST_GeomFromKML (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:335 #, no-c-format msgid "Extract homogeneous collection with ST_CollectionExtract (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:336 #, no-c-format msgid "" "Add measure values to an existing linestring with ST_AddMeasure (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:337 #, no-c-format msgid "History table implementation in utils (George Silva)" msgstr "" #. Tag: para #: release_notes.xml:338 #, no-c-format msgid "Geography type and supporting functions" msgstr "" #. Tag: para #: release_notes.xml:340 #, no-c-format msgid "Spherical algorithms (Dave Skea)" msgstr "" #. Tag: para #: release_notes.xml:341 #, no-c-format msgid "Object/index implementation (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:342 #, no-c-format msgid "Selectivity implementation (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:343 #, no-c-format msgid "Serializations to KML, GML and JSON (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:344 #, no-c-format msgid "" "ST_Area, ST_Distance, ST_DWithin, ST_GeogFromText, ST_GeogFromWKB, " "ST_Intersects, ST_Covers, ST_Buffer (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:350 #, no-c-format msgid "Performance improvements to ST_Distance (Nicklas Aven)" msgstr "" #. Tag: para #: release_notes.xml:351 #, no-c-format msgid "Documentation updates and improvements (Regina Obe, Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:352 #, no-c-format msgid "Testing and quality control (Regina Obe)" msgstr "" #. Tag: para #: release_notes.xml:353 #, no-c-format msgid "PostGIS 1.5 support PostgreSQL 8.5 trunk (Guillaume Lelarge)" msgstr "" #. Tag: para #: release_notes.xml:354 #, no-c-format msgid "Win32 support and improvement of core shp2pgsql-gui (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:355 #, no-c-format msgid "In place 'make check' support (Paul Ramsey)" msgstr "" #. Tag: title #: release_notes.xml:359 release_notes.xml:425 release_notes.xml:610 #: release_notes.xml:661 release_notes.xml:712 release_notes.xml:846 #: release_notes.xml:912 release_notes.xml:1022 release_notes.xml:1129 #: release_notes.xml:1249 release_notes.xml:1314 release_notes.xml:1361 #, no-c-format msgid "Bug fixes" msgstr "" #. Tag: ulink #: release_notes.xml:360 #, no-c-format msgid "" "http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS" "+1.5.0&order=priority" msgstr "" #. Tag: title #: release_notes.xml:365 #, no-c-format msgid "Release 1.4.0" msgstr "" #. Tag: para #: release_notes.xml:366 #, no-c-format msgid "Release date: 2009/07/24" msgstr "" #. Tag: para #: release_notes.xml:367 #, no-c-format msgid "" "This release provides performance enhancements, improved internal structures " "and testing, new features, and upgraded documentation. If you are running " "PostGIS 1.1+, a soft upgrade is sufficient otherwise a hard upgrade is " "recommended." msgstr "" #. Tag: para #: release_notes.xml:373 #, no-c-format msgid "" "As of the 1.4 release series, the public API of PostGIS will not change " "during minor releases." msgstr "" #. Tag: para #: release_notes.xml:378 #, no-c-format msgid "The versions below are the *minimum* requirements for PostGIS 1.4" msgstr "" #. Tag: para #: release_notes.xml:379 #, no-c-format msgid "PostgreSQL 8.2 and higher on all platforms" msgstr "" #. Tag: para #: release_notes.xml:380 #, no-c-format msgid "GEOS 3.0 and higher only" msgstr "" #. Tag: para #: release_notes.xml:381 #, no-c-format msgid "PROJ4 4.5 and higher only" msgstr "" #. Tag: para #: release_notes.xml:386 #, no-c-format msgid "" "ST_Union() uses high-speed cascaded union when compiled against GEOS 3.1+ " "(Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:388 #, no-c-format msgid "ST_ContainsProperly() requires GEOS 3.1+" msgstr "" #. Tag: para #: release_notes.xml:389 #, no-c-format msgid "" "ST_Intersects(), ST_Contains(), ST_Within() use high-speed cached prepared " "geometry against GEOS 3.1+ (Paul Ramsey / funded by Zonar Systems)" msgstr "" #. Tag: para #: release_notes.xml:390 #, no-c-format msgid "" "Vastly improved documentation and reference manual (Regina Obe & Kevin " "Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:391 #, no-c-format msgid "Figures and diagram examples in the reference manual (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:392 #, no-c-format msgid "" "ST_IsValidReason() returns readable explanations for validity failures (Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:393 #, no-c-format msgid "" "ST_GeoHash() returns a geohash.org signature for geometries (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:394 #, no-c-format msgid "GTK+ multi-platform GUI for shape file loading (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:395 #, no-c-format msgid "ST_LineCrossingDirection() returns crossing directions (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:396 #, no-c-format msgid "" "ST_LocateBetweenElevations() returns sub-string based on Z-ordinate. (Paul " "Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:397 #, no-c-format msgid "" "Geometry parser returns explicit error message about location of syntax " "errors (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:398 #, no-c-format msgid "ST_AsGeoJSON() return JSON formatted geometry (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:399 #, no-c-format msgid "" "Populate_Geometry_Columns() -- automatically add records to geometry_columns " "for TABLES and VIEWS (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:400 #, no-c-format msgid "" "ST_MinimumBoundingCircle() -- returns the smallest circle polygon that can " "encompass a geometry (Bruce Rindahl)" msgstr "" #. Tag: para #: release_notes.xml:405 #, no-c-format msgid "" "Core geometry system moved into independent library, liblwgeom. (Mark Cave-" "Ayland)" msgstr "" #. Tag: para #: release_notes.xml:406 #, no-c-format msgid "" "New build system uses PostgreSQL \"pgxs\" build bootstrapper. (Mark Cave-" "Ayland)" msgstr "" #. Tag: para #: release_notes.xml:407 #, no-c-format msgid "Debugging framework formalized and simplified. (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:408 #, no-c-format msgid "" "All build-time #defines generated at configure time and placed in headers " "for easier cross-platform support (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:409 #, no-c-format msgid "Logging framework formalized and simplified (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:410 #, no-c-format msgid "" "Expanded and more stable support for CIRCULARSTRING, COMPOUNDCURVE and " "CURVEPOLYGON, better parsing, wider support in functions (Mark Leslie & " "Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:411 #, no-c-format msgid "Improved support for OpenSolaris builds (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:412 #, no-c-format msgid "Improved support for MSVC builds (Mateusz Loskot)" msgstr "" #. Tag: para #: release_notes.xml:413 #, no-c-format msgid "Updated KML support (Olivier Courtin)" msgstr "" #. Tag: para #: release_notes.xml:414 #, no-c-format msgid "Unit testing framework for liblwgeom (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:415 #, no-c-format msgid "" "New testing framework to comprehensively exercise every PostGIS function " "(Regine Obe)" msgstr "" #. Tag: para #: release_notes.xml:416 #, no-c-format msgid "" "Performance improvements to all geometry aggregate functions (Paul Ramsey)" msgstr "" #. Tag: para #: release_notes.xml:417 #, no-c-format msgid "" "Support for the upcoming PostgreSQL 8.4 (Mark Cave-Ayland, Talha Bin Rizwan)" msgstr "" #. Tag: para #: release_notes.xml:418 #, no-c-format msgid "" "Shp2pgsql and pgsql2shp re-worked to depend on the common parsing/unparsing " "code in liblwgeom (Mark Cave-Ayland)" msgstr "" #. Tag: para #: release_notes.xml:419 #, no-c-format msgid "" "Use of PDF DbLatex to build PDF docs and preliminary instructions for build " "(Jean David Techer)" msgstr "" #. Tag: para #: release_notes.xml:420 #, no-c-format msgid "" "Automated User documentation build (PDF and HTML) and Developer Doxygen " "Documentation (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:421 #, no-c-format msgid "" "Automated build of document images using ImageMagick from WKT geometry text " "files (Kevin Neufeld)" msgstr "" #. Tag: para #: release_notes.xml:422 #, no-c-format msgid "More attractive CSS for HTML documentation (Dane Springmeyer)" msgstr "" #. Tag: ulink #: release_notes.xml:426 #, no-c-format msgid "" "http://trac.osgeo.org/postgis/query?status=closed&milestone=PostGIS" "+1.4.0&order=priority" msgstr "" #. Tag: title #: release_notes.xml:431 #, no-c-format msgid "Release 1.3.6" msgstr "" #. Tag: para #: release_notes.xml:432 #, no-c-format msgid "Release date: 2009/05/04" msgstr "" #. Tag: para #: release_notes.xml:433 #, no-c-format msgid "" "If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a " "hard upgrade is recommended. This release adds support for PostgreSQL 8.4, " "exporting prj files from the database with shape data, some crash fixes for " "shp2pgsql, and several small bug fixes in the handling of \"curve\" types, " "logical error importing dbf only files, improved error handling of " "AddGeometryColumns." msgstr "" #. Tag: title #: release_notes.xml:440 #, no-c-format msgid "Release 1.3.5" msgstr "" #. Tag: para #: release_notes.xml:441 #, no-c-format msgid "Release date: 2008/12/15" msgstr "" #. Tag: para #: release_notes.xml:442 #, no-c-format msgid "" "If you are running PostGIS 1.1+, a soft upgrade is sufficient otherwise a " "hard upgrade is recommended. This release is a bug fix release to address a " "failure in ST_Force_Collection and related functions that critically affects " "using MapServer with LINE layers." msgstr "" #. Tag: title #: release_notes.xml:449 #, no-c-format msgid "Release 1.3.4" msgstr "" #. Tag: para #: release_notes.xml:450 #, no-c-format msgid "Release date: 2008/11/24" msgstr "" #. Tag: para #: release_notes.xml:451 #, no-c-format msgid "" "This release adds support for GeoJSON output, building with PostgreSQL 8.4, " "improves documentation quality and output aesthetics, adds function-level " "SQL documentation, and improves performance for some spatial predicates " "(point-in-polygon tests)." msgstr "" #. Tag: para #: release_notes.xml:456 #, no-c-format msgid "" "Bug fixes include removal of crashers in handling circular strings for many " "functions, some memory leaks removed, a linear referencing failure for " "measures on vertices, and more. See the NEWS file for details." msgstr "" #. Tag: title #: release_notes.xml:463 #, no-c-format msgid "Release 1.3.3" msgstr "" #. Tag: para #: release_notes.xml:465 #, no-c-format msgid "Release date: 2008/04/12" msgstr "" #. Tag: para #: release_notes.xml:467 #, no-c-format msgid "" "This release fixes bugs shp2pgsql, adds enhancements to SVG and KML support, " "adds a ST_SimplifyPreserveTopology function, makes the build more sensitive " "to GEOS versions, and fixes a handful of severe but rare failure cases." msgstr "" #. Tag: title #: release_notes.xml:474 #, no-c-format msgid "Release 1.3.2" msgstr "" #. Tag: para #: release_notes.xml:476 #, no-c-format msgid "Release date: 2007/12/01" msgstr "" #. Tag: para #: release_notes.xml:478 #, no-c-format msgid "" "This release fixes bugs in ST_EndPoint() and ST_Envelope, improves support " "for JDBC building and OS/X, and adds better support for GML output with " "ST_AsGML(), including GML3 output." msgstr "" #. Tag: title #: release_notes.xml:484 #, no-c-format msgid "Release 1.3.1" msgstr "" #. Tag: para #: release_notes.xml:486 #, no-c-format msgid "Release date: 2007/08/13" msgstr "" #. Tag: para #: release_notes.xml:488 #, no-c-format msgid "" "This release fixes some oversights in the previous release around version " "numbering, documentation, and tagging." msgstr "" #. Tag: title #: release_notes.xml:493 #, no-c-format msgid "Release 1.3.0" msgstr "" #. Tag: para #: release_notes.xml:495 #, no-c-format msgid "Release date: 2007/08/09" msgstr "" #. Tag: para #: release_notes.xml:497 #, no-c-format msgid "" "This release provides performance enhancements to the relational functions, " "adds new relational functions and begins the migration of our function names " "to the SQL-MM convention, using the spatial type (SP) prefix." msgstr "" #. Tag: title #: release_notes.xml:503 #, no-c-format msgid "Added Functionality" msgstr "" #. Tag: para #: release_notes.xml:505 #, no-c-format msgid "JDBC: Added Hibernate Dialect (thanks to Norman Barker)" msgstr "" #. Tag: para #: release_notes.xml:507 #, no-c-format msgid "" "Added ST_Covers and ST_CoveredBy relational functions. Description and " "justification of these functions can be found at http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-" "spatial.html" msgstr "" #. Tag: para #: release_notes.xml:511 #, no-c-format msgid "Added ST_DWithin relational function." msgstr "" #. Tag: title #: release_notes.xml:515 #, no-c-format msgid "Performance Enhancements" msgstr "" #. Tag: para #: release_notes.xml:517 #, no-c-format msgid "" "Added cached and indexed point-in-polygon short-circuits for the functions " "ST_Contains, ST_Intersects, ST_Within and ST_Disjoint" msgstr "" #. Tag: para #: release_notes.xml:520 #, no-c-format msgid "" "Added inline index support for relational functions (except ST_Disjoint)" msgstr "" #. Tag: title #: release_notes.xml:525 #, no-c-format msgid "Other Changes" msgstr "" #. Tag: para #: release_notes.xml:527 #, no-c-format msgid "" "Extended curved geometry support into the geometry accessor and some " "processing functions" msgstr "" #. Tag: para #: release_notes.xml:530 #, no-c-format msgid "" "Began migration of functions to the SQL-MM naming convention; using a " "spatial type (ST) prefix." msgstr "" #. Tag: para #: release_notes.xml:533 #, no-c-format msgid "Added initial support for PostgreSQL 8.3" msgstr "" #. Tag: title #: release_notes.xml:538 #, no-c-format msgid "Release 1.2.1" msgstr "" #. Tag: para #: release_notes.xml:540 #, no-c-format msgid "Release date: 2007/01/11" msgstr "" #. Tag: para #: release_notes.xml:542 #, no-c-format msgid "" "This release provides bug fixes in PostgreSQL 8.2 support and some small " "performance enhancements." msgstr "" #. Tag: title #: release_notes.xml:546 release_notes.xml:574 release_notes.xml:1796 #, no-c-format msgid "Changes" msgstr "" #. Tag: para #: release_notes.xml:548 #, no-c-format msgid "Fixed point-in-polygon shortcut bug in Within()." msgstr "" #. Tag: para #: release_notes.xml:550 #, no-c-format msgid "Fixed PostgreSQL 8.2 NULL handling for indexes." msgstr "" #. Tag: para #: release_notes.xml:552 #, no-c-format msgid "Updated RPM spec files." msgstr "" #. Tag: para #: release_notes.xml:554 #, no-c-format msgid "Added short-circuit for Transform() in no-op case." msgstr "" #. Tag: para #: release_notes.xml:556 #, no-c-format msgid "" "JDBC: Fixed JTS handling for multi-dimensional geometries (thanks to Thomas " "Marti for hint and partial patch). Additionally, now JavaDoc is compiled and " "packaged. Fixed classpath problems with GCJ. Fixed pgjdbc 8.2 compatibility, " "losing support for jdk 1.3 and older." msgstr "" #. Tag: title #: release_notes.xml:565 #, no-c-format msgid "Release 1.2.0" msgstr "" #. Tag: para #: release_notes.xml:567 #, no-c-format msgid "Release date: 2006/12/08" msgstr "" #. Tag: para #: release_notes.xml:569 #, no-c-format msgid "" "This release provides type definitions along with serialization/" "deserialization capabilities for SQL-MM defined curved geometries, as well " "as performance enhancements." msgstr "" #. Tag: para #: release_notes.xml:576 #, no-c-format msgid "Added curved geometry type support for serialization/deserialization" msgstr "" #. Tag: para #: release_notes.xml:579 #, no-c-format msgid "" "Added point-in-polygon shortcircuit to the Contains and Within functions to " "improve performance for these cases." msgstr "" #. Tag: title #: release_notes.xml:585 #, no-c-format msgid "Release 1.1.6" msgstr "" #. Tag: para #: release_notes.xml:587 #, no-c-format msgid "Release date: 2006/11/02" msgstr "" #. Tag: para #: release_notes.xml:589 #, no-c-format msgid "" "This is a bugfix release, in particular fixing a critical error with GEOS " "interface in 64bit systems. Includes an updated of the SRS parameters and an " "improvement in reprojections (take Z in consideration). Upgrade is " "encouraged." msgstr "" #. Tag: title #: release_notes.xml:595 release_notes.xml:646 release_notes.xml:697 #: release_notes.xml:752 release_notes.xml:831 release_notes.xml:897 #: release_notes.xml:970 release_notes.xml:1114 release_notes.xml:1171 #: release_notes.xml:1234 release_notes.xml:1292 release_notes.xml:1350 #: release_notes.xml:1390 release_notes.xml:1442 release_notes.xml:1494 #: release_notes.xml:1533 release_notes.xml:1570 release_notes.xml:1637 #: release_notes.xml:1734 release_notes.xml:1788 #, no-c-format msgid "Upgrading" msgstr "" #. Tag: para #: release_notes.xml:597 release_notes.xml:648 release_notes.xml:699 #: release_notes.xml:754 release_notes.xml:833 release_notes.xml:899 #, no-c-format msgid "" "If you are upgrading from release 1.0.3 or later follow the soft upgrade procedure." msgstr "" #. Tag: para #: release_notes.xml:600 release_notes.xml:651 release_notes.xml:702 #: release_notes.xml:757 release_notes.xml:836 release_notes.xml:902 #: release_notes.xml:978 release_notes.xml:1119 release_notes.xml:1176 #: release_notes.xml:1239 #, no-c-format msgid "" "If you are upgrading from a release between 1.0.0RC6 and 1.0.2 (inclusive) and really want a live upgrade read the upgrade section of the 1.0.3 release notes " "chapter." msgstr "" #. Tag: para #: release_notes.xml:605 release_notes.xml:656 release_notes.xml:707 #: release_notes.xml:762 release_notes.xml:841 release_notes.xml:907 #: release_notes.xml:983 release_notes.xml:1124 release_notes.xml:1181 #: release_notes.xml:1244 #, no-c-format msgid "" "Upgrade from any release prior to 1.0.0RC6 requires an hard upgrade." msgstr "" #. Tag: para #: release_notes.xml:612 #, no-c-format msgid "fixed CAPI change that broke 64-bit platforms" msgstr "" #. Tag: para #: release_notes.xml:614 #, no-c-format msgid "loader/dumper: fixed regression tests and usage output" msgstr "" #. Tag: para #: release_notes.xml:616 #, no-c-format msgid "Fixed setSRID() bug in JDBC, thanks to Thomas Marti" msgstr "" #. Tag: title #: release_notes.xml:620 release_notes.xml:804 release_notes.xml:875 #: release_notes.xml:1089 release_notes.xml:1215 release_notes.xml:1516 #: release_notes.xml:1553 release_notes.xml:1605 release_notes.xml:1707 #: release_notes.xml:1770 #, no-c-format msgid "Other changes" msgstr "" #. Tag: para #: release_notes.xml:622 #, no-c-format msgid "use Z ordinate in reprojections" msgstr "" #. Tag: para #: release_notes.xml:624 #, no-c-format msgid "spatial_ref_sys.sql updated to EPSG 6.11.1" msgstr "" #. Tag: para #: release_notes.xml:626 #, no-c-format msgid "" "Simplified Version.config infrastructure to use a single pack of version " "variables for everything." msgstr "" #. Tag: para #: release_notes.xml:629 #, no-c-format msgid "Include the Version.config in loader/dumper USAGE messages" msgstr "" #. Tag: para #: release_notes.xml:632 #, no-c-format msgid "Replace hand-made, fragile JDBC version parser with Properties" msgstr "" #. Tag: title #: release_notes.xml:638 #, no-c-format msgid "Release 1.1.5" msgstr "" #. Tag: para #: release_notes.xml:640 #, no-c-format msgid "Release date: 2006/10/13" msgstr "" #. Tag: para #: release_notes.xml:642 #, no-c-format msgid "" "This is an bugfix release, including a critical segfault on win32. Upgrade " "is encouraged." msgstr "" #. Tag: para #: release_notes.xml:663 #, no-c-format msgid "" "Fixed MingW link error that was causing pgsql2shp to segfault on Win32 when " "compiled for PostgreSQL 8.2" msgstr "" #. Tag: para #: release_notes.xml:666 #, no-c-format msgid "fixed nullpointer Exception in Geometry.equals() method in Java" msgstr "" #. Tag: para #: release_notes.xml:669 #, no-c-format msgid "" "Added EJB3Spatial.odt to fulfill the GPL requirement of distributing the " "\"preferred form of modification\"" msgstr "" #. Tag: para #: release_notes.xml:672 #, no-c-format msgid "Removed obsolete synchronization from JDBC Jts code." msgstr "" #. Tag: para #: release_notes.xml:674 #, no-c-format msgid "" "Updated heavily outdated README files for shp2pgsql/pgsql2shp by merging " "them with the manpages." msgstr "" #. Tag: para #: release_notes.xml:677 #, no-c-format msgid "" "Fixed version tag in jdbc code that still said \"1.1.3\" in the \"1.1.4\" " "release." msgstr "" #. Tag: para #: release_notes.xml:684 #, no-c-format msgid "Added -S option for non-multi geometries to shp2pgsql" msgstr "" #. Tag: title #: release_notes.xml:689 #, no-c-format msgid "Release 1.1.4" msgstr "" #. Tag: para #: release_notes.xml:691 #, no-c-format msgid "Release date: 2006/09/27" msgstr "" #. Tag: para #: release_notes.xml:693 #, no-c-format msgid "" "This is an bugfix release including some improvements in the Java interface. " "Upgrade is encouraged." msgstr "" #. Tag: para #: release_notes.xml:714 #, no-c-format msgid "Fixed support for PostgreSQL 8.2" msgstr "" #. Tag: para #: release_notes.xml:716 #, no-c-format msgid "Fixed bug in collect() function discarding SRID of input" msgstr "" #. Tag: para #: release_notes.xml:718 #, no-c-format msgid "Added SRID match check in MakeBox2d and MakeBox3d" msgstr "" #. Tag: para #: release_notes.xml:720 #, no-c-format msgid "Fixed regress tests to pass with GEOS-3.0.0" msgstr "" #. Tag: para #: release_notes.xml:722 #, no-c-format msgid "Improved pgsql2shp run concurrency." msgstr "" #. Tag: title #: release_notes.xml:726 #, no-c-format msgid "Java changes" msgstr "" #. Tag: para #: release_notes.xml:728 #, no-c-format msgid "" "reworked JTS support to reflect new upstream JTS developers' attitude to " "SRID handling. Simplifies code and drops build depend on GNU trove." msgstr "" #. Tag: para #: release_notes.xml:732 #, no-c-format msgid "" "Added EJB2 support generously donated by the \"Geodetix s.r.l. Company\" " "http://www.geodetix.it/" msgstr "" #. Tag: para #: release_notes.xml:735 #, no-c-format msgid "" "Added EJB3 tutorial / examples donated by Norman Barker <nbarker@ittvis." "com>" msgstr "" #. Tag: para #: release_notes.xml:738 #, no-c-format msgid "Reorganized java directory layout a little." msgstr "" #. Tag: title #: release_notes.xml:743 #, no-c-format msgid "Release 1.1.3" msgstr "" #. Tag: para #: release_notes.xml:745 #, no-c-format msgid "Release date: 2006/06/30" msgstr "" #. Tag: para #: release_notes.xml:747 #, no-c-format msgid "" "This is an bugfix release including also some new functionalities (most " "notably long transaction support) and portability enhancements. Upgrade is " "encouraged." msgstr "" #. Tag: title #: release_notes.xml:767 #, no-c-format msgid "Bug fixes / correctness" msgstr "" #. Tag: para #: release_notes.xml:769 #, no-c-format msgid "BUGFIX in distance(poly,poly) giving wrong results." msgstr "" #. Tag: para #: release_notes.xml:771 #, no-c-format msgid "BUGFIX in pgsql2shp successful return code." msgstr "" #. Tag: para #: release_notes.xml:773 #, no-c-format msgid "BUGFIX in shp2pgsql handling of MultiLine WKT." msgstr "" #. Tag: para #: release_notes.xml:775 #, no-c-format msgid "BUGFIX in affine() failing to update bounding box." msgstr "" #. Tag: para #: release_notes.xml:777 #, no-c-format msgid "" "WKT parser: forbidden construction of multigeometries with EMPTY elements " "(still supported for GEOMETRYCOLLECTION)." msgstr "" #. Tag: title #: release_notes.xml:782 release_notes.xml:858 release_notes.xml:931 #, no-c-format msgid "New functionalities" msgstr "" #. Tag: para #: release_notes.xml:784 #, no-c-format msgid "NEW Long Transactions support." msgstr "" #. Tag: para #: release_notes.xml:786 #, no-c-format msgid "NEW DumpRings() function." msgstr "" #. Tag: para #: release_notes.xml:788 #, no-c-format msgid "NEW AsHEXEWKB(geom, XDR|NDR) function." msgstr "" #. Tag: title #: release_notes.xml:792 release_notes.xml:1683 #, no-c-format msgid "JDBC changes" msgstr "" #. Tag: para #: release_notes.xml:794 #, no-c-format msgid "Improved regression tests: MultiPoint and scientific ordinates" msgstr "" #. Tag: para #: release_notes.xml:797 #, no-c-format msgid "Fixed some minor bugs in jdbc code" msgstr "" #. Tag: para #: release_notes.xml:799 #, no-c-format msgid "" "Added proper accessor functions for all fields in preparation of making " "those fields private later" msgstr "" #. Tag: para #: release_notes.xml:806 #, no-c-format msgid "NEW regress test support for loader/dumper." msgstr "" #. Tag: para #: release_notes.xml:808 #, no-c-format msgid "Added --with-proj-libdir and --with-geos-libdir configure switches." msgstr "" #. Tag: para #: release_notes.xml:811 #, no-c-format msgid "Support for build Tru64 build." msgstr "" #. Tag: para #: release_notes.xml:813 #, no-c-format msgid "Use Jade for generating documentation." msgstr "" #. Tag: para #: release_notes.xml:815 #, no-c-format msgid "Don't link pgsql2shp to more libs then required." msgstr "" #. Tag: para #: release_notes.xml:817 #, no-c-format msgid "Initial support for PostgreSQL 8.2." msgstr "" #. Tag: title #: release_notes.xml:822 #, no-c-format msgid "Release 1.1.2" msgstr "" #. Tag: para #: release_notes.xml:824 #, no-c-format msgid "Release date: 2006/03/30" msgstr "" #. Tag: para #: release_notes.xml:826 #, no-c-format msgid "" "This is an bugfix release including some new functions and portability " "enhancements. Upgrade is encouraged." msgstr "" #. Tag: para #: release_notes.xml:848 #, no-c-format msgid "BUGFIX in SnapToGrid() computation of output bounding box" msgstr "" #. Tag: para #: release_notes.xml:850 #, no-c-format msgid "BUGFIX in EnforceRHR()" msgstr "" #. Tag: para #: release_notes.xml:852 #, no-c-format msgid "jdbc2 SRID handling fixes in JTS code" msgstr "" #. Tag: para #: release_notes.xml:854 #, no-c-format msgid "Fixed support for 64bit archs" msgstr "" #. Tag: para #: release_notes.xml:860 #, no-c-format msgid "Regress tests can now be run *before* postgis installation" msgstr "" #. Tag: para #: release_notes.xml:863 #, no-c-format msgid "New affine() matrix transformation functions" msgstr "" #. Tag: para #: release_notes.xml:865 #, no-c-format msgid "New rotate{,X,Y,Z}() function" msgstr "" #. Tag: para #: release_notes.xml:867 #, no-c-format msgid "Old translating and scaling functions now use affine() internally" msgstr "" #. Tag: para #: release_notes.xml:870 #, no-c-format msgid "" "Embedded access control in estimated_extent() for builds against pgsql >= " "8.0.0" msgstr "" #. Tag: para #: release_notes.xml:877 #, no-c-format msgid "More portable ./configure script" msgstr "" #. Tag: para #: release_notes.xml:879 #, no-c-format msgid "Changed ./run_test script to have more sane default behaviour" msgstr "" #. Tag: title #: release_notes.xml:885 #, no-c-format msgid "Release 1.1.1" msgstr "" #. Tag: para #: release_notes.xml:887 #, no-c-format msgid "Release date: 2006/01/23" msgstr "" #. Tag: para #: release_notes.xml:889 #, no-c-format msgid "" "This is an important Bugfix release, upgrade is highly " "recommended. Previous version contained a bug in postgis_restore." "pl preventing hard upgrade procedure " "to complete and a bug in GEOS-2.2+ connector preventing GeometryCollection " "objects to be used in topological operations." msgstr "" #. Tag: para #: release_notes.xml:914 #, no-c-format msgid "Fixed a premature exit in postgis_restore.pl" msgstr "" #. Tag: para #: release_notes.xml:916 #, no-c-format msgid "BUGFIX in geometrycollection handling of GEOS-CAPI connector" msgstr "" #. Tag: para #: release_notes.xml:919 #, no-c-format msgid "Solaris 2.7 and MingW support improvements" msgstr "" #. Tag: para #: release_notes.xml:921 #, no-c-format msgid "BUGFIX in line_locate_point()" msgstr "" #. Tag: para #: release_notes.xml:923 #, no-c-format msgid "Fixed handling of postgresql paths" msgstr "" #. Tag: para #: release_notes.xml:925 #, no-c-format msgid "BUGFIX in line_substring()" msgstr "" #. Tag: para #: release_notes.xml:927 #, no-c-format msgid "Added support for localized cluster in regress tester" msgstr "" #. Tag: para #: release_notes.xml:933 #, no-c-format msgid "New Z and M interpolation in line_substring()" msgstr "" #. Tag: para #: release_notes.xml:935 #, no-c-format msgid "New Z and M interpolation in line_interpolate_point()" msgstr "" #. Tag: para #: release_notes.xml:937 #, no-c-format msgid "added NumInteriorRing() alias due to OpenGIS ambiguity" msgstr "" #. Tag: title #: release_notes.xml:942 #, no-c-format msgid "Release 1.1.0" msgstr "" #. Tag: para #: release_notes.xml:944 #, no-c-format msgid "Release date: 2005/12/21" msgstr "" #. Tag: para #: release_notes.xml:946 #, no-c-format msgid "" "This is a Minor release, containing many improvements and new things. Most " "notably: build procedure greatly simplified; transform() performance " "drastically improved; more stable GEOS connectivity (CAPI support); lots of " "new functions; draft topology support." msgstr "" #. Tag: para #: release_notes.xml:951 #, no-c-format msgid "" "It is highly recommended that you upgrade to GEOS-2.2.x " "before installing PostGIS, this will ensure future GEOS upgrades won't " "require a rebuild of the PostGIS library." msgstr "" #. Tag: title #: release_notes.xml:956 #, no-c-format msgid "Credits" msgstr "" #. Tag: para #: release_notes.xml:958 #, no-c-format msgid "" "This release includes code from Mark Cave Ayland for caching of proj4 " "objects. Markus Schaber added many improvements in his JDBC2 code. Alex " "Bodnaru helped with PostgreSQL source dependency relief and provided Debian " "specfiles. Michael Fuhr tested new things on Solaris arch. David Techer and " "Gerald Fenoy helped testing GEOS C-API connector. Hartmut Tschauner provided " "code for the azimuth() function. Devrim GUNDUZ provided RPM specfiles. Carl " "Anderson helped with the new area building functions. See the credits section for more names." msgstr "" #. Tag: para #: release_notes.xml:972 #, no-c-format msgid "" "If you are upgrading from release 1.0.3 or later you DO NOT need a dump/reload. Simply sourcing the new lwpostgis_upgrade.sql " "script in all your existing databases will work. See the soft upgrade chapter for more information." msgstr "" #. Tag: title #: release_notes.xml:988 #, no-c-format msgid "New functions" msgstr "" #. Tag: para #: release_notes.xml:990 #, no-c-format msgid "scale() and transscale() companion methods to translate()" msgstr "" #. Tag: para #: release_notes.xml:992 #, no-c-format msgid "line_substring()" msgstr "" #. Tag: para #: release_notes.xml:994 #, no-c-format msgid "line_locate_point()" msgstr "" #. Tag: para #: release_notes.xml:996 #, no-c-format msgid "M(point)" msgstr "" #. Tag: para #: release_notes.xml:998 #, no-c-format msgid "LineMerge(geometry)" msgstr "" #. Tag: para #: release_notes.xml:1000 #, no-c-format msgid "shift_longitude(geometry)" msgstr "" #. Tag: para #: release_notes.xml:1002 #, no-c-format msgid "azimuth(geometry)" msgstr "" #. Tag: para #: release_notes.xml:1004 #, no-c-format msgid "locate_along_measure(geometry, float8)" msgstr "" #. Tag: para #: release_notes.xml:1006 #, no-c-format msgid "locate_between_measures(geometry, float8, float8)" msgstr "" #. Tag: para #: release_notes.xml:1008 #, no-c-format msgid "SnapToGrid by point offset (up to 4d support)" msgstr "" #. Tag: para #: release_notes.xml:1010 #, no-c-format msgid "BuildArea(any_geometry)" msgstr "" #. Tag: para #: release_notes.xml:1012 #, no-c-format msgid "OGC BdPolyFromText(linestring_wkt, srid)" msgstr "" #. Tag: para #: release_notes.xml:1014 #, no-c-format msgid "OGC BdMPolyFromText(linestring_wkt, srid)" msgstr "" #. Tag: para #: release_notes.xml:1016 #, no-c-format msgid "RemovePoint(linestring, offset)" msgstr "" #. Tag: para #: release_notes.xml:1018 #, no-c-format msgid "ReplacePoint(linestring, offset, point)" msgstr "" #. Tag: para #: release_notes.xml:1024 #, no-c-format msgid "Fixed memory leak in polygonize()" msgstr "" #. Tag: para #: release_notes.xml:1026 #, no-c-format msgid "Fixed bug in lwgeom_as_anytype cast functions" msgstr "" #. Tag: para #: release_notes.xml:1028 #, no-c-format msgid "" "Fixed USE_GEOS, USE_PROJ and USE_STATS elements of postgis_version() output " "to always reflect library state." msgstr "" #. Tag: title #: release_notes.xml:1033 #, no-c-format msgid "Function semantic changes" msgstr "" #. Tag: para #: release_notes.xml:1035 #, no-c-format msgid "SnapToGrid doesn't discard higher dimensions" msgstr "" #. Tag: para #: release_notes.xml:1037 #, no-c-format msgid "" "Changed Z() function to return NULL if requested dimension is not available" msgstr "" #. Tag: title #: release_notes.xml:1042 #, no-c-format msgid "Performance improvements" msgstr "" #. Tag: para #: release_notes.xml:1044 #, no-c-format msgid "Much faster transform() function, caching proj4 objects" msgstr "" #. Tag: para #: release_notes.xml:1046 #, no-c-format msgid "" "Removed automatic call to fix_geometry_columns() in AddGeometryColumns() and " "update_geometry_stats()" msgstr "" #. Tag: title #: release_notes.xml:1051 #, no-c-format msgid "JDBC2 works" msgstr "" #. Tag: para #: release_notes.xml:1053 #, no-c-format msgid "Makefile improvements" msgstr "" #. Tag: para #: release_notes.xml:1055 release_notes.xml:1091 #, no-c-format msgid "JTS support improvements" msgstr "" #. Tag: para #: release_notes.xml:1057 #, no-c-format msgid "Improved regression test system" msgstr "" #. Tag: para #: release_notes.xml:1059 #, no-c-format msgid "Basic consistency check method for geometry collections" msgstr "" #. Tag: para #: release_notes.xml:1061 #, no-c-format msgid "Support for (Hex)(E)wkb" msgstr "" #. Tag: para #: release_notes.xml:1063 #, no-c-format msgid "Autoprobing DriverWrapper for HexWKB / EWKT switching" msgstr "" #. Tag: para #: release_notes.xml:1065 #, no-c-format msgid "fix compile problems in ValueSetter for ancient jdk releases." msgstr "" #. Tag: para #: release_notes.xml:1068 #, no-c-format msgid "fix EWKT constructors to accept SRID=4711; representation" msgstr "" #. Tag: para #: release_notes.xml:1070 #, no-c-format msgid "added preliminary read-only support for java2d geometries" msgstr "" #. Tag: title #: release_notes.xml:1074 #, no-c-format msgid "Other new things" msgstr "" #. Tag: para #: release_notes.xml:1076 #, no-c-format msgid "" "Full autoconf-based configuration, with PostgreSQL source dependency relief" msgstr "" #. Tag: para #: release_notes.xml:1079 #, no-c-format msgid "GEOS C-API support (2.2.0 and higher)" msgstr "" #. Tag: para #: release_notes.xml:1081 #, no-c-format msgid "Initial support for topology modelling" msgstr "" #. Tag: para #: release_notes.xml:1083 #, no-c-format msgid "Debian and RPM specfiles" msgstr "" #. Tag: para #: release_notes.xml:1085 #, no-c-format msgid "New lwpostgis_upgrade.sql script" msgstr "" #. Tag: para #: release_notes.xml:1093 #, no-c-format msgid "Stricter mapping between DBF and SQL integer and string attributes" msgstr "" #. Tag: para #: release_notes.xml:1096 #, no-c-format msgid "Wider and cleaner regression test suite" msgstr "" #. Tag: para #: release_notes.xml:1098 #, no-c-format msgid "old jdbc code removed from release" msgstr "" #. Tag: para #: release_notes.xml:1100 #, no-c-format msgid "obsoleted direct use of postgis_proc_upgrade.pl" msgstr "" #. Tag: para #: release_notes.xml:1102 #, no-c-format msgid "scripts version unified with release version" msgstr "" #. Tag: title #: release_notes.xml:1107 #, no-c-format msgid "Release 1.0.6" msgstr "" #. Tag: para #: release_notes.xml:1109 #, no-c-format msgid "Release date: 2005/12/06" msgstr "" #. Tag: para #: release_notes.xml:1111 release_notes.xml:1347 #, no-c-format msgid "Contains a few bug fixes and improvements." msgstr "" #. Tag: para #: release_notes.xml:1116 release_notes.xml:1173 #, no-c-format msgid "" "If you are upgrading from release 1.0.3 or later you DO NOT need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1131 #, no-c-format msgid "" "Fixed palloc(0) call in collection deserializer (only gives problem with --" "enable-cassert)" msgstr "" #. Tag: para #: release_notes.xml:1134 #, no-c-format msgid "Fixed bbox cache handling bugs" msgstr "" #. Tag: para #: release_notes.xml:1136 #, no-c-format msgid "Fixed geom_accum(NULL, NULL) segfault" msgstr "" #. Tag: para #: release_notes.xml:1138 #, no-c-format msgid "Fixed segfault in addPoint()" msgstr "" #. Tag: para #: release_notes.xml:1140 #, no-c-format msgid "Fixed short-allocation in lwcollection_clone()" msgstr "" #. Tag: para #: release_notes.xml:1142 #, no-c-format msgid "Fixed bug in segmentize()" msgstr "" #. Tag: para #: release_notes.xml:1144 #, no-c-format msgid "Fixed bbox computation of SnapToGrid output" msgstr "" #. Tag: title #: release_notes.xml:1148 release_notes.xml:1266 release_notes.xml:1328 #: release_notes.xml:1374 #, no-c-format msgid "Improvements" msgstr "" #. Tag: para #: release_notes.xml:1150 #, no-c-format msgid "Initial support for postgresql 8.2" msgstr "" #. Tag: para #: release_notes.xml:1152 #, no-c-format msgid "Added missing SRID mismatch checks in GEOS ops" msgstr "" #. Tag: title #: release_notes.xml:1157 #, no-c-format msgid "Release 1.0.5" msgstr "" #. Tag: para #: release_notes.xml:1159 #, no-c-format msgid "Release date: 2005/11/25" msgstr "" #. Tag: para #: release_notes.xml:1161 #, no-c-format msgid "" "Contains memory-alignment fixes in the library, a segfault fix in loader's " "handling of UTF8 attributes and a few improvements and cleanups." msgstr "" #. Tag: para #: release_notes.xml:1166 #, no-c-format msgid "" "Return code of shp2pgsql changed from previous releases to conform to unix " "standards (return 0 on success)." msgstr "" #. Tag: title #: release_notes.xml:1186 release_notes.xml:1401 release_notes.xml:1453 #: release_notes.xml:1502 release_notes.xml:1544 release_notes.xml:1578 #: release_notes.xml:1645 release_notes.xml:1742 #, no-c-format msgid "Library changes" msgstr "" #. Tag: para #: release_notes.xml:1188 #, no-c-format msgid "Fixed memory alignment problems" msgstr "" #. Tag: para #: release_notes.xml:1190 #, no-c-format msgid "Fixed computation of null values fraction in analyzer" msgstr "" #. Tag: para #: release_notes.xml:1192 #, no-c-format msgid "Fixed a small bug in the getPoint4d_p() low-level function" msgstr "" #. Tag: para #: release_notes.xml:1195 #, no-c-format msgid "Speedup of serializer functions" msgstr "" #. Tag: para #: release_notes.xml:1197 #, no-c-format msgid "Fixed a bug in force_3dm(), force_3dz() and force_4d()" msgstr "" #. Tag: title #: release_notes.xml:1201 #, no-c-format msgid "Loader changes" msgstr "" #. Tag: para #: release_notes.xml:1203 #, no-c-format msgid "Fixed return code of shp2pgsql" msgstr "" #. Tag: para #: release_notes.xml:1205 #, no-c-format msgid "Fixed back-compatibility issue in loader (load of null shapefiles)" msgstr "" #. Tag: para #: release_notes.xml:1208 #, no-c-format msgid "Fixed handling of trailing dots in dbf numerical attributes" msgstr "" #. Tag: para #: release_notes.xml:1211 #, no-c-format msgid "Segfault fix in shp2pgsql (utf8 encoding)" msgstr "" #. Tag: para #: release_notes.xml:1217 #, no-c-format msgid "Schema aware postgis_proc_upgrade.pl, support for pgsql 7.2+" msgstr "" #. Tag: para #: release_notes.xml:1220 #, no-c-format msgid "New \"Reporting Bugs\" chapter in manual" msgstr "" #. Tag: title #: release_notes.xml:1225 #, no-c-format msgid "Release 1.0.4" msgstr "" #. Tag: para #: release_notes.xml:1227 #, no-c-format msgid "Release date: 2005/09/09" msgstr "" #. Tag: para #: release_notes.xml:1229 #, no-c-format msgid "" "Contains important bug fixes and a few improvements. In particular, it fixes " "a memory leak preventing successful build of GiST indexes for large spatial " "tables." msgstr "" #. Tag: para #: release_notes.xml:1236 #, no-c-format msgid "" "If you are upgrading from release 1.0.3 you DO NOT need " "a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1251 #, no-c-format msgid "Memory leak plugged in GiST indexing" msgstr "" #. Tag: para #: release_notes.xml:1253 #, no-c-format msgid "Segfault fix in transform() handling of proj4 errors" msgstr "" #. Tag: para #: release_notes.xml:1255 #, no-c-format msgid "Fixed some proj4 texts in spatial_ref_sys (missing +proj)" msgstr "" #. Tag: para #: release_notes.xml:1257 #, no-c-format msgid "" "Loader: fixed string functions usage, reworked NULL objects check, fixed " "segfault on MULTILINESTRING input." msgstr "" #. Tag: para #: release_notes.xml:1260 #, no-c-format msgid "Fixed bug in MakeLine dimension handling" msgstr "" #. Tag: para #: release_notes.xml:1262 #, no-c-format msgid "Fixed bug in translate() corrupting output bounding box" msgstr "" #. Tag: para #: release_notes.xml:1268 #, no-c-format msgid "Documentation improvements" msgstr "" #. Tag: para #: release_notes.xml:1270 #, no-c-format msgid "More robust selectivity estimator" msgstr "" #. Tag: para #: release_notes.xml:1272 #, no-c-format msgid "Minor speedup in distance()" msgstr "" #. Tag: para #: release_notes.xml:1274 #, no-c-format msgid "Minor cleanups" msgstr "" #. Tag: para #: release_notes.xml:1276 #, no-c-format msgid "GiST indexing cleanup" msgstr "" #. Tag: para #: release_notes.xml:1278 #, no-c-format msgid "Looser syntax acceptance in box3d parser" msgstr "" #. Tag: title #: release_notes.xml:1283 #, no-c-format msgid "Release 1.0.3" msgstr "" #. Tag: para #: release_notes.xml:1285 #, no-c-format msgid "Release date: 2005/08/08" msgstr "" #. Tag: para #: release_notes.xml:1287 #, no-c-format msgid "" "Contains some bug fixes - including a severe one affecting " "correctness of stored geometries - and a few improvements." msgstr "" #. Tag: para #: release_notes.xml:1294 #, no-c-format msgid "" "Due to a bug in a bounding box computation routine, the upgrade procedure " "requires special attention, as bounding boxes cached in the database could " "be incorrect." msgstr "" #. Tag: para #: release_notes.xml:1298 #, no-c-format msgid "" "An hard upgrade procedure (dump/" "reload) will force recomputation of all bounding boxes (not included in " "dumps). This is required if upgrading from releases " "prior to 1.0.0RC6." msgstr "" #. Tag: para #: release_notes.xml:1303 #, no-c-format msgid "" "If you are upgrading from versions 1.0.0RC6 or up, this release includes a " "perl script (utils/rebuild_bbox_caches.pl) to force recomputation of " "geometries' bounding boxes and invoke all operations required to propagate " "eventual changes in them (geometry statistics update, reindexing). Invoke " "the script after a make install (run with no args for syntax help). " "Optionally run utils/postgis_proc_upgrade.pl to refresh postgis procedures " "and functions signatures (see Soft upgrade)." msgstr "" #. Tag: para #: release_notes.xml:1316 #, no-c-format msgid "Severe bugfix in lwgeom's 2d bounding box computation" msgstr "" #. Tag: para #: release_notes.xml:1318 #, no-c-format msgid "Bugfix in WKT (-w) POINT handling in loader" msgstr "" #. Tag: para #: release_notes.xml:1320 #, no-c-format msgid "Bugfix in dumper on 64bit machines" msgstr "" #. Tag: para #: release_notes.xml:1322 #, no-c-format msgid "Bugfix in dumper handling of user-defined queries" msgstr "" #. Tag: para #: release_notes.xml:1324 #, no-c-format msgid "Bugfix in create_undef.pl script" msgstr "" #. Tag: para #: release_notes.xml:1330 #, no-c-format msgid "Small performance improvement in canonical input function" msgstr "" #. Tag: para #: release_notes.xml:1332 #, no-c-format msgid "Minor cleanups in loader" msgstr "" #. Tag: para #: release_notes.xml:1334 #, no-c-format msgid "Support for multibyte field names in loader" msgstr "" #. Tag: para #: release_notes.xml:1336 #, no-c-format msgid "Improvement in the postgis_restore.pl script" msgstr "" #. Tag: para #: release_notes.xml:1338 #, no-c-format msgid "New rebuild_bbox_caches.pl util script" msgstr "" #. Tag: title #: release_notes.xml:1343 #, no-c-format msgid "Release 1.0.2" msgstr "" #. Tag: para #: release_notes.xml:1345 #, no-c-format msgid "Release date: 2005/07/04" msgstr "" #. Tag: para #: release_notes.xml:1352 release_notes.xml:1392 #, no-c-format msgid "" "If you are upgrading from release 1.0.0RC6 or up you DO NOT need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1355 release_notes.xml:1395 #, no-c-format msgid "" "Upgrading from older releases requires a dump/reload. See the upgrading chapter for more informations." msgstr "" #. Tag: para #: release_notes.xml:1363 #, no-c-format msgid "Fault tolerant btree ops" msgstr "" #. Tag: para #: release_notes.xml:1365 #, no-c-format msgid "Memory leak plugged in pg_error" msgstr "" #. Tag: para #: release_notes.xml:1367 #, no-c-format msgid "Rtree index fix" msgstr "" #. Tag: para #: release_notes.xml:1369 #, no-c-format msgid "Cleaner build scripts (avoided mix of CFLAGS and CXXFLAGS)" msgstr "" #. Tag: para #: release_notes.xml:1376 #, no-c-format msgid "New index creation capabilities in loader (-I switch)" msgstr "" #. Tag: para #: release_notes.xml:1378 #, no-c-format msgid "Initial support for postgresql 8.1dev" msgstr "" #. Tag: title #: release_notes.xml:1383 #, no-c-format msgid "Release 1.0.1" msgstr "" #. Tag: para #: release_notes.xml:1385 #, no-c-format msgid "Release date: 2005/05/24" msgstr "" #. Tag: para #: release_notes.xml:1387 #, no-c-format msgid "Contains a few bug fixes and some improvements." msgstr "" #. Tag: para #: release_notes.xml:1403 #, no-c-format msgid "BUGFIX in 3d computation of length_spheroid()" msgstr "" #. Tag: para #: release_notes.xml:1405 #, no-c-format msgid "BUGFIX in join selectivity estimator" msgstr "" #. Tag: title #: release_notes.xml:1409 release_notes.xml:1465 #, no-c-format msgid "Other changes/additions" msgstr "" #. Tag: para #: release_notes.xml:1411 #, no-c-format msgid "BUGFIX in shp2pgsql escape functions" msgstr "" #. Tag: para #: release_notes.xml:1413 #, no-c-format msgid "better support for concurrent postgis in multiple schemas" msgstr "" #. Tag: para #: release_notes.xml:1415 #, no-c-format msgid "documentation fixes" msgstr "" #. Tag: para #: release_notes.xml:1417 #, no-c-format msgid "jdbc2: compile with \"-target 1.2 -source 1.2\" by default" msgstr "" #. Tag: para #: release_notes.xml:1419 #, no-c-format msgid "NEW -k switch for pgsql2shp" msgstr "" #. Tag: para #: release_notes.xml:1421 #, no-c-format msgid "NEW support for custom createdb options in postgis_restore.pl" msgstr "" #. Tag: para #: release_notes.xml:1424 #, no-c-format msgid "BUGFIX in pgsql2shp attribute names unicity enforcement" msgstr "" #. Tag: para #: release_notes.xml:1426 #, no-c-format msgid "BUGFIX in Paris projections definitions" msgstr "" #. Tag: para #: release_notes.xml:1428 #, no-c-format msgid "postgis_restore.pl cleanups" msgstr "" #. Tag: title #: release_notes.xml:1433 #, no-c-format msgid "Release 1.0.0" msgstr "" #. Tag: para #: release_notes.xml:1435 #, no-c-format msgid "Release date: 2005/04/19" msgstr "" #. Tag: para #: release_notes.xml:1437 #, no-c-format msgid "" "Final 1.0.0 release. Contains a few bug fixes, some improvements in the " "loader (most notably support for older postgis versions), and more docs." msgstr "" #. Tag: para #: release_notes.xml:1444 #, no-c-format msgid "" "If you are upgrading from release 1.0.0RC6 you DO NOT " "need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1447 release_notes.xml:1538 #, no-c-format msgid "" "Upgrading from any other precedent release requires a dump/reload. See the " "upgrading chapter for more informations." msgstr "" #. Tag: para #: release_notes.xml:1455 #, no-c-format msgid "BUGFIX in transform() releasing random memory address" msgstr "" #. Tag: para #: release_notes.xml:1457 #, no-c-format msgid "BUGFIX in force_3dm() allocating less memory then required" msgstr "" #. Tag: para #: release_notes.xml:1460 #, no-c-format msgid "BUGFIX in join selectivity estimator (defaults, leaks, tuplecount, sd)" msgstr "" #. Tag: para #: release_notes.xml:1467 #, no-c-format msgid "BUGFIX in shp2pgsql escape of values starting with tab or single-quote" msgstr "" #. Tag: para #: release_notes.xml:1470 #, no-c-format msgid "NEW manual pages for loader/dumper" msgstr "" #. Tag: para #: release_notes.xml:1472 #, no-c-format msgid "NEW shp2pgsql support for old (HWGEOM) postgis versions" msgstr "" #. Tag: para #: release_notes.xml:1474 #, no-c-format msgid "NEW -p (prepare) flag for shp2pgsql" msgstr "" #. Tag: para #: release_notes.xml:1476 #, no-c-format msgid "NEW manual chapter about OGC compliancy enforcement" msgstr "" #. Tag: para #: release_notes.xml:1478 #, no-c-format msgid "NEW autoconf support for JTS lib" msgstr "" #. Tag: para #: release_notes.xml:1480 #, no-c-format msgid "BUGFIX in estimator testers (support for LWGEOM and schema parsing)" msgstr "" #. Tag: title #: release_notes.xml:1486 #, no-c-format msgid "Release 1.0.0RC6" msgstr "" #. Tag: para #: release_notes.xml:1488 #, no-c-format msgid "Release date: 2005/03/30" msgstr "" #. Tag: para #: release_notes.xml:1490 #, no-c-format msgid "" "Sixth release candidate for 1.0.0. Contains a few bug fixes and cleanups." msgstr "" #. Tag: para #: release_notes.xml:1496 release_notes.xml:1572 release_notes.xml:1639 #: release_notes.xml:1736 release_notes.xml:1790 #, no-c-format msgid "" "You need a dump/reload to upgrade from precedent releases. See the upgrading chapter for more informations." msgstr "" #. Tag: para #: release_notes.xml:1504 #, no-c-format msgid "BUGFIX in multi()" msgstr "" #. Tag: para #: release_notes.xml:1506 #, no-c-format msgid "early return [when noop] from multi()" msgstr "" #. Tag: title #: release_notes.xml:1510 release_notes.xml:1596 release_notes.xml:1669 #: release_notes.xml:1761 #, no-c-format msgid "Scripts changes" msgstr "" #. Tag: para #: release_notes.xml:1512 #, no-c-format msgid "dropped {x,y}{min,max}(box2d) functions" msgstr "" #. Tag: para #: release_notes.xml:1518 #, no-c-format msgid "BUGFIX in postgis_restore.pl scrip" msgstr "" #. Tag: para #: release_notes.xml:1520 #, no-c-format msgid "BUGFIX in dumper's 64bit support" msgstr "" #. Tag: title #: release_notes.xml:1525 #, no-c-format msgid "Release 1.0.0RC5" msgstr "" #. Tag: para #: release_notes.xml:1527 #, no-c-format msgid "Release date: 2005/03/25" msgstr "" #. Tag: para #: release_notes.xml:1529 #, no-c-format msgid "" "Fifth release candidate for 1.0.0. Contains a few bug fixes and a " "improvements." msgstr "" #. Tag: para #: release_notes.xml:1535 #, no-c-format msgid "" "If you are upgrading from release 1.0.0RC4 you DO NOT " "need a dump/reload." msgstr "" #. Tag: para #: release_notes.xml:1546 #, no-c-format msgid "BUGFIX (segfaulting) in box3d computation (yes, another!)." msgstr "" #. Tag: para #: release_notes.xml:1549 #, no-c-format msgid "BUGFIX (segfaulting) in estimated_extent()." msgstr "" #. Tag: para #: release_notes.xml:1555 #, no-c-format msgid "Small build scripts and utilities refinements." msgstr "" #. Tag: para #: release_notes.xml:1557 #, no-c-format msgid "Additional performance tips documented." msgstr "" #. Tag: title #: release_notes.xml:1562 #, no-c-format msgid "Release 1.0.0RC4" msgstr "" #. Tag: para #: release_notes.xml:1564 #, no-c-format msgid "Release date: 2005/03/18" msgstr "" #. Tag: para #: release_notes.xml:1566 #, no-c-format msgid "" "Fourth release candidate for 1.0.0. Contains bug fixes and a few " "improvements." msgstr "" #. Tag: para #: release_notes.xml:1580 #, no-c-format msgid "BUGFIX (segfaulting) in geom_accum()." msgstr "" #. Tag: para #: release_notes.xml:1582 #, no-c-format msgid "BUGFIX in 64bit architectures support." msgstr "" #. Tag: para #: release_notes.xml:1584 #, no-c-format msgid "BUGFIX in box3d computation function with collections." msgstr "" #. Tag: para #: release_notes.xml:1586 #, no-c-format msgid "NEW subselects support in selectivity estimator." msgstr "" #. Tag: para #: release_notes.xml:1588 #, no-c-format msgid "Early return from force_collection." msgstr "" #. Tag: para #: release_notes.xml:1590 #, no-c-format msgid "Consistency check fix in SnapToGrid()." msgstr "" #. Tag: para #: release_notes.xml:1592 #, no-c-format msgid "Box2d output changed back to 15 significant digits." msgstr "" #. Tag: para #: release_notes.xml:1598 #, no-c-format msgid "NEW distance_sphere() function." msgstr "" #. Tag: para #: release_notes.xml:1600 #, no-c-format msgid "" "Changed get_proj4_from_srid implementation to use PL/PGSQL instead of SQL." msgstr "" #. Tag: para #: release_notes.xml:1607 #, no-c-format msgid "BUGFIX in loader and dumper handling of MultiLine shapes" msgstr "" #. Tag: para #: release_notes.xml:1609 #, no-c-format msgid "BUGFIX in loader, skipping all but first hole of polygons." msgstr "" #. Tag: para #: release_notes.xml:1612 #, no-c-format msgid "jdbc2: code cleanups, Makefile improvements" msgstr "" #. Tag: para #: release_notes.xml:1614 #, no-c-format msgid "" "FLEX and YACC variables set *after* pgsql Makefile.global is included and " "only if the pgsql *stripped* version evaluates to the empty string" msgstr "" #. Tag: para #: release_notes.xml:1618 #, no-c-format msgid "Added already generated parser in release" msgstr "" #. Tag: para #: release_notes.xml:1620 #, no-c-format msgid "Build scripts refinements" msgstr "" #. Tag: para #: release_notes.xml:1622 #, no-c-format msgid "improved version handling, central Version.config" msgstr "" #. Tag: para #: release_notes.xml:1624 #, no-c-format msgid "improvements in postgis_restore.pl" msgstr "" #. Tag: title #: release_notes.xml:1629 #, no-c-format msgid "Release 1.0.0RC3" msgstr "" #. Tag: para #: release_notes.xml:1631 #, no-c-format msgid "Release date: 2005/02/24" msgstr "" #. Tag: para #: release_notes.xml:1633 #, no-c-format msgid "" "Third release candidate for 1.0.0. Contains many bug fixes and improvements." msgstr "" #. Tag: para #: release_notes.xml:1647 #, no-c-format msgid "BUGFIX in transform(): missing SRID, better error handling." msgstr "" #. Tag: para #: release_notes.xml:1650 #, no-c-format msgid "BUGFIX in memory alignment handling" msgstr "" #. Tag: para #: release_notes.xml:1652 #, no-c-format msgid "" "BUGFIX in force_collection() causing mapserver connector failures on simple " "(single) geometry types." msgstr "" #. Tag: para #: release_notes.xml:1655 #, no-c-format msgid "BUGFIX in GeometryFromText() missing to add a bbox cache." msgstr "" #. Tag: para #: release_notes.xml:1657 #, no-c-format msgid "reduced precision of box2d output." msgstr "" #. Tag: para #: release_notes.xml:1659 #, no-c-format msgid "prefixed DEBUG macros with PGIS_ to avoid clash with pgsql one" msgstr "" #. Tag: para #: release_notes.xml:1662 #, no-c-format msgid "plugged a leak in GEOS2POSTGIS converter" msgstr "" #. Tag: para #: release_notes.xml:1664 #, no-c-format msgid "Reduced memory usage by early releasing query-context palloced one." msgstr "" #. Tag: para #: release_notes.xml:1671 #, no-c-format msgid "BUGFIX in 72 index bindings." msgstr "" #. Tag: para #: release_notes.xml:1673 #, no-c-format msgid "" "BUGFIX in probe_geometry_columns() to work with PG72 and support multiple " "geometry columns in a single table" msgstr "" #. Tag: para #: release_notes.xml:1676 #, no-c-format msgid "NEW bool::text cast" msgstr "" #. Tag: para #: release_notes.xml:1678 #, no-c-format msgid "Some functions made IMMUTABLE from STABLE, for performance improvement." msgstr "" #. Tag: para #: release_notes.xml:1685 #, no-c-format msgid "jdbc2: small patches, box2d/3d tests, revised docs and license." msgstr "" #. Tag: para #: release_notes.xml:1688 #, no-c-format msgid "jdbc2: bug fix and testcase in for pgjdbc 8.0 type autoregistration" msgstr "" #. Tag: para #: release_notes.xml:1691 #, no-c-format msgid "" "jdbc2: Removed use of jdk1.4 only features to enable build with older jdk " "releases." msgstr "" #. Tag: para #: release_notes.xml:1694 #, no-c-format msgid "jdbc2: Added support for building against pg72jdbc2.jar" msgstr "" #. Tag: para #: release_notes.xml:1696 #, no-c-format msgid "jdbc2: updated and cleaned makefile" msgstr "" #. Tag: para #: release_notes.xml:1698 #, no-c-format msgid "jdbc2: added BETA support for jts geometry classes" msgstr "" #. Tag: para #: release_notes.xml:1700 #, no-c-format msgid "jdbc2: Skip known-to-fail tests against older PostGIS servers." msgstr "" #. Tag: para #: release_notes.xml:1703 #, no-c-format msgid "jdbc2: Fixed handling of measured geometries in EWKT." msgstr "" #. Tag: para #: release_notes.xml:1709 #, no-c-format msgid "new performance tips chapter in manual" msgstr "" #. Tag: para #: release_notes.xml:1711 #, no-c-format msgid "documentation updates: pgsql72 requirement, lwpostgis.sql" msgstr "" #. Tag: para #: release_notes.xml:1713 #, no-c-format msgid "few changes in autoconf" msgstr "" #. Tag: para #: release_notes.xml:1715 #, no-c-format msgid "BUILDDATE extraction made more portable" msgstr "" #. Tag: para #: release_notes.xml:1717 #, no-c-format msgid "fixed spatial_ref_sys.sql to avoid vacuuming the whole database." msgstr "" #. Tag: para #: release_notes.xml:1720 #, no-c-format msgid "" "spatial_ref_sys: changed Paris entries to match the ones distributed with 0." "x." msgstr "" #. Tag: title #: release_notes.xml:1726 #, no-c-format msgid "Release 1.0.0RC2" msgstr "" #. Tag: para #: release_notes.xml:1728 #, no-c-format msgid "Release date: 2005/01/26" msgstr "" #. Tag: para #: release_notes.xml:1730 #, no-c-format msgid "" "Second release candidate for 1.0.0 containing bug fixes and a few " "improvements." msgstr "" #. Tag: para #: release_notes.xml:1744 #, no-c-format msgid "BUGFIX in pointarray box3d computation" msgstr "" #. Tag: para #: release_notes.xml:1746 #, no-c-format msgid "BUGFIX in distance_spheroid definition" msgstr "" #. Tag: para #: release_notes.xml:1748 #, no-c-format msgid "BUGFIX in transform() missing to update bbox cache" msgstr "" #. Tag: para #: release_notes.xml:1750 #, no-c-format msgid "NEW jdbc driver (jdbc2)" msgstr "" #. Tag: para #: release_notes.xml:1752 #, no-c-format msgid "GEOMETRYCOLLECTION(EMPTY) syntax support for backward compatibility" msgstr "" #. Tag: para #: release_notes.xml:1755 #, no-c-format msgid "Faster binary outputs" msgstr "" #. Tag: para #: release_notes.xml:1757 #, no-c-format msgid "Stricter OGC WKB/WKT constructors" msgstr "" #. Tag: para #: release_notes.xml:1763 #, no-c-format msgid "More correct STABLE, IMMUTABLE, STRICT uses in lwpostgis.sql" msgstr "" #. Tag: para #: release_notes.xml:1766 #, no-c-format msgid "stricter OGC WKB/WKT constructors" msgstr "" #. Tag: para #: release_notes.xml:1772 #, no-c-format msgid "Faster and more robust loader (both i18n and not)" msgstr "" #. Tag: para #: release_notes.xml:1774 #, no-c-format msgid "Initial autoconf script" msgstr "" #. Tag: title #: release_notes.xml:1779 #, no-c-format msgid "Release 1.0.0RC1" msgstr "" #. Tag: para #: release_notes.xml:1781 #, no-c-format msgid "Release date: 2005/01/13" msgstr "" #. Tag: para #: release_notes.xml:1783 #, no-c-format msgid "" "This is the first candidate of a major postgis release, with internal " "storage of postgis types redesigned to be smaller and faster on indexed " "queries." msgstr "" #. Tag: para #: release_notes.xml:1798 #, no-c-format msgid "Faster canonical input parsing." msgstr "" #. Tag: para #: release_notes.xml:1800 #, no-c-format msgid "Lossless canonical output." msgstr "" #. Tag: para #: release_notes.xml:1802 #, no-c-format msgid "EWKB Canonical binary IO with PG>73." msgstr "" #. Tag: para #: release_notes.xml:1804 #, no-c-format msgid "" "Support for up to 4d coordinates, providing lossless shapefile->postgis-" ">shapefile conversion." msgstr "" #. Tag: para #: release_notes.xml:1807 #, no-c-format msgid "" "New function: UpdateGeometrySRID(), AsGML(), SnapToGrid(), ForceRHR(), " "estimated_extent(), accum()." msgstr "" #. Tag: para #: release_notes.xml:1810 #, no-c-format msgid "Vertical positioning indexed operators." msgstr "" #. Tag: para #: release_notes.xml:1812 #, no-c-format msgid "JOIN selectivity function." msgstr "" #. Tag: para #: release_notes.xml:1814 #, no-c-format msgid "More geometry constructors / editors." msgstr "" #. Tag: para #: release_notes.xml:1816 #, no-c-format msgid "PostGIS extension API." msgstr "" #. Tag: para #: release_notes.xml:1818 #, no-c-format msgid "UTF8 support in loader." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reporting.xml.po0000644000000000000000000001057512025614072021130 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reporting.xml:3 #, no-c-format msgid "Reporting Problems" msgstr "" #. Tag: title #: reporting.xml:6 #, no-c-format msgid "Reporting Software Bugs" msgstr "" #. Tag: para #: reporting.xml:8 #, no-c-format msgid "" "Reporting bugs effectively is a fundamental way to help PostGIS development. " "The most effective bug report is that enabling PostGIS developers to " "reproduce it, so it would ideally contain a script triggering it and every " "information regarding the environment in which it was detected. Good enough " "info can be extracted running SELECT postgis_full_version() " "[for postgis] and SELECT version() [for postgresql]." msgstr "" #. Tag: para #: reporting.xml:16 #, no-c-format msgid "" "If you aren't using the latest release, it's worth taking a look at its " "release changelog first, to find out if your bug has already been fixed." msgstr "" #. Tag: para #: reporting.xml:21 #, no-c-format msgid "" "Using the PostGIS bug tracker will ensure your reports are not discarded, and will keep you " "informed on its handling process. Before reporting a new bug please query " "the database to see if it is a known one, and if it is please add any new " "information you have about it." msgstr "" #. Tag: para #: reporting.xml:28 #, no-c-format msgid "" "You might want to read Simon Tatham's paper about How to Report Bugs Effectively before filing a new report." msgstr "" #. Tag: title #: reporting.xml:34 #, no-c-format msgid "Reporting Documentation Issues" msgstr "" #. Tag: para #: reporting.xml:36 #, no-c-format msgid "" "The documentation should accurately reflect the features and behavior of the " "software. If it doesn't, it could be because of a software bug or because " "the documentation is in error or deficient." msgstr "" #. Tag: para #: reporting.xml:40 #, no-c-format msgid "" "Documentation issues can also be reported to the PostGIS bug tracker." msgstr "" #. Tag: para #: reporting.xml:44 #, no-c-format msgid "" "If your revision is trivial, just describe it in a new bug tracker issue, " "being specific about its location in the documentation." msgstr "" #. Tag: para #: reporting.xml:47 #, no-c-format msgid "" "If your changes are more extensive, a Subversion patch is definitely " "preferred. This is a four step process on Unix (assuming you already have " "Subversion installed):" msgstr "" #. Tag: para #: reporting.xml:54 #, no-c-format msgid "Check out a copy of PostGIS' Subversion trunk. On Unix, type:" msgstr "" #. Tag: command #: reporting.xml:57 #, no-c-format msgid "svn checkout http://svn.osgeo.org/postgis/trunk/" msgstr "" #. Tag: para #: reporting.xml:60 #, no-c-format msgid "This will be stored in the directory ./trunk" msgstr "" #. Tag: para #: reporting.xml:64 #, no-c-format msgid "" "Make your changes to the documentation with your favorite text editor. On " "Unix, type (for example):" msgstr "" #. Tag: command #: reporting.xml:67 #, no-c-format msgid "vim trunk/doc/postgis.xml" msgstr "" #. Tag: para #: reporting.xml:69 #, no-c-format msgid "" "Note that the documentation is written in DocBook XML rather than HTML, so " "if you are not familiar with it please follow the example of the rest of the " "documentation." msgstr "" #. Tag: para #: reporting.xml:75 #, no-c-format msgid "" "Make a patch file containing the differences from the master copy of the " "documentation. On Unix, type:" msgstr "" #. Tag: command #: reporting.xml:78 #, no-c-format msgid "svn diff trunk/doc/postgis.xml > doc.patch" msgstr "" #. Tag: para #: reporting.xml:83 #, no-c-format msgid "Attach the patch to a new issue in bug tracker." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/using_postgis_dataman.xml.po0000644000000000000000000033064312025614072023502 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: using_postgis_dataman.xml:3 #, no-c-format msgid "Using PostGIS: Data Management and Queries" msgstr "" #. Tag: title #: using_postgis_dataman.xml:6 #, no-c-format msgid "GIS Objects" msgstr "" #. Tag: para #: using_postgis_dataman.xml:8 #, no-c-format msgid "" "The GIS objects supported by PostGIS are a superset of the \"Simple Features" "\" defined by the OpenGIS Consortium (OGC). As of version 0.9, PostGIS " "supports all the objects and functions specified in the OGC \"Simple " "Features for SQL\" specification." msgstr "" #. Tag: para #: using_postgis_dataman.xml:13 #, no-c-format msgid "" "PostGIS extends the standard with support for 3DZ,3DM and 4D coordinates." msgstr "" #. Tag: title #: using_postgis_dataman.xml:17 #, no-c-format msgid "OpenGIS WKB and WKT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:19 #, no-c-format msgid "" "The OpenGIS specification defines two standard ways of expressing spatial " "objects: the Well-Known Text (WKT) form and the Well-Known Binary (WKB) " "form. Both WKT and WKB include information about the type of the object and " "the coordinates which form the object." msgstr "" #. Tag: para #: using_postgis_dataman.xml:24 #, no-c-format msgid "" "Examples of the text representations (WKT) of the spatial objects of the " "features are as follows:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:29 #, no-c-format msgid "POINT(0 0)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:33 #, no-c-format msgid "LINESTRING(0 0,1 1,1 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:37 #, no-c-format msgid "POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:41 #, no-c-format msgid "MULTIPOINT(0 0,1 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:45 #, no-c-format msgid "MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:49 #, no-c-format msgid "" "MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 " "-2,-2 -1,-1 -1)))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:54 #, no-c-format msgid "GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:58 #, no-c-format msgid "" "The OpenGIS specification also requires that the internal storage format of " "spatial objects include a spatial referencing system identifier (SRID). The " "SRID is required when creating spatial objects for insertion into the " "database." msgstr "" #. Tag: para #: using_postgis_dataman.xml:63 using_postgis_dataman.xml:151 #, no-c-format msgid "" "Input/Output of these formats are available using the following interfaces:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:66 #, no-c-format msgid "" "bytea WKB = ST_AsBinary(geometry);\n" "text WKT = ST_AsText(geometry);\n" "geometry = ST_GeomFromWKB(bytea WKB, SRID);\n" "geometry = ST_GeometryFromText(text WKT, SRID);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:68 #, no-c-format msgid "" "For example, a valid insert statement to create and insert an OGC spatial " "object would be:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:71 #, no-c-format msgid "" "INSERT INTO geotable ( the_geom, the_name )\n" " VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');" msgstr "" #. Tag: title #: using_postgis_dataman.xml:75 #, no-c-format msgid "PostGIS EWKB, EWKT and Canonical Forms" msgstr "" #. Tag: para #: using_postgis_dataman.xml:77 #, no-c-format msgid "" "OGC formats only support 2d geometries, and the associated SRID is *never* " "embedded in the input/output representations." msgstr "" #. Tag: para #: using_postgis_dataman.xml:80 #, no-c-format msgid "" "PostGIS extended formats are currently superset of OGC one (every valid WKB/" "WKT is a valid EWKB/EWKT) but this might vary in the future, specifically if " "OGC comes out with a new format conflicting with our extensions. Thus you " "SHOULD NOT rely on this feature!" msgstr "" #. Tag: para #: using_postgis_dataman.xml:85 #, no-c-format msgid "" "PostGIS EWKB/EWKT add 3dm,3dz,4d coordinates support and embedded SRID " "information." msgstr "" #. Tag: para #: using_postgis_dataman.xml:88 #, no-c-format msgid "" "Examples of the text representations (EWKT) of the extended spatial objects " "of the features are as follows. The * ones are new in this version of " "PostGIS:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:93 #, no-c-format msgid "POINT(0 0 0) -- XYZ" msgstr "" #. Tag: para #: using_postgis_dataman.xml:97 #, no-c-format msgid "SRID=32632;POINT(0 0) -- XY with SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:101 #, no-c-format msgid "POINTM(0 0 0) -- XYM" msgstr "" #. Tag: para #: using_postgis_dataman.xml:105 #, no-c-format msgid "POINT(0 0 0 0) -- XYZM" msgstr "" #. Tag: para #: using_postgis_dataman.xml:109 #, no-c-format msgid "SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM with SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:113 #, no-c-format msgid "MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:118 #, no-c-format msgid "" "POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:123 #, no-c-format msgid "" "MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 " "0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:128 #, no-c-format msgid "GEOMETRYCOLLECTIONM( POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:132 #, no-c-format msgid "MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:136 #, no-c-format msgid "" "POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 " "1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, " "1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 " "1, 1 1 1, 0 1 1, 0 0 1)) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:142 #, no-c-format msgid "TRIANGLE ((0 0, 0 9, 9 0, 0 0))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:146 #, no-c-format msgid "TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:154 #, no-c-format msgid "" "bytea EWKB = ST_AsEWKB(geometry);\n" "text EWKT = ST_AsEWKT(geometry);\n" "geometry = ST_GeomFromEWKB(bytea EWKB);\n" "geometry = ST_GeomFromEWKT(text EWKT);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:156 #, no-c-format msgid "" "For example, a valid insert statement to create and insert a PostGIS spatial " "object would be:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:159 #, no-c-format msgid "" "INSERT INTO geotable ( the_geom, the_name )\n" " VALUES ( ST_GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:161 #, no-c-format msgid "" "The \"canonical forms\" of a PostgreSQL type are the representations you get " "with a simple query (without any function call) and the one which is " "guaranteed to be accepted with a simple insert, update or copy. For the " "postgis 'geometry' type these are:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:164 #, no-c-format msgid "" "- Output\n" " - binary: EWKB\n" " ascii: HEXEWKB (EWKB in hex form)\n" "- Input\n" " - binary: EWKB\n" " ascii: HEXEWKB|EWKT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:166 #, no-c-format msgid "" "For example this statement reads EWKT and returns HEXEWKB in the process of " "canonical ascii input/output:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:169 #, no-c-format msgid "" "=# SELECT 'SRID=4;POINT(0 0)'::geometry;\n" "\n" "geometry\n" "----------------------------------------------------\n" "01010000200400000000000000000000000000000000000000\n" "(1 row)" msgstr "" #. Tag: title #: using_postgis_dataman.xml:172 #, no-c-format msgid "SQL-MM Part 3" msgstr "" #. Tag: para #: using_postgis_dataman.xml:174 #, no-c-format msgid "" "The SQL Multimedia Applications Spatial specification extends the simple " "features for SQL spec by defining a number of circularly interpolated curves." msgstr "" #. Tag: para #: using_postgis_dataman.xml:178 #, no-c-format msgid "" "The SQL-MM definitions include 3dm, 3dz and 4d coordinates, but do not allow " "the embedding of SRID information." msgstr "" #. Tag: para #: using_postgis_dataman.xml:181 #, no-c-format msgid "" "The well-known text extensions are not yet fully supported. Examples of some " "simple curved geometries are shown below:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:186 #, no-c-format msgid "CIRCULARSTRING(0 0, 1 1, 1 0)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:187 #, no-c-format msgid "CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:188 #, no-c-format msgid "" "The CIRCULARSTRING is the basic curve type, similar to a LINESTRING in the " "linear world. A single segment required three points, the start and end " "points (first and third) and any other point on the arc. The exception to " "this is for a closed circle, where the start and end points are the same. In " "this case the second point MUST be the center of the arc, ie the opposite " "side of the circle. To chain arcs together, the last point of the previous " "arc becomes the first point of the next arc, just like in LINESTRING. This " "means that a valid circular string must have an odd number of points greated " "than 1." msgstr "" #. Tag: para #: using_postgis_dataman.xml:201 #, no-c-format msgid "COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:202 #, no-c-format msgid "" "A compound curve is a single, continuous curve that has both curved " "(circular) segments and linear segments. That means that in addition to " "having well-formed components, the end point of every component (except the " "last) must be coincident with the start point of the following component." msgstr "" #. Tag: para #: using_postgis_dataman.xml:210 #, no-c-format msgid "" "CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:212 #, no-c-format msgid "" "Example compound curve in a curve polygon: CURVEPOLYGON(COMPOUNDCURVE" "(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING" "(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:216 #, no-c-format msgid "" "A CURVEPOLYGON is just like a polygon, with an outer ring and zero or more " "inner rings. The difference is that a ring can take the form of a circular " "string, linear string or compound string." msgstr "" #. Tag: para #: using_postgis_dataman.xml:220 #, no-c-format msgid "As of PostGIS 1.4 PostGIS supports compound curves in a curve polygon." msgstr "" #. Tag: para #: using_postgis_dataman.xml:224 #, no-c-format msgid "MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:225 #, no-c-format msgid "" "The MULTICURVE is a collection of curves, which can include linear strings, " "circular strings or compound strings." msgstr "" #. Tag: para #: using_postgis_dataman.xml:230 #, no-c-format msgid "" "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, " "3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11)))" msgstr "" #. Tag: para #: using_postgis_dataman.xml:233 #, no-c-format msgid "" "This is a collection of surfaces, which can be (linear) polygons or curve " "polygons." msgstr "" #. Tag: para #: using_postgis_dataman.xml:239 #, no-c-format msgid "" "PostGIS prior to 1.4 does not support compound curves in a curve polygon, " "but PostGIS 1.4 and above do support the use of Compound Curves in a Curve " "Polygon." msgstr "" #. Tag: para #: using_postgis_dataman.xml:245 #, no-c-format msgid "" "All floating point comparisons within the SQL-MM implementation are " "performed to a specified tolerance, currently 1E-8." msgstr "" #. Tag: title #: using_postgis_dataman.xml:251 #, no-c-format msgid "PostGIS Geography Type" msgstr "" #. Tag: para #: using_postgis_dataman.xml:253 #, no-c-format msgid "" "The geography type provides native support for spatial features represented " "on \"geographic\" coordinates (sometimes called \"geodetic\" coordinates, or " "\"lat/lon\", or \"lon/lat\"). Geographic coordinates are spherical " "coordinates expressed in angular units (degrees)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:255 #, no-c-format msgid "" "The basis for the PostGIS geometry type is a plane. The shortest path " "between two points on the plane is a straight line. That means calculations " "on geometries (areas, distances, lengths, intersections, etc) can be " "calculated using cartesian mathematics and straight line vectors." msgstr "" #. Tag: para #: using_postgis_dataman.xml:257 #, no-c-format msgid "" "The basis for the PostGIS geographic type is a sphere. The shortest path " "between two points on the sphere is a great circle arc. That means that " "calculations on geographies (areas, distances, lengths, intersections, etc) " "must be calculated on the sphere, using more complicated mathematics. For " "more accurate measurements, the calculations must take the actual spheroidal " "shape of the world into account, and the mathematics becomes very " "complicated indeed." msgstr "" #. Tag: para #: using_postgis_dataman.xml:259 #, no-c-format msgid "" "Because the underlying mathematics is much more complicated, there are fewer " "functions defined for the geography type than for the geometry type. Over " "time, as new algorithms are added, the capabilities of the geography type " "will expand." msgstr "" #. Tag: para #: using_postgis_dataman.xml:262 #, no-c-format msgid "" "One restriction is that it only supports WGS 84 long lat (SRID:4326). It " "uses a new data type called geography. None of the GEOS functions support " "this new type. As a workaround one can convert back and forth between " "geometry and geography types." msgstr "" #. Tag: para #: using_postgis_dataman.xml:266 #, no-c-format msgid "" "The new geography type uses the PostgreSQL 8.3+ typmod definition format so " "that a table with a geography field can be added in a single step. All the " "standard OGC formats except for curves are supported." msgstr "" #. Tag: title #: using_postgis_dataman.xml:270 #, no-c-format msgid "Geography Basics" msgstr "" #. Tag: para #: using_postgis_dataman.xml:271 #, no-c-format msgid "" "The geography type only supports the simplest of simple features. Standard " "geometry type data will autocast to geography if it is of SRID 4326. You can " "also use the EWKT and EWKB conventions to insert data." msgstr "" #. Tag: para #: using_postgis_dataman.xml:276 #, no-c-format msgid "POINT: Creating a table with 2d point geometry:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:277 #, no-c-format msgid "" "CREATE TABLE testgeog(gid serial PRIMARY KEY, the_geog geography" "(POINT,4326) );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:278 #, no-c-format msgid "Creating a table with z coordinate point" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:279 #, no-c-format msgid "" "CREATE TABLE testgeog(gid serial PRIMARY KEY, the_geog geography" "(POINTZ,4326) );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:282 #, no-c-format msgid "LINESTRING" msgstr "" #. Tag: para #: using_postgis_dataman.xml:285 #, no-c-format msgid "POLYGON" msgstr "" #. Tag: para #: using_postgis_dataman.xml:288 #, no-c-format msgid "MULTIPOINT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:291 #, no-c-format msgid "MULTILINESTRING" msgstr "" #. Tag: para #: using_postgis_dataman.xml:294 #, no-c-format msgid "MULTIPOLYGON" msgstr "" #. Tag: para #: using_postgis_dataman.xml:297 #, no-c-format msgid "GEOMETRYCOLLECTION" msgstr "" #. Tag: para #: using_postgis_dataman.xml:301 #, no-c-format msgid "" "The new geography fields don't get registered in the " "geometry_columns. They get registered in a new view " "called geography_columns which is a view against the system catalogs so is " "always automatically kept up to date without need for an AddGeom... like " "function." msgstr "" #. Tag: para #: using_postgis_dataman.xml:305 #, no-c-format msgid "" "Now, check the \"geography_columns\" view and see that your table is listed." msgstr "" #. Tag: para #: using_postgis_dataman.xml:307 #, no-c-format msgid "" "You can create a new table with a GEOGRAPHY column using the CREATE TABLE " "syntax. Unlike GEOMETRY, there is no need to run a separate " "AddGeometryColumns() process to register the column in metadata." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:311 #, no-c-format msgid "" "CREATE TABLE global_points ( \n" " id SERIAL PRIMARY KEY,\n" " name VARCHAR(64),\n" " location GEOGRAPHY(POINT,4326)\n" " );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:314 #, no-c-format msgid "" "Note that the location column has type GEOGRAPHY and that geography type " "supports two optional modifier: a type modifier that restricts the kind of " "shapes and dimensions allowed in the column; an SRID modifier that restricts " "the coordinate reference identifier to a particular number." msgstr "" #. Tag: para #: using_postgis_dataman.xml:315 #, no-c-format msgid "" "Allowable values for the type modifier are: POINT, LINESTRING, POLYGON, " "MULTIPOINT, MULTILINESTRING, MULTIPOLYGON. The modifier also supports " "dimensionality restrictions through suffixes: Z, M and ZM. So, for example a " "modifier of 'LINESTRINGM' would only allow line strings with three " "dimensions in, and would treat the third dimension as a measure. Similarly, " "'POINTZM' would expect four dimensional data." msgstr "" #. Tag: para #: using_postgis_dataman.xml:317 #, no-c-format msgid "" "The SRID modifier is currently of limited use: only 4326 (WGS84) is allowed " "as a value. If you do not specify an SRID, the a value 0 (undefined " "spheroid) will be used, and all calculations will proceed using WGS84 " "anyways." msgstr "" #. Tag: para #: using_postgis_dataman.xml:318 #, no-c-format msgid "" "In the future, alternate SRIDs will allow calculations on spheroids other " "than WGS84." msgstr "" #. Tag: para #: using_postgis_dataman.xml:319 #, no-c-format msgid "" "Once you have created your table, you can see it in the GEOGRAPHY_COLUMNS " "table:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:320 #, no-c-format msgid "" "-- See the contents of the metadata view\n" "SELECT * FROM geography_columns;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:322 #, no-c-format msgid "" "You can insert data into the table the same as you would if it was using a " "GEOMETRY column:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:324 #, no-c-format msgid "" "-- Add some data into the test table\n" "INSERT INTO global_points (name, location) VALUES ('Town', " "ST_GeographyFromText('SRID=4326;POINT(-110 30)') );\n" "INSERT INTO global_points (name, location) VALUES ('Forest', " "ST_GeographyFromText('SRID=4326;POINT(-109 29)') );\n" "INSERT INTO global_points (name, location) VALUES ('London', " "ST_GeographyFromText('SRID=4326;POINT(0 49)') );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:326 #, no-c-format msgid "" "Creating an index works the same as GEOMETRY. PostGIS will note that the " "column type is GEOGRAPHY and create an appropriate sphere-based index " "instead of the usual planar index used for GEOMETRY." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:329 #, no-c-format msgid "" "-- Index the test table with a spherical index\n" " CREATE INDEX global_points_gix ON global_points USING GIST ( location );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:332 #, no-c-format msgid "" "Query and measurement functions use units of meters. So distance parameters " "should be expressed in meters, and return values should be expected in " "meters (or square meters for areas)." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:334 #, no-c-format msgid "" "-- Show a distance query and note, London is outside the 1000km tolerance\n" " SELECT name FROM global_points WHERE ST_DWithin(location, " "ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:337 #, no-c-format msgid "" "You can see the power of GEOGRAPHY in action by calculating the how close a " "plane flying from Seattle to London (LINESTRING(-122.33 47.606, 0.0 51.5)) " "comes to Reykjavik (POINT(-21.96 64.15))." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:339 #, no-c-format msgid "" "-- Distance calculation using GEOGRAPHY (122.2km)\n" " SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, " "'POINT(-21.96 64.15)':: geography);" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:342 #, no-c-format msgid "" "-- Distance calculation using GEOMETRY (13.3 \"degrees\")\n" " SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT" "(-21.96 64.15)':: geometry);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:345 #, no-c-format msgid "" "The GEOGRAPHY type calculates the true shortest distance over the sphere " "between Reykjavik and the great circle flight path between Seattle and " "London." msgstr "" #. Tag: para #: using_postgis_dataman.xml:347 #, no-c-format msgid "" "Great Circle " "mapper The GEOMETRY type calculates a meaningless cartesian distance " "between Reykjavik and the straight line path from Seattle to London plotted " "on a flat map of the world. The nominal units of the result might be called " "\"degrees\", but the result doesn't correspond to any true angular " "difference between the points, so even calling them \"degrees\" is " "inaccurate." msgstr "" #. Tag: title #: using_postgis_dataman.xml:351 #, no-c-format msgid "When to use Geography Data type over Geometry data type" msgstr "" #. Tag: para #: using_postgis_dataman.xml:352 #, no-c-format msgid "" "The new GEOGRAPHY type allows you to store data in longitude/latitude " "coordinates, but at a cost: there are fewer functions defined on GEOGRAPHY " "than there are on GEOMETRY; those functions that are defined take more CPU " "time to execute." msgstr "" #. Tag: para #: using_postgis_dataman.xml:353 #, no-c-format msgid "" "The type you choose should be conditioned on the expected working area of " "the application you are building. Will your data span the globe or a large " "continental area, or is it local to a state, county or municipality?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:355 #, no-c-format msgid "" "If your data is contained in a small area, you might find that choosing an " "appropriate projection and using GEOMETRY is the best solution, in terms of " "performance and functionality available." msgstr "" #. Tag: para #: using_postgis_dataman.xml:356 #, no-c-format msgid "" "If your data is global or covers a continental region, you may find that " "GEOGRAPHY allows you to build a system without having to worry about " "projection details. You store your data in longitude/latitude, and use the " "functions that have been defined on GEOGRAPHY." msgstr "" #. Tag: para #: using_postgis_dataman.xml:358 #, no-c-format msgid "" "If you don't understand projections, and you don't want to learn about them, " "and you're prepared to accept the limitations in functionality available in " "GEOGRAPHY, then it might be easier for you to use GEOGRAPHY than GEOMETRY. " "Simply load your data up as longitude/latitude and go from there." msgstr "" #. Tag: para #: using_postgis_dataman.xml:361 #, no-c-format msgid "" "Refer to for compare between " "what is supported for Geography vs. Geometry. For a brief listing and " "description of Geography functions, refer to " msgstr "" #. Tag: title #: using_postgis_dataman.xml:367 #, no-c-format msgid "Geography Advanced FAQ" msgstr "" #. Tag: para #: using_postgis_dataman.xml:371 #, no-c-format msgid "Do you calculate on the sphere or the spheroid?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:375 #, no-c-format msgid "" "By default, all distance and area calculations are done on the spheroid. You " "should find that the results of calculations in local areas match up will " "with local planar results in good local projections. Over larger areas, the " "spheroidal calculations will be more accurate than any calculation done on a " "projected plane." msgstr "" #. Tag: para #: using_postgis_dataman.xml:378 #, no-c-format msgid "" "All the geography functions have the option of using a sphere calculation, " "by setting a final boolean parameter to 'FALSE'. This will somewhat speed up " "calculations, particularly for cases where the geometries are very simple." msgstr "" #. Tag: para #: using_postgis_dataman.xml:384 #, no-c-format msgid "What about the date-line and the poles?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:388 #, no-c-format msgid "" "All the calculations have no conception of date-line or poles, the " "coordinates are spherical (longitude/latitude) so a shape that crosses the " "dateline is, from a calculation point of view, no different from any other " "shape." msgstr "" #. Tag: para #: using_postgis_dataman.xml:396 #, no-c-format msgid "What is the longest arc you can process?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:400 #, no-c-format msgid "" "We use great circle arcs as the \"interpolation line\" between two points. " "That means any two points are actually joined up two ways, depending on " "which direction you travel along the great circle. All our code assumes that " "the points are joined by the *shorter* of the two paths along the great " "circle. As a consequence, shapes that have arcs of more than 180 degrees " "will not be correctly modelled." msgstr "" #. Tag: para #: using_postgis_dataman.xml:407 #, no-c-format msgid "" "Why is it so slow to calculate the area of Europe / Russia / insert big " "geographic region here ?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:411 #, no-c-format msgid "" "Because the polygon is so darned huge! Big areas are bad for two reasons: " "their bounds are huge, so the index tends to pull the feature no matter what " "query you run; the number of vertices is huge, and tests (distance, " "containment) have to traverse the vertex list at least once and sometimes N " "times (with N being the number of vertices in the other candidate feature)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:416 #, no-c-format msgid "" "As with GEOMETRY, we recommend that when you have very large polygons, but " "are doing queries in small areas, you \"denormalize\" your geometric data " "into smaller chunks so that the index can effectively subquery parts of the " "object and so queries don't have to pull out the whole object every time. " "Just because you *can* store all of Europe in one polygon doesn't mean you " "*should*." msgstr "" #. Tag: title #: using_postgis_dataman.xml:425 #, no-c-format msgid "Using OpenGIS Standards" msgstr "" #. Tag: para #: using_postgis_dataman.xml:427 #, no-c-format msgid "" "The OpenGIS \"Simple Features Specification for SQL\" defines standard GIS " "object types, the functions required to manipulate them, and a set of meta-" "data tables. In order to ensure that meta-data remain consistent, operations " "such as creating and removing a spatial column are carried out through " "special procedures defined by OpenGIS." msgstr "" #. Tag: para #: using_postgis_dataman.xml:433 #, no-c-format msgid "" "There are two OpenGIS meta-data tables: SPATIAL_REF_SYS " "and GEOMETRY_COLUMNS. The SPATIAL_REF_SYS table holds the numeric IDs and textual descriptions of coordinate " "systems used in the spatial database." msgstr "" #. Tag: title #: using_postgis_dataman.xml:440 #, no-c-format msgid "The SPATIAL_REF_SYS Table and Spatial Reference Systems" msgstr "" #. Tag: para #: using_postgis_dataman.xml:442 #, no-c-format msgid "" "The spatial_ref_sys table is a PostGIS included and OGC compliant database " "table that lists over 3000 known spatial reference systems and details needed to transform/reproject between them." msgstr "" #. Tag: para #: using_postgis_dataman.xml:446 #, no-c-format msgid "" "Although the PostGIS spatial_ref_sys table contains over 3000 of the more " "commonly used spatial reference system definitions that can be handled by " "the proj library, it does not contain all known to man and you can even " "define your own custom projection if you are familiar with proj4 constructs. " "Keep in mind that most spatial reference systems are regional and have no " "meaning when used outside of the bounds they were intended for." msgstr "" #. Tag: para #: using_postgis_dataman.xml:449 #, no-c-format msgid "" "An excellent resource for finding spatial reference systems not defined in " "the core set is http://" "spatialreference.org/" msgstr "" #. Tag: para #: using_postgis_dataman.xml:451 #, no-c-format msgid "" "Some of the more commonly used spatial reference systems are: 4326 - WGS 84 Long Lat, 4269 - NAD " "83 Long Lat, 3395 - WGS 84 World Mercator, 2163 - US National Atlas Equal Area, Spatial reference systems for each NAD 83, WGS 84 UTM zone - UTM " "zones are one of the most ideal for measurement, but only cover 6-degree " "regions." msgstr "" #. Tag: para #: using_postgis_dataman.xml:457 #, no-c-format msgid "" "Various US state plane spatial reference systems (meter or feet based) - " "usually one or 2 exists per US state. Most of the meter ones are in the core " "set, but many of the feet based ones or ESRI created ones you will need to " "pull from spatialreference.org." msgstr "" #. Tag: para #: using_postgis_dataman.xml:461 #, no-c-format msgid "" "For details on determining which UTM zone to use for your area of interest, " "check out the utmzone PostGIS plpgsql helper function." msgstr "" #. Tag: para #: using_postgis_dataman.xml:465 #, no-c-format msgid "The SPATIAL_REF_SYS table definition is as follows:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:468 #, no-c-format msgid "" "CREATE TABLE spatial_ref_sys (\n" " srid INTEGER NOT NULL PRIMARY KEY,\n" " auth_name VARCHAR(256),\n" " auth_srid INTEGER,\n" " srtext VARCHAR(2048),\n" " proj4text VARCHAR(2048)\n" ")" msgstr "" #. Tag: para #: using_postgis_dataman.xml:470 #, no-c-format msgid "The SPATIAL_REF_SYS columns are as follows:" msgstr "" #. Tag: ulink #: using_postgis_dataman.xml:475 #, no-c-format msgid "SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:478 #, no-c-format msgid "" "An integer value that uniquely identifies the Spatial Referencing System " "(SRS) within the database." msgstr "" #. Tag: term #: using_postgis_dataman.xml:484 #, no-c-format msgid "AUTH_NAME" msgstr "" #. Tag: para #: using_postgis_dataman.xml:487 #, no-c-format msgid "" "The name of the standard or standards body that is being cited for this " "reference system. For example, \"EPSG\" would be a valid AUTH_NAME." msgstr "" #. Tag: term #: using_postgis_dataman.xml:494 #, no-c-format msgid "AUTH_SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:497 #, no-c-format msgid "" "The ID of the Spatial Reference System as defined by the Authority cited in " "the AUTH_NAME. In the case of EPSG, this is where the " "EPSG projection code would go." msgstr "" #. Tag: term #: using_postgis_dataman.xml:504 #, no-c-format msgid "SRTEXT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:507 #, no-c-format msgid "" "The Well-Known Text representation of the Spatial Reference System. An " "example of a WKT SRS representation is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:510 #, no-c-format msgid "" "PROJCS[\"NAD83 / UTM Zone 10N\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101]\n" " ],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]\n" " ],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",-123],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1]\n" "]" msgstr "" #. Tag: para #: using_postgis_dataman.xml:512 #, no-c-format msgid "" "For a listing of EPSG projection codes and their corresponding WKT " "representations, see http://" "www.opengeospatial.org/. For a discussion of WKT in general, see the " "OpenGIS \"Coordinate Transformation Services Implementation Specification\" " "at http://www." "opengeospatial.org/standards. For information on the European " "Petroleum Survey Group (EPSG) and their database of spatial reference " "systems, see http://www.epsg.org." msgstr "" #. Tag: term #: using_postgis_dataman.xml:525 #, no-c-format msgid "PROJ4TEXT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:528 #, no-c-format msgid "" "PostGIS uses the Proj4 library to provide coordinate transformation " "capabilities. The PROJ4TEXT column contains the Proj4 " "coordinate definition string for a particular SRID. For example:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:533 #, no-c-format msgid "+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m" msgstr "" #. Tag: para #: using_postgis_dataman.xml:535 #, no-c-format msgid "" "For more information about, see the Proj4 web site at http://trac.osgeo.org/proj/. The " "spatial_ref_sys.sql file contains both SRTEXT and PROJ4TEXT definitions for all EPSG " "projections." msgstr "" #. Tag: title #: using_postgis_dataman.xml:546 #, no-c-format msgid "The GEOMETRY_COLUMNS VIEW" msgstr "" #. Tag: para #: using_postgis_dataman.xml:548 #, no-c-format msgid "" "In versions of PostGIS prior to 2.0.0, geometry_columns was a table that " "could be directly edited, and sometimes got out of synch with the actual " "definition of the geometry columns. In PostGIS 2.0.0, " "GEOMETRY_COLUMNS became a view with the same front-facing " "structure as prior versions, but reading from database system catalogs Its " "structure is as follows:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:552 #, no-c-format msgid "\\d geometry_columns" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:553 #, no-c-format msgid "" "View \"public.geometry_columns\"\n" " Column | Type | Modifiers\n" "-------------------+------------------------+-----------\n" " f_table_catalog | character varying(256) |\n" " f_table_schema | character varying(256) |\n" " f_table_name | character varying(256) |\n" " f_geometry_column | character varying(256) |\n" " coord_dimension | integer |\n" " srid | integer |\n" " type | character varying(30) |" msgstr "" #. Tag: para #: using_postgis_dataman.xml:555 #, no-c-format msgid "The column meanings have not changed from prior versions and are:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:559 #, no-c-format msgid "F_TABLE_CATALOG, F_TABLE_SCHEMA, F_TABLE_NAME" msgstr "" #. Tag: para #: using_postgis_dataman.xml:562 #, no-c-format msgid "" "The fully qualified name of the feature table containing the geometry " "column. Note that the terms \"catalog\" and \"schema\" are Oracle-ish. There " "is not PostgreSQL analogue of \"catalog\" so that column is left blank -- " "for \"schema\" the PostgreSQL schema name is used (public " "is the default)." msgstr "" #. Tag: term #: using_postgis_dataman.xml:571 #, no-c-format msgid "F_GEOMETRY_COLUMN" msgstr "" #. Tag: para #: using_postgis_dataman.xml:574 #, no-c-format msgid "The name of the geometry column in the feature table." msgstr "" #. Tag: term #: using_postgis_dataman.xml:579 #, no-c-format msgid "COORD_DIMENSION" msgstr "" #. Tag: para #: using_postgis_dataman.xml:582 #, no-c-format msgid "The spatial dimension (2, 3 or 4 dimensional) of the column." msgstr "" #. Tag: term #: using_postgis_dataman.xml:588 #, no-c-format msgid "SRID" msgstr "" #. Tag: para #: using_postgis_dataman.xml:591 #, no-c-format msgid "" "The ID of the spatial reference system used for the coordinate geometry in " "this table. It is a foreign key reference to the SPATIAL_REF_SYS." msgstr "" #. Tag: term #: using_postgis_dataman.xml:598 #, no-c-format msgid "TYPE" msgstr "" #. Tag: para #: using_postgis_dataman.xml:601 #, no-c-format msgid "" "The type of the spatial object. To restrict the spatial column to a single " "type, use one of: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, " "MULTIPOLYGON, GEOMETRYCOLLECTION or corresponding XYM versions POINTM, " "LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, " "GEOMETRYCOLLECTIONM. For heterogeneous (mixed-type) collections, you can use " "\"GEOMETRY\" as the type." msgstr "" #. Tag: para #: using_postgis_dataman.xml:610 #, no-c-format msgid "" "This attribute is (probably) not part of the OpenGIS specification, but is " "required for ensuring type homogeneity." msgstr "" #. Tag: title #: using_postgis_dataman.xml:620 #, no-c-format msgid "Creating a Spatial Table" msgstr "" #. Tag: para #: using_postgis_dataman.xml:622 #, no-c-format msgid "" "Creating a table with spatial data, can be done in one step. As shown in the " "following example which creates a roads table with a 2D linestring geometry " "column in WGS84 long lat" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:624 #, no-c-format msgid "" "CREATE TABLE ROADS ( ID int4\n" " , ROAD_NAME varchar(25), geom geometry(LINESTRING,4326) );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:626 #, no-c-format msgid "" "We can add additional columns using standard ALTER TABLE command as we do in " "this next example where we add a 3-D linestring." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:627 #, no-c-format msgid "ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ,4326);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:629 #, no-c-format msgid "" "For backwards compability, you can still create a spatial table in two " "stages using the management functions." msgstr "" #. Tag: para #: using_postgis_dataman.xml:633 #, no-c-format msgid "Create a normal non-spatial table." msgstr "" #. Tag: para #: using_postgis_dataman.xml:635 #, no-c-format msgid "" "For example: CREATE TABLE ROADS ( ID int4, ROAD_NAME varchar(25) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:640 #, no-c-format msgid "" "Add a spatial column to the table using the OpenGIS \"AddGeometryColumn\" " "function. Refer to for more details." msgstr "" #. Tag: para #: using_postgis_dataman.xml:643 #, no-c-format msgid "" "The syntax is: AddGeometryColumn(\n" " <schema_name>,\n" " <table_name>,\n" " <column_name>,\n" " <srid>,\n" " <type>,\n" " <dimension>\n" ") Or, using current schema:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:643 #, no-c-format msgid "" "AddGeometryColumn(\n" " <table_name>,\n" " <column_name>,\n" " <srid>,\n" " <type>,\n" " <dimension>\n" ")" msgstr "" #. Tag: para #: using_postgis_dataman.xml:645 #, no-c-format msgid "" "Example1: SELECT AddGeometryColumn('public', 'roads', 'geom', 423, " "'LINESTRING', 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:648 #, no-c-format msgid "" "Example2: SELECT AddGeometryColumn( 'roads', 'geom', 423, " "'LINESTRING', 2)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:653 #, no-c-format msgid "" "Here is an example of SQL used to create a table and add a spatial column " "(assuming that an SRID of 128 exists already):" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:656 #, no-c-format msgid "" "CREATE TABLE parks (\n" " park_id INTEGER,\n" " park_name VARCHAR,\n" " park_date DATE,\n" " park_type VARCHAR\n" ");\n" "SELECT AddGeometryColumn('parks', 'park_geom', 128, 'MULTIPOLYGON', 2 );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:658 #, no-c-format msgid "" "Here is another example, using the generic \"geometry\" type and the " "undefined SRID value of 0:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:661 #, no-c-format msgid "" "CREATE TABLE roads (\n" " road_id INTEGER,\n" " road_name VARCHAR\n" ");\n" "SELECT AddGeometryColumn( 'roads', 'roads_geom', 0, 'GEOMETRY', 3 );" msgstr "" #. Tag: title #: using_postgis_dataman.xml:665 #, no-c-format msgid "Manually Registering Geometry Columns in geometry_columns" msgstr "" #. Tag: para #: using_postgis_dataman.xml:666 #, no-c-format msgid "" "The AddGeometryColumn() approach creates a geometry column and also " "registers the new column in the geometry_columns table. If your software " "utilizes geometry_columns, then any geometry columns you need to query by " "must be registered in this view. Starting with PoastGIS 2.0, " "geometry_columns is no longer editable and all geometry columns are " "autoregistered." msgstr "" #. Tag: para #: using_postgis_dataman.xml:670 #, no-c-format msgid "" "However they may be registered as a generic geometry column if the column " "was not defined as a specific type during creation." msgstr "" #. Tag: para #: using_postgis_dataman.xml:672 #, no-c-format msgid "" "Two of the cases where this may happen, but you can't use AddGeometryColumn, " "is in the case of SQL Views and bulk inserts. For these cases, you can " "correct the registration in the geometry_columns table by constraining the " "column. Note in PostGIS 2.0+ if your column is typmod based, the creation " "process would register it correctly, so no need to do anything." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:677 #, no-c-format msgid "" "--Lets say you have a view created like this\n" "CREATE VIEW public.vwmytablemercator AS\n" " SELECT gid, ST_Transform(geom,3395) As geom, f_name\n" " FROM public.mytable;\n" " \n" "-- For it to register correctly in PostGIS 2.0+ \n" "-- You need to cast the geometry\n" "--\n" "DROP VIEW public.vwmytablemercator;\n" "CREATE VIEW public.vwmytablemercator AS\n" " SELECT gid, ST_Transform(geom,3395)::geometry(Geometry, 3395) As " "geom, f_name\n" " FROM public.mytable;\n" " \n" "-- If you know the geometry type for sure is a 2D POLYGON then you could do\n" "DROP VIEW public.vwmytablemercator;\n" "CREATE VIEW public.vwmytablemercator AS\n" " SELECT gid, ST_Transform(geom,3395)::geometry(Polygon, 3395) As " "geom, f_name\n" " FROM public.mytable;" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:678 #, no-c-format msgid "" "--Lets say you created a derivative table by doing a bulk insert\n" "SELECT poi.gid, poi.geom, citybounds.city_name\n" "INTO myschema.my_special_pois\n" "FROM poi INNER JOIN citybounds ON ST_Intersects(citybounds.geom, poi.geom);\n" "\n" "--Create 2d index on new table\n" "CREATE INDEX idx_myschema_myspecialpois_geom_gist\n" " ON myschema.my_special_pois USING gist(geom);\n" " \n" "-- If your points are 3D points or 3M points, \n" "-- then you might want to create an nd index instead of a 2d index\n" "-- like so\n" "CREATE INDEX my_special_pois_geom_gist_nd \n" " ON my_special_pois USING gist(geom gist_geometry_ops_nd);\n" "\n" "--To manually register this new table's geometry column in geometry_columns\n" "-- Note that this approach will work for both PostGIS 2.0+ and PostGIS 1.4+\n" "-- For PostGIS 2.0 it will also change the underlying structure of the table " "to\n" "-- to make the column typmod based.\n" "-- For PostGIS prior to 2.0, this technique can also be used to register " "views\n" "SELECT populate_geometry_columns('myschema.my_special_pois'::regclass); \n" "\n" "--If you are using PostGIS 2.0 and for whatever reason, you\n" "-- you need the old constraint based definition behavior \n" "-- (such as case of inherited tables where all children do not have the same " "type and srid)\n" "-- set new optional use_typmod argument to false\n" "SELECT populate_geometry_columns('myschema.my_special_pois'::regclass, " "false);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:680 #, no-c-format msgid "" "Although the old-constraint based method is still supported, a constraint-" "based geomentry column used directly in a view, will not register correctly " "in geometry_columns, as will a typmod one. In this example we define a " "column using typmod and another using constraints." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:683 #, no-c-format msgid "" "CREATE TABLE pois_ny(gid SERIAL PRIMARY KEY\n" " , poi_name text, cat varchar(20)\n" " , geom geometry(POINT,4326) );\n" "SELECT AddGeometryColumn('pois_ny', 'geom_2160', 2160, 'POINT', 2, false);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:684 #, no-c-format msgid "If we run in psql" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:685 #, no-c-format msgid "\\d pois_ny;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:686 #, no-c-format msgid "" "We observe they are defined differently -- one is typmod, one is constraint" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:687 #, no-c-format msgid "" "Table \"public.pois_ny\"\n" " Column | Type | Modifiers\n" "\n" "-----------+-----------------------" "+------------------------------------------------------\n" " gid | integer | not null default nextval" "('pois_ny_gid_seq'::regclass)\n" " poi_name | text |\n" " cat | character varying(20) |\n" " geom | geometry(Point,4326) |\n" " geom_2160 | geometry |\n" "Indexes:\n" " \"pois_ny_pkey\" PRIMARY KEY, btree (gid)\n" "Check constraints:\n" " \"enforce_dims_geom_2160\" CHECK (st_ndims(geom_2160) = 2)\n" " \"enforce_geotype_geom_2160\" CHECK (geometrytype(geom_2160) = 'POINT'::" "text \n" " OR geom_2160 IS NULL)\n" " \"enforce_srid_geom_2160\" CHECK (st_srid(geom_2160) = 2160)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:688 #, no-c-format msgid "In geometry_columns, they both register correctly" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:689 #, no-c-format msgid "" "SELECT f_table_name, f_geometry_column, srid, type \n" " FROM geometry_columns \n" " WHERE f_table_name = 'pois_ny';" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:690 #, no-c-format msgid "" "f_table_name | f_geometry_column | srid | type\n" "-------------+-------------------+------+-------\n" "pois_ny | geom | 4326 | POINT\n" "pois_ny | geom_2160 | 2160 | POINT" msgstr "" #. Tag: para #: using_postgis_dataman.xml:691 #, no-c-format msgid "However -- if we were to create a view like this" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:692 #, no-c-format msgid "" "CREATE VIEW vw_pois_ny_parks AS \n" "SELECT * \n" " FROM pois_ny \n" " WHERE cat='park';\n" " \n" "SELECT f_table_name, f_geometry_column, srid, type \n" " FROM geometry_columns \n" " WHERE f_table_name = 'vw_pois_ny_parks';" msgstr "" #. Tag: para #: using_postgis_dataman.xml:693 #, no-c-format msgid "" "The typmod based geom view column registers correctly, but the constraint " "based one does not." msgstr "" #. Tag: screen #: using_postgis_dataman.xml:695 #, no-c-format msgid "" "f_table_name | f_geometry_column | srid | type\n" "------------------+-------------------+------+----------\n" " vw_pois_ny_parks | geom | 4326 | POINT\n" " vw_pois_ny_parks | geom_2160 | 0 | GEOMETRY" msgstr "" #. Tag: para #: using_postgis_dataman.xml:697 #, no-c-format msgid "" "This may change in future versions of PostGIS, but for now To force the " "constraint based view column to register correctly, we need to do this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:699 #, no-c-format msgid "" "DROP VIEW vw_pois_ny_parks;\n" "CREATE VIEW vw_pois_ny_parks AS \n" "SELECT gid, poi_name, cat\n" " , geom\n" " , geom_2160::geometry(POINT,2160) As geom_2160 \n" " FROM pois_ny \n" " WHERE cat='park';\n" "SELECT f_table_name, f_geometry_column, srid, type \n" " FROM geometry_columns \n" " WHERE f_table_name = 'vw_pois_ny_parks';" msgstr "" #. Tag: screen #: using_postgis_dataman.xml:700 #, no-c-format msgid "" "f_table_name | f_geometry_column | srid | type\n" "------------------+-------------------+------+-------\n" " vw_pois_ny_parks | geom | 4326 | POINT\n" " vw_pois_ny_parks | geom_2160 | 2160 | POINT" msgstr "" #. Tag: title #: using_postgis_dataman.xml:704 #, no-c-format msgid "Ensuring OpenGIS compliancy of geometries" msgstr "" #. Tag: para #: using_postgis_dataman.xml:706 #, no-c-format msgid "" "PostGIS is compliant with the Open Geospatial Consortium’s (OGC) OpenGIS " "Specifications. As such, many PostGIS methods require, or more accurately, " "assume that geometries that are operated on are both simple and valid. For " "example, it does not make sense to calculate the area of a polygon that has " "a hole defined outside of the polygon, or to construct a polygon from a non-" "simple boundary line." msgstr "" #. Tag: para #: using_postgis_dataman.xml:713 #, no-c-format msgid "" "According to the OGC Specifications, a simple geometry " "is one that has no anomalous geometric points, such as self intersection or " "self tangency and primarily refers to 0 or 1-dimensional geometries (i.e. " "[MULTI]POINT, [MULTI]LINESTRING). Geometry validity, on " "the other hand, primarily refers to 2-dimensional geometries (i.e. " "[MULTI]POLYGON) and defines the set of assertions that " "characterizes a valid polygon. The description of each geometric class " "includes specific conditions that further detail geometric simplicity and " "validity." msgstr "" #. Tag: para #: using_postgis_dataman.xml:723 #, no-c-format msgid "" "A POINT is inheritably simple as a 0-" "dimensional geometry object." msgstr "" #. Tag: para #: using_postgis_dataman.xml:726 #, no-c-format msgid "" "MULTIPOINTs are simple if no two " "coordinates (POINTs) are equal (have identical coordinate " "values)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:730 #, no-c-format msgid "" "A LINESTRING is simple if it does " "not pass through the same POINT twice (except for the " "endpoints, in which case it is referred to as a linear ring and additionally " "considered closed)." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:745 #, no-c-format msgid "(a)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:755 #, no-c-format msgid "(b)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:767 #, no-c-format msgid "(c)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:777 #, no-c-format msgid "(d)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:787 #, no-c-format msgid "" "(a) and (c) are simple LINESTRINGs, " "(b) and (d) are not." msgstr "" #. Tag: para #: using_postgis_dataman.xml:796 #, no-c-format msgid "" "A MULTILINESTRING is simple only if " "all of its elements are simple and the only intersection between any two " "elements occurs at POINTs that are on the boundaries of " "both elements." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:811 #, no-c-format msgid "(e)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:821 #, no-c-format msgid "(f)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:831 #, no-c-format msgid "(g)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:841 #, no-c-format msgid "" "(e) and (f) are simple MULTILINESTRINGs, (g) is not." msgstr "" #. Tag: para #: using_postgis_dataman.xml:850 #, no-c-format msgid "" "By definition, a POLYGON is always simple. It is valid if no two rings in the boundary " "(made up of an exterior ring and interior rings) cross. The boundary of a " "POLYGON may intersect at a POINT but " "only as a tangent (i.e. not on a line). A POLYGON may not " "have cut lines or spikes and the interior rings must be contained entirely " "within the exterior ring." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:868 #, no-c-format msgid "(h)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:878 #, no-c-format msgid "(i)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:888 #, no-c-format msgid "(j)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:900 #, no-c-format msgid "(k)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:910 #, no-c-format msgid "(l)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:920 #, no-c-format msgid "(m)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:929 #, no-c-format msgid "" "(h) and (i) are valid POLYGONs, (j-" "m) cannot be represented as single POLYGONs, " "but (j) and (m) could be represented as a valid MULTIPOLYGON." msgstr "" #. Tag: para #: using_postgis_dataman.xml:941 #, no-c-format msgid "" "A MULTIPOLYGON is valid if and only " "if all of its elements are valid and the interiors of no two elements " "intersect. The boundaries of any two elements may touch, but only at a " "finite number of POINTs." msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:956 #, no-c-format msgid "(n)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:966 #, no-c-format msgid "(o)" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:976 #, no-c-format msgid "(p)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:985 #, no-c-format msgid "" "(n) and (o) are not valid MULTIPOLYGONs. (p), however, is valid." msgstr "" #. Tag: para #: using_postgis_dataman.xml:994 #, no-c-format msgid "" "Most of the functions implemented by the GEOS library rely on the assumption " "that your geometries are valid as specified by the OpenGIS Simple Feature " "Specification. To check simplicity or validity of geometries you can use the " "ST_IsSimple() and ST_IsValid()" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1000 #, no-c-format msgid "" "-- Typically, it doesn't make sense to check\n" "-- for validity on linear features since it will always return TRUE.\n" "-- But in this example, PostGIS extends the definition of the OGC IsValid\n" "-- by returning false if a LineString has less than 2 *distinct* vertices.\n" "gisdb=# SELECT\n" " ST_IsValid('LINESTRING(0 0, 1 1)'),\n" " ST_IsValid('LINESTRING(0 0, 0 0, 0 0)');\n" "\n" " st_isvalid | st_isvalid\n" "------------+-----------\n" " t | f" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1002 #, no-c-format msgid "" "By default, PostGIS does not apply this validity check on geometry input, " "because testing for validity needs lots of CPU time for complex geometries, " "especially polygons. If you do not trust your data sources, you can manually " "enforce such a check to your tables by adding a check constraint:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1008 #, no-c-format msgid "" "ALTER TABLE mytable\n" " ADD CONSTRAINT geometry_valid_check\n" " CHECK (ST_IsValid(the_geom));" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1010 #, no-c-format msgid "" "If you encounter any strange error messages such as \"GEOS Intersection() " "threw an error!\" or \"JTS Intersection() threw an error!\" when calling " "PostGIS functions with valid input geometries, you likely found an error in " "either PostGIS or one of the libraries it uses, and you should contact the " "PostGIS developers. The same is true if a PostGIS function returns an " "invalid geometry for valid input." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1018 #, no-c-format msgid "" "Strictly compliant OGC geometries cannot have Z or M values. The ST_IsValid() function won't consider higher " "dimensioned geometries invalid! Invocations of AddGeometryColumn() will add a constraint " "checking geometry dimensions, so it is enough to specify 2 there." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1028 #, no-c-format msgid "Dimensionally Extended 9 Intersection Model (DE-9IM)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1030 #, no-c-format msgid "" "It is sometimes the case that the typical spatial predicates (, , , , ...) are insufficient " "in and of themselves to adequately provide that desired spatial filter." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1042 #, no-c-format msgid "" "For example, consider a linear dataset representing a road network. It may " "be the task of a GIS analyst to identify all road segments that cross each " "other, not at a point, but on a line, perhaps invalidating some business " "rule. In this case, does not adequately " "provide the necessary spatial filter since, for linear features, it returns " "true only where they cross at a point." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1049 #, no-c-format msgid "" "One two-step solution might be to first perform the actual intersection " "() of pairs of road segments that " "spatially intersect (), and then compare " "the intersection's with " "'LINESTRING' (properly dealing with cases that return " "GEOMETRYCOLLECTIONs of [MULTI]POINTs, " "[MULTI]LINESTRINGs, etc.)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1057 #, no-c-format msgid "A more elegant / faster solution may indeed be desirable." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1071 #, no-c-format msgid "" "A second [theoretical] example may be that of a GIS analyst trying to locate " "all wharfs or docks that intersect a lake's boundary on a line and where " "only one end of the wharf is up on shore. In other words, where a wharf is " "within, but not completely within a lake, intersecting the boundary of a " "lake on a line, and where the wharf's endpoints are both completely within " "and on the boundary of the lake. The analyst may need to use a combination " "of spatial predicates to isolate the sought after features:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1082 #, no-c-format msgid "(lake, wharf) = TRUE" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1086 #, no-c-format msgid "(lake, wharf) = FALSE" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1090 #, no-c-format msgid "((wharf, lake)) = 'LINESTRING'" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1095 #, no-c-format msgid "" "((((wharf), (lake)))) = " "1" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1098 #, no-c-format msgid "... (needless to say, this could get quite complicated)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1107 #, no-c-format msgid "" "So enters the Dimensionally Extended 9 Intersection Model, or DE-9IM for " "short." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1111 #, no-c-format msgid "Theory" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1113 #, no-c-format msgid "" "According to the OpenGIS Simple Features Implementation Specification for SQL, " "\"the basic approach to comparing two geometries is to make pair-wise tests " "of the intersections between the Interiors, Boundaries and Exteriors of the " "two geometries and to classify the relationship between the two geometries " "based on the entries in the resulting 'intersection' matrix.\"" msgstr "" #. Tag: glossterm #: using_postgis_dataman.xml:1124 #, no-c-format msgid "Boundary" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1127 #, no-c-format msgid "" "The boundary of a geometry is the set of geometries of the next lower " "dimension. For POINTs, which have a dimension of 0, the " "boundary is the empty set. The boundary of a LINESTRING " "are the two endpoints. For POLYGONs, the boundary is the " "linework that make up the exterior and interior rings." msgstr "" #. Tag: glossterm #: using_postgis_dataman.xml:1138 #, no-c-format msgid "Interior" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1141 #, no-c-format msgid "" "The interior of a geometry are those points of a geometry that are left when " "the boundary is removed. For POINTs, the interior is the " "POINT itself. The interior of a LINESTRING are the set of real points between the endpoints. For " "POLYGONs, the interior is the areal surface inside the " "polygon." msgstr "" #. Tag: glossterm #: using_postgis_dataman.xml:1152 #, no-c-format msgid "Exterior" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1155 #, no-c-format msgid "" "The exterior of a geometry is the universe, an areal surface, not on the " "interior or boundary of the geometry." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1162 #, no-c-format msgid "" "Given geometry a, where the I(a), " "B(a), and E(a) are the " "Interior, Boundary, and " "Exterior of a, the mathematical representation of the " "matrix is:" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:1174 using_postgis_dataman.xml:1184 #: using_postgis_dataman.xml:1377 using_postgis_dataman.xml:1390 #, no-c-format msgid "Interior" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:1176 using_postgis_dataman.xml:1227 #: using_postgis_dataman.xml:1380 using_postgis_dataman.xml:1413 #, no-c-format msgid "Boundary" msgstr "" #. Tag: emphasis #: using_postgis_dataman.xml:1178 using_postgis_dataman.xml:1270 #: using_postgis_dataman.xml:1383 using_postgis_dataman.xml:1436 #, no-c-format msgid "Exterior" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1188 #, no-c-format msgid "" "dim( I(a) ∩ " "I(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1201 #, no-c-format msgid "" "dim( I(a) ∩ " "B(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1214 #, no-c-format msgid "" "dim( I(a) ∩ " "E(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1231 #, no-c-format msgid "" "dim( B(a) ∩ " "I(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1244 #, no-c-format msgid "" "dim( B(a) ∩ " "B(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1257 #, no-c-format msgid "" "dim( B(a) ∩ " "E(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1274 #, no-c-format msgid "" "dim( E(a) ∩ " "I(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1287 #, no-c-format msgid "" "dim( E(a) ∩ " "B(b) )" msgstr "" #. Tag: mml:mrow #: using_postgis_dataman.xml:1300 #, no-c-format msgid "" "dim( E(a) ∩ " "E(b) )" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1315 #, no-c-format msgid "" "Where dim(a) is the dimension of a " "as specified by but has the domain of " "{0,1,2,T,F,*}" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1322 #, no-c-format msgid "0 => point" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1326 #, no-c-format msgid "1 => line" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1330 #, no-c-format msgid "2 => area" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1334 #, no-c-format msgid "T => {0,1,2}" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1339 #, no-c-format msgid "F => empty set" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1343 #, no-c-format msgid "* => don't care" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1347 #, no-c-format msgid "Visually, for two overlapping polygonal geometries, this looks like:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1394 using_postgis_dataman.xml:1406 #: using_postgis_dataman.xml:1440 using_postgis_dataman.xml:1452 #, no-c-format msgid "dim(...) = 2" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1400 using_postgis_dataman.xml:1417 #: using_postgis_dataman.xml:1429 using_postgis_dataman.xml:1446 #, no-c-format msgid "dim(...) = 1" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1423 #, no-c-format msgid "dim(...) = 0" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1464 #, no-c-format msgid "" "Read from left to right and from top to bottom, the dimensional matrix is " "represented, '212101212'." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1467 #, no-c-format msgid "" "A relate matrix that would therefore represent our first example of two " "lines that intersect on a line would be: '1*1***1**'" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1471 #, no-c-format msgid "" "-- Identify road segments that cross on a line\n" "SELECT a.id\n" "FROM roads a, roads b\n" "WHERE a.id != b.id \n" "AND a.geom && b.geom\n" "AND ST_Relate(a.geom, b.geom, '1*1***1**');" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1473 #, no-c-format msgid "" "A relate matrix that represents the second example of wharfs partly on the " "lake's shoreline would be '102101FF2'" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1477 #, no-c-format msgid "" "-- Identify wharfs partly on a lake's shoreline\n" "SELECT a.lake_id, b.wharf_id\n" "FROM lakes a, wharfs b\n" "WHERE a.geom && b.geom\n" "AND ST_Relate(a.geom, b.geom, '102101FF2');" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1479 #, no-c-format msgid "For more information or reading, see:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1483 #, no-c-format msgid "" "OpenGIS Simple " "Features Implementation Specification for SQL (version 1.1, section " "2.1.13.2)" msgstr "" #. Tag: ulink #: using_postgis_dataman.xml:1488 #, no-c-format msgid "" "Dimensionally Extended Nine-Intersection Model (DE-9IM) by Christian Strobl" msgstr "" #. Tag: ulink #: using_postgis_dataman.xml:1492 #, no-c-format msgid "GeoTools: Point Set Theory and the DE-9IM Matrix" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1495 #, no-c-format msgid "Encyclopedia of GIS By Hui Xiong" msgstr "" #. Tag: title #: using_postgis_dataman.xml:1505 #, no-c-format msgid "Loading GIS Data" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1507 #, no-c-format msgid "" "Once you have created a spatial table, you are ready to upload GIS data to " "the database. Currently, there are two ways to get data into a PostGIS/" "PostgreSQL database: using formatted SQL statements or using the Shape file " "loader/dumper." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1513 using_postgis_dataman.xml:1789 #, no-c-format msgid "Using SQL" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1515 #, no-c-format msgid "" "If you can convert your data to a text representation, then using formatted " "SQL might be the easiest way to get your data into PostGIS. As with Oracle " "and other SQL databases, data can be bulk loaded by piping a large text file " "full of SQL \"INSERT\" statements into the SQL terminal monitor." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1521 #, no-c-format msgid "" "A data upload file (roads.sql for example) might look " "like this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1524 #, no-c-format msgid "" "BEGIN;\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (1,ST_GeomFromText('LINESTRING(191232 243118,191108 " "243242)',-1),'Jeff Rd');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (2,ST_GeomFromText('LINESTRING(189141 244158,189265 " "244817)',-1),'Geordie Rd');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (3,ST_GeomFromText('LINESTRING(192783 228138,192612 " "229814)',-1),'Paul St');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (4,ST_GeomFromText('LINESTRING(189412 252431,189631 " "259122)',-1),'Graeme Ave');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (5,ST_GeomFromText('LINESTRING(190131 224148,190871 " "228134)',-1),'Phil Tce');\n" "INSERT INTO roads (road_id, roads_geom, road_name)\n" " VALUES (6,ST_GeomFromText('LINESTRING(198231 263418,198213 " "268322)',-1),'Dave Cres');\n" "COMMIT;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1526 #, no-c-format msgid "" "The data file can be piped into PostgreSQL very easily using the \"psql\" " "SQL terminal monitor:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1529 #, no-c-format msgid "psql -d [database] -f roads.sql" msgstr "" #. Tag: title #: using_postgis_dataman.xml:1533 #, no-c-format msgid "Using the Loader" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1535 #, no-c-format msgid "" "The shp2pgsql data loader converts ESRI Shape files " "into SQL suitable for insertion into a PostGIS/PostgreSQL database either in " "geometry or geography format. The loader has several operating modes " "distinguished by command line flags:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1540 #, no-c-format msgid "" "In addition to the shp2pgsql command-line loader, there is an " "shp2pgsql-gui graphical interface with most of the " "options as the command-line loader, but may be easier to use for one-off non-" "scripted loading or if you are new to PostGIS. It can also be configured as " "a plugin to PgAdminIII." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1547 #, no-c-format msgid "(c|a|d|p) These are mutually exclusive options:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1552 #, no-c-format msgid "-c" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1554 #, no-c-format msgid "" "Creates a new table and populates it from the shapefile. This is " "the default mode." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1562 #, no-c-format msgid "-a" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1564 #, no-c-format msgid "" "Appends data from the Shape file into the database table. Note that to use " "this option to load multiple files, the files must have the same attributes " "and same data types." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1573 using_postgis_dataman.xml:1948 #, no-c-format msgid "-d" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1575 #, no-c-format msgid "" "Drops the database table before creating a new table with the data in the " "Shape file." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1583 #, no-c-format msgid "-p" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1585 #, no-c-format msgid "" "Only produces the table creation SQL code, without adding any actual data. " "This can be used if you need to completely separate the table creation and " "data loading steps." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1598 #, no-c-format msgid "-?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1600 #, no-c-format msgid "Display help screen." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1607 #, no-c-format msgid "-D" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1609 #, no-c-format msgid "" "Use the PostgreSQL \"dump\" format for the output data. This can be combined " "with -a, -c and -d. It is much faster to load than the default \"insert\" " "SQL format. Use this for very large data sets." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1618 #, no-c-format msgid "-s [<FROM_SRID%gt;:]<SRID>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1620 #, no-c-format msgid "" "Creates and populates the geometry tables with the specified SRID. " "Optionally specifies that the input shapefile uses the given FROM_SRID, in " "which case the geometries will be reprojected to the target SRID. FROM_SRID " "cannot be specified with -D." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1631 #, no-c-format msgid "-k" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1633 #, no-c-format msgid "" "Keep identifiers' case (column, schema and attributes). Note that attributes " "in Shapefile are all UPPERCASE." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1641 #, no-c-format msgid "-i" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1643 #, no-c-format msgid "" "Coerce all integers to standard 32-bit integers, do not create 64-bit " "bigints, even if the DBF header signature appears to warrant it." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1651 #, no-c-format msgid "-I" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1653 #, no-c-format msgid "Create a GiST index on the geometry column." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1659 #, no-c-format msgid "-S" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1661 #, no-c-format msgid "" "Generate simple geometries instead of MULTI geometries. Will only succeed if " "all the geometries are actually single (I.E. a MULTIPOLYGON with a single " "shell, or or a MULTIPOINT with a single vertex)." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1670 #, no-c-format msgid "-t <dimensionality>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1672 #, no-c-format msgid "" "Force the output geometry to have the specified dimensionality. Use the " "following strings to indicate the dimensionality: 2D, 3DZ, 3DM, 4D." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1676 #, no-c-format msgid "" "If the input has fewer dimensions that specified, the output will have those " "dimensions filled in with zeroes. If the input has more dimensions that " "specified, the unwanted dimensions will be stripped." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1685 #, no-c-format msgid "-w" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1687 #, no-c-format msgid "" "Output WKT format, instead of WKB. Note that this can introduce coordinate " "drifts due to loss of precision." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1695 #, no-c-format msgid "-e" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1697 #, no-c-format msgid "" "Execute each statement on its own, without using a transaction. This allows " "loading of the majority of good data when there are some bad geometries that " "generate errors. Note that this cannot be used with the -D flag as the \"dump" "\" format always uses a transaction." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1707 #, no-c-format msgid "-W <encoding>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1709 #, no-c-format msgid "" "Specify encoding of the input data (dbf file). When used, all attributes of " "the dbf are converted from the specified encoding to UTF8. The resulting SQL " "output will contain a SET CLIENT_ENCODING to UTF8 command, so " "that the backend will be able to reconvert from UTF8 to whatever encoding " "the database is configured to use internally." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1719 #, no-c-format msgid "-N <policy>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1721 #, no-c-format msgid "NULL geometries handling policy (insert*,skip,abort)" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1727 #, no-c-format msgid "-n" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1729 #, no-c-format msgid "" "-n Only import DBF file. If your data has no corresponding shapefile, it " "will automatically switch to this mode and load just the dbf. So setting " "this flag is only needed if you have a full shapefile set, and you only want " "the attribute data and no geometry." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1737 #, no-c-format msgid "-G" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1739 #, no-c-format msgid "" "Use geography type instead of geometry (requires lon/lat data) in WGS84 long " "lat (SRID=4326)" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1745 #, no-c-format msgid "-T <tablespace>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1747 #, no-c-format msgid "" "Specify the tablespace for the new table. Indexes will still use the default " "tablespace unless the -X parameter is also used. The PostgreSQL " "documentation has a good description on when to use custom tablespaces." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1755 #, no-c-format msgid "-X <tablespace>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1757 #, no-c-format msgid "" "Specify the tablespace for the new table's indexes. This applies to the " "primary key index, and the GIST spatial index if -I is also used." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1765 #, no-c-format msgid "" "An example session using the loader to create an input file and uploading it " "might look like this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1770 #, no-c-format msgid "" "# shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > " "roads.sql\n" "# psql -d roadsdb -f roads.sql" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1772 #, no-c-format msgid "A conversion and upload can be done all in one step using UNIX pipes:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1776 #, no-c-format msgid "# shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb" msgstr "" #. Tag: title #: using_postgis_dataman.xml:1781 #, no-c-format msgid "Retrieving GIS Data" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1783 #, no-c-format msgid "" "Data can be extracted from the database using either SQL or the Shape file " "loader/dumper. In the section on SQL we will discuss some of the operators " "available to do comparisons and queries on spatial tables." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1791 #, no-c-format msgid "" "The most straightforward means of pulling data out of the database is to use " "a SQL select query to reduce the number of RECORDS and COLUMNS returned and " "dump the resulting columns into a parsable text file:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1796 #, no-c-format msgid "" "db=# SELECT road_id, ST_AsText(road_geom) AS geom, road_name FROM roads;\n" "\n" "road_id | geom | road_name\n" "--------+-----------------------------------------+-----------\n" " 1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd\n" " 2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd\n" " 3 | LINESTRING(192783 228138,192612 229814) | Paul St\n" " 4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave\n" " 5 | LINESTRING(190131 224148,190871 228134) | Phil Tce\n" " 6 | LINESTRING(198231 263418,198213 268322) | Dave Cres\n" " 7 | LINESTRING(218421 284121,224123 241231) | Chris Way\n" "(6 rows)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1798 #, no-c-format msgid "" "However, there will be times when some kind of restriction is necessary to " "cut down the number of fields returned. In the case of attribute-based " "restrictions, just use the same SQL syntax as normal with a non-spatial " "table. In the case of spatial restrictions, the following operators are " "available/useful:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1806 #, no-c-format msgid "&&" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1809 #, no-c-format msgid "" "This operator tells whether the bounding box of one geometry intersects the " "bounding box of another." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1815 #, no-c-format msgid "ST_OrderingEquals" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1818 #, no-c-format msgid "" "This tests whether two geometries are geometrically identical. For example, " "if 'POLYGON((0 0,1 1,1 0,0 0))' is the same as 'POLYGON((0 0,1 1,1 0,0 " "0))' (it is)." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1825 #, no-c-format msgid "=" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1828 #, no-c-format msgid "" "This operator is a little more naive, it only tests whether the bounding " "boxes of two geometries are the same." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1834 #, no-c-format msgid "" "Next, you can use these operators in queries. Note that when specifying " "geometries and boxes on the SQL command line, you must explicitly turn the " "string representations into geometries by using the \"ST_GeomFromText()\" " "function. The 312 is a fictitious spatial reference system that matches our " "data. So, for example:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1840 #, no-c-format msgid "" "SELECT road_id, road_name\n" " FROM roads\n" " WHERE ST_OrderingEquals(roads_geom , ST_GeomFromText('LINESTRING(191232 " "243118,191108 243242)',312) ) ;" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1842 #, no-c-format msgid "" "The above query would return the single record from the \"ROADS_GEOM\" table " "in which the geometry was equal to that value." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1845 #, no-c-format msgid "" "When using the \"&&\" operator, you can specify either a BOX3D as " "the comparison feature or a GEOMETRY. When you specify a GEOMETRY, however, " "its bounding box will be used for the comparison." msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1850 #, no-c-format msgid "" "SELECT road_id, road_name\n" "FROM roads\n" "WHERE roads_geom && ST_GeomFromText('POLYGON((...))',312);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1852 #, no-c-format msgid "" "The above query will use the bounding box of the polygon for comparison " "purposes." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1855 #, no-c-format msgid "" "The most common spatial query will probably be a \"frame-based\" query, used " "by client software, like data browsers and web mappers, to grab a \"map frame" "\" worth of data for display. Using a \"BOX3D\" object for the frame, such a " "query looks like this:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1860 #, no-c-format msgid "" "SELECT ST_AsText(roads_geom) AS geom\n" "FROM roads\n" "WHERE\n" " roads_geom && ST_MakeEnvelope(191232, 243117,191232, 243119,312);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1862 #, no-c-format msgid "" "Note the use of the SRID 312, to specify the projection of the envelope." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1866 #, no-c-format msgid "Using the Dumper" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1868 #, no-c-format msgid "" "The pgsql2shp table dumper connects directly to the " "database and converts a table (possibly defined by a query) into a shape " "file. The basic syntax is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1872 #, no-c-format msgid "" "pgsql2shp [<options>] <database> [<schema>.]<table>" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:1874 #, no-c-format msgid "pgsql2shp [<options>] <database> <query>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1876 #, no-c-format msgid "The commandline options are:" msgstr "" #. Tag: term #: using_postgis_dataman.xml:1880 #, no-c-format msgid "-f <filename>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1883 #, no-c-format msgid "Write the output to a particular filename." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1888 #, no-c-format msgid "-h <host>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1891 #, no-c-format msgid "The database host to connect to." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1896 #, no-c-format msgid "-p <port>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1899 #, no-c-format msgid "The port to connect to on the database host." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1904 #, no-c-format msgid "-P <password>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1907 #, no-c-format msgid "The password to use when connecting to the database." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1912 #, no-c-format msgid "-u <user>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1915 #, no-c-format msgid "The username to use when connecting to the database." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1920 #, no-c-format msgid "-g <geometry column>" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1923 #, no-c-format msgid "" "In the case of tables with multiple geometry columns, the geometry column to " "use when writing the shape file." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1929 #, no-c-format msgid "-b" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1932 #, no-c-format msgid "" "Use a binary cursor. This will make the operation faster, but will not work " "if any NON-geometry attribute in the table lacks a cast to text." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1939 #, no-c-format msgid "-r" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1942 #, no-c-format msgid "" "Raw mode. Do not drop the gid field, or escape column " "names." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1951 #, no-c-format msgid "" "For backward compatibility: write a 3-dimensional shape file when dumping " "from old (pre-1.0.0) postgis databases (the default is to write a 2-" "dimensional shape file in that case). Starting from postgis-1.0.0+, " "dimensions are fully encoded." msgstr "" #. Tag: term #: using_postgis_dataman.xml:1959 #, no-c-format msgid "-m filename" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1961 #, no-c-format msgid "" "Remap identifiers to ten character names. The content of the file is lines " "of two symbols separated by a single white space and no trailing or leading " "space: VERYLONGSYMBOL SHORTONE ANOTHERVERYLONGSYMBOL SHORTER etc." msgstr "" #. Tag: title #: using_postgis_dataman.xml:1974 #, no-c-format msgid "Building Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:1976 #, no-c-format msgid "" "Indexes are what make using a spatial database for large data sets possible. " "Without indexing, any search for a feature would require a \"sequential scan" "\" of every record in the database. Indexing speeds up searching by " "organizing the data into a search tree which can be quickly traversed to " "find a particular record. PostgreSQL supports three kinds of indexes by " "default: B-Tree indexes, R-Tree indexes, and GiST indexes." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1986 #, no-c-format msgid "" "B-Trees are used for data which can be sorted along one axis; for example, " "numbers, letters, dates. GIS data cannot be rationally sorted along one axis " "(which is greater, (0,0) or (0,1) or (1,0)?) so B-Tree indexing is of no use " "for us." msgstr "" #. Tag: para #: using_postgis_dataman.xml:1993 #, no-c-format msgid "" "R-Trees break up data into rectangles, and sub-rectangles, and sub-sub " "rectangles, etc. R-Trees are used by some spatial databases to index GIS " "data, but the PostgreSQL R-Tree implementation is not as robust as the GiST " "implementation." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2000 #, no-c-format msgid "" "GiST (Generalized Search Trees) indexes break up data into \"things to one " "side\", \"things which overlap\", \"things which are inside\" and can be " "used on a wide range of data-types, including GIS data. PostGIS uses an R-" "Tree index implemented on top of GiST to index GIS data." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2009 #, no-c-format msgid "GiST Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2011 #, no-c-format msgid "" "GiST stands for \"Generalized Search Tree\" and is a generic form of " "indexing. In addition to GIS indexing, GiST is used to speed up searches on " "all kinds of irregular data structures (integer arrays, spectral data, etc) " "which are not amenable to normal B-Tree indexing." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2016 #, no-c-format msgid "" "Once a GIS data table exceeds a few thousand rows, you will want to build an " "index to speed up spatial searches of the data (unless all your searches are " "based on attributes, in which case you'll want to build a normal index on " "the attribute fields)." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2021 #, no-c-format msgid "" "The syntax for building a GiST index on a \"geometry\" column is as follows:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2024 #, no-c-format msgid "CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] );" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2025 #, no-c-format msgid "" "The above syntax will always build a 2D-index. To get the an n-dimensional " "index supported in PostGIS 2.0+ for the geometry type, you can create one " "using this syntax" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2026 #, no-c-format msgid "" "CREATE INDEX [indexname] ON [tablename] USING GIST ([geometryfield] " "gist_geometry_ops_nd);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2028 #, no-c-format msgid "" "Building a spatial index is a computationally intensive exercise: on tables " "of around 1 million rows, on a 300MHz Solaris machine, we have found " "building a GiST index takes about 1 hour. After building an index, it is " "important to force PostgreSQL to collect table statistics, which are used to " "optimize query plans:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2034 #, no-c-format msgid "" "VACUUM ANALYZE [table_name] [(column_name)];\n" "-- This is only needed for PostgreSQL 7.4 installations and below\n" "SELECT UPDATE_GEOMETRY_STATS([table_name], [column_name]);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2036 #, no-c-format msgid "" "GiST indexes have two advantages over R-Tree indexes in PostgreSQL. Firstly, " "GiST indexes are \"null safe\", meaning they can index columns which include " "null values. Secondly, GiST indexes support the concept of \"lossiness\" " "which is important when dealing with GIS objects larger than the PostgreSQL " "8K page size. Lossiness allows PostgreSQL to store only the \"important\" " "part of an object in an index -- in the case of GIS objects, just the " "bounding box. GIS objects larger than 8K will cause R-Tree indexes to fail " "in the process of being built." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2048 #, no-c-format msgid "Using Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2050 #, no-c-format msgid "" "Ordinarily, indexes invisibly speed up data access: once the index is built, " "the query planner transparently decides when to use index information to " "speed up a query plan. Unfortunately, the PostgreSQL query planner does not " "optimize the use of GiST indexes well, so sometimes searches which should " "use a spatial index instead default to a sequence scan of the whole table." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2057 #, no-c-format msgid "" "If you find your spatial indexes are not being used (or your attribute " "indexes, for that matter) there are a couple things you can do:" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2063 #, no-c-format msgid "" "Firstly, make sure statistics are gathered about the number and " "distributions of values in a table, to provide the query planner with better " "information to make decisions around index usage. For PostgreSQL 7.4 " "installations and below this is done by running " "update_geometry_stats([table_name, column_name]) (compute " "distribution) and VACUUM ANALYZE [table_name] [column_name] (compute number of values). Starting with PostgreSQL 8.0 running " "VACUUM ANALYZE will do both operations. You should " "regularly vacuum your databases anyways -- many PostgreSQL DBAs have " "VACUUM run as an off-peak cron job on a regular basis." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2077 #, no-c-format msgid "" "If vacuuming does not work, you can force the planner to use the index " "information by using the SET ENABLE_SEQSCAN=OFF command. " "You should only use this command sparingly, and only on spatially indexed " "queries: generally speaking, the planner knows better than you do about when " "to use normal B-Tree indexes. Once you have run your query, you should " "consider setting ENABLE_SEQSCAN back on, so that other " "queries will utilize the planner as normal." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2087 #, no-c-format msgid "" "As of version 0.6, it should not be necessary to force the planner to use " "the index with ENABLE_SEQSCAN." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2094 #, no-c-format msgid "" "If you find the planner wrong about the cost of sequential vs index scans " "try reducing the value of random_page_cost in postgresql.conf or using SET " "random_page_cost=#. Default value for the parameter is 4, try setting it to " "1 or 2. Decrementing the value makes the planner more inclined of using " "Index scans." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2105 #, no-c-format msgid "Complex Queries" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2107 #, no-c-format msgid "" "The raison d'etre of spatial database functionality is " "performing queries inside the database which would ordinarily require " "desktop GIS functionality. Using PostGIS effectively requires knowing what " "spatial functions are available, and ensuring that appropriate indexes are " "in place to provide good performance. The SRID of 312 used in these examples " "is purely for demonstration. You should be using a REAL SRID listed in the " "the spatial_ref_sys table and one that matches the projection of your data. " "If your data has no spatial reference system specified, you should be " "THINKING very thoughtfully why it doesn't and maybe it should. If your " "reason is because you are modeling something that doesn't have a geographic " "spatial reference system defined such as the internals of a molecule or a " "good location on Mars to transport the human race in the event of a nuclear " "holocaust, then simply leave out the SRID or make one up and insert it in " "the spatial_ref_sys table." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2121 #, no-c-format msgid "Taking Advantage of Indexes" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2123 #, no-c-format msgid "" "When constructing a query it is important to remember that only the bounding-" "box-based operators such as && can take advantage of the GiST " "spatial index. Functions such as ST_Distance() cannot use " "the index to optimize their operation. For example, the following query " "would be quite slow on a large table:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2130 #, no-c-format msgid "" "SELECT the_geom\n" "FROM geom_table\n" "WHERE ST_Distance(the_geom, ST_GeomFromText('POINT(100000 200000)', 312)) " "< 100" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2132 #, no-c-format msgid "" "This query is selecting all the geometries in geom_table which are within " "100 units of the point (100000, 200000). It will be slow because it is " "calculating the distance between each point in the table and our specified " "point, ie. one ST_Distance() calculation for each row in " "the table. We can avoid this by using the && operator to reduce the " "number of distance calculations required:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2139 #, no-c-format msgid "" "SELECT the_geom\n" "FROM geom_table\n" "WHERE ST_DWithin(the_geom, ST_MakeEnvelope(90900, 190900, 100100, " "200100,312), 100)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2141 #, no-c-format msgid "" "This query selects the same geometries, but it does it in a more efficient " "way. Assuming there is a GiST index on the_geom, the query planner will " "recognize that it can use the index to reduce the number of rows before " "calculating the result of the ST_distance() function. " "Notice that the ST_MakeEnvelope geometry which is used in " "the && operation is a 200 unit square box centered on the original " "point - this is our \"query box\". The && operator uses the index to " "quickly reduce the result set down to only those geometries which have " "bounding boxes that overlap the \"query box\". Assuming that our query box " "is much smaller than the extents of the entire geometry table, this will " "drastically reduce the number of distance calculations that need to be done." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2155 #, no-c-format msgid "Change in Behavior" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2157 #, no-c-format msgid "" "As of PostGIS 1.3.0, most of the Geometry Relationship Functions, with the " "notable exceptions of ST_Disjoint and ST_Relate, include implicit bounding " "box overlap operators." msgstr "" #. Tag: title #: using_postgis_dataman.xml:2164 #, no-c-format msgid "Examples of Spatial SQL" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2166 #, no-c-format msgid "" "The examples in this section will make use of two tables, a table of linear " "roads, and a table of polygonal municipality boundaries. The table " "definitions for the bc_roads table is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2170 #, no-c-format msgid "" "Column | Type | Description\n" "------------+-------------------+-------------------\n" "gid | integer | Unique ID\n" "name | character varying | Road Name\n" "the_geom | geometry | Location Geometry (Linestring)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2172 #, no-c-format msgid "" "The table definition for the bc_municipality table is:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2175 #, no-c-format msgid "" "Column | Type | Description\n" "-----------+-------------------+-------------------\n" "gid | integer | Unique ID\n" "code | integer | Unique ID\n" "name | character varying | City / Town Name\n" "the_geom | geometry | Location Geometry (Polygon)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2180 #, no-c-format msgid "What is the total length of all roads, expressed in kilometers?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2185 #, no-c-format msgid "You can answer this question with a very simple piece of SQL:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2188 #, no-c-format msgid "" "SELECT sum(ST_Length(the_geom))/1000 AS km_roads FROM bc_roads;\n" "\n" "km_roads\n" "------------------\n" "70842.1243039643\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2194 #, no-c-format msgid "How large is the city of Prince George, in hectares?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2198 #, no-c-format msgid "" "This query combines an attribute condition (on the municipality name) with a " "spatial calculation (of the area):" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2202 #, no-c-format msgid "" "SELECT\n" " ST_Area(the_geom)/10000 AS hectares\n" "FROM bc_municipality\n" "WHERE name = 'PRINCE GEORGE';\n" "\n" "hectares\n" "------------------\n" "32657.9103824927\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2208 #, no-c-format msgid "What is the largest municipality in the province, by area?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2213 #, no-c-format msgid "" "This query brings a spatial measurement into the query condition. There are " "several ways of approaching this problem, but the most efficient is below:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2217 #, no-c-format msgid "" "SELECT\n" " name,\n" " ST_Area(the_geom)/10000 AS hectares\n" "FROM\n" " bc_municipality\n" "ORDER BY hectares DESC\n" "LIMIT 1;\n" "\n" "name | hectares\n" "---------------+-----------------\n" "TUMBLER RIDGE | 155020.02556131\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2219 #, no-c-format msgid "" "Note that in order to answer this query we have to calculate the area of " "every polygon. If we were doing this a lot it would make sense to add an " "area column to the table that we could separately index for performance. By " "ordering the results in a descending direction, and them using the " "PostgreSQL \"LIMIT\" command we can easily pick off the largest value " "without using an aggregate function like max()." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2231 #, no-c-format msgid "What is the length of roads fully contained within each municipality?" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2236 #, no-c-format msgid "" "This is an example of a \"spatial join\", because we are bringing together " "data from two tables (doing a join) but using a spatial interaction " "condition (\"contained\") as the join condition rather than the usual " "relational approach of joining on a common key:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2242 #, no-c-format msgid "" "SELECT\n" " m.name,\n" " sum(ST_Length(r.the_geom))/1000 as roads_km\n" "FROM\n" " bc_roads AS r,\n" " bc_municipality AS m\n" "WHERE\n" " ST_Contains(m.the_geom,r.the_geom)\n" "GROUP BY m.name\n" "ORDER BY roads_km;\n" "\n" "name | roads_km\n" "----------------------------+------------------\n" "SURREY | 1539.47553551242\n" "VANCOUVER | 1450.33093486576\n" "LANGLEY DISTRICT | 833.793392535662\n" "BURNABY | 773.769091404338\n" "PRINCE GEORGE | 694.37554369147\n" "..." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2244 #, no-c-format msgid "" "This query takes a while, because every road in the table is summarized into " "the final result (about 250K roads for our particular example table). For " "smaller overlays (several thousand records on several hundred) the response " "can be very fast." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2253 #, no-c-format msgid "Create a new table with all the roads within the city of Prince George." msgstr "" #. Tag: para #: using_postgis_dataman.xml:2258 #, no-c-format msgid "" "This is an example of an \"overlay\", which takes in two tables and outputs " "a new table that consists of spatially clipped or cut resultants. Unlike the " "\"spatial join\" demonstrated above, this query actually creates new " "geometries. An overlay is like a turbo-charged spatial join, and is useful " "for more exact analysis work:" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2265 #, no-c-format msgid "" "CREATE TABLE pg_roads as\n" "SELECT\n" " ST_Intersection(r.the_geom, m.the_geom) AS intersection_geom,\n" " ST_Length(r.the_geom) AS rd_orig_length,\n" " r.*\n" "FROM\n" " bc_roads AS r,\n" " bc_municipality AS m\n" "WHERE m.name = 'PRINCE GEORGE' AND ST_Intersects(r.the_geom, m.the_geom);" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2271 #, no-c-format msgid "What is the length in kilometers of \"Douglas St\" in Victoria?" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2276 #, no-c-format msgid "" "SELECT\n" " sum(ST_Length(r.the_geom))/1000 AS kilometers\n" "FROM\n" " bc_roads r,\n" " bc_municipality m\n" "WHERE r.name = 'Douglas St' AND m.name = 'VICTORIA'\n" " AND ST_Contains(m.the_geom, r.the_geom) ;\n" "\n" "kilometers\n" "------------------\n" "4.89151904172838\n" "(1 row)" msgstr "" #. Tag: para #: using_postgis_dataman.xml:2282 #, no-c-format msgid "What is the largest municipality polygon that has a hole?" msgstr "" #. Tag: programlisting #: using_postgis_dataman.xml:2287 #, no-c-format msgid "" "SELECT gid, name, ST_Area(the_geom) AS area\n" "FROM bc_municipality\n" "WHERE ST_NRings(the_geom) > 1\n" "ORDER BY area DESC LIMIT 1;\n" "\n" "gid | name | area\n" "-----+--------------+------------------\n" "12 | SPALLUMCHEEN | 257374619.430216\n" "(1 row)" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference.xml.po0000644000000000000000000000334112025614072021046 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference.xml:3 #, no-c-format msgid "PostGIS Reference" msgstr "" #. Tag: para #: reference.xml:5 #, no-c-format msgid "" "The functions given below are the ones which a user of PostGIS is likely to " "need. There are other functions which are required support functions to the " "PostGIS objects which are not of use to a general user." msgstr "" #. Tag: para #: reference.xml:11 #, no-c-format msgid "" "PostGIS has begun a transition from the existing naming convention to an SQL-" "MM-centric convention. As a result, most of the functions that you know and " "love have been renamed using the standard spatial type (ST) prefix. Previous " "functions are still available, though are not listed in this document where " "updated functions are equivalent. The non ST_ functions not listed in this " "documentation are deprecated and will be removed in a future release so STOP " "USING THEM." msgstr "" #. Tag: chapter #: reference.xml:16 #, no-c-format msgid "" "&reference_type; &reference_management; &reference_constructor; " "&reference_accessor; &reference_editor; &reference_output; " "&reference_operator; &reference_measure; &reference_processing; " "&reference_lrs; &reference_transaction; &reference_misc; " "&reference_exception;" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/extras.xml.po0000644000000000000000000000074412025614072020422 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/faq_raster.xml.po0000644000000000000000000004571712025614072021254 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: faq_raster.xml:3 #, no-c-format msgid "PostGIS Raster Frequently Asked Questions" msgstr "" #. Tag: para #: faq_raster.xml:9 #, no-c-format msgid "Where can I find out more about the PostGIS Raster Project?" msgstr "" #. Tag: para #: faq_raster.xml:13 #, no-c-format msgid "" "Refer to the PostGIS Raster home page." msgstr "" #. Tag: para #: faq_raster.xml:19 #, no-c-format msgid "" "Are there any books or tutorials to get me started with this wonderful " "invention?" msgstr "" #. Tag: para #: faq_raster.xml:23 #, no-c-format msgid "" "There is a full length beginner tutorial Intersecting vector buffers with large " "raster coverage using PostGIS Raster. Jorge has a series of blog " "articles on PostGIS Raster that demonstrate how to load raster data as well " "as cross compare to same tasks in Oracle GeoRaster. Check out Jorge's PostGIS " "Raster / Oracle GeoRaster Series. There is a whole chapter (more " "than 35 pages of content) dedicated to PostGIS Raster with free code and " "data downloads at PostGIS in " "Action - Raster chapter. You can buy PostGIS in Action now from Manning in hard-copy " "(significant discounts for bulk purchases) or just the E-book format. You " "can also buy from Amazon and various other book distributors. All hard-copy " "books come with a free coupon to download the E-book version." msgstr "" #. Tag: para #: faq_raster.xml:30 #, no-c-format msgid "" "Here is a review from a PostGIS Raster user PostGIS raster applied to " "land classification urban forestry" msgstr "" #. Tag: para #: faq_raster.xml:37 #, no-c-format msgid "How do I install Raster support in my PostGIS database?" msgstr "" #. Tag: para #: faq_raster.xml:41 #, no-c-format msgid "" "The easiest is to download binaries for PostGIS and Raster which are " "currently available for windows and latest versions of Mac OSX. First you " "need a working PostGIS 2.0.0 or above and be running PostgreSQL 8.4, 9.0, or " "9.1. Note in PostGIS 2.0 PostGIS Raster is fully integrated, so it will be " "compiled when you compile PostGIS." msgstr "" #. Tag: para #: faq_raster.xml:43 #, no-c-format msgid "" "Instructions for installing and running under windows are available at " "How to Install and Configure PostGIS " "raster on windows" msgstr "" #. Tag: para #: faq_raster.xml:44 #, no-c-format msgid "" "If you are on windows, you can compile yourself, or use the pre-" "compiled PostGIS Raster windows binaries. If you are on Mac OSX " "Leopard or Snow Leopard, there are binaries available at Kyng Chaos Mac OSX PostgreSQL/GIS " "binaries." msgstr "" #. Tag: para #: faq_raster.xml:50 #, no-c-format msgid "" "Then to enable raster support in your database, run the rtpostgis.sql file " "in your database. To upgrade an existing install use " "rtpostgis_upgrade_minor..sql instead of rtpostgis.sql" msgstr "" #. Tag: para #: faq_raster.xml:51 #, no-c-format msgid "" "For other platforms, you generally need to compile yourself. Dependencies " "are PostGIS and GDAL. For more details about compiling from source, please " "refer to Installing PostGIS " "Raster from source (in prior versions of PostGIS)" msgstr "" #. Tag: para #: faq_raster.xml:57 #, no-c-format msgid "" "I get error could not load library \"C:/Program Files/PostgreSQL/8.4/lib/" "rtpostgis.dll\": The specified module could not be found. or could not load " "library on Linux when trying to run rtpostgis.sql" msgstr "" #. Tag: para #: faq_raster.xml:62 #, no-c-format msgid "" "rtpostgis.so/dll is built with dependency on libgdal.dll/so. Make sure for " "Windows you have libgdal-1.dll in the bin folder of your PostgreSQL install. " "For Linux libgdal has to be in your path or bin folder." msgstr "" #. Tag: para #: faq_raster.xml:64 #, no-c-format msgid "" "You may also run into different errors if you don't have PostGIS installed " "in your database. Make sure to install PostGIS first in your database before " "trying to install the raster support." msgstr "" #. Tag: para #: faq_raster.xml:71 #, no-c-format msgid "How do I load Raster data into PostGIS?" msgstr "" #. Tag: para #: faq_raster.xml:75 #, no-c-format msgid "" "The latest version of PostGIS comes packaged with a raster2pgsql raster loader executable capable of loading many kinds of rasters " "and also generating lower resolution overviews without any additional " "software. Please refer to for more " "details. Pre-2.0 versions came with a raster2pgsql.py " "that required python with numpy and GDAL. This is no longer needed." msgstr "" #. Tag: para #: faq_raster.xml:81 #, no-c-format msgid "What kind of raster file formats can I load into my database?" msgstr "" #. Tag: para #: faq_raster.xml:85 #, no-c-format msgid "" "Any that your GDAL library supports. GDAL supported formats are documented " "GDAL File Formats." msgstr "" #. Tag: para #: faq_raster.xml:86 #, no-c-format msgid "" "Your particular GDAL install may not support all formats. To verify the ones " "supported by your particular GDAL install, you can use" msgstr "" #. Tag: programlisting #: faq_raster.xml:87 #, no-c-format msgid "raster2pgsql -G" msgstr "" #. Tag: para #: faq_raster.xml:93 #, no-c-format msgid "Can I export my PostGIS raster data to other raster formats?" msgstr "" #. Tag: para #: faq_raster.xml:97 #, no-c-format msgid "Yes" msgstr "" #. Tag: para #: faq_raster.xml:98 #, no-c-format msgid "" "GDAL 1.7+ has a PostGIS raster driver, but is only compiled in if you choose " "to compile with PostgreSQL support." msgstr "" #. Tag: para #: faq_raster.xml:99 #, no-c-format msgid "" "The driver currently doesn't support irregularly blocked rasters, although " "you can store irregularly blocked rasters in PostGIS raster data type." msgstr "" #. Tag: para #: faq_raster.xml:101 #, no-c-format msgid "" "If you are compiling from source, you need to include in your configure " "--with-pg=path/to/pg_config to enable the " "driver. Refer to GDAL Build Hints for tips on building GDAL against in various OS " "platforms." msgstr "" #. Tag: para #: faq_raster.xml:106 #, no-c-format msgid "" "If your version of GDAL is compiled with the PostGIS Raster driver you " "should see PostGIS Raster in list when you do" msgstr "" #. Tag: programlisting #: faq_raster.xml:108 #, no-c-format msgid "gdalinfo --formats" msgstr "" #. Tag: para #: faq_raster.xml:110 #, no-c-format msgid "To get a summary about your raster via GDAL use gdalinfo:" msgstr "" #. Tag: programlisting #: faq_raster.xml:111 #, no-c-format msgid "" "gdalinfo \"PG:host=localhost port=5432 dbname='mygisdb' user='postgres' " "password='whatever' schema='someschema' table=sometable\"" msgstr "" #. Tag: para #: faq_raster.xml:114 #, no-c-format msgid "" "To export data to other raster formats, use gdal_translate the below will " "export all data from a table to a PNG file at 10% size." msgstr "" #. Tag: para #: faq_raster.xml:116 #, no-c-format msgid "" "Depending on your pixel band types, some translations may not work if the " "export format does not support that Pixel type. For example floating point " "band types and 32 bit unsigned ints will not translate easily to JPG or some " "others." msgstr "" #. Tag: para #: faq_raster.xml:119 #, no-c-format msgid "Here is an example simple translation" msgstr "" #. Tag: programlisting #: faq_raster.xml:120 #, no-c-format msgid "" "gdal_translate -of PNG -outsize 10% 10% \"PG:host=localhost dbname='mygisdb' " "user='postgres' password=whatever' schema='someschema' table=sometable\" C:" "\\somefile.png" msgstr "" #. Tag: para #: faq_raster.xml:121 #, no-c-format msgid "" "You can also use SQL where clauses in your export using the where=... in " "your driver connection string. Below are some using a where clause" msgstr "" #. Tag: programlisting #: faq_raster.xml:123 #, no-c-format msgid "" "gdal_translate -of PNG -outsize 10% 10% \"PG:host=localhost dbname='mygisdb' " "user='postgres' password=whatever' schema='someschema' table=sometable where=" "\"owner='jimmy'\" \" C:\\somefile.png" msgstr "" #. Tag: programlisting #: faq_raster.xml:124 #, no-c-format msgid "" "gdal_translate -of PNG -outsize 10% 10% \"PG:host=localhost dbname='mygisdb' " "user='postgres' password=whatever' schema='someschema' table=sometable " "where='ST_Intersects(rast, ST_SetSRID(ST_Point(-71.032,42.3793),4326) )' \" " "C:\\intersectregion.png" msgstr "" #. Tag: para #: faq_raster.xml:125 #, no-c-format msgid "" "To see more examples and syntax refer to Reading Raster Data of PostGIS Raster section" msgstr "" #. Tag: para #: faq_raster.xml:130 #, no-c-format msgid "" "Are their binaries of GDAL available already compiled with PostGIS Raster " "suppport?" msgstr "" #. Tag: para #: faq_raster.xml:132 #, no-c-format msgid "" "Yes. Check out the page GDAL Binaries page. Any compiled with " "PostgreSQL support should have PostGIS Raster in them." msgstr "" #. Tag: para #: faq_raster.xml:134 #, no-c-format msgid "" "We know for sure the following windows binaries have PostGIS Raster built in." msgstr "" #. Tag: para #: faq_raster.xml:135 #, no-c-format msgid "" "FWTools latest stable version " "for Windows is compiled with Raster support." msgstr "" #. Tag: para #: faq_raster.xml:136 #, no-c-format msgid "" "PostGIS Raster is undergoing many changes. If you want to get the latest " "nightly build for Windows -- then check out the Tamas Szekeres nightly " "builds built with Visual Studio which contain GDAL trunk, Python Bindings " "and MapServer executables and PostGIS Raster driver built-in. Just click the " "SDK bat and run your commands from there. http://vbkto.dyndns.org/sdk/. Also available are VS " "project files." msgstr "" #. Tag: para #: faq_raster.xml:145 #, no-c-format msgid "What tools can I use to view PostGIS raster data?" msgstr "" #. Tag: para #: faq_raster.xml:149 #, no-c-format msgid "" "You can use MapServer compiled with GDAL 1.7+ and PostGIS Raster driver " "support to view Raster data. QuantumGIS (QGIS) now supports viewing of " "PostGIS Raster if you have PostGIS raster driver installed." msgstr "" #. Tag: para #: faq_raster.xml:151 #, no-c-format msgid "" "In theory any tool that renders data using GDAL can support PostGIS raster " "data or support it with fairly minimal effort. Again for Windows, Tamas' " "binaries http://vbkto.dyndns.org/" "sdk/ are a good choice if you don't want the hassle of having to " "setup to compile your own." msgstr "" #. Tag: para #: faq_raster.xml:158 #, no-c-format msgid "How can I add a PostGIS raster layer to my MapServer map?" msgstr "" #. Tag: para #: faq_raster.xml:162 #, no-c-format msgid "" "First you need GDAL 1.7 or higher compiled with PostGIS raster support. GDAL " "1.8 or above is preferred since many issues have been fixed in 1.8 and more " "PostGIS raster issues fixed in trunk version." msgstr "" #. Tag: para #: faq_raster.xml:164 #, no-c-format msgid "" "You can much like you can with any other raster. Refer to MapServer Raster processing " "options for list of various processing functions you can use with " "MapServer raster layers." msgstr "" #. Tag: para #: faq_raster.xml:167 #, no-c-format msgid "" "What makes PostGIS raster data particularly interesting, is that since each " "tile can have various standard database columns, you can segment it in your " "data source" msgstr "" #. Tag: para #: faq_raster.xml:169 #, no-c-format msgid "" "Below is an example of how you would define a PostGIS raster layer in " "MapServer." msgstr "" #. Tag: para #: faq_raster.xml:170 #, no-c-format msgid "" "The mode=2 is required for tiled rasters and was added in PostGIS 2.0 and " "GDAL 1.8 drivers. This does not exist in GDAL 1.7 drivers." msgstr "" #. Tag: programlisting #: faq_raster.xml:171 #, no-c-format msgid "" "-- displaying raster with standard raster options\n" "LAYER\n" " NAME coolwktraster\n" " TYPE raster\n" " STATUS ON\n" " DATA \"PG:host=localhost port=5432 dbname='somedb' user='someuser' " "password='whatever' \n" " schema='someschema' table='cooltable' mode='2'\" \n" " PROCESSING \"NODATA=0\"\n" " PROCESSING \"SCALE=AUTO\"\n" " #... other standard raster processing functions here\n" " #... classes are optional but useful for 1 band data\n" " CLASS\n" " NAME \"boring\"\n" " EXPRESSION ([pixel] < 20)\n" " COLOR 250 250 250\n" " END\n" " CLASS\n" " NAME \"mildly interesting\"\n" " EXPRESSION ([pixel] > 20 AND [pixel] < 1000)\n" " COLOR 255 0 0\n" " END\n" " CLASS\n" " NAME \"very interesting\"\n" " EXPRESSION ([pixel] >= 1000)\n" " COLOR 0 255 0\n" " END\n" "END" msgstr "" #. Tag: programlisting #: faq_raster.xml:173 #, no-c-format msgid "" "-- displaying raster with standard raster options and a where clause\n" "LAYER\n" " NAME soil_survey2009\n" " TYPE raster\n" " STATUS ON\n" " DATA \"PG:host=localhost port=5432 dbname='somedb' user='someuser' " "password='whatever' \n" " schema='someschema' table='cooltable' " "where='survey_year=2009' mode='2'\" \n" " PROCESSING \"NODATA=0\"\n" " #... other standard raster processing functions here\n" " #... classes are optional but useful for 1 band data\n" "END" msgstr "" #. Tag: para #: faq_raster.xml:181 #, no-c-format msgid "What functions can I currently use with my raster data?" msgstr "" #. Tag: para #: faq_raster.xml:185 #, no-c-format msgid "" "Refer to the list of . There are more, but " "this is still a work in progress." msgstr "" #. Tag: para #: faq_raster.xml:187 #, no-c-format msgid "" "Refer to the PostGIS Raster roadmap page for details of what " "you can expect in the future." msgstr "" #. Tag: para #: faq_raster.xml:195 #, no-c-format msgid "" "I am getting error ERROR: function st_intersects(raster, unknown) is not " "unique or st_union(geometry,text) is not unique. How do I fix?" msgstr "" #. Tag: para #: faq_raster.xml:199 #, no-c-format msgid "" "The function is not unique error happens if one of your arguments is a " "textual representation of a geometry instead of a geometry. In these cases, " "PostgreSQL marks the textual representation as an unknown type, which means " "it can fall into the st_intersects(raster, geometry) or st_intersects(raster," "raster) thus resulting in a non-unique case since both functions can in " "theory support your request. To prevent this, you need to cast the geometry " "to a geometry." msgstr "" #. Tag: para #: faq_raster.xml:200 #, no-c-format msgid "For example if your code looks like this:" msgstr "" #. Tag: programlisting #: faq_raster.xml:201 #, no-c-format msgid "" "SELECT rast\n" " FROM my_raster\n" " WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)');" msgstr "" #. Tag: para #: faq_raster.xml:202 #, no-c-format msgid "" "Cast the textual geometry representation to a geometry by changing your code " "to this:" msgstr "" #. Tag: programlisting #: faq_raster.xml:203 #, no-c-format msgid "" "SELECT rast\n" " FROM my_raster\n" " WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)'::geometry);" msgstr "" #. Tag: para #: faq_raster.xml:211 #, no-c-format msgid "" "How is PostGIS Raster different from Oracle GeoRaster (SDO_GEORASTER) and " "SDO_RASTER types?" msgstr "" #. Tag: para #: faq_raster.xml:215 #, no-c-format msgid "" "For a more extensive discussion on this topic, check out Jorge Arévalo " "Oracle GeoRaster and PostGIS Raster: First impressions " msgstr "" #. Tag: para #: faq_raster.xml:216 #, no-c-format msgid "" "The major advantage of one-georeference-by-raster over one-georeference-by-" "layer is to allow:" msgstr "" #. Tag: para #: faq_raster.xml:217 #, no-c-format msgid "" "* coverages to be not necessarily rectangular (which is often the case of " "raster coverage covering large extents. See the possible raster arrangements " "in the documentation)" msgstr "" #. Tag: para #: faq_raster.xml:218 #, no-c-format msgid "" "* rasters to overlaps (which is necessary to implement lossless vector to " "raster conversion)" msgstr "" #. Tag: para #: faq_raster.xml:219 #, no-c-format msgid "" "These arrangements are possible in Oracle as well, but they imply the " "storage of multiple SDO_GEORASTER objects linked to as many SDO_RASTER " "tables. A complex coverage can lead to hundreds of tables in the database. " "With PostGIS Raster you can store a similar raster arrangement into a unique " "table." msgstr "" #. Tag: para #: faq_raster.xml:224 #, no-c-format msgid "" "It's a bit like if PostGIS would force you to store only full rectangular " "vector coverage without gaps or overlaps (a perfect rectangular topological " "layer). This is very practical in some applications but practice has shown " "that it is not realistic or desirable for most geographical coverages. " "Vector structures needs the flexibility to store discontinuous and non-" "rectangular coverages. We think it is a big advantage that raster structure " "should benefit as well." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_lrs.xml.po0000644000000000000000000005443412025614072021737 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_lrs.xml:3 #, no-c-format msgid "Linear Referencing" msgstr "" #. Tag: refname #: reference_lrs.xml:7 #, no-c-format msgid "ST_Line_Interpolate_Point" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:9 #, no-c-format msgid "" "Returns a point interpolated along a line. Second argument is a float8 " "between 0 and 1 representing fraction of total length of linestring the " "point has to be located." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:15 #, no-c-format msgid "" "geometry ST_Line_Interpolate_Point " "geometry a_linestring float a_fraction" msgstr "" #. Tag: title #: reference_lrs.xml:24 reference_lrs.xml:85 reference_lrs.xml:136 #: reference_lrs.xml:202 reference_lrs.xml:260 reference_lrs.xml:311 #: reference_lrs.xml:356 reference_lrs.xml:400 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_lrs.xml:26 #, no-c-format msgid "" "Returns a point interpolated along a line. First argument must be a " "LINESTRING. Second argument is a float8 between 0 and 1 representing " "fraction of total linestring length the point has to be located." msgstr "" #. Tag: para #: reference_lrs.xml:30 reference_lrs.xml:147 #, no-c-format msgid "" "See for computing the line location " "nearest to a Point." msgstr "" #. Tag: para #: reference_lrs.xml:34 #, no-c-format msgid "" "Since release 1.1.1 this function also interpolates M and Z values (when " "present), while prior releases set them to 0.0." msgstr "" #. Tag: para #: reference_lrs.xml:38 #, no-c-format msgid "Availability: 0.8.2, Z and M supported added in 1.1.1" msgstr "" #. Tag: para #: reference_lrs.xml:39 reference_lrs.xml:157 reference_lrs.xml:319 #: reference_lrs.xml:362 reference_lrs.xml:406 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: title #: reference_lrs.xml:44 reference_lrs.xml:101 reference_lrs.xml:161 #: reference_lrs.xml:225 reference_lrs.xml:276 reference_lrs.xml:323 #: reference_lrs.xml:366 reference_lrs.xml:410 #, no-c-format msgid "Examples" msgstr "" #. Tag: para #: reference_lrs.xml:50 #, no-c-format msgid "A linestring with the interpolated point at 20% position (0.20)" msgstr "" #. Tag: programlisting #: reference_lrs.xml:53 #, no-c-format msgid "" "--Return point 20% along 2d line\n" "SELECT ST_AsEWKT(ST_Line_Interpolate_Point(the_line, 0.20))\n" " FROM (SELECT ST_GeomFromEWKT('LINESTRING(25 50, 100 125, 150 190)') " "as the_line) As foo;\n" " st_asewkt\n" "----------------\n" " POINT(51.5974135047432 76.5974135047432)" msgstr "" #. Tag: programlisting #: reference_lrs.xml:54 #, no-c-format msgid "" "--Return point mid-way of 3d line\n" "SELECT ST_AsEWKT(ST_Line_Interpolate_Point(the_line, 0.5))\n" " FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6, 6 7 8)') as " "the_line) As foo;\n" "\n" " st_asewkt\n" "--------------------\n" " POINT(3.5 4.5 5.5)\n" "\n" "\n" "--find closest point on a line to a point or other geometry\n" " SELECT ST_AsText(ST_Line_Interpolate_Point(foo.the_line, " "ST_Line_Locate_Point(foo.the_line, ST_GeomFromText('POINT(4 3)'))))\n" "FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As " "foo;\n" " st_astext\n" "----------------\n" " POINT(3 4)" msgstr "" #. Tag: title #: reference_lrs.xml:59 reference_lrs.xml:108 reference_lrs.xml:175 #: reference_lrs.xml:231 reference_lrs.xml:283 reference_lrs.xml:330 #: reference_lrs.xml:372 #, no-c-format msgid "See Also" msgstr "" #. Tag: para #: reference_lrs.xml:61 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_lrs.xml:67 #, no-c-format msgid "ST_Line_Locate_Point" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:69 #, no-c-format msgid "" "Returns a float between 0 and 1 representing the location of the closest " "point on LineString to the given Point, as a fraction of total 2d line " "length." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:76 #, no-c-format msgid "" "float ST_Line_Locate_Point " "geometry a_linestring geometry a_point" msgstr "" #. Tag: para #: reference_lrs.xml:87 #, no-c-format msgid "" "Returns a float between 0 and 1 representing the location of the closest " "point on LineString to the given Point, as a fraction of total 2d line length." msgstr "" #. Tag: para #: reference_lrs.xml:91 #, no-c-format msgid "" "You can use the returned location to extract a Point () or a substring ()." msgstr "" #. Tag: para #: reference_lrs.xml:94 #, no-c-format msgid "This is useful for approximating numbers of addresses" msgstr "" #. Tag: para #: reference_lrs.xml:96 #, no-c-format msgid "Availability: 1.1.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:103 #, no-c-format msgid "" "--Rough approximation of finding the street number of a point along the " "street\n" "--Note the whole foo thing is just to generate dummy data that looks\n" "--like house centroids and street\n" "--We use ST_DWithin to exclude\n" "--houses too far away from the street to be considered on the street\n" "SELECT ST_AsText(house_loc) As as_text_house_loc,\n" " startstreet_num +\n" " CAST( (endstreet_num - startstreet_num)\n" " * ST_Line_Locate_Point(street_line, house_loc) As " "integer) As street_num\n" "FROM\n" "(SELECT ST_GeomFromText('LINESTRING(1 2, 3 4)') As street_line,\n" " ST_MakePoint(x*1.01,y*1.03) As house_loc, 10 As startstreet_num,\n" " 20 As endstreet_num\n" "FROM generate_series(1,3) x CROSS JOIN generate_series(2,4) As y)\n" "As foo\n" "WHERE ST_DWithin(street_line, house_loc, 0.2);\n" "\n" " as_text_house_loc | street_num\n" "-------------------+------------\n" " POINT(1.01 2.06) | 10\n" " POINT(2.02 3.09) | 15\n" " POINT(3.03 4.12) | 20\n" "\n" " --find closest point on a line to a point or other geometry\n" " SELECT ST_AsText(ST_Line_Interpolate_Point(foo.the_line, " "ST_Line_Locate_Point(foo.the_line, ST_GeomFromText('POINT(4 3)'))))\n" "FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As " "foo;\n" " st_astext\n" "----------------\n" " POINT(3 4)" msgstr "" #. Tag: para #: reference_lrs.xml:110 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_lrs.xml:116 #, no-c-format msgid "ST_Line_Substring" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:118 #, no-c-format msgid "" "Return a linestring being a substring of the input one starting and ending " "at the given fractions of total 2d length. Second and third arguments are " "float8 values between 0 and 1." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:126 #, no-c-format msgid "" "geometry ST_Line_Substring " "geometry a_linestring float startfraction float endfraction" msgstr "" #. Tag: para #: reference_lrs.xml:138 #, no-c-format msgid "" "Return a linestring being a substring of the input one starting and ending " "at the given fractions of total 2d length. Second and third arguments are " "float8 values between 0 and 1. This only works with LINESTRINGs. To use with " "contiguous MULTILINESTRINGs use in conjunction with ." msgstr "" #. Tag: para #: reference_lrs.xml:144 #, no-c-format msgid "" "If 'start' and 'end' have the same value this is equivalent to ." msgstr "" #. Tag: para #: reference_lrs.xml:151 #, no-c-format msgid "" "Since release 1.1.1 this function also interpolates M and Z values (when " "present), while prior releases set them to unspecified values." msgstr "" #. Tag: para #: reference_lrs.xml:156 #, no-c-format msgid "Availability: 1.1.0, Z and M supported added in 1.1.1" msgstr "" #. Tag: para #: reference_lrs.xml:167 #, no-c-format msgid "A linestring seen with 1/3 midrange overlaid (0.333, 0.666)" msgstr "" #. Tag: programlisting #: reference_lrs.xml:170 #, no-c-format msgid "" "--Return the approximate 1/3 mid-range part of a linestring\n" "SELECT ST_AsText(ST_Line_SubString(ST_GeomFromText('LINESTRING(25 50, 100 " "125, 150 190)'), 0.333, 0.666));\n" "\n" " st_astext\n" "------------------------------------------------------------------------------------------------\n" "LINESTRING(69.2846934853974 94.2846934853974,100 125,111.700356260683 " "140.210463138888)\n" "\n" "--The below example simulates a while loop in\n" "--SQL using PostgreSQL generate_series() to cut all\n" "--linestrings in a table to 100 unit segments\n" "-- of which no segment is longer than 100 units\n" "-- units are measured in the SRID units of measurement\n" "-- It also assumes all geometries are LINESTRING or contiguous " "MULTILINESTRING\n" "--and no geometry is longer than 100 units*10000\n" "--for better performance you can reduce the 10000\n" "--to match max number of segments you expect\n" "\n" "SELECT field1, field2, ST_Line_Substring(the_geom, 100.00*n/length,\n" " CASE\n" " WHEN 100.00*(n+1) < length THEN 100.00*(n+1)/length\n" " ELSE 1\n" " END) As the_geom\n" "FROM\n" " (SELECT sometable.field1, sometable.field2,\n" " ST_LineMerge(sometable.the_geom) AS the_geom,\n" " ST_Length(sometable.the_geom) As length\n" " FROM sometable\n" " ) AS t\n" "CROSS JOIN generate_series(0,10000) AS n\n" "WHERE n*100.00/length < 1;" msgstr "" #. Tag: para #: reference_lrs.xml:177 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_lrs.xml:183 #, no-c-format msgid "ST_LocateAlong" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:185 #, no-c-format msgid "" "Return a derived geometry collection value with elements that " "match the specified measure. Polygonal elements are not supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:192 #, no-c-format msgid "" "geometry ST_LocateAlong " "geometry ageom_with_measure float a_measure float offset" msgstr "" #. Tag: para #: reference_lrs.xml:204 #, no-c-format msgid "" "Return a derived geometry collection value with elements that match " "the specified measure. Polygonal elements are not supported." msgstr "" #. Tag: para #: reference_lrs.xml:208 #, no-c-format msgid "" "If an offset is provided, the resultant will be offset to the left or right " "of the input line by the specified number of units. A positive offset will " "be to the left, and a negative one to the right." msgstr "" #. Tag: para #: reference_lrs.xml:213 reference_lrs.xml:266 #, no-c-format msgid "" "Semantic is specified by: ISO/IEC CD 13249-3:200x(E) - Text for Continuation " "CD Editing Meeting" msgstr "" #. Tag: para #: reference_lrs.xml:216 #, no-c-format msgid "Availability: 1.1.0 by old name ST_Locate_Along_Measure." msgstr "" #. Tag: para #: reference_lrs.xml:217 #, no-c-format msgid "" "Changed: 2.0.0 in prior versions this used to be called " "ST_Locate_Along_Measure. The old name has been deprecated and will be " "removed in the future but is still available." msgstr "" #. Tag: para #: reference_lrs.xml:218 #, no-c-format msgid "Use this function only for geometries with an M component" msgstr "" #. Tag: para #: reference_lrs.xml:220 reference_lrs.xml:272 #, no-c-format msgid "&M_support;" msgstr "" #. Tag: programlisting #: reference_lrs.xml:226 #, no-c-format msgid "" "SELECT ST_AsText(the_geom)\n" " FROM\n" " (SELECT ST_LocateAlong(\n" " ST_GeomFromText('MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 " "3),\n" " (1 2 3, 5 4 5))'),3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "-----------------------------------------------------------\n" " MULTIPOINT M (1 2 3)\n" "\n" "--Geometry collections are difficult animals so dump them\n" "--to make them more digestable\n" "SELECT ST_AsText((ST_Dump(the_geom)).geom)\n" " FROM\n" " (SELECT ST_LocateAlong(\n" " ST_GeomFromText('MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 " "3),\n" " (1 2 3, 5 4 5))'),3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "---------------\n" " POINTM(1 2 3)\n" " POINTM(9 4 3)\n" " POINTM(1 2 3)" msgstr "" #. Tag: para #: reference_lrs.xml:233 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_lrs.xml:239 #, no-c-format msgid "ST_LocateBetween" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:241 #, no-c-format msgid "" "Return a derived geometry collection value with elements that " "match the specified range of measures inclusively. Polygonal elements are " "not supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:248 #, no-c-format msgid "" "geometry ST_LocateBetween " "geometry geomA " "float measure_start float measure_end float offset" msgstr "" #. Tag: para #: reference_lrs.xml:262 #, no-c-format msgid "" "Return a derived geometry collection value with elements that match " "the specified range of measures inclusively. Polygonal elements are not " "supported." msgstr "" #. Tag: para #: reference_lrs.xml:269 #, no-c-format msgid "Availability: 1.1.0 by old name ST_Locate_Between_Measures." msgstr "" #. Tag: para #: reference_lrs.xml:270 #, no-c-format msgid "" "Changed: 2.0.0 - in prior versions this used to be called " "ST_Locate_Between_Measures. The old name has been deprecated and will be " "removed in the future but is still available for backward compatibility." msgstr "" #. Tag: programlisting #: reference_lrs.xml:278 #, no-c-format msgid "" "SELECT ST_AsText(the_geom)\n" " FROM\n" " (SELECT ST_LocateBetween(\n" " ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 " "4 3),\n" " (1 2 3, 5 4 5))'),1.5, 3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "------------------------------------------------------------------------\n" " GEOMETRYCOLLECTION M (LINESTRING M (1 2 3,3 4 2,9 4 3),POINT M (1 2 3))\n" "\n" "--Geometry collections are difficult animals so dump them\n" "--to make them more digestable\n" "SELECT ST_AsText((ST_Dump(the_geom)).geom)\n" " FROM\n" " (SELECT ST_LocateBetween(\n" " ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 " "4 3),\n" " (1 2 3, 5 4 5))'),1.5, 3) As the_geom) As foo;\n" "\n" " st_asewkt\n" "--------------------------------\n" " LINESTRING M (1 2 3,3 4 2,9 4 3)\n" " POINT M (1 2 3)" msgstr "" #. Tag: para #: reference_lrs.xml:285 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_lrs.xml:291 #, no-c-format msgid "ST_LocateBetweenElevations" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:293 #, no-c-format msgid "" "Return a derived geometry (collection) value with elements that intersect " "the specified range of elevations inclusively. Only 3D, 4D LINESTRINGS and " "MULTILINESTRINGS are supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:300 #, no-c-format msgid "" "geometry ST_LocateBetweenElevations " "geometry geom_mline float elevation_start float " "elevation_end" msgstr "" #. Tag: para #: reference_lrs.xml:313 #, no-c-format msgid "" "Return a derived geometry (collection) value with elements that intersect " "the specified range of elevations inclusively. Only 3D, 3DM LINESTRINGS and " "MULTILINESTRINGS are supported." msgstr "" #. Tag: para #: reference_lrs.xml:317 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:325 #, no-c-format msgid "" "SELECT ST_AsEWKT(ST_LocateBetweenElevations(\n" " ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6)'),2,4)) As " "ewelev;\n" " ewelev\n" "----------------------------------------------------------------\n" " MULTILINESTRING((1 2 3,2 3 4))\n" "\n" "SELECT ST_AsEWKT(ST_LocateBetweenElevations(\n" " ST_GeomFromEWKT('LINESTRING(1 2 6, 4 5 -1, 7 8 " "9)'),6,9)) As ewelev;\n" "\n" " ewelev\n" "----------------------------------------------------------------\n" "GEOMETRYCOLLECTION(POINT(1 2 6),LINESTRING(6.1 7.1 6,7 8 9))\n" "\n" "--Geometry collections are difficult animals so dump them\n" "--to make them more digestable\n" "SELECT ST_AsEWKT((ST_Dump(the_geom)).geom)\n" " FROM\n" " (SELECT ST_LocateBetweenElevations(\n" " ST_GeomFromEWKT('LINESTRING(1 2 6, 4 5 -1, 7 8 " "9)'),6,9) As the_geom) As foo;\n" "\n" " st_asewkt\n" "--------------------------------\n" "POINT(1 2 6)\n" "LINESTRING(6.1 7.1 6,7 8 9)" msgstr "" #. Tag: refname #: reference_lrs.xml:339 #, no-c-format msgid "ST_InterpolatePoint" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:341 #, no-c-format msgid "" "Return the value of the measure dimension of a geometry at the " "point closed to the provided point." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:346 #, no-c-format msgid "" "float ST_InterpolatePoint " "geometry line " "geometry point" msgstr "" #. Tag: para #: reference_lrs.xml:358 #, no-c-format msgid "" "Return the value of the measure dimension of a geometry at the point " "closed to the provided point." msgstr "" #. Tag: para #: reference_lrs.xml:360 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:368 #, no-c-format msgid "" "SELECT ST_InterpolatePoint('LINESTRING M (0 0 0, 10 0 20)', 'POINT(5 5)');\n" " st_interpolatepoint \n" " ---------------------\n" " 10" msgstr "" #. Tag: para #: reference_lrs.xml:374 #, no-c-format msgid "" ", , " msgstr "" #. Tag: refname #: reference_lrs.xml:382 #, no-c-format msgid "ST_AddMeasure" msgstr "" #. Tag: refpurpose #: reference_lrs.xml:384 #, no-c-format msgid "" "Return a derived geometry with measure elements linearly " "interpolated between the start and end points. If the geometry has no " "measure dimension, one is added. If the geometry has a measure dimension, it " "is over-written with new values. Only LINESTRINGS and MULTILINESTRINGS are " "supported." msgstr "" #. Tag: funcprototype #: reference_lrs.xml:389 #, no-c-format msgid "" "geometry ST_AddMeasure " "geometry geom_mline float measure_start float measure_end" msgstr "" #. Tag: para #: reference_lrs.xml:402 #, no-c-format msgid "" "Return a derived geometry with measure elements linearly interpolated " "between the start and end points. If the geometry has no measure dimension, " "one is added. If the geometry has a measure dimension, it is over-written " "with new values. Only LINESTRINGS and MULTILINESTRINGS are supported." msgstr "" #. Tag: para #: reference_lrs.xml:404 #, no-c-format msgid "Availability: 1.5.0" msgstr "" #. Tag: programlisting #: reference_lrs.xml:412 #, no-c-format msgid "" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('LINESTRING(1 0, 2 0, 4 0)'),1,4)) As ewelev;\n" " ewelev \n" "--------------------------------\n" " LINESTRINGM(1 0 1,2 0 2,4 0 4)\n" "\n" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('LINESTRING(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;\n" " ewelev \n" "----------------------------------------\n" " LINESTRING(1 0 4 10,2 0 4 20,4 0 4 40)\n" "\n" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('LINESTRINGM(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;\n" " ewelev \n" "----------------------------------------\n" " LINESTRINGM(1 0 10,2 0 20,4 0 40)\n" " \n" "SELECT ST_AsText(ST_AddMeasure(\n" "ST_GeomFromEWKT('MULTILINESTRINGM((1 0 4, 2 0 4, 4 0 4),(1 0 4, 2 0 4, 4 0 " "4))'),10,70)) As ewelev;\n" " ewelev \n" "-----------------------------------------------------------------\n" " MULTILINESTRINGM((1 0 10,2 0 20,4 0 40),(1 0 40,2 0 50,4 0 70))" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_misc.xml.po0000644000000000000000000005773512025614072022101 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_misc.xml:3 #, no-c-format msgid "Miscellaneous Functions" msgstr "" #. Tag: refname #: reference_misc.xml:7 #, no-c-format msgid "ST_Accum" msgstr "" #. Tag: refpurpose #: reference_misc.xml:9 #, no-c-format msgid "Aggregate. Constructs an array of geometries." msgstr "" #. Tag: funcprototype #: reference_misc.xml:14 #, no-c-format msgid "" "geometry[] ST_Accum " "geometry set geomfield" msgstr "" #. Tag: title #: reference_misc.xml:22 reference_misc.xml:64 reference_misc.xml:106 #: reference_misc.xml:158 reference_misc.xml:229 reference_misc.xml:289 #: reference_misc.xml:343 reference_misc.xml:396 reference_misc.xml:438 #: reference_misc.xml:488 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_misc.xml:24 #, no-c-format msgid "Aggregate. Constructs an array of geometries." msgstr "" #. Tag: para #: reference_misc.xml:25 reference_misc.xml:68 reference_misc.xml:109 #: reference_misc.xml:255 reference_misc.xml:309 reference_misc.xml:355 #, no-c-format msgid "" "Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was " "introduced." msgstr "" #. Tag: para #: reference_misc.xml:26 reference_misc.xml:113 reference_misc.xml:357 #: reference_misc.xml:447 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_misc.xml:27 reference_misc.xml:69 reference_misc.xml:110 #: reference_misc.xml:183 reference_misc.xml:358 reference_misc.xml:448 #, no-c-format msgid "&curve_support;" msgstr "" #. Tag: para #: reference_misc.xml:28 reference_misc.xml:70 reference_misc.xml:111 #: reference_misc.xml:256 reference_misc.xml:310 reference_misc.xml:359 #: reference_misc.xml:449 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_misc.xml:29 reference_misc.xml:71 reference_misc.xml:112 #: reference_misc.xml:257 reference_misc.xml:311 reference_misc.xml:360 #: reference_misc.xml:450 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: title #: reference_misc.xml:34 reference_misc.xml:76 reference_misc.xml:118 #: reference_misc.xml:188 reference_misc.xml:262 reference_misc.xml:316 #: reference_misc.xml:364 reference_misc.xml:408 reference_misc.xml:455 #: reference_misc.xml:499 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_misc.xml:36 #, no-c-format msgid "" "SELECT (ST_Accum(the_geom)) As all_em, ST_AsText((ST_Accum(the_geom))[1]) As " "grabone,\n" "(ST_Accum(the_geom))[2:4] as grab_rest\n" " FROM (SELECT ST_MakePoint(a*CAST(random()*10 As " "integer), a*CAST(random()*10 As integer), a*CAST(random()*10 As integer)) As " "the_geom\n" " FROM generate_series(1,4) a) As foo;\n" "\n" "all_em|grabone | grab_rest\n" "\n" "-------------------------------------------------------------------------------" "+\n" "\n" " {0101000080000000000000144000000000000024400000000000001040:\n" " 0101000080000000000\n" "00018400000000000002C400000000000003040:\n" "0101000080000000000000354000000000000038400000000000001840:\n" "010100008000000000000040400000000000003C400000000000003040} |\n" " POINT(5 10) | {010100008000000000000018400000000000002C400000000000003040:\n" " 0101000080000000000000354000000000000038400000000000001840:\n" " 010100008000000000000040400000000000003C400000000000003040}\n" "(1 row)" msgstr "" #. Tag: title #: reference_misc.xml:41 reference_misc.xml:83 reference_misc.xml:125 #: reference_misc.xml:195 reference_misc.xml:268 reference_misc.xml:322 #: reference_misc.xml:369 reference_misc.xml:415 reference_misc.xml:462 #: reference_misc.xml:506 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_misc.xml:49 #, no-c-format msgid "Box2D" msgstr "" #. Tag: refpurpose #: reference_misc.xml:51 #, no-c-format msgid "" "Returns a BOX2D representing the maximum extents of the geometry." "" msgstr "" #. Tag: funcprototype #: reference_misc.xml:56 #, no-c-format msgid "" "box2d Box2D geometry " " geomA" msgstr "" #. Tag: para #: reference_misc.xml:66 #, no-c-format msgid "" "Returns a BOX2D representing the maximum extents of the geometry." msgstr "" #. Tag: programlisting #: reference_misc.xml:78 #, no-c-format msgid "" "SELECT Box2D(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6)'));\n" " box2d\n" " ---------\n" " BOX(1 2,5 6)\n" "\n" " SELECT Box2D(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 " "150505,220227 150406)'));\n" " box2d\n" " --------\n" " BOX(220186.984375 150406,220288.25 150506.140625)" msgstr "" #. Tag: para #: reference_misc.xml:85 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_misc.xml:91 #, no-c-format msgid "Box3D" msgstr "" #. Tag: refpurpose #: reference_misc.xml:93 #, no-c-format msgid "" "Returns a BOX3D representing the maximum extents of the geometry." "" msgstr "" #. Tag: funcprototype #: reference_misc.xml:98 #, no-c-format msgid "" "box3d Box3D geometry " " geomA" msgstr "" #. Tag: para #: reference_misc.xml:108 #, no-c-format msgid "" "Returns a BOX3D representing the maximum extents of the geometry." msgstr "" #. Tag: programlisting #: reference_misc.xml:120 #, no-c-format msgid "" "SELECT Box3D(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 5, 5 6 5)'));\n" " Box3d\n" " ---------\n" " BOX3D(1 2 3,5 6 5)\n" "\n" " SELECT Box3D(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 " "150505 1,220227 150406 1)'));\n" " Box3d\n" " --------\n" " BOX3D(220227 150406 1,220268 150415 1)" msgstr "" #. Tag: para #: reference_misc.xml:127 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_misc.xml:133 #, no-c-format msgid "ST_EstimatedExtent" msgstr "" #. Tag: refpurpose #: reference_misc.xml:135 #, no-c-format msgid "" "Return the 'estimated' extent of the given spatial table. The " "estimated is taken from the geometry column's statistics. The current schema " "will be used if not specified." msgstr "" #. Tag: funcsynopsis #: reference_misc.xml:141 #, no-c-format msgid "" " box2d ST_EstimatedExtent text schema_name text table_name text geocolumn_name box2d " "ST_EstimatedExtent text table_name text geocolumn_name " msgstr "" #. Tag: para #: reference_misc.xml:160 #, no-c-format msgid "" "Return the 'estimated' extent of the given spatial table. The " "estimated is taken from the geometry column's statistics. The current schema " "will be used if not specified." msgstr "" #. Tag: para #: reference_misc.xml:164 #, no-c-format msgid "" "For PostgreSQL>=8.0.0 statistics are gathered by VACUUM ANALYZE and " "resulting extent will be about 95% of the real one." msgstr "" #. Tag: para #: reference_misc.xml:169 #, no-c-format msgid "" "In absence of statistics (empty table or no ANALYZE called) this function " "returns NULL. Prior to version 1.5.4 an exception was thrown instead." msgstr "" #. Tag: para #: reference_misc.xml:177 #, no-c-format msgid "" "For PostgreSQL<8.0.0 statistics are gathered by update_geometry_stats() " "and resulting extent will be exact." msgstr "" #. Tag: para #: reference_misc.xml:180 #, no-c-format msgid "Availability: 1.0.0" msgstr "" #. Tag: para #: reference_misc.xml:181 #, no-c-format msgid "Changed: 2.1.0. Up to 2.0.x this was called ST_Estimated_Extent." msgstr "" #. Tag: programlisting #: reference_misc.xml:190 #, no-c-format msgid "" "SELECT ST_EstimatedExtent('ny', 'edges', 'the_geom');\n" "--result--\n" "BOX(-8877653 4912316,-8010225.5 5589284)\n" "\n" "SELECT ST_EstimatedExtent('feature_poly', 'the_geom');\n" "--result--\n" "BOX(-124.659652709961 24.6830825805664,-67.7798080444336 49.0012092590332)" msgstr "" #. Tag: refname #: reference_misc.xml:202 #, no-c-format msgid "ST_Expand" msgstr "" #. Tag: refpurpose #: reference_misc.xml:203 #, no-c-format msgid "" "Returns bounding box expanded in all directions from the bounding box of the " "input geometry. Uses double-precision" msgstr "" #. Tag: funcsynopsis #: reference_misc.xml:207 #, no-c-format msgid "" " geometry ST_Expand " "geometry g1 " "float units_to_expand box2d " "ST_Expand box2d " "g1 float " "units_to_expand " " box3d ST_Expand " "box3d g1 " "float units_to_expand " msgstr "" #. Tag: para #: reference_misc.xml:231 #, no-c-format msgid "" "This function returns a bounding box expanded in all directions from the " "bounding box of the input geometry, by an amount specified in the second " "argument. Uses double-precision. Very useful for distance() queries, or " "bounding box queries to add an index filter to the query." msgstr "" #. Tag: para #: reference_misc.xml:235 #, no-c-format msgid "" "There are 3 variants of this. The one that takes a geometry will return a " "POLYGON geometry representation of the bounding box and is the most commonly " "used variant." msgstr "" #. Tag: para #: reference_misc.xml:237 #, no-c-format msgid "" "ST_Expand is similar in concept to ST_Buffer except while buffer expands the " "geometry in all directions, ST_Expand expands the bounding box an x,y,z unit " "amount." msgstr "" #. Tag: para #: reference_misc.xml:239 #, no-c-format msgid "" "Units are in the units of the spatial reference system in use denoted by the " "SRID" msgstr "" #. Tag: para #: reference_misc.xml:242 #, no-c-format msgid "" "Pre 1.3, ST_Expand was used in conjunction with distance to do indexable " "queries. Something of the form the_geom && ST_Expand('POINT(10 " "20)', 10) AND ST_Distance(the_geom, 'POINT(10 20)') < 10 Post 1.2, " "this was replaced with the easier ST_DWithin construct." msgstr "" #. Tag: para #: reference_misc.xml:248 #, no-c-format msgid "" "Bounding boxes of all geometries are currently 2-d even if they are 3-" "dimensional geometries." msgstr "" #. Tag: para #: reference_misc.xml:252 #, no-c-format msgid "" "Availability: 1.5.0 behavior changed to output double precision instead of " "float4 coordinates." msgstr "" #. Tag: para #: reference_misc.xml:263 #, no-c-format msgid "" "Examples below use US National Atlas Equal Area (SRID=2163) which is a meter " "projection" msgstr "" #. Tag: programlisting #: reference_misc.xml:264 #, no-c-format msgid "" "\n" "--10 meter expanded box around bbox of a linestring\n" "SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 " "110701,2312892 110714)', 2163),10) As box2d);\n" " st_expand\n" "------------------------------------\n" " BOX(2312882 110666,2312990 110724)\n" "\n" "--10 meter expanded 3d box of a 3d box\n" "SELECT ST_Expand(CAST('BOX3D(778783 2951741 1,794875 2970042.61545891 10)' " "As box3d),10)\n" " st_expand\n" "-----------------------------------------------------\n" " BOX3D(778773 2951731 -9,794885 2970052.61545891 20)\n" "\n" " --10 meter geometry astext rep of a expand box around a point geometry\n" " SELECT ST_AsEWKT(ST_Expand(ST_GeomFromEWKT('SRID=2163;POINT(2312980 " "110676)'),10));\n" " st_asewkt\n" "-------------------------------------------------------------------------------------------------\n" " SRID=2163;POLYGON((2312970 110666,2312970 110686,2312990 110686,2312990 " "110666,2312970 110666))" msgstr "" #. Tag: para #: reference_misc.xml:269 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_misc.xml:275 #, no-c-format msgid "ST_Extent" msgstr "" #. Tag: refpurpose #: reference_misc.xml:276 #, no-c-format msgid "" "an aggregate function that returns the bounding box that bounds rows of " "geometries." msgstr "" #. Tag: funcprototype #: reference_misc.xml:281 #, no-c-format msgid "" "box2d ST_Extent " "geometry set geomfield" msgstr "" #. Tag: para #: reference_misc.xml:291 #, no-c-format msgid "" "ST_Extent returns a bounding box that encloses a set of geometries. The " "ST_Extent function is an \"aggregate\" function in the terminology of SQL. " "That means that it operates on lists of data, in the same way the SUM() and " "AVG() functions do." msgstr "" #. Tag: para #: reference_misc.xml:294 reference_misc.xml:348 #, no-c-format msgid "" "Since it returns a bounding box, the spatial Units are in the units of the " "spatial reference system in use denoted by the SRID" msgstr "" #. Tag: para #: reference_misc.xml:295 #, no-c-format msgid "" "ST_Extent is similar in concept to Oracle Spatial/Locator's SDO_AGGR_MBR" msgstr "" #. Tag: para #: reference_misc.xml:297 #, no-c-format msgid "" "Since ST_Extent returns a bounding box, the SRID meta-data is lost. Use " "ST_SetSRID to force it back into a geometry with SRID meta data. The " "coordinates are in the units of the spatial ref of the orginal geometries." msgstr "" #. Tag: para #: reference_misc.xml:302 #, no-c-format msgid "" "ST_Extent will return boxes with only an x and y component even with (x,y,z) " "coordinate geometries. To maintain x,y,z use ST_3DExtent instead." msgstr "" #. Tag: para #: reference_misc.xml:306 #, no-c-format msgid "Availability: 1.4.0" msgstr "" #. Tag: para #: reference_misc.xml:317 #, no-c-format msgid "Examples below use Massachusetts State Plane ft (SRID=2249)" msgstr "" #. Tag: programlisting #: reference_misc.xml:318 #, no-c-format msgid "" "SELECT ST_Extent(the_geom) as bextent FROM sometable;\n" " st_bextent\n" "------------------------------------\n" "BOX(739651.875 2908247.25,794875.8125 2970042.75)\n" "\n" "\n" "--Return extent of each category of geometries\n" "SELECT ST_Extent(the_geom) as bextent\n" "FROM sometable\n" "GROUP BY category ORDER BY category;\n" "\n" " bextent " "| name\n" "----------------------------------------------------+----------------\n" " BOX(778783.5625 2951741.25,794875.8125 2970042.75) | A\n" " BOX(751315.8125 2919164.75,765202.6875 2935417.25) | B\n" " BOX(739651.875 2917394.75,756688.375 2935866) | C\n" "\n" " --Force back into a geometry\n" " -- and render the extended text representation of that geometry\n" "SELECT ST_SetSRID(ST_Extent(the_geom),2249) as bextent FROM sometable;\n" "\n" " bextent\n" "--------------------------------------------------------------------------------\n" " SRID=2249;POLYGON((739651.875 2908247.25,739651.875 2970042.75,794875.8125 " "2970042.75,\n" " 794875.8125 2908247.25,739651.875 2908247.25))" msgstr "" #. Tag: para #: reference_misc.xml:323 #, no-c-format msgid "" ", , , " msgstr "" #. Tag: refname #: reference_misc.xml:329 #, no-c-format msgid "ST_3DExtent" msgstr "" #. Tag: refpurpose #: reference_misc.xml:330 #, no-c-format msgid "" "an aggregate function that returns the box3D bounding box that bounds rows " "of geometries." msgstr "" #. Tag: funcprototype #: reference_misc.xml:335 #, no-c-format msgid "" "box3d ST_3DExtent " "geometry set geomfield" msgstr "" #. Tag: para #: reference_misc.xml:345 #, no-c-format msgid "" "ST_3DExtent returns a box3d (includes Z coordinate) bounding box that " "encloses a set of geometries. The ST_3DExtent function is an \"aggregate\" " "function in the terminology of SQL. That means that it operates on lists of " "data, in the same way the SUM() and AVG() functions do." msgstr "" #. Tag: para #: reference_misc.xml:351 #, no-c-format msgid "" "Since ST_3DExtent returns a bounding box, the SRID meta-data is lost. Use " "ST_SetSRID to force it back into a geometry with SRID meta data. The " "coordinates are in the units of the spatial ref of the orginal geometries." msgstr "" #. Tag: para #: reference_misc.xml:356 #, no-c-format msgid "Changed: 2.0.0 In prior versions this used to be called ST_Extent3D" msgstr "" #. Tag: programlisting #: reference_misc.xml:365 #, no-c-format msgid "" "SELECT ST_3DExtent(foo.the_geom) As b3extent\n" "FROM (SELECT ST_MakePoint(x,y,z) As the_geom\n" " FROM generate_series(1,3) As x\n" " CROSS JOIN generate_series(1,2) As y\n" " CROSS JOIN generate_series(0,2) As Z) As foo;\n" " b3extent\n" "--------------------\n" " BOX3D(1 1 0,3 2 2)\n" "\n" "--Get the extent of various elevated circular strings\n" "SELECT ST_3DExtent(foo.the_geom) As b3extent\n" "FROM (SELECT ST_Translate(ST_Force_3DZ(ST_LineToCurve(ST_Buffer(ST_MakePoint" "(x,y),1))),0,0,z) As the_geom\n" " FROM generate_series(1,3) As x\n" " CROSS JOIN generate_series(1,2) As y\n" " CROSS JOIN generate_series(0,2) As Z) As foo;\n" "\n" " b3extent\n" "--------------------\n" " BOX3D(1 0 0,4 2 2)" msgstr "" #. Tag: para #: reference_misc.xml:370 #, no-c-format msgid ", " msgstr "" #. Tag: refname #: reference_misc.xml:377 #, no-c-format msgid "Find_SRID" msgstr "" #. Tag: refpurpose #: reference_misc.xml:379 #, no-c-format msgid "" "The syntax is find_srid(<db/schema>, <table>, <column>) " "and the function returns the integer SRID of the specified column by " "searching through the GEOMETRY_COLUMNS table." msgstr "" #. Tag: funcprototype #: reference_misc.xml:386 #, no-c-format msgid "" "integer Find_SRID " "varchar a_schema_name varchar a_table_name varchar " "a_geomfield_name" msgstr "" #. Tag: para #: reference_misc.xml:398 #, no-c-format msgid "" "The syntax is find_srid(<db/schema>, <table>, <column>) " "and the function returns the integer SRID of the specified column by " "searching through the GEOMETRY_COLUMNS table. If the geometry column has not " "been properly added with the AddGeometryColumns() function, this function " "will not work either." msgstr "" #. Tag: programlisting #: reference_misc.xml:410 #, no-c-format msgid "" "SELECT Find_SRID('public', 'tiger_us_state_2007', 'the_geom_4269');\n" "find_srid\n" "----------\n" "4269" msgstr "" #. Tag: refname #: reference_misc.xml:423 #, no-c-format msgid "ST_Mem_Size" msgstr "" #. Tag: refpurpose #: reference_misc.xml:425 #, no-c-format msgid "" "Returns the amount of space (in bytes) the geometry takes." msgstr "" #. Tag: funcprototype #: reference_misc.xml:430 #, no-c-format msgid "" "integer ST_Mem_Size " "geometry geomA" msgstr "" #. Tag: para #: reference_misc.xml:440 #, no-c-format msgid "Returns the amount of space (in bytes) the geometry takes." msgstr "" #. Tag: para #: reference_misc.xml:441 #, no-c-format msgid "" "This is a nice compliment to PostgreSQL built in functions pg_size_pretty, " "pg_relation_size, pg_total_relation_size." msgstr "" #. Tag: para #: reference_misc.xml:442 #, no-c-format msgid "" "pg_relation_size which gives the byte size of a table may return byte size " "lower than ST_Mem_Size. This is because pg_relation_size does not add " "toasted table contribution and large geometries are stored in TOAST tables." msgstr "" #. Tag: para #: reference_misc.xml:444 #, no-c-format msgid "" "pg_total_relation_size - includes, the table, the toasted tables, and the " "indexes." msgstr "" #. Tag: programlisting #: reference_misc.xml:457 #, no-c-format msgid "" "--Return how much byte space Boston takes up in our Mass data set\n" "SELECT pg_size_pretty(SUM(ST_Mem_Size(the_geom))) as totgeomsum,\n" "pg_size_pretty(SUM(CASE WHEN town = 'BOSTON' THEN st_mem_size(the_geom) ELSE " "0 END)) As bossum,\n" "CAST(SUM(CASE WHEN town = 'BOSTON' THEN st_mem_size(the_geom) ELSE 0 END)" "*1.00 /\n" " SUM(st_mem_size(the_geom))*100 As numeric(10,2)) As perbos\n" "FROM towns;\n" "\n" "totgeomsum bossum perbos\n" "---------- ------ ------\n" "1522 kB 30 kB 1.99\n" "\n" "\n" "SELECT ST_Mem_Size(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 " "150505,220227 150406)'));\n" "\n" "---\n" "73\n" "\n" "--What percentage of our table is taken up by just the geometry\n" "SELECT pg_total_relation_size('public.neighborhoods') As fulltable_size, sum" "(ST_Mem_Size(the_geom)) As geomsize,\n" "sum(ST_Mem_Size(the_geom))*1.00/pg_total_relation_size('public." "neighborhoods')*100 As pergeom\n" "FROM neighborhoods;\n" "fulltable_size geomsize pergeom\n" "------------------------------------------------\n" "262144 96238 36.71188354492187500000" msgstr "" #. Tag: refname #: reference_misc.xml:470 #, no-c-format msgid "ST_Point_Inside_Circle" msgstr "" #. Tag: refpurpose #: reference_misc.xml:472 #, no-c-format msgid "" "Is the point geometry insert circle defined by center_x, center_y, radius" msgstr "" #. Tag: funcprototype #: reference_misc.xml:477 #, no-c-format msgid "" "boolean ST_Point_Inside_Circle " "geometry a_point " "float center_x " "float center_y " "float radius" msgstr "" #. Tag: para #: reference_misc.xml:490 #, no-c-format msgid "" "The syntax for this functions is point_inside_circle(<geometry>,<" "circle_center_x>,<circle_center_y>,<radius>). Returns the " "true if the geometry is a point and is inside the circle. Returns false " "otherwise." msgstr "" #. Tag: para #: reference_misc.xml:494 #, no-c-format msgid "This only works for points as the name suggests" msgstr "" #. Tag: programlisting #: reference_misc.xml:501 #, no-c-format msgid "" "SELECT ST_Point_Inside_Circle(ST_Point(1,2), 0.5, 2, 3);\n" " st_point_inside_circle\n" "------------------------\n" " t" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_transaction.xml.po0000644000000000000000000002566612025614072023471 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_transaction.xml:3 #, no-c-format msgid "Long Transactions Support" msgstr "" #. Tag: para #: reference_transaction.xml:5 #, no-c-format msgid "" "This module and associated pl/pgsql functions have been implemented to " "provide long locking support required by Web Feature Service specification." msgstr "" #. Tag: para #: reference_transaction.xml:10 #, no-c-format msgid "" "Users must use serializable transaction level otherwise " "locking mechanism would break." msgstr "" #. Tag: refname #: reference_transaction.xml:18 #, no-c-format msgid "AddAuth" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:20 #, no-c-format msgid "" "Add an authorization token to be used in current transaction." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:25 #, no-c-format msgid "" "boolean AddAuth text " " auth_token" msgstr "" #. Tag: title #: reference_transaction.xml:33 reference_transaction.xml:83 #: reference_transaction.xml:130 reference_transaction.xml:177 #: reference_transaction.xml:241 reference_transaction.xml:284 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_transaction.xml:35 #, no-c-format msgid "" "Add an authorization token to be used in current transaction." msgstr "" #. Tag: para #: reference_transaction.xml:37 #, no-c-format msgid "" "Creates/adds to a temp table called temp_lock_have_table the current " "transaction identifier and authorization token key." msgstr "" #. Tag: para #: reference_transaction.xml:40 reference_transaction.xml:92 #: reference_transaction.xml:138 reference_transaction.xml:185 #: reference_transaction.xml:248 reference_transaction.xml:289 #, no-c-format msgid "Availability: 1.1.3" msgstr "" #. Tag: title #: reference_transaction.xml:45 reference_transaction.xml:98 #: reference_transaction.xml:144 reference_transaction.xml:191 #: reference_transaction.xml:253 reference_transaction.xml:294 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_transaction.xml:47 #, no-c-format msgid "" "SELECT LockRow('towns', '353', 'priscilla');\n" " BEGIN TRANSACTION;\n" " SELECT AddAuth('joey');\n" " UPDATE towns SET the_geom = ST_Translate" "(the_geom,2,2) WHERE gid = 353;\n" " COMMIT;\n" "\n" "\n" " ---Error--\n" " ERROR: UPDATE where \"gid\" = '353' requires authorization " "'priscilla'" msgstr "" #. Tag: title #: reference_transaction.xml:52 reference_transaction.xml:105 #: reference_transaction.xml:151 reference_transaction.xml:198 #: reference_transaction.xml:260 reference_transaction.xml:301 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_transaction.xml:60 #, no-c-format msgid "CheckAuth" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:62 #, no-c-format msgid "" "Creates trigger on a table to prevent/allow updates and deletes of rows " "based on authorization token." msgstr "" #. Tag: funcsynopsis #: reference_transaction.xml:66 #, no-c-format msgid "" " integer CheckAuth " "text a_schema_name " "text a_table_name " "text a_key_column_name integer " "CheckAuth text " "a_table_name text " "a_key_column_name " msgstr "" #. Tag: para #: reference_transaction.xml:85 #, no-c-format msgid "" "Creates trigger on a table to prevent/allow updates and deletes of rows " "based on authorization token. Identify rows using <rowid_col> column." msgstr "" #. Tag: para #: reference_transaction.xml:87 #, no-c-format msgid "" "If a_schema_name is not passed in, then searches for table in current schema." msgstr "" #. Tag: para #: reference_transaction.xml:88 #, no-c-format msgid "" "If an authorization trigger already exists on this table function errors." msgstr "" #. Tag: para #: reference_transaction.xml:89 #, no-c-format msgid "If Transaction support is not enabled, function throws an exception." msgstr "" #. Tag: programlisting #: reference_transaction.xml:100 #, no-c-format msgid "" "SELECT CheckAuth('public', 'towns', 'gid');\n" " result\n" " ------\n" " 0" msgstr "" #. Tag: refname #: reference_transaction.xml:113 #, no-c-format msgid "DisableLongTransactions" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:115 #, no-c-format msgid "" "Disable long transaction support. This function removes the long " "transaction support metadata tables, and drops all triggers attached to lock-" "checked tables." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:122 #, no-c-format msgid "" "text DisableLongTransactions " "" msgstr "" #. Tag: para #: reference_transaction.xml:132 #, no-c-format msgid "" "Disable long transaction support. This function removes the long " "transaction support metadata tables, and drops all triggers attached to lock-" "checked tables." msgstr "" #. Tag: para #: reference_transaction.xml:135 #, no-c-format msgid "" "Drops meta table called authorization_table and a view " "called authorized_tables and all triggers called " "checkauthtrigger" msgstr "" #. Tag: programlisting #: reference_transaction.xml:146 #, no-c-format msgid "" "SELECT DisableLongTransactions();\n" "--result--\n" "Long transactions support disabled" msgstr "" #. Tag: refname #: reference_transaction.xml:159 #, no-c-format msgid "EnableLongTransactions" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:161 #, no-c-format msgid "" "Enable long transaction support. This function creates the " "required metadata tables, needs to be called once before using the other " "functions in this section. Calling it twice is harmless." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:169 #, no-c-format msgid "" "text EnableLongTransactions " "" msgstr "" #. Tag: para #: reference_transaction.xml:179 #, no-c-format msgid "" "Enable long transaction support. This function creates the required " "metadata tables, needs to be called once before using the other functions in " "this section. Calling it twice is harmless." msgstr "" #. Tag: para #: reference_transaction.xml:183 #, no-c-format msgid "" "Creates a meta table called authorization_table and a " "view called authorized_tables" msgstr "" #. Tag: programlisting #: reference_transaction.xml:193 #, no-c-format msgid "" "SELECT EnableLongTransactions();\n" "--result--\n" "Long transactions support enabled" msgstr "" #. Tag: refname #: reference_transaction.xml:206 #, no-c-format msgid "LockRow" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:208 #, no-c-format msgid "Set lock/authorization for specific row in table" msgstr "" #. Tag: funcsynopsis #: reference_transaction.xml:212 #, no-c-format msgid "" " integer LockRow " "text a_schema_name " "text a_table_name " "text a_row_key " "text an_auth_token " "timestamp expire_dt " " integer LockRow text a_table_name text a_row_key text an_auth_token timestamp expire_dt integer " "LockRow text " "a_table_name text " "a_row_key text " "an_auth_token " msgstr "" #. Tag: para #: reference_transaction.xml:243 #, no-c-format msgid "" "Set lock/authorization for specific row in table <authid> is a text " "value, <expires> is a timestamp defaulting to now()+1hour. Returns 1 " "if lock has been assigned, 0 otherwise (already locked by other auth)" msgstr "" #. Tag: programlisting #: reference_transaction.xml:255 #, no-c-format msgid "" "SELECT LockRow('public', 'towns', '2', 'joey');\n" "LockRow\n" "-------\n" "1\n" "\n" "--Joey has already locked the record and Priscilla is out of luck\n" "SELECT LockRow('public', 'towns', '2', 'priscilla');\n" "LockRow\n" "-------\n" "0" msgstr "" #. Tag: refname #: reference_transaction.xml:268 #, no-c-format msgid "UnlockRows" msgstr "" #. Tag: refpurpose #: reference_transaction.xml:270 #, no-c-format msgid "" "Remove all locks held by specified authorization id. Returns the " "number of locks released." msgstr "" #. Tag: funcprototype #: reference_transaction.xml:276 #, no-c-format msgid "" "integer UnlockRows " "text auth_token" msgstr "" #. Tag: para #: reference_transaction.xml:286 #, no-c-format msgid "" "Remove all locks held by specified authorization id. Returns the " "number of locks released." msgstr "" #. Tag: programlisting #: reference_transaction.xml:296 #, no-c-format msgid "" "SELECT LockRow('towns', '353', 'priscilla');\n" " SELECT LockRow('towns', '2', 'priscilla');\n" " SELECT UnLockRows('priscilla');\n" " UnLockRows\n" " ------------\n" " 2" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_sfcgal.xml.po0000644000000000000000000001257212143770113022373 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2013-05-12 08:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_sfcgal.xml:4 #, no-c-format msgid "Using SFCGAL Advanced 2D/3D functions" msgstr "" #. Tag: para #: reference_sfcgal.xml:5 #, no-c-format msgid "TODO Introduction part" msgstr "" #. Tag: para #: reference_sfcgal.xml:8 #, no-c-format msgid "TODO Install part" msgstr "" #. Tag: refname #: reference_sfcgal.xml:14 #, no-c-format msgid "ST_Extrude" msgstr "" #. Tag: refpurpose #: reference_sfcgal.xml:16 #, no-c-format msgid "Extrude a surface to a related volume" msgstr "" #. Tag: funcprototype #: reference_sfcgal.xml:21 #, no-c-format msgid "" "geometry ST_Extrude " "geometry geom " "float x " "float y " "float z" msgstr "" #. Tag: title #: reference_sfcgal.xml:32 reference_sfcgal.xml:61 reference_sfcgal.xml:90 #: reference_sfcgal.xml:119 reference_sfcgal.xml:148 reference_sfcgal.xml:177 #: reference_sfcgal.xml:206 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_sfcgal.xml:34 reference_sfcgal.xml:63 reference_sfcgal.xml:92 #: reference_sfcgal.xml:121 reference_sfcgal.xml:150 reference_sfcgal.xml:179 #: reference_sfcgal.xml:208 #, no-c-format msgid "Availability" msgstr "" #. Tag: para #: reference_sfcgal.xml:35 reference_sfcgal.xml:64 reference_sfcgal.xml:93 #: reference_sfcgal.xml:122 reference_sfcgal.xml:151 reference_sfcgal.xml:180 #: reference_sfcgal.xml:209 #, no-c-format msgid "&sfcgal_required;" msgstr "" #. Tag: para #: reference_sfcgal.xml:36 reference_sfcgal.xml:65 reference_sfcgal.xml:94 #: reference_sfcgal.xml:123 reference_sfcgal.xml:152 reference_sfcgal.xml:181 #: reference_sfcgal.xml:210 #, no-c-format msgid "&Z_support;" msgstr "" #. Tag: para #: reference_sfcgal.xml:37 reference_sfcgal.xml:66 reference_sfcgal.xml:95 #: reference_sfcgal.xml:124 reference_sfcgal.xml:153 reference_sfcgal.xml:182 #: reference_sfcgal.xml:211 #, no-c-format msgid "&P_support;" msgstr "" #. Tag: para #: reference_sfcgal.xml:38 reference_sfcgal.xml:67 reference_sfcgal.xml:96 #: reference_sfcgal.xml:125 reference_sfcgal.xml:154 reference_sfcgal.xml:183 #: reference_sfcgal.xml:212 #, no-c-format msgid "&T_support;" msgstr "" #. Tag: refname #: reference_sfcgal.xml:46 #, no-c-format msgid "ST_StraightSkeleton" msgstr "" #. Tag: refpurpose #: reference_sfcgal.xml:48 #, no-c-format msgid "Compute a straight skeleton from a geometry" msgstr "" #. Tag: funcprototype #: reference_sfcgal.xml:53 #, no-c-format msgid "" "geometry ST_StraightSkeleton " "geometry geom" msgstr "" #. Tag: refname #: reference_sfcgal.xml:75 #, no-c-format msgid "ST_IsPlanar" msgstr "" #. Tag: refpurpose #: reference_sfcgal.xml:77 #, no-c-format msgid "Check if a surface is or not planar" msgstr "" #. Tag: funcprototype #: reference_sfcgal.xml:82 #, no-c-format msgid "" "boolean ST_IsPlanar " "geometry geom" msgstr "" #. Tag: refname #: reference_sfcgal.xml:104 #, no-c-format msgid "ST_Orientation" msgstr "" #. Tag: refpurpose #: reference_sfcgal.xml:106 #, no-c-format msgid "Determine surface orientation" msgstr "" #. Tag: funcprototype #: reference_sfcgal.xml:111 #, no-c-format msgid "" "integer ST_Orientation " "geometry geom" msgstr "" #. Tag: refname #: reference_sfcgal.xml:133 #, no-c-format msgid "ST_ForceLHR" msgstr "" #. Tag: refpurpose #: reference_sfcgal.xml:135 #, no-c-format msgid "Force LHR orientation" msgstr "" #. Tag: funcprototype #: reference_sfcgal.xml:140 #, no-c-format msgid "" "geometry ST_ForceLHR " "geometry geom" msgstr "" #. Tag: refname #: reference_sfcgal.xml:161 #, no-c-format msgid "ST_MinkowskiSum" msgstr "" #. Tag: refpurpose #: reference_sfcgal.xml:163 #, no-c-format msgid "Perform Minkowski sum" msgstr "" #. Tag: funcprototype #: reference_sfcgal.xml:168 #, no-c-format msgid "" "geometry ST_Minkowski " "geometry geom1 " "geometry geom2" msgstr "" #. Tag: refname #: reference_sfcgal.xml:191 #, no-c-format msgid "ST_Tesselate" msgstr "" #. Tag: refpurpose #: reference_sfcgal.xml:193 #, no-c-format msgid "Perform surface Tesselation" msgstr "" #. Tag: funcprototype #: reference_sfcgal.xml:198 #, no-c-format msgid "" "geometry ST_Tesselate " "geometry geom" msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/postgis.xml.po0000644000000000000000000000345512025614072020606 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-09-14 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: postgis.xml:106 #, no-c-format msgid "PostGIS &last_release_version; Manual" msgstr "" #. Tag: affiliation #: postgis.xml:114 #, no-c-format msgid "" "clever elephant
Victoria British Columbia Canada pramsey@cleverelephant.ca" msgstr "" #. Tag: para #: postgis.xml:124 #, no-c-format msgid "" "PostGIS is an extension to the PostgreSQL object-relational database system " "which allows GIS (Geographic Information Systems) objects to be stored in " "the database. PostGIS includes support for GiST-based R-Tree spatial " "indexes, and functions for analysis and processing of GIS objects." msgstr "" #. Tag: para #: postgis.xml:133 #, no-c-format msgid "This is the manual for version &last_release_version;" msgstr "" #. Tag: para #: postgis.xml:134 #, no-c-format msgid "" "This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License. Feel free to use this material any way you like, but we ask that you " "attribute credit to the PostGIS Project and wherever possible, a link back " "to http://www.postgis.org." msgstr "" postgis-2.1.2+dfsg.orig/doc/po/pt_BR/reference_raster.xml.po0000644000000000000000000154012212035636370022440 0ustar rootroot# SOME DESCRIPTIVE TITLE. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2012-10-11 21:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Tag: title #: reference_raster.xml:3 #, no-c-format msgid "Raster Reference" msgstr "" #. Tag: para #: reference_raster.xml:5 #, no-c-format msgid "" "The functions given below are the ones which a user of PostGIS Raster is " "likely to need and which are currently available in PostGIS Raster. There " "are other functions which are required support functions to the raster " "objects which are not of use to a general user." msgstr "" #. Tag: para #: reference_raster.xml:9 #, no-c-format msgid "" "raster is a new PostGIS type for storing and analyzing " "raster data." msgstr "" #. Tag: para #: reference_raster.xml:10 #, no-c-format msgid "" "For loading rasters from raster files please refer to " msgstr "" #. Tag: para #: reference_raster.xml:12 #, no-c-format msgid "" "For the examples in this reference we will be using a raster table of dummy " "rasters - Formed with the following code" msgstr "" #. Tag: programlisting #: reference_raster.xml:13 #, no-c-format msgid "" "CREATE TABLE dummy_rast(rid integer, rast raster);\n" "INSERT INTO dummy_rast(rid, rast)\n" "VALUES (1,\n" "('01' -- little endian (uint8 ndr)\n" "|| \n" "'0000' -- version (uint16 0)\n" "||\n" "'0000' -- nBands (uint16 0)\n" "||\n" "'0000000000000040' -- scaleX (float64 2)\n" "||\n" "'0000000000000840' -- scaleY (float64 3)\n" "||\n" "'000000000000E03F' -- ipX (float64 0.5)\n" "||\n" "'000000000000E03F' -- ipY (float64 0.5)\n" "||\n" "'0000000000000000' -- skewX (float64 0)\n" "||\n" "'0000000000000000' -- skewY (float64 0)\n" "||\n" "'00000000' -- SRID (int32 0)\n" "||\n" "'0A00' -- width (uint16 10)\n" "||\n" "'1400' -- height (uint16 20)\n" ")::raster\n" "),\n" "-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0\n" "(2, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||\n" "'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' " "||\n" "'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::" "raster);" msgstr "" #. Tag: para #: reference_raster.xml:17 #, no-c-format msgid "" "This section lists the PostgreSQL data types specifically created to support " "raster functionality." msgstr "" #. Tag: title #: reference_raster.xml:20 #, no-c-format msgid "Raster Support Data types" msgstr "" #. Tag: refname #: reference_raster.xml:24 #, no-c-format msgid "geomval" msgstr "" #. Tag: refpurpose #: reference_raster.xml:25 #, no-c-format msgid "" "A spatial datatype with two fields - geom (holding a geometry object) and " "val (holding a double precision pixel value from a raster band)." msgstr "" #. Tag: title #: reference_raster.xml:30 reference_raster.xml:49 reference_raster.xml:121 #: reference_raster.xml:171 reference_raster.xml:211 reference_raster.xml:257 #: reference_raster.xml:439 reference_raster.xml:613 reference_raster.xml:652 #: reference_raster.xml:689 reference_raster.xml:730 reference_raster.xml:820 #: reference_raster.xml:1022 reference_raster.xml:1109 #: reference_raster.xml:1203 reference_raster.xml:1248 #: reference_raster.xml:1287 reference_raster.xml:1321 #: reference_raster.xml:1356 reference_raster.xml:1390 #: reference_raster.xml:1435 reference_raster.xml:1489 #: reference_raster.xml:1526 reference_raster.xml:1566 #: reference_raster.xml:1621 reference_raster.xml:1673 #: reference_raster.xml:1717 reference_raster.xml:1752 #: reference_raster.xml:1788 reference_raster.xml:1824 #: reference_raster.xml:1859 reference_raster.xml:1893 #: reference_raster.xml:1927 reference_raster.xml:1971 #: reference_raster.xml:2033 reference_raster.xml:2087 #: reference_raster.xml:2122 reference_raster.xml:2162 #: reference_raster.xml:2209 reference_raster.xml:2251 #: reference_raster.xml:2305 reference_raster.xml:2340 #: reference_raster.xml:2415 reference_raster.xml:2458 #: reference_raster.xml:2504 reference_raster.xml:2556 #: reference_raster.xml:2599 reference_raster.xml:2644 #: reference_raster.xml:2687 reference_raster.xml:2753 #: reference_raster.xml:2829 reference_raster.xml:2916 #: reference_raster.xml:3004 reference_raster.xml:3081 #: reference_raster.xml:3215 reference_raster.xml:3254 #: reference_raster.xml:3293 reference_raster.xml:3336 #: reference_raster.xml:3383 reference_raster.xml:3427 #: reference_raster.xml:3465 reference_raster.xml:3540 #: reference_raster.xml:3595 reference_raster.xml:3657 #: reference_raster.xml:3735 reference_raster.xml:3800 #: reference_raster.xml:3887 reference_raster.xml:3926 #: reference_raster.xml:3996 reference_raster.xml:4102 #: reference_raster.xml:4222 reference_raster.xml:4283 #: reference_raster.xml:4438 reference_raster.xml:4480 #: reference_raster.xml:4517 reference_raster.xml:4602 #: reference_raster.xml:4693 reference_raster.xml:4781 #: reference_raster.xml:4842 reference_raster.xml:4900 #: reference_raster.xml:5031 reference_raster.xml:5093 #: reference_raster.xml:5138 reference_raster.xml:5183 #: reference_raster.xml:5222 reference_raster.xml:5287 #: reference_raster.xml:5401 reference_raster.xml:5513 #: reference_raster.xml:5651 reference_raster.xml:5747 #: reference_raster.xml:5984 reference_raster.xml:6080 #: reference_raster.xml:6172 reference_raster.xml:6284 #: reference_raster.xml:6334 reference_raster.xml:6419 #: reference_raster.xml:6480 reference_raster.xml:6530 #: reference_raster.xml:6580 reference_raster.xml:6630 #: reference_raster.xml:6679 reference_raster.xml:6729 #: reference_raster.xml:6779 reference_raster.xml:6829 #: reference_raster.xml:6893 reference_raster.xml:6956 #: reference_raster.xml:7000 reference_raster.xml:7045 #: reference_raster.xml:7112 reference_raster.xml:7201 #: reference_raster.xml:7286 reference_raster.xml:7367 #: reference_raster.xml:7448 reference_raster.xml:7577 #: reference_raster.xml:7661 reference_raster.xml:7741 #: reference_raster.xml:7860 reference_raster.xml:7932 #: reference_raster.xml:8029 reference_raster.xml:8122 #, no-c-format msgid "Description" msgstr "" #. Tag: para #: reference_raster.xml:31 #, no-c-format msgid "" "geomval is a compound data type consisting of a geometry object referenced " "by the .geom field and val, a double precision value that represents the " "pixel value at a particular geometric location in a raster band. It is used " "by the ST_DumpAsPolygon and Raster intersection family of functions as an " "output type to explode a raster band into geometry polygons." msgstr "" #. Tag: title #: reference_raster.xml:37 reference_raster.xml:107 reference_raster.xml:157 #: reference_raster.xml:200 reference_raster.xml:245 reference_raster.xml:292 #: reference_raster.xml:487 reference_raster.xml:628 reference_raster.xml:664 #: reference_raster.xml:702 reference_raster.xml:750 reference_raster.xml:857 #: reference_raster.xml:1074 reference_raster.xml:1163 #: reference_raster.xml:1223 reference_raster.xml:1266 #: reference_raster.xml:1300 reference_raster.xml:1335 #: reference_raster.xml:1369 reference_raster.xml:1413 #: reference_raster.xml:1468 reference_raster.xml:1505 #: reference_raster.xml:1543 reference_raster.xml:1588 #: reference_raster.xml:1644 reference_raster.xml:1696 #: reference_raster.xml:1731 reference_raster.xml:1767 #: reference_raster.xml:1803 reference_raster.xml:1838 #: reference_raster.xml:1872 reference_raster.xml:1906 #: reference_raster.xml:1941 reference_raster.xml:1991 #: reference_raster.xml:2047 reference_raster.xml:2101 #: reference_raster.xml:2137 reference_raster.xml:2187 #: reference_raster.xml:2222 reference_raster.xml:2280 #: reference_raster.xml:2318 reference_raster.xml:2393 #: reference_raster.xml:2430 reference_raster.xml:2472 #: reference_raster.xml:2524 reference_raster.xml:2567 #: reference_raster.xml:2612 reference_raster.xml:2655 #: reference_raster.xml:2700 reference_raster.xml:2775 #: reference_raster.xml:2854 reference_raster.xml:2948 #: reference_raster.xml:3019 reference_raster.xml:3138 #: reference_raster.xml:3271 reference_raster.xml:3306 #: reference_raster.xml:3355 reference_raster.xml:3400 #: reference_raster.xml:3440 reference_raster.xml:3478 #: reference_raster.xml:3560 reference_raster.xml:3622 #: reference_raster.xml:3685 reference_raster.xml:3764 #: reference_raster.xml:3852 reference_raster.xml:3900 #: reference_raster.xml:3949 reference_raster.xml:4010 #: reference_raster.xml:4137 reference_raster.xml:4237 #: reference_raster.xml:4311 reference_raster.xml:4456 #: reference_raster.xml:4556 reference_raster.xml:4647 #: reference_raster.xml:4738 reference_raster.xml:4818 #: reference_raster.xml:4860 reference_raster.xml:5008 #: reference_raster.xml:5070 reference_raster.xml:5117 #: reference_raster.xml:5157 reference_raster.xml:5198 #: reference_raster.xml:5263 reference_raster.xml:5328 #: reference_raster.xml:5440 reference_raster.xml:5612 #: reference_raster.xml:5705 reference_raster.xml:5910 #: reference_raster.xml:6042 reference_raster.xml:6142 #: reference_raster.xml:6260 reference_raster.xml:6295 #: reference_raster.xml:6369 reference_raster.xml:6449 #: reference_raster.xml:6499 reference_raster.xml:6549 #: reference_raster.xml:6599 reference_raster.xml:6649 #: reference_raster.xml:6698 reference_raster.xml:6748 #: reference_raster.xml:6798 reference_raster.xml:6867 #: reference_raster.xml:6916 reference_raster.xml:7147 #: reference_raster.xml:7232 reference_raster.xml:7313 #: reference_raster.xml:7394 reference_raster.xml:7478 #: reference_raster.xml:7607 reference_raster.xml:7688 #: reference_raster.xml:7768 reference_raster.xml:7881 #: reference_raster.xml:7965 reference_raster.xml:8060 #: reference_raster.xml:8153 #, no-c-format msgid "See Also" msgstr "" #. Tag: refname #: reference_raster.xml:44 #, no-c-format msgid "addbandarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:45 #, no-c-format msgid "" "A composite type used as input into the ST_AddBand function " "defining the attributes and initial value of the new band." msgstr "" #. Tag: para #: reference_raster.xml:50 #, no-c-format msgid "" "A composite type used as input into the ST_AddBand function defining " "the attributes and initial value of the new band." msgstr "" #. Tag: term #: reference_raster.xml:55 #, no-c-format msgid "index integer" msgstr "" #. Tag: para #: reference_raster.xml:60 #, no-c-format msgid "" "1-based value indicating the position where the new band will be added " "amongst the raster's bands. If NULL, the new band will be added at the end " "of the raster's bands." msgstr "" #. Tag: term #: reference_raster.xml:67 #, no-c-format msgid "pixeltype text" msgstr "" #. Tag: para #: reference_raster.xml:72 #, no-c-format msgid "" "Pixel type of the new band. One of defined pixel types as described in ." msgstr "" #. Tag: term #: reference_raster.xml:79 #, no-c-format msgid "initialvalue double precision" msgstr "" #. Tag: para #: reference_raster.xml:84 #, no-c-format msgid "Initial value that all pixels of new band will be set to." msgstr "" #. Tag: term #: reference_raster.xml:91 #, no-c-format msgid "nodataval double precision" msgstr "" #. Tag: para #: reference_raster.xml:96 #, no-c-format msgid "" "NODATA value of the new band. If NULL, the new band will not have a NODATA " "value assigned." msgstr "" #. Tag: refname #: reference_raster.xml:116 #, no-c-format msgid "rastbandarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:117 #, no-c-format msgid "" "A composite type for use when needing to express a raster and a " "band index of that raster." msgstr "" #. Tag: para #: reference_raster.xml:122 #, no-c-format msgid "" "A composite type for use when needing to express a raster and a band " "index of that raster." msgstr "" #. Tag: term #: reference_raster.xml:128 #, no-c-format msgid "rast raster" msgstr "" #. Tag: para #: reference_raster.xml:133 #, no-c-format msgid "The raster in question/" msgstr "" #. Tag: term #: reference_raster.xml:140 reference_raster.xml:263 #, no-c-format msgid "nband integer" msgstr "" #. Tag: para #: reference_raster.xml:145 #, no-c-format msgid "1-based value indicating the band of raster" msgstr "" #. Tag: refname #: reference_raster.xml:166 #, no-c-format msgid "raster" msgstr "" #. Tag: refpurpose #: reference_raster.xml:167 #, no-c-format msgid "raster spatial data type." msgstr "" #. Tag: para #: reference_raster.xml:172 #, no-c-format msgid "" "raster is a spatial data type used to represent raster data such as those " "imported from jpegs, tiffs, pngs, digital elevation models. Each raster has " "1 or more bands each having a set of pixel values. Rasters can be " "georeferenced." msgstr "" #. Tag: para #: reference_raster.xml:175 #, no-c-format msgid "" "Requires PostGIS be compiled with GDAL support. Currently rasters can be " "implicitly converted to geometry type, but the conversion returns the of the raster. This auto casting may be " "removed in the near future so don't rely on it." msgstr "" #. Tag: title #: reference_raster.xml:181 #, no-c-format msgid "Casting Behavior" msgstr "" #. Tag: para #: reference_raster.xml:182 #, no-c-format msgid "" "This section lists the automatic as well as explicit casts allowed for this " "data type" msgstr "" #. Tag: entry #: reference_raster.xml:187 #, no-c-format msgid "Cast To" msgstr "" #. Tag: entry #: reference_raster.xml:188 #, no-c-format msgid "Behavior" msgstr "" #. Tag: entry #: reference_raster.xml:191 #, no-c-format msgid "geometry" msgstr "" #. Tag: entry #: reference_raster.xml:192 #, no-c-format msgid "automatic" msgstr "" #. Tag: refname #: reference_raster.xml:207 #, no-c-format msgid "reclassarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:208 #, no-c-format msgid "" "A composite type used as input into the ST_Reclass function " "defining the behavior of reclassification." msgstr "" #. Tag: para #: reference_raster.xml:212 #, no-c-format msgid "" "A composite type used as input into the ST_Reclass function defining " "the behavior of reclassification." msgstr "" #. Tag: term #: reference_raster.xml:215 #, no-c-format msgid "nband integer" msgstr "" #. Tag: para #: reference_raster.xml:216 #, no-c-format msgid "The band number of band to reclassify." msgstr "" #. Tag: term #: reference_raster.xml:219 #, no-c-format msgid "reclassexpr text" msgstr "" #. Tag: para #: reference_raster.xml:220 #, no-c-format msgid "" "range expression consisting of comma delimited range:map_range mappings. : " "to define mapping that defines how to map old band values to new band " "values. ( means >, ) means less than, ] < or equal, [ means > or " "equal" msgstr "" #. Tag: programlisting #: reference_raster.xml:221 #, no-c-format msgid "" "1. [a-b] = a <= x <= b\n" "\n" "2. (a-b] = a < x <= b\n" "\n" "3. [a-b) = a <= x < b\n" "\n" "4. (a-b) = a < x < b" msgstr "" #. Tag: para #: reference_raster.xml:222 #, no-c-format msgid "( notation is optional so a-b means the same as (a-b)" msgstr "" #. Tag: term #: reference_raster.xml:227 #, no-c-format msgid "pixeltype text" msgstr "" #. Tag: para #: reference_raster.xml:228 #, no-c-format msgid "" "One of defined pixel types as described in " msgstr "" #. Tag: term #: reference_raster.xml:231 #, no-c-format msgid "nodataval double precision" msgstr "" #. Tag: para #: reference_raster.xml:232 #, no-c-format msgid "" "Value to treat as no data. For image outputs that support transparency, " "these will be blank." msgstr "" #. Tag: title #: reference_raster.xml:237 #, no-c-format msgid "Example: Reclassify band 2 as an 8BUI where 255 is nodata value" msgstr "" #. Tag: programlisting #: reference_raster.xml:238 #, no-c-format msgid "" "SELECT ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', " "255)::reclassarg;" msgstr "" #. Tag: title #: reference_raster.xml:241 #, no-c-format msgid "Example: Reclassify band 1 as an 1BB and no nodata value defined" msgstr "" #. Tag: programlisting #: reference_raster.xml:242 #, no-c-format msgid "SELECT ROW(1, '0-100]:0, (100-255:1', '1BB', NULL)::reclassarg;" msgstr "" #. Tag: refname #: reference_raster.xml:252 #, no-c-format msgid "unionarg" msgstr "" #. Tag: refpurpose #: reference_raster.xml:253 #, no-c-format msgid "" "A composite type used as input into the ST_Union function " "defining the bands to be processed and behavior of the UNION operation." msgstr "" #. Tag: para #: reference_raster.xml:258 #, no-c-format msgid "" "A composite type used as input into the ST_Union function defining the " "bands to be processed and behavior of the UNION operation." msgstr "" #. Tag: para #: reference_raster.xml:268 #, no-c-format msgid "1-based value indicating the band of each input raster to be processed." msgstr "" #. Tag: term #: reference_raster.xml:275 #, no-c-format msgid "uniontype text" msgstr "" #. Tag: para #: reference_raster.xml:280 #, no-c-format msgid "" "Type of UNION operation. One of defined types as described in ." msgstr "" #. Tag: title #: reference_raster.xml:302 #, no-c-format msgid "Raster Management" msgstr "" #. Tag: refname #: reference_raster.xml:305 #, no-c-format msgid "AddRasterConstraints" msgstr "" #. Tag: refpurpose #: reference_raster.xml:307 #, no-c-format msgid "" "Adds raster constraints to a loaded raster table for a specific column that " "constrains spatial ref, scaling, blocksize, alignment, bands, band type and " "a flag to denote if raster column is regularly blocked. The table must be " "loaded with data for the constraints to be inferred. Returns true of the " "constraint setting was accomplished and if issues a notice." msgstr "" #. Tag: funcsynopsis #: reference_raster.xml:311 #, no-c-format msgid "" " boolean AddRasterConstraints name rasttable name rastcolumn boolean srid boolean scale_x boolean scale_y boolean blocksize_x boolean " "blocksize_y boolean same_alignment " "boolean regular_blocking boolean " "num_bands=true boolean pixel_types=true " "boolean " "nodata_values=true boolean out_db=true " "boolean extent=true boolean " "AddRasterConstraints name rasttable name rastcolumn text[] VARIADIC constraints boolean " "AddRasterConstraints name rastschema name rasttable name rastcolumn text[] VARIADIC constraints boolean " "AddRasterConstraints name rastschema name rasttable name rastcolumn boolean srid=true " "boolean scale_x=true boolean " "scale_y=true boolean blocksize_x=true " "boolean blocksize_y=true boolean " "same_alignment=true boolean regular_blocking=true boolean " "num_bands=true boolean pixel_types=true " "boolean " "nodata_values=true boolean out_db=true " "boolean extent=true " msgstr "" #. Tag: para #: reference_raster.xml:441 #, no-c-format msgid "" "Generates constraints on a raster column that are used to display " "information in the raster_columns raster catalog. The " "rastschema is the name of the table schema the table " "resides in. The srid must be an integer value reference " "to an entry in the SPATIAL_REF_SYS table." msgstr "" #. Tag: para #: reference_raster.xml:446 #, no-c-format msgid "" "raster2pgsql loader uses this function to register raster " "tables" msgstr "" #. Tag: para #: reference_raster.xml:447 #, no-c-format msgid "" "Valid constraint names to pass in: refer to for more details." msgstr "" #. Tag: para #: reference_raster.xml:449 #, no-c-format msgid "blocksize sets both X and Y blocksize" msgstr "" #. Tag: para #: reference_raster.xml:450 #, no-c-format msgid "" "blocksize_x sets X tile (width in pixels of each tile)" msgstr "" #. Tag: para #: reference_raster.xml:451 #, no-c-format msgid "" "blocksize_y sets Y tile (height in pixels of each tile)" msgstr "" #. Tag: para #: reference_raster.xml:452 #, no-c-format msgid "" "extent computes extent of whole table and applys " "constraint all rasters must be within that extent" msgstr "" #. Tag: para #: reference_raster.xml:454 #, no-c-format msgid "num_bands number of bands" msgstr "" #. Tag: para #: reference_raster.xml:455 #, no-c-format msgid "" "pixel_types reads array of pixel types for each band " "ensure all band n have same pixel type" msgstr "" #. Tag: para #: reference_raster.xml:456 #, no-c-format msgid "" "regular_blocking apply informational flag to denote all " "tiles are regularly blocked" msgstr "" #. Tag: para #: reference_raster.xml:457 #, no-c-format msgid "" "same_alignment ensures they all have same alignment " "meaning any two tiles you compare will return true for. Refer to" msgstr "" #. Tag: para #: reference_raster.xml:458 #, no-c-format msgid "srid ensures all have same srid" msgstr "" #. Tag: para #: reference_raster.xml:459 #, no-c-format msgid "More -- any listed as inputs into the above functions" msgstr "" #. Tag: para #: reference_raster.xml:462 #, no-c-format msgid "" "This function infers the constraints from the data already present in the " "table. As such for it to work, you must create the raster column first and " "then load it with data." msgstr "" #. Tag: para #: reference_raster.xml:467 #, no-c-format msgid "" "If you need to load more data in your tables after you have already applied " "constraints, you may want to run the DropRasterConstraints if the extent of " "your data has changed." msgstr "" #. Tag: para #: reference_raster.xml:471 reference_raster.xml:620 reference_raster.xml:1114 #: reference_raster.xml:2126 reference_raster.xml:2259 #: reference_raster.xml:2419 reference_raster.xml:2462 #: reference_raster.xml:2514 reference_raster.xml:3934 #: reference_raster.xml:4000 reference_raster.xml:4123 #: reference_raster.xml:4226 reference_raster.xml:4290 #: reference_raster.xml:4443 reference_raster.xml:4908 #: reference_raster.xml:5187 reference_raster.xml:5252 #: reference_raster.xml:5317 reference_raster.xml:5663 #: reference_raster.xml:5800 reference_raster.xml:6002 #: reference_raster.xml:6099 reference_raster.xml:6219 #: reference_raster.xml:6343 reference_raster.xml:6423 #: reference_raster.xml:6488 reference_raster.xml:6538 #: reference_raster.xml:6588 reference_raster.xml:6638 #: reference_raster.xml:6687 reference_raster.xml:6737 #: reference_raster.xml:6787 reference_raster.xml:7870 #, no-c-format msgid "Availability: 2.0.0" msgstr "" #. Tag: title #: reference_raster.xml:475 #, no-c-format msgid "Examples: Apply all possible constraints on column based on data" msgstr "" #. Tag: programlisting #: reference_raster.xml:477 #, no-c-format msgid "" "CREATE TABLE myrasters(rid SERIAL primary key, rast raster);\n" "INSERT INTO myrasters(rast)\n" "SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, " "0,4326), 1, '8BSI'::text, -129, NULL);\n" "\n" "SELECT AddRasterConstraints('myrasters'::name, 'rast'::name);\n" "\n" "\n" "-- verify if registered correctly in the raster_columns view --\n" "SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, " "pixel_types, nodata_values\n" " FROM raster_columns\n" " WHERE r_table_name = 'myrasters';\n" " \n" " srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | " "pixel_types| nodata_values\n" "------+---------+---------+-------------+-------------+-----------" "+-------------+---------------\n" " 4326 | 2 | 2 | 1000 | 1000 | 1 | " "{8BSI} | {0}" msgstr "" #. Tag: title #: reference_raster.xml:481 #, no-c-format msgid "Examples: Apply single constraint" msgstr "" #. Tag: programlisting #: reference_raster.xml:483 #, no-c-format msgid "" "CREATE TABLE public.myrasters2(rid SERIAL primary key, rast raster);\n" "INSERT INTO myrasters2(rast)\n" "SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, " "0,4326), 1, '8BSI'::text, -129, NULL);\n" "\n" "SELECT AddRasterConstraints('public'::name, 'myrasters2'::name, 'rast'::" "name,'regular_blocking', 'blocksize');\n" "-- get notice--\n" "NOTICE: Adding regular blocking constraint\n" "INFO: The regular_blocking constraint is just a flag indicating that the " "column \"rast\" is regularly blocked. As no function exist yet to assert " "that a raster column is regularly blocked, it is up to the end-user to " "ensure that the column is truly regularly blocked.\n" "CONTEXT: PL/pgSQL function \"addrasterconstraints\" line 85 at assignment\n" "NOTICE: Adding blocksize-X constraint\n" "NOTICE: Adding blocksize-Y constraint" msgstr "" #. Tag: para #: reference_raster.xml:489 #, no-c-format msgid "" ", , , , , " msgstr "" #. Tag: refname #: reference_raster.xml:495 #, no-c-format msgid "DropRasterConstraints" msgstr "" #. Tag: refpurpose #: reference_raster.xml:497 #, no-c-format msgid "" "Drops PostGIS raster constraints that refer to a raster table column. Useful " "if you need to reload data or update your raster column data." msgstr "" #. Tag: funcsynopsis #: reference_raster.xml:501 #, no-c-format msgid "" " boolean DropRasterConstraints name rasttable name rastcolumn boolean srid boolean scale_x boolean scale_y boolean blocksize_x boolean " "blocksize_y boolean same_alignment " "boolean regular_blocking boolean " "num_bands=true boolean pixel_types=true " "boolean " "nodata_values=true boolean out_db=true " "boolean extent=true boolean " "DropRasterConstraints name rastschema name rasttable name rastcolumn boolean srid=true " "boolean scale_x=true boolean " "scale_y=true boolean blocksize_x=true " "boolean blocksize_y=true boolean " "same_alignment=true boolean regular_blocking=true boolean " "num_bands=true boolean pixel_types=true " "boolean " "nodata_values=true boolean out_db=true " "boolean extent=true boolean " "DropRasterConstraints name rastschema name rasttable name rastcolumn text[] constraints " msgstr "" #. Tag: para #: reference_raster.xml:614 #, no-c-format msgid "" "Drops PostGIS raster constraints that refer to a raster table column that " "were added by . Useful if you " "need to load more data or update your raster column data. You do not need to " "do this if you want to get rid of a raster table or a raster column." msgstr "" #. Tag: para #: reference_raster.xml:616 #, no-c-format msgid "To drop a raster table use the standard" msgstr "" #. Tag: programlisting #: reference_raster.xml:616 #, no-c-format msgid "DROP TABLE mytable" msgstr "" #. Tag: para #: reference_raster.xml:617 #, no-c-format msgid "" "To drop just a raster column and leave the rest of the table, use standard " "SQL" msgstr "" #. Tag: programlisting #: reference_raster.xml:617 #, no-c-format msgid "ALTER TABLE mytable DROP COLUMN rast" msgstr "" #. Tag: para #: reference_raster.xml:618 #, no-c-format msgid "" "the table will disappear from the raster_columns catalog " "if the column or table is dropped. However if only the constraints are " "dropped, the raster column will still be listed in the " "raster_columns catalog, but there will be no other " "information about it aside from the column name and table." msgstr "" #. Tag: title #: reference_raster.xml:623 reference_raster.xml:658 reference_raster.xml:696 #: reference_raster.xml:1118 reference_raster.xml:1216 #: reference_raster.xml:1260 reference_raster.xml:1293 #: reference_raster.xml:1328 reference_raster.xml:1362 #: reference_raster.xml:1497 reference_raster.xml:1535 #: reference_raster.xml:1578 reference_raster.xml:1634 #: reference_raster.xml:1686 reference_raster.xml:1724 #: reference_raster.xml:1759 reference_raster.xml:1795 #: reference_raster.xml:1831 reference_raster.xml:1865 #: reference_raster.xml:1899 reference_raster.xml:1933 #: reference_raster.xml:1984 reference_raster.xml:2040 #: reference_raster.xml:2094 reference_raster.xml:2130 #: reference_raster.xml:2180 reference_raster.xml:2215 #: reference_raster.xml:2273 reference_raster.xml:2311 #: reference_raster.xml:2386 reference_raster.xml:2423 #: reference_raster.xml:2467 reference_raster.xml:2519 #: reference_raster.xml:2562 reference_raster.xml:2607 #: reference_raster.xml:2650 reference_raster.xml:2695 #: reference_raster.xml:2762 reference_raster.xml:2845 #: reference_raster.xml:2937 reference_raster.xml:3012 #: reference_raster.xml:3224 reference_raster.xml:3265 #: reference_raster.xml:3299 reference_raster.xml:3347 #: reference_raster.xml:3390 reference_raster.xml:3471 #: reference_raster.xml:3554 reference_raster.xml:3615 #: reference_raster.xml:3677 reference_raster.xml:3756 #: reference_raster.xml:3811 reference_raster.xml:3893 #: reference_raster.xml:3942 reference_raster.xml:4004 #: reference_raster.xml:4230 reference_raster.xml:4447 #: reference_raster.xml:4490 reference_raster.xml:4730 #: reference_raster.xml:4853 reference_raster.xml:5043 #: reference_raster.xml:5113 reference_raster.xml:5150 #: reference_raster.xml:5667 reference_raster.xml:6006 #: reference_raster.xml:6226 reference_raster.xml:6291 #: reference_raster.xml:6492 reference_raster.xml:6542 #: reference_raster.xml:6592 reference_raster.xml:6642 #: reference_raster.xml:6691 reference_raster.xml:6741 #: reference_raster.xml:6791 reference_raster.xml:6862 #: reference_raster.xml:6911 reference_raster.xml:6966 #: reference_raster.xml:7011 reference_raster.xml:7056 #: reference_raster.xml:7140 reference_raster.xml:7227 #: reference_raster.xml:7308 reference_raster.xml:7389 #: reference_raster.xml:7470 reference_raster.xml:7602 #: reference_raster.xml:7683 reference_raster.xml:7763 #: reference_raster.xml:7960 reference_raster.xml:8055 #: reference_raster.xml:8148 #, no-c-format msgid "Examples" msgstr "" #. Tag: programlisting #: reference_raster.xml:625 #, no-c-format msgid "" "SELECT DropRasterConstraints ('myrasters','rast');\n" "----RESULT output ---\n" "t\n" "\n" "-- verify change in raster_columns --\n" "SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, " "pixel_types, nodata_values\n" " FROM raster_columns\n" " WHERE r_table_name = 'myrasters';\n" " \n" " srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | " "pixel_types| nodata_values\n" "------+---------+---------+-------------+-------------+-----------" "+-------------+---------------\n" " 0 | | | | | " "| |" msgstr "" #. Tag: refname #: reference_raster.xml:636 #, no-c-format msgid "PostGIS_Raster_Lib_Build_Date" msgstr "" #. Tag: refpurpose #: reference_raster.xml:638 #, no-c-format msgid "Reports full raster library build date." msgstr "" #. Tag: funcprototype #: reference_raster.xml:643 #, no-c-format msgid "" "text PostGIS_Raster_Lib_Build_Date " "" msgstr "" #. Tag: para #: reference_raster.xml:654 #, no-c-format msgid "Reports raster build date" msgstr "" #. Tag: programlisting #: reference_raster.xml:660 #, no-c-format msgid "" "SELECT PostGIS_Raster_Lib_Build_Date();\n" "postgis_raster_lib_build_date\n" "-----------------------------\n" "2010-04-28 21:15:10" msgstr "" #. Tag: refname #: reference_raster.xml:672 #, no-c-format msgid "PostGIS_Raster_Lib_Version" msgstr "" #. Tag: refpurpose #: reference_raster.xml:674 #, no-c-format msgid "" "Reports full raster version and build configuration infos." msgstr "" #. Tag: funcprototype #: reference_raster.xml:680 #, no-c-format msgid "" "text PostGIS_Raster_Lib_Version " "" msgstr "" #. Tag: para #: reference_raster.xml:691 #, no-c-format msgid "Reports full raster version and build configuration infos." msgstr "" #. Tag: programlisting #: reference_raster.xml:698 #, no-c-format msgid "" "SELECT PostGIS_Raster_Lib_Version();\n" "postgis_raster_lib_version\n" "-----------------------------\n" " 2.0.0" msgstr "" #. Tag: refname #: reference_raster.xml:712 #, no-c-format msgid "ST_GDALDrivers" msgstr "" #. Tag: refpurpose #: reference_raster.xml:714 #, no-c-format msgid "" "Returns a list of raster formats supported by your lib gdal. These are the " "formats you can output your raster using ST_AsGDALRaster." msgstr "" #. Tag: funcprototype #: reference_raster.xml:719 #, no-c-format msgid "" "setof record ST_GDALDrivers " "integer OUT idx " "text OUT short_name text OUT long_name text OUT create_options" msgstr "" #. Tag: para #: reference_raster.xml:732 #, no-c-format msgid "" "Returns a list of raster formats short_name,long_name and creator options of " "each format supported by your lib gdal. Use the short_name as input in the " "format parameter of . Options vary depending on what drivers your libgdal was compiled with. " "create_options returns an xml formatted set of " "CreationOptionList/Option consisting of name and optional type, description and set of VALUE " "for each creator option for the specific driver." msgstr "" #. Tag: para #: reference_raster.xml:735 reference_raster.xml:1042 #: reference_raster.xml:4537 reference_raster.xml:4635 #: reference_raster.xml:4726 reference_raster.xml:4806 #, no-c-format msgid "Availability: 2.0.0 - requires GDAL >= 1.6.0." msgstr "" #. Tag: title #: reference_raster.xml:739 #, no-c-format msgid "Examples: List of Drivers" msgstr "" #. Tag: programlisting #: reference_raster.xml:741 #, no-c-format msgid "" "SELECT short_name, long_name\n" "FROM st_gdaldrivers()\n" "ORDER BY short_name;\n" " short_name | long_name\n" "----------------+--------------------------------------\n" "AAIGrid | Arc/Info ASCII Grid\n" "DTED | DTED Elevation Raster\n" "EHdr | ESRI .hdr Labelled\n" "FIT | FIT Image\n" "GIF | Graphics Interchange Format (.gif)\n" "GSAG | Golden Software ASCII Grid (.grd)\n" "GSBG | Golden Software Binary Grid (.grd)\n" "GTiff | GeoTIFF\n" "HF2 | HF2/HFZ heightfield raster\n" "HFA | Erdas Imagine Images (.img)\n" "ILWIS | ILWIS Raster Map\n" "INGR | Intergraph Raster\n" "JPEG | JPEG JFIF\n" "KMLSUPEROVERLAY | Kml Super Overlay\n" "NITF | National Imagery Transmission Format\n" "PNG | Portable Network Graphics\n" "R | R Object Data Store\n" "SAGA | SAGA GIS Binary Grid (.sdat)\n" "SRTMHGT | SRTMHGT File Format\n" "USGSDEM | USGS Optional ASCII DEM (and CDED)\n" "VRT | Virtual Raster\n" "XPM | X11 PixMap Format" msgstr "" #. Tag: title #: reference_raster.xml:743 #, no-c-format msgid "Example: List of options for each driver" msgstr "" #. Tag: programlisting #: reference_raster.xml:744 #, no-c-format msgid "" "-- Output the create options XML column of JPEG as a table --\n" "-- Note you can use these creator options in ST_AsGDALRaster options " "argument\n" "SELECT (xpath('@name', g.opt))[1]::text As oname,\n" " (xpath('@type', g.opt))[1]::text As otype,\n" " (xpath('@description', g.opt))[1]::text As descrip\n" "FROM (SELECT unnest(xpath('/CreationOptionList/Option', create_options::" "xml)) As opt\n" "FROM st_gdaldrivers()\n" "WHERE short_name = 'JPEG') As g;\n" "\n" " oname | otype | descrip\n" "-------------+---------+-----------------------------\n" " PROGRESSIVE | boolean |\n" " QUALITY | int | good=100, bad=0, default=75\n" " WORLDFILE | boolean |" msgstr "" #. Tag: programlisting #: reference_raster.xml:746 #, no-c-format msgid "" "-- raw xml output for creator options for GeoTiff --\n" "SELECT create_options\n" "FROM st_gdaldrivers()\n" "WHERE short_name = 'GTiff';\n" "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "
--Return point 20% along 2d line SELECT ST_AsEWKT(ST_LineInterpolatePoint(the_line, 0.20)) FROM (SELECT ST_GeomFromEWKT('LINESTRING(25 50, 100 125, 150 190)') as the_line) As foo; st_asewkt ---------------- POINT(51.5974135047432 76.5974135047432) --Return point mid-way of 3d line SELECT ST_AsEWKT(ST_LineInterpolatePoint(the_line, 0.5)) FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6, 6 7 8)') as the_line) As foo; st_asewkt -------------------- POINT(3.5 4.5 5.5) --find closest point on a line to a point or other geometry SELECT ST_AsText(ST_LineInterpolatePoint(foo.the_line, ST_LineLocatePoint(foo.the_line, ST_GeomFromText('POINT(4 3)')))) FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo; st_astext ---------------- POINT(3 4) See Also , , , ST_LineLocatePoint Returns a float between 0 and 1 representing the location of the closest point on LineString to the given Point, as a fraction of total 2d line length. float ST_LineLocatePoint geometry a_linestring geometry a_point Description Returns a float between 0 and 1 representing the location of the closest point on LineString to the given Point, as a fraction of total 2d line length. You can use the returned location to extract a Point () or a substring (). This is useful for approximating numbers of addresses Availability: 1.1.0 Changed: 2.1.0. Up to 2.0.x this was called ST_Line_Locate_Point. Examples --Rough approximation of finding the street number of a point along the street --Note the whole foo thing is just to generate dummy data that looks --like house centroids and street --We use ST_DWithin to exclude --houses too far away from the street to be considered on the street SELECT ST_AsText(house_loc) As as_text_house_loc, startstreet_num + CAST( (endstreet_num - startstreet_num) * ST_LineLocatePoint(street_line, house_loc) As integer) As street_num FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 3 4)') As street_line, ST_MakePoint(x*1.01,y*1.03) As house_loc, 10 As startstreet_num, 20 As endstreet_num FROM generate_series(1,3) x CROSS JOIN generate_series(2,4) As y) As foo WHERE ST_DWithin(street_line, house_loc, 0.2); as_text_house_loc | street_num -------------------+------------ POINT(1.01 2.06) | 10 POINT(2.02 3.09) | 15 POINT(3.03 4.12) | 20 --find closest point on a line to a point or other geometry SELECT ST_AsText(ST_LineInterpolatePoint(foo.the_line, ST_LineLocatePoint(foo.the_line, ST_GeomFromText('POINT(4 3)')))) FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo; st_astext ---------------- POINT(3 4) See Also , , , ST_LineSubstring Return a linestring being a substring of the input one starting and ending at the given fractions of total 2d length. Second and third arguments are float8 values between 0 and 1. geometry ST_LineSubstring geometry a_linestring float startfraction float endfraction Description Return a linestring being a substring of the input one starting and ending at the given fractions of total 2d length. Second and third arguments are float8 values between 0 and 1. This only works with LINESTRINGs. To use with contiguous MULTILINESTRINGs use in conjunction with . If 'start' and 'end' have the same value this is equivalent to . See for computing the line location nearest to a Point. Since release 1.1.1 this function also interpolates M and Z values (when present), while prior releases set them to unspecified values. Availability: 1.1.0, Z and M supported added in 1.1.1 Changed: 2.1.0. Up to 2.0.x this was called ST_LineSubstring. &Z_support; Examples --Return the approximate 1/3 mid-range part of a linestring SELECT ST_AsText(ST_Line_SubString(ST_GeomFromText('LINESTRING(25 50, 100 125, 150 190)'), 0.333, 0.666)); st_astext ------------------------------------------------------------------------------------------------ LINESTRING(69.2846934853974 94.2846934853974,100 125,111.700356260683 140.210463138888) --The below example simulates a while loop in --SQL using PostgreSQL generate_series() to cut all --linestrings in a table to 100 unit segments -- of which no segment is longer than 100 units -- units are measured in the SRID units of measurement -- It also assumes all geometries are LINESTRING or contiguous MULTILINESTRING --and no geometry is longer than 100 units*10000 --for better performance you can reduce the 10000 --to match max number of segments you expect SELECT field1, field2, ST_LineSubstring(the_geom, 100.00*n/length, CASE WHEN 100.00*(n+1) < length THEN 100.00*(n+1)/length ELSE 1 END) As the_geom FROM (SELECT sometable.field1, sometable.field2, ST_LineMerge(sometable.the_geom) AS the_geom, ST_Length(sometable.the_geom) As length FROM sometable ) AS t CROSS JOIN generate_series(0,10000) AS n WHERE n*100.00/length < 1; See Also , , ST_LocateAlong Return a derived geometry collection value with elements that match the specified measure. Polygonal elements are not supported. geometry ST_LocateAlong geometry ageom_with_measure float a_measure float offset Description Return a derived geometry collection value with elements that match the specified measure. Polygonal elements are not supported. If an offset is provided, the resultant will be offset to the left or right of the input line by the specified number of units. A positive offset will be to the left, and a negative one to the right. Semantic is specified by: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting Availability: 1.1.0 by old name ST_Locate_Along_Measure. Changed: 2.0.0 in prior versions this used to be called ST_Locate_Along_Measure. The old name has been deprecated and will be removed in the future but is still available. Use this function only for geometries with an M component &M_support; Examples SELECT ST_AsText(the_geom) FROM (SELECT ST_LocateAlong( ST_GeomFromText('MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 3), (1 2 3, 5 4 5))'),3) As the_geom) As foo; st_asewkt ----------------------------------------------------------- MULTIPOINT M (1 2 3) --Geometry collections are difficult animals so dump them --to make them more digestable SELECT ST_AsText((ST_Dump(the_geom)).geom) FROM (SELECT ST_LocateAlong( ST_GeomFromText('MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 3), (1 2 3, 5 4 5))'),3) As the_geom) As foo; st_asewkt --------------- POINTM(1 2 3) POINTM(9 4 3) POINTM(1 2 3) See Also , ST_LocateBetween Return a derived geometry collection value with elements that match the specified range of measures inclusively. Polygonal elements are not supported. geometry ST_LocateBetween geometry geomA float measure_start float measure_end float offset Description Return a derived geometry collection value with elements that match the specified range of measures inclusively. Polygonal elements are not supported. Semantic is specified by: ISO/IEC CD 13249-3:200x(E) - Text for Continuation CD Editing Meeting Availability: 1.1.0 by old name ST_Locate_Between_Measures. Changed: 2.0.0 - in prior versions this used to be called ST_Locate_Between_Measures. The old name has been deprecated and will be removed in the future but is still available for backward compatibility. &M_support; Examples SELECT ST_AsText(the_geom) FROM (SELECT ST_LocateBetween( ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3), (1 2 3, 5 4 5))'),1.5, 3) As the_geom) As foo; st_asewkt ------------------------------------------------------------------------ GEOMETRYCOLLECTION M (LINESTRING M (1 2 3,3 4 2,9 4 3),POINT M (1 2 3)) --Geometry collections are difficult animals so dump them --to make them more digestable SELECT ST_AsText((ST_Dump(the_geom)).geom) FROM (SELECT ST_LocateBetween( ST_GeomFromText('MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3), (1 2 3, 5 4 5))'),1.5, 3) As the_geom) As foo; st_asewkt -------------------------------- LINESTRING M (1 2 3,3 4 2,9 4 3) POINT M (1 2 3) See Also , ST_LocateBetweenElevations Return a derived geometry (collection) value with elements that intersect the specified range of elevations inclusively. Only 3D, 4D LINESTRINGS and MULTILINESTRINGS are supported. geometry ST_LocateBetweenElevations geometry geom_mline float elevation_start float elevation_end Description Return a derived geometry (collection) value with elements that intersect the specified range of elevations inclusively. Only 3D, 3DM LINESTRINGS and MULTILINESTRINGS are supported. Availability: 1.4.0 &Z_support; Examples SELECT ST_AsEWKT(ST_LocateBetweenElevations( ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6)'),2,4)) As ewelev; ewelev ---------------------------------------------------------------- MULTILINESTRING((1 2 3,2 3 4)) SELECT ST_AsEWKT(ST_LocateBetweenElevations( ST_GeomFromEWKT('LINESTRING(1 2 6, 4 5 -1, 7 8 9)'),6,9)) As ewelev; ewelev ---------------------------------------------------------------- GEOMETRYCOLLECTION(POINT(1 2 6),LINESTRING(6.1 7.1 6,7 8 9)) --Geometry collections are difficult animals so dump them --to make them more digestable SELECT ST_AsEWKT((ST_Dump(the_geom)).geom) FROM (SELECT ST_LocateBetweenElevations( ST_GeomFromEWKT('LINESTRING(1 2 6, 4 5 -1, 7 8 9)'),6,9) As the_geom) As foo; st_asewkt -------------------------------- POINT(1 2 6) LINESTRING(6.1 7.1 6,7 8 9) See Also ST_InterpolatePoint Return the value of the measure dimension of a geometry at the point closed to the provided point. float ST_InterpolatePoint geometry line geometry point Description Return the value of the measure dimension of a geometry at the point closed to the provided point. Availability: 2.0.0 &Z_support; Examples SELECT ST_InterpolatePoint('LINESTRING M (0 0 0, 10 0 20)', 'POINT(5 5)'); st_interpolatepoint --------------------- 10 See Also , , ST_AddMeasure Return a derived geometry with measure elements linearly interpolated between the start and end points. If the geometry has no measure dimension, one is added. If the geometry has a measure dimension, it is over-written with new values. Only LINESTRINGS and MULTILINESTRINGS are supported. geometry ST_AddMeasure geometry geom_mline float measure_start float measure_end Description Return a derived geometry with measure elements linearly interpolated between the start and end points. If the geometry has no measure dimension, one is added. If the geometry has a measure dimension, it is over-written with new values. Only LINESTRINGS and MULTILINESTRINGS are supported. Availability: 1.5.0 &Z_support; Examples SELECT ST_AsText(ST_AddMeasure( ST_GeomFromEWKT('LINESTRING(1 0, 2 0, 4 0)'),1,4)) As ewelev; ewelev -------------------------------- LINESTRINGM(1 0 1,2 0 2,4 0 4) SELECT ST_AsText(ST_AddMeasure( ST_GeomFromEWKT('LINESTRING(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev; ewelev ---------------------------------------- LINESTRING(1 0 4 10,2 0 4 20,4 0 4 40) SELECT ST_AsText(ST_AddMeasure( ST_GeomFromEWKT('LINESTRINGM(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev; ewelev ---------------------------------------- LINESTRINGM(1 0 10,2 0 20,4 0 40) SELECT ST_AsText(ST_AddMeasure( ST_GeomFromEWKT('MULTILINESTRINGM((1 0 4, 2 0 4, 4 0 4),(1 0 4, 2 0 4, 4 0 4))'),10,70)) As ewelev; ewelev ----------------------------------------------------------------- MULTILINESTRINGM((1 0 10,2 0 20,4 0 40),(1 0 40,2 0 50,4 0 70)) postgis-2.1.2+dfsg.orig/doc/reference_measure.xml0000644000000000000000000044070412301313230020523 0ustar rootroot Spatial Relationships and Measurements ST_3DClosestPoint Returns the 3-dimensional point on g1 that is closest to g2. This is the first point of the 3D shortest line. geometry ST_3DClosestPoint geometry g1 geometry g2 Description Returns the 3-dimensional point on g1 that is closest to g2. This is the first point of the 3D shortest line. The 3D length of the 3D shortest line is the 3D distance. &Z_support; &P_support; Availability: 2.0.0 Examples linestring and point -- both 3d and 2d closest point SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt, ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt FROM (SELECT 'POINT(100 100 30)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line ) As foo; cp3d_line_pt | cp2d_line_pt -----------------------------------------------------------+------------------------------------------ POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(73.0769230769231 115.384615384615) linestring and multipoint -- both 3d and 2d closest point SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt, ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line ) As foo; cp3d_line_pt | cp2d_line_pt -----------------------------------------------------------+-------------- POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(50 75) Multilinestring and polygon both 3d and 2d closest point SELECT ST_AsEWKT(ST_3DClosestPoint(poly, mline)) As cp3d, ST_AsEWKT(ST_ClosestPoint(poly, mline)) As cp2d FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly, ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1), (1 10 2, 5 20 1))') As mline ) As foo; cp3d | cp2d -------------------------------------------+-------------- POINT(39.993580415989 54.1889925532825 5) | POINT(20 40) See Also , , , ST_3DDistance For geometry type Returns the 3-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. float ST_3DDistance geometry g1 geometry g2 Description For geometry type returns the 3-dimensional minimum cartesian distance between two geometries in projected units (spatial ref units). &Z_support; &P_support; &sqlmm_compliant; SQL-MM ? &sfcgal_enhanced; Availability: 2.0.0 Examples -- Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line) -- Note: currently no vertical datum support so Z is not transformed and assumed to be same units as final. SELECT ST_3DDistance( ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'),2163), ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163) ) As dist_3d, ST_Distance( ST_Transform(ST_GeomFromText('POINT(-72.1235 42.3521)',4326),2163), ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326),2163) ) As dist_2d; dist_3d | dist_2d ------------------+----------------- 127.295059324629 | 126.66425605671 -- Multilinestring and polygon both 3d and 2d distance -- Same example as 3D closest point example SELECT ST_3DDistance(poly, mline) As dist3d, ST_Distance(poly, mline) As dist2d FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly, ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1), (1 10 2, 5 20 1))') As mline ) As foo; dist3d | dist2d -------------------+-------- 0.716635696066337 | 0 See Also , , , , , ST_3DDWithin For 3d (z) geometry type Returns true if two geometries 3d distance is within number of units. boolean ST_3DDWithin geometry g1 geometry g2 double precision distance_of_srid Description For geometry type returns true if the 3d distance between two objects is within distance_of_srid specified projected units (spatial ref units). &Z_support; &P_support; &sqlmm_compliant; SQL-MM ? Availability: 2.0.0 Examples -- Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line) -- Note: currently no vertical datum support so Z is not transformed and assumed to be same units as final. SELECT ST_3DDWithin( ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'),2163), ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163), 126.8 ) As within_dist_3d, ST_DWithin( ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'),2163), ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163), 126.8 ) As within_dist_2d; within_dist_3d | within_dist_2d ----------------+---------------- f | t See Also , , , , ST_3DDFullyWithin Returns true if all of the 3D geometries are within the specified distance of one another. boolean ST_3DDFullyWithin geometry g1 geometry g2 double precision distance Description Returns true if the 3D geometries are fully within the specified distance of one another. The distance is specified in units defined by the spatial reference system of the geometries. For this function to make sense, the source geometries must both be of the same coordinate projection, having the same SRID. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. Availability: 2.0.0 &Z_support; &P_support; Examples -- This compares the difference between fully within and distance within as well -- as the distance fully within for the 2D footprint of the line/point vs. the 3d fully within SELECT ST_3DDFullyWithin(geom_a, geom_b, 10) as D3DFullyWithin10, ST_3DDWithin(geom_a, geom_b, 10) as D3DWithin10, ST_DFullyWithin(geom_a, geom_b, 20) as D2DFullyWithin20, ST_3DDFullyWithin(geom_a, geom_b, 20) as D3DFullyWithin20 from (select ST_GeomFromEWKT('POINT(1 1 2)') as geom_a, ST_GeomFromEWKT('LINESTRING(1 5 2, 2 7 20, 1 9 100, 14 12 3)') as geom_b) t1; d3dfullywithin10 | d3dwithin10 | d2dfullywithin20 | d3dfullywithin20 ------------------+-------------+------------------+------------------ f | t | t | f See Also , , , ST_3DIntersects Returns TRUE if the Geometries "spatially intersect" in 3d - only for points and linestrings boolean ST_3DIntersects geometry geomA geometry geomB Description Overlaps, Touches, Within all imply spatial intersection. If any of the aforementioned returns true, then the geometries also spatially intersect. Disjoint implies false for spatial intersection. Availability: 2.0.0 This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. &Z_support; &P_support; &sqlmm_compliant; SQL-MM 3: ? Geometry Examples SELECT ST_3DIntersects(pt, line), ST_Intersects(pt,line) FROM (SELECT 'POINT(0 0 2)'::geometry As pt, 'LINESTRING (0 0 1, 0 2 3 )'::geometry As line) As foo; st_3dintersects | st_intersects -----------------+--------------- f | t (1 row) See Also ST_3DLongestLine Returns the 3-dimensional longest line between two geometries geometry ST_3DLongestLine geometry g1 geometry g2 Description Returns the 3-dimensional longest line between two geometries. The function will only return the first longest line if more than one. The line returned will always start in g1 and end in g2. The 3D length of the line this function returns will always be the same as returns for g1 and g2. Availability: 2.0.0 &Z_support; &P_support; Examples linestring and point -- both 3d and 2d longest line SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt, ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt FROM (SELECT 'POINT(100 100 30)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line ) As foo; lol3d_line_pt | lol2d_line_pt -----------------------------------+---------------------------- LINESTRING(50 75 1000,100 100 30) | LINESTRING(98 190,100 100) linestring and multipoint -- both 3d and 2d longest line SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt, ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line ) As foo; lol3d_line_pt | lol2d_line_pt ---------------------------------+-------------------------- LINESTRING(98 190 1,50 74 1000) | LINESTRING(98 190,50 74) Multilinestring and polygon both 3d and 2d longest line SELECT ST_AsEWKT(ST_3DLongestLine(poly, mline)) As lol3d, ST_AsEWKT(ST_LongestLine(poly, mline)) As lol2d FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly, ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1), (1 10 2, 5 20 1))') As mline ) As foo; lol3d | lol2d ------------------------------+-------------------------- LINESTRING(175 150 5,1 10 2) | LINESTRING(175 150,1 10) See Also , , , , ST_3DMaxDistance For geometry type Returns the 3-dimensional cartesian maximum distance (based on spatial ref) between two geometries in projected units. float ST_3DMaxDistance geometry g1 geometry g2 Description For geometry type returns the 3-dimensional maximum cartesian distance between two geometries in projected units (spatial ref units). &Z_support; &P_support; Availability: 2.0.0 Examples -- Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line) -- Note: currently no vertical datum support so Z is not transformed and assumed to be same units as final. SELECT ST_3DMaxDistance( ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 10000)'),2163), ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163) ) As dist_3d, ST_MaxDistance( ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 10000)'),2163), ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163) ) As dist_2d; dist_3d | dist_2d ------------------+------------------ 24383.7467488441 | 22247.8472107251 See Also , , , ST_3DShortestLine Returns the 3-dimensional shortest line between two geometries geometry ST_3DShortestLine geometry g1 geometry g2 Description Returns the 3-dimensional shortest line between two geometries. The function will only return the first shortest line if more than one, that the function finds. If g1 and g2 intersects in just one point the function will return a line with both start and end in that intersection-point. If g1 and g2 are intersecting with more than one point the function will return a line with start and end in the same point but it can be any of the intersecting points. The line returned will always start in g1 and end in g2. The 3D length of the line this function returns will always be the same as returns for g1 and g2. Availability: 2.0.0 &Z_support; &P_support; Examples linestring and point -- both 3d and 2d shortest line SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt, ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_line_pt FROM (SELECT 'POINT(100 100 30)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line ) As foo; shl3d_line_pt | shl2d_line_pt ----------------------------------------------------------------------------+------------------------------------------------------ LINESTRING(54.6993798867619 128.935022917228 11.5475869506606,100 100 30) | LINESTRING(73.0769230769231 115.384615384615,100 100) linestring and multipoint -- both 3d and 2d shortest line SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt, ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_line_pt FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt, 'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line ) As foo; shl3d_line_pt | shl2d_line_pt ---------------------------------------------------------------------------+------------------------ LINESTRING(54.6993798867619 128.935022917228 11.5475869506606,100 100 30) | LINESTRING(50 75,50 74) Multilinestring and polygon both 3d and 2d shortest line SELECT ST_AsEWKT(ST_3DShortestLine(poly, mline)) As shl3d, ST_AsEWKT(ST_ShortestLine(poly, mline)) As shl2d FROM (SELECT ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly, ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1), (1 10 2, 5 20 1))') As mline ) As foo; shl3d | shl2d ---------------------------------------------------------------------------------------------------+------------------------ LINESTRING(39.993580415989 54.1889925532825 5,40.4078575708294 53.6052383805529 5.03423778139177) | LINESTRING(20 40,20 40) See Also , , , , ST_Area Returns the area of the surface if it is a polygon or multi-polygon. For "geometry" type area is in SRID units. For "geography" area is in square meters. float ST_Area geometry g1 float ST_Area geography geog boolean use_spheroid=true Description Returns the area of the geometry if it is a polygon or multi-polygon. Return the area measurement of an ST_Surface or ST_MultiSurface value. For geometry Area is in the units of the srid. For geography area is in square meters and defaults to measuring about the spheroid of the geography (currently only WGS84). To measure around the faster but less accurate sphere -- ST_Area(geog,false). Enhanced: 2.0.0 - support for 2D polyhedral surfaces was introduced. &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 8.1.2, 9.5.3 &P_support; For polyhedral surfaces, only supports 2D polyhedral surfaces (not 2.5D). For 2.5D, may give a non-zero answer, but only for the faces that sit completely in XY plane. &sfcgal_enhanced; Examples Return area in square feet for a plot of Massachusetts land and multiply by conversion to get square meters. Note this is in square feet because 2249 is Mass State Plane Feet SELECT ST_Area(the_geom) As sqft, ST_Area(the_geom)*POWER(0.3048,2) As sqm FROM (SELECT ST_GeomFromText('POLYGON((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))',2249) ) As foo(the_geom); sqft | sqm ---------+------------- 928.625 | 86.27208552 Return area square feet and transform to Massachusetts state plane meters (26986) to get square meters. Note this is in square feet because 2249 is Mass State Plane Feet and transformed area is in square meters since 26986 is state plane mass meters SELECT ST_Area(the_geom) As sqft, ST_Area(ST_Transform(the_geom,26986)) As sqm FROM (SELECT ST_GeomFromText('POLYGON((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))',2249) ) As foo(the_geom); sqft | sqm ---------+------------------ 928.625 | 86.2724304199219 Return area square feet and square meters using Geography data type. Note that we transform to our geometry to geography (before you can do that make sure your geometry is in WGS 84 long lat 4326). Geography always measures in meters. This is just for demonstration to compare. Normally your table will be stored in geography data type already. SELECT ST_Area(the_geog)/POWER(0.3048,2) As sqft_spheroid, ST_Area(the_geog,false)/POWER(0.3048,2) As sqft_sphere, ST_Area(the_geog) As sqm_spheroid FROM (SELECT geography( ST_Transform( ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))', 2249 ) ,4326 ) ) ) As foo(the_geog); sqft_spheroid | sqft_sphere | sqm_spheroid -----------------+------------------+------------------ 928.684405217197 | 927.186481558724 | 86.2776044452694 --if your data is in geography already SELECT ST_Area(the_geog)/POWER(0.3048,2) As sqft, ST_Area(the_geog) As sqm FROM somegeogtable; See Also , , , ST_Azimuth Returns the north-based azimuth as the angle in radians measured clockwise from the vertical on pointA to pointB. float ST_Azimuth geometry pointA geometry pointB float ST_Azimuth geography pointA geography pointB Description Returns the azimuth in radians of the segment defined by the given point-geometries, or NULL if the two points are coincident. The azimuth is north-based and is measured clockwise: North = 0; East = PI/2; South = PI; West = 3PI/2. The Azimuth is mathematical concept defined as the angle, in this case measured in radian, between a reference plane and a point. Availability: 1.1.0 Enhanced: 2.0.0 support for geography was introduced. Azimuth is especially useful in conjunction with ST_Translate for shifting an object along its perpendicular axis. See upgis_lineshift Plpgsqlfunctions PostGIS wiki section for example of this. Examples Geometry Azimuth in degrees SELECT ST_Azimuth(ST_Point(25,45), ST_Point(75,100))/(2*pi())*360 as degA_B, ST_Azimuth(ST_Point(75,100), ST_Point(25,45))/(2*pi())*360 As degB_A; -- NOTE easier to remember syntax using PostgreSQL built-in degrees function -- -- Both yield same answer -- SELECT degrees( ST_Azimuth(ST_Point(25,45), ST_Point(75,100)) ) as degA_B, degrees( ST_Azimuth(ST_Point(75,100), ST_Point(25,45)) ) As degB_A; dega_b | degb_a ------------------+------------------ 42.2736890060937 | 222.273689006094 See Also , , , PostgreSQL Math Functions ST_Centroid Returns the geometric center of a geometry. geometry ST_Centroid geometry g1 Description Computes the geometric center of a geometry, or equivalently, the center of mass of the geometry as a POINT. For [MULTI]POINTs, this is computed as the arithmetic mean of the input coordinates. For [MULTI]LINESTRINGs, this is computed as the weighted length of each line segment. For [MULTI]POLYGONs, "weight" is thought in terms of area. If an empty geometry is supplied, an empty GEOMETRYCOLLECTION is returned. If NULL is supplied, NULL is returned. The centroid is equal to the centroid of the set of component Geometries of highest dimension (since the lower-dimension geometries contribute zero "weight" to the centroid). Computation will be more accurate if performed by the GEOS module (enabled at compile time). &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 8.1.4, 9.5.5 Examples In each of the following illustrations, the blue dot represents the centroid of the source geometry. SELECT ST_AsText(ST_Centroid('MULTIPOINT ( -1 0, -1 2, -1 3, -1 4, -1 7, 0 1, 0 3, 1 1, 2 0, 6 0, 7 8, 9 8, 10 6 )')); st_astext ------------------------------------------ POINT(2.30769230769231 3.30769230769231) (1 row) See Also ST_ClosestPoint Returns the 2-dimensional point on g1 that is closest to g2. This is the first point of the shortest line. geometry ST_ClosestPoint geometry g1 geometry g2 Description Returns the 2-dimensional point on g1 that is closest to g2. This is the first point of the shortest line. If you have a 3D Geometry, you may prefer to use . Availability: 1.5.0 Examples SELECT ST_AsText(ST_ClosestPoint(pt,line)) AS cp_pt_line, ST_AsText(ST_ClosestPoint(line,pt)) As cp_line_pt FROM (SELECT 'POINT(100 100)'::geometry As pt, 'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry As line ) As foo; cp_pt_line | cp_line_pt ----------------+------------------------------------------ POINT(100 100) | POINT(73.0769230769231 115.384615384615) SELECT ST_AsText( ST_ClosestPoint( ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ) ) As ptwkt; ptwkt ------------------------------------------ POINT(140.752120669087 125.695053378061) See Also ,, , , ST_Contains Returns true if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A. boolean ST_Contains geometry geomA geometry geomB Description Geometry A contains Geometry B if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A. An important subtlety of this definition is that A does not contain its boundary, but A does contain itself. Contrast that to where geometry A does not Contain Properly itself. Returns TRUE if geometry B is completely inside geometry A. For this function to make sense, the source geometries must both be of the same coordinate projection, having the same SRID. ST_Contains is the inverse of ST_Within. So ST_Contains(A,B) implies ST_Within(B,A) except in the case of invalid geometries where the result is always false regardless or not defined. Performed by the GEOS module Do not call with a GEOMETRYCOLLECTION as an argument Do not use this function with invalid geometries. You will get unexpected results. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. To avoid index use, use the function _ST_Contains. NOTE: this is the "allowable" version that returns a boolean, not an integer. &sfs_compliant; s2.1.1.2 // s2.1.13.3 - same as within(geometry B, geometry A) &sqlmm_compliant; SQL-MM 3: 5.1.31 There are certain subtleties to ST_Contains and ST_Within that are not intuitively obvious. For details check out Subtleties of OGC Covers, Contains, Within Examples The ST_Contains predicate returns TRUE in all the following illustrations. The ST_Contains predicate returns FALSE in all the following illustrations. -- A circle within a circle SELECT ST_Contains(smallc, bigc) As smallcontainsbig, ST_Contains(bigc,smallc) As bigcontainssmall, ST_Contains(bigc, ST_Union(smallc, bigc)) as bigcontainsunion, ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion, ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior, ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; -- Result smallcontainsbig | bigcontainssmall | bigcontainsunion | bigisunion | bigcoversexterior | bigcontainsexterior ------------------+------------------+------------------+------------+-------------------+--------------------- f | t | t | t | t | f -- Example demonstrating difference between contains and contains properly SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa, ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ), ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ), ( ST_Point(1,1) ) ) As foo(geomA); geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba --------------+------------+----------------+-------------+----------------- ST_Polygon | t | f | f | f ST_LineString | t | f | f | f ST_Point | t | t | f | f See Also , , , , , ST_ContainsProperly Returns true if B intersects the interior of A but not the boundary (or exterior). A does not contain properly itself, but does contain itself. boolean ST_ContainsProperly geometry geomA geometry geomB Description Returns true if B intersects the interior of A but not the boundary (or exterior). A does not contain properly itself, but does contain itself. Every point of the other geometry is a point of this geometry's interior. The DE-9IM Intersection Matrix for the two geometries matches [T**FF*FF*] used in From JTS docs slightly reworded: The advantage to using this predicate over and is that it can be computed efficiently, with no need to compute topology at individual points. An example use case for this predicate is computing the intersections of a set of geometries with a large polygonal geometry. Since intersection is a fairly slow operation, it can be more efficient to use containsProperly to filter out test geometries which lie wholly inside the area. In these cases the intersection is known a priori to be exactly the original test geometry. Availability: 1.4.0 - requires GEOS >= 3.1.0. Do not call with a GEOMETRYCOLLECTION as an argument Do not use this function with invalid geometries. You will get unexpected results. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. To avoid index use, use the function _ST_ContainsProperly. Examples --a circle within a circle SELECT ST_ContainsProperly(smallc, bigc) As smallcontainspropbig, ST_ContainsProperly(bigc,smallc) As bigcontainspropsmall, ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) as bigcontainspropunion, ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion, ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior, ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; --Result smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior ------------------+------------------+------------------+------------+-------------------+--------------------- f | t | f | t | t | f --example demonstrating difference between contains and contains properly SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa, ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ), ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ), ( ST_Point(1,1) ) ) As foo(geomA); geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba --------------+------------+----------------+-------------+----------------- ST_Polygon | t | f | f | f ST_LineString | t | f | f | f ST_Point | t | t | f | f See Also , , , , , , , ST_Covers Returns 1 (TRUE) if no point in Geometry B is outside Geometry A boolean ST_Covers geometry geomA geometry geomB boolean ST_Covers geography geogpolyA geography geogpointB Description Returns 1 (TRUE) if no point in Geometry/Geography B is outside Geometry/Geography A Performed by the GEOS module Do not call with a GEOMETRYCOLLECTION as an argument For geography only Polygon covers point is supported. Do not use this function with invalid geometries. You will get unexpected results. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. To avoid index use, use the function _ST_Covers. Availability: 1.2.2 - requires GEOS >= 3.0 Availability: 1.5 - support for geography was introduced. NOTE: this is the "allowable" version that returns a boolean, not an integer. Not an OGC standard, but Oracle has it too. There are certain subtleties to ST_Contains and ST_Within that are not intuitively obvious. For details check out Subtleties of OGC Covers, Contains, Within Examples Geometry example --a circle covering a circle SELECT ST_Covers(smallc,smallc) As smallinsmall, ST_Covers(smallc, bigc) As smallcoversbig, ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior, ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; --Result smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior --------------+----------------+-------------------+--------------------- t | f | t | f (1 row) Geeography Example -- a point with a 300 meter buffer compared to a point, a point and its 10 meter buffer SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt, ST_Covers(ST_Buffer(geog_pt,10), geog_pt) As buff_10m_covers_cent FROM (SELECT ST_Buffer(ST_GeogFromText('SRID=4326;POINT(-99.327 31.4821)'), 300) As geog_poly, ST_GeogFromText('SRID=4326;POINT(-99.33 31.483)') As geog_pt ) As foo; poly_covers_pt | buff_10m_covers_cent ----------------+------------------ f | t See Also , , ST_CoveredBy Returns 1 (TRUE) if no point in Geometry/Geography A is outside Geometry/Geography B boolean ST_CoveredBy geometry geomA geometry geomB boolean ST_CoveredBy geography geogA geography geogB Description Returns 1 (TRUE) if no point in Geometry/Geography A is outside Geometry/Geography B Performed by the GEOS module Do not call with a GEOMETRYCOLLECTION as an argument Do not use this function with invalid geometries. You will get unexpected results. Availability: 1.2.2 - requires GEOS >= 3.0 This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. To avoid index use, use the function _ST_CoveredBy. NOTE: this is the "allowable" version that returns a boolean, not an integer. Not an OGC standard, but Oracle has it too. There are certain subtleties to ST_Contains and ST_Within that are not intuitively obvious. For details check out Subtleties of OGC Covers, Contains, Within Examples --a circle coveredby a circle SELECT ST_CoveredBy(smallc,smallc) As smallinsmall, ST_CoveredBy(smallc, bigc) As smallcoveredbybig, ST_CoveredBy(ST_ExteriorRing(bigc), bigc) As exteriorcoveredbybig, ST_Within(ST_ExteriorRing(bigc),bigc) As exeriorwithinbig FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; --Result smallinsmall | smallcoveredbybig | exteriorcoveredbybig | exeriorwithinbig --------------+-------------------+----------------------+------------------ t | t | t | f (1 row) See Also , , , ST_Crosses Returns TRUE if the supplied geometries have some, but not all, interior points in common. boolean ST_Crosses geometry g1 geometry g2 Description ST_Crosses takes two geometry objects and returns TRUE if their intersection "spatially cross", that is, the geometries have some, but not all interior points in common. The intersection of the interiors of the geometries must not be the empty set and must have a dimensionality less than the the maximum dimension of the two input geometries. Additionally, the intersection of the two geometries must not equal either of the source geometries. Otherwise, it returns FALSE. In mathematical terms, this is expressed as: TODO: Insert appropriate MathML markup here or use a gif. Simple HTML markup does not work well in both IE and Firefox. The DE-9IM Intersection Matrix for the two geometries is: T*T****** (for Point/Line, Point/Area, and Line/Area situations) T*****T** (for Line/Point, Area/Point, and Area/Line situations) 0******** (for Line/Line situations) For any other combination of dimensions this predicate returns false. The OpenGIS Simple Features Specification defines this predicate only for Point/Line, Point/Area, Line/Line, and Line/Area situations. JTS / GEOS extends the definition to apply to Line/Point, Area/Point and Area/Line situations as well. This makes the relation symmetric. Do not call with a GEOMETRYCOLLECTION as an argument This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. &sfs_compliant; s2.1.13.3 &sqlmm_compliant; SQL-MM 3: 5.1.29 Examples The following illustrations all return TRUE. Consider a situation where a user has two tables: a table of roads and a table of highways. CREATE TABLE roads ( id serial NOT NULL, the_geom geometry, CONSTRAINT roads_pkey PRIMARY KEY (road_id) ); CREATE TABLE highways ( id serial NOT NULL, the_gem geometry, CONSTRAINT roads_pkey PRIMARY KEY (road_id) ); To determine a list of roads that cross a highway, use a query similiar to: SELECT roads.id FROM roads, highways WHERE ST_Crosses(roads.the_geom, highways.the_geom); ST_LineCrossingDirection Given 2 linestrings, returns a number between -3 and 3 denoting what kind of crossing behavior. 0 is no crossing. integer ST_LineCrossingDirection geometry linestringA geometry linestringB Description Given 2 linestrings, returns a number between -3 and 3 denoting what kind of crossing behavior. 0 is no crossing. This is only supported for LINESTRING Definition of integer constants is as follows: 0: LINE NO CROSS -1: LINE CROSS LEFT 1: LINE CROSS RIGHT -2: LINE MULTICROSS END LEFT 2: LINE MULTICROSS END RIGHT -3: LINE MULTICROSS END SAME FIRST LEFT 3: LINE MULTICROSS END SAME FIRST RIGHT Availability: 1.4 Examples SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 , ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1 FROM ( SELECT ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING(171 154,20 140,71 74,161 53)') As line2 ) As foo; l1_cross_l2 | l2_cross_l1 -------------+------------- 3 | -3 SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 , ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1 FROM ( SELECT ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING (171 154, 20 140, 71 74, 2.99 90.16)') As line2 ) As foo; l1_cross_l2 | l2_cross_l1 -------------+------------- 2 | -2 SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 , ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1 FROM ( SELECT ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING (20 140, 71 74, 161 53)') As line2 ) As foo; l1_cross_l2 | l2_cross_l1 -------------+------------- -1 | 1 SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 , ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1 FROM (SELECT ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING(2.99 90.16,71 74,20 140,171 154)') As line2 ) As foo; l1_cross_l2 | l2_cross_l1 -------------+------------- -2 | 2 SELECT s1.gid, s2.gid, ST_LineCrossingDirection(s1.the_geom, s2.the_geom) FROM streets s1 CROSS JOIN streets s2 ON (s1.gid != s2.gid AND s1.the_geom && s2.the_geom ) WHERE ST_CrossingDirection(s1.the_geom, s2.the_geom) > 0; See Also ST_Disjoint Returns TRUE if the Geometries do not "spatially intersect" - if they do not share any space together. boolean ST_Disjoint geometry A geometry B Description Overlaps, Touches, Within all imply geometries are not spatially disjoint. If any of the aforementioned returns true, then the geometries are not spatially disjoint. Disjoint implies false for spatial intersection. Do not call with a GEOMETRYCOLLECTION as an argument Performed by the GEOS module This function call does not use indexes NOTE: this is the "allowable" version that returns a boolean, not an integer. &sfs_compliant; s2.1.1.2 //s2.1.13.3 - a.Relate(b, 'FF*FF****') &sqlmm_compliant; SQL-MM 3: 5.1.26 Examples SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry); st_disjoint --------------- t (1 row) SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry); st_disjoint --------------- f (1 row) See Also ST_Intersects ST_Distance For geometry type Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters. float ST_Distance geometry g1 geometry g2 float ST_Distance geography gg1 geography gg2 float ST_Distance geography gg1 geography gg2 boolean use_spheroid Description For geometry type returns the 2-dimensional minimum cartesian distance between two geometries in projected units (spatial ref units). For geography type defaults to return the minimum distance around WGS 84 spheroid between two geographies in meters. Pass in false to return answer in sphere instead of spheroid. &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 5.1.23 &curve_support; &sfcgal_enhanced; Availability: 1.5.0 geography support was introduced in 1.5. Speed improvements for planar to better handle large or many vertex geometries Enhanced: 2.1.0 improved speed for geography. See Making Geography faster for details. Enhanced: 2.1.0 - support for curved geometries was introduced. Basic Geometry Examples --Geometry example - units in planar degrees 4326 is WGS 84 long lat unit=degrees SELECT ST_Distance( ST_GeomFromText('POINT(-72.1235 42.3521)',4326), ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326) ); st_distance ----------------- 0.00150567726382282 -- Geometry example - units in meters (SRID: 26986 Massachusetts state plane meters) (most accurate for Massachusetts) SELECT ST_Distance( ST_Transform(ST_GeomFromText('POINT(-72.1235 42.3521)',4326),26986), ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326),26986) ); st_distance ----------------- 123.797937878454 -- Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (least accurate) SELECT ST_Distance( ST_Transform(ST_GeomFromText('POINT(-72.1235 42.3521)',4326),2163), ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326),2163) ); st_distance ------------------ 126.664256056812 Geography Examples -- same as geometry example but note units in meters - use sphere for slightly faster less accurate SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist FROM (SELECT ST_GeographyFromText('SRID=4326;POINT(-72.1235 42.3521)') As gg1, ST_GeographyFromText('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)') As gg2 ) As foo ; spheroid_dist | sphere_dist ------------------+------------------ 123.802076746848 | 123.475736916397 See Also , , , , , ST_HausdorffDistance Returns the Hausdorff distance between two geometries. Basically a measure of how similar or dissimilar 2 geometries are. Units are in the units of the spatial reference system of the geometries. float ST_HausdorffDistance geometry g1 geometry g2 float ST_HausdorffDistance geometry g1 geometry g2 float densifyFrac Description Implements algorithm for computing a distance metric which can be thought of as the "Discrete Hausdorff Distance". This is the Hausdorff distance restricted to discrete points for one of the geometries. Wikipedia article on Hausdorff distance Martin Davis note on how Hausdorff Distance calculation was used to prove correctness of the CascadePolygonUnion approach. When densifyFrac is specified, this function performs a segment densification before computing the discrete hausdorff distance. The densifyFrac parameter sets the fraction by which to densify each segment. Each segment will be split into a number of equal-length subsegments, whose fraction of the total length is closest to the given fraction. The current implementation supports only vertices as the discrete locations. This could be extended to allow an arbitrary density of points to be used. This algorithm is NOT equivalent to the standard Hausdorff distance. However, it computes an approximation that is correct for a large subset of useful cases. One important part of this subset is Linestrings that are roughly parallel to each other, and roughly equal in length. This is a useful metric for line matching. Availability: 1.5.0 - requires GEOS >= 3.2.0 Examples postgis=# SELECT st_HausdorffDistance( 'LINESTRING (0 0, 2 0)'::geometry, 'MULTIPOINT (0 1, 1 0, 2 1)'::geometry); st_hausdorffdistance ---------------------- 1 (1 row) postgis=# SELECT st_hausdorffdistance('LINESTRING (130 0, 0 0, 0 150)'::geometry, 'LINESTRING (10 10, 10 150, 130 10)'::geometry, 0.5); st_hausdorffdistance ---------------------- 70 (1 row) ST_MaxDistance Returns the 2-dimensional largest distance between two geometries in projected units. float ST_MaxDistance geometry g1 geometry g2 Description Some useful description here. Returns the 2-dimensional maximum distance between two linestrings in projected units. If g1 and g2 is the same geometry the function will return the distance between the two vertices most far from each other in that geometry. Availability: 1.5.0 Examples postgis=# SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry); st_maxdistance ----------------- 2 (1 row) postgis=# SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 2, 2 2 )'::geometry); st_maxdistance ------------------ 2.82842712474619 (1 row) See Also , ST_Distance_Sphere Returns minimum distance in meters between two lon/lat geometries. Uses a spherical earth and radius of 6370986 meters. Faster than ST_Distance_Spheroid , but less accurate. PostGIS versions prior to 1.5 only implemented for points. float ST_Distance_Sphere geometry geomlonlatA geometry geomlonlatB Description Returns minimum distance in meters between two lon/lat points. Uses a spherical earth and radius of 6370986 meters. Faster than , but less accurate. PostGIS Versions prior to 1.5 only implemented for points. This function currently does not look at the SRID of a geometry and will always assume its in WGS 84 long lat. Prior versions of this function only support points. Availability: 1.5 - support for other geometry types besides points was introduced. Prior versions only work with points. Examples SELECT round(CAST(ST_Distance_Sphere(ST_Centroid(the_geom), ST_GeomFromText('POINT(-118 38)',4326)) As numeric),2) As dist_meters, round(CAST(ST_Distance(ST_Transform(ST_Centroid(the_geom),32611), ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As dist_utm11_meters, round(CAST(ST_Distance(ST_Centroid(the_geom), ST_GeomFromText('POINT(-118 38)', 4326)) As numeric),5) As dist_degrees, round(CAST(ST_Distance(ST_Transform(the_geom,32611), ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As min_dist_line_point_meters FROM (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) As the_geom) as foo; dist_meters | dist_utm11_meters | dist_degrees | min_dist_line_point_meters -------------+-------------------+--------------+---------------------------- 70424.47 | 70438.00 | 0.72900 | 65871.18 See Also , ST_Distance_Spheroid Returns the minimum distance between two lon/lat geometries given a particular spheroid. PostGIS versions prior to 1.5 only support points. float ST_Distance_Spheroid geometry geomlonlatA geometry geomlonlatB spheroid measurement_spheroid Description Returns minimum distance in meters between two lon/lat geometries given a particular spheroid. See the explanation of spheroids given for . PostGIS version prior to 1.5 only support points. This function currently does not look at the SRID of a geometry and will always assume its represented in the coordinates of the passed in spheroid. Prior versions of this function only support points. Availability: 1.5 - support for other geometry types besides points was introduced. Prior versions only work with points. Examples SELECT round(CAST( ST_Distance_Spheroid(ST_Centroid(the_geom), ST_GeomFromText('POINT(-118 38)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]') As numeric),2) As dist_meters_spheroid, round(CAST(ST_Distance_Sphere(ST_Centroid(the_geom), ST_GeomFromText('POINT(-118 38)',4326)) As numeric),2) As dist_meters_sphere, round(CAST(ST_Distance(ST_Transform(ST_Centroid(the_geom),32611), ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As dist_utm11_meters FROM (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) As the_geom) as foo; dist_meters_spheroid | dist_meters_sphere | dist_utm11_meters ----------------------+--------------------+------------------- 70454.92 | 70424.47 | 70438.00 See Also , ST_DFullyWithin Returns true if all of the geometries are within the specified distance of one another boolean ST_DFullyWithin geometry g1 geometry g2 double precision distance Description Returns true if the geometries is fully within the specified distance of one another. The distance is specified in units defined by the spatial reference system of the geometries. For this function to make sense, the source geometries must both be of the same coordinate projection, having the same SRID. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. Availability: 1.5.0 Examples postgis=# SELECT ST_DFullyWithin(geom_a, geom_b, 10) as DFullyWithin10, ST_DWithin(geom_a, geom_b, 10) as DWithin10, ST_DFullyWithin(geom_a, geom_b, 20) as DFullyWithin20 from (select ST_GeomFromText('POINT(1 1)') as geom_a,ST_GeomFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') as geom_b) t1; ----------------- DFullyWithin10 | DWithin10 | DFullyWithin20 | ---------------+----------+---------------+ f | t | t | See Also , ST_DWithin Returns true if the geometries are within the specified distance of one another. For geometry units are in those of spatial reference and For geography units are in meters and measurement is defaulted to use_spheroid=true (measure around spheroid), for faster check, use_spheroid=false to measure along sphere. boolean ST_DWithin geometry g1 geometry g2 double precision distance_of_srid boolean ST_DWithin geography gg1 geography gg2 double precision distance_meters boolean ST_DWithin geography gg1 geography gg2 double precision distance_meters boolean use_spheroid Description Returns true if the geometries are within the specified distance of one another. For Geometries: The distance is specified in units defined by the spatial reference system of the geometries. For this function to make sense, the source geometries must both be of the same coordinate projection, having the same SRID. For geography units are in meters and measurement is defaulted to use_spheroid=true (measure around WGS 84 spheroid), for faster check, use_spheroid=false to measure along sphere. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. Prior to 1.3, ST_Expand was commonly used in conjunction with && and ST_Distance to achieve the same effect and in pre-1.3.4 this function was basically short-hand for that construct. From 1.3.4, ST_DWithin uses a more short-circuit distance function which should make it more efficient than prior versions for larger buffer regions. Use ST_3DDWithin if you have 3D geometries. &sfs_compliant; Availability: 1.5.0 support for geography was introduced Enhanced: 2.1.0 improved speed for geography. See Making Geography faster for details. Enhanced: 2.1.0 support for curved geometries was introduced. Examples --Find the nearest hospital to each school --that is within 3000 units of the school. -- We do an ST_DWithin search to utilize indexes to limit our search list -- that the non-indexable ST_Distance needs to process --If the units of the spatial reference is meters then units would be meters SELECT DISTINCT ON (s.gid) s.gid, s.school_name, s.the_geom, h.hospital_name FROM schools s LEFT JOIN hospitals h ON ST_DWithin(s.the_geom, h.the_geom, 3000) ORDER BY s.gid, ST_Distance(s.the_geom, h.the_geom); --The schools with no close hospitals --Find all schools with no hospital within 3000 units --away from the school. Units is in units of spatial ref (e.g. meters, feet, degrees) SELECT s.gid, s.school_name FROM schools s LEFT JOIN hospitals h ON ST_DWithin(s.the_geom, h.the_geom, 3000) WHERE h.gid IS NULL; See Also , ST_Equals Returns true if the given geometries represent the same geometry. Directionality is ignored. boolean ST_Equals geometry A geometry B Description Returns TRUE if the given Geometries are "spatially equal". Use this for a 'better' answer than '='. Note by spatially equal we mean ST_Within(A,B) = true and ST_Within(B,A) = true and also mean ordering of points can be different but represent the same geometry structure. To verify the order of points is consistent, use ST_OrderingEquals (it must be noted ST_OrderingEquals is a little more stringent than simply verifying order of points are the same). This function will return false if either geometry is invalid even if they are binary equal. &sfs_compliant; s2.1.1.2 &sqlmm_compliant; SQL-MM 3: 5.1.24 Examples SELECT ST_Equals(ST_GeomFromText('LINESTRING(0 0, 10 10)'), ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)')); st_equals ----------- t (1 row) SELECT ST_Equals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')), ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)')); st_equals ----------- t (1 row) See Also , , , ST_HasArc Returns true if a geometry or geometry collection contains a circular string boolean ST_HasArc geometry geomA Description Returns true if a geometry or geometry collection contains a circular string Availability: 1.2.3? &Z_support; &curve_support; Examples SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 1, 2 3, 4 5, 6 7, 5 6)')); st_hasarc -------- t See Also , ST_Intersects Returns TRUE if the Geometries/Geography "spatially intersect in 2D" - (share any portion of space) and FALSE if they don't (they are Disjoint). For geography -- tolerance is 0.00001 meters (so any points that close are considered to intersect) boolean ST_Intersects geometry geomA geometry geomB boolean ST_Intersects geography geogA geography geogB Description If a geometry or geography shares any portion of space then they intersect. For geography -- tolerance is 0.00001 meters (so any points that are close are considered to intersect) Overlaps, Touches, Within all imply spatial intersection. If any of the aforementioned returns true, then the geometries also spatially intersect. Disjoint implies false for spatial intersection. Do not call with a GEOMETRYCOLLECTION as an argument for geometry version. The geography version supports GEOMETRYCOLLECTION since its a thin wrapper around distance implementation. Performed by the GEOS module (for geometry), geography is native Availability: 1.5 support for geography was introduced. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. For geography, this function has a distance tolerance of about 0.00001 meters and uses the sphere rather than spheroid calculation. NOTE: this is the "allowable" version that returns a boolean, not an integer. &sfs_compliant; s2.1.1.2 //s2.1.13.3 - ST_Intersects(g1, g2 ) --> Not (ST_Disjoint(g1, g2 )) &sqlmm_compliant; SQL-MM 3: 5.1.27 &sfcgal_enhanced; Geometry Examples SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry); st_intersects --------------- f (1 row) SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry); st_intersects --------------- t (1 row) Geography Examples SELECT ST_Intersects( ST_GeographyFromText('SRID=4326;LINESTRING(-43.23456 72.4567,-43.23456 72.4568)'), ST_GeographyFromText('SRID=4326;POINT(-43.23456 72.4567772)') ); st_intersects --------------- t See Also , ST_Length Returns the 2d length of the geometry if it is a linestring or multilinestring. geometry are in units of spatial reference and geography are in meters (default spheroid) float ST_Length geometry a_2dlinestring float ST_Length geography geog boolean use_spheroid=true Description For geometry: Returns the cartesian 2D length of the geometry if it is a linestring, multilinestring, ST_Curve, ST_MultiCurve. 0 is returned for areal geometries. For areal geometries use ST_Perimeter. Geometry: Measurements are in the units of the spatial reference system of the geometry. Geography: Units are in meters and also acts as a Perimeter function for areal geogs. Currently for geometry this is an alias for ST_Length2D, but this may change to support higher dimensions. Changed: 2.0.0 Breaking change -- in prior versions applying this to a MULTI/POLYGON of type geography would give you the perimeter of the POLYGON/MULTIPOLYGON. In 2.0.0 this was changed to return 0 to be in line with geometry behavior. Please use ST_Perimeter if you want the perimeter of a polygon For geography measurement defaults spheroid measurement. To use the faster less accurate sphere use ST_Length(gg,false); &sfs_compliant; s2.1.5.1 &sqlmm_compliant; SQL-MM 3: 7.1.2, 9.3.4 Availability: 1.5.0 geography support was introduced in 1.5. &sfcgal_enhanced; Geometry Examples Return length in feet for line string. Note this is in feet because 2249 is Mass State Plane Feet SELECT ST_Length(ST_GeomFromText('LINESTRING(743238 2967416,743238 2967450,743265 2967450, 743265.625 2967416,743238 2967416)',2249)); st_length --------- 122.630744000095 --Transforming WGS 84 linestring to Massachusetts state plane meters SELECT ST_Length( ST_Transform( ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)'), 26986 ) ); st_length --------- 34309.4563576191 Geography Examples Return length of WGS 84 geography line -- default calculation is using a sphere rather than spheroid SELECT ST_Length(the_geog) As length_spheroid, ST_Length(the_geog,false) As length_sphere FROM (SELECT ST_GeographyFromText( 'SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)') As the_geog) As foo; length_spheroid | length_sphere ------------------+------------------ 34310.5703627305 | 34346.2060960742 (1 row) See Also , , , , ST_Length2D Returns the 2-dimensional length of the geometry if it is a linestring or multi-linestring. This is an alias for ST_Length float ST_Length2D geometry a_2dlinestring Description Returns the 2-dimensional length of the geometry if it is a linestring or multi-linestring. This is an alias for ST_Length See Also , ST_3DLength Returns the 3-dimensional or 2-dimensional length of the geometry if it is a linestring or multi-linestring. float ST_3DLength geometry a_3dlinestring Description Returns the 3-dimensional or 2-dimensional length of the geometry if it is a linestring or multi-linestring. For 2-d lines it will just return the 2-d length (same as ST_Length and ST_Length2D) &Z_support; Changed: 2.0.0 In prior versions this used to be called ST_Length3D Examples Return length in feet for a 3D cable. Note this is in feet because 2249 is Mass State Plane Feet SELECT ST_3DLength(ST_GeomFromText('LINESTRING(743238 2967416 1,743238 2967450 1,743265 2967450 3, 743265.625 2967416 3,743238 2967416 3)',2249)); ST_3DLength ----------- 122.704716741457 See Also , ST_Length_Spheroid Calculates the 2D or 3D length of a linestring/multilinestring on an ellipsoid. This is useful if the coordinates of the geometry are in longitude/latitude and a length is desired without reprojection. float ST_Length_Spheroid geometry a_linestring spheroid a_spheroid Description Calculates the length of a geometry on an ellipsoid. This is useful if the coordinates of the geometry are in longitude/latitude and a length is desired without reprojection. The ellipsoid is a separate database type and can be constructed as follows: SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>] SPHEROID["GRS_1980",6378137,298.257222101] Will return 0 for anything that is not a MULTILINESTRING or LINESTRING &Z_support; Examples SELECT ST_Length_Spheroid( geometry_column, 'SPHEROID["GRS_1980",6378137,298.257222101]' ) FROM geometry_table; SELECT ST_Length_Spheroid( the_geom, sph_m ) As tot_len, ST_Length_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1, ST_Length_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2 FROM (SELECT ST_GeomFromText('MULTILINESTRING((-118.584 38.374,-118.583 38.5), (-71.05957 42.3589 , -71.061 43))') As the_geom, CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo; tot_len | len_line1 | len_line2 ------------------+------------------+------------------ 85204.5207562955 | 13986.8725229309 | 71217.6482333646 --3D SELECT ST_Length_Spheroid( the_geom, sph_m ) As tot_len, ST_Length_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1, ST_Length_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2 FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30), (-71.05957 42.3589 75, -71.061 43 90))') As the_geom, CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo; tot_len | len_line1 | len_line2 ------------------+-----------------+------------------ 85204.5259107402 | 13986.876097711 | 71217.6498130292 See Also , , ST_Length2D_Spheroid Calculates the 2D length of a linestring/multilinestring on an ellipsoid. This is useful if the coordinates of the geometry are in longitude/latitude and a length is desired without reprojection. float ST_Length2D_Spheroid geometry a_linestring spheroid a_spheroid Description Calculates the 2D length of a geometry on an ellipsoid. This is useful if the coordinates of the geometry are in longitude/latitude and a length is desired without reprojection. The ellipsoid is a separate database type and can be constructed as follows: SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>] SPHEROID["GRS_1980",6378137,298.257222101] Will return 0 for anything that is not a MULTILINESTRING or LINESTRING This is much like and except it will throw away the Z coordinate in calculations. Examples SELECT ST_Length2D_Spheroid( geometry_column, 'SPHEROID["GRS_1980",6378137,298.257222101]' ) FROM geometry_table; SELECT ST_Length2D_Spheroid( the_geom, sph_m ) As tot_len, ST_Length2D_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1, ST_Length2D_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2 FROM (SELECT ST_GeomFromText('MULTILINESTRING((-118.584 38.374,-118.583 38.5), (-71.05957 42.3589 , -71.061 43))') As the_geom, CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo; tot_len | len_line1 | len_line2 ------------------+------------------+------------------ 85204.5207562955 | 13986.8725229309 | 71217.6482333646 --3D Observe same answer SELECT ST_Length2D_Spheroid( the_geom, sph_m ) As tot_len, ST_Length2D_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1, ST_Length2D_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2 FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30), (-71.05957 42.3589 75, -71.061 43 90))') As the_geom, CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo; tot_len | len_line1 | len_line2 ------------------+------------------+------------------ 85204.5207562955 | 13986.8725229309 | 71217.6482333646 See Also , , ST_3DLength_Spheroid Calculates the length of a geometry on an ellipsoid, taking the elevation into account. This is just an alias for ST_Length_Spheroid. float ST_3DLength_Spheroid geometry a_linestring spheroid a_spheroid Description Calculates the length of a geometry on an ellipsoid, taking the elevation into account. This is just an alias for ST_Length_Spheroid. Changed: 2.0.0 In prior versions this used to return 0 for anything that is not a MULTILINESTRING or LINESTRING and in 2.0.0 on returns the perimeter of if given a polgon. This function is just an alias for ST_Length_Spheroid. &Z_support; Changed: 2.0.0 In prior versions this used to be called ST_Length3d_Spheroid Examples See ST_Length_Spheroid See Also , , ST_LongestLine Returns the 2-dimensional longest line points of two geometries. The function will only return the first longest line if more than one, that the function finds. The line returned will always start in g1 and end in g2. The length of the line this function returns will always be the same as st_maxdistance returns for g1 and g2. geometry ST_LongestLine geometry g1 geometry g2 Description Returns the 2-dimensional longest line between the points of two geometries. Availability: 1.5.0 Examples SELECT ST_AsText( ST_LongestLine('POINT(100 100)'::geometry, 'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry) ) As lline; lline ----------------- LINESTRING(100 100,98 190) SELECT ST_AsText( ST_LongestLine( ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ) ) As llinewkt; lline ----------------- LINESTRING(20 40,121.111404660392 186.629392246051) SELECT ST_AsText(ST_LongestLine(c.the_geom, c.the_geom)) As llinewkt, ST_MaxDistance(c.the_geom,c.the_geom) As max_dist, ST_Length(ST_LongestLine(c.the_geom, c.the_geom)) As lenll FROM (SELECT ST_BuildArea(ST_Collect(the_geom)) As the_geom FROM (SELECT ST_Translate(ST_SnapToGrid(ST_Buffer(ST_Point(50 ,generate_series(50,190, 50) ),40, 'quad_segs=2'),1), x, 0) As the_geom FROM generate_series(1,100,50) As x) AS foo ) As c; llinewkt | max_dist | lenll ---------------------------+------------------+------------------ LINESTRING(23 22,129 178) | 188.605408193933 | 188.605408193933 See Also , , ST_OrderingEquals Returns true if the given geometries represent the same geometry and points are in the same directional order. boolean ST_OrderingEquals geometry A geometry B Description ST_OrderingEquals compares two geometries and returns t (TRUE) if the geometries are equal and the coordinates are in the same order; otherwise it returns f (FALSE). This function is implemented as per the ArcSDE SQL specification rather than SQL-MM. http://edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3.htm#ST_OrderingEquals &sqlmm_compliant; SQL-MM 3: 5.1.43 Examples SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'), ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)')); st_orderingequals ----------- f (1 row) SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'), ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)')); st_orderingequals ----------- t (1 row) SELECT ST_OrderingEquals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')), ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)')); st_orderingequals ----------- f (1 row) See Also , ST_Overlaps Returns TRUE if the Geometries share space, are of the same dimension, but are not completely contained by each other. boolean ST_Overlaps geometry A geometry B Description Returns TRUE if the Geometries "spatially overlap". By that we mean they intersect, but one does not completely contain another. Performed by the GEOS module Do not call with a GeometryCollection as an argument This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. To avoid index use, use the function _ST_Overlaps. NOTE: this is the "allowable" version that returns a boolean, not an integer. &sfs_compliant; s2.1.1.2 // s2.1.13.3 &sqlmm_compliant; SQL-MM 3: 5.1.32 Examples The following illustrations all return TRUE. --a point on a line is contained by the line and is of a lower dimension, and therefore does not overlap the line nor crosses SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Crosses(a,b) As a_crosses_b, ST_Intersects(a, b) As a_intersects_b, ST_Contains(b,a) As b_contains_a FROM (SELECT ST_GeomFromText('POINT(1 0.5)') As a, ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)') As b) As foo a_overlap_b | a_crosses_b | a_intersects_b | b_contains_a ------------+-------------+----------------+-------------- f | f | t | t --a line that is partly contained by circle, but not fully is defined as intersecting and crossing, -- but since of different dimension it does not overlap SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Crosses(a,b) As a_crosses_b, ST_Intersects(a, b) As a_intersects_b, ST_Contains(a,b) As a_contains_b FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 0.5)'), 3) As a, ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)') As b) As foo; a_overlap_b | a_crosses_b | a_intersects_b | a_contains_b -------------+-------------+----------------+-------------- f | t | t | f -- a 2-dimensional bent hot dog (aka buffered line string) that intersects a circle, -- but is not fully contained by the circle is defined as overlapping since they are of the same dimension, -- but it does not cross, because the intersection of the 2 is of the same dimension -- as the maximum dimension of the 2 SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Crosses(a,b) As a_crosses_b, ST_Intersects(a, b) As a_intersects_b, ST_Contains(b,a) As b_contains_a, ST_Dimension(a) As dim_a, ST_Dimension(b) as dim_b, ST_Dimension(ST_Intersection(a,b)) As dima_intersection_b FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 0.5)'), 3) As a, ST_Buffer(ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)'),0.5) As b) As foo; a_overlap_b | a_crosses_b | a_intersects_b | b_contains_a | dim_a | dim_b | dima_intersection_b -------------+-------------+----------------+--------------+-------+-------+--------------------- t | f | t | f | 2 | 2 | 2 See Also , , , ST_Perimeter Return the length measurement of the boundary of an ST_Surface or ST_MultiSurface geometry or geography. (Polygon, Multipolygon). geometry measurement is in units of spatial reference and geography is in meters. float ST_Perimeter geometry g1 float ST_Perimeter geography geog boolean use_spheroid=true Description Returns the 2D perimeter of the geometry/geography if it is a ST_Surface, ST_MultiSurface (Polygon, Multipolygon). 0 is returned for non-areal geometries. For linestrings use ST_Length. Measurements for geometry are in the units of the spatial reference system of the geometry. Measurements for geography are in meters. If use_spheroid is set to false, then will model earth as a sphere instead of a spheroid. Currently this is an alias for ST_Perimeter2D, but this may change to support higher dimensions. &sfs_compliant; s2.1.5.1 &sqlmm_compliant; SQL-MM 3: 8.1.3, 9.5.4 Availability 2.0.0: Support for geography was introduced Examples: Geometry Return perimeter in feet for polygon and multipolygon. Note this is in feet because 2249 is Mass State Plane Feet SELECT ST_Perimeter(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450, 743265.625 2967416,743238 2967416))', 2249)); st_perimeter --------- 122.630744000095 (1 row) SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((763104.471273676 2949418.44119003, 763104.477769673 2949418.42538203, 763104.189609677 2949418.22343004,763104.471273676 2949418.44119003)), ((763104.471273676 2949418.44119003,763095.804579742 2949436.33850239, 763086.132105649 2949451.46730207,763078.452329651 2949462.11549407, 763075.354136904 2949466.17407812,763064.362142565 2949477.64291974, 763059.953961626 2949481.28983009,762994.637609571 2949532.04103014, 762990.568508415 2949535.06640477,762986.710889563 2949539.61421415, 763117.237897679 2949709.50493431,763235.236617789 2949617.95619822, 763287.718121842 2949562.20592617,763111.553321674 2949423.91664605, 763104.471273676 2949418.44119003)))', 2249)); st_perimeter --------- 845.227713366825 (1 row) Examples: Geography Return perimeter in meters and feet for polygon and multipolygon. Note this is geography (WGS 84 long lat) SELECT ST_Perimeter(geog) As per_meters, ST_Perimeter(geog)/0.3048 As per_ft FROM ST_GeogFromText('POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009, -71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.1776848522251 42.3902896512902))') As geog; per_meters | per_ft -----------------+------------------ 37.3790462565251 | 122.634666195949 -- Multipolygon example -- SELECT ST_Perimeter(geog) As per_meters, ST_Perimeter(geog,false) As per_sphere_meters, ST_Perimeter(geog)/0.3048 As per_ft FROM ST_GeogFromText('MULTIPOLYGON(((-71.1044543107478 42.340674480411,-71.1044542869917 42.3406744369506, -71.1044553562977 42.340673886454,-71.1044543107478 42.340674480411)), ((-71.1044543107478 42.340674480411,-71.1044860600303 42.3407237015564,-71.1045215770124 42.3407653385914, -71.1045498002983 42.3407946553165,-71.1045611902745 42.3408058316308,-71.1046016507427 42.340837442371, -71.104617893173 42.3408475056957,-71.1048586153981 42.3409875993595,-71.1048736143677 42.3409959528211, -71.1048878050242 42.3410084812078,-71.1044020965803 42.3414730072048, -71.1039672113619 42.3412202916693,-71.1037740497748 42.3410666421308, -71.1044280218456 42.3406894151355,-71.1044543107478 42.340674480411)))') As geog; per_meters | per_sphere_meters | per_ft ------------------+-------------------+------------------ 257.634283683311 | 257.412311446337 | 845.256836231335 See Also , , ST_Perimeter2D Returns the 2-dimensional perimeter of the geometry, if it is a polygon or multi-polygon. This is currently an alias for ST_Perimeter. float ST_Perimeter2D geometry geomA Description Returns the 2-dimensional perimeter of the geometry, if it is a polygon or multi-polygon. This is currently an alias for ST_Perimeter. In future versions ST_Perimeter may return the highest dimension perimeter for a geometry. This is still under consideration See Also ST_3DPerimeter Returns the 3-dimensional perimeter of the geometry, if it is a polygon or multi-polygon. float ST_3DPerimeter geometry geomA Description Returns the 3-dimensional perimeter of the geometry, if it is a polygon or multi-polygon. If the geometry is 2-dimensional, then the 2-dimensional perimeter is returned. &Z_support; Changed: 2.0.0 In prior versions this used to be called ST_Perimeter3D Examples Perimeter of a slightly elevated polygon in the air in Massachusetts state plane feet SELECT ST_3DPerimeter(the_geom), ST_Perimeter2d(the_geom), ST_Perimeter(the_geom) FROM (SELECT ST_GeomFromEWKT('SRID=2249;POLYGON((743238 2967416 2,743238 2967450 1, 743265.625 2967416 1,743238 2967416 2))') As the_geom) As foo; ST_3DPerimeter | st_perimeter2d | st_perimeter ------------------+------------------+------------------ 105.465793597674 | 105.432997272188 | 105.432997272188 See Also , , ST_PointOnSurface Returns a POINT guaranteed to lie on the surface. geometry ST_PointOnSurface geometry g1 Description Returns a POINT guaranteed to intersect a surface. &sfs_compliant; s3.2.14.2 // s3.2.18.2 &sqlmm_compliant; SQL-MM 3: 8.1.5, 9.5.6. According to the specs, ST_PointOnSurface works for surface geometries (POLYGONs, MULTIPOLYGONS, CURVED POLYGONS). So PostGIS seems to be extending what the spec allows here. Most databases Oracle,DB II, ESRI SDE seem to only support this function for surfaces. SQL Server 2008 like PostGIS supports for all common geometries. &Z_support; Examples SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry)); st_astext ------------ POINT(0 5) (1 row) SELECT ST_AsText(ST_PointOnSurface('LINESTRING(0 5, 0 10)'::geometry)); st_astext ------------ POINT(0 5) (1 row) SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry)); st_astext ---------------- POINT(2.5 2.5) (1 row) SELECT ST_AsEWKT(ST_PointOnSurface(ST_GeomFromEWKT('LINESTRING(0 5 1, 0 0 1, 0 10 2)'))); st_asewkt ---------------- POINT(0 0 1) (1 row) See Also , ST_Project Returns a POINT projected from a start point using a distance in meters and bearing (azimuth) in radians. geography ST_Project geography g1 float distance float azimuth Description Returns a POINT projected from a start point using an azimuth (bearing) measured in radians and distance measured in meters. Distance, azimuth and projection are all aspects of the same operation, describing (or in the case of projection, constructing) the relationship between two points on the world. The azimuth is sometimes called the heading or the bearing in navigation. It is measured relative to true north (azimuth zero). East is azimuth 90 (pi/2), south is azimuth 180 (pi), west is azimuth 270 (pi*1.5). The distance is given in meters. Availability: 2.0.0 Example: Using degrees - projected point 100,000 meters and bearing 45 degrees SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, radians(45.0))); st_astext ------------------------------------------ POINT(0.63523102912532 0.63947233472882) (1 row) Example: Using radians - projected point 100,000 meters and bearing pi/4 (45 degrees) SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, pi()/4)); st_astext ------------------------------------------ POINT(0.63523102912532 0.63947233472882) (1 row) See Also , , PostgreSQL Math Functions ST_Relate Returns true if this Geometry is spatially related to anotherGeometry, by testing for intersections between the Interior, Boundary and Exterior of the two geometries as specified by the values in the intersectionMatrixPattern. If no intersectionMatrixPattern is passed in, then returns the maximum intersectionMatrixPattern that relates the 2 geometries. boolean ST_Relate geometry geomA geometry geomB text intersectionMatrixPattern text ST_Relate geometry geomA geometry geomB text ST_Relate geometry geomA geometry geomB int BoundaryNodeRule Description Version 1: Takes geomA, geomB, intersectionMatrix and Returns 1 (TRUE) if this Geometry is spatially related to anotherGeometry, by testing for intersections between the Interior, Boundary and Exterior of the two geometries as specified by the values in the DE-9IM matrix pattern. This is especially useful for testing compound checks of intersection, crosses, etc in one step. Do not call with a GeometryCollection as an argument This is the "allowable" version that returns a boolean, not an integer. This is defined in OGC spec This DOES NOT automagically include an index call. The reason for that is some relationships are anti e.g. Disjoint. If you are using a relationship pattern that requires intersection, then include the && index call. Version 2: Takes geomA and geomB and returns the Version 3: same as version 2 bu allows to specify a boundary node rule (1:OGC/MOD2, 2:Endpoint, 3:MultivalentEndpoint, 4:MonovalentEndpoint) Do not call with a GeometryCollection as an argument not in OGC spec, but implied. see s2.1.13.2 Performed by the GEOS module &sfs_compliant; s2.1.1.2 // s2.1.13.3 &sqlmm_compliant; SQL-MM 3: 5.1.25 Enhanced: 2.0.0 - added support for specifying boundary node rule (requires GEOS >= 3.0). Examples --Find all compounds that intersect and not touch a poly (interior intersects) SELECT l.* , b.name As poly_name FROM polys As b INNER JOIN compounds As l ON (p.the_geom && b.the_geom AND ST_Relate(l.the_geom, b.the_geom,'T********')); SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2)); st_relate ----------- 0FFFFF212 SELECT ST_Relate(ST_GeometryFromText('LINESTRING(1 2, 3 4)'), ST_GeometryFromText('LINESTRING(5 6, 7 8)')); st_relate ----------- FF1FF0102 SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '0FFFFF212'); st_relate ----------- t SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '*FF*FF212'); st_relate ----------- t See Also , , , , ST_RelateMatch Returns true if intersectionMattrixPattern1 implies intersectionMatrixPattern2 boolean ST_RelateMatch text intersectionMatrix text intersectionMatrixPattern Description Takes intersectionMatrix and intersectionMatrixPattern and Returns true if the intersectionMatrix satisfies the intersectionMatrixPattern. For more information refer to . Availability: 2.0.0 - requires GEOS >= 3.3.0. Examples SELECT ST_RelateMatch('101202FFF', 'TTTTTTFFF') ; -- result -- t --example of common intersection matrix patterns and example matrices -- comparing relationships of involving one invalid geometry and ( a line and polygon that intersect at interior and boundary) SELECT mat.name, pat.name, ST_RelateMatch(mat.val, pat.val) As satisfied FROM ( VALUES ('Equality', 'T1FF1FFF1'), ('Overlaps', 'T*T***T**'), ('Within', 'T*F**F***'), ('Disjoint', 'FF*FF****') As pat(name,val) CROSS JOIN ( VALUES ('Self intersections (invalid)', '111111111'), ('IE2_BI1_BB0_BE1_EI1_EE2', 'FF2101102'), ('IB1_IE1_BB0_BE0_EI2_EI1_EE2', 'F11F00212') ) As mat(name,val); See Also , ST_ShortestLine Returns the 2-dimensional shortest line between two geometries geometry ST_ShortestLine geometry g1 geometry g2 Description Returns the 2-dimensional shortest line between two geometries. The function will only return the first shortest line if more than one, that the function finds. If g1 and g2 intersects in just one point the function will return a line with both start and end in that intersection-point. If g1 and g2 are intersecting with more than one point the function will return a line with start and end in the same point but it can be any of the intersecting points. The line returned will always start in g1 and end in g2. The length of the line this function returns will always be the same as st_distance returns for g1 and g2. Availability: 1.5.0 Examples SELECT ST_AsText( ST_ShortestLine('POINT(100 100)'::geometry, 'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry) ) As sline; sline ----------------- LINESTRING(100 100,73.0769230769231 115.384615384615) SELECT ST_AsText( ST_ShortestLine( ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ) ) As slinewkt; LINESTRING(140.752120669087 125.695053378061,121.111404660392 153.370607753949) See Also , , , ST_Touches Returns TRUE if the geometries have at least one point in common, but their interiors do not intersect. boolean ST_Touches geometry g1 geometry g2 Description Returns TRUE if the only points in common between g1 and g2 lie in the union of the boundaries of g1 and g2. The ST_Touches relation applies to all Area/Area, Line/Line, Line/Area, Point/Area and Point/Line pairs of relationships, but not to the Point/Point pair. In mathematical terms, this predicate is expressed as: The allowable DE-9IM Intersection Matrices for the two geometries are: FT******* F**T***** F***T**** Do not call with a GEOMETRYCOLLECTION as an argument This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. To avoid using an index, use _ST_Touches instead. &sfs_compliant; s2.1.1.2 // s2.1.13.3 &sqlmm_compliant; SQL-MM 3: 5.1.28 Examples The ST_Touches predicate returns TRUE in all the following illustrations. SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::geometry); st_touches ------------ f (1 row) SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(0 2)'::geometry); st_touches ------------ t (1 row) ST_Within Returns true if the geometry A is completely inside geometry B boolean ST_Within geometry A geometry B Description Returns TRUE if geometry A is completely inside geometry B. For this function to make sense, the source geometries must both be of the same coordinate projection, having the same SRID. It is a given that if ST_Within(A,B) is true and ST_Within(B,A) is true, then the two geometries are considered spatially equal. Performed by the GEOS module Do not call with a GEOMETRYCOLLECTION as an argument Do not use this function with invalid geometries. You will get unexpected results. This function call will automatically include a bounding box comparison that will make use of any indexes that are available on the geometries. To avoid index use, use the function _ST_Within. NOTE: this is the "allowable" version that returns a boolean, not an integer. &sfs_compliant; s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***') &sqlmm_compliant; SQL-MM 3: 5.1.30 Examples --a circle within a circle SELECT ST_Within(smallc,smallc) As smallinsmall, ST_Within(smallc, bigc) As smallinbig, ST_Within(bigc,smallc) As biginsmall, ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig, ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion, ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion FROM ( SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc, ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo; --Result smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion --------------+------------+------------+------------+------------+------------ t | t | f | t | t | t (1 row) See Also , , postgis-2.1.2+dfsg.orig/doc/README0000644000000000000000000000405711734307301015212 0ustar rootrootPostGIS Documentation ===================== Overview -------- PostGIS documentation is written in DocBook XML. The input file is ``postgis.xml``, which in turn includes all the individual chapter XML files. From that file we can publish several formats, including HTML and PDF. Make targets ------------ ``make`` same as ``make comments`` ``make install`` same as ``make comments-install`` ``make uninstall`` same as ``make comments-uninstall`` ``make html`` generates a single-file ``html/postgis.html`` ``make chunked-html`` generates a separate html file for every chapter or section break ``make pdf`` generates a single PDF file with the PostGIS version as a filename ``make images`` generates all the images used in the HTML and PDF targets ``make comments`` generates an SQL script that add COMMENTs for every function (derived from the documentation) ``make doxygen`` generates the developer's documentation using Doxygen ``make comments-install`` copies the ``postgis-comments.sql`` script to the PostgreSQL ``contrib`` directory ``make comments-uninstall`` removes the ``postgis-comments.sql`` script from the ``contrib`` directory ``make clean`` removes generated files except comments ``make maintainer-clean`` removes all generated files (including comments) Requirements ------------ To generate the html files and the comments: * xsltproc - http://xmlsoft.org/xslt/xsltproc2.html * DocBook XSL stylesheets * MathML 3 DTD - http://www.w3.org/Math/DTD/ To generate the images: * ImageMagick - http://www.imagemagick.org/ To generate a PDF: * dblatex - http://dblatex.sourceforge.net To generate the developer's documentation: * Doxygen - http://www.stack.nl/~dimitri/doxygen/ * Graphviz - http://www.graphviz.org/ How to ------ To generate images used in the documentation, follow these instructions on the PostGIS wiki: http://trac.osgeo.org/postgis/wiki/DevWikiDocNewFeature To run garden tests against functions, follow these instructions on the PostGIS dev wiki: http://trac.osgeo.org/postgis/wiki/DevWikiGardenTest postgis-2.1.2+dfsg.orig/doc/Makefile.in0000644000000000000000000003041112310417351016366 0ustar rootroot# # PostGIS - Spatial Types for PostgreSQL # http://www.postgis.net # # This is free software; you can redistribute and/or modify it under # the terms of the GNU General Public Licence. See the COPYING file. # # PostGIS documentation build Makefile # # Copyright 2003-2012 Sandro Santilli # Copyright 2004-2012 Paul Ramsey # Copyright 2009-2011 Regina Obe # Copyright 2008-2010 Mark Cave-Ayland # Copyright 2008-2010 Kevin Neufeld # Copyright 2009-2010 Olivier Courtin # Copyright 2005-2006 Markus Schaber # # NOTE: We don't use a standard PGXS Makefile here since the DOCS target # only allows files to be stored within contrib/ and we currently # store documentation under contrib/postgis due to the possibility # that we could produce a large number of files (think chunked HTML) # translations = it_IT pt_BR POSTGIS_MAJOR_VERSION=@POSTGIS_MAJOR_VERSION@ POSTGIS_MINOR_VERSION=@POSTGIS_MINOR_VERSION@ POSTGIS_MICRO_VERSION=@POSTGIS_MICRO_VERSION@ INSTALL=@INSTALL@ INSTALL_DATA=@INSTALL_DATA@ XSLTPROC=@XSLTPROC@ XSLBASE=@XSLBASE@ XMLLINT=@XMLLINT@ PERL=@PERL@ # To allow network access use: # # make html XSLTPROCFLAGS= # ifeq ($(XSLTPROCFLAGS),) XSLTPROCFLAGS=--nonet endif XSLTPROC_COMMONOPTS= \ --param section.autolabel 1 \ --param section.label.includes.component.label 1 \ --param chunk.section.depth 0 \ --param generate.section.toc.level 2 \ --param funcsynopsis.style kr \ --param admon.graphics 1 \ --param admon.textlabel 0 \ --param simplesect.in.toc 0 \ --param use.id.as.filename 1 \ --param chunk.quietly 1 \ $(XSLTPROCFLAGS) XSLTPROC_HTMLOPTS= \ --stringparam html.stylesheet style.css \ HTML_DOCBOOK_XSL=$(XSLBASE)/html/docbook.xsl CHUNK_HTML_DOCBOOK_XSL=$(XSLBASE)/html/chunk.xsl # DBLatex's dblatex script for PDF generation from DocBook DBLATEX=@DBLATEX@ # Imagemagick's convert utility program for generated images used in the documentation IMAGEMAGICK=@IMAGEMAGICK@ # Gettext for translated documentation MSGMERGE=msgmerge # XML gettext tools XML2POT=xml2pot # DOCBOOK to EPUB DBTOEPUB=dbtoepub # Directories for postgresql subdirectories PGSQL_DOCDIR=@PGSQL_DOCDIR@ PGSQL_MANDIR=@PGSQL_MANDIR@ PGSQL_SHAREDIR=@PGSQL_SHAREDIR@ # If XSLTPROC or XSLBASE were not found during configure, we cannot # build the documentation ifeq ($(XSLTPROC),) all: requirements_not_met_xsltproc else ifeq ($(XSLBASE),) all: requirements_not_met_xslbase else ifeq ($(IMAGEMAGICK),) all: requirements_not_met_imagemagick else all: comments endif endif endif XML_SOURCES = \ extras_historytable.xml \ extras_tigergeocoder.xml \ extras_topology.xml \ extras.xml \ faq_raster.xml \ faq.xml \ installation.xml \ introduction.xml \ performance_tips.xml \ postgis.xml \ reference_accessor.xml \ reference_constructor.xml \ reference_editor.xml \ reference_exception.xml \ reference_lrs.xml \ reference_management.xml \ reference_measure.xml \ reference_sfcgal.xml \ reference_misc.xml \ reference_operator.xml \ reference_output.xml \ reference_processing.xml \ reference_raster.xml \ reference_transaction.xml \ reference_type.xml \ reference.xml \ release_notes.xml \ reporting.xml \ using_postgis_app.xml \ using_postgis_dataman.xml \ using_raster_dataman.xml XML_GENERATED_SOURCES = \ postgis_aggs_mm.xml \ postgis-out.xml \ XML_INPUTS = $(XML_SOURCES) $(XML_GENERATED_SOURCES) XML_INPUTS_POT = $(XML_SOURCES:%.xml=po/templates/%.xml.pot) $(XML_INPUTS_POT): po/templates/%.xml.pot: %.xml $(XML2POT) $< > $@ # Creates or updates translation files update-po: $(XML_INPUTS_POT) @for lang in $(translations); do \ echo "Creating po files for language $$lang..." ; \ for pot in $(XML_INPUTS_POT); do \ mkdir -p po/$$lang; \ po=po/$$lang/`basename $$pot .pot`.po; \ if test -f $$po; then \ $(MSGMERGE) --update $$po $$pot; \ else \ cp $$pot $$po; \ fi; \ done; \ done ifeq ($(XSLTPROC),) postgis_aggs_mm.xml: requirements_not_met_xsltproc else postgis_aggs_mm.xml: ./xsl/postgis_aggs_mm.xml.xsl postgis-out.xml Makefile $(XSLTPROC) --novalid ./xsl/postgis_aggs_mm.xml.xsl postgis-out.xml > $@ endif postgis_comments.sql: ./xsl/postgis_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/postgis_comments.sql.xsl postgis-out.xml > $@ postgis_cheatsheet.html: ./xsl/postgis_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/postgis_cheatsheet.html.xsl postgis-out.xml > $@ raster_comments.sql: ./xsl/raster_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) ./xsl/raster_comments.sql.xsl postgis-out.xml > $@ raster_cheatsheet.html: ./xsl/raster_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/raster_cheatsheet.html.xsl postgis-out.xml > $@ topology_comments.sql: ./xsl/topology_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/topology_comments.sql.xsl postgis-out.xml > $@ topology_cheatsheet.html: ./xsl/topology_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/topology_cheatsheet.html.xsl postgis-out.xml > $@ sfcgal_comments.sql: ./xsl/sfcgal_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/sfcgal_comments.sql.xsl postgis-out.xml > $@ sfcgal_cheatsheet.html: ./xsl/sfcgal_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/sfcgal_cheatsheet.html.xsl postgis-out.xml > $@ tiger_geocoder_comments.sql: ./xsl/tiger_geocoder_comments.sql.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/tiger_geocoder_comments.sql.xsl postgis-out.xml > $@ tiger_geocoder_cheatsheet.html: ./xsl/tiger_geocoder_cheatsheet.html.xsl $(XML_INPUTS) $(XSLTPROC) --novalid ./xsl/tiger_geocoder_cheatsheet.html.xsl postgis-out.xml > $@ postgis-out.xml: postgis.xml Makefile $(PERL) -lpe "s'@@LAST_RELEASE_VERSION@@'${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}'g" $< > $@ chunked-html: postgis-out.xml Makefile images $(XML_INPUTS) $(XSLTPROC) $(XSLTPROC_COMMONOPTS) $(XSLTPROC_HTMLOPTS) \ --output html/ \ --stringparam saxon.character.representation decimal \ $(CHUNK_HTML_DOCBOOK_XSL) \ $< html: html/postgis$(DOCSUFFIX).html html-localized: @for lang in $(translations); do \ echo "Creating html for language $$lang..."; \ $(MAKE) -C po/$$lang local-html; \ done html/postgis$(DOCSUFFIX).html: postgis-out.xml Makefile images $(XML_INPUTS) $(XSLTPROC) $(XSLTPROC_COMMONOPTS) $(XSLTPROC_HTMLOPTS) \ --output html/postgis$(DOCSUFFIX).html \ $(HTML_DOCBOOK_XSL) \ $< postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).pdf: postgis-out.xml images $(XML_INPUTS) if test x"$(DBLATEX)" = x; then \ echo "Error: dblatex not found, can't build pdf"; \ echo " try installing dblatex and then re-run configure"; \ false; \ else \ dblatex -T native -t pdf \ -I "${PWD}/html" \ -P doc.collab.show=0 \ -P figure.note="${PWD}/html/images/note" \ -P figure.tip="${PWD}/html/images/tip" \ -P figure.important="${PWD}/html/images/important" \ -P figure.warning="${PWD}/html/images/warning" \ -P figure.caution="${PWD}/html/images/caution" \ -P latex.output.revhistory=0 \ -o postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).pdf $<; \ fi postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).epub: postgis-out.xml images $(XML_INPUTS) if test x"$(DBTOEPUB)" = x; then \ echo "Error: dbtoepub not found, can't build epub"; \ echo " try installing dbtoepub"; \ false; \ else \ $(DBTOEPUB) -c "${PWD}/html/style.css" \ -o postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).epub \ $<; \ fi epub: postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).epub pdf: postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}$(DOCSUFFIX).pdf pdf-localized: @for lang in $(translations); do \ echo "Creating pdf for language $$lang..."; \ $(MAKE) -C po/$$lang local-pdf; \ done doxygen.cfg: doxygen.cfg.in $(PERL) -lpe "s'@@LAST_RELEASE_VERSION@@'${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}'g" $< > $@ doxygen: doxygen.cfg doxygen $< images: $(MAKE) -C html/image_src images images-clean: $(MAKE) -C html/image_src images-clean clean: rm -f html/*.html rm -f postgis-${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}.pdf rm -f *.epub $(MAKE) -C html/image_src clean rm -f $(XML_GENERATED_SOURCES) distclean: clean $(MAKE) -C html/image_src distclean rm -f Makefile maintainer-clean: clean images-clean rm -f postgis_comments.sql raster_comments.sql topology_comments.sql tiger_geocoder_comments.sql ifeq ($(XSLTPROC),) comments: requirements_not_met_xsltproc else comments: postgis_comments.sql raster_comments.sql topology_comments.sql sfcgal_comments.sql tiger_geocoder_comments.sql endif cheatsheets: postgis_cheatsheet.html raster_cheatsheet.html topology_cheatsheet.html sfcgal_cheatsheet.html tiger_geocoder_cheatsheet.html ifeq ($(XSLTPROC),) comments-install: if test -e postgis_comments.sql -a \ -e raster_comments.sql -a \ -e topology_comments.sql -a \ -e sfcgal_comments.sql -a \ -e tiger_geocoder_comments.sql; then \ $(MAKE) -f Makefile.comments install; \ fi else comments-install: comments $(MAKE) -f Makefile.comments install endif comments-uninstall: $(MAKE) -f Makefile.comments uninstall man-install: man/shp2pgsql.1 man/pgsql2shp.1 mkdir -p $(DESTDIR)$(PGSQL_MANDIR)/man1 $(INSTALL_DATA) man/pgsql2shp.1 $(DESTDIR)$(PGSQL_MANDIR)/man1/pgsql2shp.1 $(INSTALL_DATA) man/shp2pgsql.1 $(DESTDIR)$(PGSQL_MANDIR)/man1/shp2pgsql.1 man-uninstall: rm -f $(DESTDIR)$(PGSQL_MANDIR)/man1/shp2pgsql.1 rm -f $(DESTDIR)$(PGSQL_MANDIR)/man1/pgsql2shp.1 docs-install: html/postgis.html html/style.css mkdir -p $(DESTDIR)$(PGSQL_DOCDIR)/postgis/images $(INSTALL_DATA) html/postgis.html $(DESTDIR)$(PGSQL_DOCDIR)/postgis/ $(INSTALL_DATA) html/style.css $(DESTDIR)$(PGSQL_DOCDIR)/postgis/ $(INSTALL_DATA) html/images/* $(DESTDIR)$(PGSQL_DOCDIR)/postgis/images/ $(INSTALL_DATA) ../README.postgis $(DESTDIR)$(PGSQL_DOCDIR)/postgis/README.postgis docs-uninstall: rm -f $(DESTDIR)$(PGSQL_DOCDIR)/postgis/postgis.html rm -f $(DESTDIR)$(PGSQL_DOCDIR)/postgis/style.css rm -rf $(DESTDIR)$(PGSQL_DOCDIR)/postgis/images rm -f $(DESTDIR)$(PGSQL_DOCDIR)/postgis/README.postgis install: comments-install uninstall: comments-uninstall ifeq ($(XSLTPROC),) garden: requirements_not_met_xsltproc else garden: xsl/postgis_gardentest.sql.xsl $(XML_INPUTS) $(XSLTPROC) -o postgis_gardentest_${POSTGIS_MAJOR_VERSION}${POSTGIS_MINOR_VERSION}.sql xsl/postgis_gardentest.sql.xsl postgis-out.xml $(XSLTPROC) -o raster_gardentest_${POSTGIS_MAJOR_VERSION}${POSTGIS_MINOR_VERSION}.sql xsl/raster_gardentest.sql.xsl postgis-out.xml endif ifeq ($(XMLLINT),) check: requirements_not_met_xmllint else check: $(XML_INPUTS) $(XMLLINT) --loaddtd --xinclude --valid postgis-out.xml > /dev/null endif requirements_not_met_xsltproc: @echo @echo "configure was unable to find 'xsltproc' which is required" @echo "to build the documentation." @echo "Install xsltproc and then re-run configure. Alternatively " @echo "refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo requirements_not_met_xmllint: @echo @echo "configure was unable to find 'xmllint' which is required" @echo "to test the documentation." @echo "Install xmllint and then re-run configure. Alternatively " @echo "refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo requirements_not_met_xslbase: @echo @echo "configure was unable to find the Docbook XSL stylesheet directory" @echo "which is required to build the documentation." @echo "Install the Docbook XSL stylesheets and/or re-run configure " @echo "with the --with-xsldir option." @echo "Alternatively refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo requirements_not_met_imagemagick: @echo @echo "configure was unable to find the ImageMagick's 'convert' utility program." @echo "To build the documentation, install ImageMagick and then re-run configure. Alternatively " @echo "refer to online manual:" @echo @echo " http://postgis.net/documentation" @echo postgis-2.1.2+dfsg.orig/doc/sfcgal_comments.sql0000644000000000000000000000160012315456266020221 0ustar rootroot Using SFCGAL Advanced 2D/3D functions TODO Introduction part TODO Install part COMMENT ON FUNCTION ST_Extrude(geometry, float, float, float) IS 'args: geom, x, y, z - Extrude a surface to a related volume'; COMMENT ON FUNCTION ST_StraightSkeleton(geometry) IS 'args: geom - Compute a straight skeleton from a geometry'; COMMENT ON FUNCTION ST_IsPlanar(geometry) IS 'args: geom - Check if a surface is or not planar'; COMMENT ON FUNCTION ST_Orientation(geometry) IS 'args: geom - Determine surface orientation'; COMMENT ON FUNCTION ST_ForceLHR(geometry) IS 'args: geom - Force LHR orientation'; COMMENT ON FUNCTION ST_Minkowski(geometry, geometry) IS 'args: geom1, geom2 - Perform Minkowski sum'; COMMENT ON FUNCTION ST_Tesselate(geometry) IS 'args: geom - Perform surface Tesselation'; postgis-2.1.2+dfsg.orig/doc/installation.xml0000644000000000000000000021463212236004010017544 0ustar rootroot PostGIS Installation This chapter details the steps required to install PostGIS. Short Version To compile assuming you have all the dependencies in your search path: tar xvfz postgis-&last_release_version;.tar.gz cd postgis-&last_release_version; ./configure make make install Once postgis is installed, it needs to be enabled in each individual database you want to use it in. The raster support is currently optional, but installed by default. For enabling using the PostgreSQL 9.1+ extensions model raster is required. Using the extension enable process is preferred and more user-friendly. To spatially enable your database: psql -d yourdatabase -c "CREATE EXTENSION postgis;" psql -d yourdatabase -c "CREATE EXTENSION postgis_topology;" psql -d yourdatabase -c "CREATE EXTENSION postgis_tiger_geocoder;" Please refer to for more details about querying installed/available extensions and upgrading extensions, or switching from a non-extension install to an extension install. For those running PostgreSQL 9.0 or who decided for some reason not to compile with raster support, or just are old-fashioned, here are longer more painful instructions for you: All the .sql files once installed will be installed in share/contrib/postgis-&last_minor_version; folder of your PostgreSQL install createdb yourdatabase createlang plpgsql yourdatabase psql -d yourdatabase -f postgis.sql psql -d yourdatabase -f postgis_comments.sql psql -d yourdatabase -f spatial_ref_sys.sql psql -d yourdatabase -f rtpostgis.sql psql -d yourdatabase -f raster_comments.sql psql -d yourdatabase -f topology/topology.sql psql -d yourdatabase -f topology_comments.sql The rest of this chapter goes into detail each of the above installation steps. Install Requirements PostGIS has the following requirements for building and usage: Required PostgreSQL &min_postgres_version; or higher. A complete installation of PostgreSQL (including server headers) is required. PostgreSQL is available from http://www.postgresql.org . For a full PostgreSQL / PostGIS support matrix and PostGIS/GEOS support matrix refer to http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS GNU C compiler (gcc). Some other ANSI C compilers can be used to compile PostGIS, but we find far fewer problems when compiling with gcc. GNU Make (gmake or make). For many systems, GNU make is the default version of make. Check the version by invoking make -v. Other versions of make may not process the PostGIS Makefile properly. Proj4 reprojection library, version 4.6.0 or greater. The Proj4 library is used to provide coordinate reprojection support within PostGIS. Proj4 is available for download from http://trac.osgeo.org/proj/ . GEOS geometry library, version 3.3 or greater, but GEOS 3.4+ is recommended to take full advantage of all the new functions and features. Without GEOS 3.4, you will be missing some major enhancements such as ST_Triangles and long-running function interruption, and improvements to geometry validation and making geometries valid such as ST_ValidDetail and ST_MakeValid. GEOS 3.3.2+ is also required for topology support. GEOS is available for download from http://trac.osgeo.org/geos/ and 3.4+ is backward-compatible with older versions so fairly safe to upgrade. LibXML2, version 2.5.x or higher. LibXML2 is currently used in some imports functions (ST_GeomFromGML and ST_GeomFromKML). LibXML2 is available for download from http://xmlsoft.org/downloads.html. JSON-C, version 0.9 or higher. JSON-C is currently used to import GeoJSON via the function ST_GeomFromGeoJson. JSON-C is available for download from https://github.com/json-c/json-c/releases. GDAL, version 1.8 or higher (1.9 or higher is strongly recommended since some things will not work well or behavior differently with lower versions). This is required for raster support and to be able to install with CREATE EXTENSION postgis so highly recommended for those running 9.1+. http://trac.osgeo.org/gdal/wiki/DownloadSource. Optional GDAL (pseudo optional) only if you don't want raster and don't care about installing with CREATE EXTENSION postgis can you leave it out. Keep in mind other extensions may have a requires postgis extension which will prevent you from installing them unless you install postgis as an extension. So it is highly recommended you compile with GDAL support. GTK (requires GTK+2.0, 2.8+) to compile the shp2pgsql-gui shape file loader. http://www.gtk.org/ . SFCGAL, version 0.2 (or higher) could be used to provide additional 2D and 3D advanced analysis functions to PostGIS cf . And also allow to use SFCGAL rather than GEOS for some 2D functions provided by both backends (like ST_Intersection or ST_Area, for instance). A PostgreSQL configuration variable postgis.backend allow end user to control which backend he want to use if SFCGAL is installed (GEOS by default). Nota: SFCGAL 0.2 require at least CGAL 4.1. https://github.com/Oslandia/SFCGAL. CUnit (CUnit). This is needed for regression testing. http://cunit.sourceforge.net/ Apache Ant (ant) is required for building any of the drivers under the java directory. Ant is available from http://ant.apache.org . DocBook (xsltproc) is required for building the documentation. Docbook is available from http://www.docbook.org/ . DBLatex (dblatex) is required for building the documentation in PDF format. DBLatex is available from http://dblatex.sourceforge.net/ . ImageMagick (convert) is required to generate the images used in the documentation. ImageMagick is available from http://www.imagemagick.org/ . Getting the Source Retrieve the PostGIS source archive from the downloads website &postgis_download_url; wget &postgis_download_url; tar -xvzf postgis-&last_release_version;.tar.gz This will create a directory called postgis-&last_release_version; in the current working directory. Alternatively, checkout the source from the svn repository http://svn.osgeo.org/postgis/trunk/ . svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-&last_release_version; Change into the newly created postgis-&last_release_version; directory to continue the installation. Compiling and Install from Source: Detailed Many OS systems now include pre-built packages for PostgreSQL/PostGIS. In many cases compilation is only necessary if you want the most bleeding edge versions or you are a package maintainer. This section includes general compilation instructions, if you are compiling for Windows etc or another OS, you may find additional more detailed help at PostGIS User contributed compile guides and PostGIS Dev Wiki. Pre-Built Packages for various OS are listed in PostGIS Pre-built Packages If you are a windows user, you can get stable builds via Stackbuilder or PostGIS Windows download site We also have very bleeding-edge windows experimental builds that are built usually once or twice a week or whenever anything exciting happens. You can use these to experiment with the in progress releases of PostGIS The PostGIS module is an extension to the PostgreSQL backend server. As such, PostGIS &last_release_version; requires full PostgreSQL server headers access in order to compile. It can be built against PostgreSQL versions &min_postgres_version; or higher. Earlier versions of PostgreSQL are not supported. Refer to the PostgreSQL installation guides if you haven't already installed PostgreSQL. http://www.postgresql.org . For GEOS functionality, when you install PostgresSQL you may need to explicitly link PostgreSQL against the standard C++ library: LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE] This is a workaround for bogus C++ exceptions interaction with older development tools. If you experience weird problems (backend unexpectedly closed or similar things) try this trick. This will require recompiling your PostgreSQL from scratch, of course. The following steps outline the configuration and compilation of the PostGIS source. They are written for Linux users and will not work on Windows or Mac. Configuration As with most linux installations, the first step is to generate the Makefile that will be used to build the source code. This is done by running the shell script ./configure With no additional parameters, this command will attempt to automatically locate the required components and libraries needed to build the PostGIS source code on your system. Although this is the most common usage of ./configure, the script accepts several parameters for those who have the required libraries and programs in non-standard locations. The following list shows only the most commonly used parameters. For a complete list, use the --help or --help=short parameters. --prefix=PREFIX This is the location the PostGIS libraries and SQL scripts will be installed to. By default, this location is the same as the detected PostgreSQL installation. This parameter is currently broken, as the package will only install into the PostgreSQL installation directory. Visit http://trac.osgeo.org/postgis/ticket/635 to track this bug. --with-pgconfig=FILE PostgreSQL provides a utility called pg_config to enable extensions like PostGIS to locate the PostgreSQL installation directory. Use this parameter (--with-pgconfig=/path/to/pg_config) to manually specify a particular PostgreSQL installation that PostGIS will build against. --with-gdalconfig=FILE GDAL, a required library, provides functionality needed for raster support gdal-config to enable software installations to locate the GDAL installation directory. Use this parameter (--with-gdalconfig=/path/to/gdal-config) to manually specify a particular GDAL installation that PostGIS will build against. --with-geosconfig=FILE GEOS, a required geometry library, provides a utility called geos-config to enable software installations to locate the GEOS installation directory. Use this parameter (--with-geosconfig=/path/to/geos-config) to manually specify a particular GEOS installation that PostGIS will build against. --with-xml2config=FILE LibXML is the library required for doing GeomFromKML/GML processes. It normally is found if you have libxml installed, but if not or you want a specific version used, you'll need to point PostGIS at a specific xml2-config confi file to enable software installations to locate the LibXML installation directory. Use this parameter (>--with-xml2config=/path/to/xml2-config) to manually specify a particular LibXML installation that PostGIS will build against. --with-projdir=DIR Proj4 is a reprojection library required by PostGIS. Use this parameter (--with-projdir=/path/to/projdir) to manually specify a particular Proj4 installation directory that PostGIS will build against. --with-libiconv=DIR Directory where iconv is installed. --with-jsondir=DIR JSON-C is an MIT-licensed JSON library required by PostGIS ST_GeomFromJSON support. Use this parameter (--with-jsondir=/path/to/jsondir) to manually specify a particular JSON-C installation directory that PostGIS will build against. --with-gui Compile the data import GUI (requires GTK+2.0). This will create shp2pgsql-gui graphical interface to shp2pgsql. --with-raster Compile with raster support. This will build rtpostgis-&last_release_version; library and rtpostgis.sql file. This may not be required in final release as plan is to build in raster support by default. --with-topology Compile with topology support. This will build the topology.sql file. There is no corresponding library as all logic needed for topology is in postgis-&last_release_version; library. --with-gettext=no By default PostGIS will try to detect gettext support and compile with it, however if you run into incompatibility issues that cause breakage of loader, you can disable it entirely with this command. Refer to ticket http://trac.osgeo.org/postgis/ticket/748 for an example issue solved by configuring with this. NOTE: that you aren't missing much by turning this off. This is used for international help/label support for the GUI loader which is not yet documented and still experimental. If you obtained PostGIS from the SVN repository , the first step is really to run the script ./autogen.sh This script will generate the configure script that in turn is used to customize the installation of PostGIS. If you instead obtained PostGIS as a tarball, running ./autogen.sh is not necessary as configure has already been generated. Building Once the Makefile has been generated, building PostGIS is as simple as running make The last line of the output should be "PostGIS was built successfully. Ready to install." As of PostGIS v1.4.0, all the functions have comments generated from the documentation. If you wish to install these comments into your spatial databases later, run the command which requires docbook. The postgis_comments.sql and other package comments files raster_comments.sql, topology_comments.sql are also packaged in the tar.gz distribution in the doc folder so no need to make comments if installing from the tar ball. make comments Introduced in PostGIS 2.0. This generates html cheat sheets suitable for quick reference or for student handouts. This requires xsltproc to build and will generate 4 files in doc folder topology_cheatsheet.html, tiger_geocoder_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.html You can download some pre-built ones available in html and pdf from PostGIS / PostgreSQL Study Guides make cheatsheets Building PostGIS Extensions and Deploying them The PostGIS extensions are built and installed automatically if you are using PostgreSQL 9.1+. If you are building from source repository, you need to build the function descriptions first. These get built if you have docbook installed. You can also manually build with the statement: make comments Building the comments is not necessary if you are building from a release tar ball since these are packaged pre-built with the tar ball already. If you are building against PostgreSQL 9.1, the extensions should automatically build as part of the make install process. You can if needed build from the extensions folders or copy files if you need them on a different server. cd extensions cd postgis make clean make make install cd .. cd postgis_topology make clean make make install The extension files will always be the same for the same version of PostGIS regardless of OS, so it is fine to copy over the extension files from one OS to another as long as you have the PostGIS binaries already installed on your servers. If you want to install the extensions manually on a separate server different from your development, You need to copy the following files from the extensions folder into the PostgreSQL / share / extension folder of your PostgreSQL install as well as the needed binaries for regular PostGIS if you don't have them already on the server. These are the control files that denote information such as the version of the extension to install if not specified. postgis.control, postgis_topology.control. All the files in the /sql folder of each extension. Note that these need to be copied to the root of the PostgreSQL share/extension folder extensions/postgis/sql/*.sql, extensions/postgis_topology/sql/*.sql Once you do that, you should see postgis, postgis_topology as available extensions in PgAdmin -> extensions. If you are using psql, you can verify that the extensions are installed by running this query: SELECT name, default_version,installed_version FROM pg_available_extensions WHERE name LIKE 'postgis%' ; name | default_version | installed_version -----------------+-----------------+------------------- postgis | &last_release_version; | &last_release_version; postgis_topology | &last_release_version; | If you have the extension installed in the database you are querying, you'll see mention in the installed_version column. If you get no records back, it means you don't have postgis extensions installed on the server at all. PgAdmin III 1.14+ will also provide this information in the extensions section of the database browser tree and will even allow upgrade or uninstall by right-clicking. If you have the extensions available, you can install postgis extension in your database of choice by either using pgAdmin extension interface or running these sql commands: CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; CREATE EXTENSION postgis_tiger_geocoder; In psql you can use to see what versions you have installed and also what schema they are installed. \connect mygisdb \x \dx postgis* List of installed extensions -[ RECORD 1 ]------------------------------------------------- - Name | postgis Version | &last_release_version; Schema | public Description | PostGIS geometry, geography, and raster spat.. -[ RECORD 2 ]------------------------------------------------- - Name | postgis_tiger_geocoder Version | &last_release_version; Schema | tiger Description | PostGIS tiger geocoder and reverse geocoder -[ RECORD 3 ]------------------------------------------------- - Name | postgis_topology Version | &last_release_version; Schema | topology Description | PostGIS topology spatial types and functions Extension tables spatial_ref_sys, layer, topology can not be explicitly backed up. They can only be backed up when the respective postgis or postgis_topology extension is backed up, which only seems to happen when you backup the whole database. As of PostGIS 2.0.1, only srid records not packaged with PostGIS are backed up when the database is backed up so don't go around changing srids we package and expect your changes to be there. Put in a ticket if you find an issue. The structures of extension tables are never backed up since they are created with CREATE EXTENSION and assumed to be the same for a given version of an extension. These behaviors are built into the current PostgreSQL extension model, so nothing we can do about it. If you installed &last_release_version;, without using our wonderful extension system, you can change it to be extension based by first upgrading to the latest micro version running the upgrade scripts: postgis_upgrade_21_minor.sql,raster_upgrade_21_minor.sql,topology_upgrade_21_minor.sql. If you installed postgis without raster support, you'll need to install raster support first (using the full rtpostgis.sql Then you can run the below commands to package the functions in their respective extension. CREATE EXTENSION postgis FROM unpackaged; CREATE EXTENSION postgis_topology FROM unpackaged; CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged; Testing If you wish to test the PostGIS build, run make check The above command will run through various checks and regression tests using the generated library against an actual PostgreSQL database. If you configured PostGIS using non-standard PostgreSQL, GEOS, or Proj4 locations, you may need to add their library locations to the LD_LIBRARY_PATH environment variable. Currently, the make check relies on the PATH and PGPORT environment variables when performing the checks - it does not use the PostgreSQL version that may have been specified using the configuration parameter --with-pgconfig. So make sure to modify your PATH to match the detected PostgreSQL installation during configuration or be prepared to deal with the impending headaches. If successful, the output of the test should be similar to the following: CUnit - A Unit testing framework for C - Version 2.1-0 http://cunit.sourceforge.net/ Suite: print_suite Test: test_lwprint_default_format ... passed Test: test_lwprint_format_orders ... passed Test: test_lwprint_optional_format ... passed Test: test_lwprint_oddball_formats ... passed Test: test_lwprint_bad_formats ... passed Suite: misc Test: test_misc_force_2d ... passed Test: test_misc_simplify ... passed Test: test_misc_count_vertices ... passed Test: test_misc_area ... passed Test: test_misc_wkb ... passed Suite: ptarray Test: test_ptarray_append_point ... passed Test: test_ptarray_append_ptarray ... passed Test: test_ptarray_locate_point ... passed Test: test_ptarray_isccw ... passed Test: test_ptarray_signed_area ... passed Test: test_ptarray_desegmentize ... passed Test: test_ptarray_insert_point ... passed Test: test_ptarray_contains_point ... passed Test: test_ptarrayarc_contains_point ... passed Suite: PostGIS Computational Geometry Suite Test: test_lw_segment_side ... passed Test: test_lw_segment_intersects ... passed Test: test_lwline_crossing_short_lines ... passed Test: test_lwline_crossing_long_lines ... passed Test: test_lwline_crossing_bugs ... passed Test: test_lwpoint_set_ordinate ... passed Test: test_lwpoint_get_ordinate ... passed Test: test_point_interpolate ... passed Test: test_lwline_clip ... passed Test: test_lwline_clip_big ... passed Test: test_lwmline_clip ... passed Test: test_geohash_point ... passed Test: test_geohash_precision ... passed Test: test_geohash ... passed Test: test_geohash_point_as_int ... passed Test: test_isclosed ... passed Suite: buildarea Test: buildarea1 ... passed Test: buildarea2 ... passed Test: buildarea3 ... passed Test: buildarea4 ... passed Test: buildarea4b ... passed Test: buildarea5 ... passed Test: buildarea6 ... passed Test: buildarea7 ... passed Suite: clean Test: test_lwgeom_make_valid ... passed Suite: PostGIS Measures Suite Test: test_mindistance2d_tolerance ... passed Test: test_rect_tree_contains_point ... passed Test: test_rect_tree_intersects_tree ... passed Test: test_lwgeom_segmentize2d ... passed Test: test_lwgeom_locate_along ... passed Test: test_lw_dist2d_pt_arc ... passed Test: test_lw_dist2d_seg_arc ... passed Test: test_lw_dist2d_arc_arc ... passed Test: test_lw_arc_length ... passed Test: test_lw_dist2d_pt_ptarrayarc ... passed Test: test_lw_dist2d_ptarray_ptarrayarc ... passed Suite: node Test: test_lwgeom_node ... passed Suite: WKT Out Suite Test: test_wkt_out_point ... passed Test: test_wkt_out_linestring ... passed Test: test_wkt_out_polygon ... passed Test: test_wkt_out_multipoint ... passed Test: test_wkt_out_multilinestring ... passed Test: test_wkt_out_multipolygon ... passed Test: test_wkt_out_collection ... passed Test: test_wkt_out_circularstring ... passed Test: test_wkt_out_compoundcurve ... passed Test: test_wkt_out_curvpolygon ... passed Test: test_wkt_out_multicurve ... passed Test: test_wkt_out_multisurface ... passed Suite: WKT In Suite Test: test_wkt_in_point ... passed Test: test_wkt_in_linestring ... passed Test: test_wkt_in_polygon ... passed Test: test_wkt_in_multipoint ... passed Test: test_wkt_in_multilinestring ... passed Test: test_wkt_in_multipolygon ... passed Test: test_wkt_in_collection ... passed Test: test_wkt_in_circularstring ... passed Test: test_wkt_in_compoundcurve ... passed Test: test_wkt_in_curvpolygon ... passed Test: test_wkt_in_multicurve ... passed Test: test_wkt_in_multisurface ... passed Test: test_wkt_in_tin ... passed Test: test_wkt_in_polyhedralsurface ... passed Test: test_wkt_in_errlocation ... passed Suite: WKB Out Suite Test: test_wkb_out_point ... passed Test: test_wkb_out_linestring ... passed Test: test_wkb_out_polygon ... passed Test: test_wkb_out_multipoint ... passed Test: test_wkb_out_multilinestring ... passed Test: test_wkb_out_multipolygon ... passed Test: test_wkb_out_collection ... passed Test: test_wkb_out_circularstring ... passed Test: test_wkb_out_compoundcurve ... passed Test: test_wkb_out_curvpolygon ... passed Test: test_wkb_out_multicurve ... passed Test: test_wkb_out_multisurface ... passed Test: test_wkb_out_polyhedralsurface ... passed : Suite: Geodetic Suite Test: test_sphere_direction ... passed Test: test_sphere_project ... passed Test: test_lwgeom_area_sphere ... passed Test: test_signum ... passed Test: test_gbox_from_spherical_coordinates ... passed : Test: test_geos_noop ... passed Suite: Internal Spatial Trees Test: test_tree_circ_create ... passed Test: test_tree_circ_pip ... passed Test: test_tree_circ_pip2 ... passed Test: test_tree_circ_distance ... passed Suite: triangulate Test: test_lwgeom_delaunay_triangulation ... passed Suite: stringbuffer Test: test_stringbuffer_append ... passed Test: test_stringbuffer_aprintf ... passed Suite: surface Test: triangle_parse ... passed Test: tin_parse ... passed Test: polyhedralsurface_parse ... passed Test: surface_dimension ... passed Suite: homogenize Test: test_coll_point ... passed Test: test_coll_line ... passed Test: test_coll_poly ... passed Test: test_coll_coll ... passed Test: test_geom ... passed Test: test_coll_curve ... passed Suite: force_sfs Test: test_sfs_11 ... passed Test: test_sfs_12 ... passed Test: test_sqlmm ... passed Suite: out_gml Test: out_gml_test_precision ... passed Test: out_gml_test_srid ... passed Test: out_gml_test_dims ... passed Test: out_gml_test_geodetic ... passed Test: out_gml_test_geoms ... passed Test: out_gml_test_geoms_prefix ... passed Test: out_gml_test_geoms_nodims ... passed Test: out_gml2_extent ... passed Test: out_gml3_extent ... passed Suite: KML Out Suite Test: out_kml_test_precision ... passed Test: out_kml_test_dims ... passed Test: out_kml_test_geoms ... passed Test: out_kml_test_prefix ... passed Suite: GeoJson Out Suite Test: out_geojson_test_precision ... passed Test: out_geojson_test_dims ... passed Test: out_geojson_test_srid ... passed Test: out_geojson_test_bbox ... passed Test: out_geojson_test_geoms ... passed Suite: SVG Out Suite Test: out_svg_test_precision ... passed Test: out_svg_test_dims ... passed Test: out_svg_test_relative ... passed Test: out_svg_test_geoms ... passed Test: out_svg_test_srid ... passed Suite: X3D Out Suite Test: out_x3d3_test_precision ... passed Test: out_x3d3_test_geoms ... passed --Run Summary: Type Total Ran Passed Failed suites 27 27 n/a 0 tests 198 198 198 0 asserts 1728 1728 1728 0 Creating database 'postgis_reg' Loading PostGIS into 'postgis_reg' PostgreSQL 9.3beta1 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.4.5-8) 4.4.5, 64-bit Postgis 2.1.0SVN - r11415 - 2013-05-11 02:48:21 GEOS: 3.4.0dev-CAPI-1.8.0 r3797 PROJ: Rel. 4.7.1, 23 September 2009 Running tests loader/Point .............. ok loader/PointM .............. ok loader/PointZ .............. ok loader/MultiPoint .............. ok loader/MultiPointM .............. ok loader/MultiPointZ .............. ok loader/Arc .............. ok loader/ArcM .............. ok loader/ArcZ .............. ok loader/Polygon .............. ok loader/PolygonM .............. ok loader/PolygonZ .............. ok loader/TSTPolygon ......... ok loader/TSIPolygon ......... ok loader/TSTIPolygon ......... ok loader/PointWithSchema ..... ok loader/NoTransPoint ......... ok loader/NotReallyMultiPoint ......... ok loader/MultiToSinglePoint ......... ok loader/ReprojectPts ........ ok loader/ReprojectPtsGeog ........ ok loader/Latin1 .... ok binary .. ok regress .. ok regress_index .. ok regress_index_nulls .. ok regress_selectivity .. ok lwgeom_regress .. ok regress_lrs .. ok removepoint .. ok setpoint .. ok simplify .. ok snaptogrid .. ok summary .. ok affine .. ok empty .. ok measures .. ok legacy .. ok long_xact .. ok ctors .. ok sql-mm-serialize .. ok sql-mm-circularstring .. ok sql-mm-compoundcurve .. ok sql-mm-curvepoly .. ok sql-mm-general .. ok sql-mm-multicurve .. ok sql-mm-multisurface .. ok polyhedralsurface .. ok polygonize .. ok postgis_type_name .. ok geography .. ok out_geometry .. ok out_geography .. ok in_geohash .. ok in_gml .. ok in_kml .. ok iscollection .. ok regress_ogc .. ok regress_ogc_cover .. ok regress_ogc_prep .. ok regress_bdpoly .. ok regress_proj .. ok regress_management .. ok dump .. ok dumppoints .. ok boundary .. ok wmsservers .. ok wkt .. ok wkb .. ok tickets .. ok typmod .. ok remove_repeated_points .. ok split .. ok relate .. ok bestsrid .. ok concave_hull .. ok hausdorff .. ok regress_buffer_params .. ok offsetcurve .. ok relatematch .. ok isvaliddetail .. ok sharedpaths .. ok snap .. ok node .. ok unaryunion .. ok clean .. ok relate_bnr .. ok delaunaytriangles .. ok in_geojson .. ok uninstall .. ok (4112) Run tests: 90 Installation To install PostGIS, type make install This will copy the PostGIS installation files into their appropriate subdirectory specified by the --prefix configuration parameter. In particular: The loader and dumper binaries are installed in [prefix]/bin. The SQL files, such as postgis.sql, are installed in [prefix]/share/contrib. The PostGIS libraries are installed in [prefix]/lib. If you previously ran the make comments command to generate the postgis_comments.sql, raster_comments.sql file, install the sql file by running make comments-install postgis_comments.sql, raster_comments.sql, topology_comments.sql was separated from the typical build and installation targets since with it comes the extra dependency of xsltproc. Create a spatially-enabled database on PostgreSQL lower than 9.1 The first step in creating a PostGIS database is to create a simple PostgreSQL database. createdb [yourdatabase] Many of the PostGIS functions are written in the PL/pgSQL procedural language. As such, the next step to create a PostGIS database is to enable the PL/pgSQL language in your new database. This is accomplish by the command below command. For PostgreSQL 8.4+, this is generally already installed createlang plpgsql [yourdatabase] Now load the PostGIS object and function definitions into your database by loading the postgis.sql definitions file (located in [prefix]/share/contrib as specified during the configuration step). psql -d [yourdatabase] -f postgis.sql For a complete set of EPSG coordinate system definition identifiers, you can also load the spatial_ref_sys.sql definitions file and populate the spatial_ref_sys table. This will permit you to perform ST_Transform() operations on geometries. psql -d [yourdatabase] -f spatial_ref_sys.sql If you wish to add comments to the PostGIS functions, the final step is to load the postgis_comments.sql into your spatial database. The comments can be viewed by simply typing \dd [function_name] from a psql terminal window. psql -d [yourdatabase] -f postgis_comments.sql Install raster support psql -d [yourdatabase] -f rtpostgis.sql Install raster support comments. This will provide quick help info for each raster function using psql or PgAdmin or any other PostgreSQL tool that can show function comments psql -d [yourdatabase] -f raster_comments.sql Install topology support psql -d [yourdatabase] -f topology/topology.sql Install topology support comments. This will provide quick help info for each topology function / type using psql or PgAdmin or any other PostgreSQL tool that can show function comments psql -d [yourdatabase] -f topology/topology_comments.sql If you plan to restore an old backup from prior versions in this new db, run: psql -d [yourdatabase] -f legacy.sql There is an alternative legacy_minimal.sql you can run instead which will install barebones needed to recover tables and work with apps like MapServer and GeoServer. If you have views that use things like distance / length etc, you'll need the full blown legacy.sql You can later run uninstall_legacy.sql to get rid of the deprecated functions after you are done with restoring and cleanup. Creating a spatial database using EXTENSIONS If you are using PostgreSQL 9.1+ and have compiled and installed the extensions/ postgis modules, you can create a spatial database the new way. createdb [yourdatabase] The core postgis extension installs PostGIS geometry, geography, raster, spatial_ref_sys and all the functions and comments with a simple: CREATE EXTENSION postgis; command. psql -d [yourdatabase] -c "CREATE EXTENSION postgis;" Topology is packaged as a separate extension and installable with command: psql -d [yourdatabase] -c "CREATE EXTENSION postgis_topology;" If you plan to restore an old backup from prior versions in this new db, run: psql -d [yourdatabase] -f legacy.sql You can later run uninstall_legacy.sql to get rid of the deprecated functions after you are done with restoring and cleanup. Installing, Upgrading Tiger Geocoder and loading data Extras like Tiger geocoder may not be packaged in your PostGIS distribution, but will always be available in the postgis-&last_release_version;.tar.gz file. The instructions provided here are also available in the extras/tiger_geocoder/tiger_2011/README If you are on Windows and you don't have tar installed, you can use http://www.7-zip.org/ to unzip the PostGIS tarball. Tiger Geocoder Enabling your PostGIS database: Using Extension If you are using PostgreSQL 9.1+ and PostGIS 2.1.0+, you can take advantage of the new extension model for installing tiger geocoder. To do so: First get binaries for PostGIS 2.1.0 or compile and install as usual. This should install the necessary extension files as well for tiger geocoder. Connect to your database via psql or pgAdmin or some other tool and run the following SQL commands. Note that if you are installing in a database that already has postgis, you don't need to do the first step. If you have fuzzystrmatch extension already installed, you don't need to do the second step either. CREATE EXTENSION postgis; CREATE EXTENSION fuzzystrmatch; CREATE EXTENSION postgis_tiger_geocoder; To confirm your install is working correctly, run this sql in your database: SELECT na.address, na.streetname,na.streettypeabbrev, na.zip FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na; Which should output address | streetname | streettypeabbrev | zip ---------+------------+------------------+------- 1 | Devonshire | Pl | 02109 Create a new record in tiger.loader_platform table with the paths of your executables and server. So for example to create a profile called debbie that follows sh convention. You would do: INSERT INTO tiger.loader_platform(os, declare_sect, pgbin, wget, unzip_command, psql, path_sep, loader, environ_set_command, county_process_command) SELECT 'debbie', declare_sect, pgbin, wget, unzip_command, psql, path_sep, loader, environ_set_command, county_process_command FROM tiger.loader_platform WHERE os = 'sh'; And then edit the paths in the declare_sect column to those that fit Debbie's pg, unzip,shp2pgsql, psql, etc path locations. If you don't edit this loader_platform table, it will just contain common case locations of items and you'll have to edit the generated script after the script is generated. Then run the and SQL functions make sure to use the name of your custom profile. So for example to do the nation load using our new profile we would: SELECT Loader_Generate_Nation_Script('debbie'); Converting a Tiger Geocoder Regular Install to Extension Model If you installed the tiger geocoder without using the extension model, you can convert to the extension model as follows: Follow instructions in for the non-extension model upgrade. Connect to your database with psql or pgAdmin and run the following command: CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged; Using PAGC address standardizer One of the many complaints of folks is the address normalizer function function that normalizes an address for prepping before geocoding. The normalizer is far from perfect and trying to patch its imperfectness takes a vast amount of resources. As such we have integrated with another project that has a much better address standardizer engine. This is currently a separate project, which is a subproject of PAGC. The source code for this PostgreSQL standardizer extension can be downloaded from PAGC PostgreSQL Address Standardizer. To use this new normalizer, you compile the pagc extension and install as an extension in your database. The PAGC project and standardizer portion in particular, relies on PCRE which is usually already installed on most Nix systems, but you can download the latest at: http://www.pcre.org. It also requires Perl with the Regexp::Assemble installed For Windows users, the PostGIS 2.1+ bundle will come packaged with the address_standardizer already so no need to compile and can move straight to CREATE EXTENSION step. Installing Regex::Assemble cpan Regexp::Assemble or if you are on Ubuntu / Debian you might need to do sudo perl -MCPAN -e "install Regexp::Assemble" Compiling svn co svn://svn.code.sf.net/p/pagc/code/branches/sew-refactor/postgresql address_standardizer cd address_standardizer make #if you have in non-standard location pcre try # make SHLIB_LINK="-L/path/pcre/lib -lpostgres -lpgport -lpcre" CPPFLAGS="-I. -I/path/pcre/include" make install Once you have installed, you can connect to your database and run the SQL: CREATE EXTENSION address_standardizer; Once you install this extension in the same database as you have installed postgis_tiger_geocoder, then the can be used instead of . The other nice thing about this extension is that its tiger agnostic, so can be used with other data sources such as international addresses. Tiger Geocoder Enabling your PostGIS database: Not Using Extensions First install PostGIS using the prior instructions. If you don't have an extras folder, download &postgis_download_url; tar xvfz postgis-&last_release_version;.tar.gz cd postgis-&last_release_version;/extras/tiger_geocoder/tiger_2011 Edit the tiger_loader_2012.sql to the paths of your executables server etc or alternatively you can update the loader_platform table once installed. If you don't edit this file or the loader_platform table, it will just contain common case locations of items and you'll have to edit the generated script after the fact when you run the and SQL functions. If you are installing Tiger geocoder for the first time edit either the create_geocode.bat script If you are on windows or the create_geocode.sh if you are on Linux/Unix/Mac OSX with your PostgreSQL specific settings and run the corresponding script from the commandline. Verify that you now have a tiger schema in your database and that it is part of your database search_path. If it is not, add it with a command something along the line of: ALTER DATABASE geocoder SET search_path=public, tiger; The normalizing address functionality works more or less without any data except for tricky addresses. Run this test and verify things look like this: SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address; pretty_address --------------------------------------- 202 E Fremont St, Las Vegas, NV 89101 Loading Tiger Data The instructions for loading data are available in a more detailed form in the extras/tiger_geocoder/tiger_2011/README. This just includes the general steps. The load process downloads data from the census website for the respective nation files, states requested, extracts the files, and then loads each state into its own separate set of state tables. Each state table inherits from the tables defined in tiger schema so that its sufficient to just query those tables to access all the data and drop a set of state tables at any time using the if you need to reload a state or just don't need a state anymore. In order to be able to load data you'll need the following tools: A tool to unzip the zip files from census website. For Unix like systems: unzip executable which is usually already installed on most Unix like platforms. For Windows, 7-zip which is a free compress/uncompress tool you can download from http://www.7-zip.org/ shp2pgsql commandline which is installed by default when you install PostGIS. wget which is a web grabber tool usually installed on most Unix/Linux systems. If you are on windows, you can get pre-compiled binaries from http://gnuwin32.sourceforge.net/packages/wget.htm If you are upgrading from tiger_2010, you'll need to first generate and run . Before you load any state data, you need to load the nation wide data which you do with . Which will generate a loader script for you. is a one-time step that should be done for upgrading (from 2010) and for new installs. To load state data refer to to generate a data load script for your platform for the states you desire. Note that you can install these piecemeal. You don't have to load all the states you want all at once. You can load them as you need them. After the states you desire have been loaded, make sure to run the: SELECT install_missing_indexes(); as described in . To test that things are working as they should, try to run a geocode on an address in your state using Upgrading your Tiger Geocoder Install If you have Tiger Geocoder packaged with 2.0+ already installed, you can upgrade the functions at any time even from an interim tar ball if there are fixes you badly need. This will only work for Tiger geocoder not installed with extensions. If you don't have an extras folder, download &postgis_download_url; tar xvfz postgis-&last_release_version;.tar.gz cd postgis-&last_release_version;/extras/tiger_geocoder/tiger_2011 Locate the upgrade_geocoder.bat script If you are on windows or the upgrade_geocoder.sh if you are on Linux/Unix/Mac OSX. Edit the file to have your postgis database credentials. If you are upgrading from 2010 or 2011, make sure to unremark out the loader script line so you get the latest script for loading 2012 data. Then run th corresponding script from the commandline. Next drop all nation tables and load up the new ones. Generate a drop script with this SQL statement as detailed in SELECT drop_nation_tables_generate_script(); Run the generated drop SQL statements. Generate a nation load script with this SELECT statement as detailed in For windows SELECT loader_generate_nation_script('windows'); For unix/linux SELECT loader_generate_nation_script('sh'); Refer to for instructions on how to run the generate script. This only needs to be done once. You can have a mix of 2010/2011 state tables and can upgrade each state separately. Before you upgrade a state to 2011, you first need to drop the 2010 tables for that state using . Create a spatially-enabled database from a template Some packaged distributions of PostGIS (in particular the Win32 installers for PostGIS >= 1.1.5) load the PostGIS functions into a template database called template_postgis. If the template_postgis database exists in your PostgreSQL installation then it is possible for users and/or applications to create spatially-enabled databases using a single command. Note that in both cases, the database user must have been granted the privilege to create new databases. From the shell: # createdb -T template_postgis my_spatial_db From SQL: postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis Upgrading Upgrading existing spatial databases can be tricky as it requires replacement or introduction of new PostGIS object definitions. Unfortunately not all definitions can be easily replaced in a live database, so sometimes your best bet is a dump/reload process. PostGIS provides a SOFT UPGRADE procedure for minor or bugfix releases, and a HARD UPGRADE procedure for major releases. Before attempting to upgrade PostGIS, it is always worth to backup your data. If you use the -Fc flag to pg_dump you will always be able to restore the dump with a HARD UPGRADE. Soft upgrade If you installed your database using extensions, you'll need to upgrade using the extension model as well. If you installed using the old sql script way, then you should upgrade using the sql script way. Please refer to the appropriate. Soft Upgrade Pre 9.1+ or without extensions This section applies only to those who installed PostGIS not using extensions. If you have extensions and try to upgrade with this approach you'll get messages like: can't drop ... because postgis extension depends on it After compiling you should find several postgis_upgrade*.sql files. Install the one for your version of PostGIS. For example postgis_upgrade_20_to_21.sql should be used if you are upgrading from PostGIS 2.0 to 2.1. If you are moving from PostGIS 1.* to PostGIS 2.* or from PostGIS 2.* prior to r7409, you need to do a HARD UPGRADE. psql -f postgis_upgrade_21_minor.sql -d your_spatial_database The same procedure applies to raster and topology extensions, with upgrade files named rtpostgis_upgrade*.sql and topology_upgrade*.sql respectively. If you need them: psql -f rtpostgis_upgrade_21_minor.sql -d your_spatial_database psql -f topology_upgrade_21_minor.sql -d your_spatial_database If you can't find the postgis_upgrade*.sql specific for upgrading your version you are using a version too early for a soft upgrade and need to do a HARD UPGRADE. The function should inform you about the need to run this kind of upgrade using a "procs need upgrade" message. Soft Upgrade 9.1+ using extensions If you originally installed PostGIS with extensions, then you need to upgrade using extensions as well. Doing a minor upgrade with extensions, is fairly painless. ALTER EXTENSION postgis UPDATE TO "&last_release_version;"; ALTER EXTENSION postgis_topology UPDATE TO "&last_release_version;"; If you get an error notice something like: No migration path defined for ... to &last_release_version; Then you'll need to backup your database, create a fresh one as described in and then restore your backup ontop of this new database. If you get a notice message like: Version "&last_release_version;" of extension "postgis" is already installed Then everything is already up to date and you can safely ignore it. UNLESS you're attempting to upgrade from an SVN version to the next (which doesn't get a new version number); in that case you can append "next" to the version string, and next time you'll need to drop the "next" suffix again: ALTER EXTENSION postgis UPDATE TO "&last_release_version;next"; ALTER EXTENSION postgis_topology UPDATE TO "&last_release_version;next"; If you installed PostGIS originally without a version specified, you can often skip the reinstallation of postgis extension before restoring since the backup just has CREATE EXTENSION postgis and thus picks up the newest latest version during restore. Hard upgrade By HARD UPGRADE we mean full dump/reload of postgis-enabled databases. You need a HARD UPGRADE when PostGIS objects' internal storage changes or when SOFT UPGRADE is not possible. The Release Notes appendix reports for each version whether you need a dump/reload (HARD UPGRADE) to upgrade. The dump/reload process is assisted by the postgis_restore.pl script which takes care of skipping from the dump all definitions which belong to PostGIS (including old ones), allowing you to restore your schemas and data into a database with PostGIS installed without getting duplicate symbol errors or bringing forward deprecated objects. Supplementary instructions for windows users are available at Windows Hard upgrade. The Procedure is as follows: Create a "custom-format" dump of the database you want to upgrade (let's call it olddb) include binary blobs (-b) and verbose (-v) output. The user can be the owner of the db, need not be postgres super account. pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f "/somepath/olddb.backup" olddb Do a fresh install of PostGIS in a new database -- we'll refer to this database as newdb. Please refer to and for instructions on how to do this. The spatial_ref_sys entries found in your dump will be restored, but they will not override existing ones in spatial_ref_sys. This is to ensure that fixes in the official set will be properly propagated to restored databases. If for any reason you really want your own overrides of standard entries just don't load the spatial_ref_sys.sql file when creating the new db. If your database is really old or you know you've been using long deprecated functions in your views and functions, you might need to load legacy.sql for all your functions and views etc. to properly come back. Only do this if _really_ needed. Consider upgrading your views and functions before dumping instead, if possible. The deprecated functions can be later removed by loading uninstall_legacy.sql. Restore your backup into your fresh newdb database using postgis_restore.pl. Unexpected errors, if any, will be printed to the standard error stream by psql. Keep a log of those. perl utils/postgis_restore.pl "/somepath/olddb.backup" | psql -h localhost -p 5432 -U postgres newdb 2> errors.txt Errors may arise in the following cases: Some of your views or functions make use of deprecated PostGIS objects. In order to fix this you may try loading legacy.sql script prior to restore or you'll have to restore to a version of PostGIS which still contains those objects and try a migration again after porting your code. If the legacy.sql way works for you, don't forget to fix your code to stop using deprecated functions and drop them loading uninstall_legacy.sql. Some custom records of spatial_ref_sys in dump file have an invalid SRID value. Valid SRID values are bigger than 0 and smaller than 999000. Values in the 999000.999999 range are reserved for internal use while values > 999999 can't be used at all. All your custom records with invalid SRIDs will be retained, with those > 999999 moved into the reserved range, but the spatial_ref_sys table would loose a check constraint guarding for that invariant to hold and possibly also its primary key ( when multiple invalid SRIDS get converted to the same reserved SRID value ). In order to fix this you should copy your custom SRS to a SRID with a valid value (maybe in the 910000..910999 range), convert all your tables to the new srid (see ), delete the invalid entry from spatial_ref_sys and re-construct the check(s) with: ALTER TABLE spatial_ref_sys ADD CONSTRAINT spatial_ref_sys_srid_check check (srid > 0 AND srid < 999000 ); ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid)); Common Problems during installation There are several things to check when your installation or upgrade doesn't go as you expected. Check that you have installed PostgreSQL &min_postgres_version; or newer, and that you are compiling against the same version of the PostgreSQL source as the version of PostgreSQL that is running. Mix-ups can occur when your (Linux) distribution has already installed PostgreSQL, or you have otherwise installed PostgreSQL before and forgotten about it. PostGIS will only work with PostgreSQL &min_postgres_version; or newer, and strange, unexpected error messages will result if you use an older version. To check the version of PostgreSQL which is running, connect to the database using psql and run this query: SELECT version(); If you are running an RPM based distribution, you can check for the existence of pre-installed packages using the rpm command as follows: rpm -qa | grep postgresql If your upgrade fails, make sure you are restoring into a database that already has PostGIS installed. SELECT postgis_full_version(); Also check that configure has correctly detected the location and version of PostgreSQL, the Proj4 library and the GEOS library. The output from configure is used to generate the postgis_config.h file. Check that the POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION and POSTGIS_GEOS_VERSION variables have been set correctly. JDBC The JDBC extensions provide Java objects corresponding to the internal PostGIS types. These objects can be used to write Java clients which query the PostGIS database and draw or do calculations on the GIS data in PostGIS. Enter the java/jdbc sub-directory of the PostGIS distribution. Run the ant command. Copy the postgis.jar file to wherever you keep your java libraries. The JDBC extensions require a PostgreSQL JDBC driver to be present in the current CLASSPATH during the build process. If the PostgreSQL JDBC driver is located elsewhere, you may pass the location of the JDBC driver JAR separately using the -D parameter like this: # ant -Dclasspath=/path/to/postgresql-jdbc.jar PostgreSQL JDBC drivers can be downloaded from http://jdbc.postgresql.org . Loader/Dumper The data loader and dumper are built and installed automatically as part of the PostGIS build. To build and install them manually: # cd postgis-&last_release_version;/loader # make # make install The loader is called shp2pgsql and converts ESRI Shape files into SQL suitable for loading in PostGIS/PostgreSQL. The dumper is called pgsql2shp and converts PostGIS tables (or queries) into ESRI Shape files. For more verbose documentation, see the online help, and the manual pages. postgis-2.1.2+dfsg.orig/doc/doxygen.cfg.in0000644000000000000000000014432111722777314017110 0ustar rootroot# Doxyfile 1.4.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "PostGIS Trunk Doxygen" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @@LAST_RELEASE_VERSION@@-r@@SVN_REVISION@@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxygen # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = YES # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = YES # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../postgis ../liblwgeom ../loader ../raster # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = YES # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = YES # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = YES postgis-2.1.2+dfsg.orig/doc/reference_constructor.xml0000644000000000000000000024447512277306050021474 0ustar rootroot Geometry Constructors ST_BdPolyFromText Construct a Polygon given an arbitrary collection of closed linestrings as a MultiLineString Well-Known text representation. geometry ST_BdPolyFromText text WKT integer srid Description Construct a Polygon given an arbitrary collection of closed linestrings as a MultiLineString Well-Known text representation. Throws an error if WKT is not a MULTILINESTRING. Throws an error if output is a MULTIPOLYGON; use ST_BdMPolyFromText in that case, or see ST_BuildArea() for a postgis-specific approach. &sfs_compliant; s3.2.6.2 Availability: 1.1.0 - requires GEOS >= 2.1.0. Examples Forthcoming See Also , ST_BdMPolyFromText Construct a MultiPolygon given an arbitrary collection of closed linestrings as a MultiLineString text representation Well-Known text representation. geometry ST_BdMPolyFromText text WKT integer srid Description Construct a Polygon given an arbitrary collection of closed linestrings, polygons, MultiLineStrings as Well-Known text representation. Throws an error if WKT is not a MULTILINESTRING. Forces MULTIPOLYGON output even when result is really only composed by a single POLYGON; use ST_BdPolyFromText if you're sure a single POLYGON will result from operation, or see ST_BuildArea() for a postgis-specific approach. &sfs_compliant; s3.2.6.2 Availability: 1.1.0 - requires GEOS >= 2.1.0. Examples Forthcoming See Also , ST_Box2dFromGeoHash Return a BOX2D from a GeoHash string. box2d ST_Box2dFromGeoHash text geohash integer precision=full_precision_of_geohash Description Return a BOX2D from a GeoHash string. If no precision is specficified ST_Box2dFromGeoHash returns a BOX2D based on full precision of the input GeoHash string. If precision is specified ST_Box2dFromGeoHash will use that many characters from the GeoHash to create the BOX2D. Lower precision values results in larger BOX2Ds and larger values increase the precision. Availability: 2.1.0 Examples See Also , , ST_GeogFromText Return a specified geography value from Well-Known Text representation or extended (WKT). geography ST_GeogFromText text EWKT Description Returns a geography object from the well-known text or extended well-known representation. SRID 4326 is assumed. This is an alias for ST_GeographyFromText. Points are always expressed in long lat form. Examples --- converting lon lat coords to geography ALTER TABLE sometable ADD COLUMN geog geography(POINT,4326); UPDATE sometable SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' || lat || ')'); See Also , ST_GeographyFromText Return a specified geography value from Well-Known Text representation or extended (WKT). geography ST_GeographyFromText text EWKT Description Returns a geography object from the well-known text representation. SRID 4326 is assumed. See Also , ST_GeogFromWKB Creates a geography instance from a Well-Known Binary geometry representation (WKB) or extended Well Known Binary (EWKB). geography ST_GeogFromWKB bytea geom Description The ST_GeogFromWKB function, takes a well-known binary representation (WKB) of a geometry or PostGIS Extended WKB and creates an instance of the appropriate geography type. This function plays the role of the Geometry Factory in SQL. If SRID is not specified, it defaults to 4326 (WGS 84 long lat). &curve_support; Examples --Although bytea rep contains single \, these need to be escaped when inserting into a table SELECT ST_AsText( ST_GeogFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@') ); st_astext ------------------------------------------------------ LINESTRING(-113.98 39.198,-113.981 39.195) (1 row) See Also , ST_GeomCollFromText Makes a collection Geometry from collection WKT with the given SRID. If SRID is not give, it defaults to 0. geometry ST_GeomCollFromText text WKT integer srid geometry ST_GeomCollFromText text WKT Description Makes a collection Geometry from the Well-Known-Text (WKT) representation with the given SRID. If SRID is not give, it defaults to 0. OGC SPEC 3.2.6.2 - option SRID is from the conformance suite Returns null if the WKT is not a GEOMETRYCOLLECTION If you are absolutely sure all your WKT geometries are collections, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step. &sfs_compliant; s3.2.6.2 &sqlmm_compliant; Examples SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 4))'); See Also , ST_GeomFromEWKB Return a specified ST_Geometry value from Extended Well-Known Binary representation (EWKB). geometry ST_GeomFromEWKB bytea EWKB Description Constructs a PostGIS ST_Geometry object from the OGC Extended Well-Known binary (EWKT) representation. The EWKB format is not an OGC standard, but a PostGIS specific format that includes the spatial reference system (SRID) identifier Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced. &Z_support; &curve_support; &P_support; &T_support; Examples line string binary rep 0f LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932) in NAD 83 long lat (4269). NOTE: Even though byte arrays are delimited with \ and may have ', we need to escape both out with \ and '' if standard_conforming_strings is off. So it does not look exactly like its AsEWKB representation. SELECT ST_GeomFromEWKB(E'\\001\\002\\000\\000 \\255\\020\\000\\000\\003\\000\\000\\000\\344J= \\013B\\312Q\\300n\\303(\\010\\036!E@''\\277E''K \\312Q\\300\\366{b\\235*!E@\\225|\\354.P\\312Q \\300p\\231\\323e1!E@'); In PostgreSQL 9.1+ - standard_conforming_strings is set to on by default, where as in past versions it was set to on. You can change defaults as needed for a single query or at the database or server level. Below is how you would do it with standard_conforming_strings = on. In this case we escape the ' with standard ansi ', but slashes are not escaped set standard_conforming_strings = on; SELECT ST_GeomFromEWKB('\001\002\000\000 \255\020\000\000\003\000\000\000\344J=\012\013B \312Q\300n\303(\010\036!E@''\277E''K\012\312Q\300\366{b\235*!E@\225|\354.P\312Q\012\300p\231\323e1') See Also , , ST_GeomFromEWKT Return a specified ST_Geometry value from Extended Well-Known Text representation (EWKT). geometry ST_GeomFromEWKT text EWKT Description Constructs a PostGIS ST_Geometry object from the OGC Extended Well-Known text (EWKT) representation. The EWKT format is not an OGC standard, but an PostGIS specific format that includes the spatial reference system (SRID) identifier Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced. &Z_support; &curve_support; &P_support; &T_support; Examples SELECT ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)'); SELECT ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))'); SELECT ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)'); SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239, -71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))'); SELECT ST_GeomFromEWKT('SRID=4269;MULTIPOLYGON(((-71.1031880899493 42.3152774590236, -71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307, -71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248, -71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797, -71.103113945163 42.3142739188902,-71.10324876416 42.31402489987, -71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772, -71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029, -71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058, -71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118, -71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681, -71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055, -71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936, -71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569, -71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809, -71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048, -71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859, -71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338, -71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985, -71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544, -71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219, -71.1031880899493 42.3152774590236)), ((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857, -71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))'); --3d circular string SELECT ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'); --Polyhedral Surface example SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'); See Also , , ST_GeometryFromText Return a specified ST_Geometry value from Well-Known Text representation (WKT). This is an alias name for ST_GeomFromText geometry ST_GeometryFromText text WKT geometry ST_GeometryFromText text WKT integer srid Description &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 5.1.40 See Also ST_GeomFromGeoHash Return a geometry from a GeoHash string. geometry ST_GeomFromGeoHash text geohash integer precision=full_precision_of_geohash Description Return a geometry from a GeoHash string. The geometry will be a polygon representing the GeoHash bounds. If no precision is specficified ST_GeomFromGeoHash returns a polygon based on full precision of the input GeoHash string. If precision is specified ST_GeomFromGeoHash will use that many characters from the GeoHash to create the polygon. Availability: 2.1.0 Examples See Also ,, ST_GeomFromGML Takes as input GML representation of geometry and outputs a PostGIS geometry object geometry ST_GeomFromGML text geomgml geometry ST_GeomFromGML text geomgml integer srid Description Constructs a PostGIS ST_Geometry object from the OGC GML representation. ST_GeomFromGML works only for GML Geometry fragments. It throws an error if you try to use it on a whole GML document. OGC GML versions supported: GML 3.2.1 Namespace GML 3.1.1 Simple Features profile SF-2 (with GML 3.1.0 and 3.0.0 backward compatibility) GML 2.1.2 OGC GML standards, cf: http://www.opengeospatial.org/standards/gml: Availability: 1.5, requires libxml2 1.6+ Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced. Enhanced: 2.0.0 default srid optional parameter added. &Z_support; &P_support; &T_support; GML allow mixed dimensions (2D and 3D inside the same MultiGeometry for instance). As PostGIS geometries don't, ST_GeomFromGML convert the whole geometry to 2D if a missing Z dimension is found once. GML support mixed SRS inside the same MultiGeometry. As PostGIS geometries don't, ST_GeomFromGML, in this case, reproject all subgeometries to the SRS root node. If no srsName attribute available for the GML root node, the function throw an error. ST_GeomFromGML function is not pedantic about an explicit GML namespace. You could avoid to mention it explicitly for common usages. But you need it if you want to use XLink feature inside GML. ST_GeomFromGML function not support SQL/MM curves geometries. Examples - A single geometry with srsName SELECT ST_GeomFromGML(' -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932 ']]>); Examples - XLink usage SELECT 42.258729 -71.16028 42.259112 -71.160837 ');]]>); Examples - Polyhedral Surface SELECT ST_AsEWKT( 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 ']]>)); -- result -- POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)), ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)), ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)), ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)), ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)), ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))) See Also , , ST_GeomFromGeoJSON Takes as input a geojson representation of a geometry and outputs a PostGIS geometry object geometry ST_GeomFromGeoJSON text geomjson Description Constructs a PostGIS geometry object from the GeoJSON representation. ST_GeomFromGeoJSON works only for JSON Geometry fragments. It throws an error if you try to use it on a whole JSON document. Availability: 2.0.0 requires - JSON-C >= 0.9 If you do not have JSON-C enabled, support you will get an error notice instead of seeing an output. To enable JSON-C, run configure --with-jsondir=/path/to/json-c. See for details. &Z_support; Examples SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt; wkt ------ POINT(-48.23456 20.12345) -- a 3D linestring SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}')) As wkt; wkt ------------------- LINESTRING(1 2,4 5,7 8) See Also , , ST_GeomFromKML Takes as input KML representation of geometry and outputs a PostGIS geometry object geometry ST_GeomFromKML text geomkml Description Constructs a PostGIS ST_Geometry object from the OGC KML representation. ST_GeomFromKML works only for KML Geometry fragments. It throws an error if you try to use it on a whole KML document. OGC KML versions supported: KML 2.2.0 Namespace OGC KML standards, cf: http://www.opengeospatial.org/standards/kml: Availability: 1.5,libxml2 2.6+ &Z_support; ST_GeomFromKML function not support SQL/MM curves geometries. Examples - A single geometry with srsName SELECT ST_GeomFromKML(' -71.1663,42.2614 -71.1667,42.2616 ']]>); See Also , ST_GMLToSQL Return a specified ST_Geometry value from GML representation. This is an alias name for ST_GeomFromGML geometry ST_GMLToSQL text geomgml geometry ST_GMLToSQL text geomgml integer srid Description &sqlmm_compliant; SQL-MM 3: 5.1.50 (except for curves support). Availability: 1.5, requires libxml2 1.6+ Enhanced: 2.0.0 support for Polyhedral surfaces and TIN was introduced. Enhanced: 2.0.0 default srid optional parameter added. See Also , , ST_GeomFromText Return a specified ST_Geometry value from Well-Known Text representation (WKT). geometry ST_GeomFromText text WKT geometry ST_GeomFromText text WKT integer srid Description Constructs a PostGIS ST_Geometry object from the OGC Well-Known text representation. There are 2 variants of ST_GeomFromText function, the first takes no SRID and returns a geometry with no defined spatial reference system. The second takes a spatial reference id as the second argument and returns an ST_Geometry that includes this srid as part of its meta-data. The srid must be defined in the spatial_ref_sys table. &sfs_compliant; s3.2.6.2 - option SRID is from the conformance suite. &sqlmm_compliant; SQL-MM 3: 5.1.40 &curve_support; Changed: 2.0.0 In prior versions of PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') was allowed. This is now illegal in PostGIS 2.0.0 to better conform with SQL/MM standards. This should now be written as ST_GeomFromText('GEOMETRYCOLLECTION EMPTY') Examples SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)'); SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)',4269); SELECT ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))'); SELECT ST_GeomFromText('POINT(-71.064544 42.28787)'); SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239, -71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))'); SELECT ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236, -71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307, -71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248, -71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797, -71.103113945163 42.3142739188902,-71.10324876416 42.31402489987, -71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772, -71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029, -71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058, -71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118, -71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681, -71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055, -71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936, -71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569, -71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809, -71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048, -71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859, -71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338, -71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985, -71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544, -71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219, -71.1031880899493 42.3152774590236)), ((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857, -71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))',4326); SELECT ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'); See Also , , ST_GeomFromWKB Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID. geometry ST_GeomFromWKB bytea geom geometry ST_GeomFromWKB bytea geom integer srid Description The ST_GeomFromWKB function, takes a well-known binary representation of a geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type. This function plays the role of the Geometry Factory in SQL. This is an alternate name for ST_WKBToSQL. If SRID is not specified, it defaults to 0 (Unknown). &sfs_compliant; s3.2.7.2 - the optional SRID is from the conformance suite &sqlmm_compliant; SQL-MM 3: 5.1.41 &curve_support; Examples --Although bytea rep contains single \, these need to be escaped when inserting into a table -- unless standard_conforming_strings is set to on. SELECT ST_AsEWKT( ST_GeomFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@',4326) ); st_asewkt ------------------------------------------------------ SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195) (1 row) SELECT ST_AsText( ST_GeomFromWKB( ST_AsEWKB('POINT(2 5)'::geometry) ) ); st_astext ------------ POINT(2 5) (1 row) See Also , , ST_LineFromMultiPoint Creates a LineString from a MultiPoint geometry. geometry ST_LineFromMultiPoint geometry aMultiPoint Description Creates a LineString from a MultiPoint geometry. &Z_support; Examples --Create a 3d line string from a 3d multipoint SELECT ST_AsEWKT(ST_LineFromMultiPoint(ST_GeomFromEWKT('MULTIPOINT(1 2 3, 4 5 6, 7 8 9)'))); --result-- LINESTRING(1 2 3,4 5 6,7 8 9) See Also , , ST_LineFromText Makes a Geometry from WKT representation with the given SRID. If SRID is not given, it defaults to 0. geometry ST_LineFromText text WKT geometry ST_LineFromText text WKT integer srid Description Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0. If WKT passed in is not a LINESTRING, then null is returned. OGC SPEC 3.2.6.2 - option SRID is from the conformance suite. If you know all your geometries are LINESTRINGS, its more efficient to just use ST_GeomFromText. This just calls ST_GeomFromText and adds additional validation that it returns a linestring. &sfs_compliant; s3.2.6.2 &sqlmm_compliant; SQL-MM 3: 7.2.8 Examples SELECT ST_LineFromText('LINESTRING(1 2, 3 4)') AS aline, ST_LineFromText('POINT(1 2)') AS null_return; aline | null_return ------------------------------------------------ 010200000002000000000000000000F ... | t See Also ST_LineFromWKB Makes a LINESTRING from WKB with the given SRID geometry ST_LineFromWKB bytea WKB geometry ST_LineFromWKB bytea WKB integer srid Description The ST_LineFromWKB function, takes a well-known binary representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this case, a LINESTRING geometry. This function plays the role of the Geometry Factory in SQL. If an SRID is not specified, it defaults to 0. NULL is returned if the input bytea does not represent a LINESTRING. OGC SPEC 3.2.6.2 - option SRID is from the conformance suite. If you know all your geometries are LINESTRINGs, its more efficient to just use . This function just calls and adds additional validation that it returns a linestring. &sfs_compliant; s3.2.6.2 &sqlmm_compliant; SQL-MM 3: 7.2.9 Examples SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline, ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return; aline | null_return ------------------------------------------------ 010200000002000000000000000000F ... | t See Also , ST_LinestringFromWKB Makes a geometry from WKB with the given SRID. geometry ST_LinestringFromWKB bytea WKB geometry ST_LinestringFromWKB bytea WKB integer srid Description The ST_LinestringFromWKB function, takes a well-known binary representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this case, a LINESTRING geometry. This function plays the role of the Geometry Factory in SQL. If an SRID is not specified, it defaults to 0. NULL is returned if the input bytea does not represent a LINESTRING geometry. This an alias for . OGC SPEC 3.2.6.2 - optional SRID is from the conformance suite. If you know all your geometries are LINESTRINGs, it's more efficient to just use . This function just calls and adds additional validation that it returns a LINESTRING. &sfs_compliant; s3.2.6.2 &sqlmm_compliant; SQL-MM 3: 7.2.9 Examples SELECT ST_LineStringFromWKB( ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)')) ) AS aline, ST_LinestringFromWKB( ST_AsBinary(ST_GeomFromText('POINT(1 2)')) ) IS NULL AS null_return; aline | null_return ------------------------------------------------ 010200000002000000000000000000F ... | t See Also , ST_MakeBox2D Creates a BOX2D defined by the given point geometries. box2d ST_MakeBox2D geometry pointLowLeft geometry pointUpRight Description Creates a BOX2D defined by the given point geometries. This is useful for doing range queries Examples --Return all features that fall reside or partly reside in a US national atlas coordinate bounding box --It is assumed here that the geometries are stored with SRID = 2163 (US National atlas equal area) SELECT feature_id, feature_name, the_geom FROM features WHERE the_geom && ST_SetSRID(ST_MakeBox2D(ST_Point(-989502.1875, 528439.5625), ST_Point(-987121.375 ,529933.1875)),2163) See Also , , , ST_3DMakeBox Creates a BOX3D defined by the given 3d point geometries. box3d ST_3DMakeBox geometry point3DLowLeftBottom geometry point3DUpRightTop Description Creates a BOX3D defined by the given 2 3D point geometries. This function supports 3d and will not drop the z-index. Changed: 2.0.0 In prior versions this used to be called ST_MakeBox3D Examples SELECT ST_3DMakeBox(ST_MakePoint(-989502.1875, 528439.5625, 10), ST_MakePoint(-987121.375 ,529933.1875, 10)) As abb3d --bb3d-- -------- BOX3D(-989502.1875 528439.5625 10,-987121.375 529933.1875 10) See Also , , ST_MakeLine Creates a Linestring from point or line geometries. geometry ST_MakeLine geometry set geoms geometry ST_MakeLine geometry geom1 geometry geom2 geometry ST_MakeLine geometry[] geoms_array Description ST_MakeLine comes in 3 forms: a spatial aggregate that takes rows of point-or-line geometries and returns a line string, a function that takes an array of point-or-lines, and a regular function that takes two point-or-line geometries. You might want to use a subselect to order points before feeding them to the aggregate version of this function. When adding line components a common node is removed from the output. &Z_support; Availability: 1.4.0 - ST_MakeLine(geomarray) was introduced. ST_MakeLine aggregate functions was enhanced to handle more points faster. Availability: 2.0.0 - Support for linestring input elements was introduced Examples: Spatial Aggregate version This example takes a sequence of GPS points and creates one record for each gps travel where the geometry field is a line string composed of the gps points in the order of the travel. -- For pre-PostgreSQL 9.0 - this usually works, -- but the planner may on occasion choose not to respect the order of the subquery SELECT gps.gps_track, ST_MakeLine(gps.the_geom) As newgeom FROM (SELECT gps_track,gps_time, the_geom FROM gps_points ORDER BY gps_track, gps_time) As gps GROUP BY gps.gps_track; -- If you are using PostgreSQL 9.0+ -- (you can use the new ORDER BY support for aggregates) -- this is a guaranteed way to get a correctly ordered linestring -- Your order by part can order by more than one column if needed SELECT gps.gps_track, ST_MakeLine(gps.the_geom ORDER BY gps_time) As newgeom FROM gps_points As gps GROUP BY gps.gps_track; Examples: Non-Spatial Aggregate version First example is a simple one off line string composed of 2 points. The second formulates line strings from 2 points a user draws. The third is a one-off that joins 2 3d points to create a line in 3d space. SELECT ST_AsText(ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(3,4))); st_astext --------------------- LINESTRING(1 2,3 4) SELECT userpoints.id, ST_MakeLine(startpoint, endpoint) As drawn_line FROM userpoints ; SELECT ST_AsEWKT(ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5))); st_asewkt ------------------------- LINESTRING(1 2 3,3 4 5) Examples: Using Array version SELECT ST_MakeLine(ARRAY(SELECT ST_Centroid(the_geom) FROM visit_locations ORDER BY visit_time)); --Making a 3d line with 3 3-d points SELECT ST_AsEWKT(ST_MakeLine(ARRAY[ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6)])); st_asewkt ------------------------- LINESTRING(1 2 3,3 4 5,6 6 6) See Also , , , ST_MakeEnvelope Creates a rectangular Polygon formed from the given minimums and maximums. Input values must be in SRS specified by the SRID. geometry ST_MakeEnvelope double precision xmin double precision ymin double precision xmax double precision ymax integer srid=unknown Description Creates a rectangular Polygon formed from the minima and maxima. by the given shell. Input values must be in SRS specified by the SRID. If no SRID is specified the unknown spatial reference system is assumed Availability: 1.5 Enhanced: 2.0: Ability to specify an envelope without specifying an SRID was introduced. Example: Building a bounding box polygon SELECT ST_AsText(ST_MakeEnvelope(10, 10, 11, 11, 4326)); st_asewkt ----------- POLYGON((10 10, 10 11, 11 11, 11 10, 10 10)) See Also , , ST_MakePolygon Creates a Polygon formed by the given shell. Input geometries must be closed LINESTRINGS. geometry ST_MakePolygon geometry linestring geometry ST_MakePolygon geometry outerlinestring geometry[] interiorlinestrings Description Creates a Polygon formed by the given shell. Input geometries must be closed LINESTRINGS. Comes in 2 variants. Variant 1: takes one closed linestring. Variant 2: Creates a Polygon formed by the given shell and array of holes. You can construct a geometry array using ST_Accum or the PostgreSQL ARRAY[] and ARRAY() constructs. Input geometries must be closed LINESTRINGS. This function will not accept a MULTILINESTRING. Use or to generate line strings. &Z_support; Examples: Single closed LINESTRING --2d line SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)')); --If linestring is not closed --you can add the start point to close it SELECT ST_MakePolygon(ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line))) FROM ( SELECT ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5)') As open_line) As foo; --3d closed line SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)')); st_asewkt ----------- POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1)) --measured line -- SELECT ST_MakePolygon(ST_GeomFromText('LINESTRINGM(75.15 29.53 1,77 29 1,77.6 29.5 2, 75.15 29.53 2)')); st_asewkt ---------- POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2)) Examples: Outter shell with inner shells Build a donut with an ant hole SELECT ST_MakePolygon( ST_ExteriorRing(ST_Buffer(foo.line,10)), ARRAY[ST_Translate(foo.line,1,1), ST_ExteriorRing(ST_Buffer(ST_MakePoint(20,20),1)) ] ) FROM (SELECT ST_ExteriorRing(ST_Buffer(ST_MakePoint(10,10),10,10)) As line ) As foo; Build province boundaries with holes representing lakes in the province from a set of province polygons/multipolygons and water line strings this is an example of using PostGIS ST_Accum The use of CASE because feeding a null array into ST_MakePolygon results in NULL the use of left join to guarantee we get all provinces back even if they have no lakes SELECT p.gid, p.province_name, CASE WHEN ST_Accum(w.the_geom) IS NULL THEN p.the_geom ELSE ST_MakePolygon(ST_LineMerge(ST_Boundary(p.the_geom)), ST_Accum(w.the_geom)) END FROM provinces p LEFT JOIN waterlines w ON (ST_Within(w.the_geom, p.the_geom) AND ST_IsClosed(w.the_geom)) GROUP BY p.gid, p.province_name, p.the_geom; --Same example above but utilizing a correlated subquery --and PostgreSQL built-in ARRAY() function that converts a row set to an array SELECT p.gid, p.province_name, CASE WHEN EXISTS(SELECT w.the_geom FROM waterlines w WHERE ST_Within(w.the_geom, p.the_geom) AND ST_IsClosed(w.the_geom)) THEN ST_MakePolygon(ST_LineMerge(ST_Boundary(p.the_geom)), ARRAY(SELECT w.the_geom FROM waterlines w WHERE ST_Within(w.the_geom, p.the_geom) AND ST_IsClosed(w.the_geom))) ELSE p.the_geom END As the_geom FROM provinces p; See Also , , , , , ST_MakePoint Creates a 2D,3DZ or 4D point geometry. geometry ST_MakePoint double precision x double precision y geometry ST_MakePoint double precision x double precision y double precision z geometry ST_MakePoint double precision x double precision y double precision z double precision m Description Creates a 2D,3DZ or 4D point geometry (geometry with measure). ST_MakePoint while not being OGC compliant is generally faster and more precise than and . It is also easier to use if you have raw coordinates rather than WKT. Note x is longitude and y is latitude Use if you need to make a point with x,y,m. &Z_support; Examples --Return point with unknown SRID SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829); --Return point marked as WGS 84 long lat SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326); --Return a 3D point (e.g. has altitude) SELECT ST_MakePoint(1, 2,1.5); --Get z of point SELECT ST_Z(ST_MakePoint(1, 2,1.5)); result ------- 1.5 See Also , , , ST_MakePointM Creates a point geometry with an x y and m coordinate. geometry ST_MakePointM float x float y float m Description Creates a point with x, y and measure coordinates. Note x is longitude and y is latitude. Examples We use ST_AsEWKT in these examples to show the text representation instead of ST_AsText because ST_AsText does not support returning M. --Return EWKT representation of point with unknown SRID SELECT ST_AsEWKT(ST_MakePointM(-71.1043443253471, 42.3150676015829, 10)); --result st_asewkt ----------------------------------------------- POINTM(-71.1043443253471 42.3150676015829 10) --Return EWKT representation of point with measure marked as WGS 84 long lat SELECT ST_AsEWKT(ST_SetSRID(ST_MakePointM(-71.1043443253471, 42.3150676015829,10),4326)); st_asewkt --------------------------------------------------------- SRID=4326;POINTM(-71.1043443253471 42.3150676015829 10) --Return a 3d point (e.g. has altitude) SELECT ST_MakePoint(1, 2,1.5); --Get m of point SELECT ST_M(ST_MakePointM(-71.1043443253471, 42.3150676015829,10)); result ------- 10 See Also , , ST_MLineFromText Return a specified ST_MultiLineString value from WKT representation. geometry ST_MLineFromText text WKT integer srid geometry ST_MLineFromText text WKT Description Makes a Geometry from Well-Known-Text (WKT) with the given SRID. If SRID is not give, it defaults to 0. OGC SPEC 3.2.6.2 - option SRID is from the conformance suite Returns null if the WKT is not a MULTILINESTRING If you are absolutely sure all your WKT geometries are points, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step. &sfs_compliant; s3.2.6.2 &sqlmm_compliant;SQL-MM 3: 9.4.4 Examples SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))'); See Also ST_MPointFromText Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0. geometry ST_MPointFromText text WKT integer srid geometry ST_MPointFromText text WKT Description Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0. OGC SPEC 3.2.6.2 - option SRID is from the conformance suite Returns null if the WKT is not a MULTIPOINT If you are absolutely sure all your WKT geometries are points, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step. &sfs_compliant; 3.2.6.2 &sqlmm_compliant; SQL-MM 3: 9.2.4 Examples SELECT ST_MPointFromText('MULTIPOINT(1 2, 3 4)'); SELECT ST_MPointFromText('MULTIPOINT(-70.9590 42.1180, -70.9611 42.1223)', 4326); See Also ST_MPolyFromText Makes a MultiPolygon Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0. geometry ST_MPolyFromText text WKT integer srid geometry ST_MPolyFromText text WKT Description Makes a MultiPolygon from WKT with the given SRID. If SRID is not give, it defaults to 0. OGC SPEC 3.2.6.2 - option SRID is from the conformance suite Throws an error if the WKT is not a MULTIPOLYGON If you are absolutely sure all your WKT geometries are multipolygons, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step. &sfs_compliant; s3.2.6.2 &sqlmm_compliant; SQL-MM 3: 9.6.4 Examples SELECT ST_MPolyFromText('MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),(5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))'); SELECt ST_MPolyFromText('MULTIPOLYGON(((-70.916 42.1002,-70.9468 42.0946,-70.9765 42.0872,-70.9754 42.0875,-70.9749 42.0879,-70.9752 42.0881,-70.9754 42.0891,-70.9758 42.0894,-70.9759 42.0897,-70.9759 42.0899,-70.9754 42.0902,-70.9756 42.0906,-70.9753 42.0907,-70.9753 42.0917,-70.9757 42.0924,-70.9755 42.0928,-70.9755 42.0942,-70.9751 42.0948,-70.9755 42.0953,-70.9751 42.0958,-70.9751 42.0962,-70.9759 42.0983,-70.9767 42.0987,-70.9768 42.0991,-70.9771 42.0997,-70.9771 42.1003,-70.9768 42.1005,-70.977 42.1011,-70.9766 42.1019,-70.9768 42.1026,-70.9769 42.1033,-70.9775 42.1042,-70.9773 42.1043,-70.9776 42.1043,-70.9778 42.1048,-70.9773 42.1058,-70.9774 42.1061,-70.9779 42.1065,-70.9782 42.1078,-70.9788 42.1085,-70.9798 42.1087,-70.9806 42.109,-70.9807 42.1093,-70.9806 42.1099,-70.9809 42.1109,-70.9808 42.1112,-70.9798 42.1116,-70.9792 42.1127,-70.979 42.1129,-70.9787 42.1134,-70.979 42.1139,-70.9791 42.1141,-70.9987 42.1116,-71.0022 42.1273, -70.9408 42.1513,-70.9315 42.1165,-70.916 42.1002)))',4326); See Also , ST_Point Returns an ST_Point with the given coordinate values. OGC alias for ST_MakePoint. geometry ST_Point float x_lon float y_lat Description Returns an ST_Point with the given coordinate values. MM compliant alias for ST_MakePoint that takes just an x and y. &sqlmm_compliant; SQL-MM 3: 6.1.2 Examples: Geometry SELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326) Examples: Geography SELECT CAST(ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326) As geography); -- the :: is PostgreSQL short-hand for casting. SELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326)::geography; --If your point coordinates are in a different spatial reference from WGS-84 long lat, then you need to transform before casting -- This example we convert a point in Pennsylvania State Plane feet to WGS 84 and then geography SELECT ST_Transform(ST_SetSRID(ST_Point(3637510, 3014852),2273),4326)::geography; See Also , , , ST_PointFromGeoHash Return a point from a GeoHash string. point ST_PointFromGeoHash text geohash integer precision=full_precision_of_geohash Description Return a point from a GeoHash string. The point represents the center point of the GeoHash. If no precision is specficified ST_PointFromGeoHash returns a point based on full precision of the input GeoHash string. If precision is specified ST_PointFromGeoHash will use that many characters from the GeoHash to create the point. Availability: 2.1.0 Examples See Also , , ST_PointFromText Makes a point Geometry from WKT with the given SRID. If SRID is not given, it defaults to unknown. geometry ST_PointFromText text WKT geometry ST_PointFromText text WKT integer srid Description Constructs a PostGIS ST_Geometry point object from the OGC Well-Known text representation. If SRID is not give, it defaults to unknown (currently 0). If geometry is not a WKT point representation, returns null. If completely invalid WKT, then throws an error. There are 2 variants of ST_PointFromText function, the first takes no SRID and returns a geometry with no defined spatial reference system. The second takes a spatial reference id as the second argument and returns an ST_Geometry that includes this srid as part of its meta-data. The srid must be defined in the spatial_ref_sys table. If you are absolutely sure all your WKT geometries are points, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step. If you are building points from long lat coordinates and care more about performance and accuracy than OGC compliance, use or OGC compliant alias . &sfs_compliant; s3.2.6.2 - option SRID is from the conformance suite. &sqlmm_compliant; SQL-MM 3: 6.1.8 Examples SELECT ST_PointFromText('POINT(-71.064544 42.28787)'); SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326); See Also , , , ST_PointFromWKB Makes a geometry from WKB with the given SRID geometry ST_GeomFromWKB bytea geom geometry ST_GeomFromWKB bytea geom integer srid Description The ST_PointFromWKB function, takes a well-known binary representation of geometry and a Spatial Reference System ID (SRID) and creates an instance of the appropriate geometry type - in this case, a POINT geometry. This function plays the role of the Geometry Factory in SQL. If an SRID is not specified, it defaults to 0. NULL is returned if the input bytea does not represent a POINT geometry. &sfs_compliant; s3.2.7.2 &sqlmm_compliant; SQL-MM 3: 6.1.9 &Z_support; &curve_support; Examples SELECT ST_AsText( ST_PointFromWKB( ST_AsEWKB('POINT(2 5)'::geometry) ) ); st_astext ------------ POINT(2 5) (1 row) SELECT ST_AsText( ST_PointFromWKB( ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry) ) ); st_astext ----------- (1 row) See Also , ST_Polygon Returns a polygon built from the specified linestring and SRID. geometry ST_Polygon geometry aLineString integer srid Description Returns a polygon built from the specified linestring and SRID. ST_Polygon is similar to first version oST_MakePolygon except it also sets the spatial ref sys (SRID) of the polygon. Will not work with MULTILINESTRINGS so use LineMerge to merge multilines. Also does not create polygons with holes. Use ST_MakePolygon for that. &sfs_compliant; &sqlmm_compliant; SQL-MM 3: 8.3.2 &Z_support; Examples --a 2d polygon SELECT ST_Polygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)'), 4326); --result-- POLYGON((75.15 29.53,77 29,77.6 29.5,75.15 29.53)) --a 3d polygon SELECT ST_AsEWKT(ST_Polygon(ST_GeomFromEWKT('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'), 4326)); result ------ SRID=4326;POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1)) See Also , , , , , ST_PolygonFromText Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0. geometry ST_PolygonFromText text WKT geometry ST_PolygonFromText text WKT integer srid Description Makes a Geometry from WKT with the given SRID. If SRID is not give, it defaults to 0. Returns null if WKT is not a polygon. OGC SPEC 3.2.6.2 - option SRID is from the conformance suite If you are absolutely sure all your WKT geometries are polygons, don't use this function. It is slower than ST_GeomFromText since it adds an additional validation step. &sfs_compliant; s3.2.6.2 &sqlmm_compliant; SQL-MM 3: 8.3.6 Examples SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239, -71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))'); st_polygonfromtext ------------------ 010300000001000000050000006... SELECT ST_PolygonFromText('POINT(1 2)') IS NULL as point_is_notpoly; point_is_not_poly ---------- t See Also ST_WKBToSQL Return a specified ST_Geometry value from Well-Known Binary representation (WKB). This is an alias name for ST_GeomFromWKB that takes no srid geometry ST_WKBToSQL bytea WKB Description &sqlmm_compliant; SQL-MM 3: 5.1.36 See Also ST_WKTToSQL Return a specified ST_Geometry value from Well-Known Text representation (WKT). This is an alias name for ST_GeomFromText geometry ST_WKTToSQL text WKT Description &sqlmm_compliant; SQL-MM 3: 5.1.34 See Also postgis-2.1.2+dfsg.orig/doc/using_postgis_dataman.xml0000644000000000000000000030551412307173142021441 0ustar rootroot Using PostGIS: Data Management and Queries GIS Objects The GIS objects supported by PostGIS are all the vector types defined in the "Simple Features for SQL 1.2.1" standard defined by the OpenGIS Consortium (OGC), and the ISO "SQL/MM Part 3: Spatial" document. In addition, PostGIS supports a raster type (no standards exist to follow), and a topology model (following an early draft ISO standard for topology that has not been published as yet). The OGC and ISO standards define 2D (x/y), 3D (x/y/z, x/y/m) and 4D (x/y/z/m) variants of points, lines, polygons, curved features, polyhedra, and TINS. Well-Known Binary (WKB) and Well-Known Text (WKT) Representations The OGC and ISO specifications define both text and binary representations for geometry objects, WKT and WKB. Both representations include information about the type of the object and the coordinates that form the object. Examples of the text representations (WKT) of the spatial objects of the features are as follows: POINT(0 0) LINESTRING(0 0,1 1,1 2) POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) MULTIPOINT((0 0),(1 2)) MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4)) The OpenGIS specification also requires that the internal storage format of spatial objects include a spatial referencing system identifier (SRID). The SRID is required when creating spatial objects for insertion into the database. Input/Output of these formats are available using the following interfaces: bytea WKB = ST_AsBinary(geometry); text WKT = ST_AsText(geometry); geometry = ST_GeomFromWKB(bytea WKB, SRID); geometry = ST_GeometryFromText(text WKT, SRID); For example, a valid insert statement to create and insert an OGC spatial object would be: INSERT INTO geotable ( the_geom, the_name ) VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place'); PostGIS EWKB, EWKT and Canonical Forms OGC formats only support 2d geometries, and the associated SRID is *never* embedded in the input/output representations. PostGIS extended formats are currently superset of OGC one (every valid WKB/WKT is a valid EWKB/EWKT) but this might vary in the future, specifically if OGC comes out with a new format conflicting with our extensions. Thus you SHOULD NOT rely on this feature! PostGIS EWKB/EWKT add 3dm,3dz,4d coordinates support and embedded SRID information. Examples of the text representations (EWKT) of the extended spatial objects of the features are as follows. The * ones are new in this version of PostGIS: POINT(0 0 0) -- XYZ SRID=32632;POINT(0 0) -- XY with SRID POINTM(0 0 0) -- XYM POINT(0 0 0 0) -- XYZM SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM with SRID MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1)) POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)) MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0))) GEOMETRYCOLLECTIONM( POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5) ) MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4) ) POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) ) TRIANGLE ((0 0, 0 9, 9 0, 0 0)) TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) ) Input/Output of these formats are available using the following interfaces: bytea EWKB = ST_AsEWKB(geometry); text EWKT = ST_AsEWKT(geometry); geometry = ST_GeomFromEWKB(bytea EWKB); geometry = ST_GeomFromEWKT(text EWKT); For example, a valid insert statement to create and insert a PostGIS spatial object would be: INSERT INTO geotable ( the_geom, the_name ) VALUES ( ST_GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' ) The "canonical forms" of a PostgreSQL type are the representations you get with a simple query (without any function call) and the one which is guaranteed to be accepted with a simple insert, update or copy. For the postgis 'geometry' type these are: - Output - binary: EWKB ascii: HEXEWKB (EWKB in hex form) - Input - binary: EWKB ascii: HEXEWKB|EWKT For example this statement reads EWKT and returns HEXEWKB in the process of canonical ascii input/output: =# SELECT 'SRID=4;POINT(0 0)'::geometry; geometry ---------------------------------------------------- 01010000200400000000000000000000000000000000000000 (1 row) SQL-MM Part 3 The SQL Multimedia Applications Spatial specification extends the simple features for SQL spec by defining a number of circularly interpolated curves. The SQL-MM definitions include 3dm, 3dz and 4d coordinates, but do not allow the embedding of SRID information. The well-known text extensions are not yet fully supported. Examples of some simple curved geometries are shown below: CIRCULARSTRING(0 0, 1 1, 1 0) CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0) The CIRCULARSTRING is the basic curve type, similar to a LINESTRING in the linear world. A single segment required three points, the start and end points (first and third) and any other point on the arc. The exception to this is for a closed circle, where the start and end points are the same. In this case the second point MUST be the center of the arc, ie the opposite side of the circle. To chain arcs together, the last point of the previous arc becomes the first point of the next arc, just like in LINESTRING. This means that a valid circular string must have an odd number of points greated than 1. COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1)) A compound curve is a single, continuous curve that has both curved (circular) segments and linear segments. That means that in addition to having well-formed components, the end point of every component (except the last) must be coincident with the start point of the following component. CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)) Example compound curve in a curve polygon: CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) ) A CURVEPOLYGON is just like a polygon, with an outer ring and zero or more inner rings. The difference is that a ring can take the form of a circular string, linear string or compound string. As of PostGIS 1.4 PostGIS supports compound curves in a curve polygon. MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) The MULTICURVE is a collection of curves, which can include linear strings, circular strings or compound strings. MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11))) This is a collection of surfaces, which can be (linear) polygons or curve polygons. PostGIS prior to 1.4 does not support compound curves in a curve polygon, but PostGIS 1.4 and above do support the use of Compound Curves in a Curve Polygon. All floating point comparisons within the SQL-MM implementation are performed to a specified tolerance, currently 1E-8. PostGIS Geography Type The geography type provides native support for spatial features represented on "geographic" coordinates (sometimes called "geodetic" coordinates, or "lat/lon", or "lon/lat"). Geographic coordinates are spherical coordinates expressed in angular units (degrees). The basis for the PostGIS geometry type is a plane. The shortest path between two points on the plane is a straight line. That means calculations on geometries (areas, distances, lengths, intersections, etc) can be calculated using cartesian mathematics and straight line vectors. The basis for the PostGIS geographic type is a sphere. The shortest path between two points on the sphere is a great circle arc. That means that calculations on geographies (areas, distances, lengths, intersections, etc) must be calculated on the sphere, using more complicated mathematics. For more accurate measurements, the calculations must take the actual spheroidal shape of the world into account, and the mathematics becomes very complicated indeed. Because the underlying mathematics is much more complicated, there are fewer functions defined for the geography type than for the geometry type. Over time, as new algorithms are added, the capabilities of the geography type will expand. One restriction is that it only supports WGS 84 long lat (SRID:4326). It uses a new data type called geography. None of the GEOS functions support this new type. As a workaround one can convert back and forth between geometry and geography types. The new geography type uses the PostgreSQL 8.3+ typmod definition format so that a table with a geography field can be added in a single step. All the standard OGC formats except for curves are supported. Geography Basics The geography type only supports the simplest of simple features. Standard geometry type data will autocast to geography if it is of SRID 4326. You can also use the EWKT and EWKB conventions to insert data. POINT: Creating a table with 2d point geometry: CREATE TABLE testgeog(gid serial PRIMARY KEY, the_geog geography(POINT,4326) ); Creating a table with z coordinate point CREATE TABLE testgeog(gid serial PRIMARY KEY, the_geog geography(POINTZ,4326) ); LINESTRING POLYGON MULTIPOINT MULTILINESTRING MULTIPOLYGON GEOMETRYCOLLECTION The new geography fields don't get registered in the geometry_columns. They get registered in a new view called geography_columns which is a view against the system catalogs so is always automatically kept up to date without need for an AddGeom... like function. Now, check the "geography_columns" view and see that your table is listed. You can create a new table with a GEOGRAPHY column using the CREATE TABLE syntax. Unlike GEOMETRY, there is no need to run a separate AddGeometryColumns() process to register the column in metadata. CREATE TABLE global_points ( id SERIAL PRIMARY KEY, name VARCHAR(64), location GEOGRAPHY(POINT,4326) ); Note that the location column has type GEOGRAPHY and that geography type supports two optional modifier: a type modifier that restricts the kind of shapes and dimensions allowed in the column; an SRID modifier that restricts the coordinate reference identifier to a particular number. Allowable values for the type modifier are: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON. The modifier also supports dimensionality restrictions through suffixes: Z, M and ZM. So, for example a modifier of 'LINESTRINGM' would only allow line strings with three dimensions in, and would treat the third dimension as a measure. Similarly, 'POINTZM' would expect four dimensional data. The SRID modifier is currently of limited use: only 4326 (WGS84) is allowed as a value. If you do not specify an SRID, the a value 0 (undefined spheroid) will be used, and all calculations will proceed using WGS84 anyways. In the future, alternate SRIDs will allow calculations on spheroids other than WGS84. Once you have created your table, you can see it in the GEOGRAPHY_COLUMNS table: -- See the contents of the metadata view SELECT * FROM geography_columns; You can insert data into the table the same as you would if it was using a GEOMETRY column: -- Add some data into the test table INSERT INTO global_points (name, location) VALUES ('Town', ST_GeographyFromText('SRID=4326;POINT(-110 30)') ); INSERT INTO global_points (name, location) VALUES ('Forest', ST_GeographyFromText('SRID=4326;POINT(-109 29)') ); INSERT INTO global_points (name, location) VALUES ('London', ST_GeographyFromText('SRID=4326;POINT(0 49)') ); Creating an index works the same as GEOMETRY. PostGIS will note that the column type is GEOGRAPHY and create an appropriate sphere-based index instead of the usual planar index used for GEOMETRY. -- Index the test table with a spherical index CREATE INDEX global_points_gix ON global_points USING GIST ( location ); Query and measurement functions use units of meters. So distance parameters should be expressed in meters, and return values should be expected in meters (or square meters for areas). -- Show a distance query and note, London is outside the 1000km tolerance SELECT name FROM global_points WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000); You can see the power of GEOGRAPHY in action by calculating the how close a plane flying from Seattle to London (LINESTRING(-122.33 47.606, 0.0 51.5)) comes to Reykjavik (POINT(-21.96 64.15)). -- Distance calculation using GEOGRAPHY (122.2km) SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 'POINT(-21.96 64.15)':: geography); -- Distance calculation using GEOMETRY (13.3 "degrees") SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT(-21.96 64.15)':: geometry); The GEOGRAPHY type calculates the true shortest distance over the sphere between Reykjavik and the great circle flight path between Seattle and London. Great Circle mapper The GEOMETRY type calculates a meaningless cartesian distance between Reykjavik and the straight line path from Seattle to London plotted on a flat map of the world. The nominal units of the result might be called "degrees", but the result doesn't correspond to any true angular difference between the points, so even calling them "degrees" is inaccurate. When to use Geography Data type over Geometry data type The new GEOGRAPHY type allows you to store data in longitude/latitude coordinates, but at a cost: there are fewer functions defined on GEOGRAPHY than there are on GEOMETRY; those functions that are defined take more CPU time to execute. The type you choose should be conditioned on the expected working area of the application you are building. Will your data span the globe or a large continental area, or is it local to a state, county or municipality? If your data is contained in a small area, you might find that choosing an appropriate projection and using GEOMETRY is the best solution, in terms of performance and functionality available. If your data is global or covers a continental region, you may find that GEOGRAPHY allows you to build a system without having to worry about projection details. You store your data in longitude/latitude, and use the functions that have been defined on GEOGRAPHY. If you don't understand projections, and you don't want to learn about them, and you're prepared to accept the limitations in functionality available in GEOGRAPHY, then it might be easier for you to use GEOGRAPHY than GEOMETRY. Simply load your data up as longitude/latitude and go from there. Refer to for compare between what is supported for Geography vs. Geometry. For a brief listing and description of Geography functions, refer to Geography Advanced FAQ Do you calculate on the sphere or the spheroid? By default, all distance and area calculations are done on the spheroid. You should find that the results of calculations in local areas match up will with local planar results in good local projections. Over larger areas, the spheroidal calculations will be more accurate than any calculation done on a projected plane. All the geography functions have the option of using a sphere calculation, by setting a final boolean parameter to 'FALSE'. This will somewhat speed up calculations, particularly for cases where the geometries are very simple. What about the date-line and the poles? All the calculations have no conception of date-line or poles, the coordinates are spherical (longitude/latitude) so a shape that crosses the dateline is, from a calculation point of view, no different from any other shape. What is the longest arc you can process? We use great circle arcs as the "interpolation line" between two points. That means any two points are actually joined up two ways, depending on which direction you travel along the great circle. All our code assumes that the points are joined by the *shorter* of the two paths along the great circle. As a consequence, shapes that have arcs of more than 180 degrees will not be correctly modelled. Why is it so slow to calculate the area of Europe / Russia / insert big geographic region here ? Because the polygon is so darned huge! Big areas are bad for two reasons: their bounds are huge, so the index tends to pull the feature no matter what query you run; the number of vertices is huge, and tests (distance, containment) have to traverse the vertex list at least once and sometimes N times (with N being the number of vertices in the other candidate feature). As with GEOMETRY, we recommend that when you have very large polygons, but are doing queries in small areas, you "denormalize" your geometric data into smaller chunks so that the index can effectively subquery parts of the object and so queries don't have to pull out the whole object every time. Just because you *can* store all of Europe in one polygon doesn't mean you *should*. Using OpenGIS Standards The OpenGIS "Simple Features Specification for SQL" defines standard GIS object types, the functions required to manipulate them, and a set of meta-data tables. In order to ensure that meta-data remain consistent, operations such as creating and removing a spatial column are carried out through special procedures defined by OpenGIS. There are two OpenGIS meta-data tables: SPATIAL_REF_SYS and GEOMETRY_COLUMNS. The SPATIAL_REF_SYS table holds the numeric IDs and textual descriptions of coordinate systems used in the spatial database. The SPATIAL_REF_SYS Table and Spatial Reference Systems The spatial_ref_sys table is a PostGIS included and OGC compliant database table that lists over 3000 known spatial reference systems and details needed to transform/reproject between them. Although the PostGIS spatial_ref_sys table contains over 3000 of the more commonly used spatial reference system definitions that can be handled by the proj library, it does not contain all known to man and you can even define your own custom projection if you are familiar with proj4 constructs. Keep in mind that most spatial reference systems are regional and have no meaning when used outside of the bounds they were intended for. An excellent resource for finding spatial reference systems not defined in the core set is http://spatialreference.org/ Some of the more commonly used spatial reference systems are: 4326 - WGS 84 Long Lat, 4269 - NAD 83 Long Lat, 3395 - WGS 84 World Mercator, 2163 - US National Atlas Equal Area, Spatial reference systems for each NAD 83, WGS 84 UTM zone - UTM zones are one of the most ideal for measurement, but only cover 6-degree regions. Various US state plane spatial reference systems (meter or feet based) - usually one or 2 exists per US state. Most of the meter ones are in the core set, but many of the feet based ones or ESRI created ones you will need to pull from spatialreference.org. For details on determining which UTM zone to use for your area of interest, check out the utmzone PostGIS plpgsql helper function. The SPATIAL_REF_SYS table definition is as follows: CREATE TABLE spatial_ref_sys ( srid INTEGER NOT NULL PRIMARY KEY, auth_name VARCHAR(256), auth_srid INTEGER, srtext VARCHAR(2048), proj4text VARCHAR(2048) ) The SPATIAL_REF_SYS columns are as follows: SRID An integer value that uniquely identifies the Spatial Referencing System (SRS) within the database. AUTH_NAME The name of the standard or standards body that is being cited for this reference system. For example, "EPSG" would be a valid AUTH_NAME. AUTH_SRID The ID of the Spatial Reference System as defined by the Authority cited in the AUTH_NAME. In the case of EPSG, this is where the EPSG projection code would go. SRTEXT The Well-Known Text representation of the Spatial Reference System. An example of a WKT SRS representation is: PROJCS["NAD83 / UTM Zone 10N", GEOGCS["NAD83", DATUM["North_American_Datum_1983", SPHEROID["GRS 1980",6378137,298.257222101] ], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433] ], PROJECTION["Transverse_Mercator"], PARAMETER["latitude_of_origin",0], PARAMETER["central_meridian",-123], PARAMETER["scale_factor",0.9996], PARAMETER["false_easting",500000], PARAMETER["false_northing",0], UNIT["metre",1] ] For a listing of EPSG projection codes and their corresponding WKT representations, see http://www.opengeospatial.org/. For a discussion of WKT in general, see the OpenGIS "Coordinate Transformation Services Implementation Specification" at http://www.opengeospatial.org/standards. For information on the European Petroleum Survey Group (EPSG) and their database of spatial reference systems, see http://www.epsg.org. PROJ4TEXT PostGIS uses the Proj4 library to provide coordinate transformation capabilities. The PROJ4TEXT column contains the Proj4 coordinate definition string for a particular SRID. For example: +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m For more information about, see the Proj4 web site at http://trac.osgeo.org/proj/. The spatial_ref_sys.sql file contains both SRTEXT and PROJ4TEXT definitions for all EPSG projections. The GEOMETRY_COLUMNS VIEW In versions of PostGIS prior to 2.0.0, geometry_columns was a table that could be directly edited, and sometimes got out of synch with the actual definition of the geometry columns. In PostGIS 2.0.0, GEOMETRY_COLUMNS became a view with the same front-facing structure as prior versions, but reading from database system catalogs Its structure is as follows: \d geometry_columns View "public.geometry_columns" Column | Type | Modifiers -------------------+------------------------+----------- f_table_catalog | character varying(256) | f_table_schema | character varying(256) | f_table_name | character varying(256) | f_geometry_column | character varying(256) | coord_dimension | integer | srid | integer | type | character varying(30) | The column meanings have not changed from prior versions and are: F_TABLE_CATALOG, F_TABLE_SCHEMA, F_TABLE_NAME The fully qualified name of the feature table containing the geometry column. Note that the terms "catalog" and "schema" are Oracle-ish. There is not PostgreSQL analogue of "catalog" so that column is left blank -- for "schema" the PostgreSQL schema name is used (public is the default). F_GEOMETRY_COLUMN The name of the geometry column in the feature table. COORD_DIMENSION The spatial dimension (2, 3 or 4 dimensional) of the column. SRID The ID of the spatial reference system used for the coordinate geometry in this table. It is a foreign key reference to the SPATIAL_REF_SYS. TYPE The type of the spatial object. To restrict the spatial column to a single type, use one of: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION or corresponding XYM versions POINTM, LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTIONM. For heterogeneous (mixed-type) collections, you can use "GEOMETRY" as the type. This attribute is (probably) not part of the OpenGIS specification, but is required for ensuring type homogeneity. Creating a Spatial Table Creating a table with spatial data, can be done in one step. As shown in the following example which creates a roads table with a 2D linestring geometry column in WGS84 long lat CREATE TABLE ROADS ( ID int4 , ROAD_NAME varchar(25), geom geometry(LINESTRING,4326) ); We can add additional columns using standard ALTER TABLE command as we do in this next example where we add a 3-D linestring. ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ,4326); For backwards compability, you can still create a spatial table in two stages using the management functions. Create a normal non-spatial table. For example: CREATE TABLE ROADS ( ID int4, ROAD_NAME varchar(25) ) Add a spatial column to the table using the OpenGIS "AddGeometryColumn" function. Refer to for more details. The syntax is: AddGeometryColumn( <schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension> ) Or, using current schema: AddGeometryColumn( <table_name>, <column_name>, <srid>, <type>, <dimension> ) Example1: SELECT AddGeometryColumn('public', 'roads', 'geom', 423, 'LINESTRING', 2) Example2: SELECT AddGeometryColumn( 'roads', 'geom', 423, 'LINESTRING', 2) Here is an example of SQL used to create a table and add a spatial column (assuming that an SRID of 128 exists already): CREATE TABLE parks ( park_id INTEGER, park_name VARCHAR, park_date DATE, park_type VARCHAR ); SELECT AddGeometryColumn('parks', 'park_geom', 128, 'MULTIPOLYGON', 2 ); Here is another example, using the generic "geometry" type and the undefined SRID value of 0: CREATE TABLE roads ( road_id INTEGER, road_name VARCHAR ); SELECT AddGeometryColumn( 'roads', 'roads_geom', 0, 'GEOMETRY', 3 ); Manually Registering Geometry Columns in geometry_columns The AddGeometryColumn() approach creates a geometry column and also registers the new column in the geometry_columns table. If your software utilizes geometry_columns, then any geometry columns you need to query by must be registered in this view. Starting with PostGIS 2.0, geometry_columns is no longer editable and all geometry columns are autoregistered. However they may be registered as a generic geometry column if the column was not defined as a specific type during creation. Two of the cases where this may happen, but you can't use AddGeometryColumn, is in the case of SQL Views and bulk inserts. For these cases, you can correct the registration in the geometry_columns table by constraining the column. Note in PostGIS 2.0+ if your column is typmod based, the creation process would register it correctly, so no need to do anything. --Lets say you have a view created like this CREATE VIEW public.vwmytablemercator AS SELECT gid, ST_Transform(geom,3395) As geom, f_name FROM public.mytable; -- For it to register correctly in PostGIS 2.0+ -- You need to cast the geometry -- DROP VIEW public.vwmytablemercator; CREATE VIEW public.vwmytablemercator AS SELECT gid, ST_Transform(geom,3395)::geometry(Geometry, 3395) As geom, f_name FROM public.mytable; -- If you know the geometry type for sure is a 2D POLYGON then you could do DROP VIEW public.vwmytablemercator; CREATE VIEW public.vwmytablemercator AS SELECT gid, ST_Transform(geom,3395)::geometry(Polygon, 3395) As geom, f_name FROM public.mytable; --Lets say you created a derivative table by doing a bulk insert SELECT poi.gid, poi.geom, citybounds.city_name INTO myschema.my_special_pois FROM poi INNER JOIN citybounds ON ST_Intersects(citybounds.geom, poi.geom); --Create 2d index on new table CREATE INDEX idx_myschema_myspecialpois_geom_gist ON myschema.my_special_pois USING gist(geom); -- If your points are 3D points or 3M points, -- then you might want to create an nd index instead of a 2d index -- like so CREATE INDEX my_special_pois_geom_gist_nd ON my_special_pois USING gist(geom gist_geometry_ops_nd); --To manually register this new table's geometry column in geometry_columns -- Note that this approach will work for both PostGIS 2.0+ and PostGIS 1.4+ -- For PostGIS 2.0 it will also change the underlying structure of the table to -- to make the column typmod based. -- For PostGIS prior to 2.0, this technique can also be used to register views SELECT populate_geometry_columns('myschema.my_special_pois'::regclass); --If you are using PostGIS 2.0 and for whatever reason, you -- you need the old constraint based definition behavior -- (such as case of inherited tables where all children do not have the same type and srid) -- set new optional use_typmod argument to false SELECT populate_geometry_columns('myschema.my_special_pois'::regclass, false); Although the old-constraint based method is still supported, a constraint-based geomentry column used directly in a view, will not register correctly in geometry_columns, as will a typmod one. In this example we define a column using typmod and another using constraints. CREATE TABLE pois_ny(gid SERIAL PRIMARY KEY , poi_name text, cat varchar(20) , geom geometry(POINT,4326) ); SELECT AddGeometryColumn('pois_ny', 'geom_2160', 2160, 'POINT', 2, false); If we run in psql \d pois_ny; We observe they are defined differently -- one is typmod, one is constraint Table "public.pois_ny" Column | Type | Modifiers -----------+-----------------------+------------------------------------------------------ gid | integer | not null default nextval('pois_ny_gid_seq'::regclass) poi_name | text | cat | character varying(20) | geom | geometry(Point,4326) | geom_2160 | geometry | Indexes: "pois_ny_pkey" PRIMARY KEY, btree (gid) Check constraints: "enforce_dims_geom_2160" CHECK (st_ndims(geom_2160) = 2) "enforce_geotype_geom_2160" CHECK (geometrytype(geom_2160) = 'POINT'::text OR geom_2160 IS NULL) "enforce_srid_geom_2160" CHECK (st_srid(geom_2160) = 2160) In geometry_columns, they both register correctly SELECT f_table_name, f_geometry_column, srid, type FROM geometry_columns WHERE f_table_name = 'pois_ny'; f_table_name | f_geometry_column | srid | type -------------+-------------------+------+------- pois_ny | geom | 4326 | POINT pois_ny | geom_2160 | 2160 | POINT However -- if we were to create a view like this CREATE VIEW vw_pois_ny_parks AS SELECT * FROM pois_ny WHERE cat='park'; SELECT f_table_name, f_geometry_column, srid, type FROM geometry_columns WHERE f_table_name = 'vw_pois_ny_parks'; The typmod based geom view column registers correctly, but the constraint based one does not. f_table_name | f_geometry_column | srid | type ------------------+-------------------+------+---------- vw_pois_ny_parks | geom | 4326 | POINT vw_pois_ny_parks | geom_2160 | 0 | GEOMETRY This may change in future versions of PostGIS, but for now To force the constraint based view column to register correctly, we need to do this: DROP VIEW vw_pois_ny_parks; CREATE VIEW vw_pois_ny_parks AS SELECT gid, poi_name, cat , geom , geom_2160::geometry(POINT,2160) As geom_2160 FROM pois_ny WHERE cat='park'; SELECT f_table_name, f_geometry_column, srid, type FROM geometry_columns WHERE f_table_name = 'vw_pois_ny_parks'; f_table_name | f_geometry_column | srid | type ------------------+-------------------+------+------- vw_pois_ny_parks | geom | 4326 | POINT vw_pois_ny_parks | geom_2160 | 2160 | POINT Ensuring OpenGIS compliancy of geometries PostGIS is compliant with the Open Geospatial Consortium’s (OGC) OpenGIS Specifications. As such, many PostGIS methods require, or more accurately, assume that geometries that are operated on are both simple and valid. For example, it does not make sense to calculate the area of a polygon that has a hole defined outside of the polygon, or to construct a polygon from a non-simple boundary line. According to the OGC Specifications, a simple geometry is one that has no anomalous geometric points, such as self intersection or self tangency and primarily refers to 0 or 1-dimensional geometries (i.e. [MULTI]POINT, [MULTI]LINESTRING). Geometry validity, on the other hand, primarily refers to 2-dimensional geometries (i.e. [MULTI]POLYGON) and defines the set of assertions that characterizes a valid polygon. The description of each geometric class includes specific conditions that further detail geometric simplicity and validity. A POINT is inheritably simple as a 0-dimensional geometry object. MULTIPOINTs are simple if no two coordinates (POINTs) are equal (have identical coordinate values). A LINESTRING is simple if it does not pass through the same POINT twice (except for the endpoints, in which case it is referred to as a linear ring and additionally considered closed). (a) and (c) are simple LINESTRINGs, (b) and (d) are not. A MULTILINESTRING is simple only if all of its elements are simple and the only intersection between any two elements occurs at POINTs that are on the boundaries of both elements. (e) and (f) are simple MULTILINESTRINGs, (g) is not. By definition, a POLYGON is always simple. It is valid if no two rings in the boundary (made up of an exterior ring and interior rings) cross. The boundary of a POLYGON may intersect at a POINT but only as a tangent (i.e. not on a line). A POLYGON may not have cut lines or spikes and the interior rings must be contained entirely within the exterior ring. (h) and (i) are valid POLYGONs, (j-m) cannot be represented as single POLYGONs, but (j) and (m) could be represented as a valid MULTIPOLYGON. A MULTIPOLYGON is valid if and only if all of its elements are valid and the interiors of no two elements intersect. The boundaries of any two elements may touch, but only at a finite number of POINTs. (n) and (o) are not valid MULTIPOLYGONs. (p), however, is valid. Most of the functions implemented by the GEOS library rely on the assumption that your geometries are valid as specified by the OpenGIS Simple Feature Specification. To check simplicity or validity of geometries you can use the ST_IsSimple() and ST_IsValid() -- Typically, it doesn't make sense to check -- for validity on linear features since it will always return TRUE. -- But in this example, PostGIS extends the definition of the OGC IsValid -- by returning false if a LineString has less than 2 *distinct* vertices. gisdb=# SELECT ST_IsValid('LINESTRING(0 0, 1 1)'), ST_IsValid('LINESTRING(0 0, 0 0, 0 0)'); st_isvalid | st_isvalid ------------+----------- t | f By default, PostGIS does not apply this validity check on geometry input, because testing for validity needs lots of CPU time for complex geometries, especially polygons. If you do not trust your data sources, you can manually enforce such a check to your tables by adding a check constraint: ALTER TABLE mytable ADD CONSTRAINT geometry_valid_check CHECK (ST_IsValid(the_geom)); If you encounter any strange error messages such as "GEOS Intersection() threw an error!" or "JTS Intersection() threw an error!" when calling PostGIS functions with valid input geometries, you likely found an error in either PostGIS or one of the libraries it uses, and you should contact the PostGIS developers. The same is true if a PostGIS function returns an invalid geometry for valid input. Strictly compliant OGC geometries cannot have Z or M values. The ST_IsValid() function won't consider higher dimensioned geometries invalid! Invocations of AddGeometryColumn() will add a constraint checking geometry dimensions, so it is enough to specify 2 there. Dimensionally Extended 9 Intersection Model (DE-9IM) It is sometimes the case that the typical spatial predicates (, , , , ...) are insufficient in and of themselves to adequately provide that desired spatial filter. For example, consider a linear dataset representing a road network. It may be the task of a GIS analyst to identify all road segments that cross each other, not at a point, but on a line, perhaps invalidating some business rule. In this case, does not adequately provide the necessary spatial filter since, for linear features, it returns true only where they cross at a point. One two-step solution might be to first perform the actual intersection () of pairs of road segments that spatially intersect (), and then compare the intersection's with 'LINESTRING' (properly dealing with cases that return GEOMETRYCOLLECTIONs of [MULTI]POINTs, [MULTI]LINESTRINGs, etc.). A more elegant / faster solution may indeed be desirable. A second [theoretical] example may be that of a GIS analyst trying to locate all wharfs or docks that intersect a lake's boundary on a line and where only one end of the wharf is up on shore. In other words, where a wharf is within, but not completely within a lake, intersecting the boundary of a lake on a line, and where the wharf's endpoints are both completely within and on the boundary of the lake. The analyst may need to use a combination of spatial predicates to isolate the sought after features: (lake, wharf) = TRUE (lake, wharf) = FALSE ((wharf, lake)) = 'LINESTRING' ((((wharf), (lake)))) = 1 ... (needless to say, this could get quite complicated) So enters the Dimensionally Extended 9 Intersection Model, or DE-9IM for short. Theory According to the OpenGIS Simple Features Implementation Specification for SQL, "the basic approach to comparing two geometries is to make pair-wise tests of the intersections between the Interiors, Boundaries and Exteriors of the two geometries and to classify the relationship between the two geometries based on the entries in the resulting 'intersection' matrix." Boundary The boundary of a geometry is the set of geometries of the next lower dimension. For POINTs, which have a dimension of 0, the boundary is the empty set. The boundary of a LINESTRING are the two endpoints. For POLYGONs, the boundary is the linework that make up the exterior and interior rings. Interior The interior of a geometry are those points of a geometry that are left when the boundary is removed. For POINTs, the interior is the POINT itself. The interior of a LINESTRING are the set of real points between the endpoints. For POLYGONs, the interior is the areal surface inside the polygon. Exterior The exterior of a geometry is the universe, an areal surface, not on the interior or boundary of the geometry. Given geometry a, where the I(a), B(a), and E(a) are the Interior, Boundary, and Exterior of a, the mathematical representation of the matrix is: Interior Boundary Exterior Interior dim( I(a) ∩ I(b) ) dim( I(a) ∩ B(b) ) dim( I(a) ∩ E(b) ) Boundary dim( B(a) ∩ I(b) ) dim( B(a) ∩ B(b) ) dim( B(a) ∩ E(b) ) Exterior dim( E(a) ∩ I(b) ) dim( E(a) ∩ B(b) ) dim( E(a) ∩ E(b) ) Where dim(a) is the dimension of a as specified by but has the domain of {0,1,2,T,F,*} 0 => point 1 => line 2 => area T => {0,1,2} F => empty set * => don't care Visually, for two overlapping polygonal geometries, this looks like: Interior Boundary Exterior Interior dim(...) = 2 dim(...) = 1 dim(...) = 2 Boundary dim(...) = 1 dim(...) = 0 dim(...) = 1 Exterior dim(...) = 2 dim(...) = 1 dim(...) = 2 Read from left to right and from top to bottom, the dimensional matrix is represented, '212101212'. A relate matrix that would therefore represent our first example of two lines that intersect on a line would be: '1*1***1**' -- Identify road segments that cross on a line SELECT a.id FROM roads a, roads b WHERE a.id != b.id AND a.geom && b.geom AND ST_Relate(a.geom, b.geom, '1*1***1**'); A relate matrix that represents the second example of wharfs partly on the lake's shoreline would be '102101FF2' -- Identify wharfs partly on a lake's shoreline SELECT a.lake_id, b.wharf_id FROM lakes a, wharfs b WHERE a.geom && b.geom AND ST_Relate(a.geom, b.geom, '102101FF2'); For more information or reading, see: OpenGIS Simple Features Implementation Specification for SQL (version 1.1, section 2.1.13.2) Dimensionally Extended Nine-Intersection Model (DE-9IM) by Christian Strobl GeoTools: Point Set Theory and the DE-9IM Matrix Encyclopedia of GIS By Hui Xiong Loading GIS (Vector) Data Once you have created a spatial table, you are ready to upload GIS data to the database. Currently, there are two ways to get data into a PostGIS/PostgreSQL database: using formatted SQL statements or using the Shape file loader/dumper. Loading Data Using SQL If you can convert your data to a text representation, then using formatted SQL might be the easiest way to get your data into PostGIS. As with Oracle and other SQL databases, data can be bulk loaded by piping a large text file full of SQL "INSERT" statements into the SQL terminal monitor. A data upload file (roads.sql for example) might look like this: BEGIN; INSERT INTO roads (road_id, roads_geom, road_name) VALUES (1,ST_GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd'); INSERT INTO roads (road_id, roads_geom, road_name) VALUES (2,ST_GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd'); INSERT INTO roads (road_id, roads_geom, road_name) VALUES (3,ST_GeomFromText('LINESTRING(192783 228138,192612 229814)',-1),'Paul St'); INSERT INTO roads (road_id, roads_geom, road_name) VALUES (4,ST_GeomFromText('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave'); INSERT INTO roads (road_id, roads_geom, road_name) VALUES (5,ST_GeomFromText('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce'); INSERT INTO roads (road_id, roads_geom, road_name) VALUES (6,ST_GeomFromText('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres'); COMMIT; The data file can be piped into PostgreSQL very easily using the "psql" SQL terminal monitor: psql -d [database] -f roads.sql shp2pgsql: Using the ESRI Shapefile Loader The shp2pgsql data loader converts ESRI Shape files into SQL suitable for insertion into a PostGIS/PostgreSQL database either in geometry or geography format. The loader has several operating modes distinguished by command line flags: In addition to the shp2pgsql command-line loader, there is an shp2pgsql-gui graphical interface with most of the options as the command-line loader, but may be easier to use for one-off non-scripted loading or if you are new to PostGIS. It can also be configured as a plugin to PgAdminIII. (c|a|d|p) These are mutually exclusive options: -c Creates a new table and populates it from the shapefile. This is the default mode. -a Appends data from the Shape file into the database table. Note that to use this option to load multiple files, the files must have the same attributes and same data types. -d Drops the database table before creating a new table with the data in the Shape file. -p Only produces the table creation SQL code, without adding any actual data. This can be used if you need to completely separate the table creation and data loading steps. -? Display help screen. -D Use the PostgreSQL "dump" format for the output data. This can be combined with -a, -c and -d. It is much faster to load than the default "insert" SQL format. Use this for very large data sets. -s [<FROM_SRID%gt;:]<SRID> Creates and populates the geometry tables with the specified SRID. Optionally specifies that the input shapefile uses the given FROM_SRID, in which case the geometries will be reprojected to the target SRID. FROM_SRID cannot be specified with -D. -k Keep identifiers' case (column, schema and attributes). Note that attributes in Shapefile are all UPPERCASE. -i Coerce all integers to standard 32-bit integers, do not create 64-bit bigints, even if the DBF header signature appears to warrant it. -I Create a GiST index on the geometry column. -S Generate simple geometries instead of MULTI geometries. Will only succeed if all the geometries are actually single (I.E. a MULTIPOLYGON with a single shell, or or a MULTIPOINT with a single vertex). -t <dimensionality> Force the output geometry to have the specified dimensionality. Use the following strings to indicate the dimensionality: 2D, 3DZ, 3DM, 4D. If the input has fewer dimensions that specified, the output will have those dimensions filled in with zeroes. If the input has more dimensions that specified, the unwanted dimensions will be stripped. -w Output WKT format, instead of WKB. Note that this can introduce coordinate drifts due to loss of precision. -e Execute each statement on its own, without using a transaction. This allows loading of the majority of good data when there are some bad geometries that generate errors. Note that this cannot be used with the -D flag as the "dump" format always uses a transaction. -W <encoding> Specify encoding of the input data (dbf file). When used, all attributes of the dbf are converted from the specified encoding to UTF8. The resulting SQL output will contain a SET CLIENT_ENCODING to UTF8 command, so that the backend will be able to reconvert from UTF8 to whatever encoding the database is configured to use internally. -N <policy> NULL geometries handling policy (insert*,skip,abort) -n -n Only import DBF file. If your data has no corresponding shapefile, it will automatically switch to this mode and load just the dbf. So setting this flag is only needed if you have a full shapefile set, and you only want the attribute data and no geometry. -G Use geography type instead of geometry (requires lon/lat data) in WGS84 long lat (SRID=4326) -T <tablespace> Specify the tablespace for the new table. Indexes will still use the default tablespace unless the -X parameter is also used. The PostgreSQL documentation has a good description on when to use custom tablespaces. -X <tablespace> Specify the tablespace for the new table's indexes. This applies to the primary key index, and the GIST spatial index if -I is also used. An example session using the loader to create an input file and uploading it might look like this: # shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql # psql -d roadsdb -f roads.sql A conversion and upload can be done all in one step using UNIX pipes: # shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb Retrieving GIS Data Data can be extracted from the database using either SQL or the Shape file loader/dumper. In the section on SQL we will discuss some of the operators available to do comparisons and queries on spatial tables. Using SQL to Retrieve Data The most straightforward means of pulling data out of the database is to use a SQL select query to reduce the number of RECORDS and COLUMNS returned and dump the resulting columns into a parsable text file: db=# SELECT road_id, ST_AsText(road_geom) AS geom, road_name FROM roads; road_id | geom | road_name --------+-----------------------------------------+----------- 1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd 2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd 3 | LINESTRING(192783 228138,192612 229814) | Paul St 4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave 5 | LINESTRING(190131 224148,190871 228134) | Phil Tce 6 | LINESTRING(198231 263418,198213 268322) | Dave Cres 7 | LINESTRING(218421 284121,224123 241231) | Chris Way (6 rows) However, there will be times when some kind of restriction is necessary to cut down the number of fields returned. In the case of attribute-based restrictions, just use the same SQL syntax as normal with a non-spatial table. In the case of spatial restrictions, the following operators are available/useful: && This operator tells whether the bounding box of one geometry intersects the bounding box of another. ST_OrderingEquals This tests whether two geometries are geometrically identical. For example, if 'POLYGON((0 0,1 1,1 0,0 0))' is the same as 'POLYGON((0 0,1 1,1 0,0 0))' (it is). = This operator is a little more naive, it only tests whether the bounding boxes of two geometries are the same. Next, you can use these operators in queries. Note that when specifying geometries and boxes on the SQL command line, you must explicitly turn the string representations into geometries by using the "ST_GeomFromText()" function. The 312 is a fictitious spatial reference system that matches our data. So, for example: SELECT road_id, road_name FROM roads WHERE ST_OrderingEquals(roads_geom , ST_GeomFromText('LINESTRING(191232 243118,191108 243242)',312) ) ; The above query would return the single record from the "ROADS_GEOM" table in which the geometry was equal to that value. When using the "&&" operator, you can specify either a BOX3D as the comparison feature or a GEOMETRY. When you specify a GEOMETRY, however, its bounding box will be used for the comparison. SELECT road_id, road_name FROM roads WHERE roads_geom && ST_GeomFromText('POLYGON((...))',312); The above query will use the bounding box of the polygon for comparison purposes. The most common spatial query will probably be a "frame-based" query, used by client software, like data browsers and web mappers, to grab a "map frame" worth of data for display. Using a "BOX3D" object for the frame, such a query looks like this: SELECT ST_AsText(roads_geom) AS geom FROM roads WHERE roads_geom && ST_MakeEnvelope(191232, 243117,191232, 243119,312); Note the use of the SRID 312, to specify the projection of the envelope. Using the Dumper The pgsql2shp table dumper connects directly to the database and converts a table (possibly defined by a query) into a shape file. The basic syntax is: pgsql2shp [<options>] <database> [<schema>.]<table> pgsql2shp [<options>] <database> <query> The commandline options are: -f <filename> Write the output to a particular filename. -h <host> The database host to connect to. -p <port> The port to connect to on the database host. -P <password> The password to use when connecting to the database. -u <user> The username to use when connecting to the database. -g <geometry column> In the case of tables with multiple geometry columns, the geometry column to use when writing the shape file. -b Use a binary cursor. This will make the operation faster, but will not work if any NON-geometry attribute in the table lacks a cast to text. -r Raw mode. Do not drop the gid field, or escape column names. -d For backward compatibility: write a 3-dimensional shape file when dumping from old (pre-1.0.0) postgis databases (the default is to write a 2-dimensional shape file in that case). Starting from postgis-1.0.0+, dimensions are fully encoded. -m filename Remap identifiers to ten character names. The content of the file is lines of two symbols separated by a single white space and no trailing or leading space: VERYLONGSYMBOL SHORTONE ANOTHERVERYLONGSYMBOL SHORTER etc. Building Indexes Indexes are what make using a spatial database for large data sets possible. Without indexing, any search for a feature would require a "sequential scan" of every record in the database. Indexing speeds up searching by organizing the data into a search tree which can be quickly traversed to find a particular record. PostgreSQL supports three kinds of indexes by default: B-Tree indexes, R-Tree indexes, and GiST indexes. B-Trees are used for data which can be sorted along one axis; for example, numbers, letters, dates. GIS data cannot be rationally sorted along one axis (which is greater, (0,0) or (0,1) or (1,0)?) so B-Tree indexing is of no use for us. R-Trees break up data into rectangles, and sub-rectangles, and sub-sub rectangles, etc. R-Trees are used by some spatial databases to index GIS data, but the PostgreSQL R-Tree implementation is not as robust as the GiST implementation. GiST (Generalized Search Trees) indexes break up data into "things to one side", "things which overlap", "things which are inside" and can be used on a wide range of data-types, including GIS data. PostGIS uses an R-Tree index implemented on top of GiST to index GIS data. GiST Indexes GiST stands for "Generalized Search Tree" and is a generic form of indexing. In addition to GIS indexing, GiST is used to speed up searches on all kinds of irregular data structures (integer arrays, spectral data, etc) which are not amenable to normal B-Tree indexing. Once a GIS data table exceeds a few thousand rows, you will want to build an index to speed up spatial searches of the data (unless all your searches are based on attributes, in which case you'll want to build a normal index on the attribute fields). The syntax for building a GiST index on a "geometry" column is as follows: CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); The above syntax will always build a 2D-index. To get the an n-dimensional index supported in PostGIS 2.0+ for the geometry type, you can create one using this syntax CREATE INDEX [indexname] ON [tablename] USING GIST ([geometryfield] gist_geometry_ops_nd); Building a spatial index is a computationally intensive exercise: on tables of around 1 million rows, on a 300MHz Solaris machine, we have found building a GiST index takes about 1 hour. After building an index, it is important to force PostgreSQL to collect table statistics, which are used to optimize query plans: VACUUM ANALYZE [table_name] [(column_name)]; -- This is only needed for PostgreSQL 7.4 installations and below SELECT UPDATE_GEOMETRY_STATS([table_name], [column_name]); GiST indexes have two advantages over R-Tree indexes in PostgreSQL. Firstly, GiST indexes are "null safe", meaning they can index columns which include null values. Secondly, GiST indexes support the concept of "lossiness" which is important when dealing with GIS objects larger than the PostgreSQL 8K page size. Lossiness allows PostgreSQL to store only the "important" part of an object in an index -- in the case of GIS objects, just the bounding box. GIS objects larger than 8K will cause R-Tree indexes to fail in the process of being built. Using Indexes Ordinarily, indexes invisibly speed up data access: once the index is built, the query planner transparently decides when to use index information to speed up a query plan. Unfortunately, the PostgreSQL query planner does not optimize the use of GiST indexes well, so sometimes searches which should use a spatial index instead default to a sequence scan of the whole table. If you find your spatial indexes are not being used (or your attribute indexes, for that matter) there are a couple things you can do: Firstly, make sure statistics are gathered about the number and distributions of values in a table, to provide the query planner with better information to make decisions around index usage. For PostgreSQL 7.4 installations and below this is done by running update_geometry_stats([table_name, column_name]) (compute distribution) and VACUUM ANALYZE [table_name] [column_name] (compute number of values). Starting with PostgreSQL 8.0 running VACUUM ANALYZE will do both operations. You should regularly vacuum your databases anyways -- many PostgreSQL DBAs have VACUUM run as an off-peak cron job on a regular basis. If vacuuming does not work, you can force the planner to use the index information by using the SET ENABLE_SEQSCAN=OFF command. You should only use this command sparingly, and only on spatially indexed queries: generally speaking, the planner knows better than you do about when to use normal B-Tree indexes. Once you have run your query, you should consider setting ENABLE_SEQSCAN back on, so that other queries will utilize the planner as normal. As of version 0.6, it should not be necessary to force the planner to use the index with ENABLE_SEQSCAN. If you find the planner wrong about the cost of sequential vs index scans try reducing the value of random_page_cost in postgresql.conf or using SET random_page_cost=#. Default value for the parameter is 4, try setting it to 1 or 2. Decrementing the value makes the planner more inclined of using Index scans. Complex Queries The raison d'etre of spatial database functionality is performing queries inside the database which would ordinarily require desktop GIS functionality. Using PostGIS effectively requires knowing what spatial functions are available, and ensuring that appropriate indexes are in place to provide good performance. The SRID of 312 used in these examples is purely for demonstration. You should be using a REAL SRID listed in the the spatial_ref_sys table and one that matches the projection of your data. If your data has no spatial reference system specified, you should be THINKING very thoughtfully why it doesn't and maybe it should. If your reason is because you are modeling something that doesn't have a geographic spatial reference system defined such as the internals of a molecule or a good location on Mars to transport the human race in the event of a nuclear holocaust, then simply leave out the SRID or make one up and insert it in the spatial_ref_sys table. Taking Advantage of Indexes When constructing a query it is important to remember that only the bounding-box-based operators such as && can take advantage of the GiST spatial index. Functions such as ST_Distance() cannot use the index to optimize their operation. For example, the following query would be quite slow on a large table: SELECT the_geom FROM geom_table WHERE ST_Distance(the_geom, ST_GeomFromText('POINT(100000 200000)', 312)) < 100 This query is selecting all the geometries in geom_table which are within 100 units of the point (100000, 200000). It will be slow because it is calculating the distance between each point in the table and our specified point, ie. one ST_Distance() calculation for each row in the table. We can avoid this by using the && operator to reduce the number of distance calculations required: SELECT the_geom FROM geom_table WHERE ST_DWithin(the_geom, ST_MakeEnvelope(90900, 190900, 100100, 200100,312), 100) This query selects the same geometries, but it does it in a more efficient way. Assuming there is a GiST index on the_geom, the query planner will recognize that it can use the index to reduce the number of rows before calculating the result of the ST_distance() function. Notice that the ST_MakeEnvelope geometry which is used in the && operation is a 200 unit square box centered on the original point - this is our "query box". The && operator uses the index to quickly reduce the result set down to only those geometries which have bounding boxes that overlap the "query box". Assuming that our query box is much smaller than the extents of the entire geometry table, this will drastically reduce the number of distance calculations that need to be done. Change in Behavior As of PostGIS 1.3.0, most of the Geometry Relationship Functions, with the notable exceptions of ST_Disjoint and ST_Relate, include implicit bounding box overlap operators. Examples of Spatial SQL The examples in this section will make use of two tables, a table of linear roads, and a table of polygonal municipality boundaries. The table definitions for the bc_roads table is: Column | Type | Description ------------+-------------------+------------------- gid | integer | Unique ID name | character varying | Road Name the_geom | geometry | Location Geometry (Linestring) The table definition for the bc_municipality table is: Column | Type | Description -----------+-------------------+------------------- gid | integer | Unique ID code | integer | Unique ID name | character varying | City / Town Name the_geom | geometry | Location Geometry (Polygon) What is the total length of all roads, expressed in kilometers? You can answer this question with a very simple piece of SQL: SELECT sum(ST_Length(the_geom))/1000 AS km_roads FROM bc_roads; km_roads ------------------ 70842.1243039643 (1 row) How large is the city of Prince George, in hectares? This query combines an attribute condition (on the municipality name) with a spatial calculation (of the area): SELECT ST_Area(the_geom)/10000 AS hectares FROM bc_municipality WHERE name = 'PRINCE GEORGE'; hectares ------------------ 32657.9103824927 (1 row) What is the largest municipality in the province, by area? This query brings a spatial measurement into the query condition. There are several ways of approaching this problem, but the most efficient is below: SELECT name, ST_Area(the_geom)/10000 AS hectares FROM bc_municipality ORDER BY hectares DESC LIMIT 1; name | hectares ---------------+----------------- TUMBLER RIDGE | 155020.02556131 (1 row) Note that in order to answer this query we have to calculate the area of every polygon. If we were doing this a lot it would make sense to add an area column to the table that we could separately index for performance. By ordering the results in a descending direction, and them using the PostgreSQL "LIMIT" command we can easily pick off the largest value without using an aggregate function like max(). What is the length of roads fully contained within each municipality? This is an example of a "spatial join", because we are bringing together data from two tables (doing a join) but using a spatial interaction condition ("contained") as the join condition rather than the usual relational approach of joining on a common key: SELECT m.name, sum(ST_Length(r.the_geom))/1000 as roads_km FROM bc_roads AS r, bc_municipality AS m WHERE ST_Contains(m.the_geom,r.the_geom) GROUP BY m.name ORDER BY roads_km; name | roads_km ----------------------------+------------------ SURREY | 1539.47553551242 VANCOUVER | 1450.33093486576 LANGLEY DISTRICT | 833.793392535662 BURNABY | 773.769091404338 PRINCE GEORGE | 694.37554369147 ... This query takes a while, because every road in the table is summarized into the final result (about 250K roads for our particular example table). For smaller overlays (several thousand records on several hundred) the response can be very fast. Create a new table with all the roads within the city of Prince George. This is an example of an "overlay", which takes in two tables and outputs a new table that consists of spatially clipped or cut resultants. Unlike the "spatial join" demonstrated above, this query actually creates new geometries. An overlay is like a turbo-charged spatial join, and is useful for more exact analysis work: CREATE TABLE pg_roads as SELECT ST_Intersection(r.the_geom, m.the_geom) AS intersection_geom, ST_Length(r.the_geom) AS rd_orig_length, r.* FROM bc_roads AS r, bc_municipality AS m WHERE m.name = 'PRINCE GEORGE' AND ST_Intersects(r.the_geom, m.the_geom); What is the length in kilometers of "Douglas St" in Victoria? SELECT sum(ST_Length(r.the_geom))/1000 AS kilometers FROM bc_roads r, bc_municipality m WHERE r.name = 'Douglas St' AND m.name = 'VICTORIA' AND ST_Contains(m.the_geom, r.the_geom) ; kilometers ------------------ 4.89151904172838 (1 row) What is the largest municipality polygon that has a hole? SELECT gid, name, ST_Area(the_geom) AS area FROM bc_municipality WHERE ST_NRings(the_geom) > 1 ORDER BY area DESC LIMIT 1; gid | name | area -----+--------------+------------------ 12 | SPALLUMCHEEN | 257374619.430216 (1 row) postgis-2.1.2+dfsg.orig/doc/reference_type.xml0000644000000000000000000001440511722777314020065 0ustar rootroot This section lists the PostgreSQL data types installed by PostGIS. Note we describe the casting behavior of these which is very important especially when designing your own functions. A Cast is when one type is coerced into another type. PostgreSQL is unique from most databases in that it allows you to define casting behavior for custom types and the functions used for casting. A cast can be specified as automatic in which case, you do not have to do a CAST(myfoo As otherfootype) or myfoo::otherfootype if you are feeding it to a function that only works with otherfootype and there is an automatic cast in place for it. The danger of relying on automatic cast behavior is when you have an overloaded function say one that takes a box2d and one that takes a box3d but no geometry. What happens is that both functions are equally good to use with geometry since geometry has an autocast for both -- so you end up with an ambiguous function error. To force PostgreSQL to choose, you do a CAST(mygeom As box3d) or mygeom::box3d. At least as of PostgreSQL 8.3 - Everything can be CAST to text (presumably because of the magical unknown type), so no defined CASTS for that need to be present for you to CAST an object to text. PostgreSQL PostGIS Geometry/Geography/Box Types box2d A box composed of x min, ymin, xmax, ymax. Often used to return the 2d enclosing box of a geometry. Description box2d is a spatial data type used to represent the enclosing box of a geometry or set of geometries. ST_Extent in earlier versions prior to PostGIS 1.4 would return a box2d. box3d A box composed of x min, ymin, zmin, xmax, ymax, zmax. Often used to return the 3d extent of a geometry or collection of geometries. Description box3d is a postgis spatial data type used to represent the enclosing box of a geometry or set of geometries. ST_3DExtent returns a box3d object. Casting Behavior This section lists the automatic as well as explicit casts allowed for this data type Cast To Behavior box automatic box2d automatic geometry automatic geometry Planar spatial data type. Description geometry is a fundamental postgis spatial data type used to represent a feature in the Euclidean coordinate system. Casting Behavior This section lists the automatic as well as explicit casts allowed for this data type Cast To Behavior box automatic box2d automatic box3d automatic bytea automatic geography automatic text automatic See Also geometry_dump A spatial datatype with two fields - geom (holding a geometry object) and path[] (a 1-d array holding the position of the geometry within the dumped object.) Description geometry_dump is a compound data type consisting of a geometry object referenced by the .geom field and path[] a 1-dimensional integer array (starting at 1 e.g. path[1] to get first element) array that defines the navigation path within the dumped geometry to find this element. It is used by the ST_Dump* family of functions as an output type to explode a more complex geometry into its constituent parts and location of parts. See Also geography Ellipsoidal spatial data type. Description geography is a spatial data type used to represent a feature in the round-earth coordinate system. Casting Behavior This section lists the automatic as well as explicit casts allowed for this data type Cast To Behavior geometry explicit See Also , postgis-2.1.2+dfsg.orig/doc/reference_sfcgal.xml0000644000000000000000000001162012143217372020326 0ustar rootroot Using SFCGAL Advanced 2D/3D functions TODO Introduction part TODO Install part ST_Extrude Extrude a surface to a related volume geometry ST_Extrude geometry geom float x float y float z Description Availability &sfcgal_required; &Z_support; &P_support; &T_support; ST_StraightSkeleton Compute a straight skeleton from a geometry geometry ST_StraightSkeleton geometry geom Description Availability &sfcgal_required; &Z_support; &P_support; &T_support; ST_IsPlanar Check if a surface is or not planar boolean ST_IsPlanar geometry geom Description Availability &sfcgal_required; &Z_support; &P_support; &T_support; ST_Orientation Determine surface orientation integer ST_Orientation geometry geom Description Availability &sfcgal_required; &Z_support; &P_support; &T_support; ST_ForceLHR Force LHR orientation geometry ST_ForceLHR geometry geom Description Availability &sfcgal_required; &Z_support; &P_support; &T_support; ST_MinkowskiSum Perform Minkowski sum geometry ST_Minkowski geometry geom1 geometry geom2 Description Availability &sfcgal_required; &Z_support; &P_support; &T_support; ST_Tesselate Perform surface Tesselation geometry ST_Tesselate geometry geom Description Availability &sfcgal_required; &Z_support; &P_support; &T_support; postgis-2.1.2+dfsg.orig/doc/reference_output.xml0000644000000000000000000013274612141557303020443 0ustar rootroot Geometry Outputs ST_AsBinary Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data. bytea ST_AsBinary geometry g1 bytea ST_AsBinary geometry g1 text NDR_or_XDR bytea ST_AsBinary geography g1 bytea ST_AsBinary geography g1 text NDR_or_XDR Description Returns the Well-Known Binary representation of the geometry. There are 2 variants of the function. The first variant takes no endian encoding parameter and defaults to server machine endian. The second variant takes a second argument denoting the encoding - using little-endian ('NDR') or big-endian ('XDR') encoding. This is useful in binary cursors to pull data out of the database without converting it to a string representation. The WKB spec does not include the SRID. To get the WKB with SRID format use ST_AsEWKB ST_AsBinary is the reverse of for geometry. Use to convert to a postgis geometry from ST_AsBinary representation. The default behavior in PostgreSQL 9.0 has been changed to output bytea in hex encoding. ST_AsBinary is the reverse of for geometry. If your GUI tools require the old behavior, then SET bytea_output='escape' in your database. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Enhanced: 2.0.0 support for higher coordinate dimensions was introduced. Enhanced: 2.0.0 support for specifying endian with geography was introduced. Availability: 1.5.0 geography support was introduced. Changed: 2.0.0 Inputs to this function can not be unknown -- must be geometry. Constructs such as ST_AsBinary('POINT(1 2)') are no longer valid and you will get an n st_asbinary(unknown) is not unique error. Code like that needs to be changed to ST_AsBinary('POINT(1 2)'::geometry);. If that is not possible, then install legacy.sql. &sfs_compliant; s2.1.1.1 &sqlmm_compliant; SQL-MM 3: 5.1.37 &curve_support; &P_support; &T_support; &Z_support; Examples SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)); st_asbinary -------------------------------- \001\003\000\000\000\001\000\000\000\005 \000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000 \000\000\000\360?\000\000\000\000\000\000 \360?\000\000\000\000\000\000\360?\000\000 \000\000\000\000\360?\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000 (1 row) SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR'); st_asbinary -------------------------------- \000\000\000\000\003\000\000\000\001\000\000\000\005\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000?\360\000\000\000\000\000\000?\360\000\000\000\000\000\000?\360\000\000 \000\000\000\000?\360\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 (1 row) See Also , , ST_AsEWKB Return the Well-Known Binary (WKB) representation of the geometry with SRID meta data. bytea ST_AsEWKB geometry g1 bytea ST_AsEWKB geometry g1 text NDR_or_XDR Description Returns the Well-Known Binary representation of the geometry with SRID metadata. There are 2 variants of the function. The first variant takes no endian encoding parameter and defaults to little endian. The second variant takes a second argument denoting the encoding - using little-endian ('NDR') or big-endian ('XDR') encoding. This is useful in binary cursors to pull data out of the database without converting it to a string representation. The WKB spec does not include the SRID. To get the OGC WKB format use ST_AsBinary ST_AsEWKB is the reverse of ST_GeomFromEWKB. Use ST_GeomFromEWKB to convert to a postgis geometry from ST_AsEWKB representation. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &Z_support; &curve_support; &P_support; &T_support; Examples SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)); st_asewkb -------------------------------- \001\003\000\000 \346\020\000\000\001\000 \000\000\005\000\000\000\000 \000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000 \000\000\360?\000\000\000\000\000\000\360? \000\000\000\000\000\000\360?\000\000\000\000\000 \000\360?\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000 (1 row) SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR'); st_asewkb -------------------------------- \000 \000\000\003\000\000\020\346\000\000\000\001\000\000\000\005\000\000\000\000\ 000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000? \360\000\000\000\000\000\000?\360\000\000\000\000\000\000?\360\000\000\000\000 \000\000?\360\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000 See Also , , , , ST_AsEWKT Return the Well-Known Text (WKT) representation of the geometry with SRID meta data. text ST_AsEWKT geometry g1 text ST_AsEWKT geography g1 Description Returns the Well-Known Text representation of the geometry prefixed with the SRID. The WKT spec does not include the SRID. To get the OGC WKT format use ST_AsText WKT format does not maintain precision so to prevent floating truncation, use ST_AsBinary or ST_AsEWKB format for transport. ST_AsEWKT is the reverse of . Use to convert to a postgis geometry from ST_AsEWKT representation. Enhanced: 2.0.0 support for Geography, Polyhedral surfaces, Triangles and TIN was introduced. &Z_support; &curve_support; &P_support; &T_support; Examples SELECT ST_AsEWKT('0103000020E61000000100000005000000000000 000000000000000000000000000000000000000000000000000000 F03F000000000000F03F000000000000F03F000000000000F03 F000000000000000000000000000000000000000000000000'::geometry); st_asewkt -------------------------------- SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0)) (1 row) SELECT ST_AsEWKT('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018 E20A4100000000485F024100000000000000400000000018 E20A4100000000305C02410000000000000840') --st_asewkt--- CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3) See Also , ST_AsGeoJSON Return the geometry as a GeoJSON element. text ST_AsGeoJSON geometry geom integer maxdecimaldigits=15 integer options=0 text ST_AsGeoJSON geography geog integer maxdecimaldigits=15 integer options=0 text ST_AsGeoJSON integer gj_version geometry geom integer maxdecimaldigits=15 integer options=0 text ST_AsGeoJSON integer gj_version geography geog integer maxdecimaldigits=15 integer options=0 Description Return the geometry as a Geometry Javascript Object Notation (GeoJSON) element. (Cf GeoJSON specifications 1.0). 2D and 3D Geometries are both supported. GeoJSON only support SFS 1.1 geometry type (no curve support for example). The gj_version parameter is the major version of the GeoJSON spec. If specified, must be 1. This represents the spec version of GeoJSON. The third argument may be used to reduce the maximum number of decimal places used in output (defaults to 15). The last 'options' argument could be used to add Bbox or Crs in GeoJSON output: 0: means no option (default value) 1: GeoJSON Bbox 2: GeoJSON Short CRS (e.g EPSG:4326) 4: GeoJSON Long CRS (e.g urn:ogc:def:crs:EPSG::4326) Version 1: ST_AsGeoJSON(geom) / precision=15 version=1 options=0 Version 2: ST_AsGeoJSON(geom, precision) / version=1 options=0 Version 3: ST_AsGeoJSON(geom, precision, options) / version=1 Version 4: ST_AsGeoJSON(gj_version, geom) / precision=15 options=0 Version 5: ST_AsGeoJSON(gj_version, geom, precision) /options=0 Version 6: ST_AsGeoJSON(gj_version, geom, precision,options) Availability: 1.3.4 Availability: 1.5.0 geography support was introduced. Changed: 2.0.0 support default args and named args. &Z_support; Examples GeoJSON format is generally more efficient than other formats for use in ajax mapping. One popular javascript client that supports this is Open Layers. Example of its use is OpenLayers GeoJSON Example SELECT ST_AsGeoJSON(the_geom) from fe_edges limit 1; st_asgeojson ----------------------------------------------------------------------------------------------------------- {"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000], [-89.734955999999997,31.492237999999997]]]} (1 row) --3d point SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)'); st_asgeojson ----------------------------------------------------------------------------------------- {"type":"LineString","coordinates":[[1,2,3],[4,5,6]]} ST_AsGML Return the geometry as a GML version 2 or 3 element. text ST_AsGML integer version geometry geom integer maxdecimaldigits=15 integer options=0 text nprefix=null text id=null text ST_AsGML integer version geography geog integer maxdecimaldigits=15 integer options=0 text nprefix=null text id=null Description Return the geometry as a Geography Markup Language (GML) element. The version parameter, if specified, may be either 2 or 3. If no version parameter is specified then the default is assumed to be 2. The precision argument may be used to reduce the maximum number of decimal places (maxdecimaldigits) used in output (defaults to 15). GML 2 refer to 2.1.2 version, GML 3 to 3.1.1 version The 'options' argument is a bitfield. It could be used to define CRS output type in GML output, and to declare data as lat/lon: 0: GML Short CRS (e.g EPSG:4326), default value 1: GML Long CRS (e.g urn:ogc:def:crs:EPSG::4326) 2: For GML 3 only, remove srsDimension attribute from output. 4: For GML 3 only, use <LineString> rather than <Curve> tag for lines. 16: Declare that datas are lat/lon (e.g srid=4326). Default is to assume that data are planars. This option is useful for GML 3.1.1 output only, related to axis order. So if you set it, it will swap the coordinates so order is lat lon instead of database lon lat. 32: Output the box of the geometry (envelope). The 'namespace prefix' argument may be used to specify a custom namespace prefix or no prefix (if empty). If null or omitted 'gml' prefix is used Availability: 1.3.2 Availability: 1.5.0 geography support was introduced. Enhanced: 2.0.0 prefix support was introduced. Option 4 for GML3 was introduced to allow using LineString instead of Curve tag for lines. GML3 Support for Polyhedral surfaces and TINS was introduced. Option 32 was introduced to output the box. Changed: 2.0.0 use default named args Enhanced: 2.1.0 id support was introduced, for GML 3. Only version 3+ of ST_AsGML supports Polyhedral Surfaces and TINS. &Z_support; &P_support; &T_support; Examples: Version 2 0,0 0,1 1,1 1,0 0,0]]> Examples: Version 3 -- Flip coordinates and output extended EPSG (16 | 1)-- 6.34535 5.23423]]> -- Output the envelope (32) -- 1 2 10 20 ]]> -- Output the envelope (32) , reverse (lat lon instead of lon lat) (16), long srs (1)= 32 | 16 | 1 = 49 -- 2 1 20 10 ]]> -- Polyhedral Example -- SELECT ST_AsGML(3, ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')); st_asgml -------- 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 ]]> See Also ST_AsHEXEWKB Returns a Geometry in HEXEWKB format (as text) using either little-endian (NDR) or big-endian (XDR) encoding. text ST_AsHEXEWKB geometry g1 text NDRorXDR text ST_AsHEXEWKB geometry g1 Description Returns a Geometry in HEXEWKB format (as text) using either little-endian (NDR) or big-endian (XDR) encoding. If no encoding is specified, then NDR is used. Availability: 1.2.2 &Z_support; &curve_support; Examples SELECT ST_AsHEXEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)); which gives same answer as SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)::text; st_ashexewkb -------- 0103000020E6100000010000000500 00000000000000000000000000000000 00000000000000000000000000000000F03F 000000000000F03F000000000000F03F000000000000F03 F000000000000000000000000000000000000000000000000 ST_AsKML Return the geometry as a KML element. Several variants. Default version=2, default precision=15 text ST_AsKML geometry geom integer maxdecimaldigits=15 text ST_AsKML geography geog integer maxdecimaldigits=15 text ST_AsKML integer version geometry geom integer maxdecimaldigits=15 text nprefix=NULL text ST_AsKML integer version geography geog integer maxdecimaldigits=15 text nprefix=NULL Description Return the geometry as a Keyhole Markup Language (KML) element. There are several variants of this function. maximum number of decimal places used in output (defaults to 15), version default to 2 and default namespace is no prefix. Version 1: ST_AsKML(geom_or_geog, maxdecimaldigits) / version=2 / maxdecimaldigits=15 Version 2: ST_AsKML(version, geom_or_geog, maxdecimaldigits, nprefix) maxdecimaldigits=15 / nprefix=NULL Requires PostGIS be compiled with Proj support. Use to confirm you have proj support compiled in. Availability: 1.2.2 - later variants that include version param came in 1.3.2 Enhanced: 2.0.0 - Add prefix namespace. Default is no prefix Changed: 2.0.0 - uses default args and supports named args AsKML output will not work with geometries that do not have an SRID &Z_support; Examples 0,0 0,1 1,1 1,0 0,0 --3d linestring SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3, 4 5 6)'); 1,2,3 4,5,6 ]]> See Also , ST_AsSVG Returns a Geometry in SVG path data given a geometry or geography object. text ST_AsSVG geometry geom integer rel=0 integer maxdecimaldigits=15 text ST_AsSVG geography geog integer rel=0 integer maxdecimaldigits=15 Description Return the geometry as Scalar Vector Graphics (SVG) path data. Use 1 as second argument to have the path data implemented in terms of relative moves, the default (or 0) uses absolute moves. Third argument may be used to reduce the maximum number of decimal digits used in output (defaults to 15). Point geometries will be rendered as cx/cy when 'rel' arg is 0, x/y when 'rel' is 1. Multipoint geometries are delimited by commas (","), GeometryCollection geometries are delimited by semicolons (";"). Availability: 1.2.2. Availability: 1.4.0 Changed in PostGIS 1.4.0 to include L command in absolute path to conform to http://www.w3.org/TR/SVG/paths.html#PathDataBNF Changed: 2.0.0 to use default args and support named args Examples SELECT ST_AsSVG(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)); st_assvg -------- M 0 0 L 0 -1 1 -1 1 0 Z ST_AsX3D Returns a Geometry in X3D xml node element format: ISO-IEC-19776-1.2-X3DEncodings-XML text ST_AsX3D geometry g1 integer maxdecimaldigits=15 integer options=0 Description Returns a geometry as an X3D xml formatted node element http://web3d.org/x3d/specifications/ISO-IEC-19776-1.2-X3DEncodings-XML/Part01/EncodingOfNodes.html. If maxdecimaldigits (precision) is not specified then defaults to 15. There are various options for translating PostGIS geometries to X3D since X3D geometry types don't map directly to PostGIS geometry types and some newer X3D types that might be better mappings we ahve avoided since most rendering tools don't currently support them. These are the mappings we have settled on. Feel free to post a bug ticket if you have thoughts on the idea or ways we can allow people to denote their preferred mappings. Below is how we currently map PostGIS 2D/3D types to X3D types PostGIS Type 2D X3D Type 3D X3D Type LINESTRING not yet implemented - will be PolyLine2D LineSet MULTILINESTRING not yet implemented - will be PolyLine2D IndexedLineSet MULTIPOINT Polypoint2D PointSet POINT outputs the space delimited coordinates outputs the space delimited coordinates (MULTI) POLYGON, POLYHEDRALSURFACE Invalid X3D markup IndexedFaceSet (inner rings currently output as another faceset) TIN TriangleSet2D (Not Yet Implemented) IndexedTriangleSet 2D geometry support not yet complete. Inner rings currently just drawn as separate polygons. We are working on these. Lots of advancements happening in 3D space particularly with X3D Integration with HTML5 There is also a nice open source X3D viewer you can use to view rendered geometries. Free Wrl http://freewrl.sourceforge.net/ binaries available for Mac, Linux, and Windows. Use the FreeWRL_Launcher packaged to view the geometries. Availability: 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML &Z_support; &P_support; &T_support; Example: Create a fully functional X3D document - This will generate a cube that is viewable in FreeWrl and other X3D viewers. ' || ST_AsX3D( ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) || ' ' As x3ddoc;]]> x3ddoc -------- ]]> Example: An Octagon elevated 3 Units and decimal precision of 6 SELECT ST_AsX3D( ST_Translate( ST_Force_3d( ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0, 3) ,6) As x3dfrag; x3dfrag -------- ]]> Example: TIN x3dfrag -------- ]]> Example: Closed multilinestring (the boundary of a polygon with holes) x3dfrag -------- ]]> ST_GeoHash Return a GeoHash representation of the geometry. text ST_GeoHash geometry geom integer maxchars=full_precision_of_point Description Return a GeoHash representation (http://en.wikipedia.org/wiki/Geohash) of the geometry. A GeoHash encodes a point into a text form that is sortable and searchable based on prefixing. A shorter GeoHash is a less precise representation of a point. It can also be thought of as a box, that contains the actual point. If no maxchars is specficified ST_GeoHash returns a GeoHash based on full precision of the input geometry type. Points return a GeoHash with 20 characters of precision (about enough to hold the full double precision of the input). Other types return a GeoHash with a variable amount of precision, based on the size of the feature. Larger features are represented with less precision, smaller features with more precision. The idea is that the box implied by the GeoHash will always contain the input feature. If maxchars is specified ST_GeoHash returns a GeoHash with at most that many characters so a possibly lower precision representation of the input geometry. For non-points, the starting point of the calculation is the center of the bounding box of the geometry. Availability: 1.4.0 ST_GeoHash will not work with geometries that are not in geographic (lon/lat) coordinates. &curve_support; Examples See Also ST_AsText Return the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata. text ST_AsText geometry g1 text ST_AsText geography g1 Description Returns the Well-Known Text representation of the geometry/geography. The WKT spec does not include the SRID. To get the SRID as part of the data, use the non-standard PostGIS WKT format does not maintain precision so to prevent floating truncation, use ST_AsBinary or ST_AsEWKB format for transport. ST_AsText is the reverse of . Use to convert to a postgis geometry from ST_AsText representation. Availability: 1.5 - support for geography was introduced. &sfs_compliant; s2.1.1.1 &sqlmm_compliant; SQL-MM 3: 5.1.25 &curve_support; Examples SELECT ST_AsText('01030000000100000005000000000000000000 000000000000000000000000000000000000000000000000 F03F000000000000F03F000000000000F03F000000000000F03 F000000000000000000000000000000000000000000000000'); st_astext -------------------------------- POLYGON((0 0,0 1,1 1,1 0,0 0)) (1 row) See Also , , , ST_AsLatLonText Return the Degrees, Minutes, Seconds representation of the given point. text ST_AsLatLonText geometry pt text ST_AsLatLonText geometry pt text format Description Returns the Degrees, Minutes, Seconds representation of the point. It is assumed the point is in a lat/lon projection. The X (lon) and Y (lat) coordinates are normalized in the output to the "normal" range (-180 to +180 for lon, -90 to +90 for lat). The text parameter is a format string containing the format for the resulting text, similar to a date format string. Valid tokens are "D" for degrees, "M" for minutes, "S" for seconds, and "C" for cardinal direction (NSEW). DMS tokens may be repeated to indicate desired width and precision ("SSS.SSSS" means " 1.0023"). "M", "S", and "C" are optional. If "C" is omitted, degrees are shown with a "-" sign if south or west. If "S" is omitted, minutes will be shown as decimal with as many digits of precision as you specify. If "M" is also omitted, degrees are shown as decimal with as many digits precision as you specify. If the format string is omitted (or zero-length) a default format will be used. Availability: 2.0 Examples Default format. SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)')); st_aslatlontext ---------------------------- 2°19'29.928"S 3°14'3.243"W Providing a format (same as the default). SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"C')); st_aslatlontext ---------------------------- 2°19'29.928"S 3°14'3.243"W Characters other than D, M, S, C and . are just passed through. SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M minutes, S seconds to the C')); st_aslatlontext -------------------------------------------------------------------------------------- 2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds to the W Signed degrees instead of cardinal directions. SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"')); st_aslatlontext ---------------------------- -2°19'29.928" -3°14'3.243" Decimal degrees. SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C')); st_aslatlontext ----------------------------------- 2.3250 degrees S 3.2342 degrees W Excessively large values are normalized. SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)')); st_aslatlontext ------------------------------- 72°19'29.928"S 57°45'56.757"E postgis-2.1.2+dfsg.orig/doc/reference_editor.xml0000644000000000000000000021137212167036060020362 0ustar rootroot Geometry Editors ST_AddPoint Adds a point to a LineString before point <position> (0-based index). geometry ST_AddPoint geometry linestring geometry point geometry ST_AddPoint geometry linestring geometry point integer position Description Adds a point to a LineString before point <position> (0-based index). Third parameter can be omitted or set to -1 for appending. Availability: 1.1.0 &Z_support; Examples --guarantee all linestrings in a table are closed --by adding the start point of each linestring to the end of the line string --only for those that are not closed UPDATE sometable SET the_geom = ST_AddPoint(the_geom, ST_StartPoint(the_geom)) FROM sometable WHERE ST_IsClosed(the_geom) = false; --Adding point to a 3-d line SELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT('LINESTRING(0 0 1, 1 1 1)'), ST_MakePoint(1, 2, 3))); --result st_asewkt ---------- LINESTRING(0 0 1,1 1 1,1 2 3) See Also , ST_Affine Applies a 3d affine transformation to the geometry to do things like translate, rotate, scale in one step. geometry ST_Affine geometry geomA float a float b float c float d float e float f float g float h float i float xoff float yoff float zoff geometry ST_Affine geometry geomA float a float b float d float e float xoff float yoff Description Applies a 3d affine transformation to the geometry to do things like translate, rotate, scale in one step. Version 1: The call ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff) represents the transformation matrix / a b c xoff \ | d e f yoff | | g h i zoff | \ 0 0 0 1 / and the vertices are transformed as follows: x' = a*x + b*y + c*z + xoff y' = d*x + e*y + f*z + yoff z' = g*x + h*y + i*z + zoff All of the translate / scale functions below are expressed via such an affine transformation. Version 2: Applies a 2d affine transformation to the geometry. The call ST_Affine(geom, a, b, d, e, xoff, yoff) represents the transformation matrix / a b 0 xoff \ / a b xoff \ | d e 0 yoff | rsp. | d e yoff | | 0 0 1 0 | \ 0 0 1 / \ 0 0 0 1 / and the vertices are transformed as follows: x' = a*x + b*y + xoff y' = d*x + e*y + yoff z' = z This method is a subcase of the 3D method above. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Availability: 1.1.2. Name changed from Affine to ST_Affine in 1.2.2 Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ &P_support; &T_support; &Z_support; &curve_support; Examples --Rotate a 3d line 180 degrees about the z axis. Note this is long-hand for doing ST_Rotate(); SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0, 1, 0, 0, 0)) As using_affine, ST_AsEWKT(ST_Rotate(the_geom, pi())) As using_rotate FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo; using_affine | using_rotate -----------------------------+----------------------------- LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3) (1 row) --Rotate a 3d line 180 degrees in both the x and z axis SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0)) FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo; st_asewkt ------------------------------- LINESTRING(-1 -2 -3,-1 -4 -3) (1 row) See Also , , , ST_Force2D Forces the geometries into a "2-dimensional mode" so that all output representations will only have the X and Y coordinates. geometry ST_Force2D geometry geomA Description Forces the geometries into a "2-dimensional mode" so that all output representations will only have the X and Y coordinates. This is useful for force OGC-compliant output (since OGC only specifies 2-D geometries). Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. Changed: 2.1.0. Up to 2.0.x this was called ST_Force_2D. &curve_support; &P_support; &Z_support; Examples SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)'))); st_asewkt ------------------------------------- CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6) SELECT ST_AsEWKT(ST_Force2D('POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))')); st_asewkt ---------------------------------------------- POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1)) See Also ST_Force3D Forces the geometries into XYZ mode. This is an alias for ST_Force3DZ. geometry ST_Force3D geometry geomA Description Forces the geometries into XYZ mode. This is an alias for ST_Force_3DZ. If a geometry has no Z component, then a 0 Z coordinate is tacked on. Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. Changed: 2.1.0. Up to 2.0.x this was called ST_Force_3D. &P_support; &curve_support; &Z_support; Examples --Nothing happens to an already 3D geometry SELECT ST_AsEWKT(ST_Force3D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)'))); st_asewkt ----------------------------------------------- CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2) SELECT ST_AsEWKT(ST_Force3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))')); st_asewkt -------------------------------------------------------------- POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0)) See Also , , , ST_Force3DZ Forces the geometries into XYZ mode. This is a synonym for ST_Force3D. geometry ST_Force3DZ geometry geomA Description Forces the geometries into XYZ mode. This is a synonym for ST_Force3DZ. If a geometry has no Z component, then a 0 Z coordinate is tacked on. Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. Changed: 2.1.0. Up to 2.0.x this was called ST_Force_3DZ. &P_support; &Z_support; &curve_support; Examples --Nothing happens to an already 3D geometry SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)'))); st_asewkt ----------------------------------------------- CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2) SELECT ST_AsEWKT(ST_Force3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))')); st_asewkt -------------------------------------------------------------- POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0)) See Also , , , ST_Force3DM Forces the geometries into XYM mode. geometry ST_Force3DM geometry geomA Description Forces the geometries into XYM mode. If a geometry has no M component, then a 0 M coordinate is tacked on. If it has a Z component, then Z is removed Changed: 2.1.0. Up to 2.0.x this was called ST_Force_3DM. &curve_support; Examples --Nothing happens to an already 3D geometry SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)'))); st_asewkt ------------------------------------------------ CIRCULARSTRINGM(1 1 0,2 3 0,4 5 0,6 7 0,5 6 0) SELECT ST_AsEWKT(ST_Force3DM('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))')); st_asewkt --------------------------------------------------------------- POLYGONM((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0)) See Also , , , , ST_Force4D Forces the geometries into XYZM mode. geometry ST_Force4D geometry geomA Description Forces the geometries into XYZM mode. 0 is tacked on for missing Z and M dimensions. Changed: 2.1.0. Up to 2.0.x this was called ST_Force_4D. &Z_support; &curve_support; Examples --Nothing happens to an already 3D geometry SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)'))); st_asewkt --------------------------------------------------------- CIRCULARSTRING(1 1 2 0,2 3 2 0,4 5 2 0,6 7 2 0,5 6 2 0) SELECT ST_AsEWKT(ST_Force4D('MULTILINESTRINGM((0 0 1,0 5 2,5 0 3,0 0 4),(1 1 1,3 1 1,1 3 1,1 1 1))')); st_asewkt -------------------------------------------------------------------------------------- MULTILINESTRING((0 0 0 1,0 5 0 2,5 0 0 3,0 0 0 4),(1 1 0 1,3 1 0 1,1 3 0 1,1 1 0 1)) See Also , , , ST_ForceCollection Converts the geometry into a GEOMETRYCOLLECTION. geometry ST_ForceCollection geometry geomA Description Converts the geometry into a GEOMETRYCOLLECTION. This is useful for simplifying the WKB representation. Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. Availability: 1.2.2, prior to 1.3.4 this function will crash with Curves. This is fixed in 1.3.4+ Changed: 2.1.0. Up to 2.0.x this was called ST_Force_Collection. &P_support; &Z_support; &curve_support; Examples SELECT ST_AsEWKT(ST_ForceCollection('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))')); st_asewkt ---------------------------------------------------------------------------------- GEOMETRYCOLLECTION(POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))) SELECT ST_AsText(ST_ForceCollection('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)')); st_astext -------------------------------------------------------------------------------- GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)) (1 row) -- POLYHEDRAL example -- SELECT ST_AsEWKT(ST_ForceCollection('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)), ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)), ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)), ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)), ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)), ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))')) st_asewkt ---------------------------------------------------------------------------------- GEOMETRYCOLLECTION( POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)), POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)), POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)), POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)), POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)), POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)) ) See Also , , , , ST_ForceSFS Forces the geometries to use SFS 1.1 geometry types only. geometry ST_ForceSFS geometry geomA geometry ST_ForceSFS geometry geomA text version Description &P_support; &T_support; &curve_support; &Z_support; ST_ForceRHR Forces the orientation of the vertices in a polygon to follow the Right-Hand-Rule. boolean ST_ForceRHR geometry g Description Forces the orientation of the vertices in a polygon to follow the Right-Hand-Rule. In GIS terminology, this means that the area that is bounded by the polygon is to the right of the boundary. In particular, the exterior ring is orientated in a clockwise direction and the interior rings in a counter-clockwise direction. Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. &Z_support; &P_support; Examples SELECT ST_AsEWKT( ST_ForceRHR( 'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))' ) ); st_asewkt -------------------------------------------------------------- POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2)) (1 row) See Also , , ST_LineMerge Returns a (set of) LineString(s) formed by sewing together a MULTILINESTRING. geometry ST_LineMerge geometry amultilinestring Description Returns a (set of) LineString(s) formed by sewing together the constituent line work of a MULTILINESTRING. Only use with MULTILINESTRING/LINESTRINGs. If you feed a polygon or geometry collection into this function, it will return an empty GEOMETRYCOLLECTION Availability: 1.1.0 requires GEOS >= 2.1.0 Examples SELECT ST_AsText(ST_LineMerge( ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))') ) ); st_astext -------------------------------------------------------------------------------------------------- LINESTRING(-29 -27,-30 -29.7,-36 -31,-45 -33,-46 -32) (1 row) --If can't be merged - original MULTILINESTRING is returned SELECT ST_AsText(ST_LineMerge( ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 -33.2,-46 -32))') ) ); st_astext ---------------- MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33)) See Also , ST_CollectionExtract Given a (multi)geometry, returns a (multi)geometry consisting only of elements of the specified type. geometry ST_CollectionExtract geometry collection integer type Description Given a (multi)geometry, returns a (multi)geometry consisting only of elements of the specified type. Sub-geometries that are not the specified type are ignored. If there are no sub-geometries of the right type, an EMPTY geometry will be returned. Only points, lines and polygons are supported. Type numbers are 1 == POINT, 2 == LINESTRING, 3 == POLYGON. When a multipolygon is returned the multipolygon may have shared edges. This results in an invalid multipolygon. Availability: 1.5.0 Prior to 1.5.3 this function returned non-collection inputs untouched, no matter type. In 1.5.3 non-matching single geometries result in a NULL return. In of 2.0.0 every case of missing match results in a typed EMPTY return. Examples -- Constants: 1 == POINT, 2 == LINESTRING, 3 == POLYGON SELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))'),1)); st_astext --------------- MULTIPOINT(0 0) (1 row) SELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))'),2)); st_astext --------------- MULTILINESTRING((0 0, 1 1), (2 2, 3 3)) (1 row) See Also , , ST_CollectionHomogenize Given a geometry collection, returns the "simplest" representation of the contents. geometry ST_CollectionHomogenize geometry collection Description Given a geometry collection, returns the "simplest" representation of the contents. Singletons will be returned as singletons. Collections that are homogeneous will be returned as the appropriate multi-type. When a multipolygon is returned the multipolygon may have shared edges. This results in an invalid multipolygon. Availability: 2.0.0 Examples SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))')); st_astext ------------ POINT(0 0) (1 row) SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))')); st_astext --------------------- MULTIPOINT(0 0,1 1) (1 row) See Also , ST_Multi Returns the geometry as a MULTI* geometry. If the geometry is already a MULTI*, it is returned unchanged. geometry ST_Multi geometry g1 Description Returns the geometry as a MULTI* geometry. If the geometry is already a MULTI*, it is returned unchanged. Examples SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))'))); st_astext -------------------------------------------------------------------------------------------------- MULTIPOLYGON(((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416, 743238 2967416))) (1 row) See Also ST_RemovePoint Removes point from a linestring. Offset is 0-based. geometry ST_RemovePoint geometry linestring integer offset Description Removes point from a linestring. Useful for turning a closed ring into an open line string Availability: 1.1.0 &Z_support; Examples --guarantee no LINESTRINGS are closed --by removing the end point. The below assumes the_geom is of type LINESTRING UPDATE sometable SET the_geom = ST_RemovePoint(the_geom, ST_NPoints(the_geom) - 1) FROM sometable WHERE ST_IsClosed(the_geom) = true; See Also , , ST_Reverse Returns the geometry with vertex order reversed. geometry ST_Reverse geometry g1 Description Can be used on any geometry and reverses the order of the vertexes. Examples SELECT ST_AsText(the_geom) as line, ST_AsText(ST_Reverse(the_geom)) As reverseline FROM (SELECT ST_MakeLine(ST_MakePoint(1,2), ST_MakePoint(1,10)) As the_geom) as foo; --result line | reverseline ---------------------+---------------------- LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2) ST_Rotate Rotate a geometry rotRadians counter-clockwise about an origin. geometry ST_Rotate geometry geomA float rotRadians geometry ST_Rotate geometry geomA float rotRadians float x0 float y0 geometry ST_Rotate geometry geomA float rotRadians geometry pointOrigin Description Rotates geometry rotRadians counter-clockwise about the origin. The rotation origin can be specified either as a POINT geometry, or as x and y coordinates. If the origin is not specified, the geometry is rotated about POINT(0 0). Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Enhanced: 2.0.0 additional parameters for specifying the origin of rotation were added. Availability: 1.1.2. Name changed from Rotate to ST_Rotate in 1.2.2 &Z_support; &curve_support; &P_support; &T_support; Examples --Rotate 180 degrees SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi())); st_asewkt --------------------------------------- LINESTRING(-50 -160,-50 -50,-100 -50) (1 row) --Rotate 30 degrees counter-clockwise at x=50, y=160 SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()/6, 50, 160)); st_asewkt --------------------------------------------------------------------------- LINESTRING(50 160,105 64.7372055837117,148.301270189222 89.7372055837117) (1 row) --Rotate 60 degrees clockwise from centroid SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom))) FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry AS geom) AS foo; st_asewkt -------------------------------------------------------------- LINESTRING(116.4225 130.6721,21.1597 75.6721,46.1597 32.3708) (1 row) See Also , , , ST_RotateX Rotate a geometry rotRadians about the X axis. geometry ST_RotateX geometry geomA float rotRadians Description Rotate a geometry geomA - rotRadians about the X axis. ST_RotateX(geomA, rotRadians) is short-hand for ST_Affine(geomA, 1, 0, 0, 0, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos(rotRadians), 0, 0, 0). Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Availability: 1.1.2. Name changed from RotateX to ST_RotateX in 1.2.2 &P_support; &Z_support; &T_support; Examples --Rotate a line 90 degrees along x-axis SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2)); st_asewkt --------------------------- LINESTRING(1 -3 2,1 -1 1) See Also , , ST_RotateY Rotate a geometry rotRadians about the Y axis. geometry ST_RotateY geometry geomA float rotRadians Description Rotate a geometry geomA - rotRadians about the y axis. ST_RotateY(geomA, rotRadians) is short-hand for ST_Affine(geomA, cos(rotRadians), 0, sin(rotRadians), 0, 1, 0, -sin(rotRadians), 0, cos(rotRadians), 0, 0, 0). Availability: 1.1.2. Name changed from RotateY to ST_RotateY in 1.2.2 Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &P_support; &Z_support; &T_support; Examples --Rotate a line 90 degrees along y-axis SELECT ST_AsEWKT(ST_RotateY(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2)); st_asewkt --------------------------- LINESTRING(3 2 -1,1 1 -1) See Also , , ST_RotateZ Rotate a geometry rotRadians about the Z axis. geometry ST_RotateZ geometry geomA float rotRadians Description Rotate a geometry geomA - rotRadians about the Z axis. This is a synonym for ST_Rotate ST_RotateZ(geomA, rotRadians) is short-hand for SELECT ST_Affine(geomA, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos(rotRadians), 0, 0, 0, 1, 0, 0, 0). Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. Availability: 1.1.2. Name changed from RotateZ to ST_RotateZ in 1.2.2 Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ &Z_support; &curve_support; &P_support; &T_support; Examples --Rotate a line 90 degrees along z-axis SELECT ST_AsEWKT(ST_RotateZ(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2)); st_asewkt --------------------------- LINESTRING(-2 1 3,-1 1 1) --Rotate a curved circle around z-axis SELECT ST_AsEWKT(ST_RotateZ(the_geom, pi()/2)) FROM (SELECT ST_LineToCurve(ST_Buffer(ST_GeomFromText('POINT(234 567)'), 3)) As the_geom) As foo; st_asewkt ---------------------------------------------------------------------------------------------------------------------------- CURVEPOLYGON(CIRCULARSTRING(-567 237,-564.87867965644 236.12132034356,-564 234,-569.12132034356 231.87867965644,-567 237)) See Also , , ST_Scale Scales the geometry to a new size by multiplying the ordinates with the parameters. Ie: ST_Scale(geom, Xfactor, Yfactor, Zfactor). geometry ST_Scale geometry geomA float XFactor float YFactor float ZFactor geometry ST_Scale geometry geomA float XFactor float YFactor Description Scales the geometry to a new size by multiplying the ordinates with the parameters. Ie: ST_Scale(geom, Xfactor, Yfactor, Zfactor). ST_Scale(geomA, XFactor, YFactor, ZFactor) is short-hand for ST_Affine(geomA, XFactor, 0, 0, 0, YFactor, 0, 0, 0, ZFactor, 0, 0, 0). Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ Availability: 1.1.0. Enhanced: 2.0.0 support for Polyhedral surfaces, Triangles and TIN was introduced. &P_support; &Z_support; &curve_support; &T_support; Examples --Version 1: scale X, Y, Z SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75, 0.8)); st_asewkt -------------------------------------- LINESTRING(0.5 1.5 2.4,0.5 0.75 0.8) --Version 2: Scale X Y SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75)); st_asewkt ---------------------------------- LINESTRING(0.5 1.5 3,0.5 0.75 1) See Also , ST_Segmentize Return a modified geometry/geography having no segment longer than the given distance. Distance computation is performed in 2d only. For geometry, length units are in units of spatial reference. For geography, units are in meters. geometry ST_Segmentize geometry geom float max_segment_length geometry ST_Segmentize geography geog float max_segment_length Description Returns a modified geometry having no segment longer than the given max_segment_length. Distance computation is performed in 2d only. For geometry, length units are in units of spatial reference. For geography, units are in meters. Availability: 1.2.2 Enhanced: 2.1.0 support for geography was introduced. Changed: 2.1.0 As a result of the introduction of geography support: The construct SELECT ST_Segmentize('LINESTRING(1 2, 3 4)',0.5); will result in ambiguous function error. You need to have properly typed object e.g. a geometry/geography column, use ST_GeomFromText, ST_GeogFromText or SELECT ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry,0.5); This will only increase segments. It will not lengthen segments shorter than max length Examples SELECT ST_AsText(ST_Segmentize( ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))') ,5) ); st_astext -------------------------------------------------------------------------------------------------- MULTILINESTRING((-29 -27,-30 -29.7,-34.886615700134 -30.758766735029,-36 -31, -40.8809353009198 -32.0846522890933,-45 -33), (-45 -33,-46 -32)) (1 row) SELECT ST_AsText(ST_Segmentize(ST_GeomFromText('POLYGON((-29 28, -30 40, -29 28))'),10)); st_astext ----------------------- POLYGON((-29 28,-29.8304547985374 37.9654575824488,-30 40,-29.1695452014626 30.0345424175512,-29 28)) (1 row) See Also ST_SetPoint Replace point N of linestring with given point. Index is 0-based. geometry ST_SetPoint geometry linestring integer zerobasedposition geometry point Description Replace point N of linestring with given point. Index is 0-based. This is especially useful in triggers when trying to maintain relationship of joints when one vertex moves. Availability: 1.1.0 &Z_support; Examples --Change first point in line string from -1 3 to -1 1 SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)')); st_astext ----------------------- LINESTRING(-1 1,-1 3) ---Change last point in a line string (lets play with 3d linestring this time) SELECT ST_AsEWKT(ST_SetPoint(foo.the_geom, ST_NumPoints(foo.the_geom) - 1, ST_GeomFromEWKT('POINT(-1 1 3)'))) FROM (SELECT ST_GeomFromEWKT('LINESTRING(-1 2 3,-1 3 4, 5 6 7)') As the_geom) As foo; st_asewkt ----------------------- LINESTRING(-1 2 3,-1 3 4,-1 1 3) See Also , , , , ST_SetSRID Sets the SRID on a geometry to a particular integer value. geometry ST_SetSRID geometry geom integer srid Description Sets the SRID on a geometry to a particular integer value. Useful in constructing bounding boxes for queries. This function does not transform the geometry coordinates in any way - it simply sets the meta data defining the spatial reference system the geometry is assumed to be in. Use if you want to transform the geometry into a new projection. &sfs_compliant; &curve_support; Examples -- Mark a point as WGS 84 long lat -- SELECT ST_SetSRID(ST_Point(-123.365556, 48.428611),4326) As wgs84long_lat; -- the ewkt representation (wrap with ST_AsEWKT) - SRID=4326;POINT(-123.365556 48.428611) -- Mark a point as WGS 84 long lat and then transform to web mercator (Spherical Mercator) -- SELECT ST_Transform(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326),3785) As spere_merc; -- the ewkt representation (wrap with ST_AsEWKT) - SRID=3785;POINT(-13732990.8753491 6178458.96425423) See Also , , , , , ST_SnapToGrid Snap all points of the input geometry to a regular grid. geometry ST_SnapToGrid geometry geomA float originX float originY float sizeX float sizeY geometry ST_SnapToGrid geometry geomA float sizeX float sizeY geometry ST_SnapToGrid geometry geomA float size geometry ST_SnapToGrid geometry geomA geometry pointOrigin float sizeX float sizeY float sizeZ float sizeM Description Variant 1,2,3: Snap all points of the input geometry to the grid defined by its origin and cell size. Remove consecutive points falling on the same cell, eventually returning NULL if output points are not enough to define a geometry of the given type. Collapsed geometries in a collection are stripped from it. Useful for reducing precision. Variant 4: Introduced 1.1.0 - Snap all points of the input geometry to the grid defined by its origin (the second argument, must be a point) and cell sizes. Specify 0 as size for any dimension you don't want to snap to a grid. The returned geometry might loose its simplicity (see ). Before release 1.1.0 this function always returned a 2d geometry. Starting at 1.1.0 the returned geometry will have same dimensionality as the input one with higher dimension values untouched. Use the version taking a second geometry argument to define all grid dimensions. Availability: 1.0.0RC1 Availability: 1.1.0 - Z and M support &Z_support; Examples --Snap your geometries to a precision grid of 10^-3 UPDATE mytable SET the_geom = ST_SnapToGrid(the_geom, 0.001); SELECT ST_AsText(ST_SnapToGrid( ST_GeomFromText('LINESTRING(1.1115678 2.123, 4.111111 3.2374897, 4.11112 3.23748667)'), 0.001) ); st_astext ------------------------------------- LINESTRING(1.112 2.123,4.111 3.237) --Snap a 4d geometry SELECT ST_AsEWKT(ST_SnapToGrid( ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 2.3456 1.11111, 4.111111 3.2374897 3.1234 1.1111, -1.11111112 2.123 2.3456 1.1111112)'), ST_GeomFromEWKT('POINT(1.12 2.22 3.2 4.4444)'), 0.1, 0.1, 0.1, 0.01) ); st_asewkt ------------------------------------------------------------------------------ LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 1.1144) --With a 4d geometry - the ST_SnapToGrid(geom,size) only touches x and y coords but keeps m and z the same SELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 3 2.3456, 4.111111 3.2374897 3.1234 1.1111)'), 0.01) ); st_asewkt --------------------------------------------------------- LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111) See Also , , , , , ST_Snap Snap segments and vertices of input geometry to vertices of a reference geometry. geometry ST_Snap geometry input geometry reference float tolerance Description Snaps the vertices and segments of a geometry another Geometry's vertices. A snap distance tolerance is used to control where snapping is performed. Snapping one geometry to another can improve robustness for overlay operations by eliminating nearly-coincident edges (which cause problems during noding and intersection calculation). Too much snapping can result in invalid topology being created, so the number and location of snapped vertices is decided using heuristics to determine when it is safe to snap. This can result in some potential snaps being omitted, however. The returned geometry might loose its simplicity (see ) and validity (see ). Availability: 2.0.0 requires GEOS >= 3.3.0. Examples SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) AS polysnapped FROM (SELECT ST_GeomFromText('MULTIPOLYGON( ((26 125, 26 200, 126 200, 126 125, 26 125 ), ( 51 150, 101 150, 76 175, 51 150 )), (( 151 100, 151 200, 176 175, 151 100 )))') As poly, ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line ) As foo; polysnapped --------------------------------------------------------------------- MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125), (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100))) SELECT ST_AsText( ST_Snap(poly,line, ST_Distance(poly,line)*1.25) ) AS polysnapped FROM (SELECT ST_GeomFromText('MULTIPOLYGON( (( 26 125, 26 200, 126 200, 126 125, 26 125 ), ( 51 150, 101 150, 76 175, 51 150 )), (( 151 100, 151 200, 176 175, 151 100 )))') As poly, ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line ) As foo; polysnapped --------------------------------------------------------------------- MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107), (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100))) SELECT ST_AsText( ST_Snap(line, poly, ST_Distance(poly,line)*1.01) ) AS linesnapped FROM (SELECT ST_GeomFromText('MULTIPOLYGON( ((26 125, 26 200, 126 200, 126 125, 26 125), (51 150, 101 150, 76 175, 51 150 )), ((151 100, 151 200, 176 175, 151 100)))') As poly, ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line ) As foo; linesnapped ---------------------------------------- LINESTRING(5 107,26 125,54 84,101 100) SELECT ST_AsText( ST_Snap(line, poly, ST_Distance(poly,line)*1.25) ) AS linesnapped FROM (SELECT ST_GeomFromText('MULTIPOLYGON( (( 26 125, 26 200, 126 200, 126 125, 26 125 ), (51 150, 101 150, 76 175, 51 150 )), ((151 100, 151 200, 176 175, 151 100 )))') As poly, ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line ) As foo; linesnapped --------------------------------------- LINESTRING(26 125,54 84,101 100) See Also ST_Transform Returns a new geometry with its coordinates transformed to the SRID referenced by the integer parameter. geometry ST_Transform geometry g1 integer srid Description Returns a new geometry with its coordinates transformed to spatial reference system referenced by the SRID integer parameter. The destination SRID must exist in the SPATIAL_REF_SYS table. ST_Transform is often confused with ST_SetSRID(). ST_Transform actually changes the coordinates of a geometry from one spatial reference system to another, while ST_SetSRID() simply changes the SRID identifier of the geometry Requires PostGIS be compiled with Proj support. Use to confirm you have proj support compiled in. If using more than one transformation, it is useful to have a functional index on the commonly used transformations to take advantage of index usage. Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ Enhanced: 2.0.0 support for Polyhedral surfaces was introduced. &sqlmm_compliant; SQL-MM 3: 5.1.6 &curve_support; &P_support; Examples Change Mass state plane US feet geometry to WGS 84 long lat SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As wgs_geom; wgs_geom --------------------------- POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009, -71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.177684 8522251 42.3902896512902)); (1 row) --3D Circular String example SELECT ST_AsEWKT(ST_Transform(ST_GeomFromEWKT('SRID=2249;CIRCULARSTRING(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'),4326)); st_asewkt -------------------------------------------------------------------------------------- SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 1,-71.1776843766326 42.3903829478009 2, -71.1775844305465 42.3903826677917 3, -71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4) Example of creating a partial functional index. For tables where you are not sure all the geometries will be filled in, its best to use a partial index that leaves out null geometries which will both conserve space and make your index smaller and more efficient. CREATE INDEX idx_the_geom_26986_parcels ON parcels USING gist (ST_Transform(the_geom, 26986)) WHERE the_geom IS NOT NULL; Configuring transformation behaviour Sometimes coordinate transformation involving a grid-shift can fail, for example if PROJ.4 has not been built with grid-shift files or the coordinate does not lie within the range for which the grid shift is defined. By default, PostGIS will throw an error if a grid shift file is not present, but this behaviour can be configured on a per-SRID basis by altering the proj4text value within the spatial_ref_sys table. For example, the proj4text parameter +datum=NAD87 is a shorthand form for the following +nadgrids parameter: +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat The @ prefix means no error is reported if the files are not present, but if the end of the list is reached with no file having been appropriate (ie. found and overlapping) then an error is issued. If, conversely, you wanted to ensure that at least the standard files were present, but that if all files were scanned without a hit a null transformation is applied you could use: +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null The null grid shift file is a valid grid shift file covering the whole world and applying no shift. So for a complete example, if you wanted to alter PostGIS so that transformations to SRID 4267 that didn't lie within the correct range did not throw an ERROR, you would use the following: UPDATE spatial_ref_sys SET proj4text = '+proj=longlat +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null +no_defs' WHERE srid = 4267; See Also , , , ST_Translate Translates the geometry to a new location using the numeric parameters as offsets. Ie: ST_Translate(geom, X, Y) or ST_Translate(geom, X, Y,Z). geometry ST_Translate geometry g1 float deltax float deltay geometry ST_Translate geometry g1 float deltax float deltay float deltaz Description Returns a new geometry whose coordinates are translated delta x,delta y,delta z units. Units are based on the units defined in spatial reference (SRID) for this geometry. Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ Availability: 1.2.2 &Z_support; &curve_support; Examples Move a point 1 degree longitude SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-71.01 42.37)',4326),1,0)) As wgs_transgeomtxt; wgs_transgeomtxt --------------------- POINT(-70.01 42.37) Move a linestring 1 degree longitude and 1/2 degree latitude SELECT ST_AsText(ST_Translate(ST_GeomFromText('LINESTRING(-71.01 42.37,-71.11 42.38)',4326),1,0.5)) As wgs_transgeomtxt; wgs_transgeomtxt --------------------------------------- LINESTRING(-70.01 42.87,-70.11 42.88) Move a 3d point SELECT ST_AsEWKT(ST_Translate(CAST('POINT(0 0 0)' As geometry), 5, 12,3)); st_asewkt --------- POINT(5 12 3) Move a curve and a point SELECT ST_AsText(ST_Translate(ST_Collect('CURVEPOLYGON(CIRCULARSTRING(4 3,3.12 0.878,1 0,-1.121 5.1213,6 7, 8 9,4 3))','POINT(1 3)'),1,2)); st_astext ------------------------------------------------------------------------------------------------------------ GEOMETRYCOLLECTION(CURVEPOLYGON(CIRCULARSTRING(5 5,4.12 2.878,2 2,-0.121 7.1213,7 9,9 11,5 5)),POINT(2 5)) See Also , , ST_TransScale Translates the geometry using the deltaX and deltaY args, then scales it using the XFactor, YFactor args, working in 2D only. geometry ST_TransScale geometry geomA float deltaX float deltaY float XFactor float YFactor Description Translates the geometry using the deltaX and deltaY args, then scales it using the XFactor, YFactor args, working in 2D only. ST_TransScale(geomA, deltaX, deltaY, XFactor, YFactor) is short-hand for ST_Affine(geomA, XFactor, 0, 0, 0, YFactor, 0, 0, 0, 1, deltaX*XFactor, deltaY*YFactor, 0). Prior to 1.3.4, this function crashes if used with geometries that contain CURVES. This is fixed in 1.3.4+ Availability: 1.1.0. &Z_support; &curve_support; Examples SELECT ST_AsEWKT(ST_TransScale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 1, 1, 2)); st_asewkt ----------------------------- LINESTRING(1.5 6 3,1.5 4 1) --Buffer a point to get an approximation of a circle, convert to curve and then translate 1,2 and scale it 3,4 SELECT ST_AsText(ST_Transscale(ST_LineToCurve(ST_Buffer('POINT(234 567)', 3)),1,2,3,4)); st_astext ------------------------------------------------------------------------------------------------------------------------------ CURVEPOLYGON(CIRCULARSTRING(714 2276,711.363961030679 2267.51471862576,705 2264,698.636038969321 2284.48528137424,714 2276)) See Also , postgis-2.1.2+dfsg.orig/doc/bnf-wkt.txt0000644000000000000000000001126712026713620016444 0ustar rootroot ::= | | | ::= POINT [ ] ::= | | ::= LINESTRING [ ] ::= CIRCULARSTRING [ ] ::= COMPOUNDCURVE [ ] ::= ::= CURVEPOLYGON [ ] | | ::= POLYGON [ ] ::= TRIANGLE [ ] ::= | | | ::= MULTIPOINT [ ] ::= MULTICURVE [ ] | ::= MULTILINESTRING [ ] ::= MULTISURFACE [ ] | | | ::= MULTIPOLYGON [ ] ::= POLYHEDRALSURFACE [ ] ::= TIN [ ] ::= GEOMETRYCOLLECTION [ ] ::= ::= ::= ::= ::= | ::= [ ] [ ] ::= ::= ::= ::= ::= | { }... ::= | { }... ::= | { }... ::= | ::= | | ::= | | ::= CURVEPOLYGON | ::= | { }... ::= | { }... ::= | ::= | { }... ::= | { }... ::= | { }... ::= | { }... ::= | { }... ::= | { }... ::= | { }... ::= | { }... ::= EMPTY ::= ZM | Z | M ::= ( ::= ) postgis-2.1.2+dfsg.orig/doc/html/0000755000000000000000000000000012317530606015274 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/html/images/0000755000000000000000000000000012317530606016541 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/html/images/st_band02.png0000644000000000000000000044455711722777314021056 0ustar rootroot‰PNG  IHDR,,ö" IDATxœt½Y“dÙqèîg»Kl™YUÙUÕ ºÑ ‚G"9&3½Ëô¢'½ÍoÓ˜Aé•z‚43Q\F DB$ÇH¢A,Ýhtí••ëÝÎæóàq££@<´UFÞȸ÷œãîŸßwNãÿùïþÝn·ëºnµÙ Ds&js6umÊRóöÇ¿óÝïÖÎÍ'“å|Þl·C³ét³Ýæ¶-œ !¬×k£µ6çܶ-ÃÌÝ~?™L¦Ó)"cöû½ÕÇ03§ÄÌÌ €ˆòcÎ9(¥€‘ˆˆH>ËÌò#/ÈJ•Ëå¦ë@ëßúö·ß}ø bÔJ¢µÖˆ €ä2@fÞí`xþÜ-ßûÿñçŸ}Ö3o¼ß{o—Ë4›™ÙÌjbä5‘Bdï!%ÊyRCÓüèG?úÙO~û^W•©ª¤3£1¶,gËåòòr¶\¾quu~yyïêª, fÞk­­ÖÜ÷œì÷û¶ï—Ë%jýäÉ“²ªrÎUUM§SŸRÓ4Zë‰s†Y¬ÖëŸ}òɳçÏA©¢(ˆHi= 2E‘Bh»ªº®‹Þûf· !¥ˆ(xßu]èû¶m­1eYzïcŒÎ9cÌízíœÓƤ”BÌ윳֦”d2G¤µVD1 BDV Ð¥*•€Ž“Î )@Êù‹Ù'8yçËK3b_Ç+9FfVJ9ç´Ö9gPJÑxÁ—^D$'"k­1F¾]k'7É̳¼c켆äúœ³bf$BDy:ù,æLÐl6~ñ‹ÇAŒóùüúåK$B"ÈÌ J!¢F€®m½÷}×íC`k±(È9—•êºn×¶¤µuskšý~Ÿ¼!@×ùÛ¾ßn·Ì¬µŽÌí08™ "&:Œ1ÇQ8DŒ1ÑqÔeeØQ®ùÕq”8Î#²÷Äl³Z @€ž¹DÔZï÷{@¬ëšv}?+ŠÈìC@"Ŭ„àf³ý/~ÑívËå_üñó¦¹ÿþû{ÄY]“1Q)8ÆÎ)„A©ÄŒD¨kÖNïÜ¢2f±\>xûí7ßzël¹$­ëªº8;‹1bJÛa@ï½÷±ë1ç›]Þ»wyïÞÅååÅ;g‹Åæö6…жínµ29·ûý¤(@)¢n8cL³Ùl›¦iš‹‹ fN}¿oš›ëkï=i¼Ç‰È‡°ošœ3)•BÈ1Á)g ÄbL1jçlY²RífÓƒA,Š¢´Vr‡Ò:„@ZƒÖIò b`Ž)iDC”S†a2™HQ‚”$µ3@ ÁY{XîR˜9¥$ ô4™"QFTˆy B 9F$æÂñ’IGD…HD˜3"¢1D¤äëR !(¥êª²ZÇsÎZ뜒`(ÈÌ9ç”’$îBJÉ{ßu¼BØo6)%Y¥”sŒ±Ûïû¾×Z!¢.Š”RHi2Ÿ_œŸï¤N2ƒR ÀÖ"!´­wÎi š”ÒZ j"cŒ1öm»zõª˜Ï€ˆ˜ÈjmŒ1D—Ëå0 Ƙ¹ÛíŒRµs„è½×Z1BÎEQ€R  ”šÍfŒ¨”Bf)ÜGtñk#ð4SJG¢äÇvúh”s!àáD´]¯èùj…J=¸ºrMßOŠ™cÛjcPköÞ§äœÃ”44M‚- * †ÿùçþý?üÃëO?}úøñ7¿õ­;o½õ,ƒ8l½Ÿ99SÎÀLˆZk=Vòn8¥²,µµ®(ú¾÷Ì“å’êúêþý>úèâò2¥D>„˜óÐ÷!¥ÍÍMA´_­’s1¥¶ï]Uõ}Ï̳Ù,ƸY­RJ¿X­¼÷ι”Òíz-ð~·ÛYcœsÎ9¥õd2a€”’`E`A ÀÇèS*œë†¡ A!–uíŠ"ÅSRDÚZ%‡ˆÆhc"@ˆÑX[XBÈ)¡1ÖZ]³Òšˆ F`¥€‰ú¾'"¥ž€IR*½Ž-õ”bf:Ÿ, s¼ôµÂ*á¤1+¥”RZfRêûœ1 1¤”bä”RŒˆ˜$_{ï‡aH)Uu½Ýlú¾—X%¢¶ibŒi|ì½a¿^7M3Íš®K)¡µÞ{Ðú!bñàç|ŠÔËõˆã˜ kg“É|:í&U•YÚD5&Ç‚nºÎÇè½wum–KX,°®I©§ë5)õö›o.–Ë>ø`{}Ý®×VkÅ<ô=ز̌Ji¥” É£³¶°v^Þû‚RÊ 0"ÆŒˆJ)I´x‡lˆ<¾’µVÀ€&šÍfÆï½)KIHá}ÛnooÛ¶E¥ÚýþÅÍM³ÝÞ¹¼¼{uÕ{_9¦(rö)QÈyð¾D )•e ]Þÿàûßÿ“?þãÏþéŸ^={¶¼woyç΋Õ* ¶ÃPxï»ÎÌfeU­W+ȹ®ª~¿¯ŠÂ㙳µR]Œ·ˆúêʼýÞ{ïíkÞ|óîÅ úÍ&†Ðí÷¶Û~·+‹BÖE#9x¿/ÊòúåKBv;H©¯kRêÕííÍnGÖ¶)‘s$Í@åœBÌû¶í†ÁZ+˜µÖ1‹tÎ9gbvˆ”’fNˆ)gÕ` 3ä Z'$REˆƒ÷ ŒI!HPšH9 Kx’[É«µTVÊ:g´–uŸ¼— )ý †¹ÔzÕ4hmyv–#3æÌ}oÇØ÷}@´Ó)Ef6JqŒuU- Ji³ÙÄ®ÓÖvmkqDÙûÝvÛ4 !Ú¢è½)¥t€±!ƾï½÷Ín×õ}! bº½]çSBkMQ1aRJÍv‹RÐrÖÎééë:ƒÌZ°.³ÊYÐ_ð±‰ñl>/¦S¥õf³™L§`ŒtË|ÒÓ2³Þî÷CÛý>1K}Üí÷¶ª.ïÜI9Oëúýwß=VEKDʘ$S¥”Ô"-­BÎR©Žìøet’ Ý”4¿¦>Y­3!Jšoú¾_¯CÑ{ï}×¶B!L§Óªªæ‹Eöþ{÷\]ecºÍæq×Ù¢8¯*"‚ ¥À!°R  ï{šNu]ƒ1ƒ÷.¥ÉÅÅïÿëý¿ý«õgò'ëÝn¾\6»Ãd2!瘹,ËBå\YUûõº®ë¡ëž<þöýû`ŒÜõY]_.‹º¾ÿðáD©a½~¼^ÃÐ7ÍÐuÝn×îvggž¹kÛ~¿Gæè} Ak½Ûnµ”³6¦ϼÚlÚëÉRB­•s@š¡”ˆ•Â#.""¡¤]–çø:—c›¤F¸xZ¦@)f–xFÄCÍQJhDD¥$ÐcŒò‘²,C1Æ¡ï""Zcl]÷}ÿÅŸ=yõ]g´ve‰Ìƒ÷9çª(LQ¤¶ÅœÑ9ZkcX)fn·[CÔ§ôªë8‰piY÷)Èï‡aÈ9ãvÛ7MA¨¦˜R¡ëºÁ{k­¼ÉÒϧ„ˆqQ– HpÄeÇ6%IÏ’3æ,Ô3‹¡€2¥Tˆ«#E1N˲$¢˜3¿‡öõææ†™×m‹e‰ˆUUaŒÆ¹º,wû½F|xÿ>¦DÌSâÓy»ÞcʼÆ¿à—ŽD LüñÍÓÕðÚr)…œ•R…µ!Æv`¶X”U%PDkíŠb2™”Ö*ijªšÎf`LDTe™rM».yÏÞ3‘$peYM& àd9ÿöïþ.ä 1þÞ¿ù7ÿ×øŸ<~¼eÞn·Í0ìû¾8;C¢Ýv«bŒ=úà½÷Îçs‚˜XË9‡TוD1ç°ZE¥ž?{Öl6CÛ¦9„Ü÷±ïéùsŽÑ7M¡tN!‚÷J©É~o¬E­MU)Ä”Rf¶UÆ0;§Š‚”2vÄ$°p$y\¶ã8¼B`Œpè”;^yœ¯ÃŸÊÙX‹ÌBáR‡˜3#*­•RÌ,a@Ji­CΠ”5FÒqJ)fЙ(ËæÉJ9"«T!ï÷JkM9kæ#¦¤‘FWšð^YË}¿†è=dï½÷Í~ß4Mh[¥”V*çì».†ÀÞgáœÆ%bŒ1ºÉ„bÔ#ó™™‘R*{ÂNÅ”€YºJNIX ¡òsYVxJù¤y&"8&µ±ÿ4Æ”e »ÝΔ寶f̬7›M5Ÿ÷Ëù|~væœCk•s󤮗ggc×¶¡ï9Fáß@z\éǘYˆþ4ª Ì2W‡üq¯gâcÞ=½­Óß’l†”P©³ËËûWW÷ïßg溮ëªRÖ~ñ‡bfð>è¢ç4ba·ÙLg3­T"RÎ1Àœ«¢è2€°e Âtì÷Àüj½¶Ó©B|µZ݆­-­Ýl6È|¾\îw;§Ôîö¶Gìw;ÞïçumÐût{ëÛ6ív«/Ôf³kšn·ƒœ5ål*l‹è¼wJ-Œ1Zg"ƒÖö}ßÄH9»¢ÈZÆÄº„êP µV#0§Ik!T@ÂïH”ÁØX!"0c΀Ì4¡¨2Ç `€Ì,kH(.9FÐ:¥9ÈK…X?tqD`­­Êr™µÖÖZ@a|}áˆt^+†ˆÎ9N‰½ÏÞï+­]mÛr—ز$¢Æ{é“ÛíVH² ˜BÈ9+ÄÍvÛívJ)YñC߇ ©ÕRɵ&¥œRÖ¹$ÔŽÜ?€ô·H”B€ñSJœ3ä,=”fF’•cŠ1Ês1ÀñÙãC/³1¦®k¥TÓ4cø×!íctJ™ºž,—³å²õ^`†ïºwß}÷£÷ßÏ16ëuì{È…×Ùí$¦_)ÿÐZþ˜eñD{8æƒ_½¡/~$²Æ$"D,ëúòòòáÇ÷îÞÕÆpÎÒà³ðH$b@®*­Ôq‘RSk9Ôsc€ˆ†*€â$å¶=¬•Éäÿý£?Úu]¥õOŸ8"TJ¨¯ÃPK­“~ï ‚xõ$2OGGéõt^€( CQ–Šˆ™¥2cH)~ZbR)&*¬­ªj‚ØÃ!ð”†aø5³ŒBÜ„m;l·y·‹ÆôðÝïÛ®‹9;ç iš®ë8¥v¿ÀˆÖÚ0 ûý>¥d¬½X.ã0ä” ô=°Ð¶’£™™9ŒKQ¾ó‰Î‰ˆ¢. @ZfΈ*g b¡L™‘RÊ!„¾öûÙrID4.霳Ô'H %"R2ÆL&“¢(úaÊóס¶61‹…L†´Öõ|¾ošõzMÌ—çç•1·Ã@!È÷¡R„˜E´ñ^‚G嘕<ëØK¨ã£"&‘þäIöœ¢¦Ó8d¥LUef­Ôù½{ïøár¹Dæ®ë$ÛbGh¢6ÆLT0@Ÿ3”’«¼G¥B×5¯^-//ѹÊZˆRfˆB H ÖëÝjõã¿ÿû篚æÉv›¬N§·Ãàû>Ã0 O_½zûáÃo~ík*%Ppו¥qØív?ùÉË/Îf³j>?¯ªj>¯« c× B­£÷VkˆKcbŒƒµ:§Ô°ÛÙÍ&y¯B(˜MJ©iªóó’H#lG&’H`D’ÀcffE£ "œ‘¤pÀ”Ž“£zöp,¤’VÙ8"­¥d´6ÆÉZKýÑZ k‰ â0 Ù{SŒ’—A–HÄ < †¡ïMUUDÝ0<ýÙÏÖ··Òö1zæ @Æ`΢ æœ­s)FMdˆÈÚ^)(­ Þ#³BTcIÇÂaQ‚jÌþVˆ¢ñÁ¥%æ”Dlpàe%‹,&â0ä<ôý~¿?»¸ ¥$Þd<óH|h¥b!x/ãÐ÷ý¥µycògÐEQô)•uÓ0,/.ª¢È)•E1ŸN1FÌc¤#zÉù€FÆŒr $cìøã±cäöEšÆÓžð4A~‘¤‰2b(&“ó»wË¥pîCŒä½µ•"¥Œ1ˆ9‡ c @M‚ܼ‡œan?ûì‡?üá[o½õÛÿò_"´-´ºœûäoþæïþæo~þ“Ÿ|ÿþèUßkçÎïÝŠâæÕ«V©o}ç;¥R%–åÿñïÿý»¢üñ®ƒa€a`³ùå_ýÕú'?©µ¾s~>%ZN§Óé4ÆØ"€ÓZ)%Þ†AÚÝÅÂ9ÇÌ.%Û4ʘMŒ¯š¦ï:*Š "2ÞGctJ*ç ¸CkA„ˆ¯c™˜c÷ €!œš IjTŸej¬sF(ií¬iJT{J xßö} a³ÙäñK…u“†µVXtý"8š1D­†ö¯^=ýôScL5Ÿë²çX©Ø¶!Æ”R”ÄèCà”ŒÖ,¾ŸbŒŒÈˆyÌþ˜’˜@‹ð¤]'`-I«©$IÄœ3E¼‘ÈÍ1Ê£‘ÖRèûv¿Ï2¤9sÎt2 ‡,0‚a­µ³Öh-þ¡/E hkíÎ{ç\ˆqVUD´Z­Š²üío}ë›ßøFáÜ~¿?d¯É`ÔÐT©“—1æWçqÖ¥Jù>Å¿Š€”ªêz:›I~BÄùlv¼4åŒÌÒiĘ’RʰôÜÃÀÀ9CÛó?þàøð•÷Þ+b¼¸{÷ñçŸç®ë÷û›››þð‡ó_þå_îw;RjHiáÜÍ0t/_š;wœŒ£1ßþæ7›ëëŸ Ã{úÝÎ*Þ‡Û[!sº½½þùÏéü¼ÖºžÏSÛDûý~ß4J)'ìW]‹hõd2_.­s%³º½ÃP¼xÑ®×ýõµàª*‹†(gHIzo"’ìþÅt /::¼à˜4O]cB<޹üª( ‘ÝÔȾÈì3"zïƒ÷V)Pja¿ß—ÎLN9'ï÷Ûmß÷¬iís+\×uJ©³³³êüd±þ "%¥BŒ1g 0)ŠIQ €ˆ1š¢ÈDÂfY­•h})i‘¬†r–»M äœs&"ÔúÊ(guÔTrÎ)É’GpŒ Ù ñ º1«éò0‚݀9†0t] ADcÁçÇ?ã½éBk]–åÙÙÙÝ»wÅf¯Çê!J13ç|ŒË7ÞÐeùøÅ‹Ùdò¿|ûÛßùú× ¢aµBfJI 2 ÿ)–¥œ âŸ$]8ÌШ@ȯ2ÈC‘Q ”B1øÅµ1(Š¢ÖeYrQäºþɧŸ®Úö÷~÷w €!%{t`mx1*•\×÷ 8—æs9x½þËï}ïæã·Ÿ|ò§ßÿþ`FTmcÜÉÍâð²¶œN©(Îf3SUóÙ,2Ÿ-ݹóîÇÿå§?]7W*WXûã¿û»YQ@ßß³V¤ôÎw¿ûòÿئôÕÉÄ¥Tö=7 4f6eYÔuÜïû¾'€u‹åò•ÖÊÚWOŸV!üøG?zöòåüìlzqÁEñ*„Ýj•˜@Q×*gdvvBÎÊ]Ã0ز„œ½÷â•¶üà B4Æ0¢÷Þ u-¢‚ø(D"#¢²,•R1ÆÌlŒI)uû½6¦4fÓ÷4 mÛîS*´îv»hÌv¿÷Þ'DÏLÖQ¿ß×/Ÿ>Ýî÷ådÒ¦dŠb:™ì»NT»Rke w %(DTeYO§g——«õºÙï»aÈ11*ç”1$¦«Ñq…!‘‘)i}­Ö§+0çsvJ×'JÏ¢”°»QÒ–1ÌìÄ)•@1cΘxˆÄ$ä1ŒXEUUNkÎyº\vÛmH ˆ†´µ€ ¨Ô®ë\Jí~Û¶½½uó9*EZ bd­ è>¥¨5X‹Ö®V«Ò¹WWWwîE‘ú>ÆH¯‡¯$T+Ûi;2.iL §0I*¤df>XaÆ–Q3„f¢!„¦i˜y±X;b‰/!Ø×’ë1ýó.ÉÍt]D­sQ”U¥b,ª*ö}Øl2€Øm±ªŠÉÄÔõù½{hí|±¨‹åÙ™-Ëårùõ>¸{~N)=ú䓟þèG_ÿ}aj­ßí°ë ,¡,ÁÚóùü««E]“söþ}{uÕw]xõªÛnSßÇö77Éû¡ëÂ0ܬVêùs Š9?¿¹ùê‡ÎÎÎ\QÖó‹‹ì\ws“ú^ÃJˆPY¸ÆsÅ€ÉZ>AþÒ¥ É©Æ.…rÖ¢éå Ã`‹ÂÓuÝz½î¬ED‰I¥T¡m†ÂÚÝjÕw]è:NÉíöûý~¿o[q°R¦,µÖƒ÷çÓiÌ™´f"ε¶e9™N›¦Éâ½€7:-53ÇFOfb!€°£­D\5Âø)¥päÿNÍßG"PæýÈ‘ìÚöÀèŽH›‰rÎÒòëà Fà ‰Ûùd]e!Tx,‰ò~äæáÔ!$>>fΙµReY–U¥Œ‘hØŒ¢…0³NÖrYvˆÛ¶õ!¼}ÿþ×?úèͬ1›í¶A3¿&÷Žf¢8!HqxúÎÿÿû'‡‘:ë%2•RdLð)±Ö³ÙìÝwß= °_¯ì:UÙ~!ê*3ì÷ùßþÛ'ÏžM<¸|óÍ „`‹ÂÅj³A¥f‹…¶´žÌfÕlf¬ )-/.ªª*ëz2™Ìg³‡WW~½ž3!Ú>y‚ï¼)½1›Ñt ]ÆHO¸_¯1až<{fïÝcçV¯^]?{ÛÖ-ª*Ãvµ:[,ª¢ðeY…µvèûʘj±øð½÷À¾ëÊÉdŸó£¦é¼¿œLb]Ûª¢¢PÌŠ¨BL^Ò¹RÊZ«”"’!RâxÎsVÌ£˜³TJýv‹ˆ)Æ®ïcQcvÛm³Ý¶ˆ1Æad²º®Ûïv©ë*çÚí6† ®T§Ôn¿oš¦DÔEAZ“‰µÖç¼­•sY©ä}+¶1 ”€ $½€à7B 1ö!(c xïµµ²+帬¼dæ4¢ÊãbwŽï¸¥”(Ø5yÈãR<\ÿz¾Ö¼ E,°.gN)…зm†ƒŽ*­5h¥8%ÿ|ÔlFHr "RJ@Ä9k]×à\òÞ‡ðàîÝ÷ßyç«o¾¹¨ë®i†®‹1~!¥ŸŒŠGñè8;y˜/ÅÉiá’„'¤ÍÇçœÅóMZËFqff€Åb1¿{÷Ã?4MI6:üæ ¤Ó 8ŸÖþð¯ÿúÑË—¿õÝï¾÷ïlÚ6ÃÙÅE0ÝíÎÏÏß~ûm jšÆhm­uÎõ}¿X,€sžL&uQpß«”³ßn?ýñÿ×ï|BHMs{}}ýè‘˹ßív77ÿôÿX×õb>/ËÒ¿|iêÚm·óœÕdR–åòâb×4ј÷¾õ­Élöâöv:Ÿ×óùíÍM÷ùçw¾ò•·¾úUXm6õtzÛ÷Ë/îu)ËP®(¨("³h”’­&“;÷ï×/^äéôþÛo›ét{{Û¥ÄðÚn»&“É@D’Ι#s!ä¼Gk³÷¾i Æ8 ŒèœSJù¾'"3®¼ƒß ¹¹ùäãw»ÝÙrÙ÷}ÛuEQˆ^'O’Ùo IDATÙP)U…µ6§D̬5e‰JaJB¶Vº áçИ”sT ‰bÎzlFX)aDE­ïèŠï DjVŠSÒÖÎÎΦөÈܲ¦SJ9é&HÖ̉ÎyŒ4á?ŽþÇcÑ€üì“§eåè7Ê£µO®”P<´ÐZà=sN)‰)çS::BcŒ³ÑZj›Qªªë¢ªzïÑwN¨hW“ùüÞååo}ýëçu=)ŠÐ÷]ŒCß#¢rNCðz›w§ükCñÐ+Ž9æ8$ ®­Yˆ`"2F Êåå¥$°qò›B8á +E)‰rðÿù?òãß½sG•å~TQ8ÄÒ³gÏ¿xáˆÞ}ç< íf#œ›F$æä}ô”ò)¥®+Êr·Z¹¢xðàÁÓ§OÿüÏþlV–—³Y©õ;o¿MˆŽHk}{}½8;ÓD×Mó;ÿößš;wŠgÏöûýÐ4ÍÍ jV+§Tؼx±½¾ŽëuÂþåKݶÛÕêé“'/ž?÷Þ;k_n·Ï_½ Ƥ£÷}Ó Q»ÛIMöÃàsf¥¶Û-Y«¬5Eqyq¡¬{šЈ²š!g)Ã0ÜÜÜRÎ9"ÊÌeQˆ/ ~ÎY\‡ÂCÖ£1%"ÊJe椔VJv*Š'&Ì8 Cß»º6Öæ,[ŸÅÁ#ì.ÑÖgŽÌ$˜…¨,˪ªˆ(Ä舲В1Õm±%Œ’ú#å ÑèÊãû"tOæ i/-´ ÄS³Ñ!bS’d‘S"­”cJ9FÁœ0Zm%´¢÷DDư֑¨pîìü|>Ÿo?VÆèÑÒâèöío_]^ޛͮîÞ…œý0ôû}!;3{ïQ$ï+ðQŽÿRxúίêALé‹7ÅžÏLbq@ÔÖÚ²4Ö!cΪJˆâÓfú7½Ó,WÆÞÿ÷ÿú_Ÿÿò—ü‹¡´ÎD¥sØuÃfv»Ýõuy©R’ÞIœJ>¥”R›R˜L&¬Tß÷q²XÜ\_kç6›M7 ÿì›ß¬ˆâ0\L§Ä\XkŒQeyyy¹oJIå Ãðêñãý~ßuÝË—/g“ÉjµrÆüãÇ?þì³®ë,üÃ?<úå/ËÙ¬žÍ^ÞÜ4»]UUeQìblræét×¶½1¸Z…”šõ:õ½Î9x¿ßïɘ}×ÖTÓ³³²(ggH$c%›Œ€Œ1%ÑÝ««›Õj¡žÍ¦e™r&c&³Yˆ1§$s—Æ‚9C'CΔèÑ_¢•R‘Y#JÕå”8FöžÊ’º¶mv»0 •sÂû³Èbf€”´1a† DmmFìC¨Gã(îÓÉžƒÓ¸’ø9pc¢ÿ«ü+v9‰Rù ùKþ¡±HÐøÁcÐʆUfŽ)e0æ Iù•ÐŽD¢m%¥TUU8Ÿ»²LÞsÎ ‘‰Hë¢(‚äÊßÿ½ß{÷7TÛ¶»]‚8_… I9{ïSJÅ©Es”/å ~-M'Àõô·Zž_º¥ñÐÁk͈Ƙ¢,‰ˆ½/ÊR5Šãhò)ú›‚P¨TÐ1~ðöÛ¿\Î&­µ±V²šq®Ûlv77ûÛÛn³ ]÷âñã¾ibŒÓÅB¯¨ëÅùy&J}Zï7S–o¾õÖãÏ>ó1N&“YYD/Ÿ= Ã`ˆ´µÏ®¯U]w}ßïvÿå?ý§7..~öÉ'¶ª’ÖOž?5~úäÉüüüógÏ>þ|yçÎt>ßìv¿†·œÛm·×/_ú®k›Æ‡°îº–Ù;gÎÎZÄHÔ‡°»¹á¾×Ì9ƦmMY¶]ÇZë² !tΕRJ‰b-žR§»s…1ç¶(𮛯èŠÂCÛ÷Çfì¸ E1v;aê¢"bÄÑ(%Òœ:QäÅÚŠ˜s a·^[çÚý~9ŸÜ*Ì’"9%±t ùéCЇ¨ÏÂÐ"¢–åqrì…”è#ò•E6PÄD_ÒÆä•^í±'ýtªµq®¸¹¹Ù5 3'fï½»¾6Æh¢¡ï›››¾ï벜Ÿ©¢è¼¯œKDÞûœ³¡*¥•’-°)¥ÈÜõ½"zððá/>ûlµÙ0âj³)˲.жiªªêû¾†º®qðÞ:—´9'¥1-*Õ‡R?Sî\fîXkeL—’) rNö‘†¾ï6›a±pÖ‚DŽR9Æ”’µ6{O…ÖÕd²(Ën?y>û¬²¶(K…Ø÷ý >iɛ̲SG>éü8FE$&²¾ïcŒóù¼i[á}ËŽ¸—SêûÞZ+b£T$’J׬×)%°”j†Ak]X+WVJÍ«J‰Øà´žéa¨& ¸¢®cŒû¦™-•sC×X{ݶ ±ººº³ÙôM³Ùn‘«ªr>_œ¹ÙLÿÕ_ýU×ucLéï}­žNsÎÃ0Hn¥Ñ?Þ^Ê.­ùµp8üt¬æ§’™ùè¨:úhÀZ›™½÷QTã6F±&I˜ÓàôKñäk&çŒb %zôèÑ÷޺¼¼ 93€ì0^¯×7··Z©>ƧϞÝl6Ûí¶˜N‹ªŠ9¿xù20ï÷{Òzy~þàþ}W˜ÒËÛÛ˜’«ªÉ|¾Ýnùôé‹›…1®7›ÂZbÞ#’1ΘT–ÿÏ_üE³ß§”ÊÙ¬œL¸m»#Àn€* [× àsÖZWUõìÙ3Rjº.ålŠ‚³¸@´f"r®¨*IÂZ@´ˆ µgæ”d×Ä†Ô •sÎ91GæÙÅÅíóçÛív½^[çd¨‡aµI÷œÆ/a|¢+‰,z^Ô{$*ŠB‰"ž4,RÐ楱1‹"FñëœÚëˆ2@V*ƒ£ª!ÙG1FÄj>÷Þ·ÞÙÙ£UÊ“SÚïvr,3벫ˆJçêºF¢Áû7ÙdˉŒ1EQ@>FN©, W²ÁRÎ^`"-_TUYÅ´®‹ÙÌ”åô⢚Í&ˆú¿ÿÿÁZ·m;?;;¿wo±\Šv,ž=±_¨Sy]h. ¶±õ:¥d¾„Åùd»šÜÜi$ÃQÒ@D"E¤µf­KcªªR#“_‡ _ò›ÿ)À„»S œƒ?}B˜L&¬uç}ô~½Z5›MŒÑ3 {.Ø%çìCÌMÛÚªês~úüùƒ—/wmkÊ2欔š“Éõf³nÛg›uNC9ïb,1MQcºÉ„­¾óN÷øñÍÍÍÍnG]çsî†!$fS–5³ð!øëéÔX›eËÎ Q¸–Œ9‹ˆ ÑM&¬5È xBŽËÖœ³sÎǘÆÓ dÀÓ¥1ƾë†a¨ÆÍïFëaQùq£öÐ÷FËI'%Æ`É}iäbJÄìœ3Î1€l8äq'* ǘrŽ!ÄSÁ{ˆqð’LÒñ‘õQkT ”ÖbyÉĈrŒÞûÅbsîú^ãCØívU]k¥0%ŽqHI)5›N‰„K㜑·Ñ{2ÆŒe °E!éÀ9W…RŠŒ1Óét2æœËé4¥6›”‰(òÉ—”„±uu]N§)=›¹ÅÂÖõôòòÞÇõ|®_ÞÞª²|q{ûîtúôúúî½{b"“8‰)yï 9DD0½”¸c‰’ —3¼‡8ë×BtL¡ÇÈ”¯ -Š6ÆaBJv29??§#):Æ!—ÂÓ€4½WÞƒ÷ãçüƒü egmFÌÞÃà»ùüÑ£ÛÍF£­%cRÎ~¿ïs6Öjc8¥~ž½|ùÓÏ>»êº²(.–KE´o[÷øqÐ:+UÎfJë!„ŒŒcÀ˜¬”¯*ŒQŸŸw/_¾†®ïµµÊ¥µ. C¤ËÒk-ûº}]ß›¢ì)ˆÊ92æ0ªJ©²$€4 ]ß[ç@:pD9¤PæÞYË}/ýÁaÏÌÌ›õšˆ„7Ê)ŘYl"1Fg­ÖšåüEk½÷GÉçЇm…=Ý «‚™™É˜ÂÚˆ˜RÖ˜x4©ÑJÄÌÚ9@r0™RÓéôâÎÛW¯ í u‰ˆŠYÒå¡%Ë™SÙ{üœLÚý¾R ‡œçÖú"“s6ZO¦ScŒŒ†øþó0 ÖÚéd‚D¨õz½ÖÖºªšL&RÉ+9ÒŠ¹®ëùÙYUU²›¹,ËIUÍçÛíöÉ“'>%%.…œÛa,&k>´ 979?÷Ã09;»¸ºš_^Þ¹ÿÍwß]žŸke­¬›b:­g³É|N)yÙ=(§J ¯¹ò¿Â^ôôc—xü÷iˆ'Æ}†rÜ•”"k«ªšÏ篼_ð+ï(Ùš Jó£GÖëõ;| ”ò)!¢- çÜÚûõíí«Õj×u®iBÎ)%qWE!wiŒñ)=yþÜ}ò‰qî­‡Q©Éd2xBÎ`ŒLBÎd­¾G)c-3G­µRs“sÏŒÎó¹ìüÐÖæœ™h`¦””s¥1D4¤ûžF¼ìF"㜤/@ÔZ[Ä”sŸsŒqê#¦”REYj礆TƨqWÎéŒcf³Ù½{÷^^_çqRìºÆ9V´ªk1v…®ÃÑ w,ƒŸôë0õ€t†AÎæK9§”8¼Çó»h<$òðY9”‰2sÌY[+’}†ÃSJV0‹b1 €)€³Ö(å´¶9cß/ÎÎfZ;çÊœKÄYU]ßÜD€ó»wµÞ{9뱬ë‹;w2sQ(P\©º®µ“î>x ”ZœÍf3emQeU1³ÒÚSO§„`Œ)¬uÌ}×qÎÞû0 Q)edÃíQ–“3ï”Bk‹Å¢"zãÍ7ßûàƒË»w'‹E5¢RÚ”eTÊ…+Ë«ÎÎÏû¶U»]NI99ÔUVüxÂçá;Ùé({®Oƒp4}I%ý"ödÆl'fÅÞ{0ÏËÙl:rh—·×Cñ¾¤R"RÎ1gx¨Ï]÷³O?-'“ÅrIZ+c˜¹ÙíÚ¶Í)µm»ßï“L6‘4I¶€ ¦”Œ1˜óv¿÷!œß¹óæ›oÞüò—ksJÎç\fN]ÖZÍûʘ”’@²·¿ò•Ýííz· !¸¢€˜sö^;w8 C)ãœ6F¨¹¡5šøbŒ @CÉߤ5"€A‰L—³XÛû¾¿½½½½½Íç8"Žø`fæÙlÖ1EcL9O” !ȉuzôÄ—e)bamì:5úZŽÐFò)…15·!ˆª®DÄŠQb,zˆF©8êò‘„:bï "*rN'NÉcßÉ£ú'2L‰”ÒD¤õ|:uÆDĶi†æ‹Åb6#çöÃ0¿¼ú´¬k *œ»{uRrEaŒ‘­UÎ9W–rP`JÉ9WÅÁªŠØ÷ýòââ@À%1»Æ¨V«U³ÝÆa»^£RÕdbËRpBVJ)Gð¬Êryuˆõb¡´öð¹¾~ñèÑv³Ñ"àÖ€÷¾mÛ^¼¹’Ïdú%kžl?;êý_Š„×Z¾1¿tÁiÊõ„¨ÆÓŒ/;ʃ§ñv¤z`$оøË²ë\Ô‘`·ûéÇÿéŸþiß÷ι‚6&åüêÕ«Íf#½Ç®mÁ9³’RÎ]×ù”f³ÙU…¦‹Å÷ïWuý¬m;¢4 Ëù|yvöj½Î!"HIÉIÄ9+Äœ’lw.•¢”|ÓôÀÌâ–CSHk™ª8êÑĬå¸8ôrÂB£ˆïŠ(+‰`<ÙÇs}ša­7›,¥”0{2>D$=¹ô<)g9ºîà?3†Çc rJ]ÛÊɹ_„Áëjði[x,‰ŽHò )ɽ9£ô™Â¤tØODdˆŒR,{‘cÔ9—ÖÎçóº®W]w°3i âü” ûˆ )ÊÒ">xð iFäýÞä|÷îÝétzå\Êy2›ÉVõûº²Œ1ΗK"’SmQœjŒ5& Cß48Zp z?ȉR)AJÌܶ­ð«i:•£è ç¦Uå½OÌVk§µ?ÚhD@­uQ̪*„0ÄøèÑ#LI1]·º¹Ñ¨ _œó³gÏæu9s΅࢜sJb×Ì£‹ü xyÒ#ðô¿0"R à1"qÜ9碪\Yv)€° ¯ÅÛ1ÔÆ³RŽ¿úâ}f ê»®2Fv©@Œñ£>:¿¼ÜtÝææ»®ƒ”bŒ¯^¼Xœecä ¹%«µˆf²ç:¥c,ŠÂÅíím ¡Ûï½÷“²¬‹â¹÷s=™ï(¦„1j­y<÷NimRª(*çX©äÜ4«*g-3ç™H@rèºBb–MôZëtBtÜX)±lDÎF ‰Ì¤T!ÇÝŠ0çL)13(€ív[³<;[,û¦‘ƒL«ª"Ä¢(„ß—ºÑ4MNéØžFš¬ÑÓ)>…9RZY)eLf)á¨ïÉõQ ®Ì 'ÇXcPžÈZI7ªO¥KRŠû¾7Ƹ¢pÎMêz±XÌæskÌüìŒV«ó‹ @­çó¹±,Ë{——çËeÛ÷ÞûÙ|röÞŸß½cl‡™íd‚ˆ}!çcß¶MÓ ³hJ©ãàý«ëk9mŒˆ¢÷]ÓpÞ¹~»Ý¦ 焹hÛÇÝž¢ÏÉé’¤u@cdc>z_Ñ0Ð0è°Ûéé´ñþOŸNÏÏŸïvçÓét:ÍMcD¥†”œs Pr”€œ™Gáþ€F§ü¹ó«£êÀrð‘’1çÄ˲^­†ÍæáW¾²¬ë XDØlH)( qÄÊzÜ­VÓósX­$ÏCUù¦ÑZ¯Ûv1›AQ¼ÿíoÿï¿ó;óÿðüìÌL&B»^W]7tݳ›µX8f9¿L#êœÁ{-F~­Ý|ÞåÌÖ òœUÕõÓ§1QQȆÆf¿ßm6p<‰@$]"p®ñž˜Ë»wï6ÍíõµD Þ›ºö‘Ù8!ôÞ甊ºž—¥W*熮c”R>F5ú9Û¾×ZÄ!gD¬œ ޥ䘽¹µµsÛ'O¶³å2 CH eW¡Ör¦àl>÷)É9™`v~R2ΡRóÅ¢o[ˆ±®kÜnŸ¼zeg3ù5S/GÍ—Uå‡A)Ì1%”ƒ€•Ê9kçˆh:›ùP)V*…0)KÀ)µM“Ç8 k‘(+…ÌÃ0”DNëB©óÙl>™ô“IQ×Ý0”³4Ìçç¡ïm]›¢˜VÕåååÛo¾yuuUã½_ÌçÓé™÷û=3Wuˆm×]Ü»'ÞkkŒ)ÿÊޤײì:\k·§½Ík£ÉȈLf&E‘’)H¦lÚ¨òÄ5]#A#Íl Õ?¨Aýý4(A€=( †—lÀ’ʲ˦I‰d2™‘ñúÛœf÷»ëž7"i«ê€ "n¾¸ïÞsöÚ{5_S*DèûÛ«+>ññw··9gÂÙMœuŽhÇ1…¼§þŠóºœ}J.„ÒfÞìvy£µ.Ÿsˆ4Ã’qŽœ €‚¤2~¸sˆÛC0Ý K ‚h!„ìܛׯ?|ô(W• A!j­©‚S'ó=àæ/M;‹øãÆö>±QpÒJ€q³÷Ô~ ¼l àX÷ÿæßœ\^¦»œwÖî¹xPœÿí¿ÿ÷áõëÿù÷ÿþáá£ïÿ§¹i.?þøúÁÚå’KIHžïÏÎÏ“;bޤ”Œ÷}ßcU6òa3¥Ü1ÆÀ”zþÁßüæ7q·ÛyïwÞ3ƈYUÕ¬'ùö>0–§/{zzêºîÕË—‘ éRfD!åÞ¹y´ƒœ1¢nxcª²Ì&ÆXd,ÆHGSŒè|£ G"ïcÎeÛÖM£Ê’ʪYôéß"ïé0©«ªÛ휵Jk"Ê,ON¤”²m5cÒr¹ÛCCyé¯H)çŒ1Îí0˜¾§.ë²mçFYHΉ)êsF€ÈX°v6 É€ÊT&DÙ4»®Bˆ1òªj–ËûÝîg?ÿyfìŸ~z~yùìéÓ'?}òäìô”!À1EA£F’~•óæîNÎÁ¹”’1&ÆX×uΙ6)%;Ž)%£µ¶¨kLi†`Œ‚ˆÉ¼Ä‡`c$ü€O b,gýNƨ€Ä¹‘MM,ªócŒÎ{Úª#JÎÙ¤ #€¢V©T©Ô£‹‹V©áþžX0”˜iÎjBSlÑaJEß6?ß ¼÷þJò$„$’?‹šÐ†tÞ4#•%)AŒnoO¤üý¿ûw_´}ÓÄ¢xúâÅþé?…7o¾üwÿîóŸüä‡ÿÏ?ÿçãba«êÃqüÏŸþÙ·¾!çOž=“e9Ž£CÜï÷ã00ç¬÷ÖÚј²iæ/@ñ9c\)hŒöûo~öÙÅÅÅØun ïû¢(dYJ­ëÅBkí ÖH —)sËœ³”|ŒEUÑð ­ªŒx¿Ý&ïie3Æ8c\&eÛ4‹¶R®×ëqÇû{ÆXÈ9Lº†Œ±<¹ß(¥ ªèù©² !¸ýžš´ÈyˆÑ –(¿Bd€Ì9©è&€v±8=?óê}g ,êÚ8§”RR>ÜÜR’[Î9@ÔäZ¨´Þ(´®ëŢʙÆeÓ0D.e"8‹Öœ±¦® )©Ucúž1¦Ë’ú‡85urÎ.F‚TªY­ªÅ"!JÆBJ)çªiëõwþÖßZ®V¾xñÁÔU¥µ.´¶Ãb,¤DιRµÞû#ùÐuUUÅI@‘do8çÁ˜“8çœó[V1ÕöÞ?ÜÝYcH‘q·Ûñ©‘c $(Šˆˆ&FÒÛåZ3ÆòÔQ‹“ÇFœjrŒg“¸Æñ™"¥ÄTQ´‹Å‹/¾ñâE†îêÊÇÈsÆwƒ”zQßù`=Š·ù üzLÒë´ Óè*I²pÎ…”fšzJY9ÿ“?üÃà Àà¶)ů9‡Gž}ûÛ[€@.]Ûöã¸èº?ü£?úçwÐZ‰øßýƒð—?üáýÖeÎYhÞ£\J~Ɖp({8Ïœ»”xQ0€0ŽUÓ()ïnoiº º,uIléŠfMBë9`s 2¶ßírJ!%ãYxïQJ!CdB¥4c…Rë¶]·­¢m[b® !@JD,ŠÂÇH wó“c9“¿rn+µÉý`L"’>/é;Î¥8"/ŠÐÔõúô4¥Ô÷ýb±ðÞŸžŸ_\\ÜÜÝ !$b7 Ô.âŒÉ¢ ±MÎy]ל1kíéÙY„¨‹årÉ&‚Rªªªj±(˲Z,bÍjµ^­dUuûýÍÍMÊ™[0èž1ÆH£>®uY׫óó~=}ZÕµ,Šªm¥/^¼øÖ·¿}v~^Å~¿ßï÷Ûív캇‡‡õzMGãÜÇØ÷}·ß{c¨Sàœ#qD’SJí¶[Â$Ð$†ÎCºŸnr(3ÆXkSŒã8R¿ŠMÆ~l¢ü»”1NXå4iÌ|£)H,8N\–¹QB¿È¤+ŒÈ…X6–’ØPQ r€<9½ÍÙ&*Ê1]â8ÞÞ;çV ©tŒ›Mvp1%‚q÷}ï»n;޶íéɉÀ²„ªúòúZh€FkñÑGUU]m6ÿú/ÿòwÿñ?U•NØÙ¢bÇ«W¯ú®ks†œ½1o^¾¥lÎÏ•œóÞ¹ûÍfÓ÷þÈ.k“1¥ô!ÆŠ²|Ü4Ÿ|òÉb±¸{ýz†¦i¸eYʲ¬ÛV—å0 !g1ߘ<äÀ9ò]×ñœUU1!ʶ%ιVªVª­kRJOã¼7ãèSRr! gÁ¹‘Øó$”R²ÔYµãSRJy€ÁÚatUQHÐŽ;+2@ˆÑ¦Ô–eݶ…ÖÆЇ‚ÀbÎùzïï6ÌÙ¥bDç””L©¢,˦œ‰?uzyù¤,µÖÆÚq«¶===M!Ѐ7ç¼X.×ëuʹmÛÕéiÌùúêêõÕÕn·cäd˜…ÈDfg̸ DQU²®·ww§‹ÓÓóóó_ýµ_“Bìû~½^+!Ì8n7ÒsÆXkoï…”ÈiÝìE€¡ïiE‹3M=aÌP£˜ÀÖ\©ÔÃfCI.FÊ}¸Jë4ç#ˆXT…isdòÀš¢©]2±XØÑ¤íøÜÊ9 z–!¥œ’Rªßn‡®cˆ"g˜†èdúy€­}­3É&nÈ|ÈÎ\’ã ¤‡ÒQ˜xR!BÕ4Ôx4&ìËpuUÝÝ]\^~`öÖš/¾°MS-v¿‡BŒ ¥Fç¸såb±øàƒûÝî7¾ó×?ÿùúéS0fyqñýï}ïû—ÿR6^¡1TÑ IDAT,bJ»a¸ÛíÆX]“ Ä<ü¤z„(« ¥ÇññãÇ———>‹.ª*ÉF¦ªª‡í–+Etj‚”ÞiR’³Öúôâb}r’BH9Óœ`Ưs¥ª¦iš¦ÐrVRÒ|rµZ‘ÏŒ÷Þï÷𲝢(Š¢,Kkm!Ƙ½ÞS~èbŒ!Øq$󡃿mn“1ó¶mWggÃn×´-—²(ËqCÆû}×m»ŽêOÒü.Û¶*˪išºFÄ¥sÀXQëÕªm[2¢)Š¢i𶮫²¤½©Ðº®kBUUÔùð))­‘1!¥GšÓä‘ £ÎJVUU»Z=IéòÉ“§~¸^¯Ï..‹Åõõõõ›7tû¾'²…·Öcúžs¾ÉÙÏ‚ù1¦”ºýžs> Ã0 þ¤òCD¤iÊL¹àBc€*ŠL•¿”ó¦vX·¤Ñ @ýŒÃà4g˜I¥œ©} <ÄÄ":‚þêÉ”¥ÝZëÕju~râŒ»Ž¸äÞZÎXŒq†M½=ô¦]ÿ&:'bÇQŽ…‘öæœs$Îèdf§9˜Öz½XDjR8cª“àü_ÿèGÏONªÅù¹<9Y?}::·:;ƒÕª(Š¿ýÿaŒñïÿî寧ZŸï†áñ³g­”` 89ŸÖuÁyIˆ*kC1gÕ¶«Ë˱ïÙüáiªÃ9›ô°|íj…Œ½~ýÚ:WñK†aˆÆp¥TQ8窢ÀcA„©SŠŒk+­/..?~|w}MãÞÑZ­0&8×J5uÝÔµ`,#‹ÂCUU¢(¬s~¨ëCÛeMTÃ,wR"v_ !Z‹1çÖÓuÎZR"O1B³ae¥ÖMÓŒ]7Ž£PZ_ßÜPUf¬ÕU%«º.Ûöäììâòr¹\j­•”e]ë ] ´^.—§§§u]ÃARJÈùææ&¥RæCJÔä@Dõ'HƒPÊ”ˆFT–eµXœ=zô­_ûµ‹ÇŸ<}*8ùêÕø“ŸØq É9MVgMïµÖ)Æ®ëÈ#sÃ8ª²ô!8ÊÚ:7ˆT–“B4 TC"F Xe •L&%ñ!h$JsE>KiѸ%g÷ "„€|%ò$t)±”¸”q‚ÍIiJIxïeY¶Ëå£ÇO×ë0 fØ$WH™”ò_ë‚ޏwÙÇéèñÏÏ? „˜Q©Bˆ¢(Ò”‹Žã˶ï=Er''ÿëýÑÿñÇüé÷¿òìYoí£'O~öòåÇ|¢RÿË?ûg#6Çͦ\,‚÷‚1è:Rz¸»c1R™þððp}wwuwªJ¯VÔªGa´F±í~ßžž¶mûÁh­ß¼yãû^“]À0 .gYŒ1ç\qÄÛzg“›x7D{Ç8WE9sÎi—•RRy 1Úœƒ÷ã8"@Y–Ô©"TÇ~~MxÆXAI9v…0ÆXcgŒœ/1 %rNÒ´´\hêèBðÞûv»]0FW•¡w®^.±a9ç\ʲm?ùì³³Gž}ðÁr¹D†¸X­ÎNOk35ëC°12ïIÈýO1Þïv9ç:¥à=p^•%mm>FB¢ÊDÊÃàtñ ÎeQ”)-×볋‹ë››”Òå£G_½|Ù ÃÉjµ{x Ý Æ˜#1¾…}ß·mËú>†B!ìºNV•BTZ$ürŽ1 !¼÷„>£Î0! ‰å(µFDcNI–%ã| ’$þ´òóØ9 h¢ŽgQ¢þQ‘D’æü‘‚DÙ¶>¥’±Ó²,cÜí÷¥9g(e)}§{4éÒ)ô|UÇëä–Ê&ûNbÓ¤1Y–ˆ˜£ÑøðC!åz¹<99a4ÐÓº¨*ë}7 „›s!l¯¯} Qç  "ç–1Y.¥"ça»½}ýúÉÅ…` ÛÓÓý~Ï%@ÊÙ£Rª,Šèý¢iì8¾yõ ·÷÷¯_¾$ã°0ŽÆ{çœdLC8tòœη]wh\…c,KyË eÉX˜2—³'y%!XQ€Í™s.Û6çRòÞäTœ“ˆ’ól-­ê¢(ˆ°K‘戲4ÕV0¹S¼†Ê“̘O)qDq91jÎiû¨ëZ,—KBSU˦¡›<7(KdG5ÞñY7_ÇÙíü_Ó×Äè¢é?N³Áùu©T^4Æ\×/çãnw@T§t¬zOÀKLI„àû^5 2!¤aèïîÚ²kÁ˜ÿë_ý«ÿó_ü‹a¸su]sçân‡ŒaQŒ)I­a‘ÃŒÙgŒº/ggg«Õ*Æ8 ƒ÷>O¥ï\è—,̼»ãds–BHÆ1Ź@ô“Òq©T½\j­—Ë%":ï1¤äÆœ1ÉÚ1•Öµ”ª,Qˆ,¥nÎ9PE!{LŠœ…RÊËGš¦YŸžeéœ;==RnúžÈYã8ÖÖM)yƘZëv±Hº,Ï>ø z€¢,Ï..ÎÏÏ_<{öO?=;9­%IvÎDç†ýþæÍ›4!<9çt¤{çâ¬ÑDó€œæ|sãÆ±ÛniB@½+j;áTÑÐ ;TòQµr0Dô“ðYž”ó¤mÃ'9Ãe„\(€z¤@7Ÿcj²õžmŒ1M<Ò‘8<éCJU]‡ çR Dg™0IszI‡Ršžó»3vpŒTJ……¢,«²L)%­O×kqoCxþìÙG}Tæl´Îä½6µƒÒ»é©å¼wÍß3‰ /\?åï’ SJÛíöìòrGîÜjµúâ‹/ÎøÃ_ùÕ_…œ‡q,Ûvs{ë­ÕZ Æöû=§Äš`Rú“?ù7Žë³3£3f!åßûÍß­¡,o^¾¼¿¹y pÿæà<ö}2¦nÛ¦,scfŒOwŠ.Îù0Žpzzº^¯½÷ƬÆ#˜=˲, yÙÝ4uÉè^)!견´¼—JJÒÖRf€è}0ÎuÖ¾ÙïGcªºÖe©9çu9BçBÎM]·mK¿½,еROž>%J"’/eSR©z±xØl¶›ÍhmÕ4EQP²äC M4 Ñ^ï“”Yˆvµª–˳‹‹}tyq±ªëÅb¡´ÇÑ{Ïb´ÖŽÞ[kooo•R À£®ÀÐu®ë„‘1‚%©w;²Ö‹)QHçs LdZfdg }ßÓÖ?ZÐ_çgô^Q0 "N.ðKŒ¯ñ’çÓe^ŸlªîÈ„ÏÒ)ʼnêq8øËB0Æi®¿o BAöX1†ˆXxü !–J9çȈ*3 ÃÐuµ”bè:¦T]–¥ÖÜûùˆ)ÑNóvƒ?b?kɼwJà‘,äá•é ¿÷“óý¥–"n·Û?û³?ë†!9wqqqŠh¬Ýo6Zk‰8ö½"Ř½ÆÜ]]ýïüÇ_~ñÅå“'#cuUýæw¾óüÉ“ž?Ƹ”«ÕJ{_Öužð{Î{ã\žØ4ô1øÑ€º®//.Ö«U¿ÝfÒašƒPk=åÕts޳†cŒ±²mš¶ª¼1‚1-¥‹1:bÇ‘Ouæ}ß›UÛ.?^.—!g!DYU1Æ]×)¥NOO‹CTJ5M#¥\5 çœâÚªRJÑ'\ŸcõWõó—/1º,¥R\º½¤š8UU¤T.Lë˧O?üôÓÇOž<º¼TRÛíÕõuò~è{j{ƬµÑDûž 'ÆûÀîïcÎf•Ö¨”KÉ8ŒIDÁ˜Dtã(…R\ˆ˜†p°¹=qŸ·ïHç$c!Æ„Hå7õºø¤8š'Äɬàvˆg΢RG~sÎçí„@»¼é„8–œ‚Ä8q‹•bSˆE(Åé<§'žR¤î#%zgÒñ^ ?„P4@G±^,ž<{öäòr³Ù”Þ÷}ïéWNˆÐYcúè»ßû+ ÔºQ-—µ1>Æ@9Óíãï>­¶išÓÓ‹‹ ¥Ôn¯c8¡d)¤^¹|×÷ iæ˜B´m[/›Í†Je.%iõãhÆ1¥4öý˜óêñãvµ:¿¼¬ë:§¤µ^¯×UU }O©&1‹EYã8fç꺦>DMæ˜Ã€ˆ9þr^Eåœ`,¥ä†)E”.©TÙ¶'ËÓÓÅééÅ“'Ï?ýôüñc’·v»ýfãÇÑã¬ÍÞ ! Fkm 1f­uÎQÛ–Ôk|ˆ¸ÛlʲäZÛ”|À¹Bdˆ«º&¹D˜W*ùºÍÊëï¢Àgk:ߨ¿•潞è…äû;¥ô/ó¤ø<§©ðî…k‡~Ý{ §lö€=˜2RsÅ©†ÂÉ”—vgÉ9ÁâbŒ´S‹ãÅ4Ù!" ¡â¼†×_~™b,˲Ûn¿üüsœ»8?þìY[UæîŽkÎ9QNÒQ¼å©‹5ÛÛÏýîXbþVLJ$Ñ”HNäø›3Æ"æ)Õӻݞ?þÙgŸE纮sÎ9°^,Œ1ˆ(•ªšfÙ¶¿óþ‘âчæÅb¹Z5Mc¯¯¡®!Æï}ÿû™±ÿüÓŸþøóÏ»›.Äbµ2Α–í: bGñ“RòÆ\TÉT}OžÔ©SJ8}#b §”È“ùuy­IENZÖ{áýn·EÁ´v9oóR©‹gÏ>ùÕ_=»¼¼8?/Ë2LjˆMQ4M³Ûíʲ,ëšPUÓcã~/8­­µ»ý~Ç£í{)ep®®kk Y’Ú "zç2bR ¥,Ûö4%ÎØâôôñÓ§ëÕ RÚÜÞvÛíþþ~ì{È9…à&kèä\Œ‘#*¥öû½µÓe ½1qR|dï ÃЃžb1FjÎ!â¡c”ß*±¿]cBÆßSnI74;~Ó}¦Ùì”`S &ˆåÕoÓÑ)Èçí o“žc(Ä,pH•ˆw®ª*¤þg(DQZD¼¿¿çJ1DúÑ<Ù~à´Æy_ˆsöÆÄq»}ùùç}ß7m»ßnµ"çÜ”åjµª¤(í&¸ ÷t¶Î•[>j¾ç‰-úÞ‰w|Bâ”ëï|vÇÇfJi4¦¨ëq…Öççç_¾yóððð{¿÷{ï·›+Å97¯_Óî(UU5 9We‰ZÿÆoý–^.te8‡qÔR‚s#hýéóçWWW?²¶»¿·9gçÀûàÜ@,vp8|þ”rJ»®#žÑÝÝ]¿ÛR扔&U¢”’Öº,K)¥1FcÎÀ‚q.µþøââoÞH¥ëõùååG|vzúìóª(v»ÇBôcœ!È\J©µ÷>Ñ”H‰:Þ¹ûÍ(-ìú•RT«¦mŒ‚s >ŽÖÚ}ß³q ··4v«„ïYŒ\J2&É£@ëcpŽÀÜEY’Í JeƼsìhSœs)i6—ç("à%ç4ë‰R@›õœ R®“Û¡_‚(hDAÃÆâÁi˜’JA Â9w¼-LÆqœ³\z…P€S 1fçÅ<Gì¨ÁyŒqt.„0Ã0 ÆZÂ-8ç´Öççç8Y NæyQ@Χ§§4{+µ¾¿»{¸¿ÆÖ''â;ßþ¶flsu¥rv1–XqË)9")uÜNI1R ‰#aÖ49  ç“ÃÝ`äüàÈC´Ôœ‘4Héã9WJ§H®‹b¹\fÆ‚åÉIòþdµbdˆ+Äìô2v]7 3clxùr{w‡!¸aØÜÞÞßßû}a†nÿì/þâ?ýøÇ_z¿xôüyA°‰ªÂ¢@Ä8/ëº^,Rνµµ«²¬Ë)YÆbJc %U#@N`÷ÆÚE][ksJ# ø1Æ8¢µÇCàEÁ…X^\\¤dBðB˜¦ùÆG•eùñG]œ.ÏŸ<é÷{Ó÷n’÷”ûQk{¿Ýæœ/..áýs)q)ûí¶ªªŸþ—ÿÂ9!l6›º®€ý~/íÖZÛ[EYâè}ŽQsÎö]­1‚s1¥q’Ÿ IIBLumg’©5ˆYJÒ>Ç s&èœ"Ĉ„L¤ÓÉûÌ2rÖUsL))ÄA!‚sÆ9µ@””šj¥œµ’sÅyaGÂ…Æi¤ä½§Jd†!„åzMê8ŸÖZAk'5Mõ,Š‚O’‘ÄÂs&Ò³ë{? $]AÅdNÉXk‡Á‡`Ç1¨$Ég…œµq¥Rº,€ÑºZ,RfΡ(Hë-¥!€wÎY»—²”„¨ëº”2Ũ87Û­øðéSò8kO§ãÒnî‚ÎÕN> Ì'5N^ês¶ÀcŒ« é¢?ÄíI/gc¾¿B,ªªRJ„°ùòËŸÿèG7_}åŒI)½¹¾¼ï¬ĦiÚ¶ŒyçÀ˜ã8 ûý~ì:ï½±Ö8ws}r>C9÷”C0Yåäa¨ª*„}ŒÔR§]VAÐ*Ƙ5f»Ù$ÆêõúÉãÇŸ?üøñÇ}¤¥LÖç¶‘úcL9Ç”ì„S !¸×¯‰ÐHõ•”rßuºªv»]]×tŒl·Ûûû{šÿRòæ'q ÆXŒ1æÌrŽˆ9çHèÓIú'öMž¸”)%ªc‰‘xxèÓùG¤{˜þǺÍp| qNŸ‡t>„ƒ$þ»‚Ù\çÍӛł´ºÝ.s®ŠBc¬jšÅjE+°ßïÍ0e,0)#c!„²(ç‘ÈMÞÓ9A¢L“÷tK1ç‡Û[$­°”ú¾ßï÷Î{D‡¡®kx‘^Ž‚ŒQƘ1yOmj]1Ò,§$h Ï˜ÇB©¢(èÃEU‰EÓ Ã@ž•zнã;2—GI5¼÷3Ç7§£tÎÓL‘Ð[Ðÿσ…}Îɹ½1à=ﺚóeYÞ}õÕúÓ?ýâg? ÆçÞÜÝõÖZ€ºiV§§mÛJ)9À¢,Ý8Ã@ùs¡ÇÝ~Ï‹¢Y,$€¬ªÒ¤‹Ø4M “g@U–/>úèã?þä³ÏÚª2û½€)‘šN-P*N´Ö Än·£Ž6;ö„›­d±¢,Û¦9Y¯ËÅâѼøôÓ“ËË“õºPjØn‡ív°Ûl¶ˆÖZZXÎûa¨g@H«»»»¹.•RŽÆÀÃÃv·#`'aÿ7› 5oˆ¯‚“0û,¬J9Kž-ùØÎu–/¡¤šúþ“" mÉ9¥·­ÿ©·™Ø„Ÿ|oû¦´ÖúÉ ‰ª›·³+8ˆ)Â4{² &a+Ò³È9—)•Uµ:=M! »®ë±ïw»¤SRU%9ßm6üp}ï÷{BèºÎY›sŽÞ[kÍ0Ð6äâçœbLãXi]–eá~³Ùl61¥¢(¼÷¡ª|]ScB*¥+BÛ“Àƒý(õíM]¥è v%B#2ÆÚ¶]4͸ßÓÄXô»Ý0 1F%L…N¥-åè>Õ4QÈG}šãI c,Í®äIr¤/‚ˆêÝ–ñ%¨´.‹"xïéd®ªÊ{?ŒcfLðÀZÛw]B,´fS«<Ø !±ËÒYœcBTU%„°ÆØafrŒJ-¥%KÐI¡ O²Í´ûâäÆ8=ЄŽtÑcJÖÚ÷ZÀÇùí/½æ6ç,r.ÚÆ˜÷ž*%ô^ÕõeÛ:ç^o6÷›C”eé¤|0f´ÖZ‹1²7··»Ý.#j­cÛý~ç}9 DÓ4ºmyQP¯lÛÕjuùøñÙr)„¨Šâìììtµ‚cf½µL)ÁX¤ƒE)š}Í+‰ÆSȘ®ªlÌ|ß](DúO\J#".—˪,û¾·¤ÌUcßïoo³÷{ks¢,Gk3cº,sÎÝ8¦œcÎÆÚùTI9[ç¦x0ã›ÆÖÔ(jÛvG8jÎGÓp<ÝkÈ9Í›4¼Õ.9˜:MžÕóšŸ E»˜‰´ýsÎdT)å¼ZèôàÓp•&¥tc‚sÌ9…ÀiiÌ%F†(ˆ*aLôžLsÎј±ïû¾Gkíîáa4fâþþ^r77Rʦiö»Ýæî'IïÃù?I§Í÷M j¥è¯}߯"ùç4M@ÌŒq¥Ø„‚JBDÆ¢ËÙ„s1Ê¢)=b·Ûõ‹BIIð´Ã|’ÖûBšÔ•ì8Zc”Ö‚0Αüç4‚Ñ©æ»H4˜jÂ<©»""L8礉Bi[ž¦¢‘~é7©8Sî‘CȤÿ—?{f­ÍãÇqµ^+Î?ÿÙÏn»î_}•”¥òÍs΢@L!ÆP}Ÿ…R‹å²©k¦uQ–¼(¬÷Èùr½¾¸¸øÖ7¿yv~^…sNÔZ›Ýîj»}üÁ'U‚•Ö)Fˆ Ÿ£q.p¥...6› ±rã9gŒÅœц¬ Ö–Œ ðë:£qÙ¶Á{ßuŠ1»ÛYç„s6FDôÛ¸‹º(8çž±œ³1Æ#Š‚\R[›Û÷T² J~<Œ¦Ù/"2€„§."0ª¦±ðA˜÷ŽKz# i9éÙ¥‰¤¥t”ò0Y)%ÁyŒQH‰”l“ÁKÎÔ˜QRzï=R:Jñ™’óÞ¦ä½&É~¿'Y~kH|#í÷ûýfÃ+´~õê•5¦(ŠJëÕjeöûn»¥æSš‘!ˆøÖYœ±£~)2–…(Û–)9'¾E3Æ#µÁ±¾ïÉ2§ ‡K ¥´¨MŒ m‡SBÄCÎ!g7ŽZ)­5’flJ  R@Œ0åbòŽ‚iTBSË_Š<@ZñÓuHŽ-_&k‘·ðèõ<Ïvi”LÍ@ *CŒ€È„8i[ß÷»›)æüðððêË/€¥¼wÆdŹÐÚ…Rª¢Zsƀ󲪪¦Y-— Qi]×uÕ4UU­V«“õúù‡J)“µHß9*Ó½1Ô·H †œyJ„'oj’K@!ˆvô^š@›_ ÷Á¢sS ! º. C[–É{Áy%eQ–)g"‘­pNÊWè=mêdñCÎß’T&mžqIħÖ?m‘’1;™ïÑž:ûlÒã9<&:ÏI – GÕûáÌŒQr®9žól?Ÿ-»ãò IDATxr2{˜ËŠØ¾ïC‡LÌZ˜ ÏfjÆŒ±}¿Ùl®ß¼1Æç†aèw;5é‘眻®ëûžs~vv‡!†N©è\tŽç|(çB€I ð°?Nb­tß}GçꦙŸ æLjßt¶ aȉ‡œ™9%께,bç™4Ú'ø8Y©Î¢ªª¶®ûœ ëqêkQSõxNJyÅÛµõ.áyÄ9'@ EÝüs’™Å 09s€Œ¨á–ór±°ˆÝÍ eÆcß›œ ”²lš*F£—².K^–?úhŒÛ¶m 1I$­OOseQ<~üøââ6ÛíV ÛíØu1F-ñNV«¡ë,Y !”BÒ]ŽQJ™&µ,â Ϋªz}uÕ Cιª*.% ‹b!å0 9%!Dô~4†´zëºÆê²ÌÞ[çhê%•J!PUfKœ3)óè}×uMŒÑ9*ª©íæ¼W“Uu>héç e>ïôi2Ê;~v‡|'ç˜'Ë©‹CÚ6Œ1æ=›¤QJ@|’o¤Í€žš˜ú:ó¾œ'|"IQ¤”îîî¨v-ŠbǺiøŒ½&yÚc)Ù677ŸÿøÇûý¾.KÁùöþþd½¦)—R·m£Œ]×N áãöዪB„©N”såœüÔBDÒ¿¢ïë¬Bôbd1J†(“1.%ÆXQб4ŽÖ9Õ¶³”RW'rc€(•b›„ ‡vI!ŒµÖÚ`LQmÛvûýíí­@bI挈¶Ì‰GO ñ3hóÓ%DNÀèÑÚœ3‰ à„L3È›±ÙSœMþ4uB5 ¥@ˆÜ4ÖÞn·¶ïCYªÅB<þö·ÝûÕbñøÉ“qcÎMÓCÔåÜœž&Äz±@j¬ÜÎON8ç˲lêڣƒ¢»¾^.—!„lLݶÉÇØâìLTcL„@šŒ±:¥£ñ8÷S¦À…àBh!$cf±* (΃÷0 :Ƴ@ƉƘCJÞó²¬i@ª”'ŽçT Ð…ˆ’s­TJ…1Ö46g@L)Œ¡÷œÍBH)kyQ`J4Y ÖZ³”öû½,Š@ 3…ŠRHβK˜ö\róÛõ=+Ëåj%rv»‚óÕréB¸¾½µ)­×k!ÄÃÝÝ~¿ÏÎiΛºι­µ·4TŒ1Œé»îZJëý«ëëóGßúÖ³/²”6¿ÝÒŒ!Dï€ZºJk·Ù)¡µÆ˜ç¢(NÎÏ™””H»CŒY)ÐZûœí< ã\)ESŠDpjÚkŽs1Š4œ[MAeŽ”È¹âœB&¤hbÌ!ZŠ‹œÕ8²œûÝÎÆ8R&€M×”%£wžÊ4FÔjƄ֊óѹRJÌÙõý£³31²9zïøo^sd⻥ã˜ÿÈqmŠaöËöæã}T1ÆAJ(ËB몪¾©Ts~^”åúü|0†kÝ,´s㸪*oí`L!H)ÏV+DŒ!pƨ¢Øí÷eQ R¥žìr„¨Û–~)uùyYZÆ\J@LJDQ1–;¹§c¤‚¸,˶m!F-¥8!„#äûQëŸ(]Œå©‡L»2‰µP¿äp~ÁAêÿД&àùF¤sœÇœs))#fΑ±Ãn¨ç<Ç纪ÆÉà…¾Rž]oÉ´™sÎXN sVR¶U¥ÊR f2âunwo­5û½PjØnsww~“µ›q¼Ê¹-Kã½GBˆÑYk‡!SWUˆ±ïûû®ãE1l6f¿':f>2Í¥” ¢÷…ÖÍb±\¯‹EßuZ)ä<­<ŸÃ³ û»20ƒlކø5~ìÛåJ­“÷iž‹¦tÀ¢¤”cdŒEÒJÍö}Œ‘l&ÝÇ”¤Ö”uæ›#*!xÎ{öl±Z¡”~¸Rl±Ðu]U•éºñ榩*Å99:9窪º¾¾®Ë’æoã8Þo·mJQ)¦TÇѹ®ëê²Ü<<,V«õɉlr«O1"rž&Ð#'úD\JÓ쪪mÛH‰%]!ä£Ö0ß{‘®ùõ÷lzç@ßaB~;"›*RT*Æè½'M4Ág¬Bi­TŒ-€"q)ï®®@!„(г³3³ÝVZo¼g)ÜKIIöwë·0Æë—/YJöêU?Žº,YY Æ8Q9GjVœ?F’]%3œ6<-e!eoLpN0– À…˜£<‡"ì7~ð®šïI‰Œà'Ì™çLêB äjŒŒÈ²R ­­sZk­õhmŒ±( ¥Å$Q“B0ÆÐL¬¬ªù¤åœ1rb6Ã0v‘gÉ‘"#†”ö]‡ˆè}ö½O!XçœsÈyʹë:om-%ÏÙl·Þ˜ûÝî@íSŠ¿¼(TΞ›±²®Ë¦AΉY’i€Æ9L]: €\)ŽH߃¾? ·ëj^¨G‡ýá½1é|·çýþíëâ‡j%–¦©çß•ì%èC"bÖ9Ï)1!çÖ9kí¬¢DM@škÔK1’N¨‰wòv —Ršk÷ÿööõ`;ŽÛy§Ïï^@z¿ ð ÇûÓünˆIÊLM^¥Ýý0ç2ç‹¶MZ眳saðî.;×9×)uýÕWn·[6Íéje~öþC³Z‰ªZ_^e©êš—%p¾lÛoüʯ°œ?~þ¼ÿÅçŸÿèG?z4 eÛ1)9DV\Ú¤9çÑ9œ6}Üœ!%-¥–rcô¾( !D ¢VL5NœCœ€{0¥L˜3#u&â"r.¤$ˆbÌ3Fx¥ÖR)cBqΩ£b¬Rj!Äa1BŒä˜¼'l’_:ˆÂ§ºÝîêúÚ9WEFtÎÙÆqìDZ*Kž’éºì½äܳÙ횦9@ÉII9%boX÷#¢”Ë”S•JLë!çs«+)Ùä°"‡n—’48ÙDgÎÁ‘$Ê{‹g>îÞ«h¾~åc„ÉQþEÿŒB‚ML«”sŽ1Å(I·Ž„-gK"Dk-—rt®0F/’¶iR[#q8@ɉßC]îJ©Jˆ¬Ôæî®¨*Ò:Èï}ÊÿÚWý¥_齿¦#Ôï×þm§ûÝûõŸ§]‡!úÉPVÄBrnëÜRÊ«_üâç?ý©ÙnÍ8ŠœsQ Œ‹E¡[,ÒÙÙ©R7··ÿþOÿôv·ûô×ý“_ÿõòìl? ¹iêåòÃ_ù¨cER6M³Ýn¥”çççöêŠÍ­]!`j“p÷1Æ”â”m&D¢Øsšw)•'16i†w1Æ&¡Kœä³pbs+!¤”LÊDCmD¡””ÒZ[ô¯Š1Îy!¥Ðº»½u!$çq$O¯ü~/¤LãhSÚ‡àc,ŠB(•Bð¤hÆ9g,Xkv;7 ww_|þù0 «ÓSš‘ïcv»]»X(DÛ÷˜R¥µO)¥äSŒ1­Iã„€•Ö‚óÄÍQÓd?H:T SrÞ‡ý^îv¤æMjÖeI„Ò8Çc,Šb¹ZE1r!ÒDÉ&U‹÷¶òù™ç_G]Æ9öq6“›Ý¯fÍÚsã´ÈSJ’±äýØ÷\Joí¸Ýö÷÷‹ªâTóOÃpD<b”ÐÅÈ&Áœ³˜›ŸðµíÿW¾sè½{¾ó»4Âãÿ”ßMÜóä¤Q ¡9w)‘hy"á×a¸îûf±øÉW_ýßÿñ?²ç…íz}ñâEYU•Ù9™Òùrùz··ÛŸþð‡²(ºrÛZ¥ÎB8çüÛZ‹¹‰ï}Y–wwwÃ0¤Éó=!’Izˆ1æŒ) âL- ú@òZë0¥9FÎùÜu`Gj“|bŠÑ€›$‡H•Ÿ\Ê0 ¯òÔîË“ßU†ÁÚ´Û9çFcˆ•’œBlº®ë:âûïw]—ŸœŸCÎ)ÆD“®œ‰ÕF 7Žûív·ÛAÎíb‘#G‡èý°ß;ÆXŒѧÄ«‹C 1FP "†à…ÈSžÆ"Ĉˆ<ç‚L c}ß×eyY1–S¢E@þÞȹY.O/.ªºw»9 ¥‹…ŽƒÞmRÉÞmÒÌ1Ì&¾"æ 4Kñ9u=æ %ŒĘxÎmUEç „hmv.ãñ}¯È¾E© À„Ä@ #v|×iòÿãü0‹?ŽŠÿïø^4_óyøÎ5aßæ½ŠþÀ&xÇ{¡ˆ!l´”ó7Oˆû¾Ølêº>ýðÃcì- ‰¸Z.wÛíåÙÙ‹Gº‡´ödµú÷ÿößþÅŸÿù‹o|Ckýò‹/ncd«U'Ä.çO^¿þ„DJ™Ö/^¼hªŠÚ‰ã8Ž!8Î ^ñP.äI$¨4Ÿ2Lò9!F6ŸtÁ”R‘t릑LM©º®i4Ê9§*)F{ç ç˜sa0&ÆÈ• JqÎ=]ï ÏàÆqÇŒØCp.ÇH`¦ïß¼yCÖ!¥]×É¢àR.×k¥u‚p¶)Fž³RJ×5ÅææFÑ\$Æè\BL9³œ‹…s.…À9‡ûaRªº¦lÓ§”+…`œGk ÞÍ‹9ƒ÷BÁö=#Æ4@•3G»Ù°²LGÝŽL0:!„ÏYÔu½X,¤”÷1Æ¢,óQþ8Øh%½]sÎg#¼àèTœ s@Ò·HDÊ;r'%u:+C’±¢(BJ@s^)µ(K‘3Ï™O/"2€RRJ馩bÜ·­ÖÚy/H]ÈȦâx>Êg± €yýex+Qñõ„#µˆùgè›!ÙwN‡ cŒ4U£ÄÏB)¨ªJk}uuU–eÙ4WWW}ß›qãÕË—Ã7¿YJ !À0T!¼¸¸ˆ1BY¦ºæ)1²œÁ¤ 9£sRˆHöÔuÍb ÆHÎ¥¶÷÷ɘèœÉ™…(Š]Œ(eJIr.R¢’XrNŽº®…www’óªªvû=Aç<ç€d.¹Ö¹ÍnWr¾¹»3¤gÁØ~»®‹Ö2c²sÃ~½/”J“Rúœ¢ë:Óuf¿'Bõ @d, ‘YÎWªmÓ÷2gàR¬93)1çȘ͙)%„@)y冠6l--S‚@Œ)‘Üõ¼>ób¹ôÞ3­YYJ¥î­õ÷÷ÿýw¿«—KcLGÄœ9ÉX2¦W+ã6²Z,nß¼!¤¹ÐI² ×Îûq\,À9ñ3¨‘Rúq¬ËÒÇØɨ6+YÛ4wÎS–%É›—‹Å“’'mÓ!¼µ1Æ`--x–3AcŒ!g^U÷»Ý¢m×ë5rîc¬Š‚yÏsf)c !@Ni±Zu㘢Âz/¥lNN«Á-ß6$‘òàišyØïá {|áÔ;ùOH˜J¾ãßòv›v””›1…½ßßßóõúdµ€—_|ñòåËf¹lªê|¹|trÒ6 *`ÌëW×?ÿù¿úêƒGÖŸ~ÚÔµéºûÛÛ«ëë‡ý~|õÊÅžóŠ1ÉX-¥ÌÙvÝýv{^U"FjrË¡\,ú«+›ÆÈ ÉIMp!HÞ<„àÀûHP„”ÆaPJµM3ŒãhL•*‹‚è3ó·…é{e!öÛ­D ã˜rv}ÿps㬵]—lÎ6Æ$„PŠDïk)·÷÷ýnGåÓ蜵6#rTÁ•RZçœCßgÚr–R²¢ ’ÕY›RšO˜@ÂŒ1dlµZÕu}ωÆyòãcˆ8÷îߎÝrÎ9“ËÌ 1TßÂ[û ü{“'IÏ3?ìÝß÷Ûr¯­«zï  Ám¨aޤÑA!Ú°sðÁW9tÐÅ+B'ÿsðI7é$KŽç ‘¥Ñ,"‡¤¸€¥ÑKUWUV®ßúî><•‰¸ÈßÑ™…Êüž÷Ù~KŒ8xœ ¥"c$ç\×uãñx»åb”B(F` f%FJižçyžƒžò¶»‹;y¬×ë.X{}K@ÍŹ#Ä!„9ÇŒùA¤8rÞ8‡(•ý~ĸњ ÄCÀ„kƒsJ©,Ic:Æ¢icÄÁ¶½nÞô1rÎÓ4eB@÷«€”#D뜵V¦©CÈv@–išAQ$R¾c¤TfYV’s£Ìs·\ÚõÚ:Bð3Jy–yŒ™R\)Jiª‚üLˆà< ĥܢ×sÖú¨ÝYas #„ò<ÏÒ”1fs!¦-Ñ6nÛFÚ¸ȦGXŸ¢k§Ô{Œ°>íº®qÎa\:Wm÷z¥êÀ\Ö¨1LŠ1òFùJ)JiU–²ß‡Þ/ng›„B¤pŽsÎ¥@”ÆM¯È„¸¦5†À)iZ×5§ô:kÓ4ÅRâºæW*…å$çã½ÉD¶ çÆÚ4M˶}yvfºŽ„@¥Í †€¼§wÞ#J³Á€¦ég™ð³ ù5k÷_y}!´¾Pyîþ7lªj´‹³ÄÖÆ:;ÇˤÔÞ{kÖ”1•$`"ˤ<}þüãO?%IÎ×WWј„RÉùñÁÁäèõûõb±:?ïÇ£ñ8ISO’$ϩָë¬Öëù"·W$$n¸#›ƒ˜$RîÇ…”UY¾œN«õš'Iže!ÉGˆ ¬‡zµ$I‘$õbQ-—Ö¡·o{p ÆGGÃñ;§Û6Ésë\§µAÅÈÓTõûI¯ÇB`R:ν÷‚s.¥Ñ…`Á]0ËM…@;ó! Àâ+‘2MS)eÛuÎ9ÊØvªF6c뿇€6€èêáû¾N!@„L¸=—µÖc0Kb™®s`G㥔'‰‡MÆŒsL©sx€¡$IF£Ñ`0˜/—~ãš´=@DÀBˆZ d£5眇Ð…ÐzŠàÚñ@ÊÒ•çÀ–æi:®Kè^2ú£D‹¢I„zºè&I¦TŒsÐ}URöû}.„µvÿððÙééãÇk­IÈûký!­‘÷$÷Cð!ð4Mz½Ïï 7€¬mHö‘° ñWác¶kϵ‚!0!ðöd…–_O¥1ºÎÀ’‰qÓu‹é4b1ž­×§——ƹ´(ÎÎΜ”ÿóýÑ­ãcWU ç*„¦,{IÒ:÷ýéŸ~ø‹_¼xú´¿·G»œÏO§ÓÁá¡Ès¥uŽ1bÌ6Mç½kÛn½ÖM3ìõÞ½ûàæÍÓ?Fi:É2³Xx„(B0Œ¡Yšé:è!€^ÌHoܸÑëõ!ÆãñåÕ c¬1ˆ1º‘F›¹_¢TV*Mo?zí5!„ÖzÜ4XÊ D‹1¶¶è÷‡“Éh0ðÆtŒYc¬}‘±¶6TU¹X¤J€®%Ä9gœ,?”@Bˆ½ƒƒ$Ihˆ1Ä9ÚîÄ6„P–eyžK)­µÚE;áM÷_ÞÔ3d»!„é ²½q.þªûa ›ÏkÛ{˜9ÇØu‚Àí=Þ)ˆt†P÷ÂH3ç‚ÂfsD^°U2!8ðr‰QržÁh»G(2Vdc¬Ÿçà2˜Ñh”eYk-K"¥´(ŠÞ`?:Ïó4Ë>Ûs€2z–)¥ªºfŒE!x’Rι’RIy°·7ŸÍçלzç|P!HƬµ‚±çMÓ$y¾tÄ>;ƉÞÇí³‰´AœíŽa¶ƒüK+û_Ý nòÆ„ÅÚxåzï}÷ç§§|ðÁûOžìß¼)”úôÅ‹Jk‚H’ßþö·ÿûôö'“nµÊ8ÇÆLOOÆ­Ö?üàƒŸ¿÷Þ‹/¾ôÆ6Æ‹Ùìùt*'¢T6ð~ßÇØUÅH’B¼ùÖ[ßúÆ7ö³l08¼}ûh8cÐ:ʤ©ã¼Ì¦a D“:çD’ø;ç&ýþþÁb±XÎ!¡ç!J)‚EHÚ¿uër¹l>úÈX«(%3B0BÁ¹kOå Þ…p® ! ‡CÎaiÚTU]×\ˆ¦i†½žµ¶«ª~¿O8‡5QkÍÓk½Z.cĹ®ªöê¶Å±4µÖ„F­%€a $ë÷÷ïÜY[k_¾L„àŒ™Zc¥I¯WôûÚÚ¦®åpøàáý½=%%ÅØ‡À(`SÅyQRJƘ”r<9ç®®®‡Ãáb±ˆ¯–K¯EÈRUÕj½”"ï»®”I½^cÆŠÁ!´.Ë2„€±öæˆy’dYöäÙ3•çsýÉ$Øƾm¡¨»ŽqÞ¶mŒ‘Rj´F„0ç\ôžl{~C~ûåk;Û'Ù@ºÈ.Þg‹îûüŠûç®ë ñ66n“½½»~åoý­Éj4Z;'‡Ã[·oùË_>HSâ½oj "q¾M­(ËŠÉäç|ðµ~¿lÛ'/^|õ[ߺóúëÿößý;Éy.„è÷Û¦i¦SMH2•1êÉD2ÏßxƒííŸ?=; ã±m[)eì:„q˜äܵ-¤¨÷”RÉ¥4I×uzÃcHÓ”sî< ³[hïµ£ÁÀóÞÏÞ6ÍéùùÅlF¥\®Vƒ~»p3Ö:ïÑ·$ ¥ÆÎ9@úkãÆWô°9çËå’sÊHð*ÆÂøº"ÝO M]ª‰!(¥ƒÁrµòÞCÄ]†RPW[º(жë(˜:#!„\U…¦ÑÅy±ëc0ÆG“IÓuÆ,„‘Eš¦“4íª*ìíùì5É;F Qü€µ1­ÖÚZ–÷B(!†ã1O‘$Tˆ‘”LÊãÃÃ<Ï‹¯ëZ)E Mƒ Þ{k±sRq®mÓ4ZPŒ ˆ¬1V–¥µV—e´v}uôzëªjºN{ yoœ‹Öb„çØÚki<ïmÛ^3}Y|]‘ÿÆÛ†Í¶$BÔî¿BÔù¤,üÓu ±1KàÐn!ê6Øe@Lz„ò~ÿÆýûããc9ÍV+ã(Moîï+„\×ï©Ö*1†ªš•å²,ÿí¿þ×ÿãüë÷ÿ·þÏ+c¾ôõ¯ëoÿíŸ<~(파%”ÂÈÄÅHKnÞ<|ûmyçZ,º,{2›Îfi¿¿Ðy¯ÁÎ!B@S6F¼ L•eY!HË~LA)cÀë® H‰Œq˜îxœëEªÔÙé©w®î:¸«΃µ /äBÝìÁ0ÆÖZ´ù­1ºëR¥ê1FÞǘœÒD!J’,M!Á{çœ A°k. äð¦.eŒ¹¦BôûýåjÕ¶-áB9d\4Œw®©kGiÓ¶ !’$ ¥BJí•R`L(UIBè´NÒ”ÇÈ ¹ÂZ[ôzyžK„µ,Æ€q°;ÇÂßB„B6F ›P@g SŠ… BP)UšÊ,ËÒôèääÑ£G‚ó4Icm]ã–ó¹5äƒ)!ºë®®®¤Rˆ‹1Zç¬s±ëƺ뼵È{@êwð)1¶Z­´Œ¥išîh¨Âëix ôT”Ò¼×;(! ãÑ``»®±6Hé 'dyî½ïuÝÉɉ¶c<A±8iZ5Íh<¦RV‹…×Ú ™ªë½…÷8™”2!TžÇÅ"2ÆÓ4 ¤”ýñøî½{7oݺuûöt:].åj¤u(–Z{cx’kçWWÞû,˼µ¦ëfÆ4m;›ÍbŒp’BÅQUUŒ1µ!TU•±–1¶,K¡”JSØv 0b¬Èslíb>o꺀]+ÆUÓôG#ç½8¤sÑÚÐuFëf:uJAëCX¯×år‰0f0 ˆ ϸqqù qˆv¦šq£¹m& ´@þ߈) „€Çº5õþì=!’ÁÕ9 òÆ0¥Ü{kŒt.xµ\ö‡C„Ð_þÙŸýÿìŸÕÎÕu1„B!ŒAh¶XT]7[­öŽ÷ÏÎç'÷ï?ŸNõÕÕ (Æi*½ošÆ!ä¼ç1N’¤:?ÿþŸþi³^cŒÎcQ8cÒýý T”2Z è^«uÌó<Ëšõþÿ1 8˜$‰­kð¯çBôû}ÆXë=e ÐÆcä=“ ï BƒÁ`´¿ÿâåK?›%Y–æ\!¤„ Á(•Ka)ežç°N…ï½Br^dY–$RJ…C¹0°ì¯ (!@Ë G@ÜÒ>Š16M-À>Âjw5øƒß2¥@êWJ ÷ö¤”,Æ<ÏMÛR­Ç·nyŒó^OQôzJ©HÈÞÞ^ðž1–Á9Œõûý"Ms©«²<{ú´\¯! m†“(nD_qŒÎ{ã\kmàÜ"„íLÆãÉÞÞh8lÊr~yÙTUš¦4äøóÔέ—Ë«ËK„8gͦÓår9¡@h«Š1†C˜Ïç¡~¿_·-(£ ƼµAkï {O¡REˆ !R}ýí·›åòoªjuuÅ¡içêõ:6 Á9‡CpÖÚ¦TÓº,1¥Á9˜Ž‚ת‚]CÕ03ß|íNGÑ–a´»=!4ÁÛž˜ÀrS—Âk®aâ”ç® càCF&dÔïOçób29º}û|>ÿ_þñ?žžž>]­Ð` *J•âBˆ¢ Œ5!Ü}øðèøøþ½{¯¼úê²ëÞþö·ßþÝß5?üáUU 稔Š&¥ñÞxŸI¹ÐZK©ó¼QÇxãr0¨C0ƒA, ªTX¯±µ)çë¦éÃÞ—e)aÉÃ9AH‘¦©Ñ¶­Ö)'!Nkç½iJÆ mŒÎ{‚PÕu‘Ò€±‹Q2Æ•¢J¥½Þ0MñVVh¼†Œ[«µnÛÖXÛq1 .Ö&BØÚº†óÆP„h–ŒÁAVk]UÕhcIo +‚1¦HÓ-x*M9çPÀÀ*Â…J©$ÉóüèÖ-¥E¨×ë!çlÖ½^+•¤ép8ôBœµRJŒB(!¾ë„,Fd- !“2KS0¯aJÙê§”â¥ìÚ6mÛ{£SjÿöíÛûûûRÊBUUÕzÝ”etε-ˆ#7ëõz½ôûëõ’´Z뺮AÚ3MŽb #dê:Äè•"Îá‰1cŽqäy¿—eÎ9jL’$Þûn¹du®k½^·‹….KFˆn[×u.„êòòZVÏ{gŒm[0˜hCÀŒï)¥*Mc”Áùõžªè:~sÜM†~ãÀº 6ør¡^›©Ý^äv…ÙwR.Œd0c‘·éNBWó9f,Rúr>_iýd:ýï~ï÷¾ñÝïúåiÍœCÖz„†£Ñøð ñøÃ1£ÃÃÉdrÿÁƒßÿ{ïøÑ#5.ËrvvV5 OD©CÈ„„xówÆUUu¥µ( µ·—Tzú´Í2ÔëI)}]sç8¥1Íl¶ªªªi&ûûY–qÎãFMDJÙUUY–’Œ1c:­A9‚¶Z5„œ÷iž÷öVUÅ9Wiªò|0”Ói¼^K»Í~úZkðÇÖ”R@WC´éº°˜\,U]çy>_.Ó4eR“!¨4( mʼÝþaŒ1NÓÔ£µîº®iDi8¼&LÀ E)ž$ÃÁ ?ŸçEqçÖ-ÎX a8P„(Æ©R‹Å¢( Øõ‡ÃΘår‰¼çRç¼1¡U]·e™$ bY–ëå28w=®ƒ­7¥”RI©"“2„ 9ÇœÆD–G£$ËÖUU_\”Rår½—„çLÛ¢½Öåryþüy^„®mW]ºÃ{ã1c¬ë:Ð(H…BèÑH)¥¡”bïŒ3pwÇ8ÆXÍçëå’#$F£àýúê cŒööþã³geÓ<ýàƒ„±qž×ë5!+ zÎðvN1¦ÒTy… Vž$Æc-eŒ8§cD›%ÞnçöY}~à)) !ø-¢—1D)ø_a+aŒCp!8ïÈÅ®à0ÓQŒÑ9¯Ü,‹ŒŒ¹”YŒø÷ÿþßùÎwnBû‹–ËkoPJQŒ?ø‹¿X§éGü7Ÿ|²ïÞóóóÇ?øÁÍшŸ“ª:(Šª,KPòN’R©{o¿=x ÷öšƒƒúæÍF©eÛêétÂyÆX½Z-8_Ïf«Ùl5›=öÌÄhÊÑï§Î!ŠÁ@¤éål¦qÞEÁ„èIÙ›LZJ‰2I,|ŒÎYX0á±Þ JƘs cîœ[,.‹f¹¼Þ ZK8—RzŒ›¦Y–e–e˜1í} ¡ßïÑl­5Ö–eé½—Iâ««j½\–«Õýû÷³ú„˜¦™N§¶ªbYâé”$‰©*™çœ1€G»¥!p­™_]á@µ „Bp¥B"IŽoܸuçN¿ß¿}ûö¸×뺎†PEÛ4§¥séhd ±±ž>nš†1†¼Ÿ_\誢”ûý~¿_$Ic Ïs§uqx›Æ`L• çã1°"ºt]cÚUQB¸ØÚr63MÓ¶- ¡b¹X€š£”N(DH¤t˜ez±ïåù¼®­µã~¿žÍÔx쬽^¿(RJ©14Æj6óœo}cZ·eÛVRÍç’Rcíù{ïÕ«BH0öRË2B díœÃØyß5 "2FCÀ!Ð CH‚•kŽcãœÑSêœÛ°(6.Ðx‡±½üÊrô—‡¢Ûkw9ñëž³{‘]H÷öý I“dÙ¶Vk‘¦£Éd²¿ãÖ-Îj[Êsd-’Y[_\üäÝwðäIÿèÈvÝ ÏŸ}ôÑÿê¯>|ÿ}Ê1œ¤1kíòêʃbÆ Äê»X§È9d 1Þ¹º,ÍjU¤)ÁŒµ2I8ç-¸PZun[‡bLÂÒt5Ÿ;­-!ó««óõ:Ôu9vÆ 4í€X,¡í:d-ãy-’“2ãÀ!D† „€$Ä•¢1Æ>S²†¢±„DŒ­1$(OÐŽ)7ÃáÔm~a¼‰7&¡»ƒ™/„ÞÌ…!ú|^ýoíçB1Fg-‰Q Á…ðÖνÖþ¾|öìÙœ?{V®V’óó‹‹¿øÑ¾÷øñíG¾óï¼ùènšŸüÅ_¬¦ÓÛ¯½Ö¥)áüÙ/~¡8õÁƒD©Ð4š1}ëÖuί׽¢èQºº¸¸º¼\­×W/^Ȳ8×Íç®,1Æ®m !³õ:r^–%˜`qØÑí LðBxqq1_.›®ã„Ðëø. c Ç|žçãñx:®Ë’âc,76ÎyžsŒBÖ9³Ñ·'!¤I2 Æý>c¬‰q?Æh½'ŒíÕzÏÛÛßùŒ''½4mÛV ÁSiêBxv~b;k¾{ïiŒI’$½m°§„)Ó,;<<|øÊ+÷ïßÇŒ1£õºi€ÅclÛ¶5†JiÚc¬ÛÖZ9¿t&Ú‚qnQ×uU­Ë2Ës£ÛlªCŒÞ¹`-yÈctC6¬Nd­uŽ„À2Mc«*£ôæ`I9N+­SJ±s¶m˪òÞë¦!Æ`ïuÛ^„€išFg³®ªºÕЇ`Ökë=És‹Å8*E€à‹1ì8ør+…”BœG°sÑmÐäh£2w"‚*n”%çx#åv½, „l%wà aóË™ð‹/ù%™¦_i°G×ÂUxó×Ï!i¶ò9ÇCPIB¬-çóª®ÿº,YÖÍç¿÷ÞùÓ§—/_VËeÓ4OŸ?±Z%ÇÇãÅb1,Š£Q0æôñã4Ï]¯·lšŸ|òæk¯=¼{÷¢ªÐÙvîåtš £áPp¾¼¸xþ‹_4ÏžéóóúÙ32Ÿ#)¹÷À¥yÎÒ÷z"MÖeY¿×K„Ðe©6&ÞZëÅr‰Iû}™eaG‘`ûAaŒ›¦Q„ôz½^¯7ŸÏѱ ÓÔz#RÎC*M'”kÓ4ld/Ëò<÷ÞGkÇwîDŒsSŠ’å¹ó^¡¤<>>.²Ì{Ь¦,§Óél¹¬ºŽ24!RO)¸Y±$Ys1ŒGûû“ÃÃGG{{{GÇÇ{{{ã¦iLÛ‚µ‹°Åض­í:‚qU–8X¾³Án쇠ÕÇ.ŒqÛ¶u]§yÎ9§` BSU80„ðÖZc\Ûêc£Ñ‡ ‰ÆèºÖZ·Œ9Œ×WWmÓt”‚ X°6"´^¯m’HÎ×UµD´EªªÒŒ™®CÞóœe™·–J‰¢`‡F¢t«:ÞN€Ç”œ(2†¹Æ4ÞáF©R4k!XÁü²€°¥×öl;Âóú³=Úa þò–m:ÆÝL¸[Ín_þ+#s7ø¿À8„”±ºë¬÷2MqY.Ÿ=ûð¿üI¶vv~î«*†Ð¬×Ÿ|òÉYÓäy~xëÉóUYb„Ž3B–Z_œ5e¹l‚ño½ùæ;ßüæ³³3¿X4OŸ–RfÓñøùryõìÙ±×óüб'«U5š¢ài…@iÊ…ÀRî ‘¤iQ”ÒDÊ !—²®*„PðÞj Ó‚1¢óÞã1¦Rª¢@”ö&“{Þ{øðö­[0ÛìêºkšªªR)!Q׫UÓ4mÛjØÈ…`»n±X4M#¤å«4M)¥u]/—KØ…€+S*¥ï:v˜1ŒA)‰Q·­¢TÂòÖ†¶uU½wBPcsºª¼ÖckL·Z5UåÊ2cŒ!”ZkÛª¢1&!XcªÅÂ…/ c̵â5!Î%%KÓ‚ëõ¬µ!F"%¤ÏðN`ÛA·n\æ¶lLJ"±ü˜À$‡‚ ͆}!Ì”œƒ“ÏÖ¦¡”ÒM&üüîá—ƒp÷ñÏâðóQ7ñ¼ÌŸË®;÷×ùc nÃ;”ÅëŠiIFˆ…àÚöå³gïþøÇwOö÷F#“$ÞÚNëeÓ0„î=xPÒ3›Í:cnåƒA3ŸÎ?==í¼ñê«ß~ç×^ýþŸÿùçÙry£}ï=›¦Çãñk‡‡¯Þ¼yc0øPÊê§?u1 „ƒê+c 0™LF£ÆyœÓm‹¼wÎcªªz6¾û7“¤Øßçœó€×¶½Æ„ ÍƒJ)n‘üºë‚ÑâÞ{cÖëµ”2ï÷OîÞÝ›Lööö²4E“\)!媪²,SI’dYš¦.㜔R¶íp<ŽÎµm[U•s.SJ0æ´!P„8¥œí6º)ccˆQ&ÉäðPæùþÑQ¯×K”BÞ—Ëåz6«ëúÚ\Zk)eô¾ª*ÏÚtÓ¤”â ãaï¥ãh Å8„b¬’Xê1FãÇX ëªJ·m qNCPœK„DŒÈ9S×ÝzÝ®×µÕbA Öj­‘µ”Òh­Ö:K’ÚÚº® !YQÔmÛX;Î2Üu°¿ŒFÉ`À­õÞ¯«ª5ÆÅ(”RŒÕÖvYƸ” ®Cp0½1"sWcôž¨ô܃# ØiÁ]Žï^ ó¡)ç2I¥ò^/ÆÙÝj½íþØ.[b;˜ùB‚úå°¼~Âöi;¹î7'½_wýŠaÆ1ƒÁ(žÖçÓéó³³×=ºyûö—_{„ ùñüþÓ§‹ÕÊ"³l½^ÏËÒ†pãÎÞhT¢Æã›ûûßúÎw~ïí·û›ßD1¾~ëÖïíküèõûWÖ~éÎ?øÿàø§"Ô7æÿ‰Ñ½—ŒB€åíB JM&“~¿ïÚV(•Hœ ÞSŒ1½Ñ¨è÷ çÝrwJ ‹J]ŒZkFéh4ÇU×)¥‚sŒRã=Š‘3&¤dJìïß¿ÿÎÝ»y–õŠBJ)8g0aCˆ%‰”’pN鬭ªªÑ8]Û꺎1º¶ !䜓$©ÖkëœR*2&9÷`rè½wÇÈ„ 1f„4y®ò\·íÙ³g³/t×µU¥»Î¶­1¦+K@W´’1JPµµI’$R¦J ð©5;§»ŽsžÀ©cð¾m[[×\J °…¦‰më)õZûj­Æ$Ó4õjU¯×Vëe  EcÉç#äb¬CàIâ1ŒE))BE¿||LÚv9Ÿ'Ý»WŒF,Iò,›_]={üøòì̶-ãœc Ðޱ³ÈQº8Œ|€>ç`–ŽCÀ”r!dGGï•åƒÛ·¿õöÛ·7½(Aèá+¯\M§³ù<á<ŽÇd£:ÕbÓ¹ªªº²ì'‰÷~µ^¯§ÓLJð©>‘òæl–L&$Ï«ª‚½;Ú€`ð¦eWJéºÖÖ†`>Òï÷J!VuÍ¥ïíåY–¥é+¯¾úÖW¾cdœ3Î¥!c̺ªÊÕªŸçÚ{PX A3î“àÌž¦)WJk­ÅBTeéŒa”*B(¥mÛZçpÁ9‚18!ïCÛº«²L…˜]\­±s!ä\[×m]ïÇ€¿Œq¥0ˆ;Q@×xƒ¾b„¿¶ !Æh뺱;]" ¡[¯ÑÆ´xp"Ì//iŒÑ9Ó4ºëTª„€4†7F)•+%’„`ì ™Íçùx,Š36œL&Rƒ/½þúêââ£'OV]—Þ¼9¼qãÁƒo}÷ݳW_ý?ÿÅ¿¨´Î{½Ÿ¾û.sŒsDë¼×“ÉKçŽnß~øÖ[üÃßzôO&/Þÿ|2¹½·×3ø89YZÛ\\¨$I‰7YÖ¹ºi"!«¦qŒ ÇcDÈ(MÓúJù¦UåEBç¼?ܽF£Oò“pçŽUŠU¸ÉPÄZƘÀsnœãI¢CàJ®–ËP×Þ¹á½{d0ÅÞd2î÷Ü¿ïÖ-Θµ¶^¯+­!ç´mÛh½wkç`3æ±uíblœ#1®×kí\ã=¡Tk}Y× ãz¹ìªÊƒ1öÞck¯ ¦B Àywµ–yÏ1F`Á#öžRÊ !Œ B2ÎY¬E]ǵ†É- ¢ÖaÃÏî´®YãÛ68gé¼Çœ{ÎcÖZc!þ§øÉzý£ï}vÝ·¾ûÝu?|÷ݸ·W.¨ªî߸êšQÚY{V–âðð·ßzkùòååÓ§{E±?vMóɳg,I¾üõ¯Ó<ÇRݾmcdŒ Çã'ççûû“Û·çm;³– ‡Ãáð¿û»?ÿÑšº¾yrB•²„€.¨³–P @°@ï€bÌ’Ä… `jBže(FÊ9øáy„¼ÖË®+½GU…ÛV$ɪm#çÃýýª®»²L’qÞÄX{I³,Ïz´!ClÛƒÝ$Atl§Ý^äWi£MæÜm ¯3@šÆìõhˆ1Œñ5.Ä9´éVQŒÞû~¯CpË0 iº®6æÿýÿÁ#d¼'Œ]ÎfZk•$I¿¿r®®ªOžýä£^¹}›K™ ª×CBD!„R¬(,!l‹\oJCŒð1J)ƒ1cëœ1&nèl.ÆÆ˜e][ðÆAȇ°§ÎBie-KSÑïBzûûà®Å1`ÌaTãܵø/ä7ÿùrt[nËÑ/”š¿®Œ;ªhkJ§Ô†pÍÓ!d÷þ@A#8OÓ!¤µæ”Âï/‘œî5UµšÏçëuY–óõ!˲ ÏçkŒ !‹ùüųguÓ¾ „GG cnÜ888H´F7n€†ß+_ú•’oB?~ú”16}ñ¢_*Mƒýýý{¯½vt÷nÝu8Æý¢0]‡Ê‹"IŒ1˜Qε־ma¢IŽÒÑp¨Ëòpÿö¶®mÛRŒ+ï×ÖÂ\!) ¥5³–'Éþññp4úö;ï¼òàAÛ¶íz½\¯M]sÎÛ®3Ö6mÛ4 XÚÚ®mƒµ‰”Œ®ë`:Óºi0ÆÁ9c Š(W„ÒÆZ PbÅHB@”*8ˆ­… ¤”2J)B<n­ÕÚ9ç­õÞSc‚µUÓcLÓ¼â̓=¬Á&Fä !ÂLj¡„°$¡iê)ÍÉ¥DÖž=nÚ–òâôôt±ðR>|ýõ,Ïã;ïüÑþáÉdòŸþóþðÙ³œ±‡_þò­û÷ç÷_{íßùÎù¥s#Œ“;wÆ·naŒï<|ØÛÛC]wñäÉË/|Y¦œOú}D©[¯?}úô'B0k_|úic-K$¥Èód0Y†€íéýõ¦Ò@HgLk !ÄS7 B ²il­Ö:„ZëJë‚L’DJÊñÞ{ßh)Õ1*Œ±išJ€(& f > # áÚLöÚ(#|FÛíÓ¾Ó>Ky¿ :³->Ñç±Ý1Fã}ؼÏ6õ!„À^ó:Ù2FA#°¡)!£ƒƒû¯¾ê´.W«²,£µ&Æq¿ßX[jí¼×¥ãqô~6Öe™eÙº,WOŸ.•ºX­£Q’e0q„ Œ/_¾xú´m[eìÓÓÓÑþ~£õÁx¼ãF>žÜ¿ÿÚ—¿<˜LÎ/.Êå²Y¯—«•gŒ ±`Ì•%ê÷£1išºM×i­m×Y­ç¶ë8çµµ¾ë‚µÍrÙ–%§tµZù¶%Œ¢Yº··Ÿçª(öööî ƒÅbñòŠݶΘÕlÖ4mÛëm›Ö0çiÛ¶,K¾i}+‡cŒ¾ëÒ4e»I)c‰”ú)Tè‚6†SŒ±Z;­ƒ11Fè,ÖË¥ßÐí®o0*eÌ{ïŒÙö&>„`m*ÄõÁpÙ–¬…9ðc’„¤)æœRú•¯|%Oc¦ÔòêÊ A³lYUUÛìí ¿ñ×~ë·Tžž<‘eùêÉ F¨\.&Óë=?;ÃŒ¥,!ýÉ„)¬5Mæó'ï¿ÿá8??Ÿ_\¥ªÅ qõÑGí|þéÏ~†–Ëç~8¿¼DŒAÆŽÞë®k›¦í:¸- r„`´nÛ¨º®a†lŒI’Äzßhí ñÎ !QGiÀTF#ç"Iç"Ï“~?1!ãÉd0:窺F!äŒåB°ë8 thA¶C¿iÞv+U ê‚̶Uj€ášÃF6TÒ !œRJ)NSÎ9ŽQƒŒi×k ³UóykL¹^;ŒCµ''™”ËËË®m‹^/],ŠñøåbQyttÔë÷#!e×™¶íÚ|,žN§êâB3vqyyc0ðÖ² êšéô?ý›3›N&“·Þ|s/„éãÇZʽÁàèð0JÉ¥¤”êªZ]\\½|ÉšÍf³¶-«*•ò›o¾¹ÿƃ$ÕPÛ¶à\BÐuíÚ¶«ëõbqAÃx}qáµÎÓ´m[m-â¼Rî2Ë„Á¹÷~þóéË—ëõ:W Ǹ˜Ít×¹¶• ×#cLAœc›®ëqŒ…””I’°­ÖÒ^QpŒ›¦AÖ¦I³Þ÷”"”„œs]Ó ­}×ç*­­Ö¶iŒ100@!à«åòšº½‘‚¯^)_"FˆbŒ0Üaìúb &F„1&Ä œGÎ=Æc‚PÙ¶‹Åb½^#„zEá8¿hÛË‹‹jµzôða6}ÿûß—Œ©,Û;:ïíÝÚßãÞ½Ëóó¿úë¿^WÕ¥ó—/+!Õr9ýøãOóüùãÇgl»n~u•äùôü¼6fU×”±EŒóÓÓzµê´f„ÔM3_­ÈÕBhÑ4­÷DJ›²Dá¼s·-c¬®k(&a½'RbJ)cˆócˆ±óyoK…1"ƘRˆ±@O’¼×ëFI¯gŒ±Þc¸‚s¶•v…ÅÈnÙ¹ Â/ôxÛçÆvŸ¿{ÁnukbŒ8„kV8$@B8c’RƘäÜXÛ”åb¹\Ìç> !”óyÙ¶ˆóÆ9“,»1™ð4ìï÷Q†óB©\ÊßùÎwû}£õÅbq0R„”RÃÁ %¤wr²F¨5¦1a 癵÷_}õË·oÏ)}ëK_úò›oj­ÿä/ÿram¨*Eé¬iž?{Æ AÖ¾|út~y½oCXu]ãÜÉÁÁõHtJ벬«JpêÑ¡tíyãj8HÍÁ’HKb±®^ü ¸÷1À}Èß‘ê"@`8ƒŽY6-ŠƒD6Énvwu×\§ÎðM{¾«N±HI¾¸ç`7YU§Î·×^ÓoðŒ‘,#ÞS¥Pû@¢8g¾ëŽ//)@´VtËeß4`k4òJBèšï‚6è:ËxU1!P—ø$ïýüâ"çm-êá8cÃÀI˜±CÎZï=§4„pݦÞP cTYvÅA×ø{Ô™ÇgŸn a )¡ò|¼Y_áÄŽs@Cüm¤4QJ•¢œçUE8B¾÷曎±«Ï?¿³µÅúÅB 1ŸÍ´R“ ßu¡ë*Λ³³øoÿí׿þõÁÁÁKcNÏÏ^½Òyîb<{õêi–m”åâ쬹¼ Þ»” Î!\ÎfMÓŒ66V}z~^T¾·a¹l‹ÀblBEÁ×§š1F•âÈÉd p5O) åј—RJ)ù1µ(­•Öa\)„h­±–0¦³Ì‡Ð,Þ{ˆQ0¬]¶-'¨² ×N·×†7˜ïì-¾• ÿ`›“tÝÞ´?ï9癜Rßuµ—³Ùìüìl>Ÿ_^^Îf³¡ë(cÝjÕZ«&K)Ñz{www:uÖ‚µƒ÷‘R–çTˆƒ{÷ÄdòÓ_üâ (úùül±PœkÎó,{íáÃ;BìýàçÃUUL‰hš†2–†ÃÛ÷î…ðîÇà½;;[|ýõ‘1ÆXïWmcÛ‚1íÙÙj±ˆŒ‰Ñ¨*Ë»»ïÿð‡?øÞ÷´”Ƙª,ss~ÞwB 14"Ä¥”Wè¼÷œBVÈ8)ËÈPB@Jdˆ1,F躎ƨ•ÎužSBhŒJˆ”’@§Ð´–„@Œ‚RŽÃ̦ Ö€9: œïû¾7ÃcÄÑÿâò÷æAjœGï}5‡p$C”º™·çn7 7­„¿=;Às‚#=ïSŒ‰R#2Ñ.¡Á !ñžp.´ÖUU-›¦7æøääÃßþ–i}qq1ÚÙÞ~ñÅW³Y!„Vêë¿>:ÚÝßÿøïÿÞ¶íG~(S1¾xüøäü<äÓi¸šÍZ­û®kV+ç½õ¾ Aô}ÂÜÚEß÷mË•:\­ÆRr!P™Î2ÆRRBBÀÚÛÆ‚PB@…R¤ó2ƈ÷TJpí‹×”R΀"Z‹~iÀc,¤äS¢¦ï“÷”sT!1BÉZ~Ý¢xZ—};oâð;åèí¤÷Lø-˜ÈZ cíÇYJšóB)ïý|¹¼¸¼|òøñÑññåù¹Á;×v¤¤³L A¥ÜØÞ¦e™²lº¹Yæ¹PŠqκaHÃ+¦ÓžóÖÚ7Þ{ï諯zï9¥‚ó"Ïó,‹„ìß½[„PU•¦Miˆ”„sáþþþêùs0ƾzõøñã/?þø“‹ qï^,KJH°vè:6 Ì9PmmÉÉDÇß÷Ýÿã/ÿò`s³==mf3•ç(af­-² ¹¶ZÊa®%X EAð3IÉ ƒuŽ"»¶ïKIfPª+Š‚SÚ®VJ©i]sÆÚù<ƨ(ÕZCJMÓ ÆPïg——`-–|mÛÎf33 ”R-eL):çœ Þ_ßž8&H%=óœRêRº‘ÌJŒ€DHL)ÄHP§ìÛæç€.~䣜Åçë=Ü|7䑯HÖÒXxVBJÅyžçÿôë_ ÆŠ²|ëí·]×y€*Ï•GÏŸOêúìéÓZkcÓu'WW_~ö™Êó¾i’÷yžõå—hOr6Ÿw‡‡º®k…Ö—MÓ4 ÁÒøå²ÎóÈX‡@AÎWŒ!‚R`,j Bе±y‘eñ&…p”ÚŒ1™Ö×2êŒ]³=(M„HÎÄ”º¾›(¥È¢`¸V E÷bJ¦ï•…R‘s?  ã\VJ­µJNˆ§ a Ø%⇞©^«â¯[Çobïæ¾Ä½"cn­"RJÀ0Víî¶\©\©¶mÛããþîï~ÿÙg‰RV–+cDUm¾ývÀ¡Íöx¼=™Ø®ÓBÜÝÙ‘!]×W”:ESêøìLN&W}ÿ²ë~ðóÑG/^ty¾½¹¹yïÞé“'¶m'£ÑéÉÉé”18gMÎçO/‹¿ùë¿6WW:χÅÂ_]eÉ9 0_.EJ©•sÕÖÝÚòJMvwöÓŸ¾õðáâ䤿º‚#çG³Ù×——Ak*e´v*D#÷þèèˆæy½³Óy?X«”")%ç˜÷9!¹d̘sBHwuUT¥4#$Å(¼Ö4”1;Ÿ[k¯úÞZ¬½fûÓÏf°îÙpW!QZ*„°V “Jѵ‹KLiðž¡–TJHò2ÆJÙºwH!\g°”®M]ÖâÜ~ý@)¥Ã0À‘,„`Ã0„”¤”¸bSZ#¿Ž B`BJ”⨌ѧ§Æ˜Ø4&QUž‚F¶1Æ\–½hÛLˆÅ0Ìš&ÏsÒ÷g——àdš®ËêºÐz&%Ïó³a0Ã@)²Liíc ÎÑrÆ‚µ)%]>×uu õÝ¡˜qÀ±ntqÞ¡œkƤ”)¥"ÏñÂbDjÝC9™$J›¶MŒÕã±èV+"„qnÕ¶y]{çZïMJ³Õjks“H9¥‹‹‹0 L)H‰ë<RƒµT´ªÀ”u3$…ÿŸ¯ë€\:®¿CŒ%ç5ç½÷ýj5†¯¿üòÓO?=¹¼äy)JI­u‰ÒîEQh­·ÆãTUaºÅbÑ÷Z©¥s‹®›w]—’!Ä9Û¶‚1T £q<ïîîž¾|™÷}ÈÞ}ýuÉ8‡×ö|¹üÛÿù?™s…„±½‡Óîî‚s/DoLÛu}×á,DeÙÅÅÅdoç=¿5†9§B „´}?8 ¡œ3εÖYŒ9€ï:]}J]ß;©Tžç,¥yÓ@”RÁ´mï½ 4ytr×´ƒ®ëð:C(Ü5S{­ccId*àщkÁBÐ`0€>g1j)"³Ö"N €Pjo•„ºP'|=·CƒJéz™Ì‘]ÅŠ…¥‘Ò2ËYæ B â“Îsê\K§¦Ô÷}Û÷ÖÚù|î¬m‡ÁB¼·)eUu~qQ,—mÓXkë²4Ö6)EïGRæUBè½÷1®š8GY^Î9Í2|óqí3hžµnˆPw µ-à›L×uÀ·f"üüMÆ! …PþP)¥£Ô[Ë“E!Ö7WB–-Ö7Ê&PC‰‘/šÆ9§( ëÿ‡Q—n½9²¶ÅøNQúGCqÅ)¥Dc WWÉ{nŒµv¶XüÓ<~ò„2–omq!ÊÑh3¥ºª¶wwQ vïÎkm]U1„Ë““ÓããÅÅŨª´”ËårÑ4×Z ‘ºÎ^]Ec¼”RJ] À†P–¥BRRzµX<þà2›ýÙ›orÆ màèôôwOŸcîø”6Šò\¡(Í ¡mëŒ 12) çÀszvöOÿüÏ[uýîk¯ÝßÞ†Ác¬E6†J Á:çR’yN)E¡…àRRB\ßgR¦óvq|¼¸ºR”j!|×õMƒŸ6–4€în@ØZ|)a;·>7ˆHqmœ”ÐûÓ¥íº›(J·DIpÚ ß°¡N‚o¾•)¯7Îëü&„R:ï )¥R ¤Ä…01¢û !¥Ô÷}Ò¶mÓ4„®ë|Œ>F®u`ìªiˆR²ÑŠ‚I©SªÆã  êû\ˆc§¯^½xù²5Fçyâ|œ$¡ýFJ×çqÎ…k•þ›É"¹…ñú¦|ˆkîþýÍQ¿y}óEë¡#¢”j—K¤,˲4Þû)çÞ¹´–Ø¥Œ‰“÷Éûa¼÷·‘1rÔðîc )JCJˆúÇ7Jo„z×&Ux=¤[ä‰?œÊ[» zK#xË““£ßýnvuåRºX,žc£ííz4’ZoN§”Ò"˪ªj—KcÌpuÕ¶mì{H ÿ•R:Ïm×cº¦11꺎Bô«ÕÙ³gO>û¬ÝÙ1ËeÛ÷$„ÍòѨë:èºÉh”ýîòÒŸMó¼ÍŽŸ>ý¯ó7=À¥1€(Šv¹ÜºÑÛŒ¼§1€®ïuU­–KïýÉ«W³ªz¸³ƒ ]—Ò`-æïœŽ CïuYç %H‰‚¢>F$ÚFkÍjµº¸˜i!ª,ˤ$ë ›äüæÇÑEp£}¶ž¨á)¡·žB\ û^? œÑ¡º¹Ök…§ëÁ5ÚP§õ€áf@)-Š"â&Iˆk¹ !P‹È{nãcŒIIC°ÞCŒ>FB²v5 «Õ*έµè…&(Å}7“ÒX륊sëÜyÛª¢gntKÆXU„è}Féç!¥§/_vð3Ϋ_Xu£êx@ø$žÒµww\Û¹Q‡¬E[næ‘éVÞÃ/áH~¿A“þAš¡€ÃF8')Æ`íN#뚢]­š¢(Êwã×Ú|x7q”Q@S½&~s)ÞjÇáÛ©ïæi}klƒf׸ÛE3çˆ Ñ„¦ùüãÏf3—ÒUßS¥îܹ£«*ÏsÆ9:Rô«•†«³³®ïçÖ9•ç¥sýå%¤Ô9çBðÉ{ëÜålö5¥OéîÞqvq1®ªr4ºwp ”zùòåÎööÆh§ÓÔuç''OÏÏ/NNNŸ?ï­Ý|ð 9>n´fJåu]¸ËËæêŠ„ÀbtÎEsöêÊ„€î™”Àz_Õõ¬ëº¾G˜ Tò^0&…œëÚ–†Y&‘UźΤdŒq})IJ3)ó, 1)‘Š2û”sP =IÒ:¡N9x¯Éµ&/Ü`_±'ǰÄ$ Å ‰œ«,ÃÒˆ "nE_ׯšøUŒ1)¥P*¥Dn ›B¸N¿œ£¡ÇrŒ”R6¦„dð)%¡5jR¡Ž–Kk£P*΃6ÆÀÉól4R£Q1eyŽŽHM)g,Oi{cww9 6F°(-Ëñzxéú X[J®0gÄPYÞ7ÙàæRKk2±|íÙð-uìè}ލ­µ„R&„3&Ësïðk£Å¾mí0àò#ÆÈãœs”¢çÏ¿þZQ×5vŸ˜Ðñ:€Û=aºýo Õ¾]—~s‘ÜÒºM¸Ý’’Pºw÷îÖþþÑùùòéS)„$„9gW+ï½],†a „H)ÛÕ*Ĩ²ÌÇ­]4#„PzquÕµíÖÆÄH²LR*•2Ã`ú~v~þìñãó£#ÂÉÉI^–[ûûo¼õÖxk«iNHÆù¸(@JˆñeÓœÍf^{íÎýû¿þ䓚±l{»±¾{wcµ¹yµZ‘DJÖ{ïHI…ˆÖYöý7ßÜ¿s§Î²ûûËR¶Ã0ô=£”Q½¿ÖuGìHJ£dŒÅbä„(!$ç zŸBàœsJ€#$Á‹„¸BJI¨è‹Î12TL­Ío:Ãë'²vAN(÷J)MŒ 1âL˜2–•ea†¬(м)X¹PJ•R˦‰1â"ÔÇ8 ƒÅù*!}߇”¼÷]×¥”¨84"Œõ}?xs×ïûk„pŒ\ˆ˜e¨)ȵJáá Z³yQ¨<YVFU]Çc)òî$cšRå}1™£•2)Åz¿9¹QyJ×Ùk‡ëJ)†ßw­þÖQ1®/5*bß®øRJcpN+ó1¢¶ ^m?µ°W %K$cƘår©¤ŒÆˆ5T•ÛaÀ¾ªª0 dM¼~¢k8ùM«z»ýS/ìûoÇ$cLi-ªê½óoÌ0\ý¯ÿU”¥²½ºªë:¡4­”Æ.+ŠD“rÕuŽÐÆpWZ)ên…~ùÒxß¶íjµRBäZ˲¬&!%%„fÙÎîîôþ}Ï9A*·÷ÖZc.¥3&†À(UZS!övwß}çýýýJ©\ˆÕé)~8MÛöÆ”“I¥uîýX)U‚Þ{km`,×:¦4t#nQˆÕZ*ÄØÔJ˜»Ö]Çõ'î}Â`FÌÝc鯶v=£”¢ž4Žd®q”Î@=£+àd2Á#RÎ~p êœ†„RËåÒÅ×»ÁkR!½11)%4ŠB8¸ñ> o‡Focú¶u)†Ã}!h!dž§”è:_¡¨)¥ÔY«Q+=¥BDÊc¬y]‹,ó!B•Ž‘ƒZL Í?Ö»ŒÀ›sx3¡ÀcúMP­{Ât+»ÀºÊ¥·\á¦:”BŒ~í® T‰d#Bc¨U‰úø]ú¾_¤¢@¥Niôž¿÷g¶X­¢Ú;GnThðýééËM9ú¿ÿæ}¯§s×9]Êjc£®ëßüË¿|ðᇙRãñEÛRïc„R‰ób!çÉÚPTÕrP&´·b41ê<ÇOÜxßû.„èš+«ŠK¹ìûHˆÊ²Ét:[,Æu-”Bˆíæææà\™eóÃCUÿö—¿ ã±+Ë(ÄG¿ùÍþîîÑgŸ5M#S*²ÌÄ"X»··÷Æoh¥šù¼[.ý0<˜LÎ^¾`Ë“B IDAT\.—ƒµ;y¾µ±1el‡Ò€Szrv6»º²ÆdÆ`=‰"¥ ¥TRJ!@k-0–àÚqšPÊ œó5È%¬çlxÁ{J#cø!sÎQN·7¼¸˜!(´Çš¶eœ#мiÛ®ë.//³,³Ö"¸ï{y~~~în3”b¢`B¨<ÇD(%ŒQ´Á7Ϙ‹Ñ…À ¡Rf”r¥°€²Öú{4d,1¬½æ ¡Ý/!1Ó÷£º&„°”XŒÄ{žñ!œ.—£ºÞÙÛ={öòð°†"ϳ,뺥JÉSLˆx Tkž 9r½¼%ׂi0}û<ÿ‘ L‰q>㬅,£k™O)%‚楌ÒDHð¾éºË³³ƒ»wQvH)Es]ÐÆ§Y, Ô`w®÷Þ9‡Ìeº~ñkTðZ˜™‡!Ä¥7u)]¿{H”2œëĈÆèƒ1Þ9Óu<ÏO–ˇëº&;Ue¬íC°”zÆpÑé­•yMÓ®Vùtª²lAVI©ëºRënt–•ŒÙ¾ï»º.z¿r®bi-¢KéÉ“'ÿ·û³÷Þ;ØÙ!æBÈû÷‡¶=^.YŒÞ½½=P\èoo?}ùÒóÑ'Ÿ\œT››™R/ž?‡ºfBlŒF.ÆéÖÖˆæø8Ìf>ÆbsóÉÉɳ««–1"%¡tZUoܹS¦4{ù²Rj2ÙaÚVg™gL ±²v4™¸¶!Èñ8›Lš/lÛ–eɳŒPJ8gRR­ ¥!¥½p@­dŒÆÈ•âYfœ£”¢ósÓ4>¥Lë˜R–eƘ²,cŽ!óå2ÆH#1cÔåe7 Gggùh4Ę8O)­V«n¹¬ó|£®›¾_ÆH(õ1ú8!º(cÇ—%v ­÷Ø„PBÐc¦$È0àúDÄè Ã@•bœ{ïK)Ûå²*Š®ïcŒã¢@Çù³Ùloß0ƨֶiXJ#e ÙÛÛ“œ7ËåÝ].DomÒ:2æ€1šBó‚÷¸rƒ5¶îº:[KàÖ‰…uûŠ1cd„$òRê½g믢º1FÇXϘ'DqNS²}ë1)%’8÷„Ð!̹Ð4Wçç“­-ð>y/)í¬å”j­9WÊ¥tyvÖ´mQ¨Ùë™[pn†ëöÚÑî›äþ‡éonα¶ÁÝ–÷ž’ÛÝØpð¼¼´}/«J(eqÖj¥‚÷°Þ.€s®oÛëé2zİIJˆ¸ Ö:BÒf­mû^Îç%@ç}>æEᙟ÷M3ŸÍæçç¯>úègù—¢(Š”tŒ"FÓ¶ý|žKyþâÅ’8?ñêÕóÏ>“yNctÖ.œ£ZË¢Ðu]N&2Ï_ËóqUuMÓw÷ÞzŸÅ(½ŽÍ@Y–EQäÞÃh$SšL&“Éd5 RÊL©D)r ’s¨ Î¥B©Á˜²ª¤R]×yç6779ç'ð»¿B\.)¥8!‰ÆÚ@i¢´s®3fÙuÞû‹ÅÂÇH)].—Bë=jÕï‘‘è­]-œ1¹÷•1åd28ÇÓeÉ9gCŒ)Æ,Ï!<p gŒ†à׃7¼’Éú@Ü@1áÜ´s)ÓÍ’R#£Œy|è¨_Â0 Ý0$ÎÖðÞB!HY Ö"‡®A=ê>cIO®5T1œâMfûÿZ¤Ý~]K¿ãLK FH†nV8æ ßU$ÄujÉ ¸IDÈc—Þû*Ï£÷›É²LfФï­÷ 5AI)ñ?ý4«kD‹_.“ч4¸üëªæ›Íšn…þÎÁ¬ÈÚ¦”I)Ӝ딿þúäùódÌfUÆãÅr™¬5Æxc!KÎ1/ÎÎ<@Ì2®õ¤ªT]¯†Á2F¼7!€µxXƒ÷„sɘN)¦4ʲ¢(f———m[ŒÇ£wß~ûé_ôççéòá!hkGËå¶÷'¯^FÓéñïß]^òÕêìü¼ØØ(F#]wÞ|³¨ëéÖV^UÓ\©qYJΣR¥.„Ñdb¤¤Œ1!@Uyž]×]]u——c­ó<—R6MÃò¼äÜZ‹N†[©,ËG#cŒ¡*KnŒ1†§TF)„LJ!åd4²Æ8çÒö)cBôÆ\ÌçH\À^E.`­vsµ\âu6 C–e@i Öû¥÷Ê{ÀÁ8ê‚rÆÊ¢àZ{k=‰‘¬{c¢4 Ùm=Þóú@¬{Tãµ%ºÊÅ„DïÓš/ŽtL&Hì¿UcBJ Ä{oŒqèШ]Ë+q!„@i]×Zk\É^‹ˆcϼ~SXÞ^ þâò[ÿéÛ2.iÍþÁ¥BÄ]ߺÃ%O¼q]ƒHq²]å¹µ–3†F“8~ÚÖ†àSbÖ{DPÆ!üÃO>Ù>8ؾsgsc£â\­—BXģѬÖ—`7¼²?òZû›îiJ”Rš¡T"(Ug/_ÎON”Ra†åòìåËç/^ êsB LïU–eÉ)å9a „°„”yž9žÍš®ÛœNcTÊóäᜢòÜZ œJ/ºîÙÕU•çùþ~±»ûÚ;ïì|ðÁ‹ÃÃÍ¢`Zç¨s‚Ùɉø—O?íµž~ÿûfµzöìß{ë­÷~ö³­ÝÝ¢,Wm«¤†a2[ï@ß÷ÎZTÔ✟-gggËå’)U–åx4â}¿lš0 ,Ï몚N§€.¢”’™¶mqÌ´Öãqc2&ržgÙ0›µ]7Ã+ªjµ\~öûß3!šRÚuªèµÆ,ûžK™RÂo^…Òšòêì Õ1–lJÃ0c[ã±óÞ$]UŒ±Õ|n¬E270v=—@ ï]Û’u 8&Y§Ì`ˆÅ5ò†b}ÄK ÙL©u뙬§¸Þ¹˜’fŒJiq @Éóœk½\,òº¾NªŒ1€‹8¤YEQ–eß¶x ãÚeèfOsc;uÃù×#_8¾þ))ï!8›Eúþo×kXÄa^/®7HÞWZ—U%ò¼mÛQJ„óȘÑ ¡œK‰þæ½÷Ó,³}ï½GÚ¸1&8‡ÓUBHø‚ÅÄ7|;bì„àCˆÎyGHïÜW_~yzr2ÎŽ³×Y¦„PR‚÷ÀCÂötJŠBìí9J'¯¿þ£ýè{ï¼ã ,ßúñ?ùàƒ×Þyçõ½=Ñ÷t±ÎeñŸþîwìê ¡Uõúö¶~ðàãgϦ;;?ùùÏ<|¸\­ž|þ¹7Æ[‹Š—"Ï£s¶ï]Jºª”R«““ÁZôRÖRj!bß§8cRJtH×J™¾7}ïñá¡þŠUæ95fiíÐ44F¡µqvqñæÃ‡õïþÝr6ûøÓOONNt–©<716}ï¥kETs¡”‚ޱ#ºXª,cJQÆ!1%&¥]׉”vÇã»»ÞÚæã—!4Ë%ÕZQd„¥5aÌ YÛc];ˆ0†ñÍÞÂÌCiBÆ ê ôÓf !ÅÈpÚ·N5ÑÚÀqŽf.1$çˆR}ËårÓ{¥5j™!”4B¼†!X‹f¬+äQJ„øfprk£F¿¯3ÞŸVÁ½áôÑ5h!81Zc°¸FA;!αôÀ“O9§Œ¥œ÷Ö~JhE.iË( ÎQ­ÑCÛ:Ç¥¼Ìs%e°¶Ï¯¼ç)¡6뵦â6Öïž®ËnŒþošZB¶¿8¶YM ! ÿ™'ääììøô4H­Ò¼,÷ö÷³¢8??Rj­!ÖûÉtúðþýÍéT3 çOŸž/ÔZ]U¥”Už·m Þ7]wqzêSÒy΄àZÏ!YÆ­²lt÷îÏ~ùKÐlÜ¹ó“¿ø‹fÞýùÏ·'pºB€Õê'ï¼ów/^|úÑG?ï½ËaxòÁÖ˜/^\œŸuý䫯ž}ùerNÆÈÆ[[UYª”’Ö®ï9çUUᕯĢ÷¾ï£sŠ1ž’7¦®ªÉxüâôtµZ!¤Ö:ËÐÒ B YF±«Õ*„²®µ†Z×o¼ûî/þý¿Ëå?~ðÁý/ÿ…p¾B˜Ö> {*Ãɾ”@®%¤œs£ c ÚÍR!Ð`T—¥ªkGi>½¾¿ÿÃ7ÞXÌfW/Û®Ëcdy! €;ÄØ¶m¹lµ0%„ß áaˆ÷(Ý !xJ÷xO‡¯Ï4^ÜÞ£ˆk !Rj¬Í‹"† 9çH>ÀBÃFižç”óëó:ýb•X–e]×ç§§°Þ¾àeqÓ)á{û¦`^à=â‚”âŠGâ„PƒA˜’”P‘†à×[~XcÙ*>!.”1)%*&³”΋»E‘ŒIyn”0)7ÖJc$c„óÉdk:-ËÒZ‹4œàb”Ùts‘üÉëä—_ŒÁ˜B a¼ORîÞ»wïþýÝí; Ëårg{›sŽë\Y–{“²Ü«ª¦iæ]÷òìÌö}šÏÛÅ¢¬kÅØ0 Ëår±X µ%"Ïsë=ª®ßzôˆ(Å9-Šw¾ÿýº®“RW71¢™Ìîýûù—_nŽFZ©×wvþñW¿šÇ?úèìôôãßÿ¾_­ Æ­ÑHdY5]—bD~-j+õ}>›YÌ<Œ)Îuž“ª* !4MSUÕîîîÉ|žRBEjDFô‹ä\ÆX:ç…Ø:8xþüùÕj¥• Y–±Dˆz:ÍÊÒÌf\Ê;÷ï÷Î=}ñb°6"Ĉ&JØAøç8ûAïñdŒRÊXѼ%„éxüæ£Gþþûg/^|ùñǦmf³8 ®muY2bL`k6v"„¦ä½71Rï¹”xo€Ñ”1ìÖ@"w4¤ç{\«àަwã1œS)!úôÆ¥ŒéûÞ9n7ç„RàœÅÈ9§)F£¢(ÒÚè*2–C&Äͬãó&ÿduëE×=ÔÍñNëÌZK×ßÁZKR’„Ĥ”ÇÞ{d…€:«„±L©P@ÈÖtÊ´ÖhØlŒóž1Æ¡œ;c8!Äö½æœ¥4ŸÍ6'BÈb±X.—yž Æpc›Ã›¤ÿ‡BLƒ˜š…ÖÞ˜ˆXUçPÊÆòÅ“'Ç——»››ÓíííÝÝ»wïFcV«¢¥2­qJN)³ŒbÞ )Eï“÷@K9ªªç/_b»\×õÖÖÖö;m߇]×A–A׵έúÞ5Ͳ®wHÃbñèõ×Ññ¥ ïC×1)‰s/_næy-å½ñø{÷ž>þ»?¬ww¿zùrow7+Šé;{8ç‚s„±QUQ€Æ9,*”RYžO66&“IY–¦ï1]J«Å(-'J©é{ë}ÎX†5LJ‘R<:2ÏKïAë•÷1Ë‚óùårI´ÎBŒÓ­­<ÏkY–½õèÑ¢ï//[cöéÖÞ)%X3ßSŒ8ED(㼬ëιHHY×>|û­·ÆJ=¼?87tÝ|lÓh!˜”Ñ{ÊX‘e„Ò„3JÑù9Bcôè£t£CÎ-ö!à¾îz ƒ…r°¬Eö=!yž+¥cPîÁ8—3Æ,‹ÅbA¤”J ”Òb KeXCê°]ÊÖ̽ˆÉv·7{½ïDÞ¿Šb]Ö¦µê^ •í×ûs‚0ÎÁ9N©Âbñ1"vbkÀ,Ïý0PJ'ã±qNå¹ä<9RŒqÎaãÜ=ïïìnnç.ÏÏIJh$bC¸aûãÅøÞ¥É9||xV¿¨ëÝǧã1KéßþxuqÁ67a4Ú}ð (Ëò‡ÏÏÎîÅâèhÈ2"¥` 8¿^7‡S"’±~µbB0!†aRú”ôöv4æÎ÷¾÷‹¿ú«ýãÁþþж———íáaçœö^K ®1(kœ¥4W Ù € ã õJ@Æ(³Ìy8ÁàSâŒï¥D)a†uš’Bø¾—„€÷øµ!Æ2Ï­Æ ‘Œi)IŒn(@Pªc¬2ϲª®«Ñ¨( J)%jÙ ÞÕû@…ð)¡ã%B¤1FÛ÷:ËRZkï\Û¶è+¾\,Š¢ÈóÜ9×#¥d«ÕŠFÖ9PZ§”\Œ’ó², ¥º¦iÚöÁk¯½xñâààÀ CïýÞÎŽ.Šaz綪ʅ0hýg?ÿ9å\gYß÷MÛB(ç]Ó8ïùÃû÷ïîíç6Æã,ÀÍôö6â&G“×#ü3ú?‘”(! @RJ¼wÆ(­Áûv>ß?88¸wïáë¯ï”“ úI¥ž¾xÁ¥Ì« iYYŠç¯^¾\¬VÍb±¸ºju£„€<Ë$¥ˆŠ@@ˆQRš 1ÊsYUþꪟÍ@ @n+üVZCß7ÇÇ9ç´®ÛaØÛÝ=xãjgçJcž|ï{R©Á9B1M67‰”vµBd PšI9*ËBˆÓù|~|\06xß7Íá×_w''q±Ø­ªºÎëºÒz2Ï–Ë­­­Á9È” Œ‘Pše™Özh[FˆTjÿÑ›ož½z•)U湓²kšÿøÇ«ÅâìôR’Z766···V«¹µä†ãöcºyp8NÊy; ÙhôÖÛo?¸{ŒÙÚØØÙØxÂ$ÏënÉÿ@Œ€þAu{(@ÖX²Æ”¨99™¦ä)}ýý÷/ÏΜ÷ËÙl±X cžë:Ô›R2c!u–1ç/^œ~ýõÉlv¹Z~õU&åêì,§ôÇo¾©^}º³S×uò¾¹ºÒB ×y‰ˆ~¾›BbŒ««+º·÷“ýh¶·×Ìf¦iLÛÞÝÛËP·/ÆÅrù»ßÿþìââɳgÃZCäö!kx$®ãÂDÖ˜Ò¼®UQT£QðË¥Tj¬µ ASJ½w~ ®9cQŽf q}ðûÞž:Þà¹`möì\Œ&LvØ# )q¾Ï(¥Œ¡p;åñ%H’Dë°H)bÙ÷ƒµ‡š½öKÉô}$D±±±1NWË%ÖÉ7¼¡ˆÇ/%¶®Ô¥­#B°ÖR€¾ëbhOŠ,SJ9­ )cYYŽF£fµJ)é,£”Ê,#„(Üú*EÖÒœó1ÀØÚƒƒƒï777WMÃÛÞÚ*ŠB*… B¢,Ë`Ì0 <¥n¹\-ƒ1„)%ßÙÞΤ¤Þûõn¨ÇkÓùÛ÷ëÍa"7Ïa]1#åËßÈ9ºŠ½|é—Kií³/¾h/.¢sèt§”bëÞG×Â{Þ/®®¦[[C²,A)Ð:Pº†Õ0˜5à˜‚Ò£5&BhÍò<ô}\­ðÁ¹R?üÁ>ÿøãg‡‡÷ïïL§çGG?øà׿úÕÞÁÁßþÃ?$)ݽ;ÚÚªvwûÉ'›;;Ik‘Ò¶ÖEQ0J‹,[­V¥ÖD&¥†Á°¶yöì_>üðÓßþ¶èSšnnꪪ66Þ¿?ª*–8÷ìåËO>ú¨5¦šN½s¨„w}B°)9k£÷“ºVœ·óùÑá¡ô~uqñÏ¿úÕ‡¿ùâr6[­Vmßÿö£®V«ùrYO§Î¸• É­m¦,„¶Ðub´ÆPλ¶¥¼( m_¾|þœs®)Õ1J!(ÒÏ… )!—Ý4_—£Œ¥µ·$]ç[ç\U™Ö@siãxô‰=•BBPÊ8Ç=Rò(2o#(¹kŒ±Ö…ÀCˆÞƒ÷TB œ !Æã1† AÃ$ b΀“sRJ$ àMç½'‚ó&lÿ”R8ÓWUŒ©ÆyQ /<Ƙå9—2Ï2•ç(„ÐZgZs)wïÝs!Ìçóííí¢(¦ÓéòêŠ1V]“69!¸ñoæsJ©5&ZKBïM×%ï“Ö<×::DZÃp­LqšõPÚw&¢7)Ý ®ƒsmý‰BÎ.¡”§ôäòòììÌu]y¹\.§§C×yc@™çtí…[—Ä9£”1Tp!¥QÔ!4±ÖZc/äÂ0H)½µ"„ýÝÝ{;;ÉÚ“ÓÓ ¥VWW§GG³Ùlo¯Î²_üò—ÿ×üàÜßÿó?÷) }qv&«Jržb¤)qÆ6§ÓFÊfµêºîj6J·¶·9çÎÚΘååå«W¯¾øê«ãÓÓjoïþ½{ïÿøÇo¼öZAéDë,Æùé)‹±_­ž~ñÅ“ÇG[[ÛÛ¡'¨Â côÎᮥœÏfÛ￟¼ÿ胦Y6ÍóùÙÙÙË—”ùj54MâüJk*¥®ª°æÝ[åè µ—®÷ß\!TŒ%çžöÙWŸ}ö½ÍÍÅ‹¿ø"PÚ[Ë‹b䜬ªˆ áBJâV3ò­Ë÷E Pâ^Êäœ'„§„ôö”’phk…£`ŒsS !õÑŠ)A¸@ï gŒˆÎ¥!‘eRºu÷}Ï„ÈÊA’ õÅ…1&l;¥ÄÔ­”âœÎy=åy¶ä|4yïG››ÖZÜîJ©ñd¢µ)F£ºªc”±<Ï‹¢y>ÝÚ:>?oú~Ù¶\ˆ£* !„óÞô½7Æ9wý|½7}o­!,çóacuQHÆêºæÑûÎE©·–®•¿Þ¾©F¾› ×ö X³’5Z/""¥Á90ëºWWWAJBél>çBP)ç©ë‚µ"˺¦!„!"ç&%ÏX* ¹³ÓK9 ƒè­JÊ‚F Á† t!F”ó|¹LBìîíÝÙÛ+¥\-——RˆÙje‹÷úÓG?øx]y^k}zxÈBØ,KîÜ[,›æèòr6›Qz||||rb­¼¿wïÞÆÖÖÐ4)ç@iáÜþ›oöyNªêÍwÞùÑÏ~vow×\^Âr‡Á÷}–ç«Õj9›5ËåÆÖ–Öy*x"1Ãø3‘kýÕãÇÏžŸF#c £4„€ºÝ”ÒùjÅ8—”fy¾³µµ7rB8@©—œT­ÃÖ÷¡ þ(dô;YñöKj-„°!Æò²ô!L÷÷G[[Ÿýæ7ç''[,Æ<χa`1ʲ¤ÞÛÅbÑ4Ô9GÈ*NiÅ9ŸNyYnÖuãåááÕ‹~¹ŒÆœ£ÞYo‡¥TàÜÆèRRey½ùvö÷=@5™ˆªêRjœ»ì:å\©µÚÜܨëQY>y¢™”åÿøë¿>>>^ÌçŸ?~<šNUUÕ£‘‰Ö56!ø zJ£sMJGóù¤,OW«óù|:ͳ,pΌɔRR¦lß÷Ms5ŸæóÁ¹kê –ú€µ´÷ý0\]\lnl<úþ÷—çç?þxqzº9™dZŸ--À$„,ËLŒ\‹ÀëoC&rê¿]C" ’s¥Ú®[-qËe7 ›{{ONO!ÙÆF¹¹iƒ®œ ÆLËÝÛÏ—À¹@4ºv8eô! Ê <ÃÅŸ>šLk-ÞòŒù”˜Bˆkeš!Æà}°–ã„Ђ1Á˜$%®þIŒØ‹RJcJJ©ñx\×µ Á“óN8¥ZJ]–o¿÷Þ»wñSªêz†Þ˜½÷^áj>×ZêÚ9÷êäd1 ,%*eïÜ¢ïë,“Ržþå—Cß·}ß5Íd2)pÀc ¶ô®ëò¢ˆÖÎ/.¼÷\©ËËË¡ïCxGJ¹œsaL9gY6­ë;»»[eÙ­VÍååeßó®i„RµD©›üæÑÞR©ø–Ô‚׈r¤{]«B,¬½óà5fëÁƒžGo¿]Ÿ}õü9âbµ*ë ÁùGGúîÝÍ÷ßßÊó§‹E~yÉ—Ëã««|¿~ë­#)3¥Êñ¸ÓºëºVˆ!Ëü0€÷6„<ÏÝjÅ¥äœwÖfRò,ÛØß?<>ÖÃðýííܹƒÜYRãètúèÑ#©õ_þô§£Ñ.ž=÷ýÿýŸþÓïÿóþ?ÿø_ןþæ7W_|qtxؼýî»Ùæ¦W*2v2›ÕZomo—“ÉöÁA†f¹Ô6ÆW³Ùî½{ã›ß—’¿z5?<¤!,Súüèh<Ÿ/—ËNJ¨ëUŒ}Ùt:x/(%h” €¥G‘ç›;;uýþO~ò?þû÷RæÛÛj4zðî»jssÙ¶! zï%c®ï!”óh­1†¥T' 3¡5x?xïcä„H!¸ÉB)®ÅO/.„”ñêjww×¾z¥‰mK )´f”}oSb*Ë(!¦ïñ„I)1UUYQûÕŠ8·˜Ïãj¥8}ß.—øycB !ƹ¶ëVÎ ”âû—E!²Œ ‘[[0挌!U¥´&”„s¯VÓíí<%ÒuDˆ¶m…”½µEQ´ÆdJ )­”©,mÛRJïdynBu½{p°wçÎÆÖÖßy§mBÈx<6Ö~þùç‹«+OÈ«ÓÓ¢(c'§§1Æ—/^<ÿòË,Ï7wv¸µ‹““£RÊZ›þ_ÎÞ,V¶ì<[óZ{ª]sÕî9wêÛ—Ýb“ݤš¢H6[¤DI6"ˆ¿~ˆŒÄÊ;COA$†¿Äzs‚*XŽd™F›ŒÄ¡Å=wß¾·ï|Î=SÕ©aÏ{¯)ëTuu“1¤ì‡sëÖÙUµkŸõ¯úþïSÊBè´t’ªš,—eUB²,£îš­AµÖÆ´‡CŒ1@jí(óD¾­ pÂ÷M–ͪJ–¥¬ªZJEBHVUY–pƒèé/s¬ƒåP€°Ûé¸ö]Q8T]ƒ‡·¶†[[ÉÙY­”ÊóÒ˜k{{/½ôR‡±Ÿ¼|L>üþÏçe) ÿÒ%jŒ^.ó4E‘Îfù|ŽÊÒÃX—¥ në”Á1F”RÆ&“ÉöööÕÝÝ­ñx±X̦SŽÐ Û½sçÎÖÖÖÎÎN§×‹»]wñýË—ÁbñÂÏþìÎïüÎññ± ɲ÷nÝòÛí@ˆF©&Më<_VÕ,IÜDY¿ßÏÎÏë4 °×n'Z­Ó,ôzy–øZ/e]Kk§Óé ®’EQV×Y–ñ(rœkëΕÛ×çžç“IÔïúsŸËªêèô´¿»ûÒ¾ ›æþ'ÿ¤V ‚(u¤BÈ¥X¦i€µcF#„SjbÆJAÓ`G±Å‚cŒÓRzQÄ„0„XJcE’dM£²Ì³–2F¬uŸ•"žg»&SÝ4µRˆ1TA·‡¡76.‹"¯ªv¯gŠ¢–2KÓ¦ª B.˜¾¬ER’¦Ñ JÛBÄ­–ïye’`…1”1Î9@J)|_Óét!!˜±"äøc„!ÊXǃá0ªëV»½»·Ç1¢;Œww»ÝnÇe’PBcy–}ðÁwïÞ¥wâøÝ7ßtŸåš„²(ZQ$µ.‘_Q¸éPkmUU”R­µ'®ªê‚@•îyŽÆy`´ªh:Ý«u(ïʳ!‰1ŽÁdó ‘ïSJKB.FNþJF¡u⫬ôF1„é|^ŸŸŸžž2ßÿÝwÎÎN'“É;{»»~»½†/<ÿüËŸûœº~]=|ø­åPZ…07 Z.M–5Ƙªª'“j6CJaÆ!˜ÌtF€…PC9ß¿téêþ¾Ï¹ëU„¤”€÷îiǽòõÀ­T!–IrûƒþüÛß~|xøðð°¯u{{ÛQ<(B–Y1Ç­v»,KÎ9ít‚0Di µö9÷9Ï‹ÇË%ošó‡«²ÄžWKi¥l÷z^¯ÓïëÅ8§Ý‹ñEN)Bˆ‚1Öí÷K)§óy^×§‹ÅpkËR:ŸÏ5B–RÄ d-cŒ•"˪r|Á^—™çI)5„ˆ1¡Å8j·Ãa7޹ROîßo”ªëºX.{ý~·ÝöšF$I+ŽG[[í(b3„LÓ$Y&1®´®Ê²¬ª,˪¦¡¾Ä1ó¼ñÎÎÎövº\Bòº^Z›K9LÀªºn”ªWaTE‘±ç' †º,YZ×O'$ô¼8Ž=Î!„žŒ± ŠæI2ŸÏ­].ê„eË…)m÷ûJë+—/Çã Š0cq·Ʊ±v¹XäËe2Ÿ#¤”G¦iX«•¥)Å8Ï2-e]×Y–•e‰â¾ïæý]–ë~ºŒÚ¥¾˜”Ø =Ã]2¬ó]ëR™£ùi¤D+P;%„zžEC´Öcמÿ+Y Xó4º`ÅØÃ+š†pÎ1Ž‚`–$ß|å•G‡‡ûW~ůëÿóÕWS!HµXœ\ÏådòúoPB””cÓ““Ž1Ba™e¸,™µª®ó²¤­Bˆp.zôÎ{ïeÓ©ë¹ëªÒ« µiLio0À·û}êyuÓȺ®¤<™Niu<ïôäCÈ9/‹"ð}Žñùé©u¯’„j=hµ|­­Ûý~^U®FïX†]@ãæã¬µQƒÀóI«9 Ã0  «JJÙ ‚^¿¯WÓ!ÀZâÆØÁpƆĂÇÎÈë¦q#¢ªœ8D]UÕrYWUEÆÚ,Ï) ¨t‰„¾ï[kÕq!ŒRÃÖ+1FŒ±ƒI™ˆÅ§#§s×?z U®¨_¡£f†0].­ÖŠsŽæj0F“º®7ÃióûÐ]unMˆè î8ZY×y–¥ØpˆŠâRå'÷î¡<œ»P69<üÞ¿çy°i–UÅŸ?{ó&å|z~~ikë‹_þòï¼óÎû²( ú} !`¶\Îý ¢(‚å|žT•åœú>%Dåy^–Dˆ4F[[ÅÑÑÑã'OŒµÐófUeŒ1”aè 9¯ëZ#8¿€Â¯ø]-•ëûàr6›ak·‡CAHš$¾ÛÏ>{çβ,;í¶¬ë³¢¨³ A|?ðœ;YUJxBë¤R‚R@©àœú>#„XŒ ¥/+AI´ g•µÖýiZbMºîˆ¢WTù¯r]‚¦i¤Ä»˜¤’²ÒztíZS–"²çƒPêÆpø™›7øê«Âã'Oºaˆ =ïÕï}¯7iŒÃ­­ÑÖV«Õâ„h7ì¡Á¸–QZ4ÍãÓS uUUyž»á ½u[.—q#„f³Yžçn _pxvFqpŠCÞ»ù(iŒEÈó‚ Øí÷C)AY6Ë%ÁÕµ*KJˆadL‡‰1dLZK 1Z7UÅZc'ú ¡ÖZCèE5¦®k—¶z½ ÝFÆÄqì1Væ93FRdá¼( ¯Û-ªÊ12A ÒZ-rWŸ7FV•†Ð}SJ)£´,Ë5º ®5Æ5£µ~1Æ`ÐvSª”®ò³æ‡D+~gɃÂ| 4³ ×X£Û܃ v6c´Ö®^Ç11ÆäyEižß{øðäü|‘eêä¤Vj‘eˆ1ÂX¥áÜj]+•dY’eRJ&„¶6/ B)¦TpŽ1Ž[­n·Ûï÷;½^E®ðU¤©“.pÀ(DˆïyEšêºfŒ!<Ïsü–‚ód±àó¹És.Ä`<>Ï„Â÷ý(¢­VÒ4ƒNçç^~¹Y,þÇßüÍO}úÓñÞ^¦Ô£Çcýn·åû¶ÝnÅ1À÷ýápˆŒÉÒ´±6IÓ¤,»;;ín·Ûï„„”ªª2J-‹bÍQi!Ä„¸º4rU8„Œµiž»„ Òi·§Ož´£èÆõë½8®êºR*ðýË[[FJ›¦õtŠ‹¢…q‹1 ¡ÕÚã|;Šîß»‡«êùë×­µ?xí5 @žç1®Õ£Mu¿ßßîw:§§§§çZ©:Ë>~|>Ÿw‡Ãx0hªëådµ–u­ª*ÏóEšjk¥1óå’ T7Cç9hž”ŽsL/ÒÔá­/+c–cèZK ¤B „4„Â÷µµº®ñJž1­ë*ˤkð¸á}Já @³\.‰ïCJ±µŽ—•Qj­UR^ ¸àЧŽ6Æé 0!!çÛãqi’ܽ}[)å”'0¥Ö†#MBŒRg,ØE”§Ê†±ëàC]S‘B q-ç< CÏóðÞžsªB·+UynŒ¹ð³`Å•¿Y]e/þýébÙÖϸ"cÝcŒ1Æ(„q¿ß³¢¨!<œLÊ'Oj­Yv„pb:Ýn¾ß ¸ç]»zÕZ›.—ý~¿ßïûžEQEÃn·Óé8:#%eSU.àÑ.00†€µÆÆ`­ƶÇc(âý÷Þ{ýÍ7/ïíÉé”Aè#Ôû»»÷¦Se#5„!ÃÁà¿øû¿À›‡‡ª(þ÷ù/?ó•¯äÆœ ‡ÃÝ­-„P–e¾i]×Ue­…„H)—Ëår>¯µÆŒ¹!`D)÷}ΟÍþZQ¸¸B×ôs£dóù<ËsmL–$NJ^âsnªŠSjŒ™ù¾oµÖM²¬ÍyÜn{”ªù¼¶¶²ª.u:ûûû£~_)uÈØ­Å¢×é€(²ŒA!š¦‘J¥izvvvyoo<îŽF[Ãá}Œ«¢X.n²5[.“¢˜-£þàƒ ÆýáÐ)®A„¢VË ÃE’0§)„Ëÿw”äaè Z­–¡Xcš¦q_¶nSÚZ´ò™n·Êó\kM6MèC{[ƒ7úö/A·69»bÂÚ´j+¥aÌZÛ¢~ÿÚÍ›R©~¿o ‚ Ës¥”›Df”¶»ÝBëÙbáh?øàÚ¥K®vvv|v¶HÓÉd²{åŠ èõZ½^{gDZt‹¢0¾?zꩯ=ûììÉ“{wî<þàƒ'/‹bïòåûY¦ÝíÊ Zƒ¦QEáµ>9?Ÿž•UåêéãÐ÷{ÝnVU•ÖãÂqµZãÑ(ŸÏ‹$á„!0çsäêø«þغ:rRaëy·iºº"rü¥«©\mŒ¶ÖCˆ±•R*µ9ÝjVSãîÍ»sæ½æÉvÄSnéc°1N­¬hPÖ׿–eUU³ÙL5Íá“'EÓ B¤µŒRêyÌZêy”±ñhEQ«Õ¢”êºvu !ãÜaÙÃ0t¡§çyœó4IÜe[k/šøÆÔUe!$Œ¹Ï­‰¡Öc²>!7|à…ñ¬®uÓDÔ×ç»ju¬o„b,_,r±X.—Ã~? ‚ó³3d ”ãS*º]­uv|\–å|2Ñu µ®ó6MÜncË<Æ@cœ„ táÖÆÚ¦®1‚RιÇ9!äüüüÞƒ €élv:›%e‰)Åœï\¹rùÆ ?ŠÚÂkµT–!)akkJÅ[[ϾøâåwÞùýßû=s|v:RëØó*g*­ë¦‘EQ¥©ÉóéÑÑñƒ÷ïÞÍ–ËV«åFþGÛÛœÒÙLçsÆX^–çáv{Ðn9:Ήç)5„ˆF)Ø€‰¬·ò5 [-A÷·ÓR^̯Øݯò<ɲ4RÖuç¹FÈ¡áʰ7ÝlÇi]ã½…£hàœk¡RPk7X×H‰´º†rNÃŽ0ÞÂØó/¼ £QÊ‹¥$”"„ÚŽïû‚sk­“R⌠Ïs0WŒ±î{5ZIâð[nÓY÷<¤ÖÛ„rìXfÕ!kCr@ÛÕZ6ùŒÔ®ÿ ?z0ÆÐŠ{ï×[‹(•JiljûƒÕuø>Áغ˜¦,mÓèºvœ‚¶i2­’ * €q¥aŒÆckŒ²V7“Ñ´J9ñ¥Ô"Ïë4ý‹ï|z^ƒ±œN&á`p°\zu=K’¼ªD·»7tÚ탣£ª(ªÅ¢Îó×ðƒí¯}íS_übt÷îË/½tÿöíï}ûÛËåX› ßíªº.“Dk]e™ÖÚ ‚ˆ1 a¡À§”SJŠ£èê•+3ß?=:*²ÌJyѯ‡ãJö.hgœ»o!L‹b:Ÿ/‡Ã¤,“ô|_*5â8¶n D)€P#„(õ(uÄÁ›q@–¥ë•©ª²õv¸šÓwËÆW}<‹ÒÚé·Wuíf/cfUÀw¥T’O&ÓÅ ¤Œœ;1ê~¿_Ö5fŒ 1fNò BÆXàûÖZ1BˆmJ)€ú~»×C„hktY†Î»,ήJ˜%ea­Ã ÇDê •Êó|Mÿáºf%1VÍŠõŸ ¥ /¶(粌^× >ºö„?êìÓ4ݼSn{ÓJ7Líš•.<0FI9›NR“ÓSŒq†yžsB !–RhL]–eYÆQ†¡ÕÚ¡þÖ$m­q†4RBÓ¯µ£›¦.ŠO=óL£õt¹œ–¥»ïß½ûh6óG£áÕ«•µÚt:éÙ,”. `Ìõë×ÿø[ß:89ù_û5 Àb8Œ9ÆUQz½ƒðPʺ(Š$)ÊcÌ(|`ì3F QUUgìtb߯8×JY¥¬Ö7†b-0†b¬uÓ˜!ˆ±cË×ÖŠ0l÷z{—/÷G£Fë¨Óiš†a\•e¶Xx­V·Óé ‡Ëùüèðp1›aÏŽŽÞ{ë­ùÙÐz†õ}[×µ”èûcíê˜M3êõ ZŒ=Ï×u]dY#eàûžï‡­VEÖ[ãñµ«W‚ÄÁ”t#ä,˹*6äƒÜD‚C“º˜ëÃ=zam,6J©EˆR*(u^ËlO­-„`µ, Æ{{{€±v¿¯Œa”žg´îv:c7ë@©¥,ŠÂ@)¥c|!cÒ‰1bÄqÔjŒçó¹±¶) ?ª²lš†sîH€ÌJ$Gk­«* C4:StTëF"ü¨»¦”:`¸lk-_ïBkÉ*v»`Ås7B¯fFÁJßÓn°ß¯79ý9ºxñ†A"GFâv¾U4ïd½\ÌJ‚œ»¢J_ aUט1í€êRºùŒÀó”Ö‹åÒí.<ªªrQP×nA+ÇaŽ1¥4ÍsdL§ÕÒy‘N&Ø÷ç†Óªš*ÕÁx¡ö}jŒ±–i}vppTU­Vk–e•Ra§ó{ÿê_UM³L’o>õÔ0Ž¿ñðöÛoL§­ñxg{û…/|ásŸøÄ·¾ñ"Ë42ÚÛÛq¯wrpÀ!ŒÃpÏó·oë(‚MC0žÌçOO‰íÁ ¨*Ÿ±¦®¡µa&J)«º ‡RÊÝq¯wÿþý&Ïw‡Ã½Ý]_ åöö6…ðèèH6M^‹E)ÄÉÝ»×/]úµŸþiHÈ«ñ ?ñùÏ÷)­’äèÎW¾ññ'>ÑÚÚÊnßÖçç Ûu$@ŒR?ž¯u:Í`0;<ô ƒàd:m…a¯ÛùýÄþ¾+‰íŒFÅtjòc¦iÆý~!”¦©õ<àä)UÖ:§máŒij”‚Z;T“ÓØøpõCX”%]-`Ê9¢i€fLk­\ð¹9WZ{Bh­)„J©|Åõ¦•"v-sõÑÖ؈é×»Úfð VÜ[?ÖCBÁJ\êb0ÄZ !2æáŠ7$(x5—䢯‰l­}ìÅPUUpEæ… i¤”um!,šÆƒ(Å”2Œ çÌ÷=)_{ýõƒããÖ`PQZb,=/Š¢Nmù~ypÐÞç=¾u« Ã{wïBZaxëÏþ¬˜Nÿü›ßÜÿÛßÿý—^~ùöÇoÞ½Ç/}ò“[ã1°6I’¦®ã ððrxÞþîn°³pþæÛokc¦Óižç®[s||üðáC7$êÜÅXPº4&IS¶M2Z3Jà Mãz›§§§Ý^ïìä¤ý8þþ÷¾ç˜yO˲b’¦—¶·û[[¾—oÞü™¯}-U’|ò¥—ž¿ô…/¼uûöR©/|ùˇ“ gloocœ¥©[myQ, mŒçy³4mŒ‘U%ºÝ÷oß®‹B)%<ïâË:­HBON0ça»]km DMô¦ŽßBp!O¤BRJ‡‰q WeY­Ï«ŠCˆµF«†›SÖJ !\`I7¥R)D„QŠ ¤Ö ߇„H{ƒÁ…¾§1cï1Æ ÅEÇ{E3…ÒJ5ei ”Rºg”ÖUUùB¬×üÊ}\TLøËg]§ÜÌBµÖ²®‹ªJ’¤Ýn»k­5NW|M”¼z7gqn…“R~øI+ÍÇõ¯6Ï_›èÇrñÍ7±+*áUw69ÚŒ1. r®X¯E¡Ý§lt)ÝO7© ´6NHë²,%Ì÷˦©µ–ÖÖÖ*xQÔïMg3ÉX†±®ª¼iôÑÑôôôùgŸíÁ“{÷¤R˜[÷î ¶¶^{óMƒÐ2Ïÿæßú[½ øÞ7¿ùÜþþüñãuãðôä$›ÏµJëÛ÷ïŸ7R"ŒµÖeQL¦ÓcY×…“p.Ë¢(BßÇŒ•e™& •þë¦1MSi­Â°€ÇϬuލ*KBˆUꢒ)¥ÓÐ [- B)…bJœc«Õò8×Z¥cÜ5'\}5†‚ƒ#Æ‚86–EáƒcNÍÛ*u!A³ZcëÑ$)¥ZÉ`¸mB6M³âþ˜Q\¬Þ–KÖ`]-ºÃÑCYk/ۇѩµcµ‚ âV÷žd©Ûbfm'›?7/hÓ ÍJá®ýÀ‘CBè>ÀýÊÈÖÒÜí®ôü#óZîtõhí^Ý.êp|r”Fˆ$³Ì2@H+Ž£VË}+ ¡à|ÿÆï¿õÖããcäû(м Œ•UuïððætúöÛo÷Z­÷=z|p Z­ÿí;ßyîsŸ{2™ü÷ÿôŸ>%ÄÏýÒ/½ûî»{Ž•ò7ë·‹Ýíí§®^í·ÛÅbÑÌçPJ¨5†0òýÊÚ"Ï9! ãÉ|þô‹$©•êv»;;;Œ1¥5&d<w»Ý2Ï3Ï‹<¯%DÇ÷u¿_–e¯×Í›N&@Ê*MÏÏÏðÚko½÷^èûˆ,¥©ª…ÖþtÚø>"€Çذßïl@Ha €€8gÝî;o¿péÅw®^}æÆ+ûûEšZ8cuU¹!¯£££ÞxÜ C¡l«5c‹õ¼ª(jc˜ív»Óé?¿óö üÁ«¯¾ýÃU5¯kE'''_úÚ×®¡Ð<÷쳪i˜µÛ[[qcŠÅ"ÕºN›$!@ºXTY–7M²\îŽF^¯çOÓn»Í„ B<9<|ðàÁ÷ïk­=ßï¦ÕêÄqìûcÙ4˜žçqkAØ™¤Y–¤iÔë)­kc)!’¢€t¨”ÑšBè Ñ Ã$I–³ÙÙéišçˆR†º,+@Ó Î‡ƒÁÞÞ^§ÝŽ[-N)&$Š"cL1!¤Ûé@•”Œ±‰”n8Û%Nz%‹ëà`® Øh´v<ÚUD 4ÖMc¥´•e©´vô„Wz°Ö*­‰c^E¦rÐèâÒU3Ó¥KV)ât¹×©–“ÕÚµ4ÁG£¼µ3D†ê$¾”Ž7Um$z®HêÂi¸‘÷¹«º˜†Úƒ?êý>f›þp#Mýx#ñcƼÉÛµÞ69N|r1ôÅi›|§Ž8c)%CX›,—J©ÃÇßzÿý­«WƒN'ò} ¡ÑšcÌ(u2W._><<Ô„Ï«ÊÒ*ÅøÁ+¯ ³³ŸzúivròÒÎ"ä‡ï¾«úæ×¿~­ß¯~ñÛÿa ÓúÎoß»§ËÒç#ëúôääüþýó““ÉÉIe­#ç/²,ŸÏqQ$çç“““z¥žuÂXšçǧ§œskmäûІPàye–Á¦!QBš4URªjûþ¸Ó¹Ëùt6Û¹y³à¿úÇÿø³/¾H‹â¿þ‡ÿðýíßî-—ïL§a†¾…¡Pêoûþýûo}÷»G³Y–$¿ôÕ¯–Uå)u4™ wv¼^Ï@èxÊë¢UE ¢A¬ |_i]æ9f¬Rj¹\ÖJ¹$mØï3Î9B‚R]×ÀÚÐ÷}!°µØ‰“G‘kÕ²(2Ö†a¸¿¿…a²\r7À円ÀEáБyž;]tëFœœ¼”Ö!GMâÚŽ*[ã´•RØZ€ètÔÝNNsM§­µR~è\+Ș5õ†R àê…V_Λ­W¯;MKyÑŽ^Ay6â³ CrÅH³²|c £T;mÓ•>Ôf¸vhk!›¥äsÐúÀÍsVfòa!ç#–ù1 €0Ú€09CZC+\ïrmîL÷VÐ5À‡’WîÁXš¦–1@–eMÓœŸŸ¿÷Þ{ï>xpã'~b<înmUQœM&³“bíb2)³,î÷Ûýþ¢ª²¦±ž·´¶ ‚εkÿå?úG ËÀr âøå—^º:¼úÊ+¿üËøÊ•¥÷ß{ïüþý7_ýÝ·ÞJ’Ä£Y;›L~øýïßþÁˆµËùzâûÙrù(Ih–A­ãN§”Ò£¬ulÿçóy’$FJßóò¦Y¤©rö¡†ÐPdUŠ@H­õ…ð}¿òt>ÿO~ù—¿øùÏ+TÓ<ûS?õŸÿƒð?ýöo·ºÝ+ׯ÷öƃÁ€Ço¿ýÎoœ|ðÁ¬ªâ8&?÷s!À¹ÅøÙçŸ_Öõà©§˜ï›¦á÷Z-Ð4eš6R–yÎ…èt:Ý^Ï Ã¢i¤RÌ÷f‹ –bÌ)•N¦Okh­nUU6ŠRRJG€e™6&Œ"kLQ†±²,£(b”öáyçÓ©RJp®Z„e­‘Ò!ûú_;9xGçJùCcÖ‰ÐÚ-!б•ò‚dB ¥j㤋Wœ4ëeì*….ì´«~ºµ8c3Æ…Z›®åCôÏjUèc´¶ÆØÕJ6ƸœÓÕcñÊ Œ1ȱ 9lЦ¯‚!Dþ#¾k3ñÛüïúøØånšX5a×/Éuo 5BÈl|±õ6HyB»*•eI1vp¾v» ”Úo,æóÉé)¶ÖcŒAXE£õùÑѓǎ¸ïGBÔJÏç ­ùÍ›³íí_ø{OÐT•·³¬½ñ⋳ìæg?ûõ?þã¿ö ¿ð¥O|Bq~ù™gjkëñ/c„±²®OOß{ÿýûwï^ÛÛƒùBð8ö¢ˆ`òÜg¬ENOý8öðÒ:Š",„ë :æÝ4§ß ¬ó\[ ””"­«²”N¹^o0˜&ÉQÓì0ƺ]$ƒ­­ñÎÎx{û³_ýêSO?}u{-oßFU•UÕ«-§Sd­` H™ÅË_ýê¥O~òþðOd’À¦AÖÞ½}ûÞÝ»óÅ"ÍsßÍLÅ1 ´6¦Õjww«¦q¤užS0BJJ«TÇí8ö…(ó¯ÖÂSU!¤ÕjÕŽ=ÉWŒ¡”‡Cß÷“åRJ)„°5Z_Ì)¥¥„Özœ;­%Gd 1¾…wÊM´A¡5$P•%àÜZk!t`ek &äCãYÇ~NÍS)䨢sÈJWGub›¥‡Mh?ºpý^³ŠŸ×q¥kÜÉ‹†÷ Ö}Ïc\ÙÙ¡žw\£ýýâñcá_|ë[‡ýáþóO=ý4€sîSZÅ)¥wîÜIìîFB8@}BFˆÑºEUš¶|¹\R„ ÆeQB¬”!‹ö} @&%Ãxo/Ȳӳ3Y–¤(ê¢X0D@x2›]ºzµŒ¢ž{îʵk@ëIU]饧¾øÅÓßý]ÍùÕ«W÷)EE ¼ùÙÏ"!]Ï;yðàäì,?=%OÏÏß~ûí£ÓÓZJêyÛ—/?óâ‹ýáðî£GÁ`ÑmlmSKdY–uÍÓZK„¬b0„ÀqÜpN)‡aØj½°µuiÿìì !ÄÃ0×zž $DíÙ”:²FÁy’çŽè©4Æa/¥”UU1Î1nôÑÅ« ! ´1¦–²@@VóD–1híV[J‹cLY 9¿èò1f¨¬5‰(²ÖjkeU,!ʸ ×™›uÙ•ì©uD ®’Pã4† ±)Ô½ƒÖÐZà$´6ŽS{Er±é–ƒ!ëA‡M_·ùŒ]¯Í¶á:õüÑ”Ò]èæ«\Õtê^'¢ëq„„/*k çTŠ±Òº¬*€ ÔX›ETU­V‹{^kkkwwÿêÕ¯}õ«Užßzøðý»w;íöå7J¤|êSŸšSúŸ}éKƒÝݯüÌÏ 1þ£ý¯ONOo¿þÞ{ÿÝoüÆóë¿þó?ù“@©ï¾òÊ­×^{æ§ÚdY¶Xœ?z¤»]бœÏ_ÿîw¹ç Ï{ÿƒ¢8F7ž~Zj= œÎÐúôôTÕu>§BÌæó c­0¤j)IY–o¾ù&÷ý«ûûAVR¬Rµ[gPÏC¾¯Œ©ªª. áO<ý´Bèìèèú3Ï¥@]¿ùÎ;·nßþù¿ûw³²|óõ×ó`…qC9ÿÝðÈG[ü›.t³Žêncìb?[9dcŒÅ˜zž›GÆ”b)” l-C¨ãy€t¹¤A0ÚÛóB€ºæ„J£Qšeï¼ÿ>Öú—þÆßè  ç0Žñå—C?óÅ/êºþ£ÿðÚApxxØ ‚b2ñ=ï“7o^¶âøÚxüÎéé÷¾ñ õàlš÷îÜyóîÝW¿÷½Ï}éKÏ=ÿ¼ÛÛÛ½Á`±\BBò²MÈ`<¦BŒG# u²\š¦1J5Zyîq…!gìàðp÷øøÒÎç<×ÚãQêîƒr¬^Hc¬1Ýn·éÒOܼYJé#ÐU…9ß¿|ùl>ow:§gggggB]×Rk‡IÚÛÛƒ>|ðàÁýû½NGJyõòå¼,ïÞ»wûþý¢(:Ë%ã<­*ãy;Ãag{ Ôêt ãÐójQ#TK)!DBPŒ¡1”!$¤¿»û B.UU§×ë ‡¾ç ß×®mm­ª*àöÂÖzœSBʦpÏs‹”a\K†¡ëôŠ(W "dM*Q»¹'Æ”Rf%Š 7êˆ.ûÈÊ^Õ&~lëkíEÖ®f ýØ“7 uý[£”caüÐW)Û:?4+e(W ±Öšá¦‘eƒkÃÛcØZ*DQ–ÊÇeŽë¶ÛÝù“'YUõ_~YÕ5§TU.¥ßí6Ƥu-•Š¢ˆxÄ8+ €Ð•«W뺞ŸM&@©<Ïç³"ä/Þ|s’$^Å1@Hx^0wvÆãq^U@©4Ï.ħ”1&]§ âû´i¤”BäyEQq|­Ý”º¹»¬(ò¢`„ÔU¥µvc>©”VÊ•:뢰jŒV RIɬ­êºª*Ÿ1B€ QdY]׌sJ©[-®—î@çvÃ] ï"ýY!´œ‡qØ·uñÿbÅoEÖO~¬yáýœ-¬Îp5ä}¯;aâ0Ð9!ë* n6rÃÚáF±ÔyH²æŽK{ãâ~ì±6ÔMƒ¼(¨|ž»~°é‚ÝKðŠ˜Àl¥› !t©|Ó4®`Ì ©ij„²²„Æœžœy®­Ý»|™aüäààO=ºuíÚ§?õ©»·o¿{ûöí£#Þé<÷™Ï´Z-Bi]×OÎÎ=zÔ®=ÿ¼àÞãÇÇo½uvtôþÇ©”—F£×oݺ~ùrr~>9<¤ÎÑ­[ÛŸø2 ‡wÏÒtÿ¹ç>ÿÒK?ûó?´¾uë–'„à< C§,é¢Î9Ƹ(ËÚ1Y×ÜóB”Ò0в,Ïæóóÿ—­7i’4»®ï¿ùó9<æÈ©*³5¢ÀHP BZˆf4md4“¬?¡—Ú«½h3-´î6m2£¤hÖ⊃Š$`UeUeVefeye› IDATFdL>û7oìÅ w$Ðí‹°ªÌ p÷wß½÷ÜsÏY­*!:ݮǢª$BÂZlŒEˆpŽ(uÊD¸®×þ‹O>™œŸß:8)ÏÎÏÿòG?Ú=kû·7ÙàçGts8·AˆÜšÿkWdnà m7v¥ð‹âëÊë¹Í¾VÁ¾Þ¾Ýœœ_¹_|ŠmüÐÍûù“¾öçÛoÝÞ:Ž#‡1ö}ß¹Žo:Zk­SP­¤4Æôz=kL‘çJ)ß÷â]§×Ëf3‹Ðr>ßÙÙ “Äx”¦Jß»§”ÚÛÝ¥”îŽFY–•eùìÓOŸœžJ¥Ú<ñôi¿ß¿w|œ0¦= ñgò'ßüàƒ€ÅbqëÞ½4 ò³ŸYÎûÝî:ÏÿøOþ¤†çÏŸ?}ùòèÍ7—eyçààÍo|ãÑÇ“$ùÕ_ûµ°Û-šf¹\ÆA µÎ³Ìh­ÚV6ƒ¤ÝlSS7MUUš±0 uÓ¸jÄ‹"E ç·Þxãþd²{td©¤4”c!ˆs§‡ß(E8ïû>‹¢8MŸ=ž¯V~ö³¾ùM-eÒ﯄؋¢F)gÑ4‘!TÕµ±vše†±îÞ^:ƒµÁ`Pa,8¿÷Ío¶Z÷Ó”Rêì)Ýç’Íçó««ÙõõóçÏó¢èv»YUçÃÑmtO,¥4ܪ{´ýX•j„h…€$ ¥ª®ÖR¶®1˜Rîû¢i¤”Œs†Hk‹±Ç¢40#ä{^ìûFˆ²,µ BÈ)¥ÔÚ c­’2étʦ1n‚µÅN¶4 Ñëƒu½Oú¥ún[¾Ák%ëÏÿvT.›½N}Ô7~±¿‰ s³Ÿ´íÅŒ›p¢›‘äëÙkûËÐ_ÀN6eç6º¯¯÷„¯ýùÏÞTv3BRnmNr cœWÕvÍÑNÉØZÓ¤qcCJé ßB|þå—_~ùå¯ÿû¼ó ÃÁ`ÐÑëtÜ«‡ªJAëé³g?ý§j¹sÿ~fíßþøÇVÊ_ýàƒwß|súõ×ç“É'?þqCéÿñïÿý÷ã7þÕ÷¿Ïµ¾{ï^ÄØÿõŸþÓôùó‡|0{õêùb‘/@iE½áP !š&Ž¢0м0ô¢È(õ“ø‡±ÙlvûðpØíbcòå2Žcâ¤YŠÂ³Ìsîy ciÏSBhc@£÷¼“»w ç»ûûÄ÷ó¶5”Zß7Ö†ž‡¢8æA0Ï2Êù¸×ÓZ‡aøäÉFééé© a¸žÍr­¿xù2™çQ'8O©’ÒMxšÞÞÝ圷B)ßxÿý²,ãñ¸´ÖX›ììô;¨ë|¹|úøñÕÕgìz:m©«ªn&DÖ¶’U–qÎéè'„€3š'Dc(c®rs¾³Q”…a]UÖZ!„óÄ$Zƒ”e–9¸´3ƃ@4 “UU'Ž“(ª±Bk±1ºmÃ$©„­#ÆÚ<ÏæsJ¦Ô¼–X^?ÍÛÊˈÛð{=sl3¡ÙÚn¿} Züÿ˸¸gùy/fŒ³å{=–¶Qà Üj¯ë ÁXþµŠÔ=è/õ{¿ô€×~ix­òtÿ»Íø¿” ] 5Mã¶!ñÇó¼óósBˆ[-sÑèJ8Îy¿ßw0c·ÛUJApç­·€±ö÷ÿ“ÇIïÝ»G‚€P7H$›«¬1^ï¿ÿð‡Òó¤Ö„Õl¶¸º²‡‡Ä÷¡ªp]ŸN§½ñx<s „xxròýo~Ót»PU ˜dY'Žßzûí³ù|z~Þ‰¢4Š:Qt°»; þñÑ£€±ÝÑè›ï¿ïD.êªRBxŒŸyžW6Íd6ó£(J’^¿ïy^¾\ÏãË˺ij)±´ßÓÔb´“Ä´­ª*@Œ‰;Îpˆ‚éõûM]ƒÖÿú·»,K!DUUQšþéŸýÙÅ|¾ëyUÓ@Ó0Æ(!žï;“œ4M÷ONfó¹¶6 Ãch>~qQcü_ù•Ùb±ÌóÅl¶xõj~~>¿ºr6Ÿ‹,ó’ÄhÍ8{½ñÁÁ½¦§§¾Û3j[µ¹Å…”Ø5{RAÀ)Ea؉ãÛGGo¬&“Õ|žçùõÕU›enãlgwW9ÁOÏ!(ç¡ï벤ŒIgêHJ†iGa˜/—ãñØ)ójm¾X0„äöÒßž{wˆ„Äßå·AøK!ç ××wtÐk[µ7òK9nøŸxóßcýÚ·o¡ —–]NÞ–¯h“º›b5î§PÏ5]JQ¤0¶æ5×`#Œ!ÝÂÆMÓ ŒÝn~qáÖ[xÖ¶“ù¼®*Fi]ל1B)’²Ê2NéñýûRÂØÞþ¾óÙÙÛó<¯ªëÑÈZõz¶mÕ¸‰¥1o?xðôG«,“® aÎnIp±d-s±Xüà?øûþÐrn;²mý8.ÃPöz­1º×Ãá/DQ׳éÔPk/ÏÏ÷w·ÓëùJá¶µA¯‡(m0n¤ ‡afYîí!f/^ šO&/¿ø‚)õðáÃ,˦Ói”$Ÿ<}š­×Rë(ŽG;;Ãñxœt»VkFˆAÈ „=w»˜1#„‘òN·{uqrŽ)­ªj¸·‡†Ã¢® Æ¥fó¹ïûÚ˜³¯¾ ßùè#dÌ¿ú·ÿ”ZÖµ%D+5 CÀ"ä' °J­±µ!€­*ÌX—ëù\(½øúër±‚ÓÓcßþìÙùùy™çóù¼UʵñÉIECk³ªÇ߸w¤¤ž×j Z3Bð¦ºcžWk¥©hÛF)#e[U£$¹r‚­özÃ^¬Õëõåùy™çÌ÷ONþü‡?¼Z­ ¥Ah„Öy®)¬… qü·ß”Z\]u£H´m™$ãýýVÊd0kÏOO}BDQ°(J!cü @„¸ß Ò³áF k¥È÷!ÂÍIvkîÒn'`«ä`ÝÔÁ'ÛvÑa¡.’]°©ønšX´A&]Õj-`”b„ܶº‘¹òx»‹ì¨ä¬d›d©eÌéFcLÛº°vsä­í«Óo],ã(MpRL&ËÅ¢“¦Ú˜¦iÈlæ>¡0Ž1Æq%IâyžK˜½áðÛIB9wËcMYzœ#ßková Aaèî#6¦ÏC€÷NNêËËúâ ç`­Î20)µ\.¯ÏÏ—«Õ—_|qþô©ªkÙ¶®MƒA1k³Ù£Ÿý¬šNåz½<=½zöŒ~ï{z±øÓßû½'1Îß}c½½³W¯ÊªFËå2IÆalçe]wû}!DÖ4½~¿ªëǯV«¬(Œ1ãÝÝWgg{»»^ìîíF#/(!E–5eÉ7¥þv(d´6Z¯×kW±ŸŸžfYöB{‡‡7REÖ‚ÖÎÿ6Ïs„Ыóó€±åry0w»Ýl±(ËÒÁ’(ÂN†¤”S+k…øñOÚív×y~=›Uµ.Š´Û½u÷n8,Öë«éôüêÊjm 餩†aœœ$i:]­²'Oœ^VEÓùÜh¬5vƒþ;ˆ[Q·- _’`Ρmcwß?<<JÝè(MÓI–¹  ”¢ŒIcŒÿÅ?ÿçÝ4½c·Ã¹½é‚ HܨÚAm»“†!cÌ ‡EQtuuÕévÓ4 W¯^íî쨶m³,+ŠÉtúüåKƒçyó,ÛÛßo´¶”¼qï^o0pj_óõºlšd0 ÏóÂ$ÑZ/×ë°Û;NYFIRU•t{[g.û:*îR!”sçeÛ 1›ÍkÃLÛæëu]UÈZdŒ²¶lš¼m³, ûý›ž‚1«1ê:_¯_<{†¥¤ZÛª:ÿúkÕ4„"ÏWUu½^_¯×ýÑÈã¶,1‹‘0gÒlŒh[â4×7N È÷ž#ŒëJ k-FHjíû¾Ï9ÆXKé²(Ƙ3ö nk!î57¥ØŒâŒ1`ŒPŠcL6¬Ã9)¥73F‡Í˜ÍaEÛ†ÖnðL  EÝ0ô¢û¾óÁ‰¢( ß÷)ç„Ó@È*å^ÒMCéÂÏ-‰ „6úþMb ­³¢èözî.­ÔµX­^>}j”jëz½ZyAp~qQI)µ.šFóõ‹¿ñÝï~D)ÔµjÛŸŸŸ,3)ýÃÃ5Bƒá0Š"îû¦,¥ãÎþ>Â84& ”PÊ’8×”çã»î?~|~uÕßÙAœCÛÆÎí0œ]^~üèQÞ¶­1AŽÇç³YkLQI§3G£B(ÏóVÎù`8 wîÜ!7MãòžrêÃΙ­µ¢mÛsã.BWc#d´c(Æa÷÷[)_¼x†¡«adÛ*­1cÖZ©£Š¢è%ÉO~ò“r½>¹u«EEQʶm«ª.Ë:Ïëº6J…ÎÎînw‹"h[W±ß …„ƹ[w›NÏlŒ®nˆ“ÛUu÷o0Æ3Ƹï»ÚØ"ÄÝ^r]» ¶”Ò™c;ìÐÞ–[›±ÄVi64/³‘9vAh· òM&´Öš×˜=îAë·~ËÁ•(I€1` ^koªG—X9‡ÍÓi¥ÆÆ1W¶Õ¦ƒL(µM“×õd6Ü_/¡÷?ü0`¬]­<÷„MóWÿí¿ýð/þ"MdmÕ4ak„XEŽçûVë¨Û=|óM¨ëw<øë?v‚ó+¥üñAÝ4…œÏ÷)ƵùbaŒñ<Ï CßóÚ¶uì'ÌØøððÞýû¯®¯Ë¦AŒçÜ÷/¯®¤ROŸ>õ’äÃï|Çëtj)'ëõùù¹çûiš¾ï2¹¸h‹b¦UU9ïø²® mÛFJÇ4ÐZ[­€âN§›[Œ-ÆÆUDèFâ–PÚ¿qÿþpgÇ ã®V«0 !¤”ÔYñlý¢mRà«W¯®®¯;Qtvv¶;:± „QtxëÖ`<ÞÝßƲŸùù粪˜Ö¢ª†Ãa¯ßôä ‹¢{o¾ùj6»¾¸ ”¦iúîûïß¹{×g,àÓEU×~§#˲jšëéÔcÌ]„žçaBŒµN \µ­S9@qÎmÿínew>8ç7Üȶ=??wfëŽú‡qWûö{{½Þáá!Òúz2ét:€µuUi¥cœQ×q’€Ö¤i”1u]‡›r3ç¬kkm6¿|™-d“Õ5€Ùrë qkzj§íK©P*J+„n!ÇÙÔÞŒ±|µ²œ÷’¤m[àVûÖYöêâ¢ÛíºÉ~CøŒíîìŒ>™ JQÝnV–Ns6ä×yžÊÅ€ë»6;«fÃŵÖÆZke­{ÕÀ äTñÝâ„pŒ£ø>çœqNY¯×îNt?mÐ{²é·;„nÑÞ-¬½CÈͼ¼õ¥G›•_ žžwƒâ9Ì÷ÿC[«V«õz=Ï9ç·oßv ª*бX­þúÏÿüïÿþï9ÆQ‰¦q7ê(xbÆ’( \ø1fËÒ½}ÒZ{GGqÇq|zuôz8 c Åøèà1ó9¬V!˜Y;ðý££#Y׬ۥœ¯•Ê×kaŒGÈÑÞÞêåKÒ4VkK©\¯ÛÅÂŽÇ1¥Ïž?_dÙÅÅÅz:}öÅgÏž 9}þüƒï|§jÛ4Mƒ4}þüùù|>ÚßOÇc!Ä»ï¾Ë)­òÜépJcÎøÍÕ$„1À8˲ªªœ¼¶ÖÓlÇM‹ï ")µöÆQ[k¤,ŠâÅ‹O¾úêùóç<Š˜ïÎã3¶¥³; .‚Û·o?¼{÷b2ùä§?=>>þ_ÿucíõdâ%Ô÷wvwÃ8®š¦êt:A)›ºÆqŒ•”ÂÀXK)RÖ"„„yžw:¾YEN&ºmß~çý»wŽj£­ÅÆàMkt/r3. Úï­̹v"ÓÆ Œ]i‡ž’”ÖÚ¢(@жíj½¾˜N!Ý~ß7æë««VcŒb±Z±Å"¯*ÌØ–¹åÞ–í›ã(!Î9u;R ¥èF4LoJŒ1Ú˜$I¶u¦u^¿BEÑ–e[UMÓXk©c®:\c)¥†ÖÚ0Žíf›ÉlæänÙUC[hÇn®`»™=º bËKsw3BˆB 5”¥Q!0F.ŒÓ—/•µ³<ÿòÅ‹«Å¢ø_çwx+c@)ÊdÙùãÇÿ÷þÏ'o¼œ[¥Œ@Ç !½`4*ÛöÞG„”1X)Ê9´ígû·?üÁz;;B¡ !ow—â…acm­5•ï[cPšçÿË¿ûwÿ›µÿûüZ©—_|±³³ƒ‹-—c¹³czUuõò%'d˜$‰mÓÈW¯.>ÿ\çùÅdòìåË«ùüÉ“'ªm“$i¾Ìó ç²ÓyòÙgkJ/×ëÃ~ÿo}+JS©5"$‚iM‚ 7 & c?ޱµ”1NÆØó}k­G)H™e™2Æó<©uÕ4Œs÷iÍä ´¶J1¥š<ÿêåKÆ9GèåW_íîí-f³(MýNÇ”B8BFµ^ë¶-zòÿØcyÓ„;;üààÕé)O)îûˆsƒP­Tkm£0æ%‰2HDÈz½ôz^Ji­uýãý(ˆãïœ4RbJ¥Ùz RöºÝÐ÷cÏc”Æê,+×ë0M¥µYY&Ib cÏÃÆ´NìÇÚe]çËåÁþ>@Æpkc1 @èV(ƒÀÏó(ËbßÓ©LÓtw—7 Cïû~?+ŠWWWÃ8®0Ö”bÆh·;8<Ôn@¢æœø>u;qw{=ß÷˲ti#¥µÖófìîÇûwîƒAggg>„„8Ñ CˆRJ(…1Z‡ax#í!B7Zôcó‹\S·xOAk0)®¯ÿü/ÿ2 ‚*ÏË<·RNf3P!¢uÓtwvœwÂØ¸Ð•rv}ÁÎpè'„ A0ö⸥Ôt»8I"Œ{ƒë‘@”%'äÖ­[·ŽÃ^Ï wvò²!„AHÒA„73Cݾ}{ÝÁààà CÏó4!Bka-ÂØ£4ŒcU`žeY]cßï\]Ï[æùt¹D”žÜ¾íGÑ»~8ÚßϲìÞÇç×× ¡ñþ>óýÝÃÃáxL<¯•²•’sîS ÆÈ͸–ÒºM³ BÈa6$xãp‚_'à»÷ʹ(Szƒ˜Ó Q6( ¡RUUqBÊ5Ja×Ü­¿|üøì쬒òôâÂëtœ?LS– cƘ›¤+!¤RFë8Ž‘1uYÚ WIHYæy/Ú¶ÎçgççÜóî¾z…aÛ¶mÓxœwÓ4N’Ýýý½ýýëëë‹ËËÛo¾‰0¦Œ!B<ÏK ‰ãØuS®ku•!$ C†‚ndBŒ1g9Ä1s("BmYÒ œ¯W+µZeeI)õðišUž ­¥Öžç1€ Gý~/ +€z½~õâEo4"mk]ï'D«G3VEÓ4”8Ž)¥J)ÂÁ8¡´®ª<Ï‹¢hŠ¢iš²(š¦ñ©›¦Z¯‹²ÔMcŒqïgQÌ÷B”àÆ!DÛah)Î-ç}€¨Û “/HyŒ¹"B[«Œ1Jùœ;ü!D8wGÂã&+7eís  (BüõŸýÙïý—ÿ²{p`„HÓ”Q ŒÏ ÒT3p~|çÎpwו„1U”éÅE/IzÝ."„"!”Ï„,!YUŽ^†Àó<#%"¨ë/?žL&ÿâ[ߪº¸¸HŒ±ªk䥅àœÞŒ@c¢(ò=/ C§ÓN)Å„(Œ…µÀ(¢Hv»¼ÛÅMc­­¹Z­¼Á(½õÆÁÀ÷ý ŽïÞ½ÛLÖkäûãá0 v«J!D9WZ‹¢Æ B©ÛsÎVJĘ–ÒRжÅfÙÔ•[fãj[ß&ŠB†ò{ñBIùôñãó««³É8ït:}ûÛ¾ÖÄíX«„p¨=‰"„1%„2¦Á„„QD1vî‚[‚n#ål±PZ;ö)f SºÌ2Ð_]\dEa1£HJéØ\œ1„¨kF©‘Ò!ºÄY0ìõû]ßGu]/—ZJWþÕuÍ ÒôhoïúÕ«O¾øBø~zûvg<6.Ïø~w0R:¿Q„ó<‘ç¡çEŒ1k¡®‹Éäé£GýýýÚù™µ-X[æ9cÌ)ZkOއý¾Ö:ÏóFˆ|½^Öu¶X,¦ÓlµjªJTU]–mY6EÑ…ÂçÜ*( CS–¦Ó!„ )•µÒ©Ë3êv=ß_WÕj:½8;+¥ÄŒžœt»ÝÐ÷•Rv טVJåT¤¬ÅÔ¥_ZÇÝvŒ´†º^½|ù§ÿõ¿ö;ý0fghë^ IDATwWk}_  М·ÖÞ½Ÿn<´àGyzúwõWkc²ùœA’$!†y]+έÖEÛvG#À¸.–RhȲÉÕ•SL#q¼7Mƒ ±Æ<ÏcBApxppƒí"J=ùꫦic«å2Y.9ÆÌ æa Î`À÷÷ïÞ5AÐ=<,ªªjš(MGûû‰3$ ’8¦A0Ve¹¬ª°Ó3ßǾãF €)åÖʦÑB8cdë _§3½™›i­Õk¬ß-MÑ›\NÑQõ¶-X»*Šºixx¾tx¨®f3'XdŒ”΃r;,f„k›º^¯Vißoò\VU†`­ÐÚ6ÔÚM&B“É$év-@Ó4ÚÚ0 “$aœ;µ¿á`pÿÍ7³¢°Z×u§)%„3Æ›®V u§Ûeœ»¤FQÕ4EU¹‘€’²©k†Vkl-ó<¬u+„h[Ðz2›ÑN‡+U7 Òšls³å2bŒa,šæñ§Ÿ.9ªªA–Åž—W•°S*êz™eÂFQ1ŸWE!ëZ—¥UJ®×‹³³ÙÅ…k…mÛ:‰†<Ï=·‹Xzµr+5UYžŸžÆ«U¶Zµm«¤Ôî5†0„¨çqΉk¥l‹‚P)±µÌ‰#JI0FÆ´YFTYÎÚÖRZ¶- ÃÑhEFHÔu^7ÌJév6® Ä0¦ÓÖ»]ntkBÔM Ú+Ø DBƒ1Q’¤axrrru}ÝJ‰´^ÍfW——ûã±Öº(Ë¢(ª¶mš¦¨ª²®ëºŽ{½( [¥(cãñ8 ÃÐ÷)@¹ZY€Èóš¶]-—xµr¾(^§EQUVëN’pÎWëuV~š:Í5Ƨ”¢8¿Ùåym…ç†×€• ¥È‰ëQj¬ }_7m[Žç)!¨Öõbá÷ûuž·Ö¾ïÒ&¦4Œc$ˆ£6ƧÔÝ2bµ2ÖÖB4MãêÏ(Š¢0ÔB”Ö"„^ÖõÙ£G‹ÅŸç/_Ž‚ÀmQc”Óä'„ù¾Ò:CÌX+%`Ì“R–EÁŒ!°RˆRƘ£Z×um}ŸY›çùòòRjM=o<¤I…¡+Î$î, ˜Û`r,SÇÊD¹ÔÉdX름.:)X B<~ôˆ'þѶ:ÏRKH˜¦ÖóZk;½ÞxoÏ©Œ€µ %Hù“?ú£ŸýÃ?¼÷ÏþYœeŽø†¡ëâÆ«<_¯×BªwÞ‰Üþ¡çAU=úë¿þýßÿ}cL²³3ÚߟU`ì²!ÄÉò8#;×¹bBÀóòu+*ª®£$Y¬Vדɋ/æóyÓ¶ÂM´Bgg^/H’ƒƒƒN·ë"¦ª&¯^Mg³‹ÙÌw»Ê½ƒºi€*&A­VEQŒ0vºƒŽ)…8¥!BˆÐJµ”sŒ±%$N’ Š<¥DY¶e)”RÆ€[)@È'd˜$£4-§S¹^@eL™çÖa¯ž—eÙ*ËìÞ „)5JÆ’(jŒiòÜmÊK)µR¨iˆÈyHTUQ„]ÛòŠ1â  À˜0f]9F‚º(!€P @âqìS aè µ¾ÙùuIÍZè„aÇM’ggëÙ¬Vªj0æíwÞшal•ÒÎ.FÊme„q¶RkdŒ›c8ŸTk­–Ò8‚1Ë‹‹¿ùÿÒn×"D©°ÖÃÆ ckLÒíÆ„uÌ ¥@©|µ =o08ŠzÝ4cÎàÛj/ëùÜdÙóÃÃ;ƒ±öìôôïÿöoöÃîîì|ãwÖJÍ Cg Ç1&„´Jyž×étÈ6k# ú}„ñîxÌŒ™•%w# !¥«õºÍóËËË•”‹,«ªjwwwÐízŒaBÆMQ¼ºº¢œgeI é ±ÓÛr Î6Ä û>c¬¬k÷s1`­ÖZX«¬­É/ª 8„fµZ1Æ\»Eq·‰£D9å8 `äÖ¡¶iR¦,“8¾{|Ü Ã‹/8BJkp¦‹›q¢c{ wvʺJa8è÷£NÇ÷¼ÓÓÓý““Åry=™¼:?_,„Ò(ŠÒ8n„¨šÆjÍ IâØ9{µJ¡¦YM&_?{¶Èó7! e¹^ƒRªi@©~§³X¯¯¯¯‡ÚÇIr¼£ÿ8€_Ji¢”:5š‹‹ $DÐV•u*,œûž—M&„®u@i7tUÍNOi§#;J)‰PÚé´J=þüóGº]"¥µVjmŒ ÃÖµ³Žq-aŒ#„XŒ³ªZ.—ëõ!”×õ`0°5¦i†€±rs<αï#) mw4¢”„BJ-BLkl-§4ð}´á~¹kÔ'„"š†SJ1FRfËe„Ôú¹µ½NÇç|4`ÎA)¤5`Œ9Z*'„Qj”jÛÖ=›vHöƧÙX‹"nDá2éo|ï{-ç€1õ}Ñ4~VEá €B¥”ZûJH)0Æj¤©CÌÜ<׋c!„–Ò§4ö}Ǫi××QY®g³Ež¥TÛî ‡AäeIñ£¨ÒÎÌ©õ}çB|Ãu°Ú¶7̳Lh ¢K\”×××—/_~ùô)Š"ÇqrÆ!Î÷¼0IV«U•eqšj)”ÈZŠP–ç!§·ç°Ù¶m벬¢”:¿.ÐsˆãÁn¤ûèRJÖuY–œs§–)”ò&’{XëÈì†În1a ¥ê¦éÄñîpH¬øàL©„sa-aLIû~)„D(ÚÝ]__Bwö÷ jªÓÖõÿüê+Ѷ_}ö aLi­3E{þøñ“GÊ,K’¤8¾r2ŒÛ««¢ª‚½½bµ ª×ëápx¸·‡ éEÑz: ¢Èɳ#BŠ¢ žAå”ND @œ§§”ÆZ? ÁZ­jÛ¶®[¥´”²i°çÍ ? WEÁ‚`ïðP*Å|_R ScˆÖ7û¦”ZBZŒyaÏ›¶­Àxïà`Ú˜p8¼®kŸ1@¨µÅr)ëZµít:UR Œ‘牦©„X\]iBj))!·<ˆÂ0ét׊RJ”%=¯žÍl–µSÏ;zûm—gg·Æã·ON._¼¸>;{öüùûßúVƒ]¯Æ|Œi–¥Ršù|}qQDÃP·m™çÌ+%¢B+åZ‰ªi&××¾”oEœ[JežS¥:IRç¹çyAš†œsÎã·ÞÊâxñw×VUÖí¾÷«¿*f3n-- AiZU—_~‰k9e¯gÚ6Fh~~>@U¥¤´Z )uUu†Ã¯žŸ/g3Æùýû÷£ÑÛ¿ò+aõ㘄”e9ùâ‹ó§O-ç“,KúýÎþ¾X®VŒóýƒƒÉÕUš¦Yž ¥ºÝnÑ4Óétgo/Ëóí’µcûrŒ5€”Ò¹s»Y0æ´(¥³²àŒ9ç-wÕ1J-ÆÄ5蛦Ü!.` 1†¢Û¶©k#³¶ëªj ‰PÀyQU§_ÝÔõz>¿¸¸p$ °x¸wx(µîv:–„Ðxw7ˆcŒ±ÏX£µÏXkL­µÐúFO™1ƹR*Žãƒƒb-ÁøÕÙÙóçϯ./;ûûµ•ÄÚxSKc€b½¾<=k÷ƒNÇ£”kÍ]@)µœN©kÝ4ºmON B‹²4ÖÒ(âöö<ÎEYAà&‡8M¯®öf3¯®÷>|÷áÙç~úÓ=úêâbçî]îyR©ù|ÖA ª*=9 =Oµm¾\Ng3†1¥ÙtŠ ‚ ç\q‚ C àœOÃ0|óÎÒežÇA¾ŽïûUYzž‡¬m„U¥µÆZ[kçÓiE@©Àœ›A-EÈ÷~ô¨·³CË’G`lŒQMÓhMƒÀú~<Þ{ð`<XW+YæaüòÉ““»w‰1!¥cl gL1›N¥µ­RwîÞÄñòœÖ „âx?Ž¢À÷½(:<<ô;cL^œãƒƒãýý¨×;zðû>£Š‚2&³¬&dö³Ÿ]Îç,†»»M]ŸŸµm‹´ÞßÛFˆJé2ËÖëuÜí&I². g¯çøGnÇí:d9«ÇÍ0йÌ„x Ï#S½f3²‡ ~h­mš ¶õÊ ¢5M;Ÿ³ºnËÒmf]\^~òÉ'n •eY§ß?¹}{oooÿè(Œ¢ÅbA1ö<¯"NÓ(Šj—š¬­ªÊl,9¥mÛ6ÆÈ¶¥”&isN­•R~ádð×ë[·’8vžò¢më² ‚àÖÉIe n[™eTJªTQ×Ù|N0–EaÚ¶Çý(êìïïîï;³{÷î )gó¹µÖÉä5R¦i*›!´X,Ú¶ÅŸ/—*ºÝîÑá!|? 4ü~¥Ô²m9ÅØb¼··—!TN§ÆÙdb„8ò„{Þ°×Ó„€”w¦óùîÎŽ1f4 ‡CÇàõ9×ZscDY–‹E¹ZÎ]Ó!ªJJÙV•Vªªª¶ª´[£U*ϲ°ª€RgÀ®ŒAÆ„žÇ(íw»¾ï) !¾çUBTEáQ:¿¸ Jù”šýý0ßmÛ4 çÜ®3dÌ#ê:0FK·°­¶ èÿü‹¿øì³Ïþåoþ¦EÖÝúžg(UBXŒ­³ºþèÍ7Aà‹MYúZCÛ~õÅýáðàÖ­cEîé$!^”U%Ú6`,êt@»nÄóÀ÷«‹ ݶçØ Ð4M£”šÍ­×eI}?êvcέµFJã`}÷èè·çw(çýá0ìõ‚$IÆy#%µÖ‹¢Ò- Aã¤dqì0½õ|¾³¿?êt²¢(g³lµZžžVÇÇßü裗œó^·;NgÓ©8xLoœºB!m-ÙýqRLjÐé÷­ëÈÝ˜1—1~®,ä8Öjc8¥®o¤Zk¥"ÆÆ£‘™Ï¿üäÇYž¿<=­…X,—^aÜoß½ûÎ{ï9ãuQuAóÅÂMÆù1G¨.KJ©{!Æ•ÖVk¾Ùôð¬ëÅóçÓùœ`EQš¦˜Â˜:Ëò²Œ»IbŠ¢Z­ÖË4BÌ‹b½ö9ïűªëþÞ^·Ó99<ÜÙÝýøãgëõWŸ¾X­æ“‰ïû½4UJ]JéyÞz¹dŒMf3)åhw×spt´»¿ß ´1Z)cmØë?xPä9‚$Ž”á`à!´lÛ2ÏóªZN§O¿þZÜêõN¿úª?ìŽÇƒÃñx´¿¿.ŠþpØítÖóySPUùjõh±¨šf™eU];ŒW#¥tÄZ)·1&;al´–Ö‚R­RFJÁ˜l[+eš¦­RÖZJ)±V¶-b½\2ŒËñØ*å3xžhg‘â ZGØ0ʘÕb¡„p#üÚj"ýì“Oʲ$„pÏ«µ6¹CæÜpBn—s.,€g-Ýl6uÂ0 @ȵ:_{!„¶V±nš¨inø\xCàþ‡?nµž.— c˜R€öû÷ßz«;XŒûý¾¨ª œŸ8PêûþûßýnÚí¥B€h;K4Æ®7KÆ€1ÅÕ•,Ša’œììë/¾°ÖRkúéÕÙÙþññùÙÙ}r^-—ý$Iвôð.Ë›)ÅF“¹AŸóôp²³œk­­Sî „À÷}¥užç®.piЃ7{½nЍ­uy#å|± ÝnEâòòÙ—_ÆÃár½~ôùçÆÚt08:>>¼}; C;£Ñxw×  €0îv:¥NþÔMœØknÈZW}9¦!ö<¶Yr“B !Ät6+‹BYË=j¥ZŒ ÆyUÍ®¯çËå,ËX¬²,H&I'I’$!QttpÐMÓNšŠºžÏçËÅB(Õ”%ÓšiRJËs!¦4Žc‚tN²³µÅ9‡š®“J¡8Nú}‘¦iUE1¿¸˜Îf=Úßß÷ÎÍçóˆ®ëtHA *„ˆ(ªµC`k­Ù˜žd9Ÿæ3Ÿáœëõ¼(¥ËÕŠe弩ëU]gý~(:Ö^©EšõsûÖ­¡Ï>[;7™L’$é%Éx{›$ÉÚ9>`<”`Œ“qžîíE]‡7õ®,ÅÕ.2ÂscƇ†ŽNÓ¬ gÌbµºô˜"tyÖESmY‹´õžÐ¶-ÚèBÅhÔiÇO?}pýúÏùËÀ9àý˜±_ÛßoëúÏÿüÏ¿õõ¯ÿ·¿ù›wnܸX.›ªB…ªÛcì‚{!ëÁ8“—Jš0lÝP¥<Ž¡sŒ1­”6Æ(å!Dû!‚0Ð.!mÓ„¸mÛ6e™ F»[[+¥â~?Ísáºiœ÷i’@Œ}ˆ|‘àµöÆ@k9çAâG)ÕÖ2Æâ8nš&Œ¤;¥”1!*cŠ*ËPc#Γ$ ‡Û{{¡<Ͻ÷óÙìüìL8×KÓÈû²(Üz8+„±Þh´íÚh2ÑJAJ•s‹Å°× YÈI¯ç0îííUM“Æ1rNPê±OÆãkתªâ…8WO©`¶^_\\ð(ªëºíºr¹üÑk¯M?þáßüMäýͧŸVÖÖm;oÛµÖ{Ï<3ØÞþƒ?ýÓ BP`0ø//¿ü­ÿôŸþ«Ï}îðì,K'ÄJk¥5fLZ«!äiša¬¼§IP]§¥TΕe!ÄÞsÆÒ8Nã;'½ÇYÆz=Œ1a,I€ÕšcÜJiµ†ZŒy–%Ãáî“ÝÝ“‡i×YïWeyz~~z~®¥<>>¤éjµRMÃ… XkçVkÈ"ä:AK0 ´+ŠÇRÆYVÏfëõšѬי;ã1Ðz’$Ø{!ÄÄ1 D!T?õÔïüѽøÙÏBÆÀáâ nZ°Î…¯¢~?¼gÙåÍ Ea~…Ê U¥íº£‡m]ŸfIb­=>:꺮­ªõz (ŠQšeY B‚—OJ©­’$‰cEÒZkå=‚÷zŸøÔ§„11cH0~ù _øþÃŽÇéd²h[Gˆ`ÌÔ5³6B¨¢¨’åyŒÐz¹,ËR£Œé¬…ó(‚ŒEQä ||r2 ¥«Ùl²»ë˜LÊ8I0ÆmÛ2ŒC¬¹?¦÷I¿ú}«5ÑšTÕ­Ýݼ׋² @¸ª*¥u8“g³Ùp0Œ9¥"!ªõ{ªª‘2=!1[I”*cÎr! IDAT?F„^¯b|ã¢,Š”Ù4…µYžk);BÈdÒBÙ¶­ŽÞ+Ëõzýðð0Š¢›·nI¥>X,NÊ2ÝÛK´–]—PºE[+ŒeY2Æ8!HkBiœ¦Ð{ãœÍnN&eQp„H×MÏ΀֧ççmÛ*c´Ö«ªZ…'DÚN§1¥-ßþú×§«ÕƒÃC¤õr½¾6üÿò_ž>~ü§_ý*÷~+MsBþñK/%¥Â?ú³?ûô‡mË··ñr™!äÚ¶ÒZJÙh]ãœÃŒ©¦ ¶8bm]×4MÆã¦ë8眱,Ëâ4 8ÃIž÷9ï´–„n–²ÖKé¬uuÝAØY[SÚ¿sçé_üÅk/¾èŒé1ÖÞ»W|üqY×UY¾ÿöÛÜ9%å<ŠŠ¢˜-Æ9E˜ó­§„Hˆ1–mø=€ºª¤”¤*Ê4•ÎÝýÔ§[»»­si¿Ÿ‡swŸ{„Ðp­sŒRÇ/¼ðBÔ葉êÃpU å¥S QæiÁìs¹›&°- sÀ9Y–GGG€8Ž•R‹Ù, Ä‹…Öº,Ká|>FãÕt¤Tˆ4MYaB’,£”Îà "Ä•rÆPÎ¥vÃ?βÌoìêàíÆiš¦gÇÇåjå1nºÎj ¡µöZ+ïcœÒí4M{=$ež$Ëå²ì:¥µCˆB…Ú—@µÞÇQD)­Ê’0Æ£(Ü!Cí &yž;ç‚„-¤sï}’eFëùbµí`4Ê…¨Œé–Ë4ËjŒ}ÛJk±s$IcFkdmhè!ÃÎ]¯×MQ¼úÆéövzpàÛÚÙÉâxÇ5„VJjLŒ€!L $J}ôÖ[Q/–Ë‹‹‹¼ß·E¡¬]¼¿µ1çw®]ûìóÏ?ýÔS™]×ÉÁÀ{o¥ìªª³c«µÓÙì=„fÓih{¬V«A¯—$ÉéñqˆÂ…ÆI2‰÷ªªÖ«ìõN..îß»‡ ¡m Œá}úÅ[ï%cñd2=>îçùžþs·n½ÿío?ÿ '|ðßÿîï„£Ñh9Ÿç„ÎsJWU5+Ëv±PJ‰,C2J¯z•Y’$iEÑÝÉ„bB)ˆ±”Rãœ[,—Ò€£4$ï)‘sÌ{'„3†ªŠââñcÕ¶?ü°<:Z.Ëå’X‹¬M1†<~ð àê !€q«ã|2j¥´”ÁÓrÊ0„ä¿ûÿâÚ;½Ñ¨¬ë§oÝRR²^88úDBŒÕeÉ(ÞGI¼ÿé žL Óˆ@› BïÛ®ƒ]w~ïž*Ëà1ƒv]wrzÐUU­Ë2Ë2cÌÅÅEà㧃Kž$B‘e,0•0vÎ!J ç"¼Å)ÅŒ…‹bàR^rÂ-Ș¶®u]¯×k¿‰S †ÔüæÍßþíß~ù[ߪæóÖ¹$Žýþj:UŒyï!ÂΑe ãAžsJÓ4-›¦iÛN©Vʶ®9c±²m‹¶UB¤Q4è÷[¥!`€÷cÆX€ºº H×I‰6xÒ€mpÞ7uM!$™ªÒÆëõz:*ÕI™¤éµƒƒÐ”Ž11©5ö¾nÛéÑÑüâ¢^.×Mc‹ãét¸½ýôíÛÉíÛ@JÐ4Ê9j FȬ×ÄûÈ{ÚuZëª,çç]UÅ.sÞ‡˜áª®%bk+pqtôpµjš¦Z.½÷Á ¨¥tέ•RårY·mÕ¶,Ž­µ„ó´ßg½Þ¾²mUÓÄ”îmooõûuYž7Šã÷îÝ;?9éŠS/—;;;¢ßYö¿þÙŸ‰4åÃ!].?}÷î/¾øâÑk¯U~í÷ÿåïÿ!ÏõûŽÒ‹Õjk<ž¡¶M¬¥Ó(òi*1îomy•RLˆ(ŠÂM> '.Ù\J…÷¡sNJ)›†!dŒQAo¡ßWkçœs,$ó5ÍᇟŸ×e9}ÿ}®5´6æÜ[»˜Í–Zïu×EQ„(%çÌxŸð¾Ic‚À@þ›ßù\± ðž ±B­µ2&4ÆIp»‡o®ë¥—Ï¥”]¨ÌRʺ®1E]ØY cÚ¦qe©ª*üÌ<Š!­”yžÏæóHŽâ˜r ‰¢(ärE]×KÓ=‰1›Á 3fÒÆ ­qƒ¢„«0œ+×k ¡¶vµ^Û02 3Æ€R7oÞ¬V«z½æI¢šæ¤( BÖ{­u’çFë²,ÑjUL§‡DQD…ðÞCŒÃ{/„¥”º8ôûQ!˺.ëÚ[«¤ ’2 ¼÷¡C 7gµÀеm8䔺ë´1Õj%»nçõlöáG=>9IÓô…ÏþúµkÞ9IH"„êºV©ã pYžŸïO&gE±(ŠiQ°Ç³8~æúuŒqšeºëxšÅ8‰ãáhd¤¬êšq>ä|8YcŒ1 n»n½Z­NOÏúý §ççJ)°¦_î#ÎI);) !”ÒIž'ƒ¤t¼·w÷Ùg³^xo´¶U2ÉsÛ4÷ÎÎæçç÷ONBÒÖªª˜÷£(J;^­^}ýõdkkúÞ{[“ɯÿú¯ßØÞ~øæ›‹G>øîw|ø!àÅÑè¬i^xúé­~uq±{ãF»X4«§tEŠÒ4I²$ië:èÎÃlIK.,èÚ4MN+kÖ”Ë!caœCð„ ç‚I‚xß­V•”Šº®ý|Ž9(%qŒ½WRʶÎÉ®³ Æ. Ö‚!(àC²Z PI‰1&€à\Û4Q–¶E—ÖXK ¡„­ƒ( œžBc–‹ÔÚ(U×uQeÓ ´RÊ:gŒ)Ë2„ )µ±¡,Ë’4’!».éõ¥B!Ïs!wSÚy­ °gmLÈm•rÖ^r&) B[¿œ*)ih+¦BÐ9@Ç¡!è½ öb,BØàý`0°Æœ]{ê).DÝuqž«® ¿œºª!ª®Ë¢ œ‡½“sœ²ÎÚº®MÛj¥0!Ø9Ó¶NJdL„±Ò(Å…ð5JÉÀ& 8Ÿ€Ð 2!ˆRÎ&D·­w1¼7Ö–E±½µuppÀ0ÞÆ£(rMsvzš÷z”R̘ „"´,˳££³££uY^4M|p@Ó”RÚëõ’<¯‹¢•Rv!D+¥¤·Öæ[[uQL˲±–2&!T!h–¥q F#d-0F7 B9—DZ ô ”zuaÿåyÞHÉ“Äbìïí‘,«¬EÖÆœG”¦„`/.Þy÷Ýîß?™Í†ã±Õšs>îõ–‹Årµ2Z/—ËÏ}ñ‹·¼ÆÄ”ž<|8{ø0²öd:}¨”À qûÎÇ‹…ãüú;~µ2u[€s CHôz™®ëHR MÓÆc!œ44(ƒ„à‚ýj#Ò€„`ïMb1[°ÖãH)Bõ¾«ë¶iBßCÈã¸ë:cm#ebŒ÷RÊÙl–Ä1 ôdÁfÜuùnˆ0¾ŒXñÔu'¥Öº•²m[c &D)¥êú’jXœÒéù9ƒPKYUUUUιßmmÙ .Ïs@+ççY–yï¥.°0Ò4F(ÀØ[k1:LAº.Ž"´¡}QJcf¿z„ ïiJHðïRè²ŦwŽ1 BÍÆØ@8÷u éïï?uíÚâââ`?B˲œœ`Œ!ªiF½„ðÒìç\¸Þ̃RÏÊXQ×«Õ R:C\ å¼?"BÆ™APO( pï½±6¤!„Æ!e-E $«šÆÀ²l8|éK_õû(ܽ­õR.ÎÎ~øÖ[?ùà;™dyî!4MÓTU±X«ÕùtzR7¶·‡½^4íÞ¸1ÜÙÑÆ<þÑTÛªÁ8'0îiš¦?æ½ÞÑtZž¥“½½;wîܼ~=‚@8ŸÍ¬µ“ÉDJ‰ê÷ûQA üA Æ`çÆÆ9­T-%Ä2V•%!d{<ÆS„€µ‹¢xçÝwòÎ;³Å qøèÑ0Ï;ÆÌç×oÞ|æîÝ¿ùۿݽvíç?ýéçž{îáýû¯|ï{år™rþàââ¹_ú%üàÁÉ|Fã¶m?zð@xoéSÆèª*´†BpB¬1m×µunãV)Öºm[Ƙ¶ÖYë 1J¹P›‚@¨`Œ³Öà wïœê:­ ¸Jk½Ö!+%ÜC:j¿ßÇŒ9kBB‘¦I’PJ•”dƒE Z« *!õÅ…í:âýá£G¶ëŽÏΔR”±ù|¾X¯Á9^–eš¦]] !zYÖ5 ŒcO)Ï2š$Œó€m!½Õ{È9@dƃ0Ž(uÞ;„º{€5Æ;°Æ) !Ø9GRj´Æku×…ø£T˜#‡eÚB£µ’šÎZè\ðnYku×I„"„Z­;)i;Æ0Š€”jµêgGGÐÚó““¾ý6¢7™\L§c€®k,¥Ñº3b…Ÿ¡Nk%¥µ¶iÛóÙìäô´’2MÓád2 ’^ok<ÞšLc ­ƒb&ê÷µAéÎ"Rc „‚1ÁX=›aï˜Rk-flooïæÍ›ýñ8`/1Àèý¨×»½³óñG!çsÆ{Ó¶ çÏÞ½{cw÷ÃÊŸü`l ÄŒww¯íî JïÿèGR „¡,Žu×¹®öû­Rœá`@ã¸?òSŸzñ…ƒhÛˆóÕj¥µŽãøääDi=œL®¬dPÊË J)R«²¼˜Í¬1Zë$MKk !·oÝÊ­eJÙ¦YK9=:z÷7Ü¿/¢ˆ tãúõ¨×{ïÞ½í»wï_ý«/|îsôßþ[×¶¿þ¿”zç;ßÉ1Ö„Ÿ+ŒßUÈua zoºNu3aìµVJQαs!Œ6&à¿ Æë}H4‹£(NS!"„n@‰¯›wΑï|㪮¯ïì¼ú·kËò¼ª*D©b±\"BŠõšRнæyå}žç5ç Á” Î/ÉK…Š”0ö{N!Ðb‚PÂñÅ) ÓÏ@1pJ¥!ÂF)ç½³ „ÃW àÎa#ÎC«íÒ‡äwZ·m+¢è­5öž\ÞY, ÓXk[c¶ µmËa½ÞSßûæ7Ü»×óλï¢8¾C©G(Éó!‰qš$mÓ;¥Z­CŽ‚Ú ÖT×Rν÷ã@¡®V+Ó¶‚Rár¹l».˲ݽ=e­ìº(I’› ööBƹ^š"„˜Ã®˲0úóÞÇã±ö^[›ŒF¡·Œ±Æ}ªE¥ÂONmˆ -Mç ^k€vBJÄ€$ FAï=à\:(!?™aªsHˆÎ91¢4ÓŸâ\/Ž­11!Ò{qœ$BmLœ¦"MÍj qòðáƒ>ÿÙÏZ,c­÷Ã8œŸ¶­©ª÷ßxÃÅñÎÎÎpox¿%Äüü|ÅyžeLJ‡)!Jkg­ó^—e@²·]'µ.Š"ÍsmmS–Àû¨,SJ÷ƒA­ïÝóΩ¶]Îfn2Áe¹hÛ£ù|k?í÷Ÿ{þù­Á`1›aïC,IÕuIš¶]וå3Ï<³úÌ ˜º,©÷@á­O~òt6;<9iîí‰Á@äùøÆƒ›7¯¿ý¶~ýu åÕ£Gßü‹¿˜qsDZØÚ’]—M& Âz¹ä[[kc:„žùô§'“Éh4Êò¼/„^¯m]˺¶R"„Ú¶]Íf€ýímݶ㦪”Ö!0ûò¼*ËÛ;;ž$Lˆ@p{XmUA(cÖû¹1:ŽÇ·oOîÜ_¿NÒt§×ÛÞÝÝÝÛƒÆ`AÓ¤Îýø‡?üð£–JÁ,I0³’Ò;·¨ªyh;#´{ý:Šã¢ª”REYçúã1F(â<Áåy˜6y¥²$a”¶Z'q@ë\ÇÚZBΉ<ŸìíŒ;)Û²¬«ªg ÁØw]U×"I4„«²ìõzF)Óu!ˆ×¤©Gè|±!LHdQ„iV+g Ü2u0ˆb y¿ï!$ŒEQªD»öc‚Xù’|XšÞû ¼í*#¬=ï½Û„ ƒ€:uÎ…âñÄ ãïàžüü“ðõh“uê6ÐÖÆ4!Œ‘÷jÃG3Þ×u½»»[4 ò¾Z­”÷Þû¡¨ßu-_ÚÚú÷îMØ{öÙdkË(¥Û6¶®×-¥ÎÚ¯—Kh- #µRê°Š$â*ÚÖEÞëEQä8‡Özkqã(²„tÎ-«*Ñšy¿ªk@Y½$é÷ûΘŒó8ËHÈîDHo~äà|§Y”ºÇfÙK_ü¢ÿÁOOÖMU­«Êzï õz_|é%¡òþ㇧gg§§[yþ‰»wÏWÓi€ð àç>Ž6ˆËî c¡ŸgYÈéõû‘%åeÜçá ‰óü29hƒv›`äPþôù“K!Âik“qq 6Ý»WϯðGWO~f™]}CW_ ‹mÀJW/{ò•WŸ Ð(IÂ$ÃZ+ÛBH„°Ö† iýÌíÛý(Š!ô¶eS Š‚GÑØ˜€5¿÷Þçöö$²®™”ºëjŒku5εMC#µŽqÎXkÒÞKç¢$y^·m½\k5BcĹ×Ú4ÅØzßHYTU0×nÇÃÁ`ÜëÅœëº^-—”p“ËçQD6€ÊËÚäýôìLÖõÎxL² "ÔµmdŒˆ¢P±#ïï~âçggR뢮ˢ8?:zÿwžyê©Þ`0%Ä#¤³Þ‹,Ûf €ÒZç”1ÊZfL?XŒ1A8Kœ¨”ÖB¬sJë`ŒYŒCŒïº°q#ƺ®£Œ)cÎ..:^ü…_ø•_ûµ×®Œ÷œ{îÎïüÅ_,Þz«7>zÿý~ýëo?x ÀQdãGŠ"„† Áƒ€Ì„B’ÌÕ:‡ñcè=@HÓ´mš¦Y¯‡óœq~|x¸Z.QR5M@¡x­•ÖÚmm’$ãÑh0Î˲ÌÒt0ÄI"8Ïóœ3æ½';¥ÀióWñïþÖoYç´÷a‚|¹P6‰ÁáqIà ‚˜Mþ(ÚP„¯>ÂMÆÅe›sÀû€ö/üÉ£ìð‰ÇÆ•~ùmâûÐŒq@HcBB)%&$‰¢eR®VBoíw¿õ-Ýu·nÝ¢·ëµwGÑù£GŸÚ““ŸÔõ€P[¦®5B]9αsºmmÛ†l-¡±Öà ô×]Ú¡R¥µõ¾?oO&  »n¹XÔE 씚ÍçÃÁ`o_5ÍÉá!±v$¾ëŠå²—$ÞÚb>7Ji)?ûüóÁyà Ø®ƒR"±ÖP©„s×¶?nºNd¸ ”^ò,ÃEBXc””á¶¶»³ã¤¯ª*Ì·|ðxšv$@– $bç0BÊZ€u.lI˜Rà\Ó4uUŸž­1„J_Úrwî܉Ò4Šã$MûƒÁxk+MSŒÐõkׯãq` ÆÆ!ΘÛÎ?ùî…ã}ð§~éÿt¥†`zÿÌ*ÁØwÝÏPÃkIêÉ•ÿ^aéŸ`–ýÌýäãjú'`¸W‹ðêÈ ›²ì¤äA©D%Z«»Ž 4;9™žœœœœüà•WNîßßî÷ÏÏ¿þoüÎïýÞ _øÂÁ?ûg×^|ñµ‹ ÿ×=‚hÝy¿°ÖQŠó\PÊ×k»Zy%¥Á‘Ä!ì% *:)]ÛÖmË9Ïã˜BHsÞÛ¶m×ë¶(€µ€1UUb8äžO§ï½ÿ¾Z­z?ÿó]Y.OOmÓXïeÛÒ8v·óyÐàMƒ¢ˆK©›"¬­‹{÷ïß?:š­×žÒàjë¬õëµÖúúîîg>ùÉù|~qr’ 1ì÷‰sïÿøÇêÆõz ¬µÆ´U ä5mk¥TJ…<£pâAŒ­ÖBÿ„Øß9"5ÃÕãòoá½1ÆiíµÖc.“Z#„L0³[‹¼‡«tU''«ÕJ7Íß~ë[?úîwß{ïÑþ~½\þàã[çlk ‡@ˆpsÃп` @06b!ΫÕ*\Áz¯´në:4Wð! ¬uΑÍ) 0!¯uàg;B,BM];<„±MUÕm[·-,mÆ„R‘¦ý^¯7!Â2x£'[[ãÑ(Š"kL …7h ñýƒ¹<¯‚ÁhÀ¥i5d8ACÇ\ê?ºN®ÛáO>· dûéë½ÝŸ©E¯¾› 1»:ëþÁSñgVïÕâ7ÉÞá¿™Ä1ǘ‚jjÊrU–eUŸŸWUµX,Îg³^¯g³ÿëk_ûðÁOé·_}uø™Ïä¹xúéÿñ«_ý¿ÿú¯Ž>ýâ‹Â£ããµ”=ŒRþü¼šÏýÖV€Ý䘇% ¾*­½”Ö¹^£(REQ@HÒ8WÕµTÊ:×iú+˜sÇHˆ¢ë*)mèŽ"TVU’${»»,IZ­­R(”Æ€®ƒPc€” ëÎ=úðƒ{GGÙööþDJ¦Sj”2R&B˜$É¢h«ßw„H¥Ú²l×kŠð¾ë:Õ4 ˆ9¬-ºNkÍ£œ;¥<Ä{âƒú/D)h­¥ ‰ó¸ Ù»üƒ:âЂUçò’²‰+„ŒaÆ«ÅâW^ig3#åÛ?þñ;o¾ •2Œ}ãÍ7µ”ƒÝÝí~_"ãb0GtÀÏUmÛ”%Ãxk8Üó$YÍæs$¾mq;k!!o­nÛÕ|®»Ž`L0 B!²–@xyM g£½$°SŒ½sÔ9!0¦©*Õum]kkã4ŒåYÆ#”"„úãq”$¡<ÏCÌSDZÃO0¦›æH€Ù„ìÿÏ©C@8¦œÓÖ^†èm ¿þ‰Óìj=„ã‚ÖRJ1WwŸ9âàÃË©ËW¨Î¯@Wÿ#¸{^=ÜløDÄÔÕÚ»¬H!ŒbË®[,³‹‹ã““ùtjŒy÷½÷Æã±ñ¾­*ä}/M‘1Ÿ¼}[cŒ¤Ô³½v ”% ”ôûÃO|bÿSŸ2œ?躳³3ÑuÎÕu1ؘ.ô«Ó”CÏqÆ„h’¨¢h‹9ª,WI‚)•m+ Yf)õœ‹4ww WÕ¹R`8ß¹³ƒÐ]FQ„nmiVëuo2ñQä0·JEŒÁ,RJ{½žT 3Æ9G”jc­a˜k} @Û4Å|^­Vc霕CX,I¥ºª²J9ç¤1Âa¿ß†MÓ£”sûœRWµL¨Â´RAbá½Q~×”€ØZìœCÈ”Z”1€ªëˆscáýÑ{ï-ïß[ŸœÀ²ÔÞ‹<çÎqŒ‡»»]ÓÄ9k}Û† Ï 1#ï!^NŒ-!ÐZ !2†CÈ ”Z{ˆahŠ:—! ˆ„Ðc¦ IDAT/ ›Æ^xˆ( ¥±vÕ4¶ëÎk-ôûÍ|¾:?_)å´>+ žeB@)aÌ!„ ÃáÂÚõz½°vò‰O¼ô•¯|ñý#úŸHc8!€|oh¬ó¼* !$Ô5°¶u®lÛ<ÏC‘íºNkHD:÷æo ûýÅtúÁG'“½7Œs‹ÙÌrÇc£u]–cm[ÂÙÙY×u!ðÔÀ9ïL³Ù½÷ÎZDH…ù˜ ÑTÞ#B ÆÀ{/%ÀØcì1FŒ…÷€SªÛVJI)¤ééÇ‹ù<¦´^,ò(úèâBx?¼v 1 ÆÎ?þ8„F0k¹÷ ¡ þçйùÅE˘nÛ,ŠœR€Ô:dÑ!„°÷VJ ! ÂÝ àf,„`_½BC!pBHø²iÄ{HgŒs>™L8cý$Á„Äiª´®B<„‘Bï}±Zc"!B`QEAQd6©^î Êþ÷a”eZk%%c XË( Ccç½UŠq:ÎuÛ*ç‚ÈSjOcŒ@y¯”âqœa•"Î¥ã üð5]ZÌÁô­´†±MûDËèji…}%ð‹.×"B>XÔ9÷¥8c¾itUeεm[ÅG§§ï¾õÖÙÉÉr:½uó& i¤Bˆ8v„tRn=õŠcm ó¾;>.æó7¿óÿ¼·÷«¿ú«?þøãµ1÷§Ó¡³ª²ý>‰µÔÚu×iï!çM×ÑÀ®„Ð:(…Æ({ƒA:bÆD–eÃ!´V{¿Z­ˆ1"McÀ9Êy’ežsÎØùù¹Z,¾ôÒK¿ô…/àM`Ž_¯ƒõ ÀÂgÊ2õ(•_9Â(Rö¼  I²¬. ‡1‰¢SnMîߟ_\8k›²œŸŸ‹8Ö­ çcS–ËåÒP7Í|>ÔBž$Yžgƒ¡Tƒ7rd®a…rBƒ®` Â$ÑàÒRã¤T]@ÎwXÝ4ÀZ„1ϲ¦ëŽW«¥s“<¿¶³svzʽ§ÆÀº®ÊR)¥½_ÅÁµkí|~txøÔÍ›²®)ç­Ö¦ªv¶·!ç³Yð…5UG"$åQ¼5RJÆ/ˆÒ¶ms‚±ÀÉvÆDqL¢¨ÓZB“„@˜FÅøðôtVUcŸeÚ{€±áüs¿ð 1¥§ÇÇÔZÁ9±¶ÍçQØBʹFÈÇùj,D8¢œsÖÞäîa­ DÇ‘º®Ão™Rfù—±"Œ¡µV©uÛ&IB0†ab@ ·Ó´6æ²j߬"„çœb ÄÒ aÀãpBÂ`!tuO bΟXÀ>q&‡ï'l\!à}h a !Þ¹¦ªÎ/.ŽON>ztrqáœ{æSŸêšæÎ3Ïç¢<¯¥¬C¥Á9@JY¬VXëõr¹wãFçÜ_½üòß¼újeíµk×¾ùÍo¦£‘l[NˆwNi 1NãöûDJŒPEF)«bÌ)UÎÍ–Kát>_×5YÛehš3f¬­›FblSŒ7¦™Ïq¿q]‡ tó9—‹…ƒ°ªª[ׯ­A¶Wø_ùþ÷_~ùåù—q¿³!ö Àªûy­EÖÖu-µžŸŸ§yžeÙ¬iXúüâbzzÚv”²mÛu]3ι¸mWëu^×»;;ãñø’E½¹±_Õ/¡ rG÷OÔJA3ì6w‰ðO©Ôºª÷‚Âyo4BBЦVEÁ‹9÷ÞC²ÆLÏÎ8¥ÇÇi=sëÖj±ÈEŒRì½ T`l¢ˆ8qn”bŒaJc˜±(ŠBœó˜Ò¢®eР䨻NÖõ¸ß老b﫦é L˲Ìd¸Ü9bzµö›úÐÙtZç B"M¥”¡ñº”Òp± 1÷¡}ˆ7IÆ€àòÎù¿;#i…N0OÓÐŒ²›k7„ÐZ›§i’e”eÓh­Yå½ôÞ”¥3†EQ˜øŒ÷‹ÅCÈB”:ï© TÙeDöOØy`ÈÐ ”ø«ãË*wcØ£PY–(l6œÇ„`Û¦¹8:º÷ÑGï}øáh8ìmm‰4Múý½½ÙlfÎ Ò:g´n‹"¤™—Msxq1þ/ßþvU×|0xjw·Òz=jT×…YTê’Õ%„ǘB)•Îiï)!¾5…Ð{ßT•÷>Š"‡qU–ë¶„¤[[$Ï „ŽREu]×UÕÅGo¿ý—ÿþßL&õ|>?;³um”úøáÃíýýÞÞÞéz}p÷îÿüû¿Ãñ²^¿õÍo~ðÚkÍrùÃ×_ €¡1¡=«” LÕ¶ÀgLD)Š¢®mguY’ë×›¢èšÆ³\­–Ëe×u!BÈöÎNœ¦œ±¢iÖëµÔšÂ#Yv™mòD›àÉ[ Úä 4R‚ÍÜØoîöÞ{ëÄÂ9O9±Í ëÒSÅ1!dµ^ÇœcŒR½4Ýš²ä„DœËÅbÇ$Š,„Ö˜ »M„ÀÞSJ'“n×uÚ[ׯ9%¥Œã"X 8º+eW–Ëù|½\RÆÒ^¯1¦µ¶?Çãh“â 7Æ? @Û4ó‹ ›¦A~ ¥Þ‡J!¤7©L`“TV]PɯI`Ñpwón‚‚Ø„~Ž–’Bˆ(-ŠÂ(EQRJ)Ú‘J)cËål¹dœ÷‡CEÂ~’8 €¶ë¼” Bo- y Ö"ŒE¹ôEiµ\RJã("„t]6 Ú[‰71n—ÍOBÖMªÐäðu@–eÂÚ9kLÝu¶ª.ŽŽÞþñÎΚ¦FI–9Ƙ?¹wïöÍ›=Z/Û“ CÈH¹Z­¼÷Q–‰4EœÏÖëõÉ b÷Î*ÄÅr¹¿·gQuí¹àz/«Š(Õê ñrdʰ¶“RJÙt¥Xë´Æ(­}p™ÁD("±Ö”å_}õX½^=|œ£Ÿ<|ØÜ¸ñáË/Ÿ~šO&JåŒE”ëéô_ÿ:…ðóŸùÌ—¾üåï½óŽ5Æ[«¯†±ÖÖu-rJ„XšÖUeiʲ) @±^W¡qã<ëõ†ÃaÇY–ÆVëuÇã­ÑhØï«¶uW¸qÂ6µêþþ‚Cì Æ\HnJÒ4IÁXg ÓZƒ0æœó^¯®*FiE]Ó̧Óq¿o•f™¬kÔu/<û¬unû©§,„eUŸ*Àcœ«ŠÂy/ '?„0 rƒ_I$Is€Äq’$³ããåzíCèi´¶«• ChBœçü&Κô¨ý<§´um».à-ƒÅüЍmŒ {–1&<’îMXk­÷p“(¶6ÒÅ¥æˆÒ²®WE Ñëõ¤ÖUÓ Œ)¥J)ÐuEYvZ³(*c¬Öcí½ó^£”ÊûýýííD€•òôøx:›1)FŽ0&„ ”æYþlZëpþtámvY¤†d?b:ƒ=Äå1! Cçj>¿˜NgÅÅÅîÎÎüìŒ ñÉ›7ó~ÿW¾ò•·^{ío¾û]Õ4”sN)!$`³8Þ7F=z4ÜÞÖÞßô(Ëó,Mç„Ó¶Á:¤Œ)Û¶éº8Šš«n!¡êÄ k-Â8LçŒs­T?Mû»Àn-õ^×õ¬ªdÛ"cRš²\N§¥Ìûåtà+ÃííuÓl!önÜ@‡K#‚ð¾ô¥òÁâÜýOþÉ›÷î½þÁ«˜Q ÂZBH˜é[ B c aÛu‚ÕÞ:Ê.Äxk‹ Ç1ÂØÖI¹ nü»eg¸Å„ èêóW_bœ”ÛLCÝÅ J Pˆ Ȳ,ÏsY×Ú˜õz-Û:·;™¤Q´¸¸èç¹30”£~ÿ©ƒƒ÷?ú(dUE±\¯1•”UUiçf‹… k(MDaÌhÝCêO&;ÛÛ½4[¥ÞýÑ–ëõ|>o¥„vZ7EÑ*# A¢È…[¡¹ØÖõ|6õ“$‰" aÀðµm+„p©7ÎÃÇÐöçd@¹M?ùê÷æ tΑ¶iV«ÕrO)½~p€9JÅytq|ðq®( ‹PœeÁœN„I2JÓ8M ÀûÝÝÝk»»˜RPUÍj5;=}|ÿ¾v.És!dl8ˆ(‚RJe@?1¹Ì©¹ªy0öZ;.±ó›Ñ“E¨éº(M‘µFÊr½®Š ´½µA¸µµõh:ÕR¶RR!þèÿx8ȲüÉ›oZ¥ªºž®V¼ß‡B ‹8gÎf³uÓ (Z®×B«5‡aŒœÓMS5v`Œ… BÐͼÄã16JI)»¶½¼ Dv{XwCŒ•1°mƒ¸éº,Ž1BBµsÒ˜ Â!Ç{ׯ³4}øð¡¡ô©gžÑœ¯Ök'% 9Šƒáðàé§MQ°~_Å MB]8­´½AÙu‡§§UQè¦qk „˜Re ƒP0–$‰v®kÛºiâªê”"œ‡.ÜgBΘª(D=9¦º*/ÃþÉvÚeÓ\ú-aÄA0†bcŠRŒ±éº¶®QÀ]læuQkƒ„poÿέ[Ízýô­[¥'‡‡¡ïßûÝwéáa£õ|>/ê ë´Ôsrì0f'7@(Š"«” Îóë7onÇP©jµqB­‹ªBØÅ9Ò†>!žŒ">?^/—Xë~–ÅœsÎÖÚJ)e @¨¹*ÐÃ8”uÆÚ°>÷ Â'¡ÖÚ0òÓããÃÃÃùtê)ÅY¶síšèõ4B¡Ýýý]×]g­X›æùþÞ^ÖïSΓ$IÓ4íõ0!³Å¢©ëñh„“Ô5"{iªš¦QŠQ ‚ÖžIÉ…PJ%IruL‡ZnJðPº_ªvÂv{uà°!¶’üd½I¥×uxîüo~9VfeÍU@U LQ¢hj4L³Û–ì°Ü!‡Õ!w„·¶Þwo¡/åèPH Û²%Y$5P¤C$€, P…š+‘sæÿù޽¸ù’P÷[墢â ÿ¹÷œï|5Î5ÆÌ‹ÂrñÚµ¯^e9>9iïï?:88ÚÛCAà:ÜßÿàîÝ' JG³ÙöÉIky™¥)›$Þ´¿_9÷û½á2›N×{=¤”³Ö)%›Æq& eL`Œ—ÓšP„,ÆQ»M)Å…sĘ€s°ÖÖuص–2† ñëoDHêœ4BÊÚª,c,Ix´[­‰?DÏŸ_?žw»_ûçÿü¥k×\QøŽÎy¿OÌhäêZeY6™TJÎÍx|2›ù[hw{Ûs;¬sˆ±¤Õ Ò”Ò¢ª(´ÖŽ4I,B<)õ|nÂ0Ä” ç„‚RÀ¸išŸÔØÇ^~ÎùxÚbë `1üû_–8çœÓM£¬•u=RÞ-E“¤©÷;[[]mªjëüù­õu)åèà ›ÏiíïOG£y]׳YÖ4Ó¢P‚1GøÝö^{zAW¶„ÔÆ¨ºv„TJñ¦™—åÁÉIV2ÏóÉd4ç¢ aèCG­V”$U–!ãSv‚µ`ŒCHS×uU–EžÏýŒ'¥Rª(KmŒçÖ†aèGD°ø‹Ä,ªÎ·¬Ø£Êù¾ÔY „`ŒéÝ÷ßßÙÙ1Æ´‡C"Š‚0̲,ÏókíöæÖV–e÷> £¨×ëm^¸°º±”‚1°0/««êðä$Ïó Š’8ïÀÂÔ¹€RLˆ¥T#ä”5õ@¶Ïs\¡û›!äñUÐúôö®ØÍó\Yký°+Ĺóçù‹_ìöz°·÷èÝwGñ÷Ÿ=£„Ü»ÿŸ}å+ÿûoþæ½=ÞO’JJÆyyynÌÞáa½·wïÉ“õ••x8<™ÏÁÚF©A§S—%(P …pœ;!j¥N[ B@Zk­%qJëªrœ„Äœ·ãxii)`l<›Íg3e Ƙ1欕Y†òî Æ˜ÆZFiœ$N'ˆã »¼œô¯^]¿zõ×ÿÉ?‰¬5H ^5EW^½yüøögüG4Å8,K銢ZëýÑ¢B0ƆÃa’$ÒÀ8îtD[­×Òô£gÏg3Ìy·×ë./Œ™I»Ýét‚ Èó¼œÏ•RÈZ-hì)î)8S¨ýÿ Q‹Â}L+ã§|Œ±•²*Ë““YUF©"Ï#ÎçQM&“8Ž;ƒÁêÚÚõkמ=}zåÊ•›Ÿþ4óþöo˦Ù\_—J}êµ×.ooÿÑù/8DGsÎÂPjíñ„ tŠ 0™Nk¥bkÇÓi•ç²®Už«ªªçó²ªXaØxNÆŒRÇŒÀØjíëÐùÕ €Qª(Šýýý“ý}¿Q÷3È:0;Ž¿T¼òÎ.2yÎŽªŸàÌ ¼ÊÏbôÇo¾™llÄ—.É0 )-²ì»wKc,B'ï¼³][››;Ó©>:êg™‰¢ !µµ.çs€ñ£G›Ãá4Ë?~Ì;¿¹©”"y*ÉÎî®,ŠˆóÑóçqš’ (œKz½"ÏçEáWRà\)¥ „c Ö)•ÏðÖÃÄöŸŒ„ ­cŒÕ|΄¨ËrV–¯\¼Ø½zŠ’ä{o¿ýàéÓý½í>ÚºtÉ6ÍüîïþàñcbÜ[]y+!4BGu}ùÅ9çUÓyÞeÌ8×Hé‚4-ªJ1&ëÚ§s®™'„:ʹEH1Æ;—ç+çÏ„.mlœët¨Ö1B÷ïÝû㎎&³Yo}„¡Q*ˆ"Oó·u½:öº]‚q«Õjw:µµ5mL/MíK_‚¢JO©óQä”BÖzÏȽÝÝ·Þ~ûéÑQE^snµv”Οç>ÿÌ»_A?Žƒ p”*kÖFÖnËÑÓ Ã<Ï )·¶¶ŒmUI¥¨µcOÇkc0cþ¡! !¼LœÃ‡œÇqŒœ+˲ª*pqî}º²²”Z§aÈ)§S™çî݃ªªÊ’1Rf™ø¬./‡qÜ_ZºpåÊ\©Ì˜wwoÁŸ~ãßýÑnܸ±ÄØ¿ø×ÿz}iI6ÍÒ¹s¿ÿ?zä(5‹4E„”eéï\†1ñ6BÖ­¥µ¥1œsY×»slŒUÊ*EjµZŒsÂy à(MÓ´ÝéŒON!À0yïfUUNÊ“ãcY–q9çò²,ËR72(m÷z2š0 9'”c°1ÄŸÞ÷¡Ë™Å“L !¾55†žœœT@guUFÑvY.­­L§ûÖ[W¯]»|îÜþóçí$Ég3pîøððh>¿€PëüyaA0ÞÛk¬½¸µµ¶¶ÆäÓiÇP×~ðÁÃ?¼zå 8w||ÜhBÌñ±Æ8LÓ¥µ5Ì#Äa\–¥ô;R:„ç˜RL©]POÏF|¿ƒª}þ0€¬ª?þVU!¥RÎÿüßxïG?*•*1Î¥<˜ÏM]”^íõòù\ıCˆ ă¢È´û}+åÁñ1Æx0ôû}cŒÇ„…Æó¼ÉsøÙ«„´ÖXk“šÁ`yyeyª*X‹ÙlŽPÞ4r4²BÔÖbksí8ÛíõµµÁ`àÝSEeMC[­$Š8!•1a€–’ c9Ÿ‡ÎB^ÐPEº´´¾²2šÍhñ$Iûý0´s'ÜãM_=²åœ+‹" Ã~¿ß4‚1¦”òu{†N{÷1J)b6ŸŸí!< -¨‹þ\WJyKyß¶Ä;)‰sŒ¢®Õññ¼(FGGع‡÷îI)?ñò˘±g»»eÓœ_^vRúe/H©ËY‹êÚfÙþßyïý÷RΟåõ××·¶ ޹Rʹ0M[½^mL#%^€C~vµ !Äg ™¢àlñòòWJ-çÔ9Be Qj¬µ„cʲ¬ë(5ikBÖ¯ÄÊ<'ΙªrJi¥0Ær‡RJ!ÚÆ^j¡ŠPª´†¦ "R~ðöÛ¨®WWW¿óÃ:B¢^IÉ•jmlD„ôãØ”åÁGacʺ®­õåÖ­õ`0ðK…l:ÍÆã$ŽÛa(¥d9!êºöBeŒ”RI‰òŒwÑbAÀ„8wu—–.\¹2HÓr4ŠYZ[;zú”IiæsC)vNÑCÆy†qÆ'Ó©´6(K†YUÅóy·Û%ZÿÍ›on®­M§ÓV¯·wpð¿üꯆ½žLp^þÜç¾p|üÁ“'µs¡^»Ý^^Žz½¨ÓÑÖæeÙoµ´Öº®µÖ!78Ju]·ÛmŒñl6‹ãXá¯eOœ@ã úN„ž¥Í,ºP¼P±øéûs¿øÂXkYU”ÒˆR•çó££ÉÉÉl>ŸL&˽^©TcÌ,Ë4!¢ÛÅ•á0¦4` I™H)'ÛÛ3JBÆà{ý×TˆþÚÚæ… Ó,»ÿäÉ4Ï•sµÖÖÀqê%Å:‡¨·–µ¶›¦”Rޱ`Œ3štÓJå©ÛÎ)¥ò¢ð§‹[x ÅÓ”­µÒ‡íPÎý7À„ „x¥HY–ƒ9›}ÁyIàéM¸˜ ?>K;çèÿýŸþÓÃ÷ßÿ·¿û»è{ß»ñK¿tncƒ¤q|ûÒ¥^¯wëÂ0ÝßÿÝwGY¶7Ïç,Ž¥1wîÞE WVª¢˜gcŒúÄ2c€ûï¿ÿÑö¶O&,¨÷Éq.nµˆ1?Ýy ™|2ñ^·c@È8§¥¬•J¢È?nñvý­2Z7E!8ß\Y©³ìàéÓÉh$ú}ÑéH€f6‹úýÕ+WzqÜ ‚Ș$IÊÙìàø¸šÏ‘÷h±VK9›Löž?ß\__ëtŒÖ¡b>1vZûîKâÈ#cœcŒνi*bŒE‹¢ƒÑˆ Ñît’NÇjm)¥aõûƒ§{{Ž1†4 ¥T]SJ·Ÿ<éõzÕ|î³"ZÝ®§_Èãcµ·Ç1~g{ûïøam ÁÖ•+ó¦I…0A€„>õå/ÿöÆÆÿñïÿýwß½õ©O%Q$Â0emã)õy•Ƙ0† ÁW„DIBÔz>—_pyfŒß[x &į[?¥Y.ËÓß!ëOtJ=”oÓRbçlUMž>­Ê!TœœJ™s̘ˆñ|¾¹¹ùÂÖVjmȱv4Ívv¼¿è $ Ó$åù$Ë~t÷î›ï¾ûî;ïUJù"aBDAàîã8Fùå ø£À9Ç ñoÛ¿cãm×´µ^ôè÷¥„‹‘CYBÀo!‚1#ÄÿíŒ9ucYÀ›`ua}½EH`íòÒÒhwðA¡Ƙ„ˆ„0Z{ZÙ4užG„YÆ)-ëº7 JH‹R̘×ùƒ'ÐSkmÊ•% ÃãÃà Š&£Ñö³g!B!c5By]ŸÔõAUMj·Ûq§cò\DQ+ŽUQ¬¶Z4õ·ˆ"¿kŽÓ“I7Iä|~’eÅóçƒó糪BJ©º6B(ÆçÎ9²¼|éç~î—ßxãÿùú×/nmñN§rNI‰…ãØCú½%Bˆ0ÆÄ€çúZë¶‹)û'ÝÙÃá…ªªcñó€òže êóÅÎ9ƒÄ1áœH™ïîîî"kÃ( ƒ@×u%åìð°$èøsn{=›$ !^Þq|x8ÍFÇLj±ÞÊÊÞÁÁ´(JcŽG£Ù~ 0®¥ìkU•åy–ç„Òv»í{ÈDŒ±_Š:Œ½í­ÕÚãiÖKÌã øå7óŸÅ7ç§BÖ9L©[°ó½ Á!d”òcŒVŠRj1fAÇq»ÝŽ¢¨)Kk ZÈÜýå×?èc…÷ñ:¤úúu€nÝÚ/š­ IDATz9Ž]»ýÒµk—–—¿ô3?C8‡éš†9w´»»¿¿ß=wn}eåü•+ŸýÜç.]¸°¶ºzrpðú /X­” ”„@©÷¾ûÝ;wîÐ0\ÙÜ´ž!Ç¥4/ËãÙ¬±Ö26ÌscÌl‰ ¥~]G)õÛyü±vô¬‰sÖ²…¦þã÷¡sŽ* ðÇßþöÍ7‚vûßþ»Ǥ„ùœ«¦Ó“?œE]×I’\»qãâ­[Ý¥¥0ŠB€×®E×®€šÍ‚0ôDn6ûá›oþáïýÞÃ'O!…µÖÚ‚`}s³™L¦ÛÛãñ(ÌfOŸ=#Už§aè”2R"ç¢8îôzaúy&É?åOy{B BÀ9&5MÚï‹$qB¤M3¯ëJ)Àx´¿ÿÁ;>gº·7>8È'“²,­‰ÖÔƒq‰ÐqÓl\¼øúç?ßÁ”ª'“ï¿ù&{ÿýîpHãØ Ñ[_gUø1?pccÆþ,Èʲ‘2NSYãÙ¬>>FZ—E‘òÒåË4–××1cʘnš‚µ¸ÕBȪba˜v:A’Ð0L:s››Bˆ€8rÎÃpåòeBcl€ÔuÍœ :+e·ÕúàÎBHBD’hçcȳ´?¢X‹•ÂÄÛóµ×4Þ•Î ÿ‘¿ô¬1 c¢ÃB€vöB Þ#¢”ùõ€Öf6CÖVãñɳg:ËzNÜn7˜ÒgÏlš~å×ýú¹swßzëÿð¯]¸@œË§Sð©©”Ò8Ž) ÛíZk†q«Õ*wvö÷Ó4µJÕu­Â0/Ц®½{˜'+äß sȃSoÂâ×þY÷ñ$à-*¥" ÁÚ,Ë´ÖLˆ4I!ˆ¿CGØZìœ`Ì &=ÑÌw¡èŒ͘×+¥œÖZë`!°<3Cñ Å?™4?ŽÐPªõ/~ö³òñã:ŽÏݸa½X&&wï~ç›ßL㸷ºzíÊÖéüÊ×¾võŸ˜•åÊò²ˆNïu­³l|rrÿîÝG÷î5Yö?¾ûÝãý}ë\cÌÑd2ÜØˆ£Â0ívežc¥"IÀ¹ýý}p޲·½ÍbÇaHýaÏÆØó[ßHøRD(Ï2«Tœ$ˆ±¸Óéb0.>,ÇãÊÚÖÒ’kšÉáá“Gêù\Îf2ÏJ™N‡¥iÐj™V«jµ6·¶¾öÆÿëoP­¡ª ®¡,Ï?¿òæ›Q«ei0N‡Ãñ|®Ñ©×hCÖ„‚( âXjm¬eŒåóùôøx2r€^«U6͹sçÚÃ!ãJkÂX¯ß/Šâ7o¶Úm„ˆãå ÑjaÆ¢~?w.@ئá¾]q8§Y àuncÐ4Ð4·?÷¹ÿùðð›ßùAHkÍ“R:JÁ;cµ¶‹ôU¼¸Aà÷˾“ôw‚ïE½y¬·WöN¾D}áYkaÞXkýºøµ!1&rÎåùüèhþÑGz>ll$ÎX)#Äë¿ð ÝNçW¾úUp㓟Ü{ú´†F©éx\+U!T9gÃPS*XíîìtÚmpÎçÌTEòn±Vk§”öv˜yÎ;5ƒ#„ú™ÐoÛ}M:g#œ'OŸ•"çxöìù‡ÖY攚HYô¢È0ÖêõÊ2˲¥­­‡óÃÃqž ÆZA€óÜãó{Iâ0öò¥qQ¸é”„a¿ß·eÉ0nêZ)E=ÿ †j ÐÔ5rŽ"TÎ禮 Æ«ý>õmUž«gÏŽ²Œs^”eÇEÓ(Œû++I«ÕîvIšš~ãÒ¥¯¾ñ†Ÿ6!Š<ëêýÓúpww4ž»xÑ ÑBWWgÓiãéÑ‘Â9·³³Ã9Ç^®Ú ¢8Æ„øuüÚúú¥Ï~vgw7_yå/ô<·µUçy$ MBx( Ê2æû˜ oYëÿPÖ2ÎOoŒ!(Š4¥8M¢ÈL§loo°²B0žK¹¾º:?œïïì4J ŒmÓ „¥ºªjc|rAã*Æ€S ”¢÷Ûí²("­Wãø\Qkm]ÆBXDˆ9S3Y+•RÆô†CÝ4u]c­Ã0d„ÓoÝ* i89O8zï^³½ýðÝwŸ?zDšžœÍçeù|oow×òàîÝ2ω”ûûû–mŒ®ëb6+³Œ„0Œã Hz½Ò9ﺭ´ÎŽå|.Çã2Ï!ÊðÉ)«ÕZ @9o·Ûƒ^¯Õj‘3×ç@â‰Z)†qY–FkÏrtÎɺ.ªêÜ•+e]{OÝ4„ÊÚ,Ï“$qœ#BúkkçÂ0n·µÖ'R’(¢ðê-¶X ‚ÖmJ?xð +„vN3VZ«´>)Ë*Ëö³,Š¢4 BªÃCS×/\¿Áúúz†Lˆ$I‚ èmn’åå™Öy–-õû^ýêXšž¹‚'@VU)! µŸâÀCÁÆBlabì¹{Ä›Á:wû…¾yxx÷Ç?î(µÒja­Ÿ?|¸Ünk­¥µUQÔÓiSUÀ8‡òX‚Yd'hJý~ÂßnßZ„¥„Rk-áÜ›¸!À)eµFÎEœ Æ8Ʀ®«¦ù°ªNÚ>8È›fãâEÍùþñ1vîËŸþôú•+£û÷Éê*ÇÇ÷Ö[ï~ðY^.(u”6R³YéœE(ÒšaŒ äÝr‰ÇŽB”¢EîÝ©cž%à AQ”b)BÎZF©!9G‚€9gƒ èv‡½Þ`uõöÍ›c­ x퓟üË?ù¤ÔÑxL²k­ÏíÀÚºi´Ö>=ÂДRƹá¼ßï––ÚƒÂB ¡”¦ŒaÝ4^ ‡)%΄:Ž‘r¼¿Ï9ç”uÝmµRÎéÊúzÃy¦”Åøhoï»»»z>?~þ\M&½4u;3­-ç÷îÜÉ›f21̹\Ê Šx[)½¬žQ*( âX)å›(B)%¤EH„±“Ò(å¯a£”uŽRª1>•¥ q„ZIÒMSlíääDeÅX*圌YkeUyйªªÓFÈZJiEŽR”1NHžáA1öAQcŠqˆq”$ÄÇld™ ô®§=€­%ÞÖÑ9Aéƒ;w˜1ã¤ÝfIÒ Èp8¸y³,Ë¥¥¥•µµÁ`0Ïó~¿ß_YkÁ‹âÏÚH!ã6ç´Óa~–sN À?úücY*ÔµË2DH~|L0>::ÒÖÎëúp:uŒ]¸~ýÚõëØÓÇkeQ\yñů]CJ%œgãq£T­õqžK­+c¤”®ª¬µ!ƒ!Ä£g€WÜ,ú}s¶>öÿÀb½ý»Çú)J©gÕxz:@JRŒÔí¶(­ž?ï]ºôÅ/}ÉHùìáC¬õ…ÍÍ++Ó'_ÿ:6æÏþôOÿóÛoçW¥$aHƒ€p­ÁZ4¤Öþ¬q>)É·zùü‡±¿¢ý‡áœ×uÍ£ˆ9׃0VÆ(­c¤µ×j„!6 ç|iiãÚµë×®}òömSU‰sõtúãNç~U•ó9!Ä!T×õ);o±&ÅsÎ=Ã1ˆã¸Ý®­- ‡Þ •1F¬Rç>Q×Hi¤´e Îi„€Ê˜l6»zõj+ŠvwwUYʲ¤íïã8δ–Æ<É2Y–j>—ó9QjØé„BÌ›&olŒ©k©uEc§u ¢8VŒ‰0ônÍZ)Çc!€9WZƒ1ÕdÒ4 㜠½r×Ü<‰NÊ0 ý‡¤ªi²ÙìèàÀTUÈ9ñ³J€ÓšPÊ AœJ}rÎ9穵B¡µÂgqúÃÀ Ô4 fÌa,µ®²Ì87ËóBʽù%É“ƒƒÎÊ Є ­=”ß;wníòåáÖÖÒpØ[ZZÛÚꮯw.]j ‡µRÁ‚7ÛÑ: çBN-ë cZ×Ó§O÷÷÷×××Û++OÏ Ö2Ÿ3·ûðaÓ4eYbŒK)çÓ©Õzow³»¿¯œ›Å`cCB„¸rõ*&ätO¥çš¦˜Ïݽ{«ÛµZOêÚQš—¥ñ‡Ò`Qú¶…ÂZjoŸŽœƒ… x‹aç0ÆÞ£Iû‚$ ªµÖZF)ÀœsB¬”už;­)¥{RæMóòOýÔ/ÿÆo`kÍþ~¾½}ðÞ{ÕóçùÎÎ_ü÷ÿžIù§ï¿_\¢Â˜"¤Ë Aƒ€`Œ+›† üžRß1yiýigŒ*ˬ(Šñxëüù»wîì–‹1˜ á)"Œ±´Õ Ã0J’(Š!‚ ˆ[­8I:í6 ÎØÙ‚GIYÖõl<öÇÂsµØ#gRúÄBÊyÜjm¬®:çè½GXÖ^ÐP]×È­#‹"1F9g) ãØ>^DW—%¢´Ésb-"$ˆ¢N·k½G5¥¡<ËüE¤šÆXk¼ô[)E=NeŒ'@Jµ”œÁÒ:›Í|8iç !!¥~zš9±`Œsîg[߈ª¦‘Œ©…k€#¤¨ÊÒ9ç Ÿéy¡žDrªúiš“ííç½¼²âû=Í9ç„xý+_I¶¶––––WWµs4I€R äŒ9 œcÆYÓ¤Bøå5]\k !àHyðìÙþþïonnþÆ¿úWÖÚïßçœÏÆã<ÏÇÇÇιçOŸ"„ʲ´çÖÖRŒeUõÒÔ"µZív;ϲLëýƒƒãѨ?Xk½›‚¿roÞ¾ýƒ·ÞòLhç\†uÓ`çcÈRal06Î !ÎrÝ‚+zžŽVc¬Åù%­Yh&N-HœÃ•EáÝl‰sUUONL]‡ÁÑQY+ÝîÅ›7q§uM>zç}ûÛ5}ïîÝ€#€.€°­–áQšWgL8çBJ]]Gah}þ!ÔïŒ!4Š´µv!Ÿm𦴖Ôõ¬,-!!)¥EÈc¬J³ùŸ¿þê«ZkUUEQ”Eá ívÒ´¬ªîÒ’ÖZÕµkµÖœsƒ?øƒ0tWumh¤#D—%ãüW¾üåïüùŸÇ66¢$‰[-[×Þáϳ[=oØ8×ÃSZ’7nò¶ùÞû!¿ùô;n„2Fp®cgRŸæéuž›¦©ËRÕuÈX›ó¤Ý0^¹xq¥×ó_…ÿaþô{ß<hÀÚ¥K !uU‰V‹A!%C?vvúý¤ÓqÎI)MÓ çì"ZÐ"„êZ-„Bžå{&öošFk]ùÞÛ;ü26ɲÀoC£¨¶¶®ë( ³••{o¿}ùÂNH+ŠH¼ùq4…I’$Éæææú¹s¢ït»„± Š!¬WWcŒ97uQø0#ÔNÓ´ÛíôzŽÆXÇaAà…N¶i¢(²Æx;X Îa­iÇ!îY‚×b QJ½¬õ(AÈXK8g”â @Œ1ÎW:Õ^/Ƙ„Îa€Ñht¼³ÓH©›F"d+µö眧¹xF˜ÇˆÛí6(åõé`-±ZSUUYQøïZáµÌPKy¦Ê÷8kµÖQêÌ£¬k€2&MS УrŒ!¯ÐÑ:iµ:Ý.AH.¬æ1€ò¢Uç¸>œX` RF”‚”¶)ON(ÀãÇÖcÓñx6™€7V* )ål<¶a(Ûí­«Wã8VJ­Ÿ?¿ÿ÷ÿÖÛoonn&Aw»K««óù¼.Kƒq 4&mµ‚4]_Z²Z¯¬¬„‚v›Ç± ‚þÒÒòÚ÷Ù€Ö¥Â4…º.­ :;OŸ®Þ¾™0Œs€1aŒ…!¥”Szš€¹xÁ‚ïr:Íz€Þoe­Å9å=·O·[¾ï"„(këºæ„¬¯¯/-- :c—ƒÉtÚt:Ç0›ÁdJi!N,À2À@†q«µ±¹Y6 E¨¬ªêè+ÅQJ5RJ)ý.TÕ5öÑœRê¦qg±ª Ý:À)N‚j꺩ª¢(|'â·yaøg#à¼Ójç4B-cvîÞ=}Ú†Œ‘Ço¿ûîÁÉÉ•^è ^¯Ýíú}†cÏeqÌ(ÕÎïvEr.íõÚív+MRpŽ…a’$aš{=øØë ‡ó!Û ÔáÁvnmy™‚ýôÔcÓ˜8ŠÔ¢M5ÎùKj ÎYŒ½%"ïë^)eýòKpÎBƒ IÓó̹N¯·ÛÀ-œ?k)#ç ªd–ñ(Ú{ð@ñøéSCÈóÑ(êtª¢xüðá+/¿|ÿîÝÉhPÊ)œœØ¦ÉæsëcL•JºÝùÞ^E_ý­ß€;ý×v2yáâÅr6ÛòäêÕ«7.^œ'‰¡¾tñ"ÜþÚvîÚ¥KÅ|ž.-ÖE@©ÏÐÒgyXs!´7é¸|ùW¿öµç¿÷{ˆRLiÚn£¦±3Œ¥sHk*„h·…õññ™c²_zù>-tgD6çÍç­=µQ\°dxøƒét:çÏ»ùâ‹›/z& ³{{PPP×MýÇÿø³Éäë_ÿz+˦Jý£—_6QD£HPúìéÓûI­©µUUœœŒÇã0š¦qZs!¸÷À„„NÕC^dämã*ŠÂ(%¥4ÆY „‡¡HSGˆªëV«µ±¶†(­›&JÓÆÚ(Šž?xFѾs“ããoÝzí3Ÿ1”^¸t©Óë)¥ç<ŒÖµ!EQRÎyÄqìóÏ;ƒA¿Ûå k¹ÀxøØ«Ê²:ϵÇ''JÊ¥^Ï”eÇ< ®!š $RÎaÎ%¥Þ‡˜"¢ÈeyYFÝ®÷ø¡jŽq9Ÿ÷:4M/^¿Þ ‚ïÿíßVÎEAðl6Ë+¤ qΩûÙÿößµ”ÈZEµÖ @ãÈReYÈ9!„2›NWVVö•RQ’ø­ uÎ/»ý¦Ûc×!¥uU©ªJº])%â¼Óë=ÝÞÆm¬­]¹téÚÅ‹ýõu0”ò33e& ä9pŒ}ê _­¡ª®¿øâßRU´Û :Þn·Úm„ñƒÇGãq!%0f€R€1®±yn)ó¼šÏQDÝ®aÌ"Ôï÷)Æóù܃L)BÃáÐ#¥ì´ZI’0ŒÃVËDí6gŒr~akK:GѼ,µR¡õµµF)/½ú*å¼nlmÜj­VèÇ`Î)!cÊ9Ã4I’n7MÓ8Iú±2Ëë*ku]kÇ''Ö¹8ǣѰ×Û{üX7ͼӹ|ùòòÚšÇÃÖ´’’1Æ“Mã(¥„8çdÓxÇb  ¤l·ZRUYcœRíÙ•yžFQ+ITÓ<ÛÝÝßÙ‘³£4Ë2ÏaçŒ!ÆDwÀ¸®ë—®_?©ªN¿se¥Çù2¥*Žßþàƒ‡‡‡W_|Q(!öŒY»qÃHÙCHI©=7Šsब›f–eÀ9WÕµlšÑh4ͼ¡0ÆØÔµ_¶6MÓ4 ¢0Z-±±VA‚ òéãǯ}â¯}â—66|¬ËcËÒ)…”¢Bt:4 —ú}#%»}{ucãwîðNç£Ñ¨ÓïO²Œ0fkÆœó4M[Ýîòòòu­üá‡)çP×@iÒj…iªœ{é•WD¯·víÚ…Ë—c  RººÆq|–ì‡#Ö‚O2Ñ‚‚ °ZcJAJqÆ!iL]×ïüýßo½ôÒÆùó3)™Ïˆ'Dpî³.0Æ+ËË>ÑÕî~Ùe­%Þ\tþãœ#Și–EBt{=ÇTë²i>Úß?:>¾}ûöÍ—^zñúõ ŽáÌqTJh£”¬kã)#Tkd ` ­ÖÖ§?Ý[_¿sÿþýçÏ?ú(.Š£çÏ÷wwužS­1M]ƒ1M]“ ¨›¦ÌsBH;ŠÂ$ñ]O(4Ör­EFƒÁòÒR¦UU †CÊ9tz=!„¶cL:NS×Qq,Œ‘JBa’Äq§i†ùl”šÍf{}”Äq’¦A„Q”¶Ûiš²0ôYk\ˆ³Â«œ›ç¹âx¨¢*Šªªd]k³ÙÌdã1¡´ßédY6™N³4œ§iº´´Ôn·ýåÚhÄ1`œO§Ä˜S#†ªRJ1Ƽµ–”²’²‘’†¡”2¯k­u«ij¥òÑèù£GÂhšn»p^•%¥ôܹs\ˆîÒ’÷  ŒåÆèVkä±¾ºº–¦m­ÝÉÉ÷ÿäOžÞŽ¢–Öf2™9÷úg>~ø!QJ(cŒ”®,ý¼Þ4Ȳ œ#§í68wxxH)õÜꪀSª”j´¦R²(åyhL‹1ÑniZc~úµ×~ù _øü+¯ cÀ[VJ✧D8cÀŸ3Ò8¿)Dwsó½'Oj!H’ÜúìgÓv!”¦)u.I’8M£$iõzàÜËï½7À¹ƒ‡¿ñGœÇƒÁ—¿úUC©à@Ïf c§a)-¥cŠ4 j“çMÓ(c)³º’dÞ4ç/] ªc` `ÜY]ýù_üÅ?ûÖ·’$iš&Œ"l ÃØË)”Ru]—EÑýÔ7Íêº>saàœ#/÷·î‚Q´Zcã\>›Q„9—y¾¶¹yåÚµ/¾¤)R‚µ ”¬*fÌéWw&ð±Ö*Qʪ (m­®ÞÆØZûx{Ûä9ǘi9Wk]EYUN)ÆXš$­4Õ½c¬¦cpž ‡¡uN„!"(í ‡X¹H’ÆiL˜¦< µÈîajïw IDAT\7MOŽ“n—2ca.// !¼¥a (­ëºþh{»Ýét:†@|l‹Ûäùx2‘RBJ©¢(Šù+UÌç~å+›&ÏsïX®(!ŽsnLhŒ+Ë Š–––Î;´Z gdkiÕ4¬®‘1e]GŒÙàEägL+ÕJS."ÂX£`Üétê¦i 1;>> kÝIY×uY®­®¶ÚmÊ‹¢Z)iLU–ù|Þ Hžúå—W{=œç]B>}::8ø­Ÿù™W^yåÿúßÁQtõöíðèèx2yôýïÇý>áQZUÕ<Ï«ªB¼p±( «”ÑÚ?LºªpŒ¥öV”y3„c„s*„4&¯*ÖéLf³Æ¹·¶þÍ—¿|óÊ@²ÌÕ5F×µ7ÏtÖžzNiÝX Z;­IY†Iru}=Chéòåh0xù3ŸAAÆøÑ|1‰;@¤¼rñ"\¼øöw¾óã÷Þ[=w.®ë>ñ ¥5£´hš@ˆü5xtïL&!«T6æ“Éèø¸ÌóªiŠºÎšfVU­åå´ßÿÊ×¾¶Òïc € ñ9Ý~gggëÖ­åáð¸,1Ƨj猵ÚZ °uñ"u.ˆã „`œû*õ8Çé쇱ßz;#†" ã4WU£Ôúùó×n܈:°V—¥7~·ž¼j-Õ!;B´µ@[Û8—F¦iZIÒŠã­µµÉááîÑÑãÝÝÝ££ñá¡H£¨?ô––’n·Ýé¤Ýn ÂSª”ÂÅa8>9éu:~0ç Bi»íçZÇ”sÌyš$i»-‚€B[µÖƒáðLi^UØ4³ù¼* ?îÆW®^õ-¸ºÎ²Ì{òk­ÇãññÉIY–~)²Æ`¥|2Ÿ¬öûÒÚcÀBÎ_¸Ðí÷Ë,ó(…±Ö‡Ã¿`ˆãáÒÒ­›7y¬­­5uíŰ04øxâ…|‰r^×µ—_ŒF£I–…axûÖ­µÕU„{=¤—À†QäÆcŸäUÞÛÙ™Ìf`°¶–v»K««½¥%ÇA’tƒ8MO—F„øpR&[Zjw»þ™ 8眺]HÂ0MÓn§œÿƒbCŠ,ÛßÝuÆìì쀵U]SŒ9çØÚ¢(²<×ZsB¨õÕ«Rë2ÏóÖ‚ÖXkŸ#`¤¬ªªªªñtªµæQô™W_­0„0ÅiÚêõ´sˆ±0 BEQ ŒívÇZ)ðÉŸýÙ M‘µí$>[ÁáŸ~ùEq´³3ŸL´R1·_}õd:}üøñãÇ)ÆÇÇÇËÃ!¡YË8g‹Q !„ a?øà¥µTÊïKÿ_¾Þ$Ʋì<üÏ|‡7¿˜22#Ç*²Š5°XŠ%Í–LI” ÛP·ÔÚB£mÀëZ‹^´öÚ€/ Fw/Ü‚å… £CvK”(‰EŠ®‘,VfefÌñ¦ûîtæ^üハª¢ú!‘ˆŒŒxù÷œú‚ڨ众$MHQV  ø/b©”1Fc-OS""S…÷~˜çýñxgopÞG´yÄyoŒü‹Ÿÿó̦ÔíÃÃõññ¯ü꯶?|ã§ççÍrY´m’$I–ЍJ‰xk™eGwï>÷™ÏÀß}·hšd2aI¢Ò4Uj;ÕáB¨,KóÜÆ8šNc¦wïþÊ7¾1NSÐzã4̹)Ë`­@½×Ž…‰[ŒXÛ㜇°3¿óø±®ëýÅ_¼öúë$õbÑVUÔúé£G«åÒóèÑ£b¹/Äp:Ý;8¸\,ÆãqÖëA¤kœ‚”Ð4PUÓé´xãOM&^J£$Ä8GóŒyÆ(cóÅb²¿ŒµÖ@’$1!DÓ4t«a±e²”«•ó~<äÓiQ;{{_|õUðœÆA ! jM”BþT$$:! ³7ˆM£ËRk]7M£uÚïííõïÜÉÖMcïîÆ¤Rû‡‡c]ׄýéTtñ-Ø«²¤1:ïçó¹©ë²(–ó9Þ‡m]ŸŸ9çR¥BUÓ„.¯®rƲ,KTÌÆpøà×þÙ?ƒ¢€ããÿôÏÿù‹Ï=×>}z^Ußÿö·!ºm-@ð^×õz½v*Izý¾Pê`0-ÖëbµªÚv÷Æ|0ȃDJ!£Tå9ç<Éó4I’~0™ì¾ùÎ;Ã~ÿ•^@ÙÓ¶m!¨2„ MQ ë ŠJAç¹Ã…¨‹B1vqr"ùÁ›ofççï½ÿ>K’ÕlV…­ª‡ï½ŒÙ™N‹Å¢µv0Nö÷/..®f3¦T³^¯f³hÌͽ=>ί®€Ò0dÃáÝO}ªÕúþ;ŒsÂÎÁM’ý[·Å¶\­À{mLžçuÓô²L*ÕßÙBô²Ì£›FPêêz:’“,3Æ '.„@cD¸rŒ±mÛº,ý¾1·8ç°´‰×…p…À ‰^#®i(¥¿@­#æ\έñùq“ßØÛ»uû6fIhóØáp„ÀçEQ¬×)ç½~=Ÿ·i Ê{ˆqyv1’¦ Þ›¦QIâ)-Ñœ/µ>{òd_Êo½þúâøø_üû 𛯼B¤ŒƒšLV! ”SŒÑňóêâ"½s‡Ft:Í“¤œÍ~øïüÅïÿþòâbý·þÖ{?ùÉïüÎïþú/þâ3ŸûÜÃC¤§1¦œ÷ÇcÀÁçh~RââCŒÄÚ„1hÛœsÐ:OÓ°v®Ç¹uÎ+E÷öbYÞù…_øÚg? B¤ý¾eŒ7+ËÀy6(BÚ³³½÷Þ{?úÑßxãÉÙÙÎÞ^>MF£f½VŒUëu"„G°h–JY’ ÷ÞÇØ–åÎÁÁ³Ÿú!âz <®TÔz£:ØÕ™ÁhÖëC0Þ;cxÚ×4óÕê§/çsÙï+¥h¯÷©_ ”z2›«Õb±pÎ%IR.—ÏÜ¿ßÏóùÕUªÔüòòé;ïØ¶µÖ¶1¢^½RJæ9P:NS¬cU¯‡õ|‚ä!ìíïã$À‡À81"æ‘^óN¢”&YV6 åœ ±QúãŸÍnß¾õû$šeˆýa´P†@kÍ¥L8Ï8÷Bä£Ñ@Êç?ûYllTË%¡”Iic,‹btãÆr±°³ÙÛo½•QúÍ¿ûw…1ÿ׿ù7¶,M&ëéôÑ,‹"R:¾u«¤Ôä9eìÓ/½tãðÐ*õÃÿøý³³µµ»ý~£5ˆƒsÆcU–2Iêº^6ÍœR£®*dOB@J&Dô¾õ>:g ¡”r)›ºŽ”¾òùÏÿê¯ýškÁ9TÅ ÎÁG¯z|c8bU•ç''W‹…cL.Æuӣњ£Ä5çÈê@ËÛ-üõíâ p\GÉv°<‚vÙ›°ÛZ­OHÖ_?—¯ïgÖñ¤É5ù”´ÁÖIY–mÛÞ¾}ûÆ­[,Ë6GÕÖP…­H|gggØëYkƒ1nküÀ˜h¦$›ª ž"ÑÓûõrùÃÿüŸ_ùò—¡mÿäûßÿ)ÀkÎ ÷÷¯Ž¿ûƒ|êùçONO———ÿû?ý§¿þ¿Uõs¯¼ò?ÿƒð6¥ÃYY2¥&‡‡£7æÞ×R ¥F÷î©áð¤ªÌÙ™¡t¸»;/ ëœõÞÆ¸X.+­[cZc¨­ÖAk”sÖc"c7nßÎûý ­ª¦,}*Ïe¿•rs0øÖ·¾Å…çBÓÐ#ªâáÔÉHB§¥½÷ÖFk)§TÌÏÏggguQJY’x¥XšN’ä‹¿ò+_øÒ—¶1 êÚ²¬jšüþ}äwBU]4MÖëa?C"cçÞÿÎw~òÖ[ ¥«ºfý>MÂÙÙYU׷ަÃáüü\ 1»¼,›† á9].oß¾ùàÁí£#|E眤(}îùçÿðOÿ”rB­}ëªZkÖE‰”ãÝݽ›7òèQ¡õÎá!aŒÆ(9oªª—¦@i’${7n0¥€1%„óžs>™L€óh-zmîèNú)t ß10¥!«u´µw›ªšÏfm]ÆHŒVkí}O©j±ˆãq?ËB–@*åªiöÆc)e‹'H]çI¢8—è–Ç9!©Œ±­ø&ö^­Š(Ï#Ƽ®ø‡sŽ3àÍ7q?ÄH;AǸ,DÖ"ê{Oá”úN÷ †@(Å}»cˆ˜¶EaNçÜ`0ØÙÙAÎÄVv¨b·ùƒ»w)¥uUi­çÞ{׿£ •$c ߺs‘±b½žŸœŒ«êÑÛoÿù÷¾·øòÝ»geyùäIà|8™>8:º·¿ÿõ¯|´)%!=A©bç5!ë¶mx¿_ Ó4KÂñÕÕùbᚦ©ëŒsBéb±ð„ðªj½§œ7Æ˜Õ ›çJJ%%UŠ‘öz>„ÊÓ4Z£¤%1m{5Ÿ‹<ÿ⫯~ésŸ3m«±m+6¹9tº; UÀ9o­×:¢–«1ѹõb±\,´1½Á€ôû!MCžúýÃCĈTm;Jà„çò隦!Ö¶ËåÇœÿoÿè½þÕ¯VeÙVÕüììÛðï¿ûînž;€ÁÁÁðà`4™´ÎYïÙb±È²ãããÑhäBiê Jq¥4!óºÞuNrN¸”à}´6ÍóãlµÊ§S @8Þ»ó<Æýþ­çžk“ä'¿û»|<þÒ7¾A…xúÁÃ,#1L§ ¨R€5††ðÁÇY–!07æI¢×kv->ÄnÑð£!FgŒiÛè½â¼§Ôòüüâôt~q„”¦mÛ¦ iZy_]^A­5Š{)çLŒÎ{ïp.z½ DŒQb `ë–A HòôÛá!8ß#cÙõ ¾8F¿ÃvJ®Éw’$ÙÊaáM…¿‰Ø&EøhÜXI)C½^/˲[·nÑ$ù°ðG_¸Ã£÷<†pzvV¯×ƘñxlQ:NJìR!Ðç-zOCðÖ!BJI) áwï÷ž½{÷>X\iµn£ŒÝ¹}ûÅ_<ÿh½îáM9›ýÞ¿ûw7<È÷ö¬”ŽÆyiÌÅrYh}¾XŒ&“A¿ïœ[/Bâ}U–Kk9¥EY¢3!0–÷ûÞÚŸ皪šÞ¼ùüç??›år:ö‡C£‹±×ï²»ÛZËë÷û˶¥BÜØÙIÆcëã}Dœ‚ƒýý^y¥™No}úÓý&ý¾'¤²vïðÐ…pkw·®ë$þÖ[/}îsãáÒ矗°AùĦ99=5ÖÖMbŒÆËåýû÷Á{Wׄ¦”·–¡2Úw‡ âYiNkÁXÂ9'äìädvqaš&ë÷•”UÛ"oøâòRŽF\ÊÁh伯­ Ùp¨µv ”ÇëK)zÞÖU•*ÅÛ ÁB Eq†¼Ø=Þä‡ða·‰rÈÌêDîc—ˆnív&ˆI$# Èn qŽ ÛÍ}Hip!8ïƒA]ׇ‡‡ûŒ¡Ý0“t>01F¬‰øo¾yyv济1^æy’ei¿ÏÓT%I®a ëmmÀÃrB©ÝÝÝøà¶v°¿ÿYBHžOŽŽ¬÷{»»¯å+ÿãoþfsvöþËùÓÿø…/}é?üÞï½÷äÉ¥µ.„òêjUUùphC8??oœ ëÅ¢˜ÏÛ¶ïc˜LBˆ‘âbdŒõò¼ªª¥°üˆ%(­÷Ëõ:„pc:½wx8ÊsJéñååÅlö™gŸýïÿÎßy套À{cuq‘ÄŒÜ_ ^¬£µÖ˜£ „:W.g§§ç³™Ž1 ÑÖk£5fuuõÞ_þåÁ`pxxؖ哟þôá[oÙõÚk}yzjµ6u]®×ËËËý½½½7Þ?>.Ê2 ö‡Ã|<‡ÃñøÖá!vJ•RÖZÓ¶$„5ñ¾··—Y«õû.Æ(僙eÌ{ÆÔ”ÊIS ~îk_knܸÿÜs´m1×2ÎIT”2¦pçðpØïgIÒ„ (•àýr6sUur||yzŠN€Å¸³»;Am8k±0K”ŠÖBŒ¤ëf…ŽŒÙ « ¼«-Ëùry||\w>ª˜êócŒ£, Œ €TˆÉ`@ÖëbµòÖJ¥bŒŒRï}ôž8kIŒ’sÉ—#!çÜz;G*Å¥$„lù¸1>VõaÓÛ£”Bm[ôZÔq ]ù‡û'ÄȧJ7ª³, Ön'‡Œs\al­‡vvvnܸiŠ!ÀÇÛHøÖ[o5E‘*Å9¿¼¼œîíM(UÝ“bäeŒ¡g:ø”«‚ú÷öö½Þ÷üó?üÉOþÓý¯²×Û >óüó_{ýu[×éxœ§éoýÖoýúßþÛ§OŸ~p|<èÝ»„àT-ÆÈ¤¼¹»‹Õk-bìõû1FÔ¨ÅÌ0M)%»”RFkôy(~Nxï­÷³Õêðàà‹Ÿÿü^|1Wª(Šü'?Y—å7¾õ­_ÿ{¼7e)¥Ì³,®×Ⱥ¾&ÛÜ '¹ÁZ‚ 﫲¼ººªÉƒ¡RµÎZq®~øÇ›æàæM°öéÇ—+B"¥žs«ÔÍ[·öK8ðàÁéééOÏÏŸ}þùƒ[·X’$rs/ILŒNJž$¦m•s‰”ÞãÞdBiªêèè¨Ñ”ºu÷nB6–Ö*!"€Ú<ŒeƒÁéz½lwq!c ånžk­•ÖÀùáíÛå|~þ䉫ë´×këzu~~úä‰-K]×}!v¦ÓÖ˜º®ó~ÿöíÛ‰PרwèP4¤«g¶±(Þ·Öò®¸RB€ùbñÁ{ï]]^c!Î#þqM3 ®Êòêädw4FùîîJˆ$ÏçË%!$Q ‰‹¨ø†2JJ©BÛ¶õQÛ¶5ÎeY–e!D[‹¾Z”ÒE‡ÈÃý潟ÏçRJì²Zk1!ÌnC×ÀMˆ[SP¥c¬®kcŒ”²—eÞ9Û¶M©8Óu®,Kü‰ŠOŽle¹·’vØU>?9 ”Ö7ww‡Œ1¥&H Z_­×“ÉdVUTJ­õª®ƒ÷mÛ†ò,£YöüË/¿ö¥/½ö ¿ðµ¯|å_üëýã‡Û¶¥IòK¿üË)@úàzë­?ÿþ÷ËããÆûäààbµ’œóµc¸ AHI³ÖráÜ{ ñœgB”e©²Œ2V•%Š·s!BŒB)\”éx|ãÆ ÁyUU/µíîÎÎ/ýÍ¿¹¿¿¿.ˉ1t4šýò/ýR\¯!I$@X.©¤×kËRÄPy¢Ày¿^.ÇyÎ(uMCb\^\,?ø€Õ518ç8Ib99?7„ z½X¼û®Y¯vÆc 8ß=8@öC/ϵÖã^ï¹—_Þ½}{éœRjayS” IDAT²»)N§@iÑ4yž·Z3!ò<çœ7Mc­Íói/ÃñxƒJÝž¦!`åi8¶p’1Ö——òììô;ßAŠSAæ¹¾¸Èû}Õï/g³7~ðƒÏ?ó ø‹ÿøo߸áCX,Rʶ,©”ã¢iVëõdgg´»+G#HˆU•ò¼g˜æYÛj”R£ñ•Jk9@½^ !° JJ]Fkï\`L‡0ÚÙÎ÷DHòËz½–RN§Ó¢(bŒyš–eé8_ÌçišJ¥\Ûzk !ëºnš)¥æÚc27Mã‘RrJ­µºi¼÷M]G­ìÒcŒ‰”¢ð1ªÐÎn›+ˆÖØài9O’¤õþd½^®V{;;mU]^\ŒƒÖ˜óóóûwkcnÝ»7˜NI¯‡4Q†b–”ïiÈ5!ÞkcŒ<ïõ¥ eì$õwvw{½„`Œ¹¼¸X­V’1Æñ^”¢1:c˜ïß6fíÜþht´·ww2yòæ›çÆüþO~ròƧ§§¿ûoÿm wvμŸ(¥²Œ_ûœ˜šÇnDƒI‰ÑœQª’¤nJ6Ó÷‚R™çÖ9­uYY–îïïîì$I²Z­¼µwn߯…ûÌg?{q|üøéÓ—_~ùððexÛvÓH cB¿­’½ÂÊ`0pZ×ë54 áòòòüâ¢j[ÑëQ!(çÚ{­µEξs“É„+5 Æãq !"9Ç!F¤üUU¥²,ŒÇã¼ßÏ{½ÆçœÇ€Iyûöíƒ7cOŸ>]­V»»»Gwî º!t²N›†º&Ĉð ð>6 Aí9JÏONTšBZçB¢,Ë¢`Œƒ¶®—‹…³6Z{uv¶—WU¥­UJÍf³¢(Œ÷ßüÕ_øºÿ3ÂóØýÿèpãŒÕµ@sEQœŸŸ¯W«4ÏñžŽ”Z4‰‘¸²ÔMsá÷¾¸¼Œ„hc¼÷Ë¢0Æ4Õx¼Z­¼÷¸†uUyïñøÆyFE¸’rkhƒ g£õC!Œµ1¥” ó|L>•R˜IY”ºêf÷kÞà­Hºl 2ö]´Ö*MÏ•”M]/g3íÜ|±XTÕ¼,û“ɦP'„JêZk­’äúÌÛ!®ò”ÆD– §Ó,Ëd’$zǘ¥)¥”ÅH a”2Æ$¥2F0ÖßÙùÃï~·Y¯¿ñÚkõùù—_xAÖõþÉŸÞÿ‡·ßΆÃ{GG“áðèðpüÁ³Å"†`ëšHÉB`Rbj‘e†iƹ”1éÖÚØA‡PwµÕz½^¯)Eø_۶ά1„©R!ÏËªŠ„\\\Ì‹³óó§§§ºm_ýuŽžj]?fÓÓ X^Û„Vkß41F&D³\΋ZkʹGù”‘÷Þƒ”hy×4M±\fYæ;==…ªº&”"ì°(Š,MçËåjµšÍfc­çEÑ4MDaïó<Œá„–sþèÑ£Ùl† îÁ`@pסênL¤„¶³™’rÓ%Œ¦¹:>þÁw¿›÷ûRJ‹Ô<§”j­ÇÃ!‰±,Šè\°v~y©ËVE!¤4ÖãÜl6ïì<óÌ3ƒÁqѹŠÌCŒ}xk·]D‚wŽ¢#”2BlÛί®æóyô>I’¦il@¾ÞÍÑÚÖZ½^»¦YöûÈ•q!¬«*„ÐÖõY’̯®Œ1R£µbl»ýp' ÞY¯¸»¬l­­ŒÉ‡C‡i³÷áÚZ£%£5ݪ±$Œy£ï6Fì|”¶Ý&o- jj½B–u=IŒMU¹¬s«ªFGwïÆclY£\•ÀDŒ !^+¸`”c‘OH¨š(E}‘,ËçÞZâ½óžÅ˜0Æ…1!äÎÎÿûGôÿ¼õÖÕ;ï´E1LΗËwž<ùÌg?[Åç¿ò•{÷îAÓdœ¿+å_þà•ÖÚ9HSˆ‘‚…h’$-½¯ËR7MÛ¶Öl•”MƒVÞ{”dUJíN§½,Ë'“áp˜*ÕT~N¥ÔÕ|>ÖôÇ<ù›ßîíA µ7†3†Z[­V©ý‹Þïöû(š¦i¹Z]]]Íg³wß}W%I]×R) 8OÚÖ{_–åÅÓ§x¤c)bYB1ÎíììÌ‹²®ûý~ˆq4ÿüÏÿü©ã}@%;Bˆ÷Á{ÚI$âý„Q#Xû!¶ÛÚª,‹…nšápè­Ýp;•r„D­-Îô!!¸›¦áBP¥!žÁd‚YFmŒÃc\JB©H$ø¡I¸w.EÀšs›î ¥À9%D $醌RÉ9à8è÷>táç ç8yÇhu}XÏÐÔžTOF&´Ld6€$Ë´µ `¸»û…×^{ᥗ€R×¶#‹¼çRcðD€né0‘àUÑŒ&F| )%õ>z/’D‚ôÛÔeSõÆxòöÛ/ŽÇoÿÙþ!Sª%äíGâÁ¹uëÕ»w_ý†Bô­mÏÏ«ê™ñø§ËåÒGi¨‹CJÉùr¹ 1º¶ÕZoLHb$œ7Æ(tÒ£´ßëííí%R2Æî)¥²îÁ ÆB€º® cMÓp)_ý¾øÕ¯X¼ß¬iŒÞÚè=#Ä[ 1nÚYÆxc¢÷ÔûTJAˆmÛ‹ÓÓ§OŸ®«ŠÄX¶-Uª5¦ÕZwA`Ó>‹ÑX«…h‘Bäý~ð>ïõ*´Êàý: c,Iò<¯ª Ue¡S’¶Ö²m]Ï?¦”ú¢àZ/ÛÙŒòðáÃ4M9çxÿmFUÞÓËõº­ª4Iœsù`0£Q’e„ÆZBˆ íMv&ç\ôž£QyÂJµŒ1•¦è—ðéçžCµeèŒ5‘%ì ÆPDœàœ­ë:zï}]k±¶iÊ¢(W+Û¶±×óè#ï=µÖy ‰œB(ç- £µµÖÆèc,êºi[ç}U×Xsï @*D.%Wj'ËvvwS¥„»»»;Ó©‚1¶¿¿ß¶-J!lŒ¾Œñ!´ÖF£Ë««¦i>ýéO¿üòË€ØËŽ „U2’Á°¶Áì­uZã¤!ô{½ÙùùåÉÉÉãÇË¢À“¨ÔZ1¦­mpŠEˆµÖ( Æ4X,rt¦´1Æ{o¬Í…`BØîvw!¥Œ1x‘p.*8Oó<†@v†Ãˆ–×ÎÅïmTÙac „çô`0(Šâêê*I.„Öz0eYFЇŒ±Ìós%˜»Æý`4ZÅÁÁâÇ?þñádò™^Ø`C@R휒1[Û„—Ðu<:‡È|‹Õz½!£´m‹~ºµÖ¶i!ÍCؾŒÈ…õ>X­õ™#g É.ÚZ™¦†(%áÜRŠR Aˆu„€®I"EÛÐ=cxô ¯·åfÒÃ÷ÎaÚ[K?ŠV Æ…vï½wŽpBÚ¶Í…@ÊÒ¦¤dlïàààðbtÖFòž`š@`ÃëߪžÇ¹ $“Rr.ã!˜ªZÍç8 !k !«ÅBJ‰ÞZ€ú„Ã矿¼¸˜Þ¼IûýprRZ»ßëÍON$ç­=>::ÜÙéSº{÷îôôôê7*cÖE!„ RRÎS¥„”ƹþ`§i*%öó4Í•¢œç“Ép<æŒ1Æ&“‰à<8§”ê÷zBmÌ|„Ó[ÎyÞž&IòÜsÏM§S”ZBG+¤raöȯN®Îyï‰sˆKj«êìääüéÓº®9¥*I$c†ã\Ó4ÚZ.e Ájmd–eJ ¹3Æ A…ÎÕm+„0Öª=¥u]«4 ”VZgI‚œq\P¥8—(Õ6M$„3Æ„`”’ÀÆ ¥d1:­€ QÓ©RŒ1 §i’Bj­ƒµxZc-Qa/Z)ôú[½CBÖu B˜iGwï¾üê«»GGÀ4Í&íÄô,<Úƒs€Æº~ J!œsëåòäÉ“Ùå%§ÇžH¦ 16ÆJ™RDgAž±P×Úûض‘RÇaL$IðÞ[‹Þƒ¦i\Bí½”R0†M”DÊÐ9ÑG· „k ¥u@:‡£ó „œlótÎ_ò¹»x…¼ T£s1„པÒj­„ Œcd’ܹóÒK/É<ßìꡪ8 ùb^Ùže›§E)žºªV³Ù»ó9(Šb<çI¢µ^ÍfUU-çóÑh4'“IÒïçR¦!¨4]T›NEŒ}Î_ È›ožÌf©1þüœ¼ûWµØÛû•¯}rt´øîw}¿_ÓÄÈCèåy>îÊ$Á¬cÐëõ³L2& I„ŒB!*ϱ9–)…ý±~¿εMƒYi[\Sž¦ºmÏÎÎEñÜsÏݹ“F£­ª 5§:l%Åi8Ç]?¼Ç 3¿ºš]\4M#¥ Þkc¥!„Ƙ¦i€ì&¹@©ì\V¥xÃ*)!H‡Já”RΫ ½ë[4ÆAékc á<0ƤJ[<•)•R2)Ó4uëµ÷ž¦)!Ä2*Ë–WWØâoš&P)îvŒ´„0Σ÷Ö$7M£ÒTpî¼w1b›'Óý$ùñ»ïFÆ~ã7óË_ût·[ˆÉfR œcØ5þæ›à`íÕÅÅ£÷ß/‹bŸ3¦­5Æ€œsæ*5â|/ ÞÓ¬sư6pîÓZ§½žÓºmAˆ`ŒzO•²ëµñžõzLJ×4œsà‘OÐFBBˆð12Î)cçïB`k„KÉ£BÄ­Á=¥$ÂØ½ý¼ˆÅÁÖ.áœ3F8÷ÞÓJó9ï÷)ç«ÕŠ'ɳÏ>{ç™g"†JÔ•/KÂ9H‰Ö#@) a‹°ÃZ”›¦AvIYU^®T0æøÉ’ÕÎI¥Ú¶…<ßïõdžS)!hÛ„ÒAŒØ-H•òRÞ|öÙ˜¦ë²ÆÜbÑ?9;û3Jë—_>¾º*œÓŒ}öŧөR µßúýþ¶£u¾°a[:çœÓmkYU¥´Ç9ÁÄÝZ¬Å‰R¢ƒöòÉdY×£ÃÃW^{íÖƒ™ñR !D„¿x)Ñ۬ׄ1D#HB¨sW——ç·eÉ)­›ÆZ+ó¼nœ'Y áœcY–!‰RཱུÖYëÑ‹E$ć`ç­÷Ë¢HÓ”Qº¼¸Øà­„4ë5¥8/ëš)…ü`L@™]!!Ñ{]UÜœ{­C ݪ­íõzëõz;)Þ·Ö"¾©ñ¦‹™`CI  ºøñ1:çx¿?ÝÙÙ»qÐå×{Ì9Ñ!çCÃ6J c eYV•w.b˜çöòrþäÉÉãÇJÒï·Î!-!$M‹¦q1&£ç¼ÖºÑ:Pª±¨ ÁhkmÓxO©¶V·-ÂXkë¥i’$1Æ@©¤ÔCyÎ ”Š,Û@ICD˜Å¬‡FH´Û*à0fbÁs„çÐ!yJ['p ‰8*¤1¢?tB£€çyBÔº°öÁÑÑg_~y“szm ,·Z!¤¹ÿB))„5&„ ñÎm8!gíʉõ†½$éqcTi:½^¿ßgH,ˆÞk{½^UU€H™p>JÉ4 EQÔm{zzúýï½^_Îf*˾öµ¯ííìŒF#%$IBA‡Íë.%8`]?::çCÀ´ÃwÓ486%Fe¬×ë©4%œ«<F«õz2c÷<`œgY&¤ôzãÁ`4$[Š0‚Œwåµí˜B(Ê#E¥2$U¡N~ ϥ”Ÿ¾wÀ˜Íiä½iN) Á:·1µÖYKC@%ñ~ T"ĺ®×«ÕüâO ,·³©£Ù8ӘʘPY»X.!€H)”âBp¥!yž+ï9çÈ9ŽR~öí>¤Øæ&$\»¶»q»Óà£7ĶTÛÞ»ŸâG{ t‹œêôÑc”±(„$ÄÅtg祗^Êú}p®˜ÏcuY4fqŽxªsÖû:F•¦(Ö’+•fÓ¶ír>/ŠB£² ʪr12)1‘‹x­«š¦5†¢­ÅY9B%‰êõd’0¥cIš2)…s”R•¦(3£âÏx@ת€­=}7xÀõúÈÆ»¾ë~ÖŠÁ'¶îõýü‘ä'ÛJ!Uu:™Ü½?!]ZkÛ4Øu'!0ÎçÑZ»)cËÈytŽãu !xcÒ,Ó!4MÃCq>ÞÝ=<<Üßß?{òÄQJ1ÎZ¢”i[¢”Da%t¨ÑzŸ÷û£É„s^µ­1->ò<—BغÖumšx[x^ŒÑK‰b¬à=GÕ@Ƭµ¾hGAÐ0‚n6ìiB¦²!îïï߸‘K Zë¢`16eÙ–%xO‘ä=þ:îpŽÒ`ZSï©ËÙìÑÇÇOŸ&I)B¸÷1„@)aL£­ÕÎYï[k }!D!(çL™¦išÊ,Ã|UPêÑS@)ÑY2Æ6ˆáîÂBîhÇ…ûä!}=‚]ÿÎõc{û+Û{BÈÆ"’G„ÐxïcÜßÛ»}ëT‹Eµ\jÆ‚ÖÞÚ¨5:“‘‚s1„º®­ÖÞ{gí8Ë’£×úééé²,#¥‡œ#ð¢jƒ¶a”cçP1Uä9zã%yžå¹È2À& ¥TJB)¦—Îû¨uìÚ'ÛOôÉý÷_· ?ù+¸i?¹ÈÛK㇡͕"„+ iŒ‰!ôÑÀ·íj±°L#›Éjˆ1h-påbÎZkmíœÖšcLÞ;€Xמ1ã=§4ɲÑdrpxxóæMFHUår™%‰^¯mÛª$iÛv0Ê$AUlâŽì’$ñ1¶m»¸ºB cL’$ã`çÐ[¦ÃìÅÎ¥$và,Ææ~›É!Æa#À¾0cÀ˜÷¾nÛVë4I^{õÕÑxŒ£ùÙÕ•7F—ež¦   H˜þay£ë:zŸ¥)#d¹XÌf3­užç1¡”ïÞkL(ª f@iB*”)Ó<Î)cL)”LßLŸŒkŸw{Žb‰r=ì“.fmc×ö˜¿ ?ö¿ÛïìîùÙ‰VŒ›ó«ïØTƒÖ^-—2Iv÷÷•R µ®k@:«6™µ›Õp.Ƴm[­×v¹´ë5 a]•1,Ϲ”8œû–UUÕu`ŒrNãY†˜už$ÖZB)C9¼$!¬µàæè$FÎò_ðj»×?þvøÉÈFº•ø™«´Ÿ®v÷„ù»Í_6··µ“ÉäÆáa’¦`LS×R"9,RD´Dç ƒƒãâGçlÛ6u]U'ž)ò ¥Pp¶Ÿç„²®g‹ÅÕlVE[UƒÁ`0öz½ƒ½½å|nBœCŒmÓ­­1ˆÛ€¶m !RJ•¦A©¶mCŒ¬ÐQ¥¶ g 2¶Å"ÆN–Ø¿Bà"NÛ9€¶ihR)¡TŒ±jšºm½swïß?¸s¬­ªjÓtŽ èÌ`­ÕÚ;G:Àª$Ä;'>ÆcÚï¥WWW­µ ¥ ¡vÎe©½OÒ¤¤h‡dKB€s¥ VB0Fq>Þ©žl÷"èU¸ÝfÛûY3¤£Þlo…ë;v8t,òë¹è'CÄõWÙ”ÆNÇ!B(JݾsçÎ;”Òfµ‚¥8T$„p)Q^1ÆH½ŒYï ¶‘œ[”åüâ¢-Šb½¶1¥@ˆ6ÆÆ`BX[› ‡mº¥dŒ1ÎQ’ØZ»A¡[†s›(1"ƒ‰vðxú0ÿþh"ð±O½MÿºÈö×¥£´þùð©®­?tt{æ<C ‡÷ò7¥€bSøù»…#®¥vƒÁ`Ðïå+_³^¯×kAH’$Î`ÛWuÃeŒÞΘº,%çÅr ΋EkLQU¥ÖµÖ %:¢!h–±ú;;÷¥ˆYCøu$'¿øÖ7£*BHÇ%Û^?rmw}òñ3{0?ó°¿~~2 n×çcÉêv{ö9ŒEÎoFÏ=÷ÜÑÑ‚² IcšÚZ)e‚FέBˆã|¹4Þ#’ nšõ|¾žÍÖUå•rI– ¥¼Tˆçr4"Xü Ÿ.»(!´k¶yç"¥øŽZM)eÈùôÁ¡|´Nƒ¿>¦}XnòÚjüÌŸ§eÖot%‘ Øsøˆ12!””~âŒEä‚X;98ˆuí¬e!PB‚µÑ˜@ˆ6Æ8‡™|³^ãÌÙxϵ֜sN)z\GJ-ç1ZëÈʤiUUÃÁ`ggçÕ/|a8™€Ö‹óó¢®Ië¢ÐZSJçB/ËÒ4-‹¢­ëQ¯Œ‰1æJÕ¨äBØ4ÇPß’1Dß^¿ù6#xŒ݇ߦn1F•$8·4÷boÿþ½{½é´šÏÆÒ4mÊiÛveI’ 0µÖJ©µF5¥¶jVeY…©ëu]Ÿœ ÇcB`,":|0È"c‘1èÎÖÍT¬µ2BŠ” $ªÃ.nΚNï5t¨üe›Û«»­ 1Öa.´ýÉ%«ŸÜc׿¸¾cŒXÛ@Œy„)‰”½ñxgÝyž£ wÎÈ4M‰Îiï±ý;‹Û4ÆL×µ‘Ñx\hÍ”RynŒi½§”&ij ŒA‚cÀCC ‚s[º]§„`:‡ØúHHdìÃeºý®÷¨àñ¯{üÿ¤£Û’îBà×[Xìk—UõÁ“'LˆóËËL©º®ïYdZyïŒY/—ëÅ¢1&g‹E[–1FÛ4x(Xk9"MSÔ~O¥,‹ÂQš µ1eÛf½^ÞëqÆò^o0™¼óðarrrüôéùéi°vV)ç{kç’1Üi“Éd¹\:çúý~Ó4œsg !›B˜O3J‘`‚Ú6¡«7iž‹ˆMqBB) !u]‹$±ÞƒµY¿ŸÒnÞcò^Œîîó¼Z­nÜ0u-“äüä$bUVkÎùéb‘% ªuíœcR–Æ\BC¯×;8ðàœä\$‰dÌ9×KÓõzm´æJñtÓ ¡3U Ï,©a«³Õš¢‹8M!3aÁyÛ¶iš¢;ú½÷!FB`,à C¬¹µRJßE ¼•©RÀãüãð¶àìÞƒsŽÆ0€vÍ#ÒdÁ9ã}°–%‰§ôï}¯>=Ýßßï÷zý雟_>z”+U–¥µ¶Ñz>Ÿs!”R‹¢À7oŒqn8 i Z‹Á`_.ID6✤4vÍ?.¥ Ä9× 7¼²1ô¥A@¿7YK'ˆB`vê¬eØâ'UJ)Å9Ú9o‘}À9—”¶MBÀEvÎ!x»:ç˜Bˆm ТÅ"&2Û­ˆ‡‚(wÏ`½1æBTË¥#DÆBxúÖ[ïcÚV)õÁþþjµê¥)¥±þeYR€¨µâ܆ “$„ ½ Lîc¬Û¶Ÿ¦£á°Y¯IÂÐùHˆñxÐï&uã²<=ýÞzí­-V«BªTpÎĈt‡ÐacŒ´k…o‘nè½Ò3ªB<@èˆ[pmBºAyÏ“tŽéH“yòD·m¿ß_œŸÏB0ÖF”Žæ<BfÙ”RÊyQUŒ1l!Î7ø24ŽìŸ‘R`L0†ÒC˜GaÄŽ¬sðDÈ%B%±¸õ1Æ 1 bÄiÙ’;Äæ§ÄN ‘uÐ èÐÀ„èДR‡Û:ðˆXçt]ˆÆ\œYkß{óMÎyž¦ý~?z¿œÏÝz­¤,ë:˲4M«ª „`ó «bèÒ™$I*#‰ŽÒ¨T@n!pÜ(Ek‚°8n‚1q:ر!¥d‡/µ[!À{_"0½ ]¯×xd#š”„à½7œ1–eˆm!TjcŒ‰BαïS.‡â—]M´ÉbbÄÊ ÏA†/佉±¿³cÛ¶m[ÏUŠQê¬5ÆÔOž,—ËÉÐÞ'Iâ½§„LÆcoL[ׄR•¦”R‘eÖ{¾qá|ÀXÂ9º Óÿ¯±7Y²$Y®Umðá‘™5 Þ€™ ¡to(Ò J/¸à'ô†ÐKöÏ‚ BP`½—UwòÁ&íÅqÓ´Q_TEFÜënn¦óp´ëº®ŽÇ¡ï¹”oGØ?á|Î!t¥ô]7 ÃTÍÑÖœêÜfrAü××(¥ nQj0X mm*5·œˆÅH³q)i]3sDCÎešÎ·Ûù|ùñÇÁûι¾ïÏçóív{:ñ]àü¯ÿõ¿rŒ¿ýíoçiš×5‹·Å‡MŒ¥±Ö÷=¡™ËZÂ\!ÇEÖ”ÄãýÆK÷h_ÒZ†ncYçÆXM¾#Sj©#;E$LjÒ~ª^å–ÐqÆXïEÁI 0âr›H I"*µì•e&ç¸x ¡縦…²¬)­¯¯?ÿø#fÄ[æ¾ïµƒLë „˜.x©MÂ"èãœ5FR²Î‘1RŒbˆÙDÄÌN\-Ò LÆF¿¢äàç ŘT ,Õi]1¶ë ó²,®ïY}9cœ÷Z!±I¾ 3R‘$ Î8‡°ØÐ÷êÀCy¤”r)ÖC”K1DÞZ1&Š0ÑËëk×u¦ë’ÈérATr·ÛíÇ‘ÅB)åááõš’ecеÅÚ(2§´Æèž>}ûþñx< Ã÷¿ÿ}oí0 ¾ëŒsE!²ýçÇ ¾°p(çézíû~CgÄï4¤ËŒÀ (/ÆÈUí´¦|ÑœAßc ø™Ð?FÔuaFOˆ ÒÛ¦ïSÿòÓO–y†¾ïo·[J §–åp8Ç×y6"·K×1Q¯V *§Öu]B b”áæ W$L“fSJƒ4î÷œs±ÆïÑ™ÂÌ\eSi\"[¶Ö& ƒÐǪN°–1ÖÚ°,¹~iô°“®F¤437ܱ”„9ƒ@T|5kSÎ"2 ƒÛíâ<ÇÝábäRn—‹wîã7ßLÓ4î÷7L€$ ¥Œ}¿Ûï´S×ÃÍ"Ë4-ËrGƒ JJD$)á]ưz ²U¿wÑ2—RP^×÷½aÎ1ŽÇËå/f@}£YrvD‡®ƒµI9[$–EbŒa]™íœ³ŒU‰Ñˆ U»ÆÈÆÈºf"ŒUï¹ëRŒ#óVN´uQç\Rò}O!@×”BD91f9üñ¸™ˆ8‘¾ëv»ézu"£sj+óŒØŸÛíüá0ìv1Æuš$ÆB䜛.—‡q,)IŠE.×k&ú¾dÒ-e œ_Æa# N›‹ ¯[óU×!–CàR¨Î3Ùb¸9Ã7ç[ˆ2`䬥ØR,³”´®sÅÚ9%¶–ûÞXûñ7¿ ó<Ž£µv_û™Ùì÷¦ëJ×í?}‘Ù˜âý,&BÒ7ä\˜}¹‚TÐÔ¥CÜêèzÌPJUüÌŽ¹3Æ2§R€“‹a£Tó.€HBO–3Æt])e“@ƤR˜È³ùxD–¹G€†3Ü’B? ]•#X$#|}6D˲ hND€ à­û^öû¾ëà­Ýï÷žùÓÇ(?(Ì(!D?D*åøøH5ù‰V¸iY–eq"`³ŒmaÎ¥@]ÆS5‚°B’•ÔQHɹ„`×uG4ô=ê¨P¦iç™™w}oK)ÓDDï—ÛMD8g:a$BK ˼‚­»ïK)ë²|÷Ýw /"‰ÈuDžùô‡?hûäÛf¼t-Ë""²ß33JM\JóºÂRxzz¼óür>¿¼¼cäÇyžo·[<åöÖäŠBX×õv½¦¾/ÌîÓ§O?|ÿ=ªÒ’HÈ9¦Tˆ8çyžm)Ãn—Râ” æ<Õ¸­evÉMå‡Á2çœçyÎ9;ï­µèÆðêý~\ù £DƘÜuŠQ÷µo’ˆE²øDœ³5þ ´\7ŽÞ˜iš2Q‡ÞPæ9%°‡±¶ï{ª˜YŒÙ?<À½"ÜbÌD9gKTj^Õ2£Sv 2qà½ÁûyžCÖZdÉ Ò9çsXdðEDb´]BØí÷\Š)!ÔŠÈ2Ï»Ý.Æ8Ïsß÷†(,‹sŽ`#å\œƒÕù S¢Ô̈2V¸KS{5Œ1q!)cJŒð⌵?ÿáûýþøô„@HŠqš&"ÂP×µ±–¬uÎ-ÓôÏ?þ¸;ãíöz>CO™âõ|K„SJÃ0Œã8MÓéõÕìvÐ(K¨ÕèÆj»"a:nˆ1Æ8k)縮ažÿå—_‡Ãããcïý²,—Ëí¶?üðÃårY–e ê½ëº‡‡‡ùvƒå…)¹%Æ,bŒ9??«wcŒY-F¡ÇÏ)!¨Q‚nÔBª˜ƒ; G QåR1>Œ1¦ëœsEÄZ»t]Œà èŸøýo~SJy<çy»nG_íù”Òé|&‘Ý8Zï»®[SróíöòåK4¨Rv]ç°Òuµ1šRÒõš×5£›QŠMÎÆ˜×—½éº®{x°Ö¦¼¶Ã@έÓd­¥¾_×µs]±Êf. RˆT_<¥s6Ìð Ë’BÈΕxÏ|™gCäEhš$¥Î˜a.//ñtRs‹w;1ãx;Ÿa÷}_˜Qº9‹PJ`Q™¬ !HJ»ÝΔ¼3-"Ñt»Ýr»åœÇ‡çÜ”RŽ‘­]®×RJ×÷1Ãû”˜¨,‹±ÖÕÔ‚7†ˆbJqš†ãq¹\^ŸŸ?~üh­]o73޾ëЮ ƒ3ß2¥¦°²‹Xfã=£sTÔuLwÍm¨j˜½µCס±@ÁâSÎó²Ì1c¼µÄ| ÁZ›Œy=Ÿî6OF¦×þù<Ýn̼V°@f1ÆR‚µN‹EŒäô‡ëÙˆÀ¢ÞïÄF̾ï±Ï]ßÛý>{ßívýããn·ó1–®£Û-çüÛ¿ù›u]o·Æ<cŽÇãñxÄoàlc0÷s·Û¡ 5ƒpˆÈ9w<Q bëûpGkJ êÛ+ä6MÓ”R‚ED}×yïJ)—ËeâB$ÅišŽû=’1ÞéîxÌ9Ÿ¯×ÝáÐu]@’,g×õz:ù§§ü—yz|ì­½Íór>çu Ë2_¯žeÖp÷Ùõ=wÝîxD°xìºòí·x¼!Šëˆ’1×Ó Ô?Ïs\×ççg¸ΦԲI[Ø2çüéãDz®ažO§Ór½zï‡qÇãúåËÂ<õýóósʹ|÷]>ʲäó9‰` 2‚чÙ‡a(D…!¹Íóápð}_êðÇ”’³w½^ÑÞ±E `oÇ8ÏÞûÁ¹aÃ<‡y9Ã_=ì÷ز‹µkÆ{g Àžaͦœÿì›oþò÷¿ÿɹ¼®ß~øÐuÝ¥ïOO)¥%„CLÎ˲H)öÞ{ë\Fé“[k½_×Uªµ|Üï÷ûý²,¯¯¯˜4Òždæãñø÷÷w)¥L$ÌIÍþ¶ëN—Kß÷ûý~žç×ççÇÇÇo?}Ê1¦¼1çóy†a¿à3»÷mý8><<äœO—ËyžÇý^ê6¿AA”Œ ç\7Ž9çËí†<âC/!]q8Æq\×õõõõr¹|÷ý÷]×ÅÏçsJééééÓ§OHö|þüùz½ÂëÃ<–o>|¸¼¾î†áññqhT0'WUÜ8ލµŒ9wó)ˆ°­à´ËPhƘq÷ÀÚˆÓ¤¡kmŽñr¹<-2PDä2M‡ÃÁX»{|$‘i]w»ÃÿïÿïC×]wxx¸\¯kŒûaøùóçÂoøAB‘ÓËËáp€‘IƸ~<ß|ó ‚fx¼ÃõzÇù™Âóó³÷þx8@¬+Z Edš¦qeºÛíp¨ð~úðáp8œ^^žžž oøþûÏŸ?ã¸ßï-óívûé§Ÿ¼÷¿ýíoo·Û<ÏÌüôôt:ˆèééév»A×i›"L‚R‡]ã˜Öµ”SsÒQ)ûýV®ˆ,ëêQèXó èµ5Æ+•ˆùøñãéùù|>÷Þ[ïŹ,â™Ïç³e~zzb×~¿_×uÑÓc7 °¨ÉÖæÔ¦”öû}ß÷///¤¼Ýnã8>a*Ûõº|,¥à—Ÿ¾ûŽrþüù³ˆ<>>¾¾¾Çý~ÿÇ?þZPÏõz}||df`à¢ÎéÏÿüÏw»Ýù|žñcL7 @XÆvÁ“o|úþ{¤"!黎Œ‘”Î//}߇1Ï×ëår1Æì÷{vnØíRn¿§~þüùp8°µÓºŽ»ÝŸÁNðä‰9Çx»Ýà…"FZ£Z5•0’K)Ÿ>}ê‡<Ï\ ¬zkmažgïýþᘧóaçÍèu.ÅèÆ1…Kûk€Zd ³~UOãh˜çÛ-‡€•,ËâœÃ‚]Žq !wqî§ÏŸO—Ën>>>þŸÿù?ÿÿé?QŒ9gÀу ‘›÷û”’a†„„H)Áõ zàÒ\¯×¾ïMÁ€ƒ*)Ìóüòò‚ƒG> Žo,å|>?<>®ëúý÷ß{çrÎöpX__Km}"ïç×WÙ}û-¥ôüË/ÖûÇ–i*¥ìöûÛõÊ̯¯¯QÚ–†°Ä‡Œ1ÓõZJÙ÷})%Çx<O§“÷þt¹ìöûOŸ>±s€^þå@²s† å Ãz>÷»Yû2Èü"9.Cä •y$ JÒ{ÃÌeáÜÃõ 3Åãøt>[kmß$ëý°®?|øÀ}_–EDº®Cš<<6 €KsÎu]/¹?a‰àŸh=ƒÀÚ|Hç€n†èîÖÆ‚µöv¹ŒãhœþLân0ž¹f\aŽ¥x€&§ärΉrm, TB ÎP1Fòþ0 ¹–¿‡ëÕÖš"‚º°œóív›¦IÑ·cüp 4‡QêpâaŽÇ㺮ӄúÿÕ(J@3žÉ\¯Þ{¤pÐÞº®òújj” #‡9ç äÎ5„ V²®ŒqÜíbµõ‰Ãë8™§éòòr¹^/!÷Ãáðÿá?ü_ÿå¿üåßþ-ÇNDbœçy÷ð@Ö†iêv;rŽ064¥¸,àïCΰ+–eö{EŒþˆËõV9g×u€é?Æ(}jpÎqבµ;""ú¶”  ë¨Öšý¾Gw?3y?Ãr¹ +Ç?=uãH‡Ãp<£¶þÃnWj”™Í²0L‹rÎHg£®Äè‡ÁuãHÌ©ëò~/"ÑZã}Ùíúqt]·Íî{ýnÆ@kQ«µ˜Ý¹„P˜;‘S%ÆH\5¼É¹㺮…È Þ§ó~ rÍÆ ã ±SòHf¤TB”,s·®ëº^¦©KÉõ=MëŠ1ãÈ‚xï‡ýžˆ®ó¼¬ëü^J)øy9Ÿ¥NÂËÌkΖHa-í¢ï å)ÞûRAbAUÎ9ZW[‰aS ̰bÀH&§”¸)â !TJŠÄRBÎ8 ZWcÌBÎ9…p^–¡ë˜9¬ëƒ1MiYȹ¨S"•X}¯‹Â9ßívó<§eaïã<£ÕCÐ yïÑu]·é€5£–»ÎZ»®++²IÅ‘œ`ù­ˆ)es^†aY–åvƒD’ôBp÷Éû0M×Ûm÷ôôwÿðþ»ßýþ7¿ùöÏþŒ˜_ŸŸc’H dZׄ° ‘1¥ôÿ-ñ•’ˆDÄ‹Ëv]¯×®ëvãÈ̉hr^͇Bod„Lj‚UPNArî€ß,2‰%³)F—óõv{9ìõ:Ïó㇉(×8ŠZž}ßHo.â¼·Î/H#˜”!„‚õþøá’òlíõr®¥ xB\æ9& Ž1 3’¢»ý>ykcŒ`?Â4Mèx¶J!"k1x˜‰¶DØÎ!+ê EÃn÷ùH(šA”Y»œcŒ: Ë»Ýn¾ëô8´¶ l©e_ _TÏ— ¼,fÖY(]×i  ŽÆZ‹íÕ™ã² ÿˆªã#Y[JIƈȼ®ÀƆ»ŽµÁÆÃ?ÓºN9sÎ2 ðzPˆ·5 •B¥¤Ðm͵6m®YÓù…xUr.,Ë\‡Ãc B!gL,%Æ(9¯"˲À}ÀK!‘[¬ Ë2ìv9ƳÒ?×þØÎ˜œóuž—iºÝn9ç———ÇA Vµ,‹[C0Ö>~óÍîáá¯ÿãü¿ÿëýóßýÎ1ûaÈÓ„î¤ØØ•q !„Ë@LJpcp<ðÈaÌèæB ¤œ5"ºå$JÉ5cÁ‡]—R²93óšÒ2M ËTJ ¡?:c ;·€UÎ;çL)átÚ¢sÖÞc€6W‘Œ?!ÐüRkA:¢x»…y.h·eŽÞ—ØÚœR™g? £ –…¬¥u%kŘ¼®qY.Ë""ÉZ‚%º^¯Ë4YïãáEzïçiÊ1fç–Ëe‹t¬«!ê JéR:??³È-F©(L·ÛÍVd±X=û=çDRJ@|D2Îûq·›¦éùå\mKu„öAŽ\KXÁQp­á´¯óÛ¶½¢žòn·Þn®ŽXBúm–3@(§¬µcߣæ&÷V³” I–®³Þk,šj\® 6…@D)„E¤¤4îvpØrΰ¿Jm Ø´Ôc mˆXj˜úüò¢d™stòóó3—òý÷ßǰ®Ÿ"¼YBÈu˜vι„€žõhŽÐfÎõ}ŸC¸Ýn!„¼®%çiš¾|þüåË—œóùvûðáƒïºOŸ>ÁÃÂæyvŸ__~ÿ»ßýå_ÿõ?þÃ?üÍ_ü…ëº<Ïátš®W‚å#’J¹^.×ÓÉ8g­Ý1ÆÏŸ?#L&„&\–òÏ7µˆ\!fn,µ¤ÆZ{½^qÒ`Hx ýnw¾\l×|›2N‚FdçÛíµ`­]¦É†c|}}kÁÉDXhǾB ÖÂΉÃ`Œ¹¼¾¦”ú®C‚ëôË/Ó<Ã`¼gæÝáð¼,iY&ç s.ÅZ{†˜ó<ÏÃ0 Ã@ÖÎùúúºNÓx8<ŸÏ!¥Ý0¤”€¬¼^¯Æ˜ •76ÆzïºÎ[kbœo·x¹ ‹å½‡û[]è¥5¥Ÿ_^2x£ëºÃáÏÍ{~yÉûý²,ó<Ë0Ì×+ÌH.— ˆÞ—Ëåññ§'ª”’†ðG›Ma ŒbWÊ?ýÓ?÷EÚó<_n·ß|ÃÖæœ×uݪ>Hi]×ÎZ°"ÞË¢dϹnP•z8²ˆ«-9Æœs¤g˲   ì0Xi‰‡Ã0 †Ù¡ícšÜr"¨k0œUHŠÓé”Rzxx°ÖÞÎç°®Cß{”à¡JÄ;‡!y†)%&ŠÆ€öv‡ƒe¶ÌŽÈ”Cˆó<ßnWk%çu]çëu¦ÁûÇq¼¼¾ûýa¿ãˆs4èã=>=ýæ/þâ¯ÿöoÿê¯þjèûþ§:½¼È`çÃ0„0Lût:Yç’È4MÝ0Ñ¿þø#`y@ƘKµñnÇ£z¬¿ývžgxɰ‚¥ëb·Û‰ÈívƒÖþÃçÏDôðð0 ƒsn¿ßG‘´®ó<¿Z{~yçO/h=bŒ?ÿüó~¿ßï÷D4ÜnHïGÔò!à1Žc7 )¥y]§y¶ÖN§d0|¤iš„ˆ½Ÿ—Å8·³všç’RºÝR)Rkà“ÇÇGTWåu}~~NëúéÓ'1f]׵똹ïº\Ê4Ïv[kM˜eŒq}ï½_o·óù ™%"hþòÞÇóù 6C Æ{?}ùr½^Q »•Po9/ËO?ýt¬UÅlÂ0 ‰™s>??‹ˆ)åz>ÇŸŸŸ»*ÿ ï™hC—©%ÁˆÌ‰¢ 9„›µ9ç¾ï‡Ã²,/ÏÏX·D¥o­#ZcœKqƬëj‡8¥ï§ó¹Ç’sbÎÃp¹^™ØÊÎ9G¤¿sÎpüò²\®×e]KK×ÁöƒÔòXN)ZëˆÐ{@ÌVdƒ–(hç^œC8-ĘÖ5‡°Ì³%:‡ÃMÄ”‚·æœIÄcfr.§”bDE°á}L)•”óå¬õΠ‰1OSðžÛ ÃÐuƒsVþ§ñÞ¹¿ÿÇü»¿ÿû?ûÍo>>>¦Óéÿú¯øßÿûápàRæi¿û®³öüòr½Ýn·Ûñx\BøñÇE„¹œÏ]× Ö:‘”RpŽˆžŸŸav®°Æqd"?Ž_~úéõr¹ÝnˆÈã^íû1â_~ùe]WT«^¯×ÓºžjŽ5…0MÓ?ü®×årñÞ}?Å晌¹Ün!çó<›¾ï0Lf]_®×®ësIér»].ï½8ÇÃ0…p™¦±ï‡aˆDÞÚlLJéËÏ?çœ?|üÈ]÷úåK!ò‡ÃeY†¾_rŽ9#U”SZBXcD9+1ÇÖ§ðŠÌ‘ãtœ—²áçLdùФg‰JíjE‰ý0 Ö{çܰÛa[[r.DKŸþB}Èïㄯ/§Ó‡ÇÇιÛí6‹””öãX0–,Æç_~˼LSÎyËþÁkØü‘Ý0PõÆEdFM‚1?|û-Äù|6Þïºnp.¬ëa·cç0¶ï:LÓd˜%%@„IJbL‰QœC¿*CŒ19Æ8ÏÙ{à|”¶­«X›—e½Ý¸ë`[ùî†1ÅŽ¬£ú¨©sqm8N0 Ÿžž áëGS}˜ð!/—ËV MØø_ðȦi‚âuÌ9¥ëéTbt"»Ýîñá!¬«sÎX›gUójÛÿïüß}÷ÝN$N?þÏÿÙSRZæEÃ0¸®ó}¿„`­ec¦iB¨ˆ2>|;!Å;¾¼„¼ÃºÆuõÆŒ]×;çj ‰<~øÍóñãÇaçeaç>}üÈ¥8ø÷Þ§RžŸŸoólœ{x|dcƾ_–åòòÒ{¿ëº0MŽhz}|•#²D!C$9"“3çlB mŒ6çyž¹”ÎK$ëÊ¥ Îx&oLç*tÎY¢ãιéz Óä˜9¥õzµ)=ŽcÏL!¤i ×kY×ã0ì‡!-K˜&¸M9À¨“ Wª¤Ô9·ë{ÏœC׫cŽ1ùù—_’ÈÂ23]g™—ë5¥Û©ak½ñË/¿ì÷{C„™Æ0QŠ1§t<Æa¸]¯9¥ÎûÝ8:k1¥˜jjNÉXs.DÂsF\*¤s÷{ãÜþxô}¿ÆHµ}ñz:ÅQ‡êåõ5¤äú>”BÎuû}6†û¾Ûïs(eÍyÜïûq„/–Å;—B0ÖNóK1Þ/9‡ƒï:L³ÎGW3kÛ¬®uÝ꟦ét½"ÅÅè‡Á[ Ü“ŒòF‘œ³ß÷©”¾ëÆÝÎX»¬ë¶íÌ!Æ ŒC6&åœr†Ù|ØízïSˆl ³±6–ÂΙaçÌ0ìžžÜngú>8\ÃiÆ÷—¿ým^–—Ÿ¾¼¾"KŽ <ø(]µeÓéÎ}üøü¦±fÍfjºI+¿¨Æ-‘¦#æÝn7î÷ιŸþEŒüÈ#é(¥YÞÊÊ–1MÖZSûbŒ×óùr¹ø¾Ç ×¢½ùÆ äÀY&ôyïcÚ®¼®®¨T†s ^“ˆœÏg¼µGf]qX¤$¢ñI0›¶hµ":ŸÏ0}5ù†/׫ųyoŒy~~fæÁ{õ«hÕL´ÆÃеðý÷ß§”ÐÛ†%ÎëùùÁw-`Às˜¨T‹?¤Š€•C-X+¬S®W)¡8uÈáäCu BÛF)­–P× Vf+àDSkýò}i1Ò 8…Tciéݬ}Ä*~6çlëTL„pœ÷©f#ðuT¨"º# zˆ­À°Ô´€pmyÀ3ÂéC?¹ŠÓ™kO¦šò=3»x½žŸŸÏÏÏË4Yæ)Fì&4þn·›¦ét:1óP+­ÇqD°ë¹ žw×a•àà ÄœsÀåÏÜVDïíñˆRÊ~·cæÞ¹ÞûBL‰E¼µ®ï^{h“y|||Üï?þüyš°k(4ÃCu=ØÖ‚ä XJY×ÕîvÜ`–´us8B†"ly*ïÆÃÁ€v þ IDATsΊ‹PêdfW‰L½d̤ÂêàqØC=¥¸=ÖÚý~Ï̵C Ð_¯×ËåÒïv¶¦ªR-/FÌID¤ž=‰¯"âj • o Ý S¡@>£Ôl5º/…o…ûÂýÓÖå^BH"ýD54´®+zFtã¤ÂW+Ì‚éØ<2¥´ßïAa8$l­€¨RJéz¹l"ß)ÅCxxßY‹^A©*nÄr¾žNëét~yI1Æe!ç j2×5ÆØ§hàÛkW»ˆ°ˆqÍÇ!炦aks†+T/„ DÐ]§óQ(„­¯×kï½–’äJ"¥ò9ò 8äè §Uâ‚Ó`Ï‹c—R²Îa8Wdh€”æ9„°LSÈyw09”Ò€©ÚMe™kºãl…i¦™[iìFÕ-tï¼q­?Æ­\AӀЫÐXJÄzmÎKµÆ©F/pg„$Z5®v]ûh[»ZÒ#Z4ÑÜÜÀ¦¨‹çRŒhL·7(5À¦ôSšÐ£nË/—îqeÕƳÌ=R³.ØÁž:ˆrjGª¿ Û#¥ÔWĵÁpG5JMãËö}<û<ϯ¯¯×ëU7.ç«óÙ÷}\–aJJÇ‘r^¦É!ÛÑDôsÎ˺v]7x?¯ëëéÔõ½Ô*aÐ7æÝ«þ$Qޱ­ëj¬í¼÷Þ£My™g”¹bmÖ{õÃp:>~üå¸Ì•èÜÐ%({^¥àv÷AmJ¦1FÓD&õDSJ(…1Õ”Š1Ôö=´ ˆ¨Ô‚Af†gØæ»Ô§h §œ›!PZc¨úgª>×ÚÎö¥¸±Íú–$5TÙ&\ÌQ¥œ]AŽÀ:€€îUS OiÍÚ\a u…T= ÒÚ¢Vιڄaj`"¥KqÞ§”JÕc*mUZ©ß’¢sy¦NsP) ¶ö;¦=–Tç[à†öÿùoÿí:M!g´Ìu]7t]NÉóñÃTlQA Ù¹b.ÆdôÑ$L‰pÎvÅ”¦ëu™çêyc))%ë\§9Æ£·*h¿ß÷ãˆ^XòÞtwñ^Œ,§?†a°Î…Z;™C)çi²(˜€|ˆºe9甊¬"ˆÇÜ;gŒ™¦i]Wðíf–ÒCK‡`kÂDÖeY—Ej B&+H/¥\ Šc)%ɹ¨SN$ÖïS)©”ÂÂ:ÏË<ÇyÎ¥ÆËÂ}¦dˆ¬1Høö}¿¬ëùz]b\cL!àSq]KJƒ~ÁÚb½  Û®%¨ BߤO%g—¦Ó\ÿ ڠꑎÃPr¶Îù¾'æP ÐÖPgk½w}oê¾u] ºªiÝ-°ªµÍ`Pw)^cEúùHu@¯a¤í8Ž%¥°,;FÞ¿"’´õ¡ÉÙÕ’ÉM£äÌ"ˆræ­µÞ9²6¦$ÆŒÇãÃãã`Œ³f+3“sœ1GÕ)Eˆxþ04†!±1®ë @ú~³²ÀÄšIÄ:@”°…¸Qy¹©Ôû‰"‚Z>TŸlZ Ý •’!J@¶ ¡”ØI5¨ˆÈÞS™š³IÙ÷CÏVü’²µ ÐÛ¥$|M]´q&% ž¡«¶Ê6~7€kS…&÷nCÖ1&Ò̈Ð"‘Õ!û¤–!Ä\c·¾“ ûÖ"òÕ h)ŒÔÚœoL ý¼–šJ55©ÅXjäIwU¿¢÷l/êlŒväø}ó-Ý.]OkRµkÓè…1&¼Ëg¨-úÆÄ·T™Ëýðœö¹TÍ]¬Gý4ªóÕ”;rÎ¥ÉU† „TâÖ\ŠiøÂè}j²‡šeHÂm†a ‘~ ØD¤ë:äv`Ò Ð,ÕjlT'Q\Wk-@`áÁÙì»Îc›GnÔœ3ÀQ¼÷È×QJ…(Æ8 C‡m×u]× dAÓ! Íç»Ôh亮è Þï÷\…Ä9<7BLƒ›õ Û«L5Ó µJ ¥òÖœk=Mø¶üi­Eûy©ÃaJÅ&E’` /Tº‘"¢á9˜îÚÓ¤4ª OÀlÐ%5§¹5j|µÖÞðOkÅéVü)³ª4]³í…åœÇcˆq™gIˆQï€gS#þtacÄŸBíÖÈ­¾fË<ú\ÍÈiö‘ ˆl]sûßv ziF¤~²Ô†æm‹0Ö†9¥”cÄX¦÷Âh[¶¦Üêƒ1©HSû€sÎŽ‰ú®Cð¡Æ˜±ï‘š7DC×-Ëâ«< T§ï;ç~úé'Ϧ Y8uD¨h‘7ÚAùÐu»ÝÎ"í#’s>ŸÏÖZß÷PÆZ4΢V«4‘=Æáp€­˜R† ]×…µÍ5ó·á³©+ ëZKOÞDÃJEæe´„«g¯¬ˆw‡WÐÚiïx“îµ5¾ÿ׃¡T.Uuª\AÕ?ÌunGK:*ò5ØÒŸZz¥aøV·kNEUÆŸÞpš.ì=Rµt®×ëuš¬µ9ÆyY°ùÊÀÀ,ÃȾœ³­­!z¸ÜÄ3ñ²à±ü↹FerÕjI¹ŠéöfÞìC+nrmVÚŽ¸Ü]Rgn$‘•˜]©÷‘êp[f,²lÓm5icê‰çœ·‚²£ÔÉi\½ÒišPŠÿrMÔ`8Áº®9¥ ‹\dƒL…Ÿ€Õ#Tœàà8£vÏ /çHáMü&Öøâ,RJ9NƘÒ «„s¯ì*U‹¢+ÕŒxb©9:áusŠ>® ˜ëoX‘*b5Áh|”]*‰¡ÎDÓZ ø;úÚN½ÑhžPëTCšB„‘Ô0(µ­J|ºàVF´ª^/}…7œ¦äôž‰ˆ¹\.ÏÏÏ©=­kˆñp8lâ©Rÿö‚pjAœŠÂRñl4~«Ò³ÍãéJ)õUŽ‚NÍDd=ªOýA¿BÒýɈVVgØ9G(<€óé}ÎY¬åʽÌl1Hr³ ÞàôZë˜a l@»ðXLÏ\WYlLaFS#ª¬µ)Æež!b¢—çgèz©Æ©3ÌLJ"‚ŽfHKi”³`¦‚÷8‰Ð ðìámÚa ¢""¨)©ÒQ9Ä5ù+ˆ =³yžw‡ƒŠ: —R®×ë~¿ïk4RËzLSt¦ì¤îPi\An é*+=0[Ë€Zó•5Œ¦—1¨kEõ ÑRW6Lafn¾è^Rõv67¦¾‹FÿÆqÑ—ˆoéÕ4H“ÔXƒ¿IíåãÆê{#pµ|Ø®õU1Fëýv^MÞk¹…~Þ{Ïuë\m7µAü7iÌ7L¨r¡Ý(X íI黿aK½I{sÜTÿdëEujŽ á]¬"N âô¿¥l[`Å*¬·\7ÂÎUˆl±ç}8N¨N&"ß sã30@c¤œ33D™½ Þ}ÉP%—ER`žÔÙ×9çÐnf …Ï"µj¶¢úééID†¾G÷F®†{nœ{å,Í (8ʶ³ JãÁƒŽ•”¥Iζéç± ]ð×0[uƒü´t£ÂlãØR¼µA؈Q3‹¯ãTu}°LåFÁuC1xír_}—s†gè“FKhÕ|ˆ‘¬Í!t}oŒ‰óÌÖºêp+-–R€Ë.^«&G0V«Nš©h³Æ\.hNÝz= n ¤qÐߨVõýLÁÓˆ±®4m4®¨Þ—HJ }ÏЄR¼l‚¹ÊŽÜ”Ëá‰j•éÆjIÅ™Vi£…ªæ,5ÜJ¿¦Á´ŠÍÖÂîTñ­Ûo™û<˜ÞG9lÇ­ëÚïv8´(|Ñé¥H)l̲,Rï‚°Õo8¼}P+A¤qTr­€yó²ØOÕ´T£JÀ_¥ð}'šë *ã¬-9Ç”6G r u)Äl™K½-Ñ6ZKŒAäŇìw ¡ˆ˜qŒÆ00…v»~·›¦©0;ïsÅÕP$<½·ÎE`4Á”*¥`æAeÅ„ÝqN¬-Î ŠÅŒ1Æd‘œ•›ó²,Äו™)Æaçy6÷Üb-LI˜çu‘˜¡"iª²® šÃá^_7ãyZ""cRÎÛÜ…Þ™^o¦†±Äuø–JÙÒ4_Ž êm…xÐϨªô¥Àö êÖs Bè‡[ÉR$iÚˆT¢\†ª%b›Š3} }YÝÿö3¦NqÓ¯´_ÿS[¤ ÖH@Áø¢R?ÞM¡z=z,ÉX‹¤w%VÜð­î‰i¼V£ùúû¨.u¡õOD$€“º¥–¦»­Uª›ÍÙÌrïÔ`…04T]ë¶à×9 ¹)»#ø÷æƒÞaË¢²H©Ó*s®ë˜¬‚ àûÂ<ÏkÙÈýqr *‘µG®qK¥WiBO°ÛoµØ–nÜn7®‰;S»Šå¼¤zVzZÔò$>\É·c¶V)_#õvªÒ‚®¤ª~ÛGƒ.[/¢Ô¾ jR#ú³~¬½¨»Ø0§~ìMÕÜ—;¾g-ÕúW¥³–²õó­gˆßh=ƒ4UѺZL7 jKë#69ޜ–~¨éPý4]¦íÚZ/®=Gýd{Äå45$­aY4dÕÜ\éV?–›ÉVR-8ªðø¹‚µ©ŒØšê)äœs5ôèm%T]?6Ö•”˜9×˶”Ø5D€ß[éà´J±Íè "b"í ܹ´^ø¯EÉ•8¸É‹H×u(qbchµi]¢ ´Väî« ÌÏ™ý†°ô¨¶ÏäL  D•ÐX%¦©V< #ˆ´Ö-(•”j#l”Ñð’2¡¶ÛA‘R–šÜk-(ªšGן륣¢]ÙCn7$W¬KýVËÛúù7L¨[G÷ÒMï£úA#ÒšÏ' o,M›µÞÖ{X1¬ŒÜx¼rÏÒø~o~¯¯¬Úõ«o4ízл}ÝÞœA‘RT³1Œ!­ðzj¥>7BÒÙUjÃÔÚ¯ôo†èU¹(gnÆYÁMcPƒaħ¤E}*Û7¤¦D7ˆj¼[%Šn+3Ç:ÿbF²’šÒhi2é\+†[ÑÅMUWK=íIcå*Õ*ÀÇ0õÂݶ7ê:ÔßHMK 2C3¥Ý¯²¹1œô÷(7EÜ ï‹›ø —€œ'€L ¾¦ò†2!7Õ@Ë›cVU Çô†Z×OÚ&jÕJD/ÛÏcË1µ]¨ï{S¡†sÑ«Ý,ŒAm–îshX½4tõæÛÅèY”ûl-5¡¬m¨†ïcTúš­xjÙžk¥‡T7Ô\A4UÛ{ïµhg×äwI¯ ·ºŠ½Ñ¾°. ^¦Òý{ŽÖ¸&ñZjK;©­ßôÅà‚Oˆq9ˆÊÂÑ$ž1¦¯m—ÐBFŸlLJ)eĪãܘJRÒÀöm"ÆÄi®­ý\=.>ç ,Ñq¿Ÿ§I*L#ŽÁZ{>Ÿ©‰å*Ÿ›&ÚIµøNMÙVÿл J[FéD×¾áCõßåÍoZ²~³ŒvaoîЮ_³äTq½L~ !¢‹OÚ5à+*FKSåÃM…žàÑ©KmÿùæH¾»—z‘º»sŠáËúcÎ9#˜”RÖ^ÓZÃ¥cj* "»Ô"§Ívø·5!kÐ ï|‰Öç15ÕŠ7¤ðÞš§J‚|/ÃL$²‰ˆú¾Ç|\“uPÔô+†:O3j_míakM©–Ú”!¡ñÄÚML4 :Sq\ÍU¯˜Y_-V”¯òµB!l?4V¢.žýPj-eÓ(Òò¡úúèöÕ¤ñéÝ¥O§¦Ø ¥¹7Aßœ»¾N{ÿ–1”$l-€– ?Bæ#ÀPr­LÒïJmàZ¤¥mÄ"ÒÖÇHMj·|¨Ÿlöö½Þ½šÞÁÔC$Už÷Ò§õn¤1òM­@D _ÙäWàSME=t¾’(¸\ûåQÌ1h¤#RrFŸ²^Þ{`&"AKDónzwÈ6S[¿Ôßm£UíË/Ë‚<8úǬµPâ)Æ#§sÙ°R³±9g˜¬@è‰bŒhAj=–_•=¸ríÍ9s£Ÿ5,‰. í˜El)ó4©õˆßCªåLjt[²Ò+ÝÇx•tZK87mð7°N[{m[úSrÉ5;ª¯©] ú™m©÷í§zŸ7Ÿ×?¹ýI-:®“ºaj¢s÷ÜJê@Th쨶ö új»ê[´©Zn®Ò´Vð;×K|e!¼E#ñV¤–f@‡ oYŽîL ¡•šÓóÀ·Öf&ìn˜jT¹=qŘå옟ŸŸˆ©Õ)¥‡ÝN¿™RZqÖ2³l\Gdƒ·j“¦ŽAß!7V €_³†(™/ç3¾P6bænEäRIŸ™ç:ÈÔ© ØÃ<ô½e̸…iÑø®\ã:‚b1¢ÍF7†¬9ÀΊø¾1R¦ï¦E)Ó²P×Ñ0¤Ÿ__K)ß}÷Ýñp¸ÝnëŸaܺûÂn®Þ‹÷^Œ!ænK)0q ••Ç´«£hÍZk킹KÎQܪâR2bf‚/TŠkÒ_Õ‘ˆ”‚X-·Ê¡a`jh•R¹ºvT-®î¨Î¾E€Aû_J†¹sÎÃÀF-‘8%­m ’w܈Ha!25/ 2Ì7PÂ5…[Rjû¤ïTF²7prD4Œ#Z7„È4Eˆ"‚t3·Nª93l…ÈÖ#‚•´B Â̾ï™y]×"b“œ×eÙ*fBeYÔÕÁð@”>aò2Á:Rኌ$×.ojâxÒèq}·7¹¯ïÖ„©9!x˜ "Âõ„3ØívÛT N´Öú®s%'[!’ÊE©qgá­ëDÄZÛu݇ÇÇqcE¤åuE™#Z± чÇG¸æÈ™š,RO’BhßÇöU UR6M™XeŠ¢~—:]*ÑLsöºfý=7NÝ¿óÒ P]ã[˜0®®&W\|R× ¬(÷–!d‡ZËx [/sÿT«DîmBjU÷}X¿ «¢J?s.MljºEt/YZªÖ7Esº o¬S)Mã~©‚™ó}ä2…j–K9Â`<X¨…Ô¸#ZïZ©Ìµi­]_ûz„Û_›4‹kß¿5´T\m_a.¥¸ÊÒ\­vSÃÁ¥Ù2jžöðÔ¡jiî ¡èô÷¡":;çR äQJI o…× Ë°="ÊÞ¯µóC÷çë>ÔíjÙ¬=×–\°¾âmXXÍû–KY¥_»~õ¼¨1,•:±o龸¢½Ú›èÉjÈžG¨=_j$,L©!òñýy™ûeo¿l¼ž6î€{š&FÕú¯þ :kõ©Þÿ½hwkÅ«¾ÿä› ÅØ¥ø\]×9]ëc­ðà[Ã!TÃÆ6ÕÌÔl”»ðÆèwM+U_«•â­)ßÒ5ÖT˱Ü!TáÕ(]–%ÔT‡òª[8÷>¯­Ë(Ú\_ÑrÎóø«Ä§?èASôz™­ý7ˆLÿÚ2€f>]Å&Ö§PÝ“ö-Ú“jüF ˜¦Ú³Ý@]m«ÕÛ×iw^_jÌÔà­¾/¿ãf¶÷® 6ÛönÙ(Žñ˜Úš½ØZ(­ôÞ3óáxÄ-¦i’wÁ ÕÙ³MI»•qßc(P#s-ØAfR› ¹ ·Ö˜›²¨©m ¹ÖûöQ2m5Òv¨•šE¾VÄ+{›{œU=Œq×u`Q©CK1sTý1X¡)gMlªƒ½±ßï¯×« øí ß…û¿žh5æÕ”pµî1W,m­´¦Š6¯€ ¸R ~;îÚÒ«©±¢–¸ßó6WS¨½UKô8Gº·Ü¨Ž"m×™k–‹ÞõOšZ Ú’5þùF³•&p¥‹É¿ÖÈÛ¾æFmO¡•qíÕzõow³Ù„;%Y¯7ÜNU—š’åâ@Çý8^¯W7 MAí@5ëMSÂמœÚHTŠ1¹æÞØ£j_)µÒÑÔ¼¢®µ¢»æ6ÓH„™1ôku“ÃT;¸ÔÀ·÷ÞwÝײ2 Ú4å,ˆšpUP*Ñ=À÷²9çœcd‘¡Îߦm1K©†G,IjK^w”šóÃ&›{‹ZŸ[j†Š|Óúpu“Û“þÕë¬Q‘÷^³á)¹&¸”âK)ª ßÓ¥†šË}nC÷VISY…jÜ¢Õ6åÞCnO Úwû×7V~iš×l?¬d&M¢Ow»}ti°éžK ¯ ã•ÚK±ígÓ^J1Ö¦”\3œk)|Jikâtud|n°q6ÐINêØ½øÚ¨a÷ę̂üÑ÷ähÖãl©A^•Ôͺ³E j¬µ©  ã•º¾#ƒqm;{Ÿ¨ý*õ™mµ"¸ âŸ(è3Ö2sÂðt碵óºn€5Q‰Ó(D%g4(ÅÔÁ㚤ù‹¯5ëÔTxëÂʆ‡ÔîÐ…©`εÞ]*L5 ÿﹸ1äÞ|Kš"$e «¼¿‰®çÍ­Ô ¶ nÝë úÓBDÍ®ö‘²®ŠT®ÕüPÈ l•Ǩќt¯šÚ¶|ø•ªï¯¯LÛ¬M¹¶åvÕ½-…·e4Ìœ0³Û—JÑ¿® *¢% Éq€‘°é¶scŒRst\“¡Ô(wÝt¥S[Ý ëJ*D˲ìrÖÛ&J)¥|ùòÅ{–Õ¥š:J»€{n…¶n›‚OjléRûGE„j™3»¾wÆ„e)up¦"»®sù×TêLõÊÊÖå-sÞsf^IDAT[s*ø ©AÁÌÚ_‹HtÇÔEÑhVK¯Š—þÔÅU†Ü†Þ‡oJ]¸ØLº•?mÎqã£*–ƒÁeëj4û W´niZ#Uê§á¼BgÝ–ì„4Ï©$÷f‹Þ¨Ö‰÷%Ý^5¶Ï¿ó ¹F‰‰6Ú¯OAB­¥: ¬”â°møGlf2£3En—‹1æ¸ß¯Ë’ÖÕˆãc%_N'¤Âf¬ÒÖHžRZ= ™èz» ÞCih…!"ZRG\´É fw;ô ö}ßÕIå,âD)2¼³GKÄM¢Õ']ÃUD`ÓâÀ¥³jt¥$¥$,¬†[T謘Äx\çpÆ…¹ëû\ ÊÍú~Õõ‡#ÕU\9 #wû}Îy†o>} 3U5¤1¦ïûyžå¡j0ÕQ ¶éMÁÖ¥:-L©¿ß£ ˆ–[7^?-‹˜¾ÀUQÂ9sξ–õÂí7ÕTI¥˜–îÕ,´Zo›ãK›[!÷…lR ‰ ýU#q­ ÌÆûs˜E:x̱´–‰âº’1d Æq[9ÞËí¸—š¥ÄË›:±­Úp6‰€®šæ>ÐÅT=ç\ŽQЪ}$Uî¨Pƹ8õì©öS™&@Ä"®â_T=Të$¬¬Ônu!”Ü!ð|ª%¿VaóoKn•…¥^JâHv3r¸lÓ­¤jó`æÞ8!8±¿ÆàÚ¨BDñU?£ŠWõØ›ÏÔ!ÁX­V=ŽÁÔÈÓ<σ÷*€ôAR«À¸´ÊTßâÆ¯Óý)÷¦‘®–Þ™IjFR«˜¥¬€šô@)ŸÏ9o#®š<[«¨•–Þk¼V·jŠš©I¤HYµ¥x/Ì_µŠ˜™çÛo¨½tZ¿€§CåN«ñÚãš®ÐèÊ}›¸Ç«UçÈVa¤ÁcL~·<\®4?• ÊiÜ”AßǶK=È-°5Ì5ãÜ÷ýÚ$g‰îÄ“~þ+  ¡2F{•ưlxCdºË¦‰!}ݵz8íP›±¬³ÝLUG»õ­€ÐWÞfD}pwf6uTÄ–âÜä”n·[jœÒö†oœŸ\ç]¾9 ý5«%©µ5q[¾U7DZDäB1º]Y«:¨¥‰´ÄÐúQúû–ÆZáŠzsŸRw’ªß¦P†j7mBJª“ çz¬m£©¾57ÑΖtaæ]xÙV×65N¦4ŽbËGúF¥>y¹cMÈŒhº¾[ÎÙÔ»¼ßYV“µ±ˆÔiäš*(÷êÍש‰8¿—Ù__¬FÏ´ôˆï•LË~ï…52¥È}ýnãHm¤j™:З›¹\zçRã¥ÉÔØUÒaL³a6:¾S¤ëº2MkJ¢ˆÎ)…šÿ0µ†®Ö·#-^i*ÎÛ­kC|íyil+þ`í§f8ÔF¸´ 0¡æ‰J^›aßL›$¢]…ÛPñ!÷£‹”··¨ÙÈ–C¨éÜ/v%¥Ìlˆ¬÷¤Ø?Íp¥¯ÌT™° ½ºf$Žn…^­³­Xâý~¦{ŠÕ'o MŒs»É;¹Iu[ÛLš‘«gn­E¸ÚûâRÈ&pf©}ƒ®âÒkñÍ[{שÉMÀ^Çö{ܤ)åågcàÚ9ïUòQ]Ðݤ{õËß¼Q³¼¡:®Ð]¨@PNhI¹%2õK3ª1׊v|.2¤Q\ü.§‡¤ ßJ”o,:j _ÚE¶o­_i-óVœ¿!©ö¿z™vBÓ½ñ7…G×N°±÷ð_¸g3å@[™S8 õçÄ9­é/ÖrJ9F¡­¡œª0y•w› »-À¥{S*R9K¿Æ„t?ŠP%(¿àNM¿v9[ƒ¿DDÖæûÇpÝ\äÓø~ê÷=M:£<מ†;·’¬üÚaSCˆo~¿FWÆj̰;Ÿñ•&°Nuµ¦AN­W8 Š{‰ŠPªš_=[¤ûL|£g4žTÚÁ—Dd ;g¬-Ì%ç$bš¹–Tʆ€Ÿëëèý[…¦Àjj;äœ]×Qƒ%Ñ^oöSÏBÓªt€¾j}s ïMýÒä!¿ µêînT[乆UÛ#VõøõÄ››KãÔèxn4?•bjŸW÷859Füãͨ2f…}רöíÞêû¾ ÊúÃ{›ßÒˆTûšÌŒÜ•4¹%nê ß_[x‡o›*›š‘Ú¹ÌïVišŽ ¨qµ©±Ù´¨ï eЯÉ`å[¦Š>†S©ùÉí±;êß'åÔFMoÚÀ!ͬkÖ¼©\nâ­˜ÔÍ-5h™Q¬P¨ ¤•5`$Ã0ä곕æÝ[Ývå"e¤rÿâ*ä¾b£4ÁçÖˆ…ñ"÷á{<Œê!N’›Rl¥hÕÀ¹ SéªÞ7‘êAç ÷Ò.2×*P]§r©xy°…̘2dˆ˜È4É@Ô/"|_h©Õ¶­nxóW•ø­¼~Ï„øß{Ž-_©Ü¡õåoè\¯¯¥0ð¿Mµs@yÐ~°(ÐÁ@h“"ï}þ_1 ‚¬}ÞÖ×Ií³uëåÞ´ÓïÆ“Ȇ¶íc´qmƒ(Tr¤¦4¼¥3i¤² `- /uòFžwR©¦ÂUe3Õ á–O#º-‹('4üp»Ý°5ð65OÖº…¹Î¯×wGr?7  ¯Æï*`¾²VCyo<´;#;F›äÛT,êûÚUÝú Í}•šÙ·µV¦UGzÐmPÀÖíEf¸%»Ó¤­9cL®ÁwߪS\ß8Ò¨$âÆzç&‰ßûýÕ20.üüðð°ÛíL•†˜a¨gúþúÿΗ•æ…@„PIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_delaunaytriangles01.png0000644000000000000000000002051611774645750023652 0ustar rootroot‰PNG  IHDRË_®—pE!IDATxÚíÝûWSW¢ÀñûÍs§ÖÚÖGÁð”g @•«hÛ±¶¶Ó׌3m—õuëXÛ:õÅ+By0 U)j)5.JͤÑAœnºÐ±¾€“9ßÏ:¿N[ÏÉúÎvï}öù¯Â㿸@a€Â(,PX ° (,€ÂBl.þtñÀ©¬ « UU*y¥\Z!M)K‘“¬8²bé¡¥Ï|ýÌ ‡_ˆ9“T–”Q‘!«”)«”ºj]‘¥(ø?<;zvòî$·¸gØ;\z¦t“}“Þ®ßØ¹q{ݺofvé]ú '6èêtÁˆyÀìñ{¸« °µÀD u¸õÖ7ÒLiÙÙJ§²¨¿h¦m}àÊëÎ þ£2L[[¶65ÿ2ñ ÷â2zctwÏî„Ò‰Y²¶m­Þ­ŸcX¸Œn£¼]o‰—“ì8µÃÛÏ=……(ÚúYïgk*ÖÄYã4½aÃúÛ+ø¯ˆ¯‹—”Kö¹÷1ž…E4·u¿kjEj‚5!m½ÿ*<]˜XŸ_¿ÛµÛ{Ë˳…ETµõ€ë@ZeZ¢51Âm}HgËã?s}üOâ¹€ÂbÑs]u­­X›bK™Ç¶>0oP—_ï¼ìäé€Âbkü®QZ%U9U ¡­÷_Ê.åêòÕç*xF °X|&ïNtL3§©{Ô -¯¡KÛ«©ˆÙѽƒ—@a±˜&t|gŽ+<]¸0óº }†UU«^m~•m °XÆnŽmlؘ`M0º 9¯¡«¨¿(®6N]«fí  ÝÐõ!Eµ"µ1uîogEòJiLI3¥ÿéù1Ϛ‘À&—'Gñvz»üèòk7®ñÄ),9»{vK,’èÎëô0v[ç6ž8…"7€+‹‹úìô0vé‘¥ c),!Ÿv*’ìô0vkûVž;…ÂÎÛW*–ìô0vÉá%Á?8OŸÂáå¸äÔˆhºbjb¾:óOŸÂáµµe«Ì![a'j»š§Oa0òø=©¦TCŸAl…-ê/ZY¶òâOù PX \ªªÒíébËk芯‹?Ðw€ß…ÂÅh3ªºTâ,lð®¨Vp87…Âbpl0Ç’#솮 KFŸ§_…„wðôÁìÖlQ¶%ãoã—@aáå™ó¢æC³» }¹I>~gœ…„ä¿íW[ÔbÎ믳±VçRX@`#¾‘¢ú" «­×ü8ÀïÂBê¿Ö¿¡y…5´:.uð{ °€ÃŽâ¶b «wèmçmü(, ¤šokJ:K(ìºëŽôá÷@a!rÚØµ‘ÂꜺ½Ý{ù=PX@HŸ:?ÝxŠÂ®ËëÎû í~ÒŸ[þl”™e¿LüÂs§°@„ôyú«ÅPØ•¦•­—Zy∨­­[eY”o!è«ëÔÁ1;›Âuåç+±å±QüÚ¢þ¢Ë_<ÿÓyž5…æÁŽÞ©M©ÑZØ´¦´Í­›yʘþÛþ$SRT¾âüC-/_î¹ÉaÛ˜?—;%fIð/ÔQVØUU«*/Vò|),0ÏvõîJoL¦¼¦4¦¼ÓùO–Âó/0Xg_5ÛcU]ªK`),°P {‡s­¹Qð*­¡ÏjNeÿ…û»¦Q³è7À6È«¾­âiRX`Áù¨ó£-=[o^µ'´v|ȧd),°yoyKì%Æ.ã"ÍëzÛú±›c_/m“>´­âÜ9@aÌÕØÍ±MM›$fIèäìGMD÷‘.€ð:F:’MÉ))ÓÇ>ti+Çœ#æÉ `fü·ýžøðŲ§OÎ~è¥èTh,òJa<­±¬ê¬¤º$½[ÿ˜¼F÷qÚ€ðöŸÞ¿ªl•¼]þ˜¶ŠíH `®<~Oqcq¼5¾ÀUðø¼2z¥°f c¤#±"ñ1û±˜{%¯À“ùoûßë|oeùÊüîü'æ•É ài[™aÎHmL}è!¿É× (,€9™¼;ùeÿ—±±Ê.åÛÚ÷ª4+]W]Ü: àq<~±Á˜lO~Ô!™°¨É+…ð¦oM‰¦D…Sñ4mÏ—b),€9ñ|››7ÇšcŸ¸‹3(,€pŽ8ÓªÒžf?Ö;È+…ðHãwÆ·wm©ˆyšýX¢ýR,…0cCׇTµªG}ô…¼RX³tôìѸŠ8Å ÅÓ·•ã´),€'»9¶¹ysœ%îéµÄü!n àiµ^jM®HžÑ¢Ö½Yì °ê—‰_¶wmÉôÒŒµ˜ °ž``l@f–ÍtQkú¥X­EK^),€MÞüúÌ×113]Ôšž{åÌ à!<~ÁnH°&<å!¿ÐYt|k‹ÂxPÝwuOyrö£ŽÓæ¼W àA¾€ï¶7V›Wkz5³Ëk^W_+ °便–VIg·¨uÿÎòJaÜ3~g|gÏÎØÊX¥S9»¶N¿V@^),€{®ü|e.‹ZÓs¯Œ^),€ÿPv®luÙêY/jMï{egzQk¦‡ üvr@aV°1‹ÂøUû¥ö”Ê”¹,jÝ[ÚªÉ'¯À”éE­Y2À™À# Ž *­Ê9.jñ­- àAeçÊâ*âr:sæØÖÐÒVŽ9‡É `ê·ÚÞŠ¯‰Ÿã¢ÖôÆ,EC^),€Û.ڒ˓羨uÿ·¶Ø˜Ea±ó|nÿs¼9~î‹Z÷ˆ›¼RX@ì‚”›å©©F·Q¼2z¥°¦öc}åþJR!Qv)iëôÜ+y¥°€¨]ùùÊúúõq–8½[/T^™ °þmÿΞV•&m“ ²¨5=9 ³èÈ+…D=t}­åµ8sœ¶W+T[Cû^ùÖ…D­u¸5½2=¹>YÀ¡ë¯“5y¥°€HùoûwtïHªJpQ+tåžÈåÌ ˆ×Ùѳy–¼$[ÒÜàÌ àžòs剉2‡LضNï ¯#ï-ï¶¶m‰Õ‰…§ ÏkèµòJa1ry\YÕYéMéÂ.j‘W ˆZ`"°§wOBU‚P‡ pœ6…0eØ;l¬3&Û“_ÔºÿCÜä•¢Ss¾&Íœ&o—‡£­¿nÌbç…ÄfÄ7²¹qs’5IçÒ…)¯LPX@Œš‡šÓ+Ó3[2ñ¨5ýR¬Ö¢%¯_À÷aLJÉÕÉaZÔšž{åÌ ˆKŸ§OU£J©O ßÐ549 ³èøÖ…ÄbüÎø§¿H¬Läs°?N›ó^), "Cׇ65lJ®MðäìGMðµ ˆÅäÝIë Uf–ÉÚdamëôÎòJaQð|¯µ¼–nI/p„;¯¡× È+…D¡ÿZ¿¢F‘Ö˜¦7µ˜{eôJaQLö»ö§T¥(œŠp·5´ï•¹W ˆÂÐõ¡b{qF}F†®¡É…YÁÆ, D¹ñ;ãÇÎK3¥);•hë¯K[5ùä•ÂQnê†ÍÉÖda?Ë™;û{VU–´EÖ7µøÖ…Äå—‰_öôì‘Z¤š^MdÚZÚÊ1ç09@ahBªkÕ©õ©F·1byUt*4 y¥°@Ô L}s(£:#܇ <ô[[lÌ¢°@Ôö¿Üørš--܇ <ôkä•ÂQËvÞ–V™–Ñ”±E­é¼ªªU,mQX :Ý{¯ý½¬º¬2À§ ), "®«®\s®¼Uá¡khß+/ÅRX :&ÿÛû¿I•IÊ.e„Û:½´Åè•ÂQhèúЖÆ-q5q…§ #Ÿ×àè•É D¡ñ;ãUU2³,8ŠŒ|[ƒ—Ò©dr€ÂQÈã÷¼ãx'ÍšùE­{K[uÏ•ž…¢JËP‹Ü,O?žùE­é¼²1‹ÂÑÆÛ¿»gwjMjdNÎæ[[ °‹`Ô‚1—5Éækè½ê,:òJaè1yw²ü\ùšÊ5Šó6týõ¥X6fQX š\ùùÊÖæ­)–”ùZÔbß+…¢SËPK–9¢'gó!nPXD?ï-ï_;ÿº¦fM$OÎþí¥wë3ê3ä&9£W D‰àhQgÓ¥Ö§ÎãÐÕè6¦O_[µvçÉ¿‡‡BaEoüÎøA÷ÁtsºÒ©œÇ¡k¶#;£*ãÃŽ‡®ñP(, ‚9{¹ñåÌúÌŸœ}ÿ%wÈÕvõí0ë ‹èávdTf(:æóU‚\[îkM¯¹®ºx °ˆÞ[Þwï¦[Òu.ݼ´5¿;_n—¿ÚøªsÄ9yw’' ‹(ÑçéS˜²æùySKÓ«Q5ª6Ôo ­ °ˆ*‰À—}_¦T¥‡‘ok«@q|ê³Ûß5ÿKx °ˆ¡“³3ë3 }†yÙâš[{ìÌ1ï-/ÏQ¥j J^#Ï=‘ù-®Ù­ÙÙÕÙ‡¾9D[AamBŸƒÍ©Ï‰ðG_Šú‹d-²œšœý®ý£7Fy °ˆ6Χ²F,]„‡®™-™æŒOº>¡­ °ˆBþÛþ}§öeZ2Õ=ꈾ>Ð.—YeÁQóàØ OQhèúÑf”—ÝÆÈµµC.µJ77nîóôñ@a…&ïN–)ˮɎäç`•Ne¦-óÕ㯺®ºØâ ‹è4zcô­Ö·äõòˆíÇÊïÎO²&ê ½W{i+(,¢VãwÚZmNGNdÚªíÕ®m\+7Ë«¾­âõPXD-_À·³{g–-+2} þ[Rì)Á¶Z-¿LüÂý…EÔr]uékõ²ã‘8d@ïÖ§4¤¤™Ò¾rE[AaÍ‚ûÂõ…¬Z“³ƒùÎlÉL,Küôä§¼š ‹(786¸Á¶a­}m¸µ‚mÍhÉH2%ýõÄ_y}Qnòî¤uКU¥èT„»­Ò6i‚)ámÇÛ|ÙÑÏã÷¼Ùüf¦53Ü‹Z §"¡*áO­øq€mX °ˆ~¡C²[³Ãº¨5ÕÖêM÷Íè7ÜsPXD?_À·Ã¹#³:3¬'gkz5 5SmíédÜ Q,ª-ÊmΠߢV°­‰ÖĵUk›†šh+(,DaüÎø‘þ#YÕYá;9[ïÖ'×%ÛjúÖÄWPXˆ…Çïy½éuE½"L‹Z¡×’+’œ9B[Aa!"ö ö©E-Gv˜¶a¥6¦Ûº»g7[\Aa!"¾€ï£e×f‡cQkz‹ëÇ]ÓVPXˆKÏ•ž©CšÂrÈ€Ì! ¶õO­âë °—ñ;ãOÌ©É Ç¢Vh‹ëËÍ/ÓVPXˆN0|[·ä4ä¾KÙ¥ ½>ÀWPXˆ‘uКoÉWt(±ÅUS«¡­ °#ßó~ûû9¶a÷ci{µ¡×Lßšøú(,ÄÈ9â,´Ê›å.j…¶¸ÊÌ2^……Hù¾ÏO}®´*5ÝÁ_ØÝ³;øÏç&ƒÂBŒÇ‹ëг³„ZÔ mqM®äõPXˆØøqó€9ß’Ÿß%Ø«òvyh‹ë•Ÿ¯p‡Aa!R¡“³ü¬Ò©Œ7Ço<¾‘-® °5ǰ£ÐZ˜×‘'Ìë'IÖ$}Þåq± âå ø>9ñI–%KE­¼î¼ÕÕ«ókó[/µÒVPXˆZÏ•žõ¶õªVÕÜ÷ci{µ ք̪̊slq……¨˜æsž5OÕ©à„ìúäTSê?ûÿé¿íçÞ‚ÂBÔF|#ÛZ¶ÍýäìÂÓ…‰õ‰ å úxoy¹± °»–¡E“ב7—™£Û¸¦qMLiÌö®ílq…¦µvÜ•cÍÑöhçòú@fKfLYÌÛo³Å˜Òçé3ÖUMª¹¼©%ï¯,_YÜX|ñúEn)(,0µ¨u¤ÿˆÊªšËÉÙYެååË5µš®Ë]ÜRPX`ʈo䵦×rr OÎúë++WÍW€Ââž–¡µEë˜åÐUեЭ‰M­Hmj¤­…ů¼·¼;Oî”ÖHÕ=êY´5ø¿’X$é¦ôÒs¥œâ PXÜãºê*²É›äF·qv[\ãËâôàÕ,€Ââžàx³ôL©ºV­;©›i[ }†Ô¦ÔGWì8µƒ× ‹ÿ086Xb/É®ÏÖ»õ³8!{eéÊׯy‡¸“…Å=ãwÆ+ÏV*ÍÊlGö,Úº¢|ÅææÍ#?p' ‹ÿ0ây·í]Mƒ¦ wf‡ ätæÛZÒT206Àm(,äqkùŽü2 p*^2½¤ªU}3ú ÷ °xÿ¶O÷ž¼Ú«µiµ'µOßÖXKlbEâ᳇Ùâ PX<ÜÐõ¡×Ž¿¦?®ÊCôn}b}blYì>÷>^Í(,.ø÷zë UgÑ)ʧYÔšú²KCòòcË?îù˜¶äñ{þÖñ7]ó4Ÿƒ ö7¥1å…c/lëÜvíÆ5î@añH—: Ca{ᇮ¡×–•.ÛêØJ[ ‹Çñßö<}Po×ö>e[õ z÷¨›[PX<ÎàØàþ¨oÓ?ñ|,…Sñ\ésõ´ °x‚É»“¶ó6E§éÔ<±­Ë+—g˜3Ú¯´sß ‹'»9ö~ÛûúF}¡ëq3ùÝù/V¾˜dJâõ€Ââ©8†Ŷâõ'Ö?fQ+ôú€¤\Rz¾”¶Oæ øövï5Öõ½<ÚUÛ« ¶õ…c/ìuïe‹+@añTB'g¶ð|Ùóyuyý?õs¯ ‹§å øvuíÒÙtúSYÔRœP,-]šiÉ<é9ɽ(,fàìèÙ{‰®E÷Û“³ó»óWT­H©J©ºXÅ6,€ÂbÆïŒ—ž)ÕX4¿=9[Ý£^i^¹º|õáoÓV€Âbf†½Ão·¼mh2NÿÇеÀU ©•¬(]±ï›}|} °˜1Ûy›±Ö¸¡{Ãým5ôRS–]öÉ©Ox} °˜±_µêuº^Ýý[\ƒm}îèso:ß¼v“S\ ‹™s]u•ØKŒãýÇʲe¥ËŠ›‹¿÷~Ï-(,f,08xú`‘½¨àdÁt[åíò¥¥Kµví¹±sÜ"€Âb6†½Ão5¿eh5LïÇ’wÈ—U,K¯Noû¡­…Å,ÙÎÛ65lZß³~ú„ì+_L®L¶Yi+@a1KÞ[Þ¿wþ]U§2¸¦†®yÝyËMËW—®>tîÛ° ‹Ùë¹ÒS\W¬v¨‹ú‹ò»óWU¯Z~lù>÷>¶a³lèÁÓµv­¶GúúÀ G_øàä¾Û>n@a1{¡“³ CpèšåÈzöð³[Û¶ŽÞåγ7ywÒ:h5Ø º“ºWÁªêU™–ÌëÜ€ÂbN<~Ï;-ïL2Ðg¶I—]vàÌñ;ãÜ€ÂbNœ#Î õ …Á¡ëŠª¹¶\>@PXÌUè}ƒ^ïÒ‡†®ÿø'»\ ‹¹š^ÔÒ¹t ] aŒß?ÒÄ`7è{º °Âñø=ÛZ¶š ¡O¼0t@a…a¿`ßP¿¡àdAFKÆsGŸcè €Â ÀðípîÐ7è󺦎`è €Â £çJOICIagazS:CWVãwÆž>¨¯Ó«:U ]PXÁ Ž n=¾ÕÐbHmJeè €Â Æ:h5ÚŒJ‡28tͲf}{ý[î ;W¿g{Çv}£>¥aêû¯;ûv2t@aàq®·­Wµªº °‚ñ|NÐ×é“íÉ ]PXÁ„PÖ+Ÿ¯xž¡+ +Œñ;ãæ³Ñf”˜% ]PXÁ„NÎζd?{ìY†®(¬`ÃŽõ¶õ±•± ]PXÁø¾OŸJMÒ?úCWV0?”ØKV[õìágº °ÂÆôHÿ…Iñû¯ÏÐ…̰wøÝÖwJþûëÿfè €Â 6tµ·©Íêç=—U›uæÇ3üPXxoy?êü(µIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_colormap_bluered.png0000644000000000000000000000631212144064276023300 0ustar rootroot‰PNG  IHDRà'°·OY ‘IDATxœíÝÍ­W†á¢¡ ¼º€ à”‚1ŒR˜Ý Àpwçä&…à…1´š,8‹«¶Z$›ìŸsN}Uõ>K"›ì󲺛?× À•wöçùýyî}?§ÞwDsÞ_ös·N~èuÃ#@`fÄaçŽx çT$@à«Ñ‡Ÿf¸"@À|¦Ÿ®pD€(oÍ'_z¢ pCÏŸÍ Jóºø2!@`fÔä› àˆQÖȯ-!@À¢¤5_.'b 6˜Ïá§¢ ï·æåyM?3\ JQ:ü4#@çyøièwA_¾œo¾r=?Â<øº5ýÖØó û7­n¨—¥ð–þ?Ab-ïég&à£øÖü‚„2Ù÷Ä·æv²&…Ï}Þ"`/ %’¶š~{î‹ óQ{ëaN2@O™ŸÊá§™èÛ#'àVËÞ·ÝN«ˆ™€1!cSš~fxAâlŒ u(_|™È.åóÀ#rœ–çmœ&Á„#Âô3ž€fy§à=ÙFë‰Õêjê%ù]1Â9‚ܧÇ!cÛ ±s«G8Gõ:_ëq»!ΟŸN'"|Å9d.¡v>V=È^çj·n»Ì!ènS-Èž_;"À¯ˆp¿A~´·«ŸÿöyØë9ýnÝ~Ù͈°•µAn‰nIïG|é¶õ}„ ÐŒ{¸ ²Exs=#$@DØÏO?u»íÖ!ö>ü\ºŸ£÷þwA{_dx~:ª]È0ëŸYûÉzIíkGKBlä='á­³NÞÞá]j1 GM¿[÷Uþtnt„£î{¤Ñšpä/žàžŽÚŽ^<⛉ŨD8§¤g|“=Ž<ü\ºÏ#÷—2@3Í甂Tˆo²5BÜmyŸá¯‚.éyå²E<ÓÕÕªWY[ˆò¥Û{ÒïxõI¸dÔ„Tš~“µSÐëçæ™€D„ YC™u.iõx¢N@Ï?¶ÂE˜²E8·ç±)Æ7y!•9¹53j€o=<Ú†½÷ŸþðRÔs­*CFùÜç-å4«á\– 3¼õ0W2@³šÎEŽp.òô3+ Yí{ë”Ьv„Ñd;ü4#@3#¨”?÷¾8àWD¨MmúµŠŸgˆ0¥éw^ BŒD€7¡ÏõF€ ˆ#àDèOíâKkøjQ:ü¼Ü–=/¸úÈ>ýÌp5"ô§4ýZ!À ˆ­àFD8F…ÃO3Ü…ÇËxøiF€»!Z Àˆp åéwô­<ˆq6@„ý(O¿°"ÄØb+lŒÛÉ~øiF€]am[®„`'DxL¤éÇŸ'E„x„;#BÜC€!–¼ñÞ€Ο^®ùéý󦨞ŸN§^±¼|9Ÿ³ü­‡jØi nE·dKŒ*ŸPýoC¬ý;ñ*öþr[¨9–ð.­ Q!BloO„œÎ‰oú÷knƒsBL½Êôr4¾Kk¦¡ç$dî·f­üãý?WM@Ù9Rëø&Êàv{ÖÉ£5 ÷ G럙ö9!®Ój},­‰é¥g|Õ pÙÈ#".ˆàÂŒ¿µÑŽÜþå+;GL¿‰âû„LÀW#×Ád¾JN@'}-&á½§ÝZåTxÒ!Â>¦è¼×ÀüþËèaÏ'Âv¢»4mO©c«í„Gz~€;»(ûºL€QvÈ%"\/â>.`Ä3G„÷EÞ¿%ô¶õ»ƒ·á÷"G7—>À,;ÊŒÍríÏó§—sê3í¬I‹|ú©Õæ ‘q?NÒ˜y§eŸ„Ó§`2ïC³×S“´ªhqþwK泇7—òø*;bŠ/]€Jñõš~sD[ª«Å7!Âx¦õ‘*Àʈ0¦4V~sDCºïß7D¨ír}¤P…w|"Œ#üû€JÓOIæ÷ #Zzq=•âS™~sLB ÷ÖFØ H|ë0 ý¬YaT¡ß„ÇÚ²&B¨4ý¢ ¾ö¾‡ P)¾ÓoŽÛ;ºBH|Ç=?Nê?Ê«®å¾ Š¨ñá˜û=L€JÓ/²ó§—óï÷ÞŒ0z¿Ø†P)¾¨ÓOé9Œ`Ô~–PiáD‹O鹋Àcÿʨ"R|„·ž÷~•…´ÏÕ6ÞáMdTZP*;ë¥çIâ~” PiQ)î43­çHê>4 P…ÚŽ#ºõÔöݹYd×xNÖ‹ÞD*@¥…æ½#•ž uÞûꙕœçUzÔEo"`u„·N†èæ$TZ|#w°ÒãV–-º9÷•ᨭô˜•eoâ ÒBì½³•«º áMÜ'`v„‡{ÜTZ˜­_q•´¹¨´@[Ƨô¸"{ùr>WùMÓá*-ÒVñ)=¦,ªDÈ9àND×_…‡¨´h÷N?¥ÇPAö‡¨´p·Æ§´íeްÜ!è–øOGÖ‡m!GÛÞ*2FØ=@¥Å|oú)m'–e‹°k€J‹z)>¥mÄ:™",qxÑÅ—%Ân*.rÅmÂ~"ì ÒB?½>)mÚŠa󿯶ØÕ¶íEþ›‡Í?D÷X„wH|>oõ9 ‚ðöSŽpW€L¿1ˆ®Õ7oñmóÇûßïþÿ}ú÷Õëžúñìó©×'[Ô"ä·Q:xÝ’öyÈ∠Y¿—)EÈ9`#{£››Â¢ºç§S—I¨t8ºúÃØL¿e-â›ûhoÏêSj”^¡¨|x{Õƒ#¾ÛZ‡wKi¨÷­Çœõpôá$¾ÛFÄgÆ4œd„|p‡QñÍaÎïÈô»æ¾Éáb€Ä§‡)ø*S„‚n 0ýŽFøÎþLq–oÈô»¦ß„Iø*C„W_^Y¦ß\ô¿ ø®Þ?Ÿ?Íü&r„|í†Ëà2,öŒÓo®×ÇÖzû{2ýt§Ý’ / -õ˜„½£.?#wËG{{æÃÛq½1«9ýÖ†—aÊd?üœ‹v(Zî}Àh‡™kdx‘hÉûÖ[”8ÍÜ•¦ß\”I˜zfœvKÖNÁ¿ìçχYŒIø&Ûù_•àn¹¼ SuúÍ„½#NsZ9¼µ*M¿9åÃÑð‡ •3טE™~ßÛ3ÉF¾‰ø'œ n»ªÓonË$uþêÔ#¼öùí2ÿG{{þÕ{#DMa-…8úÂ|€L»}~³_ìWû÷fÈR¹B* áµÃ᧮̴;UÚùÍ~ñÞ< 1Õƒ‹x8aúiûûm˜výE}á¨âjñ÷~K"rp‘óü2ê£Ò׫®ÞˆïH†iWia`Œ›ç€­Þœ\&|qWÓâE˜)ž=!f/òèyxtmˆ™£Ë‚)¨‡±S°ŸJ/á¿ á¥Ò"A?8"À˜‚8ŠGxSG`Dˆ½pD€0±Ž°!¦ ¶"Àƈ[ àˆ;` b-`'LA¬A€!!@ÀvÆÄ=8"À˜‚XB€ƒ!n!@ÀÄÄ%à`LAÌ "Ä„Gè„)3\ #¦ ÐÖF€€#À¬‹G(‚)X !ÂzpD€b˜‚µ àˆ1ë @QDXŽPS0? 8¦`næE€€# ‚)˜Ž0¦`> æB€€# ˆ)˜Ž0(¦`ÆG€€# Ž)Ž0¦`\˜ÆD€€#L„)Ž0¦`,˜ÆA€€#LŠ)Ž01¦ >L޵ àˆ ` ê"@ÀÁÔD€…¡ñŠXÐG{{öÞ†%Õ¦4pD€U›2ÊØ…©ŠV|a`ŽÊ½âà{*S°âô3c®J¾êà{ÞS°êô3#@|åaåøÌ3£#¬Ÿâ¨‰ïO®ôŽø¾á‰À¢Ö!Þ5žÜÕ"BÂ[ƃնÆHx¤ý4o[œ#†5IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_clip04.png0000644000000000000000000013342611730634407021063 0ustar rootroot‰PNG  IHDR––³cæµ IDATxœL¼W³-Éy%–>³|m¿¹¾=`7ÆC#ÏŒÐLŒý)ôÂ¥y“1qFDĈ"†ÝèØæÚãî9Ûï²éSÕhi¿ˆ³MUæ·r}k­¯àûß}bdŒQÖ(£Û¶ÏçÎ9g¬÷ž!D†Lg²,ÛlÖÆ¨ï½ÿDžbò/ÿòËÙt|rr’ˆ¨ï{NÅt:õÆÞÜ­f§ç›Ý ÇqÕ˲<ÔÕ“'O®n.•R.xBˆ@km­…«ÆL'óÜíímÓÔišrεÖBDBBB…à˜`»ÝFk]EY–cÆx½Þ0Æž={ögögÿËÿü¿þò—¿üë¿þë{äÅèv½2Æ0Æ(ÂyžGQÔ÷=g¬ª*Ñ|>ϲL)e­%œcªºFÇã8Žsã4M“$ÑZcŒã8FI)1“`Y–ûíÎù“ÿ`1+fÓø‹ýd»¹™NË4ï÷õ_¼º½Ùß­šgÏ^8ï½”½s6Š¢8‰có-½ì £Ö9%•µÖYÛ¶­’2„€Ÿ¼ñP*•rÎQF)ç\JgŒB0Æ„pΣ(R]g”̳ôìd >*ËׯoæóùéÉ2˲<%iF0í¥RJCˆDœÂ1‚˜JØz³uί·Û,ËwÖ:ï„RÇI𿲓Îzç-c,IBHß÷MÓ K¤”FQEçcÜvmžg”R¥Æ8I¥ôjµº¸¸<==}ï½÷~ó›ßüÿûߤiúÓŸþôXUOŸ>Qt8Ò4¸8ûý^A0Ž¢(¥4˲ù|>£$nÛ€¢”FQ”$ɰ¥”R„B<B¡ "E¥$âÌݶµêÛ÷¿ûÞÃG÷ÿŸþg@QŒÒ´"¹½]sÆ›¦¾½}ÝuíÙÙY–eRõ¡¶m Bˆ(„ŒÀÓv­ˆÅ±::ë0Ʋïû¾‡:çðÙý‚R ,â˜sBDá°¢ À;‚,N¢Üjµ’RÎç3Î9ÆDk[7ÔšPš¤¹6& ´!$iÚwÝ|±€«ÊK0<(eº®Lc­5à 2Æh­ŒqÎy–fEQ&i™€†à“4 !Xk‡5Þn·‡Ã1„ðÎ;ï ·u³Ù¼¾¹½»»KÓôPïVë¶ïF£c,MáŒ]×aŒ#!Ò4-Ë2Ïs!å¬ïû¡øBcÆØ·K8”ãN”RŒ±óÎ{o¬ÕJ1Jãë›Ë²Ì>¼·ßoÛ¶õ‘Ji·Û=‘÷!´^¯Ê²\.—JKk­µ!ˆ À;çc!€¼Þl0BI’­!„i’"qVˆ ÄÇ‚sæ‚óÁc Þ;kŒq&xCÈ£8‰…ÑÊ9;šºNâ¸m+B9!@TÕu]7‘$Iã$ Aû^jmDÏÎï1ƽ")ÕáxÜïmÝHiŒ±IK©”’´Zk£ˆO&ã4Íò¼È³"ŠbBhˆšLÇÆcŒ÷¾išõz­”Žã¸®ëo*Ã9Bè³gÏò<ÿÿý¿³Ö]ßÜ<~üx½^C†Ô{?Ò4ŒÆ‹Å"Ë2k­”Ò:‡1Îó<Žã‚÷žÂ9gŒI))¥ÃçC !B¼sÞzkApƲ8Y­n”éG£üüþùÝjݶÝd<×ÊH¥Û¦ !Ìf³››k­õýû÷½wUU…à‡ÊsÎzï1F”R„P€¼Ýn9¥y–Ykcy–yç‰v6"˜2A‘Jí÷û8ŽDPÎ8ça† °n>™&Bô²ÞZkÏïŠ|€!çœÑÖZ­š¶iÕ°I !”RQE›ÕúXW”s`@vJiCa‘`˜È^GcLkÕ4ÍpïÒ4õÞk#û¾a‚­ëz€2)¥µ6Ë2Æcl¹<Ùï÷Ÿ~úéñxüàw¾ÿäÉ“ÕjÕuÝŸÿùŸÿêןw]·X,P›Íf(DJˆµ–@!4Æì÷û¶m<ˆ¢!4Tž÷B(„ ”:ç†õjqØ1œS¹3à=Íæ§]×ß­÷Ož<‰£t»¹ªë#%ñýûçF»¦iF£Ñd2ÙívÛí6N„µ€! >ÒÀø8`Œ1Œñ°¿1DÀ‡MsÊ@BØ÷ý~¿gŒ…†Œ'q’&I‹"Чã2‰#„±sß+ !ÌòBJy¬kclX×õRvr³ÙÈNLçÀ8IîîîöûÃ×OŸ†Šb<™N²¼Ä˜¨^‚˜QRäYš¤BkŒµÚ9 ÞÖíñpìÚÎ{‡h«Û®ÓZ+¥Œ1„8Ž!DmÛ¾zuñüùó,Ë=zTäåpQøÇôãüôù³gÏž=zôˆ`¼Ýn1¡8Ž9çc¥Ô@5£(Šâx(5À@XBcBBÈZkŒÁû?ß°z­‚Þ¹à‚Q*Í’Íf5—å¨pÁÕmÓ·R1O@‡ã¨µÚív!„¼ÈÁc‚!ŒQBˆµVM(Á ¨Ð·]QBÀ,ÂÖ9ëܰݴÖÃï!ŒÐp@jÝ÷Jˆuf±XìöûÑh¸¾¾¾½]… ãÞïgìtyÂ#„h¥·»%äùË}×Y㹈0B]×7u­Aˆp.t¯¼ÖھﺮµÖ2NÓ4ÕZ7mݶ„0Iâá´1œó¾ïµÖ”Rι”rµZßÝÝeY~rròÑGc.^]žŸŸ‡cU}üñO(g?ûÙϺ®{}sSEQ›Í„!”}¿Z­êº¸Äèÿ¿xCÙ à”¦éÐx0Æ8ç5¥˜@¤ê!Lˆ8N¬õÓÙäææÀ€1zòø%ìöö†RE±1Æ{xÿuUU‹ÅÉb±lÚÎ9DZ5F+)8C9çœwwwwÎû8Žã$e‚ 7m·ÙlåYVötÖxï×›B0MS¥Bèœ"Â)e!‚1¸ººBm6¥B8ÏsBÈh4Úï÷œsÎD’$J©/¿új6_üå_ýÕ_|ñôéSgì[o½µZ­Œ1”ÛÛÛíz3àáápØív½”J)Lˆ"IÆØ€¥yž âP¯Ã µÖj#1EÖèࡳÁj'"ÑKIÞj£ËùéÙÉgŸ} •„ Ü÷j½^qΟ={æœ].—Bpç,Ày‹’²'„”ey<}p”gmßõ@ÎØ€ðx4NÒE(UR•£²­JH–eiÂs¡˜q!T5uÓ´Rö]ßÇqÜ÷òÞ½{\ˆ»»»®í1¡„Áy]U‚Ó$K¦Z)ç=Á$G !ˆfœåy>‚<Ï1Fï}×µ]×®×ë8ŽÆXïÁ„B)‰ã¸mÛ€÷~¸ÅŒ±Éd:&“éápøòË/1§'go¾ùfÛ¶—WWï¾ûÞx2yòäI×u×WWCµ}ýõ×ÃaÃ(Ͳl¸œó4Ë‹Åh z.Æ€B€€"Þ‚¾SŒ³8‰Ám[Mg“³³“õjÕ¶Ít< Á'I¹Û u]÷}¯J’$ËR1¦ikcŒ1𒦩sNi9 9Æ#<¼!øÞ½c´ï%‚°mÊXÅÎZk A8cÁ¸wNv}_·œqÎ…1Ú#µišZ)…1IÓt»Ù÷Çåb1N½³”ï £DpÖtíííkˆÀx4&ŒŠH(%µ5˜ Å„ºªoooã(JãXõ½·6KÒ²,âH%¡Igi2*G£²@))•ÖÆú¶íº®äyn­5Æ^]]5MEÑr¹<=="Ýh2¾¾yÍ8?==•Rî·;kíË—/÷ûýÐ;'Q<´cÎyœ$£Ñ(N’áíι¶m‡Nß9g­M’cÜu÷ž1F¡•yÞv A ê:Å Á˜ ¶Zß N?z@¼¼ºÈÒ8x˜¦åÝí&ŠÄz½†Ž{ïýb1KÛ5!ÁpÌ{ï»¶qÖ0ÂC³¨µvÎá÷Þ}³ÖfYN0)Ë2‘ÑZIC ˜””ªë½uq’¸ö‡£TB@)‹"Q×MÓ4Z›élz²\"eß#âˆ# §]Ûí»"/g‹ð ë»®ë”T‚©u®m;)å(Ïs«Õ÷n±X,—³ÉdÂÝívé#G×uµÛíë¦-Š‘ˆâñxEQY–UU9ç·ÛmÓ´!!c Aì½·Öúöûƒ±–òÎ;ï¼|ñb½^_^^žŸŸ+¥ „œ²8Žc=’ß¾†ÎLJ9âÀE³,3Æô}/„ðÞ·m#Ïóüp¬ƒ”DÞÎxÝÔQ,¤l¤ê¦³òþý{——NKâpl£ÛíÖ9gŒÞï÷ãñ(Žc¡.I’(ú¦+UJeY !DEQ$„ŽjŽl»¶®ªñx”&Éd:©ö{‚qÇã¾ëªÃAI‰ÞïY–cLBL0„€@)¼eŒ>zðp¹89UuŒ"A)ñÆïy$£˜àù|žfÉñx¼y}kŒÖFk|ðÖšB’ÄQï]]W„à(Šœ3Î9 €ÿV‚²Örݼ¾'óù\Jyww÷âÅ ÎEÇ“ÉdNŒ1„Ðá:÷ƺWI’¼ûî»ÿ×ý¯¿ùÍoæóyžç!ð[ÍÅZ«ÂùÍÖœsçœÖ:„PÅ × ]MQZkcµuŠR¢µõ»@˜Ð¦­£ˆ¥©¨ëþý÷ßéÚz»^Yë1Ž(‚mÛ6MÃ9»¸¸@Îç3!1F)±Özï•Reži¥ŒÖŒÒHŒuÎZ‹½i•R]ß•EI ‰„¨ª*8 „`1mÝÔu3M'Ó©Á;ï르Öt]÷øñ£²,§Ó™1ú°ÝŠb1Ÿk¥š¶ÒZk¬µ˜à$ŽmÛÞ­VBDø¾í¥ÒJ)­ AXI•¤1c<Ž…÷~¿ßj­³y‘ ¥”`*¥ìºÞù0MOÏÎc}ßíüÉÉéP”ƒN&„ „ Âx»ÛWuÝ4Íåå%£´ªªÑhäœz;oÝ@gaA=(¨C_;H£ßVá°Q†&Ä9EÑïÿÁÇW×—mÛrcÌ›¶„„¬ˆ¥lú¶ºÿ,ÏãõÝk)mFã9ÆÈSU&èúúºï»Åb‘$‰µFkí½3Æ Ç(:`Jé>c >?žž%q<žL¼÷ £M]×M]C„À¶®÷Ûãßÿ].â‹Ë«õzÕvµ n1ŸÍf³¢È !}ÛÔÕ‘3–g©’ýn»i»FkÕtR A肯ë¦m;©å¨ˆ¤ì!B£µ5ÎY7Œç”"B£$Ž"CßµJJ£5Á˜`Ò6ÍñPI©ÆÓ9Døòòòp8H)˲ä\t]ÇÚó®ëâ8išæp8¼¼xÅ¸à‘¸½½}úôéŸüÑŸžž¾zõêÛÎdpf1Á9ç¼Tø¡‘øF»0!4h§¿õFÀ ´þ‡ÿðW}ß~õÕWœÇIœk0áR*Î „ÞY%”]í½yüèA}<î÷gyš(%Zk)eU•RÆhJÉh4rÎ*¥÷{ïg„A­Í²,Š"ˆ÷ß;™<|øˆ3.8ßöMÓ(¥”ÔÎy‚1¶ë”T@PUµÕªk«Ñ¨<].Ó4)ËCT×ô¡®koÑõõõ×_|©´n»6 ˆ q’&™”únµ9*BXQ@ël‘çE–c1‚Édêœ1V'I›ÍþñÿÑ9'¥ÔZg}À,À$1e$d!c,Š’ÃaoŒI’d6›Ž»®oÿèþðüìôç÷sIQŒ0"œ³ª:‚1‡ÃvTJ«ývû½ï~·ïú»»u€”R*"Ú´•óîúúZáœošv±X"„­u„„DÁZÝÖ ìƒs6Xgªº=öøý·zk¯/¯•”q”ÜÜÜ(©º^)e¥¶½rÆ.²¢Éfw{9™”ggË÷Þ{ cˆÞ©^__^[ã–³Åúnƒ!&„fEñä­w²¢¼¸¸^žœE"]o¯^^í6Ç÷Þy:™´uã½/‹"M£éd\fi™çΚ$ŽD$ÎÏÏ•QÛÝîõêv2žt½TJwukµzôàþ½³³¶©¥”„‘<Ëâ8£ºj^½|uw»‚ÅQ2ÎÏïqνwÆkÎ!|³ÚÆ".‹ò믿J’äêê ÐvµuFD@„ŒvTRŒ  &´×¶kkoú{gó÷Þ};ÏSAißµZéív\ ”ç¿øâ‹ºnÆãñÇ“,…„0!0“ÉÔ9xuue´›Ï—ëõF)¥Š… Ý Î„àmÝìvû$‰ ¥ûãîææÆC ¥Š“ 8›LæÓ ï{ÝöJ¥Õã'O’4¿»]½~}{ýÕËW”2„ DX$±1ÚZƒ1öÞBàU„Ðþàwo__ÞÞ^çEÆB@€¶›ƒVôüù‹4Mò<¡`ONæ——W‘Ȳ¬pÎ}++Æql­ÅQŒŽUEÇ„ë &JÊX’¤”R©¤”Š\dé|ZgœsI’”å(ÏóÉx|zzº^o¢( >ŒF£G…º¶=6µõÞyÐ÷òââÂZgŒYÌ—³ÙŒR Q@ÅqäƒEÇñ@Ð4†2Ö¶­±Ú9Ç·Örμ±¡,M³4åœc„ ÂʹÕj{usSŽŠßù˲ð>”eiŒmÛzصm«µvÎ;וּÖyŒç<Ïó,ËŽÇã|ðÎ;ï¼xþr2™E1™LÖëu%}¯â(.Ë<ËRFÙÉÉéŸüÉÿ€1ùä“OŸŸ”i–$iVŽFQ­Íjµy}{—ÆçbµZÆcN¹÷A*Í8·>˜à«ª¹º¾M&“Ù”rV·õ¡:ÄIR”%¦äX„£É x<Ö''§”ÒÛÕ]G€cìl¹,Ë2ϲ<ÍÆ£2Ië\¯”ÔÖZg¢(‰3ï=ÑùùÙÍÍÍn·»[Ýk-B 0(ãŒQŒq–¥Bðý~gŒýÑ~ô/ÿýïý >w]Ϲ0ƇhÇ}¯Ú¶ý‹¿øË‡ü§ÿí?Ý»w>ذ€cuJ¥$cl2õåW÷ÎÏ?üðûÿúÅ—uݪ:Š@„ tÞyêœ;÷£²|òøán»®ª!”Š0>Ùkc¼s®®ëél,‹"Ö¶­÷Þèàœl5Bˆ”rh´ð½7N{­D#ˆ0ãœ*•ª«fÏâ8Žã˜1üýßùîƒ÷0Æ»Ýîöö.MSÁ9Bh:›Ï§³ªª²,—JEBäyN(UΔÒZëóó{‹Åb»Ý\]]c¢H [i( „àv» Ýø@xuuÇ‘s΃$‰ìº²,Ë¢À” ”Tu]K©x§iF뺮ë:Æ8e¼mÛÏ?ÿüx<k«B(•캎2’¥ù`¶Aˆ¼÷/^¼\,]׿xñÂÛ4ÍÉÉ)„0IŒ‚¡,‹¦iŸ={ö£}ôÁoÿ—ÿòóÝn·\.sM[Õu]¹Ö!˜¥©ì{á~ðÃÍfûòòr³Ùã!ÔX |ö$ŽZIkôOR‚nn®‚Œ1ÆBÔZ×u}§ûýÞ;ÇQžg××Wœs¥´µÎ{_–åÐ 3Æ„xùp º@€c£]×K¥€1&çŒqŠÇÃá_ÿõ‹ËË«®Wo¿óÎÇÎïÝoÛŽ2¦´&„K¥1gçç“Õf­­ÑÊ0ÆÒ4᜽xñ\Ê>MSŒáá°GŽF#án¿}ýúu–—]×ÝÜܼ¼¸€kó]Û¾~}#„ „cŒRûái˜Ò6fyQQG‘Øîw¿øÅ?ív[œRâœÕZk½÷q§iâƒ3V#ˆÂMÓBþãüŸöû½Ö!<›.@€ ˆàƺª*­ÍøcLÐÓg_çEÖvsÎ{oŒi%µRÇãñÉ“7Þy÷½Ýá°Ùî0!‡ê0t/{.XAi#DT7Ç2>¸÷êÕK!ç c’ÄIßõm« €Rª››ëét2w» Æ8ˆ1!![s!DìQš!L•1uÛ×uí½¢ˆGø`¬‚(!ÖëõÓ§Oonnò¼|ôèQQu]ßÝ®ªªzþâÅv³_­V‡ÃáùË—˜ÒÉdr<ÇcÛ¶㺮‡C]×yž[«‡!!¬ëºmÛ8Éæóùõë×/^½ê{ HÓ4˲º®1]×UU5ãJ)ëb¨†!‘VUÕv»À—eþ­„x<ooo÷û=¥t¹\RŠCpœó![åœÏçZëï|ç;>ÔÚ$I²ÝncZÛ"Aïîî íoþæoþþïÿþ‡?üád2išFJ™eÙ`i Ì¢jºÙlÞ÷òŸ~ñÏIžÅIÂãˆG¢(ŠÁè0ÆaL»Vv]‰Ä÷òÅ«ß ëÈ{oŽÁËó”P4«ª !—Å„6Ø¢ƒ¶0@«÷¾ë:ÌFÌ:°ÆYã±Í±F•E1XóΫԻï½@Øï÷î?xôøÉòä„‹Hö²ªÛÕz}·ZSÊ_ßÞZç´±»ýÁX{·ÙbB¹ Æêª®6Û eÄO()G…ÒŠqºÙnzÙãNOOËñäêæZDÑÙùI‰²,U/÷û}YäBˆ!X5"¸â4%T€Žuµ^¯on®‡ý¯óëóó³4MÑÛý6M“ÙtÎ9çQ¬µŠ“XJé}@q.¦Ó)câææ¦m»?þø?ÿçŸ-—Kcl¡(J­•ìûù|^Uõd2õÞ–eñá‡ÄqôÙg¿2FÇ£¾ïŒq]×Çcô¨È…ÿý_>=þBiÅ#¡µqdŒzï(a”R­ £´kö‹ùìñ“‡ÿí¿ýß§§'J™²;뫪­Ž5c|µº‹"êúVDÂZ“e™sŽsnŒiÛöFzúälë;ÙµRŠ"Ì9§wMM‚a ó¬ñ¨ IDAT!I’¾kµÖV!a £(šLÆãñØ9·ZoºNÝÞÞÝ­VƒßÄ9/Êr¹\n·Œ¡´(Š!FÌ£!LEBÞB(ÆÄ{xÿý÷­u?ûÙÿùÃüžRªiê$I‡¥dø©}ßYk„@ !Ü\¿~ë­·>úèÇû·»\.ørTÔUE0ͦZkÆèf³)Ëü{ßûnÓÔ/^¼»»Ûl¶Bc¬”²ïd‘—”kÍh<ÞÅhL…B¤6`ÁY|ÀŒ) 7×W³ÙìÑ£u}ôÞûà³4§”oÖ[­ÌryRUÕf³OŠ$‰FmÛ 4ø”ÖZNFQßõÁA† A¤•±F+Ù—e^–™”½ôÁƒ‡Êتn²4ÏóBs¬êã¾ê{'i/Â$ËsˆPݶm'çóÙv·µÎÆh¥$€Rü“Ÿ|¼\.ÎïÝ»ÿÆ$ÏóÃáRÖt]g´®ëZÉÞZ{ØîŽÇã¸,"!(gmÛnwÛ¶rPi[÷ÆXB‡¶'"„¼õöÛE‘%IÜnw}ß;¼÷ã¦nËÑ!L „8"umuuõàÁý?ýÓŸþüç·XÌÇãñË—/!€”RcL€@)¹»»OFï¾ûN]WŸ~úéýû𦕽VJC#ÁÇÃh2&”ŽÆi€ÒKEa„½Þ a:*ëãt~~ºXΟ={ª”fLäY¾ß(c㦩«úp<žDˆÖ†1† Î[ã@@ àÁ[K)êûöþƒóBÛÖÆ„àQů_¿Þí¶yž¿~}Gãñ¸ï{aQŠrÎñ›ïÿã?ù£çÏŸ?þÌK ?+ŒÑ …jmâ(º½½ëÚŽQvÿþæi(e}'€ÂÕfur²„ˆ4m“æE —½óz€é7ù‡Äƒ‚³ÓQaŠb~8îÏÎOOO—¯¶ÛÍt2EBe/·Û!äînÕ÷ýl:ŸÍf»Ý˜çY]×Î9Œ!~ððC aØk¡íZʉˆc œ!ÊS–Ä„ñê¸g‚g’4I\·TZYóö{íšýq›å©¶}¯ZJ÷>£¬kÛêP[ãPÀÖ¸ùô¤('Æ8`ݶ«í¾í; ,çt·ÛJ)³¼’Niž‹(~}³ê;e.H‹(ÂÐFp×êEÄ’8òÖNG³²aDÎÎÎ7ëÍ—_~‰„°^ÝæY&µ^­VÎYÕ÷YOÇ#Ùµ1ãmUŒ?|t}uõÓŸþ)ÂäïþîçËÓSï€ÀX˜ÎfJi%âÑx*•9V5ãc ôÁCÊhˆHœ&Þ­ F˜&8G"(!”R‚uÚœ‚QBŸ?*8ùÃûûŸöc$8“¦Ézµu]ßöÚ:°Zï@EVx¢HPBû”]ÓTxºœxë¬óÖh¥””=œ1&u_Õ•²a’ùt:±F†`&.xDp9MËe™æ)"PkíœÐ3F²< û¦i Á‚Eã¢=¸2ž%qdmØî6ûÃ1@Ÿ¤Y’ÄJI„@–æBp«œTJ+ÛõÒÆ#€Æœñ8Šã8b”Œ%Œ 5F*Ýw&4KSÆ…w®ï¥µc @˜:€Á༔C4.ÊÉh¼Ùn£8Ž¢ÈYû½~'˲Oõ«ñh2LþcÚ¶›ÍæmÛÅqr¸,+´6ÎÅmÛBº¾!tm³ßí»¦1Z9k½“®md×#&‚Óñh4ŸMž?{æƒuÖÖM¥µ¦ùà릊cEQšäÕkŒqÅãà|ÇI3Î AC–ìœEˆCY祔ÛÝ^kí¨ªj½ÙBò<7Ö9„ÎØ,ËÒ8Á§I H³|·Ûk!¿þõ¯¿ÿƒß],Ï_¼¨ÍñxÌóüââ¢ëºñx|<£(ÒZ§iúmŽ!ÐÆcÔ̷)áaåAu ÿÀ#†Q,6›»¶kÞ}÷«›«"+6›-€°®»8N^]\¯VwmÓ£G£Qß·RÊ8Zë²,ðù“3F)¥ #Â÷}G1¥cœ&IQIšεêWwkïÃÝzãÈÒ|³Ùc‡ƒó^)¥”Â3ÊBðÎÚúpˆ"Q”E"xš¦“Q)¸}×µmž%ãÉx>ŸžœžÎÓ$Ž ÅóÙŒqæ]hšÆ[?Få˜QÚµç<Žçœ3ÊÃߌßYÁâª!¨”²Î¤R}ß#„“$‰¢ˆ2¦­g”BHÄ¥4KÓãñØ4-ç|·ß+­7›MÓ4]ßÿè£÷ÛýçŸþÁ‡AŽ¢lƒÅ38vÃüÐ0Ëž9€@J9ȶCÚ!4ü9l²!$‡b”rÊÖ»MÇ]ßdy²ÙܽxùâÞùÙ‡|x{{»Û¬õ£ÑX+'ñn»åÅÅ«ý~›¤qš&ÖXçmQäøìñ&!ÀJ„ãñ8MbFi,¥Ô[+»Ž ¾^¯¤1UU‹('ûãQÝ6µ÷NIé¬åŒQBœ³Áûêp˜ŒÊûççg§'Óñ$Ž„÷NkÅ(uÞj¥|ðcµ·–rz~®•ªuÛ4Œ‰Ùl&xT×µÑBè !0J¢(â‚ê¡lÈXjë€C6*„2’œ³êxجWŒ±¼(Ç“‰µÆmµÆ%qÒ¶íá°J! I’O>ý´iú¿ü‹¿ˆãä—¿üå£G†Yð¶m‡ù!Dß÷]× ÃcÃpš¦LPg­ì;%ûà=Á˜`Œ 0ZŒ(!ïìÆ¡”yîV+.¸qæüìôp<\¼zùèñãÙlRÕõápÇq’dYêCh»fTŒv»Ýjuw~ïl2™4MEˆg÷fÁk½sιB@%I@0Z‚!ÁY£µÒJ•fy–æ‹å2/²ª®›¦¦ {i¬Åk½µŒÒGî§I’Æq–e „ãñœFo¾ñF–çi–æù73 Œ’$MB›í¶:ÖãÙt~²\"€v»]‘€¾kû¾Þý£ 6:o­ÕZ[÷M~0„д-¥Ô‡€‚­V«¦éŠ¢Xžžß??;=Ëâ"D0A[ç0B˜’ÓÓ3ÆXš¦¯ïn &OÞxãѣǷ··ËåòéÓ§Ã êËCžsø%rRJµÑCV˜&žðVzóÿ¶p‘²Öû ¬ÊóÔYÝuÍhT^_]>~ò"øòâaXœ,ÇÃv·}}s‹lšFÎó>diÖv .ÏÆ.xàsÞ*£•²Æ`ˆ¤ì»¶E0J½³Æè—/)ciZäyÅ1Bh˜\‹ž$ÇÑ Ï &æ³Ù›1‚ x-{£•`¬È³$ŽŠ"ŸM&ISK9hè›ÍF)“¦ét<ͲL+s8FÅhx^@/¥ó6@`•Zõ²7Ö9|èBcB‡8¯à<‰cŒ`‘gÜ[,EYBËì›ÉLTŠ ž¦YÓµ³ÙbxðÆà÷]÷Ñ?βì“O>‰¢¨iš!1Çñ·•7„KôÞ{àäü6÷=0áC(ûÛåôˆÓ<¯›:Ž£ífË(Y,¿ùÍço¿ûνû÷÷û]ÕÔ€ÓÓeßwZé§_=˳Ü9·Ýn „eY†à±x|ÀÃŒ2²ï‡·UJv=F#¤d_·m>*ËÁ¤iÛ»Û»Õz…   ÁKD„Ò½ÄG“`M$Dš$”Ò8ŠÊ²äŒõ}ß÷}š¤Iœ(%Ǫ뺶iv‡q®ªkïBðÈ{DôÂÉ90΄äm×u!„(Š1z°9ƒX1ö!€â4mêÚygµš/fxcìíÝëï}ïÿ%êÍž,˲3¯=ï}Æ;úõ1æ)+rTeUV©T¥R—F Ñ´è¦M´Á¼ñÆÆ?ÒôCcÐЀ¬­iŒÆ0$ÔmBR)•5fUfdÆ‘1¹_w¿Ó™÷¼yØQIX<¸ùÃ~üœ½Ö·¾ï·Þ¥”®6«¦m(£ÚHB¨Q6O ý«W¯²,;<<¬ªZŽ¯ß¿É( .h©”ÒÁùùlvúêÕÁþ"„þ»¿û»³ùôôôa4™Í†aÐÆäy PJvmÛÖõ|>Û›ÎÕ «ME1&Bm%1ªê»6M“ÅÞ|Tä ø$MBðÏ_<©ÐVïvÛÏ>´>Ü¿ÿæõk7ëªÞ®·ŒRàn·kšn2.öæ!„º©¥”Ä‘4ÖI¥¥RÆZ@¬ãã&8+‡>ÏÒ+''Yšc.V—Y–eY @°Îj£xšˆ¼JëåéRk1 !–¬ÖÆùïÿþï?þü³Ï>‹)êª"€&MÓ$Iâ* BÈ(e­‚ Œœ5rè½³£8:^.Ï¿|ú¬m[±”r·«êº•ckí <""baމÁ:g¬3cCÕF£_ ú¶ŽOƒ÷áôl©µª«ŠRÚ4mš§Þû4ÏÛ¶3Öz„‚0£LpñàóÏFãÑþá>{ö¬®ë—/_Æ×õë&Æ_õ !kM¬?1ÂB@<¢½sœq Á`õÎŒ)çB€Š €³ °å/^¾8>9*Æã—Ë—Ö[–pBHÎrÕÇ”®ëæåË—7®ß ÁãÃ뇄ä¡ÑCœ¥i[ÕBÎhQyž=}þìç?ûiÝ4mÓ2ÆFeÉm›˜r~~¶Ü¬6ŒÒÙd2*F(@£¬³BT”Ùx:Þ?8ˆyù×gƒÑzU–%üÑ£Gƒ”mÛÖu;ßß_žŸo·Uš¦£rì½ßíªÝn7O­µBH>fSò<×Ú¼&/9÷º^pÎ9Ç(ÕZÇÚ#K ã g,MsBɵë×ú® nv;!øÐ+ïF„r–PÁ9g„aBc¯ýëãñøÏþìϪªšL&±µOU¬VâI윥ÇÉåWµh¬–ãcÇ‹oˆxýŒQc-„‚á0Îúlǯ–gyQÞyã6DhSo©àœ2…êÕv»†c²\.gÓùt2ó“9ÆØ§YdÅÕ+W¬6Þ{Lq€ ª«^±™µÊƒ³@g B„pvzÚ¶ÍÁÞþÑÁ¸k:#5pÁã Íò|<™bL€y–§"•JK¥Æ:)Õòì<+ Î…ñ¶ªjçl‘•ãшSBÀ„¦iÉ˼,‹¯ÝÓ9ï|hÚn<›Rƒ@€„L¤iš .%W®]}ðÙgÂ>øàÁƒÖÚ7Þxc†ªªâ]ŒˆxÏ(%Á;ÆcD £µVÆhÆh’Œ‘1Ú9‹1"”g1‚#à}p.x Xï”VU[ßùÚÅááÓ—Ï=$<+hlRm·ÛÑh<ôj»Ýã+w®”YN1Zcˆ£5ÔC6Ön«-!d4i¥)¦›õzyvJ).‹‚,¸àŒLfã1Á´©š¾é ‡Á…¾ï< ú€sŽ`ésg¯Nc€¯ëºóóóÕv#„ÈŠœ ±*pb‚|ÖÛ‡O«y.>üùj·99>IÃ[몪‚€„>|˜¦)¾q÷ZÂ…à %Äj[WÁ@àœµÖj­|Ö™Ýn]ˆF .xžç€4áãQ9.Ç€z×T›–Ú;¯µQZ‘”u}×·}ßõ]×ËA¶M»«*Nç3ºÙn½`%êC Œ9ï‡^Yk aŒ1ãÜ0 ¯Ç¤„Œ3ÆksËkmd%AB xιàL)Õ4çìäøøðè(Ëór\ ‘k”ÒÖû¶í..Wb„`"MÓ„'k¬’r½Û(¥×®]{ï½÷>ýôÓº®ëºŽ²ˆîÄ6B‚ƒx cƒïbl<^·¯ßðÈhE ¡„‚à±ÖZ!Ba´Ùnž¿zñè‹Gì^-Ï}ñðæÕIIÀ‘q~~™$Éry!¥Â‹ý‘–ÃdT‚2­¡„QÚ¶í0 Ñâè] ˆÔëÍ«WÆã1 xo¬†çóEßËÝv§¤²Æ)©£A6´««¦mëº]_^Ö» ˜¦él:M‹{ðàÓDðwßyûÏÿüÏ«j‡Á×uUäðê•«eQz£’g aœ¦Á!&8@ïüPw+ˆ-¦ ‚>4¬M8?ݬÒrDÎ œ<²îH$O?ùx·[ zxòà©çzôh³Û]¬Vƒ6¯–çM?8€<€J*Œ0úq…EQ¤iªµŽž1æ5¿„ ó`ðÞï1ÆœbB0%Øh3ŒBóÉÔ[W™³Æû@0æB‚µqƒT»ÝöøÊÕb4*GcJYÓv¯NÏ”Ò];PN1„ ÎY×µÎù÷ßß{÷ÑG;O„qèFÆ£ÓYgd1ë1D$ hœY×—.ˆu†QQ”c)m]·o¿}ÿðêI%•óžC¤×»7çY/Ñ®:}øp±7MÓ´–= ˆ“´©º£Ã“k7® !@ð»íºmš2/($ˆR¢˜åIBýÐÖµQJÉ¡ÙnÌЗiR¤Ið0™LFEy°X ó}ßË®½sÓ41äíœsÁÇ3?ŽcÚ®ÛV;Îùl6Cie­µ›Í&Ëó(ôXk9ç1'Ð÷}¼O_}lÔ#¼ R$c±eg F„ׇb ­GIÔ±"„P nÛ6ºÙ!FÂ/¾øÂstttåÊ•ÉhìŒÝm¶›ÍFÅ8)Š!TUÕÅÅ…Öú‡?üáóçÏ?øàƒX¼¤iú@( 4˜Q  ·¶ÕVú` ˆÊy:Ö4½’Æ‚‰à˜Ï‘˜¿÷ïü®(²¡ï‘õG£™Û¶¹ ø¼žá T¼%¦wÓ‰9»dÎÛ¡ð³Ûó5³tÿÆí3bý7’4ÊË2/P@ݻպÛÕŒ2Ï(Á ãq™•Y~¸¿_fyY–Öû­%ÿ{„€`,D I’`Œw»];ôãñøêÕ«ñÁªv./Ò$O¤ì—ËS­þ] × IDATe×u1†}v]×5MórFižç³Ùlooo4E¦o|:_kÜxâA¤‰R­¦i¤”¡,Ëâ?¡µŽ$D p»Ýœž½¬ëB€Rc‹E¼CÓé4„ðÑG-‹>ø 4£Ñ(6…ñR‚c òP…` ôˆZDl`,-/7ý³—çM'DRØ|R¼Z]^¹rÿþýå‹W#‘í§ízÛ­w\™»åbÞÚ+ Þ‚Éhp¸n§<9ûâéO?üH·=uáp2?];ð€ðÞ¤,Šr6Ÿ§B4mÛÔÍf½n«!ôæõëœÐËåáî­›Vë½ù\)B8;]VMƒAs‘Xcz5ø(!>ã @qjœŒQBµ‘yšÎ&ÊØã'O¶ÕN›•Åh<ö8ç7›%eìÊ#ü3ŠÂ±ðƒ~XF…॒ÎYgmðžÊ9ŒBó,åœ{ëÓ4;¿8¶]g›Œ'ûû›í¶i[àz»Iâ <~ôdy¶d”qÊ%Ûí/8ëû.æI¥T?~ÿý÷÷÷÷ÿò/ÿ B8™L¢ëÌ$IÒÚ(¢)Äb¦¬«›öübõìÅó¦m!Â8>(¼oºîÚÕ«ßx÷ëñÿ›Òá@»Ù e޲Ü\nÆ„#¬6»ºO§ZÙó³‹o¼óN™¦ @Âf¹RÝ€¦s.xX?}òds¹ªvõáÁôêÉ |µÛ"èçÓIQäÁ‡²,»~JmwU? ãñ”0ꬷÎJ-˜`ëœ56 1êÚÞYK0&!ˆ”.W«õjã(Æ¥HÒ4Ëú®KóÌ:#û!ÖÜñ±‹JGüÕÈø¨zXk¿ƒCJ)c‚¼·Zº¶MÓty¾ÌÒ,¾ú0!"MvUµZo&Zk€ÐÅÅEš$——J©rT2Æ¡Ûí&„`G³ÙÌZÛ÷Ó'O®_¿þÍo~ó¿øeUUG}úTkƒ1’CŸ%ÙÑÑ ©ë`èÛï}k1™ýóÿþŸÝ¹u;,¡hX­ÒBÕ”!!ÏÚ5! ¥ÙóÓÓ7îÞÙ_Ì!“²Ü®7uÝà7ïÞúáË/Ÿ.ÏN7ë Á(ìhŸQ¼^]8gOg³é0 ŒÒ4ÍÚ®oûÎXW·ÍÞâÀz7 Ò:gœ‰ðEë1a`œ³68ëB0”ïÜ®ªWëMð‚ 1Î(¥‡A&ib•‚0`!±MÖZYkœ³!øWvæaèµVÞ{L0„„@VÃ0 R*c¼³„Ò¾„H’4Í‹¢ª*©TßËó‹sˆ0D˜sÑw˜&)c\+“¥‰w¶È³¢ÈF£QT«!|Ýê}ûÛß>~ü8†ü"}“Â(ã‰0ÆaH á΂¶ÎN—Ͼ|1ô=†ˆ"8´}ÊéñÑ£ZŸx"×õálÿ·¾ÿëÿÃ?ÿ“½“ý¬¯ÖëËfuy˜ À΄ñ®njgl–5V³„]»~5OÓ,K­u}×ãßøàÛ»ÝöÙ³çιÉh|ëÖÍëW®¼|ùìÙ³y–QN<ðI–Yk eM××um_­·“É4’d.8ˆ&1*ç0ÅÚ¸,CçÂBè¬r.0%ƒVB^äåh|pÎAðZÁþ uFéû>vcJ©xLƶzCd҆¡àƒµ&N‘„à½÷„$MÆmÓörpÞ¯V+BYš$ÓÉŒqz¾\fY–¥©Öº©«r4fŒF£¸ûüóÏ…!€$Iž>}zÿþý{÷ÞøðÃu‘>ò£¥ ÏŒqR‚¹Ó¾®š³—Ë‹gÏŠr¬úÁ RË>bV–‚áI–3‹OŸ>¿~õÆÉÕ½w?yðË!èƒã´öôé“w®ßVKc'ZsÕ­EÚ´Õ½7îN§ˆ ¨ë\ñÉ'¿ Á_»v5M’$Ï_<)?<>œÏfo¾ýfÝÔ›íVi…UƼ8=톡nZmt€¨„°yz÷Þ;ˆå ×:!B@ œcJ¬sŒ2eÖZ*å¼ g¥¯éb‰ˆC†8æ5FCgåMÓô}ùg‚D$ã_¡ µø€&ib¬é¥,Çe/‡ùÞ^U×}×]nÖ—«õ[7ËbDyùâUßuÆ9„ÉíÛwÆãÉ0ôßýïH%#»6¦jëºIÙn·UUýÑý———ù=Î^c¦’,O󠃕¦«šû§ÿæ[ßøÆé‹—MÛf"ñZS(D²­9F³ñ(e̺­Û³‹Ë;o¾u÷Ý·ÿÉÿøßß¾¶ØŸy¥ž|úÉ×®_·Þ5VmÒ´Y})ûlñêìÅ;¿öÎññáä|uÁÓ3„(Áׯ_ß?X ²WJe±8Ø[ì/Œ7ÚÚ‹Í¥ &@´®ªAi©µqV äI–¦©2bLE„H8!A=Æç±Vë¼"„†Àˆ c@>{Ñ3›Í¢¥(в,½÷Ã0ÄÎ!œ±ß@ïbc­sÞI) FÆYŒP×uÖGÜZH’ALišÖ9OF£¢¼zíjp¡z£•!„жm]×Þ{JYTË(¥wîÜÝßß_­Vçççãñ$Ïs„7–òêé‹åéÙùéÙ›7þãÿè}íîöÓ¡ë¼5ÈNÐе²mnß¼1ômž—¡MÝL{÷ß{ç|³^­/u?œL§¡ïgÓoÿÆwB*~þìÑ¥ÓK#;Æ@šôMõµ7ߘÌ'„m,$¿ûöÛwïÞYì/º¡»\]ŽFã’ ~¹¹<»¼XU[iÕz·ë”j‰(íµRÚ`F!Ä£ñ¨jZB¡@`¼µÞA0ÅÎjUhï‘8 kÛbŒ F‡àâ“hê¦ïºa⽉% B¨(Нj™ØüE•9IRŒI<¢BðJ©®úAFŒ³i–k &ã¾ë©º~Èò"vœMU·Ms±¼°ÞϧóÙtJ ½ÿk”³‡¦iG›1‡ÏJ©,ˤ”¢ßùßéûþG?úQšfÓé´išó³¥Ü ªé­®ÿæ÷~ãþýïÍ7ï}þéƒÏ|:ŸÎ‚µÀÚ4«íùb6GñɈÙ«Ë íüw¾ûÝédú·ÿï_ÁAù¦ÑMwq¾¼÷Þ[-ò?~òÈ–©d´õÈ…Ðuíí[7çó‰" !Âe‘J5`J ‚ˆ $u×VM½kë]S÷Z²\ˆ<· B¤1ŸŒ9çV[­µ³þêÉÉl:á\@€NNŽã§§§išB6»ív»‹‚çbµZqΗËåf³ýÖ·¾5?þøc­Ìh4:??¯7õætõõwÞ½w÷Îÿñ?¸uëÊlZ2Šó,ý³ÿçO'ã±sv·Ý\¹rårsá´™,öX™ò²è•ªšîäødVŒøoÿb^)"œ‘篞¯»æåfý³ÏÎ/7,©A%O®F‚óíCïC ŒdyÆRÞ CÀ2ÌRn1¤‰€œ!ÆD–ië0¥ƒVÞLÈ 4!$¬5Ö;ˆ ¥”°øuŒ‚)!4@h¬5Ö[ç„H!Bx!Á€7F – †qÒ¦´ôÞAÒ4)GÌy‹1*GE9*‘zc­6ÎØh™ŽC!DÓ´!„”ªí[Æ™ó~2úNyI£ Ñ£Ã#F™÷–2F(¡ŒAš¶nê6Z ¼÷Œ1!’¶mãŒÝ®*ËòwÞéºîìlÉà×ê¿ûïþáßùíß|ÿo'9}yúÔuï»ùWýèÉ#ÎEßLð¦î F”³Åñ`i›®kzÉ“ONgã"'[>ÿâIÓõO>Á}€ƒ?\œ˜Nú¡¥ÉÝÛ7SÁ0Fü½ï}‡ ê×FA ¤RÖ»ÙbžÇiYHk- Òš$<É”3Æ:„a ‚1ÂŒ1e”sŽ)&ƒàP$Uc‚)AèuÔ=Iâ a`„" ³ÆXÙÎù¯*ÒøHÅ&:¢Íãr„Pd:ÅÜlDi#‚¿ãcãžØC–eeY.‹½ù|¹\®/×Yžç½÷²—q#3ÁfãéôÙ—_^®ÖÅhDg3ç"jîI’„š¦y÷Ýw÷öö?~²\.»®ÃÍÞyë­üïž?ÏKvzñ<-’ùbOjõüëÿs4š¤y~q¹i2Û›m·ëë×®B¦RêÕÅÊßW5A¸–Mg†b1[m¶ Õ“WSCo/®îÏM7ضEÞ¾ÿþ¯qÁ<˜P¼·˜TUE)å‚!ŒÖëõéÅrº?÷è` ùt¤½c‚G‹˜Ò&K3‘¤ÎZÆAaÌ¢Už H[BÑh­sAŒ)ň`JK0!˜à8í$G˜º÷bŠ1aŒ%IyEyžG5Jw_ ¡Î¹ˆ'p.Dzµ!rµ¼÷‚,ÏÛ¶áB8çÓ4K“ B„º8?Ìçó¡ë(¥”0k 𠜷øÂlo¾\žI­Œõ!¥Ô0 JiŒqUUÓé!¼^¯g³Ùo¼ñêåé£GF£Q°þd~â­ùþo}çÅéH­GR1¼uïþ‡þh×t É”°“é´à\õm×Vø›ï~]õêÕ˳ùt¶¿wÐ4Ý»w†—«•õZ‰Qج/Úº™chC*D°¾ªvJ*ÎéÑñáÓ/¿(ò@ B4uó±ÂDšd£\°@0V¦yž¤B €!¯rΞ@ðÚ5ä´‰N/ÁùòôŒQ*ϲl:žpÆ¢YYiÝ´MÛµÎgVƒžqZ×!xoo!¤­éú^M0É“d:çYZוֆPZŽŠ¢Ì­så¨ÌG£®ëΗg“ñxo6¤ìû^ƒ5ÖhCÉ’ô`ÿp·Ùm7»ãÃãŸþø§·oÞÜß[l׫"ÏæóŃGÏks·ßº!m–©ÒÊ2ôþ7¿ûÛÿÓ?û‚Åë“ÛŒ`0¾ïåþñ•Mµ™LK 4ÏÈòü• xÌx®á1+r…&4­.×r ¼lŠ29»|õŸÿ—ÿE:Ë?üùGƒ—øÆñ ئ)£¬—CÞX+Õ¦Â9Ý˾ªwYš¢pÆ  y½LñD CðÁBHžgåhäCàœSÌ@“,Ͳ$” ]¯”6Z{ï|ð&jÕΚÁZcb†×)% àøèpvzBØßßO…hêÚZÛõ­1:MÓ,K½º®‹Ó¨ø«àƒ6‚qp¯?? fI’”£‘HÊøþÁAœi­oܸ‘g™wvµÙ ²ïÚŽ‚OÓ,ÚDâ‹BX×Õßû{w:¦™°Öùü¼:šÂë·®ìÍÏÎ_¥yél|$ûêåÅ_ÿõ9çYšN¦ã¾iÂÂr4)OŠDšqJ Bð±´ÌAî éõj»mUßî6Òv(g·¯Ž®¼ñÍw^¬Î*Ù"%ûD°éd¼ÝîÖ}Û4u]ï6ÞZ‚1 °«‚ðñá‰1N)£ =LÓ|4š$Iʲ\)ݵ}Ûtëí®éz­ív[}µ!'~m ƒV¯=K!|å1ñÞ[mÚ¾ë‡Ai-•êäPµM\Ü=Ú]Ó´uœc„8c¿RÚ¢9MÓÔuí¬•Ã1[À€Öºi ¥T "D9ƒg³Až‚6ƇÐCÝ4£Ñh]÷eYÆ‹¬ë:*¢¡>†l6à $Â(zºëºÞn·öWìú<Ï‹²,Ë2îz‰¯ J‰V*N 1&¿âà™¾Æãñk}Ðû8éE+eÚ®kšöðð ï%笮ژÄF¥”’RrçΟýì§RªrDóQšfI’yï=p„` Ä ôCo¬ñÞÇ oZËAöÖ˜@"„ &"2ÎÒ$qÖä0Y¾Ø[ômWWÕd<6Ö8ç”TC? r!äi6³±вxÛ¶JJk­àL+E‰²u|QÃ`ŒMÓÀ9WJÅG¹(ËÍf7HiŒÝÛÛkÛžRÚ¶}%”’q•僟þà?X,ö.Î/¬óM[EÑ÷êþýw(J™Õzõþû¿VU›ñxtx´ÿ¿üÏÿk]·ÒÙd½3ÖA gc‘¤A­D(€8k†aðö¬Þâ²H÷§šâ¥nG7¯ô…<Ý Íh>;¹z ëë÷2Uµk›f軘LÏó¬ÈsŒñáÑaQ„Юi†Á8ûÚ: ¢3J)aèUß RJoC@k-Õàƒ !8cµV1§kZ)ç\>ç½õÎ#^S’b„RJAqþ Ηei¤’R¦"QJ©~ÈŠ\[³ÝíV«•”2ú"#1Í2B@ÿji’$eY£Öqi­‹]Š1&²I‡~!l6›¸Œ"H’4ËÒ<˲ݮò> ൉)Q­õ0t¡‹Ëe×uï½÷n€Aku÷îÿú_ÿ_Õ®ÿå/ܾ}çûßÿÍÿäÃËÕ¹6ýýû÷þá?üãÅâào~ø£³Óå¸(•QÊšËõÊCF „~Œs„…@:Ûhe òœ‚DôÔΰIY©~Ó6gËåd4&Xg¤Áh <\,#¡ª¯½±Î<<ðQÂà¡ÓÚ0¦ ˆeEß»ƘXxoZÐHLð¸þJ)Œ[g|xˆf4v&Hëà½s®ÈŠÑh¤º>zs‚u1!ÍíÑU]d9ç<–3}ß;¢$š6¿ ? J<¼ûI ´Úl´6EQÄ•œó¦iåE™šºÓZ`Bqwsš¦UµÅO§Ó?ýÓ?Ífßýîo|ø£¿…Ð]»ví׿ý½ºD5ä`oQ…ìÆØÁþ¾’²išé|Öt-D(˲ñxœç9„Pi7R‚ÆÑC7Lb3D¼^Xeb")„$©”2.-…Þ¼y³(Š]]5M+Á¹¸¸8߬wÞ{!Rc çb·Û%‰8<<\žŸ]¿~MöÆ×î¶m÷èáSFÓÇžAˆ0†ï¼ûætV<ñd±?-Ëb·m{?ÿòÉÏD*\Y™W»­ Fèú•«‚‹àýx4vÎ ‘`ŒÇ³©÷a"•…˜¸eŒ±"ËuÛ÷Uß»w­k»¦nR‘NÆBÛvEQ¥EžqÆÎÏÏ—g„°élîëº.xŸ¥éé«3Á¹HSBÛuYžu]/’Ä` k#AÎyÙË¥Ì'‡>B>™Lº¦.‹‚ Œ0  ‘¤\­#Î î@K¹X­V²ïCßöðá|onŒá‰ çY6Lò¢ðÞ7uÓµ±†R*8g”"ŒCJÊ®ë8gq¸è½›§bƒá¬'„„"qMJùøñc|ßw1@%¥¬ëÖ9 !Eά4MööæOŸ>}úô‹ÿðÿ~šfÿä¿ý§¿õýßYž]æyqq¹|÷½·®ß8¬› çÔY~~yïÞ[]'ÿ÷õ¿•³Ùùêr:ŸÖMÃuZ_=9>9@ pÁ‹41ÎF=ŒS÷{VÛm×4QZ‹ ûbÔa}€>Äùû ¤Ô A ±Mi‚Ž1%uÛ£2·1I)Š¢mÛõzÝvuÛ¶L ¥t>Ÿ3ÆîÞ½}ãÆ¿þ«¿A}ï7ý‹§Ÿ-ö'R5"!?ÿùÏ뺿sû>£…5üøñÃ$Å?øíïIÕEÕ~2™Ä^óòòRkd˜0„‰$xê=ÒÆ¶-6ž9€]Öm­TІ<É €Ø{0h½ X(gm5€¦IÖ C0ŽŒ %˜ ¨}`Œ£At4ù”Z:gúÞŠ4ÐgYF(0ÎbŒãªF çœ&ÐÖf³IÊø|:•}+÷¶£”Žóâh±ŸçyÛ¶qJA0Qûö „DšjkµÖ%ÎbIÙ÷½Öš‚‰ßWNÆx¼%IRNÆ»Ý&I’8͈¥Püº(‚1f³ÙE uEQ¼|ùÒyrrÍéÀ¶­K²,;88ˆ“¸i >‘Œ±Gžã¾ÿýïý⟬7§IŠ(å—«æo?üñ[o½å QRçYÙ¶­6ÝñÉÞl:ú¡( kMµÛà¶ÛÍó—Ïö÷£û2„àuÎQŠ Î(ø€·ÞˆóQ‰ïÞ¼¦•í‡!D(ƒ'IÖõc,ÍSm´6†0B¥„PF­sƒ´’‹½9˜R"Õ(Ê"€‚¯ª]VÓIÉ(æŒdEθˆj„@I <ÜߟŒÆ³é…À)3ZÅ¥Ìû‹}BS× ­tS׃’”QÊ(À(xϳÄCÀ(¥„@µÒJ*LHQ"¢²¢$d­’r’²··w|åd³Y'i©MFÛ¯V Ä)ÄjµŽCùƒƒƒétúòåK©†²(‡AZk‘¥izppt||œfI–§«ÕŠ1V×B ŠõÏŸŸÞ¾uûÛ¿þ-kÕj½<:Þ7FjmŸ?{utxõððD+“åE’Ríbo±[7ýÍó4uVû`£ÝÐ#ŠÓ"/G$ÈgœQVSÆ¥ Ha€Áç10¸`øp>öb„ó|4OÒ,ƒBŒ™`„€&˜rÊ8!8ï¥ú¾‹xàAÊ®k)å6ÃišåyžAˆL0¢Œ‡à¥TÂ<+²<¿<¿À%œaœu¼’*Ä9”ÕuÕw&¯·/ŠD=ÖÚ®ïã:ˆÐhG‰\ˆÈ–ˆ©û¸Ú7…yž3Î///g‘Ha´Ž¡s>Ƶ¢×;.\Þl6ñ÷†`‚ò IDATQNÙß?¼zõj$[DÎÕf³áœi-G£Bˆ1±«ZBèl6:>Y|ñÅç7n^iÛž1±^íFåì×Þû¦s^ëÁÝ»TˆëÇwþÅŸüËízeIš§˜¢NõCˆád>#‚»à­Œµ"M£Î{*˜CÀb”Ng(#x6aÒ*M“$Ïöö!‘€äE‡´q„Ò<Ë9çË%ÁÄjí­U}_ä9ð¾ëz‚yÀ(ݶ-%cÜõ=¥”2&•2Æ ŒyYìª H†! „„œ1`ˆ9y–q! „„ÒXï´]§µrÞE1€ÿ§ÅÇ3Æ£ÂnŒ©ªJ)•å™1f±·O)M“|<ŸŸ_ÔuEÝívÞÇÂMcvÕFI“¤å0ôRv¿öõ·.W§Öéü|vðòÅùÅùæÖÍ7²,ÓF:/™Þºã½ë¿øÉ'Ÿ|úË4R½–ƒ´ÓøùþœgÂo¬ñÐ3!<„Æj̈AÞâ€9Œ”d£¸åTAÒζCï€ËŠSRwmÝ6MßUUÕ4]ð°ï¤V^ð\°Ä{=$˜„g³Ùl2MÓ´«›a¤”\@SB¹`ŒÅâ¶©ZÆç‰1ÎY`´MÓœ’B³Æ·ÝX„AæüüLÊ®iêÉdìœíº!”p¡¥œcÎ/ÎÖëuÛÖQønš&IÒºk1ã"&ò´È1†ÆÙår9™Loß¾{q¾¡”ÇÈóçÏ>ü,jýÞJÄòô|o1úOÿ³ÿäk÷î,Æ8 P–ÞƒÝnÓ s" B´5½¤SÚéh¯E‚ÇøïÝ!0NµQí´ .`È8­Û¦ëº u.I²ºê€G£bz)•œw}xx÷¿cB0FmÓh£! xãÝòâ’¶¿·PJ7u„ª^íM0à[7nw¼Xm÷ö(ÍÐ÷J&y&² ’ÆÄÐ ¥ c‚®«A„šN&Z+çA’fi’½aBèv»›Mç]×diÊA kŒ à µQcÆ„!çƒáœxo›¦ÒFIÕc„ã:«q9šMg/ž¿`Œ¯W+ááÑq×µ§ççÖù®ï)OaIRãiV³ÅÔ8Cšïüƒ¿ÿþñ?þ§u­îÜyC+ýùçŸ àþà~зµàŒ "•:]^¼óõ·ÿÅ¿üWýäÇóÉA’À%epZpt¼?GÐQŒÄ—›²#¬ÕŒÒ2+‚¶ºÓ ¾r8ßlÖ]×VMåƒH-Û¾Íò¬jš/_fYÆ8öì£Âh°Æ(m8£YžsJµJ+k Â8&’)'”1ã­A$)ç‚PΩÀˆä"Ïöeœñ¦j@ÛÍn·­”QSë|ˆ(¥œcB€Ã 9OFå(ÏK‚IðÄ™MG$.”‡Ê…`˜‡RJB¨³Ž Ä83JigÄÆFG\Tœ7ƨ¸c!‡„`!Ò,˦£Q‘çY^¤‰H³|±Ø›ïÍÇãÉ£ÇOÒ4)Ê1¥Ô ²Þ÷C¯Tq¹”Ò`¾óëß%XT»vä¨,OOOË"!¾óî[»ÝA ôÁNg!²þõG“ñ¼o¤6:x‹PðV.Æå¨ï{oFa #ŒpÊ‚ ÞàȳqÓ¶ÚØv|"Iw» 3†0¹¸¸4Æ9ç/..&ÖÙx‚ ‚ó<Ë‹‚s¦Œ¶Î„(ci*0#qˆÁ.óÙ\ö²®š„'ZÀÙéÙÐK‚ˆ’*©±Æ;ïœ×N!1FÖ‚`Œ ¼·ZÿL½W¦IšžÞ¼öséª2ËdÙöfzvÌÒì®H\.d à@P'¢°ÒO þ¤ ’(‘â’KP!A³œ]îìNÏlë®vUÕåÒ}þõáuU‰NôA¢:…Îø"â‰ç¹ïëÎòt\Œ³à>bTiÂI´ej…!Jd!ÒZï{Õ[ïgÆh€aÓ´Æ9€PÀ{ïü+“©³Ã ¢F2BƒŒ1F¥4äEÞ4-¤ëºùbÙuýéù¹”RÈ] a|9ʹ`e9Úl67¯ß|çwŸx=á #l‡Q&@€ƒVx6ÂŒ¦YfsÎÉ,mû.ª•>~txt”çùãÇ!xB°’I–$R¦‚Rhû.„€NÁ¤ðÞGËI×ÓÉl±XÍÏ–’'mÓ)e—‹†0Ic !X ì‚Ç3N…à„„_¢’B€TJF)ðÞÙŽF;³‰ÕÃ+nÄ䥡ÂpÎ[k²,ÛV• ¾í{„‰qa QÐÚXkÞcu”#ˆ¥Lò¼x…¦©”™$'''ã¦i׫ ¡X0 TÚ8çD¡—Ö8AcOx¹\bˆÿÆßø(¡ççÖ˜ýƒÝG¿hš¦(ó{÷îÕu¡TÛ÷ílº×÷êßüßÿÏîîÁ ta4´-å|ww <°Ö)­ EÖ{c=cŠ 4ÆZm‘q‹$Is*d§tß«ÙlW·\m´q΃mÕ¬7ÕK5QÂ!xBB(ýZkÝý²‡ûN‡>ú裯¾úêÚµk“Éèäô9„p6›9ç~øÃv]·³³£µN3‘“ ýÿà¿|ýûŒ“+W9KMe6Y.ªÏÏ(¢¦­”ê!¡m7Tuk\ðôƒ´Aãñ(ó ‚¥ªªR^¹zõñãÇ£étG9EQBÓ"I’Ä{g­Å”´³¡\AóÞà´ò.çCE^ *ÂzS8Ñ‘¤µ¶Ö¨aJçlšI„=ç_Ìçø4I²}1ìܾ}÷/~ð£O|ÞvçÒY‡1âB,Ws}ž§_<úòäô¢­´R A”$ g<„€§;ãmµÅG1ÈþþþǧÓ)¥ôùóç‚ñ+Z)Fi"ÙzµX.æ)¥Þ¹!®ë¦†àè-K™¤agVº,G @Ý+Å”bZ­7MS_œŸ1FœµI"ŽŽ®ª®Ë2iºz6pÎ!º¦A®–‹+ûÁ»œà¬Ì²4‘’sÆXVæ&XŒh]7e9ò0.ú~p>TM]UµóÀ8¯ëÊ9 ÁB€…yV¤IìÚÞY?ôj”µ.!‚(`„0Öú»wnçEž$éÞþA×õŸ}öÙÑÑõ££#ඪÒ4#˜t}KÑÆp&vwöÒ$ƒÀ÷}—$!øÿÍ¿ù‹_|´^-ïܽݵÃô“,Í¿ýßZ­Ï³<…,ëƒý#JùþâÇï¼ýîrµ‰äî³³…ét|zúÜÿüäìÉWOÒ4{üøq‘7nÜÐJaŒq9Ê‹¢ØßßÇGÐå|>—R"½óRJÆ €PÒµU|Qm6«õùÅB+çy–¦MÓ.拾êªN“`µéÛ!8ÿW¾óÛÓÉtµXžŸ]ìL&Þzk,†0OŒ`QdWö÷d"¥ ;Óqš&ιj³õÖõ}/ëÛŽêœ3Zk¥ ÂEQŒF#™&8e­5nSUÖƒMU+¥·Um"1ˆ Àz½ùxÁ/ÌqRB:÷’uU“>¸àýx4zïÝwþá?ü¯ö÷öÛ¦-Š<°··? ƒÒù`´†|ðB™$qÊÁóÎÆù‰sîƒo|#I’?ùÞ÷Þ{ï½í¦ªëz>Ÿ¿ûîÛW®î>{öý½ßù=‚É—Ÿ}f•zë­·³D‚àw¦Óý½2OÇ£r\F«mµY¯Y’ }¯úBØ5 Å$f©EaG×wB™$”3B«u¯Tß÷ëí¶ï†ºiµ6àŒs!„DÐ{ç¬vÖ€à”F¹÷~tß1ˆ22<âÕˆ1"„PFe»³ÉÕýýo¼ÿþÓçO_¼x±·`Ïó¢i;€È{ßõ}ßw@Lp–—išQJFï±1Fß|ÿïÿñ¿ø—GGGYš[kùË_ߺu|ýúQ˳¢Èîß¿wåðʃO?ßV•ÖZr°zxãõ7övgøîÝ7®_3Z<îµFi APCŸ&Æ]HHÛµÛÕ*&°Ã­¶ªWЃ$ÉÒ$%ˆzçÛ¦Cyç1”P;ôZwãQ9.G‘Û·îœ<¾˜ÏoßÜ,ÏŸ=ëšÊšA %(Mgìît§ÚVmÝZë¤Hò¢L³<èB Œ•EI(«›v½Þl›Fy×kݶƒµA 1A„™FŒ5*ø@0âœ2J¯ãbÀ˜ €€B”°è*°LƘœ3:t=ÁxµZ ÂUUõ½:;?7ÆõÃÀÏóB‘H9Fã12æ½ !pF£‰Né~~qñƯß:¾õïþÝ÷Ç£IQ!€>ÝÛ»òÆo®W›¦ÝŽ'£Auï¾÷Þz½úø“O(å"¥Ôt61VKÉËÑh³Ù@›¨Ö;«‡þÎ;©øÞýãÂÉó›ÍF‘ÉÄÕaŒ5Fkí­+²Œ¢㌕\0Î1$!5è¶íº®×JïÎv(fÁ…¾ëæ/¤àN[ÁBèæÑµ¦®v&“¦®7ÛU³ÝfY’f‰ÕŠC.´m»X,"Ï V?úòKNèñõ›O¾új:š®ì^qÚBã‚ñ¦WN;éþlçðêÞv½(GùhT0JÚ¶VZ#„Ò4 !ÌËÐ0ÂøvÛëÏÏ/¤L§“©w>ødœyﺾ“ —‰ ŒеÝ0ˆ¬ κà!ÀhÓw]t }‡1’‚3ʬ±C¯ŒÖÁ#Ê„hPÆTB³´ ˜:k6W¯4M !¸{ÿ.¡˜q&e‚ Á#)eY–s™X(κgOžý'ðm]úàÁï¿ã‚;›/ª¾íUûþï[oz¥Åç¿õoýïÿ䟜Ä*ì%ªCJ©µöÃ?<<<üö·¿ýùçŸgY¶³³#ñìùƒ?±Æ Fù`”¾wû΋§ÏNŸ¿àŒíïî1Fº¦ r­>ÿêE·ªl«Y@ 7ã¼À¯½vg6›eIŠ0FMÛ)ç#íl«úv蛾m{Õõ½±>@|õðªó!|íÚõ‹‹‹º®¥äœó"Ï‹<ϳb4!àaðÛõöàà IR‚Øh4±Ö3Æê¦ÕÆ8k<AD°Áx묦”],WƒRJÙºi™H”±e9‚˜ø0å«õ¦ëº¶í¢ÃO)¥‰z5„¡DJ‰ !ôCoŒ Ák­­bŒ³.®w” QJ£ê’kê/ƒ"1öÞAaìñ€„8g]ñFíUŸÈd:pÆÓ,ïš>øˆÒpÎ;kœ!œKÒ´Þn ·Ž?øÆ7þìO¿ >¼v³Ô“G¥ ¯Ý¿[Wk)HPî=¨¶ÝOòsF…Ñn1_ JM×.^œ¾xö "¨´*G9Ä$8‡ÆÞèaè”ÖÏOO @1dd]W«íÆ!`ÒÐ •·Æ;€ÑÎÞÞÕk‡„ ¥úɸL“„Qš'éÞÎÎþînž¤ÀNø•ýFø•ý«“É$JͶÛm]׃V6xÄ è‡a°îñ³g'§çóõæéÉ©öp<Ù16¬6ÛA[‘óQ’•£4/!Á‘­ãñÍãRBþ2¢5„h%¼$b¢W_qØ…Û/bøeņÖjç¬6àúnh뮩ڪëÚ¦©Õgy­ªnw:!A~ù÷Š8Á g‘‹© ßÿþ÷“<{÷½÷~ùË_NFåµÃ+ ¸'¿ÒƒB­+‚Ðj¹Dþ÷ÿøìï óL2 §“‘ÀØÐÕét.Ò½é.Edy±Ä»ãËÔËÅféAh‡>`ˆ«ûÖB™rF Xë0ÂyQ.ú¶ë»îððPPfµNe’g)%#¨Õ >)ÇÆúÝ=„Hß÷]ןžµ]ï½·Ö(kœw#ëÝ`”áùÉéz[ ƒiÚ.Ë‹r4©Ûž i}X®7ÝзmŸfYše“Ét[m­Ñ£ÈœµÖ!u]E"¥”¬µÖÖ0J1¢¯ð¥ð2z0Ø.ÝkñŒ1ÁÄXÍ8¥„àÁ‚s:Ë2=cloçêÑáxRfi&…¬êÚÙ|" ¨¤rÎJ¶›ÊZóÆë¯ß¸vã§þL¦y–å«ÅüììÅÑáÕ;wnqFÛ¦•"­ëf÷àìlþÓÿðá0¨²ííÌþ»?üoÿúïüõu½ýÕ'¿ «Uš$øÞíkœ3ÊÀ°í;¼ Ö'ÒÔ€(†„lêÊxoµ¥Lš®Ý™Ì)ó‹éd²7›aˆœµy–qÆ´Ò"‚PpQo+Á¹u^k{~±¨ªZ)å@0Ö´}§úàŒ±ëͦªk‘‡0/Ëb4iºÖ‚pçîý~P‹¹1¾i:mm]w x­‚å,îË2.™à¢(³2/’DdiŠò¸àsc ³Æ` ˜v]W¹ê‡,M„‡G‡uÝt­J™%Ézµ8=}qxõJ"‚¨È‹õj#“ôí·ßù÷ÿþóù¼ëZJøßþ;ç·¾ûÁÁÍã¯NŸŸo–ëfC9Ëò÷›ïQΔÖ]ß#ŠB„í]’§BÂ`ÍÅrìû!K2Œq[ׇW³$=?;»}㘠@E1êºBˆ>@꺈 D¥ggZ¾C IDATçÁ~ BÆ™¶ïŒÕ#ˆ õîüâQZ%Éõë7Ò"qrF™À„žœžnÖÕt:%Œc6ë­³&’œÙ+.{ü¤3Æ”c”1Î9„`㬂QA0Ž^þxêÄe»d:Äó6îKD€sFöÞCâƒÏ:‡LӔȣ„y–„“4ó„à)!cï¼1æ+¥¤à!BPS7Á{ÎøááÑÙéÙlgœçÙO~ü£ùÅcìwÞ]­V”²Õjsóæñ[o½ýö;oÿùŸÿù‹ó³ÿð³v®]ÿƒ¿÷tzôàÑgëÅtwzv~‚wg¹uŽqÆA[o×&8aŒg‰a¹^GBð(©·ÞYãÚád\¹:™Î®_¿ !üꫯº¾G˜øà ¡ƒŠQ½Œ†h*v.MSÆ™RJkµ\.ç/uXJÉ8!Xã)‡aÀGe¥½Ê›q—. ï½sá—àè±G!&˜3Vùl2±õYš·Ý „Ìóìüâܺ@ÇÎY„ÒƒеÍ|±øÉü_ÿ£4*ÇÿìŸþŸ‰ÿùöŸ>yòøÏþìO)eå·ÿê|¾àœ+ež=}z|çxgw÷ýßþ—ƒ£Ã/_œ¸à1%Æ»®ïF„QÄ„Ї`ƒ!”YYoª®ïŽ®\=ØÛ;;=Ý,W×ŽŽ‚uI) hg·Û­ sÚõƒÒŠËt<š0)Ú¶[o7ÚŒ‘ñÞ0ÄB !DËõ!TŽÇ÷îÝ›íì´m»Ùl×ë5y_‰‘ü‚8££2ÇÙWyã!¥´®+JiQ–eY2F½÷¡DȡהИï‰1ŽËvYúÇ 2ffsΓTRö2åëëwgdìîîÎ&Ó8«I„(‹Br1žL8Κ¦n†^Yï1!„¾0ÆRÈBðŽRÚ6MYŽîݽ§ÔðìÙ“{÷îq!¾øâ B¨”âõ×_—iÖµM–çišdyöÙgŸ|öø±ãb¾Yw^=|öä/õ‘4Idžeø7!Ö{€Oe@`SU„RBi€ x ôÎ{R™3L ÆWööÁ·› †ÁSm·F ZBˆñ~†ºi!‚#¥L2A3Ö5mß´6Š1ðÞqÎ’DŒ}m×§Y±³»;›Í–ËåÇÜ4m$VzïCðAŒ0%X ‘eY–¥FéA+ø »N(I’Ä9›$I–gBˆxƒ1Bµ²Rˆ˜= _Ñnþ*úŒ^¦&`Œ§Œ³aè•Ñ„R!%€0Š‚¡eQ–EÉ9A8™Le” ˆqAÈdÐÊ:×u}@k#„ˆø—èà1FÏ/æo½ùÖ7þôO¿?>øà/^<üä«Õzóï~7Ͳ‹‹‹$K¶UE%3Fý«ý¯‹ƒ¡ïçõöl1_..&³1‚pog¿qçš >@¤‚gûa`œ#Œ£'ÝYç .e¦¢ñhäŒn7UÂùf¹^/—RJÆx¯U߯ZD°L’®ïe&…LµÑM×kcÌôv»‘RB„œ×Œ1)!"$“”·ÔéééÇ­uBˆªÚ£!DŒ1Æ)¡˜QÎq:¾Þm4ñ¾ K'¤,‹˜¨ç!¼QzèU"e4a…†aˆ{÷ëAY±¢b‚ mÛXgãyß*¡²(ê¦1ÆäIÊ õÖ!"…¸/‹¢èÚθÐ4-¥,€1ŽND¥”QzzvV–Å»ï¼÷àÁ'§§§ßüæ2IøÃõC8<<¬›f4 ºÛ¿²÷î»oþèñ¯>þ4 f½3ªORùö[oˆwË1¾veä¡”@‚‚u×0Å"mQÆ; â„éÁñd³\ž>{‘'Éh”Cf³ŒÈÙù¹Ò† ‘æ%İi›,/0¥U]+e…L¥Êè^õYžQ„Õ!Š1‚!\ŽÇJU½%C€ú¾wÎÖu31”É‹ „ªÍ¡XüÎyžç˜à¾ïãÓ>¼|ª;km7ôCßWÛF W"zÍãƒòÙ^¥–DÈqÛµZ„ˆI@hPÚ:0ñ.¬×›¶iû¶Ûn¶Î:Á%¡•ÊØ®ë1¡MÓZ¼EQÚXç¼s”RJ°µ–3^U•ÑúÍ·ÞOÆ?þÉOÊÑèõ7_ÿÿ¾÷=Ñb1ÿöo—Kæqòl±^ IŸ??ýåÏ>ÎY†!ìëz6ß¹ysuvqòì¾~uÂiŠ)wCð!9e:ÀKeš‰ìƵ›‡Ö˜åÅ9Fà`wgR”{;»Yžõ}ÿìä„K™äe|Û4mÓxú®oš†P–å™5f±XÌv¦eYPLô„„ €b½‹×ž÷¾ÚÖmÛJ)…ãш1F(Ž;c·ë ¥b+鱦ªª‹‹ó`Œišz»ÝÖm£úÁ—ÈÄ~í+MÓ´{ùœÖ'çœs^i€· }ÑÔÛ |8;99;9§GW¯Zç˜àm×8ïe’PÆ1_Öƒ`­œ3Æg}ßÃh3Öz2™¼ûøÕ/Ÿ=þÆoüæ7¿ÞÔÕ'>yýÍ7®]?"œ`Šò"Ý;ØÿwÿéÿüÏüàFIÚÕ pÖjqz¾>_à7ï_K³”JîƒZA„•ÑÓÙt¶3Û‘B`„åE>šN¦©ëÅ‚#|çøXr¦•âŒk£µ6Ý0L¦3ç}¯õf»5ÖôJõà ”´2ÖÙ+ûŒ±à<„!*0½s£N©®Øn·ëõ B°¿·[yžg”ŠÅ8êó!À¦i½÷öU²¼sNíœëº!ä¼ïû¾ëZ¥”2ÚhM ‹i¬PBïïÑËšèr1Aˆ°µNiãœw!Xãœq Qßô(À;·ï]=êÚÎ[Õ5Æ„q1™Ì¬sƒÒUÝp)½wY’õ}OÑF{(!€ªªÞzçmŒñG}tõè(ËóG­6+‘&wïßµÞj«œ7'§'Wv¾÷GÿïÓ'&¢H(“Œ­æ IØîxŠßyý6ã2ÐÊXßö=ç\ güê•+û;»!§tpN`þð³Ïç§gÂ;·Ž§³éÅÙ…µþb±èzM…`‚GÓÅzÕ5ÒšRæ¬Ã˜H™`U?‚g³¥DkÕt5€2b†ÁzÏ„$”nÖUßwYZ\½z¥,F«ÕRÊ8"A€µF¥u¶‹ÖÑW¹jÎùhTbŒ»¾ëû!,LjĦÁ8æŠÆFLtíÚWYŸ/»£¯zâ˜`Œ±^)eœ;Ok-8¯ª-°>MåÎtzóÆQY¬×+‘&Ûª .£‹¢TJµ5‚ñà<çl±˜ÇF€0I áéÙ‹7_óþk÷?üðýýýo|óƒŸÿâuÓnëúýo~ÀcL&yqr~vëÚߺŸüÙ‹²ØÝÝ™îÎNž?÷ÆX­ñ;wï ‘ÊñÕf; *Ïr†©7ZP:?=K8‡Î çàp€Øûø€Ð9[ÕΙ÷#È­«šS!`o×*‘øðÊ•[·ŽR2KªªN¤ô΃¾}ûv‘຦¶Ö:ï“$­»V$òüb1›M¬î¶›%á÷ÿoýô§?ÛVõ_ýkMi»Xoñ«ù›ŒgÙh–v=>éz÷»¿ó»ÿüÿ¨÷æwÞ<>¾ùèá—Zw³q‰¯N¦ƒR!„ ¡TrA1^¯×‹³ó`p63LP8 ƒ½Ý®m«z+Dê½o{ ì‹)-жmBy’¨~Î3Ê)%ç” à\€žR‚ßl6q˜Î˜ÜÛÛgRB€š®1Æß¿ÿšwîâb^m·]×gI $9ë­6Á‚1%¤êÚ˜›_rqÌT–e</gLÀWÂmrÙEiÄÅNi¬T_jΜóÞRJcjÓÆlZw¼5J0>™d·oݺq󺢪«®ëŒ5€$I †i’Fð›6jµÚ8ïún@õJUU…)µZ3 ¥g§ç»{{÷î½öƒþàððz`¾X?züUשmÓΛ“³‹O>ùììüâ÷~ïw?þì“ÓÅÙí»·Š"CŒ«f‹Æ…÷"¼ï†¾nêÈ-—ã!„=€9ãŽo¯Vëõf³³³ç½_o*ʘRƒ6ÊjNI’ŒŠ¢o;­c$‘½÷Újg­>•ÉþÞ^Y”Áx­ï·¾íº$ËæË¥±¶,˶궉|Àõz!’’;ç$c‚ñ(;“R0N„àƒê‡¡c”XgÏÎNÂB cÌ9_×Låt2õÁC·Ûí|>ŸL&û{{Ë#_Îù¼óý0ï(c—s¾Ød‰#¤¾ïû¾O…Ëæg,)c©G»ñbl楚û•¦Ûà)9ãÎûà=~•ÇG –I’¦i]WÎûÅ|®î‡!NÓ¡FÇ炈 Œ»vX¯W„R Ak=íômK0ÁSÆê¦»{÷5™&ÿãÿð?½õÖ[ûûû?®¶•ŒIµÞ „ú¶}øäñh§œíî\?¾Ìò¤í>¾²cœ!)¦“ÉÞî.ðÁZ«•Þ¬ÖMÕm(¡ñr[o·ÕS¦´Ùl«@?tÚ¨Åü‚"#}Íû~F9¦[« ]×ó,{ðé„Á$¸¤BX)]ŽKŒqUWÎy–ei’¬V«él !)E"}j”5ABiœùÅÈQ¥T,O"38n,km\Ñ0zùKÐË#÷ò]ñê3áò<+Ëœl¬î{åÉËñÞÿáþ7ò'ßçŒ_¿ö#ÆtÏ( Ú„Éh#9_‹ÅÞtGµ\/3ø›oß’cB VÛ¶ë"yV\½rd´©«z½ZËIš'"•Xk½ ¾ïˆIÓ6”ŒP–&κ,Ig³©”6}ÛVŒÑÎlŒ”R\¿qM+=.ÇŒ2.$cœbf­Ý¬6ƒвäŒE K×u§§§çÎ{@Û¶ÖYB)Â(F´A„„”ñ.¼„EÑ~ÆADŒ\‹Ëv¹<—mëËvLüóhZÆ/Óˆ‚÷ZNL'㪪|ð½Rý Û®_¯¶A£uÞh›çY–¤JõFéݽ]Â0¨®(ãY–[çVëMÁXœkÚÖ[—¥YP[[7mÛ¶ã£Ã£ïÿOïÞ½Ç{øå#FYžæ3‚IÓ¶¾ü¬Z«uUU›õêääH8ÅïÞ?vÎù&œq‚ %ÔX‹šÏj0Îú&xkZÂI? MßÇkïýz½ñÎsÆ)uߎÊbw6ݬ–‹ù¹ :Ë’ñxtëÖ-!9clwgw±œŸœœ´m+…Ä„yçµ6Z.xp~4Elk, ãJTÛ­÷^Jw'¦”` 16Î^™ñ]wjDÿ9ç¾.¼ˆÿêòؼ”BÅÍ¿±ÖAâ‚`„` TMhšv±ZF)¥@çœVv¶3!0D7®ß0J-— ÀÕ+Wû®GÂãɘ3þôéÓ$Í D/gÂ!4mKŽB¬ªªööönߺÝuíG?û¹`â‹Ï¾(òâêÁÑîÎn"¥uîÁ/~æl›6“™ê{UÕe^¨¶Ãßzçµår9*F‚q‚ɶª"ùìâ쀧ùÎlF<¿x‘–9DX#„ìµ\/ÇåÈhmŒŒËo­–‚[k®îß¹sûðèjŒ…”úøãß<~ô¸®ê/>BÝfù“'OgÓ™Èx@éWìåHæBçÚ˜ùbqzvV·÷>@pIüWÝK‹½÷—!#þUL^´Ø'/uº0þL|ÎÇ¿~-ò‰RB0F3AÅÎùÅb1hÅŽ ¢”cB@õ OƓѨ<qB0ÞÙÛqÖ5m‡N³¢ªª,Ï÷®œžSF•VÖ™éx†¡(ÊHíÚöùóç÷_»ÿï|÷ßþ›ûôé³Q9NDâ]¸²e2žŠD~ñâ9&„"b¬£„¸^áÈr½ŽŸÙa¬õº &V!’Ñh Øn·ýÖ`ôUW#Ê "¸îj­õ(Ï®\Ùçé~Ø®V¡Dò2ËÓ4­«æW¿þåéé)Ƙ2FÊ¡×Bˆà}üýà¬ñÃm]¯×/ÉI’Äy¥4 ì•ÑÎ;‚ x£™ã&‹CÄøcñ*Š-·ðŠð/§Ë^ö׋Ïx)Ư¸‰„ c;&(&„ Ž(qÁëAc"<>Øœ‡çû¾ßn·Y–ŒÂCF0EØ[cŒY,×n\åÅbN¹t®×kïBDkK‹ÅTÓ4Ïž=;>>¾qãÆ‡þüý÷¾¹^×£b¬•óœ.ü„bDm°Ú ‰†!e¬¶^;ßöp€@`'‰È²¤WÃ0tuÓO ÷›jË%Œ!HD* cšª‚íììLÆãÍ|ž Ër\”„ b:žÏÏ?ýôÓùüb2žÆ¨œˆŽRzïÕ û¶ÅçkD"ƒsVkÐå¹çœãRXk³Ö;ç¶hÁK!ZäÞÇ¢&öh!±söJñ_õ¯Ýå\âÒ“öõ:½L‚†6 ,%œé†A+£ŒN’,þWB†xh“—)/•Ti*’,Ô{çóù0 §çg…”Äõ¦â\`Š­cAÊØf»ýü‹/Þ{ÿýoÿöwúó¿\nÖÒà Õ³§§ò™V€AJ0#8H-Î9à,¾ytPm+Lˆ @!¥R†º¾ŒÂA€@€À8ÔZÇšø ¹ÜÝ™O^<ŸŒF£,ͳÔs~±øÍÇ¿¹¸˜ß¸qãÍ·ÞBZëÊr„0VJƒ†A1Æ%R&ý0m^j6C°Îµm«”‚ø•0 „¯÷SBuUÇ+0²~ã¯Õ9‘¯—W`| Æ5JãùyùðKË¢Ëâ6@‡ÎËŒ§)œ ÐÖ!€Á8=hBÊ“TÈ,MGE‘$œSB(#q/SB £”¬V+BèîÞÞ¶ªÞ{m,c "j­“2‰Yј¸··÷­okµÚ|ñù—W¯={~²Xm>úè×ÚZç)!‚ FŬ±Fk|ýê^Ó¶œq¡Äz‡Œõz]WƒD“,õÈñQÊ™¦)h[ÕmS{ç1A‰@Õ÷Q‡¸^.NNNÎÏÏ«ºM³üþý×ßxýM ÉÉ‹¢{wïkeúa°ÖyçEôh3ÚvmÛv£—•1Ã0 ZE=§á¥ô€"K0vÖÆ{«ïûøŒÐé4McsÙ¹ŽKWôrfôu5i_ÊÀsz,™È¡ÀrÞ[çDÎ:àƒÕ”‰4KÒ2+Fe‘§RHŽ0 xŒµÎBi? óùáÑ5BIÝ4}ß!„œ bcc´ëZL1¼jjÂý×_Ç?ýéÏF“ÙÉéü“O>}øÕÂÒ|´OhŠ1Á˜P‚„Ñ7HdšMBO&N‚°6ªÞlÓ"§ºfE Ø®jì=ÆØo¼!}‰ O.Î.LßïÏv–«ùéÓçFׯß|íÍ÷dš „¬Õ˜Ù^@ÿW_Ú\ו]·Ï>ãÞ<H‘”Ô’¨Ýî–¥–’T—c§œrÙ‰Sþ ©Tªò·Rñ‡äC~Algp»m·Û›¢š%‚$€¼áÎg·ÂJÞg  xûÜ{ö^kíµÈ5$ ÃÐ…†AwMCèµ»¹µV(Å9ïÇÁ9×öݵ§¨RY–¥/PZN*F!䯉4½?“õoš÷“D?•*už7"ÄÿBkíõìH1€7Á­½÷”rãL c!0 >„‚ Aι‘Â…$„pN«ªêGýåÓ§M]ï/ö®®61FƸ ‰B°Ö;ç(ãJ©º®Ÿ~vzúàÝw¯6M^L?ûåo& ×Á>FŒ`"P œ¾ÿî;J©i9‡>ø@Žfäœ{oµR©jZ†š±%’Qű ¬&ÈД`ôau~±]¯—ívWdùb1ë;Þxý-­ý7ßœ¾|q–ú½ÍnûÍ7Ïi]7£`臡µ¦Œ‡ÈB¯‰VB^ys !8ç€$Íê™RF›4oäyž*‘|õoðÏ›·å·Ý¾]Â›îæšÚuNkM™ ‚pÅBë\ˆà­sÖŠTr`A¹`Œ!g'Œ!ÄÈ8ŸÎæÉKi2mwu? Y–/‹ºi!ÆÓ0¼u”3Æ0íGÚè½ýýû¯¿Èÿæ§÷ɧÿüþßùÝßýW¿xºÙ¹@ãâZ‡n÷6’ÀŒÁ‡¶ïÎÎΠĢ̋" ÁYk<ã@b@2Ϋ镨mƒˆ‹ésÖ4ÚïH f‚s”&øƒ·ß ÎD/ÎϺ^;çÁ‹Ëõju^7[!%Ò:‘2ݧ3N)—uÛp)sÝ0çÑTxÉ…õÆ™18Å$”ïô8’¼¸YNZ®ë`»Ý&»þCqƒ\ !#}nêê½ÁYƒÁZë¬æœsJˆ ‚ñÀ{Ï^÷N@À"Ò$0@0ÁÖ«óbŒÈ"¥ÔoǾiwm³Q‚­VgûQ0>Ž "#"¥$ËÊÝn7Ž:W%ø7?ùëï÷Þy»mv_}ùÅ÷ðÑ?þøýï¿ù¯ÿíÏŠ²TR"õfpšª’*A_¿wëðpÿÅóÓ¯ž|A)É$3%)èl: ^롟O'»ÕúÁïˆçßœž=}¶zþ ÚõC0öÝ·Þ::<(ŠâîÝ»/ÏÏŸ½xÑãv×¶]§i»®i»@bV”RåÛ¦½Úl‘ mýèr®½„jg­›¶ÎçMךf—–f÷æ3g §TIÖl7Áh!€(ÅÃÐwMSCïN'„€³&‰Þ¢³&mQ·ÃP·­5†1.3ÉGÁ™ ˆàƒ3 B.y.90ZMì/ǫ̈ƒ‚ñíz'(#¯õÞ#b¤8¿ÞnD&˪*'Õ|oOSN+d4Æà½ Á }|xïÁƒ¾m1眆è¢àcŒHˆâ|0ÝP¯ëýý7ï¿^owW«•ÊÈv]ÿäÇÿxtp÷òê2Ërãv6P¬æúÚíƒü8 ežWe¥¤èšæà`ÿðp9© !Xp– TEùòùKgܳ§_?{úõ‹g/7—í|’ß{íµ×ïÝ?:<ÈŠìà`I6mK[o6ˆ¼iÚ”¿É·ÆiçÒj:mÚ.…6E ˆÔZÚ®'Œ¦¨â®m"E2NË"cŒ ]Ã(æRç!Ð5í¨¯QÍD&´öfÈ»ÑØ§³Gm\Œq!8Küšs–$ !”¦ÖÐc,s©dðÑY—©¬P%ŒsÞ4mð>"¥HЇàC)¤RfŠrb !ôCÛ´5"qÖi=ΦóÙlÖw]p¹½3Þ±5„SÆ‘Ary±ú—¿ó»‚Ñ¿ø‹?/2µº8ûÍã§Û³q¯Ú÷Fƒ³$N™`b·]3kíjµòÖ.—V›èíl6›Íf)–hÐc9óÞŸŸŸŸŸ¯8çoÜ»¿îž={v|xüñ‡‹L­V«Ï}‘r«ªúä“O¶]©êV¡IDATÛzüóÓ—ÛzàzßÎx—Ú Ji¼ŽùˆÞûþUæ«d)àƒó$Ë”R*Ëþ ªö>PÊ@[K)% ¿M3¥$´¤hJD`x±"qÞ'=àÍ–!I³<ʈ`œRD!o]GBĈõfË9Ï*‰@2©6›Mô! Œ(!‚ øÎ¤jšfZ•ˆû J‡§ïFˆ×‹;œóa²,ó.zï9çÔù›ë9]ÛɆëW¿úÕçŸþé§Ÿþçÿò§—W«]Û¬^¼,ƒsgç !‚°ik• Òúч¿•´æËåNg3ÆØt2BFBò¬˜/æˆl·«ÏÏV÷îßûôÓOô£œÜ朂ϟ?¿Ú¬CZ›7ß|óÁƒGGG˃ƒËË««ËÍÕfS×uj÷½Àcœ×u<íþÒõ=" !câ8ŽÎ:ƘR’sN‘„¬ÑRJ)Dš´1}? eßîE~–ø¿oï{†"&¦Èõèc‘3TRR$œ !¸”B )œ3)³yYtm›)•«Ü Æ»º¸¨ò’Rª„Ìe|úd™šNÊ<ËU&óˆ$ÕŒÒ÷½RYßE^†§Ó©µn³Ý1•9HÑ;bƘ²(¶õîå˳ý¿¿ÝÖ?><:ê7Íît³~yV*Uf9X¯.÷÷ç'‡‡ôÓ?ʳÌYÏ(%ŽÛºS*c‚£‡alúáÙ³ÓŸÿüüÇÿî“~Råç>úôéÞbqûÎkmÛ2䇇ëÍÆZ[UÓqÔ›ív}µùõç­qŒ±”Ï—xóÑèÉdb­-Ê’²ÛíÚ¶µÎEQä¹³Öhã¬-r•gª, F)xÏ)ãLTå„RŒ1 !ŒµeQMf³4Q„W f\nuzÇJ©bˆ)…×§>"ÄÓ!ÉßãŒS.Dˆ)tÏqÊ9z!‚Ç\åHgœ#zç¬1Rðéd²7Ÿ !ŒÑ}ßk=RJÓ*#EѶ³Þ»··Ï(¿\o„ʳ½GB u.ȳâÑ£Gïððí·ßúÛŸýT ¹œíÑѹ~ȳ,D_å­Û'þðïï}úðá»y^Œý8t=çü`¹¾Z£¾¸¸xôëÇ¿zô¸iÎ…àòþÝ×H„Íz=è1ö±G­¿úêiQIZçÅz»ùì³Ï¾zú´iºH ž¶Ú‹¢ÈË"˲ÃÃCDÌ‹Bk]×5H¥’k’ÇgYv|ë(åÑçy¼Ë²,™3¦æ;Ïsïaÿð(‰iHÏzÂ_ȫ픜–¥ínb )¥H „è5ÆÆ^•)""2Æ‘¡¶Ž1êŒ3£©ÕTœ{ë F’ð¤Ty^dÃ0¤u¸[·nåyvxx˜þ˜år©Tn´s.ù|>Ÿ-Œ·&cl ‘A œsFYŒÑXW”¥RúÛ?üøìììÉ“ß<|ÿý{·oïí-¨’»^ß~ýßÿ£?øàÃïV{¦µ­Š’RjŒÉ•JŒÞûÃ8!ÔÉÉ÷>x?“ª­·ÏŸ??;;SJã=~œeÅ›o¾YU•µöààh»Ý6][UÕr¹œLg9è1X(YNª4Õ1Æ’•Sê5$B ƒ·ýt2)Šâhyè_‘’`)MO•ó‘ “*—£iš&•-¡-7ñ>iw)=‰GtÎkbŒb€@R@BÁÇäAƒˆH‰@BˆÎ‘‡¶óÞ3Âìh1bžçã¨ã:ÆC Þ#%˜à”Ĩµ’ !îܹÓ÷ýÁÁQ]·Öz!ÔÐëÉd’ç!FØl6‹Åb±X´//HôÈõuèIt¨àÀÞÁòÑ/.Î>øà½Ï>ûEV©“ïÜ:øÎk“Çgô‹—wî=xë£ßzqþôóç_²/^XmVç—«¦iNOO»¦-2yçÎwÞ‡Šª¨wí_œ>ýêÎÉñz»ÑZSʚʥxë­·­—Ëe7ôëõz¾·¸ýÚáö½76»†Sº\.c«Õêêê*‘ëu]§î#i,Rö*Á¨µ–Œ*CÄ®ëÒ÷[U•÷>õ,‰ŠJc¸”ªïûD3%`,­+§^m &¹ï{¥r|>XŸÌ¿é+éMŒ€„<$@ÀÄaÐÞû½½¥ÕF ™«¬ÞÖÈ#G*¹ „:c g½u'·çóùv»mÛöåË—Óé´išÈnÛÔu;N'圿¸¸ØÛÛCÊ)‰„ >FL§ j­S\MÓ4Z믿þúöíÛÇÇÇÍX“ÉÉb±¸#Kyp2©5ú¿úùßþê×?§Ë½é—Ož8kƒ÷«‹ÕÞbþö[o¿ý΃ã“ÛÆXD:êñìì¼*«iYeEžeù<”Y¡T&„ Œ2míùÅyÛw]7<ùrÔš 5syµ&„¨,kÚvW×]߯./û¾¯ëZk]UU–eI§4™L$gœâl:¹sçvY‹ù¬* ÁÙz½%­uWWkclžBÈ¢(Û¾ëû>=‹éÍBG}³”NIÚ>̲,D H‘ˆ>xGà:âReŠrF"qÖ‡ %IˆS|´ÆNÊR01ö§L ‘8kõ8 Ææ³©àœ"©&ål>_ìï%mUÛôç«®ë MÓæy‰ÅLâ®Û·O¬sÖ9ï<çBi­u>ª,s>"RÆAœM'³ÙäÁƒwþþ³Ÿ=~ö¨ZîýôgFC)•ËãÛû ½ur°·Xüà?xÿÝ÷&Õd>KÁÇqÜl6OŸ>}þòÅnWïÚÚ;wxtPù0 ÚÚ‹‹•õNeJfÙ õêêò›gÏ../­÷Éæûâòj½Ùz(c»ºþÍ“'_>ù2ÉÅWÛC1Æq›¦†Áêa1ŸJ)ÓKæZõ àœK“@ú­„G'jðù‹]×¥î<˲´of­IäÍv²¸àœ§Å=ÐoÙ˜„à !–€H“ê?øà½£„¤€Jkmôé­K ‰.«lŒ!ˆBÊñêê*ƨµñ>†)emÛJ)s ùK^ËJ)*Xr ó! bŒB¤”v]B ‡±«wÛõæ*B|ó­{žþúÿøËùìv°üþÿs¹:ÿOÿñ÷—³ƒô_Á(%Ï2i­½¸\Àd2a‚ëz‡ˆe1©ªIY–œS`¨›ºm²¢@!#¥»æ ‹é4ö=bc0ƒišæðèXH©­€ÙbÎ9_¯×ÛzWæEú~Çq ÎA)õ÷é“/•à‡¤.‹HÆq\Ì÷©+„`L@òBKÞ ‘D¤yžßl*%š) úøŠ)$ß*pò…!„!øè #Œ’˜Ìh0Bh…ÇB½ $Œœ³,“ˆ õpÍQ»hLH½ƒq4ÖøÑ›º®Ë*WJÄÓçÏŽŽf‹ÒµPÂ3ÖG¤åtB(Êœ+¾Û\é¯4çôÿí¿?¿zú§úß—â;Š¿þë¿’ÿðÉÇôää`³¾Ün¶}×ãX•å|6‹¯2ù ¨*ιqú¡¿X]"cÖ9@bœkû>/Š¢*)Ö; „ aChûnèôb±PJ%aDÓ6ÖØªªäaŒIûvˆè­Í”Ü_,ޤ’ÎyÆXYBJk\Û¶]ߥ'2ÝyƘv&D;52©…IéM…n4†×3þ«yã¦ö×~lˆ7%1†RH€Hâ?Ý©éÙ½>"!¤N;óù¼zëÝ8jÎdŒd·«½‹øŠ¾îû¾ë:‚à\£M¾( kív[Ç©s>5ÅmÛJIguz}µúîÃ÷^»}ë÷è&¾#¦ÖÏŸþæOþèË\ÐÅ¢ðÎy¾¿·˜M§‡‡KJÈùùYÛ6ZT°ÅÞ‘ ð«w»ºéúþää$+Jmíåz½Ùmoß½Ûk}¶:?¿¼ UžkcÖ›µ’9ãüòêêôùó¾ëBŒ³¼(ö•rë)%!ÄYK!,öæËåglè;ç]Œ`´ú¾ïúÁZ—¾ôÑXmÌn·M L¢jSËÓ÷}zK“ÿ×Á"„W‘(N)£I$¡”2BÐûà}ˆB„|HqµÎ;œ€(„Ru}ƹ2)å³ÓSëœ÷!¹ën·;Jç²ï‡a‡aˆBpB@$„h3H•ÅH´10Œ"!·~ìg”3ŠÏOO3ž÷à›'Ïû5Ù] ÷“Ÿíæÿè_dÜÒãÙòààû÷¬±]×}ùäIÓ4Y–I)…”œsBQæÎz¥dUUï¼û ¨*mmӵƻ¶ï³>FŸÔ—1 zìÇá`yÔµÝÅÅ…Öz6Îçs¨ëÒ˜µ1F%eUUeYyÁï-·nÏf3)ežåY^0ÆÒ£ñF?¼÷ÎúoÉwáFxŸ†Š„¢ÝP»ÀhRTPöêC9cŒ¥èÛ?„Ä£÷ðÊÞ$]·UYVU•,”¼:eÅ9o»VHIQÄHãõ®e,aIÌ‚§ó£’òJe ¨,Ïò2DâBŒ}Œ)¥¨T$pŠ¡k[gLJßU¬øÅϾ¡¤ÈdÖv—"Þ{ø:}÷Ýû''ÇRðÍúêôôt·Ýy>™L–ËýÄx¥¸ED2›Ï—Õd²°ìû¡iÛaCŒç«•ÊóÙb9DZë{ $˲Ýzg¬ÍòLeªïûºi\r4O\ϵÿBE1›N¢wŒQÁ9E !¦+Ú97j>k-iUÑh¥¥xCáÞ˜\ m)MoÎT-DŒQFåé¡L“"Þ”Ry)墼†u$ã<-‚U™å9OƈBJ¥$@ 1pÁ•Êd¦¼»ÞÏî»AJ5Ž&iéçlß÷ÎYD⽟Nª¶ëªÉt¹\jãûQ#eÎ{ï|ˆI=Û´éáòêòþý×>øà·ÿáï¿–jöþÃï®v/žœþÃÛïÒ>þ`1ùâÅ“ß|ѵírÿþ½»Z«ÕEÓÖËýÅl:ú‘¨LÎóA[÷Õ7__¬¯š®ëõXÍç(x;t—뫺Û‰"—E‘-öu³m».@ y–‰”s®2N™`HB0¦7C‹$Ç׎0Fç¬3Nc|0Ƶýp¹ÞXç’ºÂ{G):kÛ¾‰1$R*Å…ˆ1ãØ&íçI*œ1Î9"ÆSýÒg­Mþ„`3’2M 1F©„L„.‰ˆDP*£„$R:Ù÷Dó*y„ îlwÛõf£²Ì:›å¹±£6&DK´ì8y6›N¥`œ±««õ|>?<ºÕ¶]ÓvŒQãœR bÞÚª,!ƪ¬./VBðöÏ~§®ÝÕz½Þ®jU †~øáwŽŽ§‡Ëã[·ò<‹ÁŸž>ãŒ,¦“ã£åþb6ô;çÌÞþa?êoNŸoëÝêꪇËÝ6›Tóƒ½ó«• $lÛ ÏØÉÝÃɤ¬ÛݦÙj32†œ Š€0B—‡ºëÆ®&Ñ* ·çwoïïO‹i–Í'Õ´,‘`;ŽëM}¹Ýu£~qv¡­ë†±ï{Á±,3ïÌz}±<8„Ù!ŒÎøè™âÚÊ(P1Æ(Aˆ!FJe!D!dDt>E‰H™ Aà‚$ÖYë,"dJxg­ÑQr!4M}¹ZQŠÁ…¨m]wýhB¤ÆÇ@â®kÚ¡1+3 !b0VwC­uŸ ^9# ä*C ·ONº¦SJh­­³H€sƒCB3¡¼sŠ)ˆ„QqöòòääÎ÷¾÷ð/üͰ)§ ‘~ôÃ1†d:­$ã«õå%¸ÞÕœ'e;ßîÖ›õE×Ô1ÂåúÊjkš¡×Þšà©Àȶmˆ@.™±C^ªå­y5U»]Óê– RÉ2—‹ F6œ`tÒlV‹ê`:›Lmo)ƒ¶M»[­ÖWu×gC,ª‰÷Þ 6}gÝ! Æ„¢±6„`¼KúàH€0 ÉòGŠLH!ÄhFítòÆP,QT¯2cBp”SÆAtÎ;œ¡µV ‘URA¢×ý ζu#„ªP¹ÀœsƆÑXT“IÒ tc—D#"ƸâœQ’ˆÒ¤¨GÛ6už—“ª†ÁCŒÞcÇ#\yœ(AFˆôèÑw¿û½ƒ“iÿU탯¦{çg[ 6`ÄÙl®dn­'„N§ó»wï/÷«é<ÉŠ™èÇn4£‹þr}Ùëa´:+2&at¶˜V“"’@9fEA(6]»i6ŽD‘)ÊÑc@FeÎEέ7.:•K"ØÁÉááñ­ùÞÂïBh‡þüêòbµjûN[= ƒõ~4&„€Hœs yʲ,íʤ ´› t"#×t`š1^Õ)h=xg‚³ÞÛÆ@!"çRr%˜D Þg¼·!Hk4é:¼‘¡¦q%é¾oM…Œ±q4Îx†\Ê Í`¬õœK$Œs)eÆ™¤ˆ¶¾tÛ¶ëõú _.—7P0K™z !"¡¨²Ì{÷ÙgŸ­V«ïÿ{‰ÌB /^lê]¤€’NÛ®+&%2d’ÎgÆ´óI’ ÁU&…È‹j"•²Î6]|«Ii­ÞÛ›¹`«In½¥”¼8)²b´nµÙ¬¶[¤¨&”K‚ñV N­µ ±,òLÉ‚už1!„L±oˆ” ¤´¤Èȵ^ÖCFQPdõ0rF•Bò†@ˆ)CÄ£Ö¦ëëEÊ¥(ŠÜY?c²Ç€HŒ U¦GÓõÃ8ê$%w!ZãBô1Ʋš0ÎCŒÕt¦áB6M›$åz4㘴XbG©8@<¿¼ü½ßû=DúË_þÊy?™Lèí£ý¤ïŸNfJeŒÉ¦iCˆ”)¡µÞÕ»v\p›®!œ¤Èi9™0)Œwƒé#‚PBHAYb|BŒ1¦mð!"AÁ;I`ˆ>zŠQ*~ïõ;>XUÈgÏŸkÚ¾‹„nêfµÝ¶ÃÈ„,¦W 9c” %ƒ÷ÃÐÅà„„€5&D¼Î¯Cð!8kµ1I¢CÀÁùkq ¥‚#1FK%3•QDJh×÷BH=j£m ÈeˆH‘FCÑG @“ô–sרZDÊ£”sJéÐvFθ#e\JH½w°û®í†qp.PšÞ”D !È,7Æ„ÄI5ɲ¬Þî!¼!0Æ ¡zòB C¿Þnç³ù‡ýöŸÿÙŸ3Á}pÿòO,bC—ñVIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_colormap_orig.png0000644000000000000000000000440512143115162022605 0ustar rootroot‰PNG  IHDRà'•Ü…tRNSv“Í8¾IDATxœí«vãHEÏxuãà&ÆCòÿßÐd°ÉàÁMØqd©÷qî­²WÒiÛ‰´½o=$•là%òóg홿2w#,?ü)?uJÝ‘y Àj}âE[yÀŠÆWlUèK6ó€M¯ØÎœ>÷YL¹TŸ@už†lw1/´ü½`+ÏØ8PºæÙ»yrÀ{ó•þæÉN…>9`oŒÀ³=/ØÉS *ô¹n…j΋¾>íûÂÎO`Xòŀ'|Dr¾ï˜’ xà0rGTüáÙÄ;FCö#3XxÏÈÇ.&ÆàW†™ì üJ&ä^`M!ÅàW²M rù:: )™†pŽƒ½B\BÜ'ΤX }ª¦ ²dëØ¯ÆÉ¶%\Èb9”.y A„,77' ƒ$È@!üåÖæäÂY™Wû©„(@~|ÿø»þk @6!¶û§jŒÕ .¥'´‹ñø„¸BðP% Œ!~•.!Ö*´ ¨>/Zë>]]c…¯è(]cX/ZqøÙx®“PpXÈ)Q´ ëO7Ò<6®é²{„õW”Óä;f ë/:¤Ã·#lTh‘иf[DXÝ6]¾GÂæªƒÂ“Æ«K•.óx‚ÿÓ×»"?ҽżê^ê°ùjˆn¶—ð jIè&ű_U»b@v×ýâ¹1DW¥å_Uèwv™% ƒÃÛ¯ÙMöº˜Âr ×5z#!\º u.B°Â©#à^eá"¬ÿ~#Jîe$NÂÚá/îu2^‡ŠX*”°(‘¢ }|+²%üŒ¥\‰µ] i­Zn•êÂYŒ—A¨Ÿ† ­6œ×!k9e8¡iŒq½h†CA…¦Û¼±±„VÌ¿á ] wIó”= uÍv¡¹BÉ‹ÒCš*”½ê~¾*eßVG(¸'è÷MÌæcH¡­†Üù2—È[{¦" ¹w)€ÐZ¡A7gv¸éFƒî>c*¯M´2Úá=a÷ÎBwƒä$„¼Eég¸lø,³¼ç^ê%ž¿ÿýfœ‚R¢çsù?cªôqºÍ<ïÿ`‚vH(Ñ=€óW&Wé}Wþ½?ä7XàÛ<˜épÓ8~Ýt,òm’åðÐNn½×`/·§9ŸKí@Ê'!„–耡°^ ›gB ‹ò6ûàì5À[ât·¸…|Q„-y·WD¶Á‡öå8»† ±@TG‹øM;5|TBÕ†í€:>¡r»q7)_ö0µïªP¿)?¡a›g+ a[Báz_ûÍ[³:ümÝ .amðИ ­x°ôö ¦ß\`ð•"ŸÐèáK&¼Œød¼\‡@Ÿ@d^,€n¾< b—z|©UªCÒ&䣧blgÕ Ãám7”Y|áï{AŸª ùb 7;¡ä4À[¢ßb ¯@îw@Hæ>5ǃ’6Ïmƒ:>vŠ[WR ý/ÖÞ[9 ½@3ð€d¾:PÛ ‚ˆ×Ûª¸Kiòˆyš(€Æ—Çkƒ’ÍåÓAHÙ³!x2@B¢ƒÐÏ7/ø3~¯ááY¦º}@ŸÀ±tºø†ãõ|#[ÞwÂÚ ÿàÊ– Qà,tèÚøøxŽÅ—M@_ˆ=;!¹ †Õ¦™°¨Ùô¬„ @%_tÇb$t•è†/¡ß´Ö5»œ3,˜«€òÍô,„5@1_ê˜n ´·Á ÌXô„@Ñž˜© Ë€’4ßÔ¯ÑË–{Šò¢â~¨Ž°˜$çr1Ǫ m0‡Ïs­TÓ€)|ÎKÁ „ӆ‡¤^è>† ¤àÉîƒùhòÄ„;ÀX>fmJ Û ¹é ãt,2Â@&ßÛíßÿ?^yÑ—ˆp Èã{{ø±ñ-_ÒØ æ¢ooo|>.¼Œ"˜´mIß ­„߀¾½½¯ #¼’øªÏø%Ú¹m°Î‚Dá E`“ á 0åiH;d–hWàžPÿÁ¶zÂ+`Vpx†!3}2±–ðŸì Rþœ†s¸taß­-­»ÝâD¨9ýÇø›¢ÃµÛ öHèƒpl¡ÉŸÀo¼´ …®H]ã éÔtX‘–ã»>èˆC 4­­×°Uhþdb…Ó¥ š/›\ó¯@ kĆ¥ s„¸JÕ%ê“w͇_ vΪ%ûCu)šzvÓ'ëMRc°)O5~“¾•ïë [_Ô(nƒÜSÓÿÃù;ýÎTpæÝ]¡²œ$ûÎèXvù›þ+é”ÂýÖ5¬$8uä]ÿíŸ×œÐ ÔÍX”ÇAI„' F¨–—|¤'Ëu<¢8§›’ä(¼ ô;#ÝŒ ï½èå~hŸ¶Œ%åì…çëÚ *;Ç;A¾Â;_‘>árJ]Ø€Ó)\µ™M!ßàd„«Dõ™Ká2hÈT C ÎD¸JÔ”‰.ƒ¶Ì£0Êà4„«D­™Eá2hÎ$  ÎA¸JÔ‘).ƒžÌ 0Öà„«D}¯ptf¸Âpƒ£ W‰º3Xá2èÏX…‡®ed¤Âe’ “ Ž#\%JÊ0…Ë +£æD¸J”—1 —Ab†(L58‚p•(5.ƒÜä+Ì6˜N¸J”l…Ë =É Ì%\%T…Ë`D2Ž1˜H¸J4&y —Á ¤)f0‹p•hX’.ƒqÉQ8Ò` áË—(ùÓH”~x‰GõË ˜Ð Ç–¨¬H]oÃË—èhƒ…¾:^ÃÓSèìˆÆv½í€MB÷@2`ƒÐ?PNX%$Læ,#Ræ9³ IÓ¸iñÈ8úž®çÉÿ5Ê×_É ¹ IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebraexpr2_01.png0000644000000000000000000000144211722777314023342 0ustar rootroot‰PNG  IHDRbe“ËijtRNSv“Í8ÛIDATh½™9¶Ã EŸ}RyE©µpê¬Èõ/ð ƒ@ø«É„}‘ô2Y6ˆ¶Ë_Gli &R:ˆY1ƒ¢#†)&ÄÅŠ ¬ö¡öÉ<Íႎø!ˆ€ønHá„8ÅÌ5¯ ‘| äDø.H,ÙŒ9  ·wºÝ¡²ëFd/’3í†1g.R N,ÁI·‘+=nêc^<¨øò¢„"¬¢’F—1žîl`§;[g¦³Æ4D›!ä"¶$¢™O}ÿ°m2£Tt±jÚѲÀŠnLH7ÝŽ‹óUz§ ~Ìm6aÆ¢«0›ü†¼ÄW»1;¨Ó¡ B•^0f§¨bµc«†nÙ‹“QuQZOžn| æ:u?¶ŒõQ)¡ MèÕ‹ƒ;ÎI-i¡ø1’åż`è*ò4é+ÒÙ”×§i©\Òî!t}Ñ„Óàuqö9íMƒÊ79\èeë~¬•>Å󾲜c3ùIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebraexpr2_08.png0000644000000000000000000033553711730653117023361 0ustar rootroot‰PNG  IHDRâûø«ßÓtRNSn¦‘ IDATxœì¼çŸ]gy.üôUw^4i$«[²Šm¹SB€@H¥’“ÀIrÞÀ/=‡œ$œR! B± Æ6¶q—,K¶Õ»4£é{f÷UŸú~xF;ü >è·µgöÞkÖºžë¾®ë¾Ÿ Àÿ=þïñÿû¼¢›Æ™ë;PÏ9cTi­5PŠ…V®ëG­Xhõ÷ÿôµvÂ=ûÔ?|á/µˆÏouºýCcqœ•ü¢‚àìÅK¿úÉO~ç¡ï"eŒºQ{©±:¿4¿oïOüÚ¯ÈN<×l61\$RdòGŸX7âùÎW¾úÕM›nàJO¬_ÿË}`×M7s.K¥Â­,/ÏoÞ4õÅ¿þü争ё¡ßþo¿uõâÅ‘¡é+WÛõÕ>×ϲŒ1 IyŽª×ë”bÏs2!±ã¾òÚÉGÿ¡„ØsV+¥b˜¦)£.ç²ÛͨëþÚo|Ê`R_miž×—>øá­¶šG_;ñðƒßÁ ¿íî{F×OíÙËáÃ/B™}àçÞc¤Z¬ÇøGzáü¥Bè‹a¥Z>zôèO¿÷}Ÿþô§Wë‹êùÊüÉïÿñ;ßûÞÁ~ÿ÷~÷·k‹5­5B!D‰ã8‚4M5€Žã´Z­v»=99ÙétÂ0ô‚ð·?ýûwßyÛ÷¾û­±±$IZí®0ðâå«a.--1Fî¸íÖ‡~˜`†>h®”B !(¥BÇe´”Rk­”bÔ3Æ µ2J)„!¤PªÔj5Œ1€s!¤”&IB)E`Œ¥”cB`Œ!„c´ÖÆ)¥1!¤”ò7ÏsûgbŒ…BcŒ}-c,Ë2û@)E ¹yÏîrÕ¹åÖ½CÃcŸùïÐß?A£¹º~ݺ¿úºô¥—^þÿãw€aâ:hÏa$•Âk¨BRj‡x†kº¹¼pû¾=¯»ã ¡Ba ¥Yã¼Û™Ž;s[79\b÷û_ýê·Ëåj§ÝUÊ`L¿ü¥¿éFõbÅe”*v\½}û†‰É¡¿úË¿év2× aÙuü$I¤”I’h­1Æ®ë:ŽcyBHI¯¾ïçy^©TÇaŒU*•ááá¾¾>BH»ÝfŒ I)áÚa²,+•JZë 0ÆB[£(bŒB,bì’ÐZÛgBZë,Ë\×eŒA=σ !!RY–åyŽr]×¾clßÜãyžÖBhD±Ë"„0ÆPJDZÔki˜RJ±ïoë‰=·ù¹eÀÒòJ’$¾ïBÆÆ(`£±Z­VŸyêGív<ϳÎ~„P)Ç)0Æ£!0$"Y¿®4Ð7¶a&îë^OšåZ*¨MÉPj¨€´ÖêLNm~é•ã;÷ì»éÀ-Y®Œ¡n·KñÉO}êc|ÂPï¹—^>qâƸV«M@[ÍŽV Ûî TC›kOÿä[ßtÇ-{~âþ{^=zèìÙ×ò<ß45å2çÚÌÌÑ£GÓ4e”j­3Á0A±Péï36Ú-i4Àäýù7Šzn.ò©ÉÉ;n¾Ù …Jó `”+‰†Gk=26zâäÑ'žùQ*Áž9ÂSKèá±~Æðððð®]»¾þõ¯ÏÏÏ»®ßéD_X­-§i¢µÈJ¾ã#ŠE}eÑh¼ar“VØ÷Š{÷î_XXªÕjyžû¾¨×ëQÅqœçy’$­VË2ÅG¹\æœ×jµF£±aÆ'Ÿ|²ÕjÕëõõë×ïß¿¿\.×j5cLž§Y–=wÆó
|ôÄɳ×8ݲóÆo?ø½Ã¯¼öØ“OmÚ²}l|Ò(1β¬¯R­–+۰ººêj¯,ƸÕj¹®[(²,[®Õjµ•V»Û£B¡°0?ûþëMš|ßÏ2Î¥ ®!lµZ*Ï6L®² :NÆ5Õd´o8KÒ‰Éu###ëǵ֋‹‹Ýn×uÝ ´R÷¼þÞ©[·lÝ504V „mÞ´Å÷ ƀ͛·!÷ï¿yúêµ (Ôjµz½^¯×- XTB …‚½µÝn×r[i „[·nµ<ÇñÅ‹/]ºT(Z­F’$˜ z½.%gŒHÉ-Ô¬$µÚ!†¡}l±(„pçÇÅ¢¥Õ€(¥öôz§aŸ´˜ek—!d™cìyž­ì„b±hdÕ[öì‡^/!¤´ŽÓ<ËÅðØhX(ìÞ½{q~Îaͳä‘G¾?7smxpÀs²¯D…a`¹ç¹ý“(¥J©,Nc;vìèt:=ôгO?S©Tš­V;êÆ<3Øq‹Õ8çP¦ˆ'úòöM““£ýßQYÛcPȵYmµ×MLž>}š0b îÄÉ›Þô¦Ë—/?ûì³6lüæ7¾å8‚¸¶\ïäz¥vsúÒì·|üøé++­da¹Q(N¼úZ¥T2Æ8”«œ´¦ãR´»D°Ô ¬Œ¶,200Ðív¥â•R±ÛjÞ{×(ždq7bͨ<_˜›©¸ï÷S׃>»ãîƒËó³"N‡†ËÕ ’Æ–à0ô …ÀuY–%oÛOØAA›nW5ëÙôå¥K¦ï¿ÿ^„Àòò"ffffjjÊ÷‚Ó§Ï`Œ …‚-è®ëú¾oq`•@µZµW[)•¦)Æxxx¸Ýn `Œ»Ý®½/J‰$)#ív›ó,ÏSŒ1DF*.„ÐZ[Q!„@%Ib•ÖÚ¾gžç–Ø,Ž­×ÉóÜ¢<Žc ë5zBH^?ì©B³,ëAÙBß®:!Džçö×,¹Z(sÎ-Ö{«Bk-¥´n¯P*mÙ¾-ŽÒååå}ûnjwš.%ÚH­e©PĨÒÈ~€õkv‰[åkŒI’„sN®V« ç»·í,UÞõö·…·¨ºt|ý¸ÆŒËÆ õÃ0ô}ÿСC£££”:QQêä\æP/¸põju` ÒW½öæûïÛ¹sûg>ó™ÕÕÕ¥¥¥v»-¸l4Z…BiöÊs¼©©Íc#ãøÀ‡â8£Ôi4Z"çÅbqݺu+KËÓÓÓö~Û{ðãë[áyÞ]wݵº¸ì2'ËS¥T§Û‚FmX?qËž›t®}æ¬ÀAmúªýöø/zñÒ¥+ÕråÀÞ}/œ¨V¤iÜ¢ÈHE©eu†m¹±ªÙ®'­5c BDÁ'qò‘|xtpèÕ£¯¾éþ{_yåÈà@ÿµ¹…‡~ðƒ¥zãÔ…Ë ¢ÆJ£ˆ…•æúM[˜_(–úZÝÈñÂÊà ¡äÅ—ŽMÏÌÇ1ß½ûÆj%¸çîÛïó[ÆÆFVWVžzê‰•Ú Ïĵ™ÙÆêêp_‰çïx£øßþõK•ð¾7¼éô‰“3s3›7Mž»{çŽÉõë««Šó4‰)%cLs©TÎ9D¨ÕîÎ][ÜtÃ0 JQ ‚,MrÁwïßwâµS­vÇ/øZkŒ)¦\(ïÝ}sšš‹³ÓùØ“n} _9üò¹‹ÓA¹ª²|dtýŸxòmoÛÁÛnîvWyÞÑ:K²xçŽÛ¶o >0y}µö‰O|ò#ýÈ|íJÔZÚ´c*õ®Ÿx[§Ó´¸g¡,åí v]·'­¬¬Þõú{^}å•M7®Öj”`©d–g˜ 8Š£Zkc”ÖZ…1D1B”R—1c40€lŒÑÚô”„ƒ1’J1ê@DÒ4§ÌÑRv»¥…ã0 S Ö!Ø“•è6ز¹•º¥UÃÖWc¬à¶¯BØ?­ÇÐVO]?<¨´›Í;·€Ž{­R©p‘`L …¢P€„â,Ëì•ò}ßÊg!4ÆP !Œ¢˜QöoÛÔÆ©ááááññ<úØw¾óàɳ§ÇÖ­¿<3·°¼úìsϽôÒ ðÝ÷Üûüá#Ÿÿü_~ÿ‘Ç÷¸U!ôÇúÇV›P62²îW~ù8ê<ÿÜ“Cƒýv'Ž£N«õõ¯üÛøÄD¤p¸ÛÛ×7pÃæ­o|Óë'×í¿éÆå……/ùË;7lÞœÆñèØÐÙS'‹¿Ûhb\J1(ŒDÀu,ËŸ|êéSç. %Ö¯—I&ÒÌó}áRmåŽÛï"?}ú²ë;F™<ã<Ëûúûû'†× >ÿâÓÃ÷ÜvÛÁ›oK…:uêì`åÚµÙÉõ“úð‡ê«KžCDž‚\¶[­À÷¶o™Ú|Ãú׿þŽM“뫵Á¡bÉwõU¥‘ÔPpµ#žÆ»vm³†ÚZ`{ï­Ÿ³Ðäœû¾o_ºtyl|ýkÇ߸sç×þík›§6v;¡åÀàÀâÂc4Ï3!&–Y‘1Â5 ‡ÔF+©ÂBH×u-™•J%»NÁR­´Ò€Rš&I³Ñ‚—ÊŒ‘õ'Z¥ckÅZ)e+•ëºVeB,•Z€Z²äœsÎBV[ëf1-„°v BhÍ–1€çÜó˜äéÄúñwÝ8smöµ×Nôõõ£•6YÎ)£e@“Rs.׿"Ï ²$¥J”ÖCÈÐçþä¶íÞqøøÑÿüîã}}}Àñ±ST€vÚÝ………ö$r%!ØñBŒQGAàq•zž“æ‘"Ôñiwiqdd„âz@Š£”‚cJÅ]ÇMÓ¤Óíî’ªd°ÕjC#Ô bÎû× ¯®Ö7nSBŒŽ ‘Û Ò^4{#cöšÛË.¥ô<ÏVÉ j¥ááácG_™˜˜àœ …•NEQš¦®ë¶Z-ûBka¬³†RB0°ÁÓÈÚí6B"h‹øZ+üzfÔ;·žÜìõE-î­D±FJ Œ±b׿ˆ„#¸»:ŽccŒsáZ|kW…mF0F Wžçž…Ð|á¯þ—õ¡¾ï7½{÷ޝ-ÄÅþÁß÷UÎ=Â&×MDíÎþ½{JE”äY£¾²yÓ¦æÊjž !¥ŽR*ð \dq”()qgggøÿþƒì+—yåyªDö©GæjÚÀ{ßp÷ìÒr=Iuºí¨ÝnV*¥»ï¾»X Ó$Ai` 2›¶n¤Ô¹té↠S®¸˜ÆQ âZGiêúîj£®¡¾´8 ÞZ½&„X˜ŸoÕífktr=f8Ë“$Izé7!ÄâÒº([ñmWJ9ŽÓívÇÇÇKKKXÁØÐÐ ‰@úXz$‚<Ï­×Z·Z-×ó¤ÒŽã0L\×m5›ˆPŒ±”\˜eÜó€RÚ†öJé ð­ãN’ÄÂÑÞô^ÞjMûØR¬…Bˆ`l1”¦)c,—B$ˆþ¸ÒZ{ž'¥¤Ûõã8Ž…²R „TJa§§¯íß¿×8555wm¾Tî·áZI»Œ1QaŒƒ àœÛL!\*ɱk(ŽãR©È¯{ÒÍ1–Ó¥ù‡ø”RžæY{ž§´ü!¢”Š»™ãßÀ$êž<þZà„Pžó àåyÇ<ŽSÆ€gžyž1lRÆ(¥Êår£ÖÜ»{ûÛßòÖÉñ±+Ó§ý€VªÅ¯|íëÿã3¿ç@|øÒ¥+ë&6¹ëv»ŽÃÍÕÛo?¨”š™™ÁÈÙ¹kÛì´¿07[-—GûΞ9ƒYš›eŠ]Fff®º÷ôžÙµû¦-Û6SƲ,K’Äót–åÅb˜$ ¥XJEU A“$qXÒív;­v³QWR´;±±¡¤µ– 3‹ªÞ@–e®çÙ¾Qš¦¶Š]ÇpŽ(Í’®RŠ1Öh4uzÒžÙ·ý¤^>jCVË£N&E IDATˆ=õl_¥”"[aiÒvüCÇQÀô&¿l›´wX*ìµX¥”s¤cm$àâ¥óÃý;vl¿í¶Û–—ÛŒ:@kLA˜Ã¬Z²³®öÌ”‘˜! ©ä†aŸúΟ¸ÿãùùÕÆ2q‚¨¾Zp(Ï•,,ô©4/8Ž”Al 0ÂÌ cê@4ÅÐ!ÔcµQ\êD¤˜:"€0sý܈œäaņ§yJ(K%€pœÈ›nº¹”¾÷àCïy×OÅq¼´R÷¿Z ÆR»mݶ!’µ:Uâ9ž“ÊK ´!„@£´àÜ¡L+… ”B8ŒB´RÐ ІQª”ˆh#Ö\dFå·Þz󱣇?ðþ&1œ™ž¬ BŒ6´Óï¶îØ µTFQâð$+–Š"Ï?õŸPZ¾îõ¯û•~íÍoz}ke%Íù[6­{î:Øm7Á…à®ëB´Ök±ƒÓ\r£‚˜’$‚ˆRÆ52g - 5Ï šg$uÈ‚¼›Ô'c ²n¼ru&˲ƒ·îŸ¾veïÞ½Ó3óò§ÿka©qò̹Sg/_¼:{þâ5/¨þç7:qü­7ß‘§p©4Ú%Ô'L ©Œ*­ ŒÒj¥‚1fŽÓh·Þü¶·½|òìwßýÜó/tâ¸RíSB~ë?¿õ̳Ï×+èÑÑá£ÇŽ<ýôSýÕ ×ŸeÙÊÊj»ÞZXX\ZZfÌé´;gÏœãYAŒq’í¹iÏò›vì2JåY4R ©ó\æjˆ©ëq ¸20æ²Vœ¬ß°áÑG½÷¾7{ùåáááÅùFiÆE·Û¡”"µÖÆhc 0šK‰²]"›I)µRàzcB¨~lÖ®7Ä„1æBXrµwßrgodÂq+ÖÄ.„®ëZêívJצô9ç®…£½1(‹~{’úú”ª•c”‚9L ®¥Ú±cÛÑ—_~׻߳aÓöÓgή®®„~˜eÙÍ"X‹gõ„”’@¤ÐZ‡¥<Ï)JŸùô[ª5÷zéæÛï¾ë÷k©¦¯^Ú81±qkøü‹/äy.¤Då9—™*%A¢µBQJ!Â\I)†KÁ9ÀaY}†ÏyůDQ"!‚@)áú!ÀþÉ“§^>vd|r0|nz&QôèéK¾ó<ÚüàðáSå°µk‰€ š<Ë A€V«E!K…K³3¦6æÊˆœGQ”¦)s]«Ö]'\­·çk»÷Ý|ùÊÕ­oÙYov[N®x–eÇ_9Æc=úýïÙN`¥¿/OR)¥Òõ½4Š…ÕJYäÒ ´‘‚ .Äï~Ç;¿ño4ë+n÷½barSÀÄIÊ<'˲\'(¶Ûí¬¯¬\¥Ì™^XxõÔéu6pa¤Ô­z“b¦ä A‹B¨•j@(`€âÂH J§ÝÈáÍdBhkw/ µ>ÄNÄ[PA`YÆJäÞóy=/®;[i‘mÌZbÕëŽÚpSˆ¼7¡Ò[3Ö°I)£ãê@·õõæBmß½çóùWO<öø¿å_'ÆÆIÏ—qÎ{Á„Ðq¢8Žß [íF__ßàÈðÂRÃ÷i±Xl5ê}•êØðð#||lhuþò-ö=s!M9ó©ã:yœC;.Ë…°é5!: #¢€áB*i€ËÂ0„yN\·Óé`Œ¤Ö! –—VËå2€8¬øRkâ8îjÚŒÖoÜpuúÌ_ÿïÿý[Ÿþut³%¹*”R¾ ]ZöB%¤f¡Qéyú¥çÞtƒ_¶ Òõ˜Õɲ ã8¸~釆†¦§§1õzýþûï?qâÄÉ“'ŸþÑ —’ç¸éû> ÝiB\d2—Z±æy¹Údz `ä9¾Zä9qˆ”’â‡Åýû÷?÷ÜsKKKÍ$‚ž7·´l žž¹Voµ»QÇéòâÒÒÒÒþýû/_¾866&„È9ÿæw¾ !äJÚss]7êDýýýAXyfPˆ &ÇÕZ[+l·s„…FHd¢çf õé×güî÷Úô6‘´Ñ¦²öw,IÛ°Éö#zÞ«P(Hù_6ËÎX|[÷ÌÕÊyžA`ŒÒÀ`ÂÆÆÖµ:Ñ@ÿðg?÷¯»ïÿè/ýÌûaãÔÔñc¯`€ç»I’ØSÌóÜ&ÆA)84€ èX^YÚ»o³^GÀüÂ/üüìüâɳ¢$>{ò”Qùâò*—Yå(‚D) ¤d9.C¥)§¾+„¦žûÁ_ú¸×X#± εJ%)TãœË,KòB(5ð‹ÿç •¾>c”1F*Îã^íï¿û÷œ=wúÄ©ãÿ5zbÓ+™9ç»ö1Å$Šòýúß>|ä_ÿùË6LžÏS±¸Ò €2+í6su$$MsÁ%ÀBŒ¢s”ÑJ)„0C”¹cÛÎÉõëKß÷Ëå²ã8i’'yV*•ŒTïÎ\½æ>×&g¨Z µÖ3gV^=óêØðH»wL¬òä#û…™«gž{ò©Û¼¡¶¼ü¹ßù\*yßÐðøØz?MJ¥Õaí¥Z1 qÎ=ÇSv9H ! žã¤iªÐZy>‘$I222²wÏMÝfcbthl|Ü`¶~ã¶ÏóÚíöàà Æ¸ÓéÜÿ[ôô3{àë×M ö÷û¾âµãåryûîïûÅ_´£<\ɰtíöÛ‡æ—.Ÿ»tîÕ׿ƒ0mÖW´r(ì˳¬âúF‰]Û¶lO¢¶ï»Yž@£ÂYn0ÛìíÕc/~ž‹¬Ûí8Ž›KÐ×W™Ÿ›s}Gé5Ý©…ÔBìþ8Î3a±¶ÛkêPk¦)‚ÐÔÚvp}«Sšeà:ÑÚYíKBäR9Žãy^Ò’$'"„’$ ‚ Žc×u{o¥µèþ6(°Û°~¦v*…R FÙßIÓ  朠 q>|¨\©nذÞ}§7®k!kŒÑJ:aLãn¶gç®ßüÔ¯ÏÍN_ºpæôéÓWf—ZÝ.¡N.s4—9u`lf¡1ÆR­E»Èl€‰£dphèç~îçnܱ}¸èޝs˜‡)M2žç!B(íî4šN!{ÿ›ÞüîŸÿ¹¯|å_6ú“ïz×O&\øAáȱ£+Ëóa±°Øl®;±qêÚ¥K¾ë$IDñ±²¬×h¡”Œ$ƒØ£q–JhRžž¼pvOÿ-íf{ÓÄö[Þ588xáÂ…uëÖ­¬¬œ¿põµãgF*ÅkçÏÈ4/……¢ç¯:ÐO6O¥qä9!¤Ùl …$I°?ò¼S …‚‚3gb}ÿä†ÍÝnw¥Þزc—Ñ¢¶´Ði×gg@×fçN]1tÿÛß|yöê¾[@£’´Ûjwwlßtïî:uî<צ“%µV÷éGýø‡>Ä“È |€ j1Bä‚cŒ©Ã¢,%ah´\œ›mÖVãf{玳WfŠN±¹T_¯•J¥b±xþÄYŒñpe°´!t©ô(ë®6©FH@ ¸#u¨DÚìz¾ï88dH¯Ñl¾é®ƒ¹ïGQ”Æ¥ôü¥ËgÏœët¢(‰ï{Ë}\¤‹s³Ο½võJ_¥?î&`ÏeBäår‘yn§Ó2¢ë»–]×å\æyĈâëÇZluo¸ÄÞMûo£Ñò}ÏêNBˆÝjç’4ïÁÔRÕ¬!s]ºwïþ«3³cÇeRæB£×öñÙ9=@–e”R;%m‰ÏªRs}ÂÚ/;7¸6. ‚P+mŒ±_ºÓSº6è90 ÐFÙŸÙÑzI­ˆÇ0¡Av:]/ð ÔýÕCGެ4bˆP.sŒa%»vî,û¢v$D @Û|nmF\„1Á$ÏsB(cL*](6oÚÄM’²´´Ì\—9nšåßä‘‚ï÷®‡0œÚ<õÂóÏæÝäÙ®›žxê…‘ñ‰$OºÝ•Ûo;úÞðð°bŒ9,KS×eý}•<φk«5V*~ñÿüíÈȺf»S©öaŒ 0áœK¡”6@*M‹âĨ!p\äb P¾ç®»ïºíŸz£ý£7Þ° ˬ챑¾rÁï¬.{8P3#£Ö²Ib¢Ã¨–>Å!#BT£ýU§#C õJ}•ôU²œ¿xøðSOý襗Ž\žÎ³<ÍÒkó³—.^*‡NmÚÔ?8X(ÇÖyí´[žïeiB(­¡Z+!Â"ì#‚1!‚sÛI÷}#¥„v4MÑŒ9=>²ih’$}ÝäXc„Zûâ ×’4I3„‰ÊhžÄ±ãPcPo®tm»¥išªë_Èc)Ör¡1†1Ç>oå¥RÇs•VZi!†k˜¶¤›sn·'X2&àz_ \Oní4À0IS#€2(ò<¿íàÍRf‹‹Ë\hB!¥TH„n'Š'Öm,*ݨ¥µŒ¢¨ÝnJ)!²YÚ‹´`«R¥R ðZ­jeV³Ñˆ•ÒYÝqëMEâG­v¹Tí I§¾¸aÝ诚¾|e×öçgçcÞ#Ìy÷O½çÊ¥™v|' CJ±Ò‚ó BÝn·=Ïÿé÷ýü­ûnÙ»ç@}~–Ð`eyvlt„8`Ü» ÌóC?¨V«ÕÆôÕkI£–*ãCëÒ(­UC¥”1 ÉdÛh¿­nÔa]Vt)cj))-E;ê•×+A¡d–çnàw¢nqÝóÎ;G1ûàßO1©+œóË—¯~çÛßÀÄhƒ»æüÜb_¹Úß×ç9ŽÈsɨÒRÆ9$˜ ,÷]‡R*„ʲ,ðC”2MSÏqmÜ“¦)ÆÈÎD#„¤ÔvãõuĬmÿ°:ÁîÚPZ¡ëCû–dl')Ïóñ‰žçœ<ÞÑ ³F·¶gRj¿äÇ2eëÞ·ñH¹öEvf I’0 ¹’`m³ëZà¯ËkÛèvËéå·ÖÝcx¢X€…R¡0Ì7Þxãçÿü«¥òÂò‚@J^­V’$é Ëå8•ÕaÇqâ$bµZž§Bˆ4%ÏTIœ»å¹Àgi¶´´4>>^.–¥”b-ôé“g–&7NíÛ»wth°@Ý4ð½RáÃþà~ñgßóŽwn{äáB1ØR=yù2!DÝîÆ«ív£Ó]Z®o½ãö8jû¾›ç)fTÄÉ¡C‡Æ6o?rä•Wž^]XúÙw¿‹R:9±A‰ D¯ÀaŒ‡GG•RQ7W–³zWeÐjÖʼÅóâöêŠç9â’ „¿¹®«¤‰¢ˆªµØj~:Ûæ¯,óJ¥€°¨ÓŽ!›g3"¥ìÍ:ò‘Ú{U!%o6CQ–%ׯ_­&Æf:5Â~š iÑ’‘ÉÉì¦VY¥Ÿ®àn.Úù»ªÓû«æ¶ÈÂøÃú{éï8õ,>lŒ Ãs®´ Œ5š¾ãžÄ˜vz=)u4Ø^XXØØØxî¹ç~ñSŸª7šiV%‡eE~òÄÑ·Ïyá¯_n¯¬ÄÃDú?üÆo\¼|£,ø¾#‡†Ã¡V+ž3æ ‡ÑÍë×ÓŒïÝ»Eý¢PFñ–Ûâ\B ”“c“'Ž?zôèÞ¥=ÿ×{gU©4i(¶=œ*‹Ð÷Æš -…Ü(YHÕœ›eÍÚáC‡?û·~y~bN¿ò£ ©™…ù$I<ÏËÓ B£µ®„aQd…R³J¥ž æâÀáw6Úøÿü)„ÐsÙÜôL%K`Æg§E)˜Ö<ð ÃÈÞ…ù±z]¤Ã$|ⳟûö×^xöÙ§Ï\<7“$É’#y¹º²îû¾ÖB#•Ĺ’„QƘ@Bj­ŒFp'¡ÄN(Qj'½ÆÎ7ÓI’ͤŽãŽÇ8w/z;§cF"ŠAœ$Y¡)­ 9®¥¢ £¾6)Ú5HL)vœ‘[¶aÃ0MSëµÞéY!R ·¦°²c…Q¶fcÀôÌì ?ô<BdŒ¦”j£ ÆÌ •ÈëAÈ hÖ«~^½}Ç8ܸú¬»¹… kŽ·ÆÐæy%€À•ÖŒzJ!) Å@N¥>áx߇ÍLާÃÞ§Î./Ä"­U*[+·f'V6®þèÍ—9æ¹dqï Âø¿þ“ ç.Ô\ìþîëov¢B`'‚½ó3ežÇ]:xPŒô*."°,¹ÃÜ«Wn¼úêŸÿ¯¼ñÖ›gνÛínt7îøÔŒû>(s×q°„ á36=1®$(csD;B¼ðÊëÿü£;7o¿ò£þ‹ÿã?{é¬S ¨ï¹› fØc€ÄIió8Â|í›Ï=ñäÓûö.=þðG¾ç´Ê²'ùÈx5hTü‡NݽuýÆd­VqF­x~¯7X_k?v²»±ÑâBê°5ykumja~³Ó¾÷x¡;½~4Œ•å±)0Ç\!ˆ—¼žëi­ÖhŒ1B`ïMÎ9!”s!¥bÌÁ˜ø¾„Âc0!;E !ƒ Ñc!ÄŒj  Ð…,5„Fa©R*p½ññÖØØD§Û‹“D©Ì6²#¦~d°%Ï>öSJ­E ‚ºž‚c €J)õk_j IDAT)¥TIi=Ö;æ‚]OìÙ³'CŒé(L*Ï˲,£$v=RZ­V———WVÖ€QaF§ggcIZ2'0b'p|*‰ô(Š¡ƒ´ƒ$59ƒÂó}ê:A†Êh€àSÏ<=5;Õé´caµ’ùÆÆaþž=ûßß·´JDq5ð-ïk¯¯¯­­1Ï ªßwy‘9¿úÒ÷º÷TèÐУŒ’8Ž£aì¸vü›+kµZmk}åãO?õÉŸyö¡ï_Xšr ‘ë‚Á×÷³,‹ãØcŽä¢Õj9ŒÕÃN>bÊ’óÝoK•yG[kw¶» …-¾¨w‚˲œžž^œ_xî_5i~ó½÷q!O<Ü^ÙØ\ÙjULJýR;þÂÞý«m@œúØäñS÷&…8xâî©¥½³ ûõ¥$¹ž[ë´‡µjZ©T«Õç"Ï ^ )µ”ÒÚùí”ýaE3Øu0Ælü“pì9 Fч }c „?EŽ€AöOBCÏw(ÅYÇñp«½¶±¹Z–é(ºËø£Ê7b\Á.eI¦Ñ©µJ€¢(Š¢°åÖNGžçÙ.Ùj¯ÐNÔÅŽÙ•ª•úâââ¥÷Þk4ëY–a Žç ò$©7Q4¬ÖÚ× ]^Ú{{e¥Þ‹K=57O(+r>661Ùj~ðÁ¥FIQdF!YæÓ´È ~P©T«ÚpÏ»uíòO=Y÷ÌËW!v±L*Õ"Îÿ×?Y}÷©¸ßß·¸ôü·¾EDrtßÂòý7_;ã‡QâÔªú*NÚßhNž=îŸþ“ßZßNÏŒßuäh–q.UÝgûö/ÏÎÏÖjµV«5ìnfZAd‚Ðãiª5”ZQ‡„€žã¤q"„ *Ï~ü*IC‚aèŸ}ã5×X‹Šç*ž{Ì@CˆÂà¸È)¥cõ±àÎ[O=ýÄz·íhÔžŸ™~ãÍ·îºëh­26 óŽÝsZi]©TšiF½`¦Z[Ø»“ñ©Å­NwíÆí$Év{½l¼9ÞÞèqΣa&HóJ­kÇ ë!¶t‘}§í‘2»ºc„Pžç£ÄörvÀ'„p%cI–Ú µ†fG6j1¢")3)„ˆP¶²z+ê™çQŠ vôn¶À( úÃÏ€E¦FGÍV@û\Y¤j!„¤”B”Žã€]w«ÚM.Ú¡l{üØÉ±±I)5cŒ¶àeP­ ¢¨Óé`ĆÃXèùáÕ›·ßøÉÛS3³•Ja*„’¥Ü\ÛìoÇ:Êà\âRn ÄÄvîB¡• >Æ{ž×îv¶:í¬,ˆëEq>¦IÆ@W.½ÿÊ~øÿÑÿà…ïo®­;røÔÉã‹óÓ1£”‚\F>÷ ?W¦1TüæÕ+–÷ýÖ?û§{,£o¬Ü~çì;ŒÂ#û—ÞyãU y%ô!ÊÀÊxS1ZH•q0 Ê &išC€mâ 6zßÂüÂXëóŸþ”NŸ`#8R†!$Š#´ÑRØÌJ %ð¶ûÝñV£³¹1116jw?poiL¥ÕÌŒö[ÍÊÄdurÊ0×­Ö£‚ß{ßCB‚fkRiT 3Ì˱éٮ݌sžÚk›[Ûe¡<7‚JV!Ä®ëK¡W£Ó`ãçBk-…J­]ßUF Lò¼PB ¶·/œ}·ÈbQ–AàV+^¾çcŒ´R#e „1'/r2$UQnÕ#¾Ó˜™‡”¥¥¨OŒ#æp?DŒñ²Ôˆ²¢ô½€s!¸¬V«YQ”œonu\ßå‚WÃÐ(qòîã“ã«kkív{E!loLÁ)%;ª Jí| !4F¥,Æd“JG8(„B µ"C --JwÓ¢m0Úq\Î9DÄØjNaEJ©%ßm@1祊:!ï:¥¬ÜÉ*°,)` ®#'*ØÒ±% ¨´&„ Œ¥””j“Ô•VJAl;kŒ±ƘsŽwÝuŒÒjU«•v»£VJ+£ ­fsnfæ×õ×^zñ\‚(É\/DºŽ›$i2èí[˜«û^…¡àh«'‹4¬ýÁ€j¤v “'b„!D®ãȲ(ÓäÔ‰ãÈ.¸!Îö0éµû?ðÐwžÿÎÖvçÎÆzàz+wn*-ܰríöíXEœ–ý8»½¶Yfüö[eYlnoFYú7>õ7÷ì™_Z\8÷þíÁ Z¯Äƒöòž¹Íõõ„›„«±‰‰ÅùùŸüä-¡רu*¹sS^{r2l5qÕW‡,NÍî¹zíÚøø8(ð+F„I½V•Y™eQ”EQVj5¿RQÆJ(Y–e)¥Ò @­•äõzeE„Žã…V„:EYˆ’R ×s0e’`BT,¬Të³Õ°¸K!V†AP / )¥eQ0L E–ûž—ÇCh]ò¢(ò#G5›•z#œo ¶·{ý^Yn›2"¤@R‡Ú¼R{ F>ÎKбÃmî¸-´yžŠ ÐÚ(ˆP2†*Êc¬-2¥!ˆʘS”Ò÷ƒFcLHw{~à3êj ”²GZfþÈ7£l¯o«,±Ž òNJi)8¡T ¤”j¥0”R²×F¼«íJmWwŸ:= ÆÆZwÝuWš&·oß)%\h.&ÆÇóùÇ›«›/|÷{Äñ¨`Æ’4%à¾ÓF‹zèiY ¨Ú+·ÕpàtÏžù¥ù©ªçL·LQ®Ü¹Ók®ã»n ¥˜àj¥6>6± ×6·nÞZt¶¶â$.D±oÿþ#T«5iÌo½Õîõ*_•ñÞŹ…ùùwß» YØmwýWÿÎSO¸ÞßÊB0Š)4ý^k˜¥i™çRHӨוQi–"L]ê0ÊJãxh€q=O#‡Kn p]‡óÒó¼4Î|Ç-w\ÆJÄi†¨;³°_–CDR2Š(Á‚xY”y†ï¹EžQŒ<×Ѽlow¥VA.Ê t÷,í¹yã†ëáá0Š¢8Ž#Vª(rBôÆÝŽÐq)…–Òö¬h7'ßóPj¢Õhon¼ðü·ß}ç­k×®¶Æšq4ðUBNŽ·.œ?eeµ6¶4¿p`ï…`%YÉÆÛÃ!bÞ¡#GãdµD?óÔ£‹óûþàþè©Gkµóï¾Û *ƒÍÎÂì „×*@ @X«‚ -8Ï]ß#ާµæ¼ÔR:Œ­!YQ ÊšÆHK%•ÐJA]×"Øq=P”Üwýv·³ÒkÏÌÌ–œ½À'” ) .˜Ë67;I’&&'Ó,ÏËB*„ÌïÛ{æÂ{\’=7µ°¸°u|üèéÓ×ÖVÖ7×dW«aèúRpÏñÞ}÷ÌéÓ÷‡õãaEIYr‡Qße[ë+sSƒÎæìÔÔ`8J©=‡¥²h¸8;)5؉ƒÐ£Ç‹Ò\h4>>Qi·V7QTëO=}¤Vqö,îýÿîkŸýôÃÎö­Ë7'›½nï£}4å·Øó¨ïB8ž ¡ñ<'Š"H¥Tð … {®[pî¡ÃXµZéu»JKŒP¥Rœ#‰Ã´6R+ΠÛîÎ/.(Ÿùa(”¹ž ÊËBjí•‚óõÍÍCGaJ6Û(Ný „ ÷}Ásßú¦ Ɖ“øÎí[A÷º»½±&xáúÞ …S´=…; :ÚÁ& B$²¼Ñ_@1æ ˆ¶‘;®kBJÎyQrD%ŽBJuàÀ~Çu£8RJ¸µ%Í^ë#ú€GžíJí±K’ÄBv®Ç»¼¼R íòø¶FÚ¶UaI`BÀ>c#¥6ÜÙ¥ˆýÇ€S¡„T€²´4ÇË<ðý$I„RF«ÿoï½ çkƵ×BŽC£~×aÎí[·®ß¸þÁ—£$£ÌÁ”i©\Ï{íÍ·ö<4ˆ“™ÙÙ³çÎ%q’$e–Ëvo˜K- jLNoô¶»ýÁÚúš6h0‡ÃÀaÑ ¯Šì3ŸþÙ÷μ=Œ†‡Þ•$©ZK¡¹˜›žøµ¿ý…[k[WoÜÜ»t÷É“BeÀÕ+@l*ÕÆ…sçÛËJ¯?õøG—}ï¥ïÞÿÀC{–ö¿òòk®W©7Çc¬Zá„”B2Ï+ЬxyšBu8çQ4„ÆHÁyY8Œi„cJ /KæP­”•ý†~ˆN’"D)ãexÁêúš¢Øen^aP ÃÐ@¨´v]2 Ã._r]ƹ‚°ÈË"/Ê$©V*/ÿà¯Woß9¼¼¿Èr¨ 5f*†[›Ó­æÁ}{0DÝnÏs‚,/(Ò;5†„Ú ƒ»ÓÌÈŽ±Ã*x!$”Fq.ÃJaš9DÄãz>؉t·nÝì÷{ŽC)%Rp sZeҨǕR9Žk à\ „9”2c„À=¶§´X)e ±VpW—MaŽã0†ÒRYßhµËH»½SMÿá?ú÷ß;×ÝÚH†ƒW~øƒF½–&Q·Û˵ |ïóŸûÜ—ÿâ/¶Û‡ïºkvq c¤ˆã!cìöÛy^p)‚ L†Ãl°}ùƒ«×®^»ïÞû]êºÌùÁ ß#ÔͳÙBæ÷úÙìÒ¾}‡ïÂ~˜q¾Ýi·;]ˆ0Á˜çéôx³Q =Fo\½ñÔ³?C]ÿÚõãF­´®Uü«—ÞÛèENØÌ²ôñÇ>úÕ/ýå]GùA…P"Lù•/ cR­Â}{›FƒÍüë/½²°°<19ÿâ÷_F„­lmN.LOÎϱ0àB»~`´ |O‹’B£8wÃBhkk³V©Œ Æy–{A€×÷ýF£>è÷†ö˜EÁ‹RC`ô¿,9ÐF EmNOù®_¯Öò<·W¿”²ÕëoŠ2{ë­7¤*0FNNLýõ÷_ô ˜¬ÕÏ<öX2è7Ã0£{î:6[oL6õ ˜»uý–ÚÁTÈíÚ0Æ|wIÙutŒ*´“\âîŒçAˆŒ±{¿„°ÕGH¡FJ)»Š9@#¥`ÆXȈ8@»»V,íÉ˲<|ß÷Fžgö4[ ŸE=…P„[Yå.koU£”íl‰L“wË­­ÓšeŒÀS½û³Ÿx´ÓéåEñî»ï¾þú›·×VͱŸ}æééÙ™î KSZj‰·R«"C¶6×!R#Í«—öí]rnTý_ùÛç+_úêc=ÖÝlCƒAmßõzÃD|ùÐaÌøäÔ… ’,B`ÂY‘Ýsò±Éfí7Þ8õÀG¾ñïy•jP©Æql¹¶ê­7üj·„Nm²^obŒß~ûíŸÿùŸoÎL÷ºµJðæ›g÷íÝ7;ž8vúµýøWí3ãÓËï]¹sdßý½nŒ[Îßûõ_»±rÝõ˜â¦ây^(-ß-µÖEé2§ÛíÎÎÎnnn.ÍÍ+Á•°¦gP­V+aèy^¥RQZžÇ1Á¸L Ïó—öÍ“Æc<Çu1½zù*ÄH(sàÈ¡4NÁçÏ»zéòþKû–fŸ8råòµ‚Juiq¨ôü¹w£áp¬Y+ÓøÀ¡ƒ“ScoÿämV¨½{Úõƒõƒëå}KÝèÖÊêˆø&»¦.óß:Œíñ…»¼°v”uŒc&¦gŠ¢à¥ÜDã©Ù™4M­×aP–9Æöhî`òv²vêÝÅW*5Î9!Ì&ðXÏìÙóãHæ¹ö€Žšæ8NcEš2BëõºÍù‘»ñ€#ø§B¾ÞÐäôþ¥¥wΜ½zíV¥ÑÔ@ÄiDªõo~çÛñöVÇYšô†ƒ„sÏ÷«Íjàzµ±z{s aå3÷‰O=óéO}òËõçïœ½Š²7Üþò7ž+’øÔÝ'Ö77ÂÀ™Ÿžj¯m4kR%ç¥AP–!,H^p#øC=ä0R¯Wî?p{+mMÎaÏI³Ìa^’$F ÉÅøÔ\¼{aåúõ+P›gŸþ/RÉË —ÎîÙ;³´84Þ·xšÑñ¿ÿÖÏ~âó?|þ¯‘dûg—Ÿxäá™ZkõæÕ‰0\Ù SL É`(’æ…,ÊÏ~þ _ÿú×/\¸ðÉgfcmUkíy>@(ŽcJˆÝgW”™†Ð xwuªS–3\Ò ‹âƒ‡Õš­wn+NÝsÏ«ý O ^å‡öÍ1¬‡–ièåýé© …e¥ŒÍ´HHqê³cžr¶Evì{Âjðã7^¿÷ÑoßÞ0_¾|Þ¦ïÚ€ºÿD£½gåO—ðŸB v²¤FH»®[|k«£µ¬V«žç1‡PŠ!´‰¤eèUFcû(¢GJ‰)ŠÂ¢›6¬sîºÌ¦­[o4ص¬ŒPªׯµÃ`=ÃáÐNôc„ïûv£‹ïûqœì\ú½ïô­Ûw.^¼X¥Pæêõï½w)ÉŠþ ‚R¹ÏNOÕê5@·ÓÞîv××ï©Ê<Ju¶6Nß}bqaöýË—2ÛÑp{g\@D„R+©¤ï8@J£ÊŹÙaÔCPo­¯Þ¸~M(%”LÓÌ¡Trqòî“ccãµÆØÛÞ¿që–„‚‹"O¡–í­Ïþb7W7Je00Ÿû¹O>¸¸¾¾„µúXåÒ{ïO,-M Q8N«Îõãìµ—^ýø£ÏdýawmõúûïMÖkƒvŸ¹/2—YäªÈ‘VÁ,χYáûþé»ïÞÚÚr œ3ƤQ^X.§ÈrÇeeQ0J³8Ò²4$qR…ËÜ8Žß=sæä‰ã·oß$ QVªÏ Ú[›¾Ãöï]l5ÃF­Ú¨57ÜÚì0ß-t:·0×kJ ’94¨Õ™ëaF +›«Wo\!Œ-îYª7[í­ TÉ¹Ò al¤I!èH¥Ò ¶K¥Jó’ûAP”¢×n×[ãi–J‚0hÔëÆ˜¢È1AeYp.„àajõÓ:mM#VWʹÃPk†¡¥71ÆVF8"ëË’‚-×P nG+[Mó¼¨ÕjI’@„„žçQBŒ1ã,ËÐ.Iamåžça@eòH}l^Úî•Ökk7n¯ÄI:®(3Çu&ׯ_K¢hßâÂÂDëÀäDÓÞÚÖæêz³Þ¼zýÊÙógƒa!Á¬×íÌÅÕ«5) ÔÈB+•$Ùv0ÆÓ3s/¾øb’$„¹Jjkâ«·ÆÜ°ÆÂ:­Ô¾ûƒ³,Nû}Ÿ Zº¡ßÆûÞõ'ÿïŸB´à‚‡?òPw{#Ï·/œ;ƒ`c¬YÿÎw¾ðàÔ©c‡ŽÜûþûk“3³BFÎûÔÇ?N ߸}e¦ÑøíßÿãáÕ•N´B57<¥ZŠ2×Fi½zs0ˆó4OâøÝwÞ®W*H£ÄXì8nP­”¢,Ë(„ð=Wñ’0&µž˜š2ÆB©Ã¾ýoß÷ÀɵÍ—{öÍçeY­U›Í–0eµ2 âxˆQ€xµ–FÐaùÊÆJ'lõû̯¶ê“ L—<Î;ŒâÉñ‰Ù‰™±J÷#œçÓõºÌ寯Wšy!çTÂ5 +Y ,yIRJ BR)HBiíú‚t¬5Öëv׫VÂ4‰)Áãn·ƒôþ¯~ûw{Ån§}ñÌ{Ï>õ,2ºÙ¬pÉóÞàÒ•Ë €Êh@°AP-µBʤ2R–µjh=èoï?°¿Ói#L¤†~àùž ‚s^ÄaˆÂaŒæE©¥M//TÇk‡ŽôªaR改3â:qÜ_]½e t*µ¬·šYžcL–¸„}pñòöV÷ÀÒ>Srl–²æ¢†ã†˜Äí¶kŒkÓ*m\ â(Jb‚BdR»fèCy8Æ.$Ý]pO0ët:E–UªUaEóóóI’ìì¥ØæÙʧ”"„ô–;°Ž2ǦØ4'»ýB…´žA{³ÛŽ–sn %ø]ß)Þ “²Øªm]0ƎÔ”z7 Bˆßþîw?ÿKŸK’èÚÕËVs¥k›mJ™ï9@F ’—ä¹ç<ÜÝéeQ¡Íõõj­æ8NEaZŸª}$"ŸìÜ”2¬T¥u€íÎþÆh–&!Òkßw BaJl:ê¤Í®×y4TYôÀ*N0ÜWmpüÏ¿ù›•0|à¾{oÞº±²º®!ìö¶_}í £¸BHVªŽçêp¡ ÄRëj³yùÚu Œ2I²^¿ xüáEɧgg·Ú[ÓSS”±­ÍÍÛ·oÇIŽô(/§g¦•6Ìñ¤(…àAŒ`žgGŽ~íµo÷ºR×u€1q!„kZQ'ŽM“hGƘ$M{ìño=÷~?~òcO4'«e!û½äþ{ÒÜ„÷ø£ƃm‚Üï~ûÅ{ï½o{ØÕH®vÖc‚À£ÚèÓ ¡UF† !˜—%‚ KÒ¼(õI+gñäÔTœÇR+ˆ‘ãº@¬@0+Ó33¾(!“(ñ¿4|kumïâB=¨LOM6Æ··:º(03­1—†J‹ uÊ(Á x„µªõ†V=OÅX½’ÇñÕ+4²(ÊŒÖÐn²œ:H Ž¢4Í eH±¸£ímÅØ„ TI)ýÀÀ(-0µzUJp]/Ïs´l6²Þ[5™Ùu’Ø ÐŒ±‚4K(%èF£NA1J\׵ᒶBFšgvæ5vð·¨Áˆß- ëÝ `R¿ùÏÿy£Z{åÕ—¯_¿V¯7ò²üÚsß|ðÁVîÜ´åºÓéAˆ5D˜:Q‚H’gµz I©¢aÜio\¼t)IsHÈ0ŠZc­}ËËÔa1FàÕÞÏâ>Å8IR€0¡Ìa´R©Øÿ‰çy×®]³rZ‡y‚—„$K(¥a(.0ÛÝîpµÖO<ñ±¯ýŽÃž~ú驙慳—7vÇ[ãe™í[ZȲÄuj/¾øÃ½Ëû³,ºPF×1 - B#'mÇJJ¨MYJ m’”¸Žçz>&Ô¥D QmT³²¸³º²wïr¯Ó3T}_jíAÉy§ÓÍÓŒ L 0ö“—_?´÷€Y1LWP(H—²L²¸Ä@ î8lÄRò<·äxX©Ø3aƒO0F­•1º, )…ÖŠRïlèäö€ÚÛ™ÑÌòQͳh¨*ËR¥$Bó2Ï3)E’Äf§é„£DKë °²½Ñƒ1BFGÓ.qýº^«i­ÆÖÖVàzá믽¥eÑjÖÐB”'OŸœCÔëõRÊÅ=Kîv)Tž—ýa°5ô}†°aŒ¸®!ñÜÐó©…ëºSeP’Å^ô“#*‰··.aý‰gŸ½~ëæzg¸gÏžNw»8Æ«¥]]]¥”6 ß÷‹BºKŠ\MGp~`yÿùsE)‘CÓ4 Âp0ØŽ£$ üííí±z}¬Q+óbrïüK/½Ôƒˆå¥"®‡(ÙÜÚJâ!#RêЀKûøh E$cŠ(%¡yž‡aÕ„È(cT¿×õxùèC¹xþ½™æ¤ã8q™å‚WjõA9Žô˜£•BJ©>óó¿™÷_ÿâË®ïùaeÙÄøL·¿}ððÅfÝm´¶ ^BÔœž*E"97BChB˜’={—ÿü¯¾ô‰™¹öZ;‚Õ[kÎ\ü¾ EZ­Ty>w™wxÿrQŠA4P• •BÚjg *Û c¢(²…mD—ÛfÀ~ÜÉmÌ„-p7¢Ìæß½³ÆÄ–@{•gY&´M°D[®ÁóVÿÿ鬯¬6Âj–$ÿò_þ‹ûî?Íߎ†>ü@0/âóçνwáÜÓO>æ(Š)ÈóRjÉËÒaÔ¡Ôš$\Ç÷½€™å…ãx6i±,9s< µEÁKmŒPÆõ‚Ù¹y¥Lœ¦½Ío=ÿÂ+¯½~ùòµ¢ä s nÛal0ˆ¦fgÇë _~î¹£'O.,/‡õ&a~µÑzíÍ77Úí•Õu?¨LLNj£ ()%¡,Ë5€ƒ(¦ŒUüʵ+Wï:t¸Ö–—²$[Z\â%W‚;Œæ!H0¡JÊîv7Jâ‚—J Á„2j'$KKÒ¾;‘ä£d;J‰1š1꺄°ä!B`áÏ<ϬŒÁV8Û•Z8Ö÷}e¤-Õ`w-´”¢(ÊÀ÷GŸ´)OöÈÚí<¶¸Ú'Ášø¬öÀ2»ßGB“(¶žÝ‘‰Nà¸.ín÷¶Ú,/ûýáæFûùï|—"œçy‘e¢,Š,M‡Í Y&œÇ%%>¦Pˆ€A&+RÁ‹²H³$NÒD)‰ +µ €ÑÐ~’ra˜·ÕëcJ™ë¶Ólmm…"~ìàž?õø…óçî½ïþJ­R‚ߺ~ HyêÄ £Ôkoüä7ÿÙo}륗Ö;½°561Ý*ÊÞÞ¥Éã8ß¾sCH®´¾ûž{ë­Öz{cßÁ½ˆ¨íÕ[ÑvçõWøÔåI®J£„ Ò1¢Ì)ƒ\Ì÷4ÀÔ«Ä¥”ÀHK©0&BÈ"ÏUYb(†D@è?þáF_?sæÊÚíÁÖôüžÃGOè^»~»åÍÕëqí™ß³¹¶:=Þìn¬íŸûÞ ßŸ˜œëlv†;kk÷;þÙâ®ýæ§§VoÝobÃ!$n¥(JLšµÊÄXãÆÚµ™Ù Ì`µ;Bc“’—E& DõzÃuDpo»ß#¥ëU´Æ@!$0Bè8.ƨà9„€2B)Ñ Øâgk-ÆÄ›Ïc(%„~jñÀhÆ#ʘT Â…0ì `;TíŽ/RÊ…àBH¥ FBI@ÐìX£ÅT¡Ý½åvV³Ž«ƒ.Š‚0Çñ<Çó’,+JŽI™SF0E‘Š×ÖVƒ¾(‹²È´–Ii-Ó4ÖZfYÂE QRJ.m—§–Ü&è4-J.ÀƒAœæyžd×úhIaÛà·;]P³^ˆÃõÕÕ[wVi¶æí€È ‚ý­ml|ïÅ\¿yóÞûï;ppùÍ·^Ëò´·Ý>~òÀ¡ƒ‹s3c·nÝ,òüø‰SqšLLNÌÌ̺ž÷õ¯í“ÿ„Cœngðö;g.^|ÿɧž¦Ì§Y¦Œ.”i6[@¥AZr¦Äh­µ ˲pª¤¤{ž¡"”A‚ #/¼ðýåýûgf¦BWúù[¯¿›rÍÍò¾exªU«¾•.?v|skë‰'ž¸÷Ô©¹©ñÃ÷7ª•v{µjomÎÎL-Ò´PÞZ]KòüàÁÝþ6cî±#wo÷“(.——üþþ—Á ˜í]>ÀËÂCˆQZ–Q‘M-·)ƒÈÆ2Z»v‰c‰1ÕÚ!¥P"K`Ž8!°›'jkÛÎ]¿ »Ú=O»â=bÙQÆçåhü2»KËGêÁ÷p7 Í–d‹Îš];ÿŽ} ,­Ý`—Í2@köÚÉ_(mŠ,Ÿ›™%§q"¹l÷ƒm%&@0ÀrQ(-(%"Œ ˜0SŠ(B‚„8¢Vk2¬TÊB©„yš ‡ÃÑ“$ !Äõ|­2Fð’¹î¥k׉çKÌÖ¶:Œ‘$ϪõÚž¥/þáù ë©gž~õµ¿ñÖ«‚+DPè“}{fJžÎLÏ­¬¬¿òÆ[ÛÛý_üü/ýøõW1\xÿÑ<²0·TÇ¿öÕoeyþÖ;ïì[Þ—å™ë9×nܘ˜YúÖó/xÕJÆyP«h`ÂÐ÷Çw˜ÑŠPL0eY©„˜b)9°”eše½{÷<÷õçQD¦ÆfúÝÁÏ}æ>ÿ ¿†áâÜ\4ÞÏÉ[W/Ökžçžï‡ƒÓ§ï{íǯUCŸ"Ômov;퉱%¨,Ò¥¥ †+Sk´þÏýïÏœ;?3??>;)øæ×ŸãÍ·;5Lr.áïüÞ¿›^\¼µºêù <ˆâ ZîÔ믽ýÖääL'vŽ6ÆîÄa”Rc€m0&»FÌ^úðCé§# Ýö…rw‘•­ØûÚF÷X`Õúv|#»úH±?šÜGŒØuB:W³»IÕ–RëØ¶=±ïûZûß÷w.ý ö»F³Q«U•’qÅqÔí¶Ü™‹¢„0F Áyž3ÂŒ\J.DšqmTX©€0¦Z^ŠZ½966‘ç…çû­Ö0¼,‹4M´VýÁv§Ûîö:ÃÁ"&Ëbbb²Tblj¶P¦ŸäA¥š ­±ñ²äIšmµ;\H­Í«?þñÆÆ–ëÔâA²º²²´0öÌy£é™³—îè£çΟ_X\hÔªeQøŽß¬6_}åÍÏ}á×ÖÖ7×][_ûÔ§?)§ _¹y3Íá»çÏ_½yà ƒÃGŽ@çççf§¦ý~Qäm4—\m @”d˜ë+c0c3³³I>}ï‰ãG1 s³êÕÕ[ŒÏ%QÔ«¹HÇI\©Õ¢8­Vëiš£µ:FH áy, Ãn·=19 €åYI_ ÅÑïü›]k5s!ÖÖÖ§Ç'|øA¯|çÅ>ñ™OÍZµU¦QÉ‹c'N|ôñÇ'¦fî¹ïþ—^þÑF§÷ÆO~2;=“$IQ˜ ”’»¬’‡  êGè’-£šw׉N^EŒ9BÏóZ­–ã8vfÚíD ûíüDv×›Øg`”Fmçz[ƒ ö#ʨµ‘Øbi¦% ´ÖÆÆxg[m…1ÀP¯7®]½6 (!ýí~4ŒŠ"Ãî¸Ín”2ŠÝ¬àn"B™ç:Ž?Øþÿ¸zÓ`Ë®ë›V™cv’õï|÷ùW_}ý¹oû½ï{ÿ}ùO~ô±¢(Z” Ö"en!‰ãám|¶AIÓ uimGAtDì§Ó)63cJIüÔúÃW@è_ ±å˜b¦g­ £5Õв¡ÑóAG+„(Š"ï¡m·zÔ7Õ²&$ øäø0Œ’Í&I)+ÛO þNYÔ,òZƒÁ` ¤´ÖG"È‹©T†20{û;”’,›ÇI(ëÒZ‹›-Q»ŠRCAVÊ—eé aYÄQ&qsJVVÖŒ1óy^–åööîÅ‹ó<—R«q7ê„‚éüÇŸ}îùïÿýÿêÓW_ýáûä½έOŽ;I±´?u;ýŸý¹Ÿ- êî÷ „ÔUõñ¿ý±7ߺ1è/Ÿ;ïo¼¹>Ì&3â]<\þÆ7¾Á9aP–åöîn–eÆY‘põðÎÖö™§žx:qò£ø‘$‰€’Z)«Iw4pÆ*Ê“ájfgkî›Næ³BonnßÜÜŽzƒ^J66Ö/?òprk­1jZåZªª6<Š_zå0“ãÃ8âGUG"ägNEýäh<¾vóÖ…sá?;VËI’Üÿà»Ò¸síêõ'žxjçÎí[·nakáι§­aŠ%ºE F¿Óö3ÑÚv_»Ö¬á„aˆá+tlVµYÌ;<¢ ;á[ÜG…î©ÉwßÙæÓþ#¶ Ú/ç'ZÑy3HÒA]ïýÑÑñòòBkž`€@D—yïƒ TÊp[ ”ñ¥••$M··wÎlœá”X'½wœSm1 ˆ—ZUUðÅÎvòIàÞ%T+íSEQå¹ó>›gy–qÆ“8N“äöæf¯Ûí ÒÙñ$ŒóÌûžè:Êh΃üä‡OŸ^‚L§ÇÄ“û.=°²²ñw>ùIzY—œ:­êo¾¹º¼äœ­kÕíô;½îïþûß{íõ7¾õWßzïã­õGôGôÊÕë/¾òÊí—^yu÷ðh<ŸÏŠ"+J/øîÁát–ië:Ýîx2-ÊêüÙ ë«ë”ð(I#W¯Ý¸pï½a˜Vµ""=ôè“_ùæs•òÏ<ýþ­í½ƒá©ÓIoxïƒþÆ¿þ¥µÓ_þó¯ÝÝ?œfùí­Í­½ƒã¼88<¾³µÝI;i§3ì/]¼ÿ¡sçµõw·w÷&{{ã"·G“‹çOí+_û«¿øë¯|å«£þèÍ7ýÑ­[o[£Ó4uΕe¡µFï©FùP(Á@ÅJ[K‘f"w‹aðEʛպh£îDwªí)´Ë¢ð]0dã¶È…E5Žÿf-#_°é/,Ô0«ªêt:¸máÕ ñ”Âl6évÓÝÝ]OQ6ƒ0¶Ð ¨kE‘ÑΔ‰#W¹³º×Mwçcm^¥U’rf­е‘Òâáãœc[–nYÝn"ëÅ!¶Z†"ètºµ±Æ¸²,'“Y¿7ˆ¢¨ÛíYk×O~à]‡{ûùüèðh;î&ûégßxýz1ÏÑN@ çAX*yãíïê$ÓéøøpÿøðhiØß¼s·Ûí^<aÐDš¦Üé·~å_ôÿé?ùGõ<'<¾zãZ¤u]/ŸZ3ÆDq¬¬³ÎͲBð M»Véñd~ñ¹ë7n<º·»¶~zs{?íÄG“ñþ¿_aé`ïpyyy8êç…|åÚí~äWÿѳµy Œ~¿sk§Ï¬Zÿú׿~0.ÏÝ{îúæ3§·÷'‡çï¹÷ÌésgγÚäÓél<¹öÖÍ¿~á¥~/©ªÒ{ßétCÑQu¥¤zä‘w§qçÒ=÷–Y¹wx0èŽ'ãÑhT–¥”ÕÅ{ïÍó¹ÖÓPçÇ9gœBöˆw¶×4vÐXqì©-ÁÔU8]C)u ìßn@Åá'h¤xÐ4ÛÕP'Aì §û¤7…fâ 澘+3Áb¡j”.b„UB!´”€3 Îy @HÀXçFJ-å|>“JÕµvžTu¡5¼%Þ Á½ç<3ÆQÊŒöŒ‰ª®{ý.ê¼WJ „ò¥•µ³.ÞÙÝÖÎq¼²v*ˆãRj*k}"â'Ÿz ˆ>}nc|||î̹ùÑ1zåÊ÷ßÿÀ7µ†yVܾ³ÉzwkóÒ½—ŽoÞ|;Œ“Ë¿;J{G“|6/ά.OÏŸ==lílÝÙÝ»÷áGnnïÔÚh«1Æ*çµuVÖ•·VW•`Ì;+WZ•uåîìïÞž}ÿÊ«·Šüƭʹ‹>Ô_^ÙÜÜ"Œ×²ŽúïyïÓ4 Y]lœ?õÔ—ûƒäúÛ×ÞõÈCGÓÙkW_IøðþïÉ÷%aºugkkóöK?|qwww<9®U&1® DPåõ¾¡ ïzô‘ÿå×ýKüÇÿá ¿ÿÀå‡â4~åÕW*Y; ãF;Âyž—Þy¥ c< Bâ‰QÖj‡&.Ëó‚î¶ú^»Å ŒH@N4c,Ž£ÙlÖjF ÇE@^4«÷ _F³#úsKØê¼Œ×e-8ç‰o]šÄF«ª,’8"˜›¶Ã4èù½÷(Ÿ‰—e­E7³ÒZ“fK‘çíš@œ%c<Â(Æ(¼>ÜFÌ u]1Æ(cAÀg³™‚1†!NßR qzïG£‘ãdÐÎF ‚|ä#?üá i*]«ZV•ŒãôÝO<~8>Q(¥a˜Åí·O:õo÷w/\¸pñÒ½ËËËÏ¿ðBYÔ„Ùä8‹¢hïîgÎÿÈK¯¾vÿå'Ù|2æy>M(óœSïmQTqœÎçóVCž6“»”Òù|þÊ‹/Åqñ`Ô¤q¤k™Mfwwúý~Q£ÑèîÝ»0èwÖÖÖ®¼ñF™Ï•1<òî?ýÓ?åapñìéëoÝxí¥Aú¢(¤¬(¥£Ñˆs^–9a4Ï2  „F‰2*/sÎX·Ûýìg?{îÜ9ô‹Ï?ÿ|]׃Ñ0/e!@\™e>ŸN§q–eŽn,O‰RJk]UU»àRŠ…öÿ¯áî½·Ö•e齟ÍfKKKøŽUUÅñMyUøô1Ð#ìÚÊF£ûÄQ|;Ì:©ìëâ®èö}i£ƒ‰/²XTŽÊš5~h‘˜ù¢Í¡/º½Ž.¬pé6 x³Œß²1}‹CØÆ`sŒ[k¥¬qä¥ñôà¼ñ`‹"»uëfÀ…–*‰âÑ`¨µ ƒ¼ ÂhžÿôŸýóµ•á{ÞûDÐù|Þ²yy¸uvâ••l®¯³ÙŒ³`wwoÿ@)õ©Oý!¤Ûí~⟘N§·oÝ e~éÒ¥SçÏáO¾¼T–ZëÚjŸ«:WJ1¶¸­Çp8Düa1ý$YY„ŒRç·6oÅ<(¦óÃÝ .TµÂÇ3™L>úÑž={VJyæÌ™ÑÊ2q~}}ý»Ï{>ŸÏf“(K£ ¥Çq’âyPAt:‰3Þ9§µA%Hã0j h­?÷¹ÏeYvþüù8Ž766666ÆÓIFÞ;D£:N>Ÿ¶ e|“É<îDm‘€Ÿ…s†!þ‡V^Ý“sNˆsj0› Ãp:‡ÃÉdÒöêºÆFFùv À;Ò@Шõ¾cKRµ‰Ù*6ÉðEв‹¢`ÀCŸŒæˆÇ®¥) ¬…Äô¯< ‘Ô<ϸ`ŒÓªª‚€k­¬5iÚYàÃT€'Hml bF…¾ØbáœRR|6ç(%‚A (¥”Y+ÁXÅüó/|g8è‰ °Æ9 Þû7ß¾|ù]·ïÜît{Óù´–R*9 áÒjiiu4u»ýOþü§÷ò¢0à´÷?ý3ÿÑW¿ññdJßÝß»}çv—”A]—išh­PÞŸ±…²\;9ŽæË9¯ËŠ:èõÖ×Ö£0(‹bei…„q’$Éd29}úôÓO?}ÿý÷?öØcŽÀÁáx<]}ó*ñ$ŽÄÙSÔ5 IDATõÍ›7ã0¨•©ëš22N3ÞÛ^¯A™åVkï\‡A(¬·”ScÍG?üìÃ?üÐCýÄOüÄåË—Ó4ýÎw¾“¤©u^kMDqA‘g³ÙŒàœa§'Ž#©”oV8F‹¹-pÉ Ц„àmáÏ­gPjAÄÕ(Î9cL𦭱FŠ9š&>kÞ(´9çÀ{ÎyžUq"VÀ9¯kRaºÝn]× ÂH´ÙkÙ«J¶Êˆ¨¡å)¥(çí0+kvV Ï‹1FðJiJ¸s@å O3év»a(<8ƈsm¾A›‰ÖZ))sÖ{ëµ’e^yN€h%ó<ŽFJËí­ƒÃýÑp„xïÓ´wt4‘RÅq<×µÔFQJ…8 ÈÙ³gó¼t~á~á+þµOÿâ/‚àûGO½ç½_úã? ¢°®km’*›Ì9§@|]W”JqöÛXêfav'Mª²Ì²Œèuûÿ™mœ:UÉŠ‹puuõ©§žBܼyóõ×_íµ×vwvާc)ë"Ïœ1ƒnOÉÊã¬;Ý—_~‰rêÔúB}Ui”γ9*€:ð| „÷¾›¤_øÂ~ó7ó·û·?ÿùÏ?ôÐCÛÛÛ¼6Ž1Ê(%<›Çcdîa<%„ˆ0hÙʘ&¶7Ž/£À;Ët¨*>}tÌ”RêoK1$ûaÅÆ9ÇïÛé”V M¶­Þ¬µŒRcL-”¬¡éfaÐGá½g@Ùbåi” ƒöñàu´—å‰o© „c@c”qÎ3`­YÎc¼,*gJ!‚¦î£lœ“¢¨ã0œðeQTe•ÍçÙ<Ë‹bwÿèîMÊa:––.œ?_UR+wwk{iy€.£¢Èg³Y'a‡Q$¥fœèCÏþÅ_þåÕë×n¼ýößýäÏoœ>ógþga%I|xpp|°?ϬÕq²ŽãDˆ k¾Ú[O)uÞ†‘ ŒYg¥T;»;eUݹ{gwÿ`0ÇãüàW¯^EÖ0c¬(Š0IȺ„eQP ÚzÂØx<ÞÙÙ"„t:)e@)µÞyð@|Ыê2 C]×UQìnm}÷»Ï¿øâ‹+++¸Ÿò{ßû^’$+«+Æ:Æ˜ÕÆƒ‹Â0›Ïööö¢(¬ë µÖoz ‘â(Öþh1NǘE8m‰v˜eÖu•¦iEãÃIœDmßš8¦hm'Ëü–?°ˆþî­~Ò¬:AŸH›ýç ƒP¦¥ëÚýQ'> þ‰') C v`›í€µÆ9í=0ŠlE@£áÊêê)Ä{R-²‚íÄ{œÛ²A(êº"„$I(¥®ªF£¥4M”Ò”QÆy-uœFÖ(ÎyY”ñN’¦c¥¬×ëv{ÎE]WÎùáp´¶v ‘0Œò¼¼råʇ?üìÇ>ö3ûLJo¼úúæÛ·Noœª«òáËÎg³ÙdN)£¤¬£(€Š87λµ'ÖS×U­¥õ–æÁçó2¯2c]Q”óy¾±±áœK’$Žã¢(„ÃQÿpw—X[]µÊXk­ Œ­÷RÕûû{[·ok«OŸ>¤±µšpŽ(­ ¥‚s£õÁîÞÖ»woß ¢x>ŸO&¼B\¿~ýž{ïuž8ç!(%Þ¹"Ï‘îÔ\ÔrÂXߢ˜¨¨Ó>PtŸÍˆ¿±øM*Æ(VÏa´…MèCm¯M$0Öcþ¸,×;±^’VFßÑàÂ8 ƒ@0Î’ÊhYUXз$YÌKcnXdŒ1ïs.Š#k-cœÆ™ÀÃ9 6NŸßßßwV×Öh†i§k¬•JYo£8–Jj«ã$1VkãÂ0AØ ïàþÑh%/ÊN§»¶v*íô•”\ˆùñ‘4fooiy…1!¶ÞJ­˜ø•µµ ÷\¨e}çΖTJ·yûö¯þãRVÕÿà‹_ÿú7’N÷¿üå_þ­ßú­óçÎ~üg>võÊ•ªÈ¿ùoÃ0PR*U[ë0F…Aˆó-ìDSJãNÇx”QÊ8 XGY–ƒÃõµUÅa·ÛI;I £ä_~ó«×¯];:<ˆâèààðèx¼ppwgûöíÍ»›o÷†ƒñøPáìÙª,’´Ã¢ˆ"ë:M’ïÿû›·6çÓÜ‚4$ì=òðÃÀ¨: cmT·Ó-òl{{;›gq¢õÄq¬/…AMêD(gM¶8™X<´ðjÇœó<σ@0ÆÂ0Ìóœ-4©¶ŽU?Ú.6/ѳ¶Æêš%Œ1Þ$ǘ‡ ;^ ‡:MS4¥Ä9kŒFKµÖ„¡àœypœsç,g\k˹ Îzg½5ŽQ à½s”xðÀIL{G(PF©¬«(i'vnݼÙ.wºýno˜çÕ»¼–Fš‚Bií¸j©ƒ06Öáe‘wûKgÏ]èö–^ãÚÊÊÆ™3ç‡ÃÑööÎ?øã›[[0b=ƒJÖe]ÎóùæíÍ,Ïoß½sãæÍñt–Ï‹ñxrçÎË—/Ÿ?îêÕ+ŸùÌ/>óþg¶öv“nçê›Wúg>öüóß}óê›oߺ5O——“ɘ1Ìb„µŽs(w‹‡`bªµ&jiåUY3Æ¥TF[câã‰–ÅÆúj{;[óéñöÝÍÙt|<Ô²vàöööv*™oïÞ©ªl^–ƒáЃpE6ô»—î¹hd-µñÞMg“ëo]ß?<0Þò(ÐÎâË*'@8ga ‡Ã­Ûw™àq‚3„³ Óéî쥖Q#|^×5]h>z-xŠ@+åŒ ¸`„Zc’86J3J­1œ2o-`” šD‘·œc"ÐÚxqœXëNT9ôÖÇ\#XÉÀ6ûÄ#aöà !¸±iÚÎ;ï Laq‰„¡7ÆHé’D´§ ûàØZ°Ö`ÿ øNATuÉ{Û-€iJ:«TÝéDÆÈÙ|2¯ª ;ÀDQ2ïÆÖxÔðºñjð[ÇÄ:yíú•‹.%I U9™­­âœŽF­U ­õÞÞÎêêò©S§‘Ñ"fY¦ª:‰Rïýt:ýÔ§>µ»»[Åg>ó™Çžxü¿ÿÇÿÃk¯½vãÆ|àŸû—ÿb4èO§Óét:Ö _‰BHê÷ûÐP'›%„äyI8œCv;4­u¯ŸÎçóçž{>­ PmÑÎù|>_4½­ëÚYÍ97Z½úê«ý^oyeåö[›ÛÛÛûûûóù:c§ü bhÛ”?¹-­b6› ÆX^Õù,[Y_…†$ŠVèOhO GD‹Ä—E쒜йn™øFí7œq¼{Ø5`Æ,M;”² àwjm¬u(ƒÇ)eèZðFã«+%Ã÷Ì<®&÷Ž ®µòÞe^Åh8Èæ™’5£Ô[SíïmƒóàЫ â­sÖrFÕóÉt:>¶Vïïn§èúoÔ²^^‚¿uãM ÞYk´âŒõº½^§Ë(õΡ´ÅÈEIöOýÔO}å+_yúé§åW~åü… ¼ûÝŸûÜ¿:súÌòÊèKÿÏ!F£ÑùóçfÓI†EQôû}í’$ÁÓH)MÓ´ßGš¦I[ç1–a …ÇLk º¤TBpŒ•À`ÛÆŸØÅˆà‰w6DWatYÔ;»ÛÖÃWÞDÝ 4JÛ,*qÎDQ¡g­Ë²|eey6›îEyÏÅK˜ªu»éöÎÖl6M☢›ÍLm¾ØŽÎ9ݬ¹f+ZËÊkËèV ÊZÛí÷Ïœ=C)ÝÝÝíõzXÆÄq¬”lç™0©h{Fiš¶€?i¨-/ÚUs0È Š40èöRÞ ùÓf†B)‰ð2çœA `’$XÇ…aèœeo7MÛ|.Ï9ÓZu»ª,¢È±ÖÔu'|sóV’Äí1Å"´‰ˆ £Ðƒív»»{A̳lÞöË*»rõ••¥,Ë’$bŒM§Óã㣷޺±»»sóæ[ׯ_µVçÎ-‹f³Ù­[·²,[__ÿµ_ûµ¢,žyßû^|ñÅÑh°½}÷÷~÷ßIU¯®®¬­­eóY–eøHpç6^!vÿ° ¸?d]QŒYU‚3p3;ô ØoolUU¼¾)¥eY¢Ÿv΂;gÕ‚|ÉÂ( ”íïLdzA¿W—•àœŠ@V5§Œ ^UU…ÆØµõÕ^¯—$éx|¬<<<O/]ºO)Eˆßßß›N'¶ñß´!Û“”ìE5…ÑßH[º4Úi˜t !ʪžÍfãñxuu›ï|!¸XMAÂ5žóvžX×l±ïZ3=Y‘xçÎ/J(ÊHYVÞy†H¡ó8“†ˆ§Rc X½qš^)å½Co(šiÖù`¼`ôŠ(§ÂZc´ïd]ű0F{ ”PÄ;ÏsÖRB8cÎ;Ç(c”!§@…`Z×B0Çñζõ«wv>›×UU•¥’Ò97ŸÍŽŽŽÎž=ë,AðÆo¼õÖ[/¿üò§?ýé7n|íë_·Þ}á ¿?EqóæNšŽÇG¯¿þÚ|6Ãû…Ý],20Ta‹ÃâÊRÊ „ctkMÆš „P\Æ…iCUÕRªÑhhk»zH¬Ä§®êÊ;·ØÅ˜RÚz¯ôÈó@‘ˆ¦0÷ø|]Wóy6ÏfóÙœq¢µâ\ìíîßsï¥N§3Ž‹"?>> EÀNÌï#ÚzÇ6 À „öЬSü­¨RJ ‡Ã0Š{½âÇ(…†èÜB‡¢‹ð¾áÁ‚å°ÛÒžœ8çB/¥ÔÙEË;$ò¥ÞD¼Ƹsˆ)¥1& #ÎþÞ_Îy…EY¤išes!D’tâ8 ZÔ}¥”im¼uàa„qÊ´’œqÁ#œx`„rƈâà=#Œj”æ”9k¼³‚3â à%ÁXï)Á™àŒQbµöûœÒª(ª¢’ÊxïwvvF£‘sîK_úÒþþ¾6æÕ×_;†Aðæ›Wœµe™—e©µ6JcÜAGÒ®ŒÁèA¦z:­ÖˆÏ;ëœuà·#:ïñ×1ž‡ì}3Á]³@Ï@Œ@(8£”¼*¹ðÚ‚÷œ1…!%„QÊ—¦vÁgŒ RÕèÉ(eΑétvîܹ4ïܹ=™Œ¡IY³”NL‘f¤É4_-îÖúÑ6;G‹4Æ玎ŽêºÆæ“ygm±§6Ä›Zès5„@H3_êý‚j‚׳ÀM£(jˆY5Ib¥%zSdS#3é€ÍÕ{‚K¨œ%„àRjg}Æœ F¹µ>Ik5<¨!Š58oó¼ Ä¢;Ùüåœ;ë½ÃÊÚ8ç㸗šâÁ[k¼w”Qkæémº‚Î Šy^„Q²µµÕívó<ÇËŽ¢ˆ2–W™µ¶“v¶··8#œ1ïç W·7Ô7“h èæÑ¼ðÆñÞÆhGBð( |aXçO²:Ò4 ‚`0ø†¸‰p7ªÜXc8õãLa¥”AU+FàŠÑF•¡ÒR„‚qŠüvBˆ÷ŽRÄ)ÁZÇy€|‘á°ÿö­›Y6Í FÚH µši}<{mb€ÖŒum[î´ãSÝn·¬kBH’$(wê›}¤Øg ãyÓNóßl5ÇS*¥':'1\eÑvU(+Òi‹¢àœ§iZ×5cBk›$I]×´‹g}84úi„øN§#kEIž^p¼_½^o:"åÛZ›&=¥Œ1ÎhG)×FrÎÒ$]èg8g­ã¸mÊQÊ‘üá0ΑÝbŒ3W,nwœDÎz¥eÄXþ¥—öjY)-õ{eY®®.KY£ÂP(UQH<¤qrûí› M%MoØE #„s.ϲ<Ž£8Œ¬µq”àPÖ;Þ…0Ò¶¦ÄË„­-甀<Š¢ññclùüù¼È¼µZ*øbZˆq¥e7‘aRÁl Ž@’€à¤Ï€X°cÀA_ˆÐ9MÁߔü,ËN'!„áÞ›7ox¯q³hÈmVŠùbñ1Êc^¸Ú\UU‹Üt˜}RçoÚÊÊJUUv*)ÓN‚/ØVÕ¢M=ÛcÐÖR˜€"PÀ«ªŠ3ÑæÆçη  ¶ÿóŸ{°N+¼‡hë˜fÄq,nA,—QôOײ5ÖðÿI³m@c ÌÓ­µeY"T†Eá  ’Å‹@ïݤ|·Ð^%&:ÖZ|ÓçX¤œ[0€E"èœçÍ Yˆsˆ–pÞ†ãö¸f?mZÀhë-†‚dÙw`<°½^GA­Õ„RVíeCýp”ÔGH¹‹ ›1Ðí‚Ñàh JAžÎxyÆ!°¾²‚K÷ã +X[ƒÝ}˜—ÐéÀx ýXu ªÌ € ,!Ia4‚NŽ& D1T%€c ÖÐïg²èµ=m$aவbá…`e™Ãb¤Ó@CÒKÂï-ZF[õ¶>>|¦„`´Í°²lýÑd2A Š¢PJ‰`Ñ‚oIÖx¶IÓoo­°ÅÜ ö>úʶÀÇ7Å‚ã¡gB2k¦ ]h§´5J)Z$þ5ÏsñR‚f©pQÈG.wY–-ÎÕâ‹Þ/ ;Ú08±‚öÞSºˆø¾xø°'w_ÿĤ­ö$R­” E€A ™ç„½½½4M õ„zâ‰÷NkëÜŽw0™@C€÷`-P Bš)~c-àBü©u‹ŸBç@8@@P ÂT {{` xwîB–A”BYÃù `=duu ƒ¬®ÀÒX Æ€u -Œg ¬A Ⴤÿów íCQ@/IðV`LÃüUk-çœi­ó<ÃõÈiÒG ‚0dN«E4³–4ü&Ò —’†[ƒEÆ/~Úò¦…Ù4§$À[×56AcJ)Îp0óD“2Ÿgq'ñÞc†ÝBïu]GÍÒGÒLb¡¥¶ß ›çhÈ pÎqË4&a­ÓÆ+hío J €Úöµpà ¾S›… é·¡ %Rê p-!FkÛ¤øi[×8ŸÏ£(‚†PçœÃü1tÿxâñz¼÷ÈN"„´ábV´™Ïß28_øÂÁ…¢€0Ρۅ²ccõ`-Ô5B€”€©¤wèòq𜃠@ È}˜MÁiØÙ†~÷¡Û… „Ñlݹi Æ-,ž0Èr¨%”ç ¨G†`5ü½_c€qP¢æó9z)Ö x M8ïq\¤Óé´LkM ÀÇé")jã~KkBD©®êéim0amm4¥T§Ÿ:g)RUŒ.ë4eòP×>&tdøëˆb?)MS|²Xr´æ6IúuLíð_tû}timšÂù¢‡„~›RŠpÖXŒrDOñGˆJ`)E8¼J4Òl¡<™v!êºÂÊ ¯¸ý]Þð#yS¢"HÑ~xÛ¬éÀM›ÙÒˆy` '”µ0 úZ¼Aã£]ÀÑï!Ma:Š ŽÀh˜Ï¡“B‚ÖP€ÄKJ1𪠬g¡Ûï<0 JRà=¤ A(`:£CpâT5ì‚vÀ8”¬kH¸ï¾E†ª5ž€7@üÜ߆8‚oüðŒÁ~Ÿ(:Åw m·pÞûvÞÍ»€b(¡°ZãÝ^`jֶǘ/ÜßY¬£µ&láüÚyQôµJé¶ÍÆï½³‹ Ž˜c´%€ÇßÿÅ?€~þìk°½{‘0Jíu7”úDš^­ëoŒ{©ŒÑ$L¶gc¼þ  "‚$«l‹Ô´êƸJêxˆs>gašÐc²é´; ÛbŸ‘­»?nsýÒ§'¦ö¢(ˆßNô·¥*ŽX«´¢(¥æOðSÓ4µÖVJ¶ïÒJž„ah¤Â - 6êÚLƒRº (•e‰‡†R:…B°6ˆãà(š¥ÑT»Ätë0L˜ËÀéœÃ‰Ñ*œEQÇ»»»Œ1m¤”ÒÚM›àišNŽ÷ñc ZÙâ (ƒÑ"»Ax „"ÚhxœõÊó¼Óé´bïþ/0 ÊÖVá•—€0°¼‡¼€n´†á._ïáÆ Ès°¤„(!À(+(KX_ƒg? Ï?û»px> Ãá‡8çÞÛ¿ÿŽxè&©Òò±Ç{ù¥W_½ÿÞÿZ–?"å?öm–zjeö:y™uº}mM%kÊØÒòòdz2AOyä=(ËËPUÐïÁáºI˜e™ç½ïáZk¥\”:Ý¥ôâ…KRÊݽcÌ`y¨ôÌ<ç$‰ûy^ &•繇Enœsg H T9çÂ(β ‘8Þ0s”)•ÖJIÍ¢Ð{ŸeY¿ÓÅ[ÜÆÞy–Ea(šå‘FÛ$ pj*˲H t–ôwXÃ8oà ÂI)9c¿ ÿÂfŒÅe>ÇÐMRN¨²¦“$UU5‚Ž6Û,ÛdQ´ÚÅ#Õ‚d(8ŸÏ«ª2V…!‚…!u¤ªâ(uÎííísa˜h­Ö:㜠B¥ ò]”RI·c­YÐé ´‘è¼÷à<Þxï<„œ9­œVÚQ!œV²$à¡È€øÄÇáþ¢J Ai(‡N8‡u( HcÈfÞkεÞZÄç¹\YÞûà£þù?û濮͸;ÔR¯¾yã˜1Bñ¥ïÍ÷Žz£¥{î{p2×Þ÷^ýÞ îèÚÚÚÚ©ÕÍÍ·MV&QP—y˜¤µÔQž:súx:±Ä†I\×õêêêxz8-@;¸r ~ù—á« Sp ·q8Ê@ð°ªd("𮿴:/u•WgΞªìú«"pÚPk= nh-Iõ\UÎgÞ;ÊÀ-½&„%žZªHpB! x™åãÔƒÓFÆT”‘4ŽÁ¹^7qÎqJ•R8ÑÚ&Ij­­ëÒ:A’œ³J.è`¸ô¬( zB¸qê½¥”¡œ mçÔ:š֚3¢æÜ: ÄSFD@¬“ÖI©ZQ+…AÓZ›ç¹÷>ˆ3¯mU„_h¶Fu'6QàqdŒ­¯¯o¾ýv·ß‡EO{¸†!ŒÚIšâo)…%Ýc"À#a]+ÆX^åN‡Ð…>GÛÛ\”b„aC6óø#ðÐíÂä¾÷„!8L€÷—¤’uíU];çå{ýž”•¦i%K¥”µšsÄÇ1Eqxx¨UÝëvôég¾õßTµþÀûìû/þ ÓIž|òÉ~õÂÎëׯW²þ÷¿÷.¬ÿÓéü¡ËÏfY]«²¬S ”çq~rtüÅÿû÷_{íµáp¨” „¨ªŠ³ˆ‡àBØ?„8…»wáÜ%¨qB¥jl>Q*¼'Noyy5I«lUU㣣N§SVSï}ÄÙ? IDATw”RJ:Fô“`ûZª‚R ž8oŒÖ\pg)ã”QFDDˆÕF;Xû"æÕëFTZ- Z5Èh„&†È3´hŒ‡mJZ×uUÖnНL1F/šO ‰¿4ð„@ !˜s&Ÿe8 Ôí¦Î™–±‚ÀêÉŒcºÿ›3.ØNlñÑv0£%€a×±Ûï#‡’žÐÃpNBÇ-íß®©Ó•ÖšR®¤cT8 qÇc4bJi–em6Ó²Oø/qÖé3°··(ŒDÎ9F§´×ëF#c GyY ΋:ëÓ4­*5>:~õå—ŒRÏ<ý´Q6ŸWo¼öf™é££éë×7ÖÖ½÷÷\¸çùöövQ•Ï=÷\]׿ÿÅ/¾üòËÃá n=o8Áx¯Ó}ýÕ×V—Wâ0êuºI—óRÖn0íà~NŸ ð©O"¶€9­ñB„Jçàüù KKKÝNoeu9I¢££¥j!Â(ŠëZ+eã¸3­ôz½ àÞÛápØŽ’†aì#„`J™Ö×`ÐÖ$ˆZbÁÞ¦Å(‚B"¦y úfÓ)N3ãÍ/Š"I’^¿Û¢NÞ{J˜Ñ6 cïÀ4Òª-fOq +íÆyžyïÃ(‚·mïќ٥~Gë{x”®)#JKc´x‡"àÞ;J‰ˆ§”pÁŠ2çœIY¡'!DJE‘w€fíì‚KÇ‘R (gJkG¢¨’$­ª: D[Ë<ŸÎ’&{o-žW¼Y-Üæý¯*“ <þ\}, YÿFÄqœBK)çEqûÎÝ,/¬÷Ir.ŒÑ„PÎç"ËÊÁpðêko8­#ÎÏ9ÛK»ŸøÙO<ôÐåÿü?û¥gžy¼˜Î†½þx6ûÖóßÛÛ?>Þ;òÆ–‡ûã±´n:eQkY^¬ –¦“iÆÇGÇy–k¥uy^z¬.ÿA]þÒõðè»a¾þMè Aéeœ¡ŒzðÞÓ0JÊR&†K«Óé”s–$á|6)‹,ŠCB(£a¯;8uê´à¡s–1’¦©uÆ9o!¤ªªååe.xVŒGÎmRà¥Ö [ÊXk‹fi£}ÊœsXHc‰[ Q˜€êf»@^Ö¶aTbÁ~)š?¶”õ í–lJQÆ.¤5¬1¶-}œ] N´Õ°<÷ÞÆq¬Š“°*”º“ö…0Œ­µ"`Zëååå,ËÖN­gYÖr¦"!ðЛFO1?ã(¤¸rÖNÁ­»àsè÷{õdŽ•\‘Õ{‡œs¤‰Î« ƒ‘Rõl63Æ„GqÝ£ÝW~øÒ‡ò§zIlµþOÿ“Ï|ùO¾táü{û½ÞÞöÞ}<ðgßúöüwÿÎïþÿ×cïzä­Í7¹w·/_~—¯T'IÂ4 ÒØ×úâ½—’$Y^^~ôÑGÑ/ð ìV¬®÷¶á/¾µ„'Ÿ‚ïÿ’.TUÄ8Æ„³Þˆh4\5‚ HÓø+¯L&G`´ ‚ í¦qÇq à Ê*ÇâÕ9gŒ¥ž: Nê•ókZYp6—c Úh‹áØf #$~ßï÷›¢Š"¢5±uŸ’-VS×uÇH‘ZÂ)”…ÔZ畱už.6û,€| Ö.ªxÖ¬;I’N]”m'©ÓéH)§Óéêêê`´¼³³3›ÍŽñ *eÕ¾!„sæœqÎ8çhH’Df­ÕZarf…1±Õ(®C#¶Q×ÒZk¬f€SäŽp–“$˜gÇû»Ãá—ZçyÞBÖ˜!°Ú¸ü Aµ„ï}žù[°¦ 6 •Z­lïn "m«ÞpÁ|:C»®k.h¯×à +æÅ{ß÷þÓkëýÉyk~èò_ÿõ_;U<òðƒÞ¹8×××'“ÉÆÆÆÇ?þñï?÷ýµS‡Óƒû{øG?ü!A³^0>žÏDY#‹wkwüí™”RJˆH)cŒ‚ÝÞÏàh Þàà)p.ŒUÖ{ÆÃ²Ð§OŸY^]ÍÊ…ÀÑááñÖ;A¿ßG6€SªB^Ër:"Å6ŽcJ1á=Üsÿ=F›^¯gte¢Hª2g kxÍ-ø…¥<’¤¬õ„,ô8çÞ/xÎ.XÛ£×ê*æ²M#Ô‰€%Q/ {ýþÀst¼;ÏʲÊP¥tFf9"ˆŒ‰0ÀêÐVò¬ŒÃ…p0b ½^/˲»wïž9w1Öívçóy·ÛE³ÐZ·Í¶n2oÃæÈh:œs¥$!‹&þÙ¾R*MÓ(Jq§çˆõˆ’½4ZgT¤i*U.eÝ ¼’¶Åâ½Çu^moe¥$D÷œ‚O~þùÿ ”AUf±ã½N—‡a^ƒÑð±ÇûðG>ò;ÿæßÜ}ó­¥¥•8µ‘GGGóùTk†á‡~òÃ?ñôÓXÊl8Œ'³½ógW_zé•'~xgk7Y^âœ_{ëå,Jâ+WÞLÖVö¦ÇqÝsêL]UŽ’âèÈ[½Ðÿ±ÎU5!„!eÌÉÀooÃÝø_ÿ7ØÛá¦SÚHÎy]iÐíÖVO•…rÂ(ØÞº„œzZ(Y(]÷úº®'“IQTÂâ<8Á"´K5ÆŽÇ“Ù,#Þ†¡pβÐv4Í´YÌQ6Ûþ%œà‘PJQçŸ4Cú¦‘6âœçy¾:%œ2:/ò•µs·ïìFQ0/JO £„.vŸBˆóŽá´ÓZ¢ñµÒ¸k­•uÎ9áLˆ0˜L&ZÛ ˆÊ²D“Ç+++Èš ‚ ª !"­€ðØk!J c¢¥Ø8g1ým@€…î°¬ÝÚPÐÂ%°ÎXg„ˆDÔ;>šs¸½c£”÷z]LÒ%5 )Ö{K(¿—RâM ¯5½ìîA‘Ã| ÷ܾJÎʧÞûž‹—îÕÞuz]©Õµ«Wï¹çžg{<Ïó²,———§Óñ¿øEOIE7®]Möú+/ÿ·Ÿýl–ÏDÈÇÌòòòíÛw'³i²¼´º4Š8oßzë­§ß÷´ÒòÌÆé0 ­÷EYŠ(BX, Är¯ƒ;=¤”ÞX#åöÎÝ»w<¼ö\8eAŠB„u0 §“²Ûtz½Ù´8uúìÖöÛ³ù¤˜O Ûé:uÚÕõx¼`ÚK-xÎóÒ{±÷d}}² *«²,VJ©N"jYDQ€iÄ%oº–v&5€0cl»ÿ®Ùîl­O“HJ‰´Tï=NDi­™`”ÒãƒJ! Ã@Æ«u‹†Œf´2.ßónJéd2©ëú@çT#~–eJ©y5£@WÖWcÒ胃ýþh@QªvÎ!Î.[„H±€îÝj%ZªØ¢Õá)´eY²3„!X†“É1šªªòÞD¯+ÛI—´aK+ËÚ‡“=mªa¯§µ1ÚµÙ3TÉ2ä8Ø8N)aÞï‰Ö²TûAÎ<û,”%<òxø¡×¯_/Ër4µU°s.`'„ÛÚÚúá8ô„÷Ÿÿüç?úÑõk_Âp6ŸõÒS^„œRâhgû –îùïþpsóöÙ ç,øîò’6n2›ŽÇÓ$Iˆ‡²ÎNŸ>í½ø‘wݹsçÎÍ,Ë8#“íÛ7o»_×0÷eFà,81VÒr?þÄ3JZ!âPð½ƒÛ7Þz¨ ˆ¤,ešt#Ί2[ ‡)u8áZ›8èxãã8]]]5Æäù<Ë2©ª0Þ[¤™³Åšî=¡”R²†D?Òâ+ˆ’TÖ€.-­PJ… žú²šÏfJi·ßA‚.À°…&HÒYTjAKê÷‡“ÉäàÀa<âÂPc(]0ç‘sy’5~´Å"[—‰7¿wÎ9ïâ8Æ ­5' sS Z‡†¡µÞSU•Ôj4ÉC™Í¦Ýx…-Èwðc?ñcÈÇ£”.//?ûÑg•R;;;”Bƒ¢*1+ë§^xá…ðò³Ï>û­oý!U_E1öÅ\›”K´Å(ŠêZµüYÒLe`&Šy0Vôí´«q‡”R­eš¦Î#éfÑ’íuSÊÙáѾ÷Æ9×OûÞ¡nL¤µÆÖ¥t4ZÒr±V^IœX0LjðUàA(3¸u ¥n‰ :ØÙáQtÒåcˆ_|³èXK8/Šbi}ysûîpeåúµvgóv·“ìî}ì§?²´4¬ªêÜù‹ß}áûœ…<ôäãO>Å×^øîó¯^yãÞîÿý?øƒûzP)k©¸xxíêõƒƒC£ìÁî‘ÒuÙ<;<Ú‡Y¶ ¶x”-”0ãL¿7ZZ^¥”Yæ'7oÝ>>> B^•’P àœÓýAWW™Ö©Lœ$yV„a윣 ‚Ö²,Ê̹'õñŒÕ ðXhd&,È=-ÔmzBœŸ2x¨ëYçÞ{Bƒ%mžàœ“Ç!øÿ¨zï`ÛÎë>l}}·Sn¿÷½‡×ñÊÃ@š¤m `-‰¢b‰’")”hÇql4ÉŠÛ‰G±=’­±bí„ÊŒE’mY4%Q‘Y$¡hA(Q_/··SvýjþX{¼œÁ`0À½xçìó•µ~ëWâ$Žc ÌZ—&=S7MSâ2…-ZewÈŸ5÷¶×ñóˆHXzþ”Q¥›ckkŽÐOÿß¿uñâÅÅ¥Ö ¯EÒqlÒÑ\¸…~º¶SÈ•F ,r[³,ë÷ûX6á•ÝëõÊR{o{½âY¸ ¥T!„,K&ÓÑârR©¸”r<g‘¢ª¦ôÞ2 N`œ3¡ƒÏÎ{à'^ÔxË0 ÐÂx IΙÃÑH¥1‚e¡  a”ÖEÉ9÷¾M,PiÜï÷'ã{ë›'Μýà‡?têÄÉDÊr2ì ÉâTÇ“;ëo½}ý¿ø‘¯¬­=xîâÆÆÆèp?ë%œ±Á ßÔ5%Ä4º,KmÝÚÚQïýh4Bôûý[·o\{ûmBÈd2JSAk  „JA[p@¬…8͸Šâ4uyn)ˉ”‡|‰8ŠœóZkë´‡PÖ•sg½HEý¤ppP“ç#¥džçG†m Ö`”RÁ¥ó^kƒh !B+óÇV˜Ü— ‡‡(þéÜ"œ3÷Ïñhtj’Ä@ÚuqÎ#B)¥Ã8í̆>øís¨uÅ9oLíœc‚Zo˜`ÁAY^v<}ý­7+cç–ÊJ/.­¼ðÂ×´Ö£Ñ(—¦i£+¥”÷­w5Þ׈°`mÇ Ö¨éžQòHç׊;‡I¨}ðQUU1»bš¦Œ2Ê£HæùÄzÇ*Fã´ÈÇ„¡Rº¦!R ï¡i,!Ô˜–¿bÞIç`ÞCð-Ý3(KP ÐÄ;!8k¥”UYzïe8tÎáNÛßßÒDòk¿ökÏ=ûßýßÞ¼·Þ (ól¸à±®ç Š Š ª ªö%Ë|àœ‡I©¤àš¦à§Œ1"9~dÎùäpÔ[\ŒÇÿãÿô÷¼n(¥ãÑ E'PU £ïÿ_ÿ!<÷-¸u Ž®<þ¾¿ðW?÷yøOŸ.>UL!9ÁB–A¥!MáÄI¨j aoF»¥`LË[Õ¦ÝNÞC¥a0‡!¾tñQ÷w÷FI*]ð;û[ÔÕ‚ ÆŒÛâšÖZÃYQB¨“§ˆ²!¤±tÎìjWûŒ!Ð?ÙSJ]h³Ë!\pÔ9×*NïG pèíî3Ç ØC«¾Â‚ÍÑ@fÜùÐÕ»øb­uE Î÷ŽR>cý…™È¤nÚ2‘PŽ¿m]ÐÆõ{ â!È8êŒó›[;I’!mÔéëÚy7™L¢HŽF#Ü‚˜©0{7œK<gñ¾‹³Àç8KÒèðט¶dSÀßjIÚâ£qNSΔUUeq¼§”ªHôúñÁ å‘6.Ibç\Y”Q,­5Hb÷Þ3Þƒ5L&­¶„Q†èNËlëq’S 50„€Ö %H º‚·ß€HÀõë0ƒR`=D¢8‡¬”Àã÷_†Õc`øÈGàÏŸ…ý)œ8 Ž¥Ð4 $d X{c¨kÐnß``,H @(uÝŠ®˜„ª„…ù¥ÚXjç}Ú˾÷ÚKRrâ(£¯oÓyŽ€÷$K‡½Þ ŠÒHeUU\¿vS›œ1œíeª®kï£Ø€srŸÛ°±ÖÚ6ù¨´Ó]Î(Õ¬“a²Žoïœ à8çZ[ü5ÎÄýš–( ¡®kFešˆ¦iÒlÀ9÷JÆU·ˆñWPÄŒ©{Ö!ˆ1ƹð¼¤it’öó<÷@¬wÓé˜1FH0ÆF±¤P=Üëõ¬µ“Éd†‰vßt@=»ëqi&q†² |°Î! Û—e…§0N}„`B¤éÒŒxïÁ1!ñ¡,sI|Ý4SÆ ËR­güìÙs§Nzå•—9?¬êÂ{K)¥‚Ïøœ¤X'@U‚ä`èõOÄe  0Ö ­js@0Ï90zlß`Å@P à0 eÝþÿïÞÅ!–pkþ÷O£ðäxüÝÀ¼õ<òüʯ@žôÁ(ÆÀ"Z.¶Ö`-$ ”%„  i@7‡‹ kÃaùt´·³%%QRB UUeY„ë ª8éI ç¡Åtœç“"Ÿ0 ¼Sí&I<©kÔx´ÇXh眱NÄ9ï|g÷$«išÒÎä'@ÛB !°âÀì¨Æ…H)LFCk­ 0€@Q¨AH+ä¼(ʦ8“¢¾éZ3ÆaŠ‹éd¼²¼º´8Ôu•ç“(’@àð)„P¹± %‚R^ŒË8Ë|°˜aâ;c¦™þ²,ópëƒÂ%„Iʈã”ÕµOÁ'4X§Mh`TU¥D’Àtm ŒC’ðɤêõ¥ôpTDQT7ÍòÜ‘@ØÎÞ|Z”ù@‰ïm‚’kÀÀVg@1`ŒNÁ;BB1Àe«r–ê ✠8L'0@ÄÁk\LAp b˜Žàÿއª„'.ù0Š^ý._†µ9à„€he ©‚á*@àД@LÀ$‡~šÊ†½UkÉÍë¯nmÄGŽ !(p"0]Ƹ «œRy5777ÌílïåÓ[‹‹Ë“ýͲ,ñÞZ`4PÆ„|ZsΛÆJ)[k–›Ùz¼k­Á|pèîæ(¥±$8c”2€Ãù*.0Ƙ7ÿ í˜Ê¸ ”R”Pk­óµTÄhFQ¤ #R‰ÉdÚŠLpŠ€â™´cVD†€ƒƒƒ^¯·´´„§½ÂØEN„~¿ŸçEQTósËqT7M“Æ©u5n;ìú¥”EQ̪ÕÚñZ‡úbÙÞÚHÅÖZÎä  „QF(¡„ø^/ æ’$ºyëº÷&ŸVqÌÏž=[Ž{ÖxçÂx<6–;?¬ëÀϦ|!ï¥@è¦;B¥ÞÑ7£¬µEhË÷óÍûVÓ¬T«Íg¬5&A]T]cP–àüÑÁü<ܸŸþ4ܺ ;;à=$1|ß÷Áx[›ðÞwÃW¿ ¦`tóC6A Ày«¾òÆ#ˆè÷Ë¢Äsn4*«jŠŸ Én”R=cßǪiªý½­#kkwîÜÛܸK½´ºr–sE)qçÛ’s¾°Ð#„äÓ¢×ë¡.eY*Š"ÝXl§³K‘¿¹lÕKˆXÍ­‚’™ß¬cié,BpXò´ /MStÆ{ÇQ+»ãþ×;ÎྈÕ^¯WUÕÜÜÚRJ…ââœWUe})cÜüÜ’ñÞÞˆ€°Ö+¥fŒ§Â?»2ftÒQ®ðýÄqŒ>8‹Ãû‚R†Ü(ÆØùóçç­uÞç|<žN&ç|]ë#GŽäyžÓ{÷îÔuËç‚Χ˜sŽƼƒœ‡MUÕˆ¨ Åkkˆ[µ¨”@XÛ6ãÖ¶ër&ØGiʧ>øAøýÏÂoÿ[8vœ‡ª& ¨@(ø¹Ÿ…TÂäL@¡ö@ôTÈ„ ±B0ÆIŸÒ¡1†qÊ8¥ŒP>8.˜T¢Ñõ¬ÐÒZ×u]U c¬(ꦩv÷6ÎW³aò`д¶œK&¤³¾*k´*kD¯¥”(¤Æ¯lmmm8ÎÈP(Àœáßì>§<ãdB2£Æãr í¨ûøc„¢˜j] !€kõLfŒ€fk'(ÄÃ?òXO*0Æ8 Œž©85E¡)vÓ(Æçü O5”êsu Î`L{¸âIl Ú@¯ÎÁdÖÂ;pû6\yìC‘2ÓÉ_ÝÝ}ã÷?û‡qE•$É'?ùÉBÿÊÅ ç7v· 7*-I`¶Ð ³ýŒÅ}UUÞ;%ZªQ+ð„„`M­gêàŠ¢”’5UÎR5Qœb·„áb¡ŒF“µ£?qìÑG-ŠâÞ½;ßûÞ÷ò<çŽ{ï’$©Êº®ëG}t:)¦Óéh4¤ðYm ¨ï°Çcן묉ÌnÅV 4ê½W*®µõÞÛXk8£¬³ n‡ „àœ÷z½@@)Ͳ ƒ8ðÇëëë+++wïÞE­®fÎÏÏÏÍÍEQT–åÜü|]×ÓéøØ±cm\cÌ3??:£dÖ¹Öu]?º© !fr+ü$(\œ¡kQ”ãV–W‡Ãycš FQ”ç…÷!‰#Œ1 e@(¥œ3UY£» ¥Tˆ>^ÓxLRÚÚà?àiŠ%)VØr¡`Ï`¬\¥L•ôzs!$ c©=!"cRc¢($Io:Çcùíogskï7ßþŸý&dcìx2=‹¦'κI~taQÆ1M$D‚G­*#I’™û]üš°¬'øx•ŠqÔÇ1Þ­ÖÚ8Ž8çQÄq‰ †}Òzš¦ñ8ÆãbqùÈù‹—ŽŸ8SV ãòô™}ì²Oº$¦(VþØcõûý~¿3ËÐÙ•Í^¸=°Æ B)…’Ì™nìpŽ&½vÿ`×9Mhˆ"9??ê w:ý™w?6æ³ö\ôˆ¤°¿¿ãÆ8ŽƒÁd2A; .Z߇½½½|]­mD±¹uÐë'«kË›››H\’R²î:g!z!©OkDe”QJmýc£(F¯kݸÅÅÅ(Š^{ý»ÆV‚cVkßhƒñF”"cŸ…´6ˆt.¯,5M3™L¤Š€!">³•j –¡}JaÆäÅl¤˜”­g x)åñEQyRRèdqø¹f¬¶(Špœ¶µ³÷c?þ“Û»û?ò#?‚mït:õßÿÂ/<ºrâÿÝPN›}]zAyÒkt >`üt6äíß)Š~9íüȵÖMm)¥Hw§]r .)¤Öº.«¦i˜R*QÎã®Í\Ü{øÑÇŽ}`euÍ9{p¸WUE¿ŸÍÏÏ&¯Þ IDAT3ÆŠ¢è¥R™(凇‡]~Ü9÷üóÏ[gç0{o]ÝïgbãŽTŒ1‚µŽs6›B·øP€ „P\ºe•{ MYºF·u…3©'² ;´Öâñ©»`ÆKKKûØÇ~ýŸÿ‹þà<ÿÜŸ¢UNU8ò œ³étÚ4:ŸÖ„¥ØæÖÝùùÁÃ_ÜÜÜ™ŒÇ¬sôôÆ€³w„PØÙàÖ)Ë2Rq]7JƼµâZë@(5Æ-Ì/omí$IÇ©ËM’H¯µ–]-$‘<„Pé’RÚï÷´ÖZ›ÃÃCDªZ“ÖS³GŽr†ìocLÓ˜YÉ:ÏëNJd›Ù^Så`õL;ÕáýÝ~ÖÚ¦iŠÉô³Ÿýì{ÞóžÍ­u(e4Í‹½ƒ‘6uš&„³;ëw&ÓQU×”£•šcŒéFBnܸqçÎ(Š&u‰Å%¢Ú¸+X—20댑L-„`ºñi›­Û+r«q >Ï¡6–TÄ8ç>tñe?úñŸ˜©Ytîœ'IÔ(ÊêÈÚ‘Oÿ_¿¹¶ºò·¾†¾æ½~æœÓº±Ö–eYUUQ”!„¥å…º©Bp£Ñ¨®ëáp}PðqãiT×µ ßbcö’¦¨#Ç©s>N"Î¥mÆcœsi´]ZZ$¶·7£HðŒ‹²ª¥P4x°Ö•e¥’2RPÚz 2ÆཷÆpÎ ¼S-UU¥µÁ^Þ—º„R*¼sÞ9Û(`²ˆsmcÑ~a]Ó€ü/ì!„‘”¯½öÚÿðolm…àõZ«õøÎúiÞß±‡qzg{3÷.P@T,0ÇÑÍ9§´=´ª¢ÁÔWT !óÎYLÓóI•@gÜ[×5ã„1–×ÕÚÚÑ'O>ôðËKKÞ“Í­­­®"P”EUY–eqtëÆ-ÆX𤯨Âââ’”ò•_†lS“à˪ ”y.ø@@0NÉ‹KœÎL+”¸ŽñÛŸa¨¸8ç„Ψ1Ú”UÖï“©u–Rš$QÓ4 þë¿ñ·Ò$•Bzç›F+éFkm:–þp¸±±yãæÍHÉW¾óm(âŒoêÚj)Å™°ZcêŒáŒBIœÓ¼Ÿõc¡7xpžBH!#œ3!x‡SPÌ¢„RJ›¦ÁqZ×Z×ßÜí÷ÒÉø ÈÇÖk¥.°HöêÆÂ#%«:OReµñÎI!!« &˜Lxë(ÁÚ¬N<âC  g”‘º©eT-•¢M3‚ŽuŠ5gBÉ(Bz¼Þ…€qaŒ•R¡Û5!Ô9O­k'é·¾õâç>÷ÿ¼ç=ï/jsoc×:úÀÒ‘ŸùÀGÈöÎò\úÖÆí€2¨²4”5û J‚wÞY£)$!Ô9kŒŽã H)”’„¥ä Eaœúà¥äIyg'!8­›ËWž<þâÑ£Ç”Š‹¼ÚÛÛ&½ÁœŠ+Îx‘U^™Ænon1Îu0”PʨѶ—¤ºÖãƒCh*3-9 ,µ÷TJ%”ÕZpJ;ŸcŒ±V*…Z4*ú’Î9J„ ¤$„à SB#Þj+ŒÌmCi' FµÐìÜÆó¹Cà¨óppp€Rã<Ï1`Ü9§M­”ÒºÆw†N}¼³ç•,ûûû-¬À9"MÓ$IRéf6”ÂqT˾éênÎöxµ¬0O ëëëE9í÷³@ƒuîüù‹¼xæÌ™_û§¿CZ ›MYDZs¸}í¬wÆŸ!]\ ’#ñmc !R"·°™uµ³Ž:TÛyA÷‘7¾îw÷L’dgg§,Ë4Ëê¦Mò(Š&e5jê»ÎÞh¦pæ©÷¾ñ½ï±ÂÆ‘w€7>Ö°õ#&á|"ná%âDÅÆkqS±8æ¨æcTÎf”cG1âm‹Û ”––ÃŇ~xuuy2™4µuÎt ¨ÊF&RQYíœÑMÅâHJ9šŒµn²Aê5—\À¯õäù“—.žÿ‹O<º|äo½úúöþ3:¯µ.ho‘øîNAëžÞ.DzŸGnõÙ·vßr'¼38sÎ1ø[û ³ŸôÞ£ò! !&“ô‡Ã/|á‹ ‹Kº©o^ ï­Ö:ŽÕÌÄ:¡)Bú¡åɆ¦©³I×uÅ9Ãèhß-D¦ SíŸEºƒ1ÚZ+O’Ä{W–uD%„ BðRI ¼(Ê|’ß¼ysqqag{Ó9ƒ~ˆc4Ï×ÝQ$lÁÝê1Æ£½^Ïûwè½xèã{½T7ÛÙ‘¸ñ›˜}|án]߬ºE#N©DYVu]-,../¯äE)U2-r5œ›ò°Sæ‹+«ÁºÍ×Q{ÀvŠ9)Tí‘SétоT0)|Ý4LÈ$ÍŽ;ùÐ×O9ç<|ë…o×É'Åtš÷zý(Šòi9¸ œ‹¢˜2JCð’­ë-<ã48Ê”Š–––G£áÜÜÜpDZ#dsw×(ª¼ à5½Áñ]ä¿ód >B¡³Óa¶^±ë2[4c,@`Œb.©”‚À'ÿÚßÀ5Ç1JDð F ªªjÎ…ð•¯ü9rksóÎí·¬µÆ Y8TU5:ïò¼òÞõz½ÙÔÏHI¼Š”µÆïƒ7Fc}׫ 1´÷…¬u„ ˜8Å­ë ¡Œ¶‚«º®³B𲪬óq’Π椔뜑8VMS‡VpƒÇ§Ò3Ž6^a¸X;áÖãr6S¡Œ1R´ öS±Û¹lÐ.!_>øà‚÷ !$G àÆ‚omí|ïõï=zÔ{ŸªÄ{ŸÎÍåº †)WΟ¿{ýÆÖî~³\¬±èû`­ ´ÖƒÁ€RÚï÷ñýNò2'”H¥ò¼,óò‘Ë=vå £]ôÅ_úä_ûä‰'ö÷öÑz#I¢ï¾úò‡?üÁÁ —eÉæÆf]Œ’Á°?™Œ©`s‹ÃÝÀÕZ;çëºvÎ9v,íõòrº±µ“¤=ÆÅµ·¯zo¥àR)B"Йà½ï¼õhHÓÅAùΟ—)"÷¼s£pÁ…à m»ÿÍßüÛXèࣟ´hkÚ”Š?ù“?•JUe±~÷:cíij­M³¤×ëŒ6øõL§¹”÷zÁ‡Ö\Qh\÷S‡.C·ToŒ&Ía@M(!,x"„ ”0Fe$=¡W®<®kí½#%€ïÛ„JÞy!ÞI¦ña2ÞjyÛBÙ{ŸŠ2xð™Àl*=÷a8«a°,¹ÿÕž‚RÔUM!€R’2>7?|ë7¯®.­­Þ¼y3‰’„ɘf:M²ôÎÆZ‰!1¯Ë9/¥Âº¡üÓ¥”ó óÖᑜ:yú‰w½ûÔ©3ÓIqûö½ª¨oÞ¼þüë-«ëê«_ýscš¢È_yñ…~øé¹ùãìç>ñsßzþùÁÚ¦Òe°°¸xã­ëœÁ…÷žPV×µŠ)åÉÓ§œ÷U­ëZm¯½ýV’D>„P7z†fš.ƒ*„$`Ë]⽟¹‘âÚCnÖ0@`·µéìæÅ‹>t^®ÓRzï¹T[[[ç.\ÜÚ¼à aœS­]¯Ÿi­‹bjŒij+CúýÌ´'€çœZ „ï-Â5„cŒR î ´]!Í‘qç–R¢ÑõlÂA)mÙB)¡€j­eÒ[[[ÛßÞŸp¼3hMˆÍ%!ÄûV÷‚âÞyO³Îa ð¸¢ÓÈñÅH ¤ÏŠ“ÂìøŸÕx H)á‚NææÛd‹ãÙ°ÖUZ߸qcmmŇJÈðÚ[¯}ä餂§y±X<ôÐCh8µ»»‹Fv¸Op¢3NñýÛ.Ñ¡¨‹¦Ô?ðѧ­ÞpîÍ·¯Ž8ò@?Nß )][Züò—ÿÌØz}ã®ì艣ŸúU×ÕüÜÒ÷?ýý$xïL2DiôÜóßH{)OhïŒeŒù@dUUå!¼öæãñx:šîíÌ æ»recóŽsz<ÇI«GÜB¬³›õ!0ÔWã£Ãsö<d¢¨ij¬s>Ž#lWޱᅎH?;„[pÑgu*ÔæöÖüü<*Ö !q¬Œ1Ú4½^j-§”¬Á¦K7ÜôZ;OÛœ1<ç±»¢”ÏVÕÌ €3j­öÞK%è}/ï¡©‰ Ö4M’dà@)õöoîíïÌ †Qqêó¼FØÐ"À×4¥´®Ë4MpIE‘dm¸5&8ï8眰Y®ÖÚYKpúŽ&ƶõöh=qˆ:a€yn”ÒFìD–ÜPU „RÂæ&\ºï~<÷-8wî¾v·~»pãÎ_~èÒCo¼ñ†Ö祾u1jò<ϲD)1OÊBUåʦTI̘ŒTâ8¦E^Ÿ:yÆ[+¥¼téR2xå;ßY>ºJ)h]ooìÍ- bÝ»yç—~é—lpýaZ›úäéGî­ÝÛ¸KHȲ^Y–ŒsÓO`~qéW_ë-, !†½ÁåGN¬­­,-̇ý×ßx%Nk,NIʲ„NóØVŸÁaåŽCœ‡ŒQÎyàœÓÚ­¬,F#ÉPâqª×N¡f×.8¦Œ.ø¢i¸óUSO¦‡ãÉ.²_㕊­+N]×LòB õLç8@…²Öz°@pMðà=a3¸”ÌÖ(P „zÆX]!¢º.Ñ+Ë9'Eœ¤¤“¤Æ*œ6ŒÀÉãä“#Žˆ”RB9c !uY Ñ^7ÎJG‰çœ{§œÖ•w†Sˆpi '¤Ñ†áJFS{ï}𮹀8jé)œCšBÓ´Ê*k! $({» ”P Jµüÿ¬Z¡`5ö§Àœ;óxæøö ðS?R¿ïko¾õÓ=ôÈsÏ=à³,s΄à³^jLÃa †sv{Y/£‚—U£˜ªs»ºzô¹×ž_ZZŒNFÃùù¹•ÕÿîïüŸûÌïeýùªÔÓü¼MzÙø`’Å 'ìÅï¼tìÔ¹™œ=w:¨$ÞÇ÷ Ë%¡ûB™7?øC?:Îïíns‚+ï½qÐëÍY;qõÚ‰k´fh¥h­’RC0ïÒ‡ºi””ó>ŠcÅ;çT¤œ·Y?Þ;ØB@Áo mü~ZÖ©°ñð£ÐÜp $V „*¯F£Q𦄄¢(œ·MÓtÜç¶¾D M%B‚ê}@t€ôpiÀX믆0™' ­õO%­ôÊ`ëà øÀö÷÷ƒÁÁÁAY–Jbèrp„Bx ¬º&½,K"”GŸ)D[S‘ Œ¥(áà\†Þ»æÒ=½öæ— ®ašƒŒÀ1N[ó^ïÁy¨ Ø Â”„ZƒT@4¢B€¢†(‚¦€°Ÿÿ"d}8v Μ…­mØ?€~ GÂןý÷Ãáž;wîí·ß ;'Ðê)’%xЊHB†ÃáÂÂÂÆÆF’$ƒÁ€R²¼¼|çîÍ—^zYqáÑGK ¯½ñ½H !åt Œ•ÆÊ8‹iT…câ¹çž{ÿÓ[øö·^Êi}âXaFR𦠢diyµ,ËÃÃCã(ãbaiq}³×Ô¥ÖºipòG ¡Þ[BC@ttAÞw®RЕsšq ÄD‘lšF‰Ë*„·ø šÁŽ{Vø3Æc=ø@8±¨™çùšG ;H£ë^o8Þ f÷8V®…6!´ëÿÿ£e-sÂv*g!DQL³$&„H5M#D›D©g´ûAL÷@š¥“iµ½½½¹¹©‹¢(xÛï÷µ1!ºi!V·0»±ÎëFÊØ{Ï…@Oµ`mÁ!”–Mã=Žò…#œ3J%³0ÍkïeŒåcP¨*ˆúÐ_j9Ñh÷P•À9LÆ0´lTïA¨5 ý!”%,¬ç€‡å%xñ8v Cxê)ØÙãWà™g`~Œ!W®\ÙØ¸ç½oó2¡U±QÊ£ˆBÒ´§µÖåRôz½~¿¿±±Í›N§>Ø<›`æ£ÃÉ'>ñ‰©ÐåÇ?º½½»µµóÀê‘{·ï ÓÞ>÷Çþ˺vûjª»ëM[M5ΧÕ8ϲÌ9«­éeê±£ÑÁ`¸8΋þ4ãTFúàp÷رղ©W–×oßôÞ¡£G0–aÍÖºò Æqý5ME ¶×i¡m/t®³IJÇ­ï8ÂØ `ÿÅ9×e „1Î(e‡‡½4[YZöÞçM©”¢‚¦y¿Ÿu5žN¹”Ö:ìœs`»D)± A±<§Ðy ùŽVS×5jb»]•&NÚ4„ÀYëcˆ¿•¦éx<ž… ày¬µŽ”ÈóÜy¯K\ÄY–EQ4Dç#™¤YY–RÅE©ó¢i _BêªN’߀³!xÂ9WJ Á“$5ÆÄQŠŒRÆàýOÃÛ¦0ÂÜ\K6- au¦Shé§‘‚ 6õ ,à` ”SÃö&¼~.œ‡‹‹ðÊKE°½+k?]–eÓ4.\øîw¿‚C¶xÓ4¸ds.€4GøÝÀÎÎÎÇ?þñG/?lmóÝ×_þÍßü­¬—Xkü¸ñƒºê/¯lÆËGxìáG¾ü'ϼöÚk×n_ýþ~ȃvÎ]¹råÖ›¯<ÿÊòÂ8Áeðà}ô‡u]çÓB)å}hšfyyy:N&“,Ë>úѦYLHø™OüôŸ|é™Édªµ)¹n¶÷÷9-_}áÅôþ—[7ÆgV I½·E9=~âÈ‹/|ûïýý¿ó¿ýÓ_ÿö³/.,  ¬«H¥Q$oܼþÄÂâÒòbUÖΙ<Ÿì=xîÔ©SÇýŸý“c«ËûûûØeÎQZ.ÚdPBbT©Öº£\ ”¾àÒdŒ…¶³hÈóœÀßüoº¤¶™[X¤”®kë¼qA©è¥—_¾}óæC.|ý?UÅ"Š"!dÇI .«ªtÎh#¾ñ‹Gz@’$ŒJkçBJeãLPÂ8£1+3°Ü,Ë’Ää)"Ûø¥Œvú‚+B¯7HâdnnnowýyZl(Î8c£ÃÑÁþnï\]ÕÁ‡àC‘çÞ¹àCEFk)¤Ñu¤2H¬³®*+žQºu÷6SÑÅK׎uþ$0€@’µ‚“áꢲ¬õ&‰" )ÛX©Á‡(‚ÅE¨k°æçAk¸w(ØÙF ¬ßgŸ…ñä­®®ÎÏÏ—e1ççç¦Óéd:£4¨ëFJåœ×Úx„@€]]=*„šNs!Ä[o¿yëÖÍÏ]zì±Ç¿ðù/./¯¸¡"À—–ƒu'8ræÄñ;ׯ•ãÑC\Ø=ÜšL<æÚÕ7¥?û‰ÿê­×Þ¾qãV¯Ÿ8諸 „lmn?~‚âœõÎVUÁ(„ à>|óúÕ{w7¼ïƒªi4cÜ{`L0ÁBc B`ï´13”9àZpÎJ) ¼KSä›Î ¨Ù™jŒ©‘ŒyΘ¦iƇ£ååeìè“Ar0špAiBQ$‹ª!„!ŠÄگપ"ÕfB'À{ £|ç;ޏç\p[mfŸÛñÚXdøß×]…³gÏj­7îÝA „P–•êÛ¦.›º¬ëÚYÅñ ¥ÇãÙï Ž½·uè¡ ­i7ÓÎQIù ûì~æË_y†RzìØÛÉ÷ó?£è÷¡,`sýW ÚηˆŒã¤,K¥â¢(VWŽLÆcSÅL²ÑhdççÁ¹­í½›×*JioÐO{‹üÌÙsð¯ÂŸ‚ý}xï{áË_­õx<Æ–%Š¢óçÏF£F·Á–hU‡×Â\ò^¯÷àƒ~ùË_Y]]ýâ¿hîõz¿õ;¿·´´´·wpôèë<L=réò7¾úì{ßýN;¾»~óÔ‰µèÄñK—/­ïÞù½ÿø–1Õp®§MYãÿñ{óÍ×=zïÞÖÒÂB“:J‰iʺnÆ–q ú[¿ùoŽ;öÊ‹¯CàÃÁ`gg€¨næ !„ðÞsʰçBØŽóNH0¶u&„Te‹[ãÁüN€Óýƒ!„3›tÊ}áòåËðŸ}Ï“O^¼xñ`zE‘±M’$œÓ8ŽCØrÚØVÍE Œ3‘¦)Nw°OD§†(Џ®†FpÖꜵ[ä®ÏNÜ,KªªBþQè^4Àt:~öÙg›Æ,/›¦ªuÍ…’Ódq$()ššqîu…yg›É Å®¤¶.”Re™GQä4MÃ(ÆéX$Áðn´qgñØqg`ÿ~ôGag žÒ„øY”3,,,hãƒaS;B˜÷¾(*)ÔsϾÜëõª¢ÜÞ¹wäØÑ,ËŠiI)]\\|îùo®;ú±ÿX”@¬àøà „N›Õ ðaâñ±½½ûðÃnoo£„sŽ„!ULm£YÖßÙÝbŒÜ½w;ë÷•H‹²ô‡Ï=÷\¿ß÷w–—ÔÛo¾qþÌéàôîö€Ÿ_œ¿ò𣛻뗯\þâ—?Ï9_^ZûÃ?ü£_ýGÿ*H&U¼¹¹-”ZX˜‹âóF‰HIèýÛ7ûƒdmmeýνbRž>{6I’Í­}J)¡,KÒ¼˜ÖvKEYø‘¨¨ã!µaªè.mŒeLäyÎé;ô¥TËQG²íòµÖ\Jç=“‚ %ñ¹Kª¦Žzéx:©¦¹­«˜Kb-7Þß“”ygh ‘Îè4M¬·ŒK&c&3ÅHc,þ%T4˜›çò+jÎi]WÖŒÀœ3„¥cDJ.Ã$R´C[^^F¦ºÖº,¦”Ê4é&y^O75ž*ëgÖ žOœM÷ºaÁ£9A@1*)¡ÞIÊÀ:ê],xÄ™âN›r*tÓ£„°“ÃúH +}xù8µÇAš¾œ[¬Íg«‰ìmN‚ ¶Ñ¶¶¦ÒMÑGti]£ç“äê›oܺ~­T›;=OÆ;ûÙ Oel4T9¸–æ V0Âx +kG] Ó¢2ŽXO)(.\zl<žÆqj­_YY{ì±Ç}`8œÅx²¿»Ã‰{Òøf”qãsÎL‹Ñ™Ož9qôì×¾ÉY8}æø…/íîî&QÚèÂÙšÅ1±­9aÄc,Ë2Œ0土8qMnöööæææ„’ïzê}?÷É¿þ­_Ñ¡yêƒO}éKïûîKß^YšçŸU}¸.qºætKKðÞó6²âI„Ž¢Èÿâ³æ Ç÷$ay Q×µRÑ4/v÷¤”;;;XÒ.//{ï÷ûý>e°¿¿ø(!!Iô Bxç\Q¶‹CÁÜ^ï=!Ц¶¶åÄÃ8B4]=:#Ì$¤³$ÞÞÚ[Xb.Oa:F*¦”bˆcÒ{/¤h‘,!¥‚¥T0fÞIa¬ o¸]ygܧCg ß"0Æ·;;`<ܼ —¯À³o½gϾ¼w0²Þ­­MzÙþÞ,-«r«Ù*Ër0èGûׯ¾}°»%T$³Ä9÷ðåG_ÌË»ë@|É(K¸‡Û·áÉG!I ª ¬ ª`2™ BrU¦µ~øá‡www­µÏ?ÿü­[·öööò<ï÷ûµÖ ‡ãçœ+yâø©W^ý.’%ü_ÿŸzê©?ùâ­=}òÄéÃýñÞöá±ã'ÞzóÚ­Û»O>þø™“3îÁ«Ãƒ]Îéîö=ß4 «Œ1ÖjÂiÄcJx¤,ê,NCsssÛÛÛÃá°( OàÂ×Xܼî~îk_ùìïþö}ä#¯¾úbÒã8ǽ^ •€n~¬.­õ”µŽéÞ{œµvÀKà3Ø÷B’í!ì\ðÁEQžç§OŸÆÕæœÙØØRrÎ꺮›‹'¨÷6Ïs¡”P’ó’$ ®µ BTuºu]fiJ)Š‚sŠ:ß4 ¥lÖBp@Œ¶ðïz×»®^½zýÚ­(ÐÉ×××ã8¶~ê$± !XcªªªªÊ;¼Ç¡+ Á´¾1¾®Í`a76ì¢^€t–ÖXmã%#¥lwïÂÙsðüó°»νuw}saiñ‰'Þå ÄQFœ¨ëºª Ü`XÇ?ýÁ--®¾~ýí§?ð'Ÿ|÷½wÇ"Ë–# Ûeº¹ «+ "°ö‰õõ ˆ›®¬¬`äÁââbUUq¬ž|òÉ—^z)Ïó7n!²,+ë:ÉÒùÅ…[wn÷zƒ{÷î?wqkcÓi£ËÉêÚÒ÷^~é™/ý™è¥øò‘cÇ8uóÚí$îò¯ÿÔµ«7>ý/þùÉs§~äAÎé;·.]8;>œ —û\sÆT9<<<²Ö§IŠO)MÓõõõ_üÅ_üÊW¾rýúu&Øè`ï·ÿͧŸù³g.œ9ûêÕßþWÿ²,÷2£8æì Hk:¢:Ï£^¯Ç ðNƒdºpì)tTß8Žq0€‹éaxãBÖ××fcÌcÇŽ ¥ÔÚÚÚÚÚZ–e8[k“$Á2sgE¥öò3Ò;ZEA'ÆÀÎi6¾Bà gNxjâÒyýõ×wvvâDcÐãñÇâ‰'¦£‘÷^)Ž’Ú©CÑ£ÔDв‚1mä!îUÖÙȇ.›ß*ò[[°» Uó Ð4M𦫫«ÃကœwŽS–%©5fzpø?ñ_>õô‡õŸüÚ•'ßõ©ßø?ïÝ»·¶¶fŒ!$h]W8‹‹ 5,.ÂÝ»0?ߺu ‡Ãýý}J)šÇ#röìY<_ñiã-yìÄñ¢®ŽŸ:ypp°±±ñê˯ç2Ž'y=Ék*DÌ#›—Õh:L{Šq)ÄÁîÁÎÖ֥˗?ó™ÿpôÈjUUƒl°¹¹I”yÕ4jCJEeYyå}›]Ç1Î/ó< ‘Pw¯ÞªÆ0-þâ£WÞ剟û‰ŸÔyƒn\`8‘™iH°Ôœ}ã8R™­“6Ê0ë±58/Ër0¤i:=<qJ‡·oßî÷ûE>¥”:kªªÒZ+%nß¾“áp8*xçÕfœí÷2㜨¥3– øRJc\Ö¶ÅŸu`Œ¡¡Õ„Ì*TÒY¡[kÑ£Ñùùù݃ƚgžyÆk›ú™D‘>ÚªþuUw–sII©HʪiHÇ 5]0W’¨Ŷ›J0¬If4Âçà\¿Õc¦ T¼8¾yóæK/½(Y[:RMÆÖZS×Bˆñá!ñ e²µ¹û{¿ÿ¹üð½öÚ«Æ…ù¹9B)8+”´õO+ RBÝÀÉ“°±ÛÛpôØ‘¼¨ñ‡Î¹~¿ïœǽ4fŒÇcÝ4i–aMRkͪªÚ=دªê…çž“q,¸2Å~Y˜ŒU’.ÌÍýäÇìw?óY¦¢{·¯Ÿ=õÀÑ¥dmmnwoãöÍ«—/?º±~×;Ê8#¡!8cÎ!,Šb£[3nÑO}êS3*£äboçàò¥GAÛ•¥gËq>EÞ N 1µ>Ë2L1Î9cL+ -Ù²ª*B˜sƒÉ©'3t sšñP¹zõêéãÇgÔ»õõõÏœ.ËÒ{Ÿe!-†äÈ‘½}¾¿¿/¥œsmš8޹³ÐñIà8gB–~§¸j8k‡UXSj­“42Æ`æ{èxò>`õlŒŸ‰fŒ1ÆÆAaMˆz=J½µ µf,*«:2J©ˆ"Å™³–zg­-­u÷ñmgBƒpŸæuf³3öÞ „RJA×'ppACUAídY¶··ûï|gnqáôñÓ…Ԧ΋ zâtã³´§TôøãOVãÃñö–ÖH˜N§@ i@èõ`w÷ag˜8 ¡iWžçxÅA§ož››óÞŸ}ðÁ»wï¶4B)£8¦”gûýþÎæ"wþÊ~Œ1v÷îÝ4Mw×oeýþ‹/¾ü§_üÒÕ7_?qêô—¾ñõ§ž~^ïþÃüw¯_}ýìƒ§Ž¬­|óß$ž1*!Xk5›B£½1¥à±1èê@çœSqê)cUZoµùÞµ«óËÂ<f¿ûÝ_ÿú×q&?]#lö14KP¥âÙÝ H£šÉô8çišâì{wÃð“ïïï 4øàìÌ`?Ïóét:NÓ4-§VrÖ¡ÔÜܼ ­ÕNÉf‚cJÓß:ú³Š¢(Iï=£qlôðâÃeÄc ªª:<<¬ª¦×ë¡BpaaauuYEr:1”òº®¥äQQ N7F×Þ´R‚д*a·‡‡%¤Ë¡œqeð­ZkË¢š(@°¼ ƘétzîÂ…}èC\Pª@J¤vFÆòîÆúÑãÌÏÏàç"É7îÝJ˜Ày/Í”¥`k¾ö,|ãYøÏ=ßüæ7¿ùÍo¼öÚ«œSoL“çúÿQõžÑ–g™àûÅN¼·n¨ºu«J*•¢KÁ ¶å6ÆÆÀ0CÛÄY0Ý€Án{ i±zX0COCÓÍ‚nfÖ0MÀ4˜ÔÓ€Ûc$ËI–•,©JT¹n¾÷ä¾HÉÁ³¬M¬‹z×/]ÿîïúÞÏ}îsBàB²Bþ§Œ®oðZjÙE$ª(9§.ØyÒG|c ú)b…{÷ÝwWeŽKÕ˜úÓ4 ZëXF­V«©)óe•|QiÚÒZSF¹I’!ýy@Î"n{R xYºR Ü#nñÐå<òÙZ¦!'d'àr³¯÷Câ8žL&œóÙl†Mvc6ÌëWkmÇEQ1A¹ !Ì7ïtm ‡ç{Œß‹×­5_ÿ!Ì5Ò(…¯~ÞñÎìÔ]÷ìîïeYö®w½k0¬^;{öl‘N«ýê™WªJÐó›ÿúì¹óK‹‡Þò¦G/]ºôþúW_;çUÖAÃx Åä"DJBFYY–¯¼ò b#Óéôàà (ŠDd½C«GÖßyÇmÿê7~ñ¿ÿí_îlL»½vÈ+FÒ^œvö?úÏáåSÃGßúmU±»»»{üøqÞMºí;gù4–|:Çi²µ³·tøÈ,/ !KKK‹‡Û›76ïþÖ· CI)N0XøVK*¥¢X£”ó”QΉ±žPż(§KË E9‹“Xkµ²º8ž0ò||åÒùý½ÍÅÅÅÅÅÅ7¯!ÒEÑt: uçÔ´SHHµ¡æºy[ÝUEQTTåܦÔZ“ç3޶ÙTäùTŠˆx·°Ð¹pþÌ>ð=ßõÞïÚØ<ÿõ™'_}ñ…ýéŸRœ¹ã¶ÝÉAå¡ÒÖR^º t%Dtõæ•Í­vúÊ™—¿ø¥/ZY ,X¥Oßwÿ§?õ‰¯]ºÈ©HZQYäXhaÔ˜»g­NZéx8Äz@ Aç“íH !Æ8#»;/¾ðܽ÷Þ»±±!¥ÜØØxî¹çnÞ¼YŸiïêç‹h?Ö”RÎÚ¹úëÃÒ[vÕ)V„ÞZÁ%âm{{{¨¥”ZXX˜åñãǵÖ{I’(]cf³*IbΙsn2™d6cÌX+eä<Šº¯ï¹sÆ‘}ذ_¡æ¾`ÀƦ‰Ò PßÌÌðÏEѬR1F;Nbc2Ž9ç Z<$Idœu>àp‹ LúÍÚ‚µ¯·üP O`Élsï=bV(Þ´ZPUIQé×Î[_?Þ]è¯,¯üÕÇÿìùçžÓZ¿ão?vtý…^¸ýÄmð‡ÿéȱããáp}íèÑõ#ÞXÐö-½E@<÷,ÄN¡È(Ë7Ž"sNþpÖ”@).~å©/ê.?~ü»ÿÇ÷œ;wöæk§NÝ~íêðÌË/÷{Ý@áÂ…óßÿÞ÷}âŸøÆ7¾±¶¶öÄO¼ñ10z#¼ø ÞãÞ©å—ÅYñ6 ÇT•f,Š….Ð`Œºxñâ'>ñ·w8õÞïüöá`ô¶·<¸»÷žƒÅ¥#ŒË²˜Äq¼³³3NŸíò'ÿß¿Y]YÙÞÞl%)„À)[ZZÌŽ?ñ¥/>5ŒµÖ‹‹ýN§£TI‰ã‰­ÖBH’ÄEQ$ ªu QeL(¥ã˜¨wŽEI©<8RJŸþúWÿ‡wG»Ý~æ™g&“‰snñÐjYÌT¡ãX²Úx·Ûíæyî]µ¡Îà§úg¼s¼³Ö;G @ð âØ:##Þë,üéù˵#‡ã˜Ý¼yI ¹¸ÐO“DU#T•E$eNr| £*ðVW…UU0Šœ•œÆRpJR±”ù¤ŒÓ¹ /«…–šà¥”„à)*š:K)AÝï<$I¦”`RÆ@yá*S™(b‚ ”º@d”¸`=ãe Æ8!”jŒBjmŒ±8–jX¾Ö0‹¢(¥-Ìbe¾èì€1` ¢øwZ­Œ„ÞggÓI¯ÝùÑ}“»î:þÿôZ]^ê·Z_úâ—×;väèÖÆöp4~à_¼r•Æñúm?ä¸töö€P°ÿ-ë},"F%” e¨äÒ[GB} Iš)­ç›Ÿ}ò‰(¥ûû×u5Tª&lllæ“iLI+ŽÛIÒI³7Ü{ß_ÿå_˜²ˆ8I#‘Db}}ux°WNËb:[\X˜LÆœ3kmY”!Ʀœ²T‚ \Ãçœ[m¥Þyθ³Np| @Z"£!x!8¥A•%%auåð—¾ô•ÞÂò·½ë;NÝõ@’ö÷÷‡ù¬\Z^žŒGíNÛjC ÃM!ï} eœ$)¯ïþ<Ÿ’÷Æ”µ²Á`°¼|l0äÈ὿|ùr¯× óM\j­UÚje¥8Ck ìÌ0#7áÊ9·x¨W¨ á',›š ;2B­¸†Y8Žccu3go.•s~lõ >gã‘”qj]˜¯Xc“4cÀ|7¯¤lQ¼€[÷ ëkv x œÏM#Ð@‚×ÁÎùl6Ùíîöxø‘WϽ|õÆfe 4ëvGãa¿Û¿øÚy¥JÆÈÖÖÆñ;ïàÍÝÈÊ–˜÷ÿ¢onÞ=¤›` LQiši¥ÿæoþö{¿û=.\.ãl6šÄEeVë)· !øà:Ýö… Ž=ÖëwûýÞ]wZ=rôܹWÞúÖ·~åË_Ìó¼ÝnTi¦è€kþs!4Ú<$|x®ÚÚsl<£'J2Ykq"‚ ©N§“$ v9NÖ˜`ßë¼N§ƒˆ:nÐzïÇã1«}Œ”R¸=‚6¶ö’D“€6:JiÌÅUU¥iŠô\Tè÷ã8µvnH€áì µ òtðhbiÈž{!D’$Q¡pþ¨y“‹:EÖ1Ö‚Á ý] H]Xc áìåW^ù½ÿðûg.œûÊWŸYZ]?ûêk/Ÿ½øð#oîv»qI)¤äJ•W®^ìö²n8‡ÍMࢠÐ\³†=“¨M³ð” « qC@Ó¹8ŽÓ(}íâå³ç.æ•)—[㯜ãQ¶räáñÕ¯^åœçÓYÖN1Ãá°×ë D³¿¿íÚ5˜+»Ï‰6ÆóÐðÎP΃Õên¯ˆà+Uj£!¹6 ƒ‹R%eäóÿÙN·µ°Ø¹qóê³Ïí}ß÷Þµµµ‡zˆÕæ68Gˆ C‚ŒóÎzNן3”)ö%ÈÊÃGŽl{{{<ã4¿ªªªªð àü½WBTKkP+r%£(Bñ)W‹`Í¿! Ô€·Ã9Bµ}z»B²,mÚ¬ñx<‘=²¹±{îÜ…Ñp,…Ä€×j¥X?„D$8çÎ̓vŠMðÃ×Lk]sÛ_¤ â…!4ˆÇEJ™$1X;_bÖœ›ªª*ŠR1ŽiBvv»‹‡Þõï!LþÍÿÌsÏ¿xüÄíiš:ç8£ÑhñP¿(f>ú_¿­ ‡ å<<ãå5‡ƒHsñx{y­W¥”Êó2Žã|2•\Ä2ùæK¯˜@XãLDÀY©4aœËˆ0¾¼xˆ‰£ÈKÉ)UE™Fñt:½qã¦R M“õ-Hø’#˜ˆ7¿QÔo8ÊÍO[ÃÆ¤µÚÀÜÍp:;~dq±»´´¸¹usssóÛ¿ýÛы٠‹§u¢æ-Ôt:E2Á|œÚOtÞ€onÞèv»¸Øì _)ιÖÔ”ç-^"þ2ŒXøÞ㯄šy„Ñ«Õjå5.ØDDò£H"é K°ßBTª¤„QJƤ2Æz‹‡x€›×.qâ£8EKDìœCWwd¢Æ ï¯Ë•ùæx1fQø·˜jÙ\ÌÇ"1×{Ÿ¦æcØy¿oí<{´ZYQL²8Ív÷þÐG¥Œ"Š_:söCùgÞêòã?F)_ZZBBÔ•zů IDATØÛƒƒ€1ŒsÜ¡…Z+ßUä¯a¬Eq¸ƒƒƒ,Ë:–RŠP(fñk×nÄYëMoysQÌ$NUÖ>ø²,‹‚5»b8,ÅÑÓ&›¹®9u:å¥hE,í«B}äÃüÞ÷~·ªÜúü{¿÷(‰÷÷FZ[ç€3F#ØÝcpÄ5¿ÿMˆª§ês¶aš¦qDQ„’GxΪ\·Û¾víÚõ«WÖV–Ëñ(a4ÏÇív²³³1›zn–¤’ )8 ¹ TY5upó츺ù°[ÜГÑ×Z–¯·žÀöª²˜¢ÈUUXRUž³€fíÖ3_ º²¬|’Ç|ees2ZTãÉñhЋ¿uݽ÷»Y©t+nQJ·¶¶pn>Ú)Ų}2™šGK(@xÝ­ñ¦iÒ:Æ?LÍùhêBS‹íB¬Ò⃌(Zkc ¥4I’,ktƒ5Æ•¥ÚßOŒqÆhf™O)u6„zíÉ#_XìO§S¨Wõoø4K·Ô¬sÑÌøhÀ‡ì¨åK›j'Š"Gx¯Õ*K‰ø_ýæoìþüÏý³ñhúµ¯<¿¹±‘&Ñ™3çî¸û7S6Œ&˜ çÆ§ €Ôïj¨Ý› ïÂÃPÏAŠ¢X\\,Ëœqg½&Th]½üâ7^I)¸b63¾,fœsçlžç­Vkoo¯Ýi F0ÆFqJ)ÅŒßP&š ü`ÇžŸûh4jFðÖÚv»k¬×Z/ô;¤vŠ£@9¼º˜eÉÖÖ£bóúæÚÚ:÷1&ELÀµÛÉ»Þõ®¿ü«¿È§³4ͬµœ3üEø~ο|ÓN6eeýŽRU™Ñhrß}÷>ÿÜ×úý>ñEš&Ƙ^¯Ç9Å ÅŸÐ˦îįux0ûãÀkØ5Ý?|.ª›¡¥4xpΡf¶RHâ¦{»‚ª*e­áxfƒ8'Î@pàÁ¥q¬éô{U¥Ù-îüM ãqKD*„“qžµæfØKqޤr¦”AvQ;j+ãz>2q¿íßõÊkðÿ>³Ùl6žLžüÊ—€0H[<(ŒB$ a3Dš9dUUIÒíõz{{{x”ƒA¿"³ çÄ,Ë7‰x³ð³Úí3Ë2Ô™ÁÇ1œXÈæy›}Zë,‰1òCM7¡õBþçx©Xæ{Îc¼ãM”&Jiˆ¯§¯˜=›b š©Ía)¥Ø‘ðZçÕEsKw€¹—.@SŠ®ÒPä@æ½ B`nx ÓjVTºÕé&YÚ{O<ùåO~êï¿ó;Þé̪CÞx<ÖZ÷úým(̇œ£$2þ•j­¹`ŒqoŒ•‚h­!Peã>ŽS oa ¤ÛïTJs9çŠ\qÎ9ãœ,Î:¼³·CÁ BüžÀööv3K@ž%ž'l*­µyžE±··‡[§ÓA²Ò¦l­õ€/­™­·£Î¹étŠü=ì±iÈriš HÙ´/x˜D­áïæ;óö1ÈÚÌA=Ç9¢‡XÔbdžísCŽÄ‚'Û…(ŠªJákƒOó 2!š].!€1ðæ$à[ÚÄ9ÌI‰'¡ÝI­«ÆÃ®ÔѵãöçÿíÒµÍޡÔÅ\ÄèÎö^§sÍ{ØÝ…Ý]ˆ"¢a Š CØÈã=Dz ´Z­'n_?zPŽ:Ãi+;²¶šçyUiïAˆ(ŽÓˆR&M[W#ã*mËN/e‘ŒÛYÐÞ’ ¬áBèJÍf³ª*0«DQdwÎÏ8ØPZkqÉ/n™WRr!D’FE1{öÙg;Îpx$‰1ÊXÝét Œ­Ê#‡—œÕe•“àºÝ®ÖiwzƒÁ€1vúôéÍÍM!½ýíoǦ%ÔöwÞ{ ¨¥ïkz!wð±Èó|aaa:¢O$t»Ý•••,ˬ[¨M`Œá,j¯:<4xDÐð<„€NÒØ´!ªšeÇPë¬7§¯Íõ)|S}°è+ÞˆdÐH&Ƙrš7MÔŒ§î!µy ÚHøÂÿ‹¦8-£”" Ë97ª €Ú’06‡ó0/­šLGº˜«¦ÃƒW®¾úêùû;ÿçÍ]&³B»Y®6¶w€R8Ô­¡ªòwqç—TUÕl6Ã’!3BˆñAȤ×_œNóJ[!üæÆ†”RÊ€zÆ8Î%§Þ˜iU OŸ¾£,‚ó½v‡g2bBˆVJÖv•xCF£¦ÖÙl‚Cgp¦€P!D©ŠKÇq ­5ÿêÙWžáÙÂÁ`Ï{[–eYæZkç !ÄTe•Oˆw³ÙdwoÛ/âxuíÈsÏ=÷Žw¼ãÎ;ïÄãA)ít:ï~÷»q[Á{?â Jëù)ZHᶤ­=(z½Þl6ÛÜÜDq"¥Ôp8Dq «ä|\¬–d2µÝž«¥Š¢À^•Ö’;¼6$§5g*ŽcjÆ-Pû~ã{†Eðd<ãˆs.ä¼f°Ö`e©B"‰°äÀQV¨-émí\j.†ü¦BÀÙ ©W_0¹QI‚ :C ¨‘à|®ç*ˆpUÅœQÓñl¸ËÁö:É3Ï|ý'>øÑ?ýøýÉŸúµn<šÜ?´R˜L!Žçšèí6t:,›‹_ˆÚH ‹“V«…FÚëÇo[\\æ"Z]]¥‚WUÅ¥ˆ"a­F­k5ç´ÓiIÉ%g8ï –zíÇ}äØê‘«^@m©eŒ1æf“s ‘ˆ±QLã”Ýu÷í CjµQ|¬(£D)Aæ²¢Ók?ûõollÜüû¿ÿ»'Ÿ|r2E1î—e9¬©–—)…4M•5“É„K1™M1Q¯¬¬;vL)ÕívsÇàövœssΩ'ŠCÅ êv»ÖZ)ùþ`Ð`û­V+˜ ·qnI)E±+Bˆˆ#<µY–µZ­Éd’Of~7Š"ÔcBV KÄoñk#$ÙŒãÓ8nh Ío‘RN'3<Ь&S !´uιà<œB*ë8—Öλ4¨‰ Óæ”“úãë*læL3SÅ™Só …ðzóE@(Ešõ)J©ÓÆ;— €‡<·Crck#êvÇ“™2î­oû–Éd¶³³³²HSxêIh·1˜L Ó2'Ožä,a<>þŒÒ•sÁǘÐZ÷z½,ËnÞÜ^^>”¦Ù4/ ÛïWÅl8ž.‘î‚ϲf³ %1sô†Þh£Ðív77·îþ–Ç···ï¿ÿþƒ½sçÎqFP+ó‘GçŸ}öÙ×ÅyBmlŒå>§Éd2Œ„¢*;Ý–sο?y x˜Ê²œN§8yÃ(BȲ çxãñØ{he _>ìºð¯aNã˜w3·ò?0¼‰×=¥æJcP»Šá?Gˆ€X o·.„à!JqŸ¦©djaa)e,d3z¨¹óй/6x´ ” mœÉy¢ „0B½¨÷Œ¥ÀšàÀ¨R×¢ª”²BÀÁÁ~§›k”RûØ?õÔ—?ù©OBnÞAaù?¢´²¨|˜çSJ)EI–eRƈø^¾téì˯üÝg>;÷wwò§|2=òÈ#«««˜U( .‚uŽPZVãÜ:űç¼4j4;±>Ê'ŽÐ;î½Ç ‰c*ÜÌlæZkAâ´Ñe¬c@tY9mX-gÜŒ¦æ]<A™7–”9m$ãÁºÁ`ß9ã½c‰Þ|ss:¥tUÍ1ŒÇÎ9N„àQ*£ÄCÐZ9Sz]gÁYJÁzã‚ÕºJ¥”àœ“1Ç !ŒsÇiÚîe”q(xðL0žKá$I&yD,u `-Øž“:ÍfBN›Õå8½ÔíX ŽJˤe‘g‘2áТ±põòE£«ûî»ï+_Jat·Ÿ€~¬çñ¨ÈõC?DY2ÍgU>ÓœeªòN–-÷—!{­V+•‡W³¸Ã ˆw!Ÿƒƒ¡³>IÓÛî:µ´¶¶²~ÜR§ý¯}ýùGÞô¦¢, #"’ž<i ݤuåü•¾þât2C£GJQØï/…¢À(E!SÐi·‹<·µÛ$ 8ßÝÞY^X¼ëÔÉ׃5Íä 1¼€ Æ`ñw«18æM쥪ªÂîêñ©¯™GÈŠÀò\k @£(©*­µmøá”0ÎyGˆ øz¶kqÎk&—h€ÕºÒÅ5Ôyâžjl ?å,§”9çQçŸRf­sÖC ¦´ZÙ|Z¤YL Lgà´Z¼†~¬‚n V—ayÊ‚…,Î[Éh±7Ëâ)¸ñÊ¡Q>½ÄÂìÐÛí¾ùâ¹ ç&€K"Åœƒªª"Š&“Aó(bZÆ”y>V*b·¶¯j“PkG`ëͨ@°¡I4õÞÞ^§“^»vi:æù¸,Ë×^{íÔ©Syž72ø¼š ¼iívûä'YFÌ-JH-TˆXr*š©)Ÿn zïU9¯ô¢HdYvñâùÍÍÍÙlvòäÉÑhV•:Ÿ•iš‡Ãýýí#G–“$ÂvjyyùþûïŸO¡h¬)…¦Ri;çÊ¢ @ã«Ë+çϽú¦Ç–Œš<Ûs:ÕRJ±´Gå:L²¬ÞÅ.êí"¨ýQ !è …‡FÔ"V”RUYJŒ5!’"„À(>(¥°'µé2çyFÖº[‘ :ßeÞ»zpÀ0Ë7Ð)©™¼XdcåÍI`)P«<¥<‘Rž1ç³"B©2¯ÁþþŠÚ߃‚ çÁÚy1À)U>GŒ‚Í@´Ú{—ˆ„ÕÛAÆÀì¡,„iÚêõzÓ¼ˆãx6+ç-¥” '‘RÊ{%‘sVéb»×ëE‘pŽ@`ÖÙæ½Å ^k=Ïœ}e8Xׯ¶ý×ýׯ^½Úét¬›¯ÖÔUº¿5|Ìf3T÷ÅÅt:mHz±ŠÃ3Дû@)Eó.Ç(à‚„€¦ªv6·‚ wÜqÇx4½rùúê'9wvvªªxû·¾m08°NU¹Ê²ìÒ¥Ko|ãoÞ¼É@r!¹õöI§Ó)Š‚xpÞ9meœÐõë[7n´Ò$•‚™ç9²÷www}- ‚Ñ´é{Àjÿw<¾M4UUÕÜÓ&$IRšs‰;?¡öùÅ*¾y›$Mе-*ö¤!:š:BtÓæ#å¯ßx¥T¿ß·% *E) 68ç˜4ð;ï>ù»ÿî·FƒÝc·Áoüøüð;¿</¾ÞÃcÂ×¾ý>t»0A5ƒ àæM¸zuN} C ¶E0ÈÁ{`¶· A¯ «« ªÕn§ë ŽGÚZèv[È®¤œ3Öj鱦ªŠ¬•Ȉñ”r­ !ŒÒæ6‡,Ë«ÖFU*O’h4áâOÿäãn{2žöÛ!kµ–À|Q¢a\øš1×ï÷‡Ã!BË!ì p²ˆ¨3¾ù Ç/ñ˜â9&Þ5»{ƒÁàôéÓ£áÄøúÓÏVUõÎoýG§Oß÷Ío¾xüøz·Ûæ\Ìf³ÅÅEïýƒ>È@Û9`dŒáRTZÉ8Š[­¨®T·Û·VommJ´­´rŒGÖZ 4¤|woÅP·—RZ?÷1#µ_ޝhmÜ`C²6=k:$<ôŒ1c”÷¶É&®Þ™¾õ§áe`S–%ç”1†B&xaaíë0YY–KKKeQMFcgŽ>Ræ98'²r•UÚ¸päðêh°?™ŽÿäO೟¸§ï‡/|²„€'ž€ÇƒxÚmbëë°´=P i ÎA«Ý>|æïà‹OÃú 8ÃóÏÀÑ£ðõ¯Á™— ÈA«âÄú±ñd²´ºâ½OR6΢HâÅ¡Ãx<Æ¿ÇÑÏÊN8— l4u:¤í"€C)pÎeÈ»H³;WÌmŒ2DµIʸ\ Zk,Û‰‹ !$MSÌ~ì«y4™ÇŒÍC]û¹àœµÎY]åjuíð™—_:uê.c•÷v:EñÀ}ö3Ÿ4˜v;~a”’ɼ*…Z0ï&f œ²°šöoŒ’„‚÷.ÌÙÁœP@ÏÒ8ÃÛaŒñ~.ÑÚ ZqŽ*kðNWo‚㫎ÿBð.„_üÅ_<ûÊ™{OÝQ–åööv$yUÙY1;ºvøôî“öh´¿°m¬MÓôúõ•õÛïžN~'Iž ágÀ9HSèõÁ{ˆ°„€CË0‚õPiÐ’6 ¦ðÚuø–wßÿLÆ1X^€Žk ` Š|¶vìøáõcïû¾|áÂ…?ÿ£?ˆdª*k´÷Þ3†>¥QY¨8Œ”h'@EŽ"!¥Ä$‹­BÁŸe)Æ3L˜vªªHÒ³ŠR™"H´ÀGƒ?Ïn3Äñ2¾ øˆ¡&P‡z‚ÓJ)g½”¾–1¸Ô”eÙh4N³ä‰'¿°xh­×Ÿzê)Lìî šf 9¥€Álš¦©s®d„% pÛ‰;þùÏÿTÕý>Üë¶c‚G³Ù,J(" ¾ÞÁÀ‰ª4M9ç³Ù ¿s’$ʪ&é×Õ!H)ËYÞ¼š¬¶Ö-«‚€}!\)%„œƒ¯y06Wæd$­q˜›ÙJg•eÅ9Å’¾œs ñW'í´œƒÑdýø±$KnlÜˆÓØ:ëÁsÉ=øk7®q&úk­à|x0ìvz­¤µ½±i­Ž²?ò4%yþmÝÎûû“ÅÅ&2¦¹B¥~.mÁl‚Á‘CpöUè´ ª Ý‚r 3‡W€èt MNPÚÙÙÙŽ&_þêWÖ ívw0X‘ˆ”Rœ“ªšI‘…`)%Œ1)Ì¿¸ÛŽv¦MÑDZÞ¹€··d›¼‡O!§µ•‘¨ªJF¢¬Š8‰‚öÎÛ4ɰDž$ì‡æƒ(Ö‡È þ1‹-GÝ!­58ìõ‘Jžçœ“¢(‹+×?~åÊ•÷¿ÿýívûÄú‰¯?ýtË$‰¦“aBYU~á—íð‘Õ¥¥¥¢˜õûÝg¾ñô×Oß}:±í~¶è½qùZ9 wÆÝn6Í Ç ‹bâC®5ÍHÀàÇ‚À‹hJl|ËQ¾¡î~<’ÁŒqq–cx$§EŽåv©Uœ¦àužQ4WË È=KÓ´,sà‚¡×YkL` ±kV’eq^)Îye,çœÊ#áœÓÚR2'S.£$&"þŸ?øÁãkGë_þ (x¢´ !$Yæ‚MÛiY–Ó|"¥ÌgåÞöž¤ôäúZ»%·7G„…8'“º Œ @§yžD‘1¡,U§Ó‰äïí# ÎÉ~–ñWeø¾”ýþbç¨+UƒÁï`6íŸEÁZH&ƒXˆ›7~äͽ…Cº¬ž|âó ‘¤ÖU!˜T¶´®Bp(b“µZ˜gsè䜕¥’RrŽí&Ãiª”Ç›Îz£+)eš¦UU`™Ôí¶'“IEB0c*gç!ÃÛ¼£çŒ î *£ƒsBˆà}š$eY2$sjÇ!4Pâ%‘RN§9¥®ÓéT…Šã"à"zú«__^=üüKgîºçî‡[îêäãaÄeEEÁµÆÂ€w<úhbíàÚµÑW^~ùîµ£?ÿS?ýØÞpÛ±¥4&<|úC?ó“?ôÃ?¸tx5ÊZ'n¿½ßïw»Ý~¿üøñcÇŽ­¬¬`·„¬¤M59•xd1¡à+ˆh@“‹q;2¡3Í IDATÞ¼÷q1&Úí6ÀëǽßïcÕ‹lüW Rˆùë}„Àp Ç ¡^ ðˆà6x&ç|6™:mî8qÛh0\__Çp+Y¬ñ¥”?ò#?ríú•7¾ñÁ\0BH §Q,)Cn»Àƒˆ“¿é4/Ë€63B,ð0 Ñ0/I±µˆãØhø Ì]z…”R"í•s6Þ^D c2ŠœµÎ¹XHüWUUYíXÝÀ…zñ>úº_œk ë\œfƒý'ÖÙ£G×n\»Úë´OÞvb6ÍK¥”ÑÚØ9¼ÿ¹/|*ŽãÁ`@)§”Vy)Á)±J·;­Éô(;ŒÒv'¤YÖn·f³ÙÂÂÂl6ÙÝÙñFB|ðÞ™ªT­öœþl­Kï ÞLí1¾bPô~îZ¨UÔëõªb*„2ÖZ'X2Æò²l·»ƒý= À8•\¸V™ÏŸï™`¼A ò]šd©Öæ•—Ïzk9…4mk]Kœ³ÝÞbQUyUŠH.--EI’¶Z•RvæsË /ŠI¯ßuÎ4˜æ­”ÂÚÀØ|G>xÐÚ`¶qÎ â­ œ3!Îàæ å õ G†sÈ©¨ðT!á•Ö|”Ò4MËYÇÖ×OÞvûç?ÿùÀ’PËpp!škyxÏí/ÊóüþZ__oµZY»mœ’ìÌ«g_}õÕ{NÝÞÍ4g³Ör)ƒ^¯G@ô#œi­½ ø¼MY&˜`ÖPÞí÷•q.@$â(½^¹~ýªªª` ¼A˼­(ʤ•6˜e¨ЄÖjìoBí©‡k7Î̽ŸóYQUº×ë)¥*mû‹¸¶“çS!îàGQ䪹Öi’$l´µ–Š×õd0¤…¥:ð0 äg~êg>û™ÏY=üÃ?òÝÝÝn·;£H† „U™à G|‘Kåãñúñ“G×ÖÕNë…žÛؼ6ÿ^”1,3ðËâ·.ª\Düó_øâÎÁøä÷^]{éùª¢dÄ_ºüêööv«•VUåƒB –9ÎˤÝy×»¿såðÚ—¿üå³/¿ÐÎÒV&Ω(–œÓN§Ç鿯NQTY–Bpé¿/ÒÃE­Øº´´4ïÕpÎ`¾§Ïµš;4à\€‚ à†‡Ú Gh-€ûÉà}ßóÝ·ÝvÛü÷¿ïéûïº÷¾?þØÇ~ìÇüÍo~3ªÝÌf3)åx<¾téÒÆÆÆO<BØßßË[ÞÂ9ï-,(cE”Xï´*î£ÎÇÃ`ôöæÎÍímO`’s"Š>cøA½?Î%˨*òˆ³@ ÝjÍ&Sc½ÊK™¦žÀþþ>bŒ‚(y‚ŸKåc:M¤˜Ó1j6ÌNcŒ ï#Ô|XÒ‹Ü9Ç™Àÿ Ÿcý~¿( Î%úRÊ|0Ƙp ΀5Í|)´..9}c §TxJp¹Ôúʘ3ç^ýÈÏþ/Å×îd’$“ÉQ >„$ xInŒ!”FYRVfgëÆÞÖæ=÷œR…•ÌY^.ËRh]¢("Á(žÓju<å/~óÜOè#ãI1 I’$/‹Y$¹‚ÏóœG„ê½Oã„%ÚYVÍrÉ8?'¶Qßn·“`žeYš¶v¶÷Œvºr.ÍD¿·Ä›Î†êÿcê=£,»Ê3áO¼ç¦º•«ºªs·Ôên©JH2‚L°ã̘è8öØžYþ–ç'üר Æ– &3$PB”ZêÜÕ]U]]¹n'îøýØ÷^úþèU]«Ò=gŸ½ß÷yŸe¹\ngg'üLe®góó&Ѐ`[b ¥fS®± ­ûu­yä(¥IÌüœ…©ëYXZZ:tà !dgskzzºÝn?ó“ç@RÃç_<‰±¡¡Ð!°µSkwCß÷ßþŽwÝrË-_ÿú×Ëôñüß¿þÍå•+åR¡Z­Úò45Ħ”3BH³Ù4ÏÔB"b —2“YÂSÇu¥œs Fˆb„(M»]Î…-š =z`IÒ'¨—Iù0±¡J vš¾(oX9õÝ`”Žã$MSÙk­©åxA>cZÈåÆG'FËc6µÏtxÀà k¶ÚO>ùb¹<öò©ó?xð!.$ÐÊqìv§UÛÙÐZ›ˆy­%Bˆñ4M™c»Q=rÌósçΜeIìRv»Sγ\ëõº¡8N @¶åOýÑý?·Þz;µì(JšÖ‰7Ÿ;wcP.—Í9nX7çB,„bŒ‚3µ¨ñR0snà}S?BP–ei ´RoûÛ/\¸ðÚ»_{éÂÅééiǶ<üìó/ä‹ÅJ¥bÀb±h¨ôa6›Í[o½õ‰Ç¿íöÛM“Àk·[;ÕêâÒ2¡$ŠÂÙé©Éñ1%8Ð@jÝéuÛÝ®ã8àÚ„" µ†H&-BË&³0u<'Ž"!„ȸcÓ4N5„ŽëI¥r¾Ç9Ç"„À Ìì¦CØqœt xÏçóCx!SÈó$I‚ ƒ0BˆàœRʹÀ˜ø¾ÏØŽkÛ4äšõšH3J¨M)PZi!™4ôaGO‰ãX&‡fàfFV"K]Ç‘JK­4€L*×Í1­ßù®wשּׂ¿á ÷¬¯¯ Á…à¶C AZÛ²³4 {]Ûv‚|ÑõH­4å< –RˆV³µzu•3)R¾gϾ•µ+zk.7®çýþïýÑNµþÒK']ÇÛ5»K+¹µ¹áÙdcãêeD°-Çq EíW^9uöÌ™f­¦¤D €0ÁAB‰ÖJå{¹4åÝNï-o}Ç­·Ý®¾ó®×¾÷}ïÿ³¿ø«C‡n¸²råèñccãã{vÏ3Ƽ\Úí…Y’ÛÉÇ„bBÄcZi¥ú3SËÒ§• é†)XƧ§§,êt:Ý[n»mu}ƒÚvÊ„Ððõ÷¼aï¾Q”8Ž—0΄ìE±ëxãkk+KË»÷í?tøà®¹¹‡y„3¡´RmmnrùF½N)Í…ZP­ÕvjuJl p<;c ,¤ k¨„b*‡R‹’ñÑQ)¸àÜq¬Œe†£ÊÒC …À{o„úû™)·MmÞWn@‚#8Ë´’A3ûŒ[”j© ‚qÁ9Ô}c,|­!HF0À¥qœÆ!F µ”œ{¶£”RÙ6…2΂J+×s…”„`ñ(¥” 5Ð¥±¢Á¶eçÓ¿òŸ>tã G¦¦¦/]ºä}΄ …1RBâ(Ì…V7ùã?ùË­jûø7æoþ¿¹=“LlnÕ$I–v{¹ùÙõÍí(г¬/[UJA¤9ãW––ž~òIŒÑÆÖæ=÷Üsúå—wÏÏ ÎÖÖW„„P¥€í¸\HÛq-ÇNÒèà¡ýï{ß{Þtï=Y­^½Š1ÞàÀM7Ý42R>õÊY­U‚+Á5¢Ö¥Ë ¿ð‹¿ðÅùÂWÿý«'O¾òÀßRnnît£d»Z=áœçÛ•Êô‡õ#ÿ÷ÿðýêͯ¾åöÛ_óê[n­ŒM-¯mG­ŽPòž×¿þÌ©3žïA‚-׉zÑè3Í@-J6vª÷þ‡·}ïGÞsß[l?È˶íž;}vùò•^/¬TÆ!¡q*¶:Ý(ðò–e»ž{þì™NØyíkïúîw¿µ¹¹îyù È­{Ý®ã8 }ûù¾²S¼]ÝaBC‹\Rb .•Ô,㜠–qÁe%q”ôºa§ÝÕ #`ÓÝX‚6̓=D1¯‘ÓÔ|æ‰Ô”ù™djg̃ 4:`mÐ%Îy«Õj4jChÔŒ1Çv1BJjÁ%H+`>öRáËðM½…´Êåüb>¨T*_ýê—ëõêw¿ûm.²ÍÍMŒ±±É€°?¼6öDŽãŒ?ú裟þô§«Û;ïz÷; al® »wïVJU*•kGµRJLÉ……óõ×¹²rñ†cG+ãcaÕ[ÍééiÓf3@!„ùÀuÝsçÎ}æ3Ÿù½ßýË/ŽŽŽšö襗^j6›“S£æ+‡Lfµ:55õä“ONLLX–Õív§¦¦.]Z˜Í²ìï|÷›ßòVÛ¶¿üå/Ík^sòäÉN§3>>þ¶·½ík_ûÚ鋟~úéï|ç;¥RBb=ÏqûÚA´y2¿”2‹cyW(&'Ç8Àxröìi„A¯×“B „³Œu»]£ œž›Ÿ››ûÎw¾söìÙ‘‘‘4Mëõºd+ɼr¹œmÛ¢ASo0&ÐW¸KÓ¦ªâÃ"—†rkÞR ã¾g„¸—°£Ûíær9€|ÏŒÈÌO“ɼٕwƒYvœsËrœs­3!Ôð·Ñ~ˆû$Ts܃>‡h`Û©œ§YWvßüæÿ°µ±fò 2–‹Å,KWŽc1Ʊâ8ö=‡ uîܹ“'O^wÃñ{î <ÍÞô¦7=õÄ“B×õ•ÖZÃz½nxÃGTI`96 ˜zÎ÷~øàßþŸJÓÔË{½nûÀÁƒþèÿš+cVî›h n·çy„8I–eiÚ ‚ Ýn_o´S¦ •p."†*O© *Jæ3abbAˆ@†=` d³[¯Ó¡!B(©‡$½á$Ý(Ìþ†¡™©šÊðÄúBBÒ4Í2nY–ïû†ÅgZuŒ¡Q;]!B( •ÊX>_t]wø÷CˆVݼmóD(³g[ØR&š ¢F³v[_ûú—÷ïßëû®ÌŒ¸0ÆJ‚n7„õ£ÙÚï¸ãŽýû÷ !&&&^wçk~ðý¾÷Àw—––¤”B.Ôž}šÍf¯×3ókƒi˜ç¿ÓmMŽ=ó“g¾òµ¯T› Ç÷„”aæÃp2b¾´ùñ¥”‹Åf³éûþ 7ÜP©TL“—$ÉÐÖÙ8›"rk{#x½°ƒ‰æ"ëv»ívûĉ›}ß7±Í{öì1·ÌdÊÍÎÎ"„vïÞÇñüü¼‘Q !}tù¿ù—Rš¦i·Û=~ü¸ «â‰'òùÜäÄØÜÜìþáïcˆ Ò_ȉ,³(ÚÚÞˆãØð2±P¶-— ÞÇYXXØØØÃpzr2‰"¥$¥trj< ÃF£Õ ã+«kQ o†º!äm®ƒù½¦vD_[Ëê{@ŒŒ@OŸ>m»îâââå‹K\·±±¥µ.òs³“£•üäÔèääÄääÄììÌí·ßEÑîÝ» ùR½Þ0By˲Œ9é`Æ~­r§ÙŠÃèg:}3:ŽO:Žê?7©ã8IÓA Ÿ)^M…k —¡’iˆ_ÆqœÏçÍŠìt:fÝÀ¬ üxM áû¾1W’ UÛ¦”H™IZkƒô¹j…n$8B“}c,¯0U i˜RJ©È²I–eíf± !Ä93j}scz½RÚn·•ä#•±KK«æïŸ˜˜PJä\OJ¹¶¶666öÙÏ~62ìt[_1Äj5ˆ4æýlKypϾ‹‹ËS%yÎ󀵚9ñÍò"׸•›·nYÖáÇ//…a\(n¼ñF!ÄêêÊÚúj±X0š¡S9rÄXÜH)¤âï}ï{ AJ‰,WVVr¹’ÔØµ¡éÕÐ5q¦µhµ²b±¸ÿþûËåòN½–e™Cð€Ú&å`Œ¢”â\4f³™/”9ç»vírm{÷쮽“{.]ºDí¶;…JeYØq=(q>ß7=…*¥й\n´2þbxRpU*ŽØ–›ÄBxuuu~&ȹ¹^',‹R˜ÛmJ#ÀÿЇ>Ôjµ$ãB²8Ž=7×jµ677 !Ƶ°ÕmSÝ÷®V„H!”Èó=!¢ÄÍùæqt\G)a{. ‹s|ÍxÃ:d²‚Ì"ëvCeõ)ýýãÆRÎm3…¢”"8ÏÌÆcÎ>Ãr „@اš‹¯ Òa­5ÂȲˆúŸøÄØØX†ívÛTæüç/þëÒòêñ¾ãmo¦”r¥µT,K ’IÔ›žžr]L)ÝØÞ!ˆÔ›‡z¨ÕêÜsÏ= VJEQ9„TÜìya”v»Ý={´Í©ñq%ÕÎÖ̲,¢q’ÆAd,5R}!çRkfÄïÍfÛ˜Êärže÷›-ž‘$uÜ=ûö5›Ír¹ÜhÔ³L}å+_ùèG?š$Ù~Ôñ=©u”„9¦x0çž™:áÊ(Ìp.—[Zº22Zv]ײívýgÐʰTÅ› mÇîÁ÷îÝk¯.ý|`»ÎâòÒ‰Ê sï°›÷‹\d½ndY!Bœ$Éu×9p@´ÛmÃý0Ê–‘±Ñ<øÐ¯â—ôèc¯¿ón [Iz…>üŸ?¡”¢¨Õju»Ý©ÙÒ®™d»Ýƈ0ÆÌéŸËå¥[Õ­çŸþÙŸ==½½½=1=Ukv@.u’Xh •‚+!c³4Íže}KM„eáÌH‚‰Ýn‡S³/휤R‚«Z¦xÂY'Šóù|·íì´à(®Õj{÷ìßÞÞáI66:ÑnwÛ­îSO>F°^[]É S³3 À Pj6zišrÉ⤥=xæ§/œ8qâéŸ<_*•Úív«ÕšŸŸ¿|e•³œ$I±X¦TêíNEùb°wÿ¾K—.ílmX–¥•äœÛ6•ƒD<Óp 8çqÂ1µ•R´o©ªM 9„¨ÌÖe@G3‚°ê IæJ™£Ê|ñj¸è×N\{½°T*FQDiŸéѽ¦ëƒÏ|SýüÍ_ÿ5@è>¸xþ|¡P@1–år>Òú7>õI!DcsåìéS#Å ´°¸Å©“0Ó¬t»a¡PàL*‡Zj“_c¸³æ3Œ1¥$ÅV̘© „R+WrH:6ÜÅF£ÑjµlË¢¸^kŒ:tèìÙ³Zk ˜€VL`³ÙÌåòRÊ(éaâ\Ý ß{àù|¾Ñh>|xg{»Ñh¬­_]YYÁOLLT*•±b0??o ÍãÇßwß}¹B™BÌÒD_ãÜ-wyÚP[8çÝnÏsíT0ã²ØétFFFcnà GFF._¾œÏç«Õª”2Jâ8Žï¾ûî$I¶^yåÔ¾C‡Ç¢nƒ666 …’Ñj×ëõ‰©iÀNµþKïûå^§±ö°ICór…íjûÂÂâÁƒ3®¤FBÏ ,êX.£–ÍyŸ}WªŒI‘8Ž÷ú7¼ñËÿv?ÆT#„Á)­¥25¥ùº®«4•á‡Ù5yÚ¸ØÖ¾¨ŸaŽ8W–M†à¿¾Fî<œ…YîZë°ê”YRæW˜›!NiŽãÄqˆ @ !0±’8Í æÛã$³¬¤˜£”Š%‘Æžk//otš !D7Œ¢(úûÏýãèØBDr@?ŸI‚HÛ6µ,’¦©©Ú}ß7@€ ”,—ò‹‹ %?Èu{ÍLÊnØ#Øa„F~!X¸¸dB)´•Ñ‘(Š>÷¹ÏSE`D)u›ñ´T*be©ÀX[–õÒK/¯­m 8´³µQ*^~ù¥ûï¿tj,‚í­-Û¶×–WLS1::ú /|þóŸ‡ú¾?Ä› n3D|‡Ï¹¹S[ô55³wï~ 1ÆÔv=©ôš6»)ÌÍ*4aëZ}­Í#;䋘ƒÞqLüîÏœG‡{¡8é™ ^æÚ™yÆ8rZëb±ØGI-kØØ¢ ¥Ô0`B#•²iõ©iþ’$aYòž÷þb«^_½rE™ÏçG*cËW×sAÉŠR)5B…‰aUš†ñÔÈ) šð}ß\\¾ Òö¢X(‰ ¡¶¥ 0È.„[ßxã±±±±,˨Ec¯zÕ«Ž9299ifÑÎ’Bˆn·k·FGGƒ xÇ;Þõw÷wcccf£µ^^^œŸßE).â¬| IDATm4Ýn÷å—_v]×0š)É—`Œ}Ûp|?¤ðgú榠6"dpÌN§A–eæm6›Í¹¹9ƒ$š ÒuÝÇÿñÊÊÕË—/Cï¾ûÎßþíßÞ½gîÑG5FÍÍf³Õjår¹‰‰‰(ŠJ¥ÒÓÏþÔu]/ÈI¥(¥Ћ#ËuF#c£ç.šÕÝ‹"„€X 1‘Z¡P Ƅ֨ÓíÝzÛk{üÑíÍ K!…”Âvl!D–%Y–3|Óh›£Ê´½ý«0 ¶7B4°˜y÷ixzÀúŽÈ aÖÆXljɾˆãØ´'I’eÌó\ƒwšÕÌ9Ïå<ÁÙPWEQP(1ƺa/㌠žÏù¨­Í×Þy»éh¥œtçÏŸ¿º±½pqñ-o—Egžy¦”/f)§Ô&X a¢›hšÅãññña5Çq†¡™™™ßü­ßŶ×hG+W®bD]Çévªi¥=Ïçœ#„“$=uê´©-‹ŸxƒÞ›§Ô>ÙjµFF+¾xn._,0Æ.›Ýd||üĉôGÿýÙgŸE»á¨ã8Å¢W,—R&ÇaaÇq)ï†Q2>VÊâ¨8R&%˜F@ õ:{wÏ]¾|y~×L–eqÔ!„dA-•Z JmÁyœ2Lm!X¡T¾õ–ÛžxüÇÕÚN>ŸS"1„Üi-‚ ÉR&¤”„Zœs<0•°l*J&2È"NÞÑ5‚Zƒí Oy0ðnŽF(&ÆâÔ<Ðf§i9´™`HæEI©2: Öív'''{½}£V $†@KñÊÉ—r¹\‡<ö¨Ð´Öè>õÌsã¹™YŒ(!ÕOšëõúv¦ÿ3DOÀæÖNyjæ¿þþ[¾²vaá"çj¸^Ö˼¼oÈãùùéB¡púôiJ©!J?÷Üsfn4¼½^l;öêêæÌÌg}‘YlË1F#¹\Îv,)¥ï9©Pžç­®®šéÝpŠkYV­VÓZ;¶-†ªïŽ˜Ïç;ކX‚}"øöôyõp)M-W¯Ö¤”¿ó;¿ó¯}5æ‰ZÉ!¥´V«u: ˆRªÛkk­[­Öc?ú¡íûI’nll;vL)Ðív¥îÏíÏ=uúôu×ïS’ò 1%•àP+%8޹¾æ¹4ïû%2 „–\°­83‡µÝ$Î:<53mQ›sièúæ 5£?3O3”r³»˜E©&0`àúd°05003wÝôIf©‰AÖ¨9¬s¹œaΚ•: Çáœ÷u6B êa „eYiš çÃYÿÞ½{ÍìqØ¢q‘a›ÖªÛq¦i&Iel??ÿ‘~ìßþï÷/¯?vâ…ç^”"ÃQ‚ úY9È…ØàÀÙ³çÍv.ç™Ì1SLK)‘N{ýݯ­5§N*rÅ ŸÏ3®¨ãA°µµ¡‚!uåÊ•»îºs§¶Ýh5Y&›Í¦ñ¢2M§A(Í|cL°…!ò<ÅQ𦱉³ãeY?"# H™Pz¹¼çø·¾êÕwßùÚ={ŽìÝsÆ´Õl(Á)Ô6Pše¾cS‹¤i €ÆÅVgJh¥¤m[!Ûv÷îÝñ¢E½v£v{q‹•&…$PׄüšÉ S4ÅRàØÜÞ"@]Yº|ùòå7ßü…ùâãO>ññO}²8R¦”ú¾ïX6!Y€8ˆ±4Mã¨ÎÎÎa@/Ÿ_xýkî|Ý]wÝ÷Æ7l¬­æ<µ{ï|£ÙŽRþò™s#cã#åQËèôk­v˜Ä½(lµ‡îýÑ¿×kï¼ý­¯÷s!¦ŽM½û=o8qËî™Ýy;/€•™nÆl`®ë–J¥ÙÙÙÛo¿`ä¡´”ztt´T*™¡Ž?" /ÎLž\×1͵لÀÀTG RuÄ Ë¬`“c1lEÍ 6ä7­à@NÒ„±Ld)OF‰Å™€ .9R()çœ%ÌI)¥ã{GÆS·œ »饵ÚÙ‹W›‘øüde|^$ÂÆÞèÈD)D¨'‰ä\) Ò’K–•JEϵí~ú™4´&chwšwÝñê_~ß»ï|Í-åbAhImÛõr~3¤Û¦H×µ¯;|8Š")´ëwÜ~çîùý“~®À¹`\õz¡©vL¥µžžžN¢è‘GB¼ë]ïŠãxff†RzæÌ™_ù•_1FI`ó-¥ ÃPE½çž{î–[o’lÛ¾zõêÖÖÖüÁ˜]s¸A€«Òðeðï$N/\¸@)½xñ"cllllß¾}ÂÝ»wß}÷Ýæ„š(d90Ä- ×_½ã8«««B‹ï?ø½¹ÝsëëëÝn7Ïñ1&ajA»ÝF†¢¡1eJ+ŠOŸyù¡ïóýÕ_”«Jín·½²¸r‰1lQ× ‚Ò¸/Q§›D1K8tWJíÚ5?53}îܹJe¤×ë 1†J D÷›­zÞ÷Úí¶íPÅÅð1ïyx H)¥Ô˜ôÙh¦Á2È”™q›'Û8™™bN)E)-ú±ÓbœÂ%»–~f¶©”íP 0Þˆi† ü_õ™·¿ýõNúÔÓ/.._ÙÞÚiVk@£¿ûìU·;77])Œ.¯¬<üÐÃo¸÷övg[h5·o¾Ýj Á$gŒ%¾ç*%ZÕºI@4H…¡æô±”¬WצÆJ?üðG>ú©¯~õ«˜ÀL ¦´I´·¨$Ñå‹ ‡®?2;34²‰5:65==×j5.]¸¸Po%1÷üµ.œ=S ÆXE–—ƒ[–õÎw¾óûßÿ¾Yv„õõuÓx! ÔhÎ3˱c› ¥Í[o½õóŸÿ¼ã8BÇqŒÐrvv “!qÇ\Àa¡Ì#›Ìì4ͨíæóù~ú\¹\^\\<{ê4E˜"lìr©msÎ¥Öqçs‚Dpe»ÎÄdåv÷Ön/4Øe¹<š¤ÙèÈX»ÛTJmnn:»¦˜ *'ÔÆKK%Ú­æ±ãG^÷ú×<óÔO8ËIfÇaVoÆ ×ƒq²,õ0†J Ûjµ:çlrrR*ðº{ÞX,W^xá¹b¡Å]¡VZ*•°ŽçÙ­V#—Ë%qŒ4 ÔÂX-Á€Q?ä¼¢•î‹ìÐÀr0aRŒq“ߎ®a@CM´ÖZ÷sjBRê4e˜"B,Cß^\€U‚`Òo]ÿé³Ï}ì×>þÒ‹?L;áù—^zâ©ggçæÒ„-_]]YZ [ÍË «>{ýõ7(¥!ÁqÆrÅBÂ!"‰„y»b~~~a銙å Û;)¥m[½N]kkkƒR,”\ŠÅ¸iÁs¹\«ÛŸÜ·oÏÜÌ´Öú™§²o÷þF£ !ìuÚBBÝf«³xy¹ÕkØ4©\Ce¹ñÉjµzöìÙJ¥²¶¶699Y«ÕžþùB¡¶:h`=ËU¦´BQJfffΞ=ÍË•sfRhä+++€É©©$‰²,Á×I —é`£±´Ö¹\n{{g||üÓŸþt»Ñ6ƒws˜¨~“©dŒY„dYöÊâҮ陣G¾ðÂO“,>uæôþ}ë·~Kj°pq jTòB±4MΞ={äÐ>‚[4"BHB,‚U®TRZ×jµõõµÝ{Ž–Ë·£'½(M²¶ëç †QÔ=m·Û„‰‰IJ­z½áyî¾û×7ת;[,a*ϱ“¬‡"$s\ @å8ŽÈ˜?êÎÄôOýkûÂYƒ\Ëmõ<×°€Mw!t]_K†¡{‡d@¯‚ ·Õ”B›P€‡vvÆ9ß»õÖ[¯\YÚ77ýøã¿ñµwÜxä Ô žÄǯÛ÷†»nVØø“ÿù¹B¡Ðí¶2ÉÊ¥±S¯<¯j÷ÂÊhÙ:B‹ŒèÊêUCI˜WQ(˜$×_ý™3g8磕bÞÏy‹µf<³ ãðÌéÓ ¶ífqXo¶wïݵŒ©Õiw5‚¥ÒÈÒÒ¶!Æx}}RZ)'\Ë:zôèÎÎç|tttkkkmmmdd„s^­V†h4¡S@ˆK)\Aâ8‚EQÏõ ÕjQJ'''-˪×ëR4;ˆÁáÍí0;‹ïûÝnd¸Â†à–DÑÎö¶R AxàÀ!D–¦–e±,³<×q<¨4ÐècûDukûêÕ«SS³QÌâ(˜žñ<¯ÝîÞqÇ—.]zùÔil“Ñ‘ MC˲8K €Ç)„œdl£¶yÇ]¯;w~ÀPƒB<=Ÿ+Cj»;;Õ0ì9.ƒFaˆÁ˜özçr»VššºáØño}ýR¹\”<國ÅDD m2½9€~„u!šJnˆÞ›ÝtÈâƒ/³Úð@|bz¯4M¡&ŽãaLÂ0ÖÀcìû9BˆYÿB(Jí,˲4ñ\CÈ÷‚€Û´,‹+(5¼S t:\.·oß¾§Ÿ~:Ë2 õ{¥Tµºm|xV¥RY\\ÔZ óº²,«×ëæ91¢RÒŒÁ5–¼O˜)«ëº[[Ûsssaüüøø¸!»ôz½}ûö‰~V(@ˆ D<:¶‡a§ÓÏþý?ær¹V»1Vݵkæþû×¹¹Ù|¡dYA¨ÓÜêt:ýÝÔ¦–†€±¬ VVW cÓã ‹—YìeInm%‚P·H×¶3‹Ø•±ˆc,‰3‚í4²,ƒ(¥lJ:}: ;ù|¡ÙªCÿöoþ÷üül«Õr=[JÙ cŠ0Œª;uI­Ú˜˜ÓZA°³³396.d&„P@»¾ÇEæØ8MÓœç6jõGyd÷î9¥aœö-Þƒ È2nf¿–E¢ˆ™ mšfÆsH00""M3B,Îeed¬º³søÈõËËËS³3O<ý$Øs„e×µ…ÂíêgLá¹¹sB,‰Ïê³¶M‹Å³Ï>K-Ç/Žwºáý‡ÎŸ¿xô†ë  §Je7‘ÔRÑõõ•¸×.ÚM™†aœUÆÆºaŠRA-™hðvØK!$^Dˆ%µ¶l‚ÈÂ$縞O_9õb¹Ròó~½ÓòsEFZdÆ\Óa2ÆZ6ê‘BÌ(H•Ò<‚„05«öuϽ÷yžwÝõ•L!µfwízé¥çóµêcÆ„†Þ%!TRÈ™™YÎY¯Óm·Û@#ÉE>(+VùÑæ¦'óÅ`ks'eŠºîMÇNÌLîzÕ¯.‹Aàë[ßb ÃB–æ‚ç<ãÙë¶D3»÷—‹#;Õ-ß¶~î¾7ýùßümš°\±$’cÛ‰»uD]ÓBlÛ2³Ã$I,›f,F"Юë"HÖÖ6¢„y~ÐíEå‘Ñb1 ©5ªårÙPi¥€¶]KkmQÙ¸à8išž—¦iÁ/öz½”óV/ªLÎ2¦x†¢XîÞwýÆú% X–q…ÒwG ù`~üÕÞMÓ›;ço½ã¸ïW®\¡™¦)Æ2I"Ýo´ÁÔ8ç! D—mªãNgµÝò­±}»Ž/]^!D 5Ä;ŒÐu]Ó ëTS°÷õû<ƒÀhÞ…m÷}+ŒXj{{»Ói¹»®»ººöÇú—¹bQ ‹PšÉìûýðø‘Cï|ë›’°uöÌÅåÕz³ÙüÊWþ}rzê7ã7Ü\Þ+•Ê•‘f§M‰ò<¨LS–Di¼+–T«±©ÙõwÝ©RtÚ=Ûv…=ú#×u·Ö×FÇÊ›kõÚV¥TÔZ !|Ïc ƒdYV©Tþæï>ëÅ›nºéþá~ðý>ð¤q¸¹±Îk4bÓgY–dY©XR!„bÆßúÖ·þùŸÿY1_ð<¯X*Åa¯\.K)ƒ 0iLCU:OÓÉÉÉ“'Ož?^JÉXFÝÑÑQŒa¯×ƒ !³Œ!„XÂfgvI …¶ëì9p0Iz gãããGo8þÏÿø„çXq{ž—e)xˆÆ ñ BHJ® ”À[­¦Ÿs¥”¯zÕ«¦''VWW›ÍæÆÆšÒ—@*`†fjm&Ž[[[&ÊÂ8–eõz=£ Á˜nn¶ yç™gŸªW×î¼ý8rCQHÐÓíV­Zõ§÷þûW¿4»k¼½fàÙO5Ÿ1ë›$¥4–û›o¾y{{B‘N’ÈXR@¨i/b¶mµš½Ó§ÏÝuÇÍ9­­_yìñ—lÿú¯ò _üçZ­ö'ÿóO-ËZ¾ºìçi>pªÕU ‰L(èºn¯¹¥ åü‘àzmeÅv¬°eIŒ|òÊ+Ï¿úÕ7%qwccufj@‰\ù¾ßë†ãjµþñü—Þÿ+Ÿÿâ¿?ÿüó¿ðîwšRÛd`[U;ŽÃ¹Ô!úÖW˜0ÆÊå2Axaa¡×ë¾7::š/zè! õÖÖVóÊår'Ê´føñ£O†aHP)¥0††øâX.‚È¡N–eë¿áø³?ya¤ìs­¯\Y>~Ó±åÕ5Jìc7J! \×áiB°ƒÖêgaÄd—À™€HCØ_µžç=zã~4ËøÕ+ËÏ?ÿ<ªÓmù¾†Ý4-ËêÅ„hi¼¥”…B³TI 4H(A„‰‰ñÅËË×ÞŸ±˜±¸\®tz!ØN4·;wè`ùÖÛvŨÞ9;>ÃFÆÁâÒÚ¹ KgÎ^¬×Zõz#“¼Ÿ;|ðÐÞ½{µÖfF ž—„jlwiNL¢=ûË×™˜ßüÂû^Ÿ/,˺Ýîµú'³ÚŒ Š â™]×Å[6ìƒ;J©‡ôJC7éC÷¼/µmûÎ;ïÔZ%IÌXjH“S;AP°-¯×‰ õzaZ­5FGG?òk¿züøáÙÙ™‡yôýïÿsÏ=W72 Ëv[­VÇYa€X+"ÍâJ¾@ úÆ7¾åå‚4c½^aèØ0K:”¨Õ«Ë 3–¬n¬îÞ½[)ÇqÆZëv»ëû~½Þüýÿöß'''B§N24s •μY³©˜‹Åb½^¯T*ÆìSJÇñ‹/¾ø©O}jdd$êDÃÈ¥V«•¥éÖÖV¹\Mc„š1¶¹¹©5„„ŽOVŒ(â­o}G©<Ñj†¾Wè´Cˆ#ÃÛ%„Ô«ÕÜóº×ܳ;êvN?öÅ/üÓŸüÉÿøOøåŽ]?2R @ÌÏMýàÁïìÙ3¿SÛüÒ—ÿ%È;AÞÃQŒ/°ˆM©&, S­˄ɡŒ¢!´¶¶vîì…}ûö?ûì³ïxÇ;¾ýíoïÚµË(OJ岩|(¥ù|Îp5ô 7Ð\Cœ»ÝZ­6;;»¸¸8??oFêC²Ûí>üðÃÇ­×민ò²ÖúÜù3ÛÛÛëë«ÕÚöúÆjuGÇF?Ú‰ã»î~í]wÝõÕû¿DNã䨑£“ï|ûÛIVÊe!˜”\J­0WÉ‚³Œ%™¦*3ó3gÎ<úèÃÏŸ½tùb–ejSo@/œ;=è¨Ö{½N‡N§m2X’$rËØ^+%8ÏK]×ÃîÂ¥³;Õ ×u'''77· àλçVÖÖ¯,_äÎÌä—¯\P,—‹=ô­sç/Bzq‚‰óÆ7¾ñ¶Ûns]÷ÅWN·[¡’š«þY€ L³Óˆ«Ðµ]ËFÀƒóó#år§Ó¹éæ{éÿÏÓ{ÆÙuÕçþ«î¾OŸ3}¤iÔeI–dÜå‚ ¶ Å -@.ð¿”’H¹É½7 %tçÚ 0ÅpSƒ±qÁ½Éê½NogN?»—Uþ/¶¤wó™ÏÌ™rö^{ýžõ<ßGƒßùöƒB¦º®†ž1ÖuEŠK>±+—]v!fžßìzÅ—Ap—ÿÌ‘•”¦š¦…AT¨œ<îæ ‘Ú–•M]õfãîõwûi|øÄ‰—_|åÃü£§ŸøÅøhѶ ÁÆHQÔnÏ÷½ôù‰V³Á:­?ý“1Æj­F’ô6l½ãΛDšöV—Nœ8¶flÄ2”ï~çÛ+‹ @K7‚Äg©ÄŽýˆ‰c¬ª*O'Œ"ì:^ÞÎù¾ß_­¾û}ô<¤©êÆ úûªÍzcØjµÂ$ÔUÊ™Ðu5MƒlÇ¥ #Z.”=Ï‹¢XW5Œ1@È÷ýn¼nRL"‚—æ¦UÂ@¡+z¬…}ìcÏ<ùä·¾õ-ËÖÝNç¿øÙüô´¢éidZ½e®ëîÝ»7Ÿ+þüç¿ íuZ{÷îÙ¾ýªÇÏ¿õ­¿×ê¬ÎÎϧ)à’e"›= QT¬j’$iÊ%‚™ÊÐõ˜%([¬9—2æ¿€ÿóS{éw¿*êüí÷ܺn¨áx©lß|óÍ®ëRJ³ãµÌÝ-8hy 4ó)T›~zàÄÙß½|èð©óÓsNí0Ðæ©c=™^+BÆŒÉKëâ%^ÖÎ.WåffÆØKû¼t ªiRJÏ ¢(2t Ö¨¯”ÊyÀ™ç÷æ§«¥<\—`Mß@QÕÇ㒞 )$ÙÖ7{}Ã0"Ç-‹_ûÚ}‡œQÔb§)ZŽ3’$ˆR›1y)kš°Ìœ¿víڹҾþŠB‘L(SL`%ªi 7̼JuÏ uÝdŒaŒ4MÑTòÆ7¾þŽ{îúßÿüO·mYª­ -,,P„{Ý6€LJ‘¦qÇ„ BPxwÞyûÙ³§u]•Rbr)Â5555;3×ív¥”™D†ame5Žãþþþf«ašj¨®ëg¶Q”…IÆ”ªNï¿~Ô ’Á‘ѵk'TLÝ©êŒã´±Ú_»Bˆ0’ÇI¨(Dˆ%— 2¯:Ê<–ÂŒÍ"Diµ:1}hhdy¹V.÷1&TUÏÆâ+^"¡®_:k¼ò¾÷º^– bŒµZ-Ó²~óÈcçÏŸ÷ý"†©¢c¬Fñüð«¯HÿÄ'ÿf¨Zi6VÇÖ ',Z36|óM×Z:}íµ—^÷›Ož8‰ã”RJ)áœI¨n+ªÖî¶Z­fV?HUsîu꺶lßpÓ¾ëƒØk4ª¦Ä)#èR[«¸ÄÏ&™¶%¤@0[h!$ƒ @Ó”©*‚û~ŒÈ\/Œó}ä¿}ë?º­j¥ˆ!^^Y]ªÕ’„ÿÕ§þî'?úI»Ñzõå—ë ‹Ã•r»±zàÐÁ“fMË`œs!Ó”*ýRâw¼ã]o}ó›>Y*^œ^X³v’%Œ"Èå Bq£Ù´íüèØXš²4ös¶ øQ442,S .;ši'R^Òÿ ¡™Èª*Z‡ÓÒ)¥i’2&¨¢üÞ›ïŽù\¡Pv<¿T®ŒŽgYjj¡X>}æÌÚuëÇ'ÖÊ4p}P" t= ¹eëöO}êoúÎtUY¿~]zžëh†úô³Ï®ÛrÕ~øÃÚj½Ïsžj*9yäˆi@0EQ C‹å8I8gQ¾íÞ·ÏÍO[¦qâı4Œ€º®cŒÇ@òù|ESŒèÀàp¡T|åÕ—,ÓR 1D”ª}•~Õ°]/°ì|%,án×ýhǶÇŽ1u³Óê$\nÞ¼©R)ÕW–wì¼ê¾/Y1JiÄ“Œ.¸Š”SE1.¢˜ $@Œ.$&”s¾ºZoµÚ³³sžçw:]J•È BD)瀄1!iÙQ„ݰò…R_u `hÇΫ¯¿á¦WïÞ¸ió7ßT™ž™%€J¥¯ÕhIK¥ÊŸ}üŒ‰Çìä©gWjKÉâ‚FƒÃCë×OŒŽ¯4Va³í3%MSFYÐ4MJ‡¾I0 \]‘%“¬ÞhY–®ë„ ×K|ß§8÷Âó/Þ|³í´[[6Ož={AÕÃ0®A³7MS ®D¢3]«ªšËå2î!cIæ‘cŒ¢¥i*8|éåÏG¾F!Šøê«÷<ûòkýìÇ÷¾íí†aú˕Һ ëF>óÏÿ§Í ƒ0 KÅr'#åþŸÿüçWï¾vxx´¯ZzyÿÁ^»÷þ~x~aúk_ùÊèÈÀ›îyãëö\Ŧªª¢íNÇâ‰u“º¦XÚ¦§žþ]¾„TE_;>¶R«ÿä§?­×›wÜv{¯ç<øàƒïz÷ïB‹UŒºÖÜÌìsÏ>{õ7hš¦Q¦r8ŽS°õ(JTUc©\Y® „`œó Ïø¾+R†"†*Ïl¸†a` 3XC† a]ÃuÿþŸÿ‰ OJûáM7ÝÌ™¬õ—1–qj4›Æj{~væÉǺ暽O?ýÌ5»¯yò· õïÜyU©T"¦‘Äa3n›†‰0ŽC¦Sx~v%!jº‰áœGQ²eóÖ ,Ë2 ¥Õjåóù3gθÝ.€e5ÔF.^OLLd‡D’,HˆjµZ˜(ŒKÇš¦OMÏ0–*ª*€$Ui†±Rþíÿüê¿òO¥òµ?úÁÜxÝ»—k«ƒ##ç.Ì4;žªÑbÞÊÛ9Ó$IšrÎ2É ÑXU‚‚õbwÍÈX©lëšÒl6—;Ý„ƒájyhêâÉc‡—Þ÷Îuo¹ë®mÛ7~þóŸ_m]òV"„²íf¶k€KD, }§iÚjµ¢01LB©éj†‡B¤L(jalÍæÿà{œ‰|A ƒ+J"ðÄÄ„¢Jñ¾}û¢À˜½0“﯈ @7-€ˆã¬ GFFÞùÎ{œì½æºï<ø½žÓûô¿üã{ß÷Îr1ÇYôÊóÏ`Œ“”  ý06:]KÇ·Þq§”<£ñ\ýõŸûü®}Ý^•’J_ßµ×½ á ¡{ŽÝžk¦fTDDœFžßëõÇ)TJïfõoafNJ(‘ô}÷À‡Íçó¡ççóv@r¹Ò2I"ˆÆØ¶íÀ1ÆcccçÏŸ3-=p4 5S_71é8žëšf¤iêyÆØ‹½b!žªÒÝ{w»N× Ý®ß•"ùèG?øÈo%„ 0?TÕL=L#'€1Æ¥äb°iËÖþÁAª*B]7{½žªèýý¡¶¿Zîv»;vì¸úê=Y\v‡¸^¶Ä°n·;44Ôëõfff’$QU-«–ã¸ÓéFQÜét}ßç\FQ000ðÜsÏ‹<¡Nj'Ÿ¯Í×6¬ßQ4u|rÃù©ùµë7H;cQ³¸^ûr²†a¸²²‚ˆÒH¢˜…@ÀîªãtO1DA"ÊU:½|albpêBþèÑגЙ>{rïÎí¿yú€iš™Æ{Å]Ï9§ BUUq]—3‘ËçMÓ„ €'IÂxŠ1Fq.ª–ü© 塜e¶ÛMU×U?À Ï+úSO<µyã&)å«Ï½¤Úå^­=\-¦÷̳##n·W*•ßبŠÖíx“;¶¼ñoüæƒßŒ¢HÑhÏ©°s¹Ë'ÌŒÉèrÓ½ïû†ž³,+èõ´œ !T«Õz½îûQ„UPƒ(Z¦ÆÝÐ÷r9Ëá))¦è±§•Œè¿ÿÑ?õÒsOô£9~üĵûnHæJ&¨X,*”.-,¶êógÏQUÑLËó¼(aDÑ¢4[XJÓ4I£úê²¢(Ï>û¬ªªF#˜Ê•jÇq2g¦”òâÌ „P×õTˆ4ˆz®Ÿ±’Íp<ŸRŠ1QBÅ¡ÑÑ(M’^3 ‰ë` Éß|ê‹»wï2Õµ›6m:xôD¥¯ôÄ¿];24j™V§]Ïår­¦ƒ SMJ¾ººªh#• m´C–Ä”èAª*EjXï½´vÚm›ú}d¡¿zû#?{eãĆÁ¡1U;v™i1&”BEQ I’$q–8ÍÎeæ êt:—jNªh”RÈ÷¾ûý/|áKñg:=5 Bæ½RêûÆ}÷ÿòGw[4M£8,”Ê¢1>öˆ,aé-·¿ÁΕ‚HŒŒÿö‰ß~íÿûÀÜ~ÛmåBáþû¾¶ftÀuÚÏ*c2æ"_,,ÖVû‡:º}ûU‘ëG «ÕjR$ý}•ÂdÉ6ò­z'_Ì-®,æJF.—‹Ó”1ÒuƒùÛÇ~sÝu7tš-ßwûG^Ù?—„©N•˜ÅD‰¢kín'a©ATɸaB?ö9çHŠ8ÎR ¦ëöT©hª†á\¦)èhªáÅÄttdj˜Tµ’„%‚gËp«ÕÂ!,yšZ–ÕuLäÂôlÿÈÈw¿ÿýüàÿýÁ;ß999ù¡ü±f˜ívWÞèÔÚí62 ‚Õ•ÚÕW_ Ƙ˜Ÿ[ÌÆ J•K}Ä Æ(B$N/«ÕË2ÐK‹‹Ša!ÇÉÔ•¬jBh˜zÇq†aX(¨‚\¤¾ãfN|>úô) P-bBSUQ­(õºÿ–·¾ýùg9wöôÞ=Wÿü§?ÑüÊóÏN=绽r¹(Õu;Š|H8ÄHEU,”Æ<Š ±ïƒ4Y3<06XÙ²qýºë4¬VKåCíÝu-‹d¹<9tìµ×ßvçé“g5j1Fi Î9K1‚¥"ŠârµLx¼K²fbÆÛ2^xú©}7^{ÏÝw^¸p¶ÛnQŒ<§›·mßõ;&”Rp&d"yŠ W5<>Ö‡Pê¸Ý‡¾÷ãêZ!ä¦-¾ß\¿fòÞzoìGûnØõÊ Úí0M˜‚"PѢОãmÛ¾ãÙçŸ?yâdkeU!dtxP×4'q”8]gn~iŠi_J58‘HCžX¶Åa>_ìy®¢éåÕ:!4õ¢¬Òþ‘|9èØ~L‚R&B2!9§”(„(s9Ë ý˜§IÄúÊj©ŒDÕ¿øÄ'~òð¯Æ×®m6ZŠ¢YvÞ0­8fHQÃ(QMQ5ÅPUÕ(Œ’8-ØÅ^ÛóÜøºknõ·?ñ„B°¤ÛnêË+ §P€8Š Ýˆ£¸^¯wÛÝ|.—ƉÛëe¶N–ƹœ•D ç"gç(¡”*š¦ .l;—¦ RWÕ¬;^p®"…ˆ‚¡Rª«ª`L!$ë¢,ärqꪅa³ÕºT!<Ž¢D¡ºÛsÝ^ojú|…ï{ß{ö\{Ý~üðïÿÁ;––Ïœ:ÿ /˜ÅÂÖÍW7ŽeèÄBÁ<†{÷*Å«÷nç"ÂH ™¬4`³?ðÙs¿{dh`’ªÖšÉÉGùM©PP¹ç®7¼øâKN/Ãífa’Œ†‚(U‚($˜æKÓ4×ÍqWP Â$IÒ´»cçοü‹¿øÖ·¿ýÿøõz½Z­ž?¾ÝnqäûþîÝ»…ض1>sæLcuõ±'ŸÎå5× ¾ïöUª!Úʵ×_ç®ßÕéz˜2.‚Fs¡R.!³¼5ç¼ÑhŒ • Å'NÈr¼ýª-…bYרÛëH)¹à¶m*ŠdšU[eF„4Mò™³ç¦n¾yŸ]]×™àõÕ%ÄÒ0ò”QI¬,..r!’(fq”`¤àK¶©LqÄ$cÉHˆÑš‰±V½Õß7Ôjv0%~»¾Oêë뛘ŸB‹Åz½Éâ$—7/ù{VͶõÙ®±P( …N§ƒ1þ—ù——^~áÁ¼á†ëºÝn­¶Â9Çf§G™JšéåN‡`eyy¹\.gŒRtjt9ø…³³¥ŒÐ @]‰Re&Š cœ±r¹œ©ïÙÊÄÔ(вoÌ(–°aäã¸Sh%ù|~×®Ýù¼ih}ëׯ³sæÒò½¿ÿ–N«—·J««/ßÿ€”°¿¯,xàt$¨bXVÞPkt<ž†­V=Ž‚4A"ŽýÀ9~äÌÎ[VÝ_ýæÑsçΈ”_³wçÜìô¶-›Ïž¹Ðó\É‘BJ1bŒÀE‘d Wàr·bF¸lÕɇa|öÂy3Ÿ{ì‰Ç5Mû»¿û»o~ó›WíÜ1” 0Æ~öÓ_@GFF&''wîÝ•‘8 ææ´Å~òãmWílµZ=¯H€””Æ8ÁT‰êv»ärìýÊyÆ Š¡RÊŸþäÇ€¯|í«_ºï«“6t:f}upt4Š"JUUU?l5@ˆB_±»ºüïßüú…©‹±Ë¯Ù³÷ܙӺ¡`ÅüÍo'ˆæóeÈñM7íèï;~ü˜e˜Lp(„°Ùlž9}úßû¾ïz€r¹¬ªD×”;^‹mç<§'Ðt- ÎSEQ$‚išž9rìu×Þðů޷mËÖV¯×W(ÄqhhDð$ ’r)ű„bûŽ}Õý½žF°äQ„0”d¾O¡”䬄¥Š©ßrÇíÚ+MÓVûúúúž}þ™V«Qo¬LOOÏÍÍ]¼pBT©Tƒ$ ‚ ã¼.-/gK©¦iŒóó.þäOþdtløÓŸþôÉ“Ç7mÚ$¥R¡‡œ%Ï®d(’$9}útš¦#ÃcŠ¢Ôëõ¬Ú.‹]ÈË`¯(ŠFfaãœ[ÄÊ€Šø2G;û ;È´,+ b …l§›Y^„Y…´ÛǪQo]}õÕårŸï‡Û¶mÃ./Õ{ô‰|¹â:þúaµÒ‡ÉÆ“†‰I§¦OëºÜ¾}}ÿ`ÓDÓ¥nZ=§QÈëÝžƒ0p'Ž¢ “Û¶ŒdQéó¶mÞqüè ‚ÔÑá¡ù 's†¥SR*Ú„Bƹ¢ªW<2Š`š ¸Qé”dÞ¶Ì@”M‘cß÷!„XUy7:í|©²dãÖmÛ÷^;33wý¾½õzcrr²P(‰Ü^gvîÜÌ̹›¶u›íBa¨ÒWbIÔ‰S )¡eéE»’¦©®äÝn440R«/#„‚Ôo IDATRÆ]/p:ÝÝ»wí+_BŒŽŽ.--éªröìÙþjiyi(Š”’¬j4 C¥¢1¾†¥éf’°ÑÑ5ˆ§iÈ ” ¡–ŽÀ'TaŒ9sffj:oX‚§Hò8E£J¦{èš&â(åŒó(é:½0Ž­öÂüâ†õ>Òi5LÓ˜X·vhh`óæq·[=!Xsµ¶ººšÕXÞpó­Bˆjµúä“OÞ|ë-Ÿû¿AP(ä¾ò¥/,.ÎW*Û¶êZvMÇq˜e$“$Éçó VWW]×-+™OT^î2ζm‚]r´µZ­ìÖÊPB¦mffâÁÁÁZ­–•·d0˲²;]nÍÌ.P)e†ySU•¢zý«S§Îô÷÷?ÿÜ ÓùùÅÏ~ösùØŸÜòú7Ü÷o÷¿ºÿà‰cgmÃvï–»nœº0×ß߆^zytí°%’Ð$Y²,V«Ÿë¯æ&ÖõÅ¡øÑìô™>>.çf—––ü(4„U\o¯ìܳղÔù%¯ÑY6r I_ëIT¢Æqš+õuÍ¡!‰ÃF}Èpêâ鮿iûÖ'O|à:uÍÔ1=Ï£TÉ辡(ŠV)Q¨eئWõ²‘âR à" )„—þ´m›6‹Åƒ‹‹£ã«+‹qÊ…„PÒ¶m”',NÒØOãDU±¼X(·Z£¤EQR*U6nØ<==­aê·Ý8ŒÚf__ÿ¦ ½zPÄi.—KYT«Õ’$j·Û‘F½•a¤t]?}úôððp¥ÚFÑâòQh_±šõõVçg§ …üÜÜœié!×íAEç—F‚ì ÆËŠRkµZ___6Qe €ëº¦nfeC"³B›¦DAöÅYÌ0{5Çq†;NÇF£T*]ñÑfÅÌ„dY‰·nÝþË_>ÒlvÏž½¨ªzV{¼oß­Ñj¹¢ªz%ÕJßÉcÇ×OlÛx•Ft× (µ-kàéß4jš‘h±§üåGþæ+ÿòu·‹UÒúÚèàö«6ß$SkûÖ×éZÁÐL‘Äk†ûm“ôU …œ½iÃz•’#GŽhš¦zæ]âœs)¤”#B&!$T ¨Êt‚‚I¡êÀ( CÛ´×ë6[*Õâ(X?Þê4ççÂ8`"í8-.SßwóvN¥O¹çyFΪôwz]D ñäÆýèßsͶvk¹\É•ÊÆ™Á9HS^¯73B§ÓÑ4 B”$¬Óé uÛ|>„l5ë” (.¹„år±ÕjAŒ>ó™úÒþ¹P´»í–©ëS¢*\HMÓ(U-+76:>00D¨ÊD&`Çq¢(ÂTÈ—"¶7 ˜¨ö󔪦iŠëõ Q‚®48" 0Bn×DQbV@p„…ahžç…2‘z¾³ººšUP@}ß]^^n·›‹‹‹Íf}uu¥V«Õj5ÎùéÓ§ AíV+MMÓ²ÊÓl'Q‚/^¼è8N’$õ#MÓv»Ýá™× 022bÛvE­VëàÁƒÝnw×®]¥R‰1fš¦ëºË1û} „à‡ÞôÌœ+¾îu75ã'ŽX9S7”½{®:|äÕ|¹rï½wõ:ñêäxßú5}aØŠYǰòžïz!´Ì"ÒT‘JR·[ÇšiåLÔ•¹)­RZí®v—Î|ä?üû÷ÞýÚþ…«í¦MTD»9ƒ}íšá³S³”*Á^”„aˆ1¤„€Â8Vu3§ Æ"‡¡aAž2 d%fΘž7;;;XíCL€DRNud5V‘èår9p$à$p#ÀQ„$@p ]Ñ£ÐÍ™ H…iV–ã‰ñ‘ÙÅú/ØùcL%VÞ6|Á‹ÅòÂü„pl|m«ÛÉ— ažr¡¾JåÔÑ㦡Ç~Ó P,’” F)M8“Èâ刧PAϾö¢5 8’Ç …BWh(â^ÏX-A=Wb²‰ÔÖMSE%DQÈ  qA û«N¯“·-,`âGª®)Dq—¨ªa~AÂ(ÀiºŠ1®×ëÙä>ÌF!bÉ¥`¢Õh4E˃ƒƒÙÒ !¼ûî»Ã0|â©Ç^à"HtEËÖsâ½­[71{~OQÑüüÌÞ=;î¿ï Ͼø‚ni[¶oêÔ‰ÞõGw¬.7³æ,ÆÄS®( œ‚‰X31vâôÑÁá¡ÓgOMlÛVoÖo½ãúÁ~ð–7í^Z<ÊAKÓÚÒéE‚"D4MãLî¼jWã¹g/¤ˆh •’GQ’=5’$‘)yšªºN-CôzŠ®ª*…0a© 24=ðœ±={uÍÔ4ÓÊå––¥ÝnwÝÚñÅtž'©HàBSÔúÊbš¦çΣ”ú.«T*Íf3Ïá7þý?ÆÇÇxêD‘gJ£Ùûæ·ôÑ·½õmøÞ÷ìØ¾m÷ÕW¿ðÒË'OŸ¡ª>;7Ûj6¦.^|é©§Ì\®¶²œÄñ™Ó§Ü^W¤Éu×^¿}Ûö'žx¢T*ÜyçíµÚ²i¯¿ýÖÿó¿ÿž`Ôh6[Íî¿~éK7í»å3ŸýÜ}_»O×^×9xðà¦M[~øa„È@ÿÀÀP³ÙH“apöÜY!X._Ę(šø!„ˆR¥çxiÊžyî%Àc=™³r#×w}Ïiuš Óëš’rÑß?dZ–|inJQ1 ƒ&†™¤L× ÝЗÚõ@hË–-Aض­ªê¹sçJ¥’JeGq2ÆLÓBˆŒ®]{èÈa.ÄÅ©i!å÷¿ûÝM›Ö­_{áÜT»í1&Vg§ÍBžR,{½^G–e¹®#„( CÆa•Ê}šfŠår¹ñ”q!„àBx¾O)õ\—P’Æ¢ÿ»/[2UUít:Y"õr¢]Ï8jÙŒÌ2€v»-¥\³fM¯×Ó =#ÁPªAˆý?ÿ®¿¿:44844ÏÛøR«»{ëí{†G Ó//L¹½îΫvmذ5ÍD¥rÂÔq=L¨àLJ¡©JEÀ‹SS‡vœ^àyN¯†~¡hGq{bÝÀÄİi(÷¿j¨€xµÝÌʈÒC‡‚9Œ $U猄Uh§#‘¤UUKÅ¢”2 #Ë4«Õê»Þõn§×››žB8NïwßÕó½™……B¹è{®|ËUÛK…à¶mA …œJH·Ó{×;ÞõÛßþ¶^¯Ýyç휧íN«T,8ð„„RýK_úòðÈèßÿýßxíUÃÐ÷ìÙ†áüü\¥\®×W5M›šº˜·mù·¾ý–N-Sï¨,.Î8ppznîÉÇ»ÿ+G>tøÀɧæÞþö·Ž — ù#‡%I\(ä ykeiAHŽ!â îù½7-,Î3žÄA ©!440FaJ… ô¥=×/‹»víZYY™™™Y^^Î) „¢Œ¬!¥ìuݾ¾þ·¼ím¹RªÊ©Ó§]ß«‹ûö]ïôzO>ùôÞkn,•*›&yšn\¿¡Ñ¨W*•0 0ƽ^×÷}¢P3—‹“F‰¢jQ•+•v§-ït;¡$Ž)¥qa„„)K³ ]\bsÛ¶Š¢fS<¼\”=§—‘mÛÎ 3a+N¢L.ˆ£D× xêéçÚv.goß¾mqq1Ÿ/;{Ñ0I¾älqï[nùЇ߹uëèÔôñóSÇT]VúË•ªPR@ÁlHʤJÕœmqÆuC‚EIkÍxÚ?‚÷\3ù½‡þãõ·ÝúÚþCÝn8:6á'áñÓ§^|õͲcÆMË‚§, ŸÇ ã"ˆ& eR(Š®iº®êŒq×q%—áÓ§Oß~Û>)ÒbÑît[?zøÇÇOßqõ.Ó²'7n²óù¡Á”³Í[·*šÖ?8 9¯¯¬Lßó‡ïyíµ×––öìÙ¡4M#JÙÊj# ÓÏ}îó7Þxã?þÃ?¼ÿ}ïíë+Mn\7;7 ìë+¢8DÁ½nk×ÎÍÛ·LŽ­øÀÞ{ôÈÁuãWïÚµeó–[o¹ñÞ7¿é–[n¼ç®7¼á ¯¿é¦ë)FÝnkbbìÀýœ%ÅB Ñ^­c “$Q4Õ÷ƒv·súô‰Às)Æ,M£(òýÀ²Ì0 ÁÍvÓqznWJ$„ÈŠìK¥Rö~çóyŠ1B IâV«©ë:€RuphXHÐíöΟ»0>>áušC#UÆÒ³g§ßpÇ=Íf¤éŠ©êa†aèû^·Û%{ž—Ëçûú!À”( !8¥¸PÈEq ¢ÐÐtL°àJ ¤DRUÉÎâÙ媺ìjË¢8W*{®à¨0Á†adö™+@E‘—ª)ªªÀ_ýÕß>ÿü³¿úÕ¯s9kvv>‰…iæÊ¥ÁnÃß8¹æâÙŠ îÒ'þòýí^píÀÆ—cœrA) JE‚¤äQEÁšª°4Û°níÈ SÓûsznx`hffŽ ¾výºØcæfºQ—al•J j¹ìøƒÜ | B(sÁEI™LÓHxå "+dŒ9޳sÇvY©`öz‰uc òWíïtk×mœž™£”j†§"PѨ¢(~š¦I0I’ä#ùÈôÔ¹k®¹æ¹ç~×?4¨š9„Õï}÷×ÝpÓG?ú‘_ÿòï¸÷-·ßyÛÑÓ'WWWžxâ‰$a=ôÐòòb·Û5L¥lé§Ž¬º½îÜÌ){óÓ*ýA˜ä ­¾<ã»]ÆX¥Ú/Zª­ŽŒN=~ýµ»}ìñGñr¾çqŠ ¢”úN0²v,ŽÃÝ»w×W–ggŒy–ˆôýhÃæõÍf³Tɵ›A¦éœ;wβ¬R©DÉçóiAijˢÝ꩚¢ëºmÛHS¦f¦ûú«=×i6ëÕþv·£)Š”°Ûí*:év:=Þžž™êt:¥R168ØŸIZQA¢ª\¡š”b c‚é—c"e’ Ë0 AÇw³{fvÎNP¥”‚LÍ@ÊârUbfZÈ(CÙö4;ÜOXœÐf&PuóرcAè¦1 ¼Ð²ó¦¦ö쾦ÖâŸùÇ¿^3Òwç7îÜuC§:rpbr˺ug/Ì0.„„Ц*~¬*&% €bffzê©ÕÚBtEš`HŠv•*ðλn(mN"zúÜùÕ•:@Þnu‹å’”lnqAÓ4Æ€BQ´$a†®Å)CHÄ)¡XŪn›ª)„ˆ£T¡ U ÓëÝu×]<Ž<·G(Š¢À0´‰u㊢ÌÏÏs +õ†](F) Ãlj¢êMwiÇŽ¹\N×õw¼ãíV÷¾1¾~¼<0¶~ÝâÊr”Ä–ªGQ” Èd° Œ0MS'uMÛ 7³H ‚ÄSU5H½²è{^¥TñœYÛ´º­žÂÐÌ ë'y俲<à­·îûúý÷ïÞ³«\Ê=rðŸøÄúΚ5kjµåF§»´Z/•û§X’ú¾»arR£$ ;Õ¢nj.gw»mE!$‰+•¾$å "I~Õ¶mƘ뺊¢й‹³ [w”Z««ºm{ž…¡`,giq+Š%Š•·óùüj½^.–FeVµK]Œ…B¾Ýu M½ÒØÔëõ¼44 VF͘~Y'ÕÈèh¾`«„4[õ¥¥…|ÞÞ³kÇÔôÙìyýüóÏ»Ž_*{~Bœm¥Þ÷¾÷ÝÿýµÚªãxG:¦”"H„•J5MÓÆòr±ð??þ½ž~–%©›0•*ˆà„³0 …ã$ðÇ4Í(N8çÂI©¡dˆ\.—é²Bɸ¹Ífs``@UU–^‚!tɘéV¶mÀ›ßò¦Ÿÿìá‘Á±ÁáÑS§NI(•tÚÍ÷½ç½õfãôÙ XA|ú}¶’¯¾ûÝïÜ´ëšJyÈ„D,+zT’²$á¡¥kƒå×öw¯¿nÏèÈÐÒü|œŠÍ;¶iš¢`âû¾ëºÙ*ŠbS¥‘/CFfD§¾¾>×8çšFŠÅb¯×—¼ ?ð‚À3 cìû.‚!º²´ú¥¯<€UE·sCÃc‹‹‹ ãÍv»±X Ãpýú ÝzÓÐ-§ÛÕ°ê{1‚ÊÿûáOL¼îu»ÞþŽ·MM]pÜv1gärK’ÕÕUÃ0z®ó?þøÏúÁ?ùÉOþâWxmÿ±cg0QÐ3TÐîÔ åâþÛ{àù|Îó<Ï益ò4ÛxB²Cmav µZ­r¹|÷›ßüèo~S*9KtK‡ò—bÛöj³U(2 F>Ÿ_ZZÒ4EaFú½^O×ÍÌqF) œž¦i-¯†!‚RB†a’$Ö3 Ku:-BP±XX]­mÛö®—_yníÚµiÊ¥RåСC[·mÒTµ^wÃ0¾öÚk¿üů¦i‹š/åBˆ$NŠ…B½¶Ð ½S[†R†Q­\()ÍF*¸ªÑ$ìÙ¶­j¥Â´T„E¯×“’Û†™ùG“0¢³8©ÕjqóôÿoêK£ä¼Ê3ïöíKUuU¯jI­ÖÚ¶vÙò"¯1ƒIb¼2fÂaH˜ dÎ''dr ‡m I³„€°1ðJ°°,ãU’mImµ¤ÖÒ{W×^õm÷~w™·­ð§v×éº÷¾ïû¼Ï"!„F£T*l`Œó\ü¶¯­žÃàÜ™3Œ± (lß´{Ͼ‡>(Çþä៬Ú½kâÏþ샿>ôì}ï{;–à£þ‘-›'žxêYÛ-š6ÖIyŽçÅ݈)ÚL¢‘‘¡›nºAȼÛíì¹zÏÚuc•þ‘N³öÕ¯þÃÆ k|ßï´ãò@ŸeYI·](ô)4MS[äyîºn–Ò4M“8Ókqm/˜e‘aB䜳,ã–eEŽã +uðÞ}ïvíÙ³¼R}ø‘GQ¦ ,„«µzÕ´i±Øl¶ !_¨×Z–ålÚ´©¯èMMMµëK\°í[lŒ”9ÍÖ¬²tyúüÜü’Bøð3Ïœ›:Ón6ú+}¯?zöòÜòøÆu§ÏLNMMÝxàÚv½Jêv[~XÀó7S€»Ý®ïûa^ºt BèV³Ù¼téÒ]wÝÕëõNœxͶí,$ÏW1BËÔî&KKKÚùCJ) fàÛ¶-”Ú¸qㆠáÂù¥ËèÀÀ„PJQ,÷5Wjšúž°\ƒÿŒQÎs–gÂüà„˜:ëZIžçùèèèÔÔÔ`i°u !Œ1’ZZxIDATËÅ4ØBR .h†yÞ!ªô—ªË5žqäêÊÁ*ð¬$îpÆúJAX,X–e033³´TeŒ-//fYFV, ‹ôz°ÝnëL‘Ë,} MM (JA1PJqë-€F ô˜E§N¼V B?,BbDivqfflíºþrÅÝqÕ¹ §g.ÍÝrëõ·½å†×'_ì/|ô¿¿ïø~ú“9çYÖs]W÷¿6“$é/—ï½÷ÞF}E)™eÉóÏ?—¤Ì³íá‘þ+¯¼òÂ…óAè¬B-¶qù™Bè7 Ýn›¶ø¡PÊ„Rj˜cÌ0I’Q!sǵ,ÓBENX*Åi²qóÄ¡CÏÜ~Ç;?nÛææ Åu^ÜK0F‚•|»][!Ý Šz RÊ}ûöaÈÇÆFB×:þêËíV§õ²8’@¥išeéæÍ›?z.K“];·ï½Ê;qêôÝø"gµ•Å_ýò±µk×>}fúµß‚{ž—ç熦içœ1EQšÿ»fÍšüñÇ?þñ}èƒI’XQPÇZ¯óù¾¿°°c˜õzBH)u\;Š"í £éñ¯½öZ9èãœç”…ý%ÛugÕjµÝnû¾ÊÐRÇÀ³Ë•R’$6l8qüØž½Wž=;ݨ·87“„Ë¡c{–åK…8îÌÌÌÐTxK  €Hcn A8‰zYÆ †MãåR™$Ñ@_Ù²¬¹¹¹jm¹×ë)¹z¼ô}³m››úþ÷}ðâìÒ{ï{O·Û~ûí¿#X¯¿¿20¾ãη¾~òÂÀàšÙ‹m ÏÝvûþ¾’»²R7LhYXAQ3êÅpÏrY*hÚ6MTÎe><<\(¾ï›.úÞ䫯”KÅsçΘæœ'IâVóܵ\A“a…"ß÷Ót5žTJ`8ç8—9„€@Ì)“ ›¦ X34Ø©7)¥Ãþã—oÞ´¾V_Êy&$DÙ¦µ¸¸¼fÍšåaXŒâlvv~ïž­VCä´¯X°{¥^÷ç—:iZmÔ¥R„%IÁ(ãJ~ík_{äž<=Õîv*ýq·ë™DJ^¯7¸ï&qV(›ßQB^¶'Bèìê ¤B išjÏŒqœF®­+ÒU% CÊÅÞ½{/]ºÔh4Ò4e,‡ØŽ¥e·«5ÇqŠ#¨d"ïFÝÂ@Q"ÅÒ<¡½$Î2JõºR)U Ã……Åv»í:~–±‘µ£ó‹+Ó½õÖ;ÎOÏß|˵GæÈ@RB)ešf,“aцr_Gq¼)”¶ ]ËæPrÈzŽãèÌ\i;V–Ñ(Š´ M˳y0œ‹ËæôúºB)¥¹T’qq__¥Rî§”jÕša,§:ÙAw8ð—Ÿøì=wß÷î{î.—K[Æ7þðà÷>ûwóâóÏ„ëþ¼ç+ÿ÷“'/¦‰ë*ß?øÓýÅý4¯ÅI`Û6(™ã8H¡r¹$ݸy4Ëš~`” ~¯× Û‹“Kç¿~æÉû?ôÇósËa!Bú¾Ÿ‹b„êF=Ó4•àÄ42FE.O¤”IBÌ<§œC©$JqF xžÏÛ{Í5¶ç^œ>½cû¦V·µ}ûö·Þys»×%„”ËeÁá£ýüÎ;Þ.„°L§zÕå#G¡òJmÁ¶MnŠF¯ ‘Hðןÿû¿ýì§T…¾B»×µ ba+îu Ë û I’=õË'Zµ•—é– )jcÛvbZ hÎýe0ÆôPob°a‚Ò4îtaès΀cM½Ë†v:7¾ãm·ú‹Ÿ~ò—/ýòWœ<=õ?ÿ×Ç熷8¶G°%„€PJ•ç !̾ça`„åZ«=5}aa~ihh™ty«ÚÍ\IÐn÷Žo!/O:äDsö0ú‚o¦•bŒ€J„FE‘éz7nüÍožêgò“Ÿd‚?v2Jb×uçÂo00Xùò—þÞ4ìB¡d stÍø‰×'ñó¿÷¾?° æ šV«ÙÛyÅDzÇ·ÞxÓ‘#G²$qm‡ç4S[&—¹Ì•çšs—Î÷­±-Ã5 š¥ Óà˜ŒQ •M!DB Rè¡P¯ 5U϶mÓ¶µÞPJ¹´´DaB’8ÕNÓšë>;;ûàƒ¶Ûíï}ï{µZÝó\à ,_•·3Æ2Ê=Ï2VVV „Ýn·Pò<ÇØÖœ)Ó$KKK•JåìÙ³ΩmÛ\—393}QRqå®g¦ÎÝùŽß}é…DŒ ÝnéG ¥!„Úä çÂ0t±†â ð“$A õ§)m÷ºŽí).û²cÏr]—캮iZÓÓÓQ' K…m[7Z–388hšvžÃF£¡5'Y–é…ªN­¹pñ|†«ÒÀ×üÆ'þâ“‹µæ5®ùòÿùÊ7þé_žxô1Û ¦Î.—~â\sÃU1“ ‚]»¶ÍÏÖÚíÈq‚4M•ŽcQ*•‰F· !8ñÆéå…ÅM·JnV£¾êÒÊšÁ ý•qÏ­ø^!—qšqB@’ a`í«+c9F«: ƒË®û(¥8”æ–í2Æ×Œ¬ív{»wîYY©÷õõ-,,MNNÞxÓM7\wÃÚukž{æ±êÂÜ–ñ1)e«Ù%žy~z* Ü›o¸!ôÜ´)ÀŠ¥Ð5œçžyv¤¿ròøky’©8ç†e Á€BÏ"Q;&n׫úÀåœ=w~qi[†ëº†a‚Ë ˆ‘IVc‚;á2Ë2.åeõöôôt–ear®ÁºgjYœ”ra~¹\éët:q$üÐÖÍœþ·Ø¶½¼\w_1虺Õhb2–1Æ®½öÚÓ§O¿ë]ï"„¤4YZZ|é•×®ÙýÅé‹[&ægæWVê¿xìñb± sniÙ´ÝngY¦?ašf„„áå– BÀ¹q®ã}Å0Ë(ÏåÂü²í8à$É F b±`ÛvzRJÛ6}ß·, cãÒÅyÆRƒ8W\±Ý4íZ­Öíô0±uïyžþ– …ÂîÝ»çç´º•±lµ7­7ÓZ;©ô÷}òŸºñæ#kÊÛwŽŸ:5I̾F#îEÑØÆ±·Þ~ËïÞõNFá;ï|†Aœ&™iaÎyΩiÇ´i–{¾“eñº‘a™',ËEÞ[œï˜¶3yúè 7^ýÌáÿ@bØŽ€˜&Ðq@çàÍÜr=ÀêÈ,„P.y–1Ï"A@D\˦” ôãm™mËZ}~ýÚ¿ùì§§ÏþÅjµ¹u##õú F ×í†Ûj·Ë}ƒ{÷ío4;7÷•‹Ýv[r•Äq) ÷ïßoYÖÜì,Ð4MÊR•Ê´Hž&keL"N¾zôŽwüÞóGŽCˆõ5LlXÆX;w^ÍÑPÝ*‘Þ²„R:¼F·h¾ïG½N๮kh¤SÁ¹Ð>¯4㥾bÇBÏ·/›,8ŽÓîD€V«Ҍㅅ…œS‚ ˲’8@Þ}÷ÝûØÇôº$Jz…BÁóÃ$õj]r•elëÖ LÈìÂüðÈh§]W\ŒŒèåKœ[yž§YbX#-†a ¥0 F§ÓS¦I¾fÍ˱!Àãk3JÓ$r'Žc„@œô´©D»Ý%Øt]c#Š’ÙÙùþAÇvÌ11ã8Ö;§8Žõ @ȼV«áÕº7iÑ÷ôS?}äç?þÑÏæç/ýñûïyþÅ_µZ nÜÿâ±SiFMËRKÁ¾½{+£½N€ˆãahY&Êqí8Ž(r—×VëGÊÃ^¥d÷OìÜðÐCß¾þº½ÿúÝoGq̨"†• (0Â9Ë 1Jm‰ßLÆÖlð$I!†Æ‚K‚Ín/ Üûž÷®Ô–[ NJ{®o½þÚÑ8íú¾å;VÔj›–ÉrŠ Œ‰ ™_ZÞ³w_£Ý.–Âu£k¥¨f½Ñívh’ìÝ·ïðágmÛDrž¤(Ås!€8ç"ŽÓëÜxøð³adŒú®]*úPI‚ 0çÂ0,!òË Œ&YjòN·{qfÎrÜz£¹~ýØS=„~š$9Ë5vcÛ¶Þt–J¥b1ìtºYF]×! ò<‡(,ÛÙ´q3„¸RîÃP)Ñn·¤4Ë8Ï1Æœç333×^{ÝÃ?¼cÇŽZ½688Øl·«Ë+ûwí]©×ž{áùc¯Ç…ðÉɾb¡¯àëMM§Óv§×ë¦ij;6ç9!˜R†¹í¶ÛΜ9×éDJr_Åuý={öö÷b$IÖét×qÎ)eR  ”RHîº^­V›š:ãûA·Û5M+I’‘‘5¡<ç„“““€ÁÁAmfÓëõúû+§ß˜$C›ÍF³ÙD€’ïŽ>ýÔ“_ýò—¿ÿýeŒwvÚ2í(Ф‹‹‹o¼ñÆ™3g!¦I8g ÊRrB!(çL166¶}ûv탢ÿ–Þ©6N§£.ã¦þÝg?ó­ï<(Xuê´AœÑõëÖ Œø¾o`œÆQPEÎ Bæçç[­Vš¦SSSœsÓ1L‚y.ô™Ö§MáûþÒRU«ˆ,Ëâª\RJ-Ëà¹R”f+„¥f³©-ËŠÛAˆÄI‚v¯Z­Ë啕奥¥Ç{↛oÁ°,þâW¾˜ >11ñ?zàzëFG؇ töìÙ\äI’éðqàûRå„ ^'-C¡ À <>>>::Ún· ¥âØø&à`¹Üív£¸{ñÒÎùúõë;ÝvšÒ$É\×–RFQϲl]7tSW(YÆ9‡”Ò8ŽÓ4­T*Y–Ù¶ ¡§ÉÚÊèðȈë;QaÀõn¸ù–Ý^uÆ5ÇOzñÿøó¿šžœ=ýú‰á!×qóF«™IÜL€á•H Û†a›¨–%=Ó´v #$fÏ1¥ Ó,~騳»öì<|äp­¾ ‘20Î)· !Ú‚`)…BÀ° $PSû´ý•.ˆB(“8“$‰0×]sµåÖë‰â¶aõ:]FÕÈȺû·ï¾÷úèûSÛqÛµ„aÔõÆñã¯Û¦Ó¨5Ò^&¨É3Ñnô&'OclÆi66¾ixxôÒÔôÒü¼‰!D9¥œ  B¿”¤ê7/-”‡‰énÝvÅ¡§uZ-ÅE¹\îFÑòJó'? ¶éºKÕÚÔô…7ÎNyùèS‡žÙ½o¯ë9%Ã@J¡_?óìõ7ÜøÊ+G·lÙzäȳJ &X'3Æ Ã¬×[¶í†yüø1Ïs“$aŒBÇQJúAh¥ 7†™sNò{ii!Ï2Å•Š`b`b™Ä!˜¦ÉsGž;uâÄ믾zìå—ƒb_–¦Cý3.Š<ÿöw¿ÓéõjÍ.€Äs½ñM[.ÍÌA12:­£Ü¶=J)6ì¡‘á¹¹‰á®=;J¡–Bñë§&gæ=߯V—¤`W]µ;,;È0,)D³Õð|3M?èû½ßÿùù%!`hx4,”2:­¤º²200X©T(eBH’F;wïÙ±swJ³ß¿ë]íN÷ÿkZ'ï»äIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_resample01.png0000644000000000000000000024676311722777314021760 0ustar rootroot‰PNG  IHDRÈÈ":9É IDATxœL¼Ù“\Ù}&vös÷ÜkC…B£ôÞf¯¤Ø\D‘¢6*¤‘—pÈšð‹ß<žÿ ~q8Ba…­ÎLŒÇ£PŒ¥‘F–(’’ØdsïfïÐ @jˬ̼ëÙNuIõd*oÝ<÷·|¿ïû~€ÿË¿øò<ŸN§½^Ï{ÿöÛoÏçs©UÓIã¬sBˆ1†çsÂ8Ž­µmÛY¾µµ5<8wîœÖ:IBˆRjmm-Š"¥¥”1†1¶Ö !¤”Æ:)µƒ€RÌ# Ð:çœ3œFBÈrÙbÄvï–ËæÊ•ke=Y/ l¶.Ÿ{ê3ÞÞ¹õ“ýôüÚ¥ùaltÿþq1¿ö³—¦Æzéó/ýî7~«®k!T×Ê(IÞ}çÃËW¯}Ÿ,cû‡×®]{ëÝw}ôQçýÅsk?ýá»úÿdz°ÿÑÇïsGã>§°í*« !b¢µn…VJH ‚ƒ^/Kâ²Z$I§ !`<—Õ!8™Le¥µö:ça÷îÜÓÂËV2Æ’$Iòd>Ÿ?žr–$ ¢¨mÛÅbѶ-€ÔK3„àÊÊ8Š"£DQqÌ«ª‚Àº®K’h­]YYãhum¤”pΔRUUu]àœÇqÌ9xï!„ç-!€²\VóŲ³ÄQþÑGÏ(ÃBc¥ñc`­5Jy… ó`„ÖJÊE‘u@£8‰3mm]µÖã$"„1î²,ËðÁ‹an"ÜÐé_Þ…¡~¿?ì¢(òÞcŒC\¶mKáœ#„„Æï=cŒâœÓZ[kÃ5ã8ö"òÖZë´ÖÊ9soç>„È;œg}À|>»sçN?/ÈêjÓÌ—Íô _ù\¯×³ÖR•Rm+Ö×Ö²lüýýDJ™äY’_¹r!rxxL0ë÷m'/\¸xiû²s^vâλUUqÎ'à äÝ{ïß|óÍ7õk_ûõßøÕ?úÃÿýäädcm\×uqk-ð€R±÷^`µrÎh#ó<ÀE¶XœX§•R‚¦iÚ¶uÎã”Râ¶mÛJQD!„óù|Q-B®¯®¯i­¡‡J)¥”µ–1Eüèè0Ë2ýÊÊÊd4ôÞgYvïÞ=)ºµµµñx !<><2ÆL&+¡º®­Õ¡ „ /Âs;;vBBèœ Ñé8G‡³ùIµX,”R³ð^k­µÖ{ï½G3øðM„!佇Î[kó„ŽišÆÄÓuÝêêêr¹<88R¶mË}DXüi`E„1Ö4 Æx0ôûý$Ic”Ò¢(º®ƒRJóþðÆrÙ(©/o_nËêço¼qéêÖæù‹ß8·úïüíáƒÃ(Nfó“ý'mócÔ½}ñ¡gŸ}îÁá´ðîÎî3O_ï÷FŽå+_{衇–ËòOÿãŸìíímž?7wwî ‡ÃõÉÊ 1B;­?øà½û÷Ö&£4K¦C‰¶¥&ƒ^’d„2c\k„Ò"b“°²6!„¬¬Ž‹„€SÞupP+%;¡¥¬– ‹²8áY–$iTw­uÐ{‘ÏóTkmçœ‡Ó ÙEQ>­õÞÞÞÚÚÚíÛwã8õÞsÎÓ$K“T ÎcD)Å:çBuE)ýÂøÐ+ØõÀB´ÖMÓ!z}˜eYQHŒ("¸m[)%€!ÐZ+ÑBçÆ!ˆ(úl×µƒasæœÅ9gµVqC0AáPÚ¥”ZkŒ‘gXY]׃ÁèîÝû]'ëºÆaLŽŽÚ¶}øòC/^ˆc.d«”Ä8ú§õ)À’ÛÏæÁÐ+1Mã¼÷eYrÎ…lã8NâôÞ½ÝN*cŒ1!€4 Ck!FÞ{kµs¶g­÷`„!cŒ0Þ© 1ÆL§S!DY–«««EQìììð8ò@„Bñ0DcNiˆ¤(Š0Æ]×@FEç\Ó4´þ 3´Hï="h­•R¶pFyo˲œLcÖZÆIÛ¶mÓõû}L˜BH?^YyçÝ÷ÓA^×]ž òl°§ö±G‹å eBß/²åbq÷νõ•UgÕlv(¥¦ ÉV~ôñûZê+Wu4,ŒñŸ{ù… ÉfB‰Ê’&`,!!D+f®ëÚ¦ |Lˆœsœó‹güV`t„mÛPi­5ÖÄqÂãˆsnŒ±F/KB°RŠ1Š‚aŒ€wZiÆèp8:ØßŽ&“Õ•ªªõÇÇDzívîÜAÀCç(Á¯¿þFœ¤<úØñt>žŒ7ÎM(ƒ”à;;;uS­L&o¿ýæŸþéŸüÛoþëe9ö¹ëZ‰²Y¬®­BïÞyïݪéîìܭ뻾¶ªU‡H’„Š1ÒZw­ÐÖB€ ÅJILH¿?ÇY–9gC=¤¥èdGã4NÑú8ŽXDcÆèª©¦ÓiœDÀCë¬1FiãœCè”ÐZ§¼wÖk3NkÝu¢®kkl%{{{sç6Ö7VÂ0àl`" !EQdYæ÷SRôS®àœmÛ!ì½PFã8hcö÷Ó$=%½ 5¥\.µ’JKc-„"è<´Æ9 ºN@ˆ¢(Ž"TJ:çd6›LFÂ(Šâ8¶ÞI) £áº§à‚³ˆ hÌj³¾¾N)íõzMÓxïCº„r¥”*Ë’1¦” £%BèôR úGꪵ6‰c!!ˆó¨©jk}’FŒJq–%çÎÿý^=<>ÚØØ¸°±úØ£^¹t‘ctóæ-äuDÐÚxtx¼8·¾~q{EÈò‡?øÑ‡~øìõç¼wßýîw>øàƒEµ|ì‰'òÉÕÕ‰”]Ó¶7>þRºX,Þxýçårž¦QÄðêêD´ † ŒHè œ1XL9¥ÈеâädÑÖÔ:M `ŒqFLTýÞ°ë:Š u¶(2e$£Ä{x||Ü4µÖR)±»woeuU)£­¢Bèœ5ÆZkÆÖc „ àTJk­¡Zë[·n]¹rió‰Ç»®kšŠqŠ1®ªÊ{ˆ(ŠUU…H:ƒÈ§k”µ6 ‰ !„PÃ9½ví çñÞÞ^Ó4”ñÓ§aH ä<†*©½ó„PÊ8€P†)sÎkëµõ#|qs¥mÛ@œý2©¤TšPÈÏÀˆxç1”år0 ðᇮªê *†T{ ¯ƒAø§3þÝ9äœ/–ËÅba­ÍÒ¤ikMY–B!¥„"…dŒ¦i¢´‚ö{½«>Ò6Ýx<áŒqB¯\ºøå/üÒ#W/÷;ßî:¡?™W—º²²ºâ½Ê³øþý{‡ÎyÑC]FÇÓé`8LâD[7ÝÇ7o¼óÞûÆk}G¢kÎÛ8xpccÍ*©”Bxïx%q QR9ï1!œGÆY£ŒÖZ+í½Oâ¸×+‚ŒP’&Ð;ï-€ M"aEŒÑ®kËå²(zÁ­XÖºüôgÜ… ›]ºD)Fæy&„ Lúx_fÅð·~ó·cûí¿:žm¬Ÿ¿wwïÞ½]‚ùSO]o[ñÆëo÷ï¾·\Ö”G?{ýeÕœÛÜrj¥×ÖW¬Ñ›ç7–óiU•#ë´5šQ' g‘uV) ŠâDtÊ:À£¤ßë÷Š<Šâ8bœ3£µR*‰c§MÄy×µió˜z8A !ÐÖ,ó¢è CŒ‰B*1¢$Â.N¦Î[ïsÀëœGQ­u‹ÅâÊ•Ëkk+XÎ X’$Zé@gÒÐ?ŸùSbŒÒÊ9*¢µÖ:°¯sVS–Ë8çÚ¶µÖò8B#LeŒsï€6a–$)&”`š9¢élzïÞ]ÁúÆ*Y[[;<<<>>ìpÓ4u]k­³¢/”<ã!!J©÷>ÏóÁ` µnëf±XPJƒØœ¦i@i!íâ8ü{ æÃ„ä*µ6°,„)eÓ4Œ±¢(Ú¦B Ѷm“gY1J1ãÔ5 0ôwîܽÿ4úÙ'®^8·ÑÖÕ­Ýó›kãÑʲ֓í~ѬŒ?¹uåã[ ú“^¯ÿ_ýÞ›¦½¾öcˆñÕk'kÇ÷wööއcGèÒóÈcÞ»{»Íþnûä“OþèµW>9ÕÔ1 2¨ !1ÆY,…ÀCˆ!O…ŒâðhðIÄ«Ó4vN {$p)€^JYE#äp8Ìó|eeåþÞ^ˆ¸®ë ½ z`Š¢ ÌÀÞxà1F”b´nšêâÅ‹Y-æSçU¯_,—sŒ`>Ÿ[k×ÖÖâ8®ë:Ìì§‚OgÌ0§[k­ÕÕ`ÂB=Ã;ã0Æãñ˜sŽ”xÓ4Q–2ŽBb‡"ŒRF÷F)’ xÛu²í‚øèpŠ_ùìsá¹:çÏÛ¶­€2n;«Ÿ!Œ0ÆXIîF)E0ŒÇã(ŠrBœqªAÞ !$¥yû­w­sÏ>óÔþƒÝ»;w–ËÙ^ùür1/Ë¥1ªÈ{ÀC)TÝ´ÚXJ9&Ô:@)7xo !œRŒ!ÁcèœåŒa„¡4æ”Rf4Š#!ºÉdÜv]–åy^¬¬¬BˆµC Tœ±º—§q¥i–¦y–fœÇSñxU =„PkžeăÐmx%Y–Çã,/Š¢HÓ|¾˜/«ÒzçR·0Æ€„øSÅa¼¾±qõ‘kãѰëüâó{ૺnÚ–`¦­­D˜k Ø(÷¡¼(„BçÜ`8`œŸÛÜô “$’R!0&ã$I„aè…J)C´!„Œ6ÆjŒPSׇ¡’¥qr2;ÑÊ0F­5ÖZÀ|~2N½uO>òtR ¼â±G··.¬­Žöÿî»ß¾þügžùå(É…ò?üÉÏïÜÝÛ}pø£Ÿýt±h¶.nýÑýŸûû—¶žMç÷ïïC@ާ'Q!Œ(ÆŒ‘Í͵ÿügztt°\.€×¯?qvÿÞÝáp=²Ö·B#DY”8›ºå<¶Î2 ó<ÉÒ˜ä5FàyÄ;ÑbJšºL²¬íZ!¥PBrxp”ÄéáÁ"£4DHIÇQEcYšyÆÞ)#³@Œ)ÂÄ;ßumÓV¸®mŒUý~/NãŠ<BÕuí½÷Ýwß~û]ï„H™¦™RšR†1: ,}*ÖšÀG2ʬsJ cµ1Š`LbŒpFW&“^‘7B¤ižÆF#ñ$KòˆÇF)­•èšÁ ÷Õ¯|ùw~ç·6Ï­ŸÌŽñ׿þ @€Çd1_j‹Ò¤5ÖÄq4ŸÏ!„Àù|N(…uB@„–Ë2I³(އ£Ñdeµí:œR‚"ïÀ{ï’$vÎàçóEh££Ñ¨m:!º““ãª\ Ñ1J¼ÎÚ¦j!€'³9%œ¶X,¾ø…/}é‹_úú¯þZµ¨n¾{ãÚå+Õra´|äч:¹Ü~èB\¤+çÖ>ÿË¿²º¹µRÞº»+œáåÏm\غ÷àø¤¬¿ö¿¾º2¾sçÖåK—(eœÆËyE í=£ÛG»üØã£¾ñúëö£E×žÌæ/<÷Â[o¾ÍXÔ¶²íd”d4JªV( áÚØsÆ F ÏãÑx@)6N#ŒŒÑm×Xo=¢ºkð„±Ùtó,K‹»ZÎ"ŠÈl:“²úë««1çÚ<9Åe¹,«r±XZçÃ~ÇU½\V ,Ä!0;™¶]3Oªºa,ŽâD½¾qŽG1¥üÂ…­õõ(N8Œum' ‚Ö™²ªÅYž­œóy’åYÎ)¥„PF0Jw][`&“A]/fÓý4á]»ÜÛ½ÆHT§»²c˜qŽœãúÅô`OËæ…矎"àM×6KüK¿t]c´)—õñl.:0A«£J©S:ÕÚ ÉBŒ1Ö9ˆž2Æ#¼g”Œ Î9­•1ÚÚÐÈ-BHk+I­óÎm´ìÚNtÂ< qžç³ÙŒ2ÿå¿üŸ¿ô¥/_¼¸u´üæO_¿°¹ÙÖeÓUç6ÏÍ'YžXާkç/<8žßødçÒåkYѰ¿qû qñâŶj~úãŸAàѶ6®\ÝÞØ­®öËgÑx4>Ü?´ÆPÂ"ÎöÖ¶„0f ‡ERŠ)%Xç ÆXií¡Ç”J<ðÖ;ëõ{Êyìœï:áœçŒSJ €FëSR!ÎHž¥!)•ÔZjmN™?c Žk @ Œ;€Á`˜$©±6MÒÁ O0£”fYA)ƒ1Æ»Nxï¡Î)%ã$ÏsÆC4Žƨs^J¡¤PJ9k&ã!AÈh…HâhÐ/¬Q7?¹1÷#„ ‡ÀzŠ ÅØ;olÛ*æäñÇ®¼ôâ³iÂŽ÷¾÷ß#ZkBHžçE/ãœj% sAçs–1Š /OHnšš1&¥0FÇq4›MÇÑ1 £SOYÐp`TJHæÁ¦iÂÌ(»@ÌÂ:kmð$¥iºXœÜ»wo6›}ôÑßüæ7™‡A2ÒÚ:D§ëV³8zxû5^¹r #~óæ'¯½ö£,`'+ýû·øÃ_ØÜà”ö{½Ñ¸¿µµº¶±~xxˆˆÎRæÁ˜G4yéùÏfYÆ)kªrv|ôÆo„.ŠÈ{¯´§i*µ•ZÅœi-“8 “¯‚2 €;ãä‚âá=aÖµ*‹‹À¿Bœ38„h–eIÂ9ŽcB¥´išVÈVHk|Ó4ËEå,ˆã˜!LS^UU§÷ïïÝøèfÌà ÆÐ[sxxÈh4•2u]sÎ)¥gŽ¿áá+Š¢º«¼tùÊÃ?ÇÉõë×{½ÞþÁ}HâŲYÌç²i¡EžìîqNÿ§ñ?z`þê¯}2¼G IDATþªkîîèó[[»R2]¹r-‰âí Ûû{‹ãÙÉÉ"KRŒ!¥”fm¼§i-·iÆ1ty‘B€¥êŒUØQ¡1æÔ£„È{!†0 bÆ8øø‚§"ЧsN)Óu]Y–eY†æ"#è0)eÇmÛF” ‡Ã¶nîܹ³±±1™Œ:ÑŒG+«««aô £ÆBÿ©®Œà©vdOñ§² "!溮+Šž³hПÔu}°¿EÑh41(Õ9¨¢(qÞ: ”ò!Ψ”]U•óù|¹\JÕÄqL„R(¥D1Š±Ñ¶ª ÒÐ(Ɖ¶Qš1=`„B0Dá…zÜ©ó•rF†êbŒ)Š"̨]×Úh«”òð8ŠSâ,pc¬óÚ˜élÖëõNóáxt÷þ½²Z@è¯?ñ”­Ú(bˆ`D™óÈ{ÊHÎH>è¯mm_üê׿ú /L§GUU¾ôòó?þÉÏ“dðïüýbvR# Ü>ñÆÍw_ý¼÷£ßùÝß¼~ýR+äk?øY]—G‡Ë/åW‰oßܹ»³·ÿ`×h?®R‚3H!D[-D'•€PŒ8#CcŒsBŠNU¦ 5Î{¸aà‘µV)m­¼ÖÚ:c‰yl­Å:gº®ëº®i+);)µµB¼÷F»“ú„"êŒß:q¹¬66B¸X,$ÃáJ)=S¦!ÄAL‹¢ ¥ÔZ"‡—tfÒ:¥¸¤UÒ–ËÆYxrr²³sw<L=0Z 8D rãɰ_¤zcÜí[;¯ÿâͶ$M2­uk;ïmóùÄÓ³“ãû÷ï¿òâKQšx1¡Rβ$­&å²{÷Ó$/zÉôƒÁ —¥ÑO^Ã<õøõ»G7?¼ùȵG}ä¡Ï~ö)ç—.¯n]Ü|øòµ?øƒ?è 7ÿøÿï²ïýâ½Ûw>QBsÂyNÒ,V¢„Xë‘·!'m[—Ƙ¸iœsB@ô“ÀF†d Ò„H5Ý™›%&><×`S5,Œi©qÆáN¨Ð§³(%ÀåË— Âãñ8XvBUU ‡C!Û8ŠÏ2cΜNÇÚp©F4]Ýi­³,K’„³È¼FÈÎ>þøfhÜeYJi…i3 À„„‡9ÃιºYN&ã'¿öÈ#WƒÁb±ØÙÙÁˆ!gQ¿€ã W”ð8Šz½œp²Xžh# !˜@ʰuÚ:€bœHÕqΠŘÀ,OûªTˆ¹¡þK)9J©$Iœs"ï=AôŒÍG#ˆ öÞÃÑhòâ‹/ާGãñð™gžнóÆÏ=÷ÜñÁ¡÷aê!aQAhrt<VýÑü¤ü÷ÿþ?|ý×~eee%Où|¹|ïÝ·ªR]yøáí͇š¥p †Åùw·¶ò¦;^–³Ù|oc-•e¥…yëw€ÓÆ*Jéd¼¦dÛ4€(ÐÀ¹À]­Ò4"Þ‰J¬ ¥„gyÅ B ” !½yèBB(BÈbE©?½’g]×8甂ZëN4ŸâxDZ5P"e€UÊ(eDãþp8Œ9e„"ëõò¾Q–SÇñÆÆF4x…„ ‰E cÌI!4Öîª4RH…(‰„´ie•R˜ò²>.ë®ëº<ÏŠþÐ:‡R²#سК½£ …ÐΨˆ¡k×®mo_¬ëúèhj´‹óˆ”e1Ìó<Œ{Á’€1^?D(`‚ žUNÎyUU!-ðlÊ*@Å Ú„ ˆã8 Öà;eŒ!ˆ­3ŒL wF Ã/—UUUüñrY]»vík¿6žŒvvn;çV7Ö¯=úHÛvA„ð#æ,<<^”Uõ¯~ûòEˆÕúúúÃW.öò¨ªªÙ¼üwÿöÿyõï~4oN§Ó>øèàðƼüÌïÿþ×ã„Fñh6[àÞ~ûí®ëöw÷›¶ôÞ:o677ãˆ*eŠ"›6M1c,&ˆbœNÓ˜s^-¬C˜À ÙsΕR¡ï„zªõ©5‘³~ÊOB\È¡=”c¬ .x„óðäî~Ûª³£sÎ1L‚¡ª®kÚë[kÓ4-ŠbooouuÕ{Ûï÷ fÖZçÀ™•ªëº`<‘ c¤’ZkÆâ^¯§µ6Æieʲ¾B)¥ f'³¥VVIsÇÉb±hÓ2Ž@ƒ&Bk¬HSî½Í²Ä÷чܺu˃!Ÿé:gx<(ò¼ßë[k–ËÒXGîÚVII0¶ÆXm¼uc¥qB1I“¤ßë„9çRŠ Ï$I’e„ÐYŸ$ɧž ŸeYhü„Ð,Ï#”²^hͲ¼i[Æ9&,Ëóe¹È‹œqvóÖÍû»÷&+“ï~ç;ßþ›¿ùðƒólððÕÇËZHíðƒŸÞ¼yÛy ­­ëåññáO>òØc×öw•ÞùW¿÷ƒ7n{Gó²m«VTU3{òé+êåbmJó7ÿßßÿÅŸÿmÄÓ“ùÌ9[W c”Rªµ1ÖÌËe3A¸%ÎYÑËš¦"”[ì?FŒõ!Œ1AãÊó¼m[„pÛ¶ÀZ„!&€Sñ„sE<J @¿ßÀYkVVÖîîÜ'”¶m!X[™ ¬ÖëçÎm(%•Þ;ï„`mm•ŒhÛFIEQšf§.Óõ,çœÃRJ!„(â<ŠxõûC¥õ;÷Næ ­ÝÉɼnÚ¦m9>œ.«RC)%àŒ1Á0ú†jŒBÔuÙ4UžçI’ kmØÛ – àQEÓéÔ¶’>•†&aɉãÒ4•B%IŒ¦”¾÷Þ{”Ò‡~èÑGÍ‹l±Xܼyóµüèá­Kç6¶v*£³lðÜ Ÿ9·µ}x4—K„ÁêÚ䥗_´ªÛ½{/ÍXš¦ýþ衇¼ò¥/LOÊõÍóƒeu°(›Ý½ùSO^NâŠG}JëéöÃۜǿ÷û¿=;8ùOögù—y<›ŽÆELJ„q‡ÀXï ÒZQJ“$Y”µ³À9ï9 ÎvcJIk”€€îO×ã‚ù˜óÓÕp€T]×Hï=ÆPüKu]¯®­x&ÖjΣ¢È¡“ÉÈjE0´Þ7m«:•%ŒSÌ8+ë…1Á@’3üN)…П)Ðسí˜0 „i‚©ÖÚ/„ÀŠpÖ:=DŽ„ d˜9ç¬÷xF)B¨ó!pùò¥8æMS!Jž}þ¹Ÿÿâ8MðoýÚW‹ùl6ë:¡¥nÛF)…rÞ!ŒÃ:Q˜n‘õz½^¯×ï÷ƒs&p3Ƙ"ÏÛ>L×uËE½µVJ¶G¬µE1Fµ6q”hmã8î:¡”:þþü™ñŸZý;ÑI­ëºÑÖ)c൵Öúù\„¥6Œáh4lÛÖzpnó|רÉ$Y[[-8§ÞëkoÅ9»ruûd~¼±±6Ÿíß¿7qÞûõ¯ÿ¯ƒÃÙÖŇ~åk_OøÓßúÖ·æ'úÁþýѰûöôÆß~é¥êÚÃWaE‘Æ«£¼ŸWM=}ÿý»wUqµm]7 %»µÕñæúZž%B'sÀ¯µ•R !¥T„Ιµ¶MEÆ’„°À³W]Û4µ–1rJ¡âÓçøtÓ%LòÞÛº.Ó4âØ{R—· .—çÏo1F(¢ƒ%eià•<¢Ø!I0#…<)e–eIaŒ=ÐJ)¥í©=Æ;etYU­è FÖ;ÑÔBÈ4M @«ŒÔCYˆ‘ƒ„R@ s:ƃ~/¤REßÿþ÷¥”„üÂõ'Û¶£„öûý4M•ҋŲ,—Ú¨®ëÂîržç¡÷u]'„¾Ê¦iªª:£XÂ@äš@½c³,[.—Æ„pà‘c"ã,çÌ ”6Æ8ç1¢ 0Ez’8‰ã¨(ò••Õ“““ˆEËYÕ uçîÝ8ɯ=úÈôä䯿õ×ÇGÓ­í Æ¨®kpëk+Yž•UÕ4e<É’Ñd„)'M+ŠÞð/þâ[[[W>sýE­ìÞîƒ?û³ÿô'ÿñ?lo_xô‰'>xÿãïÿðµ{»»«këW¹6F++”ÒñÊèÜæf¯ÈF£¡4‰c‚I×JÆx˜Q”ÒeUÖue­"~ªÊ1€cÌ}F)­NÝaU@1.ËÒ€¦·€M!ÀK)›ºrÎyÖëõ¢ˆC,:˜2’eY’ÄB|x”QJÂA KÈ¥TÛÖZkmTc]ÛˆÙlÞ¶‚`æ „ecdöÞ‚0ñÀ9¨·€Æ(ó8o½÷Àûg®?³¹¹étÎYï^}õUÎ9£”hm“$a”z¦ÓÙÁÁÁrY*e¼;eDú+³+h­Ãb8…ð?5„BuVíÛ¶…k­µÖyž[ëÃv¡÷žæ€ÏòYK)«ª !"„ ”Ú¶Å}Æ !(I’¦iúy/Ï—¶¶?¹ýׄñG”$QÛ¶Bˆ$‰CÿŠ¢B,„°FA࢘åEÚ/zaßFJiŒgŒPšÆqs®-Z!‚$aó (ƒÁ¹I)öÞ YSJ!r!ù…Ôm#¥””RF‰ P…”ãSŠ@‡C„;!ÑJÄÎI%‹hÇ«««Zë4Ë꺜-–a)µë:üÕ¯|>Ï2JiY-ïÝ»p¸o´‰’Ø£µ„PÊ„óùÜŸgÅññ´k…1–FµÖ !Û¶ÓFIÙó„Ä9O  €ZigˆP‚0ÒZ;ïóÿÅ·–ÏœO²¸V»wïþýû+'°Êb‚ˆ1º¨ª¼Ê‡Ãaž§ÂR<’ˆÛSÊOž<é,^X8”çpÈoF­uU%ƒcJc„]QL”’a-.ƒúÚÃ-óZ­ÉY¬”q H/Ã0œL&JJ¥”§Y„!WÊæf¦ƒ“q1™L¢ÍZggsÿö­»aƒ|íj%ϽðÊÖöîîÞ ^ëœ9óD­Þº¿ºrèp«×-PEQ=x¸~þ©K™Ùª”Réáp4;;P¶»³E¨µ6þ…§Ö·¶O=zëöÝÿó_þ kÁ×í·ÿËßÿo>\ÿÎw¾óÓŸþ¸»OA[Ùý{·:íæéÓ'‹,½uýZže­V‹b¤ýM§lY–•(¬µÔb¯jÔkÐYèDˆ D@”r?;õÓ ÎC„ g0¸‘'@ã¡Âáp¸µµõî»ïv»ªÙ]y°¸Ÿ={öìÙ³KÇŽò(¥“µõÕ©v;ËÒ0ˆ:ŽƒHီÕjEYV¢¢Ð¦ÂŒò€J£¥”eadq\ƒ£´Ö!§õzb¬vÎ@è(%"J1%„Re„¡…@k[É¢ÑnAˆ•±Æ•«·ïÜÕÊ”EœBàW_þ¬Ö:/² g=( Öj £$M³Í-ÐÍ·Ò4ë÷ûFcEQ‡AÀ“$îLµ¦¦:­V}}smjª3==ÍYˆ1ƒk­‹¢tÀ"„¦¦:KG[­&BÀ9ïÒ¡Æ:k#lí¾¦ÓîDQœg¥ÖúÒÅKo¼ñÁt0ìK«X=vòÉ —®ßº37?bùtR«}xå£k7¯ýÎï~äœÙëî_½qýðÒÑá( ðÞhôûƒf«UTÕêÃO÷F£Þ ž‡?øÛïMÆcl«Õ8~ô¨ÒR”Å;wÖÖV;í6¥d<™(eâ¸.•)«Ü÷.#œµÖ¢(.Š¼È %Ì9瀫„PZGq<=5U¯×1‚ƘAh­ƒà`±!ò&Ò ”’kÍìÜ çÌÚü+_ù2€e–¥÷WÖ×7¤YŠL’¸Ón7 ­¥u¨´vÎQÂ1AEYRê­x ‚1B ¡¦UåIqc„1æŒrΪ¢Pª’RXk¼j!ˆ²b„y8Ú¨£Ç޵§:333„ÍÍ­?þ¤^«I¥0ÂZküÆë/ !¤[[[µ$ñ†ˆz½6™¤eQ¡f£Ñ$IjyVAçE’Dõz2L)‰ã(I½ý½ à ²¨Ò´˜¤“A¸¿ßÅ7›õÅÅ…ÎT›Rb­6ÆJ¥)a˜RÎÎz$ À7ëMÆø`0ÐJ_ºxñôéÓ›[›ïpYj³°xøü…§)Æ“ìso½Y«×þÎ/þã÷þc^éYHqYUÊÚé™Y¡LYÊ'ΧÙÛïübfnîÐáCÆZãÜ~·[«Õ‹²ŽÆKKKÎôÅ‹kqrõãOîܸùðÁƒO?¾2?7+¥(³I½—yF¡_õ[£'“±µnfv®JTJ*ñh91D£0ˆõÆd4œLÆ©·Ï)e„Z+Ji³ÙlÔ€"Ͻcì»<¿[Äy#Óc§ç©åSçÎ{òÉ'_~ùå²*Ã0¢ØÝß¼µuãÆ'ý~×YÓnµææf9J-Ê ! †ÆÚF½†" „&qÛY<Œ»Ý®ï9¢8pVeŽ J(%³ÀY CÂY猳ŒQÌÙÅ‹ =mîììÜ»wovff0„A`!Ä_úÂëJ)\·Ûm5š”Ò4M)e£ÁH*cê÷GJiÎCÿΦgfff§‚# X€ EÚéé©áp¨”Y˜_ŒÂ¨ßEÙl6p³³³ívKJ‘¦,!Ä—çãA­VçœADAÔj5YI)Õ`0¤„]ºxiféˆÕÖöÎÖöþx’3Qtâ䩤žÜ¸}óêõOÿÑÿáÂáù7¯ï÷ºWoÜ€„ÄIãöûW>þäÂ…‹Û{»?øÑü}âä²Vº,«Ã‡–®~rõ/¿õ(¦!Ï?y¦»×ûŸÿéÿôþ{ïìílû½'ΜAÐAàfg¦‡ÃþÌôôT§b¸°8O(Y]}¨´=¸Åíb@ã(Œ(eBÈ^¯?Œ„Æ8)¥g¨ÄqR¯7Fi–Ãñdâõ œ=€‚`Œ‰±Æ7ÚÂÑxÔív1ÆëëëI-9sæÌ›o¾ùê«/NM'½Þþýû[wnߺòу~Ï9P–ež—cŒ‰”RiÍ·hm Â3Œ)£aw¸·×ív÷ü%H RJ•UYKcµÕÂÆ„j¤AA oçl»ÝvÎ5ÍÙ™¹ZRO’¤Ñl„AXUe»ÝŠã€ƒUDPi%„â<â³ÖɪRJ\<¢Çž ÒÝÙY[[¿|ù#€‚Á(ë÷†< ž8w.Ͳ^ïøÉco¾õV·»¿³·—ÔëE!¦gæïÞyðÁW>ùäc¡d!*ÁÚúú7¿ý-JĘQ677ÿÎ;ïþÕ_ýÕ{ï½ÿÃïÿàø±åÞyÿÝŸýÔJ©•*²´Çùd\Yž§yšEI|èÐÂüü|Ð/‹Ê©„B>žáA ÂŒñ€Jê,+Æã´Ì+/¤v8`‚~Çj-ËRT•RŠ p«­ö„_k­eœy*l­VËò|oo¯ªªëׯJúý~Y–NçÔòò±cÇjµ`°¿·ãÆúÛo¿wõêGÃá˜sž$5Æ€8ËòÑhœç¥Jk;gÛ[{ë;ãñH)‘Î(-³„ Ή¥ÖBèÍÃÖZp‘åArÎ1!•q’,Ÿ9Ýét‡W¯^ÝÙÙIâÄ[š…Ðø­Ï¿âœC‡CQVEQÄqÌXP•Öv4SÊ£( †Jé­­Í¥¥¥( )£ €³Ni£´2aÖj ˜™™K’Z¿ß³Îà°AÀâ8Di­´6Qʬ3B«5@]†!Ç B8à˜ššS`H§5;èõkµÚÂü\rLÑù 窪x°²òpuuueõέûq˜š_ºpþ©ÝÝ«W¯…QtèðáýýÞ~ø#)ÅʽûÀ¹—_~ns}ûÊÇ'Ž IDATGW–O¹òá•[7oF “Eºúà>`fv&ŠgÝÎÎöòéÓ½nw}c½ÕjyÃLo0TÚ&q¢”BzI Ƙ`L)匕¥(ŠÒ9€ ‚QÊH# Ã< FÀ:àHV˜äg„DÖmµ2!8™Lü"aä¥/ι4ËVWWïÞ½ÛívçG}úé§_~饋O=5=Ådww4öBœJ)¥ÍÎöîp0L'é~w8gƒþèÁƒ‡e^çÎ9£c †€sbµ¢ôt VÚ뜣ˆÀñC-ÌÌÎÕ )å7VW×€„ B8Ë ü¹×^pÎAƒA:™!æææ¢(^˜[€­®®yVš¦SSSI/--!£ó€FQÅ<Xðz½‰Ã( "Œ gŒRj­ŒFƒáp!¤”h­p<jµºƒÞa¡£0L’„lŒiÖ›ív{aaÑ9NÒ²¬jµú½»8«ÍO/ô{½S§N¶ÛMJà~w'à, ùñãÇ’(ÙÛÝ¿üÞ‡×>¹ð¸»ß]Û\Ûëî¿øÒK‚{wïò0xý•WFßþæ7÷÷ûK‡GAøê+¯ÎNM—yqüÈ-#HK±°8gµÚÛÛ!…QÐï÷[í¶¿¦1Á„ñd¯%õ,ËÓ4{,¦õà(Œ‹¢ÐÚr„AèMéq²€ÆIèYÀ:çœVÊóª ¡œQ¯žx—r–åqyŸúÎîNQÈtà:täÈkíÍ[·nܸ1)¡SÎ3Ï<}éÒÓΩç@-©ööºÛÛÛB¨²”»{ûE.¬“qF Æ3F8§”„„Ö÷ƒZk¯6 |Q‹ n5š¼*Ã(Jõ“˧xAð“ŸüäòåËišÕëuQUB£uQ”øõWŸ‡J)‚ ˜›=~üx’$á²’ƒá¸,e%¤s€ 1œ_˜kw:I=£À8U‰ÒFA­^3ÊRÊ67·ZÍ6!Ô9PyUUY–ÆqÜl6Ã{Õ ¥HµÀù§- CB±‡¿Y: Ãè3ŸùìÜìÜþÞþÎή֠6»{½¢È¡3‹ó3ÍV}ÐÛÿàý÷dUÎÏνúâËÏ?û‚SîîÛ{[{J+!å(;ã>ùä“ñxxþÂyNéó/<—§“+W®Ü½s—3~é© »ÛÛ—ß»Üi5ö·ÖoݼöÌÓ—¤ƒ~¿Óé$µÄA«ŒеÚmƘRh†µÎ ~´6ä4B¨ßÆ@4™LšÍVUUFkÆØÉ“'­ÕB•œó0Œ¡EUL²ÔhÃy€0µZI!„¨¤Rr4B­u”²0Š¡„ÐÉ$­Õêá©Ît«ÕAEq–N6Ö×77·¬µ'Ož–ºðĹù™éO>ù¸»»…Ág?óìòò©W^~¹×í~ðÞûçΞí÷vÆŠíM,al0@gSÓSÖ¡clGëëëS­­w()*aŒ x`­!sÎ:í–_ò!“ZQèá}ZkÄbD!)•¶J eŒ²Ñp䉒ScŒ×k@Dò<·0Ƣ鲓ñ¸Ýn¶-瀔 a\Åp8°Ö&Ib‹£h8Z¥”\þ°(ò$0„Ë˧Œ‘e‘qF'é¨Ù¬CkR„Pk­³€QJ cŒy¯ufskóáÚãÌXóþå„ó ‡”²½þ€QfŒ†B(âÑEÖYJ)EØ‹!­µFcÚl6‹GÄç\DFƒRŒ0„ЊÂ0 C bž—Üï÷9 ý%m­õ–:¯Ê2ú@ÖÈB&pÈY«ŒQF)1¥Î{2 ¡ãQúÞ{ïínõq‹‹Kss yZMÏMÿÒ7~i°ÓŒжÚ4Ë·wv–O-ÿ×ÿÕïù+_ž™rÀý«ó}ôáGQìlotww¤(··6¬R×®^ê´æ)‚YžÝºucåÞýgŸ½8=Ûúè£Ë‹‡òªHêumuGiž5Ív§Ój¶!BEQÈJ”¥LÓT)ÃY€+ËÒ›op•(à  ‡a0==•$¡B%a–å”ùÒ³,ÊÂ:‡†в¬ÊÊ:Ç=€Ï*“Nò8N‚ ,ŠróÊ+/½÷λï_~»’y¡JÐ4ÏÖ7×,p‚ñdÔhµ…—~ÅE‘PÆ«õÖð±Û˜L4©ª¢V£8Hj¹ÿ•«ªÀ=¶ºû…©W_=fíùzÓﵪR „9U%Ó4"‡1uÎíï÷ü±W¯7;íi!„ÑXÄAYæþ¶a“RJUmïlv¦fŠ¢•ª*¹³³¥”™žšíw÷8%”âÊš¤@d°q•%÷pJk5ãØÄX ¥\]]í ö8“zMJÙ §xݸqƒ1æ#H’$)³Â+ÀJQ/Ó¦ cŒ¡uv„ÎZC‹â€q„쑤*¥¬z½rßÒÀãù¢(ÒZ2Fò»üO뤹uëV·7X>óDYéÕÕ‡iY½þúë KGêíÖîööOþîï¬1_|óóKG<\y°½¹2þõ_þ•åÓ'âýðG»Ýýßüµ_ÿðÃËŸ~úéÞÞν»ü©Ï~vùôÉýÝ÷&Y÷É çfçg pÝn—aŠ1®7›Íf!B(÷¶*¥L‘eÃ^𦩂ÿÒ_~ç/oß½7=?I­V;{ö웟%Ï-Æ( ëU%~êw¿ñ·Þz3IÂÿýÿøçZFɰ?ØÛÛ7ÖB·wö>øèCLÙáCG¢Z1ÒF3Bƒ€+!²,£˜†c%«™™Îh4ŒÂ Y†¯¿ö Á8àÜ›ç•* ¥¼,JŒ°5fºÓU…!–B2Â’( !¬uJi!¤µ®TUT‹kZE„eD¸Ùj=yá|gzÊhÙé´‹]Í÷”ï“ ‡”0 µZ]KÍ_}°¾ºº:77¿³»3 „•Œ±öTkvqvw÷ã>¼ðü 7oÝøÅÏÞl6_xîÅ••?ùÑÏþ·öÏÿîw󯵵U)‹/~áÍå‡ÿ‡ÿîf;û{;«+ÖW×"_:Þj´1Ä_ýÚWÏ=ùäÓŸyfnqîáÆ:‹Ù©å“û{{{{{õz«ÝéìuûRën·»·¿ìø _ý _9`ŒƵ›%„µ* ­E«Yo5ê­VÓgÆxÈ€ÖÆ/ÄœŒRaE~Üõ˜îä%ðUUeYÎyÐjµãÒ¨F³)•tÀÊ¢8ò\†,Ë¢(âŒ`•Q„Q8ó*׿à»îkëœÛÝÙ•Rjm­µÎ8à}&Ž¢Iš}øÑ‡ÍVëùgŸÏÆâßÿÉŸÞ¹sçþáüõú›ßùÍß¾qýÆ÷¿÷·vûâùó_ÿµ¯~éËŸ¯ÊÉ…§N=÷üÅ_¼óóRˆ¼*Y^6[Âèó/¾ðÚo¼ñå/ %>¾qõ_üÛÝ›ô·»ûO^8ÿ¥¯|¥'išFIm8onlŸ9{¦33ýØ>‰! 8(Gb„ƒ€K!Œ±0âõzÒlÖ)#Æ(ç¬Ïh F(¥Œç„Þ[ìÝþa=°aYëý#SSSιÎù3—.íw÷Ãç‹T•ðÙh9çF£QQdŒbÎ)çt}ýáxDîÐáÃiš6š­ñdüÍo}ûÞý{O]ºH¹uãA@ÃßúßøÇô‡„`ÌÉêÝ{·oÞxõ•W—Oï´ë/¿ücŠV3Üßßxïò;4Œ “wßssëöÝ{¯~î /<]¤ùÒÙcR›¿øËoJ\½umjvöø‰ã£ÁðÁÊÊë·nß¹c-xâÜ9Êx­V´á׌±Àã U¢"0Š1r­Vs✒R !p„`Æ(§ ¤mIà g”Â(ÑJ:k!pœ1Œ ’ÂYpF Ž£ð3Ï>ó«_ÿº±f4÷zÝÉ$5Ê$q !ØÛÛ ­ÊRV•³6NbBðÂâ\››[Á8Žã8"i­Ë²HÓôÆõë{{{EQ "B PkÍ8E*%FQb‚¥„’(Ž)£ÆZk€P[É*+& DH£Ñ€4›,/ÃñdœÇ“,ËE%qxykñ믽ðØæå{ï)%˜ø•”RˆJJé±`Ýn×o›Íf«Õ‚ÐW!âWfRJ%¤‡oû“Ï×(Œ1!„wœ÷Ý^¿§•ÞÛÛãŒu»Ý8L0Æв,+Ñlµ €Rª<˶·wË´zúÒ¥W^yéÈ‘…?¸L!¸òч\~¯*ò"Ÿ\¿þI™O†£ýv»¡š[œµPÔëuçÜñã'X,Ÿ:²`8Aˆnݹ}õæ[·oÿáýÁÖÆÖ_û/e%²²ˆ¢xáÐb³Ùއ”R`”ÒhEf„"¡s8"pJËf³î€ž†€§’‚18­% ª„ÈOs|<ŒïÇC=ç¢Ýn·ÛmˆÜû—/omoçy c”&qÍπʢÀVe¡J’héÈ¡£G—‚ûÝ~œÔ“¸† ÖRI%œ³ãF½^¯×“¤ÆuÖJ¡´6óðcŒ´QXŒ¡±Ês:ý]•²ª*)µRJ£µ›?d4ÂL&9¸Ûíãò¼¬*¡”ô“Î0 Â0ˆÃñ ¯£G‘$žðá½ýapph ¿p—ÒßF£¡µÂƒŽº,KïYå,¸ƒÎ„ËAP¯Õ<»œs^…¯¨´Ö{ÝÝý½]Q Q ä€Õ¦ž4 „kkëOž?¿²ò`wowzzfn~~åÁƒªœð§/=ÕhD£Ñþý{·v¶×ß}çç¸Ýõ×®®¯=´Nk-0§N–Æ*íÆ£QÇÍF3à¬Ì‹«×®>\_¿zõÓ8‰?ûÜg#ÇNÿì³Ïüü'?]½ÿØ‘£až&Í=æH)­v^wë_²Çe»ÝÒZ+-‚ ð¢¿Ë1BÏsrŒù¢s¾¹¹éœKÓ”Rº½µå›&)Åч­µe™y†'â­“$ÙÛÞyø`õÒ3OcJ!§O/Ÿ[> ±üôêå<‰*;rôp»EŒ|ã×óOþäOww†èÐü¡ë×>× ¡acjŽ@\äYÈ‚O?¾R¤EUTRêÅCKGŽybù¢dcmå/¾ý­_ýÖÿ·|òTHÙÚÚÃk×®;ylié(å¤ÙlæyúˆF ÂÞ¬³Ö*-•‘B-¥¸(Œ6;¨”äœBˆ•ÖbßsÎÂ0$˜zñ–¯¾Á#ÞŸ?´<#MSÏÓFÌÐRJ)'#‡/†ý­!Âí¢È ²AÀž|òÜîÞb ¡µhm•–cJ…;`WÛÇsoQ)­•VÎZë‰/X|ø/Nêu­­ÖZJm´(µ0pÈ„²k«ûι;wî!Œuµ$ c xÀjµÚL§Íš¦éhÔǤÓét»Ý²,kµš7"ûÈÂéÎŒoߢ(j6;UU¥©ï™?~„“É{–°>+c¹óÌÙ“çÏ-We6è•F+‰8¡Íäôµ«7ÓOœ==Œêµv­ÖÌDzyU2š(eÊÑè~ ÚXÛìîv›ÍvÌYHàÝW­ÖÒÜìóO=ÕßÞºññGV)M²…Å™ÓJUeYÎÍ·C¿†qF -¢ džúõFR•ÁÐY¬M¢˜`ð€<Mqm1J gÍd<¢Càδ’€V«•çyQY:qÎQ‚¥–I-I’d2I‹¢¨E±fÔ Ñn¶Ž9ª¤˜D(‹ÑxXoÄQX‡Ûí¶PÚ_,„L‚ÇÈdk­1>¶rNýRYß±BH%•"浩©V†i𠆣Ñp’4šÈ¡RتE^eFI‚aàœ (#Ö™jh­fçZ¢ÊÆãrcc#`$ -þ_ÿš?®üåêa#”R‚Éc}YÝnw8j­…¨cõFm8FQ¤µöcïîµÖQJ”f#,• ØKo1DÀŸF 1ÆB–BTZä€1‡jµ2ÚdEÆx4=}êøÎîÚæÆjÀQ£Y- ÆÍFs¯·¶º¡•5Ú@ˆëõ †ä“+;º„ øOßýî¨?8zxiùäñ…¹¹‡ÜûäÊ•_üìÇ·¯_+âZqš IDAT‹É¡ùù7^… ˜“tR6ñÒáÅF£®•GOˆGŒ Á” â$ŒãqægÌcc•sqXy2EYVbÆ„RÌy@BÈoiYæY–Cè×Ì:ŠbÆY%„uÎã3ŒÖÃá`|ôØJ Ój7¿øÅ·¢(¸{ïvQV „ Æg¼¼K)£ï@B0v…e%|Æ9OjI½^’˜ó0M³Ýý^¯¿ßXõ–¸¦»ŸNÆÅ$K¥ŒÒ™©ÖôL»Q£ˆI•(gfOž=yzù0„jíá˜<âp8ÏBñh+­µÕÎ߃ZkÚ™L&eYÆqäS=/Ä/•RŒ1B‘qy¬¾”2Ë&Ù$'Í/Ì)%Òq–¦c!”R¢¬rrz¸Žs~ ™d)cÎ xZëÿõŸý/o½ùÚÒ‘J`%²€q%«~··½Õ_]]QåEÙôŸ¼ðäTgŽó`må{ýµ¤Ñ˜n4Úí©'NŸÔRõûýž½XEšæ++÷î­Þ›äññ“ǾúË_[>u4Mó µªFÃÊ:‡€óô}æ·ÅÚ,!­59`•®¤¢4FA“Z!d˜ˆ\äÌhg­%aLýÿ:cœµ€RÖëŒÒITSÊÈJÆFšç@%t¶GŒrcLG‹‹‹[ëZ‰v»-•xâôr½ñ´Qåú‹Z[€)Å„`J©RB*iŒÃмÐÒÄA…Sæ…RSÄ9Ø1&´JÓ´¬d¯×òqšÇqR«‰²T£aª&ˆ6âzÈI«4!¦Ú¨" `½Ö>thæÕW_zúÒù©éöåË—ø½ŸŒñc¢?|>†1†ÎUU•e„0¸7áøz‹1VU•¯¢(RJÕëu¿œ&„`‘#e™—ei­–²b<Š£ÐF1!¤“¼…+gaŒ Â`€1F+­„Œãå\ë{%¥Ôßûû¿çœ¸¿zn¦37Õ2Æìîî÷º}c\œDB¸CK‡·ww?¸òA½Y[\˜ûâ›oÕâdog7äÁÜÌ4ZVY«K‘œLO-:4%¥LGÃÝÝý ŽVîÞ¢ðÌòq¡Õ½û÷+%çµÛ3½ácLC(èWVYë/ô 0†J[„c˜g¥&àÆëÐAè‚гŒµBýx^h­˜Sü(3B7IGe¥-8X‡ØÀ«Ó4]Y¹WK¢­}ù+_êõö?½úñììôìÜL½^ŽFÆÐ8½¶#а ‚€²ý¦3B¤ÔˆJ!¤,pÖZ­-:Íò4M¥Öi^ e”Y.ôªTž—‰¬V„BJ°³•¨T„q½¬­ÝY˜Ÿâx¶‘ùdÀ‰ )¾pþ ñFBÿýܾZBªBxër&ŽýÔç¡kµšÖ:Žã~¿ßn·•JÁ(BÎ-ô~wW)ÝhÖZͦRB%D©B0N âVE^/àå:BQ)eÅ9!Bƹ©„2!TÕ¡£;[k;ÛýÉptûZ…U&^Ÿ™™š¤Åko¼¢Œü—ÿæ_ïv7G“½ßûÆo=´ÔlÔÎ>q:Žc¥¤e f4Ž{˜À™™™Ú|Ç¡ŒôwÐ+Y@„œUõ$¤åÄ9‘ó%¶Îÿ¬”€Ê}í§C¥È=Ѝ@ˆ8kÜ>÷Ñ;ìÿù¿<¿®œsív{0QXÀ½FK…!²Úìïîí3öÏ,Ÿ8qâØOü·[ÛëFmaqnœnKeªÊ@è(FZ+eÄ7dÞ‹!Á‡QÀSÒI©”ß¶I­•‘Rií67v‹BFQ @&*#¥Áˆ7›œ@ «Šxªabµ*(fg;g–?§MI ØX{xõÊJÉl’r–àßúÍ_ɲÌóX=TΕƒþà1ÒZãKÂf³Y«%QM&ãF£áU ƒÁ€sê;B°sŽQ2 œ³µZQREQä¡Çƒ;!#Ô9g­C2BBÖkíÔÔ´R+ƒFÐSíUQVßùÎw“zó©óN8yãÆÍÉhX‹k ó ÃáhñÐâöÎNgº}üı;+7–Ž,FaðçÿþO£ š›ŸÝÛÛƒÔëIR´R Æp\ ;‚Åp~~¦Ñ¨èŠ"ÓFÕêI½Ù°ÎCJ Âbä´Î?5XG1è@¬À!„9g>À‘æœïµ½H$ðý Èà# 9sUUùqôùóç!B·nßöO_–eÃÁ ( ­¤åìì,ãdõÁÊæÖÚÇ«y>¹ÿîÝ{¦g¬ugÂ0´ÆQù§¸G&ë&ãüё鬳Æ©T¦ÛíëÍ&µ`î 85* »yžeŸ`53Ó|æ™ó¯½òâþ£ÿ¦‘DZIgôx4îï÷'ãTIKÒ4x¹ŸiúþÖó®Ö¡Î¾¿À{ˆtY–þýFÍf@g¬Îò´Ýh†aà`ZªápPUU£Ñ Œ(-'鸪ªF\÷F(´r’ÃùÂÜCäŒñ4äœ+D…0«ÐÚ(à D –ÔµQeYzÀßNw÷Î;ûýžÏDø,Ö,Ë677÷ö€ýî`¿7ä_X<ú`õ>aánwÄ(,Ki­æÈ?ÙÎY”$5)¹ŸŸŒc”¬²\ƒArF•“ñhÌhP楒]JyÆc"/Š|ø`,ϽúÙ—_~ù3Ï>Ûj5nݺõgþ§7¯ßØÚÚä„"„§Ú³JÂV«­”¿ùk_Îa„¢0"K!´R”P¥T’Ä€,KýÀžs†A†­VË(ÖÊ@€„á"ÏE% ÔJ­¥(Vý~¿×ë÷÷ö&ã”1^%cTZ1ŠÂ" ´VZò€c‚‹ªÒZ#Œ²tÇÑ‹/¾ðêk/6ñîöÆüÂÜÓO?]«×÷»Ýn·Ÿ¦ù~¯»xx¡Ù¨kv7·Š<+ÆYÀÎLp§ÓòN%t6I9áUUªªb˜pJ0:¥U½93œäÚ¡Vs@>åZƒ(¬i匲à˜‡Œr£ŒÕG‡ÐÁf8 TR+­•Ô¢ÿŸ©7ë±,;¯Äö¼÷™îsΙU™UÌš˜¬"Yœ%–Z¢¹nÁìGÃm¿ÛðïpK°ûÅ0ì¶a£CÝj¸›¤Ô¤DRlREVe9Ç<ǽ÷Ì{öÃÒ} yãžsö7¬o}kI©L„PD9ðóö¦×ºÓm@HHŽñÑEŒê¶š-æk«„RÆYŒ^(©’¤ëû³SXíGÚØ¢íî‘øH¸ÌµCÚëI×{„qD¸×ºë &DÈ„2A‰ L$IÎEâ\¬ë®ªÚ¶óå.r®¤Püøl¿iæ*¡»Û‹Láñ§òÚ+wAƹõô#¯ûé½óÅñ·¿ûöÕk+o½õúp4þÑ_þÕßüÍ/>ûìÙÞá W™JB´gÚ³Ó¹™-:F.,ÎÕ¸DØ Á s ¡õììŒRº¼¼|÷î]ŒñÖÖ(GÂð¿klSw£aá½===ÅEa´Øßß…}’²¬Œ1”°¶m1¦°t^ó2†P°ÎZgC½5Œ ç çRƇ‡û_~÷³"A8>}út1;;>>®ËZrñù/ØÝúä?þìGƒݹuõÍ·ï½óî+D„“£ê£þèG?ýõ{y‡––V^}õ¨è"D¬GÎED© ƒq @V  }Áÿï PJAr•޶màÌk麯$ Å=ŒZ›¦»sçŽs¡®[!„³¾ª*)“ ɸì>F l­b žÈÚn1"Œh¹¨?ùä³íÿiãêú`c»®ÛÝÝå”N¯Mwö÷öïܽ£²ti<úö·¿í½ë{1uÁ¶UãÍcL(K’4XPÄ”KB9ÃL`Î%©Gxïd1M¥ÌtowBHÆH×÷”R-¡s°³*¥ä‚aoœƒRá\»ªx`‹ÃÏÃ!7ÞJ)˜cÉUª< äƒÁcÜkM0ËÒB[£µîëŠ4 GÓIÄ´m»ªmöŽ>ûìñêêj×uHc¥TUUÆôι®ë‚GкB£BÀQJÏÎ΄çë¢Ôlaty9Qi6Ÿ¿8:<Ö‡èÚõÑÿø?ü÷_ÿÚׯƒl{sËùÓé¿óÎ;ßüú×VÖ—h?þôÓã£Åóg{ï½÷ñÎN7²·Þ*nÜ| ã³ËµGL „Κ¦É² ®><c&“ Üc€c•eùÙgŸÝ¿0@ýNY–qJúΊVVVBôื±±¦‡p «²>88Z]YORY–s€y„„0àl1*<ò„0JQ ØYĘ ÔÕu½·¿ý¹×^}ûÁ¶··Ÿ=yúðáÃñp8N?|ø1&hii¤oßz)D·wpôìés„ÙòÒÒp8"˜=yôi¯m>9k8e˜Æ@"” Î9‹˜åJ’ŒÖaë½GÑFļ÷*Íaœ×4w! ïGrÎr8wš€À¬Z¸ÁÐ Á Õƒ#” ÊØ«"‚û¦©ëÚ£˜æùp8µÆcçójÿà ëtžŠÁPK(Ã(PJ›²2¦÷ÁJ‘XkÁ ê’ ˜úC§•§ Ìë¸ +˹Jì  éròÍo}ýŸý7ÿ5¡š ³¨Ž=þåîÞû×®_ùÝïýÁbÞ:Ûžž6§¥yÿ×Oʺuóêk¯?¸zõúÏ~ö³§O?Kól2Á½ï}ðŒ[ΞIPNIHJ™$‰”r'²¡FÀWÞÝÝÅO&@öL߃3´m{ï-ç¡sP¾(ŠñxÚÔ­5¡m{ï"´ÓÎÙs—vÌ<:§œ Á#}ŒH)ê½_YYªëz{g³,Ë¢(~û·ûÆ“ÉÒ;_z÷p÷ÅóÍヮ©þóŸSŠ«ºí4úÎ÷þ—Ùÿú¿ýïÿþßÿðùÓÇo¾ùæþáqgˆQ0唡cÎyÝ6§ge×ô\ÈË…ì4Í< Z'„r.e„ŒƒRÛ*.þ0Ì…ê"QÊ£ÛÎ{Oø¹“#ç<ÏóˆP¡7~Ñ{_w-Š!6N”JŽŽNtgbŒÖ¸ÅühyyYpL’œo1yž×uûØšþkíüB“HvI³ÙÌ…ne-eŒ¤ M¤XÌÊ÷ßûõÍÛ«Îá“Ó§?ýù¿?=>ØÜ~vçö F³_ýíG>üt§®ÐƒÏ¿þ­o}û¥—î#„vwö뺄¿Ù˜Ø¶­ñAŠè=vÎÑßûÝt¸BB0¤jva©èÎýŒHê!ƒ ºuU¥I6Ó,ñ§@ °¶[.ªÍÍÍããïý|¶hê6ÉT€AØŽ`ÌP¤Æ€›0U­M]/Þ|ýs“ñ`4×e½½»‹ ~ôèÉøñóBÊÓÙéÒòò­[7££²ªŽËb0øì³Gÿó¿ø_ž>=hû€±ßÞÞÒ¦S „¢T*IsŒ‰6öt¶XÔµ³Ž0Ï–J¥©µV›Þ{'„H’„qؼÅÞZŒ¹°»²ÆJR|‘(/Ó}[Ö‹ù¢k;FeÌZbBr!Ú¾ž7Œ×ê²jª6úèïšîðø¸\TIšŽG•¥iž©$áŒomš*Îùx4*«Ü ñ"à*CÈÙé ¥Xæ”L˜/Ž¿úÕ7ï½òÒ֋ý£ùiurttëÖÕ;/]}øÁ϶¶?^Y”eÇ:>š;Moß~õɳm•&÷ïß__ÛèµY”s„üõëWöÎÙ¶m½a­m×ëâù !¡Š ÆdYB8<<ăã¾ÐÂçòW<}²,sÖuÆ8v}Ûu÷Öçœ;===::ê;½»»Ë˜X[ÝÈ2‚«ëÚ{G•1JPÄQ‚™q jåçÖB¶·Û›Ï¥@ãÁ°ë›>ø`cýJ§û²,‹áh4={¾Ùµõ•«k“aþàÁƒ{¯˜Þ’›Û{»ûßùöw¿ô¥/ýÅ_üÅG>ìûv{ïpƒJ9}þlóÞÝÏíïíqï¾|SÛriyôÚë÷¿ÿý?lÐ5d:¹‘¤ƒ[/ÝHr^Õ‹ÃÃýÝýíÝÝ­ºžû`}°”¥ŒI]›¶Õ(rÆ$ý½ßý<ÎöÂu$š…à€˜ÃµƒówÉàv ü¼b:™Xc¬±ÞF™œ1ð¬ ggg‹y‰yüøqž êfœ Ña‚ æ¿ö>‹’1.’WU¹··wëöÿê¿ü/^ºs½©“ñ¤©Û¶×˜rDXDx<§ãå••k×®\»~åÖÍW¯lPÆ»Ö?}öâý÷Ó4Í|6ÃÇüH_}õUÆŠýd’¿|ïeÜ:¯&” %9ã€t ùä¼X¡„p΄`Œ„#ÆØ[; `yî2÷Á±„v¹õ„ÂÕ‹æÍ\ˆ¦mOfguÛB¤’ÖÚ¶iƒóã`]W7¦í$%MUÖÕœ¢ˆj›¦i[ÎáÒ v±÷BÁc„»Në czJ çœ3N)ͳþ !FkàÏM'ÃõµÉw¾ýíédýäd¶XÔ]ו‹Ók7ÖWׯGI¢†e(ä8dûûÇŸ>ù`{÷Å|¾ˆ1ÒsÇ{Ä8¡Œ8o½óÞ!°w$x#ayžC0‹ðp:{{{ø¡„¨û<Ï­µMÓ@ËÓ÷=Á¸Õ1F!8!Ę~v6G#„‹Å–È á¾ÐOÁ›¢éÖ××A FHºXÌŒmWW§÷^yé½_ìß¹uãKï~ý'ý³?ÿ·ÿÎØ0^^™.¯ºgóòÅæ¦ÑmSž-MGïÏó±÷˜±“å!a`„`5</ Q2IB`œSŠ$¬øAKWÀ¿Ë3”­ãˆ1 ˆ3iœ=›—+«ëK!‚÷eYVUå/²\’0¯û }Êø8OŽ%ަ©†£©`´³!-гyMb„sŽ#°áà½F_’È/îét:›ÍÀ7žSšç9!DôÑGŸ쟾ñÆ[wïþÇí­ol¬=}þñ¿þ‹ÿï·¾ýεKkëw’¤XÌ\UÏëÙÉÁññþÉnÙÌu11ïÎí[ ι¾×ÁÓ9¥ Å`¬¡¿ó½oÁÈàc|¡L)ÝÙÙ‡pÉ”RMÓ!àòAx¯ëÌ^<.¹²¢sž`B(îû®,K 7gYÞ6}Œ¸ï{˜´×#„Á®EŒF‘B/6›iÓ Á¤b««Ó›7¯¦©0M%¹8:<þÕ{¿þôÑã¥Õµñd9IÓÇOžF„#kŪ*¥»[{‹EߌÆ7n^?8܇¯¿q0ÈçóÙ{ï½G-Šb2ž2Æaù sÎ(çSXŽ!:çú®Ç+)“D"„zÝyoci’@šƒ°ä½oÛJ/»ÅK  !T—u’¦”³²ª®Þ¼1 CŒGGG‹ÅB÷}ô‡ØVuy6'1“$—[MP<ØßÍ‹œPÚÝõÚYçCÄ("L@Ÿ`Œ1J2Î/nâ9_cÌ(9<<<::2Æ`f…L)^WóÉxüî»_K“äÃíö]9š ×ÖÖ&K+y:™Ïͳ§‡}øôѣ͓әv­µÎÙŸî!²5 ;ÛÛ”P8 ã1 4M3(eº7}¯ëºÎ² adŒŽE„#¢cL(& S¢ŠÇ!™LØÆ•µ|˜ìïm÷UcøÁˆ0[Û¸rãæKˆ2LÉòòj@a1Ÿ¯®,9£d}m-QÉó§[MÓµu¹·¿ûðƒ÷¯\YÿƒïÿÞ»ï~ùìôôà`‰JÖZÆxš%ÚhÊ9¥ŠaŒÞ: špÎÓ$#B­{‚LIµX, Ö„ }Û¶—h0Ôõ—¬,F)£ a´¨ª­íyU>~òäøø¸3GD !!zm¢õ™TÃ,Ï$[¨,! A{ãúuë\]·½±ŒqÌ(% |5Q&E(½HÄ6„€Â·M}΂§´kÛ¶m•RËKKÇG{OŸ=ùÜýW_½ïãOßÿÁ_ýò•W®¼óå/}óߪjóÙ'Ïý›GOžìmmlnîÍ cwX°"IBd”HŒi ˆsî]p.Ä€e„ð°Ž~ãk_å˜ÊÜM€ïÖZ˜j­Çãñl6ƒõ7ÆX×u°eoᔃk·w1‚óvztxÒusÞ9—çEUW„"„ Æ–ø f„PHÝÅ MÉ8Z[_¾wïö`˜Íg'mYŽGã³³ù»_ùê­ÛwOgó²šNÓO”„ IDAT—·v¶‹ySWãÑ@%ª­KÎÙd<á,‰!¬®®0н3R •Ȫª~úÓŸnnn2Æ¥Œ‰¶mÂ]ßQÆ)£”²c („àwÎ%J%I’& !8D£œ !¤³Ù VÜ b]Î-è¹aî9V‰„(•ìîí3)%Gg§Úšñx,…!ômg;]¤éòxª¸p]us}2HBás÷?wÿµ×«¶C„,¯®iççLpJ(! öÎ gJILH<×ßòcÎ8ç\IñöÌ)#¹íŒÓ·¯¾úÚËï¾{ÿŸýwÿí½»wC¤Ÿ|üì³Ï6·¶ggµÑ¹ ¤âTb$‚Îbg Š”1Îíµ6ÆcŒÑÖï£5ÖZË €è _¡¯)Ëò|ëÈÚK7h‚#P !£ÑÈiG ‰3ÆŒqÆ„!,MsJééé)”qpõuo²Æ[Œ(Æ"°{Q×5m7'/¯ ——§kë+Œá„caI[wËËË‹Å"ÉYUU5­õŒ )’ÓÓS]Ûv§§§×¯\?8üðôhvíê•EÕO&“ãƒÃÿëÿø—1úÓÓÓ’I’$E–;c³$mû†P1† ꄸ¢bŒyoA4@rX<\1(Õ1ÆišB±Å |(kãºlú¾¿zõêý·ÞÐÆlîlïîîj­mD]Ý4‹û 1‘c»ù©¿6\]ìMY CaPd"Ÿ†sUàs¹6J8„Â0 !8çBp—‰8MÓ¶m!åy3Íããc­kÃÿû¯ÿ¬lÿûßûòW`ä=yôáÃ'>ÝBQÃʪIÓ4Y’R,tïÚ¦ïûa¬‘¦RHT7-¶µ5 ïHž †ˆPie*t†U”çpŒÎ¹DJB,ÉRŒBÞZHyÐ(ÅLp1Å"àr‡€¬µÖ: †äœÄ=:Œcô‘bœ§ªïCDŽÒ”Õ£>’‹ÁñѼmÍ[w?ߌ'ÕñññtiõäøÐ›!Ô·õ±m†™ ÁüéG]×-/¯zï'“ÑóÍgÃa1‚u£¦3 ¥æ<î´©Ûn4™FL8cQX‰ÂB(#(RLÇuo¼·À³…v”Ó`1.MSƘµ^©„IE8>hç«öÜ…|ëÞ­7oM–&|ø1|yuÅjSÎæJ)1Œ$"…‰7ö.KY‘%·nÝxüüYßv‡‡‡ºë¶ïû¾G˜EL\@1FAff½õ1Äècô!¸F!Dw:€;cÚ^C‚>fùpeeikûÉÇ=.«&D÷øÑ³õµºGÛ›GKËWuoçóùêOSÕi¬ókã|@„Dë\Ûú¦w„bF…Øh¢‹ÈSJ°¤ô/¼c¤”H)ò÷Þ)¥‚s«µs–R¹`ìøø0KÆh€DîœÖ]µX´]‹HOF]ß5mÕ´5å$ϳ®ïNNÏ0ÁËË+U]ë^K‘”e] ²H‚õF›ÞGÏ“B­6ºï®_½ú¿ÿ{ßþÆ·Þï½ÝÛ¦ÓÕ¬ýÕ{·÷ŒM«¯_¿c Îo=:ÈRÛ7‚#ÁñúÚJš©õõJål<NF“ÉtiU©Á¨ ´­ަm׆#çÂÊòò Ëç¦ëQˆy–Ycú®Á˜sQØÛÛÉóüÉ“'+k+”ÝëÜ+¥ Ç”2ŠPÆ…ÔÚ…€Êª=9S&(gˆyõ¢)w÷ö³¯½ñæÞ~ûìt¾ùüY*x¦ÔÆòäù“ Åšòtmeô…/¼6åG§g'óÅgÏ_¨| ã¦Ó>LpšH) .FCid‚"§I"9g#©ä`0ÌóÜX«µë拲i»I* ïÈ XF(=:¨öj‚rgxp‚ó´Z4Þ…Ñp\èZƵ}ÕéÚGˆ·ÁXÛõ¶ŸL—¬ mkœà Ž0òÎÓ¯}åmŒ1 ½a:ÿ¤(‚nxS×]×9kBœqÛJ)©cÁç\Dèúõ«"‘Úh&¸’œR*•$”m(¥1„Ðd´´´´ä}1š¨]ta¿Å€p@„`k̾ðàÍû¯yª›6K3§MS·²ñd)/†ƒbØ÷Úãœ)ò,×uõ È××—×ÖVò««+wîÜÙÙÞqÎ4]|JÅ€š¦7Ú#"\È4Íd’¦YžÙ Ïu§u`$ ¼B0!9cTJé½…Ý8kíh4DGçaMbó<ˆÔuÍ¥BÏåÙÙlgÿàäôŒ Á%eQŽ­õ>BX^ ’$këæ`ï |i<¼vem”¦YÊëjVä*IÄÞÁþÏù«ÞE• ²Á¨sq{wÏäCÀ˜dY–g©”LpÂ8‰iÝCÝ’¦ iÆ0A}§›¦1Öa‚1a˜P.dš¤‰J¥E>žL–ÆÃ•4Í VaÝ;„"!T%"M3„ƒîóÖ9C8’äµé3˜bÎ9(Å‘:EBɹ÷%ç¨î„HˆWj瀞‘ç9Hz@)ëJu]/ üòòçgå>Kh—µoÛÖhË9/†CJé|^ê²!Æ€æœ%8"ë HÊd<½þúëãñøÓO?|ñâ…÷Î:(d)“âìäxmmíøè$M3gõp0˜NFEžM&£$å‚sF‹Û·n­¯¯?|ÿCÃR^]×MÝÇ­Gã$IŒ1ÅpÈ9ϲäüzÄ ™s1ÕL]².7Š¢€¤ß.j¥Ôd2‹£µÆ˜Â<'„ztºm‚]'¹ºT`âg³Eßvµï~ù‹_|¨>¬Ê2ÆØô:bQÖ£¥¥ã½L(r÷ððÎ;×o¿|²¨MˆX§cT½Ö*‘ÎJ±Ö>”(ÈAé¾(Šª. !ÆZ8iÎ{d‰8@M ó“$I¦Ó©Rª(2NqSµIÊq$£bÀDrt|Úu:ÏÞxN"Wòl^6V¡2°$›,¯ŽW®lô¡}±µhÍ‹í‡y@dº¼$ÊÚ9§)s>x'0ÆÉpè¼æ ìOƒÐp]µ0M^„s®ç åE¼EÄ:ß#ì"²Bá I­u–)x$±˜ø4çIšÇˆ ãÐ$I¼„ªª€þzIJ»@¬Â9V+o YƒÒ„3À”â#­5ÐGøÖ4 TýJ©ƒƒ# Ü0|­5ì"'b~6G‘4M7 ‘§}pÖZ‹“ˆRŽ# íïïÿð‡?¼¶±¡­ õÖÄO¹šOýÒÆÚ‚ü HŽœíª…YYZ¦ˆ%R-'y–§Of‹y1B‹ÄÙ¹Ÿ è$ËáT!„çZD1RJ=v瘋W¼PÐD‹L£Ñ¨ë[!Ä(ö}_Õ­R*I’ÞÝÛ#¦$‡bPR°é8ËS!„îÚÙÙ¹ÂY¯Fj8÷½ ---íïîNƒ$IgõqklÀ Õ»è¨øwù“Ïž>-­,¯_}òlËtýöË£ñÚu-@Л %ë¦k: ’RDãÁy)¥³ÔYì½óÑSJ&açû,ò´íÜ9uŒ†¼iÆÇã1c ˜T˜¸I–«rÑLj1¦Œ&'Ià(U‘sý_Ú9ÇÀ<® <Ôp@ÇEgv,/Šº) ¦Zk êJ)µ¶‚)!hŒ# ¸JÖjŒ± …hŒ/Lc¥Â{ä=Š!¢÷ÖØy]2Ž^{õsW®®;£÷v‡ÃáhœÛ`ëºÜÜê7·ž®­^M‘^Y­ªªª}ßÇàÖÖÖ®_¿öÉ'Ÿlnn;çƒ9G)%\©è2ÆÌÌ…úo>­µ5ú)98î%<£ÜÏ… ¸òÞ[ës­îû¾'˜åyN½œŒ%òÜ­#8›ðQª”5USµF‡ãƒãà£n{cLÝv³9Ý;:B(0Óéh4lL˜7ºÖ>”ÍÒ§2‘„N——–W×g§§'Öi¬sGD©Fu{0ŸÏ$SÀ á¶B˜à‚ A벤, !0Œ>ÁGŽRJi’H!¥ã¨u׶󱮬L" /pë•R«««‹Å¼ËßóÒ.,tZ 92&€ì. Zvhoï`ii©( !Tž#@z0%œ™Þjä$JïΧ¦×€Js΋l`Œ5ú°ïŒÑN²L(BÀˆ2*²ç›û3ƃÁKw_Ö¶M'×olŒéþþÞþþþññ1#ay:ɲ¢ªšrQw]‡1A>d*e˜2LW6V)åç4\Œ¸!„•ucìû¨„¶m%g1K(Â|½iš‚æ }ßÃzjÕ6LH®Hß÷]Ýc”ƒ6ÉùxŒ)ãœ;©¼i)"”`]g[‚0HLÆÓ®mæem¬?<Š")j8Ž1¾ùÎWÖoÝ{øáG³ª ˆÆë¶»3ÌË$N‰…ˆ)Ž1‚}Ú%OîæþþPvÕ“¦ižçJÉj0‰ ÄŽ/¬\8çmÛö½q.cbÄ‘®Ó½n8Ë“»,³.Y×’ 6A±tŽã]¶.x·(ÆØu”ê ¥¤Œ,Ë`Ó­m[ÈM×¾rïÕò¸Ž‚ó9jù¾ïËjŽ"™Œ¦RúrÐÔµ÷TÄtÀ‚ÿŸs^×ó>øàöí[×®_íû>I)’ñxtõêzÓ4=ÚÞÞ=>9lÛ–sÉ8ÊYº»³ÿüùó¦ivvvÚ¶O—QÄ®¼‹î\[\ÄðˆP(ŠÂ#ÏmÛ†ÌC”Â…K’Ä{oµfŒ¥iBȲ\tÐ#@»úƒ,ˆÃaß÷GGGm;o@²ေÀ$Vóʼ3ÓèA`¡¦ª…墒#Âæ‹ª¬ªƒã£ýã“D¨ápØ×Ù0¦R(—fù•+WÚ¾«ëªi+Œã ¤*ÁňœÇÓéôRÆî””r2™Sþ‚Vu]Ç)‰s¶³ÚhwP Ó½m}ï½B0*fÎšÑ ŸWu×u0ÄC‚ÙþB1«‹¥Hèïÿ£ïÀ>êåC¤­<ÉçóÅÎÎîÙÙ #,¸ˆ!ê^÷½ †RȦnʲ"„ÃÑhì\ÀsÎò"Ó}1jšÚƒ–R®®®eYzvrªµÇŒñÙ¬™Œ'=œ'J‚£Þ»•å¥+kuÓ¬¬®¬­®‚·¶w–—'Y*Ú®²ÖXãÚ¶aŒy:Ï ÆxÛt`V µÍ³A–g*QÚšÓÓ³<+¤R]×¥Iæ½o»v0(€ü“Yßwiš‚®]¢TQäc Š›¦ˆ\n qF5MÓõ:Ͳ4Ë`ï>"½ æ÷ÎcœÕ1Æ"Mº¦I”bœK¥º^‡„m×6uÃ9‚ É)çED¨ ñät~6_hí³ÁÀ‡(”/M“$Y_[“B.-M¯\ÙȳÔ:Ç8OÆE1’BrÆ0B„l à`”¥©’2xï¬!82ÊÁ’+!JE×êrQ÷½¥„ ®„HŒvJeóyUU-Ælv¶°.*™ ™p&œõÞÆ8B¸©Ûáp”¥y¢RBh½hú¾§_|û `ŠÂŠÄx<Ž1&IÒ·Ä|X aŽ÷þððöO”R R–åÉéI’¤Æ:cŒ÷Å@&˜Æ0BJ©¢ „º¶wÎfY¾ºº±¼¼áœO’d2ïíí~üéÇ£áàݯ|é·¾õ ­û‡?8::ªÊEUÕ§§g>8Lž''Çg?îûc"„¸výê|>¿víZ’&MÓÎfe]×Þ…EYÆ#ml×ê$IÎzÎ…÷>ÄXç|4¤Yê¼!Çtoeç]ÆBM[Ïf³•••,Ë„àê½÷>xï‚T ªˆËNÛãœ[]]Íó”s0QóBƨ·Î[Ë8ŒÌùÀ(-CFiÛ·RI¡¤ó¾*uÝ L¤JŒñ( ¬ gy>È‹$M¼÷˜Ä$‘œSk È•E1Ÿ•}¯! Þ…£Ñ(MS!BÁûs¶!„†1 Yk „Á•BŠ$„<:99)uŒÑ»˜$)!Ôy˜…ËzµKÀ¢’s…À`à%*XXw]Ç9oæÕe y Jû›7oÖu½»» ìduËËË]×Ùà3£DžËu}öë!JùÊÊJ×u‘AQ]ñíwþøÿ3©øŸþé?ÿÑ~0 ”à ­”:::zúôÙÒÒtyyEüèÑ“®¯Ÿ>}¾X,¾úÕ¯ŽF£½Ýý¶ï] Ù  LÌÕlQÃá·ƒÁlq‰ì\„Òû¶mí…uÔ§ðÑœs—:á—Ŭ¸@Ï{1YwPLH&¥PãéR×›^køÅ‚P|5[:¥´iëè‘`”`Ô™þb·ÂYçá¦GŒË²TJ D`°1!ŒÆ1¦£ÑȹóºG%R*p4}«MWçY1 Dw1Ì¥1®³Ê×Ð)™‚B8Ô‚oŒ#˜ .£"1zÆ%Lkë½·1mûÞ0ÆY–·mßö=” 0t‡&Fvp¡ÏÃSŒé׿úÌòàvB‹E×u8 h A¨Ä]¼€Ÿç9s!zQÆq ѽçŒK) ÁÞ»édÂÓZ‚‹ÜzQ–ó¥åñýÑJÅ ÁÅpptt`um=ÆX×õîÎöOþæž>äi6(þîï~=¯æáÉò’âJ&YßöE«{¢³èdvæ¢#„dYq›s‚åœvŽ„4PÓ»†æ…` ¥”1 “ï½Éc1žoêÅe㺮mð©JƒQ®iÛ¾oÛ¶%u]¬cŒ`Î`ý ÞÑ8qìuÏŸ\Œ£äLKæ§„ • „ŒsÁ¹º®R©DšJN Á[ ‘QÌ)•R"ñ…«rUÕÃ4öœDN0ªËJÇ€"¢˜´¦oêcœe™RÐF£ Áž)„Ä8Z«· ! $B yžÒcìåœ_8{©‚µ:)h 1¦1â±sGOç{ßZ,! à½xñH Ñ!èÆ!¢ AåÁ`B¨ªª,KÖ³,£ŒZë(c”„bpÞy#¢”ܸ~ (!‚çðZkÎÕG~ø—ù£÷?øÍ‹Oß|ëõ¥¥éç?ÿfDqeeùå—ïæyþðá‡mÛ¯¯o¼ôòKßýîoSJªº=:<úàáãÍÍù¢šomíõºMÓŒ2^–ÕéÙ¼(Šk×oJ)«ª$„ ‡#Œ1ܦicŒBŠ$IŠ"·ÎVM¹X,æó%„QÊçœAÒ4Æ0F¡Âƒ³<9·,L„”BÅÄZÛ45Щ9çÎÚº®½5BJˆÖÚËMÒÔxO†aW]WK+K#ïg,IS©DŒÑ90N”Â. Šl0(¤à#ŒAç¾Ý“Éx:H¥¥„3&xª’a> .À,¤mA ]N&Ê0FB°4Mˆ¢”¹s™*™f)çÌyç¼ 1(%gÖš$MÒ,¥”0δÑ1bΉ:— 1œXñúûò E±áRr>Ÿ”M„6\¼à9«ëš¦¢(`|Öu]§{B¨s‡ñÐXí½WJœœœìíí- ¥” ÔûÇG³T&Œà¾­tÕõÍŸüÉ??==ž.ï¾rïþç^ÿêW¿Ž1þôÓOßÿ!¥<ÏÓ—^¾1çÿôÿób=zôé'Ÿ|ôôéÓÇŸììž,(MÐ;7oܺyçöK›››{{;ÐP&¤T@\ÓmC)…í’¶©1Æ>­5£˜2Œ G·ºïM—%©Låd:‰$nl¬c=z”A-,”gR‰yš(qÎÝ;?ßÁ:Óu]Ó4˜QP A&^<~a:Ã9‡y‘qÎ뺴Ö&©,ŠBJÿÁ…|2¥ Ç  –#3†‚””Rk5¤Æôã®o¥È¥”P§C¥uÙ¸\¢ ðŒ±ˆ#;;;˲ =€a%z:š DL¯³VÊ™ä‚ N®ÛGächÛ¶7…(1¶ÆDä)ÅÈ”â6ú$Q£Ñ#4ŸÏÛ®rÚŸ7s7]Y]_YÞÜÙ¼sûeç͵k׊"kºößü›ûþËÿ;„ððá'KKK/¿toeuÉôú`¯ÚÞzιzmã›ßøÚ·¾ùõƒ£ÃGŸ=9::9Ø?iÛnkkëÙ³+Ë+mÛ.-­.Zë|ˆ„0!R"MpŽÈ‹Œ2b.¸xy>P2ØhmÛö|)cL)β´n¯˜ F9ÌÈjÌÅêêúp8DµaŒÕeY©ƒ~H %šucD0£L„Ø÷½988B- J ]F•dyžË\bÊÂåÉIÇH!bÌ)fR0Æ|ôѳ٬7Z$*ISÆXÝuåln­îuk adcŒ2èT¥”¡íê¦ëB‚qsÇ(É(&ÎlD“h!&Q›.\×õøê’ô±#È{‹p<§Ã $8sÎxo½Ém1‹~ñí7•J¬5Bˆ¶m§Ó)Ôì2I|ô(©”‚IÎ9#œjÝ£%Ø£`to¼ÍÒ¤·¶×ã4ÏóÃÃkôµkW9eûº*ÇãaßÕ’Ñ•åiו‡{÷^¹zí¥O?{Š1q!b®]¿ñöÛï\»vó­·¾põêõ$ÉúÓŸß»û9Œéƒogi:ç'‡»RQ¥h‘«í?þ¥µY]]{åîçÞ|ëÁx‘<ňJ¡”L&1 Š)g,ÆÐ÷¼¼¼j½MÒSš¥Y¯õáÁaUUã¶kçgg¦í³Ó$Á™€ÜîîŠÁGWƒùb¡”„Íʲ,;ëbÓ胃C£’b˜çÆš³ãSë`]Y6 „^»v½,«áh<›/¦ggg+Ó%%Eß7]W3í›¶ oÛºíš,Ë’4©«Ö»˜É<O¼u_) @áÏs™±ÖZ[ð”B.¿*¥0!Y–¥yÆ9§œiÝ3F)%I¢b ƒ¢˜N'J %¤,]]—Õ••åÝñq0¦ï½_ýò—?ŸL&óyùÆoŒF“ýƒÝÇžþùŸÿ¹5vTdE>yòøù[7E1E¥‹LÄí[/¯¯ÝØÚÚ><8­›²ë4ˆ.Yk#òKK“œyÓ°Kª Э(å]ìêºìš¬SU"(U”#JqŒÁ³µµÓ4RªëtÕÌœ iš3Æöu]¿~ÿµétúèÑ#8`››Ûƒ¼h»ºÈJ‰ˆBð8dËóܺཇÒ&ôaÀ9`"I’,Ëò<׺’K) ÅÖZç­ÑÞÇ…€¡“÷SÄ“ÑhÔÖ¢Ó=ŠqןÛRJ1Î…Ô†@¡œ§E‘SäË» ì•W_}õÁçßFmíìBý-„ûˆ®í½q„"ï£6!”¥I¢2@V{Ó"0ÆŒx< Ÿ€Tyï³,‡á¹š€Ì@ „@5“D †½·³Ù)B(†€PTÖu-¸´Öníì&©ZZš!¾žfG‡§g³Î[—îœ3Ãa1]aŒ×××oݦÿø?ý'! ?û³? Ñ}ùÝ/NÇKœÐï|ç·þ·?9>:3&È4=;<Ý|±³µu0(–îÝë(áóÿŸ©7{²#»ïüÎ~rϻ׆*€nìl°W²’&ÙâPÊ)ì°8Rhb¶çaüjG8Æ/žÿÂ?9Âã±Ã‰¤8”¸7»›½a¯BíË­»åÍ=Ïê‡ZƒGn¨›y–ïïóý~)q€%Œ9Z‰ñù!dÐëŸ0ß G+h%¥5#D0lSµ5jeÈu™ç3ˆQ;ž/˲¨Êºnʲ |u{AheÓ4@×eEQQ”E^u:½›7oΧ³ü O³B(Ydy«S‚ÐGR,‹Éd"ÑívÃ0$„ŒÏÎ¥”7¨ªªRZP†÷0AœS„!!¨i$!Hh€aœcÚ Æ9Bãö"H»ÏiAVU-Ò¬ÀH£´V–`´À ­!Y`,0˜ Û4uY7‡‡‡RèÃÃCe´ç9yžŸŸŸËJ4M£A—e…4ÖÚVÝ:™Rh£”Æ2lñ[oÜû[h§Ñ­Bøej xa$jßõv%ké‘çB"cÖš[7_fœdY ð\·ýø|>´évŒ°ºŒ9â“Óó¢È‹y‡„`î0ßwÃ0øáÿéo¼ʲìüül}}ý‡?ü“FÔû‡A<~ôÀ"ØíwÆ“—_ºyóÖ]­ÁÅxf­…õz½áp°º²:¹Çgat:Ñ"™sNG+ƒV«´/~)¥•’AÇáZ7”aÏç”’¶s]‘$K©FT e-Œã%<ËŠºnÎÏÇ—/oWU)„¸yóf¯×Gv:q™W?ÎóB+;_,‹¢0 @„ÚÓj»D¹ŽÛívcUU‰FBè?n ¢Mì&µus”R¥¤ã8BˆTªUŒ8çq§ãû>çœsÇh,PÚVuU—MQ”Ï=´|>‰âÜåŽë8žëº®k´ÔZµ—_F™ïûã²,×Ö7Š¢Ÿ_0ÆâN§Õ« DUY+e(§œsÓ&2,r¸+¥ÎÒhq[}ø.~÷í×ÛÝ­m\jqÇq^èúÏ…Ÿ/¹ÊöŸÒ2$­ŒÑ:W×ÖŒ¦®Û#¾Öš œgyž—BÈn·§•ÝÛ?xº³»³û,Món¯:>>.Ëâäô8M!DÝ”½^÷æ[yžíìî. çìå—_žNg_|ñà·¿ûÍG¶¹½rëö¼(„”++kßüæ·ßxã­+W® úÓÓìt69Ÿb¥lúý¡!DŽ;Q» ~©æµdB0çLë†1Ä"¨µF*¥ó>‹ã.Ƭ©eVT?9>:íuûô½÷ÿôOÿ4M³GWUm-ˆ‚¨ªªd™=~òØ‚+W®rÇQZ7µh¤hšº%è)¥œ1@»'†¡o­¶%0I[Q¡e SŠ…hÁB4žçJ-!Jkô¢+$Œ"Œqþ 1ÌçËd™\LfÚZ%•1Ö‹1vw'ôÝ0ð}ÏåŒ`Û«½„a`,X.—ŒS­Õ|>ïtccìéé)@‰!n£ÈãÚZJ¥\JíºžµV+ã0’1ºµ¹Ž¿ñî›­HEQUU-UÓ&ªµ›îsŠ÷ŃÕÚí[Ϋ½N"„Šl9›^ lÛy\0ø!Ä÷ƒÙlæ{á|>ŸLfZ›Éd꺞µf}}Íqøheè8l8êSJ&“ ¥t´2D?zô2æy¾RËþäÉ£e–¾öúo~ëÝþ '¥:??ÿü³/Þ~ç{÷¾ŠúÍo~„c”P¬v=§×ëZ«{½.€1 ^DÁè‰ökµšQÈm…Dkc B$„ÚØØlùäñSká;¯x^8›Í±·oߦ”<}úôüüü‹/¾ØÝÝ ƒàää´×ëM§³Û·ï|ó›ßZYYB$Ët™$œóº®ž¯ôhïFQ¾_×µ’1Â9@îJiÿX‹kVM­”ò|¿­ AY²¬˜Ïçi^HiŒAY–ke³4w=§*˦i<×ãœsÆ—y®û%éÀÖjí¨Í÷ýFÈù|.• ‚ Ëòápèz¾µv0dYj”­ªÚ!l¤€¶®$ÆÅìy1 É|ƽyã~õÞ­Œy±èÁ<ú l‡¯­.ܾ+-LbŒé÷û{{{®ëö{ŒÀ[7çó™1ÚqÜ,Mã(æÜ•B?yòt±LÃÑt:—JaL0!Ëåòõ×_w]÷Oþä‡ï¿ÿÝešç¤í5%sƪ²²ÆkžG‘@¬ÕZZ â82F ,°UÕ¡óå"YžŸËR<|ð$Œã(г,?;;‡VÿÃÏþÓÿäõ×^㮳\.?üø£ª®7·¶Ëª~º³«ýå¯~]ÖD GRZJ1ö\R*U“çyAà¾×þðÃ(è÷{Aà Q;.»¸¯¬ŒNOÏ´Ö „p§ÓãÜq·*ë,/NOÏŽŽŽ(s¤“IšfÖÚ(Œ”ÒJ*)UøEQpN»ÝnàûÖ¶eªa$eS–…µ†s§(ЬÈüÀG· ¼¾ïkëºÀöã8òƒ ªª¦QˆÆØwƒ4M=וB(%­1_¹sweµïÞ~¹ÅiÚ÷ø?ú@ü" §å@Z µ5?Ú«l ¢~€1Bˆ¸ÿèðððââ·M£××6ʺzðï_¾²¹µ¹öÆ×^u\R¿ ±.Î.~÷ÁoŸílllÆaT–©ç»Qq†D@+k-F„ l´B´÷j€ÑFÉÆ…¢ç“|!4”e™¥U’$B)5¥t0Ì!›››7nÜxxÿL¯× z½Y‡sJ)Íf¿üõ/6777/oUU¥Œ6œÏ/¦ãNR aŒ9XJ)€R껎ã8œku+=(¥”ÖÚº®ã+i|?B@ˆ•j..&YV[&“N'ÃÐ]Víñ´Y¯ZJJ±ëñ6 @ë:AQŒ9išŠFEÕÙÔr6_yÉ7Ô „aL(bFYÔ¶jC„˜´–BŠ( ”Ra'|üä €`2½€h©À—À'DRJm c¬Ûíµö*)eÝ4J©Ö“w"B0&"¨¤B`L‚ ¨ò"].òårÐï¾òÊ“ã#+åpeDZ½E][¨ÈZ»X,¬í °•²Ú ,!Dk‡j£ëÚß)Ër9O´>LB(I‡ë–—ߨ¸$„ ð¨Ë$I&“‰ã„P^¤Ÿþ)æüüTkùúo•e)¥ž.æ}ô{D0cÎã'»½"x6sB{ý®”Ýþgµ–Q؆‚>7¯ªª-"ØQÊTe]•uU5Rʲ v®âû!„Xk‹Q–¡µ"k´„ÒÖ´2„°lêÅb1 ÐÆ(Ïó(¥m7„D)n”üG¼ë¶Ëj+{¸®‹ô„~ðgÿìO‹2ït»ÆcÍÛwÞzókRÈÅ,¡ÖEA0"3Š !cŒR2]¦eY`0¡!¥6@¤ œÎ©ôrY$Ë\*³˜gTQØÕÚú^d-hÑ®pRˆN'd` ÖœÇã„@€ï»¡ÙlįŒÖ×P ´„Sæ0iTÝÔÆêª®Êªð<×<ç AU•œsŒ˜4FJmŒ¡”¹œk¥–I‚*òÔuØw¾ó­ó³S­õ[7ó¢Äßzç-‚±Vºw\ÇMgeV¸®1/k™,3m ëÆÂF(Bù"I¡˜Ã¯\½vyûJ–“©¸¯ßûj8˜´•8 ƒ§»O•–³Å¬×íϦ³ºË$åÌ ƒÎl6ÛÙ}\6Õþùuãg»Ï¶¯l7¢)«æwüarýåëüñùùÉK×®8.2™^"¨f“IäGÃþê£OŠ´v¸›§KÏå½~ÆÔõaÜsÝN,„¨ªFk l[]$µÖY–1Æ=×m£%êZh $–E–ADŽŽOD#ŽOò,[]]žžžD\/<=¿Ð7ÊŒVÖ/vûUš'ÓùÕ­Èóöv‡Ýîp4d+©´ÒqP@L¥n_{ùîí®ÃNŽ=‡]ݾœåy‘žëç-´HÜé2×ó‚È¢“ÓóÅ,›Í’ª’²BXÇ„´Œ¹AsÇÕFk­8ç~àB¨üXI[+ 5ÄE̥ܥR A]7÷ï?ˆ½p{s»ãÇX'b®¶êY2Oó  ¬š\Œ·._šÏæ®ëŒES—Eî9>sB!Áb¾Ü¼´iµ¢=üÂʺ(–ß{ÿ»ŽÃ§óÙÆæ&¦tžø¯½Önc`lSׯˆ°0 /ª¢(•6Z-ãœq^ÕµT²" Z¦Ëºi|ד¢ìÆ‘1*Ž#­Õt:9Ÿ-—IYU˜<¯ÀÜqs¤ÐãñYZ$?ü“?^ÛXÿÉO~|xt,¤<Ü? Ãp6[ÑŒ†Ã—_¾fŒÎ‹Ìs]µ6UY¦ÖX£-´8[–‹YG¥$Œ\?`ÜA~À<Ÿ!lë²Ê²¢µÌsîêº)˲ÓéB°œñ ÇÕÚ$YVKy1›Ÿžœžž{Ž?Ž|Ïw]w2™-óìb<9_Æ¿þö»½áP 9ŸÍ/&+ƒ•A·z^è“ñÅþá>fìãO>¹˜L€s®n_vz{{»Z7”`£u'î@ÛÓ íÚÉ”6”qˆI݈d™Ÿ=¸ÿðøø4YæEQE…u\cÒétÛÛž±Z)‰0 [+)3Ry™7²È`‚50M#¦³é|±`”…ž¿±¾©…^ÎҬ̰–`¥ì"É‹²¡ÜUÒžŒƒ°K1?;O'ó½g‡óY‚1‹;Ã4oÆ“ùìbòùçŸSˆ—ï<~؉Âd1ÿÊÝ;—/oEn!ŒâØ •~~NoïœÖZw¢ ŠNh)”6I²ª”ûÇçgÓ8î‰F5MãùÌu]Î&¾#93@ÏÝ|¬~¿ìQÊó\km¬v˜“§©ÖÖè»U6Ž: ;?Œ0åNw<›Þ¿ÿð·¿ùEV””b×w¿ýÝï¼ó÷þßÿÿ¯ÿÛÿîºngØgNøo~÷~ðÃ?|ñÙ'Ÿ|ülŒqY»´²~iíáƒE’$n·-øÆRJÛ®öáv]7MÓe–‹Ž1Æk!„1Ïq8c†P(””B Q6MeÖÚ¥gYI)ö¼ˆPŠ)‘FWy“fY–J©ÕÑš¨!$ð|—¹yV)ƒEbd=QUÓñÂhà8ݺ„‹ÙÜ÷Ýn·møB<|üôÒåÕw¾öö ßûþ÷¾÷÷ÿñg½n¼¹¶úË_þCàGRª££ãùbÅÉ|±\.ó¢Áï½ýF[11¶Æ´f©Ôó@B!´BŒ¡²,2%BÀaœR ¬¡;œÓ$M†Ƹ,Ë(Š–YÚ^~­µAI©,y^0Ê£8úã³n·÷Þ{ïõº}£MàuU®¯¯mmmqB†ÃA{k³ÇÉr0®j‘¥E] ¥¬çú£ÑŠë:„à~¿;õ]Ah1±J5Ëe¢%AÐétÇi¿¹¶9¢%¿ÌÉRic,"“‹éÅù° Òív“eZ} 黂d¹ˆãàÒÖfš%Ÿ|ú1 T¥ ÊHU”ç''g§gGûu]øûß¿öêk£ápw÷YYÕ— &Ë,¯ê:ÍrÒJ5-×Ö ˜­j”Œ|O–µU2èv1%iÓøAa-*N¡š:ÏÙhD´ëkkí³M¾ÓZ‡C­µ2ö˼¥tÇYZH)›ºŽâB¼¿¿_åõ|>GˆÜ¸qÃH¹˜ÎÒdú^U¨0 £(j$ìv¹ëDãEÄW¯^ÇÊR¢ªKˆ™1@€1t!n-|>ßl*!Lc„ÆF´3«¢¨Òe¾ÌËùdÞæ*¦Ê²ît:Ãáðµ7ß8>>¶L§ÆÏåqÕÒdÆ1Äh2™-æ)eî×Þ~ïðì$«Rkðk¯¾19?x²ûääxïà`ï¿øóÿòÖ­[ÇÇÇÏž=k=Ÿís¬nªçni-4ìßí!„nÞ¸Þï÷“$9<<´Ö–U‘å „;”2È8w4v=¾¾¾J)Lf®PÆ…-^8G릲ÊÂ"Rj­­Ôª( J9ã F… ¡ØõBÆtõ¥áíÛw?øèÇOÒWï½¾¾¾NÙ¾:|úäÙÙÙYšÌ§Ó 6˲~¿¿µµ%„„o^Zƒ¸ªÑÈ,͵¶Ï1ðVólÇ‚_ò}çW^ér§ÓéhË"w¹S×¥”Òw=Ç ‹8¨*캮Q<òÇq‹YÛ®«µîöº³Ù BÐ4M‘§ÀBmA¿?”2)KÛï…?!„¬®¬_¿~1g>Ÿ·¹¦®Ç9[ #¿µ÷ûÝ 'Ü ÇËó¼×u-UÓínQCh_ð™BŒ©ªªÍ^ãüù3$DÝ4Úu]Çaí_´X,f³YY–ÂnÜ;>>oÂÖïÐ4Íéé©óàAQdW_ºvåêå¦iö÷÷iÒ(qýÆl™v:é|¶˜æß/êNÒ¬ÀÝ;8¬DÖ”‹Ãý'—VG—¯l÷‡@_ÐFë+­…~àyÕ •-ªä8ŽÒ²®k)Û<Ô‚âz”PÊq]—Œ0²q'Š")›ªª¬%_ް…jM ÏCe[óK[s·½½½±±v19Ÿž,ƒˆ®®8Ô¡B¤ˆ «W×Þúú=ÇqþìÏ¿ý楺_ÿú×Þýæ7öãŸÿê¿”Ò º=N©²:M“òGß­ª:]&Üq666”5óERTåx2ÅãÛׯŒF#Ƙ1F+ÕÖtqÎßÿîw‹<¯Êb8t:1°À«•h3лÝÈuÙt ,è÷zÖZÎØt:…Äqœ¦©ïûÚ!¡¬ÛíFaX Íó¢ äyhäÚÚÆÆ¥MŒi¯×3ÆTuÕë÷ƒÁÞþ3Çqªºjêjuu}|1çUYϦsÏwÂ0X,æ++C­xŽÃ-0R ©„ÖÆˆníäB4uS[k­5J‰ápP×Rc<_ŒÇ­íÑÁñÑÑIQ”R(ÎÏ÷¶¶¶‚8˜'ó0 úý¾ïyUYŒ†ÃN'Z®øžÓ¨¦¬ª›×o4•ØÛ=€ÎæIV [wo Ù ¢ÀÛÜ\ߨX{ë7ºîîîÞÉéÙp8zº³›¦Y¯;hSz´VœqF 0I««+¢,Mâ8|ôè¡¥Øq(B@ka­C/ð=J!AàÜ\$4Üq\ÏÆœŸŸŸomn½tíšÃ,Íf“Y§ßݺ¼uyûJS—ãóã¯Þ»ûÞ7Þ}ùåk£Õ¡õl>éöbÆIš%Êȯ¾z—2B(x¶»sttt°ºa'Š)¥I² ~ý­·ò<-«Êó¼Ñh¥¨ª¼¨Æ7oÞÆŒà·ßzõKw%Ôqœ­ôz½¢(NOOÛ¶Õ¶}©€pþŸ/ö,$Jé0 –Ëd:™,—ËöF¼ººb­­ªêöíÛ?üÏxxxø7ó7{ÏöVCcÁ­[wúýá“ݪjúý8ô£årùч}þŃǞÜpÿW¿øõîÓgÃîŠëúYšZ£½N‡««+‡‡‡qGQÄ=ïb2Br‡‡qG…¿ñΛ-ÙײØ_^ÎI2ZYɲ||qÑév¹Ëó"§Œ[`!BZ¥4@@]Õ•²*ʪª°m¦TY–BJ¥DˆRŠ ±0îø­B\•››~¾þÚëýÁhoÿÇ?ùéOÿî´–ÃÑJÝÔ§ç';»;ÆšZÔÇ'ÇgçË´ÌÒb‘Ì8çN„ñó:c´Ò>oøaÏã‰3ì @Bˆ²Ì…AB0¡HÈBT×”ŠúÞ{ßúÙßýœRöoÿ—Ûˆæà`¿U§Û ¿Ûë]»ví—¿þe#šN#„’Ùâèðˆ`Ôë÷)cL.&ݸã8ν¯¾2O1Ãë›k㋳ÇO-‹+—/o¬n0Bü·?™-f® „»Ý¥ÌX#¤èÄ0 ‚B6q (!uUX­\—ÇQH1ªÊ¢…ÀÏåƒ~A mµÅki&ãÉÑñ©ÔºQªÇççgŒÒµµÕW¾rw0è?¸ÿñ£Gçã1ç@¸»³[ÔuYTžh4êuGR‚eR8<Øß;Þß;ŽÃ~¿¿ÞXÛL—ÅåÍͺ*ößÝØX¢(Ë–£ÕQ¯ß•Jïï`L<ßs\O…¿ùî[-ûL)…´VÕ÷pÙÒWq7uS%ã cÒ¬Yk}/0Vçy®ö}#Ä9kñù4M[? eÜu]Jøs¥À²¨–i2žNnß¹ !ý›¿ýñ'Ÿ~f,àŽ†áã'OgÛÛ—_zé¥áÊèøäøÿa:[ H1¢MSÇq†¾Æ÷ݲÊÕíÔB,"˜Râ@ˆ´PeYTU)e €ÐX ¥”¾ï£BÆ€³³s­íÏþ÷¢££Ãã£CÑÔ”1‡;eUUMÍs=—sN0!„¸ŽÇ1Æd:ŸÎ‹ ð»qÇcl¥?œM'ƒO>ûC·'ÉüÉÓGUYi!‹¼8=:ÉÒüÁƒk«Q+¥­¶‡‡í9¯ÇmwRž§¡ï£•R ÇåÃ( µ–iºìõ;Öš¶z³å¨šF–­§l”¶as—SBNÏNß|󗯿lyôèq’$žçµ¦ ùb~|vº²²âpwØ[S 2æâpæ"H§“$M󳳉Ã8ê_ÚØ¼së+Æç ©r}}uc}=½»wnwºÑG~8›Í¾òÊWz½^QVG'G^×"Dˆ1¿óµ×Ú8ÆXIÕ&ÿÏŸLgÆÚ¸Ó‘J Ù`B„„Ræp wœÁpÄÓÆ^Ç%„sÖ*Y–µg,c¬}°”6Rª¦µ”q§s÷Þ½§Ovvvwoݾýλï¾ùæ[W®\_LÆœÓí+WÖ7Öª¦šL¦ëë‹yæy”‚RÒÖ»¡7ŸOѾ0ƪ²©ª†`!i™-“,˪º´ÖRŠ AC„B­W‚K©ÏÏ'eYyž1Ù}ºSyÝÔÊheTQÆš8Ž.o_–R¦Ë%„°ßí_½zMÔâ³Ï>Û¸´1è÷ûxïÙ^è{—VûýÞl>NˬӋG+«½^·ÈŠt¾œ]¤¢iÎN“­+—Ê¢”RY‹²|çíwG£áéÉ ¥˜’g©ç8ÀZ`-Æ ŒBŒ!!XȺnªá°ß’ÍÖ`‘*ÏË<+¤ÐQî¸ñ Óéu¤l²eòOðƒµµ½ÝÏ?ýìÉÎÉÍ›W=χQæüöƒŽŽŽ„PÉ<­k½µµ=­*¥§³ÅÅx\ׂQ~1{®·2\ V(¥žë]Ù¾úl÷Éx|Ê0^ßyûk›—6NOOÞ~ûë”QÇáyQ¤Y¾¹¹åxÎstï­×_i#µ1ÆF?B¸ã¶DRj±X8Žá|>ãœc„•Ví§šFTU‰.Ë¢Èr)Eëói픜s `7È(C[ ®çˆž>Ù=8<ú‹ýè/~ôW³ù|ow?˳ý¯ÿûïýÑûq·sxtpz~Œ=>9NçŒ8žçAh!´R în7ný¾ïÌëZˆFBˆ@Z›(°ÆXL c„RÌeŒ¶Õ7Ö€ét^•5Áüå—¯ÏçóíÍMˆÆ$îv}ÏÏËb:›Íçóï|÷;½^¯×ív:àúêZEáÉb>™\0B ±·n\_]Íç“ùb:\|ã[ßøú×Þrg1] zÃõÑúÝÛwã®wûÎöJÑ4"Ë2ÏuŸ<}Œ‚DQPUFH¡´ÀFQ踬µ1 cÔétZG2c\IçE‘WÆ ‚9Æ T‰ªÓ 1†ã±ï9Y–Ue±¹¹iµ¸së6å|™¦óÅôλïx®·ût/K³••Q]W¿ûà7ãÕ•áööå0ò×Y Ž÷몼rùòúêJ›‰²±±Ž:=;^ÌgÜ¡Æè­Ë›Y–çU¹\¦ÒÈõ ¡µh$$ý{- €2Æž{ê­%̱fy!¤â.7ÀfyÆ¡±VH%•.«j™¦yQ*%Ê<Ï–iÛ–$ !Äq]Î9&Äc-d”A„•ÒÖî8øôÓ²jþÉ÷ÿø/ÿò¯¶¯\k¾‹éäôüôÍ7ß¼~ã†Ô¢ªê^¿»LÓ¦nb"ß÷‚гV;.ÃcE1@Jm-° ¡´¢~·§µTJBh)Å-WIHÛ?èÎç‹ããÓª¬ç³$MÓ?úî·eY>Ûß{ðàþ2[vzN¯sëÖíÉd²¿wp~>>Øß÷=ßs|ÊhÝÔMSɦJ—ó£Ãýû÷?O³Å­»·6··¦³Åb¹àÜE;Ä œà­·¾~rzl¬¡ŒcJÒ$éöºÖ˜<Ï¢0”Rô{]¥$„m/œÑZFZá†Rây^k÷`L”ÒBh%ÛŽGŒ Èj(-Ô£ÉÅäÁýûÇGGœñ­­Ë_¹û ç|™eçãñÓÝÕµþ—%•ºrõòƥǣ‹åÔXuün/¼¼½áüÞÝ[¯¼róñãûÓéyÓdŸúáßþí߬¯¯ÞýÊÝù|š$ó³Ó³ÖïÙ4µÖz:›eÁg0.–IÓÔ”1üö[¯¶Nec ‚¨|•R ©\ß5JJ-CÏSZçËbØïtµÕÐc–RHI¢”pF±”²N§{q1¡”Ê€Œ8EÙˆZ LÙ²¨ÊÒ»H³^oð/ÿÅ¿\­~þù§›—.Ý»{7ô½³Ó“årñÉ>:;= „ž>zR–54PIÕïu;X‹ ikæ»8Ͳ²*1ÂÖØ,+D#£BÖ‹å"/r &Ü2eZ£ÁÅÅ´®DÄeQ%ɲßíݼ}[)SÕM#䯯æw¾ýþË7n.æÉîÎîø|l­ ‚`:¹@`1ÃÊ(ßw‹,¯Ê#4 V76†£•ñÅôñ“§;OŸ%‹eÆ·oß®ÊòøäЋœ¼H:Ý(O“ýg;—6Ö–£^OˆªH³~¯kŒDPJ)Å‚²ªƒÁl6qÇóÝöÔkŒVR[„¡Æ!µTbÌ8÷B~1>'„žW•õÊheem b \fÙññqE—. ¶/oÇ(Y.:ýøàp?+–ßÿþûëë+÷ï.dsï•WzÝÎ`8<;?3V/Ó…2ê7_ûóögë««÷ÓŸ„AXÅ|1ÿê½×©<ÏŸÎ¥MÅ^o1O´Ñ¾çá·ß|-Ï c¬ã¸"kÆcD*Ë<ð=c”è”M·Ó1Fw¢H©Æ«”Mã8,ð<`V’â6 B…aD•µ®Š\ä5El8ZC€œžAïÞ}åö»ï|ýoë›ËŬã{>ÿì׿úûíËU¶üþýÿùà³Ï~û«_=øü3Y5×_zYÔÒ ‹±ZR„]C`”l´MYJ%8gœñºj’ż*+eÔ"s—‡q ­-«R* 2Y€k!³$MKFxD«+믽ö:FìÑ£§é²­¬_Ù~):Û›W”Òçgãó‹³7®Vz„ÁN?øý'¿-«|>™Äa܉ã¦ÑQÔY[ßòýÎÊhýw¿ý7ð©”ãòO?ÿd÷`gÿðÉåíUB ÅÖuÐêÊ`؉:ç”/ŠQ]–žÃ\ÇÖ ©Œ±­Òó=BHKlkkç~*mªª‘J#B1¡ÚÚFÔU™úýñÙ¸×ëûA°¶¶vrz Bî>ÛRÆÎööå‡üþƒßJ>}òÚ›¯wûÝ?üM¯ß¹rmÛ÷ý¦n^zé&"üøÿÍÚÆÄ4-˲i¢(Zœ]¿²ýò•«“ñ¤(Š•ášvÒ¢:9»Xfew“4ãÜ]__;?;ïu{øûïÿg”Ò6ºÙhݦ¦H)%F+Ïs„œ3k !¸®*)Åb¾PJºŽã8Á¸¥ ’Ù¬ª*k!Ƹ*›Å"ÑÚAX•¨¥R#L0ÖÒh©…” íííÑ` EÃ)9;;ùío~¹··síÊå"Ï/o^ê÷º7®_úäIžW.ok 1„´,“ÖZX`(Fqaˆ¥ÒFk×õ|?”BžÏ§³IQWRiæ°A8ZYñ\Wkã9ž”ªÈ˦É"©ë†R6WV7æóÅéùx:™N§³ý½ý‹É„º¾±æ9\YyvvÄ^¯9>oêj1K¬FBHw&“ÙǶx”¥å³ý}?ðWG++k«½^gk{kumÅ#E­šš@€ UR„ž‡ BkÚDk À w!€ÏÓˆ2Î{Q±d˲^,³¢¬DÜåÃAg6›Îçó^¯o­Í²"Ïón¯g¬-«êðè8ϳºn£ŽãöÂè|1˲¤*³Û·oîíìœÏà þÕ¯~£5(‹¦‘²ÍÆæÆo½¸ÜVu:ŸŸ_,³Ñhýú[!¡ŒÖ ¬ªn‘T¢i„ÖÊq8~ëõ{í  !$Åóœnk¶iêvê÷¥1º¢­µa†aøŸä39c„,¥,Ê#Eq’,)a-úL&­+Ë¡š•ÕѧŸ}|ÿÁçŽÃ^}õ^¯×¥”h%=Ï |ÿàà Ûéÿú׿9==][[ŸÏæB*L±xžç` íó†A¦µÆ„ºŽÌó2Ë ¥T܉Ïe„cÖšª*³,k‹ý&½^_+ݦnÜ¿ÿS”,’²®\ÏíöºÆè¼È_¾~íþƒ/.]Úˆ:ѳg;yQL¦ý^o8¼þê›Z©²,…¢t™U= zÝþã§O0!‹Å|wïÙb1ü Ûíø>³V[m””BаçºJkî8-Ì£Û*AkÁŒ1c€”BHiŒmíQkw¼ûË×/ª1—Ëåd2)ŠB)UVùêp ”’R¡Œ1‡»”’$Yx¾Ç9´~"BHBЍõúFñúú*€v:½@mKeÓL&“n·wzz:™L\׫«Æã8,|ÇåcM+ô/—¨ÓéÖµ<88Èób0åEáz®ç¸Æ˜ªª¥”cΙ’²išã£ã4]&‹E–åŽÃ«ºD Y;®ÓŽ&µVç§Æèª.ýÀÓV×u¹½}¹ÛëÖué¹ï÷¿¸/¥ð?ÏK©TËî]¾rµ,ËÁp¸X$Ói…n¬­ˆ¦TMÕ¦ö¸Ü±„AXW•h„¶"ˆZiš¶æsfŒi}k%ŒRúÿsõ^?’dYšßU¦…›k÷™:³´Êª®êénì¶G`°Ã%øF‚Åü?$øB€ÄCr§Û3Õ¢D—ʬÔ:µ0mv%nVn“þ™‘ñyíØ¹ßùÎ÷S q.6²´ÈÒŒsiš–ã8¦a糩b89Ž×nw£¨ÙïêúÕܳÙô?þøã÷ß{ßqœçÏŸ?yüØóü4‡ƒ~Ô:­H NÎãĵ}áÞînØð\×.«4IÖužŒv!B«Mœ—E§Óku: Ûõʺ‚@`Y–Ì4‚ Ë3ü‹Ï>B¾£…1RJ–e‰0Ò=?!ÿ•j ‡zàC)Åw»Ý(ŠPÉzÍJiùÑqlbJYQä)•ç9¥56Ðí»·*Z^σÀýÍoþŸ=PJ† ¹˜ÏæÓ,IZ­¶”j2™¼<™²:¿vxÃqà )&eµR!h¹N–œ BŒŠ²Õj-„ô<±\z®eš!‚1!BTW%Bh¶˜ÕŒù¾§3¨ƒÐïtÛ–ca KÓ˜sê>„Àý8Ž9£Q«qýúµ^·óå_[–määødoo8Üš/W¾ôzýÕ&~úô¥4 ¨½ÝÝn»aÔ 7›…A$pm·È ×q—ËÁ‚㟌‰¦ešÂX*¨Ñ4aÓ´LÃT !«²†‰ \Bˆ¢¨9è÷[Qs:™ÕU­„² k:™²šUeåØŽAŒápÐj¶övwP†A¤R³ùܶ¬Ñ°×k·,îî! fÓ™ëx7oܶ,ÃX­æE™­×³½ÑV'jÓš>}ú ÔéökÎKZO¦³8Iö÷÷kJ‹¢€pÎ-ÓPJ¾JÆ?À^ý‘  !t]7ŽcmªÑ zžÈ‹ã8Ë2×u;Îã«N«øNY–eYK)õ¤vrÎLÓ´m“Rše™JÔr9ß$ë““£ÅrúàûïlçD]—®k瘥ôÁoÞ¼YUuYÖèÔ2L"B* z½(œ&ùj !Çl G®ëJ „&¦i .Š"Ù¬–Qõû})e¿Ó-Ëz>Ÿ{ž6®ë !ÎÎÎ0á·ß}‡1öü奕뚒ål0¼:¿ÚÙÚnFÑõ‡×¯•uç©‚Ðö\ÆkЧ³Â!… ¡‰ l  ÕŽdưi „¼À×9L ‰1&Di)%@ˆ(¥„PœK¡€”@UW´¬)c‚b›¢*ÊV«óÖ[ïbÎçÓ‹‹«³³3Çq¤ä£Ñèí·ß¾qóúãÇ÷»ßM&Çqh]IF‰m@ ¬ò=Çs¬v³M(Åj6=8<ÌòUϦ—[¦ [·îÜŽ:½šR!Q^S×ó²¼Ló¶mOˆÍfÃù+ºe»Ýƾû†n’ „´¦BÃ00FRJ—jØ®NÔÐåÊuÝ0 õÉk·ÛÛ£-F©x.DÍj.8ÄÈ´M©1Ä‚ 4,£Ñ>ûù§”W_}õÅ‹OƒÀû‹¿ø¬×ë !âMÜétzÞåååññ)Æ!\×Te;f# ]ß!#¡‰i2Æ bJ’$ÝlbÆ81-Ó´¡‚J*ZQ)„ežç„¤à”ÖBr?ðçóY^ƒá€˜Ä <Û¶†ÃÁr¹8:zÙn·góéîÞ¥u„”–išn6›fÔrl»**Ó0ƒþÁÁÁí»w]×µ,Çvܺ®&Ÿ~öóN·ð=A´^­vw ‚¤¨ B€uM]Ç-Šòæõ›˜aˆ°Jϧ!R*Ji¼I•@i) „€J¨šÒ,+м0M£5-ËZ¯VÇÇGŸÿë @@ÁñÕÕr±,ò\#Žz½ÞÖpÈ(»8?ãŒF°ÕlFQ+ð¼íía«áC eŒÖ¾ëI¡ÎÏÏ—óùþÁ«KÆJ¸iš’³Ó³Õ:öß°ùb¹Z¯Ã°5[Ø0^Å®Ž ô<×¶-üÙÇï»®„°*K=4D™&ÑeÌuÝ$Iôâb£Ñh·Û§§§ãñXC§ôÚ4ãt8èWU¹Z­u&›iš¾4›ÍÕr­}Àu]Õ5ŵۭÑîÎÞÁîb±ØlV÷ïßÿÿÍ¿¢è믿Z­–vcÜëö„–é,—Ë¢Ð5Ò ßvL)y]—˱ƒ 0ˆy5™^œ_1&lËr!9RH˲|?p\½±NãÍz¾˜„aˆ0ºs玎¥¸~ã:çb±X¡6Âo¿ýæñ“Ço¾ùæb1?8<@gYÊ9ßl6:#EMJëñäªÕjI©®®Æ ¢¬‹õ`°U×4I)d§Ó™^|ÿ}»ÝžŒ/=×TJhPƒk;”Ò7ßzËvìùl.õJ2PºÍÒ‰=uM Ã2ŒWÐn=¬D'3„P£Ñèt:žï–e>¯Æã<¯’$›Íf¦i Ó48çQ\† IDAT3ÜÛÛK’ø‹/¾8>~yyy¹µµµ»7ºyã–ŽwôÚežÕe>\qÊMÓr`lY¶ôÉãM ì­W«fÔîöú׮ߌ“8Îr/ «šÓ¼vãæÕÕ•ë㌚¦iYfUWÄó]¥Tœl„*©DM+Ã0„`Ú˜%„è÷ûzK¸( ÀÍ›7W«Õ`0ÐÈMÇqþéŸþéà`Oû€MÛ"ÄÔôXÓ4½ù,ËS%!e”1Öéí\ÛÇÿðÃœóø‡¸q㆒¼ª*„à?þã?®«ãããÑpdšfUr½îº6çl{4Ô‘,ÆÁÆùÙÅl±t]wgg‡ ¹˜/¹„ØœqÊ©k;ñzc;F·ÛÞÄÉl6s\#ÏsÛ±¾ùöÛ8Ž!„BÊŠÖ”³¼(„;»»eU=yúøÖí›ã«ËfÔòH±2-Dzß|õmÇnëúÍC!„έ™r]¿Óé ƒl6I‘eÃþÀ0Œ,K{n]V[[}()!x<^M'J©Ÿ<•RR.Vñ¦5óªÖ>½n·+ò‚snÛv]×”2M.ªkÖjµD’‹íA?MÓËéd>Ÿ?v¼·¿wïö@‘¾ ·ò<<*xÞö`øùçÿŠ1~ïýwþò/ÿ²ÙlH)ŽŽ×÷]Ç|9»XÌ®Þ÷Ýë‡×/N/NޝzíŽëúO_<½ºšT´|キ˲ Âд-Ê™ã{Ñ8ÍêºíîÕuÝh4ò<ãØ6‰mÛ&¶cá_þüþëÀmôSæ¶”Ò¶-}|½¢®ÿ1ƃÁàoÿöo»Ý.¥t6›E‘&™ëºE‘W5MK—(ýƒ:OË2m÷¢ŸWWWçWÃáàÝwß3M#ÞÄR Í^ëÍ7!„Yš=yòäüìR¯ÿ—eYÕ…ãX¯¸xôø©¬+JF"¥´È ¥ ÆHe@cÌ8¥´–Š1ÆPžçù¾w~~†1¾sçN«ÕR œžžn6Ñf³™Ï†a¼óÎ;Ú¹oY&¥ìòòcÒëõÚ­Ž”2pÀã§®®ÆÝ^ßr<× W›øèä¤,«Ý=×󂀋ë‡×ú½F–…eÓ eQÙŽmZö|>;>:9??Cˆ¤y6nvF Ë2]ÇÛlbƒ„°ëº®ëêþ„s~~~nFx–eÍæSäÛ·nÜ8¶mÓõü@ VѪÓnmm÷÷‰A¾üâIwÛ­ûß¿ÿá (NÙx2‚ !„ ϶0ÆÉz3OÖ˸*èÅå…çx­vóÓO?1LòÝwßœœ¹¾o{>ãzðÐuý^¯×n·Ë²‚H‚Ѝ4¶J×Ô<Ï)¥c)”àR~•)%”Œ3Ó")…Œ ‘-³¢ÊùË_FQô§?}‹ IÓ¼,kJ)§bo÷ZšÆWW“o¾ù.ÏsqUÖßÿ= ßïb>{ò<ÏóAØïˆEÆÓ Ä4lÛ–ËõÆ0í‡~,Ë:ð]‹óù4ðÜåt²»µ=ìõq²öð¢u™åEQI))!vO€°¡É<›ÍB8 â8†PqΕ›Í&MÓª*Z­TQdŽk,óÕóÓV+r=³¬Òédéû~z©Ùå• µa®g3ƾþòËx½Æ'IR”åóçO)+WËy§µ>x7j†Ä4"Qäi>[®êš­7©Rð­wÞ½ÿɧŸ> u…ˆa96ÀÈ@˜KA¶¯˜:åUs ð/>ûP¯>àŸ…ØjW–Þÿ|-CBêºÖ±X:{^oÄqJ¯)ãd6ŸOg³Õz$iQ•®ë!Œ«ª.ÊalÙÂB”¥õåå8ÏKÏ÷a£(J„ñ{ï¾§„Z¯6g§g®ëº®ç TVÂ9cBH¥êšJ„TRJ€TPüD¥â”YsZA´tR•EœÆ«ÕÂ0Í^¯—f…TêæÍÛ³Ùâ_|y~z%…úä“O•T<<>:ît:Jª*R»»» QWu•—–ad8®sýúMšœœœ&YÑé÷2nܼ¹XmòRŠÖ¥’´Óiú® kFÁööö|±žÏg\Ð( A¶cú¾Ûn·ªºêv»wîÜùñÇ_¼xÇqš¦[£a¯ßÝßß±,£¦e#ð-˪+ YÌ7¾×°L÷òjŒîú»»û½^6Ÿ½xùr8ØšÎf¶ívº=Çõ ÃBBL=[΋n;ª«:KŠƒƒ½>|Ÿ3z~~.}ïÃ÷g7o]›Ž'y^ܸyG Põ³gÏ>zÀ”Ä–}xý­J¥ê‹/þØn7ÇAPM®Æ–6iâš„2&¥lvÛžœœŸÞºñÑGIâ8~ñâ„p¹\Þ¼qƒRšqEÑ»o¿3›OŽ^>CJ:¦å˜Îl=ïv»a^^\0FM“ôzCÛ2¯Ý*ó¬È©m¸iœ$I5yžYYE¿Ûs]?ÙÄóùüÙ“gí­n§•U·ÝZ¬æ—§gYwZ¡ã˜®f+…„혌V­và{áÅøt¹š·Þ°-w²c›(€W›U§Û7MóÙ‹“ÉIJ,„B€B d ¬”‚ ) ñg÷ßçLL,ÓVJj€ªf_éEaÍÒB…ÎBFív»Ûíj»iUUAà{¾ÅX€_]6›Qx‚³õjUWU¯×í´ÛªG~è÷:o½yçwÞÚÞîFM—ÑÌ6`+r=‹Xb%׋yÇ„"+ Ã`L˜ŽÓïNOÏ€Â`)!bör½ŽšmÊx•W´¦­fË$fš¤Ýn/M«V§Ç„RÎbà0òî½qëìôd¹Xìlï=ùñÙ·_?ÝÆb•tþEH+ðR“éålv™ñ›oݹ~kïÞ›·ÖÉ‚óº¬rßwª*?=92Mƒ V±z|uÉy}uq!({üãžíÊú­Öz¹d´Žš .¶ b[óÕZB( ‚#ŒÚöp8|úä‰mZ®çˆ8eú~¤IU•Éb™'±aXJªåjã8~ÔèdYåz¾”ˆûoÿîï9“ÿ÷ÿõ›Ÿ¤IA°c+™e»»ûÿå¿üJ°Ù煉({ý^·ÕžÎ¦Qüìã1@ƒVçÆÁA‘d³É¸Ùh´[Q3 <Ïlu?ýìcÓ"_|ùŽ7îyž{vvÞìvçËu^T{×vv÷®®ÆËårÐ﹎mY¦aJ‰ŠVe]2J…øÓûïé,@×u_ë¼c=ÀÑaºOgŒéüÇqtà;cLSËL‹` 9gUUæE!‚WU†a«ÕÔ0H”i½^!$%OÎ ¬Bßkžk[A PRIU–År¹Î‹ aS*% †Q×5@¨¨k¦¤ !˲”RÚ–M± €ìv LH^fŽkÅÉ`k«oFš&×÷7«ø«/¾®²ú`÷ðÎõ;£ÑH±*MãÍj5üf§QÖcUÅŠÙ|¦1‚ëÕA´3u;mLðl½âBŒF£íùl~q~îÚŽçØ@Jßs ¾ï¹ŽYÖ•¬ªi§Û £ˆ3F9[.–yQìlF;#ZÕi’°š††²¬*Ïq Bžiúž¿˜/ÀoÜ{cãôâÂñûøÍ?þñóßÿáwͶ{ëîõ°á?zôÈõì?þ¸ß²ZŽ/.×ËM«Õ„lmm­â,h„‘ŠÖLðÏ>û Bxvrʳ,â¹¶mƒ 8$h9Ÿ9ŽÓë¶½À×›õjq|ô"h„U™sV—5ít[J‰<+ݯyY–ïÛ¶½ŽSýô&I¢3Â0lµZËå²Hbß÷·†ƒ‡ )—¾”uÅ•ìô{à´ÈõÞ÷\Çq”Ry–={út½Zˆ.ÏÏf «yÄÀ’ɲÌ)gE^)hŸÿû¿ÿï@Y–µÛí¯¾ýzµZu»]Û¶ONNʲìõzŽÙ~Í.A!ñ/>ýPïÕ”eYU¥ø)OBÏû´=æ5ÐAJ™¦) ( Ϫ50 ÃPJ•Ä™e9AF¦>ÔI’¹®k&„P9ŸÏ§³)cõp«ë8–ABH æy‘gOŸ­7qÍ1m„ cL*…bŒRJF!í¯2-+‚áp Bh`¢õ}Û¶«²,«dÚÄ2Éx26 |ÿÃ:v]T@Éxµ.‹âÞ;oÞ»M0ÈóÍj>.óu¸R²V»a"”\­Ö’ ÛñlË:®w||ò‡/¾PJQtýÖ]/Œ¢0ª*ºÙlnÞ¼¹·»—e™ëÚ¦iØ&vmKrZd‰àÔ4LÛtÇeU-„P\äyÎkZVÕ|2Ýßß71‰šÍV#’J5ü ªŠ4N~øáû²¬LÛœN¦£þ` s.¥¦‰×ëår>Ͳloo×óüÙ|±yúôEÍe»Û}øè±b0è®Fg]iEóu>ÃëñŒöÅà_|ú¡¦¨éT×uY”Rß4ÕWçÏhЗ&¡i™U;ôC å®ÙlVU]QðÚí¶R°(J)%c<ËòÙlÁÖööþþç;P¸ BhÛ61¬º¬7ëôÑ£ÇeÍlGK£‚1F C¿ãc\Sð×èà×u». ®*Ó4=× B_Aq5¹œaŒoÖEuy~¹5œž=|ðýûï¾N²ž¶ºQèÜ»{ãà`×2ͳ³Óx“U%]®–qœÄqбlÛ´œÍz]Õõ­;·vöæ‹%W8IòÕ*–J()ƒ0|þôÉÛ·\ÛH6kßw£Ð—‚ Z#¢(º<Ÿ0Î,ÃD˜8®¤ÚÄk%dÔl¬+ÊjÇ´/¯.ò4öûV;/r &D™Y^”†aPZ Éê²TJ¹¶EQøëõæ·Ÿ.áîÎN»Ý¦uÝíuî߿߈ëå(å˜V#«² ”ºŽƒ0!–¥Ÿ¶m{g»nœ$·nÝv\?/ê“óó4+\×ç\\^]!oïŒô E“x«ªÒ±¯ã‰Ô+KJ)ñ¿ýå'u]é,nˆTš&º‘ ƒ†Î÷±,K×7!D’$š¸bYV£Ñˆ¢¨®ëÕjUUÕ|¾'aЯ@å(”$)­Y]WŽãX–9momo ‡CÎkÎK¹ÔÁsp.WëÍd:§œ—E!²lWk³š•€äœ )0F–í„a¨˜Ïgãñ$Ëô6‘(‹ cÌ(MÒa9[LhU÷û½~gpyqiƒÖõü?þwÿûë_G¡Cë´Ùyº²-d›f³Ñ¸sûæÝ{wšÍðòâj½®.Ç1§•m»{;ûŒ €Õ­[·LÛ<=¿n@lr!-ÓÂRVIFwwFœU³Ù8ô]ßu8£Jpã~·WSNk ¨«2Ó ¾ëRa•Rp%¤iQ¶š­ßþö·®ãBg‹9BÐ|˱Ã0 ¶mûêòr±˜•yÞl6Aô¬ö`ð7ûw‡‡×Z­öf³~ðà¡e·nÞ´-óìä´Õlà XÌçŒÒápH @HiF¡ç¹c˲³¼x÷Ý÷6~øþÇÅrEmôÎÎÏó² £0j5uÿ­¥”x}¤þìU¨ð¯~þQ–eœsÛyÅ6M³Õj!ˆ5’@2uÁÐùDº°é¶¶Ó¸®»X,‹¢¸yã¦išI’/ !äz½ö>¯êl“l(£®ëž_^>yüǯ¾Û$)‚°†Í(’Œ¹Ž=›Û­æ|2v,Ë 0Ù¬²,å”aˆ0‰ã”cLimY&¸(Šª®¥–e®–ËùbÞnµlÇžL'´¦Œ1ʨaš¾ïàœ–e1O<ÏŒ5›M¨€”r6Ζ+Ëv?úäãfíìîAx|ür<žLÇãß}þùÕÅe»ÝL“$‰c¤‰q^æÍV«b¬¨ ?l@ŒÒ<%ÄR½<:^¬6—ãI·7ÃVQ”“É,l4‚F`»Ž¾çié@+ ÿ¿S¥ÇƒBü³Þ6 ò ù =/PŒqÛv´vª+–ã8¾ïo6›f³‰1Ön!˲t¹ ³Ù|<ooÚíöÉÉàäø´Ñh”eÙív1A}ôa»Ý.Ë"l„—§RÖŠó­­(ÉKÈdºÈòj0ت™(ë #ð<aUœ²$K“v»ÝˆBÏs[íŽeY¿øÅ_”eñôÉÓÃÃóÓÓ ð[­¨(‹ÕfÞüÑÖ¶išZi‰Âæz½ÆPý·ÿáï§“ËÁ ƒ±P’)Î Œ}7 ØÈó"^Ç·nßyãÞ›v #åÚFÍhV¾ïO§ÓóóË?ùÔó[ëÕz1ýÕ¯m8_nmõW˹똪4Mh]¹®ë¹îb¹ôƒFšeÁÝÝ­­!c4Ž7u]Ù¶ÕlFÁª*…àœ³²,Š¢4ˆj¶Zq’TU4‚².PÍ(Š“MÔh|ðá?»ÿ‰ëº‹ùb2›vÏ{üèIoNŽÿ»Ï‹¼˜ŽÇ›ÍúÚáa³qÊò<©êº®ëN¯[1–•åpkhYÖééÂ÷C!åÖp'ÉòO>þ”q zðè‘TÀõ½¨ÕŒ¾^èÒw;¬íÈZ+Ðð%þôþ» ˆŸý ]ŠPuÅôš1–¦©f¬×uÝëõÒ4Õr¼Æï8Žc†eÙã Óé´,«Ùt^ÅÞÞ޵뇇‡ÍfT–¹ÜuÝ<]›˜–Ùjuž<~†m)`4ŽO΋õz½Ñ‘“ÂW”((Ó~â¹vÔV‹™ib 8 *ä:¥BªªÀ¥Èól¹Z¾óÎÛ¿úÕ¯Š2'„ˆZíÎhgÿÎí{’‹f+‚JΧãéxüÆÝÛ´*ëªp; |‚­+AL„‘€1†¡–µ,¢”Ò—n½aðjR¥¤ªª*LH#Š\×Í‹¢ªk×µ_%™aÂSB¶Ûí"ÏÂnÐxòôÙÑ‹#£¬ÈsÏuûýîÁþíØçÇÇ/·†Ã^¯ã¸¶e;¨Ùêõº¨³óóã“ó,/ˆeÃÌò’&@äìâb½Ù(‡Û[Aj‡‹žë³¥³Ð´ÍNßä~‚|™øƒwoëZU–¹¶ÚiãT4t›¾ýiúŠ^7Çú*—$  Ùl"„Â0p]'Ës)ƤÕjv:Á°ßˆÂ­­­Á`eéz½ò}Ïq%­ ßõ…«eÂ9ÈòZ)trz~|tªp=_oÉ*¥TCˆçyŽk‡ÀüN§=ÜÞr\{g´ €l6럴ßï^ŽÏM“8–CˆafY¿ùq9ém IDATÍÊ’âÞÝ[Á!Ù¦zŽxUY0Áh]QJ®`Ã(«:Cb1*ZçY†ƒÀv)$\IELA¨ °-; R‚F#Êò¬(‹<Ï “Ü{ãîÎÎŽm[|¿ßíw:mɤ"M²8I 1·¶F”ÕišÕe¹Z-—~è-‹åj®¥úƒåÌq­ïxÐéö·¶·”±°)…ƒ­íÁp«f"+ ñjµÚÞµÚm×u)§¯YÚ~°tø´n­t~u+¼ÿÁ–eÑϽe™¶mbAèy~»ÝÖSÍúò}!¤÷s´¥ç¹eYëÍÒóÝÅbéû繺®²,u]Wfd¯õRáz³ ƒ#œ§Åþðe«5xñâÄqƒË‹I’¦m·Úßw•œQŒ ‚P*Ñé´;½N«Ýé÷ûÍf³ÑhÓ\¯×þðìÙÓ^·çºnÚ»X̧­f‹@l&PêÁƒ½ÞÛo¿É8ßlÓ¶«º¦LeEøQšV´æ™ˆ\ÓÂaÃ'UU>žŒ}߯êêÙó—=ï´‡YV1Æ_<~óæ5‚Ñ7úªÝŠîÞ¾¹Z/ÖËE«†A0‘Rq.060&BÈ4O‘¢¨a{ŽaÓ±FE]Œ Û4MC!!À&1V@Õ%C§Yªi~àߺ}kk{ •øøãOæ³ùñññéñéz½ö=¿(Ê0j^¿v=‰7‡û{{~ü!tûÎͺ¬>ÿ×?Ać[CÓ2Íðàààýßþ1ÍóíÑN§ÓŘ„adÛ.BÄõ¼fÔ¶lGï”+[­v§Ó)êª(r-yꉟރ•Rêþ]¿Í_[­cø£÷ïi¶ cL®cœs!…Š¢(˲Ùl–çyš¦–eéåÕ¤Û¥TÔ g³‰aÕj¥QÕA~EQY5­Š²¸¼}ú$MÓfùApvzšå¹ë¸UÍ™P’CÃô’´‚›¦ ✙&a¼ÊòôÁ?((167L³j0Ü. Úétß{ï¥ât9Ÿ+Ś͆a§Ûr]7Š¢fI)7qB©°LË0­´H1Fz¡^Ó‹ª\¯×¶ã8ŽcÙ¶Þ²‡RÎÒ,çLfi.¤hD mÇc‚*¥Z­Öz³úÏÿü›§OŸÕEutt´mçÉ“g»{{qœôû½~¿7›MmÛPfizíÆÎîÎŽ8˜àñäÊñ¼Áp8™Î‚ÇÇ'>ŒÓ¬Ûí6Ûm1@Èó}¥àj³Ãâ…AQ“®?¯Ç€¯u(m×ñÌúoðGïßÁéÆ\¿ BB„pšdA$I²^¯µr¯‡k7Û‹ÅÔl6“$IÒ„ ¹½½[ÕìÚᵯ¾úâødsýpðÙ'{Žƒ êDM‹˜E’òJø®%BâœS„T¢È3N©ï–éÌ›ŠªËéR"âG­8-Î.ÏþðÇß½ùÆ]ÆØéÙÉt6!ú”²ª*ëš–EÄiQT„†isÎʲ̲ŒÖTp)…0±L‹`òç¬NF)Ü$–ï…qšY–Ùh5ã8f‚5;­ªª‹²øã¾z÷Ý÷þûÿáüñÁ£Ó³óÓÓ‹ËËKÛõ,Ûô]Û±7›Uè»­vBPWe’Æu]_»vM?“ýA½ŠUUkÑ{±\µ»ÝÝýˆ碨ª‡?>ô}ÿÍwÞÃ0Ïóª*Çùóýõ©Ò÷w}ž^8)%þ7¿ø!Dˆ¡=æ„ÆÔZ•Yža×<·¬Ê2Ï(£Bq# ¤³ñØóªæQ£í:¾m9¾ão¶'ç“ÕlUæ#kwÿšFa«ÇZ¦å/ÿò׊Ÿ|ùÍ7ı×M²¤úaÃ;?=á¬lT€ dNž•ÝîF’—½n¿Ýly®OšMÇ¢ª‡½^’lt² >™Ï Ëéu·“¸˜Ïßüéëûïßi7Ãt½4Ãa»Ùô\C c,U•漨g– …¨ „-B0@@BŒm ˆa„Ÿ¼8½œ¬6вKšÃ‡"Ù¬îÞ½MLóôìÌõüÑînžåÓù¬,ëóóK @QTBß c ”L! ‘„&&a)8†0ðœ4’#@)©`DÝÞ`¾œÇ6,++ D°íx‘~ëòr2Ž(ã¿ÿý'ggwßxK1rCîh4\Î&CŒaàûç§'›ÍFp¾pÀëomat9cª²ŒáGÝ÷ƒF§Û• 0Îâ$™¯;»;×®_cUEëJ0–lbˆÑkè•>@ZÕ*¼ž‘ „´Â {¬;¯ï߀$`5Eù®çû¾I Ji]VJ©ÑÖv¯×ËÒc<èõBeU€¸T&6§ã Thz5_NfÓ¹àRd{ž‚$h¶ˆíŒ·»½7nþþË?ÄI"ýë¿þ+LP]f–eÆ«…”¢Êóº¦P‚º¦»Û;~Jš­&д, Ä&^%˲¨«C\Q*„$Ä„ˆØŽ÷í7~ÿûß­W+‚Ñï¼mbèYÆÝ;7GƒžcšUQ,çó4N¡„`Éh^¬{ÖþÞnœñ,+âMºXnŽŽ/fË5¶L츂hY›d³¿3ê¶š›8^mV–i@ʪÄÄ0°±··5"Ã0ª’®×kËr|ׂ†ï¸JÊ$NʪÂJ!Ö«•e™!aÎEYÖ‚q‘P"ÍlPYžK¥8›M"%@ûÍ“él½Þ<~ò$j¶ï½qï¯~ýoÃÞÅùÙf³"FQÃ$ÄsÝV«å¹®í؆i(lÇ…çY1¹ºRRÔ”%i6Ïí–6ÁiQ „šÍf¿ßÏ’4IFk×w ÂÖOò“¶ÀèŽêõ—þ¼š…þ³w^K¨ÚË ÝWñ:ŽãøuHUU›ÍFïuµÛmÃ06› B¨Ó騶‰¡ -¾ç¾xþÌs½óÓSÁE]Ó².±I‚FrÏ´íª,Žc®Ë­Áà»ï¾ýàý÷1¶iù¾vrDi ‚ ÓjqÎîÞ¾]±ºæ¬Õi•yaZ¦cYi–)êºN³Â4M€0­9€˜†ëßûíf³i5£V~ðÞÛQègéf1Ÿ®–K`³ÝîtºF ’•å:Y¢‘ï{.„Pû)ʪž.?>yJ%h´;À´¸TˆUY„Ž“¬W«Õ*ü­áP*‘ç™e›®cß½{GóD=ßcŒZ–Ei%9×9J¶mc‚¥âZð|ß¶mLLÆc!„1R`ÓÔAùºƒÙl6ÓéL§‘ݼys{{¤ÕÁétjæ¿üËo÷÷<ß¿¼¸‚uÛ]ÎEUV„{{ûUU¦¹^oæóÅ>{þ‚Qê»Î ßwW*`˜fÔj×”¯ÖkÆEQTuM£¨Yæ¹RŠÖµeÛbcí\×K÷ïÚ”ðçÅ "„õóWë_ü§”RJÁ)U h°€žj9_;´’$aŒéõ\Œq·ß¥Œ1Á}׎'­f³,JÛ¶ˆap%ˆa@Œæ«Åd>Ïç'g'ç§ÿ/WokY–ž ­i¯=ï}æsç)nŒ™9OU•e·q•-Uµ …í6-ñbD£æ !-!žú Ô­¶hú ár•ËÎê²*³rŒŒŒˆwϸÏ9{^#+òVŠót¥¸'NÄÝÿ]ëÿ¿ÿNV——vnl}ûÝo-‹0ô-LX]ŸŸžŽÃ00A¡ï×uÕëvÆÓIY• ¨<Ï VKK½ÀõòzèynY¶mû®+„h·ÚqÛvìš±Û·oGq|5 J(š áxþÚúºïÇU]#„k&Ì^9Š"^׎ã(%mÇ‘_ €Æyïšìyݶ_wWZk¥5~÷¯p.«¥”˜@Û¡”ZÄÂZhÛvŒ{Ñõ‘öÜ^ˆ<ÏÍ®ÐP!\ßc¼ÖZk)‹¼ð}Ïv0™%„¸»¾¯´Æ»žcÛÔó—Zvë…{wã0‡·nÞèvÚ³$F+ËKUU¹ŽM©åx®R*¯Šñx 5àœml¬¯.¯ ! ¡Œ1BhšåEQÛ¶WåùùùéñI2ZDwÚå~WÉy­¡êtº——W'çç\jÛs!ã ðVúíV3Œ£Øq.DYVXÍNÏâ’ ® ¶5fY ŠÃpkuÅ&زp¾ç" mÛ C¿E·oߊ¢àâü¢ÑhnnnH)—z=Æx’$ót¤Ô‚H¥5UUCˆ Øh¬!™eY2!,Ë"ˆ8¶£¤L¦ ÐÐ÷üíí­Í­óÓóýðGqåY–Lg¶MólQ–…Vʶm ã :íÎÕÕÕÁÁB(n4Š¢ØÙÙét»£ñèìôäÆR `·×ßÞÞ©j^VU³ÙÊŠbmmÍd«yfÐ…À¸פ+Ó­K)Mª—üêeô]ÜX¿dCU `Œµ– H°Mìù|žç¹Ú Ë1fÛ¶YBGQ$„ „$I2ÆZ) dÍ«^§?›Í„RNkØÙŽ|h<] ÁxÄ]DÉÅùyÔîúž—§YV’ñ°åw:m8!F›T3Æ+ ~hˆÆÃÑÖÖÆ8Ë›››Žå°ŠAƒAžç¦ùMÓ(„(ŠªbÌq©yHLˆi^ »Dkm¢C’$ùÆ7¾qxxxuyhâŒkË'Ÿ|’-f½^çÆã©ëC?úè£Ñh†áŸþéŸr!¦³äƒ>Zņ\I5â ŽŽÇIŠ-º²¼:K3?ˆ´ÖƇÑó¼Ñhä;¶ÙÛüÓð/LIÙ¶mÈXædz¯ç‡Wîß4¢¹&Í¿ªê²ªæ‹EYU5cYž)­ýÀÇ„8®{v~~yuÕév¨m†C.¸Ö:Š£f³a>F(+²¢,©íH¥WWW›­V£Ùxøè‘bueA8K¦RßóãÓI‚ ÎùÅÅEYäy‘‡A€1Š£`ee‰‹š±"lqò,½¼¼âœ;ž_ÕuQUYže‹E³ÙhÄñgŸ~2_}åÁÿ»?èõ[Û;[UU$Irp¸ÿþûïûa¸˜/鼬Ê[·oÙŽý{¿ÿûaîïy†ÃE^@du––s&˜OöžîÝùe®tVB©Ï~v÷ö­¿÷ÛïžîïsVù¾·X,꺞LF¾ïÛ6µ0Y,ZéÅbñäÉÓ§OŸžžœMÆ‹XU]bŒ³<ÏóBY”¥E,‹P/ð !E^„Z­v…J)JÓbÇQ仞–ŠúôñÁy2™B‹99î÷:ï¼ù:²®Š~¯F‘ç¹âd1'„( Ö76ò4?>9:==]]Y^^îó·%g£i²Ðˆ(D’¬HK~prâ´hÜlÖ¬.ŠÜó¥~/ }ÇÙ{òåÉÉi]WÝNÇlH¹`œ1ι’²®ùl6ËÒ¶ín¯Ÿ§™”ÒÙi­ÁJ)Ë¢yUYc5|~³¨º®g³Y’ÌŠ¢LÓÔ<­ååBˆIV{ë­·wvv¾üòË,ËÂ0Go¼ñºë:Ïööþöoß;=>ƇaØn·çóùçŸþÞO~‚0Žã¸æl±X Œ-Œ766×Ëó2Ë HÈl‘9®Kˆeº%€Ù.™¡Íø¥™¾êšÚ ”2SÝõnç«–Kâo¿ózà‡‘¢|î=,¥Ê²¼(ŠçÞFB 膡"ŽcãÖgvÚÆQhcsR3VÕ5c"Ëó²¬!BÍV !$yûíwþþ÷¿¿½¹óèËG›këë'Ç'¶åìžOF“óÓó¥^Ÿ3f;vGËK½F#’k­ª’9ŽÛëõ—––¢¸A)«z±XÔuÅXí:6B:Kç5Ëoloܺ}c<:Ž}çÎíf³Á…@Y¶Ýjµ’d¶¼¼¬¥ô}OKuvzòäñ£n»Y9µáxÖêõ±̲âøüòg¿úèw¾ó‹«+l‘£££½§oìl½tÿž`ìâä„Uu«Õlµšžë2V Á󼘌&@Ã(Œâ8¶ˆ-åW;.¶ëH¥4€aÎÄ$M3†ZHˆYâ)åx8¶©Ól6µÖišÖu}cgw}míã>N¦ÉË/½¼º²rzrŠ ´,úå£/ˆ…ïÞ½×mw?èuºÍf«ÓîZ½8¿¼ºìJ¥\×s\¯fl6K–ûýv»=OSB¬,/!Jƒ0Š0&زDL0΄ˆR‹X–mSCš2x•ùõ0X¼a‰šù?”`øÖΪÑÞäy•çešæÓél:™Rj#Í;Çñ}ßèaêº6ëg!„!¼©ç{×R°(Œ!æç’çÅÁþaY–Qß¾s›:ž<~róæ-¥ôþþÁéÉùãÇONŽÏ˲b¬Ž£x4ÕuiΆ( «•Zè(ˆšqœçÅb±`\8Ž“©eŒt£UevóÆf¯×Æh%€Ò®çÎç‹‹ËK­µãº–E!D0¬,÷[͆¨«d2rŠ4^Z]½ŒÒ²Þ;<'™DT(] 1—–úëë«ê8 \Jöž<>=>]Y^ÝÚÜ’R.¯¤RA‚m‹B…@#˲Í–s¡•’BB„ʲ¬ªZQÖ!,¥²,‹RjY„R‹ç=­t»ÝéõzF3\UU»Õ1`w“ÉôÉ“'iš*¥&“él–(­ßxãõ0)¥”XBˆÀ÷Í7t:(ŽŠ²,ŠÂõ¼N·Ól6lDZl:M"ˆX„ÐF³¥5èyLx]1­¤mÛ”ZBJ­º®µÖ&ÙtëæB4@øÊœÌ´Tøåï¤i–ç…V@)ey] B,B1Bal4õAØŽƒ’J]§ ÔŒ•UU–¥qÀr·7£(&„æE9›§EY)ÎÎϵ‚uÍÏÏ.þúÿýÑ{÷“Ç_>ÒJ}öé§ÓñìÉã§yVŽGSV1%µ’j¾˜+)‹"ŸM'óÅœóºÝjHò,?=;=¿¼,ŠRJ)µ$ Ázýji©;ßxã‚A–ΠLÓt8œ_\J)¹”Óéi!àu-æUžöºm‡’“ãã~©¿²zr18>»Ø?¾„Äj´{a£ýèËÇ®ç7›o¿ûÍå~çêâôâìèóÏ>ÙzÂ9Ó`„]×]^^¶(ÏçžëI©$—[¶mcLêšEaaÂ8SJ§iZU5Xäºulj`+¨…\%d³Ñš®Åð”Ä­V+Ëò<ÏFE¾,//--/­¯¯í?Û?>>ž'3!D·Ó-Šb4 ƒª®‹²˜ÍfÓ$!–Õï÷””„`ÆDYÕµç½þÒ|‘ø>RJ\ϳˆ¥”ÄþËo"½2RÓ¯÷ìæ@ÇqžyVض‹Bˆº. C?+gÿ?v„9™(¥f™c.ZC‹ð}ßÌœY–E!¥Î²ÌöºýV«#¹ºººšŒcÐÄ| IDAT“ªªfIR–ågŸ|~5ôzýñxÚï-B ÂEQI¡¤Ô³Ù"O“dæú-ïÄ]Á¸ÂÂØ÷œš‰<Ï0†\0×µ¯ e¾¨ÊEYÎ+ÊÒò<‡ eòEQ¸AÐl¶"ß¼ŽÂj§XÌlŒºív]Vë[›ÃÑ—OŸž^­nÜܾug–UÃäl÷ÖÏwŽööž8UÅBŠzk}ýðÙôáGçg¯¾öÊêòÆcÌó‚"ÍÇ ¼B(¥ªëhdÛu]á3A`ù¾‰Ç1B*®”Zi ¿z0À¡’saÎ63äqý'Ÿ|A·ÛoµZgggZë­­º.™àÆ[ŠR*5‚`}}Ý<òÇ %‚wïÞmw»Lð““3jaÎCJ©Ls­t-8µœëöÆ?–e™­ Ƙsi&V£}7_›UÍõ®Ð\_RJ-üêƒ;I2K’yU1#n –… În¶‡¦¼,ËʲÌ4솿eø©ZCJmÆx–åˆÐ¸ÑŒ͸јMçBŒˆVhÝëõ€Ô¶ë@9cUQ9¶Ûë,šÍÆ" Pk-z›§Ùd<.Ë¢Ùl­¯­A0¥ÓÙ´Ùle…  këk­VS)Çaž/Ç–Šk­êº„»ž+%€•9B•5“RJ¦Ét‘¦Ô²z½.Æ8 <‹8ŒYÍ ¶7ð¼@< ¤Ö½~×±i¾HÇÃ!`y¹¿Üë"!ZÎEÉD’ó“ŸÍ³¬Ñ ~ëw¿k{þ“½=Îy·×B·E’—ãËËFè×eeòøñSˆ0«F:M¹ëZiž_\γ hÙ6¡TC  @qΩmI-,b1)´–@Æ*­µãQ-cYÄñÛ¶}?Ã`QÊ8«Yíy>Æxcs½ßïžÔ¬Ê²L)Y–ºÕj Áªº†¶mõú]ÎEžå³$ùøãG£‘P²Õj=Û6IË&‚y¶(‹zž•iQøA”eÔheU–%&€˦¶9“¨E‚ÀW’_³F  e ˌׇYQEQU5Ã÷_Ø.ʼæ b`›õµ’œ×ÁYšVeí{¾çEžcD¶6·€†'Ç'÷gÐ(ÏòV³øžE¬v« 4ȳ¼,r×uNŽŽŒ—æööfQd³ù4/Ò¬XDqpqq®¡¬®.Õ¬ä¢jwcÎ Ë‚Y>¯ª¢¬K.d§ÛGÈnõV®Ódº`\SÛ%–eYY””Z®ãt[--5Á6–ä Úß©@ÔËËŠ µ˜Ïâ0p0Š|J1P¼´ÈÓEYUJk0×èèbðÓ_Z™Õ¬³²Ò_Yé.õOŽ0ÄBWgg?øƒïWivr°¸ŒƒhmiõÆöN2' .@…àÕ`t5ÏÓN‡“²¬d«&óT#͸À”FQôâý+«+QjÉâQeYZUE]—˜@BP–¥qCm›Ö5+Š2 ú¬=~dÙ–íØWƒÁÁáíØ@+&X¯Ó)мªÊª*]ÇžN'u]õz]Û¡«ë˽N?Ž¢^·€æLݽ{×ó<ˆÐöΗ Òîu‹,Œf\hJí0Œ\Ï¿?]×Å]û[}ÅYAà ‚9´´Ö"BÐÐ`eY€”ÒI’PjãW_¾UUc!¤%`ŒAˆÇfŒo‹Ì5mÛF®³´´d˜æ³ëº6á¶Qi­“$1>¥³Ù̬)¶¶¶>üðÃ<ÏG£¥ôèðh@‰ø~U³ÙlžL'£a‘gÉtRÕ¬ªÊ¸sãË%”‚`ÒZB€VJIC* Ãp÷æN‘£ÁH™$³4[H)úkKZ«V³Ç«ê/¿øœrÿþƒªfiQæ%ˆríÞã§Ïή&§ƒÝ›/´š½Å<&û{{u^ÚAJ]Ìç“Ðóîܾ5"Û!ÔÑqÃi´¢õ­µ¸ §Ë+ÍË« A>¼Z HƒÝ]ŒÈh0xáÞcì1ͨã,­¬lon¯¯o<Û;hµZ®íb„ó™’* ‚ñt|58¶+¸„J!··¶«¼ Fk+kZiÁÅ“ÇO|Ç‹£¸ßíß¼}S%8 ƳÙlmeM)5M¦Ó©ââòr}} ìzžë»Yž)æóœR's|\›bºA@®ï>´)†ë[ïºaWJ—eIaŒI©Lóí8.~ãÕ»E^Õ5Cˆ@…aÛvÐ>_T´Þxç1Æ’$1Î3fÅm@Ø¥¥¾mÛ­VË8…$Ib\µLF§Ó9>>69(Íf³ªJjQ×q¢(T‚³ºÖ’ ÆljIÁ›ÍF»Õ¼u붬B(µº­¦”œs渴ՌÍÈsL &ÈLšƒÁ@)åº6çÜ ¼¬*£FÔïtË"ÏÓt6›9Ž 1.ªêòr4IµPÓ´­_òp4+‚ÖæòêÍnwh¼÷ôéÕùÅÚòÒæÚêîÆz2~øÁ/#ß[[_â8+r¡™ë¡E6¹\ÄxcgÓv©n·§téº~UPY2Ÿ%ób‘÷º½ÝÛ‹tÁ™PRû^ÐëõQ# ¢óósß÷©EY–!}ß[ÌSßó„eYnmmÙ¶½Ôí×µºªVVVvwwÓ4½±³sóæÍF£áyÎ~°X¤wnßõ}ÿêâj6›m¬¯k >þøãù|Þívl×#U©5ÔH ƒ0ö<Ï4R†¯gÀOSXæë¯r€12Ü5 ù+ü]EñGF™r´m‡ýœN €$ D”UUqÉ‚B*©4±±,ˆ0cÅ L,Çõ&J˲¼À·m{2™pÎûý>!Ïu`+++&–èÙ³gŒ@]\\!<Ï“¢ªÊ„®ð½ (AFƒRg¥×Mgó²,!Žm·Ûùl”¥sŒÔêJ¯ßïQ‚„`”Xþê—㢨<Ç^ê÷ÎÏ/Òtž27#Àx<¶04+ó£“3Ûv³ª–QÇ'š hUBlÅí @ü/C]I÷nÝ®Šy2®/÷,$=ßÍòTk]Ô•T*²Õµ.¶iZÎJÎÖÖVvoݑ޺uçñ—Ï’IB1B\œ^$éC­_üâ}BÑêÊJye2™ÌéÙÙ Õê0&´,lÛ& žçø8àœ# כޯ³iâ9îÚÊêÅé™è;îùÙÙàê !Ôl70Æ^|©Õj>;š'³Ý›››ë_|ÑìõûeQ»¡ „¤‹¬Ýí\ F<§}šUžQ½›ÜÙ5“ýëkf3 ^ƒPBŒ,ÓÈ#„ TAU à×^¾ÃŸ;ò¨¡Ö@Y×€Ð÷=)ežçFBxíŠt­v5à»”cGq§Ó–Rîíí ƒº®[­VUUívÛ°ÆÇ1~cYãØ¯J ”’i`! ”pŠ –¥„4,†<Ë}×u(Å$É„±ºÙŠ———¢(0ÑN‚‹ƒƒÇqÁ„ 0뺴,+jÛe‘Ÿ—E™.R%ã!R”Ll9~­±BÖdž·) 7]TÏž>-й%üîîv:NÆžmû®†!µí¬¬¯ãó‹óÁðÄv(±„éáñé“gQΤÖèÁƒ—»­n:_ŒGS›X‹yvyqq18ÏóÌq<Ï÷Fa-æÙ|>ï´:ŒÕÆß"ÏOêPÁ¤ë¹¦éá53‰:I’¼þÚkqBÂ0™WWWqO§S5`|סýN[+éËÂÐ"# ¥plj!TUUY”Y–A­1DKËK6µÆ“+!y…KKýf+)Š,««ª(³Íõv³†e‘²,͸Óé 'cƹ¼È3ŒÐ,IêºV aœ–Õp:'éx–¦%‹›õí›ÈޏàÑe–¸T6Bke©Ù í¥^;O-BÏÓš|þèɇŸ|¾·8Î÷žž ˆí?{vúþûGƒ«‹'Oö÷Þzë_¸oZd¹cQÁ¦p¶(ÙlšÌ³<Þºs+Ž›Q¥mÇqlŠ1¶÷pUJ«ŠÙ¶‹ ò=ß„—Yþèáælp¨óÊ˯œžÍfó8ŒgEYÔeL§!`ºH/..µÖ¢º®¹˜‹Òd6—Jçy¥Œã†9± Äíº®9/ aøk»ÒZÙ½Öœ~Å_^LfÑÇ9'Ä2a}"üÍ·_ö¼€RGp)¸˜(â0 ŒªºÕjµZ­²,g³™Öº×뙣ˠ´óù|±XE9 &“ñ“'O¦Ói«ÕÇæT¬ëzgg'˲²,Å ¢,ò8Šlµ@! ’’s×¶çÉ|<Îg³ÙlîØ6 ÕjæEžfsBHA`d"bi£Ñ¸ÿÅ?üÃ?˜ÁâììB̧Y^i­”ód ”B´ÛÝ~¿Ï¸@ĘZŽ+4Œ¦ ‚qâºY>ÛÙ^¶±ÜXiõšÞ|2Hg“^·)_ߨ\dճó>~8™,e &ÒÌ„ÎÕÕ4+êv§{~:aœ?üüÑgŸ|vïÞÝï~ç»vóèàYU•×Ђó,ËóùêÊFè‡f#M³fûž¯”ÄVRdù"$$p×p¼òùõO,/&›ëK@«²¬Ö6n¸~üw?yÿÙѹã5¢¸KH0›g¶O“z8Jmê+I¢(RO¦É4™ìïï-fɽ»·Þzëu.ù<{ž‹IÓl6çY®äŒÛ®£•Zæ‚+­\×£Ô]^^™L&Y–))ÏÏωe½úúk€^¯·º¶úèË/•Tkkk„^¯»¿¿ÿòKnîîúžG™N&‹ùâôìôèä¸Ûë+¥¨ã¦iN,ºÈ2Ûq××7…&ªÑh˜ÑÞ±ëºFÁajBHv\ûÚÀö«jƒcŒHžç†U%Äó0yB~ûu]W%«ëZp%„B* Ç©Ymz:×uMÒ‰9Mh`š¦&suuÕ²-¨u]W†žež$‹¼”J·Û3Í\σ¦—2†D†‘aÁày¼’$›Šºæ„j ´Ö ë­ŽÖàZÿñÖËu]WeÍ9\rΆԦ£².IM£ÑøºJßDÖ˜„Ò(ŠÚí¶Ö*[,‹¹ñd3”Vãqpp°X,¤”ï¾ûîÚÚÚ`0‚À"XÖ5ÐJIáy^‘e®ëj)ŒÊvB, tÍÌšRI)Œ`Üs<­¥N§ÓEa„§“Äu›XÝNÛ÷½,ËÊLëç<3Œƒ)¥Ma™b%[!±R\ 1v‡Iv±zž—¦©A/ Ò÷}%Ç1B(Ï+×÷, ›ˆÇqF£Ñ½{÷z½ž™f«ªZ^^>??7u‰ ¶ D™´_ó[‚£@T•Ъ¬+Ó B„)¥®k7[q’L Õ‰R0›Í0Ækk–…«¢à\bŒ£(Š‚ ͳ¼¬lÛv(eà–õò‹÷²,;=¿LÓ¬`…¨ ÙÖÚr%tZÔDòóý½f+ð@'B‡º‚ƒ<yÎãÎÊü3íü{ÿÁŸýùŸÿí{¿¬*qãÆÍ'·vn4›ãÓ£Ùl憑çu€\«î?ø/oþW_<ú*Δæ%f³¤ÓlF‚~oùêj8%WWÃñ4ÿë¿þ¥äÖÝÝû÷_èõ:½þ2W|pqé‡AÍ¡–Úu]Wp­õ˯½Š’ŒR(­mÛÞÚÙŒ·{m¢áæúçÜÜeZ룣£õÍ(Š.†£ M‡ÃqQÕ`Ï¢UUsσð9ý/0è¨á,\Æ!ª”Ôú¹‡ûWûß ¥×'Üõ꘿ÙhM1bü<\΢ŽT@iR[AØòüP*`QÇq}Ïlǃˆh «º´02Sƒ1·,keeåÙ³gfTþùÏ~vvEQE(Y—@=× ˜³—R!$òçëqJÏó,j;Žg»Žj „à\j©YÅÒ4£”F~ˆ¬Ë²( Œ@»Ù²mzvv–$I§Õt¨Í ]úÒýmJ÷~øÃ¿±1pm´Ôiܹ±ùð˧Çû‘Mï¿ñ.ƈRÊSqôìœÕ8+µí¶ú½ÕGO/¾ñηÿáŸþG‹ŒÿÿÓ?·,k}}µ·´"”´,ËI(.a§×â¼þåï?~òùøþÁßÿÞw!¬È?yh»Ô!øæîÎðòJT|g{s¹¿²ÿìB\äUÅêùbñøé~šçÝ~gcs­ÙŒ²ª&”Úž[3fs¾º¶&¤¼ºº*ªòÙ³g‚ñû÷ïk­§£ñ,]\œžmom.mÛ.Ò̳Ñh`[ØìþšÍf·Ûµm[)Åj¡±ö¼ÀóÎ9BàZÂõõ22D?ó(Ÿ/)áâùQd^†¬¾Š¼¶r¸„áwÞ|Ù|džç¬2N˜Xi%”r=§ª*CY4Â1J©Éi2íº®Ñrh­|Ïmı¡/›fÐE³Ùì‹/¾8>>žÏçÆÄ»ªªº®¢ÀG`„DBJSàæÖ¯™ùaì!@˜1Q³ !mYB 0†áéé©IRyúôé³gçËË “¾Eªª9 (-¥d[ædÙ–Å(Å®ë"„Š,ͳ@e‘v¯×ÉóÒè×€FQÔPJÍ’…E±VÒs\)yUUB0ÆX¯Óm6›WEîz¶ñ§´¹¹™$ÉÝ›7N/ó¬¼Næ‹B*½±²´½u«LÙRcE(€Áhžp %¦vVèJÔßùýßzñþ­Ë«âÿßþ !dS‚ üßýæ7¾õν¼÷Þ{ÿóÿò¯žìC$¨G0ÅLˆ¸Ñxéå×?{v¼‘¦9òà‹ÏܾyãÆmÛ ×Yò}ê¸çW««kÓyrvq^× ˆpU×û‡GÃáxmeu}uÕ ü$INÎN}×{éÕWªªÇ[[[5c®+½Àï-õ—V–ó99¹qûÞÑé)“@ÃÒÉtÞëÆZ?o´¿F)–×* £J5Õ!|¿¶a¬º¦ÐH©¯õ®øõ×îcb Ʋ,W@û‡1aŒI-Úöh4²mÛ Í$ ¨ëZ±¼¼ìyÞùùy†UU­¢8$–%•Ja0žŒ›­æëo¼ùÝßûîÍÝN§[dYžå­V|ztìØ4›/XÍ«ºRi1!µ”µe-4ÄÄñ@i^1!-ËF÷º½8|rp0ŸÍ]Ûº±¶z{k+òœV#.Ù‚ø:-yV³l^äÙL”åµä0 ;E®“¤HÓê•WÞ8:>¾{ïN£ììn<üâ£~õóVÜÈóBÌç{ûϺý>Úö© “òéÞ~QVu67·W—ÍF£¬Š²,lÛö}ß Öf3cõº¦ž›M3‚# 4ÀSË®«º*+Œ,›:b‘aa°šŒƒ0 fõ(”à’k¨Ab€ ÕˆßHÆL›fn\ß÷¸;Ë2c±ŒšL'”âšå\ñ¦û¡7MÏ.ÏË÷Þãµ] ží[H‡ŒôË÷_HÓ@˜y‘\+‘-‚ŽçÅÍV#nE ÇuƒñxVT¥ãxý¥^QeŽðD"¡•F[˜:¤,JeÆ\))±,›bH”`®ë³ªÜ?9\])%^¸{GAœl‘fQ³U qÔê\ ‹|÷Ö‹áàgïÿüÍwތµüá`rq6p©{çöí{wû‡ÇÓƒÃýy6Ï‹l}sí­·_ktâxä]WyñàõWëÙüÓÿb·¹²Ü[úäoßÿõ¯=88¡HÙ!ÝêíV¼Š'‹$Of@À3òèËvssyywggucíµ7_»÷ú‹OOößûÕ/ÎÏÏ]€“I%ÅQ»ÝGÊúø£Ïãø|>Ÿ/õ×êš3&¾øüóÁðtu­“åów¿ý+7Q³ªØ¯?úäèôt‘ç—Wã;÷î…ac8„1Öq Á\×@ù¾oYøë5dÚ#ãÐñÕ0ø›X¯º¬ „œIÐH ­$¸æ¦_÷jà+Süî·ÞñœBo&Ƹ’ZJuÍ”0„‰¢PJ-//'Ib4òžç•eU•¥’²*‹º®\Ç £$˜ÜÜÜγâ—?oïñýî-„¨Ǻ±»ø~YæB0‚QYWY–Ba£*òY’ÔEɫʶ,J€E P<<‹‹` ’‚Zµ, ÐRr®¤$ˆ»b^sjÙ­FËvß Y-lÇˋڀ¢~Шˆ¨ÙûðÃêZݾóÂß{Ïqýÿæ¿þ§ß~÷·ï¿x¿®ªÉt2\„aðÒKoî={ÂX½¾±vëæÍî½øú›¯þ›Ÿþ0nº«ÝÞÁÃÇmå ¾8ý_ÿ‡½B{“ýÁ`ÿÜÆôío½ýà­û ”ž,Nt¾óýßÛÜÞ\îvWÛ•VÃEPÕUUUgÓáI %r­Í-¬Í-‘”ªÈ %…`|6UeGa¿×¡%Ó¡”,'{{ó„°(Š4ÍÌ6Z~åëmLl}ß7hûöööl6+ËÒlÅó?>9Z^^Z_[ë·_{õußw4fŒUûöþõ?ÿW?ù¿~\ rY[Gál2‹"ïþËwv_Ün®„íÕð…Wî~Øi4–[í­•¥Ýõõåv; ƒ¸Ý¤5˜%§ƒ‹Ã£ãõ•µ¦mõV›~„±Ðrž$³cLD‘g;V:O¶·7ÂÀ{ëÍ×|ß;99¾ºº‚¶Û½^«³¼²¼·÷ìôâ¼ÓéÆV¿¿´¹µs5‡CÑúúºEíç†6’sΕznj¤§×šæßÓ×^á¯à«0kˆàëò ~ãõà+­Ïuò%cÿ_S×Ò#ÇU…ïûVUW¿ßÓ3c{<± ÑÄØ"¶ƒ‰ãXB²ÌkdŠàOÀ† –€Ä!ŒBBHÎ’ÛŽ=“!¶ñ<<Ïîžî®®êzݺU—Åuo®Jµ¹RÕ§sîýÎ÷“pfh&l¦FÕÒ÷}×uËåòÌà•$‰ëLD(T¦*¥òââ|ÞÎÇΰ?ˆÂÈ›L¡‚ÕJu®ÝrÆƈe±RÙžz“ãao<J‹¥eAÔ´l Œh­R²sc8•±Á‘ar €ar†a*Aˆ3Bà”ÄQH 6˜A)¥˜D)¡„PMOKe€eÛŸ=x8»žçŸ<¹œ¤Pkg÷°×®®^8wîõßÿá.¾ù£茜ç›Ïé;¿Ð¹víê™×V÷Æã¡ãŒ&“ ÆäÕo,ŸêZ6ß:Ø“Yj ³]iGÇÓþöþ\¾:W­Ñ,ëîzîñÄé…ÑÀÐsáÔu Δ͙iÅb©1ß®Î5£Lxîtxä·ë ±F¾¬’4L“å•ÓçWWKEsÐÛüãA/M‚µõµÏßwÆÃœ™[:ÑmTP¡õõuÆáh¬‰˜±3®Vkë_lBã8Æ„.//O\1êA–¥¦iRJ´ûTƒIgHz•V@É$Ñf!í.Ôòý0“Ùèj„q†¯\¾ð•Ðïÿc<Ž…>äë«Ál›0 uIç«Û¦B$"ÅG~!¨TJ…‚I)â(3íAoàŽ'£TЕӧÃQ:“QØbÁ QN0GˆFQL#Æf£Á9cœáT4‘1&$S A$q!o×UF°eY*Ë,Ë2 B˜Ie™J•°\­C„O,BÆÖÖ„”2SB¸ež>Ût=ÿÆïÔ­?¾;8Î/œ´,³Ý¬C ª•âÔ›´;Í7Þyãüj±P à4¸}ûÏ¿ýõï6·öÞÿà½B¹vðâ¨Um½uéJ÷ÔÉùN é¸}»@æê®s´ýlÃëõŒ$}}i…g8Ï- DL¥c£`•µ ªZ¥ÖiÏM†ýéÄýâñ†ˆb…áFø±ˆ›Í湯)M×ô¡ˆe$ÔÖöþþÞR°`à ÞÜÜN¥¼ûé?×ÖÖ‹¥ÒÔ÷·vv»Ë+£ƒƒC„e¬Óé Gc=7—³´š\ÔÚ©03ÎÏ`0["BÍ4i¨Ì쇚˜ÐxÐÁ~ûÛ—Je¯Ò_Œqwâ)õRDA)Õï !ºˆRJÓéÙ4LŽy„žçêŽçœ1Ó0M#©²s¹$ S‡¡?qǦi$@ŽÜI1DÜ%LÒë12¥(ei––ÊEL7 !ËÌe©„ d©¬×ës6‚€3f0ÎÇÉ$ÑS¥e"E"ÆŽ“/æ+Õ*ÆTo4Oœ¨77oÞêõ‡ÿºwO&Ù{ïpóæ­÷ìíüìç¿0 “º°07™Œ”Ó©S(ÙJÉ+—/w—»årÕó‚OïÞßÝ9pÝÀ*ÔëN«9OMÃ*™•…²Õ°$õ›_º~¥»Øí4ç¬w"´ï«¨Ùù¼Áa–EI”` `–*eÞ(V–Ú &5|ÏßxºíÆ>/ä?ôHD±J3¥¤iòbÁÊ布¾7=Ýmä-šÊäpÜïõAFì\Søðá㥥¥ë×ßmµæ¼écâz^益/Ëå cÌBÎ9gÜ4 gâdYªÿàL’ð²aÉ+XÑ1IUM9ië„ܫފ٪%øÚÛ—gáNS[ºp-e !Òþz„^ê5xuÓ4Mß÷ƒ Rf©¢ˆfiÅAúi*(%a™È4Qãz½Ga©RÜy±½¹ùTBUi4W*œ*ì8DTA²·wäMÏó“4u=—0*¤à¦Êç ™L!€JeF£Õj mî Ë2‹8޳4E#ˆPˆ j­:\o’ì›—Þ, ¾Üúî÷¸a ˆ/^¼xýÝOž|yûöŸ~òáO¯¾õÎGw>úä“,,Ì›&S@ŽFý;wþþbwçêÕoålûþýÏþú—¿9cçìÙ¯ÿûñ£/ÿóß8JVμFL2ð´È|0Ý:|^iŸo>ÙÝzfAtþÔÙy³$§sÅšLÆ6òdÒ8I…ˆ ÄFýaDvÎ.Õj=g0òýi1DOw»†Áööwƒ©Ûn7:v¥Ztãz½¾µ¹*U¤* Å`0àÅ ýðû?à–98"‚3¥†Ç#€p«Õj6[aÆ"‰ã!œ$‚P¬uW=FB°Y 5-¢Hk\5<4žfIL«kfI €úlê')UøIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/osgeo_logo.png0000644000000000000000000002531711722777314021423 0ustar rootroot‰PNG  IHDRðrâOËsRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.87;€]*?IDATx^í÷wTG›ççÏØ_æ‡ÙwæÝ™´vΞywâÙ׃#NL6ˆ`rN&cL›Œ$„²PÎåÐR+K­œsÎíýt_ûªèpûv··ÌÕéíºu«žúÖSO®?øÑ?u½9ýEFãœúÖºÔ( D?ðyZJcª¾îk4þhôDÿZŸìQÀ#€î5ø™f¸;>=¤‘^£À«¤€G=4Ѫ?ö¸p«¾#þUNF{—FÆœ\÷Ý£BŸ'EÛ:†«5ÁCÃÙ+£€G=37YØQq:ºòŸÁ‰ŽW6íE¯9<h£ÑXÝ“V~²±¿0¸ìHN“ÿÄÌÈkNhmú¯†4CoÔeäšž¬@ÝþšîŒ9ãì«™’ö–×™žtÿx[T兊ΤéÙ‰‚Ö²cÃU¯3¡µ¹¿ x Г3#Éußf0Á‰Î„šë±Ußðå«™•ö–×–žôœq.·ùYDù©4båhª*=XÔ>gœymi­MüPÀS€fè•Ý©OKöLÍŽñ;teWÊ3Ýþú¾<ÙŠÇ/à~fnzjvjbfbxj¸s´£a°Á0hàß¶‘6¾á{þ:C+Új~ÇW€ˆEþ w ×H$Âô‘V÷yžœ²ùAU_ç^Ü–àóqø‡KƒÞ|3ð÷o¾aþ×ôá›ÃWø$l9ýâT@åÓÜö\°Þ7Þ¸9Ùµá{ŠôØô@˜þ„¾3AûÀx{tÕ…ˆŠ¯o\Ú»~yð[p—½ñ~軫"Wnˆ]ç¿yk‚ÿnŠÝ°*jåûaïý ôß/ ^º>f-à« -ë.™f›xŠ0Z¿‹“4bF|õÕtÃ]™2|ÓПï_²oW `º*ò³ãGïê~ˆ5ľhÍ*î,*ï-¯é«®í¯­é¯®ì­(é*În{oˆ{¢|2ëÄšèÏß ^Â`'lŒÝp.ûLBCüøÌøâ¤¼6jPÀƒ€f¼-!ÈÓ³ó˜Ã‰XÔ~¯À'®>°}´}pr)YY„ைÑCSC£EE÷tw×D¯~;dÙ[AK>{ooÊîÔæ¸5"G(¤uº¨(àA@ÏŒe5=*=Ô;Ö$Òdrf,µþ{€>8î¢Kœž_´e]È=¿.f œdïOÝ—Õš96mR@µŸ×™4̲m¤õIùã-qküŠwúò,H ”CõÇ_4>q'¾trfB×Ur%ÿòê¨Ï–¾±"üý{¥wÑ55•QôS ´[w$ãð{¡ï, zㇼ-%m‘V/0Öôd•®êN›uÏ2i/·=çTÖI„å!ˤîËmËÁ¸ÀSÒº[$X`==;Ù’±2òSÄ€#>|¬[u9£áÁÌÜ”A¦fÆòš ›î©s“V°ä¡ÉÁ˜úhÞÈ{W>ÿ$¤&dÚên¾E{|QP`!†ç_áÇÑbêÞÂŽ‚Ù¹™â¶ç±Õß OvY“cx²;©ö!3à৪¯êhúáwB–c¼_z·o¼w:ÕºXTX0@MÝ/½÷aøhißä}D2;4 ”„éwŽüä^y™8Æö¡ÊಣOcýpŸn¸[GZoÝÀªýnèÛüÒ5fc#¹ÿ"­¯¥ÀšCÿ‡’;Ñ8ñÑÒzÖØ7Ö\zó³M`™FŒ(ÙWß›»Pžíþ‰>ÿ _öBüÍ¢ë“^K}m` NôôÜtpU:gýwÅßöMô‰£™ê®¼XÖk/,ivn:½þndÅ9RkÊó75;‰/†ñ,yëvñMF¸à„Ó:ôN ¸ h\±†˜"VHhFŒ¶˜çäÌhfã̆übC]dj¥Ößoêê›êŸ˜6«’.ºK°Iû–û~ö>ò4®r î  ja)à ‘4ŠºŠ6ÇmÂ}>ç\÷X·õà`Ì¥í1ÑUaÕö†ŽàÑ4PZv,®újbí­ÄÚ(‹D2€ªïˆkè/ìou!á…³1š†Ûˬ–2³°ØñÊÞÜtÏXϱŒ£H«b×wŒ¶Û™ Ç éXã­  ±¥¨-‚Ê÷ò7ˆŸ‡›JöWíjLR0ªúŸŽÑŽÃéá¾”=†zõj-)\4•¾”ÝG ü$⣼vK_ HLø1w(Ó™„$ @Ëÿ½_°éIÑöçgñÈLÍŒ«× ›‡š!QM·Šnâ…Y¤ë¤ [%\´±º¯šÓë˜IÝ ïžì‰«¾LºŠÃ1LöûaÓÒ÷÷ó7’ÐÕ:¤‡©;ìPjU…ŃOZsªõ#ê÷†Ê×iÍ~A ¸èÑ鑳٧ѷ8Ð[‡[”'€9ÝpÉXÍSê¿§[ | ›¬ò±©L"-ƒ¥eqDóÅW_!k†½ Ûï[¼û™î±%ØQRú¼hôŸT³ÍTRSkö‹SÀi@AL`Ÿ>ÿ˜„¨ÒîRG0/è{ùA'f ‹ö#S#Dî[w‚šðòøš«ù-AÀ4²òHEAª<¨ýÙ½¶7›áÓ?üK%§à²ÃøÛ•Ï€Nrîèô(Ù&AenÚͬœ“&ig„ŒÀý¡¶H˜‘iSŸü2;÷ºWóqÐÐã.ìywòNÖÛ¡ôœR÷Ýýšù´†Z´Ÿ˜`{XG0#`ì£Ü£¦aá˜ù‚ÊÞ„y$»ÉW×UÝ“ŽdÜ5R~‰Öh!KàÁI©û–­RÕª S‚àâ®âˆÚp²c®\¹œéZÁÕïKî„T“*Ö>Òæ,nð7‘ð´òé·Å· ¸œÿÍÂë?è¾VÑ’Ñ<ÔìT¼+ûj`b@×­{^ñHÿðVÑ-©OÖåaكȺçd¯½¶¹N+Øú˜u:º>Ê!{®èJ¥aX¦µçËCq—%ç¦gd_d†û?Y6LûáQá–@ÝJ©g6>B#䞀ö¡ ʪSȆ„\DEQØØ=b€—ƒææu8«4¶(ÑÕG3¯‹^ƒU„iÊ)èä˜}4+¿LÚ.ÛG°»;öbÂ’3ZÒfù,òSüðro¦ÔàÀ7K$ØUõÝ®ÑNGô4ýJ„4LÛ¿.fíûaïÊÄrž<_’_|æÅéì¶lü¸j©æ½‹¥Ó€Ž3ÄBDHÖ2ܬ<ÉÎá ’ȳx ƒÉWY'zly‡&»Ò ÷r›(×=R¬<5; g›BZP/û.ÒÐ_^þUdåy˜´MÜsJ´·^Í¿¼o¹PJA„ ü;Ö÷Ï£VÁëUÖøºš‘ß«ž)€®LÌ7‡Æ§Ï?a8¡›u.çLÿDÿbÁ₌Ói@ŸÈ<ƺÞ,¼Žì¡0ô3L(m¢Ì€fÖn£Âñû’ï8:­Ù`ÝÌÝúAn¦”BHÙQL‡È!ö@Cª¹äS´‰`›_ÅY3ÒæøàŽÈ@ßâY¸¾Èø¥¿R­¡¢·ÂÞ<”kûkNgŸ’ ?¨äóÚ·È·ØvÐ`î£ðM@’BêL«y ”*3°oÑŽêîtkQqfGâ6ŠXp;ÄkböÝ!)9‹Åm‘*¨€„=ÙëŠÂ7 Ùg%÷¥îý&ïÒõ‚«—ò.I?„Ø`Áá¬ü ¹ÂºçÌ–t ›b#x+‘›ŸU @c#ú[ëDæq ›ˆÍHá!UÞ.ºg4ðbE‘¡u]:…©NÍŽç4=ÅYmè_`ް>£ Ã?”và뼋Kî–³’@wNL¼'YŸ–ìf‘ñeoÀÈÍÔÑ ë%ùù”#ã Ç€€h2Ê{Ê}ËŸ¬ŽZ%2H0M4ŸEç)$Ä­)†RI‡äCX‡ÝJæ ñ]Ë‚ßBgE>±¹èŠ LöW‘§Œÿ뀩úY8èËy—àdßä_RÞÀîKÄ…M‹üýã6\åúý¦¸ «#?ƒ[ƒ¤ü±’ÓÙb&fÝh³ °¬uŽuZ——™5NSìköoSe/ Ê('µŒÎëë…×Bè騷q^G 6=%ZÊÈÒE'“<Ö?rS¢øÆ5ÄÁŒENO55R„9qxÈ¡]U=PKK' u)‘ –ÝWv1d4Ü·g?ÆiÚ¬AƉy!ç<»ÆŒšu!çØ¢8˜LGeÝeX‚áXÊæ´åØôȧI„úêfŸv‹2Œ˜65bñdÄP6²q°AÍâ%5&Š%(¼¢·\~W SšRÔôiцÊRpY‘=oMØ¢|6ºðñ‘éÙ)Î Ä<Î77g ÉoØËMR– û¦›#—wÐìxŸ„͘9#jÔ_¬?jаmxR‚/"]`æL”l¥@<ª. '5hþ(âCdSˆ‹Ç|Û ª Ny*5¢Q®€3Ú&Ev/íˆADtÆîFl’ÛE·dé™-d–eUå¶ôŒwsôË;øbOs`É" ©Áç¬=‚¤4%¯ÿ@~û'³5Ãᤜo€@?YØYˆ…‘íLÚ±#q;^³#é‡)ÜÃI•Tà²4L¦³/e/{>Ôj;—sNÔ8Ôh¦cã½óS˜ @“Pâœj+SîT=,´Zô°pK†ÉpÖË´ù¡*.èÙÿò%…ý*|ñ{á¶€!I ÁOø½¶'ne!ñh|·1°*ÊvüÕF"ïèŸW³gˆQCâQÈdÄPU…3ÿ§Ž©ó¼6\D-'Œ, £&²óåžY`bZÔ Inû¸”÷µèÖÁŽaóPrª[‹ÆðQªM@d4ÈnaÃY´„ï¡<{Õ\ëÕîkÊÜÉ㤊œhÉËÖOº}+x)9Ôç²Ïâ¾p“÷+Ï× @£ ¡ýàÙÊkÏUè”2_’{Oüøï$Ÿ ‡ø û³ Ú:}2g›Î¨ŒÓŽ6ø‡í\0³¾±&ÔMIpÑÃ{¢f™‹: ¥r¦Ò»˜¯î°œk£?—gsb‘ž‚DLJþö5góe8»¨Ü'÷€$M„£›Á$âŒà“˜YÞ¨<áЪÍ*\-¸ m.§eý@¼Cw/Ú¿)«5˦¡Ó!ÁÕ4pШbk¢VÃDEÑÖúõ€~¦ÛWÚk/IvbfÙ&M®€eùæbîyN=…˜>6ByLõ¥‡_H[(@·BÔ*&o¤Üú¼b´ñÃ)æÑ4Ô´'e·Ü,¹¦ÿ§ò#½ã=Û¶ŠÓ9œ~¨¼G¯>£!¬Nî@¥p¯bâ¦&0ÔÛE7Åc„w- ZÊúb–e7ŠoçOœEˆ‚ıX÷,q<ó˜E{Â×pé™´ƒX´9ú/â6åuäz(ÅÓ @c™ÂßË„ñ€(P xÍçMåo@¢­ïÍQÌ.1r’"®á-³4çÖ¸¦‚VÁUˆ°dÑæí[ü%!~*ÖÕˆ$ ¿‘Ícv>;ñƒÆƒÓ^” Ø{Òó0-jƒˆÓA@g!‰ORY';¦ØóÅÜ o„A]ä ï…½ ^³Z2áµ¼ÄoJ(³eªwB—#TX0´y¢£–/V;b**úÒ–øÍòÝ $ø‰ÔØjœXŒŸ›:hr®(9ŽÒVÐQ ð&Š!I7JXù‰~û¦PÈÁfÅ…Æz[XR©\v9'¸õ!o6ôåZGäù—ìÆ®‚F*;ŠË@²‚Š§æ› ÎŠb.]Q¹]þ3'ÏÎäÖÁCp$l„åc÷JÁeQãDpjlÊË{õ"CEJ¦°”"è3™œmkµ&u¤³Ç2e»`søkÐD¶tæÅ©CéÑD9¹c…óN¶÷¡“‘uKô³µ9Ë šË˜Y06’ü:󼲜"1løFá5qW‹=À¥`EÖ 3<pØ;yg…™ðZ™ sÄèÔˆõÖ.¾e|z OîœÒ% ŠM‹`&J&8íå9Ò-v'QU@}´'¶¡p‹*êãž9Ò¨œ4.lè8Wí-<&Ž’öÈ'…Û²ý†&:í‰ 8l©J³>v-üþdæ 8•žñ­`˜ƒspHLiJêëÔu—:bŽ~†‡ Cž¹ŽGq¨þ„M÷MDÅ¢øÕ@“]$/ÆÊHÊ®u‡`ˆØ ‘?­ô›™µ¥z4Zq£ÎKíÁKÐslFîMÙ#·„æfßÒѧm_Ì9oýÁ´Ï¹/?Œ Ä)!w~½ðª²ï :·ÞÈíÙŠrWˆõbèºûÁ}¢‡"Ãâ>5ËäT' Øž°UAÖ¤ˆh~K°É.]{Œ½‚¢ÐEÖE"EP&cå@D–Ì“„(oTûôæt¸53Gp”ìÍl dGõNÐxÿ¼Ùž3’“Ä*T0r>ÎÚ‘õF +^´4r pˆL»SvZÙñvŒ’D){‹þw&9/E¬HnLRž=`Å·PB¤ÿ¢ù`›“g<ØÈe!Õ¤˜·rÏH†WeƒgÍ–iÓOXMˆøFNQe33ò‰Ø~aå(§94C™…!™­–©>8´“ënSÿ·MÆLÜG0^ÆðÚ0‚B±E³ê8YT}¤É×œŽ °1vͨkòìg²l4×2µèóòÊ!rüÄ•‘ñªØóM˜ÂµÂ«¢ÈÁÛ?»¦ðÕŸÉ> w´¬éˆŠ">+Æ6©áÐ*M¬Õé_ɨB>Fî'òDùCD¡DÙÖAø= ¥2aöKçtñÝ, !Òi@³ù8÷™²b0 )OäA‘ÒG2ˆ½¢ŒD»7 ìÅ”QH€ã›3ˬ*¡ŽŒ´ÀBÆb¬i„sÛ m«ëÍVéŽ:6¯b*F°q ÐèLœ!âŠ: ŒLŸÿ|öYÑJ-õÀêŠNÊSYó°C³è³ªJ@77‰ÂŒùÕ&€òÇ‚ñc¯ä툜´òŸˆšr(ÃÔA“!fØa’µS+Bc'DZãŒe4xGe7†³ˆòÓ¤WuÖ; ë±7>L`d‹ä´½`Óe!‘ð¬¡Ú‡1¤ØÎ +ÿ ­T%D8âŒÄs©òA©ÎN)ÝAú€ Ùl§Ül’PÈ(²j~Gè’d{ XYŠ!L9"C=pÏ' 2»µü¸(rZM@ˆMÉDå—LS*bˆh6Æý4}¸ÓòÇBä ®({a†N-„ØØ9@“¤„‘`Kbƒè…T¨êî "E“ko“åN Ì;±!^Œ±do\Í¿bÓ¡€xƒ±ÙšI#U«©ÔñóüØäõO(U˜®Ô“MkgÒ¼¤û^è»5}6ëºÛèöF ,J„—êÊMCñ a$–%W{#„bÒgxjèzÁ5›€æ&HÌá*±k³V)j—&±+Î5£jÑ/UZåÕ/Šs€FâA‘B¹ñ+2<ÙKEj•S'ÀÙŠÖãƒ:Ö±üMC:¹)ÙBÒ"TƒAk@sµxc±úÉsײÈ#1Ksy—úÇsÚ²EÉ9˜ø8õÓRß]&Z X`™ØvĤZØ*ÌUeçðì‰6¡Pª+}È”Áp„Q\ýG®1Ë{™C¯pÈ¡Að`äL \ª©ïˆ§œ¢…Éõ˜®íͲáï°ªÎÁB2w»‘LXÊE»VA!QXŒ;Ã÷NRŒ=ÙÆÉc!@©¢ÅMÆ}AGžÅJâò°m0±‰kOò.–ä6ì‡ÔæÄ6ë¢×¹m¦ÜÊ’MÃÕº6•BÚ@L2Í俢Ģ•÷0ÎN›o$ Aô¶b䘲¹Ñ0ÒSB~/gšËIåªÞ–ÝèëWüåƒüaú“È¿dß·¹_\~±>´ü"âDeW2ÖhDXJÓ"%›ŠÊý“Äïܱ‚D¡Ó(š¦<í—Cš¬ÍÛ#µDÒ'L}_®S¢¼9+q舠á&\2hÌ!/EVáÀyK.‹x# yY¯ ü•ðqÊ! œXp‘)ƒ$ª¤ À:~|‹iÚ -`ù¢„MYw©­š€Fdb"õİ}Ñm:aŒÆÐ—7 H²Y9H Þçüá›ò.{’ĉzð¶ºY(‰nt‚ƒ}GÒ6™³‹œ ÖUɪšÀü¤Ú›€˜ªÔŸ­èLn,+ëÎÝ¿þðåwJnŽM+sGt8¸»o±*Ù[2ÑEïK&„ß$‚xS¿sŠ©5]Ø<[ˆYB,HLÂAˆpag^qÜ.ÔÇ ÍÂqAÍ–qÃRL?4&Ù{-¸¤Šž )Ä<`"äÜ5¤Ï£Wc?¶á>Ø%,bkÙQØd(™Ç¨H`„mÊ ¹N´ˆµ·4¯`gŠ© tNò"XLoIc§qjñ›#ðÀ&2Óè)ÔõÛðls·B‹ÌÜ!½%–þÇwaŸ!¬M4P’mm3W@%jÝâÐÚÖ5¯Fj °á šTƒN°¿Eq0{l°ÂìÆM!¢ɰî“@‹9¥L0‘U+ÿÎ2“ jS‰„%[8Mº‚Œ„d)蔉©¹c±åTŽ“Å~°®3Fô=×W[@_Ú„¿Ïf“Óø8âx²©'Š ÞbŸãåePìÁ"‰f°8ˆCõ•uÌ¡íõ ;! œ©R#‹:j^L­mÜýãPüÀjQYáp \H=s5ïUÓ†RF„ÅâŒUYÞŽ£Ôf]›±9rp^kTŸ9ƒa;UzT=Öü&V\Phb͹9„cÁZWãP%¸€¿âóWÓ2 F ±´•LUØpn{ö.!”Š®db?¬i-PNV𥂣¤¨5,¤ì¸š÷ª$ §dYOÙ•‚+ïS‚`ð<q†8s5:Ûé Dº"#båUfùDÞ.¾ PM}h"@2[2ÉM|7Dix—E:ÿ:÷ê#ÙöÉr`à­^kÊÆµ{4±uáY¨§fMÀö|Ñãq ‘¿#Ö]° !PÁbX;P«æÅÉ™I•;Öúe é“TLæ ]N„@) j#øÑ'6† ~J‹Î‘Cè“Y3BõÛÌæ*èGR ]¡¾«Ï¸ hÞËYƒÊÌÙê“°qͲÂe©Â„MYr<&UÝé5½YüÞ:¨ÇÎV~ÒúrÞKú-6¾ÆbWç®=÷+¤Àš­LÅ îÓFtÃb_Щ”î$ øÿRêî„—Ÿ´.µÊ®?‰èâdŸZó_3Ї³ÕU*)²*j%‰î 1’Â+8’·¸œÈ* e¹û5/òë4·…4CL$‰“'v(b^)¯ˆRì¦&/ ~AX5nHqu^4>Ž­úÆáÍŸ¯Ó‚:1Wîulé5t 7twŽOÏ:Q}obj¦¤®Ggxi9¾{tb¦gˆ«É6t½Á‚ZÂ46vrã°××@JUê˜t‡3À/CÉg ä‰%ÅÊ:M¦sµÃn_ç™úŽ•ç“–}ûxìÆ«iÏÒëœJ‚T4õ/9½ôh´Êö4›š™½^vñž]"z!m’=¸]e¨™Ë—°{ðA¤NjL2G»;¹‰!þ‰ 2ã'ê½Ð\ÎFûqŽ3³sw¢Ëÿäs¿Óþ…WCK(꯿Ì«RUä’7u Œß~®÷KQ›rÆ#­½£¿Û¶ûŽëѪjf¸À€–^‰°[AÊ×ÇI3uñˆ_sS!Ω¨5< doó@‰=BÉ/þËEÈj¦ªµ)Àå¸ïåþËžðÚ¶ÁÉéYßäšß¬ò{’T3<>]PÓÝÙ?^ÖЛ^ÚŽx0>5Sjè}–V—PÔ ŽçÌCÏàDFY{Ï )ŽKûØ‚æL½±ULÇõÜ\ïЇ@h–¡°¶©æ~\åÿØpè~.ÿ%IÉCËá@›XµqŽ`YbͤÐ[êüÉ>EýYBØ\°ëÉ“ÇÀÇuDpeŒÐˆÎÓs“D´Vu¥zˆ:¿ânÛûÆVœNX9hrO:ìö¿­ñO.iÉoþËÏ|ndünW_"ZÐæo}‚€þŸ­úŸ#+›ûIĽ_õÛ5~:C›Èòýÿ;ùO;Cÿq[Hši£òšþïÈ¿ó þçÝák¿I9û´èÏ×ü—ÿÏ®°OÏ'Õ©*måý=hi(Xû)vFñ})BpSÐ’ºšþRŽèµ7Â)K» ¯eoæ®–î‘:²Qq͸/Ò¸@»EýHmÛÐÿÚ²ó»,;ߤšÿرúëäŽþ±+!¥¾þ釢¾‹.×7ömº–”ýSj«Z.ÿf•ï÷1£Ó'Ÿüó®0CÇPq]ÏÂì›»G‚3ê³Ú÷ijm}ûà?nùèLBbQ [¢ª¥¿¥g„MÂ!PÚÐ×Ô5<1å)o‹gm:Œ³?ˆ­!%NŠûÁI»!f¹tÊîSõ‹ê ¾6DmþJðî\jX·N¹£ÕÏß½”¹†J \¤I>AVã#Üé‹^¯~ðyÕ]øÉãÿ¹9æú÷[ƒ7]K+1ôÎÎÍ¡þ×U¾HÕc“3)ºVÀ}3Bf„)º¶¿Ý¯íûüRòª‹IH _ùüOÐíÈrpüþ©¸7Déê{hóW›žÁïeßêÐØÔÆ+iÿ²;Üeo«JyÐÒ8p„M Râ{­Á4Ö="ˆÎ¡ä׆ØõÄ“5}§ä[¢H!!Y*MT "šž ¢¥ n§ø—G.åy¦;œZ'³á!áÚ\°©rÂZ3‰O’ªÿlÝÓ÷rž$ÖÀ¤G¹mÚôóO_†¾y8ª¼ÉtI)¸üß;B³ÊM¡”pšç9<ò(¡ÆŒ qâI>¬ú_÷FüÑgO$Þ?9XWÛ:8<>õæ‘èÿ<561Ïe8–Ýrݹbk.,Ö+´<2dkBÓãÆ"ÁIà`Ôf!CS‚FÐü•ÔâÖ‰¯'ž‹êÙ„.`"ć0¨ÛÛE]Ahèó«}k¼YßÐ'Î]í>óEo3Û¤;ng‚×ÂZS¤¾áÉÝßgÿ½OpycZão×ø?J¬ž5ÿxµß–ë [f½°m¬•´Céí!äÖs½§ úª-ÏDb !‹0=ŠoB±~˜47Zó!΋ZAD”ߥŠnÕ3J‘c'ù¹NéO} rEìãBŸÐ²c9yšR¿²þ‘’1Bw¼T³!·ªë·ŸûTi²‹ÿûZÿsE§ü ÿa[ð¥`ÝÈøt`zý_n ˆ+0e`ñeÇb’‹[Á}RI+²òðØ<þo6ÒOt^S¦ÞT|‡_Ð)?ÈÅ2¨ÞÚíÍ1@‹cesK9?ä2Q0—A’‰"Bà/©‹TÂüæ .U!gÖ…É¿¶ +ÿÅÆ€ýws«‰ð8±>*Éü”úÞ8õ§ëžþÃÖàßí E°†ûòýñGùÿ¾7u߯…•bŒC¿Dùàt|~M7ë˜^Ç—ºÖôเbšñý¿í`{|r.Ÿç(ï€vgz¤£ç4ùS>ÁM#·;cXtÏ‚9ä`ìÄ#™lê‘T@~00ƒà¢ÚžìŠÎ¶ÞÑŸMÆ·OÄ~|.±½Ï” Žÿ¼ºe0Cߎ‚‘DÚ!Ó3s-Ý#ˆæØFÎMßÌÎáfg`^LžÂ_diÍUAšµˆOó3HmîÑy˜Çïž~£ ý/z-ÍÙì8t×»îù^«G0} C¯º˜ŒX’^æ\YÊWF¨_  _½^ÛáðN+mûô|â†+© E-²XâmÑím+â½ãAÆÀ?22Á¥MÞ{j€ö^i#s ] šöˆ÷R@´÷®62( Ú¢ix/4@{ïÚh#s ] šöˆ÷R@´÷®62( Ú¢ix/4@{ïÚh#s ] šöˆ÷R@´÷®62( Ú¢ix/4@{ïÚh#s ] šöˆ÷R@´÷®62( Ú¢ix/4@{ïÚh#s ] šöˆ÷R@´÷®62( Ú¢ix/4@{ïÚh#s ] šöˆ÷R@´÷®62( Ú¢ix/4@{ïÚh#s ] šöˆ÷R@´÷®62(ðÿÀHÂuZ‰œ*IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_clip02.png0000644000000000000000000002706311722777314021066 0ustar rootroot‰PNG  IHDRÈȈ3ñBtRNSv“Í8 IDATxœí½Ù³e×}ß·æµç3ßùöÿ"úf÷Xðê|yŠ3½d÷‰?hx1&g©%‚ ÐÜ',d¡€ûì ?9¤ñËÈ—ÅØ]Ÿ<Ã_ʯÝã?·÷ÓV÷ö rØŠœ &„oÔ Ñ´^vÆ î“bjøë?8‡sùýO>Ô“…ÅãµàÃö§Š|ë;/(©ÌúÌ4iÐéÚ¨`ÜƉ骪j *á“¿z#"Ý¿ZîËÿô‹“cW¯÷‚Ïœû|ÿËgvBÖ¶€`;Ú ûHHãYÂ[œ{Òã@[ ´/¾øöÇññ¼ÓüÖÝwîoëÇ×÷ÑdåêIɇ;ç“=D:e>˜2+G:€)ò1mÎy4Ê(¥r.0RÏ}þÍ+ãã^~ß:±]?ÿ'Á·~ü÷ðÉÞ$-®K6ª=~5~ëäÐúþxÉ‹tædá¸.€Êˆñ†o #P•‚@X–úÌýgÓôñ„|̈üè{מּöœÍϾÞx,ûÉy§¿œ}ä¿ðõg÷åûË{EGÌGkLK¤*È©pš×òXa‰0ÈY„€M1Æ`¬£×’ß}z1#"?üÑ/}N.à»oþãªzå5}{û™Þïoœû“oD °Ñ¾!;ïàÕj橌ŽÕÜ8ð£/ÏæÂ‡´Ä¶#°dV [±GÎßþÁÈßyùÖ›õ—þÁßü··ÖåWÎýå¥îÚFpª¿vùù…Çìlw?iîËÞþI€4• t£ÑsÂ4 C!ö$r¯2Þ`²&…#Áó׿FþÖw¾ùö}ðãï][jw¯þ×M²õ@ÎÏyã«h\š»Kj°u¦ñ¨åË%@¬Ó]9ò˜Ä'¨rZCétPÎãF˜fÕÊÚÏØÈ?Íþ×»ÿáïýÚÍoµžûÕ_¨®¾øf™»¬N^úÂëâýßìï\ù…$ F[Zu`ÏCØ“€ùI'G(ùÔ*€mÛn—¿Ð:Xùu7ÿøgiäÔ¯“ÛÞÿ^»óê¹Ö+¦Ñ}›ðÖÖW¯Çäï¶Oݼc/ÑkË<ŒHEnp'$Œ#£§L;ȱr ?ý+fÜŸšî{KçþÌŒüi™ï”ÏþøûôÚ;UñQ9jÂKwŠóGðö‡·Á_Üþ=™KõÒP† ƒ¨ºQJ°Ó ‚åÎPƒµ`Í&üÉvXÄQ ª³O“^OuùåϼÏ[‹òúƒ­ç7×öÖNsW÷ªþ’G×nb=ÿ×…ß\àuR–ÆGXbÐVáÊaÅ5Ú1à*R1 ³ZMº?M“¶o; 8l?¦§‰ÈWƒrxùÓ|óÖ.Uѽßk^¹¹–04bí=Z7O/ ¿÷÷S(Þ3æ`F²ZJæ+ ƒÚ)C3¾ô€Oå4űÆy«fÔ¸xógbä«;¢Ð¯>ëh5iõ°uæîä,¦of÷ïuDsë[·EgE– g"úmðI@ à;£ ˜Z×€ªtNEQQ„V·Oe½~ðZËÁ|Îd>{çw·¼š%õîº60aøúIô¿Oœ[z¼výÍ;åÊë$OëÇjzLB½0dbã *µ-!À”I™AhVÙR›9Al|%hx¹rà9ò¥!#ÊéÍ¿þÆ1Zyj°³¦òÞ•6_gQ§yI^.Ò‡÷§ðÔ×Î¥ž[äsXª ²•00‚Œ8€%˜`h,í›HÉ0E ÆÌDËÛº)/%føo¨ë ù¢,Bn4à*X#‰Ûë« ®V†âs+ƒ‡«Q¶°zþL³3åÇýíq­U0Fz>±!œÕЖ s°"\¤µ^^U ¥}þ«Ë÷ÞXzt0aˆ rÈŒBÅÒîîôUÞÜô êìÿì‰úÅP Çc<[5D º„¨­³kÆ 8€Î* „‚¡\sHPÛîþèÂéïo×–&vÀˆ|ɶ…FÈèâw£gÏÞœÆK£åÖ©»Ç‚,ìÃ$B’…ºX…Ž;¢:k,*0âÔ#Å "¬CWqû ¼ `6*´˜gk[ó÷:+»/ÌÈW0¡Z!Xú`\Ý6®ªæ°‡o_JÀÅåí âb?h¸rš1!RPcg•qˆD!ƒØ÷Yn .•.} ³`¿0õÁÜtxGØ83ØÀ ™˜jõñ'fä@è„8l²`þb;hÜ©uª5èúú¥¨ØÝÝV˜”Sž8lŒ -0uÐi £¡!°sì…•ÑJ %9š¸ø&ÚH¦¶Ý&ã]Gwññ}²gssé 19‘ P)Ž ²ð³¯ÖöŸ»½´»\7{EáqÜÂTe¼RŒ¤’‘n€©´Á!3… PJ!n¥Zꪴ —qÌ+‡¥ñ62TUWm}BF¾ ¤TRKìi=—oŠj+¥Æs‰¿_­µ¬J f-‰| rA±Ç©µ` DÀ9-fA çš°RA’o¤§ÚÊ 3vüñìârÕrÎë°Noo.%°Ü¦­­ÝÓ^ûçMåta ò­…œŠÍNÂ…d¤Äjãs µ+å(Ô'9ƒ<* …¨@XwEºsw¾^*ui öâ‘3ê²Æì<÷Y°ûvÕù¼ÀØRC¯åq-ìV¡ÁΈ °PÎ*ÏCÒp‘6ˆc-œ‡¥%HCµ€“‰@ ª¬Ë©‹ñ¡”ÖB'ÊÅÝ™Õ " a¡ÑÎ(/$Ç%“ñÂåW&f8b’îË¿P~ô}´´ã4²º…¢´ ˆ€‚@,0A„ B>AÀ:+ÅŽïƒ*3AMÉñnÅAœKÂƸÙÕÍnäE€‘qik´óÌ\¶9_?Þüôþãýò-œ–_¢¿õ­µgwKXŠ€ƒ’H£4A# 1@!vûF„œ­4u¯+œštð‚Qæ0!ú¥™‹©³qÀ™JèÏ„Qm‡¬ Ž%b%ÙKÓþïÿá[ÛjEAD•é„RVË8qÀ"h„€B^113À`¬J ÑÄøõ0 .ÑHׇa„g¯±Ïn’éæD’RMIàÕèZ@‹‰±@€`dtFâ?›À#r HçÜ>?Ô_Šv+÷m°pÀŽÌ×É¢¿–;7–ùåá^âE1pÖ(@ndÞ$ǰ,$Ç9€“ñý^ 12.¬…íâã*«Ä"Œ9Z[ 5ÛöÙŒ\ŠR €!ûdá|2.×OöÆ­IÞð Ú¤nžî¥o®N PbŒ³Fû~€¬cŒ” ÂSh €Þv— ®hp[©¸ãé ¸t9ÁFˆ":c!¥>9Ó…k¶ÔBX„À9g( Ôé,Ÿ‰Ÿ2§€bplo°:iöþ™XÏuX g3Ë8j ¤ Ѻ40«V.‹õm¡ÊrfK3¿×ôIÂö-b„ˆÕ8z&‰³QBdœƒG•#ù=VëÇï»^«o@Õ«Ù[eÇ4×j‰µyé2«;Š…ˆ6ƒŠ * ˆò²"•€ž<ÞütÔÔcÈ30ŒOÞ¯öSpÚ1H•qÎZh„Í$q¶Ô:1†r¤Ä±_þù¶eúî¦Ì9»‘(ƃEŒ=ToyØ¢V$z.ñ$ˆTUCÔíDæ°¨¤—`EvÚǘɶ¼òÂp=—Öâ|á…z·×ó¶r&€øò$’âñ¡ùwÛÆJ(q©žE¨sÛˆ’J騕Éâ˜?½¥sË\.¥£ÂDh`ŒpcUNä’G.£`<ÜêJ°2(ò‹=¿½Z³Øßy«òÂrÓFœ' < «\žœeºÏ”ZM<Ö! àgw2\èºÖŠ›>#§o(ÍL–;}ÓGMåÁŠÛ8‡…×”R@ ¬,„EtŽªìR—“z’íÓÇú’¸žÃ 2¥’¨$Œ´˜i <“‘.N2†acTüð½ÚòëH dp“„É®o´ù”‡ËH¹ÊÓX”ˆåÔ©ÀÅ)’Q¨¥rDè·¼˜æ>¬“nJ‡‰å¤ÙX*&µm1í1m ¯,µdJ¢Y4Î’Z_˜¤Y¤F!XlVÓ=XU¸€q¡Ñ6Û¼* ) èC®CÄ-·ÐHÏŠÕ ÞЂp£,‚p/Бµ†dóa# A“wßÒÍÉjÊ,fUžfi¡·Æ®l?Yä,a@"±1Ž95&W–õn­®²õõ… HÓÊ-»½®„ ö4µF0€4ÊZŽ5)°ÕÏ7JŠ…ÐçØúÊeÏ ™vIêù8³mÌ[4PFC\ÏÆ8ŠZjÑXÊJrf!±£$9#êÇê»»=Ò Ói AHÈf ⢩«æ*¸³ޱb¹e‚U ¤„V¥ô€HµÁØ–ˆ©f9–ûußsÏ.ÞY”;K€®š"ä€ÝeœÐDÎ’Z'tXjßA3V`Øœ;±ÂÆ…‚Žõ©¬N°jg X€´ V¸”pd0*<‹Œb±*W! ˆœ@iµÆ9h—O“I•vÝ¡‹“À£ÊQŠ0‡IDÌú¡ùÏáhQóó1sKÙÜÚè„…RáeDŠ:Qè‰AÄËÀ‰áa8åÇPB”§Œq'A^5®‡Â©]\ú„—–9e ; ûCÖðy{9R¤s ­…žÕ'†‘_¥ç;Úoîܪ¿üš¸ÑMÓ1Qÿ~ÙêxÕÏG™™ÔEéMi=ÐÈ ‚1ùh.dÎc8EZ¥ç#ª,#Æç4‰IÁ™N3À%0„‡‰o O•`ñ¸RÖŠªª ðä·Š3Ì‘-lwÀ½òáäsõB‡h4Š'#k ‘ÏÔCV‚"« â¼QVZ6Pœ;†J쬕›z@k‡¬kH=¤ˆ©µXdUˆ}Ь›åú;ƒ£r·ÿèâ…Þî•Þ…oÐëÓÉ>UÞZxfüh€évb8¶@Yè8ÔZzO´4´n0’øÌ«P4ð¥ˆXã2DQb Ó$ÐJ#@*VAG‚ɾQ­U’äRÃòf#„M¯QÑýiûW9Š»–Í»lû÷’ð½1nz¼2Êè¾F!ÔRD<+Ê3L´4,$Ä9í8ÌTؼ*Pi ¬ ñ¤«Hå 3 m0ެ„r¡Ik!” €‹†Þ¡ÁºBh²ð½Ÿ67óæ•^»6¹V,ž~ãÍ{ûŠ,fùxnÉï3Ï)]Ð2‘M§1´ÄÄ9÷™åpª!²YC¢ POF“8ޱuÐÞ°ÊÖ)§²€Ih¤Â>?##Ï a/ Õ^ù÷­s—?ï|€£3õ?ß»ýðþþÖ$8}üôú¦ÊXœã8iBi  R ˆ°Æ\Oö` ‚¢ yÓ-É{BÌ`Èß ¡*sh@%­E4S~Ì!4‡bä8º—·×OëÕ8ÿWÿÔÞhŸ“{›då _Ü»×Ý+6ÍíXļÑK]F…p‡™‹Î×@õTBPp)ˆ°­öØWÆ‹8DÓÒ:Jˆ)GóI6U•"Œ|Ïù“UÎ0^ás%:¿rj¸ú©ÕçVü7ÏÃçÃfŸ{ñÖ÷Åü…g$(÷Šø¤Îú-¨³Ê-Ì5D¥-§ÆFû¼LT×;AsÏÈr’ZS×/·ºr9L]Å@Gù0¬öS\ŒåÄ·v˜xìÁÑT=ùiw#ÏO£h€’‡ØUyP j?¹¿äÎOísõõq>’Ûvù¥«§çà œBëmެ…”¸BFÌ:êéÅÎe*ÙûÄÀ3) eÊ7=†°Î'F Ø§ÕTV ¥¨JzïŒü— ›¦äA5îÊùvm÷Ãö¯œÜÿÑÛS|f€ÛƒÝþÃá0NXg¬=®çÚÐ@MUdâÀ‡íTräœBJìLÒQ'/tXëR#\ŽGÒQ©U‰)• he*<GH‡é3O,n=yŽHéJUN·ÍœíÉkï4ÇWë»÷ÿ¥ªÇŽk7™ÀS‹ûYé5”k[–cëÃeVBãaŒÜȽ2ÕÙ3­{Ê®'Eì9ëT¤L™â´U•ñÃH0Ž”–†Bi ñêE dXú KíaõäÿûÉFà†ßfŸïµºÖ‚‹'¿n¿i_jÑ/½Õ“|¸¾‘œÇˆföI{—ÅN;L P?€DyUDId¦`«Jò¼~a˜MeŽˆÐ¨§1ÙWJ”š2ÌDf…bG¸¥å+ã€{òJþÉFùŽøä˜ýðËfíþƒimÛSY5/dFülÿ£·ß[½˜ÉùW?u²½ ú{Xµ"5‡Œ±Ön‡él«†Ezw«ùÆ™Þ)]RŽï†'¹BXD9(óØAJ…ŒJ"5"aŒµv8îmöü8þ_ÁøÜ°gz¾[òæ¼íÑ9t‡ð{“ç_m©½/?‹ÞŠ~Ó5Zÿá{[Æ8t ÊeqÏ]ö½¿÷ÑÃx»Ù¿ôê¼OxU))pUšq% ¯ÔGȥ鲩IýRœ{AðäS&3é´û ãÉ þ/}irgúAå·;¶¹zñ´.B,kl¬<ÐŒ¹Ä„—@q5 \)G£½âvœ¤»ðßyOÞ-W‹ûæG5­p@UG€q+’^w~Ç8Tç^™îlRÔºDkç¼¹Ÿ>Qå wöâ(z.•žñ—ëáÖ›hëñ•äʢ؜žZН\GZ‡wB¥(1ÖY¡žª*9é–£@~¼;`¯ÞéõªùüÆw''í> =(q(ãŽ@l€Jl%ÕÔ(-P% 1ëê<ª=Yå FÎMôOÔÞ§ýg_ 6ß½µÑKÅ­ãÇ>åU:ìþäÑr­N€ÃÄJ‘Õa´E:–ж Y=4ÛMN?Z]-µÝíÖ)aˆ"zÜi«µ«|J¨»©ÔQ0)´Àa‹0òÉ*gH­ÏNM8v÷{µ<›sc=WPoÝÿéû×ñ*¬ÿx»øpqh-ÂΜԃž*'“¬wwþJ4n|ékßì,W{kƒñÝç.ú}X¬_‚ŽFQÀµcgAåK˜Â|:QÂM„E„ʈ AŒÞ;ŒˆLs¥Lûާ^¡“b¯a?ýêú(6¾“¯Àý¬VëþÄGÀ* œày1ƒ‰´™½lˆiëÿf~Pñ£É±¿ôúÝÿV J1‚(¯lP÷ ÕOY¡ËRú°Ä`1ÆÀ‹ š¡ 4CD¾"K`—벿 7‹i¹ŸKHmÒL:àa>¿G°²Ä÷AZJ% „ÀAŒK'S‰õ1õ¨{ë1a7ƒÇ¸n+×z;領»BA¦ õ~Φ2b3[L-Âc`d¢ã»àÉÛNgˆH7£ñà'dô+0öq,“?}çÃ9ÿ6Ô¨^ùM­5Zk« EXƱË2ÎÇ=e7Àžy¡Pý÷»Û@ÞT &AŒÚÒ9¢Ë²T(ËL0$ÎlÅh†M)3Däl9p!X\ÅÌ,ø6?Fûƒ¸)Š¢¹  Í¢ôç'N+ã´ÔSÊ8ÑUAómIMsmjrØN6šÃøW󺵗?£F´"„hõ´°jL_MÆj$:Á€ª3 ¹G@(Ðâ'WQf0rãԄǃů%Nˆâ'èÜòµ½3žì£AÒ¹“{YÐŒýhÈÒ-MÊ$*ÜnÊÍlìLj¹¨SŽO%ëÓ¦Fí¥+þvp*̢̓ ÂíÑ …ô$‹¸1<„!PƬnÖf8«8K¥ñgjúµÅooÈx çÎÚ,€¦p¦£¤qÈÃUi…9¨Š:<ò̸êîìÐïMº;䥦êçÛqÜ{Œ¯uApª³f¨­Cg¦šÂj¼ykkœçÈÃuJ­FÔQ• €èY¼<Ã.àYj¿¨&Œ®eßztaùæm+î#£‰#Ò<ˆhêQBü@)•Ѱ&ƒP—Òåƒâ¤›Äñ\€á}oùv³Ž®SÍ‘nºþR÷8 ’W"Suµtº$ž¢ÚBèSbb«‚öåt†ÛÈlïG°àíÆzôÕE%ÞIæÔû¦žðBËõ½šÏ1´‚ŠbÐyfÆz™q¡«1âúþÍ·Sê¿öÙßû-¿Î>ÿÆû×oqéö¸.Œ¢9Õ¥?€MŒd#RIá Mi@°*§©^³ˆœ%µî\ÈX2×m¼Ò´QµtŒ“Ήú•i¥ƒ9Ÿ´:>Äzb@T÷tYAR#•q½. qn܉º“•֙᭞âöl \^}8ÝØë¤’WªØK3K=è<¥„ Üf, Nk—‘þ·É¸„`ä̇[=´T¥õÕŽvFûëU¤¦µ ¢XÁDzˆ0Ï'z:*6…K]i‡bkXªI~燵ח¥ØŽ =öÃ|%ÆÓ …MGO™.hÀy.´a­4Ñ`^EÅ,»MgJ-]K•HàãrˆÎÛÑ4.]œˆ†ßOíCªKhö˜3²’˜N¡­òédØvº¨wžßr}Ô$˜Æ°7¢/n¤îùÞ½íõ?vqë4Laˆa-t¡5ÞpE 9ež¿D{>Z*Gfzõ6“‘oþªhÝ% çØW>+Њ6¸—R©†„ÀiˆJÌ8´Rø¯Fƒ6¶”$@ìxù©“âñHœKëýQ4¤S¼VŠ•ã-¥¾.Ì4ÈÓ•%ñ ó R^¢J§­–Zéïš°ËF·u2ÉZáÝveO‘Mç±B-¨;£5‹ –šfC·9ÍM¬êuÑ!f!Rà /÷Î 3ÿ*²õ¹Úéú½ÅÍñÆ…8Þõô¸¹¦D ¶|œX%Ú\\œŽg’8Û†ÏPÛ[¸¶·žjÏ_ÊöÅVo0 ¸iXm´7ˆÊòC€«©}îVï⤠zYr~ðpÓ–—î]>=ì¢Å·[ÄŒý+åÀ@ phƒ2q „€Ím=:\w:žô'/¸òîáy”«á ­µo}Çtª¶ÚÚ¤#^Ç^`5äbÚ²ˆ +E^ù·ô7ĺ¨GÓ?u4Þ$MmõÞ³}¼´­ö5ç àIDATwrr™}kࣵ²#YC´r~–u´‘vØô6•hì±Å«í[w÷F‡gä‹“ýKð÷¯[ße'Ît¶Þï#,j± K)„BS” @§B‹ì®ù¸¹%©W”Ìç„ø5ÜD`~¯7Æ÷J“路í6xUp[­<œ˜iÓQ䥎9ÝùôYwgܘIâŒûµ.Vµ+÷\üì§Oî#~b©ì-E­‹†6deI HÓÒQ‚rLí~˜WZç¶v\Maë”üp¹ÝZ‹—[ƒi}®™Or÷X¡\þÙ¹ʳc"« Y¦¯ÕUú‹Ëk7î]x0“ÂwÐ…¬úöä×^ùá-ýôþÝ= ·8ö]‘PN 2’X“¢#áÛ ÒW¯¯ŽdHË^úRgT–ÍXîÎÆ§ƒµ¸órç–AìôòÙ ,ÔÎ&/cÏ: xnMêõ‹½Ç{ëa@+¡¦›7§Wû#޼è3Û–âiÃe‰jièœ!É„̬¥vãHïÖ?öÌ_;T#àʨùëó7VŸw'×w!º_@ݪ„PcZ`—J&G™Ãbc»UTŒ[t)–_?;z¸ï¢>ÂX‡y‰Û ý»ÆÉ¥r+ÈêÙã;'ó–E”¢=ð#­vÈJYÐ%Q9?Á÷g8óVçÿ~áð½ç>üù¾tòAf½SŽ0ÅXÚ5‘­B±€!½3ˆ1?ůM“¹xå£[ÝÏÔ6£kj…ïÅËÞʿİjo ÊÏ›Û;–Õ˜ÌÂU% Ã2ÆjãêÛ‹åÜNçÉ5Æ?dæØßù3sŠï¾½v:?Þ:?;i0BÖ8ZÃÊú¡Úë犵ç¨\Œ+º??Üé÷wéR w£¦'FÎ’¤wíqú(\˜o[HVš cdµrˆ ¢ ]ŒrÀ;ƒaÓ¥Ù7gÕ7û±‹_úà¦÷sMj‚h½ñãÅ¡Äa€£û KuÍc¸2U’4£7ñ¸ð6;{s%y”õZLà4o7ïâÑÃQÔÓˆšCg´CÌ*i†Žg½©£Vª™Ž²™Ï]Ìnä{¶É–@ù²×Øéù•ó"Y' ^­gíÌl©×bk:N½I¯™=[†¦:Ѩ‚ð¦ 3ÅÁñ¢=ê«hYjg}WÒ@„!V+G©Ó(Ë4óè™E¿UŸi™u@#à™ø»7]2èfM»÷Pö)TÒ!žiR MØcNuE¤mÜæ±Iu£‰®Ÿ™û)g/ö¢¹á]»ã¤>¶E0 #B²Î"Æœ©EÖšûÂñýÙî!4ònízû‚õ¥Úži‡€ÐÏûgQˆ á¶R/\­›z­N-~¡=,|ßfï,gÀCÀG2(å¢×ð4£ÀŸ´ò:PŒrë‚FkQ*ìQW¯Í•ýYž¨n”ñ«sfÒžÛ^ÃH8¯‰¢v:V„A'-‰•&êå $ôZÝc2‘é¸áWláä…€{}® "4:I-"(ÎaÈʉÎ!àDV°&­ý‚ÝÁŒÛÉjdü7êïÛxÎðAáy±gà1ÝÙRÔÚòȧzÒKÐŪ:£ûqòþígú'Q¦Ç[ \—»M»c‹þ‚˜ÚöþÖ^èª,Ïx=ë,B2”BDÚEµvXîïäÓ.;ÈêÕýÅ }s¸¶Â*ë½ì4Pd³¬ª¾&Z¯3îú¹wmM%s°ZÞ9¿ÛÁÐw×&í3fÔA‹EšÍ‰%HvOí¸›V[¹Õ£=!kN4‰]N·{÷_7VÒ[ä@*ã/•ú*ÌîlRPV¾•%¥ÄH;Š•´ „Ñ&¾Øtëc8îÑçPÁå6žkÙØÝÞéð`ø¨< pfKÎJõÖ6Qº¸y0¦( Õ›4æ]tñìŠÚ̃žÕýki Hyس‘SÒØÂ9' €‡ Pˆ£»ÚÖühgºðZØds…ƒíÝ•jïéb»a¶Úˆ1½EÏÏÃ(Ú…L§ÔÙŽæÚqÒ‰óqv°í<=ýÓo4ï^ÓÍÌœOŒ²²‚h‰±%–PàôhôâÉÞçÝâ8ë¡<»j‰>èùAV<û¡é©Ü¦½ÖrXF ì?ä Ò4 DÈVÃÁqì¼lò½q0e=˜ÿÝh#bK€µ²Â ¬ÁHs ±®&C:—ÚsÝ·6íËîÆZÛUàXMTœøgƧmt¶Ÿ? ›ËäÐkI Ñ‚SáÐdÔè þäö$’®ÆrïƒOÖÈo¿°tÊ”™’&wÊB§!4!ØdUp"|´<è'Tì̯ÔvЍ5™¹Æ© jmÓ_zqé §‰iMéñúÚ¸-Â$O™L½0\9e‡ÀÀæk¥ùëvàæßýúµ¼ ‹²©P^ê)–±ÃR8…gN®FrxŸØÚ.ÿô%Q…÷ ãSP¿T°eÍ›#S WøöÔ³ÄtAÇômÝó5™œÕÞvùVûÌ®ýwÕuð.¿{µ®´ì”S–N•ƒF Sèãó(Åp÷N¬àÉÏšT[8iåÅ¥øÑO?\¶mó§e®\9ð¸ {ÇO,ɪARÑóÉžâj\«íg`®sÿ7–õ}Q>zž*6¿€Õˆ ê²’M–vÒ¦2]’\Þ¬Þy?éwxìu³gÎ\é2ªÖ™¬võ޹šù‘ªkLzÖ@ÔZ¼ëDóö´šæÔ üzXò5ýç®êi:Õ¼÷sÖ€ΘÒz„Ôq8÷'x‰¥gÆïT'/®¸t\o”ªê2óY!aUæB_õÅ’sÁöZø¹kúy“{\þOO¥è©;ž½ÿ¬ÒÊ%sµ$èÁÂØí|Vl/m|ôB2]©_>É7&Õ`2Aœ«óÇzz:´.¾1˜FukP}[qD}0võ‘ô·óÅv°ÉsúÛO)è©{Ð}tÅ`ž¸ÞnÙ«)êÊùùm*ÿý庬åž×¸x©±=ÚÖÞqγõE¨9–ö˜î&‘vt^H(RQ€u¬Þü~»(âÿäiõ<}WÀÛ—yÈz·r³¸tlü§\!þßpˆßVèßùzÖ‚F»†³©Eòrÿ¦¬Y Q•L‡ñ’ÍypIØPqi ÿ»7ñc$‡ÿ!•ÿªV'i¯¤IHšu…å.rijO÷¼øÅÇë@<õâðÿ‰Oä‹0”°á1WJÈÊ-ñ=›4ö§­9Y²èåô~ëóû´Ío[DíDÚÍMçEÙcs“‰ÅÀÚþ ÷‰ù¿øË¥zû€eÃ#Ž8âˆ#Ž8âˆ#Ž8âˆ#Ž8âˆ#Ž8âˆ#Ž8âˆ#þÿÃÿ  aµ„¨sIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/check.png0000644000000000000000000000200611722777314020332 0ustar rootroot‰PNG  IHDRFÕΨgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€èu0ê`:—o—©™Ô‘IDATxœbüÿÿ?>ðñãG % ÄÒ@Ì‚,÷÷çwÛ‹ç/ôœ¾tƒáÎËw ²b‚ ÄHÈ@\àÜÉcÿ‹'¯b8øG‚ῲ)Ãý§ N_ö0È@Rñ¾];ÿ‹xþgè¹üŸaP`æÃÿÊÿO;ò €H6ìÖ¥sÿeüŠþ3Ì}úŸaÏŸÿ Ÿÿ—ðÈùîØáÿ>|0 &R¼ùçÛ'…ü®ù O,£dE>ý``Û4aNšƒ¡¥ #H @1‘X;'ßßÎmÎÀ`¨ÇÀðóÃÆ% ]¶ü ÞÁ03¾È…ÜĶgëæÿç~00¸00€´ØË&ø„!?/IÙ€bú[‹P¸½yö¨W/(ÿ?Ãô»ÿvíëüç¸Òÿ_Þ¾ô@W @ M XQßùŸ¡l0FÿgXüê¿bpùÿ{×/ýÀ¦ €@^ƆÇöíþ?ñ2ЫÖv ¿€á¶mCO˜ƒ¢†.6õ„7–?¿}X4c Ãw§H.v†ý{rdÞÿ aÁ¥ € þgx|÷惓Gÿÿùã<»'Ï]wRÔ†A]™áÖƒÿÆw}o)I¦¦¿¸  †7/_7´õüç ¬üÏà[û¿½oÊPX€*/Plíçÿ ¾þçjút`׎m„ €ê[»þ3ÄÏúϰô݆oþ«†Vü}÷ê%ïäòÿ ýW¹á߆¢MßZ:ú·““ˆéúãw ÆÀÿñèóß äLB uwr10hk00Ü{üÏôù‘'…éÑ1øÂˆÉ@X2=ºÍÀ ¤¹Y~ê[04Ì`øcë Ì ¿˜ö¬üSj~žK@ô-1“•‘îoÖg7€®Æ;+ƒ07x20ð3б# ©’x…c“¦–Ú<Í¿¯ÿ1¼ÿŒ< ¡ÿþ½Îðþ3ƒÌ•­ UYQ/ˆ5 ˆ‰W¨3XWôÃ…ÓÿØi•…™躣ûJœ•äÔ´ÔI1 €@éð}RTÀA…›Ûÿ1œ½ÌÀðö ÃÞ½ Öï3¤%Fé“bãÇ………™Ïž:ùpŠ]œÏ¾32ê33&1È((Ë*PL @4???Þ: À) ©_¢½ÊIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_clip01.png0000644000000000000000000024676311722777314021077 0ustar rootroot‰PNG  IHDRÈÈ":9É IDATxœL¼Ù“\Ù}&vös÷ÜkC…B£ôÞf¯¤Ø\D‘¢6*¤‘—pÈšð‹ß<žÿ ~q8Ba…­ÎLŒÇ£PŒ¥‘F–(’’ØdsïfïÐ @jˬ̼ëÙNuIõd*oÝ<÷·|¿ïû~€ÿË¿øò<ŸN§½^Ï{ÿöÛoÏçs©UÓIã¬sBˆ1†çsÂ8Ž­µmÛY¾µµ5<8wîœÖ:IBˆRjmm-Š"¥¥”1†1¶Ö !¤”Æ:)µƒ€RÌ# Ð:çœ3œFBÈrÙbÄvï–ËæÊ•ke=Y/ l¶.Ÿ{ê3ÞÞ¹õ“ýôüÚ¥ùaltÿþq1¿ö³—¦Æzéó/ýî7~«®k!T×Ê(IÞ}çÃËW¯}Ÿ,cû‡×®]{ëÝw}ôQçýÅsk?ýá»úÿdz°ÿÑÇïsGã>§°í*« !b¢µn…VJH ‚ƒ^/Kâ²Z$I§ !`<—Õ!8™Le¥µö:ça÷îÜÓÂËV2Æ’$Iòd>Ÿ?žr–$ ¢¨mÛÅbѶ-€ÔK3„àÊÊ8Š"£DQqÌ«ª‚Àº®K’h­]YYãhum¤”pΔRUUu]àœÇqÌ9xï!„ç-!€²\VóŲ³ÄQþÑGÏ(ÃBc¥ñc`­5Jy… ó`„ÖJÊE‘u@£8‰3mm]µÖã$"„1î²,ËðÁ‹an"ÜÐé_Þ…¡~¿?ì¢(òÞcŒC\¶mKáœ#„„Æï=cŒâœÓZ[kÃ5ã8ö"òÖZë´ÖÊ9soç>„È;œg}À|>»sçN?/ÈêjÓÌ—Íô _ù\¯×³ÖR•Rm+Ö×Ö²lüýýDJ™äY’_¹r!rxxL0ë÷m'/\¸xiû²s^vâλUUqÎ'à äÝ{ïß|óÍ7õk_ûõßøÕ?úÃÿýäädcm\×uqk-ð€R±÷^`µrÎh#ó<ÀE¶XœX§•R‚¦iÚ¶uÎã”Râ¶mÛJQD!„óù|Q-B®¯®¯i­¡‡J)¥”µ–1Eüèè0Ë2ýÊÊÊd4ôÞgYvïÞ=)ºµµµñx !<><2ÆL&+¡º®­Õ¡ „ /Âs;;vBBèœ Ñé8G‡³ùIµX,”R³ð^k­µÖ{ï½G3øðM„!佇Î[kó„ŽišÆÄÓuÝêêêr¹<88R¶mË}DXüi`E„1Ö4 Æx0ôûý$Ic”Ò¢(º®ƒRJóþðÆrÙ(©/o_nËêço¼qéêÖæù‹ß8·úïüíáƒÃ(Nfó“ý'mócÔ½}ñ¡gŸ}îÁá´ðîÎî3O_ï÷FŽå+_{衇–ËòOÿãŸìíímž?7wwî ‡ÃõÉÊ 1B;­?øà½û÷Ö&£4K¦C‰¶¥&ƒ^’d„2c\k„Ò"b“°²6!„¬¬Ž‹„€SÞupP+%;¡¥¬– ‹²8áY–$iTw­uÐ{‘ÏóTkmçœ‡Ó ÙEQ>­õÞÞÞÚÚÚíÛwã8õÞsÎÓ$K“T ÎcD)Å:çBuE)ýÂøÐ+ØõÀB´ÖMÓ!z}˜eYQHŒ("¸m[)%€!ÐZ+ÑBçÆ!ˆ(úl×µƒasæœÅ9gµVqC0AáPÚ¥”ZkŒ‘gXY]׃ÁèîÝû]'ëºÆaLŽŽÚ¶}øòC/^ˆc.d«”Ä8ú§õ)À’ÛÏæÁÐ+1Mã¼÷eYrÎ…lã8NâôÞ½ÝN*cŒ1!€4 Ck!FÞ{kµs¶g­÷`„!cŒ0Þ© 1ÆL§S!DY–«««EQìììð8ò@„Bñ0DcNiˆ¤(Š0Æ]×@FEç\Ó4´þ 3´Hï="h­•R¶pFyo˲œLcÖZÆIÛ¶mÓõû}L˜BH?^YyçÝ÷ÓA^×]ž òl°§ö±G‹å eBß/²åbq÷νõ•UgÕlv(¥¦ ÉV~ôñûZê+Wu4,ŒñŸ{ù… ÉfB‰Ê’&`,!!D+f®ëÚ¦ |Lˆœsœó‹güV`t„mÛPi­5ÖÄqÂãˆsnŒ±F/KB°RŠ1Š‚aŒ€wZiÆèp8:ØßŽ&“Õ•ªªõÇÇDzívîÜAÀCç(Á¯¿þFœ¤<úØñt>žŒ7ÎM(ƒ”à;;;uS­L&o¿ýæŸþéŸüÛoþëe9ö¹ëZ‰²Y¬®­BïÞyïݪéîìܭ뻾¶ªU‡H’„Š1ÒZw­ÐÖB€ ÅJILH¿?ÇY–9gC=¤¥èdGã4NÑú8ŽXDcÆèª©¦ÓiœDÀCë¬1FiãœCè”ÐZ§¼wÖk3NkÝu¢®kkl%{{{sç6Ö7VÂ0àl`" !EQdYæ÷SRôS®àœmÛ!ì½PFã8hcö÷Ó$=%½ 5¥\.µ’JKc-„"è<´Æ9 ºN@ˆ¢(Ž"TJ:çd6›LFÂ(Šâ8¶ÞI) £áº§à‚³ˆ hÌj³¾¾N)íõzMÓxïCº„r¥”*Ë’1¦” £%BèôR úGꪵ6‰c!!ˆó¨©jk}’FŒJq–%çÎÿý^=<>ÚØØ¸°±úØ£^¹t‘ctóæ-äuDÐÚxtx¼8·¾~q{EÈò‡?øÑ‡~øìõç¼wßýîw>øàƒEµ|ì‰'òÉÕÕ‰”]Ó¶7>þRºX,Þxýçårž¦QÄðêêD´ † ŒHè œ1XL9¥ÈеâädÑÖÔ:M `ŒqFLTýÞ°ë:Š u¶(2e$£Ä{x||Ü4µÖR)±»woeuU)£­¢Bèœ5ÆZkÆÖc „ àTJk­¡Zë[·n]¹rió‰Ç»®kšŠqŠ1®ªÊ{ˆ(ŠUU…H:ƒÈ§k”µ6 ‰ !„PÃ9½ví çñÞÞ^Ó4”ñÓ§aH ä<†*©½ó„PÊ8€P†)sÎkëµõ#|qs¥mÛ@œý2©¤TšPÈÏÀˆxç1”år0 ðᇮªê *†T{ ¯ƒAø§3þÝ9äœ/–ËÅba­ÍÒ¤ikMY–B!¥„"…dŒ¦i¢´‚ö{½«>Ò6Ýx<áŒqB¯\ºøå/üÒ#W/÷;ßî:¡?™W—º²²ºâ½Ê³øþý{‡ÎyÑC]FÇÓé`8LâD[7ÝÇ7o¼óÞûÆk}G¢kÎÛ8xpccÍ*©”Bxïx%q QR9ï1!œGÆY£ŒÖZ+í½Oâ¸×+‚ŒP’&Ð;ï-€ M"aEŒÑ®kËå²(zÁ­XÖºüôgÜ… ›]ºD)Fæy&„ Lúx_fÅð·~ó·cûí¿:žm¬Ÿ¿wwïÞ½]‚ùSO]o[ñÆëo÷ï¾·\Ö”G?{ýeÕœÛÜrj¥×ÖW¬Ñ›ç7–óiU•#ë´5šQ' g‘uV) ŠâDtÊ:À£¤ßë÷Š<Šâ8bœ3£µR*‰c§MÄy×µió˜z8A !ÐÖ,ó¢è CŒ‰B*1¢$Â.N¦Î[ïsÀëœGQ­u‹ÅâÊ•Ëkk+XÎ X’$Zé@gÒÐ?ŸùSbŒÒÊ9*¢µÖ:°¯sVS–Ë8çÚ¶µÖò8B#LeŒsï€6a–$)&”`š9¢élzïÞ]ÁúÆ*Y[[;<<<>>ìpÓ4u]k­³¢/”<ã!!J©÷>ÏóÁ` µnëf±XPJƒØœ¦i@i!íâ8ü{ æÃ„ä*µ6°,„)eÓ4Œ±¢(Ú¦B Ѷm“gY1J1ãÔ5 0ôwîܽÿ4úÙ'®^8·ÑÖÕ­Ýó›kãÑʲ֓í~ѬŒ?¹uåã[ ú“^¯ÿ_ýÞ›¦½¾öcˆñÕk'kÇ÷wööއcGèÒóÈcÞ»{»Íþnûä“OþèµW>9ÕÔ1 2¨ !1ÆY,…ÀCˆ!O…ŒâðhðIÄ«Ó4vN {$p)€^JYE#äp8Ìó|eeåþÞ^ˆ¸®ë ½ z`Š¢ ÌÀÞxà1F”b´nšêâÅ‹Y-æSçU¯_,—sŒ`>Ÿ[k×ÖÖâ8®ë:Ìì§‚OgÌ0§[k­ÕÕ`ÂB=Ã;ã0Æãñ˜sŽ”xÓ4Q–2ŽBb‡"ŒRF÷F)’ xÛu²í‚øèpŠ_ùìsá¹:çÏÛ¶­€2n;«Ÿ!Œ0ÆXIîF)E0ŒÇã(ŠrBœqªAÞ !$¥yû­w­sÏ>óÔþƒÝ»;w–ËÙ^ùür1/Ë¥1ªÈ{ÀC)TÝ´ÚXJ9&Ô:@)7xo !œRŒ!ÁcèœåŒa„¡4æ”Rf4Š#!ºÉdÜv]–åy^¬¬¬BˆµC Tœ±º—§q¥i–¦y–fœÇSñxU =„PkžeăÐmx%Y–Çã,/Š¢HÓ|¾˜/«ÒzçR·0Æ€„øSÅa¼¾±qõ‘kãѰëüâó{ૺnÚ–`¦­­D˜k Ø(÷¡¼(„BçÜ`8`œŸÛÜô “$’R!0&ã$I„aè…J)C´!„Œ6ÆjŒPSׇ¡’¥qr2;ÑÊ0F­5ÖZÀ|~2N½uO>òtR ¼â±G··.¬­Žöÿî»ß¾þügžùå(É…ò?üÉÏïÜÝÛ}pø£Ÿýt±h¶.nýÑýŸûû—¶žMç÷ïïC@ާ'Q!Œ(ÆŒ‘Í͵ÿügztt°\.€×¯?qvÿÞÝáp=²Ö·B#DY”8›ºå<¶Î2 ó<ÉÒ˜ä5FàyÄ;ÑbJšºL²¬íZ!¥PBrxp”ÄéáÁ"£4DHIÇQEcYšyÆÞ)#³@Œ)ÂÄ;ßumÓV¸®mŒUý~/NãŠ<BÕuí½÷Ýwß~û]ï„H™¦™RšR†1: ,}*ÖšÀG2ʬsJ cµ1Š`LbŒpFW&“^‘7B¤ižÆF#ñ$KòˆÇF)­•èšÁ ÷Õ¯|ùw~ç·6Ï­ŸÌŽñ׿þ @€Çd1_j‹Ò¤5ÖÄq4ŸÏ!„Àù|N(…uB@„–Ë2I³(އ£Ñdeµí:œR‚"ïÀ{ï’$vÎàçóEh££Ñ¨m:!º““ãª\ Ñ1J¼ÎÚ¦j!€'³9%œ¶X,¾ø…/}é‹_úú¯þZµ¨n¾{ãÚå+Õra´|äч:¹Ü~èB\¤+çÖ>ÿË¿²º¹µRÞº»+œáåÏm\غ÷àø¤¬¿ö¿¾º2¾sçÖåK—(eœÆËyE í=£ÛG»üØã£¾ñúëö£E×žÌæ/<÷Â[o¾ÍXÔ¶²íd”d4JªV( áÚØsÆ F ÏãÑx@)6N#ŒŒÑm×Xo=¢ºkð„±Ùtó,K‹»ZÎ"ŠÈl:“²úë««1çÚ<9Åe¹,«r±XZçÃ~ÇU½\V ,Ä!0;™¶]3Oªºa,ŽâD½¾qŽG1¥üÂ…­õõ(N8Œum' ‚Ö™²ªÅYž­œóy’åYÎ)¥„PF0Jw][`&“A]/fÓý4á]»ÜÛ½ÆHT§»²c˜qŽœãúÅô`OËæ…矎"àM×6KüK¿t]c´)—õñl.:0A«£J©S:ÕÚ ÉBŒ1Ö9ˆž2Æ#¼g”Œ Î9­•1ÚÚÐÈ-BHk+I­óÎm´ìÚNtÂ< qžç³ÙŒ2ÿå¿üŸ¿ô¥/_¼¸u´üæO_¿°¹ÙÖeÓUç6ÏÍ'YžXާkç/<8žßødçÒåkYѰ¿qû qñâŶj~úãŸAàѶ6®\ÝÞØ­®öËgÑx4>Ü?´ÆPÂ"ÎöÖ¶„0f ‡ERŠ)%Xç ÆXií¡Ç”J<ðÖ;ëõ{Êyìœï:áœçŒSJ €FëSR!ÎHž¥!)•ÔZjmN™?c Žk @ Œ;€Á`˜$©±6MÒÁ O0£”fYA)ƒ1Æ»Nxï¡Î)%ã$ÏsÆC4Žƨs^J¡¤PJ9k&ã!AÈh…HâhÐ/¬Q7?¹1÷#„ ‡ÀzŠ ÅØ;olÛ*æäñÇ®¼ôâ³iÂŽ÷¾÷ß#ZkBHžçE/ãœj% sAçs–1Š /OHnšš1&¥0FÇq4›MÇÑ1 £SOYÐp`TJHæÁ¦iÂÌ(»@ÌÂ:kmð$¥iºXœÜ»wo6›}ôÑßüæ7™‡A2ÒÚ:D§ëV³8zxû5^¹r #~óæ'¯½ö£,`'+ýû·øÃ_ØÜà”ö{½Ñ¸¿µµº¶±~xxˆˆÎRæÁ˜G4yéùÏfYÆ)kªrv|ôÆo„.ŠÈ{¯´§i*µ•ZÅœi-“8 “¯‚2 €;ãä‚âá=aÖµ*‹‹À¿Bœ38„h–eIÂ9ŽcB¥´išVÈVHk|Ó4ËEå,ˆã˜!LS^UU§÷ïïÝøèfÌà ÆÐ[sxxÈh4•2u]sÎ)¥gŽ¿áá+Š¢º«¼tùÊÃ?ÇÉõë×{½ÞþÁ}HâŲYÌç²i¡EžìîqNÿ§ñ?z`þê¯}2¼G IDATþªkîîèó[[»R2]¹r-‰âí Ûû{‹ãÙÉÉ"KRŒ!¥”fm¼§i-·iÆ1ty‘B€¥êŒUØQ¡1æÔ£„È{!†0 bÆ8øø‚§"ЧsN)Óu]Y–eY†æ"#è0)eÇmÛF” ‡Ã¶nîܹ³±±1™Œ:ÑŒG+«««aô £ÆBÿ©®Œà©vdOñ§² "!溮+Šž³hПÔu}°¿EÑh41(Õ9¨¢(qÞ: ”ò!Ψ”]U•óù|¹\JÕÄqL„R(¥D1Š±Ñ¶ª ÒÐ(Ɖ¶Qš1=`„B0Dá…zÜ©ó•rF†êbŒ)Š"̨]×Úh«”òð8ŠSâ,pc¬óÚ˜élÖëõNóáxt÷þ½²Z@è¯?ñ”­Ú(bˆ`D™óÈ{ÊHÎH>è¯mm_üê׿ú /L§GUU¾ôòó?þÉÏ“dðïüýbvR# Ü>ñÆÍw_ý¼÷£ßùÝß¼~ýR+äk?øY]—G‡Ë/åW‰oßܹ»³·ÿ`×h?®R‚3H!D[-D'•€PŒ8#CcŒsBŠNU¦ 5Î{¸aà‘µV)m­¼ÖÚ:c‰yl­Å:gº®ëº®i+);)µµB¼÷F»“ú„"êŒß:q¹¬66B¸X,$ÃáJ)=S¦!ÄAL‹¢ ¥ÔZ"‡—tfÒ:¥¸¤UÒ–ËÆYxrr²³sw<L=0Z 8D rãɰ_¤zcÜí[;¯ÿâͶ$M2­uk;ïmóùÄÓ³“ãû÷ï¿òâKQšx1¡Rβ$­&å²{÷Ó$/zÉôƒÁ —¥ÑO^Ã<õøõ»G7?¼ùȵG}ä¡Ï~ö)ç—.¯n]Ü|øòµ?øƒ?è 7ÿøÿï²ïýâ½Ûw>QBsÂyNÒ,V¢„Xë‘·!'m[—Ƙ¸iœsB@ô“ÀF†d Ò„H5Ý™›%&><×`S5,Œi©qÆáN¨Ð§³(%ÀåË— Âãñ8XvBUU ‡C!Û8ŠÏ2cΜNÇÚp©F4]Ýi­³,K’„³È¼FÈÎ>þøfhÜeYJi…i3 À„„‡9ÃιºYN&ã'¿öÈ#WƒÁb±ØÙÙÁˆ!gQ¿€ã W”ð8Šz½œp²Xžh# !˜@ʰuÚ:€bœHÕqΠŘÀ,OûªTˆ¹¡þK)9J©$Iœs"ï=AôŒÍG#ˆ öÞÃÑhòâ‹/ާGãñð™gžнóÆÏ=÷ÜñÁ¡÷aê!aQAhrt<VýÑü¤ü÷ÿþ?|ý×~eee%Où|¹|ïÝ·ªR]yøáí͇š¥p †Åùw·¶ò¦;^–³Ù|oc-•e¥…yëw€ÓÆ*Jéd¼¦dÛ4€(ÐÀ¹À]­Ò4"Þ‰J¬ ¥„gyÅ B ” !½yèBB(BÈbE©?½’g]×8甂ZëN4ŸâxDZ5P"e€UÊ(eDãþp8Œ9e„"ëõò¾Q–SÇñÆÆF4x…„ ‰E cÌI!4Öîª4RH…(‰„´ie•R˜ò²>.ë®ëº<ÏŠþÐ:‡R²#سК½£ …ÐΨˆ¡k×®mo_¬ëúèhj´‹óˆ”e1Ìó<Œ{Á’€1^?D(`‚ žUNÎyUU!-ðlÊ*@Å Ú„ ˆã8 Öà;eŒ!ˆ­3ŒL wF Ã/—UUUüñrY]»vík¿6žŒvvn;çV7Ö¯=úHÛvA„ð#æ,<<^”Uõ¯~ûòEˆÕúúúÃW.öò¨ªªÙ¼üwÿöÿyõï~4oN§Ó>øèàðƼüÌïÿþ×ã„Fñh6[àÞ~ûí®ëöw÷›¶ôÞ:o677ãˆ*eŠ"›6M1c,&ˆbœNÓ˜s^-¬C˜À ÙsΕR¡ï„zªõ©5‘³~ÊOB\È¡=”c¬ .x„óðäî~Ûª³£sÎ1L‚¡ª®kÚë[kÓ4-ŠbooouuÕ{Ûï÷ fÖZçÀ™•ªëº`<‘ c¤’ZkÆâ^¯§µ6Æieʲ¾B)¥ f'³¥VVIsÇÉb±hÓ2Ž@ƒ&Bk¬HSî½Í²Ä÷чܺu˃!Ÿé:gx<(ò¼ßë[k–ËÒXGîÚVII0¶ÆXm¼uc¥qB1I“¤ßë„9çRŠ Ï$I’e„ÐYŸ$ɧž ŸeYhü„Ð,Ï#”²^hͲ¼i[Æ9&,Ëóe¹È‹œqvóÖÍû»÷&+“ï~ç;ßþ›¿ùðƒólððÕÇËZHíðƒŸÞ¼yÛy ­­ëåññáO>òØc×öw•ÞùW¿÷ƒ7n{Gó²m«VTU3{òé+êåbmJó7ÿßßÿÅŸÿmÄÓ“ùÌ9[W c”Rªµ1ÖÌËe3A¸%ÎYÑËš¦"”[ì?FŒõ!Œ1AãÊó¼m[„pÛ¶ÀZ„!&€Sñ„sE<J @¿ßÀYkVVÖîîÜ'”¶m!X[™ ¬ÖëçÎm(%•Þ;ï„`mm•ŒhÛFIEQšf§.Óõ,çœÃRJ!„(â<ŠxõûC¥õ;÷Næ ­ÝÉɼnÚ¦m9>œ.«RC)%àŒ1Á0ú†jŒBÔuÙ4UžçI’ kmØÛ – àQEÓéÔ¶’>•†&aɉãÒ4•B%IŒ¦”¾÷Þ{”Ò‡~èÑGÍ‹l±Xܼyóµüèá­Kç6¶v*£³lðÜ Ÿ9·µ}x4—K„ÁêÚ䥗_´ªÛ½{/ÍXš¦ýþ衇¼ò¥/LOÊõÍóƒeu°(›Ý½ùSO^NâŠG}JëéöÃۜǿ÷û¿=;8ùOögù—y<›ŽÆELJ„q‡ÀXï ÒZQJ“$Y”µ³À9ï9 ÎvcJIk”€€îO×ã‚ù˜óÓÕp€T]×Hï=ÆPüKu]¯®­x&ÖjΣ¢È¡“ÉÈjE0´Þ7m«:•%ŒSÌ8+ë…1Á@’3üN)…П)Ðسí˜0 „i‚©ÖÚ/„ÀŠpÖ:=DŽ„ d˜9ç¬÷xF)B¨ó!pùò¥8æMS!Jž}þ¹Ÿÿâ8MðoýÚW‹ùl6ë:¡¥nÛF)…rÞ!ŒÃ:Q˜n‘õz½^¯×ï÷ƒs&p3Ƙ"ÏÛ>L×uËE½µVJ¶G¬µE1Fµ6q”hmã8î:¡”:þþü™ñŸZý;ÑI­ëºÑÖ)c൵Öúù\„¥6Œáh4lÛÖzpnó|רÉ$Y[[-8§ÞëkoÅ9»ruûd~¼±±6Ÿíß¿7qÞûõ¯ÿ¯ƒÃÙÖŇ~åk_OøÓßúÖ·æ'úÁþýѰûöôÆß~é¥êÚÃWaE‘Æ«£¼ŸWM=}ÿý»wUqµm]7 %»µÕñæúZž%B'sÀ¯µ•R !¥T„Ιµ¶MEÆ’„°À³W]Û4µ–1rJ¡âÓçøtÓ%LòÞÛº.Ó4âØ{R—· .—çÏo1F(¢ƒ%eià•<¢Ø!I0#…<)e–eIaŒ=ÐJ)¥í©=Æ;etYU­è FÖ;ÑÔBÈ4M @«ŒÔCYˆ‘ƒ„R@ s:ƃ~/¤REßÿþ÷¥”„üÂõ'Û¶£„öûý4M•ҋŲ,—Ú¨®ëÂîržç¡÷u]'„¾Ê¦iªª:£XÂ@äš@½c³,[.—Æ„pà‘c"ã,çÌ ”6Æ8ç1¢ 0Ez’8‰ã¨(ò••Õ“““ˆEËYÕ uçîÝ8ɯ=úÈôä䯿õ×ÇGÓ­í Æ¨®kpëk+Yž•UÕ4e<É’Ñd„)'M+ŠÞð/þâ[[[W>sýE­ìÞîƒ?û³ÿô'ÿñ?lo_xô‰'>xÿãïÿðµ{»»«këW¹6F++”ÒñÊèÜæf¯ÈF£¡4‰c‚I×JÆx˜Q”ÒeUÖue­"~ªÊ1€cÌ}F)­NÝaU@1.ËÒ€¦·€M!ÀK)›ºrÎyÖëõ¢ˆC,:˜2’eY’ÄB|x”QJÂA KÈ¥TÛÖZkmTc]ÛˆÙlÞ¶‚`æ „ecdöÞ‚0ñÀ9¨·€Æ(ó8o½÷Àûg®?³¹¹étÎYï^}õUÎ9£”hm“$a”z¦ÓÙÁÁÁrY*e¼;eDú+³+h­Ãb8…ð?5„BuVíÛ¶…k­µÖyž[ëÃv¡÷žæ€ÏòYK)«ª !"„ ”Ú¶Å}Æ !(I’¦iúy/Ï—¶¶?¹ýׄñG”$QÛ¶Bˆ$‰CÿŠ¢B,„°FA࢘åEÚ/zaßFJiŒgŒPšÆqs®-Z!‚$aó (ƒÁ¹I)öÞ YSJ!r!ù…Ôm#¥””RF‰ P…”ãSŠ@‡C„;!ÑJÄÎI%‹hÇ«««Zë4Ë꺜-–a)µë:üÕ¯|>Ï2JiY-ïÝ»p¸o´‰’Ø£µ„PÊ„óùÜŸgÅññ´k…1–FµÖ !Û¶ÓFIÙó„Ä9O  €ZigˆP‚0ÒZ;ïóÿÅ·–ÏœO²¸V»wïþýû+'°Êb‚ˆ1º¨ª¼Ê‡Ãaž§ÂR<’ˆÛSÊOž<é,^X8”çpÈoF­uU%ƒcJc„]QL”’a-.ƒúÚÃ-óZ­ÉY¬”q H/Ã0œL&JJ¥”§Y„!WÊæf¦ƒ“q1™L¢ÍZggsÿö­»aƒ|íj%ϽðÊÖöîîÞ ^ëœ9óD­Þº¿ºrèp«×-PEQ=x¸~þ©K™Ùª”Réáp4;;P¶»³E¨µ6þ…§Ö·¶O=zëöÝÿó_þ kÁ×í·ÿËßÿo>\ÿÎw¾óÓŸþ¸»OA[Ùý{·:íæéÓ'‹,½uýZže­V‹b¤ýM§lY–•(¬µÔb¯jÔkÐYèDˆ D@”r?;õÓ ÎC„ g0¸‘'@ã¡Âáp¸µµõî»ïv»ªÙ]y°¸Ÿ={öìÙ³KÇŽò(¥“µõÕ©v;ËÒ0ˆ:ŽƒHီÕjEYV¢¢Ð¦ÂŒò€J£¥”eadq\ƒ£´Ö!§õzb¬vÎ@è(%"J1%„Re„¡…@k[É¢ÑnAˆ•±Æ•«·ïÜÕÊ”EœBàW_þ¬Ö:/² g=( Öj £$M³Í-ÐÍ·Ò4ë÷ûFcEQ‡AÀ“$îLµ¦¦:­V}}smjª3==ÍYˆ1ƒk­‹¢tÀ"„¦¦:KG[­&BÀ9ïÒ¡Æ:k#lí¾¦ÓîDQœg¥ÖúÒÅKo¼ñÁt0ìK«X=vòÉ —®ßº37?bùtR«}xå£k7¯ýÎï~äœÙëî_½qýðÒÑá( ðÞhôûƒf«UTÕêÃO÷F£Þ ž‡?øÛïMÆcl«Õ8~ô¨ÒR”Å;wÖÖV;í6¥d<™(eâ¸.•)«Ü÷.#œµÖ¢(.Š¼È %Ì9瀫„PZGq<=5U¯×1‚ƘAh­ƒà`±!ò&Ò ”’kÍìÜ çÌÚü+_ù2€e–¥÷WÖ×7¤YŠL’¸Ón7 ­¥u¨´vÎQÂ1AEYRê­x ‚1B ¡¦UåIqc„1æŒrΪ¢Pª’RXk¼j!ˆ²b„y8Ú¨£Ç޵§:333„ÍÍ­?þ¤^«I¥0ÂZküÆë/ !¤[[[µ$ñ†ˆz½6™¤eQ¡f£Ñ$IjyVAçE’Dõz2L)‰ã(I½ý½ à ²¨Ò´˜¤“A¸¿ßÅ7›õÅÅ…ÎT›Rb­6ÆJ¥)a˜RÎÎz$ À7ëMÆø`0ÐJ_ºxñôéÓ›[›ïpYj³°xøü…§)Æ“ìso½Y«×þÎ/þã÷þc^éYHqYUÊÚé™Y¡LYÊ'ΧÙÛïübfnîÐáCÆZãÜ~·[«Õ‹²ŽÆKKKÎôÅ‹kqrõãOîܸùðÁƒO?¾2?7+¥(³I½—yF¡_õ[£'“±µnfv®JTJ*ñh91D£0ˆõÆd4œLÆ©·Ï)e„Z+Ji³ÙlÔ€"Ͻcì»<¿[Äy#Óc§ç©åSçÎ{òÉ'_~ùå²*Ã0¢ØÝß¼µuãÆ'ý~×YÓnµææf9J-Ê ! †ÆÚF½†" „&qÛY<Œ»Ý®ï9¢8pVeŽ J(%³ÀY CÂY猳ŒQÌÙÅ‹ =mîììÜ»wovff0„A`!Ä_úÂëJ)\·Ûm5š”Ò4M)e£ÁH*cê÷GJiÎCÿΦgfff§‚# X€ EÚéé©áp¨”Y˜_ŒÂ¨ßEÙl6p³³³ívKJ‘¦,!Ä—çãA­VçœADAÔj5YI)Õ`0¤„]ºxiféˆÕÖöÎÖöþx’3Qtâ䩤žÜ¸}óêõOÿÑÿáÂáù7¯ï÷ºWoÜ€„ÄIãöûW>þäÂ…‹Û{»?øÑü}âä²Vº,«Ã‡–®~rõ/¿õ(¦!Ï?y¦»×ûŸÿéÿôþ{ïìílû½'ΜAÐAàfg¦‡ÃþÌôôT§b¸°8O(Y]}¨´=¸Åíb@ã(Œ(eBÈ^¯?Œ„Æ8)¥g¨ÄqR¯7Fi–Ãñdâõ œ=€‚`Œ‰±Æ7ÚÂÑxÔív1ÆëëëI-9sæÌ›o¾ùê«/NM'½Þþýû[wnߺòу~Ï9P–ež—cŒ‰”RiÍ·hm Â3Œ)£aw¸·×ív÷ü%H RJ•UYKcµÕÂÆ„j¤AA oçl»ÝvÎ5ÍÙ™¹ZRO’¤Ñl„AXUe»ÝŠã€ƒUDPi%„â<â³ÖɪRJ\<¢Çž ÒÝÙY[[¿|ù#€‚Á(ë÷†< ž8w.Ͳ^ïøÉco¾õV·»¿³·—ÔëE!¦gæïÞyðÁW>ùäc¡d!*ÁÚúú7¿ý-JĘQ677ÿÎ;ïþÕ_ýÕ{ï½ÿÃïÿàø±åÞyÿÝŸýÔJ©•*²´Çùd\Yž§yšEI|èÐÂüü|Ð/‹Ê©„B>žáA ÂŒñ€Jê,+Æã´Ì+/¤v8`‚~Çj-ËRT•RŠ p«­ö„_k­eœy*l­VËò|oo¯ªªëׯJúý~Y–NçÔòò±cÇjµ`°¿·ãÆúÛo¿wõêGÃá˜sž$5Æ€8ËòÑhœç¥Jk;gÛ[{ë;ãñH)‘Î(-³„ Ή¥ÖBèÍÃÖZp‘åArÎ1!•q’,Ÿ9Ýét‡W¯^ÝÙÙIâÄ[š…Ðø­Ï¿âœC‡CQVEQÄqÌXP•Öv4SÊ£( †Jé­­Í¥¥¥( )£ €³Ni£´2aÖj ˜™™K’Z¿ß³Îà°AÀâ8Di­´6Qʬ3B«5@]†!Ç B8à˜ššS`H§5;èõkµÚÂü\rLÑù 窪x°²òpuuueõέûq˜š_ºpþ©ÝÝ«W¯…QtèðáýýÞ~ø#)ÅʽûÀ¹—_~ns}ûÊÇ'Ž IDATGW–O¹òá•[7oF “Eºúà>`fv&ŠgÝÎÎöòéÓ½nw}c½ÕjyÃLo0TÚ&q¢”BzI Ƙ`L)匕¥(ŠÒ9€ ‚QÊH# Ã< FÀ:àHV˜äg„DÖmµ2!8™Lü"aä¥/ι4ËVWWïÞ½ÛívçG}úé§_~饋O=5=Ådww4öBœJ)¥ÍÎöîp0L'é~w8gƒþèÁƒ‡e^çÎ9£c †€sbµ¢ôt VÚ뜣ˆÀñC-ÌÌÎÕ )å7VW×€„ B8Ë ü¹×^pÎAƒA:™!æææ¢(^˜[€­®®yVš¦SSSI/--!£ó€FQÅ<Xðz½‰Ã( "Œ gŒRj­ŒFƒáp!¤”h­p<jµºƒÞa¡£0L’„lŒiÖ›ív{aaÑ9NÒ²¬jµú½»8«ÍO/ô{½S§N¶ÛMJà~w'à, ùñãÇ’(ÙÛÝ¿üÞ‡×>¹ð¸»ß]Û\Ûëî¿øÒK‚{wïò0xý•WFßþæ7÷÷ûK‡GAøê+¯ÎNM—yqüÈ-#HK±°8gµÚÛÛ!…QÐï÷[í¶¿¦1Á„ñd¯%õ,ËÓ4{,¦õà(Œ‹¢ÐÚr„AèMéq²€ÆIèYÀ:çœVÊóª ¡œQ¯žx—r–åqyŸúÎîNQÈtà:täÈkíÍ[·nܸ1)¡SÎ3Ï<}éÒÓΩç@-©ööºÛÛÛB¨²”»{ûE.¬“qF Æ3F8§”„„Ö÷ƒZk¯6 |Q‹ n5š¼*Ã(Jõ“˧xAð“ŸüäòåËišÕëuQUB£uQ”øõWŸ‡J)‚ ˜›=~üx’$á²’ƒá¸,e%¤s€ 1œ_˜kw:I=£À8U‰ÒFA­^3ÊRÊ67·ZÍ6!Ô9PyUUY–ÆqÜl6Ã{Õ ¥HµÀù§- CB±‡¿Y: Ãè3ŸùìÜìÜþÞþÎή֠6»{½¢È¡3‹ó3ÍV}ÐÛÿàý÷dUÎÏνúâËÏ?û‚SîîÛ{[{J+!å(;ã>ùä“ñxxþÂyNéó/<—§“+W®Ü½s—3~é© »ÛÛ—ß»Üi5ö·ÖoݼöÌÓ—¤ƒ~¿Óé$µÄA«ŒеÚmƘRh†µÎ ~´6ä4B¨ßÆ@4™LšÍVUUFkÆØÉ“'­ÕB•œó0Œ¡EUL²ÔhÃy€0µZI!„¨¤Rr4B­u”²0Š¡„ÐÉ$­Õêá©Ît«ÕAEq–N6Ö×77·¬µ'Ož–ºðĹù™éO>ù¸»»…Ág?óìòò©W^~¹×í~ðÞûçΞí÷vÆŠíM,al0@gSÓSÖ¡clGëëëS­­w()*aŒ x`­!sÎ:í–_ò!“ZQèá}ZkÄbD!)•¶J eŒ²Ñp䉒ScŒ×k@Dò<·0Ƣ鲓ñ¸Ýn¶-瀔 a\Åp8°Ö&Ib‹£h8Z¥”\þ°(ò$0„Ë˧Œ‘e‘qF'é¨Ù¬CkR„Pk­³€QJ cŒy¯ufskóáÚãÌXóþå„ó ‡”²½þ€QfŒ†B(âÑEÖYJ)EØ‹!­µFcÚl6‹GÄç\DFƒRŒ0„ЊÂ0 C bž—Üï÷9 ý%m­õ–:¯Ê2ú@ÖÈB&pÈY«ŒQF)1¥Î{2 ¡ãQúÞ{ïínõq‹‹Kss yZMÏMÿÒ7~i°ÓŒжÚ4Ë·wv–O-ÿ×ÿÕïù+_ž™rÀý«ó}ôáGQìlotww¤(··6¬R×®^ê´æ)‚YžÝºucåÞýgŸ½8=Ûúè£Ë‹‡òªHêumuGiž5Ív§Ój¶!BEQÈJ”¥LÓT)ÃY€+ËÒ›op•(à  ‡a0==•$¡B%a–å”ùÒ³,ÊÂ:‡†в¬ÊÊ:Ç=€Ï*“Nò8N‚ ,ŠróÊ+/½÷λï_~»’y¡JÐ4ÏÖ7×,p‚ñdÔhµ…—~ÅE‘PÆ«õÖð±Û˜L4©ª¢V£8Hj¹ÿ•«ªÀ=¶ºû…©W_=fíùzÓﵪR „9U%Ó4"‡1uÎíï÷ü±W¯7;íi!„ÑXÄAYæþ¶a“RJUmïlv¦fŠ¢•ª*¹³³¥”™žšíw÷8%”âÊš¤@d°q•%÷pJk5ãØÄX ¥\]]í ö8“zMJÙ §xݸqƒ1æ#H’$)³Â+ÀJQ/Ó¦ cŒ¡uv„ÎZC‹â€q„쑤*¥¬z½rßÒÀãù¢(ÒZ2Fò»üO뤹uëV·7X>óDYéÕÕ‡iY½þúë KGêíÖîööOþîï¬1_|óóKG<\y°½¹2þõ_þ•åÓ'âýðG»Ýýßüµ_ÿðÃËŸ~úéÞÞν»ü©Ï~vùôÉýÝ÷&Y÷É çfçg pÝn—aŠ1®7›Íf!B(÷¶*¥L‘eÃ^𦩂ÿÒ_~ç/oß½7=?I­V;{ö웟%Ï-Æ( ëU%~êw¿ñ·Þz3IÂÿýÿøçZFɰ?ØÛÛ7ÖB·wö>øèCLÙáCG¢Z1ÒF3Bƒ€+!²,£˜†c%«™™Îh4ŒÂ Y†¯¿ö Á8àÜ›ç•* ¥¼,JŒ°5fºÓU…!–B2Â’( !¬uJi!¤µ®TUT‹kZE„eD¸Ùj=yá|gzÊhÙé´‹]Í÷”ï“ ‡”0 µZ]KÍ_}°¾ºº:77¿³»3 „•Œ±öTkvqvw÷ã>¼ðü 7oÝøÅÏÞl6_xîÅ••?ùÑÏþ·öÏÿîw󯵵U)‹/~áÍå‡ÿ‡ÿîf;û{;«+ÖW×"_:Þj´1Ä_ýÚWÏ=ùäÓŸyfnqîáÆ:‹Ù©å“û{{{{{õz«ÝéìuûRën·»·¿ìø _ý _9`ŒƵ›%„µ* ­E«Yo5ê­VÓgÆxÈ€ÖÆ/ÄœŒRaE~Üõ˜îä%ðUUeYÎyÐjµãÒ¨F³)•tÀÊ¢8ò\†,Ë¢(âŒ`•Q„Q8ó*׿à»îkëœÛÝÙ•Rjm­µÎ8à}&Ž¢Iš}øÑ‡ÍVëùgŸÏÆâßÿÉŸÞ¹sçþáüõú›ßùÍß¾qýÆ÷¿÷·vûâùó_ÿµ¯~éËŸ¯ÊÉ…§N=÷üÅ_¼óóRˆ¼*Y^6[Âèó/¾ðÚo¼ñå/ %>¾qõ_üÛÝ›ô·»ûO^8ÿ¥¯|¥'išFIm8onlŸ9{¦33ýØ>‰! 8(Gb„ƒ€K!Œ±0âõzÒlÖ)#Æ(ç¬Ïh F(¥Œç„Þ[ìÝþa=°aYëý#SSSιÎù3—.íw÷Ãç‹T•ðÙh9çF£QQdŒbÎ)çt}ýáxDîÐáÃiš6š­ñdüÍo}ûÞý{O]ºH¹uãA@ÃßúßøÇô‡„`ÌÉêÝ{·oÞxõ•W—Oï´ë/¿ücŠV3Üßßxïò;4Œ “wßssëöÝ{¯~î /<]¤ùÒÙcR›¿øËoJ\½umjvöø‰ã£ÁðÁÊÊë·nß¹c-xâÜ9Êx­V´á׌±Àã U¢"0Š1r­Vs✒R !p„`Æ(§ ¤mIà g”Â(ÑJ:k!pœ1Œ ’ÂYpF Ž£ð3Ï>ó«_ÿº±f4÷zÝÉ$5Ê$q !ØÛÛ ­ÊRV•³6NbBðÂâ\››[Á8Žã8"i­Ë²HÓôÆõë{{{EQ "B PkÍ8E*%FQb‚¥„’(Ž)£ÆZk€P[É*+& DH£Ñ€4›,/ÃñdœÇ“,ËE%qxykñ믽ðØæå{ï)%˜ø•”RˆJJé±`Ýn×o›Íf«Õ‚ÐW!âWfRJ%¤‡oû“Ï×(Œ1!„wœ÷Ý^¿§•ÞÛÛãŒu»Ý8L0Æв,+Ñlµ €Rª<˶·wË´zúÒ¥W^yéÈ‘…?¸L!¸òч\~¯*ò"Ÿ\¿þI™O†£ýv»¡š[œµPÔëuçÜñã'X,Ÿ:²`8Aˆnݹ}õæ[·oÿáýÁÖÆÖ_û/e%²²ˆ¢xáÐb³Ùއ”R`”ÒhEf„"¡s8"pJËf³î€ž†€§’‚18­% ª„ÈOs|<ŒïÇC=ç¢Ýn·ÛmˆÜû—/omoçy c”&qÍπʢÀVe¡J’héÈ¡£G—‚ûÝ~œÔ“¸† ÖRI%œ³ãF½^¯×“¤ÆuÖJ¡´6óðcŒ´QXŒ¡±Ês:ý]•²ª*)µRJ£µ›?d4ÂL&9¸Ûíãò¼¬*¡”ô“Î0 Â0ˆÃñ ¯£G‘$žðá½ýapph ¿p—ÒßF£¡µÂƒŽº,KïYå,¸ƒÎ„ËAP¯Õ<»œs^…¯¨´Ö{ÝÝý½]Q Q ä€Õ¦ž4 „kkëOž?¿²ò`wowzzfn~~åÁƒªœð§/=ÕhD£Ñþý{·v¶×ß}çç¸Ýõ×®®¯=´Nk-0§N–Æ*íÆ£QÇÍF3à¬Ì‹«×®>\_¿zõÓ8‰?ûÜg#ÇNÿì³Ïüü'?]½ÿØ‘£až&Í=æH)­v^wë_²Çe»ÝÒZ+-‚ ð¢¿Ë1BÏsrŒù¢s¾¹¹éœKÓ”Rº½µå›&)Åч­µe™y†'â­“$ÙÛÞyø`õÒ3OcJ!§O/Ÿ[> ±üôêå<‰*;rôp»EŒ|ã×óOþäOww†èÐü¡ë×>× ¡acjŽ@\äYÈ‚O?¾R¤EUTRêÅCKGŽybù¢dcmå/¾ý­_ýÖÿ·|òTHÙÚÚÃk×®;ylié(å¤ÙlæyúˆF ÂÞ¬³Ö*-•‘B-¥¸(Œ6;¨”äœBˆ•ÖbßsÎÂ0$˜zñ–¯¾Á#ÞŸ?´<#MSÏÓFÌÐRJ)'#‡/†ý­!Âí¢È ²AÀž|òÜîÞb ¡µhm•–cJ…;`WÛÇsoQ)­•VÎZë‰/X|ø/Nêu­­ÖZJm´(µ0pÈ„²k«ûι;wî!Œuµ$ c xÀjµÚL§Íš¦éhÔǤÓét»Ý²,kµš7"ûÈÂéÎŒoߢ(j6;UU¥©ï™?~„“É{–°>+c¹óÌÙ“çÏ-We6è•F+‰8¡Íäôµ«7ÓOœ==Œêµv­ÖÌDzyU2š(eÊÑè~ ÚXÛìîv›ÍvÌYHàÝW­ÖÒÜìóO=ÕßÞºññGV)M²…Å™ÓJUeYÎÍ·C¿†qF -¢ džúõFR•ÁÐY¬M¢˜`ð€<Mqm1J gÍd<¢Càδ’€V«•çyQY:qÎQ‚¥–I-I’d2I‹¢¨E±fÔ Ñn¶Ž9ª¤˜D(‹ÑxXoÄQX‡Ûí¶PÚ_,„L‚ÇÈdk­1>¶rNýRYß±BH%•"浩©V†i𠆣Ñp’4šÈ¡RتE^eFI‚aàœ (#Ö™jh­fçZ¢ÊÆãrcc#`$ -þ_ÿš?®üåêa#”R‚Éc}YÝnw8j­…¨cõFm8FQ¤µöcïîµÖQJ”f#,• ØKo1DÀŸF 1ÆB–BTZä€1‡jµ2ÚdEÆx4=}êøÎîÚæÆjÀQ£Y- ÆÍFs¯·¶º¡•5Ú@ˆëõ †ä“+;º„ øOßýî¨?8zxiùäñ…¹¹‡ÜûäÊ•_üìÇ·¯_+âZqš IDAT‹É¡ùù7^… ˜“tR6ñÒáÅF£®•GOˆGŒ Á” â$ŒãqægÌcc•sqXy2EYVbÆ„RÌy@BÈoiYæY–Cè×Ì:ŠbÆY%„uÎã3ŒÖÃá`|ôØJ Ój7¿øÅ·¢(¸{ïvQV „ Æg¼¼K)£ï@B0v…e%|Æ9OjI½^’˜ó0M³Ýý^¯¿ßXõ–¸¦»ŸNÆÅ$K¥ŒÒ™©ÖôL»Q£ˆI•(gfOž=yzù0„jíá˜<âp8ÏBñh+­µÕÎ߃ZkÚ™L&eYÆqäS=/Ä/•RŒ1B‘qy¬¾”2Ë&Ù$'Í/Ì)%Òq–¦c!”R¢¬rrz¸Žs~ ™d)cÎ xZëÿõŸý/o½ùÚÒ‘J`%²€q%«~··½Õ_]]QåEÙôŸ¼ðäTgŽó`må{ýµ¤Ñ˜n4Úí©'NŸÔRõûýž½XEšæ++÷î­Þ›äññ“ǾúË_[>u4Mó µªFÃÊ:‡€óô}æ·ÅÚ,!­59`•®¤¢4FA“Z!d˜ˆ\äÌhg­%aLýÿ:cœµ€RÖëŒÒITSÊÈJÆFšç@%t¶GŒrcLG‹‹‹[ëZ‰v»-•xâôr½ñ´Qåú‹Z[€)Å„`J©RB*iŒÃмÐÒÄA…Sæ…RSÄ9Ø1&´JÓ´¬d¯×òqšÇqR«‰²T£aª&ˆ6âzÈI«4!¦Ú¨" `½Ö>thæÕW_zúÒù©éöåË—ø½ŸŒñc¢?|>†1†ÎUU•e„0¸7áøz‹1VU•¯¢(RJÕëu¿œ&„`‘#e™—ei­–²b<Š£ÐF1!¤“¼…+gaŒ Â`€1F+­„Œãå\ë{%¥Ôßûû¿çœ¸¿zn¦37Õ2Æìîî÷º}c\œDB¸CK‡·ww?¸òA½Y[\˜ûâ›oÕâdog7äÁÜÌ4ZVY«K‘œLO-:4%¥LGÃÝÝý ŽVîÞ¢ðÌòq¡Õ½û÷+%çµÛ3½ácLC(èWVYë/ô 0†J[„c˜g¥&àÆëÐAè‚гŒµBýx^h­˜Sü(3B7IGe¥-8X‡ØÀ«Ó4]Y¹WK¢­}ù+_êõö?½úñììôìÜL½^ŽFÆÐ8½¶#а ‚€²ý¦3B¤ÔˆJ!¤,pÖZ­-:Íò4M¥Öi^ e”Y.ôªTž—‰¬V„BJ°³•¨T„q½¬­ÝY˜Ÿâx¶‘ùdÀ‰ )¾pþ ñFBÿýܾZBªBxër&ŽýÔç¡kµšÖ:Žã~¿ßn·•JÁ(BÎ-ô~wW)ÝhÖZͦRB%D©B0N âVE^/àå:BQ)eÅ9!Bƹ©„2!TÕ¡£;[k;ÛýÉptûZ…U&^Ÿ™™š¤Åko¼¢Œü—ÿæ_ïv7G“½ßûÆo=´ÔlÔÎ>q:Žc¥¤e f4Ž{˜À™™™Ú|Ç¡ŒôwÐ+Y@„œUõ$¤åÄ9‘ó%¶Îÿ¬”€Ê}í§C¥È=Ѝ@ˆ8kÜ>÷Ñ;ìÿù¿<¿®œsív{0QXÀ½FK…!²Úìïîí3öÏ,Ÿ8qâØOü·[ÛëFmaqnœnKeªÊ@è(FZ+eÄ7dÞ‹!Á‡QÀSÒI©”ß¶I­•‘Rií67v‹BFQ @&*#¥Áˆ7›œ@ «Šxªabµ*(fg;g–?§MI ØX{xõÊJÉl’r–àßúÍ_ɲÌóX=TΕƒþà1ÒZãKÂf³Y«%QM&ãF£áU ƒÁ€sê;B°sŽQ2 œ³µZQREQä¡Çƒ;!#Ô9g­C2BBÖkíÔÔ´R+ƒFÐSíUQVßùÎw“zó©óN8yãÆÍÉhX‹k ó ÃáhñÐâöÎNgº}üı;+7–Ž,FaðçÿþO£ š›ŸÝÛÛƒÔëIR´R Æp\ ;‚Åp~~¦Ñ¨èŠ"ÓFÕêI½Ù°ÎCJ Âbä´Î?5XG1è@¬À!„9g>À‘æœïµ½H$ðý Èà# 9sUUùqôùóç!B·nßöO_–eÃÁ ( ­¤åìì,ãdõÁÊæÖÚÇ«y>¹ÿîÝ{¦g¬ugÂ0´ÆQù§¸G&ë&ãüё鬳Æ©T¦ÛíëÍ&µ`î 85* »yžeŸ`53Ó|æ™ó¯½òâþ£ÿ¦‘DZIgôx4îï÷'ãTIKÒ4x¹ŸiúþÖó®Ö¡Î¾¿À{ˆtY–þýFÍf@g¬Îò´Ýh†aà`ZªápPUU£Ñ Œ(-'鸪ªF\÷F(´r’ÃùÂÜCäŒñ4äœ+D…0«ÐÚ(à D –ÔµQeYzÀßNw÷Î;ûýžÏDø,Ö,Ë677÷ö€ýî`¿7ä_X<ú`õ>aánwÄ(,Ki­æÈ?ÙÎY”$5)¹ŸŸŒc”¬²\ƒArF•“ñhÌhP楒]JyÆc"/Š|ø`,ϽúÙ—_~ù3Ï>Ûj5nݺõgþ§7¯ßØÚÚä„"„§Ú³JÂV«­”¿ùk_Îa„¢0"K!´R”P¥T’Ä€,KýÀžs†A†­VË(ÖÊ@€„á"ÏE% ÔJ­¥(Vý~¿×ë÷÷ö&ã”1^%cTZ1ŠÂ" ´VZò€c‚‹ªÒZ#Œ²tÇÑ‹/¾ðêk/6ñîöÆüÂÜÓO?]«×÷»Ýn·Ÿ¦ù~¯»xx¡Ù¨kv7·Š<+ÆYÀÎLp§ÓòN%t6I9áUUªªb˜pJ0:¥U½93œäÚ¡Vs@>åZƒ(¬i匲à˜‡Œr£ŒÕG‡ÐÁf8 TR+­•Ô¢ÿŸ©7ë±,;¯Äö¼÷™îsΙU™UÌš˜¬"Yœ%–Z¢¹nÁìGÃm¿ÛðïpK°ûÅ0ì¶a£CÝj¸›¤Ô¤DRlREVe9Ç<ǽ÷Ì{öÃÒ} yãžsö7¬o}kI©L„PD9ðóö¦×ºÓm@HHŽñÑEŒê¶š-æk«„RÆYŒ^(©’¤ëû³SXíGÚØ¢íî‘øH¸ÌµCÚëI×{„qD¸×ºë &DÈ„2A‰ L$IÎEâ\¬ë®ªÚ¶óå.r®¤Püøl¿iæ*¡»Û‹Láñ§òÚ+wAƹõô#¯ûé½óÅñ·¿ûöÕk+o½õúp4þÑ_þÕßüÍ/>ûìÙÞá W™JB´gÚ³Ó¹™-:F.,ÎÕ¸DØ Á s ¡õììŒRº¼¼|÷î]ŒñÖÖ(GÂð¿klSw£aá½===ÅEa´Øßß…}’²¬Œ1”°¶m1¦°t^ó2†P°ÎZgC½5Œ ç çRƇ‡û_~÷³"A8>}út1;;>>®ËZrñù/ØÝúä?þìGƒݹuõÍ·ï½óî+D„“£ê£þèG?ýõ{y‡––V^}õ¨è"D¬GÎED© ƒq @V  }Áÿï PJAr•޶màÌk麯$ Å=ŒZ›¦»sçŽs¡®[!„³¾ª*)“ ɸì>F l­b žÈÚn1"Œh¹¨?ùä³íÿiãêú`c»®ÛÝÝå”N¯Mwö÷öïܽ£²ti<úö·¿í½ë{1uÁ¶UãÍcL(K’4XPÄ”KB9ÃL`Î%©Gxïd1M¥ÌtowBHÆH×÷”R-¡s°³*¥ä‚aoœƒRá\»ªx`‹ÃÏÃ!7ÞJ)˜cÉUª< äƒÁcÜkM0ËÒB[£µîëŠ4 GÓIÄ´m»ªmöŽ>ûìñêêj×uHc¥TUUÆôι®ë‚GкB£BÀQJÏÎ΄çë¢Ôlaty9Qi6Ÿ¿8:<Ö‡èÚõÑÿø?ü÷_ÿÚׯƒl{sËùÓé¿óÎ;ßüú×VÖ—h?þôÓã£Åóg{ï½÷ñÎN7²·Þ*nÜ| ã³ËµGL „Κ¦É² ®><c&“ Üc€c•eùÙgŸÝ¿0@ýNY–qJúΊVVVBôื±±¦‡p «²>88Z]YORY–s€y„„0àl1*<ò„0JQ ØYĘ ÔÕu½·¿ý¹×^}ûÁ¶··Ÿ=yúðáÃñp8N?|ø1&hii¤oßz)D·wpôìés„ÙòÒÒp8"˜=yôi¯m>9k8e˜Æ@"” Î9‹˜åJ’ŒÖaë½GÑFļ÷*Íaœ×4w! ïGrÎr8wš€À¬Z¸ÁÐ Á Õƒ#” ÊØ«"‚û¦©ëÚ£˜æùp8µÆcçójÿà ëtžŠÁPK(Ã(PJ›²2¦÷ÁJ‘XkÁ ê’ ˜úC§•§ Ìë¸ +˹Jì  éròÍo}ýŸý7ÿ5¡š ³¨Ž=þåîÞû×®_ùÝïýÁbÞ:Ûžž6§¥yÿ×Oʺuóêk¯?¸zõúÏ~ö³§O?Kól2Á½ï}ðŒ[ΞIPNIHJ™$‰”r'²¡FÀWÞÝÝÅO&@öL߃3´m{ï-ç¡sP¾(ŠñxÚÔ­5¡m{ï"´ÓÎÙs—vÌ<:§œ Á#}ŒH)ê½_YYªëz{g³,Ë¢(~û·ûÆ“ÉÒ;_z÷p÷ÅóÍヮ©þóŸSŠ«ºí4úÎ÷þ—Ùÿú¿ýïÿþßÿðùÓÇo¾ùæþáqgˆQ0唡cÎyÝ6§ge×ô\ÈË…ì4Í< Z'„r.e„ŒƒRÛ*.þ0Ì…ê"QÊ£ÛÎ{Oø¹“#ç<ÏóˆP¡7~Ñ{_w-Š!6N”JŽŽNtgbŒÖ¸ÅühyyYpL’œo1yž×uûØšþkíüB“HvI³ÙÌ…ne-eŒ¤ M¤XÌÊ÷ßûõÍÛ«Îá“Ó§?ýù¿?=>ØÜ~vçö F³_ýíG>üt§®ÐƒÏ¿þ­o}û¥—î#„vwö뺄¿Ù˜Ø¶­ñAŠè=vÎÑßûÝt¸BB0¤jva©èÎýŒHê!ƒ ºuU¥I6Ó,ñ§@ °¶[.ªÍÍÍããïý|¶hê6ÉT€AØŽ`ÌP¤Æ€›0U­M]/Þ|ýs“ñ`4×e½½»‹ ~ôèÉøñóBÊÓÙéÒòò­[7££²ªŽËb0øì³Gÿó¿ø_ž>=hû€±ßÞÞÒ¦S „¢T*IsŒ‰6öt¶XÔµ³Ž0Ï–J¥©µV›Þ{'„H’„qؼÅÞZŒ¹°»²ÆJR|‘(/Ó}[Ö‹ù¢k;FeÌZbBr!Ú¾ž7Œ×ê²jª6úèïšîðø¸\TIšŽG•¥iž©$áŒomš*Îùx4*«Ü ñ"à*CÈÙé ¥Xæ”L˜/Ž¿úÕ7ï½òÒ֋ý£ùiurttëÖÕ;/]}øÁ϶¶?^Y”eÇ:>š;Moß~õɳm•&÷ïß__ÛèµY”s„üõëWöÎÙ¶m½a­m×ëâù !¡Š ÆdYB8<<ăã¾ÐÂçòW<}²,sÖuÆ8v}Ûu÷Öçœ;===::ê;½»»Ë˜X[ÝÈ2‚«ëÚ{G•1JPÄQ‚™q jåçÖB¶·Û›Ï¥@ãÁ°ë›>ø`cýJ§û²,‹áh4={¾Ùµõ•«k“aþàÁƒ{¯˜Þ’›Û{»ûßùöw¿ô¥/ýÅ_üÅG>ìûv{ïpƒJ9}þlóÞÝÏíïíqï¾|SÛriyôÚë÷¿ÿý?lÐ5d:¹‘¤ƒ[/ÝHr^Õ‹ÃÃýÝýíÝÝ­ºžû`}°”¥ŒI]›¶Õ(rÆ$ý½ßý<ÎöÂu$š…à€˜ÃµƒówÉàv ü¼b:™Xc¬±ÞF™œ1ð¬ ggg‹y‰yüøqž êfœ Ña‚ æ¿ö>‹’1.’WU¹··wëöÿê¿ü/^ºs½©“ñ¤©Û¶×˜rDXDx<§ãå••k×®\»~åÖÍW¯lPÆ»Ö?}öâý÷Ó4Í|6ÃÇüH_}õUÆŠýd’¿|ïeÜ:¯&” %9ã€t ùä¼X¡„p΄`Œ„#ÆØ[; `yî2÷Á±„v¹õ„ÂÕ‹æÍ\ˆ¦mOfguÛB¤’ÖÚ¶iƒóã`]W7¦í$%MUÖÕœ¢ˆj›¦i[ÎáÒ v±÷BÁc„»Në czJ çœ3N)ͳþ !FkàÏM'ÃõµÉw¾ýíédýäd¶XÔ]ו‹Ók7ÖWׯGI¢†e(ä8dûûÇŸ>ù`{÷Å|¾ˆ1ÒsÇ{Ä8¡Œ8o½óÞ!°w$x#ayžC0‹ðp:{{{ø¡„¨û<Ï­µMÓ@ËÓ÷=Á¸Õ1F!8!Ę~v6G#„‹Å–È á¾ÐOÁ›¢éÖ××A FHºXÌŒmWW§÷^yé½_ìß¹uãKï~ý'ý³?ÿ·ÿÎØ0^^™.¯ºgóòÅæ¦ÑmSž-MGïÏó±÷˜±“å!a`„`5</ Q2IB`œSŠ$¬øAKWÀ¿Ë3”­ãˆ1 ˆ3iœ=›—+«ëK!‚÷eYVUå/²\’0¯û }Êø8OŽ%ަ©†£©`´³!-гyMb„sŽ#°áà½F_’È/îét:›ÍÀ7žSšç9!DôÑGŸ쟾ñÆ[wïþÇí­ol¬=}þñ¿þ‹ÿï·¾ýεKkëw’¤XÌ\UÏëÙÉÁññþÉnÙÌu11ïÎí[ ι¾×ÁÓ9¥ Å`¬¡¿ó½oÁÈàc|¡L)ÝÙÙ‡pÉ”RMÓ!àòAx¯ëÌ^<.¹²¢sž`B(îû®,K 7gYÞ6}Œ¸ï{˜´×#„Á®EŒF‘B/6›iÓ Á¤b««Ó›7¯¦©0M%¹8:<þÕ{¿þôÑã¥Õµñd9IÓÇOžF„#kŪ*¥»[{‹EߌÆ7n^?8܇¯¿q0ÈçóÙ{ï½G-Šb2ž2Æaù sÎ(çSXŽ!:çú®Ç+)“D"„zÝyoci’@šƒ°ä½oÛJ/»ÅK  !T—u’¦”³²ª®Þ¼1 CŒGGG‹ÅB÷}ô‡ØVuy6'1“$—[MP<ØßÍ‹œPÚÝõÚYçCÄ("L@Ÿ`Œ1J2Î/nâ9_cÌ(9<<<::2Æ`f…L)^WóÉxüî»_K“äÃíö]9š ×ÖÖ&K+y:™Ïͳ§‡}øôѣ͓әv­µÎÙŸî!²5 ;ÛÛ”P8 ã1 4M3(eº7}¯ëºÎ² adŒŽE„#¢cL(& S¢ŠÇ!™LØÆ•µ|˜ìïm÷UcøÁˆ0[Û¸rãæKˆ2LÉòòj@a1Ÿ¯®,9£d}m-QÉó§[MÓµu¹·¿ûðƒ÷¯\YÿƒïÿÞ»ï~ùìôôà`‰JÖZÆxš%ÚhÊ9¥ŠaŒÞ: špÎÓ$#B­{‚LIµX, Ö„ }Û¶—h0Ôõ—¬,F)£ a´¨ª­íyU>~òäøø¸3GD !!zm¢õ™TÃ,Ï$[¨,! A{ãúuë\]·½±ŒqÌ(% |5Q&E(½HÄ6„€Â·M}΂§´kÛ¶m•RËKKÇG{OŸ=ùÜýW_½ïãOßÿÁ_ýò•W®¼óå/}óߪjóÙ'Ïý›GOžìmmlnîÍ cwX°"IBd”HŒi ˆsî]p.Ä€e„ð°Ž~ãk_å˜ÊÜM€ïÖZ˜j­Çãñl6ƒõ7ÆX×u°eoᔃk·w1‚óvztxÒusÞ9—çEUW„"„ Æ–ø f„PHÝÅ MÉ8Z[_¾wïö`˜Íg'mYŽGã³³ù»_ùê­ÛwOgó²šNÓO”„ IDAT—·v¶‹ySWãÑ@%ª­KÎÙd<á,‰!¬®®0н3R •Ȫª~úÓŸnnn2Æ¥Œ‰¶mÂ]ßQÆ)£”²c („àwÎ%J%I’& !8D£œ !¤³Ù VÜ b]Î-è¹aî9V‰„(•ìîí3)%Gg§Úšñx,…!ômg;]¤éòxª¸p]us}2HBás÷?wÿµ×«¶C„,¯®iççLpJ(! öÎ gJILH<×ßòcÎ8ç\IñöÌ)#¹íŒÓ·¯¾úÚËï¾{ÿŸýwÿí½»wC¤Ÿ|üì³Ï6·¶ggµÑ¹ ¤âTb$‚Îbg Š”1Îíµ6ÆcŒÑÖï£5ÖZË €è _¡¯)Ëò|ëÈÚK7h‚#P !£ÑÈiG ‰3ÆŒqÆ„!,MsJééé)”qpõuo²Æ[Œ(Æ"°{Q×5m7'/¯ ——§kë+Œá„caI[wËËË‹Å"ÉYUU5­õŒ )’ÓÓS]Ûv§§§×¯\?8üðôhvíê•EÕO&“ãƒÃÿëÿø—1úÓÓÓ’I’$E–;c³$mû†P1† ꄸ¢bŒyoA4@rX<\1(Õ1ÆišB±Å |(kãºlú¾¿zõêý·ÞÐÆlîlïîîj­mD]Ý4‹û 1‘c»ù©¿6\]ìMY CaPd"Ÿ†sUàs¹6J8„Â0 !8çBp—‰8MÓ¶m!åy3Íããc­kÃÿû¯ÿ¬lÿûßûòW`ä=yôáÃ'>ÝBQÃʪIÓ4Y’R,tïÚ¦ïûa¬‘¦RHT7-¶µ5 ïHž †ˆPie*t†U”çpŒÎ¹DJB,ÉRŒBÞZHyÐ(ÅLp1Å"àr‡€¬µÖ: †äœÄ=:Œcô‘bœ§ªïCDŽÒ”Õ£>’‹ÁñѼmÍ[w?ߌ'ÕñññtiõäøÐ›!Ô·õ±m†™ ÁüéG]×-/¯zï'“ÑóÍgÃa1‚u£¦3 ¥æ<î´©Ûn4™FL8cQX‰ÂB(#(RLÇuo¼·À³…v”Ó`1.MSƘµ^©„IE8>hç«öÜ…|ëÞ­7oM–&|ø1|yuÅjSÎæJ)1Œ$"…‰7ö.KY‘%·nÝxüüYßv‡‡‡ºë¶ïû¾G˜EL\@1FAff½õ1Äècô!¸F!Dw:€;cÚ^C‚>fùpeeikûÉÇ=.«&D÷øÑ³õµºGÛ›GKËWuoçóùêOSÕi¬ókã|@„Dë\Ûú¦w„bF…Øh¢‹ÈSJ°¤ô/¼c¤”H)ò÷Þ)¥‚s«µs–R¹`ìøø0KÆh€DîœÖ]µX´]‹HOF]ß5mÕ´5å$ϳ®ïNNÏ0ÁËË+U]ë^K‘”e] ²H‚õF›ÞGÏ“B­6ºï®_½ú¿ÿ{ßþÆ·Þï½ÝÛ¦ÓÕ¬ýÕ{·÷ŒM«¯_¿c Îo=:ÈRÛ7‚#ÁñúÚJš©õõJål<NF“ÉtiU©Á¨ ´­ަm׆#çÂÊòò Ëç¦ëQˆy–Ycú®Á˜sQØÛÛÉóüÉ“'+k+”ÝëÜ+¥ Ç”2ŠPÆ…ÔÚ…€Êª=9S&(gˆyõ¢)w÷ö³¯½ñæÞ~ûìt¾ùüY*x¦ÔÆòäù“ Åšòtmeô…/¼6åG§g'óÅgÏ_¨| ã¦Ó>LpšH) .FCid‚"§I"9g#©ä`0ÌóÜX«µë拲i»I* ïÈ XF(=:¨öj‚rgxp‚ó´Z4Þ…Ñp\èZƵ}ÕéÚGˆ·ÁXÛõ¶ŸL—¬ mkœà Ž0òÎÓ¯}åmŒ1 ½a:ÿ¤(‚nxS×]×9kBœqÛJ)©cÁç\Dèúõ«"‘Úh&¸’œR*•$”m(¥1„Ðd´´´´ä}1š¨]ta¿Å€p@„`k̾ðàÍû¯yª›6K3§MS·²ñd)/†ƒbØ÷Úãœ)ò,×uõ È××—×ÖVò««+wîÜÙÙÞqÎ4]|JÅ€š¦7Ú#"\È4Íd’¦YžÙ Ïu§u`$ ¼B0!9cTJé½…Ý8kíh4DGçaMbó<ˆÔuÍ¥BÏåÙÙlgÿàäôŒ Á%eQŽ­õ>BX^ ’$këæ`ï |i<¼vem”¦YÊëjVä*IÄÞÁþÏù«ÞE• ²Á¨sq{wÏäCÀ˜dY–g©”LpÂ8‰iÝCÝ’¦ iÆ0A}§›¦1Öa‚1a˜P.dš¤‰J¥E>žL–ÆÃ•4Í VaÝ;„"!T%"M3„ƒîóÖ9C8’äµé3˜bÎ9(Å‘:EBɹ÷%ç¨î„HˆWj瀞‘ç9Hz@)ëJu]/ üòòçgå>Kh—µoÛÖhË9/†CJé|^ê²!Æ€æœ%8"ë HÊd<½þúëãñøÓO?|ñâ…÷Î:(d)“âìäxmmíøè$M3gõp0˜NFEžM&£$å‚sF‹Û·n­¯¯?|ÿCÃR^]×MÝÇ­Gã$IŒ1ÅpÈ9ϲäüzÄ ™s1ÕL]².7Š¢€¤ß.j¥Ôd2‹£µÆ˜Â<'„ztºm‚]'¹ºT`âg³Eßvµï~ù‹_|¨>¬Ê2ÆØô:bQÖ£¥¥ã½L(r÷ððÎ;×o¿|²¨MˆX§cT½Ö*‘ÎJ±Ö>”(ÈAé¾(Šª. !ÆZ8iÎ{d‰8@M ó“$I¦Ó©Rª(2NqSµIÊq$£bÀDrt|Úu:ÏÞxN"Wòl^6V¡2°$›,¯ŽW®lô¡}±µhÍ‹í‡y@dº¼$ÊÚ9§)s>x'0ÆÉpè¼æ ìOƒÐp]µ0M^„s®ç åE¼EÄ:ß#ì"²Bá I­u–)x$±˜ø4çIšÇˆ ãÐ$I¼„ªª€þzIJ»@¬Â9V+o YƒÒ„3À”â#­5ÐGøÖ4 TýJ©ƒƒ# Ü0|­5ì"'b~6G‘4M7 ‘§}pÖZ‹“ˆRŽ# íïïÿð‡?¼¶±¡­ õÖÄO¹šOýÒÆÚ‚ü HŽœíª…YYZ¦ˆ%R-'y–§Of‹y1B‹ÄÙ¹Ÿ è$ËáT!„çZD1RJ=v瘋W¼PÐD‹L£Ñ¨ë[!Ä(ö}_Õ­R*I’ÞÝÛ#¦$‡bPR°é8ËS!„îÚÙÙ¹ÂY¯Fj8÷½ ---íïîNƒ$IgõqklÀ Õ»è¨øwù“Ïž>-­,¯_}òlËtýöË£ñÚu-@Л %ë¦k: ’RDãÁy)¥³ÔYì½óÑSJ&açû,ò´íÜ9uŒ†¼iÆÇã1c ˜T˜¸I–«rÑLj1¦Œ&'Ià(U‘sý_Ú9ÇÀ<® <Ôp@ÇEgv,/Šº) ¦Zk êJ)µ¶‚)!hŒ# ¸JÖjŒ± …hŒ/Lc¥Â{ä=Š!¢÷ÖØy]2Ž^{õsW®®;£÷v‡ÃáhœÛ`ëºÜÜê7·ž®­^M‘^Y­ªªª}ßÇàÖÖÖ®_¿öÉ'Ÿlnn;çƒ9G)%\©è2ÆÌÌ…úo>­µ5ú)98î%<£ÜÏ… ¸òÞ[ës­îû¾'˜åyN½œŒ%òÜ­#8›ðQª”5USµF‡ãƒãà£n{cLÝv³9Ý;:B(0Óéh4lL˜7ºÖ>”ÍÒ§2‘„N——–W×g§§'Öi¬sGD©Fu{0ŸÏ$SÀ á¶B˜à‚ A벤, !0Œ>ÁGŽRJi’H!¥ã¨u׶󱮬L" /pë•R«««‹Å¼ËßóÒ.,tZ 92&€ì. Zvhoï`ii©( !Tž#@z0%œ™Þjä$JïΧ¦×€Js΋l`Œ5ú°ïŒÑN²L(BÀˆ2*²ç›û3ƃÁKw_Ö¶M'×olŒéþþÞþþþññ1#ay:ɲ¢ªšrQw]‡1A>d*e˜2LW6V)åç4\Œ¸!„•ucìû¨„¶m%g1K(Â|½iš‚æ }ßÃzjÕ6LH®Hß÷]Ýc”ƒ6ÉùxŒ)ãœ;©¼i)"”`]g[‚0HLÆÓ®mæem¬?<Š")j8Ž1¾ùÎWÖoÝ{øáG³ª ˆÆë¶»3ÌË$N‰…ˆ)Ž1‚}Ú%OîæþþPvÕ“¦ižçJÉj0‰ ÄŽ/¬\8çmÛö½q.cbÄ‘®Ó½n8Ë“»,³.Y×’ 6A±tŽã]¶.x·(ÆØu”ê ¥¤Œ,Ë`Ó­m[ÈM×¾rïÕò¸Ž‚ó9jù¾ïËjŽ"™Œ¦RúrÐÔµ÷TÄtÀ‚ÿŸs^×ó>øàöí[×®_íû>I)’ñxtõêzÓ4=ÚÞÞ=>9lÛ–sÉ8ÊYº»³ÿüùó¦ivvvÚ¶O—QÄ®¼‹î\[\ÄðˆP(ŠÂ#ÏmÛ†ÌC”Â…K’Ä{oµfŒ¥iBȲ\tÐ#@»úƒ,ˆÃaß÷GGGm;o@²ေÀ$Vóʼ3ÓèA`¡¦ª…墒#Âæ‹ª¬ªƒã£ýã“D¨ápØ×Ù0¦R(—fù•+WÚ¾«ëªi+Œã ¤*ÁňœÇÓéôRÆî””r2™Sþ‚Vu]Ç)‰s¶³ÚhwP Ó½m}ï½B0*fÎšÑ ŸWu×u0ÄC‚ÙþB1«‹¥Hèïÿ£ïÀ>êåC¤­<ÉçóÅÎÎîÙÙ #,¸ˆ!ê^÷½ †RȦnʲ"„ÃÑhì\ÀsÎò"Ó}1jšÚƒ–R®®®eYzvrªµÇŒñÙ¬™Œ'=œ'J‚£Þ»•å¥+kuÓ¬¬®¬­®‚·¶w–—'Y*Ú®²ÖXãÚ¶aŒy:Ï ÆxÛt`V µÍ³A–g*QÚšÓÓ³<+¤R]×¥Iæ½o»v0(€ü“Yßwiš‚®]¢TQäc Š›¦ˆ\n qF5MÓõ:Ͳ4Ë`ï>"½ æ÷ÎcœÕ1Æ"Mº¦I”bœK¥º^‡„m×6uÃ9‚ É)çED¨ ñät~6_hí³ÁÀ‡(”/M“$Y_[“B.-M¯\ÙȳÔ:Ç8OÆE1’BrÆ0B„l à`”¥©’2xï¬!82ÊÁ’+!JE×êrQ÷½¥„ ®„HŒvJeóyUU-Ælv¶°.*™ ™p&œõÞÆ8B¸©Ûáp”¥y¢RBh½hú¾§_|û `ŠÂŠÄx<Ž1&IÒ·Ä|X aŽ÷þððöO”R R–åÉéI’¤Æ:cŒ÷Å@&˜Æ0BJ©¢ „º¶wÎfY¾ºº±¼¼áœO’d2ïíí~üéÇ£áàݯ|é·¾õ ­û‡?8::ªÊEUÕ§§g>8Lž''Çg?îûc"„¸výê|>¿víZ’&MÓÎfe]×Þ…EYÆ#ml×ê$IÎzÎ…÷>ÄXç|4¤Yê¼!Çtoeç]ÆBM[Ïf³•••,Ë„àê½÷>xï‚T ªˆËNÛãœ[]]Íó”s0QóBƨ·Î[Ë8ŒÌùÀ(-CFiÛ·RI¡¤ó¾*uÝ L¤JŒñ( ¬ gy>È‹$M¼÷˜Ä$‘œSk È•E1Ÿ•}¯! Þ…£Ñ(MS!BÁûs¶!„†1 Yk „Á•BŠ$„<:99)uŒÑ»˜$)!Ôy˜…ËzµKÀ¢’s…À`à%*XXw]Ç9oæÕe y Jû›7oÖu½»» ìduËËË]×Ùà3£DžËu}öë!JùÊÊJ×u‘AQ]ñíwþøÿ3©øŸþé?ÿÑ~0 ”à ­”:::zúôÙÒÒtyyEüèÑ“®¯Ÿ>}¾X,¾úÕ¯ŽF£½Ýý¶ï] Ù  LÌÕlQÃá·ƒÁlq‰ì\„Òû¶mí…uÔ§ðÑœs—:á—Ŭ¸@Ï{1YwPLH&¥PãéR×›^køÅ‚P|5[:¥´iëè‘`”`Ô™þb·ÂYçá¦GŒË²TJ D`°1!ŒÆ1¦£ÑȹóºG%R*p4}«MWçY1 Dw1Ì¥1®³Ê×Ð)™‚B8Ô‚oŒ#˜ .£"1zÆ%Lkë½·1mûÞ0ÆY–·mßö=” 0t‡&Fvp¡ÏÃSŒé׿úÌòàvB‹E×u8 h A¨Ä]¼€Ÿç9s!zQÆq ѽçŒK) ÁÞ»édÂÓZ‚‹ÜzQ–ó¥åñýÑJÅ ÁÅpptt`um=ÆX×õîÎöOþæž>äi6(þîï~=¯æáÉò’âJ&YßöE«{¢³èdvæ¢#„dYq›s‚åœvŽ„4PÓ»†æ…` ¥”1 “ï½Éc1žoêÅe㺮mð©JƒQ®iÛ¾oÛ¶%u]¬cŒ`Î`ý ÞÑ8qìuÏŸ\Œ£äLKæ§„ • „ŒsÁ¹º®R©DšJN Á[ ‘QÌ)•R"ñ…«rUÕÃ4öœDN0ªËJÇ€"¢˜´¦oêcœe™RÐF£ Áž)„Ä8Z«· ! $B yžÒcìåœ_8{©‚µ:)h 1¦1â±sGOç{ßZ,! à½xñH Ñ!èÆ!¢ AåÁ`B¨ªª,KÖ³,£ŒZë(c”„bpÞy#¢”ܸ~ (!‚çðZkÎÕG~ø—ù£÷?øÍ‹Oß|ëõ¥¥éç?ÿfDqeeùå—ïæyþðá‡mÛ¯¯o¼ôòKßýîoSJªº=:<úàáãÍÍù¢šomíõºMÓŒ2^–ÕéÙ¼(Šk×oJ)«ª$„ ‡#Œ1ܦicŒBŠ$IŠ"·ÎVM¹X,æó%„QÊçœAÒ4Æ0F¡Âƒ³<9·,L„”BÅÄZÛ45Щ9çÎÚº®½5BJˆÖÚËMÒÔxO†aW]WK+K#ïg,IS©DŒÑ90N”Â. Šl0(¤à#ŒAç¾Ý“Éx:H¥¥„3&xª’a> .À,¤mA ]N&Ê0FB°4Mˆ¢”¹s™*™f)çÌyç¼ 1(%gÖš$MÒ,¥”0δÑ1bΉ:— 1œXñúûò E±áRr>Ÿ”M„6\¼à9«ëš¦¢(`|Öu]§{B¨s‡ñÐXí½WJœœœìíí- ¥” ÔûÇG³T&Œà¾­tÕõÍŸüÉ??==ž.ï¾rïþç^ÿêW¿Ž1þôÓOßÿ!¥<ÏÓ—^¾1çÿôÿób=zôé'Ÿ|ôôéÓÇŸììž,(MÐ;7oܺyçöK›››{{;ÐP&¤T@\ÓmC)…í’¶©1Æ>­5£˜2Œ G·ºïM—%©Låd:‰$nl¬c=z”A-,”gR‰yš(qÎÝ;?ßÁ:Óu]Ó4˜QP A&^<~a:Ã9‡y‘qÎ뺴Ö&©,ŠBJÿÁ…|2¥ Ç  –#3†‚””Rk5¤Æôã®o¥È¥”P§C¥uÙ¸\¢ ðŒ±ˆ#;;;˲ =€a%z:š DL¯³VÊ™ä‚ N®ÛGächÛ¶7…(1¶ÆDä)ÅÈ”â6ú$Q£Ñ#4ŸÏÛ®rÚŸ7s7]Y]_YÞÜÙ¼sûeç͵k׊"kºößü›ûþËÿ;„ððá'KKK/¿toeuÉôú`¯ÚÞzιzmã›ßøÚ·¾ùõƒ£ÃGŸ=9::9Ø?iÛnkkëÙ³+Ë+mÛ.-­.Zë|ˆ„0!R"MpŽÈ‹Œ2b.¸xy>P2ØhmÛö|)cL)β´n¯˜ F9ÌÈjÌÅêêúp8DµaŒÕeY©ƒ~H %šucD0£L„Ø÷½988B- J ]F•dyžË\bÊÂåÉIÇH!bÌ)fR0Æ|ôѳ٬7Z$*ISÆXÝuåln­îuk adcŒ2èT¥”¡íê¦ëB‚qsÇ(É(&ÎlD“h!&Q›.\×õøê’ô±#È{‹p<§Ã $8sÎxo½Ém1‹~ñí7•J¬5Bˆ¶m§Ó)Ôì2I|ô(©”‚IÎ9#œjÝ£%Ø£`to¼ÍÒ¤·¶×ã4ÏóÃÃkôµkW9eûº*ÇãaßÕ’Ñ•åiו‡{÷^¹zí¥O?{Š1q!b®]¿ñöÛï\»vó­·¾põêõ$ÉúÓŸß»û9Œéƒogi:ç'‡»RQ¥h‘«í?þ¥µY]]{åîçÞ|ëÁx‘<ňJ¡”L&1 Š)g,ÆÐ÷¼¼¼j½MÒSš¥Y¯õáÁaUUã¶kçgg¦í³Ó$Á™€ÜîîŠÁGWƒùb¡”„Íʲ,;ëbÓ胃C£’b˜çÆš³ãSë`]Y6 „^»v½,«áh<›/¦ggg+Ó%%Eß7]W3í›¶ oÛºíš,Ë’4©«Ö»˜É<O¼u_) @áÏs™±ÖZ[ð”B.¿*¥0!Y–¥yÆ9§œiÝ3F)%I¢b ƒ¢˜N'J %¤,]]—Õ••åÝñq0¦ï½_ýò—?ŸL&óyùÆoŒF“ýƒÝÇžþùŸÿ¹5vTdE>yòøù[7E1E¥‹LÄí[/¯¯ÝØÚÚ><8­›²ë4ˆ.Yk#òKK“œyÓ°Kª Э(å]ìêºìš¬SU"(U”#JqŒÁ³µµÓ4RªëtÕÌœ iš3Æöu]¿~ÿµétúèÑ#8`››Ûƒ¼h»ºÈJ‰ˆBð8dËóܺཇÒ&ôaÀ9`"I’,Ëò<׺’K) ÅÖZç­ÑÞÇ…€¡“÷SÄ“ÑhÔÖ¢Ó=ŠqןÛRJ1Î…Ô†@¡œ§E‘SäË» ì•W_}õÁçßFmíìBý-„ûˆ®í½q„"ï£6!”¥I¢2@V{Ó"0ÆŒx< Ÿ€Tyï³,‡á¹š€Ì@ „@5“D †½·³Ù)B(†€PTÖu-¸´Öníì&©ZZš!¾žfG‡§g³Î[—îœ3Ãa1]aŒ×××oݦÿø?ý'! ?û³? Ñ}ùÝ/NÇKœÐï|ç·þ·?9>:3&È4=;<Ý|±³µu0(–îÝë(áóÿŸ©7{²#»ïüÎ~rϻ׆*€nìl°W²’&ÙâPÊ)ì°8Rhb¶çaüjG8Æ/žÿÂ?9Âã±Ã‰¤8”¸7»›½a¯BíË­»åÍ=Ïê‡ZƒGn¨›y–ïïóý~)q€%Œ9Z‰ñù!dÐëŸ0ß G+h%¥5#D0lSµ5jeÈu™ç3ˆQ;ž/˲¨Êºnʲ |u{AheÓ4@×eEQQ”E^u:½›7oΧ³ü O³B(Ydy«S‚ÐGR,‹Éd"ÑívÃ0$„ŒÏÎ¥”7¨ªªRZP†÷0AœS„!!¨i$!Hh€aœcÚ Æ9Bãö"H»ÏiAVU-Ò¬ÀH£´V–`´À ­!Y`,0˜ Û4uY7‡‡‡RèÃÃCe´ç9yžŸŸŸËJ4M£A—e…4ÖÚVÝ:™Rh£”Æ2lñ[oÜû[h§Ñ­Bøej xa$jßõv%ké‘çB"cÖš[7_fœdY ð\·ýø|>´évŒ°ºŒ9â“Óó¢È‹y‡„`î0ßwÃ0øáÿéo¼ʲìüül}}ý‡?ü“FÔû‡A<~ôÀ"ØíwÆ“—_ºyóÖ]­ÁÅxf­…õz½áp°º²:¹Çgat:Ñ"™sNG+ƒV«´/~)¥•’AÇáZ7”aÏç”’¶s]‘$K©FT e-Œã%<ËŠºnÎÏÇ—/oWU)„¸yóf¯×Gv:q™W?ÎóB+;_,‹¢0 @„ÚÓj»D¹ŽÛívcUU‰FBè?n ¢Mì&µus”R¥¤ã8BˆTªUŒ8çq§ãû>çœsÇh,PÚVuU—MQ”Ï=´|>‰âÜåŽë8žëº®k´ÔZµ—_F™ïûã²,×Ö7Š¢Ÿ_0ÆâN§Õ« DUY+e(§œsÓ&2,r¸+¥ÎÒhq[}ø.~÷í×ÛÝ­m\jqÇq^èúÏ…Ÿ/¹ÊöŸÒ2$­ŒÑ:W×ÖŒ¦®Û#¾Öš œgyž—BÈn·§•ÝÛ?xº³»³û,Món¯:>>.Ëâäô8M!DÝ”½^÷æ[yžíìî. çìå—_žNg_|ñà·¿ûÍG¶¹½rëö¼(„”++kßüæ·ßxã­+W® úÓÓìt69Ÿb¥lúý¡!DŽ;Q» ~©æµdB0çLë†1Ä"¨µF*¥ó>‹ã.Ƭ©eVT?9>:íuûô½÷ÿôOÿ4M³GWUm-ˆ‚¨ªªd™=~òØ‚+W®rÇQZ7µh¤hšº%è)¥œ1@»'†¡o­¶%0I[Q¡e SŠ…hÁB4žçJ-!Jkô¢+$Œ"Œqþ 1ÌçËd™\LfÚZ%•1Ö‹1vw'ôÝ0ð}ÏåŒ`Û«½„a`,X.—ŒS­Õ|>ïtccìéé)@‰!n£ÈãÚZJ¥\JíºžµV+ã0’1ºµ¹Ž¿ñî›­HEQUU-UÓ&ªµ›îsŠ÷ŃÕÚí[Ϋ½N"„Šl9›^ lÛy\0ø!Ä÷ƒÙlæ{á|>ŸLfZ›Éd꺞µf}}Íqøheè8l8êSJ&“ ¥t´2D?zô2æy¾RËþäÉ£e–¾öúo~ëÝþ '¥:??ÿü³/Þ~ç{÷¾ŠúÍo~„c”P¬v=§×ëZ«{½.€1 ^DÁè‰ökµšQÈm…Dkc B$„ÚØØlùäñSká;¯x^8›Í±·oߦ”<}úôüüü‹/¾ØÝÝ ƒàää´×ëM§³Û·ï|ó›ßZYYB$Ët™$œóº®ž¯ôhïFQ¾_×µ’1Â9@îJiÿX‹kVM­”ò|¿­ AY²¬˜Ïçi^HiŒAY–ke³4w=§*˦i<×ãœsÆ—y®û%éÀÖjí¨Í÷ýFÈù|.• ‚ Ëòápèz¾µv0dYj”­ªÚ!l¤€¶®$ÆÅìy1 É|ƽyã~õÞ­Œy±èÁ<ú l‡¯­.ܾ+-LbŒé÷û{{{®ëö{ŒÀ[7çó™1ÚqÜ,Mã(æÜ•B?yòt±LÃÑt:—JaL0!Ëåòõ×_w]÷Oþä‡ï¿ÿÝešç¤í5%sƪ²²ÆkžG‘@¬ÕZZ â82F ,°UÕ¡óå"YžŸËR<|ð$Œã(г,?;;‡VÿÃÏþÓÿäõ×^㮳\.?üø£ª®7·¶Ëª~º³«ýå¯~]ÖD GRZJ1ö\R*U“çyAà¾×þðÃ(è÷{Aà Q;.»¸¯¬ŒNOÏ´Ö „p§ÓãÜq·*ë,/NOÏŽŽŽ(s¤“IšfÖÚ(Œ”ÒJ*)UøEQpN»ÝnàûÖ¶eªa$eS–…µ†s§(ЬÈüÀG· ¼¾ïkëºÀöã8òƒ ªª¦QˆÆØwƒ4M=וB(%­1_¹sweµïÞ~¹ÅiÚ÷ø?ú@ü" §å@Z µ5?Ú«l ¢~€1Bˆ¸ÿèðððââ·M£××6ʺzðï_¾²¹µ¹öÆ×^u\R¿ ±.Î.~÷ÁoŸílllÆaT–©ç»Qq†D@+k-F„ l´B´÷j€ÑFÉÆ…¢ç“|!4”e™¥U’$B)5¥t0Ì!›››7nÜxxÿL¯× z½Y‡sJ)Íf¿üõ/6777/oUU¥Œ6œÏ/¦ãNR aŒ9XJ)€R껎ã8œku+=(¥”ÖÚº®ã+i|?B@ˆ•j..&YV[&“N'ÃÐ]Víñ´Y¯ZJJ±ëñ6 @ë:AQŒ9išŠFEÕÙÔr6_yÉ7Ô „aL(bFYÔ¶jC„˜´–BŠ( ”Ra'|üä €`2½€h©À—À'DRJm c¬Ûíµö*)eÝ4J©Ö“w"B0&"¨¤B`L‚ ¨ò"].òårÐï¾òÊ“ã#+åpeDZ½E][¨ÈZ»X,¬í °•²Ú ,!Dk‡j£ëÚß)Ër9O´>LB(I‡ë–—ߨ¸$„ ð¨Ë$I&“‰ã„P^¤Ÿþ)æüüTkùúo•e)¥ž.æ}ô{D0cÎã'»½"x6sB{ý®”Ýþgµ–Q؆‚>7¯ªª-"ØQÊTe]•uU5Rʲ v®âû!„Xk‹Q–¡µ"k´„ÒÖ´2„°lêÅb1 ÐÆ(Ïó(¥m7„D)n”üG¼ë¶Ëj+{¸®‹ô„~ðgÿìO‹2ït»ÆcÍÛwÞzókRÈÅ,¡ÖEA0"3Š !cŒR2]¦eY`0¡!¥6@¤ œÎ©ôrY$Ë\*³˜gTQØÕÚú^d-hÑ®pRˆN'd` ÖœÇã„@€ï»¡ÙlįŒÖ×P ´„Sæ0iTÝÔÆêª®Êªð<×<ç AU•œsŒ˜4FJmŒ¡”¹œk¥–I‚*òÔuØw¾ó­ó³S­õ[7ó¢Äßzç-‚±Vºw\ÇMgeV¸®1/k™,3m ëÆÂF(Bù"I¡˜Ã¯\½vyûJ–“©¸¯ßûj8˜´•8 ƒ§»O•–³Å¬×íϦ³ºË$åÌ ƒÎl6ÛÙ}\6Õþùuãg»Ï¶¯l7¢)«æwüarýåëüñùùÉK×®8.2™^"¨f“IäGÃþê£OŠ´v¸›§KÏå½~ÆÔõaÜsÝN,„¨ªFk l[]$µÖY–1Æ=×m£%êZh $–E–ADŽŽOD#ŽOò,[]]žžžD\/<=¿Ð7ÊŒVÖ/vûUš'ÓùÕ­Èóöv‡Ýîp4d+©´ÒqP@L¥n_{ùîí®ÃNŽ=‡]ݾœåy‘žëç-´HÜé2×ó‚È¢“ÓóÅ,›Í’ª’²BXÇ„´Œ¹AsÇÕFk­8ç~àB¨üXI[+ 5ÄE̥ܥR A]7÷ï?ˆ½p{s»ãÇX'b®¶êY2Oó  ¬š\Œ·._šÏæ®ëŒES—Eî9>sB!Áb¾Ü¼´iµ¢=üÂʺ(–ß{ÿ»ŽÃ§óÙÆæ&¦tžø¯½Önc`lSׯˆ°0 /ª¢(•6Z-ãœq^ÕµT²" Z¦Ëºi|ד¢ìÆ‘1*Ž#­Õt:9Ÿ-—IYU˜<¯ÀÜqs¤ÐãñYZ$?ü“?^ÛXÿÉO~|xt,¤<Ü? Ãp6[ÑŒ†Ã—_¾fŒÎ‹Ìs]µ6UY¦ÖX£-´8[–‹YG¥$Œ\?`ÜA~À<Ÿ!lë²Ê²¢µÌsîêº)˲ÓéB°œñ ÇÕÚ$YVKy1›Ÿžœžž{Ž?Ž|Ïw]w2™-óìb<9_Æ¿þö»½áP 9ŸÍ/&+ƒ•A·z^è“ñÅþá>fìãO>¹˜L€s®n_vz{{»Z7”`£u'î@ÛÓ íÚÉ”6”qˆI݈d™Ÿ=¸ÿðøø4YæEQE…u\cÒétÛÛž±Z)‰0 [+)3Ry™7²È`‚50M#¦³é|±`”…ž¿±¾©…^ÎҬ̰–`¥ì"É‹²¡ÜUÒžŒƒ°K1?;O'ó½g‡óY‚1‹;Ã4oÆ“ùìbòùçŸSˆ—ï<~؉Âd1ÿÊÝ;—/oEn!ŒâØ •~~NoïœÖZw¢ ŠNh)”6I²ª”ûÇçgÓ8î‰F5MãùÌu]Î&¾#93@ÏÝ|¬~¿ìQÊó\km¬v˜“§©ÖÖè»U6Ž: ;?Œ0åNw<›Þ¿ÿð·¿ùEV””b×w¿ýÝï¼ó÷þßÿÿ¯ÿÛÿîºngØgNøo~÷~ðÃ?|ñÙ'Ÿ|ülŒqY»´²~iíáƒE’$n·-øÆRJÛ®öáv]7MÓe–‹Ž1Æk!„1Ïq8c†P(””B Q6MeÖÚ¥gYI)ö¼ˆPŠ)‘FWy“fY–J©ÕÑš¨!$ð|—¹yV)ƒEbd=QUÓñÂhà8ݺ„‹ÙÜ÷Ýn·møB<|üôÒåÕw¾öö ßûþ÷¾÷÷ÿñg½n¼¹¶úË_þCàGRª££ãùbÅÉ|±\.ó¢Áï½ýF[11¶Æ´f©Ôó@B!´BŒ¡²,2%BÀaœR ¬¡;œÓ$M†Ƹ,Ë(Š–YÚ^~­µAI©,y^0Ê£8úã³n·÷Þ{ïõº}£MàuU®¯¯mmmqB†ÃA{k³ÇÉr0®j‘¥E] ¥¬çú£ÑŠë:„à~¿;õ]Ah1±J5Ëe¢%AÐétÇi¿¹¶9¢%¿ÌÉRic,"“‹éÅù° Òív“eZ} 黂d¹ˆãàÒÖfš%Ÿ|ú1 T¥ ÊHU”ç''g§gGûu]øûß¿öêk£ápw÷YYÕ— &Ë,¯ê:ÍrÒJ5-×Ö ˜­j”Œ|O–µU2èv1%iÓøAa-*N¡š:ÏÙhD´ëkkí³M¾ÓZ‡C­µ2ö˼¥tÇYZH)›ºŽâB¼¿¿_åõ|>GˆÜ¸qÃH¹˜ÎÒdú^U¨0 £(j$ìv¹ëDãEÄW¯^ÇÊR¢ªKˆ™1@€1t!n-|>ßl*!Lc„ÆF´3«¢¨Òe¾ÌËùdÞæ*¦Ê²ît:Ãáðµ7ß8>>¶L§ÆÏåqÕÒdÆ1Äh2™-æ)eî×Þ~ïðì$«Rkðk¯¾19?x²ûääxïà`ï¿øóÿòÖ­[ÇÇÇÏž=k=Ÿís¬nªçni-4ìßí!„nÞ¸Þï÷“$9<<´Ö–U‘å „;”2È8w4v=¾¾¾J)Lf®PÆ…-^8G릲ÊÂ"Rj­­Ôª( J9ã F… ¡ØõBÆtõ¥áíÛw?øèÇOÒWï½¾¾¾NÙ¾:|úäÙÙÙYšÌ§Ó 6˲~¿¿µµ%„„o^Zƒ¸ªÑÈ,͵¶Ï1ðVólÇ‚_ò}çW^ér§ÓéhË"w¹S×¥”Òw=Ç ‹8¨*캮Q<òÇq‹YÛ®«µîöº³Ù BÐ4M‘§ÀBmA¿?”2)KÛï…?!„¬®¬_¿~1g>Ÿ·¹¦®Ç9[ #¿µ÷ûÝ 'Ü ÇËó¼×u-UÓínQCh_ð™BŒ©ªªÍ^ãüù3$DÝ4Úu]Çaí_´X,f³YY–ÂnÜ;>>oÂÖïÐ4Íéé©óàAQdW_ºvåêå¦iö÷÷iÒ(qýÆl™v:é|¶˜æß/êNÒ¬ÀÝ;8¬DÖ”‹Ãý'—VG—¯l÷‡@_ÐFë+­…~àyÕ •-ªä8ŽÒ²®k)Û<Ô‚âz”PÊq]—Œ0²q'Š")›ªª¬%_ް…jM ÏCe[óK[s·½½½±±v19Ÿž,ƒˆ®®8Ô¡B¤ˆ «W×Þúú=ÇqþìÏ¿ý楺_ÿú×Þýæ7öãŸÿê¿”Ò º=N©²:M“òGß­ª:]&Üq666”5óERTåx2ÅãÛׯŒF#Ƙ1F+ÕÖtqÎßÿîw‹<¯Êb8t:1°À«•h3лÝÈuÙt ,è÷zÖZÎØt:…Äqœ¦©ïûÚ!¡¬ÛíFaX Íó¢ äyhäÚÚÆÆ¥MŒi¯×3ÆTuÕë÷ƒÁÞþ3Çqªºjêjuu}|1çUYϦsÏwÂ0X,æ++C­xŽÃ-0R ©„ÖÆˆníäB4uS[k­5J‰ápP×Rc<_ŒÇ­íÑÁñÑÑIQ”R(ÎÏ÷¶¶¶‚8˜'ó0 úý¾ïyUYŒ†ÃN'Z®øžÓ¨¦¬ª›×o4•ØÛ=€ÎæIV [wo Ù ¢ÀÛÜ\ߨX{ë7ºîîîÞÉéÙp8zº³›¦Y¯;hSz´VœqF 0I««+¢,Mâ8|ôè¡¥Øq(B@ka­C/ð=J!AàÜ\$4Üq\ÏÆœŸŸŸomn½tíšÃ,Íf“Y§ßݺ¼uyûJS—ãóã¯Þ»ûÞ7Þ}ùåk£Õ¡õl>éöbÆIš%Êȯ¾z—2B(x¶»sttt°ºa'Š)¥I² ~ý­·ò<-«Êó¼Ñh¥¨ª¼¨Æ7oÞÆŒà·ßzõKw%Ôqœ­ôz½¢(NOOÛ¶Õ¶}©€pþŸ/ö,$Jé0 –Ëd:™,—ËöF¼ººb­­ªêöíÛ?üÏxxxø7ó7{ÏöVCcÁ­[wúýá“ݪjúý8ô£årùч}þŃǞÜpÿW¿øõîÓgÃîŠëúYšZ£½N‡««+‡‡‡qGQÄ=ïb2Br‡‡qG…¿ñΛ-ÙײØ_^ÎI2ZYɲ||qÑév¹Ëó"§Œ[`!BZ¥4@@]Õ•²*ʪª°m¦TY–BJ¥DˆRŠ ±0îø­B\•››~¾þÚëýÁhoÿÇ?ùéOÿî´–ÃÑJÝÔ§ç';»;ÆšZÔÇ'ÇgçË´ÌÒb‘Ì8çN„ñó:c´Ò>oøaÏã‰3ì @Bˆ²Ì…AB0¡HÈBT×”ŠúÞ{ßúÙßýœRöoÿ—Ûˆæà`¿U§Û ¿Ûë]»ví—¿þe#šN#„’Ùâèðˆ`Ôë÷)cL.&ݸã8ν¯¾2O1Ãë›k㋳ÇO-‹+—/o¬n0Bü·?™-f® „»Ý¥ÌX#¤èÄ0 ‚B6q (!uUX­\—ÇQH1ªÊ¢…ÀÏåƒ~A mµÅki&ãÉÑñ©ÔºQªÇççgŒÒµµÕW¾rw0è?¸ÿñ£Gçã1ç@¸»³[ÔuYTžh4êuGR‚eR8<Øß;Þß;ŽÃ~¿¿ÞXÛL—ÅåÍͺ*ößÝØX¢(Ë–£ÕQ¯ß•Jïï`L<ßs\O…¿ùî[-ûL)…´VÕ÷pÙÒWq7uS%ã cÒ¬Yk}/0Vçy®ö}#Ä9kñù4M[? eÜu]Jøs¥À²¨–i2žNnß¹ !ý›¿ýñ'Ÿ~f,àŽ†áã'OgÛÛ—_zé¥áÊèøäøÿa:[ H1¢MSÇq†¾Æ÷ݲÊÕíÔB,"˜Râ@ˆ´PeYTU)e €ÐX ¥”¾ï£BÆ€³³s­íÏþ÷¢££Ãã£CÑÔ”1‡;eUUMÍs=—sN0!„¸ŽÇ1Æd:ŸÎ‹ ð»qÇcl¥?œM'ƒO>ûC·'ÉüÉÓGUYi!‹¼8=:ÉÒüÁƒk«Q+¥­¶‡‡í9¯ÇmwRž§¡ï£•R ÇåÃ( µ–iºìõ;Öš¶z³å¨šF–­§l”¶as—SBNÏNß|󗯿lyôèq’$žçµ¦ ùb~|vº²²âpwØ[S 2æâpæ"H§“$M󳳉Ã8ê_ÚØ¼së+Æç ©r}}uc}=½»wnwºÑG~8›Í¾òÊWz½^QVG'G^×"Dˆ1¿óµ×Ú8ÆXIÕ&ÿÏŸLgÆÚ¸Ó‘J Ù`B„„Ræp wœÁpÄÓÆ^Ç%„sÖ*Y–µg,c¬}°”6Rª¦µ”q§s÷Þ½§Ovvvwoݾýλï¾ùæ[W®\_LÆœÓí+WÖ7Öª¦šL¦ëë‹yæy”‚RÒÖ»¡7ŸOѾ0ƪ²©ª†`!i™-“,˪º´ÖRŠ AC„B­W‚K©ÏÏ'eYyž1Ù}ºSyÝÔÊheTQÆš8Ž.o_–R¦Ë%„°ßí_½zMÔâ³Ï>Û¸´1è÷ûxïÙ^è{—VûýÞl>NˬӋG+«½^·ÈŠt¾œ]¤¢iÎN“­+—Ê¢”RY‹²|çíwG£áéÉ ¥˜’g©ç8ÀZ`-Æ ŒBŒ!!XȺnªá°ß’ÍÖ`‘*ÏË<+¤ÐQî¸ñ Óéu¤l²eòOðƒµµ½ÝÏ?ýìÉÎÉÍ›W=χQæüöƒŽŽŽ„PÉ<­k½µµ=­*¥§³ÅÅx\ׂQ~1{®·2\ V(¥žë]Ù¾úl÷Éx|Ê0^ßyûk›—6NOOÞ~ûë”QÇáyQ¤Y¾¹¹åxÎstï­×_i#µ1ÆF?B¸ã¶DRj±X8Žá|>ãœc„•Ví§šFTU‰.Ë¢Èr)Eëói픜s `7È(C[ ®çˆž>Ù=8<ú‹ýè/~ôW³ù|ow?˳ý¯ÿûïýÑûq·sxtpz~Œ=>9NçŒ8žçAh!´R în7ný¾ïÌëZˆFBˆ@Z›(°ÆXL c„RÌeŒ¶Õ7Ö€ét^•5Áüå—¯ÏçóíÍMˆÆ$îv}ÏÏËb:›Íçóï|÷;½^¯×ív:àúêZEáÉb>™\0B ±·n\_]Íç“ùb:\|ã[ßøú×Þrg1] zÃõÑúÝÛwã®wûÎöJÑ4"Ë2ÏuŸ<}Œ‚DQPUFH¡´ÀFQ踬µ1 cÔétZG2c\IçE‘WÆ ‚9Æ T‰ªÓ 1†ã±ï9Y–Ue±¹¹iµ¸së6å|™¦óÅôλïx®·ût/K³••Q]W¿ûà7ãÕ•áööå0ò×Y Ž÷몼rùòúêJ›‰²±±Ž:=;^ÌgÜ¡Æè­Ë›Y–çU¹\¦ÒÈõ ¡µh$$ý{- €2Æž{ê­%̱fy!¤â.7ÀfyÆ¡±VH%•.«j™¦yQ*%Ê<Ï–iÛ–$ !Äq]Î9&Äc-d”A„•ÒÖî8øôÓ²jþÉ÷ÿø/ÿò¯¶¯\k¾‹éäôüôÍ7ß¼~ã†Ô¢ªê^¿»LÓ¦nb"ß÷‚гV;.ÃcE1@Jm-° ¡´¢~·§µTJBh)Å-WIHÛ?èÎç‹ããÓª¬ç³$MÓ?úî·eY>Ûß{ðàþ2[vzN¯sëÖíÉd²¿wp~>>Øß÷=ßs|ÊhÝÔMSɦJ—ó£Ãýû÷?O³Å­»·6··¦³Åb¹àÜE;Ä œà­·¾~rzl¬¡ŒcJÒ$éöºÖ˜<Ï¢0”Rô{]¥$„m/œÑZFZá†Rây^k÷`L”ÒBh%ÛŽGŒ Èj(-Ô£ÉÅäÁýûÇGGœñ­­Ë_¹û ç|™eçãñÓÝÕµþ—%•ºrõòƥǣ‹åÔXuün/¼¼½áüÞÝ[¯¼róñãûÓéyÓdŸúáßþí߬¯¯ÞýÊÝù|š$ó³Ó³ÖïÙ4µÖz:›eÁg0.–IÓÔ”1üö[¯¶Nec ‚¨|•R ©\ß5JJ-CÏSZçËbØïtµÕÐc–RHI¢”pF±”²N§{q1¡”Ê€Œ8EÙˆZ LÙ²¨ÊÒ»H³^oð/ÿÅ¿\­~þù§›—.Ý»{7ô½³Ó“årñÉ>:;= „ž>zR–54PIÕïu;X‹ ikæ»8Ͳ²*1ÂÖØ,+D#£BÖ‹å"/r &Ü2eZ£ÁÅÅ´®DÄeQ%ɲßíݼ}[)SÕM#䯯æw¾ýþË7n.æÉîÎîø|l­ ‚`:¹@`1ÃÊ(ßw‹,¯Ê#4 V76†£•ñÅôñ“§;OŸ%‹eÆ·oß®ÊòøäЋœ¼H:Ý(O“ýg;—6Ö–£^OˆªH³~¯kŒDPJ)Å‚²ªƒÁl6qÇóÝöÔkŒVR[„¡Æ!µTbÌ8÷B~1>'„žW•õÊheem b \fÙññqE—. ¶/oÇ(Y.:ýøàp?+–ßÿþûëë+÷ï.dsï•WzÝÎ`8<;?3V/Ó…2ê7_ûóögë««÷ÓŸ„AXÅ|1ÿê½×©<ÏŸÎ¥MÅ^o1O´Ñ¾çá·ß|-Ï c¬ã¸"kÆcD*Ë<ð=c”è”M·Ó1Fw¢H©Æ«”Mã8,ð<`V’â6 B…aD•µ®Š\ä5El8ZC€œžAïÞ}åö»ï|ýoë›ËŬã{>ÿì׿úûíËU¶üþýÿùà³Ï~û«_=øü3Y5×_zYÔÒ ‹±ZR„]C`”l´MYJ%8gœñºj’ż*+eÔ"s—‡q ­-«R* 2Y€k!³$MKFxD«+믽ö:FìÑ£§é²­¬_Ù~):Û›W”Òçgãó‹³7®Vz„ÁN?øý'¿-«|>™Äa܉ã¦ÑQÔY[ßòýÎÊhýw¿ý7ð©”ãòO?ÿd÷`gÿðÉåíUB ÅÖuÐêÊ`؉:ç”/ŠQ]–žÃ\ÇÖ ©Œ±­Òó=BHKlkkç~*mªª‘J#B1¡ÚÚFÔU™úýñÙ¸×ëûA°¶¶vrz Bî>ÛRÆÎööå‡üþƒßJ>}òÚ›¯wûÝ?üM¯ß¹rmÛ÷ý¦n^zé&"üøÿÍÚÆÄ4-˲i¢(Zœ]¿²ýò•«“ñ¤(Š•ášvÒ¢:9»Xfew“4ãÜ]__;?;ïu{øûïÿg”Ò6ºÙhݦ¦H)%F+Ïs„œ3k !¸®*)Åb¾PJºŽã8Á¸¥ ’Ù¬ª*k!Ƹ*›Å"ÑÚAX•¨¥R#L0ÖÒh©…” íííÑ` EÃ)9;;ùío~¹··síÊå"Ï/o^ê÷º7®_úäIžW.ok 1„´,“ÖZX`(Fqaˆ¥ÒFk×õ|?”BžÏ§³IQWRiæ°A8ZYñ\Wkã9ž”ªÈ˦É"©ë†R6WV7æóÅéùx:™N§³ý½ý‹É„º¾±æ9\YyvvÄ^¯9>oêj1K¬FBHw&“ÙǶx”¥å³ý}?ðWG++k«½^gk{kumÅ#E­šš@€ UR„ž‡ BkÚDk À w!€ÏÓˆ2Î{Q±d˲^,³¢¬DÜåÃAg6›Îçó^¯o­Í²"Ïón¯g¬-«êðè8ϳºn£ŽãöÂè|1˲¤*³Û·oîíìœÏà þÕ¯~£5(‹¦‘²ÍÆæÆo½¸ÜVu:ŸŸ_,³Ñhýú[!¡ŒÖ ¬ªn‘T¢i„ÖÊq8~ëõ{í  !$Åóœnk¶iêvê÷¥1º¢­µa†aøŸä39c„,¥,Ê#Eq’,)a-úL&­+Ë¡š•ÕѧŸ}|ÿÁçŽÃ^}õ^¯×¥”h%=Ï |ÿàà Ûéÿú׿9==][[ŸÏæB*L±xžç` íó†A¦µÆ„ºŽÌó2Ë ¥T܉Ïe„cÖšª*³,k‹ý&½^_+ݦnÜ¿ÿS”,’²®\ÏíöºÆè¼È_¾~íþƒ/.]Úˆ:ѳg;yQL¦ý^o8¼þê›Z©²,…¢t™U= zÝþã§O0!‹Å|wïÙb1ü Ûíø>³V[m””BаçºJkî8-Ì£Û*AkÁŒ1c€”BHiŒmíQkw¼ûË×/ª1—Ëåd2)ŠB)UVùêp ”’R¡Œ1‡»”’$Yx¾Ç9´~"BHBЍõúFñúú*€v:½@mKeÓL&“n·wzz:™L\׫«Æã8,|ÇåcM+ô/—¨ÓéÖµ<88Èób0åEáz®ç¸Æ˜ªª¥”cΙ’²išã£ã4]&‹E–åŽÃ«ºD Y;®ÓŽ&µVç§Æèª.ýÀÓV×u¹½}¹ÛëÖué¹ï÷¿¸/¥ð?ÏK©TËî]¾rµ,ËÁp¸X$Ói…n¬­ˆ¦TMÕ¦ö¸Ü±„AXW•h„¶"ˆZiš¶æsfŒi}k%ŒRúÿsõ^?’dYšßU¦…›k÷™:³´Êª®êénì¶G`°Ã%øF‚Åü?$øB€ÄCr§Û3Õ¢D—ʬÔ:µ0mv%nVn“þ™‘ñyíØ¹ßùÎ÷S q.6²´ÈÒŒsiš–ã8¦a糩b89Ž×nw£¨ÙïêúÕܳÙô?þøã÷ß{ßqœçÏŸ?yüØóü4‡ƒ~Ô:­H NÎãĵ}áÞînØð\×.«4IÖužŒv!B«Mœ—E§Óku: Ûõʺ‚@`Y–Ì4‚ Ë3ü‹Ï>B¾£…1RJ–e‰0Ò=?!ÿ•j ‡zàC)Åw»Ý(ŠPÉzÍJiùÑqlbJYQä)•ç9¥56Ðí»·*Z^σÀýÍoþŸ=PJ† ¹˜ÏæÓ,IZ­¶”j2™¼<™²:¿vxÃqà )&eµR!h¹N–œ BŒŠ²Õj-„ô<±\z®eš!‚1!BTW%Bh¶˜ÕŒù¾§3¨ƒÐïtÛ–ca KÓ˜sê>„Àý8Ž9£Q«qýúµ^·óå_[–määødoo8Üš/W¾ôzýÕ&~úô¥4 ¨½ÝÝn»aÔ 7›…A$pm·È ×q—ËÁ‚㟌‰¦ešÂX*¨Ñ4aÓ´LÃT !«²†‰ \Bˆ¢¨9è÷[Qs:™ÕU­„² k:™²šUeåØŽAŒápÐj¶övwP†A¤R³ùܶ¬Ñ°×k·,îî! fÓ™ëx7oܶ,ÃX­æE™­×³½ÑV'jÓš>}ú ÔéökÎKZO¦³8Iö÷÷kJ‹¢€pÎ-ÓPJ¾JÆ?À^ý‘  !t]7ŽcmªÑ zžÈ‹ã8Ë2×u;Îã«N«øNY–eYK)õ¤vrÎLÓ´m“Rše™JÔr9ß$ë““£ÅrúàûïlçD]—®k瘥ôÁoÞ¼YUuYÖèÔ2L"B* z½(œ&ùj !Çl G®ëJ „&¦i .Š"Ù¬–Qõû})e¿Ó-Ëz>Ÿ{ž6®ë !ÎÎÎ0á·ß}‡1öü奕뚒ål0¼:¿ÚÙÚnFÑõ‡×¯•uç©‚Ðö\ÆkЧ³Â!… ¡‰ l  ÕŽdưi „¼À×9L ‰1&Di)%@ˆ(¥„PœK¡€”@UW´¬)c‚b›¢*ÊV«óÖ[ïbÎçÓ‹‹«³³3Çq¤ä£Ñèí·ß¾qóúãÇ÷»ßM&Çqh]IF‰m@ ¬ò=Çs¬v³M(Åj6=8<ÌòUϦ—[¦ [·îÜŽ:½šR!Q^S×ó²¼Ló¶mOˆÍfÃù+ºe»Ýƾû†n’ „´¦BÃ00FRJ—jØ®NÔÐåÊuÝ0 õÉk·ÛÛ£-F©x.DÍj.8ÄÈ´M©1Ä‚ 4,£Ñ>ûù§”W_}õÅ‹OƒÀû‹¿ø¬×ë !âMÜétzÞåååññ)Æ!\×Te;f# ]ß!#¡‰i2Æ bJ’$ÝlbÆ81-Ó´¡‚J*ZQ)„ežç„¤à”ÖBr?ðçóY^ƒá€˜Ä <Û¶†ÃÁr¹8:zÙn·góéîÞ¥u„”–išn6›fÔrl»**Ó0ƒþÁÁÁí»w]×µ,Çvܺ®&Ÿ~öóN·ð=A´^­vw ‚¤¨ B€uM]Ç-Šòæõ›˜aˆ°Jϧ!R*Ji¼I•@i) „€J¨šÒ,+м0M£5-ËZ¯VÇÇGŸÿë @@ÁñÕÕr±,ò\#Žz½ÞÖpÈ(»8?ãŒF°ÕlFQ+ð¼íía«áC eŒÖ¾ëI¡ÎÏÏ—óùþÁ«KÆJ¸iš’³Ó³Õ:öß°ùb¹Z¯Ã°5[Ø0^Å®Ž ô<×¶-üÙÇï»®„°*K=4D™&ÑeÌuÝ$Iôâb£Ñh·Û§§§ãñXC§ôÚ4ãt8èWU¹Z­u&›iš¾4›ÍÕr­}Àu]Õ5ŵۭÑîÎÞÁîb±ØlV÷ïßÿÿÍ¿¢è믿Z­–vcÜëö„–é,—Ë¢Ð5Ò ßvL)y]—˱ƒ 0ˆy5™^œ_1&lËr!9RH˲|?p\½±NãÍz¾˜„aˆ0ºs玎¥¸~ã:çb±X¡6Âo¿ýæñ“Ço¾ùæb1?8<@gYÊ9ßl6:#EMJëñäªÕjI©®®Æ ¢¬‹õ`°U×4I)d§Ó™^|ÿ}»ÝžŒ/=×TJhPƒk;”Ò7ßzËvìùl.õJ2PºÍÒ‰=uM Ã2ŒWÐn=¬D'3„P£Ñèt:žï–e>¯Æã<¯’$›Íf¦i Ó48çQ\† IDAT3ÜÛÛK’ø‹/¾8>~yyy¹µµµ»7ºyã–ŽwôÚežÕe>\qÊMÓr`lY¶ôÉãM ì­W«fÔîöú׮ߌ“8Îr/ «šÓ¼vãæÕÕ•ë㌚¦iYfUWÄó]¥Tœl„*©DM+Ã0„`Ú˜%„è÷ûzK¸( ÀÍ›7W«Õ`0ÐÈMÇqþéŸþéà`Oû€MÛ"ÄÔôXÓ4½ù,ËS%!e”1Öéí\ÛÇÿðÃœóø‡¸q㆒¼ª*„à?þã?®«ãããÑpdšfUr½îº6çl{4Ô‘,ÆÁÆùÙÅl±t]wgg‡ ¹˜/¹„ØœqÊ©k;ñzc;F·ÛÞÄÉl6s\#ÏsÛ±¾ùöÛ8Ž!„BÊŠÖ”³¼(„;»»eU=yúøÖí›ã«ËfÔòH±2-Dzß|õmÇnëúÍC!„έ™r]¿Óé ƒl6I‘eÃþÀ0Œ,K{n]V[[}()!x<^M'J©Ÿ<•RR.Vñ¦5óªÖ>½n·+ò‚snÛv]×”2M.ªkÖjµD’‹íA?MÓËéd>Ÿ?v¼·¿wïö@‘¾ ·ò<<*xÞö`øùçÿŠ1~ïýwþò/ÿ²ÙlH)ŽŽ×÷]Ç|9»XÌ®Þ÷Ýë‡×/N/NޝzíŽëúO_<½ºšT´|キ˲ Âд-Ê™ã{Ñ8ÍêºíîÕuÝh4ò<ãØ6‰mÛ&¶cá_þüþëÀmôSæ¶”Ò¶-}|½¢®ÿ1ƃÁàoÿöo»Ý.¥t6›E‘&™ëºE‘W5MK—(ýƒ:OË2m÷¢ŸWWWçWÃáàÝwß3M#ÞÄR Í^ëÍ7!„Yš=yòäüìR¯ÿ—eYÕ…ãX¯¸xôø©¬+JF"¥´È ¥ ÆHe@cÌ8¥´–Š1ÆPžçù¾w~~†1¾sçN«ÕR œžžn6Ñf³™Ï†a¼óÎ;Ú¹oY&¥ìòòcÒëõÚ­Ž”2pÀã§®®ÆÝ^ßr<× W›øèä¤,«Ý=×󂀋ë‡×ú½F–…eÓ eQÙŽmZö|>;>:9??Cˆ¤y6nvF Ë2]ÇÛlbƒ„°ëº®ëêþ„s~~~nFx–eÍæSäÛ·nÜ8¶mÓõü@ VѪÓnmm÷÷‰A¾üâIwÛ­ûß¿ÿá (NÙx2‚ !„ ϶0ÆÉz3OÖ˸*èÅå…çx­vóÓO?1LòÝwßœœ¹¾o{>ãzðÐuý^¯×n·Ë²‚H‚Ѝ4¶J×Ô<Ï)¥c)”àR~•)%”Œ3Ó")…Œ ‘-³¢ÊùË_FQô§?}‹ IÓ¼,kJ)§bo÷ZšÆWW“o¾ù.ÏsqUÖßÿ= ßïb>{ò<ÏóAØïˆEÆÓ Ä4lÛ–ËõÆ0í‡~,Ë:ð]‹óù4ðÜåt²»µ=ìõq²öð¢u™åEQI))!vO€°¡É<›ÍB8 â8†PqΕ›Í&MÓª*Z­TQdŽk,óÕóÓV+r=³¬Òédéû~z©Ùå• µa®g3ƾþòËx½Æ'IR”åóçO)+WËy§µ>x7j†Ä4"Qäi>[®êš­7©Rð­wÞ½ÿɧŸ> u…ˆa96ÀÈ@˜KA¶¯˜:åUs ð/>ûP¯>àŸ…ØjW–Þÿ|-CBêºÖ±X:{^oÄqJ¯)ãd6ŸOg³Õz$iQ•®ë!Œ«ª.ÊalÙÂB”¥õåå8ÏKÏ÷a£(J„ñ{ï¾§„Z¯6g§g®ëº®ç TVÂ9cBH¥êšJ„TRJ€TPüD¥â”YsZA´tR•EœÆ«ÕÂ0Í^¯—f…TêæÍÛ³Ùâ_|y~z%…úä“O•T<<>:ît:Jª*R»»» QWu•—–ad8®sýúMšœœœ&YÑé÷2nܼ¹XmòRŠÖ¥’´Óiú® kFÁööö|±žÏg\Ð( A¶cú¾Ûn·ªºêv»wîÜùñÇ_¼xÇqš¦[£a¯ßÝßß±,£¦e#ð-˪+ YÌ7¾×°L÷òjŒîú»»û½^6Ÿ½xùr8ØšÎf¶ívº=Çõ ÃBBL=[΋n;ª«:KŠƒƒ½>|Ÿ3z~~.}ïÃ÷g7o]›Ž'y^ܸyG Põ³gÏ>zÀ”Ä–}xý­J¥ê‹/þØn7ÇAPM®Æ–6iâš„2&¥lvÛžœœŸÞºñÑGIâ8~ñâ„p¹\Þ¼qƒRšqEÑ»o¿3›OŽ^>CJ:¦å˜Îl=ïv»a^^\0FM“ôzCÛ2¯Ý*ó¬È©m¸iœ$I5yžYYE¿Ûs]?ÙÄóùüÙ“gí­n§•U·ÝZ¬æ—§gYwZ¡ã˜®f+…„혌V­và{áÅøt¹š·Þ°-w²c›(€W›U§Û7MóÙ‹“ÉIJ,„B€B d ¬”‚ ) ñg÷ßçLL,ÓVJj€ªf_éEaÍÒB…ÎBFív»Ûíj»iUUAà{¾ÅX€_]6›Qx‚³õjUWU¯×í´ÛªG~è÷:o½yçwÞÚÞîFM—ÑÌ6`+r=‹Xb%׋yÇ„"+ Ã`L˜ŽÓïNOÏ€Â`)!bör½ŽšmÊx•W´¦­fË$fš¤Ýn/M«V§Ç„RÎbà0òî½qëìôd¹Xìlï=ùñÙ·_?ÝÆb•tþEH+ðR“éålv™ñ›oݹ~kïÞ›·ÖÉ‚óº¬rßwª*?=92Mƒ V±z|uÉy}uq!({üãžíÊú­Öz¹d´Žš .¶ b[óÕZB( ‚#ŒÚöp8|úä‰mZ®çˆ8eú~¤IU•Éb™'±aXJªåjã8~ÔèdYåz¾”ˆûoÿîï9“ÿ÷ÿõ›Ÿ¤IA°c+™e»»ûÿå¿üJ°Ù煉({ý^·ÕžÎ¦Qüìã1@ƒVçÆÁA‘d³É¸Ùh´[Q3 <Ïlu?ýìcÓ"_|ùŽ7îyž{vvÞìvçËu^T{×vv÷®®ÆËårÐ﹎mY¦aJ‰ŠVe]2J…øÓûïé,@×u_ë¼c=ÀÑaºOgŒéüÇqtà;cLSËL‹` 9gUUæE!‚WU†a«ÕÔ0H”i½^!$%OÎ ¬Bßkžk[A PRIU–År¹Î‹ aS*% †Q×5@¨¨k¦¤ !˲”RÚ–M± €ìv LH^fŽkÅÉ`k«oFš&×÷7«ø«/¾®²ú`÷ðÎõ;£ÑH±*MãÍj5üf§QÖcUÅŠÙ|¦1‚ëÕA´3u;mLðl½âBŒF£íùl~q~îÚŽçØ@Jßs ¾ï¹ŽYÖ•¬ªi§Û £ˆ3F9[.–yQìlF;#ZÕi’°š††²¬*Ïq Bžiúž¿˜/ÀoÜ{cãôâÂñûøÍ?þñóßÿáwͶ{ëîõ°á?zôÈõì?þ¸ß²ZŽ/.×ËM«Õ„lmm­â,h„‘ŠÖLðÏ>û Bxvrʳ,â¹¶mƒ 8$h9Ÿ9ŽÓë¶½À×›õjq|ô"h„U™sV—5ít[J‰<+ݯyY–ïÛ¶½ŽSýô&I¢3Â0lµZËå²Hbß÷·†ƒ‡ )—¾”uÅ•ìô{à´ÈõÞ÷\Çq”Ry–={út½Zˆ.ÏÏf «yÄÀ’ɲÌ)gE^)hŸÿû¿ÿï@Y–µÛí¯¾ýzµZu»]Û¶ONNʲìõzŽÙ~Í.A!ñ/>ýPïÕ”eYU¥ø)OBÏû´=æ5ÐAJ™¦) ( Ϫ50 ÃPJ•Ä™e9AF¦>ÔI’¹®k&„P9ŸÏ§³)cõp«ë8–ABH æy‘gOŸ­7qÍ1m„ cL*…bŒRJF!í¯2-+‚áp Bh`¢õ}Û¶«²,«dÚÄ2Éx26 |ÿÃ:v]T@Éxµ.‹âÞ;oÞ»M0ÈóÍj>.óu¸R²V»a"”\­Ö’ ÛñlË:®w||ò‡/¾PJQtýÖ]/Œ¢0ª*ºÙlnÞ¼¹·»—e™ëÚ¦iØ&vmKrZd‰àÔ4LÛtÇeU-„P\äyÎkZVÕ|2Ýßß71‰šÍV#’J5ü ªŠ4N~øáû²¬LÛœN¦£þ` s.¥¦‰×ëår>Ͳloo×óüÙ|±yúôEÍe»Û}øè±b0è®Fg]iEóu>ÃëñŒöÅà_|ú¡¦¨éT×uY”Rß4ÕWçÏhЗ&¡i™U;ôC å®ÙlVU]QðÚí¶R°(J)%c<ËòÙlÁÖööþþç;P¸ BhÛ61¬º¬7ëôÑ£ÇeÍlGK£‚1F C¿ãc\Sð×èà×u». ®*Ó4=× B_Aq5¹œaŒoÖEuy~¹5œž=|ðýûï¾N²ž¶ºQèÜ»{ãà`×2ͳ³Óx“U%]®–qœÄqбlÛ´œÍz]Õõ­;·vöæ‹%W8IòÕ*–J()ƒ0|þôÉÛ·\ÛH6kßw£Ð—‚ Z#¢(º<Ÿ0Î,ÃD˜8®¤ÚÄk%dÔl¬+ÊjÇ´/¯.ò4öûV;/r &D™Y^”†aPZ Éê²TJ¹¶EQøëõæ·Ÿ.áîÎN»Ý¦uÝíuî߿߈ëå(å˜V#«² ”ºŽƒ0!–¥Ÿ¶m{g»nœ$·nÝv\?/ê“óó4+\×ç\\^]!oïŒô E“x«ªÒ±¯ã‰Ô+KJ)ñ¿ýå'u]é,nˆTš&º‘ ƒ†Î÷±,K×7!D’$š¸bYV£Ñˆ¢¨®ëÕjUUÕ|¾'aЯ@å(”$)­Y]WŽãX–9momo ‡CÎkÎK¹ÔÁsp.WëÍd:§œ—E!²lWk³š•€äœ )0F–í„a¨˜Ïgãñ$Ëô6‘(‹ cÌ(MÒa9[LhU÷û½~gpyqiƒÖõü?þwÿûë_G¡Cë´Ùyº²-d›f³Ñ¸sûæÝ{wšÍðòâj½®.Ç1§•m»{;ûŒ €Õ­[·LÛ<=¿n@lr!-ÓÂRVIFwwFœU³Ù8ô]ßu8£Jpã~·WSNk ¨«2Ó ¾ëRa•Rp%¤iQ¶š­ßþö·®ãBg‹9BÐ|˱Ã0 ¶mûêòr±˜•yÞl6Aô¬ö`ð7ûw‡‡×Z­öf³~ðà¡e·nÞ´-óìä´Õlà XÌçŒÒápH @HiF¡ç¹c˲³¼x÷Ý÷6~øþÇÅrEmôÎÎÏó² £0j5uÿ­¥”x}¤þìU¨ð¯~þQ–eœsÛyÅ6M³Õj!ˆ5’@2uÁÐùDº°é¶¶Ó¸®»X,‹¢¸yã¦išI’/ !äz½ö>¯êl“l(£®ëž_^>yüǯ¾Û$)‚°†Í(’Œ¹Ž=›Û­æ|2v,Ë 0Ù¬²,å”aˆ0‰ã”cLimY&¸(Šª®¥–e®–ËùbÞnµlÇžL'´¦Œ1ʨaš¾ïàœ–e1O<ÏŒ5›M¨€”r6Ζ+Ëv?úäãfíìîAx|ür<žLÇãß}þùÕÅe»ÝL“$‰c¤‰q^æÍV«b¬¨ ?l@ŒÒ<%ÄR½<:^¬6—ãI·7ÃVQ”“É,l4‚F`»Ž¾çié@+ ÿ¿S¥ÇƒBü³Þ6 ò ù =/PŒqÛv´vª+–ã8¾ïo6›f³‰1Ön!˲t¹ ³Ù|<ooÚíöÉÉàäø´Ñh”eÙív1A}ôa»Ý.Ë"l„—§RÖŠó­­(ÉKÈdºÈòj0ت™(ë #ð<aUœ²$K“v»ÝˆBÏs[íŽeY¿øÅ_”eñôÉÓÃÃóÓÓ ð[­¨(‹ÕfÞüÑÖ¶išZi‰Âæz½ÆPý·ÿáï§“ËÁ ƒ±P’)Î Œ}7 ØÈó"^Ç·nßyãÞ›v #åÚFÍhV¾ïO§ÓóóË?ùÔó[ëÕz1ýÕ¯m8_nmõW˹똪4Mh]¹®ë¹îb¹ôƒFšeÁÝÝ­­!c4Ž7u]Ù¶ÕlFÁª*…àœ³²,Š¢4ˆj¶Zq’TU4‚².PÍ(Š“MÔh|ðá?»ÿ‰ëº‹ùb2›vÏ{üèIoNŽÿ»Ï‹¼˜ŽÇ›ÍúÚáa³qÊò<©êº®ëN¯[1–•åpkhYÖééÂ÷C!åÖp'ÉòO>þ”q zðè‘TÀõ½¨ÕŒ¾^èÒw;¬íÈZ+Ðð%þôþ» ˆŸý ]ŠPuÅôš1–¦©f¬×uÝëõÒ4Õr¼Æï8Žc†eÙã Óé´,«Ùt^ÅÞÞ޵뇇‡ÍfT–¹ÜuÝ<]›˜–Ùjuž<~†m)`4ŽO΋õz½Ñ‘“ÂW”((Ó~â¹vÔV‹™ib 8 *ä:¥BªªÀ¥Èól¹Z¾óÎÛ¿úÕ¯Š2'„ˆZíÎhgÿÎí{’‹f+‚JΧãéxüÆÝÛ´*ëªp; |‚­+AL„‘€1†¡–µ,¢”Ò—n½aðjR¥¤ªª*LH#Š\×Í‹¢ªk×µ_%™aÂSB¶Ûí"ÏÂnÐxòôÙÑ‹#£¬ÈsÏuûýîÁþíØçÇÇ/·†Ã^¯ã¸¶e;¨Ùêõº¨³óóã“ó,/ˆeÃÌò’&@äìâb½Ù(‡Û[Aj‡‹žë³¥³Ð´ÍNßä~‚|™øƒwoëZU–¹¶ÚiãT4t›¾ýiúŠ^7Çú*—$  Ùl"„Â0p]'Ës)ƤÕjv:Á°ßˆÂ­­­Á`eéz½ò}Ïq%­ ßõ…«eÂ9ÈòZ)trz~|tªp=_oÉ*¥TCˆçyŽk‡ÀüN§=ÜÞr\{g´ €l6럴ßï^ŽÏM“8–CˆafY¿ùq9ém IDATÍÊ’âÞÝ[Á!Ù¦zŽxUY0Áh]QJ®`Ã(«:Cb1*ZçY†ƒÀv)$\IELA¨ °-; R‚F#Êò¬(‹<Ï “Ü{ãîÎÎŽm[|¿ßíw:mɤ"M²8I 1·¶F”ÕišÕe¹Z-—~è-‹åj®¥úƒåÌq­ïxÐéö·¶·”±°)…ƒ­íÁp«f"+ ñjµÚÞµÚm×u)§¯YÚ~°tø´n­t~u+¼ÿÁ–eÑϽe™¶mbAèy~»ÝÖSÍúò}!¤÷s´¥ç¹eYëÍÒóÝÅbéû繺®²,u]Wfd¯õRáz³ ƒ#œ§Åþðe«5xñâÄqƒË‹I’¦m·Úßw•œQŒ ‚P*Ñé´;½N«Ýé÷ûÍf³ÑhÓ\¯×þðìÙÓ^·çºnÚ»X̧­f‹@l&PêÁƒ½ÞÛo¿É8ßlÓ¶«º¦LeEøQšV´æ™ˆ\ÓÂaÃ'UU>žŒ}߯êêÙó—=ï´‡YV1Æ_<~óæ5‚Ñ7úªÝŠîÞ¾¹Z/ÖËE«†A0‘Rq.060&BÈ4O‘¢¨a{ŽaÓ±FE]Œ Û4MC!!À&1V@Õ%C§Yªi~àߺ}kk{ •øøãOæ³ùñññéñéz½ö=¿(Ê0j^¿v=‰7‡û{{~ü!tûÎͺ¬>ÿ×?Ać[CÓ2Íðàààýßþ1ÍóíÑN§ÓŘ„adÛ.BÄõ¼fÔ¶lGï”+[­v§Ó)êª(r-yꉟރ•Rêþ]¿Í_[­cø£÷ïi¶ cL®cœs!…Š¢(˲Ùl–çyš¦–eéåÕ¤Û¥TÔ g³‰aÕj¥QÕA~EQY5­Š²¸¼}ú$MÓfùApvzšå¹ë¸UÍ™P’CÃô’´‚›¦ ✙&a¼ÊòôÁ?((167L³j0Ü. Úétß{ï¥ât9Ÿ+Ś͆a§Ûr]7Š¢fI)7qB©°LË0­´H1Fz¡^Ó‹ª\¯×¶ã8ŽcÙ¶Þ²‡RÎÒ,çLfi.¤hD mÇc‚*¥Z­Öz³úÏÿü›§OŸÕEutt´mçÉ“g»{{qœôû½~¿7›MmÛPfizíÆÎîÎŽ8˜àñäÊñ¼Áp8™Î‚ÇÇ'>ŒÓ¬Ûí6Ûm1@Èó}¥àj³Ãâ…AQ“®?¯Ç€¯u(m×ñÌúoðGïßÁéÆ\¿ BB„pšdA$I²^¯µr¯‡k7Û‹ÅÔl6“$IÒ„ ¹½½[ÕìÚᵯ¾úâødsýpðÙ'{Žƒ êDM‹˜E’òJø®%BâœS„T¢È3N©ï–éÌ›ŠªËéR"âG­8-Î.ÏþðÇß½ùÆ]ÆØéÙÉt6!ú”²ª*ëš–EÄiQT„†isÎʲ̲ŒÖTp)…0±L‹`òç¬NF)Ü$–ï…qšY–Ùh5ã8f‚5;­ªª‹²øã¾z÷Ý÷þûÿáüñÁ£Ó³óÓÓ‹ËËKÛõ,Ûô]Û±7›Uè»­vBPWe’Æu]_»vM?“ýA½ŠUUkÑ{±\µ»ÝÝýˆ碨ª‡?>ô}ÿÍwÞÃ0Ïóª*Çùóýõ©Ò÷w}ž^8)%þ7¿ø!Dˆ¡=æ„ÆÔZ•Yža×<·¬Ê2Ï(£Bq# ¤³ñØóªæQ£í:¾m9¾ão¶'ç“ÕlUæ#kwÿšFa«ÇZ¦å/ÿò׊Ÿ|ùÍ7ı×M²¤úaÃ;?=á¬lT€ dNž•ÝîF’—½n¿Ýly®OšMÇ¢ª‡½^’lt² >™Ï Ëéu·“¸˜Ïßüéëûïßi7Ãt½4Ãa»Ùô\C c,U•漨g– …¨ „-B0@@BŒm ˆa„Ÿ¼8½œ¬6вKšÃ‡"Ù¬îÞ½MLóôìÌõüÑînžåÓù¬,ëóóK @QTBß c ”L! ‘„&&a)8†0ðœ4’#@)©`DÝÞ`¾œÇ6,++ D°íx‘~ëòr2Ž(ã¿ÿý'ggwßxK1rCîh4\Î&CŒaàûç§'›ÍFp¾pÀëomat9cª²ŒáGÝ÷ƒF§Û• 0Îâ$™¯;»;×®_cUEëJ0–lbˆÑkè•>@ZÕ*¼ž‘ „´Â {¬;¯ï߀$`5Eù®çû¾I Ji]VJ©ÑÖv¯×ËÒc<èõBeU€¸T&6§ã Thz5_NfÓ¹àRd{ž‚$h¶ˆíŒ·»½7nþþË?ÄI"ýë¿þ+LP]f–eÆ«…”¢Êóº¦P‚º¦»Û;~Jš­&д, Ä&^%˲¨«C\Q*„$Ä„ˆØŽ÷í7~ÿûß­W+‚Ñï¼mbèYÆÝ;7GƒžcšUQ,çó4N¡„`Éh^¬{ÖþÞnœñ,+âMºXnŽŽ/fË5¶L츂hY›d³¿3ê¶š›8^mV–i@ʪÄÄ0°±··5"Ã0ª’®×kËr|ׂ†ï¸JÊ$NʪÂJ!Ö«•e™!aÎEYÖ‚q‘P"ÍlPYžK¥8›M"%@ûÍ“él½Þ<~ò$j¶ï½qï¯~ýoÃÞÅùÙf³"FQÃ$ÄsÝV«å¹®í؆i(lÇ…çY1¹ºRRÔ”%i6Ïí–6ÁiQ „šÍf¿ßÏ’4IFk×w ÂÖOò“¶ÀèŽêõ—þ¼š…þ³w^K¨ÚË ÝWñ:ŽãøuHUU›ÍFïuµÛmÃ06› B¨Ó騶‰¡ -¾ç¾xþÌs½óÓSÁE]Ó².±I‚FrÏ´íª,Žc®Ë­Áà»ï¾ýàý÷1¶iù¾vrDi ‚ ÓjqÎîÞ¾]±ºæ¬Õi•yaZ¦cYi–)êºN³Â4M€0­9€˜†ëßûíf³i5£V~ðÞÛQègéf1Ÿ®–K`³ÝîtºF ’•å:Y¢‘ï{.„Pû)ʪž.?>yJ%h´;À´¸TˆUY„Ž“¬W«Õ*ü­áP*‘ç™e›®cß½{GóD=ßcŒZ–Ei%9×9J¶mc‚¥âZð|ß¶mLLÆc!„1R`ÓÔAùºƒÙl6ÓéL§‘ݼys{{¤ÕÁétjæ¿üËo÷÷<ß¿¼¸‚uÛ]ÎEUV„{{ûUU¦¹^oæóÅ>{þ‚Qê»Î ßwW*`˜fÔj×”¯ÖkÆEQTuM£¨Yæ¹RŠÖµeÛbcí\×K÷ïÚ”ðçÅ "„õóWë_ü§”RJÁ)U h°€žj9_;´’$aŒéõ\Œq·ß¥Œ1Á}׎'­f³,JÛ¶ˆap%ˆa@Œæ«Åd>Ïç'g'ç§ÿ/WokY–ž ­i¯=ï}æsç)nŒ™9OU•e·q•-Uµ …í6-ñbD£æ !-!žú Ô­¶hú ár•ËÎê²*³rŒŒŒˆwϸÏ9{^#+òVŠót¥¸'NÄÝÿ]ëÿ¿ÿNV——vnl}ûÝo-‹0ô-LX]ŸŸžŽÃ00A¡ï×uÕëvÆÓIY• ¨<Ï VKK½ÀõòzèynY¶mû®+„h·ÚqÛvìš±Û·oGq|5 J(š áxþÚúºïÇU]#„k&Ì^9Š"^׎ã(%mÇ‘_ €Æyïšìyݶ_wWZk¥5~÷¯p.«¥”˜@Û¡”ZÄÂZhÛvŒ{Ñõ‘öÜ^ˆ<ÏÍ®ÐP!\ßc¼ÖZk)‹¼ð}Ïv0™%„¸»¾¯´Æ»žcÛÔó—Zvë…{wã0‡·nÞèvÚ³$F+ËKUU¹ŽM©åx®R*¯Šñx 5àœml¬¯.¯ ! ¡Œ1BhšåEQÛ¶WåùùùéñI2ZDwÚå~WÉy­¡êtº——W'çç\jÛs!ã ðVúíV3Œ£Øq.DYVXÍNÏâ’ ® ¶5fY ŠÃpkuÅ&زp¾ç" mÛ C¿E·oߊ¢àâü¢ÑhnnnH)—z=Æx’$ót¤Ô‚H¥5UUCˆ Øh¬!™eY2!,Ë"ˆ8¶£¤L¦ ÐÐ÷üíí­Í­óÓóýðGqåY–Lg¶MólQ–…Vʶm ã :íÎÕÕÕÁÁB(n4Š¢ØÙÙét»£ñèìôäÆR `·×ßÞÞ©j^VU³ÙÊŠbmmÍd«yfÐ…À¸פ+Ó­K)Mª—üêeô]ÜX¿dCU `Œµ– H°Mìù|žç¹Ú Ë1fÛ¶YBGQ$„ „$I2ÆZ) dÍ«^§?›Í„RNkØÙŽ|h<] ÁxÄ]DÉÅùyÔîúž—§YV’ñ°åw:m8!F›T3Æ+ ~hˆÆÃÑÖÖÆ8Ë›››Žå°ŠAƒAžç¦ùMÓ(„(ŠªbÌq©yHLˆi^ »Dkm¢C’$ùÆ7¾qxxxuyhâŒkË'Ÿ|’-f½^çÆã©ëC?úè£Ñh†áŸþéŸr!¦³äƒ>Zņ\I5â ŽŽÇIŠ-º²¼:K3?ˆ´ÖƇÑó¼Ñhä;¶ÙÛüÓð/LIÙ¶mÈXædz¯ç‡Wîß4¢¹&Í¿ªê²ªæ‹EYU5cYž)­ýÀÇ„8®{v~~yuÕév¨m†C.¸Ö:Š£f³a>F(+²¢,©íH¥WWW›­V£Ùxøè‘bueA8K¦RßóãÓI‚ ÎùÅÅEYäy‘‡A€1Š£`ee‰‹š±"lqò,½¼¼âœ;ž_ÕuQUYže‹E³ÙhÄñgŸ~2_}åÁÿ»?èõ[Û;[UU$Irp¸ÿþûïûa¸˜/鼬Ê[·oÙŽý{¿ÿûaîïy†ÃE^@du––s&˜OöžîÝùe®tVB©Ï~v÷ö­¿÷ÛïžîïsVù¾·X,꺞LF¾ïÛ6µ0Y,ZéÅbñäÉÓ§OŸžžœMÆ‹XU]bŒ³<ÏóBY”¥E,‹P/ð !E^„Z­v…J)JÓbÇQ仞–ŠúôñÁy2™B‹99î÷:ï¼ù:²®Š~¯F‘ç¹âd1'„( Ö76ò4?>9:==]]Y^^îó·%g£i²Ðˆ(D’¬HK~prâ´hÜlÖ¬.ŠÜó¥~/ }ÇÙ{òåÉÉi]WÝNÇlH¹`œ1ι’²®ùl6ËÒ¶ín¯Ÿ§™”ÒÙi­ÁJ)Ë¢yUYc5|~³¨º®g³Y’ÌŠ¢LÓÔ<­ååBˆIV{ë­·wvv¾üòË,ËÂ0Go¼ñºë:Ïööþöoß;=>ƇaØn·çóùçŸþÞO~‚0Žã¸æl±X Œ-Œ766×Ëó2Ë HÈl‘9®Kˆeº%€Ù.™¡Íø¥™¾êšÚ ”2SÝõnç«–Kâo¿ózà‡‘¢|î=,¥Ê²¼(ŠçÞFB 膡"ŽcãÖgvÚÆQhcsR3VÕ5c"Ëó²¬!BÍV !$yûíwþþ÷¿¿½¹óèËG›këë'Ç'¶åìžOF“óÓó¥^Ÿ3f;vGËK½F#’k­ª’9ŽÛëõ—––¢¸A)«z±XÔuÅXí:6B:Kç5Ëoloܺ}c<:Ž}çÎíf³Á…@Y¶Ýjµ’d¶¼¼¬¥ô}OKuvzòäñ£n»Y9µáxÖêõ±̲âøüòg¿úèw¾ó‹«+l‘£££½§oìl½tÿž`ìâä„Uu«Õlµšžë2V Á󼘌&@Ã(Œâ8¶ˆ-åW;.¶ëH¥4€aÎÄ$M3†ZHˆYâ)åx8¶©Ól6µÖišÖu}cgw}míã>N¦ÉË/½¼º²rzrŠ ´,úå£/ˆ…ïÞ½×mw?èuºÍf«ÓîZ½8¿¼ºìJ¥\×s\¯fl6K–ûýv»=OSB¬,/!Jƒ0Š0&زDL0΄ˆR‹X–mSCš2x•ùõ0X¼a‰šù?”`øÖΪÑÞäy•çešæÓél:™Rj#Í;Çñ}ßèaêº6ëg!„!¼©ç{×R°(Œ!æç’çÅÁþaY–Qß¾s›:ž<~róæ-¥ôþþÁéÉùãÇONŽÏ˲b¬Ž£x4ÕuiΆ( «•Zè(ˆšqœçÅb±`\8Ž“©eŒt£UevóÆf¯×Æh%€Ò®çÎç‹‹ËK­µãº–E!D0¬,÷[͆¨«d2rŠ4^Z]½ŒÒ²Þ;<'™DT(] 1—–úëë«ê8 \Jöž<>=>]Y^ÝÚÜ’R.¯¤RA‚m‹B…@#˲Í–s¡•’BB„ʲ¬ªZQÖ!,¥²,‹RjY„R‹ç=­t»ÝéõzF3\UU»Õ1`w“ÉôÉ“'iš*¥&“él–(­ßxãõ0)¥”XBˆÀ÷Í7t:(ŽŠ²,ŠÂõ¼N·Ól6lDZl:M"ˆX„ÐF³¥5èyLx]1­¤mÛ”ZBJ­º®µÖ&ÙtëæB4@øÊœÌ´Tøåï¤i–ç…V@)ey] B,B1Bal4õAØŽƒ’J]§ ÔŒ•UU–¥qÀr·7£(&„æE9›§EY)ÎÎϵ‚uÍÏÏ.þúÿýÑ{÷“Ç_>ÒJ}öé§ÓñìÉã§yVŽGSV1%µ’j¾˜+)‹"ŸM'óÅœóºÝjHò,?=;=¿¼,ŠRJ)µ$ Ázýji©;ßxã‚A–ΠLÓt8œ_\J)¹”Óéi!àu-æUžöºm‡’“ãã~©¿²zr18>»Ø?¾„Äj´{a£ýèËÇ®ç7›o¿ûÍå~çêâôâìèóÏ>ÙzÂ9Ó`„]×]^^¶(ÏçžëI©$—[¶mcLêšEaaÂ8SJ§iZU5Xäºulj`+¨…\%d³Ñš®Åð”Ä­V+Ëò<ÏFE¾,//--/­¯¯í?Û?>>ž'3!D·Ó-Šb4 ƒª®‹²˜ÍfÓ$!–Õï÷””„`ÆDYÕµç½þÒ|‘ø>RJ\ϳˆ¥”ÄþËo"½2RÓ¯÷ìæ@ÇqžyVض‹Bˆº. C?+gÿ?v„9™(¥f™c.ZC‹ð}ßÌœY–E!¥Î²ÌöºýV«#¹ºººšŒcÐÄ| IDAT“ªªfIR–ågŸ|~5ôzýñxÚï-B ÂEQI¡¤Ô³Ù"O“dæú-ïÄ]Á¸ÂÂØ÷œš‰<Ï0†\0×µ¯ e¾¨ÊEYÎ+ÊÒò<‡ eòEQ¸AÐl¶"ß¼ŽÂj§XÌlŒºív]Vë[›ÃÑ—OŸž^­nÜܾug–UÃäl÷ÖÏwŽööž8UÅBŠzk}ýðÙôáGçg¯¾öÊêòÆcÌó‚"ÍÇ ¼B(¥ªëhdÛu]á3A`ù¾‰Ç1B*®”Zi ¿z0À¡’saÎ63äqý'Ÿ|A·ÛoµZgggZë­­º.™àÆ[ŠR*5‚`}}Ý<òÇ %‚wïÞmw»Lð““3jaÎCJ©Ls­t-8µœëöÆ?–e™­ Ƙsi&V£}7_›UÍõ®Ð\_RJ-üêƒ;I2K’yU1#n –… În¶‡¦¼,ËʲÌ4솿eø©ZCJmÆx–åˆÐ¸ÑŒ͸јMçBŒˆVhÝëõ€Ô¶ë@9cUQ9¶Ûë,šÍÆ" Pk-z›§Ùd<.Ë¢Ùl­¯­A0¥ÓÙ´Ùle…  këk­VS)Çaž/Ç–Šk­êº„»ž+%€•9B•5“RJ¦Ét‘¦Ô²z½.Æ8 <‹8ŒYÍ ¶7ð¼@< ¤Ö½~×±i¾HÇÃ!`y¹¿Üë"!ZÎEÉD’ó“ŸÍ³¬Ñ ~ëw¿k{þ“½=Îy·×B·E’—ãËËFè×eeòøñSˆ0«F:M¹ëZiž_\γ hÙ6¡TC  @qΩmI-,b1)´–@Æ*­µãQ-cYÄñÛ¶}?Ã`QÊ8«Yíy>Æxcs½ßïžÔ¬Ê²L)Y–ºÕj Áªº†¶mõú]ÎEžå³$ùøãG£‘P²Õj=Û6IË&‚y¶(‹zž•iQøA”eÔheU–%&€˦¶9“¨E‚ÀW’_³F  e ˌׇYQEQU5Ã÷_Ø.ʼæ b`›õµ’œ×ÁYšVeí{¾çEžcD¶6·€†'Ç'÷gÐ(ÏòV³øžE¬v« 4ȳ¼,r×uNŽŽŒ—æööfQd³ù4/Ò¬XDqpqq®¡¬®.Õ¬ä¢jwcÎ Ë‚Y>¯ª¢¬K.d§ÛGÈnõV®Ódº`\SÛ%–eYY””Z®ãt[--5Á6–ä Úß©@ÔËËŠ µ˜Ïâ0p0Š|J1P¼´ÈÓEYUJk0×èèbðÓ_Z™Õ¬³²Ò_Yé.õOŽ0ÄBWgg?øƒïWivr°¸ŒƒhmiõÆöN2' .@…àÕ`t5ÏÓN‡“²¬d«&óT#͸À”FQôâý+«+QjÉâQeYZUE]—˜@BP–¥qCm›Ö5+Š2 ú¬=~dÙ–íØWƒÁÁáíØ@+&X¯Ó)мªÊª*]ÇžN'u]õz]Û¡«ë˽N?Ž¢^·€æLݽ{×ó<ˆÐöΗ Òîu‹,Œf\hJí0Œ\Ï¿?]×Å]û[}ÅYAà ‚9´´Ö"BÐÐ`eY€”ÒI’PjãW_¾UUc!¤%`ŒAˆÇfŒo‹Ì5mÛF®³´´d˜æ³ëº6á¶Qi­“$1>¥³Ù̬)¶¶¶>üðÃ<ÏG£¥ôèðh@‰ø~U³ÙlžL'£a‘gÉtRÕ¬ªÊ¸sãË%”‚`ÒZB€VJIC* Ãp÷æN‘£ÁH™$³4[H)úkKZ«V³Ç«ê/¿øœrÿþƒªfiQæ%ˆríÞã§Ïή&§ƒÝ›/´š½Å<&û{{u^ÚAJ]Ìç“Ðóîܾ5"Û!ÔÑqÃi´¢õ­µ¸ §Ë+ÍË« A>¼Z HƒÝ]ŒÈh0xáÞcì1ͨã,­¬lon¯¯o<Û;hµZ®íb„ó™’* ‚ñt|58¶+¸„J!··¶«¼ Fk+kZiÁÅ“ÇO|Ç‹£¸ßíß¼}S%8 ƳÙlmeM)5M¦Ó©ââòr}} ìzžë»Yž)æóœR's|\›bºA@®ï>´)†ë[ïºaWJ—eIaŒI©Lóí8.~ãÕ»E^Õ5Cˆ@…aÛvÐ>_T´Þxç1Æ’$1Î3fÅm@Ø¥¥¾mÛ­VË8…$Ib\µLF§Ó9>>69(Íf³ªJjQ×q¢(T‚³ºÖ’ ÆljIÁ›ÍF»Õ¼u붬B(µº­¦”œs渴ՌÍÈsL &ÈLšƒÁ@)åº6çÜ ¼¬*£FÔïtË"ÏÓt6›9Ž 1.ªêòr4IµPÓ´­_òp4+‚ÖæòêÍnwh¼÷ôéÕùÅÚòÒæÚêîÆz2~øÁ/#ß[[_â8+r¡™ë¡E6¹\ÄxcgÓv©n·§téº~UPY2Ÿ%ób‘÷º½ÝÛ‹tÁ™PRû^ÐëõQ# ¢óósß÷©EY–!}ß[ÌSßó„eYnmmÙ¶½Ôí×µºªVVVvwwÓ4½±³sóæÍF£áyÎ~°X¤wnßõ}ÿêâj6›m¬¯k >þøãù|Þívl×#U©5ÔH ƒ0ö<Ï4R†¯gÀOSXæë¯r€12Ü5 ù+ü]EñGF™r´m‡ýœN €$ D”UUqÉ‚B*©4±±,ˆ0cÅ L,Çõ&J˲¼À·m{2™pÎûý>!Ïu`+++&–èÙ³gŒ@]\\!<Ï“¢ªÊ„®ð½ (AFƒRg¥×Mgó²,!Žm·Ûùl”¥sŒÔêJ¯ßïQ‚„`”Xþê—㢨<Ç^ê÷ÎÏ/Òtž27#Àx<¶04+ó£“3Ûv³ª–QÇ'š hUBlÅí @ü/C]I÷nÝ®Šy2®/÷,$=ßÍòTk]Ô•T*²Õµ.¶iZÎJÎÖÖVvoݑ޺uçñ—Ï’IB1B\œ^$éC­_üâ}BÑêÊJye2™ÌéÙÙ Õê0&´,lÛ& žçø8àœ# כޯ³iâ9îÚÊêÅé™è;îùÙÙàê !Ôl70Æ^|©Õj>;š'³Ý›››ë_|ÑìõûeQ»¡ „¤‹¬Ýí\ F<§}šUžQ½›ÜÙ5“ýëkf3 ^ƒPBŒ,ÓÈ#„ TAU à×^¾ÃŸ;ò¨¡Ö@Y×€Ð÷=)ežçFBxíŠt­v5à»”cGq§Ó–Rîíí ƒº®[­VUUívÛ°ÆÇ1~cYãØ¯J ”’i`! ”pŠ –¥„4,†<Ë}×u(Å$É„±ºÙŠ———¢(0ÑN‚‹ƒƒÇqÁ„ 0뺴,+jÛe‘Ÿ—E™.R%ã!R”Ll9~­±BÖdž·) 7]TÏž>-й%üîîv:NÆžmû®†!µí¬¬¯ãó‹óÁðÄv(±„éáñé“gQΤÖèÁƒ—»­n:_ŒGS›X‹yvyqq18ÏóÌq<Ï÷Fa-æÙ|>ï´:ŒÕÆß"ÏOêPÁ¤ë¹¦éá53‰:I’¼þÚkqBÂ0™WWWqO§S5`|סýN[+éËÂÐ"# ¥plj!TUUY”Y–A­1DKËK6µÆ“+!y…KKýf+)Š,««ª(³Íõv³†e‘²,͸Óé 'cƹ¼È3ŒÐ,IêºV aœ–Õp:'éx–¦%‹›õí›ÈޏàÑe–¸T6Bke©Ù í¥^;O-BÏÓš|þèɇŸ|¾·8Î÷žž ˆí?{vúþûGƒ«‹'Oö÷Þzë_¸oZd¹cQÁ¦p¶(ÙlšÌ³<Þºs+Ž›Q¥mÇqlŠ1¶÷pUJ«ŠÙ¶‹ ò=ß„—Yþèáælp¨óÊ˯œžÍfó8ŒgEYÔeL§!`ºH/..µÖ¢º®¹˜‹Òd6—Jçy¥Œã†9± Äíº®9/ aøk»ÒZÙ½Öœ~Å_^LfÑÇ9'Ä2a}"üÍ·_ö¼€RGp)¸˜(â0 ŒªºÕjµZ­²,g³™Öº×뙣ˠ´óù|±XE9 &“ñ“'O¦Ói«ÕÇæT¬ëzgg'˲²,Å ¢,ò8Šlµ@! ’’s×¶çÉ|<Îg³ÙlîØ6 ÕjæEžfsBHA`d"bi£Ñ¸ÿÅ?üÃ?˜ÁâììB̧Y^i­”ód ”B´ÛÝ~¿Ï¸@ĘZŽ+4Œ¦ ‚qâºY>ÛÙ^¶±ÜXiõšÞ|2Hg“^·)_ߨ\dճó>~8™,e &ÒÌ„ÎÕÕ4+êv§{~:aœ?üüÑgŸ|vïÞÝï~ç»vóèàYU•×Ђó,ËóùêÊFè‡f#M³fûž¯”ÄVRdù"$$p×p¼òùõO,/&›ëK@«²¬Ö6n¸~üw?yÿÙѹã5¢¸KH0›g¶O“z8Jmê+I¢(RO¦É4™ìïï-fɽ»·Þzëu.ù<{ž‹IÓl6çY®äŒÛ®£•Zæ‚+­\×£Ô]^^™L&Y–))ÏÏωe½úúk€^¯·º¶úèË/•Tkkk„^¯»¿¿ÿòKnîîúžG™N&‹ùâôìôèä¸Ûë+¥¨ã¦iN,ºÈ2Ûq××7…&ªÑh˜ÑÞ±ëºFÁajBHv\ûÚÀö«jƒcŒHžç†U%Äó0yB~ûu]W%«ëZp%„B* Ç©Ymz:×uMÒ‰9Mh`š¦&suuÕ²-¨u]W†žež$‹¼”J·Û3Í\σ¦—2†D†‘aÁày¼’$›Šºæ„j ´Ö ë­ŽÖàZÿñÖËu]WeÍ9\rΆԦ£².IM£ÑøºJßDÖ˜„Ò(ŠÚí¶Ö*[,‹¹ñd3”Vãqpp°X,¤”ï¾ûîÚÚÚ`0‚À"XÖ5ÐJIáy^‘e®ëj)ŒÊvB, tÍÌšRI)Œ`Üs<­¥N§ÓEa„§“Äu›XÝNÛ÷½,ËÊLëç<3Œƒ)¥Ma™b%[!±R\ 1v‡Iv±zž—¦©A/ Ò÷}%Ç1B(Ï+×÷, ›ˆÇqF£Ñ½{÷z½ž™f«ªZ^^>??7u‰ ¶ D™´_ó[‚£@T•Ъ¬+Ó B„)¥®k7[q’L Õ‰R0›Í0Ækk–…«¢à\bŒ£(Š‚ ͳ¼¬lÛv(eà–õò‹÷²,;=¿LÓ¬`…¨ ÙÖÚr%tZÔDòóý½f+ð@'B‡º‚ƒ<yÎãÎÊü3íü{ÿÁŸýùŸÿí{¿¬*qãÆÍ'·vn4›ãÓ£Ùl憑çu€\«î?ø/oþW_<ú*Δæ%f³¤ÓlF‚~oùêj8%WWÃñ4ÿë¿þ¥äÖÝÝû÷_èõ:½þ2W|pqé‡AÍ¡–Úu]Wp­õ˯½Š’ŒR(­mÛÞÚÙŒ·{m¢áæúçÜÜeZ룣£õÍ(Š.†£ M‡ÃqQÕ`Ï¢UUsσð9ý/0è¨á,\Æ!ª”Ôú¹‡ûWûß ¥×'Üõ꘿ÙhM1bü<\΢ŽT@iR[AØòüP*`QÇq}Ïlǃˆh «º´02Sƒ1·,keeåÙ³gfTþùÏ~vvEQE(Y—@=× ˜³—R!$òçëqJÏó,j;Žg»Žj „à\j©YÅÒ4£”F~ˆ¬Ë²( Œ@»Ù²mzvv–$I§Õt¨Í ]úÒýmJ÷~øÃ¿±1pm´Ôiܹ±ùð˧Çû‘Mï¿ñ.ƈRÊSqôìœÕ8+µí¶ú½ÕGO/¾ñηÿáŸþG‹ŒÿÿÓ?·,k}}µ·´"”´,ËI(.a§×â¼þåï?~òùøþÁßÿÞw!¬È?yh»Ô!øæîÎðòJT|g{s¹¿²ÿìB\äUÅêùbñøé~šçÝ~gcs­ÙŒ²ª&”Úž[3fs¾º¶&¤¼ºº*ªòÙ³g‚ñû÷ïk­§£ñ,]\œžmom.mÛ.Ò̳Ñh`[ØìþšÍf·Ûµm[)Åj¡±ö¼ÀóÎ9BàZÂõõ22D?ó(Ÿ/)áâùQd^†¬¾Š¼¶r¸„áwÞ|Ù|džç¬2N˜Xi%”r=§ª*CY4Â1J©Éi2íº®Ñrh­|Ïmı¡/›fÐE³Ùì‹/¾8>>žÏçÆÄ»ªªº®¢ÀG`„DBJSàæÖ¯™ùaì!@˜1Q³ !mYB 0†áéé©IRyúôé³gçËË “¾Eªª9 (-¥d[ædÙ–Å(Å®ë"„Š,ͳ@e‘v¯×ÉóÒè×€FQÔPJÍ’…E±VÒs\)yUUB0ÆX¯Óm6›WEîz¶ñ§´¹¹™$ÉÝ›7N/ó¬¼Næ‹B*½±²´½u«LÙRcE(€Áhžp %¦vVèJÔßùýßzñþ­Ë«âÿßþ !dS‚ üßýæ7¾õν¼÷Þ{ÿóÿò¯žìC$¨G0ÅLˆ¸Ñxéå×?{v¼‘¦9òà‹ÏܾyãÆmÛ ×Yò}ê¸çW««kÓyrvq^× ˆpU×û‡GÃáxmeu}uÕ ü$INÎN}×{éÕWªªÇ[[[5c®+½Àï-õ—V–ó99¹qûÞÑé)“@ÃÒÉtÞëÆZ?o´¿F)–×* £J5Õ!|¿¶a¬º¦ÐH©¯õ®øõ×îcb Ʋ,W@û‡1aŒI-Úöh4²mÛ Í$ ¨ëZ±¼¼ìyÞùùy†UU­¢8$–%•Ja0žŒ›­æëo¼ùÝßûîÍÝN§[dYžå­V|ztìØ4›/XÍ«ºRi1!µ”µe-4ÄÄñ@i^1!-ËF÷º½8|rp0ŸÍ]Ûº±¶z{k+òœV#.Ù‚ø:-yV³l^äÙL”åµä0 ;E®“¤HÓê•WÞ8:>¾{ïN£ììn<üâ£~õóVÜÈóBÌç{ûϺý>Úö© “òéÞ~QVu67·W—ÍF£¬Š²,lÛö}ß Öf3cõº¦ž›M3‚# 4ÀSË®«º*+Œ,›:b‘aa°šŒƒ0 fõ(”à’k¨Ab€ ÕˆßHÆL›fn\ß÷¸;Ë2c±ŒšL'”âšå\ñ¦û¡7MÏ.ÏË÷Þãµ] ží[H‡ŒôË÷_HÓ@˜y‘\+‘-‚ŽçÅÍV#nE ÇuƒñxVT¥ãxý¥^QeŽðD"¡•F[˜:¤,JeÆ\))±,›bH”`®ë³ªÜ?9\])%^¸{GAœl‘fQ³U qÔê\ ‹|÷Ö‹áàgïÿüÍwތµüá`rq6p©{çöí{wû‡ÇÓƒÃýy6Ï‹l}sí­·_ktâxä]WyñàõWëÙüÓÿb·¹²Ü[úäoßÿõ¯=88¡HÙ!ÝêíV¼Š'‹$Of@À3òèËvssyywggucíµ7_»÷ú‹OOößûÕ/ÎÏÏ]€“I%ÅQ»ÝGÊúø£Ïãø|>Ÿ/õ×êš3&¾øüóÁðtu­“åów¿ý+7Q³ªØ¯?úäèôt‘ç—Wã;÷î…ac8„1Öq Á\×@ù¾oYøë5dÚ#ãÐñÕ0ø›X¯º¬ „œIÐH ­$¸æ¦_÷jà+Süî·ÞñœBo&Ƹ’ZJuÍ”0„‰¢PJ-//'Ib4òžç•eU•¥’²*‹º®\Ç £$˜ÜÜÜγâ—?oïñýî-„¨Ǻ±»ø~YæB0‚QYWY–Ba£*òY’ÔEɫʶ,J€E P<<‹‹` ’‚Zµ, ÐRr®¤$ˆ»b^sjÙ­FËvß Y-lÇˋڀ¢~Шˆ¨ÙûðÃêZݾóÂß{Ïqýÿæ¿þ§ß~÷·ï¿x¿®ªÉt2\„aðÒKoî={ÂX½¾±vëæÍî½øú›¯þ›Ÿþ0nº«ÝÞÁÃÇmå ¾8ý_ÿ‡½B{“ýÁ`ÿÜÆôío½ýà­û ”ž,Nt¾óýßÛÜÞ\îvWÛ•VÃEPÕUUUgÓáI %r­Í-¬Í-‘”ªÈ %…`|6UeGa¿×¡%Ó¡”,'{{ó„°(Š4ÍÌ6Z~åëmLl}ß7hûöööl6+ËÒlÅó?>9Z^^Z_[ë·_{õußw4fŒUûöþõ?ÿW?ù¿~\ rY[Gál2‹"ïþËwv_Ün®„íÕð…Wî~Øi4–[í­•¥Ýõõåv; ƒ¸Ý¤5˜%§ƒ‹Ã£ãõ•µ¦mõV›~„±Ðrž$³cLD‘g;V:O¶·7ÂÀ{ëÍ×|ß;99¾ºº‚¶Û½^«³¼²¼·÷ìôâ¼ÓéÆV¿¿´¹µs5‡CÑúúºEíç†6’sΕznj¤§×šæßÓ×^á¯à«0kˆàëò ~ãõà+­Ïuò%cÿ_S×Ò#ÇU…ïûVUW¿ßÓ3c{<± ÑÄØ"¶ƒ‰ãXB²ÌkdŠàOÀ† –€Ä!ŒBBHÎ’ÛŽ=“!¶ñ<<Ïîžî®®êzݺU—Åuo®Jµ¹RÕ§sîýÎ÷“pfh&l¦FÕÒ÷}×uËåòÌà•$‰ëLD(T¦*¥òââ|ÞÎÇΰ?ˆÂÈ›L¡‚ÕJu®ÝrÆƈe±RÙžz“ãao<J‹¥eAÔ´l Œh­R²sc8•±Á‘ar €ar†a*Aˆ3Bà”ÄQH 6˜A)¥˜D)¡„PMOKe€eÛŸ=x8»žçŸ<¹œ¤Pkg÷°×®®^8wîõßÿá.¾ù£茜ç›Ïé;¿Ð¹víê™×V÷Æã¡ãŒ&“ ÆäÕo,ŸêZ6ß:Ø“Yj ³]iGÇÓþöþ\¾:W­Ñ,ëîzîñÄé…ÑÀÐsáÔu Δ͙iÅb©1ß®Î5£Lxîtxä·ë ±F¾¬’4L“å•ÓçWWKEsÐÛüãA/M‚µõµÏßwÆÃœ™[:ÑmTP¡õõuÆáh¬‰˜±3®Vkë_lBã8Æ„.//O\1êA–¥¦iRJ´ûTƒIgHz•V@É$Ñf!í.Ôòý0“Ùèj„q†¯\¾ð•Ðïÿc<Ž…>äë«Ál›0 uIç«Û¦B$"ÅG~!¨TJ…‚I)â(3íAoàŽ'£TЕӧÃQ:“QØbÁ QN0GˆFQL#Æf£Á9cœáT4‘1&$S A$q!o×UF°eY*Ë,Ë2 B˜Ie™J•°\­C„O,BÆÖÖ„”2SB¸ež>Ût=ÿÆïÔ­?¾;8Î/œ´,³Ý¬C ª•âÔ›´;Í7Þyãüj±P à4¸}ûÏ¿ýõï6·öÞÿà½B¹vðâ¨Um½uéJ÷ÔÉùN é¸}»@æê®s´ýlÃëõŒ$}}i…g8Ï- DL¥c£`•µ ªZ¥ÖiÏM†ýéÄýâñ†ˆb…áFø±ˆ›Í湯)M×ô¡ˆe$ÔÖöþþÞR°`à ÞÜÜN¥¼ûé?×ÖÖ‹¥ÒÔ÷·vv»Ë+£ƒƒC„e¬Óé Gc=7—³´š\ÔÚ©03ÎÏ`0["BÍ4i¨Ì쇚˜ÐxÐÁ~ûÛ—Je¯Ò_Œqwâ)õRDA)Õï !ºˆRJÓéÙ4LŽy„žçêŽçœ1Ó0M#©²s¹$ S‡¡?qǦi$@ŽÜI1DÜ%LÒë12¥(ei––ÊEL7 !ËÌe©„ d©¬×ës6‚€3f0ÎÇÉ$ÑS¥e"E"ÆŽ“/æ+Õ*ÆTo4Oœ¨77oÞêõ‡ÿºwO&Ù{ïpóæ­÷ìíüìç¿0 “º°07™Œ”Ó©S(ÙJÉ+—/w—»årÕó‚OïÞßÝ9pÝÀ*ÔëN«9OMÃ*™•…²Õ°$õ›_º~¥»Øí4ç¬w"´ï«¨Ùù¼Áa–EI”` `–*eÞ(V–Ú &5|ÏßxºíÆ>/ä?ôHD±J3¥¤iòbÁÊ布¾7=Ýmä-šÊäpÜïõAFì\Søðá㥥¥ë×ßmµæ¼écâz^益/Ëå cÌBÎ9gÜ4 gâdYªÿàL’ð²aÉ+XÑ1IUM9ië„ܫފ٪%øÚÛ—gáNS[ºp-e !Òþz„^ê5xuÓ4Mß÷ƒ Rf©¢ˆfiÅAúi*(%a™È4Qãz½Ga©RÜy±½¹ùTBUi4W*œ*ì8DTA²·wäMÏó“4u=—0*¤à¦Êç ™L!€JeF£Õj mî Ë2‹8޳4E#ˆPˆ j­:\o’ì›—Þ, ¾Üúî÷¸a ˆ/^¼xýÝOž|yûöŸ~òáO¯¾õÎGw>úä“,,Ì›&S@ŽFý;wþþbwçêÕoålûþýÏþú—¿9cçìÙ¯ÿûñ£/ÿóß8JVμFL2ð´È|0Ý:|^iŸo>ÙÝzfAtþÔÙy³$§sÅšLÆ6òdÒ8I…ˆ ÄFýaDvÎ.Õj=g0òýi1DOw»†Áööwƒ©Ûn7:v¥Ztãz½¾µ¹*U¤* Å`0àÅ ýðû?à–98"‚3¥†Ç#€p«Õj6[aÆ"‰ã!œ$‚P¬uW=FB°Y 5-¢Hk\5<4žfIL«kfI €úlê')UøIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/matrix_autocast.png0000644000000000000000000000175011722777314022471 0ustar rootroot‰PNG  IHDRð1”_gAMA± üatEXtSoftwarePaint.NET v3.22·‘}{IDAT8OU“ýO[eÇBfâ?°˜“e›†ÍÍm€°`ö“Æ,&übÔΗi!(ºÈ$Ä-h˜YæâZÝ€EšJ)0hÓ gÙŒš,‹vsCgT„n%k í½½/OñmÞûœ{Ï=÷žïùžïsn¶™§”,•oÉ¥ì|¥Œ+_åÎG¥×iÊÆR÷[ëT6mªÉñsª àAIÖìÇÊ=[˜Ø–¦L)¤ëh¶‰nfY‰Å™üìÕmÁßíB™ XòmV\+iIÀ€¿ÍFǰ4²¶ÅÊí8ã‡Ó[ºƒ÷ßÂÄÙnÔÉ1$#®!0kÕ-y‘kUά€è¶ÆJj™‰£í ”l£sÛzšr{ᦀ˜†T°Ñ +t-I°¤¢¬5vi‰d&X¢ï½ômädÑfú?l"¹rMX« £¼RýÕµ5Ô:«©«}G­“ÇÛÔ9Þ¿Žæ¦>q¼ŠwwŸo ÷H#ñåß ˪´¯úÎz bi:3W.Óqì.‡ƒ˜ ;i°|ëÞƒuøËvÑUºÿ±aš–ºˆ-Í òù …Éèi¼].ê‹·óîž'ˆÿr‹ä¿2ÜÜHOÙV:vlÆßÖB"ÝE¹ŒÎÏ×oðã÷Q”w°ŸðÈ9²™ Žtì)¤që&®EBøßªáLÉ&Úw>À¡ŠrÒ«qR«)~˜‹2àós\Dît»…‰o±à¦¦néû£ëé|n/ýBß½ëž}šCM¸~m†ÀH€ö¶£tuæêÕ+Äï,¡†ÒÎ-EðÓ*. Züã%ëé(+`êä ¼g<8NZ[[ñxÀý¾€O Û{Ù`0ø£ßÿƒŸû¹ŸqÎ5µv§)ÝÜZ§$IÒí6O?¾½½¹¾¾V–ºVkÓr<J)!„”bŠBèÂ{—÷û£|" û}ûÉ­•Õ+W®>þøã Ó·ß¼°¾º¶½±Ž¼›™Îò´·½5??‹"0Æ £ÕÕÕ,›`L榣Ü9À#„ D@„ЋÏ=}ôèáF£Ñëõ~åWc¿?â¾ñoãVxóÖísçhw¦)¦ÎÞïîöÞÏüý×_ÝÞÜôöÎÜ{/‚?=Õ zSÝn§Ý‡ÎÍÏJ––nk㊢PJU¿Ó9‡Â‡AH)“Rííõ溓ǎœ;súÃ7÷÷#ß}þm±X?ðÃ_ýêþ™C‡ DIÒèõ¯¾úê[o½ œGào.߸µµ¶Š €1‹ÉXe™Ê³Õå¥2Ë¥”‡-Ôëõ[·oîlïèšÍæp\8çœs!!Bˆ1 ïýd2‘y‰±¶¼ôÂsµDDQÐétþ»_üåý¾wƒïr‹õŸý—ãÇ~â'Ÿ<óÇ_ûºRòæõÀû§Ÿ~lmeãÂÛNÞsï…·.\¹|9,`Lå“¥[7SÓSa(¼ó››'OÚÛÝ]Y]i6›ÍV#‚½þ@G±ÖJJ!$„`Œ Æ”RÎXQÈ÷ôóÏ<þ—_ßïÛóoïZa=ÿÅ¿ j'ŸzÊCpýÚ5ˆçžyaô[¿ù›;;½C‹‹¡ž}æÙéN·Èòc‡sèAFɹùgôöö&Á(E¯×k¶Z"µZ LÇŒñZœ¤i6™¤Î9BB¨:…A”ç¹1Žsˆ€Ê¢€ Åœ÷Þ?ù™Ï?pú·ßß×ûôoŠïNa}á{\*5ÌFÞúwß}w4œ=w–Súøe“ñ… ®]½Æès[ßyý;íf}g}åÊåÎ?üR²ßëµÛí¸{è´Õúf«Å“JIc‚@8ç­uJ)c¬÷cL¡„@Dãñ¸Ñh–eiaŒ8qÂ9#uÁ9‚š—ù8Xc9/|öño½òæ~ß°ý|·…þê_ù¯Þï’ñ`$Ó™ù™Ù¹™Ã‹ õF- Øûï\è´›<ü`žf7®]ç”®­¬~ík_;þ¼.Šêñ¨DZ¶*MsA†,Aöý¼,)gI’4;mJñxœ.ÝZ y^2Æ8çÞ{ç8?Ž“$1ÆD" ”...j-KSÔQ³Ù¤”JYH)«×KUbŒ Â?ûó{¿oÞ¿N¾{,ÖÎÚðgÿúSdr{cCiùŸüôO?÷Âs£áðÐâ¹3÷ÍNuß}÷Ý­­0Ÿyô‘“'ïyæé§÷vwß|ýûNŸîímy/­“›k8ÂX؇0Î:ÝŽó@D(Á;àƒáÊÊ ÁÔ‡1‚!$¥T¥´Ö .œ³„`ÎY»ÕäœqÎDÀ”Ñ" 8gBc¬sb1"ˆ@³?÷Øù³¯¿õ]²3~7ëÍWßjÕÛôûxõê7¿óÆõ«ZkE¬­­½úÊ·ß½pa{k?ê÷fϽÿè¡ÃFët2R…¼yëúÆÆæ©SÇ’šØÚÞ@F»ÓS…*Ã(½÷Áûã,eŒ‹ @sJšÁ`l­…zïcŠ B 8&RÜj5¦º!¥8®'i:¦Œ॔Ežk­½wÞûPÖZ%¥ÖðÔc?óÄ#¯¼ñÎ~ßÔU>ÝÂzí•ïüÌý³“4ÛØÜ}‘÷ï?ø‹_þÊèjµÚéÓ§?ÿ¹g²ÌaŒÂ )KyëÖÍ^ow{cûµo¿Ý®‰“'O~õ¿²|ûÖ7¾ñõËo¿{ï½§²þdsy}õæÒ?úØï÷¿ô¥/míl.¯Üj¶âó< ¬7ZÎ9í¼³ Þlh­)ÃÞ[­µµ>‚ééiÁƒ(ª-/¯‡Ã0ÃI:Î&®^‹=°!c,Ïsç!HêÒ:ˆñ„8ç€@€sn2™`Œ)ÂXkœµ#‚C¢éõzƒÁàùÇMõßùïí÷ÿÿǧÌb½üòû[ßüþ/}ßS=¡J9ÓÅ0¸zùú+/çý•_ÝØØ,ó2OSY”¦.L·žêqS¦W.¼³~séì‰Ó»k[ðÛ¿»róöÉc÷ü¹¯~õÅ?ÇÁ/þ¿ c” zýííë!tcsûÍ·ß”-.k1ÄÈXÂk)Ó4¥˜ #­Ê©©öp8,‚ç>û ÁXpî¬Ë²RJ1ˆR^äFØYÛm·eYbˆ•TŒ°8Œ€RJç¼ÖFJåœ/tÖ¢Z½&ÂPrêžcW®}šŽŸ&aý¿ð7žxü‰ËW.½òòËFã‰Çž¼yóÖŸ~ý[?ÿ7áOþøO._º´¼¼¤Tþ=_øüÉã‹ÿé_ýç¦Û;Û›K7o­,-‡L;t¬Yoaˆ¿ôý_ºïþû~ôüÌüÌíÕ±{NžØÙÞÞÞÞN’f«ÝÞÞí)cvww·wvŽ;^¥‘@èµXßj´µ”Îé0ÆÈf#iÖ“f³EQ–e„Ƙ1–R†‘÷€QŠ ŒÂ#$„PJ!„¼÷BÎyY–išq.šÍc\Y]o4”U²T8BY…Ÿ;÷îû÷{þEùÔëþ¿ïÝË~xå·~ó¿þêëׯ_¼úêëßøÚ7.¼óöÜÌT§“ì쬞;wê¯ýµÿ¼ÕMAk››7nÞRVOÏÌLÍ΋(¦ãs?„8fãBk‹ÀÕ¥ks‡i£{;»k««'Nœl¶š·n/·ÛÝ@„ʘ¹¹9E˜1FÎA(ea:gBa0N»ÝN³ÙˆâПçƈsB0F­5@BHUþ§,Kï½÷B蜳ÖRJ)¥ãñ¸×ëe1==l6[QM&iš¦eQ.ÌN/-¯î÷Rü ñéÖ?ü?É_û¿~õêÕŸúÉŸú§¿÷ûöGþÌ¥‹—þèþ°Ýj=xöìW~ðKßûÅÏ•ÅøÜ÷<öøƒ¯¼úr!eV‚4+Í6aôñ'Ÿøì /¼ðÅ/J-ß¹ôþßþ•_Þ÷6vwî?wö{_z)‰âÉdƵÁx´¶ºqïé{ÛSÝF£C$8”#1ÂBp%€€1„xeù¶óÆ €½çžSÊ:müh8Œ£¨QoΊ,ÿƒ÷o¯¬¼ÿþ{Q}æ±G#GûÌ#ç_þÓo.ݸqôð‘ Nœ81=3-¥†Z)½w–@„1&VQ­@ÀXm­ÑZ¶;M¥Jç,&ÐZÃ9ÃyçðÆk !¤($FH)‰1ʲcd­©Ü/ƨ÷ÎZCÖZ­­­~pñâ^¿…A§Ý‰ÂP)Ýëí ööÊ"—²dŒ »ÝöÅoí÷ýsùä ë¥çŸ £¨(Ëþ ß™û=ÿxuõæå‹ïnnܦ 貈ƒà¿üƒ×¯^ÝÝÛk5›÷ßߥË,-ÝN’:ã!‚hÐ0Œ/¾qk}ãÖëË·—¬5ÍFòèù‡f¦§ú½ÝoüÉ×éoýO“Ñ:/Ëâí·Þ²Î`9çJ•Œ1£”b‚ @:c5Ê(¥¥÷@7=Ý-ËÂX€ÓZ1F!DÆhï€ÖÚZK)ó2ʬµA(¥ªÂ¬Êå8ç8ç”Ò4M‡Ã¡5FÅ…À[k!DÖZïœlqqÁ:3è÷š­úéãs—®­ìó:ýsø„ ë¥Ï>±±¹)•΋ÂXûì³O>pö´ø2®±ÅÅ™$;íV¿×›™3Úô{£v{êÄÉW¯\Ò“§î…ä“l<¼òÍ—ÓÑèúÕ«W/]ÎÓ´Q‹‘wA-KFWjeiiùÖµåå+—?”2ïvÛ óóJË"Ïf¦§¥”8àwÖY œGJ¥’€@v óÎï‚BŒò,ÀAà³Úm¬5R–„`Œ%Ä9ëk6­UQäÞ;ï6:®Åq­–çyžç‘ΣT§Ý>vôX:™”EŠ û/<{þÂûŸÄøÖ'QXO;iMó,!Æx8 AOÝslskymuIpT¯…Î(‚q£ÞØÙÞ[^Z5ÚYc!ÄIRg‚aHÞ½ðÎÑ#‡¿÷»¿;ìõ,:yâØÜÌÌí[7–n^÷Â…W¾õ/~Päã…ÙÙž{† ˜åãɸhÔ£C‹óõzb´ކ„`„†@!„Œ Á”ˆ(¢(`œA ôcë´÷¤µ.ŠÒãœ/ŠB €Ç˜PŠ9„ „0„žZYšfz‘s& #ÆY)¥ó¾( cŒ5f0Œ=L)ÀA`›­Æ÷|Ï‹a(:MtñÊÚ~/Úÿ“Oœ°>ÿè¹I::à1&€4Ët/ëk33í……é `Î*J±ÑfwkwcmóÊ•«E©ƒáÆÖV»Ói4[µZôΛo~桇’0¼üÁs33÷Ÿ9 ^é½'ŽuÛÍPðþÞöí[7nÞøpuùvž¾øÅ/ÌLwï9~xqqBP–¹õÎY‹0"„0FFÐCĈb,¥D0B0„Z©2ϵ”Ö˜0cFAÄ)£„:ã€÷#Θà”3Æ(Æaç“ñÐhG@–y=I´VÆX笳6 ‚0Œ¼÷ÍfýäÉ“½Ý)ó ÖÙÏ?ÿÙ³÷Ÿ ú7—÷ö{éþo|²„õܧ”6y–Gq̹°Îk„œÓ?ÿçþlK·o‚“8òÎomnïíìjeÓ¬€/>TJyãöÍþ°'Ëâ©Ï|fa~®·»wóÆÅ…ù8e–F¡°Z1Ff¦;‹‹³§N8qd±UOºöx2âŒ>¼„b}}u8ÔI»ÝÎËœQÎ8§„x¬w!ô^‚ì¼sÎBˆÁ²TR•Þçœ1BXY¬ªX¡Êîï}U!(Ë’Ì9—²œL&õz²ÛÛÍò²”eG…JUj¥ŒQAÀ9§_ùÁ/ÏÏÏ^¿~EÊ´²º173}kysŸ×ïÿÂ'+ ­µÃ(#BÈ8·¥ÔÖ „ò¼œ[8²¹¾¼¹Ñ†~P"ý~™JÁ“©©Îx’ö…g´UçïýòÖîÚp¼ýc_ýá# ‡õÚé3§¢(ÒZI•SC`‡£Á°¿ œššªÍ¶•Úš~o ±V9DÈ;Ä¥(/ÆÞ[ˆAëóçïsÎu:]©”ÑŒ ¶Ö£ó¢üßùÝ8iº÷øD@߉ rLp^–Æ„Q:GQøä“O<ûÙ'ëõhkcuvnæá‡®%ÉÎîîîno2Évövççõšuvkm=ÏÒ|” &8˜àv»‰1¥˜hiÒñ„^–….K† §‹ ×F'©Á835]ùx˜ f´·Úa€#0Ê­¶Î(| !€1†„ZmŒVAĹpUFx€€±Jim¬*¥,dî`œ„¬7‚4Ÿ FÙ¹i„1¡Ä{ËAP”e¿×+òÒZ •®ÕëëÛˆÖ#Êci€4H[T”@è,¥\[ßÿAKû/¬/²phq>I’Ñh4Žgfæî»ï¾§Ÿ}z4Y«ûÃÁ`Ðcß{ïÉ™™©$IvvûO<ýÌ÷¾ø…¢(.^¼üÍo~!2·0¿±¶ê!6Þ"` ÈPˆ¡~fv>—ªÈe5N­TøÿÓB؆9ðQ, P½ÅZûñT#„B¨’B(‚ïìÎ9ïœÓF)%¥ÜØÜ ‚ €`™eišZàÃ8®×ÛZY¥ôp8ÙÜÚ* ÇI-©K¥&8Œq6ž(UZ§9 ´Ö¡µ¶ú–îçºî¯°{pˆ1EXà½÷À„ˆ1ÎY`­7ºô­µSS4MW×–Çãq­V{á…>Üju}ì‰íÍõÛKËÛ;[E–¾öÚkÃIš|þ /Qýý_ýµ?ú£¯-ݼþÀlnïÚbŠ)bbŒ•yÖ달¤Œ „„Ð0Œ,pZkc ¡aJÁ!œ2•w¨Æ¯cU(µúQWÀBX¥d^Xk%•Â(¥q{œs¥’Õ­µi‘ zKˆ`ggOÊ{¯• wºÝ.c @¡”!!‹ã8MóÇ“‚Œ1Ÿ?ûúÛì×âî§°ªo•s@ç=ˆR*BÄZ[–JJmlñ™GÏEˆÃ¨^K66®F—n/÷z½C‡%µX»pèp[[“ñp’æ{ýñ˯¼zýÆÒßýå_î÷JÀÒòêÚÚZ»ÝŒ£ ƒ8”3©óPiÕÇY(!”rˆ<Ï¥*sŒ1.DÕS üØ8Yk¥¼cç „U  rË´Ö!Áy>šŒF#kmœÔX ¬qÀCÁ€àh26e†!Æc¢KUäXd¤AWï ¢°QoFI- CBˆ·&I£$ÂÀÓ¨×ûýa5´c|ç º¯6kß|¬s§ºRÊê öÕ8OD•ÒeY"DÂ0dŒU­,¥Ì£‡o$ÉúæÆ·^~¥,äÖÎöÖöv½Ñj5›o_xûöíÛRË@°ûï;³°xäÞÓ÷/¯¬íloŸ9sßOüÄSl¬¯Æ£õÙØ¦ IDATÍÝÉxT–¥qŽÎ8WÚŽ'æŒó@¡‚1†Wr©œ!„x•ÂÀY£>Þï”RZëj[o‘Ƙªd”sn•γL*Å8÷¤iš…õ./‹;¿\¥Ôx8rÖÅQ,¨°ZcŒã D–¥”Jic´ÖRÊÉxì½ô{JéI:6Æ` !•ôÞA &'Žºµ¼?…û3Æè™ó§ÆÙD%˜!ļÎ!ï 0 këëëÂ3÷Ý;oÞ¼YO†M«]¯Å óx2N³¢ÔÎv;ÓINM·ót²±¾¼³»9ØÛõ3Ö8}æìâââÖÖÖöæÆìììüÂîwß.óâ7>DüЗ_ˆ¢(IiÕd2‰kµ0ŒFW·æŽk!4Zc£Q8çò"eÕj5cLå­gYV–e£Ñ ”*¥Ê²¬¤V½0ÓêlmmõúýZ=ÙÞÛ­%I¡d!ËI–ÎÏÏ×¢¸×ëF#‚0BHåh0ž››ŒÆˆ½ÞP„‘¶~8žTÙÆÊ^T6œñ.©·1Zkç!ˆsÎ)#„U~ýÛoÝý%Þ‹5Ý©9o ‚R÷À9h­sÖFcB(”q:™Œ766Ž;üìÏŸ8~(›ŒZÍV–æy)!¦`³Ñh¶›Ý©©ÅÅùÅCóG^˜ŸÃ„¹½yëö{ï½›eÙp0€4›õ¸ž>}šP|ÙjÅ÷œ:… ÕÆJ%ÆLpJ(È9ªV­òœ0B”Æ¡@!´Z'I«<ôÇ΀ Õ@:WùfÊX–ç{ƒ~šg!.¸Ö:Ïrg,‚ÐiS¤™Ê ŽQ6§“!gY–ç”2F ¡ŒTT›„…”JݹZŒ(¥”PŒq…W®/Ýý%Þa=÷™³ÆZç5€B ô•ªœ·Öu»]c4žqœ¦£‰k—ÞÿàÒ¥KÛÛÛ GŽ%Iƒ1võú©©.&~na~°‹'ãÁÆöÖÞvŸ²„‹hªÓ­×kÎÛN§uÿÙ3ãñpiiiww—Æ9·ÖBÂ0¦œxèA rw¨ü'J)„‚RüQÔ !¢(ªÌRÕhŒQJ¥i*„¨\øÊ†Ý9ùC˜MÒF£Á)¦“V·CO&«««£ÑHII.<ÔE9î B¡ˆöuN(ôK««a((f¹•£¡±Ú9€ „á;-ÚCã8vàNlõw«¤Ežç{{ûÐÚa9çÀ#¼z!€A„!i‘…µ0ŒÆ?;;9xçÝ7…Qþé7_aAòÐCu¦2©B'O΋tÐß]œŸ››¬Ñhq\|ÿ:¦b(X°{ãÆµgž}ꑇš™þíßþíË—.Zã0¦Õ"Æ„"-Rëóà!tXcª3]u†¯ütk-òOé÷ûÞû0 «Îæê,¢µ¦”VÙ÷BŒPT‹­wãIº¾¹‘™å9!Ä#ˆ< ”Bãd–ãšµDPRØŠi¹qV:;³0?»3'©ÒŠPá0‚€@„€pjœÕZ«*!im5Bwgg§ª»ËÜí­ðÌ‘©8®MÒ Â@Tm…b B¸:gÕ’08¡`f¶{êÔ±¤ {ùxÜl4ûýáO>uôØÉÝÞ`8ž´ÛÝ•µÕÑh˜¥“f#ÈÓ1¥¤ÕlQx禧§†Ö(.˜ød2yå•W–—— ¡œ3BXžçÀ¢,0¡˜àª$¡ªÿ´Æc!‚ ƒ!è¼ñÞ2JcœñÁ` µ®úmª ±²^ãÊbUB@„„Ö76vöv g£~OjÕl69cι2/t!kaØm¶e¦˜™m%!À¹ïÌ}÷Ÿä@¨;=#a”F1„%Q"‡U¶ªÊ`RB)¥Õ°¤£‡æn-ßÕìáݶXÕÝ—¥Š^U¼Uˆó® E–C„`wªÞí¶gf§…L£<-ºÝîh4 b2™LcÞ{­-!Œ³ ×ëoò¼èõz‡æmm_ìí æG“²ÕjínmÿƯÿoÞÛ^¯ç<‚ ÅFé(ó2C{ïì\p§1&„ „X«ïD³(©bñ•Yª\uaeºŒ1•c]ýQUÆ0geY.,,Ü÷à9©ÔòÚêúúº”R{P¤Y6Cë8ÄÌ#§t1ìÙÅút§¾µµÑJ¢€"\R‹XTßÞí9XEÿ«)%#ŠBHªMÙ9>*û Ã0ÏóÊ©¿›Ümaim€GBH0rÆVwo ôÞz aвt‚P6ž\»t…q\¯%»;Ã÷Þ… ë·WU!'ƒü­ ¬nî(í³\:tÔ{ïŒ]Yº™D¡.3F£pvf*ŒÄììÆSÒl7ww¶EV«Ý™"„ˆ,œCy.ëv^”I½aŒ›êv“(”ª¢ÎÇQ¤•*‹¢^«!)E¸µ8Žoܸ153…’¥,‹B)%8OêMŒ‰vŽ20¡ŒKiœãI¾×bÂ0%€Xëå(¯ol*£ï?÷ÀùGé÷†ËK·BF#!溭¥—k‚dãÞÌTãüùûx§×ߎ®.Ýq"’úÚÖNVHëD0 8g8ã½Â؆r„â à”Žï¤””à4˲.,,@£0l5›SÝæ‘#‡æ£Ãá ϳª.Å{ËÛÝÙ½uë–Özee%MóF£EµÎI©”q¡1Þ{o]Õïgff ”’<Ï Æ”P@YãF£ÐZÝ@ŠqGÕè=„P^äBgA•ä©ôW•¢÷ûýªM¾T%B# #„*UŽözÐ¥Œs¾ª~ÀgYF0îõúÆYïA–¦ãtÒ F“l4LK©&y¹Ó$¶õ>Ž“c'Žwv¶ûý=ïm­&µZBJ¹6¶:TÝcÎ9„(I’8Ž«4ùòÝx—„õÓÿÑ¿Ea¯'¥j6›„ÐÁ k5[×®]c”‚#ÁÖš©ngn~&Ͳ©é©™é)„àÊêZ·ÛŠB–­•V&Ï3Bç¬(Š8®Bó¬h4!)u%Q‰@H­z½~Õ¸EQ„Ad­Í‹Òœs£'N G£[7–†ãI†Áñ8]ߨJš‰u†sŽ1uªo3ÄÈ{Ϲ€èN©§R¥ , ÃjÊcUYU4n4•k€«¡„ Œ ¥Ô¡(Š€÷Æ\wÕFIUV5w•¦½ui‘!„+™Æq¨%€Î8;gyž„“$ù¸Ø†RFˆ'1ÎÂÀYUZŒ±òN­—'‡(FÛ;»:wÀÃ8ŽëõzQæƒÁ ,K¥JBÂ*=P~«¶¢»À]V• ðնBˆf³S–2¸½r{<vºÍ¯|帠ÁZ=ù?˜{“K³ì<ìÎÿüæ÷bÎÌȱ2+k誮fwUu5{`“l’ =MA†¥…aÐKï à ÑÖB€ Á Á°a@† ©i“EöÄž«º¦ÌʬŒÊŒÌȘ_¼yøç;{ñgÑ‚½v”î"VxqÎ=÷œoFŽ`euÍZ›¦ééÉñúÝݽ'µÐjÑÜY$ `«Ûq©ëxA™—XÉK ¬’`2Ÿ)«BAU¿¥ÔI)EäÙ¼ÀËêd8Œñ0Æ„à¿M,æÐ *¨‚µº"Ë[kÃ*u!i´ïúµZÕåyYæyž#Š¢0R‚ %eYVpB×u…’Ú’—„²Ì­ÕZ‡îm(F”¹@(e”JÓÄw\æûÅ£¥K0¤;Ž …ŸÒ„’$­û¡‘=»›A'Ü`†(e–¦ \÷œ¶Ñç”XÕX¨,Ëê_.«k+ó7ß÷ÝwZíæññ~–'­öæíÛ·ÆÓI§Óª×›ËåòÃîäy¹¶¶qåÊ•_ùæW~öóïîî‡gOŸžæˆ"w®\¾Æ˜›eÙbžôz½õ­M/ &“Qu¥Zk%J©<Ï)¥> „Œ1.Ê4‹ã8Žã4Ì%ÄT¹… ¬x/Zkku5Vu§º¬…Žã@ã8–’WwBˆàeQ@+B‚êÕFˆÂZ°L3hAÅ~’Š]Ï\†¾Wõ…ÔBy°··÷øñÞp499,—À÷À•+—.n_ºrùêááa¿Rî>¥µ€jTXÐÇÑŸ‚–*v â¼WÊzìPíݤäß÷Ã0Ä)m0aŽã*¥â8æy†1®@Éy–Bµ1œs‚!&" ÌyYŠ"ð|ÇwZí–Ev}}U±»ûÄ1©î)ÆÄ4p\fl-ô=—=Ãî=㔩DQY–A‚µA "ìàñ(DeÕF¥4Mc)¥ç;Q9­~@Õ¿ŸÃ9§Äºxñ`±XäE¢¸OÆÙBµ{+k½îáÉá•Ë×”[[[QdEþ¯ÿõ_þïÿüÿ0ÆÜ¿ÿI§Ó¹võFo¥#J>è'ÇGû„ Í­õ¯¼õæ/å˃Ñp÷Ñ“Ñh28›äyqttôôéA¯ÛËó¼ÓéEÊJ©´±Æ€ë2ß÷*çˆ0 0AâS,^Ö\'€q.ó¼¬$ „à ðÓ<Ó\ #˜bÎy’¤²••µz½È!€*Éã8®F€<ÏF*Ý©„•X3¶,K1Œs—Ë%FÕui]/ÃÐ ˆ 0žL ‚Œ1BŠ!q!D[]>ŸÏKÁ™çz¾OI‹"ž/¤ä%Ï¥@„V2‚†‚IõRñ\×ÕÆäEšÅùDüœZ¹7é–Cp¯Û.ŠAsãÆs›[W>Úƒ)c!"[.~þó¯mm]zùåW77/x^ø³Ÿ½}ãú-ñ+¯|>ðýV3œ O».ŽB÷äøàG?üÎÅÊÊês×o½ôò+Íf›Pêû^Á³Á0Îó"ŠZÛÛ—•±i–L¦ãv·­ÐRF*^§Âj°Ú[íõÖ›õ/UY ¥¥Öñe$/rL!¦Xk¡Œô|ßqYQI‘û~ˆ0iÔëJ©þYß‚V«9ªUcúôSžL’$Æe@T¯SêZ '“YQð““þh„à+++N«^¯õïÝ¿×étçw~{{ûÒp8øéOòÎÛoÇñc|õêµél†1Y[Ýètצ“åÙ`2/÷öögóÅl¶ˆÂZ-¬1t»½Åb¡´t]Çq¨R²×ëv:aÕ´B!DZ›²äy–¦i¬µ„Èb}ßó<BØé¶“$\:Ž‹³X¤Ô)5/E¿º\.“$ÏæÝN7K³<ÏeB«-ÆXi£¬-J¡´­6-E^TD Çq„¾ïy®WžMÑ´€ÐRŠƒÀgŒRJ„à §(sŒ+( ¨^¾çQ‚K!Œœ „H^®ëzž×ïŸqÎZŒ0%ä…ç¯ï<üÿÝÌâÇ’‹f³E!dx6RJ̹(Š¢PZP†™ãc‚‡" AœKBÐ ÃbŒá¢R2ÇAa !BÇq]­Ã0L²¬(Eœdi”ÖÊRŒ¶Xs4ÃóH¬êeT¯7¤yÆ}/ª7Áq·,Ë4MWVºF9!†Á7¿ùV«L’8¼^xþùç_xÿý÷ï~øÑÑéI¿VoÕº½¦¦Ùlnmn =|zÖFQÄ\§ÓîÕë••ÞÓ½ÇËå¼×ëAh•–ZËf«“¦éß-)¥5ÊåºÌqh–Æ„ ÇÅC ­ÖZJ‘$©2š`Æ9/ ÞlS`qš&œËñx|åʵù|ÇñÍ›7ó<Ÿ'Œ1ñp8^,âF£‘¦)BÀw×w–I\W<Ï <¿^¯cŒ³,« ÆJiµH’ÄZí¸B¨” ÔÀø¾o 0†Tj”Õ¬+ªÕª…!Äñ|_*!TÁ9/eYT›QÚžè3 úsúyôX?yçî7¿ö†Vvÿàðñ“½'{Oã8m¶Ú¡“““<ÏNû'q¼B”|T¥µ ÖŠ¢X,“G»‚0Ü޾츮Қ—‚KÁyY!è)¥c€êNŒ¢ÀZ­¥”PJ*‹-c˜R,' Á}ß“ZBÔ§RAT‰¥”±ÖH ³Ùr±\ŒÆSm­’ÊkÅ»Ìñ\7 ¼( þçñ—çôsz¾ñ…ÏÍf³ñxªµ'žç[kÖ××\×é­t]—u{mJÉx<¦”öVºá‡?¡Œù~ ”À:®³»ûp™Ä¯¼úü[_y£ÝiI©ƒÁý{éõ×_zée„ÐÛoÿ<Œ|Æ(¡Xíùn«Õ´V·ZMc|*S1ªyµÆZÍ(dŒVƒDkc B$„ÚØØâ\î>zl-|þù}?šNgÆØ[·nQJ?~< >þøã½½½( OOû­Vk2™Þºõü[o}eeeU±XÆËÅÂqœ²,*œ à¢’©ÕÃ0ʲTB2F‡ Ì¡•Gkõmœs×u ^*¥ü ¨¬VB€$Éf³YœfRcP’¤ZÙ$N=ß-òœsî{¾ã8s\ùžçûþ/îìœCÄÏ)±º­¨ÓíM&3©Æ²\._}õUÏó~ë·~óßøú2^<|ø0Ž}t·, Ïó¾ÿ½4›-ˆ`·Ó1F·:í­‹ë7o]¾rí²ÒÙÙêõZ­ž$éÙÙZýãþð{ßù¼âxîr¹|ÿʲܺp)/ÊÇOö´±?ýÙÏ󲀈ëµP)-¥ÀûžO)•Чi…aúaà „Q-l·[aè Qº†++½~ÿLkmB7-Çq]×+ò2I³~ÿìøø˜2A:ã8±ÖÖ¢šRZI%¥ŠÂ Ë2Ç¡Íf3 kõ»wžCÄÏ)±~ýW~ÙuÝÉdJAˆDQí¥—^”R–¼¸uë–µ¦ß?-ŠÂ÷½Ë—/O&“Åb)¸”R½ÿþûy–'I²¾±îø,ÏâÉdXÙU^¸p1çÆ›¼óÝï}ïlÐ'IÉ¥ä¾ï„¡çy.&ÿ_RÕWU¸u„ž9:£¬5„,¥ÄZà:D¸,xYÈ$É–Ëx8'q> ÆÓéÎÎÎt2owZÉdÌ9ÿã?þcÊØééiÇÆ˜×_C)uïÞ½“““££#B%´ÝnMÇï{A ˆ”RÇq\‡:Žã:e„2ZAn°R B±ÖºÙl*©cÌq@Â,Ë“$],e)ó¼H“Ì¡.€4MË¢àZé ¤ª¥ÀR‚ëõ:%xssýøðòáÇOÎ!âç´Ò¹~ýúr¹$ŒB½€]ºt©^«ß¹óeäààÀóœ—^zéÍ7ßô}ÿøøøý÷ßßyððèèh4z‡s½¾¶‘—Åοztq{ëÂÖÚçés®GÊO‘X£³Ñ/Þ}çéÞáÆÆV=ªåyì^­Vs"­¬µ‚°Ñ¦Â½@F%¹1 !„ D„@+‘E£AžçI\, !”šRÚét f„­­­7n|òà.¦Õjt:­Ö´á8”R:NúóŸlmmm]¼P…2Ú@p6Œ&ÃF=¢Âs°”R„¥4ð\×uJ¬ÕÕè¡ÂòXkËBxn ¤ ‚H!VŠFã$ÉžaŘk-¤Ô-I‘—¼Zƒ5¦b¹U& (´FžOÄÏ©b½þ…ÏÅq¬µ ‚`±˜[ ï>'õz=ËÒ4ÍzÝž5`±˜+¥z½^YrB Q¯·ÛÝÇOöÞ}ÿÝ;w?º{ïLðÖÖ&!x:Yýü§ïžžœu:+¾z®!\[]E:CŒÑF„p…³«ø9ðLCJh(#®Ë F®ëJ©Š¢\Æér™¤i1Mí>Yé­Ý¾ýB†‹eÜl6¿ñoüæo~ëÛÿê_t{Ͳ,ÃÑþþþt:Y,–v^~ùöÍ›·¼0˜L§¼(÷÷oݺY¹RJÃÀÃÐ÷=Ç¡ÀcµQ•®ægÏ$ÁËÒó¼ ï$D(Kó8I—‹DJÅ¹ÒÆ‹”Ô„8¼F A˜`J(¡”2J !BA`£Z„0øàîãsˆø9U¬8M²<“JH%40NëáÎ'®ë*eöž<½ýÂó”Òår™çù`0h6›Æ€×^{í­/eoo:"DnÞz‘+~t¼÷½ü(˲ÍÍuhÉp0J“¢^o×k­Å<^€¤Ñ¨{^´\N=Ê`c¤”ÜUÙcªV¢ëb×e®ë¦E^Ñ ¦ÓÅ2ίüšŸ1&ƒAš¦q²ð—‹"ŽYžV;¢¿þ뻲¶1Nò<ó}7ª“§ûO–iráÂ…?ù“?ùÚ׿þèÑ£ÿî¿ýo8çÈJquÙ!„ ´Á,ËK^)|ßo4jžïêV£Î%Æ4ŽSÆXžÊØ¢àEÎ…PžçA`‹¼ÄX ¡(0 Œ8BŒ!Æ€1Fi 1•3BÐÂsBžSÅúÕo¼%„(Š`¬ÝØÚZë­6-!äd2ÙÚÜ„ŸäyÇqQggƒ(¬]¿þ\­V#„Õë­eœ¶ÚZ­Þívµ{{YZ¬ô6g‚Œ)Q€`êyç2F!!¤”â™Ù³5Atµ@ÄaŒ¸Œ¹Iœ-—q§‚+ŒˆRöÂ…KRʽ½§„? ‚£Ñpç“ûûOAŒ9<ðCÿà`cÒh5µ6ÌusŠ¢Ø?8Çý~ÿý÷ßK– ŠI£Q¢È©”BÀ•Rj))Åžï<“…ÖsÃ,Ësã8\fYÁ…ä¥œÎæYš3æJ.aŠ˜QÁ*yFc ÐZ )jµP)5¢G»»‚;ç±+<§Š5 Ò4¥.¢hº»û‹_¼“/+5=Vͦ'“I…Ô^,b×u×V×1Æišú~¸±¾E¨ûGÿé߸ûɽ>ì­´<Ÿýð‡?8:îK‰çË´Qï•…öÜÐjƒ±“'¼u¡ ìB[¹@Tº‰J™O›¦C)D@Õô!ÏsΫ+- ×ѶxccSEQVæ‹Åb<»A¥Y|ÿþG˜Á ¯µ|õó_Èó\J=™Ï>øà=D0cî£ÝOš­"x::„¶ÚM)%0ºúcµ–µ(¬öK”RcLQÖjk!Á®R¦ÈË"/‹‚K)óR€Š¢(ò2"±Ö¶2yÄCk DÖh #¤­©|í „9/çóùp84àœÔýΩb]»¼QÅt<AˆV»+~¬­¯nmn`J¥Z›ÕÕ5Ïó6Y–_¸pRg2™L§³¨¶ÚM.ʼÈò4n5«+=Éežp%-£~èóÙBày¬×k[+¢­ÕJi)•ÖÆZ«”B(¥ ˜àŠÇæ0FSÚ–¥È N)˲üôäLE)ÓÆ¶Z­ýýýéb ¬×BÊÙ|Öi7kQýèà¨ÕlÏ&ã(ÿƒßùí,Oͦ±ÀXóü­ç¿ðÚ/I!çÓ…°Ì2‚Á˜QL°2–ñ2Îó̃ …)m´"màdºJ/—Ùb™Je泄KU‹šZÛÀ¯Y 8U…“B4£c±vâú!`W!4N!‚áýƒñ9DüœëþÎÞå‹ëËEì0/ ÓéôÉÞ£œ¿ÿ¿[kÖŸî=½´}‰ žüヌ0¹~íúÆÆÆ‡~8œ^½²ízTÈÅdt„ šŽÇµ Öm¯>ÜÙÍâÒu¼4^úžÓj‡Qz¬·\D³QB×Z[¡¥Ö:IÆßóBœó²Z‰%dž$‘ã“SÁåñÉiš$««ëÀ~ÿ âùQ0Òsez+ë¡v›í"N“Ùå 5ß?Üßë6›Ý^—Q¬¤ÒJ×Ãb uëʵ۷nx.;=>ò]vùÒÅ$M³4ó½ Ísc B¤Þh2Ï÷ÃZÖNûƒù4™NE.$y!„°®WÒ2æ…aÝq=m´ÖÊqœ ô TA,¤Íâ!æQÇ£R AYòvê~ôãŸ?:ŸˆŸú¹Ë×cÌ•B‡gq¶øÍßúõµõï~÷;GÇ'BÊ£ƒã(Цӹ¼×í^»vÅf‰ïyjmŠ<­±F[hq²ÌçÓ¤^k@(%QÍ Bæ¸(™0„m™I’U”yÇqeÉó%žë„ˆy½Õ5â°Ñd˜L—‡‡ûÿÙßû;IºTZDµ`<:ޤ”ŠB:ŽSrɹô}Ä9“TJùâ‹/yi-VJ9'„º®+…¦+-Œ…ˆ´µaË“Rhm!¨dK˜1 Ì²<+)e“É\”2žÇ¢<§!8g},Œ1ç©Ã¼N§Ól…‡ûûaPûÖ·~mmmCJÍ‹ò½÷>¨Õj½^G*~ç·ZëF-¬ÕB‡Ð\()ìb‘¹<<8œMêõ–àŠsîÌó<ÇA˜˜Š;Ê9'Wh‚êm_5Ș®B[T.­µ±ÚenÇZ[k`à…VÙz­Á° ¢¦N£ÑN'|òÎÛ?I²œRìÞW¿þµ×¿üæ_üÙÿù¿ü¯ÿ›çyn›¹Ñ—ßúú¯|ë7ï||ïîÝŸÌ€1."k›+ë›kŸìÌ‹E£Ù|&Üm,¥´’઒Ûó¼8Ž—I ,:>:Á#D¬…BÆ|×u3„B¡¤Zˆœó¬µG N’œRìû5B)¦D]¤·Oz¸wøÜµí4Íujõ°×k†gÍfëÍ7ßl5Û•3QYäëëk.\p!v;íK¶õúb9G¥Hâ¬,„RÖ÷‚^oÅó\Bp»ÝìöÚžÏ ´˜X¥ør¹ÐTÎF£áºn¹O…ÝY•xß3Utc,"ãÑd4 "Ífs±Œ³<×ÚX`/]Ún´šZ«E¼¨Øívóê•«³étçãOÆ“™ÔÀqÑ{ܽtå*󼓓cÌó·žÛÚ\Ý{ú8^.ŽŽÃA·×Í‹œ8´¬\J¤t˜W\ •E¿¶˜/D)Ê¢0b”­)Á®ã@`­5®K¥(¤(9Ï8/ŽCÑi’1æû~H™c-TÚ(¥­i’L/m]ð<ï»?¾sná>W Ò[7® „!Daè[-BÈ,ËfÓùÉÉñx4F¯¯¯—e‘Ä‹F£¶µ±Q«‡‚ù|Þ çóåp8><8.K†‘”2Ž—õzÍœ0t)Ã(­1ŠsΰC0©ä©*ªaH0©ø†žçUh¾8Žç‹8Ïùññ)çÂZÄñt:ÆBcìl>璟ͳ¢È¥àËÅ"Ë“‡ŸìüäÇ?©Gͯ}õ›„\šád6[.æñbh”¸qýòµ«Û÷îßÍòlsc=Šjã8K}ßÇs^*UraŒIÒd>Ÿ#ˆ1Æñ2fŒ)¥ò<£”ø¾ë8Ôqh–'\JKm$sp»Ýª7"‘VÖ÷jÌõ@ÚX0e®ïû+½5)EyžïœŸé¹&Ö«—jµ:ç‚PÄ˼V ]ׇ‡Ow=:;4F‡£åb…eØZ㺀P)Ôh´æ kQãêÕ«•̵8L &@k  E@ˆâAˆ+xqQæ\p„‘ë2æ8®çº®ƒ0’BÆq<Ÿ/—Ët2£F­A0ÑÚEY¯×WVV¾øÆ—(%Á~ÿT A(®×k®Ï\×É‹< ë­fY2ŸÅÊÂç_|ɯՄR®ç}îs/¹>é§w>xÿ—¿òÕ^z<žŽ9„J¨µÖ¨•VZcŒËœmÚ­¶ïy×®_½|yÛõÜ¢,°Æš,Oò"CØb ˜C#f´¹µV«E\pc°ãxáÊ]Ûš  xÁó,o6[œ‹'ûç'œ|®=Ö·ÿÍ÷ÿÞÿž”‹<·íVôèÑ.!dueýúõ댹³ÙÌqœ²,=ßqØJT ʲÀ¶ÛÍ0 NÆŽ¹®Ÿ¦iµ .ËR*ÞlnQÂÊ ÇZ¥4„!RE¥½æ8¢Jp¶ä\{žçº¬ú ù|>N+Þp³Þ:9TrU/Â9ï÷ûîÎN–%—¯^Ù¾|‘s~p°?\‰ë7n$˸ÑhLfÓù$ ƒæl¾ Þ8N2ìÒýãB$<Ÿìn®ö.n_jw;€4M“$©$€•Ö ô²´¨@¡•èˆëºJ˲,¥¬ôP3BˆçSB)cϼ¢Rr×ukµš”¼( kÉß®°…’æ›s^ RJÿêïžg¬ÏÛ@`0@ˆ‹‚÷ûY³ÑN’$ŠêÞŠ’ºV«/—Ë´ÈÛíVày=èt:e\£._¹N9>:µÖºŽÏ’©T|uµ'%Bßqh¥2¤´P !H0ÄÕ=ÈyQò€’’W…R†Rš¦él¶°žÄi‘å…–*Š"?ð¶¶¶”U‡‡‡œÝn— ¬¥\íõÂÀ•BÏÓR˜â­õqº÷ð°×³y’–Ü«/Þ~cD£Ñì½öZ=ô®\¼Ð¨5wïõφkë›÷îÝ×Z_ܺÔl6§Ó)  .Æ8 ƒ³³3×aJ¡ÅlÚjFûOŸHÉ ö!Ð") t»Ýô\ÎçÛ/n¬n0B¿ó×ßΧž"„›Í¥ÌX#¤hÔQ!…äõ(DPBÊ"³ZyžS¯E£"ϵã{N§ÝB(®­¶b-Íx8>>éK­¹RÍz}08c”®­­¾øÂíN§½óàÁ£‡Ãá<)Ï3ÐçXïݹwóÚÕe¼NÆ·ž¿ !ý«¿þÎÝî ×¢èÑîcæ°K—.^½zµ»Ò;9=¹óáÉtŽ Åˆr^ÖëQ˜ ðò"5VW[?!°ˆ`J‰ !ÒBåyV¹”@¡±@K)ƒ 0F#„Œgg­íø#ÑññÑÉñ‘à%eÌuܼ( ^2Æ<ßs‡`Bñ\·^¯cL&³Ét>àYoøŒ­´»ÓÉbp÷Þf»¾XÌv?,òB ™¥Yÿø4‰ÓµÕZ­®”¶ÚV}^£^Ãcœ¦qÆh¥„”ÂõŒa­i-ãxÙj7¬5¾ïW´ ç2Ïy–åEΕ¶Q½îx%¤ÖíµÏ_»~Íóðá£Åbáûþý½ó Õÿ»ç3pX½yíj)e½Ñ¸ýÒKwŸ<ÙÛ»yëÖëo¼ñÚk_ØÞ¾<ÆŽC/mo¯o¬¼'ëëóYâû¡”‚RRÙ»…‘?›MŒÑA2ÆŠœ'˜AH8—Ér‘$IQæÖZJ1!aˆ@¨âJ8RêÁ`œç…ÇO²,-y©ŒVFeEf¬©×k/]”RÆË%„°Ýl_¾|E”âÞ½{›v»Ý¨ï?ÝcsµÝnMgÃ8O­zoeµÕjfIÏ–ÓQ,8?ë/.loæY.¥²fyþú—ÞèõºýÓSJ±CHšÄ¾ëkµƒ¨a ÁB–%/ºÝv…l¶‹„Piš§I&…Fˆ:®Wï4­†”¥Øq*: Bh] . æÆ ­M­ÖÈó´, „ ¥˜€ DpÎ=/0Æ,—K„’æÅ_º{÷îÖÚÚ<ž ¡‚zRZðr<&IòÅ׿ÔívçÓYQEš·ÍÈ„Ãéd>Ÿ_Û¾þ•Ë}ßß?<ˆB§[ë~éËov{«;;u!E Ò+—/ml_»öÜr6‡ÐVèš~¿|rèPVEÔñ]—£,Æ ­ë2BQY–ÚZ-¬¤u !„0^Ê<Ï‹¼4Qâ „ÒI’¬Õ|ºšOÞ¯G Ì—ßz# ?ºriüø¼ýÆ?ƒŠu÷ã_ú¥×î|ôQ^ð_ýµ_ÿÃ?ü£KÛW*@ßh2îú¯½öÚõ7¤EQ¶ÚÍeó’Ä DAà‡‘o­v='ŠBŒQ­VH©­Ö"!”VAÔn¶´–JÉJ¡ÂURùz³Ùüä¤_äålºˆãøÉ“'¿òõ¯"ó<z°¿³ó`™,­F£Õ¸yóÖx<>Ø? †‡øn@-yÉy!y/gÇGÜ“ùÍÛ7·.]˜LçóåÜq<°K¼Ð ¿ð…/žöOŒ5”9˜’x±h¶šÖ˜4MjQ$¥h·šJI+_8£µ"ŒÔjµårI)ñ}Ÿ9Tk,À˜(¥…ÐJVAÕPZ¨ FãÑxçÁƒ“ãc‡9.\|áö‹ÿý?þgçåÏÆÅþöõëó8iµ:÷ïüÝ•Þêýûmmn¾tûvøgýÓår~÷ÎgýSBèñÃÝŽ—yoe}ûÒÕ0l\ÚÚVJΆƒÑÙ×{+-Â`£¾w÷¼Hgãq=ª7êuÎu­ÖX[¿•Þú/ÞyŸ/ B©”ë9Ý¿»wøäàh÷â¥UB ÅÖsÑêJ§Û¨5Bß%(].(Fežû.ó\X+¤2ÆVH?ð !b[[Ë'#¥MQp©4"ª­å¢,ò´Ónφ­V;õµµÓ~"øþ§þ™„ø³I,À÷~ôƒÿäwÿ ×éHÁJÎÎNßyû§ûûO®l_ÌÒôâÖf»Õ¼qýúãÝÝ4ζ/^Òb¨°LZka¡Õë5 ±TÚhíy~DRÈÁp0™Ž³²J3—uÚÝÞÊŠïyZßõ¥TYšs.óEYrJÙp8\YÝ˜ÍæýÁp2žL&ÓƒýƒÑxL ]ßXó]GYyvvÖýV»æ/‹ùta 0BjõÆx<ýðÃ{GÇIœ?=8Â`µ·²²¶Új5.\º°ºÖ­Õ]$FŠRñ’@€ URD¾ Bk* p À§ìBŸÉÈ#„ec @TÚæy9_&Y^ˆÏévÓéd6›µZmkm’diš~ûßü쳊ïg–X€ßúµ_ýèÞ‡vî».ûÜç^jµš”­¤ïûa6íŸÿüí~¿¿¶¶>›Î„T˜â ô}ßÅÚgƒLk õܘ¦y’fJ©z£æú#°ÖEž$IeìG0iµÚZik ¥ôÁƒLÑb¾ÈËÂó½f«iŒN³ôÚõ+v>ÞÜܨ5jOŸ>I³l<µ[­n§óêç^ÓJåy,„ÅË8+ÊN§Ój¶=ÞÅ„Ìç³½ý§óù, Âf³ÌZmµQR")¾ç)­×­À<ÚU xÌ3H)„”ÆØŠ¾1±8®Ÿ¦ùx2‹—™5–bj,‚O'£²,ëõÁ4Ž“ù|™¦ÙÙhùY÷³L¬?û‹¿xéù›­vƒQ¼¾¾  LF¨r©ä|<7›­~¿?=Ï/ nq]†ë9cMÅ/].P£Ñ,Kyxx˜¦Y§ÓK³Ìó=ßõŒ1EQJ) ƎÔ”œó“ã“8^.æó$I]×)Ê!$déznµšÔZ F}ctQæAèk«Ë2¿téb³Õ,ËÜ÷ÂÀ|ü@J„AšæR© »wqûržçnw>_L&3©dFk+‚犕ç´ç¸€(ŒÊ¢\hk ‚¨ÂÑJ|™c*À¾µ€F)µ)¥¦i’§Iª”aÌñžÎÂ0êõVf‹å£G»Bˆ(ª[`/^¸ÐmwkQ­Ñ¬-£‚à»~žå¾çO§3‚)‚ãO‰ÌaÌA ­U¹bÌa”ÙJ|°(€”2‰VBÔh4WWVZæp0â%·Ú:Ô†OÏÕúÿu>ãÄzÿÎýzÄîÞù°Óm]Ú¾ˆ€4õõµõz½68yž‡¡¡ÔiÔëŽÃ‚Às]a €…`‚Azn¥Åd:-Kî8>c, kA"Œ´ÖãÊx7ϳÙtRiD¿µ¹Ñh4´VF½Þjt» ðâxaŒÁ¾úùW:Öl>ÏóÔóÏñŒÖiž¿÷λëk¶¶°W¯\ì=y 0v\g>Ÿ ®|ß/ÊRp±¶¾æºn³Þp¦DÎ(¦˜<×]Æq»ÓÎ’´ÑlJ!‚X!}6Ì%YVc­Ö„0„PPAbx)Š’K©0&®ãR‚­F³^oôzkEQL&Óïþô3x þ»ç3N,@‘Ž¢(xë­7{½®Öz¹Xv:^§wzzº¿ˆ1Fs.,°®Çêšz„`„ ¤˜0&¥¢„â8Y,–R*ÂÆ\h¡5V”Âhí84|‚ÑJ® £p<eE¾º¶J ¢ÀuµµÕétòôé^»Ý‡.n ÁkQMˆ"I’ÅbÑl´<×-ó’Q¶ºº²½½ýÜ­[¾ï;Žçz>çaòÆ›_ît;À‚0DóÙ|ûÂJÑœä\øžŸçÅõ«×1¡aˆ°6¶ÚO#BŒ±Bˆå"± >Í- °Úr!Ò4ϳœ1Új4Ç™ÏfûûOú“·!@À³~:™N–ÉgÖÏ>±‰ü‡ÿà¿n4ï¿ÿÞl6í´;ã^·§µv˜7N󜻮ëº,ŠB×cÆ(Î €ã¹QQÂúƒáÉq_Jí:„Pi£¤6Ú8ކ‘çWŒu±\ÌÇ“A­VCݼy³2ǺzíªRz2™Dµ°V¯Ý¹óá'?yá…&“ñöåm„pš&J©ÅbqrrÒl61ÂFS~6è·Z-cl¿fÊ‹r2™¯®®s.â86Út:aÿìþGµÛíÁÙià3ku%b軞â…_t=w<P1ÿmÕf !Ò4ç\PêPJ*øCµ¬D F¡z½Þét‚Ð/ŠlxvÖ?;˲2ŽÓÑhÄýxÿø³Žêg±Òùÿžßøß(Ë!øío{6™íïïo®m2ÆÊBU²Ž¾ï*%76×*I€”’`z|t2šL}ßßÚÚ’ÚLÆSe4!®’J(á»Þr¾p=Úí¶Ëx4y>ͲÌõœïÜY.—•…D)¸P2ËsáÖ… EY>|ôÉ箟õO›Và¹Àès<ǵ |øÞårÙé¶®^¿¬µ®4E¹´¾v:DÉbçiº¶²J)MÓ¤×éò¢\__F‚ÏÆg—/_îÖÚc„Ò³å¢Ýhf%¯pzÝnWgyåÎ9BÖëuk-ç²ÕjˆŒÒ«+I’œãñøñîþÅKŸî6°äþý6×Öï>Þÿ¬CúïAÅüé?ü'òŸÿÝÊ{ýÅ^€¦IúðáÃã£SJ)¶(Š’çžç!8ç¥(1„‚—BHŒ("T‘g¹µcd¥bŒ¥Bpc¥”AÇÇGã›7o¶Z-kÁáááb±€-‹ñxB)}ùå—ŸYú:LyzzŠ1éõzíVÇù‘à“G;ýþY··âxÔf‹åÓƒƒ¢(/l]ôƒ!”¾zùÊJ¯ƒEî0Â()òÒõ\æ¸ãñhÿéÁññB$ÉÒµµÍ­Mã0ß ‹%%!ìû¾ïû•¹œRêøø˜REã8£ñsó¹×®monn¸ÌÂÈhùÝw?ü¬ã À¿'‰øGÿøŸÕ’$q½Vøž’B»®‹1q]Ç F…V*Yi{ó¼°Z¬‚Ëœ !&Äë2@K-‚ŽÃ†I–`B|ß?;Üûøcc`»ÝYY]›ÏýþY'««+_ýÊW'ãI¿Šº´yáøèˆQÖëvDàÀ ¦“éi¿6Xln®—\Ã÷Þÿ NÓµµN·Ûl4µ'G‡N;M–@©(ò1€ŽçDaÝõÜÕµ )uÜÏÝXY]‡†áÿÝÞýØ–Ýw_Ó^{Þg>5ïPÃíöÐ}»Ý-[F"êD`9ð€ €ž@!ñÀK$¤ Á EÁŠ¢@"Ñ&! 8Ʊb;¾}‡žîÐuǺUuk:óÙãÚk䡌¢84Èíº·s>Á9ë÷ÕÒÑ:ký~QGÇ'AÇö IšÆIlQÛq] Íéì݃ƒƒÀwÛív³Ù/ ¼V³†N–$ãaœfé×®<©OO°Wߺó7æ¯Õk»wï½uý†”º^kÌÎÎbL¨M T®çLNÇ0k­¹Œ1ˆ°Ö(¥äâûƒæµ”a-%±ea`´Z*>FãÑåË—WWW{½Áx<ÁØÊ²¼ÛíåY¹¼´J-Úë÷ħ]»€G‡‡Bˆùù˲Ü{Øëv]Çõ|ß|TgqÙq=mÀ{·ï( Fã±*ŽÇœ•û{Á½ãÃFµº0?ïû^‘çA ©€1'ÝžÒÊõ|?Nja$…°,šÄ10ŠB!B!¬•bŒ ‡ÃÁ ·¼¼Œ12F9.I“ñññ!„Ú¶éñQ÷·¿y–WÊS,ÀÏý½¿m” Ç{»{žçyž†¡”T°… ‘R¥´1eɵJ­5@Høƒyà’ cÉ$¥dE>I&Ãaߢ´Ýn'i®¹xq£ÛíïÍ«û»‡Z™—_~Åhsóæ­G;ÍfÓÀXŒYZZª„•’•,+lË&Èr=÷üù ã$~üx7NóæÌ BÖ…‹ûÃq–Å<ô]»^­,ÌÍ –: Àh)ÊÇ£J%Œ"!¢dvnÎ (¤ôÃ`8))=×%„Œ†£Z­Öj5†ý~o4£³,ÕJ®®¬ cxYÍ›ÍZàyˆZ5\XXèõGïnÿX/ÿùž®`½þ[o¼ø±ÙÙYÏu[­VYr„Pš¦Bpǧž^Чí=²”c„”Zˆ¿?åáûÃÓ¤ô€Á(£Ò4f¼ðít}:$'I'¶M†¼ÈxYv–W–V{½6¸ÙhªøíܹsÇó—^ziffN”úèÉÁh0®×ë˜ùùùá$ +F„ñR(ùꫯB÷ïJ!l›øžãPb”„ z]×uÛ­†“Ñx4ìïÝl6Êœ£'ÃQ‘ç—67Ÿ¿´A0Ȳñ°wTd£(ô´õF…¢ŒGZ*ÇõÛºž¿³óø{o¾iŒ«Õóë[~T­FUÆøx<¾xñâòÒrš¦žçPj9{Ž­%ÏÓXIN-êPÏu=ÁJ¥”‘*Ë2Yò‚±ÞñÉÊÊ Å¤Z«Õ+UmL%Ë“IüÞ{ï£=9>AÍÌΞö¹ÔZQŠÿå¿=ƒ'ÜS½c^ÿê7ÿoýuÆ )¥B¨´´Ún·†”2Mc^ðñxl”v]7Ï ¡¸ãÙY–D¯”X^Z®Õjñ0^˜ë`h¾ú{oÌͶ·.®¾Ÿ-·÷vöŠ¢Ø{¼Ón·Óq÷èxϲݹ…ù ——‰ezã]ß÷£1Äbœ•å£Ç»\›R­ÁÂâòæúúí›ïåyº~ñB]‡P‹äiZæ™%ˆ†.Ëò4N ¾ë¹Ô%ïçݲ`ó3³†K#•Wqv’G~à¾òÊ+oݸ.•~aé/)i²,s<϶-ÎË/ÿÆ×Ϻ,ÿwOõŽõoßÚþøÖ!„TêôVxEí™ÙJ¥E‘çy­f P2F)õ=?ŒÕáñ’c|am­ÌÙÁþÁüììÞîÞ­›ï¾øÉE¡zùV5r/m]X]]²)ÝÛÛŒSVðÁp0™Ä“I‚±‡Úîx4be¹¾¹¾´ºÜë¤Áqœ ‡m”Ñ:Œ¢ûw·77Ö=ÇŠÇ£ ðªQ W¼DT«Õƒýc!…mQ„…‰ëÙ@›ñdd”®Ö*£þ‹Ò¥ÎÁá“,IçffšõF–g@LˆR:ËÓ,/,Ëzý?:ëj| ÏF°·î>zn}Ei…1²7Š"@¯×=::NÓ4ð=­U‘3Œ±àTœwæ.ž[-òØÂ¦RñÆ£.„º,x‘3˲|Ï_è,ÖªÍÅ΂RüþÎñÎÎ>+Óq<æ‚{ž·ppÿáΕkïŒãAX‰¢Zµª…ð\§Û=jÔk½ã#×¶-ãñ0MÉEE“É$!Ás^Ú¶ Îóœ•LpnÛt8ôú½F½î¸ÎñÉ1/¹‚ nQ±¬_þõ§ñ¼ê‡y–‚Ø~°ÿÙϼX©F¾ïÕMÛ¶?÷¹ÏE~wûîÚÚÚÞînõz5/òá¸W ƒÎü¥Ô±mjÑjTFšŸùâOŸÌÎ61VF #……qàEÀ@ [Y–OF“õÍç.=ßlÔ12žc•‚§yÁÉÉÉþþÁK/¿âõÑpÔ?éîì<úÉ×^³<::˜ŸŸzžK4Ió’yžç{^0ÂJ’¦Á¥¥Åùù9!ød2.Kæ8v­VE2V(%¥E‘çya !T«×'qÌXñ+_y~WýIÏX°×ßyÿʵ÷þÊ_~e~¡S­V×ÖÖ!@ß÷¥¶m­}Ïžïb„gZm›ÐZ¥výêÕ»ïoûžS­„Ã~—R Œ„À` Aƒ<7ä\Cˆ 0Œ•©U–¥ƒáàŸøøç?ÿù¼È!¢z£ÙY\Ùܸ¤¥ªÕ«ÐèÞÉÑÉÑÑs[œ%Ë=׉€`ÄK!°E) „QµZ-Jé鱈1†s.„Rž¶v>m)hŒVÊ0Æ0!ÿñ¿|íæ½§èßåèÙ Ö©o}çÚÏþÝ¿ázÎbg !Gÿ{Ÿ™iíSJ\Û%Ä¢-òüßøzç—¶Ö‚Ykm´6‚Ë0¬p®l+(òòô_ɹ2  ””ZGQ¸¼ºœåùÂÂBQò4Íã4 ýA´¼´´¶²\–y·{¼¼ÜôºR–CËÂJk!$&˜ZŽ1K)iŒÎó¬Û=‰ã‰Ö £”LÓDJqÚš±ãû„˜ú¥_ÿïg½ÒÿŸžÕ`¾ò›o\ÚZ+K¾»»ë¹nžçžëi­çáxà:n½^ÏÒ,ôýwÞy;‰“õõs›[œ—@ÎK)U’eµj‹B  ¤Â˜ „„ŽM)ÅZ« ÏsYŸt···9—˜Ð4a¼TÝ““¥NGkqÿî6!È¡Vä»Aè³"Jð’qΞbË*XF¡–E,ÆË,MÁQ:ž«•Jmµ„Çv¢¨¢5øÒo<«©Ït°ÿó;×ï«ß°©j·ÚžçEaÆôû=%y½V'ÛÆÜ¼ùÞl»ýñ?/¤cê8¬,¹0i^†A5I/%FK*EmU‚cÙÑñQ¬d÷î?|ÿÎýfc.M™òÁýû/ž#½uãZ£^ÝÚ¸8õGƒ~½Qµ,‹`¢µ‘RalaL”ÒI– U«Çw-‹P×&åeA0²J©e€`J,‚ÿÍ—ûÊ»?ŽÉÍžg;X§í}û»×>ýâóRÆÁd23Æ‚ÀôûQݽ»$I­Z Âpow7Í2ÏõX)…2ZB‹úq ƔRŒ”œXˆR"$K³äæí÷ ÔS׋’”ÍÎ-9o6[/¼ð µ‘|Ðë#jµŠ…a³U÷<¯Z­ÖªU­õxs®lj[ÔNòctú ž•%çÔ(MFJÉ2Ш÷êgãIÞëõߺqýò‹›Z”Œú³µh®Q«ùž‹¡1Ö†%™Ì™‘¦P)f!l‚bìC,+zÿÞã»ÇÃ1´Â€Ú\[B‡[[„Òݽ=Ï:KKYšôºEQîïòœ)¥?BTÂH ƒ4DRLÂZI a軿ø«pÖ«õ¡€gý>\‹sJä?ñùWµÈ}Š.ú…ZäI~øähçÑÞ ŸM¤ZKØêêâÊò2!(‰'“ɤ(ŠRÊ´Gƒ$Ö˜I;ª ªµfÆÃ~ÝqÎ-.ôûýûîù®S­EB” `£Ñ°ɲ¬{ÒO’¤Z­·MÏvŒI2G (׳¾ü[ß9ëåù}4w¬èÇé0-¯ÝºÿÅ×>—&ã~ïd8kF³ÙªT꘴(FñˆS©ïA-BlÛ.ý+=kÇIDATXyÒïßÞ¾Ë5¨4šY€ÚRD,Vä‘ëÆ£áp8 Ã`~nN•e©íPÏu¶¶6KÆ´Ö~à ÁmÛæœi)Oû(}éõ?¸ùàà­÷Ÿ½3Ïÿ'ñëÏô/~ö'*~­Z­ì%qÞLŠlb!…Žï–E<×µ(Mó¼;•”y•ú Í ŽúCä8Fðää(öµÖkk+ËKñxØëw‡†žùòåÇv>Ü©V«À²,í¿=W~„þ"ë~ñŸÿ¤È9Ô²æS‡BJcLÁçZ”z~¡Ìao !ácÇ¿÷xG#ynͶNžìÅñ¸Ñ¬µ› .Ê¢È(%ë½üòËIó¾ý«¿ùͳþŠgæ/t°þ¤×áŸjÁ"–Mµ“,ãÂhB÷Nö{=C'Š‚ZãÖö]ñÒüL;t&½î$i-1‚h­¥Öú¿¾ñ=G>CÓ`} ÿìýÃBi¡õ•·ß~÷ʳþ8SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSgïÒã7«žÁ“èIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/matrix_transform.png0000644000000000000000000000157211722777314022663 0ustar rootroot‰PNG  IHDRŒ-µsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tEXtSoftwarePaint.NET v3.22·‘}ÔIDAT8O”ëKSqÇO%ô*ú"zý/QɹQÔ#BðUv¡ ˜¥!Ò‹.ôJ”2 k- c³yÎvvuDz-µÝ·sηsvØÙÎÖÈ~p.Ïïó{.ßç·¢5–Ïç‰hð q¨ÉIà)"“þE]ŠÎÚ)SE‡‚ Àc½­Dsjxrõ«ŠYNYœ*ÁfOm9åTsa|^Yƒ PzHÄYD\} 4Ek@Y.bÅ| ÇÓ쳉‘åY€Å4ø[ËòñXÇU«n›M6¨‚6Òœô½(ŽåwÛŠÅbc ôGºŽHûþø+5­Kc^é†wÍ©TµVwÁ–ØX”{ÔòPŽ[ ì7ásbÝcV.‚:šøá/ÎMÚÌÜ}’IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_touches-math.gif0000644000000000000000000000140111722777314022343 0ustar rootrootGIF89a¢ÿÿÿÌÌÌ™™™fff333!ù,ÿºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p# ÛЋ@ Áƒ3ºŽízf…N`¬}< ©,ö2…l2» ®˜A²¶¬í(Sj†¸ºpsn×[¡l7{ vx z}…=3P‚~6 lk• ›tœ4“rwd3eM—p Ž…¥¢W™‡]· ¼‰‰Eº»W¹¾¹I`»È7@‹eÃÆoʱ9^8Ó9Õ3_mÍEh=b Lïh4¦—7çñlp=^s ê9¨\«C«/}øÐa*&ÊË>_ù%ñgÆžeüšUFŸ® hIEGK‡ˆ ¬êÔ‡Fa>à Ҫ@¢T„$¨irÌž¥Cž®(a22xÖ¢h"å9ÐoܺQæN–¤uP@Iƒ¸㛘ç&T77þ—–ÙS‚&ªC¸NlPµŸ5†ÑgCA&ßI 8b<ÍŒ–®a Ìe<íÓ;èŸçDèÐÉžÖ-LÜ:?È„¨°è¾éËÅ£`:ìC.zÖQ¼eÆ$uNA @R/ì‰ñß&—ýä ÈðM9J‚5>2Jîmy¸Ioã·ÁìÇr¼ÿ ÉŠ0²bUÓö´·.±ÒiÅ@ä ÈŠ}²'r¼ct‰•ÒP+!Ç¿Õ$ÈJ½Ý¼r|EHæ¦Z%@?9î@j|v¿FdHŽ{ r@û½9~ªAÆîÞÎÙ=–£6™/«Ü¤×V}©y19jÞ’¯"‡÷ K5|ÉfÈ¥å+Jj™qä()%AJhM?–¥%$H)±iÇ“£¦t©¡6Ýœ~rL‡¢0a‚›ox_9Vzbu«¶™¯ã 2>CŽó¾ä­Lx(A¨fHŽŒŠ$ƒâp1brÔ¦=Ú׃Öî#2 JS‰Ë‘÷–|­ËªËM©šÿQ²äxD¨ôÿ¤”ذãÉÑ£4éAõð˜äè…œ ½È—=Q¤'Ýî±ûÊq;ýuoȽ(ìÞ°G.Ð_Žïs÷’ãZM'È‘=¶9ÒP>D£H§­CŽ4”@ @gH\ŽÚœ]V}&GÚN:|^™9oÉ÷»çøZV‚Þè5 ’£†ZÆ‚dPìƒ]ñºI?oëÚäh%Ø:ß ÒJ°Û|rtC[˜ °ŽÚ_Žï{qC~«¾9®ëƒ+#Ççǹä¸W‚Ûö˜aä8†s|‚ÄYuIŽÎ€«Â¤ [ö¤29jWwYUNŽ åÌ’g”ËÑþ–Ü=G´ˆ‰’ê2Ž]°&%H"̲Pä(ãuÎh‚œÂ§`¯X” ÐÚ¦£ß±³ r(ïcäø¼%7ä-%&H ½¢¹ÇÉññ8—E%º1˜ ­CóÉÂ4à ‚t/ 9º#î¸A:½\Êå¨MÇeU-¹Ÿç¤×רur´½%wÏ‘]N‚dý]°ž” éÐÉ‘ŽôÄ€I…OŽTœ#HZÈ‘†r @I)Æqr|¤ë†<¥t‚¤™ò±r¼=Î%GsÙ‚u{9šðM0™ ÕE"G5º‰&¤ªXurT-u½ rYU‹®yAŠÖËQÿ–Ü=Gq™’&¤$9Šp-0˜ á"’#Œj¡ “!L "Èâ’ã!¢…äÇâ+Ç[*nÈGò w«q¼/äÉß¹äfIÈ1\§ž”A¾'ÇI½8ä²ùT–z9j«ë²ª–Ü1óò—s›uoÉÝÓæõ«ä7;rÔ·ÐÚ3 B޵;¼qw› âähìŸå§o,9–ïî„ n*Èñr¼ª#¡fBH`CAΑãõCOOÖÕRI6„I}³M˜!Ç6]¸ÑMi“£Ž÷ë;r—Uuèšµ ír”¿%'Ç@=Þ”Êâ‚£©;L^ùÏÝÉ¡¿Û ,z‚£½5D¸XPrhí<‹ rŽyåi4‹ Ò†·æiÕuEsÛ¸<{!AÚNrŒÜ¦çå¶ õÉQÏnõ™‹Òvz”ùÏw­{K^†mÒÑ‹RO¿ìô G=é9gn/H¼l䈳Zg$ABµ$GÓ‚ƒò°¨äxˆháÛ òÖþ÷~È‘Õû?s~[%2&+ŸhœEéñl#–+ZÖ³ÇeÖ#3V9—…>'Ýþ¨÷㉖“£¼•¾Î¸_¯Oœâ§öè©‹·!^”øZçþÆŠç9ÃÈÖ_Zç×b‘K¬¬f9¿ Y;'‡Àb'ÈJío-rä´TÖ©>F=ä½@QQÆ(DŸæ)êœõXXG¢ã}çÔê € € € € € € € € € € € € € € € € € € €Àä~þfÅç˯›û{¹lðŒ“WVú)n7ú=1¾.I””"2.Ï‚DŠʸ•Y*AjåxOÇi’ZÁÆ àУ²”ÀÛ Òzz8E-¯´Z 8AZ š¿4§´ÓÃ)²t£ìº9'È®•·ï‚„0´+‚ìZyû H“A» È®•·ïïAB˜ Ú•€d×ÊÛwˆ€¿Å a2hWN]+oß!þÜ=„É ] øÀÔ®•·ï¹ a2@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ö#ð?N`NbÈA[IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_colormap_grey.png0000644000000000000000000000442412143115162022614 0ustar rootroot‰PNG  IHDRà'•Ü…ÛIDATxœíÙ–¤8 DEùÅÎùÆ¡þ±™‡\ËÖ’MÇKWWöÍŒL.}ƒ6Z˜¿ü¤Ö#JgÔwVô€µfö€5} cã7V‚o¬ê ë#ùÖ5‡×FtŸ§•Cõú€DDìLô [7 —$ªù÷%€5]ðÕÅpº:`S|u1 1ýÍʼnzq@Á‚Òµ‰Z~`C—”,y^¨¡´È~W""º9*ÖFôÈ ùbÀõãçA ÷HNÀõø‹ ‘€'>"ê y bÿñ±Roȶd– |© 例‰qð©nN¶Æ9øT&äÑ@ÎBˆƒOe;)0 H4^Ç$JOÀ\ã`K…—ЊsR>ƒ6OÕ4ÂC–Ü:÷«DÆÉ¶EXÈb8)¿]ò²ÜÜœ€BAÆ‚ÉYnm~@!ù ™yµJHÈÃÍ#Æ@ š>!‹½bIì—Ò”€„t‡,Õ˜©[(` !Ñ¿å_—jÇEhP½.Êu7W×Èð±7D’¥Ç‘ú„XÆÃ[åo qxDy1!JuBþÏÕO„•gº(À!DYU¾a €?è¤ß°¡EB Œ?îSM¾=a5ë(&ä}JX5 ¨!ä&ß'a=m ¨$dOPOXt³:hªìÉCa2¥½D³ƒÆÒ¬næ½_kØ8}‡ck› Ð^^ú{’¯ûþW(»dÑ7¹·XºQÈ+rŸ­ x À;˜j¹À6¨àâµJ•«”f‰‡œ¢‰J”Âø²ñpmPR\> !5ë‚'k‘B9[úùúá¿ã÷.žeªÛe™×8‘oºøºãµ|=[Þ[am0ý1£ ÑÀQ訵&cãó½‰SXˆTU@¯XŒTà6›«õÊ5Õ†˜W,I®ŠƒJ¾èŽÅè¡kéþƒ/Ò¼si ñ€ª\”qÁDȆ¨<@ŸHŠâó嘷+R%û0±R‡‹ÞCÆAÑuRÍ{HíaP =ðHOX”¥{w’’ð‚ߪ#,u2Iæ¬Öíÿªž¦à`ßñQ³ê\űgÀœI‰ïY°âì„eÓRtŸ 7ÐiÞã"â#F' Á.$­èÁÁX>ˆyÏk K‘xd|>g`@Ç"‹Ò]¦’ï÷ñï"O¼?Ò¾ ãÇ÷»ûŸ-&ßj& ü=ÿŠCTìpµ~t2q|´øßˆ^®]»i¿Äð•ðˆˆ1QµGÙæáËÁ`>€‰6±ã ÏG€÷›Ÿ€«|Yj§‚Õ¥§A†hÓÀâW«¤'ü©œ§” @;xøÃŸ.Ók4´„Ëâ[eöì¿§MÚ@v…n<Ä,Y¬d?ë{PtJ–ÍoàãåI²ƒw_cfrñÁp;¨½ÑýkP¦Ÿï»ô´%]§á{„m¹OG|Õ’‚Ð÷|Ð!ç˲ĥ[t¬ -…ŸÔ{¸H7v}ª§©ìöüž6Ï;«•àˆ –ÿ|­Qè¡·8[à]7ö?»²6MŸ[SÙ±=^ê|1Þ»:<„¦­z·i—¿ŠƒyÝž©,•cĀإé ¡ ! VÞã¿[ñ^Œd²-ÂSVøï¢8ÇÑ'µ”š§j„i6ox±©¬²æÛè.ñ„A»âÚòË„úŽEG˜ x&4u›j óˆÖQAka&àÑ1æi-ÌD(¨ówTœe‘¼¢$ÐÓ)uBgátP«Ñ,Ä;8á Q½Æ²p:hÐP†88á Q“²p:hÓ8F98 á Q«F±p:hÖ :8á Q‡†°p:èÑÆ:8á QŸú[8tª»…áö&œ!êVg §ƒ~õµ0ÃÁ®„3Dêiát¢Ž&9Øp†(HÝ,œ¢ÔËÂ<;ÎÅ©…ÓA ºX˜ê`¢Pu°p:ˆU¾…Ù¦ÎE+ÛÂé \éï“IW.á Ñ¥Z8ŒP¦…}L$œ!£< §ƒAJ³°›ƒY„3DÔdát0N9öt0…p†h¤¤z¬ž†*¡vvPDèúfˆKàŽ/Ž{†«;`ÓgGÔ°àíhûÖÜÉ€5ÿ@9 ˜dy§Ò+õ UðLªØ0€´g„Uk$Àý%Ê@ƒ›˜EdIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_rescale01.png0000644000000000000000000022274511722777314021560 0ustar rootroot‰PNG  IHDR««–ŠûN IDATxœ,»W°'×ßwrç7§É  ‚ ¹Œ&¹äïÚ+ɶ¬RÙ–«dË¥—Ó“Ëe¿¸J®µTeË»–¼eK+‰µÚ@î’@„f03÷Î̹ùþsèÜ}¢.û¥_»êô9¿oøø÷ÿóßc’sŠ1&™–Ô Œ€JcìkXݺ¥&?É€óüÎßúäù#<7>øô gÓÎ|tZõ,ëÛgNº«/}Ñ쬶jgãâç;Ol×ùΫ·ßýüãÞt²ñJkuÇH¡¥õóç:͇϶-æ1j5*Õf­V­TµRI’¥ ¥”«KKõF"hÛÆXržæYY–Q–5«UÏõ ‚B¨f%à8„ä’Có¼`¶e!„ À˜`€Æh€6Æ(cÙLpÆ@„ —¨Æ˜@0¹Z›À±@ŒRš`œóÂaŽ1:Ü%d'q’ mÛ•ZS‚çˆÉ¥¸6a™Z+-…ä"ÊRÛ²ZB‰Ñf6›H©š­v^ßuÜ@jé9ÆU”\ €9:Ü?wáòÚê*0ŠãG;^ů¾_ ´Z)Î˪dE^¯×“4õ=ß@´á¼4F€0 ­5€€Q†ßx뢔 š+Ž¥Q: ̤æ.F“ƒÌ ûòíáÓ ÐV»ýhœ²Lñc¥!ÆÆPj[MžMa2O^¿ýÃTÀW®Ü¸¸±þɽO(2ŽãÈ8…X T%%m·j£É ã©@6W¢øÀn« ”N³"¨´F:®kYV­ÞrGN§Æ˜F£Î(ÃW*AÕõ×c”¤EiQRHéY"è2 $˜ 1F@ÐÆ æ\À³åGABåB(¥4‚B!$ŨʦÔbh€´qQRB AZ†°1Àb”Ù6¥Lk!ƾçA£ !€$M€E™K¥„àZiaœ$”Ѳà“é„0+|¨MEŽçåeá{ðìó„c„0elcc !x^8›moï 'ã ð?ûìóÀ÷xQJ%÷÷¥VJˆ0ŠÑB` ÂXƒ @cŒ ó+/ÏóH™`Ëb¬U©s€ F®@êƒñ ÒÖòÓ»ï&S¡òçJK¤eQÆvê¾_ò ËõJs¥Ûù|û£Þtv÷én# I<™%q”¤E>*D†)å h®ž—\%é¸,UÓqD©lÇ^XXTe‰0†„ʲ¨ÕêAPq傆ƒ$‰“4Íò¼Ùl"|×-¹(„ ÆP„¤R!4€ ‚0‚ñ³í®5Ĉ` ÄBŒ1B„Ðm3†1dcˆ]ÛBSŒ!‚ZkB0Æhm „ØŒ•R%ÏÒÌ`ŒÀ$Yì4›ãÑÄ·-‹+I“0 ‹i¥•TEQ(©gѼÝéZ”A£çqdÛ„P >â¥Å›Yi–*©lÛB2‹YŒI!Z¶e;‹­ÆáñÑ`8|´½ý|ÿxyy©â{ÓÉŒ¢µ>~ütyya2•y¡µ–JMÆS¥D’¤#TÒPÅl>ǯ¿}C“%ÁH)“óÒ@S£TòŒH©±=î#ò¤?‹&€1íP$‚ÕÕ,»¡Mh˜__¹òÃW_š†9|2Þ|éõõv÷ùáãJ炇u.µa™ […Ù(Ë’º[£A£î{¾m)©=ǵ×µj½ÁE)…Ü;Ø¿xá„1kFq8ïOFJªÀó‚ŒQÇq1QžSŒ…‘BJÁ…C)B@€ ÆcÂ@„„bŒ¹”Œ†Rj€ˆÂA„1ÑZcB"B(È¥ „ÄIŒ µ(Á˜$Yf´®×j̶‹<ÏÊ2Ës!dQòF½®´¶mGH1™Ž»Ý/0r8®­n¤Y:™N«A0 ó<ÕÀµeÌp4¶(¥”*­ûƒàü“»Ÿîîí9¯Ö*7®^î†ÂÓÞðéó#‹’'»Q8;8<œÎB.F#ìû¾V:‰c­U–åZ)cŒÑZ+o¿q1WÚ·}Fˆ1Z*Œ¶•ªb"¤ ,9'Fh£ ÔÈ"k¤Z7?¿£!“Å(O§×ϽôÑÝ÷ÃtFƒn!àññÞÚÊZ†i~²_(À  lV¤0‰ÏÜÀoYnµå­€’*¨×“8«~·Ó‘JÙ–õlïù•K—¥RŒÐ¥î&„0Z ª~%‚ ¨T D®eq)(%JªŠë)£Â(¶,Û¢"‚14À@ÏŒ‘"i-Öc!©´1Æ ´ÂÖBB°VF(AÞ~´Ûí61ÆB¥ÆB€L“ØrÝ¢(Ë"ó\϶íRÈ8ކ“‘ãzÐ(›Úõf£Q¯‰’?yú̱ÙÉ`ЪÕ~ùáû”ÒÁh†1‹µ›M B¸Ùjº®7NõFV³0,Ë<ÇqlË~út7Ï Éy»ÓvlëääTrñGÿâGy2k×*ÓYÄ‹|4µZ]LÈl:ÇcŒ1JëÓ“ÞÁÑñ`0tÛ²-B™ë8øß|£êù%Ï]øÔC¥;•všN¡yW•¹R¾c2YÔ˜;Y’õmÛ† tÝå`eMäFAì¹ÕpÚWåÜq룹ÍF$7Y‘Ì}ʨÛu€`^µÞò§óh¥³8œÎ•`89]í.Õ*U˲ß/Ërs}CS©T„®ç)¥yÉ··µZ­ZµÆ§„j¸@†q”¥Jϵ•1‹bc€ÑÄ ¥àÙt€´&„)AcôÙ @c(!”Q­ çc @ÖkÂ(Ï BDPJÁ(•J{®›e%¥„2‹a\*E .Òd8UkÕJµV¯VlJÃ8eŒt:fY;¯./ä\#}ßcŒy^`Y¶’B^­T‹²LÓDjøžïùKKKÝv'ŒBP’&ÍfË²ÙÆÚê½Ï?¿³½Ý;8Œã¸ê{½IøÙ£×_ùå›/T+Õ•Õ¥Z­Ò¨× „yÁ10aœÌ£¸Èr!„¸žëaŒÅø­¯ÜˆPƒ ËZ" ¦yÌl_ImA&²1Ê·+Jˆ¹‘€¥6ó ZËj}õÂWk=?Ý»yíÅOîý @&•¬°Ê¥ó«½ñÞ4°`‘Y¤àš4“¼]mÆ©¡Æ$YÖ*Q–Oã$MÓåî‚ëúŒpV–®ã ˆ®ë£³þêíÛ aÏuN{ý•…E×v ^úŽ[”…”"ÊRl@g¡k ˆæ3Ër0% f³a[¶ÖJ&‰ïùJkÏñ:í6!Bä8‚!ttÚ ã˜ZÖ¹ÍÍÁpxtr¬ †‹ÝÅo|íËϧÌúèãÏõ "ÄõÛbIšÏÃðÌÝxž»¸ØiÔj¾ï'iJ)ÕÆà7¾úb€I¤„…pÌÐ&‡JA(cÜêbœÌ„–.¸BÑÄÈMFµæòxx4×NÇ»­ú²×ôvÒr¦K䄸- lUÊM•Ði<^ì.Æ“y·îÎÃA£ÒXZZ‡R$élæUF©í8¾çcÆçÇ ”‘BH×±R B˜¤i^• J ¶sm #  %e9™Í56eJI¥µmYZk®†`Œ h¥ „AÎD²²QJqQB)%#m AP*½ýpRPóB‰ÖÊ(€1“HøÒõë+­æ/?¿¾mÙ˜à¼ä¥i’BŒŽz'§'§ß·'Ïóp>Mƾç7š-FižeQr))aópžg™b6ŸSB$çaúAe©Ó jÕ«W.uZ­f³y÷óûN«wr$5i5ë «—ÎÏ£èîý'Šg~àW*ˆàl:ϋҲ-‚¥´^«K•RJ%6EQào~ù%.å1Ÿ¹Ô²SZв”Rp sSBcÊ$DÆ$У2ÒÈ2̱!w!ŒûFeiB_½yûä¤7î[nu2í)9avõêú…ÇŸ"âÙBNÍ«Õ\çé`róÜf^€Z%ØXÛÔd<ïÔ»ï~ôg»y‘¾?Â(ôƒ@ˆAD…,›Q„ €€¼,mÛ†ŽŒ ¥’’+­mB Á.¥Ac´ÒF)Ï €Æè_ymˆ4JL1B!d4Æ •ÖJIÁ0@k¦i­Uq(eŒgQÉ‹Y!‚“4;:>>ê4›W¯×*5‹±´,¥álN(iU«y) µzÃ(eY¶ã¹­F3Ï3 BHn´I³LJaÛv–&óyÜm·´ÑqתÕ4ÏvŸ=›ÍfÏöžgi.$o6šál.89=OæßùÆ×Æ“Ùp8®W¼Í­-c a€áEÙhÔ„”B #Ì | ¡àRj…0F 2˜’%«êTˆr'˜A‹QUdZ+… &°ô;.v´’ ­^…ÐR$étj/{ù…͵y¦éqwñ¼ˆ#ÁÓ‚K%t‘åºHÓø4‡*SܳI¡!Bó÷v·›m'¨L‡Zbž%\þÞoüÎÎó£N»1j·;õZÃu\ B+¤„æY!µ>;„!J) 碬´RR”JŒ¥”BÈL¨¢,¥”³8Æh­-Ë6ÆÎ~Â0/¹B !¥0ÆÑFƒ´ÈŽz½¤(+®ãQ&Éó¬êÙõJÕqìúÿþ1sy6×B7êµZ­š”¹¢æžÅjµBh0•I´°Ðõ— 1ZSfÕêu ‚`–åy­@JÓ4‹ÓÔóìÙt§‰à"ÄQZSÊŠ,?í¥Q’eÉi°ûøÙÓÇO;A…YÔõÝÍ R ÃclQšçy’~58“Vc¶c•”!©TÇû{‡ø¯}ïö4Íê^u^fRÉË̌ڄ!ºPk aÌc ƒmæÔ¤HL˯W¼,ξþk?ü¼8<9»w÷Òù­z¥‡áK/ܬÁ'_Ü ü€b ÑhNû§¾ï1Û¼"8%çcJBX)™¥ÔhÃyÁ0UZOf³ÞiŸR꺮R#x¾2êù³}ÇskµÊΓçû‡£ù̱œsç.¼|ë†Ñ Ës ‘Ñ*ISËb!!D–y‘7u!„m3Ïq(£¶mó’‡ópÿ€P‚¿ýµ×…Taº˜Ì‹yŒq–†…7Ö.ãjÇC@‘š–QΈEAX*®R‡.ûõs•ÃéØÃÎ+çÿê÷RÀ)ud:uY[çQ½ÚM†Fk„1/2LÁ,¬/ßÏÊl¾´°¾´´$•Š¢( çí¥¥û§ÇAýd4úɇµµ¼Q«T1Æyž×J!Ó4-¥‚!-Æ0¥  °P2çí:vÆK W2pìŒ J„0+KB0"`´QFŸÅztùÂ¥V£Ñ¨¸››½^A8™LƒJà{®ë8˜à8I1‚z#!ÈóÌõl,]Ôº¼ûôièB³=ûÓ©bqiùʥ˻‡G/_¾™%™V¸—æ×Ο£”*©ã4&” {› Q©•6Ú³,.„Ò†1Š£Ø³me´ƒ©†À"@ŒFA6!ÌYA¦•"„1išRËJM€q¤J1Ër}Ÿióî/ßûÖW¾þö«·¦óðÅËWþ½ÿoß¼v=“Åv«Y­Uß¶­<ŽÇ=x¶×]\˜Í§ŽíŒÒ"§Ÿ_[ŸÎg‡G'j‹Úšá`T­iÎcXn?üB)á37+ÒÇOvê_KmmVkƒÑÈv¬v£øAF÷¾xæZÆs}Á`0醚å…E€àh8!„ ¢y”E”$¾_q=WsÁ,++Ëñd´†A”T@|ëµ-© ³%¶l©…MlôºúŒÑf½+…@Œ äJj´ÌªÍO6o¼:ŸÍTÞ?ŠæÈȯÜ|ë_|(ov7·Ö7ãñ,–U‹œŒŽ2D€œ fùF£RóK_?ê…Jð“wþâæ+¯vïÁ+¯¼ü|çÉã§O,‡n?Ù3Œ9Ô¾²±¼×;n•8MeJ£”eY “³¢ L àZ0BB(Û¢Zk‘E©E0—Š ‚¥RAà™ÔFÆiQJ`ª¶ƒ nÕ8Iœ ¢•ÊòBxéÂyʘfia¡?Ÿ]ßÜÔFÇqjÛÖ ßcžo”4ÊL£Ä¶X%ð1%a÷‡ƒš ƒý^Od)×êùþ^–§ ¡ƒÓ“ë—.•E¹{°÷`çAÝmX_«T¥”J€Ñb»4€Ð´Z-L–¤i–NÂpm¥û‹în­¯>Øy!¤WªÁd:›Mg³0®Õ*+KKYžùžwtr²|Z¤E^q’a„Ãp.¥êvÚ¾ïÚ¿ùöu2Rbdò̦Ãx«Ñª»~ͯ>F³,ªXžÀXÈTéaæ5Öóíß¾ÿäƒÝ'w˜¯½ð½h6¦*‹•¯ËH´Òn­´º­F¥æ¸§'Ï3%^¸ò•Vsñ‹'w!¦7.¾rnc£Ûj-/.•…Œ&£µÕ•yšv–â<¿¸¶¹¼¸ð·¿²´¶Üi¶v?]_Zrü€ „1¦Œ(Æ#£Æ¢”",µÀh£Ë<×FF#ËsjQ‚…”„‘1€`tVI)0½ñ¤ê{BF À(M²lxzÚYh?šLŸ=xðÿýÉ?ÿæ×¾9›Í(&Žmß{°c9ôþö“•NÓ²íápR«T Q’Ôëµ4K¢Ùlž¤'§ÇÍF½Uk>|úx¥»pÔï—Y1 g Ïsj±Qÿô“íÉ|Ø©6šµÔÜÃtÆÔbFȲ,뵺Å,¥µ²Z­þ³?þW­FóÇ?ýy¥V;:h`Œä«%ÛO“4Y[_A0‹µ[mcÀiïøÙÞAIà|žÅa,¸R‡Q´±¾*¥”Rq.ðk_¾b3Zgv¦x;Bˆ©k9#Î6–—†¹vtîw–Çe™iªõ–—òitðxïY`-ÍÒ"E£Œça¥{§jµfäk·Þz÷Ý?ýÉ/þD—Q¯7øwÿí¿{Ò;ÝÝÀˤ[mõfa³Ú¬U‚ÇÏwÿôÿ2+SèTÎu Ó(Zé.朎Oîíí_]M³dyqYkcÙ–1 àB@)%§eIŠË’aD1Æœk0‚ˆŠãL´6g%附e @!¢S-´IóµmBˆÍ,Çó)&ÿèÿý8ŠþÆsuy•Ú¶ÖX«ŸÜ¹;UªÚ[Y^þã?ÿqQƵ:•ŠZ ½w¸EQÕ&çY–\ºpÑwmqGÊÀ4KÃ0­6ZQþæ×¿Õ’ÇÏèd,ÇsûÂùKƒA¯Û] £°V©üèÏ~~r¼ñÜæ_þì=ôÉiïw¿ÿm›‘‹/8ŽÝl6Zõ Ëóv»mQ 1"„$Irxtl1Úñk»Ï1FR ?ðr®#eYbˆ¸Tøí7n$ÓB! £ @’š(Ï–ïéàDËdÙrKg3Ž‹Í–äåL$òmÇ6<¤q) £I»X–ŒY[¹<ŒÆÆnŒûÇ;‡Û>cc)]<úlïd»ŽmÆÂd¾Pë¼{ç_¶‚ÖÃÇŸSǽ´þâ [\ÏßyþÔÅV§ÝNDYäÅ­«Wÿ꣪„-,-[+Kn€a˜Ø¶-¤¶e„æ¼Ä˜ä\Ø”`0!€R(ÇqÂÁ” Š À_½ ‚RHÍ™c„Æ0„ 1®eA0Â!ˆÐt6½°yþƒGŸœôÆÕf{¹ÕÎòâG?ýyÅq7έ«¬°-V­×®?ßé´ˆ!4Ÿ}~ÿøääòÅ‹Ýîb£Ñ\îvÂñ8Íó^¯?+¶;™õ$¢È FFóŒ'ã¼,µX©·±RQšÛŒJžîì8žû§?ùéÎÎÓ"Ï®_9wt|R©Ô.œßhwV—»û'¯l€"J)Ƭf£Á(ít;@Á9ÆXJ9ŠŠÇÛû·_uÍŒs!Ûb6Fh>fó¿ýö \*ʘI½Z‰Òäæµ/›pâ”BÓ*ÖÒ­¬Ìãý\ÄB¯r®ÓîÎ ãÙìùé®ÔD6¯Uk [Cjµë¾óÅî£_ëufçñð˯}çö+o÷w> r•nV;F©L§eÞi]º»}çÛ_þÁA u8ì¿xãæêâr¥V=>>¹z|pø¸?›¾|õC˜ZÆØ÷=ÎcF"H‚œé^.•˘6ƒ1VJ!Œ4D"9#>ÔàW˜”6@(…€±0@„„6Ì"BHˆÐ<ËlJ¸”Tÿü/þÕúïýlµZBé/½|@øA4xý¥— .æÓ°Z¯Ÿö!ËK‹Ïöö;ÍÆGwïIZoÔ9çQ×ëÍíýÝfЈ’y8/·B¯}é×zÇÇ;Oî.Õ—æéÔ²ƒå…æjw9*’wï_8¿õäÙQ  Ê‹v»x@diyAäå;:Ú3Ž IDATœLV»‹QlÇ:ó8˜“ãfY¼,ó¼ô”RÍÃW_º¶wØ‹â¤ÕíØ ä?uÛMüÆ[×|ÌfâŒaYbÝL”Rº4vŲTªõ÷~ø{‡÷?D”–Z­¯l~¼ó¾’ r–U9õrAïYƒ2šgÙù¥õ¨¤Ç½_ÿêoýñ;ÿúè`ÇѲéZJÊÃù(ð»/_~õ7¾÷ï={ÒYØÂݹÿsYŽûûÖ®ê\üÅFžŸ>ÏÓl­½4žŒžd9?·º¦TB¹®‹ ÖÚŒ%€R*cƒ 4šaT)”–FCc0ÂÊ(` ÃX)íØgœ)…`„@FÊhZ–®e)© €9çm„ÆeñßÿÃÿ¡[«÷ÇñK¯\·;>> ‚ÀsÛb˜’O>º‹(O§³pR«T{½~Ï>}ðèòÖÆèáöƒµÍÍã£#ƒÁÚòr£Rc?Û{|4ê¥Åü¿þ;þ£?ûËé`»È¢œزó$äEvp|òäÉýöòÆÇŸ|¾µ¹Ò®ÂýƒÃñlZ¯V•¾çŸ<üæë¯-t:V `”2Àxž«”ªÕêßÏÊìÏò~4–I±¼ÜIÁ,´¶¼ÐlÔµRGƒÑ<ŠÚÍ~õåKó(ºh¹^œGÇ+u"Ó07fqaQÆñ£‡w•àpÆ1ØPŒÏÝxmçá;ÌòÂbŽ(õ\¯Ý:_äÓœ ®œ¿Ù©W[•Æõë/}òþ$ó¢ÌQÐhÖWFÑI.ôgî„Y”ΧûÃgqžÖüÎí¿n1zç‹O“ƒ4Ž7˜Çýq8 îø^’æjm4×µA#ÏX†1@(©´®Xv©$ ä%’Ì¥Àˆ0‚@%E¹c1 @­µF1€¹¥’‚0Š””BÉÿùÿúÇDeµJë÷~ð[ÿËÿýkí¥ Ve–… ˆòühïÂÆê_¼ûn½â&“­ÕµÍí½g6³¯^¿þàþýï|ã[ï}ø¾†0œŽ7Ö6ßÿðƒI\Ž'ŠX9?zÔ÷\{n=Jk ë´¢HW|ëáÃ'a4ÿþ÷óýwþ²VoNf³zµ:MÖ×ÖþË;QœÔ‚Êõ›7—ºÝV³£ŒæBpÎûûÇÃá8ËóGÛOž>=xðø°Ùª!Œº~uµZ«<Ý?lÖªÃqøǶðW¾ñRÓuÐ>Ôci‘Î]§R÷ë•Õ“ñž£…V&Q(r]›iïXkÕp;È,‰Çy´ÿ…ë»!õúÖõËW¯\¹öÿüÉ?¹óé; ìŽF™ “éK—¿ºÜêfeùôä1pÜ8»®kd8~ËoRÛýôá‡RfÕêF^Ž%d\J@Ú•f—k3Ȳ«ç¶¢ÉÀB‚3A‹àœó³ì¬à\HI0†­•R˜‚0 ˜q!…ÔÚ„ÎÀ)„ Êr©%ÃD@è XæÙ¼,ÿ×üþú_ûë£QúÚK·~üî;¯\»qáüß÷ÏI“d:›=º¿ýü`ïËo~éþƒ/€1Ë+ižeqÌlwx|ØŸÎ.¬¯<úx4K¿õk_Û}¾ÿæí[ö~øµomïõD2›Ÿ+dúGÑßú_ŸÅù{½ç?|õÕ‰_9>züo¼õµî}Ñ^ZÌ’ùRwaw÷™CèåË®\Ü¢Ôþþ÷¾}nk M(­T«„Jh½Z}´ó8M³f³>è_|áªVòÖ‹—âœS Z¶j•{ÛOµQRjFiàù½ÑHK‰o¾v–™0Vð·}Ë ‰q!í"ˆ3Å-ÌDbNÊ)•+N!K‰´ÔÌò|¹Õ•¼ÆI8޵æ;î†ñ€—ƒTä9…ö?Î…Þí)‘s QZz~sµ½>žö=€¨Sµ ÇBŒ„­º4㜮;ïÏŸ;W *O÷žødïæÅ­,Í,‹Aˆ¤Ò„ “þS†p!Zßs)Âg¬·ÖB áe¡d˜œA`Q’‚„¨Õú³jµ’c´°°ž&YÖô¼8ç_~óMÛqlJŸ<.”jÕÜ&§§GY{Ž}õÚõ…f3ŒæG''GýÑ~¯W”ÅíÛ¯ï{×”²ß?z~:øÚo~òôq×Òkb¨,÷ßúó÷?½sðÙšßÜZ>Ÿ‡ý_ëë¿ÜyV̳| ˲âÚÕ«Ë«kšápêzÖOß¹óôñÕõ"Ë•RŒ¢Ì“,;88qGYg¡¹¾±¡•<:L#qrÜÓšß»÷Z ª‹Ýº1z2Ÿ ©*¾¿üÕjª1c 5š;.v«¸°;W_~¶ßÚa™`·žå±kY9/B¶Z­%¨J )‚(S…oûV©~ñŻ߽õU… Ãþ÷ßøî<êk ·Úky6ó-gµsA¬!¢ˆ¸Ôê÷z+‹[ãñðån;–ý|pjÛ JJ!a^…ZÓpÚ®µŠ²|ï“»_ûÒ›–²<Ϲè6Z¡Ü;zðÅB½>:Ü{ðÎõµHÚ¾¸óúË·{GûßþÒ7úñϸÔÇ“þéþÎtÒk6V1$ÍF}2œ,,-6}¿Ö¨+c^ùæå+WV—Wò,ó|/œÍça¸»{ÀlËóÜN§>žÌ­¦±èÎÎŽE‘2Ðõ¼Õµ¥•…–V!,…p];šEøí·.5‰›r1ÒyÝö“²h#‚]ËQÙÉlþæW¾uôé/"c­L&³SÂZµÓZ{9‰&„6Âù!±–ºíÕR#dœܤ?øöß<¼Û®Ö,Û…È,¶V^¼òJ³µpeóʇwÂÙ ¨6)õâÒ m\#0F2¯JÑõk—÷ŽV––Ãá(+¹4z2Ÿ/¶YÁ[ßnµ]ÛñÛ 8¶È·-i4Bˆ!"°Dc<džBtF˜£^¯ÛhÜüäßúîw¥úU¶•%¤h¥»Tñ}lôóÓÓÅn÷ñ³§Ë‹K£ÙT³ýäñÍ7V“ñ$ËŠn³é8î0Gý~³Þ¬ú®(¹f4žr)ÏmlùõêçŸ?8í=9>Ú¾ríûû½g ï\Ÿôû»­…«2lTð/þ©‡YTòšT«u!@$”‘°Ú¨Ýºõ 2 »Ðæ…p=÷ÉÓg{{û+KKEQî¬,-AÛ¥u«^WR†³ùÉ`tçxy¡µÐoønYˆz­b32‡ÇÇý,/ðëo^áÒH¢.4Ï ÅÛN=™W©MÓØ÷+ÛŒùgܶÙ4KŠ,E:™>së7•î7+kƒiÕsæF¿þ¦)²ùàdç`ÛG#ëàðé¼\Æ{ƒ£i2ÌúKÝa¤”¹ƒpXd“x>ô‡ÂpßâB¤eâØ‚ŸŠ(¥Ø¶unsãóÝýÛ/\§”6ZM£ Á(©¦0Š¢38Âaì @0D´B¥”Ô:/Kƒ £´Æ”ReE1Y]ZD¿ê–0FèÝ_~à¸îR«U~Ø?}ùúu ÌÏ~ñÎl8½xñüòmcìèðhsó¼gY“xÎÃÉ`pûÖ-Í‹” ‡Yç67â$©ÖšÏŸ=½²µ5öO{§ÿã÷?ýҶtéjvØÛ·±¸\o>ܽWo.}úÙÝ8‰Ã<ý­ïüú4)GÓðÜúZÝw£I0žOg“ñda¡£”æEvܯ.tvŸZ–¥ëØa”,t:Jé¢(§ÓÙΓ= @EFÕ«¸N“s^p €RRmð7Þ|QÂÒ³+clHÄã £¬ÈYu«l–O [>wéʸ¿o´‚#mBâx ’æ'éFåð¿ù»ÿÙûw~^pI¼ÕqoOe˲+‹À~!¹ÈŸ{¾ãƒf•@ä:Ӳ̳ˆÛ mY Û u)6#Ûª5ÚE.¶ÖÖ'QríêŦã4Ïq]ß÷0B¾ïEQlplAC1µ(¥JJ .”QR†±8³ b„¬36¡1 ŒiVǶ(s%/ûÓi)$ň2Úh·R”±…v{4žàÔ+yšRÊ^}é&³èéñÉêÆfwqi2ìý›?øõ÷ï|äÚì?üÛÿñ?û£2-©L“¿ñ¿sþæ­÷>ûàø4~ñÆ«_¼ÿÎúæzÍ¿ü•¯¾óËÝ¥z{}m-ϲ”K@Åg/6jkkkžç…QôéÇ÷ã¼ÜÚ\Bµ;M„1‚1*„::=)ŠòÎÇ÷ã4§Ä´š %¥mYžçq.g³ÙÓ½ã²(}ÛÆßÿÆKY˜šêãʼn’"M4@ʬ 9ªúµ2f™¦D¤\Ë€ÚiY¶ €°àÑåKWþêÝ¿‚FP+\jÖXJ’(,xµº$H¥O`±ÔX‰Ê‚"TY½Ïz…â³4OÊlc}•ðÀ|ƒlŒU3¨uÛ‹„YW­·º/^<Ï•>~ÃcÔ³ìF½N £ˆQ⹂ÐqJ°2 pliŒzǘ( L!´0FQ‚Æ@J€@*e´†(e€_p„X–5›N”ayž+‹2¢¸ŸÝ¿7 ŽŽOÃ1"XkÞlwÃ0¼õâõŸ½÷KÌи߫µýãƒj­þÑÝÏ7–ON×¹zñ cv·»ðûÿç?øÅ/úÆ—¾¾¹T_òóAïþáq·Q?:~°ÒlÀÀ}vúh¦jãÒ%lsk™ ¾¹±V¤™Èbôw?;šN.n®.tÚy–ýäç\»¼5£p6YX\ FÝN7œÏŸïíœN†Õ ¢Ò<;r©0ÒqQL'ÓÍUB¨eÑ"øÛW s×­ÝdtÞu´Fß•Œ0Î3Û¦ÒTœb2Í  Î…A±Šâ)¥piëÕI¶Àç“"¿uåKÉpøýæomï%&a? Èðµ­z @¡ ˜žžd ,ÔZ†V©T©Ð6Ú(fÆÀù|Ðl.¶‚@(5Ï’4rpX ´Ì2œ/v»ý¡Å˜cYBHÛ¶JA¥Œ’  • / !ÁBë(K³²t˜…1 F…T ÖjÇ@^äY–{Ž%¸wïÞÓ½ýõ•å¬,ÞÿÅ{ÕZãúÕ뇧Gëëk'ÃñB«ùüä4 gçÏ]Oçe‘RL£4º~éâ»}ze}5—: çƒawïù W¯c O£Iª÷·wÖ: w~ö`8*t¾¿³½½?Ú~6NŠKk—»ÕöÛ¯Ý\éÖ'ÓY-¶ŸŸl,/¾rë…ù,\ÛXûµ7^^\èœöNwŸí/¯/M&óz£¶¸Ð¶-Gk9 ãûŸÌæQQdYÁË¢Øyv¬”òËsY{¡erîÕ‚Éx6ŸÇaœW›>þê«WVW¦Ó¾LTiRD  $‚/E|O Y:t<ì£ym¡2èE–HƒR(BÝÙàà¦ÊkÉhx”K5§…ïXIWÃÝ‹ ÛÛí=á|6KæÜ(Ë"ž0¶Ã(‚ºT:N0/3ceäÒÂJ‘Í ³ÂáT–y§ÕbŒRHîoïn,u?ûü~IHóOO{yY2FÇÓ™Pj-•J“8š‡\ .¥ëºÁy˜( 5×;» Î(cÆÓiÉ%„ædV\»òÉÇã8Ô¼üÑûžß~íÖúâ"Ãh÷èðèðpïøxïtï·¿÷Ã"/†ýÓnPYî´†Q˜EI½ÛºuýúãÝçׯ^ 4*•(._ºòÅö®ÙÕKW»íæp2ýàî'KN‹ëb%óÑ3¹ýð胧:ÍJðâ…ó ­Åf%Ђx÷á[o¾”eüë_¾=›E;;»çW^¸vy< ©µ–K ‹Ožì^¿tneeÉbV§Ÿ~þpÿ¤!Z÷{S£dÎ…ªà\*µ2Ç…”ZêY”eYV©úe‘ã7Þ¼‘«¼4,Ë]]_,¸‘JfOÖÏW«ñ¤ß\^VöÕlú˜*¨ ´©+ñ±-/Ìfnçõ—_{ýÂͨœ †W×Öp&É´TäÕ×·–—Ÿ<~°ÔêdEÊ0ÐÐD±ÂÄ8¶EÀDy”"WÝú³Þ‰knÃãqÚnu’¼\_] ªþ‹/9„DQê2ëÊå «­F§m?¾°ÐÙ=:NÈږ–2/ŠÿŸ¥ûþ’ó:Ì<ï›SåªîêêêêÜ@w£‘#A$(F‰¤HQV¤%Y²dÉY²ÇžqXïø{¼¶Ç>–µr’,YYT` 2Ð9WWo½9ß{÷Ï¿ñ<ç|¾BÉdryck°?wåúþt:“˲•eË(šâ€ FÅeEŒ1 |B Áˆ…g¯Ü_œ+ ÞšŸìôi Úi· ݃œ¥µ¡÷íÙ:v£Û©ª:OAðŽ7;‘ŒÅ’ñ˜’þlʱ|¾)²¹¹CQ„„ä±÷>ôòëWûÓÊìžÝS“£[ëeÕ4§wOÖvê÷—WË5,³ÕV !;íϼssEàh–‚¼¢ìTÚQödDEvm/ ƒ‰ÉQÓv$–Å¢Ÿ:º7žHé¶îøÏdkqäĹ•ævŒëlïT£(êO$ÃOOìÔš%®ìÚÕÒÚWìm®XÐÉ÷¬OïÙÿžÃûÍ®ø!¦™É¡ñ×ïßÈ¥šíGÏÖj/ðtÏe!´<¡ˆœ(z)IéPL°Gây aböš}}ýõJ¹Úíö§S‘ëÇy¡¦j³Ãƒ–åvº]H 'òÈóíÚ51>b»n.ž(*•J³gäRI„ CÓ"ÇBxŽu=?©(vð4ã†ÁúúÆõ;w_¹ta°0˜”Äãã®ëtkËkKžnž9~êµKç!D¥á‘kW/~üCyö±'‡†Š÷æw¶ëžçòœ05RÊä²)EyãÂ%Û3Ÿï3_ûÆ¿Œ•Š‹wn:BìÂÛ?5 Ã{o×*Qh8fPÛYë4× ƒ>uriiuz¬85>®©Z[íQrì£TMó c«Z¿yk `˜æÑSÇÿíkßöÂð#Ï?Ú—Étº*¡èÒPáî½E†fêÁ‘ë£Z£ÓÓÝ™©ÑëW"Œ$žªVšQ„¦gF¢025›ahŒÁâjµÐŸòqm>ùÁç“”×¶l: øÔ¬à‘˜è’L9Ò! =G3j@ÜÒîC•ÆŠ…;•Ålßd*9À–ƒ`äˆQ2’¬õ¢W—6¢·Ë2ìÙÓQ+'v»ô:Æ Ò›=ÏBh1`hN„„Da†š’΋f³iǵMì¹Ý¶OSpotb¼QkhíæR}ÇÕõÅJ¡`aeiqcåÚÆF2 ^7Wß¾V™È3gêF\‰yaHQ´iš’$z¾Ï³4&Äõ<#!®ÌŽŽÙº®é&¤ ÂÛwoKé>ÃAÏ¿ï™õ­ÍzW¯wë;›ë¬ =ÿÄ{9ŽÛÚX}ãÊ;9³ƒùºndÒ©¥­õKï^%6 ñÊvczbl0Ÿ÷î…/>÷‰+óWlß-g–­¶šO;ºí€f%eî]¿¥ ¦J#ó ‹,ǤÓ9/@ÀµË1‚PïYªáî*¦ :I»æ­…¾L2–’ŠÂpŒ$‰«[ŽöÎÍù‘áwoÞàØìÆND!éx»&Yê©z¢|Ú6ÏõtÓ‘"Šð‘ÓGZµ&ýâÃÓín2äÌ>·¼t^ÁVèPÄ)±@·#Š„r< X6[³ë;4„“¸ °àP“0ôcBLæ8•Žâ¼ØvpàµÝž19<,*ò[×.riôê&F­ZÛ±dF€4C%©Tœ¶m#ž/ÎJÃ5L Ó‹§RTèúHÅ”8B-È[;[[ÝŠ¢åf³/ÛW65«ÑUÍìÙPÕÅFw0Û—‘å‰ñáÁlVQdÝ´Òé¤ã{"Çú(bh¢jšÀq­f{§Õlôt‚l&µ^­™Z·Þnþàsã#£VÏ+å3éÔOÏßÎ •rY3õÜ`&™²=wukc÷Ä”í:vDÆGK7îÜP»ZväØÐP‰çù{õÆîÑQ–e¾yîâîҠ纒$¯,.-/¯ZºFó\}{#¤œàùáBß•+Wn®n æ!Cw:ÀS6k¦ÕØ?>]ètµzibbd`h§Z.n–+[Ç|ëò5–¢N?p¼¾±ÓT"›Äº1[(y˜’xÚǨZ¯`/”ÜpA¹¿|ݘ 莪BLhgg¦«õN¯g)²ôË¿ü ï\½Ùiw5ÍP2I«­Ú=‹–ù_~áÙßûÿ€t[=šŽNŽôÇcr2Ó ‡†TµÑ‰Ðh4j-í¡ÓÇ×7M7Ø^©V;ÖÜli ÷œ –N‰¶gÚ^:.$b2ËPªîòdi–cißóÝ0 Ÿ{ä€'ôu, Ò‚XØ;ØŸº}û¢ Ø¬æ»“£³o¾ù}K5†GŠÍ<‘ëc`$Dz^èt‘ 1%K²tX'š,•–wV“—à¹õõ%ÕwLËXÛZ€û®ÁÓìðôÑÇŽ.¯5Ò‰˜e©¥Tf¸´{~gm}ýîí…w{½:À~y¤1" ÇÖ›Õíò¦OdݲˆãvMcW©xhd˜çy^d9@×4ug³¢$cå¶*\©µŽÌLÍ/,¿vùæP>÷Æ[çvw»½žeV›mDz—Ê›?¹pÁ ÐñƒsıÒÉäå[×)ãЄ—bÏ=õt>—›Ù½»?Ó×Óz)9±Øn—r©v¯k¹îäà€’P6ZÝrum¤Pl”·ìÙýʵwÆ ƒÏ=÷\Ÿ’îù…=%/_{+•ëãDÃ2ÂÈŠ!P­Õ0¶iÊ1ùÚüR½\XŽÛSõâô°kx½¶a\.WX†ÂYNÀÐT±]ßn²U®5+õ'Ñ•íªayIExö}öõ§^»x‹gA‚£ôÁÕŠ¥ëyE4ü “„YXßé öÇž‚CJÓ\_†>ûÐA–D¶çÛÈ¥œvWm8„¹®E å9j<=`iº(‹‰Ô@81‘‘cIX™ç_8û¡åyÓêF|2ôíjG©h б¡½ZgS·uB ~àÈH¶+kkkŠHGXɤCwu¦Ù\<¢ /3+ÒOЀ |H ƒ~`ŠgŠçhP™l6"`c§f°”§Yr‰XO·šÊʲ EZÝÜâ!µ{×h³×¹º´ÊøÁÈÈð­; ô…+çÐ6«Bb/‹jZ·ÉæwÍl7Ú2ƒ ã4áif9‘ç|W{ñÅ_ºyé5W ڎ͓Ȳ4Ãv›¦™àp,¡¹¶((G1õ¬Živ’±þD"FXÊåNNLG޶ÝUC%Ap”Åú Ãö4•æY‘áXEÞª5gKÅ ŒjÍF¹Ý±u3“jõçFËõŠÄ1² ùŽ?QŽ+‘$õ+Ji¤Øê¶LµÕ0 wê[í^Ã궆ëË·u  çØ¡c[+KgNÑ4­˜`Y#LR®TÚz§\1oÞºD ß_¼·xÛ2ÛVçÒòwøÓ³‡vú ®i™FWPØlzyc*$A”d^²-ËÐX<îù ÀÎfµ?“꨽ä@þ¡c{×6kL:6Ïev«Þá ;:Z¸½°å!MÓ‚fG¢ˆ§ÀF¥‹1¦Ñìð×?ñ”¡k›¿ý'ÿÞë¶?ûѧ´v¯ÜÖ!Ëî4 B,Kø.nÛ£ý°Òv:º·V·Î»x£b»a@ýèÑ¡,„(6`hU‰=ÐJÑvˆìª< >rCZžžÝ¿ÿðñko½ôÔ“ÏÏß½˜˜¶zM*] Œ®ï9_¸~áÍžéX¾ñžGž©tÃd_n(;¼glw»µ`úÈø,CÖ¡‹4ÍÒ,âÓ¡¸(ž=vÊGÔPfßÄøõ;ïšž5Pœàh6›H¼;râv½©#âbÃýyÛ4òýýÍnÇCd§UÈõ³£7ít6m›þØÐ`]o š© ²¸UÙ†Z˜`×âD¡Þ¨r’h˜vµ±Ýs À ÚR²ý M ÄÊQ4;75–IçŠqY¡ ÃÀpœãå•åJ»…ºE;Qð‰>ôÆÛ—r|„åÄ'_;ÿòÎNÓŠÂ¥…»¹l®ÕR1BÐŽë’E„žO ý;¤(†¦ DùÀ3Oß¾7¿¹Yó1 1íõ #²Zë ÷dzéÄØø`²[_.ÛnÐÕ=†Í®í¨9ÁëW—Ü“Çþßü7Þ½õÊ[7Æú¿ü«ŸZÒÔØP‘³ô±ÁÄ…›eI€¥##}ñ<ù©¬ÌòæåM!9%³ýk¿ûßînWI¨–Ž<év6{º§#  –éô¥RºiúÄ{òÙŸ¿qîÇ÷—V’©Ôç cûº•e p«¶ž`øHlÈÙžêøÚÁ#7Öo?üþgÞ9wŰÌê¶[šU×m»fv2r¼çû(p0ò=Ÿ´ºÕf§K¤fŠ#kÍž EsmK;±ïˆÞë‰,Ë Òþ]»:Ž7:6>=4|{a>&2š†Òñt€Ôâfks§¹½Ý¨Wš1‰B ô¼€¦€åG"K3 õ+_üÀWþñõ„¿ñƒsŸýÈãùÉ/¼vîiN2¶‡\:Ä‘ÈÆ%ÉôLŽ…zîSç®\Ž´-=kÕÖãžXݸ»º¹Tî¶áS¿}ÿö…=³'º¦|“`!a<\—xA3º=}áæ}ùǸtw­XèËå ›[[¾ƒ³ùl±Xä331&JÊZ­jöLÛ¶gÆJ,ÇÙ†åø qÃêu[êNµ¬9½–e“iB°ãG;;[vàFm—4ÓtÜHIÆã†©ÒêêíT¡F»”äFµ¥[zè;ëÛÛ‚,—ò·nÝþÐ>þ¿~÷Û /ì¨: þ@aJ8ùÄ‹³Í&&ô»{¦f¾ÿÃïy‘ƒÂ‚ްæ†Û•v²Ô÷_>òø'~î1ú‘³‡.^;ª­Zw â$ØÀë$ó{××—âɤoéaà¬m¬ú‘ïÖ•ù$ŠâÉRÇly$¤ º²ÕÈg²¶¥¾}ãò¯~â×ß¼vµ‡~üÕŸ~‰‰ J“¨W^^Ù³¯VëÉ ¤EáEѱ ?*·Ê¶me†¬n pri¨´{p€eYÃ077wöì´#´ÝéîÉ÷õùÝ^DHϲöîžò‚H à@®Ï ƒ±< ÃÍúNDÐhv°”Θ>b è©Mýn»©iž‘H„,ÇHöw¢ˆfØBÁ1ÜXæÖòÝ¡¾Ñ@b8Œ¢ ´ÌÞw~òÒìžÙF£­Ä”«7.# Óûü£ßklåÙGß»ï~1ž¼¿º86Pzýúͺ¢ ÷eútË@u CàD컾kùŽ/ÈÁcÏdõž ÕlkÅÇzkÏ<ûPÙ¶GŠvOèji àäô`§c0ŒIB\æFòñJËÜhÙª¸~èhaµÞ3ܰÛÊÊâS§üÍw¯˜ØøÛÿç×¾ý£sžb@l˽zgãÍË·*ª·º¶=x|¬»Ý}ù/?ý/?y×3ƒŽjá3Oñ|þæo|À ÀxïÈÌüÆ.=å!D›Û4KcÀŒMÔ›µ¸3ìŠL¸N|`€˜!EF×r —ø4Í9ž§0¬1=òØÇ~ðÒ¿ÄÄ$òi(ì˜@LA‘ï7Ý6/&i øØ3& Š—öLަû†³™d:õÒkçLŽÑÿý ¯º¶:³ûˆ,ð™l.—Hnnm%ãI9¿·¸ÒS»ùB­Õô1AËsзí0ðQòÂø/Ššï!G8ä8‘gißGã»hŠîªÍÝS{R§2€q^–<Çé+ýäü+Ó#»ªµµ®iÓ,Ý—ìÏes÷––ÓÉÄÈÌL{§Ù5{‘ÓKƲAˆï×ýüå·€é‘ùÑÏ~,Æ”\2g»žîùÇrGÐ5ŒÐ÷#(Yšq"D<—@#ìú•É€^ø/ÿ×/ýÖoü>ÏÐr\Z^«w{†že ×èycñ‰á¾L\^Ün·Z½ Â;]‡¥(–…ƒ9Åtü¸ ,Lå³ZÇŒUÚCÀZÏ»¿Þ˜íK'ÙJK#!îØÑ‰ÅwnW”R /_¸r}“þâç?ÙlÒêl:ùB}ímì©Có„xPbD*BØÔXº_*ŒxfW†´í›¶1…>¢(HxA–äþå…k>ˆ0ÅmúàOÿO/^¼îKBqpªÙÚ i>9¶ËéÖ)N‘ &…‘ÛŸ)0mõÔL¾¿ÓiAé_¸~£4>ÕßWŠ3Ü@.x^&“™.®”«Ín‡æ%zÉdZ¡:V„Ëòšq]3&KÍn›&38H×͹¹9ßvh ¬–Ûsã%Äñ?xêµwèáùÅùd_±Ñ®NMTZÛû{Ï‘£×æ¯ôz|lÀè©–¡vZÕ_þÌgi@º=óÚ[³ÀBTïö í( ]OùvÏàh!’ÎeC/`yÎ5-ЦƒÿÜ7)ȰÀÒlŒñ_zÈÇøV½§š^„0a1'wM_Øb>ɱìWW—¶Õ¦îQÄE6&²Ï|é³O–Óé9GöM®m·zNж:%ÿö>ú·ßx'@ŸÀÜ=°^éîÉO//Tk-ëS<9UêËsï9>÷Ê…{ôäl»²&Äx³|OI õzõ¹Ç>iïlbÂø8ô]Óq\©HkÝT_±UÛ2ÃÈ lL0€¤‡bÇ—i$÷R$h©5>BýøÁϾG±€£«[)€©\·¾04¶§ÞBšÛ¡P”Åu½k8ž,c¹\G3ÖÊ;œ$çò¾m—ŠÅ´¢dR©ÅŠƒÂ¤$ßÝÚÊdÔF“¡‚T§Ùi‡D Yß1i†!¼ÛÒmÛ$ȶm , JŒ—™t~@à0a(ÏÖ}† ÃEgÏ]»}}ÏÌ\&s`vë‡õjmmk‰æ˜ƒ»÷vL÷Æ­KïÜ|Ç#éR2-R G¨>ýgŸ|6•H@Šz÷ößl³FÈs\ Á„ŽÅe޶-;B`BQTàè?µBB¤¸BŽB„vïÄðN­Ã14%ð¡çeúZŽÀQ4MS€¤Yh†‚ížÛ隆bB0&C{V–À"\mè_øÿý[o0ÌÄ©|°Xÿÿ¾uNä)S{ŽMò<ÿúµùûõ…»åñbBwÑÅ·¾üÊBy§ÞéôñãÓ( CNàF“ŽJÉþõ{W~éWÿàòù·ÆØ ðèÓO«–3‘Ëo56 „ QDÁ0!ÄD6‘gÙOž}âû—FŠˆI/RdIÄ$æù=šf:672§j5Sm@`•J»‚À· 5›ÊJr²¿PÀ¡[éÔÏð\¯Úí—Ò²tùþB1›•%ab ßV{Ø $„a!ƒÀó¯×kXzÐ Ç È5[ݶëÚœÈãñœLf £@ŒiàcFê͹½GOîÝ iv£¼²Ri?rêÔôÄ„„ ËäÒ©âPéàþÃ+[\&uwñúcgÞûÑç_<±oà8KŸ=óPL‘iŠ1Mà ‚‰‘ ØN«¬õt! ©x,™‰ÉÍf— Ì`‚" `i:»a€¶ cLÀa(dD[uü Šo{­fûè¾1Ëõ€8–"Ø^„»J%‘…lŒc¨0BŠÄ Ë{xÏè©9>¶?•QÔÅÊjYµ"œQ8A`Ç$i~£öì3'>ÿ±÷x¶¶¸Ýý׿øU½×xóZ ªÓtCÑœž fqd>èX¶c&ûò~º¨6{Ÿÿôîݺ5>з³|çÌɳo]~õO|øùíŸ:»\©@„)‚EÓB„·æ¯óDB F\ÉSTøÛŸøô»÷n–˦ ¡øÏ¿ÿÃÕíÏ3}[¥ ‹(ˆC,2fµh¥/!ǯ߿_èË÷š¾µUÞU*Šb18ÁÃøÚòŠnèšãtÕ†eêà àÐwmÃq-/Ž9‰2‹@ÄñÙâD@˜<4½ûÁ‡.½{je»râàá¾T²˜8wáܵ{·wOö4í[?þÑöÖúûÜ·¬BßÐX©”ŠÇü0*Ww%>T(H‚H0Š%4„4Ã8žwíÆ­(q±,‡#F!¹ÁTº§›@JH(ŠÒ\"°,/ð’$z~@ ¢ZW)’™Ts§åh|ºtãæ2ð˜;À1™·ƒˆÀõ#Ûh Fg’júG»!nj^Ïô®¯5þñ_2µ+ÿÚë׸°°ýù?üßíç{pï'>üÞ™éñÓ‡÷ýõ¿¼üû¿õ™?úçWº û›ßy{u]51Q€>°<&òŽæ€ç{®‘`ÅбuB ’ðÂÕsû÷+<þ¾34uþÒrÄxŸþäg/¬/-.ßg‹ûˆ«½÷ø“SºF×ux4•øÌûŸ»µ|ÿüK€€l†¡9Ésô­Z×°ZŠ,a ]OŸÛ}´ãƒ…á\®d˜ÖØä„ᣛ7æwMÖ 'Æql"ß K$T][Ú)#ÏG¾ç¹Ëq@šãŠh%î;:&0&ÅdžMÄs0t¥Tÿ`2ƒ<]$6ŒêíZc«ÝuôúöF€œz£º´²X®6´ <}ôxR‰c»†¶°´’‰'ÚN"_Z߈Çâ!†‚ˆQeQDB–a8P(Þ¿wŸ…!‚Pd…À›DA CH"Œ!$Eñ< "äy> p¢ À˜ „,Ó ¢htôPysub¢hÛ^¢J[çЦ(Õp“ çú@’Œ„@Êv#/ˆ +t¼ÈÁÝÛëÍž»ÜS[ªÍJôüå÷®_9ÿäãgÿ䯿.+ÌÁ½“¿ô»_¹ðÍ?¾xù½Sùõ–‘ËJö??þÉçuŒ6ýÀ£Ç'æž0[]M­0"‹(1®ÈV«ÖÒ› /·7–Vï½üöë½æNÓ){šzéâË•êf‚¡Û>ñøóz*1ùÚí+-µÒɶfð<}õþÕ‘ÙGlËXÁw-Šà!Û1óù‚mvC‰B ˆ ¹þ˜¨öÔ},ð‚"ÕÕš()4µQ«šO¦î›srâóÿí¯6«Æ™GýÂÇú¿õ©íº$ 'í¡÷Ì ¸½–h Çûó"zfíØh–aø¡QxÏ=ùs«[÷]?à„MŠg –‹»ùþ]×/ÿ¸ë¢l.võæ;2M1 J <¡}À¤ÎÚs½÷öÂÕ€gO¾g«mÛNƒâ“$ò³ÙÁŽnœØ5½ozÜîThN°¸½¹¾¾ðÑÇŸzë·6›êáýû÷ì¹sÁóá k;¯½}AÓ»0B£cãÅR+ÕrVŽ[®+Ò®Ñ µQ ah Ô‘c§lÇÝ\[ž*ÉÛÖ¬¶Þ;<1Youúò¦c#ßÛsðà½û KM z‘ÿò[o ^¹tñ¹'ž²MGuì„"ýìÜ9–aAPå«_ûª’L©j÷Êõk×nÜÐ }vrJóÜÛ7oBšciÚCˆ"Ȳ˜ã±çS Dˆ‚€Ä ¢ë»0ÄB.‘‘ÑñŒID1Yö,oàÐîÖzÒË€b.QîXºí»^rÿGÉ…ŒXnXPÅ8_ïX¿øÉ3­ŽÞ0¼Á›Ïr¯^Yô™“âby•¦>öÔÑ®ë¿ôÒåoþô÷y`ÏháÍÛ-µEŸxꔩքdivh×êú"™¶úž“éúø‹Ÿé“b#Cƒµr/ «òÿÈG¿þò«Ÿyúy…Õ¥ûÇÏÿ¹ß¼øÚ"  e´¥8›O&UÓÔmm,¿«Ü¨Øk[Å©¹êòr ÖßQòy*ðxA–9 àñ£Go,Ì€Pg•X]ë:³gdøí;ó‚,9¾O±¬úédêîÒòÙ=Åb£«w 3k¶Õè´¶UÝðíêé¹=w·*;MUæYÛ S²¤¦ëۮ絛½L:yîVWu<÷Ï¿ðÒ•kv·¥ÖjMÇRél"J&Š„p×Ôï..t{šI‚À³MQ[=5£Ä¿òÍÿ@®‹ ÁAHCŠ@0¦8î?•ÃÒà€Ù3"Bhšfiš@HÑ´ïû~FA…a!7 2»'<Ó*W:=ÓÓ-—`²XQ¯ÜÜ*¤åÍ]¹•ŠÎq ×ñügâœà ˆB„ýåýÙ¿ýÇ+ûG3óK[»‡ó#ƒ™ßû«ïB§ÓË[j:ÆukÍó×¶ª­Ä˜("/~ðÌ·_ž_«TGs< ýÙO}ؘ=ã3CûfòÚž}ÞVëf¯Ãů¼ýæSûÀîì@zb¤ôWÿöæÙ¦˜œ\o7y–œ~ôÄkžœ*«æçŸ{ðÛç–ß~gÅR-ÝôÛfT7ºxì8Ñ×CÏÜi9 eÖ7æy.RÉÏüSo¼ùú'LÊ IDATêj½Ý#c3£ãqEÞªTÒ1ibjW½Ñ©wÔ0òiDÆ‹ƒµ'ÐT³×Ëd³ @•¶ y©?)†{zïž´,d’2MDºª¦µ Û0=ÈÛ—ˆëŽÛi7›]­/»¿8ß2zÈ|/@¢ ä…gñ¢cX„ÐkçÏòyA“ñ¸ãÚo]¹46Ãr’"‡žÇ Bÿ@9¦ã8(ŒQ,óÈC§Ö×·‹Ã¾ "k:OQQe‡±m‹K Ð4ˆÉR³cºa4ZH\{wGäÂ÷t_øàÑ…ëÛLŒÅŠRb<ˆ`žOŽÇ Íšºþà‘é¿þú[—o­dZùÕVk[ëA>-ŸyüèP’¹y¿^Ê+ºî†zaßý‘=WÝ^â’évyó/~ñ…ÇŸð؃ׯ¾¹Sm?ó¾gY÷õ ÏSpñæÛ_þò\¿yy}åŽnY¢È²¡kjJJ#¦Í0¬ÂPéojÍ$/,l.Å8æÎúÆ·Î]¨©¦å{ÌëZ`A@óNoauµU«„(\^\,¦²ÅLvegy×ðx[SM×ò=//­®Ìß»ïú^øÙT¦¢÷¦òó«!Å),µP®`†¥hVÓgÏœ¸tó¾jXÁ:í^j m¦ ò4B4d[–†(@ -Í´(lWª€cÈr´ï‡×«žæÁíV3–H¥“ ßsƒ ¸qç¶ Š`J–¿ù“ïÝãþ<‰"1¦02…kš ÄÍÐT†˜€d,Ñh·† ƒÇ;söäñ×ò*ǰ”¢|ç¿–. (Šîê.$ TÈ-—»„Dw¼³ çF€ðþí2hŒ ! ¨ !$"ùŒXáÛ å¶ª^½póÏì/>¼7TuÛÝìt}‡aùGoVX&âX²Ù°Ïha@ÏMöE4 ê£Ï~ôíoüÝË—^.¯,è¦É2œfY©L¦¦÷¾ý­¿ZX^œÙ{ôÕ—þyF/ô\ªŸ£}™¢1Í¡Ð!+1Œ4~0tTèrý}C2 Öm²°ÙAa‘¦ø˜¨H„ aÀ°\èâ¹ÑÉl*ÙŸL•[퇎Èõ5Ûm 2w—ïu´^½Û«×kóËK–cB@34“Œ'#Zšöwßþ›>û1p­Û•9q÷pAÕm¡·7Ê®Rwzš¡ˆ`£g•òÙfWKĥРºø~๚é¶Õкñtÿ/¼ÿ¹Õj5tL"°“¥aUUG …!×ñ††ŠCù<Å0w×–Þºüšiªó K1Núø?äxáâÝw=:ãÄbÖ±]Š¢‘ L}¹ŒaY‚Àéš i÷Ô»7n?tàú»·!‘çå÷ÌDŽD˜2THí×[=­çœÜ7xu½sj_ÁEøÄôÀÊVoßÁ~³ç– =;œ0ƒˆp½kCŠÌNüë®=ûОÿõ+3# eWñæÅå|:V­š?<}eÑ üÀt"‰gèˆ8„¼ô•_Y˜_¥?þ‹Ÿ”NôÑùkoŽá%ñánÎí=0Qš\][ýð³/ÈöÔí®¡î=ü ÑÔ÷NÏêÕBz$@¤O”×Ôàb}R<)§6kk-»w¿Òó5ƒÃq<˧iZf¨D,ÞÓ,Óñh£•ë5Ýdª …) Óé4ñüžç4uÓ³u–¢,Çb¥d²(F>Ä!€8 BÛÃf:1ß,WÁ(ˆåØD!#HgxŠ\º}ÃõݱEQ4ýHa¹ŠªU­¶Ö<¶oÿ¥[7²éôK¯üt|×äÙD€Ãs/½ò}; s©ØÔè¸é¡þt¥Z§) ð C×õ0€EaahŠòý0t]©·o¬dÍ…tFÐõ5Ó£ ÁH<ÓU}Û´'Ç3/_Ý^o[•’?Yl„;—PÐw0@Rt«ç¦BÇðåW>VYÝïWA(!ehÿÒõmk»¹g¼¯Ó±Æ§’oß,uè@ac½§ª^*Ç™zô/_×L—Ê0œ­é¯;Ø7ܱ“§ÿÄ;Êüòüïüîÿ»p÷N_*ìÔWW—._ùÑÝ¥yNÉu=þü_üôãOŠÉ\ÛirÌä2SƒûO?ú¾Ñá±úzÅkª dŒ‹ÒÃ{f~í㉉|ê©ÕJËv]¢ ˆK"\LbânÓXØ®¼ôòO­(¸»¹ÉÑ„çYL±´g…”¤†R,A­éÚÐð°H^|óîZ«[Ȧ=ÓhÕ[¦ª¾E! Ç0ÍebJŒ§Ͳ0XÞØò=ßC¤˜P&r‘bÎ=š“D!€)1ž/JýJr8Ó/ ¢DL:yàÈÎß·kº¼¾þ±ç>¨U¶vïš9qìȡÇÎ]»óðƒgóÙ¬ãD•Õ™éÑ ¯¢ÿì—Biˆ!€"B êÌžiY‘÷=hh͹'%4ÃÐ4 è|&ÉÐL2.t5§Ûì,ï¨kݾ„ J¼ÌQñSÈ Ç\}ù/Œž( 0`b8ÁJlÏXšú›?ÿ'Š&¯_ßžëß¼¾aß—8¾”ÜnšuË¿rµ™J~å¾8Ø—Ž®61Áÿéïý‚4=1ÛWœ;Þ,/ì=|æèÜÜå·â××]!õÖ¹Þ{hq~¡f”W«›mÇÅEÃSÇNr¬ð³×~ÂP4.”NŸ<ûsO>1516ýÆû·nÖu³Ñ#^ˆÂÒ„cXUmMçóˆmWjŸlk ÆÿùÁ4qž|ÏÃ+«[õ–ê1`y}+•ÈaDÈvcÓ4=/˜™˜è™Dz(pãñÄÈÐðêbã̃³wï­Y–M!°% <D„¡Bžù¾a:ŽãAÀ@*3P"AПIF9uüÀâêfœçs©Ø‘¹¹þ˜¼°¼–O§vMïÚªÕ>øÈCMMÕM³XZ_Ÿ_[µ}~Å\Û¾Ûk¶_xâ=÷——îŸ:4K‹Êúv-%ˆ^„` RB„ÌLMaŒ{øÌG>ô‚,KÇO-ö÷çs?}õM%¦xŽK¢(èùÁÏ=¼¹Rž›™lµº†Þ;™j¹a·ãcJùø™C¥¦æV«†aÐÔ¡Qt¯l;H¡™JWGð)xrÏ€>´júÔdòètáÞ–ùø•7îù>¢O+äúânTÚå¶úàÏÜ»{ØÍ]cs×Þ}­ÝÚò|0:>«ê*Šf4?òäsÿþ­áÙ¸çt’¼rëÚ¥ÁÒÔ?üãßžÛ¬.l7]UÈÁˆ° ó4ÆAne§¶]o6u««uy†#*"/0¬ëyºÞ[^Oɲ"ðºî`–1Ô®à8–Rñ¤Ñé½øìÓ2+¸>Ò,‡„~òÿ'ë=£$¿ªsïóϹrUWuUçÜ=3=9ôH3i¤PNŒȈÆØÆXl_s1¯_‚1ØFÀ$HÂDMÒäÎ9Uwå\õÏéœûAk½ËïOçûù­}ž½×:Ïãõ“Uh¨®ê4,UÓ ’Äh‚bH ! Û¦e»íq‘cÖ3" M5{{;ëõ†ª)$N ×®”ª‘PpuiþÈ¡;£‘0‰ãO—}÷ÜT-„8  ÀÜÕû—ò{©Õõ;¶üéóOôÅc·îÝz³VÝßÓñλǺï>»4šÌ×­÷wwlï×]˜ËÎløÁg>¿tó‚¿m(UÈ%§oÆ£qO:–Ì$Fãñx_JÖvîÜyüW?Ëi4¬xåU­f*y… KÓ‘`¨%èQ-ÓqD6â^ï'ï¾kba5Þ}ïì¥õB• 4åó¥zCæh ǰ O½ûŽÙÕÜÆî.‚b¾Pm(¼È² ë“ "MÒ8©[P®5B’´ž©ªŠÍ’xØ/MŒ&B[vt*ªFâ8@À„N<ÁIBQuÓ²MC/”*Ã6÷÷h¶Í`Èëñr"ïÚŽi™ÑhTdè±ÑÉÖ–f†f9†Q UÑôõµµÅåVuU5h™&EÒ;vÞ’GxÜIe—ï;töú¹ûGnÍgåõÕ©R«º7í~lÿí7Æ'01 4ES´nIíÞµõúèXµR«6cãSz­®Ë‡nÛ¿œLÒ¼öð½‡uS»6IDÞùp¡-áYY]--äBÀP[ýýÝÍ?øÇ/aZÚ>Áó¿ß<çèåDkÛÿýó×&¿ðÈ‘´ªýì×g6ŽkU-$ Ä‘Çd5E¯!IÀN-¤Ø–v÷ìíîL¯/ìÜ´¹óö‡÷vlœ›ŸˆIñy«ëù‹ ŠÞÙr㣥•|VÆMHšÄ1 Y1TÍp, l÷à@[ ´˜×ïºm×m{wW«õ—ß=í8®\“D‰úÁCS kŸêÁxKbmu=],ˆav-ëㆠe—ú½»n+UÊЂ ¥¾gÇæñéd¢9äB7ñ½–&§§×o¿k‹¬¨ ÇòÏ“€cØr¥¢hZ©RQUƒæX‘çy–ÓÍðµÄcѦp[[ÛPo$EEc‚ -Ó’uMQÕ©™Ù™Å•šnúF6 èÚ°q \oÔϾüoÿüïrµê-ÃÛN_8ñòqÚ†ÿËßüóɉÑ*ÇdVÖë8I8FQÈq Ëkj£NSŒƒ …A„0ÇW.^D–ãºÀulnûdïà iX M§HüâÄ!˜e»Ë-¯e Uã½´a$ºÿÈí'(ODÃ8Ä[¢M¢ÈlÞÜ‘ËU1x–Îæ‹²¢º0 HŠöJC`·îÝÕÞ–ðŠ†‚ÄqÇ0P®×ŠÕÊØäôâêZUQM×™›]©æŠÙR™ÀñDS“dY­heÊuNò»vöäÕј—½ëáG¯\?—Î%>øœU^þàÝ+õb “4XƒÀ Â…Èq]š (’tXJ¤HÓu1€8ÌFæ"ðë÷Î^_@P*•€‰AˆXŠû]Q߉w?tÇ‹?O¸RCÓl'µVÕ 2l×+±AÝH„¥‡ïnއ¢ÿÌ¥±RI9uuöæBaã`÷ý÷Œ tÅfÇæª†þÃß*VWôW;†úÿéÛ¿$ž¹ïÒÊÉB-ì÷’ ëèÛã ¤6ZÂŒ˜3˳“†Ñ˜œE5S!ÍP†aMAÿ…‹ç.ß\Kæ‚‚÷o¿öùñëãûnÝ H‡ì·´8‰ã¸ÇëÑU݇܅LÁ#q_zúAQ¼5j™V:[ªÖë¦í`㊡)g­¾acoWk¢=Ñ<6½è8š¡eYÓuDzm’¢tÃÆ˜N©ªéºpÓ¶6ÇŃ~ á€g9–áhŠª«ºÈ1Ét>ô©º)JÜÚz'€(yÂ~Ÿn¿9q&旮ܘ,kÇøüÄ@z-]*-Õe@"ñ˜Ç D\ä^Mª5·r⃟×<»ÃæúÄÂõÁm»*Ð.~åÆÉ ÈŒß±lÜ\H’ø8±}÷æþl®1 Ç0ÇÒYŠ´w-Ç´\BäÂ-n… ŸÑ5S5lž¥À,Cz½B©¦å‘ã‡r¾’ìèKãaH¿Ä$"b¨É;Ôß•IëªþÀƒGþù?ßú…Ï>ôͯaß–®æ¦¨GGÇÇŸ=z?¦¾û_£ êìñ“I†&ÿ½OF•÷ømC³Og¬yzm¡5o@J vìÞ¹79?N4õ\™9×+ù§4'›©ÃšËà¬E8.Ü·«/_(åÊÛvñè†þ–x " Ãϱ¦i•jµ@4<:>ëšÆÈέ§Ï\r¡óÝ_Ïä ,I~æè};¶nXXN ¡ÛÞÖÌÐÜRº¢ëêljIŽí˜¦CPCÓÉT‘$ݲg'Ö8Ž’ecë®.žÁ}>¯ª™Ž[¦iYϱÈÒ*šEZcáZµÎ3ôà†~¯(žúàôÏ_{dÏö7Þþ ^o ËqŒ@3sK«‚èAk”Ê>g5µfZN,T¡KlªZÝñ,L^PLyçàÄÒ¨àl ¶u÷Èè•·Óˆ…ânU»ÿÞfæ—0 s1\ôHŽ?è ¦bVé°DÐ×ÞdäªÓ«@‘®­P$Æò €€À°µlž@ \×Ãvr䕟‡ÄÖöoÃLÍñ‹|ÔÏ}ý«ŸýÒï=|pÏ•ù•` ðìCw+õÚá{îìéHüäǯ<ÿ¹GŸyòñD4º¸¸ØÖÞ–)iŠÙ½#µ²~ðжã–Êe†"ùêIb÷Žv‡ÀmS))ºÄqAÎÿ¥/ãµßþtÏ}[õâèÔ•µ*j¬ÞÿÀSÙtò£tÅÈ+,î¸÷I´Às^‘÷܆Mét厑Í'NÝØ¾¥7 ´&š)’æYŽ" „aÍÍMÏ¿rì$M3ª©x}fbu€È#°z».^›i‰C)+H¸í¶}cÓkpi†ðI¢Ç#ø|žîÞöÅ•l¥\o(Ï3]‰×u~Û¶ÎFC½pfnÛî.ŽætÃéíJÐÕ,G3ŒRUvÖ‹lêëéîìéï¦Ifnnö£ëã©\yh k~nÑ4X(p [†×Ã×Ó¥jAWŒyŠul­\) MQžÌfêéü¸êIªyLQZ{‡†"­'ß/‘m‡úö­®dûÚ›–Ö²†Ñ®[& 2 a™È!iaÕbM5jg½šœ^L§KÖ\²ºžªhŽãÚ®iCŠÀR%[3\nÝÒnX¶ßÃ+Êr²°°V {Éæ&_E³lCon…᨟¿ûÎ}Åj¹£³cnv¸ûî;ÜÕÒFÑMÑÇ\ók™ß¾ýFK[G<3mûÜ•+ñX,]Îïˆøˆû< ôHQK­$Ù4°íÕão»õbE.«¹µÛޝØM\¼9޹H7Ï=z"¬^mÜ{ß™™å³‹ÐÐvíØØß×·´¸€K8EÐ…–e•«òÌôš\Wd]õ‰üÎm½"E}pâú7¾ñ¹[nÙ ±‰–p¾T 6G|<—É—ë YS5Ã…Û–•Ï‘ÇJ¯­¿ñÞY7 ™ ƱÅ\yûÈÖ»nÝ £fX¹Byu-;0KâÍÑiŽçd½EÂf¥@3@—NÚ]/•¡Ð.)òbÙÙ±y—ƒŒVOëRr=±q®Xmø=ál®€aþq´¥¢P!/¤h‰%, R}U7úðüá­÷<|ç'® QלbÕ,ª¦aÙ~‰­Ê&މ£Š^Síd¶æBd;вæ¸ÿÞ»n¯¯­UÚ›ï]ÚµcÈrÌ€ÏÏñœ-«M‰æÞÎNŽåË•Jr=uþÂå_;Õ(ä63,“Mç1ûÑ‹¿Ý0ÐqõÒäù› Ä–Ý£¸Žc”*=ÒâôõõB‰% TëyÞ+K¤^ž_-\¼væ3Ï~áS÷~éÄiC1Ä?ýÄ¡t¦øÑøÂó:ueÊ´×0Å ÒôyYª9u]èñH¶mãÛ?®ó^Ÿik|î©woßôÀáÍÜdÿz©"ËšcÚ!/¿acïäL²ZÓ\àÒ2mDz,ݰ]·%/¯5ô†ªÏ-gV2¥Rñèч^~ùÇŸ¼wzv>_,e ¥šªÙ¦iÒ”£›>¯0²}K¢¹‰¡¨Ë—¯œ»>á‰4}ö±{“ëé£ZLç’ÉÂm{·¾zìDÑÐ}8pPµ€¬¨…|m%]ÒBÍICKb(&:jƒñˆ;ˆ?•^ z'ÒãÝÝ+u½Ý‹}åK/åÆÒJòãÃAÈRµ–þŽ‘[-#·Å$ÿ#Ûwæ§ç1¿oby}ó¡Í5Å0"¾¥3¼˜m CStÇv‘Od˲eZðîÝÝåºZ,kç®NùžŽD‹j¨‰hhÏÎ×ÇÇææFFFÂÁ„¨P®¼wòÌòÒZ(Ü>سqÓ ÇV–W/ÍLµE£Ï>z÷cÏ‹.Ô§Š9âðÁ‘~zùê%¤kºÎrì=ÿ§ óz»´\ÁìÐÀÖâÚâ3Ÿù²aßþÉîhï¼:½ ƹ–mÙ,Cž¸2­&t¡¦[!èº_ùüSÐ…>Ÿ— H„àz6ûÁ¹ë±ŽæÉ‰ùpP|ã½ó¿}÷ÃN_Leóç/ܰuÚöÆÝ¡J±¶cÛ,+@0› IDAT¦i™¦£é&„H1,ÀÓ ¤s%M3ËÎ5ªùrÙöìdúsŸ»¿µµõàÁ½ë«ëݽ-µR©.«ºª™¶‹9Îá;nm UE¾R©xÁ–¦ð#÷dHª©9z}t4 |êèkÉô¦ý£WÇ ×mnk)e3™T±¦è†ëxcQ\òuø†i”ÐÌaà …U’Fœ¢(vKx0Ô¶{ËfÑ®¤‹úrvÝÍäJ²Šã¸ a/ô·õÝ{ûA¹®¼÷þ©t*353"DÖp‰R£úжþP”ÛÒÙ¾§o~!Û‘RE¹+îHYl˜…ôFW’¹m;UE „Ä»öí”<â—¾ð)]i¼zê|G$ÜÑÕyãúM’eO¹pùêøÐ`—¢¨Ã›†ŠÅÒû§.¼ö›S޼piêO¿õʱ³“^¾{qftµXVlbÿ¾þ©©iO´™p5 "Ë\½º’I{%‘ ¶Üõ…ÅLaÏž=?ó F-¼<™²ëšíÀBU‰=$A°éå©’l@ˆtšÜwËÖ ×ÇÒÅRK4òõoýÇcGîxý“ ¿¿¡ë«+™õl@h[tì —AQUè84AÔëêÔܪ®†ar ­›6B \“cáàÄô2„°Ö¨Ñ‚PÈ— s\øÔSGnß¿Ã0Š¢A8{þB¦TµwÏæ ±¦MQK+kë™\´9*0ÔÊrÒqàMÙ™hÙ8пahÀ’§q†½>‘Ë•çWrŪfZ†eAšr=E‹‰»hÐ4L]5Ôf_Ð0kýƒ$%>6wmniÙrQ65ݵk_Üœ]Xv-ÇÏñ.©\É®Uf–“4EoÜпcË–›6ÄÃÑŽ@ ³¸Hƒêν‡W§—íš2°³ûæÍÕ¦€ô‹íM¾µB#Ôê ªfì°MsmÛ7Þº{g[k\7 Çs`÷N¯×kA·X,å²¥™¥Õí›s™Œn8SÓ¯;ÿ›“c‹©* ó£+_ýý/Ÿš™_oÈÖýû»ü!‰¹çP­”lÔ2ˆñƶŽÍ^ó‰|˜ö <çUÂ/æ’^¤«r‡Ïw¹X¬áD=UxD¶ÔÐ2¹ÜÐE–Š…›C~ºÚ00€MOÏýágŸò1¬(‰]›º¿÷£_xy~z)IB'[¬q¡ƒŒe¨¦P0õÇCþrEŽFü,GWk2Ï2šaÓ4©h¶¢j–®©ªQ®•–Ë—«¯WW5 ÌÖãqcA˜œœüêW¿=:6ß;ØÚ¨6Ò…R*›‹7G>?„®‡ç¯M˲lX0ô„C×oÜ;qñú¦Á^œ r™ô¼| F®\k(še9`® ×ui:n¢Yšbig½¢ä‘XK–%†[(ÔšBþLzµ5ÞWË$kŠÝ‰ûãmg>8…S$ÎP"'ØŽ‹aXK<ª;ŽmYš®—Š•µäÊ¥kãj£6¡ömÜvß‘G~õó—\ËÍë 3ë!Ÿ°sdK¸‹ËyY5$ t÷´|8JEc;Û£ßù÷7¯_½1¿º²´°tçíû¦fgM¿øÓWK…²n¨‡îØ¿°´ÒÕá­½ßýÑ[3Ér,(p8‹ð³ó¥ôZ2•Vîé:¼óD./"ŒøåO_¼>Ÿõ±„YreMdx ‡FŽÜóÉÚâ LG•Šn(õª©½ðéç_=ö®Õ°¹„®‹8ŠhO{š'§W†‰I1 µ%jrã'¯Ëõ•d’Ät¡(28@4I¶%¢ ß#Ђ@VôjMYÏäH’B8 Jªb¨²’Ìdiš’uÙ+ðžPÀ# ÓsK:8Á›èhy汿jzá…K&˵²ÑÒîA qÜv‘á8‰hÓ†ÁÞ…É©ŠekØ9<ÉåÇÇ'?šœkiKìÞ<(µÏýñÿ2u+(0Ùr!踮¡íº¦å8²¦6d"ŽIœf,³&1öƦ֢ fföíÞ‹„h†kkiùèü) Ù•²ŠlÇÒmmÚ´¯Y³ê†jÚ¦i8Ž$°,E5昼…í½?úÉ·³ër¦Pkò{lÇÝÔÛ2sséÕKK^‰ y¸DÔÿÈ'ܘ_ØÐ¿s÷¶bM¾ëöÏ=ýh(à/ÔCUº;ÛûÁ9Ì2;ÛâµFcbn1Ÿ+d2…S§¯^š.>ÿô¡äj*U”ÇÇ ÃnmXõ¯ŽçJÕ2õ-Îe‰»?q—HùbÁqL â>ž±]^54§^X-¦’UõáÃŒ_8÷à§>kê‡îüÕ»çmËXÒr tÜ€—E—Çü‡úâñÞÎø;ï]ðÔ÷^;ž]ÎȵêÃwl™\Ìh¦¥k¦‡£úú:q@@×åHœå¸|©fYšª*ÓrÚ[Â+«ùJ­šÌæYŠtR„® Ó_¬5tžÁ·öŽ/­/Í®&JÇ_Õuر³ÝE€ØÃrÅ¢cc]X­W¿ÿÙG_zã„Ï|ò¾ž.#q#¼É|åßµ]· íÉï.¬¥¿ÿó·WÒUµ®S,鸞RúÚüs‹UàÀ Ã!?Ï\Ï{üìÖ ±SoÏ_ûóÆf§Æo\ž/¦YN"Aä‰Ç>=·¸Ä!ijþ’— òí­ƒ=}µZ-¿ðoߟX©X² puÅÄ1ä—¸îf¿.ë<\·ˆ†a8XK“·PUTÃÖ-Dz–&[š|`½ñæb!OP4A’ÑHP1Ìr±p¼««}%•¦q`86†šæ%ެÕeŒ$lËÑLËuÏR C~âà®…¥ôZ¾ räüDîw8ôðžæpHòx‚>ESѦ°m[rC6MÃ0L’$$Qp!ÒMº.°Z­¾kç¶oÿû+ªªê†e˜–íBÃrmœTL„;ÄQu‡ÇY–aY`*Wæ¦óf£+î/ÿî›^\íè_—ë&…Þ9>a˜°) ´Fý,†áM~K3~kÚEšCr´¨hïÑîxÕtׯÏ][©tuDQï-wîø§¿ýÚäèõXstÛ¦žOÚô‘û˹ÜÖ›ñÊÛ"9›{†zÛ~µ^¿pñêéS§ÿ鿼2>¯ÊªnºM$yëí{ÿü~¤*Æòj¥¤9šå2$ÞÛˆ…Ådºxr =hA÷ÙÇLÍ­]É 'ž<úÈÍ©i­œ<ø‰£4ÄWÒ³7ÆNlÞ{÷Üœí(ðÅ¿X)äÆÞ;¾hjçÞëtRUE QC1èBü*+¥ª:®zyFd)Óv)‡Ð-TŽ¡lÇåi0ØÎW޲ í•:Qt!Her…Jù±‰¹&I\/V4ÝÄÒuAˆ8cŠn¹mîÛ2Ы(ÊÔbʰm¯O$08÷ߨ5Òë÷zü^ "À ¼e˜†ÙŽÉæŽõˆ’¦ë$IŠ,Ë04cº^;uöR¡R× Ë0-ÝrT²]€!زe+iY.Nð!‰8†a몺­§c­œ]X_üé±wœêºV,VjåMÛvÍ.§''Ò€Àºúã-  ¸ÆeDd9 ’„Øœøâ@ïÜ\jêíkóé Ä=¼øÀþ‘d!q!]émÌO/·¶5}ÿß~qæÂµó®ú"Þt¦²œÌ'“©ß¼娙«Ó“3åbùÂÍ¥L©q×ÝûwöŠ"ÿè÷ÿð?²˜¬ýõןë ÓWò$Dšén ÏL¦¼vSW€À`ªh¨óK®×Ä _û“¦Æ6ömˆ7Å'–’ó"’ÇÿÀ¾Ã¿>ù¶™ËÝ÷øS/yÊ’ÔÕ2ië¶ãXÄ0ÌÇ3UÍ€éÄ1Ðô¦« AàaŸ`Ø.‰a¦í†$¶½;¦Õ•RÃð‰B(ä5u Aø ÓΕ ƒ«µZM®ÉŠå8Šîˆ<MÓ:rÇȹk3Û·nš[Zïìuäº Q6_ˆ}ˆ¥ýž@Xû·uŒ_]þ¯œ=9ñÔ3×a†ç9Žep‚$!Ö8Î…!$òŽá My~-“±UåÜÕÑRµ¡Y–aY†ëêÈrŒ:ŽI›¿¿;Æ•ø€›/ãëax’¥qœ(á(S(UuYÌ-ë®[JU·?ùø‡W®ÙË%Çu¶„hÇ¥9–æXGò÷²L‡añÔHæ‘Dü‰9¶=ùÔ§ö‚—.ÝpBÁ’âXÍCSWK à囋 A<öØ=^“8jë`«Kâ›7öسqç–þ;G¶½{ò#„a¸ƒÔz!•¯´GýUE ù|צV8ÜÌ’ÌÚRfϦ˜®©W¦ Žæj6$I"!¹WG«ssÅR©ŒI,ÁØÔÔuÎ#’LLÜTuãÆòJXà…€©«¥ZaäÀ'ºšã©å•Ÿ¾þ«³ë†Y¨Ç¶]èºDZ&Um§®™¦8w†c€£IŽ¡ D4Ip Á2dM60c)ÚtàžÝ¤å–jõ&¿y¤Êzqze]Q5×E~‰FàùGîÚûâoN†Òè| £°Ž°Ÿó†¼"].ä× µ&Ÿ¸}¨Oú.~4FÑ8…Ó¯þôÂï´_¿ñš,s ÓPäx,ʲ¬ãº8À0¨ºÁ³,㎋ºÛ×o޽wñŠR“WÓÕ†lZVU­»¦iÈu œxþ°°VR?aÅÛfƒáˆ—â)¢&r‰Ã]¹Z†õFso¿f"gbÝò.̦A)]–G6t¬ñÛyÒhnÙ5<ä@ûÇ>¬^9ß³uËÝ;o8ñܤ\*û<þ‰›7UË t´ÄbWÞÿà÷Ÿ~öå×ß}çË2ÂmÇéé |s³³>_PQ”¡nžçß{ïÌ¥±Å¾Ä÷~q1$q?SÄégïÚV¬Ë™…Ô›’8‚'|QÍkÀ†!€!âñ'Ïä³~šE µuÓ¶ÔZæÚôÅñä¬iY÷ÞóxkS” ˆ@(ÒÕÚöú;Èý8#†Ä1Ã:¢þÕ‚l¹.@€"p‰#IœØ¼­èvHâtÛî슦35Ž!ÛšükņWâ*Ù’À³ÑP¨¡š™dj=[€Ú14ùÕ/?sñêä'?yääå…»ö'±L©$…bÀTû;[s©uŰ Óâ8F1ìZM¡ |d¸ÃÐGæÿëõÓ4yç=»Æ§†$ ¼P(®®¥ç––!D6B^ž«Ö¾€¯5Ãqœà˜Ó§/UkõzC“uY7-ÛÆ-w !€ V§îôöµù;šBHàxʪUsòÄÕr:µiã®vÑ»VDòdÄâþ@ˆTj8¶méŸ+4øqRH:æ4YkTïz`Ï^äºwnßóÑØX>£p J*“èíi‹$¶´wM_›?¸÷–……¥°ÏÛšhÖ ³µ5!ñb¬¹IâŽcbM˲¡ëÆ"‘l: úN\¼i¸öO}6îç¢áà3÷í¾eC÷o>œÌ¯5¦çR˜mîÞ>xcn½;îýýOÝzüÝ)€€ñÂÿøJO[ÛÄÊÊpÿÀøìì­»vnÙ°msÿÖ-Ã;Þ<þÖñ+£Kc×–V–ƖצçÓGŸüáõÒõ'öõ·ŸÿÐ@ë©Ü=b—ëUÛzîžùáß{\œ•¡q8‰ŠœeYSs³¡æ–byeÃÀ¦ù™yY7±’Lõöv¼u7I‰Db릡`(ô™¦³´¼ˆÜv|¡ ¨ªOò$âÍÓã£Mí-Ërù°@¥ÖRãkµíCmåJã3×9¼çÚ|f Áwv†ï½ûàñ—WçË7çÖ7o‹§–«½ÝB¹dsAšøÚ ŒãÀ4­Dk[s08¶ºØÛÖþWÿþ7í‘®Þ¾‘M«ÕâÅbvu¹R*TJɵªbf:K"KQ.ë6K– 5˵ÛÇ3.r†êŽËŠ®ªVw<ˆ“äPOÐë™’H3.tªUE3,šÆXž7Ûë\ >}ôžÒZæÔ…ñK×ÇnÜœ‰E<¤?`©õ¥t­X­iŽcÈ…† ãèj,«ÖÕÕ¥¥/ýþ¿þÎ+`Yîà®¶J¥®5É#’8<nè©Jõîý#Mò3:ñ‹_¿·kÇð—þþWÿï7>C˜Æ/_;öÎÄ·v¾öúqÑçÿô#·i õËÿ㜗RŠº`ÿ¿¯>õʉ르±}¤YÇpâÏþì«•jÝãóUJÅZ½rìµ×Î_ûèè'žHó{‡·6 LjZjRÓ阇,U¿Ä8¬È¦j9†éö%‚ ݲ]ÇÏS¯HS˜W`]亶m˜ŽmÙÙru ;1:¹è˜– ПׄвmHãAàE/ÉeËêkÿÙ/ß:{eêèÓ‡[<žõLÞq`³×[-ׂa­Ôˆú$_@èM´ÔUU9œ$zZbmíÑ«3«ËÓyðßêñgo_[Lµ·&8–ÎÔ]3»;[w esùµõ,DPdÙ›/]\Ne eè¸YW YÑ `ZÀ @ÀÁ M¢\±VÖsË+có¥ñmmÍI'Ý•%YU\ˆ‚"çºh1WÛµ¥»œ-oíëZÏeºÎQ˜n ,ç}¸5GØb>—Ê”6õtP$Á1Ìp[×öáM½Ýí­-m­¦nYÐÙ04ÐP¥¡¶v¶þê¥_ÇÛâ6D/½ò’?‚ÀOþæÝ7&“w€»0³ð‹7Î\™Èœ»2}ñ­Ù{ðO®|´Ü0mà¢Ñé|{{Ä5 „œ×ß™¢XÜEÐ’m_HXu•ìbQ1±8{#K|ýÏþ´X,à$ E~öòlÞYnTºû!Š!€íH,ǃ“Ó339ui9‹cH1Ÿ(¸j ¶ 4ÓQt[`¨ ÄækZo"”-Õ$–ä%s‘jÚ}¶lP4a»n[¼ynqIòze2,½kÀ\«w´®—Ô¥™¹bM<}cln:P`iñ:ÚZ&Ó8r6 uÞ~ËÎËcsÏ µzÏû>8}汇î½66;?‘þï\>=sÿC{B^Iൺÿ{û;Ú2¹b$è¿|mÌñÿòâK G_º>ãÚNUVTÃ2lÃ2tàºÃŽ‚8‰ F’Tïæ¡ÙÙÕlI6-'0Ë´X’r\øq›¨¨–i»,Iô'B’FÓ "‰]™©lìn¦YfS{sP¶÷tÞ²q` ³M5Ley–óˆA’Ésmt”EIà;ÚÚ½¢äõ{ãÍ͉hSO_OЯ½új½ªnìï{í½SAŸ´mÿžåˆz9i˜îúl D<ûܧI züMý‘j­l ¢\.nß8 0œ¢©ãÇ^M2·íØ95³ ðˆ\©®1$YU,Ýv Óa)¢¯5⨠W"¾¡íý¹•|C³UÝàRQ´†b‚ˆøæ–ÓuÍŒJ<.H>†+W+£3É…|A¯Õjª^mè±€h9®å¢‡ózøhSS5_@ÈeA1,ÇF~Èâ„…‘‹ëÙH(ñò;§lÛ w†²‹¥ß!Àu¡‚i ÉÜGnÝ»·˜-üæ­÷|Ñà{'Ïoß2øó_¿-kæÌÒt‘íÚšáX®êº¤iÛÀÂÃ@œˆÄiÊ#0È4Lö‰4EèF¸È3Oñ40ÂØN  ZzÃUìëK…‘mƒ–ôC]--Ñ€ß+I^Q$ ‚øŠ¢`–+Ó²(’ò‰"„€¥éB¥òïý°¹%ŠcøüÊrj=wðÐß¼}âkü…+/“ß²u3Ô±™…@(07·xúⲩ:rA¦ .6f–-Gs[ú|>ç©wÆIú°¶R†ûq“#¾ùÍÒ´ªê$Eú¼^†å·oÞì MÝ z=•nií½1s>l+f²€$ËššðŠ–ƒ ×LGäéÎfÈ1.„ÃC]³3ëó3k@!¿(±”À³’GÈ—;ÛsÕš®[‰#hº\(’8);‹é\•¡HÀ”†¢Û$ž¼÷VGÕ³™¢¬[ºíöw¶}ò¾Û“ÅJ1•]Í•–OÊ¥z ¹®iZpÓ˵ß\vöýÁ&èÓ'?¼tm¬¡h"ËøîŸ~LÑlU·Ñ$ÑâáÓUº˜ã"Ë€ÄF’€NÓ´‹P_{TVt"Ž¥ü^Q–5Ûv-b8ÞÜämKD UxùÁxI—9G«5œ¨‡ðÑT è!0ׯ°D$Œ!¬(2@>WP a˜P `ÚöÔì|¬)BÓ´ ÑÈ-;WW’ã7G£±X{küâÕ)FâÑHw' \­Ÿº<Þ×qLûw.-¥ª/|á¶Õ\I.a€Åƒ…ÓôïhZ^¨™å¢à¡né|ï ÐÆ‘ÀÁ‰þÇr²¡ŠoÙöôüì@oÿ»|@Ñ´W’ü~?DÎÑ«gÇ2ͱPMU îš6øØË'2Ý-AÀ«j¦í@€@†Š‚.$pÜF0—¯íÜÚ§Vó«–&£!¿ÜPÊu½VkTUÇq Ý´Y¿gÛp_:]¤)2f( ›K—ê 3ñÔeÓÏs‡nßòÒû—1MG8,Ö´†ªÙ¶ ]W3m×…@¹dã¿ðÏÿüÅcÇ®¤–j#·¨… D€  Šn`dzmm~-hÕ´ Ó½÷Ž]gnÌX¶«[Žn9†  ÃI@`Žðð Ey†Àq‘c’Ô “$Ã0Œ¨ÕõT¶ºg瀡)¯Ð⢼Åà¢ĨH* íÌÕèaò†ü³±…Óã“PSWK¥•ôšO¥ryeuU”¤¦¦M¶èØšÓ„…ƒ‰ñ­^¦:Jc+­-Ñr!æê4Oâ‰Ö¦J¾ôÖ»[Z¼‡îÚõ­ï¯t*ÈBË6òèàúD¸«¬TÒ€a—òZ-«ÎŽ€î€uokªdŒ‚ÄžÛo+ä28Ïcš™žnMÄôòOöï¾Å/yJ•²O’._Oå4ÌÔq$H‚À1ÀRd,ä‘x6›«Ò%9S¨Ê²JáF¶Ö« ô[bb¡66ŸòIüÞýÛIœHUêé|µ% ´6G–ÖŠIùyj~!Õò:Ž•.[¥ª HBBÁËæ+êÀ†®fžyëìMU7!€–í8Žë:n“Wài¢¦˜å´ò_ 8vìÊÇ“ÐTÓèìnõqt&“›¸>“ÌVD޹ïñ;fÇ—1_µXk‰†hîm­•«!ŸO8Ç À ‚$‰€—ù$ŸßëáɺªE}¢¦™AááB¨ŽG¤Kåš‹0^à[ÛãM•Ÿ¼é¥(GñPLO*{=l±Rycr-ìá0­Tò×–g9ä9›Êú%Ÿ¢ª Mçç¿dEqzeùZ¥Güñæˆcc~‰òJ^_´À IDAT0Ðä÷‘,UÌk…ü¿þêšÎ’oüê#·n‡ŠÃz¨oüÙ}?ýÞ9€@0¼+áq¥’þ±Àió•uÛ硉xOX–k{vîù£üþ­;6Ÿüðìôć€ñìܲmna¡T.ŽMMeK)WÇq†dp ̰!ðæ˜_d™±… A‹é²nZ6DŽDܶ{èæYËvÂâÔö­ƒY–(×åTª4¼µÛË —¦–â‰CW®Íù›¼ +ÍvK“Ä|¶¢h¦a¸I0ÿÈèåR*±}{gTÞ<ÿÎ@KsW{ášS™9o¤{ôÆ…l>3—œY/ä(Ëãˆ!Áx“®m:k¹ŠnÚùª¶©#”)«Ýͺl4 ·-`Æ1tks\pt%ÝÑ {„l¾ôáøš‡%uÝHt·Þ{Ëæ™ÅõÔjÚq pR]‡°4¡é¶eÛ¦»¢Y·,ÓIfŠ«…ºå¸Oc8z{Z[LUÓL›!¢ñìBåãe% ¥%0<Üqúôàø[—â6ž¢k•Šà Åbþ®x(S¨ú½ü¦Mýd0`kFØïýéRE`9¯ Tëu‚$o€ s‘€çÐÞaI‡oÙ™-¯§ò½~Ÿ¯É·cÇöÏ>ùèÙs[»{Â,[©äŸ¾ï‰é—µýÄý'Nx¥ Ë`ÞÙÝɳŒÀñ--‰XS8ä÷ë¦á%„`©Z—Á+y^{ûýÿÐñžQšÕ½oU=9½9uNÓ==Ý“sÖH£ !$‘Á€Ø€ãp͹\ì‹íƒíë‹IƒÈFHBiF#Íhòôôôt÷to¿Ýýæøä§Âý0^¬ãåëýi¯úúûW­½ÿUµpýÀ±ÌVË §£õJÉP¢b³qùê­÷¼ë·'§‘,%ñT:õ×_ûÅO_ºP¯›P‹ uè Ï& ôÅê%ç…×nv‡÷=¾çûÿr•"0 (ØÜl¹ˆÄ$na¾zéÌvÉÇ?~š»çч˜©Ö*žïœ¿|Ö \ße:€-AReÀ®Úð0;@’ˆ½Ž’ åŠ$ ¶ÇV 5ED5Ókؾ&ñº&ÅEÉc¤e»3sk %Å|Ér}ÓvV²ùP89øôúøL£åÔLRmx P€åMÇ#Œ* W7½˜&—öfÍxØ•Ð-D6‹UCU…Ôf©™îOl,Uî* Ùtî⿽[£¹ry°¯X‚`f)!ÔâÑDÈ`nàºN[:e6Íta£j—ª¦ÌD,Ü“NÞ[ùÏ®`v*ûÈÛ¿’]×456MŒëâІëë†u5—/ZŽ3µ¸ïïNG¤³Ó*Ç]¸=QÓªÒô}»öE ]–eQ=ÏcŒýÝwþY“¹Öfmûö}ãç£j¼AàpÛ–Ý#‡ wL·¼m¨oq5Ÿ[) ÚS+UGûË¥¢¡ë†¦Õë5ß÷;ÚÒ…Zmvna>»„ %Ý™ƒnn©êÄ ½§³·xÙ¥ÜõÛwÇW4íÈè–ç_8óÔßþŽGö¶=8ðûþðO_9çz à5ƒZÅ '”Ù…Ú£÷ö,­4ƒÑ6A.°¨ m íËý±ç^ºùW_ùq½îˆ¦[ªûÜé“ûb=[êÕüBnv[÷pOßÐÂìœ,‹¼$sHxNŽϡ啼àrÝMGuC—ㆶ¸’¯[>„@ €2& \H‘Á“K%7$‘‹¨"°Ô°;ã†Àó‡öôK’|ezþÌ›ã„ÏÇ«Å:`À ˆ1¡Äsôî…åµx<.Ê}{_xáE]Ó0&”2@iÍó¦‚Àó%à€˜äŠÍŽ˜ª*‚iÁPXr 76~fàkå:Ÿpˆó¡Gw^ºt¸¾Äóò'OýÏoœyç=Û~òÜ °Üô¸}‡÷v÷õß¾uÇ%ßùøo^¸vÁ´ËN`‡Õ¡TãE (Æ4$ó…ÜæzÅ“™  ^ù®DDÑDâzn€Cšh9åø½IÃtýTTìËÌ.+¦«É¼ï3;ÀÇŽïÊæŠ{ön%¾ï$âfrõŠÉ#H(ƒò<ô0Q$> Ô# P‚Ï8NÖtÅPCaE «Š2RÑp,$ª\"*üù3l4šÛ»Ú«­*õf>ôØ{´øúÈp·¯Íî(µtËYVÙÆþ#½ùUe4Ðñ]×P…CGF3é0å°®%P$R5µ§3ÒU×qm×™¼=ݨ7Í–ãŽ:‰tÆSÆFIÃ\cm½Zª›–Û×ήæªåJg:<>±X*Ö²¹/Ékå¦ EoßRµj­qíòùW¯ŸíMuyŠÅ_œùfpK×¶[­ÍÝRh™fÓÌf×w6¬XDÚ3Ò¯ér&™ŒFB–ã–$‰†Ä·Ü@d@é‰høÂ›Dݨ7Íý{÷œ>tÒÁþj>_,dÛ»ú:Óí‚(níê¨XV¹ÞÇú¦=v2›[%9ð\L)Á˜Ó4l;”RŒ cLkùBÓñYæeDÈšH½çΜŸëO…*¶¿ºVnäó ˆÙç®´qÕoýìʱÉÕÕ" 0 `ƵµÇ?Ñ °U©Loä2ç ž£`ßè±ÕÍE €‡­ ²óM—9Âû† •V¡åØIÇô¦åêŠdºKh"¤D ѲíÕbËñˆ& …†‹ Î2d2*ñh½ÔÀ[^ ñ¼®J2ϹÈ<2dÁôû˜` à€(BÔ5x3b;»2ýéÌÉ£‡oÏg;"‘Ÿ_¾Ú™I\ÚÜìì¸0vÕ£œUßÐåÄhÏÑÕÊ4`p6wõð¶Ç^??ÃüÐ7(r¡ÑâR1 ‡"!ßE €â|©…°L;PÚ2í€àh4‹Fªà mz–m¥ÛÒ„¸!ööw•Ë ³Ú¸9³B5™1Ú“Š=pßñŠcÿÖ¯~àöÜìŸx§Y&Ó!‰RW[Òµ]˜®ª/Ÿ}Á²Y2d\;/©úù¯õõmÛ¹mgOÇqZmnu¶6=§ É À˜¢è¾eʦ˜ÐR©ÉËåšý[ÛÒiã<²¿cOOè£øð?|ãùí£íÄn¾ô÷_ø«ƒñ°”…éþ˜ßÚ9Üvã΂ìJÈ0‰Rxî×ÿðwçoÝôdÅqªå;Þݹµ)ŸõFÑÃØ§ž Ï« Ã>B¾K ù P©@UL¶…kUÓÇ$lÈC]1?ð ]š_«¶Çt¸tTY)˜ 0Eæ?òÔ)E/ŽÍ[¶§+’À¡DX#”ÊLJ[ÜX)5¼ ` ŽGœÀËHIJXèO‰Ç¶îzæÝOŽìÚñ^Ȫ֧ç§[-k÷ð0£$›/ÔZÎ{ÞöÈÔäí°š¶Ü†ˆ´Jk} ³—b|áÌÌÝêpaºxðÈ@\W1à:;Ú,Ó¤˜„#‘XXïëj345 E£!]‘lÓN$¢=™r¹Ì(ÉËõ¦ùÖåIÛ±oN..-çvní¾|ëÎÔÔ"B¬TkÀ˜„u5 ÈmUÑÄüÜ¢íãö¶LØÐ;Ú3±phrzvdxðì…+–&3„5EßÚ³…úÌû>¹çÞt2õÖ•‹ó‹3~àg7ÇW×ãŠ"¥;O=Ç&~@#ŒJˆóL8ùÐÎ¥™õìzùüÅÛ—®Ïœ­øóåïúkÔ­{ô¿úÆåÓ÷n¿rm4 hÔ¿öµ?ü»¯½”TDK‚x;p[ >÷›Ÿ?;ÉÝÿàÑmû¿õÝo ¼xâžûzûV§0Æ–ëij¤;ÖW°‹:§"Dì%Ã’mKÁ–éŠD+—[<Ç* 0Î$ÂéHäæÜZ<¬L­›.Ù¨˜@àsWæ U²\_â9„`T ëUË HÓt9 c¢ /Ft=‰„„îßsøç㯼úÚÃÇŽôõ¿5v ÉÚC»wOfs²l½R¤þîžù™…­};oÏ_Û½å8&äÞÃüþŸþøÞ/ÄŽÞåz„ƒ-ˉ…ÉLÊ4mY=kŠì"B°´ºÁÜRvbjÞ¥Tå†ï‰Ò?|úXX—\ǹ|k1¦Ëûø{ǯßÞ1ØI0šÏå^¾öÂüÂ|)M÷T‹…[“S’(,.ÍTÊ«º¶¼ªÄIÌuÜæTÒØ÷<φ„º>æ È­”B]‘:;J+eÂàÝíS ”K·–._šžØÛ‘0Äïÿu; ˆ2ƒ1Ðt.T/ß\v±Ç½í]å׳ HóÞOޝd Õ„Äd¢·ÚÚ kqž!!ñ„À0`ÌÃ^<ªûS5Y aE>wk5 £T—¤–X>…ìì4:¹¯µYtÜ ªó¹Š`ºïÀÖ•Õ"BÐt@À(ä/IBHUÒ :1ÚôÊ•ó¢¦ÇxéöÂRËjD5=``µTŒ'5Y]©”SáÐ}'ú_ÿïïºïC©Tj|æò_~ùåäNðG¿þþööp¹ÜhµÜƒ'·Èˆ‚Às‚ã8Øóô\+°ëzëù Ô³íÙùUʡı\.$÷¥’+«‡wW[ãóïû6»ìnÖ›"P$B“íéÁ-½Cسÿ@ØÐ¾÷£çº™¡­Ý‚ö¶t­ÑŒ¹ž7>1…—_Ý@§+ñ‘®ážÌà–ž!³^­ÙÏAÝ0–VËUÏñ]{Þûø;ŽÞ—èÞ³k÷ÔüENæÂñ°Õ°)c<0˜¡§9pmb>¤+¿û§Ÿºòæ*nJ»õZ¡@”mzöåOÿÛ+W@äš^ krW*äaŠ);¾»ûÂç~¿­-ãÚpÍW^?{σº­úÓïx2ÓÖ¶s`˜"=·v‡Ç.å ÃÄcÁKÒݺ…1­š.‡¨ªŽG2Q°Y¨ä …•¼5Г°R¬‹‚H(ó ^*´8 zkq£Òr¼|Õ‘ÎõñÆz9V)!¦ï Ȥ2Aˆˆ]q]¡t5×Ò¹·P3ýï(Öª²*÷vvf:;–s¹¡tæúâR2éK¶µLû¹3/å7gª‚ÊG¿ÿÝIÛħO¦¾ú•ó«¢È9N0q}­o(ç¸CÝmUÓ´[¦À£ÀsZž×¹zÏYÙ,ÊN>v*;·"ðœi@ØÜÒúÒZ>ðƒ7®g‰÷3]‚M3_3É$¡LTU³iò²Ø™N*µXØŒ±ï©²’ÝÈoÚ¢©:‡^@17—¯æ/¿pöÚ¹ÎÖÖ'Û´ö¢".Ï_ÁBCçãhDw], èÆTÖÇ Àôÿü쇞ý᫦ã‡TnfÓ x>’MŸ¼øÒåÏ[˜h~€$nß`â“»—ÖJ–í–÷—þß!cŠ~ôÀ¡-ýýÜèŽÝñp˜ãù–c%£±;¹ ß®CÆx^ —Nvq~c¥B¬¦Åh¹A½iõ´§ò•ÆÌjn¨3¶¸Yߨ:€˜Q‘e€Aß'Çvö\¾³Ž1U$ÞvƒTXf G{0¦ñu›p"E†¤¥´­ÕµýÛG3]]1^ˆgÒoLL¸¶³T.‰<¿¹–ã$i´¯{nm icC½ûæKù›s“Ó7Ê€Ù[MQâ ¡ŽŒŽv–Jͽû:[vÐ52¼²´b:>ñ\ pÝt1K‹C‡wMN-–ëVau]SåÃ}!ÍØ(WC]ä œü]gÞ¸ëF4”]Ëwtg²KÙB±ÒÝÙÑÖ– „­çVm×Ë$ãžéPÞ2`YÖìüB«Ùt=§\Ès@á`‰Å×ö1nšMÛ3eQv]‡pr¥”íݱ/N™‹«nÀzõfÄãô¶¶üÄ…=ûO=S¾Ìq­šKÀ„ð'I °œXZïIëKÍ*y>1íð”2h{øñcíS*PÿÃßymj´; ÷ÐÉaîSŸþ„빓³‹Ï½öÄ]ÛF€AËjq Kòl>+0b»&#¬Ô»“l³Â%äZ®zï°i;MÛ_)·L«Y3m"‡0À1FQO¨šDÀöñÍ… ÁûG{†ºcK…FÍô↬ËbÃòx„ ‡AåTIN©šÌó–‹E‡3]ƒýÍVóù3gÛ{{Žôô”Š¥ÍR>_.wttH‚¼«§Óõ|ÇsPÒ±ösçWÞöàտøË¼üòM€®KëëµC‡”¨XkÖÛ3mwÿ¶®|‹bì95³Xk-åJ¯L™SFVœ IDAT¶Çsf»~µR¯4[¿ó™ÝsäàÉG~ðÓ—/^™ýà÷ozéßbi‡ê±œéŒË’¸’ÝhK%ªõ† ù~ÐÙÕÖªÖ^9ûæÜüJ&¤.d7ì–EDJ²¶s ûöÜ-7ð‡‡¶Þ½WS A÷íÞ³Ù„W¯ý›ÞsêTÿŽ{Ž<ø«ïþÄs×~Ò§o›ß˜° òÌìjuͪWÇó}Ÿ„@éb®|ÿ}í…¢¹QlyN8Q”áÓ÷ ötlßö¶ƒ}]}½‰wüÈ^#‘âÞÿ¾w÷÷öoéízõÂù‡ïèòäíÑþÞ ×¯½uéª$q/½ús#kß¶ãÀàÞMöŽÌæ¦8Žã8)‘" ëc{ï}èÐå[ —fÖdžÛ(›¦6f±‘…=ý©Š‰“­Ú ð1  †)h7ž»²$‰ÀrðPw¬nº5Ëc 1!‘刚JEuÓëéèŠhZ8îõ776ç»»úcšqöÚy†ˆçÛ]é.Óq.\«”sPkÅõ™µ«³ùü¥WVÓÓ«‘ˆÚÕD4ÇñúûÓãײ™Á”า,Å3i€>2$Y‹†t]ÜÖ¦A`yn,j¸ŽÛ¬´tEüÉÏ_/— Ï¿p–"î³{âß{~jz©³§Ï‹è†g–«L"vßñ…R™ç¡i:‘h8›ÝÈç E‰3׋¿÷{¿ÞÓÕM(‹²(ÕL{dûСƒ‡Ç¯_ÓÔPàx Ó*lE¿råz\á÷nÝÓ÷6Ö6®Üœ@n¨\­ê|Zà€ÀsŒQJÆ3Fc€q<ºç„±oG›ë[B7Ö]AfjH`÷'>ytzK_ïö];¢2éìí¤LÏeßvÿ‰];‡¿ø·Ïrø}1h6){¶íxéÕï?xøõs¯?xħ>T¹B¾Ô{àÈ‹Ïþèð¾=ï{ì†"íÞuâá“Üwྋcç 6J*â…‰Å\¥’¸å’AÄ{˜jª\l8î:¾gäÌE`Ø9çóMàbQä|L Mä9¾ÚtxÄuyÀ8¤%4‚Ï=ý¤…IWGÛ[7®OÍ\“x¸¼X@мº¾g’áäîámwí *q}ESSzÛ³õÙÇ·ã s]¿­-:7—‡•ååR"aŒ¯¶Zîè¾®öTšòÐiµ¤çË ‚N]+z¶!ðõZ«ÚtqxU)ÖvŽöOÌ®­®—œ¼ÿÈÏ_}쉇ÚU~!»žyÛñÂ=»¶9¿°,ÇCëëÅ£C‹ +Ø÷[~À\/ÙÞöÖ¹ —g—òkkBB]’e^ºr-žH÷÷öGÃ!BÆAxOTÍ(•+†…IÀ%ŒaF!„”BŒ@µßñp¡n™.·á¶T»o[NàýåoþÆÎÁ®»"'÷f›KG™T‡‚z³™/x=õøÛ½Ÿ¿pñóŸþ ÷Å?þüÌjŽ2l:V$Jf2™ʩٙ>õ6Íhëèuf{:cÑb©tyêæ×ò·N`uÇáÕ&/¶ëWkö–L¨îz„8J)„ð«úkGNÞ:øó³Wí x ‡9p1ÐàŸQAAŽcŽG|Ì<$ E4.ÕÕ¾Ý÷nÝ~îâÙõµ…Z³¡u 6–DCÄ™­Úž¡¼;2’$]ŸJÇ"›ù¼,pÇb#1ͨÕZ7o® gžyàÕW'¡Í¦s·'Ü} ÇHE8†ÅÇö8ŽÝ ˆ2êžå.oÔZv0ÐMGõÍj‹£ ªñPå/|úcï:}²;]*”ýÀk4ìŽLj³PíJßYÚÌUF‡nÍÌ—6 õzK„È6M»eˆ!ßÇd)b„ºm‡5US ×w)€ÍZÕq,„øöÎt.·Æ( 8 O ãµ¼H O1uý Öôš¦W6ݲåå7¬[³å³W–y]øâG~û¹Kg›fÑõ;õ£ü‘½÷vttÝš¸( J{²£»«6¿8ݳeÈn5¹ö¾îGNŸ’%9w¶g|ÄŒp¥Ùøñ¾yâèiBèF¥²0vñÞ{ïÿö7þ‡Ï`w¦ã›?üQ‘¬éPÍôdK…Q±BÓcñ¼ô¥_{bze}0é©H ¹ÍkcwDˆ=°å‚À#DF´bcNЄ¸"&üĥÓúúÒ’¸ùR¶ÔØðëñc÷™>v)ªåõX¿øõz:<Ðß•NýìÌQ⣊ò7—¾yö•åñóK€·½mï³Ï¾¸[ÞUÀäØÚ¾ý=!™ØÄl6_®õgbW§—4ÄZ1ë­jÃâ9X7=Ç÷[¶g»>¥Ì¡4Ü–¸sgá¹ç^þÆ_^_Û$’‰‚|³A]º°ZðÚ¾½w|rÞmÙñTÌ÷QDÕRU”%]Ó\×áQÀ´MÄqC¶í"Äd­z-l¨•r%6\»Åñ²È#žG”`L%”åcƒ BH &”1h9~Ëœ¢íÖ\Ëò퀂0ç9Ë%»g³Phï\Yœ¦Œ&$ñêÜ…Ju³V³f¯7mb¶Z0î»ßù&ì ûûp@†¾÷‹m¾zóF!¿îB¸0>íêÖȶ‘]<'Oͮƃ©Þ–ÌŽë¡éÅù"%"Ì´A É#™È{¹ï‡/_Þ×—þÚKW9¶óïόߞ¹cÚØD×Ã3€  °H€Ó_ D¢ª ¯F•þžÔ§Oìß`wŸjoëœË.H#‰Á[S×;{G°å˜nCäEޱ'zøÆÌ ðíÛ“GwïŽFà کvÿþƒw‹º®÷Ì3^¼8ûKüwCíMÊ¿56“ÐUQär SçQ£aÆBF£ÒX+5c!5®+áD8$ò«ùFµåôgâ Ƨ–”-}õ|à®iq Ø®kEÓnÙž$‰©t¤'¬okF"â´¬x$œìí®æ6¥”çÙk¶\Aà \Ç,f×ÚÓ)Ž ×ñ$Nˆ‘SJ1¡¾çú”82Bi!TS q– ŪE÷Épyé¶ÊÓwEÛ,mööî6-Wx½#UÜ(Ç£$Ø ‰…íÚMÓó°ízV½Þ=Øë `R*”âé¤ïz¶ãJ’¬hŠ¡ªFKÓ$ñ‚À‹çy>/ FÁØ (¡1 `”2B1&˜É¥2&Aˆ)#jÀ¡jÓÞÞ­Òežqj(þÔÓŸ©U*¯U«ëºŸ2OÄû{·V+•Á¾‘T,^(m.®­p_øÂï#žÿáóχ®££½Ùlñ¼T*—òù¹ötÿK—ßj­ÜR«QoxïyåZãkoÄã™É…ÛCëµÏsÚ{R©Ä»>p߃¯_?_ª"‘‘|½ê»‚JÐ2BÀ 0º¨¿MÓCšx‘¬É>/øz¶%0Ò  Žiž½ñº$Ò `>e¥¦#ʺ¡„0T« M!Qå±;WýÀ¯ ¡¤¢1Q|ö'!`S“9ÿu]—|Ÿü»ºÚª…ÒÁ¾dB•ÏRBѾ¶äÎíÛâ±ÐuœÎLÄ´½d&aH` ¯3ž-4qmnµ¬É¢¤qïüt­Vç(TL×ñ\×ïL%\ß÷<¿¼^N§¢–í:ŽNÇ\Óñ—³l%‚’ä:€È#/ð ÏÉ’à¹>/@J&ŒRß±|ÄCßcaÛñ <ý0@=BƯ\YÔe¡=&Œ9¾÷í¿ýÂçWFRâX-oÈ@G,¡gn§Bé{î9=·¸ðú[gWsëùZ­=šlëî%npkf|©p«î2î7ãS–eeÚ3““7Þºö† 'f7ò ©x{4Mð€ch‘¼ç#žç'R-¤OÎN:­z<Ó9½>K<;¥ÈõÚF›¡8tê…kÏ=ùð{üÖÕÀC‘¦ $Øø(D¨&z2™'vujf³²3¶U÷éûÇf¦EIó=Ûój¬—²þ›¯Í„·¥ÅÃÃi×ûeõ¸‹ÿ®jk•#Gú<)bV+>ÙÍZ³Vþµ ?yåZ½Ù¬Ô­– Žô%!èªôÀ=‡––»3ñ~àí·nNN06¹Ä%`æy¡K-ÛiZ¾È#Ji¾ÔpÒ>Ú_Íæ!ã€H!c”2JaŒÊ8AUM–¾\6ž H *Šç”¡Cpßþ¹Å%€ `€Šxÿá>ˆ‰t"·+•üÛo?ÿ•Þ|éÜí_nX´ERíÊö­»¦¹µ·›gÜriC—Õ·ßû`µT¸1vCîHÏd'ßàaî×ç7V%E[ú†º3Ýé˜ö×þõ?ñûõÿ~i£°öÇŸû󰢫Š:1}{zaîÊó¥Ò†"G“!£R-¶ES2¡R°Q®dó¹·}üůÅꡭܵÉ*`@x©4¡!‘ @EÅéb2Ž)X¥¡mÛO9­MAN”ŠK­ºÕ7Kg¶¶|À#k¨O£º` i'?ùôýON,Î?pìèíÕü“G­Uê‹kKm±(ÏÈfyµe’‰VëéÇÿþ{/Ša¥ªþ™ÉfËǵ_ŽüÍßýÉÕüz­^ÃY·ªU·áùÌ1q-4¹|¥emtÇ3ÅzizÅΤ¬@$}I¤jhï`üøÎpBëLJƒk×*„¡è±­Ož¼ÿÆäÙ:ïíÞ¹¢ñk€¯ïÜzï[gµP7Ç[©’zãÎÛS·°[s×ÙÞ-bßWtJ}EËXNý¡¡mßZ¸m´àç?öøÏÿáU€Ðèhçêjå—øOŸÞþÿø‹ååâoýÖÛ®\™ol+n–ü·L' íé'cÉXÔtü¾Lâøñ>$ÄñRQõù³W[ŒÄdùöÔÜ¥s”PäûËË%ÐXH„õ;Ë›ã·æK8øÑ_*×MŽã¶ìÚbך’&J$”mT-/p‹UGŽ:-¿zèèÃ*ˆ¿÷Á÷üêïåí»—~1»0ÞÛ¾U’#”CÈ °(J˜×òdƒ[&fç‘嬬ՠï9xèÚ­›¥Íìù›—^<ûcNµG¢ŠÈê¢ +½]kµš&(»vìÊÎæjͪéúùrõƒüOËÕÚ'Þÿä®®þ+c¿»R„·ïÜ5›õ€Òÿçýî#!º¹6ïÜìâõt(vtïýbÔ0[­ùå¥õÊzHñxÏLö–(q­šóøýïzõÊsТ¶&G˜Y,9ZŒƒ˜k_öüý#÷_Z:˜  *ÅБ *:µˆU¤p±Vâ]ìˆH7DÏv:ûN¬¯_?²÷ÑÉٳĕRc}mkk;­ƒ›nݯ†*omOêµ°jVKZº= ]¼xÆuJ½©î¼¢½ñ³;1Y^¯ÜE~æÌä.ïF<®íxx ÍB³w¨§MBôÑ@Æ}ef=ç´œ4 àîiÿ_…ã÷ìMï¨axp¤gv¥<²ck8¤N߯ZØÅšYÛÖÓ^¯7 MqÏõñf¾3ä¥!àƒï}ðúسnR,/`”Qöï ‡T#lôv¦ªÕ¦ïù²$*²tèðîSÇ tf¢!Pu` dhçž½'áðÈÁ#ã·niº´¼q;ê¦EQ”­[zײ›ÁžOV³ÙoÿàUâÒ©ØÔô¼ª‹37¦!D‡öï!ØÑÞqšé¿ýÈàñ#»­f‰bÍlüÝ¿~}­xå[ÏÎB-Ë'¶\¼Tµ¼j‘ûò_| "&Ò?|öÙNýžoÛ½uèÖÂÂàÎCÀ÷Ž*µš)]‡?¼eë…7_ëá|uóPÿѽ;N®nÌ¿}ߣsÍMß,!be‚¼áÖDÈœœ'=ž ;A“Ð@Aœ@¡K]˜(ðMÓînÛ}tÿ¹b$lH’Q.¯lj¡4æ4ÄEVnì?Òr°jÛÛ·õÒÄõµBn£Yö¼¦Ì©Étݱo"ì–+ù­ý»V+‹*pyl»A@ `Óÿ üÝñ"wó#îzíõ±°ÂoîëéiGÉ×ZÇØ5ÔÓÝž>¸O¾Pzðá{n\ „jŠäáà3}—kVÇoÎt§ˆ²Å:BHyEÚ"‰|gO§ŽxÇŶíHšÌ˲6N;@ÿâµ›ª"Ÿ¿:’åjµaYxyuíêØë2àì† 1óÜV:Ò¥…B€R«åÔªåS÷â2 }c³Ò•¨2¢ác{w\wyvAâä§å]?ùÑ/𦳴^…lVZ™°º’+½qmæÜå‰ç^:÷­—nd9k=™Ë °dDjúD5$YäÇïä¹C'޶÷ÿ÷{üéO¬,ŸÞ}ØCÂôÌ¥ÜRWG?à¸ÎD¦«§KR´Üz6ÝÕ{äðÁƒ» ©’ôÖÔädîV‡–h Q ÛVYà€È!#¦c0 /#=â#J@¦”rv±P/Œ Ü¢´]JæcžM¥§N==¾xCäËq-æq}þ_ìÝîSiêöËŸ|ú“QA¾xçZÈ,›ã‘×°Í–åmäî´÷Œww¥¸ xáÑ{ž˜_î¦ @º÷ÀìŠ$ ª,A ]Ý62tÿ½GõH¸X(ɼ@) j|aà Y˜Àƒ€ðŠ'’¶e†2ÂC[z7Ö7öîÚ>qkœ`OU•R¡€?´eàÈá×nO¼yîR«Vó·Ñh-ŒM¸–Ûp¼ µ–ãØ¾À#€Èsr5»ÞòEå^©h>prx5W¦¶;›¯‹f¹ærÏ~ûë7ÆÆî;ýÀg¿òNJé]ƒÛ¦çg â]Ë.ÖJíéö\n­¯«û¥·.((åîìßs¼R+óÿ‰“ÿò½o§’©=CÆn¿3:òÕùªãº¤%rÈöð<ý‡_ñŸÀï}t¥4•P¾OÞX˜[™{pÿ©Ë³7õpg*ž»}9°[_úüWÊ\r×u-VؼŽî‚"FfÞ\n5ß™›?aËÂÕ~]pi ò¢„Ðíºë¹¨¯3Ò({[õþd½g¸\G™-\a§Î¹OŸ>9J'*çhÙ’“lcI&ßÁ`’‡0„aÏ x˜Ë0À&llãlYN’-ÉÊY::9ö霻wKêûáùî3ßÜõ«žú»ªê©·ÞUkÆR¤þ_?ßûÞo½uéÿ¸Šü8¼7àîo‹…B‘d¾ÒÜHë×®Î8ˆ†½ï^šõú±þÑürB3 jÙm}mZƒ1ÐÖ´,ârŠn·SùÎxÈí’jõz<jøß%Þ¤ÖðšþMC}Ë•¬aâë·Œ|óÄ@sh-_q;8M1\ìŒ× ôä å×!I|ÀëÑta¾§»Ó"°¹+>²rE¬)âöºšÂjÛšª,¦r«FW¦Emral&“+Ï%’¹RY#I.rˆês>ŸÚ¦¦›Ä²yD9Ž34•2bš€1 ¯ëŠI â°Àsšª3@&Ǧ3™´nºnZ”¶Dü€ª¬ÛX6åÕZ²(F,Bwméki 'J²\5ÉâBF¡”`ÿößÃ×ß|ÃÆáá_¼üãž–áÛw^75=í fæç'g¯ú×µÉñT.™/^;yL’¤þÎî›oºibìj*síü¹c—'§ãÛ7ïþú#Ÿ«ú'Þ÷ð™k'ûÚ·c,­êžÏ//•‡çf_â88Ôº¾¬d?wÛŽ¿ûWtk©{oº¿%—$ cÎ!¹%Qøõ ö™Ûb+;üÔmß|ø&—´ÈŽáþÛ÷ùÑ·ïÙûÑ›wîþ?=¾²·ƒá7 IDAT÷Kÿþð®u»Ëµša‘…̘¦›=½«ïÙ{Ó ï¼‹6éºþ›ßýØá’*J5Û0FúGS…Bï®›º\‘‹iE³µ6ìΖ$>póλ>qǦD•û››ïyý̳N‘O–ôý›nv†"ï»þî¦p#Ì#”åŠÅH0°{ãŽwßz'cÙWäëýò‹'^¥VÀÀb 册µzIä[9lô´Ïæò™%ÄL Kej#õDY©¢Ù€¼ö?¸ÿ7ýÓ$M=¿ÓaSÓEP®PZÊ×9‰Û°}u.™“E°,Ñá ½~´'_‘C J˜ÒP½^µìrµ^“•XSÔápzÜN›ÐÅÄr4èéî ø=^0fÚdn9}~,Ñ($·Äˆá€ àõØŒµ¶7Çã1àrbÙ²lA” ]£ (%˜%âÈ$^ `Y´£³Ã0­«cWêªnj¦è–ºÚšòùºmS·S"PJ1D¥ºî±fQJI4è\5N°r‘Fizñà›ç޼zd"™Ä,xht…Sð˜ºuñòy@àüÜìW?ùðKo¿lêJ:9móŽë·ìëm‰ÿâñß`Ép@ôê[¿kñDÁù¾½÷5·ueæ&úK©¬´:`¨UÓäáæ~ÕPŒjrúƒ>gWkû©sï`ÌTXÛ?ð‡ü>¿ËéÄA1B<†³K õj­­µïürâïøäw~öHE)Å}- 5%7³4ݰÄñœ+í,ÖŒåÅ ©Ä´nÕ½ž “’תòBÆÁ;  F¼Êþ'Û ¸€Muôß§·l쪙ƞí›Òå‚ÔÛµª§aÛùlñÖ=›KŲäq©•šÓd–FÜ^wK$P*mÊž—$Éçóú<îXSÄ"$öµ·¶¬èM¦s€±sã“¶e麙/0£Š*~ÀßÞÒìt:¡Èg—³•R©®©Ô¶,ÍVU‡ÓÉa (øø'0‘€õ²Ûã"6%–E)­ÕªJÍòÔj H‰¡›•|Õ¦”2àrJ6!ªn‡.ÄwÅ©RbôÕí~æÔBI¶,î+F÷èÊf`žNTòe­7î®Ê¾ÿw ‡ ,U•H(4»X¹¢?¹°ÜÓ×gZZOkO£^'š²¹gÛ>MÕ—«¹ûoþTªÙ¸éÖõkÖ8±¹³ïxohÒô²Z³ÎÏ›/ÍmŒwß°ëV¬ÉùJåö[îOÍú\ÍÌoé õz¼ŠÒ «›Ø3ÓÓý½½^¯¯³£õ™<ÿ¶fƒˆÓƒÌŒ‰ ÄPßúª\æh1¬©%¢dòraêôñ‚e\˜M³ºô™9€ÿÊ“²¼˜Wþkx:ª€JDUøÿ÷ §ÆóŸúøÞåDsܺ¾î¹œ¼º#VÈdÓé,Ïó#}&ƒÝí¥rM7í°Ï“/–c±è`_×Êþžæh8ô ¢ÈóBÀï–UPZk4–“ÙRµâàŠªVªÕH0ÐÙ¯Õj¡ 7Ÿ-¤³Y¹ÑËUÆDÔ¶,ÌA‡K¢B†ãc× ù”¡ÙˆRR‘—lbN´ CStSÒ¶eÙE|!¶Mê C8YÕ}>ïL²ˆ1Ú¹mý/ž?óðulZí {žÑ+jE'.¤ò `>ùôo1”\©râôX½®bHlF»Z¢N—+mªêU¿×³¢«ˆM‚À»œ®T20t8\ˆÚ‚(Ëù'_y>àq˜;nh•a_ï+Wæ?¸iÇ­ï»ë›þ½3ä`™ApÓÞôô_}jþìÖ{¯-Ï5ŠMÞf7óÔAÕ‰}¼àL—ÆUÁ[Ï%›CíºZ%TG˜FzuSu ¿Û-šp^ÎúŽ¥ì–fªcóVþê ÀQ€8ÀñÚ¨’ÀPÆÇ(„èÿ: þâq:]ýò·nãy¾\•™MZbùÅeÍ´xAô8$Ì9#/±™ÇíŽ0ð¸<!ôȉ³‚$¶Æš0†¢(Í.dkš zöìÚ¸œÎ”˵ñ±I—Ó)Û–€J]±å(ÀQ EŒ1F<Çsä0ñ<Ç!à‘Y– ñ B¨ÃåÐdضM˜è(æ YbÚuÓbºaY¶eƒ0"•LÉ4)e A˜­4,›è–ð8вQQL‰r–EÖôG/Žå ÀüÀ÷"Ä•+U‘çdÅÚ³cÇs”‚¦h¤$Ë]-±…Ùå–Ö¦j­¸jhu6›ÍŠ’S`8$¡¦(åjé‡ÿùó©ú’ÚP«ZòÅ?-Ÿ/1ßsûÞË—®ÍMåÆ&“—§MAo!;ÙÙ¿6Ÿ¯-,ËBKw,|ËÚOHäÿýÁ”\¾ÙåÚ@¼}u×ê¯|úo~J·&w`ußµcßÄòlÐ×:›žèîÙTH/*¶B'/åj™Ñ@y "PÚp¹U޳9„XÝ ø?*¡¡Öix:3ºâƒ0uŸBëhͦ.S‘E§ˆ ‡˜ x‡$HN‡ <¤1‚!†&’™J¹’Êä—’ËóKión‘[XN+òåTJ’•D*}ÝÆ¡Çžz£X(5µ’L/,e9@²™"âydž@Ð6t¯Ûe[CC€8Ì€`‚Ħ#^â-“@È Mwxº¦ˆ!17 Î%–)¡¦m‡b-ˆ2GS¬^(è²°mbX–¬™„P(aÀ¦Ð!p†mSÈ1FÕ†Á œm b€8xèí—CmT*³‹¿W:uV‚r<¬5oi‰LNÎ7µ5«²VÌf _9|ö™_>:¸bE­¡þûS?³jŲ±`/F/Ô«š¢¡°ÿß|èò‹¯ª*œˆ¯Î,›”ZØõÛolŠt~ãÓßùó‘×O¿slõŽ·­Z¥ÙV¶\.¥[×ouº½NA’•Æ·öm¹&ñÃ_ÌgR³µj*»\W”˜WÊë^ªOwwo¬¤Ï'+eŠì‰«ÕÁ~×©Ó Ã·ic›ôrºHpÀ! gŽk¤Ž?ýñÏyM)»G×%$~êîo=}觺i`ÄKÈåp¸Rù©O~ðëó‹Y]S¢'ð,.%LÃvHNAà “”kỦªiÉ•*F!:¿\ð¹]«G/¿{¾Ñ¨#ˆ`n‘s:D‹ã€RÐÇryϵ®êK\œ 5‡œjºépIˆ2CÜ€‰N‘A$qB€cІ#pç-{_yó0‡FŒ0D ã8FlJ@È4Ý"”Ø61l›˜–mššn¦ hè¦eQB%̰H{oìÜ…ŒªYmQ$róâåéyÅ £}MÇÇR_¨ÙøË_üŒÜ‰M8ÀþøØŸd_t¨Ù¿´”„.oSÈ¿mÓ–ÃÇN˜¿ÿ®Û®LÏ¿úÚ;á€ïÃGŸ}éÕýé™þHëê®áGùîøBnóÚïÛ0r|!Ýî÷ò‰Ô´Çõì¯~øëÇ_¨—ËŒËFsS‹• _™>ú¡[>¶sËÆÌÒì¶Þ•O¾òÊþ=7xÜþ¦hÔ%:4˪×k+zFZ-«W­Ü4<ºkݖ탫’¹åbqƲ¬¡ÖÞñĤ±N_¬­=m^ÑÝ.zBn·Ä»EIpú›¢ÑhÀŽžùõïŸ:øÃŽ6i°OpJEærvnM× —&ÏØ¦™W–ïÞýàµÔ)³L Œ¡ÈÍ&–Óé|&Wn(Z¡TMå+‰lÚÔuж£S‹™ºfÔe•˜d"Õˆ‡ÎLW:¢€ ôt´ä eÕ žx[#•Š85‹ÒZƒç1f`øº…ù‚2*",pˆ@ BssLÑƈ$ò¶eÏ/-Ø @2aœ$ÃF¤ŒBŠ †–”PĘÍ¥”Qfª›Vswk£RWM1lNàš<îx<<³ç8ÜÙìóJB÷úÁj2ïl yL¼nÇÆ7£ÔÀ;vîlŽEtS/UU„Å6œ¾ 3äG6ùÈï)–J›7®íéézꉧ-ÆRE ÑBº”*ÕëuE“•GŸ{ó$Àð×?øûïÿî9Kr¯Zi›æ¿ý¥/|ý;frCu{EݰˆgÎÏ¥.Íd$;_·ÐÚáU–eÍV«Ý ²æHDÑõ ßïq»#þ@º!].,Ùl®Ü¨½{þì¥ÙËag@ÄèÄÙsãS™x«OÀ¸¡—Ê•ŠGpkv-î × í†­w¬X»e`ÝëG^>øÚ³•J)ôžW [ih¹\ÆçõܲýC›W_ôÔÛAoä‹û‰÷M¡mˆÖuE [o Š2µª ‰n˜Xà»z»„Z¥N¨®‘¥B%æuF#Á\QU•úÈPÛÉósˆÑöM+ƒÕªÅˆeE7›CnbSŒ0ùìTBÆqP ½N‹ærs–¦ªËí34Œ8ÈlÈóPÀœ" À²­XSÔP ŒR„¥@áÓã9Du“ —ëšn"ŽG†ÝÞä;~iÞ&´%ânîˆ9?_Δf2娀°V´øž|ã óï2U•†ÛíÂI¢(pÒý÷Üyáò¥¡•+Ó¹ìµKWy¯s¤·?蕾øàÇî¼iÇÁ·ŽöÆ‚¹jýЉK§h@8Ð,ŠýèÿöÞÛ¿÷ódžyðä%޲ÉD.õeK2€“wû8FOŽ]‹z•Þ¾µg&¦¼ïÏ|u¨¯ŸRÖÚÜLˆ üÏ'36u©3Þ:»œâÕ?Ï/¦*•%QQ¡Vìhj F™Gt2Þ׈kV¥j–)°Pèš¼t ½}¨9Ú|ãž»ÖïÙ¹é–3c‡¬©”ŸF”¹%/$¤%¶â¹w~F,”*N‡]¿}åû½#Ÿ?Ò¼ï¤Vå:«© ÐV–*êmû¶¿üÒ;¹ºìÜó…F‹Ÿã{ÿúoºªp|lV $?ŸNk²j®ZÝרÔëŠÞòUŠÓ)™š d”‰^STF(GŒ€Ï£(6°MÛ¶‘ÓË1 rP@ˆñ‡‡ ¥”ç8B-ˆPwWk¬9’/”uÃF2BMÛ²iŽ…LìÉ*Bâtˆªn¤ŠrWK¨¡Y{v­¹<‘à)­V啽‘±¹¢[âfç27\¿óÒÅ«øo¾üYL‘nškW­>}ö”(:I¼~÷îŸüì7¬ñ{<¹|i÷îKóó|ö7]8qò\©šß¸}ËK/¾µ}ýàÙ©dSÈý¥Þùüáã>òµp(øàçþîÒ|òðÅñ¸Ï5ž.öµ…&'ƒ€1øßïn@bž¸(¿ÓQ(•6®YËóBCiˆ<Ï`ŒlY¿e´Èãö<÷êsw_wÓ…k'F7îÝ1°^Õ¨ƒ—«@xŽQ2_,G¢}õzAÂóÊ ÎénpÇÆ­¯ÿÿô û'¦N önÎæ“ŸyàŸ‹Ê4†þ¹äé§seךéäņ¦~îßúà ÿ,8;nܲéµc'4­\,ç›\å¥zUõ·ÆÞ:>ÅCÆ3k!SróÜ­7n«×ëãsIàöæ²)žç¥€¾öˆÏ!t¶…’ËùÖxHnÈ ]·-+äv„@@BÄ41„`kg¼^­"xŒ8fÛ<Ý>AFFRŠ11Bº]®D*W,–ƒã8ˆ ËÄŒ™”Œ× $U…sˆÞÖÖj©q÷vÔ³eÀðõ¡¾•/^NåºnšµïƵ¹dQ#Öìܧ÷mÂ|÷ïÓ©e›²ã'O67ÅEX±r~9I÷/?ûÓéÅAŸß¦4•LüúÕ“&a¹†Þö õ÷þäßÙ¹uS[€sw´iºt,dRN=õò¡Ü¶•jjwk$äs^›ËÊÄ`U·›"‡Çú‘¦P¬»³«·§×¶,Q¼.—mÙŠ¡×äUeC›Ÿº6?7¿8ô5'—®-fs•r6¯dJõ¢„„îÖþJ5'ˆÎõí=¹ZéÁóòØežòƒ½›zz^=ü’i²ÑžíÇÏÿQâ\5µpöjµÚpß¶ta~Ǻ÷S ®Îwy=9[­Ö<ÎàðÊu’$FCþìòR²˜â}~½Vïjïž¼4[nhYOe+ƒkºDb>ÿÖO/|ð–ƒGN´…¼½maŸG*UTŽç‘o‡9Œ>gM1lËâ9ž1J)uº$J(ÏcŒù<•\"ˆ‡9ÈlÆ!„‰1b”aŒyAà1’]"Ö-Ã4 ËÆ`Œ! °ïþýß;vüÆ}ûfÓÓós†¬׋e‡«².i†+èÛ÷ùO~÷áGϽ (èä¿òÙåÃw^¼rij1ƒÀ~æä5|÷=û“é²Ëãõù~oPr:®MLZr%àkJI4IOW¼œ+<ÿú±góo/^ùЪ¶îáÕ¾ûv]Qÿóÿå•ã>Kß{ô‡§S¹#§NSݼ4½©=ž*xùOþêñ ßm`Ä(€ Â8FT¹¶L^˜:¹²µ{jq)•ÍF#Ã4Ë•rM–_¾ðöÙ·?xËkV çZÄèè,k 4ä6_kÝRúøCW®^åE©¡Èæ_8|òÐñ§÷üë³Ó^ ç§7¯ßôôÓ®¼óÃøüüÂÌ¥ù×W¯ØufâõöÈ`27{ìòóŠ©;okS‡VÏo[}ûB%»cí:‡Ûcš¶\-‘bùZ] –å‘õzƒX¶¬™™d&S†{G㊡þò™cuÕno êQà ø’K‚nÑ J­l¾† Ù44]3­•ýÅ|…ç0B@€9 ¨ ’¼.@m!/b/`Œ0„ÂaŒ!ålÊ`€1Š ¦i@LB~¨aG!½Hñµ´•ibX¡×¶H(à™]ÌN;]S ›ŠjùÝÒÙ ãÏ:^®+>—èqòºfV4 ïÞ³‹X&DD®V-Ë>rò¬Z­…ZZ––$QìkmM퉳ÿôûwêË\]NTê{oÜõÓÿøõÏ~ÿ×t*/›fWKxlzf>™íŒ9‹åzHÀZM5 ûÆu}ßþîOoÞ³V¯7òU…w Ô´@€2ÀØrª2–._˜]\,eŠ¥‰|9ïʺ›"-qÈq«W j\?4øøƒ¶^¹8y^Ä\1);Ú™U®+ºçS+Ï^½v×þܼñ†ëvßøîÅsk[»zÚÛZ[:uyfr¼ª¤æægƒ¾•§–ÏPf^™>ññ{¿b«\K¸kãОÃgh¶™È_«ÔåÞÖþ Ï )_^Áæ\ºª¯“ÔpøÛ|G_G)Y¾8›‘ RôŠóÉrÔã¨)F0àŽø\J㣷l],Õ¯»cÏÒôb>UøüW>sðSjUæ8c(J"–Df!ÇsˆP„æ0‡°€c#ˆ Ħ”ÙÀlJßÛü†E `B̃PZË¥›ðÄÖj²ÇïŒ:[ZÃMÁ7^}]ryL‹ò<·j¨­y´·Õëè =ŠÜì8qqzô#ûí©Eüõo=Œ!ëéhQu:440>9I&óÅr{4RPÔFŸ{í¨Y¯&SË÷…ÿõúác÷ßvÝäøTWßp¥¾íæ›±LU;3¾àæ‘iÃ25ÆvoÔTu°;è™\›+D|Ù´¡À¦€çVv5&/ íc“É¢¢ö¶ˆ1kK(ô«'~yèÔ‘'_:>Øß¹}íÚg޽ï¦Ë5MS”r¢°`Ã-z-»>з¶Q¯nܳ·9 G"¯gÍÀp{<.‰Ò`_ÿ^øS63ö¡÷ãìÄîøúÁ®ÍK'?}÷?]™_Ðév¿þö‘uÃÝ?~⬨ï»nc"ËÔ”xÄ—(Ô‚>ÏþÍk^|÷ò–OÞ÷øc/Ý)ñ„ç<õÃÇž– ((6L·ßuÚž}[V¿qvF³èT¢âtÔ“Kó£Ý£÷ÝþÁ£çϾ[E˜¨JwK몡Á±+Çãƒë®_·ãêµ)Q`ªÞøÄ]ýåsOŸ¸ôfØxìÀ‹¯Ÿ:êÁ|S$º¸¸`û¹W~ì$ç/õ\×ÝÝýÇçéŒÖªjYNBÈ9)èÚwÝþçŸíŒ <󛨷 ‹†‚Aÿ™«H­:­ B Ùnè±M‘Y Û|áËp[÷Vs•µÃ}’È­ªæ‹kFW„}¾R¡ÐÕJ¤Š¦I¼©VWt]çÝ.K5J¥Šäu_›Ý.fX‚ËAmÆqÈáòE›Cª\CA‚F„2 ` s˜c@-ƒ À•]í¥J•2Jr…[ÔJÑ&Œ8`Z.‡8°n´³%¶þæ=Ë i/féL6êw!†s‹ Ÿ[šL5–—æýNþ‡oÓíp=þû_¯Ý°.ÞÒ1;5‘ªÔ%J$'§˜f{g«&7R5Y“å¡®¶ùåår©²~Í`_GÛŸyµ¦+ƒóSsUqI|sÀ+JÜGîØûÇžíèêzëÙ׳ç¾xàõ Ëùòc?Vuõ‰—mn»uóŽŽ.ï†á¾PÀ/šölª¸©·½jƒ±åÒt¾jƒÔé‹ÇÏÍ^•úÜÜD"3yz.uîÚÕ¼\™›:S©êŸ~àÓgÎ]˜¾uú”®.IRh>•¾wï¾›·íV«µçÞy{ÛêUÅr)Q*êr=ôÙ:E畉#P¤»Öß ¸âùÚb¶˜È—³ç.œêÞt-q,ZÁsŽí›6Vùé×äs ‡(eÕV‡42:”)•Û¼¢ªK‰ÜŽu+TMOÌbŸM¬ë¯Û2}úâæë¶æ+r!“[52h5´B¥¤¨ÖøÄl8ˆDÙTîý~ $›L»]®xK¼\Êc!‡ Œ‘zCã„PÂ8Œ(a#Çq"ç ÓÄF›Rb3,“fòåª,KÔªEÉ!B—ÔÓÙYÌ6îßãÄâ¯Ù¿}ýÒÂÜØä¼ŸGož`¶n4”ScsÅl² kgßx?ô…OLÏLÞ÷¡û8J—³YÝP] PU“!.+r€E›šD]^Ì`‘öÈ©£—¯–TØX1mÇ#†(æ¿ÿ‡ ªúæá“?ýÑ7~ó¿hòýôϤ¥@0ðòÁÃüæ¯Ä"×ïÝú×wNüß>øÑ#SËÇÎ\ˆ½Ó}Û¶í]=ì„üÑñÅ劙,Ég2—ç §Æ–›ƒQ/v¶®ƒBìKùðcyvÇšu ËÉ­›wnÝ;6=g¥a—ѵjA®ºœîWÞ~' ÷ÔââÒä‘¶ÖáksG¿ñÐÏÇÆÆ†††tÝXLO|õÓÿvèüs«{wT”Ôª®=3…S™òôï¼Î¹[ÇÇO¹%ï‘$ôˆ†Af–å«{€m©Š ohšA¨ˆa¹®JÑ•™BÉÝnr;`œ(¤3ùÕkGTµ!òb¨)PÈæo¸yOi>áuò¾H“"×k•*æ9ÀBAÀq< @#̽×#@@(ð<ÆÌ¶†Ô°(„ˆÃ#D`6ä0µ0´mâp8¨À3ÛFÙçûÎ=kW빼¯Y3ÀãÓã–m”ªr®®Rb‹îo‰üà?Çßÿþ÷;:ztÛ:~äxwdD”DU‘-Û´u]V4ÄqÅRÍlÔ³™/ ¿S¤–µ¦»­T®Ö5‹2fØÔ¦„Ppujú𹉠í¡G~ú4r‰÷ï\Ý^HÔJ<äÉW”_÷37ÞxÝÜÔÔÊž§×ívH|îh±*Ϫq¿xufñ¶Ûß8zÙKùtZw‡iÛzÝZ,àÙœê„E[O_˜¼ºmd­Åáþ®þ×NÜ1´6ÖÕYÍ$–²K«ÚÚó–R)æ¨ »[ã!·ç­3§›<.SWWl {»žxñß{7:þ‚a~O4NŠØpGsÊ\K _7µZ#ýð?ìŽø––—³ùrRÁ†ª$÷\Q?3¶lÕ•¦x´³#6ܼ6›BECîÑõ+B¡PSÀ Ÿ{ñP犽˜[¿~Õ¹±IhPÇ©«šfØóÓ nŸëâå‰r±B^¡h:±l‡Ï#ˆ¥!„(‚ „C X<Çc M‹BòĶc11(@Ì&®Á•]uÅð9Åí×íÎe²ºM”r¹«§=Žjš6ŸËW+¥¥¥ä‰³W7®L¤Ò#ë×Z(çÊEÏ–ª’Àã/~ñãˉDjnFt8òÅJCUUEu†›”z죵{Ó¦u…å¥t±Jµ}áÔ8#v­Þ˜[®®éëš @SÀ{ð?Ù¿g÷ÿóÛ''ÓÿûÁû^?taýö‘oëk‡Þ=úÉï?pæ oZÏ<ùÆ… FYv8øãWæÞ=vc ¦ˆq¶X…åÆá«3Ý!WY±B;Â>gJièä<{­|¹¬ø±R¨åÏ›>iÄJ×ܾrÇÐzÆ‹33ã+;:gãÙrÁær5[¬¢º IDATSVV­ÜÞ:ðÒ‘_È9Ÿ¾ÜÐ+×oyÿñ™gvŒÞôÄ@鯕b%—ªL`Šâ¡’Z[.ä%Ëy­7è/U­þˆ£T‘sU5Í1])éf|e+kh­Ã}Ÿy»«3®#óà—CÓQºP(©Z[¬$£>¯ßTUGétaŒ1æy\+”‘$2J!"Bˆb€!d„JDQdŒA€˜C”2„0æ‘mÚšIyBšzÛµzc¸¿C1u¿×‹Gs©tS4ðyZ[šÇ®M9DT©ËÄ0ˆMš^No¿ÒÕÛ2~e&›*:L]±¢#*‰ø‘úîÅ«cžHór2i ×冮iºªRJÀÀZ¹ªTˆ¦Ç¢ÁBµž_Ê64«+ºiûª—OŒýÃ'ïénÿÉ?~ý©gž{ô?ÿÑÃ<äôpwÓ•å|‡ÛqúôÙ'ý³ÛîúÒhGSS³¯3â¿6Ÿ±`™ñ¥‚ßÅÕ5Ck4¶­ê¾ÿ¾;žxíÝÄRµÖ0e“nî:2–à9δ©jRL ¢¹rãüÄòøLc‰/—äžEÖ7 w)ªÞÔÞ|nlßuï­>ŸÇÒÔ¶Ö6ËÔŠåŠË!ÈŠ¥j†ÖPW5”F9_œ]Î:]®—^> ]b›KÚ0ÒóÛWO~`Ïú‘‘öxì›üïKó×®Í>ûÒÛŒr'/Î}íó¬ ðÑ®Øþ¾6<ÒÅsØårtvÅöo[I®[?Ü1Ô=7=Ÿ*Ô£n‡\3·ÜqÃþõwÀ´ßKÎj lZÕsèü¢©[À#½M~oªª †€MLjX_N›³ËšKâkÕêÉËgåza|¾˜**ÍnÙ¨ºx÷ØÔdA)^¹tè¦Þ_ÌÕ.L½¡ÝöùçüÞ犙D±T”«Î¥jãíþU%%_V–ä*œ 49%‡ÏËå“EÂ¥–„±¢[¦e µF<ç¯-Ù†5•(»lsvz¾9ä½0‘(g+5U¿óÆmÇÎŒå‹õÜ»}ÿ–u3éŒ;â·TÃôI1 [†¦Öæ Æˆ ây¬[Q[pI@Ó°0ÏK"OÓ42Êq|(Íe ­±P¹\¦ˆ¢0=9[,é\An(eÕlTå\2å9®¡YªÍÝ(ÕU¿Çõ¹‘$•2…†iáìƒr­ÞÜÒ,‰üøø|¡TRºÓÁ]\\Šú¼ǧnñ·y]V4_4<³˜$€u·Çœ›lûGVt/Œ§}âyËÐ>û‘;§fj% ä‹îس¹¢©ßøû?Šúì»r6[¹¢sÓšU‡ß=wôä¤ßƒåbéòÅ…pÄ£iꖡΫ®Õ Â(ÂnØÜ÷ÚÅŧ~òÕP³7™Î§ó²jÙ­Ï}›W¯èh»²˜ˆÕÒFM15¦²õ|ÉL%õ\Aøý+š2Yµ/Þ]‘—j%ˆµo|ú•ŸìÚr[{lðèÙJ•’Lòëú¯ïnHä¦Z#ý1O¦<×ß¼©#:rjîÅö uKëní1 ™OB-Q¹RÛ¾}xf6ôˆ­MÞÞÎhÄíU“RÓLš¬ tîJGÈ=µç½Ø Ì/å€ÈýíW?ú«_=õÂsï,IÜ|Çõ×Î^íëœ4·8tJ—&¦‹rƒ„B]în¾4³l šŠñ‹ùü‘³×¶¯j_ÎË#ƒ?ýÃk:› OM¤,DUÕ<~y®'êMVêm!ßêöÎÅtÚÀ0aRQà’ˆ›#Ño}ás­Í­!!*¥Jõl>9 ôœ¸ð\sde¾>ô¶eª3š¦ г˜¿$aŸß[:(ñ¾luæ–ÍŸ(”óÌÖ.O'åº^)5\Mî¶ïºuÃçÇÿü£¯^8%_Vê.éέ£'ÏO"Œ}.ap°}j¡Ð ¶5\ñÀ¿|íoNœ¹jº$p €‘­kªÙRk[3ÖŒþ–¨B „ˆšF×àJ³^£6…Ê0Æï)Z¤6„!J!Ç ””B·×í†|>¯Ó)ÎÌ-§——–nª*£¦®h;6®K¦Ó_ »#néc–¡›,_nh†%ð¨\7ªa"×Ó&BøÁ‡>SÈW}>oCÕ†úß9y¾5æ0»01£ˌس³¹þîÐé‹“»6¯üÔ½7>ÿ‘‰¥ÜB¹®É¥M«×|âÃw¿ðò›ùZ#Ÿ(LL.~êk©Ì.ÿèáÏuõ4ò¥üî¯îþÖÂrab©P¯7ÍüÜg?ðè/žß»®k6W7 SrcéÒî¶K™â{·½î|­±s -UV!¯$ N`ܶk0ƒñ–]³s¥ìÊø†æXg£®N-œúÛ\7Çk<‡ õÌÖ‘ÛzºûN޽6мgßõû/Ÿ½a×þÙäµÙLYÀÒжuóS FEVíäÅÙ-ŽŸ»ræÚ²I˜‹RMÓÿök}óísÁ}ëo^¹¢A4Ñí;{aªV¨½qøÔ{Ê>Ë&ÆÈ4£ñH*‘¢SIH¤ØÒ „ÕRÙ2,!‚ç9á{õ!ÄÙ"F)eŒñ¢„x é–¦«ºn˜¦!J<<%v&—^ÑÛ·nÝèÌì¼iY*±+¥ŠÚÐ׬ôJâB2çvšaPFm ,bA„œ^D·S‚áÜW àç’¸l6 b͈²ØâÂ’×éüÎw?ûÆ+Ç,@Bn~dhh|r®X­Þ¾eä•#W¼{ážý×ÿð÷φ_ÿëüù¯¯§¼^Ï·~ñÄ•±ñR¦Ú÷תr¢Xß²q´Z«ŠNçw¾õáánŒúÎg‹­íÑ|² ¬èzPä~ûÊ;ÿü»]"÷øKï:BÔï¸~÷ú‘þÞû¯_ï‡îyà¶Ìòr­ªÞ¿oÃñ«‹;V4ééêowò„’±t2êPMÖÎ^¸züÊÅéÌdo´)ß(—‹åqÛ¶ûw§óS‰Ú•îûÆDú†ޛ©9]5KµùšR˜[š%Tõ9šÃÞ˜ÃïêïŒA4)‰·¡¯}&UÌçÊKé‚ðž[7\¼ ° ‰»[μ~Ú‰¨ÕPgç–;ãÁš¬‰êéˆÖe @äø`S˜Ùv¨)¬Éª¡ë@`D3B0Œ1„#!@Ò÷êBÿ+y‰ƒ"/©Šêt9"ß#Ì5²ÀóœÈÇc1×ðEâ±èés³élC3äREÓtôkšööÛï¶Ä#|Ð]¯4l€¼(µ·Æd̶͢‚‚Ï]9Emû¯O?¿fÓ¨Ïã–s¥hqáâÞÝ›O<*sbÀÉ2o׊ó'OÕ öÄO¾óãŸüêØ|Z­)€2ñHO¸.k¿üñ#ÿú“Ÿr•L®VªÊ÷ܲyãúµ¿{æõÛoÚ³®¿ûž/}˜Æ½·o™¬Ø c×ä|H˜C9]q¿ãÈÓ¿üÌ×ÿ¹9äzûÂ/J Ê´º¾q´ƒçñääRkØ›«)¡»6 ªÔ:‹}0þÝ_^‹¹yÙ <Æ"Ï˺®ê¦;Äm aHovú´FÞD¢fÚë‡ö˜x~ëÀ¦iöôôd2™+‹w­ù Ãᘛ›Kf’…©´àlÈ(Ù82dÊÔtš2ÊW¿þ¹û^}ùphóȵƒÇÏOçDß¶} Üxõí+^'_®5ºš3ùj,è1Û"¼LãÿŸQLÁ$À´€‹ÓÒEUV#‡$ðñ„ˆx‘ç0Æ 0‡ÃiÛ†Hr»‚X©”.e™~¯SVIÈï#Äözœs‹©îÎvÃPm ONiº )1-¢„9ø=ÝAK·m$b[ýÓ“¦aÖ5A(HÀÂØÖ¾ëž÷·Æ›E6ÔF{¤Y {O2“_^Î^ íô…«Ð"K©ìéË3M~i*[L.'Úc‘oéM¡ÐÄÔtW,ØÑÝ2B»ÿ/¾{úÏOX˜KçË@Ðó_{ègO½úúÑ‹+Ú¦\yí¿ø—/ÊZýî[nzì/ÖŽt­XÛKÚ'>tó…±ùBMO%æ¾ÿ•ÏG»ºþðÒQÛ²â~÷ʈ_Ñ·ÃrImÍÑr]ñH¼[ÕJ`‰w»Ïœ¾è4[S€[W´'+ŠeÛ‡’Cpµû½î¾¡5ó‹§Á]3Ò%%ÝPkq×m½59ýÚêá ç¦p–×épÍ&®îÚ|G¼@‡û›½þh8¼n¨ÿÂØ ¶|åÿéÇ.Ë깓c~ìŽl*­jöB¦œÉ–["^¯×é÷»é²SÀ˜ç‰¬…]åàô|º¿³­¦ê™Ù%*k6µMÝäy#Äcó<ÆÇàÁãtÔkš( BÆ  `§Èi&± ‰7Gú{ûƒÁ Ëå’kÕ\±ªjŠ¢)º¢@-J¡’ËiÖ 7lÚ2ØÑê u•ê§òÉöuç&¶¡sˆq »ãÁoZǦ.½uøMB_(¢jÙÈÈêB!ÛÒÑóä_þâ”ËÐUíhí:vô]Ÿß¯ŠRo´éŽÛnýü‡?kÛ°ÎÉsw_·ýêôÜÀ౬W_~~ï·%sÉ[?ôµ0FOú»Z5Õš¼¸$pplÃHOçpÿÝ×í¸ïsÿâø¥ÓÏçSKw}î;S‰âm;Ö„;Z€b?þê±ÛׯœÎçMƒtD}û¯Û:“N_¸:MmSÄœ?è]HUV ôÉÅÒ•™ÅxØ›ªh#íᕽ}º¥=7ãñH¯kç–õ±h¨¢7Þ=ö‡ÎÈðdbâìĬaówîlÙ¾\¹vÇîf³Ù·Çžò:‚qÏ€À9&–ßm~ýÚÛNÎ/tÝ©\-ìq9CÞfóùC§‡Û#ϼy6è–\nÇÐí{2‡Nè„D£A°+¦!FQY·›Bž°ÏcY–aÚ Eëj i¦](V=+úq5inãµz±XxÎéyIr80—à€…ŒMKw9’ÓU.,ÛŒÇ[wîÜVÌ•Æ&Æu5tgóE‘çë•J¼­#_*ÖÊ5CÓ(e* /ÞwGÛÛ*óÓCÃkÕF)Ì_I.ŸœÁˆj–íŒÄÚÛ¡¨îìjqI¢Å£¶ÏBñx¼X,Äál¾`Ù6ÇI©l¶)ïèîÞ¾f¸·»;‘LM^›\1ºrφuý½²n ö÷¹§Ó DŒþó£?÷ú]Í~ûa¹\89µhÆ@h¶kÍðÛ'Ïå+òÉç~þØÓ^:pøã¿ï…ƒïȪòù6ǃW]Ná¶}; Gúè}¿yê¥cç¯wÆ„–ͼaÿCï¿©(+•r¹%â]Ñ}çÞmg&±mÕMÂAÊñbÈܵyä÷ϼZ¯bž e UrÕ’ÃöÍ¥ŠÕ¼Óßp÷Ûíç[êµ¼F+ªÖزêYW·o¹îÈ™3Ã}Qà%!Ú‘àùùôΡÖÙtÑ2Iif)[–»VveY[×›ú[õªÌ‹‡½N‰Ç ßvýV/µ§3„Œ!§Ê¡HȨ”+•Š;lélu{ý‚­­ ¡P —I2 ¥À&N§ƒA É ^à`P¸\,fÒéB)lÈ5‘ ðÞ@¸\*PÆLÂĜüƒ7´Ez°Ð7´m¾˜åmݲÔ}e¬\‘M·»œ­”M€öõ›ú CÇw]lkiòxB+WôéšvñüE^ÀŠfLÏL뺡k£Àës÷twP›../û}þŽÎ¶‹—¯þþ™ý]P¨­9† D±T­E¢Mõ\j¾®NÌ¥·­û}/<s84›h†Ýµ2V׬>tûÓÞiéŠ ]ÿÞ/þräÔ%Yo¼{ü Â,_¬ä˵çß½ºg¸;]—?¼OÑp¼|ôè…˳ XsÈÏaèrº³¥â`W{®Pêlm^¿f°)Ö´síðk§¯4šÈ#$d‹Å“篺^(Õ¡éìHW/Ëš¦&¾¥lÚ%ø?óÑ !…B¡§ch¨o}¼©“ã¸SãoîÛy‡^+‰.G$ä8Ìav»^;7o׫g3ë× (²rݦU ª™B_q `°ž+ùüît¾ zS¹Š,+s“s©BÙ¦Aˆ1¶ »nëFXµVœŸš©H,kðÿ-éÎÿã*€¿ûšyïÍñæÌ\¹Ï¦i“Ò#”PzaKO ”çÊ±ŠŠ®ºêGE?ºº¬ë®,DVýP,T)%½h›Ò¤IÚ4“c&™\“933ofÞ{óîýÁÿâûÛ·µ9àu•+Õ"ÏC ùO¢T•ÒBR`ÇMÏÍK²”)–4ã(" hÊ¢´¾§{üÖ ÊÑÝ“+l×]ãCïUJ<"¤>[š˜Ëb¤'/ð±VÍ F@àžÆ:Q.ÿøÙ*|ž±ÛDQ¬óûsk—ÓNS–‰ù¸X.ƒ€ B8çtX(’³;–îݸÑJ‘ÿóú;7£3íõu lÚ¸C1À4ùrÙåtX-–ª ]½Úàç¡/~ÿ·™,Ÿ+ ßxé«W/?ztnœáÖý½-¿zã#¾&ïÛÝ_×軵¼µ+’XJKU$é…Lÿ¶ÞïþæíÔRlz:€jê0 !áv¹8»µPÙB©£¥aÛ¶>'\NçìlB¬– eIj5W¤p8T_›O›º9OŸ=5ùÄiFj>#4ûh¢’>r±¾;wNOOÿíòoS‰ÆºÎ¾ÎíÇ«¡3ÜÀh¡H ÇΜêo ²wd϶ΖÆÛ7¯[\É.–Œ W%@`aÊ¥6 ¥Šˆ¢0‚@ `*šAˆÏÏUË Ãv‚ E®ùƒ„ÄåBÁ×Ú27;7—X*¡®& ‚€…"Q­ó`X_ZNéæº¨˜Õ‚kª©kÚâÒʺõj-ßÚÕ/ëú•¡n0Úx+“Î$Kªi.ŠÅ’,K²˜K£,b㈮HÞ½{´Å ˜z&•[ãù|¡ôû MeGMuÒuÍfgMÈNÅ/Žg‰\¥òÌãt¯ëêhoq»Ü©l–¥iÊB¦©ëúÊj²«>Lbøå‘ÑÕÜÝäÈÎç¾þ²ªÈÉrr:fF§b ÉtUT%åˇïþàÌÐj±zôð6ÕçÙÇŽï­ñÕ|ºÈ‹Q(9ºÓcA“+–¾¾­iãúnµÆX(ÚÁÎFç]œ]Õ´ú†pkCÄëvÚ·“0ÔÙåL&C ´¦©( el,¶®«Ñn•†fV54+àl2ý½ç_ŒF£Ó‰Áþª°&T•ß¾sŠO KñÔÃÛ†ÆpLYUj&àଓ+ùôbâÓË7¸¯ŽFi–†.›}avÆô¹#v&•/â6‹Xu0B@KTŒÄ·£”Ni† ¸ÒÉŒÝjÑ@`Kk8¶°b·YEY¥XF«•†QÌédAS7(“ÍÚm¬n芬 ‚@X ¿Ïé w̫չ…( òš¢ @¥hsFÆF·lÙÍ—T»Ï»”^Ðt@RÈ0EY¥(ëÄ)–ØÑí;ÐÛ™ª"K°Óë¦Y{Ií¬Íët¶µy=Œ  ŒÈª šÆZ® kr6ÇÇ㳟ٻ§¿wýš(Ø1Ìd›š)ŠúÎK?Ù1p;EàKK‹RM^J®î»¶öL-¤<~ԈͷõF<¾7Nœ@“×Lýáçßù·þ~þÕ—^;9øÁ¹+ª_ÌÌÎ&ï}àÁ±Ñk–ÉɵÍᵪ´<·2›Ì.ds'+)rC8P. }›7jŠÔeskí­MÉT'PÃòE>¹”úøÜÕö®æ:+5_F³#ìa)4Ÿ’tݘ‰åƒÍØ“Ÿ‘€qÖ‰šà¡’$ /¼ x,KƦ§ÉRºRX«nº½Íé´ü>‚UM‹åóñcÊ©±-RÓ´¹ø¢ªë”©æËµ`ØO(R2[ìëiM%³´…¼}óºPÐOÛ¨B¾H[©ûî¼6:+U*,A˜¹²¼¢£Ä2ãÃ7=(ÕöîÛN‚ºi@0€¾¨ÔjÕšd³RÅR !p‡Ü·s`{ÿmétqäê)¨®ù»?U’ÔÏí=²µ½o™¯å ¹:‡k!•Q5‘œw²íM.TD”긹¿%ðüGœ†00p˜ ¶îØW•ø…¾,)ºÝî :›ÊNÏ̃¡j¥<ºµ÷Ìðd_{°ªjÖ–°¿wC§‡s5F‚¢XCQDÅl© Ö™º.Ô$ Iš¦iêØXôòÍ(nj]õ¾ªVc­ ‰Ã£#+8ެ¥ žîu”EŸß»å1Ž®Ï‰qÀ4׆‡&IÜ*JXsØòÚ2ñÈÃwÑ4Ã9lЦQV˹sçÑ$µÂ—§çSfû¦={îâXrË–¾P§Ë74ÔËšâw¹ e‹…@3Þçv­&Wm ]‘jV’¤m ÇX "0 '`Y’[šëøâll>™Ïƒ€‰:CŒKå<ãqßµ¹÷å¿üÎÍ…¶5wÿãý÷/Œ^ y"[û·ÛìÌR’/çí´K¨æ†âã‰èD*ùÔ_âù’! ‘P¤¥±ÅP‰tÊ΃ãÑç|äħÃYSâ‹KðñGŽ»]NM[(J7´ñ± ŒÄpŒ˜™bPèflisÿ¦³ç/ÈÕŠ I¦$¡(¶˜\îéj¼råúl*™˜Ž/¤ò§?>[¬–K¢îgÈXº[εø¹Š,¶µµÿü¿^9°ïŽoþëO|~ÿ_.ÝèoðíÙ3paðÜm›ú^;yf)SüÖý{'’Ÿ=¸·©1„Y¨“ÿøtSwäâµ#±EƒÿóåoŸ81|ï±"Ï+²\ÆÚ#©L†ãlËÉ4ÇÙ=^wÈï7QÄnwØX›Ïï£i«ÏÅ ¹–Ë7450 »Æ—TÕ`D¬i-MÅ2¿u}N¡΋Á:NÚ ei9-V*8EYv­Âc„ 8sÒ¼×ÙúÆû¯]’b=^wA¨µ7u«B¿ŽÀ‰ñ±+:„ ½ïÈCƒ“‰Ý{ðbáá;vþï{`f8–˜½ºçî½údôë=½ÿöWþü{S*¦’“V¶ndä4üâ7^À1´*HRMN§Ó(Šð•r©Pjok^ÍU8vôí·ß7^!ÓÔuÃtzëÚÞ3Ób™ßÕÕ; §@IDATÛ·®oý¿=óX|j*ºœ ;­š©‡=\r­¼VâŸzès?þáË÷>x¤&È/þèWããskùìÎŽ–Ÿ¾úVO_w!›Û3°å™‡=þã×~ü•Gq†) •_¿šO.?ÿôñCûî²ÂªGqT« CZ"uÇ‘Je”Äügú†ÎÎr¡´R(¯kk‚ó쥾,d3ÉÙÄRWCh­T±[ÙŽÖ†š$‹Šæ 8âùŽÛð;7ïŠÏO·F¶Üð ëÛ6½5øÒ¾­OÎf?!œ!¼!ÇÆBuéZì=QGM‘„,úø­é‘‰èÜ|2ŸËµ··0$V)WÂÁ…$h†^NeVK¥Íë6À0@`Aà Ms.®>ÂP‚¡Bn$­ÛÐ`¬”¦,´µ±¡ÑÍÙì,«(𡍩µ²a˜V†æì6^¨ H’ͰŠ"?ûèW/\i …|V'W×%”s¡@xyeq5½ðøHÊJÓìÐØ'¦¦Ø9ÿÑ­Ûß}ç­*)[-k€&r ·æåüÂçÜgjÆ­[“½ÿ½‹Ú»û‘ž†¶ëcà¾þlMUE-‹Šª¦P¤¥qj~~cgçß?úu¬8^“ÕÎö–è­hb1!•J ¬òʼn‘q¾fœ»xòÔàÀö®Ùäêõ¡«‰Ù…M=]3sKwnè—¸K¬– ¹ªð†Î®R±ôþßÿ¬xlüãrrþð}ÏÂOñiÀ”š,ÉA5]‡PÌÐD<ÑÞÖ<¿05Ý„aARP[ã%U‘TSk²®²X+–+·¦g Ô †L‚úzZ5Eín ¿ò³ÕäZj%õæé‹»6µ||#–.ò.;ˆ„PH­æ‹åò={ûÇG¢~2ÖIJ§®ONÍ,´Ôûý~ϯß:E!P.þ‹_8=x6µV"¬ìBbaS_O{s“Ëí¦LÓõÉDþÂÈ8!ŠBªùáåkã×G·oí‹-'ý.Œ£='˜^·Èêº~pß¡k7ÏL^4d,±šrZí‡ã¯³4·’Šþ˱o]Ñ@9]ñxavÔj2BY+åJ³ÏI–ŽŽf‚$@ܰ¡‹/—·mÛDá8#éšÂA˜¦©¨: A(аŒ5 pœ“ p«ÅBZ(‹Å #°µYÚÆ2šR+–x@,Ë6+‰"è3_xòÔ™ì¿s€/ä®]?Ç2SUvݱkuu4´åÌ*¡“ׯÄÇ,šõ[Ïs© nÛ³8zÑjv9\±©±L±  rQÍLIË‹3ñ}·Mñ¥©™†ð)»{ü‡ÿê‘-s€±YIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_colormap_fire.png0000644000000000000000000000625412144064276022610 0ustar rootroot‰PNG  IHDRà'°·OY sIDATxœíÝM’ÛF†á‚ÂÚN¡Í¬|>‡æ"šcŒ.bCðÊ›>E{× Î¢«šHüTU~™ù>ÞØá&ÔË&»K.?ÿéjêý€C×áuëäC¯ à1Þë~ÚY#@Àu›Šü2ôô³L ðføô+…S"@`Ûo¾t9E%@`Ù_Ó$@dgrñeF€À{C? @€€!DfÃ>v´†Cˆ¬¶\|¹žˆÍ/Ø ðÆäÛ!™Þz¨ `øÝH"@d#súY ¦_Íéæ{A|Y~åzúîg`ni mY?ÝnØË/ÞµðÖ$î8RÎ÷Æ·„ Q!À­ZÄ·„ Ó:Q·kõƒ¼¸› aIrñõš~[dHG/¾¬ýÿLÀ^˜)ÈS™'R³œ€¤;g§ßÚÏi²˜€;1!Ý“:^xAâ lŒ ¥È¾•™É.å÷gäP-ß·ñ0&ä0.^À¥~Ô)xA6ÓzbµºšÚöô–1ÂAÖã”±ùÏtqp³GX#ÈMzýæJÎK!Â5¹ˆ{ ÂDzÏ{µ•Ÿ+ÀRˆp¯„Aöüºy,…ÏhäËåyóþÿ4}¹ÆzN¿¥ŸŸ3ÀRˆ°•­Aî‰nÍ€Gü±•¦á6ÀRˆ°‡ë [„Wë!ŽF„ýüþÇs·ŸÝ!ÄÞ§Ÿksê1Ü/hï‹ OßË”ðBF×øJi?Y¸8f.žä='áR€Q'oïð®5š„£¦ßÒcå>­ŽpÔc4:ÀRšD8ò/Ýà=–Žz½XÄ7;!*Q‰°¦¤e|³ƒŽ<ý\{ÌÃ2ÀR4#¬)©ßì@„#§_óÇ `)úÖ,ƒt Åô[z\\ã)ÂÚ¨ •â›íˆÐbú5}Üð–â7ÂZ¯m ÀCp¯ÖZmã­âkúØi,%^„µ#Û¦ßlC„èQäk[¶Óq€V_î=‡C/³`FÊami›h±Ï ðŒŒÖ~|)§*L¿Rð¼ìøDÂa;´ÚÏMž‡û#á>ÞQÊñe’:ÀRrGèP¸ý™>ÀRˆÐ1¥ÓüCÇ™"Byjû°Éz!À º¢4ý#À+Dˆ‘pÊQ¹õЮ BŒ@€w¡„Ðû‰ B9J§Ÿ×Ïe÷ñ$À ˆÐLø}C€¡¥é×î@„hw"ÂaRì <€M„;ý,…#B´@€'á0ÊÓïÔ­<‰q6@„])O¿Ó°"ÄØb/lŒ› }úY vA„ém>FØ žæiú~®ØâìŒq@„Xãé<ÛÌåëÇ›E>}{ݽï”þ…úWÓïü[ñ }q”·f)º5{bT‰›#Àö„wmkˆ `»#ô¸‘Ýœ‰¯¶%Dë ° <ªU|3õ ð¸-keúöZ nÓ:¾™r„¸ß‘uòh Èmäh½â+Eû=!nÓûm‰ÄFZéßL5B\7òŒˆñ"¸Yoïòõã¥ç‹òâýä^¦nÄô›)Þ'd¾¹fõzH9-vúVLÂ1zO»­ÒM@ëW¼­zOÂŒP!¸Ù¼&RNÀÑŽx&a;*Ó®6?Ÿß¬ŸÈHjá‘§ïeÊK+^Žuš½kD¸ÇcœâÔã©õ<@ñs«4ÐÒ‘‹0ט„ïy îZø å@•Â$,Å÷´»vùúñzF9Pµ“ð÷?ž[=!"ÇYØ ù EŸ„ó=ÀHÓnÉôíu  Šïÿ–DŽ0zxµf9x‘#Ì"\€Jñõš~5"ô-T€Ù⛡?ü.h0DèS˜³N¿úîó€Ä÷ j»^!Taߌýp ÒôSB„Z¦o¯S¸/eRŠOeúÕˆPýµá6@âÛ†í¬M½šÛU(Ç7#±¶„7sùi¥éçŸ'ìëè ±» ¨Ÿ‡éWc¶·gÚ-q5‰ï¼§ïez¹ý3ZØ¡å±w  ¯ñáœÇÝM€JÓϳË×—¿­Ÿ„#½_l]¨Ÿ×é§´=uœåTZ8ÞâSÚwX_ùUxŠð¶³>®Ò²¶c_ícÞL6@¥¥r°–(í'uŠÇQ2@¥E¥xÐJÑÚGêTa)¢ªP;pD·Ú±[# ‹ìûd;/áͤTZhÖRi_¨³>VgȨ´à,¨Ò~Pç9¼™L€ÙÞ6¢«I¨´øF`¥íV-ºšy€J‹pÔVÚfe‘Û™¨´{l¥mU—!¼™ùŒŽðpY€J ³õ+®Ò¶A›ÉwÂ(-ЖñeúÃ’=eúò¨á*-ÐVñ^{Y"ä=àA×ß/åý›Ü†N@¥E{tú1íÆŠ> ‡M@¥E»7>¥çžQäIèî‹yÏÚÓNGÔI8$@o‹˜ð4EŒ°û)¨ÒB¾7ý”ž'ÖE;í:•õZ|L;"M·!®ã#8ÿ¢LÂnPq‘3íb‰0 »¨´È§o¯áÅå=Âæª-tµçƒö bò!ÃI¢¾õry–>Nþçóáÿ×Û…™fø4ýÊÞx›„M$>=Ù«yŠ0Å}À,²çÙé Èô³—yÚ­ñ2OM@â³Cpyøm™Ãøl0íöQŸ„Üt‚ðŽSŽðÐ)(Óo ‚kGõtt÷"¾}þþß_wÿû¿þûï›×;<õñŸ¦ÏS¯©¥!ßÒÁ£èÖ|š>Y,¥ß©£R„ØÈÑè–ôÑK€¥ÄpóEâ[×2¾RÞQd”^¡¨\˜Ù´qÄ·¬uxKzLCõ¸—¶9ê$|8‰oÙˆøJa΢NBî0*¾ÆŒðn€L¿[ñá—h®H|z˜‚o"EÈ)è Ó¯A„!"Žáb€L¿[ ñ͘„o"Dx ñ…îØzð]€ÄwKõSLÁ_  8¦`lèÆE€€!t‚)†Ð¦`<è ÆB€€!tˆ)†Ð)¦` èúG€€!tŽ)è†0¦ _úD€€! „)è†0¦ /úA€€! Š)è†00¦ > ޵ `ˆ` ê"@À&ÁÔD€‰¡ ñŠ˜ÐËåùbýÖd›ÒL@À&”mÊ(ã@$¦v*šñ… J÷Šƒ÷T¦`ÆéW 0•òUïYOÁ¬Ó¯ÄOVfޝDet„Ùã+…qeT„Ä÷†€½#$¾_ØXÕ:D»ÅÁ]-"$¼uìl¶7F íÿËãsÞtÚŽ2IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebraexpr2_06.png0000644000000000000000000000323011722777314023344 0ustar rootroot‰PNG  IHDRÈÈ­X®žsRGB®ÎégAMA± üaBIDATx^íÜ[Ž$5@ÑÖÚ˪½ ´f˜~”3~$¾pÚ™Çq)//þ $ðúúúçÛŸIÛ—lû£ä‡'ðUÇc©™[êe›²E?¸åWc•P²èÎúÚ-qüþî3Ç"Y'mÁ÷ºǯŸ9c(Ypg|åÞ8f E 3NÛbïÇlÿø%ņq¶×ÍŒãý[Gþ£×³{Ÿu*â­!Ñ7°èù'Äñv5Yt@G¾ö)qdä”-zöIqdÑ!õÚ§Å!Q“¶à¹'Æ!uÄ+Ÿ‡@FLÛbgž‡@Öê×==TOÜBç‰ãßËòßAÚªWÇOiTMÝ"çˆãÿ%E·â5ÅñQY “·Àâøü’²Àðf¿¢8¾HöôM¾¿8¾¿ L>À™¯'Žçºyn´å q´]«@Úœ¶Z%ŽöëH»Õ+ÅqírÍkéÕâ¸~}¹n¶äâ¸wm¹ç¶ÔSâ¸]¹o·Ä“âè»&ôùMýôˆ8FþOÞ2.C ªì)Ž˜KHŒãT»ˆ#î:g9ÅN∽ÄzÝMñü‰7²£8rØ’ãZº«8ò¸’g[²³8r™’뛺»8RyÿÙ\ ùÆ)'ˆ#…õæ©q=E¡œßn&:ë“ÄÂØ¼‰@š©Æ/Gý¤ÞüÖ‰â¸ÅÖý@º ó7G¾ñW'dœ}ÓÉâhbJ[$4ÚþÅÑoØ»ƒ@z“žGìÅmr¬b¹8*”ÛÎH›SÙ*q”Q7$&¦šEâ¨q¾rŠ@®h%®G"nÇÖéÀ‹zTQ’ñû$ÞôÒŽâ¸ÄU¾X åä?Ç@üÆ£Ò½LÑ¢9û $ÇõÛ]Å1ý摹 w÷1qÜ•óœ@ ÝÅQˆt”@‚ Ÿm#ŽgBsþuÜ‹8 “ŽHìû¶âHNÞ^ ‰ÀâHÄ-ÚZ IÐâH‚-ÞV àâH@´¥@‚áÅ :x;^€81'ÙJ A!Ž ÈɶHÀ…ˆ#qÒ-Òy1âèœüqt\8:ðyT 7/J7á{L 7.L7Ð}D /NÁ_. (Ž X›,HãEŠ£j³ei¸Pq4 mºD O.V›N~ãg ä(q4NÑÆËòÅåŠcã©¿ðiùK&hó¥ùí‚űùÄ_ü<ü&Ž‹ÓsÀrüwÉâ8`Úo|¢@þFÇÉ9ä‘ãÇ!“~ó3D7§æ ÇŽ DMyǧˆ8:&æ°G D‡Mxççˆ8:§åÀÇ DNwÀ'ˆ8&åÐ-¶D‡NvÐgoˆ8‚¦äàm¶ DOuà§oˆ8'äð­¶ D‡Otðçoˆ8‚§Ãv/[R}ŸÇãGõ™Î«Ø&ê_qÔê¨Ó¶ ¤P•ÚcÏÚ"Ê_qŒØêÓ·¤ MUÒóœ#Æ»G#ÔfËÒp¡âh@Út‰@ž\¬86üÆÏÈ7Pâhœ¢—móº¢ÿM–8ú¦>ê>F߃_Oæ`ô¥ô¦§#¶ùyC‰ø»–8âÆ«÷>f¸ ¿ ¿Ìà 7žvŠØê¤çWDãôq»¿"³ÜÇv¼_QëÅÌr9ã9Ï®«ÞǶ< Ecâù*÷1æ>œJ€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ØPà/‘®©ÇDœ4IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_clip05.png0000644000000000000000000012675411730634407021072 0ustar rootroot‰PNG  IHDR––³cæµ IDATxœT¼imÉ•ž÷İç}æœnÞ¹n±XUœŠÝd“ÍÕ“Ø-²!ÁÝ,ÿ‚ý ÀþˆõÅ0Ú’ t¶ZM÷P$‹T‘Uuç›7‡sò {Þ;ÂΩn8‘ò'wƉë]k½ï)øÆWPc°ÓSUœœ0 ‹sx÷Ô†Ñˆå ¦ãë"Jó7ÅÑœ;wˆš† æèc¹ºæü·k¤$M)·L§;ž<áâ]‡wh Ð÷X‹P”†Å \^Rä9QDß'‘¯ñ/ñqÈí’¾g2a:E)(ÅÍ’0ä‹/øÃ?äø—üÕ_ñ¯þ2™qs1„!R1“$4 aÈn‡œœ0ÑuXKb E”Ìç¤)ÀRä9YFߣiŠ”´-Æ 4¦SV·˜–ßüÇŽRþóÇ,/8š2ž³.øôk®K¾xÆ;ˆCîße»¥®¥”%Q@±#Ë$eI]’¦œŸsrŒí˜Œ¹Y²Û1›á=uÃh¤¸sL0X†)+Ö¥Q ïñçðžÑ„,ãèˆ;g$!Zñæ5BpzÂdÂdÊdÂxBÐ÷‹hZ†@€DãMƒ€@Ehsƒ±Ïà¨Jª !H‚ïk1Þ£Bâ˜8"Žij&c² k  „äêŠ0¤,9:âÛßfqDUq}Í‹çœÝáñcºîðÌýóúÆºŽº¦,©kªŠÍ­é:€("M‰c¢ˆ ÀZ¼GJ¤Ä¹Ã·÷ìv(…ééZš’ë·´5G3F Ÿ}Fœ°8f4'Ÿ²\³+±=—oÁ3¢5~À9Ú†Á’$d aˆúò¯´ aÀ0ÐvX‹µTm‹÷ŠwtÃ@EÄ1Z†hRhM‘$Ô5]Ë(çÎqÄtÊÛ NN¸sÆhÄxF>B´]¤#t„hY®«£1nÀ8Ò!iF>¦n±g C² ­iÊòB/’Œ$!ŠPŠºb<:,^)²Œ®çúš—¯8?çÃùÅ/øßþ˜<çG?b·ãó/H6òœ(f³a½&ŽQŠ$!NF#NN˜ÏÉRª @J‚€$!ËGªëЭçûoQJJ’„@…˜žª ©øÆ‡<~À_þ%ÀdF>!θ¼!Œ( .ßRWܽËhD× %U‰€8&‰Ñ%Œ¡®Hcv[ì€R4 M‚aP<¸ûe)Ò”(Â9¤Dk„¢QŒðž8$Kð××´-'ÇDJÓ[Ê’¾'Èǃ‡¾Å{òœºæô»Æ¢4ID” ¡3Ô5aŒ±XsØ cè{€0"ŠÈGL¦äaŒxGžà=Öb¼Z±Ùâ=ï¿ØÖå’‹K®®Èsv[®ohjf³ÃâŒuRÄ1yÎtÊxL…4Í!ù¤D)ÂðïB¸OÇ}òJáœÃZºŽ@#A).^1ñè>ëU…ƒ8§µ¬ÖÄ Î"%7×L§œÑ·X‹5,Ä1 àQ ! Ë%R\²„b#JÆD!~À;”@‚0†Á"—¤¤1}Ç`™Í( Ò”jG¡„¤((J¤&ËÉrAÓÒ’÷îF8’¶c»e½¥(i Æ’¤´]{€VkI"sòã £ IŠÀ@JŽæƒ18GYrsCד¦Å!„Àøâ Æcþ›Š¸¸àw¸¹Ô9f3òœÙœÓSF#¬¥m•o<&M¥dFaHÛ‡çïÏ÷þH g1aHšq}i˜yp몚ù ¡ë)k¼çø˜‹7ô=àv;¼;dÞ`q% ¤ЊÕêÖ†ŒF N3X´"Œп^“¦À"¢(B*”Æ,ŽˆcÚ g±–ûç/’a ·X‡´”Uw8¤ZI’p}C±#Š@à¡îè Z“Ä(MÓJZÒw”åaïòç0-MƒHÖÈ€¢8@YÛb-£aLrv‡õšŸü„í–oýOžp}M]óOþ ?ÿäïÀ`¹<$¢ÖX‹1¬×Tx>$IòyÎ!qL0 ‡øísqb¢a,HÉÉ9uÃÍš'OHr–¯)¶è”÷èʒٌłÛ[V+²kÁ#$û¯=j}èø C”:œo!qïGcÂ)‚¦a½& ñþðˆ0"ÍÈ2Ò˜$e>%MPŠaG×"ã mKQ`,(Ì@ÓR·,—Ô-Jb–e\]±Þðùçx˜Ì9Z0ž¢4MÇv‡Pšñˆ,?ì¦í∢b³¥ªqÃ!ü¶§®é{ºcК4EHªŠ/yú”шÇOê÷~—ßüO¿à‹/xü¥X­0æÐ0ï‹k×ZÍ$!M©×°ìã-%Öb JýÝ{ö]}ßá<ÃÀàé:FËkæSfü@URµÄ1óH¶[ô··xÏdtxηµDkÂàpÂLO «õžª>`¸÷ŠDÎÔþ¸õý!„΢¸Ïbçh{š@kÃé)ë5³Þ¼áò/#œÇùC6ì{¢®çö­yþŒºÆ8â)©Šcš(¦épkijê k‰òœ¾§*¨j„ KŸÁ¢ˆ¦9”Þ(¢m¹¾áêŠÑ˜;wøþ÷1†¯¸w͆ݎüQÈŸü uÍÅ“ “ Ëåoš†ëkŠâл)ùÿ Þ~‹öà”ç‡Á#ÜCÔ~Ó5º ŽI3¬ãxÁÅ„GIÞyŒ¹¼ ˆHRŒÁ ¶;¤àö–í–ÓÆc´:l;!Ð ¥<¸áÐlZ{Ø(FkEä‰B’˜@óæGsÒ)­ÀÓw˜ŽÞ ¬e6%HcÊ’ÛZóÉÏÙí8½ÃéUÍàHSŒ¡k‰B”dpWW8Gš’åÄQJU³\DŒ¦Ô-ÖàËk¤ Ï †8AK!ü@F¯_#%Ë%]w˜ö´f6c½þƒ(ºÆß̲´ë.õ+NNùçÿœO?åóÏ1–÷ÞãúúÁ——Ü,x¸Ùp{KÛ:Ï8&Ë֎LJ2¹Ï×ý†Z‹i $¦Ç ¬§HbÚ–0ÀYLÏÙ wïð³O‚顊¦ãæš(â‹/,ggăÍNÛ 5Ó)Û-~8ddÝ€8dZ×)æÙ¡é ÚŽÙ”¢DkF#’Ï!A÷û…GJÊ‚²¢m=[Órÿ>qÌÕUƒ•·# e¨àðù•H2¼TD!ã1R±Ù `üŸ‹üäIX×Õë×EÑ;IrûÙg÷µ¾Ý§òhtØŠ(b4âô”ùœårIssƒl×8ÇéÉ¡a©K¤Dp(óÎQ•Øï‘ê0,ö=àøà aˆµŒÆ(ÍtJœÐ÷´Þ£4ÎÓ¶Ô v ËðžÍ–®G@’Ä%eIo8>âììPW$JT5›[ÆSNqÐÔÔ5m‡0 T5m{À¨ë+ÜÀé)gÇ,„··„áEߌ£¯KU»ÛÛuQV“É,NÒù|ž$Ét:ÝívÃàV«UYVRÊ8ŽÃ0”B9笵Îûõzc¬ÕZ¿ÿþûÏŸ=»¹¹yõêÕ½{÷º®BDA˜¦i†…xïJñlß îO½´í!÷½èh„14 q|Øß8b¯^feb¶%aÀjÅ0`zÖkæ3Ò!ðYFòåTÚuŒr„8q|(Õ ˆuÅnÇ|F–q´`½>€ûS¶ÙжHÅz{³”Äáñºg >âô› »í¡²î'¶$& Њ“FÛ-o/1=¦Ç¼Ã¼'K‘n Ø¡IÂ`þñ0øàƒÿó?ü‡_üâ'''ãñBH„Özÿ‹ÖÚÞ˜o(õaø÷¢è·ãøÏ£ˆa ïñžÉäÀ×짚Ʉ¾Çö ¦·8… ÑUA’Ç·xÇ×ß§*¸¹Æ:TB UEY…¼|‰œÇà Cµ8G×1zæ 8þ0`­ÂTtMÍdz¨Þ»ƒÃƒÖ 0†¢¤(™qt„÷ Ža m±†ºæÇL§czVk&NNè:ª}‡5X{ ~Æ2NÀQ5t=]Goж#O £o¥ñ]çæëUß÷Ã`Ç“QJ© ´ Ú¶­ëfp~6;:¿{/ æiŠ¢Bܹs¾OÊÑhtrrÇq Ã²,…R©ÕízWeY¾zõ* ‚Ýn7›Í†a‚À9çì „B8çŒ1éƒ ÃPkÁoÁ×­}жŸî³0MY,: $ ÿ¼yEU¥¨ˆªÁK¤D Á$¥-©v<¸Ë8åê-­%™1?9L#»Zòæ MÍé)Y†5ôý]Ù'\ p¦‡ mŒâüˆ»wkÚ7н¡(( œ'ŽAP¬¶üÚ¯§¼zÍÍ5u89æø˜É­©Jv[ÂQNÛ°ZR—ôuI×ø‹¢¤ªé[¦3„¤mpß÷˜;üp1EA µÖa Ó$Â7uÕµ­é{­”Vº*Ëíf×¶ÝüèDHõêÕ«ÍfÓ¶ít:¢¸®ë0 ×ëuUUu]§iV–åf³yþòEÅQ_^^~þùç¿ÿ»¿w~~þâÅ‹(Šš¦éû~0Ö9ç½wÎ Ã08E‘ÒðÞK)‡a0Æ|UÊ{Uõ¾ÔF8­ÿÝ?§©øÕ¯ˆRÒ1GG´‘F8lG,¨ œáñC¶[Ö;Â1£¦ïi[v[ºî0ÿÍf –®`_# ÑúÀÖŽFÚÁ9ÅxÈÍš²¤ëh{‡÷KÝÑì úŽjÇlÊÙyÆt‚;œ§(°q›7|úKúžºB „&ÍÈF´=×K6;tÈd‚Á23#’'‚ÅâhŒ±}–¥GG‹ÑhT5•@XkŒ1Zëq6ŠÃ(ÏÒ““³¢,Ó4­«2Ž)ÄééÑháv»Ýl6]×m6›¾ïnn®g="ÂÕú¶ëº(Š&ãññññúOÿi†¶mû¾7ƒuÞã¼õV >ËÒ ÔÞ;¼ÃP)%„Ã0I²;›õÆe³½¥©øÝßáî9úgÍd†ÔD!» Z¡<›“ }ÇjÅ7¾AÝpuƒ’€j‡xó†8fp”§gH…4Ò#=¶§(Pøë EÅf­øê#¬åÕÚ–$ãâ‚¶£éè,½¥ 1Q®¹|ÅbÊÝ3>|%7Ðô¼zƒ8>åj‰Pè€É„÷Þg2ååîÜ%ÎYnxþšå–÷¿ÎbAQâ“ yòówFùt<¬ÉÒ$Nâ{÷îu¦[ÝÞ¾½¾\ÌuÓv]_•í»ÇÜ¿{·*‹¶mu¨Ç£Qš¦³É¬Ø•/ž¿¸º¼È4ÉŽŽNîÝ¿E‘sƒq}…ZGËëU§ÓÉô³Ï~•eÙëׯª.ì`â$OÆ›Íz4ɇas¥d–¦n””Óélys{|tÜ6ÝÛ‹·£|ônÓþ·ü_¯_"ågŸprJYÐÖä)~Çd‚ (jâœo|›§/pÚs<ãÅs6·8Ï Ð?ûŒÇ_åü××Ôç§üò§ŒRDHœ1ìIAY¡#ЧÁ횪Äy¤¤h;:ƒÒÄ: ·T¦áî |•qNPWt=«ÕᡃãÓO)Jæs=b”*«ŽY1^¿¦89ãfI×a:âø÷”zÐ7qÆqTåíí:ËRëííÅÅ…´m—f)R/'GÇš¦é«¦ëM×wïcíÞó 8QUÄ1I‚PÊ^:ˆ®ž,e›fYf‡¡éº¶·ÖvpI’déÈ9Åɽ{w/..noo¯®¯¶ÛµVJ‰Ä{߆Rj4Êã8Z¯o±ßûÞ÷þæ¯?vÎA”$i]7Qc÷E4KӦ骪ú£?úg?ü7ÿË¿¹ÿx¥°Ýmf³i×µa.æó_ýòW÷ïÝû×ßþµýé/)JvÅJ” %Bà ãœa`»f:åG¬nØmÐ:@)6%Mq EÁñœ8$ ©*œ£÷ î «iMÛî¥Å»çôB¢$RE耮cWȳ4%M ßú·\^ìIRr|ÂÑ1»£1]G3Dµýìß÷Ü»Ïéé?X-_¿~mŒI’Ø{ï½ß§…”bµZy/0 #Â@‚g³á?Ê«×4ï¿Ï£ÇÜ@U†ô=:¢ë1†{÷Pšå ÖÐÂð¿Î³ßŒÂgÏž¶m“ç¹Rb³YK)f³™âv½zûöíh<­ëúâââùË—B c-ƒ««êíÛ‹8Ž­1¦ëÖ›MY–: »ÞzO>O&“$I“$^­oü㿸½]!|GA ‡Áö}g¬uÎ¥Yšç™óƒ±½RJU–•Öú_ü‹ÿ~½^÷½‘Râ…@ )=|¸§Üv»]ß›ï~÷7•–ŸñÙx2ªêrçœ1=ÇIßµ}×m·Û'OÞ}ÿƒßÙlŽV·?՚݆( ´ qžÞ'”[Æ)ïóâùAZWš4£n¨:´o8Zp<çv‰R‡èxOdÁ(Bìçë(>8—ö}GQàIBã<¶Cz☛>ÿœ‹ ÆS?f2¡(¸¼f·ãÙ3–k®¯Ùlxþü ¾o·l·TÕo+UÅf³)Šb<[Ûï'h)¥¢(ŠªªÒltrròæíÛg/^4ò<FEQcêºÞívû¼ë:ë†8Ž÷ÙÐu÷~·Û­V+pÓé8I’8Žív{yy¹^¯ƒ 8;; åýEQ–eZëa°'''}ßík_{ôèQß›,ËV«U†}o'ã™âêêÊ{?™Lþøÿø?þÇÿøÝï~w±X”eÙ¶íh4šÍfëõºïû ve}||Ò4í_üø/³ñ(Ͳ(MþÇ$f2ù’FPUKÝg˜g/>%qŽ¡'‹‰CÆ9d>gWâ=qÊd²¨”TÕZ£®³aÀƒ0cÙHÉdræC×ñáWÁ³Þòà!ï<ùÒ8ÚRTÜÜp}Cqyy0 ®7XËr…~'ŒíwÅn¹Z¡vÞé@Og“®ïÂ(X®–M[3œŸŸOç‹×oâ$¹{ïN’ÄÓé´kÚõz=Œã8ÖZw]·+wR«él–æ¹bÛbwsssqñf³Yÿü?¿wïnžçÆô«õ*ϳ㣓(Š¢$íû.ÍÒ¶móRÊ(ŠŽŽÂ0¾¸¸¨ªú?øÁ¿ý·rvvfŒõÞO&Ó¾ïÚ¦999ÙíŠÅâÈ9;N¾ýíÒ4ùÙÏ~jL?ŸÏš¦6f¨ëf>_ÓÏ&ã8Žÿúo>R>}ú¬ë»(‰¿Õw™&ƒ¸á‰Î”kNŽyòˆÿûÿáüa:Ç:vÛ‚0âúê@s7IŒ5ŒF Ѿɯ¾ìHŸœÜuKU„Ó(B+ʽg´ãUMQ¼ëõÁ^à<ÎѶûÚÞMë%mK¨GÐ÷]×uÃ0!´ÖJ‹@‡£ÑÈ{qqá½WJåùhÀß®7eYžœœdYÖÔUß÷¶7BßÐI’,óù|> ÃõͲ®»ËË««ëë½ÞEÑd:=;;[­–JI“É$Ž!D”$Rª ¤TZkÀ9¯u ”vÎyÏ׿þuk‡?ù“ÿã»ßù®ëʲȲl³¹ ½_jÓÔÖÚ‡¿xñâæææÎ;eYJ©Œ1€2Ðí·»ÛÍÚ9¿+ !•†ß‰¢?·–a@ȃ%,ˆˆCvò„wžP—<Žw‰Ô¬w8è{®n(¶d)ï=a¹$ðî`Á²) C†AñÎ9Öa,Æ‚@$)I|˜?âˆ$G ©Úž4Ã ì „$ˆ÷õÏÒºžÓ3¢˜]A×ü†íwU¹+vUSw¦5ƒéMßÛ~¹ZVuå…ßl7'ggYžœDQ$”’JMgSkÌz}+„磳“Óñd4™Lâ8Žãx<‡Qx}sý«_~&eP¥n4Ê“$^.oÚ®ùìó_ÕM5žŒ¦ÓišfeYm·[†Q Þ¥kûºn¼÷ZÞû‹7oß{ï½ïÿ7ÿÝ¿ûwgg§à=n:›»VÁññQß÷a,—ËétüÍo~£,‹gÏžæù¨®k¥tß÷MÝM¦c%„’Z*õÙ矟œœÚaPZ %„ßrÃ__š†…$Œ#V׬nxÿ«,æüäc² ¡˜Ïi::CY\]Òw|ûÛ,¯ÉRúŽùœ0Ä’dï_UÜ™Q· Ä„Þãm‹’LÆh–̦´=½9¡}OßÓ´‡ÁoÕÝ‹“MóþfóÞx\”eg:çÀ{×õmÛµ}ß×M]»$NŽŽŽÎÎîA`Œ•J5mg†a2Gq”DQš¦}Ýîv»‡L§Ó8އa0ÖtÆlw»õvIQ”mß !”RmÛ¼óä УÑx>Ÿ{DÓÔÛmÑu]6ÅqœåyÇI’îÙÎ<ÏÇãIE——WƘßú­¿7™L~üã¿xøðÁ|¾X¯oH)£0îû.ϳ¦©š¦y÷Ýw=ztuuµ\®â86ƶmÛÔíd< ´¶ÖÌæóõf3™Íu%µÖmo€_C|Óû­;Ð&J!Ÿ?þ\ ‚ 0Æxø ÐWWWóÅìƒÞ/ŠÝO~ò“–eÕ6}×õBˆ$޶ÛÍl1×A°ÙnÂ(ð µnÚNkêÄ7~â<¼g6e»AKîsvŸÓõ„1£1·›ƒß°,(6l7k†4OëªöÂI©‚@Aeéééñýû÷¿ò•¯ŒF£ÑhÜõÝÍÍêì쬩{;ØÁ»¶ïŠ¢xóúõíjeúÞÙ!˲Ùt’$‰r»Û]]_Þ,—uÛ ÎƒŒÂ0Íó Ð}ß—Õ®¬ÊÍfÓ4m–e§§§>Šãx»ÝÕM×¶mFÖxÙ÷]UU{Q©®ë¦i…§§§?øÁº®{þâ©R*IâÕò6IR)Eê®kã8*«"˲}÷ûÉÏ>¹ÿA]7¦· †aHâ¨îš,ËÂ$~óæMÇBÊ(ŠÚ®¢( #!„üßxgÑÓ‚# yò„Ï>ÅXÒŒ(E*Ҍׯ¹]‡¼~ÉÝ;(±Ÿ"’á^ŠcÅÙ "T€Òw„!¶'KP°^EŒÇMÑCoÉr¢ n±GGŒF]\)¥…v°ãñX‡*Š¢,K²,Ëòl<Íf“W¯^¾|ù ÄÕÕÕnWA°ÝEY.7kï}ÅJÊ<ËÒ$éÛxçñ#cÌz»Yo6»b[ÕuU×MÓ¦ÉÈ CQ•ËåÍjµ”JTu=›Oº®[,ŽîßðèÑc!äòfåŒ"ç½ÔºïM†Rk?8k†¼üy0Û[K i*ÞÃ{ª Œ‰’”·o¹]1óö)˜Ï˜Ïi„`29PçQ¤xÿ1a„õð0°Y£5MAi¬e>c¾ÀXÚáYß²Ù ššËKÚ–8æÁƒ¿üô?ë@I%{Ó%iÒ´]Û6Ƙº®nn–×—Woß&I~qñöÞÝûa΋¾·»¢è­Q¡’RøÁ÷]—¥Ùx4B¦I:žLÞ^^½~ý¦*+Iœ„Qè¨.*)EÈ$Ž¢PÏóåÍU–f‹ùb·+^½|µ+ÊÍf{s³¬œ3ƒÂ8Ž£®ë6ëõ^€BÜ=¿SåÏ~úÓÓ““ßûýß}úôéÓ§_cm·;¥äž í{“&ÉååU]Õa>xð¨,Ë ›º!„¸^^ß¹s&¤.«2O¼§i›Á9áPVcÌ`ûÈóñ`™M0iÄvͽsÎÏxù‚Õ’ÅJî…­nÑš«kš†£޹]ƒ`<¢(”P<ºƒPxð<ÂSWDš4…<ãœ,%ŒØ®‰5ƒ!ÏÉRª’®Ç>üÙô÷êr½]Æyo›¦«-sIœ„AXWÕnSX3H¯¬NŽîL¦ cçEQU׫uÕÔEÁííªmÛÑxÇ‘”*ã$}{qÝÔ¯…ŽÃ$J8jUW[Ó5qfiâ¬=šO§3%õÝ»÷–7Ë_þòÓ$Nðþæúr<µ}}}= ¶kšQšÍgm]¥aTí ­Ô;¿yýúG?ú©ôŸþ韟;c­÷w]'BÍæGmg¶»"Œb¥!…óNH1@gz!ušgÎÑ÷FIè0Ž")„ZAÞý7L÷Óa ÑO?'ÒüöùÙÏ÷;œq}Ô MÏ7·xM°ž$F¬oikÊâl¦§ëhâˆ0¤o(vØ¥™Œ9Z`Z¼Ai¼C+æ3NÏöÆ™?çR‹¾ï‡Á \êÑxä›Íº,+­U&Z©ÉdöðÁƒÅü8Kkýêv¹Þl½pY>ʲ´ëZ)åã8Žl7´]×w¶nÚÁ8!•’J"µRQ¥Iš¦Ih­¤thá…5¦íú¦®•FyF±†¦i­5JI/*ð!¥ðƒkÛV 9ŸL³ùrµJÒ4I’ÁÚo~ô­Ñhô“Ÿþt>[L§S­µ1¦ªêã㓪ªÓ4ÛnwJé0Œ¤TÀÁ4%ÅÍÍÍà½Ò: £/§O看¢ï½÷B!@`k‡á;Ö|œ¦àÈSªGs¾ÿ|ñ7×hчŒÇ /ÊA°+¸wÇï`÷aÒxO(Îroܶô=Î#]spNL&œsvJ ð£ ½Áy’”ªAëßmj¼¯«r}»®ËÒôÝ`­s>Pº®Ê¶n¤ô¡ÒqÌg³“ãÅÓ/¾pÞÖå®ïû@Kç]QîÒ4N’$ÏÆ@×ôJ©4I•R~pišfiF‘ÖRi­•ÒZ ƒ•R ÔǤ”vpmÛ®n×}ß;Ïn·»Y®´ÖãñØØap Ä`ìh4ÊÓÔ{—g)‚|4¾½½5Öh­þóŸÿÚw~ýôôôé³gŶÜn·ãñøåË—u]Ïçóív›$Iß÷yžÇql­=(!ÐcŒñxçÜÄPjï»Bì U@)µ?%Ô±¿S¶¼¢.ùà}.^3š°\!EMšñò%QÊõe‰é™Íh*Ú–,¦ï™NOîáán€T4 IJ ÷.'òŒ(¢k¸ºÁyn–ù˜åcãÍfp®ëº®ë”Vazïk‹Í&IâÉt’ÅQžç‹Ù4Žâ¶©ëª²ùb~rrtçüüäô(KS¨“ãã0 Ýà˲tÖÍf³ÙtA]ÕQ¥IEQa*)=n¬8ï÷üˆÖÚ#º®³ƒÚ®kšFJ•eY’$AöÖ…A¸Ýl´ÖIA0Êóív[–UE·ëu×÷Ëå²,˺i¾÷ý¬WëO>ùä£>Úl6{:>‚¿õÒí½ŠÞûƒ‡QˆÑdŒ mÛ=m«”ÚlÿrÈö&9)eQÞÜ.?ISš’qÆòŠçϸw—¾Íå%ë Ö1›Ó²”Õ-“)/_°^‘§äÆâ,“±â»h}0Ë/¯ê쯹îýŠû«ÉuMîªï ’„ù‚íö+¦¯Ê¹¡kÛÁÚ( ­‡Ázçv›Íb6}pïÞÝó;GóEšÄÎ }ß…A08Ûwó¼±½³6ÐúüÞ½¾ëŠMQ•eÆÇÇÇq”Eaz#„pƒõÞ‡N’$Š#j:s]×õÖy„1¦i¥ƒ8Ž›¶µÖDQ¸Ûn–7×aŽ'Óùba­1¦·}¯”ÌÒ¬ªªÍf=›M÷”²,ûø'?)ËæŸýÑ¥iöWõW?βÌZ[U•÷~†8Ž›¦©ëZJ©µ–RAçyƒµmSwmãÓJi¥¤ÀôV2ÐZ Ü`÷fœ óW×׿G=îž³Ýðâ9ï¼Ãñ‚¢`³e>?Xô½§.™Ì¸½åúŠûwY,( ’„âþ1ÎcÝóô!É2ðô=Z¡5ƒ¥ï÷cFcò1ggLFEYVRï}Û´ÆZ%0Ö:kà xüðAžeyšŽF#¼ßn· Ã|6ûÊ»ïŽÆã|”Ç£8Ž¥”a ³<óÞ/W«Ý¶PJÜ9;“ÈÛÛÛÉh4uÕ4w×%zÓ{וּ}ßÛáàôÞ—Uó^J)„¼¾¾.Ëz2™œß½÷àÞÝó»£4Rj¥¥Rv””*ÐççwÃ0ÌóüíÕ¥VúÉ»ï>~üÎË—////ÏÎÎ>ÿüsç\Y–{XnÛÖZ»_É9ƒ èM? ƒµv@J¹ÇL¥Ô>ÒÀ0 _&®ì¬uÎw¶ûqþÿÚžºd6åõ+ž¼‹V¼|‰Òx¸sÆvÃ튋K¤ ,ÍŠóä#êRqwŽw89\×Û‹PU…€ `°˜ž—Ï CòÉþîë?•RJ%¥Hâ(Ž£( Ò4IÂÈ{‡ñÉññW?µ’€w}Û˜¾‹Ãp2ei2™Œ‹,M÷³oÛªªwE±\.»Îäy~4?F}g6›Íl2sÎ5mÓ´íà¬ØÁ¶}×´±Ãà¼óûvÁ#•ÒÁÞÎGQ–¦JŠÉxôèáýÓÓÓÉt*„˜ŽÆJI!PZ¶]ÅQžÊº:>>µÖ ¡öºqS×ßÿÍŒF£?þ8I’²,÷Žá4Mÿ6óöæÒ=H:çnœÃ0ô}ïýßÿ¢µÖ9÷·át€Pùx\”Eš&ï/W? 4§§üâ>xŸXßRçg45]ϯ¾`4fX-‚éï0VñàRá¡34ÍÁÇÝuÔÍáÞ÷>œ³)g§(MUqy%n®¥!÷ †a'Jʾi•RóÙÂ[“ÄqžeA¤I2N£0lš¦iš<˳4ëºv»ÝÕu]•åíæÖ î(œ#Žã8JœsÛÍn¹\†:ìºÎ˜~)PJ·ö@Ýí«Ë^8ÜWÁ<Ï—Ëå^1ÆÜ½{÷É“'v°£ÉäÅËW«åÍõÍUS·@Ûvóù\Án·ÛPAdIúÅÓ§ÖÚþýß¾wïÞŸÿùŸ¯V«ñx¼Ùl Ý÷QEQ´oRö?aÆq,„ØÃ¬÷>I’$I„{™Ø“õJ)ç=È4ÏË¢Ü`ûî“ÓcpËÕ[¾ù-‚€Û%eA`Zt@gIGÇ›7dwî°ÝGŠß!üá?U ŽÅ‚7o8=Á{âˆýˆ£9(ÉbAÓ`ÌóA×µUY–»ÝÑÑâx~Ô5íöv¨`:™Bô¦ ´à7]]•išœMF9Þ%iâ½{ùêEœÆ½í7›õ§¿ú•uþÿöèá;»ín½Z‡Ab³ÙE5›ÏO޼÷»b×¶­c/9c‡¶ëÛ®3Ö:¿÷­;)e†~°mSçYzÿÞ½,M1×Ë›,˲,oÛ›.J„tÎw}yqÙ÷½RÚ{‡ÉruFÑþá¾|ùòÓO?ã8˲ív›¦é0 iš&I²¨µv›¦ë¬í^+9Xóÿõf?¶gçuØ·çß|Æ:5Ýyl^öD¶Ø¤(R”)ÙVE±"ÛPŒä!ò–·¼ù;8Nà$vâØ‚c;°ƒ8RdÑDµšl’Mv_öúöjx‡Œ‚wJ]׳$SJ Î"öyߪÀl Ï>‡;·àʼ~ Æ@ʘÌ`ÓÂùö÷áõkh[¸?vÞØ)`³¥q(G—½öœBpë&ÂÐÃ|eÞÃf ”^C¨ï‡,MgÓi–åVéõÅZv½`¢ÈsÁŒÐÅÅÙzµlÛ6xO(M¸ „xçö÷÷»¶}ùêUS7‹ÅâöíÛeQv]¿·PÇQc ”$Éh4ÞÛÛ³ÆaŒåûÐçadŒáœG|?.•$­uzù`Yt#ö}¿Þ¬cœsc´1¶iꀰµÎ{GQRYcB”2Æ¥,M’ÓÓ³ñd¼³³óÓŸþôþýûÆ­õf³±ÖF­#Ö Œ1!¥8„€0`Œ#XuÎE¼“eY|°ˆHã„2Æ9Â$^ 8DðGŒ¥Ð´€\=­áâƒ`Á9 )H!@Ó@×s0‚6®ÌÁ:”fpãÂ(Tܽ]?þÑeG¹Ràü÷Dª•²Ö̦ã,M‚÷í¶ÚžQZ楠 #ŒB@È;kãYšcD‚„IQVÚX¥4B¸ëû ã1œCYÁwc¨×`P½‚õ†…“˜Îa2#peä—1y W¯‚6à=0 Þ‚.£”…€~ÍYÈYƒ1@ÇGGmÛìíììPDº¦3Rƒ Ö‡l^ãÉ” Š¼È’L*-•v>ë¤T'ǧyY ‘o·ÛÚ9[æÕx4,eY–RJç-!$VBI? ÎÀïóÖk-g !4®ŠédÿqV+9ÈýÃ+EUTUù•_uÎ;š¶ϦƒÔQ妔æI–eY"ÊèÕë×þâ¡÷ßÿáÇÖÚ7Þxc†ívWQÛe0ÆŒÑàBL¦”c´ÖÊÍ9KÓ„lŒv΂)£ÆY‚!¼ÎïÂß@ð‘w ´5|å.ìïëç 9°l©`½†Ñør9 ܽ y˜‚րȥGÊ ¬…í(…ñ”Âàâb8>bŒTeI)ID"¸ „ÎÆcJX³mú¦Cú¾ó(8ä€sŽ’ç¹ÖúøõQlàëºîôôt¹^%I’—…H’“ÓSc­ÖVkm­‚Ö:xèû~}ô†Œ5RJkBÜ…Áƒ‹–{g½÷ç¼* Œq4Ày>žŒ £„±$Mw;Æí¬RJ$ißKm·!”0!„ „!ŒBŸ|ú)cìßøFžç=Úßß?99‰;>ºu"ƒêœC¼wø—›>³—5«µI’dY‹È^(£Ö™èê@>2pŠ? ¼…§Àj(xòlVpx€C `l·B€G ËÜ»"‘¥ -l·@ gÁZÐ Bg`³n…0 ½HDQ KÅxT«1Ô›f»Úh©½óZ¥Íx×w}Û÷]ßu½dÛ´›íV0.DB8[­×Þï=¥Ì‡À8wÞ½²ÖRÊ9çÆ¹a¼ )„Œ3ÆksG8c­uÎzïÆ‚B$‚+¥šf+¿rx¸pE5®’$5Ö(¥­÷mÛ/"ã„'Y–¥"ŘZc•”›u€À»~ýú»ï¾ûé§ŸÖu]×µÂB`Œ@,óžüåÆ1®b,<.ËÇË­¥Œ2Þk­„0Fïü£õ ^¿„σìàä>×nÍ ÞÃé9¤)œœTvG  ª­€Q` Ú†á—ǘ^¹Xݼvu<@ðÞXC@óù¢ïåf½QRYã”ÔÑ (ÞÔÛ¦m뺽8?¯7[(˲Ùtš•E–ÚØýýÂÐj½„Bˆ”µÖcã,Ë6›m–ey‘yï›¶†’$©÷Îg1V;kC!ŠÆ8OEQœFéd<™M§”ÐDðü4MÄ;o¿õ'ò'ÛícÁ×õ¶,rèÚÕkUYy£Òƒ³”rÁ²à°˜Pw~¨»%"–0H“„R14’ Ö¦B­–Y5¢˜äÍ€Œ¬;HÒgŸ|üt³=ÀÃg X ^Â_!`\AÂàãƒêaoŸ¸}Fa:ñš´%Ak@Œ…¶ƒ¾–$jhÁ»$I9g¥µRÞX<’J÷]+¥rÞj­µ–#,„uÞ9Þ'LL'ã,M»¶}üøñj³9[.m^Ÿœ6ýà{@J*‚1Š~Ü$Iʲ̲Lkž1FJu Œ‘ó†P(xï‚÷„Á¥„Qb´™NÆãùdê­«ÊÜYã} „ˆ$¡”hã©6›õáÕkåhTÆŒñ¦í^+¥»v`‚(ÅBð®kóï½÷ž÷îÃÿr<ž$IEh4!¯NgÁˆ#Ì­'Ó€‘qæ¢>GDB­3œ%e5–ÒÖuûÖ[ö¯]ÙJå¼ë‹ÍWç{y/ñf{ôèÑ›;ÓO³ dÍ`ÛÁþ¸y’‚‡õ4 % Š „CZ\ÍÖõ¥ö»^ÁÐC–B–ïQ€Éd2*«½Åçû¾—]kç¦iÚ¶®_|¼ó£ÓvÝz»BÌf3Œ±VÖZ»Z­ò¢ÐÆEa­B„âKÅuúòe#¯à „QîAåy)xJ0ƒpy)j­ãÏFAɲ !D™DÚ¶Åw]‡F}þùçÆ˜ƒƒƒ«W¯NFcgìfµ^­VÚ(.hYãív{vv¦µþÁ~ðâÅ‹÷ß?‚—,Ë&“‰µÖ ™ÇHôÖ¶ÚJ à€E`Bdcí¡é•4(¡‰ ‚z“ùø»ÿÞ_MÊ|è{lýÁhæÖm¡9­çCx—L!›Àñ98C?ùN/ÀnÞÂÁ¸yƒÔ0e$¡`y›(…"1`ã*¯òbw·Ê‹ªª¬1:ÖZc€%ÿ<!`h@!MSBÈf³i‡~<_»v-n¬í¦ñÁe–©”ýÉɑֲëºívÛu”RJÙu]Ó4±ÌŠ‚Îl6ÛÙÙFiz™ eÕX¨yQ@H²ÔC`ŒÅK«i)%Æ8Ïóø+´ÖËå2f•@ëõêèøU]o0ÆX|Ç,‹¸BÓé4„ðá‡.‹÷ß?4£Ñ(…ñQ#Oˆ¬WJ‡ŽN¶Mƒ1Řˆ$µÆôjð!0J}ÆÀ fœI8g”i#‹,›M&Œó'OŸ®·il^•£ñØ8çW«•%e¬Ê)¥BˆH Gà‡BdYõ©¼TÒ9ë¬ ÞSÊ„à 甲"Ï„Þú,ËOÏN¡¶ë¬s“ñdwwoµ^7mëºX¯“4õ€ƒ‡'ŸžŸpÆœÑõz àÁû¾‹ý¤Rª'Ož¼÷Þ{»»»ú§†šL&‘Œ83MÓ@AZ€a–!’ •uuÓžž-Ÿ¿|Ñ´-¤( !Ä dð¾éºë×®ýÊ;_ÿwÿ÷¿I+0IÙÕ&Qæ /Ìùê÷©øç@¨·0‚²p|o¿ YvéD=YB7˜Î! 5,—ðô)œ/aSÃÞ®\ð°YòoN'eYªªêúA*µÞlûa§”3g½uVj „ëœ56à€îÚÞYK ¡c„•ΗˋåÊ(ÇU’fYž÷]—¹uFöCÄÜqÛE¦#~D62~'²Ö@ðK1Æ8BðÞj ]ÛfYvrz’gy<ú¥I–n¶ÛåŪµŒÏÎβ4=;?WJU£ŠsN)[¯W!kôx<šÍfÖÚ¾ž>}zãÆo|ã?ûÙÏ·Ûíx<þeIêB4aˆ3e=œ² ׯm6íÉñɳgÏ´6„`9ôyšì€¦®ƒu ð·Þýæb2ûGÿó?¼{ûN–ð”áa¹Ì„m[2þh/€rÈr8:‚{wa1J¡ªàbuCàÞ=èøâÁÅ †„Ãî.0Ë3pö÷¿5›ÃÀ˲¼íú¶ïŒuuÛì,ö¬wà ­sÆ„¥ÄzgŒÃŒsÖg]†QêÛlëåÅ*xÀ”J3Jéai–Z¥ £Øëõ}ks6oŒ¶Öh­¤†¡×Zyï %a! !£Õ0 ƒ”Êïj[¶Õ IDAT,e¬ï‡$IÓ,+Êr»ÝJ¥ú^žž"L&B$}7 @P–fœ ­Lž¥ÞÙ²ÈË2F‘­Fè²ÔûÖ·¾€žK’$HÓôÙ³g<¸ÿ>øà—éc~e,¹1Ž"F‰pÚ×ÛæøÕÉÙóçe5Vý`©eŸ%ɬªN&yÁ-9zöâÆµ›W®Ýì½ûèáχ ÷ÈÚ£gOß¾q¬þŸŒA!¡ :€2ƒv o܃é0ÀÐ’>ù9ׯAšB–ÀË 8܇٠ÞúêßjêÕz­´Â”)c^uÃP7­6: ÜÆÄ\v½{ï˜ ø’'DFY"aÔ:ÇWÖh­¥RÎ[€`œáŒ­9cišD‘!ʼÆèaè£VÞ4MßwŒ±4M‚4I)!ÑÍ`­³Ö€“(ÍRcM/e5®z9Ìwv¶uÝwÝùêâ|yqóö­ªQJ_½|ÝwqzçÎÝñx2 ýw~íÛRÉ<Ï"%ûO‡ARJ×ëõv»ý½ßûÎÏÏŸ>}ZUÕt:»Œ™Jó"+‚VšnÛüÛ?ú7ßü•_9zùªiÛ„BÛ¶u]{ïã‘-cŒÝ½{owww¹\žžžŽÇ“¢(0ÆÞXèëg/OŽŽOŽïÞºùŸüÇç+÷î~ü“]ç­Á>Ї®•msçÖÍ¡o‹¢²¯êf²ØyðîÛ§«‹åŹî‡+ÓièûýÙô[¿öí%ÿýóÇà4 œC–B³…¯¾ó 0 Æ¥Þz îÝ…Ý ,ÏìÁ¸‚DÀêÎÏÄv-­ºØl:¥ÚAbÆz­”6„3„Èh<Ú6-¥”2Œ·Ö;„0â¬F‘…ö`L!„ò¶í!„LH.îÔ ©›¾ë†aˆk! Ƹ,Ë/±L,þ"Ëœ¦!4^Q!x¥T×ý )§ÆÙ,ÏŒµ”P ¤ïúAª®ò¢Œg³­Û¦9;9³ÞϧóÙtÊ({ðà+LðGeY¥ÍØÅg¥TžçRJ„ðoýÖoõ}ÿÃþ0ËòétÚ4Íéñ‰Ü ªé­®_9üõïþÚïý‡ÿÁW¿zÿ³Oþâá§óé,X Öfi²\Ÿ.fs̰˜Œh™¿>?ÓÎû;ß™N¦ùÿþ”oÝtg§'÷ß}³Åþxúª 8!èZ¸} æHD "Pf `0Š!K k¡©¡­¡©ßÐ’IRP*iÖ÷½²–P:Hdi?H@àÁ﬷Œ•”!¸èÖB BÈEž—| <xï(&Þ]ºÐbr]Ì4tÎÇã4M7›Ív»åœO&“¢(Ò4èÔ£”Œts!€÷ÞO&Sç¬Rºmj„q‘åóùœ"„°Új­õ×®\™M'B$ð•+‡œ‹£££,Ë‚Õf½^o"! D²\.…'''«Õú›ßüæx<þøãµ2£Ñèôô´^Õ«£å×ß~çþ½»ðóöí«³iÅ)òìÿŸ?šŒÇÎÙÍzuõêÕóÕ™Óf²ØáU&ª²WjÛtW¯ÌÊñþí¿›We†©àôÅë]óju!>{øÈœ¯ Á @IØßƒÃýË„ìÂÐCÀ)9d†'‰}‚Xš Á1çIžkëcƒVÞ¡tPšRÖëˆ1Fy˜í½ýæ›ßÿ+ß=:}QTüèìEV¦óÅŽÔê_þ«ÿs4šdEqv¾L²t¶3[¯/n\¿† `¤Ô˳¥7¾ßÖ“Z6ÊÅl¹Zs Ë§¯_‹k0߇n€¶oὯ]F PF`1í»\Õ‹ 8;Ý9 €`¯B(¦#íOD´ˆ)mò,OÒÌYËyŠ„€0!¤ ðió‰É!_Àh JAß8øk¿‚Ʀ @ -À{Xm¡‘”#˜îBßj‡Xm6ë'OG… cœ•Ežgã4„  ¡(ME’ðK&ÅùBQTT$°ñÁikŒqÚ[m(& yV–Y_0¡”Š4AÅY¤Ù""íº.INèÉÉÉóÏŸ©~¨òb2)¥¤ì‡aPúRtåœG×ZÓ#-½ô¯^½úè‡?zùòP€õv뜛L&ãÉDj•eYß÷‘MuÖŽF£Å|yG‰J)ÅÓZÇb¿ëº?þ!tåêA^¤wïÝ^ìîšà?{ú¤VÝÞÕýåv™W|µ9ß¶«[7¯ýÕ¿þ×´2›ºÍv¤±/_¾ž=ùœ#Vˆt\”e™wºgEâ) F§yÙÖ]!²‘(¿ùæ×ÿðí÷`q½ ÀR ¦SúÚ-w¾½‚WÇ0ÁÎ4Ü»Ár¹çµ2’à°º8këfZŽ‘ Y’ë·Û’Jvp¸ÿì‹ÏË"Ú( ÐÔuìB)O²4Ljå‚…„ó*+Š4Ãa@€B^; !R‘"¸t 9m¢Ó+âäè˜3–p‘çùt<œCF©Òºi›¶k3Î:­ž V×[JÉÎÎÆX[Óõ½6šZ¤ét2.ò¬®·ZÊX5*˪°ÎU£ªº®;=9žŒÇ;³é eß÷r¬±FŠižf{»û›Õf½ÚîþøG?¾sëÖîÎb}±,‹|>_<|ü|°&pwçÍ›ÒÖY•)­<С÷¿þßü_ÿáR’\ÞÜÎŒ‚ñ}/w¯®¶«É´² ENON_'ŒŒ¹(4:äe¡ð„eÛó‹9 ` T)œ¿†ÿò¿€Y?ý¼$px€ eÀ8ÈBœ6ÜÍçt/ûm½É³´LJg„€À%Ñ’Eš`ŒBðÁJiQäÕhäCB0Â!Jhžåyš'Œ]¯”6Z{ï|ð&rÕΚÁZcb Ñ¿”8<8€ã££Âîîn–$M][k»¾5FgY–çôrèº.ªQñ­àƒ6JHp—¯ ³4M«Ñ(ISÆÅîÞ^Ô¿´Ö7oÞ,òÜ;»\mÙwmG) ÁgYm"ñ EÕõöoüßN§YžXë¿xqÚËÐÛWwæÇ§¯³¢r6$b$ûúÕÙŸÿù„y–M¦ã¾i(&€P5%™HËTš Æ(ÆD@DZîpÈôz¹^ÿ‰êa³ÛAÁáÎ5¸¶ßx–Ç [ ²‡„ÃdÞÂæÚê6+°–‚êê†br¸Å§”уFeY1MÒ4Ày^(¥»¶o›îb½iº^k»^oc=/°Ø´N´ºô,…ð¥ÇÄ{oµiû®¥µTª“öm6›ÍjµŠí®iÚºÎqJ±_2m‘pÎÅõº®µrbÌø€h­›¦q)¥Rc&8"Ø8kœŒDšø´1>„~ꦂG£QtÝWU²®ëȈbŒ‹"ûðÃs‹Åâg?ûY!I©HØ'?øúÕ)£E×ZFS„Èz}qëöáýßüWo¿sß{Ý÷íéééh4q.œ-¿øâ ‚#œb2 f4ŸŒ %.KL*ª›WÓ›‡Wß¾ûM˜ç 0.àÞMøøÇ°ÙÀîHEàö-0††´Œó®öQÖ¹,Mwç{jÐ#B)‹ì ‚èÙO¤”!Ì9Ç9OD*Õ€bŒy绾÷ÖSFsMÝpÊa˜1æƒ7ZF´ÂÅè—â­RÖZŠ çœ`b­mêšs~xxˆ¬V+hP=Ýu]¯×kë\rPEYUUUEÁ9GcT+UCBè/sðLßãñø’ô>*½˜¥LÛuMÓîïïõ½‚×Û6öBF£JJɽ{÷îO~òc)U59çž<}´X̯^½&xÂY6 j½ÙH©‚¦i~ò“Ÿ\¹r¸ÝÖ0X/ûžvxx ²z5hc8ã½ð`tZ”C°³«‡ÿä+÷àõ 8;†·îÓܼiBà­{P0ŒoÔ5 ŒwGUQdIBD1"PðÁ;B@@8]×;¢ù(Ëò4ͽ÷¥Ä;'¥Â€9çÁC?ôÆï}œð¦µdo i’bB %cqÁ³4uÖ€†2/;‹¾íêív2kœsJª¡9„Š,ŸŒÇÆÙˆƒ"-Þ¶­’ÒZ›®•¢”FÚ:ÔÃ0c³,ƒB¥TÜÊeU­V›AJcìÎÎNÛöŒ±¶í#)¡”œL&œó‡?ýþ÷¿¿X윞Yç›¶.˲ïÕƒo3š(e–Ë÷ÞûÚv»Gû»ÿøû'uÝbÄf“9òÎX‡QÁ1!Iš!Œ´Rã€o†aðö¸^“ªü×»S`t ·®ÃPd040ŸÁµë¾þ”íšú¬‚¡È¡(n²°_V%¥¬kša0Î^Z§!š! gŒAC¯únRzB­µTƒ.„àŒÕZ‚IT×´RÎÅô6ç½õÎc—)IsÊc êÿ€8_U•‘JJ™%©RJõC^Úšõf³\.¥”ѳ<§”"mL4S§iZU•1ÚhHk]¬RŒ11›tè‡Âjµ’Rzïó²pÞ§YžgEžç›ÍÖû0 ƒÖ&v‰j­‡¡ÃŸŸt]÷î»ï´V÷î½ñ¯þÕÿµÝô?ÿùÃ;wî~ï{¿þ£>8_žjÓ?xpÿoÿí?X,öþâ?<>:—•2JYs~±4Æ0ÎÇ£„Ð’ AybHg­,ÅiÀ˜T zh89јX@8½’†,À)`ìûÚëœAÁc (8ðà#‡E‚à‘ÓÚ‚„0 €“+úÞ„Œ1xoZè)¢O„1F+…€1F.¬3>€GÎbe‚µÞ;çʼFªë£7'X;Ä¢¹=ºªË¼BD8Ó÷½ƒ½ Ñ´ùeófÔ#èäà=pÎ9¡!xÀx¹Zimʲìû~wwWÑ4 e¢¬ JySwZkƒ1îûÞ“eÙv»&„L§Ó?ú£?šÍfßùί}ðÿDÈ]¿~ýW¿õÝz;<|øh±Xܺu­,Ëݽ‰6êŸýìþÝw'ÓjÝÎÎŽEÁc„]^,E„áÅ<áééé9¥ÔèS¢¬%i²:8=ƒÍ”‚í)€²‚³ xúû× , ª|€,»¸­Uµ¼ˆ©žàÅ“Ëy8ñ˜Únë‹‹‹“ãÓès !Äù9}߇à³\ Ë0œ5c’&©ÖR©!Ä9ÃYk•Òåhœ¤Yš¤”Rð!øÙ½EY–²8ç{»»Jʦi¦óYÓµã<ÏÇãqQ!¥•RÊ!`B¢‡:Ë2!!±‡"}£µ‰I!„4ͤ”mÛF2èÖ­[eYnêmÓ´Iš‘œ®.6Þû$ÉŒ1B$›Í&M“ýýý“Ó£ƒƒƒ7®' ã+÷Ú¶{üègÙ“ÇÏ„ ·ßùêtV¾xùt±;­ªr³n;{>ûâéçÏ“,q!äU±Ý¬“$%߸z-Ið~<;g“$%„ŒgSïá'„‚²@(„Œ_†§·=lk÷¯CÛAÝ@’Áx í ¬ÂÆÊ"œŸžžžŸQʧ³¹w®ëºà}žeG¯!’,ó!´]—y×õIšcçD œó²—cÜ'‡>M’$“ɤkêª,)&˜àP’¤™HŒÖ1Î Î@ËD²\.eßÀÐ÷¿xôh¾37ƈ4¡„y>LвôÞ7uÓµ±†1–ÁÄ„””]× Á£¸è½'ä²sc쬧”†1qMJùäÉ|ßw±JJY×­s.B(Ë‚s-XY–îìÌŸ={öìÙçë~?Ëò¿÷ßýýßøÞoŸEyv~òλoÞ¸¹_7+!˜³þôôüþý7»NþÿâŸW³Ùéò|:ŸÖM#8sZ_»rxe_ =ö¡ÙÖÖØ„§ªÒ$ý!ã \€¢¸Tš¤$ðÅ ÷®”Ðv  ( ]Çÿ.œ3,¥”JFÉRãläÃãœs¥Ôv½îš&RkŒPð!¶ºsB‘ȇ¨¿JJ­£”ËÄ$K1%ñ“0Z·M9ªâuBhš†RZ–eÛ¶mW·m „"ÆØ|>çœß»wçæÍ›þg1þî¯ÿêçÏ~±ØHÕ$)ýéOZ×ýÝ;8+­AÈ“'ÒŒ|ÿ7¿+UYûÉdkÍóós­5Ä å˜P4xæ=ÖÆ¶-À°´©ÀH ˆ@tºys9 ZpØP¢,Í»aEÉ1J(ŽÜ!$DG£‘A©çLßÛ$Kù<Ï)ã,!$ÏóP!„ ”Km Ìf“Œ‹ùt*û6áÂÛŽ16.ʃÅnQmÛF•<ÁDîÛCŒ“,ÓÖj­+’GHÙ÷½ÖšRŠ)›ïK'c¼ÞÒ4­&ãÍf•¦iT3"Š_—e0ƬVë²,B£Ñ¨,ËW¯^9ï¯\¹Í颶­9Oó<ßÛÛ‹1&”ÒH/”eÉ9üø©1î{ßûîÏ~öÉÅê(Í0câ|Ùüå?zóÍ7¡Jê"¯Ú¶Õ¦;¼²3›Ž‡~(ËÒZ³Ýl¸õzõâÕó½ÝÝè¾ !xcsŒaìXðÀƒw€H̹ÊÂ0@ÀÀ8 i}w›ó¬È´ÑÚÊ)ãŒQÊ8³Î rÐJ.væ˜ƨTÂPVe€‚ßn7yYN'gDpš—Iì¡Æ˜"%% ´¿»;gÓ)A0n´Â˜ ‘ì.v!„¦®!­tS׃’Œ3ƼyêpÆ¥VZIE(-Ë2‰QY‘²VI9HI)ÝÙÙ9¼zeµºH³4¦6m¿Uˆåò"Šò{{{ÓéôÕ«WR UY ƒ´Ö¦IžeÙÞÞÁááa–§y‘-—KÎy]o1†HÖ¿xqtçöoýê7­UË‹“ƒÃ]c¤ÖöÅó×û×ö÷¯heò¢L3È.v›‹æÃ¿øQ‘eÎj,ç¬zÌHVÕ¨DÛàŒ3ÊjÆ9eì/C•sÀ '0ƒG€ #O Ïã´÷G “QÀ˜PÂãB„œ÷R }ßim&“É e×µƒ”¿t›‘,Ë‹¢ÈËœbÌ(¡3.BðR*„P‘—yQœŸžŒSÁ g†€ƒWR…€… ãu½í»ŽP¡o’&#ÁZÛõ}'ƒ0¦€Œ6QJI³%b×=ç<. ”$IQ\ˆóó3.xL¤0ÚFÇ BÈ9Ûµ¢×»ª*çÜjµŠïÎ¥twwÿÚµk1Ù"æ\­V+!¸Ör4aŒ9O6Û–R6›¯,>ÿü³›·®¶mÏyr±ÜŒªÙ×Þý†s^ëÁÝ›,InÞý§øÏÖyžfEFîTBMæ3šü •±6ɲÿ–3ð€x œg€S³ ˆÒÆ(«Ë©æ£ 8½«¥‡ †€‚®éšaèë\žgÛf«´ô! J«,KÓ"ßÝÛEb’wcBÐÆQÆŠ¼BœœPB­ÖÞZÕ÷eQ€÷]×S"B£tÛ¶Œ2BH×÷Œ1ƹTʃ EUn¶[ˆb‚Bˆ3_çPˆ9@‘ç"IB”±ˆwÚ®ÓZ9ï"™ðÿÇiq.!œ‹È°c¶Û­R*/rcÌbg—1–¥Åx<>==«ë-¥l³Ùx›2Æl¶+%MšUÃÐKÙ}íëož/¬Ó!øùlïÕËÓ³ÓÕí[oäy®t^ò¼u‡;7~öÑ'Ÿ|úó,K¤z-5h§ øùî\ä‰o¬ñÈó$ù!°8ì Œ%!!’ärZ:Åà, =€ƒ²Fë®­Û¦é»ívÛ4]ð¨ï¤V>EÂSïyD §˜Ìf³ÙdšeYW7Ã0H)=€0"Œ2‘pÎ#¸m¶-物1ÎY0ÚfYÁhŠ€RÊ­ñm7²¼D@ºn0Îwƒj›ÞX_–£ÅÞþÁÁ•¢çyÉiRG£É8Ë2„)£¢,F;óÝÑhÄ1Æxëãœä]”c N^¤˜€`NO¥ìš¦žLÆÎÙ®ë0Æ©H´T‰`Ƙӳ㋋‹¶­#ñÝ4Mšfu×.<Â<)²² gONN&“é;÷ÎNWŒ‰ØòâÅ‹G~¹~ï€Ñääètg1úÏþóÿô+÷ï.{Æ88ÏKïa³YuCçœEØ#Š1!Xz§Ài@èrÀ« à w@ˆ«ª€8 ÁÅ1Ê7Û¦ëºÈ:—¦y½íÀãQ9A˜ ½”J'Bt}¿¿¿O(M’„PJn›Fppàw'gç”òÝ…Rº©;9¤zµ3] @nß¼Ó5òl¹ÞÙ=`"i†¾W2-ò$Ïc„±4&60Æ ¡“z[c„1ÆÓÉDkå<¤Yž¥9ò>`L(eëõf6w]“g™àC0Ö†Aj£!œS„BÎ#õÞ6ÍV%UO0¡”zïÇÕh6½|ñ’sq±\"„ö»®=:=µÎw}ÏDJ)OÓ²Oó²œ-¦ÆJñ|gïoþþßù»÷ï×µº{÷ ­ôgŸ}‚Áýöo¿oëDpŠ©Têèäìí¯¿õOÿÙ¿øð£Í'{iZC+]Ý IDAT‚%ep:øpwŽ‘c„`DÎÏVª1ÐVc— -t€áöç°º€®…f ÁÐúŠüZÓ¼|õ*Ïs.Äóç/9KŒöÀ£´œåE!3Ö*­¬5˜Ø‘Ìeœo„$Í„H(‚%Ó"Éæ³θà¢Ù6x½ÚlÖ[e"Ì: Ì‚P€†A ‘ŽªQQT”ÐàÌ)MG”€€&”‰$áD„AJI)sÖQŒ¹àF)íl@ÄØ˜ÆÕ€óÆe­ !BcÈ!¥$I²<ϧ£QYyQfi’åÅb±3ߙǓÇOžfYZVcƘ¶Þ÷C¯Tv~"¥!”ûW¿CI²Ý´Ã GUuttT•)¥èíwÞÜl6@È;M’$ÿÁŸ8ÏûFj£ƒ·oÕÁþb\ú¾÷ŸrɃƜ'ÀŒ'0CÛ‚±—Ñ]i›-p„ŽÏα{Îù³³3L¨u6Þ ˜’¢È‹²‚+£­3!Æy–%„Ó(âÄ`—ùl.{Yo›T¤Zàøèxè%ÅTI•&™±Æ;ïœ×NaŒÁÖBÂ9£¼·Ze>©*.xð‚Ï“d<ªòLÐØ–©A8K3„°ÖÚxÿÿqõf?’féyßsöo-÷ªÌªêê®Þ×™!9Š4E-(Ù–!˜Ð…!H7–!¾ó…á ù?lØ0Ãl˶lR4hÁ 0Ô ErsfØÓ3ÓëtWu­¹Ddlß~V_œ¬ÄÀºdF!8ß9ç]ž÷÷tCg½“J£ÁH]7Æ9Pï½óχLíû!j$#4HÊDJ)E"„ˆF'娬ë†2Þ¶í|qÙ¶Ýéùyš¦IšB"º•Q†àÇ“R%r<ž¬×ën¿ðÎ;ï>|øèÑ£G'ÇÇ!„Íz5Ÿ_|ýWÅ9×u­T‚P'¥xå•×þôO¾ûøñ3F…6&MScõòr±»·wtt¤­£„çYñ£àA<”epÑì"A ÐÃîR (àœC‘_™:/ÃûÇ''eY>xð !xÎY’¤2•Y–¦y"M׆(gY–È4ñÞÇ‘»$Íڮߙí.ËùÙeª²¦n‡Á^.–Œ,ËŒ1œ³¡×Œ3<ãL*‘$Š NÙ*‰SJ€}r&xB­›-†\ íQ5pèhÎ&Å•Çå0`»EšâæM(‘ĉ$­µµfèûÉdìœÍ‹”2¯”ÊrE 1}드êAKN%㎪ŒÃÛõæ²ï{J ¤4Ú¬7ë®ë¥ÁC[S×u§õj½iûN*e¬ÕzˆúUcŒ1:0Æ…àãñdooO±ÝVËå²ï\ΫÕj´’²%ÈL[¯ÖMÓ¨$-²‚rJ àcBÈ;wî,Ë¢(öc_|þù0 û»»§§§ÃÐïìì¼ùæ›—— ¦®·„p!’ï~çûßùîw³l‰…]×ÅèÆÍ*‘œó?O$GÛÃzd¤‚sE’2”ù•·/cÐ{{ ‹f;oÏvœóI’–åH)ÉËòÔï½K²„Rg£yžs!(¥À9oŒu.b&9Bd[rÁÕzµíÛ>K³G7¬±VF)£¤iÛbT¬·ë,•”‚3†àƒu„‚J¥y’HƼµNk<BpÃЂB¨wAkk­ k\×÷›ªÙVµu^SŽÆÛjË‹8¦8#J™”r2™ !óÛmuyy¹ÙlÚ¦ëÚv»ÙxëÅíÛwe±A¹\®mŒ±„R@M”L¤"ÀÙÅéx<FÇÇÇC7cʲxï+ïÎ/.ž¯›†QÖv--Ê"QIÛv}7¨D .ÊÑx¶3ÓOW¨…»wï–EñÙgŸMÇç\×·o¼ñFY¦ÏN¿‹GžîÌö^zéå?ý“ï~ôñgMÛ*•:ë£*I.—sÿ?•9îŽÓ ô=a¡W{1†½)¶0†éRâð_|'Oޤºqt¤‡A ‘¥rµ\\.æ!MS¼sVUu×÷Á‡Éxr¹¸L³œRæ¬Óƒ'Dw L&¶«u]WçgRrgm–%''7‡¶-ŠÔš¡o«Ý™R2K’¶®)%ËËÅ£Ãà].Qr\y–¦JI)‹qi‚eTTU=O|€TI×õ·m]m·•ó€Tªª¶ÎY‚%`I’–Å(Ï Ò6³¾ï†¾¬u!€Jh`”2 kýË÷^*Ge–å‡GmÛ}úé§''·ONN²Ùnó¼àŒ·]Ã9ׯ(™ìïäYA໮Ͳ”RòWÿÊ_ùñß_-/ï½üRÛôßûî÷‹¼üú¯þòru^”9!|±Xž¡þäO¿÷ÎÛï^.בÜ}vö4ììL>Aðxv†/"/ðàÊî܉ÌJ†I‰Ñ‡‡`ì t9Ÿ#Mço§©”’pÁÛf3 £Íz¹:¿XèA—eYäy]7‹ù¢ëúj[åYN¬6]Óçÿ¯þÚÎlg¹¸Ï2ÆX–¤q>4MÓ,ÏçÎûÞšu]Õݰ­›ºi»ÎhëÊsþj? `„pFb“–ѨîµÖ! VáãjÌ÷9çR %•ÕC×¶ëõæã?Zo¶eQ4u»\/ƒ'ÚhF)ã"Ê'ÇãÉx2É’L¥‰÷Î#8‹ké½wÖ~ík_;;=ûâ‹/î½ô²sîüüÂ{xxóîÝW«•ࢪ¶Æš“['üÉÓggñ´ ÁeñŨÀ«¯àø>ù Û-´†J@÷xý ìï2¼|·oAxò䊄úY „C¯8oÚf³\r.$«íÐ Ä#ËŠ<Ë9Þù¦n)¨wžQ&¸°}§u;Œ§ã §ü¥ï={òd1Ÿ¿t÷…õåâÉãÇm½µ¦úVpšg™3vgo»Ù6Uc­K“¬ó¢ ..åx4æBVu³Z­7u=x×iÝ4½µAM§œ'iA0Ö ÁΨRB N9‰º ïƒ1&^{4.ãTi„eJ)“D))ú¶ãŒ-—+„²ívÛuÃÙù¹1®ë{)UYŽ’$ÉÒt2L¦S"¤ôÞ…”qˆnÐÝüââ7^ñî‹ÿê_}k:™F£ðñÇŸÜxã7WËuÝl¦³I?´ï¾÷Þjµüð£„P”Ðavvg «‘*L&X¯A€¾‡³p}‡{÷& ¯ÞExòë5’icà=œe ôØ­µ·nT‚sÝglª©#œR:ôºiÚ¶íô ÷w÷“Á…®mçOÓD9m%)¥/œÜª«íÞlVWÕz³¬7›¢Èò"³zœ“àBÓ4‹Å"“#Qªëº˜ž ¥¬s«Íf¹^¯«-Km}ÛŒsmœ”Š _Öêa¼w\P)¥„ PF¬5–QA ÀZ॔£Ñxgw2NÇ£Ñîl'ϲÅâR)E_,Ƹj³ÕÖ@„Te‘EIí‡A3 šPeyYšaÐ]aµ\Þºuëí7ß¾ÿÁ“ÇOONnSÊßÿó(•7ŽNî¾xg¾8sÀ£òäääý÷zqqÉﺾ•—ë¶kX‹×^Ãh„ºÆâ!À$ 6K†{·°Zâô”Dš@pèiŠÑ„ MžRº·ÝyVæ#ïC×ö”°ÙNY”Ö…®ꪱÞ3Ê èÑᑳÁhc̰;ß¾},7Z×ÛÚÝw­`t1¿PB*Á÷öv³T9«9g}ßum{9¿L’¤ÈsFéááaÔ’Bf³Ùt:]{®$aT;·.t]§Tj¬Ó„B%ùó1DKC@ðÞc­uNkm´‹£-‘úYç!xJIžg“Éd4.Ò4e”æ2éšv½YcbAGÇ™&¡LJ9žLCðÛª2Ö !¹œ3)…àÌã½KÙw-çâäæÉl6ûðgFã,ËïßPWÃh4~ç··Õ2Ã8ê¦~ùåW>ÿüÁ7¿ù‡‚'ÖºS)@vvPdè{œž"ÍÀ B4Eí%m1›aÐX­±Ú@HdÙ•Á}×…Ç¥”mÛ0Ê£­ç|L7ô„°Ñh4šL³,ú>MÓ8VÙdœÝ<:ÌóÌYç´îÚN¶Yo¬±ãј À½3n2 Â$cF÷wnŸŒŠ²­ëÙÎl½ZE¹Ýnwww“<«ªºí{©’¬ëƃZëû~H’ÄZ§”rÞÆHÄ9kŒ¶N[oŒ³Æk­±ÖZï]ˆ³Mq ãÊQJ)#qÊ5„Ð4õzµ>}vZ5Íh<  „5u3)¡Y‘Yc¹‡iš¸ʲœL'i–qÎ w¶mg}š¥Fûªª^{íµÏ>ý¬ëÚÃýƒó‹y§­JÒél êC–'u]¥yvr|çû_o:ÝñηuG(KŸàøiŽÓgàM[L '7a,T )ñô Ç·°·‡ý,èZƒ4ùK¯ÜÓFý ”†!Ër•dËÍfè­r:Uu}zzš)‚ëºJën½:/¬¾ÿù犋»·_xøå—;“|¸±ÃiKŒ Æ›npÚq"w÷ŽolV‹ñ¤œLFR𦩭)¥y^„æ‹ËÚ÷†KµÙ4Æúóó‹4Íwf;Þùà‘JzïÚ®M3•f‰’ f¬mû„ZœuÁmº¶¾x}×2FÓDI!­±}7­ƒ§B&>Ð~°$ºpQä#΄³ÖisóæQ]7„àåW_æ‚I%Ó4£„ xJˆ²(J•fÖA°ÄY÷øáãëoþͦª>ùøã¯}åÜÙ|±íšnh¾òµ¯XoºASÁ.Î/~ù«¿ò?þ³öìɳ"/¶† qÈ÷Á ¼ú´Ãh‚õÁh¡ª&%Îè;0Ù ”¡kA‚ÇlŠéœ¿HC×·Ö8BHÛvùåòüü"/KJy7èA÷]×ïµéµî‹"-‹|o6îÛ®,JÉe‘æœ2%Ô¨q¬1θȷ€‡JJ‘f2I…< º¾´M&e9bRR&Êñ¤ïÍz[=}vZ×M’¤‚ó<×R ÚDÄZ¥¶¦z¼óÞ¤I< ‘MH,Ð(¥’D…à£×(íH°ÞÀ8\ œ0J!i’J¹àu[¼öú«½î/—ËÉxÊe”QF)áÔId²Ùl¢ëØ‹wï~üáÏ–—ó¢9B>~¤í𕯾3·ÛgÌh­Íðw~çïüþïÿïe9žC¡÷èÉÊ1pqŽO?…ÐCDQ2Ãh¥ð  œyŠ)Æ#0úumgtïLÓµƒÑ t³ÙTu]–¥sf~~j­¸ŒÑ€Tªéx¼;Û‘\­—ÓÑX0¦‡á`oŸR:O)å”rP¥”3ëMÓ¶ëíf¶³ç<Ún!íЛI!ÎÜc:=ÔM@'Ó(þïº.Š}cb „xÞ1×úWS¢œSJ#E‘eYžçÑF)u{3Rˆ!@h  ñŸH…JDÔÍú`¥äãqYä) $ÊCŒÂ®P¥Œ!¬µ?øÁŽ¿þõ¯öÙgEQìíí%R=}üäã?²ÆÐ€I9!fЯ¼tïé£Ç=y )±ÉQ7h4_>År‹F#Ptåˆáµ{ØÝE–ƒ“ ši¥®Lµ‡}‡®)»¡í:c} ìæñMç=¥ìÖ­ÛUU¥©RJÊrT–e1šL&ž¿YmŽŽŽ²,çTN&3k½”²ªmŒ³ÆJ(gÁxë¬B^\.ûa[ÕL²ÁØñxB÷L¨åjݶmÓ´qÂomLÔ«QJ¹àišRJB]ßcBðZë>BâqÖÅõޤL!DT@]sMýµQ$cÞ;B ‰5žJ pκâÚ ]–f;;3%U^”mÝQÎygó”Òà\–çÕfM^¼{÷k_ýê}û[ ìøÖ m?<¼ÿEšˆ×^}¹Ú®Ò$! ‰PÞc»iôýA$Ðó%„@Ûàé)?%Ð&%‡sŒÁhô-´Æé3Ð ÉQm±Yƒ”jâ#ƒ·Æ;0ºwppóÖ1çtºÙtœg™¢Ìòƒ½½Ãýý2Ëá ¸ºqx$¹ºqxs6›E©Ùf³©ªª×ƒ Þ‡@¥œ‚®ï{ë<~üìô|¾Z?zvª=™ÎöŒ Ëõ¦×Öê| ‚ãI^Ž g‘­¿ñ˜óÅŸ–_Y´†G ¯‰˜ôù+6;£pûê(&W(£(6´V;gµéû¡kû¦jëm³mÛ¦®·ýÐe&¥Øn×>¸ý”@ÙÕßå‚*Î2%#%R¾õ­oeeñî{ï}ðÁ³ÉøÖñ ÷ðÁ—ºh «Å’Sº¼¼¤ ÿÙ?úG8Ü#(R‚ÙLÁT-Z$ÇÎ>(ÇÅ%ÃþÀÀÖ—WI=#H$ºpfcì,Ö:FY9%*éš¶kÛãããDH«užfe‘ .%zèóDÍÆScýþÞ¥¼ëº¶íNÏΚ¶óÞ[kkœw`Ôz×›Á#€ â|  QIåœã‚oÖ[kͯ¿~çÖ?ûÁÓ¼,Šr¹˜Ÿ==9¾yïÞ‹JЦnÒ$¯ªú•ý#œÍñÿþý€ñ{»ø‡ÿ~óß@µÁG?ƒ `Ë%²Œá¥[P’ƒt-àKd±F#8Gµ…÷™¶B&¡n›½Ùn–¦‹ùÅÎlv°»ËuÖ–E¡¤Ôƒ¦„R€’¨¤Úl¥¬óZÛó‹Åv[ ÃàŒ5M×j3€œ1vµ^o« „zBÊñx4™Õmcî½üj׋¹1¾®[mmUµ^=gT(wž1†2Ê9oššRÊ…H’D®µvÁgi*…œã¹¿.}î çý¯©}W;•4diô—œ1.e ðEQ¨T&*‹q9ʲ¤ÈsJ©wpÁ;çcqÖ¸àAg¢mÛñ¨º¾È³$MŽOŽ«ªn›!ËÒ"ËVËÅééÓã›7²4¡„ŽÊÑj¹þï³o¿ƒý'˜ÏÑ6à ãoà_à wqúëKÔk(‰2gø¥÷ $´F×A0P ÉáÊ„Öàr@ê®ßÉ ÆXSUÇ7‹,??;{éÎ]NJÈh4bŒ¶mKa”ÀTU Ê)å\ˆ³³ó@I×÷„RãLÓµÆj0J(±Þ_\P!F£±J²Û·ïä£òé³3!ÆÅ³ÓÓõj»³³Ã¥4ƬWgM$9Ëç\öø¤K)‡¡—R )•R„ ï{ãlš$R$œ±8Ëi_qÙ®™ñ¼ûÒG(”’œ3ï=Aˆ ŸuŽQ’ç9ç‘GÓSBÊ"ç”eyáBð‚s˜wÞ‡hóˆaHE(åœÖU¼WRŸœžíîM˲øþ÷¾;¿¸R¾óλËåò×…Ärîâ­·ñÎÛøã?Æù~ø>nÝÆï|;'¸ÿ)V ìïàüÃn ç $²‰Äf‚+«Ñ"V+ô=¬…§ë$[﬿sëx64u•H¡‡¾ÌsÉØxT½VBUM3*Ê8³Ùõúb1ßn+c\šf¤×Z(H°Þ»à†aRÜ<9V‰Œ;;½('“£7g;»·o¿@ùòË/Û®£Œûà9@­z¥q¨Ø¹<Ï¥’Ã0h=\^^ί u,MS©B°ÆgiÚ÷=c,(Ó4•R>÷›q×SÞ{ç,eWàèh±[ HÒ„q¦¤ÊÝÙN´­/ò²iû$I˲8¿8·.a::g)¥ƒîÓ$Ð6õ|±øþ÷¾÷ïÿƒ0Oÿùÿò?giòïü­ûáÃôGßBþ…_ûõwæ (…ÁàÑ#Ü»‹ý}üÿ'Çxú âÝo øýßÅãH&†»7A<‡wèZ0 ) 9A! c½Eמܸytppvzº¾\Þ:9 ÖE<¤"hg7› A)Ñvý •æÓÉL¦IÓ´«ÍZ[Ã5Þ£)#ŒÂ!ôrµ¡”ާÓW^yewo¯išõz³Z­ø•}u$RDò URLÆ%#Ô>÷!€@QU[!Äh<ÇR ï=¡4KÒ¾Ó‚‹èïÉ‹ËvúÇ 2zf+¥²<òÊåëïÎÈ ØßßßíÄ^M–$ãÑ(UÉt6S*qÖÔUÝwƒõžqÎ9ﺞ1–&i!x'„hêz<ž¼òò+ÃÐ?~üð•W^QIòóŸÿœs‘¦É¼þ:òM²Dž¡,ðéGxð*Áz?àñCüä}$YŠ¢`xó.à=§WÄ ! à°i &Æ^=8̵Y¯ Þ˜ífc†^†sn¼ïû¾ªB @„L„”ƺºéê¦ÕfRÀ{§”̲”3æChÚ./F{ûû»»»———~øa]7‘Xé½Á3Je‚³4IŠ¢(ŠÜ º×yŽ]ç‚gYæœÍ²¬(‹$I"à0*¹ÐƒM“$zÏEÂW7n}&®]cR ©dßwƒÑ\ˆ$MAHq.Æ£ñx4VJE#œ"Í¥B&„±B’f½¬smÛ…­M’$ÿ'xŒÑó‹ù[o¾uçÎoû[“Éäk_ûêÓ§O<üò¿X­ño (pq¢Ç¹L IDAT"Ãv‹T øƒ?ÀÞºÕ‹9Ø‚ìí3Ü»…àA(A¢à,úJ1m`Ý•Ùö`Á}i2qF7ëm¦Ôúrµº¼LÓTJÕé¡ëzc-å,Ͳ¶ëÒ"MÒ\]·­±6ÚLo6ë4M ¥Îk)eš&œ3Bišåœ‹¸¥NOO¿øâ k]’$ÛíÆM•RJ%¸`R(%¹Ó1{·qˆ÷Ê,óñxµcÿRê‚7ƒî»!KÓ8„Bèû>îÝ_4ÊŠ !„q š¦¶ÎÆó6æ*”ÒñhTÕµ1¦ÌrÅ…·ŽB)4Ä}9Ú¦5.Ôu#„ Œ±8‰ˆ„RˆÓ³³ñxôî;ï}üñG§§§¿ôK_K³ü;ßù€ãcÔ5vfÐ-nàÝ·qÿ>üTÂ; òo½Â0ž2ܘ€xNA Ú¡°ƒ¹Òs‰ÞÂ{pñ`:Û»¼<}ü´Ì²É¤$»»{Œò³óóA™$y9&ŒÔM]”#&Ķª†Á&iÆ…Œî†®( A™³šQ*£”²ñt:è~[m¸`´ë:çlUm£G#£LpN#y ”n×Jcð ¥TY–Œ³®ëbj®Rug­mû®ïºí¦N“4®Dœ5 å5²Ï]K"ä¸i­ ¥â£G‡xç]ü·ÿ½C–£ªá,ú§ç8_0¼z EŽT]§ze0L`g»{HP ¡PN0ÛAš`±8§ì¯Þ½›*©‡AI¥ÖÚ´}?ÛÙuÞwZ¯7cM7 ]ß.d Ѓ±ÎÞ8:”Rç QécŒ¶ÃÁ›ÍfµZ‚Ãýñ¨,ËB.(ŒE}>A uÝDC…¸Î9m´s®mJ©ó¾ëº¶m†aŒ6Z .cD#JiÄ{Å{ô:&º^`Æ)£œPf­´qλ¬qÎ8J íêŽrï¥{'7OÚ¦5Án«Š1.U2›íZçúAo«Z¥©÷®ÈŠ®ë„äÚhïƒàœÛíö­wÞfŒ½ÿþûÿáÉ Êîc½DžáÕ—á-ìopú ûGøÝÿï#]AKæ p‰é‡ÊÁ8 7Á`‘¦ð-(Åd‚]Tœ‡6Á i‚{÷ŽŠìþ§?÷Öùä)c"+òýÃñhöð链×Fk)e´K’”4ÛJ)uãÆ Jé0 uWS@ê´ÑÞË4 !4u§µžMw§³q–ä§§O•J‰„0ÎHðÄ9m¬í¡ Eݵ„X×¶Ö2Á”Rq@~[W]×QÊò<Ú6¾‰:ü¦i¼÷±:Sûë¤"†Eñ¦$$và‰õ.Ö"âJkkó$ÝnÖ)Wå(Ÿäåx\¸¶«Õ(mš&xâ½/ŠÞåyÚ ½âÜ3Ωª ç4‚ò´tÃðàË/.ÎÎ~ù—éÛßþ6ª ¿ñëø³ïc¾ƒ>Á¶ÂdU"S¸ÿsð¿ó·ñ³ÏÀv÷1ÊñÁ0]ÇðòËHrã±Þ P”`FCœžA)8çÑޣȱ^÷éÙ=©6U;_®¦»{ƒ±R¥uÓ\^^ÁêAw†’ÊDPš¨$Id–ª['ÇZggÏF£Q.æËr4Mwê®+òñééißk%U–ä“É„z¹XŒÊñrqÙwz6žäiQmªåbÙvñŽK‚Ȭâ4d]×7Më]H“4K3x(aJ©Aë€À8RJ%#ôÂ:×´m? >⃠Ä9»­ÖJIï£DIQm+%8!‚mVC–²ã7^|ñ®†´È¶Û*KSïlßë—^z) \[WÖZç}–åUÛ$Yz~±ØÝYÝnÖ—á·û¯ý›öCl+üÆo@[¬6øÉ‡øÙÇP&»˜ìáÁ3t¿ùñû¿ oðΛ¸û¾øºÅtÌ0ÛÁ0 ”@¨ŒaµÂÙ9¬fÓ+èP 8ØGÓ Ú Éáý§¾EH×[&T,6MB(³lèúà¼2KÓT)Áip./Á¯×ëØL—2=88”iJ@ë¶6ÆÞ½{÷ÕW_óÎ]\Ì·›MÛvE–„ꬷÚ8c‚ómÛDß„˜ÉÅ6Óx<ŽÛåºÇçÂm~][-b„b¥4îÂ+Í™sÞ[!D´C­›èMËbBbÍH5›/½øân'I²­¶mÛkea$Ïò~ÓfX.×λ®í)£Ý0l·[&„ÕZ2’¦ÉÙéùß:8À+¯á;‚ãÛ°XáÁ—hÔ kœ]à£Oq~ßú‹øô#,Îðò‹`c¨7 Ó¼%ð}‡º‚÷` ã)övÁ9¸„@a^¸‹å ë5öà=ÖÛ‡R½6ƒÕ&œ²,›ŒF]Óêa’g©Êó4×v•¶zz©„÷ŽsBȲ"MÓ¡Ó„ËåeÓ4;ÓY–f§§§mÛΦӢ(êªB0Bû¾·Î©Ø^w®îZ©ç\J™$I|SED1ÇÐãºx¯_\¤xxÆøåºØý K蜵„B)…àgI’Äõ.‹|wgçÞK/ݾuëöÉ-=è¾´Žw>™L­wC¯³<O&U];(cFŒó®ënß¾ãŒ6}[ùýø ÿû·ñãŸàˇø•_ÁÓS|ô–Kœ_`[a¹ÄjË9¶45.çxá¶ `è±¹d8˜Á‡«%´Ö"x¤0Ãx =<`=ÚEËKX‹ñ]¦†³®[­VŒÐ4UιTÊDª(;KÓD*ž$ªº¾o¥àÖÙ³³SJY’&‘R:竪Nótg¶ãƒ' ›Íf>ŸÏf³Ãƒƒˆˆ•RrÆ®û|Þù®ïwBÊë>_,²ÄR×u]×ÅTáºøCʪÄÖnü@´Í¼Vs?×t{Àgiª¤rÞïÙs?>ÁYšeyžWÕÖy¿˜ÏµÑ]ßÇnçÂè˜~PB9e¬múÕjÉ…ˆAk½³»×5 gÁÿ@JÔ-^~ y†üŸã­·pxˆ°Ù¢ïÁ8VkPЦÁÃØcwo”ÚÁ1ÜØƒ3i‚Ù ûûðÖbÐX®°­¡ ¸@DKVl7Ú`³Eúva?¿œ§‘¾æ}4?Š Á¬ m[„ã“ã²(>þäãè|\Èò‚R6 z<3ƶՖJ©¢(ŽŽŽò,[.—;»» $„¤i’¥>„¡ïk@ "öü¢åè0 ±ë™ÁqcYkãŠFƒÑëW A¯Üë¼âù3áʲKΙ±ºëïL9.ËQá¼—Bt}ÿþý®k»®c‚{笵©Jš¶#„äEi¬mÚþæññЛ³óóñdÚÚ…È ÞZÉøµ^agó9Š¿ý×ñ§ßEQàõ7ñóÏqÿKƒ4C;`ÿ“ þí8{­Ñnñ£à‹ÏøÕp¡`„‚P¤)”‚J1Ÿc½Ö e†ÝœŸ!8…Õ%:ñ}$i”:`ÌèR0ïŒR"47M⺮Íòäèh/òλoOâ=’$A ιj½é^.—‰TÑ ¦iš®iŠ¢F‘o«”]×5 [Lp­uü¹nt=]ØxZ:çb}äz·ÅZZ„DÅÒösûBðp>K™$Óét±¼\­Vñi`œ­ªjSU”Òé4毜2ï}Õ´Y– !ªªê†ÕíÛ·÷ç—‹¼,XT–µmË9ÿ/9…úÛ-=„÷ø‡ÿþð[·oAJtà 2Åd‚<Ãü ììÁ X]†·_FªÀ9H€¶h[PŽb„'ÐÛ ËÆ3”ò°°Á£ëA)Ò M ÎAé*Ïv­+²|wwgèmº¦ÙR£{»SÊIš&·ïÜÒƒžŽ§RH•¤R*Á¤µv½\÷C?•”QÃÒ¶íéééùÅ…óžMÓXg¹”ÑhÑF(MÒ4Þ…× (ÚBÂØˆˆ–kqÙ®—çºl}]މ?CËìÊ(x¯“Dq)f;3ÊØv»õÁwÃÐõºi»ÕrC)1ÚXç¶eYY> ôþÁ¾Gèû¡íz!UQ”Ö¹åjB0Öçê¦ùï¬C^Ö¢nÐ4` Ç'øÖ·ñò+Ÿß‡ÈK0 ÆÑ4øüSô ´Æv‹ÕÏžJ0¼zÎ!ŒC*0.`-@1_ 7°{{HLÅÑ÷身Ç{¬ÖpR!Mç]so<ÚßÝY//óstQdÓéäÅ_LR%¥ÜßÛ_\Ο={Ö4Mš¤ŒKï¼ÖFF%*8?™N"¶5q%¶›÷>MÓ¸;™œ1˜qö:ÈÇ(sºjþ‚ð"þêúؼ–BÅÍßXëA| 8£” lë*uÝ,–+.… Î9=ØÝ½„€zçö3 —— ܼq³k;Ê)ç’LgS%Õ£G²¼ „:çþ)cMÎ ² Û-ðâKhüðG >ý9ÊŽN°·4…søñA êi®Ã¶B9BÓ2¼ó./1š\­ßv‹Ac»ÅÙ—ØÝ… ÀÅSŒKPc¤è¬.1ž@k˜Rb<ú2øc«ÓDYknÞ»÷ÒñÉÍh ÙÇþìÁýÕ¶úü‹û”²¾íó¢|øðÑîÎ^š¥ñ€ÒÏÙˑ̕$I¤RÚ˜ùbqzvV5µ÷>\ãUw5bïýµÉˆn“€sž]étIüLt`‹‚ü‚å“"„`Œ– ç‚9ç‹E¯•)J¨ÂK)¥ CÔ'P6›Î&“ñùÓgœ±½ƒ=g]Ý´”³¼m·Û¢,nœž )=üg0!}ÑøŠþÚ4xò¯½Š_ýþåÿ‰G1ž"Éào`ºƒ,ÅÓ'à”£`8G7 ŽÕ Z_M­Y®ãÐI†ÉØl°1PÄ£­`À(gh+h²ÀC0Š®o—KFi–ªqQæy^mëŸüôƒÓÓSƘ’s1™ŒûN'I¼ßo€³ÆSF6UµZ]“³,‹ý?ÿä“Oæó‹Ùt'ZåDtDš¦Þû¡×]Ó08×[“dipÎjí)½>÷œs*M¬µÆYëóN[Mâ1x-D‹ÜûÔÄ çÅ&Áˆœƒ³ 'GØlÁ9ú>2$HS¤)B@× ` GBÁ ÒRAkxJáTнP‚§O0™ È\änÌñÅâgþìâb~çÎ7ßz;IRkÝx<¡Œ ƒF@ßRJ.xšf]ßm®4›!X皦†°çÂ$„_¬§„ªm¯ÀÈú½®yFäëõsÁx¢FÉa/¼ÁÛ«þpHR¨ gè:ìîa9Ç£'Ð=n¿€7ßû×yöŸRj­ÌÞîA $~§Äº®ñÞwÝÐTaWtscŒL!DÛwÖÚºm®˜¢I’¦iüÒ cŨäŒB®I¤ñüŒèߘïG‰~\ªyâ¹ñÿ÷Š»0º&„À¨‡ÓÞùapÎ1&´Õ±VÀ9gžƒ8Oþ¿¦Îäײë:ï¿Ýîv¯¯W {‘&)‘¢"Y²e0"$ù‚ F& 2Îã Ç ‚Dz¢„Â(Þ—¢`¾¢k'~ì1o§!ÄÕœèkrMa-Àb ‚¶CH|àù9×ן°ÞPVìóö{¼ùƒÿ»/†ÿ2HÁù3;²\N‚]ß!Êà=¹aVьÔ’ž=çk_çø„ÿù¿X,y÷]þÕ÷øì!?ÿŒlAU’b˜¶3å™âõÛÜ:âñ#|Š“Ø_dÈ«%~ kY-¹¸æ­w ðÅ#Îòø Ý@Û1ZÞy‡['Ìf¼öÏŸóä }Ϧ¦iGšæ³ºy*â[³y^Të]}u³–&¬ï½“Æ ÞG¡g»aØÕõj×ì‚»Ý& Íîï9;¥Š\ïÖ7a²,@ JÉC×6»Ý¶ïZïìjµgÇÔôÑÙ1MQ×]·­k;ŽZ›¼Ì6R’))ñÁšPå¦Ê ôv‚£ƒÃ±‚™6ëëM¦´rê÷V2J•샿^ßde>_,æËÅþááÇ¿[-ЊðŽàh|à½÷¨k¢À9ˆD/ö™h:®·ñÆ›¬7\\ÐwhÁõ–¿ÿ%'¯quIYáÝ´ši©¸wBðtUÅ|Až±ÛqrÄ­c32³H˜Íyü”Ñqö9gŸóð)—5ËŠW_åõ7¸u¬ä䩨k´ææiØÕ ÆF÷ĹS©«Õ®nÒÒ¦ˆRYë"ÔM+´J«Š›zAI±Z­æ³RkÝ5;­d•çÁ9BÐìê~˜XÍ$E‘ì³_†D»¤³îûat1m²Ìh!E Á9+‚G)„Hb Áûq´c>¯ò">:ëÊ¢œ¥Ú³ÛÕÁûˆ”JI!}>D$y–gYž—Å3Š ®¦Þ"Ö1ô¬öÙÛ£ip“M®R¡4”Fj 8¿à‡†VüíO( ΟñÉÏzGŒÎJ£3Ö×k¹¸À:ŽF¼eo½=ªŠÍ COp÷<Îó Œáõ7Xmxø[wøÖw( ..¸ÿ)Zã=‹ßûë-çÑÓIÙ²–®Ã»Ÿjýe©”ŠÓšè½o_ì|͵‘J|p^"ʲ(Š¢,ÿ@U{”ÒÀ`­RJhùe™)mBKMI /V¬‡(œ÷©ð唡HX^ ´È´QJJBÁ[q"DåöfmŒ)¹D”yqss}ˆ¥E‘eÁ…D|—y±ÛíV‹ù—GhMU!ÐôD‰1ÆÐu”%.â=Æà|Êω¨CÊɆë׿淿åûßç¯ÿ†« êOžÏž£˜vQÔ[ªŒfT|ëiÃ=Ç' ÙÛCk–K²!(gì#5›-Ï.xãu¾ÿ}~ðîÞÄäñcn® aä+_á½÷8=åä„Ë+.o¸¹a»¥ïé{úŽÑú17ÛíiQ”e™ø—¦m¥”Y–k­#±ï{gÖº(rcŒ’"„`Ç!Ïó<ËƱm;©ô—kÑÄŸ%ýïËóž!„ˆÐY&ÓÊõèc–Ež+)ŒÉ²Ìäy–gy–™Ì磳Õ|ÖÔuYUQÝhG{q~¾¨æJ©"Ë«¼ >tm' ,‹ß.çÊŠ2Çy’m¢1AÛR”´=ÕœY­°Žõ†¢Ä"“º— Ôqd6c»áé3þê/YoùäNO¹Ùñ膧Ï&W’—ísë–â;ߦ,±¥pçÛ†¢œF»ž¶ãá#~þ þí¿ã»ßc6çþo9;ãà€W^¥®‘†“[ÜÜ`-‹ýÀzÍÕ ¿ý„Ñ¡5y†R$nwX.±ör>&Äl³©ëÚ:7›ÍfU嬇ÑY;«Šª,æ³™V ïÒFg‹ùR)c̲l´v>[,÷ö¢x9`ìv»—µè˶ŒäÞágÿD–³wHïh;Ê’è™Í¹w—ï~“¾¦øð}ªmOÓb GÇ\]ÓœŸó›O¸ÿ »&Ãä¼ö*®¯z„`h{†ßŸ1›a-ÖRÍXßðñÇœ±k’Ì 5yÎlÆ|FYrëR2›1 ›í¶ƒÃ¢Hv®©=¾,Ë;·OÓ>úªª‚weY–e9›Í’1OUUÞstë4ÁÄ„´Oü‹x1±6§¥fóõfbPB*¥¤„èÇ1ÓúE¥’RJ©µ‘ZÖi­ÜèÆ~.Ä%²0Æ[/@FCüÔºAQ1+é:Š£¹}›ªäÖ-Æ‘aàø˜¢bp¸‚ý}öð–-!‚1S’uÌç ÿîwxöŒŸñµ¯qï‡9íÀ›oñã¿â[_çp©,³9J1Ž› ççxO ô#YÁÝWøàkäÛ5óìEÁèøäÊ_ù ‹ÖrrÊz= s³Úã“ß1ôÓœÔrA–a Z#Y6 ÜTÆ< á™_õ–èWËål6;=>Iòo–6Á*•N•óQHUÞ»Ý.…-±-/×û¤Ù¥tþ’Žèœíc”!‚ÒR!…ÂÇäA#¥”H>"BˆÎ‰»ºñÞk¡moe”UUõýi3„Qký™”xL“ê—a ×d¯¼BÛrrʶÆz²‚v`¹¤ D¸¹áà€ƒžž=)‚)ŠH„Ì àä˜O?áü|•Á¢àíÛ¼ý*Ÿ<ãÓ§¼þßþÏÏxü;Í“' #çÏ9¿`·›Ða™óÊ+¼¿O,fljÎ?åì÷ܽÃú†a@™‰MÍ3ÞygzÖº–ëkxõ"¼þ›Jq|ŒÖ\\pu•n-¶[¤dÉsæsv;¶Û_Éx< ¹6³¢”R¦†O)åb±ðÞ§š%IQ †çyѶm’™16 CJŠ/1{JŠiÏ[QT.ø|°>™«­71F!O",Ä®¼÷‡‡Çv‹,¯Šr»ÞJTŸ¥ÍH£EH´AJ¬ãö-ö÷Y¯©kž>eµb·#Ö;¶5«Ëu —À wIDATç9?çðe!ž˜ž 2 ,—xÏnÇ0ðùçÜ»Ç;ô[–w98 Ÿsr—Å-¤ççÿÈo~®8\ñàÖâ=çìóÎñî{ܽ7QnCϳçÌÌÌ*ÊŠ>¤œQ”dZ!5Örþœ¶¡éxú”a +G®®‚²¤®Ùni[./i[¶ÛÉȯ,'y¹ÄèVÉg«åŸ¼ro>Ÿìï-æ³ÌèëëµÒZwuu=޶ªfY–ÏfóºmÚ¶Mg1Ýœ!„¾^N'¥5M–e"J*)ÑïÓŠË¢,”Ñ" g}Q(!¤1¥ƒv´Ëù<ÓYßvFéûY~ÖÒ÷hÍÞ c‚åœý}ŽqkÙµ<¿ iq]M5È2òœÍ†‹ îÝÅ9œ›F–c->R–øˆT”¬–ì-yï]>þïs|ÈÏî3 tA•sï9*îžppÀ7¿Éû_e±dµOfè{nn8;ãé6[ê-Îqz¬¢ë°–ó ¼£,(K†«K>äòï'›ïË«IÐ×z¢þüŽÝnºHC˜.Ò¾g·£ë:öWä9¿<8øgc~ s.!„¤ÁÇOž4Mã½O‘HófÖŽ)A¾œÃNƘ4 £Ô—lLBð€ˆ¼(‚Têú>xï”Zë_Dέ½ð)‘ `´xŸÜ±G¤$Ï!ruEŒ # ù*M]“ç8G]ãÜôŸ‹‚LS–[&%Q"JÑ´„€’ô ›57WyçuÎ~Ã/ÅÞ=¬áÿ_.žóÿ’½“4Ð2’Êk¹¼X.É Û R2[²X2ŸcI¦˜ÍÈr”bw…”¬V´/<‡º‘ÝŽÓ;ä9v8ØÇ®¯Ùn¨fS6 kyð;Šlòø -}ÏþÖþ0„,˴΀䅖ÞK"5‘VUõrR)ÉL)ðÑÇJ¡øR€“/Œ"BðÑ -´ñ,ÏI»½£˜¢•Ä8-ŠLˆ€ŒM™#aèè:ŒÁEÆ©pÐŒ?²Ý²¨( ˆ<~Èé)AÝ¡Zc=R±ZóŠÂpsÅïŒâßü{®Îø›ÿAö6j†Êø‡Dü>¸£¸{Âõ%7kš†¾g>goY,È2€Åcp#º–‹K´Æ9¤À9Ú–ÙŒÅ|¢” ˶¡88 (è:ºŽzÇhY,@ õ„bĤ\b)r¸uJ‘O³yÎè¨ë³¶ù¹‡‘ck“ÍHÚóœíTȤ&U¤/#ô²ÇpÂø/ðÆËØO~lR¦? aãM„,‡8Íy¥% z'­4„©ÒÖš²dŸ®ŽtNl¶¸8}5¥h[š Y†÷ #ÁO•üzK©p“û$u=•vÄ \]ðáW¹w›Ÿþ·¤lÎ>ãÇÿš*Ót 1 UAYqtD×óôñ4hXö6ž<h[îÜa¾`³æêŠqà£oÐÔ\_ryIYQ”ÐÓwÌËÉ&úò¥Ð£)r¬KìòôÝR8… xʜł©¬›$1¡GÚ@©Ÿ…€óO½9"õU Z„Þ?/…ˆ=Â"!L& Úåt-J¥Ó‡çxò„ù $Ù€Éé{ …tÏ/”˜\”D)Ö׬V¨ -§EÊ T8ËÐce‰|~ÆO~Âÿ‚×ÞâóÈåÿðS†ž~Y)N÷89á7¸uÂhi<`·{ÑMšcÌt®­§ÈY,xÿ½ H45ÞѶ8;ä10ôôÇ§Ô çç «ûûS-š¾°µÄHž³X0ŸS•ÏÁ·ï°·GžSVT3´F&Ê1N¿¦Ö/žß¨¡†FˆVˆN©®ï[¥)«iÐWJ)×Ð*Ù Ñ+ÕiÝh]kÝÝkÝ¥ ”~¾Är 1­Æ^ë^k¤Dk´˜V夣“ö2„€Öh21æq–Q–,æTÕô™SýR¤Ë6Š’²ÀEê“ÑtäýHži]zÜ¥À{– š†åŠãcFO?$C.œŸC³#Æ W—¼ñ*ü1ÿïsŠ=>ü:›'<úg>|Mñ8ØçÉ>û”ºæèˆ×_cè¹8§ÞrtÀjI[#eÎÁ>¬ã‹Ï¹¾¢izö÷É ]ÃõÍ©rf%‡ìÖ4M2] ,1†º¦(QIç Œ-] #¹sJŒ8ËèG|`t´×78G×Ñ4x‡’XK»›¾§1Ó£–êÛ¦ùC~M…R ­m¦øy?]©HrºÓiK !FŠ “MMÒòŵ™8Ïa ë¦ì8Z¬CJ2C€Íš›Êg©*lÏ8-ÀØÑ÷T%«™Fk®®Ùßçô6uCÝ ÎQÄk™Ï‰‘ù‚ó 2ßü­ãúšõr`aT|ëmNO1Š“ã‰ žGтՒÓcöh7¸‘£[ô³ÝpuEß±Y³\prÈÕa$‡ú†RóÚ-–sê »5c–˜ ©@ Ç·hš-Ñ"·ö¹wÄjFY²\0Ÿ#$}ÏÍvšw|vŽut=m‹‘ÌKÜÈõ9''H%!àF¢§0¸­PbÚå§ÕäÊâ¡( ‘,GJ|`6G¦Ú2 !3H³“¾Vd8Ë8@ê* ì¶\\ $.ƒeÛÐD…ˆH³£k‘@d^"2`º-CKf˜U€¢Áݻ슂ӆg`4Á!Ysè‚(PO/¹û }Èßÿ-Ý «©øî4R°Z  ç\^!$›í”H3Ãæšësv["\_ÄŽt-Þ%¡©8zQ›¤×„1°D¦Hlj‚i)NVLç&åHzRÇ´B*œe±€ÒSÙb4!NìD:ñZOgË:úq@©©Hÿbć?dâ¶Ã;ªÙäç{û6×WĈ Èr—Ðg‘±ÇhÍŸþˆßܧkSG„âÝ×ñA1ŒHÅvG]s}3ÉCÖâÛ rƒQ4 Ë9Z’܈³¨ˆï‘ÜÊœ¬b±¤(p ~ˆØžå;p¸G°,+¼E ž?¥œa77¬× X,19!à-Ù ø/%³Š"'¡C‘åÓÚ·ŠSCjb˜úeÓМ^]V乡šá=Yµt#.€D*¤F*Š )&1/U=éAQzB ÃHÛáR‘gÌ*¬§ë->A„¢¤i;ú‘Ñ#‹%Æã4’åìê Øô#ý€1ÓI- D./ùÑŠ_ýïY.§GSÿr¢DçìjB˜¾Ã0°ÝÐuG³Ã$kcÅrIžáÝTòy†­‰Ð&¬“žM‘˜@Œ†7_!Xf9bGÚ¡ØîX¯éz²œÕb’ß”¢Èñž®!8ò*F¢$ËÈ2ÓY´vºrÓ™¬« 7rêo/rŠ)ж%Ëé õ!©m:í{L7½¿Éˆˆ2RŠºaèÝÔ):-mu é[ꆾÃ%¨§‘éœÊjb©Dd±¤,YoÒÛOßB„¢ï˜t-ë5{û|ûù??!3÷ÿþNœ•”hˆIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/matrix_sfcgal_required.png0000644000000000000000000000311212143462214023763 0ustar rootroot‰PNG  IHDRàw=øbKGDùC» pHYsHHFÉk> vpAgxL¥¦NIDATHÇÅ•ÝoœGÆ3óî‡w½Ž×ÆMš4ýH‹±\É´‰Ú†!™€Ô Ñ´R…„ÂEþþn‚„ Üp\”V%Ø ‰°DÁ¤IãP£Ø±]ÆöîÚ»ïî¾ï|.¼vœ©pÅ‘æb¤™óœç9Ï™ÿgœ?žÑÑQ5>>Þ»¼¼|òî½…¾7~ík?ùéÏJ"ÂÇŸüÜêà&›Í’$ /^Ì- _Íd2/EQ4´Y©•–×¶ó¹ì‡JÂ;µjåò»¿gîäÉSî×_{4‚ˆpæÌ=99Ù·´´ôòöööÚíöïœs³!„DÄf¥*·?™•¹ÅeY^Ûp÷7+÷Ö76ßš_X<{ùÊ•/êµsçf "LMMŒŒŒ\Œ¢hD)uè 3Ú6°U·Ì¬o#*å™R–C]Y²™c Zë¦Hø8MÒw·¶¶þpíÚÕ;.\h+¥v]ºtéìØØØo1/°m…Õ†g¡š²t¿Ie+¦*9\âqCÝš/•3^¤˜”FŽ¢ü9­u ˜Ô>ÈAÝÖSáÆðQªYBÓV ´Ö£‰ŒB)ÅFì™øg¿7Ï¿Vc´zà™Z­ÖtB ÓG”…€u/4¼fEeé׎^£‰D'P­yv¶R’JB—÷ä3fߘÄq\\(ï}{¸‰G¹€¤– | +!ÂÄ Û¤%(·K¼+«éÎï(!„P¯×·€°Ï`wÉ®oœG‡Ø€Ø©ë±Ù+ ;‰P»Õr†BÎìË#"vgg§²àœï=Ji4BH=ÒöëÁ$uZ0 Ý•é8æ—‹9s@"!¤Õjµ Hˆ!¤ÖI» ºÔZ•8¤m‘Ô¢¼ ‡HhTÇ”º"r½à½onlllï àÛIŠ1BÀ´Sôf$N1"h¥0Z£L§?©…DÀ9$¥|Dd8È9¯¬¬Ô"@Z­$4â–(­ñÞ3Ü-\ÒŒ"ÌWR‚@¡}vû¤RÇ‘RÄ 'z²¨s®>??ï3ˆ[-¶wb¢c4™ÈðòSYží&¦ÛLÞmQk”äPIm…#œ~.Ãw†z>~è¡÷ÇZ[›™™ií1P·nÝÚž>|øÈKQé$Uï°Í&§Yž,Âä]Ï–§[§|¹7áTÙót_žœW,®$t»(÷”èÊçH’¤:==Ý0€úøæGÍéÛ·ïŠÝI¡»ç Au[çñÖ9òÊr¢8^ ¼Xjñ|¡MÁ „$µÔ1µÍV"ëkkWÞ~ëãår9Ý󖽿¾¶qõÊø­Z­:Sêé-fr]G½ "xïEÇ£¢eÖ9Rki6[íÅÅÅ鉉‰_ÿê—oÿfþÞÜr»Ýö}8ÉJå¾þß}ýÍW_8õÊ÷{Ë}ƒZk-"Hc0‘A+ Ò$©m¬¯Þ¸uãïã—ÿøþõ¥Å…9` hòY€½ùÉýCÏŒ~ëÕï½ùô³ƒgó]…~­TgÈ$´šÍÕÕåÅë7þö—‰ë¾:7êK@H€ðÈ/ó3¡‚1æØéo~ûë/¾òôõ|¥ÕŠ?]šŸýÓ?þúÁÕé›SÓ!„u lgîþ£ÚÏ‹ ÐóØ‘cÏ}qxdxavfaian¨-À?*ñÿ°w.בÎudðÿÍÅ^B»;G¡%tEXtcreate-date2009-09-28T11:27:56-04:00Ý«%tEXtmodify-date2009-05-14T10:27:06-04:00¢’êtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/matrix_sfcgal_enhanced.png0000644000000000000000000000162512143462214023717 0ustar rootroot‰PNG  IHDRoª¯tRNSn¦‘JIDAT8”]HT[Ç×>ûçœÎÌ8”‚Wò¤°"- ôr…¸\3é û$!_-_|z‰°§Ôæí> ÷"JåHPdE–BjÓ4é|HcMsÎÌœ}öîa¦1lf²ÖÓÞkïõÛkíõß1ÆàW !”ÕÏmár¹ò¬nät:eY€Þ+Wÿû,˶«­­Iƒá5ï;ŸgzNœ<¹UÐØØXCCCoooÆó%¦(j<¦(‘ÈúââRꀟ€FGG-Kww÷÷Ψ×4Bˆ®iDUÕ•••| ·Û]XXØÔÔ´Éÿï“ÀìRä³’Ô)¥”2Æ@>Ýn7›Í?ú®…37æf—"Œ±haaø¬=êèèPÅívÿ¸´NHº. ˆÅbéö÷ôôd¶ö÷÷¿½x½½½½¥¥%ë1Rg1 ŒÒh4š.­¾¾žã¸æææTò²,—””ä*¹ñÚü…›ó¡OñÔ”211‘ÎhffÆf³y<ž¾¾>‡ÃÁs:9¥ ð·Ò€R‰D £ìÎÎÎðÚÇ¡¡¡Ë·îÔÔÔ ä¢0“Ä„t ®ëápx488¸{WÕ›ÅeW»ººò¤Ã(3‰<ÓO—’ÒÑF×ÊËË++Ê'''ó€ŠMü 3‡6@^¯à; ·¶¶æºãŒ=Tã‰Ì4 UWW€ó—œ§ÛÎó<Q¨Š¢iÚûuýá¢öZ5ˬ5R¢Îª—ÙD£, FY²šM’hðûý¥¥¥iìÙ·¿íÜŽûkFB@)M&$™LhúûgÞ†‹ Lxƒ(‰¢ˆ1F Ál”ׂ«‡êZ­ÖtCÁÀýé{ëë“Ù"$eLg "s tÄó˜ ¤¦)Šêóù¦¦¦\·G¼o—ãñøæÓj³;uæ@Ýa‹ÕÆqcŒQŠ1Æ<æ’‰D8¸úrnÖswÒï{— ÌþïªÞwäèñ²Ê*QÚÆ!„`ª¢¬~ðÍ={<óà~ìKtSHv`Œý}ððŸ6ûvUù½K/ž>z5ÿœRšG9mGq‰£éŸ?vVüNðïÙW˜ ŒâÚIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_delaunaytriangles03.png0000644000000000000000000010705111774645750023654 0ustar rootroot‰PNG  IHDRË_®—pE€IDATxÚì÷_Ó÷Þ÷ïä¾Ï¹®ÓsÎu.ÛžîÖÓÚº”¡È½!@€$$dO²÷Þ‹öÂÞ{£·uÖªµjkí !AÀÕZý¼ïß@ò ðyúâýyÿóЫÑÿß @X @X @X @X @X @X @X @X @X ·M§/\«°07oâlùŠ·í?¢_Hw!Ûó¹"àå¾Õûÿ­>ðžæÀ‡šƒŸjnÔüJ{ð]à6]àNÝ¡= *Ç­é ¿ýú|a€–tã‡Ûæè*VÜÀ0vÑ 2®CM¨Ó¥Ǥ–}Ëfjù{È’¿A«ÿ;¯ùŸ¨®ˆƒé[x Uçƒu·â+o%VžO·NÆ)dztª†î}w|WaÞj=øù—±¹sbKG.³!lÂiúh–±"Ëø*ARöi”,3+Y# æË·’ÕÿÁëþ'¿x¼â=Tóç¤ö÷p­ï¡Ú6“;B¸§Kz¹s|ŸaÞ2¶Þ½=\£>ž‚ IJy Ç=ÍŽ ¥% Aöà1ÿA²þ‘Éù{FDò’të§[à{ ôV°õܘ£ÛH¯›{æG/½ÄhŸ­´¶ª¥<¾J¬×(íšÈ¼¨DRb?ÇÒiœ„z£Ù:Þ6VÁéTãä¼é…—BÕ™¡ Mc»Dhä •Ò2µ¶ÓPõmuíéZg¤“Ò¥)–M¦%cŒ˜æñfÀY @X 7­í“5‚µœV9¡ÅR67|áÁ:Ѻ¹®¿X_/è„Jµ´\m²¸©ê"ˆP)4R…4˜–%Ê¢TPgaÞ};×ÜVƒ>Û"¿èP6Ë)Ýum/˜¨-k×*+øB•È R4ª+ç*ýÁê ¤IÒŒO„gá“‹’FUÀ©«³?zJ»€aþ´š¬îh@/t lr›Œ9Ü6öT¹Øã˜¬°Øå2³P¦‘”ªµ]úÕÁê œGàŒ^R¨™¤L·€Ìæh4Öû÷€ ,ПN&FÍ6ôB‡h¬”cÓÈž5ñ:5p¶¹®ß¤«‰ô…J^­qåNÕ®¬ž`V2E£ŸHR*5@gʤ¦ï.\?- @X ?~ýõ—áAyO+æ[‡ SCu±%ì×ÁÉÊ;䙨ÌUž3$žÃkö',U; Ý?}H=ÂOÙ•Ï«£YÆ2ÙÕÁP¾¤Äpï¾Ã›³W¿3 ´áO¶ñ¿ï3õëpõrN¥±þæ÷·À¯ ,ÐÚúñÌ5þ–½éAû|Š´V—«A’)ï•ÿ„µLZrWKïK¤¡]þ„uEŒ¬ýßøËq–ì푱ً5³$ãpÑàwU,7³ÍsœÁ&üÕ~Ã|5§UŽ­T¦FO€aÞ€°@@kh6ςض“•f|F¹œì Ùãã«<áöh2Ù4º"aI‚6Ëßóo/-Ø–HÒx>„Qu…Ë ¸ò³¼9{ózÙ`a¦…uµÛاÅ5(¹U¦`fa€žªÛ³Mÿ‰J Ø­Q*Ï.wºà„l a×C"³îÞýVdþâX˜ر—úÔN3ëá*UÆ™ñ“ 1h%›mÂlÚ’uÔø¼r—pýQM'¦sŸRÿÀJw'qV!,¾°¬æü¶ôÔØ°4Ü bºX‚1Å·u•ýú¨Ã«7¡f¬—2a§]éֺ̬‚g+oüa€–éÖäùд”Áøür:Yˆò‡@Rar™+>™ÎÛ—!Y…°ÎÐ~ŠéÛÊÈ Œ‹Ûv Ä¢ˆ:ý?¥è8Wä2¥'ÏÖ{ ûèQûé²þì…ʼnn«ÌÕ67¹†yÂ-j:MWÿN>‘»?šJI•ÏY©+'+í‘þþm]ÖÊ»dxFHžfuÂÒ•öw1¨} Y»#Ë>A ßËÇ„‹(ÚAÿÏÌá5C…lîÇŸÞfv´—­ì G*3ÈâSçj—mïÔO ІlÄ mŠ5¦AÎnkèºsû.ø5„zu½c¾ã´õÜ<\‰˜WRkÊÏ&¡‚F'A2˜õ ´<4óùÌ,KÌÊÿ~_¢fQ&gÅ'9¡CX k–ÈiÑþ#²+¢v/ÎMXwœÒXÿC(ú…˳û–|åòBóŹêög/×ö9°'Ûx'j8­2lµ¶Ì?„zëôëÏGÿ’+:"†’Ë´š–Zeµœ[ȧYÆ\—ìºÁCÙÒ#é”çË̺.¾$¿ÓÅ—n@—’Ÿ²âcN¡ä‹kÖªMøŒ­áªíPoºcf—Øø.‚°•€ÅUù6†™GS‹Êäó, fO¥Áƒ{MS#Œ¡™VI·Û¨äµ7uù‡€°@o‘®4Ntn@•ü=¯HÑ›7—[{kdøž¦B¬€•Å©ñ$µ¨vo"†cž¯NöwÉÉ®ÒÖµ'ž‚Óô­‡°TXIÚ7aèo¢ý ëŒÛ‰U{Dº¤ÝT¹Î·äK×^¨N 'ç—fÇ\½lìÄ͵²g«Xv§™Õ˜Nœfèí1°yÌ4«®¾Pgo³Í-åùÝÊØBÉ8ìÁ‡“PAÙÒÐT2O${m!›«Óé|^]¯×o;N^^]„5 Ãþ›óÙ‘ ëŽ;ÉÕ#;ùª÷àø:‘ÞìWiД+$Ë•7n.ÎŽyø°õäŒ`ÀN˜kæt)Ñ N‡­çÁƒŸÁo ,Л¬ËõãPÆÔÇ$…(ûÚæ;ªššõ° –Š“Lñ½O¢TîI ¥å“µ~ [;'ûê!›R˜"’ˆ|^Z(–íId®“°®Ý1)Ÿ…¬BXwüWÞó%]ý.s”Gµ/¯4N¢XCóxÆZßÎÞ¼Q6ØIo¦NW2ZeøZù»óWÁ/! ,Ðk`G‚ø ÍcC-®Ý«êî,$q¤÷ÄX×L“9ÒIýîjÃñ&^çûÇ5NÓ8[”„+b ž²¯4'›IÉdsÙþûc¤ ÖOX«*2=´.àèéc¢»)5«söflYÇ6–èC„«xV³¬¨ §íDëbÐÂÑ™ª'fÖqbZØoÇž°s]fVÉës ‚Ì, ,Лh`ëÆZÿ‰0|\è¾w² —Œ.«ªž½T'&´×À<°ËŠ…qxíŠJ¦V¦æ5í3ÔÉŠ˜¯t3B/Æ¢ù¼(†Ä Ê‘¯Ÿ°Yb9–  ø´l÷¾ù`æšœ½vÜÚü CôQ&^îÃÙŸAV ’–èËÛ)DNÑÔЙku§©`²ŸådAe“" ZIiôÚ]ñ´tiý™Y–„åjFx¥YiÂçå’ò(±øÒuÎä(RÙ„ 'a=Ñ[ŸC…êiBÿö[ÇÝ{­éºóOÝÕ|ŸnðHž"0G[·™}EeU³üÛºbrŠVÜãh™ !,DhÒ4¤£Þ„uÇ9¶<úmÀçµa§‰Vçì¹}ùG˜¢/1d½xÌkvL{B–Ç”œ»T¿Øh» ês`GjIN3[¯àõµ‚aÞ€°@b“·9þ0l"¹Oþ¸¢Ôfržö±j’#Õé&zOØÄ˜žÔ­ï]W4]C†H¤ÈÝ€°º™Ý›@KÊ%­33Ë3}¹_®]2Hß]2¡i”lnÓšxu¾A…WTŠ,P¦Z©‘þ„uÇ„ Ó•¢ÝÿqÅžó!«¦hSjçvK,ï"‹6ãñ…ËÎÖCy"“òæ-»{£íԫφ*ÆÛ¥ø}Éõ«`Í" ,ПÚÀ]ó¹Ûq$×<ó•SYHæ±ÇûšåŒÁjÜÉI‰ûïY8‹—Å©_;‰© *öÇÈtÞ:g¼ÜêWÓÔ·é` %ï\óá1²¦’‰¶@‰Š4+þi„uÇ´$ÇžsÐô…eÿZ)Z'g÷Hâ2 ü¥¾2’~(g ‡sm]wØwôíøáZr—ª°AÉ›œóaþd:#´·¾7|½X’/iî¶,¦ïÚŠÊòé:n}m[“V5VNëkƺ?4ºßŒi•akõÅ`þ! ,ПF÷¯ÞêÝL©ü9T‚ËÀæpëSÂ_µ»1zÿnC:ˆUÉ‘© ŽÒÚQ £³ñã÷G±V*½|÷EN¢åÈ&×cfs²/ ² ùËvɨTêqÔ5¸@`•óÔÍ$N#Vˆ¢Ä”FLËs×ÉÙá¢Ä긭º€O[ǯ’¢½_9°…­z9§¨ú=¯å5ç 8:Å»®Ù1W.ûÚpÕ˜N%ªQÉŸš]¶€°@-°ìïÀ”;]«¨Å£APAÿx™§ƒ¾·&;>uO®"‹Æã÷Û;ÔÄáz™9¥û£ßž©Š*àz÷Ñ®®2ƒXJl6iM3û!›AÈðÞ%Ãæ‰ö¥pÖh1Ðöe‘—¯×á-¹4ƒ¡2IdJDα=‚ô6rܬ:=œäeØ2´û>®ˆ'‡Áxµã/ÛÜoš›`wÛн¦Â®Vgóa^wÛ·‰\öN>ùq‹g:£J{ðzïnCiQ -c_õ8MͶմÙÄè‡h¬“êù^K0¯Ÿ°n3{8G¾?ž@e ~Ÿœ,„a²™ÞûcA„«?d>[SÙ¤=¡&Wa4&™Ìpÿ[™XDÇÀãÀÃw˳ƒºØ©ëáìŒ,ÇUEºÑ²o{ßÁü§¥h¯·:6ÒdN?›  j<³c" ÕiDþ‰3®Ù1ׯZ†»‰ƒµ¸veA£J07qü½¦šË·´ü ¦ qõ’ NðñfNVyè9Úƒ3goArƒÑœRo¶«ØZ宿®ûMîÏùîjCŒåßG»f¤Óëö$Рk˜Y¦˜ùâ£b©ˆäùš8zhþjõ¼H¹F/º{¯UÓL"ÉD[­Òø<˜XÀ%# 9‘°Ç÷¨sC‡…õ ¶—i ÿR·÷‹®@È8ËŠœ½QlßH}ÆBÍTóbñl¾¨)8WH’ÊnÞj~øÐqjNØgÇt Zä¸:S90³€°@¯nÏ^ìùWö·Ü"y¯ó ÇÍx±Üƒ×›7Ê”1-Äp' IiÜdOРÕ-Ô ûjÐWΙ=ŸYÚ¨J Ÿ•°n3’«Ü‡'иkNázÈ 4½´?F\}L:EÖ5d¸÷ÀN*É%1Ùd<çéOgà2ihjVø~Jì+*|LœµžmUÜÝþO[BcO‡¯œ¢½ªkøŒ(ø G€»›(¦‘$Jé‘|^q½áÞ}Ç­›£}äÎJd»ި䟜: ~¥a^#Íf›šÿ+_){<ä¥7ʹtei[êôÝ’¿sTàº@/+ŒHÀD¢Å«B?RL]èN÷s–V¤ÜkE2žÖG»f¤Ðjv'Ðb³ˆJµv•1/ÒŒàÚ%ƒ]j:ˆË&%’+ŸzÁ%±¡¹Œ_µžPcôtº˜I[ûjN§Õ°(x\V\ö±fâ¾\Ôš‰Ú AfdŸ!ð³ªÀÀ¡¬ŸRVàìéƒÊò±œ¯°ìâc5ÝÇÊéP-žÎÚ$¸ÛÃ¥ÝU·n,elŽBáå‹ìÏ ÙÇMM¶= ÔèLüÓ̬ÓÉB$瀬Ï.™ÃI˜xeÇÅ©d«¹®[¾v¼!¯ˆ)dQ$Ï·öQ*PQ¹ùq¡¨¨=ªìC}ÜÕÊiîÅE•ߤß÷EW0äûØßâÙÔÚÙÝó¿QÔƒL2ÓîþÏ QšÇ1Öêùƒ¬”„C»3Ù:c¶‚y¹_ÓkÃxÖÝG a×¾a=fvo5æ)fÖ=´ûY!ëÙ%£×ëwÆ=wôË ,³Tbâ»ß‹®Gf±iTQ¾ F1Pø¾Þ 1ÒxÌ"4y€–PŽ:6!…®^Ekü¬úðaWŠÖ‡³ Ã_³uï#¨"Òã&˜Øœ+*àˆÎÕ<îMÀ¶Ãì \kE=ØL ô»êæÈéÎ÷Ñ–÷÷Äx†¼¸ca^xjHVY8°¼ ¿9ó÷ËýÉ… zQ¿žðólm{%ìÇÛuÞ„;Uq .\gíêA2 …Ã5{b0xÆÓV‚?Sº ¹¸KƵ?&¶b‹Auã¦Í" É‘,¶L^©u¾ ¥Ž7Ã! Rƒ¤ér“Üd2=7hµj‡FD§ÏßËK9ÐDŠ}Z¢vF–Û6…|n Ø:ˆ¼“\µ|“BEß&¦ú})ZBÑ RLÃiô²\®Ô¢¼q£þä ¯»Õ¦‚7jÄW¿›ia~/MÆ(ÿ’+Ì2»/L0ü ìwj‡{ˆ—ZeÖìËŽ½ f Ø<DÏ9‹£a›%¿ÌÖ6OÏ*|l,Q*I¢X_œ°3»/‰™“ÉUþé‚gª.€!î]2T&ÿp×ÿµ‰Ú ÛâÛ™W™4WYõmµç+Tœ¬w‰ñUø]Ž“¶h-šc⨌ªçF­B&¥ãQˆÄ°‚¨½rÈÁ.FÒÊ)ZU~7&Âñ•!à«®`Èå)Úk‘ÖÖÏ)Š É*ªv¯ë{B/ŽÙFHÛú-K&tŠsvDÙ-Ho%…{ònL”yÓ®»)5#¡¢TLJv½×x¶K:ÚNõ!ì…ïjÂ8ÏÔG»ÆøãpDf¬ËÌ^`žl/L#»÷Ç„æHüZ Ú2HÌ»÷ZÝï‚©GRÔŠ%‰?Abó-Ο,Ll…I²h‚éù²3'Å]…mj¸M+½v˜Y@X W§_“Ôý_(»ÀU\™Ëo„P–†¼|Í:ÖGušSKÖŽ1aº÷Ù®8л;Ç}˜sc4tøé&ñÝ©òŽjøÃ_Z} ««T%Š_aÇ ðí“iQX¹R½Â®u@£Â`IXç?¢(¾{Æ ÊŽÃb¯ð;‘A¢s„µ§ÖåŽãF¶]XZè¤-T %è\=WkÐ>G¢–Ïfà ©Ù‘¤økÁ±É•µ“"ˆ-3@àÓª'Ã8Þœ=¢³}B~…%ä[iÛ‚²9|ƒâòw¥#=Ä6+Ì.Gw7µ3  ôj lËtÛ¿ ÌŸbÝC^ŽÂÄc3•2NÑ®¿­¦WÁöyéq^†~ó×7bŠÝÇx*BÎ#À{Ô…N4Ôa¿;cö!¬Ó F"8Xu÷Ë…,Å„u†±F…Ѿ\Â>ÙÒÚr ©èX Zê•™eIXéu²|ç£\MQé¸Ô¢ïƒÈáøL±çá©L2‰NÁY3U§ªä}rZ­ ¸ÀI[×™.ÒŠž µj¥¢ˆ€A¦FåGgvГü«h{p‘îmçáLïíüiùoËl*9Bò$éDþȸa´Ÿì(…5Ëѽ-í`˜7 ,ÐKÓÕÆ Çÿ¾v퉡˜†Crs§ªÝLyø°mt€ts²âÎP‰²mF‘ã}Çeܵyá¨À›°ÇùeôŒÇ+ïŒ[;jàÞÍ]‹%_Ñ(Žó`¿ ÈRÍ£‰ó¾˜B–îãdW¬¬M–Èp~æÑT\Çæu™VMqû­c±™ír1¡ƒçQ&¿Z¬í2”Ï–¿ mËçËE"\.ÏQ@PÛÌ–hŸ¡ÌV.SÐðÜØPTô 4dHà;ef€_·Å°csp¬§ŠönJíÌN±å$3˜Cä;2˜ÕA9\†J6?+ë¶¶è zÅí›`˜7 ,ЋØû?íg×þ5—Nvu‹¦•ÄR¯õÌ ÏéI‡”°RIJ;.T„uÓ>Ÿ©¦#›¹Ì0´CMøu¾±§ùýÕ ÛÖ_|.}„]Üÿ*q¥3œfV,S®gÔ¡eÜ’íÚ%³?çÙC2GpÎ\XlN»y½¬·½°³ZÞ×6ÝPÙURRïüÚ,žŒ.е\^¥HáPYªOU?ÿJ›)‹ ]€-Çæhs²•Ù5†oà«´ë-Hñ¹DD64:ˆ”p°¤àØøòDí('µ>m·;E{"„éiRùškÚ§æ`Žœ1Á1VÉÇ‹0›¬°¿£ç-ﲄzQ]2÷:þ0~C~Ü75p Æûîj㓃¦á>™2'a+FE™Þ‡¶‚/‡P+ƒsùd©°«ƒæ¨‚Ù…£½o§™„z!],îmý;ܸ›é˜–Ǿr½ñI‹AÍpñá\½“°Ü”ÚqoÂÚ’›·Çú´lVþC•-Ž5™yXGyÞ[µ+BƧU¼Rºo«’ð&§™…ž”pù;ÙtL:žL;Lwÿ«œ®¤^îÆëP®ÍTØoï[¯þ1;tÁir«ºKŒõJ•…×3%bŽN̯(:T–‰’Ú…g¹"û¶JÙ¯,j(B# r\§¨)…@¯×¯~'FÅ¡`I‘1ªœnºOŠV¿ï3[`ôåã÷„ïöÏȪ p9æDbqh.G]Âív [L0›NòšY@X ç×Ï7ïöl¡Vþ”&pM“ŠDëÔeKC^f'YgF•N¼>˜®¶d혔.ÕºÏÈ¡†›ÏFˆ½ñz&H#ú–fYj6e¨ëtùgç5+vá|í¡¬—Ù€°ÚbYû¡Ô¢ÐDW(eŠ˜þ;¾ò¹ù|dP&×ÝbWȺs×þؽâzJ ­%eÏWÿ˜¹8Ü9ßÒ0Ximը˄" “/f)Å\«HÖ¬2 š¼ûÄÖ¤­¢OA¬&ær! H²€­gËÔ²UP+ È\hìlü!3ßP¥]‘°7o5çpPŠŽß²®%Ò¶C)N3‹,¤½§pát¸ØôXŒÊoÌ$s®]±vãgœFIJ“ÓªfµemÖâ¶òº®š¶AûÐdïÉWÜ™¡ ½­SM5½Vc£RQÂã«Øb)G-THå-*ëxé:¯Èœ´ÍÖdg˲±J,SÎTª”+Þ‰1©Ä¬ĜÈ@vzP1ÆÕ¼ ‚õâ#Ë#¾2íÛÔ}(ëûø’…@uÕû…Âä„ñQ‡§$5UÂl*ÔHw ,ÐSµÀ¨wXI”ìq­~sFàòrå¢~¢áÆëí¡bköNïQ/ƒô$Óæí>óö{¾fP"DþDK Y(b±NÎÕËEßž¨ò‡¬Ä¢;†Òün„}Ò[¼÷8* Oâd™•ÌÀèŒDrù˜°³G2Ð…¬Æ ÕãÛ«`÷&ª¾ï7_jS-4ˆæªØÖ¢~¥]‰³K±­Ê"‡–ë0ÈÛJJÚ+úl=cÓë¹[owøÂPç‰Öú¡ÊÒV¦B(Ò²xR®RÆ3Id6¥¾Ç¸zVÁ4ab5³P%¨,eV¾<Ÿ¤!±ä,ÿ+2JI óS£s¢%Y!­´DçOy„‘X»Ù°ïóæÃÑ#U3;Åeï"Ù›‰1IüXCc@·XZá/oúüC@X çÑO¿ïþ‚Pþ·|Šºÿñ”Bi÷Hùb‹Á/Ž‘~ÂSV7a—Á.õbK qìHöÆëqåºwáT‰o/,Q7œË={Ñ5ÆÐÞ¨P‹ÄÅê´ûôцæqabûï Y”¼#4ƒ M⺠Ëkàí‹Êª ™?šÞ!*ÙP@ ‡&±r©ÔªR˜M‹:95  ´L§H5Íÿ•'‹P<^ŽRŸEyZïÏž’Í r=©€ïwo<ôÜq·m½x\íMرÍ<ê!Ö { ‹*Ђ¥æ…Kkt2©V¢é7ÿüóR¯—¥Á”+~Á ÏIóΘ‚cø,ZuÑîãÙiôššÂÞjÄ•ó%îgë¨*aW‰Ÿ§knY®tjÏ·(N5§ËÃfj—š`— Z准Ùf”µ—˜Û+ê:«[샽'^4«`²©¥|¾Š#sTRU.·«‹‡JªOÕ<­ ¡À\‘B äE¬/èÅçbá9èP\ÂaâØ7­j ÙXz`çP jèk¦i¹–D¡ñ1õ%ðz ÿÁ½û€°@@ ìùÝŸàÊÿ^¤ ÉM–.¶Ükê!Ü©t“ât-׳ñÐíù‘U›C½ñz'¹Úú.‚HoöÆb †òNž®öv¬??hk¨ÒhDÚüüÙ*Ï"¯ã…"'èÂ>Þ´ØDÚ—“½?!/‹é©.¼w·ÉóÀ½M˜Ÿ&+ž²O‹ûSU7û‹=9‡É2Æ ‘ҡĵÈ0Õ¡ãµ™µíÖ²Žª¦Þ†îᶉgºd[Ê*X[õšJ‘PÏáËùr…À$“Öº² ó•Þ´-›+sµÍÕçBd.ÚRåT©BêIÔ²hdTNZFTPQZH>¦}¬5ç0[w{¸ôj·áœ]v²Žç´½£ÅÔ^Ñ!G·*ˆ kÑöZËžÉöNœé²×—wëër ¯âJ|\\¥ðÉ*”ΖŠ:\ h¶4%EQD­NëNÔRñXz<$ê0Zƒ «ŽÛjØÿyãþ˜–Oª÷`ý˜Œl© V§üòó/€°@o±={½ë#lÉ¿\÷þN¢C ç׽ܺY9ÜKøy¶nÑmWZ Ûg”yKw\´÷°moÂÖ~ŒÇ?é2ð. ÊN­tµånk)Eë8 Ç “ ºõµ§Ä/¾¬èÅÙ°¸j4ÔŒNP Ã…ÈC ÌNöKá£|Ò§úGÙüODŸ† 6î"~ýuÖ¶oâwnÞ³3úPpx"ܽ'æ!ì*á}Õæ„ïSl¯µ½¢nMÛ;3t¡¯mº¹®ßU«, t\B RŠJ•ÞY…âÉbžƒ‡-ÇfÊ3ódyX9–)e:i«”Ëð(Xf\D~\¨bMÞe8ôEÅîÀÚ÷2ò û…ÄÂj~l è-Õ\–©á/¹‚LWª“hDÉ’ÍœgœÕxö¤ cÃ…zØÆØ ®½o¼ž ÒJ>Ayw<™JU ¥KVÄëwj:qW{õMlgÀYY­(ô A]“a— X}ÚIÚ…c6c J EÅËQáô:j óšðaé8c†»•¨ÜK/>$¨ •:"$Íû0öYµ[à ßlÓìØÊÙÿ .h[Zðž¸ÐƒÇÂÂ’!H¼¢ÕùÅÃÂË×ê^C®ÇöžjÎU±ým¯;ç°Šíé>ÙÑ4V]ÚfÖÕIÄF.O!”«D&¥;«P>[¡RÓ鮞]i&LÃKñLSÈç`yØ0d|÷øvMÈFóÎmeÿŠýšŒHõ:þ›Qf ô º5}¡ýßèâ ‹ŠG‰ºÐ<îÅË OFó™'hÞ¸4Ä]š::)ÎÖoÝr=ÖìMXÇçd|Ê µVA¹âÑ™Š ;7Å™íæ;¿þt%¯A£vòÎ&E‰F",(䯢4Ty/©È†ÃTb² èxê(y ½Ùˆ$|£|Š`~‰ï¤9j ևɻ£´“ñæ3 ¥7«~L®ù1¹ú|¸bè²akdÙÖºm›J憎 ”Åî"ÇîÍŠ<‰ˆŽŠ ‹ˆÎÈE34Kéãã…Òù…ò?a×c{Ý9ím•¡ÛÕÔ=·Ý$w_µùØ^§Éínlªé+1ÚÔÊR>_Í«Äz•¸R©rh%mRWA‚ ‘)É„ËàD9G,Däd¤G… Â÷°¦Þ±Qÿ~0ïÓRCò rÄ©é @X ·HÓ‰êúÿ "\cüãˆf‰Eå;6D¾2nôÑ‹vI%|¿·uäF4n9î×ëQ%Ú÷Í ïZ^„ö4[Óߎ½;Uþ¸ÒÖÒ(ÁyJ÷G:çe9öž´!‹û^žh YÀ* 5…+úbtӱŗR*œ õi$sÇ¥Íä!BÇÎôŠ­‡µÛ¾,>°½*bok^X)ÎZFI:”˜œ—<¶ *r4#éÍVwDc4Cæ7ƒ°kÚÞ‹ŽÅ«¶1 ¥_Oh“:„6 ³MÏë´¨;ËJ»kìNÛ;Þ3?Ô5o¯ï¯*m3h«Å"_ ¨Uâbu‘•…+&äh 1.„çá³Ó’¢SŽ¢C¶±v~¢ú`/÷_±Y °Z#ó·G¿Â½ùº9rºmªäc ½x £ê ÍåÞ¼µXšzþŒÒÓbàŽnJ3Þ{“eßöoC—­~êûœF_¡Ëà(\>0±²™`Ìv.•‚Y™v˲–Oe<†©Ý kúßœÑÍEWÂ+"õû¸’Ù`z×Hí¶c¦m›{7UDìm†êÁDLŠ 2hia!ýXr|P|fx4"2¦ðx"66—D%!t_äpY+”ßFã Ž^Ý›MØ5m¯×U}ÈHîVcœðíÐP:t쓤«ÔÔQ^Þ`­©0Öëj2×ÕG$§ˆØ( *ÌO禧“’R%„îCìùоq#{CšwîÔ< ,Ю‰8eý_rYðrWë=J£,Ó?Y:`é'Üœ´zÛƒé꒜Ӳ¥Î}ÄXë×û~JYbÜíÄ*ÓIÔá·ÊÅ–Œxªk—õÈÞ(èÄÿ<[ëy!§µIIÞMPm#D>³r¾²Â¦/ƒ’+7æ´~†œÝÍ»S¼pŒ7P`Ûs¼xÏNýî/JìhHÙß^:ÎK›W=ž`"Ë5ac²RŽÄ§…Ä#£(±©¬ä,VZ>5MÇMæjï>~~Ç»X%¬l…F/JIU³Ò—°-¸;ãÖ·°«ÛÞÅÆŠÇ¶wÜBÐã;¨6%¾]MnRÐêäÌR1×(ŠY6ƒOá±LL53³ýKÊ'û¸¨Âßþ„#caÖ¥&Ï9ÞCÿ‡@³Œ!em‘\ÏzêÓ'%sƒ|ïC5WFnÀ,»ãª ìÈ÷v‘[ùœÔ lÇ@éÓ ìɱÏö·±B•ZÒ°8]°úD•¡DhJ(ä~ñ1ïë„H‚?0%l©AnŇõ2âÆ„™¢lRþ±$Ø‘8|X,!<•Áƒòârp¡Â|X_¼àfr¹÷“÷QdŠ”û?y2µL_¥ðyæ‘Nêµ!ýÛLØÕm¯¾×º žÆŠ±br—m—À›ÄȲ”W¨e"…d$ƒç§gG…– €°@oœ~}4v\^ó(Öô¸GVÖØi]\O}·q¸gzYQ½kÔ 7u鎋—aز凄RoN•¿$ë|'^‹[SˆÂ ìõ«%ým¸Ÿgj|Néí¡’zq¢géš»¥©,fú N-4£ ðÙB‰…É£å%“2" ‡ˆÑ»HÇ¾Š€î†ÆÃÁ ƒ¤Ä£Vj¤ß-L³„}åSºëŽÉmkÀ h™¬žÞ·€w¼›v¹_`ú¬ñÓd•»«íÛÁ˜…Ò­BÚE9ÕÌ496èMÓµÎùÖouYN¨À–ˆåýòKÛ“›}ö¨|9òŠ­9»¼G½Ø36o‹ó†Ô·û¢M„¢âQH…#•MÝÖ ìä(ít¯lÅÓ8^Æi2½“è"¶K¿lYa,“™¹â0¾‚¤cU¸ã>ëÿœQŸ¼³ëÄŸ° êÒÏqþ„…òšÈ2! ì+ŠÛ#e“ê[WϽiv8TXýW(“Óú¸@Ò9\ú¤Å b¸g©ÅÀ3꥕¹tÇ¥Ê7íÝz&|Ù°íÆp„üßÁ€2G’ëa÷rkl'º§ÍúÇ÷ýæÎÛÆVV5ÓÔìe³KNUgŠ29bŽ?atQB€?aÛ!5Gý {í¸µü0Â"$­l> ì+Áë°uÚ¦¾}í"ÈýiºÞ6×ú?êý®=1¬Ú,ÚÒ—©Ñ¢Ó*ŸÃðxãaÆÒBYLTåÖ oB]Õ)>Búw„£Ô¥6ÃJ¶cl|®_¹Ê 2Ól“‡°ãý Ç2^â YZ- Vó'¬L"Î Û9ëeºÝ1ÆI5|éÓæZdZ[ý(MÕçóüXuw‰û Ükùt“öψW@X uØ ~õçÒÅíÓÈá§“õÊw&σUÊ`+Ì⼠Õõ…˜¢õÁFÕUÀ»wßáOØ«—Œ£Ý”§Xw\ï5Ö 3g=5—V²ÌoÂÇ©¬Tn… €ˆ¸àf¯Mž0úü|¸Ô߯6ÿEÃù&‘ ºx4 öUàõO—„Z—®6OÙÿ׿9 ’ZT‰`‹Ÿ´8Fú‰×&,>çÁ§ v”“bܲåNråÒ(ؘò» ¢Ð:M…~E;:@¾èç”ýc°˜Þb­öv¸gžÄe•Ï”{C¦YDÂR ²Å™‡ü [½yè ÒŸ°D+l¯9–Ïp>0 ,À+ ,ÐÚzøÓƒžmÔÒwrIÊ’qøpáüâ,Á gUã= Ÿóà_Ûœqısٰ푯ÙôPï@mOˆWÿ‚w\<«é ¯n`=µ±õbŠ·•jõü*‰7aùmüì¢ìvü yá»ü Ûœ}À~(Ο°C_1U2ÂFÀØwî.{c=ôËýÀÊç»Úš¶©ÿÔx„ZMM½-ïÀÑ.”¤ÐÊåÒØ^üÍ ßBzŸ2ØYEžq÷×£”Þ£`‹7 HÓzÇã\?^>lî#^6­óL—°½ml{Ë0QȨú¶ÊCØŠ“éÜtÏSoA#öõñÒ}ÛGŒ.ٿ߰ӻĦítÂÆò/]©÷~ ³Ã¼³]R€ËçÃëŸ4÷  ´.Û»Õe` ò.¢n $—ùúâh¾SóÂùA¡ÿ©ð)ƒíÂDû ÛžÙ)æî¤øP‰¤ ÍãÝþ±ÕŸ°Ϊ'üœò*ñ}¿ÙÇÆrdry‹ÊÛÆâ¬8$éOX|v¢æCØy®nÿ§7â,>„=¤+ùãOØ8œ|úD ì‹âu´læO{µ ´^kÿLúØÀÆà µÚŒÛ·ªºq?MUúý‘î[[²{*˜ì ¦ª÷ ñÄZË7­°Jöá/­ƒÝøõXwôê©Þ6¶¡±ƒ"gÕžZ"¬zP^”îOX‹FŒÙãŸ((Ø<LõkSVú˜=o4Z1>[û"qk¤l²AyóÒ©7ã­l`»7Sœ–¬êè:óûìOö ІW@†Oì =Ѽe‡w©ÓéCjÙXÿ]‡‡s8—®6øöüiÅD'óYÏç•Nm­hÉÆººMç²îƒISÈô!¬V«É Û3.…ú¶1}oW`–¢ îpßáóvâ úŽ ìóãu¸t²AñgϽ­¡3ÒÖ¦¿Ái:'5" uʲÅ$é«Öá’O‹ÁŠe° ÉA]»—5D5„ÇA‹}7 RJ(r•?^<°õàŸo*U¿iYQAYuC‘šëMØ¢ú"(êocQÉá5øhÂv†Õö'lÛ»X<ºÂ—°DsC› öðª|“ð  ´‚î_½Õý5Ùü.‚bA)ÚÃá¼»÷‹•ÿCäsCjÿ³q®QP]pÐC¥i)Ô¸có•h‡GW"ŠÕïøt C‡s–fx{Çé“’ÉNÖóÔë½Æ:I‘gñõÄÀi]2Zê!lÉtI*+U­Uû–E,d%í÷!ì?Ó°Ñ¿ï ÿ‹"~ŒÒï?ŒÒ²F9 ìsãõÍȽ­¦SEuÍãf›yQÔµ»aqù¢a¤gåÊÿzl/;qi¡,ìXÝÖ°e£`7‘ãåþ<"Jå+ØûÍCÝ„Ÿ&+Ÿû¸ö]5m«..áX…Þ6¶@_€gá}«”ËòŽíòo|yvyׯ{6˜âq™°w¤3ªd) ì³ç^]É7¯€°@+ØŽÏpæw ŠŠGab{šÿËÃ6w‹Áp?ñÚ¸e…ýÒã•–¬3Š\’Jí˜f.uÄW7À}º \¶PÞÅËþ„ývN0ßÑ{¹S[+c{lì@ç4‰ÏªôÚD-hdѲVlîrГ|[¿cèoßÁÂ¥þk¢a³¹ LµÈû½Ì :„€¡k¸×Fõ–„zºý‹ÓÀº¦G {Ïâ—³§¤SýìOȤ ÓLXªs ÆY¶ìñþ³zü.ã0Ûßîå³VXsïnƒgOÌóÇ|c»ŠèmcEj°FæS+ |K+È’gùÖ‘Ôp0ʇ°7Ž—šÞEøM_lAó– 93§˜k匮ŠW囊W@X eúqáŠÓÀ>Å8 ,„]›]$v÷€:ÿlîÃÿ8]µâ!©Aó—Ê`ëbõî†.ÍII©-Ý€$q[ü—uOÌW¯´©›{²ç%˜¾ïÚµuR†Çƶ4÷“Å,„2‚†ðkîâû7w R,û·ù_v•¼“KÑy¿/´ª3‹Â„]gÜ-{³ñ  ´L3ð’†ÿÎck©Å£APgÛë·s|Ÿ-ž¸Ö©)ƒ.•‘N !†mßÜŒ_¶}"@&ÜFö[Ö]“]$ZqÑáàò=1/Ýú¢Žª&e‰Å*‡ÖCXÍ&…š¢×ëý›»†eUÁ û¿¸oö!lý¿Dzóòöß¾T< vx¶)ßÈÜ+ ,Ð º=Éñ1Æðññ¸þ*(Cò„zµ]¸û3+ß;õI³ÛiKN-Ð#> eë?Àâ1U~V4>[¹Âž˜qæ·}’—u†/wê«Åt­©o)R.+ÛÊeÑùt³㭨p[¾u:„âCØöˆy˦ÜRL#Q ì:ñúf»W@X ešÎ2ÖþZ„¯%‡ƒrøßž­s3bzœ±0,_ñœü:×Pš»wRšåY([¼ëÉP¶‡ACõòOÐ>½Ov-”¾Bö‡ï+;çê_âIîÒÑ=6vjð…Ç5˜=„¥×Ó³)¾ƒ` 9η¹«²¿-0Õþ 3Rê;üÁ|ðÀ»ú8íÉÆ7ß½ÂyØÙ‹Ž÷Pn›D±’¤‹ý¾¿V:ÒK~4o[ñ¨œ®åÖ —æ¤b­ßì[æò>%ÒõþXOþa¹eœíW¼ÜÃ|¹CW/çy–²j–qih¬eÚ’ÊHUª•Þ„ÕiµÙa{¦ä¹ËúÐÇ*úvv·DÀômœEñ®\o„] ¯õò·¯€°@‹šJ××üW®ÓÀºº Ü﮺‹¨:&F¨—Fžº*Õ§ ¶2rïð~”÷m»ö=ßQ°YœºLŠx…MÝ׈;‰ë™Rø¬Em*RŸ­ÏMØÑÞ“$«|¶biC¢¾ÃÀøØØÂä0Ÿæ®iI¶!àKïA·Î8¬S}IðmëÂJNœ®„}jå@½ümHÂ-éz÷ û¤z¿kj4Ö -Y쑽rQ?ÑWô4êù”ÁŽóÓÛ6{ßq mbÑüþˆ>—{öÔ.Û3D¹4hx§ú¼C]'zl¬ÊX̯”xoHL§ø‚aãàü´>‰kÈæ3¢eó_¢Ë à>o0§˜>±´ü̼j¶… غ¸Ê°áíÂ+ ,kOÌÐ1qå_¡«î>šÏ½{¯Õ=Új¸psªìiƧ ¶)3¸y[¼‡>·«Ìÿ '‰;½éÛc ùþ˺¯~gí¢½|ûÄÆ¶*)Û×>E,MÛªú¶*“—éS«RÈóýš»ê“v÷æû$ ¬‡Q•ýÞï1‘¨ë6zÞÚ•óæÑ2Àëãy¯ª· ¯€°@n[à6°Qh²lq4Ô¹ùt?w•3ã]ë¶ð͹0©÷(XÎ~¦ŸU4vZVÚCº™’ìS[„ÈÐæ…zv„‘lٿ݇° Póòa ÖÊ& ì²ä@ã[ŠW@Ø·ÞÀ¶Íµüá6°ÞóÄ ïÔèj×ú>e°åa»Gö£½GÁJýzö}ß ì£Gícƒ¯ÖÀºã‚CS÷¤¨`nä"C$Ôõ<꥾կ$oÂJ…Á«uºQùÃå3oí„}{åZt¸›^þNUÞãm0oݬî!®8vÅ2ØQNŠaë7?$”{¸Óô! ³xsÇi£ V0°çO+§zX¿ÏioS;ml²Õ6†Žç!,»‰Eö“éÛÜUµm*˜äMعÝRñòdH§ž§„}R˜Õ | s¯€°@.]ª´½³¸'æ(\ÖÚ·¸`jf‚qaL»ÊÉù¶Š^_¸4Å–z¨m{š÷(XÕÇ…>]…ZM¥ÉOÌPïsŽÙ~Ž¸Ø®¯•-ÚØ©³>·dÒº8æDE #E¡Vx–”Wº¼¹«%û`k`’7a/5j>Ãø$CpB ì›±)èù l÷®"ë;¹Í w“Õk–Ñ>Êê×úMÔãÃâœ'w\¹úÝ_^ŒTx Óõ•¦ñ†Žw‰‚Ïž˜É.öïyì[”~[·²†’r^¹Øcc±f,ŠŽZÞÜE.JX¶z–p¼rù¾ƒÛ‰Uºæy¿Y¤¼Éf¿å„}ã'f­×À.o²ê$_3¯rx~è7š3·ÎªžÜq!•oôkðû¸DA÷ÇXOQAƒB°84¶kÎ54öÄâ®oy<•œêÓÜ•¶Ë»¹Ëµzv÷Æ;)Ëú¬dI·÷ð—ts‰°‹GIo_ÝëÛ{µ ä2°];hn›Æ¨€³Çò_:§™è_c{ö ê][~d×øA¼÷Í-LøzXOmì@s¿²NbS,ÚØ…Ú ^GÌñ†,:9ÌFŽ[ÖwüOßAÇ8®Æó~©æÑdÑR¯Ú²:,À+ ,Ð[¤3ÒÖÆ¿æñÓ  ,öÈ>n1Àß™¬Xåüü:ß`ÍÛ;"Lsãf˜‘dܲõVR™g¬uCqùÖÇÖè7f»q¸‡ø"{bž;Î6kêb7a;#dÑR÷­Š–GÉó&,ˆòiîjHÞãÓwÐó ›¹löBTÁÒð—·Š°ë^寀°oµî_½Õ¾‰èÞã=äåÌ·’Ùîxjä•ç.•ÁÖÅtíÊòž„ÂßC÷3°žEŠÞc¶y'ûÅÎÕ7ÉHƒö!7d9R™ºMç&¬qܘLMÖéuK›»dbÄòÜíˆÐºƒÇ¼ ;¶…Ï>*XÖ8‹áz†¿¼=„•€°@.-›/:,&‚ ¼Ëךܻ[†zñ?ÏÔ¬qSDm§/þÕ<«Ì3ìÚt)RåaMÝû®zùvëb–Vë¿'f°kí×zuqÆî´±27aºhê¥îƒ|y¾Oa,<úP{iƒÃ7ͼg«7aOìSÈwP½ßu Aìþò–ö\Ä  ôœÖ²á4°ÞC^æ§9ß®a*ïWš2¶NI«:`Gj7õ€ælV¶G³Œ-ßuèÓõZØE;[ß,% µŽ9 ;3tÆç›‡ŠÝ„åÚ¹™¤LoÂ2 ³•ÙÁÞ6Ö|ð«Ë^‹Ê/GXÔ¡–5Päã³Ö·‡°oçH@X tJÐT÷—\.¬Ìûj±Å`-S9iÂÖ¡-Ýùm›=TäMëÇDÄèÓ?êIA¼>Ö MªÊmc­å L#ïi…±b.ƒ³¬¹«úøŽÉÿßÞY·µ•®}û›¼ì½Ç:Óvf:Ò©LÝݧîj¸[Hˆ,@ !†„x‚BÜIp)5 îT¨Íó&]4ÍБ–zÇý÷ž£éZçþõ^—lÅøþàdÞ‚-Þ›úß3¶ÞÎùD Ÿ¶À°À0ûn×ÿ„ÌI" \þC^þ±Å9Ò„­¦ŒÃ¾…²ü%Ë} e¯ï0gÅ`K#–u¿`»Ú²z-´îOŒ­)À9ê½·±.So*9KÜ)þ‹ÂXNäþõþÍ]Þ¾ƒþ¯ãq~ß÷Nx5:æ§`ØOy¤ IZ¢øañ"ÿ!/ׯð\¦žx]SX¼¬£h¸8Tzh¥qUˆO1¦¹DÜÁü·,sä˜íÛBûxŒÙÕéV(ùHŒeñJ}Ccß.ŒM =濹ˌ>P¶zµ¿akf£PÉo. ƒ3*Ä5täüà®Ø"O‚‘.`X`ú؆sÑžëòâ¼bÇÞp þñu2RNW£v"Ši¥—¬œã Ç×eÀ›¡éß °5#÷Ä4§_¶MA:9 ˜½ÅÀÿˆã6[_o<¬=»¥nÙ1ŸV´s°©G ý¯¶†Ó4VÑ/:üÐÛ&«ÉOm6v{‡Æ– ɢᡱ)‚ÿÂØÍ]òcë]“ß4\üšUæûŽ$¤?yR7m ‹Œt»W0,0ÛZå¿Âñ4ý \9–^„X¯ÍÖçd¼Ó^€:ZEØêŽ¢S:‘üõ .ü6<»ïæ¾Rö×ÑxÆ›]Öa9UAêËßµS(À"§KYPÃåz ë0uar2‘á_›Ÿ“…:ø¦¹K½³nÅŸamó2ÐÇÞüŸM*ûÚM¥çÿt¨V¯ˆ›ò#]” W0,ð×ë[«¿Š-ÚBưÍÛÂÉ·ïÖ +ÏLxÇNÚì€Fü~Ä)¦”}•K6û¾qYçeü¡Ë`GT~½yŠX_Œ­ÎÇ6{<’Íg³© :cCrCü c#÷o0“O wµa•­^å?WÌ{ù\^×ùJäGÐ*b@¯`X`ºñrè™a}†ðÃÒò´’9™ìâWC`ÜöÔëN]OÛ¤¥¡+]¹ÃÓ`¥ûV9Ö% B¹T$ø*EÕù—(íËyþ\3bÑaËD-:üÀÓ*Ϋæ–z «×4¥Ò2îƒtEºa¬sÒwpëùA.ocS¼©©8ƒ/𠙺†l‚®-0,ð HìÕŸEîËG³Í»£HÕÛLïø‚u”§Êâ6û¾žs—-¾wlø—ûWRÎÒ,]Ñ(üè{bF}»D*jªÛÐéKÏg6z‡Æ–µ•}…±Ô¬4ì‘7ãq…»W¶mÇ!?ÈÝ£bÆŒH߯žQìþ2E ëÑk[5è ü/?Õ®ö.:$0-{Š9RïÛþôIÃŒ~—äÈ“v˜ÈÃ߸ªNnÐ,þGq \úylrú›OçÑÔú=1#—uœ=1c%”jv±whlµŽÀÈF. b1¾ÂØÍ]µg·V¿ÎÀù*:íõ­tY SM]Ã"z…Ë0,ðç\Û«þ•wŒ[ Ù› yén'w™sßõó±•Ï;µ¤½0ÒkF”`í¢=EˆJºVçÍÇøØ=qL¾R02ÀS]Â)¤oŒÍC5›º:ýøßYê1,ECñ/ŒM Ú£D¾˜Fí/ßæ3¬ô;«@~˜\a…ª`ŠÖ{÷ —`XàïìR|ég¸bÛÎèBYƒ×}åvCÊP›ä_3s~¨*q¸8ɸW¼t«O%µ3“Sc„>½ÆjwGç>}ö‡ØËç ÚŒYS.»¹…¤Z¾Àc+$Jdh¬äœädæI_al>9+`x Œ;ç$gå<_ßæg|J(ùMb©Š¢²œ©hXäÓè ü%}£âÂ)'KbóR(È?Þ;[2{­ùïøš½Úx¸Úšðz¡ìŠ–MXß'Ö·qžÓ?À²%eþz}ú¤ÆªOyØ,šr†}u‹m5Ÿs›½CcE¯Ê¶0e_aìˆæ.þÆ7«g 2ч † ×ÈŠyÊÖ[÷ •`Xàoxvÿ±f)ŽÿE$žãØ] µ _¨x—-o6Y)I¡+;™Þ+gFwÙâÁÃIM?‹;Îôé5¥Ø¸=‚|ïÚß°ç»(fòý€ÞTAªTx‡ÆrËrÄÞî–å_|GþØpßÁáõ–×#`:Wåû ¶¢¨uEã ôª¸grX†¦E€å”ÿŠÌ œÍ–ar‘ÛÒ„ï·3ßýe«O?¢M;òú{ÎvýŠ`߈î—Q8–ÍgØC)üü2Έ=1ïu1ÙÎC§P™‡m³ž7jš19ÃCcý cý›»4Ñ;«—@~œþ]\ÚÜdßð—„ìtä±Ô%Oþ‚ ¤)ô †þŽ¡[ƒê…îŒ(Ǿ5œbkñ½_à¸MøwŸkõ¸©’zIkA(RõÉ]»ðÆáÅöùÙ;ß BMa›·„’Öûö\gN™:Eõ:|[™S'zbl“UPËQëßÜe#,[Žü8ŽK˜_Eú†¿„âS۰  ¼ç)µòÿ ËŒ© $#2¼C^~©i²b®:XïQ´ÄGÉâ¶ø2š|éNŸAÊ¿ˆÆR4~–›ÍæúëõñC•M—2%þQü7ç‘K¤xc«k xzÖÛ…±¾æ®Ž¢ˆ’•ó|}ü¯c°4Ãð&óxÜ”0,,ƒÃï`ç¦p¾OðØma”K*Ïëݱ¨ÙH|¯WNž¸Íœ9|Ï(ܱ¢{k¢Öey”UŸ^=1Í`ïÞoð7lgKV™6¥õŠWÙc;Tj±±dDa¬sW宕­ÛR‡ ¶æ¤ Q2ä÷9žDxú´a’ö³¼ 潂aw¡'»Jú_aÙÉÒ¼0‰BÝb€l~¢Ô+õ¥g—µÑ½£^ìi'J—­x Eô!›B‰ýwbhXÖ=x_jÓ£§z€õÝÆ*òR=1V(©JçGÆú7wÕžÙR¿òÄð°±_Ò’‚9Ãg1Y×o©&³a½…Y°  ¼S€½q¿îgTñ¼L±e[hö¥å«oú¹&Ò{½uZR`=nâʼn救¾E)E¿ ˆ¢ Ǿ)„ãýÞ=»€wzI[A2^ºbù:dØö½£"ÞWQ˜œD¯x~ÓÆrû9©¿a[š—­Œi¦×áù ¼LM¥R§iÂR3å½ò¬ª¬p\8cãŽn¯'®i[6¼zV0;!•¤öŽ&È-×N*Ã"Ë`@¯`Xà=pGð…ÿ†¥4îŒ.R4z‡¼Üº!p›ñï›(íEQª¤H€•Zk]ík·§lÊòØÓÒÓ8ª¿^¯_å9tØé`‘sÛÌ—ÓˆŽþz!C[,ì™ÅLa3Bóƒ·z‹³ø¯û?cSb½cqbó$ìʼÉcX¨ÃïÍà¹kÕ³â¿Q"rk%_þÞøûïš&+ö–‹ÿ¾o (fƒ•äÛJ æ®Xxûp™÷Ÿ½'d3b1åp€4m ¥X›Åþ{b\6Üu'oZê9&N†VRS¥›T’„ÎB{ K§¬Bú8«\;èí|ÓÎÏ@±¼ ó”Èð—É`X¤k ô †ÞË‘‚Їcæ-a´:£wÈKÿ%†Û˜þ¾oà@­4x92ê¥6xSí²ám+©ù¿¢}EZg³åè<ÿ{µŸÝ¤ÇMc½zÎ-3Ïc;ì}é ×Χèg°Ã…±ÑÖÛr½¥â½kÕ³-ËòRvdûù膅‘.`X`4<躢ú&Žº—v&S†L)|þ\í0§Üo}ïÚ -)°ppx¡ìÆ…wQêf'c£Ë}WÛ"óÕæ7«b^¼Ð8,˜ï¶õkjÇX®7ÆŠ¤Õ™¼ùyùéŒÓ”ŠÇ°i'¸Ñ¿!ûÔ+Ž{~± [X¤Å©Þ[‚‚-ý£>maQb>@+ýWx*ò#’jo©ð¼ÌÎÑ:-9ïûz7/oÉöÛNØS¹l#¢× ›™ô}£`Ãs«$Qü—u_é+vˆÓ^¯žsÓÈ•QÓšMçq9$q§˜ $Äc=†¥½nî2£—n@ÆQ¿‹óü\¨bc‘øq #]À°À(¹eèV}“}–{&KåòòðÂnD¿ûXÿ2XYÜ&ä—dßJä_»žÓð=†ÈòØßb‹”Ú2¿=1 ú®«ôS0¬çKÒ=1¶˜Wž#¦qÝÜ©'8\Nqqqð®U®üPïêÙ¥¿"}…_Eà9ψÂ{ k$^5³>Nz…‘.`X`4¼ü]·.ƒÿE†mÛ–Û}A´ôÚ Fñ*ª0»MYÞª£fÒIîŠáö¤ëûJÙ3c|£`£©êý±Øuè]thÌøDôê±&®œ–fÕµc)Yò^y$5’H!zblBàqòWÄË{vdy~:Þ÷ÉX¢wMä±Düóçò%}þÄW@S,ø€ûE4%LpWžœGÝb€EÓê» ôì²öBo‹}õé +ƒkù%#˯Ë`Wta‰ìÍ ÂgOÕ6cÊý)²©{Ìb,/Ûcél½Ž™§Î ņz ›‰ŽË ØàùõT'6#«gUóðÉQeží$:óæê‰7ì'fa°kÓ_Fz‡¼„“¯ßªö6­6û£©ù·EÕ¢uºfîÀ¾B#îó¿ŠNÍGoü-Š„,¬EÎ…sù.-ñ“Ò«çÜ0ò%yÄÆzžž%êàÅ :½ÇÛÜÕ»S¾ÔÛw`\”™|¼Èó»Á’ú¯Ê'ذޑ.0s |H€U|E /;Œææ ¼}™7® šLøÑÕü‹b68r¼e°Ú¸âà e[–ææ®Äûì¾D6[ʳèp¨ÖªGÝu”}j†õ]I–'ÆfäsL¼dN2*…lîªÂs‘Nò/EJÜ’·dz‡¿im݉4,2Ò潂aQòâñSÍ"wflR¡vW$ið‘úåËF‡%õ–[0Šr Ž& žs*ܽ¤yÚ#ˆGrñŒx Vá[9µ+ŠôðqƒÏ°½Ý”÷Š8}ncÍ)5½JÙHd“XVV&èUsWýUsÕ’kÙ—·±Óc^ a¼ 3,fa¥_l“†’ì‰gK¼£}Íïßb€œ†ŒcȨ—¦ÌþŠÅeÃv¯¥ÍKñØý‰ì"!ÇoSwµ'À>j•|š†õ='[#ªJËÍ)wUœÉ>“GÏËÏÉBš»$ûÖº6&ß=*¦}å¯51†EV‚^Á°ÀØúÅXΜ„(jÝ‘ÄÜç/4ÏžÖÙMèÁ–ÊQ¼“Cn1ÿÌð¨eÀjýêÓÈAõÌdì«5ž“Ì4z’ò£' ØÔmÊùdõê9× " $ê7+þPé‚•Þ•ˆsSÐXEL®°BUÐ墜×RÆw¤‹ô †>8Àªylb¥æx2Å`ïË­zôPû(}'K܆ŒzÑDm“®Ø†XÝlz ãõªë–2Ï9=íä.=ù׫¯¨€#R•1ù1„BN{hµ·ï`Éüû'Dª_‰¨^,UQT–s±³°³>ô †&5½´:É¿#ð„ª­á”¦vït«®¶ì £j1ð~±Ñ±|£^ÊwüڵͻPöæþ2Þ—Q¾.ƒ¸2,½ÈoS·Ò¦O‹ ‹P+¬ÆQ³¨õÔ³˜³ì×Í]¢mk{vd™—DSkI¬¬ñ3ì`tma±`èÆýÚ_1ÌUijYò0"íÕØR»3êÅ®æüdã¡{˜÷ú—}~y'Ù·ëpKùêª7›º[³Ï©àÖá2 M±¢€Be²èõŒB@!³uú 0aoíɆÕ!Ýké)ëÒñZãdX^ÛªA¯`X`,èÈVUþ+<•¬Þ–ëîðXm³×?ÚÅ®/;Uåa«‡²cËk‚½]Ç%ŸGaÉ ¾›šÿfY÷ý»"»nšlê›ÓUU_„——ËŒìT~j"1‘”š˜°A·[²p[ÿ.nú‚äÄ"]BvúxÑ+\€a± °Õ?%³V§„(ª·GvàË©Ãz­À9 ÙxØF å®ùåöQ¾·N~y^Áë.ƒT®cKÉ?À¶»‰Í VÿsYS"/ dR©4uA&ˆAÏܽÊE9]òë‚ûGÅäYÑh–%‹sþÚVË`À°ÀXX‚\ô?aè¬ZÄz/ž×ÛM)×üQ¿¢jâacæ1ïBÙð-ª•{¼]ArÙ—q”ôu€-÷°wnVصèé´©{¬bl]¡‚S–Á%ŸÍ:›“Ÿw|§ sX°zéÕýÌÂïâñíÑxÜ…úéÚ½‚a±áñÀꓘë3}ßz»©-ÆÌQ¿¢CnqiðrdÔ‹`ó¼®í™Ãö¬/*ž‹BvàxŽÍÁ¤k*ŸaÛ\i}6(õíÓ¯åJòs ¹db%1™’¼Uy`³kc2’¦d4Û©êŒ1Ó+ŒtÃcˆ%ˆQñŸˆ„¼úߢrî=¨{ò¸Êf@Ýw~&@ / õbƬZö(Èû«î›d|˜`xUL–,Œ˜ïÓë+\§7]~xŒ­¡ãK¬Œ2r .N£$ì[© ß]³ä°rIFR0ç4&Ûí,pWÁ¢˜÷ †Ƙ]Wß%ä(xÕºÊöø®£%«Ûš÷!/ª,q2êErh™e]¤G¯ý»¸œ™1È.B©ëU5˜È·è°Éнj+™þåmlCIe KÉŠÍÅ‘p‘û7Ô£ö æ/7­ÊCí¥„ò j“ é L:ÌŒò‡'æ©_µ®Öß»+¶èPCmÒÑ.ѱQ/-”³%«çÞ=Zá1¬~Njö‘Â×v¸Ì`ÝhôïOm!± †Ï`Îà"J"vp—-l[‘“¼F¤74æ| aaæ—«œç °¿ÅJê½ÃÛ›Ó/Z ?ä]5ç‡4¾ÚxXsf]õª}½Þ9TÉÿ2ŠPhþ‹›zÍ·þCm¬–WNÎÀÑ3 iì¡Õ¢ík[ÖâÒ~Š‹Ì*–*3?İ÷íå-0ï Œ}€=\à °YÊà Þõ-7¯ ì:̇܇¾ìTU„¯iÉîdFò6ÿraO®Ç°Žù™y›³þ4À^¿ÂûŽ?lMŽB&'¡â‰ñ!»VVØfXBþ&2&‹W*Jµa‘EÜ^Á°ÀsÛÖ+Ÿ“ÄÞ]øjÈ‹ÖeÇ]u|ÐÊÒ r²ñЄÚ_¾Ê; äá ™ð‹h\z5bØ-a4[‹ôõ¢Ãz‡}ß]}—s©¾¤”LĦa‚Rƒ—¬•,ÜFÿ11 Å,âFgXØ †Ƈ—¿k6gò¿ˆ '©N (žÛ©øÃãdáéU¬øÀç†aÛWP c½FPjŽ$æú–u{ê³@ï^TPËÊÎ É E£Â‰ÇÖ”üº ìW|Ô)*©ÛT•:ºÊ¸ÃcÏ-StFLv0¹õ¶Snºø¢€¡fIið²ö°òé’Usï> ’+¾ˆ#`äˆa_‡åák7¥ ~b‹?ðœ«arÉi‰yèPtpäîUüµKå ’"öfi8«"ù}Ó+|ÚÃã`ÏfÈ[Ñó=´“-¼d¤ ¶êôÚÚ5Þ)Ñç71Ùs‘.ƒ(jrÛ öCnc•4lZ&!°‹¹c™ü§Àðµ©ØÜÔ÷2,¤W0,0Îö«hr({D^s—ìÉ#•Í€zØ\ùï¿$f£“rª“Éß4¿o_¾Ç°õß$g„ ÀŽáé­-agãÂÓ£#cN¤ïüUøÃöøÅI ïaXص†Æ‘ŸÖ­ÄófÇ`‡'ô´“{,:3p .Oá-ƒÕ'ï­^çÑëµ=ÞŒhB±íu€ÍõØÞ.J·9t9šÛ¡’æ¦`Ó0‰q;—ðæ® ÎŽ Mż£a6yôZ›bÁ°ÀxÑ/±‹ÿ‰K#C^îÝ®´éÑÏÚeº¼/÷”>ãØ«…² [¶zÊçà(¯» ^ØJßž›>åÃÿ‹ŸìéVe¢OãBNXO[ü eæ™À´I–ôŽm W0,0¾–3'ñ8¶_È@Z .[‹>ðÞ¡( ^ÞšìÌ ä­^ð(Pv﨨üó(\žÖ£×„ÂÆ]ÙÏŸkÃvEdþ”Ïóv…˜œŒÅ¥žÝ“¾v>}öÑÓIõ„w™˜w¯`X`¹Tf”ü;WŽ y¹q•ë0`?|äJ—(M‘¸Í`U«×x¬sAfá¦l¿eÝl°cx:«Š©Ä„€¤€ø‹˜ßï Þ¯*ƒÊ0,ð1y>ø¤j†÷êµò¼«×cбZƒÝkÎ>ÑQÁÝðóÕƒ¬‡'d’Ï£ñxå«eÝdâØ1<ÏÚ处DL\àžU?®ˆÜ_ɉ†ô †>&çK•ÿŽN¨D”×w‘é6¦}øÛ~ÇÄ. ^ÖQ¡‰Û.]³Å`;VRÙ 1~vxY÷à}©M‡†;&§YVHÁÇžˆØK\¸ ii8Ÿ•`XàcXÕ¯˜’E8dÈ‹·cÕ„¾ÿÁZžc+ «Oõn<¬ømAëŒÇ°U_'c„¯,ùÑ“†á=1cqç g8ƶÉK³ãcÃcV.ÄÏ9ÂÈ‚‘.`Xà£Ñ•W[ù¯ðèd!RößÛ×j‹½#]U¨u®Ü“âqÞÚE‚d—·—pæ$¥ š^X.¢×»·…8VΈc¯¤‘R#®%ÌÙFɉ†‘.`Xàã0tkP5/¥d9ñUÕTù«ƒ”¡6Éì8©ÉE®ó.”=ºÌ°ñ¬'Àjf£³N—xôšÂ6m #A€¿ó¤EÂK ÄÌ]H@EÂH0,ðqpgÈËþšRq—÷òwmO;éÜ}nÒdŸÐ¦j¥³×þpë÷æ2Á—Qx†YÖlý‚;~Ç,ÈÊJ YökÜ‘0hŠÃ'WïÊ~N*Øžƒ yñÊN“­®›*g—¶„5DnU®Ûá °æŸ‰ô¹¯—u“}˺ÛÝé°èp\bl³¤r$yíqØ †>¶(^égg_رý׺›“ ˆÝè](»m^Çö´ÁRÑ¢ð¤ú×˺™¯Çló\<Øp¼Ì¥fÄŸÁþ¼ÞW9é L/Þ”ý˜˜»‡º)„ÜÜ%»~•ç4ŒÙVWyÂVkæ1 æ `õÒG2÷’\Ö `7‡xl 쉙€óÈ%*BŸŒ8ºç£Ò+˜PLa%žˆÄ“éòsðÇäžm(® _ÝÉŒ”^jÝù(P.ÿ<& ¯ò6_ŸS‹'ì³#ÒãNÃÝ+˜è+ù!1{m{xÎÅEß…"·1}̾±ä‡6´æ‡pÖyÊv®ÎçüŒ" \xsk8¥³W v¢ ceÚÂøüäH¯`X`BÑ¢•y$‘ƒ+d dmÍ ½.UEøjGö‰ºˆMUëö?’×~“œÊ÷Ø“é¢ðŒ°1¦CÑ!"© P µ¯·x0,0q<èº"G:T°-4ûÆíš‹çhc7’µ«'‰Ùà](»eîÅ=Ô«¿ñ¸ßÆ¥qìx~Ӧܿ.Ùð¢Cæn3,:—]ç«hõt´Š‘ÓévÃÓ†&ív’à˨ƒq¬< i1Ã*ÌîFÜ^3æ`ùÚ•‚d柹'ÞeÝÙòPbì‰×Ó§.l(LQf9´†ßÿu0,ð¬ø›\ ó·ÈìÁ‡ê®¶ì^+}¬ÞðAG)ÿŒ· V|h‘}c܃ŠGb ŒÃn^Ö {bÆãÜЗ蘩ò‚ \ùâù xÎ0ìÇàåïµ[2ù_FíŽa”*9¯ú©RǰŸÊÁŒT%ípçžâ®ýåÞq¡cAfá†,^ÃÈÊ@4ìxœöR +Ï'*øÂ‡Â3€a?7´•3¢“Ñ÷ÄŸ 5x[ Æ´ŸJ·ÙN¬9³V½ùèÃ2égÑøÌZa·EÐÌb^Ÿ=­ƒ;Vç¡Shå”4¼¼„wïö=x¼0ìG°u2ØßDË5¥·o”ºÆbì›Q/µTaØêŽ¢ÎæŸ.ï.h[žW¼û*ÀVŒÞux¡'¯Ó”rüÐÜêºÊ3ªih›3pù <Úöãs­±]8#:ì ãx eh¨ÞiÁ\wðÆðµ×f4`÷é~­ßð8H®ü,/BvŠëÊ‘=1j¨]Šõj‘tHrª©ÉR&«³¥ >g`ØÉ‘_Ÿ½¨^OäÎIÜEÕÛËú/1[Ìcyú´U"8»´™z¦ü·ùm[0¶°8sÓM‘y5»£ÉȮÞvr— 6u¾} [A©¥¡¤……6½ýù³çðT`ØÉÂUSÅŒèð¨’SXÊ“'µž{¿Y8†ï+%‰Þ`O;ÁY3ïþ QÃ씌“l$ÀKø½>}RcÓÁ¢Ãќʋ5ùµ(I¥Vª~p>g`ØÉÄ‹ÇO«WàŠ—â¶†QÜâó]”NëïT¦üfÉPž\¥ÛrææþrÁ7±„b[l~þ؜'CÞ{®#眥tù¾g Q_,¡‘¥<ÉÍëwàaÀ°“ŽóBKÅ‘QÅÑYù*mú±Ùbà;wM%‚³ËZòC8~¼z Ø:—˜}°À`÷& «½zþ£V-,:|¿sµ‘©e¤J¨™bŽøò…¸rÀ°“‘g÷+—céK°[B²Ï÷É;[2/Ø Çxœ>-¸:i»&v»læûG*+ÿÉiHdè~‹"?yµ¬»³%«×Di¾ëp23ÏÂÁË(QqE‹³ ®\0ìäå[[ñyäÑhVZýî­1ÛbðæW›”viSÞiÁιۈ͋ɌÕéH€eTòëƒ:ÿñܳ lüt-MÄàš4ÎGà €a'//‡ž)¡ Ö¦íŒ ]¿UÝîN¿Ò4Æ;…Xqôz[ÚQÞšNˆåŸÅ`± 4Ûº=,{ðQ=²'沕öüÇöWY¦Šš*¤³ëäz¸rÀ°S€nFCÙgC ©Öõ«¼&aÌwª0»õG¥Ç—éמì^SÀø%…Pê:Šá“¹%ÞE‡·*ìúTXtøw›Ü¢V¹ŠŠª¤3õpå €a§/?•-DglÊØA¾?Xç0cn»Ëƺ)^À;½Ä{ªxíœëû‹Õ_'§Å=öÕ\ÄZa[œ„+Xtø—;·;e¹µ%æ)áÊÃN%\x1ï«Èß Ønß…Â6Kö˜;Â^¥JÚQºAµñ·¾ílîÌØ4A“'ÀâèL^o^/u `ÿ¤} ]Þ£ ¨ 1J&Sʯ2k›àÊÃN%žÝ,›‡ÊØšy0ž|÷®ÂfHl¹)D1¬¤ ÁŽŸ{vfé¿Åäe Kl›‚I×oÕ¾|Ùè²a¯:JÀ§hèP^®£7¥* ©R^UÂW®vêáˆð¾ŽÞ‘/ÓðÏwSº­”±/†¯£•/·`–®]|siÙ"ñ Ë \9¦À`¯ô—¸Œ°'æÛ L5‹¦¨T•på €a§$C7î‹LLÞM:’H¾{GbÓKµ¿–XÛ'>¼È²)Â>/#o{N*×±)„|i@…,:¼é€Xý'dW3(u•jyyCg[/\¹`Ø©ŠþƒóeäÖPŠÁYÖÙ’yÑ6öÅRH¬%ã(gí×÷rÅŸE᩺@‚0–ä]sý §yì–×NésËĵðÕ…éja­¢¢®\0ìÔæñÀщñ{HaDê­ev=zl[ Þ”ÁF®­9»®zÝn÷"cu:žß´1$·ó¼âŠÄ¾Ýô©Ø»O¨*H«¯TÕŠ UæÛ7ïÂó €a§6 ;I%³b6‡æ6wIZœ„{ñxèC…Ù­ÅàmùñÜv²ò?1Œêt†$,î °ý—˜­¦OzOÌ SØ,̪¥c*åj‰I%Ò^ìí‡+W ;å¹ß1 œ{6€šC¿>Pâ6Çg7”€wr±6~gùÚå=ëèÜù¼ iS(ÅÑ&÷nê6£[*?Ñö—¨M”Y[Z_!Òªlòò†vwÏÓ§ÏàÉÀ°Ó$À±=<·÷¢ØaN¹ã—ª{Ë`·UX`_ÓðurfhiIu2•úÿ§½t¾ Õ˜ý)–¸¶Éz¹ê”¦¬ÜPåTT4Zt.˜å €a§U€­˜t˜Ld]>Oo3“ÇÉ&¢˜ :ôÞ’5?^ÚÂÌŒÇqÛ#óM.ÑÓ¡»Ñ`ÅŸš[Ï)) …)jÛR×T#6B•+††ToÎ`ylXö•+RéŽC‹ÁpìÙeU§V«72ÎÁÒ2ÂrªNá¼%ç:s»Çz¶÷d>/;UçUÔ:ª–]hopk”vµÂx±·ÿÅóð4`ØiŵÆö²Ù±GåV0{»rz¬´qÒŠ–¨NÙ]²iNÏ–œÊÏ£q,ÛÎèBc“èá…ݘ2Ô&ýDÚúë‹ô,t]qž¥Ö¬¯mVUj;[{Á­v:òò÷šÍ?ÆíŽ"_»Zá0¦>ëPŒË®S·¸4xyMèúÊõkó3™›ÈQÔº@LÞË—=¹=–¼OÁ­W4 #SË ™kÍÖ†•Pë4·=~ôC ;=¹\í.›µ'(GÞÀou/ÙÆkk /I»±bFM‰²EárvFÓu6Ñ£A¥Ã„j曺o¹VNju!Ñ ¨oÒõT‰ ÚZëÝ;÷á À°Ó9À*VáóçÄŠ'ß¼Qá4àÆoœ•,q›:~;wÍ/­Ër¹Ë‰ÑTõqT®'Àv¶fŸ·Oç=1·Ì\_[ˆ×Ëk[-—ÔRKTßùT¹`Øé`K¿Šú-€¬hä5;ð×\¼ñJp:ïÔ"Eà ͦ5ŸÅ¥¥È½»kø÷n -ZÔtÝ3è(w—âë 0Z±´Íz±±ªIZVßÝq®\0ìôçÅã§žK\˜|›Ó©¸Ù@?טóCª¶•l˜Óº2Kð*‰¡ÛKyþBÓæÊè1L‡M•­ÂŒ::º¾\Øn½`iè–Ö;L­på €a?: êxßDo "Y]‡sw¬·øW&•‡­R]-߸¥ñ)˜¿?‘]^Svç–ЦÌÇèƒx7‹:%Y ‰j>»Í|®IN)ÔiªÍ·n@•+†ý”¬h)†° B ô](ê°äŒŸt.ÈIÂÐUå»çÙW' ¿ŒI.ÒíÍ}þ¢¡¥)í¢¥h:µôª(õôäZv‘[×Þb¹X'1«DÚ¾‹W^¼x †ý„h¡Ts¾ˆØzšds ìôÃfÑø©GM<¬ ÛÈ[7ßôž¾¯À`y îk|»==¬çOq±šÖX˜T_LqéZÛí}j©UZVßÑÒ3ôä)[µðgqk8¥¥³ÌnJyèž¼›ºoØv.¶ž•i©± n}}åj¸Ò! ü%ª­™ôÏCÈy­MÄ~gÉxÛj ŽÆ9¶ dÊÿc…iÝíäsöüÉéÖ›F®ƒ—Z_DÐËÕŽ~[[m—jÅfyyù΋ð9 ÃG¿º•3#êÀ¢Ö@u›Ó& ÀjIÅ»¾—,ß%øå °+gn~GqîÙîR|oU#nE®\¥‚z·­:0,ðO¼ü]¾>-wvdt&ÅmÇÞpòÇ[[OÛ¤¼“K˜ë¿V~q&öH^± £%³Ç2¹Æl?j· 34EMye»õ²ÿ•«Nmpÿ!<8øg.W»KfDì4Ù‹¢ŠwÌ)›·‰´Šp8!§¹‰Øç,úøíÌuI¾³±qëð•+¿Áªo~ôð1<)†}o:ùúâ/Ã÷Nw:Ò/Ú 'ÆhÂÈuÌu3+ÿ'p÷‰ìRÕ®Ã|´ÛUuMË4³SŠIÖ:»Ï­N}¢\§Vah €aG›_‡žy,zA\Q)Åa˜ mu4öÞ¹ÜeKhs“'ä6Ùñ—¬ŒUâjã`4l’A¥ëtø®\kD&E…æòÅ«på `ØÑÓÊj`~¾;8ÝbÆ]q”LŒ×´¤@Öæo+¾8|d'/¦¸ÍaÌö3Ïå-qÅ™TŸ[;ý¥S¯ïh9W®†ýÐ[º 9~q¼@Jv'HsOÛ¤%‡­˜Íž³#<ËfÂ\wñ'´ÄÕ%j.Ãk˜8½´ºÃÖ7âÊÕnh+WÃŽj{ äIDAT‚¸ð«ðqYvsêýqë_ËÚþÿ§Íëp$fV³yâÆl?t Û„éšB”A"ów+RåZ+7ÂÐÃŽ /?,LŽ\“\.!¶Y²'LsФE«fòþ}j[p–QŸrÝÁž˜×.Ivca²NXî+qõœ6ÛåZ‰UVÖpñ\\¹v̰b„3ÂN%g[ )ƒÍ4Œõ®©¤xÏÜ’EËR—¢°yÄVsÆD´()º¢d]§ÕÜësk‡£¿AáðÕ-,`Ø1eèÖ ÿÇøèI"9¾ggY™óCŠÖÎâ}vpkPzƒ:e°e¯&^vª.TQ Œ$­ È¥kó¹¹róÔ­kè ÌÉ0ìX£9UDÿ"4aÕ¡Ÿu(&F¯åq/È_:+s^ž:ŽWžÿPŸºÐÈBéø´&m‹¿[½U®eZµÒtë 0ì8ðxàŽ'ÀžÙŒ®®I½4Q-ÈÆCæ–Š¿Ý°ÿA3nv a.NÖ–j«¿[½ƒDf…Pséü\¹v¼¨Ù›Cÿ<EÊj2á^t*'̰U){ –Ï*˜ž•Þfû{ËÄuòqº’ [­Ñß­öþz™M*¨ïj…Õ„†×Ûw›3;úÄ^l:媓;qÃÝbÖΟ™ónÃ(•ÉC­Ò±l°ð]|¬–…µ(ë Ù¾cR·"W®På `Øq§zW6õ‹|ÑÛb0uþ-¼¤‚³™_8•œ6†{b­B¢†¶ªT#Üj×vÉʪÌwï܇¿wÃŽ;÷{®0gG9„ml@Ýu—O¤a¹Gå-š»&I&G=뎅[…mB¢Ž‘lU´[/ù»µÅr±ªÒ¨é`°€a'ŽªíYy_ç0ÓÚ'°ÅÀ;`EÇ¢¯›S4kKP,öËÞµÉÎ)rõ ”I\Ún½àïÖNç€Fé” ê;ZÏÕ+€a'Ž«ÆnÆÌˆǰf]òÃ6ÑDVƒ?–·xVÚüˆŠÊÚó¢C‰”¸Ê [-=þn, h056A•+€a'Éù«v)îœ}B· ¾ìT1vüB»àP ê‚“>êÿ‘‹U4#3ÑXšß¬oáV—¡WY¡ÓTYïÝyцð«ï*œqø$άMyÖ!ŸHÃöJ²òKúî¯ 5šâ°®ªþúB ;ÅÀ#»µönm±\¬™ª%z¸r0ìGC¶!-svhi%¦×JŸàI¬¼£KH¿ÌÚŸpÙùÞc¶¯ëŠm%)†’Œ¦Fë·v8úUN _ÝÞÜ W®†ýhô*œŒa‘ø&v‚ì[L]ü}Þ¬ ,ú½æÏÞ6óœ\ŒŽæ¨7v½ží;Fu«´Tc7Â,WÃ~l„kqø9á•RÌUgÉX398kÞìÈQ}vÖ;oà7—t,¬£Fý¶[úny©VSe…*WÃ~|z„æ‚o‚“Ó\†´ Ö«çÐ7ý’ýÓÜBVÊ»ÜÀÞ³•µ”§˜(›R1¢}¹r­›U•Ú+ý7àÊÀ°“€—¿—¯Ä¤þ©T¢n8¸¬×kõôŒù³Sïs²ÿq³K»(ÃÀH²HíÖ‹#ÜÚnïÓ(²²ús—áÊÀ°“7­–öMX ׬ϘøË9°"cîlrnÊßÜÀ>m•uIIºÂD“ÝfíáÖNç€QÝ*æÖ9L­0'À°“+Àò'G­¯¯C=l®œ`½¾ìT¥Ïû>}ΖËö?°ÏÚåçUyF‚OkÖµŽp«÷ÊUÛ-å7èêìPå `ØIGS®Š6#M&t›s'>ÀêÒÏç~™ðçíÕ43ÑÄÏkÒ¸Þvk³ù‚¢LW%Ò]é¿1€a'_~zV¼01|c¼¦îƒUG}2ý1ýçºu#k`¯x'd'xd—Æö¶[Ûí} ‡TPßÝ~éÅ‹—ðv2bH*#Í IËÃ^˜ðï0l]qÚÜo“÷ýá×–åࢵ¬4Gîm·v: 5Í"N­ÃÔ ƒ ;©lÑÜØSÛš÷«ó«CÛºØcØ®Ök·²›ø gQÔ¼]†å9¶Æ.1·ÞØÐ†ì4žaä̦0R¯ØK&^¯žC˜û-zå¦W›]xMüÔÆ¢d“¸²ÃÖ÷¶[]Æóò2]Ôx¥ª\ ;éyúàqþœÈ3ÛœzÂGÑ« ü0á—oõ|rKyšž‘l—µYÏÿé•k­Ä*Ô÷t\·vj >BËþú “‡¹éäÃâç~O˜û“®0Î$,i3ŸûÓ+W­²IÌ­sšÛŸ>})€a§.ÜÈÿ>âðÑ”fCæGÑëµFî—ï¹qaÍúö·ÝŠÌÉsëµµöÇžÀ `Ø©„rgföŒ3å"Ô`sÅ»õI³¤¥œ`,!4ëêV§¾G^ªUËL7¯ßGÀ°SŒ»ç®æqü8ªË4Ñ-W4L+Ù.«l·]~Û­ÈœlYÙ«*W,`Ø©ˆtkzÖW§¥’¤¡6É„¹õq‹'º¦™8é-z÷Ûnípôk”N!§Öeí·v XÚ·aag“/X &L¯ 3É©ÿi•ë«¡-õF T¹vŠS¹ O˜}¶V‰š˜ƒ×Ñ•Øbüó¡-òRmÔpûÖ=x  ;µhhËù64" }ÅÁž½ö© MÌd›´¢ó­Íæ ÕB“¼\s±÷ T¹v:À]Ž"~ÖÜ€o·>r‰šËpF±Y7òÖµÃÞß pT”Ô¸lpå `ØéBo•+÷›`,u·¥l¼£«‘‘èTV¾}ëjiè¨äÔikmpå `Øi{iRÚwgíéã]Ý"—kâ¥7FŽsmÒŸ“•jªDºëWoÃ`ØiE»‘4ë,5õ¸UvED—e\Z 7‹½Ñ•“Þfl1X QåqëZœÝ°> À°ÓIž5ó49.[ ‚‡¢|Dt5©[%¼z“ÆW®†Î–úSTÜŠ° ¶1ÞbðØå½u5sˆm†æ?T¹ê»_Ír5À`¦¹a­Ù2ÒW§ÊËÆ¸Åàr]‘™èPŠü£k³ùBÈ$-­‡*W¦¿a_>{‘÷SDüŠð«Žâ1‹®n±»gæ[ý¢k»½O£tVrêZ]=på À'aØê´Ì™§dbìFW3Ñ*+ïðŽeR· Ù5­®\øT ûôÁãÜÃb÷EßmŒA­k³¸Ij*IsëœoÖgz¥|MÌtëÆ]xŒø„ «:NÍøæ¤®†8t##Ñ.+ítôùª\«…&EE#\¹ðÉÖ`¿=‹:ýZ†k]‰-¯o];ÞÁ"®÷Ê ð)V|0›üUP³þZ ºª.VSͬ$›¬ÌW0`¨iqÕ­{hè)<7|І½{þ:ùÛÓØ¸ÊÑéõaS¥÷Ö•ChÑ O°5vIùšz¥åÞAxbøt Ë[ƒÊü&¨ÇX8Ú‚º‰™h]]Æó*¡AQÞxµï&<+|Ò†½Ýs5{ö)2&~-œÂ&ÆXBpi¬¾*W1§®Ýu>g†ý?öФŒo‚ìïÝbp¡Šjd$Ú$OtítÕ­Â’Z«¾:Ãz¹Þ1@šuŠ‚M~¿èê¨prÑFNz³®YŸ%æÖ×+̃÷ÁÃv˜Ü¹³ƒ›+ß'ºæ™˜‰6)¿Ã~¹ÅrQ%4(+´×nÁcö çTŽìY'ËXØ÷¸uå§Kn­³ÍvY£tЏêžöKpå v$9?‡¥ýxò[ ¼+ XI¹·`@_í–ÔÚt­Ož@•+`Ø·h›²f©J3ÿy8V‹ÄÅO5”¤5kím·”¯ÑTYÜ{Ï`Ø?‡ôãYo€íÿ½^/Õ µ®.C¯ªB¯ªÔõ]¸O`Ø¿ÄHWeÎ ²Ë¨]Ý¥Xo­«Ö©–ZÅœºžöËpå öÈúáTú“ߦe`$8ä"]U“°¤Önl{6ô þâÃþµX~Ö¬Àž†Â¿¹u5qˆFE£˜[¯V˜áÊ0ì»ñò÷¬ïN¦­ ùë[׋ˆ¯,Ó*„º+0X0ì»Sz*'{fÀ5«ð¯æºÖ kÅܺž¨r û><òÔ`i;Bߎ®FF¢šS(.©uÙº`°`Ø÷¦d+*ãÛ€.Ñ X',5VÛ?‚¿]À°ïÍÃk÷2¾¢žˆõÛ¦Uh(J¨bÕŠõ7®Þ†¿WÀ°£„¶ ,㻀¡Vùë[Wœ–‰³%]-àÊ0ìè¹sáJæ÷¼à$$º‰ÕÅt·µ V†ýPÈ?Ξð°Yâà`™ø…fðÌr ûÁœw´g|ÈON6±’êxÅ×únÀ_!`ر!óû âìc:&¶«©þòÃŽ%ÄïOðQÄçOa°`X0,†Ã€aá'Àa0, øñÿ¡ïyÆ9G—BIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebrafct2_01.png0000644000000000000000000000263111722777314023141 0ustar rootroot‰PNG  IHDRúúŽÍjtRNSn¦‘NIDATxœíÝÑVâ0@QtÍGó |ö<0:UÚ’6ÉMšìý¢"(§wÄòq£¤ûÆéÐ[Á†Ö7`[¡/‰¾1¹çK }IôÍÈ=ÇÑЗD߀ÜOËiýIñÑä~N~ëOŠõÙú\Q©Ö‰fºU¼u>Žé~ˆ¹~m¦{ºz­ðAL÷DæúL÷­ðL÷·ÌõqÈ}ŸÖ‡"÷ZÜ·h}@Z߀>•lý{Yž6ç•™WUZ_ZëÞ¶Aî¿ToýÛcç'ê°3³º¿n''žéþ­pë÷¸é¾>¯Ì<µm½Îà…Üo´N¹k}"“ç®õ¹Ìœ»Ö§3mîZŸÑœ¹k}Ræ®õyÍ–»8§6Uîå[·õ\Ë<¹kYr×:·Û¹k†Ï]ëü7vîZç‡s×:¿š»ÖY1dîZgÝx¹+“Mƒå^¥uÐ0FÊ]ë¼1Lî=¶îȽ#÷[§CäÞiëF{‡z=ŠXêñæ´Î=åž^Ù}ñ¥tYZX¹Ÿìëþëk‘Ê´>¶¦¹Ÿkí’ÏÓ2rÓúðåžUÖî…³£?MëýkñÊL½Ö3®ÂKì3Ï= õºç]¡õ«ÌýØú‘kL^îzÕZ¿¨ÜsŸf\>aW?ªG’{ÃÖwߺàZêçÞ¼õÅh}B¿g¦ÖÛ´´>§Ê¹?7M[žÖ§U3÷®ZÿZªÖgV-÷[?°l­©Ã}÷Š­§-Zëê“{Ù÷~r_ùî•ÖGÖÕt7ש«Bî™ï_¯`eÑ+'Iz|L÷~çú›ßq)=ä®u‚”ÎýpºíZÿ÷k­O¤ít7× Õ0w­­UîÍÑ¥õÍ=µáº­',ý«çµ³j}`ñÓ½›ÖþŽë Î]ë´™{×­3ƒ°Ü{oݦ0ƒ˜ÜµNr×:½¨»ÖéHÕܵN_êåÞõßMßÿšͽògÈ,½»‚´Ö%?™Óý"­3Ÿâ¹k~•ͽ÷Ö™\ÁÜ«|ÞËìxÝ͘B©Ü/0×åM‘ܵÎ5äçþ’bôçúžj]þSÊÌÝ\çJrrßN1(±³­Ûfu:÷ˆ÷ì^‡¹ÎaçrøÏ¡Z­Û&v"÷ˆÏfÔ:5Íýà>Ì©¼2[¯qQÆp(÷ 쯧ž‰)¥ç~¶õ#õUlÝF@rîys=-5­S[Jî%öaÞ§uüyw†rûëÍåÕj]èü´?Ý+<7=– Ö)i'÷j¯Ãü 1ó­Z'ÝÖÎLå׿vlÊ·.t¶­ætÌŒûæÞü©Ö…Î;¯¹GµþýÝã×I³U9É~åÞúÒã¶ÿ¹ËsŠœ–¹7mývû1¨wsÖ:çDXMþ¿„hÓ¾soûö/­!nºkæž¹7«¸‡°î÷rˆ¡Èý K:жPC§EÎ4©djš¤îÁH0†"M›XkKk™TµÏá¸?{›Å>œÂOà1ÃFÝ.¼¸ ¨¡eÖò.ËÓ~ ,µÁ-DPA ¤2‚bƲªV+Ri›#íDxÔ@¯l ”„GÕPÀ }b¦Í+a£~°Ì>aën’ý,á.§k g•>k/†—á*ìÁ (÷ùïx3jœaر†š@ ™ü5¸J+¨ „RùOx0[òÖËÊ:ýÉäQ¹>%¾W¡‚ŸpöŸÂ3gUÁSè7­V ÓâÇú”@C­p ¬Ï(àZÈ 8apFÕ’Žaˆ52vá| þ Lx¸Ï?a oÁöù¯ †,åe¸©FWÁ.ÃM@ ó9ŒÏ8íúÁ¡±ŽäÊf4•³í•f˜j9"Í?…ZŽV¡vkÝ «‚©ÕÎÈb·”ÚÔ%œÂã3n”ðUø2|ÝCøœùhѳõ 4p¦·ù“}~Ÿ3hTáákX»ñcêÈ‘æPhÁ‚áŽå³<‚ÈasFÁ¶[òm˜„b`&pÓϸÏ ±šk \”è` ­þ5•“¯`¥Y·v£ Æpá¼¥„ô2LaËhwàçá¯Ãß„à|oŸÿ¾@·á õ?é'6Ô”Â*sÅ¡”Wáªæ–À\‡Ç¤g½• …ç¬a&Ûê„ ­v­”aÅ›ÓKôâÆe"L…pµÕê7‰ÞÕÉà(äŽÌáþŠ—þ‚(oÀ˰Çô˜—ÐÁLƒa@oC±Ï?¤ø.ÿÊŲðSÀ±~u$ÿ þ¾–$ŠË!¨ áÁ¶ UHJÁ‡Pè±C½=&0§z÷ͪÂúØë#ý/ròð÷°øµü7)ﺰ Äîôê+°SHa ^‡Ÿ…_…k·ùtŸ?†Nàü˜æ”²ˆálsïZü¨$/ŸÉφpv5ãëp®3<#…&j¿ÐÁR0ÚT ó[ÙŠ,¸É‡‡¸Î´L©¬0 ‡b¢÷ÚCÈùXj‰çï0=€Ÿ…]x›ïô¶ûìvvþ¸u›Oöy‡G°…‹Üf®=•¯µp*0C¡|ª•™Â a µ^Ùj›Çâ0™°­ ÇzZbðûÜ…c™¬M9˜fî¬*Ô͵ !ú— 1rqÙ€R‘"@%. å× ƒK0†—àux¦·~~/ÃJæ§<€îwÜsù ÚéV¶c˜ÂÁšñ}¢ûý„·†ð¸IzÄüYï1KGƒr˜Ã9¬!‚mØ è +ÍÍ$uTÀ!rÜ+•¥ú×fÓ"M¡–‹·²‰pá÷øöCøë°ÅôKð&ð2Ü‚oÀß‚_¼ ð9”Là%8’¯ZôRd#@ÑF°V  ޾—á2\áZª55œÁ\±fµ‚`¬À:PÄ/åu0…g<=ã3(!• EÂ~dŽF› ì„£U+cØ|2Ú£¨Ìªº‹äæ× Q¿×`ràßçÁ$p †ýÞG°R¶µÒ”XA Œå4až3‘Œ ~²æ?dðx™iIupú‚Ü EK—"ƒ—äå'úe'ÿHdR±V¤’q·ú½'º*·²©Pm¤1/ra}gp5¼×ðö§p .Á x¾ ÿüD·©÷ù¸·¸v…âYoU¥hbxZ©Ýš;Tjäa¨¬æ×`Íê¼§ǰp›—ËJ ¼SãB‚62Ö| B–ê]>¹1 ¢Œàv.wÎ… »#¸ Q*v[²‰W¤| 8„9<„cøtŸ÷à‚wa‡ð2¼Èö‡³>ô¾èXðÖ°‚¹ŒàXkÈe(•¶ïÛ°K6èƒÁyùÌÇ";-ý–,©É­77&‡Èå€V"g‚Æ—»MÇ á¸R Ìôû€gpiðÝCØx~~ nÝæ`Ÿ¶Ï߃;ð*Lák nsXôCM`©]ëƒÐÂHô9טúÂñ§pGS8PUzcæf c"}PiBýŒûÊa Reæ„Á>B[b[—‘ÇÀÀÕ§B[óHÏLù ÂcAGÀÇ?ƒ?`^3Ý5øœsõ)ûL¸Šæ.@iE$3_Kj AzO*®Û0îƒöäal•šHAi%ÏL!1øÍ7õ*ó˜Lë+ö˜¡HÔé/{(‡' 5øNƒ¹»HPúü2¼ %üÓ}þ ¸ Ÿ*®¿UÑ/[,6³’‹ÏÒÁ¶,{=€yÈä$ Ì`åP-wNb{Ù ½ÂŸ6|OaH‰ˆ5)ãa@®”o×ÎXƒ¥æ¸,~3ŠSÎõ–Ø­v¬KùmøLfvŸê/8»¸”÷sp®‘>††“‚¹–` *Z‹š¬5šRÌ:pˆ%ÁÓšícFë>^‹$†¿„±n+[Šõj¡Zä–5’![Šd‘ÿðú=-t` 1œÂáêžrÙ›ð2ð6ü øuø|ÿ7ü?ðS6äCœjH–6²’ V°„µœÁ´žZ’ïT€Ræ C¬µK¹®v°“ËÕòí8”U ¥\Dc"ÅÖÑ)6oùidŸ2§)™É:3‹3ÖR¾ ‡ràˆÕcãúm DôÛÒ4ðŒ¦è‘<,ÐTË×J°ÉÐ’µ0ç˜Ãá’ñ’δÐsé©C¸¬k­ÀiYѧWŠ\—ˆ%rÓF±Ï¢öBfÀU¸|Ìãƒ~¨±þ˜Š=}Þ‚_€nÞæé>¿ EÃÎ+&Ÿ‘ä¬K|y&nÔÔ+µ(|¥po\»TL„‘\¨‘nés!îÚˆLëÓé]æf´âÍ…jÕ6rζ¼®ÍÚ2aTDys8`ÆIÍc¥)ú¿cø.Ã.Ü€›0ïÙÉT ¨I¨èõÁ¢O!$³(¶†1Ì`[/XKj]ˆJµÄ†d¦ –c·L¶|>Òw ï•–, º] Sx ¾Ùs–'<®8»À.\yþ6ì×ànó"èx}‰¢¬9€cñî‡e_ü RºØ7‚š.ÚhW"gR#媜 “I°ÿ´ß4šxáBgª ´\–—Ä›úŸ%F‰SIÇ7ç49ÆçC–I„ŸRžR®ú©žÁC(`"*×çugð> á» ÊŠ-í.œùaÙÚçX*ü™°;nµ°+ôjE¼Ú͈f2f$ÄžÀl+¿+T½LEŠ+Œ›îΈV’¤æpÀ¥÷ú¤Áª^‡ÿám~ËV€ö`KNá1A,Oic aÏJ¾9 BaÒ)©i´ Wv+”I2MdªÌ£<ãNLµ–UUڣĭdê0²Óú˜ìRë£C 2Ð7…Nñ·ºX ÒùŠgzè޵÷açÖs†A³y 7àŠ 5o ä÷à°ÏXmoKå«‘¶ 17¡Ò$ÚõJEÕ¶¢ âóØH 1‚-ØÒš†·lÁ.L5+h_ÌÓ¬–Jr!$>€ø | ¶ )¾ß—ù¦ß„ÿþÎm7¸³Ï!õ8Ж<âÖ˜ƒ)/òÖ°PÊ™k¿#·ÙVEˆµPS¸)œkS’Y¥¨uo)aÓŒººHýÁª•ô$šør—Í!ÓúZÖÊqã²>ÅîL;—¦'pªrZ…2áÖ§ ƒJx×Tûû&Ü…»ð)A-<¡:&–q,´Êa–n¼UÐL´­Ô[¶T6­6Ã_°ª ¦\2L[#x ^Ð\†Ï8Xr+¸ ç=ëÕŸqå÷`¿¿—ÁŸÃï÷ŠT_* Võ»û|ÿxx•ø ~ÌÆ²¹Bºn¦p- XÀ l‹ âÒ¨¥©¨li¥ LO'ŠnC‰•Ìwl“.9Y]t…DÚï…Ö ¸»|Ë£ÎH€‡Þq+Šœñ…môA=—?V¬+\=r$½;øù=¶ƒNõ ~~ÞºÍñ>ðîÂgpì Ü…8¨x '‹C×ÀL­VôlÄœÒ#Z‘ÐPÙ©Ý<æ”À`;ò†‰Š^-Á¬{="ìS&@ÁëZß ð ìÁ9Ìàü5؃G°í6ÀïðŸÂ¿ì¿ ¯À\MA iÓs„J›É[VŠS©ã"ƒm†WVŸ(w™ ¿±ì8Y^®’v!¦YõÂÕP‚öRI娩_¹¶`íúJ¬¨jñ‰Bº KŒÏþø|³G+ƒ„(“˨Ûï°oÝæ“}>SIélÁ x —aÀµ9õ‹¸’ wJˆ2-P V \øÂ5ØS.=wrÁ]Øi ‚m)Q?„§Å…þ2‰©ÚÞ¹çpí«Âý}Kø.܃Ÿ†Ÿ‚·à-ønïó÷¸ÿ¯9ƒ)¼pĨUá´ß“HÕ½LÈÑɰÖÚÈ‘K¯L&µt 9Ìv฽n£‚Q&¹ócˆá8†%ç5‡ÀuÁÝ„íÛüÙ>ÿ¾Ç\Uý^â?¡=éÙzÏveÝ£Ô©,` (M¹²`ã¬Ê²ýöàux€G*ÅÄ.è$‚®Wà2¼wQ.)áÎ&Â*kËé„FkY"¨3ÁÒöȉÄ\"EmËÊ;g©ÆXÒNªÕ%x&Á†^T@ÀuxÞ„|LõN/~–¤’~èº/ ¥[L Ú9óª×ðC ;àTë«áô²S5#'J!»µ†­%ä°€×tpGÖfm6Ï`é’íU\ý€ì)Nèà`'DÃæß€íÛ îxÊDfŠ)ÖR‹J3€mòͬVškà ‘Ë¡‚fáJÁva$Ó|DãLwˆUÚº¼ ÏX®ùL”ô\H9r ‹UZ2-cå —&7 dšKS%⹂‡µ.Zh)›âVi¢´“ðŒ8M=W‡b'ðCø“^î*…­³ë;“¢/öõ±|n0Å ¼`¶àD©ÁÕ¤=O¸€?ë1…ÂHe­ôÂÊ”–¤¤RM'*©þì¤ßS8PÝà:¼ •~õ>3Øb2¿H|N”è-¨Ã ʬiê`Fb'ޏTp&ñeGi¸Á:âNá)œÉ©3—©d0 $öËÐÁa?†Îð\ú.H… ísYÏHú‚©–Åyä Vùö–dÎï,mäF5œ¶ ïß%‚ÌtÆKð‚#øÕ»üHfåDäж­KUx|ÆôŒ­ s‡W<ì‰×ZQ9µj 0CãÌå&µžŸÈã­Š‹ž¹+ׯäg±lk.rmx9 0ð˰{:¾»Ï?îý4:ƒ§sàá0H OkŽ ieñ(e áÛR<“¯:—âuª=ÌDŸs!\ðüK¾ 7àCVy¢ñR"ù®3Á%ê~[;áÚø{ä´ÖÈ‘§TO,:çÛ‰#7…;’5ª†ËC¦ ‹¦o%H”-v*òXcP£¬ÂÂv!‚•:±Vj™º°’»*S'ônÜ^NÄ·à%¸2/‡Ìå6tüxŸß‚Ïáû4½²ºT©*UP°œk­rµyðRV ± %Œ¶ÖóH\ÆÞé9CwÎ% ¯0xÔ·Ô.]{ªUú"Ùeã*§^¸*µq–´\‹pèõH¥–7wñÁÐÁBg ©‘nK§¡Mò |U:÷-Øy{=8Së™M£–˜^9\Å¡E#Ô;hz•?¤¢­ò¸F.ÁeÍ?×pK'Í× ­3—Ü©ncmã^¦+†õzICÚ ìê2\ƒ—Âjíó?Ãg¬ÿ¼?™œJÙ“J-·IÕ¥«œdn¡[½¸qVÕi/íœÕ¡c¹G#jz0c0ëqúžÓ– —Z4Z"‰³T›~§ß›ÝØ>ÚË*©›…œÇÊü÷X«¹á>1‚tGh×\Â/À> UÆ{ oô]¹Ñ‹Ìõe®Z»NTËl]kÞ@¶ÛHž¨Ó¨rKj«W7›N­ÖsÁÄ«%B8 tÕr‹HK5¸¡§å0Ø—á\zŸ?„wáîÃ}í±=$ŽÖò% 7¥âXN¹­ fWÈ"ÍRהѸ¦uëm As&#üO5žjÓL;ÍËpÝ>(‘ßZB€ÐËæhòÁÚÙn@Ç‘ S7=¯5¡!P‘tg³t5„ݾoÀë:ÌöÀeø9¸o³5åø£ )ågK-n.gJeV×ëœüo€e"!žÈ¼¤ëÇÇS-9i”þ4BŽ‘èíì…í)6„èKp¹?RË<í]IHšL¡]hc:Gn:ê]È\àž `Œ—dj­Nèc•:ÐÛ ðbU[uÕz^…æn$Úà¤u£Í+ˆ7B ”•Œ/’yÙÆ¥Beë÷a½7¬LŒj2–1\…W‚û¸á‘u~~žKÿw?éséN@X¦f±¬Ô–ÔŠ†ÌΤéYÜÜ‚à²èZ«•ªgÏ¿1…&UŠbÇ™TôúÌçŠCWìŠtEœ©Æô|ó6‹ýÞC+¶á†ëžËTôÌ4£V,8€·‰º•skë|¹‡FòA&gHÝnY¦\ŠEr Âx°óë´Ì2²Í€‰[¹Ó¢‚„¹¾7¨±“¯cŇV›bÕÜÞš#Ò`˜ƒP¢{AIÈKpIîûcøˆ¶&~%ü |§÷…WþrÀÂ…êÖµ½wšv${¨÷íÌue$ÊÑ®ÐwZÑ£ÞÌsÙe« £2ÑP(8×1'6D9–Bw[°ªÍ`¤ÊàH]¯ñòcŠY¿Ðh^©Þ KI«Ú?QÅ:íœebñ¶LQµýÂî´µ“N,@'²éH@µvªR¢›‘¡‡g.íhÝG·Ž›ZÝ6wŠ—iŠ8×hÙÓ`Ýíš8(Z{Nûǰ„ûœ¿Ç§ðcxrŸëÿJø· …_†„—þ)÷>ëk¥‘>5vÇ2‡Ãµ:ES{nhÕ~¾i®ÃNxú‹ðòmP?ï^‡/1XK '¶N ¢©H¡Èd5“F `#­2rGú»ån­øYç Îk åM5È娖—¬]ˆ\52ßÈí‚©z¥s3³°DlÏŠ÷àrùsî‚Fâø î9Ö„“L«]À34 {û~ÈCx ,àÎ)/ÿ_$s؅߀¯Â>×?ãÀM`êØhâ´àJC™ rWZ¦Dq*Õtáby¶)óXÔoå‰ä·Êeà©ëÇm6×q.DiaÃ/Âß…ÿ€?€ûp#¸ªþŠƒ‡pLôdƒó(vú Zje‰Z·Ò˜q6d‘«v½²2YX+ø¶Ô¦šhn”'L#%4…œÊÄØ·7ŽÈÁ›îPù„%"èe>o°›Z¶R’M¥%‡&¦ñìê¡=ëæ¿Ï4Üxô%¸Bþ÷?»èìÃÙþ@aþ\A;õ~ùLÛÜ¥p¼vH†b¡y'íô¯•–ÕV6Ö3#ÇüÂ,E,®¿ÿ-¼qàíóÛð<¦[mÁ«¡€ H…\õÂýÚñÈHÎÚÊR•2ýºWÎn,Lœ>eÕªDb¥‡GJûWb®Þ ,H…ÜŠN}E›¿DqÐ΄u²ïFi©Pª€o– ŸÓ5pšEZkÎSà2ĺ§ç ~ÒËÊHñ‰ŸŸpåŸÃ·à |—øäŒHA©;ñ—ÊJŠ'kñèLKŸˆ6j}W~7÷²u¸ÖhàÂD§µˆ”¹ 侩Cõ«ðÒ«ð_ʪþ×}~‹î/û*ÞS8Ÿ±ý#8‚+À)RÏú¬Ü-+¦Bù„£¾ÆlLx4 0[Ÿj6õ¨Ô„ÄÙ„© ‘>g¾‰ÖÇÀ{â´YC`G·*yKç´‚ÆlÅeN¤“È™¾ #†Ô0& ‰øðÎiïóåí‘ËòˆÏï2¹Kò2|¾ÃƽSžªf Sû‰ª‡çºGÄ‚PøûZ[î&fåB+ò[¶ìEjSÑ‹Zñq¤RP¸o&ðŸÀÏßø?÷ùû<¸Ë¹c`è÷:ÆÙzÈ`Ô·R¬·–[JkfW¸l¸ÉŸ<$’©Îô ¶;Q¢X©qîêo–ö¦_ˆžÆÄY'b#¢y~ä†×:Ü5øoøœnꎸ¨bˆÕV×K®1ûx¬ÄÍ0 Ôã› ×ïsõ)|¾Í­sø¬¹¶a[Ó8m;ŠÝ˜šÍŽ¿T”¿p4‚à`S+JѹÀ2UÐ)r¤•¦ðæþ#øÏn¼³ÏÎÁ](½Odè¡ß| OWLV= ,\NjłDÒk%Œ´lÑüÛ\<¸ÁJ}$±{Y­dÓüÊd§HµÚÆáŠ1$û‰-µ@h-cµl ÛÌ'bqâÌ™še¹»ß¡ûÂg±I¶Ò Ð‚œµ‚'pÕš#x k^fŽô Ej) xXrý’Ÿƒoqõ}Îq 9gºÓáÿêwxîB¡ÎØ´§Ì8Ì6>n,Úf”Ê%r•ÆáÄ@S³ý[ª»$–4Un–¢cé&¹‚~åT´Ä[ëÊ,©[‡µ6Ñ \C%ƒµµtø¥³þXhðPð†C²È¹b#ÛH›Š$,Üö‘>Ñ<­fZ‚è›´Öºöx¥aÍ€G¡Û†íóþØ–W,Í¢—ìXµ|W~V*4øä.ÖѵÊñTr}ó¦l³“r§î‹6¡Ë6R¾c¡!ÌÔ!Ù:Ù)ù‚éD.m‰äy¦ eêËT)HeZ—DæËkðÃ{p‡g&²ªÜi‘[ÖZF`tØ6/Ñ:4ê ï×úë ~,@2õX;ÔFí8—¯Y¢M«2~™*R™»1úֽưܔÛ]¿zS×Î$ œpqüÑ ÿŒ‡G}ø;×±…ÈEÛHô"Õ–WÏ ÀZ2ÂÉ”;îïб8Vàh\lŠ•OÙs•¸W„1§Îå~F:ѪÚâ 㶨i¶¤–—šE¦Uµêj$ÄÊ]ÐGï²C”©SÌî­? í$×¶ÂÆHN9T~QèfÑ)tºn¯ê/‡ê±!t=<„™n 9Î 0†ÕèQðck(lµâíæftú½ù“ô¦¤Û‡šA·ÎR×:ÎZêtÞHW‡fÆöaµ‰íY¥—µªDu,,&nÿІbÛ†Hs/žLËœÎd"¤ç4-T«þBžH#l6ÆoDìþøh»7Æšæ‚þ{%,׉µq£Í¶RSA3§Ûá" 1wƒÒ´7¬ë š“ïsùPå†)éÜ›„&Ú+ßú¹µ¢“\¥,[ïìÜÙ\.ø)¤2¢Ÿ±[ÙZ5DòžBødw}wÂçLA!¶à¼Ç¿J3øŒé‰‹tð²ÔŒr—s„} ˜×ŽED²3ó½L+l1ÚV5¬y.þ»Ð\|ñÇt)ïä­>ÈÌÎ’úDXk†ØèPõÊ=*¯:A¡Ó¶šÁøYÂhA#qòGÒϱ†/³÷”{û˜HcX)~wŽu¶Î¨7\òŒ#™* l–¢>™èši–¡˜ÇtNˆk¥Í$úKÐ*µ7­œa¥²æ­°ýÁÊÎÈ>nH¢Ø9)!ý“ÙA0åRFÙl’›Êq2$–&Nî»Åiœúj Þuîh‰–›8²GY€n¥ 5îËØÂtJÝ”Ô:H4¶cÕ&‰[1 •bb&e‚‹mÆ ì+Ü:åx±ñ%Í…ºù ½­‘7O\3FÙè—n-Y «YHI ©u¤=ðLÜü8ݤ>ÞLm9p*e*BƒË·'xß…Ëè&í ÆM߇¶r€”‹\FnHÆa+Ǣش?ûh‹\¶8êåM±¶0vÞhÉ¿eï­By¡·Ø'zS3}Õw@,Df† ÈX[gëŽ?™ra:Ó£,üuÎ$jÊÈíEÊKÐÀøi.=€'4«FÃ-§ o>WóÏä¥óìD0f'ÓE™™Øt".â1Ònöˆò¦èš¯ÄzH¬Èh>ÕðváR8ѵkæ%Ǻ%W+…м®çNÝ©$"˜^ $jç ®žØZŠc•¸ÔMs¤J?zr,ÛªÅéÜs"·©ª^­ò!?‘ÎyoâHºÕ->ØOªâ4RÎW.77Ûˆ«ã"µ|  „½~ É ëóü}m¿R$Þ¿Ò¤ª¶®œÿ5.e0êçS9£¥{ýZBs¶™ zõ¡< å%‘hïÒ©˜Š/>¾•_„WûopùXVž©r²Öå9…æž8›H6ÔúPA|×ïPï² H]¨ßÈt7”áÜ–”BS}´JWF§Œã¶nG“Í’‘ îÆ[B✺¦?6)u±Ó>ª[&Qkú¶Jißœ:žÂ)Íìâ HìOáš1vaÏ¥R± “j cM[/ä ‘ ÖÚ¶ÂÁ,Zôú •±¾Ž¦tVXë? wf«… \‡½[ðUèàN~Ìwá©l:Lj¬µ(5íBØHb—óáMÜ pïw‰µ?Rª§w)ý.Ît/AºÉ¾•±Jp–v:J” ºj &hЇLOŸà°c ã6MÀúÛ"÷Ç„Sú®Ú4\2Æçým³µ3@K -HäŽ\fpÎq×ÏÊ7X'Í4ÜXšŠý´Ú?£#µ`ù¹ «vóOEï¶ ÖáÛ?»ƒ¹Öö‡i€«°Køèâþt#.­¤ÔB[5’Q†ŽÄ9˜O¶жæýÁÇFŽÜ¬]ÅÂ{ª+·-@IµàžZÎe Ï™æ@Ãˈ‡£^dªÝj×úe¶ùz#p%ÌUl埻O ro‰äíáÅgÒ2 Hùü)Ë£þ˃['#YK¤o1ˆBU$†ùºßŒ…èžÉÇV¯°XVÄ’äÒÙ{$I"qås·ì*‰k]3E'¨]–—+þ<‚'}D˸Fò ß> ~ÂÓ-4òsåV¨i—‡áHà xI•“þÛ¦ïq$ ¶oñ@ ¦q«¤©µÐ±“ãÅúD;rÓ:˜ôò©A”‘E\¤QTKìXº>-c­“èb])}&ƒNy>º(¡Xl2“j ¤Öû¼€mÆëþ]•¨¨)"á^ò,£®ú¯ïŠTúu÷’¬éUkM)ÒÇáK¥Q&'¶¿ZÞ¾Ü 3…a —¡,K>Óݧc=Ü|ÚŠ_±¶Ç0µq‹Ó9gˆ4ñZ®b[[k%m/[¥«{!@‹ÜÄ»p“’g.>´›æÛ õ-¯³AdÎѦ˜jÓ9 kœ{D_#'7äB)Û/c®±Ød+ÆÖ‰AUz{Êçœ7ýÍ>!J-äï4îNa;42‡=â=æ'á(œ˜„¯—y ¤OYôÙâDaÛº¯ž¢ÐŠ”*WÙÎí¨¯Ø˜f©? •kr¸¦›/‡ÆšoÂÀŸrfzÚÈ©çÕ&Õ.JS}I"×·´ÔZî ®Ú­a$]mR÷m(óSfj–ôR‚ Š×¶™4Ë m ®ï¨sóÂ%þ§U†.M1/²Ä6Õßk÷Ñfšg½1…œéòþÄ©/‘¡L¹ÒjÆhS¦gË^L˜4Êu¦'t¬-इ\®eµ–¯+òÜ(ÕçE ´ùnioŬ¾ÐKÇú†Õ]½%Iikâ§ð#>®øJ•wÌ [çg‘ËÃmí2æF¡Ó°*`ÀH9=íœL`RÖPÛ†î°éÊÊe-­ÛþÎ)F¥“e»¦•·B¸HîšjH©¼uæÙ7‚R_èá™c#­‹›>÷ª]ÑÉï]ïd&\¦<Èj¢yíñ+p“™Î¤^‚=h•(‡ru‘C™îbr«a²M;ve„‘„‰‰¨t6†„jÖ Öblú*¤()+NjžÂIÍÞhXÜã/ô=CE\LnŽz Ý%U&š¯õUV'mµÊf%F­¬&ÒòTúôDp˜ Ì 0pR¤×[‡¥ÃøN»‚‰?± †S9ðØÍ4q–d(;Ñ;|–]úŠ>t i[òœh½b©±+gשËR¡ñ:ŒkOW,‡NÓÇð>‹C*H.åH°YH¸3ˆþâlS-V¢»‚¬’ æpÉ{b&…¯O/AÃrÑ¿ë¶ayÄxÖ“ÊÈéû±¤š¡tѹbt«WZ2qIja)¹$@—Ý‚©¸ptÄâ‚u줛òX,“ -Ú¦’ç›1Ô¢R┎Ö]ÊÐ9Fk ‘lÅ\·úÂj[b”ÊÂrñ¶Òùmâб“ãur¼Âõ'ýQÒ'½ÞÞÿw¦HiAªôdÎ×»p>n߆ŸƒËðþ>äÙ!4ÿp5ßÌýXŸcÄF)<îåæKøº÷&ó›$±:ëïi_ê™s˜•ºIqÒÐ"SCs)nı"ÍXwÁ™\\*‚G®f2r_Ûh<Ì6,—1s_ªh¶bA-q`Ð9Êœ …@‰|>vV¹ç¤Žç¬œm¡«%CDš¾í»¯µŠTð(].Ýcs­UzêÆ×¸eJ„l–XNEt2ý»ð-øÂ;ð#æOûï­´C­s8û±åŽ´d&XU¡“œêZ„DNlKeÞ¦0ë/â:s™sáêhð¦Ø¹xëÔ–Ø):hÑ—Ò½¬[Çr†lpG™”5î˜C²ù.œ'àb[S¹Þ!“4;áÀYIìZ›1±“4êù­«ûcEöщl«•ñ•G-»JC2./˜jdÈÉj=%Sçç¶>fx¾{ðCø!Õ§œ¸ðï1yà‹DÕM£VòvVé”K¤H‘é‹Ç'¹QÑQ–ý—Ìà °VW› ÔÊàæ..§ Iaä¶=Ö4VK½ŒÄp*T›iy#2úXJok4ekKO+¢Íñ§úÏVËÒÉôzWçÒ'€öä3‰ ªÖ:tra¹Ù•ÛK‡S}§K%žP˸M¼l ÝqL"Ó¶ÿ…+ §–O½¯ÂUhà!Üëñ?sÒíJh9ÑŠ$6®?Ä/¹HØÑBþ=VŠibL$3‘mÎ/nËÈ™Ž´W°¥4 Ë—;$X«3"ºÊß +xG2ÂQ›TÉ\ã´JCgI†R†L!t*’Ia©„ŽCgµ¶6r¸eÿÔ8•q MÁE’Ö!ÈJoo”,G›³@‡ˆ*­-ò®‘HÅ Ò«Ð ¬çݸŽÑR»‘šÐ½šÀ51ÃópÉpÏj#áíRßï4‡=ŽX†e@mÎH”Ù0ydØ•DvV;^Ò¨•+?°ï+\æµÎÈ‚/­Ýõ8M|¢†]c9Vİ7&Štë\5ÔIT±Ö#ËÍ8j—å™Qâ,/ÕŒì µìÌۥ߻Îå¶þŒlÈù·Ô.Íô Hí08“­Çî™V&…¬4¾ Kæ‹~M;G~3Ô{›%ð’$ËTwl~ŠÄo캺¡³KCÌŸggó<Üï­pÙ)Öp$–=p–gí™B†¡ ‰O^‡ìTKJ¦Y‡Se[.ãk¤6zŽiÖ™û'Ï)­?­Ï@Š.É2«ê\ì3Ë0}+sê.Ndî4Ë,ìœ(m3S‹œ]Æ®žá V·é'f|hRÖìI¿A´0Xhibµäîëûäevá:| F:cßõ±¹vRu첡ÒùÑóx9|Ê=Ú§ØE™ÌYÕJ;= ›¹ãÚ™š2IÒhb—»Õâ[K™i¦•Ê s­ÏR$­þÊ1‡‰žcdµ[“ 3Z·ó¥ÖA²‰•<*xÚBÞ»Ïj]a|ÑŒ¬¬>GCSýg,ØÚ¼ÙYšR¨âWë]‰†L-…楂i›b–H{œˆ9í×á2|Þ€3x{hœm%2©±HC~ĵ\$qBÎH*Q«õµ‚xó”A¤\l(ȱ w¡]Ïd©‘VÁóŒJG0Jk¦-4µÔr—²È¡ö»Ô¢åê«„‹­ëØ*ƒ.¾#Œ\1Çÿ‰ÝƷΰJÝŒHÙ&F®¨Wë•–ùšU5îÅ‘V#—ûUÚ”È)X¥‚Æ\9;Ž×úÐR¶{ý8ukcÇ’'0—á:¼_þ¾ O¨ë~žæ£ÈÂy/ëi‰\h+h4+1µŽ6®ÓkJ\¥™—êéET;-bá„´LŠNí–¬QuÏ*Щ†—«Ó¨ó±ÑÒZÍV³î\R’oF·TB¨ek 6^b%p\h¦o1–a%î÷¶€V‡‰ìy Á f–N™Ž€KkÌ¬Í WrZKíùhsc-rj–k(±;¹kYý%ÈÞ€¯Ã Â5ˆàOàŸSýà‚øû™tzÂXqªÖ®•¬uËרCá²ÚBfnÄ~’–6"̨]’bÆa`P9CéôÀF&²r¾do8 Ö¨[í¾Ý/#“y;y°%"fjõð¤ò«©Ö„ÍF¯ç€Eâø6kKÐÌ Ðfç›Èì£sæe«iY,n.evÏ!e%jª•ÅÇØÉaǧòˆåù'h6SMÛ¸?߀ËjÕþsø.üˆmB‘…ð EÔ&òuKƒcǨGù§îN‘mv«Xh[KE©52n ÊÊØµ¤vœÓ¸~Z¯LõÞÜ4·”ÇDɯ±×D°tf9εHÁJ]ó·Á|´ ž’dÎæ:<’Lh^†©þb;k››8S6&g"¹µ$ÕâŽ|ÃPÃø€—sH»cžJË.¥;T2ö±V¤?A1VWÊþ~ÌIÓŸñ‰eÑ•S® dj7 Ûª±"…5°gJÇVŽK¥úߨ}â¹Uþ?t*‘¡ÎÑqB( y™Æ<Ú„«J„+¹`‹Y­ÚâloRwéO.¥'×ÑÏt›0`qªvé^çXv¦­´2¡ÈZ=ÑsL2HE"½À,iý…Ü0×["-Q"¤l6©•±V{Rë,‹DLÈÏeHÃà;'ðXIü}øˆö)uÖúr‹;™”-+’"³./í0׆erë ¬W‚[åÔ¥W¸®ºH"ÙDý¨Æ¥Â[<É$\µš)îþ’X{6Ö—BÖZSª;m­OA l-êÖi“"Y¿‘Bó N¿Ð¿¹JK¡à8¾Ù°,$q(ºÆA ›Aà9›Ž”xµBDsKKo÷ÇXšÉ(é0æYÛ[U䑨îÓ߈r®ïbßû°M I8š÷Gü¬@Ë:——5"d<Ä_6n|£ÑkzKÝ{ùE&h¢TìȲíºÉ+¥ƒÏÃÌcÁ¶éûhü™þ7séç»'›¹‡š„Ió>WÝtRà£ðÅ—ý|Öâ›s‘6Œe®Áåþ;É“g0£S¸Ù})¤$™†f¾­œ¨a·üq¯À›Pë{ Ö0†ë ÏiÎÎE6*î–nijýo·ù²¹]—"­fC-ÐìA¦pÚë«ðZÌÌ.™…ã©#7Ë3¼W42ƒŠ/‚JêŒÃX¼–—O=šútÒÀÏ WV3ˆI:E[S¶Z÷@KŸsÁdëÒ °”ßãôŸ:é/¨5[JªsùYOC^€«pNáÃ;yÔßGÜ/uw/ná8Ýròq&δƒàKpþžP­è z­Öåkç9ýQÁZÇü,r½%õ¾.*UÚ?Õøõ•AsWÓ©âž _µ«uÚ×B&kÔÛ¶ÜàÊgÇ8NÖÊ-Ïj„¹Ûo¯]5§Ÿ‰VºÉÏ̼"·Jè÷­³ÅÌEÞµ›Z¤Wf®-¯q¥Ë!Ò³8Ö ãÍu™$úõ',¯Â+ð 8`°âèiwÃ.¼Û×á '”9[!ÙRéÍo¦ÂÑv0®s8ãèsVðbxÔ¤ºžy¡>­Nu¾%r›8¦©°Ø)‹ÞÙTØ-[ñ©`ØRÔ\ã,t#žñz³‘×ÖÐÊ#€¡sà ¢uãgS4· `íÊØ± úöcÖë7Æ ÿj÷âTã7ÃjÅ…"U/LOnÝ ì5þ½CÃÜÓÐ êh™ª¹cÕ󇻺Pj7á:D0…7 éC१=ö\‚ÉÛð؆øˆ<áIs´•âÝHÿi5Š`Q á)ÌXµÜu×r4ØD[hÌ™“…ŒH{™(X4úÎD¬¸*Y»mÈE·CËÛ‰ a‰: 'R€Mi4žkœÆBX£Á˜ %®Ïhl &™@ÐéSšMØ3‰¨Emà IDATßÐÑ Ë(|½i=‰{qæ4Ÿ{æ*ÃXí/v`9îÓS—†Y§™M&h ²ëðuøº¾C'’ÚsO¢x¸kjE´„Ïa·àKªÀEÓ—§MWîÕ²Üb yçÌð$ôª«U¡tIG"J†=ws3W6!% +iHSEêT4Ë*Í=y¢g–Ræ åð±lbèXv£÷-J‰û×Zã7€ÌeXög©ãµµ£Y‘¨[ë>±uâøsÊ” Ÿä&Ž˜Rå!džkâö#…lΗ~ZÞ±½m±«†p9kp¾^J,áîÀ»pþ 4p-H꽤f‡‡Tg¬E†L:Âñƒð›JK[@ĺæ\ q÷sW^í¤?epREÆH¶‚@¢Õv¢™£ØâOup~¬X/h,å§e$ÎÍÊw¡—ÅØZ#imSíMâlÂïAoäÈxä‚›¼Þè|ëÒ¬ÎÁŒý˜c{ˆ²¿4&b–¹ˆ]íbn¼I9Ì…ì÷ÍÓÉ8£¬ˆ!½ oÀ%x¾¯h©Â’ÁŸÃ»° .knÁ <…áSZfð©¤[ÙF»[ÉÔ ÁË0Bq!…‚ã3Y•;,Pè…¹M²9¤NX:Ý9±ÊJÈC'Ó®2Ö¥ç‰ÀÃzÂR·Ó‚ûJG-L¬]»mˆÄ2Í"—À'nw‡>UÎPZ÷|ƒ.9³¿Ø¹·‘w{±Y¬¨ÒIù+7Í:ѨŒ/zݵƒ”~B~‰Ž8…:Ö ¼#Á ðÕ÷àûœ?cøŒü]à |+Üì YÝã ÜUºÓ¾Ff; ±m€ABÑõ§\ÃÒÌ¥t[s˜¾Ñw˜wºAÊ<2užm»›Š§‡¼¯Öšª}¥“¾U« –èøõTfj$=ùBúŠà·²{¿U¥3}ÌÁ̪¼F’¸ÒM³ÀQéØÙ ú{îfÍ&+0È1Œ4—00ë\~P«Œ¶v.Θ"g…ö{ó™”¿ÿþîÂ=¸/Ã)¼§Pé~î0;Tkʇ0ƒ'ÃK}q¤¡žibÖm“4ö`zfذjÑ7È7J݃NaeŠ)¤îÌ•fký™"”qíLÿdd3Q`_»ß´"ã…ì>•±§/†]ÉDÖŽa4ÚBû¸VFÓnþI6­ÊD|Ï“,nÖ¢Œá§–¬Ð8ÄBŒÂ;•1z3£¶µ;¬êœ½Z 3`kÔfÎÜi…qìÂæ¹9Æò3·9Úç·á)q¶dtJþ)ͲßÚ¾Ô³jy&]RÀä}x¶àx‘ÉC”lC¤“¾Ö’`ˆý‘o]µÇ.è*DÎ &ºC°rï*]JëÀíXAÖbé$SOr«u$G²KSž2­²Ñ¬D‹Û¸2N¬rSé¶Ù´(_9I%™ZzâpÅŒÉ4‚Öç…dsS;÷C?)ÿvŸÆzAé–(rê .ÇšEæ†Ý¹_¦:íåÛüá>538'KŽ$R©á åDÅàF-*ÀM¸ /Â5vôJU®þO[;KR ‡"¶ªÔ—ϤdZèŒT (¿à(h¶É剳›Hæ’iíÖùiÎt…æÐ9\ §úžb›E«¥L…|¶¬•‚ !¨áqæLʪ¨V(3VdÛfi—5Ró…˜~†0}ýÔHHçÒd³u«ÅnœVóØê£g‰«4ÛR[ôLù}~žÂë oŠ W-,T3)¬X³QbiÑ’¿”ĹÇÖ–u/0ZË¥¹òé@Ön@·NáDç#,~›òd,*’µµšÕ\h}K1ñ ØD²¶H3ŠÝJ… üH7ëùD,W-µSþaìÕrøÖ¹x¢weÎÎ M=—ï„pÉ‚š×"­LHL8µk…ÜÆ_ÀEŸÁµNŠ3ûnÅ+¬Œˆ’­>ºÛœ¦å¶)¤üÃOÃÏÂ-¢Oúøb"ÑW*fÚï”M,Þ¤–¼2¢ºŸO®dpZ:èj ¯\Uò¶`Ó{º±Í²T:Ðsê@ø”±né[j™»Ij56f®—Ð*²¥;¯ÑºÍÝy8kö)“@mú±ÄÈ–ù弑ì;VÿOç:vòçÎÉ ^>@ÆdV;{òáÌ`É”¶fó]‰Î5ÅB©D2’1xª;Ê åØmx~‰«Ÿ\,e+ž[¸¼,q]“} W¡ [q¢kÇŒÄø9ãnE5–ÊáÏÄgÃÌ·uãè%Iç‰ÒºÜ]–¸µ0gMÛ`JYI,n’Jå ±^l˜aËlZ³O í€8Îï[½ÆºR3' xfm›ý\}Æ* çl8,ïð$üR÷C;›…e>alÝ ­§löiµÕ ìÅ6þÔ0eÀ»ðsðu._çó'ý—G¦Ò*;D®€ð¸F^˓޶+1¤¥BžÍßÚ’ -S¦ŒìÜh^•Þ¾s:ƒ…ö/wÞȰÙgО“<§ò)´ä&Þ´HcQ±+¥dö¬(”ô†•à îKv jò,ËþY¥ƒ„R6±P£ò–ãÔ6\?PCûF ièÀ s^Òj™ý²«ëk…ÂPp;‚Âí*š¶ï;°«÷V[ª·¬”B¶nÀ©Æ¹|fnËñèVÖlîY³¹‹¦8˜XoT½vF`*+z—9›½ í½©­ˆ©±=O æb±û¥BÜøÑt,ÅK6ÌOЛµMÇ ZíEz¸Rl8ƒOŤVe_-iœØZºc<µš¢®,2úiD¢&ñfÓºMfív‚WØËË:wu˜5E¶á’¢zAÒöÉ÷rÎ@dÙ*þez,nõ;·îä– {ÌÆÙÄsŸbeõZ1dà^cv¼rù¸=Ðû¹åéµsìÎ%gF˜,9ðO3 kÝ¿Za4é ·#@*BÒçý w3„)­*6­%káØep&„ŽeXµ «–„¥\lÚV«×9nØ Tr»Vi*dkDŽ2hzžn`„ÏšLº.½ðùv&;ËجÝêûQ¡àbä…*³³­X´Ðoš¸…˜çØU}ôzÓRí§q»Ž¬Mû°<.rÈ™£kf­K 2Gf:¨8ÝÁ†¤EÉà@7„#©L™÷#…ã€æL>XÀ8…+b]sÝ l´ uE˜0ˆ¡Î8,_iµ×e(2ѱô)$—uùÆ1ÕYï£õš ´%¸N¬Æ™i-à ëUº€k ½rËŠ¡ÔÒ›Eέ­è §f™t‰öÛÂ_çÒçØP+«2²…à¤vMG>#ŽÜ+ÍžpfdL1‘óD¥Œ4zq%?[MµG±ò›È…]³àÒsX,,ICIe—àK [Žôqª‘ߘÌcÙP­®ßp5èM ªs‘»±DüÊC0Qgé¾Þ£Ó3ÙP#÷J´[!1ç*ßRiª–&’Lñ²D©S´íõc]!Ü[w…Ë|ÁbÂà„†VNhê”ÝÔ¸vâ@ÅÓÒ½ÂM¬Ù®™”ýMÜpìe«/ÖŠ?ö¬wúd©ËÚFS"1ëQÈ´[Qýäðü³÷áKÚ<8ô6ý=w¿L$™ÿ•Ά:= %v.c¢¯OõúZ+Þ!Ç*õ$“'ðìà:Ö;û' Qã­‰|(˜æLüw+›û|–Z ;έ9Á‘žL’ǨPkÔó•LæhHܹ‰Ê´¢f‹¸U1š‚À Dù¯XÜ4«r+Ò¹ÆÃQÔͫͭݨSV tV‚jÓ#ì¥Ýƒó^œ*›[²6 ÷Øì˜ý\Ãp¿¤¸€¯io¹"VsÕ\;×P0º3E<¶Z€Î }³ñu•‰¶h„ {¬ 7ËeØØñ˜ÁïY/x!ŽlJX!Pœ8¬, ¢œ©Þ¬ JáŸfK/;Ù´‡:¸QLDª<á°„Ëòv‹2¥û%.z¢{%úÙ_ +íc‰óºÂ©F>»\Vk”¿ȇ@`k&h!>q;{=½³g È—[4¨½$ ×¦'ýšÉmO½€G=¼fø”W0Ñ^\ªb4äâø›¨.ES(zÖ:è!ÌÝT®-]f†w“c¸€kø"6ؘ”`È<:N°p#( 7 »o]Ä Höžj_ˆñ•J“kykç–¼r0ShK¿ `l l]“Cö=8k3ÞË3SgtXîüÒ]mtUZ{6 »µ1ªL†Õ+‚wN =JMˆeëV)ïù©–-^æž*(ìoª—¿$û>Ž['ÒáwpÄöw¼„LËSºs¶ÎÌÀ±&jñ±£RiKaÓ½mµ“[ ®£òv\³Ùð•Z­‚Ù¸®}„U©ÒFæ•í²9` ':<àXï?Ë]Äï„XF‰2ý“Ñ”BÇ“oµŸçòÀÁõÚ5½!&ŽA‡bN5Èt‹Ô9ÀèÖÞl(u^m’˜èʽï#ÑØ &F}8Ük+6l’˜UVƒåžW¶iwî`êêϘÜûð<ƒ3X0½ãúuô$£u毌ÕHk/{]¸£’Þ±ŸÚñ•ô0 9ÂRñ+•Üꂹެŏ3!ÖÖ½ç7è 'ðžÂ3•½mH‰°Áž®ÜŽò–D¤DÓn‘ªl È©69Z+úoâªræaT€›¹Æ“ÑÙTL·Ó#Œn– —‹øÌg‹Fä+±¾k'$¦Îš;—  ‘SÈ{5…6Ò‚vRž¶úáå å ¿%ý%ü¾€zŸg%ŠAÁÎvŽ*Q¨5e&ö„[È•í´4Sw¦Ît®àå Þá'<»çók.µ–£$ޭιÎÕµ¼zPÛt-o3ÔÎÚ‘ Þ*¹¬%Y~ïq+qSM´uwp‹Áa] 9€‘¶ÞQ.íę¦-*Z¦æGqZÇËæ,}3€´ ©ÔXBáwåì)q? ÎÓŒnæaÊžãÂmèÞ6c2Úçð÷¿áÃßDÎŽÞs¤Ó*ØŠ×[»’Q C©Tä`æˆË$Ùï’òøþac¾î4(êYÈåê§p¢üÔxLé>pÏáy ›e ©‰"`'‡±°2:Ù¬e´ú¥òÕ¹ Å#\¦¶t¡-¼p%0ædóiÁ铦Í&NKœÀ‘Šìæä…àÇÖåH¹r iⲊQÁaç ,˹s]¼"š¦WV$ê„j9lÔ5eíÅS§Çl\ ³¤Ã®lp5S+_'ûØi²J§€Xö> ÓyË®ç)L4³UgÕBG/?’$³ÒsU:K÷ žÀ3`Æòž°ù+Äî-ññä×"ÑNn('‹Ð4®Ô= 0¬·—òa(s©_ïh™™ÿaÕzøñ+WÄÏ$ësÞâP6Êœ«ûôbt¬À ËÎ`2”mó{—ò˜+ ®‘-ÌcéТè`'K¹®FÝÛ¨wæ2a3¯Lhq®(¹v-D–p5Zë¹°k‘Út,;ŽvP~j©)¼•Úy§ýè̈cýMSÖ÷¼€kèÝ1™•©èƒÃŒQÆÝ«JÕ›ê5صS˜ NFQ®æQÙ±§eÃ!+tG´d™ÌÔôÈNsX:¦h^=hiù¡%mæŸy pÝìµ{“…-Úâ²¢Á 8\*_;ôKå|µËÂ;‹&U«x&*3q—N¤ã~È]µ|3!pïšR2§F ƒè1b¼¨££ìÄifzâÊPk!M¿ØIÒì…íœÕî†xÞéΑô©œª”WäZžN“Žë¿FÙ*(¥ÏÕ’`Œ}öŽôî1-7oç[!oМX¿¸õã[oSØ)}1ÂD »¬ùç˜ÅIèŸi*õ¡¹JîDâß óR4ºÍph‰½œ²UR½‘·Õ:v¯p°Ÿº¯gòÔLjÛ¡,líkø¥¢áVUª˜Ëì`ç×R­pæÛ©¶Ön¦*wÛŽ–iáz·îd›ÑÍ€MÙ(OÜúyßËå*SýEÑv¢‡Ý)•ÃÝÚR#²<ºÓvr0ÏPw‘Ü „f^½ˆŠ‰>£æ§‡åΎóœ@z¦ÖaÀ‘³©òŒÎ9mv¸ "pæ‰0°×Õ}VbãHœaÐR‹@„ç?’tòûº=Iæ”Óx|÷Ÿ͉^ƒ›¹jG`A»c¡ç F<“Y÷JBbzØwšhúáZ˜^~bÅ“^{M‘csG·Ãc.¶†Ì|+z'%ÅË:–ëºiã#³¿ošo¥Šæ©âF'DiäN>DÙ²ðWè.“É~ÛdªÊ]å7•žR©{;s h3“ºýè ÂœÕ„G‹²&Á~öÌK×{nÄè,Úh–M·u¥&ò°L 4דâO=lvl¡Ð¦ûÔ3ž­{«Âß± «Ñ9DÖ]c¹jâL§sY:® á—zÊuÀDÉP¯v®ÿÑ”*AÃõQ³ŠèÚÌ¥;¥¾ÞºU´aXcÒq«Oò´#î&Ö?c2ÃÚ=enÓòèÞ —…ªêZš«èÿÈJòÁyF%Z€r@›ëVl ÕŒ†'[J[ŸjUgU¹$u{þÊu"Ø—ަÌuä‚3@<¸Çp¤`aÔpå2Y;\4PÃ#½žs”êèƤNËÉ;I©ß-)±N/'°ïDòr'z^»ìÉ´(»‘™Z©V!œxóH°Ý¨ívPE¡rÃF¡ÍÓÊOæŠàæí÷zïXc8Òª´PÓ <>qåÜXÝ83˜Á[ò+&PMàää• Ÿ•Ë ­´dVß; îÔ/e“îu´r’·*Ëq¬vQ¹­5LòsšNhjÊ4žZ<¼ÜK¥º;xkœoÔÃO\Š0(Rׇ,ÄÄIäå‰7Ë‹­Š»wU´Z'¶4s-ܳ›^š(GéuýTQ¢×>—’ª}r¢eÎ$Ô%ÎLÜvfül&V`IôÌ1¿ ÒSaÍv+ho5˜°-Ú®‰³»X3ÎQBwA~¬U ^6BŽÑýíåU½ŽOõ¨[gR&?–N|*?íÜ»C*¹K.+mCúœRÖÚý@ú–«.GðàÐóW¨»ÃÀÏ‚ÂT"ˆ%íFÉ­£gF%wÒìéR!Gá&g8´ª\³Ô R‰ŒÀye.q¹Up€‰|㑘qSÏ8z„KÊz§èÉËåE6ª0Ô4§íÈPØFõrÛÇ2†'û—Â÷ÐÞ‘ß‘¬âý¼—0)dTÊ„SÅ/»Y8ïtÄÛ±œ`í Þâ·ùw%|6ZÖ»I,55SÁ÷¡RÅ.é;îeµ;]â(e1ìc¢/-ŸA&ÇClµxÇ®ÓÚ$œDö×éA:ä£n¹‡Í•f2¬^ÈËò9º¹áVî”-‹b©Ýœ„QÊ«ùj&³ÃÁÕNŸi-ÌÉgå=4]ŒtŠ{h¸Ó$˜ÈbÃó)] íŧä#<Ðö;˜’?RM­WiÌ,ÚH@¡û†¶Š¥ ™kD,¼ž@¥šßÕ™j?Eî’šàš§À/á'°‚¯à ¾f½âNvcNÂÁf`ü˜,òç0g{ÏnÔƒe‰BPlH…E,„w“¡Íd2‹¹‰$w¢yâUï*Ùÿs°ôÍÓƒ‰kµLZ­c£Ò‚¹«\KrMe¨>W‘óZWt°*£’©s'œ¢D á^Q¬à<"¿ÐÈn5 É¥Û›‘)rõN’Èž*ññ>wìØ><((¬µÀ©Ì ÉñO§ð_À¼„›x.v­Á8DÀ§-@¢-M!¹PŸÏÓ¿æ‹û“ Ì¡W" 3z© ΂¦‰¢ƒ0̘¬Üc'çn6‰Ÿ©KËJ×.œ%²Kþ Å(³¶Ü‘ÅÊñªà[åCh6¦‚´NG¶eBë¸s†é,»•EâR®Rµ–˜4$®ê²çP’_¤±i÷a%@zà.“*ÆÈ®ÙçÆƒØkáT–Þq“Xì±OÜpwNzÈäsx7…ÿ žéhÛ*æñÅ6fCsî e/äÌ2øü>†>ƒ÷¹øÄ3ZU¢¶*xçêv/´ Ò¶' nQ{Ƕò±RŒðX¶bõ¸3¯\©h¯ñ›rkrÒCÐ2,7hD.òž3]ª±[ˈ§~ËNjõ)à<9“Ûï*?7hú¨¬fN_,DÍçAì`IÓêÐÐ÷á)S¸'çlIï÷ÚÚ‘Tìr®÷Äm£œÝÈJŒŸö²ýboîûj ?Hß ,ûÁ…€ôP5¾~¿…/äPèâeMæñ²aã¸'ð<‡¾o ‹»OÄÃ Ý ±¦Šw…VåkAÎÚÉ‹ qµS‡è&7.fÒokQïN6jôÔŠñfj^ŒèuñÞmƲ\'©eXsär⎪&2Ê=™n¥CN)GX³Ùìk_æ Sà1Ìàž]˶-Ó5'Í¢¾’ó®(ïc@·v+ÒUô°’Ï\îX»¨Ôiè–ße‡ž¨c}®õ¨VÏ ÇïÁ/áþ¶*HßVBÀN‹íÉYtô>Wðü–Í"&Œ©0)WcÖZïJI5¥™ÂÓBµÅÑ¡še£V™¬êHFЪšÞj¨¹nšK:ºtJU"`˜(ÀÙïñ0KS†‰µA¶ª4Šž3m É–…xóÌub†?a›–rIS9“Í>ìîÄ\wÀÜÓlcl-·½ÒLzõ~ð7|¹á›°áñ “CǽKÔG'äæ.cH$pÃWŸÂ ¹¶9ªÕcfZ(¡ëˆL­`7ʼ2qáJéXâ^> lÿí·ˆf%iÕi˜8Öå™NñÎR°ÄÅP‹_7N— ”£·Š“•ŒArbºShÊs˜Î¢®=ÖÑÇ‚òr]3µ’ë*Ö5ÜCÏá)y\Û9ÓžnE/SÇ¢8Œƒ;} wÄvt¡-“7 ÍzçP>Ö¹ð á7ŠoŸÃOágðþc¤½Á«›¨§ãr…Af…(îoán¸øî4k§Sg˜‹n; ¸V3ºÂKîP­RDHS¸Ž9˜¹e¥Ì Õ6$ôùƽ 1LZé4êÎÐFñª¥LíÄUÒRQr\àw,€UtªÐmñÈu‰„̹&é¹o£æî-륖€K6Cì=û=邜Oà:‚~ž°cŒ3ÅÅë+ƒÂ_ï::ÍŽ¥~Ö¼5(À‡~º êhy¤Ãhw’gðþ.àØônáÁùŸÑ8‹~‚ÝxIR@±?ép' R:Ͷp«¾vmBƒ«&®Øbè˜ÈL=Î%Ä󞸒K°Ë'š·¥é™ÿ–¦¹AŸY;)+<Å™nÔé.¦ÐÚÝ©öá“ Æí^Oɦñ½±»ö7 mì& ¸e[]Ñ\ÂÍÀzz¨ß’o?ß`꺑ÌÌ-µFÔ*xÃÖÕpsê±ÊqˆðvKºezÉ|¢Àp¢ý„dO˜~ú—¼†7p«pVð]=P IDAThÞM ê|7:H/É>bò>wßDzn}ƒbVÕrïõ bÄw|)ÓƒxAËòCÐV(UJ™4¯w:gÈ|Ÿªz# @èkÀ¿Òü· Êz7BKË™\râ²lÓw|.i14$e7r$‰v|[å5ùzMØP04Ñu;†Yy¢À5Jé°¤*ƒ¼ƒ•ÂAªI7¼µÅ]´ž MÍœöòø¹7î3øºf^3…iÒ+¸…¿ƒ§Úàÿšlßðå.ž–Û»ä`ttĺnL鸅8ï¹~¼Ü)ie.­bSå™JÁsi†Ä8¶—(05‡"ˆÑ¾áP³H¤žËÎ~KYèõÔ¡°q¢™´âÝL{æ9‰YsêðØ\±ÌøÌSýÿàØþ®^FÍJÆǞknÌSg¾äÇgÜÜÇo6rîÝ!D{*czw­;!¯pî28Tàk¥oû¦æäSNÂÎØ#xÐ{½‚ ÿˆþÀ[ÞºPe oÄsP(LäL«óðSš—ñô‘ÌáÜFO”;H3ù{ÔâÒ+±4Ë6&º‚mI2>`ÎfI&/5 +DzR׋Ça¶›8¨µÒÈtì°ÂQV5ºÜ–cЬÌ·plñ›-ã‹øR#ËFk‡/™Ò SΧÔ$ºEΟrñOl¯âÆù«føÉÁ¯Ù„üFýRPçÜk÷õA°±rzÄï|°`þÌÕø|Ãø’äcøßÿ‚ëE¶Ê„ÙÜ(eÎŽâ z¦ÄÓëYïëlê×äðÓ®Ù4,ô"?K›[M÷à’ÞA£Ï ö.m1ÔÍdõÞ{1 K‹îH…ù{Åø)[xÍg”À{î×ñQwŸÝnÜ·oÄ1d°Ù0»‚* “ŒYÁN/5k´ä[WñXu®ƒ0ÃZ ºJ=Å(«õ,ÕaÔCó†£P‰“i2'uöš›ðQ—²ºP&ùÆg¸G#wÓ¼ŠŒ½|ý oY>Ò[,7o÷xÞ[z57²òAœÝawí^“Íù'=ôsf,X]r«¸Fo‡½Ú¤NI¯ã{ÅJûó-…É‹¶$‰ž¨3¿åZÍ5,¾æ¤€,ö”îìIƒG«íI4žá†nuT„¥ÖÌ%hmÜu[Oõã©âÎiª”~ˆÀ¹sÁÆ=Z)PÀ±O#þÞû3™WªyáƒÆo´ÕŽô(\[pïþ²[˜ö8@•ºŠUh=XÁ[Æ[FH§û¶B‰ÂFQu8,m'·=NH&ꯙ¼¤ïi _¾’q<…§ðó¯éþ÷H…hú ¾+ÓôrWèH侯Ò9°„Àd§ÄˆÜ‚èBEü·V7 ¾ô¶å¨+7Ñc?È.s­¡ÂèÆc6.Fع ‰B³œ¥v…™¶SOO%.céÍšX: •“!,´™¶gÜ`âtÑô¡¦ÂÎÆlÉæ Öx'µ7uY:¾i4sDÑ÷N~»ðÜö‡Q`SÈAe£{ÿtïfe¥DR*Î[¼áŠåƒÁVæ2‚ãT;¢nyp»ÄÐe{—ˆàpšCgKe‚Å¡•OÔžCš³ëx$Ã5æ”æµžÂgâv#‹\fÜñÏ&:߸Œ?NÙwÚÍ>{Ë\¹ip6*ŸÀä4ö;7Ë}11æs½ßj¸Ûrþ•|¹‰Õr;Áyê$ÁÁÅ5ËÈPö·spe±ÆDN4âNJD oïQüœæï)@û9o•O4Š£|Ý2#4$„[ƒxÒD7MÜàÃM‡ùe^è+mg7ÜñàLŸ#÷Že‡¤ÊÀÛË7¶lÛ!”U,3UKÚˆ—.Òå°½ý!‡Ý¥uqÙ¬#ò§f/{ á±²PÜYÁ2B{ê¾ÛëI§çM`žÂðN̼ʥâe%û¼sÝ ð)Œ°fwÏ7ÊíW4Ê™ˆÂ‡áÖò¾Þä89ßà’á;X²ƒmÏô~ÿ=å‡ðÅoà×\®¹†Z T.é`8¸$ ‹­;`"3Ëz?¸Î0“jz÷#ä–XjÚøŽYÓQÍ›ÍJ¾•¦˜y bœµ %m*e‘Ñ?FÈ)ÛÐJ0*,$ îµtp³ãÑQÃÑ­Tðö¾#sëØ¦±¢R7‘XûÌcК Ì‘gÚ nj'áŒô{xCÞ8,ÙÁmË£Oh.N´®«½rØ^Éüã•BS“ƒÞimNæ\!>gëÇð>¼€'ð}žþ#o{¶ºcªOÕ¢ç­KZ­S«ªÈ¨w²Täjœðkq¦ví@W°ì9nâfš13#cÖ¯Ö9µ=Ñò N¾ c˜ÊFÇpúÒŽé[Šc(™4;„­ÔäÓ8Žö±MåÕ"M!1%XíZçÆ¬‚m,Ú!CZn8ÎúHLC5-#·C ýÒSx)¼b|Ãés«¢ÊynŠE¢;½xWp­L°q;Œ~®Jj¹^áÆ„´DÃðQ2V;HcrªVª0ñÿXÕyvÅövºd˜Ç{qÿAo©‰s¹¥v‹LD×lÓÛè’ ”•ZL܆£¿Y‘gP²Ùƽ–y)tœ93íàT `*ç,õŽ…– wóÁfIRB¿— ½/}× M»6MÕ'™™ hp­VwýÁ©8»‹Í¶•³:èȾ†šÍ†Û½º”®3!7˜­E“§ j‰«¬™nÙlâ½ ù¡'’¤Oá DvâW±„S8rGq#/à3þ³ðp„M\†A³ÙÈâíøÿNœÌA-1‰ì ÐJÔZ³Ú/Ág(äÙΰVÉÿ®§:cV°]D‘Ðfß"»õºpH=M=6óßÊ\wT C³Ï?Œºm$Å%ÎŒ×=›8Û*T€òùøM¿ïâ2 cP–×+0öŠ6¹\ûHƽƒ+x{KW¶ô \×ðŠ~ {JnÉd+4h%;è棞j#I\Kµá–±ÚFƒ3ºZŠ«"ˆ mÐGçb‚x€p [î:ò–b zí8xãNÈÝ)'?:”Ö2}À2Й"u§˜5ˆçU‡ÉÑ V¦Ðlºå® ¯‡:[¿ÎúÔ]pЊZ¡:s>™I3áçÐþe„¸pÚì¨Úe¡kúº­TÒˆIõ!K €”æt]œ+3wóB{éÒµ$R»%é'ñ÷+h/É×zžFô0Ôü7®$ncHcÒÔ(ä/{ÊF{UW ©QO’¸P œÃá}YÕKÖ5 ñE¯™µ—¾0:}?U;Z%½ÃÒ‘Þ¥´ƒ$®ÒÝ}®¢ØN»e*Á€7+õ"GÖ‚õ%cKï`²tii/£Aö]*ˆ Ú‡ˆ¶‡Úlëʹ¾>Ê+—$.§6E­)\*³s3fÙt.npéZê.’÷TÍ«fåƒ ñ½®iêF¯–CS4kt>V§yO¤:6®¼okÙ;+N…&4[àfºve “|:Í‹ ¸áj±"u/ÙÔQì5•ž$—kúéÎ5Ȱ$K¡ïpèú© "–+ä® ›ê 5ˆpÍÃÝ–XjRgUÞѰåɹ›ÏLó¯ÓÛ=S‘Áe]–Ù¢.A˜;šFi´YÅt­Õ”"{•ryîUiÑ3§'çÎÁòZŽ…¥“ª)¶;Àt© §%²‰óŽh8Ñgr‰ Ú¤ÅA‹=Ȳ‹Ü»¼=qøo†F}§¡Å…3¸ˆ0þ­ç…«JVй[¾‰Kà'=Tΰ&Nê³ØjtÍFhɦon±ÁO9¦-gÎì‚#Ã3X1¼åVi{*3Œ‡V5‘t<>]&ëÏKòQ¼ÇT+$Yɵ¢FBboBS«bØPjÒk}Ì +߆Ü>n}ï"ÏŸ}oQ9 §—Œ—Á®£:¦¨à޾%³<³cW ŽößùFr£ì¤u–ç9S"§Ï‚LºSô*ãìû{ œ2áœ3ºNÚA·s[Á|ð%WK1Ã50îäöˆúlôƒu!Z ãj˜"u#ÜóZÍ Ø*™~i‡e4‡Ù¥©€ äs'T2|K;ѕΠ†²Ö² úð踅)léaúŠ“*zgìñB+Hઆî5ÌTèµ¹´;rû ¥¶MÜLf)SÃ’UÍDÂúFüÝq«E}pí.–íwu 䃛Fž_ŤÎ,2 ŽY‡`"s©Ä1Âò4 1¦›c7‡boªŸûCB2j?ã(M®}.µaÛêšÀ0à4ZwÉjÈ´B¤±c‰Ì4‘©àè—yT§ám;ò3—C7*ÉðlqªæÕZ5àD<̈d*°-D‰Õ€Gñ;×áp[ÞàK;{LžÂ5lWû³‘ß7p¯}&alG°¬9NáN˜l—1—<ÒÃwŽ)'“L:ï£þÙë¨ð]8!*’Ž)¤ÑY}¦ìµY,óŸèÿ;èÆ}ÙÔ$ƒQ3‰,~Ôûë÷²›Zb­­æ«Æ¬7i8媊qí¸$ö‚/\É(ö0œ¹àë¹c˜À…“frMcâþÛC~rÈ»Qên¬p'J´QõÆô›¾ÁñO„œµœ-ÀI| ³Ã÷aŸ2\’&Òµ.'ˤNëà®àV¨b@ÐņɆ2…Hä 厵\"û^89×Ö¦—·X™É&&B¸ÔqŽLÆ#8‚{¸Ú”j—¾ ‹ØÛ4»‘†n/¥š‚`F–¹êE.[ÉôhÖY5:CÌ]S "7È. ‡…¶VÛ«I'²û抲>Z• oß5¬sè¹ct OGo˜ÀÇðð#ø‚É'ð9y(öí+ÌŽázEÎòïjï&N»QÈë Há#(yò›½uï&ð'p_ÁßÀJ›8ߥ(hÿ›dem)='¼ÃóÜõ1j#åpÏ]«Šoæ4³Trã#Óq´S%P=‹µ¦Ìᬂa Ÿ±¾ãi¾—ËV=s÷MÅ1jÝ%qâ°9¤É{8…y!ÀFŸ7»7.kvp®rŽKõ ZÄ/»w :Žɤԩn# -Ü Y£<Þøxoá ø ü þþ9üoäA½ìzò-Ô<°Áä蔑’ÚÊBqÝ(Z¦¤tœÀ)ô±´ƒ¼üü ,à3W¬!ÝrzÅä9S\°½‰+ÚhÖÆ°9ñ5|ïs¾‚ ‹mdl­Ï­Ž‘B}½ˆvëP¡è‚Ãc8Â#É¡ô)|ï#\ý`te"K®Á×J¬0l½ê&û™–ÖȦ·®ç½SU®ý5a ¬±y¾i—òN‚Y0¾tÃNk:º¿ögP¬÷ÇÇAî`Gº }_w~þ%¼ÿ ¹u™µk–pI<rÔŒJ7¬Ñj+‚rªtwߦ(w¯Â)\?„öyÅ9|²ÿ2x·13£¿~ÍékŠ Ó’uz¡5XÃõÀãKxïÁŠ“lZNá.¥¤²rÿþp3)Û““)”T‚±° ‡D‡„&‡#Y_¨‘_Áu´H[3¬B(soúY/ΔÊàR¥è–zšºÝé¯é؃Sª‘)§²¶A›ÉÕ]¡éàªI–×2&“²LˆiÜÿ6òŸð­Å@²áøSàþÞ#¯f0¬¹Ó ŒLÝ©˜'.ÿ2Áæè°ã'8Ÿ½šáìþþ¦dOY\r2‡ÿ ¦ðŸ#g?¿ã¦Eþ×5'r÷¹¬!Øß ,×7:Í®?HsÄ^ï•=¥Ê  +lUïáÞl6‘¬A h¶„·ð#Kæ’Ë@­²[¹åOUE„÷F–­eÀÚ“ü&…A‰$n¥ùNÝÖ‹bx®EÏZ«Ö»ÞQö¨ß·r¹Ty€Ihƒ»8zðÔÕï5'ÿK¸ƒŸ’óv ëý ?Œ¼7Z3ã"– ¥Ú f”ÂHF<¦"‡É)?‡ÅÉ'ð§ðßÁ þoøßá LáC.Þp·âF5Á¹Î$)®Ô?ŠûKn®Ãh­ÝjT‘q®߬Ù8{ªE Dd¡gï•ÙÃíó;ÊÇz_ômÂEâÌ«\M$žíÜRU'y3wËÖ+ˆ›I™†ÎgL«Lœ^ˆ˜áéyS]Ôí’C»i4¶Vð4ÖmœhÖ¼wV#ók˜Ã#ò@šV®‹Bò(œô¶UHà™ʪVa,45ýK²Á¿…¿‚Âá]ø¿àáöSúðÎ…çpÁyËõ.ƯZ;ZסکÁaíÅ-·=×þNs×;Õj&¹Á/3ª¬mÝ ·9‘M ŒJZ ‹}ûШEÊӦ⠦¯ZZm1ºsPÑk ½ÛâÒÈŒ–®ëÚ¼ÅÄËãÂẐзdÓ0ÝJ7êµ¾fЖùvnTveËáìøaø<Àß—°3ø1g)Í%sm³i]øHdljZËŒŒ»$‡$flFBG­1ºr¯<.Õoæá=)$´}Œ#“½‹ç6†ª­f s«0D,¡ÝG« ˜üØè­ºÜÉ{5lõ®w*SŠj;AJ]Ùl7ºÜ%1 t¤²Áa·ßJÙ<'²Â¿®޾„^/íèZòkÝr'Ó±@“igUCjl(°ÄÇJ%æ[…; îø9| Kø-/á5ÜÃW O>'ƒ \ðÐÅíM•{˜äðäªD4h'«ê]ÒÞË¡'úŒéLHμ5š©ÖùÌ>ßžŒód*ª5‡cªÛ¨bZKtBë6%Í&[[·œ¥Ëi*)5™F@â p(îPäp~Xz.Ñs½¯ÿdNêÑn¨û8ŒD€„¢.4[LLÔ<Ü;ß¶lÌ”Æ¥Š‰ê"oN?cÒÒ9Ýù½ò‘NɹAkæpØÌ¶q2©7p¯~™+Ï>€_Â1| «8Ëm|™W´!+t¬u)3Ëç×z¼ZfÔ8-¾”n[¥ôRWãe¦u5ÊÂñ, ÕÐ\¬jW×Vˬ*ì/ŽaˆfaÑÜbP+RQiýrÉ~ý!Å\ N*·c'"“Û0¶ñ {f¸¦ c½ÅWÜq ”;c2‰›Cù-9œ®Ì©¦“»Ì7J`_Þ´†üÁ¥É¡µÚXSu,¥°&÷‡úžÑ|‹!³ >†çвSÎà\ ³T©7Ýê!gj7Xëø ^/˰JŸÙVãUc0ÔW;ˆÐ Ðë:–ä[ž¤ÎSà¹xÃØÁ Ó)/·û÷A ŠþàøÎáö€¡–ŠbTÒØh„ºvSƒÒÛ©ØU6ø?DznÚ©¯èq(­™~–:JdÜhü8Ö±SlM5N3ƒ\“ݤ`+N…˜µ¦yà5ä+åã>W„§ŠÊÆy%…½Â M Q)–QFEÐNr¾ê¢ûÖRÈŽtAãš:¹B*- è *Ž¶Ò±z‰ +Ý {””N^Ÿ C1çÊàC(à ,4»ÇTÛ½„˜ªÅãäÞƒ ì(Vûiœ˜º˜ÃHßÇÇÜJFFN2Ê'^X²†‰&k2ÁÑáPïô*+ݘéX¦’ëú¾“ÑÄ‹Äí%)y^é ¬”&(÷4Ná!ª’¹Å í•T“™®kjʉ4îþ0ßAÖÝ*·ÄL9âè!rÕÖí±¤ÕöüZYç©dL›ÊN0–)âX ¢^«O«s!Òî•iBÿUÜ™(|S¸ÝÜQØîÓš€\y^Ã{WÎ\Òž-K §n#@ÖúXåԜđ¶AžV¸¤²×zYT±œÝIôySû2+zʤ,zš@Ùq÷DWIDATj¬«×'wÌá¢É`à`¹ŒT}ØÐA~¦¤i-à¿\:ØÌ]¸4%ט`ïÂMÈЊ,Ñy4uŒ|•Ó/z§QeŽcvªl´Zï°çîÜ=äZ‘k§æQË`#Ÿºî¶ÞÍÚàô°AÞœ=†gš Ðœp oè¾aÓ%ÓŒMÏ­ì8S×PaKt#­œ‰2lû¸Þ“6¦i¦U–Òӭ͵TS®UÏr™K¢ùi\y#éé\,sf7:a,hCkç„¥ÛÉα]ì™KÎ:}Æ`u«š¤¦| >t ßãÉ#6 ÿÜ«›`-·XÊ Î5ÊÖJæ°Ú°4S JD˜6å¾'M%ƒGoi6‘–Nõ žm¦Øï+)!S;v³¹–1­4€N W©“gP(Æ H=kDkùÆöši ºuÞÂ2~ånû@K‡¬ ¬F޾ éà1œQÞ³x`#00Lçe¶ò™@Ôî‘)¿ž ZaI¡´©×ž¼L*]©2‡eT JvYÛÄ!¥'m&q›ÕšsöNù³@Ùæ †?fÉÿø)7—¼Pv6#ôzKÏkxïH:3e«ÓÇZ%/a”¶¯wÁÏ|ÿþ ˜Â'”5ÜÃuLüú- x«÷ݹ–Ô^Áƒ~y¤¿¡ëîZÚ5r¢l+tªtàFÇ4$ìÿäâX01õèà^²lã‘,µ ÷ò‚'DÀß°]Dû(ÄZÙ¢aÏöðµu£†=êc·—˶РN[±ÕmdÝ/àh®¿{†:.G+Ü9Ï4P¨]æ”Hò0t·8fZWªßt2ë˜<†aÀÇätq²¬ bÀ¤ð…ð³ µß çV.ô´#œÂü]øsx_ƒÁVíss]®"nY}Ew.5…%&Äç›ëÍÂa"nÔqÕK56M<­¬”Øãl(‘Òmª -¼‰âow/&NDíº‘kºâ2ßÓ ±ºs¨V¶•ˆ9Î:§õ´.ô•>´ŠöõFóß;™Â˜=Gp-4}Ë¢£M¾s©´`ׯÌzpÉr!‹ßé7fÐÈÖÑ´„À×9ÑqÊÇä—·¼–¿¥ÒyS8–Ì=j•¥!;ò,,¢Õ*uhûñcø×ðÀ?Â_Ão\l0§ÈaÆü‚›FµqæÒFçU!l…(v¦–ðŽ}—bæÛÿ51%Q(1yÆTÓ†»½øù wâש\8|ä°Zá5ö·\rëøháÊ8™€aaï2ÁÞ^ѰKYÀÎÉ=© åÇðB÷AO§È×û*œEÃÒÛ¦¯¦Nx3Ö˯]NK·-3Saë¼a ÿZ{8Ñgf =k(™ˆ0š€†–¼ÒꚀ”‡ éøKøzýßÂÿÁê“}še‚\M*IÜXoÜ6׉gaÍÊ; O¡‚í¿ë‚â2ŒÖ1÷Ô!¹™š…Z,g"žgEÙ©S¼F £s”År#~3:ôyƒÒR‹—»¸6:¨ët©Ö5‚ÎUÌ fð²_ÀºÍ\ÓWQ®÷Mýá.Y¦²v'Ê<Ù`5 ©R4Ž“‰»l|wïñNlÕÍo\R¦Øñ(îÚ⮵}´“ñáÈ]&¨·4BYhÅ»z Àïé?á+}Æ’ê뎬£Üì«~¹+h”†J°S·qØôq.`›¹6){þÁá«ÜŸiü…p®ÖQ[YsêêZ†½ÖÕ†Wd0²"¦.÷<ítå\‰Eª©°ˆ“ɇ;‡ˆƒëVÊj8ÊèÏ ûcø)äjp0ªÛîa5Mº{ü4þn¾~6A ÔÌçZë5¬vÌïà©vþOujò t° _ÈQÙhœV%èUÒŸ¨£&… ¸8ƒŸÃG:„à°ƒ3øsÞùOÜ*"£¦,Äb/uÄ&2qÏε,w:j®0ÐÖÑ Œ¬ØõSI t] ¯KÒUºžA›œÁ¢)j)‘¥§°fÓí·ÍUp,ª„½á({2í URÝݼ¢=Ä C—¾%»JON¿ˆõ¥Tfj­ÞíšÂ‰cfXƒVyp‹2…äLŽ›ÃŽíu|û 6[f[yxÌ»±Ü’r£ºArÜ.˜Öïum§NIÖ±lk.OzœÂÏ´¿‚·ð{ø}djÓsVwQ”ê‚®Ø&fkqÙhÒÃÃï„Xý!z—áÕ\¨×ReL˜6+‘±z¾îu%w´V­Áå¿&›¢½×uÁõ”Ùšvíx E 0 q7BD»òLЕ)L•v•îŽ8ždÜn0óBG*ÿ»„· wôR:×M¿„Í’Ù¦{Ö˜¹Ç1JÈcaÏz¦õë¨ÆU U¼;¨àYÌÛó‰.×i²Ân…n¦ÍµÊ¿SÏÜùtŠJŒ¡|{  ÿ›—4êÆî]ãyzXB]¢døoê\'àéôH6ékí S»9J]¢ë[ŽV(Nu®\*â„]I›Ý97ðYðˆä„*~´¨éZ†À½ I3v›½Ä0¸)õskºq¥A¶úï y3•} t„f8Âq÷ìl’¦Ó7Qâ¶jÇmÇÑr/ÁXÓ3¦¦GZ ï2™Ákš 9rÁ;x èaB>ב@;=²ñZ„_ËQyJîP4ÀOÝŠü3ø ~ #ü›—qÂDZ†2+§¨7ÆV.tÕ.j dœÝ q·ß~µL¾kAöÚ•%Vcc'ðÌtV̨ÝGvŽQÀÑÝ«nHÊéú’ɇ ƒÊ…PßËE¦ƒLD…qÝ2æc©»¯%ál³2My [Å5a75û[wîEÃÆór'7 »Ï¡ JôFkß*:œÃ”ò±Èp8n8Ø-… ùT’#£é\5*s~9:T]úƒòÿ<èŸqò¿Â/bæ9:Ä´rÀ¦ Ù]òCdÊ‘w²ìYöèÄÆo9w!Hëd¬µcK•¢êqvíÛ©•™Vv&{ô™ê-“"öfĘ;B©[§òbªh[È™ ‡LÁò’8?:u#𶣉äLù`}²Wü…@…»T/^‹fW\?‚*ÔÝ{õ ¢&;½·ã]˜OÎØŠÒ¿Œ›²òÌ)ˆäörwÏ^{÷ð£¦s\¤1AëSøþ~È#bá¶Ó•—ž‰Ó3-^ïÊ µs,KRBà={§l„¯þA,4Î$ŒYåÛšmY Ûg:êÈ(s#_2”MÕ¥Óɰèd3†ž²†]Øåª-ŠîÁ;ÇÄés©4ÉRF¹í©óÆPFä/Ö1/KÎ"ßlv1‰6£1 ¹•"ƒ³*dy`ÍY·aÚRawÂ;ÐÁ= ô Ù[Hà2r4P㹃ÛW)°Ž‡ÃÊŒªíS›L{ Ÿ’¾ËëW{%×_¼sM8(9Ø:Di8#úx,ánµgpt&žhaŒæ’RϤYÜ)5ÄŽ¦šÙãØ^“‰Nþ]9ËNÄùŒ‰'Æb7²sHbâ¹s´¬’þ¼–'2ÓÚÍyé$Þ{5ì5šRæ5…i¥R HÝ“÷äY<4¥|`PÝ|¬£_Ëy2­òQ0©@WW¯j}-B¤pïÃS•rg °é˜½ŠmùèDÂT{ ª‚Ü;¸1•ÄQNÂÆâ'ŽEgûú†eì†p;9ƒiñ…žÅ°—4Ìá<Õ[ŒmálêàÍ4Ú\ì>T´ÔWRiÊff:ÅÔÜõ{z[Â'Nóìõ•ÔEá4Tr"C*dy•J^±îežÈ¸ÃŸ†š4g"nÕJ}ªMSQà2¶®‹(úuC]ZÐÝFæ3eMe7´YÝw¢\Ç®£x؃NÄþ32Ä&žD\<°{`7PÝÂHŽ "Sáb)ü¯]½,W™Ýê‰#õ¹‹ß  …äÅar`à×Ë‚+I¯h Ç”åšjÛ\· ªr¢@æº-zuûXÝèHaÎbŠÁF£NøäL¢á‚æD¡Ä:¨Rç™…ú·¤õ¾Í&YXñ,ç¾S…DO‡Ü/àܦc-6hŒí3eÚYôÑV³i˜]«}±$o—NMHs(È*.wûÄ(– –-mCn}ë•|z¢‡iœœXº^›‚F1wëlb„ú“€à~+ž}Êâ!îÄ÷ÒÚ=Uçøcçv˜\…Wx^DsÈëˆ=ÇN2íÄ‚G§(&2ÓX@|BqÎN[æGѾޅc&p¿¯ì(êf ¥kö ‘óÞƒB'ït°ŽìØ…AìÁXNP[LìÈ]’‡Øsª©8*áÑö%\±“U!‰»û–É[&iÌw bCîò°‹Å{€Ÿ1œÑ*‡(`’ª-µ=T/=‚œ¤¥ƒ<˜ÈL§öOddgÚ-ÝȰRYÎs'RdÊ$^¿†ŸÁ¿€¿€sø“Ïà•xlK[RwðP'Ï0ñfpüï((ÀO¡ŒŽœ¥ì†˜ ôJ™‚±@ÃÚV[}àˆjÆÛ;O­•ÔçÐ0ÜóVÐ+Ûhfk | $ð¾ð‚ƒV},°º—7Ö.À>ÍÝÞS[)[9Jò§ª3,#æ 2‹N©ðj`¶!ѽ«ÞŒNÐòÁaâôápÁ°3oŽÔïw`ßûNêá5íÂÑT©Ðce+¹¨Ì î\ãïè° …•J(m™]öõo8} 3ø„î³gp­r o9ù„«vPzËl*‘Å“‰vÚïâÂV-ã°· ÷£ìÕ/×òÔÁËK÷A³“ÃX‚Â*ºiêd¼ÑEØAô¦ÈõV° \±û&–nFXH_°R­j ¦Í¢û溑…ïÂÝ:ïLMëåFý>zºE{¨¥î1¨¥Šï©(o'ÁÝN2#l‚oHþÁx¥ôð)œ2À­sˆ–qÓ#i€év»=3°N,kA)$Ά¸{$SK$+Ïà]õ;ß9¡i¢Ø6!oã¥jGð1&áàó‰K[†5cŠ2’R.¸ÞŠõ..žÑ5Û›û)Dvztn:SÍqìHVsÅèLøÑ+4„e;’À®ì¾á­Ó2Yö‰àE<úœ{Î>û¹özïuÿ€éxqîáü=ð%ø¬À ÿü'ø ÕÏxç¯áÏàà‹ð+ðÓðAx Üc°†a ,Q_#×£`€EXP,þÜHŸÎÛ£¦Wüÿ8X†™¢òÃzóÜ —ÖeÚ$г‹I`?<=ø÷À \[¶vuìÃЗ¦;v1œŽq.íä °3)‰”“ã»ë^â<¯†«êÚzö§•`S¤3㽚F}iÃ…Õå pª—`†a‚Ûà[à‡ãB­À ÿ~þþXáàá¯á+°‡ÏÀ/À¿ƒïƒwÀëàq8Áœ‚=X€‰tOÛHN["ž‘A†ctð3Ðl!i*Ò«ÌŸ§pNÀõp%쨺½. PÁ&¸^ƒ¿‡„w×U-ÛE¿h¥ :VÕ´ 0È;¬¤´ªˆšSÒ± _û½p+tàò¤06=hÚýyåñ¦n<¬ŸÙ²ÚµÖaž…¿O{àŒÃM†Œu Ÿ€ÿZp5üá-¼ ÿÿþþ¸öªþ3üwØ Ãp ›ø øo\ð·„À<\`ó¾o„ .Ž^`ˆáuð)p'|þÎ Ÿ²ò¦£Ý7‚̃0?) ¼/mn.€~¬ùoáá*8ã\ð_à/xù?Võüüœ¶Ãÿ€ÿ—@k…/ܯÒ/H÷~Þ`£ó1nÀƒ6q¤.ÆòÏKaà˜€¯’ƒÏXìÿÿÃðUx$>Žå/ ÿ àyøe{qÙ¦k N ™ôîyÓÃÒÊOÀϳòÔûð7°Fþ™¯ÕO6Á Áx> ÿþ~>o‚ÛáxfvOµrÛ  #0 ×Â=ð4œ…—àð<ÜU3ßÄñݸáFå¼VîDp23e,€”K*ÝêBW~ê>[•ÿóRC×.Öáp#¼^€G+fä%{`fá/á¿Á»“&–í¼IÂ4LØð»Öœ¿IoÏÊÃdä2;ް`ufPUxn©oº±\P÷ † ,ØaZ&9v{Ö~ê`‡“Ÿ£pÜwÁ#ð"ü$ü5°ÂŸÃOÀ"|î…=öÊIuk©X0!ü‚p®ëàVx5LÕ¬À’uw:ƒy°j8¯0eêØfЧ¶•á°(×Q^“58OÀ,܆أ0 ?¬ðg5õ†²õë¦?K,Œ°fMŒVÅÂ=áÂ.ô̦µ-ùÍÍpÚ l0¬rÈÄ»ŠÖ#Å(Љ} ¼ïÀOÃïE}VøAøFx7¼Ïè XW ÃÀ—¡7@$ À¸î†}K¶ÖŠ~û+qÆŒJeͤmÍË…bž‹·34à Œ¥õ»´Ñ6Ã}ð*8 Ûa/œ‚GàeøÕŒ}îoØ$*#gõ·ž…ryvÂŽêrÁî-Km^ɤ¡à¬aU%`µa? Ö‡žãñ´…uA,¼ÈÄÄÝ5&®gzOõú/Â/Ão×á/àlŽ> ÷à ðfx/ÜψѺ`‚ç àýˆ&¬‹UÃ7Ãõ°;)½XJê®ËûÚ`ŽÁÕ°Œ:4Á:üü[ø|~þ–àA½_ ßÏÁ®†&TÐi™®–ß 'à\ ð9¡«åÞ(f?#âz·`#ÝÄ­bö1¤ÉbËîŒÛžÞHѱ›Ò0vÁõp¼~þXá¯á30 Sð,¼î„í åLÙ»±––Ù€.Ì ˜ÞØárg‹bU[›+ª÷Û%‘;ëb\ÈHýÖa‡É#—ðD>û=x>ÿ ||/|/?]8;a{5qíTÞ*7hñf%1D{DA^œeUuŠš§¤Î`(Þ³Â!îíÞ Ìn•»˜Žœåx?üü=|Þ wÂÅfLÙ —à p¸£W•MŸÔL1c‚;Ñ0DrGx¢Vè¯Ì ÔÚœSO¤/’ÒÔªªmIµëòß{²p \ãpNÂÁ´ê0ß¿  ÿÞÇ`OUK©šÎ?3iÚñÃ[Y’½ëcÐÙ_kš,ÿsÙ¨m/ŽC{€6g¶²Jo†pÜVI N·âŰ‹cð(¼þ Xák°wÃØRU[1ôm2{€°‰~úS±gJ‹Ñ#WSÝŻВNä´ Œ®ôewU»W¬š6þ¨ºçdŠÐ³Eà(샋à"ØRðŠ¨ì…›àup¾ ¿ß w !²9Š­«& ÙL1xja®@)/ì’øØ€¤ªR… Ÿˆ6Üo‚o»`kõ4ÖPù!FámðSðE`¥òn}^„ëÅ#Í-Y7JŽ–Y›B&à »;sUF ?Ĩw{×øx6ªšæÎz¨S:'Ýž”‹ŠwÅ"%…LRަö3ð]ð3ðYx<7U²¼ÖëKî³°«æ¥9 § ½fšH:ŵoE)­U”qNo.5©H$0^œÆá,¼Þ'’^ÍWÀG1Çè—j·éïÃ{àØVW¨6…é&ׇp,K9~ ј²(?uZš^q©”QNˆn¼Ê Ù[eÍÁ+¢ò¬à\ ¾Ãâ\¸T[Ѻ=p#|#œƒOÃàõð6xNÁ!¸°reÈ«L°Ä¿y!×d2²ÜW|ÍfjÚh{2øÝp´fèÁ©>´áÕð!ø~xLÔûžká_#(µ+üðeøUXHl{Þ±ÈUÛpÔÏŒdñ~KþÇû£°j;!ÖàüqLª-X+ÀVV`&R"=ž–t¤× 0nó3!…cùŽ Ý„ˆj‚è ˜5ÌíR™ä[=Á»à3ðSðøø1øNxn°·n ¡ÃSB4;•ž`„†{UÑ®ÚM0=(C0wÛßIØY·¨Ó§"ü,°î…ï‡ß/ÂÀÃp œ_¡f¿?ï†wÂÁ÷Á³pÊ$w™mE\LÞ踋÷u·ŒÂiX”¹êÈ®s[Tßt17ÊWc†˜´ñÆ‘úÿÌÃá:'׈0qš-³N Z¢×´ü#ÀÅ0o… ¬ðßÀoÁ'àÝðFxÆakBf3"xðÂLAÏ€8;€)Ù¯5=Øûa/솃pÜ÷Àup6å”\÷bÝîqx ¾~þ¬Á'àýð›ÔTêqØÃpÜo‚§áf8 ÛêÚ2–­âD0õ¢UDûÄŸSiŒP6üÒÉ‘YõfÝJ¹®€‹kBRZ_#” ©P¡73/д±¸“´”Îúß+ öBÕÌåp7¼Õ¦ûÏà+ð›ðkð ð ü(¼ž Ø•tÎe‹E“½ZfФ â»ÃFJ#”:À8§á¸n€#°½.àZ™5XÌÂI¸…‡¡o‚Àï—áËðÏÀ +p·Ìpn‡Ó0*Ïi€vA6ÌMžÅ5Ec«V~–ŒqwR“R­¾ ¥ôc'ŒV*ˆßœ³ž¸<·flA"¤ˆ[s…\¿,K`&SÄŠ0 â±Î‰BcW€-p:ðøQøSøà]ð< ÏÂwÀ9øX€à ˜¨Ô¥`#¡h¢¼ó ,ˆ*´n6÷vZ2þ_òQ†[aŽWØ3‘‘´ÝІ°Fà2¸Î@^ o€ûà"ÎŪfà'áÍ@þKðT¢Wà"8 û¡U™‘Ý ©j—ë J¢°QÇ ¶“«(K¹ïÙMŽm›C]r¾JÜid^Á\F‘dL“¯áeÙÿ`3¯¯xܘ—™,ˆ«ÜÂYÇ Ãµ07 ¸ ¦áeø8| þü,Ü»X¶Á•p<¯†‡á¸ƪ­=£nÚVÛR#ÅZ¶@‘YFÖu½vTÆ$Dé»éÚ WÁ=p%\ Ga7l©5¶Âýðãðÿ+ü¼—æœ=VåÈT½h1“ ‚ÙþÊ”‘í8 ƒÄJ…uŒ²±W84 UøášÔ×XI>‚ÊJÞªøÔ4ØNÈÜÞò±KJ1çÃOž†{M|5<OÂ7ÃÇà‹ððYx„ zÕâm‡}pö…Ђ‹ú¬Æ´ {×#Eƒ•qèÓqBu½K·O6kµµó¢êb. bÙ À/R‰VŸÇkù —Lµ­ªì/ê÷l ŸR¶9àjz_kÈDÞz+Þ ×ÕÓÕOÿ´ô6{7”õLÈ®u^Ëè7íó ¦3²ZQ°M0 7C„WÁp¼> _‚ß‚ï†*ò;gƒÁ.æš––6#°öV¬°n7ÊKÙ,Ä‹ñâ¶á:f…ψE'«‰8o‹õ—`…÷Á«à`óòäÃÜ’”Aì (áÿ5î~UHZ0ËgÈPÏíq¸'ñ±bsâ=Œ7FÿYC®Í %:ÒmwQû%Íq‚yüÃ\[`¿ù¡~žª‹¸¾°‘öx­ÐGЂ«àFO Ö‘\ÂtűÓš<.÷»¦9ë,‡Ü2&8*˜³Ê‚dêu~Ú+Êg“ƒõÜû¿œN×°†Õ§õÝ s&Ì׊ÕxàCð.x|¾‚CI'",¦w‚ÝŒ×Ù9R·7ö+Þ%#ó%̨léF,YOFÃôjÃmðVø<ü|¾ Ž‚ÈRÖn¯èUÖá¶Ä¥d³Ìeš Ò¼–8›3iµ/å½f7·–¡³Þ5¹ ]¸eA#Å×bæíÚØ…ýÃöWÁ’¸¢Ù7ÀKðiø|<ÏÂ"ü!ü,Ü Ç“:YH›† ôZ)–9›¾ÒNM£¾Še`®OÄXq?óZø’Ô>‡!hÛ2¾Þ?OÔ”3shŒÛ²>t›„ ÑëyÆU„yØ,ÙKMŒZ&;O¶!óéŽ/Å’ìÿF:™^y×Úe1΄îÏ C¬ Ö´n†Ýp®'`> ð¸nYø8ü*¼Þ ÇhÝ© pFN9«âÝ—2úV'µ#褫ÛK ;a/ÃnzÓCÿá:à?Ÿ¥:áýQx¶TBƒãPHõs WJ⊓ŒútT‡0Cƒ.• ZÅ^;sö7&DzH7¸èÈemewT’›+ Og”lØGà4ÜÁÛàGà#pN˜‘æ0< ƒ_€_‚—«xOìÇI€ê,ì+éൣ¾ÿ^±GC‡*è“{¬ãzæé™ÞQÚ0KD(lª-¹^‰ÞçÖÿ±œlG¿HÊ6–¾/Ô í8—ɤ3?gV?ŰšVΖ]p< wÁ]USYÈÀ”4VÉ^‡á¸?wÿ ‚øèdzsHaÃö†Z¢"ù,gD«l¡XÈÔÔ¼`³˜Ú®uGâä<Ú&65 -ëY5BND/WÐZ) ¥QÿjÜŠÝV!ɱaF¼^ÙxÝgTyµÉb=S2uF~:b†XNmÇ›êPžKQj® 0©øÝ(<÷Ú‰-U¡–úˆþ}°ä‘$ÛàF¸«ÊàõƧ#F6œÀž,0o4å ¤$ǧ£$ѽÂÒès]+ů áíTXõ¸³ctºMd!íÖ«±ÔÒä?V~Î÷×½¤â×X*™¹¨ZÊÞ‡^1Ÿ]{eH¸ª¡1£Iãn¤5d×Ë…H%E¬¹Ôú !F[á$LÁñ:É)ö/Êq‡-•ÑÍÑTq(y(fù7€:¹A.7dF‘a¦“­,'bÎöŸ²ÂåKš…ÿ ¬ð§ð8¤˜¾ÔÖ)–-ƒAà E2‹E8"Żږú¸B±µ¦Œ(ÍÖ×ç›T(-Ó.è6Ž Á?}ä¯èQwW³쀋á\ »«º¦e—û8)f°ž‹pÜÔпŽ;¹ÚyŽ+ºà´lÆ—å¬ù œ~8]]±©¾ã…µED‡ïLÀB+ ŒÁ””\EH! "pqaÞ:.à9x7 /ÀÑŸ*Üí¦R›JéÒQ˜*&(ž,À 0 /Â3œ+"þéʹüuñ–§‡iê¶—Qñ rÉžØSBQ[W¬ Ý´ðbú©gÐïoXáF& ÿüŶ¥OÒcHÞDžÜÚ+Uí:‡•$zù)‰ÃGü}®j¶¡g4/*€¿û TgôósÏJn6/y¬É¾ ¡®û1«VuÃêaduÃõ}fü¿!²9b#ÈÖ›Ôȉtµ„XÆófö÷Ó6X-¬ÐµŽ•" #·Z"âò¯J¾ù[M'YÜâ…a•š H¢ýÔpšŠ zŒ@õÕG²lŒS!¶4#-ÅÉU3ภތIöü$ºîÚ‘´2á&#०UCî#“îº1{à­ðzh'ÿ}õVpˆ#ˆq¸Z¶”0jïc9Ú®Fe ¡éd•l•°Ü„p1[0¨|)¶å¸å‡Våf·ÀWR½Lâ]ý/Iw„VÓ}çW×;vn*¥ØQ¾f„Ê!Û1‘æE…iɦäŽßÜHÎIÐ##ðf¸3çì%èÆ(ãòóÜ/±ÛJ{œ{: *˜V¸’–ßhúÙK銓Õy©ÐÃDÇ%À&N¦¦Æî¥GÑ‘ö‹Î#âÊ ¨?g¥…fRÛFI{[©I-È]NÝë ’ö!³ê:†õ å6ó$ê‹ÎªÆ„ë…b,êFíǧWÀ›á’êŽÇkg/Æÿe$g\9õÇ&FÒ×gÌú`A¢9J«iÚ0çÖm)[A{ön\¦ÓE8¡«ã鸙ڼ…|ù‹%5Á–L0Q6»7×å´ ×†2žBZFqKg9Îθe¯/Q“>…TË[lÒh\ Ê‚-3´ÎÆ‚cϵðºú©JܱÝbº|¹ÏšB7¨d¼sZB9"z)ê×¹=Ï7…"œGSË>Œ‘);S™IQ0­Æc‰d%¤†rö¨äìÇ`"Iaí=ð³1~–\W[òVjdòæ{rÇa»=–ll*\—nàkk>ÍA¬c®Fõ 'â+nŠt®æ#·ùW"+è¤-vRNªb\†Y®3gzÊ%[ 5‚ÏE,Ñ%È䔾å×]VÓ;È²Ž¥Ý8#Ûc*ýK£’;Ñl].½ÃÓu²%l0ýâÍÊκ92O{HIwyð2‚6¡$Á7y+B/¦ˆES6©ª×·Á]0Uå&ÉœËE·7l°óöåÄ,¤}»ä<äA…¡H Â+6"‡y™Ò1¡Öqt{寽- IDATŠG¤ˆ˜!2WXáN¡ì!·«"üŒ‹jï9ÌÜ4:r˜ìæ£ðÜ]2z)5T¸s7N•2Jlä›&ÍvÜL#Ói}Uœ>Ù¼ûW Ç„öŠwcmÛekƒôo«¿M¢0¥†cƒŒTë@œb-¦2€w&õW„jZ¬’sQ¤)lË{s¦M,6*W6We:Å.•W¼¶YÀ™{SBJ4JbÎ:Lµ%Þgá5p\–ÄÏh_[ò?¿™m%!ñ§«-1ìþÖœt× þ˜ nHð({Bšóÿc…rP·¸ ¦à ¸-ä–³±¦±kýç1SÅ^é´ÌÀhÊ1½oIÖ¨t»VŸÅ´¨G5wÕ-²jU ÌÜe4å‰\h²ˆ¶¥LDô‚?ö`ÞÂ0š|ÑÃÖ²C#ƒÔCB!•02{±ÿì²»Ô¬õûFtš±(ak^2 õ_–Ö* àAx ¼®:ÀícœnòaÏ‹¥Ñ´æÑâ­íb™9š΃úÆ}€*]uŒúú^Õ)uªm2b•ëô–¬³ì6ü |;ÜH(2 ‘¾ƒðv>eâ–ê7Õ“©ô¤¾£l?™µ©Bð×SRD¬í{GàixîM +˜´¡/Cpôò0½Õt=V¥’`Ÿ!£Xš,³^V•´àD¥?ù^í¥¦œ ã¢`XÙáÁüQ>IŠvYìköºËn± ~€†ç*b§æJE‹Q™Žj‹\$­zù9M( ìyJz–u.ˆmã;2ô*E,ñwŒàyø&8RÝtâ—)ùj¶p›‹«À‹i»‚$Ûù4"–Mï`¸Ê7¦³áuöoô;­±ÿ4ØA YKKM¬ÊñÁï,ZB|¤Ibm™ÎÂÕûäE´½«CãͶub¢Èž]Äqºìïú^Q×ДõU »V Ã\¸îIÎJ8¸^‚§a[íºq4Õý¤*%øžÇËÕ+WúÊQéFìé>œõ7·Añ•à +ê;3’4_ïÒ#¢C²e—1 —Ö™* ã\·8¹„Il£Õι±Ê ¬}òý÷VÃVߺ ’]É;|¾¶²2À‰†ù¤‚˜C¼®óOÙý–¨µÒ.©±®myå‚÷| </Àí—ÜP.÷Dâ×O§EíÃn)2*Ã7^)HTö̂öÔ»4Úî5ÜÏg£gø=WœKÎ$0'اMt í§ž2©Ñ-Þ„Öï ’Fd‹z,,Uu‡“ž3`ê±/(UOwÁ‘ZÞÏr°Ž[á2¸ª*£ñÊÎS`ŽÊ†¤eBS øœÜ eU£ð:˜†­ Ö¶¼‰ûŸ5Z¾¢å1dr+h2àåÝ•îjRª9V” _ï{*Úúü¹©õ{smˈ¹.zæò/™ò¸øïW­Ý°­¢.~^LM½ÎÅr{nûáp„T¶m°®€›áöêü*F² )ŒŠËM“î€-°«:º¸ÐˆI¶Øÿqx¸’®–m{ù®É³¥_oC8 ºñ½Ÿ @;G/ÒðëUY?¯0û„"B/}”3"$ùÍFÆ” gÈþgLÖ¯33âC¿©düYê^`ª¯û›þUm#ÎΨ¼Yaá(ŒÁûÓ8×À(ì‡Ëáê*C×Þ‹hêaã¤,|CòÜ¡¼xgni›0æHŒ<¾°:†µ¿Iìë•Æ…u\ØÔôR?’1ðbk2›:˽TkC"®¾–öÜß±Æ}]ÙœzÁê¾eœÚ\Î׿-wˆË’‘¨¼ë»h©è¶þo§>Ç~I$Ùjþš"œ0æ\7Á½ð4ÌÂ7ÀT•ñ6ÃñFrÞA!ó|Õ0Ôìà«aoeqiõK…½ÃkΖ§ÑÆšLóþɬ«16敼x]hÙÁ=ŠäGþ×KééÆph‚ Ë©´XB M9/3hÉBzÇ‘I ¨E¦²*;l B F®N‹:PÎûáÕ°? ï‚Ça¤b¬å§—Œþ¯Ê£›‹¨ƒe8ö õg"îÕªZÙœ§µwiƉî]¤™.F:•Ù[kMQ”ºgí£žNË»iùø¿ŒMÍøËFºöS…tGšù4e‘VÓG®iÆÎ÷‹E‹VÛ¼¯f–U2˜Ö8•&‚žŽÃ»á×á_Á7%ydTS›Mo®6­Çr!Õ*ÝŠŽJ†ž³ˆ…'bgÚ°u£LnZT!tJ†¬Kƒ4 ìgãä”åç›n†¦!— ¿ŒWUFxvSé%Û â+eŒÉ¢x®ælº†%”’vŸ+ß!¬±¨‰ãt¢¸üiiãø9ø*|¸ŠDÍæº_|Áp¹éô³OŠ'£ÒÎ ¤±L_Kîñ»9 !s;¾RˆF¾j¤:È¡¼‰´L ^í¨]ø±ÁÆLFñÚ•ö5ëIÆÚ–Å¢a½®å¸$šÅÃi'{†|uÌÜ .Jö­Âˆ»¾—Üa¯®ñ¡”ÃVí.E)'«U ¸:ž¹ºðÛðeø¶ÊŒÓ8ãN½ÖÄ“Ed{ZÍôñ/s“ùµv>È,d=ÑÈ •aS-›>§-›œìxz9%û󾹉!£p‡\û”…å÷À“–ó“&©_»8-3»!†Ð`3Ûu¯Â¬ÍàŒ9­cm£é §ÒíXRÊ^¡]"t%‚o*HëJË©&•‘„³©ð>#ßÀÉ$„2º!;ËTðÊÂ×°hZ>cΜ´¯%½Zµ¢•[W![‚ ?H÷4ÙûÇá)øVø>ø¼½Ž‡¡éûO^»g…ˆœœv„¤)dßíÍöËSÅÂÓ”"ÑÁc<üpX6AC"«5æ j7}'±±­›õŠ$™I{Û·Ÿ‘—\BqK½„ŽdžÑ¹2É}^&S1@µãFU Ìi›ùËWäç&fÉ?8Øðθ ^sð-p/Œ×ÁXþ®âe+=ža…#)€½u„ÌڀĽ}ÍBJ"dr‰w ÛÙ«¦¸ZÉâ•Ö©èÞJ¥ã AÛá 1D§"±?}‘ ÝŠ­Ü0ƒeyšÒhWuεcV©´º(O{².Áº66Añ3;B^ §à‚|«¤²ßì„ká9˜‡×ÃX%`Q,ä†lúøHOgøQôPð…ıx܇Y1ÛØ°}»Ö ÇUñ;J±t.2·ÒÓé#'„m_û4Ð$˜à¢â˘™Çô‹ú*íU¦y’ížMNœŸÆ­ù25BÏFíøä„j±¸PpëÆx“g, à eàï¯ÒÍzn»Øõ†¬;á&˜‡À œHšÄ&®—Ne .'–­Ô¾Èýðz˜†;á$¬"BGLÏX—F••øÔ}ï‚… Å«œ>*÷7„”®{ •leu±¹ä>#Ä/- ~w^ã®kí”bEèÊ2w$ó‚S¬F;S©WºÒZÆ5„ô3JêJºè%…WE>}å¥úP”fÉrJ,E‡F €Ã'à­p{’M,¤Óp76ܾyÝã`*tµàÁWÁI8WÀ¥•YDÏæºÐ=cȱj£ ™ÍæTªBfÆqÕ¿–ÒyI?õ¡¯#Ù)•'ádªPÄ&`Ão„ì$ªR©Hã]‡ˆàžÁr'gf÷UésFü|¼.]8?Ù°'›Ù*Z\Ua@0¡²cyå´ÕI`¦á§àsð^xm‰f&¡é;‹í¦ñÇŒ#p'Ŧ¦/MO UŸ^&-Re‚‚öFPŘxŠB*uÎÛ2Ä)(#wg‹o\µŠ2^[¬ù´%=(ù Ó•˜±Že5ÐdÝÈövœ —è;©IÓ=°Y¨…w~¬À-ý©¤NúåÕPL²bpfµ Y®u»›œ¢<÷‹ð/à_À»à{áðŸ‡ß‡ÏÂÂóp´a?ÜOÂ3ð$Ü×ܰqIr¢µ¹BÄŒ,ͧháU•iÄVÅf£…WÓy!•N6йc@‡Im÷™·1óáø·UÕ6™‹J®DˆKËg–ç Û9S†%*‰#dÆCn‚ø[³)ꉨ‘ù*´ŠëÒÏ0¢’æf87ÂsðQøuøMø5øyøqø.x=¼?Ÿ„Oÿ„gá6˜„3pœ¨úÈò:¬›É¾ïe¶Ôoa3‰†7eË?•~Ik>-“Y„#‚:­ž²Iñ¾­›ÅßAv¬ÅçÎ'w†Ò>ª„C©‘lY5óçrº1SQÝ8äatqž«bÊ”S_f5à5ŸÍ2èV•j¦;à5Dv,­ÓA£^À¾ê Þ p1Ü C~~>¿Ÿ‡_‚ïƒ`ƒà{áÓðix'< 7Ãlªiº°È;¬Ë§Òªs;à‚Zùò·Ê¨&UécCCò] ,уZhR¶Õ¤}†[NÈA9¹_h\È^“Ò3vßTk•ŒÌ Æ^½ßR%Ý9fI&µX¬ÍMŒ™ø¡µ9yËÎ QcØëà:8 Gá:¸ ž‚-Ví]ðNø¼fàb ¤¼î‡oƒOÂ÷ã•Í"›…8ƒmù‚|HÏ;—f.¬V4B¿IÞÔáeߦ•G¥}yÞ蟪ñzœF3cÇ~‚ñŽQK‚0o“®4ÆÃ”ã꥛¡L5ãÑ2ÓÅÍž·ALÿ:VÒc6ðÆmÐ*î7&6¤ª*}:Oo\— ãÇ~¾fà68 {à¸n‡“p%LÀ«à¶*ãþBTý.¶Ø¬—á#ð,\VU=nì¿eS¦Í÷¥¯k0 T±\ŽU0sÖ4¾,ÛŒÓ*Ï‘ç? /ÂñJ=œL}±Êh³/ –„A¯•b B_q1ZLkV³# bÆI ”qÖÃÓöé” Ê’ìE77û©µlÆRòPÒÑ’tÅÝ«r›Ë”ŠgŽè™xî&C×¾½'¾— ̰‘L-…é*ï^[®Í’°&áax~^†\^iˆe-Ô&›ŸL ´ÓTÛÚ‰¹o2î'˜ãøaNß"IÎà awýM]*j„‰§!(Ä,·t”ŽBÄD±ðºÝÝrï¨@ݸC:ÒîòS»€×æ‚„nΞwu5óCd0oDZaPi„ÈIΓ÷ †àxÞo‡o†G+LÎß°*‚EH÷0l^ç5a̱ŒoÁì‹&~@”"ÛɰŽÂep)\ ð¯#ö¥Z/:¬Üa±)4HàùI²£šºáÉÂ=#*.&v›X:zud7R“…ñø1‚,½Åb^á}Î8ßÏ ?` ¤Ó¢_ÇØGḞ„o€;ao’wJì†&);RWœ‘^±$ztÍJŽ¥ÇEâ¼øfõùZK×€Cp .ƒƒ°vÀ.Ê[\*R’6êS‹M›¡ôBÞ’Üc²Tñ~ü9Z¬}„å&5(ÈŸÆ&8å˜1$P£ægÐ%¼_¦1a¯ ™§/_!ô]º>ØI?]j§%о¦àÖÚ£ìbx#» ‚go¥Ò@IÒÆ-}ÐÓìfudhŽÃe¯‘bëVÌ“88jfå†ÒáŒÂH÷éÒµñ“dz‰–)Á…}¢‰ ~èq+ ¥"]Qz(¦·D¬,,,aŸ^ƒFe‘-—v4”wX¼éÙä@ôýí€}0 ×Ã\ …æ•MA¼>mN1%°Î×3ÏnÜ‹q¾&ÒZyIêâÏ:•ü1¸ºÊà‚©0‘|N¤Ééœ@bK5žâM)ÿ#ı ŠÍ i”ŽN…W˜‚ͼ“™Ø¹k°:ËS\Úÿ’Ç‘ftŠ32ÞÌ®¬K˜•Á Jô²D;eÜÆYD“’žmê׆à2xªlZH¨JâÞ¹Óé·zÂÚoTí¥ùBªóÏŽˆ¤xØ×Ã1ó…CHR8wýZ úHKn4 ¤®þŦúG‹„œz‰ØÙͬ-‰®v!=ãAx±¿Ø¨:zÅuÉÎû«ûN÷ó²­‚sÀi݃Cúºqµ<¥Ø¹8¦káix .Ëé›ã–Ì ‘¸¤ƒ¼†ø¿›Ö0j i–iëg ×Áýpy5ªP¤mÑË0‡¬€ŠLá«ØÈ¦e¥}WŒÚÏÆìKŽ­ª#O%úbÒÊÈ—±BŠ2ŸzH3FgÒ/P8/ÞiÏ™àdS ~ tÚ¿šæFH!Ûa‡'àŽ*MƒÇK¹Î’…¤Åiu œAO틚>SฟÛå.†ÇáAØäôr'R–ÞXq«m$°oCXçÒÁâE'K±€žŒâ_óÁˆ™’ ÿ9e ì5ôšb‚{V˜T².£Fð‰í¥VSœfE²»¾ÓæT ™+ˆ¦S'Ø>Ï›¬kß Gàvxë`/HEk‚[:C†+Ô«b™U[ì¾|QÌu¢šbÝ3‰™e\–,YÉñÔóM:¡kEÏÂB]ƒ|Û(þ\”2$PÑHëW,t‚”é_Úb&œa£˜2s· ʰŸ°òÜ3òô…t*æD( «§o­kx°ãSÜýjÂØ—ÀpÜ wÂñªÀl:;!õ÷Ú…Îû"6,âÊM‘‹Æ¼uß =´ ‡û“|$>¶éô"sè¸J¦°`}›]C”Å"¯iHÉOv¼Ì!‹¨Y´W²HóP¨iوܬàPsk¿0⇦‘Êð¡Sä4,¢ã¸à¥ d#¦*.Å©,YÆý ±\öâ ¸^ ÏÀƒ0Zån–™1º¤X~í³vf€N®¡K%O‡áQ˜ È·¸1©…âkUJ[‰#Ä‚ŽQ^ï¦Å´BÕÈÜ‚µXà®ûI“&”ÙéYÇZUô±‚í='W}ù$l(†œá™ïöŽaó/×õÜ0™™ýúižw— ĸ•7¬ß„^H‘`®‡á9x-< ™µ¼ðÛÎ_ÔXÄ–èÆ_ˆl„z¦Ãp¬áH´^ ‹D¨Áaz„Ps£©«ÝÈÄU]ùwÃÒyÌ’neÚ€S¯VšŽ5›G¦ª v„÷‘°É ;í­fŽ,J@±°´þ, ¸^—™OZZ‡¥ô»•×\OÀ ¸¨¡ÌX1a€buÎØ9ˆ9%—•Ìéù¥poýµºvÁâuœÁ,‘© •£M Aò­ëZ†aj8EÆä©2ÓÒÏãívîó:³*¤--ÁÖ,sôRLºç(kê͸M²l¤Î‡jT—¡d¥Ó­3ø‚—9SŠV›ÈÀqËñ²+Ú~å°úrMêX\´ÿЯ5ŽO§¨Œ[Ÿ²òŽîÎé\¢÷ÖÓ K’™ÜÜV}Óy 7ê…s±›q7º”6IŠò‘5*º~ŒÉc°´Õv+Ú•R…ã¥Î]ßa3’R)\SãK+‹Z°ZТ¢rÕª9’KKÑ7À¤±€ŒãxùÒÕJ!°k…N$2¬õÊý^ÿ™aÆTÚbI0& ¥üþ°<]¥x){wìHjvÅÜSÒ©ï$2ÖŒl>7šEåù´ð‹ÓiA>¸¡“ŽY§c¦Éެs1.æJwàgšN,¹Bu;5Ä…Ÿ->s¿˜R—l§ªåÌ9*ôRnÒ—zzƒ“N…”Ý8 ƒÅêÌQ¡ÁœúHí·S’j+KD3—vÕ½^6Ÿ´“Éu̸¤F,=dû5’=\œoÜCj•9cþ–Ó¦Ç9èçÚKŽ3UèMž>…ô¾{ÇœÈç$]L?•Ý÷ä¹ú]{]†ó"ØE2+N¨cCO$ôñt‘K2Ò®“6\$¢¶ü­Ò¡lqÔZ²Êÿ ŠŠX~Ó‰G#2Eˆ¦ÙôEvÀA8 Û1-;+ŒÕÿ&ÓÊ“‘g¾Ì8$Ç*ÌöóŠóL xÑ£º^é8ä‰gì§K–ËéY¦ébnãw2*ù×.5bƒVµ.;¼/ÆñaKä-jTV¹¬ÉÍa¸ †+Ù#ëy\îéô•úú"˜€ëa.„+à™bŸe Gˆ¸i]0zBvü†0WgŠyY7-â÷ˆàH¶ky>/ÁÃpm}®Ke—¶÷÷½x.ÎÔMðÜ.ß dž™Œþy™ú^Ve€Ahój# ð’ìð§žGИ»sÓ%`Ç3KrЗ;™ƒ/îÉáÂ1_Á&û*ÖÖê†ïál\Kö(J +À^¸^×Áq¸¾1Ö¸µÂ÷rjØ»a[}l¡liM™Æ%‡rƒïÔÌb^W¾ î€ï·Á0û*ƒ7Ú8f€Íp5< ß /Ã7ÀÑ<Î,²K°M?Žž'öåLºÊ*ÔHCR«ŠÂ²à–ú"d_8?íɈ½®?ûé÷¡4±;aìª%w­mBjc+샽†…[anƒûá~x,NîÁ„YôhÁ\\kDÁ&û書9aPí,ã —LÐõ0o‚{` n‡«*÷0YIºÚ‹à^x;|;¼n«Ž²•ëÑÒ…xâ…Æ-ÎÛв(2B–-×;¼‘κ5˜ I ûÍõÔ¶éÑ4Nélúb_ÊûæVtÙð¿²8dÝs €ƒp ËÓ\gà5ð<œªtECÓdÍJDs657gRwÇx)V²ï÷öa•÷HBÔp¨Êè u¬f5…Wp)<¯‡Û`wÎ_F ¦?&ZˆóÙ®±òQ@‹T‰nœ,u rs„T´×Â:ç!P³bé>ŸE@@“kxØpÈÂ97ÁN;b~Lø æó©¢&w$ö°®›á¸€ãÕ‡µ|šFlH’¹´«&!ò¤Ðcöˆ¦s|±67/è°÷Á#ðmðpÕPUl'%t%`Zªª>vK­ÐoxµÊ̆Å袉£ iÌBÌÞh‚ϨB¬¼mmõMÛ†¾…ü#ƪE™ç`{Ï[™Mb2 ÏæV»4è~y´¦†M°ÏN™ï¬rœ³]–Í®9aÈ´žÛ€‡`Á…• •‰#s©:íN½Î¦Ûå†Ä“µ®„+á ì„Möe¯=p< /Ã3I˺ùp2㞇¹y}ݳÞGsï•G´éÏåÔàÁ}Pz(Í7L&N§Ö,=N_æ0›.ä“݃ îä…4‡€Šó>É}S'Ûò¢Kµ®Æ«Ü¯vÁp ŽÁ^¸†Y¨ô®Pùê.·L@Û¾³Ú—©Q‘6–ñ̰¾¿]ŒíÊÚGĪ¢î‡`?\§` ŽÀQ87Â#ðÝpË× Ãio¢›&lf£¶r ­‹‘¾Ûe\†2ÌדÅŸ«†mïuiÝ";g§eÚVíjÚaJè_ÖU 3,_+´EЦ+ØCœÓ§C0 ãp;œ²>{+z^V'aÉðu½,3+)4¼+Á°>c%Nx[ÂûÊ€ãFr5©­ì0;ïq¸îƒgáýðCð&8\;p° ½ßí‚þw¡)zGáÒ†c»±’^òõâ$á¢ßmt*5>–ÈÐÈ! æÄPÊ)¹Æ]5¾«¡Q±Ý`7\×ÂC0kFѸ‡Òó]ñ{x£YèU5È6\YQ¾bv5‹bðOy±¨‡øÖšQþYi+Èÿ œD-ÙÏÙT1rA" –º‚˜îÊ%ol]©×H–s!ª~§àv¸†á‡ãp¸ÕCÚ\  ˆÄº½ ¦Y2ÆçÜAaª‰DŠ:ËNÅ¡gI/°2Šp8Q½&á.¸.á&Hî® c§× IςЭÉ8ƒWÕò¶Ý•Ôµ¬ón×Åâì²X¨µÂvZbR?5OÙ[!µÅxã`"¬o¡nšé/¤±²“2™Ò¯[+ÉzD¥ ‡`î‚1Øûá ­² éñ@ìºÕ2dÝWÀI8 §Ñ(I:ª¹¬¦R+ŽÎËP±¡ÇR VcR¨2 FÝï½p+O…Ê#pYõy0­™ûõXlÐp¶áÊP·žp¼Ô>œ6M°o"}•0C7‹·‹ïêö-zÄE ?_JS™ý¢•‹kz)_°ž4† `{åöZñzv5ÙÌ®Êg}^ZÍÌ [<Ú0,D¬©ÓÀÅ0YFígkçîÕ"®b¥¦í¦Î«!ŠÌê¡?«³¸[jÃw#;`/ì«Ï{M¦Uaä*B…²›à(Ü7Õ&¦ï«‚¬ª†såV8£ äãƒW6äcØàÝù:.©'Òº×é N†ŽÜ oƒo…Gà[àŽJÌ0#H·•iz'g¬'ب½Ø§É½RℜµÂÕ-nN6:þ•ŽmM4PˆËïxÆvýU?Â`Ã}7U‰BÖÛ╪~ûšd" í4lhªI"9ãp=œ„ãpœ†< ÷Âɦ~¸8û*ߪ|Ä3€õDª(-«å³YVu¬]¯ƒçáàÃð<'asïæt¾owH/\·pc½š‘æ ƒv¯q‘Ðb¥)¸hL§õË5œâ¥ ò/Úm;®iU!am%óENweàÁ#lmˆyÌ"ûÔ2¢SW[³ÛpLÀS*Âð,|LÃÝéìxN7Äãÿƒ˜‘B*«’)Ÿ¶6äŒå¸Ü¯¡ ·Â“ðÍðÍp3Ü 7•ÁÐ:Ò†–‹Åökç¹å,³ò£vg,=8TIx›«i?o=a8Z¸›Vî+T®zÆÊ£0tØ–,¶vXrzéô–ˆ>Yf Ý\÷-¤ŠÿdêtÒ‹uuo €a¸„›áZ¸IÚððb'}½"¥Ó¨]« ¥Ó4$lÕ³,Ù^s„¸«=t!\ p3\×ÃV‚ÝU¼lH§i½Èš¤¬vLœyW3¯H£iL9¢ê­ƒuìÚºœkŠÐNÉpü¾à§ó¶ˆq±ìQ¦ð–/º‚™U¾"?'ÄËä7g rº›)ÂÙ©!vÁUp©±»ý|pŸÆT’3ÙGoÚ’{¸‰Ý¬‰…åÁ)xƒ»à Ø[æ4ÿ#´ [|wÀç–)bQm =¤ÄQ8VIñª´ª¤˜E$GpG¡ƒËì~V%{kε îÈ9”…TëYŠðN›ã aGŽ,’ÄhÜèÙµ/žGêP=ˆj#Í‹\½¾îƒ7“p3üŸkŒ]×U€?Ï{<3¾c_{®glÏxl™øuãGû±öZk¯gÁ ZÕD©ÍB±x}°)Äû#£¡Ö›æõ©,èR‚ü%\6Àp vGÞ³•²¾éO«þy^¢|%zèiÜ÷ÁK0eÛVýÝ\,Är@'ô`ÅÅæá¦âSÅKñäkñ««<ƒÍ·¨ëÍF ÚÑ+Ö:R¨U\ž›v9Óá†nŒ> Zw†R‡Õ7”^$7bò”yþÂfªQ,X°YÇà¹ñªô¯tNÌz„Nð¥õ·ÖÓ@+¦žŠ/+âIaÍ{.›Yóå¼üŸˆíÃ0ûá xvcTSA{„L¹øÎâ‘/VŸ®Çÿ»$“cçGÕÿ~篸µbS: ;ƒ0ÓO‘5 £Œ–@B'…àŽ áŒ¬Ÿ‹ÚÅkKq_óÐrÉ»)i–¶FMƒlp^€×áE¸;ê´LM;H€žÂ%ÚcÐ<Œb‚,j¥m&Á<‚èú…Y´l`Þ»‹—Ú0X«~ìk¸ tcëVÜ“dµnþ3y”À¢joZÒí${J´…6ÁŽ »jdÖG,=ª/nê²²l…Ó°¯ÁëðÜZÄZ–õ…ø!+ñxr0²¥ M#µÑ,й¾¥¥*äµ€qxÞ ¸Îàí’ùt¶Ðõ¦ Ò€6Å+=¦ßÔ­2óŠùéÄ®©«¸ ž…yX_ò!Åš~6< e÷ÕŒËêjÇZeJâþ(ÑÔÍfY‹0¬1ˆ¥Î…¶ R„GĘ[5b]‘3s¸9 ·Àix>¿ Ëð,Ü [´R'l ÿ”§Éƒ’_Ž™k¢Ã»nÌp;;4¸€÷Ã9Øý° ¦áDAeªò E¢!dÈvè,Ž6¥…o|VNNvvÓÌ5F,>•–¿Pixt´ì…SðÁ`‡¨æÑ.6¶V±ˆ•RúâwË‚¹Ùˆ¿Žü¬É­!²B•­ö1jÀóðYø¼ ®Œ r"±p“ÄœŒ 5á7eS‡z^…'À'ÏÁø$ÌÃH4 a´}©Ý™–`v‰;kwè@B/ôZ׸iZÓ:6’» {X `j0ûÄä"ü<< ›"¯/èk’w8Ž$£P&²?ÒšZ¡aI¨GbâÜÊLÎ] ^s&\EÃÔÌg¸O F.µš=ò%ÈØúàVx~ÞÖÂ@¨Z•]‚#»û3\dþ1€!x¾jÀ < Ÿƒ?€×àØ€Ã8h§œGÞ8ñpàX( ÜåqR¥ÌG‹îœ%Ùýº´JS‚ûù^qÑ>ÜLlƒ.aOüÈÚ&„,‘]ÕË^/¡A7-–~%&k•¸ýj6·KæÚCªRØVv<ÇL~ºÖÀÜ&`3+ä屋}P­ô¯Çа“Hl ðø <Gà)x¾†#°¦`WÐ*TË,BíªRºÞ¤,´z+ø¸·S‡J,ѵ-èK\¬6Â,<£¾Y̧÷ /dÀ¸åhÉ !ý·šBß4M5-–ÇOLÝ]#;,+`% ¬š®µb¬Fü¡@`¶GQ+1³’@U»¯êþ(¨^[4óð|>oËA|e{SYv"D‰ÄÙÉË'µë§½HTËVƒ™ð^¾?!æÖýð L†GUY-«\GctQµµUö3YÑDZ1gºŠ™ûV˜óþà…á ´ò¥ûG§zUÆÒ”§× ÆJ´„ÚÉj¬ð¤&ˆLo…G ònµÆÔõK²d{Ù¦ž,ªf¯Ô(“Œi?:á%øü9ü¾ˆ«‚yÈD‹=0Û¹NÂtÙ W1:A¹ NÛgËbæ7›”¾Ãp†Ê)obÜ·Òæ‹¾Ô Ml'Mü]ûBŒ–ÐSâÜ<œ*Žœi¸YÚ˜paù’§´°>Mm°Á{ˆ‚DZA”5>¶Í5n*&Ö:X\rÞ‚…ŸÁÁ¹€Ï2Z;¶Õ2îRm̧͂¹²žèưèŠì{}šG/öõ/×±¢ñ x/<΃Nzèé¯m¹]Ѭ"BVêÒ`âÝ…}˶nÀ> Z¼7µÚÓL ¬«<¬j–¬4¢)‚Aìí¿Þ\:a¿—ì ws!µgT½ß0[Má@±…µ>_‡ßÿ€ÿ‚¯Ã‹Á×9ï½n aЈOšZY7½õ%oɼÜ0îeJÝ,0•ØZ±ODAÓa.U’±&N©Òšè~Kæ ¯ÝëdÊ4Œ(n±ÖÚF3'%®Ø` ŽºjUónò9-Ön`A“Ê ¼vÃVØœ)êbŸã<í‡)¸ ˜ƒÉÂû¶i>àD~˜K·m¬‹ëš!9N>_€†À×áðnØH*&lÝÌ…þ¯—¹¶Uu‹d"Áéøõdú¬(ïIµb™Gá¸{YiÊ#íê5»3×+±Z|àOÀ"ì°*Q#bOq yŒÅ%P‡ £Wâc)ÙLºø¯iúS”µb3â½.¹`íØ2C 6ÄçDÏÀ~ئ£YöáÁx´s:Ås±!ž–¦—àÛðwð6ü¼ÏÀ…/‡3•m$a§<àVâj.N_h©•RrjS§È9s3”ŽØ ¡[HÌ™EÌÎOÅpiEé2ý%(mÉÄI´³ä̹Çe[4!*Rv"sQ!ûa ¡K"fKÒP5=¬(ƒ¨?«ñ|úëè”Ð!ÀÚ‡à̆;Ÿyùû~Ø!aâÙ aãņÉo‘ï„íÓθ'h)]àÅ,ùñìè™1Bûûá;ðSø˜i³vÀVsì‚Îr=WâAàâxíz›[Í&”GVÒV®ú%²Ô<†GŠ çöugô$32 ý„‚QË,›º,ÛYZŠaKûmQ_*0X«fñdz…`qTäâÊæ“ÌñÆÿ·¶ ‰¬'9„Úm®{$ÒçV±·‡ÅóÊç–¦ KrTŠùCçÞ ?‚y¡YÚ¿’0N€Œ¼ß´?¯Äó5“ØÝlï§^‡–x&ì£ýÄU`/<’e´‡IDAT§a" Wi› ƒ-³Ll겕vÒT"y_4LB˜¨õ°j‘ºÂ°påí)rÐ'Æì°\|#f$V‡Y³-$äeY»·CYÅüŸ3–»bªeÑ)¬Yf¢‡*”wãð ø)|ßçW 6–MiDÉÕJ3©?”cyƒ”¹¬Ì1gšŸ+“®9 ÆsUZÈ?dËr|a'Áþ­ÆL«lnðŠøtÙÏËæšnØf(;Ä%”ŲÕ#e®v'u¡ñŸé„Óð6ü¾ ï.‘£ÖÍ‹*ÑYõ.î’ ¨®dã¤L±Ÿ Ý9Óy-¦Måípž÷Ácp¢ ÜIŸkÀŒ‡s>îñ¥f°Ë¥÷Ë„ ìÀ¦À•Z ŽZ?‘(‘ZÙ²Þ¼Xšè ¦PËwK ‚8h²Ž's±¼§iêTËî+³nСÍ!8_„ƒïÀS‘eÉ”eBŒÏ’¹Y ùtØf.)/V€W0×ãp\„³pN…c¬Ð¦îÔØ ‡"F5:®w¥6ïIW«|dëœ'À ,Ä7KKâomMBüë6ÒI^|ÍTFêùôµ°j!MxäU\ÕuùF2uãXRiŸÔj„³‚¾ — ’*­ulí8‰<¶ižÆ©ËýÿR¾AmÛoZÌw‹²†a7Ü sp—œGa*rþqöÝm’øj’Á Ì:%kPwñ:†Ÿ–廎øŽ-¢HÁnÕ°GZ'Aù‰•± °³=Z3Q}:σöAEdWS!Zn(W„¸¨ë³uö²ƒQÔj£™ÉT£)8_†ŸÀ_Â,JG¨“%+ ŽËí‡sóŸÎôD?]]!Ø{à8ƒ± s^Ž?Z´ÜN²3Àäbw Ìðûú‹‚Ð'Š> ï‚¥ö\¬@ðåZÜ–R¨f̳«í}:/áø6ü¾‹°vÂnQ›ì€=0ò9cfÛW±Ó¢D³¡´xތŗ…xB%$ûÕ—sÓÿ¯æ¬}Ln% ÇÕLškZK˨Äqfb9çJÛWa'…¸ÃÁØå ¶o]8‹äZív[:Ò;õÀ¬ƒŠäËÜ%žÏú,ö1Û8«~}™‹Û™a7ŽÂ8ôrð9øGøøì“v6LP—8/T‹Æ}¹…L)› ¾?)¸[ùJ#}³‰ÜRñóÀ–F$óÕ,kb_lHåfü´w2‘Üj'›11Ò¡YèOËAx€{áIxNGÑ´tÂÚ1[K2é—~n5™ç^˜„}°vÂ4œ†÷ÂËð+ðŠTµ~yŠßV2¢niŸ3SÓe@Ù ÷À¯Â5ø'ø>¼ZP¨W#+_IJNÝY‚¨½¤JãPZL~-6,£Ì4oA€Ø"º™„VÜ¥b£wBGôüaÓ3]í2\|íÿ[i–A!x!~+*ûàqxî‡Sð˜‡ÛBv–P:$D6¶4RèMðV¹æÍËeÁQ˜…÷À‡à£ð:<.vÚ,ü6ÂÖ˜«ô{˜L¾Ô•Ò? ¿  ߇¿WƒtT4¬@ß»Wl gì|e{ÄsRÙÓ¸RÇh‹U‘‘ztl£eƒN›Ih’¸†„™.™Æ7Ú’Kâï&äbŒ˜ìgÌèò9=–vÃ)xÞ ·ÃQ8gaga™ãÔ`Æpñ´ë>l™c¸Æ¨±ˆ-üì‡}p‚yx^¹¸¯6të`<Ð- x NlM—Í-Ãp¼oÃ× _†7üI©Ö3p´ àцZ¥ZL9h<ÒÞ’sôãw¿ªœÕ H›5›Y‰;p£Ì/#ÇÅ’T`$8­k5‹Þ]V©i!¦Ö†Ó™éE"Ïø%¨ê2{kàY8·Á)8Y¶è_À=C°%–öÁ†~l™–Œs[BŒÌ¶¶Ã½ð0œƒóð¼gYîb›š :NÍzn`è€;áUø"¼Ÿ†WàÜ·‡¡:!+ÄËÙNˆ¯kœ`£þìþ¢ àÙ žJ‹“ø2-¯û2—uÉI?›2ü€±†ÄÁus!ÀÔQ$dЯL䔨5cú‰êæi$b†)˜†[á ÜRbá¥z›0®3?ÎÀVqß'u:ÇጆÖBåQ8 wÃa¸.ÁëeIU³›Û¿ºX”\j—Ç Ü¿߀/À"l uìÙ$_iKé–2&×I&_&$Ò¿6µhjjñ±Uß2wÞŠÓy^‰Í l0¼¸x±ê'õÀ:ØT° œM§^[[tÕ®âMôKÎlÚDžT!   ª°¦`ðâfCp&`nGáYxLÍ[ñ0Ò + Z0@FvP¯ÊŒp>߀ ,ˆà ÔAÊšsøI·‘âç ÛçÁk6ùQÓaÃvÙTHkÖÀ¯¯' i1Ÿ‡°vÆ•i„Ñ€ÿ¨Âzè….Ø;%—ÎI8'`z` œ„98 ‹0k¸àd¾f`I±ãOŒ èƒÁ_ÁË¡N3›,bMQ©„7ù?hü æMeÛs ¡ôO¿'ÛF yFju‰ÑF–ËBÌû¢U­ñ3‚¢BªÜØ Ðr–Õ6ÓâOd‰üÉeÕÂÏQ…M0ë ºaÖž mèC+¾£l„ª˜AB Æ`=tAÄœ: ÏÀÜ!ÉZ»`+ì‡Ce ›“°ïº?ìYt9æâqàeø3øxHô] +j™Ó0b‹ëíý·nÈÙ"!çùOˆ;™&B/µHqÆ/W±¦ËÔy•2KÆ Kl˜z‚¶NÒªB–¶¶—¾ƒ™íÕ„JôÂØ;`4MV~kk‘¢ÒbMÙÄp©lûæA‰ª?$˜j NÂsðËð¸Æ¥Û°9&dŸ±á©+Y-%;i;,ÁŸÀ2l+éë*(ª„‘͵£R®ÒDJ„Yàóòó{%k^Ú±-[ÚêŸzºß´Í„ðnU󮇿´Õìépº$_¼9—TcÈP ¡n•ö[ÚÎUC “D‡`ŽÃpÆ ’ë­0 ["á{¸ð¨t8û–¯0 5Ø}ÐUP´tÂ$œ‡%øuø\„ÃP@êÉNjW`Mn&_’ì:¾´d®ë2MÅÞ—áø(ì ÖÆ•Kl˜›j}ï˪¥J‚Þ/ 0ù®#æ„öÕŒD[­ËÓ8¢ÃÿGò b¯Sç> [8ž8*¸NÔ aÁ4¬ˆ‹ÚAè€Z¶Ãa8Ó=v@ŒÁN˜ ‰z#û1qNÚŸ‘Æ-®qÄq¼p~^“°ŒÇâ>ô”uÚY¼¦Р 9þw¹Ðd ž‡ÏÀoÀièÐ`ÏYMÑrÁ·©•6ÞŠú‹$ΨJòØ–ú3z4\<õXÌr–ú#3â\_ÚS¨òTcvÍúj¬9ȬÈÃʵ¦úçõçµýp8$sôèÄZ‡Ò-±ãF /‚&öFl\Kþ·å¢tÂ8óð4<§a ö„¼h¡¾"5²¶œø”1¼T Ð:KFKHBJNÂð)ayâXõ‰Ó÷uyi6Rq]…Q‚k½mUη®™š+~T“ÑÊY5|Õ×ÙÃ…E%e3® D­[$I[` ¶@_°¨ÇÖ|«û$A„*Iš1$Ï™[PZ3ÇàX°öufÄ #Sù8ŽÝ¡‚ÝŠêæº´8ÛÚ&8çán8Ã=’ÆqÔˆ­ódözQR/©ô¡‘ÉñòN¬…àmø ü< ‡¡ÃB&â°ày,ƒœôÔ€Ø*F‚âÉ^éšr9×céÆ5ƒjÀN¸Öfiдt…3±¿¥w©ÙñìÛ2oœd¼'&•¦5ížö¡n”t ÷þøY˜U ø n‡ñI8ó–6ž#¡j6j»“m­íFèÌ€ 0»a7œ…ó!l˜+ƒ‡ðrdÍxKUÛ4¶êÁWà»ð5øM àù< #L®v'¯»Ø˜ÄãË%}0a@tp5NV£ÓŸÊ ^×–G`_‘KµFáC]Qt'ÄŽ…Òhi]°öÀAØZ gAŽÏ¶?þÿ\¦‹L,÷í@| ÚN …pê0©ŒÉ¢6XÏ­z?AÆ%Œ¶tÃn8ópa‡áP ¬Ñ f1µþÀÖåKU1ùQ#Oí_QŸ‡ø[ø}¸ —à1x.ƒp †"› µª<ö”ÚS ª°Ù8…z/ø>9ÈŒBµˆáAäZh¼™¥0˜–úšW‰VË™­le?ž²„ûy½IqFôuÍŒŽ88e+³I›‡cp´Ð ÖZ9s`²fþ¶MkõuC6Áz‘Q ÁAx< ga[8‚pî €•XŽ÷Ó› ³-´ôѾØÊ}±+ð.ø*ü=|ZRˆŒÀl‡Cp(è2µ…„À/–ebCˆ†Hb/Л`öÈ€Û}({a¸©$2·«)}Ý.L!ò€5Üö-{Giëø´»šÍv‰ˆ¼ a/ þ0>ù¹-«íâ[ÍËêv–õCUØ·ÂŒ„à¿OÁ<ÔÅg©¦áH$TÊÐ]°ÆŠcW#VyôæY.kÝÐÓp ž‡/Áá¨gáV×€¤HMŠ.›' júö߬ ¬UÚ¦/ÐÖ㊠9äLÀ)Ø~:³O–Úèìgb˜÷'á¶•¦ÓRåþŽÇ[£(ÊñE]¬¢-´v‰ÑÕÞÀ*ü宥»ËùÓ‰Ïâ>Å.êwKšLo:Á8‚†åZØS©ù|¡úÀ²ä½P3¾Ò1Ó£\|I§oƒKð|þþžIq¯j]¼0 ‚°ë:ãýEXÛ¤å¦ù©ÖmØwÁ© x±RÜ©?ýŠªûJD&† ¶Y+ŠØá¢KÍl~’€-˜ýI| T ÖBœÎ90'à …Þ—bSĦrUš*j®‘ì¢þ‹}VWtŒûà<¼¿áÉ ¢'†NØ»‹E E=t´O€‰–o² ÃÅFxÞ„oÃá¿ááLVº*ÇVoUó¡EƒKì:yV}!žGË'!†ÈÎðÈçí…³0½ë2C;´ëÓÜ #0):ÿAè… 8§`4¼[ðºc›ñŒMǬUòidbiâv¸îƒ#° ÖÃfÑ ŠK©yR¸èì_•’4wi©À8 ó(OB)³á€q¸-ŒÃÒü/c¬•ƒéò#ïIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebraexpr2_04.png0000644000000000000000000000371211722777314023347 0ustar rootroot‰PNG  IHDRÈÈ­X®žsRGB®ÎégAMA± üatIDATx^íÚmRÞ8Eá0{eU,6óQ x%YjûZUù'©[çö‰“§Ÿ¯??ü €À§þ¾&@ÓÀ7b< ˆ¸ççço’~žü’žWn¯_‰ñòòréKäÒñÜ£¹Ö§Æeñ;È=fð²·h•ãí=k«.L*ÒÖ¹âÀ÷Æ@^bÖ7¸ƒo%HSÜõ¸‹éIÝÚ&w’ƒ M‘[ÔJànr¤5y븣y»»ðKúî0áþw}zx‚LŽÝ¸³Ù}ºÞÿîräà€ì¼}9²ó„¸û.räÀìºu'9²ë”Þ{TŽ+þ7öV>ó¶’Ú|ÝŽrx‚l>ô­×ßU‚´NˆuÝ’_«~¿¬W¬îè÷Ú0òô¸‹ž {Íz÷mw—ƒ Ý#³Ïrü›µW¬}f¾ù¦äø…Š Íc³ÇBr¼Ï™ {Ì}Ó-Gäh:8xA‚ÛÙú¨wúbõO‚Ìœ²Ð³Èñup êYm“ã{’™5is÷תߣ$ÈFƒýñª#Oäðï äè"°›éû,öähÏÒ+V;«[¬$G_Œé㽚ýñ¤ŸYäŽ9"/:¹i‚LzÅãFåØñ—òùäŠ=±'rƒIcü.½›Çã!Èq†·:ÁkÕû8 r«ñþu™‘§9þ‚ÜPrÌ • óX^â$rÌ syžz9æã'È|¦§œHŽ5Ø ²†ké©#r”6\Œ Áá½µ>*‡/VmÁ¤Ó%W‘c},YÏxIr,ÁúÇ¡©á|‰*^«úc H?³ÓwŒ<=È1AƸ¶‹µè RËûP5rÂ7´™ CØê7‘£žù[E‚œÃ½«*9ºpM]L©8ç6"Çü.ö=‘ Î~T_¬æ…Jy,§žDŽ©8‡#È0ºuɱŽmïÉé%vÑõ^«ÖC5\‡Oyzc÷Ãyˆ¨n9êX·V"H+©Åëȱðàñ7s9fÒœ{Aæòì>ÝÈJ7¤÷ûb#rœØî–¥ rRì£røbUAjyÿS'@,IAp£ÛÈ1Jîœ}9‡{WU¯U]¸¦.&ÈTœß6òô Ga@Ÿ”"Hrž\† “~v9 /*AE`ÿ?–‹/>ž “c!Ü¢£ ²ôˆ‹Zqì9ï«­£røbµ ŒƒGä ÀÛÉ1èÉÇdbä˜ó"Gää ¼VÀƒò™”ÏÈÓƒ“à/<† à’cÄ‹AƒÁã À‹o'È€Èq^ÈV‚ EŽApaÛ2؈el¹‚t†0*‡/V /²œ A£ÖM–¤1Hr4‚ºÙ2‚, ÔkÕB¸EG¤ôÈÓƒ `–äAHä˜â…-ä¸äX8y!Gä‹ È2Á‹Û$È'€É±xꂎ'ȇ°FäÊ[«ò°Q9|±êœº åù/,rMma«y…MŽÂ‰ +EÁÀ¼V ‚ Û¶½ #Or„Mùv·¤—9z‰e¯'HG~äè€u“¥i ’ n¶l{AZ¿eÍÍæbúuZ¶¬™Þ؃·¤¸zYž~¾þdµ¼®Û_´®ø7ÚºÛלę us¡R ¯X¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽAêX«H€ ¡i¹ŽÀßvº&ÿ £³IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/ccbysa.png0000644000000000000000000001173311722777314020530 0ustar rootroot‰PNG  IHDRXcÈ à pHYs  šœ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-ÛgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFöIDATxÚìZKlÇþö!£2"v}JªˆtuñúyJ,²iS¸Žíe-»vÜÔ¤ £ •ÚrÚH¢([©£Ú¡ØÂ1Ú&ãôhý§0Wj€Z”mRpêFPç$…J[ÜÝéaw‡»õ Aãø†;;w¿ùæŸþCq1 óžÈš !„a¸qó:X–˲à8,ËcY°œyeY0 –aÀ0 À0–@':tÝHš¦W]ƒ¦éÐuÖéD§í !ÖËÐüã ÷0ˆ.ÇqFb¹RžãŒ:–3AfÀ0¬_XÝSÓÌdÏkNu]§ÀÚ~œ@æ8ÁåxðŽ«‘®]¹Žd2‰T*…Ù¬CQ«;wî„ï‡>ìÝ÷24˪ƀh,0æXÚ¦NŒ™s1‹ƒ{o, ùcÙlÖQîñx °uÇ–U±^úä“[ÿÏóTžçÄñVFÐw®SSSËRèv»Ñþ»v´´ì‚ªiÐ4ªj&M…ªj”ᕘ\Îâÿùã1‘x½^ˆ¢Èd2PÐäi‰Р<óìÓU°žúî?düÏáOÁs| X¾5¶¶6Ȳ —Ë…Þ¾Þeƒ°Þú)À·þu 5°5ïó/àÓ›7W¤ßXË-ã8 +#p“Éä¼i³˜‚€d2IA–‡d €ãøÊ ³–ÛÈòÇÆ;Äb1xš›ËýËŠ b,sô]LÊõÞ¾î®êŸy^¯Z[¿þÕkøSÕú 6XÜw®588¸$kÙêÛ÷‡>Ó—6ÁeLŸš5= %ÍéŸÍfáõzç n0¤ÌƒŽº††x½Þyž@%±ë/ ȦïöK?Ãû‰¼sþx««Ó0ƒUëw2ØüøkW®So!S®DA #>55…kW¯Ó ‹òÂ&Â’JÏO$ó‹õYHìm{ß5ˆõ×? e?~é%@¡PÀ—T­Ÿl±)™LRpB¡m¤( ü~?|>|>¢Ñè‚uýæt²ì–Åâä­¤½%ÓÀ0•MÄ7).— ñx]u¸téRÅ6>Z‘nc£Á0`©TÊp±$‰£( |>Ÿ£“¢(P¡P~¿^Ýøø8]•%IB"‘@*•2v€6`¸%¯¼¤+“ÉT\Ì,æyõ•ú,$ö¶5<ö“'±±¶––Þ¾MóÏ5ï(·»kö¼å³*Šdz䇗럜œDwW¯üü0z{Π·ç º::§NŸ®Z¿`ûâRng¬ ÔÈçr9Zgm>$I¢uö…§ä~ÑŸ%_L: 9x9bµµúV£?xü8‚Ç70€ÁmKþ+ýYÖËþ};\.‰ü~?Õe÷ƒóù<ü~?úûûár¹p"tbÙ_IÿöÛq µZ[áin^•~Ê`ë…ë\u˜-Ìb||œ6ˆD"ôá›6mrgÕe2™yu–Xºê\u Ķ5¦æÝ¼—{ÊõâûñÎÛ}e²,CEˆ¢A ( %ÃJ‚1ë­Ÿ®Û£wG±aÃD»¢‡d‚€ééi‡gÇiŒÁëõ"‰PöÆãqÚÖ^ÈçóxñG/âBì<ÍÍ¡XœCQ-¢XT¡Yq ]ƒ®é4_¾Sû6†+i°çö£¦f>ù ¡ß„è¶0¯ê¥­ œ}û,~ºg7æŠs˜+¡‹(ªeWø|Ûî,z¤ãõµÀív¢Ñè<©™™™¡«®Ûí6ñVhR‡nÚbË\<®Â€NthšqŽv¦·‡ä÷û1ÞjÀõù|´oû›íf€]+l QÒE–<^GFtq@:"dì^Šdî§É«¿|ÕZê‰(Š$N“åJ.—#¢(Òþ’_"™ûi2v/Ezz{hùw(•nÂo„ÈôÉ|ž!’_¢å‚ îîn2==½ °ÓÓÓ¤»»›‚@ûíØ¹ƒŒž!w2c¤#Òñ]—0åNig¤ûýxžÇ…¾ øèòG+>2Šžé†ªªMáõ×^_ù³™ ûi†}÷Y~¿Vϰ߯ÊDØSg¤Ã`òý4H|@Ün÷²GÌív“øŸã$s?MîdÆÈ{yoÕ, „,š·—­VÿRÏ\5ƒ- ¿ÂÑ_¥§JrW¯\]ôØ~Ÿ´^o =k»rå*ÎFÏ®~‘¨À®µbnù3*÷­†ÅÌbûÖ­Û¶ 3Ò…ú¸m§öp#~«õ'S““x÷| #Ã#k³ Û@\kӰг{æšlÉ®–]سw¶m߆ï»\ήéZ}U(àqíÆšûM1x)¿î?‘• CÙÈ0ÌŸ@± B˜ÿ ðE»¬|•ÁÑIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_delaunaytriangles02.png0000644000000000000000000006170011774645750023653 0ustar rootroot‰PNG  IHDRË_®—pEc‡IDATxÚí½ T[Ù™ï{ï[ëÞ~«ïëׯû¾Ûãí17é¼NßNÒô¤’T%•TRÕ©y\år•Dzñˆ±)Ê.Œ1clŒ± Œ13lÀ€ƒ˜$4 !„ó 0¥P%xßÖ‡­sŽ„’ðý— „ŽŽ¬ßùïoÚG¡P(”gôŸð P(…B¡°( …B¢P(…B¡°( …B¢P(…B¡°( …B¢6š&Ú{ª®ÕxêÎÖ?º»íOJwüyÙ®¿,Ûý7å{¾voÿ7+~ëþ‘ïÁWá¿– ïôTÄOô©æçÌxQHXjQÓ¦‘á–BMF 6;xXV2ûåØÔø Ðv¼³nï«I5”ÆÀoå ;•)ûta=•‰uFU urXož~4ûÈdT–ksBÚÒ†šráÏñ¬¢°¨ -óÌãñŽ:}Qd[š_m°rI 0…»ë$€W€¬¾$€ Ø…GÐdˆ»ËbÕéÒ˜÷Ún µš‰ç…„Em8ÓÚ‘ZòóšcO4F¾Òzåcyüö•ü“]þPvéý¦s¯5œùäô¯k=qoÏ×J¶üaéö?òÂÓá9G!aQ‚­=U×ϾØñòo»åî}ð©‡ýCM¹º¼Pe²Ÿ¡,¬®4öƒ¦¨7?e(½„œE!aQëœ­Š„²Ë[t…g`½ïžPÃW3}ªIV[š[z|?Âô·º‚°Éaýˆ¬¸!ü…æ¨7à³($,j²U™´[÷¢úÆ‘aiÑÊwüg§&Æ;êz*âÉÞWaøPs>XáÝô%Ñ$ÁŽab´#÷”ôÒ&ÅÕ­ÈYµN4ØÝrq@ía{­&#Ðd­00,+!›c×ÊãÆ45޽0M9à~„û«’÷i2ƒ¤—>è.ÃÔ.µ†ÕS™pÿè÷‡[n¥Úì`Q›¹´æÌ°Ò‡å¿6ë8ühNô« 2€_{kc~™ôÅQš›u!?S$ì˜Ç· …„E­5Í™añ^ôƒaÙžÊDCYìr¯pÿñŽ:0ªm麼P°®ÐËt$’PuMôvUÊþ†3Ï5ž}ÞÔÕ‚o ‹Z32Ï2rù+:Óˆ&3ÈÁÆÚ*Ã_3«N;¸Â1 ‹ByV“ÃzYÜ–†³/t—]^2ð:;5xÚvý ËqÇ‚§€_â>“ã­ñ;jÿD•¼·¯& 8¾HXÊ÷ðj4(®ù5E½Þžì ð 5*J ¥1`Wá«QUá®ÜXQ)“ýœfßýkw·ÿ¹âê6Mæ§ýj|7‘°(”iö‘Ivåㆈ‰»E¯Sc½$ '–íuà^= VNNVÍÂñWøVéοP¥îW§“HšY$, å25£º~àÁ‰§Zã>f£™ÀPS·–Þ°TÒ ·N鼜…ª/Šœhw&¾¡º~°âÐ?6†ÿF“q´³ð 1³Nü! ‹ByVíYŸWü“"~' ¼’8€ªB_¥LÙ_ÊòUL;í©º6ÞQ·äÝ&úTú’hÍÍ šc?Ôå2”^Rgj‡šrݲç†B¢P®ÈPr¡Üïëêô€É¡Ž¡æ|Ú¤•p­³ÑØ4PŸ ˆ_òncêû}µipa^z¿1â%ë¸N/ª#7D›sbÒhÀ7 ‹By¯å—K¶þqã¹×ÚÒk³Ž·’•µ/U£^²KÞ Žþ™g+“ý”©û[ã>ç ÖÛP«¾q´íúA4³HXÊ«˜ÞÙögµÇŸëçbE¬çV´§2qÉ»K=oçí³Šk{¤ßj.„«Ü®Î8ª¹u ì9¶ŒA¢P^’*y_cċʔ}&wwzu£&‡tºÂð%ïÆuášT&íjÈnûHzé}ø[ *ܨ/Š3«É8BbØ2 ‹ByTS£}Uß}¨­›èWd)ž|PÓ£šŒÀ%ï¦Ë å‚­Óai±úÆYÌû£ª mv0¡ªy¾ª®‚Ûu…gÐÌ"aQ(J“ÔùŠ5\ЧòYÈš§Á±-y·¶ëg§&¬…ÎFxu`~#^î¾ožyÜW“Jšy ÔÌjnµ¥B3‹„E¡ YmÖqÇó½…‘Òß«$ÈÛpæ7\w®9ó°´ h;õ°_—ªJÙ¯¸¶›äÛ¢™E¢Pî2°Žÿ¤¿æºðW²¾¶ñÅíbÙÓä°^WÆÞ2ûÈ®¸üPS]{ìGlÔ•˜Ù¬ã¤¬öñ—Ã-…òÄݤ°¢$Í,…r °.Ô…¾YZMàà¢U “FéË5ýhr¤«êÈ÷%™¼Pe«¡4föË1jfå »z*“¼ÓÑ…„E­CiÒîíÿû©±^Çwó)ÈUÔÚ“½ÊZmNȘ¦¾iŠ|E÷!ÀÚÜcÎ Ø–Î 1³ ;T){}6w …„Eù®¦M#•ÿA¿Í™;ûdáÀi:¸ƒ½î0p#@Ö‰–^|grD …;óB®´¸î3ýÛ0³Êk{äñÛánhf‘°(Ô2¤/޾·÷ãº'ïï#ÅÂ,ÁëŠíºM²¸àøÚÑõ'¦° ¦•61àáX“8,+‡Òd~Úzåcø[ò'($, µ4§Œ†ŸÿXræ?–•™ä )\³LmiþŽBö»t5çƒ?…Gh8ûBouŠ•¼Óê3…SÈf§&Àºê‹"'G{újÓä ;äW>¨¿…ͼ‘°(ÔR¶(²êзûÄ’´|²°lwð[8<{+z ¯2Ùovr\v¨õê6–•ð+]axOE<ÎðJ¾€fS¯J}3P¿]}ãšY$, eŸ’íÍQoTý»ùñ—®üùjC<¬½yÝK–Õ‚‡n)s ¬ïläýÖ° À÷`rµYÇM½ 0³²+[åW·H²°0 ‹B‰غÐgÕ7ŽºÎèU…,é*`ÇE.9ñÛÔ-@µW«ÓêK¢E¢S$h4®“° 4ty¡@XS̬ìò‡ÙÁØÌ ‹Bñá¨HÚSôávÝŽZ‰ [ÅŠ/e]`Ïõ\]¬‘ßU¥h¹ðNwE‚hÐvj¬žÈ&•mÎ ÖL ¾i‰~«%fÓPs>6óF¢P 0/´-ípñ¿W{üG´_ªë]¥.e]δè&m Š"ÁɶÆo×—\P&í¨ËÝ¿2dÀSò[&° öY›M&œÿ¶«¥íú¡– okoG3‹„E¡È¼[kìÕGÿµêÈ?÷[öÐWÒëdU ˆjÊý•QQJ"¤EbµI»; ÂI5A¿®1úâ(.ü­³$ ¾53Ȇésf’*›²kŽ~»åâ;Øÿ ‹BÚ–îß‘wZ‘°ãþÑïë‹"7†ò8@Œã†U>Y¸$ôT]ýøM£ªbÉG€?W¥´^ÝF«¼¸ð‚=ÎÂÉÓ –Ÿ=K¤Ð¶0\_ýEgS[Ú¡æ¨×tùa.ŸFµ¶`’'îT&ï‘uÝ©ù쇭qÑ$PºvÙ…y¹ëý•¡4ÆÖ[ã¶4{uXZdóÈ”³é¢¾Y›LÊÀ˜F9`cËíÅ}5×[¢ß’ÅnÆþ‡HXÔ†“ù«‡*y/x´¡æüÁæüÆ3¿iÏúœì¼[p@ͬ® ̵Ȭ7³ À'j³Ž‹›ôÂp~·{v¾àtíç?鮈þ Œ-œ+8dÔ®à4ÒÞìÕhö‘ ˆ÷Ø!%‚4æ=0³Øÿ ‹Ú@‚µ³2y/,f逈úÆEÂ]^([Å?®“´]?HbŽËwa^ƒ¬ƒ².`Ÿ“hïl¬=ö„æÆa{$8cðh¤¦K€lÒ»®FÌ40ºD€Sëƒ7ξÐrñ]£¢ Í,µQ l[ê0°ó •ûƒ Y aÏå¥ð+v¯œ¶>GæÂLo¯AV™´[4GÊq¹ïœHž“œú•ãûΦùJc„Ù$´’ÄöŽÓØS™¨Í lÌ‘'ìj¾«8Êñ̵ ,Ø«¶ôÃt‡bÏÕtþ `.¬p…ûïÖ–(Ò¢åº0ïäÉŠÎ’Y²eOðÂËý¾¾´ežš€ó£Löë«MãdÚ½›·?gN]wEBujcä+Ò‹ï`3o$,j}ØÃê4@ÆÆœxzÊ4<=1Úý&eM«õ…À²n /Õ@–YÏgÀâ]$]²í–ðbpwÛŸ€ë>”hh8 *^zì¼e2XOE<@Ÿ{ -x[R€+½Ýš°£1â%Ci,Ff‘°¨õi` ÜŽ|ò«¾3Ø”?Oæ¶’^ÞL›Hõˆíù,šYYɲ*—< Y8ZaW9¢j¿u¬âà? Ôg’Ù\ÅQÄi.eØ gë3³¤w-gI˜Ì ¶wŒ¥óaPwÙåžÊÉ™ç›/¼íkCϰ(ÔJ ¬úÆyânj`É0•¤ÝŠ„´)¡4F•ºÈ. (l¯0‰šYmvð²zJy²CM¹}Þ4ÿßÉG ^þóŸ¶^ùxÞ?5*ˆðEóaySo(ÎòóÛæÌpT„¿pA¢b™h —¨þº›²+KBÕ]z ›y#aQëD`µTé X\þ·*©éÜ«`]&í7žôžŽg˜ 2pt>2ë9ÈŠÂT»öÔU]wê—]wcX>Âk$ù°×‚Q]’ƒ”³Ú¬ãÄM3ç„® €ªÜŽíÓ]×S™fV·ÅÉ”2å»ï©HöS$í¡Ÿç‰v@$x+Àà£)òeÂŽŽÜSðWSûá+›˜ ÆÖq­“fÖARýJ¼>/¢½`8OJXž@©Hú¤1üùea‹T+Ë€´|€¼"ǨµäÆÂ“ l‡Ë&ƒ  Oо²8àí#SlËãf'ÇImBQdûÍÀƈ—%aÏ•˜f€„E­¾U¥ µùð¹µéI8g&ió¹'Y£×U mÛ¢´l‹ mö©àOÀU­¬èˆäÌ‚™­ˆ·gf]ð’x©¬hF5˜ò«[›Ï½ªÍ qíåÀuh¨)ž—Lù®Ï\²I9@“66$½`ÄÎå,ÜǺ\˜3Óz4°;¨R(®}R{üÇíYŸcÿC$,jõ lŸ Ö•ªëé.X!^˜²·:…¸TæsöJzñ–KïËvÃjÎ犻¸õ,×öÐeÁ3öÕ¤Gì5¢vÍÉò`y°Ö½[[z€µ,X'‘Æl’]þЙy´Ž4ï«M#Ù¬aðhŽÙ7m÷ŽþD¢%aY ©)£/ÚÚ;†×öÔŸú%˜Ùq]þWG¢VAºÂpUÊ>Z,`Ý7çrƒ,y #²"ÞnûÔÃæóo4E¼$Ý ¤ýLùk;ÈkEf6=À^dÖ5'ËÎ’±7W†íž½1ò•–óoho}6 É‚§[i¹êœŽœ´‰IÙûé îLB´²(‰™±8óØZ¤°P@w½àÎðnZjöK/½_{ü'¹'q2 åU,T©è Ãy¦É É…϶e#ņ>Ò"eòÞ– o?~R›sþ–dm“„àsØuK(’dÉ e“xNvYåÊ^íÍ!·_?H!`‹ (¼ðÖPS<v¸&Ñl@›óå¢äÁ‹?K;r9ê³¢…¹ßp$µ ÍŸr–ÈÌ/X`ù•mu!OKŸ7õ(ð¿=å%‘lùÔÔlÒ¥=çÎÀvó×û– }X¹ƒû«ùìß›"_?é©L¤y¬HÅW‹Ûràé,²Ÿ#0bË p³dìÍØ°¬!‘ŽºÚà§Z¯le}+@žü,ÙŲXlåJÂ@sjTáшz–Ó-™4#—@ÆÒT&r¼Iy‚åG868Zõ#MQ¯×ýPû,ö?D¢<.R´šô‰®à (o]Oó@Áñ(I÷Xè:·æÓ«ùô_á3O«Hy>>ÞnìÌŒ¨‘ô{0³¶&nYá.@t~ •0‡­N?\ýé¿9J8õ°Ÿì‰Y†À5 ¯&u%´¶ÒêXºÍeïq¨3ÓÊëCO;9˜ôz–àÝ!½còB'ú5ðÈÒØà‚ÑõÚD_~°(‰XÑOå ;¨›£¹–¶HhNȼy–[,/’·,–› LÚSºó/FZïx»aTð‘vœÏï ƒ†tplþÀ+§ÃÜPÑ‘ðÈcšnõ]}ôû­q9 àÑv .ÐìJô“ Ô&ûÁ¥Ë^ ÖAˆHm(¡½á}„ˤµ‹B_[{fäÌÔý »,Í,åDT){©ñohÓæÊ’:i4Ðá(¼u(›Ë59Ò}gÛŸÈ®l£KoáÖ™€Œ¶ßMÊåË©RMóç=£“åÀ*œÃË‚”Ü*Ûý7“C.#xa£¢0‡¤Í&´5È–ëèi( ÔVÄ‹jB´d2MGÍ€«¹=;þdT]ƒ·c¬­rXZ,‹Ý Þ¼ùüëƒZü8 aQîÔ­LÚMã}`»X’ry ¤Éa`…xyM/•}ò×ó–¼.ÑÿaiQOe¢'^ÄBf.0Kig ¿¥/P8?†*©;ù˦s¯­üz‡JiK“«à “”Øål‘Ák$Í$ Âjiˆ–N´eÏɸNE'ÓÀ’é5ÙÁµuÚœu'Ÿ®¥f›y#aQn4°Êk{é(C:h‹ûÄÂ'T t?Ýf9g†[xŸí‡:I¹ßÿ‚Ï3iû"–ùdM,]θÙe ÈÇÏD,¹ñEœ]aø¼ Ï€ •|ÑÙP¾çò+Ó-;à×ÊëPál˜ºZÀÏ’=F mè¢ ¹v­ñø M’µ¨µ†h-ÅÇ‹ ŸK7妿‚Ó§¾‘·D¿Uuä{²K›–¬ƒ@¢PN|ÈgƒmK=@©Gl)S§?Ò’YøôòëºZ¸é³‹TR–·ß:FÁd¯£6MHòÜ+4€A‡È¡ÊñÆP X3o;?†×Q0]ü$ÔÃ~¸ H²à5’èj™TŒ`Áß®ÄúÁÑÒ& ð˜´#Á²hK‹àDµÖfÞëÊÅH\è$…/†¬MÁ²uùaµ'ž¬ü×þ76x•-µRY ,Ëdø<“žÿ >ˆúVú#¡ÏBå»uM31…þÔhè«I%h–dÙk¬«oÞ°?÷¿.Ëf—+ê8\@gɰ¦Žœ+1€¿mˆx©=+X”æðBHï…ò8Mf­Î‚—Œkì2p…´,:óhp®xjmþj!D ‡ÊQ˜ƒ/|î¤]»ú%YÍQ¯Wúÿ£ìòælf‘°¨•ØéGªä}Êk~”ž¼&/ð#ÝF'ѺœYHÐÀö3O¶ÂŠ£¨/"jª‰Émiêék2 » ŒNÃu Y:Ï‘+Ÿ%!Ž…¢ ø+YÜEügv¥à>V£ª WËÞ`CY,XE89®ÕPQÚ’Ý-¦®aIÚ‘Cáþð6 µ¤ÑxI4üŠÖ Ðg¡_ðøð¦“‹îÝ ðªÿ­úÈ÷úënnL3‹„E­ÔèÑE"‡ÎÀÒú¹‚(,ÿÙ?õ§¬3'«Éü˜Ås¾œ€ÅÎòr]sfjÐÈsÍ™íAŽüag#×ܽÒÀý×ö^œ†+|vZ«:PŸIIÆJ–ÅZ£ ËÜÝ"þt ›pž¶ð†Ò.¨eË!ÚÊDú6‘ßÀÙô€‡m•C9ðÿ¡»<®åÂÛ•‡þAvñÝ hf‘°(ן=EâNn*ŽÂý–îºX×þײþ‹tKIÙǯ‹µìJ³È€Ï3ib£¤ÏaÊ>7 82³ãƒ$;0žTtã ëbšAAš7¦ìÛKïÙ‘{Ê¥hð°$ª +!c̳ƒáäÃæàTà t>ªÀ§mIô’A[º'ô_Ïji”€ìÙò=_S\óóN ‹Zc‚OX3UÊ~êÅ`mÈíPÑŠn¿K8p@’ÅKŒ¥µ°B[·ÀíôÛs?ùA𓺂3¼•/ý[Ñ´YO›Y}qÀ¢5a8Yxù-Þî«NnKÙ/‹ûP‘°‹Ä^çÌ4‹KÜoÎ<&QÝv_i&l‘Å~N8Ašµx‚»#¹â¦ËQx½Kn‘Y÷IJƒáàá)àÑà˜iè–†h­œÍ;­N?¬¸º­ÒÿÛ÷üó¨º ‹BÙØŠxpC´Ÿ×äü›°Å&áÏ/ìqñVFe¹h,- ]ŒŒè[/on>ÿ¦Q~—ýlƒe&©`«±B÷âϽ2ªº' }¦)êõ¡Ï(âwpÄw@XGœ~¨ Æ–Vp€fF ÜÒ–Ð_›Þÿ ¡#÷”6/Tzñíú?+Ýõו¾5¢*G¢6¨À±ÊwÑÄ,²–d ’„-f©.lG-¬ìæò2 ¨Dgp1>’ð?Ѐ˜èSJcëBžnŒ|e¨)æù/‰Ú ÀÊÐúLCY,MÛ䢜ðéÜð飪{ÃÍýõ7»î’*Uò^EÒ'­W·Â36D¼ÒùjWÙeš¯& S_ ¬3¶ÞJxw„¶×s°o{—Œ*XiK§4.m'†tÄÆ¦ù·gÞuçœvUêeÊÁƳÏßÛ÷ww·þ±*iÏúH3@¢–!0wò«Û´YŸÙé~¢L$]·™bvae×¼%Q_´dË^W­yK©­q QÈ…j]]Á™Ú ÖûQWqµl,8h‚çCi¥¿•¡Êr -Ù©J.€žLP–Ã}à0hg€þê”®ÒKù§ÁÀ‚çRß”_ÝθÂ{½¾OXgl¯5æ °½äìY¶Úx¶×ATÁÔ«úBßÌÛ"–Þî¾wÎj[êÁ¶tiìfé…wªÿSñ–?„•ÁÃö$,j‰ô"¹º•¦Ùƒûãrè~ËáL@ò©³íœ ´%QU1uµØ5°c½\ëò}ÒnÙ;Eâî²Ý_«;ñ³¶ÔýúâóÜâ—&ùéì­©ã: é(hi¶B&$–Æú'4Õ÷µà[Õªë"_yòt÷½xáœøa¿‚5JØ%m/YX¶Úx¶wq«Íb{ᵋF›rû%YýÒ)m; ÎtÝ逓¿]÷aÃÙëOüìî¶?.úà÷[ãwÌ›g‘°¨õ/À‡"qtHK°˜¤W’VUË ðJ`µ9!¼¸*|êØ¼®EކóvÃØ5°œŸåÅ^õÅç´9'èÄVx|^ëƒERÌ<†—E«àµÀ#K‹Èp”Éqš]«Wé¥÷Z¯l•Ån®?ýl]ðSÍçß캫^HÑ剴ÔÔ¬oÂ.i{·Úx¶—V4åomÎï­Né.£«ŠÎÂpÝí³§ »ÚR©oi½úqãÙÿ¤ÌïkEïý.™»cçÿµž ì)yüZíJ'—pVpƦ[ÑD+Öœ’¢/Û”U:û@HÒ–ÛNr+<yXf¯™7Æu~¡ë Í'¥£·h›’Ù/ÇÚpÌduz Ò"WîH¿>Mu{Ö±†ð߀jŒ|¥õÊG²KÀÒµ·*‰8tËQmM;ÔœŒæ63ÈýSÅÖ¢í¥…ÛÛ~+HqTsóSeò>EÒ®æè×[οÙ³©ñÌóu'ž®=þDåÁ¿¿ýÁï½û;ÍçßX‹-c°(§D"°ñÛè¤nK_Á Žk¤F‹ñ•ó–Æ.¼ ’¶eki…AÎÀÚ›tM"w¶sEm,<Ââlׯf€†`Tÿ¼öØMQ¯©ÈÀêÄaK»U:Ûà m¹øNUÀw+}»îÄÏᮈßÑýNçí² n›?/V4ið ¾ûn ÛKàÛ¯^,¬(ŽR¥hŠz½éÜkõ§]}ô_îüVù®ÿyçƒÿ–ÿæ.|÷wôw¢‘°¨u§9sû­ã­—·PXœ„þ†„ ¦,¢Ð¶Õ ²bë=-Ž8T¸/D¬® ‹‹QðìªÕÆZR Øt²ã]­ .»Ô_ŽŽœÌ³©Ëì’þiþ•‡¾]¾çku§žQß8:X“Û½éÈ?-Úl›nãˆÜ®©é«I^¼_Ñ»à;9NªÚºåƒ 9…g¥1›îíÿû·þ€,µÞdik²µçÞÕyK™Ë/Ò~!\À}6x XtmhCÒ>[h»È£â(ŽÝ‚E¨0Êi5ȶƒè(a]ƒp&AÑz0{^ˆ #r èjö AºqåÌdu$,jíXõÍ@Ù•­4Ò “[Å“À¨ K¿Õ‹¥¤•·5$†ÀÒ ½§[Êþ!I*`l¬QYÎËF°ÖàŠM¨p‹vç²w;m™(r g‘°«ƒq¿HXÔ6°ò„”5@:bßHßóFÎ Z½À§B_Í[ד0® qŠìž‰V¦[ê»ìy[d¬%Löãm1÷EÛuÓ¼!¾éTGQ¬³YbìãËÝ+µ,+ßA“IÉ Ø…}2§€¡-g'yi°=ñ¼58¬¾y•]V“îÛ›:C Äü’h{oaw…yf¦7ÖxíSµ]?¸FñŠ„E-¡1õýÖ+[éÆŽQUÁ¹QÒ‘ #PH^¬0&+L䲂¸2Q˜'ÀX{Ù6,+‰f-0o,#GFÑ`.™nÛ²ÖzTUׄƒy±Ž6TÂ^…HØ@¢–pô—‹ßN ìô#6é$ŒQ é wãµß` YFÖãbyëKX«EëåÍ¡¡Ix a¨t~aFƒy-Y¢D&f‘èÀ#sÃQ®à5ÙoMã ‹r$2@Ô2„~Ï1)…åRü4X°Ÿ6ÁPá- +zQ`Yã¶-bˆÉV(kFÒnáXgß öÈKf;–ÅŠDõ´‰þ_Z6^-ïÝÚ  aQKXÒG*q'”4yIàVÜdŠØšš—+ÜãÖÁÄ›:cc`mg,©Éa=©¤3·-àèP,ñ€€`ŸWlS  O Ï„g@@º‚WKìuµZª#aQ^2°­ñÛ)I¹vVt1N2ü…3µ!Wѳ $é c[¶è7Sö9o`­O‘Ê‚èÆ«ÁÒÙë—(@ ý\Q`:@L4Ÿ—@ºXã±W$,ji«HØ „¥¥5ì(°i¢›?¼4XšÀ2ˆ$êÛ¦ÌsiUb½QxÍg)ýbl¬µúÀë$s@˜ 05AvÆW{!WÑp‡§HØåº×µ›˜…„E9«¾Ú4ŵ=t›ˆþ/440‰¦²Î Ò`ÉÀÛ]&’¶%` ÀKt+‰šD×z¦kccý¼PÜ"ÊnQ»J*µÄ"$ À4øqÞå »,÷º¦³°(§D­&ìT%ï'KꬸÁ0tà /À$²5TÖfÛLhUhi9Û(Ú`p@’%ZûïÔu -Úd80ÑÄXaFú碸0㶤¥4ﺂ„ÝÁ$,Ê® ­W·Ñ´VâÚH%,óŧxetjˆWXÚyK3*{e©dcm#ZÉì/ÆÂÁð¶æô%Ñ„֩‡ý¢0Õf ÃÁ$íLà¾á\ñnDÂ:‹×d¿uæ^‘°(q+»¼E}〆6u¥1°±lA+áÄC²£Å˜ël=#}@QÛW“ÊË¢]®HŸfƒK˜*K ÒÄöµDa*jWì]îay—a'r¯}ªõŠW$,JÄÀʯ|Dm€’ûO–í¶ìàÄ›xÐäuim÷ÇVˆñ/¬ÅZ¶•`@C6BJãÂQSa"šÐ’Ï/´dt- 6Bp ‹Ñä°^ž¸“X6&@—ööxé˜&ìø^ÕRz ZòÏn¬­ÈÆvµ°­fy®–:e!Lisqaô@x#Hž°“·é÷äU( a—p¯ë¯HX”À©’ýèh{6ɉ4`KY¥Ž•€Ì~@€ÔÆŽij„™[”PÂ^Ý.˦õuµÌô—É!/¸AE¼­ýÂ.ãótò˜mHazb”lè!aѽ"aQÂnëåÍúÛó¶NtÿÇÞðz²…Å8V°]P“¬&Á§H8qq-/ÚÀÐ5Û-gãd@·mÞ¹L4Ü(lŸ(ìr ×e²véÕ’Ñÿ©Ö=^‘°(…²Ë›³´˜Šóq¤JÊvŠo±Ïš;’ÌϤ÷ c²ó–°¦è°nò©ôóv£å½®yšÌ HÏæ O4s@tô¡2i7û°âÁd?Ñi’HXÔ0°–™tœ ´78k^Ðy`rXÏF hx¿“nY­‹6ô# ݽíNZ†3á`"Û4õdWÍ6- @,OØÉ‹ 8™90/ß„ l¼"aQŒÛà#¹¨iþÖM­93,ç à¥ÁòxJvÛá{–V‹¹\³-Ðéö ¥1Â"`â|m_5É-ƒ×b믅íÆçû~HX÷ºN³°(q‘A‡W¶R;”äˆ`ve‡z¼4XºwÜ–H´g@Í™6Û®½:–é¼éßÖ[‰¦— çrÓ«‘àZeÓ^‹?µ ÝëFÂ+e™sãXð­t47¥$¨XÆ(‹!6 –û3T¢ §¼/^=ë"u{Õbn·±´ú€{.Ú5œ—<@sryŽU4êJr lƒ "åm®–ÿ®7¼®¯–.HX”³O÷¥ÐK smç\9Z[(Æ®ŽE³ôÉÜla ©ýȬ‡l,o€#iŸ(HŒÕdò«hÔŠ7¿–WÄ…„ݘÁ$,Šo`Yƒ¹dg^,|„xI^R#k'2ë9KJf™£¥í…Ž•‡]ÑQ²Â¶¼À+vc°(¾e fOe¢ã¼T^,i¤Â7ÑV°¢¸&d±Çm¬À5“ =Ûè°uçH൲†YyÁ“ NØì^‘°]¤Ív²ŸòÚðª¬Á$#’lû¤ˆXB& V˜3ÀåÁÔže3üicIÔ˜Yò“==Û& ´v€Wì Þë†x·ldÂN *1 ‹âÓM÷1YÒΙµÙÁ\x´”iJÍ$ê³Cçí´‚å™\ñ.·ÙvÑÆrÓÈmŸš$BÚÍã‚Qµì+FKæÍ_6,a­í´76^‘°ÛÀ&ìT$î„oØ´5Fép[ßP·Xï8gæ5!dó½8æŠÖÝzÏÀ26–ë$¬døì.ŸH`AŒžó £mŒ›m’ìÆ$ìFhé‚„E9k`—ÏNlë“:¨”}ܾo×H˜+Ê\ïXŽw\k÷<7J:Š%û±¯…ýæí‰ñЏxÍ_D3Ö½{E¼"a7º•ÇoW$ío؈$/:)*ð}¬)ã…„¶ÔW ¬˜µ‰]XÌ8/õJ0ÎëæÔå¹Z¡íE÷Š„E­sÁ¹õò‡ÀÖH:e*)†55>hãé{–½•̉qݼ3mÃxûo$Ø6Ì*¼ «`…S Øæ/аè^‘°(›91,A€<¾ˆ~„ty¡,\ØP¦0piÏÀŠb×kþ(À]$H®Øø ±[`ÕÏË:n±qƒCXÄ+e¥ÃI{(äÿ-“'Kƒ’¬cåç"Ø1v½gc[ 9Ë/÷´M€SĆ„=¶y Ææm«Ý6a¯HXßÀ²F±¤©¤)Mylf¼Ú ;¬¢ÚXÞu )—‹„ã­­yÛÈìF ,\N0ï ‹¢&4I³ >ÿ¬‘$pÌ\ÒTŽijØ<»'ÌxÝËZu»xl•‰Âã&ÆÒ“ûBð¶¿x]·Ù;¬{Ân´~¯HX”]MõJcÞí,83o›þ¹d‰‡TîƒÄëP%ä¦=+Zz°*6–;<^V/1–æ°¦UØÛP›uœ–°{_ë›°¼çe#Cùå–‹ïÀgž]ѳ3e¯Ù…d ,³Ò.¥E ¬½ÚÙU³± GÈ.„‰±<æ ]-/a‹Í7íÒxE¢֡åæÄp¦ÕùÆ+’,nÇœÆ19['´«v ¬sfÙû6–\?8K.HŒåEœ©«eÃÂqܹFi×^7d¿W$,J\]¥—d—Þ'KXx¯11 ‹r–ç^í, ' ³SöQª–›”ÊöèÇíq‘삜ÖÀrϲh~ Ãiîíúé5ÞRH^i²¼R61–-îÈÕ_°»¸æ/¾IXxCáå ^‘°(§Ô]~¥1⥩‡ýÀDŠEêF—•”ÊF Y˜#/é•×(vž7®u½\´¨%Ma,§”MŒå‚l†,©òZð¹\ÄÀ ‹-]°¨e–óM/Ëlî ƶÇvBìÐ-@ ×Ûźµ°ü‡o5x¶ Œë¼µnDšpƒµ$˜g³‰±lq—!ËöÛæš¿ÀŸ°Ó|Á½"^‘°¨åØ²Ë g_ÎrC´àïž>ÛU“ÄE]ê3ÙöþFE)ÏÀ’Š›ÔíqQi®s£./”®ýYëÊn|q7r1YÞèot¯HXÔ£@ÃÙ»K/€Õ²X2Å`™!Q¶NÔÚÞßBLšïµèÂæÌð,¼aÝÎMXs¶(¹:ÀY.ÒÊYWvã‹s¬\ç-ß!,ºW$,jÙÒ—œo<÷ ¬ÙaQoTUÌ[µ]©e:JvÙËFøƒ¬SaÆ;]xº5yØO/64qä¨-\Ƹâ.EY¨/àvq»^>BXÄ+µ|;¤kŽz£ÿÁ øüP“ež!ɰðãrŠm;M›øÍ/Ôt;¦÷¡SlxèÉ qáéÖÒ5¬8 ®+d¾·¥ø‚0Ô²>àŠ»Øº®3,צÀ‹xE¢\‘6çDsô›@C]a8XWj9i2ìòHÍd°f–­éš§Sl ,áŽÏ:\éeŒnp™g§p±'KØÔ .µ€ë[È5YuÂÂñcÞ+µ|c2Ð. ¡¯:…䆭iªËÏ Zlàb;»P—JÁmý± Œ…M*àÅd×¥ åq€N£¢”.üÛÒü)X…ýd¹]Ü7«KXì÷Š„E¹¨Žì`b`'ÇaN÷ýa‰Jç ,Kl.=›°E˜š.x ÞhÒýÀvZ×:¾˜Á…‡¤mYR $Y4NÍE¥¹Ñß\Ï.sk ‹=°(Ÿí–óo 5ç•åt!O÷[\hÈÖƒ’êû…¬nëŒó³lÂ[ËŽ›]ߢqÚ9lÚ4bz[-à+ЫMØâZm±Í ¯HXÔZМ><²¸-ÔUÑ+Í+r… =M¬ULLðZÁNéx¯Â²®õ-8$k´›XÔ930á"°d«Ðr W/KQËÎõ*^±ß+å²mŠz & ÿU&Z?ÿËiˉíËÇö–¨Ï„‹¶ì§Ûص6èpå¢ÑX2öÑÒàœžyîJ³8a!a‹ÖËzŸ°è^‘°¨XEÒ'òÄ4äG1GZºô1æzKóÛž2]hÓ,ßCÍù$kC.Kéµ›J›¿ÀW«Ùÿj†‹Érµ´úÀË„E¼"aQ+5°g_×I¸ÞWÖñÚ.åüsóQH4–k¼½ûI¦Œ?„Y¶Êk#‰ÆÈI3cššù…â.@-ÝãâeÂz“°ÖÄ,Ä+åšÈ¤î+[•){­Ó¹'Çi~•k)Sl+“ÅݶÈvŒµê26TÖæŒY¢±p½1”Å’üKGÇ¡¦\Ú·†¸<-.ða11 ‹Z©`ùÙýY.L ¹Ëœb°hNÁ…YÌ)ížE]0¯.–ö—â~$]½SöÑÔ®)89cíÕ$>cÉÇ‚ÂwÑL .‹€²Õ;„Å­-$,Ê ¶åâ»í™ŸQ'ER‚hÊ”K v.ÓhÞvd,;E†›XÅB™k˽1?Ô”7Ôœ?,-‚Sg [OŒruð¦Ì>2Ñ Z/‹b‘°(wØæ‚†ðÀ1qûZ\¿m ÙŠ®‰”5 PŸ)4°kwR·»¤+ U–YÒû¨÷§«E3k‰À^iz†kYtÎâ"aQn1°Ò‹owdÃgI› X$«ÔÌ —yG2:-KsXŒ ,´ñ'[7<[™¸Á ,58ón¥úâ(“AF÷ i|¾RªÒ—Z€î ‹ò]õÕ\o>ÿ:™—•uœö²‚O/[sµ,±WµÜÜzXsé±ó ƒg§&ð½ Í GU÷´9!4C–«ébÝ+*ã9¢{E¢Ü#`_Kô›·#¸m( ty°+·ýÍæº²´*[S@'â{AE:lEZ’·êé<4šŒAb¯-…”­´½–‡‹î ‹r›ºË¯4E¾L2´ÒH·VðPYÇ]ÏË™3ÃãÐý1nº¯L HÁ¦d¹6–f} ¼ÿ`S”žC×¶ljUáÜÒrøê ÂÒ:Ä+åÛñ2@– ȲTjUº¼P—Ç p¨i* *ƒ…h¬°(žÎåˆÄzí–«Éü¢³I›2ýÛ¸ÁWŠ¥ÙpzÝNXÀ¼W$,ÊÍÖØC©Gñ79¤sùI&¼%K'൅åMŽ!‰Œ@—#ëV–•DÏý8WıŽõÒæ/´î€zXyüv÷Ë °(wjêaÓ¹W²\”ô(sù­¾Õ‚K®Û–o`-sb–;Wqƒ®=apºrê2(L­±KÓB8Õ’[ð–¹Ó½bYå.isNÈ.}09ÜIwùg™HO€‡ý.? 7¡_2»φ æ-¹\ÜÜY”PàX ¥1ýÒéx4šª ¥ [pãôv_MªÛÜ+â ‹rÛ’Ð2'f¸¹`±3^Õµ"®{)W2Ëéâ… è¸&u à©.ï$xUý퓾 Îä]ÍVz%#»a Y+oã€E±HX”ûÕ‘,½ð61°é``Wž‘Jw·çm÷¸8|Ï šgw£ø²Dc;rOöݿޟ\·Ú«•I»MÝ­ð£¾8j îÆ ‹Á$,ʃ–[ÂÃÇ•¶ËsYܬi®-,Ým­23°«>‰Ú÷eêjËUGn\Ge¬E‘up²ÀÖÞŠ++!,°(X°B´"€Ë®0 Ä̤ýèN÷¼mÚϱò²({"ÒÔéÝe—‡åw`9OëÀÉö?¸Ñu'Úe¢{E¢<¢ñÎÆ†ðÆÚ*9Kk¯,J ¨;¶æÃ2s xŽucΉqýýê¨S¦ìï,:§Í !u\ÒÛð.c½5é§]#ì¤Ñ€‰YHX”4g–'î„ã: ^à–x(7?ŠË‡e–MØš¤Ä¢–|ËÚÒÉv´glÌ5”Æ‚…óÜS•¤ÉüÌšt¼Ìà\á¯HX”G ™£­¥¦’ØÉô€•dhY=©¥ìuqô¡­ie¶ÐÀº ai‘"q—6çDOÅUMF üë«Ié.Sßüt¹WGlé‚„EyÞÀjk¹Éz+·“cšºµEÛ>Ñ1—Ëk ‹Ö•k ¹ìo‰Ý¬N;¬½u¬³ø|Oe¼6÷”úÆ‘e[º aQ7°55Ô·ÒQ%³L+|X:¼¦QsÊšV4°n‘QU!Ù$OÚÝ]£¿®+8×-åµ=ÎÝ+åI4ýHó8 ÎE²Éª.‹LÉžg6»¦Æi?S¡«KM.jÙoßÌcÙå[.¼­Í ÑæœP¥’_Ý&‹ûÈIÂÒÄ,Ä+å)Ñ91¦îVê"ióÖ•Om¨Ï¤å[´XžnÖÀòšp£–ý¶JÎüPUyÍOž¸S•¼·éÜkú¢'ñЉYHX”' ¬eN ç"Yö¹®93i=51;9N¦Hꪃ Äd?škS2ë&˼Ám¬ôÒ¦æ¨×ÛÒÁIV¦îoŠz]—wri¼bQ,åQ 5å}¨­£.Òš>µâ–+&ƒÌPCí¥'»‘Å" ¬[d”ß­ýü§-ßS$ì”'ìjŒx¹=ë˜#¼ö©°6åYÇlŒzÝ`©ÿ!Ès_Å*à•¤U.t±U<¤¢u×[ÙñRý©_5{­åÂÛÍÞT$ìB÷Š„E­¦ëo6žùÍo»å´É‹»*VÉÄCKö+q²e±ó¶U,RÝóE‘w³)·úè÷%/Ã{ÚùRkÜÇöÜ+â ‹ò†ëiŽ~³«ì2 ¼º1_j¨)—Îß&C§-ŸdÒu[l²¬{b¾(‹à¬Jž« ø§ú§ëN>-Ù$‚×v  aQÞPoURSä˵u4kŠùºBÁI§ö[³µ˜Ä,ÖÀò¶P+Wßýä{û¾QýÙª¾Û|þMap -ÍŸ1£°(jzb´9ê5€,íÆí&Xø“‰óódÀ‰¥i¡¾$š¦m¡õøºä‘©:è÷ö~£âÀÿ×xæ7<¼bbå%éK.ai­yK[JC7بÚ4£²Ü<ó˜ôížg©ÊÚd4°Rwùå’ÿèÞž¿­=þÓE¼bÕå5MÖŸ~nH’M3ܻ٩ ÊS£ª‚æfqi¶¼8/õÎø^¸ßÆNŽ—}ò7%þ~eÀwƒ{E¢¼¦Žü°–è·8ëÆÕºQQJÓ`µÙÁÖ] TuÐuå^©Óü ßýÒ6‰YHX”—5i44„??$É¢M^ÜUb@^‰3ÅÃÒ"š­ec`qNŒ‡5=1z{ÓïÞ~ïÿD¼"aQÞ–6ç„ôâ;C ÙÄQºvÖ‰‡sfCyí5gˆOéÐÀz_5G¿—ÿÖÆØ+åm[êƒõ7©£–•¸Ð ßžH¬´ˆÌ¢¸:‰®0 ¬÷e~ü¥ôÒ¦ÛïüWt¯HX”Wt“]ÞÒ[2Ô”ëæ–¬t’°CG¥¶6' ;oi¿Íq ¬gÙúÕL×ݘê HcÞû-â ‹ò¦È¤î°_*J©ÇtoKV€)E§./8;5>hÍO`L«[&Ó ì]á%YNü¼áì‹£ªJ<HX”·Õ–æ/ßÞS™Ëy·w´Ò—DU“C::Ù°¯&•Ön±¦çÄxˆ­#ò’†ðêNü¬_’…)Æ($ìêØúÐ_ 7åÓN+\•[4;9N†L?€gg§&àGÒ –g`qNŒ»eênm¹ðÖƒÏo¨yö1žvulŽ<~‡"a§þv˜J·×S K‹€­VMF ù«ø<,5°´‚ ¬û/™ýjU²_ͱu䞤}ÍQ($ìêìjý©g²µYÇ€n¯§Òæ„Lë¬õ™$— ÍŸ¶‚…§#]bÑÀºUpÕ7?}ü$vj¬O »Ê¶õÊÇÊ佺ÜS¦®·ïæ[i,ØI£hN“´LÝrÒ[Ëâ”qС»Øª/¹ }Fzéý‰^žÖ l[¥äô¯ûën‚Ý<û˜´juk:*ÙÔ’WÕG±¾žŽã✘• Î^oURcÄ‹M/5åãv ëŸÌ¯f¤1›t…gøºån†šg+SöMOŒ’fÛ]-}*ê[‰µÛyœ³b¶7H/¼Ýù @/T($¬ɨ(“„=;"+G9;9Þ–æïÞ`¨QU¡+›ë¥cc€³p˼¥AhOXÔ24g–•Èâ¶4F¼Ü‘ŒyÄ($¬ÏÙŸÆs¯vE‘þÃzOxI@êxgã€$kXZ4ûÈDs Ȩ’ôøî`(ƒ_á{±\¶ŽwÔ©R´D¿ _±· ë‹jÈnûÁ†,À8 :îÐOüiš¿yÖ(jÊ¥ÛY€]ÚÏ›ŒDt÷“®{ÁK}ãHëåe—·u†\QHX8ʆ³/è Ï’1Úû=1²¬k_M*([C²€TŠÝÙ©‰ù…B/|/œxýíyüv`k_m^™PHXßÕ`ýM0°=•‰Á‰~µÛG¶˜¿š¡HÕ†dÁmÑö.\½ìäŽ ð½XR“Ãz¸Êwʯ~¬/9‰Ã($¬O eÓ¹W ¥—”É~°~×å…šºZܾ˜%{\ãƒd#kö1­ŽãLêe-–lvijð½p,€iOÕ5UêUê~Mæ§rE!a×€êoIžë­N¨Ï×I´9!nçÑÎðøððMªcçÌ’,Š%i[ ÙZ(q¶NŒ¶&ïm¿¨JÞ‡!WvØéGg_èº{¡-=€î﻽¶’´zIö›ƒ¯`ca…k2ȬÖR#¯Ív»k^OoÐpKa[úa]þi ,†\QHص¤žŠÄ†°gõÅ猊ÒaY mÂâ^ѦÚcšø ø¦A^²ñeÖ=ѯvãì¯uÈÖëµy§áÊë ¹¢°kI`$%aÏu•]K³ý=Ñx‰”Þö©ÈÜÃv * ØAs¶æ™ÂYÔ¢,)®ð¦èK.täž"ak ¹¢°kN]w/6Ÿ³#ûLp¯CÍùnŠÉa=U0Ú ˜ ájÍz*çé°ƒ’h|#XÁõÎUgA¼;pÍÃ+ »&¦µþäÓ†;ÀENŽèI9€|´Q­ƒÀqj`IÇBÚaË2_5oIY§¯Ë=ÕWsØJÇ£áiA!aפ´y§›Î½ÚaÉÍÒEz"YЦÁNŽt‘~¯¿!›i“ãÀYÚX Ü™¡4߈yK0N\ê²5™ŸbÈ…„]ÛšzØÿ äÝ÷®’ìW˲ÔKQšËítÊbáYè|C:Ç{BÞ[GdÅú’óÚì`œ^ŽB®y©ÓäW·Ò¬u²×ä™d)’ÛVIë €“FƒQUA ì°´ÈP·‘ßšâªÉ‘‘°@š?)Æ+ »æ×¤í‚Ÿê½+S£²ÜC{Mt_ËÔÕLÛx“–Þà[Ó`ELçÄÐá1Pðò‡šr­ÃÍCMp*ê3im …„]VviS[Ú!SŸŠÄI‡õžx€ð ØÕqÄdÑ‚±¡æü9è0 l%»XÍù£ê*p÷pyÃ^®($ì:3°Ovß½ØS™È¥ý{B`]¿ÐÕƒé"SÁ x5uËg™<”xëÓ¾Õ2U®gpiùmÀŠY®($ì:”2i·"a'0n¢OMH÷Èä‰g¡i°°   ÔeŒ©ïƒ‡¥CûjRìèŒÏ™Ç45p6 e±ƒZxípí1ª*Ì3ñ# »®˜« ù¹¾øðž›ˆEÒ`sHÔµ¯´%œ~DÚtµÐöZ'æHgèÂk#T…SA²\‘­($ìº4S­—7«R÷ø¾Ð7ðyæ£N7²FäwIªVK!0eb  ¾š¨ÏÜ “ºár^U— ¯Žz쩈§…Â(vêa[åƒ?ïºMrþ‹"ÁÏzè‰ÆÔ÷õ%Ñä)´µÀñiÓuhhà™¸„ïˆ$N„ÑDc’îZ ?zh;…BÂúŠmŽ~³íƺr§c´=ôT´Ê@™²o¬½Œ‰É¦ùƒ_6”Ç¥ëøO †²X8Ã``g'Çiº+™ÇƒY®($ìº7°u'žö‘‘Ú–¥«‡žhj|Ø:Ø@²h?-:A–ãìº<½ðª§ÀV¸„ÌNMÀ*N|Å+ »þež~ÔtîÕ¶ô#šÌ ²„·TUyHCM¹½Õ)À—QM-™3ÖK¾`îÖ¥%^µ2^ï@}&¼L“AœÅ+ »4P³þô³ÙÁcšj2ÅÀsÅT–¶``õE‘@X ƒ³3*Ëaù¼þæÄÀu ¨J*²$YÀYx°8 úÕø_…„Ý@¶>ô×g´9!ÃÍuž{.Úå¬ëˆü.ÙãúbˆŒ>´¤j­§A‡Üô¸~L›Fh‡¶4x8.…„ÝX꯹.9ý«ö›_t6xz+Ÿ”ÉV&jÌ!m¶-maMÝòu3©›²U™²O_Kø±¯6M™ìGm,þgC!a7¢íÈ:N–핉ò>°¦ûÞÕÁú›€ò)c1°´Xv :¤“]ÒüáL’}Â93Í—€³Š!Wvƒªï~²äô³``ŠrÏ•P©ïwÞŽªö?È÷j5°™G3üÆVMf×¼u¢O?z4%…BÂúº¦M#Nü¬#ûÀNW6ÞÙèѧƒ§è.Ó—œúLŽt‘ Þ“ã€!Ï•6xA´³-¼"šÖ:õ°<,\EÈ‹Â,Wv#K›wº9êµ¶ëFUž8HÓ`Û3ƒúëoƒh–Ì8( _£$¶Â áJØ+ŽÏB!aÑÀŽƒÜ¾šëÄTzxààPS®îöYÒðôv„©«™ æúbˆN7X‹§.H‹%\ȳ\QHXg`#^;"-4xöÉ,i°º¼Ó=•I@UÚ´¬xÀ5ÇV’wuý a«Å¨ZC®–â4üO…B¢ ¬:=` þÉÐòp"ÁÐ’HP~eT^J&Ä{èÄõrƬA€¤Ý𕲕†\±± ‹âK•zPvé}0°½UI^hw ¹=;Äp'šÌGiȦYkeN ¯|€£­ÕÉbceã(ûյǬÎlÌ¥%U}:ËÄÃ=êGºË.4d‘Á_#]$k¡•O‹ °Ò£ån©º¶î»,¢PHX— l²ŸôÒ&Mf¡ì²GK ¨à):r‚Ûo’®Û²b.‘ÀÇÙJS\­åw6Ò[<½+ˆB!a׸M”Ü¢ƒ]=ýŒÚ¬ãêG»î\詸 „úBßÜ–æïË–#)ÇVkÈ53ÈÓ)Ã(vmK™øIË…wHýÜS^¨UÖ+’ö´]߯¾qd .ƒÔæZ‚°>zù¡)®Ì×ÙG&kò˜}ÜÎB!aQôPSóàóŸ¨R÷÷K²¼“êßW›¦ÉОќr=ÔÖy!òëÚ•ÀêR¹ÄKÈŽ–K@¡°(û²Ì‰‘'ìÔE£ÁÓOhþjF‘ì'»ºU›õyoÅß4°Ö×ô6éŠ ¬¡|2 »ª¶­²îóŸÂš½¿îFOe¢ž8¥HÚ­¾ù)ðK{ëØCMµOXkÛV¦|`ž ¹r ‹ZÚÀJcÞ“Ånî.¿âµL)RZšô‰æ&IZ –°äü˜ú¾/œ kŠkzËV.äJC®(Öy Ioןø¹òÚp¯CÍù^xÆÙÉqyüùÕ­Šk»; Âê2²«N.óW3ðòiùÀbBëBÈu¨)C®(vÙVþ‚"a‡¡<Œ›w Ì’'îj¿¨Í;m‰iF@窞„1M ™B¸PšÅ…2àðk P(vy¶)¿î󟪒÷vݹhT–{çIÛoÉâ¶´Æo×f}¾êÖd w®hþ×6…B!a—¿.žy\úYYÜG=÷âuy¡ÞÁÀK~å#U*Iƒ]]kê–CõÅQ,F­!WÛü …„]¶úëoÕü…*õ`gA˜×ÆaõÕ¦•_ݪN÷ï­LЄyd“F±¨tØÂ³›¿š!{\iþì …Bºh`ëNü H×Wì5ÌÅZ¯|Üré}eÊ^e²Ÿúf ——áSc½†ÒbQ;Ù—l ¹ÚÆaQ(ÖEʯ<8ñsõͣڬϽ†™ôÒû­W·©oÑß÷f›íÙÉqºü7*JÙ¾‚4Ëü,6mA¡°nò’ÓjƒŸTÄoïÈ;åÍ^V·#šÏ½*ûHöÆïØÙ©‰¡¦\kÆÃV¸örÅ,W ëNuß»Rwòí·>ƒÕº× ,<‘4æ=ÅÕ­òÄOtù§==`qž+°„V§l°‚2G¢PHXw“nb´6ø§²K›:rOz§Ä€  ÖtîÕæóo*v¨’=Lö938SMF ­ÚŽ ïllK0”Åzz@ …„݈êÈ;%9ý+¥'€÷&Ì™[¯noŠxYvyK{æg M,tÈn[MëIoƼЉ~5þ7@¡°î×Ôø`ÍgOHc7ko3*J½ö¼}ªÆs¯6†?/‹}ßsvb ]›¬+ ‡—ÉÞN²\+áŠ2¦©Á+ …„õ”ÀÜÕŸüE{vÈüՌמ·»ôR]ÈÓ­—?T&ïó„¶‚?奸Î[’Ò$Y$++ÁÑ„(Ö“öamÐe1ïªÓ™ºå^{^óô£†ˆ—š#_iŽ~S•¼Ï½ƒÁ®Ò W[Aã: ¹b–+ …„õ¸Ôé‡ëCŸÑåžôf"*hL}_ú É©gd—?rc›m`+]û“W[?>ѯÖå…¿Éa=¾ï(Öãšéª>ú=iìfuÚa/L1`¥º~°þä/N?«ˆßæ–ì¨ÙÉñúLMF ¯|`Þ’)a(³ú‚B¡°ž–òÚžúÓÏzvߎӬ?õLMК/¼½r;;5AR\éô^\uμØXC®(Ök2u5ßüYÜGÀY^~¨§Õ_{½&ð_jƒŸ’]Ùºk-°tÈÆUicp¯˜åŠB!a½­–˜M’Ó¿y{Úàœ¹1òÕª#ÿ,9õŒë]  ˆ²uj¬W_©+ ÷rè…B¢,Ö ½ô{ÊÄ]m釽¼|žèUÜ?ò½šOÿ½õê6W¢¢\ù€Ø :¯P›uC®(vÕÔ·¥!ôÙ¶´ÃÞ,1 êÈ ®ØÿÍÚà'ÇuרJR\ 2~Äà«™ai‘x4…B!a½¦Ñ¶ªª€ïª®Ò„yFæéGÕA?¨8ô¿‰»–å1aá/Z>@e¯(…B!a½­Æs¯Ö…üBàý‘S#²¢{~_¯ùô_Mú&çÙj(# ÛÙT“C:ÒX 0³\Q($¬XUE…ÿ·U©û½\b@ÕõZù'%½¼ÙKÙ 2QprëJ"rE¡°«¯9sCØsõ§~©Löó¾í.ÿä¯Ë÷þÝ’vö‘i >ÓT¤sY“´Ò€¼rE¡°¾¢Á†ìûG¿§Hò멈÷þ³k2K>þò«[XNÂVIé„]—ÁvÈæ®ãumiþ}5©Ø'…BÂú–•„þ²1üyeÒîUØš3ßÛûõ²]5Ñ«gëÔ°Ì5Ð_´F€ö!Ô—Dc–+ …„õ9 7çÝ?ò}eòÞ¡¦ÜUxö–‚¢Íÿwóù×…¿25cTU€35”ƈÒ®VkÈ…B!a}Mæ™Ç‚Ÿ”œ~V•¼wUÖ×µÇ\ôáÿcêjakz€¾(Rt°+*Ÿ%ì•…B¡°¾¢žŠ«•‡¿Óze+™¢êuMÿv¤èýÿ«!ìYöF:KW&¾çf«lí«IÅÆ(Ö§ lí±'Ͼ¨¾¸*‰MŠ„íE›~×Ôcíð HÓ xµWÛ:ѧ"M[°O6 …„õ}u—ÆÜ?üYìf ת@ɇPôÃE¶¦ù »¸RM=ì'ã ìÔn¡P($¬ØÇ_^Î<§¿±*Ðu7¦ðÝÿ:"¿£/ŽrÀVóô£¾Ú4{õ( ë‹ÒETù®"~›÷K ¨J·ÿiÉGÿC™´{ .C¼@€¶"LóÏE¡PHXßÔôCU‡¿ÛñbOeÒª,öïnû³Ökv3piŸl°·^îŽB¡°+•úF@UÀ?·^Ùêý-£ÙG&Cyœ./têa¿è&‡õ¤O¶½\ …„õeMöUøVCø Þžb`i'HB®ª Ñ$VÚ´Å:  PHص(UÊþŠCÿ(OüÄ›%`]õ%Ñ`NE]3é“ÝR¨LÙ7PŸ‰lE¡°kØÀVìûfCØs®ÏÂrÕº’¢±dÚ'ÛP‡Y®(vmK»¹Êÿ;ªë½“ùäØºN ´ë õÙÁØ'…B®y™º[+ö~½ñì Þ)1p`]¸=ñšŒ@MˆB!a׉š"_©>òOºüPO?ÑôĨ=ëjžy<Ô”«LöÃ+ …„]?z¨­+ßý·/ÛK“r—hgQëj2ÈHǬ’h ¹¢PHØu¥†³/Vù»ûž§ëZ%j]']^¨&3hµz  P($¬§4"¿[¾÷k-çߘ}dò²u¥%ö\- …B®qÍ™ëNü¬òðw=4ÅÀ®u3K‹€­ð¼8> …B®Oõ×e”íþ›Ö+ysö¬ë¸N¢É ꩈÇ+ …„]϶úÓ¯>úÏãÚZOXW]AoëlrHGz¹fcc µÎ ÛÿàFÙ'¡¼¶Û½1Pj]‡e%ìÃ’,WKcÌrE¡P런æ¯fªÿ¥êð·Ýh'E­«yúm,_1äŠB¡6au…áe»þJsë˜G­ë¸N7‚{Å+ …Ú(„5?þ²bÿ7Áú|¢Öuj¬n¢3·Q(jݶ3ÿTÙ®¿4”Ç­ü¡È4[ë:ûÈD daÈ…Bm8‚-Ûý7‚ºÂ¨èÔø ®0œµ®æ¯f†šrÛÒHÈ  P¨ HXmæ§¥Ûÿt¨)ß½ÖuL}_“ØSuÍsµa( ëÓšë»»ó/%aϺ¼~Z׉>•./T_ééÆ1( ëÓ’^ú t×_’:+wXW@ª¡2oùCeÒ'Ü-¦®e²_kü]a8Ž&D¡PHX×ÕñòÝmL#@[}Éù–˜MòÄÝFU†\Q(ÖuMõÝþà÷´¹§æI_×úæóo´D¿=,-ÂÑ„( »R=8ñT鮿ëÚv# þä/õÅç1Ë…B!aÝ S¯êö¦ßU¤ì“„='O؉½\Q(Ömª:ôíâÿ@ú«QÕ=|óP(Ö*ßûÖ¸1Ë…B!aQ( ‹B¡P($, …B!aQ( …„E¡P($, …B!aQ( …„E¡P($, …B!aQ( e£ÿh°9<¯ŸIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/tip.png0000644000000000000000000000070111722777314020051 0ustar rootroot‰PNG  IHDR*Þ bKGDª#2ÛIDATxÚu’»à @!+xŒ¬’6¥K—¬àR+hJ·”–TaK >ßžþRh~j?ïg0qF@”Ÿøƒð!¢ÊòeH,î…0܆x˜”0‘&p „^—µªJéÄ5y»=ôJØ % P<†*ÄŸ{Œ®”¨…Š–×Âj÷ #û7±^ñóŸÍL~Ù!=™ ä&Ṳ; ‘&rgߊFâm‰¬Í©×Pý•¬Ö;Ùä óot6BöJäqC ìXduÀê³Ýi]}OLð4+|) -íCtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignatureee9d877396ce267aeb0179d35f81b2ac3ú'tEXtPage25x24+0+0¾ñ ¯IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_band03.png0000644000000000000000000015615711722777314021053 0ustar rootroot‰PNG  IHDR,,\Ñ© IDATxœd¼ÉŽmY’¶Ìlï}šÛøõî5]6Q™’b% $%j"p €h$Îh ~B_  §„ J¢T‹©*«ÈªÌªÌȈ/âÅóî6§Ù{›™ç¾ÈdÖÃ÷û¹vl›­µlÙ¡ÿö0ØuÉ?øÝ¸Z?Ýàëò¨É†à§õ†â1ÜÝAän.19³»ƒ.Oþ|ÈÁ5 3« 9Ý]ýO>=VÑMhV_ןþÒ×Èj·º¹¸ :sTÃq¼âWõ›r ½ÄÃ/î$ÖSŽmsKâ:æ¡írmš‡.iñ.) Nw‡»ƒ±Ü/Á!nfî0—&¨(0؈Sd€àäL¨y¦È준#Ðôù—tùäD§’k"ju< è8³9æ½ïlê‰È™#€*‘Á ³áJ]3{KsŽXãØÕ‰'¾~5=ûƒ»÷§)ÎZ3Ü ‰…×ï½·µvSy4Ëb5²7DRc*‰‡Ê¸ˆWÀË0—20;P‹ éE!ed“P²€È¡à "A—¸ÁUBrˆ3“8ÜÛXç©_MN€Vå©(jj ‚“!–ü¤âTg‘ý@!ƶä$ùX˜ÓdbÞFÑÄà 8ßÜ&̬"àÒ¨ÅXÂÆ›¹¨¾úúîðÈß%à®ý ñúT8ñåÍÍån{WOrÚXŠ#ÅñpzVizÊ2UF†°¼ ÛCbÓ‘i`¦¢`6?\2# ß”¦LÒa³µÙ²Xd?gÑ,%"~÷‹[!ü@oðž =ª”©ÅÔþàyõåo¿¼?ØœC$urŽMÉn~pUʘ'zLGõ¹Ÿ|[ûenô‘â£7«¦/ÂpòZBÎaí®¨ ø”"ÌSÐÀVa:±01Äh¹WZ2Ìm –‹“Hö‰ÕZj–g]&K<=XU=Œ“ÆJízÖóté7Û¼†ƒVÃaššÈD_Ú‡ëïß"ºP‰²šâU®’Áf$0¥åF|L4¥mª­k? áþ¾~ðbîÑ•ké¼~ïû³×7×w^biÛ÷sÇSgã¡Ûôѳg2ÙôfX[D£»9æñ w±¦¨wµÌÎJAÝ­š»±Î Ô…Æ=¹+ÃÀÄ’ÔHJ '‡c³÷N«VDd­vxšdŒR'îÔœ`nC)2(ÇcVi%AÓ\(é<á2¸?Ü =íæŽpÈ'':¤Û¹ÿÄbâ á`Åpw"ÀaÎç ë¶4?©å¹¶›u›ß{‰Ã/Xa…êŒfîþã¿ý{OÛ‰×Á»©ÛNÝôÕwã]wýrÃe¬Ã|]ÇÓZWl8Îm³ˆ@Nî9d)Jäê$ wb÷J´*¥:ÅnZ :$ð`±™@ 7â‡0½µ\O4:jµ\µT×Q“U†²¬Àpu8¹È"– P»9°w„;:j5´“|lj ‡@^Ýr˃Ô$Ù$Ûu¡_·¼ÚºEOµ€Ø%h-ñ¯%üÝÿþçãþ4÷ÍQ¦×¿µ–\õ"5«aŸ•,@-tÁZo3)6‰r 6g1–X‘ 9|é½ bƒ0Ì‚x5æÁXX« p°ÔYM嬂#NÏÃi–d¥ªš“™µÌÌ&äL0ØòOTÝRRˆz’€xxº(—3ÖW:ÍÕáP"UwrÜ`îK)8·Egöøü½÷±Z/©VkdÎ÷äIÔÂÑ¢8éÀw+yxò­îžO“Mn[õ0$‰œ¸µî¢ñäÓѹ¥Óq¨˜Uˆ DXºÒ¯-yF̪NNîB{°Äk ÜÉj–> >¢ ãä#£TuðaŠÏ…Ý)5`8‡€ÙÙÕ™+înæîp­DÅB/'ö¥§õn»]‡?Õ}q"÷Â7s îDîd8C–¥fQG´ºýà%¾½B€S¸0frHN˜;lþÉ~ñÕ÷l¾Hœ_ ³·ý*åæŠWÜCÓ®(­­°ßÂO‡ÈjØÁì´´^"0cÁ g‘ÏILÙÁoúxªœP–;´Š £5ºŸ¼Ái¶!Kªƒ¶·!#qPwv(ƒ\YÍàøò0,&…ÌJ\§‘Ï °uí6ûGºIYœR…€;‰ƒ•#&j4Üþp‹¨™4 O71P´Ãøð³oþü vGãüÕ'•(Õ]çþôl½jW”Kˆ5‚Ú:I3'O›ÖBPEb‚›ÀüŒ›`b œÓ !8ÇÕŠÁ îîJŽqÓŽ¯«Õ¬4 gë\z7tFIØ)9/u0* Ü'0¹;‰—ãÁÙá¹äjSâ¥j‡¶t–¯šæz­P"8ˆø\蜉¯¶""R]]maC› · pÿ“þ&æ þ“?úé?¾ë_à?Þý—×ç$üü‰wÝåªòè£4}×4xzÈÞö„]Rš—ÓnK&3ªù‚똄_GHl8‹‘Oz ÐP8&r'‡ E¿N»6";GEÃðÖ¥T9qf&ƒW”b‚3ŒÈòéÊœ ‡˜‡ÀÂKý 鸙Wü~çGí‘Șˆ™áî—ÃG #7/†íÊÜ7pW“¥I-׿þ‡ßKׯxºû ýóƒÔÛLJ¥ôWÆëð×Àã_Xs3ËñQ¥é·}èBi§)hstcƒð´'D0‚ƒœ$ÃM(—èÓ±­ìu?…Ƨq‹õRa`6ë¦ã†g‹^¨EÕÈjfl#"˜š‹Ÿ±ƒ„`p'BgÌæŽBÏ{`Aºz¾ì~÷¯ÒÁÌ hp¨ sÁ D¡&ÎÔûéñ?I À;4»þóÇ÷ß »´RgP¢M¯ï¿üã{þÍÚ¸ÇþÑe`? â¡+Ú4ñç›?ý¢[çýˆ®çSõ4'Ê-[ Ñ'íj \Àm¨ˆ:K7c˜ZèP¬ ùÍS ÏÔcŒÕʲº9Í× ¤FÕ˜‚«‹0‰[ ê`2##q]Î’*…V}lÖ§B9ʪsÈãüp`µ`ÒCzïY;Wz÷,y¡'Ðsó‹nîÀ”% ϾSñwlì×®Zá}ìÇ)qjv²Ùl›«O_„_þìûØÍ&ÀÍ'·iw3ëTJÉÓt_izûÃî}ÚLw³¹1Iu‡TS¹)hi|T):h¿¯…›ñ8ª …jUnÖ‡…ì#x1h ´4G˜»ÂÒÝí ÄB°tnYòî#ƒàîVUADÌ ]ªLˆB+ešÞÿá’g&^И‚àp'œk…np†CÄ‹o¿·“_»@ù¿ÿb÷Ò4ò½_0w+©Û¾[¯o›ÕøàØäW ?¾©qW.×u•Žûð]>¤§?yÜ¢“¹9‹³Ã  AYRÑÉfÇx,«“§ñ4SF9r€ºGˆ eyÁî&®æP*ÜI„e¼.DK 'WÀêØ€L¬dœTÍHz6}ññ‡ýq¨²w;g/… ¸›[qcöÝÍì‚ß¸â¿øüÇ?<ÔÝ>]l'JqÚB›47¡þüÇÀôUš‡Ÿ­nV›‰VÝÍáôÝö›õæëy÷ ¡Çúƃ$ª{%q!7&W õ•5{iF¶RÁÓT¹Š„ÝÈÛX,¹¡Ž“ÉÒ·´Y7æä¦pwó…H Ä„ÎA3†Ó’ Ëu"L³³¹H§uçÊBÜ×Ïo^öñH„+#’%XK^9 cÇT %Ù]·ìÛ`}˵ïÖ›ú[./>¿®Teðš·ÿöOÇŸ øôÉû¾w¨RÛãî=hÚêé9ާùí¸:‰p5U Îä!eÙ\šÓ/Ϧ҉šIJÜHƒàÁ`ÊP$Ê5Ì 0B¼Ø|ã uÀÉöOÁœEßÒ¸…9^#ƒØŠ˜È¼"•Âm[Zfb× ýíRšj¦õÌhüWß?g–©NBñÆþ—KÖ?þé=^}.—ƒ y-Tl3…÷¾øý«çݧÌéîFÞþý8ßóòÃWI¿œß~þMæ¯ßTÀ4[­…öÒe[à\•ÓÛ¸YªC` ljJJVɪhiûì"d †+ºž+“Á™ xa$DÄK¿=“"'s7&¨3¨ .«Ýæ®"6?xqù¬L{G°L –fíNxxÜbu£ØÄ9^‚Aô—‚õϾø‘ט÷ÃÓ@€¢“o0aõ(OÓ§ÝY¹=:pœßlšûóøÅj{wZ‡ãÞŽƒ×ƒä@XoúèDDÌ»ëoÆ]ÏamÅͪ…`Æ$$ °™ÍGí*œÜ݃æ}ñB/áæRªÂe¡Qìî n$b"B\`à„ÀÕ`Òzk,´ZÂø=8rdëÝwù¶€_ˆº"¶<µ\Ã;±ôׯïÿÑFÄk:Žc~3Ö­{wå#Âûoòv׿žˆ¿ qø¿Þû‹†^uŸí¾þìºÛ¿íïßÎóüø4É1ÏO”|JGb/Òd ©ÙÉiŒÓܸ.2¡FB Ú˜P÷|Ú.ÉÁ5WX ;ª+™#Š(˜i©QF0ã…—[!Q’jîDfÄ`&*æg3n+áê—ô€ëbr@˜b0-ò5È w8ˆwiÖ×öÃOjÀ¯C,Ï-ü‹øi ŠÛ‰âñÿ|âyÿbl?*7»y}òÕ›ÿï¶9Ýsùü_õùæï 3‰>ôtú’eº;¸å&Š–©¿lʶŽV¸Q”ôá«©º´ïó&ÔØ)Ç‹ ÎÁ6¶m]ñ<‘¢s ŨÛ<¿©ç¹rÔ\ jñãÍä#rn’ÆV‚¤À0O’©1H»•À¹µ6CæÃ:Ì„·õ‚|t]mCøG­¿µ²YZ‘ ‡ÎåŠxûNs@òl]š˜ù7R*>ÿðv‚äýSªož×­ßÛQvÏ;¾Ÿ©9ýôuKOÑáúOF_õ˜õ Ü–"ík.ƒ&8…–š`dî9;ku7§õý~X÷2s¡ 1ø™ÓÃh)=ŵpK“‘Á])À ¤F f'€c„Yƒ‹\ˆ°jìÙ“¤Õˆ~ò på¦c²)4) DšÜö]Xµþˆ†ÍíÕ‰÷3€Ÿ%%/çÇÎL}ø`•%X¯ÊºËå09š„@Çn~s?Õ&®î¾nqŠñQýp÷M,YKÓ¦¡t—fÅ$8¢ÐWg¸—lÍT@pÍ9Ÿæ¾Î<e–!.¼Ä‰˜˜€@Õ.YQ¡ì:•j2»ª2ˆDjdšwVz?­#™Ê5[®fL IBCD㺯mÍÅÌÌ$Ҷ¬¼¾ Oñ®ÿúVª¡ætæJ¿ÂKðRM¨©fk¯€ÿZÉ 0þô÷³%Òyn?;nxöØA¿ùÅ•¬e°Áê(qß¿š›c“Xk1pw_$8á:´P4Üivb÷{ÜÖ:»XŽ!‡TχßåÝ„. Å8©-ˆ¦ ›Û's/ªÓx5õ^·Jd±Êó¯MÓ§¶¡¼Z÷.ÍêzÿjÐ`#dwÞl»ÝËMèXÖÛ ²ƒÙpVø–ã÷sÉZ 4™–,¡¿øÍÂnb |þø‘jšýÓín@ÍøuⲞË@6óRÓÃãAšŽó™˜1Z œ`¤f Y‰j+˽Äí³G50XRZ'ÊÄNpãóØhn ™-—†L‰ˆœ\㺩瑘ƒÁ1H½\uÒlßêmÈÓ)=Ï­ÎÞHº”í–ÛäÛÞ!]ÃeÌ.Á˜Åøì£‹6"4Þ´ï]‡êë¢í}[¦ ´L,e†¸”º[oà7za€ý¬ß Ói°áhD)Y‚2í§›?뼉U‡¤*ªŽŽ.湩 u&"Ó*â$¸«)O÷÷k"7rl¦¶B&Rš†›éŒñ”˜Œ ˜¡´ÁÌŒÕȇ†ª-ìm§D²’z_ÖýnŸ(m(¼†6­l5¶*>mÕj-‚o†ÓtW1‚hÊóðÜM褺œ,‡Ç¿ÕIαb0˜cŒé73K*!ÿô÷¦¦ˆ½}"Ý7æTFÝÖäóöE¯3®ŸÝiPXÕD MTÜ‹;5äÔUˆ…5°&òzÒ'°˜\©ÄŒJéê\qž4û™ÓE(`U§>x1–豿X=š„YC0IÁ_œBå«ÍÕ¼šÃûÍ´!å‘:“šSÒªÒgŠI™ÎõôótÈC}ÝÃ’¹-*œ—ˆ-"ø‚@D°¶Ÿ‘í/¬)!¢þèæiÑõ›4îÕ¤5¥{ËuÓí«‰l‘F$IŸàCŠ™$5“̲LÝc7%–`æàýzw‘cZ[{¬¢'g€ pîÖ˜•“–R  Lž„!¤j`Ÿ$´Ý¦—u¸_”ær7äum®ó¨Áç9ŸNH,uz#-—A›é´Ï1`nînn°B]Ó…ÜL_6÷—ëb±„©ÃÔ äÎKv93¹°•$z_>Ú<• ›­õí&pϤÝÃ…}ú»è½ ÞÄØ’ÀBå®Êjuñùì.u߯TÁóiûì)»9Ÿbb¥Ff³)H•TŽ”œN!–géðÐÕ9 •ù¦‚èvN~9c[_·"¬•›˜Ð°MhrD¹X÷5S¥–ÍÖv¶™óæÐ‡öêù­›ïÚ‘64¬æâˆù•p¹÷„lÌÙÕÉ뾪†ªÜ RbÒÊdR APõ«—6KÃïæ°ïŽŸŸ§)Ä 5‑ 5njú:Ããkú¨þ×Ãï|6ÜþýK6™Ÿã8³•Ójaá-ôá|?ÏÂÜw¼0¢+}¥)X`êâÔðÌî¢ a>6\­ícŽjæfóÚqL¹nCŠa3“¸IJ„§“KröJ@0Ä¢L°ªÒÿR!ýñÏìã›÷žÝìê^“» LJPJ±IWž³Mfó C ˜VnyÊÕ›eR‚ÊnNZɘ„Ùqöùêà®Uö¼8QÎc'ÈE‚7·3žÿwÏs½ý¯ðÙŸö•?¾ÿŸ€?þìÇÉêœWîîLÇnŽ#N]×:–^QÛ(9ä`DˆÝJ.扬 ±SOÔiVBλYU*ÝîÍSÃzh›ý¬]Om$êfÍ9÷ A{!)EOS³jFŠW?ìß/%®“Xì f;ô:žj/ê^”Õt?7¾ RU¢QB`‚›»ZbB04ýÇßÍÆçú's,4zùt˜";‘˜¹™(þÏ_|~¢Óþ‹¿yñêë­ŸNÿèïçß<j4¤ž 'š[Ê­¼m×õ6G,æ‘tv/1¹S“Vk^÷!x*NÄìABÍó䡱›¹”Í®ž¶e÷ìëOŠÔ¾Â|©s»eèúØ­æí¶yx­W!1×1¦M}Ù‡Æo¿¿ ‡{z¸lÛTÇ!ç£VKÇŒDÙR¬¹äŠ’YˆEh:×B!‡ÃH…Éá\]¶iv9+ö~–§ü[Z AœÓ©úëÈüU·¾Z¯þàï=K¥¿_Ïm¶‡›`ŽÍíwW¿<^H׬ÛI£/¨—EwY™‘¤¶ ˜Ã*CRhm §É¹t˘•=¨;ˆI˜™àä° ÔìnæAPDå,öÏuwr&qõ(îBÍÊIsÿã“yÓîî{4Ýÿ.÷OÏC]‡¦1ÃúùÀ‹:)^¶þjlÌ MŽçƒíóêÙãhêœBÛ ‡ÜÆ2re›ÕJ!j„Œ­ÌÕA¼n7O³¤wÛ6-m¯¶‘Ú‹×+Tªužü§ñDÎAD±»üáóõgOSÇl–‹ycÇÚP..Þ“÷`urR‰B™™Äç Ùbø#qc&³PÚí‹«q$C“ê™èðÙæäçLÕZc­G|Ùÿÿôo¼<ìþìý‡ñ¿ ÔžvS[+Ý[==ݽ•mðeÂû´]½—^ï9a°Ä¹£EäõH‘G_›€¥mæB#:2hÑÄÖ -ͳ°•'bTí¨]72§Ô?߽ظnv§:×}aËRß–ÕÜ­ÝÇIÁRLI7W_N—ŸßÝ>âzB8mdÎVO]—$¸†"¨ˆŽœ(k’YH`pZ¼lêL bV€Eº!ÁñŒ¹‚Å݈s"X¨ÆM Eò <µ”+›^6‡ÿ ¥)ŸTîúÇp¤£„ùÕÏæ¯ž6IBû‹ël2Ï1cÒˆ•ƒkrd»Um{k)wëãnt7ô:V‰S»Š—ÆÂC²ùÔ<{³ïíBšm½úhGÍÚg 6Ì¢3h X#ûZ»8‰6}¸ñ·<ýù!z9… Qr:­8ØœjÖÀ6Š´šÙ¤XlC±hÂ䆠0r3Ž@ õØ… ^mç)“ËB¤q&¢È|¹*#ÀÝc ˜ZâðÔ:ªô2öâÃñBçö¿Ðb;µäbæîfWeq ÅVÏžE0›0HÚu¸ôìðzòQ Þ ¹Õân½iÇKÈXç±õÚ5+ h——|¼‹×Ó«N‚ª³áóù¤MäbèXåTÄg£ºÔg3a3ܗʉDn€šsw×®Bµ’Šó2`8P¨±‹µ½ oÏ>‘Æ[h Þ!S_ „£ ;¹ÛÓívŸýÉoûió67éL˜~¾çÕßÚàááë·iªí†³0˜Á'¿¾,¹«R7;ÁadV© …ÚŒ†-ÌÓ~îÛ>™j×›Çëë¹Rì#]­ï÷jµHó¸Z_~纬ӌ¹Œo“fé|ÐäsF¤SvŠÄM%‚å'¶Z˜Ï6˜°xM—ù=ØÅLjÌSPu&f’êÊ‘QBñf&Ÿ‡cNÞ¶ÆDNn² Ò30%b~gq{¡§Ÿõ™‡.”ˆì÷ÿô‹gs÷ãïm¯ÖkŽž^lBLXÝlï=5R3òâ–C)}ß”Ì<;M§Ò^]”Ðè}ºÚzê¥#“uR»bÿùÜ´Ä•’bݽ÷ì’÷w2i#óLä³³Ö§^ÊŒ aŽ‰ÈœÎ8É©'&ff¦3ðEöb¨+™Už$Ãj&!W¯Îâ°ì>Å”,lo_Þó) ÁÝäîgQ‹ÏŽŸH00ÓÕaUß|PÿÇí?xŠ|•‰c»¹~ÞìþŠU~ÿÇIr·©ÎgöíýêY*°É˜ÉC,ˆLäBج§j޶wÛÝJ›‹þi½Mئ¡t¥6¨t×Zj’U‘ íåz{ûÁ5¦ãSYðYyÎÊ:šŒ¥På­` ^4Ka£@ߊsË8Õì‡`^衆›§¦¨Â–Iµ³ÅñºÓW¡<û`½w5s÷eš¶’ýÝœq‘´ØÌÐó}ª§œcSÑ4ßùOã{¸Ø=ü-ÿÓŸîébnÂHÌînómx<˜Tq¸‡d……@‰¨m½æcãårýÑͳ®RZ÷]ÔŠ²<í£žšº(Ñi›Kìn/üáéqÈÕ]9gj9[׈IHݵ,~73wÈ¢È-:,ö­´iL0¸™ ;…àeÊ=¡†6Qmƒb8€Jãëár_ƒv»`,b¦îFìp£ÅíN3õ³"ic7ÆÛWÿùßnüu‰-"®­Ò+ÇO^ë£+ò©c&òJOŸøÝ>0‹Â¬éâ@ 0‘qŠÌxj¤ÝíÞ{yqêTS*îùÑŽÜÌÚÅ9Ý4º1å8Ô `÷CÇãQÄÀ@°™Ð!N"îÅÕ•©‚‰ÈÝÅl,ÎÌ"lb™3‘Á( 3²›zö§Â“õrvÎ¹Ï ËM>þ@¾<å˜Ì™²Ãˆå³I˜°,rœ×QÖ3al¿ÿ×n‘— `¦¡œ8¼}>åñÕ/~þEÚ0,Ó÷x¹:‚6êæÒ¤“ƒÔêÌ!}÷—q}ùáå³ÁßLV­×‘RQ`Ò@óÃÃÓj¢„Ê@<Õp²–RªÂ!j©Ü¥* ´ÔhD¦Fæ‡À,^ÁÂ8[ùÁÈ’hõàć&h­ã¬­åæ–¤W¿fí‡Ø‡ïú×iZ“'3Jî%¸¹AÈ$‹¥J4·f“yN‡Ú×ÃIù‹CªOÿÏT§ÓýôõÅd«^ Úf>Ä> ‰41æû¼™¢L…°çS}Þ|puñò8’eü¹—lòD?•:®ÚÃé4Ÿj(Ù72ŸTìD @ ‘gP  •8G;m(§Æ(µ¦ÌMc[Q†.ËEí\ë\cMÑsuOŽq,–HgL£gõR´öAÒ®+ ¶:u´j¹=„ÂPÞ-1-;/¥wVaws°.üÒbòC¸èÂøóûo¦ ýFJµé0”2½.»›ž×òvÐÕnÆ!»Žû¸¶¦d×-b°øÁ‡wÃL¨"çFöV‰@Õšn»zùÁÍ6î÷t@QÒ¡J*w,æýñ¢©õQ%„ÀÊ®®º¨ü[‹ùÒŽü,‘ÌÅ2‹¼t3NñCXM{ö.j¨ÅêPÝæì–K6²~U{o #„$€ƒ¨Ö ,go6Y9tÖ’•™iq3ØL^(žn&!zýI¼,_Œ)oÚ¸ÛxqÛß[g_§‰©m¨‘u—Âî»ï?œžjt nHŽuÕP£¤f/nw¼ÿꫜ¬™,Õƒ¥}·qv.óäÕ›ŽEøì-7µeZIì‹|â‡:3»2¹£Y~3³1¸ >qwQ¸ uxzÚú<¿ª«­8W;¹ÿ²´«µÎP#&faÀÞ¢T§ÜD:ÍJR²ZФTŒ(СíIŒ› 30‡³ï‘H±HpPX|‡ä9±pÙ·&<¼²^r¥”f Q(®ÖΫ®ß^¼”J6Ïe. 5WV­Ò9)¹ƒÉÔ©B˧²•@„ÄTEU ZÉKŽZ%aóÙŒEh{g˜ l,$ÙÌ)âTû0331#”Ço¦:—æÇ“܈qDMA+„LˆÜTNˆ$8ÅÈDÌžTRåÔ˜›s Ì¡ßä`æàHäçQÃ%z  ¹ŸíZ0°3ˆÂÕ8‹©†ÍªN¡—g£oÚ`¸˜âË+Ü=ù~Ð`²;L¢ÏU÷EÿÕ‰ú`Bý¤1g§5oxnT VXȆUÊÂ>—È®ÆgËç⇷„UhaÆ•ˆØ—I,Üp$»«ÞŽ+"QF*ÇÏN};®[P?c܉۞º4 uc' •‘"›)µ©ŒÄÍJ›¹V6•yÖvóömXÄ«/j"0 Jâ“wFð "dj QC¿š¦¶ß½øpĆC‰¶æ”&º–v}Jo6O×:wžw¡IefÑJNH¨siëAÕ%¸bƒU¨10C¢zãœ1«[DK#§ŽÌ,y¡è¢{¹âSÚé›iîOš.ˆOEõi̯æ_ žB#ÔºmWT¡è´:$Qvv‡I wX¤:›uòäÙMÓóúÐi®hÄ”ƒ±^†wózÿuèyÕïlª!%þ•Ô x”–ú>^¬®æpÁrjæ©"ÞR–Ç&&"^ê#×Ù@D 3UX·ñf¶RÝÝ ŽÊÆÂÄ 7uf¸1¼µ@“›©’0.ÍÙÁ1d$ê’E:åÜæãc­O÷»zšr|·?Ýc*ï¼xÐn3n5JÜ—5@'ËZлt¸:ñYº30po=k d, Û)ôàÎÇ@pçoËÅç¹ý;×Ãb/òs]UÓ:?Û1‚´}sØvœû7ÛÙËӆŦãêîâ²9ÑBÏÅád„~SƒusrsròeWh¡rÌ-™Q 1E$÷˜lF…(A@ ^™PÁóàFµÖ:Ñó±æZQ1ž²7L¡ATÃEîˆp^ K?&ÀU–›`cw'&öP§ãZ} Ù&›Ô-ül·ýµh-Ëœg†¾|ùâY%‡#‘G-` M“bO]ºo»p“ãÞ͉ñ×ù+ú|HA˜ n¤p"fišRNFËF_pÜ r~»@@1’ ¡i&íS-,œµ… ‹L2óÐãä×oÿÕÛ~¿ŸÓê* ÖOñv$W÷@®0£Ôp”Ãâú¢ê&Læ)Š‰ÇˆY¤‰OYi"šR­ÕÚ b(zª÷¯†«••yO!S §R”A½ª#FËEfsg#d¦tÑBÞ9^®;ˆÏ™3îFä‹zN>§z:„@LœP˜<Ø»4ú`½3´áÛ·8-Æxó&ja||þå#uë÷šVãí—ãÏÚ£”gÏb‚çîn°F=X5Šp'sÌҀ̂{€$‰P©!„ªîÏÕ¬€¨º…éK9àÅm[ ŠìÓ°JÂÒ(.‰ àµ:Ø]”…”tf3Q6ç9]\·ÅØÝp~'°ÐR^`gb"‡¹º×Õ«–<»˜\òäÉ ‡þ÷c…s¬ÜÎŽ¿ºÖÅIêw-Ôm:l^(?¿ ›¯®>ÞÛõýáGÍç{™Ç/>ȱùx%6Ž…ç¨c QY‘&ˆ{saWÌVë¨!É”‹cÎý\ŒÒüQ=¤m“¦ªDmÇÇn5Mö`3µdQªÕá…û€X´¼cE VÛ8zp_lêÄK!^^M±¼5ƒ„IœaBo’Vf^„O±ËÍ"|YKÈÞM¤ßÕ*"ÌF,Ö@3"ºö›~sw<^Ó÷~ûVò¿´lýg—éí#nM^2›Þ³ÒbîQ­Ñú}­žx„±@h¢Uº‹}­”k”¡9 ­LG>ò©vžS¨ª§ ajìÁRPÓÑ­r`Z8‚äB,×§·ÿQÍùüùDOŸíoü„Ø¥á‹Mí¿|õézU+»‚ Áaft”ÆŠ8QÏw]‹ü`ÈHëHL>Ú8PÌâ´³f@6å÷]p r…a&ˆÝA§i6YµºÀ²üÿl½G¦Ù•&v̽÷µŸ Ÿ®²|±H6M±{ÚLSÓPc Ù ´”#Z  ?!@ mf¡­ H;AKA iHƒ¶@O«Ñ4M²HV±\fe¥ ÿ¹×\wŽß—Å"Gï&2‘ˆ7Nœ{î1ÏóÔ%÷3DP$*’Ø"£%䂽pÓ± RW]ŒC6sWˆ uÊ®(T\情š\z#{”ÑWqíû iŸ‡¼ ô À9-cë †çŸ}´\¥èžW›ëaQ^$ŒÝÒŸ_ß?ùÛçïõÄ¢!)FULª D“Ä *ðõ'‹{ýíŒeU¢´9dg͆2´„.e5€y§1#˜Á‰ú]9’Q^j!P2½¸º›t2Çl&Õˆ(&p΃m%f ¦^Sg¨ít"Xª-2a¥ Û9†rû8"&Êš)óâÆÀËXõU°ö.%ÝãÿT^ R€ÚzL¦œÆºzö95«\”wNR×5ó"™’0¬³_}¼®î`ãÏ ê——)QyÜ /6UYõß÷tG¥\Ìãh ‰²••ì]†¨%(#!%MP–6¥bG@ݧ3ŠŠ $@ê±0NÓú˜+E±5cu0ï²!bÎ$yô–GŸ¹’Yáà4‚¶Ì8±L ¶0SÊ©œÙxú¤êAɦ „œÉ ôüëc¸Ÿ®íZlûþûî Ön–¥]_Æé3ù/ø’ºvø?~õäkpþøÐ¸GH}?{ýáÇg‹>3R€˜IîNËÃK0Q@³1¥9yËù™ÍÆÔÓɈCÈ9‡N¶KLÑ©v樀]ÇEU«Ö­³µfGèSÄ/éE»!8ªZ‘YD#jN†Ø@¡œ#` Ê”ÔT š­OZжdÐljwCH‹âàÜ:KXFv#Mv*üæ)ü² ÿ•  šixþáóWªÇC®þà_pKãÝ÷}Í?\œ”'â¿þÞ|~z|¹r,»€ŒLv‘¡D´[ÔÎ’=~Э±xl&ò*¨uã:°pÈŸÕ)"YU´šs‰IwYˆiÿ–.ÄYƒgV" $™!§„ŠL Ž´ªš™²µl°LæºÆÅ!ˆ™±„â½2AT’ÍíõhlvåÆÑçf_4ýÿ>Œ ;šù® ’¬ý³_]å™}mß)Z;û¯ÿ‡^{ó ê¤¤Dj7¯|=>lžXgs&eAƒZlܤêò¢PUDÉmC‰µÀu2(Zâ +YÀVÁ*ë„ ˆ‚›LÍ^deW¬"@FgQú뻚‘(d°eUO:E"l]Í Ì›IÒ£"‡”˵Œ™L dØŒˆuˆ˜F4ã³íLЈXöX“E¾dyí1¤ªYUißúÞ“…Ô$ÁböV¸|ðªVo?ÿ=° ðÝ3€îîXÚÜÇ¥êæýéÝáû?è›b¹!ƒ‘k÷ÎA˜¶§Ÿ-‰Ê„MJÓfy¹îìp%Ù‹ZEL8K‚ìÙó³. NZ¨8½³y¤mFå”G9Pö=õóØÏIF ¥‰Õ„g›Äc&af¨G­Ëd27å«V"R5TÌÒÅ´½M+6<œ[m×45–˜»¦}´ Ç6©¿¡Q›äL’]_ç«ìË'¡]kò%-e$FtG¯þñY±vw¾v™PrJÍÁ“áóßø¿¹ª¹¸Õé–dú°~üˆG›Ôš@˜“rÁUô¹¬­$¯@ i?È/nÍö@²f‘%I‰!‰]rP%K™Uˆ(ç]ÞýU‘ÙNƒ‰"ÆÔ©Ç“!±,ši7A”œÄ!hô£/©Œ³¦99:*[!Bfè¤vÕ•¬(Q ÷hЃÙD/K™o|@Ö ŠšFóUýKª@Þ½æ} ;xf¶YdòàîäÅöì¤Ü–Éi¾¹Üü?ÿyõߌßüþ?’w¥‰‚ó‡¤ÇOëu® ªgjZ¡—²@”Äó¼=ÿ$•¨BŽd ä2ÒHæÒ†” bɬ &EaH^FC•-JGV|ÍdMœµš4³Š’JˆbZSœ¼~H–·p …Úñªn¦ªÅ'5è…VblìÄr ¼ÞÐAÊd03IiŒÄ„¿³ô¥ÈËùÓËÉ«aV?:Z=‹'׿úZõos÷ñGþ[¿<Ý~f=Ûq `c¸{"ôêçÏ8—!3²:—Ö£s•zbU$YWeŸëRM´d]‡š¼VE¹®³2½”¬ªíŠŠœÅ*22û\UåœÓ˜ˆÊq<赩cSw‹jÛ£cTSOí¢Ä`OŽËÃr½ê»Ùm!½1ë!çA¢ZBŸLÖŒ[-Š•©,8 D¬‹Ñ8fêÄ a²¿v,ÔýàðK¾ °dÀ„~íì*½[<þïzäu.Ì-ÂÅÃm?`A 2,Ú<ÿ`ýðÄ2$/# ÁÔq£NÕ· DøxX‚†` eI6f”ª*\Ó|š;C.©’Šªf"S×)¢a£¦0íã"„ÈŽ«ÚÝïqÖȢݴ|ë ±T 2ÛU¬šYûʳçÒPœ.óDÇk.QµÕÛ`VE‰b›èUlÛ²[$UÉ£zÂÍšMF‘_߆{8ñn:§Šû¦ï®iƒšÀ&3PºœÃ_ý÷’ÁÍ w7›«ã¹ûxhfå6 <»ùó5xÒT!§¶‚šÊÛÒÎŒwž@’¤yqB]¹œoS¥²Hq܆5Y§+? _X£7×ÅA2'ã<Îg`€€²í¥Xú¨‡¢Ë®Ï©³VEƒ&£c¦ld‡ãÕý1ü2‚áoQ¡iO¡¶›®h&Ç(PÄ«Ÿüô <ÿÑ£ÔÖQgG#žß…äfý* 7]Ÿ¯q$Wߦz¾13£bÜthRôC_¶;èoE Oê6?Ñ‘%÷t†W’·É6Ô¥U­bQ§r ê;‡GEAu6i"}°€¶H>,÷Ù"HºÍ E e•nlÊ*k‘S¶ÜN7š®»x9££ R–Œµ‚&î XV"ØkGeÉ_vJ÷0üRmó¥ñ¤÷ E_ä§Ÿ]lÊ‹¿ûáëÿì›ÅGòzòOŠY%Z}á¹½ŠÛÍÄGù6¾cÉQ·ñÙÍ“´‡·›4-dKZÍg¦?ÔÈµŽæPÒ¼>*¸›(U2WϨœ>xµån£‹"JŽÆ¢›n]dUÎ)Y@`EÒ@6úÉýör[3B3®±÷iØpŸl&åH€äˆAiŸ:íffdEȼ4Íž¹ÿ®/5{vŸ}%¤)€;{sóƒÃáÓכዧÜ>tWgtuùµ¯ßþR¯Sí®?Ý„Á²£Â*šY9 þÛzÿ3±¯¦Ó5`n“)­TÇ¡.«¦Ît‚›X©ƒ1÷êܺñòY/h5‰)Jð}³89<åÍÐ%GC2·8¤R#ÃØ‹Cç¬B”$†8/h$K>Œ²ñQ¼5¸n£ÕvðÒR`agp@"ʨ"”¨d @U!Ük?¾ßåW;ÙYÜ•‰_ÉX÷^FõÙ\~Zñm"8¿9<¤ ßm·—²2¿ûÇÇÛÍkéÓÏš{«ki-[£g儈bo à—†G›†¨¡®ò(8¯¹À#(¸8l×Gh»àx²Ê!²!=-›{¹ë¶•ãa|ætÛWÖÔ¶_ö¦6uÂ31 D!û˜Óð,{7 ·¾D0Z'l *gE‚$¬"YD3‚“ȱyy¼t/Q°?ˆ¸‘~%lñε(ÆèùûoÜ»!®Ì«ñÚŸTÛøÙìÝ?üæ+æÞúÊ>xpï‹GƒWEÒ|t€š½æ°}ú>°UÚÍj©, '±vXºâáâЙ²¬ÖW—ÉÒ¦a\‘… 0¤ fÞ4•®—©­—4Ö0D#A”ÎY Ö¥~4Ê®´Ó˜¯möÂâkß‘}“=5%Æõ2MœÉ bµ´Gí("3šÒ•YcÆ—~Ê÷©;à—Ñë7ž]ð—~.ÃòñÇo‹ó¶Üj9œNþé?}ÞþÓ¿xøÇ.úñbXG³P•Ys‹©÷j¨É‡¾J‰Êƒƒ‡Šš )µ%çÍvpC×kÊ ¹¢*«æl¤ÐÒ/®ýèSè  ¾ª›Bz[³‘Á;P‘pã8>P¹‰h¬ÀP¨ª™ÞK·|Z»êæñåºVÌ;(ºä„„ÀV  ¶ÉZT´l kŠ /üN·á«vùRÛè×ϾÏ,f¼å¾¿ÜN߅ͧ—õåÛÃ#=ü‹ß¯BùíâýWÞ>üb4‡[¸º_Hî!mû:¯—E1¹ÿlRö²Sé“°9»áƒÒ½þ͈i\mçš’ ©žøP[´Žl “%‰ƒ4˨$¾?öÙTMNE¹jÖ{eÁU…E¯,ç„\C*ëBô|îhn¦ï^|´*æo~#þï?¸,¼`V"@Sˆ¡l5»k Løs‰hö30€*²Ÿ-ÑNÎ1Y³W¯$J9¥»tðââ“ÿã8y¿¬ƒ™µ7ï~Þ+¿^­Æ£êÝK¾¨hÒD\¸l'Æ.îÚÿ·6Ù ¨1M £®æTWÓ‡¯¿ö†¯É ‡!ç¼[òç¥û$È2¦ ”{k¨¨*ш„œãu–1 tW«ÿŸÈŸŒ?µ¼Å­^âw®ž—GÝ£Í÷,ßIÔL¯K~R¾Ý~ëÖ¯:…Qä*[&š ú|±ÁÃÕ¶¤aÀª4;µ д®ê~n»'U#U* L˜4°Æ‰Z ü_A´W¾vÃãß|p©îÅ#´îÝ¹Š“©ÛFi’;hu2™Ö‹õ(1Õ…<ƒÙBÉäA禮™ÞyåÁðI;x*ŒÃ­á4‹1(pH`X‘GD%6Öæ¬$)±‚Œ ©Ûµ+!ÈЄî{ßý÷«×Ægík7¿8¢êúô»?Y~ÿʧ­½ÿž?×É·O'?úüñÛå¬&SH„Êœ‚½æYe¢#ñ´uEn›©µjPEòþÒ“}pÿ²-#Š@€6%!M RÔêQ¹0'§a½é¶@ãjÈ›çþÞçõÝî츰0¾2æaõ3“Ï^¤öÁ+=œf™ÕŒÈ>û¡ué`<{àm–Âu½ªŽ›?zcج†"iêESàÚŒÛD7”ëœü'/—M€Û𘭭!M¾ÓTƹà É[’Á¨ã²*ÆÉ< Z¶F÷ û~Ë—™ÕNJ>ƒ’¨³- QöÆt+ùÁd)‹ƒÙÕxP¦nÛÙó/Úüü¸§Ü¦ž}£}¦otj°[/··7·üÝIƒÉˆcìn ¾Mí tX²ÿr=U •Sãˆ;1â*ŠÜZ+Î@ØFÍiÌ>f!؈ƒd ¼JÈq{»†9Þ\mßq_‡Çw¿yñï»7רõ/?IËv=,ÍúÇ}v~sC«Áä”4'0ƒ™¤$"•žU­fkÛ2Œ°KÆv®¤ ²ÿ7}™É ¨’&cL™ûífp½¥§³¶9ž—ROÿ°é®O‡Ñ33¾ýÞêÛoèÿyñb~õüCw½¿Þ Q×9¡™`çu¢\QxŠZžNòN‘±¶*(­jŠ1„tcȇœ’Í9ˆ6ˆ„˜÷¯¾K™D!‚ᶈßÔŸ¼Úd\—ÇOáöàêâ¦Y½x~x³Ö”6×˹¿h€·il IDAT2aSfÊde“! bV²vH‚â‚.…ƒðRuFwÉÏεöD Eà$Æ™8>^­7›u´«¡Îx:Hö™òÝâ;õê¦ÔêÞÝ×okq#iùõÕ€ºí¸aJïÁM|ã­r\Pßn°¡Â1Ó ÔÆ¨Â#6Z,¨²#c(“Q@×FMÑæº ¾¬`w¯œ³j43oÞlŽ›‹MS^<‹…ŸÙé‹ IÒżõ)&Ûm/“à °A!¶š™£ãäBHhÙfg‘³R"$ÍAÕ ¼d{¾Ü\£B¸C°e*ª´¹ýìzi šb1]X9,+m þöÝO×F­K§ÓI•Ñ0܉WO~:@)—싃1–ÓÅÖÞeª6”Âß¾x-^n>ÜÔO‹ <_ÿÂÖe]tźÌq.Ãü;Ï7YÎ?GÎM#/ì¤ï ¬¹tØO¨RÍcCJ‰’ÉΑd0†PS`«‘½Ý±Q"[›y$ Žo2)æŒ-`m‡2TŠ£¤v[÷}í¯uÛÏÚ\õ[*ŠÅlÕùq††PÉbÆ,jY U£Õv [žrG¾k(ñÖå†S´d*owØÿ ¼ABj¦kOŸxã,ZS²6å|â·¡Zw·eŒ.¤<¿û|†Õ×XÿùôØÜ»e°¬oÕ…ÏJcDãj*S¶Ñ”ä ©÷Ž.…¥“CJ Ðì6º a`"’‰2xD@" Y5嚃XÕRTúü ÑK}s;„™ïµ®rŽ+,£©”¸hP‘dëß—q{Ž%B1ˆ- ±3³ˆINhØl¢ù"ú7aˆªJA\¸úù§õ¢™B}ä•P„çÏoçÅæÖÏm4»FãÄÙfõ|£V<ÿUñ6M¹jgkdËE¼ùqóæIŸ‘(¥`ÀXk¢J·­aTˆÃÂ9dTÝy¶!ˆÊ€Œ „å.¼JHʨ†,“uEU‰Pè¡Ûr/Ùv+:.l¶ShÊÉÅ“PšÞW9 XeØÛiO—PØ-(Ú#ÌíVÚ()"›˜Æ"‹MU’HpÞã´tßæSE„ ´zºÊë«æä°:&7YÆ¡³É£-‚ïÇ*—Ÿ #Çé8žTçï§Y\þ»ñö°ºY(U[ëeÊí½cP”ˆ2ZGÀ’š!‡~UQ @–Q÷÷Õr'Ъ˜EÔ€TE(˜,›@EÕ¤œcî6 a8úB@iܘÓI¹ÂI9Ko§nC„JQ5h Ù£<”0cÞ·: öËë@50hgÛ¶dLšŠ½WéËz÷º¤Š,1übE}}ÚÖL)Åk¿0ôÒGðQ5^3ŸèM{ð xv÷HÓů6Ýxò¢ Åt¹´EFõÝpÄ,qrÓ{ÑlÌÐsic‚¢mÇHy BÍ‚%Ên½#ˆ£°I¤˜À²ÅL³dŸ¶B¼$«Ã¸É6¥Ü ª«ëjN¡ªçÛ1æz†$;p¥퓦„;í+_ ¤P$N’ºbb šG¶uª²oìéîÖÝC%#gnŸO[»n¤r‹œóí /Æ6ÎŰy±ñÏÊ_;êÙ¶ˆë«¯½ñ·-SÑ'‡©|ëÄÞMÑtB¤\ '‹-‡(†sH,l2Ä(;´ú˜BB,ªlÑ›¢äà52M(YmQŒËóâè™ïVnj'\èቦ{¬ÆÈeuüÎ)ÛKLëíASWÆùMêÀØ4ä…™ÈÑ=o  %b2`§^‘›²ÄŠ­(æq³!H¶t0tQˆ€M™´?‘c2I¥²£ÃŽ1Ó®JÙµ…÷ܤ]è!ØQò”D€('6B0 Fe5ï­M¿ÌL_Ã]t'$dšL>úáɽ¥áÈDF¹I>vêkÂ0r¦¦À¦¸¡zq;±¶<¼¯¿Ï?ºóñ–êãéëæò¶åùr¨ó¦|q³I‚ňÎ0—,™Œ±˜ ² F2–Ù3¢ÃFoúë*ôÒÍ-(£’)ƒ[9[[EŸ#$L”4ömFÉ’óúðäó‹4ô†5APÉû# »½jŒˆ¤¨v L¨†œÊ]¹(Øg0«¢0"¿Ô1{ã+#)ÅM?<›N·'¦zØònKGV»r°B)j ìJOÎØ|¾®œÄ<–ª@_iº›,)'Ä»©×ÀXk0Ç&e‚ûUÛÕíöº_.Ÿ~ßÔN2”·ƒÿøC«ÃF¸rÕbÖ) c²mã°XŒÎIUA‘L׺>™ǘ¨=S6²Î´±q]$oÒÚ¥ëÙ,pm(h9‡”wk€ ª$`¢HiÜÄ×C§˜!e ±(ªàoãÑíöìÔ”Ñb`‹Y¯Ešs0j~Ùh¸šMu–`¿Âáå#Y‘É–Õg—tr<ÜÆ¸Û÷p¦LŽ:(’e×´çËÙÁw*äšÙ9<¿’§å´xÝͪ™™ØÒ¥y&S´õ°\7µÛº™bØMٲDž4|"HJ8^3JL9¯!Ž Ô¼"![Ù˜vÔrA})ÎA"´ïP$Bd-)y™ÀÖNË$6⎢)/S¬ý¯‰y×7»‰$Aœ—ʘ3GóþÙéÁ±ŒA´Ì/—Ðìž,@ˆÆ5ËU£ã‹guËA™Êz{X@ÌŒÅ(ùúi=_¼óàé‘a)®ŠÂY÷1¿ûíiyÍÛY¢!››‹µiç0Dh ™ä¶ T3HºÑ´Ý‡ Ýõ[«›Ï%±æžçÜŒ‡Œ"DèQT¾Ü:‚Dš@ J&Î\ö̤†LiÚ,*;eô~ê+ƒfÎ DĪ*!¨&ÉÕÄuS"S@ò³!Uè³iñåUºÏßI5ç ù³k=Îϧ‰RßžÔ˜o»EÜ7E1 ¦êN¿õ 0¿óo½nRU}Ș_u?›ýîÙMè2gu±õd‹"ˆqÅa9ŽÀ³W\Äoÿ‹ÕÏ^”eì2ˆBÙ¢ôZÅT}9¹—n7+cR,(ìÅ H”(“&ØÙ" & (†õÜ%Ö<&W-SÜCÔ_^ø¿žˆ"’ª`JÊU3kŽšMòneS­!5“*mDkcPI¿â\;d)ñå…R—¦³¸†®ÏuÝv²¹Ê­±ËùèÜxøÞæ[‡ßû‹_ýÞê›Ïž›>ŒÀ‡“ƒ™¬­æ øfz¾¡¢LY}7ÛóúŸø¿ý¿ ó¬#18&ŽqáK ›+ÆÉkßX¾ë¦P€ÔU ¤y'#¦D¦Ð,3¢€ Ь!êM’£J;]í68í¥~¿âYqGDDŸQ(hveò|uª’bF1)g8œ·aä’È—;c¿ÌµØµ×x÷µ“3¿ž›–|{6™­o¾dÛ–ãvUÕ®ŽÖRó.¨ß*vE×LJ¹ó7Õ/žýd›gí|0¨ý0\…‚ÅrÜNÎÖ`ëÔzüdå$˜Ô×pül¨¢‹™(%O…O~{÷•o>ÿéf‹ÊìV˜iŠ`€g…3Pβ'I¦] ¦!€ÈÈÆÎ%·SÚÞ›ß`9ïèÌ¢¢X›“d‰@˜#ëX¼ECžðv†«um#îdj¾´¹‹)+Rúèütqö m,9]a‘½H,f_LOÎFñ¬CogyûF‘Õ„®>¯íñëO~6{t<¹÷0tÕ”úŠv±h·QÎñˆÆ¥(€ÚÆl!.¯¨I‹ÚÛ·7烕¨¢Œ)“¥ «­/î¾]=ðݺ·N¹æ ˆ¢œ‘ /Ej˜Dëb ~µÊ†‘sfô y·ðj?ýµ¹vŠUØy6!&À{Lm2‡ZkL6«o¤“ã|“Ýí¨H‘!lÊíÜü§ï‡³ÅéÕ¦µ)Û§Ö­d·Î›Õؘ­/§Õöò÷¼Àº`?+Šôg³á•«?ytêîÔ³bÓ¶Õrx“,ÉAý8Œ½D>‚qÞ«­}tÚµmhë·JñtÓÞ^¥1"èzãœͫÿÑa79:Á\Ú0¨Eª,3 KÙæ1(#)m`$›š†'ÆD¯©d¤± ÑzÕl0Q ¾†R:—·M½3›RÁi´SéúW?½ÛùiÕ­9<¾¡÷õ$óà4ÌEU¾Òýò8Y…n^}ë­×™ë'¶µ•£úb;lC©d+t …Nªql:¾O­Q•2 8(ÇÛi¥&w­%†–ê^?0f#kÎ&’%dc ÐÊg Ô`ìÁ|È™†¼Û’M9ˆ‡fRÄŠËÙJ-Y´5!åéâhɇ W5âT¢ñëKshÈ'ÈÈ{\Öž¿M¹}‘Ê)õCû!ļ9„y|6ˆ¡tÜúŸMßûég÷ŽžþôþM|s1ýÁQä‰5¡òç?þyÖ¢?œ²7Û^rÕ{ß#øPP»h&Gc锾:±øë€9›€_;жãXÌdØZìÁ ÑT)2»Ì†„¬-õÎÃòó§¿ÿÎìýOgQŸ\<ýeoϯß×C5y¨·Å¢­Êš¥»ÕªÚŽÁû*ЍHg¿Ø„áÑ‹F¼[Þ"×ñ+wb„Ù¾¿ú$>¾:˜A.LO;/dMYÔ6.Q[ðØ{$C¨”3A‰)YTÐ[FÌlJLGdÁNìv2sÃó²˜Ô|ùüùj:¡8B¼Á"ÝÀræ!÷†:‡“Ó;lkS†Â¿,oäåz‹"r£Çw]Ýqu0%è†ò–&™ö꺧ʀÁ¹šWõIž˜ÍêÅí¼-šÏÜÉß>¿øyS,&ÅlvE‚þùéùó…) ñýzíkΊ¤1,O^¹ùÙæ´YÆcWpÜ-QÙÓÙ‰Žº‹Ï|wÿº=X)L @ Ð€FMÑDe£@4é#q6–!¡&Ì )‰°’ó)xk¹²¯ŸªVãöð›éÚµñ‹ëÞn–­{ñA¿Ý.ªsM«d¯s®mQ˜4©ïuÛhV´F¡½HÈ~À“Ñ ÕM;ôoØój3íõÃÉ÷&×[\¼ré­‡0·¾0¾¤ê‘œ½Õ5áä;oæâ‡íŸüÏÿú;ºg˯O‰.ŠEqWÓxqîžö+ŸlÖPù8óDª '“ïþ…=™½5r¶ÐdàÁã¤Æª ›!ƒ_ýqX”ßüŒ7™ ;h$+Q¨[æ5ç±Ë˜ªÚ¬·¤w×Ý{²]ýêûß‘¾etÅ£ço°[ucO£ß~’âÑUØ-rµRàO/ÚüÌ×^L= ¥Ä¥%Œ¢J1ôÊÅ´$‹0={»~nç!L¯ÙÌZÁ0ÇSô¹br¯YëãR'lJ̃w3f”Œs,µµyìËœÒF1š.Êz«È„\8É")äÝ:[$Ý-KÁ5fGÄl<ÑoÛj·ÕUÇ2nÕÒýÕ5Um~Іëf}vµ­‡x³&EãýÈÕ½£°r¶l‡ƒù¯þí‹»³Õ;üìüIy¨°5¶­–7¯!ûUÆ$ã³§è¶`‹Êz´JŠl{eîU]õ;¿ò‹Fçjnx•¬ÆxŸªóâÁY4'oéîÞ‹MY¬º‹UoÖ3«j¦V3–Œ.}cæþfÝ)¦gÑ«DÏ}$Ó¢Z+ ZUënÈ*ƒKã^cšv˜Ú-Z`Ó¡‰Bl ²1þ·Ceœ¦®žšåûŸýÙãè̉.o."¬tɧÄeÓDÈ4;¸W-cDåvþF«åö´}åNw Q|wtzö Yãí4õ8«pèð é'“–ÑǤ ‰Z?ÖP·wÞòŸ—Zðb`4#”EV›Û¥Æåªjy»¼>+WÉ,^ãûÕÍ´.´šÕè}6q¼Ò¼[…œÑôá¼®&G|¬ˆÇƒ¡‚)xšéÚ·À@fõj ÜoûØ !0GG9öÆ jø-Žôˬ ‡ªÌËæŸÿâù;y7Nº+ŽÕ ™-ñõù ÷µ{ÿðÙ}ãŒY¼rvÿx¸ùè~íX]o¯OϹn ¥U—ˆ4HÍìvòßݸ¡*«úá¡\Ý"²m½!jZ ¶J0¬ÌW­wPŒuNUU6žâj‡’•Éq•P&GÕ+U±¨[è¥*Å(p,º˜\YW+µÚ••!” k–—q¢e.li3H"»yjVÜIHŠbˆlµOç°_>Yð`ïàMa.ôü '­=ñLÍÙÉÁµN³¥n=ôG±®ÇÍ;÷b]øígóÍ“×h¶|4›åöä¢<>¼;®»ÅDI%ç£M×~îH&aýpþàèÓe%´ž†,–&îÁ°l{²YWzíëºálúñÒaã*c)áÂøÎ§ÒjF7µrm¨7®TÊ 7¹Sáà0 -'ž"¾ š `¹8ÄÙÿGÕ›Äèš_ç}çœÿðŽßXÓ­;ôºÙƒºI¶ÈH¤,Z¢aA‘l†å$F’E²H€¬ ‚,¼ ²0ÀI’£E$X–e‰bJ"›l6{bwß¾cÝš¿éþÓ9Y|u[ö¶P«·Þ·Îô<¿'ï ït7í#‡Ùvð5ªÏQD8–•ò¬9‰(‘«óÐ ¶z‡Ý“ÝÐÇ;«ÃЇïÆéd6£²Ú¬–CÏf#Hºšl`»gTœsß\œÔ:\Ìü³Ò[³Ë2øW× | ì^[¨BélnK‹™êvúx¶Œj¯]&²™Òdˆ€“Ê0€&…LŠ•$UР” ’¶«¬ð\$Ò: )Ž®sGŸàÖ8*WY–ƒ P"k³ºè z‰m`òàR›ô•HPp‹ßü·Ô$dDšÀã7ïð.VëX¢ž ‹ª4º3cǤ#ª¼´'­{v¼sg~#ÛÜ|kg÷®Ãóê»N2Xçºo»6X§Œ׋6:DI¤êÂé³ÏoC:¿l/…j:oC>:ø•‹W/e H(èäÂ+e&7ZOL¯¹´Úfß O CÚR 9I©AB„’ŠÀŒ˜! !€ —ái«|¦V{£±‰l­Ê¡F•™Y½#ÒÇ 4³mÓÑáÊ‘ Û?8bŒ‘PòàÍ|êlg%zе‘Ü¢õXKT)ùEóða ùþp:KÏN÷¿µ—šûOBóá7§ª_/‡[õeÉ+s9," ¡¦n[t!9Ȳ\/>׋‹NÑ;fLùÀ$«Ù×ü_§‘¸Ãé§Ÿm&‰®—‹sÛ•f§²9m{‚@†4¥½(nUL®Í·ÇBfœ´ 9t“ssP–†oQ­l­éF™‹KYæ¬ÊA\‹ZCŒ %a¥€E¾˜_ÜÑ& ÁnSC#¦Žçc"•Q"‘s !…àÿ\åÔeö7Ùíݳâ;¿ôzøÖã¯huc',¤Åù¤‹”[UÝ«[fŽ`asqЬfÙ´"¹œíž-:zø/ÒvM1CÞ>Z€IQúO>«ÃµQ É‹Ýf:x‚ "Œ(²1` he“  öœ“2ùn£3¥ l!¹NÕD¥ŒêÄžBŠ<„À£ ­æÈ)é²°Fbà­*ù‹ü…Olˆ(UTbL—|¬ŠV²ëǵQ °øþgdµv飿^6Ñw£VéwßÿO|Ñï²hò IDATŒ¼£û¦ u>U• }1Ú$f@Vpâbvû Í<÷—Õx÷âè‚N>¼0—U €{Þ‹-Ôà†Q^Ãþ˜ƒÓ6)ÀhË–m,"ƨ<†­ŽõK4MXòd„™öÍ…õ`ÊÞÛÎg.1Cm1±EI¤!2IAr•”ff f¥XD5}tA­s… y‹Ô„RĆ9” @‘À¶4Î,¨‹‹ÍÆ~þ`|ÙWÿG»:™¼{´Ô׿ùõ? º88¸½ËûÕÜôe›ê5º>Ü}ÐÏM¼®Ô&=‹ŸÜû…òGü³³ááÎwW—ÚR‘Áþhü‰Î³óª¡[mè]Vt™F1V±V¨xT)%Î«Ê p“f“ ’…YmniE©ÌmÔ¤ ñ¸ „”I´P9Ô[®"‰3ÈY> M•æT%Š=¨¤éED¦\ù ÿrîAà”"¥·v¢­pÔ6Kz±dT–Þ;žKŸfãñÙlú Úù\Í?Œß»öß}ëýÇÕÝ—pÑXœj™ÝÿÀ·Q?(‘)V+ã˜ó1©êÃËñµ?¸tçw²»¿4 ß¼ÿíŸtß<)ïä '›¥”Íe(>òœcó8â3Ôžt†¼ré}Ù*­8ϲÒ+ÔJeæ60Åd#3 "%—Q A+[ªˆBÉ·ë)а F  'º-ñEðã–Ô.",/·•"`¹²T#‹L©O¶|òæ`þtîâõùéG7ßUü÷î}÷[0†/ÿûûù0¬ó=àl’NŽ}y÷¨¯*^—³©Á\a²Ä¡xþää+•_»{l7`yúí ë½×ÌÑEh?{‚™øË"ºè‡¨û^» T5v‘Z IœËJ²¹Fm›qž’µˆ° t«dˆV‰03°"Í!$C!¨-ù•u€ ”R6ßÂŒQØžš´â-<ÿ ¿ £BÞ SjA"@ºÂ!mEQ tŒ™1¸”i™8éÛ?~šÛQÝ\ ïí={^ý«·OþáÝ¿õîuøo/Ý+W«žÕWåèÙë+?¿•³¹6ï»z<æ~'_œswñΣœ¨lr°ÓÂàŒ¢éÍþîëwšuïàùéÁ O¹Š>eÓÙCY^F“{ãMEÍõ"Héݸ£¬2€TŽh@Ad ‹qSë‘8 +Rvû‰#TW6 -åCH£´G’íY@ow\W¾hز0´Ñ‹p…âAP$1~Q1< *ZAŒ}^_ӻϢœ‹³ò£ûµ>ÿ¥»1¼ÖØ™éŽó¦Ó&2»ê öÚØgŸ*Õ~˜ŽTP¾°ëðôôè¥ßÜ?-ÏMuÅTÑOv¿¤ûÏ8ÝËÂb(‹óÁA Imh:]×ëóÖ œß,jc&0è‘xíI¤F‚÷¤0¥À=@’ÓÛuÞVnCD˜«„,œhKØ&ø0E$HÁ\¹/4oóaþ (ȧŒ/ºU¸òl€@Úâù¯ô`*d°ægÜÕ, Ìþí#C>Ñàgõ7èò/o^Ô0èw´ÊÃÉéjM¢:Ì.Î;K§Í³ ÇΖP>8ï?¸¸Ýÿý7á¿üÇãÓißÿôý‹ðë.<– }3P–é³3Nau¶gM–R–‘žN“Éhr×\(R1Ið) ¡Á(1*ñ¢„¨T¯ò „9§¤ !pL¬á…à0Id“ ¯ÒE3ò•€·Þ¦¤ç«¯a» #Š/ˆWòïlc±‰|þÚÞµ4\¬³Ófo§m lFÿ9óWn~÷ï¼4zðä½Oý¨XðQÊÂ6Ÿ6ibbÊôÙ:•¡ñ^%î•2Y¹:ùõoˆã?ý`~ý`þù{'ýA6~©9Ô˜Oâà}}phÛÞè¼%‘Ý l×4i[ÓNô¼<‰ 2”’ÎS­P%6¬5qФ˜“ƒDJ„¯bèJ(„Ĥ5Ë nIá*â~ûþ‹ûš! bÀ­Q¶ÎíÏAû¬ÈK¸ñx³ Pƒ{öøYyÓ·­¾ü•°š‡×žùwíçʯ–ÿt2¡õÃãWõddÃÆOϧc_™ y¼LC‚ †‹éùñµ v泟{õ>:Cö˜Ý¢ÇO¾ŸîvO·ºÝÌ2U$©˜¢ ¤ržÝ?œíä… ˜A2݃F±a"©„¤µWàAÇ´eŸ0m;OxA„|ùøË6œ€Ao‡K$f!ÄòmÑWûØ Ç®ú ¢$˜» @J³HÒÊiPzè°TŽŠZ +¢¶ùäeý½õŰ;1#â·‹F»ùäÑñ¤é—çŸüo—þÉ—þæÎúFÑžs@Ÿ×Õµõã‚NÎ\$ì a²÷¼ý•!‹›Â­‡‘áe¼•Οökõ㦪œÙ»~Ýãe&ó”,Ëâ6Õ¸Y™r›|èİ׮ôC¡±hœ5‚Ï`Ûø(dNÌX¶~k¹ÞvåÛ Û _%¨¶ï Ž[ç_ný¶-B"¤­ŒA Y1K>+òJ'¾^>ÿƒß|ü“G“¯Mm8~2½o?y|ñp¸ûÃ;Ë3ûü¶Q£‡‹{_ûvø0³¹F´™é‚ʼÍTåô¼e.8Ã@J‰?~v3=øãk”åìUÃþáÙ­ê÷öÇ#ŠjïðùÓŸÀäàf }JØI¤ Eô DP‘H ")¦lkÑIÈÌ‘®2…ˆeEôÅ€'‚|Õ6m÷¡W™X$ˆ_ô( a»^6°E«D¦œ\H™"‰~àv1ïœZ¯—ûÙp'îÒþróÙíÏhxÒ¿4îÕþìîòîÎílýÿŒŸ|öÒòöýwÔ7êfQȆSÔH$Ácî$i]Ýzy/lbB%V{57õÃå;o§zyÍ¡".ñÈUé»ãJ„Q”nµ~¼ž®hÂH¢Y å$FyŒ^3—ÐVJQ=Jmè)w!g?j¶.Iœ4 ‘–‚À/v-/vé´m 8ūԇteíÕtÕD¼°¼ÊÕSå$ÈQùH¥!xŸ¤p‘¢žº÷?ý«of;nLÉiøé»égðûê_;{ô^÷ßû7°šü““7,°œû.WZ‡wìù­}ÝÖÔ6°®ƒ†Î`ko|óPIbE¶È¦©ü˜F»n>)I04šnäIóYj>¿,–!¥¡çKƒÀ Yôz¯Ú42´b©1Ú+pS×]"Œe„¢_”+o!mqMÛ‘™që™ÿB™öoèQ8 (peE^hH·¡a[° R¼J”=SF)­3;ß3ÓX¼ß;Feƒ@ Зß1`W—)x²sXDxí¯žßxú|š×Óå7¾RÚÕIÑWã}ó ’®Wã‚ÅF§ÒîŽÆ©—¿ÝøNýþÑaÇ ”¨êú%g~Ö¿qvq~¾ZØu[Ør~íåGZ\Úúš²"¿üòòbóÔõîTÝØ¼ÕªFÕâ Ç­ô–B. 1'¼z³\…ñ|1ÁlUˆœX# jÚ–>]Åd\!È€I z¿)Z]ˉÂAåܪû…=Ð2×ëž8« ð[¿×QÉÌ Aÿýs‹ö7ùÉo):I»V6“ËGµ»xôÆêQùä2f{³5 Åiï¸"Ü/[u¹)áýÙ×Ý/§‡;M¥ €¦ 'ÏÁKNÚ¥G¸fóåìeÖ!)JbÜ$ºF7c9Ò÷{{ãCž.ÁaþVv>öí5?O磘uXO$LJ4Ë€ (úñõJDˆ˜0Ó‘48Òš@§2$ˆ²º¤:5ýr–07©™(;ã yCzÇIT=uå[]WXZ¤tvÜ|zä9ÅÙX]¾»öOÁýÁOÍk×øÉj’ÙͰ3œO6?9_òîÃÝñÞžÁUÌÀiÅáÙú+×£@J¼‘§¸¸6]·#S*(#eþ½ùú²íÆ·¦ëçO™FEy³¼8_c‘£°$ñÞäùÈ ä7sÛŽOA¢6›Œ2]%¬qÞDNEŒš $D¥PX%%HDHJEH‰Y]µ‘hï”ZØ¥À"&«³jþlV8©+s@ÛzIWU#åTþµäî~õú'‹gÏ»™¯'ÝF;vÓ'—\],߬pòé£Ûü9?H߯¦×ËÒŽò.©,# 'ŸšÎ^®ì„“³Wogxtù›å: KåjµÞŒvÆÖ;=*w ·7—¾_Ì3 ³ÖX^Ô±o¶Öm.'™)w2*ùôJ=ÚOXmÝÄ (Œš¡0E$@ð,¨IBg5"Åm/  uì»xšÛÌh…¯”¨4vÞN1ãžETJ:"„"HC·Ì–æ¯ÿò?ù‹þìú}7à¸^Ác'Y¡Ã­ôYW“y¹~ëù“óGÞÍUøÊ7ú^нfr_>ah×¢·6wfQ,)#!ÁRuYu<›ïœ´M{ùLË›)›Ý…Ž›jg'¥¥µEÖ¹^®Ð9Qk#îü›ÅÖ¤õzg`Òú!)~Ôjur2-z%-à Áv…. ¢|n)F! ´§0'@¤Ò*«"]W’‘*ª,Wê%t„{bAbÎÒzŽ™bÕ|Ã&6„.~ö‹Á¦¿xe=ó“Qt±gÛÖå$d¾ôîñ^ÆÓêò½U;šŸJ3ÙÝÃÍ`¦;÷`è’Kšt ®Úr„Ê=÷°d5°A&hŠ¿Xß77½w½K£Ã݉èq?ÈiÏkR­,úµæM«¯X—, :6'TÛ@}n HÖ|ø}õÖ±?þÞ³é,C`FTÆ 3ˆ"dD2™D°y¯$¸¤52i‚F$NI]µŸZ@ôß0J»mž¦ $ Á›`5 Í™:“·K_Øð§ßS_Ŭ*üä&ÁëßÍÚf”-¥ÉάéE7^9 @Ź{`Þʺųbœ™£nÒyذë­JZÆíòGÔüÍ]ã—¥ D‘Tߤ§§ó'×qU^ß?¤µ×zpb*ðvÐè”k¢‰Ëd€…·).Ú* )E a¶ét*¨?ýéèöžB[nkfðCPÁ˜it> 3D̲Hd6,È (ܪØâU[€P—ÑC¸òÁ`0¢­ÂÍs×­ál8!ïVHèÙçof#W—ÃͯF¸]l4Ž+‰ÚÌëÔú¬_êÕOâîäGêåg§ª~ûmÓ¦+Sj &xÆhµ¾%«Á=ÓSòl ήóÙäµ]­j0ù”’sz‘›‘Ÿâ&õµÁZy\>_k“€S"Q"œbEÉaÎl6qê(¹æè@ŽòÃOµ®TŠ€ lakDàÄ‚)dQzÍ skÔ*Ò6}–¶É£›mÃ…I€uà¶ÑHíêÂÞ/Á©Íw¾—UN s™™U š»w£­LX<ôahSñÓõÑê³g“'_mkûàhwæßÌ6ŒÔJãºËyÅ Sóðã¹ÕÉ!UÜ}ãÙû/ý5µ¨gvÓeÁƒ&öÈ! úÍÄh}Æg7Q˜„ˆSÜdB*%(hité–Ç™Ý)6‘ý¢h”!Eªð -A *qB`iB3 ƒ#‰B.•(•@$fÁ­E‡d‹£×>SVæ‘,>=MÿQ•¸€‹ß¹«cF&ÎGÍý࣡wþxÏ·<ÑyÏ;yQñ°ú‡íGã0 Uxav+›ÏŸvú±™ —'í.†Ã×ò(™éD—Þd¢p²Ðæ¨Y’¨îüxzg£‹´" 1<ÚÉý¤zâ$W)ˆ”Wú‹¹ 8}3Τñ{Õ|6­šÊoFQFè 6킵I±hKet§EIõnûd²$}]Å`’¯1’±WL9DV¦[;Ý-½ªBG&ÜÝ+ª‹²àHÑS(mŒ¬D$ˆF*.þ¤n>ãÎ6sÍÂQå;™‰Ê&²åŒ#t“;·'²Û€—0ØR@ÁÝe’[ÅÚ-á°xc¦î?Nûv|osò •pÄĈ0#°ëÚ º"K…áÓ?ž”äZ2$1Á˜‚¢"­+¿:Z>µn º>¸¶zº‹š²ñX"+*óÁ'£Li2›u›VWÃ*ÄL²ÝIêêAA+£ZÇÜ”®éoƒM™C“«¤r5ôÖLʃçÚ*âȹÔ„ÌWSÖÄú»7˜HB~k'tã£z:EYWä~?=ýÙx4¥ Ø›’ “gHÚz²•SìÝÄkS[Þ[=q{ÙŒaˆQ@‚s@I€\b‘íg+YüüÚ¡Da|*ŽéÚÛ0U䨚L…ÞG #Т.e÷bC£*Ç!K¬ÐÎæ<$æ^×÷N~góØ3Ù0ÚMVª¸y0i¢KrѲܼ6C×µ‹õà߇”g  W(N„f®Ïš³Þܘ±çÈä" jºš³µ ǰs‚ö*†û†#Ñã?nÎÕˆM#´žä^[iNT0×[eMq“üG=]Œ”P…Ì¡n›z6öÓÜŽOOm EŠ‚ÚÇ~å"!$‘H‰QoIpjå wלêR@ÒûB°RJ|>–!–£\xﵞû©s¡G*Īkã`“2"¢i)G\~ÖÜl¦_º˜_4>²_ž§ä{+£Z¶›“y×8Ž En¬f–qa¢ P2²Æ¡¾Q“ëPY " 5‚¿òhÊœã¥a²afUîÁ ™>ß¾î$¶’™XP[ÕÅÈ%f•£úav]–†ŒU…\‹Jéª.nµ\Õç&·:øhQYÇb`À0îd»<ALLŒÍR#%)§·Ï×çEèº>¶}?.<écǵ¬XsQ¶ªÖ—m®EYÌ%1G"H˜±̼ñ©T¬ªŠ!CÓUøpt|nð™ Y.LP&´D+#©…¢oàì³Æ$V²­D„[‹±†ô¡’¾O‚5uÓC´LøÏßùúTcbÚeÑeª ßÿžß\ (•À"$cW×ßZ{NJkgϧ·çfçâ%Q%‚“˜DKD@¤Ð(Ê xÜR+D@°"¬oªÏûyB”€<Û{åó‡ÑùkÃòÑ"¤ÀÏ«â°ÊŒ?Ý\š±ƒ¹ ¥X5{Ö*£QYªaè€Hôd§Ú8¥åòƒèÉjà"h’Ð(PlÌÜ¡V‘TÙ(LP—Hi‚¢,ÖMpéîHK"†$H€¬"IB¤ÓÑŸrEÚ•>g5A–”´Õž¡¡ê¬j7üà|þÿþàðgú E‰ÔMÃTöò•í#¶î¤Y¶a^1öOi­§¥xaFU™Vˆ%f@à¸4.*R”¶ÞO *M_Þ=Ê‘˜X&«V¦úán·8¿´£qÓ¡Éuçyù¨}ó­‹¥Žxž.Nv#™€5ÒT1$ÔÙ2æºì7yí™äÁ»AÊÞãŒAèkô;#’QLh´ÒY¥Å’¦œDƒ5½Êa=æGöæ. (hLr¬¶§$-J}+±ò¶ã¡‹ä´ˆÂé˜PŠÈÅ(¥U~qœÂ^á ê’IAWn¾H¥¿xö +‹‚’*.]¢ÌšmA>ô½Vó•ˆÐ·¶H!7ˆpu¶-U7>ÌëÓ}± PøÒìñÖùn=+Gë:«ËKb”ñWþƧ?Г–'ññ¾a°1@Úke¡B$3qôj÷t)¸¹ºl1QàÜP–1àÚÀ:xžuÑ cr!›PºS†P×uáé™Í»æúH|¤Vi`Ÿ´Fä$€Z?;Þ͇¼îLÝ„¨ÿÛ»º¯Ë3)|HwwG{{Ã˧{ãÃì’n8EоU‘‹ðøÃn4š¼¼_ºÕÞÊöÓP]Ô>ÒZ=3 E›˜!ˆÍ}Þ¤}G €Š¥M¼1uÕ±R¬Ö1­€ –Kiñ†ºqhH¯z_ßÏO®¿òùÉæ+¼©E=œäVz ãQ$-ŸÜ6.Ȩ-F…nÎúõϵd+ÿ8ß Ù¢“ö"ŽuN6xuà–Ìi\×¥&¥`fÝÀq•<¸¿†ÜL™,O4ÄdI¥$Ìd>ÿ}}·M:§öÞ=L1¯×/ݲ͚T¹òñÎ7®CÚÝýØöA+!#£µvK·ø¬¨¹»Xæ·æ¯æs•µ§ïÉEµ§Öùíçãu˜µgkfDMÚi PŠ¢°"ŽHÛ[.RBÛ¤&=åý‘[žFL×cÉrPIVÄ'Ér®oxôé³ùt­Hõgúú¨Öf ¼¬s·d•Œ9ȆÂûÒÓñí72ÿã‹Ïv•[@A“I:]Õ*šJ²óiy×®kR>äèB9-9‰H©rTµF–O (¥ŒB6)Å$(zêïž– |ä»üÅ÷š9D«&¯\ƒ$ýøÉ¼@eÃyô‡×€èî´*nV¼1·n几]Ñu?:³7øÜåõuÐËÕ¨ZŽÛU ‹2#$%€ Œ. ,LŒ=ãã£[_:¸Q\Jæêjð©ccŒ‹N×µvïÿt±_Bê‡ìn(±(6½oâdtópîùs1Ñ=.óì E-Zña{’·Ù¦¸––7ÏG¼·¹HÆ·­…¢“Î'áÖ‹`ŠÎPN…ò -TqkÔ÷­eÈ4{ ÌÂ!è?zÿ×3Pøæ›»¦ŸîÝy‚!ï}]cŠ^H­epì—f4†äsØû[f>Ê'ÚA ìÀ›”[½<<Øøõ¦õs»svY Ffƒ¬2ŒEQd¥D˜²MªÂGØ>‹ëË9¼ôÆa± ã"º,Šê4’N˜¬Â¬YœAQcÓµ<ñÞµ'' 5vÓéÍýw—®Îói|–­ÌYØç›ûuìUv{©+)«u×»¸õl´3Ú›¯÷æ«ÖôË.Ó1(.‘Ak8J ¸TѦ¨ã¤Èû,§ÀA‚+dÖ?i•D”5±!i²0éN)‰CìF¾ãÎ’U f¯Ìx6dÜ'zcL†Á£4ÌÂõù0¹Ù}ôþѵŸ~¹ØLGMÙPJ¨­ `bû˜ûpÚ=!Š g:óŸŽ©[w¬™íi*“)ЂKœë Åy€ÍÆ7j“¹|>ª¯OGÃù"ôD¹º\µ“9N9ÕªìþÛݵöØ^§ „¿;ùg׎^Áöb³L¸ØD¾P$y1üÆ”u2[Œ†ÕrTöd!8‡‰9‚.¿¦šƒŸf7Œèüa~̾ϗv2’Ä쟿z¸?-L­æ“M„€±6C¢(š4j ~A·÷?}Ò½öÚ˜¿b`Rn”&ˆ.!TF™• êí1âôØoV¡3;w²©±CäI”,"'Œš:ÎKò^³Ëv®ykÒɧ:0Õà±,\Mvÿ^Xœÿð¼\¤ŠãÛ_úµ_ø×ãÙùYÈS «VW6£Btƒ Ç”³dx}f»ÉÎòhR”1‰ø¤4³@J"úû‡´ç©‡Ê û× 1é&»±†EU䓃ñ:°âW¿5/€“D!'ó 1ŒnÝñÔÐo–;“û}ý­7гïýöû¿–=2£Ü¦!!1² k¸•äÁv©eþ\&»8¾;;\ç*BH–=êÀÊ¡!£ D®œt“FÕÔp¾c%.$;¼Q,ñÄtm(%’éqyŽ9Åñ¸ŸWWGÏÿ¿ïi@Ù £Ÿã[ÿÎ÷>©Þid”‡¥ ÏövÎMŸ•©IX@_¾­Ïa‘Ûn5ÎAPQ#¯ðÝa^•{Ôf&iéadL„u•"S´9k·J fñCÛ¶²éµ5u_ݺõ Àó¿ÝýŸô÷Î{$I)ÐHD@‘ÊÁ†":]u‹z¤u.|é)²R&2 A® IDATAæMÞ‰r.Z[6¨˜^ u:?*¦ìW‰u}mÞƒ?›é¼¦®Â‚eÿzcüãâiÞ‡îÝãäw„–Ý«ö¿–UýϾóÓYÞHôÑfAˆacl]IP…1&Ó*¦:8|ªÜ"?žŽÖ®2 GD½Ã'Ødî>;$ \ü6¿ÂVÀ\pÊ£†\!(áÏù¤Nφnk5ʬ¢Ì‡qn 2û2wYŽ¿ú{7œÎûL“RM•­7Ñ{Lëb8ÚÅAäP«Þ¤DÜÕwPÙ¸T™YÍ•ÃEÒCé7{´ÊT:€ lyÖ{( Çg›ç¹î/g;M>©Ô¹-U6‡7.äÙÂêóJøÉêøÉqô? y÷uê)þ_?…\wÁTz(¡)v×™IvG!‘\Üô“/ÝK“n3¸g§6‹¨Í~¹ Ú¶N·Ý¸½»¾ß=Å ¶|{2xL¢¼I IDiØ<…Ò_¤á2´ÅbW]*´u¦jcLÔ>Y,#4ÙJùlm,‚Y¾?ÂÑ¢DÛ¶2.ejer€˜ü0eÐ&¯Ý…™Lš8MÄTp@kÙÎýù|¢Ç»y·¡L,ÕÇ'ëó‘÷¬n½þrÞí »¡g9¡KñËêÈ3æ»*lòóÇy)£_ œ7ã·ÞúèíO#«vÖ:ËÖ—¯•eqO `£Â˜P˜ ;œ»Ï—›•Í s”ú$èuž…ÁhQúß»3oîºQ ˆ¬ kÀ¢9I §ž{Ž(kÖ£xªm™çXZ£X™”!­ 3t±]QÆ!ÝøÍ¾ðùø¼gÅ!7ÓyÙ4®ouÖuy9id2ɳÄ@€Dà+ÐöëW«\¼ö—M8[®ê»÷,t^gŠº•—ÖOFm8(.ÍBB!òºo³dæÕ¡ÏwÚSyt)!^Ÿïýïj’½úsŸn~ë÷Ÿ¼nÎwOHjI³yòY!:G« GàNGÄ” È³Óæy¦'´^a,ŒŽ ¨ûú× ² b½¯Ø”À”€üàÚ¸ñÚ­xv¹îÇ' GƹêÆ!*fFJBBRœ¤M¼ID äΦÉÃsW§Fm>/¬P­)/\œªÙ°öJ‰fŒã,Bp\ÇÏŽŠ¯*°½S›óö΢{BóLq74“}}½ãy< Ç|÷JÌÄ–‚b° À¤8¸\¯ÈD%ž I,ÑrBì"!'4ÐìéóªÙRigØé¼¤Òòô¨«vfe·cÖ F *Ë̪e¦lÊ^z­€ù“/¿tûá Æ2k«Tú8¬ŠÑ«_™¸b'”GÙ !’c‘v1„¼5¯L+p‹'«©¹^~°û¾µÞü*ÿëBÎäû ¹u2ËŒ”Ò/Öäì±Ï‘‰= ÆÀºP)rD%ÞY› †Ø bD´Ö2%@Öÿj¸þŽ™5*_ÐÍ…±{«qÞFU(MΙ­LI…d10&ÖBD¥„EžQ„SŸ%‰¤()XÉFw¾ó¹ÿؼj&Y?u6D/ž53k Õ 9/ÚÑAhËÒ2yÇ.;8¸³³=–Ç”Køú—gÿs´Þ ºº½²]¶zž¯×w'÷w—gU¯p¹A2!†qUEö^‹>µ¡ºUÜðÆ?(úÿæõËí¦ÓnÉëy»ò~#: Ž(j¶¦“\ ÚúYg‘HçõxzÊ é3¿9€”“¹I0…ÊÞ× EŠ 4 eT ó’EQ0D#A9!DÃ2’ª§J|™_èÓÞIÌ`ÅÓõ=½³ðÓÓ*w7n9ò›Üf‡õe(Üêñ~ñêø #õ…ëfµ#”dTñ5÷¨žÞ½h¿ýÎÞÍ\O:÷ÊîN]µÞ3¹…ºîM)¹bÖp^(sÒj §Ýx²ÌN–Œìý/O1³dRsªåO‡…L¡(!H*•« q²Ë”ïÆ®ëËúÎ&˜T #XNr iëÄbÒ1E—HDÑ[Ÿ¨­îtk»’@!»BònÁ»ÂÌBœ@lW¸¤.aõ3ÿ8¼¶-B‚4°š”i²³èÉ4šòZÈ$á”Xt=ï›ÅA\û¬ª°g+ºÔ¦6©‘ ¦++î²|Í @¶ xámî/^…Ó\Ip¶v–/ð#8f•Ì’bz}Zʦì§uŸßO± aè´Ñ’9U»à…}Šý:ޝí˶٠xœ`8sû65Š(¥—O¹½xöá½Ýç±ÊHñ.h†ä‡ )’ I@+È>ú§Í×~í%8|ý÷Ž«Gï=ÙÜdÄdêšGãAêhÔø`Ó  (F@-» ÍFÅé±R!zH®æ3³É«LU”®"ÔÔ߉!n!5tÅ®Æ/·®\:W(â«0¸Ê¡G"F""¥2âTżÉåOã+ö<ä_K?=È{—" O$œCK™ò¼³¯Á-5\ìÜ쟩iìæ´Jþ+$X¡›O795ÚÐ¥úºÚCŸÔP¥”ú\ì{'œBŠ"#ûÄÉÅÄïNÔ/}døÉFÏû©F%Q U¨ÌFÍ‹ÀH4Ú?kP3’ÑZkô~Å]"*† w‹¬˜Ìs9œfHÄYÚŠÜQ'Fí¯NÛ§®L_èç_y·¿B[c#¡°ð¦/²Â «ËåÑŸŸÞ|ò;wúå7>ŽüÿT½I°mÉuž·ÖÊnw§¹ýë_õU¨Bd¶M‹†(Úf¸!#è&¬p§±#a{ Ë3M=ðÀf8Â#‡lYdH S S M4Š UTÿºûî=÷´»Ë̵–ç=Ž;;ƒ;È™;÷Êõ¬Ñ™<Ѝ¤±/gÞ÷£X†‹ï÷“þRµ ¼ó69Ê®X½õƒÇ€#w÷o¾zõ >¶oß\£vÖ &…Ì"€Ê™žHØ"dÂÌÎì­†¿øöƒã·dÞ@bH³º£òÑ¢]Y$Ü'5$ª† hæ”2 ƒVC×y äʪ*¬Úf:±åœÈ<™Z–…Ôà^·Mðcìæñ€{žÄS@µþËñPP"TaÕ²(L7ÃyuyÒÿã·úo¾pþ›ôöO…eäã¶Tf K”GÊ[/#C2…õv»Í£,&GE×N-ƒU†óÿû{Í†ÊæTLš£BRç1Æ,¼KÖ³’I )fOÂÌŠ‰ƒ©—o¥ôý7Õü©dOÂHØnÝñÉduIèˆd½5T9³¥ÜÅ‘‹jî-̼N'¶ ¼ö¶&ûtžX@Mû×ýµ"€SUy2™PUTEÑñ>€ª¨¤¬JD¥‹W—úÎ O‹7¶e„ÁçòˆÞ]x?Ž();Ͱ»h‘,É5³þá‚NNÌ„ŽxÕhÊ»Æd¼FʃöW«@¶NºLÑôˆ,Ö©ä”$¨È>¹%b¬'nòã]Ó–±ð°·‘5"š'ÈCO¡ˆÈDOÈhØ€ªZAZŽJŒ8›6u‰ÃÉ´³RjÇ`Ы÷íï£E§Yèé¦äTøIŸý>+²ï}ênUUT´…[”—Ýûd5;Ãâp}ãp÷œüîGï ¯‡÷A€º Ö¢*j8Ø^]å]IT(•Ûn{ó~‘•‡Bftu'»©çœÉÀw¦ïÝ}×y&;ƒ­¹lÈaZ$@µ{_’°ª«àDjÿàªfïçS˜žÜWÅ€d8ÔxÙ¦©XÉ“ï5ZËVɘ0Õ`Ãq=õŰ™dd+‡RV„§´[¥èÊb5 ].`͘sQgJ³ÁQÙ96NÜXC @S™’ú{߿ܾ´“c—ûƒþuó­?úÕGf‰à²Õ´¶qJ§SÛ$ò2š°)ég%ӶȦ XŒ!{€ƒÓY³éˆUgËõ4ׇM3kQºÔKT8ƒ°Ì€Úì4|¿¿þÌ'dx—yûL÷àÅvý5¹ßO‡’­A]z¡7 ;ߊ1ܬ–¶ä?gïi×®')“P),c@V2v«` ˆ ÷µ·ž!ÍÛŒD@ÁÁàQ&I„¨¢böBo@C‡Ååƒ+útzQëÝv$3îhs+þÁ7ú»_ÄÙTÞ›2e x¾2fš¢Í­Ÿåhit”Ûf¡Ý³\$€oüáë*(j`ªÐæ+®wÞ-¯RwÞ’™RD%Ê{òÏ~¯Uè7hj‹¸s¥ú­[Ëú¥å+1$ïÕ–ÂZ2Ñ8Åœ7©žˆ©"PFŠ,Z¤¤dƒgACyO{@P[2c­Y Ïê´“¢„Ñ‹éÊ8à ø”ä $ª@´—Ú)lI¨ÝåÇïŸL&þÖe”iL-Ëæù£Mõ╳¯I‚C ¸Új ›-Ï,˜j—ä“?¸Ñ^ òþ“Gwþ púÍwówdY¡‚æQ¥0WWãYÊf=«ìrÕ‰²’ŠâS*_¢ýËN}‡”=ô»M§§­+6:5X?õsä!ïÀƒH·\™I7ÎŽ©%[•þ²Ê<æ:ØF¦œÐ"'/‚ˆ 6pD³a;ŽD)®å¼¢ fØ‚o@»´Á€6!Ù÷I²öÚ§ÇomÄÏ]xó¹V‡nXqUÒ²wÜÕ2ÊF_0*ÆÎ‘èÉ%³)¾{ï«€v}>ÀÝŸ7_ü¥?Œ†As[°©Æ«að}—œú 4¥ôü„€yä1eíZ"_šã±˜è‡'2ïãËñ”ÛlèÖÄ.#FÓÕÁ’©ÏW¶Æ ˆ"!3Ý dUQbQÙ·5¡AÛKL›u9wÎeÜô.w¬)¥avVYy°Œ•pik„D´(²²*ha°ß-Wíí‹ðÊ'å—§Öyo¥(nä³üqY/)#}ïZ_Ï92‘õ.US0é"R¯Ö~kðF›nüªúW¿,c@¢Öc¬(¸.¹CSIV¨äIÉìÁ €PÈ’µ™°íÌiµ˜ôåÜNo¿­¹]ɰƒKÃ`›šÆ±:¼6µùÍ«å`Æ1ºÒ!b¿ ³G”¤1#qkDTlZ]åܶcUÃ;y£Æ£³ŠÓõ[eì}s2µG—³BQ4¢,Y7S€ÍΜæë©ÝÉß›.þR¶‹‰½VÐe6 Æ oÑz•…pìm@4ÄLå~b}G47‹ù™ô¸7Bþ˜þx#˃n4gWæÝƶ…°¤­Õ'}ô{d¼‚ˆ"ZMêÐW9t:®íž)>2o½9‰‹rr Š…±.ìbyã$o­´â££¨‚l,aVÖ"&*Œ%++( €½üøRñl|ýöpÅóÉõ©¯› .¶SÚ•‡ÍÈ“Ç.×SF4°WÜ›c‹/~¶\?ú‡Í_¿¶N {øö›Í©€f_¡±‡Ö´X@4B„ ®%L` \Þtÿî k±âvIÒãU–O¬7i켋â+ܵÓÊ`¡}š|xbh’Œ hÐ(çÔJ84I»»·Æ‹­<\ívi•Kc”Öð`ÖVÝæqô«º^#«‚B¢ql¸—8”˜YA²"*’ýÁ=AUl7/ÝØºéüî5J–`óÉÖTÙB*0 8àH(*¢È Ê€°ePç+§ð棾|ó7þó·Þ=Îþd¼xü½7OÆìêÂÙ>˜Áû0= ËeÇ£úJ#L§uqПÝþLà>³úú?i§#õ²ó'M2“J>Þšéìd^ìúZ$0{R"(ˆ#rde¼LÚ×Í|SWGϽ}ó éï§Û³7Îÿ8ƒµjBT´¨¬‹Ñ-Öã.v; I”QQ0Ø?ŽqHãÉ\³W1QU ØoŸœ†’~¸ïß~Žt9?¸||{óóTa“E†i|ìëÔ:‹œ°ÙÏzhØíS€?ûÑêòÕüÇ_¯¯UÛž~ÉíŒZE*Ç„ 5§b¼&Ï“{W­Î¼–ìÓÙ¡L§ùZ®ÿíA’S[è¾wÞFT=2¹´Åa…œØôÔìâ3!䲘h(@*jèz€‚Æ8ñCü€Ç0ïxmíôn/ÃïÿŋӯœÀô÷΋<5#9È}€s ‰í©±‚“IVA΀™¯ÒDÛ×:é‚e%`Œ‚Úqè‹ôñáÅŸ<÷Ìãù–‹»sªý&=ÖU~ûýW}·é.bqj€z’DÖ!ƒ€@B?úCüŸoCû(ÏïœH8‘sšÌx²YEÉ(HÎv[_c<î«u‡ e:»v¬Mh©¡­ÇP6·¼z|píÂÛ™c @Y…·åÑ\ò™ :gÝ ATЂ&¨õݰZáûñsöãîÅÁDÉÃÿðmyæ wÅb‚¬ As4ÞúÑ:GhdïBänV-1%6Vò(Öô²gËÑ!BÙ¸,ŠÆ¢©@L®ÀmgkÝa<T%2J…Mš’A4ºï'³ð•¾»{÷Oæ×_(óåÅ™x–¡ïcùæç§¾·œ æ‡dï,, ,{\FÏsšXûqÛMxñ^Ûu˜O§¸¹ñ[¿rtPkž/AU زLŒÛ‹wªÑ¶ŸJqRRÙ‡nQ ×>(üÜòmÆŒ " L(â”Ä¢%§: © ª dck^-âµùŽaöxõG³¼ê†bghÞ hAÆÑ°"e!M à^÷¶P‚D^•AÀ0D1¥€±„Ȳ÷3€ýE™Áúƒ×>ü4¬»×o†G?HV»Ýã{Ñ®ã øÍöìãŦ˜B xY·äw~L¡ò›œ-vÏŽHeëé(Ù³ÉœŽ®e#ú ïîž¡\oWAï¡[îÈ–¾:Ý|èÊ”ÏìêFÇ´ãLFµ€ìip=\lvuXßZ‚Æ1±É2F¨€²•‘Œ$и§QKél°±øQ¢ú”k=y1ëøê_êå†9á-«,0ÒJELˆ9Ð(XgrÛvÒÝSÿÐDŸsA ¼A¿¢ÁdOÙˆã¦tö3Qªë—oýpé,«-¼Ùæs <ô¡,›…·±k©3–%ºÉé”’$H&Ð4ÜíU“ÛÍiÙä˲)…7y{ÆÚÊvXW!,†—Š›¥kŠCZíN-D›`„²­”Ù xÎdè³ÿè­ëw裓<ÝÁŠeDȨ„J¢ÎODšØÔÞ¥aÝ=êŸË÷ôׯ?kýî;EÂÔÒK,‘héÁ`¹@##d´JæxòjѼþÇCWbNh4f«D–øìð)Ø ¦1ƒõSYx×—s{KvÐ}'=çx¿…{ݥ⮪˜f¥¯Gë<Ì‚‚1YÁDBµ“™YöÈ £í­Eë ƒ+(Ø1Pm<îš‘½¥úµŸšçw§×Ž×G'âA@u ™yÂÙD(1ê•{Ì»¾ð2eƒñ§?£Ó.ÅEcUδ'ñ £5@DLÆ  Y­U,êâÁé¯H#7^˜~×ýÑï÷ŸvΪ1ndUNBDÖ†”ó¨IG !{ãÙWÇ0¸MbŒd¹ÂÛÓ£ NÙ ˆD·/Mîƒ}èvܦ¡7]‘’Mpläê$ Œ¾kÆ¢F"Í¥-·ç}AÖ¡³Î:«¾ÈCò^ ò` ö²é/ÃýO78ܾ~txc~4 ƒBc 6øó‡7o:€Œïå>€y}&“×%© ÷óvƒrBr†U@3‘Bd À“qép4!cP_Í$ˆ„>ÉÈ{R2BÉÀi’²¢)(f‚‘rlb—î=(–[lc\>W§[ÿâÏԓ뛪¼­Ãu¾–kG‡@Ò"uá;·í•AT5Ö†ýU/)@R´ÉY£»yzÒÜ]Ž0v% áÆU…·R¦i41ZYuÌHyì”=p8Lƒÿàã+_ïþúñ§N¦óƒ V°!”zZRöEuÆj”‘ì(䟴 IDAT ¼íƒ5¬Æ”€£4‰HmgOïúéiø_×=‡Ôu¥oŠkg¶äêÀyЙ[á:YÃÖŽ™ tEF3›µ5*ÉXýäm÷®^L»>÷ëÚmr«Ê…ûmøfûúpþò3›D/Âò_ZŸ&'‡ ꣿûÛçd¦¢œÕUa­¨Ìh,*¢QA!ƒÄf~ç3Ï#Àqú¢à?èÿ÷ËÅO÷~òÉ÷­.Ö%K`ŸS@BÓjÔ¬s˜æ· uûÃÊ,_þznšL£w¶vRN–edÙö>™33=I¥-bÂŽÕ¥²Ÿ@´:øþZý\ø‹nréSƒ©”ŠnðêÙK: ³éùã|`ð.­&Í£>‹O\8Þ™êÿàðþ3ÙN³Ð¢ÜN;óÕíüûm©íµî™>ɯÜØœÏŽªÏËØÐe:hC"tÆ Sü©ÛÙÐàôâDÝÕµG©Ô¬H”M$~¬7Ÿ{öú­çaží¯`ö­MQE<Ú¦²„J#R·5…š#Ü '9N[ÇÝ­ÖŒöeHÞ@ B9­ëC$N´ j±º±"yáàh¹p\DµVã` Ú>ß ÷ïõ~ËΘjn†×ï|jv†_{øÙ¬«#)…©€nØfÞ‹+ËÄèÇ䙃…ò~ægFHnÚœäO]û«ÉƒùÊÇMï«ÙÉóß-ÙTEúi÷N)†@D’QŠìX@þêų55t ‘¼ ûBŠ‚¬ËƒšÓ'>óú+¥ ä”G&ƒà§Ÿ?yó‡¦ã¥zì]¤ØšŠ¬±ÀÉÍ«î`"鼫uÉÎn”uÙ¯?Q*Šií1A €SîǤ»öÇÛµ6“Ó™a›*¿±ArÒÌ2ô>¶¹^/€‡©tcrL†z³ÐkGÕø§ßûB™? ’ÇÆ1n34rßOq„"åd—%MÔ/ýk_ˆ™D@-ؽ<ûÁÌ}qªhªzНnð‡ÿ¦ÿÎ(&îS‰’7yelËþ™blNíŸÕCi IêÖSáEïU<8+›ÂÄ›/¼ZI☋ ®£| U3ÝõÚPÓÀAQW¹`œ[-ûä…UÍ'¦< –œíÑt^€í2BÚÆØä”…c×xëêÓ[S;Ðj•M[VJœÎŠ…Í³1Ý:-‹1m¯šáãØüðü?ý¹ÿ>¼/Þ>ðÔo{tÚÆØ¹h\Î/rVã‹ÿÁkGD´œYD²ø—w'“ŸqÑ ˆ ô|ù'ß½±ûôè¶uáacÀ›Í¢ºv{0;96 ‡÷^8]äœXoQx eP&0*2T¶éâí—*ic@Ar ,šçÉôÎââË­4Gͤ6=Ô‹™ IçL9u–Nó)À¸ÁÈKaØvQ®®:ã EG*œk´ôŽOg JjM,Š"Û9fªº¹¥Iƒ¾Ÿîê%Ž®¶ý6B7È—_^šqúýÖü—~ùG¿ùë—ˆ:ì4Oý ß“AŸE—óQwnþÍDºCBbÎywôàhõ9ܘˆŠýDTMñU¾wT¥öQý¾ÇÎ׿Š{“Un϶ۘ¬…ÃOÕ÷»lʼn…,¤Z ./Váµ36jš¸¿]—3ã°ºz°Œ‡Óã#¦!E¢“9UÎ@9™yP¦ÍÇxGS˜¶ËÁ‹\”Π ‰q¯&oÅgs€Hísfš1ÛI@»‹GÇy8 ºÛí®‡„‹,åÔf¿æQ¾øÖû7íúj˜–¹K[_œ=Ó|ïãYí‹¢MœmØýÔœf£ ]М1Ê"í¦AŸWÿWþø+æž«~”ÌØò|êr çß?;ìg=$ï>õ¯ÿ° „IÉÍHŽ8‘¡½S‹Ëñ‹?›Dƒö\E@UÌm¿ÌîgØh1IJÝ–zýé¦]6€éþ:Ç7.ß{Ï/N= Vчâ“ÄÌè‚1HE¢ÒèÀʆgÍ¡×1[Uûª™ Ñ`µªÔçb+óåÃÅISÔ!·Á¶r˜o”o•Ì›_NoËUkmŠ… õà»ËBR¶ew°{æWj€­zM)ré®}8~ïKnÓëý|¼~86_¾õƒO?æI*bU$±iñ™ùÙåÌ aV/‹EËÊpqz(¨ì]F$ÔVíñæø ÉTòž= às?vCuk29ÝðA´§²Áà 0I¯ñ*¶Ëžú‹\ Êú¤9ª 2€1Þ®É{Ì`$ ‘€¤’DHµ:¬$ ©ª=¤R±WC  ªL•—©XÙm *¸b×܉Gú?½ÿ³ÃæyýñòÏCßÇn›™?®¯–›Ã¢ðlSúª:ýNóiH[ïÔšV•E°/»ïM>p›]úDÏÖcsúxYôºî—€Ís홎'öº„ýY¹ëÉe§å݋աQƒ ¾JîIfŸ®]mãpz½0ƪ3‚î›ÈÜAì–Ýáxçõ±n[ÎF ÷îT&±®OÂ$™@Gffð¥m3ð™|†}ѹÌTÀ¨U±dsçy!Q»ìÂl!Àš w•t¼}÷ð××ÿóƒßß%Piæ‰C3øq¶xköw•aÊâe@á=ä9_Å¡¡»È‹"¤£|}y'ô?úø—_>ÉîÈ[“Õ©ˆ4•Cl åÏþ<5"Qj7¼ùþ›ÎŽFß9/.ƒlo¼jmÖJfÍhETõqùÁ¦ô Øò“«e.¶ÏÏÕú±LO‚GD-JK7ÔC$L)ôƪ8"ªˆ*Ir2DÑâ0I© #¢ˆöÃ: fOM§rŒtØüÚ+Õ7¿~Ô…Ž'ËÇÛ †‡ç\íþëñÃÃY´SÜà‰j1&í0WaeEYß¹ªÿ“gë¼ïPBV<Ù¬—f6^”ÁTg¥Ëó¦÷óì’V„³pg+Dì]&€•©ÕX0~ôŒ1ô)¶,›Ö ã^vxöÒ]é÷÷¤6gUAãúq*¼ÿ–ß\¬LÊ–«åÁH¶pfߊOXÝ{ˆòžÿÎO²…äI˺¨„Ý¥;š"?iz·«i Ù ‚Ѫ&î3`–¶ìÛ£GÝí¯â7‡Û{­=IP¼vÊßý`s´ÙAèò% AƒÊˆd–ôÆo3Ê1<)³’•öâJAÛ³7ÊæÔ:ÑÎ}¿Æ'§XŽ -‡¹ßŒW]‘îý²)A_ùp­ZúlÍäÞÄOú( \雉?yÑt~TUEILŸY榒í½#¢Ù4wEß(š"»à  ¡²hÖ}#É>Ð+„OÈåJ †‘Tq(vÃÕùñöìxš8«¢ë•¬éþâ_‘o-øìão=ûѽð·áùÿ°9ØÙÓ“6¹Óæ"ñÁR8o»”Lbc²Âíiè¥Ì¯ýºH{¦’0ƒñ—ëÞŠÒìóŸ–¸-V*q]¹F¾ýŽß:›µwŽ.ý¢7òøæ+w²£W¾FšrÛ*…ùÑ{—SÆÉ®œ¹32úCíÅeÈ(ÌŒ&G ¾_Î1Ï“›pëC?ú„S Š$TÚÛ9ö3Ex!¸ïÈ#‚†÷ã¯0˜§Ç ò$MaŸ§nôœ…ÔXk‚0l®f¿ÿ]ú››÷¥˜×îÕ­ÝÕeC¹a “ty1ôSÛ©f¢QM,á\‡q4Ú_†Ÿû\rÑî±Øª¨9‰Þmò„@§G™×5y>1;î^ü·¿Ô—_ûÑaš޹ØÝ?d¯þ ¢%‚¾È'B©¯Mxéê{ñUü¨>;²ê˜ëûè€üvŸ Q„ÑMVKp‘)^aB4«˜Úª7š÷pnQA´òTFÄ"¸_r ¨P$±Eø ‹ÍKSÝ*ôÉ*TµxÞÆYc-a)†Õ;úƒ×>ì¯üVOî/þá홂ë.wçU^»œV®Õ§4 ïö«è].}ñ×f=•‰¨&FÆÕÕº)y·üäš™€~”6Õw¾1õÿp»JÝÉóõÁ4vP(Nd^6¶šá·ÿî'wþùÅîªÛLóù8Ý®1(sdSµ^AYY[9¹SÃý‡/þ›¯ \8/O$@,Q-l.ÏGØÅÕ{7nôŸü(æÇyì¯Î®´-N'Óùu8ui„-T2†Öž†¤ÌHÆ~ŸÍ˜ºPn6eçKéòù¥cãO¯©EUA™•s&×/ï6 Xš‰,ƒUÇ I ’pÆ`1e@G"¬1”ÄHT‰43r)¹Š³ Ì,Ç׈å}ÂKì[mAÝá‘@ñ‰|_úþ“羸>œÿÇ¿}±ZP+JׄÅ5Š>‹õhÂn´˜w7ßøi¿ ‹_ý7¸+ÊÍþQ(3q{Ù7“!ÚÂý5ÜÒûƒp¾­åóç<ÊÚúÈ6…í ö·{s;×ë .'[Ý›o4ãIªçw\ö«sÍ×®¥¡¼Óp’2¨ŠöäiuïHÕxðøÑÁäÌ”Kò¬^œÄiHE…q pæ+_»U‘HS6L}Í1£UÈ»è}²ûW&¨¨])ßœ†›ÍêpëÆ^ñù¹W>õúïþ`I«;›}s½«V®t–mRë•AÌÎãPpeê`æ×i×~ùlYÕ—Ûʵ®ì’‚ä¼9@±mû¦_囫s¹6:•±g/^†#˜ã®î´²}ªOg‚@D¢e&áCIRè´Ù~÷éÍ[°¬váx·›7¤°ÌBDÐ1û]. 6g>ÆDP n‹£NvvSÖR¼BÜï²7iä3Œ,‘!Nc&‹j >??ãÝŸßè¯OmÞÙ¬ ’„Õ– PW‡ÆnéŒÓdß&žÜ½ûñƒúàá?öððÈïCQªÆ––|vS6ȸ®Žƒonù³÷?øÌ ÆL{5’ŠÈ4ïp¼8*kÓ˜TÝô Î1ú¶P÷ó²R&ᜠßÛAëÇ8*Šðˆ#5®îЂ!W·ÉùD¾%× ã¥Ù Ð®?¹9™8¢é$Ka­ FWå£mÖ 9;UQaެÃv•Y12*ª’…ƒu¾÷ŠF­넜Z@Ž™TUÇ'ýj‚†„Ñór³hï>c3è¬è^ f·³Û%‚Bå’䔆±€ƒg»ÝìÌ•Çvœ_ßy‰¹mÇ<bS”îè8¸ƒ‡'Crsî§ú—?ƒÑK2I$'œ\Ÿ¯½hè’¨¤¼ ƒ&ç2‘„ˆ–ÎÐ5ÍY_2˜«ÍeaÆY¥$RÎjŒÀls†oÏ?̨ª’EÕè®U€ÇVÄ#J‚Ì#zns`²³µ¬‚d4g%A$C¨€,1£M¥D9Ù ªÙjTg£§ÁÜ}Ù'ŽkWQQ«<®F³9¨ÆM»œV^üÒ|í­ Øù7ÿÆñÆTÌ«k^tÒ8 N¥ˆÆîÖ“Ø býðhõÊí©´Ñ€ñ`TDÔàâ²/eÌ2ô4ƒs6‰º™ˆpÓ² 3tÓ?ü«íeñK§s¤GgQ%ÆŠ0H¯–TA>_þ9ȹbc„xÐ4*¶—w¥¢JÒLÄH¸Iƒ0D-3yçÄT2†(+£ÊÓöS+ÞE×þg"Ì;ÿÜ5`Ûsbf Ö ãƒ+_5W¤YµåÌj½ñµÍXØÁÞôótdž2*ž¤Êöe±½‚NP£¡1Ö#Ç>å¨6 ¢1j Rö)»É¤ž2ƒ:I½4í|3ÅÛ¦ºVŸÍ‹1B“³ ʈA!R!’‰{ÑFÈy0$ â§&¸§áöÿ¬€ÚÉñMX®û¬ Ì]Ô< :4äRê³h•œ5e€$²ÒS9(üËúÉ©õcëÞ¹BFº<©¥[¦ŒÄ99E•QG+¢ÜiòÅüÚMØm|Ÿê4 qÌ•)d¸Ê)FÈ d‰”Y ìß¶*HÈ}{ðÆqÌKîkÉ ¨¤2«ÅX“™;Ýf@*ÐU¨Ö@Ȫü¤¨¤æ‰"]á'µÖ?^$™,¡f¹t§.v†…Y‘sRλ1b?À®2Þ[7 -<%TDQÚÏ!ÝßÅ=éµ~²ÌŸ>D !@$Œi88³ÃÖŠ ©À˜!÷5FÈ:œLp{ùxÛÕ•?Ù`i³¤Ýô• hH”u/â&"$èÉ{íúx÷¶¶’1€J‘Ù«=f©ìe¢4ð:z$oa@$FE5,€*v_C‚½ôPŸœ¨÷«\ÓT@´wnÓNMÑÚl–‹¡UC±—´+‰Œ1Ö8Q$ ?á”Sx"«Çÿß´„½\mOHBBŠ0yæS×íü^ÑšÚ"J2`‘¬øŠŠøèqñ1Ï~æZòï-Œtët{ôc­**šöOæ4)˜ ÓêK°ÝÚ‚M$2˜‡‘×j;$“…9k¬ò>+àÁ¡yR¨}²F~¬’Õ§ÿ¿ U€ˆðÖK·•LÑ{ä$p•øÿëê]–ìJ’$1U3÷sî#"€Ì¬«›Ý3œ¹ eD(\Røüîø[üîfÓMNwMUe"ˆ¸÷žãîfÊ…Ÿ@‰  "®?ÌÕÔLMc}½œ–´s%2ƒ–‘F£dŠùxNËŽãÙû~²Ý0çæŒc¸L©ÍÖ· ZGï±=z”½¸½›õ-£¼_þýüÜþôï»-|>ßöÏ©ëý´ç˜{ÌyZð¹WZ; úûüáçå|÷Û§R¢×=rÍüv‹÷?~ `¹^‘t[L]&¦å°iü1¥»¤Yâ0rûë ™2+«_û×U}¬§Ü[bôÑz ¾T‘QëxxCE·ÓhQ„ö²ê¡µìQ0PkËjƒKŒZøOy ÉS†Ö7”ñ¯ÿ´¯z½Ú½¿³/cÍöRø¿ÚÓÓ#}-õòɵœú¯í¹žŠ’—G÷˪Ë(,/ëz.§KµŸ42~ðëSV+™2‘>¬ÀÈbÓ¯ÕœpKôÑ ýí—?Öº¾ß>¡.×Òß÷m÷Œ’¹æTƒ+§Ý.+†9tó´[¶ÌaSáE]t0áÌp¤È ¤·ÇÖ¿nª±/\qZÁbR±Qb+ì¬Y(-Óú ¥ïv.íBÉLýîÞìÖ†G©½&@DXt9•ßN'Ý÷¸\êÚòEÙaîc´òéôrý´\NÆÑÿóùdÕ´_†œ #ÜRiU^™'õ‘‹Õ¢båyÙÿÌËzaûÓó›ù}ï{Ò-ì^Фˆ‹è¨Ë#*ZñLfpoAeŒžF…!]‘}4,Ê>´.ù|x¯?Ý/÷ÅpZ÷ʡض'ÎIC¹Ñ°{6¬Oor*‘Ty* ¼ 7®ÆsAWÅn¥€5¦O{%X k§",ç—ÛråŽìq9Ÿûf,ÿý?,¯k÷3½|^lh‚“!¦3X2*AÓ<®”Êâ b7_ÿ°Ÿ}ñ¼øgÅÌÁV…VE)D—Ì«R3aq_“4Á)ØÁ4z­6BäÄC´mYµE9½œì¹üöu¥—ŽxÆ×ÇÝœf´=¬P¢±Ú’ÄZk‰žè\=pÚ¤d‘Ñ™¿yH£.ãm ™QM…#ñmóϵýùWûñq{f9öo«Ê¿ãÞê.fm˜zzZDÔÿòüR£ çÑaËö_ÇëóUÛ·s¶q:ß~‰“Ò#VmÍ B^Šy쟟>Õímçß¿mm´åå–\¬«üj=Ôó!ŒeK1W¤½Ð{φßç§µœËÊñÊú¼´rÿ²°^Œá¤göºä¾Të­±<<÷Q)f§Ë1\j½œÊÚ’1Χ·}ÍžqþZ¸FƒX†öŸ“çCõ/åžx䂞«†YaEß?ß¿üèó)TDaâe7 _úH3*Íjî#ânÍã«ðîkë=¸µž÷­ˆ ŠîH–5TJVu9—PüáÇÛûfÏÏ·÷Þ>ŸF¼ëíÉžõ¸€ÿûùôiË_¶ÿjÄ—§[xY¿ãþ ÛŠ÷sµö¥¾ä¶¯ÏºŸ·¼¬ýÞ>=}ýœûþ|¾Úíõïo?¿âó­ŒÅGÏ=×Çöœ×\µ-=ä‹YYòõÓ_¾-ÅÓ¿ùçë5Ò`–îIDATÞl]™Òù~縮¿^ŸnçÏû—§¼Ö§¯Ï×?É‹½â—åñú—o´Õ—‘«ºýÞ±ÅÆ—õÊ÷7»Ú¥]ÛŸŸl??^ì}½áÓ°ËûÏOŸ±ßy­Ð7Iö7+Õ±Q[þôô°aÞõ…ß¹”¾¶­Á©}áK¾ì>\[9³ÄmÔy¯?üÏÿ±Å3o¥ÄeÄKôulõ~¿®Uï««åõ¿¦]ÎlãëËþûO_£–úªßöŸË÷¼¾ókú‰Û?Ø-/9ž_ë·ËOVÇ_¼KñåÛÕÿáQ‹PÞø”|(Vì4ÊûÃòzþÉ×Ý+ÿ®nQëý²Ô´å¥<#JyùÑý9µD.2ÿõ\ÆÕ‚0µÚÚÒr°•hh}éV[ÄÝ“Äí^©%úF)OÏû}Û=Å”Þë>¨Zv™RC±h‡væS·= ßÞ^±üáú÷#²_^Êý\ËØ\çúãv-À§Uê±,ð^jYú±¶¥ë’ÀÓÛ­[Å)YòšV©ì%X*Š£dëÚ K ™ç¾å§Öº Õ׸5ó¶kYóÖJ·-«)u_*º·RϸõÚG>–a_ÅE=A)G×5{OÜEcî̓J¶ØÕÛ­Ó¶è}å®tí]²¾* ŸBöZÒ²£bËžHªÓI VÔz=mc½•e<^ëøÃý²ÿ©Œ±Þ[$ÇŽâ®.f¾/O{wT—ʾt=?ö:Êû¯þøqÛB>r;#å¿Ð–Öú/?h¼áº/ØáÙj¶4{ÊÚ›÷꽉޸,ðGçnKÆúÇ%€¡è¿kÞN™ïRûÅú^n¬½/§]¾ -l1:F]}4ýnÀ6Ö´Üí€4š!ÇSé]ûvÝÁd¶sö]K¼?nñëg]N!me·Öü_þÎ×Ç}_ _N[½'ÇÐ ‘M*nÑÃké…íöd»Î®2ÕØÈ”{øZ÷G‚÷nm,“ŒØ¿ªïÒc½r7gª°ú &ó›vYðb1ŒÄÓýuY–XF¶ª¸?öuðhþ•Ê̱_0öá‘[ƒÈaÚË£;Ì[ÏDßãÉ[Äž#ªuï]F¥È÷Èçûûýs´,[p´²Ž[CÞþ%Þ~¨?}"õ(?¿üÝ¿ùoÿ]ÝÞo”Æíá%úíì½ø¶0FËÇЮHº¿Ã-s9½–‹mèÛ8m· ßï㫯vi_Îkoöm¬·ûÉy}ë›Âíq:iÇm»|éçajv7§y-~ÿòPÝÊ:àdm¿d˾¨¾kß¹«—ó{œãíÓ ôTelYÿÓõäÅ￱أ¶{m¨[i¶Þô”…1bXß¶í,õl›?¼ªiô •±¿Ž¿Ë ÊÖÑãq»x-ÞÇvË}kë§÷sÒ¼¼üÃóo.ÿü}»´—ñºh[íŸêo_Æboômo¶¯Ëccõ–·±^tÓåx9•kª½½ör‘ý/×+úÛFµ‡×ñ˜£Þëyóõ¦Ûðe<¶íc|é?Ù>¸ZGó$,êö-ßµîõùÛò¤E_ßA¯ÛŸž‹xß.½ÜTýõ\“fLEçM~çëÓþÍYl4ïu$·u$î¼´ô®L÷{]j‡-åøï~ûéþ—yÎÇùôþ¸}êÿ¢òër]Gàk”1ò\ο¾Þê§óØ÷ÖËø²ŸOïooe÷?D¯—½Ù£?VŒý}ḽղ¶‡Np‰–_tÝ.{[1ú¨½ír* òZéåb§­\¿±û/^ÖSÕ½÷ûo–[ã ÚãUK²Ô-1öU!íyúûuÿVž.ñÉ„uéwZ1\Óˆ’ÙKÞc­§ZGî¹V1Z£ñµ•ÏeôåÙvõ4{óe zÏŒûV<ÞÂ.ŸZ1¬+ºHÿ?þàÛ?U5-OçK_üžëÙ?ýp\­`Y"Z/§Åø|×§‡ýH÷%½û';ïßÖó^o*Åw&¥L`Cµ´•úþVëûîzð¥j´|~{a´Ž"—s{éOø9›Q8û#š ù_.L„Z:½zòÌ„º ¡‡Ú8Ûµ6}Û™ãþe/ KØÚ{;¯m/ÝîÃ÷óéìõÓÒ³_jKnï¶T–sU(—%–³m;ÑÂ`×ëÒ·u+(×ÅO‹Z@Vþ®ÿå[¿wÂmrÈKùÑŠ’ÎeDxIdl.—ò—;þ„×Ðë…§»C§þövÚ2¬“2.ª}Œ¾zé¾Éã¡oåÇúØ][ÁP ŠIFá›ù¢–ñðÁ>ܾp­+ V*Ç ý~ŒfK)¿v”12(“™#@™ùçÓM$ó_Ím°¦Dsi°.«Ãk Њ%/õ1ÀRûÃmƒw¹±Z‰–ÖÉÍ@}Ä£ÅÅ‹!¬ R$Yn¯?·rÏS¬—û+×ÁóÅ|ïãbIzUë£,J«ÉòÊeÅm‰O/þ“P­*’ÖÜ´¯„èÅÒ6[â¾ò|Ñf¦ £h¤—ÜÕYlïÝXV¿²ž°½¿­^md)®´âíÞU<Í—ê$æ0(V·ú[íá´ºwŒ4äÙ ²Ì是½qŽ&54Ìb«ëº€1"Ü -gµÄì(YˆbïAs2MÿëòŸïm±Ý—¾,oo—³ùúl—·@¢ª•庴=Ì̱T»JÕÓ:sÜ ñéǯº.Éâ€2&eÀ-W¶b»¯½Î%φJ0côç,uDéuEFYN£Fq‡Æ6¢>=dHù²ÉÌ¢5xõ,pæ¨t´R‡†€B•uébÉ©Ñ`5Óh'r ëÞð^÷ˆ-{”ÊŒ‘Œ’ rTκ"GdFPPR¢²T˾„F)Y)“⇢ة"YÖþhµ˜õ›NÚi™›”p¿}ÛNCÊuad1@ôiK›!™¹ ™d& 1rŒ@ôÙòÞëCmŒQ¡ÜFP$M#`çwÓÁ>Kcæ=a’ðKÙ¡Qw33$2 «9HÉ,Cc n}ªÑb¡i¼7l£zöÖ «÷¿º*Ì!PÍá™á `FîiÆR®žûûV5dj}—uظfƒZ ¥Œã=Šg¡j¹·DÒÛýu´’¡¾*ŠQ!šgKz<†ˆ¦Ò¿þp.÷÷¥ön)~Ë‘{‰Ý¡6úÐ<”q*®½=ú…CC»úº õ„›$ƒ\0¥yeî õ™6l„†‹V2tEo£–B˜¹GÁâ$˹E„¯)£2¨ôÀ,˜Á°Ò!Ò NšÏJ>@£C ™•ÖYcÝ»õ[.u©ÈZP/DÉ£žIµýdjæxϘz]O茶÷bÊù2)E‹Å;{[0ˆ2$Ð-kMxPK¡NCȸõ×óµÒΖ°Œ}·µht'ܺRGI‘èéVVÕ…Þ!I‰ŠDpŠ1o@wÎÁ4´<×0"Óiˆžƒ0SÀ”I'h‘s¶;À ›'Êbðå^{ +ûXka¦ ¸¾œ_ßÝáËÚN±ó¬­imY·¯ :­¡”)r·¥Â¶÷Å—²-ëëíýbÕué Ð$é‹è½“™DާŲ÷à¢dAêÄM=Í$% AeS¤ H1Ð$ÖÍ92ò^ÁR{·Ì½Ó"ªF†1EäYJÊc”A‘½Á-’4¨lÍŠ) Hx .’ÿçëxÞ^|«?ØmƒÊõÔo–) e¥Væˆìª5#K{Yö%Êñ~è„{³ì?_kïõr.jA§ ²è¾ÃIJ¸†‘:÷.3ƒÉÉn†ˆ„šµ5Ÿ/o¯ròVœRŒ®R&okÉÉê£xÌ ¸îuíÍš[ì­8Ü]E!p:žBÉsßÜLCDÒƒnÈHUæ¨OOÑîTØìqcé(&_J§iUϼï¯gÆ#”mºA›AejÈ#S–ËNˆÝ£=T ’§µæ›YÕH !Œ@‡ƒ9€]¤ah6g<¼½PRF†®a¤Ï*‹¹ºn³ùˆ³ºD[J0È¿Š»Ðî(e6IøìÀÉ4f´vtMرɑÓTHat™™81Æqš‡‡ÇaŸÃY¤)vÂÚ‡–³oºÕÑòäh^¢­6ÛOÒ¬º‰ý´PeA¬ ÂØÍgfú²hw«kïªf¨T·bm†2²Ïv$“PÝ¡à¾À…«%Ýí0š h0g;×q=GÛâ¹m'o˜A‡KM£–}EÃK1|S 6ÿ[Ž\2Ì8ˆ¹ ý(þ–PR…+|¤OÃN[užžÖåF*ÍÏ€2óõâÍã[Ñ—™p³| ÓKžº™ëã g_an„¥•)õ&$%ÙÌg¯•“4GÇ‹mf@Ž˜È0RÕ3"A2Ô)³Þ–i°Aûp—ï7ßW §Ç”œfIe‡¥ƒ¥3P0¿*™Ó*'æÛš™S–H޾*AJ"£$Fövä#9ü½ïIáøÖ‘JÕ÷Þz¢õèÁ¨ÈWë± Ëâf‚ݼÆÞ³%È ”¢­s¹‰‘¢A 3jþ@)OÊ[ŒŠÑÖõ¼î÷=§TW 𙑇½ÍG÷1øö%–G{òù™5 sc®rC9ÊR§’^v4• Ř¢÷ÙGb¤dis;U,*ò¾méÙ<Ûk E3|€BJ͉¼Ýö¨Hïf‰L÷®vÏUû•̰Ì÷k«š)CÈ`æôW™ý*rs#¦W 3ó(’è˜:03ZÕÈr~òtÎX3;†Ö¡²`Nà3hqyë%³”£S†ÕÌËÛå.‚ÁÙå…3TÍaÀ’lÞDÉÝÈ´ÙM9m¬¦rÒ ²”Î2,;j]A3ðÔ² º9µp-³É,ÆÂÞÒ‹ƒföY§óˆ<åü§<=­QjvwH& éN¨sv9Agæ2’NjEŽ˜ƒÍ eÂ|@b)Ô}Û‡(-Ge*ß#àG‡ E-EkÉ0;,͈™L…Ó .J™Ä)5PÀ˜øLˆ°ÙÂ,%f¬”‰(H°o[õŽbX¯€f(EfiËê¹Ø0F ¡{øÂŽë°´²äXžñ–+éÐTÙf˜9 @(P$‰o„R¤ˆÌt&•­«Éî]mÀ,ããž6Ú ™’@q–û©ÞÍ‘â¡wô°£3õh~&D?T€Ì]KÐD)Mjá‹e/D¦¾gà™èPÙ³}ýí]%jŠBa ™™‚ -#Gbû”Çå±P0SǦ‹1‡zªß#Ÿ¡;ÌàÖÊâS·uz¨|À´5[MTwè²ÁÒð¸ÎIâÀßâ\ó4m„2‘,ÌH‘„*¸€ôb1²Ú£âtF*ËjÙåŠ5ež™‘V,SA#@‹ËkÅ¡0DŽZ ¢”I3–r©û­•â#sìƒnSJm§b¬®æ²Vh} ù¥Ã@†T`Ú†]ÁÜïIÐ )­Ê Þ]a˜PT¶·‚+`æ¨E(…2Àèd-¢12C™ž¸4B9½”ft9@™ŸAXxÇ4†KZ9’"E''bÃü@~tÍÁÙï)4==ˆìêaŠƒ 0 I`Ëüž¥2!óµÆcOŸ‹„# ¸Ì„RVIˆøFK+ó~ÓœÒGw6iž%A”ÕÅ“¥N_+©æó£¥SÑHM\«€ 3”’œ¨)%æš È )d+&!ÂÜ!jI?PÕTÙ“8† ;I%1(™¡ÈZ1*"”Ã%‰Ìp K)€áåGkjRH|ÄR"ĵ0i&`TãFPÓC R$"J~ŒðGž™–C)P‘c,]>;ÚÓ}ö—JA‰‡ÂM$’DÑŽ–ÿiGά±+ #Hœ¡Ôöœ]r’áã9Tâ¯ÄÔ1/d†îFÊj™œäÄðHðˆÞÁ¬ÙR=˜3dÜ(%˜fÈî¥g‰ !ÒŠ3B Ò¡‚¤)ëHÌy æt;í.·¥ŽÁc`¥LÝFõáu”£˜U„„TL÷ðYD®|!Zðãxì$Ä1Úbé«ca¦XÈålÎöñõ!žp›HO8à?…EÍ|5‡ S$‹Cª¥íÉÇrÂXçF±öBÇ9‹ÍA)ÎéxuöËûVcÍa«÷p0:¯TÎtKm¦ùRŠ{z(o:ù7 £ŽPaÅsöÆQ ‚懼f(òoüO}ÜÞAÒè–ÅÌ2]Å1ÝV™9·ïCÍ„™+Q¦OµÎѿ͑5‘T7æ3ýõdÑfÊ ÌÔ&9¿.™¤2a…d<ëÔ±ÞK¤W‡—Þ’Ú¹§çŠƒ,Y‡•º8û*{£&˜D£lašcÐ¥ ÙÁVŠï‚ÌP0Ï޳– ÁÜeÚ£¡?[(E#{ëG?½Òyä;ÿ߯CД3GòHm ÈÞ-`Ç9—TBæm€BŽ-¬G€YĘ(-AÛ:oé{Ž^¬4%G”h¾v9éæø01"(02{—À‡×! ‹ Rì @·™GD1\93^’@9@t‰r¬_!‘+RiàiFeënf…±X*àS§Áü. òcBÃÑ^™¢Í’`$L3Óª{…r̵RQCýòRqí™ÔØAª"à®)™ûÈ4¿e¼Wϳî^­E-á¥b$0wŠPÒmÔ®5Mcû5÷|Û—ÓuyýF¸C0Ë ¬Z(Šn%#Ý÷â°Ê„RóÕ² %Íù]3&ÀBxáÀºæ S¬5 ”‡À#½.Ú>_>Û¾oîkåçS,^Š7?b6-gæAóÙ—‹<üÿFxà+3ÂhÓåÅ'1UR¸ót}³@`d7A3¼|W3Éã.~÷ìãöSÁ¬GÇX»DÐ=s6–¶HW"§ w) Áj‰œ¹«f~t¼=„"ÚÉKÏB´l-™ˆ±{T“¿Ix©cΈAPQ¾£Üá'[u˜@Î8}"ACšâ¨ŠÍŸgFdXİB|„èï?Yx¨A”¢þŠºæžKÉ´â\r±¥à„0™DâáeÆäI€©Ô¬8’t D·à¶y1SÐÔ¿å„njǗ÷–4ëC ½Žmi(ùAtf¡„Õ šióÿþëCm7ÉÁCÚêùýÃ$dÜQ\tLŽ4 d纚(ÌÆôúÃáâ›æ†0ÏtiÇb}Ðʨë¥íYJ×RødºË"‹@™ÉËÜFÁyü˜2*áLD›Å¼”êäÎû£E-^åé̺\oÇs0+4FK÷°2FÀ×Åi–†ºs­¦ð›ÓP†Ý?„d5$PªÓ,Äéágq=Ó$à„â8®ùI’þ=ÿ8ž5Î(1Jñzz?ã,!óé‘ä ÙɦúÏŠ‚î(Æ¡¥ÚŸË¶W ž”µÖÌŒ1­Á'–ŠàéÒ÷´4Kº×:“¨–©Sä|L&¿ô7ê­I.‹y ñ˜5UÏ㞌ˆd³À dä¬hòe_s‚9×I)*f ÍþÆ’]©I™ZZj1r”…¥–H©kEšÁ»æ*ÍÖ–˜yæ$úsÞÖ¬î$b”5„òÀÞt”0f=jÛÉ‚FWÏ5NJ!‰ÄˆÀÔ×S–ˆ¿Ñº p¨GæNôÌ9K-2éÈ9²â¯²Bš{F*E«5ÒÉcÈ¡7Ô4»Ð‘VéÈØÔÖ¶=ÉQ„gh){Ö{ ×HôtcOÓÜ 朙BJÛåÌ”ò—º·S鑯Œl@GÎ’‚†˜ƒ¥ìqï·VË cŒѻɣC,4(Š0÷ã1ú€Íß— ¨3WÚ÷kD£&ÉÝÛ±vw^ª'S-¸,6Z!gNu¼Ì„Mÿ³œ2NâÔU’°š Òÿ7£b½kpe˜¡Ž¯w 8¬Ä–E·òŠ©ËžÄ/kÉP$+e‡Â9cƒ`F%ÊìÄ>²mPÐNf šŒ‘ft[íü»ÓB¥¼\1ä¦Q襚Ù¤º2C¤Ìèù¤)X‘¢ÓÝ™’¨%z˜Á—¡È„Ù(«Esf$cbÜyS¨´£¯lVì û`(<¢ª‘)3ÉÊâD‡¹¥S™J[Ïò³jr¯>ƒ<ÿf§'2’ýÍÎ99l3 ­`p†Ñ ¿P·#뤂´5 #’Ó…>®CŸ'Gm+{ÎÑÃ] ;NÔ4ñ¡%12î|@3ûüÎLç‘› €8Ž×ÓŽÄ(œ4þõ¡)Ir€©Dò»ç˜ª6y_Ûñ" (ËtHdoz6_ïù}?ØñÌ$ÝÂh3ff‚Lů’žÝ=nó¯"•šù9Ž”`Ï:CJRžpWæB`&N¡,°dè” –!)c2ß9±Á\?¨¨œ]Z Ž1¦s±F"™~¯–´A7s r -?ö2eÌÀ„ÊmB`*r[f¦Êá6g\dËÌ÷îÒ’™%÷ÍÝ`˜™;ì¨!N û”Mç:ú$fuÆDs`#AõY÷ ˆ£:¨4(Œ“Ì,Š$ŠÏkøa‹¡c& Wj –L ]¬R!#áÄü[³eu¶4+È>Wˆâ1™!}¾˜Ç6aÆ9x"Hw´Z–|ØäI@š¹yF±‘‹o“¤;”Î&9ů!¦Ñàq:’óõ1»Ë$“•c¤¬+ÉøåÇ5;@ë¼ ™Ç?Â,3Q–þ±X&Òžùìr©âjÍ8ÚæÍ8~÷$aè€+ºu4)d^ª!QMu˜Žä!„¤h®ˆT ™¥ „’z—!£ÖË:HÈ`3<ÎÈÄü`ñöÆâ3B)„:3³ujD'ÆÙgÚ&Eƒi¤œõ”Ïá#3 *¾_CÑ8ùm¹QÒ|6oh2*3EãǾNÒŒo5sö‚ Ù=CJÒ,‡KedOZ2IÝÑÜ#N‘‘‰!) òæâŠ bNÞ@Ë9›&ƒ0ÆnŽ%ÊQªF: "†ÁÌ)¹#•:°!Œy ’F;¸ËïhXtwÇÕP¦IK°{t©F‰î]@ªÚq„&'( I |¤,à¬ØÏñß„B=ip¡UQ™ cíqd7¨2s²ƒ!Šk ”̉nó` $Íhdše25‹3iZîvHÓÓrñ<šÛ8Œh‡Ïê¡áƒÜ „ýX”™D /†¶Æ#Çÿ I¨j2\KIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_invdistweight4ma_equation.png0000644000000000000000000000330512026411577025157 0ustar rootroot‰PNG  IHDRÊŠ pHYsÃü——ÚwIDAThí™?Œ$G‡¿êinkµ32‡uxGÈÒ Á -Ⱦm$‡„Dˆ€ÉŽ1¾: g¡ƒ ±Ã^yVœ°î,#úö´¶Ü³;öõìöô#¨êžª™éžÞ^Y—ð’~õ^ýú½ªzõêŸ:Ò?‚®HNºCŸït‡~©;ôóîPéå PÕ9$ÆÝ­~øLÚz…qÝêý¸;Tu‡öºC‹îÐëÝ¡Óîм;ô¬;ô…îÐOºC7;@#󙵃Æ_æ†VPÑÀ,ò­¶ËþçÐK|áZA§à5_øçVÐSv|a¿ô€¦PXaV+5|=òd[öûº6ßhd÷‰-ú:­Í»…z³Ðžh¦#àÂëÖœ0Qäý²t¯d®ùÄðuKsBAj@©»'¦øÍúÖñÐ:ì,K#öýp5Ne¶"Î7„ó›¦ôµ:«J£%ÙªYj¿uÐ܉»beoÔAoÛKÒ"Ãÿµ!uµÖɽˆª×¾_݆ïÈè‰dK©ÆÃ fŽ|_5ñÔžšeœ_ÊßòˆTüèrÐÀ@óèr0€Ðøé±/ß]¿b»iL¿:}µWëðÀ;°¼õ®'ÛMލa\½1°¹©ñH7ò~i·Ò÷N ÐÉŸâf¨ŸÑÅ¡~+þÝŠL]K&†‹} ÈÞh¾*µ ÀávÛÃ(îIÄ/t䮫 jaÏëo›J› KRÀøÈ¸ð׫¤ÚÚxòôÃïƒ?C*«öX“kú£ë‰=ÂÝøh¥Õ€hêy|ˆŸ%{Žò¼‚¾|ˆOÃj ÕXõ7Üæ„”i5)vœ4,"’È8›Ž ?NÙˆ]å“Êê¨û¦EŽM§IÉ6]¥âÈË›Ž’ô–rCÞm·ÓÖU4?ì,„®;µÌ,žo 2B p<Â6߆)à0GKK×*röØ Îà=ÙÞv”“ÆU]elÚ†8[ËõóFÉx“ÑÐáv-•Œ?Û@žˆ/ ­Nùò²ð\3T7è6ǵÜÕI&ƒEÝ_­ÊÈlìR€™³ó[ïðüü[€]‡×Žk²ÐóƒiM[3Ê%ûÕ‹‹ÊƒF«S³¢*'K7Gy£ÕÇ2ÍwEä±ä=õ(ßõ”ë ² ÚW#6ߺDžêIã¤;¾Qr*]Ú‘=i´zH »’”Ík÷êe±æË•úå¼´ÐÇ7={I€ºèaÛ<ùrÏÓÞorؘÙW#`9‡µ ÚY}…´xEÊ«s_s™‡ í¿Ò<ÕE¦""O}M«GyEã Šuo’ç×V±Ðâ)[É|º¬dáJ¯¾k¡“•,ÀçëºÉ¹‰ó/å_d[ÿPÝç“îЧݾ ÷3œîÝT{¹ž®ðLýŒºénz&§ÝM¶IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/raster_xscale_yscale_xskew_yskew.png0000644000000000000000000001656311722777314026134 0ustar rootroot‰PNG  IHDR•áý¿sRGB®Îé pHYs  šœtIMEÛ +;ΈIDATxÚí_lZçùÇ_¶Æ¢Y5³ý !™4ÛSÃ@-Vª,L]eW3ÁÒÜ©‰ÖiØ2[âUZ q/*'š¢XÚŒ­IN²dÜnZ¼M&7v¡«Ý+çbÑÂÚ.Œ«Ía µ^5 ´^ð»8øøÀ9ÀÎáüû~®øcþø=ç|xÞç}Þ÷5”Ëe*äshüðÀ_àððà/ J¡0UòöÛo¯­­¡üTÆãdzÙìoû[4€¿€ÊˆÅb„­­-t!üTÆêê*!¤T*¡ à/ ¾Î#}]HõuiÐ…ðP_ç‘]HUviÞ}÷]4 €¿€Ê:4kkk¥R -à/ ¦Î#ºþ*î<Ö Ê€¿€Ò;èBø ¨µóˆ.$€¿€Š;èBø ¨µóˆ.$ÐO¡ 4F__ßìì,s÷Ö­[컄\.×ß߆À€ý‡4~€ 8ÄýGг¿VVVÞ|óMä_ªŒ¿æææ666ÐômSH ƒ!˜(Ô{*œF+øKr¹Üèèè•+Wr¹@˜G&(BHh#Y+°Br#D¡\v´€¿$duuÕf³­¬¬à´ŽÝÅ+0Z_¸úð—ÔŽ»\®ÝÝ]‰ÎVÑ—ÇiFø«%ÆÇÇ Íç¾ðñãǃƒƒÈˆu,0è À_í‰DÊ͈D"ÜšL¦{÷îy<Œ6接êÓ17ôà¯nâóù2™ŒÏçÑhY`Þx€âߦ–Þöè À_Ý¡¿¿}}=‰X­V†v0;=Ç£õEMŒ@_þ’˜™™™L&ƒ>£h«è uþ’’ .ìììܹsÇh4¢õÅXúºDúɽ…DÐâ*Užü¿\½E)—B•*Or†ùÛñ—8@^¢G`t)>Aô’þzÑâ/€ø (¸y!˜3à/©.0,‰ eë¢èÀ_@¥Ç˜;„²/ [°þ½:½E'½Aß þ*ÃҨܢRó¾â/ "Ì#óåò<Ú þø à/€¿ðÀ_à/€¿š‘ón{ˆ¿ð—hÐ ¼@Ÿ…y(>ÚЋê”è¯Êº_ôò쬪Bn7I•Ëår9EùèMÚEºÅ…YK¼¯mœäx¥ãš»@‚Œõ£â¯Ö±O–¨ò»'ié Ì"0€²ü%Û,_P‡¿Bûyæv~?ÄÇ@Ùñ—¹’³O‡~ì<ÔÀáá!þ"„âž}‹Á`0™x‹5°¶¶6::º»»‹¦PœÒúÆø£¬¬¬ŒÆÙÙÙ™™4ˆ~û¨”R©ôæ›oÚl¶Ç£5à/ÔÇîî®ËåšžžFR þ@•,..Úl¶ 4…Œ 9¢õŒüW3ÆÇÇWVVÚ~y4C3"þ@"‘H¹‘H„û .looC^zôr@½Æ;wîloo_¸p­¡G½üòËÓÓÓ¹\Ǩ dz··‡* ]ûë¯ýëýû÷`1 (* ?ñ­MgµZ>|¸¾¾nµZÑPºö—Óé¼zõj©TZ\\„Å€òñù|™LæòåËh å çàT.—(•JLNáêÕ«7nÜÀ›˜ãñ—è [­Ö«W¯2 ¨#þ¢ã‚šŒ±â/¹($‚wˆµh0@üÅ®š© Á‹Tà¯h4J߸qã†ÑhäýX  D Ð7ê…`°@¡þÊf³Ìí!,Pœ¿®_¿ÎÜn‚Ábùkvv–}WHÆk1Bà¯nÃä¿Z ÁØ{á…p€¿º wý‰–B0BH$ñù|8„À_݆» RK!äsþ6÷A!äÓ_ƒƒƒÜ…„`Ï<ó ¯ûð—Ì4Áz{{ÿóŸÿŒŽŽ&“I<à/yØÜÜä}¼AÖÛÛûïÿ›’Ëå 0 æ‘ùr¹|4y;6´ üUMƒõïyC°ïÿûŸÿüç™»P@6½úê«õžâ†`‘HäwÞùéOúå/ Ý&6Tà[UÈHY&ô“'O˜Œ½½ÕÒÒ[a„³Ù¼··Wmµ3hFŠ"„*ÅÜ ÄóhÅ [üµ··×àY&«)•˜ššbGa'Ožt¹\ýýýøÒA¥*É0ûdŠ ¹cˆÁÐ\[[kü7nÜà­óbvòäÉoûÛ±X GHI ÏÂܶôHæù|¥ óúÑm¿üîÝ»ï¾û.ä%u;ëžtذܗŸ1Ów ‰ e+KëÞ_§OŸ~òä ü¥x9ÈñRø5:zí?6Îu{eD:Ç¿\©K‡þ€Ç yÁ_×®]“âm½^ïùóçQTÄ#÷ì[ ƒÁàÈÄ{¡ÿ(U¿Æëõ¾÷Þ{ÿýï­Vëúú:¦I¢ÿI‚èraäEPÚ ü%);;;â¾áÅ‹Ù³Ž 0à/©÷ kJ[¡04¦ò_„»wï¾õÖ[ü1óȳÏ>[(è·àù/€øK|ÆÆÆ¤xÛš(Ìjµ& f©: ëééÁ(¤Îã¯ÃÃC“É„ë\«<%× HWÂ:55Eùæ7¿‰ ݲ²²òË_þòk_ûÚ;#Ö@ü…¸ñ—jÌuëÖ­l6»°°0==ÓLÃ(eÿí®±µµ… F6×ÀÀÀøøx6›¥—`BŽøKr¹œÕjíò‡&“ÉÑÑQ£Ñ¸¹¹©“UÃt11óÈÂÂÂõë×q…Ã_’ðôÓO‹ÅîË+—ËBúûûu¢0Íû‹k.BˆÕjÝÛÛ3ÃÃÃõvŠð—j®«ÃÃÃö¦!:Q˜†ýÅk®šà iVm#[þ+‰tóãL&ÓíÛ·ÙÕùÙlvxx¹0•š‹ÉsqŸeïÿ"Q™!P r-¼¿³³ÓýånÿÑßß/êö)ŠÙßuSŽ7Ñæþ‘H¤iȼ°°€-°‡´ vÿCyçH†B!YZ 6 ØUœ˜‹7ø"„  éÐÔl…<<¬ð¦ã‡W_gõ•owQÜ•ÛuÌÇ’Åç Ñ ›mzŒÖÖÖ˜3½CøK4¶¶¶ÔØ^=úÊW¾ÒÞˆd}‘ÂA&`ÛŸSI FÿRèËëõ~ãßض§iðE™žžÆE‰ö}ôèÑøÃƒƒƒ¶Š*êê+¹"Ä5„öóºÕ—×ë}ï½÷>úè#qkî”Vf4⯇ªQ^ÿú׿H{ua• b„G_ÔĤì‡TPþͧ¯Îów´¼è:/qkîXf´à/Õ-lòüã³Ï>cî ¿ÌÒaƒ!˜H'7B$÷Úy„@¹ì…IJ_9°ãÖª^æïØò"„ôôôœ>}Z¬¸I™e†@Qþª·Br£ú¯VWw’ŽªóCn‡›Äó<Sùýñ; ·-¥šðÛbØv1_·“üW^çΣK%DùªŠ-3¢ð”obŸ,—'[|Æœšš"„¼õÖ[ü1£°—^z)•J™L¦öZ§¶“óÈ|¹<Ï“ÙRñ€c??OZpðÏþó?þñÒÉ‹(»Ì(»ÿX Ëø‡­… )? 3™L¯½öZyiŸòwo¼ñÆóÏ?ßÓÓ#‘¼«ÌÐ<2â.ø«q9üx¾^ý½zöef2™~ðƒ,..êùê$g4ßÿýsçÎF)äEê”Ò‹NT~W+ËIb¤:u7Iº´‘¦²"§V÷U]ZZúÉO~¢üïÙA; ÚF—žÎ9Þ-lÁ[,oܸQ,»óï³—‹¥ïÑ_/E5=gV÷¯­üˆ­Fr|V×Eí ûNMMé<ò:Îßu¶t´Ñhœ››¶!„§Ì°ÜQ©£/[Hn„*a£Ý`þ£.ûé°eÓomC­&VK¥Òîî.N,Þ–Y]]íò‡F£Ñêòì4K_@¿þ²O–gÈ\kIa ûªï}å•W†††’É$Î-nËüèG?êò†²Ó¬ùýPÕ}vv¶Á¯ìÑùYÓz÷WÕh$ÿy‰D4Ö”KKK5 O+Aaòú‹+¯žž—Ë%Ñh#—'Ožà"×0úï>ƒl-wïÞeWçÓ [__—q°BÆvf¶Ôdv¥“¨HµO?ýt±XDšùû&ÁªR{zÖrýd~×ÎànÂ#™Ëå¾ûÝïêóÜJ&“ÿûße”íÐêêÏÕÅøºÍßóçòñ@ý˜†{vG²¿¿ooO·ýÇX,vêÔ©îw…¥)RAÎù¯rŠªwÔ†7±ª%…}éK_’]^JÈßÇb±gŸ}Vy•Ëå&ùG$î‘ÿ"$6,÷ñ-C ‰ e‚¯6[“ù/6¿úÕ¯¾õ­o‰½ˆ*óŒ?v:²d üû…DÐâ‘@  ÙRغC•ˆrrAˆ‡G`uŸ äôéÓOž<ÁÀ8‰,ÿ~:lpø Ek+68ü¦×ü½yd&NÜ–št}!´¸I|†F‘nö}ôè‘&«óK¥Ò믿.âÒõ¢°¹¹Éç®ÊÚ(aÙ'Ë)ÊïÀzÍß×”Vh˜Wðù|:ì®ÓùìnÖ…u'ÿE×y8qB )?6Ñh”ç$åÍÉb ½æïU™W–q0Žt±´µ í\S¤ª(…qþýUßQùxþÒaþ¾¾·¸är¹çž{îÓO?eéNi«Ôù/n‘ê‰'¾óïüáPB³£~ù/A°ëU™%-ÔêJ^´­îܹSSÚ:::ªê\o…ý‹/¾ø›ßüF!ß“fEý*üÅ¡:2GÛë¤Ã·­2ÁŸ8êš\?§1¼ÕùêU˜¦5åþýûœÇ޳_ùx z)V G’ÇãŒém?³¿iƒ5-õ¹BWaÅbñ÷¿ÿ½þ5Ê‹rëÖ-\äðWcòûÇ»<2‚–óù|úlq¶ÂL&“Ïç»}û¶ÿf÷žžžvåuœih ±öÁZî?V…bìyóu7ÕºwïžnVXoo¯Ú·/bÖŽ¼ ‰`ÍþÆ!·El‡é¶ÌþŽÝE…ܱ4G_é°£î¦ZêÝ?M,…mmmi`ZaíD^s¸JQ„{NLƒ]»v 9üÕL`“ùxÆQÙ€h¦’Å7Žsú\r¹œÎ›^3;˜Æ–s^é˜;DH žgÍÙ±OæãB*?…â°²²‚‹\ËÈUx¦íõ':©½xñ¢ˆ¥­bâb±xþüyféúO>ù¤“è©AÿHÁSryshh?Da„¿ýíoîBï¾qóæÍ›7oJ±o£ÑhôxN Ä_Œ 4 ½bê?ÿùÏ>ø€^u‡ngúñt:ý½ï}ïîÝ»*9Ö"Ä_8ÍI‚\ ÍËëÃ?ü裆‡‡™(ŒyüÓO?ýõ¯íõzU‚Ù'ËÉ‹‚Îc—YYY\\\ìÒȯ\RŒv霯ýëÜi@„š"Õ/|á ?ûÙϺùņ††677qšéö¾N§saa¡ó¹hRׯ¶C³…}AËüøÇ?~æ™g˜»Ùl–ä­Ù€ãùçŸã7tÒ&(3”‘d29===00 ]D&›¿š-ì Z†[¿¿¿O‘®Â^Ýœ™lþšÅqí‚Ât(/‚m®ô‘@÷~`¬Ö+íú@‰Œz{{Ïž=›H$N:%Ñô $ÑAƒü}cÆÆÆ"‘H»sËäž?¤îHž9sfhhÈd2mmmõ÷÷ËØmÄ$ÀÖ–×ëeWSøKË' }ƒ»Ñ,ªÖüP«¶°ÿ6à¡‚‰ÂÑÝtØ`§…¼è˜š¿g=Ézcépí3…Dû©ÕRçÀüÚ¢s[ÑhÔçóI$/UúKÌK‹{…Aúùú×Ií'¦Ã5פ°¯¤hÌ#3q⎥+m²œ‰ç›­°›[Ü6fñ|<ã8n„tØ`ÙðTVòJÙÜŽÂ ‰e?EÙŽ>²1ÜÅÊ[^þH„Çãé‚¶Tì/‘/­yY6¨³}bƒ–äüIUÛñ¾PÀ»ý Îü—}2esljå ë'¿.–¾@õï½yd¾¶Ç‘$%lµó9Š ™@Ÿ…XúG!YzÛð8ÍZø-µ{ã÷†gFH«˜GæS”ßÁ“Ê„£é˜›ÐÒî¢BÉB“Ïb>é/½ó9]_ZÇýF‡ŸJqº¡õ®»‹ªô É âqš‰Ùé!ôuW8ÈÛMè‹’!"À'̯ ·Ñ-'P+lãÛ]œ¾¥€üÒ_ð—^/­ÌrÐâ¶Åã'©\÷:±»* ¯ü~ˆ–•ùŒþ6ùýåÒÆå”Ž¹m©rJ`R½¶µóñ?³ôXÙAže? ¹-•Ÿ‡Ÿ$Á€¶ý%Ò¥E!!ÛD¹<922'@Vú‹émÿ‘¬*Jc=¢öà«Ò;·{ãGÓHŠ;æjvzho™žš´<{¹ÜUÿNT4ç/Ñ.-B9Ò =®iÖç¡û‹i:ùÅRZÕ#ê¶×ÜѨãñHdãþ|ÀÏŽ` ‰¹£¤–yd‚b=—[Ü!ª2¢™Ž¹kãUóÈ%<²úF}C   Õ -Òwk³XƒhÍÆ¹R ª†æòñEQšz*DâÄ`x~þLÌàðB¥Uõ¡ÿPL/’F ½Ð(¢éeFÌx¦ÂÀ_cvzhµRA 䧘«d¯CÂçÁÀ_ùIÇÜ!BñT<ÀŠ„¿Š·W˜®›±ÌÄ„øÂ&òÁ_Øë¨àË<2A¡ƒ¿2RH,ûIÕ c¥ UˆÁà/€Œöš£_U )WŠ)𝣄úU€ZAü€¿þø üðþuòÿK »ÆM|IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_asraster01.png0000644000000000000000000000314311722777314021753 0ustar rootroot‰PNG  IHDR–– ßÐsRGB®ÎégAMA± üaPLTEÿÿÿʯùó pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.5IŠüàÇIDATx^íÜë’ƒ àöý_z/* ’ ‡™ô×Î,àç-Uáóòù¤Ï”澟‘f2¦ö×PËݕۦã¿ý÷Õ”˜Fd;$']%õ»®eéM]¡éX½(u?Ó°FPJ˜œ5ŠRÁ¤¬(LÆš…Ã$¬™(!LÀš­’\üYÖ|”$0Že£bcXV*ÎÕfÙ©W‹e‰b:Xƒe­jF³ìU ÉòPÑ.Šå£"]ËKE¹ê,?᪲kuXe\EZ˜¬õª"®œ& A•ãJia²0T)®+-LŠêŠëL “…£:ã:Ò ›À‘ZXÇQ {øÎàiIwëÜÙ·¼6'Ý4Kº~åþ/~›“n ˜%ÝÏr¿ÑssÒmKšÔ_¹H+ÒÒ$ )}K—–¦t”"H Ø-4ËXŒ äYÅX^“U¤iéДŽû[Š´€o»áÝ¥„¾Ó 7´‰GQªó0ÜÉãJî :}~(,þXiÅuLH…~kç{ñœ½‹ýFJ\×Tgð·Ý0âJóÂÑߤDˆ+O¢‡Kw}\ÅŠøo€¯Ž«\ža‡IK·µ,¶˜P³®{=ÖýxÍ!ã‡%ž«‘ì2µmI·-ݲʹIÿn_Yæf£)¹¾yU²J?È^'¨ÅU ÚfUE.tåŪ«èõ·|\„ª±,˜‡‹RµV+³w‘ªæ"jÖ.ZŬíf k È DúÑmkªØ•ð¬XmË2P0*žeñMġؾuÜ1œüáU’´&Ã(YZ3¡ä¬9‡RˆÒ°Æab”Ž5S ´¬~˜ ¥gu–JÓß6ôUt'fgû}Õ„¡õ7Þ]“• µùÍ•«»:ªƒÔ-É VVË βqlcÃ`f€¹ƒg ë®aw`æÎ. ¼À`Ò`26ðÈØ²dË’Z9t«[»«+W½õÆ“ÏÙûì½ï5÷®óœçìç<ûù~?_øË¿ðo•R›››o¾ù¦FXTc @`Œg§gvíÚ•e™RªÝn7›MÏó8çq¥€„jŒ*Ë2ëo=§õÚ˧î;Ôô؇>õpw¼ºre‹¨Ö³Ï½±oòó?ìr«Ýšìõ£zä­Sg;“í={öôûÃßøÕßüÀ=ò{_úMŒ„cqL™¤ÈE#pÁ„AÆI³Ù…Q–Û›}™„á¤(ŠÝ{r‘w»ÝZÍWe¹oßžv³¾µµÑ¨×|ßß\ß8vì〆aQ¾ïSJ !B€(ÍââÖ•ËK•VTB庪À«,‹ÝÀQZ»~#ËE(Žcß÷WVV´Ö”RÎ9BBèºn–e¾ï×jµýû÷cŒ›Íf–e€$I!Œ±4Mó~lï³ß{ ßqÇQÎX8Ž”¨ò"ñ¿, ˲cÁ0B‹SJ(¥œYªRqÇq\ÉAʹÇ !duuí™g¾ûÂsÏÙwpm}K<9»ç[ÿú̾ý78Žóæ[o ©^>ùr&eÿìÏ}æs¯6êuת}ü£Ÿlo¿xò‚I­ÖBR†ku¯Ý ”®0†J¡D+]UlŒÑºª×ë„àF£ê2i’~M ™$)£lضͳïœÞ5¿;ŠbJ)„ (3Œ!B Èв,«ª²m×¶¼Z­yåòb”¤ã8¢–eiŒZ^¾v㇦gÚ¯½ú~ï#÷moo¥&&:EY"³4e”0BŒÒɉI]•–eQJµ6B!d’$yž[6Ç„B„µ6 £pÔh4Ê<»åÆ›V·úÜnu&ö0îðCZß\:xpï½7àÜ|ÓÍ–]µü _ø±‡ùÀ¾ûÆ©7Þ\¼rmjb’Š LÓ¤”¥Í&FkBˆR*EŘå:~žd”bc €Æó<Íh4²ÌŠ*Ër]é<+ìÛpÿÁnwÛó<¥Ëz­5¥çLÊÒqí$‰{[=¥T»5!…ÞXß~éÅW¯\¹®¡T 0ŒâééɇNÜwåÊ¥³gß!qœÎÏÎBc,f×jþ‹¯¼lÙLVe¥ ¢Ùlv&Z£ÞvžçÆ‹;B¥ !„RÊ9ÅXÜ £Ã‡¾÷½ïMÒðÚÕ‹ÓÓäõs¶Ó>w~åí³§¯¯,}íþ'ò·þŸ/W%}çìå#ÇêïûàýþæµFßþ—§’t43;G™¨ J ¥¸î;ã°§·k×.ˆ gVžB(c–ëVBÛ±Œ1è8I<ßQF¯­áy^úŽË¨… ¹íÖÛ-‹Øþ ØÃ9·mžåQ–e–eNÂ8r3ŠÒínm½·gïîñx€Qe[’&qÍg {v㟾ns?þðµ °-kuuem}]+!ÆPL&'&\Û¡˜  „ã²¶m×juÏó<Ï•„aÂffç»Û½J €àÊÊòæÚÆäÔ•k›o¿s±Þj~úÓŸ¼éø ëKW.-noE‹K˃áÚ½÷ßš„Ùáwøn‡[,M“î ßžœH²hjvR+©uÅ8ß^e!ªªTU!°-®´¢”Ú6צÒZc ›†2ch1Â)ñ}7 Ge™{¾%c‚)!Ô²,!J! Ê¥c6G—.-FQ6'~-0@WUP²B­0!=ô1ú…çŸÇÿÈ–––ò´X__£@PUÒuv»555™$q¿ßk·ÛY–ÕëuŒIUU£ÑXA ó|×¶\έ²;—~n±ë‹×÷-|ý­³Gÿ½/ÿ~¥Å=÷ÞY¬£Ôæv^äN»Ùldi255Iå6Ç;®«•ɲ´ÙlH)£xd{|Ž–®¯‹²Š¢¤Ýj[£¡ÚsmAÇq‡Ãa«3qáC'_~é•W^é´ÚDêªÈsH ¤09Ñ9zøæçž;i3S–%2–ï8¥ ëõƒº*MTà;”ÒV«1c–‚Rf{öí][íÁ¿ùïøgvïÞ·Î\½ãöû^}õeBë•”w¨±D\8°ÐÛZqýñ0N¾öÍgï|à‡:ñÞ/~ñ?.ûôëwßuÛO|îÓE€*­GãÆ:ð[®k zÝñ(±˜ÇéáÇ“0ío‚ Q%$ÅD–â¾ò‡RJÇuŸxâ‰Ã7ÝX_µ(›ÇB‡ã¾6E.«aØ ‹6¿k¯eû]ïžC÷ßsß7¿ñͨ×Õ…{Ïw$qø'ògõzÝv¼•ÕB,¥e•ga–TZ9-çææ0ÆBF-а”ŠsJ8@ÿöoÿV«Õú½/ÿþŸüé_b ~ä“}ä¡Ó¢?¢f³“å±”åôÔž•Å iONuâ$”"×Z+ 6œs¥”åZˆàv»†1Ð*üÁ÷?ªt•Dq–eö0X)0;7‡ >~ËÌB©Ã‡U•šœ˜üÀóó} ñ¯þáŠuúô~ðƒ]»wö³?zÓ±ŸûÁ³_ùÿyñÅg'&¦&'§†£0'µíë×—“4Z"ÔF«ª’Q‚ ·¸å:':'É÷¿÷=×q)±ðƒ÷¿ctù⥹¹¹Nkòôéw(e¢……Ý”¡ ær QÊkµz³Ñ2,¯,£-‹sn1‹gYÒl4¢8š› ‚úêòšàƃ·qFçç&ZíÚÁ|ç[O}å÷þäÎÛïùç'¿y÷½÷ž9ûŽâÌéÓ‡öÜ53¯Ê‚aqE#„ !Üj7ã,×ÚDQlY†¨,$ÆÌbv½V³<BåYæk;J›4O‚a¦YÖh40Á‹‹‹/]zâ#ù·?ýÙ^¯ÿæ›§<×?sæ~?¼reyyiÍb´^ó PT•œs-U%•ç8ܱÞuÇmÍVû+_ùJ³ÙFaŒï»çvM§ÕnµZQœU•)Ja 9~óñV»‘—)D¦Ì…”ÊXIáûžm[;¯D(Á!³,›™žû7?ùÓO}çéù™Ý—Ï\~í•å—ÿóöÖ*Gô§?ÿ™¥Þé·ÞîÌL¶›­»Þ}{ŽoØ¿¿Ì²üú×1é¸ëºœq6;?G-š‹²ÑnsÎWWÖ¡Œ1×vâ(Á¹ŽÝl6˜Ejµz”Džë¢¨*¥*É™5ªJQÆ“$][[WJ½ñ¦"+.^8?==½°gáÒÅ+iš€‚ZcfffeyíûVžÅU%Æ3 I’Å~£öðÜ»timc½»Ùõ\ß¶]üØ# mnaŒ‹\´ÛmJ‰ÂóÜR”ƒÀ÷$õzc<û¾ã:Œ²z³¦L%Dž¥©m;ýíÑ÷¾÷ìújïàC¨ßú_×PMÏÌmmnÿ·ÿò?Ê,ö{÷=ðàsÏ~ÿØáCE}䘛~ãµWwïžÞê.I%„©¥ÝÁv§3Q)µ±¾•çåŽâX‰2œ©©ÎÌôDk¢U !+Y%@€bÇ€aGY¥Ue´‚¾_·,÷Úârw«;73¥”Ç {võú}a^ˆÑh43ÙêL´¢phÙj  Bææ¦šÖúææÅK—0áQ”ªJKQá'>üCZ+×qŠ¢°\Çñ¼ùùÝŒóZ£Æ-îxÎÔô´®LUUõF­×Û¦”2ƵѥWÆ(Œ€ªÀ›oœZ]Þš›Ùóö;çúy÷®îÑÿÁÿéÜî]?öc?zÿwþs?þ‹¿ø+W.œ›l5ÖW— ¨lƾøÅŸ?îí_{V £°Ý™äÜr,;N2UÑxhY¬ªD8û÷/`dZƒ(ŠµÑ–eçe®*Å(Âfc¢»Õ‹â!Òë(å“Ó¢(£p(DÙÝîbgJékׯ­+)*™j*‘‚)æZ!­Í¹ §öͷܪ´yå•×vïZôÚüØ#AÍ(… ‡q9®ãºB¨ÓiA‡Ã¡BH)fŒSFB"Q¹H<ÛUJQD‹¢J“‚P697õå?ûÝ_øÏÿçÄô,"üß“¦ùoüÖÿxæéï\;éOÿà^9ù|2Þvó-¿ñÿýúµkÏŸ|öÃyß¾ýû¢4m´ÚœÛZÆ,F˜VÆs¥D£ löíÛ»±¾F‘H)e1‹2R–#˜å9€puu=Š’öÄÄ8ŒzÛ}`P<×q+/rDZʲ`Œ‡a491a FÚ¨ ð£$d”YÌ-Ë*Ïóþ‘ºž¿=Ÿá%Ï«ÅIb;^‡ø±ÇN(­+¥ „Ѳ®kk­„(„,\×-KQi]ʪÈe<Ï ¡Qª?èO1'œ|áeŒÑ0ºu{k°öÇe‘Þxäp«ÖþñýÂoÿÆïÄñèÃï{ä‰zàÙïük²Ñ_èìÚ==÷«¿ú_’"ÎDòôw¾Û™œZÝØ|þä‹ÇŽßLBм »6 |{vf²Q«SBóLrf¥lÎ1ªRÍF³×´Ûq–RSNmÏõü`ßýÇ¡U%J%0ÅU%•ÒÝÍ-ßò¤¨¤Ò†ʫʸ®/R Uå2»ÿáûöúÖ“O;N3K«<«V766»}üá=.„(ËR)…ÙµkcÔ²,JÉ`Ø×Z·Z-Ï FñmÙF9Q–f ·èÚêz¿×[ºº´ÿÀ}è×®\ýäÇäÿú¥_䡇?ú¡üôO}aßîÝ¿ð ?Óh ™ùf…ÑúVwaÿO}æ3Ôw?óÓ?)¨ùù_øOo½úšÐz~~÷äÔ4B¨æû`Ïs)£žïìÚ5Ë8.ÊÜõßwE)lÛ©×ëEQ@Ã0œŸŸ¿téÒñc7­o¬µ[÷SŸ'Í´ÚIžì;°?ŠÆç6aÁišf2POOO cRªJjŒY‘)BHY–Œ±ªªªªBäyÎ\ËÐï¡VCF!£ÈvœQ$ªJކ›NC$„,²2Mrˆ‰”%""c9^–ÃQäØPèâÅ‹Y^4j®ãZûv Y\< úÇ>^…ÖZ)E05Æ@VWW•RÓÓSaÚ¶$i’¤v+˳ñh´²²< ,˪ª²Ì Š !,Ëòn¯‡j´ü¹ÙšÍe»áM´Úƒí0Ϫéé]y.\Nç×ÓãVͱO>ûÌÓßúæd38vøà·¿ý$†àè‘CqQJŒÑÆ×¶¹Ågg§(EcÁ$MSQ£VgÔh©*¡*É,n Ã(‹ãñ\#}ðàÞå•eB}´QJVÂh!„ÈJæEá8Žø­ÎÔúFwiu³Ñ˜Œ’êÚå^^”{wÍÎÏ69—ósÞÁýwÎ.âO|üÃB!„çyáÑhD)‰¢H)595A)MÓ”[ @£+1ô 4só3„ 4‹Ó4á”L€ãqØh¶ò²L³ä¦›J™y;æÜõ¥õ Ö|ãí·0Aw;võÂÅ[n>ʰY˜›Ú·g–êrØÛºõÖ›nºéÈù göìQÚ¸Ž-« cÌ)¶ͳh-EÉ£„–¹ Û§#ò,õ\§ßÛ–U†1Á˜RâØ–çò¼¯QsNŸ~{«3N®Ð¾ïú‡†ã„Pìùõ•ÕµÅåÕ­­P²¾Þ#M¶ƒVƒ·šœ³âß}á3zÿ#‡ÌàO~â#Ãá°^¯‡aØÛîû¾oŒö÷×®]|õsŸ}ÏgÿÍ{ã(þÒ—þ4 E½5‹X—4+1¾ëÎ[9çRJaŽ[­–eYiš>óÌ3ÓÓÓ¶mc€ÖeY&i¼CÇá¥KW›ÍfQd¥ 0!RIƒ]][k´‚™éé¿ÿ»¿ß¿ÿâõkïºí]xpfn~eµëA¿ßw\!Ä8 jžWk"ê¥BTA½™ç9·¨ã:JÆÇqâ8v§,KŒ±‚SfY¶mÙY–kмĄöû¥IP«_[\¾¾´B)Å–²È²Ì( ¥ÌóÌuœñh˜ç9£Äv¹íèSoœÿÜgýã?ùíîö¹³ïœ¼ÿ¾w½ïñ÷}ùËówýýñ¨4š4[ªª¤’i–ã=ñþªªŠ¢°,«Ýn‡a¸³»îÙ³gss!Ä‹ÆcŒ‘ÒÆhzzzzjv42Sˆ1HH#„¡ŒôèõÍ;n¿óáGÕJ?ûƒï?ýÌÓ/½üÊG?ö£k[þÕ¿8pðBmû2°?Ž‹B* kµ†6Àå¸6çTWrG•”RÚ¶ €z®[¥VZÿp a´ßïçe9;»«Ûí--¯H©ê†ëyQ8 êùÕŸ}õ¿®¯_~ìÑ/üàÍüÆ«ÿþgÿÃìÓÏ?ÿ‚ØIÓ¤À=ò`žç„cÌ×ëõvÀ»íííZ­–ç9†Èb<ŠÆEQ¼þú'_8ÙnM&qšå „‚‘†qÔµ6ý~÷ðÁ]Jë—_~ýÿùŸ>úÆ›o<¸÷øñ[¾ÿü+e!‚Zã™ï=½¼²¢lµ'ÆQ aœs˘dYê8·(£µŽã˜1¶ƒ$¦iê{^wm¤™† ”²ìÑ` ÌÂØb|ÆÔ¶!B!Q”B€RbqŽäœýªJí×¾øå/ý]8ÿøç?öÌ÷þzv¦æ9“s3GÍV³Óôl›eŠŽ"‘å?ôàÝcÆXQ”Ò(ŠÇaŒeY¶ƒVUe1ŽCc´úÚÕÅÁ`dÛN¥$€R"¤r¿Òr0ìÿÇ/þÜÙÓ¯†!b6µÝF«ùøãÕêþ¹óçÏ_X‡!çô‰}hzvæÊ•k“Ó³¹”3Ƭª2Æ„†1\Eà{;RJ%I‚e µá–µ¼±V a(’L•"‡2MŠ,®”B+¥²,ƈ¼LóBaYܶ¬V³A)-òœ3üÙOââùkK××vÍ·?xÏ='8ž‹#ë½^w»×Uº@*‰² hEñßÿèÎÉBaŒvºªª „¡~¿ï8N™•R ׳——–BeQ•¥t=OȤÐ$Id;¤=áßvÛMuÛºz}eµÛ›šÝµ¾ÙM³øô[oøŽwðàÑÿðG=ß™ß5ó÷ÿw­v§Ó™„˜P‹ajim¤¬Ê¢è´›Y–2F|×ÛaÏv(N¡ÂhÍïöûïºóŽ0ŠGƒCd´Ù›ð|×äK‹W'§§„RJL(FD%„‚9ã£á Ûíz®Ón7µïߟùþSËkK·ßy0g¿æÜùÅQÔMc‘ç‚1&+™&%ÂNøÎÛ[–µ#u[¯×ëãñx‡ìt:q{ž7ì0BišŠ8·£(ÃH04#Ì evàìþw^¾|ÖÂtv~`Çrƒ•õÕÀ³NŽ>²±º9èw³<>qâSo½Õ¬7Ò4P‹cL”ÒyšÕ‚šmsY6g½í¥T±Ã3rÎ…˜Í­a¾yæmÇu1„qoxp×Tf·Ü0süæcÔv¨åH¥¡nÛ¶cE!¥àŒ1J8çeQµàÉ'ÿñ³?ù©}7Ì|êG~ôÔ[‹_ÿú3kk£Q˜èŠ!àSJŠ²Ì²Ô"„ÄÜ÷î’×qœ,K!Fk­g̶¬JJ‚ñx4Ö@¤\ÇUJ-^[ÎóÈ¢ÐÆ@c²4r]Zœ™©ÉíÍáúvÿêâŠ2&M’ÞÖºÅP°]¢,KÂð¯¿A)£ÌÉóÒ²mÇuUU!1„õz­ª ËâŽmIY•e)„@ˆ¸A X[ߎƳ»g}ü1D©Ñ& c¢µÉ2SDxôÞqwcĬ­í¡Tš@ä9Ž2UUɲÌ!4ܶ´R˜8Šfçf¾õ¯ÿ´ÝßúîwŸ滯 Á €ŽëÊ‚Fy)ª¼(E^fyŽÂwÞ~ c亮”¦$ŽÂ8 }ϳ8ãŒR‚û½Þì®é\æZKÊi'˜°™©¹¢™N‚¨õ}÷Üý™O|êʹKW.\$e-hÙÜ’y·÷ï››šnßrëñ0jcÚi)¡T$¨5[Ss3ÓFTJ ¡ï۶ņÃþh4j´igY6=3§9·Üµõ­ Wk­ºFéòÚÚþƒ‡kA}¼Ý½ó–£ s,!Òoœ½Ð˜œ}çÊb.ªf£î{ aYV…绵zÀ-lj0/+B,›SÒˆD㊠c„ŠâØ!Mgcˆ¡¬Œ¬ c "€zðnJiÇUUavÖ÷$I¤”Bˆ¢(F£ÑÔôLœ¦e‘AgùÆúAt†y)µA,nßqûíO~ó›o½ùºíÙvczª“g„ Ù¨—eŽ ü`0 ’´ Ã@XU•ë;‚1B! áœcŒjµZŽmfÕ¸ïÞ»Ò´dÔüf8·ÛÂP•”²Ûí2Œ<+ÀÆq<9Õvö¡!@(¥ìmw]‹çY† ÄÇišÎ5wAè׌Ÿ¤%¥”P\U•ÒHÏšnMM”ªB'ý|00B›õÚpÔÇ4êÖ KE³VSZDÑØqœz÷,+Œb×õBTBTŒYSÛve™ãã7ÝÀ9ßÚÚŠã¸Õjm’$Ù)çp8t]w4Îó<+ò!˜g‰çºQ4^YYvz ¯_{ñÅ“_ý‹¿ü«¿üë“'_¢e:1Ñú™Ÿýì±›^_ZY^^{çÜ…Í Ëò¦1Ô‚‰‰Nš¥œq‹ÙQçyÖlÕ4Ð¥('&'ƒa³=¡1ZÅQ¨ª*‰"×µ i^"‚£8ÖZgif ê´Ûžëë2‡Y§ÇiZJ ìõzë+«žç`Œ´©|ß÷ü`8h¥JQØ6¯”¨”¨Õ}Îi‡Û½þäÄT’&–Mm×ÒJEQÌ'ˆà[Žq;Ë2Çq’,SFÙ®M-f q}—Ûœ0RY£QŸ™¦J“0mïž› üàêµ.ç6DèÄCœxð=þ?ÿjnvavfÆc`ÿù—_~þÌ™s×yüñÿÐûß )a$RÆé¨Ý©»ž]U2¤Ó™™®*é7„!ÀŠÛ,¥ë¥¨Ýín…”Ëæ£¢BB¬ÞöÐÄ™Û  2/JY¸ž»C¬)³$ÂpÐÝÖ2…H…áØFqœ–³¢Å0¢A­¶µµm ðü:!$pìÑxR%µÇ¡m9ЙøÐÁ…v»½“ÅÛjv,­5ÆØ÷}Çq’$®ùN¿¿íyîh8â”§qþ /eye;lmmåüù³/¿üòG?úÑJÊ¿ù›¿EÍïÞU…ÒÔ²ë«ý_ze~vW-¨3†›­†ï»–eQÊBk+kq<¶æ¶1f0QʃÈÔŒ&:“W®^ô†I’´›m£@œf’,Ëý>¥ÔulQ ­µ¸–M‚š_Y”ĔҲ,„SÓÓã(LÓR)Õh4¯^½ÀM´ÚV!dŒökµ#7©×›[Aô·û…(-ËG‰çú[eZ£ñ·ß¬T庮”BD!(¥EQŒÇc˲n½ùèÊêuÎèææ¦mÙ®Wwlobj¶?0†-›íÝ·ðŸ~á?v:)ÅwÞqàà¡ËW.×õFmbñÚf8N§¦f:ôæ¯Ø¿WŠÂó\¦’2Œ°ª7<„ñÖV·ªL’ F£˜Q¾²²¼°{ÏÂî…7_«jmc“PÎ-k0ÌLÏìhÃ02FýÀ±,ÎÕFK%0Ífö¡ŒTª,d·»]d¥Åy຾çUUA ü ŒÂ0Š£(fœ…aÔÛr‹WJCƒ¥Py”¹ŽëZŸxà®$IvÂd”Òè!”$Ɏ壵ÞX[jÔkÃáÐwýµµ"ç/\ÞÞîç¼ÕÖv2o«Û/…ˆÆQ£Þ|wj¢cq¢´bŒMMO­­oÔuÛ±³,ϲ4K Æ-`–—5¿n6ÜÞ¾ÿ¾»ð¡ƒ ãÿ?¾¸S/­uQ¶mCÓ4m5‚f£v}q9êE.­v¿?´offú‰>Q)1ô^zéÅn·wêÔ)ßóÞûÁǰי¨-,ìyãSO}÷)×fŽC':MÛâA` ÁؘÊèJkézœ3k4Ž»[Ã3gνöê[Ë+«–e¿øÂs?ùùŸ8wþüÅË—n½õö¿øË¿ŒÃ…= EžPªšžšpÛ|ßwT¾ïG!&¨ßllt³¤èõã4IµÒ•¬õÚ¾} Q8¶l®”4F§i†RZgY:ÂI”(mÍv^äaYíš› < ðý0Æ„ÆxE;=8!„J)ß÷ ³4€[[[ó»v !1!„²Ó§N'ItÛm·Ýzë­G޽xñÊÖfwu}ã¯þöo»áØñ£‹×Wþ埾娣xr²m3T Á/‹BU˜JÊÌs-n[q”nlô®]Y"Ä>|øÆì¿þ·_}ùå炚ùÊ•óç/Ütü¦ÉÙ™ÍîÖ+/¿´ïÛv¦&'cäXœsRyÅZÃ$Éó¢¼zui4Œ¢Æà4*Le&gJ•¶c¤´V•()e£ÑPVª,K¥´¬DŘÐN»]JÑn¶‹.^¹ôÁÇÛênâ[o>jŒÎ²ŒsNÝÉ.î´dÇÓÓÓZëaw;O‹¥¥åcÇnnw&7»[Q.ìÝã;ÁÙ3gv¯,¯lnnMNL¿ç= Äk­NØù¥W}§%J È©Ón5lÛ설„J!&Àqm„éâµå~/Ô †Ã¡êü…3ÛÝÕ“'Ov{ÝÎäÄ(û¾ÿà‰‡––—Âsósyž`ŒÒ$)‹´Ñ¬QFŠBFQ2ÅIRlmõ-î©L1 6w\×…@yã7üÁh˜f±ÈŠª’BHL±í¸U%³}:ç7‡{ß÷æ|ïDL0fa±‘Ëå.6Ø$-i¥-kI•lze—Tv¹¨bÉRùƒ«$Uéƒè’KäšË%¹À"-´X3ƒ0áNºss|sêî·s8§ýá­Ò×îo]çœ~ÎóÿÿñÌ…óaŒG‡‡‘ õªH$ lÛr›ø!„“^ß †}Øî ’„dh0Á8¥ˆ˜ˆdUJH'q­V³§Ëc"† EÒ¤íØžç‰¢€qB’$Åp®ë‡ßïv¾ÿ½o×k'¢,“,E㉠?Ô‡äv†b’1l²‚šÉG 11U%HäyÖ@ïæ p#߉žýü³F»_ž˜Ÿ]<Ûo 5F]Ÿyxû³Ví¨Q;9¿¼VVÒgW–ˆ0¤@¢¹01`lìøÑ­ƒ£ÎÐÂ<Ÿ›a8'1Ëã˜hY~ÍOú$‹ÛÝVÄy¥Ð§ú c ÷ŽŽi†ÛÞÚÛÞÜeù¸f|ñù:‘Þ®ÏMu:ÍÙåÅ€ð¹‹g)ŠJ0N’„¤B`†¢,Sg( Ç!CQ4 0ŠvvvòÅB·×‡$p²ŒatÖVV?xïƒB>û`ý>ÏÐÓSUÓršþ{ï~@Q ¤’\>¥j"pà…®ã ‚À²Œ$‰$Iº®‡06¿YkLŒOb„gæægæg>ýôf§×þþw¿½8¿øÖ/Þ¡õÿ—ÿucgkwg‹øìÙSQõz]–ã ×¼ÀÚ’(ñ¼N§TMFØ+ŒœTJ‚HQÒˆÇ'µ~_G!biÇRž÷6[RzÝGbJ«Ü¹ûä÷~ï/_½jæþÞîK/½´¹µÍ‰r­Ö‚W_¸,Šbà,Ë¢8bhŠ$ŠYäI°†ÇÒïdÒ)Y–MkHÑ4CóQŒóù "Q”LÃLk©ñ±²*ó§O­4šÍz£ûèáÓry<Š‚Jµœ/¤b䙿@`¤t:mYV ƒB¡HBéÁƒ‡ž¹8л©”ÌòTù,Ë'1 (èÆq>ŸMbwwÏ0죣&¡ëz4M§³Z&—6~yÉHåÊ ýæÃwT™ýK_^¸Ž&I:ðC@ÂÀ ³ÙÌÂâ\»Ý¤Y2!¢tFUT~~a¶×ë‚ÃØvÜ~·— $!ˆb¡(Ê,Ç„†Qç„dz¶øõߺ^™J÷û_»þò ÿïú Fvóì™Ó1Bű±z³5ðÔò˲,Ã@çfg‰“p,IÀ²4F(›É¸¶ãy.I’1FŠª ŒQa.Ÿ+䊎–å96}×õ¾¸óØ’Ì Y ‘Wœ HMIëz'±,‹$ czzî_¾·¼´¦ijE¢"*ŠòtcãÒ¥ —/]bx|X;i4‹Õ²åè²Äÿþþ›'7X–·‡e8I’Ç™t Bìù¶À3$‰3i BÀÒìÉqÝñb@‚ÃýY’gg¦ÇJc‚$ÜýâÎDeìG?úÑÑÉ1¤(ì?¼wëÆÍJiÊwíR!GáØø¸aY ËÊ%xíÅg}ßxÁ÷ýþ`HR’es8ä>CYQÍ:Í0ÆÃáÐ |EÕ IS4ÛétVOŸÞÚÞûäæ§–å m{¼:~R?yûÝ÷((HO3$&BІEñœLS<ްã qá$†ŒḆâÓ§[Õq?ðQ(Ù®-K²3´‡ÖP’%€Àuê'1Ÿ}ö@ØèƒÁ0\¿ßÇ ž™5ÍAJ•=צ ¡)ÏÑ¢À‹ïÙá ot:Fäj''ß}ã;Íz½vrEÑæîNJËv[^à“®zÝ!9 ÓÕE‘3Óàååù§O®]¿zo}½4^/œ[ãyÅq†²ª¹ž×ë÷‹¥r…$3ÙlE$ 0Šã8枤$ª~Ñ,Tk¾ú¥×/\ºL’Ôý“?ÚØÚEáèèDURQä“ QUÅu¢(L☈ÃáXYžg ¤ú=£QïÒ4øÃq¦=¬Õk_ýÚ×X†Yž_궺õf]dÙ×^¹Úí7^ýÊ«ËËËz¿œ«ŒMT/ètQàˆSdBÁœË§ÃÈÓ4•aè8JÚ­>Š)A”KùN»1?3ÃRÔX©Ü×õv·§¥2Ö7ª“wîÞYœ_°m˳ìógÏ 9Ýè[æàÌé• Îwú=? ³…|öÂAH@òùÖo}Õõ†÷×o þÖoýÖ“Ç>z095Óh´eUóý€ã8øú+× ¤FfŽ£D‘eŠã×±]ס©n«´-c³oK‚ù±À‹ßùÖ)EzòàÎO>hvêõ[}ráì…ȉPè“$†$âYaÄsÂã'tÇTÓ©b±ìQ¢V³‹ã$Îzjµvfjäæìbesç±£»ªšIzkûpoçha~.&Â8²œP RYŠƒ@àhŒâcŠf\Ç¡Úó=–¤tÃ6f’@¢(ã$8©×š­–Àsa™®ÝëÕDžáY±×wöÅj¥ÏXµš=´.]zÑp‚vW×Ò9žç)àòÂL’$€$I†¡ßívF‘«ÛíÆqüÍÖæ~Å’(Ð4Õïu÷÷v2éôk¯¾š ¤ÌáÞV1_´‡–ï9QäøžÃqR£„b@ZŽ«( I‚Àðµ—¯ÄqDI… CGQ$ÂȆÿðŽã4›Íݽ]Çõ*Õ*˱½O’å˦ҩôþûB!ÿäÉÆáÁÁOÿü§aŒsùT’$Žºî¹!'¶ã 8EÏ6šõÙ¹¹8F[ÛÛaiš¶´´ˆâ¨Ón—KczßÐææÖÓreÂrƒF«Ë¨„Xœ›…R%Aà…z«uïþºíz«kk¦eÙŽËÐŒ ˆE×ë Y†¦^Êgg§§&«³¶m®®,¥Tõöí[ß}ã;¿ó­oJ"G€XS¤Ðõùž¿vjeÿ`OQÕ6wöò¥2M1¾ïË’H3¼x~…$É$Á#X† È¢Çq»ÝÆû^4=5Ûít‡CË÷ƒ(Š …B¡Pzøpó/þü/6žld³Ù^·ç»ÁÄÄ$ËÑ$CĹ®k;NÈ0ˆ"Œ‰“8á8ˆp¤ëƒKÏ^>88>8ØßÜÜxø KÉíΠP(j™Ìæîf§×ã»?¨Õ,dz K$8Á^¾p*Žc@A$IÒï÷E)‹’$%I211aÛv /..ȲjÛ —Ë-.-þêý÷U5½¼4o uúù\fgkÇñQ–zohÙ~’v%I„ ECxk÷ZÏ_yŽãyEͼûî ˆÉL*»ººJ’øÌÚJ«Y_˜›§!óé§·á$+åòøæÓ'™tŠ&Û04Íó2d˜ÉÙÙõONjù\^–”r¹äÛC½¯Aè8NÇǤ4uhZQ˜PT%›ÉÞ¿϶,QÇJ¥;w?+²'GÇKK+ƒÝ½ýåå7ðyYˆQi¶?0Ež¦(š‚ðù‹çDA~„æ!IRÅn·+B*• ÃÐuÝlN1ŒFˆã8Y’0ŠÒiéâųt‹E‡Ýf«Ñh$%©š5t AlÚ. $ $HåR (DöÔäGQï¾ù«™ñù•…ÓÝúHÂթ΋åìîÎÆìôBáq³¾8?ÿΛoÒÈi "â0Ar&Ûh·Â0|îÙg›õ†,Icža`Œ'PÕ,"¨\~¬<6¹¹±ûèáÏŠQˆTQ™¯’ /—}×¹|á°Õc!L¥Ô$ñΜ_Ñ^&›$m÷øäô™óNWQdQ $ýÐO¯½p)ŽcËŽt QGuC¯×ó}æÌäÄä÷¿÷½§OºÌó$Í$D Ñíοi>!àã' +K†aȲ,IEQ£È\Gð•«Ï𦩍’ïû/ŽP¥#>0BHUÕÁ`°¿83={÷îº5tANNU'ªU-%¹^ß±]„ˆz³=´\Šb%I"HE˱Z*õ«>°mûâ3ÏŒ•ÇŽO,w07=ÛïôÇ5…g—ç*ée –â®_})›)ìÔ~óñ=E“Æ«ãwÖô o¼<®¡wÝá ­‰¦Þ/äòíV€¢ˆ¡(½ß·L³T( ‡¦c»®ï¥Ó©…<Ϲ¶íúÿäÿøÔé3¿úÕû­z}w{{¢2†ã’€âx^ý( hÎrü0J "„µl @QÔˆ’:: àågÖ(š „â(D£2ã¸L&ãû>AI’(ŠGq£Ñj·;×®¿tùò%׳ÛäX²×5I(nnÄ1‘ˆBßõIV&&«gΞ›œœŒÂÅQ!—AØ/JÕ±ê'~ôÚ«W*I@C 8ŠSZjjjruu1¸Ùî>å* ¹Ý-€ã‰ñ’$²8ŽŒ‚ @ X^^‚Í>S×¾ï…A”+ä]ߥ„áX¹tùÂ¥“ã“'[»G‡EÕ'ÌÏÍHŠÂˆ’¤H¿ù視Î"LJ•»ëëãU†e†yüF…TE CÃS+ÓI‚lÛIªAŽìHQ†‘$‰(ŠÙl¦Ñ¨•ŠeMS²ÙL©T˜™x–g¸VǨ5ú–XŽ›Édˆ$bJÄ|!'É’ë{aDZã(æ8Æóœ(Œž>v\W„ñ±ñf½9B¢S$s÷ÎgiM^[YYÎÒ‡<«â8Â84õŽ¢ŠÝ¾qÔèÆgŒ¡¥J,N"?pX†õ|ײ]ÏI:®E1„¤$I# ²ã¹š’ö=?Œ#-«=zôÐ÷BhÇñû½×éù¾ ’˜gÙ8ÇÆÆº½Çqív ˆ ÆZ&£CÓ4/>{¹Ûm§R©Q& Ãiš$IŒ1|þÒš ˆ¢(¨„ŒÂ@S ’ŽmMT+ú â!¨ÉÙpè?}° I>]¬ˆÙòÜ©³ŸÞûâÞƒ{×_½–  Y;B!"bP­ÎТP(ÍA?vg8ôÈå„Poþí»IŸ_]xfuv¦”7Zm»7ŒWÓØ‰ñq½gÖNºÛû­®›€ˆi0SÛ?.óGûª" ‚Ä;;; ÂWžngk/ÎìU«Óï¿÷+EdD–ò‹aiËñ }K…ñœª¥4Û h1µqp”0BÏ´‹ÅB5ŸB¡ã8µƒ^¸ï.ω^àÓE3¬åØI’0m[Õ´8ŒmËÎesý^ÿ½wÞ›žš–$éö§7ò¹|!—ïu»NÒÔÒò2EÑŠ$ÏÎ/˜¶cû~¹9>š›q,—c8ǵ]ß#H ë¦1F4M¥ÒÙV«Í0Œã¸š¦UÆ«QJöÌYÏvw¶w¾úÕ¯ò‚pãÖ-!ÏsÝþ%fyŠfmÛASä$I£zS„0Šàó—NCHéúd`ØŽm˜†–ÒQp=O’e˶UxÞšPSS¾¨šöèáCY²™|§Õÿå[os,#I¬ÀSš¦ê½AàûŠ¢îa(‰Âúý;?xã[³3ÕB1xpXk62¹ÜÞÞ΋/^ùÆ×¾²·½Ù33·×‹éÅÐn`³éíG–eI’ÈĵƒýÃû÷ÈŠj AøA@$Ò´mÛZ*$xóéHDz ÍôºÝ‹.nomº>55ñgÿñÿ™ªVOŸ>1>©×d²Ùb®Ðhu(Ž$%Ižç)š"ɲ̨8ùFGý˜8Æpiv!¬¬ng€¢Šçù|>1.•J£8¬È¼ $%ŠÒÃsÙÂ÷¾ûýíÍíÙ™¹ßüúã?¼i™Ã0ó…ÌÚê’>襕ÌÄä¤a˜Íx¾Í*“•\.«g²Ù T-­JÊdu|ãáºiôæ–vk­“Îa³Û7͹¹z·©ˆÚˆ•Ê0tà'ò¼8Z(Š1‘„aÆ F˜yš&ª¬iªÖh4ž9Á±íN»ƒÚÙÞùÚ׿>73ú! i㣓EÑDI”0cšåY^´—¡i–cã8}#žç£(Š¢ˆ¢(ÏàKÏ_Úß;¤(6Ž 1ESϳDzl·×‹¢È4Í(ŒS©´íxÝÞ âã_¾ùÎý»÷óáG»;ûÈ™¦ÑëuwyžÅ®×똮oWŠšÂ j¯Û`nwo¿Ýîp‚@ à(£µã5_úé_¿uúÒ;@©lvzb¬Sßz¿xócUWWV<ß§ -ðbžB<ÏãX1›+@š‚$pÇФMÓ!ŽQccãŽã\¸pRäþÞEÂÓ§Nÿú׿ö~a¡Ýé‚Ú®†—!1fÆó<Œ1Aº®÷ú:\]©Z¶E€pì¹.@àÅ…ù…“ãC3q«Š ‚¦èÀóxžÍåÒív½Þ<QHP/P²ÂÒ4Ñé4ÂñRc¦Õìº~`™F©›«¶›ýBnÊsÉz¯}õ…+®ÙË«‚o›û‡'³+çrÕ¹õƒFÂp§ÏŸ;>Þ«²Õ\ádÿ œ/®.Ï¡{ïÑQœDÇí6%ˆó+K•P @8è š R)U’%½o*’ºw²ïGxo—¢ÈÃã}ÇV«cJVÌgréTº\®ŸÔŠc…ÃÚQˆ¢ÎÀ£Y0Š"IX†–%ÑqlH†eÂ(dXvä(áxI×Mxáü’>0A"„Y–IïûÅbÑ÷ýQ <›ÍŒonnöz=ÇqFâÐ4Yša)ت»Ö¢¨ÕÕÕ~·Ë0 C@…BE¾( »Û;D‚IŠÌ– 4„µããb¹|xÜ4܈µ·~ukbá¥ñòôÛûæle¬W?v†ýsçÏÅD@úÂÊB®$K²<4í§;¦>+”Se8t–WÖN­žnµZ4¤}ßµ,+F¸2^/–»íîìôl·Ó»þÒµl6ýô馪h½N#âÓÛ·×ΜFI#Ìr ÇqA°,;CÓ4IÁõn›Æ¦iŠ¢†…çÏ,Ù¶“`"â#HA‚¥R9¡8FqŒŠ…¢ãØ»»»š¦q7 ‚@Ö$>RdX¶QodRªç) œ:µBSäÍO>¡(r¢Rq=—„­MŒn m/œbcºï;V7?à’`"¯(ÌdS=cøàÉc5Ã~º½77»xõ¥WGµv½ýôñ†å Ï_¸HêÓÛŸ3 @‘„¢ÉЬ² ã»^‚“Źùl:óÖ›oæsy×wf§fœ¡S©T²¹¼ãû}ÃèôuYNEQIJì(H4 áÄq$ŠüÈ|lY¶,+¡(Š À+ÏžM¥²öРÈxÏs'&&êõú"Š¢çyý~¯Ñ¨;Ž#IR.—;>>&Â2O³Iƒ„¡àáþþáÁ¡¦(¢$D±_­Vq©²ü?ÿäBqôèñš!uc8ÔõÀ÷+• ¨îл÷xWÍ1Lr*½8©ao ‹ €ÜþÙÛ;‡­Ï?ß±ìø³/vî~ñt{sûw~û·Ï¬­=+JZ³ÞùùÏþÃßýá?ÐrÒþáÈ0nìïõ¥—î}òÉ3 «ÿüŸþ„\.?BöÖÝõ>¼q´³1].~ûÛ߬Ìî=yx¸Ý Ôª }~~Ùuž~ÂóÄk×_}÷ý†®‹I¦¯›µzsbjŠc„ãÑÀ¸Ñ°¾‘‘ãG Š“(ˆ‰ ˆ£ˆxé⊢xž‡®ãA!TUÕqœÅÅŽ½=EQŒ¾ÉÑTBÄ…L¥Øƒ]&¹¼Z.¦gÈ1E3¡ïw›ÍÙ© "II€qr,E“$HФ¢ Euiqõø¸n;1Ëi‚œûèÆÝLºøíïýàOÿô_1 ùWý—ýææ /¾ð7ÞXZ^èèÿ÷¿ø?Ï%Cº÷þÍþãߟ»6ZRŸ»üìõsç×*ã!ŽÞùìÆç|ãêë«ÅiÝ17Ÿ$I t>«¥4åoþú¯_|áÚòÂÒ'7o­:33»pãæÍé™Yšfq‚F†hšæ8.ŽãѾ° 3ZY£Ž£ÆVŒ¼|éìÈÜ@Q”ï1"¡Åa‡C’$ ȼ2—Q{n«Þ™¨T&=Ï|ºý¢ÙL¶† Có•òÐêÑ$LP0=U嚦 À 8J(Šey9›+|øñvOWµü£½ßýÝþç?ÿ««×¾”M+KK3ÿíï~wrªróÆÍŸþùÏŽZ_ãw«‹•tV‚ v»»?kn?Z­TB˳ôž–N­^8[ªŒïnl?¾ûpº2™/Ÿ½|Ñ­Oﯯ?¼÷ógŸynãñÖ;ïþ2—/¬?| ‚ç…‹KK'€$ "͉D%I2:|H’Œ£Ø²,Œq£OE‘$KðåëW"ÁcŒãAHñ<ïû#Pp0‚¶ÉœÒjÔóyMâD–b oíl˜®á&À‹ í&ûÍnya e5Và&]¸ðLøží&ˆÃ0_Ê[Žõß`奣IDAT»ç÷i†yñêµL&755}õ…ëµ£V6—0|ó­ŸýƒýP7¬¿ù«·>ø/7H >÷Ú‹òœrìÿÍ[ÿi9ùJùt¾“H 3D¤°}Sç"xnùôúîöN»5–Éïïo:5¿vªªðø¨w´w24„Æßøæ7!E7ê­B©„qb˜Cš¢HHŽè„ã¸0 MÓ¤ 5z2z5Zt8Iþ ÃÁx"‰Ï¶IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/warning.png0000644000000000000000000000233111722777314020723 0ustar rootroot‰PNG  IHDRשÍÊPLTE!)1BJRZks{„Œ””{{œRRœZZœ{{¥¥99¥JJ¥„„¥””¥¥¥­­11­””µµ))µŒŒµœœµ¥¥µµµ½½­­½µµÆÆÆÆÆÆÎÎÎÎ))ÖÖ))ÖÖÖÞÞÞÞçç!!çççïïïïï÷÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿp;ã”bKGDˆHèIDATxÚm’}o‚0Æï”MÜæÄé¦5…%¼•%m ßÿs­ìzP“^ÿ ²¥UDÂýKnßk[;Ò»?0n!¿œqCtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignaturec42b7d2d564aab588891979703f02b45Oß“tEXtPage24x24+0+0r[ 1IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_asraster02.png0000644000000000000000000000367611722777314021767 0ustar rootroot‰PNG  IHDRÈÈš†^¬sRGB®ÎégAMA± üaPLTEvšvÿÿÿkš© pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.5IŠüà"IDATx^íÜÛVÛP ÐäÿºÄMX6µÏè6Ò˜U^™H³}Ü áñ¼ÏÇã±èºúœññú¸ìtÈæ¸¦Üòq\YîÙ;Nå&Ž“c¹äÄñóXn9w)w€\:öwØ KÇ÷±èCãM‘‡Û¦1:Vß¼H|§ewhŸˆÃ! ñ8”!.‡0ÄçÐ…8ÿ!ìgg羽ˆÛ! ñ;4!‡$$âP„„‚˜CtÈA¢5HØ!‰;´ ‡$ãP‚¤BœC’tÈ@²HÚ!É;4  H…CRâ€Ô8æ!EŽqH•cRæ†Ô9f!…ŽQH¥cRê„Ô:æ ÅŽ1Hµc âtˆ°ÃQvx ÒDÛa‡ˆ;Ìu‡"ï0BôúooÊçñµþZ‹Cû¥'Š;ÞÃa¸ØN¼t¤€áDpd— ÕÄcqKáýB¾r¬>O‚ÕÒ0×Sf ûhXΠ•´ vôDQË:^µ³ž×Ñ4Ù^$MÛˆ¡*±¢mtĶŒ™ÂËWvfCãly> ã.n ý6@¸­Ó1‰u9·†|ý0‚~!÷³_J6ÈòHì‹èÉ…ä…xí¿ŽÐÛ9¬[®!Ž5 ÑKÉv[‹HC9׊UÍÏo±Ÿe\KZ‹–ß¿ŽÿO¦¥™{ÉeÍÝû ÷†¶\Ô<¾Aâj+\tVórNeƒ óIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/rt_st_transform02.png0000644000000000000000000025214311722777314022656 0ustar rootroot‰PNG  IHDRäª2gtÆ IDATxœÜ¼÷—%ÙY%úÅ1á#®7é]U–íª6¥nµQWKÈa„ A!„‰÷F€@zof3ÌFÀ@$ÂHÐ-Ó^MuwµºÚ•é²YY鯿7|ĉsÎü’þˆ—+W®\weÜqbÇ÷íoï}R€¿ÿâW_}ñ%eq¥Úc>Þ˜n=txfº±víÂÇÿèw·¶®¥:Ë”þêÿœL‚Ý^»1ý]o¾Þü]·q鹎ièn8Q~þ¿Úö TwÞùÃï\\š™ÍL5)&¿ó;FC ÷²TZf!Fßø©wMµ+¦)ç’Ru<ò®\YG ±, 6··ÞñŽw|ó›§Ž=ÚéîÎÎΦiÌ9!D¥Rév»aè«5M@!(ʃ0ÈURzôá§ÎŸ¿xë­·ÀÂâÌÅ ç”ùHäå³õºDJ»Ý®UÛÿ…÷F‡{êég]§Ç Æhaa}ôÑ˯Þ}×mÏ?÷†4I)•r½ “±£RÉ©5Ëår9Ž#– ØÞíE~8ê:Ôé÷,ËŠÓ$R Ù¬Çþ!tËMÇÏŸ?Ûn¶ Õn‚­VCÓ±b2™7ÝqJ)!DA@d©\[ۀ˗ÖsÁ%äEž£ KÌ£ÈË5¹–S‰âÌu]ÿ𙿰5ûÖïp̨ '“…Åý:Æ;¾77?óÅ/~ñòå«°~mkyéÐÞîPJL¨H³xnnFÃ0Ž,ÓPegg—+R³t ­ÚŽfÛ¦ì³ÿðOI’p‘@–e‚c‚­<Ïu]€â’²,³m!4;;»³ÓeŒ™¦ ­’ÝéìîÛ¿¬ªªah£ÑÈ4uE‘X¥”º®û¾_Ô¶[o=g^=ßj,­¯oÝ}Ï[§§§ÏµR5á]æ,Ë„E SB!¡ñx¬(ŠmÛß¾p;I’<ÏÇÁR8Ž5ñ†Ia–†ÝÍë›HÑ“Ûï¸íË<O¼ûßýÄ#ÿqæÌ«£;ï¾gow¶fúãøþ &Áù³çþõ ÿò¦7Ý À’¥¥Åµ«—ÆÃ~«U*Q‹Kœ„h:å9Uuº°°ÀX–ÆIF€¥’ÆÙü (‚ªØ&fˆ¦æyÇB!Ôív³,WU—®cB0FQI)Ûí6hš†¡¢(œçqõ{Ã4 RuÇÞÄó"ÍÔ㡉(\)9À#¤$áÄÔLMaö†SÀ9G]÷à#¿ù»Ö”säÎÕßZXqn¾yßo¸a4ÀÌl³QŸî®LOÍ•*­­ëjµ\€•siY¶JÍ?üø›–Úvàä›ïú§ÏÿÝòòâ-·Ü™ØÚÜ“RbŒEÑ4-gEå£ÑȲ¬á`§¸¤(Š(U{ÝA­VK“½F3sÓI9ŽC)æœsÎ(uŠf-¥ÇÕj5ŽCß÷ciÀ¹³—tâTÝZèùq)˜jWj& z»IQE-N!dYV±Ð„ŒqšdívÛ¶íÁ`P€UÓ´~¿_¯×1RÚí6ÆÙøVÀˆ²Œ«H)•JÃáR ¯½öÚ¹sçöïß¿ÛÙãEÅJ¨"e³Ù‡F!ToEQÆp8,—Ë£ÑHÁˆqÑ뀳øÚúZÅ”°J©öÜ7¿153_yàá{ïŒÆÁpÒ#Ôñ&“›o=øÞ ÓÝêîm¿çGÞóú[ëjvèྻï¾FÕH8ÝÚÜ ÂÉ¢Z¯V«Ã¡7ñ†€×qGúïû,ÍàÀ¾ýêPA9ç2°ÙÙ©–Õét4MeI¢ òÊ+gF¥R€ûïÿÒÛßöæZ½TÔ„PÑ:F£!Ķ휳4 !„(—í½í,ˈF*•"Š‚bÙ)y.tËT)½ €…ÕÛUj\[_¿tùҵ뛛Û[vÅ^9°êdgóÚŸþéŸEaÜn·³,ó<ÿmo{Ûïüîÿ·¸¸°¾¾qÇíwîß¿?‚™™fM4ª¹nõÏÿìS®]Žc#åßõ†+kUJÿésÿب4w·÷úÝ~ÎÓ<σÐ+•ªIÌ‚ |×»~°Þ( ‘aŒ“$QUR:èã8=°zpk{#ç¬Z¯DQÀyÞïwMÓpK!XH .Xßîî®a躡O&Œç|qiQŠ|gg=Š'µšûÄ»áÁ˜¥9F4Kß÷u]WU•±,I’(ŠúýÆØ4ì ‚ °,+ CÎyE!Ã0v¶¶(Q[ÍvER‚”Â0Ìâðj¹EQ»Ý^[[ ‚àúõëY–Åql˜F–çœsEQ)HF!˲òùÉ?× ¢jT'škUžûÆsº®'Æ(‚1áØå8Nò<9~ãá8ò…š¦å9Bhªž¦Œey©ì–Ëe„!I’©©–뺠H`,UU c,¥Á… ––|ð•••k×ÖÆãñx<š™n?~xeežR¼¸¸¸»Ûõ<ß2K{{âãlÛVUªéjµZ5 @–ËåñÈë÷ûE§&„B\×M’Ä÷}Dz+•j„3Ó3ŽíbŒ«Õš¢(ÒÐ4Îy§Ó)ºÇææ¦ªªãáh¨Fš¦”REQJH¹\vl¦¦¦4M+ðše™iš–e%IÂ…HÒ4Š"Î9ÏÙp8È2æº6c©ªÒ²S2 åb2ñÞ|÷?õãïzä¡E?qÛíÕryf¦rß}ÿæØ®Ð ã®7¼á•³gzý°½½%E>Õª²$ŽãÈuJa+ V%B糌Mµš*%Õr¹\.q–T+%ÃÖƒÞ^§Ã9cyžsÉÃIàQ8NÓœ3™¦R”,ËJe{zº¥éÔ÷üÅÅEBHEyž+ŠR€Õ÷=EU¥RÂ`0$ÍÌÎ\¹z•ªªn˜QšØ¥J¥¹ªjjªV­Öz½A£QÇðº7ÞqÛÍàÕW^Nâ(Ž¢#‡¯î?àM¢§ž>µ·7ÐuóŽ7¼qÿÃïúá÷<ýgXƺݎã”OÞ}òäÉ“‡^^ZØÙÙýëOþíoýß©ÄÁ¤Q¯i”ž¸õuå’57×¾õ¦›î¸õöÏþÝ?,,Ïon^B”J¥$aB(ƒA÷?÷³ p)™¢(Žã°oÍÎ!B))¦( ¼R©‚E™Lƾ?)•JBH)eÎØùsg···â ¼vu­ä¸ïñ<ßÙÚöF½ýûW4ÎÎÏÎÎοôòË,gºfJ ÛÛ×}ß_ZZº®!„8ç£0Œ}?h4BBH†Y–øŠÛ¶&“±ãZ9gÈÂB„Ðh<2L½øF­_¿Ž0aW02 CJ©( %”P*87-³Ñlê㈱ !Ì9·,+Š"UUAÆÊæÆõ8 ³,“\Z–ÙëuÂÐK¢À&:OoâPv·×ræÿÄû~üɧžë÷ƒÍõüçûGkW·½1Ï™ñç^>s~M¡Ô²ÎîõÐÝ|ãÑÁ Gº×é;嚪éI’#¤×jÕf³.³-!‰R­Øyž$\×õÿÈá#½Þ ˆÂ,K)U9Ï5™†MêØ¥½ÝÝ0 ï>ygŽU«TÛÜܬV«“É„1¦iš"Žã$MÂ0àœs!¤”#ß÷5MK3§‰U*QMÏ2‰ˆêºË)™¦ùü Ï—J% òG_Ýts«ÿÌ©g« ×rÌ©¹æÜì ’ddåf…Xô™çO]¼zék}]r¡QÅÔÕÞ02mûùSÏŸ9söÔó/Fa>?·ä[ÖݲpJ«×¶?ÿ/ÿöôÓOž;sJ£üøÁ>ÿÿ¬h"KsMÓÂ0sì (Ü)i?öã÷îînQB ! ¡à{¦QMÓ4M5 ]AŠaŠ‚Rd³ÙŠãÈÔu‚Qì{W/^ÄBˆ„…ãÉöÕu€ù1ÊĨ?™xÖTNeÌã~ ›Ú¥‹æfgú½½éééRÉÕu]JH’4M3–qÁåÖÖÖôôt½^/ EQTUmµZaäs‘îuwËwn~VÓ5BIÆÒ‰7Ñu‹)˜èÔp´\¤ DH±­­¾i•¨ŠÒ4¢(˘‚PιT”j½îº®YΙñWŸ>{þ’nRÁ é cDÅõzejºY@8窪fY6O¤T ŽcÃÒ Õ#I’77G)Íó\UU˲ ð,K×õ‰7n5ëÕj!Ôn·1Æãñ!¤ëz%RbEÎÙd4JÓLQ@QÐx<,e<#„ ¤?Ã0PEQ`ffJäùwžMÕEÉsîû¾ïû9KBUªišîû!dssëÑG~ê‰Ç¯¬RJ¶¶÷˜Ä­™¥¯~íÑ•}LÓ<ýâéÍ­ëãÏ>ýl0 ÒÄÿù_ø‰³çNUÊeK/iÄx÷ýè ÛýÆÓOLJ¥ ËU1ÁP*ÛõšËEޱ”ª„EA‚‹<Hb)¥y¹\&W*Ã0RFãIžË0ˆ\§Ä2a–1•ªÃþ°V©ž9ûòüÜ‚çù”RƘ¢@’F+A%išæyn–¦†n—JÕË—Ö¼ ûÅJš¦œgRòëׯ=zpjºþü©ç \¸zÙ5›çÏŸ?tpµ×é€iZLÈÅ}+V½ÛÝÕ4íÊÅKÇ,K%f'ú¥Ÿ_YYª–] ”þ¯ßùX¥êNÆÍ´ˆ(ï_=ú…/ý+:²*2EÕÛaìÝzÇ]ÃÁÆ:!‡Ã¡„ügÿÓGÒ4Èó¬äºàû¾J8JçæTUøá‡9RŒÒ”Ò,Ë4ªªº··‡1®Õj0éêõúõk×,ÃÔÎ@ ‚Ô¦‘kÙšk,//ý ÅjwïZ³ÞŒ‰mÛý~_UU„P1ÝÇqlÛv1 (ÜÛÛ€jµzñâÅ•}KIä麮iÚh4*¦ø @pÐ Õj ú½nš†ûWæã8}íâE£\Î3U…Æ-ÃT M’DáßR|¾#gYEQǺia υí8Ë++që†e˜f¹VjX*­ Y^^½vuÃ4Ê'nºé]ïúž·¾íŽ»î|Ý;¿ÿ{'#ÿ‘š úB$+–åRJ"£Ñäö;^ßjÕ U@ã$ÉÒ4Ó4c4D¦i¶ZM ¢è¼„ ¤i:Ú­6¥´·Ý¹tñ¢¦Rdž§9K…È%U£qš¶¦gn:qçÂóC‚ÑÆúºçy“ɸ\©€ëºRÊR©dY–išãz½žeÙp8LÓÔ0 Îy¡çSJ ÅiI) ÕBJùíçGX–‰ÈY %ÛÖ¨\¦ 󯓵«k”–¦*%XQ ][\˜¯W«ƒ~/ŠBÓ00Ʀi"„x.8çI’RJkÕºSr-˵mG7ÌR¹„Qše VΟ{ÍÐÝ0fk›…åÕ_ùèGEÿéý?UvNww{g¸ººZk6 ׺¶¾•smc}xòŽ{«qâÄ-š®†aÐôë­fyí™–à !Eˆ\Õ´bJ“¬((Bˆ<Ï ]ã‚SJ C2B(Š‚±R­T¸Œ]%%Žco2JÓØvL/L ¡…*—eiƪJ Æêhì]¼¸æyÑÄ ÆãÀ)¹Dž'XfœåHQ¤È¥à˜7½éMRЧž|’€ã¸.\P‘êNM)@š$Í©Ý, ™cIýQ0;=›ë=ªêÍfýà‘å§ž|Æ-Yó³íBE’RÇ9C*5Ú³mPÅåëç Ö˜º¾³n8f“Iø¶S•¦ÜuÝ™™UUÃ(àœ©ÄøN7‡YšcŒ[­öÆõ­ƒGV †põêU±¼²TÀ¨ßïÀÞÞ¥4KcÉs–ð,u•@–Ħ¦¯]¹zôæ[[;”R,E!ÍgY2™LJ¥Òd2©T*yžþ‚ã8ÃáÐ4Í™™ß÷‹»UÔÚÂËh·Û{{{Ýn—RÚjµŠNÓTJÇ!D§ZqÈhèÕkUŠÕn§ŸyC× §jwwwíêÕf³™¥©ïyI—Ëån· –éB*•š¦iYβ(‚l«œå"‚(æçg-»4G°´¼Ï '<ô¥yÏHÉÐpૺÛ{×öí¿¡Zo\¼´Ûª»ï¼÷=?ÿŸßïýé÷üÝç>gO5úöËk[{Ž¥€eW’8㌤䥲±Òn7¤„dw·çºn¥R5LíÊ•+¦©€¢Àd2jÔÜjÙêw{3SÓÕjµPòBš¦é@tÍPÖ××—–(¥º®§YÄ9'„vöziÊrÆ€’¦Q’f¦I¨0¤”FajÆ£“'ßÀX:·¸€Æð¾Ÿú™$d^½0ôŽ?Œ1Öm}„N©ä8ŽçãýÞÐqœK—®Æq4 'õVíæ›ob,¶Ló|ußëW7/^X«VÃÉ$•ñáã+õ©ªfšJ²k×®‡‘?¿8;™x9!$Áªi½ÞÞ‰ÇÓ,Žã#"„HÓ”UJ„¾ï­V«×ëMM7E‰¢ÈuÝF£îØöõõë;ÛÛœ‰ÀÖ.].—‘'+¶MU¥QWª¤ÒüÂ/>úÄ9“Ý-!¥¤R­"|AXMÓÔu}wwwjjªT)ÇIì븅Ë1Žã8IÒ’ë‚FG¦iÁ³ŒUʵ8Žò<ÍR¦zž1)e¥\™x“NŸ¦ªÅž¦é»»»žç•ÜÊÞ^'g)Xp)eŽŽ#–¦,ŽRÆxš¤#¢LÆ„REÆØ¶-ŠH£Þ¼á†ãK‹+ó ‹?ñä›ßööë›[ë×ÖïºãžgHÁíéÙr¹2;;mXvÆ O‘i8wÝýº?øøï>óÜ3_yà±CGßxÓË+Ë®c=rpíê)%ËR„´8MzÝž‚d©ì꺖ç,Ë2DzÀªªæ<«V«¢ßï§iªRjhFœÄF½Z­DaÐn·TR•j††)6-KpEaµZaŒ1Æ<dØÚx2ºxa=ŠRÏK劦kº‰&~«ÌÐ P¹Tí÷úq˜4[S·œ¸å‘¯?ö©O}jqaôµ/Å)—½hdU-ðŸªjŽ˜Œ*v™ýk<i¦ëú]ïmoÿ¤*íjMS)ÚæúöçÿéþFsšÃ&{ßûlqñÐ l^:?í,© %×ÝÛ‰yÆ`ªÑ }9ÖFo'Çb¦5•I’qÈ+eq©TbyJQU•R\·u†]Îy{ºe–`¦äb<÷ûcÇ1 C7L¢ë*H‰Á:à¼RvTXjy±ßt-Ë(—ì›n<ñì3§ Ž2תcP5¢Y†’Ëhfz®»ç@–ñ0à®cRJkµÊ`<*f/+ŒEK+Ë[›È´ûï{Ði˜0³¼üâ«Wn}ÝNz–ÐrΘ®™Têùùþý‹½½ Ëýàó÷?~ÛÉï€7½ñíþð/¹–öÊËß¼ãö?ûÓïK‚IA¼s!FãÆ I„ëÔ,Kô:0ºjø~xèС`ö»ÄP壘°4ûÄ_ý%cÌ´,¸÷Þ{=²³½©S:;3‡‰¢(ÊpÜ!“˜åÃI0Lâ˜+ë€(ö1’XAãy¤D·àø-¯Ëœ9ûÚâìR–eÒ4ãXEơþ=¸Q…èYš—*MÓÝAaêºÊ9wKŽ¢HM§œ Çq®]Ú€J¥R*•"÷Í-÷;ÝJµ$yK ‹=øˆ"äöΆ¦iYÆ¢€ ƒØ²,oÒÀiÊ’$©ÕjÃáR«ÕvvvŽ;öÒK/8q¢¬xÞ¸\v‘¢\ºtaueßâÒÂù×΀c—8ÏMŒ†ý¬?4 ³Èj%Ÿ.' IDAT)ÛéöÞzÏÉ/|á qí±Ý+k“É­†eëSSS¥²³·Û-&E„pš&­F£;諪º¾v­R©Vç¼Z­ˆÕÕUª¢­­8Ž@×­4…€b‰|߯–˰³µuùòåååe„`sýÚ©çN3–SK­V±³R)»%óòÕ‹žç ÉàÊ•«GŽ:|ä`ÆÂáplZ!¡p*ì~îgž{á¹ZsVV4¦æy䉇Ÿzì'w߇€G£»—À—zððÇææ—uÃYµœå¥ƒwßù¸ÿ¾û½^G$Ö·Ýø“O}êoËå2¦½±9EÁŒ±,Íãh9žÄ4ÅgY¦R" ŒqM£DSÄÇ?þµZíÏþâÏàSóYLáÇ~ô‡Þò¦7bL“þh<òªÕFJÆÒ©öÒÆÚkaè·Ú ?˜Ëb!g ÇRÓ4ιn逮×듉‚+uÕë F£‰Šôfs!ˆh„h¦«iÆtgg·H ¹®»µ³·´²%Ï3Çu¦§O¿µj+Š¢ ßüú£†©%Q<¿oÝÁÖÖc,MSË6R‰)R@ӌ奥ä–e% =UU‹±±°ËgggG£Q±”…<Ôj5¢(+++I×jµA¯ A6ÍѨoFžf9çœó"T¡æxâ7­ÍÍc<Òu­à¬Œ¥Žc™¦éû¾ª¤0 c<mnoµÛííÍ-JP¿· ³s–m)€³,[__Ÿži×jÍyŠ¢Lƾã85§–$‰eY½^lÛn6›Ý¥¥Û¨¾òÊ™"ÕhÔöX.Wlªcéñã7º£RVVV.^|íüù³ívS7 )•b*¯Wj‘îìlõ݇~Prxö¯€PL§RŸ_nþ—~øk=¼¸°ïÁ/?ðüéWþî÷¾ï¿ü¿ÿÏ‘ÃÇïºë.•¨üÀ€ú̧m‚«†î vÉ9qóÍ×7׋g,ŒübdÄÈØÞêzž—§Tª¥öT…ukg{2[†žq ,Ž…¹Ì Ãxä‘Gúýþüâüá¾c·ÓùÊýÿþ÷Ÿþ·vÛº÷‡Þ½²¼¿×@Eš©u;{½^'ŒüÑ@RZˆ0 %„±4Ï…†AÕ¨fpàÀÑx†aÙ-$¶·wWW÷ûãr¹¤ér)9—Ær©Â©S§ŠÎ&ÊÑ£‡„ªÃÐ9ç>úuÌ D­TÊË‹s®mI) Qr~åâ‘KJÄQ š YæÿÀ;ß’±8ô=•ZH!®k£ !¤ðå*•J¹\&„¤@†9Ï$ªJ9Ë&“QQûÃç¬×ݳ Í2õaoh›&*I2œxõR©ÝhŠˆa¤è*¢bEQºÝîÌÌŒç–ey^Œ1×u³œå«U«ý~·ìÚyÎÃn½¶Úétl×™™‰£cøN Ë´ô0ò%R(¥AÑ»AÊùùùÕ•}iÊ67ö Óf¹8xhÌ/.p‡¡G5•(:Uq…@,//!„”¼¨¬K}ß¿áðñÿö_ã×í7o9vËÙÓWà©/>ø¿üKϽ¶[=ö#?ôáýÏε½§ý^Û‰ïù¾{~è±­Õ÷ÿäÏ|æo?ýäc@³DçÚû½0*Õæ¢,¹tåòÂòÄqÜéESUU×õ­­Ó4Ëå*´šMÕ@qÆsõòÕ©vCWõ4M£4u¬ÄqX©”F_È!â8®BxÑîMÓìv»år¹’e/ಱ±!¥0uCAÒÓÓíÎÞ:zd}í’¢(Wû“QèG,ao2‚—ÞÀ9¯T*ƒ D!°¸´4è÷LÓdy¦ë®¹eÅjJ)5Õ$«MM·üÉÄ›Œ`vª¢ûadš6Á˜ªÈ²,¸`uß2 „PP„K+õJ¥^i¶ÛÃᜲ ¯ÔÊ¥RéúÕuÓ4 +nssÓ±Kšf0Æ|ßÇšPB!˲—^8“gøð|ô1ÅȇéLê|ú¯?{òäÉÿõ¿?–D‘c–ïyË;`ýÚås«K£q÷ÑGX^X¼ï¾ýã?ú}øúÛ¶åj†¾ÛÝ®7§B:U7·÷0&ºföÝRÉÉ9Ótkn¾%XB&„ÉÄGL0ý(ä\€ª*ƒþ°Vmõ{ãdZ–Õé  ^¯ÏÎ,z«W¯Y–Ñö%äõF?Y»´æ˜ŽdZSJ•<-vRa j&ÎåsÏ?{âöÛßpì8H=ðà£û–÷o®o`\¤_íjÆB§L%EÃ\qF’Oœœœyé´àÜÒ-èvú³K3)Ï0S¥I”<ôÕ‡)ÁecÝ¥o}ÇÛ©ar–V˵¹vþò‰¯×keÃѶv·…„ŠÕˆ¢ èšt]7ŒJý^¨RYª8,O »(MSBH‘õD)  }˜™^è÷ûHÉ“$Õ,GbÍ2ðFªÐùö4JR5—D52©*¦¡„ñhA°º´ŸRÚhMyÁ¤à¦ý~_Ó´ÅÅÅn§W.— õ7Ï3!„iؓѠ^¯†^vÝb(¦”Fi²½½«ªš8ÏE{J)Ɔ!Š¢Z-•„Ð u49¥J¿?@ÕëÍÂÄ¢k: C¿ß¿&X^«ÕŠ ²Ñh(…=4ŽÃ˜Ee§ išQŒjµZgw<𠧦>ö§¿õÿëƒð£ïùÉÙÅ¥n<xþüÁ¥“üËg>ó™Oÿu0ZHû_ûÕ;î¸ãÔ ß€÷¾÷½,Ï_>s–P )T!¥RTPàÈÐhû•Z!Q*¹W/_>”ºá !tÕÆ8Aõl¥Rïôzv©<ô¾5Utz×kµã\J%×ýÒ—¾ô–·¾‘1våÊÎy¡™+F“ï{Ûw!D†Ã±" ÄIŠ4”¦±„\EЦi[×¶@ ¥Vm$yD4‚)=ÛÖàäÉ“k×®T*%Û6󜛦©ëjáõ«ª:55U LÓ”R®÷ú055õ /H)=Ïk4kBˆ¢{2–¯ml6gg‡ý.QÐfg7’\ª*z!”$ÉÔT{2™ìîn×ëu#?Žã¢’õû}!ÄôôtQÔûý¾cE¸!ÔëõŠ§Ë¶íV«%­¼Ñh [JEB iša®ënoo¯›¦©iZAÁggg³,)&ÂñxÔhÖ4M+—Ë–énoog)€œEáœIJèüì¹K¯¬]¹¡غ«(èwŸ|ü‰§¦gæ‡ÛÑïÿ߀á ûîw¿ûî×Ývä§ßn•Òà ¦ Î•Ê*úÐG~E5Œ7½ûÞÝþÎÇ~ïw ×zþÕÛn}¥ÖÈó¼ì82vÀ8É0QjµË“ñxŒ LÏ4`8˜˜¦iÛöp8T¥Óé,..À¹sçn½õÄKg_n4ž$Qº»»=ÕªÀù³g)Í©6c)AÐj5çgç`mízšÆQ”VkÍÑh éz$ iâ”Üò_ýèŸ_îu‚Åùƒ°³×Ã8MxÎ(€™öÊò¾ùÅ¥¹”åBb!Äh<ÙÙÝnµÁØâñ'šK™iYº®ßt⦔¥«öM·Ú»;{=ð(Ë8çœPzì¦cóK³i-ÎÏ!…¼øÍÓƒÁàùSßìõzˆà‰?¦ªZ¯6;Ýßüï¿:77›fc¬Õjyž°R„}TU•RÆqL)­×ëQ1Æ Ý°,˶í4M———Ö××gggB‡Ž"šZ©U+•Jš¦£Ñè7ë¿ï §^|AµL&ò0d“ɘªÄu^¯cÙ†m„"ß÷†ƒA½^·,«ÐG‹ ßÛÛÛ•J…b\ØcßÙ¡¥ëº”²×¸®;55…*,j}B!TU5 £ðBQI!³,ã<·m[×uÛ¶Tošd”Òaç¹ëºÃÁ`4m\¿~þüù0ò©`„)ÂQË´ö:Ý©™ÇvXzðkÿöô“mo]4¾rñÊË/½¸¾quvfV7¤JÈÖúÆW¾üïÞdü‹¿ðÁGyðùgŸyîß°4a¥T.ñœéªJ§q$9Kó€óضUeå²%ãy&%³,Cr©€T@š†®©$‰Ã, ]ÛÛݵKîM&Š`†A‘’K™7å™™)–#¤àÉx€1 üÀ÷}!¸ …à"È…äRVõ4I£8Íò|ay% 3U³wv;£ñxo¯—¦™eZ¦®cXœ;¸¼2¯é„K©ê6Ƙ iÙæ±ãG_yñåóçÎçŒgI¶uµT*Ýq×íWÖ®pÁ8ðØ£‡þd<€r¹üÝßû6ÝRã8JãøÀê¡û¿ôåápä{~½Þ㘪a2£ØË[¾KJ)d®ëjøœsJUÃ0Š O…bÆ8Š¢,Ë(!ßAFG³³³ªVì©'{NE››”¨/¿òê3Ï=wø†£vɹpñb3Ó išLMµUUí:Íf­Ø>Úï÷³4s]WÓ´‹E8c<33x^Á|æææÂ0,ÔÇr¹¬ªZœdš¦ `ØãñȲM]× ž1Ö4­àNœs•j0|ß‚À0ôâª9ça†n[¦ë:QG£ëÃÁ@×õúì[Þßív1Áªª†q€|ä#£Â]LT"¬h5M=‚R©N§è¼ÅwÇŸxR‹¸“B×u×uYšLqfjzóú桃‡_zé%‘Ûï¼C ;ë}EQjµZùšFA ÈyF)]^^ö´ïÄñ#¢Ägÿ‡§7 ×äºÊC×®ª]óðÍßwæ©Ïé¹5¶¥Ö`Iž‚MbŒl¶Ã Æ’ç>áÞ@’’ 8ƒqHˆMl0Æ`ƒ-[R·¤V«Õ’ºûôtæóÍsÍÓ®Ú÷Çnëï÷œóSU«Ö^ë]ïû.O]O’•Œ¤¬Ã¥YÞmuMÍ”EÙЋ‡‡‡…R¢(Z;²…î•˯¼våòúÚé8&°º~D„n§e˜êÚüjk¯É\ûûû’‚“(¨˜§ˆf°±±qp¸€hFrB¨®ëÝnWµgP¯Í¸®›Ä„¤y­V÷—¡ìéF¡oš&zþ»Ï|ë¾ùÞ÷¿šû‡Ï=sþرgÏ>ôÊ˯¾ò§—ÙèË™Dª*W*åfÓït:€²8€¢œÇÂw¾û´ªÈ‚ Ôjµƒ½]6 ‚ Z.¿ð ³³³/¾”$ ëúWWW!Ä”ÙH’dÛvµZ–$)IMÓ0ÆÓ锕I’¤iš$‰(ŠY†Nž< ¦i`‘Ãç‘(rª*ìí@c¦fO¦A0Ž—®¨9¡š¢€c–eñ<$ëv†¯¾¾ûØÙSð—_þßËsKÇŽ¯Z•ú0l9þàææ xè᳚&ó(ñ=‡xÙÌŒµ°P€½f«¹Û_Yšm5wÍR…òJΣ0‰@@rDy’$bŒ%IAˆÏ‡L7‘¦)Ƙ)ÅÙ寮¹ºy+Ë2{2 Üi¥ZLZí½VûP7W=ÏKã@ÕîÞÏótÕPUÙ0Ì,ϧ;N(ø^23»”Ä´V«õš[žGÖŽüäÇÞõбyýµoþõ×òŒã X+-­,kš‰8^7 žçh–6ê UÔ.|çüÁaGÒtA–ª³•‰3UTh¤+ÂñõgŸy! 3«ý0ZZš?sï MU,Ó ?ØÚ/[%„HiœÅ¦lqDH3:3[´Š¢ @‡<'}çÛçÇ£i¯×§³3s@‘iXЬ:¶›g4Mˆ"«HA(Íiž™ªLœ­·7_»¶¶´zlcCWÔéxBó¬\©lïlÏÍ.” Õ›7·|/º÷ì=ãñHÅ­Û[aÍ,, Æ“„ä ˆ$ÏxŒ¥XDÊçê gl£œæ$ç°)Š„‘$kišå9L§>Ï ˆËrŽŽ@yž׳UMv=ó„(Œ<וD‘CPJR‚œ¦q’ÄAhšF)­×ëívú¡©¨“á°^«Lsë΃ƒý­­-Ïõˈ(Š¢(’ ‚ÈèyNSš’< /ŽC]W}ß½µ}Ûv§¾ç~¸º²Úh4¶wö¬‚µ³³×í £8âx)Š8, $M(¥« bIÄ’À íÎÀž&åAìïïÛöÔq¢<Ë-Óè´¶——à×ýÓ¿üé~ñÅ Ž3ý³?ûŸ{-DUQÔ°,K’$I’ÒŒ0©«Û½63bàyޤɽ÷žID<Ÿ ‚xpÐ ‚@õ0N ^¯ZCx,jªªnooïîî€^1XSÏ´"iŸ8q¢ÛßfùÛžºL~Ôn7ã09vì(Ȳ4Nó<—eI–%ÄQ8@˜Gæ…IÌóü`0ÐMÕG «pôäÊh4Ž’ÉÌlaâvïà4œ>uŸ;u¯]½…¾aè½v/"@/c‘DR"pB­Vs<'ˆ|h4f)χaèyóÿaäð¦Ó©ª‰ã0 Boà¬A0{ˆ(Š1™q\B<ϳclÆöö6 ƒZ­ÆØ‰Ó‰cYÖÔž€e1–\׿±y{yyÙumY–Ù à2’aA¹té²QÐêÕ¨¢kEÇq$‰7ÒÐá8PUu<kšæØ.+f²,Sd‰1Ñ´ÑhD€Êºvìä è÷F±ÔöÛ+«G¯mÞT4Š•z–9Àe$C”“a„4@®ë+JyâÅÁíÃæàøºñõ¯}~û·þÃ7¿ùõ_úÄ[zb£×ò?],Ô`vét§Ó€z6'ÀÊÊŠ®ë¶mJEF ð֘¹|ù²ªê¬µúLІQ©hFQÒï VÑžF’„àĉc²,Çq,É*Ƹßï3nrkÔFH’”%Yšä§Ng¬<ˆãt{kﺃØÝév»LÍ€(HNX!ˆ!#¤Õjímï?y¢Ókmmo@¥V›)ÕÝ`úøãÔfËß}®M‘Û»{õ™{âpÆLoÐcÈ6–Iž3±¢ÈZ½Þ@5˜Ž¦Ðéwææ—EI’$Ë2Ë*²Þ.I˲(¥q7Ñè.YâPJyÄñ<¯ë:BˆÅ·ïû,Fó茻ÿõ÷ö•‹‡ŸøÉÏ~ê—>õ‘ýÊïüîoÀêÆ¬ï;ˆ“) EQ8N`ü æLÁÓO¯fÔ©@›»ïûÀ{H@N2žŠ…ò¯ÿÚ¿K’œÒ<Ïxìñ‡R  …B·Û}å•W8ŽÛëî€,H<σÀ¥(:vìH’ÜÕ÷ØS¯Õêxn¬’çy’(Ž'CØØØp'‚œ’%iG B;ŽÛÞÚÙžN&ÍNûÌ='›í;0µ£0¾Óëõ «øCïûàþÑç£8€B5®‹†Y(­ápP(˜Q@LR^ ëëG3’ìvc¦6»À Ö‹Êd2 ‚HÓ4ÇqšÛjuÇ™›_ÇÇãR©Ä˜hǹ®Ë YöólfßW=ð<_,677uý®þŒÕÁžçI«ªÅ^Æ'ÑåËW¶·væç–G£Q˜xЧÏ)ž;)ËY–µÛí$ðDÌÀ3Ï>÷å¯|å=ïþ¡V§úä‘ÙÙù?ÿâ— Z®ÜsÿÙ/õ+š"­oâÞ IDAT¬ª¦†!` ’Š^¦ OUUŒù>77÷›¿õÿÀ—þúËwb–ô<‰ž|ê-[[[½A4]®–«’¤ìízáæím¦beEQ¥R‘$éð ¥iZšfŒê177Çó|¿ßg-TÇltÇš§R©Ôn¶˜n»Õj±ö.Š"A!Ì­åXå`š&BÈ2Œa·Ý•+ºŽEI†ˆçDYâ‘Í£$¶ ¥4KÆãѯþÊ/>ÿì7YkbŠ Ê^â>iOº—.]ºuë:f¯R.üÜÏÿl¿ßéÅ‹n˜Æ)Q%x,¦ižS‚E1Ï3yÆP²L6¿È²,Iæ˜ÓéT–eQ’vÛMAÄX‡Ý>"9DSå9å8#‚P–&“(¨ïøIN9޳,c\)€úÆ|£:÷–'¹}kç{ß¾ðÃïþÌÎÕG]±×ŽBvؾîûY–g +Bès4Ïy$ÞŽãdYd9¦¤¹|åÕ(Šl°ãíc gókŒ1‡„ÃæªjÇ‹Åå•Eà8Äñ¼¢ÊpáÂ…N§S+7ØÕú¾ÏqœÂiÕFÃqÇY–²S¯Óé„aŒPJçççÙ„Öó<ƺb7.IX#„8ŽsåÊ•[wnGQ¤ëºÌÜ«0é÷½ ô®{À!Çw.\xÚ½¦È!K‘Ï>|®^¶4• “yö_ H „®,ÌïîuÇãØ0UPTµßï—J¥'Nض­ë&AÇq¡0Ïn;ý¿/žN½þ˜QZkµšçyY–õû½R©äysoe‰Ù÷ýëׯ×JÕ8N˜<ëæÍƒr¹ì:¡çºi¸AœeÍä97µGVA[\®Ê*ÜwúÔ÷.\€f²´ºqãöŽ8Û7*…â??þèîÞÖüüìÿù?_®×g(pV82§I's³uÏwX!ÇFI’ôz½J¥ÂÈk#$Éjw0xôñ7_ßÜôû¦¢Ù½1Ô-%ÓëÛwfÖŽ‚4JˆžU€b¹ÀuÝ¢e–ËÆ7þöÛ¿ôK¿ðËÿâÓ_øÒWöŸÿx®õìs—ºqL{i,$éÝ1 SPʲêÚ®Š¦»~`YVšeŠ"²£êüù󅂉)ç8“7»Ÿ‡rÐT‰`ûÎßõF£ÑÑÇŸ8„YÆ%ËT±²¿Óq<J’œÄó<ò&ÞcçŽã0I P"Vy>õ|WÕ Bˆýi–ŒB¾ïó<¯i ‚<Í„ahÛö`0E©`Zq <Ý{C‚1Êó„$í ûpâè1ϵ! “(Ì2Âó˜ è1‡%QÂlvvNQlÛžüÖ¿ÿ·px°÷Ù?øL¿7\YY)•*”Ò7šÎ0ôƒÁìì,ÃóEQ4 _Ǯ뚦iBˆ+c>ÐJ¥Â&ÉoÐX”—ËeÛv°ÈMìPÂâââ²mÛ‡=×µ“”(–˜&ÀZA@²ÂYEñÌé^o·Ûì+eèÛqÅ“ÉtØ;œkÒ<tào¿öU«dìíÞ9yü„€•ƒƒf¡TÄŠÌî!<ͳÆL=%±®«ª,±LUÕ$IEaH6»pžç[­îÄs¾ú7_[XXeyÚ[Y€x:8urõÁÏL‚޵’seÀ«<'pÓé4Y”Ì'Bˆ+þ¿÷û_þêåÿþ¿NŸº÷{ß½Ï>û0ÈÒ4UdYÄš$ˆÌü!#IJbJ1/P¬R½Ý9Ü9Ü•eiiiI5 :H ¢„✟Ÿ_(hº¤ä ð±,r¯]¹R/–í0ÞÙï9} x5µíÁL¹@#ˆœœÒ,!¨è³ÓñÔóc§WÒ$8ùÊ•kàNCYĈË2ö:ÝF}žV5Z–•¦©¦)„,OLSg7.ŠBÏAÑ0%IJD)¥9{we[_Youúœ ªF)‰)TeÁt: ‚ˆÇ2‡už\JRQ”³<‰¢¤T² Sü‹¿ø°µµU´Js3óý~Ÿ «xÄ@žçåb!ŽBgêFQ ˲eq€çÚ¢(ÎÎÎð<‡¤iÂ"Œ4Ï3Ã0Hº“±¢(ÎxÄ‚U’¤‘ï…¡¿°6×n·(ÂÒŒ,./­>hºÙ„ç €yâ±ÇÞùö·|ëïÿöÊí«1jÕXžŸs‡Föú‘…rÅÜØ8òÚ•×£0Ó*;¶§¢nÊ5¥R2×€8 9é¦*bÔŸL£(Z;² $M{ÝîÂⲦ¢j6[W7oÀÒò¬Qæfj3o=ù®È®½tñ‘'ênÝA T­~éÚµêÒÑA/ I±Ts9%NÖêB(Ï©cûÀqBB§ï®®ûÏ¿ýÏó>ÿÇO³ò’yà…q’äy’xìØT%U” Ï ˆlcz~£:{ìÍOɲ033÷›¿ñ[àL"ÈDwŠÊ¥µÀ'Ãܰ0ÈØ‹;7;² è:6%ò=%\*•|/ºn·ÛMÓ”äÄ0ËìU6,Ó F‹‹‹‡w¢,ƒ2 …”„B¡À¦¬ì¬g8Óæ†Eáö'”RA²$ Ã0Ïó…•e˜Œ‡§OßÃPëÆìÂRà¸ÓÉtT)—{½Þêê²¢hÃÑ„¥·8ð%)±¼¿¿«ëÚ›Ÿx¤ÛkÀý÷߯buvv6I’§Ÿ~:IFXɲŒç…”°Ì‘yž'Š˜d ¶«Ë²<ŒEQdû• |ßD!K·¬ `9˜Q&ÉÙ%³Üƒ1ö÷ù­Û×ç—æËFµj@¹&¯¯­F‘xaà…”"VŠt»ýÀQ²m»¦JQÝ=£Ñ]›&0M³T*1E»"ËV¡àyKü”ÒrÁªÕË`*ÉÐË_–°œÚ=hc€l•掜¼Þž¶†c$Èó %I@ÄÈµŠ¦ó<‡š¦»Žß'òå„8£ž(gÈ‹tS`Ï=M£BQA¼˜ç¹aÃáp#]×1ÆsYFy¸÷Gfgg>÷0¥TQ´Ï|æ¿Ã~o\*YÀÓÌþÃ?þÝ¥•âÚFui¥zâÔâÏ}âã;»ÛK kýÁèÌ™“÷Ü{\ÂÂpÔŠãxnnéï¿ñ=Yîgë†ÅñœïGª¡¯YnÌ–}o¢ëF–QÃÔã8}×¾Óq¦ï~÷»xàþ«W7›­ÃÑhT(ªÕJžçAEãÉ(ËC*⚇MÇqì©Í$m×q§R)Ÿ:q2#YŠ Í²õ£ë¦e6wï=sÚsìa¿@ ÓꆃÁȶ$××7Ö×7Dc‘_^^JÓX’$š¥$Ž£ ]×¢($„p Ã0ωiâ8–$Q×u„@7´7D I’²Ós<˲ŒŠ¢ˆÁ´–¡³Üœ$ !dff&Žã(ЬB!Mó©=MâPUÕ<Ï{ÚïFѬèqLÓ874S¤$J_yåÒ›ßüØ­Û7çfjÃa{Ðëô:MM‘ãÐ<÷øÑ£ˆÂõׯ+ºž €AŠ( E‘4Cż¥ižç„¤’$1[jŒ…jµŠ8$Ë2¢(˨øŠ¢r<"„”+å,M9ÄÉŸ¦¹c{˜Ç®ë†}UUS ÅJõüÅË»ALñ©ûî/”Ë~è!ei,+êxì´[-MÕò,Ïó,Šb”çªJi2¥@âØ×uyn®^(¦¥Å±Ÿ’4N@¥0Œfff …¢m;’$K’œ¦©æþìóú÷ßø›b±ø|ÉÄDAèµ{ªN ]Å‚b:–2è´G@%U±ÚÝv–§Ë+ Ç€©oT«Õo~ý»··ödUñß*X¡fK®ë6æJõz=K\öØ@ÓÛž<öø#Aèå”BXo'IÒt:Õu‰±E±íI€? z½ËC”RÃÔ Ýîîmèši IFÒ,hµw@QÅn¯åyÇqÍf;§¸ÙjsœÕRñ›ÿº¡ž=ûÀÌL½Ýn¾á@-c¨T ¶3ZZž%ޱeYî÷‡Ï|ïyY–¢‚ ’2(1ÏsÇq4ÕÃpmmÍqœ7̹˜ã‹i<Ï Ã˜©'8ð|?ìtz…R’˜°dÌ&™ËËK×®ÞÑô… â¥i:ŒÏ¾éácGW×Ì^¹rÛË‹³Q”¼|ñ%Ã0fóHä¢ÀÅT¤A×ëu£8‰DN`9U’$,òÌ%Üu]v¦qXŒÃÐ4Í~¿«ë: "b  "׋³œ§h:žLÆSG7ö`%ÆÒá4QeÍ*–úÃ>Ã%çupüx4EQÄ^]ÓÔY!—¥±ªh$…<‡ˆ{êƒóxy¿³/ˆ†(Šq³²ž›<ÏÂ$ÀáÁN©hLÆýW._ªV*4'x~¥R-–Jë§Þýƒ]ßXúÈG?Äžå°—£Üô}Û0­ÕåÅѰ?»P©+UUÑûýQ'IUدÄI‚1¶!Jiîû.ÌÌÌ´Ûm«°A)µm[–eMWLÓŽc]H¬(J»3´,‹=ÅÃÃ!ÆaìÒ‡Ï>ÊQîêÕë£Ñ„@ò}L¸tùe ¶mª’¦)!DUõS§ÎÀË_ÄŸ8qL–Å( 1ÆLáÇqÆ!Q”9NØÞÞÏ `0~äû~¡P 4ÃÐur¥Èê-žçÙm½xñ¢a ÕREQ”n·»³½ËŠ0ævÖï Að\¿\ªE á9qmmýûaº\.—#?ÝØX}ÓƒOýäO}äW~õ—`æM§QŸ}öÙçž¿ð±¾WU¸÷Á&“IC6ÆŽ‹@h·»…™»;˜ã„J¥ÄqSÂN°,‹rp¸Çdâžç±W®X®è¦Áhnº®}/¡9³C’ÈQ”QP…BNòlbOÀ’þõ;V©T®T)ÍW–¬-@ëð ^¯“Œ‡<ïv»#×]ZZJÓró<Ýó¼(Š+# )t»#žçUÅB¼”$ ÏaÇö@Är&I’„Y(À[ßöä©S§²,ÇߺyhÎ' ÙÞÝü¡÷¼»?hfyô?ÿ×çà©§žrÜQ§Y™VA–e]•™ o§Û»û®ëg„4;»7 ]€(޳,Ã’Ä&«I’°¹C»Õç8äû®€i–‘8&ŒŪº<'lVĘoÌ’$‰¢(IC5Ønâg,î»­¾ïiNÖŽ®ÔëõK¯¼<±Ç†¡ù¾Ë€… ˆ׉âìÕ+¯@š¦§Oß³¶¶rp¸¯ë:I3ŽC ªjú“±í8‡l­…$ÚÐívÇã ³Ãf#+MÓØÁ> ¥R)ÏóÑhÄ>WU5MÓ(Šd^Îsp]Ÿ%ïR©äyÁÌÌ\r×j]vG–D!‚JÕPUýü…§÷oèÃï€w¾óÃñ€ÓtkuuùåËÏ<÷Ü3pízË0àñÇÎù~,b¥>7oO§•J \ÏÏ,Xš­¶ÈsKs+Àó¨ßï/.."„‚Àaai’IŽâxna¶Ûëh²úA" ²ÌÚ¾ïÏ/-‘šQÅ5vtH(ÌŒ’îáÎê‘Õb£’~tÔêŠ^.Uâ˜ùRøl…Æ¥”¤T×,a’Ò( @à%Ðu¹ÛŠ¢È&Øì˜M’$ŽcD©µZesóÚÑ£ë<ÖVëÕ24÷Ã(¨Íˆ>´¼~´ÐïwH@F‡¾Û\XÜ8Ø8,<ý½ï‘&™'ŽŸ"IÔé´æg*š¦e$gƒœ )‰ï=sF•µf¿\ª3Ë)×uOœ8'ÆÀq9»,Ö00 1=Ï90h!¤êÚd2a-´»b±Øí÷$IŠÓŒãó(ðTü¤`™ãñøà e˜å~¿ý•¯|¾÷½ïÜÙÞ±§N§3xôÑGy>ðÞ׋•Û×®#E:zúÜÇþ'°Äu;mðíéçþø#<|.£r³éI‚Â&UKó3ãñ°µ¿wtmÉ4 ‚ L&=XßXËó\SÍétÊ@¹7€‚0ô™<+ñ£n·_¯7 Õj’óöï|ÏOýäO//¯)’ª0¿²ßùÇ¿ëö'¥ÂÜÇ>ú3†¥>÷ü ¡C/€ ´gfª¢„gªËF±X ì€òåZ)ÍRSÍ”'ÞT/XàzžÀóƒñÈslYuËä8F éå,GQÎq±¦èE½€@øqFT X$!ˆÂQw“áh2CæGu]—ðÔ¶Ó ´ -YÎã8Ór±ÔéôÀ0 Ý,T)¯ÉÍÊq‰ÀqM1!çÒ0äÀéxlatå•צŽÓíÇ?pöA˶ßs߃ ‹Ëo}Û?yëSïxì±'ÛíÞõë·§ö´1_MHøßþ¦íŽ”’†+Kó¿ó;ÿéܹÇoß¾•e”»ë3“Ý}èGÒ4AÒɲ¦ªº=uMÓ%¤j¼$áƒÃÃ#ëk†¡I’E¡¢H£ÑBÆ<¬›Q ƒŒä“ÉrÃpqaž¹Ó«Š–$$J’Ét²ql}<¯o GŒ˜«ª*ISBÒ$Ž\×yç¼ãèÑZ½ÂŒQ™ïÚ÷}%(Be ’‘Åvww¸mÛ¶ªjiš ‚ ªêt:eˆDµZ½sçB|†IçyžçY’$q ‚Ç1ÓA „vêmMÓxžç0um<êºÆóüd<‘°ä»ásÏ=„DQÅfó`2on^}á…Þ÷¾÷‘4ý¾È!naiqoc%˱,[‡Ã Ï¿¸0·h™QäE.•‹†¡É²Œ±Èq\ó éºSÏwUÔM…R:M0–F#‡Rn8²Ç­Uëw¶îŒcÏó*¥ ÍÀõ’倄 FÃ!ÆXS•$N˜JÞ05YLˈ¢Àñ\ŒqGYF’4iÌÌLÛ÷ã,ËŠÅÒÖÖ6 iÂ#®V®TËEŽã(Í Ë:qêÄÒÒb¡Plwº¦iûÃ(‰eY™:^’]30/Ç~4à'~êããñØwSgîûÚ_}•Ñ|nܼfðÎ|§Û|ñ…×®]½Y2 ¨WꪦÍÎÏ ‡ã¥•µ7;ë‡þïþÎÀ›£^r*+BEåÒ ‡xø¾—ÖÑ£ë×®¿y¦ëæhh³f"½õÄsç¿ /¾øü¯ýËOkªeÛî#ç]^“÷¬€ˆuÍ,¼úê5Œ³­­×ï¹ç(Ç(XÏN6!”bLJe° GŽ= oÞÚºyc«ÚhlllÈ"€O|â¿÷™?ØÝÝ}ô‘Ç/\¸P,—\¯¦¥1šU0Â,åyªë*ûfB$ßÏUUÍsb¥4Šè dÅšÚÝ4I]×/•Jš*@£Z.ŒRŒq£Qo÷º•[ï&ŒÆSBJ)B<ã¨h•€âlÔë¿ëoàg>þã‹ K¡—~ò“¿¨Ëc| 1~Ï{~`¦ÞxáÂùÉhœDÑg~ÿ`q~a<òdIÍó\–ï’'TMv]€¦i†¾,Ëóó pñâE˲šÍ¦È‹º®_½zµZ+‡„«W¯Ú~P­×@ÅV«9Ûå€u]ÏIªéÖ}÷Ÿ¹}ûö]8!Fác« Ø –>Yò¦”¶Z­ÉdbYË ãñ8#T’$¦iÊÒäý÷ßÿÚk¯{n$˲€¹ãÇ3ø‚Ò<Š"Ó4=Ïw‡Q]ßÃ,..bŒ_~ñr©TªÕív—=/¨Ï4ÉŸ{î‚x>zN:†á_}õëÓ‰ýô÷ž¹þGŸý±üp©Z€›7v¾ñoÔk Y–‹YDi€¢hQä€2’†qw‹¢c»½Þ`wgOµ'Ÿ|j4±ý×ÿõþOÿnß¹‘ç¤Õjq:ûÈÃׯ_¿~ë&¼å‰ÇLÓ¬”м@æ2IÅó<Û¶ û9 ›7Ée…í^ä]§›çyÓ("•Z¢,Ÿeqžóׯ_Å¢0yž¤bÓÔÃ$-—ª<ÍàÕ—/ýôG?¶½»ÅÀ¿þ7¿Òi6ÛÍ?úoR0Š˜1‡]Û·LíÓ¿òs†&>vîìüìÌß}ýy’LÝulq'î=5 V¬H .—Šš¦†ƒ¥iFƒ(JHŠÒ„¤iêyî¼ëmåŠI²(ŽƒZ­A·Û÷}Ïq¼éÔÖ5+Œ"I0Æaäg9ñ}Ÿ)›“$ò}ß0LÇq¢(:þ|š¤Š¢È¢¼´´4è÷îà¾J¥bO× ’­9ˆ’,LÆ)¥_oµ» IÇ#GÄš"ºfМ”Ë•Zµæù‘aZV±Ôj7gçÏœ9Fa¿×ç9)Ï¡Q¯mïl=ùäã²,²U«öÄ¢„yXPzW",\Žh’$Kɧ¶=€r²¤4KS€ VQÀœÀcA²,c>žyž'IÊ(²,1×vŒ²•Jåð°™Sˆ£( ×õ²œfYž¦ä`oouqiaaan~î•+WºÝîx2nwÚ‚(ÅA˜Ó\Õ´Œ{j¬âáAsffn4šœ8yüè‰kË+ºnÍÎ.^{ýŽ,i’-.ÌéºÄói%yž'qbÛN’Ä’,)ªŒei4¶Ã0à_½rMUååÕ­Ý«P¸òê•J¹€‡(úÑŸYœ€[Û[µF½×ë!Ž&Qœåé±£G Ï’$ËÓ4‘0ƲLÂNÉ„Æi Ã0Ô KÅb¹Êó`$)”eµÓéxžW*w·Û iJ¤’$ "û㲪ÆQw ¸„Y?ó×®^«ÕgçùŒP]“™z9 ]]%qˆºœÄ)zŽŸ"Ëòþî^µZ]YYbN%dçŸ}æ¡Ëò'ÿîÿÅ—׊e®Ýë¾éÑ’§ÅròôòK+%3Ž¢•ÕU˜ºâ…ú윮¼üŠk;'q€ZÍ8uò§R5f«zíÚë›×®Ýpùµ¬®/ÊŠH!U¥T*=ý¶·vP—‹¥0–|o:ö>öÑEåEÌ;ŽS­Ötµ¦*†iš óðõ¯ݲÌåå%ÝP5™ŽFƒõµe0t1Ϥ?üìgWWWEA^™kØ«·n¶Ûí{î¹Ç²J¬¢hÌTw@ÕÄfs¯Õj­¯¯ïíîêºlZ2Í8ž8.Ïsq”RåRÀ9¥®kÛît~~ñÖÖ,Ë,ã( #62H’$ Ã[·o°Z!4O]×-UŠlÌ6Bù¾/I¢al…v† æ ve_²»·g˜VFЦk€ãú¢,&cAúý~’$IF ZoX—Q®ßïÌõ«›7nÜPeãÉã=Ôlµ^|ñ¥Fu­\.F±ÀÝ].§©„ø8J¿¿G< £ŒãRJH®ªZÁT'Ž F­T­ Çù¹¹æ~s2™Xå`“,ÜÙmGÖK—_ZhTþækßbq_.—=/H¥ìØÆÑÝÝíÙFÅ÷q6ר"Ž ‚ ‹BäGÍý6¸N Äýƒ}øž»pcs³R­@{ЫTgoÝ*ò5ʽA²\å«0·8·öçæfÚ­Ã#+_xñ­o |ë;O;u†cL¶_üÔ¯~û[ÿ8ìã8ÑMãØéc?÷ÉŸ²Š ]ÓdõÅó_¿r£V›õqpúÞSœ½P¦ëš$È_ûêßÒ™†!\¹1IÅL’dé[ßò¤(åÀs­VKृý&¥y©twOZ«Õš››{àÁû §P­Ö¸öúædäl^»µ»}8î¹—^xýå‹W®ñìSjFã$j(Ù¬RøÏÿñ?%$Šod}E [Ó´J¥²²2‡!ð=Â2b»Ól6X– û£ñ0ŸÏ™“ñâ⢠rŽoëFvn~¹Þ˜ÿÇoücëààÞÆÍ¥¥©'=‡^¯·âã ³ëëëϾða’‰=´Ñíë×vöîÞÝ(KæÄQ4Ýu\EU Mõœ0Š’ ˆ€eY„EA³˜Çœ ôÌæ~[•Us£Á* 2¥@¢(Hâ€ø®k3l¢©2‰CJã(£8„x‘ŸØV._Ôu# hèß5%Ã0LÆ¢(©ªtÝày&À0€1ŽBŸh2ÛÖ„çpEžç™£!ÏKæØQe1Ü 3‘Í·CER?ýÉÏ=öÐçõ®7Éåõ+WÏæSŸºyãúµë4æšÍŽëxš‘ñý@EœžbwîÜ1 cìù^+Õº€"òŠ®u»ÝK—.za8ÍÍÍÀÚÚZ;©×çàà ÅúÆX—tÛµuIu]·T*e³Ys¤¿Âq Ñp8L%%•Ów»mIÄÝNgýÖ:$Q<´'²¨ {ÃR¾Ôêîɺ>S¯€ÿ3[quf: ßë|ú3¯´»}xïòûËYX^ºsçÎÁÞÞ‹Ï?›ÊƒÀçy>ŽAEŽ“!uN7;@C²ÛܯT*é >]byž§iZ¹ŸŒ†žçñŠ¢Ô`Œq6›LÆ…BaRQAZ°¦p€Ñh”Ö¬©òÕ²,×uyžçùÉ£ÑÈu]Ir¹Œï‡š®ð<Š*yž-Jœ¤HíÎîߨúÜg>Õkm€ÊÁÁ潫W®éºA–øQN7À±­("ù¥­Í(ŠKQBsYÍžX„PßóÂ(zÿÊÕ©ê lnlKœ˜Éë­î^­^MXoÐi@©R펜á¹+Î8°Ýá×7ÿþ³¯¼ “q¸žˆŽIj¥, | Š2ô»=Nà\×eä…z€‰(r’$© ãQ·Ûïtz`è™[7oº±%n§»ŸÍfßÿàÎÎÁ*¥BѸqþçÏ<óÒ`ì&>LgJ¼€Y€tƒõ|ókßÌjYÛóó•R¡’_9´(Š"C©$ˆõ鯯û÷ïoFÆöì0 ;,É<…H“4ETw·v[í¥tjfj¿½/ÉCçÄõõõ_x:Š\†adYf€c;ŽJ–Ae9%>|ø`oï[ßü‡ñh<;3#‰ÂæÝ #“;·nmnnò²àyöûWÞ¿úÁû¼À»¾Åþ`Øž©õƒl¾ JR®P¼výÆÃgªÕj[[›˜a4M ™ŒÁ0Ç‘ï{”&IBF¦¹»ß´‡ãù –µl›aY^–E»ž](äê33Ã~?!$ Ã8ŒÂ0’$a>qr§ëZF”R^àt]£L@(FhÂó\úsúq)Š’jò5MKµZÇÕë3¶e"–M51axžÇó8 Ë6½Ð¾výÊÛç~¾²º„CH´¸°ñ½{[³õº$ aäÇ„0 U c4˜ GcIR$Aåy!N‘eÛ±BÄÌÖg²Yciuil–®9tgýÎôTÍȽv'›5t]mÌÏwûCÇuiÂPʬ=šÍd`Iä°ÀÚ–ÄÈf)ËÊŠ*+º()®ú^¬Èºç“ñpâØ¾¡ê²(fõŒ$h–éݺ±ÞnuΜ~pªZ®ÕZ­f·Ýt»Ï?ýÄ¡ù™›W¯æ4ãÉGÎ^š¿¿q=‰¬ãÇNbQš¸þÄvN>=333±,?ðªå€v»=™LpŒSæêêjš{Ûi<üÀCŽã}ÿû?lÌ.´ÛÍc§ÀT­LÙ$‰(Š\úàÎ;é“8å\×ErýH‘@’$Ã0,» ©©£ÝÚM«Q#«Õ*ÆØu]Ûv{äñ f¦j0 Y2‡ƒ|¾¼ºz¨3nÏÌ̾ûÎ{°¸\úØÇ?‘°×Ë]|ÿòÉSGc`±Øh̯¯oܺùÁÉckwïÞÍddð¯V«íí §¦¦R8Še™©ëÆ´&éF”çyÌsŽãP Ëâ`08¤(ÊÈ÷¢(Jyc–e©F&Œü($ù|Þóüð½{÷( l¯7€„0ˆÅ$ §?]«¦:ŠŸ¾ùzàC¹\Ì`’+ï_¶íIúÆüñ›7oB]¿òþâ\Ãïß»²€\ÛÞ;8ãñ¼@agoRNȹ®‹àãŸøä»¿|G—u,Š–ï>ñÌãi<¡9:~ÚNÞ~ë–ŘC‡V)Š¢g•j­R®uYÿéë?Û¾¿²‚Ì$@q,¶-÷ÏþìÏ"Œ)Ïó¡­û{¦i—JÅJ¥¢ªªmÛ¡•••“'OBjÓÓ~OÏèAèY®md0 Uï ,?"+G~ãÿyn~ERt^ÐßþÕ»/\9Øk^]Ûo7yI¦À †¦ëø­VS¨×§ã0Fˆñý`ÐÄ1QµT*7›­ÉÄòüÀ >Ä7¤={jÏbYÖóÜ8ŽYÐuÍYºíŽÈ‹,Ã$ e6¡Äq\Y‘tÝ 4QU5 ƒ8ŽdY–ä2$Ž¢0&q’$I诹þñãÇkµÚ“O>yëÖ­+W®ÚŽ%Éj©\Da8$à "oY“l.ûÇü¯ËåÒÍ›·0ÆÛ[[ÿø ü(I’b)K)’8:<7eÙv<@€&“qB"ßóDIh¶—–☬߽†Q&“™ššZ]]!qÔít¦ªµÑ`<šwÖoßÛØœš™µÜ Ùî‹eLaei™©e1ƒdI>h·ß¿rÕv½£kk¦eÙŽKÊs¼,+sMM•'æ¨Z*È"¿8?ר/Ú¶yôÈjÖ0Οçó¿õ›‹ Ÿý̧ww¶UE&ÎèjèúC|Ï÷]íØ‘û[›²ª+FæÎÆf©:Åa>Õ`hªÂñÀ… EÆÙJu®VEñ­_ü–æç<Ï{ýõŸÈ²<èEYH%N†a¼óιG;›-çööö4Ms{Ýt¦Èqƒ†Òl6ËqÜd2B8€0Z­V±PK#A8tèض= (¥ã'Ÿ}n4èØŽ å¤Òl·,ÇoÌ/dò9C/¼øÂ'›hô³z¡ë´‡H‚Šø (ýí€XIJ¡÷×7 ‰Úí¼üò˽^ow§³·ÛM’$e¥ÈªœÖ QätýÃL˜0Ô&ö @‡Ã¡®ë”P ,{¢e¤8£³tYxé#í"!‘i:<ÏËŠÈP ÖñlGi`"BH’¤Û·oÀ`0Èf³ËË˲¬ŽF£~oH)M#gS b6›¿zåö›?ùWõ™©úì4tÛ=ÃÈÖëu?p ’¤Ï0Ûõ`C×ÄÒ„D+É\*û²†æC?²¹¹56-†å㈵,Bƒ>Im¦våòÕB±tc½æØùÞ~hdrŠ¢4·¶ IzôìYs2I” =7·°¬i/*‚¨€ãX $ІÃþlý¸‘™ÞÙºÅbéÒùK¢(^¿rY7Ôžyêâ»ï¬¬¬üø?lu:²Æ³Lôðƒ§_ÿ¦¡Užxâøî÷¿]«ÏæJÅNoà‡A K kd8Žó}ÀÆ QAgƒÁsŸ|‰„Qê^Z[[SUù'?yÝÐ Q˜0ˆ=yò$0˜œ}øAP%ív3@ú,fTEc­¬, "ø$DAÒnwó¹jZ{Y–5;; éq™jõGæ˜e«u¢¤<ÿâÇÞúùÛž6fÞüéOûýÁtu\ש׳½á@Ïd$YU"- ®ÎåržX£a.cä²ZBÉŒªÀÅ‹)¥)q6}”ʲ\(ä`8ò˜C 뇑ëºù|>ÅKŠ ;™Ø I’lsÂcN”àøŒ9 `8Žó<'Õ ¦’?†a8–Ç"'I%‘iši¯ õû·óÕéÚ©g0¢4LàáÏÆ^dÙ¦¬ªÎAÅ1¡À²¼5™°OÂHàx`b„¹{[÷à©§ŸL’$_¨üó·¦ËRt8ù D±ÝnwOŸ8Ù:h¯>ZoÌWgêðÍï¼úâÇ_*–«¿úÅ›/=ÿôà`ß¶©Ëmii¹3ìó’X¨–××¾ñ t5]öm¯1[ŸŒû†^9óÀ±ô Öe„P±P¾sg}uõP¿ß¿qã=~ô±§yãµWúÓŸF„’ο{æç©Yùú­›ŽüÖç÷½KW$áCwtÇ  û›ûæØæ8!_*泚€±–JkIÄ ÌúÝ;gN<êØ Š¡ÀOÏýxqiv¶Ò »¿u jBˆ<žç9@<ýnàC´ö¹EU‹B B–ZY ã Ñ‰25 zž×0Æ$J’(»¶¦d`ÐïîÜÛÓUC`Â×oE"Bï_þtZ-ÃПLSË(;½°”ËÀúMMQ÷¶î?òðÃQ»R*¥R1Ý|&IB „Äi‘rÈR¥Ÿ £Ñ(µV[cKäÅ("Iºöõ¯½ Ï<óŒå[åJ­×ÞßÞö|_7 àŒÒ,nžÍhº' æ¹gŸ{†ÅôØñ£óóóº® {ƒ×¾ÿcQPmש×NŸ=‘$ddvççæ§çîÞÜxïüÅ8‰ìÀJ#D,Q¶o¿ðâS ]×Õõ<Çqƒþ¨×ëÍÍ5<Ï®TªqS I’†!"!„eÓÈ2Oˆ¿¿·Å~ÆP:û@yª87_;sæø›oþøôé5ß7õÎ[O<õhLCEã39c04óÙÏ ­V»XÌišº»»•ËgmkÂórêç€Ô ›ÏçSÆ·ïû©¨eÙtš†a6› à ŽcÏw8Ž'$a€2 ¥”øž›u|7Ûq$IâxÎqœ„Ò8ŽEåÏó<¥Äó<^àÓqU…qDbK¥±ãñØ4Í(Š4Ugø$—-pÆ ‚Ðjµ÷öw*BlBðì¥KïÇ” £8CÏóxAŽFQeóYMÓŽÓT½Ù:P2òîÎÖsO?=7;z¾gY3SUEdI`®.7¼Àb™¤R­\¼pIVôéÚìÿó•¯,,-7™®Ï&„ÊŠR)WHòÕwMžCЬA’(’Ôëv’86tMÅ$Ž1$Ž®\º„xìÁ`8bYvb'ãqGi¶»[;;‚(¼õ«_©²" ¼çº,Ëž?÷N©\”‰$¤X©ÜÛÜ2rz¾¨)Š,w}ýîC?º³³“1tMU8ŒX–! Ô#uæøã­nׂµSGO9N™¤˜Ïs˜3íõï½¹yo;ˆbNâ?ý¹O àPÌVJ…¼šý³÷¿Ñ˜†I¤äU±,B EA>ôè™C+ ~àŠ¢2ºŽã½ùª rµé’¦*æxR¯×˜´¡¢(â9É2ýï|û;’,6 A`¬º³³¹°Ø˜™­-Ï7²¹,Ã2”UW76ïF½ßÿƒad2?ûé/^úØKÕj•ãðööý$‰ FÆHb’P&M§ lº®DÑ ‚ ]„¦lu–e———Ç¡0 ð”eXž žëŒFU‘Ó&ÌsBBHÊP®T+!A1ÆFA„ÃqÂïû’$`Œ¢(Šâ€Rð—çyY–MÓô’¤¦¤kJ€ŠÊ€€ØO~öeÅP8„5IJc?þ»ÿúuÄqÇÆ"÷Ø`Žd‰/d³;÷vÖoÞµLÛ'dˆ(ƘgÅ(ˆ^üØs,Š1‡²›»®ë5›Í|!ÃqŒ¦ªsI’F&mPRò‚¢hÛ›;¼ˆ××o;žë8îgL(;O;ýq¾X½~íf·Û¯V§lÛ<²º\Èg^ýηŸ8½¿·‡1wp°3yž z$¦šªM3mÃ3™L³Ùüµª?D¥AméªIÓ4Ó4Óܶ ôƒ HhÌCHÂaEÁÊÊ2MH·Ûu]7 AX„|ßÒ‡$!é+ ŸÍe]×Fˆ #<Ú¶†Çá0ˆÛívJë‡iOé8Žªª‡¯¶;]ÓYY)• =öÈ¡•EÄ€!{ûíþ~s82=Ç L–Ä>béÄž¨š>ۨ狥µµµF£…‰£r1Oª\­×ê¥bñW?ÿå Ï?ÅcÊЀ౜†µf3Ù¹¹ÆÑ£+Q’´:½G{ŠCb1_¸·±Î$ñìtUU„$ŽhB‚ ”Á>¼Š;™˜i–âh4ô}ÏóÜ0ˆŠå’뻘GAÖ¦ª9;77··»wsýÞÖÖÖÎÖvB¢ÙÙúÍ,/-H²¤ê:¯¨ª®þâ—ç2¹IØruF””ËW¯NÏÖyO¯EÚQ¤FÎ(ŠxžKóFø˜G1Ï' á0ö÷ ¹ÂÀ4Mš­RHXÄ€(Šˆa¯^½‡‘ "Ž£8L€ÀĶTQ!I$r¥Äó‚TåùÉO~zbõ(ã§giÖ ‹E–ÅQÅq4·P:z|¶Ù®»þ‡Œ†­ÁhtõúG}úÆúÍgNÀ…óo# W®ˆIìÝÛø`éÐÑTuñÒ¹Õ•%–×um˃H’¤´`žžN)Û¶9ŽK;ª´ÁJK"ôÓÔjAÊåòhdú®­(J ¹NÛABÈd2‰Â0LZõ~¨–*YÇÂGqÀq!i€ Ã0Mmh·Ûªª®®®¦^ŒL&ƒ9¶×o±,”ÊùÀ×îomÀAsÛõì¹Ùº&wïî߸y÷äé3€9Åv'”¸"‡ºžÉ‹ùƒv®_¿~øÐaHh¯Óž®Ìp,úî÷¾>ùй‹—s™K¡˜/4*¢ P(W´0NœQ­Íh¥æýÞL%ùây™…•¥º(²J¹6êÜ¡Ïç΀‰göÇý‘=œžžŽ¢ˆG\š{C~?úø±cÇúþÏßøù½mÈ*¹ÍM„PÂ@oÐ-–Kc×Û¶m¶Ú<þøþAG³­vêÙ|>ï…^ºÞKw(éeb&Šb Š"ï›K‹‹¼€ƒÐNomè´º¾²€R¾æQÚ_#”å‘ùQÉh<ˆ9Š09<Ô3Š"›fOQ$Û¶Ã4$ "Ç™lÅš8©­€ãRüI Ë\’$ŽcöC[UåLVG6€8˜cfêÕ˜Æk'Žüìç?9sö9º|h¾~ïî­^ïàßüëÿùüåí{wï@舅^¯£+j·Õm´–Sàööv:·ÒuX&ð>¼YSjêèðX,êFJº³]×ïwº !™ŒæXËRIJé͇1‚âHèhdfr9@€b¶;ÃR©`š#Ã0Ò¦©Ìîîn.—Kà wvvÒ¿*mþ,Ë©MÍš~·µÑ:h' /êŽãüùÿþç_úÁ‰¯Ï/.ÀÍë7ì‰Ä5¦*˜677GãÙ;gNÞÙÚ%„AÈqÂå÷Ε 9¨M•$ŒÚ]QιÒC#UeÀ¶z¹b†Dq³=¨/ž2Ý& I¥Z€v§U.|ß·m7¦Ôñ}×s I!¶T*¥…“ë{Y½ãМL&ùJîÍŸ¾Ñn·mÓÝÜÚ™86û{¥\. ]WmÇdWMÒL)A*íìtLÓ€|>+²¢c;E]¿öÞ…œ,6·¶ ƒím†ç4Ìêßúæk +5ê³ ©|„<‹Æƒ~%—ÉéJà9ë·@×u=›eA’$×÷¼ ‘„tnІaʪ†çy1 S•‰gÛa8F ¦I¬Ê2ËD ›dŒ$‘O)õl;Ý'I"a |ÇÖÏç³»»;¥R‰a µµ¤¤ö™j…eYŽ…éZzªdµFè"¤l·âÙ¾µÍI dª3‡]=v¶¸´øåÿï+Ÿ}å3ž5š¸Â$s™+ãC+ùæÞö¸Ó€„!‘ *1Ãýów^ËiüñÇ`©Vj¥sÖ¤ßÄ”eôbµ0û{»·[{ûí~Ì8­]F@™Bþö½u0r¥þxRʬI§Z¬•´ìímó2†¾ª«”²4LAVñ-ˆ¡%Ë…ŸþìÜx4±,ë•W^€Z%{ñÂ{†.rú¶í.¯€ƒƒƒ(pªÕ©\)ynÔé<òø#°yw]8HëÃ4Ÿñ×ÐÆ€ZmalY¿ñòËŽ7|'k¾y¾ÿýï½æI‘J­òìóOÚîH×Ôb¾ÌqÜîÖþ{ï¼—ËeZí¦‘Í·Û^†©N•Ÿ~æ1ϳ ¡‚ <ßh4ªÕ*PzäÈ‘J¥ÂóB¡PHÃz>ú—úž)y8Ž;þB§ÓeYd»näAwïÝouzÿw_cyñ÷.9zâÔ™³w1f¢8D$ ¼ªJ,‰#Ý0XÄM0F M¶wv9ŽÃÇ2ìtm:ýDRjZ LÍ’é-ˆ+ŠBÆÈ Ì%qD!‘D1¯È²êû.04 ý˜DŽks<B_Q^àÓy£ijšáë8¶çyæÐL;Çq¢(J§`¡ùÅùn¿w°³ëÙŽ(‰!‰¡¦;é z—._ú½ÿñ·½~à9ª,Àï_®TŠÏ!ÌPÄ0˜™š2Í1ÓjöŒLnd:˜Á­ƒÛ¿òÉ ßµ×ïÝ_XÊ«! U1 _*•ì ”ó¥\µ6r<`˜‹oÿ²XÌsæyd;æ§O^ûàZ±X0ÇãÉhlšæââ|œÄ‰$Ë1I0æ\Ïó}/ˆcÃÈlmm5›­?ýÓ?í´»Š¢,Î/¼à{ND˜E¹lŽaØÑØŒbâºÞÛoÿjzjJTµêT}4žøA$Š’çù±#`Ø´¿OQ&é” ]TÎÍ­L,»V›ª7¦ ]êu{GVŽzæ{ßýQBYIÕ\ÏYXš†cY AäôÂðzBC`À¢|¡”P@ˆŒºÇŽÎåtcÛ¶yŽOÓ•²™L¯×ãy^’äôé•~oÒ³8ýq<žL&)Ÿ'I’¿ü˯=ºv탛.^¬Õë£ñصÝ$I0Ïooïx^øî…÷&¶sâØ±á ¹òY=Ž#Ó± ›8¦4¥÷»®›¸T,„Qຎ‘5H1 ´ZMI%I”e)Ž£••CŽc§ÞqN’„ê†î8~Ežçæ y^xq[®D‰«N•*Õ¢ bYâ82G®®eÂ0VÙ²¬tË"À¥/2±­0ŽÆ‚(Ê¢$‚ëyŽkGQ´¼¼„~oЋ¢`81]ßûÃ?øó™“'Žßºv£Z) ¿³ußÐÕJ9l²±±AIòØ£l¬oÒ„Éå [÷wêõù7^ÿ‰®ðŠ€½ÀÚÝßçÎr<°~Wªå频ÉfTM±½€S²·¶v(/÷M»R)×K¹ tX “$Îe3I=öèãWÞ¿,‰ ò^àss¼`96¥€1m;C#“‰Ãضìb¡8è^íõù¹yUU£(:ÿîÛ¥b©\,õ{½n·‹8¼zøp.—ØÓUmqùi;¶ïOMÕlÛ‚@xšP¡T¦—ݤ¼Ë$I×Å0 D‘¯×§!¡Íf{~¶¾~o´„1², H’Ê7ÓggEéØÌõ„PŠ=û5âž ‚ Iâá°Ÿbynß^€R±"ðJ¿?äïNFbÆãÜ»s‡åEMÓâö÷÷«Å¼ëÚšž?pã8’$©\,moíhâ‡BÛlÖ8vìèÛïœ[YYÙëuÊv1ýÃVV–ƒAÊÑÀ7›û’$qi ƒ‘ëú‰ Ý £4Â!‰ ÃøÐNDHJ`ßó¹rÊÆ’eQ–Õá°)ĹÓ릠P(Ä á±@Fö„2¿Ø¨M•ÍÑ8AÉC?…bihN¾ÿÏÿtöÁùZuúk_ý:šlÙ#‡µZ­á—Ã(¾pá‚éØMÃPßxíÕßþìËaàdó¹ô³²"OÊå.|péw~ûXlÔþƒïµzPѸvwk~uMPä$Ù7d^V2’Œ`oK¹K—ß;yüD¡˜Y]]¼Fãx¢,ŒÇ6 à8ŽçÓ†GÙîî¤Ê¤(Šž}öYÇqR*·¦ê ‹ãÞ`ooÿSŸúT§ßK}öªªÈ¢zos““tAbBSV!(¢ q\J1 ÃuÝtz%˲xQ+Ê_üÂ])—óÕrõ¯þËßܹ½¾y‡ee93³ÓµzYÓ„Œ®Õ§fuM¿zéÆÞÎëYŽëp‚ BaŒ{ü¡©Z1ІB’$¾ç¥Hhßó<Ï‹ã8¡¾Ãð'iŸ1šX&Ë2ÙlîÕW¿Ûét|/2͉m¹’,-.L»ëÔ©óz¡\2Çæ±ã',ÓªTÊÓSUAàŠÅœ$I i’(²X)W9û® °,Ûïõ2ÙlBÈA³©*Šª(ø×Y鸀a˜R—ÒéÂÈq¼n·?]›Ã0 EQ9Ì#&I×]©äœeÙ_ ó”’( ù‚ã8AºNhŽmËrö›‚À§Á/år9­4RBÛd2)–Šª¦QÊ(Šzíƒív§X(áó_¼{çîâÂÒ/~öÖ[??g™–RÏ JåüÚÑÕѰŸÓó³ÆxlbŽ—$ÉóíBAoÌ‹’$_(¤¸B#“3T½QŸ¾uíª9î/Z½·ßNÚØën·zÓ\ZZy4êµ7”$‘aØ0EApm·×Þ¸q{8ÛÖIJ­¨ç…®³,æ^’ÅtêN\UVÚÍÖ£=r°»G õ]ïÆµëƒ^ïó_ø|·Ó3GæÂü¢çù·îÜ)•+†ž)•KSµšQ/EEãE9Š ‹°,I¼(ÆqôQ"CšQ˜Î°â8Áð¾ü¥nkð÷ÿýï~÷w¾¸´eÏw`~aFâ@³­ƒ¦$f®]»šÊg Âc‘Ù©òþöN®T{ëÂÅÇžûÄüjÅ¢¼¢kª"µw{ÖpðêÏ>xö™³ðÀéãnÓ0ò®ë…A,p&ïI¢–ÉüÐK’Ðö¬´²”9%U5›Í$IjµÊÞÞÞ§?ýéô¢ïîîj’ýð’È2Aª(ŠëºégeYIX Nлró½‰ý·¿ûúå÷.ÿÞïÑuÌ ï#á„‹4.±;»º¶ÒàÌóÝo®¯_ey.ei5cä«Z}z4Qˆ\_BjÆ ƒ1þ0sœ(мÈ>áy‘L„.°lB!âx¶ ’$¹}ë‡â8A(á9æÑGžvÜVĺ‘€N@“¤Ól z•ÕÏíoo‰Ÿæ ØvÀs ¥Ä÷ýl6_xH:1Ë"„FÃq6›ý0äá€aÒG£ïû”R熀\®à¹­Ô±ËqÇ J&ƒA_E ˆEŒ BBiŠ™†Pð aB¨ëúƒÁÈ0²à8ž¢K®ë¦¬t@›mlÆûûÍ|±ì쵪Õ*ˆ¼´·³«,Î÷úCYV8$:ŽÅ Æf—“²ëw·Ë™R¹Z‡~@&«É¼Ðl¶U5“‹k3ÓÐnvŠóu¸íV_Ós_ýÆ?9a¼°º ë;Í……¹Ýíû†$ËE¶˜“.¼{ºí–j(…\^Óx'uCçpº¶ÀAà1,E %Y–=ÛÇsQ|êé'.^¼(Š<@R©”àÒû——–6nÝýÁ~0;ר;ØŸ[h–¸kÜÊæ YYs] ¢¡êà:þL­ì¹(Uá¹®›VqéWel:yòE§¦ ¹¬ÂáX˜Ÿ¼þš5צjq„²…|­>“ÍçJ¥©Œ^ü‡¯«ß7w¶÷Ê• Ë‘L^«7¦\×\]]Ðtiiq&Š|ŽýÀ ‚@’D˲Â0da B˜ÄI’$ÀP†ab¢8EÑ÷xûWïø¾/IÒg?û¹8&ÛÛ;Ï>÷´m{½ÁæÆV¯Ûó­€Ãb·×?´rH义9  áX†’D¡ª!AG£‘’‘XÄ(šlN#“õƒ(“ÉÍÏ5TEtz‘挬¡iš50,Ɖ©ï†IL­‰ ”2 C–†‰ ¢H–Õ ",æyQ– qüxbùaœ+€˜&²ª‡½˜Ä”$„D CiqD¦ªÓœ~ðG?|MUô($4atMš° úž$ ÅbN‘ÅNçà µ’0H2Ötã Ûm„‘Ôb’ðíVÏõËWËE‘ççjõNkP.Îy.{Ðï<õøc®Ùç1S2dß6ïoï-9U¬/]ÝjR^<~ú vwws¦\¨Ë{÷·¦J•£‡—‚Ð-²ï_߉i´Ûé`YY>² ˜b&@Hô‡-ÊÙ¬¡jêh`ꪱ¹wbOü(H˜dóþ=ŒÙíÝûŽ3©×kˆ^PJùb.››ššÙÝÛ¯ÔÊÛû;{û!‰ºC¤”¢Ê²ÀsŠ,‰ï86 /ðaò‚†±í¸A‰’:™ Ôÿýë×ë·’8b(Ÿ[yäìÙC‰+çĤ„è‡|hwsZÍ=AŠ_ùÍϺ ,ž®G@4qmÄ ÆX¸ô fYÐu]’š0¢(GaÌ"ŒÁ†¡ƒÁ(û¥/}IUuHú+++ŸþôËÿôÏ_«×æòznßÞpÜ _.§Êãñpi¦æûnµR`â(ðmÛ9±Þ˜ ˆ?M ×ë‡aœ1r£Ñs¬¢HwnÞ€••NF£ÂØ ƒ´2Iƒ‡RÌ%!$Žã|>/ŠbÚH%QŒ2 #[–•%I`¥”„‘úÞÎýñئ1“–Åùb®Ûí.--I’”æÎ¥e@6—YœŸ»sçN³Ù,‹õz=­(¶··ƒ HBO‘%‰Ã‚ ¤ÙnŠj\½~»Z­Ž†]^À=tÆžŒàÒ{K¥©©jM”¥`Lò·®Àâ|ãÆõ;Ý‘5»tøÜų‡çØèâùŸÀ©cKÞ¤¯Ë±µµ±Ù î¨äàÖÆÖpämÜÛí¶ûóóó>p2—ã ¹Ðh4¦Ê•k׮ɢ2 ’,߀J¥¢+êÝ»w¯»qãÆãW}ûÜ9–³ÌA³\”$4¦©O×õÔ|AºÌ¤”BÌÄ1€TKeYvÇåRÕ¶ýZmTU?88E<õ1Æûûû¶k[> NÜÞÝ)N•UUf Ñ5íà Š"1,xylš•0vý¨ßAÁɾïW«ÕÌ…¢ IDATá¨÷àƒÀ­[·DEFaŽCåóù4X!½“4MKkƒ¢W`ØëK’Ôív+•Jšƒ\×VTÑó|Qâ}׫×uÆCLÓ2M3•¼˜¦¹²²’¾`§ÓÊìíí­¯¯§íZza¶··1Ææx˜‘yž¥ˆÆðöö}°œ —/qxÕë3æh”Ñ5øÊùË×_ûñ{ï½—ÉeûfÿÖû—1Ë€¦çX%ºìw~v±:·¼3èKÄ>{|¨Ó«T,ÿþ/þÚòü8ô]€+Ü¥1ÔªÅóGL£ð«_ýo>&PÈeç×(’f¦çmkœÏj^Š%PdùæÍ›íýf£Vÿwÿöùò—¿,+R£Ñà9®ËYCkzºö /L&ö`b€é¸•J#j§“JQÓÏ$IbCVY–ãØ¶L&“º!RE€òÔêÓO=óècg³å7ÞøÅŸÿŸ_j¶úårU%FöO=xêä©‚Ä ¹ãkGŽ­:|dé‡?ü! ò»ç/·Û£$Á;;ûÓµé(¤<æ?BˆE!ŽcE‘B’$¦c³0 0‡’€$É<8¡E!¥c®ßýòo‡ãAØíö‚À}ü‰G\׺xéb.W Å,‡1®NÕúÃÁâò’¡«<쉇% e ¬ªiœÀ Ç#Çö&¦†¥‰ëZFFSigg—ã¸ñФtÝ‚ˆa̰(BYVR BRºj:~ò}?‚|6Ç0L6›MG‰)©˜ã¸l6—P‚Æ;¶å9Þxd&†â$JbM7óó¼(Q4›¶ë¶;ÝùÅù(ð …‚,Ë{{{­Vk?Í¥Îçs<²$2”v›Šªˆ¢1t^8Œ1¦Ï+’lÛ–çyoýò­~¿' \G Fà:6‰£N»M¶ÝSÄÅ4’ß·öOmèQÄðècOþõßüáÃg;½¨XXèösVóÅŠ¢(?úÑžxòÁc'oïîÊ’Ôk~õÖÅÖAó±Ç7í ‹˜Ñh ˆ‹ á9žaEUJ…âp4ìõûŽåt:ÝA¯·¿·ß:hB¢„R–ëô­ ¤ùB%“ɤùö‚ ¤jÉ´ŽOÂñ8Õm"„¢0Ní¥ARš xåw~{8±ã˜ÛØl…³ÓÚ_;±³1–q¡0wlíìAËt-òö/ßùÏÿ÷_ü׿þ¿ñõo`†‰•­ÛG¦ ++K ò ‰ãã$×u$I ÀRÊq!¤i…Ä÷}Ûr$Ifð<7 ØD’Ì3, Ë—?h·ºŠ¢I’̲ ϣǟx(¡ñþþþáÕ#®ãùA”Pª™ƒv«T.É2—‘ÐÄ4󅼬H$"¼Èi†:õQìR9¯j B€0,.ÍõzÝl&£(Š"©©°5&$“ÉøÏ"¤iZz¥ßlÏóDQLpY–ýð®õ}MÓÒò EÅGQdš¦išã$!aèó¼à¹¾m¹öÄ‹#bd /pÓœo–eÓ\$BÈüü|G M0Æý~ÿùçŸ/ ÓÓÓÇßÜÜC" <  )JL„P%AD$I T*S, žxŽ—Q”xG”&˜Ò“k‡g¦*¶5éõz@áèÚÚ{çϹæÁÇž{:òü8"ÍÎè[ßþñ+¿ùû¿õ…ùî»W)(aX$y19tdõþÕV¦ó„!’Â/Îή,/ò…0o¯ïœ{ûW…¹™F=JÈþAÇv]EÓŒ8󠦎çó¢ˆ8$kêêÒ!ž†ÃaeªÒŒ'ŽïG”RFR5E–RµŠ®ë©.•¤!Ä¥§!$è! !À³/½ø“7œú뺎k'½tñ˜ì•nݾ½Ñ:hÕë³O<öD·Ý-ª¢$º¾/(Cyž/-Ôã(hO,G8J“ ðb–Rš"Ÿ$ ¥IG’(ñ<„¥ !±ï»„Ï þ¦Þ3Ê®ë:Ü'Üsó˯r¡T 2sÅ Š2)+K”äi»ÕZ¶ìåeµÇmÜín»=cÙ-˶d[²%z<¢d‹T¦˜I`ˆ\(T~ù½›ï=a~œ"fê€*àÝwß¹ç|{ï/üã?ü“É\Á¥’ d~Ûm7Y=vìEÛ«fqqæõsív¯ßH€w¾ç]Ý^û]oÿ™ÞÆbžeRJÁ‹N¯“™a¹fk³e[–ëÚ£RÙ±möꫯÌÏï †Á(d¦›%™Êq½Ñ(0-›1+M³8N¢8Ô¬BÝRÁkI ÞnA)ý›<Ïu¼vÖoÍ´X–eJIÁE·Ûç¹@)Ûs•ËvlÛ1˜I¨aZ¶a0Ó4ëÕ²^ÇSSSÇ?{öì™3gšÍ¦à…ïZH n0³×\XŽï–ÊB*×¶¤×v³” ¡&ÇÆ“4©W«—.^Ø¿oQb~nÚw¬fµ²¹¾æù^·ÓqMû–C·\>·úìó'Ïž½bº“ ×Üð§ÿë³øÀ/DqØÚ¶ÏƒÍÍ+Ô6ž|î§ÿýÿÛþñó]gblrjjÛö¹í—–—_|é¥s—/ŽOMV+U¿T ¢h8Qh˜ìSŸúÔk§O•üR¹\t:÷¿å¾ååËAÏÎ퀃(CO(YhÖ!DXõcoY¦”\cYŒ±’[¹bhk±þÆo}úí?sïÇñCs“ÓÿÏW¾6Õœ-Rˆ£DäêgÞöà•¥K»wï°ÇáÊòR–̲Ç'&ˆe`Œ‡Ã’üÁîw†˜&²²P F0Jõ΄Ò4í÷{:³¤ÑG.ÎsÎ k}uíÕ—Ï4ꓜç”!âí;Æ÷ìÞýÌ3/Ö«“é0E5ÆÇ«ÕÚæ¨7»}ªê9ݵ5ßqmÛ BˆN»½kaÞÀ$Ž’`4rµ˜R ’£Éæ´MY€ã¸Ã0šžñË¥¼(¤R¶m#Œçº3tSÚó¼7·BWRÊ,ç3×K³Ü/•©Á„TRÂä9w7˸a±Q8¨ &À1¢Bˆ$I(¥„ÙÙÙr¹Ün·KåRoÔ[i/Í.L÷Z½|°ßÖ볯¿>èu%ça @A’ …ˆSªô‡Qšæóó;â$1¨ÉL“PŠ j6êQeiRò\¤ÄsO?eÛF’„’K×/mŸ›ÏÒ¢Zž9vìµÕÍ( ÅÊZÿ#û„ä‡?|ì-÷½é«_ýëßù_ÿµ_ý¸Wu¾ÿÃï<ôÐû5Ÿ{ò…Ÿ;öêK/bæ¯o¶vîÚ].W'šcÝ^ëÂRk½»Š¥êöº–åìÙ{°Û,]^îôºÍ'÷½•Å¥7ß}×…‹—¦ffw.\sìä+ãÓ¾ïFÅÚ@RÏ/ Ã`Œ†Á˜‘ç™æÈcDµM¾AåyNàS¿õiÇ6)"k­§ŸzîÜ9M3Íó\+´ò<ÏŠL=ZA€1.•J:!–sŽÖáX:ÊBá\×µ,˶ÌÁ`¦‰Æ¶méRwcc³(¶ào£ÑÐ"º'a‘e¶i(%…i\œ}õt4 k®¹oÏÜÜÌx§Û‰Ó|˜æŠãÁ0˜™™2˜Á1¡&ã*÷+6aH#JMÇ*kNÆi%*ŒDµ>SoÌýè'/ÌïÚðö›ÿòoÿvrjìmÜ÷Ïÿòõ`Ø+DöKÿ¥þÜ{W×Oæc¿ñݯýÓ5Qýv6¿ôäK_xäKŒXͱ霘Ï?ùÚ¹Åÿô™¥ó§wNM¼ÿýïžÝ5~âÔ+—Ï­/¯ld™ØXõºéîÝûâxÐé/Û68.½ÿÞ·~ÿ‡?űĬÛ®¬®ÏíØaÛ–É !y¥RÑ @Ƙ~†1ÆR*Y(ÁU‘qP# LyQØŽCO/­Ï£f³ùÕ1Ms8†a ¨€Ÿûà»o¼åæN·¿º±ù•¿ý²°cÙDP„Šãxnf:Ž#ü4Ì4u,„–éàxx#ÞX/‚«#G½J¥ÒÆÆÆ™S§’$ F‘„²b`šæÒ•Ë®ëžçû.çù¥KÆÇÇõUõû}­.̲Ld·®¶£ÑH)åû¾V¨j)•~ƒ¾ï#¤’$‘ІQ­VõK´6{:¦×ëµÛí­œÎ8ÎÓBfÅíoº.IG«­µÎjo÷®o¸ë닯=I™;Ùo÷‚¼}º6¶MFyÁ0ˆ] ;)PRbÇÍ¢‚X SæWÇÎ^ú” ¨œ<ýÒ/ü“ògŸ¿åÍ÷·×Vßñà[àå“Ͼ~æÜ·¿õØ¿ç±7ßs÷ïþáoýÚoýЕa«v–óµÚØÞ¡9:|÷ý Ãø^ÅožY\üïú§%bÿò}!ÓbçÏžyü§ÇŽyʵá­÷¾e4ÀóO¼´°k÷êFgjnaéòÊ}÷Ý7 c. ޤ”[äBhü oî´ŠgêŸÑñ daß¡‹/õ»8Œšõ©gž|€˜6«T}Çq¼Ævl.øÜì¶Çûn0EÀçEšç/J~©ßïÞzËõz•R B‚Ë8N`Çv ¦R¨,Ë’e9c¦eÚår%ŠbJ $¥R ”„xøÊ~Ó÷ÊA0”Bùe¶wï®8 Ïœ=×ïE“ÍqDzǧ§ªÕj©^½ñ¦ëýö·‘«ÑhD ƒ1V­VmÇ!„„QTE–&žçéR[¯¡:5 „I’$Q9rd||!4ÇIÓtjzÚu]M KÓTÛ%I²¹¹9«Õš†úaãœë]QÚ“Þ÷=ιöžÞšÞQ#K Ïóôãºcǽ‘„aÈ “HréÒ¹F½âY®IM\Iqöüéa<ˆJ ÆêÒâz¯t{£$Ï*ŠéØ %ÄM7ÝXd©aá$Œ•€<ÏÇ&Ç‚(øùü¢ÁØü®]o¾ûžz½¹cÇλï¼wei£Ñ¬!’çyòïßý×_ùï‚o}ã»?þÉ3•o¿ÿÍf½êï*-g—¾õÝÿ{_­þàÔá±–òJŒ3ð˜Q”Ìî°oäú}‡O^8w~scº>&¸¼téì¡C»ÚVrÈ•¥ÎÒÅåÑ0ê´úÊï|÷» 5ÖV7Æ''¥TƒáÈ TI… &„hbµiš–eiñæp8¤„ê¿ÔßÕ_cƒäÝø¥tb¼izúµ3Ç^|EHÔéµ®½þÚJ¥*„zýìùþ0X\ZzíÕSI”X–eZ—¢’`„°°mzó-7%qL©vc¬Swó¼B–JeÛv²,·,»Ñh˲œŠ1@žç‡#àíÎÊÚê¦jô½–:ÐlL¬­v·ï˜O‚Hp1ŠÂ(ŠÂþô5ó{ÒQZ÷Ç7[ë·Þy›¨>VÿÑO~<ôxÛ};æÆâè²dâÅÓ+ÏÿôåG}âGž~ôÔ)>C¦§v'˜ÇBôâJµ±‘Œ–»›*IÆ-oqum†¶íp¡8W+Ë…‡¯»Îr¬©™©Ù¹mžçBSŒYq3Ê„’`;¶¦Ý†¡—£ÎÕ¾áWáb–eº¥¥?SJ €²çyŽ{üøñ;ö÷GCɹ;a:Qžhmv׺xþB–ÄzHj»®f¼;޳}ûv„F$ cÐxÔ÷}ýpè&PJ ƒdYB)5€£Ï>;;5;U+¯\<ï—¦ïºó¶±É‰`Ô€ÕÕ%†ŒŠëßtÃõñ(t­Ö:ìž_ÀD&qXD!ó,L±Î'Ió¬\.3Û‡Ýî0ض«¿EÕHZÃy}k@§ýêoíÝ»!tþâxž§)cý~nn.‚¹™Yý¼õÓa +)%!¤à[ Öqœ^¯§O|Îùp•Ëåf³AµZ½zÆé8LB®rIÐ5öo¶úç¯@©îw;½ßûäþú×¾T¶ÅìdE#æW^9weeðÊë—rÿéß»ëîÛo¼áY@ ¸¶åÙ%!,þòÉÅßüßúýßÿ½õåÕ"éæÜÚÊæêbkïõû÷ï>6λ–ûÒKÇšUvÛ䎃ó×™ xüûÏ)‹3H©Šð+?9ñŒyñ7å“Ð__ÿÎW¹í­w :#CTìœßGO¼Tòü7ßõ&J“,/.ž;|ã!À†5 7 âÄ0mÃ0(Åyª¡ÕíUôÿûÒŽþ•1¦?,=,Ð WôÕ¯ÿ3Ô+ Ûÿȯì\س²±N˜ñÛ¿ûŸ ÈGeU¿GŸù½ÿ£?Lo›€¼(lÛ3(:wþÔß~ñ içi¦_ɲ3<ÏFZv [æ&“°ÈbYä8“nö<þ,Á¢¹Ýó+³Í™Ý½`(U i8:ûÊë3“ÓcÛ&þý±ïÝ|û›V×7à†›nä"­U*ÝÖZÉŶíöúCÈ3a¹žTdéòÇq˜-Ë"T_••¦ñææÆXGŒêÅJé÷û–e¹®«K~ÛöÞøùT{ÿj{¬$‰ „ Ýn—«8É ¿T²¬-þu.rmƒ ¥Ô:½¸“0B !¸’išÖ› ÀXo£a”„µ² ºø6Ø6;Y«ø\äaš1bEƒxª9|ï‡ãAöGÿã–Ëå_ùµÏÌÏÿë×ÿ ¾ûè÷v.ÌcÊNœ|é»ßýŽçî]P­Ö-fîšßq`÷®OÿÆo‡òfµbzÐ4·Ýzý¸­J±ÜäZŽúaùıUÉ©Œ­­oî»fµ\Š˜ïÛµzc(x&×gºa2J·°éÕ5ºµ(єҠ¦^¦Z \*•8—ä]ïûÄì´»/wäü©3·Þ|K¿ÓeÔ Ô4 cZd*Ïù`-\³3vÏý÷ÕÇËçΞ~î…§º½Vs¬‚)—2Úµ0sððÞgž9Ñ$[ßh_ã ËË‹/yê£ÿ A‹ÍÕ~F"Il˼ñ–ë3ÂCúݳ+ë&5 !«Í1`4IòJ¹víƒY—ÏÌÈRÙOÓ„¤(85˜ãzÌ4 Áº?¸eú”ÊóT*Ž ÒíËQÌ@K…:Ý.y×{…&'¦ÿçýŸû÷îowº¦Ã>ð¡÷•*!(ÏÏqMÃø«¿üËZµÚév%()¥ëy¾_N“ø#ùRHŽr]—R*¥ªT*Z>{µ’Ðþå\(DX„Eª<>ûÊ JÕÅ‹ë«W|Ç{Ýn8=7ÝÍ72‡aJ¯T²mçÚk½öúëŸøOŸ8qò%Bð™³g§§&£`(òÜuÍ8JmÇ¥”:ŽÛKÒ´àÜ0  ¥Ì‹¬(Š<Ï]×Pú’(¥Œ1˲´…1æûþh4²,+ keY¦i2¥¤Vhº}’e¶m;® Ò,7-Ëó|ͼ´l‡1³(¸î~4Í©©éfs¬ÓjK.õv"¥Ä#ŒµËFÁ3© BïzýþÐ÷*G_<¹º²n27gêöí·\+òȵ Çu<Ï£ÌÑòâ•d¥uákGƒažÛwñ¦›¦½Þ€siPÖï~©‚)mõFO<óì®={¯»ù†ÇŸüñãOütnn¦\)Åéˆ2ÁyXo833“?÷þSV.œ“J=ÿÂQDÄÔÌ8ÉჇZË›Y”XàïsëåÕ~k-BÊŒr5lu¢<&qްå¹÷Þ{Úoµ“$uªuJi£Qs]›1ƒœgÅ–Ç­”šƒ¯½išš­¢”ŠãÄ÷]„PšäB˲1¦išEaÛ6ÕÎðŒ™W–VlâHQ(•7Ï<âXöÌöñËç•õz}|b"!$2­4E’Ÿ[<ûž÷½ûóõÍñq¸öðAÇ2fÁæF‡Òë¯êË[^[ïŒ1£ìWÇÉòD/P]6B´Ë†&NLL0ÆÒ4íõzããã¦iÁV´»eY–eù¾>%Š$ÑoÄ!Ôl6767£(Òo¼T­ôz½<Ï5£`8j\kê(9]ùº†¡åæBr. FY0Škõñ"<ûÑm7]ÿÀ‡6V/zž—ÂrmXZZ–/—êuWkõrÕvO¾~>÷…¿¾÷­÷-,,\8ózq×/R@˜$–ç<ò­oœ^¼0Õ¬’œ½x˜¡\›š¦)8ÇH,-¿vÿÏÜáøšîhÿÛ¿~ã©§_lTJ~hvsui¬> 3S³‰LýRCÄq‹T*«Y€L jk++G_~er|œØcL—(z@•$‘icÆ,Çñ`0è•ËeÍÐuÕ¥é Fã\pJY’z€(Šh¥R€Ñ0‡£Ñˆ1ÆQAVz±Z–uæµS†aôz=f™¦iJ@©,K3˲üZµ?èšæV¤B¤( m,¬Wª.0Æ)© )Ò’çxŽøVlF¥ZÊóœ#5;·íÀõ×SJ ]™EQd Ê,óÒÒ¥ùùyÓ¶@r¼öÝN 266¦oM†¥’ïúÎ`0Rè9ž~j«Õj uÿY³¨®"wÍcD­¯¯{ž§ !s!±Á.2„¥ÁpQ»víÒ˜5Œ#Xj6›išk,@F­Úìõz®ã !0ÚZ‘ŒÐ Š¢0L†¡åØZŸsZ ¶6¼Á }ú§OîÙ¹_þüïÜzï›ÿÓ¿¾kþšõµË¶ËÛ€4ÅýáèÔ©ÓŸüÈÏ?{ä$²ìnŽÍM@?üµG¶oÛvïíw”J% [# hÆóí;ç:މ­‹V¨ààþ] Rß-Y¥” ±9ûöíßmÜpÝMÏ?õÜ7¿ñ­oþÛ>û—úÒñspñÒei¸Æti¼/“XåC3M†›žßQ(uae¹V©4êõ0 Tr²Œk•a`ÐW¥WˆæŸ\u_Çqò ˶µ IDATÀ‘<ãœs˲¯¢JG ØXXXÀ‡áh×¾…^¯×o€(Š¢õõuŒqFž)Œçú!0M³\.ºx#«ô>ï8c,I’«›¼çyÃQ_QI$7)r˜qüèѵå+°ßÝc.Äé gêÝäÞá”Ô+Õn»k1“"ËE¢ò³çÏ€Ò6è¨×ÁÍÏïÚØØ0m˶m×5t¿£T*)¥x¦lÛÖ*%íEÓëe¾ïë)¿.qtMº´´´gÏ=dÒÊA-­ ºÿG±,kyy´z #°¹¹995¥=QÀ/•†Ã¡îÅ „ô»†7ƶ¥R©ÓïéZ­?j=:ç"‹‹ ä³ÛÆŽ¿ôÂG~éc+‹àƒï÷¶íÛùö¿‡ƒÎ‡>ôÞ…SÃö&LÖ«¨(¾ð—_ü“Ïÿ12¬=»öÝ81÷…¿þ2\Yé½÷g¸åö[Öº­Q0 ]BX–ƒ•¦Ýï´‡›—ö]3Ýï÷`éÊ% ¨( ÊŒÝ;wº¨&ŠóFY¿R©<8¿wÏ'£(xêØñjyJŒ¬^YÌú=ƒ n'¨4Æ$ÖŒi‡±mÛŒÛñÀ \]9QJ…Ìõ‰ gYªwVŒ½•`ŒÃ0Äë"•+™f…ã„2@B(•¹ŽùEQ}×d.\ÛÞÜh&³sÛ˵j†Ð¬×ò<__ÛD&ÍóÔñKSHã‘_rÃ0IJœç°%U u»]MUÔÔ/]Çq¬$2™yõ‚~8èöÆšU`&]º¼Öê ÆÆ'öoÓhu× \.^?mšæÔô˜ëú›í(Š€QjùÞf’øžwåÊ F[3L˵â$¶,³^­%8/x¦ÏŒqGEQh|©Eýú4›M×uOœ8Q*•¸ÈõÔTcŒqµZBA€èQáäô”ˆ¢X"¬7fý!mðV…ç¹Iëq«äÜr-)AS”R–eésùòòÄØÜþÿþKÿÙgÿ¯‡>øî|à!øØ/þâZ«u×Ý÷®­¬Øwͱç·MTÀöª§^zéá‡ÿ¥66m[^Õ¯Gí^ÖêÀ®jåâñ“sõ¦¿cCìZ. ¾ãgœ ßɳa0ji– “~¿?ô_yíÔ¶ú4"P©•À´p–aÐ’"³ë–ƒ·¼~ê2Q\›™Vˆ›ŽY\Yã™ÃeHÓ„Ø–R å8Â[*f ”ò¬PJÚ–—$™mÛúv][ÚÝnW·\¶v:…8—Zº§`,ýQ©TÎ%Ý> ŸøùÎM̵¦¶Í¼áºóç/t7×àÞ{î¤Ø=~âU˦qƒá,ÎLF äyZ¥V.õú9¥H²„P€¦ˆËB‚H²XÛ¹qQPÊTŠ%dŶQWW* ú² efßÍ×ç*ënl˜„ær÷5{žyñ¿T]Yé9fCÌ2›3““,’5“D¹BŠ’í"Ì)–ŒÑ4M£(زG- žç!IJÜ0L€tåÊ2ÆÈ`¤×ï8޼ˆGCP¶­”*»FÈ5Y–gnÙ€Ë+ËœsÏóm×2Mã-ÚÀ`0"ÄÀcŒÂhäù1Ƥy’ç¹íZR-U—pýuãÑ:õê%†¬;n¼þô‘gvÍÖàì©WmÏàþ›Ž¾pqnÛùA¾ßüþOzÿ‡ÄR±knI´:Ÿúà€’[9uúÜ·þzX"o{ï;9!¾Ë j¹íÑf"ø0 <<ÇÖø”E1ѨO5ó¢ÓØ1YÀû€‚"¶íšFµìWãÑA …ñH.ÌïÉré(C2QE$B‚ç®ë¥Ef`Ãqò"Ó£>Î1‹sN€´H•RE,3â4÷JU½ˆÂaEœaŒ‹œƒB•r™ ”(ª«ŸV«5Y›”Rv»]]Ô/,,@³Ù<õêÏóÒ,ÌóÜÀ£­>m»Ó®Vý$IF£!H3` Ϲæ"é¯<ÏõÏEîY¨øÜéWTL˜‰¶ÍM@‘çëƒaJ'gvt‡£4ÏëÖ1µJuiii||r8nµl™Ñív£xT)•êN‘«Q"s™@‰¹iIÉ•R\’«e Æx4i_AÎyµZ×u£Ñ@J)¥Ê‹LX …²œ€íÓd..†a899É%$YWï¸Q !§¦¦¤”–åh f’$Ú+—s¢@ ¤4L€ÎfÇ÷}í`ìºF·ÛÕ·•Jma¡úÿÈ¿÷Ødcìþ˯ۤ€’$ íÑŽ™Æ±Ÿ¸ûž7}ù‘ï=ó“ïÀ—¿ô•;ïºc£·â×íþ溰rÌLˆ²Þ¶ùñß¼ñ“GOö» ¯¿áf(ï;H˜aRÓ·¨O±ëºo8(‚i „³òBðÁ€$rF–eiºŽŠÒ6ÓͲŒv·Ûíõ„•ÍìV·FŽãTʾ”ÒdT SM‹é]µš¡áyžF_¹Èu¢lžçJ¦j,Ki§Ëai¦¯†³IžÓÓ§O€ÒŒycuÆØÄÄD‡úƒ9qΩhœj™v–r˜ššzàtgŠR¬”ÒFýŒYzJ¤/”RªOUÛ¶%*mË :‹§V+¾§×ýhåy>>1—d¹åÚõFåâÙ3Ðí¶ýz}bb"ì‡ý~?˲²_ƨï–êPV²Äó ÛÚ­ÄYìºN·Û 02lÛÖ¯®G&qkžPjFºë:„¢0 .aB s‰Šl˜ ³Î(.ŠÂµMØÜlEa2g4 =¯´¸¸¤ñO©T*2N±”2(+ ë´: +pl{rrrs³Má\&I¢‘C£Ym·Öþîoþâ;ßø—§ò£’›y &š¥(L(¸"o»aï ‡v÷—/j}óìŽ)ÃÂivG2±Wsgkã°~i¹R«†á¨a²?üíßÞû-ß~ì{püøÉ(å÷¿ç]/Ÿ:%$؆›¥Â+ù ”P%áHðœ`O ö V.a„8F¦Mý6 ]ÇB[­Â4¿„ Ã(¹h#Q¥ÁÀ9' ˜¹gµYBHKYôAÇl¦”R Á5~¯7p‡JHz•0I²{ßá^¯×ou@Wêú[nêúO?ýÔÞ=»)¥¼ÈžyúyFÍv{Ó4q­R‚QXŽ÷Þ½}û6"Ib¥äU-×õt‘¡yŸ†aè~o¿ß†E8D2ØXY»xv¹^õwïÙæ8n0ʤrgöùÍ*uXŽ ŒMÓtl/J²noTdé5×ì%„H!1Æ »vþðß+—ýÑh Aºž¿¾Þâ\q!Ã("›–!¤ô½’âéÉÌ!¤F÷µZÕ÷}Û¶Å”R%¦†.Þ“$‰ãXϱ²,«•+i¶å0`2[Ê- —渘¦)Š|c}ͱ-f°<Ë6Ö7ó¬(yeF˜ÁÈÊÊŠ”Êó¼ «ÕšnG,]>_÷È÷Ýÿðß}¥Qux>™b„\×JˆGVØÝw×o¹ûÞ?ÿ³¿9ùÊÙÇNc‹mö: ÌN?¨X剌}é?ÿâãÏͱúf§ Qšª5wn{öÈ */”à{'·-ÔÇñ(:¸s¡R­½°Xö+íN; B„1—\Je9ç©n„…eŽc3†…Ì Æ&Ú{:NR“™a+¥â$*Wj¢(tû)MbJ©¦ž•}? ƒ<ϯ®-êz–Õë5Çq„Úš! Ê0&Y–y^ ÅIÆ…Ä4© g:Æ ò±ÿø«cccÇž?Òk÷ZÝîØô”ao¾óM»æw–KŽmÛa.^ºlÙŒóÄ TÄ 1¦™žžÄX9Ž­-sßà€V-EQ*•4£Eﬞí:†Ñë,WýJo}˜ç©mã0Œó 1¾m eZ†Ì!4Oy’¨ñ‰©S¯½|óÍ·T«Õ#/ 功¥qž§Žë¶ºýnwH §?&iV«×ˆA”XaBH¯×˲ìjŽ€6ŠÓ„› ÁšŸæê®;%Qˆ"'&ÇÇÆuFÉÔĸ(òÑh(%! Ê<Ï3M«VkdY–&™"MSnÙæXs<ŠÂV«ç¹ã¸š÷Ž0ÌÌÌÜpë««¾_ªTªív[á:N­äýÅŸÿ•eš¦E\—ŒYŽ+ æz“£D<´çÓ¿ûéï|ûÛkí„y^‡Di@¨ÍólŠyêÜêS{oŸÛ›¶ú=»³Óóó«61íj¹ê¸žH²Šï×ëµáh'Áþ]ó®ÍŽ<÷ܰÓ9yôD¥³S³ƒ~Ÿ9²9Vó<Ûu-B¥(Ɇ†! žHi8ŽK‰Q¢R­J©LÛ$™–5†®mkŠãØ”RŠ1&xáy®j»6NdŒ…a¦©‚sE±ëºE¾¥cR !6LÓŠãX)i”™/ %%¥˜j¬EQ©TB¦Y©T¦§§un“Ο?ïºîå¥õRÉÐþ®ô\¸pá]ïz»ç›ë«¶mê(6‚HŸ­ÚK`K.„ÈÒ|Ò÷RÛ‹Ò`c£uèàn­X\[Û(Šêkgs‘ÈL ×: HØŸùoüŽ÷¼KÓõ———õ¤xyyùðá×—. Ï©;Ž›$ÉäÄ G=ß·m‡*¥ÝÆÓxK7Ÿõ•X–£bíÀ•$q½QÕí-¤„çXàXl8è9¶A:°¯Ýî¶{C«|¿ €ó<'˜6 „ÂAÛu}ÉsÉy0Ú¶cYTë~§Óɲ²,Æ,xCÑÕë pžRܘïµW.¯^¯NC•ÓgVÇæÆjÓ¥×O?ÿõþ» ×f€ QªÙ m:x0´ÚÝš°`”DÞvÏñtð­G¾3·w·²pž¦pÿ›ß¼º|åR}çÂŽd}$²Qk­õ¾w¼ãSÇ_~õ‰'ž©ÔkÃóý,+>ôÁÿ º›£“gNßvû¢HyËOƒríé†aVäEQPƒ]ýˆ5ýW)e[Ì4MË Bò­BEˆ-Úcð‡=J# ’$\)Y–"PcH–ÊÕ$õz]b¬Ñ€¢HÈÙ—/½ðÔsõ±ÉµþÀô½[n»ÙwͲÇxš´×Á :ûúëKW.P ®ë ‰óœc‚¨A>ûÙ?£Ñ`0h4ëa%I¬{–W®,¾òò‰r©üýïýÐw+ÕJ…ÀXb¤Q†ÈŽ>ûÂÙ—_3d|xßþPòÜèÁð½knØýú«§gæ¶-_¾rÏo)ùåÏþÉç6²<¿ýŽ›8ç—/_vsÇŽYDZ—._dŒ&Q„yQð8Žô€1’å ÆàXV‘‰(Š4«w||\¡§v–e)µå±åû^¥’Ïy1Žã8è]Ç%˜0F–./Z–I0 {€ð…‹WF£ ^oH)›ÍFŒ\ϳ-»×ïeYF(r=WŠâdyeÙ/—£$â¼È² ¤”]¾|¹R©¬­­—Ëmœ–e)Bxcm}4êÝwï]Žmƒ4LËþýÿú'a\<{ôñ$ínß1ù±_þØK¯¼ì–\Ç5™ƒ£<À—1K9]\ŸµmFÀpé™þ’;]»nÿ-B‰œÃшü§O==>;;»{×òʪf¶í¦æiV¤£`X¯Vï¼õÖŠã>óìÑ×^;ûäÓGü)@ì{?øñ{ßý^‘KF2p…E‘Û¶C Ê á¸®îgÛ¦£@‚1‚¢È,Ët][nP¢1¨®ç¶8L†QÆ!¬@𦆥4 ¢J¥†!çB!" ÏmË´-–'¡zÛ¶E,³Ê¹0mSZoÔöîÛK)b”ºŽ»¹Ñ.Šbee%F”)%!ÒrŽo8dš¦e³(в,Ëó‚ó"ÏóW^9e1o8ˆÎž9_­Vçæ¶§iäy¥”çy{c³V«üà±GÇ'§lßG”J7ºƒ»ßúÖË›WlÇ{éØËqP<üð#ßþö£õf³9^k4Jkk›÷½õ¾/ùon¸áÚ4žo;¶9 jù¾Åyì{Œ $w›`F'y­Ö°lÛu½0 Ê•J¹RJÒ$Š£$Ž«ÕŠaP„P©T²m»(D§a—½òøØ„çúYV „ü’çy!¸ÓíJÅ3 <5MZ­–¤ÐÉiʲ ¡”T*Ñíw0RÙ][_ž™™¶lFˆE±m;EÁÃ0\Y]‚§i25=AMºk×ÎéɉŸüà‡ÃAD˜UH‰þ¥_ÿýèGΞ>Ý/-_:ùBµV#ÂÊñìšaãyo¬“,L7‹` 1i¯¥›7Þ|hùÊEŠr ãÛvÌ4›÷Üõ–'~òܾû“Có&ýj*Áj˜r‘!̃îrÑ^,-ÝzÝÝ“ãSW—)!¯]8ëÕk·ßz[:ˆÂÁ@0©@)¤׎ã˜ó\ !¥(²#äØ–É  cð\Û²LÏ·½’§¤ÒÁ8WçOºó¯ç†Á”D&³LÓB ˆ`â›.#"HJJ¿`PT÷P!ývkÿÁ½#®ë¤i²wÏžoüó·á C~ŒA÷z½@œ„Bšº%N)ŠBwŽ] G¼ÕZÌR‘e…&‘lyï Xïv!OËãõéI»ZY^k0RnTª8Œ£|~aáÿñ딘púÌëï}ï{n¸éÆ¥++Œ±}ûö…a$Öí’V»Í¥À(‚œ‚±#PFɯu»] üµñÒëõÂ0”RhMA!èV‹®0Æ&5Ò<€N¯kšfœdYÎËe0c)HµV¯UZË*8Pг<Ô%c†ëøÕJ]qÏÝoÑØzÕêÝãÓ–0¶g"‚‘’òöûïE Ÿ|éÕ Hþú×þõ;ß­Ö&å~‰±œOn[ØèöÀ2ŠªQ¯å!&£šó§ŽÕ\ö×v_{ÏÙ+!3Œ°?lŽOô7¯Àå•¥ëjö¯½ý£O<þ¥‹kû·/ÌV›“¤(”ŽÇ€1Ï&Åíûæo¸n\´GY¢Tv–ç¹M\ ZtÑɹäœç×ji]†aYL{SŠZ­VÙ+_]£ºÂÖ+á*­YÿQ·ðÕŽS ]Ïv];Š©D¹ì_µg£Ú~8–ÊÞÔô„”\lq”=z¦¦&GÁ ŽÃ«öOû÷ï×mÓ4d’$ã$ÎôsæÌY‘™Rò¢BˆÁ°‡ÐNA–í.\³7tßùЇ«¥(õÈ·§TVaBVÖVÏž¹¤©R9p)¾úðWŸ?òœëº—.]0mœŒ2&6 V.³8ͳ,³ 'N9ÔÌ9DI¶¶ÑvÛ/W(‚à %†aR°TW‰¶Axžçû~†–e!%5ÞÒ Vs2 ƒDWm:Ë¥Ša؆‚ËB智}¨×½pJ’$=]Ìs®Ÿê(Š„Ú̸âÊ@@±A™â(lyΞ}à‰ÇŸJsà"½éæëêã•N¯]UZ!œöƒA§s…˜Ö…Å+|÷¶óƒ޾tš?÷2Q€”äY°03yÇõ‡IÀŽjcùì¹)ÞÝ1SÞ]3:3¾ºEFSÄ·.\:ãËrØJàî;ï|üùgOË2ÇBJØêt&YžsÁ•RÈ÷Kív[©B*š’â8¾F®–eé{«ÅO”RÏóâ8¦”¹®»çš]`[yQäzWßÜÜl·ºgΜ€A4=1ßî¬çyºsçöK—.8°O7ê–—W¦'§”Rö‹‚!¥ôŸúU ”]ºta½ßªÕjš·_.×`ËsY–uçÝw1FÛ››®k×›Mèw»qÊËe¿jûaK©|¯aêÃØ’h+z!rB ßw•J)™Zè§ë?½áù¾ïºn…z™ZŽS…RÀ,;‚$Îæç@©B*Ñjmø~™Ý”á#}C9—y΋¢ð¼çò*]F—z“““ÚñJO¹ Y®‰1†Ù¬MÎμA@§Ÿù©Åc?úþܶ©ŸyðmÛçwÀ⥥jÝGœâ¤èGq9NOž;·ÞxÓcÏ­ÏL÷3Ç,Um¶^yìÇJ‡¤\·sïµÞ^)ñaàYô‰ø:lÆáu·ÜòÌñcO¾têÁ_øëWöì; ËÝac|(”3¦ÌB B Î9!Á<ã1!TQ«ÕÂ0Öo¢ÝS,ËÒÉJy²õ`ë&«îê»-@;É4ÍÞˆ *t“¨Õje4˜¦‰%If6¤i@êÕíiš¥EÚ¯¾îaÒ8Šv-ì~äklnlèFOœDlËúcLÞñŽŸu]76lÇ)Š¢ßï÷{#Ëržþ…ápÈ snnnuõŠTÙ;Þù€ajµšg…àò…çìØ±“PG1—j4 [ívŮ㬮­ ‚áܶ«+k Pšd T½VÇõû½‡„aX«×AÉ0 Ó,ÛÜÜ4‰œ+’¤yšq’•+~Á³¼È .€íØ€!0Ó¨×í—}Oƒ…½^Ï0Œv»MÖº1ÝYô<3fòB)œç~ÉSJ”Ë>¥8ÍrJH’ü½Uë2.ŽcM²Fhë¸ÔÉo¦i>|¸Ñh;q¬Z­X&‚ËÕr%gOŸ a0 ~îÜÛ9ãùÎ5{^Û +åT׳ص7\ÆQ¥RI³I¡á/F4Ky–ò0ìÕkM×õ,Ë€‚'qó°xôcõõ‹ÓÛÕ~ôZ›çN¸í&0qž¦Çò"F`†¡Þ&3“$AˆPеð_÷o¸)*Î9 `Œeq¦·U‰ãº®žƒH)õ¦kš&c8Š"Œ‰:ï*‹i– Œ ÝÀÑ›wE´ ÅÂÞfѹӧRëԨךBŠ ˜_˜[]^43‰çÙþüÎéN{Šœ×kcN'Š¢vgÓ2™™É<„œ Gp²Ñ¬˜¦¡£ÛS‰’óÂn` ºtþâ‹O=¯{~||Ü.5Ž^y¶T²0Q¥ªkZŽ„ì䫯Üv×yžAàY%F†Å£Jµ&¶…à"Î %•&¦J¹Eæxs3Èäää•+WÀmŽ-¯,)¥lÓrm§Ó ˜I“b<Ï¡&%TaŒƒ$´™3èEY·3r}l¬fZÔ)e¸´¶ÞëŽèØXÃ`( †<ÏÇè$ \æ¦e¨¼°&ÀQ[Ä`Ž 9Yofn}Šçé°×WÇEaše×\³»r]EŸ’q’ù¾Ñt­6;3õ›ŸúUØXo=õôs/½üúó'N?ùÌÑÛê1Þ3)ß´o÷ºþ‘Ÿý„UwqÙ€ÿõù¯<ýì«^mŠ+ZŸS2ÿí¿ÿܱïšëüéúì¶åÓÌËí¼ìì¹fúMoº( ’ ‹šEÚ|0è!„0ËtLÙ¶ÇBßÃ4M1FRJL@[­ÀÖ”[ëšîn´Zß'qVE†:­%Ï·’ô<ÇÔ¾ išÛŽE ¢1¤m›»Ž™Þ÷÷Üÿ¶ûLǬ”kÿÕ‡ŸæSäÿ¥êM£-½ÎòÀwOß|¾3ÝsÎoÍ¥åÒ,k¶$Ûpcˆ`0˜t€@z5+ÃÊê^éLn ¡‚‰‰ a °Û’,Y²TÖT*©ªTÓ­ª;Ÿù›ç½wÿØ·nÈZú¡uWÝuÏù¾=¼ïó<ïó€éÚÚZ³Ñ ü,/âÿç7ÿE°µš­hîÑhòòË/ï[9påÊ•F£ þ$"íÛ·Üíµ—–ºÝ.J`:ëG¨†ôñΈÈ*ôpåòÛH @ÚµÕ›yY ‰ Ûy>ÔœúwÝ]ëvÊ4‚*÷Æã^¯€Ñx2íÌÎõ7¶ίªÀf³Ùh4nܸ1??_™*©ëuÃ0 ­,Â/÷ž IDATËíí¾eYŽc©& Ù¬ÇID’uÛ²àpãÆzž–mr^~äû?øÆ¹7‡ãx%|?¦D³, PÅy H=pŠ21L†1„¥Úx4LÄÒÒ’ 9ªªjgg ®?J´"Gßÿñï¿ðÞ;Q0Mý°ô’—¾õmxô‘ÇÛ‡–1‘õ†½°0[ ®æ„P”.@Æ!X³ëðŸ~ÞyûÜÂL+Ã{ßwÏÇ?þ}›7ß;|pÎeâ XìÌÎ.ÌGe~ùí‹“I0{ð0üÍ+¯ü·?ûë÷¿ýƒÙÊ<ÿ—¯tñÐg~ÖX>’Iœ¦®nÖÌÚxâ‡a¨TJj€Âu]]×–UQ¨ÊGqÚj6=Š¢ªªìšÓɈ‚tLCÓ´¬â£ñ” Œ1ß÷5êºV–eÅ‹¢È áØjèRJ™¦i«ÕR‹x8’Å…C­FÝ6­äC‹K ŽëÂg_{íÆ[X€" §”aB4! (ò}ø J¥aèʵ !†ÑÆÆFUrÛ¶ ¡„`„¤iUU†QÐïï”eÑíuBÓÉT7ì<ãq”îl÷;ÝN”†ã(‰¡¼‚áx$Ú Û3]„¨¦éáÓ§OO£P£Ä±LË0TÛÄ…(ÊRHH¢Xå­)/‚^¯§„çyeYL§SeBQEQæa–e1¤„Z­&B(`Bã•plÛ÷‚¢(<ÏSCë33í­Í­^|©7;Ï+@„PMg*4«Û툊§qEQ‡¶mêºF))ËŠ1-Ër„Ó¥,Ï eïµç}ðàáµÍÁŸþé—Ž;6Xß4%5šƒ+k6ÒƒÁäų߹|áâóÏ?? ü¼’ +4ÃÞyÓÉT/³fÜÜZå¸úþüă¾ÿá'žž[9zquóòÆÎw¾÷Öæ¶wþÜ•é8¼r}ë?þƒá¦È|·ô£ÁötØŸ¡?xAö«¿ú¾òÍï¼°zíįü¨q×Á[¹¿#SÐ(ÏJSÈ«$ˆÂ4N§ê±SJ†Ó醯nÙ©LõÿÊf¡( !„¦1 Pwk¡¬(+!ò¢¤„)þ…RU¥Â4MJ cTÓ4ɹ2oTl‚f!lË&Ûw?jל¯|õË_ùê—¿úµ¯ž8qò­sç676Ë$+Š|4Þv]·ÝêFaâºö½÷ÉòHYYÅq’ç¹çùº®¯­­Ÿ>}Ú¶×uó,;ppßñÇ CûÚ×¾Öëu–8(ŽÓéØo·g._~ïÀÁ_ýúWn­¯ah˜º?ñvúÃ$ÉMËjÎ̼wùŠçû ‹µF“ƒ¬Ùf¯3SEœs!…[¯onm3BmÛÞ“VEQÔh4Š¢h6›¦¡›¦iš¦aè„LPUUI۶͹H’$ËR…}VBš¦mY6%x<•e‘ÄIš¦­VSJɹ˜›_’@FÈÐõª,(Áaxg§Ï¨VUU½^’·Û-)U«KŠ¢Dí­TéÓédaaáôé“ ‹K¶cÍ.,Ä©Gϯ®i õzÏr÷/.|ä駯\¿úн÷:pàÊ»—þêëÏloõßzíÙ™¹¥…eËÔ§Qd7œ’˜à8ÊâI˜>ùÔÇOô<ïíwÞ¦)ÓqVTnNw¨¡yÛC/Îk3ó_ÿæó·Ö6Þ½r=ÎÊý»÷̵dhX†A)Ó˜EhæÇ à<*²4Í”ˆ^£Êô€s®é¬Èwu•Ê— !¤pMÓ¸à!)¸¡1"MÓ¼,¹”I’òÛ !DÓB „ WU)¥ÔUr‚½TÇq4M ‚ˆ9u¦¨¨Ê}öIÁÇ£a»Þ:ÿæ¹È mÛ¢ŒRvNEž—?÷¹ÏÚŽ&d1ʳ\Óô¢(<ÏW,ùñãÇ·¶6˲˜ŸŸ9vì(çåµkWŸ|òŸøÄ'.\¸†áêÍT3T¢Ên]¿üÔ}õ¥)“QY‰© !ã,cšQ ”å¥Ú“O>՚锢¢Y†ž%I½^¯Õjº¡ë†±Ó0B1Æ{SMc•ˆB)MâHÍNp^UUÇQžçµš£ëzGŽcE€’$]YÙ7 )eÍfË44%l’Ïöf:ç€Å@Ñ‚G,Û°,S×58IÇq &ã4mÇÒ4¾®UÅ¥Dã8N˲RYŠ’FC "ϳ‚§NÍh6¬¹nc¡Óƒ‡Ìεo^»2?¿¸<7·qþ£þà£÷?póÚª‰ð7¾ú—o¾öÆ$.Ž>ãÖjÀE™ÆíšmP(ãÀ¤¥aåwŸ:þ©OüСÇÜqxß‘C¹^cy!±Né´[û×{ ûŽ p»Û,1×lÓB¥9ÄE•åIšæœ'U‘qnjzEê’áœ+\RJÆ©ª®5¥±R/bWfÁc\T• $HJ¥Ê9ç¼RcÙÊ GQd©šzUÞlêÏI)«ª$F£ûþ‡èôº÷§~òá‡úÜg?»oiåáúê—¿RsmŒQœ„¦©à0ˆöí[9zlÿööZQä–i›¦e†Z²—.½wøðá………^¯‡1¯×ÝÅÅ…,Ë{½Þ7ÖÖÖÂ0D:³]]§Äëg_YY˜ëolXºn ªQæE±@(ËK•ãQqA)íÍ͇Q¤™z½æh”·£Ò¥“…¥%×vÇQÜÄÃ?|îÜ9]×{½^U·á$‰*Šc¾eYÊg]× å¶>M{Ý9ß‹PY$¦i0FÛíF{¦ @ŠœïlOÊRRÊ ƒQJ«²,ò¬Èó²(fÚ½,-lÛRºÞ0ôã8bŒ !£(.K^–ež MÓ²<³,k}}R²oßJ–& …x‡ŽB²’¢ê¶Ûçß:÷Ì׿þ½·^oÏÌtçz”bŒùú­ë¡?Ù·¼°²Ðû™Ÿøô‘ƒo®mÿ—Ïÿá‹Ï¿È3~üÐQ,¤,¹àIšz½n«Uw³(¹üÞ{ÉüÑÉhúÁ§oÔkЉM³0Ë ‚¡Ñ¬ˆ0 wã1Íóœs©Æ˜{üÎ¹Š¸ „ÐÎÎΙ3g-¤®é$Ë“$'HÊ*{ôá÷¿÷îù†­@Óq'~ „pkÍ>Õ¬²Ê/wçw†aèθý † ‰w9RÓ4ã$£P)¯f³„žÎ0@âæëU^`F`»¿N;ð§Fcii!Çq)`<šó<¯^w“$ýöLšÍÆx<IDZìHp˜ŸS=ÙõÕ+Œ ´¨,Ýæe©iÓ”êžYV›iˆsQU™mÛIœ€®k ý.Òl{sýì+ßi¶ê?ð±OÀŸ~ñ«²3ØáŽì_¹ûÔGy2]{/Z¦ Fwž¸ãÀþ•W®ÀÅËg—:ó?pjqŸ¼ëà‘3V³·scúŸ¿ô‡pèäʧ~ìG¦~Šk4kׯ^ùÙŸÿ¬ïì¸3-?«Æy€¤ßët{óÃéõ›7r&½8@ÌH¡J)ç:oèºePc:ê®­kê„Si«ÕJÒHû[aàœO&Õ!h†®~H15[•¼º®A 3nG6p^ Á¤l¯ö °úý¾aišîì =öÀÑ#‹ð¡?~ïÝüñ}é»/½rõÚÓÒV7¼ª*¦¡þý³0šÆqlÑT¼ ”–e>”J0NBИ¥¼IÔx¾:Ï@ÓŒ,Á³ÈÛɣɕwÏÙÌeœn‹ŠSf2ÝŠÓd<ÀÏ~îgk®æÉt:]^^NÓT%g+Ú£V«õGÛ Ã0¤à ø6‚Â0ŒüÀŸÄ‚ f»5 HrFq§Ùh¸õÉp4{ÓêõF’$Œá…Ån–eÁ4Só@sssý~¿^¯+‰{Y–5×VVÀ3Ò4•8—º®›¦9ñÆj u»]QUBV–näyªX@ÄŒ"Ë×oݘi7¬ìû;Ÿú‘?øƒ?†à8îCw\¾|ãÕ³o¼ùÎy»îU ݹÞG?öT•e“ÑøØÁW.^œŸiq÷éÃëç‹8=°¼²¾¶Å‘f5º`·gß9ÿÞ×ÿû—ÿá¿üg7&[Ë÷%~A”„š­ó¢dŒQJM§ãóSŸ¹rõREE%Ô"cL“Rš¦þøN¦#Œ±mÔ”ÂRº±±®ëzQäÊŽclÛµ(Š”w*bÔÝ!%J’$¼võÒL»†dY5¢›9Gƒ±_q¡ë¦€³Ûvœýû÷m÷·§ÞĶmeu¦V’j=Ï#D#SÊçR¥”—\éOƒS'O%y’¤i’ÄYš2F)Áû—÷'IÌAöwÆû÷hµZkkë†a˜¦U–â•ô|(KRË²Š¢0“˜:’È4-.DÆy^–ã‡A†–eiš5zB‚rT¨ªŠ`ÄyÕëu ƒHË4cŒ˲â Ð4V–%¥LM¢ªùÕ=X C$‘BµÂ(‘RRªQ˜ç%”E¥L˜ ÃŽš¦1F9熮kš¦QÆEešFÁKMcº¡3ªÅQH ¥=ö˜rƒ"Y–¬®Þ¦/¼ðÒîBëš©4ß÷M‹ !¤µ«ªr]GqàÀ%_Ì0 µªÇ™N§Š°Éóœé4I³ƒí]7 ݺqý&HÐê­›q”ÎÎ-!‚K^!BàêÕ˧î<©¼æöð¨ÕjW¯^­ªJ7m×1ÊŠP"wÍ&@( a¸Ê Qqh¯ì3,kõæMÇUUEQ8Ó©€¦S]3ó¼Ô –$I’$ÍfSˆÇŽSߢ(ŠF£Ñ©Úê\ϳ’’$iQT–e†1TÓ P^’!2!D%„j°½Õ·M}v¦]dé#{:ÂwÏ¿ ßøÎË.½×j÷>ò‘Üqäôp°=îÇ0™ÞèεD…ÜÚL¸C;xh×ý¥îþÐ+/¼õÖù·ÒTþÿê·ÈŽ>?÷S?qüƒO¨(D¡ÙæÎÎÖÊÊdIZV‚èG\7,¦ ¦Û—E¯7;(ÓoÜ\3 c2™¨ Ý4Ͳ,ÇâEjÔlÒÐv¯Ž(ð(¥À2M@»\¨rßÙ%_Šcœ%EÄPðŠ1­â¼ÑhE!8¨7¨`5Gj·ÛE‘@^UTÓÊ*eŒÆq”Åi£1s÷û²âykÆYÃm6íííåå}ëë·”…“R Ù¶­¸])KJi™ïÚT©|=Çq” !I#pkV¿ßÃpaaA¼ªË‚éš$†á¤I‘%ý­¾†H»Õ)ç1—"J“óWÏ|#íô‰3®Ó\Þ¿®o®Þœ³=Ç}ãì÷ÎÜs§AH”EVÝ©JH²lcmƒ¥¥›œsÝ4ü(rÝFž¦¶mey!¥lµÛLÓ<ÏßÚêGQÂh£çy!„l¸v§Ó‘U©iLB>ÃXð*ŠÂV£¥äcUU!ŒTö¥T=I%­Ì’´ÞhfyŽF-.ìM¦cZQ”šN(%šÎÒ,étÚR J©â0&¦eqÉË2GT£·V×õH–eY–躎1U¾k°k÷P³,KÕ¦ ŒUË"„ ÃP<ïõë×U±Ç‘;Â(˜››ûÖ·¾áûašä'Nœ€ËWn~ðƒO½ôÒ‹„"§æúÁÆï¾òÕ¯JÉ¢”känàÄmNO ,4Fã8€’P Sçùììì^˜¥êmÛ®7*ÇZÉ4{½žåKÓ4ŒÃN§›±|?l6늌ð½PJZVêO—”jºfN§€ÔuS W._˲ÌÐ-)cF´Û™UbâùµZme~qiañÏ¿ô%Yñc'ŽÀ¾å9˲66¶&£édTl­÷Ͼúl­o:5»Ûm¹uóÁGîïÎÎè›oî)ªÑæúöäÝwßß]šýäOü(pˆWÇiss½áp¨xcß÷k5[cú>à÷z³¯¿üú=÷Ý ž?6j¶ô#ŒÑÆæ!d:î-J%¥ô¼D"¨ªª^¯çÙ,k:õ ÃhÕ])ª*Ï€€îØVÝ­eY¢ŽR˲ Ý`!ÁyYVA”eY¦lh“2 ¦i¶g»ƒÁ£*ÍJ(ÊX \¯×+ž3¦{ž§ë6ÜöwQ0°ºâ¤”¶c@É )ÁÂZ½õÑ~LJÔnÕtJ˲/œÞÜÜDÇc^³³³Ðl6Çã‘B „È«ªT“ *)JUüNf ‹‹‹ Îp]W¥?À¹sç<Ï{á;ßþÅ_ú…ÉÆsÏëè'àÔ‰“u/,ÎÝwß}¯½un¦ÛQs|ë›–±Me™ žÛóÐ,Ë3ª$ºBìfÃN§SBȵk×\·¡öŒ*HÔæév»QWe¥‚œ677ëõºëºeYUA)R_„†¡S3‹B8ŽƒTŒiꪕ ‚c-Žó$žîÝ*ª"R³×RJeA|ëÖ­v»ýùÏþÞ»î~øýq@0ašV Qí n5ÜZ’üÑZõöòòr‘Oûý[í™îL£öòËo|û¹ßøñûñÅ}ÞçÿÃçO;•LgÊ&r4Ž4BHr;â¡‘—Æ8ŠcdÁŒ1F ªJYf©zVÍFsž%ÑÚÆF³ÝbŒ©g«VjU•Œ±¢(ó¹oÿZ«3žøШ¿ýÒÙWžyî›Ï¾üR”dša׬f·5çØ­šã®õ‡^š:öÑãGO?ªAÕ™q•ÂÑÈ08bÎä#éðw©ëº.²uÊh™*íµm‡fš–iZ¶åæEåGqVi–çy®i c$%/Ëœ1Ì•‚ Á5QFšC(uëuMgÃŒ¢äåLÓ¤“­Mï•ó4–j®?z } kW¶ð©ÑðúêÍÑp¬[–ãÖÖ6Ö VEº0ÛõCO׬²(©5Ý®ë´ ÃÈÒ¨™éÉ4MuŠDž>x×ûH‘Ön͸u‡QzèБ*K5ªÀÙ×Îöæº7_»¡;K ‡íJ±?˜¦‰R²À,KàvCç8ŽZ‘¦i*” ,Ëååe]×t¯ÔûÞM ˆBbeeù™¿ùëÕW}ì±Ù¹°-M¬abéÆp8ìÍͶ;-Ð4šÆ¡ºƒ²,Saž{Ùîø¹º®‡¾Ûi‚Çq¡ë:¡ZQišy^µš­XlÃÐÃ8k4{Bý~?˲‹/º®ÛëõlÛVÄæd2ž5 CÓX³Ù\[¨²˜1¦–£òÇ+Ëj”ïú[–¥`fe˜cPâ€Âí›ëŠ4 @>}JžDÞƒTÌóƒD`Úë,›†…ÅÅwßû“/¿Ðß\Ï‹(ñ‹øðáËó³']êì€þ`»Ýsõª¬M›4L¤kÀ¤  V*6H÷ê|UîtêA)Çú=CpÕxa„U­¥®D¥¤BhUóÐ{"hud0Æx¯øÕ‘;î®gæš/§ƒË²]üÿíÍÚ[çÏÀÂÒÊ¡#‡ ï ·îºól–¼ÿ¾­Í!lm޳´j4›Êew…RŒr\fiâÕÌô{gî;s àÐk¯¿ ôÕïž}ðþ»›Í\|ïÂc|Xá˜n^¥€ø™»îTuX³Ùä¢!“$SëOý\Ó4×uÛ†1F{ÙªsϲÌó¼^¯777Qß÷à}¯¿õæéÓ§¨Æ¦Þ„i––玽c0F#AiQ*‘6+r«æø£‰išj]áypÛKBA¹³³³yžS†Õr¢Š£á!dš»VIÓÔùíTUß÷8°³³ªØÚÚBT»m%8p`4hšV¯»Ãáøo¡6‚óR×™U­f@UæªKP’Ã0T0±m˜¶kÑØ•õÕÓÇc ›ƒ o²Û`ÍtjFçÁh”é)¢¬Ö`Ÿúô'àþ»ïyåÕW5ÓOG–iãé³Ï â©?ÜÞøÿøÿMâøØÝ¢,¢×´#?P3}q !“$Q-ršäTceÁ³4TJN‚™úâs³ ¾ïgeB¢”Ù¶ jHŸRõô¤ B寷-BŽfÔ’RóÒF,à³O=¹ì¯o-Öÿâ{gwÞç¯ì[< ;ýáhôîÞÁ”ƒXã"Ÿ_è!ìâ…«7¥ä­ÖŒïyŒ3p¬š ðÚÅ®¡u:ÆLÛyß©{€ššÑï÷¹”°ïà¾0 »Ýnšye™Uæ`êŠ2¢¢˜0F0¦j¹(E·”R]ôJó¡Ö±:áÔnµZsóó°±ÕOÓD"Ð ½,ËÉd2ö K2ª±[·n-<¨P'Î9€ÎI£ÑðòáIýý¿÷™‡ºûйQ-‰=Á¥Áœé4ÚÚÙàÇ~§Ó+«Ò²-·î¦YDiÙ„P@HÈL7ayó‰Þí¥·¼x›)zíÕ·KYüß¿ùÐjwŸî¥¶Û OJñØS>õÔ ¬2Éó¢È@ ÆØtêﺮڥ,ÙÙÙ™ŸŸWžûÜçÿ럀NÉâââÆÆF^e‡Víß¿ÿ؉;àÖ¶mí–9ÛZ¿xõí7ßxì¾[ö$W†B)öBžçK)¹ AObEÓ¸®£ÖŸÊ§5MWѹ¯Äæ{Ø6dYcLíR¥[êv»QŠ(æ³mȹï sÿûÿÅ×*#^œ©À¯þÊÏöÚÚ#}úñßý­ßþã/?ó’QëT%€0H_ãí»ï=Ùé¶£0i5fl}—ÆßÜL4Íž©Ù´Ò5Ћ¤tãæÚÕŸÿ¹_€ÙÙžDYžÇYÊWWWÿõ¯ÿÓ¥¥%uɪ ½( ×uË2—¢R•¥4ŽÓ²,ã8 íVGbÆqXUEœFº®ç¥L’]–"‹Ç äêÌô^~ùån·«òã²"'º¦Qsg»ï:N½îò*Óu˜¢JBź®S‚’$Ö™†©åIª \U–¨ºª,Ë ò<çÙ¶­L0 SƒÛvvAt»3œË8ŽÕy¯iº¦¼’iÛ¶Q–¥:Ywvv,ËÊó¼ÑhBÖnÞ\\œW¼@ù¦i‚ÄœË$ÉF£‘ú¹ah¶cFa2™ºfy^•1äeÖ¨ÛO>þP:¯4›5„n¾wye¦ À4ôƒŠ;³Ý÷ÖÖÆ ËLŠÂqkIQšI)µt ¤Àï\½yîÝwVo­i¶ùÙÏýt«QcT@‡¢ÄyY „’˹TèôìüÜþ#æg0"E‘c ºe•e¼DÓÛí¶ïûŽíJ“&J$¤mÛJ­°^uA3Ɣٴiš¡(Š”K«ÆôÀzÝ9BQ–E”h¶@× „ˆÝ²'iÛ–:`Ô)¢¨‡íím5Æ> šÍ&!$ bŒÉmºÊSÄóÎyEœç÷Ü}>ðôS—.]ˆü ;·”f¥iX wÜ™E>`@#Â'Cw¦3Ù¹QÈä䩃°uãF§e« ƈ†*Ñß¼€Ù\Ó]|ê‰Ó÷Üõžs=/"ÆÞ´át„€’W³  °¸¸ÈeÕn7Ã0Ô4Z¯÷ N"Ó°Ú3­4ŽÊ²œ™™Q{Ȳ c¬iaT]ýê0Vÿ Š"×mv3ŽÃ0ö€‹b£þÅ×¾à£ÙæÜ_¿ü—þýÕa~ï™w~í‹Ï¡dûsŸ~øüüÿòƒ8ü·~÷ËÏ¿|Õ/â*ÓÆÓ¢à7—êlB_î쬻ã~È ³ LÂV«þo~ó?“Ï|æ§¿öÕ¿ª9ÍF£qỀ¸¦Ñª÷Þ{ï¡#Ë ËTç–Š‹ã˜óª* ¥1ËóÜ4-!ÄÎNÿÈ‘#NÍŽ¢0MS!ª$I„ä”êA˜ŒG~UYšUUÐív1¦_øÂž:õ¾4)Ò´Àýþ ÍóÇ‚šcÕj5C×T70õ<Ã41B“É$Kpl‡1–Yžfº®+üO™¯€ÚQµZM34 ‚óª¬ ]70ƺ®'Ilj2ðC˲\·®Œª CgŒªîMÅ&ª3[ýc¬ª*Ðj5ÇÖ4 !¨ªªÙl©Ö- }U³¦iE±U¯ÿ}'·Íá`üúç~û·¿ðÎ;_øÎ÷®ÞØjÏ.!Ëʉ.tóà©;„¸ÎŒVsF–ë–Ò´Ð7ÎJË®½{þÝk×®iš&QêÎÌ”UXV²Ð P”YUUš¦sNœš[–Uœ¦I×GgZ»ÙHâ¸Ùª# ˲5MMe³ª*³,“Bì¢+ÿ?Uï_éqyžªzs¸ï¸Èhs »ERMQÁJ–IÉKÖìX+{mïo¼ëõÎÚãÕîÌolÙ#¯œFžµlY²GÒÈʉ3Ùjv`爈¸ùÍ¡Â~¨nÌ,>¢îE½U§žó<ÿ£ë$ý%ã¡?”-kÙ@‘ÿ422â86å aűˆâdv~¾12ª¨úÙ³g’xñ¡ÇfjÍÏY7¯^ ÛpôÈ;¿ô_üO_{nz|v×ÁO„{3¥ ”hÄ0¬ÖZú½àìÙ³+++­Vë¾û÷ýÒ'ÞÇ“…›oI­üpá'Wúûz|imµ}ëÊïþÞÇàÆŸÜ¾³òÌ~åÄËo߸öÐ#‡nmÜ€ž=I±æ¶]Ö,£ÓiUêÕ~»£¬®®–J%Én`Œi*æ¼ð<Ïqœ¤×–{ª †Ë¶*(ª¢É8˜išÕjÕó¼4Í5M ‚ I¨Õjžçõ‡~§=t/ ÛòB·uëÎFc,NìÚµ§×ëaŒkõòÂÍk°gÿ9 $ }×µ#!µZ-3­8ŽðMȼ‚ !-T¥RIJ*²®¢”"$4‹Tk-˜¢Òù¯ªØ2K¦áöz½4¡š–ó»Ã„eΆœâÀ“ú«¼ö !Êå²¢Ñhhš"‹“»G¢!DjµÚ`Ø–ý]7½ö¼ cE»³Åáíë·dÑø¶·½­àìø—ÿ+DÂÆ®-Ü€¯ýëD7Î^½þú™ó¿5?7Iôûý‚»wìl¯­ÎNOMŒ€ëX33Ó9wù,ÇŠÂ(¬¬lÀ…³×R &ææ·Zèš*åK74Mñ“RZ¯7E‘sÑ¥‘”Un¨RX•ëXÎØd­I…úý¾lï , –…Ý„ ÕZãéw¾7K‹óçÏ¿qêÄÇ>þ{ü©Ã¿÷?þ,œxéû¿ó[8~eñ¯¿òn@{âéÿøÙ/ÀøLÙ4ì¯ýó7 Å>wñ¾ƒ{¦gFàw~ç×N½ñæ¾÷b˜ô(²U¬•Ìr:Êիׯzkšª·;Ã-û¶ùÁîYtÙ½ññ¦iæi&OŠLþêËËËŽãv»]Ërä&dÙâŒ1×uÏœ½¸pãö–Ùí·o/À}‡v÷{CŒñÊòZ’Fº¡Ê1¾0>6æº.ÍkyžÇ1ޤhKÉÓ¤Ý^WEK yŽkåIE‘ÎäÍ@ÖšœsË2EáLPZQHµ+I"×õ¢0AX`¾?â?ƨÛkËjL X”RÇq ä‚8Ž%§^¯Ê·‚² äy>>>E±ÔìlÛ£ Ã0Ié®];Ö7V*snn ÔkŠ[r¯\¿4vK5Ï6ì}Ó°õŽ“ °Æ…’&£hfj T«õ¥•åa00 mltDÁè#ÏüdE\-×>ẠšqRèV9 òÛ «¥Â*›^jjŠÓ\S•ÈJßï1ÖëuGFš P¼éš—GÓæ ^i€$„p2—!÷y!“EU QåŽÛEQlÛܵwòáGöµn¯üãç?ÿ+W?û÷ÕÆwdÛæ­?ù7¿týFçï¾üÍp˜ÏvµzáÅá‘Q×+}îËÿ¨€ûo}äÁûþÏ?üÍõî«ÇÏþðÇgÂaÈÁÇî,ÞúmÊ’0 ×8õ†{ßÑÝqÁHÆ;¥´(£‚€HãHÕTBpGI’ÌÌLQ¨¨¤V/§Á €‰¼Èšc#õõ¯bkvl2:V¿t颢ªÃA&ùHclue- càtr|œt|t2 BŒI’DE‘c,0pÛ4 ]×TµÈsé=¥ Âȱ-ÙÛ”²«eY¦ijš& #ÁDžf–iºG†3LSQ°aŒQ™C¬¡ï[¦©kšä®)„0Jó,›Ç¢PÊ‘8N%+3Ž“$cŠªs²<Ç (V5Ly^)—&’(NãØïû1â ú¹ë{Þx!´L(K­õ~8•rœ–ë¦á ÃHM»K9íÌÏò^¹¬-\;÷б½Üù–‰ž?:Q¯ŒV²<Ù:=»|s©ÛñC}´™§= …¡! JSÛ1Lä–c&QʯVª“<Ë8ãqÙ¶i誢êi–E¡Œ)ªª¨ `®n IDAT—Í.Œ‹R[\\¹µ˜ÔFJ«wÚ;ö퀟{©T/ÙeCu•ÛK×­8úÀ^¸|ãÚ¶í³Y–íÙ³gqq1I"ÙV Œ‚,¾=ÏÛØØ‚¿”MŠ¢°²l›Ë X~È›–œRLR¢QÎ’$•×Ùv» €`~ncÀP`"lËð÷±ÿÓ?÷4 hzýVï?éZýȱØÞ}÷{¯À`}éùWŽÿê';xÈš“Q@æ#³<òÆ…äìåïåÉa¸ÿÈ, Ã‡k¬¬,ÆÍI¯¿ñïÿÃïý ¯Z)Ò ºÝ®mZ„J¹ŒŠŸqº¶¾[¶lú¡¦iëíN¹\ö#ß³My\0Æ’4÷}°RÅÐïТßïŸ?wQÓ,y»RU}0èÀ;ÞñÔöíÛ;ŽªŒ!˲{CvŠ’ãl6å“$Ù,[³,S "„ÈÑ „ùmúžäÃ&Uy„É`倊ãX¾ãò”D Ë0dng3Oæû¾¢(›Ã«¤²#²´¥”:¥’ü|†y‘jš2+\×ô×ulÀ#Ç»raáÄë§×Z½$ãY‘öƒeÀc ˜m˜¶íÖë#w§µÏTç¶m½téb½^ß¶}Þ êX£®‚ñÿì}{v=ê[¦‘£’å¤y¥j-Mò(Š$@JUõ»³yÃÄ0 ¢¹#HÚúÝŠŒÓ™®´ªlŽ<Ƙ¡«iVÄqÌá®{ 0.Šcœe©ç•1R\ÇÃTÌmÛˆ£ ³úXíä™7àåWN;F-†õJiñNëÝï}žý¹Ÿ»–[zá…×¾ùï_½±0 £Íq( žÄ™i(ªÎó"4îû pÒÃ+“sÌür¹”f™e 5aÉÉ‘« ôåF²¶¶&àîT.MÓD€6zk¯¬‡C˲T‚JŽûýï~~ú=ï9yòäúúúìì6×uGGGÛíîää$ÜôÈÊÊJ§ÛÒ4MQ0!„ñ îá¾6w2™ì“+ltt”æi¿ßßô'È5]©TäMV6‘LrWV!,ròëåÑDZeY¦®ËÉí÷î^ÿ¿1yr\Ü‹–ËeƘômfhmÇŒ¢ˆRnÛ¥0LÚpj¬a5FÊO¼íÛòjŽx?èÀ7Z­V«ÕZ^Z ‚àúõ«wn/ÀË/â¾o&Gœf¹¢âz£ Hâ¿ÿâWç“QU 3 ã0Ž@Õ´(MÂ0ƒXN˜ç À²œ( ×íVùkËu,=Cr³ÌïojÌ’ðø¢©„¨ !P4N…hŠ¢H`¥fhò=Ùh¯U<Û²¬^·]®ÖnÝ\>yò ŒMŒw;á0Ëâܳlfëž_ÿ­ß€ë g×®lw·¿õ‰ƒyæ}Ïýð¥ÿ÷ó_8yú¬|x„À~ØÄTÒíø-Å4í……[1(¹$Ë‹f³aÛ¦ª!Óqýþ@†nH€¦iiJc¨,ÃUÍ(ŠBnlÕjÕH“\6`8è¹Î¤Wr@ŽR‡KKK¥’çyÞÔÔ|ä#yî¹dY²²²¤ªªe2<“eÙæœp™êÞÌ`IË…œf+ó€ry¥i*ÍírqË¿\vrµå”osòGH_ŸìéëúÝt:YHßÌòòòÝ Jª*LJ«ª:22B4róæM¹ãú~’¤Y–Eaž&ù;žø@…ðæ©sósã9õíÅLT‰¦g€©ÉÆÇÿwb{©½Ñ€……Ö奿Øè#<ü½ï~ûÔñq¬¬Ü “äúŠc7,]˃ÐrJŠb@¦@®ë«Š¢0tï@÷<¾io•P ùtqÎÖä^°™‰Ý„ßhš%1ÆX‘Š!¥¦aËB?ËrÛ*éš¹±Ñ!PgKK+¦a-¯¶Î_¸Öm‡05íÍœ}ó’c5Ú«r­|ùÆ%P”²UF}ÆÉâb6=YûÃßÿ_ÿâ¯þ¾ýçœr£ $ŠM7%D‚ìÚq$Š}×uMÓ®__øÕ_û„f@–ÅDÑÒ8‘U £T¶s!€ ®¨šì s.0ÆeABŒ e|Ðï•Ê%•àíÛ·Ó<ï´ÛŽ[ é @ÝnßuJŽã é©IBãùñãÇÇDAFCÓT9™ßõ[hòº*;LãÁ`¥‰ä Hÿ×f†‘Þû…7]/œsÉ®I’¤ wAœr3Þ4꺮H»eÉò",[Ífs0xž'­cEQ<Ï˲,ƒ^¯G)EGQDˆÂ˜hot-Ãxù¹ç‹"kµÖX^¼úòkåŽWž-WG0ÆfêšYä,‰ò;wn‡á å Hk¥ZS§§+A¸2¿¥¾kûèSoàÀîÙŽîÞ·e^ÑÑÔÌt†%Ó ‚~J“‚å¸`!ªªj”2„ã9»ÕZÉ |ÂeA/¿Œ éK–¹|áò¹ÂÈq(Œ³<ÏóœsPU=IR„0B$Ï‹n·×ïö‡C!”¥)Â"N’z³yåÒæÈ\£>yýÆÍ0ì:´Ï¶LqéÒƳ+W®”=g~~V0Hâ\ÁêpØ__]|èácì~Ë[ZX¸Öö¼’…ç–‚ Oææv---NNN†Gq½^ø‘‡#^–'iœÉ.€¢ì•¥­T]íõûrApÎmÛ ‚€qŽZߨó½…`BP!Øøø¨¡ëwnßB\¹r}8ð»Ý^­ÖÐuCpÃP3´#÷vK.Ƽ×ëæy¶cÇŽÙ¹-BQA×UZdi’[–%O[)” ƒ»ìX…ÈñªÕj5 C‰«ç—4dÈ•*7Œ ä·EÍó\ ‘_&9ž!Œ€ GQ(WUE&@ Ô؜^¯ÇQ£Q×uMˆ»…$K†ƒ€3‘¦i¯×7M»T*q.ÀžÛ(ÍA^ÉkŽŽmt‡§N]ùòW¿óÒ '^~áå—^zýõ×Nܺ¹GÙÜÜÜøøøÄÄ”my%·jUMsƒ ™›]YjWJ Ì5̈J̕ś“[§)Û20ÛÐ,Ç´,“ Bɲ\ÓUË2D­Vs]ïzyv7Â^¯×9ç½^/I]×å›$1’|J©lµÄqŠ}EQ0"aVðÁ` jºiZ~0ŒŠZµaY®mÛÕrÙq\ øßÿþñ×/È ‡)h­lw:‹ƒA«ß]oVëÕrƒâæõVg#?}rA€U™ÃıOib˜Ú‘#Ñ“oœq-=Š¢‚æÊòÊ­F£±±ÞLiê•Í4 )Íó4MÓïEät]§,看Œ#‚ ÕNÓ0 Ç)•Êq+˜Dš† ™– @9Ëõâ;«4`ꥥ;«yQLOO÷‡ƒÑ‰±ý‡öÀjk!N£ÙÙùk×®ÕÇVýÐ"7MWÚ»$æD¾¹²¨@˜¶aYV´ *©®®´ô{,?"ªDf†¾/W3AˆS š¢çœæ+¦©Á0Ëy’Õ¹®ëÝî°×ëT*dy”¤FJ¯7H’Œ¨ZQ†a¢ŒŽŽRJ‹"«7Êëëëݰ— ìÞ±c<µ}þ#“óŸgYùk°±±ÁâââúyI5+y‘lÛ¾½µ±¾¼¶ºkûŽ{÷=ùø[Qµ'O^¬—vµ”yæžéTVÌÅ‘a\d€(¨ w ª¢A(£úRHÙ”/lÛ¦iÂ㢦ҥ$Äy†B4%#‘S@XqmÓ£¤ÈsJuC3TÍ«;ÐÞXµK£DC'O¼éG´Vw5:)½zîÊüÎm ³'ÞþÐdÅý¾»vX[]ïã3ŸúÿîñÇ~ÿÓïX][€n¯… ûÀŸ|èá>ùÆùßúÝO¡½{Pˆ*õŠÏsUÕdá˜&¹išAA “Çqº%+Š‚á0(å—.]é´rŸkµZ#õFÇŽmïÛ·ï¾ûï€Î°{þͳY–íݳDz ”‹,Ëc`|èçrZœW!‘DòŽÅ• ™l‘X+MÓúý¾B4ò”⫬·î‹b8Ê]Š52CF)-ŠDÞy75YÞ+ 6ôFFêˆ+вÞj &&¦zƒ¡lÀ=]LÖ çÏŸ#ïÝ»Ž»¯^¯¯,¯EQŠ‘€xÊò£T*Õëõáp(»Çq'q çΟßw`’gƒnïÊÅKýNguŠ ø7ü©gn»Y.óœ'išmûþàžÓ7› ÃPZW[­–<ååEYž í–ŒSJ9‚¢`Šª@’gþ0ì÷û¶ë`@°¼`e9UM«çÁ ÇI!„ßuœ]¿q¥96¶´´túÔùZ¹&w:à0:2rîâÙJÅû©§Þztÿ.Ë®Àß|îïFF'ßñΧOŸ;!PQ­xƒ¶_ñ,x×»êÎâB¯Ó©7ª—/^Ùµs÷þ“¤ä6B𦂋"ûÐÏ~PÕˆiéahª!…L0 s®j ç\ é’é—¦©ªh„z½qòäÉï|ç;‘z2’Æ9ÄQÌ9OÓìÊ•«‹Ë«Øë÷‹<ŸoµZõz}frj¤ÙD-­¬]ºx)ŽÓ½{v›¦á8Îp P³¤i6kµš,Xå%IÓ4™}«TÍ‘±îêJ«Óé;v #%K‹4Í$±"ŽãÁ` Dz5ÕjµnߺuàÀ(Š:ŽœÚ*‡U÷z½,Ë‚ ¤”åy‘çE’¤’‹P­Väp¢8Ž4M˳ÂuKQ}_.kBH¯×“‡@§ÓùøÇqnv¼ÕZ‚U«žaªM„(ÂhP©Ú–©˜–ªé$/â$ 4¨ ;i– Aš¦SÓÓ€+d|llëÜüÌäÔ¯~âWÞóž÷,\¼^±<Œ…@‡iBÂc€ÂaMÓÏž=GˆâûA©ä!t7A%ñβ€)—ËÃáÐ2LŒqšŒ±0ŒÒ4e Bªª"L8ã\ˆ$/„B€à\ŠBÑ4 ý’e+)¹†uæ'':+-‘*•ju§†ë´ûÝC÷M"ZüÓW¾ˆ1¹sçöÏô‚ øî÷¾ýø[=|xo§Ó-—Æ»ýaVˆ—^zevfvffjñöí‰ÑfV¤_û挌IWÍòtrr¼Ó]Ó˜¢ª:BÈu]).¦iêye¹®ëIÂTU•®õ¢(JnY.܇~Xª˜p76‰BžW zEQŒ+H€v»çù… jµZµV›˜™îöúÀ96 ›ñ|bbìòå‹{vïîõ Èb9½·lÆÚÚšü¡ò&»±±áûƒ~¿[.—%pY¾Ïs'&Æò<“Ët“¯$¢µZÍûï6¿» XŒ¥N^¶0ÆÒ6™¦©¢hºnb¬0Æ6•)ÓÞ»eR‹šZ½^‚ Š"Ã0þËùrÙöÆÆæàÂÙå[ ]ËÒñrÙ¢öj[ž;vì€$J‹ŒYF-…tjªª¦…q¤[f0êŠÚh4.]ºI@Q )-XÎäx Xµ-ƒ1fYÖÕ«W×V×¥ÃF*¬2=F) ‚@þ¥‚ °m;I²,ËÂ$®”kYΠ`,Ïåí ŒC\dB~K)ª ˆ+ºR©Ul¢­.ÜxóÒ£3{ç§fÞ8sêGËWš•šgšgqs¬†þ¶]»Ž9´çÀŽ/ù«ÕÊÈŸýÙg>ú±_|õÚŬȀÌÏﺮ1ž†þð#(ŠÊ9B¤ŠÎs]‡R'ÑfnIúw0Æ˲d§c(W<Ë2 QÖVÛÇ_ÿÉpè‡QØlŽ`€öòâbey*•JÁÛžz²91~þÒ¥¾?tìR–Fkå²kÙÆp0 ”qεšœ–çy³ÙLÓTBo¤è«(ÄqEQò<“²”aFºÝîf`K¸åwٶıl…oîÖr†G‰Wò¢0JÓ,ŠbƸeZIœPÊÓ4Š"眧YÂ97t3ŠâRÉëöú¥RIêR—•Çôô´ œ•s±e˼ªjª¢†Á'Di6F+•ª¢¨EA5Mç\0ÆÓ4˲<†Qõz½(Žƒ(ì´Ûº¦±¼ØX[‚`ÇÖªg1 •JnÐë Q MÕò"£¬0 ½\ñ¶n›m‚mÛ¢”Ú¶%Í~’Û#¯ÎRÄHIÓLUMMÓ}?dŒ‡Q¤ªzQP@•raZîÚâJä‡&1 ),UWÕÖlVf)ZûÚ-µ›a^%úüÎù[×o´7ÚÉ`8»e¶Q¯ž=}JA|èªÆ{ßûþ;‹·-Ûúìg?ûøã7jµýû÷*D_\\½~õÊÆz+ŠÂ?9ñÊk¯'I²uÛŽ¤È¾õ“;ŽáñâþûOLŒOLŒsÎ5Ucœ"¸ÛE!òF†’5+ÆXÖšªB4M/Š"ML¢“3gÎõûÃÓ§Ï€µz%ôƒÖUV­õÛw¬m¬ë¶eºÎF·ÃŒ,ÝÐ5¥\± š¦ÄQÇQ–¥®íHottt}}]. o6›–m0N SWTbš€0( Éò4 £¢(â8v]W¾ )ÐbŒ9cR´’m)K(ª¨ò–S«ÕdL@ª°QŒ¥cLN†C_ Š"w!Ïó:Ž´~¶ZkŒÅss3¶­3N£(2LbYšïlÃø0RY–%”æyžp™ô§Œa‚)ccÁ¸©éaM׫D\ƒ)b8da¤"c,$€¸aè”E‘¯­­` š¦hšbY¦lmÈöÞæÈ9ϲB0‘’Ó¢ß$iZ$¯ba]׉¢DaTvË®ã²$[_\ýö׿!@ÌM̵jÕpmÍTF¦GúI­»¶»6vdvûCÛ÷=²mÏÑ­»p’[ŽñÁŸƪWΞ½úw_øb½Ñ`ÞöÄÛvîØyëÆ­ÏüÉgý~ÇÖÊ[ŸxøàíΟïûª•ÚÃäµ;_ûçøþ€ÌíØEÙÂÂíO~ò_m™É‹¡¦-Dž!¬!ÃУ8bœ~†QÙ­l´Ú†j°‚2Æ9ã¶e €<Ï;½ÎÐDq\±Ko?±º´|óʈWíûC…(¯¾úR{­õèCLLŒÿÔSOž:ó†ãÚ»ví*W¼rµf›¦eš*!ƒÁ†TÓÈæýE^øýA·Û5,K"–eFa, ÔŒ±(ò…`ŒTUɲc$' ¢ ’lP©Td\SQÆXEõZ c†¡ïûwi†‘$Iyž©ššf)e4ÍÒF£^TÓ4Ó4K^Éqì¢È1ÆŒQƒ¨\öºÝ®[òäô™JWU=£ÁÐkîØ:aš†ª ÖúFÉ+åyÆEFÃJÕQ G˜qŒs¢ªq*¸(tUSˆ¡ªšn躩iªjêz'*&EN¹I–bCA*ŠãQ¡…3.§Œ*:aœ:®Í8 Ãc¤&È0Ì8ŽeDº“e“…1–$©a8yQdEE1 EÍsšçE†9¥YA E-™–®ª:¥:¼{fÆ4ÍøÂ‚(ª7£"¦^¨Bo¸3ó[p'í•×ÁÁ` iŠUvßý÷]X¸þù¿ÿâýù—ieqÉ2Í7OŸ½±p]!äÃyöÉ'ßzîü/½üÒ¥KŽ;fZv©\!Dmm´£ ÃßGic¤öŽ§Þªëz’?è÷ƒ0ŠÜ’g™,ø*åÊíÛ·Ã ´m»ßëy^I Àon<â^”@PÖíö0ÆEF‡¾_2,"àðÞ};¶ï°=KÕβ0Ø:yËÃG ÑpxáÍ7[ËKºe˜ºé–J%×[]]ëuz”åzµTr4ÍEϳ,éõÚE‘E‘e)BXÓ Œ±‚‘€A`Xp‘eÙ®ë¢ „UU“õÀ`0pÇ«”LË,WÊ-l×6Lƒ2Ê»ž‹15M£Rñš&í¼ c0L“`%MÓ,+TU%XÕ5½ Qey–fEn膮kaû~¬öŵáph+ر]F™m[Ë—oÙŽ9·uÖ÷ަ„(#Q X1ܲ„(Ò¢HiA¥,Ïšgœå‚S¯TãT·-¢©¥†“çIÅY˜X¦m9NÁ`’dYšåŒr]3QmËévûª¢1Êó¼Œò¢Ð ƒ2 (c\p@ˆµ <-¨ne”qHÕ4Ëü(T4¢j:Bœõ{YnñœÖ™N‘Ýìð#>ôÆÙ ß}á•“ož§DÑJ¶éÙ‚C´=òÔcC(®~­uìÚAYŠû›¿òÉçŸÿÖ«/¼øÔ“ONíÙ³çòåó×.Mliô£žÀîÉÓ§£$»sç¶çÙ®©Š"O£€t{dûÎý¶éô½f³²¾¾^©ºy–c¬X–;ôû%וGÛµ«×*• Á$Žc…!ÈRïîazñ«bráÂÅ(Šâ8åŒc÷{Á°{øÐAÛ(™šyöÌ™šWŠ|ÿO¿³Ý^/•<§TdäYn™¶¦é¦a $‚ÐW0aŒ ¡ié\Qˆ wÉr6 £Í̉Bê>R‹Õu=M3i§’R—,X%-„1VUUŽ¥8eY–àH0¬i&ÂdëÖ­ÆH½^u\£\)¹® ˆQš•=OÓTMS"«†á*ÄÐ4[IÓŒ1¡iF½^kŒÔ S­TKõF½T.MÅŠPTÌ9ã@†ÝX÷†é¢%µæëë]Äí$€3Æ ÎE³Ù(ŠÜõFcDlÙ¦ìb¨ª&¸@ID@–gšq×Ð#oœÒé+tÇuå-SVq›$P„pžS@Xʼnl¸ØŽSE’¦Žiûa”eTpTƒõÐÞ}"žWZ»~±½tçé'¯7ŽìØþæ©S¯ÿ VÜæØÌÑ‡Ž¬†íÙÚ9wÿC÷¿qêĉŸ¼~hïþÈï¿û§ß½u~Û?}韮^º\.—|øAüüùó7nžxãÂêj;Œrε`˜·7‚¹¹nɉ£`µµJÆ&¶„aØí¶?ü៩V« ]Sˆ.Êh\äYGiš\ºx1ŠÂÝ»w)*Q0Öuß ?t:,ˈ¢Èù2”ÒË—¯gy‘&)Âc¨Ö+†¡ôú½~{ÐÞØèµ× çe×íwÚóÛ·w}Ç«˜–†¹J„ ŽC„dG;íNÅYF‹"«VËBpQ*y¶íض Ék“tºÈ"RÉOÓtccCzåLVlžç1Æ4M•ÝTy’’ªïûa zÁøøøØøèúz+ŽcL„iŒ\„¨QH–åŒ1Ûv*•Z§Ý¥”æ9+•ʃþsQ®x¾ïߺ}sçÎq>ÌYßukLð²³åÿùÓ¿ÿÁ_ øZ·ÞÚnß)UÊ@ø_~ö~øÝó WÂ(.F&ì ]J¢,I㬈wîÚ… Òtst|´Z+‡Qˆ0HˆØp8”ÅØp8ĘFŠ¢´Ðš$I„’éy—K1"B€ªhª¢@Fy–B@’J¦¾ môc†®ƒØµ]BàÐÞhÃ0€ñÜÜÜt­4=ÖtTœûOAO=ùö-3Û¿qþÅã';K•É‘Žß]íw3žÿÜÏÿÜäØd§Š¢?þ“~¯ÿ®§ßuߡíÖÚ‹/¾pðÐG{T~ý'g½rÓr¼zu*Š·o© Ú½{njjä'oœV4Mé¶û[·n•°‰"*T(ºnèLÏâ»”„™™ÏóMÓD\EQ®U¥Ô,§_ä´àœ›ŽÝY»ðíݵÛq«W.>|àꥫ°¶‚ †p0l!´á¿réÖ­÷}èY@È'ÅqC]W‹qÎ1"²;*Ÿ MS0UÕ‹ân"@nœ¦âyžž¤‚Á9—¾>¹ÓH])ÏsMSïÑ™ñf˜Ó÷}UUM˜ÃoÝZˆ“‘$‰ ^¯æy*ásqœjš¦ªšä\§iÇ©4%2†Ò4•T3‰OT4rúôi¬’ÉñÑæÈœ;}šæ“£ÎÆÚÒçþê܇~ö§Øýâ Ï€¡Ç¨¤®­\½r#zë[y<Œú0;;¿´Üj6›”RˆÓ$MûèD“ò™aENËåšgö²IDATr¿?›?ò¥ E‘ã8›4M1Ñ…@2_D)•îÆDžç‘¢(¢(RT]×õ4/ƒÆØ2×&ý^§»±~éò…¼ï½pmeáÔ‰7¹ÿÐáéúÒ=ÛàÎâ­üÅý/\³A¸ó7ÿé…—^Ø2; çzÄì–ùÛ·mQŒõµW.ÀÚ­S•Š™Ð½™/½ú7÷íš«Ô'àæ5£„÷íØºm‹fлø ™Ùí%·ôÌ3?Ki˜e)&LrŽâ8sJ&gÔ¶-Ó4J%7N"`š†¦*á¼(äi2>1Á9†aܸ¹0=9-oÛ¶½?è~ÿ¾£Gt]é ºþ`Àx±{Ç6]S‚áÐöÊv¹:Èò‰™-” ÎM#žgºæyÒ®²‚)Šê¡¢b¢`ÃÐJ™¦écκ÷!ç­IßÉ`0BH,¦´k”J% .¸Ë¨BB”Òóº é®TÊeÏk4êqŒ4\×M’XUÏ+#D8C¦a™¦%_8ç‚1*€B´È Î9B°¾¾ŽJÒt0vìØ_²¦n\;µ²¼49IÿôO?¹oÿHž&/.·×2LÉÓï<¸unê>õÑ}èÁ,žzãÚÖÙ33Û„È,˃„mbb¦ÓîPÊz½~§Ó‰ã¤V­IUÎ0Ì,“`<:6jF‡òl‘Ò‡|&Br  Hn’išòH‘7!BÂŒ±8Icš¦q&4Eó½Ûf|ì8{îÆäÂ¥Ëv©l9î……ùùÙz³ž¦!Ñ”Û7<Ãк}þêé×N^¾~Ó Ö—W|ø¢£J­Ôh–ÊiNOžºLf·nݹk‡ª‚¢(ŒPœ²Â0õÎF÷ĉSwî,qÆ#uÇ1‹"Ûh·£8¿xáÒÊÊêÄÔTš&¦møþpym%ϳ,N®ßˆÂ`nnëéÓgFGF}ï¾=ož;½mÛ–jÝC‚Eï¸^H)•ÝÆ8V•¼ ¶E‹<*y.ž&™eYív @õFµÙ±-»(2€ç¦Öªæ±#Û ULŽM:uÊ­à$_÷ÓO ¥“e~štÕÑ×_=§v¹bŒNT~ø½W——–üAwzrúä©7çæ¶Y–9½e:/b™Ä7~o(j4êÍ*Õ’ãZ€ç\Ò=¤T'“´ºn‹ãØ04J Î…4#ÀŒ³~¿«ªÅIžçy!ó-\ŒÔš†®Ô*îîÛo%I¢™joØQ€OÖíG<&8ùú7~pcáVœÊ0ŠÊu7¦ý´ÈŒo]»Úë®ïŸƒ0æaxêÔÉ>ƒsçÞö»¯\9°oïÑû·4Æoœ»¬€j–k “¨­µEÛ)iŽ„e1õÜÅ7Œ±çyš¦C ½^¯äÚªªÄI¢ëf¹\][^߆ÃašÍÆÊòzÉm†‘··Y™ÈÒL7mË,ת6Ž|Ã2`£Ý £P7Ô©™‘ÖÆ-¯d(Éz B$c´Þ£ ëªßCÓ¸®Ë8' z½jµ†>ÜûÐuF·×K Aš¦â@XÆ2-Ë’ýaJ©ª*w»ÛE išZ)‰)Y–ÉÏ[–%‡H%A*ü²l=ç8ŽËU7+ò,LjÐ •QιR0FA¡9•S{8çï|ç;Î;wò×wl›VQÖð¦àWé~ú½=þø}¯¼òÚÈõîÑ}úß}öú%¸ºðúçÿþo9Xþ­öù «_ýÚ~ÿß~ÞýÞ]¶5Õ¨îûÓOÿã_þù÷=¯@`n®þÔ»E¬gäþ?LM•¸Ë+]¨TMB$ œp‘<ãÓŒ ¤[zªJ(åcòÆiº¯ÙYÎã8v e‰5ÓØèö0E,¾ñâñ‘Zl½6Ur,µ×»†YzøØ6U3à;ß|µ×îZ%eß¹‡vNMÎݺ~óÀÜv¸sòøã;çœßze¥ó·Ï½:9;‹ì|ûõÇç÷=¾õÀž g/LÌÔÆµ&(íµ=½ýÅ•w¬Îû¹É1(Œ±ññq9f ²,aŒaŒLÓ´M+.ÏÎÎÀÔd}qqqßÞmAèªECJ©ŒPçyî8î›·+•ÊêJÛoÝünܺ¶ezÛz§Ýíµßöä·o]'@¿ßh4o¯´¼éIUã”jª"×\Dzœ’ƒÑäá®kŠ´Ð'ij†©âî-£8ŽE«T*vî%ïñ8¨LÆéº.¥ïûQÉD¡”½ä‰/ɬRù’}/iõ(Š¢V«Ù¶mé‹hž§2¤iZQp„”<Ïç€@LÛúÑó?®Vë+++®£FÞð‹_ø¯pßáûyìýš•8vôþÏüÉç-Ï|ô­ÀµëCJív{}ýÚ0ðû_ÿf©ŒúôýÝÉ7ŸûÁ©'ŸºôGüMSàÒÕ+ûï›Fše;ÕÑ1; ø ǧ§€å¾¤ØCM36ç…„(¬(ÇI’¨(Š{¾¹$ŽR,¬,E¡ïaj˜ºLc—<›rf;Ú]Sv ñçŸÁèøèX£a_oNàŸyö-½m'”GñË/ø¹gžyõå×¾ò¹¯/­wž|â-Þîi¸~ñÌ£‡4+žjŒ¼¯xdd¦)L·Wn{Nã/¿öÕŠfM>p`­µ¼~ë2xc£c[&¬þJɵ76úÜ0ýëÿíÿØ·goÐó\ƒ^s¤îûà ¼jó«_ùÎHu 0a”yähàǦiSžÜ}*Õ:þñ /å9eEâªùÂÛ0ì§•zscc£Ù¬  µŠÛ¬×'…ß÷ˉuµ22V*• U#˜€ÄKø‡laËlIµV¶mÛ¶m‚PA3Hr†-ËåyÇ)B(ŽRÎ…´ifYæ8¶ìÓ¤i:::ºÉm”Âp©T’ü6™’ ‹$IZ­–¤eɯ‡{ÙWU#˜Qœ&I&«¢¨–íú~˜d©¢iII.öôäDQ—Î_ÀãcõóçŸ{ög>2øð¹ÿôY×±~õW~ýµWÎŒŒŒ9U<59?zîåµÕÿé7?‰Iñ‡ŸúÝgŸ}öО‡àGÏxî¹ã^¥ñÕo|åæí…‘ÆøK¯¼ü}ê÷à½ï{×§?ýGBù¹=|©Lš#hH—bQPUÕ !ÃA !¢ê˜@‡iÇqÊ(€ ˆ-³„8¢(Š’¬HP§d€n(Iž ¬f)S° †¯¿ò*¨Ñö¾õî:åé¾ý‡ææçãtè–ðW¿ö•›7/n›}d0H¾ôÅï>ðàOýúoüÆèdÙñ” 8p°µÚÛ¶uçëÇ_Z¸uÙv”$‰Ïœ9Ã9m6³´@BÈá a˲%Rcœy’f#JÓŒ’ Ú(Šâ8•ņ¬¥çU.åMC·¼ŸÉFƒ\â’@aLº¡hª¢(Y–çE®ª¤(¥ †Ý<Ët¿ôûà±Ã/ýøG§ßxããûÅo¼T©º®‹17½;O“zMyà¡ýý ïvúY–›¦‘&Á[Wvîšù·ø?{ž„yÎÂ}ðç¯__zÿÞfý¡ß7´*§ÖgþøoV–ºO>uìwÿ÷?ý®cË«×.œ»cjÞûßóL­2žçCÙœâ.+,IRιašDQ)+Â0I’†Aœç”1Hd© ,¯,SZPÆÓ4Û·oO0@X_YnuÚýN»G‹!\öÜgžýàâ«MåȽÎ^JB «½n§ç·í’6>Ö¸µ¼ŽŒÒ«¯Ÿ¾¹¸Úï‡Du¼‘© «¤aE³,Ã0”"OCƒ<'4Ee¸«7ë­N[Óu °¶º*„H zúô›äcÿò_ ý¥L¦>!˜Ò€ç¹““B®ïÓÓ“aAô‘k—Ëå£î‘5²ôJµ^¯@@`ÖsÉÇ[K…åÃcBbÕš^¹^º†Æ£b1¯ªâÁá/–õ"R´Óí¬ÜXy÷¶lÙÌ1ívŸ@¶ã »?²(¥s‰x~a¾Ý4쪊่c† q¡Ç“ýÞøáa×'DSÔ¸¢9†¶a œ9ó?‚”y°yóÞÚ‹ç/àÙÓ'ûf=—J÷Í®š`nß¹‰< 9èÕF<‘&“)P2ÞþfÛcPÎ…Yê»OŽŠ…\úÊÕË‰Ì H²Ôìt-„'.Šæ²ªÙj¶{ÇÔ’-éûþж)˽~õæ/¶Ûg⨪í%IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/rt_st_transform03.png0000644000000000000000000023743311722777314022664 0ustar rootroot‰PNG  IHDRäª2gtÆ IDATxœÜ¼g³¥çu%¶Ÿü¼ñ¤{n¾ÑFj$‚¤¢)kÄE9ÔÌp˜ÕL9•CyÊüÅaìrÉU¶§Æ#i<yìY¶é‘HŠ H€²Ðávß|⛟ì‡Ôðùv>œðž÷Ùk¯½ÖÚÀïÿßzïö¶hT«B@'Çg|øÑxsãúÕ§××ûg“Ã_ùê/]»v©i„ØÑáô×ÿ‡ÿ¥,ëÓ³YeÏ?ÿܾðÊÕ«;uiI‘¶þŸýwÞ~ë=Ýå§/}ág>¿µ5‚`6ÖG’ñ?ù“ùî{?¨ªYQ.½ÅQÔØ¶]ñS?ýÊóÏ?%%3Ɔ„ÐbY=zt`Œ\t]§Éµk×îÝ»sõêÕéìl8‚Œ1Þ{BHÇÓé´i*J‰Œ$!cȵ¦mÏiöÖ÷Þ¿õñápøÔÕ‹”ÀáÁ>ö:MÓƒƒ€°µµ¹6 Á³ÆJ¤Ö:„€1îºN)å½7ÆlnŽ#A—‹Ežç„É䬪ÊÍ­­ããc†¨5–sÇ1!¤mÛ²,ïܹ3_.Zmœ÷!!pJ“$¹pþBžeã!$Š¢^¯Ç1ç¼®ëNéSŒ±uVw]3Ÿ.’hpë£O³¸·1<ýÌù§_¼p6?:z4¥nðî{·œ]ÿìõð?þøÿéƒ@Æ—7®Çƒ Ž£ñhçænÝyÿ&ªôSç..šùÖÖÞÝ;Œ;»»Î¸Ÿ/êøhæ‚¶zÙï÷776œµ”C]·„2xY­m*èîùÝ$áIÌÁ<<9=3Æ„(%TDÞ„P×µÃѰßïÓ…0cÜû‚¬µ€$M“4©ªÊ9§M—$I>ŒZ]F]×ggg»»ÛMSO§Ó¦©•êNÏÎ>üè“àÉÝ[òÞHiS Îüx<ÀàBwïÞ­ª*MÓ¢,’4Ž"éÌç‹8Ê(¥EQìîîFQ4ŸÏCý~/Ïó¦*š¦]__·ÖÄq¼±±>ö›¦é÷‡]ÕH!)¥Î¹¶m­µÖÚ¦iêª"BRJCBðàœC¥I’e™µÖ{/„àœk­£(jÛ!D)m•öN3J(çœòÔSWŸ+£ã4³ö÷«¥&} I“^>ø‡¿ý¿ &³lðéýG;;çg³¥d}}\–åÞ{ÿøÉÑõk—¾õͯcÐb" ˆ¨¶#ÈűLò(IbBˆ1¶¬šÅ¢¬eWéõõõVu€€ (ÖF{ïó,ÑmÓëõÎïíÅ"?ì÷…ÎØ½½]Ψi¥cLJ¹ªŒ¡¡ªºã£ùÁÁÙbQ€¼í­u­ Á9o&0[zyNàkúgÃÞ€o µ1ÞžNKcÚõFVéª?\?>>xr°UÇXžžN­u”#ÕµRÊ8Ž›fÚ.Ï2ŒéáÁ“E¹ô8ˆˆ ׇ—¯\Œžç™µú_þÅ·ŽON1Æk¬wšQ¶ºs”Pë\×uaÎBh0Ìf˦Q¡Á /$Sª¹tù‚”‚1V×%B!XWï}’$u]7mM¹té’³Î<ìU''“×>÷Ó››§gÇtÞ“Ö5M[ Þ{ÆØÆÆz–§Æ˜årI€¶m !ý~¿®kk-B(eóy ljRc$¥ êªI³¤iš(’Á­5Æ8Š¢¢(îß¿?N­wX@È9‡(&”1J)c¬m[ˆ¢ˆ1†1fŒu]g­M’„2ˆ7]SUµîÚùbz|xŒ‘DímŸ›/—?¸ùÑp÷g/=õü¿ÿÃ;wïcž{î…á`£kB±|ýÕ/tjæÕ÷Þxs4êc‚“3JñÝ;·T[AÌ{@Œ£&hkkcTWµQF·Z·ÚYßï'Q̵ëŒ5(§”ñ8 PJÚ¶)Ê¢ªjÁâLÄy1Ê8îºÎ9·:$c¥BÈo•®ÊÀDZTJ·ª3FNZU!ç F a„Œî8— y EݳŽ#çê²ùáGoN§“lœÏ?ïØî¹áÅË[MÓ–E­54µ®›IšäI–,¼‚sΚç‚þýï¿»\ÌÓQœ â?ºus¼>ºxñ¢Ñz±(Œ6!Œp°Ö Ž»NSB¥”„Ъác)eY–i¥œ3”J¥;ŒQÞ{‹1¢”úà­µJÙÕ¯pzzÀcŒ»®ÏOŸ$bwMÛ”KNP’f‡ª*¼³àBHJI¥„PJÀƒ >DQÄ9_ÁXk˲ìõzF›^Þ‹ãÀ;gcqA@ZÙˆQ k­1f±Xܹsgkkk±\jï!!D0¡”æy>N×ÖÖc«K¦”J)ëºNÓ´( ¼T”År1¯ÊÅñÉ¡Qš`ž%½‡û÷‹à ïí÷oÜxîlº˜N&¸5jÐë÷†½ª\>zt÷ìäà—~ñ˯¿zcw»Gq8Ÿ~û›ß îß{xv2i»F›Ö9#Dìtzþ…g¯^»$ÕZ­Ð!¼˜/ŒqƒþÀZƒ0pÁ”êBðMSs΄ŒÓ‚wÞûàœ›ÍfÖš8ŽÀ9‡1¦”mË™:NÄ“'¹ iš€³®iÎyIçÖZ)µ‚vÁå ~R9Æ9ãb±À˜æycì½çœEQd­ÕZçY!PJëºÞßß?==Eu]Gu>B!|°Æ´mÛËsÎùа !(¥Þû¿bÉMÓ€BÓ4Åri´œB¼³išPÆŒqÚ¸ÅbùðÎÝ«/ܹý b  •Z>æý“ßÿí?ûÓ? ó‹—öœ·GÇLJ‡óÙÉ éTÛjm:eœóÊèÖÖ6 B SLceII–öâ4>zH%k@Ὧ0&RF1£-llŒ/]Úð„¦i’$IÓ”s¾âl!Lˆ÷Þ:Ç…@UU5MÃÞÙN·Æ9(v¬ y–yg½³|(!/¿xãÝ·¾Û”…dB·.f½LÆmÑ<ÿÜ«uÕ|óoÝüÑÍýýÇkkã<Ï£HžMf~ú{ÿÛï¼ñÆ_ÜxáÚç>ÿòææÖþ£S«ìr: ȽþÊg~áË?óÖŠ²,gËb^ÎNgÁï½V:xï#)»N—eÑu1!ĵÖ"„‡ÃÑ|^8ï“4¥ 9g£½^æ½G…àq!.Dº(ŠétúÌ3OðáÍ4M½wZë4GÏœ¿ty³ijïAp.åƒ#UÙ)U¯Î´µ–1"eD)YeSw+„ãœcŒWd«ëº²ªBH¥T’ÄœsÆiÅ!€š!TUÕu„„ι¦mR€½F<Æ8Žã8ŽsqK) !ÞûÕSιsί­1Ƭ^F5Zøºy´¹¹ñ7õ«Ï==­:÷î?.ÊMSÙÖ¸Îik­–‚qB¼Çˆ°Nù££³~ž¬¯õ#Î! à%h0è`‹E3Œ}ÛÕÆÊ„”Âk¬2Æ °3Žó<Ï3ç㸪ªÁ` „ÐZ[kWåmŒiË Á|@„ÂÆÖZ”ÈÛ·ïÆeœ88eÖxkƒ”’3§ù£‡ÖÇC¿ô‹?ÿêË7b)ö><99Š#ùôSWw¶wÊ¢{÷Ý›‡Gë`kçÜ«¯}ñÂ…+·>¹cN'”ŠgŸ}þå—_¾|ù2gì“Oîüîïü“ÿú¿úûEYê¶Š#qþܹ­­ÍÑ ¿pnûõÏ|æ ¯½þÆ·¾À;oº®Bjåœ óùäWõ+£ cTa­÷Þ3Ê ¡”à£Y–2Æ(¥eUTUÁ£”ï‹åâÞÝ;OTÓÞ»s‡ l´:;==;9B`ž~úÊ`ØÛÞݺxñÒbY,Á¬i›Ó“ú®···£Œ3!Äê³”²UUÇq¼Òœs+V½bÆŒà$IÚ¶aŒF±¤”"„B!xŠIUW!x!8åTk3Ÿ/¡ªÓ˜„1B#ÌBBÆq§I‚„VÇ”r…âAhÚºX.•R€RR–KïÑ {ЩëFP’D$¸öÂ… ‹¢U:ÜýôáÍ?ö©ÎO'ÕrÑMgÕ“£³¦UÞÛªœ5U1èeÆ(†™RÖy„ `Ìý~Ðca gXF(B%ImmíJ5Îxð–s’eýˆÇ”0cÌh8ØÝÛ*«¥„RvóæMB(cl©ÖÚ¶m5JµÞû‚óÎY‹ôû½8Iʪ"\0b”Eqœ %išå)€'ðßýýÿvgëüÙÙòö{Æ©­áÆÖÚ°?hjU6:Ê"±ÉröþÍ~tó–·>’”3‹Ól>Ÿß»ÿèøÌhp…I&Óé 'g‹·Þ~çæ?üôÞ‡gg ÈwþòÛ‹rêƒ5&8‡£(Å$ †ñ/ü«?…‰7Ö @ˆê½/–%¥”sÆcœ2Î8!B€1ê÷«á¼[N'ÇOžï]§›eqö丙X9S©Ùd1Ÿ/ˆä£.¨¢,ŽŽªªÌÒ¤©ËÍÍ~¿·¢­F[Õi£êÔéééæææh4ÒZcVÒX¯ßëºÚy5™RNÆëky/C:Õ6m#ebEŒˆ”EˆªR§§ e”Q¼RÚ:\€Po0È{=ŒƒµZëÎyG !xï³,3Æ,—Óå|ªZ…[ã–‹¢—÷ÿ“ÿø?=¿w”ª“7$bý­Êažô³Á¨5ÑèÂÅ Y’xíŽ'Yš]8¿5\‹«zñdÿñb>áÙçNOκθ€b6Â!OE$Y’Ê€¼óLpÖ ¼XVœ ˆbœ§éx8È©T»,J.ã4 øà¬5q’2.ûƒÞÉÉY’äyÖÇ„cBpÖ›(Š$RH„ÀYKcÑë%{;›Oï ö„!FBÁíí®ÿÝ¿óï>yHàßûþêê¾ûæÛ?–’nlŒ7Ö78EuåêåëÏ\ÙÝÝʳ¼.ºÙd)Yì¬sÎ=wã…ñx4ÖÇ£õõ5ŠñŸÿùÿËï´òŒekë;¯¬ïî°XÐHzÒ©Æû€`‚ côúõ«ëë#´Â„5®ª*ç‚s.„À8“R¬ÆIï]Ikm]WZið>X¯éÚVpœÇAð!Êh@ÁûÔõký~ÿøøt1/T«L§1Œ‘~¿Ÿ$‰Öz0¬Ôͦi(¥›››Bˆ{BDQ$¥„œs£a0H)ó¼ùö[ߥ$óe‰y”6ÿü›o†½Áðl:=›Nç³åƒ{œ±ÎvãoüR]ŸH‰½þµ«ÏÜxþųã“÷ð¾w>Š„0ÂHJÞï§ý^ àVzÈŠYc­sie‚÷‘”œ³<Ëz½ £PÕuÛ™¶i8€@kݶm×tÎú$Ižloï0Æ1¡!csÄÞï,AXr!eÄ(;;9>;=«›|Öguר¶¼zåÜîÎèý¼KàdrF!ùøãOŠù2I¹·>MsLÙÅ+—?÷…ׇþ­·ÞkŠ:Èòn•uúõ×?wáâ¹^žqÆŽŽÞøËïıìÚ%õzëm×Í‹ùp˜{ÇN”F=óÖaŒ´uª®¥d/¼pƒqÖu ç,pÎS‚óýþ€º¿ÿ8MÓ(Ž~>£°(ë˜g£|4×ÖÆË¢oïfyê½ÆNžžžà€ç³…1ÞÚðÜóÏ]¸p.M"Έ5º®kÎE$³ù¼ÅkÏ\¸gâtr‚ÏâÜ&6=9FÌBó!Î@X[uªŒ"<ï1"Þ‡¦*Õ,—%BDHá¼eŒBVBÒjTwÎDu§OONÖª®Ö×F$– y@˜hïœÑOwÈùå¢ÎK)‘ÞXE«ó³ÙlõΫ’XPÅjBwÎqÎʪì牵!䜣”®7ÁDˆ¨m¬D¬õèÚ`ÔOóÉdR,Ë4‰”Öàl‘Œ(¥Rpo¬ ÞÁг%ž1¾‚XÎyÎy£I½±¹ýÒË/rOöÁ˜bZ%™-ëðàÏfg…ÿ?ú[Ïo½ýö;G‡–3wrt|áJüÊç^pNî?xpûþ§Ÿ|Z5¥l±( ƒ åL&Â:]WsLòõõõ&ÔB`ŒaL¥$­5e!À´î|pyžBÓYËØZ+\bD³,^_G1çrs…©Œ1ΙsFÛV)EQ#ÛbYW͉Ѿ(ª³ÓÉl¾ØÚZ/Š!ZpJ 6ƸA/Þ;·ûÿñײÆëùõïRBm«áý¼o­Boß¾{çî«O]ØÛÞ,f °^2Ñe­dÔuzu¤–M}ïÞ½{÷î­ 7>ýt?‰ûv/|áÕϾôÊÓY/šM—_ÿ³o}ÿï6˹7- `œ3&ÚV#@/½ôbÛv”Œq@Á¸ µQÊçó3gCžõý¾\žç¹sVkÀ#„Ú¶a”Ø@Êe¡;Å)3ζm¼ÁBãõÍÍk/Ühµ™N’Ë¢n—ó9F¸? „Ò4õÞSJWÓJììºn±XBVÝy5ýBÁ‡¶mCÎ9ÎùOÌ‚Õ 1çØc§„bŒÕF9Õª³ÓSJˆEF¥”ƒA!ܶõBž¥+D_„Œsž1–$) ïC€@p”¸¢,ù”%i´,ª 6žÉhs¸öâ+çïÝ¿÷×¾üskÃQUUI’\¹zùøpy6™ÍïÞ›ä/íí~éK?ýú ÷~úßøfÑÕiÞ«ê9ÂΣB‚­÷¡q`Œ½wF„ J’˜RÒ¶µó ä{yzéânUWªé¥YYÓÌ»*M“(^›/Š$É"I~b—‚1ÂŒRœ÷³yuðø ©µuà¬Ëò¼i[„=öà:… @Œñ8‰â8úâO}ñ~ÿ(HM§S§]'‘ŒÀ4’¬00B«e“È4K²ÉÙ’2:ŒW¯_¼{çÓÓÓ“µQ?Ï’¶U±Ùl‰@`Ì“ñè£?ѧÓÝó»}òÑáÉáW¿òeF¨dQ´–7¶·vjmq”ôOç„°í=ùÃ÷ßü?ÿ¯?ì7/?uõ™ÏwZœ‚×}:99¡ÙlY‹(ækã!Ô{k´’\bŒÁM[ljÌòd:UZkÁ0Ô)Ý˳Xr£Œx–¦«†ƒ1–ÉÐ;ÐZ€1ÚZ¥mG*«òøh®:c'”rÎ|PQ„XB¹o‘1:ʲ^áíw¾ÿµ¯½—f0Àíog0ÅDij¦tÛ´$bBùñÙÉñé1!Œb\æY‰$&R0ÝéýOî|r_D©1ûüËÏf½þ|ÖèÖ¡F©²XR"ÏNç­ÑH§ü¥—ŸÁØpF DÓÙœsRÖMíƒÃkÛ-ËùÚÚZ’$ÞÊeå„o¬­5U1=~l–’tu›Ä 8œ—"&˜Xçâ<{ó½·˜4O .@«ŒGÈX-#nPJVréÊFªš&¨Ú{?Q@·žbéºn6+ÆãA–¥!Œ1c”"XqY#Á»à\ÓV“Å´¬ )y$ÙÞîùù¼<=™ie{™ŒG‘d+S #¢X¶]kàѨ/„È{™¶6„ 86Ú0âÏïbøþ÷?jlÍã˜gƒÉÂîì=ÿƒ÷ÞýÊWÒ€#¸´ÖÇÄïmÊÅqޫ˺þáÍ Ð_øå³ªÚßýß–ݾõáóÏ_ûêW¾<ãd¿*B Ê ²Z‚à]™ú}­Úºì¼D”°¦é¶¶vœ¶å¢RMÇ)¥€ócŸüéŸL&Îùõë×_yõÕÑxm2;”­×)@©®QÂÖœÍϪº6Ö‡Hr!pÓ–`D€ç;m= Íí­ó—fEóö÷ß‹xì} `L§Á ÍÍõ^?Á3ÆÆ8„1©ª²i„€2âpÁ{½œK† ŠdÔ¶ít:#„&qB8æ½àœ5†.¸ôÎNϦàýb±¬ªÊc‡õÁYcœã›››m[†€Œ±ÖØ`•çX I[[[óùœß»ð×~ñËÜü N½˜ŸÎ½ô‹Ÿƒ[Ž.Ÿ;÷ÑûŸMgË%&dk{;M“Ål¦».‹“ålÑ”…ëj†msßï÷¸`6ø(‰ecëºö>¬è{תàç"K³½·åÒ5†ìŸ}틯®Fi?~|øæ7¿M­qm¹¹¾.™Ø¿ÿð3/>[,§?õúëU¹||ÿÞ|6ÕNÕía,bšdñ¬Xkµ±m«PEãàç8Mâ^¯×ïõd,­×Ò]ÛJÁ±÷UÓç!€h]R„ëœuc(Z.ê«ÛãA’¤[[Ôhk¦sç Œ‰ ”Æ—’{¯œó{ï<ò„‰ˆ%y öïï?9À”-æ³$JcÞ4Œvw¶“DŒ !, ”Ä2Úü¸( ­µ”2q’&I–(Õ¦¹L⨜WZiJY×uì¹ OaB:ÕE"ê¥ÙätúàÞý²(û½Œ`mëVÁ0F¥äY–Î¥÷c𥹱Ê8½5»®“R®ôÿ|GÎÙº®Á±Œê¦ôÁçy.8·Öcïßû„3qñÜ^].Û¶³Úu]åª'ñh0ìÚvõ‹NqÁãù —dñt2I’d%5ƈ‚Œ< !pBׯC«U±,8§½< ”jCk=!†12V­B[QBˆ÷Ž"¥¤#øqR#ë'½a¾¹½U×.Ž9¡çi’ÄgÇgŒ±4M­µUUÇQ˜°Ö¶]‹©äöàÃ|1¿së¾ÕøÊÅëïßüÐ3¼8ôúäу7¾óÝ×^{íßúwÿmg­dÑ?úÍßûßüíHÒlÛïŽzçw÷þÞþŸ½ÿþ»ÿìÿøÝÃÙQÅLðò´ê Ö„”P­,"˜Uu™¦±1:Γíݵ,M &ˆ‚íÐ|¾@V{Ö‚uÎh—&ƒéä‘¶†s®¡Œ¦™D@Šeá´’’U‘¦Iœp~¹¨ÏŽŽ¤i,£¦ˆóNNXÌWö{Û¶EYõƒÅtŽ¡€=ѪŒ"–0ˆ·Dp" H$o}xs9ŸcÀÎ8Æùp¼0X­±GŸ||{ÿÑcçuÀ(ï§×ŸFD‚ Icù¸.ÏNãXŽÅ¢sZ°y¼œ ! ª…\0DBPJ­"ž+÷cb­Ã˜F2µ6XºÎD‘D”Û ŒvN¤—¤` v^ Â( ˆ:ƃ”ºÕ‹Å†VµMÖï‹$–±@ºNaŒv¶wš¶¥”:g­µ!ä¬òÎOâ(¡i¢º.x‡1­›v2­0ÂÑ<ïBÒ4á\ +2¼ !Œ0Æœ „ nš´×ŸÏæ!@š¦ýÁj~%„"­õ|~茕QL þ‰¿%¤n*oŒ”’ªŒqÚäy69[.ªY6èÿëóߘÌ'ð/þàůœ»xYÈüƒî|ýë¬Ûúìðô+_úéË/¾ùÆ·Á»È³ñÿ,í¥§“#JÈ/å—;¥îÞà|Hâ C€XF£pÌ{iÒé:í Y–ïÎ&S„ eÒ9/¹@€¬u>g­sÞs0=.‹z4^«›z6] „ðÚúZ$ÖvuSr.”V„Œs¼»³^•ít2«#:åÎï\$A¢VJ)õ3?ÿsTpãü£?9ÀuÛÊ8Y.â(™L³^Jµ>PÎgó凷>úìg_4ZÞ¾uk¹\D´6£õñÅKã$¯hcÌíO0Fkãá‹/½ÈßFQ¬µ:>::99®ëªÓM­.d!@ 8xoªª‡€•2Îu”âaås®ÜùUÔ9§Ún>ŸSJ/]º´¿ÿ°®ëá°/£XcCȃQ[í?TÒÚF2Ž£¤VfZ·@]_F]מžžt]7ôe’0FŒQÁ‡ºiçóE¿ß¢hå² !Æàœ™s.xo¼GcBœ‡õ>p¾â¸ÆZKRJg!´PWåÊDXY²ÞCèõ!ΙµF)ݶÊyÛëõYUµ1FC0ƈzgж­Œ¹Q¦3jr:yòøhs{ûÂS»UÓÒÈýÑþQ$å—nô"qóïÿæÿô›ic¢_{õ…Ÿ~í…ÉñÙÝnî †O]ºÖçù¯|ù«'Ë“óêÜÇݼù£Ç[›ÖÁí»÷>ó™ÏÆ2Âyã#Ny/C$el-N"ïœ`̟ƹ÷!Ä„´ÖêNK)µH‚(MÇ!î§”r‘DãàwÚ¨ªóQ„vÖ@ÛÖΊISuÞ:!SŒQÝ8!"¢Î:ðÊ Û….êç»;ç¾ÿöûgg%£½²¨›¶™-¦eYRØØÜØÚXk³ŒKë!øÒ¥K[[Û]Ñ­ã¬ÃáðâÅ‹ï¾û®6íÏ}ñuž$ËE1Ÿ/ €‘1Ê{«”c .ª²™ÏÑ<ë)§RŠ %å²%]¹rakksÿñƒ4MÒ4¶ÖQJ² Ò4E­PRJ„Ь®ûï+¥¦ÓiKï}'~Ú®]ֵ̳I±Ä€š²P¦D0*Â8„0꺮ëŠs ë¦ÒZ§ijŒiš¦mÛ,Ë’$1ÆtÖFœ¯¬×UPß{¿ÚY]¯[u]#„’$‰¢he}Ykú±èÆ«ªJkýW¿1&–qàœ Á¯ 2«¨C¿Ç—Ë¢Õµ3cŒû(!½¼¿(§ÇÇNj٢k:ˆwîê•+ßùî[k£uÕ¸ç¯]ýÂ+¯>],ª‹Ÿolyç8¡‚0$À9gœ%ÖúÚtªë8Çq,„ m£0fQ$—EîÚ†sN0Îól4¾ýÞ;œ „Rz^Lò‚0 ˜‚œQQ$†Ã¡³~6]X«Œ1½Þ°ªË¡ScXéÜ\HíÍ?ýßÿ©ŒbÝ!‚#gédºÐÚà%€½í+/ímïl B<`mì²(µQÃQÿôèäÝwÞeŒcÀBÈsÎïìmkΟß;·½{xpøþ{7N!ÀúÆÆ—_ŽûmW¯ i’?¼ÿðï½ÿèá~]×>øª®0¥i’vm{íé«/½|Ã9Bè÷ûMÓ®RªãUtßÃ9 Zk­5!$IÎ9Bxccýääd}cÌÛÚÞo®Çi𤩱®(Š_û»‡DòÎÃûÓbá€4ªªŠqšçùr¹ âDú`‹å¢ëºÑh”$É È9çmÛ6MGX­µ¬v°V5Ã÷!”e¦éúúzÇ«¥¿Õ™F8gè'—° ¬BÖZkd5Æ‚…Q$eôãíçB¨mk,X.—Ëåòøèøàà`29)–E×4ÞzFx0™L ¥>„Ë.ô319Ù?>|P/çËéäÁý;³ùq±(I0¥]Û>yüäÁÃûÆ›ëÏ>}÷ÞÛ·oMNNUÛYçò¼g­!1Œ%à1Ê8h¥!!‚[!Àyçg„`ï!˜3¦µª›Ú9ë¬÷Î@p\ññx˜fiÛZÆXÓVÞYkÝjüpÖ0AÞÛUÔ  w.ªÖg£ù¼)Š®¬š²,¼·Y'©°¦£«[Éxï Ãý~Þ¨ IÿùèœsÖ;;k››Î9@Hkƒ1ùèÃ[Jé^¯¯•¯ž~úª÷¶ëÚeQìlííï?Ž¢(çyÙTI’…ó¹÷–„࣢X„`⫾©”Z€&c¬µ!´ÊŽt]÷ÜsÏ1N£J©VuÓù´ÓZÆé²îþ›ÿþ×_ûük/½òÙ»÷îÍfU%ÎÛñxL) `£8Æ8”eÙ45!dµµÂûq‚cÎ9ç¼)KJiUU{{{«jA ÁC€ÕêORQÁZBÀUUÅxO2i­]™«ŽÕÛ®¤®ªj»®‚ËH¶U³BeÕURFý~¯ëºÅ|1_ÌŽŽŽÚº‰ãØ­»y`”„ÙlöèÉáúæfœH.•‡©ê ŸÆŸ½ñô»ïÞ:›,¤ˆŽÏ‘çîú£÷?ØÞØ©'Ço~ãkQa[£ÁáÑ“‡ûûçΟ‹)‹V‚Ó!Q$"“TbÖ£µ2!àà‰1VÁ#@›v:­!ΘѦ*–;[[Œi¥ œ³£Ó3!bk5ì}°Ö`„ãÄhÛš1Æ2ï´™ÎæU­"™…&fóÅ\pÜïGyÊ¢ˆì¤ßúæcº"X2’BpÀ¢XD1`„)*ËêwÞ1Æ`D1Æãñx{{'Ïó(‡£>¥ìÓ{÷÷÷å#åYÞäÓå$Ë“ñx½¬ª{÷>NgqwÂBZÕ„žyæúÞÞ®1Ê9‹1E(%ŒQkÍjQI)%„!´m»j¬F›àýêÿ 8§Œ1„ƒ1f1ŸU±œÏ»¦%˜Û»øÁ7g³Å¹‹»×ž¹þdÿäèÉé*d}xô!ðÁvÊtªöÁEQ’çyUUJ)c̪<”RM]sBƒAÓ4UU­L|kmQÓ,ëBV®±ÑU2k}}m2=[†a5Ƭ\ò,ËÚ¦[M«5Æ4IjcÎ9)¹µF+Ýu•u]ŒF×&g“ÙlZU !ÄøÿÇÓ{ýØ–^wbëË;ŸX¹êæ¾·o'R$›MÚ¢ÂÈ25²-Ë’!Ãæa`üfÀð» Ì_0ð“5°{FŒ qd y)¦îf§ú¦ÊáÔI;ï/ûa·ºžª 88µë|{íµ~ë(òXIÝur46u}xx¸»;ÎÒ íìbQ>?+Êåx2yôôÉh>¥ñ8Lnnoܺµ£»nwr‡qV—yY··‡o=¸é0:9úüÆ­»­Tœ1£­óÀ e·m7Vq&BÎÁ‚ì4%˜sÖ‹|Ú¶c„hišªt:í¥a((Åiܸ³µ9>;;~öüEQUÙ &˜8¯ ÁQb„»V êjI0>ðŸÓÓ4 B0!cÔ÷-”„÷V)ÝŸõ^ÆÙ3nûcÝu³ž1J Às† ‰ãXJ àÃPhFIÆI‹"WuÓ#•–ŒPž Œ À” Dp'•uþÙ³ó4‚®Žž?ÝœnÞ¼µÃ£d­.‡óó£4ˆ÷v qHxÙÕªViMÆÓ²®ù¥Ãdwk|uy¥L‰ÃàÃ㜳˜qÚk‰œ­½¥¾_"J))%q5m«µÎY”¤'g㦪_½|žfñz=ûØË«ÙåõuD»u]Õ1Þÿ‹$gœ³ ƒ8NweÙÔÊóÎYšf¥Ðp8\^ã³tç?üö;ï½ûròùó§ýçî,¦Pë•´2A©Œ1&؇\ÄÉdá)÷âòl>Þ¢L•îήπÉ!ÄÃ4¾ùú½{wï>yôÊ:Z5êèèüµwßýÆ×=hoUHøÞtg6¼ªLeÑJG4FŠvNί;»B½5¶iÍO~òñx4ÔZaDööööÓD()ó¼ÀUE†ƒç(`Ji½ÊgWWÏŸ‹SÕêDÆ›&L[ 9¿\•Î(ÁÑ”^ëF[σÐcF1Dl;'MG9BЉwÀ˜À´võ Æ‚íº!´¹±ÉQ¶[Í—AU aoL6ŽŽ›ÖÕÌ90áá@J-Bæ<ÖÚ‡" ƒ#¤•Y,«¼´ºNwu]Äa2ʆyQ9l½kÞýæäWåWÞ~ëíÅ|ñïþâ/Ž9åÈ¢ ¢°±±Ç1¥´ï½÷„­õÑÑQž£Ñ( ãôÎöæÝ»wõ”„ÈÑÑIYVcpÇÑöÎfšÅœ3ÆEÅO.Ÿæy!xâÃ0p=æ ~gg{0TõÊ:·Z•Ziçü|>oêVp1´Vu]€!ç „0öˆR쬫›FK5»¼¢œ8ߢÓÍ$Þ\.WUs}ÿõ›¬ð7`{8Ù ‚èñgŸ~øÁÇ][GQXMg:i5!¤'žZÓBƒ”.UKf±”²nï›LÆÆšÞmÀZçŘíå«åbw“ |zµþøÑ§Ÿ~ýg¾ÖYeY„×Ò4R±8N<" [Î)c” g,8çú?»of¼÷=Àfö…LmÖyA(ÑÆ4]çʲŒVÝ«WÇm«â8‰“ÈY+eKQZ€Ö#¤•Dà!€¶{;ôòÔýÚ/¿÷Ýßø©/øÃŸdÕ·¿ýMÕâ?úÃloߺuð•Ùìz½*F½JÔCÝ(Ú[kpξ­ !¸à—Wׇ¯ŽaAªº¸ÿðÞæÆÔXÍ<&”qþý÷\UMòƃ-Œ=`‚ mÛÓÓÓ²,1F 3Æ(BHA[­ß~çáh”-ÛVå«r±X7µ\ç+¥Œq'[JqEu]{ï­3Æ(ku_½z'©ùlöøé“ª,³,ÛÙÙZ.g§Ÿ>¸Sªª*D÷þLÛú¢TØ!ÂAeƒg¸ëÚ$ G¥Q“8J’x·©«ëë«Ë‹¹ÝðLˆÍí-LcAž]ׄa¨”@]7]×mlŽ{™aÇý¡üRe`”ðëº~'ÙXÆBÈ`õ·÷@5u-8ç"4º“ì:¹X.ž?1»šmoí¯×ëNµ„RFC‚g¡k»$ͬ±EQ´U r=›ýý~„0úÙ÷Þ{yxzûÖÎÁÍ›‡'矿8£„ýáý›PðÛwn¼ùð!çÆ`ByÈÓº©…"à{ä¿hLëºîA’ÞSŠ<”«œrÞå1ê´ƒ@+£; U«Çâ@„xï¼3Ž`ÜšBpF(x‹Œ1‹e1Šòûÿõ§>yñô•ú•wËúr¹z6nPꀅo¾õæÍ÷“dEáÅÕ©±Ò9ß6¦m í¥›!Bhš¤PÍøåjµ‘nO6Ç'—ÇûÓ c4Á´®äüÓž+$ CN8oÁA¬¯Ö=܃î­0ÂVYBðÞÞN‹ªîšº™Ím£­T– vw¶···Áy¾6Æ$IBVªÓÚ8§¿ùéOzr|¬µî«N×Y‚ ÷ÁÖæ¦±Tʪ:;;¯*GqùÄqÔ4uÏb‰¢0D×uJIŒ%Ø{¯µ®›&Ïó‹ËËåræ”3Â×eYvRÕle'‰BçÝb}MÁ§ƒèæþî½-çUÛÕÆjJ(£Â9ôúý׎N.ºVRJƒ@„qˆ0nšFb;Œëº¦”÷Ï2ç¼÷. þ@ög k­½óUYþ……ö7Í1õ¨(VoõÉxH) 8C¦eûäÑ£¦ª®g×[{;7nÝÙÚÝñ؇¡²†/ŸuJ6míB`NÀ»®jÞ{÷ë„€”ÒYç,Fˆz¯ªº #êÁ2Fûž©·Œì-$!A ¼·ÎY­uQóùüèè¨iθuÎZŒ²Ê¥ó¦¬VÖyð«ëË`wwg[µ Ã.K#ÁYÛu„`ç±1"X ²Áƒûò¬Ê²üÙŸ{ïáÃû=úë¿üK%»ííí0Œ@)­”ÒÚÖU]Åx<þr@‚{裸ëõzcc£_¢v]×K»úËÙØØè/­?Êý 1ÆI’(©œq–26M´vý;jiH=ªæó`8ÊÀ›Ý ˆëº1ÖcJ¬õŒóÞ{— †E˜Qjm›¶G”ƒ $”Jš¶kÚÀSN'ƒÍW'ÇA¿“«Û„°8 “¿ýðþ²UGórÕ¹³ùºl´÷¨_áY°eYv]K Å‘ÑF»ÎË?ù“?N²w¾q/޳ÅuõÇü£««•³€PPBðHã´VÆzÊ<€0èrÍ0©»ëÅl¹œŠ1B!N§ã4Æ<Œ0ŒZi>úàãI:<®*†ãí G¤”Ò«¤ëd¹è´Ò uÎ{nc¢yÝTª¾}·ç_ž/Ž_]颀²ÎÉõr™Äƒlã‚(Ь5Qc<.(BÄ7Ö{ Þƒ$áŒ[kxÊx;$“Éôr6Ç$Q†@`ÄÂ0¨¤”mSW ÚÚÂ4&( {ç‘÷„0Ú85 ÃèúúôäôóÅõjc²É9_,ýxÄ#nEA]6Œp¥:ÆØ`0 µMWW%cl:PJzÃ,笵`ŒF…aÖ”ùcŒ¬åœE‚#€ÖhcôxkT–¥”†ìaœoïìnmî]/®Wy0½…N§o½ùð+o¿ñèÓ.óU# 1xÌ4uŽtŒGÃQº½³‘¯‹õ²ðà•ö/^œŠpÇ ¦,M#F‰5Ú9ÉÒ(ŒxUæJ©Á %­Öi6(ª†° ¬ªãó™Ôr8ŠGKFÉ×v¿ÞÖíÉóÛi´TÅŠSî¼¹¼¸ "mšZ¶-F„ N)ä[m’4´–aŒ3Þ÷àøÆllÞýÿþâ}Æq×é|]ËÎsPFF¼’µu–qÌ8öÞë­ÓŒ# MݳñÛï¼)eŒ}üñg‡/OºFc ´aÜ?Ø»F€°“-9|5;<¼ÜÈRé`2D0Z‚F"줹<½œÏÚk el¬MÒwvcsÚÔk£Á8 ‚Áp€Ôu>™L‡£á—Vºœ³¾Cí%sç¾è¢ú“¢k:é¤÷>NSpÎè[·ªªÎË&N ¹ m[ií1ri’œŸŸO§ã0ŽU#;©¼³Aš’$¾¸8G½ñÆë\`)Û[7nE"šL&„÷ßµZeä —Þ{k1-Bˆ1B(ÞÞÞB­WEo2Ð÷?P–eO;ôZ9çʲì{ƒ¾ë],—„䬵œQ.BHiò<2c‚Èh4&ú½?=|ùùÆÖÆhsc8Œ½CÈ[AÑ áJ·Þ¸žiˆ)ÑZ/—¹ì4a¼iåhQÊÁ!k B¨¯Ö½!ƒ1ÆxE&ÔZ/D`¬k[éœçŒ\€óËë…4 Š™ë¥g”„iJs"mW62J3†‚Sï줈!¬¿êºîZÙ+Õ0¦aFYÏ£gœs¼÷aŠ)F΂1u« Î9Bcï½§¯‹Éx<޽·aÍgË£W§ÞR„ ê[?÷ðõ×<’Œ£gÏ^þû¿ú^«ÖA¼µ(êAšdIäŒ*‹%©HâÏŸ½”F3!:¡—;9ñhc¿¬+ݵ”°0 Ô 1_¼xúw¿:ÚF-–K„ w“ìy$Ƙ¶­yŒcLp®”ʲÌ×5m Øgi*xØQq‘çAâÆVJ9ÊR§U]ׇ‡G“é†TFi#‹Â@)M)¿wï®6*Ë@Þ9 Þ)-ó|uïµ{ß|ïÝÓÓÓÅb¡•ÒZ·í”ð0 !}eœ~Ù±ôÒ†žÓÿ¨”ï·¦“¾}×Zs.’$nš–Qʃ mUÓ´]ÓŒ N6JµuYaB9Iµ6˜sŒðËG—g?ÿ­÷®f“ñœ¼8}F© D §¼±·öö¥’ŸöŒ Ž)À„ÊÀyÏ9¥#ä­µÖh„€sްÏó\> wªë¬vÆÚVÊ8J!øþþ®Ö 9ƒ5–Ê®×E%m«—×óA@·'£¥„Oÿæ'×yÅâÁíyUÑÖ98‚¢h¾Ì×ëË,Ë8‚#ïÀŒ)…¦[""<d<ôÆ"«ÕZm â\8Iô* ŒqÛv}e-þõþ«¿û›¿Ê²ô›ß|ïâô¼­j£t!› tQ‡iš&TÄÖʺ®ó¼`ŒÍW mäd:º{ûÆÎÁØ#í,|ôÁgŸ=~yð"œ÷€€r&•ÚN£(*u… Æ8g”²Étún”pÆð¼©u"àÎù®ë8ç”Ò®ë<€ì:¥¤s¾¬ª<ÏWëúÂî¥ÖÚóóË‹³KÆ¥ ë¼iš<ÄÆ®n*ìB(Ï „™TÚ{„ÒÌ™æììeøë_ÿZšÆJIk1–  E±èºf8Lv¶¶¦ac_ŸœœA`ŒB°6º“m?ø# =‹¥§ ôÆ«½Í‘s`-0&¢Z[Ùé0Œ¤T‹Å2a”r„0x'8ŸN'F¹õª!˜9çš¶ô ¦Ó Böøäôµû¯ïìLïÝÝ].f''gΡƒ½í®SO?€$†Ad·€ç9ëýt:%[k¼G!ŒeÔ9Ãðu]x@QŠ„8œ]_fYêœÂœZieÝãàº(‹¢tÎ×ù¼¬§ã±H7\<Ê£±q7$I…J©lQRJƈ¢ ¿[¼CBDZyç!#%;k´v_]^÷ƒi†}=2Æ#)áÖË«á ^Ì/>þ胲(Ê¢²Z{ã†Ãé`8|íÞÿÓÿøÏFãôñç¼~ïóG‹|‘Kó<“ôέƒPÐ(£ñæìjytt– ä ‚ „pçÔŠqÞI‰Gà¥ì8gd¹\ÜÜÓº^çkȲ4Nb!c$„µ†s^ÕEh^^^]^^­×kk-r¨74UZÒlgs§käéÙ¹õÆyó­·GÓÑõüº(sŠ Èó€Ñ®ë¬uÞ¡$xçç—Bð;woEQཕR"Þñ=þŸ ««™”]š¦ïm„ÿ˜cï]Ó´û>Á;ßo'/..œs=£ §ãE±˜/{T¨ŸÌœuB­L§Þ!x ½×ÆêÍ0Œ–óµàñ Û~ðàÁ§>^,®îÜ90Fͯ¯ç‹Õéù)&šR§i„B„©Ã×óUUµRiª-ŒWR#L²,åœo!ŒS†´m[–ùÞÞž÷¶Ï¥a\ˆ3$êª Â ŠCcµÕº—1"Œ§Ì„l§”§_-öÝp4ŽGÖêlllÜ•]Û¶ ·~£sŒÒÙlÖ5u¯¥“RjpSŠ#©”ìº0Zá²k›ºA%ñH[0Úzd§{_š®UJ)p €ÿè×ukk[^–•VæýŸ|TõÅŬëºÙüÕoÿÎo†±Wª}üôƒUqZW]YÍG”qšYç””ëå¢iгóù«ÃãÕjN¦³Å¹Tš8¢µ£Œ$iJBuIšÈÎE%oêŠ2oŒVÊð˜GQE¡÷ι/ô-q+Õõ;¡Þ•Òh‡±”2 v<ïì잟7u«¹qgÿîÝ;eS9o1‚¦©¬µîùùØyR-!8üáÃû·ï\^^ðÞy‡(eà’f½*šæ²®kƘÑÞÚår¹Êóâ€}d­ï-}*¥¬«¶wÎ2Ƭ×몪ú ѵCÌ9ÛÛÉqÎ"ÖvQœx€Niç­±–j&´ÝÞÙª+Y—ëùüâk?óæÝ{ßÝßßmÚVJõÇü½$‰Œ)O^_Öu›eÁÍ7ж¡‚‡,rÞ9ç ¡JwÞºD/‹ÒY3LDZ+­ôh4B}†C…@ˆ"ð„ÒáhÐÔÞ:kµ1ÑZª¶ë†ãqPL€1ê=PLÊâ8dÄWùRp†Ãdz‚³%%4K²“Yš«¥lÁ»8 ¼Gƺ,ÍBµ1mÛ!@QcŒum^bŒ{×-!¥Ø9ïœ÷ÖRxüøñ§Ÿ~¼©›8ŠOOÊ|aTåA&,Jä/ÿê;Î*gMÅ?}Îq;žN—kœ ³eQüõ÷ÐÊr0HM¹Ê׳ÉHiiŒ5Ú(Ù(¥7·¦_{ç+œŠ¢Ò½Ã„â0 '“‰uÆo4B€{})Æ=³ ¾È3AÐurµZWUmmšÖ:פÉNF¬Re^ÀöÎv^•×××?ùÉû”cžb‚ Ã…\ #†)/‹Šbº¿0¥ÖhŒ€'[ã½µœQïàôô´)Œ'ãÑp´XÌûü†ÉdT–eÏ|%[kêºVJ#À”2Ô÷Ùý nÛ¶ïe³lç¹Õºw|¦‰¢HÍSÆ!ì:ÕR‚Å|GyžÏ3 ñçÏž¿|ñò)Æèüâ²,«ÓÓ˯~õ«œ[Bø{ßúÚd2º¼ºüüé‹ÓÓ«Å|-D0lîíí'‰ ”yðœÓ$Mò:'®“MÓ8§ÇÓg½dçœ÷„BkM)©Ê¢i#%£˜ìXðÆ»ºkx+Œ¶Ó,M8sNJF0Ã!ß554LJ)!XkÉ9K“Ø{ë¼5&”Jj­x¥Â"ƑҊ2!ÔIÙVõh8¬›0Á˜`ks>¡3šÀñÉY…à Bp}5ûì³Ç‡¯ŽH¤ögÿnsc€ÁyçïÞzÍtŽa2¿šyll¿ñ­¯‰­ó¥7ZP2$ð¿ÿ¹Z5FY‚¨, D(¸lÛ, ‚ Æ{PY–E¡óÞ ÔMݵZk!Æ_0ð´ÖÎY¥´óºë$!!ÜIE)o[‰½ïá̉2Ï×Ë¢lwäjÆáÍ›·öçg§N›4œŸ]``Ãaf´Õ²óVNƃ›7¶‚€Õe9Žúm ¡Ø{oŒ¢G™1†Rzp°7ŸÏóbM(ê¤ì:÷^ò¦_YeY6ðÅb•&ÙÉɉ1*IJÀQJ“$iš&¯Ö„SAB(¦qo¬ù%a×{·¹¹Á*Ëu‘/ÁéÝÍi@Éã§3„ˆGj{'~ûí·oÞ\ýóþ¿mnîXí9Çûû{u·~ÿÇOêÖLÇ{ßþ…_ñèɓ弲ÆU…°NG\ ¦©"EÃÔÔµ-eL„ÂX™b&dLF”ÆèÅzÕT%§”‡‚bd´1Æ¢˜¡¶µu(Â,‰*ÀÒÆÃ”0PN”Öó«9ž/µÑežÙAi]{@ÚX¥q`,öF‡”8Õ9­â(줬ª*#ÆEÙa5Í3ƒ0étg´§ˆ#½ñÂlCiDQY6JÛÕºd"ØÞÙʥƻ{7Ñ,‡m£?ÿüåááéb½Œ2Î|9;Ó¶ÝÜŽÇéÖæðÁkwþÏÿãîß½,K)•scl­vÞ¼óΛqyßK ú„+g3†0Fyž§Y: ÁÞ[ŒQU•Þç!¸,«ëëëª,±EQ @ι8Œ(û©JJE([çëݽlÐZi¥(&ࡇŒVRÊÍéäµ{wÆ“‘1¦Ÿ¾Ô÷yï÷®Çüƒ PJÍf³ÕjU–e;}éÿ߯ø{Ëz[ëÛ¶¥ŒôiïüÚ/f{^¿|ïÙ»ŸHÁ)Q²3Z­uœm­ž~þrµ.1AMS]^žŸŸø_üÎ/" ~øì´LœàH)zz4ûø“GÃÁ8 £( ƒd8È’4æœ3Ê0Æ«åj½^z¯£˜‹€)­V«€4ê:SU­R!|uyUäår±Š‚yÜI­µ꺮ʊR*÷Öi­ ÅQ,â8ˆ“H©®jëž !•¤ŒÅIRÖe]wZ›8ŽçóEžçÈCÈÅt<™Ž‡„ï]'û{û{Ó¢¬’$Y/V­l)eÒÖyÁCTµ œ£ðÿ“ßZ¯×m]ݼ}ÿÃ~RÔm[·U#“tô ¿ðùböôéÓ$ƃt” ”†(I<ÅeYL¶67µ6ñùâÙ³«³Ó¦,게Rù¼#” :狦 öƯ¿:|ᬠD [E ‹F‘±Êƒa„Dˆ#ì#œS笵!²â¨mÛªªûç½”2 Bgœbkk“sFõc"Šº&„Œ'“ó³óÍí !‚º¨ò¼àœ[k0Fƺá(Û?ØŽýy¢”*¥úI¨Ÿ={Ǽˆø"ÓP©^ÖoüµÖ}ØZ?QI)1&I’x‡1Æ{{»‹ÅBkÅyO‚8ŽÐ&¯=€Õ· ‚Óéd£È ït§ì¤ÑÎÒÔr<Ùc¥µRÜ›{¿ü+ß¹8»ºwïÖ;·^<QÔy˜ŽvvªRbP•½f‚Ëå, Ešfù@k­µÚ9Ç,ž1„ÌX»^åÖÁy>ßÝ»¡´I’c8|u,x8¹1ýÑ~8näºlêšPŠ ÒZïììxïÖ@ëÖºŽÒ, cBPšÆ¨ëF ‚Pu &«ÕÚ¨æäô¼k$£4"‹£€3¥%ãl+ÙZùlv…1±8gëõz¾X‘°Æ#GóRJ°Š ‹³^ƒ¥Gƒôî­ÛËÅòâôª®:J˜÷ŽRêœáœýì·~NP<̲'ôÑ'Þ9ÀxszDÓŸ~øÚÙÙþÙ÷~¹Z¯øýï“-[–k!x×:çÁ‹‚0¸¼:‚Q\_/”²Q;Ge§«:ßÚž8ç>|cbŒð½¥í3ìúÈ”ïôð…&Ä9/•,Š"޳›7o,‹òÅË[[›y)(¥ð“HQFÂP+ïßíÖ­›I£ûÌ­ªªz@´?I¤÷»BÐ4 Ƹ׽EÑu÷Þè^ÜÒdzøÞ7Æ(¥ãh/mÍó¼>´ö k™È‚^CÖÇ´m›„£a–vu³¨jB(¢µ²Ÿ_Ìe7nܼusµž?}úèñ“Oób-;­µ»{ç^:ЉÐÃI¶±1íGpüêÕ ¡~½ž%‰ˆãˆQL(!{ç¬5'ÄÒ1Ù¨º–×óÕéñùááeše·nÝ8ØßF?üÑÀ : ÆaíP[7=ÔØÉ.xœüG Y§­ÅÎyç=ãÂÛ4Ýb™kã§«Uí¬nZ…áx4H¢H0F)– cŒÂ((ë 0¢ŒK¥u#3Þ;g1®´$˜Š™NpÜ¥ð[ÿé¯MFS-ýÿú¿ü3Õv‰ˆFΚíéøwþ‹ïfIz|tTÕÙÉi¹^†ÊØ,H%[ÛYš]žÏÏO¢`'TéNjŒÃ@ZÝFQô•wÞ°¬½sÚtœÞÛ¶m)¥Y6ô3*zvµsÀcÒgK€RªëZJÉÖÖVUU½Óïr¹d˜¥iztt”¤Q„‹Åâìb&ÙÜÚÄsÆòõZkcµ"ˆ£È;'Ù;_}«mš¢\Œ¿¤D2ƾ|:÷о¯µ‹Å¢( ÆXÏZ¬ÚîÝSúÊÚ¶íh4 ÃèèèØè_µ³³ÓÇ öFÄA4M[×µ¢—^Ø‚@¼zvA§ë¼ „N§MÛM77­óÏž½°Î>xðÚíÛ·º®¹žÍô£.Î/OOÏçëŽû·_Ûç!uøêý~"‚4ƒñh˜Ä¼ßNaª•À8#9§Ax€2¯.Îç§'WMk¢(+Ëæ½oýœwòääp{{côäÉÓô~mY×óë|µŠ#±·³Çq˜xÁ(£„ìœUJvm‡WUã©®ó¦íŒ±Þ#ë ë¬1ŠÄY@‚3AµQàˆsÆ{<›]ik­÷R)©T×5FkÂ0”qN)Ç€ººÆ`Þ|ýºÊ)Pb®¯ÏUcOŽÀú€‡ZikM…wnï:cöÞ•üÃùÿ8­ifŒ!Ý?ØŒ†Þ“t½.ΰ¯ÖóËjʏ¾¾TÒ)éÁ;kÝtcëõ‡ŒÕ;©å`8‹f³Å|¾)¥iš!ßÜxc”Ò ÀcÜÛ³uJIÆyÓ´××óårE0MâL&“%ø!‚Åb%MãÁolLû#ÒIi´ŒDµ“ñð+_y³*K­%¥¼×ÊôŒ™þ¤zcêºVRõ…SkeŒÁõINÃá°wŽéºnµZõFa8ïd×:ç0†/,0(ÕZ÷Ò—þ%uÓcâ(‡çg§¾mF£qQUãÉdïà@»Ì­7·neéà勜‹íí²,´Ò_ÿÚ7¶¿»÷äÉó“ËóºÍÿß?ÿ«ñp4Ê60Žd ¥ŒD‚£^cÜçý1F¸ÀŒá dŒ±å2?;»Z.kç0¥¬ë$ xôècçºÅ|ÖIÙtÝh2|qøbk{çëßøÆ³gŸ_ŸZëâ(öN3Æ:%µtƒAFÀ…ªªU]µÆÁ|±BˆP&0¦¶8¤1¨u’2ÀŒ(oê®kqBˆ®S}¤ BàœµÎX¯‡ã$ŠR!ÒÕw*ŠX Pd~üÁ'I˜F<›]¯Qˆ#°µ³sÿ­¯žž]ooާãìÙõËÙÕuÛ:Dbge[›ÛÿÍïÿnS­ÌG~öòÑÓ*/¼³q’_VÞRœbc:ÝÚܪÀLhe{ÑGÛv×××F{Ĺó½ý­­íAX¥4¥P×­÷Æ9„ÂÖaÇ™3^ð¼ëcT fÔ@i˜FͪoŽÓ4PR÷ÑMA@Œi¾qa€A¬¥¶ÆôVxF[­ e”râÀY£•q΀”]YVF9x‡Á Æ#JuÈÝ;³zMÛa©¼÷MWA@±Æ"À”PN™¸žÍp ” Â=HeꔜÍ׋ùÃ;·w¶·ö ><>~ÿýŸ ‚«ºá"zõüe–¥ÛmÛæyi´­ªæîÝÝã£ã‡o¼öð×¥ìŠ"?9>??½,6ØnlN‚hcŒ1ºm»¶í„`ÃQÅVTMݪ¦•WW×£át{gëÃ?ÊÃGOž2â³$ÀFiüÚë¯_-WJµ/_>«Ë¬[\Ï’(à‚Tu¡•L’7-7¦ëôjÝEUUMU·Þ£(JB;Nð µÓI)ƒŒ×³ù¼“m Ød4TÐXäH€Û¶³²BpÁ+!L’Qð¾*W››ã7¼6»¸H Œ™µaæœ7Öic¤ÖÉ`pïÁëÖ¡ÃÃÃÅì‚"¾˜¯f³"L9œŽãÿFiLIW7ëÅÊhG)}üø±gG™–f˜¥;»[EQ ¬”ê”4X°<_E飛¦zpÿõ ŒÆqŸŸ_.ë ÈDá@ÊZ) y„° ˆÛF:‡7§²m0#UÝÁʘëåÂz¿½³;›]mnlnL°Q¨ªK.Âîošš`B1ï—FÞYç=Â#Õm뼦”àNʦ•Ôδi’QB"Z*«!c¢•ĘãYk=XJ±uÆyëÁZã8ca¥4£bÝHï| J©CŠC†ãq’FR·Å¢¨ÊuÛÕÆ‚ÕÈè®(Öé0Ȇ!cA^–«ÅJެ–W7¦U™¯×eU][Ž ³½3Œ= d[wªÓ çQÊÁc£PQVóª89=oËfgwÇh÷üÕKe=²1 A5ƒ€ÇVWù£>Ú¼y°Z.ïÜÊ0·iš$64Â@( PeÉì*?zu4Ÿ­âhÀXEÓ$M¬6Æ–Fù¼Õšzå0^,VºSI˜­× ÏØõ2wήæ«a:$¥\­Ödcsç꺻<;º{óÀª6d4ˆ<²ûwn•=7`83 ?úÁ‹þä§U•ÿ·ÿÝ?&SÙšå|qyq>ÌÆyH³t{{3/Êó«YÙ6QœŽÇcg}ÄÖø®“œ‘8Q(6¦SJH(„³`µÁ#äÁÔ9´ÎóÅjQ”€OÆqVE¾^¯)¥ãáÐhÝ6`LÌZM ¶Îi­¼×€‰uŽJÑzA‹RŠ`Œœ§„ÄQÄWz½9äyÁ hÕPäxÀ<« t5›%qØu&˜3î¼ÁŒç·¶¶òÕêàà`0,Í* ühJ@ IDATƒ$ŽNŽ_Þ¹µo”*óöäøòz¶6¢(O²Ñ(e ¤ìÀ{Ƙwž2ŸeIEaÖu]–õr¾.V•Vš¢Â;´±1Ù»±ÿüåËåju°»³s° Z®LÇo¾õÍçGÏ*Õ¨¦%ñ`œæyQV Œ -ºRÎm')a[›x0BHÕ¶]í¼á‚3&¬ÁÃÁØZŸyQT`=Xd•c,v&^žåUÕjÍdéÁ;ðÂè“OŽÿ³ÿü»ãï|çäðÅÑ«çÃÁ(âÙõ*ÉüìzA€ ‚ûðƒ³$­ ¡Œoínß½s‹1¢Tµ³¹E ûä“GóÅŠRæ67§ßùÎ`Œú›¿ùÛ;wnlN·(áÞ£®“Î;Á¸–†`oA{oûÇ1íõõ…ÑÇìððèòòJË·V+Õ=yúè·~ë·Ú¦ÈÒcÅ£_ú¥ß¿qóþÞ¿ýã÷ßÿÉ[o½uzòjgú?ü÷ÿôåË?Þß?€““cDtQ®»¶ÅGQ´³³[×MQ”MÝ\]œw]}ïÞí·Þzˆ±mëÖƒsÚRÂêQZ#•5Ÿ]\ÍçK&x×uœgi(»ºªª$Iâ(].® 1Š¡sÎhk­õ€°6 yp½q†Fi£ F2 F#d{ëYUŽ©sNÊŽ1 àç‹ë€±­MÆhž¯÷ÊÛJïP6IÙVEÁÈ•7ˆS6AÀÇQ „ÃA¾þ<ŽÓ8Š›¶NÓ ¢tãœ#@…àÚh©ZL NBÎÅååå|¶8=9/ÊÊ9·^¬ƒ ÔÞn›a€fó -»ñÞæÎuÓ¾ÿÓ'{¼¸^Yë ÃY–N¦£4¼§á|]žŸ_]][£½wy‘[Ï)&\ˆû÷^ßÛßY¯Œ¢ÑhtrròÓŸ~<Ÿ/ºV&IÉÝ»w²Œƒ¶¹Tëƒ;û7Æe={÷Ý·¢ý›ýGó«%ç|2ïìn¿ñð®ÃÕj9ž¤ó×î½>o*g‹ºäBÌçó ¶u`··&[›c£%xg­f„pÎñÎYëµvÚ¬ TU') Lƒ€B3BX΃ÙlVù`6ué󃑖–1ÊoÛ.JbgŒrÎSʶ¶¶¾Hx£Œ Ì(õ”RÓéÞîîÅùÙt4nš9+炌±ù|>f}Ôw’$œGu%1Rêáhc0cÌÖë¼ëºédÄYåkÎÄóÏÏŠ¼Ì„ƒ$¶Zk¥ !$b­¤ìZJ±Â9³XTÛÛ;Ÿ|ò„!v°{дuYUaÆqxtøòæ­ï¼ý°•ª\×m®./^i ;wöº.—mýöëö·6óUÎD(«JˆÀ‹Aýÿ™z³'É®ü¾ïìç®yïÍ̪ÊÚ«»ºh4€0œ‚W‹–Ä;ÌK~2#¨?Š!‡#ì';Âe‘”)J IÃápƒ½ôÞµ/¹gÞíìǘp=ÕKUDeÝ<ù;¿ß÷÷ùYŠ0¨jŒqÎEQEQÛÊI³ôÎ!Œn¯oxÀûE'1e´®Ëùlr÷pïOÿô_|úÅçÆÚ¢O<LÆT(Aðúê’Shf¾¸¸\.–”!L\ÀmguÛ6E?ßÜìŠpZ›$I‹ H¼÷tíúúz8ÄqÄ©sNG!c+ÙΧ³ŸýÝßßßÙ::=ºººZL§qÐnéäfÑJe™­WZ¡²©h J®¯ÇóÅ|kkK™&ËãÁ ‡D€8ç0ôÞ{Œ &ÔдÍt²hd=HÂë›Û¦mý¾·Q[×AïœÒNJ1ž4aÀ“(–RMÇó¦i’^B†ÅIÄ5Öœ…aض­1F)E`7ÙÆÖÚª®_¼|D±T œôzxm a¬,KLÈb±ÔZikxÆqLi(•ÏwîÝ]­Ö_?}\•e‡²ÛÛ«O>ù´orÎöM»BÐòDØZ ¥ÒZCd!rg D0BD!!0+²(WëUQuY;cã,íiíër9¿º¹ ôÕÓ¯’€n/&²©ªÎØÑÑùlÂ)rÖ*Q…ß “$ ¤ÔëE¹X¬ëºAÔ”³ê·ç'ÏŸ>[.—RJë]Ó¶’ó³2ÏYĶfóéÍeEáœ9Kuã¿ÿþ»“ñÍöÖÆt2¦sNo¦³­í]D¾EÙƒ/¿ø2KóºiyÀ‹¢:ÎXQüü㦖I’jãÓ4ÙÞÙN{=]ÆâgOŸ‹Fô!J¡ZFP†U©ºH?ãc`´›N§1nƒ LÓ¤×ëÇãŽ"¸±1„8â(­Êêù“ד›…’ª^éÏ>úúåó‹»{o¦á–j!tÉj¡ùÑ—=šÍk„ùb¹¤6ÁùÒRŠ¥¬ó< 7qÄã(ÀYm)¡Úi!‚1ñÚTU5Oƒ>„€RBj½ZçšVD1Ýh KÅÞ:­m§ßÍæ£TË.;g¬‘@bL;†£”| ¹Bcí²¬ ¾m”’QA€Fž&Ö«e’$u]À!À€‡J5íç¯ÎÿÙ?û£?ú¯7o®¯ sy‘>~üÙh{7Œ^`‚)EmZæ *ÛÒ)ά³šP„!ÈY°X,/Ï'a‚¼³ÃV¶U[ø[®Ë4Œ‹Åd>±Öì 7ß|ðáçß|ýà{ï¾÷Á['ÏO©ÇEž³•«¥˜s¾ZÎ)†,$ÖzÊXœ„B´išzïóåºiƒa¸µÕÃ횸¿³·³=ÍO¯®¤6!gßþðÃ÷=Ôo<¸»µ5œÎo/¯^ÇûÉo}xqzzv~NXÐJ-• ‚ÈXË%€ªª^¿~çù²mW“uçÄiÚ&â r>ŸÏ¾þú­R:Ž£{÷ïíïïY§¡ÉdÚ¥:ƒAhˆ„ ¤”I’öÒ4ŒBÑ®ÛF6më¬Z,Ý ¨m›®gN)‰ãx: æóùd<}ñôÙb:sV‡Y/ÇÇÇ/g'ÆÛíÝ{âÛÉÕÞÞh¸µ ‰™M'o¿ý"t;üÉgƹíÝÏž‡ÿþûßËÒDI霧”@ 8ç„ân:_ÖMÙ´Ú:Àõím^ä1BMÛtcMÚKó^ÚV¥6Ú;Ó…÷ŒõÎCBq’&Æ™N ¬¤vP„J m*klÎyg][¯;×&ÁXk¥•„Zk0Fa(%!„Së½vÎjrÆÃèh÷峯ïÞ9€^ad†³Û›Ï_FÛÀ9à<#"£„ ÔÅI>›Ü¶B;ä<Y#!D¦lœóFkìx2CÖ˲—§aÈ–ëIsh´j—pŽñp¾ªo&ëz%©ž<ûz4æƒÀ(ƒ¬fè‹,öÀ{g)逵DÐÑÖUM#´†ˆ*e­aУÄÜN¦eY:â(V¢ùè—¿´Ð†™ÍoŒt/_H0‹â<5V½üê‹à{ï~°`YU˜Faœo¿Í³öûEÇeÁRmoo[g¥”lc„1¦E>ØÙÙ{õò„ê m#D%Ôhã¬cŒ÷‹>¥ AL‰»ž.ƒ(PJ1žœœ¬×ï!¸AIS†`°Z6EQh­»ÁcUUMÓt¥Þt<ùüÓÃ08¾spf´ÁT«êìÕë×/Oã^BûÅG?µõ²üv|¡LU•³¼H¤QŒ‡Û»»²W¯Ow¶¶{qüüÙ“Ó×§{»[ý"ÿn|/µ–„ˆ`Ý´·ÓÙº¬»/$x¾\2ÆgˆÛ4¢ȶ·F'¯^j¡…VJ8ÎãBÐ{E¡µŽ1â½C†a@9vÞ" ¬ÓaBpÇ^AXù­aº‹Aðì2èŠùø¶Û20FI¥½yc]«ê¯ôb1"öàÁ½íÑV‡i!HžÚ…q€ °Î"„!"«U¹X.Ó4g< ;šF8«VQfY&¥L{=cíº¬(eY]\]d½<`‘0>Mâ`y€ÏÏo´µI’”ëª EÄ“ˆ#á”±ºlš€Ð$Iœ÷#B¨ÖVÕµ·>fA«LÛ %A$ C¡R¬­Íx|+¥ØÙÙ úÆÚÛÛÛñxÌCþÁûz1þÍsýþþ"àúöLXZ6Ú:´”yžSÆ…Æš^Àz]¶m[ãÚ9!ÈóœR²XÌ&I˜´xüø+F!eÜ‹ûý"I#L=D†P2¹š\\\´m›©Á@àÓÚ:÷÷÷ûƒ>!D) 6ƬV+BH7«\¯×Œ±~¿? ´Ö­‡‡GR¼³ÖZ#[ÙÖõp8:8ܶn«²]­ªýý½ãû÷3yÞ{òôi>XïEUSÊ‹¢ÿÍ7OÏN_½yÿ¸*WÓéÔY†aš¦ÆêÑhT×uÛŠº®¤’Ú-´ÖºCQÈŒ1Æjˆ=Ah±XX£8cm]mJ¬µB´˜R![ï|ž†˜sŽ¢aœ‡a(¥ÐÖQF¡Î9g]¯×3& ”vñ®.>–eY·éÚߎoLj¢á 0Æ-—+­tœÆGwï`Šâ„îl„h///vwv{iš$ÉÞÞ^’DaÌ!t”‡Ú¹««ÛºªnS@DÚ¦¬ÊeÚKâ4::::?»¶¾úú«/žß»Ÿ¤;QÈñÅ|`­ÝÜØê÷‹ºÕs£”šöÙ'Ÿx%ïÞÝ¡©“0zôèÑÕõµa,•i[åFZ‹b‹võzá›ëñÅÅ ð8I"k D¾.«º\C·¶6¾ñ`2¾Í£HTËíÑaÅ^¤ÖA)ç•1NBˆAJ;µÐjµêpb&MÓ0J1&ëÕ‚S†qµj&ÆX@žgQZ«ó~F4‰“xþ˪ªº}kí4!¤óËVþà?ØØØè8J5«åª[L-Š¢£î„a¸···±±!ÜÝÛ;;} ÔÖð8ØÙÛ™M¦„0¡ÝlYmlÆÓ¥Ñ.гåªùùßd­IÒ(ä±h•CÆ$¥1ÆVeI‘­ Y(Y’¬Ô’1† mj9Κ¶5ÚÆfÒ9§¤êØ!è;Ûr¹ˆxж †Xç1‚Ø Uµm“çybôm „aH(†¬ÕcwÎ'¥ÀK);ŽË`0Øßß'„zôÖïýÞïFQøúõë8Ø@§i,@[ ±^¬ŠA¶¿»ÿêõËñb–fý볫´pJµÖÝxBHOŸ>¢¨ZU½áF^ô²,¿¾¾^ÎÇoß_­Öÿùoÿ.ŠâÙl‰,м(²ªªf‹ñ;ï>¤”žžžt™åÕri°ÅC „Q @+„÷º®ëùbÇywAæœïííur6¥” —eüðGRÔRÔåz0h¤pIVô·¤‚ËÅ|¹X"€ €«õ’qòÁo¼¯ †Ieʪ6Æi¥ñ«ÅЬŒ £$‰óåjY®WRX¥Ôt²J#‚1Æz\ÌCçÑFi!rÞJ%1BÀû¦i(eÀyà1Xï¡íÊZFu0/Œ¬5!ÀA€ÝÜí“uNÚ“““(Š8çI’r !n«)Ư”EØ3 DŸ=9ùôã/÷67Q”fY±·çâ(mEí q¥š¦•ÊX³#g5‚0b´­Æá»w_½:]¯+!Õ°OpAšZ,‹$Œ{i®êÛÍÁÖ¢\.—Ílõüf:íeº½„JïwwÒ8òг ’Æåƒ~¯—ñ ðm›$Y‹k ÀÐHÕÔåp°?ޤ¨“­—gg”їϾ!}ðîÛMÓü§ÿðâ$ÖÖ$½@Êò­÷Ï^ž…ïÝ{Óxwzör{÷0ê¥ãùT­µVJAEÆ@JýbËH ©[ñ›?þ­£»‡Z‹,KßzøPKõ¯þìLãÌ;ˆ ùþ¿ÿÆ[÷â4ínQHb–ü›ýåºRF -œ3Ó8L=zôð͇÷)ñZI¥Ì|¶<}}Þïö”!d§ºì 8!ãă »x ÃÍ­QY¶±û÷ß|úìÅ«×gF{ïu°èªºN’ÞáÑfXm­Ã˜xç…h"΋^Â8IÓÔ7N«²ÒÚ4M«”’RL²´…!ð€@D1ÑJ+!C„A@)B8ë «xò€1¼5Z!ˆç„`J)Æ„1N)tî€$ŠÆœµÖZï|—ÝVJI)ƒA‡Eú.…íªªáA`Ç Í:LH’¦q’|üñ'Þ“­ÍÍ­­Í€±8 â0ª«Z* jDÕ !„PÚim¥Ò@k @@ jÚÊ»¹µaÝÈÇŸO' Œhžõó¬àŒrÆziÊN9 Âź’Úûä³›ë1òêä4ï÷µs‹RÔ­Šâä`ŸSäT»;ê¦$ЋV¬Wk<§äúâbg´ÕVÕr>ÇP„wÆÚùbN[.gJ Î(%d2ŸßL§wŽïîlïüøÇ?^.æ‹Ù X‹¼WJu I€@%ÄpcÔË„†eÕÞÜŽ·vFÝ]EÝF»÷Þ{g­Å€;»”ÓˆáŸüÞ±¹5ôІa0ì÷¯Ï¯ÿ÷ÿíÿâ<”Jjg?üñoîl³G!Oã;ô¿ü«ÿ8h€ÑP+£Œ¶ÎÆØþ“?(ú=ï cL´ææfR×õ`VŒqBDFK©¬õï}þÙ—Þ#‰T†²"v;ž_ßN¯®fZ¹”N)ÅÙÎÞÁøv*¥Æ˜Î¦3ï\–¥u]zà¢0”J„Œµ„Òe™1¦[¥êÖoÑÄvvµÅb!¥DqF†ÖZàÒªiªî : !Ú­5D(ˆÖÚ;G1Aà½wÆ(lo%„mÃ0”R–eÙYàºEP­õÙÙùîÎÞÉÉÙÕå %ôà`ÿøø8Ï{Œcg›ª¬•rãéb:[Z1¦axàµ,àE¿¨›æúæš3v|÷îÖæf]¯[Ynn #ޝoçãñáÎh»Hc Úàû÷Þyôv/Í'ãå“§§ŒÓ^‘MçËñ|íd+Q‰¦TÍ:ŽhÛ”!¬qJ*‚3¸ZÌËÕ*ï\U•¢•ú´—Xo8gÖg­rïðÎÿó~pxôw÷ÓÙd|vrÂ)‰BŽ ”‘ `aØÈ@ª´—Ú;¡|PtméŽ-Þ-ZB°^Ô„Q‘䃞`ÔVÍøj|s9‰²¤‘’„S  ÇQˆ<8yùjccc6^c1'Coðc¼½=ÂØÄ$e¹˜MçJ kR"Ž"F©sŽó!ìœóÞ`ŒŒoæÃù|2M÷v÷Ž›º],ϼ'•T$–ÓµÑ6Ic£íáîžÖßýüïwv¬¶«Õ¼mKk5ç´®*Œ0€HJµéï‹‹‹nÒÖ={­«VcÝv¥@ïA×ø÷JIà½Ñfooœ^­–Bàp·'Ø4MÓ4«Õ*4˜  çœ ÑBô­hÑ!Æ€1¦sÅw5O÷žæy~||×XÃ9ã-úù½{w···´U9ùöj¡æ q;Y¯kí!YgpŒÓ8I‡Ãý0ò:ëÚ¶Îæ&’µ”ZéáÆæíxð¹Ã¼ IDAT^×(CаH£wÞ=:Ú[ÖâÉ«“º[›û»»áb>Ÿo‡ýt{kÐÖ¨m[J¹TXYœ$mÛJ)µR”Ò²\"„ê ˆXj9Ú2Æ9å o¯Ç—Wÿæÿù+kÔl¶pF÷7‹é!·1Lh{à_sU ‡‰£ý~¯jeY×£nר+ë»3¥SJ‘î-N)ÓHGIÌîÃrÆÚ¦Y.–I””eÆÑÎÁv‡zB1g¼­š/¿|lµéÚ1hç¼6iÅ‘#”R—eµ»»»½=jÅ bƒ1&„v· JY'¢n c´Þ9þ ¬×eµv¬ÊÙÕõõl±úúé³·ß~ÿrr3(ú€øç/¿J"páŒøì“ŸJù£(JfÓiY-v¶·œ3ëõª©EF„’΢6 ®¯¯;úÐw2ýN»æôl¬=K{Q¯—•ëJÉ6Ž#Œ1Ä€â½èìÂÖÙŽ3 „°Þ‡QħµÀ[kè™ß~u.ÏõzÝa/:.v†”bBàz]o667‡Ú˜ç/ž\^ ò^»×Ï_œ2Qn´ÔÎh#ÁYÖK³¬—õŒóãɤ®ê~ÖÎWeAèòüB4õ°ßyzrN1Ø ‡=šD8q!i$A"KB£U¥Â%œ!ËE/ ¥™la<ÆŒq0¨š²iï=¦àou4`ï¡ÖŠ`xÿþñý÷_=ýå§_Þ^Oã0^¯uÀÆYÕÖižJV¢Ä˜aëÆ“é;ß{]5a”Ô­tÞ768çÚêNÓ¥‚º*¨”Æ€ÝÑ1ääÁ£7ŽAh†‹´·¸]~ü‹Ï^¿:ÇŒ#‚ß|ëÁáÝ(á!gq˜ªZññçW7—ër¥Æ˜Ì…q¿ûÞ£ãリ^Ú¦].—ø  À[F©”¦m›¶˜B4F·mU5«VÔ„€±ZkåœMÓ4Ž£{÷ï¿xñ!7ÚìnoÞ¿{°œOÆã«ýðGMkÏÎ/f³ A>Žøj¹`„®ËÉx H{=Œq]×Ýù†åÌ{`BtmÑnUÕZÇq¿(‚{¤PóéT´"Ià ðÖ­¥q"„èºÉPi ƒ(äܹ\-­Ë!¸Ã[‡a`´NgŒ±®ðkO1¥DUVÕp¸1(Цio®¯ono!&wîÝ«ùgö?ýÎïþcDxÞ„A´^­«re”HÓ$JâåjU×5 ‚Éj¹ª›º¬jŒèÍÕUU.G[{;θºDZ@o½µJ©Æ; ›ÌæóU›ÛÆBN‘wÒ9Å9f„`Œ¥4UÝz„ÕÆj„»æ1 ”zà•Ñ­­SÄC6žÜm//®.ϯ×ëª[ÁçŒ9£â8ôÎô‡}ˆ¡±Öx}=^.WI/ëõ,˪æAŠV´¿Öoüÿýècc `ŽÂ(~ï½(aœ™€ÑùÉÙ7ß<¥A ¬§”<|ó^/`pÆ Ç“ñòÓO?Wº²H21žjã6Ù(ÿÞo×íàœ‡ ú™÷Þ;嬭+©SJEQÔëñÂúkÁiÀbçìbQuFÆ(…ÔX3̲ñåå¨ßïõz¢ªw1œcI¼ùËx\µf8JQ:cbÎEÓnY/,óéx@,’$ ãÐXƒ0ôžZmŒ1BLHçW±Ö¶¢Þk%í·[¾"dœ1À#Ï›Z+¥”2”23{ èš½^|yy‘ç9!8 CsžbJ!&„0‚Ucú½Tk-늓L @puv#RyuqUÖ"Ê2D‹Æ'ÛîôïÞýóÿo?üáúYvqz ½$`@Å.ŒH/®—ór>Ghë´v”…ˆ¡¿ý?·²~ûÁÁ›‡{oÜ=»›ŸþêËÅlÕ8˜ ,lCïo/fóõút<Ÿ°ÀcDhže(×ÖÆÂùª*² aÖ4² qžæ¢©ËÅS`­¡@¬Ô<‰ #¢ªDÝ„óïº^UëÕzooïþ›÷1tç§§Y½ÞÒ[àa/ë+¥§“‰ÕrskŒ)Y®Wù ˆ£H AIÃ&¤cÞtbÖY mßAÿþù(çTÈ8ôèË/¾þä“/œCBª|ÿöïþ# BP–fÈ“çO^|ô¿ìõâé|F‰TVj„üÞ½£üðý¶)!„ŒP’$QFQ´¹¹™$)ø®eÓQy]>K)ôÝ'²÷¾,Ë««ëº®!D­Ò„<…TOŸ<;99ˆ<ñrg÷ ïWe‰dCä(AQP‚µÒcLHËSJ­ËRmœiê&í%at¥”Ü4µ÷®;æ;ß3ç,"ŒI7¬ê\”Rι‡Îy ¡sÞh#!ôŒQÆîö µA€PiSR*ш¶mƒ è00°# ƒ¬È«ÅäæÖƒ0²Þ–m=[În'·Uµþoÿ›?Š£¨©Jür>[.fƒA‘Æ!D®‘B+¹½±Á].Vu-1a­´uÙ¬ Q•ÇGû{;[óùôf:Þ;8êoŽH@’˜2J¢( âØ@Âòþ`{o-¤Gðâõ‹rµˆ“ã½yë­‡/ž?ϲL)¹^®ÆÃBócbŒZALB§gg77ã?ù“?qÖC·GÛƒ~aŒrÖ1BûEŸ`Z·BJ}quy~~¶±1Œ{ùhg¿nDÓ Ê8¥B@0þúLí ]å Ä€½½cmÝhksk{˜Æ¼®ê¼7˜Ž_ýÌCÌÃPiyçÞçˆbÄå4¬×í'¿ú o㙌‡”2mt±ã{Giã΢g¬ tý΃ôй¨»þQ÷AŒ îôWÞûÇÿâ…aôôÉ‹/¾|§Ù|±¾ ! DyQäE‘¦i‘÷·w÷*!¥ò¢´Æ„„caGÓß}Yk›¶%€º©FÛ{GG‡Q”ëÙ Ÿ/–«Ó‹këa¬ªEZÄEQ d FÐÑ´ëåz¹(³‚#„ÿúÙåù…wFÊFš÷“B&Jéétb­¯Û¶•÷âÙ×ï¼yŒ‘ÛÝÝÞÜR†ªz¥!¸¸½úð7œÅr>žM´g“•0,ÍãÆ*F‘µ²»z{œ7Ïž=†gg'Œ³,ÏDÓ )¬°”Q!­Ò2L°5Z´RÙiÜVËåûï½·X,¯¯®E–.—k”ïý[o=j¥89;+ë*MDðÉé‹SÄ@ëœñ@ Þ G:ôy»Ýxa 88zãèèÎýÓrx¸·µ9Ø >úå§?ýéÏgó¥s@{çøhÿh'Mƒ8äÃ| [óõ—O'ãiÛÖRIÊ8€!|xçà½÷ßN{¡Røk¡™ÑºišŽ´ï<è&:ÝÙÞu=1‚ª.ðI’ÜEr»êŠRÇ1€N™g¹”RkÓ¶r½j&“ùl¾€`ŒÃ( QwÚ²,•’ƒá Ës çẪE+Žî¾÷Þû'¯^ïŒvž~õì“_}þüé‹ÕrI)Ù ÷÷Fm[$ô;QH -ò8Ñ£‡÷ýlscè¼o„¤,(²< yS­Š<Í‹|ÕȳñâÅÅíËËiÝh´ÉZ¨¶EŒ€÷AÙŠ¦³Ù²nZÑ ¥”uV)«­‡yÀ ÁZi£-AX+}tp´^­8 Ú¦ßÞFa¸·¿?¹Œïlï"ˆnÆ·R›4M‹~?IÒº•@Ƙ2QwraLê\y°k§tÿc­Ö–þðŸþcèÑã¯?‚o ‡=gíd:/fB ‚}Åûû»Çw§ÐUeùòÅÙÙÙ™õÞXÇ8Gkë<ðy–޶6!Ð"Ƙ‚1N éÎóÎÖgûÎhÜAû,„1*eÇ‘Bk½^­×«Blç<´Z^ž½®«J*ƒ£,Ü!§Y/~ôÖ›Y/m嬲ŽPŠEqXgâ8òÀ[g(Ëâ$®ëšRr÷èH[ã½3V;à„ÝΉ±@!Äk´1” |žÎë@ÆCN #H)$±6Æh€1†€ZgÑ{ƉóÊZ[•J)ƒËz‘q-˜PÚ ¡”úõ-‚ªl ÀBšÕj]5íd²xñâT¶r:þÅŸÿ¥s!JQÊ^”7³éíë—áÑá^LÓùtæ1ÑÎÆ ßî!…Œ g“)¥ñÕõÅz]ó(ê÷‹€¢^a¯^=}rpïÁóó«UëòÑNƒç4 Ó$\LÚÕlöÍ7g½4}ç››;ëÕö0AD)-Z½÷Þy8Â8ÕFz`´R %T)E ±Æ`„»àåáÁÁpcGQÖë9çýÁãǧ‹Ùps3¶ÞDh+·Ö} ¹f„²Žnöëvøw‰§¤2ÆÀÖnöìéÉßþç‹×'§Óéä­·Þxúäéb>†RD2÷ïlïlAHFÏŸ<uòrQÎBF(Ðcê­sÆb„½óÆ „˜RÊ(­Þ;g(£”Ñ àÀÙV)ÎB)¦$DÌ9G ß. ¶J¨‡µB–Â{ˆ!ÒJSNÛVhm6†Ãª®1¼#¶BÒ¶²*뤗m{ios¸ÕÔõl2‹“pµ.à d4ÐJ—åjµÖÚjè“§gyÔ ûÚ5Êè¤ãÊUÉÓ0Ã,ï¢V´<ì)!WëueóŸ~þêòöÑ{?íß‘íno]_œEE~“ŽÏ/Îf“›ÍAÒ‹‹,OÒ 5‚gØ;k­G8g0A0ȃ0ðί—ket‘¿ùá¿øâ F¹Rb0( ‚WW—Ež_ž^üìg?Ëûclsks°9<»¸¼¼Çi/IC¥t> "ˆ„8MC)Ú.ÒÞ‘FJ©årÙ´ ~òû?¦ ú Bîöæ\ëöñŸ.æÓ$J æy‘Ý9>ì÷‹Á`#ë Ÿ?}õ«_}ZUë$ ÒQ/ÜÞÝd îìn<¸ÔÏ£5XˆV+ÍÕZw¹cÊ(€À‡1õXë½wݰÇMVJ#ˆ^¾|yq~1 ŽïÞÕJÕUýãè¼\/WËåz5_‰V[¤Rƒá`wg{µš+Ù@à †œ“€1B£LvÎCë<ç|cc'±QÆ[ð€Q†ÄC„!„ÀCg½Ñßj!¼wAL0D"ÂÙ‚PÆCÆL¨¶ÊÃÀoT‚Õj)¥´ÆïÆÎ:£m§‡G7×·UYSÊ”²€ó4I³™V’1¢µ˜/¦ëjÙÊQ!¡RªqÞò0ö€È—‹²n[)EÀȰß(_L×Yº¥)…¸st2Ì‘9™O§·ÓÅÎÝ·|PLñ,M‹>„À鶈øF–‰²ÎÓÞÝ£ÑVÑHu3]6RœßÞ¶Únîq¡VºU¦aCž$q[ èQUW³õÜC¯­~þâ9!èêú²iÊ<<,ú½Ï¾¼âhc8ªVõdº¥E¾1ÚüÕ§Ÿlæ= ='%Ü[¶­‚Þfy¤RR–RÞÔÂhÃ8Œ'áÁƆÿÖ= ¥ÖÆï÷€Ú‚:¨e7pÒZkç÷]uÕ%¶¾{¦½5BL TZˆÄBçUÆ{@Rõ˜Îfq’tr6ç=D0MÓªªnnnº ¾³ibŒ•RØ2At÷"—W·iÚƒCh67·£­ÓëËÖ0æÌùt6kʸl­„áå¢ùêÙEP܉ÓÁÙ«Ó_l÷W·W.‰¶vGóÅ„Àvïn?„×·sê’_ùõüz¶=ÚíYoŽi’Xc¦“ Á†  e<Øèo$I¸¹¹ÙÙÚÅ€P‚·6¶”‘UYÅ,©Ê*Mðj¹Œ³„Ö(á=.Š¢+L»ÙõwÅÚ‚ºT¾µFI „ „G£ôã›ñã/¿\/—庎}þÙ7§'—Ø£{ÿÝÿÇßÿÑ÷­WÇ÷îzgœ•F‹Õj í÷7ƒ0}ñü´nTÀC¡ b-ôÀQJ³Ýú|÷¯¥”@ÂÖº®töÀ`µ–F¢×Ë?ú蓺n{½¬ûÁÍ­~/KÎÎOÖ«²\×UÝãeSv¶ò1gaÀ¥uUã:(ìrµNÓL[¿X¬ÛVL1¢Þû¾×UÕ¶m‘å½4C#B1eeÝ.ו(Š¥T†œóî‘ízDz°îâ+„ x!TJc}Ç xóíßÚÞÞg<Š¢âúfþçþW¿zJYg‘ŪU‚2š¤qQdï¿÷÷'ãëO?ùÌúõ×/Î/ÆFƒédÉY˜¥pÐG)ïv”’NÅK1Fk£=ðJ)»é<öÿSoléu‡íyï:ÓÇnôÜl ÑRÅI(Y³¨Xvœr’J¤Lv*®Êsªü”‡<å!•¤òâØ±¢$URÙ¢DS¤(4MDèÐópûÎ÷Ü3þÓWv£Ë÷áÞ:÷ÿ×Y{ío}8ç @@1ÆNn}ðÑááÉxýækMSÞ¾};M3Æ8ʲ"Ë‹ª©·Ïlw:yÂ@×µ5&FƒÂò"'œ–u5›–uU[c¬3>Ø^¿#%?99Ftk(eR%Îù×…uÎ3Æ…q×÷ 8öQc c,K3Îy§ÓIÓÔ9G)MÓ´(:I’ Ѥ­®k£uYVF[ç‘õÞ£Ðíõ7·¶¥J&uÛŽ§Ó°´¼du[Eš¦ãñøøøx2™Ìçóªª:E®(N”¤•Ó‰Ñ çL ¡¤äœ1²4QBBðÓÉdx|ÜÔxë½uÖoMÛ”ó²i[ãÃñ¨œ×âR4ÙXN¶Öº ½|}}ó;ßûჃ㶮åhŒN†º®Q«Ã|^î<{öæ›×ÏœYotól÷àÉ£½ý½NÙõW®g1EMÛZ瓦i¼÷E^t:ùl6›Î¦ÓiUÎëª)ç¥1F[‡™¨ãäE7¨±¡J)cɆà1FŒÑ{MŒð'A“! ¡7¿ôUã|Óº²2ñƒãc‘ð¬“r¥Šb烪ñ’gG'îÝ{çÇ?þùO:ž ‘0.˲µÎ#„WW—{½ .„À×:âdþÅ"MSΙ1Fë6IÒhÃdL à)#¼1þ‡?üñþþQŒÛ Á-.õoܸvx¼ßj³´´ €ªª €…R˜™¨ÅÅ.v•·Ú9 (¡LQÕÌgÖø$QYžI‹",ôf³qžçYš¥IJðóÞ&¥Œz’è[WY!„õÅà9$Œ¡+cLŒ”±ÖFJ5F$†¿qÆqUÕÔe‹€ÈDBÈFêw–e !xFpDm¯_¿¾½½½±±QÅd2œ1 Rr‚°’‚RæC4.@JJ.(B¨×(™bÀôùòExg1†àìÆZ·È¦“ñt<áŒ_ýÔ•[ïý|:|ú©KÛ«KuÙÜ{¸{óƒßxëw~ï[ÿñã§'Z R;œÝ×?ó™ßÿ»ßʺJ$¼3È7×V×–WaûûÇïp÷½÷n.,-.¯¯QÁ§óªiP*ït®ßx­ßëWMãFýÞêòªwþøøhaa¡jtÕèJ;ÌD–çJÊÈ"ʲ,¬âÑUøE¾Bã‰!„@B×?ûÆã'‹¼pÆO§ÓÑxhlåÁ,9ï–mãçÓšîmxpïáÑÁÜ›…÷>qXYîw» ñζÚ‚1ÆÎ QF(íÊYç„”œ1ïs&rV¼FÛ¿þë·ËyK0óÞ&™:wn»ÓM?úøC*:<>žœm»ƒþ¥Ë—š¶~ãõëz~êŒ6Zk­wÆÙ€<—¬m5ÁDI!— Ç8œŽN;ÂZg ÆØ¶Õ”"L‚ÖXkM ŒÌX©‘NAA€¢ûZdúÅÍuü¿< (®r!À|VZc BIVä1éEIO’4*ÆÒ4é÷:RÉD%yži£wvvöÆÎh%Eĸ¥­¶. •L(B¯Ó €°’Iže”DɽÝg/ÝÎ$/±ØÍÎt[g©ªæeÂÅõ‹×뉻ùîÝG;£¢·ý¥¯þêþôÿÛÿ~4Ê„ô— .`^ÇóÑãÝÇÿø¿ûGÿì_üóýýý…"ÝZ]ÛÚ>aŒIt{ Ðóbýþé?ýµ_ùêïþÆ[Û«kßþÓo+šRmmW–Ö^:{î`oye“ମÊRkfy·ß'‚JÊjŽÀݸñòÖæª’ŒPÁ:oòŒ!„¥8†È4M=™Lš¦Ž‹V@>òè ï!ôt8úøö=Á3FY¦×K/\ØîõzïÝü0Kz®öí¼¥„£¡ÍíõT0B¹àÒ6wvyy)‘*x?›N Á)§#<æDtò®i-¶Î3!U¢!BI-bŒy´ˆaôŒš~áB0Æ! 8®¥¬uB(ÆB8@üG ø Tb­C˜ÔMm 8ÆxìÄñïÄůn[©„õfZŽ» ݃½••µ"§ådL‚·ÆŽ§“YÓTÖÆeÞETŽ&%!²Óï#Lg*‘”S„çÌ…À)÷Ö¶M5·mœ’¼è-,,K™•?ÎN'úä´,¬þÞ·¾õ£ýôÞƒßzë+ÿÍýŸýçÿéøË¿ôå,aû»¿ú¥/ÝûðÎÝ<~ðìÎÇwŸììVÚQ!)Ïmmw»Ù¼1;‡»‡ÇG¦µ*)úƒ•Ñé|4š ìÇ“áñÑ ¼Ó뜎–W×Ö6¶ŸîP&ŠN—PB)fŒÅX¼Ø8ç1XÔZk­#„ÌŒ±‘.â}ðÑ‘e}}]PÔ4z<s.1áÈè4Í:EV¤|{kÅ™ŠÒë †U¬ÓuS éÖ„ŒÖg¶·ºÝFNHB LÄûlš¦Œ±xöEçc,!4ŠF"Ñ.Z {oûýïÁÙçƒK’ ¥8Á¨më«W>µÿd¯š”uÝN/^8?N3I¤ày–'IŠ0Æ‡ŽŽÒ$ídYž¥išHƒïÏ IDATB­u”0 ˜S!A”?yº3™L:NUUY–I){½ž÷¾5í ¹KäS&IR×5PÂbkô>ÊT’Ä‹qN öΖeBI)Å÷ú]Bñééét:oZMiÛ¶ÛíÆÎ9Âx>¯½ojeÍ1AeYÍNgÁÚ¥~·×M1FžîÔÆÖÚÂkŠ}§[0Êk9ç Ó`¬Ó>(¡ŠÎB=ŸJÙáLëEVä‰<[ß~‰äóßø¥²Ôù5Ýùèý;÷~í—¾úÍo~]røÉ¾Æúº\ý‡‡ûÕáÅó›V­ÚÑhz°{Á&YröÂÙW^¿öøÉã;wÜ¿¿óôÉpÐ](òâÚ§.וþùÓŸv»ÉëoÜ žü»Ÿý4+:,Éoß¹Û¶mw°”¥IägYoýñ9GİðlëÃF˜ PPJ±½w›,%Æýô§?gŒ•eÓ4šPîìÖ?ü‡ieEwt2ü“ù{­9&ˆ5>& ×õì¹—y„BA·ž¬“$ ÂmÓÖM휡G*8Å8*[xš’ã£ã›?ÿ`6«0H„ƒ •s2„°·ÿL)uëÖ-d fý´8)¶··Ÿj­µ´ÐņÃáþÁAXY]iš¦èt”’”bmM¨!IR&xS·BÀÈzW—åööæç>÷ÙÙlö—ù—RrŒaoïY·Û¥Œ5Æ8çºÝn„¦#{è9/,Rc cŒ1F0B4ÒAkÀq.z½¥”VΛxÒÅà¡¶mÓ4Õ­vÆq‚_yõ’±uãë£Ý=AÅ¥‹ç$£ÑáþÁŽJhw°P·Îy¤WŠ9§õóàL·?(²”b„„€€¼ ˜²îÂÚb¿ûö{Ïžív;ýþ€¶¦}ýµÏÿoÞ~ë·~û+_øÅ,Wo¼víî½û“ÉÌÙööû1&¿ö+_XX^/LJÌÃk‹gî=¼uqQLIÙ9³D’Â6Á7!Û{åõ“é¤*ëÉxüèÁþhxØ)dšð¥ÅWßÅ­=®—×Ô|^®¯oÈ$óÀsœî9ýï“™•‚(O;Þqãqô¼wü—¾2›Îœ1mÝVeûèÁNÓZBIšª—Îm_8ÿ@ Œ¥IòÎ;?™M¦ÞºàB ó¤„zo77V––“$B`Œ±ÁJ(%4ŽQ½¼óJ%Rª<+¼câ}pÎ[ë¿óïp–r¦ÊÐÂbgeuÉ{÷èÑ“²Ô™LR•ÝnZäE¿Ûëuß÷]ä}°º®+@¨(Š(¥”kk &؇P×µÖ†1!øœsʘsnooooyy)^á…AšeyQD2¥Ö:eÛ¶óùÜ{¯¤ŠgEl Ï‹ÀY !Y–FŽÆ1ˆRBPš¦‘ù¶¼¼\…sÎZG1óÆï<}Üíä©L$•ãùlºwðlÖÌKGk÷ÆÇ'“yÝ ‚ó^.)0ï®\¹Ôët0p­ Yg–]ð7>ýÆùK—Ö7·®¾üJ°øò˯¼rí†i‚"Ëø¬9>áBeJ¦ ¹pacq1µzþàÞ“Ép><ïîí3ɯ^{y^VÇ'§EÑÉ‹Â:ç} ,BÉ4BTQlAk£u¼€ÆìEÒ&˜1Fßúߦ„ÎÀlR½û³ŒõM[wz¥¥mìh2Î˲jnߺ=Ì @°Î¹à Aù4U/^ȳcL)§”B9±¦BœÇèÀ9Ïóâ¹$D:Çkm0F»{Oç³JkkAÈõzÅÖÖFšû{ÇÝÞ >8çJÝoÓTåIÒÍ3oÚག ͧ’$ÏsDu–P*•¢”B Ì8/“RD•”BÎ3ÖM&“ªª"I%ʳ¬µÝnW鬓Rv:Ø)ý'‡hÑe­¥”c(%1õŽs† ç\š¦Y–¥i_FØ‹=t{Ù Û!ˆzÞ# €8ñT@¶´4ÙÛíìÏ«vRVû'''£iÝXAåââ’äƒ NÒ$M³,O}pÃñIZ¨+×®tú½ºigÓùÉññß|ÿûEÖùá_ÿä£[·T®^»¸¶¾üÁ­þÿõïwú`ìG¼ûÇòþéwÿõÍÇϱûÂ7¾ÒIR;kಮœõ©L¥L´qUÛŠ,/­9ÏÆSAh’ k[ÆðÅ ç¯^¹f´§Ëk+«ëk'ÃQ§Ó­›veu-F‰GÚ¡$žHñ†‹2VNl´QÄÁ_°ö!„°4ÉÅιV››ï¾¿¸¸t|2f’omn/­lz$§¥YZ+æUí)uÛ–US×λ$Ϭiê¦~éÜÙ,K0AÞû¶5Öš$Qm«9çJ©è1§@ÆXôÏÁ˜PÊÚ¶õ¾M’dmm­×/F£Ý“£úîÇO÷öö»ý|ks«*õγ½ù¼Í5 $áayãÇ{Ý.ñNQ û¢ñ‰uc,9‹„c aŒqJ)BÄ·­± Œ#PHÅ8›L&m«ãŠ8fÊ-//G¾ÆXp ÅÓü¿ñ9Îâ`À1Æœs˜°(•Á˜pÁ#¨ÛíFo¶2(©²4óƦ)itS—M¢:p¥}ëqëèþÑx÷x©×íœ]mªªªÛ¦5G{§££Ù“û»W/_°on¬Â, %8ý^ZäÖ…ŸÿìV]ëÃý£ýg‡ådþÆõ7Žžî-½Æk BÒl49}pÿþÚZÿW?ÝÔÕ‡ÿüèøt4šþøÏ~X–í?çH0\xåâú«[7è²:jíIËE»ûÏ„7—‡ãùþѰnÛ$‘Y*OŽž¦ivñê¥ísgTªºƒ®µ–º½ý’RIUUc@S*¥ˆtªx‚ŠކµÖØø¸" PJé·þîßS’w²\7úÿúçÜé Ž‡§óª¼ü©K—._Vi’ç™Õ– öý¿ú«£Ãk Bˆ0œ5„¢_úú׊"'˜8ç­u”’X¦ÿÞ%:DÉb\¬Yk¼wQ}ðìÙ“ å…Þoö»ƒµÕÍ×ßxãêÕK‰â“Ñøø`hµ;÷Ò™"Ï1 yUv½‹/pJ]—’S¥$!Ôy (•È4‹6A‘˜Â…RQÆ|𑋈 21K£ø,ŒÑÖÙ­­-)E£µ16 ú"·r0(¥ã”ÿ\Ïí³$ÁÇ]Wü›”DÈxëÇ/æ0G,,>ˆÝFÿMŽP :Eaz2žLËÊcÀˆýÂkŸkf§×/m¿zeûâöJ?—a¨Ñ3µwp€),.0ÁÕˆbB žMgm–õ—ë8p†äõOÝØyüŒbúægßüôgÞ¬¹uûÃÇO}ï{ur|‚°žè*ëäÝ"ãqÒ4q„Ñ,ßVwKdàzöàÑÙîžLsHeíÃÞîaYêåÕ L¸ ¾n«n¿è/-"¬u€RÆ8ÞcŒ!LHtŒq¸/”•¡¼_æ¸h½¬sô7~ç· ÆØðxòýïý ã¢Ò5•ìâÕKk›+kAq*Ùìtø“þðèð!À”R¿»·ókßü¦Âh!H)•JBc¬R‰16ˆ8ÆØ{ä­k©}S š£Ó›?øá­÷cÅl;k¥L­3Z—Ájß6¨m¯?÷Ò™g»OÖ¶ÖÖ·Ö×V–W–ÉzŽ5RX*î‚sÞ3.Dš ÇÇ#B8§"‘i"%“D)a6:k)!œ1Σ4x_Îçѧîèðp62B{N·(””uÈ{“r.“„ré=ƈJ©„Y–†à\¼¦ L(yqô¿˜þ!Þl „<&E¼/Fú[¿÷ûѦÖ>yüèI«MÓ¶ë[ëç/žëtr„§ ÜþàÖþÞ~š¥”Ñð 鸪Ë$‘_ûêW¢Ê#L)‹ ÐqdŽ>dNAëÎ…D)«5§¸™Ïõ¼¬g“Ùd´¹±üÒÙÍ¿ýáOÞùÙ{ÐâÒbÞI•’këƒÅ^*yíåWzýÁl>›LÆœ3ŠQðVpêœõ(aŒ çüÞþAže%8RicÌo^|r"G†Ê‹é>Ïó˜ÑJ)U*I’ª²´ÆH)µnÂe9÷ÎåY–¥©ó!„Ç„pÓ6ÖÙÎçóh@;™L1‰JÁkm]Ðs}Ad4cÖ˜4Iuãɘ0><<|ø$É{?þѹ3+ýŒö:R7ó4UgΞ, Ý.mÜôä$“\ v¼ØÖíÖÆV]U”Ð@‚qf¬o[t{/]¼T[ó¹_üâ•ë+3¿ùþÏží=’$)_Zì]¾ôÒêÚÊÎÓƒã£ñtZI™lnmi]µõøÓo\I4­ëºnmÛrIÏ\ØÒÌZA&ÆŽçM°¾›¥y'Øk£³"_\Xä˜+ž¼ŒÑN·pÎbÂ…`œGk†O˜â¨Q-„±hcbŸ³Ö5mKówÿ)’ù´|ûoTäù¼ÄŒ¼úÚ+çΟ’aJÈ`Ý·¿ýmïœóÎX‹1–JQJ)A_úÒV–— ø˜FhzõBJ0` ÞYÝ oFGû;žY]÷;ùt2ž—¦Û_ºöê«k[k""Q„sBéÊÊbݶ—®\‘JŸ×u•%‰3Ú$¢m FD*¥”¢Œi­C€ÃþI»V›Å)ž¼ÀP£~2Z ÅKV´ÉÆ)%•’”!xZ‚÷‚"e‹!Œ)QI €Œ±ÎyŒI–å ”Ð¦j0‘@øüˆ!„ A)ñÞF4IêFsž öN(¢Ôû [ ¯½r™a/9V‰”JZçÇãéÁÓ]{xúò¥K co}žçgÏžÛÚ:ˆÎ¦¥1žÖTaf<Ü{¼óáÝû._yýÞ|ÿöͼýƒº­’Œ6„„ê•Õâüù3¿öëßZÝ8s2~tçÎÝû÷2E7M2ú©+—ˆ…v2?»µýÙÏýïdûåxß4C„[™4­®Êªõ Yôz_øüçûyO—U[7”‰¢ÛétŠ$•”ʈs.ˆa¨/6/m!ç|AHº}þ1¡>ï&˜þþüƒ,ËO‡£?ÿב&Ùd6 (¼rãååÕ%„g,KRkÌÞ~;Mç¼6Æïœ7Ú&‰üÆ/} xï(!RJ¥cªªjš&~¦ŽqŽÖ4Õôd×µåääèäð ËÔúÚÊät<šÕ*ïoŸ?_ :yDT *ËñÆæÖáÉñl>gŒqF)Á%Æ£6&ø`ŒM&eY’ŠRŠ0D;kM’^ NBˆn·E mÛ®­­Å¯VÞ9‹1‰*†"eŒ Î1B€qî½gB|¢¾ RJ.@€¥I’cª²nuËMT‚<„ÆHHÚ¶±Î 0F,lÚp°2Ÿ”«‹+Ÿ¾ñêõ+çÉ(Å”Q!”±a<)‡'ãG÷®/ö§Õ “¢²îþÓ§w?¶ˆtzƒj^Yí” ãÁú`‚ïöíC ÇǧG'æ©)%ŒRÎgLJq:9í òÍíÕK—/œ;÷ÒîîþÎÓgîu» “á) pîÜÅ3gÏy€@¦Ò#é!J=§^p/Øx>¯´&Œë˜àn7Ë ÊH¾ij„Cí0ÆÎÙOÈ+Rú¢ÆX[·­uÞ8‹uY禘c-ë÷àÉxv:<ÍÓ‚8pN1Æ?ïÒ;;;Œ±ÙtÆ8“JÒBk5t»ÝTɪšQLâlÉÑ}$¢/êœEÈfJL!B(Æ”â,K\p3½~ÿÌÕ«ýA#d¬1Öt2&•i(¥B*ÎÅ€¼«çå|> !EÎ8·Öb_4uÈ[g9ãœq„Rb-Dwš¦ñÑ8çâ>)Ïóªªvwwãm)ú®1L9g€Â@( ÞgYF1©êÚí¬Ç€”R!¥Œ I(\6MË f”s¬ñ°G!¾ ʙ֚qîCÀ3Æ‚µ!‚¥ªëöÑÃÝù¤~í•×~õ­·VV¾ûçÿ_¯—žM——úy¯/1ÖzT—§išm]=wtó6pV·ÚQ`‰l´>8<Âo¯­ !B€¶mÂ. LY·› OŽƒöÃát>+ó\QƒGEÞ2s.ÔSåͳÍ4éþÂg>ÿ£{ï½{óÑÃ÷~õkI’ìww·„£ŽJ‘k-B #@€1^ØLB{Ãa–&½Î€bfŒ&„{P”‹0€£y£÷Ïõè±;Ę2Ê9·ÚL gƒó>•‹ Óßü?°ÆNF“Ýg»àüœm¿´½¾¹ž©`”ÜTõ½;wOŽg³©6&ˆc0ƸÛ)¾ü‹_¬Ë¹óŽ`áCˆ³ R*~ çG-‚ª™{Ð(Xƒ-gïßßyü¤Ûé\¹rcr|ròh÷ q Š"É.„0Oœu”ø¦5Ö¹“áÉÉñIÛ4¦ifãSïÝÆæ–1·À¸àœ#Œ@’$R $âüÖÙØÑEQ¼ ùÄ5IÛ¶UUŶ™R2’q#M'*gÞ{Ý´FëH¯œW•2M3¥T’dRª¸ËŽwØçÉi€ãJJJiÓ¶ ¥0ÎEµ™Ñ®.µu ’î“§»ë+ëg6·ƒnwž<ÿò¯ýfo°üo¾÷7Óy=N†Ç£ùx®„úâ—¿ðÎ{?6õ`iyyu£¬šÇ»ègoÜxùêë­1¦,+mZïlð6xÁÕóI[ÏÒ„q†­m뺮۶¬u£}X`J€{ƒbا"Kå¥ g;XPã`ˆi몺®ª²*ëP €PÀà!8à˜&JeyÊ9§˜Òèü€±˜B HŽM0LZaŒ÷ÚçÒù€ A9¬óQ,À%“ÓñÉáaÂÅñôÔZÛÜZX^¦„`œÒÉ|úèÑŽ±Säœ%”Ló “¥ÅEk &À;\pJ‰uNkÍ8ã‚ǪÎY„ãŒ`„ºn€Ä "Ç£”ÄUYœÀÒ4™N5c”3Æ)UR:ç¡®’$‰Þ…Zëáð´ªôòâÆúææŸÿ«ïüƒ¿÷¿ý;¿þãüõÏ~ô#FÈû?÷Ïþâ»'G'E–ì<;É$Þ\ŒÚj„™@×V–ÖK5ɬ¢=xçÝ>ãt±PJzaÁ8£\péBS{7µ–)%„.€õa^ÎN‡¼X.zœq.¹PŒ ßÖ“¦§‹.ÍzݶEM£Ñ´ß^FFã™ÕA¤< ØcÞ; 8cR FB(Dÿ @!ĹŒ8@¼ÝkGâ¬W9âÝ?4!Œ Æ`­A€ã! Ö_èßûøÎûï¾+)#„îÚÖ†6f6÷ŠT.‹¶Ñ;;ûŒ#.ž†/ýŸ%4ûÅÏ}ÎÏFÌ̬ǧÓn–½|uí¶öËË/ͦ“ÖœÞyº×+²ë¯¼~Xšnl9›b\Œ>{öÊ×/¿nµÿðνÿçûguA?÷õ¯¤ýžI¡REB3«Zïfu™*H%Å$Z%#¤X^ÀYç+Û2b%0fÀ7Æ´ZpÁiRäE"•Õs3g ¡bcuÝzÔÎLË Å¢x +¥<8cm.¸àìùŽ”Jc %q Þ:ëÀÆ(=¼sQîC”ð`ÓV¦­‡œ2@#D 0„ÐpxòôéÓ•…Uï=Çx0Ôui´ }Œðt:Bø CŒ!DòÁ×u=›Í¼÷MÓzï…àqßȸ4Þç†9;¬e(˜Óãö²¹,Wi¦ª¹žÍÚZ£¢»`]ÐÖ€sÖ2Â¥$‘ÉxGc­œ7F{ïž;²Ç 2Aw'Ow1N uÎ#Œ iša„°µ>@@˜$‰Œú±8ú²èVƒY–UUƒ"„ÍæsÎø`¡ß)ºMëƒÿ'ÿåÿ˜Pö§ò/Ÿ=ùa—ª`œ®Çd{­ûèÑGŸúÔ•?üGÿdskðƒï÷ý÷o]?ùx´ŸõE=›XѤœ"0…Ÿ¾òéÏßøðãÜ»¿O »¸´¾¾EzÄyš^Дâ,M£žñd"ï½*„Ö``ˆ %¸4ƶÆJެ/µÖ‘ŠŒ ަ³Ê{PR–umœ©D%J†0 q¸rÎqÁ£wDTá—eÉ“R .¸8.Z缇ž»ÕBnÚ¼n^˜ G\‹Ý¹s§,«<ϵÖK‹‹ÉB/˲$‘E§(Ëòî½»”ÒVÛ› ÷:£e?qÎVukLè/l¶Úb†:½n5ŒÆ§tΰ õ¼6ÆÔuM1‘RÁÒT„`(Á˜yŠC§Ÿè–ií³Úûôõ+Õððý£‡­n6¶×Ëz>Ì›¹ :íd…'¬±Ϥ‡°Òɾþ¿?ØÞx¼¿w÷Þ£òt˜vzE·ûàÎÝ\¥aa âDIIÀÐZƒ àÞƒs6"-ŒRÌ9᤮Ì¡$Q)µ>Œ'cï¡i ‚’¦©c\×5ŽÄ%Œ!Qè ³*Œqžçñ%b‚0kjÑ´9:± ¦i¥”˜!:î®(!” ðž=yò¤ªÊ<Ëuc¡«W¯îìì<{öôìöæB¯888˜ŒÇRŠÓQ+%Éó«æzyeùÆ ‹‹mÛzç1<¥4Ïóh¿Qã,‚*ËÒh ÎJdò¬ïNN†™äE¾œgªœáþbºzö‚)a]‹)IÒÔ;TVmUéàüææv]×M]w;EÓÎïß»»µ½ft£žfy[ëV[c\«Cš%ŒSï}ª’Ÿ=ýbqG@I’äy½á0J1ÆXkÑÆê¦ÕÆÆÒB´Ú¤*!µºqÎ3Ê­ñÞCUÕÖº$IBÕ|jíúŒñàÃ|2¯Ê’sž¤ÊZ{||L)K×è¤4ÖsXé&½Ž<î¯, 0„à<Æ ŽÚ·•¾xqûò¹sOï?ûðþÇ,ç « ÃÑ$áj6Ó âÏnß1ÃÉÆê†Ï[¾ÐI:¬“<|úèd8¤Ù¹Å5ÁåÑp´‘ä"SdEF9 ”JBºm{‚ ¡#Q…‘wQ"9Ƀͳ´i hke’LŒ1Að.IŒc$„À(xïãú#öïØn¥”„áâJ Æ$„`@ÔXPBïÄØÀÓÿè?ùÃéhüøþÃjV•M½¼¾–é•«—¯\¼Øïw6§ÃÉé鈄±c”‚GÖzï¼T|uu™Ò8FãOè8‚Ž‘””$I¬•¸jÏT¢Œ:i1;­œ±ŒB¡i ÑTÒ_ ”N¦[ß¶0,Þ½ûáõë×———÷v÷&“1gÔYc¬V*9ÏFã¹u¨Ñ6 ÈòŒ0Ba‚SL#÷¯mÛxÅI –ìt:kÛF=•ò<Ëó\î¬5m#9[è÷{œ3ºº¼„‚×mcŒ„¥Y– !ûýk­Ñ6„È#ä¥äÝN·m›ÓÓQY–‘P샂///_¸pñôô”sÞ)ºÆ˜º®£M5ÿη¿!0˜O°¼KhG{~öÌÆýW4ïÝTÖ(k}k¼€¸P­ IDAT 5UÝ#JÏ{ö3÷zZŽu25X_›YS['UšpA=HLºÝ¥Å…4•ƒNÑ-ò¦ªvwv÷ƒ÷ƒÞ *KLmšÊ4M¤ˆìÜ`]MHàBÆ„P&„„#5‡Pâ‚Ñ«VpÎ9'8ºÔe4öÔ¸šyÑ2BðÎ9¡zc9ç˜Pk]ò€1a„Pc,e„a-›0 ½óýÑp”e¹·(KÔÂââÊò2AØZ›H^WõÁÁ¾³¶®«$!cçƒ6F‘$I·Û1¶iš†,WJ9çµ6Æèh¸qœˆ„CÞy ¤©ôd4ô{E^Ôõ|8, g7®ž7® ÖÙJ_Ø:—òâ§ïÜúøÃ¯¼v}qq)IÒ²,Ñu]e¹ÜØXŸLGÞÁ !”÷Np(4M«®#„@¢Bõ…'f¶c\Ὣªª,˾ò¦i„È;Éh’*ŠC5›§iJ1\8w¦iôéxZÕšs–¦9!,RŠz½&ØêÊ;›H¼uÆLG#Æ„à —B¦BHzzzÚ4š1ƘàŒcŒ¶§MS4ÍÎloÏÆGÇû’ˆ\ Êy˜ÌËå­Å­ËkUsðgÿê_ÌJ¯òa<+TÒሒ‰ªZq8\¯,q¸Î¥¸zéŽ)ÿö»ÿvqkƒeÒƒßZYYYXFVOW×Wñéd©›Ï*È6W¯]¹ì?xüä§ÿö$Ï4Ô.ø+W®--,”óÙ…‹gQ°Ú¶J &”1Æy Ú¦1Îc1!! àB\.x0 EJJ‚™óÁ{íå«_ýê…²œçyîœN/u]ŸFCBȇ~Ì)OÓŒsF &p®®ß¿{°³WNF«+I’Wµ«šÀÓìêkWŸí>[ì/VÓf6®n}ðÑ­nsΚ¦ÜØÜèõº³é´Õu’BB]•BP£MS{‚1/NβFSJ9á! úù1E'ÔÒ€GmH”ŠŸßZ«ë–Q¦¤4ºLÆJ ÎHS—mÛžŽfÆ:)%ƨÓ-œÕRJÁ¹Ö:ÆÑ )]ðeYŸžÈD¶V«#gùpxx¤T2Ÿ÷™àÆ>@9ŸÕÕìò¥óƒ^OŠô _øú[¿ú[Tɽû£ñ~!ûÆ[ß@Ó¤¹$ Œo Å}Æu‡£®vÝ„ijÍicñêùk”Rï\]×?ÙÙ?è,-u–—Že«%眳@ ŽR¼¹ºúæWûi~ëƒoÞüð'ï¼÷ðÑîÎîñ»¾öÕ¯{‹8T0c !&Þ•¨XgŒrB0BÙ¼Bð4QcäÅM&—Qe ×B˜ è*G)ËJ©Ä9§õ0A€Q`”2Šn„縜ÞJ9, ._¹Ä–‚IÎËyu°w0<9®›ŠQµÈû°¹±zùòy„"Tî´Ö±¡î>Ûkj3›V¼;Ï:KKKŒL€ä´nË9xÿÎ,9ëõz”Éyí‰ÌÎ_»2j&ZÛ“£ád4ûøÎýÃÃã¢Ûéõ;Y¦êZ߸qãÖí¼3i" B2ÆhYÖh’HLœà„sŒÀBásëe\JE)ÁI%¹àÆš|”ïů~´4tÎ[ãœõ”Ð"+„Î9L°R’1έêÚX „Š#„¢¢ÓÁ[ë¼÷ŒSÆ)ÂÈyW5¥N%¢iË,Kº½ž÷¨mµ”*ò ªªœ—ó,OW×W²NÖéæ‹ƒþáþAðav:޾øµ/ùË_>ŽÆ?¸÷ìpÏ'T0’æI7Måj:È‚8NžUÓÓµ} ¶¹µzz¼ ®ÌYêô®œ»ÐM;wÞûèÙÝÇk%L©CØd‚õ^ƒ­ÛÉ‘==œíï½|îÚ•s—U’ g“i;_ÝÚ¼xáB;¯ÊÙÔ!$0Á0AmÛxï‚÷!xoFHp&'1F²,‘R¤™J³$ÂþÑ Þaâ.!(’Z),…â\iT§agél\F»³YS–µ5ŽàÀAk£NNBkRÝÕÕdÐÓä³ngýÌæÁô0AD·îg7ß9::ç———¾üå/½zãúÁÁñ`°$Ia˜ïçóY«[ŒeÝÌ €¸ó2Q*+ËÊ9—ç9ÆØ˜V×m¯µ¶ÖDE5£ì…>=·Ÿ»ƒsŠ)1Öhc eƺÚ,O¦„ „‘¦E–¦¢w 9@¢„I¡ú=Š évzŒó¨ÌŒ¯ÊZ½5;ÎÒòr·×Ѷ­›Òc|öò…"Í÷÷ï?xüñÃGïÞü`eu­nœÈ“i©¹Ê]kʶM0“ X§ÎÍúù÷Ílçt¿˜Ëź(”¼¹w3Î[wíÚ5 ¦Ù{Äó™åbeqé°<Ù¥Òƒ)ëµ…•¥ÞÀµ†Ò4Pèô”Ä!_Ì×–n|z쨜!TÒŸÜI"iµ6Îyk¬sG0­SEd9çÅZ·œrFY¬ÎX¯Ñ8º°¬±‘[ݶm,V@`MkI™$²i*@!MAˆ'±¢èkØ…ÅÁÊêr¿8cÎúÇŸEQÕ¥Ö-!$÷›[›[[›Œa!ÆÐ4M¡©Ûãã“'OvŽÆÈskµ5!4‹"I‰Ä;½¾ªžOþÎúZž$”·ßþÑݧ.^¹ #Œ÷>|²³û¬*ÛàxxüñΜ=“fÙÃG÷¥I"Lä£à@)ët»6ZÆ„õ$ B 3aâöŽ…\&Œ‘€°õ¾nBc„âì9ÿ×9§”’RƸÊH© !J¢ 5Ïs!XÝ8ç½÷>MYž÷ò<@À€~mûHü“Rq.´Ö1>É‚‹·ºh ƒ«««„ºm<Ý…'$?3íL7ýå%ÝØGOž 'ÈÙÁâZk[˜ÍQ«=„Y9›M5âbRÖšN6œVwOCk" G쾡ç7×2Jd ÁÕéx³9iªG§Ã¤3È‹tƈóDžÏ¦ChcÌ`e¥›÷ç³SNf’:â-ö¼µQB@BÈøÞc92Æ£Q ‚0pÎP@ιÈS‰eú‚·|ˆfõ±RãP #B0øà½ !ʤ)¥4€ëuʦĶ΋<Ï#™Ÿyëf³Rë¨%znEïû”ÒõµµÍ­ M«xï‡ÃÓÙtþôéÎþÞÁ²ÈÓ££‰µí¹sÛZ×E¡„³é¬ªªõuB%X·µ áµÏ~öÕ7ßt><|xo\Î÷v0œ1!„Ì—$É¿üEBH]•ÎQ•¤„Ùlê\Èó´«ò¦ÖÞ.Ä'_bl¬¥œjc´Ö˜$€0 "„J‚ ! ÿY{aò‹RJ뢀Ý9‡1QiÖ4uÓØ~¯ŸåEL==­³¬ ”EN‚0ÑoË9'„ !ú‹zôñ“Ý‹¯_ߨÚ¬®«,×Ö-,¬ãÀ¨GÎxA(@ÀÞ=wIRJ™O$(‘]¹ ÞÛ(ˆwCñàzÁ¹þD u­1˜ÂÀ•RXk¢U›wŒ1ñÞ³˜MÍó,Ë3B±6zЋþYëëëƒN×7ש Iž§FꃃÃùñ|wkçíÿ꿼ÿèÞ×_ß@¿üÕ{?ÿù¿%—U±¾¾qi{cT±B¹ð­7Î=j¦“×ßúöÒ•KÿËÏþôÿø×¿¤å¦óÚãp&˜yÀ„Fa!O9ÀyÀˆs–$жбa•RLtZúþàèxuyj1V É÷¦•ʬnÆ“)ãI0Ž'iYUó¶Í8ÍË"K„¥• Áß4M„Eb/'¤Hþ?88 ŒÖ”Òª*£Î¹a(ÅmÛ:"ªÄù|Î#$Ê…±1fzç œ16•=ýä³ßfEUU $‹zÆ9LFÖÚ¦nû®çœ,MÇŒq0ÆFïNŒ)5Æ[+CBXšbcê²(ð¯¾~øño¿xó­×ëãš94‚²<}røõÞ ŒSiå­—_ØÞÝݸ´MŠ¥v6ÚŽÉzm¹²(¡iñÒk×ÛöG'GgOîýû÷Þ'_ü»OŒº±T¾öò—n¼ Úù¨H¾skõɃ§{'š$§Ê_ÝÝÁ,ÿôƒOŸØþíôùÒ¸!` ¨)Û«VÊa†¸²Ž±uqúdœRJábÀаÀ¹Áç…€0ç¼c~gÁ‡X}ýE0¹?×ÇGK<‚‘ÎE¶þ9:ï=Á$IÓ¥$K(£û‡ûwïÞÙ{öt6›Ý¹s÷É£'0Bnm–f1n6MÅÍ[WFã|ˆÄø¶í`v6ßØØØØØœWUqõê•K—6“Düö·Ÿæy±<]¦„Yë‡^õÝ0™L<¸?]™<~üèίúa@(´u;Ÿ×Æz‘¤yU)mD’^¾za‚0¤ _q„ë¼iÌG”à$I.€}‹Êó!4gBˆh¯LhdšÙhç}0FK)‡AZkCcŒàižœ±aèãjUUBpÖO–V„H‚G”Îhðž‚‚zÑ(¥9g"aÃhT…àã¤ÙÄ( óF(kÚz2™\¿~ucks<™”£²éfÌPÏsŒ×Šr£¨n_»yeûÒÑáÁí[·6VVܹ÷‹¿üÅçŸ}n¤›NV–—–£õÐÑ”Yd’LŒÆ£,+&“å7¿÷ÖÎKÇÇŸ~ñŃϵô„jðGÍiß/š–ˆìîÃ'ï}ôélÑ-¯®_¹~óúë·› C¥ÀœrF' ÐÆ6r¤’Jù‹Ô¿˜©äœ‚… †ÐsÆRü›RPðÞGþ>%$ø€´±ÎyÎο {ï‚wì‚Nð\TH)â~Z,M²Qéíí?«¿œÛÿÑ?üééÁ‘ ‚q –•r°¾óÝ7§ËSdsΟOpÞ#„ò<F„`Ja<^Z]]êû¡iêW^yùµ×^Ã[ç¹Èx%[­Ú"YÂ@ðNI­c\8caÆxdmmãÊ•k­´·P’ʲÌCð(c“4±ƒŠÇ4¾ˆñ–eI©ê‚L ΙAöÞ‡èá °”ZkM0MËüìô4Ï=åBŒð(>/!RJXÛ Z[ð¨o[mM–%iš0N½sZ[ç\šæï|ßõ„ ù|nŒâ\hmœ Z;k]•RÓéNOÏ(#åöåW®QèF5fióì„¥éºáßzc4©D‘üä»o¶ÃðÉç_|úù—þþ‡"/7v·o¿v;%Àöý@Œ"‰äÜV—Ä‹;?ÉþÙr¸Ú÷C^fÉ´ Ix6te¹ìr_G76nõûGGÞ謠ºœ°Äb´×NK£´²Ê[ec ùaG8ïJã‚ .XÂÏ]—¥”‘:ìCÐJyg€sŒˆ”YŒ#–êc툢çœóÁ{œ5 ¢icLk¿ŽÍUÁ–'?øÝï½ôâ-oͤ*ƒ ß}ã­?ù“ÿõñãÇBr(´m“$b2iÛh%“$ˆLd%î=Ý×ZO§Ó4åŒá$å“¥Ñ|>ÛÝÝ !œÍf"Ͳª$ Y3ÌN›Ù1¶zœ¦H[W»SªºÞì±–Úžž=Ûß§BЄq!¢÷lT„{„0¡;;;ݼžN§ZëÅbQ–¥âððp4E¡Õ/ŒqúÀ0 Y–Åyœ15 RkÓÔm–•Z¹®x!hU•”Œ‰Vcݵm€<¦˜BΚèLC)kí%\P„¬R:„E’ˆäyÞakB–PLˆ=;›M–ªª*uûû³ºÞ¹¼–™HSÆxìÃûw±Óñ’wye»š½Ç_ªß^-¿që製Ã;ŸýåÏþ\]ùÎåKÓå1ãÀS"’Q‘•E’;NŽžúå8÷˜ Ê5:5–ÉÜZÊøÆÕË7n\Ï‹ü¨™C‘vÆ1BœCYO€rî½wÖá"Žþ|ùäýÿ_dO(­àsz]T«*£ !y–0€à,ÀŒÒI’Jjkm4æ€,ˬÓÎaŒ(¾(ÏÏ/wfÉÖ•Ö¨¶Y´õÜj¹½¹½˜Õ¿óú7?ýä“ùbγÖcHÒÝË;KÓ L;wzK’di:Éó¢(rLÑ*2m¯]½–¦iô*«Š‹ÄZ‡|pVUyÒ-fª­«4å™ÑfÖöiVœœÎ0¦>¥ìòÕ+/¼øR"ÄteIvÅ8Ú[ãèàå=§,IQyžä—–&YžžŒÛ¶‘}B ŒI9h«9gQ¼¼< ÁE‘¦™w^)ο°µ¶®çRJ„‚÷Akm´£„wý<ªªbyyI®Õ(8ë9(àœQF(ÅÑó?¶Â„0@! @ B†vÿÙÞÓÇÎØ“£Ù;¿|ïîW_ßùúþݯ?z¸7(›å“´ÁÏt3Ý\Ù?;HÊd¼<Ê‹Dë¾ïæ)A«Yºµ´tkçzÁ«Å¬ýâÎ×üö³û{{òÇGã$ÏÊ“ããª,ª²º.å‰÷^¹N…9yšPf•j†ÞrR[­Q«à¥sƒµÒXïtuCÕÆ8g#ðä½ UUZg ÆçÍhˆdÛ4Í0 u]ŸçšÊåŒëº~pþEa1µÏ{QJ(&œR!¡„Rzv6“R r˜ÍggsêÚaeeé•ë»/¾tsT,ýÕ_üû÷þOÿãß¶‹r2åIf±¤7œ»W^½Å…q&šŒÀjSyª!ùdÕ;L)],Ú‹n'"K5Æ[Ý7]“0öôéC;´ ÀY7´ƒlãÚÕÉ2e©¶¶éÚnÑ€³U&d×:­óÉ$»¬µÞy@„qqÚzœŠ‹YðniRµmÛ7m3ï ¼Ìy*Âdi¼4ªª²<«³ù¼^tÁã¼(Ñœ“Õµ‰Ñºmˆ” °Uú¾/Š¢,“¥•‘16I„µÚj-’Ôhq°ÞsÎ3εÕÚ¨,Ë’¬@Þùà2Á¼wžâ–½›ÍNÆU¹6¼þÚ<¸¿ÿl)M~ÿûßËòêᣧ_ݹÿÉÁi–%i’féöÎæõ»?Ù«g³kI¹Pƒµ|•eëÓÑ\="~±³9^—UÚè•ÆØzP{÷ï>øìê±³<[½|•`PÎ"L)¹`¥@0õÄ;d9÷%6ÆJg1M¼6V!m|×)•ÑÎhcׯ¹^jã(&„bÄ9MÓ$Ii„žÃÉ>f+xï‹ùò«/?ù䋯îÜ;Ø?z÷ýOîÞy¤ lïÞXÛÜY´­§vûêîÑì!·±º´9–@Rç§iqv¶xõÍ׆`z«˜àeUq!­ÚaÀP€²¬0¦Æ†@0Ö jè´ÀÎ IDAT¥·AÚ'¥nmÛ4ÑS (qÞ!\p!£˜Rš¥CPjÀŒ2BŒ§£”0FµRL0Bœ uÝ6m碔LP€è€'iÃ-BŒR†)ˆÁ÷”’¦íNg‹¦•ý ‡A’KÛ×^{íW¯í+ç“ñrž•ñïþBˆÔ‡Ð C$ÿSJß~û»;;—"#B @}ßÅe:!8MS΢‹!„”RÏ¡‡(À÷ÞDº¾á‚§SždzæÑÞaÓKÀx±¨=Â6©Ô+·¿ñÚ·¾UVe^dMSsÎó<ûú¸ÍOÓ4ËrëPð쬋\ˆà&#ÔõmÛwãñ8J ÆÕ(†Sžž-| R*â=ò.pÆ@ß ³Ù"áI–eÏíþ¤”1MÔ{¯”lšÆhMHD t||ŒJ’ó–:˲"ÏòÞ¹<Ë£MÛjkFãI@˜s1_,ê¶_4]/¥GO]Y]YßXí»E–Ño]þÁÛo¾öÚkE>Ú\Ûxá…—†^íŸ}öåÝ¿ùÕ;öYoMµ²x’TUÀxh:=_ ®'€Wn^?éë…ìŽNŽ÷¼µUY@ÚÁØ ”ÒÖX×4m]·>ž×‹4ÍNÏf‹Eû!¥´÷3æËž¥BšgiY”‰I"œÑF|.F?÷3BDPžç”J(c"„P7ÁZ_o­L|…à18ˆ’ç™·Î[‹{oµÑŒQÂÌ(ðYúÖ[o­®¬ï'±<Ϻ®CˆL—Vfuí½"ÑÊ`‚_ýuÆ #„O¼qÃ0 ƒŒóÚ0tBˆ4+0&Á¥4R\ãíUG!çÍÉÑñh<Îó̹°wøôËûONÊ4]]ªVòˆ(ã¥ÕÑÉ a8TÅI3’P£dOу1|°FyïŽTàÀy’Lf8¯ë$IƘ2º¨GǧJi‘¤E^ RCÕWÎ:% NÒÔY J©¶m…EQ„†að!!0%QZÞ‡¢(b³Pˆ©KKK£xc Æ8M’D¤Þ¹ã£ãã/‹Zp>]ªòLÂy^ö­%„¤I2ÊË$å‚¥Ùë¢iº¾—?ùýïkóƒýÃÓÓYÓ´g§³wÞ»ûîÇ÷Åo|ë›»+£Õ¨4ß{ðð÷~ø½ã®Ñà)cm]ëAΛERæù¨ ÚV£Ä:§”Åóza­Ë²Üqõýà½~Á™•å%ÆÎ×ú‚sF)Æ û./ÀÏOj¹²,‹SlpN0nŒ¤æŒSÊûùl±hcÎ… y`˜Ífyž3vÎtaŒAHÆselumZUæä„Ö5Пþô§Œyç”î¼ýúÞ“Ó“Ù½{š¡vÞYsN¡O’d6?¦ ‚QÚ˜Õ•çE¡ªŠxGaœó$Y–eÔ=:çœw֙㓳ë7®«ÑbÞ:<›ÍÀ½ûOõ«_'ÿoëµW_ÙYÈ qˆ`mUQd¦ƒÖý ’,0a)O)wJ—•”jÔÞ³=¼Öç(Æ€ªªG œRB ÆÎë£4ø[ëž/âGkŠÓnhkc­ ƘŒFk­5Î;svG_ÑËY !`J}0ŒR¥5(Î’+;;”rzåÊ•®;m»C!ËÓ,ÍîÞ¹³ººÞuç< „8çi–FÐ !K0 B‘qC)Íóø)Zct (8==UJ­­­qÎ#é8 äBh{Ãy¦•;>>9;™É¶/Eš&©v©4•½Ò®¬Êªª.>lifBˆè Q½º®µÑ‚RÈ{‡ÀÊ9'”ÆX?´Lõ5ÝËnѶu­”vJ™€"#Aƒ1ÒX™¤‚Zº¨kgm–eBˆ,Ëb¸hšFÝ…´ÖÈAig„B$³Ù"Y–FƘ:›Íïm&(§s ‚¢ï¿õzÂ'€Swªí‡£ãùáÉéW_Þ]Ôõ'Ÿ^)F~iR­®¬h£w¶·Çã‘ú¾ëeS³„ßxq‡Kº‘ÃÎÆWwG´à»;—<Ã!ggíRP „€ ¾“2$cÜùà‘—Jû„H(cΣ£ã³¶lL~¤„L)-òt\•ÎBs‚÷€<¢„ZcÐÑH%D|ÐSEtF‚€hm•R“¥©wV}ÖÚ˜65™L"] ¡à„Ƙ5&O“L$]Ûi%€"l·T0Ž«ëúOÿì_Þ¾ý†òNJÍÖZRoïM£ç-¥$8¤µd×÷ƒ1z±pUU1F¥„iÊ¢!|UUÑ«'^pðXJ¤E’dõì¬Ìó×®Q í¢´íú'éÐ+eÌõ7G£Â8“Rf‚[câ»Qä¹TJkg™p (.Ьm»èˆQ†1 yžjgÁ# 4I3JI)µnš!Äh- 8¯1Fyž§iÆyê,zöl_çÜZ×÷C–åEQDÜ»ZŒ¡ª*Jz)•R:M³ØåynœvÞ*¥ú¡__[9=;á”Êa ”&YA)ÃŒÖ'‹yÁÈÒúÅÈj]d$ɲb€Íõ‘ W~øÃoO––ŽO>üðãÏ>þüÑ×O…`I’üúïÞ@[››/¾ðÂî•]Vâ“úéñ³³U6ÚÊ«ƒàÆE¾V¤RõT°^*oõ¢m)àI>—#!³–R¦IÓT)¿`œ/êæøä¬ë„€rŽòÖx@i"²,uÖ†Bßw,:U!HDb­#„Xçâî4nžËâãeTxŒ­÷I’äY…t]—¦is°¼÷Âx<ºPÃCìñƒ÷ÆÆ8 €¶m¤Ô”<T-õ ”EžsJz9žkpé¸2Nã`±ë+¯¼üÆðö|{d­Qjèº!×B}?Xëóã¨u‰”mk-cÌûP/êŬ¾ze'¸0f§'£q±½»qð ÔþÀyZ£å•U‡Âty²Æ`ä‘Õ*˲à¬sȆ¼O¢Œ3œqcf”ržÁ‚CÎ׳:I’ªªa©´ cØXYiÛÖ8§¥‰iVÛÅЇ&“É•ÝËýÐÚ¦¤n;Y€qì¼)³Ö Jjk²"ã\œžž¥I¶²²F)‘²UidÅcŒ’„c§ÀY¥‡vè{N( WÊ|´>tý¼?1¦a‰OR*‡‘I’TöÇcføúíßÿÎ[Td˜b@d4?|øô_ÿùÿûþìßçÖ·Öv®¯}ÿ[ß¹µuyïÞƒÁ’QKx2Η¦+h M3¸L³$ø ­Ç ‘P ˆgð¡*R„p³˜×‹ÚiUy¸m[Bt)·Î×u‡!JνóÀ !ap@…yO`ÀÎZä<%dh[cl"¸qÆÏNí1Zï-eö£*ϳü܇ô<:c”ÓCZ䯸Ïï=yø`oeymcc#fRš¨Nö=Û;ØÙÙ™ÍNµ–C°$IÂÕZEQu$uÇímfERHœý£?OÜdDXÔ÷õ”À¨Êœ•ûûûW.ïtCÀ1Nªq…‹öÊ•+ÆØ•ÍͲªŽNNÀx2ñFG[žØ¹Ææ5ÎXÏå©1š:ÞÂ!PDþâþ#"±!‰œŒ¬(¢ÝsU;!¤m[©" ZŸÍç‹,K‹2 È8çä`Û¶ºÍ¶m§Ói’$”!¤ „1hmìy¹”"‚IYVFi5 ÿêç?7Rmll\Ú¼TcÆX–yÊåh$²4ͲÀ¨“ƒq®÷Ae³<9›,¯§ÿõóÿ[ñO•¶÷ ¢»cÁ{‹"ñµÖ*)σkœÓJSJ9O¼–!x@dT׌ ‚!xÇ9 eŒž1ÎfY»»à=£ŒBIj½²Fõƒ¾sçžüÐ?{ühJÙi-1"œ‰®>þøÓ>þ44Êr.ò$¡„PÆ|¤ˆ£Æ1â"^‚eY:çÆãqÿãùˆ&Sñÿ(¥š¦Y,æŒb9 õµå¢Hµ‘"yQp.”ÒëiöÇüŸÿ‡¿ý;DI(ËbÐÊZS•…`è¹·J<…¡˜ä½RÞIÓ°/Æy/Ûº>sÁm‹„üGøcòÿQ7ènïüú]!&$'©1n†<Ͻ1dcdA.„Àò<”ì{iŒö1š1¬÷(O'‚ Fk@Á“eY|z‘\„àBpñî¶>Xï‚(¥€G¨iš4m;;[8²,Éó$Íi\bÇ&5>ù4MãLæWÝ •’”ŠLüæßxÓÊn°4á\Цã2QP&šúô¿øëk·neYÒƒ1ºkä¥Kk—/_VJ)5pΣÞ#¶¡‘VmWbI‹…6¦òÅf òHŽ›º.Òly:vÁî^Ù}ç_¯,¯^»º›¤Õ ÍúÊÊýûwó"eiv6›]¾r¹nÛg{{d\DqÏ9Jâ½—Rk(c€3B $ŽáŽ‚˜!$Ë2)¥R*ú€2ÆF£QQ”±BÇö:˲xj³,kš† .İŒ ¥Ôš^ë ¡8gB$ZK)U\w`ÀMÝÖMÓ6%,xD¡eY))¥Òi’ŽÊjuyåã?ìÛN±½[ J %ggóÅ|6OP8 bdqš‰Ñ¸(«tkg ‚ ÍÒs±Ÿ‰  ”b,‰àƒwÎÏ[ZZšµ}¯¼w}¯Q!BhÓ4UUZ㚺ŽJkkãñ¥˜Ñ¡—±eœK©éŸÍæŒ'„j €‰5vh:=ôzuem2^FŒñÖ8ðc<;ªÿî¯õÚëßÄŽŽO’4ÛÜÚ\ž–eÁ¦Õ28š@›‹$Ëҡ̶½µÆ‹Pð3F£Å¶÷~†È;G)uYç0`J™Ö'$¼ ÖJÁ“DDbT¤› œ3(fW7}ï¬'” „”TR©Dˆ4ÏBA+£µÖÊXM0M’Ô9ÃE[£=§ÆÆ0ïc vÞ"@y’–—¯n|û­’qJþÉ?ûO‘fIaMxühïÃ?>:>6V[gÀ!JÈööÖµ«W´Ñ1CœóP’ˆ¸é‰•œ\¤ÆðyÄQ|üÄy7­÷]×&‚c8_“ÄEC| ¥q" ÞïCðÖkŒ5úÙÞ³Α¯ç•>.Wœu>„H~ì̦Z–eœFcóÎýmb½OÓd”³– "¥‰Bá¾kµVøÂí16‘»¨ŒŽªL¥ÔŸÿÙŸ9ïnݼµ}i{T(¦Î"k‘sQ²¨OCP”’skš2ç£QòÑGïŠ0@ž•‰È(}/?xÿƒŸÿìÏJ–#~ö³‰¼ÛØ\J’,µÆqÎú¡#GiÆ$B¿iš!@Z›Ajç¼óÞØÈ˜öIÂwFK‘8‚1¥øää„F¯{F<z.°î¥ªF#B©ó^$‰÷~ïÙÞêÚšuÖZiŒŠîÁ‡˜{ )m¤Tñ¢3Æ´mÛ¶­Rj>Ÿ;ï„`¼qމDÙðᇟÞ{ðäðètïÙáÇO©TžS×÷½“9ÄH:ÊùY{ÈÆDj¤7ÎçPŒ1£ äì¹ø0®vÂE$ ¥4šD¼­ëºétÿ±(ò2M±ó^Û·Þøö»ï½¿¶¹õÒ /=}ºtpXÏg]»ØÜÜzÿã/'Óe”å%!˜†@Ðy€Rê"²0–.`„†àÕ0„àQ GCÁ{‡BÆÎ£DLHŒDD ƒ ÞÏç‹4ÏÓ,­ªj>Ÿ×u¿mtqÃBó9B€PŠPBXc#UÞ9›€¨CJIBP̹ŒFyñ-uÎc'£¥àÃñÑáе£jôÛ?}÷7ï3ÊÊ¢Jy¶6]yéåwGùÞ³'e.CYÆÇ„SÄþÿó÷ÑGŸìïê¾G{7/M7¶¶¿ûÍ7ç{GŸýÍ;?ºýFº1ž×5JIgŠ B¨(²øzô}ï½§”$IÒö³!pÎ*e‚€Æ„ðÎx ˆÆÑã€üÑñqUULPÎyì€ ‰œ=+Df­MþÞßÿý“{šºéDŒÆ“ù¬ÙZ_Ë =´vƒ4JIç¼Ñ˜R2_Ì"âøèDJÍ]ZšH9”U®½"4‰XÔÝïÒv \χÓãF*M)P„€1ÚÎë'Oö–)'9¥#Îùx4YY]%”"Bgœ“rCO(~n½ûHvN RÊÓÓSBHY–Ñi†®ëÆE>Uyžlnnlom½ôÊíéòÊWwîK¥ëù¢L1¯­_Úßß;88¬Š Bý Ò$Öéç-GìŤ”\PŒê²Vc¼µ„`Jpä€÷Yž­Û®‹D“4K‹²0Æìïïcb’`×ueYcRš Σ‰6ZI9™LFeU×­ÑÎZA¬¾iš:çžû:=÷Ê‹{ÚøÓM¿¶´rõö–ìšÉ÷H}òìÙ¢“JÙ5óÙé/~õ‹¦oOÎfã²X[^^/ò˜¥i5LT«‹úìôÔ¢µ¦¬oŒÊ´ðà˜`Õ$íãx®¬&}×cÁá“ãæ‹Ït 3ªDY$“Éxe²A‹4÷ÎÍNM°Õ¤:<9¬F£¤7…PyYÖ >¸\ðcPJ0Ï%]ÞûXD£X,b¢qK™8MÓ „¦Ÿ<ÓJ $„Ð4M]/º¶ÃFëºÞMÓ®m ÃçY½ÁF‹¢hÛö¹é{$ÈRJ1BY4J³Lk©•D˜½hK"6V‹¶íó<É‚a”RJ)ñ'Æw9çʲdŒALïÂ8Vñ4Mb­âœ_L!ê39;ÆN§‘LÔ4 çœq&ƒu.¼Ñ{ŸøÆ«¯îŸM?­¦Ìe¨ ‚ð¢i£e» )c\m^ÊÇyI¬-ïÀ¥eJçí­5 ¤käéÉ‚–E¶½rÜ.ÝrO)`âk ᎚ °w RÆrë‘8F)`ÊÛ–¸ïÌA{‚§ùte =“íw¿ÿêШÇŸ=z°7túîW'›[«uòþÕ«[W¯^Êó¼^´óz‘d<€Ç„ Œ<†‚õƲl²ùâ÷ÔPS̪¢N#üŸýóµÕy=ûíçŸ?z²÷äÉ3ïC*x>˳«×®,//yo Fƒw.ª\âAŒ7DH¨i¥TGÖ\D/:(Œ±¹¤R4Z&‰$MRƸHóñòr9'i’§ „œïãx}GnN$z_ðYMš¦ÁqÆòΧiŠIÇÖºh„"”„äÅÞ%â|qXŒsîsóŸù|&•}óŒÕ„`!¸ó¥YbŒ.Š<"ÏJ©ÓÓÓ¾ïcØâòò2`¨û~V×›[›¿÷ã}uç®7öá×¾þì«~ýÁ;ó÷_|üÅÙáI}2c„­L§‘Ô…PÀ8`¤ìÚ¶ÖÃ'|º4Ör8<ï}š¦]×sΗ––²,sΣãQ6ÖYk¤Ô€ çÉÐ÷m³†Ž1’2ŽPPRÒhJãbii”%œBÎzäÓ<£ºR*"hEý.Qj@yç1ÆœS È(¥¤ }D![ÜH) ¡Êš!8­Hcˆ´À4Mó9;™ÍÏf†’ÕÝ|2J²dyi’$bïéç„ ¼ºº"ûê˯T/ü“ŸôÌ’Q"û.E;Ô7€˜·Ki/¥:&wÈ8?(ªèeÄáÌG<$6èñõÞ+¥!gÏ×1ñFÔieu}Þ´I"0cŒ0 êë»÷ü»?ÙÚX/'YÞuN‹Ùüßþ›¿úÿûŸ¹P`, „.èt:¾õÂÍ,]×”e)¥$˜ ÁrÞjçuÛΧKcˆKC„hZò²˜ÎŽÕ?ÆÙ£”rÎç^}õåõµ±ì›˜eé8ç8c@ Š{] á IDATÁ0¥QÞ#¥4D(e •6B×JÉ®kÛˆù¿ôò‹}×-sipV$tƒ5a}upVª`Ê™ƒ€¼C˜@ì½µ(xŒœC€¥<®[BðÄ„@)ÃSÑ7˜Q‡œ6Æ!ŸçIwÖ2Ƭ3Î:kÝ…¦š¦J·¨ œõ}¯0Æ‹Ù<„@§8 `œ±§¤o[Œ pNÆ£B$,泃gûÖc&¸^´OýÞxT%Î,—ºÚô] ¡LÑTd/îl0žÏ¥qivÔvwŸ>~úxïé£Ç¡y]ŒFåøËO !G‡‡ªï’'¡G~ëöí«»»,á!„B´KâŒw}o¬ÕÆ`”&<Ú|0&"8_9¥ŒÀ™¬à] LŒ¶ÖY¥4"a”c¬5€1B0.}ÙsUÚžô³Sõ¿ýÉÿurzäÄÿÇÔ{Y–¥çaÇŸsÍó/}e–类ªvÓÝèaf0„ Ri@PDh%-Ä1ÒF mR„‚ŠŠÐF\H+ †ÀÀ 1ƒÁÌ´¯î®®êòi+Ýó×´8™…É]ef½Ì¼ïÞÿüÿ÷F¶2òþÛ¯}÷[o-Äô›ïýÇïoÿ›ÿï‡ßÿÁG'•ÕP5º,N¤²7^½´¼Ü×ÒÌ)F“ÐBJJ“^–QÏ)dÞï<év»‡‡'''§Ö¸8Ȱ€…­Ö©¬s!ª´ñÚä )ÍééXk¼ÒZ/-woÝy«Ûïžž»:ÕÚ’æ §^ÖÒ¹àÜ´YE«-åd®šJ‚SU7cæ¡N›úYÌ]¹ÿ~¿¿„‘X,J%õ‹ƒ#LèÖ…‹J5­V—sF(;ïµV@ãUQUY‚8ã­% òâ½ñ2Œñ,®¾€Cøl»æ½ŒFcƘ1:I’¨ÉñÞ3F0†œóˆ¹ÆŠ‘TBH·Û­ëš’eižç”<`0Ìf‹‚±Ahm¨ªZkmmBÈFözÝ«—.·’ìpïèg}òÿüÉêpàµ]_Zù…o¼}åÒF*h;ÏÖûÝãz– =óPŠr !iåù³‡g“)‡˜aÊÒvg°ä èwÒ«—7DJ!pÖYç-¦Ô”åª*›¦ÑÚ@ˆ2!£ÖšVž1NdCÒ4êýµÎZã¬ÁBâpür»Ñ«ºª B‘aï}»ÝN’Ä:ˆ6ÎXe~¯?¸ Eºxã­Õµ ÷àéƒwNGîx–>"ä³O>ûÑOö~é½×Þ|ëÆ¯¬µÇ“£ÁÒI&/˜kŒÇZZJ“@Åèx>Ì Ñkºk«CüÙýoÿëÿùâ`>x±G€À•¥ú½ßû½õ }„}„~âhñsç¬÷Aˆ‘RžžŽ[­–Ö&M³V«a°V;ç”Ö¢N»ÿç?øÑètF)ËRØëŠn¯w||úÙ§w•2UÙ@ˆÒ4G”t½ï|û[ûû»¯ß¹@pÆÅIÖxWV‹¦ª1ÆAB`äÞGo[kmžçqbˆð ZUUœ0$@clÓ¨¦‘ƒN§Ã÷>&4œù.¦³Á„sÎC=#ŽS–% KE”ÍQF € k½”R› =Ε2‰H­5J©¥¥¥L$&.’ª¬¿øòÞd<Áa„¤‘Ê4ΣõòÊÒòêÊÚúêòêª1ºœÎÎvoF„;YN#ªºi´Êº¹Ç ig4åL$¢Å¢<:•¥ê÷zˆÆXpŽðÁ‚:¡¼œqk]]ËØ¶©¦Î²ì%»7œÜyïÁa=W)ûx×:çEŒñ¢h¦“âøèd{{{2™L&ã7/ÿæ¿ÿ­¥¾]œ<^ŸŒÍGŸ?;¶›7nÍ«…š¾ûí;W^é=yþÕ¢°ßyÿï=ø|ûé㯷..h=}¾»{¬4RÚsž!†êz‘µÒéhJF£‘óNkí]„_|¾Ýn¯­­q¬; $¤ÆXiœƒRg÷!™BŒ)ÆX)圉«Zç}Ó¨g϶Ӥ•çcÌ$„Yž>ÙÎóc¦iTš¦1¶ÓîÊF:g¤¬…àE,‚²û쨩ªããF6­nki08~ñ¢•Ša·×J“v«uùêåk¯ìí€1 ÖÀét¾»½r2ÁŒ5R_¾r O Æb‚Z7Ƙv»“ç‰÷¡ªj¥$¥”ž›áÜç!’¡üÏy>ÄÆ3'Ïsï½ 6_ÕÑqqéÊõk×o7|úä郇÷ÿ‡ÿñ_\ßêüö¯¿÷ú ³þá¯þíoÞ}zð/ÿüÇ‹Ê^¼pû“/vôÑg½a&þ“ï_Ðôɳ'ƒAwëúÊ«w®Xíî~zïÃîVr@‚<¢ `JîÝ»²VE…De}óÆc5±0Ê‹ã»!LÓ´˜/€Æ[kmSK¥T–e‹ÅBˆ”1Àa !ÆÙöÞ×;ÛûíÎÀÖ¶“'‚÷¤”ÎùªlYG/LX·×_Y^¡„¶ÒV]×Q³†‚à½1u]"•÷BˆàFg:žxúcbÏ/(@$ŒPù- gUDÈ)a2€¦©¬% Æ(çÌyWU…Ö:ËRïudâÆå~,#Ï«‘’Ì 2‰ ”ÒZ'Dâ¬#„¤I<4Æ£CðKKÃE1ƒ. ‡íÕ•nš!HQ¥4øBF³Û×.ܼ²¥,˲Ž5`:](©Ë¢:>>)Ê¢Ýk;gdSïpΘÑxüÑ'ŸF¯n®É²I²Î|ÖìžÎ& ÆÜy7™Î6”†Áb,áï­u66÷UUƾE'T#S,v¨ñu¼k=gLþóÀߺi(£‹E)eLxªªPjL‚ݸµúλWMÑ|ñÉÝÿ÷÷?Ì\¼˜¿û.¾x!ùïÿÉ÷NŽË¿üúó{³ºNæ£üH«Zíä]âÚôÏ>ù)ø™_vn\Û¼zeëÛï¿¡µ½ÿpûÓ»Of Àï¾ûí“ÓÃñ䨬F;ï0‚´Õw^¿ÆS @@"œµÎšàl‡`´ŠÁíMS‡VWWª¦Bå­ç­øàŒQK+âZÌ#LC«Åòœ w¶ŸcB‹R6:Mrk|U–‚‘A¿ï_Y^WR{Œ1Îj=!BpmD1òKk“Î9¯ª*rg#PMÄa@ÀCï‚Ñ!‚×JBèô\pJ1¥$Ž€‚(X•%%„Q Þc„¼sFëA¿#IB€Îk½RÑsÃim«Z…€ Â#Ê1aâ€HSABÐuÝ”e°>i1/F£y§³”å}PQWªÔš¤sƒAº¾Ö»°1\¿ÐïöøÊrëÝwîl®V—;ëKÝ]ýag¸:tÞ¬—›¢žŽæ@!˜1%‚®•§!8cÑ% Œ¢ g’$‚6:xÏ9E"L¢¥µˆ ‘h€óÖZ@€ûœw!ˆpÓ( ! BÔËX„\ÂAvÐK/]Ý꯭֞m¿(¿ørçèpæÊfØo¿{§ÝnNfÇÇÓº6&€RJG0âc>x„`ˆÎ„p.&“‰T:IÒÙ|Ž€œBUUE½¸¹µ¾¶žç¹7ªXÌæóE]׌¥EÇtI)í÷ûÝn7_EdNXk"-ÍZ„H’¤(Š8ü\c ^bjÖÚ²,“$‰|—(hÁçyØÞ9„ çÌ{̲VQq9_Ê{Ouε[­XfŒ1RJÎy¯×‹$Ú—ëe„Ðy,•R½¥ŒqÎ)¥Æèº©!Ñd³•å„<φ½e-íÿÑ¿ûüó˜2ˆyÞno^\¿|escceu­ßj§³ÙÄZ/•ö®nÐ\é…±&ÍÒ£ã£p4Ë…zÎOsÈX¸|u£µÜjYQÕå¥ËËe£å|iå‚wîêÕ­étÚ4u#›F‚H‹&ÿÝN7.í"Xk…1á<5Æ8ïìK·=â¶Ùû€EÉ)DÄZ'e‰04ML„h·s,†"/³é =àé´ÞÙ+ö÷O|õìÊåÁ+7ïûÃ?ýA¥qwRme<ÄCøèy¹wð… v}}pùâ €|ôá'81¡Ô;œ×ÞüÒ/ý¢ MðÁ¯¤ÔZcˆ(!qÜvz諸†. —@ì&I)uà\Á9Fy§Ó«ëzi8¨›f:1Æ“ÉBiÔçÒÍà#2šÐD™aä˜FfóYÜa7µjjåœu6heV†®_¹ê:z±»¶ÚG7zv<=öPš1–nl,aD«ªêtÚÎ[J±1®*å|QÍ Dð«¯Þ<|q0d]ãmcNG³éiÑJ‡ŒW7$8†Sãµs#Æ9Àˆ`L|ŒX‡aŒ%ÅÎþåmŸ4"`£EÅËC&–XŒ©‰ÃÂÞ‘àI¤tㆠ Å¼tÎæ³¢ijÆÈd¶xôxû`â zƒþòÑáˆÓÎädÆþâä`pÈ0qYFœ]‡F#µ4Lþñ?ú­o¼yëûö_=xâQI©¦žP~õÆÛJÕŒQÎxQ”¡ïýÎo‹JUƒ³:䀳ý BÂcl0DH+öîñùŒXcMQJ)c¬” „Ð?ŸÁƒbºŸNÇãÉx¼¿·¯E„fínÖê –Q̤Î8Ù˜²,´– ˜5g KIš¢4E>Ô+KíµÞõ«®]^_Ìt0—¯^5Z3ÕÚ*œxÿšø¬Õ¸ès‹e|,£dòL«ãCÜ«ÇÃ$~OXã(¥F[—·x´¶ak¼Ñ¶,ª²¬µ2g1nŒH)BÏž½5B0YÌÖÔ[[«iÊò,Ž”¬¼wÂ4É1'Ö„²(ªbÒëeßøÆë·n]wV5Mé½sFQŒY‘FJI!&$M³µõÕ^¯“ç´ªf墄à,Ï KSÎyÑ!‚ŒsJï=&!W—ÂEQ`Bg!nye‰s>:9Ř(iŽ^œjåòV{0 Îú¢(x"–V†"£Ñ±”5þòåËy+UªidUW!8mÌ, µ­µZk)%BQŒ Œ±¢(Å»³¨Æ8!ø$F>„¦iâ9NùY.R<øBQ¬ëœC"ãïLLzŽÕšR—ÒMS[«ÛíÂàœ‹T]©eÓ¨ºj¤”RªV«ÓëeΆà};O0!ØX¥½±À Q@Pie¼7>‚…YžPŠ½×˜€ÂÓí݃|§Í86Åh¬ô 4››Ë+ÝÎÁÞáèøteeC+¸·j<ÜÙ{zåÊæ¯^ÏÚ©žtS‰„¼zëÊÆ…åïüâÛ÷<ýçÿûÿEâï ÁqÎúý>„ ª*!„1ÈØèXg£Û[<7c¼j!„0›ÍÏ”ÙZgpkÌx<-å|^Tumƒ§œÛà±lò, e¿ÝM(·ÚšZÇí¼!˜Ró¸bŒG”]Äö‰3 þÜìŽH-eU6eY¦y†DQšx@!]Wƒ<åZÉàý¢0˜`­å×öýƒƒÃçŸc@$ª-T4g”¦ž>kµóׯ^½rñÍ×_»ÿñ³§»y+ë­7žï=vÁŽ'“þõÇ ¡­‹k››['§G“ñ,o¥Åbôæk¯p·³¹!„ kï¿ÿžHư®jŒB8’”Ïç}äý™{×¹vÌÇp½,Ë>û쳦iÒôÌFÀX?Oã¦îððpÿàp2›UuXY^Y,v{muµßëç_ž<~ô¤iÔÍ7b:EðA+!nµÛY–/{]ì½üY¤Q»ÝîÖUSÕbQ:çA@Þù@ WˆÝs¬ÄùšÏfG‡‡QÈkL .ËR)©”Š'¡16&Þ"„ã õ1A1­D+1Y,вªãÝKxd.O&“oû/]¼Ð4•’ ÌyãœAÈ;§CYÆÓ”•ª‹rn¬bœh#•lŒµI’†Ãh ÝïõV–W67.|÷Û¿´¹º1OkK$¡#¼÷^;[+¥µÁˆÄxOJ¹µîùóÑh÷c1-:žN/‹+¥T*Å*­½Ji©´sáls‰°÷Á… ŒuxŒTðAòZɚ̦êE¹ýõãâxlŠ&Ûi·<ú€ þÕW¯_\_OþëŸþhÿ`ÿæ«7ßxóñttï«Ï¿ñΛ¯¿vSi€2<}º³»s°±¾±ººrr|ÜÎ2„á¿þƒ¿ „ˆ÷ÞZ•ebmmeQL(ÃÑ(‰=Mœ9œ7œs¥$ 6g¢4Íc”ò›7o6MッÆ»œ`ÜjᢘkÝ$I2 `@Åb¡~òäI«Õêözk˜Ð²l¢ÿ„pccíà`ey „PW B!Ïó<Ïcãñ8Þ @B­UÜZEíktN%£ã涪*aìJ)¥„ÒÁ`àÏÏ„—MQZk„`Üå¤iÂ!p.(å!ÀŸ{DÏ<¢gŽ=KAñõc;kØ×_M rCHöwÇIZrΉàÆ8Y0€$I’$O‹âžRAæ qÆ„ÖY€‘ªç¬àB)5OŒR0)¥ñÖXë­aL†’¨SH’dwww1/Ò4UR‚Î|;ÎW!/g)F™”Ú+µbŸ/¥ZÕóù4Ïc¸ij)¥"K³ú휋r¼ØÄâJŠs¼Q²,ív;NBPE4¡ˆgócišF»àhŽ÷RQÛ’¦‘‰HcMö”2£MôÓB@´RZŸÙF4£id$ƒ¼$ƒF8Lˆ$8ÀiÒíò¼!‰bŠˆÿbHA@ÎŒY’d„0Þ§”ª«ªªªª©¥R³É”‚!ZÌçVÚÁp˜ôZ#!„iš`†c òÎ0FYžµ;í^·›å)F@Ž_ê|^þžÁ 1BL³ÖJ©¬sÆ€jì}pqÝê‚3ŽŒ\ Ñ”0Œƒ2ÌÒ7)üt^¥¾ùúŽP3/8ÄÃNgÐí^X[MS¾½û|^U[¯lnm5²ÙÝÝUR:ëV—WÖ×..¦“ÑèôäÅÁÁ'Ÿ|v|:ÚÙ;¨¥æYöý?ýK|ûÕw¬5ÆèK—6oݺÉ‚§4n”8  7vÎBc ‰–‘ÑS3O)ÓZ+Õ`Œ ÂÇÇ£GŸ4R}uï¾ÑV©f1ŸëJ¢£QmQW~/ÉÒ¢i”Õ”PF0g¸ÛÍ KK}­TUUÎZï½u–Òëõ¦³i¤óÅ"Úév§Îe„s† Âà•–uÝDrjädEÌ+:Â($úy´õ -&Tkˆ#³1Æh¨ë:šáĨ1ŒFØûPe"!"¾¶X,bÓ2›Mµ*{½V·Û Á[c¸`”R!¨” %XpMËŒÑZ+kµRÒ9c´–Rj£÷J+ï|p#="éôú(c)UÕØCŒ0„B'Cèƨ˜ZÍÐUl÷_^г]q @ ó¾‘ªnj¥Œ Ê }”ñˆÚz‚qrQíìññ§ÆšA»Ë I(ƒ!`óNVéªÒõF°œw׺ƒKËkË'¸7ìÝzó¶Ãèt<ôèiQV«+«[6 ¦£“Óö±QºÓ¢ËKŒáÉñÉ¢¨Zþ´¨÷F‡G£Çã«7nK©§ÓÙ•+oßy%M¢%¯‡„X½´ÑZik,£¼ªj Qp!€@0Á(~ƒ‘²©êºnjFi]TÏž<;=<íµ:V›nÞÖMã”ÞܼðÆ7ÞX]_.ÊY¿ßγ$M8£”b-挩“„#Ö×× £´µŽ‹B ´ôÞRFŒ5J©wN+ SB"iðì=°ÞkŒfŒ'IÃ#m „Ðï÷âæ¦®km4B@ £‘˜Ñ”s–qš$"@)M³´ÕÊ“$‰n|Œ¥Rv«ªÊèdëZk®j9žL[íÖÅ ËKƒŽµV*É8kd€Ö¦ A¼>ˆ°2ã¼ÁÌ(å1ЇSšn´!*u20¨ëXO!8gðˆ@B–§ÎÛ¢X8gʼnà¥tÜwDØ.n[Œ1F[Ê’(تªÚ8 0jcµ1eUkµuÀŒ‹ŒÐHn_º¼œ·8¥?þÑöh"Ò~µØaÙZoykîù×OTÕtò¼Ói —†—®_9þê§?ë÷‡ï¾ónžfÏŸ<ÛÙÙ Á·²ü7^õæ+“ÉÑóç­³KËKi–cÂ1á2»;³é¯n\ªªxëöÍ«×6µ®eÓ,Õ¢¨§Aï=FØZ{z22Ú€eÝP‚£Õ–³Î{ÒÖ4M ÀÍ&ÓÑéØH£¤$c×–†ËÃ¥v¯M’MU• ŠáåK›i"‚óÓñD6 ¡”Q–¥9g|Q”²‘ÎZJI’d˜0|ÎZ£TùŒ„(@CÇ8¿€³^똲Àã=ú’ÿ†1Îó4ÍS.xÞʹà"˜â(¥"ÆàYƦó!d¬=-A8:km­µÃét4ŸOWV–½Álæ¦ÏŠªªŸ©¢Z[mœw8ÐÍÚËÃeFÅ`0(÷«ÑñË—n_¹”@ôbwïñ“íéÂB’]ºyY' qùö;w–Ö–_¼ØÛyþôêæÅ¦œÝ¹}ëÎíÛ³Élûùv·Û¹~ãzÖÊööŸ>{þÑ'_>yºW–VI4U£ÓbãÂÅ~¿‡ax¶ó¯_¸\UeY¯Þ¼þê­kÁÎ!@dœÔZɦ>>>:8Ø \º´E)¡SB!BÞûºif³™1aL1Ö­_kc0†„ v·•$´‘Õt<ŸœVóƒ°•¦‹ÙdmcC{G…@DX0„Œ‚ƒ÷eQ.楔ÊÛî´"Ä›$Išæ޳š?7aç2MÓŒFãù|Gã—fBðØ6Dba/1c_×uYT‹YÕï†Ãa¤ùµÂPú7&º1{Wˆ4I²²¬½ ÎB¹ÖÖ{£ˆŠr¾±±n|cCÉ8M“ÞéQóúá'Ÿ<˜/ª$£ýaæA  =9þõï>¼x¸_ËÆ&Dj]­gËˢ`BY–çYž! #_1œù7ï¼”2^ˆDð¥ä?.5âêØ;o?;ˆ0ACˆ@ÖúkH¥µÖJj!ãY–·Ó¥dYBP7Öz BàLÚe½·qJ5ÖFô)Öκ®éyF@|;›FÆ}wÜìÇ.3ê¹§UUáŸËxŽ.–@àÁl6uÖHÕ`ŒE"ð±ë=XŒÖZ­ cŒö|‚4K³US3*VW.xÜ»÷õ½/•¬G£“O?»‡ôE±xüèþÑÁþl<Ûß=zòìÙ›o¾–¤¬i*Bi«Õö ‘Z0!¡ª.뺉©Ö†RB´Dö„R&˜?¶VãÓZ[ë8S®BC€!çüÙEöA[×µó!äC0Æ‚(a¢XÔ‹ùáþ†qrtzôl§pÎ&-'ø´,D*0…¬†+ƒ÷Þ{çêõ+KõÓãñ“'ۇǣy©æµª`­IsΘw¡,‹ù x×JäAÎÄÉ‹Cg]’¤i’”‘Ë+½7Þz%I½µÕ‡ßÇ/_g”½õÖ[›[ëj‚R¦µƒÈÇž,KÊhÓÔi"(%JJθRÚ:—eY–e!c-!äÉÓ§Ö¸D$y«EOðkë+W®lYoªj‘0º4èQŒ)[oud@á0Í‚†qÜíæY–diÀ˜ ˆœõÎ;!8cÑ®#8ç@12r±c™‰UUI)££S–eãh²òr_E Á¿drD¼)"_Ý^§Ón÷]Bš&cŒ¥I r2Ê9OâõÞ{oðÂxFà›¦)ÊÒ{_Õ²(ª‹_éw.Î&cg_üÊß¹úOÿÙ?xãUÝÎÎh{Þ,ܵË+ßû‡ßù¯ÿÙßÿ»¿ñÕƒ¯¶—ëÖ/gYf–ÒR*†ÃÕÉxªµÍ£Ñ8øI´!’ˆð#„Z­v’&J«(Ëy©M!BBPJGªn¤Ëi­ó!€­÷ !H¥µ”P„AXÕÕò »¹>¼¸µrõê…­Ëk™Ï=¸·ûÂQRãá­VÞëð”ydB0ƒÎð•ë×·¶¶Ê²~ôøé‹“±òP¾hš^¯×ê´˜ Å|v´¿­ëñ´K’þòÇ>®ËºÕʺ½Oq¯Ÿ/-w4ÎÚ>~€/_}¥Ûé^¹z¹×kAè¢ÌÚ¯´)WR½xq4Î0BI’$ sÎ. cýÉÉÈ9Ÿ¦‰÷TÕÕ¢\Ì3o\Y”κÀññq¯ÛÛÝݾ|ùÒh|b´J½wÖ"L(Í HÓv[†À§i°Æ!„¶Æ8ŒqÖÊ:¶³Ž³#Bp ¶‹$CJ©÷1÷R1‚(Î9.Æ@ä}¨ª¦(J‚wsž&)ÂØ‡è“‚<ðŒ2g xµYÖšápðæ›¯=yü Å›k¯ÝÚH¹+¦3è‰sîèä)ãòÛßú…vFövÏ&SÙxcÐtVäYZU ­4Ř3Ì)I¾4\ÛÝÛ—J!‚0B0ÀØLËF!DZ­&€ Ä‹nNÑ®"î)¥œqˆ°±Nk…0ôÞ9ïŒ6±¦j­Ê²Ä„PÊ¢ºµ6 À„´[].h»­¬.Yg%!RVõ>ïí×W––Ÿ<Ù½ÿ`ûtÒÌK9-м“êPo|ðålоÐë¦>`)Ü¿·;š}ýøñÁÁgäæ+×^¿yskim÷á3haÖéåI&‹E]IšA.´Á¶À/ïŽ_ëíµÕÕáÒBßÔ•Ñ&ºD*­Š²‘ŸNÊÓÓ1Bai©SWE§ÓÏæ”%˜k5Â0Íg‰s`8èõrž§Ü=¥’˜ ¬%jY#)F)å“àŒ£éU<¾âÜj­Ã8‚Y!oã!õ çÅÞ{ïƒÑ&­[cyÖÚ`LeþÌ’"Œ•ÖJëgƒÀÚ`WÚjcÒ,[[[›Ï§J6ùL€µåÁáÁÁçŸ}îlÀ”>zòtoï¤/?üÁ‡e._¹õäéQÞ^9>^ìîŽ?üàÓËW–þÖû¯./w/]ºòkç?xöôôþíï}¹}|TV ‡0iµ…G’pïƒCŒqR)ç\ärxïaÌVÈ µÞŒ5Œccµu@d¬¯B ”aÄq>J)&0ž••G qv[Lf³ñõë—SA%(x‚àb²(i+'B$I†1A(`xf›­hŽÒ4µw6ö^”¥ÂPpÍí£Ä" öÛí¶Ö:×§?[EwËH† !ôz=ç\mIÐßÇ—þñ0BƒòTø¸ñ±6#r@Rjë}T&¹à•Ò§ã1€hgwÏZÀìã?¾ouíÊ7ߟ úo~ÿ¯]ùæ?yz÷‹‡ecnÜ|ó•o”ÏŸŸìOžmïÞyãÕ;o\ÌÛl¾Ÿ|rÿƒŸÝÿÍßüÞppitÚL'êød"U½¼6H2J9Á”;O•qÆÆ0>–J)Œ‰kâÀ8LPü_AJ0Ádwg÷þ½¯ö÷öÿꇟ~õåÌXˆ0èö“µAÖfÖÉõÕû/ÆûãçO÷­4A6åè”Ó¥.C@*Uv:ÃõµÕ~¿g=Z4¶vð«íg#“•Í2cñ ·¾¶tyó´^ÌËÂË&Oا÷îâßþÞ?ì÷ú!„B@)QJÊF2Æ•4Jéà­¸×Íú½ ¸ÓéŠTä­œP‚&”K©Fãé—_~U–•‘ªXÔóY£¤¯j³˜Wvg:™ Æ–†½N–#¬Y·§&Ldi–§i*8Á!ˆ12Zk%VJʺªœsœ3Æ&„`콃„à ÁI’0΢5®µÖÑ«xF¬1–ÌÈ%ˆ÷bìV£X%2ÿã7w:a” !~^Hè½çœ`³Zc¬6Ö:^,ªª‘ÎÃZIed’Š~¿‹8º½·³z2>|qä‘:üÿíKsW†Ïµ{¦/Ó=3dK¶%Ù‰ãÈ1ØRáq•evT¹*YQü¦—5Å* ªH\QìIJ®3ͽ§§ûtŸ+‹cvüœ_Ћ®ï|çûÞ÷yŸî=~z°7™L´•Š×h4×®¬Þ¹³%Ÿ±<™'¬˜W…©ø,Ÿ’¤ªP"+Ea°”)c\gÄRIq]ì¸Aé‡ÄwYžÆ¡ieù/âŸÝ`”†-2Rn½8×q•”év;¾´Úv(q°ëЊ±æR©‹¢ÌY‘βªïŸv{f3ôƒF¼øM©/µC]Š Ðj±µÐnÕ’EÎ+U* ãj„~€! Úà%‡RÎK¥¤C©1ÚÒŠ ‚ÿ5aK!„ÖV ¡|nC¥”RÇqv€êû¾ÅYs9On¶…Óœp^ì`ía6›Ù*ûb^ûÂþZ¥šRcê8.¡„Xk-„¬V}êV1BøÅ‹ËaP£ˆê+kW|/ìœt?ÙŒ:n&Étggg4y^Õ÷<%¥Åy]·BÑJÛU*—¸9•R ®”RJj„`z9˵ÑyžQ‡¡o33óùäÉ®^]yðà½õKÑK—7××^b…üöw_/d’—sB%Üþm§sròÆ7üÎí¼µµØögSÆ2ùòæÖÕõ .r!ÆV§b­¶/§!)y–ÍÑŒY–[.´1Bð¹jÿ`¯¥”œ1æ~k±•å´×t;ýéxÆòœ`tucíµ×n ÏŽ._ô¶n\ŸM¦³qVdj>Ëý³q2¬ø$Š‚þ8) >è ¾øò`’–€•úrfRâºNÕA £ªAΩ.¡i? 4†LpB‰ä|ØïK)ó²ø×§ðý?ϲyYæ”`סÀ¥¤¿#l<Ïw]‡DÄB¢Ùœqi8B `7FÏÒiYäq-@H£)%h%ÙÚÚÅ$9S2‡ºœ'SŠßæŒLÍß«J^ÖB¯Q¯aÑótñªJ14ÀmÓ£(Jg³•• y–c(%©lì˜Â ñzc/ndÉ©œsBˆµPÛ×çÜó<<:::JÓÔ¬=íöóyq÷[wšzž¥½³“íÏ:‡'m¿N“õµ‹—V•R1ƒŒ”r}eã“¿þ}:•£‰ô“$™gY>™N»ýAž³¨â­´Û( …WÁBA "Äq ¦0ÉÒÉt‰ƒ( ÂBˆt^ììì@ðõùúü¿F«ïßðá/ßïõº¿ÿíGüçd:Zãññ0ªÃ¾}7Œ«yÁOO§ÓiX«K®€Aky÷Ùñq·ò\d´äBønu}©µyýÊòÊBX¤ÖýÑtÎçØ!n»U›å³ÓA_H½7›a¤”J²LCø›~÷u‚ìz¥µÂ±IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/PostGIS_logo.png0000644000000000000000000003304511722777314021574 0ustar rootroot‰PNG  IHDRðð ‹ PLTE!1éîôg‡²GdÃÁÄ5nLBRsÄãП³Î„’¬[oŽ9Hd‹Œ{|‹BBCååæ‚‰”fffQk“¤§´¶¼ÅÿÿÿÏÔØdjt):<~ˆ•u~TL`ž¥²cbs•›¦œ¤®¸¾Ì\i{ÅÊÏDGKæìòÕÞé+A=kq{d ~õõõ­­µ\Sd333…•¤{»•µµµ‰Æ¡¼½¾{{{×××ÇÌ×*Q;SasJXlQKTb~¦­¾Õàãæ{„”coƒÂœ)1@­­­r{ŒTx¨¡Æ±{—¼¥¬µAARHq_¦ÆJLa6:Kßßßstu¯³µÍÎÖæçí\bjÐÕÝSžr‹šIIYcdxp¤ˆP]qïïïZdsRTh–»¦ÀÅÒ4@Ueqƒ³¸Â#&8™™™á“ÞÁJ¢¨,ùsI`Ø U 2ê]£ø\˜Ž H§#B†/„ àÚf€}Ðx*°f€QÂ'›ãw‘;àÝáâ—Vˆª`Ñ„—Èw Òz=É6;ˆ£çó¶[X¥XríRfx¸§§}TU²¡EÃõTCŸð3Àr;bËýî üt>k%]: •ah££…<‹Êî!Õ¨­Ó>:Ú£(öÜ#:Èøel€jBt"øM]c™–öB`Áue“`+ ½ÀÎK Oz©ª]ùfKI$lkiV(b튞Š*Œ*¸Ï±à uNJX‹–™#õÐežðZ„š ,'"ů¯#¢ùNµ#âmPšÝ'*õôHíK‡V¯Ì¸(]LPXÁá"†õz«Y|@4XQž*!-p.3hI¸` DZvÔ0¬døÚ]4ÉšsT«¾Rå“¥LhUAÆ©ph¦ÙZ`!a±$ðZ½ôRG&¾¥ ,IÄÁúíÓKí¸ àHºI)¨pšœ…癹ïbç Þbéµà¼ˆ§**ÄGãy«eÉç{i,Π8ž Ýä\5»î8ÿ±Û6½òÊ+SÇ/rpÙ° j‹Z`7UóAš%ùD-p[…ñVJêˆC̆¥4 Ú¼¥®8OzªFÂq›ÃItD~ö½ÇG.\¸ðÄß –kùرèüCÓ-‡¢dFG{ðm¼ÿ(8Ì<:¶´ ä%@€s[íˈøaXª&¾§=µÔŽóÜó| °¨`§Gœ~|ë·¿ð»#67²£µµõ“Ÿüšº‹ÔXSUì8I÷‘Ÿ|&ü ƒG˜P¿Èc_4l‘,IÒÒ¼Øia7UQé1¤«,¹ï|/UÌ´Þ®¨ôíO<ñ¿¾}ÕÇ?¾ÕL}ðƒ¼úêOþÓþfâ‰ÕòÛ³a²Ù,É“PÙ¾zpVO>"É1Iô•£àh{HâÌ£áå‚-q&=ã¥ù<è ;',-˜” l pçðpY6 _y≿bßoít?8ÙØØ8ùÁ¶þÓ¾«\è­’ï(I݉ºà|²c‘h‹‹’,`•?Š5ï›§—Á q{• GGöw˜Œ¼B aVë=$eY54ÔÃwÝõWÒßÜO7pW7†mòêOþÆý_ú«ÛŠ•]RibDY 2 Ñ+À~–bIzŽ«¾p3 ÜBá–¥– ˆÓ f= tÐ,¥ç¢1m~X"õd5°¯†¥Õ®á½ógÿþ±Oühä¿é‰§µøƒ­ŸüÑw?ûÞ ‡Ê»X*6(À’dÄBá-ª2Z$|YØÏ’kÌfU8];Ö-èYuYeKÁ,pœNà~%…-›óßqžÓ +î*àÍ=ÄÁ€’<öñ ïùüÿþï\øîÈþGäög«DüÙßþ«'²á>…°°6>µnúLïp¦ìOœÃôð!mY6K§FI‰F-3Ÿ#ÕR°¾§ý,ñ Hê‘Õëy&¼UÀžj—ŒJÒºÿ×øûßÛÿÙ:ò‡_Ñ>\VêéèôoÿJÓ…ðDíñ¾-ìì‘#‘*d¾,[Ø5°BüžÕ_Nk)»ú™­u¢9A˜1øJ{°H¿-xÔHõH$­„#‘òP¾ðg>øý·½íïüòWô¯½¾±¢Óÿ„ßûÐròQR·£ÑÅ„¥òØé×yRËH–f€¡f»gs¡œ%â°Ej%î/Ìm$ÀºåV”:„yû¡—†ÿìÃß|Ûïüæüí/¥µacE­XÂ?ù㿼 ï˜%gf/LnªS7+„×»,'«%ÌV­f&CÂÊb·À²‰äB¦¼P. =­ôàÊ;a£°Zƒcg$’—ßõãßúço~óûüå?ý¯DoÛXmÿòÞOÝFbÓ(î!p¾Ê"‰JØf;4JÁÙ5. —l‘!>TcÒ(I]Ø,KÌîµæ÷øq‡NTnØàk£2áèw×±ž÷ƒ ñ—ÿö—ÿã+_©h4xi ü«àÍ ôl9ÓÒ¶00¹¢`^AÄt–Yu·àáŠ÷k-^ÏX$Ù!µT™¥%ó$Äc:a„ ä«vØW‰;=ôâµ@Ä@ü‡ç/‰Ã¿ý“{ï§¾xŽ‚ —%åî¸\• #p„ƒÐÓ-8½ãâRAda ægÆæºëù^š-ÛI‘±%õXå:ó¡ýÒ÷þõÁóûØŠ¿ü·úì½8Ó¹%ðêÝ_| /!A†-Hö‘x’š#T’b!¾Æ†I†)xüd·R%íl±ÂçÓ7çY*<3àÊϱªré²6l˜ðZÒ03“Ý^uϱϼÿÁƒÛzÛoþã|ù÷¶æÊ¹ôwC¿ûå;ÉиÇ¡B;…Ò«§4Â!·Úi9™òy{ã µžrÙUÑÑ ;±þAÌQU¬î(ËÔÖ´ i¡0×'É9+&RUµvÕ=÷|ôg?ýéƒ bñoþßë?‰Ûoüèþ/}ó~ê‹Ç>ðPxAR˜é‘JÉRÚk‡lTR&PÕ–!”e±™;¶QâÃv¼ì‡Cç EmÝoÉûä`øÜ g `JÀæ¡fîQ¿F64»í÷0˜ñïþýã7 ýèþï~ +ô{ßýî—ï¹&öÒ ý%î¾,ÊôVÛ2N ÄavnµT |ϱ‡>ò ˜ñ7¿ýïûÿý÷ãB õòË÷üÅCås2 2Qþ‡øêžVIÁÔ·CàªVñ:óp…ª€‰£Y4/kk·ùpd%j"Å‚£–,Z«ô=÷üù§ÿáë?ùÉ¡î/}éKŸýìgÁ~‰;vë¯=TÙVx ;\Þè,±š ª[ˆeÇ,Lòùj`܉È_4• Öj8oí€Â‚¹4bþ(ñßù¹÷=øù‡Þð“MÞîþú׿Þûä×úÕwñ|ø'Uóynf” @£Ðû%f”U çSj€m 'Ó`Q 2 álâ,p€ÀE2ïÍÃ8Ê@œ©õûógÉÐÁbÀýÝ­XÆ÷|ïŸß÷¾/|\}Ãw}û=ŸÿüÞóžüàÓŸþô÷ ;IÖœUJȼvÊÊL¥«–-¬Øé!sP¤8 œx8<UL|âEJ K Gj·™oÃä@‹'î =ô³÷ÿç{~váÂ…oø§>øÓŸ¾ïÿ}ë[yË5·~ôª9åwÊêÍ âù«êœZòs$¬·—ÇP˃ËÃá!ªm˜ Ö‡ /EÕøýùõ0.Cæîº5$þ¥ßúñèè?õî¿ü6À¾îuÿðßúý|äÑ oüÌ#ów’zÈ 'b‡+I€N Õã1Rv³*Z8¨vZµ0LÂ0þEÁKã°pü‘¿»§Ü~éå—_þâ½óÿð¯{Ý·€÷sŸ{ÇK·¾”˜¿.åÉ”gV© æª$?§jÇ¥…ž†ÐdõÌôÂCÌ“!1tQ` Ü>EùK¨4”“ÙE%?táÖ ñ±cÇúÏ?ý¹o‘öŸÿùèÏ~ü¡«Ú12Ê’˜“w*Àøà¢jì=>Ž£™¬U#s1ŒÓ>8D•„©Åãpù¬d(¨-8ÃàíïúL™˜èö±c÷üøÂ¿ÿûÿíŸûÜ£¾sACõI^ž¯$ŒIzm±ï&¬r½"õΕñp¸#¨rZ¨j\ºÍšÁ\¦|°‹†¥|X/ _×gdL˜oý—;?ý¹xàÑw¼åškî"‘gs¦UçìF‚Ç+?ZÅØ^;ÍäÃI퀕z‘^ L…‡¨H Gm|¥eà„”.е{íVx°D ËN §Z‹Ç÷½TA-ÿ¼çžÛÞÿè¼ã?û»«ÂUD´beÚ¡âlµD8ˆ0kL,&ÆsüÉšZFnÇ% Εh©q÷ÃXCÀïÍ“"°¢ÒÃ>bÕ¥j•1Ê…³j‡PJ<À}^X~éÎÞSÛîÞÞqá”C¼…{¥Äpš34¥GÉr‹q3ºå²ášŠLK D ª¢êZÉQHoðj{sL]Ð\21b¶x°rˆ2p;™æ‰‚dlNmv¸Þ„…Â53SÊ‹ãðxQ ñŸ”å‹% ?Þø³G}ô-w^s××ã`bp+*££)Ìe „Ì– ¢n88Áq&^ÑÃá ùÌgñ$Ühy‰ÑÙÙj)Ôþ °­>+â]6 g<^dj¯~¾J³xìbÀ@|¡lÇ„ø_n{˯¿ówþÅU•ax(æÃA<¾Kp©`%ªÂ«¥’åc•ÍFgºÂhÏ›šý¬êÀ8Lò™AÝvŸ ÂÍ˳7¤p€NÒsН€³Kƒ€.|ï/ÞXÖç¾ôë¿þkÿò¡—îšå±’égÉ…ƒtIƘª¨¼fœáf³Àñh:S^E3ﺟ‘0á©Hx8gRŽ»‰W úœKŸ\RÂÉ/eùÞª¶ùtwqß5ÄGßzç…;?ô™G®JTõäQ_-©2 !s´vÅN$™$Û„›æf?ÁÃR~Õg•C *U^º:ÓµH¿éªpø>¢„8/ Ï•pÁ²ðâÌäŧà¶›2êé}ìÎ\sͯýÉ#W=r¨f{9xrTÁÄá²2¸–ùcÄòú'ñ Öˬ?Zs]f©½€*Ÿ•%®´·”*š—¦|¬¼2C×2Ú"YT@ÖÄ„³c ÛªºÀâ`·%¡âvñ¸ª‰‰‰˜  Qˆ<ØPÁ+Ë!s(ãÝ{ºÍI ,kƒ1Êk“=t²ûxsۮηùÈ—úÖv Å €S±ÇeÙG±¬š›A«]zÇààzß(…\àÖëGKGˆ!ë&ÎÀ„R÷Á쉽Þ^oW[sàáûÙ¾5õÕ+YÅ™:Ȉ ¹Q—e ˰Žõ¹l ÑÂÑ£G!¹Ð4œ[b{!°ç€·Nui}º•¸.Ó¤ú÷!oïÞ¶ÎÎ]ž×¶³++ŠÙM²/amã7u3 g“›{µã€-ƒ˜]B³€*ͼ(²ÈÏ}â›vêzìh+i8ÝbV½k×®Îζ;¼½ÍO–$v<]þ5¬)p\/lÉ䞊†A|—㺆áÒ$Œ  wš¹gûþmÛɗ˜!YQ÷˜µwWg0ßÑܼ«ó=´›;Ö.8­p­eäÌT:™犗¨grÇpÝfZ Û@Ô`ÉѨ‡Eüð×ÿçËç7å"r¥…åÄA âñwÜqâÄ ÏÛµ·y ¿!@ƒËG¹4Àñøá¾I›ã8Hº –à! ÕTƒütÀ}…©38ï õ4g’ÈLRjRÉ×»ûö`÷”Rëå¼\¹yeîhGQ¿üµ"Ã0ùŒd+cv+Ed©TÂs¬N»9(4€û`äÔr*dÄc>æL##÷ wmbµcS=žÆsx“óɤ­(¢dKŒ¤(A`K¼(B„–$‰ 8îL?Våp ÿŒá¾z2„r‹¿ðå¬>pü…>;£$¥$4ꊱR^ʃ”{‡ÍJ ç`Öüñ 7Ý +C}aƒø5ü?¥_ÀñîîLžÁ_±mFb˜1Ió¢"ILÀImó`ÓIàm͵bÞÖVŒM8[1u+y#än=¹Ê³0õ–û{Á]e$Æ[fĤ$*ù¨5ùF`'cG1¦º:Uù)ãÁÌð%¦nMézªáè•×c1&ŸÏ€x¥d D›!ç%»‰Á—¸’thŸ–ºš4 EF­å²X§§SzÈ?¡¯àxdð@&N™ª¤$±V¹˜ƒ÷å`·—ªÌ5‘é Ã?±¤¡‘W½µU.®ò÷tëöÌ´ÔΡR¬8Ÿ—šÀ„%©© ‡e1/)™}ÅÜtç" &œYíõ«u|HÜÆÓÝ%àKæ%쯙’Tò¢”ÇOŸÞ=½¼¶£¸äŠ™Ë8nö©y‘Kꮪvr|ßä-Îuôw®Ápü*<ÙRž˜Ôމ‰ÞC…B2™ñ}{–àÕwvì4Øþ˜s%ïÂIµÈ¤ÓIFµÓ¢¢ªOnŠUnŸV½À¿ã±!‹FíøÎª«b€Ïô6%Uµ‰yFI‹…¤ÊŒêˆmn\¬¹C1Ú÷iÇ1¬þÁ+%ñ˜mS½ª’N§3v˘a2*Oyµ‹/Œß1´ m:´kœ bú•üðËì©3yH¯Å¤š±;HöíY7›¢ÈའЮ{|hUÇ.ëœÚg§›šÀ]åÅŒš,(%UJ*b†ËÛ] ñî;ˆg$ðüiÚŽÁÕ\`\àhX.8TššTUUH­É}Û&Jóp§wN°xþLÇ„“'¢¥!ýJv'’v>©Ž' ¹û(8~ZfÆ>´)2‡Wˆ •©EOÃSª‚'8 'WoÙ|ýo,B \P+TM|ßÞWeY)m÷7LVãævwì$sˆ´<‰¬™f›i®èË3—xc±PÈ36æÅ4ÃÛ,8jQTK–au8³¸ú‘¡þh^ ;áExQ„lzrÔŒö¯Ú4Sý÷L0™‚͈à¦Á]%ñ°¼ÈùiËbXngÌ%±iR³v‡çrxÒ×Îɧ¼”¬™Æ›W+ˬ?ð‘¢RH3Ž T5É« ˜pÞ÷Q¦Éç2ØÑ1tòäP×Dq·ëD;5­3—’ç¬7Žx‘ÒIýJÞS”¤Ú$$&§'õÉ8¼Û:kXu=«| ‰½rAdA¥K-ù4 žË•81Êx¨YvY­µÕóR´–‹§t¢ÌU…q|2Þ:9‰ëWpäÄ%“…€ÇÖËñLÆ€ÒÑ…¤Á2®çÈ)Z3utYKMÇ#ð|¶bÄ—E¾{Ï•|ò ‚¿]ÍlˆÅvÀ£‚ÂóN¡Ù:µ’D¥hŠJéÑæÖéiY.kôdU>‚µ:®O‚ÿÒVåÎ?«|&ŸOJ’šW‘*©V¡Ð\pœ1!]ˆjš$[)!Ý¡OOçâ¦9™¬áÅùõôtãô$øí“«á¨ëÜߟɨ*+ª*σ S Ê`Úš%”e6œfññ:E!×# ÌZàIñôdcjZÖo_%õ޵H`»äᮾ¯ ¯xƒåFF å“ã IÏÓdÙ²R9/ŠG´¦ãfN×kT—ÿ¸^ÄÝ€œNîYúF8—8ÃHé­ϰ6*ø¾ÏçL h†ÓxÆ`e¥P³Ì”—2ÃÔr¦fˆÖxJ7uXÒ½çÓ"EI”/Šé¬(¢+œæ1¼™C²E  ŒÓ¤Vð¨i\ùcÞ\üTÃå‹©¶ÝûJš IaóLR1ļêXi:u,>šãÃòr‚Ós¦Œ×ô¤¶ƒ97BÕC’,7š@Ž¿Í> Õýí«Q75ן“ðÀ%/1i„¸À÷3HemW£ÅfÖôèœ#7»x5"ËÞto ¯%˜-ÔÁ8ÛŒFârÛt£Üù÷[:°UQÒi…±óétš¡3jsÆsó£AÑèµ!߈¸¦†ïÍ“zý‹ÏcáBvD⩸é—–›4;…ÆÉØ|(YÈo=+æ3LÀ–xå¿‘÷iš>q"O3¶Èža9/z7næ¹»_ܰáí8“†9.§rØ‹OF¦]רûˆU— ê›Î2y;HC(2*ãûª$†ÓÔDST YÖQÏ×¶?óâºÊmÿvÈ4ÌISN[Ö +Ñ£¹”a4Æê=S¼ ÀÝLÙ:"¥í1µÀñ"#IÖ˜¢‚'£é¬Ëó‚ïß{÷þ2醯Ûrí»‡ oœ”åN3j‚/›v£º×Ü ¬»Þ.«¡ÒQy…áT5“fÆ2Å£&UÍó6KŸ[O%·´!„ݲÝÙx/ž)…ÐdFs^¼ó¤Û:é@ý¹Õ²êþœU˜jé1p’+€6+YŽåT»I-¶5æ¯CK÷¹o¸a݆gnß¾Ïzz´Ñl‹B®Ù90íB™Ü,äšúDckÝÇZ,àÇñI<R­£”í÷=†Ï…öûÜáë6Êš™‹FÀv½-%L6›¦mÌÑ´fXTãÉz—K«2™¦Ø#[“Jåá/扪XULrw?»î¹ëž¹n±àç¶oß¿ÿváYGÆ_›7Ûe¼œÇ˜6½ÑÐ dçBÝõ¾-ýjÌ75‰[G2ª˜ijRƸ&›aTIU•=¾áܼÒÿvïþ›¿á£Ù:â©,k“.mt}Ÿv'Ãi“ÊÒýõ®ëüB1™lÙšQuÌ– ëÓŠ$%UEUøõëî‹z² À“)pÓën~ñ†i·™Ü ¥ Ž;);Óñ¸Œ"ECRík““ƒõþN@ýw3Œ:2’)>üÖO|¢;ƒçš$©”¸u x@*pZ Ø?h£5Óð¢&ž/Ÿ4Ú }6n@Aõã“u·¬;°Þ0¤65méêï*›ÀqIM ÈÌÖ­´ à5J9È'½Öíñ¦ë8A3 Ó÷ ‡ö!»R Ô¥ ÁâlÝ'‰ë|dB-¨êÙXßéO@ûÎwEFÁ+ò ö~ÞÀ·|À7&JéÓñ#Ï=÷ÕÆwmq×÷…äš®;í!Ç4ƒ6ÃjtµÔ‰(L[õ.ˆë |óÄ¡¼šLoII&»»í|&“Q“Ésçm¸Í„r }ÃWïŽÿp7K£ ¥ÚNP‘ˆæ:m9 z09·œ`zÚwê=eZoàR±ÕïÈ+yþK* IŠmçűý;|Ã:A à;nåR©éû¶lyñ‡8×¥]š¥ ÃO ¾7mY®Aǧ³^sŠÒ}§ÞÕC½¿Õòt×8é [ ccb¾P(@ˆb˜¤·ß´Ž¢ðÝš YN¥_WB¼ÅÓË"«™Ã·GàÚ¨T*j™–eèÝJ#ÕyÊ´ÎÀ/.i ßK*áýœ°Me³ÈÕÚç°îŠ"Že­”•Óè  ¨:?/¥¾À7ßòÖ¯n¹edd«mÛ¨”L:mƒ£Óé箇¬š§ pÈ`£øV‘çÖ³bà“û‘ H°(ìÒd+‚¸TÊJ!$x‚éôž7W-õؼ£ë²Þ~þ‡ñÇßúôÓ½3Mâ‰FÍçó*~áú@’ðí==)¤ÑéÜc/²>F¦Opls3 'Gñäö¯i9Ä»F°1Ûq³GnÜ9ÕÑÑYo9ûöFóÜ©StþüÄÄÓOwb D)`Ébò†$ÄR€ Ú_Çè®» ßÿÂ’ ü jš ‰[¦|ZËå4J3PÀõŸáQÀo‹ñýȆwö7ü¢õq}ÏÝòؑ޲ÿ–gž9{ê©s[Ξé-¨ùBFm²o¹€—X‹;vݶ½žwîÙß Õ¢¨,ЬEµµYV”¥%Á4ÛÀÞwÄv»·Ÿ<¹mOsȧ¶aj‡þ‹^b}¿öÔùó·<õÔczü‡§Î=¯_÷Ôµ[ÎÂ_ÛRÅuojR$ßÊ„5°ëj´“ðM>8>YVB4bñ]›x-êã›þòSävúëwOÅÎ?¾³!ÖÕ_‡Z±¾À»ßüôÓOŸ:ûúÆÆ=§¾o|æ–ÉɯÆÒc…t"UÒ¶QâÄ"ì«Ýèºõë%ŽÃ7šÃ÷ëÁ·¯v)ž°4 Þ›GÓßSÚ½ûÈẌö¬Â÷–ž:ûxcã»N=ÓØøÌùÆÆÈ9•|¹åìYð]ù| ñø–˜´10pø†õ¢$ÙRV‘„¢ëœÅáûmëox~•n'¶ À§þèáí7yjKcãuç¿–„BQ-¼iÝø¸’É(¥@¢( ßgëÙs6æÅ÷Nñ×^Àg­À7ØãýƒuŸ%]MàݧNøÜS[&ßú5~¶»©©À(ã7‚˜œñ3Pù§®·mü' ß»‡Ü¥Èñ—7í^͇ï­p<µý©SýØÆ[@­ïëV×Û™BÒÍBŒ8oa ÌÏ®S ‘g°ãÆó ÝÿðŽÕýñjC»ñ­§N=uË©ó{ÌÆgŸÍd¨Š{÷šl; ®šçlm»ázê)ò¨.Ï8+)5¯ö“MV \ë½ç°˜Ïž=;žWµ÷llÃÙ|È,Ï ´áîLž!7¤*ËXéïß±O5Y5à8¾/♑[Îo8µ·ó±­ûG Ðb|·õûÏ«M"XKbCÿë/ÜUÆmó{vŸ9sf÷‘hêä›öŸ?®$“ŠXغÿ,„¨<þnĘoèï:¹q•¿'½fÀU-Òñ¦ ûÏlݺaÿþë MÎL&6±©áö5|$ÑÇå†Xl´û•­ýžÁâÐЛ§vïYãÀ®%p<µ§?Ö×Ý××½ñðž#{6Þèék »æÀÐnvç>‹gí/y{ ¸>-¹ÄÏ‚[°Þ‰ŸÙ /ŸnÞ¦>ªv¾zø]è:_zOÂÍ4åÁ«Í• Y¼Ã6-(È¡(_îÒü¼-ý X 0€ÒutWºVøÊ ÈKKXèüKë,¢eÙt—ÖË×OSó¶¤k$œC¦¹þ'N­À ÊòdY3 r%V€4СÄ[:9?¿ØÓAvQsøÇ|M­ie,úªO˜Cÿ’YÖ½ØkwºxK±AØy¤× ʯ5Â"‡t» ÙåW@ô¢ŸùA[Õ+™Eåwé‹°Öðie)Ȫ>aŽÍV]˜°ŽÐœ uFHÓ|6|šÆÀQž74×êpÁˆQx šK²‚™>MñüìC"„€"—½`ÐU8pÙG Fx›_޼k„¦(TÔr¸ÏÉg4ÙnŽJÉ¡ GQRÇ /^D?«M~Ú’  ûÙ :È ›#ëdÇxˆÍeªò¯Q²½/ †`¿7Ë=“ËZ³ÂR-KW´`ö|Z'è Úà+’Í£<°Îó¡Ö |â¿g+NË-;9`Càr§ ª…ýM, ¶ãsUËÊ+&–…Èaý²»“)j&¤h<*ÀÕq¸ lÔ8\pψG¥Íˆ šI8à}¯²™Q¾JŠ oFÄpŠ=Z,yHh”5*ráyì­BÆÊ¹($}´‚°DZÌFˆÏúwP3|PðLˆ-Gû2öä|)°`Ä¡¹&ƒ½išI@£e{AÆ:ͲeG7ÊÁ3äò(Ô–ò±ðSapCQ¹hà[RÌ®ÈÖW–ʃLFŸí*н±BG“†Æ«åžUÚ3æœð³9À3—ˆ£wùï²\à¢Á󒾨d+|«+|»,­€ƒ2{l.XužCœÖŠrÛLñUƹƒO$Þi|Ì–%ìc‰€«ŒÄgdyÀ2±J2 `ºÎ]ÖÐŒ—–±k¯þÌ`kl˜ f5§¢.ïÏH=é¢møW¬C G’À0`…ˆza¨Å`ЇÿhT¨$>7jQ•|R’SÈ‘À '`\ ä ›th BæOo„Z¤@4C­â(8 * ã‚1öHà‚E†¾®\t AX°5"ù`%R f €A›§d 蘑€eøLx™ÍaC[ñ½•`Õ „VÈ•Ö[·R/ PpõBÆ‚KX„ÊëK8ü•O½> . ºòhovG(=u1 ¤íSåo`Ün€Úæ øRßä2club’ŒC¦>ùOk NÌî÷ô ¹ív¾ñ‚Ç‘-xÞÐå ‹1¤<©w"Ü ŠÿÑôñ@½€F ÀÐ{èaOf àM~Rp§Gö7ˆ_äàrà"!`!}X˜N¾©¸šÊ-¶]°€†,Jà"J^ˆÓ[{)`P·œh¡3n”3 D³£0–1†E¾B‡„ì(`–‡a“Αæ]à•yc@¢]Fö¡Å Zêh\Pæ ˜Ñ¹‰žÙ“@”Ì8ÂYüÒYYä§+D*8&9åé¥Z ”YP¨Jˆ_pAçmCÓUD}tª†ªp,S]’À–š·T> ¼§«®Yð˜3’hPS PV®F«HÊJÀÍÿ#[Þ @ hhÀ,ÌD«=jz£Ü ˜˜AGcȳt¶5X´[æhá‡æŠ3æ¬Rqò+ºÞv{§oÉö'A±PÉâÛ¯ÿrB¯„ƒè{›³ù^@­OÍêå¢Pk­#ï†yÐ{ 4ðž,¡5´Œq)EWà[Å\KAÆuƱÇWqËpL°@”hÊ္ÜÂ0'ƒ6È”œr’ ˜¼µ• ˆGÁD˜#Z¨ÅH²€Y„ˆ_4^³$j½…ÀÉÔV€OØK÷Ñtw´ùÞÉåˆÀ tÅÊ+…ÝQ1½U·‚… MC©é ·3І+ÙΔIjfÁ†øá(qBqÿ[¾-A›†à÷ÿàNæÍ“!hó´ùèÓÆÇi4«‡~Aé§“£FÞ‘Wp¶iϱ%çËÞ6ãë #å™óL1ƒð­×AeXm ‘Ô_ž@)Í(|Ëj§c '3{(É1‘œî‡¡…W ¾^–À¿÷Þã—;N–ëB/¼æ8HG €ÎDˆ"`€K2.dúgr(¹9ÂP®Ô=BAìû™—v¹)|Ž~¬À`ý²V1@C ”Ÿ(¢K˜pA…ÂÖh– 1Ôn…¾pa‡àaÁYÜo6ä”àò ½GÛ§4¨¶C!±,÷/ùÿ¥ep Dó(¨}œrÓÉ ²+]±/QŸ ,ÊáèÍ$ gT€6ã üÐCî µÏí‘SôS#ÃJe!ýˆÈ*GF^ÑGkƒ^*€(I 5<Ò @&)²-/Mò\ÚQ¢úØ4TÒñ=v|I·­„Áâ/ŠL¥=ÖDdÒŽò#;"dBNí–â ÚÌd¥—R=sø¥û¸ITêh¿4.«C’$K1 åä(#€ŽAÉ}ì8”‘eA_‘#D—Ž|å_¤Û“¸T»ÕDÊ\ðFÇægª™<Â7T» > !5puú¨D:É †ê“ÿM+é•Fd ÝEâD,2Ç0ÂAºÉ⣴HBoÓóQä£Ñh¿•“ºÏ Æ€Êåú0Ït@§#»éNF•8Ô–5#Dah[˜üN'¤Æ2($4 p8jSúvÎ0¢Î(PéÑ)ì£P°*#õ;4EBº@\5ÓÖ̵O´*À[ipWô•)Ы³h5ªìõ¯#Ëë@H„+»®µÒcG°WD–HumB\<ƒXÔ›í“G2òØ„¶¤ÕQ?kpÚ7xäØQ­jAñÔ|–H£kNô ÛÕnãµ=H­"b»á¦Õ¨ý_ è悇˜+8xî/Z«æ‚Àºà -taàÜFNWÐ¥ns‰°ÝX÷å=®z×ËÞöº÷½ð¯|çKßúÚ;postgis-2.1.2+dfsg.orig/doc/html/images/rt_st_transform01.png0000644000000000000000000026557211722777314022667 0ustar rootroot‰PNG  IHDRÈÈ":9É IDATxœ<»i´¥WY.:û¯oV¿vßU_•ª$¤‘J @AE$(Ѝ(*b;Ô{äÞ¡=z‡zl.z<QÄ‘Î>ÄHRI*©Tª*Uµw5»]k¯þë›ù}sÞËsþî=ÆkîõÎg>ïÓÀ¿ûÒ×οü ó$J(Už|â©ÆlûÄÑcs³ë7.üOgg“R•çð7~íÿõ¼p¯Óo7fßöö·¼ýmw—Ò·-]Síȃ?ÿ‘_ëúNÝzÏ÷½gyeÈ|n¦I1ù½ßûQ<Žºy& ½Š‰âÑþØ÷Ï´+Y–•¥¤”MÆþÆÆM‰aÛ»;ï~÷»_|ñ̉'ö{ùùù,KʲBT*•^¯ES¨®ëBP\„QX0â<ñØ3—.]¹ë®7,-Ï]¹|‰eY7oÞTvðКeYR–išR¢eYÀÇcŒ±ïûó ³†BƒÁììlš&ëëëí™æ¡CvvvIJ,³,Ë0Œ$Iâ8¾páÂpû S1ïºõ´¥×,#Ï[Z>¨b¼ø ‹s_úÒ—Öׯݼ±³ºr´ÛI‰ Yž,,,ŒG[Qº!ÜÛë”P*† (8|ôi)¦©KÁÿþþ)MÓR¤yž‹lE¡ª* MÓ<ÏMÓFÍÏÏïíõ8纮·s¿sàà*cLÓ”ñx¬ë*„!$¥TU5‚)„Üuׯ¿Ôj¬Ü¼¹óæ·|ûìììÅKç+Uá"Í¢\À)rÌÏÏŠ†Ã¡ãXã,˲,kµZ[[[RJ)¥¦iƒþÈP‰®›“ÉDÓtŒqgo¿Zs£(Òu½,Ë$It]œ={v<ò<B”eI¦„B¦Ã!4M3ÏsÓ4Ó4-ŠÂ²,,…ež?Šòl8êmon#¨‚’¼ñôÝÿþðÃGî8òæ·¾ëéÇÿãµ×ÎcŒîyó[º‘©èÃÁä{¿ç½¡^ºpñ ÿú/÷ßÿfÀÓ••åë×®NFƒVËq¨QJœF±¢Ò² L¥KKKœçY’&QŒ%Ì’|qi@AB¯Ñl…E‘$1B!Ôëõò¼`Œ‰RÚ–IÁÅq,¥¬T*„BƸE’$RÊå•%Œ»ßóý‰¢+£Ñ@G¬ªj)K %–eèPœ¨º=ÿ‰OÿýûÞÿïøÎw©ß˜«Ä|L•Ü­hk–Ç“ex0ì&©W)B`4M':Ë2B(¥Êöööd2ŠÓÈ©šL%ˆ@Ûu˜ª¦I>½Š¢LÇB8 Ãàœ+ŠÇq’$»»»µZ2mÛÆZ–¥(´,˲ä”R€”r2™T«U!DûûûçÎ;þ‚J¬ª]‹ü ‰Âù™öül{Øï¦iÌ9‡*Š‚2 Ã4§ÿ5œçyµZµm{Š7Š¢ UU1¢ívcªë:cŠã8Ñ)ˆ:Žƒ1¦”nll\¼xqaaaz7BÓŸC›Íæh4bŒ)Š2B˲¦`<OÙï ûýþµk×}ߢ€)èù¿537÷àÃ'áÈë#\øžwäàaÇÕ÷{;ßüÆ“G¬~øÃ?ôÃ|ïÛÞzw£ªU\-çqy£ívSSh‡qZ–eY–"  x–>pðèáƒÍVUÕhQðùù9¦PÃ0Ò4%„”‚KP¾úêk J¥öàƒŽFBÑô\Ó£Çc!„¦iªªJ) !Œ×5ã8Ìó¼,ËJ¥fX¦”¥” )¸P™Â(Ž|zü¶Ó÷¾õÜÅóvÍ>~Û1j zÃ>~âðÑ£‡Ú3JÅ=qâøçÿõs­V½Þ¬—\~øÃ?ÖïíB$\×Q˜ù‡𧔩aäßvûÉ+—Æã!¥dØ=öðãqX¡—gF,Â¥åùÓ÷ÜUð4MÓ!D;;»BשÄIX«Wúý>BA)VU•PœåY–q!ÄÎÎιs¯ÔõjµþÖÖv¾ï) #ln]¯Öl$†Aœ$‰¦i–eÆI”¦é`ÐÇ뚆a††aDQÇ1BHÓ´½JX«ÙŽãXJ¡i:çyš¦U׉ã¸Ýn_¿~}ss3Ïó$I4]Ë‹¢,K!‚01B†aEA)UUu ±Q¥i꾦œçûÝ.ç\×T!…(ËV«q)!ÂäÑ¿6S«½þúëÍ™ùn`Xrog«^sÿâ“öÕ¯üë©“ÇNž:~ýÆÆÖNwgëše(ó™¿\¿ú:þ³?ýø¡ƒ'¶wÏžy®Ú°gš ósH’I˜»Í 1è³/œyèѯËR(ê*ëbÝ4_8ó™^Ž£bqa%CÛUmWXNãýù_}ó›ß¸øÚ…–§ŽÜòùÏý3TDžQ”[fÀÒr”úá:J¨’ üPQ¨¢(ŠÂ ‚š¦Aˆ‚Èf³•$±®ªIà_»r !RM¼Ýk7 (ãçù>VXIeR&ƒÁðê•Ë ósƒ~wvvÖqlUU¥išñ¼¥ÜÙÙ™­×ëÓ Ž1Öjµ¢8(EÖíuÜŠ½°8O(Éyæùžªb¢RÍR ‘!Bâ˜ïì tá eYÇ1D¨(K aµ^·m[м(yšÅŒ1)ÐuÝ(Šº{[i’ I Àû~«ÑzøáG‹´,üx2îZUmfeaáÈñ‹7öŽžºýè-'G‘¸÷Þ7Þñ†S ’ó¯¼vèàê½o>E>ì¯ol\;xóúf’æªé¤HëUרeëC?òÅ~”c©vözÒ4Ž)ÁíF½V±â(ÜÜë@$LÁ‰K—.Šæç~6ð“—_:×Ýߟ›k6kÕŠÛ¸vcs8eZ‚bvf~°?ñÇ¡¡©9çÇo9qèЃW;¼´8ÿÿ÷ªªfeuµ>³ô_çwž82·2ûУòSsáÒUU§¢bŒ¡¸^¯ÌÌ6§CS–%c,ÏóÉÄ“’$1-ƒ’¦iQpÃÐ9çãñ(Ï2QIœ”E¡)Ïs‚PY𦕠û“GµgÚ—._…Žú£"ãI×u+•J†‹‹‹AxžWÅ”1Æ Ã0 CUUÏŸ´šõjµŠj·Û“É!¤ªj§RbAYro<†@ˆ&“‰à/sBB!E!„B077#Šb:¯ S!„EQAAÁS©¢¨AB¶·wžxâ±gž~êØÚ¡Ý.—¸5·òµ‡žX;pX×õ³/ŸÍyùÜ7Ÿ ½0KƒŸÿ…½pñLÅu Õyÿû~pØë}ë›ÏL§ÂsNv\³^³KQ` ”2B‰(EQ$±”RˆÂu]Bp¥RAŽ'^QÈ(ŒmËá9ÈQ6Œj•êkÎ-.,ù~@)…¤YŒ1D¤qú¿°¡©¦ãTׯ^÷ÃhøÃ,ˤ,77¯8qdf¶þ™ˆcW¢`üÒ‹/C!F BX«Õ~èC?¼¸23 {äé'þæÑCÇ7o®C@9Ôéì¶êÝÝ­“'NÅIdZF”dŒZHÕþW…Ñ¡ƒ ·?•ñãÌž · Ý-K.°…¸ÿþû Ãètv«• ç<ÏsŒ(!¤,Ë0 [­¦ˆRšç9!ˆ¥Ô²,\Êz½¾yㆡé Á9JžÅ¶a*¶¶ºº: <ŠY¯{£Yo`„J‘š¦9 c!]ד$1Mó?W9„TUív»ÕjõÊ•+kVÒØWUUQ”ñx\E†QEc˜ @µZô{Y\[L’ìõ+W4×-r®P&”ÒÐtFhš¦°,cSQçÅTkPu“²(„iY«kkI–¨š¡éº[s©f0ZAÒ]]>yÏé·œ;æo¼ ë¬Ý<°²<]£?üƒÿ«Ö:þG¿û—_ü—/w¶ûVŽäY ¡äyZ䉪4ERJÆ\!¥4Ï8c:3”p0Fò\ä<3MSÊr2™‚aE‡“¢(8Ðn¶.\¸Bˆsîº.ç\QX–#]W|2ìŽE™iÏFQ²½Õ»|ùòh4RtESJ„REA””Gºå–ã/Ÿ=7MÈåkë¶Þ¼téÒÑ#‡úû]7¸ËÖ­z¯×QeãÊÕ"áy&(ÑÃ$}ç;¿}mm¥êÚ”Òÿþ{077ãMBU7l¯-®š~ôø!‘篼ürg³3Ónfš6=êd2‘ p]w4MiMš¦–éLüÉÌÌcêc=¦(šíÓßbŒ§j;‚1æõÇ—/^ÎÓŒ'™k›e¡æi¬*JVäÉ$ûâ¾tò ·aLBPJ…`Ó4§šç¼×ë!„(¥†aäyB\¹reJ³\× ºJ „EQø¾Ïêõºïe!Ê”8òUV––ƒÁL»¹~}]‚RÓ•( Ã(ÊœP”Å Á0I€ªèyž—¥$S­O¡UÑÆ#ÿèÑãï|ç;ÃÈ»¶qy¦9C^¼¨éõ‹—¶^}íÜ­›ŸÿÂß ÀÿøÿûD‘Ñ ¯]=vÒý®ï¹o0è\{füðW £ñì\;ðã¼H)”b×Ò'^_sqq"©05IR!”1Õ0Š<Ï5]•R ‚04-½”bgẅ’$™¥Œª’;n¿SU‰fÍB€§ Ÿ¦)qâÇq¬ª*Qˆ„9ïø~ÔÛììöWV—&“!F…¦bHŽÅ–W–¾ø¥Õä…ˆãÄÔM…²¥¥Cš¦míî7fçU•I`3/ž{ͱÜþ~?ç¼,åêꪥ" ƒ(Šò¼h·ç»þêÂÌ-‡¨˜_¿x~qneÆizîàÆë—œ¦Yç¢Z­á¤R©ŒÆ©iêI”jªQ–%Æt¿FT1U"cB”iš"„ʲŒ¢ÈÒ©lQ¤‰Z¯H!Q¨ y®¨Zcv#º}óŠ®h “8)¥SIF×õ^¯‡1ÆGQÄãœBt]ŸªêœsL a8QMÇ©ŒŽš"|Qˆ‚ó‚‹š[Ãð,¿xñõf­DZ%ÃDcŠªª†ª!ôŸ$·,Ë DZm{z/˜(!&·œºõæÖ6/sÓ2†ãÉp¯wøè‰—_ݼ´¾YkÖxïû „»;Û %ÝÀÛÚéŽñ=Üúü䉻?úÓ?uö•7·nlú3s­ñ¸;;7“ƢЩ© „HâLJ@ ÃPJ©kŠ%ƘR\”9B1Ón†1ŸL&E–cˆ€äÝ檪só3ƒÁض\M#„éÍdŒ‚*Õºço¿váuiÄV;Ës,DLÑ09ÏE¹çž{þî³KêÍÆ×úf«Ùìnwîºó–8JUü|ùê•õ+·ßzlqv6OR]©Jž‡y®¨Šï‡®kEÑï÷_xá…¹ÙÅ˯_3êÚòÊ›Þxç¼EQ´¿úä§þã™` ÛtÊ<»±±‘§éü⢔²ÑhdYfÛöômªÕjA ‡Ãé`E1b„Ðp8ÄÇq<6ÆXQº¡b”O¨b»qä‡a8è ‹œ QQ(Š!›mC÷öörä›Ï=ûüóÏ7ju"ò|ýòËu:ý=«æ$eTŠ4ŒÆ¦«ÔUkÿñ­§%’!"ЃG°‚M‡@"IžûæY ™M š¿÷ïétǽްÝl†ž¿ßÝCPQˆˆ¢iv–§ßt’#©)úp5:¦$B8jÛ¶¯_¿>•µ¢(Ç9O9çW¯^]ZZZ^^ƆáVjADQ‚š.w9/OÝvû?|î5Mó}?I¢4M‚R–ˆ)gçœ÷û}]×·¶6ÿ·KÏn^¿aÛ¶Êc´Z­ :Ôn· .¦¤*Ë!„išÃáp}}}uuuffÆ÷¢3ÏŸå¼Ôj•™ÙÆÊêâñ‡u]÷}_ÈbccC×ÕcÇØ¶=MtÍR1uj}J)>òÓ–Ôš ÷¼åþ÷üÀ{/\»øØ3O^ëìt¼øFwì4šgÏ_P {aquaaå®;Oä'æ·~ý7ÆÝ=¿¿?ï¹û®(þê¯>ãºîÌììÔ-†sÎó¬ô½(,?{·Z™Æ:U5M㼤”†€øøÇÿøsŸû‡[o;ùWý÷ûØÿ³¿ß=tè€e›€ÉدVºæ–œÌ´W!Q4šµ ôÓ$B”\”¥T¥,KÕPÁõzÝó‚þhÈK@²,K’„!íè±ÃœsE¡¨yV8•Š¢(ÃÞB¨ª¬,KÛ± ”ŠJËRX–uãên¥Rqy`au°ß«TY+KËO>ò8rwoKQ”<çQŒh&†aø^)ÆØó¼iìD±¼¼|åÊ•¢(tSóýÒumáÕ«—:´½³õÐÃêš9ñ†„s¢(q’(ŠÊó2çå`¶¼tà‘ø…³ç,ßÿÁùدþ—ãÇNÝ{l°ŸûÈÏþÓgÿÆ$¸ª©þhh:Ö·ß¾¹}3‚(¦|#mw§çû~‘啪Ӟ©PÂvöv½ñÄÐÔ¼”<žL¢(rmH‚¿ëÝïýÊ—R¨rèЪfPH StÝ´ ËR™²quã¥_lÖ›ƒápqiéÖ7œÄTZ¦aéæã>Õß÷ã${ƒ;¿íöåµÅ"çK I?ógú½Þd<ÑuU"Ĉªëúµ¥·¦ !÷»CB‰mÛS‘Ú²¬(ŠÕj•ç¼V«äy°m;ÏRMÓ†ÃïMjµjG)¤¢,Jôâ,wÛm³VßÞÞfïmoI !’¦©aŒ\·’çBÀ˜bY–ïy[;;®[‰Ã`ìû“V½® Ïy!·â „¦ëzņ¡ë†‘ç9¥$Ž"F©ï{½ýýÅÅeFÔñØ †¦iÌÍÏè†bZ*¡Ð²\UÑ+nEJ°¹u]J¡ªŠ¢¨LUâ8¬V*~àÏÏÍÛ¶»½¹ÃspâÐ £ óÍZÝ9tøà#_{ôSþWwßyÏ—üêé{ï=ÿÚžççÏ;ràÐâìB™¥ŠÌUûþ!HÁ×êÕ N„¾¨ªŠ!ÊRŽ1S™æ:Žj2ˆ(‰c˶ M/…Œ’!èy^Ç•J|ýúõËW®<ðÞ÷þÌG?ÔïΞ}Å4¬óç/ ÞúúææÍ•Q×1%(!( ž+Š"xYðÒÔuEWßp×ÕZýSŸúTµZú^€vw;‡²t]GQ‰”²,%B„óB pæÌ!@†˜À'Ž #š¦–eùÄ_OÓœV©¸«Ë ¶iX–A#ˆn\Ù…¤¦6‚Ó÷|[ÎÏó¤€Û¶‹¢ „LýóJ¥²²²2’EQÄ‹¬( Æ(B(ÄPŒÞÍ(ŠDÉGÞèÎ{n…aØ®5×––ý÷¯U«ÆX!³Œçë„ ¤išŸJ‘bŒ-Ë “‰ëºBÇq „Sôš"ùt•³m{{g³R¯I!-Û­:Ùs»{ŒÐ"ÍÊ,ÇRU£šI0{ ­¤”6Z3~èiš6 EY^^îí÷]×MÓ´(r!„®™ÞxX¯W5Mum{Øß§”ÆYº»ÛaL‘…˜º{ƒ(ŠJ…Õª[r„P56-§2 BõzSÓJ±¢’( ƒ‚µZ BÙh4 „@h’D ]ËͲœbT«Õö;“±7š]šùƒÿù;ùèÏýà>4¿¼rË­w„~ðÇü‡"ç™7ü—Ï~ö³óéÐHùÍ_ÿµÓ§OŸyé[üàyQœ{í¡ ‚T!%¬Wª DšBã$¨Ôª DZ¯­¯—#©j¶Be€ó’ ä!@ðêÆºD­™öp8ôG@"Ó¶kµFeù®ë†a¨¨z–%‡®ú^4 s®´ÛU?˜˜šÎ˜š¥i’$?öŽ’tãúæ7žy®R©ï÷û¦ã‡}âšÕœG–K%E!Ç „VCK Ï*Èk¯œei¨Fo0¿2—•¹\g4ÓG¿ö%¸Dbn±qìÔqª¨*˜ <‹n\ß@Pbv:CAEÓC¬*!D‰ÅE)þ$‘eYE­V«(¦öÜÝÙo·æƒAOŒ¤¤q’†±×Ýܹ¹¹8¿”'>@ÃTa4ÏÊ<Ée¹vewoûõäBY–µfî×TmË Ã0 ã©:š$!XÓŒÈëW\#éXV’$ºiÄò,ÉRøcÌu]BªªœsÇÖ’4Bu÷ö¦M"L!! c,D‘$QQœC]×Ó4EYÎÓLÓ´$Šc²ãñ¸Öt¡Ä*Q¿ñô³¶ãFÅ8CÎÕÍî§þç'«–¡¹¶°ð®û¿{gk{a©þs?õ#ß}ßÝOþû?£‰¸±LBùè—~ðÉÃlüÅýÊ=÷½ÉâÏ>óÀß'xD)òÜRU¨3éjµZ'%ºŠqY”†¢J!Ò(­UjÛÛÛív»?ê[M‡èL1ÔmîÀáC“QÁ9O‹+¬ÈÓ²”½Í-×­E~"KÁ"2ñrÓlr΋$Ée‘Ê´17w¤Úüä'>S­ÌMÆA’›Ã­Éd‚—Žô{÷½åÞBÈR Çuzä¡ååEª_ýÊW?¤˜ï>}÷ÁÇÚí%”øŸþñóRÀ¢,TC{ßûß§j ²êÖÒ8ùÊ—¿:ã$É‹LÓõ2—”)‹[o=5­' ˆƒ ÀMeè)…ŸZ7yžgiöì³Ï¾ãïØØX‡º¡¹®ÛÝïÖkõ²äë—/SB¢8±Ýj{nv„ƒ hµZˆ,ËÂ0´m+MSE¡{{;Óm£Ñ˜¶.mÛVUÕµm˲¦®²,§1b¡È0 Û¶§À™eÙ4n•åiY–ÓŽ+clÚè*˲Ùh9ŽcšFQRÊáp`ÆÂÂB&ö±Ÿ«TÐìBµÀh·»¿|àà~ôG©eüèG2§ò—?ö«/Ÿy!baa©ÕžA9–E6Mƒ2jZúââSpš%†©[–‘g¹¦éSÀ†zž·°°påÊ•S'oÙÝÛ©×I’&qÒéì:¶±~åõÑxÈ%ŠÂ²àõzmiqi4šDAÇIµV‹¢@Qq–¥„ ˆ n˜¼äŸÿâ?íµ­­Ž©»Û»½áÈ£‚sIZ­V­i ‡C·ÞP©Á‰'–––’I´¿¿4 c0>}úìÙ³Qì}÷w¼ !2M $Iš!eY"AÁTeçÆ®°Vm¤EL‚)O|ÓTï»ï¾ë76*Ç4õ¢(u]WU6ÍÌÌÌL#xº®K)oö333/½ô’”Ò÷ýF³&„¨Õjœ×·¶›óó£A@´½ß‰e)®¨„Pš¦33mÏó:Ýz½ÅA’$ÓÇhšpŸÍ²l0Xš¦ëú”çöû}Ƙiš­VK‚ÿŒ´7iæ8Žc„€¢(š¦Ù¶½»»;u—EIÓTQÎùT=ö}vvÖ0ŒápØl¶vwwC?@„B’ÈÙöÜÅ«¯^߸¡©Ú7oÞl´gövv¿ð…/üä‡~â—áçGÃ' v¯\mKrL”о½ß5[nuy¦ è«=|Ï[Þ [¿zãî7¶ffæüñ¤ÈrK3Š"Ø &”±zµ¹¿ßù±ÿ‘,9ç­VË÷„á4¤%¥L’„RZ¯×ã8æœkªfšf–e««+7oÞœŸŸC=~”ij¥Rɲl<ÿÖïü·îhxæå—˜¡G÷¼ eĶ­~ß05ÓÔ‚À ‡õzÝ0Œ©tnÆîîn¥R¡O“Óvõ4A*¥ì÷‡¶mÏÌÌ „¦¶BÀv{þOý!DZ2Ïó²,LÓ4Mƒ)tjugiN) †¶m†Ãñx¼µ¹yéÒ¥(ö¡„a‚¨¡ÝýÞÌÜœeZG¯<òпíî\ÑÞ¸²qî•—on]›Ÿ›Wu‹²ssëÁÿŠïM~ñ~îñÇyá¹g EE:®ãG £ ¡‚$‰ã,’k“€3…ϳŒ)ŠB ¥`ŒNó®ãñèÅ^4LÃ4ÌÁpPòT7TÇ1²4R¥iæû#Çq0ByΧ’aY–e‘ Yb‚˜ªg¼N|ŒuÏ/^ÛÜêYX¶rüèŠi¡½Ý(MS]×§}&Ƙ¦issssss[[[Œ±0 £(ZXX¨T*“ɤÓéhšþòËçæç¶mÝu×R–I’ܼ¹Y«5Öׯٶ³ºº2 ÔëusžNM!Û6‡Ã>!4-vNËéÓÛŸçù4€…²m{8Þ~ûíªªNªƒÁ`¿ß3m·;ÿÚoþv­Õ¾ëô;ûÝjµ*¥¬Õjã¢ÌÇLÓd2O=á´­:MÂLG“s†a³Ùœ¹¦!0ÓL£H„Éd2¼(¥º®s΋¢@MK]žçu:!„çyI’EáûBpn~6çY’Æ›[7÷öv1Æ%/ò$%Oÿìææf¯Û…ˆìפêÐÛNiÕk ÖëÎÂõ«{Á~ïüþï:ÛÿöýË?õ¡¥ŠyÏ©ãÏýÿL½W°]×yç¹âÎáäsó½¸ æ ‘ERrÛ¬‘Ýív’íî±Û©m÷”¦ìª§©šòtµ{z¦Ýc9HI–[Y²hYH0€2în:9ì×Úk¶Ì<à/Øûœ³¾õ…ÿÿ÷½øÌ¨·oë „"çY’g†¡×*ÕõÕš*K„Š‚Igiúgi–F²„E‘#Xˆ"E®é*„Ðó¼4 :¸¼¸`[úÑ£]oJ©LQ½tD (ŘÀ$‰E©T*s +“©ã枢VÜ€_¹Ø‹#¸º¸¼±ºÐ¨ÑfSÜ~zNJãƘç)BèĉAìEqîܹR5%)Ò±cÇÊ™]1£(¹|éjÇK‹Ë£É¨Ñ¬1‘1žµZ3’$ýà?\ÌÎÎJ’T@%a’$+++9KË'C!„àÓé´ìa.,,ÊoË4MßõJ×QùwIÈÓ,NÂùÙ¹ÝíÝ#‡^¸p"rïý÷wnJ-uù²L,.Ï(¥«««žç¹®›¦iùH[[[¨(Ö××÷÷÷EY\\,A qœ4š³¥Öã™s$IÚØØ {åçPæXA” ~Äa*ŠÒï÷—–“4*ÓDJqš…‚qÏ›H2:yÛÑ^§;ã8–%™ ,Xá9n­Ñô}kkëî;2Áȯ\º<víJóì¹—Žݸëäñ¥VûØ¡•4Š¸ë¤¬HãA´sã'ŸxÜ®×ß¹táà‘ãA”¨²G @¦ F„"g©¦–n¸N€1e cÌ9ð}ßÐõÝñ&¹$I†©'IdèòC}ˆeÁ«¯¾:êî×êBH€BÓUU“(znÄdF©zskûæöÞ`àóB™ºªf^[ÿÚßÿ½¡­™™ÅÕ¥±ßËXduf¶¥ë „yšúy4öl»6Ç£Þìü\¯ß“U…ÈJÆË™„HQð¢à’$IT’e”¦¥çœ1Vƒ=Ï ŽãJ¥!‡I’2Æ9ç†iRJE&s΄(LÓ˜L&„â,ËJu<„°< qS‚)%Â(Š&“q!x’$I’VmcÐïW«•ñh0è’$é÷{£áˆb’gL`ÚDH@à¸î•uljÝÞìÌÜd2êô÷¦ÁàýÞwåí+AèG±°@¨#W‘p’FãgÕz=Ë‹‚Ã$ËËÞB1çL’$I"ŒqB¤<Ï‹Bä"gEGA𯆡…¡¿µ½AÆ«Vgff6·nÙ{këV’&ËI‚¨DXž !*vE¢2A¤ÓºN&`¥Ñöö¶ç%/lËìîo®,ƒßÿýßþ­ßþ_yùÅ¿ýÛÏíÜÚ‡B“$W[µå+ºnA„ Ó<ŸiÏh’þâÓgwv»²nEnÎ5T ‘*9²qðùçÎ%1ÇT ãdyyáä©£º.iTQ±sc›Æä<婥؈‘œ‹Ù¹ª]•Ò4ÆH~úg'c§ßLFÎÜì¼eÚª¢y®_p‘gLU4(! QpKÓ£©wãòµKo½»¶¼zøàAg2¯7›[›ós‹µJóÊ•§î¼m2Ë’tãÚ8Nf‡“) +8¦ÀœJÀb¾=ãMÜ‚ˆ¡ªQœÈŠžç<Ë…eW *Š‚ PQ ã8B(Â¥y–³œÉ’„.8×T-ËÒ8Ž|߯×k‡'’$9W©‡‘®i»;·ÆãñîîP¨hš¢k¬ÈýÐæ9+ ~øðÆýÜyõê*«Ó©;™ŒOž<Úßß»yíÆûÞÿàk‘uvz@BE–§B2 ³™$™¥…BŠˆ*Sr„ ¥”±"Ϙ(„(JD!D ÉSˆàòe&8ÂH·LÃ4ß~ç¢aئY½xy«@Šf·R . "…€+ºfA(Ea‚æ%t8Þ¹zmweQ}ùÅgüÑÞæ•W~þgùÙ_úïùþçŸuݬRŸG’å§4J1²m[–å’“e™,Ëã~¿?™LšÍ&ÆH~êÔÉ2;&DÚÙÙ‹¢H’$Ʋv»iWLB°®ëš¦mnnÞ¼y³L˜Jå8„0ÏÓ£GæyN)u]¿”3ŒF£[·nÇÑ`Ð/ .ITQdˆè=¨Fœ¥ãáp˜æq :v a’Mgç*Ågn?qâøéVkæÝw.‡#UÖú~%Q” D–…€‘V«å…^”„­v³¬ƒ (=^¥$¼ä8PJ˼LªJ[}Iv(}q§iZš2E1 £Õjmnnž?¾LÿBÎÔ+%Ѷ]]\\Ô4íúõMŒ±ï»q2V@@@œJÔ×^{ýÖ­­ÅÅù§žz Úé÷ «òKŸþ•|ôãû½aÆyÊX½ÝF’JUC·*ö‚eW‚¥¡¨R«åyŽ$é½Ò5ŽcEQÊj #ÉÐÌf½%ìõ‡Iœé†5¦¨ IDAT™Lƒ([XZ¾ríÆ…·ÞA ÁgAžçaú¾_ªøûý~QºAççÈþÎðþõcß{ê+ÃñDé~ú—~â}ò ýOü¿üÍåw÷wn @Bs?òÐ Ãp]W’$aÉâyýõ×5Í(«ñ ôqKTI’lÐWì*ç\–éÑ£‡KöAi® ív»”aŒË†çñGJ'cÅæ›`ßʾƒ$I½^/Š"ÆXY»•:ô²Q@°¿¿åêÕ#ÇŽN]çÆæ%YÃË+ó’ŠÞ÷¾ûZsõþ ãxãÍ›·Ú³‹B@ÐÌÌlž2ER US¨ÎR&aUUôv{fuuU×Õî ‹1VU5˲4MeY.¥…¶m !Ò4-Á$eSÃ÷}ÏóJ=a%©Äz™¦Yæøœó#GŽÔjµòð0Æ+ÊjtmmíÁ÷?´¶¶!D ˆ¤’$-ÒL ,U«õZÕÞÝÝýéŸþWO<ù±ûîðëßüÖþÉŸþ—ÿ뿞¸yµi). ((¥„H”ȪªþóÔöz½›7oJ’Ôh´¾ûüÆoüš¤‚/þÝמüúó/\yîìëû{ýÉØ)s²ò³U5OQU!¤(Rš¦ªªÖjµ×/¼™$‰ Üt3¡P@((¥’ÝÝ=MÓÂÕjuåÀBa¬j àÅ_ìv»­ú B( C„ŠôæÌŒçO8Ï!„Ýn7ŽSJbaaa<A Ër MàœGQ$K¤ü<Ï»páÂÕë×’$1 ƒR©T¦ƒAÅÁÅ è…Þ‹/¾ÐéïIÚªrç=÷¶ë¶ãŽt]A!OÇý»î8ÓlÌzžŸÄ)¥&Ü›ŽkµÁ’$I†a%IEI +›ìiš¾Çz,í²%ãµü¬[­VÉ«­Õjªª:ŽSŽ´mÛÃRZŽòiZ©TdYÜ~„p1¦”»nÊ ¸ÿ;^{ý…9»y×]w›]$ë;ûûØh4ǾôîÖ+/½‰xôÑçfg*v¥ßïk†Ž‚‹‚ ÇqÕ®” g‰à½½½jµZÊë»<áûû½ià}í[ß, —Î`tøÀZê [½ãŽ“;Ó¨ë&ᔈs€5Œr'Š"E’ËœÆDÕÿôçÿù+_ûÒï|æ—O?õì3¯<ÿüÓqÄóÿÚyJ%*iqœ*ªªé:g ˆ!¬TlÆE‘5UÉsV „ˆnY{ûÉÔ™_ž{ìÃ#JE!B×'E!¢H$ÞO<ö€ãúý±ƒ$¥7˜ä¼ šÆc,OÓB!«JÁ9&Ä÷¼ù…¹ïþÃ×£Þ÷¿ÿü¾ÿJ–I@M×óDžNã4cq’ ’8â!DìZ»ÓÝÝÚ½©(òòò²fªÃa!É0-ðÂÂbE7dµ 8U$ôÖ… íjÝÓ­íîú‰ãXË]w8[¯ˆ$^!ÏHÄØ0有„Þáò,%H¹pá]߉‰BÄ9‹ûÝÞL{±4ÍmÛÎó\×UÆ/2Ë2²,K’ލš–,Ë™$碀*mØØïÑ4³–¥¢©è,ŠgE ¦ ¢F„К`¹$)¼È’$«ÕlÓ’¾ü忹qãFÕ®ÍÏ. Y–-ËÂEQ¯VÒ$ö¿œ;Ù¦™fqà»’$ÍÍÍbŒ yž Ë‹‚›¦É’ØŸNTUõ&ãòú‡A‡‹kóN)Ì9[ZY>èÎޮϧ dìÁøð£øÇï}çµwRHZÍÙ•…yÏóDân¬/ÖÖÁƒëo]x;‰¹e×=7LsÉ0+õ–Ú¨Y‘ï§YŒ4,M¢p0u’$Y[_eyÇñâÒJ8.Þëô®ÝÜ_^™›„ƒgÎ>sôØé¤™¤Ž{úÔÑÞ+,L.ݸvþÝëÍåC/^gœÕju‰¢B¤qœÔêf½a…ðÜ!’eL‘TQ˜ó3«Á4ð\×¶ZA(Àh4‘TÂpø‰a)ìÀª*1V4M[­™O>ô‰,O?:þýý¾©Ù¾뵵ȗ¦£Â´©BM©:sýJW!Ä0¨©ªI(2­Õja|¿×ëåyÎ fZõ8ŽMÛò£ñÒÒÒîÎuEÙP`Œ cB*•JYH²FÄ–4Ó4“$β¬ZBxÆã8.ŠbñÀÊt2:qâ¶²ªŸ™›‡TN’Èó©3nÔëý~uuEUõÑxJ)M£P–¹D•í훆¡¿ÿÁûzýý3gÎhT›››Ë²ì‡?üa–ÿhÀ‡1É*£N’DÏÚí¶¢(£áD’¤2#VU5Š¢0 !,‰!„ÃáÐ4Mß÷-Ë*5Œå{•éWºbrÎY ©* Y]XXüìgÿúƵ‹ Ë õ™™fÓÌҨЕµÕ$ ¢ Ž‚XˆêõQ˜Iv]·¥ÉI’PJ!å£,˪Õj£ÑHU»R ‚  ÿBˆzÅÖdÅReÆáùWÎËTáÞÜéPD»6¿~ìbÇÙM Qk²"Iú®×Ð Œéh4ÒuÃ÷Â2ÅD ’rH ‡AbXçI¥ªB,Eašæh4zÊʹ@ÎÄE zã$Lç—Þyó¢©ÙyÎ F»ÿç>öÄG>¼¸Ô®Öôï=õͱ;´*vEk Á(‘tËÞÝëŒ]Ëòd)¥´9ÓNòÕPívK7ÔC‡78g·ÝvÛ=÷Ü3úý¾®ëe3©Ü3àû~ù{RU5‚’h]â¬vww-Ë:|èH½Ö¨UŒeI-,Îu:{ÇŽBL&“k×®•ÉÙööîd2™™™9yòä™3§gf[%­!”¦I¯×]\\¸ÿþûÚíÆ(ËÒ4*•J™eV«Õò SUµ|ª2»/‰£q‡aX ¹JøvÇF£¢Û¶…?JÚò<Ïó”±l¿³«ª:zŠl¦ ÿüç?ôø1€±©«ýý­·Þ8‹¸ÈƒÐ›Z[7ãå^ 1Æ¥;H’H U+'•eC§„ÖëõJ¥B(ÍsÄ!c¨©ÊúÆAf§E&EÎã„mîîE(ÕÖß}ûŸ.Ý쌼ä¶Ûo?°¾†(ÊóÔ°ÌÀ ·nl„³$•(† € $FÏúÁÈ®(+f—–ÛšŽy‘Äqª(Z–±••Õ<çUÕ!„ÄuÝÅÅùÇO§cB¤K—®xnÔj×Ò´´~¨Ä{+kµf³þGüû% ­ëÃþž/Óê¡ÆæÖ6çœH!„)QΘŸŸF7­×fJtûéÓ§£È?~ü¨išß½^–Z%~ƒR©dÈRŠ!„%²\×õf³Y6ýJÁÓ»ï^*KýÞÎ?•eúúëçW—%Iò¼àúµÍÀÙ™¹ù™™çž}!½|°Õj„aXpÁ a¨2¡(½µõš®ôûýùùù7/¼í8~³ÙŒ¢€snz&=ÏÓ53Žãµµ5ÏóÊÆ£eYB˪AÇ©$) Ó´Ã0îvû•Z¥¬œpVV–ß}çºn´à”Јyž†“;ïºçð¡Õõ¹ .ìîvV–æ’$;ÿÊ«¦iÎÎ,@ %Q Z*y”¤ívQ˜f‰„ç\–e*aß÷óôÁï|û[/<÷ì[o¾Ùn¶¿ÿÔ?¥Iæ:ÂBS­ý3?g𖦫ƒÁä©xÖsÒ$JÒ,{àý÷=üû­ŠzèСg~ðâ¯_̳,I|Y“’83íj†ÍvíþûïJ"ŸRe2qÓ4Ó4õà¡õ$ 8g“±§š®ëŒåŠ¢È²”$ !È÷=Çq‚ ܼqãêÕk+JFŠfhÓ‰3Œ9vµjUìŒ'’L0…íVÃŒ³$åœW*õ^¯?O}Ïs]DzÌÅÅyJišÆY– `­V“R‚1ò|,Ë€Dé‹çÎ~ìcOÜX{ùÕWlËrÜiµª\ºxc²¼¼Øl¶²4ŸLœ0JtÓ@3V „-ÛÒ4¥€ˆC¬ëZQ;;Ûív[–¥0 =ÏW4MÕÔ,Ï\Çi6ëï‹‚K!J ¼¢ª,ÑñdJ$¥³?°ªµF«eWív»±²²†ÁÜüœà๮ïys³3C–g„U6£( ÃT×í¢@Ýî0ŽsŒeB•c9aÅóõSûð‡MÆ Ý°WWWοþÜ /<÷îÅ}Óï{àÞ0L%ªZfÍuœF£UΔÊöX¿ß—02 cèû~{¦Yª®´g¥€ ažçÃA_Wä8Š0X¡Žã„a¸P[‚д…„)¥T b霥¹È e¶>ÓJ9C£x<K„Ö*öd:ÂT+VQ€(Ìj¶Í‹ÌóMÓ*USQ×óuÝ,Q«YÆ$IÁ˜ªªž§1iµ—.½{èÐÆpíÀR»YßÛÞ“¨5+Ýq÷ÊÆ¡Ê`Ðe<âbú{‹Kw¶DÉŸ}öìË"ãÁÑ#ÇY–t»û ³ ]×yI‹XÎÒS'Ojо7Ø®×Ú¢@¾ï=z,Í"J)¡¢ä‘@(ÞË‚)•‚ÀÛÝÝ/MÉeËT‘$‰Dhž¦’$ÍÍ͹×étžyæ™ ömÛŽ’DQ…J†!(Q,[ëìí:¸Z©Zeé@A(N“\ÂD×õííí’Ùl6›Íæöö6B¨Ýn–¹°ªª#^äN#*ËŠ œ‡Z–UNK „š¡—«fEéôºÕjµ7è˲œæá"‰´(Ì*¶5™LvvöM«>t¾úÕ¯>ûìÓ×7·\Çëv‡÷ß?ÆññãÇõ×~¥?œ}áåݽýýý¾¡VÖkõ!’$„ jµ:q'"Î Ï Ò4ÅrÁXÁZÖh4žYX.×M'#„Ðt:µ-ƒE–'TU2ÏÇyƨ¤µ› Œi<çy®j2İÓé„YbZÖt:íîv«Õjµjç,mµZŒóþ KÎò,g1¡À0BˆçM‡£ÉÜìò`42L…JÏ™ïûŠ¢bYÃÞpkkóï¾ô…o|ýïŸþ§ïŸ{ñ¥4‰EÁ¨ y‘®,·çfë 3óO<öÄßñ«H`½Òœ[œâc½¹·+ËF£Zûó‚Ǫ&]¾|E¦Šªh¦®~â£NÆŠ‚eIéuF¤*šë†®BdY‘$ªªZGÀ$‰£(ìv{š¦û~°¿×…aHŠB$Q¤©J¿Û{÷â%«Vz.+ØÉ“'%J÷wöVWv¶÷UU¯7š¢i{Óáwo·“ñ¨Ýj¥IŠ Tdše „¶-! JÉýÜ÷λo(²<õ<_’$]×’$ ‚€óbiq9Šâz­½³½†¡iZã’â”eYšg„ES¨DíªMeŠŠâˆJ˜s¶¾¶  ×–f,Óº±Ù—e"ôð}ø¡Gþ毿°0¿2?7gH`}cñܹçß~û¢e4?üá'ìÇ?)‘ˆ•å¹NÍŠn¨Œ1$H³9ŸEc¹YÕ†sY•â,Õ +Í ?è{žK QT™`”$YÆ!Êp0É’^³ª 4NÒ<Ñ ½¤•dy¡çºãþ ÈCˆ¸ë:×óý0XJ’ÜR$ @–d–m÷z!€aV!–¦N¤ôH³Ñ¾x銄TR°¢ºŽöìKßøú7¿öÕo ‡ÎÖÖöæÖŽNÛxôñ‡î¼ë¶™™º,Áÿù3¿ûñ_dEÕu=M3Æx£Ñˆ¢Pxüø±$†as²,¥”B$„(Çm·Û†¡ ÁBå¾.J‰¢(NçòåË–iw»]PEQ8ËM˘iÏîîî¯mœL§«ë{üÑáhø~­ZM“4M!DšÄŒåÍFã¾ûïNÓ´lž•ˆJØ¢ ?¥bìæÍ›Žã¸®«iú{ÐÛ”Úl6¯_¿!Žã8ËÒ¢(Š‚§iR’&(•ÞóÜ–Îi]×1ƘËÐ'“‘aèÓÉT¦rèÇ/¼ðR3U“ööv.]zçܹsÿøÇYžñ‹_B-./%I ª(ÕýÝÑ‹/½¼8¿d[IµzÕ4uEQ(•B{;{¾ï¨šdXªb<žR*Çžh4ž¶šíë7®‡“ µ†àÀ#IEãшRªkj–fEQ˜–®¨Ä²Í$‰¼À§”¦i’åÙÌì¬ã¹a˜rΫÕÚ› Q«ÞhÖ«!! Ó¶?Z©T;ÝžeY£Á(ÉREQ/0t“b%  ìÆb2q£8¹ðÆ[ŽçõzÃÛï¼SÅõÓÛNß±¸´òÈäáÇ:þÅ‹××™Yhf,þþžrýñââ ËãË ögÿû½÷¾ïÚµ«œ „JÐYïSŸúdžg¥o}<žT*IFTÁÁ`¸r`YUå4Me™:Ž`QªnƒcÌsý(Š&a.-.x¾[‚s1uÝñdÒhÖßy÷å•¥~¯ÏsþÏZ„ˆ¢è¾{ï&ýhçåø¬¯QJâ Y–KmE9¬5ôm3 ÃÐ0 Œq¯×“$ äyÞÜü¬"ËRY–Kœ‹ªª¥Û¶DÕÇã(ŠLÓX˜oG}E’ºÝ®ª¨ºQÑT£53?% +ª´º¶ò»¿÷ï›ÍfžgwÝ}ׯÁÃ×®_³«•ªÝÚÚìºN833wøðá×Ï¿¼±¾šg‰aèËr*a„y¥j Œ{½>c"’••éÔ—¨¼³³½²|`eyåõ×ÞH3¾×é*ËŠ2çfç0Æy–a ]o"IÔ´4E‘%‰¢Èy€¨Õªªªe\䜧IÞï’(UdÙÒuÓ0K¨D-Ór=×õ|Ïó%Yr]o8˜ÈŠÌxÎ3{‘®éº"£Ÿû…_¼û¾*ÕÖC|¼7˜ˆ/_¹Öéõ{ì ÇIž~úÅo|ó¿ýÝï‡Q®éúÜÂüh41Ê?ø(äÿø³ÿó·~ó?ÌÎ,G®¢’$ILÓ6tÇñ¡CAè…AŒ1vee…PT B(ÉBH)Fqž3ƲüG’rÑT)™*wO6v»½¾¾¾ººº´´D)µm{yy¹Ì½Æd22–c y‘>rP×ÕRxSÒKÓs¹ÿ·¤B”MóÒ×_šNËžB)¡,ùƒµZMÓ4EQt]ŸŸŸ/å=åZ¬Ôöžw­œíBúÝý(ôtUõ<·bÙÝn¿Ûé¿üê/^9zô°¦«䯾örÐ}åÕ—t]ŸŸýÝ …ü IDAT¿ôHŠÛï<¥áïÿÁgþݯÿ*/ò7ß:ßjד4,meß".+¨RU1AŒ)¤Ûõ{Ó~oü‰O|Âq¼¯~õ믽ú/à'~òSÝÞÙßÛÛ8Ž#+"±0 -g cYúŠ¢`¦iZ–•$ÙÍíˆÇã,÷ý°V«Uls¦ÕÐUZªNffÛY–†V©ZEQ0– ! Ä 4ÍMݪXöt88sú>qæÎ4Ž–¢ßþÖ·5UgŒ*UkMÇuNŸ>µ87ôð±o|ý2^Ôê³3³‹o½u©ÓÝvâô|´ß×k ËV]Ç/ „ ‰ãapû·‚4UÛßï€dYÎs6*«(Šå¥•¢(0†œs*á8Ž!ü‘T8 \ÇåœSLó<¯Øöd:GË+«ª®÷ƒÓ·ŸÊY®jJ–¦žãŠ5UÎYz÷]wÞvÛqI"eÇqy–ÂH„$Ñ’i;;;;Çãñ?Ë~âòÇQÒ+ËýÓ”J”ÊAxž;1FeL-ÕeQVnÔ±m{4-ÌÏ>¸Úëõ½eU’8«Ö£ÑDÕŒ¹¹Ù}ücŒgãñð¥—^ì÷‡.\0 ãCO<îºÃfË^Y9pþü…üþ?ꪤi´Õ¬©ŠŒBŒ…`¢`E‘ë†,KÊÔñû½ÉÛo_|õ•7¶wvE}ñ…ç>ý ¿xñÒ¥+×®ž9sçç>ÿ…±ã®XIâȲLçlv¦¥kªi™¦©ÈMÓp¦.& h4w:ý(H†#? ‚,gÕŠ½¶¶â¹Ž¢ÊœçBa!‚xQDQè8B8ð^ˆj­'±B¤(ð–æ-CÁõ·õñ=yòè‰Ïþå_ºMÕ0BŠ$úW~á_|øñÀuò4#½ðÜó³í™$IUÝ2-;Š’cÇNæYñÒÙ—1 FMRyçœAUѺÝÎ]wÝ~ìøFœy–MÆ“z£‘¦Yi«BR"…eše™¦+a–IL‡Œñ………óçÏkª6E!TUÝÛÝ•e Øí vöö›­æÒÊbœÄ£ñ0Kgy¥bC Côч·w¶Yž—›BË™])w.aY––‚úÉd2NmÛAgLUÕ2ý‚ú¾êÔ©ýýNÆ”R*‘™™I¢%ë¡4¾º®ûÞÊEÓ4+•Š,I;››¶i!L{½ÞâÒr–å˜B¥7/¼ÞwÜqæÌ™£G]¹r½×íïîw¾ð¥/;yèämǶnî|óëßÕTK¢¸Ýn¨bY&Krš$œe@°< ]‘UÅ÷ÂNg¸yý!ê‘#G1–þèÿ×sçž³lóÚõë—.]>qÛ‰öü\·ß{ùÜKë«TU›i·«U c¤)²,“$‰=Ï/ qœ¤7nÜšN|„¨8ôÁÁD‘%ÎSUSâEÁY–R*M§“œñ4M9/r–ùž m6iž5j M¡[ׯ>ñáÇ{ý.þùOÿË( ã0üÊ—ÿ;Ks…(‚qþúoü²¢àS'OÞwÏ=Ÿýoÿ@è{.†èè©ã£ñpuý€¬Òz­J  ûBä\DI’±æ ÿC?öÁzÃb~üxi²(ë&UU777ßyçýgžy¾³ß³lÃܲX˲¼—B¢$ÞÛÛ“%5ð#IÇŽã´ÛmUÑç×ÌY 0ØØØ0M“eœå ÝžÝÙÙ9sû)B¨^¯;Ó t0ÆþÙuƒ X$iFÑp4ê÷ûYÊ4ÕUìš]1ßSH—:ÒÁ`ð¨ªjù:¡V«µ··ïùa! /&R–ó8ÉzýáÍ­[Fkaaá®»îºpáÂoœßÝÝv÷ösž-./mßÚÑTs4œš¦½¿ß½ýŽÓO>ùäO|øÉ;n¿ÿÒÅ-Y2@Íf³ „åÃ;Ž3NóœË²ŠOݰnÝÚ¬®®ya +ê g_‚«²b(ò·ßV–{/½ø‚®¨ÃA:1ÆÆã±ã8Dã©Æ©ë'Ñ79·¶;Œ– cÌ6L˜nȲ&ç¿|éÊp86 +JHÒiùãÉP’‰ª*š¦a*û¾ŸÆQzaè=ùÑO³$Í3ôù/}ãÂÛWýˆyA"iF”s£Ñ|üÉŸ|õüå8ÉêuÛw½‹ï^“ÔZQ­2?·ôs?óÓ=îyÉ>²°öö˯ôö¶;{»·=1gÕN;²Œˆ&TPbP~ëÒÖ3Ͻts{àù…ªÖçç×$E)“Õ‚žŸì%bŒä¢?ì±”µ¬öxè*íL'ßÛÜÞ¡’ríêæµ+7dÉÜÙs^{õMPðicu~0è®=œ"ˆ–uÍ,Û$eøþâÒB½^ßÚÚúÁÓ?,5I“‰Sª>öñ'·¶¶!šj £4ÍkµÚùóç)•KsK–egΜê÷ûåQ^7;;;YʃaïС Ó´5¥Y±f/¼q)MŠ(Ìm«‰‘!qÆž7õ ¢¾¸®¯ëF¤œ‹4ÉOž<5O}?TU=Š’jµ!Ä^½zyccCäû~à{yž‚‚qÎâ8,ŠBUõ<+¶·û®“@ ±œ#ÇqÇ)ç!Q ‡CaÙÙ*/ÁR»W+Ê÷*}…¥æ *´bãQ£"M rJclssóÍ7ß\XXp]!”eY¥R¹øÎ[‡7Öï¿÷ž7οިU?÷·C!ÐYt4t¾üå/O§c™®«š¦–s÷(Œ)¥33­JÅ‚ºŽ'¸`9H¢Ô¶*„{î¹û'žøðËçž»±yå#ÿè}ìµ×Þa…ö{¿÷fµúÃ~˜ñèà¡u»jM&£2Ëto<ç_^^®T­öL£Õ® Îr?Ë}U£ikÕÆÀ­[ÛÃáØq<ß÷Y‚҉Ńúµ·œ,¬_|gù•zåØóÏ]üÈ?ñ™ÿð™Z¥áºþÑ£'®^ÛœºÁÎvÿü/ÿ[·^=÷Ú Ï½J³DVå÷½ï4à‹ó³ýÎè‡O?/&™–~øÈÁC‡ÖÒ,&HþîwžBM¦#ÝTD¢ Q|ò“ÇD¨*ÝÛÛ¥DãôÍ7ߎ£c<ggç*vµÝšÛÙÞk6ÛÛ·vþûWÿîëßøêc=ªéÊúÚúæ­gžþaŮʔ¨ªR©X‡m¸npýƦ¢iËËæç¦œñéx¢©2¥àÐá ‰bY¢Ñ<É$‰ ÀdEÅHÚï®ÝØÚÛíŽG®¬èž;ív»ÂÙ™™( §ÓÉL»…0”ÍÒ<ÍRÆx!€xª¢A}ß+ï#‰RΘeY–i¹ŽSoÔÿüL»ÕïõV×Ö/]¹”òÌõ¦QÎ÷ww®oŒGã#GC,ÅIŠ@TE¿|ùòÜÜ¥´Ùl=|È0´ ðê*ø7ÞDˆ”ùÇO<ñá<Ïžzê©À¡ºfEQRv ”J^@xµz¥Ñ¨M&“¢¦iߺu«äØfY@ñÖÛ—æÇ£ÞÊòñÑÿËÿç?=²øãO<|ïý'Í ·Óé”ûÙZ­VEÓét<ïìÜêv|ð}(ˆ’$K㸜±C$Â0 ãt0O'¾¢šŽ úcÇñJ/š"k¥Þr¿³‡â\p.0¦Œ1„¢(~àþT½gŒmÙyž¹ÂÎùäS§r®›sw³sŽŒ-3)Ùðh„l0c°5£‘¡‘0‚-–¬‘ì‘,›E%7Ù$»Én6Ù¹›}cÝTuëÖ­|êä}öÙ9¬µæÇ¦ Lý¨¿…Â9;¬ï{ßça€$I’¯™s€‘çýDŽÕ¨T$ŒÇ*¥FµªŠÂôxCxUOœ8ašfÎÉ••JÅqœf³µ»³!‡1ŠOU¤~¿×h4&'Â0^ZZâ„1ËH’$‰¢”J)€ !`Z¡ÙÁÁ;òÝ!ËXÞÀÓtI7dY€GSšö{o¿35³Œx%IÉ×¾þ5€Ø™ó纃n†‚ EAˆ’x©T,;¾‚9§^kõâôLýø‰Ê2ˆøÀGޏע ‹ãtrrºPÖÅ«Õ ægÎî ÷ÿâÿôÜoþŸ¿üûÿö_^[½²zõÚÎÎN¥R•dUVõ^à8.Çs"dèꥫ':v߲̥¥’%‚Àå+Ž«WV9,&I’«A CƒãÔºý¾¦i.íL)(•J‹óg[­CYBù~÷ÝwßßÛÛKb…ü˜633Ç °$ÚÎîç_~bsëúÏþÜdüÙþcÇv?xç­………§Ÿ~a¼¿¿¯‚®é¿ø‹??65±¾y·Z¯µÛmˆXÅ„¦+ËË”$ ¡išˆ<ÏKR–dŒ±„Åi 8^ÃPÓMA ¥ Æ"(†’¤zžW,¶6›ª*ÇA*Š"'ðPR”8 ³,#$«Õjù@jšÈñy͵T*Õë›w7ŠV! |s’È—‹%Y–wvvÊå"BˆedlllÀ»afŸ˜©–kIšííí×jUE‘âÔ‹“ô“KÂnïpvv’²4˲4!ŒCEÃêõZŒÓÔÓ4vÿäÉÓÿñþôøÑSýæ¤J²,_¹téáG¬ÖjÛûA/ܹ»åÅdùìQÇo5Ƨá+_¼qýFµÖÈ3þc’1M• MBWÓQ€fº&¥Ì’Ôùi–I’´³µ]©Tfg§E!€¼÷ÎÛ÷Ÿ?õ;¿ó;ù×_§Œ]¾üI³ÝºqëÚ°ï:~Üs†“ãcû{»³ss‡­¶¢hKG*ø+_ýÇ/|í/¾†!ð#ï~ñçR’(šÅû³ÿôQÈ ‚Å’õУ÷+šÌhV,û]çOþäÿå9N’ù ôdIò÷¹gŸ*µ8öMÓh·;¶ó÷ëõz¾­;räHc¼nh¼=èÖkåcÇ–(ÉþËŸÿy­Z]½z³V‚`ÐïµÚmÓ°U3R’dsssûÍ=^â;ÝöÞÞÎÄD£×ë¤q8;×P$c `ˆ¡‡f Ïõwvw+ÕòæÎæh4,—ŠýncŽç9FÈhäôCÓ5Më´û‡‡-B Bóœ$‹Y–J’hš…|o…!@EJ!$Šc æ8ˆ‘¢Ê~"ÙC›Cx4rÂ0 ãÈ0-ŒxŽ;ÎñS§Öïl¾ûþ‡®ë¾yçî¾ÿŽ,éYFÇ'«‹Ës¢Ä)ŠT©T.þøêêÕ[”Ð8•+%„µ ð“$|âñG8(²4ÚŒ‚UeŒMLL.,,\¹r¥T*---iŠB²¸X,î+Šæ¹ÁæÆîäÄ"Ë„GxþÒ'«’¨ýæ¿ú­÷ÞÿñíÛw×no¯ÞX¿uë*/òº©\'I¢(“8š™™TQyĘÀKi’"„¡’,b‘Úõµ5A”`£ÑÂLQ–ÑÑÈUU†~µV± =Ž“Aäº#Ï÷ƒÀ‡ꆞ‘„QÀq|’$!!‡± a@C‡DÊÀÐê†Éñ¼¦Âi Ÿe™¤È"M5£8åEygÿð™çž¿pÿq¿öë¿vký–ª*;;{¦QHÓq4]~š&,Ë@–Ä„fª*ʲ€1×ï ›]žâÈ$ÉñFûû/}úÓ¢ ]:ÒmuTQ|öéÇ»ýæ3/>sôèÑÎA¿Q™ŸžŒÃ¸?°UEŒrˆq˜AH+Õb’†–e Ÿ¥¬Ý꓌ST}lºÚi7—æçEŽkôm»ÝíY…Òõ«·¦¦g.^º¸²´ìynèzçΜ­×*ö°ï:ƒÓ§Ž]¸p®ÓïEiR®Õ†øWí{ó{oôÚƒ8N4C_9±²rtYRx]SUIùè½W¯Ü®V~à8}üÜ…ÓMSENúæ?|›QÈq(ˆÜ8KdÙH’0#éSO>QÆatppÀaqwgŸ1Z,²,;88(—ËGŽ.3JyŽSusc«uØî´{v×ùà¿ùÊ«4á*åêÐݹsï[¯~÷™g^‚œtêÔ©ZÍùØSÝv§78ÄVJÅ’©÷ÚíZ­,cY¹RãaE!@eØ÷SEÕZ[•Rqw|r".B^_úÌ‹Sóc7×®¾ðâ“­öÞËŸ{)GW®~`öòç>wóÆõÕë×ffç›Í¶nZQK’„æ«_~í•ïîmló²BEî̃g—.ˆF”XZñþöÛý¾“QÖì<úÔ㚥ó23ÕBA-ÿá¿ý”¤¶7ˆ@,ªR{º®×ëõ••ÙŒøƒ($J­v³Ù<@ö½R©èŒ† ¢Äû‘g˜…Ù¹¥o|ý‡w7n..6}èl–„ÝîþcO<¶¾¾þÔ³OHGÞÀóíÛ×WwöÊ•ª3òUÝü@Õ4S×B?‰ã „0ŽÓ qÇ‹ý®ÓÜoiŠ&p¼ÝÊQa Ä$ËXž¦+¢ÀEa 'Û …Ñhˆ1Fäl÷üÍ=‡ضíy^_v]w0ÄqœBmÛÞÛÛ #¿X´IuC^Õä0ô$™WU¹ÕÞ}ýû¯ž9sâèÑ•óçÏC£0Y]]ºCEÓ,ËÊ2Úë ŠÅòÖÖVµZ7M+ô»wïEQdÛ6BÀóÝ{Ûw[íÝÙ¹‰BÑèõ[ª¦BDf1€ºÝ~–2Œ8’‰}?œ“eüƒ7¿÷½×ÞÜÙÚ-˜–"ËW._úðý÷tUùÜg>}dq¤éõ+—fgoxïîš"âÀóö’,Å/ÊÒÎÞž®ë†ªA€¿òó¿ð·ù·ˆ¢„ÒÐ?ûB–F[››“IUÑÿàßüYÒ†Ž=·8û©G€˜2@ÊVyíÆúõ«×‹¥ÒÄÌdoØDG\–’_|±^/!DH–u;¶mÒ4™››T«Õ……Ó4;Ýî ß:Ãfë@ÅÐ÷Ó$-•«Šªñ òä)EÕM£èŒFƒþ@’å¡=d÷l‡ç„(ŽG£‰“©Éñ,É0†ý^?ˈ¦jÕj­Ù<Ü0Šƒ8tÔ¨ IDATÉ·“y{8¿…a *¢aèÎpˆ è´Ú’ !!D”ßU6 “1ªiZ’ÄŠ¢ÈÊOH8$ËDQHÓ„RB)€åÐ(ŠN:õØcݺuëÊ•«žïÊŠV­ÕEIØ}‘( ®;* ÿìŸýJ­V½yóÖöÖÖ7¾þ8J)¥•j1–Òl`ÛaHŠâù!< )I%Yl,,.fY¿s'IR˲ŽY!YÚi·cãvhœµõÛÉi7ˆ›­v¥RãXY\À€˜š¢ÈÊA«uùÊU/Ÿ8Ḯç/(ŠÊqüÁAS×”‘cUË s³3S žç?v¤`š}ôÁ—¿ôÅŸyùó»;Ûš*˜Y†–Qì“(ŒNœuÎ4Kív;ŽcM“Μ;Ûö‹Å¢=ô v†. ìÞÝ­rÁÚßo=üðý^¯ÝîF!áðp@ È_€dQRe%Žã(Š,ÃŒbwضEŽO0Ö4 Qeº®òVU5¯I’u;I@1AxçȉõàææÖÐq!²¹n@ ë÷{,#ã“ãW.]-Wª7Ö¡ÿ­oÇ´Šªª6·¶LY~èþûQ_–dÓ(ÎÎ/éº.Hª(©¦ |ߥ4 zÓS§Lkbgën¥R½øÑEI’®_¹d˜Ú³O>þɇ¸öà°ÝVtÁôS÷ûÞ囦^ôÑ'¿ùê?ŒOM«•v·%qÇ‘‚iñ<E>ž˜™kn7]ÛÕ,«:>váSçßþÑ[•rir|êµï|oog8ñwúüÉéÙ©kׯÔj•‚^øÖ•¤Äõ¼8‹f#Ä ªè<òH8”%QnܹW,TÒ4Éoû¹Ô$ï ò‚pôäIY0;ݮ煵êXµ1^¯‹õ‘mÏÒJ¾0—–½4¥ÝéR“(JãDx×\oqqÙó‚0ˆºÝ¾ã¸CÛIâD`Åš¢J!@©y¦iB àf(’ìy®¢‰”2„¦é#YVr>e$ßY)²,p<¥üĘÊò)Çq¢(ææŽ½¡ãaÔëõ1æ@®çKŠ|pÐrìP¤'Ÿx’RZ)•žOÓÌ<SÆXEQ˜& O)¥1@ˆõzí”$•jeóÞN¯7ØÞmj²W° ÛÛÛ'Ÿì¶»SãSÇŽ(Wë÷Ê·žyá…3ç.¬^»üÜÓOH@šò¿´¼¼ßjê–YoÜÙØ#œfq¡`2B%QHcß4”¥Åiž‡ž¦º´´Ðëõ.\8¿··xx8¿8÷ôóOmÝ[[»u;Ž˜ÈéíΠV«[¥ÒÚݵN¯ÿ¥/ÿìþAS”dQ£Œ\*×Ó0EŽÜ>ûéBÑ ºÜ_­RýƒóïL½H ãxág¾ỗùåYqº¨ÿÍ_ÿ‚Èü$‹„ºªK‚râı#GãÈK³,³ÕÕ[•r cÀóœëzµZM–åœó&Šb”%‚ vÚ-AŽ9ÚïI–—üà­ݽ{ÏÔ‹£‘?>19t«Pœ_œiâù,+ ÏŠ\*š²"5Æ777mÛÎ?éü·®ëµj•d‡9ã8Š?(XI% ‡~!ð}Œ®k’$x®(!(I2£ àp˜ã9^U4œC Ã0Š¢ fffòd‹ïû†a¤iÖh48ޝVkžçB+•ÊÊ‘•7¾ÿ}Ó,=²äŽl’DÕJic}Ã}U×voäzQœBÄ~@ËâDàx ¡¬Hí^롇”dÙ0K¯¿þ¦¨T(?~!zúıÖáÁòâ…?ü`0iºÑhL¬Ý¾Y*xÄÕ=Ø,¸©ùz½Q¾»qkan–d÷ð`eiéµW_å¬X„Œ€,aD/•›íV’$~êS‡M]Ó(¥² àŒø~lše¸Ju¼1>³vëîõÕuYTÓ„˜ª1=1…œh4¢ÀàÂ…Q«'b\(˜Œ…§Ï³‡½R¹ªhÖÝݽS§Ïu:]ÃÐUUÁEIÄ À€‰–UÈ(åþ©§ŸD;yê¸aèƒnÿµW_—DÍ ‚É©ñs÷Ÿ¶ÎÜÂìÜÄì›?þ蓌¦^ì ‚ q2#À‹¼gŸ{œ²ŒYê÷ìn·;;;†^½>–ecÀ4MQ”!AÇí+Š@HÔï·,S}àþóµFevnüÂ…So¾ùú¹s'ÞýàG(c‰ª VÑìœR¡|xتTŠº®íînKÏ ‚’œòÎt©TʱõyC?϶çÓB¡$qùVÇ‹²GI§Cžç!Qɲ˜¦išÅŒ0 EÉ%uº®K’ˆãÄsƒ••£­$É®]½633=7?À-—«#'øè“KSSÓa«šæºn†VÁ:~â„aèQ9C[…í½»Š,5*µÉzã›ÿðwÏ?óð¹S gO-dIôÝo¿¶¶¶.‰š¦™ë3ós#ßïô½8MççxHL4ª£AG‘Åv«—%qÑ2öv'cƒ^wÐë !êözŠªöúmŒP©`Fîå›7N>=3=óÕ¯|åöÍ£­Ë2‡äÄ Ûœ=wæeð›·–ÉA¬9?gßgYŠ/œz¤Óëqxôä‘sçOÇiÔ¨×eA|ÿGnÞÝÊ(c>ÿâó²&ÈŠÐhÔ‹Zá÷~û÷…Q^0ÆðI’œ<}lyeÞõqà§7nÜâyÜhTyžsœQ½^ϱÁŒ8ŽäýÑ7¾ñ ]×*•Dxgo¤ýo¿úz¡X†Xìô…b•ncsó­¾M »uó&/à¡=ÈH’&ÉhäLMNa$IƸ^¯ç;€ü5+Ÿ/@MÓÌ3ŸžçaŒx“Œ(Šš¥I’DqB@MÓLcŠ1ö|!Ä ¼išq’„Q r@F OQ¥(Mӌ¸P(ü–?£(Z[»37;wíÚ wäC€ff§¦§¦¬‚„}ß ‡í‘pœ¨i@0McQ­Bá7ßô<ï¾óçÇã»{[n0Xœ[èwúÍÝ}C.N œ3lŠœôäã•Kµ{[û?zç²aiS¯^ë ÉÆxC»ŒEKuì~­Rm·zB’¦ÇÙý¾ë8cµÚhäø^Da±XHI"ËRàyi{Aôëÿâ_œ )¥èì¹sI”žó¸À1Èb€À)4Í Vavvæøñ•”ÒÃv÷¡‡ç±twcÒlzbLSEš¥Œ’8Ž ƒGÉa`¹×Ó¶Q&qZ©Uƒ(à'Éxcì ÷ïíîÝ\¿»µµµ³µMI:==u󯵥ÅyÍ0UÓ íGo¿oË„¢ÚØä¥«W'¦§Qcœ‡°AHÓTx¬áÀ‰è³?óiÕTyÌ鲜EÙýÏ…y~ä{œÄ?üèƒY( ;wwÖoÞq/"±lJ 0Iiœ>÷üÓgφ67v›Íf©lñ<Ô5ãxJ©iZišBªªooî·¾~Ûƒó÷ßG²‡#Œ¥voXªŒ]_½96Öð<çØ‘¥rÉzå¿ÿéÓçö÷öv†Ã ý~—dL×ô¡ãPJ-Ëj6›qSJs u>‹²m[×õ\è‚1Ž“ˆ² Hå9œ¦ñÊÊ`Ôó<@Ïó¹IaŒ"ŒBD^4M3<¡xaèç§N’1Û¶sÉï`0È/’$---4›årŲŒr¹46V›_˜UdQ¤Vg¸ßì»nìúA©T,NÑÔj­¢éZ…„Pß÷²4“$! ý4Io^¿¦©²ªÈ½no0)²Å2(Ë ca&)âîÞA±<¶qgçÈòr‡<ªÕ‚=ìei¢ªf’«huºí¡c[³?è " «Vª†QìÛ½Œ$=üàç?ÿÙ±zýâÇÛ­ž¦¶··  ¢$„§*2âqÏîׇ­öÜâb¯ï(šF±Y°jµzF²û)v€B)Ããå%†–УO?å1.™Öáþá'ï_ŽF²®NÎLœ8yL‘®«ª$½÷öûÛw¶)³ ¥)%¡+¢ò©‡ÏK2ˆ¢tëÞÞO<…0C˜Š‚(Ë Bȶ‡¦iò¼!¤”•+ÚÊÊ\µ^¯Ķv6{ýÁ‡Ÿ|¼°¼ro{ëô™S—¯~ì¹}¢æþÝ>~¿Rb4»råâX½†è÷zá(àE!˲ååeßÿÿarra.-ÊNžç! ‘«Uk”2J2$ $K<ÏËbÇqœ$B„1Ïói–™¦)`ÌE¥Yœl1Fùµ‘K eYžššbŒU*QâG#;ËH½^Sd¹y¸¿µu÷£?ˆÂ éå«·/]º1=»(ryIâFtSWT­X*\ouõZ­ZC6›†®ªvóÆõS'Onmï$z‰b¬ˆjF’RYwÝ~»×E“ãdEÆ÷6ÖN_866ìtmÃ,„‰_®”ã4nuZcãc 2ˆá`h;W35IcbÌ0õ¿û›¿¿±z£X(OLNOML íeIML5¼À5 …ƒƒöÚÚú‰§u«XklïîéºAKÓ$Ÿçö‰ ~¢WRUÅõ½ZcL¹4‹!"‚ ´;Q” €³,+‹œ€ã8 XJ£”jûQ%^Á˜›š™TU%wËxž—¤©(põj04]7GšÄùÒÐõìƒÖN³µk4]—ãÄçx895vüøÊ‰ÓÇn­¯ *i–Ç~÷ÿþƒ/¼ü¥3ç.Ì-̼‘ï|Q”9AÜÜÜ\[[ã¼pö\¯Óm·ÛaœÄ{ÿý÷«åâx£ºMÆ@³(t]w´uo;Š’(Š“$-•J9´˜1 2Ðé Z­ž$H,c¡H<ßÜÛõ{9î;‰S‰¡Ÿ|øá•¡ãONŒ‹"Ç#@ÓÔé÷ EÖu%ÍÒ^·CIÆ œ(‹š®Q@£$’%‘ã0ÂahLŒ!¥4p=g8B±,+— ‡x#È¥ ‚Ga,‰2† °`ci‹…ýý=˲8›¦™[}UQ’žÇ8ô½zµ:èõÊÅ‚3t–Þ¥ðöµ5Œäb}R-7Ožùðò'—¯]~ò™'‰÷wHB@§¦æyU©ÕêΠŸ¾?EI*JJ¹W¿ù:˲sÇ—Ï_˜«[m¯7ÊüÀ²Äé‰ »çìïuïÜkuÃÌ ãáüäø½ííb±è¦ Öa§Q¯èÅA» =WyÈ`&V¡ÒÔ B(ê—¯¬Þ¼ug¯Ù|ò™§ÏœYnìèŠT)ã0Â<ߘ˜:®Ým×êc¥zMÑôV·sß÷ínm‰"Ï bþeÊ7ª!ÆXœ&xyéL§Ûûü_.×,IB˜!YPÿýü¡U¬µ{}Ä£>ý /FH¥X FÑþ»/+‚빺Y@Hôƒ@òó¿ð¥Ñh ‚ !EQ굚eY333Œ êõz¡PÈ3y]‡úÓ¦!¦ª*äxˆùGy´1>±½½õÈÃÞ¸q³Voô£¡3š››¡,C¿X,Ôk•$N’4‘%‚$IšMžç9žGMŒOä·ååÝívóÖ¤,ËF’$Z¦…9žf)T–$„¢hQÈ’$ÊHê/pª¦ ¢À ”u]cŒú¾†¡3pòG€ïû9"c<·0×éuvvCÏ—d)!™ŒºýîÅKÿñ/þl¿Û‹C_S”k—/ÕëYà1†$‰' Ç6»¦U´ŸƒÜáÁç ¿ðÙç£À[¿{gn~±TKH¢)BP­V½8QJÕâØ¸í‡ÂOÞ{»R) ö|çü¹3«×V+•²3ŽìáÂÂ\F3¨¬(¡Çag™iZ[[[ÍæáoüÆo´[UUææ£ÐOâ”C¸X(Bˆì¡“fä½÷Þh4$MkLÙÃQ§’$saˆrlb^¯Í=<<>>?tÝ—>ýi?Æ‘_0Í(H_ýÖkQL“”ÔÇëO=ó˜؆®UJµÝ­ýðãbÑ:l5ÍB©Õê ¢8Ö¨=ñäÃaè’4ã8P.—‡¶Ýh4²,K3R©Tòe~“ÌâÜP!¼téR»ÝI’Ô¶G²¬]¿qó½÷Þÿú_~½3°¯Ý¸9=={êô™mBRM‘býn/ð}M72’å‡ a…Q¶šº®Q’Ùö@QdUU8SJ,ËtÝ‘,JÂ|`•d©$ò)IH–ñ<§(Rùª&#xK² ðB–1UQÇE ‚$±n¨eAÙÝÝÍ“XùÒ]Å ýÀKÓtii1N¢n¿;9AþÏ¿ôOçf&Ïœ>ukõÆX½º³uÏ4´z­ÝØØ`„>üЃë›ÅbyëÞÎÔÔÜ÷¿÷†¡ ªÈ…±+ˆ¼ë‡¢ˆfõ±ÚDÅ´ –ƼZ¸µµÃ¥çxõzmªZŒŸ„Ò¬X°(M~è‘+—/É’ÆÏq¼ º¾Ç:žgZV–džëUÊ•~¯ÿ½×¾77;§iÚG¾W­Tk•j¯Ûít:˜çŽ=Êq¼¡é KËŽç{QÔhŒ{ž'‰£ aœw}=Ïûé1Ù<;»2r½ññÆÔLÃ4än§{låä·¾ù]ʬéAèÏ/N‹"äâ±X4ʯû{”%‚(NKå*e owNžsúLèw6^zé%YQÞûàŒ±,KÝþ€0Ì‹2Ç‹žçJ9ŒdEÉÇÑš¦åä EQ’4ņQF˜{áÅ$™ïöZ“ãÎðµïü@Ñô‘ëKšôü O…ÑÈ2tÄp’¿úoßžÐb>Ë@Å‹ËsÇO¬¤i˜%)ÆX¥üA+ÇqQœäÓØ|0ý?¶xtèØ‚ 2Æ®_¿ÙnuW–ݾ½«šÍ[««Q’aŒ3 º*ûžcšY–&ŒÒ‰‰qÇÉ’ˆ $áø±£×V¯ÖkÕv§m† 𹃞ÌuGÁ8Ž$IÄ<¤$QFa‚(Q”Æ¡iš¹ ï?bŒ•JµÛëæØ>Y–gÈ(ð\¿ÝéøO5LƒP*ˆ¢çûI’ÔêÕb¡àù„ÜôìlŦe]_]ÕU¥\ªvZýï|û»’(hš¨Èœe™voG‘a˜÷¶wâ$ÑTåê•‹?û¥—æ§jõêöÖöþa³T©lnn<úèßýô‹›wÖzCßIéGWo¨Å 'ðAìÕËÅ;·®»®«i*D,ðü­{ÛW._Ó s8¢8 bž÷<Ï*£k·×!ƒ’( ¼Ðëvï»pßõõ¡mÏÎNÿ—?ÿ‹Ù©©S§NQJ÷ö‚¥r¹^©5[N’Í` ȲÌñ€H…<½;òsR–Q,Hz¹\ûêW¾züøJ­V«ýéÿóç›÷vÄ®ëONOŒOÕt]´ }ª1}õ⽃ týÀçE@Œ9üð#4Æ+iC(¥QbŒ£0ÌýÊ”üv•Ûò£Çá‘ë  …â+¯|3 SÇyn +òÂüD0rÏž=]®U¡sòÔi×qëõÚDcLùJ¥HIÂ(U©^ãy. "A¯Ûµ JÈA³©©ª¦ªÏçT´\—ß !qaû~Øéô&Æ'’$I“XU5 B­Í³ü¹Ý¤X,1FÒ4.—ʾïÇqøÉ ïì7EQÈ5Oyj#÷¯ŽF£Jµ¢é:cPUµÕk7*åÚW¾üÕ;kwæôÖ;ïüð}×%qR­•N?²‹‚à IDATbzE£4=33:/„‘W.3“•JÙ”–Êå8ŽM«hjÆÌÔĭիΰ·¸|äî~kc¯³}Øí;Îââ¼"`»{h¨V½^ó=9ª¢ýÅÅ…+W/ÏÏÏîïîßÝØ˜œžòÿ‡@<^¿sOÑtYÕÃ(ëšžÄiµRBäã«ü€°m»×·‘w¯ÜüÈöí?û¯õì³ÿèÛßy3ð,–U=ö‹3gårY”Õ8‹KbˆŽ¢`臲©ŽM”Ξ;ûA8 B/\ JADQ#Œ¤¹kAŽd€R€1 #ŸÐ$‰]Ó†v_à!‚$Ž]Jâ“'Oˆª%ñâüRY+N pìì©“’ˆ¤4‹U…“ŒÓ5)I†«¬ü‘¢éS³À奅‰ñ1CÖ^RYá%CÕUECGa¬Šú g#)Iã$”T‰!H“T†NRbE1 C/Tô"t,ÊŠ¡‹š˜ŸAûdq˜‘4ê“Ü÷е+7/öÝHä$Š€N¿W*š•²i[ÝÁÁÐï#‰ñ2Õ ¨PãdDL2…Bkc«µ¶±{xв4­Q¬ :~µ´”%æÖAûÐD´2]MFý»wï/œ˜:zÕjZ}ðX”€.¡#³óîÀ­Z•ŸûGŸ9¶2{ýÖîÖnóÃk«;½þô‘©¤ó@|Úîºá¡¢âBÑð†>fÜ^k?HC/ñ¾ùÝo†±síÚÈíS/Ÿ«VK§Îœ<}ö\¯oOLO|ðã»v/ (Ì@F!Dæ9ËЃT”Å8EY¢ Ž\_7Š„0üàcªªÔøÿxzïh9¯ó¼wׯÓÏœ~€ƒÞA€ ÁvIeÑ”(J²\äD’eߕ؉-YŽ—$ˉ׵ïJ|ߨ×QlùÆ*V¡(‰”¬Æ€$*ˆŽSpúôùú÷ívÿØ0ñ0À föìýîçý½Ï3ѨU]J¸iÂýÓ÷''&9ÃÕF}rfºZ¯5›•ÒÈW¿üÅ…¥Ñ± ¢¢R÷g6O$Ép÷î­Û·M3–Qjeyšç¹m[aBLÓ„°B`L—Ú;cÈxaYV–å€Ç_ɲ쩧>¹XXX|äч¢¨×ï Μ:ÛëöÏ_ÛØØ¹kg¿ßëuÛRJƒ„ k;I0ŒÜ’Wä,K¹ã8­V»R©–K%)ÔêòŠïûŽëJ)¹ŒsŒ1„8B­ÅëHów5“ï2ìzœ!dY¦Tܶ-Æ q§Õå\åYîy%dQišj ÇfY6:Úœ™™¹xñb§Ó‰ã8Ã0‚áФ†IðúÊÍ$ !ûöíëêl:££uÁ2×s®_½”D5&F)ÆË7oŽML,Ü\$Œ¸•ïýè•M;˜šØòü³ßÝ6=ÙY¹Ý÷æ ¨¿sïΑqßóý`]»tmØ&G'ªõRÄ{öî?°ïàúú:Å4Ë’0 ¹ÓS3Scíö¶-ÛÚ­ÎÃ<ÔhÔ.]º\.U:­ŽàÕ×^ÛÛA¡8Ò´Júú¥£–5§„ÄjmR)5”RB¨a˜øêµkŸû­뺤^swïÚ|ï=÷üÏÿ÷‹¥Rä–Ýós¯ŸóÙowyiµßî§I Pú ¿ô‰Ý{wÌnyìýï)—]^¤Yšä¹"Û¶M)év»œ3Œ1!XƒÈRIŒ 5ˆiRB ŠbÁÕ3Ïø^ºx)NâË—.A÷ìÞ³0¿¸¸¼\©7Ú>¡Fcd4 CÏ󴬧2¥–&ƒzž? Š‚ ÁñèÄî‡|øÞûŽU«£?üá‹üŸþlu­3::ìð‡¾Í´i£Q;¸ïý;Ÿ{î9œW_;·¾Þ—’,..OMN„æØZ–É9w]GëiQ,'K!¶í΋”±B)Eítú/½x¢×´Zívÿ]Rñååå=»÷&qšå¬T®¬¬¯5G›ŽC+6†Ãz£.˜0,ê—½^¿mZæ 5GëLÀ¶í³ív«Z©¸®ëÚž‚ Q©T²ÆÁêêêÅ+6ÏNDYX«MÿöoÿÁ]w?Tòꯟ{ã·ÿíoýÕÿøš¦PÀ´Ì4cAxžµsç,F\ˆBš™a^@RJ}ß“R jµšã¸ŒgB0)EžçÁ0úêW¿Î é:þêê²iѼûå/V# ÖFg8,ËÙ¾sgÊò½{¶/\yÃó½×ϯÖjà ]D!"Ä6lÛ1…Õš—™àŒ !§Iæ¸^„¦e†•ey’¤qU*­ÄèúO«kàŸû˜EQÄq¬!œ<Ï•’¦eè_.ºÝ>/„Àö\¥€e;¶íPÃÄ„Rj˜¦Y¯–õ‚›˜˜8wîÜùóçGFFg¾k•àÔ0{ý¡åøn©,¤rmKJàÚnžññæhš¥õjuîÆõ½{vb%¶nš©V6ÖV=ßëv:®i=ptáêÊÉWß0Ýñm»nÿ¿þëŸ=ýô/ÅIÔÛ¶ollÜ$6}é•þÓÿ‡?þ“ÿL1Ú»uÓXs|bbfó¦ÍsKK§_ýêÂщñj¥Æñp0 ㈚Ưÿú¯_¸øNÉ/ :÷>òèÒÒB'Ó›f%@aœ7GÇ”dBý¶è‘¤4M-Ë”’k=!¤¤ŽBüÈãïûÑ …(²>Ùô‰AªµŠãÚÝVhš†íœókW¯ÍÎÎv»ý ˆ Óéö{AT«U.x^õ×®Ú^¯ª¢( „&54©‡u…&ûÂ0ð<¯È™T Ûéz¾—¦Ys¬© 2„clzzzqqÑ2 ϳ¹(jõj«Ýzÿã÷{Ã+—. z]Éy”D@ Aš §Téã,+¶nMÒ”Ó0M„áH£Çqž¥%Ï…J¼rüårÙ•\º~ió¦­yƪ婳g/¬lÄË«ýñ©_•ÿð‡Ï?òè}÷wõïþÝoxUç?üÎG?úƒ˜¯¼ôÚéWξýúij¹[¶ï(—«c#Ín¯u}±µÖ]ARY–³s÷þnw°¸°ÔéuÇÆFοqny~ñþ¸~cnbjz˶]gßxktl H Ò.ݤڦѠE‘kµA¢]<”EQàó¹Ïే?ýÉoŸü‡¿ýòÄÈ4Ë@§½ïñ›‹s;vÌÚI’hyi1/Øèض(Bh8@Éÿ{Ç0M"$“’) ¨„ =s×ï÷t)€ @õÏd47¨µ¶²úö›—õqÎ !’ͳ£;wì8qât½:ž 3Èactt#èMož¨zNwuÕw\ÛvƒA§ÝÞ¾m+E8‰Ó0ƒX…HÇG&)2%Žã£xËÖ-†ifyî8ŽÖBÛèoÆXkzZ_HÓÂõ|Ûq³¼ðü&TÈ…ÄQbš†É˜  â N# E–Ý2nÐ×ïr¹œ$I­Ví º+í¥òHéµ3gÆšÓsWæ À§ÇR‚V¯×‚¢™ÚäW›KK•j3fÌr=bárÕK²¤?˜–])Õn.̯­.ïÞ½‹–éx¶YÖŸúÖO¾?µe›ëUÖVZßúÆßüËOÿJeÄûßø,*øêÜÜxàüñãGvîûýßú[#ÍÉ›¯œ{ãÇ/œX¼vqËÄØG>òäôöÑóï¼µpu-ÏÅúrÐëf;vìI’A§¿dÛཿç?üq$ÝþpyemÓì¬eBòJ¥¢k)ÝÆK©$S‚+–s  ‚(¨ejüëŸû¼c›âõÕÖñ—N•JÕ0*ÕR­Z £a Š<Û4=ÝZ[Ïã$$”y–+xÁžþ臇ƒ~µZ*Š‚RÃ4­¢`¾ïSjh7Ž,Ëõ !lÛ¶X,Ërß+¿ðÓ“u¸(³[¦êõÚéÓgxàÑ^«á ýZåý¿0ìu¡ä!Ûq&''„ãµõJ¥R«T|߯V«"Ã0ŒqÃ4J•êsÏ=gÛöúúº&vêõzQ9»åz¥««R©¤å‘öy‡êæ—î0Ú–9 ²,ÕÅ–m[¡õõ Æn•ÿF£Õjé3 #–ç¶I•’£õQ“˜ó×®X4Ëcµ8,Ã"Ô(²¬½¶¶mvæ•\¥ä…eŠTŠ ÂrîºåÝ»öݼ¹ÅÜ´*Ž?òÒ‰sõÚØG>þ‰?ù“ÿÓ0Ð7ŸùúK/žðÎÿðä§ÿõ'·?´¥º»|Ï]w?|øöýÓS…dß?uâô…7Ÿxð±}c[úñðò;óJå¾C›JµRúö3ÏÜì¡=;w?ùÊþ·mݶóÄÉ“[¶n£Ô”JäyfY–¾Aë (<™†¡w,Ã04Æ¢K[üùßý}JÐX³ù_ýÖÍ…Õ÷oÞó裇>uâd‘¤JÈ8ŠÂ(Š'ÆG÷Ø ¡Ì²Ì0 ιþö3ÆlÛîv»z?ÐÏZ*•´•£~Ìp8¼ðÖÅ·ÞºŒ€Áx–¤½½ûvápm­iÄ‚qËu†IôsŸøϲ,ަ'Ç(¥Ë++W¯^­ÕëÃáÐv×u‚yQ( <ߣa\0VÞíõŽ»ïÎ;ïxñÅÊå„ Ói{ž+•ê÷ûŽãèCÝ1MSpÉ9ϲÌ0 íÆ¦Å%ÆØ4<Ï…à„à[ÔFZèG666|ßÃ0 â¸ïß·)Ùiµ×WZ›¦§wíÜœ¦ÃKWß"Ô¬7Æ‹BÔÞ4=„J$DX‰|ËìŒmPJ°c;’)BLÓö#£/¼|b£Ó/Wšo_¼ñ‹¿øé/å›>ô¾F­´{÷Ö_øÅmž>yâä×¾ò­ÅÅõ~ô©]3»¦k +™´¯_8µvõí}ÓÓE˜†ýN¥VÝwÇ¡ñé©ë¯^8÷Ö–éÍÍñ±»ï:„{åÕ×ßxã­×ϾûÈ=/\ùþži޾ñÖ;–ã¤i±k÷n!D¥;uºTÐ*Bˆ3†¡~õòbŒy¾‡=òϵƒApü¥“IȃÈrÌJÅû¹}xmmÅ÷½$‰_xá…4Nâa˜EÎYÉ/õûÝ»Ž©×«„`”à2IRc»)TžJ‚÷íïý{jõÇ'6[Ê+ܬdv‡}‹áÃ{¾qýêµõÉzsnîÊ;ö˜)9øæbgñÆR0Œ•O<ù$&tue}t|\J5”„‘&Ûô;cYVQÃá`¢Gÿ‘Þ̤RøÞ‡Þ‡!›¦·þäG/j*¨,‹În™™šÙTp159ó“ÿØÀÔÀ”S2ÏRϳ9Ë'''}Ï-•ÊqœÕšöÔÇŠÞ½4±únþ–þŒoܸí÷åŠ oLMÍÌÍ-bl)& …×oΛuMÓ5Í4 8ç¥Rɶí¼È•R¦mÕë5 dšgÕzÍq??_¯×cív[G/U*•^¯¯-q´@ú®™Œ¼( õŠâœéÉLŒn¹)7 }  ”ÆQœ'y¹âŽŽ4,ÃN⌠A-”Ki56­®÷—Vºs7×$ +˃(æÖüêH£H“ÄuËvÊ¥R^d+­å±ñæ½Ü; £(ŠÒ$}ö™o5jÍg¾þüÒÒü¾ƒ;ï¸ëðÊÚÊýÞT¼ªÌ‹s§Žÿù_ÿù[ —æ;«O~ô#ËI:}“•~Û4,ϯLI¢ c%Ë««*a£c$ Ó4Ù:»uÿ¾ÝÎp¾ïá ï\®TªyQŒO0Æ!ˆ€¶ÖÑÂz9ŽÃ×¹:'F÷¡ ¥øÉ§?>6:B1¹xáòÙÓo ;½Öm‡oB]ºr­? ç/¼ýΠ7RQ˜¹m›i»ÿ¾$Ž9ç®ë !0&”R*!$¥F’¤¦i•Ë„pžºÒr]/M3Ôõ—æ— jm´Ö)E·9dÖüüÊäÔŒ,P Üôœ­Ûfmè•J’ç†aPÃH’DH !4,ÅX¡ÕÎ,Íõ*J) Æôÿœ¢[®ëÞ¼y3#Œñ`0жzÚyaçΆaê/@††aèD$I(ÁŒ±J¥ÜjµÊå’º”RýÞ0˲͛7·ÛíF£q+mÕ°|Ïõ<>wc¡RAÄ’ÖÜò`a~iØë+É â¦iw:ƒõµöâüâ¦Í[j:˜„R*¤²Ç÷Ü4ËWVZËK«ï¼}ù¥Ÿßµugdut£µv×±»ëÍú~òã`ÐÿûÝÔLâ9"äüÅåW_xó¹ç^ü§SÇŸ{ç>…''v¤Dô’Jµ±žKÝ •¦£–7¿²jÛŠsµ¼´Î„©$#ýôG/Y¦Åi½Q?ppÿèÄŒp×îÝRKW.w:,M{ýn­Ñ`,£á£<äyFP)´¾¾nY¦þ0<ÏÓÍ#=”lYV†ºîëv»zZëȇ0áû÷ÝÖí È<!xõ•ÓË+‹7ofQŠ!Jòl|Ó”_rGªU‘ç®exž—f™"ÍRÎ9"زÌ4Ku1' †!•R 0Γ4‚EŽT@bŒlÛ@jA ”ê÷ûãããÂZ­¶¶¶†Ö)TŽã „ô5¥T Ð5{š&R Ý»ÐÅ»”²ÙlꃠV«&-XQ®8I–ü ÂÖµ¹Žd”fQŸm,ÍÿâÇ~öŽÛ¡ÈÃ~ è˜%ˆ­óo¼1Ù¹{G«Óñ}×t¬4I§‚“(æW.-Üœ[΢â®Cw÷ÚÕù•Ý{÷<ù‘§–7V{ÝÎ?~íËõª;9]Ëp¾wšù}à IDATçžÅU Ó²ŒZ%sÐéw®^¼qÿ#ï ãô»Ï<»cÓl´±QÂXÜiŒž{ýÍ~?Ú¶c!VQäýAçàíû©å ƒ $$°l[ A(f\8®­½õ±£5?¥g\ §šÖJiÁþÈǾZò}×ÿ›¿þbµÖ\\^‰Óèñ'Ç”V*å4É “>ûÌ3II¥kT¡èý½c„ ÑB¾aPÇqt¢_îï†ÁyÁ9SJ%ϾòjÄScÍS¯¾`ÎôÔæ‡}Øsp8èµû‚‰Ã‡o+—J¼à­~çÞcdžHñ,ŽlƒP“BˆÒ¥Ô±]áp0àŒZð #Ôïõ(!%ß¿~íZE•R¹Q«bKž‹€¬pm+MBd=ÏæEF€¢„,D¡ r='©ãúyÁÓ8%ŠH&Dy–;®¶7JÓ´ÈK¥Òp8ìtבRž‚·Û½·Ïž :+{¶OZ #0Û`ûÎ=›f6*WW–Þ¹4wuþêØäT¹VóÊ¥\±@¥È¦ˆ õµGyøÈwþ¯¿ÿ»ÆäèÏöÙ‰çŸÿîéÓgF›ãwßý°Wªžc,ˆnÉë:|°Ýn‡Ãz­!¹ÌóÜñ\Œ±Âvœ4M9ã˜ÂzëÍwZë­ …’>üÀØø¨”Ì6-Ë0~òã¯,/Ïlš‰âØ0M`…û÷ï9x`¿”‚B)Íó‚RZ­Vµ.ªÛÝJ)© È¶ QäÉõ›7Wæo¬­Üôs8ìu»Ñ䦭‡î©TjÁ0‡šÎæaŒÔ?{µ_¾ð¥´×ë–iš&&D©<Ïr˲üZµ?蚦Y„˜1Á­6ˆºÕo†PIŤÈJžã96ä’R©–Š¢àPMošÙwø0!Ì‹ã˜BbXæÜâÜÖ­[MÛ–œΆýA·ÓB7›Ír¹EQ©ä»¾3 4£ñ©jµ†CÝìÓR­Þ·³,ÓÑkkkžç¥YÌxŽ ¬7ªZa319V$q0Œ’,wðdžƒ¾R’`Œ1Fk…C÷ 1ÆŒ1˲†á€«Jn@™z¯Ÿ=Ûëvî½ç>ôÖ76.ÞXL9¨5M›šéuz‚s„D^°¼(®_¿…¡`lÐë ¶nÛÑï BŽã*¨4³`š¦’ÐuݼÈcžç¦iª3WtŸAoZív{ffF«k¶ci /I­jêŠ^»›$‰(Ðíõ×­VkÂR¹¢]Fµ~£]¸„¶iZ–5 Bˆç{Q§ia–°8)ªµÑW^}õ>þóPŠÿòÿð[_ûÚþoyçwÿý?|…qñÚ+§Ûk­òþŸfDYζÙݦÂÑJûþ‡ï?tÔ”ä¹ï|ïÕógëcÍ0Ë…&$Ñ0„aw8$DÙŽ TJJÎ*¥r³Qs]+æ9±¡@YžÝÎ&†AýJ¹)E½"Ò$Ü<5‰zF¨€b(PؾWðbT.ù„")…ã8œKŒ)!TJ€äŠ ) ΂YÆ<¿Ì…D)&€THÁ¼à@˲„T)üËŸùµ¿ü¯ÿwÙ+wƒ©ÙÍwÝw×µkW¯\º¸iÓ4Pä¥_6M !GJ‰LÓ¶l“óbûŽ­Ú)J÷fóü–‡ŒÞ´´QQc×qyÑY¿¹ÄR6ýÒî=ÓR‚á­m yü1Ãw B,ËrKîÊêš ˆ1^º¹Ôl6º&PpV¯U…ä!„ë9y‘E!O3Öívu˜ŠvÀÒ×˲1ÆišèÆKQäš•Br!-Û1MkeeõæÍ%ŒI’±^¿¯/;Bˆr¹ ´,B'™e†a „Å(J Bp·ÝÕ<çœR#ÂR©Ô™Ù4ýòO_|ö›ÏÌŒþþïþf‘ô " *†qXvËçΜ½ãŽýÏÿô¹»îíÔ«÷Þw”ZªÖ(Q·ÈC×2Y‘”jþƒßïøÊ‰—¯\¹äæH½(…¶‰LZ²]Ï+ ¡0&†iA„¤R„œcí¤§2 ·(dqÇñ’,(˜BM!ÔúF[eZö0€’¦iVÊ%„fxQ`ŒtͪkóÁ` 3…T!)UžçJÎEžçI’hÃŽ<ÏA 7-)x–eH)Õjµôí©Ûíº®KÙ¶mÛÈÈÈêêªçyú¼ÓE±bccC[Ç„a¨)†,Ënuë¤Ô‚¬.œK¥’‚e"öŠ4ñ|Lý!ÄfœKË«¶ë(¥ò<ív»†a ‡CdT*•4M)¥ú‰aÔBO8(˜dö2Æã8~—¹v]W_I,Ë ëëëý~ŸR¯×õ@&)—ƒ(Ykwãœ!ÃDÉ ò<¢(M3!g’#‚N§C2 ƒ±BKt†a)¥Úí®mÛãããŽãèsS_4FªI´úÅ¿þ‹ï|óëO=ñd†­ÖMJSžõHÁ`Ý}ûîÛìè/ÝkNÏNP eiÔ Z±HÜš;=3Н5Jy4Lã¿ð…Ÿ<ûíûŽºqé›gÎL%A4è²y&¨á D ¡i‘Q!-rÁ6Á6F–cûƒ~¦9¥Ôu|˲Z­–, CÆr=¡‡ló6LÓ¶ $Ãa0]Ç5-Z­”Êeß00DB)>:6*¸à\ضÕïõ!SM.h{-¡iiÍó<”Î`¼È² ‚ˆ©´l‡f’fB*L(ã¶Ì0Œcž[Òé ÝnclPZä¹i‚sJhž¥ÝN·ì—MSgbß÷Ã0ÂONNö:­³cw¹û7ÿõo=xÿ½£ ×uÔü‹¾WÊS3’p0xêCzîùçÿû_ýÇ?øÄ™³§ëÕH)PjÒ¯/¼~©b¸ ‘© ÁÒ÷½vîÌúêÚŽé-ïøá믜xñeƒÚŒ‰²_iwÚ!.¹”ÊrÎ38¥8ŽBˤŽc² †V $iff%J©$Ë•š`L)•¥ !DcgeߢP#OšbлQ½^J»_I!%B8Ïsð’4çB"4Ä7€á{ö[ WêðÑ;úAÿøñ—wïÜÁY~âø«1Ûí ÓDµJUpÑÃ?¸yóŒ"M¥¤~®ëé×ñîkÒ¡sÃÁEC(ÃõåÕW–êUÇΙ0È¥r§·íñGªÄ1¢( 9¶§y·°<Ûµk·>³¶mßòÃú~¹ìÁ@ézþÚZ‹sÅ1&È´¨Ò÷JÚxH÷°´4¥q?Ji­Võ}ß¶-L!D …Õ‚g’$šÍó¼V®dyše™iØR‚R©œçLsZ‚ëk«ŽmÔ(ò|}m£È™i˜jïN)ãÄ÷ü^¯×ï·‘ÌïúàƒÓS§_{íæÂüìæÍ¡<ËGFšË JÉ…££ueÁ“"L‹ ã$!˜„0&¥rIwMËIõfëº%ci™:&H7m4ä.¥@Þ¾ ƒ·&s„TQÓ´’$QJZ”&匂ð§>û¯Î¾zª×îµºÝæäµéýÇîÛ¾u‹Aqfós –mpžRB„€œ Bñää8BÊql©”ºåÄEc¬T*éû”mÛží:”ö:KU¿Ò[EfÛ¨(@” €‰Ñ™q@•iQYˆ"ãiªFÇ&Þ¹ðæw­V«§^;U®øy–Eæ¸n«Ûïv‡„:ýÁ°V¯aŠ †Ä H!Œq¯×Ó’¬–Ф”JõõuŒ‘>X]×ñ<‡¡`Åøh³Ù¨OŒ VÁPJ@‰áyžiZµZ#Ïó,Í…pË6›#£qµZm=AY9D`jjêöÛ¬¬¬ø~©R©¶Ûm×qj%ï/þü/-Ó4-캘†`†ë©Ü`ççïóßyöÙÕõvÊvpœ…˜Ø¼È' O]]yÿÄî¬Õïñěܺu¥ÓƦ]-WEšW|¿^¯ ƒa’†÷ÜyÇÎ;^~é¥ógÏ3ÆêÕú ?°\Òl6]×KâAÈXæ8F–¥ •Jµ(¸ë{¬àcŒ¡^?(y„ж-€•ºØz—ÏÖRsžgRIÆXšfcÇv“$Ñor!¡B*à¹6+r‚k›Y¡<Ïu$ZµZÕvŒ1íb}íÚ5×u{½¥T/Þ,Ë®_¿îû~©Tê÷ûúžY¯×õg©5Ù0 5a¨µ"Ïv=ÛC ­¯·F›ãJâÕÕVç³[¦ ‘ÆyEÁŽÞyìøË§ 0õ€C’$I’,--øÿø¿ä¶Ã'^<±²¸zöÌ›ßýÎl«’ÆòÌé·]§&8á 9¶'%Ðî QEQ˜çR¯B-%hh@[ªj¬J7òõö¯Ñ#=ÊË šŒbŒ ©&¾ïgy>;–pÀq"·mÚº´¼fÚöþ÷Uªe^d#õºçy?úÁ6660†*Ó0òœÇQòÑ~xÇέ++KNÒcI’fY¢hµZÚ bÛ¦’¢kË7Ú++­û÷ Y!_^í=ñ±-¯­”+•¥…›{äÏþô¿aDó¢¸çÞ;8ç ŽcV«åÅ…†AÒ8 £‚1ž$±”Bê#Ëb¹ˆµGãèè»0´eYJ„ï{a–J¾ÎšK’$ì]Ç5 ¼¸0oY&F0öD×oܬ×RÊ‘‘F®çÙ–Ýë÷0®ç*ã$]Z^òËå89gJBŒ………J¥²ººV.Wò<Ïó B´¾º½G~À±m éþÑŸF ;yæ§iÖÝ<;þ©Ï|êõ·ÞtK®á ¸Fe„š'ókÓ¶M]r¹¿èNÖí=*”(8Á /žžÞ±}iyÅÎrÛv¨I£" Âa½Z=v×]Ç=qòÌ… W^:~ @ãûÿôã?ùaQHƒ¢8ŽlÛÁ”p&×Õ,ÛtÆrË2]ׂS‚õÇ—e™¾Dë•„V@š¦E1!$ ãJ¥EçB*ˆ¼°-Ó¶Œ"LÓ°m ca ˆ:aˆmóà¡ý¶‰«e»H“å…õù¹½^ Béy¾PÖ}æ3¿ÐnopÎ+•ršfY–rΗ–._z§V­½ròµFm´\*%„(0¾.¾õöÚâMÄã-3›úCÖíÕ±fmªvãê›vDƒìKûårÙMþžÞ+زë>ï\yç}â=ç¦îÛ9¡@#È HPAФDÒ¤‚GUó0ÖLÕ¨<–˲«FÙ®©\c»&X-Ë¢  ‚  ÙÃÍ÷ž¼sXiˆ·~»}»÷^û¿¾ÿ÷ý¾l:‹³w¼ ¶}X6 |[+ +Ôm7€íß?x¬*r›9J@„H'¾O)ÅqÎÇ–RfYjTu„’Z E0¥ˆ¶ÛÝ¢(Da#ð}c4•f”".JË"­V¨¤,ËÍ,B(QZާ#„AØð¶¶×———0¶²,w—s‘¦éÆæ†”bqižXäðáK ó/÷Åh–af#†¾öO~÷·~ë7¯¾ÿþ0Šn­ßº~çF«ÝFÚõ6uÐA¿×Ìq•–»<‘ ÎV¹{ï}§××n¤Ñ0 IDATXÛíß»ÿñGŸüÁ˯½ôí—O<¹´*  ¤£*†H$ãu>ܘ­®>pö±…þâÍÍõ÷n\õ;í>ð`9ËÒÙL2¥v='Ïs!j%¥R’WAè:6!à{Žm[~àø¡¯Õ8Oc‚2«Œ1‚R¦´˜mY¶” ,a ÆPc‚ÃfÀ@cÛjYŽ‹étÛÇO'2B<×ÛÝnll$ILVJaL€†EQÜ{Ïi˲l‡eYVUU]s!øÅ‹—læG³ìê•ë­Vkee_Yf¾ïŠºîì¶ÛÍï>ÿ\aÑ HØÎxöØSOÝÙ]s\ÿ'o¾5‹’íÝÁCÛs=+{”<úÈŸüéÿyîÜ=Ež! „ÃÁ"‚)œÎÆeYÎf1³l0¥v–—½þ<Æ(Šg¶c[¶UVUœÄy–ÏÍÍaŒc–e™ïxÇeaJ)ªªPK©£iV"ä(¥;í¶TÒ±=„ˆ”Z)m;ÔÜúÀØ·o] S¯²¸¸xòäIBHÇÇŽí-ôß»ônU–çî»÷̲â/þêWß¿4›DyY8´ÿõ7ßì/.Ž'Q-•e9 /P˜&ý¿Ïû6/y»½÷®»ÇQ‰L£x®ÕÈÆÃéêEÿø ÏܺõþßÜyGRìQ{ûN‰ÈsÝ&ÂV@ОÅÞÃ}ðô©cÇh4] ò\äŽëšËr’¤B(Îy] ­5ÆôçyyfÆ ŒQEŽíèŸwW»Q•6\þÒ¨\†üQ•u]V„"Ïsªª‚B/-´]w0ž¸ëøÊþ=ïUeuôÈáoþݳ׮]ÅaŒc¢áptâĉý5PiššùN!šN’,‘««›I’.,,,--eÊ‘J®®®%I2 VöïkÍõv§QZÖwß®†\)Ðl¶ŸýöóYV¼ûÞ»GŽyôñG&‡X]½M0–Z ‡£QU×@Î+Œ‘m;ZCŒ¬F£E± *Ö5WRey:M¸”Q\ÐJ©(ŠL·à±z£³,¡ÖÀ²¬¢u (!ŽãÎÏ÷¥ÔŒÙ[¾ï+%µ³«²î´»ŒYG œKBˆ±nllܺuëܹsÔfe]¬ÒjÇï_½† +J¾;Œ&Ñt8…­†:-JÇó]ÇRÅu {s?¼yíòd|im÷ÛÿðêÛo]¾yûÆÆöî#<*ËV…]æ£×÷t»O<õÉÑíÕï~óÛ>òødiÌ¢¼”B]Õ¼ÜܸóÀ¹{.¾w¾¿Ø-uÙꆲþcÌ9B–Emò&aÆÕZA µFB€¦™ÆÜMúB¨€âœCh2!Œ@‹ZJ%(%eY0FÍ€$¥ÆK ‡Ó<³=ëì= B!è:Žk»ÿñ?ü§^¯Wó*Ï3à˳âÉ'ŸlµlÏs!eY!„â(½sgõҥ˓Q^•UY•ËË‹¦¯µdŒÚކ f±ÃG˜–Ù­Û«?ýÙùÝÝaUs!Å[o½yñÝ‹W¯^‡”Q˦i’j¨µR¶mK­kÎ µ¥YJCÑÚú¦ÒÀó¡„:NRL°eÛc Áì¦ijT.“!AÐ(|BȘÕjµ-ËŠ“"Ë8`iqÑu=Æ, !ç‚‹YèC‚R*ÏsB! BdX®F=þ@›P’¥bÓP„£(>qשK—ÞçBÏ¢é¾ýû{ ó\)„hÍyV³éNQo½ñÒbZVb[0k"ÈFœ^ºµj7ÚQV4›sÍöœžü? ¹š_˜ß{â lŽ€çºnàßlBËî;pp8ûaà7Q”…ÂBˆ²¬•4w7Žc­¹lù¾'ïv»Æ…«¤2²„°( BˆVuUU¥,Ë2B„Èh¤BÛfŽã(%‚–e ! Äøì™‡¹â˜‘cÇa`1–¥I·3÷üsÏ[–€¦Ô4Ñg?÷ß'Bp„°rwwwwwpåʵñh6×YHÒYQdO<ùèÆæêÒÒ¢íX›››­VaÒêt+Î1³NŸýÈ=÷ž[ßXßØÙ ÃæöÖÎÆú–ï®ëj {½¹GŸxÜqíÙtêy^øyZdyázžëú@cP4ÊòY¡(r#p¹àRª Ác¨µ¹š+Aa5›M“™¶l›2F(s=/Íòé$Þ·ïPz˜ 8ž!„!Dœ ŒD@kPU†Ì]׃™æ4òît:¦L†¢´B³<«E6›‘<-¶¶vÞzûÍÕÕÛ/~ÿ•÷/½¿°°¸¼²2&­NÓs§A¹¶äÅöå+wßuì½›×½^kC4VÇãó×o¼qùê«ï¾·Uãq|Ķʪ‚J]üéÏÞ}ó­9ÏÿñË/ýç¿ø«¥Sw5z ŽŸE)"6ĘW*$µÂ˜WUU!„Í}Yi¼ã—'¥,«P—µ±àþœLDÌÊb¨µ6«X­µÒ¶m)%Ð* Ã(šB €JIBhžçxiáØx6nw›'Oß„¡mQÛrVo¯^zï=×u«ºÌó¬ÙlE9›F¿öë¿ZÕ!8˲$I&ã!rûöÎÅÊÊÊææšÒÕgžù¥¸ÕjÕÿÉëoìß–g¹P:ŽÓÁpè¹îæÖÖ,‰VöîßÜØ–EÕiw„Óéääé“iš¶; U𥻻»”1  †H .Ê:/ªF3ࢪyÍ…Ò8®ƒ10‹&i6OoCx7¢Ép8Äøƒô’ÖÀ÷}c–àZ„¾Ö²ÑAeUŒ ËϘ5’$1÷MÓ‚!2_ŠÁ`ç¹eYgΜyûgo·ZMÛb£F«QdÅÕ÷¯¤³ô×íK+–ýÀ=vôЛo]xûí o¾ñ“ñd*…ªT³ôÓ÷=€£ÙɽKô¯þ9µª—_y“1_Š1Wyga!åðÎ(¾4Þ‚KÁÑ>ðÞ;—:Äëc§o9‡žzâѯÿýsi’w–Âv;5€(™Í<Ï·\Wk]äU]׿û¥0Xs¢Û¶€F)-…Œ°Õ³Ã1| ´”RImR„Ó‰„€6&ê§5ØØØÄáùÞAUØ Ž? ‘NâxÏòÞïïåõ !xQæžçB1&Žã>þÄcI²Ë˜¥5Ȳ<ÏJJÙÛo¿=?¿°¾~§Ûm8¸¼ÿÀž0ô˪T j–—–«²žÎbÏ÷•”çÏŸ‡@o¬¯..,ú®ÿì7Ÿ=°r°?×Ï’„²wïžSwŸ™Î¦£á¨¨Š,Ͳ$ëv;eÉË‚wÚóýþBUrB:I§išX–k¼:qÙ¶SäEÍŠþеëG;ëwÝ»`{|¼ãcçFƒm×ó-Ç·s£Ñ7øã;ƒÑ×þñïÆQâ¶yãV€¬§?þÉÐv¯Ý¾îÌ55Cµª1ÖJr`¥ã™ƒ›û‡Ù‘X–eÛÆH ¦”VeeLP¦¼Ä ©œóª®(¥⪪€ ïUÁ(‘JBÍ›Æ9O’DHnnoœ¹ûÔ±G¦“ñÊž)ÕÛoþ BdY´ªË0l̦ ¥leeåÜ}Éó(MÓºª£(­Êº,«[·nk \ÇŽâé¡CæúB 1!´ÙlÌfcÎkÏ Ë<ë7ÿð_ü‹7ßøÑ|¯WUu3h^<ñÖíÛEVöææ(çΜžÄÓf³iÛÔa”R"…*ËJJÇ™!Õ8ŽM(¬ªBȺ,Ën{Þqíº®Í®z6› .]ÇžMgꪮFB ǵk^;®k>j”²ªäÃáØ¼ív«ÑnB„jÎÍö0+JÊ(²ÌKËbRJ5„Bd–bŽcQJ 4äU›1æ8絨k µã:yUY±Ðë<~A3$Ïò|®Û¡”=úðCçî¾GÔbss|gmý›/~usµ³0§¥Ègã»nHùë¿ôÉßüÒSÏüÂãŸÿì§Öoܼ}õ†ÃìT f»‡|ïÕ oZÝ Ùi5,wûÊ­tmPeßÒL¬ak¤5Ðh‹z†OfôZJ,LãXRŠ0 êº6 ˆ€”hà8NQdAË2qvk0QÊx-ʲLÓ´Óér^K)ò<÷=‡RÂBø0ʲ\+…ç–÷õ»ŽË¯«"×J1Bß»t©LóƒWn^¿5!Ð ƒð®“ÂÕuÝnu‹¢ †ƒÁ.PŽ)sî÷Z͹0l¸®£4ÇLW r\/‹R ðk?øÁB;|é…¿“U¾yóF–§”àV'Ä¿øÎƒ=Tj êÒ¡˜aœ§ét6q}‚€†H!¤¤ª!¾@@çûËï®ìÝ[E§ÝBÇf”ÒªRcˆ³˜íÚR ÂH’%ŒZ¼–Q”v§E‘7›ç[¶Ï* 7¶v×6†»Ã´â@P žy3ì¨Ì¢RqÇs¸RK …íX­NSC •p<7ÍÒõn«/”@fe±;Ø©ªJòÚñ|â4„B J”ïÑñ`3‡Gîûâ~9htdzj}P¾qþÚo½søðñN··°°x÷}gv·°JI•ìiø‡»Ý®o_»sN†= †Ãá»7oóÁý>päÀÑÝw·£²¾û‰GuÓOµÈŠÊen3è&iQVõtEQ t‡2‚ ¬«Ò²˜© ù é¸âBH7ðGã!ÔÒe„ 1¬¥(«hD˲ÂÊ¥”BÖZs›bÛ¢ZKŒA’Ì|ßqZñ[´QÙC}ôé§?y×é“'Oþî÷¾wýúM†Èt6Œ¢Èuƒ4)FãÝßþ¯N¦C×uʲ2w×Ë—/·šíñxÜét†~à¶Û-„µë:a`Œ×ÍËZ+ä:~Xßt4™·[ƒkkñ`òÃ7^½zéýW^yeG•ÐK+vF³édjÕ±Øw¶nI$>ýKŸ{èñ§V޾kóêÆÎ«ožßÜž]¼pm:N~é³Ï †›ªŒB¥ƒíépw'³¸üýßÿ§QÆA3<÷ÕÏñ†=.Ó°Ù0ˆe%²$«•ŠãØP€Œ^¥”ò}#d vF¯2s*!¤æÜxS;­ RCȹ`Ô2n­º®Ì#ˆ0,Šœ øa˜ô©ÖYVà†ß²>yúd–§Ë{–¯\¹zþÂ…ÍMž—£ñv†v/Mò0ôÎÝw¶¬R×u³,¯ªj6‹,ËZ[[?}ú´çùUY8¸ïÄ]Çm›=ûì³ý~oyi0ËŠé8êtºW¯^9pðÀ·žûfœ$¶cE“ÙÎî0Ï+Çu[Ýî•«×–––ƒfKxN®Ëë:Žc¥UØhlnmSLŒÇ ¦i³Ù¬ëºÕj9¶eZ!lÛB !ò<ó—5ÂHk'Å“üÄ郳Ùìw߉§µlAôæt‡Øl¶=œeUÐ]|î¥WÞ»v3+ùþƒGŽŸ;{#Ú®mâbRF –2­Ë¢( áØêæab­«Êœ.†ze8ƘTR+i3 ´*Š¢â\jç…Ê|4£¥&HN16§ Á„!<Ï+Š«qæìéï¼ø¿ö£¿ÿÖß7[íÕ;kkwÖî¿÷ÞápÇqì<+°‰1:yêÈ\¯E1ÆÄ¨ûI’ÄqræÌ¥t³é8°_))„ˆãÙ“O>YE]×R)U³\½zåøñÃׯ\‰¦¥•’š åç‡àvgîË_ùêd:ÅŒ]Û*ó¼ÑhX¶eÙöÎî€b‚2êB¨Ýn›¸sž¥&–$¥È²´ªª ð-ËʲÔ÷½ºy^¬¬ì †„ÐV«íØLJ©´œïÏ7› )‚<Ž0Æ®g»®cY ”ç¹ï‡á¢È<ßeŒÆqdY¶Rk˜eçÂôz8pPi9 5Pµ,üÀn5Ý…^si®w:pçÆµÅÅå½ û—ñéOtÄ ƒÝn×¢¨µ”¢.æ:;ëkXñ…nGI¹=žz^¸½³K™Í¹òƒàŸ|Úuœ…¥~4™`„’$Ú¶]U€ 4áÁ,OVVöÞ¾s˲Øh8(Ò H)ÝÚÙn4¢È|ß_YÙ£”l4šÀh–PÊʲl4ª*'£D1+Ër^ ×ñ‹²„..öû½¹áp—\W(!&Ô² ˆà\h­Ç­k¡5l4.*ײ.^<ÿò÷^ÜÚ\¿û#w_¹tsuuý[ßzþoþúÛ—ß¿†±m¹ â8sûnm®­n­îYY>sÏÙÝíY<;°gÍË+Îسïc>tüØñõÁöÞúéóß}y{5²m? ¾ïA '£‘c;aà"(Ãi—2QV\Öl$B¤uI,«¨e’ˆÐ<-e%£Ydùnžå„`ιí0Û±‚À×Z9¶cn‚Êë&V37צ 1‚yUÏ¢$ŠÒf«UäåÏÃ: ¥¥¤Ì cÛ#„P’dqœÌ¢TI„[AoÏ|ës§žxä±ÿö_¿ñçöõú¿ý~Y%NÐ(+Î9,+®¡ø¯üJV$U-°@š$Ðo4‚,‹š.%Æ´ªê²¬ DBH×ñ ò(Æužh^®Þ¸B/Ó8K“Q’&i3lû^C+=MN¼+ Ü2K‹<ï÷ç µ8—R)•çù“xlS£[[›aàUeQdél’dEr_kézÎB¯z~VÛ;Û;;£F³)•´lº°Ôa€eYåºáÎîf;6³³±ë³íÝ-×õ…T„2¥¦ØÜY<Å„´; Æ8ô%¸mQÇw€–ƒMÛÂ9uêþ忌ƓյSÇŽ|þ™ÏÙw+ríÆáä§ï_^ŒŸ¹+j”T–×zé•×*ÓR/,ïM6<®,7G[×±Êï;}úW>óùýåË?üÉ3Ÿÿì­ÁæžcG*¡ƒF3)r…¡ÐÆ6 Qz¾`ö`{Nƒ)*KUå<‹‹x–åy1Í2hYY^¥<Ïe¡”ø¾c[„×9ÅÄs4¯«²È[ͯ«F`%!¶ãH ·wv ³mÛÑJ#Hµ"ˆ Ös^UÜ÷<Ñ,É-ÊÛÙÚÚÝÙ祪9ÄKËï÷þÇ p77¶ï¹û¾ßüÚo^»~9MÓÚ`z(ÓZ;ŽõØãL¦#„gUUB66Ö?ìúBz^¦©c™IÐ輘à3M¯ß¾=™&ßÿá_óÍJñ¹¥½Ì-ϯŠ2ŽQVh.Z‡ìÄ“¸Êwvvv¶¶æ{}€@ŹÍh^•L¶È. IDATUÅ¥RƒÁP(@‰’Ø‚­Ý4MðQ–¥”Ê¢THxŽc3BP§Ý¶s]GÖ5¯8¥ìà»®Ûl6’–åØŽE‰@H†!ç²ÈKs¨ª’sÎõ}?ŽfaBr¡„ë:Ô²(¡žëÀñʾ#O}ü‘²J1†ûVŽ8¶÷çþõ£GÝZ½!´,[)õ«¿ö+‹‹ý¼H2ËfÓéTkE‚7V«©$ø`Ý¡hAÖv³FpG¹~”×ÿì ë›Û£ñhb;µDð¡#‡ÐY™çYêû¾ãš²“V˜Lãx aŠn¬ª¬µßmµ›Žë.Ì/ ›&õõ7“$¯9_ZZÞXß2[‚i–gBˆf£an.—/_®ëÚu]sJ÷ðLväÇ(¥Æ¥4ßoµ›ŒR“MŽÇËËË”2L³ì7oï†ífË÷=!u6Ç£i–esíÎÂ|¿¾ï·[ Áë?zÿÙ³g”–B«Á`xõúê;ï_ÿÙ»—?v:R×÷Ÿûþ÷>ñÅ/Àñ›ÁáÇʼ¨ëÚöìXPCÇq¥RI’Ù®%qœ$®ë2æN§3¥Á¢b¥ý~϶ ÚuбëºY3F9ç„P“z0ï•Ñ’$2Æ’4×ZÂâ4©*àµ0AåáhÀ£”H)mËb„J%Ç®%gŒZ¶E ËÒù+¿sôÈ~© %U#ì$QþÚko¬ìÝ{þÝ Íf“×"Žã/~ñóe• ,ËÅI”¦©I«š#B0дӘ¨{UU¦øPtñâEÛ¶VVöM¦ñ÷^þ‡,çž×8¸²Üìt˜åp!•VË{ö$y*¼66~s1Ç{÷îFâÀ÷…¨…J ­´ù(YžU–„€"â:N’dZ¼,$ÁšWZËv»UVEYÔÌ¢+{÷nnnÚ¶mRI½^Ï8<Ïu]BT×5!còAójUN§ÓÇOÆãf³áÚŽï{Ãáa’ç¹eÙ€ï}÷»U‘¿üÒ˯½öú…·/¼ûÎûoïÁ£GŽÇ³Dr°¶ºÖn{Z×­¦?ž 1¾oŸ9}ìãÒBáÎÎ øìw^úÖ /\ÛØ8qÿ½Î\§ÛïFeN]{4,Î÷ aL™–Òvßó«R<ÿÜwD-1BY à hTBUyìĉë7®÷úèXB'1õ©?vpÏ’–pg{g8¿ú“Ÿ|÷…ïÕµüÂ/ÿrž—Óɰ6···Ó8vmAà¹UYt;íÇyø¡\ìÍeiÚYš?|÷)âYcÀPV—ý^hTUÕîtâx.HÁl—s^Vµí8óó‹kkÃÉ,šÍ´F¨µFP÷û}×fˆ v« €FZ¡eYaL0!æ0”×u?h+–º®k¡Ôx{Üuôð¹ûÎ}á Ÿ{àî:~"ÍÒwÞ}çÿûó?û‡¼²µ±;›Æi\Üwöþ½Ë{£Ñd´;DX…=K—Ét}µïz2O{ücŠ’çu^@‹@Fó8eAP)U+áÚ¸,ËiµÛmB­á Ë‹$É4„B“É[ZZlø^Y•”a!8R)©¤ ”QŒ!BBJû2ù¼TUE1#„*­«’SFMß‚R@) ˜Ífyž‹ëºÃáÐó} BZ A0JùAf)þ_ÿ&“Fà bäüïôÇGŸ¸ðÎ; HŒÑúúÚ“O>±´4/%·, jıYGÑLk]Uåt: üE‘¹~ˆŠôýp< )»N'¡ç'qšÎb‚ðp<@˜%/«êþî'”z¾ÇyíX–ÙjŠ¿!å1Fíf#Ïs“ܵm†dŒ( 0D¼2YJQWõîh€0@¨ãxð<ßu=‚Ù`00Mªœ ˲ÐX%ãdfÛv†I’Öuí8®cÜn·Ë*77•ÅÅùápHÎó cB˜…€Z&Ó©…Ñòâ<2ŠfÔ›·Q­Nøð#þÏÿËÿtêÔ ^òÕ››;[ƒñpöü·Ÿáùd§ï:»wÿþA²¾yë΂×ìûáOßxóì½gÒ2u¾à /˵ Ys×r,ÇŽÒ4 ›UQxž[VµÖºÝéÌfÑÖÖnšæRÆ(Á¨ªêFàZ–Ud™e[R‹¢(¥Y–uÚsæì¯ëal¾*F|7T^ÕA£‘¤‰Rzqq„¤¨*ƒÄ¦ ÙŽ î÷ç\× ‚€1ÖëÍQÊ´–RÔBÂÈÛë»Ív‡ §ë\êɸèuç˜mÝÞ\;uß8pÛ‡°†š?pßYÇ"œëºJ BRb<Ÿa§ÓIÓBláÍWÃ,!IïlWö,!€…¨¯9ÐhxWß¿ÚjÍõû}f9›»;¾ïk ‹¢<·ÈÒF£Á«’’D3ϱ1ÆÃñˆ1»(*1c–\+(¥DD£H‡áÜ\wwW()„Xê÷³,Ë˪„¨Ýœ—RF“BÑëõŽ:<‹g¢íAšU}H0B–®oI©ÊªBîYØ{çÎªëø‹K{PBfK‹½<Ï1†ŽcÕuÍ[A¥ªl8º– ”nv{‹‡VoÝ'1­ǧž¯¡ÎÞ|ïuWÊ_ý̧¾ú¥_EA€[λ/ÿ§ÿû?¿ø¯þõòòÞÅí§?öäÑ•ÃW.\”ÌK%@~cnq/ÎÙ,šx´Ùl6Ò4ÍŠ*t<ª%³iU$è¹n+šL¢ÙJÑm7§Q6›Í,‚JÃY”`J.<ÛQJ†s³¢Ä”(­Áš —YPiYÕÆoÍ9o4ƒi<`¶m[^͹R€a–F)€‚Ú´Ì›‘V#4Õ¡B Ò@q0òB?Ëø[ïݼucãqéÛ¶‡uéXVYÖƒÁÐhÿ ãÍuL€ÖºßïgY"¥DˆÂvwFÆÇq¯×ÃgYçyÆ›Ñét¢(*Ërqq1Š’Ñ`çä‰ÃU•Ýÿ}?úṬ¥”^è]¿~{4Ý}Ϲ‡~!´½³µ¼w%£Ðc3i[q›U—ã8 “ëO•RJ+ÅE]׳ÙÌÔé ­9,M­¼A¤š¨¸$9ŽãûAUòííí0ôçzm¥„8K³Ñh³Ûínmmõz=ÇqOy†¢3 ïÄà*ò)¹Ö˜PD)M’b!ÚÚÚ\M£¨®DQTq^yž§ï´›”Òº* ©”@™ž,Bmç\k‰1BšË»Ñt>0laF‰!©*>ÎlÛF`¢-˶mjþIó<7BcY–J)FXèµÌË,-òêö›ËKûÎÿômüµßþÍ4I-Æ:­Þ·7·wÇÓéx4GkéºÖ=÷Üm d€JI¥¤AÐívÍ|m:½Œ,MÓ$IŒü?›M———x_zÿbYf»ÃÝv«‘E¿7ÁW¾ò&ÓIÐh¶;í›·nõú= u#t Ë”1fü®ë*­5uYÙ¶-x1¢„XSRæya>gI’X–å8Îl6ËóܲmÛ¶ †Ô$À”Riš¶Ú-¥T4‹)ežç–UQó2Žc%(!$„XÓZC€Öžç×5¿qã&ÆDY×ܲlŒp4?èvº÷»ÿÞ{Îq.ž{þ»_ÿ³¿ûÁ+?Þ·o¥Û™ë÷ç»Ý¹õ­h:Á9.ÊY·ë—u”£Íki2|èÜÇ>ÿÅ/<ñÉŸº÷#·77?jÛv<1æbŒ9¯Môa`:ÉÇ–JeY.”â\p!”ÒJi£@Õl4ëªRb =×1/ˆLðFšnp€JH r\WHiþœç9€DI½¶¶™&€Ê²ˆë1B©­7oi»Ýþ ¢dåyŠ€ò|ï'¯½>ŽâÙÌumRUçÜbŽÖà­·~Úívð£×|ß·Ü¡piyβ,„„PU–À8ç¾ï›ÀÙf›Ýf&ÖÂ9ßÚÚ‚@´ZÍî?77×Y[»ã7ÂÃGÜw/¾¿»»ûøã¦Y¦0LÓôè±#£ÑhÏò‚ÂÜ.?$}}àè@Èñ!Á&cD V§noo£”2Žã8Žý°áyžÁ:'šá;h­g³ˆbÛ®"l4ÒlÆkY—•º(¢v»9NÛí–õp8^Z\”Rƒ7I/Œq]—EUB D]#„†[;”Òûï¿ÿ—>ó%?°/½áßýÛ_–ùÞå=Ÿýìg—æJ =ךŽyUQ-ôw6EË#„1Ц3J ÑhŒ ýƒ h¶Z†¦’$I«Õ*ŠÂ¼d“é¤ÝncDò¼hµš(BQ'Z.êºæ­VK+-•¬ëÚ$W××7Š¢TJP{ `¿7¯4(òÂv܃û=rì‹ïY¡^_»:msÎì;ðô'?ã9í¿óêß~ã¹7^?ÿî…ËÞ~—`×¶šŽÕb8ôf2oíìÆšFÇÝ`ÿÅwÎ7ÛmŒ(ZJ8Du™]¸pá¾ûÏÝ^]E˜pÁ eUYtZ CG2õ]¡º®=ßC;¶ç9BPkøÁl6õ]Oi¨sæïÓív˲´m[`æé7¾)%e´( Çq•Ò# cÄ÷ƒ4Í´Vu]åynÃÁȶÝ"Ï···çææŒ1—1†1'Y–ÏõúÓñÔ‚­­- R:ðfÖRÄQì:A]IñÑ£Gï>{öÌ©3ÝÎÜ[o¾á:Þ¥‹W¾ñß¿µ³9ÍÓÊsÙáÇ“Y6×ê½ýæ[‡ä¢òa'A.*Œ±eQÆ!cĹÐ@y©(ËJ*… NÓÌó<Û¢ã2KÇq»ÛíB¨!‚AÛfQQ†ÍÌ]×uÅe’¦žï#Œ§³™†`qii4c,µ&“lº±ýÀǘBƒïûæÁ2RF€Š QI¾gïþ7ß:ÿꫯå?qò.üÕßþ2ÅV»9wåòµW_ýqšgÃ(ŠDQ·;­gžùtÇ„`!„”JŽtÇl[­–ùß2+ÂÁ`Ðh4,ËʲÌô”®¯­åizþg¾õ­g~è¡Í­Ýï¾øý¼¨<´8ßîõçžzê?~ýõ°¶ÚÝmÛ¢Œ3‰'Ib>ê”Rc[ñ]O¡µRJ–E‰1º}óBØ\•ÍWØì³ ÕœRNg<X(!DMá\@ˆŠ"'¨\׉f „c„±Qw„Ec­4Çæx®ëšK1›NƒFøÿþWeg?rva~Áb¯¯µ”šQ<‹G‹¼œnmÜ<[Xh½ýök¶CÍðÈá£AØl„­óçöïÿäÿšoõe%þõ¿ù·O=ñH)yØlÔ•0n}Ë¢&Â9/Š"B @]ñ,/¡eU™gÚ¶¨‚—EUU­fC)…¡^[_·l‹RJ)HCɹHÒüäÉ“»»»žç…aøî»ïöû}uU¦eU0f›îR!dUÕQ™ã?˲áp8N˲ ˜Àf+ˆÒ¤Ó™[ßÚyó­ŸJ’4ÿÛ¿}ú™O/Ì/VYí8ÁþáÕ;«kE™6ša`Q4=xð!HnÛ¶eÙZF±çyæ{l$c£.Šbaaa<´º1¼Î¦³3'Ça£ùÿí/·¶w77wnÞ¼“¥É{ï^h6[ï½Åv¼ñx²ïÀþµÕÕFàCŒæyžÁ¹@}χ !êºTR`Œ)Eu]C(e¦q4…ahÆ»á`$µš››Û¿ÿ… LÕ€YæJ!Z)E£p^;Ž¥µÎ²Ü¶­5粜ªäZ!8‚ÊàÈæÓl˜ÐGŽ[[[ŸŽFƒÝÝw/\|éûßÿÙÏÎoï w6'9{©x6eÂÚ¶@#°órö¥ßøâd6ÚÚÞ(Ë<žŽçæÚ•”ŸÿÔ3Å`võÂ{ŸýÌg2UÕXäu@QJêºæœGQ\–¥õÿ3õžAš]ç™ØI7ßûå¯s˜îž̃AdAB$(ˆKФ(‘ë¥(i½¶ì²ÊÞRÙÖW¹¼kÙUZ¹ªÖ”—"­¥DŠI0!gLÂÌ`rìüõ—o¾÷Dÿ8ƒ)Ï©ùÑÓÕ}¿sÏû¾ÏûË,ÓÑIš1Ê…”:V©”JA-Ë´,c§ÛmµZ¶cÚ¶E)%Öx•–Æ#Œ¿ÿï¿sö½c¯üúåw>8F¹ Æ6‰Áûü3O=µki9h´ð¿³ýÖûïþü•_¿üö[IV˜¶¸õ‰ÆtàWÖvzã<÷ÛÍ}wì»óŽ}&àQÒ7q/Úë´Ê~8¿g¹2?=‹„å%À0ˆçùŽãzn¥¤;5ÆcF¥ƒze¢â7lÛ.ò„Ë©Øyž[Ê2èÈaL‹þÚj«R%@Ó4k^í½·Oyž70D„Š[Y\˜MÓ#$%×§'NBU·µµ¥›t½lÒ±X¡ÉÉÉ¢(ôæ|õæÆc/¼pcõ&"¡ÚÞÞ´m£Q«:¦µ¸°8¿kéλîþå/¶º¶æØfžÄªè¸-K*˲V«%Iâz¶öƒÔ’í™$&XHNó²R©( mÇÒi0ú :ŽeYSSS7nÜ ½^ojjJ[±EQ¨¡/Ïót¼‚6Éív»úôE¡’âV^ºVÕé¦âU$µšL£µÕZµáøð]‡¿ýû_ÍŠþ‡gέmn]¼|ýâ¹ —Ï_­º @IS@pHÓ={öÌÍLݹgß|{i§»Ýœ¬XœqƒÈº‡k´LCI‚¡4˜^K)õ˜¬+¾”R[S»®«Ûp=*"ˆcÚ]ƒ‘RJÓ$šO¬Á?Ec†ˆÓÅïÝoµ@3+ÎÛy÷’¢qýûï·VN93;¿¸{ïnÛAÞÖ‘»÷#‡=øð[›½­ÍA‘óZ½®[¨,‚`‰…*òl8ùƒ÷·¸ç»?MvïÞË‹œòþ±÷'§'n»aù)Ðív÷ì^"…£¡ã8B.(!¤(2¤¥-àõ½¥ ´åüm!͹ò(‰%‹‹ ?ÿå/®ß¸üøOLM·<×42v-»×ëMNO5Û Ó$yk”E›kj—âtãeYV†A!DšR˲0ÑÁcÅx̃ÀÓ£Ÿm[qZÔj5­»ßÙÙAíììT*’hÛF³¦¡Ý¥j@UßpZÍ"¥þ¹†T´Öejj écscõêôÔ„t䮃JÂÕË—¸1¶-¹{÷Ü#=ìØ•$¦ç?ºøÖëoEQ¤0Zšš8ñá±<“ÏÝ0¸0 ØnÚßøÝßûÕ˯O.,8SÍX YrÍï°m;Ž“,+œI.…iØq”èÔÎ¥i ˜sÊ9u]chXû+A¨ €šÕ®ŸžM|Ó2fŽóZ*ÿ“§ŸZ×·æª?úàýNw|âÌå]s;;½~ÿ£G¿ÛØõ !˙٠Œóç®pá(%V8ÂðÝ@bpìüŠm¶Ûv«é>t>|Ï}‹ sFóßüۿܳçÀõë×ëµ@Á…üüçŸ@V+>D A s?fM V«¥MÏ!š[¨­G51«Õj‘gfuvnöÌÙZ­¦íÚŽc†ý¥¥Å2a£Ñ›&2Œ$¼À’»ž“ʼnaišjÆXÇÊ Áã8ö´—gª{—~òêËgΟyæ©ï:tà£3Ç‹,RBºNðÆ›DaÙhE^nnn×ju½bq]‡˜˜"® ؽÿþ;¯nvÔBûtí:þúW¿137ÙtOŸ9wúô9PàÚ@)öyøAÃD¶––S¦M‹µo‚jõ?tz>Rºä'I’çyY–“(N‹’aLáïú‚éÉiBˆïV'çf¦çæ®\»V«W\Û’Œ!¥ô-eFµZÕ׃eYõz²R£ç½n·V¯B eQø~å–¯Šy^˜¦…b÷Ó˜ IDATÆØ`œë­ÄwGƒZ§5ò<ÃC„\ˆ4MzY\0Ïs§•jP@3‚ô…×l6gýp<ÿó?ýW'O}H <ÿá¹3ÇN½þ«Wßzùíp0ŽC×ñc\ )…g›I'IT¤YÅsÛíÖk×Wo®ÍÍ­Lï]ÚN*,¡i;Ø6‘’·Ü´:H)Ž“cb¦¦¹bL„”–AºGÔ ÓÛdImQ¤Q]Ó4 µxœcäÎNF©íÝ]ÚÖés>óég•Lþä¾±{yº¿³–¥c)”mø£Q²ÕÙ¶Û“Œ3×s+ÕJ^äQ9® ”ª°°°Tÿä§îç«ãtí«¿¿gÿÊÿñG[;½nw¬„´ LiÙšl:tÇx<¼@*%e„nùøèÖÐëõt‹­—äºÒWž—SÓs‘¢(Ç¥Œ9–ŽC¥T\°¼,ã$-JÚn5,‚‘R’1Çó´‰Àmr³v·âœiª'ÁØv,%dY`ˆ°”Š1ιð<Ÿc<1"¶ëh£M¸Ð·¬^–#„šÍf–¥qi‘²¤õF“1¦§¿jµªUוJŶ¬z½>4DgÆÒÒRF&âV£±uýæµ —»÷áG?ðô£Ú·4Ùjt·6ß{ç½üáOÞxëƒÖÄÄžëÕZ“óýAê4“•Z›þëo¾÷ܧŸßI‡õ©V£ÄD Å”Q%‘¸a$„Ô2y}ú…Tº&Äq캮n‚ Æ(„Àqlˆ@Pñ “0NâãxÁÛ±9ÕJ-MJ·Z]‡cŒF‚ÿêÕ7ž}ò¹…ÉÙýv—Eè{ðùÏ<xøwÞ"€Ã8ëu‡«««ÓÓ3ÃNg˲Ì4I,d" DYi2t¡dÓ­»„ÇÞ;Íý·ÿË_6š¯¾òV³Òˆ£±Rò‰§úé'/”()-€„†aŒF¡Þ´@‹¢ÐßN§333Ón·Ë²Ô8¼aXI–rÎÓ$÷«5^Ò(GƒJà™˜‚:®BvÉXÉÄäät­â"(m“$q+çyý~¿( Û1oÛA—e1VB:Ž B†áÈq¼²ÐqêLuzzlw;ÍfSJu{¡¿À²,m˜€Šâ±çyœS!Êó¼m½_¢B˜Æ !!¤R ”R®ënll¶Z­ñ8"ÌÌLx®Å³lëêµû÷TI±½¶67×Èã¢Ö˜ªÖÚ[ƒPyÁO_~å§oþÆ"xnnncc£äÅîÅÝKKKîÜÿ“þè[ßøš3ÕèÅýÓ'O<ñÀCZsXæ’B„„p<Ó4gœ+9—” =†Á˜Ð‚DZOtj_à€t]W·­:{±Ñhäy™Œbe`ÃóJ!ýp¼3;Ã7®r;kUÿìOÿÅdÓÌòضšÿë_}ïþ–´!ÀyžOL×î½ÿ`«YMâÌsÏ2lÛÞÜÜ4M`–I,J9þ£?ù£™éå¿üŸþ"aýÞ–í`Ót(eßøæ—Âñ€3ªB1Î!ÂBrÇ1õXçÛRÊûýcûÕZÕ²Ì4‹(§ŒSDeɲßß‚¥irïýGÆÑx8‚ZÓ“ (Ó´¦'&¥y,·}h",„)Bpž¦JqA%¸¶LÛ21D¡4ͤ”YY"ŒFã1ˆíš-â4nO¶à¡²Ì9ãEQÚ¶«$êt:†•’ºñǘ.]Ç÷½`Ðí–yF4 ˜g‰m´(9ã&1)Í0R†„•)c§ë[›B ÇÁÍŠ5×rhØY𮼴p *â -øÌsO½øÂóO?þàò®ÙºÿÓÏ}êÀÁ›Û›¿yù7½þ൷ßÿÙϽv£séâÚüÒÇw ’CÂ0„ ”Ã0§ \ |)˜ëØRHÎèd{Â2Œ<ÍÏG”«U%€à l˜¶”Ë Ê¹”b"Œ ad8Ä·¡7×^úßÿÝÿµ¾±í6*sûw {ôÝWOUüý˵,¾ñùÏ>±kaâ¥_½8¤Â$–½=¸±°k– à×O¾öÞ;Û ‹„æV½ÕlšÁðýßüëkWWÿé'/ù¾_«J Zòµµµ‡¹wffF7Å q]cÒìÊ4Ͳ,Ó[–=1ÙβBÈ….‘¤,9¥4Ž*×u–—W^yåUŒH¥ÒK\'ÃHfÛ„JÏkBª,I1ƆAò<·-Û<ñqåÕ[HÝ|èr Òpšî'´´¦×ë5uŒ‰öŽvW7%˜ Û6ó<‚`0è~V—Ý~¯×n·\ס¬ ‚À4,Ûv1Âp !€)ýÑxI¡ºÝn÷¢dXѾ}ËE–ZÄð=ïêµëëC‚MÇñ«¾4`sªqáʹk×ÏË"¢eRñ ZÄû–fŸ}ü‘çžüÄÜ‚iâA¿çWÜO<ùh¥âš&b´H¤T”1¥ÄÐj61E‘cL²,w]H1Lb[J )ë¥Æ"¨…º×ÔþBHˆª(‹¬ˆ*žû­Ç¾ý/¿ªXñ«ÿøV`µ[S‹?øù/ß>yâ¾û—ùÆòœóõ/Ž—ãñpP2®€YoMŒ³Á‡÷6h}}§â×ÏÒlXi8ø[ßúÃwß9¶zss0P–A¨òœzž÷âïüVEœó8Žu²ëºE‘›a”ë#UÅåËWªÕêäÄT¸š ­9B”IF…m[ßð<nnþwÞ}é¥_~øáÙÞ?±µ½C9 Bˆ PAàÙ–)R`bTü Ïsßsã8VR Áµ#·~Rúi¬RЉÖ¥†i™vÆíÖ„À À:T‘£V¯ Á|ß ‚@·/zïÔét²,c”rÎ ƒT*eYeAÂR*€ë:†A0"ÝnŸsQ–Œ±âÈ‘ð¯W*^š¤íö”àÐr‚ Ö¢RJböÂQ/AÇfÔ§{÷-'a¿Zqßòm£âX.ÃÍ š%Žìß»û_|뛆…¦¦ÛŒç òþ`h[>cœrɉ Œ¡Ò²¬²,tèãŒ`âzn‘çBˆz½®Mfu_e†i™œs=KiˆŽ1æûשJ)+`ƒÑæç¿ð”PÑ“?tdþàñߺpãüÂÞ;zCþ‹Ÿ½>U¯~îÓOÉî9²ïŽ;÷œ?%ÍàGúÅo~($7…K î9Õ›7·6·6‹2¹ëÞBQüo|óŸ~òRà×Ïû@aš„3yÿý÷ïÞ» maõjÌqœ4M…àœQPY–ŽãJ);½{÷ú—$±”<Ë2©!Vgƒ~Èå<š˜˜@ˆ|ç;sèÐá<£yNwvºyYîÙ½@ø®N6ĘŒÆcÛq„Ãá°È3€ïù%-ʼг^ëçj`› H!8ãÔ²l˲²,OÓLJ…±ëº•J•snÛ–a=fêôWÝ×ëoË9‡4uß÷ œóz½‘ç¥,ŽCÓ4ó¼H’T+c­VëðÁ;zÝÁñþÕ_}çìÙó¯¿ùÁ•[Í©yèºÒrVÝA(,ÃnÔûqâV*yN-¿’Ìõ‚Î|tõê5 d–ä•V‹q ⊚¶‰ ,iaš–Ø*Œñ4ϳ, |¿Y¯eiZoT!a×õLÓ ÄàœE¡¤ÔK0=¦hÊB(ŒBýÖé`˲,'&&|ßãR@Ó,K³|ie¥=1E ëôéSy¶öð‹ v®_º˜ôÀ÷~æû?|åï~ô›…™¥‡÷¯v®;uòчŸ¤)»qélÃCãaŒ€Û–&ùµkWO|xª(þú×ÿÿù›ï~½×ë6[5d&=öX­îÞÂ<Ð;AJ©R²(rÁ¥¢,)!IJìz½nYVžgÚD0/Ê¥]»¿÷½¬ÞÜ£¨Ý¬è¹¦ß]¾|E ešÖÄÄ$Wâû躻w/I%Ê¢äœ[¶3zÝ.çœÑÒq ”TÂ$†FÿcAhR¡¾ö×NÓDJaÛ„X–ež—yžOLLÔjõ0 1ÆE‘k·Ö^¯gšf»ÝÖ¾ø:¯( )„m[R LBˆ–L)@iiÙ8‚áp4…¶åÐ’J)gff²¤Ès^­´ŽÞ÷`§3‡iœ'NŸûÕ;oxñò÷ø“ÕnL…²Üé¥=Wol G)´ü(çýq6³°ÒhN5›Ó–lnï 'Eê.6±e»†aít««ÛB¨¼È!APiÔjyž™&aœ+¥LË€V*Ažç„¦irÆ<ÏÓ/‰¦øê]‚aÚKŸ3ý“$‘€Y–™&Eš°W_yëo¾ówÿÛ¿ûÎNwüà'ïª_Åã£{weÃñ[ÇO<úh/…ÿï^ šÍãg>H‹ôSO=»}cÓðùO}jf±¶½µÊXF#Ë0ƒj}<Œ“LÀŽøÝ/󡣟:}^@ÒlÖ—Wv)Î,ÓPJX6Må ç¼ÕjBhÉ··w´ˆYr¡±:Í÷× (?ÆFFÃ0 &™‚¢,$-FŽm{eÁΞ={ìÄÛ;7^üÔ‘?ÿ—_üà_®ì¾ã½‹kÿçßÿ|ãÇ?wüÃ×fkŽ*vÍ&ÞÛ¯½óÕ¯~Ém«éÉ™Ç>üÕ/^OrI,/ÍÅÌìþìó¿õÞ»Ç"£ÑˆP)á{•gžy&ÍGš%E‘†4ܲÌ$I1ÆŒñF£´,«,Ë85œ'Ig»'%ŽãÄóü©Éæììü™3gggçʲŒãdfvòÚõkË+û\ÇÃç:¶m*)ÀJ)Ó6Lb0Ƥà¶mK!ò"ƒ hÌLoX5[1¦”´\Ó0 Ó0jµÆxº® ±,K›×jÕ8ŽÇPFQdšDgà4›Mæ¡¿[Y–JJÓ44gcœe9¥¬V«ÇƒF½É¹DÈxžk;v‡+KKÏ>û´aÊAÓóPà“N÷Æúƨ½+K=úàçžÿ­?úÖ·¿ú¥¯ÝsðžZP¿yõfš<ü(b}}s§³³±¾uúüÙ —®Î--Ã`B8^5OÙ¥ó×â(·}?Nâ‰ög¥iF#)“œ1Fiéy¾TBç%†‘¥™f+I)µK»†„:’R·e ã˜s¢%‡a–'˜ˆ‰©à“ŸxøÐʾ—~üò[ož–,˜ªTÔgžzôàòÂïþ¼ÛÉêµýÃ!¸|óF&3`£wŽŸ8ñÁ¹$ìß}pï^øÔ‘»÷ů_߀@â{ŽÜ¿³3ØÙé ÉÛÆ++»÷ìÝ-d®›åÛvÍE–K!(+9Ýn×÷ƒ(Š ÃÔĆAã¦eŸ=wþÂ… í‰Éõµ…¹ÎÄúÆZ¯;ˆãa!¬Tª+»÷NL´ R¦I´ Œvëg4ëvw€’”Rà eQº®#×M!DéÁ²LÛµ‚”r¥@Yв,\Ï-KJYaÙfQdºR‡áXGÛçY¡·l:]G¯ cJJ×u¤”2‚0H7ê2CBÃÌ€sùÓŸ¾—ÄsóÓ‹ 3Ü{g¯×Á‡ï>ººv5ŒzI’(iJšíà¾îPê WÉ9gL €Â@Yj˜Fž¥yž/..ÄiB ÜlÕŠx PQVNNOtû;;ÝÍjÝó=<5Ý:þ1Œp9hOomnÉçff8ã3SsIœ „óp8˜¨Z¾Õïî^.ï^Œwææ¦‚Š讃EQ0F !ÃÁA¬ß«©©)mó¤Ÿ cÌv<ý(>öÝ·ì¥0 $¤„ )µ{D ,J!D¸¶m™²m3ð=ŒINsËvþá‡?év†íf}<ž9{qc«xëíK§NŸ¹ïèÑ·ßz{0åaì{(©°,Ç0Èh”|xöFÉr¼´´}} †‰cQ<þÚï})/b˱ç”Ò4IõúLa[fIKÆ9„PݺžoÛvN ßsJ)Ërʼp=ß2ÍÎβ×ëõ{BÌÑh\­Ö\× Ãѽ÷Y^^v]—ñÒ¶MÝäE¢ÍþuësÛgGJÃ(8ç·wô¢F㥷96º´m›‹[ü8-£Ðî«iš:¶­åBÓ4ƒcLû—hg¬[_tïè¶ÒäÌ4Í”RÄ0Æñ( ã¥ÅÝœÂ<¡yÊ…ãáøøñ·ß|ãÿ蟾÷ýÿøò/_{ûÍ.]¸¾zs+N²J}êý÷OCè¶'æ rV–8VõôéÓ÷Q'~iF¿ç;išr.=¯’$y¯ŸÌOW’,mOÔ>ùÔƒž[m¶'$”£xpõêÕN§Óét6Ö·â8¾råÒêÍõ7_G üÒ¶ %/)ªTg§ÚyÖýßû‡O|æ™4O¶“$Y’¥†i¦Ež$Yg•Jµ,™Àuý4ýÀÖ"ýêE»þ‡¦’êÉF“]9çqÓÀØ 3Ƴ"'Ø$„Á¥¦mAÐím׫žëºÃA¯ÖhÞ¸¾qüø©éÙ™A? Ë2£vR–‹»ïüWÿÅyåÚ©µí‹{ƒ½O~òðW¾ôÂo~ýÆÿý7ß=~ò´íJ¡(Î=ìX±¼ žœÜ… ÌóÌ 6-EYæ>t¤ZsKÊÛ.Ëjé‹ïsÎ-Ó Œ*Ã0¤ŒK)…TAŒÆã¼,ªµúN§Óï÷µf«x¯¼òòüüüéÓ§77¶æç¥Tóó ¢‰‰ö³Ÿ~&IâNgK‹¾•RE™¹®+>¨nÓþ1ÆívÛ24M5§TSr5¶©©…ºoÕ z­³WÃ]º7×»  ¤šís›þ¦ «þJM×ÑÇKãòŽgGQ¨[´A¨s(ò¼¬ú­?øú7ß{ûmËE£u¡Âœó<¯×‚î¿ïî»>÷Ü3O<ñÈ—¾ôÛ½ye÷äTûáGŽþÉÿ¡e¡,Ž„,Âá@P¥ù£O=Ó¬¶¾íclä…Þ–"Ó° ÃP @€ ôm‹¤á-³ÓVšŒ1nM!ú­Óä3)%F$Ë ¡f>š¦£ë4K]'p]/ #¥”ñsl{{gpö£K7on...Ï/,„QÜhN'q±´<·°4‰HÁxì¹Xð2 #ϱŸ~êÉ8^¼pÁ „qVPˆL)^ZºsuõFYæ›EY6›µÇŸxв±çY’2ÆÛÆ[ú-Š’–R)€m;B„‰ëº¦eI€i–Cãh\«ÕnÞ¼Ñl6Ïž=[¯7Ò4_[[¯Õjžç/,ÌÿùŸÿë°ïÞ4‹‚ P\¹ríÿäM”e†‰Yd9„PÜŠæAc€T’&cLjbqµWûx4¬Ô*F{÷îå”ö{½8Iúý>p0~Å÷ýñ8œŸŸ’¾÷Þ{¾ï 0ívÛ4 ¥¤B~ìgKQ.Äx<.‹Üu]­Ô¯ém6úíéZ#´ÚXqqÛ USÝŒ¥”Úg¬,KÝWY–599©éÔ·I`Z]'ñp8„¥iŠ1Bõº×¶ßüÍ«Œ•‚²—ýJ¯7 /ï9¸¸¸OQ`Nà×'ZÓyž#Ú­ºãX&BŒ•ûöîõ}Ç6ŒÍÕ›’±k/Å;}h¨é…Ù4×ʲqN“œæ¬cÃ0…J J‹0×ë5Ƹ.všÞÐÌi!ÔÇÛuÛο( ƒXBHJ)@˜1VR&„0 + #F¥*ª”²Z¥ÒhÔ…äW×n¼öò1N­ÅÙEZÆŒE@ñ™™i(Ô¡ƒ×V7¯\Z­úíÝ+z;£$N&'Ü,‹lǼ÷ÞÃ@ðãÇN®•¦)^^>°¾¾677—¥Y«ÕzäчÛÕ’æEVjP¤V­ù¾«¿±Œáh¤»?Ïóã8RBwº]×ó”Jq¥ÄÌÌ”mY«7o*¥.^¼2 ›Í¶eÙJ‚$ILÛ¼÷¾#Éáp@i¹oß¾¥å](bÎÊ"§®ëêæFß4ãñ`lšfµZm4I’è=&ç\ãúTiMý¿01(¥Y–iG·‰B c¤“&4½Ý¶­•ûív˲L¥€îÃò2ÇqQÃáÈq¼J¥"¥‚ܹoçeµRœšîÂ'.þà~þÆk¼ùÚ›ï¾óÁëYZ.//ÏÌÌÌÎÎ{nÕ³¦Äq>;½´¹Þ«WÚHšHà͵ës»8žkC <Ût}G* )KjZ†ëÚ¨f³  ‡´dº|kÍÁp8¼ý¸(Õ.è\KÕcœK!d’$„ä*M3ÓrlÛ.JŽ0 ^P©ï‚%Pï8yóFw²1Ýïì4ênI“$®_½jbbv³VsæÒ¥›a”ÎÌÍÏ/Ìš¦ ´4,œgéc?úå/ývgkë⥫¤³³ÚjµFÃD(DY­9E‘pNiLÓ´ ¥çS IDAT»( ˲¸ RJUJˆ‘mÙ°(’$ñ}¿R©eYFNãÈ4‘mBÇ5à(7¨f«[ýàƒ÷Ýwß}EY~ú¹çŽ>øàd{âÆõ믽üÊOÿñ'7.]ÿÜ‹/¬¢(lÖjRª‚1§R¡”\†ãhrrº(hµZ¢XÛ¥hÖ‰>µº"•RAƸe»¨4ÉÃñc¬¤4ˆa»Ž„Ðt½Rpl`×0Y™+)¢8"†qêÓQ–ït{Î^ \?Ísäâò®.~¤_^ZØ·²øô3Ÿz÷Ý÷ ÓüÌóÏ]¹vab²iÛÖ»ïœô=ôpše£Áxjjòı»W–ðÔÔÁÄ9]Ü5øðÁ^[‘¡=?,Kóƒ©vz†©)ØŽãÄq2==-¥$)Š¢Z 8çkk´d¶í¬­­—”K¥²Ñn6ïºë ÁÖÚÚÖ•KÓ4ùàýÞzçÝ<ÏwïÙ—³¯¬@Y–I|äÑ 1¤äJ‚±~•ƒÀçœgyªñk}ìBb×uË’µzc²½Õ{ïÝ÷Ã0JÒdrrÐÛènnl+•Š‚à©gŸ™œ9{þ¼ïUÊ"ív·kµÀõìp<æ\´›M!øØ}O³ð´I!XßZ1A»Ý茆ÑMÓÔŠÏóò,Óæ3úéëÂjÛv–æÕJ5MÒ¢(…®ãæYιP@9ŽÍ-Ê\Ji[Nšf•Ju0U* ›ÝÆ5—»v­†iÓ¶m©$Æd²=EˆÁ7MKJ%„,в,i‡Ãá0Ͳ8Mú½žeš‚²îöξÝûª+LØl6ò8&cL0ÒŠsæ^»Ýºóà¦eenš¦ãØZ?¨7¡º†H)14ò<‡ˆ8ŽEqVä:0KHILK*àúÁÚµ€ƒ"ŒM„Q$,ÍM¦.œ:Ýô¼›/IÉ}쑺ã#&M…l‚ÿ»ÿþ¿[œ9öáÉ‹—¯+8úàsŸþô÷¾û·ÇŸv‡Üwÿv†]Ë´>øàø£=~ñêÍ—_{ý¾Äû÷Ý'¡ìþûÌÎÎH)MÃ’Cõ}KNÓ”q !ÄiÌÚ4MÓ°0Ʀi1ÆŠ"Gb:uf4 Ož<”j¶êIwV·º}{÷mww,Ïu¿;èK\˶LR«{+Ó$YšeYx~šg¡©©)m¸@‡“““®g ÉmÇ"ÖÒ9BpI‹$IµãjœsM)AI!4±]ƒ¨zKmš¦A Ýó6›M=ŽèÊ€BHÛGaBP0 #¥&DÕjµßïë…R§³-D¶¼¼($OÓÔvLŒ±ëšQ4öl[»'0V–eÎ9¥´@RJ?æŒÒ1-‘ïVp` ¢Âñ¸LR„„@iÛçŒ1º½½‰0M¢ÑÑ[+&Ï»½$-K¦„BPÎF£q^ÜÚ©+ˆ,Ë„¤IZ j"/wÖ¶~öãŸ( –g±ÍFÃtHmªA+*Ó@¡Šé,MϾãN%ä¯_ÿÍ#wM-Χ }å•×¢(ä”ñw¾èÙîÏ~ú‹µ›7„Þ}סÓž†„ôú‘a;öô?þègøÎ;H©£Ï}æY)©Ü ¦ëzœÑï' „PA•º»"ä–¤B#‡Y–ÖëÕ(L^}åõ¥]Ký^`òöÛoô¶;=üè§ž}æÄ©c~à8p V¯ÖMÏq ŒÇã®RÜ4ñ‹¿ó…n·Ë(ÛX[·]×qœ²,!R®ë¤IV©T„i‚‚†Aʲ@bŒ€Œñ,ËLÓ¬×ë·Õ4M[Í&BHwëÚ°E÷F”–†ieÁo·[Œqí¾T©V|ßcŒ ÁIœÖjÕÁ`Tª¾ïF#m—'é8Œ¦§'÷ížu»³Ó­T+”–RIÖ¾¥T@H‰ #+2™TÌ2L‚m˶,Ç4 ñ¬<Ë „åyY ›@fY¹21‘BrÁ‰……ä~à É“$FZ¶iÛŽ–i“}] !ò¼°mŸ2V2š¦ÀƒRN)‹“„r^2n£â¸çÝsäŽÅEÇqþö»ßÓ´53©‹Êj‹+»PŸ¾óÖ;#Ó$n-xþ·_øèÚ•¿ùß»û®Ãßþö·6×Ö?<ùaØ;Ø4 Yœš9zä¾¥Å]{îÚ+µ]ÒjUÖn^S‚çqBó‚ŠL°rzzZñî;ï{®ãºN­ZóýzI c%Bª(sJ©c»‚«²`–å`d˜†­$\åy‘çÆÄ¶4ÍÂŽãôû}ß÷«õŠã:µzqæ\T„¸ãØõzBPJ lÇÁˆEQ–Ì2mË´/1®kÓ²(µ-;ɲ(Ê,Û[]ÛÃÐ#È÷Ïs™ k7<ßYÞ½Ecß4¹Ài±ƒš•bcg\QšsZJA•äÕJ-É Ës+mŸÒœ¦Y™ä®ã¹¾Ï„Ê˲(©àÒ2mŒ Ïõƒ‘ALJ@2fÙ6@À…bl0. Æ-Û.¹àB–]”e”&ÄĆiq¥@åh¸«êwN}à³òþ£G}èác§?zéµ·8&fÅsªž’ ÝJ}ö‰PÄ—;W†Ç©K‚?ý£ÿôÕWúök¯?ûÌ3wÞyç… g/_;?»«=J‡ ÇOž\]½Y­zc(F‹4ã©™ÿ¯§ó ²äº¯û »_N“gvvfg6'¤I ’& ‚°˜$‘PÙ¦UE³HK.—mËeÚ.ƒMX6å"KÅ(Ë)¨H»»ÀîlÄæ0a'½y©_¿Ž7úÃö}›ÏÓ·ûÿçœß™Š£´V¯|èƒ&i z½AE¹¼K² BX*––––ÂAèºn¯Û-ò‚»ù^†G2ÞétiÆúA„辡#ÝÐÓ$eivýʵÐï?ñøã…bkÚíÛ·Kåšcyœ› úA…:ÆB ]ÇJÎYôã"EÅPŸ²<¼‡.&¹\^ Ï*ÔŸ¦i­VsÛ´  ñá½\®Rô¦žÿÆw_zù0ŒËUgÿ¡™Vkyxdì»ÿç…7_m­JÙÌüH×_‘ qAgfft]•Ëå‘‘á¾ßãXÍBH ¥Ô4-M×™`êð(¯˜RÖ!„* ŒŠêxs®`X€2žeY'®ëjºÑï÷“8Ë9ù7nÎ ž·µ¹¹¸¼¨[f;W׆ÇFƒA÷έ­æÁ{ïùðÓ3ó壯^¿qÓ0ÃvWV7 åzehäÖâR½ZƒBž<ñæäÔÄÎsK·¾ò«}{ö˜¶Ýëö¸géÎZ­¼wÿl¹¬Sâãí³;{ÝþøøØ‘#‡¢¸”jºÅ%ÍÒ”1f[öÐÐßë$„\!ßétaX«ÕgŒ1özáô™$ͦ§¶Õ•µµ¥={wm¬­w;=[C–©%aD_ÙØ<±pf×Þá Ò4˜$qßïÙ¶2÷šQ¬ÆU[:×4=M3ÎÄ{ù3¦¶ wÕŇQ;Oeµ,Ë0tÓ2Â0TfQ…Á@ˆ€íö–"Ž£J¥Biæy.Æ¥ !¤À8NDš¦a¬J5M‹“¸\.ë†~íÚµ8!…\unf×¥‹g¯\<Ï™AÐ;þÚ)×Ém›š=qâx¿·¡a°µÑ¼zóÆú !iÆÆ'ý~h;9Ê„"M“v§… ~obK!]× ÂJµB9U·o•é¸K§–1ÖÂÊÆT®iFÂ0Ô S1#MÓ …"ÍB ßi¿ñú±÷=t?“Ùñ7Žãœ;ºû`Ÿ‘ÍÖ–Wð¶ºÍµæZ}¨2»cæãþäÖzóèÑ×Z­®Wªß^ߤȘ?x„Q? õÚ•KÚ››3ã“Ï}ê·¾ó­ÿ%ñÔäÔíÛ·¸$n^?tx.#~F<>9cèÆ3Ï|ÌÐã1FÈu=!@œ8¥Åb!ŸÏÅI°mËÐ5¡!42:*„X–uóö­‰± àì쎞ß½{î;lšZ×﾿knÖ4´A¿ïŠn±ìgdtrJðÄ0p¡àZ¦Q(ä…ëœò`j:²,BÀW !øÞ/ŽcU4çû¾Îòù¼òçóyµJÀ(Õ×S] •?©T* …Z­Çq½^K’X×µB¡!Ú–cÛ!DÉ9“@%I!D³Ù„&iêûƒ¹¹}ygüæõ…±1öo|aï¾:I“K—V[bøñ'ü‡ÿô;Ï>{$#ý…S×g¶ÍONÎJ™…ƒcctt²Ýj3Æ»Ý^»Ý®”+jgYv–)Š ãPE…ÕE½wUG•ʦSJ•œª$/)P¦jˆ8çq’†!¸44#ð»ó³“Gî;P¯çÞ365üæÂ[ÇNŸ-”JTJÃÍ OL ‘nµ6»-ÿÈC÷?ðÀç/\xçò7_t¼ÜÍ[·¶oßVmTÓ4\ºy«`Y&‡K¯yóô•·ß?òÐØ„¥JÞ41ÆP2€·mŸ3tsß¾}f )¹(ŠÒ\Á•\(r³Ù¬U«RÊõõz½±º¶V,•ó=ŒBÀÉ·ß±ikkë7®_«Õ:íæ“O}¨çwÓ$ÂXº%I¥Ò€¶q89=…`ÈYV(TþXp©k&kZ­VÉå=Û¶²,Ó$S¯¥,Ë”ü§\V¦i*eI™‰•zM©ÕªBr°Sç^)Ù–eq–õû}µS0 B…ñ`÷ûa%œs×õK„¦AÅ)1MC7tÛvîÜÙ(+£cã®­%ÉâïÖp«X@íûÜï<÷£~ÿá‡=ýÌnA88¼ïžò̳ßú‹??|ï>Ýtþóýæ›'Þƒ‡QÜéu*ÕšŽñÆÆF©TJ’!Ì9÷¼ÜÆæ¦nèw™%!5Èr.$À„PMÓÕªE Ê- Bõ­T~Ñ8Ž)íVn ¶}Û°mA?h5†«ìj ÿ“¿Óé2ly†W B¤”TÇKQ:€šxðûçf¦¿óߺ|î|¹Xˆdöó—~¾w÷ü¯Ýwßêµ[7Ï^ä~œ3òºS.Ê/þüEÍÒ‡ÇF9‡I$4èàm3³ÃCCó;çtpA” Æ©e›í­Î¹s³4ÖuHi–¤™ß–––‡FF8g¶k%I¼Ùjæó¹J¡pí굃-/¯Ô+µ7n–JÅW65-ì÷]Ç‹(Õ¼œ™/ íÝ}ÇYBmÇÙl6 ¡®g»®!Š¢iZ ‚1ÂB•=Ʋ,•”WõôjØRc‡‚í"ó…Ü]©Zn½ÛÍ'8¥¤\.!„¥­Õê"„ã(©VªÃÃÃY–J) †$”:ÆŒqÍÐ¥Q”®¬¬ÎÌ̾ï}?þòpŽ ë÷Þaérlx|aa!WB i>õø#Pk§I»V:ñÆÃr‹%kh´ôòÏßüÎÄØÄé…sÓÓ³ŽcOLM3BBµZ­×íK kµ*eY©œ««®ríqÎ=Ï3M‹RDZeŒQ!dš¦ .x¯×éºÅ !„P€Ô+ ËÔ*¥Ü®ùÙ••EÃÖ»ý¶ÄXÕ}øÈýRàŸüô¥8Ãhý(*Vs1ë¥4ÓZ¼~mÏöiÆ" N÷8¸pá\¿×Ù¿wÏ}û÷MÕFn^¸¢Ý.V467V\/ox.¡˜grßwäÁá¡z½Q‰ÂÀ²Œ4„ e›Þ¹réÒŠßeW¯Ý:xho˜t£Ø×43MáÜüN!„ãÙ†©i¢4Îç,G Ï´×—7 ^±Û‰‚ ²âÊÊ:ÀEÊ6u-Ÿ‹˜X·-G×B%0Æ„Ì(±3NBÛ±)c’!…©¦®Ù¦)¡Ä”@2N-Ëæ\4M“RPJ¤®ë8Ž1–R˜¦)¸„Ù–“¥„1Ž FGQL(çˆ)ã"!Aše\K·…äYF$„A¤aB‰i:$4£œ d¹\Jâ`l´ÑÜ\Õ(ÿ½þ)’l½ùÚ×./ÿÆ#½ðw?šzòýÏ~ÿ¯~pëæÚ™s—žýħO>Dþö­¯}õ+ã³gÏüû÷'ÅâÐ×¾þÍ£Ç5†G\³1®iYŽ›C!BL !ËRžwȹ'YÆ%À:ŠÓi€ FÇIÆhæåòŽÏ¥”¹ž#%w<»Ýd’®/­è¶—/Tk•‘ZµžÒ¶Äl|b¼Q=}òÂÆZsm}UpÒ¨ÖÇG¶o­µv Ü9wz®^ݳ}ÇðÐÄ+o^+6*Í~sck}ÿžýi˜l47†fŠ{††u?~ôÑ,÷ýÂÐ0Ê0Þ{àÐèÈh­^‹Â Ž#]Ú†“4 ãŒQ´¾ºå÷»óóÛ‚~§R®´[Ý\®HIÓ¸T.BL˦D4ꕜ‰ ËÜÜØìfà\ÑÄ]¹cèE×ãY†M‹`Ti ºe›6%1É2Ë49c@ʾÅ$‰¥ªùÂ2Í`Ї¨v.…ªBd)Qm„êe¹æ/^~힃ÿ¯ÿñ7šcìÙ·w~ç½KK­fxëÖJ³µõùß{®Vwu½øü7¿ûõ¯çÛßþþÎÞz{ÁvÜåÕëSÓ#¦­Y¶—Ï‚Q2<:b™Ø0Œ|>ÏW g”2!…n˜HË2£(BB€Ã0&B3L[p™fÆ0Š^Î…išA)- iœþø‡?^8}æìÂùn;]¼œ9{jÇ®‰½ûçnÞ¾vþâ¹ßýÜs¦a4W¶Þ8q*g»þÖêHÅ®æÖ«×¯æJõ8‰S"ý&e´Ó[Úìì\µ>Q:{po; _=v´`Ûã# üÔ‡?:6::®c%I\©”“$ñ{~µ>táÂå‚W°ldƒémœr¹êåìb± $ÏåòB€3gÏ//¯n®op’^¿¾„¼µÕ®Õªë®e5j•¼éôýW,gÛ^Þ¶×¶M1J„@JJHšÄŒ’p0p[Ù ]—@!…àžç–iç‚RJU¶$¾Rq¨4MK¥’ê!»›7Tö)µš¯×ëŠqbš¦"žß7¦$¥”¦iƸÈ2¢ëf¿†q"D!åtx¨^.——5¬5êµw.ùÜgŸss¹?ø×ÿæ…^þØÓϽzôô®Ý{wìÞvàà½ßýë¿yûíóOìãsó3?é…mÛ¶ •÷¿þêëW;³³{¿ðåÏkÚ—þÕ?›Ý5òÎåS÷Üwøk_}þÕ£gV–zÅRɰ¸ã )À9‡†G‰iYºa*c”J ¢Øuò†fÆI†1¡Yš%¶ca e4…r&9•~·¿¹¾åXNŶë¶Ùl­¼þæÉ¥ÛËc;víÜ…ýGßÿ “Ô­6;Í\Î*½(‰‰€)Ô;Y˜JPaåËa¶çöÃZßïûa¤I,Yi¨ºmj¢V)ÎÌLáO~æ·5Œ5 C ŒE6ƒíÓ3W¯^¥$:|h®#¦e+è~¥šnýpÇüÎW~ù«ó;±ÕêZRF%˜367;;Ü(úížc{V¡À‘–0Ú¨Tó9c躮B6FQ¤øìQiÚ»mf”`Ð÷\WŽÆqlY6„P !ò}¿\.+(W¥R ‚@e‚•$pל¨¬*Ñn·Á{å<ªVýIå„ÙŽ+%4-cEI.WÐMA`èðÎÊí£¿üÅù3§îß?ðûs;vÍíž8wñäûzÄu&’H»zõÂo}ö£ÍNSH°wßÁéíÛã´ŸË£¿}áÿÞ¾}ivÛû~ðýŸ=päÿò‹_+zmûû÷Ø\ïž8yüÖâ×Ó’$>{ö¬b¨Ñ€R*È1„Èq\å&”$i†4 Ý44ÍBBH¹\ã@0 Š¥‚—sAP«7Ö×›•J½Óò¯^¾îw}FÈý÷Ýóð¯ß³¶±@I0?»ss5yé—'Û[½™™ÑrÍ^Ùº¹ÚÙê%©î:IFƒ„ ˜!B3ë„Ö@@ž¤%ÇuuúͥőÉñÙ]ó—._šš˜ètÚnò3¿G1BPׄ€s¦Ž²—·ý®oÆÄDcd´l›º¦™Ò%Dš¦‡aFa»Ýiµ;¦i¹ž[pÝjµARÇi1—3M#^.å 9kcuÓ0\ rÛÌŒQ·¹éz‚@nÛ–m™J„†@ªm¤ã8º¦år^Å@Á1†B:ŽS*••kO¥Ç”QL¥ËUQu\×U–2EVž-õ–Rû­»7ù0 1ÄœKË´4CÏ2B(ÑuL)g "Àýމž÷—Gî?tüW¯œ9uê¹Ï~îíSÇ«õ2„ÖôÄ.’&ÕŠöÀƒûzÒi÷lÛJ“ÁòâÕù“ú¿Pð!yö™Ïܸqçé}4Ìzý geÁœÿþÕo?öÁûÿí>÷ø“÷¯®_ç²mžþÇ¿IH_±á$©eÛXÓ§a8@&IbB€2K„ÁêÚ¬!Æ(ãbïÞÝ=߇È\[Ýl·zíV—QR,ä~óϬ,_mh‡÷ïyçüå$€éÝN»´Ü¼12\[\mB+ÿƉ3½^ˆu¯P…tòÒ Ç±(I=Ë„` Mçˆo¶[†i"6Ö×¥”)eøý}#DHæØ¦#H)ɲÄ4ç¼R)ŽU$ŠÈe<%4 e§”FRR)Óá‘ÓÐ9§33×®^­0–ô;m›éR3zql¹Î¶ñ š%¼ë›Sвã8Žã „lÇV±ˆÖÖVc¨ø}×u0Æ”3UQéºn–¥I«!IY¥RI±hJ¥’"Q«ë:ç|hhhmmMMëêyRÿ0ÅIOÓ”sajvFc‚ .„’ !@IÌzÝöäx5 ;‡ö· LIôÔ“8îòÌôÞ8!ù<ŠÂ;¿ÿÅÏ;úz/€S“3‚RËÂÿðâ {wÏV+ÅË/˜/•¶?s~÷l&¹¢iÚ…µ•ÖõKl‡|ùË_Š£­?ùÃ?™Þ~öôÂG>òä;‹ÊÁ!RkÆ8¡„2®nÁš†»Ý^%œKMC¶Ã£$|ñÅ7››A?8½p $ ¥ =~ôõó»——¥ —.9{záÁ=÷Fƒþ®]ÛK%giù–éZÍGíÑøÛƒ"¸¾ÞŽÂ8ŽÂv?RŽU+Û·M®ßY,ì4‰0‚éX×±FuÛZY_á”– ¥J¡ÒóCüÙßý§¾ß#$Íy.RpFH&Gäry(%„#hè&ÆF8H˜€„.ç!ØõÛI4¨×*œeœ1Ƕ67VwÌNÁV<èiˆûíÞ¶ÉY¿FL@ÃÑ1ô{ósÛ1¾ßCPz® $§„$Yš$I£QÂhûö鿯¦e™¡ŒM3BF¹*Y „ ùn·«|WŒ±jµª²çê‘U,²\.×n·lM¹UÒU‰tŠÿNRîx9„5!%€ ø*á#¹ Ôt !°¶¶ôÓŸü¿Aà?ó‘'N¿õšc;vÍu &¶vï[¾¹tgÙ3ÃÔŒ|.'%{ì±G²4>öÜÚJ·µe^zgåK_úƒj£˜1¿TuâÈþù?ÛZ½nÛ"ïç®ýìï}á_|¡ÕZÒ ¢éïæ%mÛ2Æòù# À@d¡Lp&š†)×7oW¢~B¨’ݺ}#—«äÝÚK¿xåÿð¾óíçGFFnÞ¼²¶±:64~òØù­­ývZŽœ ƒ¹™7¯Ý‚ܬ5¦Îœ½œF‰cêYš­on¶›¬X®×ª”Q*á"<ܨ®77QlYŽ­aö¤áÿLrÓ¬m÷8½IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/note.png0000644000000000000000000001374611722777314020237 0ustar rootroot‰PNG  IHDR71~‚1[gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€èu0ê`:—o—©™ÔqIDATxœ„1 ƒPDg¿( Ñ*­M®cy /à%-Ä‚…úw2Æ&EÀ·Ë ³¬Åq£ ž¢¹+þ=¶k„'Ê(°3Ì&m~½IÁ¸ÇzåNdU /ø^(wøúÀ>uàòfÞêÞÌk•g1Šôûû#_d°‚0ÑIw»”"ìMôzé?ú±‹¨Á®˜t[§´^ Ìe`’7ÄÃ,K‘ùcMTÚôwÖ¬ r²òÏ‚œ£„àÑîMãF%Ff¿ÈS5» ð> iãvî¡©‚]¡ë`·¦kÄÈ'”;50ã`õþñr‡Tìù“ë-Y䮂0DÑc’MD¢à‡X‰ÿß¶‚Šàƒ˜ì#êݘF–¹sÎßqEž*ž§q…r¾4Á Ëe"y߿ʌL“`²–û¥Æ· Îê*p>\™ÍK&Ó±~6`O²ƒáL¹ÄW„}CÅFǬ 7P?¶Úz»q§QgT“zÌ(ǹ§ÚÌŸz @%¹¤ CQôÆ|ªQA°WàÜ™[qNÝ£àÈ:PĤ¶&ñ¦UÁAy$äÝóÎ_¸DÞÍ6T(Ñ*|øjõøAÞg OŠõ…Í-Y&O+êR™\öNåŸIöQýÀàož[ÛÂm‹èB§m‘ÐGʯR/òœßÿ_H‘ÉÊÊßÌL ¼òÿ'pˆòƒ °f Á* £ÿ 4÷=àׯ?e×.>×a„: XV0|ÿþ›áÑÃ/Ú’¼Ï€Î0Ф͈‘3Ð<ƒüý̾ï9!Yã?Ðyðÿ_`rùª‹€u7°îÿO5ý¶}Û¬ ÌŒÐ|¬Ìÿ¼›l­0€špÿ‘ ;€búÃ,…TˆPü&P£÷?¬[C!ǰJiïÞÎàà?áµ§ Œ¼ ²[¿ž»20ó1°qðó7´wÂÀ@LŒ¬bÿý£^Ò$ÉÁ Ì ì…0Q5Õ|ûúƒaÉšS '/n6`_— ؃F0Vy9Àžè˜¸ Ø»xÅ §%ͰuÏU†“gï®`=&ú²`íŸ>}G5ïïg~†ŸOÿ}ƒ¶ƒØ`gþÀÄ*tøç_Ô¨Fò#°YŒž/@Hsííû¯ ¯Þ~ô]Á­¨Ç@zø€zy8À1 —tüÀX`zì'°€øõíÕ³À€ÆÔ޽W"‚ŒjJ½>=ñ³ À&]v6° /_äE&¨yÀv&°.eç–d`š ªˆèü?ÿ €†ùP3%¨˜þ ´üÜ‘› "¢| ÊŠbÀŽÂoHÌÅAœèðßÀdõç÷äèb`ÆÌ­ëϹÍ` q#+ !%óÿßnÞz ,þ2=v›ÁÍ·œ ~ü„˜¡¯#Çpòô}Meq` ‚Òäç÷_º¶‚ý#Ê{?¡å¸P·3Å8Õ€1ñKÄò÷Ïïÿ?ýzÅÊ(TðµL… ?'ÃQ`ÒM˜Í «%ŰsM+0 ýÿùœLx¹9¤%ùÞ¿ÿÆ12.ÉÈÃÎððÞk†ˆ”¹ 燼´C\˜ƒ±¡<Ãg`Ú½ïîƒ7>ý ÆÏ^|dH‰´`ãg˜0{?Æ­çÎ_~ÂPîÈ §*Îó—g¸xõ)ÃüYI q±6À¦ÖOðp&ØÑŒ –Ñ{oÆ¿oR€åÉ, €bù÷ï/ëÏ?Lÿü»Äõçž;ûhË €Éçå›/ Ÿ¿üd8rò.ÃÒ gR^}K3Ûy<À|öêÕghÌý'¿o@”ׯ{LMI”áÉó Íý;€•,#´dG¤ou%1†½‘ ö^† ‡Ü`˜6ÿ ñS÷4}ÂL]œÜ 7Oßdè›´›Á×](.Î0uÆ^†`m `*€ŒÎ1ü~,˜> ë°;”çØ„EþdÝ÷ù;¨ß†–ï€ý1HÒc&½ õ-Žc’”,@I¢ÂÜÀäô›áÇ·_ä ;~üÃÊçÜ4öí,gèm eà`cañ1d˜ÚÆ0­3‚aå¬D! æfpðÐV+Œ â œÀBT¯÷÷D3ÈjÉ1l_q˜Á;l*+COKÃôÙr —2¬ßr\Ѐ[8 †ÈçÞë32‚ ‚?Äúÿ÷0øŸÿýÅä¾BÍwþ3ðs0°²AÄKÄú¶M Ë5Òy—ùûo <'ÃÏ_~‚’*x\‰‘aßá›`õζj Ò*R nN?À…¦¶Cf¹0¿üføúæ3CyÓF†Ï @ùü\©+Š2¨óÙãgÖ¯;ͰyÓY†9KŽóæ†u‹v*ˆ2üÚÅÌçÊÀI ˜å‹?¯"þ3ÿXôíu€bÓ?|&[æSÿXD_üùÀ4<*…þ2òp2pK)'ŒõäöºÉÐм˜ ÿ2°“$È"`•áÇ÷_àÖú`ðÈ©» B\ ¦¦JàÔð(jÃ~&o†ï?Áža: 4öñX@›SÀŠ“•!?ÉAJœŸaæ¢# SçbP”bX<-žÁßÛ hv]™'ÃþMÀÓ‚ä;x%Í· ,Œß™€%ü€b™¬@‡sòz÷BðÌïL>ðN(‰Ä ô¨>â¶Âû[‚ªš72L{ˆAI^”¡°2€A\œ¬üí‡oàqüo_1ÜÖSBÀv ”(ýs3lÛwá70ôµ5¤ À¿ÿù`|ýö3ÃËOß$%…°è÷õÒgàZGŽÞf&Ù@y¾ß…°„V“ÿÿòm¼Ô¿{ÏÀÎ÷“ù×>F€‚xX/psËJ&þw¿³2p²ÿE ;@²ìÍ»/ JÀ’kÒ„h†€É ¥õëøyQ€¬ô¨%m‚bé0¿þ&¹ó‡Î0Lš¶‡A˜¿\€ÉÚ ’Tq+È 3\»ýX:^Ži!`Lºzê1¸z@øÀ$üÿýˆ›@¥ù÷ß®zãÔˆþÿƒñïÇ&`eQ@°*Œ™Øû˱¹:–ˆRüà‰ë7_0Zé0Ì™Ë (ÀÉU¾’aÑÊ“`¥ïM1PÄ,l,Í”À%dTâlÏI ž½ghªôÇä`¥ jîk[/Wp+會 /ž¼·p@rÿ±ÄJ ï¾2üÿ mR!ûkC âÞŸO þý PÑüãç/†·¿sË?þþÿÈï…€“€´¤ °ù÷áÍÐ`èwWw=†e³’bÒç1\ºþ¬ôù‹OÀüö“XyWæ»3œ½ø(÷ŒA]XÔwG2øc Z¢‚`ò3{FDˆ‹A\Ønüöî x^"º=ÿRj‚†üØ~ý ~ff`²dfÖ/ßó¥íRaF®Ìlv`µBÞ€šX F.0 ºyë3Ì&ÑĬE Ÿ€éÿÙË €‡P­©‰ÃöU9 ÷î½b07Qb•æ' Çÿ#uŒAƒEœ@µ™™Na¹ï¨òäè<Þg=€bWv@ÇópƒÆõ™žóÎG`ÆM7 ŠÞ{ÿ…STTðÜ2p±üóV‡PÕCLðüN5¿þ0›g ˜afxÿ•è!N`Žâeøùû/ +×Íß¿ÿ?åæb¼!-)Öu÷á“G?¾f€yî-¨5ÁÅ l?» ülá7>}ýáß{ŒÙiªyLÿ!1ÿ˜€±Âô+ÃËÀ:œœÌ~ÿça`báö|xîñ ðmùù󓬸ÐC 1Ñ%®ÜxñØþ ƒº\¼<àÑm #@<÷¼Š˜ØÙ!SU¬¬¬g~þã¶Ä½´þ9Èž–¶™¾þ`ö ˜MJV†À˜ùú‹áç_n6!P`6 |ûþíøßß?Ù”dÏssq;ù&ÐñÀ¦ÝïßÒê;àG>óáëÏìÀ “˜Ä€X6...®‚â¼G~ýú±ŸŸ‡ûŒ´ø> ã¯=xôØ ç;ò;°x/¿åC^n†ÿÀ>¨ŠEy)ðª>P] *àÒà¶4´nÅ5'î1 FlKÁÃ?~j>~þâØû×·€î6è±ù˜TØx€¡Îý_P€©°ÏjЀ!ÛONNöË_¿} êmscT(;ÜÿþƒÒ)fLNþÿ_áGK@ئU™™™øùx¹$Y^2>ùüƒ›ŸƒGô—¤ï~ÞEÜœ§XX™ÿ3òSf&æ—À|Ìëÿ™ýú-ÈÎÊ*šüyT ‡2ˆ ÊSHÖPÃý ñÅç à™L`»´Pª­éç.JÒ”.×m}7€Re­ï«°Œ½qÃÏ—¿Å?ÜHB»Ãø<ñãrÐWš¯U°rv–è<V‘ò½¡óXGuÉœ Ð÷þÙØöÄÁš»Þ´~|žÖ¦•¿t&jsݺƒõãöñÞ.ãÓҵɌn}Àzc›8íPǃU¨Òj³ÝzÂZ³)<ö)@¿or£k\¥bÏz­ï¯võ¡ä>ïõbâÏãñu‰yé´º¼kì“› k.sôT6»ÑÜW÷ÞyMµÄoµ0êûàî5j—ºß79'PklÔ÷§Ô×JçZßkäP¨õ2êûãnÔVçÚõO™ßèý+JÅZw£¾?·¤:× 6B£ïEÈ ÔÆõ}ïÒÚh|Zz &`Ô÷™lõÓ¹ÖþnJ¾¨)Ýr¸Ï”Ëó( M4ºuï¹émú­\³5m£[…O²·Îµ7¿;@Ý atëäÙêm÷òèÛQþø!Z4£[‡§­ ´‰¹€ZX£[?—Eh‡ñiµøF½.8ºÖ)Ðvîý¹Ëí.%x^óB׈¨E7*ÐØ;Û|,>/=€šÍg4PýF5èW,ö½™ÎûýlåWÙoÚï~O£( ìñòÏë%úûÓŽÿ(µ“Q€šÙT@?ÒÜwδ‡Ñ‰Z±Ñ<@/éÜ:aÚÜ(@ÿ•è=kÃŒÎôdý7=ÐkcŒÎ´pï¼ÛáÖë´QÇ£©zqÅê¢sm€ÑŒ@ÝW3NÔÅ9üý^—yqxÀÔq|®õ>?šb‚ºï…µm_ühñèj´]ÎûóxÔý¹,#¿Wį>» ämýW{žÛ9A»†uwp úUᦟöxÔë(³üÇYÄ%~Èâ~Èe­ÒØ  ¨‚εôFE6u$ "›l+«Q©í hë _$íËdTÊåV š›ÏR•ݶ¿—%PÙ-¸vÃè˜/â~N|«®b;†™£‡Ù¤föëñ´O7@…0…æ–ú‰úX4Ç{˜RIíü®šKõMhDku‰÷â†Q¯DÆŸ[­iÛ/Š@è\Ãè½öûEhŸZë\ÃherçAcW*)ÄùQ‘^§†ÖM³¸bŽ–ôíNš Yu®1GO:Ù#B@û4DçF_û¸;T€æ;ôü6Œ®•  ¹÷C“½º ÆJçÚÈÏêöÆ´O::g«rË:É¡ç¡ßËòkôsh×D tÂÅ}†?Hß­= èT:qy»äÇ Ãu¦§Ùz š~·¥ÿ­×ÿ ¹÷ô4;oÕÞ@ë„f‹rƒöÜ”¸lZW Éöe²_çµá/1­'Ð4‹;.{Ö hÐì_ÎcP÷rÓt¹ÕhÜñ‰Ëá5T'4Ej 4œÎÜ.-Í5ŽAÿ–žfÐ 1>q)^+ ú:ç¤î‹›×9'Í­XF':Üå¾@Fý ŽOh¾Ũ3P)¸üo^»gÔ&õø"ÆžF?Í­óÂjùî•q@ÍãÌnF'=½óEoëNM±¸×¡m·µþÃÅ")ÇgÕ×.‹þÛè%ÕóêsAÉÙŸO§ç7dVîà¡Kü–þZÿv‚¢óC)F©þåzÐVß.ŒÑÆF¿šl|¦ÿîëÊ”~4™Îæ¥Ø\²Fó/ñ=ÆçÅ}³HšÖ4zšl|ö[ÜSl7A£O@“éÔLs|n©ý:šLçß7Í;ÿR{w:ìý¨2:çG³½Õùt1‡ÞŸœøøÜª/Ô«¿4Áøüæ:£!¿Ôé䨀ŠOеJ£.C4ü•»4sYr\P"Ò ;>?ÐÔû¥¢¬ï[ }È *75%¢ÃFªîò´pãsk¬Ñ@ãÑ<¢ÇCðä¤F—ÿ ù±eU¹TðïùÆçH ›ô’ÑäçAãÌâJ>¥¨Ù9*4Íe±Ç#îÑçk…F/³_·Ööw)ðK™Ùè×ø ¸ÄoõýÈø ÚjdмQxÞýyóÙåŸO4ÕR~ÚÃ,!Ò^tš‡â¾<X׋EzÓTZ^—ÐÈÇ =ë1A‡L‘ÃP3c|Þ­íËãWs fÏÓ‹ ZÖÓE¼ŒŽw¹OÓ(@Ë:Þú¦Ò¨Í-£½Ø7÷fºaTÔå–PûG e½½yX!Suš[:Fz¥7°}Ç4ŒË- 6ôôB´Wt ð$IU´ÝÿÖ7_EÛ7ds¥€M”!­É€R´æÊ Õ|@ £‘š(ÅiV  Ñ Í ”‚41P†h„&j ÐÜ@I¾é2Dµ›(iP†¨t53ŒêP’ ÿbˆJP’ »¢zô9ŒŠP’ /1D•(IÐïbˆÊÐ7aT#€’t}CT €’t=!::€~ £C(IЂ¢ã(Iв¢ƒhq@I:€^‰!Ú=€’t½C´o½F;P’ ·bˆö  $@ïÆí@+ÂhûJÒ´.†hãJÒ´:†hËêF›P’ N1DÛP’ ~1DP×0ê@I:€zÇu  $@Äõ  m¨S%éÚ,†¨G%éÚ2†humFë(IÐö1D+(IÐ.1DïÐ^aôV%éÚ1†èõJÒ´o Ñ‹´{½@I:€ŽhÔ 8¼JÒtP‡Ù:®ÎFcþI”¤èкMµ˜ãÓJâttf[Øñi•¨) È:  *5b\§T(wLñu@µr$•B§™ýýè¹Ö²Ô>B–˜ ’ÝCöx$ÓiLPÝ6j%Ó4Ë-€Ê—_Iÿci(AЬ IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebrafctngb01.png0000644000000000000000000006224111722777314023412 0ustar rootroot‰PNG  IHDR««<ƒ3Å IDATxœ4Ôç{œ×a ýSžþ<Ó3`ÐA ÁÞ)Q½Û²$[.’»“¸ÛI6qü&yS6o²×f“lš§m¼q‰åX¶eye«K,b+H4¢cf0˜>O¯çœýëýîë÷ᆿ!Øá1¥ZÂpœÏ^fÊ© Npó¥LOîºôÈé*(ÖPߨŒ(¤3 j1椠„#Û72* 3ìBW€ÊÄ Å¸4 #œ+3[éšœñ!Š4É¡42$D9Ö‰2îz\ŽT ¼”Æ¡1¯&4Jƒ„“²4 @ÀÇçb"£ˆ GªÓÑÙ!˜IA³N\æå"Îêi8aÆy`C‚d1©P¥OÄ[ôTÀ! `4€"º„‚÷$2¨ÉsT`¢ÀSØÐ G-àE!…&ï·¸ÔeWƒ…â‡QLŸ«Ç®Å‚h-": ¢@X„ì f™ËyJ Wºb‚<òqªx½z5mu ÏÃa ø–Ÿ ¥AùɘÔ,ËÉ Í÷xÀGBÁÈÌ1È “°€ÄCÊÆ8É÷€sMH¼¥Ë”x¤Ó#®£nŸd)Ä(+önÔfWúãmŽ‚…þ–O£±Œ˜ßÁǰÃ×eɈ£mævh@¤,õD;híZ‰«.‹tR|J#ª¤$‚hu s‹Ä ƒy/”À€!ˆ <<ƒ€ƒ!L@@ob[,%xŽzi"…­|êƒv+QwAL!u‘'[áå%/±{ n.ŠóÆz;ÀX£u(cu5E@Ô:ñ9ŠxhäN]Òy¯<踞ó€³”ĬD>’–'#¡sI-ƒJÀ“8ÑEb!Ä!„€2EŒÌähÈÏåqH0Ķèùªä›uJ©tx[®dÏñ5 =e”vÚéø1YZt£¹=çö´ƒFw0cds½&‹œ‚Hø–†@ÎF(®œd×’  ‰ªy]®§ñ²jëéú@RŒù#4*$˜Ë&žT0ˆJ¨È8„ÀÀD€çi€J!—ƒ‘©Ï >ïÕñ”¤ 9a~ÀEš Š$LxvÓúò:²2âð‹U3Q½vì@¢˜LCë]/TUŒð€‡ñµ"†Fº²/AšØ–\ÙwDñíÕ¶ xÐé1y+m´í~cGA@aŽœà˜‹xÌJ8†0à XŒP¤`†h„x„| !0†îz<Ä”) Ð-Ù !m˼J<ñHÂbÜõ;åN¿œHæÖçâÏ…r£µ¤þ,€ßxN(„AÆ} aèÇ{¹¨»iwè&åTAð“e í¢/šÙ¢aÜ'‚ðRÈ"ê*À‡Œ'3& q(ß¹HJvÞ:s nOó"ç˜!b–‘(µ5¢æ8(#TÒù±Z‰Özˆó—ÒH‘¬.ÕÞ´fñ¢„.ä ˜!`+ÙŒmfUÁ¦€ã‰h÷šùnºZT$ ‡H&¡#Ðr㼨`­•‘h€8 (DF" 8Q.šƒIŽ2¬ÓýÅs1 »¾ K›qÑÕZZp€ïºa‡t­/¶3—¹š«FY°³{•hqØqEŽOŸ(b~0(+" £@v¡,"_€1Ù‡+5±E„  drqŸ›¦Nî´êÆšº"2‘gÈ•` €Ð"T #óAÁ1† Õ“²Ðô;È*•2û’¢-è\Ö…I&ÊY!³#Ééæ©™´—:ËN˜Ñ£Jó‘f=5Â8‚tÈ8AÅa„…ûT¯ƒEâQB}E €ã!ÉíßÓµóaèÚ®£zèLÜ‚Øzf>{R (à݈‹ ñ9䇎u@ Â(b€1»dÅÕÈM¤äº4´Â¤šD5¿ ñI„8' mSí˜!ïmÚÎæÒbNPFb:]KÃX”A‘µ†Ÿm§ºÑŽÐã#Lˆœrî¿^+×¹¸¥¾ÏC†;¹Ôüæ-§U)àbXæøà)@œÆÙÄEIA€B† A$¶o]žqÞµí)sòrŒ‡”njB 6"Ì#bó,H«Ê+ÇÈŠœœ_kÈc˜ƒ™%¢ÐqÓ¡¤òR ¯qøáPWº¦ãíÆ*¡p k|]=ø†ÍG R †Üjú}}‘a÷LW^MbÄBdû0± çÅAÌá¡Ã!ÈCR«aŽÌþõq ¨Ïikxf›XXý΃ð˜ÃMËÌJ "\hÉqAO”N„Ÿ%ÍìȦGª¨Ólâ4†®ÂCâFi|ÈdºÌi1®ÔEÑ”Uê$>}r’©¸éìæc‹QÜɯ+½Z²•UÅÍw)…ðÈIù‚'j<¡D¼ ‚ƒ¥`†G­C§yO”L·¶aööÆqÊ0@kWÑÍH‹Hº¸€áfŽŠÌ‡Mnt ÝÓPQÏe¾ !6ËG¦€q4ibhò‰N Y21Œ(ãBKŒÀîÞÄœÏ).QG•xV&;¦±ÝXì1-¢˜‹„<ê‚)‘ç$B„a‹q®æ£úè*§Ö¾úd©çvlIìj¦ÌoaÔ vÁ5ÅlÇøˆ<×Ò’PÊ5I¿ëœ‘E¿mKi§úºãhø.[> ©ÆDƒTQƒnb¢Å©³ìþ¹Ô:cHÚ¦W£Bw‹ôN.phuOLŽ ûT ˆM•ÈTA`”ã°ÍÖ Špú¡»Ú{g~mŸÝ›‰K®¼žïÈÀæÇÛLdõ„mÎÍYHQ–©I=1ý†¢¢Úì Ž®¡)TpšB‚ð¡H 8’p;…L„8/¢‰ÎH—”ÐÝg£Ìh­“¨ ÎäÆƒ¥Ükû®\Yç˜<¹š6ÂDÀ‡…¢pp‚PÀÙQ÷˜2uàvžômMQSª Œµ¥8Ö·’µµ0Xq„õ)éVJLFô˜…ŽÝ<;z òñV§“,:ZiÍsM¬GyM2ð Š"& £©äçÄà õ©é¥Ø Á›”˜ñb6¹éìÉÞ„»Çòý¾1ØÍ™ýôå–†dóŒGŒ‰|©Ok¢Ì‡d€¨&B‚UÏÍ.ÿðÁ/ß§‹b= ”mt+™ìL±ä· ߸ÜÊe Ú噟I˜x>ûj¼DÙ°8g "¡‡m.û]3 õá( ð)å$TÃuYíø ¡¶b‚T“øÞÓ¯Ñê'*KA¾šI.üÜc°]t7Æí~*2òœÍ™=ŠQœ£ƒ!?´N’ù6?6ÀS¼ÜÞ*þØc9­ â9Û5`[OOm-0&*Ûjy=ùbeâuPù4!g²N9kCÌ-áHsø®Ð=ý‹´ß7{£Ž'±šÏ· ÖYs^k*·V·$½p:;ÃoߣÌ+9Ë;ôF¢ úLBIp±+ }™Ã60‚0€T F°½í|%Ñï¼&RbWN†×Ê;òé~Ý®Öã-2æ4ý"6$°(ÿ|Þ›*Å·õ ¬M0Ž!B5ŽvcnZÄݾ+àÕ”±É+]—Ws]uE “åS7O¹'nÝvGâÀnç®>¼ÛØ;/O¯ox¬†<ý@¡DyÂAD! !! …v¥@üѯ:=á ¶uÌÛè&ʰ9wÉKFj.cèsò®ê|_Wì0nm»m’žè OÕ &!ˆ+Bàªuç𪑕ô­<>®uŒ-ÂDû=Èz— ¢: ßÝq£|ÿKr†lÄÈ€§‰‘G#v˜…\¾‰h§?f=}JlìÝrW =Ohª¼„a˜™±îxbñÂ>G„WÁ€jF„÷v騫 Ê+[ÅæyE‚$äâíï̽Û7OCˆ«(Œx‘ˆ Œ—]„#UO„ÿø©Df8ä‹ZiÄå1è”ÍvñêdrYP6A./7¦Œ[Ǫ¿”7Ûœi2IrlÇ€«êÝ%AÍ5Ó‘çpAÌÎèíxòé@°ôDds}7½Ž5Ìi gò\,µ7WÕ4¯ *’y‹h ,AñàAÄ Ç 8±Ãt5r“×¥¢ýÐ[¸™XK\.Çv ùoœ=>Ò×ΗŠp¹SWF‚‰§J÷µ]]½PËë+”ˆÂå›íNôðq6´4N™&R$·YÀáÁöVÐ:d}~.l¹àH5FÚ V`¼-Qu3Ù°aÝö`½ë¢J2à´æpbh82z ޏŽÝXrÞILm U +ÆxÓç©Ó“®^[Úƒ7­éÁ«·¼µ¹Ùæöü]ÅVrnø`wð¾ÞÍ¥þVªW¢éŽçøóDS{˜Úêê |Ï@;ò5$!ƒø0h&k"ò¹N™xõ¨©Yqœ^ :¨b¹«>Ï:ôs?=|ÍOoºB“E‘m‚»$+@Öôa%îßnÒ7Ž K¥ÕÕxõ|ÝIZ˜ ÓÆŽ›ÑÎ|ý|_Ðéâ¹ó4³·¡îtîïÌïi†´ïöTQ´®¬áp‹¹Ô‹Ö:í8qwÓ¢·Ó‹jC‰f†8<‘"MÒ‡3*;IË?a!PW(aLÔÎï¾ök7< ì ·*¢qìÖUyŒÖ»‡~z$û×Z“Ïvk·Ó±Þa°–4°–Ö.¾mï _=’ìÖKól½RlsJiP‰;¼¥â“Ü&§3Dª‹Ž„ØFAnÇÄàîS67¹>Ú²„_€$JdÚ°MЄZjx¨TvÓíZrÑ‹­j,—¤8;Þ–ÅÇnÙ¢eÞøþá›^^˜±Ê^ï®·y*t\ÞhG;_O>¿pLκVßîdÒÏ;¸ŠØC/çwM¬µ'7o9F­ÜyCâÅR”—ÝhÜT(~,®;"qâñÛ±\#ʇ“‘¡MÕƒŽU`“˜Ýözoíø¦§ó§zJÈ3‘˜¹j%Å7wYM(ƒãvO±\ë!œÌD7i‹îòåWú“AÔj-xw¿/}ì‰[%OœÈ¤Þ°ßÿ­Ñ9ç´ ¬GÎfÞ;?9Ñm mí*0Ž|×{&×dƒÓ\•¹›—#e¤MF&Gçú|ß‘l`Ñv7 g€Á²Wʦ8'"$Ó…‹`ÝÚß<ð:`@1Œ &gÓ•‘3²ÕwçÈìÜ¥<Ð_-NpfÜC¦â‰Ôå¥]vª×ãýËÕj‰¿°öÝUÍÌŸ•ÃÛ“ýï~õ¼]Ô*ãaï¦61ç=àz{»¯åbINYÙº0üî‰&˜ÛµNP°=]2¸¿Ž?Þ€w/ÈkhPG*ÈÚÆù@†1µoî6ùmakÿVC…L´ã»7aõ±Ákkd!×gn]‰ý™ñ~MO;²Ï¶T/m‰Ùe³ú˜5šùùP¹Û›±wØöØ•v\sÊÚj{†“ëQWÈÔ[y©-ÖMç×^S£U/·k>`׺©±Ùké’Ez⾋—<¥˜œÎð.ä’-Šþhÿ)‘eÈVªÍ«]Ãz짇½ærÞ›¬ˆ½æ¡ôÒVÊK©€"!>£!#óЀxsÿÜO¹½`á*í&†Î_€Í`ÖÜ×ç—†VW޽ÍßU­'è.Oñ+TºåqMˆwU:Ú—.4»šeã/ýhag[<©ãJ¸µyϲ¹^ÙÝëÅdÃL'ø¶È ¾‹ŸòšPî¿®¡î¶7­!™çT¯Õ6¿m!™Xn›KЇŽ/¤­Á¡™åëÕªë>ÔYkûAQ6KÚ†R><óÚÀZ‘Š3ÿ’{Œ¥ÏiŽøTag¾“šlXÛ´•á­ý¯Œ>•ë }!•3B5ªP[½TV§èv¢ žZ\q™ß( e#ùDî5&^´ F"Жû¥€v{ð}¼m£V]æÅ-9ÄT¢>½`Fa”ùXWg>ëKZ” ]ÜædQ8¿Ï§¼(e¢Óz:\VO,Š;j¹ákâͲÓX¸–3Ü¡&Xgòíí« øîöëF¯­Ìñ?>ysSÈ%|… O3i9a…4v¾ËÒmª‡°L’•NáfZ{ß¿df)¾nE3âºa,®ã½  åBïP|£Ú ±[k‹ÈŽõªû×lTó¹Aϱx—«ûnÞV3[¢]«º¸„_Þ®,uâáø†ûî 2Q6ãõf˜Zn¶·/¾÷úž@ÐTKòê'_SŽ~ßî+OÅØ‹…ÔÇAG4Q O6`¬ÅNœKö¬d¼ÁÅû¥×Zn×<ÿ¾·ca•ºA~«p©•kmà»\•†EwŸoH|—ß±®’¸ˆeÿãW݆hŠ#8Ô•I¬c&¡rG´~²l¯ÒÁ2¿¶+ØÜ±“›Â‚¢úãCQ~°Î5ÂRÃ’rëÚѵ»»Ež¢ÆÆUT¸iYÂîësM©w„TRm#æáR¾™¼g‰ëͬ #×} k‘¸BQ÷¿8î×;ŸínÀRÀùs#åæÒ}gì?˜%†âa[Nî»ôØLÊB¯^îX”“S p˜«Ë<¡ñûü½—Í^!û.\×Ñ]¨y¥^^OÛ£ÕbWZƒª‚Qé€@Ó íÎã(4¢…rä Î'ßè!Ç_+Yó=u …"„È®¯úq¶BèâPv4¹l·¸š»¯ßIÿæÊ+£_š £§•ÁJ‰oµˆ}š º8¨çtÿÑ+·’7úZ´žˆlÛ9°uïãD««of:¡ S¯Åv.ɨq\—Å}Í‘Éë±î@ºÈ¶Q~¬h™Ø:Ï—6u92Í Œœ8s°sÿáp÷šeÈ® «Á{Á"ÏÔÓ:Œ˜ûÛßJ®|øÿÄ× 0·º^ÀÖÌ}ù›‰ÿ¬xcâãËOëa¢ºvçsÒ“šHðØW/Iõ´€÷Mêµ´éá(n ~+Ò7^\ÜøÌ­©a0Rºž†ÇÎ{VýlQØ)/™öNÞvØV«Ô­™S²£õ®£ÅÃÅTcûŠ.Kƒ×>~G+^Éc¯OýÄ#H”@¿Ÿò‰jÅ=wÑ’zš¸©-‡× ß6âÌ¥…“·þè{Ç.þÞŸ¿ðzâûò ¿ù/§hw=ù•OâûÏ„›Éå¸.ù7ozø|Á~çWß$÷¾J¶1¼©bBŽ’ ;cÁ¼±:e¯Oü¨³Ç“zÍQ¶ š\¶º"³z›¸Ïé½6‘õü®-í"I¿ÿfñ‰}ò­Ñ×±œÓhIÔ÷%Fã:¨;ïÛ¶£¢Ûš\,>\^i»þl'Ì>ö÷æ?üУöÅ7Ë‹ý­—¿í5¿øUø›~°gFð0¦#Õ¸¡6{ÃÀr±£éÊý/Ĥ”ʦˆ%ß ÑTÿPògûñOÜj¦g5©Þì6}"ú¡ä1±K€ úC¸µ#ÕÆ/÷Òd¥…s=7ÓÃV” þà`/Ê=¶®¸râƨ‹ÿµßÕ…–#&¶FÇ3sõ Äóýf\Ju‡Ëœ¸ykWºÌšÇ/8ƒ¹óø«1R?X¥‰™xÀSmƒ‰Ê‚OWÿìŒ_¬á¤ƒæ¹z¦ õÓƒù±xoÙv»†Å¤†¬À'27Và è»}¼¸›Ü{úá™äÖdyß—:c†Õün]*óQ v¨5’yqý?T¬·#TliEáùŠÇ”_3š‡—: üõ ¹Ë{ ›Ÿžèy༭ÁU­³Û¦¾ïôàTÝô(€Ž£J¨.æ_@‚ÒÖ@µ‹²º¡Ž6—„!0™s’ÓmŽ4’Y¶™ ”×K‘ŽŒ»/Må÷»Õ%| yå‚7( |"ßõíУ<ê‘=%…™º„QJæMƒRÉÓ_ùâ÷¹þ0ø'Yž_Ÿ™ÓÏH/o4ñ1ŠR0¸üùs¶Ç×´,!>õÄ<•z˜ÛÝ6á``e•<-ò*#ésEu¼Aƒ×±€@ê®@Å$„˜vvßWnß?éq=Å·{¦zöx Ýæ;š]pÌŠ~éôÏFß[®„ùÚ)ÅÞš¡Qww³¿Ç5®n¯Æx"ÅÚó„x<Äû4¦& ÒO$¾ºÕªÕùî]IÚšÍ4óqÀY%Œãiï-DˆÔ ¢Œ2ĈO %V0²1ne·“.HPlÏpüéÚBÿ¯—ýêÏŸ>³g¹ç/>åàãf—$nÕ¹ÆüËšw¶œÐŽëÚ¥zØ/Û’»`‡2`ùöÓA_Uî]1âµ§“5´Q„E)æÈ +£º»oåkʸ¿1~åêHüI¯ºZ¬ l†p^l÷PÄPð Aáô®Vh·¡´c^È¡×ô}PõÀTýÀöÏþñéŸìÊ¿°z÷g~¿¤ÇS®¯ùb6²"{jÑí]eœ*^ne/ª\šç©ëÁk6bÙæñ½vÐ[~öíÕCS7¼!÷µ.og-i{;´Àa{uBm4Us&™º‰&¼—^yÊn'~ÁKÚ?jí󗺻º×!ïH) \Õ¡A,ôzë/nè.e} Xý•úVáÕåŶ~ö܃ß;û òüøH…LQS†T¾”L/ YÚþ“b»¦…MI=ùš/ KKÁ°~]qr7’§†cÖò.'>ï‡a»j™Äk«©#¢Ó§&Ό˹f”¾p-ž²°g9Û{l0yßD·=°/C*8â¡€¤Fµ bÂϲõcaš³¼þ†Éï¸ýµàÅØ#Å¿ù‹'~ÜØX°¦ç@â²6ûWøŽPGý; |ä'¿pã}k¿òêõئïÚè§¾½ ï½îî„IÎË$·ž^΀ŒÔoÇÖžGdÏ€ÓÆ¹X\í™X¹ï,o5\ÚuѪ ã²3xúŽÕûã"&žÒ?Òr¾aÆpcfažq|XÐQÌâ‹ÉUíîëK­ÞšÚr¢ØÞÅÊ¢ž¿ÛûË}­u“Û¿'ï~vêÍ:>nJ»EÛÏ|,7¼Ñ}ï—Yå˜aøò…3‰ ®Úúè†m+¤!Q ¾ lÕ™zGrŸžÞ?¾ÕJv·ÖýëwM—T;ÕvÝF&Zs>ù3»Ų©"iM·TEÄk™oB1€A3Â)é¼=Zÿ;©s!§„bž8D÷/÷û’)FY*3€c5wä’tZz–£@Ã]ñ±8gÞùsYi±Þ)Ü=puPgOãg*BãOßy¹ô>~(ç¾vyY—y#E Î kÉÙØlZÐÔ­`k¶.‹··7L?=?ã†([žœ µYŠºOœm Q3eK×ÀtÑ: ]A#–öƒ+DϹÂd8ºrMn ½ïu=Ÿ¢\˜Ç»Ü-@BVÞi ½ú+ÅКN° PgßyyC绩ÍÎî|•t\A¥„)Jóêò,ápL‘#.ÜÍoÜÓ[S¦›ÕêŒÅ—Œ¬~nª;ÚÒº‹š1k‰p+ºÆVü3‹!ÛÖÜ4ý¶9û˜3çÅŠ"ä $:lL»L¢B°Q½{ÇÅ“îñÛ{9°ËÄËp×wžøóÚÕBåáó©`çg³øcŠ| ˆ÷æ*£ã‹aÖcÞä–@.¹Z¿å œ˜VGúl„Ò¬Sóx‹×ðC†éÑZd¸¶a £° ±¥Šg]]6µr¹qôlögc$p?³{&ÌÞ2Ì¥ˆRì‡ðŒÀ.¢JËÞö2X~è%Öd>°žj~¹³ÔçÕÍ â!ü‚ïAy\¾¯‡y0?¤‡‰;^Ü»ñÑîŽãߺ·à”wžB·vªûŒÝŒ.Ùj-,åd5NÀE0Îwø¿G¯O¬Úqq½z>ñÍ~*òŸ<^¬í9rÎwß>4·¹ÄÑIá½ëC37®šŒòB{’¬ F)K?z»ê-¤ŒÀö}ÓÛÙH|xñîi‹1^eò‹ 'à2,œ‹÷Î϶¯}°¦÷ÍÏtZ§–:Oßš;‰—S€ ‘ô¡gÔcűŸkCÞ#«»ëÆý½­«™¶hsO½Eï®U8Al­Lü;tkâÈÍèŸì‹¯lÜyl¿ÔðFÚ´ûÌ÷E/y­ÿ½5ëRÊ‹”Ü^¯µD¦I®~3¥éÔðŸ2>®º]–äêÄp8Adn0¢•õ ÝæX;·öX{vÒï)ª^·ÕŠŽ-á/Ú×w]Ü››GØÃ¢Û7ö)Ú…(¢P¨Â;®šO½­ ÷ízüþñ½Ò¶Î,ÍÛ6ýÚ¾óýJç×ú¶e+ã üA†¹ŠÅ„gÿpïVÕávjMíÉÚs¯ÎØXär’$>üŒCÂt¼É CÕÄ}0dêEWGWwfÝ6þÙÂhGapÐi»Zdmk{ön?:uGª¨N|ñv¬ªûjìÖ°`. ¾²íÇ~3Á(Ç2]*7#/½Êè=Û½Ž…º£“ü_ ÑŸ.O=V{™2ÀÓP>ü[ÛO^»ûçïç|í)|¿»…ŸZN•×û“‘ûËG~±Eÿ»cñRnÀލÔÿ‘›ý¯”äš.£Ì3ó»…FG‘’P\3[²¥ž›l¿Å¿Y¾_gû1!¿ ÝeÛ*-I®ð‡‹Jù‘SOÌ›3püCW!‚‹]étnúÃ+‚Òãai)>ÿÚܹŸ­Í/1p`Ç7aÏ@ò;Qñ_Ï~¡òí=YüXÕ½)IwTŽŒÞ±Ðûdâ2ójˆç iGìØÐÒC÷tž‹L–þøÌçû7*Ú|R4?Ó¤¼w|ºH²iö>ST¹e5mASÜä@ahWŒ/àÀ´fæº)“Bä•NýÉÖo³åo¼ÑÙdC†·l!âYtIew—’ŠÙ&öGóOþYw£ÿJ)}"0v~üÊ7Þ|}ß=è£bû£¿vµùoâÝ{œ «lysks=yô%½Ôꆒ(ÖR{O~—ç?Í‘ïÈ¿º¹­ã(1¾ÑœR+ýÝýØZÛNŠ-Û2hJIEa×@ ‚ÅnêQèæðFÚpg6OœÊ¾âP 0€pˆ@Ƹç-=€g¾¥5²ã%2Åô¥ßn¾ym÷“ól<ø/ð'ØzÇF"àå{¶V¼Û͉0ÿΙ̟LßÕûH?‡ânr1þÚT:>TD1š¾L7à\4o“=Q†)’ kë[Û@ZûB梁œ¤•f C‹õÈ»Ý×»=7w2áRGŽÑcUŠ")@Ø¡„×VÍZª†GbñT1»kSòoÕ/üé]}ñ럆-œZ礬âØã·Æ+ñkòòÁ¨Á8Š*’}oõ{"7UpCÙÖ'!zmè;4ñYôB0Á}Ì­ª.Èn%á?Rl—ŸÚÔ㯞}êBÉr"2Ò˰Л.Ñnô…G^Àyÿý/@*ú䊀ýzšŸ)&0ZNë¦ %Ã[Êoî¨ÿNòS3ø÷ßöG 멯Ìÿ’ßXÄÇ¢°Ë|åGǃëÆÕ žD’j">U¹ÿõCÙA^á™×û`Ÿ¾‰ãS粕Ø=7°Œ'Ç—Ú†2öãƒÆ;ew‚sœ&ÉïÙ¶MX¸PÞuÛïn¢ÑdšµÔ®X­¨ëpp×ÈË®m_Æ‚«ˆA„;ö©ë³•…’C|¾\%'½Tce±§¯öõmŒ,(ïãJj?è÷ÏôWã'@<ÀùçIÛ¾§ù‰ÄÜ)‰ˆaáC7ÚhÅiíV `òÖÅäÈ9è~ŽêÏ]¥Gw,§AkÎ4“G´×þðÎl±–InꎇÚ +?1ë°qè!ÐÝZ›ì¹&›ÐÜÑ-Ž—‹HNU!§±€wûßóšª7^ªƒbFw„AßãzûÅ£AZórkýì÷ŒÉ½bþÓÔ»gñþ‚Ëg–J­™Üís¿ôÉï{àS• _|Ó'—Hô‘xø‡ÝÓCŸ;öä…'Jf”ºÕ!õ—7æ «Ígžûðl­Ú ý(y¢(^<ÿ•õg–Öïy¾‘³¾êA¬·=œ ¶—Ó7ÇÛÿÑXæP  ý'zŸ®Á›ûº>¥û—³ÂdË´Õ8“±‹Ç¯,žè¡õWV²‡vÃÕóC7?ý!a?rïŠÛ•~}qÊIeŸðþòð»@¥×êPú4‰YéµÞ[=?ùékå³!ÝÍÚ‡Mßw¨•ê«8ÑVÍnðÒxWw}øHÞVÛñ§Åü•â'7ö\÷úš›]/F¼V®s9+ÜyL«¬&"XÞñ¸ùJe`¯ùþìþC·GÊc Ö'WÚé‡b_qŸ¹Ê½yq—µ·ñêâïüÖK‰—¯·ðÝ3q µwWH6ŽW|. 뽜”hR&ÞõNeàw>ô㢱V!Íhôד]Öê½I»B]Œ>väÕS›Áñ^a¹TPW#Àèî)Ì¡ë[K[ŽG ¯dzû¼\úÆBPëŸ'H!åpNØ}xwÿȦpd-œ¼–Ï odÇíáO¹ñ{AckîЖ{óG/,qg¿v~Îx"…Ot Ö{#Ù£F¸‘¨Œ\ìê ÞÜli½Ùœýµ¤6ö7‰Y®*S(åÓý­‚ÔQÁ²»¥ÖÒ.„ýŠzëk×'ŒJ¹?Mã—M¯·Ç»úú´õ/`ˉHVàÕD<ˆ-æ7»ÝáÔÛi!pC§¹qÞ¾y×ûþƒT³G¤%36þ¹³ü‘¿ºr{ùÁö­¦ûð¢±÷¯çzåÞùJùGnjøß¯$ã¦ÆG'ºPj{¯?yxç-¦ñÊ®îÿ®®rTCÂ˪Ìì”8–µíuÁLÄ㳩ÅOìúúzw€q¡WœZl;G6§/ äs~¦Ê¢(ô#÷&ƒ0¶»Q½«WºÀ·Y@CÁñB/&P)þSu3î™{>‘->}uêÁÆC¿œ­{ã?…£Ý›µÍ7Ïq½<½wÀx·).ÁWk <Í¸ÖØZ÷ä?„”G Õ"…si­?{æ£?p‚¼Áü±zÒÀdÇ¢³©@¹·pü”p >f+S×Ó$ë ËŠ}ó>õ±ÏüóZ'мÙcýFQ Yøž¬7àWÿ‡oŒ‰"áë‹[»cCT 7ÊëCÖG~ë³éÃ}rKƒÿB‚Ü~k†ÕUwœû¹6qú²ð\¼f—DÍ´Š‹þÖä‚ôhoç¦ËóiCàà žLl_Q…Ái^rÐŒ¬dÀ¨­k‰Lníþ²í…Û³ æj FôÌsº~èqz?Ê å}ÛqÔíÿy×ÊÜrFÞ¶muâ÷në6â·–&ââÚÝøk¿¸®ùûÎ/M"„ë¿îøhýïVmž”¶/€©Ô;ñor¹ëõÛ=ü'ŸC/d’ñ/¯ùJŽ;þ L7mµB0TaO'ã—Wµ&z$Á?òö ÀF=Æ%]‹GZ"ÔEÔýÊŸÐ?4ßÁ1Ž›½Ð÷`öwcá”ïÇ:þVt³zõÁ÷ùÕ#÷ìÝ|ò%áôIQ\™Û<“ ]ÿ¼ª)¤d–hÆÿÿõM€?zÍy@X½ºo!üêê¥3oÕˆhªÜœMh>Oër¨°µxÀqR®+7ò%¹ a‹ìßoÍx ¼àh*E•†›bÜá4ÓÄ›uÇsm/„QdQ?¸±øo‘ÓÞ3 Œ Pp±Jµ/-Ìld>pïz<óÎÄíÁ¿{ûl²²²þÂK³­w6º[ûà?.ýÛ.qΞ·{p(ëýÂîþ›"—Š=ùCÿ}ߟ±¹0€ÉuÑ`÷xœŸvšÉ¬ÏÒÞ–ØèvKëñ;shaGdWs,Õ³cN},ÅzUÂ4dhᙦãyn„öŒ7 Šs¨¹ÙÑÜæ¡Óa|T„hbDé>}§6üÉÄù¨xk`EüÐ騲ïÞ#¾Ì]îd/ËÕãî¥ÈáŠï.4!†32wÓ¾ºCñ›'ÆÊÿvÊ!Ay[÷åÉ2d© %ÿ8×̳ö¬ERªúô·z®Ã9Ñ*å©çxþy?ìÊF¿!h+8¿òеÔñ;Ä!è^0x6!å”®!›´Ï‰‹ÅʉR¿2y4ú×ζGÕ3fò¦¸ôåçÅ·]ß5YHZ»”WÎOþM¶¿ñ鯿‹ˆ%;üáÍ;P¾<í?>ˆÓc?ÆpÜÈZø·dÝÑŠ<´‘h«c³DCñkç>òÆCÅÍرey²ÕNÀ <8-rõµ&:ÉA„ßêè¦C]6‘Êf™Ò5[{†7LâÐÁéüôúkÝÇŸd^¨ñ¬<9´öÅžAw0Ö“{Ú[ͼîý[áw¾P›…Ç®Žù€¿¾íæÞé“û÷íñËË7fŸéô˜~+"B^ê”EÔ¿ ÒBqBu»’>Qòî½ú@í§)®w«¢§»nÂ)ìúÕoțȤdú ŸEÉúÓ½í¹®0ûŸvGzêûþ‹µkûÊ-ÿ6ò‹}7&þhxâDçÜZ³Ù©JoJ$‰ºË´ÇÑ.PÒHÇ$/A>Þ|óüÕ^.(u»ˆA5êí¬}@°³íÄ8•åÁì\-ëbm{®^Y:ÛA ±¦¬ŽÈe¾²m½ÐýÍÚ¿~«BöÊθ—UAö*Òw§¦Ã {pî{G¿òçøß_ºÿGÚ§œ_•-íþ yÈſێ·»/}fýuÞf ·mo»¦rB‚/¬N^Ô´дµv}ûÔ3¥¨¯“Ù($'ôÚ6ôîÊ^ëÃÃò¦;~´ºAµk窴mY"ÆjÓ‰ˆI2déhë@ÉÝêú—Ê{xyï¡Éá?˜2¬Áÿ迟z ¿ñ“\´ø½KgÎÝqÉׇ û1O‚äZUíÇ¿Ó@…oïo½Ÿ1åÖÜ2²’d0t,5S›¨Æhoùph!fŠGͽ¥åxãU½‘[hÏ}cì=¯}èòíÿl½øDVµŸØ±™»ÿ†xžtl/øÏóróURDaÛ—v8×µK»…=™CwNÚªÇñËrl$‘è/nS~¤ïþQæ`NýÊËôû&Ô;•Ðõw¯í½î•þ´šá3¯uð¿¨Ü3âM±ãzÒöDFݵeزeàâ‚^@ÉÖõE·Ûé ‚l¢Ða’¥¤`)÷\ØS@¬ÅûO6^H¾rè»æ €øPœùâ€9-¦0_råD:5VH$8¹ [>Ÿ¤Rý¯úÐíò/üö%n?½‘^xË7ÿ“øÑÀSorÉ þSÉæ’⡤/”®ö6@«`GÕÈÞùÛQ6¦Æj‡·Ü8nq¦Tã-‹ûhdUMwÇGÖkb¥É|¾M…o7´ÔßZ6*4úOWl7‰œ2Ãö yéM¹[H¦1 ‹¶QͳþL¯@N¬M†Ï‰Å´õæöèçË__ûÿcw¬øêÉW€?)›Z0;ù2ŸHÑ«§úºÔçYr‰ô^´qÅl²Å§u­ÏÖ¶ÕÝ1reJú"ä«ô†œÇÐí¦{wýzþ ËÜ’"­Gž|êxm7.£/~`ìºÆ”—­š^ß\,–¶ Da9®–ÂV UÖé×@Ù«:7-b@¤‘Bƒã)*Šá¢Måï°^…'Á¬>–vË&EG»t0re:Q±K™v=½§ÁRoS³…e¦êÇ›;S%±åÌÜ a¡UË6óRÛºœ|X0“ô­Ï®¼ûã_ybÞ$Y‘ñn¤­5+‚‚­4'1°Ø63ããùu3,âlEïTÝXrŠ624+±€1Áb^ÅàM7ë 1 éÐÃZÛaÐàßX›US,ãùšØ±ßTqýÈɲü¢tá2qì83•¼Ò:Ÿ¤o¾º%²ƒ»EûÓKwΨ o:MTEZ¦±ÜÀ‹„[Öì_/W•Ìwuç« ˆÖ7ÝP¿rFTÜŠÃ4ݹËQœ¥º%©E wN–º¼-¹ÖÒ#iÒ‚¤ÆÀ³œ›ã\:øÃÚª²ý1G>PQ@z Ë·ë®MQè yùf·*ÔDÍv%¼=ŽZYlM–C…$¹Dmv—/¿Û¢åÞ6;ú—6Éë>±Pm[edM²LP¯°Mñú䨙ú¤¹rÇCô~ý #]tØÈeÊÉÎÓR.“¨àˆ¥R´Q·{ýJ]¬° ÍÚ* I¸Ø†Os‡ïð(ÓF쪚*››7“t ?ù¦Ušl^•¨DÞѸ5'&ñ¸­#ê“rŒK ùàº:°GYÌÇÔŠRÑãÜš¤ ÓB¦mb6«°,…¢÷o+-®Ìâ$±?l[ ØÆº4TÐúEˆ´Ìâ}¹œ©;E5è“GΤ¥“2%ÆÉª¬KÔMЄËßß¶óFÃë‰msg4ÉÙ»&7ŸÄ Õ›Cœ×td É‚áó—,E¬@KQ¼fãæ}¥/ßxÐeUì<*…Î1§[ûÛPmJÖÀé–eðr[äŽ-k?ùWY×úûA‚@_˜Þ[*·.ëUMgIN×s9€½¡ŠîéÒ]ÓqYÀÜ?pç$'´Ø`lAÃAR\Û¶Ïö<寄58Y¹Ô#Ñ¥vû 3fB²=þVWÐ甃ÍEœ­ž•¯Íõ_% { Õ3-[qOƒ¤ç„„+ìÏDÎNëÉÅ4˲ÝÞ9—<}þÄzm÷»{.ð»_„$À£§ÑÞî?P;ÚMÉÑ”sFH†‚Ë.’.#¹­§)¦ßwI áƒ)­Ž€ES´ÓÛ3ðú±[{ÎûG¬¤»mzÅ5æî¯@ƒd þ Èjž3¦†U®FÛ·zÔ þO õYS o³û¯“Šøk]ÿ}åžìÑ鬯|™-9%«ÐÔ ¡¢eÂv¶,Œ ç/€ÁeÂåW#Tt ‹ÉûŽ™ô? åˆPÙCR:‚:Ð:ïð¼o`§ ÁþZ„ñ%œ IDAT— ø–õ „h¤8§ÿ¦‹´ÿ†à3; á›vwxèÇ¡ïÄ‹ÂFŠYÓ 5ei“¶¥ Ö…ÍåÁÈ2¡ÎèZÏó]0^ê™%œ=Íb…tεàÖ;‚kG‘G²IÓ$î»ìþêEwfcÅHþà/¨³š¹=SjÇv©÷EûíeÒÆšKRÍ2╨•Y^hghKŸCĬeÔtÈ €MÚi7lÊ}!϶Dç»®„Z…#Ù2ÿ¢¼çÉaZnÕµ®²LB j-X;“gLͧ(M4³A‹ÉDÎ,“Ov;IZÐÇ’Þj6:œ½pâå™X~Þtš>•Ô}AtOQñ-·ä ÖŠèÇпµ£Ö@Bh\‡$A ¦¥jsvwͦIc o»`rrS–é¯"Âá–¢þÀ)uŽÎ Þ)tµk}öÚ˜¤-¥·°Nh\-»jÎÙ›FŠ9GŸ;í¦ñÇ\Ɇd®)f§ä¨f¯”&µˆWÑë2«Z¥–€ª¶xÙµ;!+X&ÉØ¹áæ9·&[¾k”Ú÷l/Ø>¯Ž!­Õ€òLR2®6eöˆõ±B+7—¡|ÚÛ5W 8kdÄ:HÿÊÎúñ-…L¶Y­*DäýÃ?: œ©MX¢Ä¬©äçΉ$”Ë¥¯ìÚùÒ¹»ß¡”]ˆ•]zB86‘m‚é¿¡®Üì Ög.9oÚõБÖii¢\Ut@@bvo.­èû:Û4·»ô‘¶Žwo½Ð{æ,óŽ+¾!Ó;‰PpFyàÂy6­É~ïÚR¨l`¶a€ÔU­` 6ìlözޤ›ü'°Ö(ž)ÁÊÄäy0æmô*mCQŠ ÒåpvÛ’_ç«Å7ìGþk4¡¹ŠÑ›s¤èMfóâךí<[éÙ4ä0j9úb`]XL_$ŠNŠÂ¶iÚíZ/·R<þîÖŽU¾„=v`õ÷з {í;{On×a®å­Ív­¹õæs¹Ð™e÷<Psäoß~x5 4Zw‘e2±ƒ}Tj<;ÊÌ‹¾Ðšn‹ ¿p©Æ¦<óÁ!¡7n+D–Jä]Õ²©ñÁþáEjç+‡â3QÙ“œfS}³¦€Cg/d‘ådÏÚ|–i|¡fbË„¶°%)9±3Ó•÷ïØ™„Q½š%ïÕN}oÂ½í¡„=úÉXL»òžVšI¹ÜQ…„ ŸÜ²òuÙÒ0@GRtñ†W­{?UqähSÜíd.G2ì6åZî³ïZuÖ¸"¶)5; Í í‘ ‚ê±»›æôZC¦w(Ó{½P¥eÙ LÊkU=Õ®+D|9`#ÊFa[­Ô‹Åìõä÷ŽÔó‡ð–†ëL¼‰˜n–Qü66˜Ðý¥WvXé™ÝÏèMÿMÎÞ$§å0ùoc Dî2­™³VØ’†(šŒ¤ÔlA¿KT+N± W6þ•ö=qbxôYÃÙ¶KA,“UEmÅ3~ä¿R–7kÏ諆ԀN—i§J2"Ñ%@ð”Ü*¢IÛ´‘Dahb(Š*É@+@˜‰/ØÁK¥ÊD]„è9xªÓ„ϯº”Sg|ÎnrÔß)±i+ÊôÜÿòúßÝöË¢K€t‹¦ø¶hOYÞë S¤ÑáAûÆVo-¾÷$P?{®<{6H/;kþÚ’?àq/–Û¸!®f¨ˆŠç&Üœq)P™°·‹”¥‚Ù8@e€e›ºn! -ò@íåÃó¼ÈeZ¶à¾ëØÜ4|ú†ÞqÉ&Zk§•P#˜oðú[&ZÍ©èè³㿸®â\¥¿=ÝóD(oð³§ç?ü{!°å–£Vœ½iи6'šÞg_=æŒ[Ê3ßë¹*µgû¦N.fã1ëú\}IŠŽœ¥Î¥Ã¾ ²þA :F”À˜®Æv¼yø•2aãrbëµÃçýðé%„‰*&j·]Êøå{®ÒºÆÛà©tàÔ+[4QOÖßxµZ:C^ç¾™¦¯W1mh.¡NÛY%^†¦-l[ ȳEÊà5Zhý2ö„?ÿwšçíðªÚ rÞy°¼røúÂ"ãîhŠ<û¿þ=ý¿<üðØÅ*ÅX;<ø–Óet´;ä绪 ´F²«&*÷ ï»qxi6Ff„áû~I—õz@ÒîÑjï7pnßYï i£{Û,Ê÷ø»·Nf¬!'‹úC‹³ZÖ”ÀˆÐ”‹­üºížD4ÎCçáÁêhþAêço˜j‚ÖmNÚÿ×7_½‹€=OÍùb<¯ þµØº]·Âoþçmbžô{LJ .¢™a •Öò¬°‰à!ôÜd ƒ‘F›*hh&à®Ë…Óo¡8W¥Z–«“1ûàügV_¼ o€ºñŸ÷Xe2²•§SîÀ-Üõ.”½y¬³çº×Iä½\žTœZ"µeÄ*‘­K­ݵ"ç©;|çÔ–ì)ÿØsüïb ×[bn¥Î;ß%…¶œnšrôy‡ BD†Âi cÅÅ›/RîøÖù‹©Û°¡Ë½ž±Îê“Äg¼¯ÉI2‡Ymÿ7â-GN?®êûþ } jIí…ý…òÎs›(°¹z©¬–fƒª»Ž*@Yô“ ƒþ,OèD,·fÆß <Ñuƒ| ,æYfÆRóGÊ®¾ÊÆÉϘéªtW]ªšñÏY^m Ûð¸ZÊ:Ëmº©ÝÚ{Ö{†`>jCnÅ’¡->ÃGFù ¸Ér(\åàv‰¨übé@²ÀœKEý—v÷¾×ZIw¹]8.õøÿrà”ΖèlC(l­qÃÃ^bÝ>µÔ?î}CsV¼›«ÎmÀÿ”Öøü¹ø­6̬p"âÌŠßÖ0§~òhºM#9Ö× ¼ ¿½~£w°ä¥Ù­‚»ªz°¬~4 ‡‹ÂÚ3y÷ïôe”›&MgvÅEfEu´IøÑ] {´±t#H42Ë‘-»ø³# 5Ú)Úeš ¡Œ( b`иiÔ—ëc—äÊ• ™ŠšËq¡YÇŸ¡-,À• üDbº½ŠÈw½Ã]3[íø’ —Ëé²,#cØu»ÃÙvÎ™Ž„d‰é¶ ­]aµeÝLÅE®­¾+À¯ôÎÙ%)AN—Õ’Ú»{)Šââž-OïÎß;[øü †îÇ‘…ïî8™ë1ˆxË÷Ñ’„¾Ù©~ÎwÎ-‘5!·Ì@Ý>Ýt±DÝ#p–H‡ ž¡õ¿Wd%Ëÿç¾³àu’;º:HŽÍa“'ê ÷O2•üÜQ~ù Wa+ºéLÆ÷è_ˆ²_cÈö™<Á.juÉø»³ Ð#^Ó‘[$7äš!òYrÛåZ”s™ ávŸ賃"‹9Ÿ™ˆÃ%ƒÖl†¥ŒÍںδæM§e£¯Øá5Šá(½}j-¡^^¿æ¾~DO›{:žBÜ[ €¹+–y³”ð+«äS뤭óy"j¦Þ8øÍïVâ"Â*MŠK)ÕÍŸ8 @êdEÚ°¥vsšÝ%æ”X™ÇagCɤY'j„šº—ÁSÍ#Éïmâa¶R· ™#Á'uä´,»&ºjP«˜¶Ã”ƒ®ÖüúË%£Þ»˜ï¨¢h¢šY¹Ü®·‹–~³²ô@jã;FmPäÁ¹{QþŽT'VÝ’U4§»Ü-/ŸWB„ÎvUIC±òO_-š:À pØ;<´„ÖÏ®)¤©>½§¤óÑž•±0Mù«¶Tâ¤J¨¥ȧCÒDœ ‰±‚F¨Œ Å¥ƒ Í:#x¦ÑΧ¢õM­§ÕŠ#àóÈΫ#³•V½+¶ÐŽàºø¼ïœ¶êøOã[·¿taëh.â¬óTZ®ÇT‹«¼—™ó,be$ÿ·x²†ÿ¿sÅÓ_¡Ê¸aN¡\(d¹Ëç²NÑ ÄÌÔ¢7/•Ç_1Hd3ˆ"I@‘€Â4¶8Å2:gÕ±ahVE·‰¬¡úŠÖ4Ö^ eF¸™´#¥Öù†êêlŽÅ\­üÓI¹ú×A|ïõÙ‘ë‘BK~^h»ýBò?Ø™î5_{S€à=ãþ™¶‚<_³EØ’ÄÐ[r©`Õ^«3XAŒ`²’Zœ£œóÅëlr÷ÓÅbežÌB‚p™n#CDXe@SÜ0kë‚««ÀÔ X&§ÙWIx\g¼ƒ,´ ¹¨½ñrOí?Œ²y¶.~rýyC×À‘ÇþtqÍ!%[ÚÊóÂw„/çgRõhÞn«,Ûã=\›Œ²Å]²>ó²ÔÏ>ô’ŠX.õé9•÷-è­•‘, bÎÓ|]$°“7,s‰d€W8Bs2˜%HÝý‰,›´lËÔ,SÑ hX¶ÖtÉ!çu©ÿ¬¯€¾"Xä3Bï"Œl;A?0üVðØ+Ot­ùÑØæ»Î6QS¯ü¶Ž 0éþèÎ̶çº"¥¾"±¦gÓ®íËE£wŒoi ·¹œN:¾übso/­2ó‡Gu Τ3b!•Ô­m“õº5Þ}©Ùמ“]"*6…V›¡-“0kΙcÒ"l Â&L›jL”$2Ÿ&[ÜmUÞµ¾ÁF;bj‰ðñ<ñ±âæöy4Ÿª+;^¿ý¡ËiþôK¬àT-07ÄÖ×3Ý8&ù]¡´eËg†‚̹±8-–]J¼¾wÍ–£oWÂ@–ržÛ7àÿ2;™º”%2¦ŠZ麺 çä¾óD“ß0¤˜…p’˜”$00 Œ¨0aÛ¥P¶%(¡55b§ÊÓa°âyˆ¾¥ÉÎÄÒ\íMR}þ/ßývGîxHë.?ýÕpo“ñ,y>ÜqéáW{í„Eüf¤eæ¹¹ Í~nSª6'šbûv^âJ„6¼j¥‚¿ïyZä Þ[:ôzŽ›k ?ôž2Æ€|JX-Ö*¼0ƒ1é“€IÆ$iSl‹æUë&ˆé5ÂâåT«xóuªºrÄ9³w}©ë.2ôžŸoôænZ|æÝs¥G¶_Žüók? >Ö9pÎ(ã-l¤Dã-ý®W_íß!sX£ñ\¨NP6)îð=ÆŒ÷d?_D³•Sâ?þÞÿŽRŒØuï{5ï:ç_^¨äKl[…È=|êé~Kï?ËÖöÖV¥wØ7•ªkÎ.SjëD¹êa^£¾ôvc‡§DÒM¤¯fRØæm ¢Â$BQ”€4 !Œ¿wzÿü”fÕ]UÖqË÷®0þ¯}íÚ$€/£ÃË—5| Ó^~í•·?Úö ú›Ú}ùžÛvŸYמ§«³~yÒþ¤Ù°ñ„’¬tøámª–%65—® Ð?®ùCâ?,ì^ÌÿÓÛ2‰„1Iˆ¤1"m“@[5‰R\€cuju,Ñç“Vë7Ñ£¨]îËä› ;_Õ—¿yô‰ÖÊ!¤_rêšr“Òž €•EjÇH±#ÚðŸÇŸïÙþòý 5)i:nì]k›Øž?d?z¹­gü3Ãoמ“Û÷Æ…dOè’þh¾®ïÖÛ†ÚU×2[8Ø›¿{‚$A†€$$mHd Ë›2´ ‰ðJ è‚æž}â;4z¤8Æ/vÐ-#¾1ñþc•€‡?ºþgè®d&žôüë–?yká§{o9¦LòËý÷ï¬Zm«Gâ{n0ò§~}.øôQWdAõƒË½mÏ´ÔÊ‹Þr¢åí0ˆú/YS.M´ñ/pkuÛ[],µ&uwM¥Œ;Æ`Ú&¹°L@@Z@Ùl­,Ù–C6)àènXr§ÃDÎ3±äE;ÿ¸.>“bY©II)½såΟՈÁŠ#Æ|ì»Íïeÿê]~nûæ ffSudʼxE˜M^¼’Ÿ­|æxOeçî»M~u[1©FMf|6¥w4Nm¯¾”çF}™Fyq‡œŒš{¦6ç «‚4 e>²ÎxAˆë´I›$¤5DX662U*,l/nä\ñ¾‹µ ÅÂeôÅ©ûÉ%Õdœ&ÃLa ½òA Haÿ°ðî/çûeÚ÷ú÷­=öõÔé8¸eÿÁÒòµëbL üç§wÌoÝ9¢‰¯«Ç!zr±qô±‘^uáëÇ×TVOgŽ‘cÎS=Úô CMcÊ…þŒ3Èô™ ö–Ü©†A@$†€F&Ò ‰,Lš´ÉÙ˜8xÅäÕµÔ1£”³™®Ÿ 6«g» #¦@õ,åµ×–ê¶fZ7Nlø>ñ@Ûz<ÿÛý³+yç3Å™øCÇÜiNWfxóê6£ëÑêâê|Ån ¼Ñןë9®yÓŒ/× Öi[Ì.k¾ÙKF¤eÕ(îD¢¯¶¨W KUæœ×ÊV¯dq´MÀ˜Bº… ËfOݳ=§J­!e®ºxnc²Ï(W²,úòRŠÉ‹2/™Í› iÛü ®Í®-ê‘·þbüÿøÎñO¿I½|LãΞA“…'ÚÊt'c¹._÷GBˆíÀÓ+§³¦P6šŽÐsâž³;ü ]L¡xiÉZê(u•ri\ŠãÄÛ­êÛ>%]ê*ÑNˆª@‚°¶ 1² d*TDY%y£¹ˆ/1ÂU,+FžlËòöŠ0úþ5×R¨®ª6°k)+ZÈ‹­·¾þxßÏ_üѯ­n¾øü¡þHË(1o]ÙöÀsÉš°í¥ËÌ޵-./Om´O0”y<ƒù•ýo~éy}+Ì;f°Öï³–tO‰«¡à…HM-å]âuH!3À6‰ C€0!ciz0`bØ(Ëä„=?±ä)·W6I‘+èÑh‚¬¬Ë3üظá÷îkúÖÐè+øü7V†®¢-3»›gSaaËO½›Žë ¯%µ¥Gí¼0–j#…á[‹W•¾êÑ\ª©T@€÷Lå-›•t:1hN:fbW˵»Oç?|pÚiðlØI@@ J%hBG¬¥Ød —(ÛÌT‘H e1)Q–JÞ0QÑ'…;Vøkák¾ß ži«íÍXßüŒ/LÖ€çÎÊcÌr+7øÀ+\*[nÔ0{ßy1°œ–÷¯†µš’ʧr¡™ÎŠì}iWÓ%a}[2Ít5_è®·ésaû´ßHt„»FÖhφॠۆ”¦Bš#€h  ÀÉ…Ùð(ðŽQª˜yÝÒQŒ&œÊ,[VP×à¬XÍ•üóÅêºY´£þUòxó$å_ýÏ¿cóh?šõɪ!¿þÔ©íK}¿Ü MòÙöåÆ5 ¶¦1˜};H•òás±¼?£Ð ¬w„ÍÞ^À×…Š£q÷àŸ®æëwŸ'<=“Žÿ}Ngq_5º$h·ê6ÂD6iÛN¯‡ŸN£€Õ˾6 ¬Âj^¡Ë¢!è$z¸àW½Ÿ ¯Jx¦ë⮇^ŸW6}ê/ùüøC•'Zß¶>s~ pü”ZóUSæo~â,Œ×¥üѾ¹ièn~gÊ Ðô6Ws+câ¤ßAR…­íç»o¹¾wf†îÓ¤ó[Î^ÒÊWßõß&2—kÇ,Ó ‰pʶ“V LPA@ mL„¢¨:íÌŠõÓº\‘׺çŠm§}ØÙP îï3}cÅ;ÞxóÞŸ‚£*º¿=\j¨%·T™ïjûyPñÿþ­äÂ{úpÞ›©=pv‡ÚÙd@×.ŸêÈ‹fO:ù‘ñ IµT›µÚÛ9G×J"Ú>µæ ÉÏì"AO,¼þ*ñµ-_y8+ÏgÜÞ$¬ =ÕUËØ¦N!Œ)„IW˜¼bÆ»ü!'K*40«ïÝ’¨«©¦+&I·áÈ{´G&û Ïó†Ô|Ú#wÜ žläßè¶ÞÚ·| ¨t)€ -‡ïçó÷L ‚?Þ1¥7œ¾j3ÞùÂp<Õ·RýÀåÛ­œi™¸¬Ýݳtgö¤;N3çÛRA>öÚª—ýŽÞŒÖ‡!"AC[•‚ …¨"ÍSœå€Zºƒ-ñÅÑ—eêñ|M³emc¸Ò+û~¶„þ‹jqØÓŒãYƒLEš·w$'VÜÜ%ô8y@ü›»õGÂy`ì:™?ÿô‘OþEl¾á8d}ñw§WÃýÅb¥¡ÿîK¨N’]ÿ]8Çy§Ó[Wä-ÂöS«8*j†wÎ¥lkÆŒ¨8Î#b›{ÒBd@«8œlrØÉüªvûXßµ-ó œØöxf‚2zò=[™Ð”ÌzÒ|Ó4=ñ9׉Rc¡=]lx°­9èw·yîîݾ¸Ø"²^ÉUŠ„:‘Ð㤛• acè P’ [8Mk±ÏX¡ ·ŒäŒÅª<Ö» í.+m·jY^<öA®ð…þžpÆÃÛÖò*îìØ¿Ýýˆ‘"&§³Æ—ßHȘý”Z¬ÉwÇ þÕë Òíš ­+¢w²S9R¥¤k}¾ó&žú—±‰Qúu-yÈMCMõf/\¡Ü’ad  vWÍ–¬ÏÜ<í“yʼnÐÎù,]b㑹YJÒ÷Êæš/i*„Ì{øÝ‡\U_´7Š KZ~æ¶m¥C©þ»»ù¤’|pïøGý-Ï€š÷ÿþGsïDIDATþÓo{fê¾kþ¦ÒÒÔBBi«˜ÍùîÃSïu7\£zÐ!«Ö¯v¹÷ˆèŠÏ•Ÿh/G¤â?uv~#æšN<Þþå¯ýüà¶K/p©¾é¯>ì?“ÞœµÑµln¦eZóSL,Â’. 5ÇÚf}#¯j{]Æ<“`o¬&»RRÏÎ+a¦lð+[Œê1í*7Pœê¸DÙë­ñ0o©”«>ì…ŠfâHeýñƒ¡ŒÎ.¹¶u^ï¿ïâb+ýl°Œ pÝÎŒßÔó†#ƒ»Ñ×¢a·å:M_èWÝ\à]­7Îlh›þÐ/˜åCÜ6ù¹ã —¿<óÉ7ŽÿüËîW÷¼ø¯zw@¤»ÖGÚeJÉ·`Éíkg™U¢‡»Ê”ÖðCûƒ°xž“‘]ú„+¨ó')Lo»%¸¹©Ü¦Å #K{§+h³ŒÖ%IS)H¤â¾ù‰ðÖ·O5mñMÖ|Òù7>_³[ºbó¾ã¼ÖŽgЃa¯Ã¢™)÷𦚄©Å5ç¦æŽVªñéé.aåO}ë¡—·ÝrjãÓÉoÞÓAÙðÁ×YSóöøkר÷ûÏmÂåù9”m*vG*Šhm<4}=µ­L;Uxߨ÷Ut®Ì—‚‘&ìóÆ\1Pjs— ·W¶0~š¶¼I™q–h’˜>ÓÈEÊÝ•vÈ:ÿñ}Ì?üÞ}ùÆ-Ï}ýÀS8㼂eD%KÕªÝé¼h[Ø ¬|WÞÛ÷ØÌX³Ùœ*}þ‡÷©•öüdMù–/|ú‡LýÉÚ×ît:ƒî r2·×Ö—ûˆµüÔª’¯G•c =7ͬøðênŸBî¦ò%CWf‹Ýn¡ÙáZJoB,ë¶ÒD™ó·¹½Žö°O·3¶3Xã8—þ¥3]± Ô´”Np®óØ÷¡WE[åí^<ò±¿ì_3ˆ¾¡êe-ãëÞ¢€Sí›W`úFí(T¶óµ_êŸ0|Êk¬ûÏ3GvM Îo˜¼éä‰ð›·|p«§°L6x.›io®Ý™ W@“ØþâSÑÖŸôî n³¦³$Ñ!q’\±½œĽãMq`#’q›D¶b].?Ç9Íäk–¥zjo2bk¸Ì.Ìpw<“ùÒùXm$]@k«¯ëÓõ»ÐÃ@WX•°ç»ç0–¨’a–V!L„Ìþ§Ô̳{߈T¦rpèŽ7Ç»âOò…¯Ͱ ºC¼9zŠ&‰w†vLÇQ¤9£ Ö—®ØóÿKžåÏ\3³ ’B'Ûõµ­¯†7õ=„±m§lËR5c™^«„øqB0¢˜0)uªbB€Œs)—#ĸ C%’K d$¤F‰àœ‚TH $€ .½("aŒ¥¶ai áR(Dë »ºª;Ž'$Ó¨ÒiwúþJTahq”$Œ¥R&g2 #USçT×9ç”PQ”©±ÉzíøÛßùÖÛËœó~¿Ûíôr…lEÛûûÀápÄ $ €c @œÄŒq|ã™K@¡‰& ˆ’XrMbŽh@Ì^ko,qЋ¡%…ädÆÒÎÍ,Ø…É^Dn<ñÌîîÊ|iü urõ쥆QÜð‚ž±@¬’. •$M•'tMµLÛ0 SÓ×=š›™®”&ƒÀz½Ï‡I¢iš¦Ò(I ”L!%¨ !¤”„PŒ ˜`âÆ±F)€,Ô(†"Œ0‚cŒçBˆ FÅ‚s)}/ðÃ+¸3Q…RŒ.¢$I¢°?RŠÒ©L8löÛ›OLPJ\Ç £D î:#Ý04Ã,®4EÉ þpèGAµv¢ëf&›©ò˜*ÝN#X;©ïîï¤vÊõzý( %„àÑhˆ_yùI$…*DÆID©j ­aH$â¾d,\F#UMñ¤|t\›œ\ß¼5‘®LLjõÅL±Ü¨ï89‡#Õʘù|¶ D¬héÐQE©”Ç$ÎȘœ@»Þ(Î „ ¥ùBQWUK7¢8–p¥Q)”(Š‚R`„ „@L€€ Ö(…2΀‚'S $% ŽˆFÌE‚R0aIªïîî;WÈåMÓ¯¼xq Bˆ Áç\0pJ5’$P2ÈuªPBýhȘ˜Ù¢­¦ 6.^¼xwù3EÂj¯ÅÅ2qìz©L1gäÚN6MSUXùñhº2kèF*•áRX¦¥©šÂ0L!¸@Ø6Í„3…à(IDR !cj¨ªŸÄb’̘’LY’@„Œ!©( N˜„’bÊ€ÅqLAêšzÒjëš’0ašf’$ªªUá\HRHÛNÿè'ï¿xãiι®kˆ ÄÈÒôˆÅQz¡Göƒ…Q®˜?©5²)«Þh®oltûÃF­~ó©ëOß¼qñÌÓÐË¥‚”¢ÝîúA8:©‰qMU„øúS焊JM@&R!B2 JŠåJf!±8Aó’ô¥3×OŽ×\?ùõ7~îßç-D2]»|°{[$ȃ Θ§kyU„Š•ÎšKBŠ”½ýËKKJˆacˆª(B]ÕB*¥LŒp’ÄBaǦªTUÁ$ŒS‚…BpJ)ÆPHðSþ)¹¡ÿŸn!¨P*‡ˆ†A)e̹”òó;·>¸ûàü©Å8Œ ˶4-c§†ž—ÄÙúæF9_L’¤Ù®Û†Í¸°mKr)! £ÐPµB©hê–ªªq;Îh}}#ŸÏærÙF»#xÂ… ¶ùµ7¾211±¶¶96^6-H €hwúѧët~~.›MÅq‚1Æ_~ý€ÈÐ$""€ôF½œž£P§ª 9”Ø ç $Q5VXÔ›˜8µ¼s¿Ëë ^Ýú|¢tZÍX2i-£kt¯¹§ëZÚ´'J“,拨ª§,KÓ5L(@IU=Žb!ÁXHI1r]7ÃR6C014ÕO˜Jq'=Ç15MH1ôâ„3.ÀJ ÆŒ‚3@9çR€2‰bEUz£‘mèaMŒMìï"‰ò¥ b œs¾¼¾Åa¹P qœ¡©™År‰ÔnwC'aè¹Þ`4ò=GSÔ“f£T*e2™K—/©ªÚôu]}ðpµÏ²Hœž›©Õƒ‘£)ªiîÈŒ†š¢B!Êå¢m[@Ê(Šý ÄÏ=w9 ª©R…D!$ÓtÃazü1–x’%²0‰€•/–  #©vÚîhàø]oÔɨêIs+¦ãŽLÍÐEØŠ‡ýs¯ä³Ùý£ÝËç.vû}–0Û¶Ã0”jŠJTJ0–(˜ý0´L“bB0Æq¬‚2 àú>FXÁ8ŠcJÈOuŽ1F)B0Æ@Ê8N8CÏ×Ea»?0 ¥üôóÏ''&{ƒŽë/¿ð¼J(—RÁ¸Þn+”Zš–Íd©BJm;¥ëZèŽç«*M‚°Öm›†Î¢È²Sq’X¦GÉÞþÞÖÖöúÊJ.Ÿív‡ƒáh}óàÕŸ:Æ ›NŠ)¥~誆 Á  Û6MÃôƒ€Å1þÒ«Oˆe ‰B—Ç1³(‘Ó;’"‘œÇQ¨ši ØÅù{Û[×.ßдLà!"‘[55ÝRS)ŒO†ÀëÆÚ‡a˜ø!8;=«¶ä|4½¿¶"¶%—ÍB)¡º®I.5US ¦{A !”p $c ‚pä„à IréBX¡(TJI(–PJ“$$1c,¡ ErÎÃ8êt:˜PEŒKH€……RÑ÷‚Î`xjnÎ B]Q(¦!c¶ilmoç‹E]¡×F ¥TU£(f,Ñ4-üR>ÿλ?LY)×yžK©’I§£ äRè†Õ<©vûÞÁqóéç¿xúŒÜN¥;n&V( ‡Š¦3–èšV.uMãB´ZíýƒcüâsW‡I²@ˆD Ô­ÐTÌ‚q(“$ŠMO@œ l¹0r8ÑFƒv·wØT J4-Û<×ëBesB1´´B¯33±XÈÝnefZ%´¢›ï|ú£Õ­£KçΪªÂ¸Lé:F°ï8 ¥cª¢L0Ɯˈ³$NÆŒq.$E˜3&”@L%b$!˜$ HQ­Ÿ¸žohº”¢Z­nìOVʪeonÜ[ÙÝŸ›˜ü›w?|îêå¾ûÞ‹Ï=s÷Ãç'¦CÁ-•ÄœOŽO¹®ÓêtR¶mê&“"ŽB(@EQºéþâü‚`œ03=M h÷zª¦¥L³ÓëY\<{föì©v§3Œ ”™Lšâ¡¦©T¡¶ez~ ©êO#B*~òæ)]‚¬ftBèz¨V*¯1f@)<Î)ˆyÂÑ7*“•\>M«¦•áÌH•OŽNMžAØ"l:ŽÊÙdù\V3—&S•ñQ»SÉçï¯?˜Éd֎׃غŽ(¡ŠD±¡ë\]QÜ TT• H1B2 As)Ã("”`„¦IL„RL0ç#ä& ‹ã( !!¾ïiºá¹BQ$ñ™Å³)Ãìv;·­N–+gOŸî g¯<ÞìuëÍf)›mu;Q·»í•õ•L&KJ„ˆã°Ûëå …v¯c†¦Ã(ô©¢ª¨ŠxA£ÞÀ åBØéT³t6cf4ä ç‚ 1FÕê‰fè¶iQŒkµ†¢ªÃ‘†aDøæõ%)ʼnÃL‚p–5— |ÆB¡¨”+9#"«^?ô“a8es줿?ô/^¾9]Ÿ_h¶¶Ç ‹]·íŒ:¯¼øÕÏîË–rÙ|˜Ä€3ó§RÙR½í‰`pge+ÎTJ… Œ$\0…RKׄ”#×§„„LÂ(44UÃXQ¨F‘BH‰1†"Œç)”\º{°zzæÎý»Åbióà`móÑÕ —.MMo5j¯Ýx*—ÎŒ• Ùl¦Ûë@)„žï‚ÐÐÕ£ãÚX>?61µ{°JI·ÛRtšõGûûI” VW—§§gý$ž™œê†ãcåÓ‹‹î=˜˜œðãH¥Šë:#Ç«”úÃa:• ‚Àó|Çq£$R© Šãä¨zŒc>¹øÆÍ30‰–`À”¦Ó¹BuÔ7r*¦]†æs3~Ð<Ä#+{Fò!†´<17¬m{QhšiSÏ6N7÷ï'IØÖKçœÈ±íò¯/o­}pç³é|1•/|ó\otóÂù(Œ»p^²€*:g, CÁ¸m˜\H!d!J¸€Pˆ(!#Ç¥ºn*Šÿ´ú‘!„0BI)!„BB,”¨JÆN1žH–üøîݧ.]ÎU*ývûêÒ @(e§Ó1T !lw{¹\¦Q«aLOŽtÜ·;­‘72Uƒsqö`ía©R~ú±«ÇUªJUŒp†¥bÑÂïýè]ÄêÚv1—ó=ß÷}Û6«ŽãaˆÆ'*é\þ`ÿpûð¨Û@„”7˜/Û¶ ¡ÄWŸ;?NhF˜ÚŠUÒv襅!}è¶c΢ØñG;—ž›~luã;DFH½^ ôb6ÿâs_žœºµvOC(?qZ“zvüt}Ø(§/ž¿Ðítû£NÊL—ó¹‰lúÊÅ‹+›Û“•r>—3UKQUÓ´‚vÊŽ…0Ê„ˆ¦bŒ“Ø áÐq3)þÔ*!¤ ‹9猳€ ¤ª(éT*ˆãöIc{{üòSÏŠ (WJvoû`k¬TiÔjƒþP3- A˜Dq’¤,;L’b1ßï4EYßXîúDp¡©ëk+cÅb:Wüàãwª˹<ÁØ4 „I«7ȧí;V2¶ ™šŸœ˜8:<²Rf±PÔ -ekëëGGGI$†~ X$7 =£aßÅ7ž:Ã)N$âRÈ$ YlS‹ñH%Ôc‘ `Î¥4í¼Z^<awg-²>ÕlÀ!àæÖO–?eI…ý »'ûÃΞyõÆö©¹¥•µ»^è¿òìK£noeçQ¹RÙÛÛÊŠ…lnuss~n.a UT&8BŠ8ÓU*Ô I)1UUH ü©Ü „à ?ŠJ)„!Î"DSˆfŠJÓÙ\!“ÖÒ.ÄÝû÷®^¹:rœiÃP(:ÎÎÞN³Ù°L+—J'BìíD~¼07¿³d©”p`¥sÃDj©¬ÂÃ3³‹ "CbvT­}ûí]{ìâþÞ!Ehr|<Œý¡å³é”iJ§&'¸äcÁe’$aôbñÊ+ϬîLUÊ‘*ª¢©êÈññóÏ>F(‘"Ž01Vr}ßRrq4 xh`5Ö zqDo}ÿ éORLH•ý wãÒssg^yî‹y#ýÉÚǭϦó.ÐÔÔå;w>zý¹××vî=\{èrúú˯nomêÉîúÎæKÏ<Dq:•âL`Œ0&áˆsçB%8a2á\0ž6M&EÈ€ $àœ!„$!a"e…šªsÎÇùôÞ½w?ü~*+•ÊÁssóždÃK§–77KÅBõ¸FŒYX,V¶öß÷£ÄÈ¥ ¬ÔÛMS%¯ÝVuóþýZ‡¬ÌÔÆö¡ècűþh°W=þôþ¦X3Œ±JéºþhÿàÊÙsðN§«iªªh£~·“J§wê¡ÏN»’Mï7¸`¥|îð¸a[~áÙ }/B,4!Ê¥§F,nw[‚±œØF†Ãnkè ¢09S(–Ës»»/\}}û¸:>5uõö‡ïe)1­4%ªé_ÿúoY”|¾yç;o#€/_yusó£ÏÜž®Ì´:D¡i«ðùÚÊé‰)‰±¦ª„ŸÆ(…`)\£J"„œP'Iœ$)Uûÿ $ÂXJüé]"yQdjŠF:!áð¯þö_§rÓ{íö“gÏììTŠÅzµöÍïþ])“ÿèÓ[W/]6Mcu“b­`§ ÙÌÞaÕ÷Fap?bû`ûÂÕ§î(Š„’Ÿë¤!÷ª»‡û{.]T¥HÙéÝíõJ©zÞÕkW_zö™b©Àb–ËåÆ`¢¨ßûƒþp`çÓ½fwéÒa\U•Tʪ6›Qã›7/r„ܘå²síþ.!ZÉ4G ³yÄ¡¨wN8bT·úƒ>ÆÐñ(ê "¡>={f²Pl6š+q×w{‘oiÙDÍôî­»?>¨nª¦0Wœ]šY¼³yO£´Õ¯#˜@© ( ªB‰L…"L9—J!e”0€ AŒaÌ!e’ÄBJB „#(¸¬5[)Ó„rÉ1 c­Þ Ólf³ÙOîÝÉØ©?ýÿÆ@ê…ùÓŸ¿h˜öxe a¨kêÆöÞù¥³ÕZmÿè@Wµ1+³º½±têô_ÿøÝ~¯®hÖÅ…Y )qèÕêÇõæa„iìµEP³õtÚL_¿xeå =^ÊþêÏýb³Ýì F;{‡?óK_ðpãÚc—F#ÇÂb±¨Œ 9>®§V;©Tò¥B^ Š,eµÕ15]‡‘†øÚã³a…@ dœ g³¦Ç@€²Dú¦‘ë îÄ¥šˆ’XBMQTªö#Ÿd{wknâÌ{Þm7¬TÆÊ.ÎÍNLŽ¿ùå/îè¸ÞÚÙ™Ëgr:VÁ€Å¹tv®4þìó¯Ý;>žOM¤ó¥×®<ÜÜGI_·r~À~íïÿv·Õb€(ªÖª·ÊÅüññI~¬\H§=ÚÕL£zt\.å£ Š¢$›I!„†£áòòV«ç”ói¬ |6›0~¸{¨R‚ŸzâlÌ"I-]Uý$òqòÌõ—÷~X(çÆŽv5K•‚ÕèwsSçG½ƒ ò1€ §ß«nÌ7u;¦zc8àŒ‹3}·7ò#jf1ãn’xƒ0¥„fÖ25–È´•››¨÷†C/|æÒ9bš’±|6[©”cÆ¢8IÙ‚ I 9㈠b1&L@I¡ Bn]»p@²„ ᇡ„¨Þ8±m ª „`}oJ¹¸0ëî½¹ÙùÈun>õôOn¼wx¢«4m(ss ;[“•ŠãŒž{üÉ»ûÛ×o´Z¥T¡PÊëxÿΧ=Î{Ýæì™óßù»OæÆ§'ʙݽjƒTÊ4)Y:~8rŽªU‚H&²ÒÖñI­\,2ÆkÕµÍntfq¢ÛMͧÒǵ½j#“Π>`OÜ|ÝõÚÜëëùIÝÌ4s3KƒØºs°.€ÀÐÄFšmgKã5ÛJq)W¶îUJÓ55HMÕZÇ;çA²W=¶T3.N_ËVJ¹ILŒ’(§çOŸ?{1“ÉÆ XÍ–KY7«ÿ÷·ÞÁWòù…‰ •RBA°Õë‡Ïæº^Ì9ÆXrac(¤äœ ÆME’)ÂT‚^¯7t?½¿ ¤L+êÚ£V£1rÝ( äÇÇÇÍnïÞʉ¡‚+W¯>~ý©åíé‰I7ö¦élaù½wÿÞ×~!Jä³ÎöÃ{»·>»÷î²;ÈTÆ×]ª ýk_|ÆeQ·ïž™›ž¨dþøŸÿë[ë[½n;Ž¢nwðÙíûœ'Îp´0?_¯7>½óàÁÚFe|,eëǵn»ãhC–Ä‹ “—./â¿ð ê5‘P™ˆÀ¡{n4òêA0‚h,fÍ“þ‰•3s8å¸] '†ÝZÊξóò3_ج&'æ 3Ž;è»ý§^øòÎ©Ú'õ}¢êëaå SOE8Ä4Õh7w¤j[fìøwvö—&ÆÊe‘$Ín‡Pš°!Äë †Çd³é$ŽONLÃ0uÕ cR dÄY"d ÍV"Ixtx¨RÌ„ }«jug—jÆüÜL­v¼0;Sï´ÎÍÎ>{îáÊF.euƒa¯uåáÕÁ yýÚ“!ÄwÖÚG‹ç¯|z÷~µÝ¿u¿I¬vùK¯šªö`uãé'¯ÎÍM§ítµ7úå7_0Le3ÕãcBÑÅ K™lF¡ê{+ÍNßõ¼“ãvßq|'ðè; â0ÚÞ¯ B/¨Õñoþú¯l·v.VòÛž¡D˜¬1 _¨"§‰(1 ƒ É/_zɇöØ¥Ùs§g³S™lñ—ßüú½ÏïH¯/Ò>ììl¯R  ORV6ˆÆb‚ !´?jf¦åó•¼%H¥/<ñ¸ehRˆ…Ù™”©·MÕ0î.¯Œ†Ž¦©^¯Ímï`)\×+–Â)Ë„h õãA(¥œI€öÖ7¥^èýåß}³qtð¥W^Ëšæû·?¯ôÝÁ×ÞxSò¤ß‡RRÃ*eÓa †ý®‡)ŒÂƒêÞI½sýúão~ñ«®ã~÷íïn0~jþûßþ[»µ­Ýž Åd©taéаRn×2 BÈI³õpuó­~zqinvzâóÛ+W»”NYÕÚÉêÚÚQ«S=lœ4” tJO[ªHÆ`na‚%œÇmYNàó§3 ё竌«dL½A\*c?såéíµ[ †ÍA§NuF­„‘Øï>qþj¯ºwÜ8ñ²µ¼<^Ÿ›¨7N¦'&HÌüXà 5E7e¦$°b”Ëã@Š8ŒÎÍÎ{Qd#$Q'-ÇkÇñÛg&*¥r‰3žÉ¤¾õÞðáûQòÄù3ŸÝ[Y˜›™œ˜P&”*Ba¨Bˆ Ü:8¸¿»?^Ì÷âÇч;/?ýäù¥‹£ÞàÛ?|ïôâ¤çG¿ð3_wçÇ8=9}ui©œÍÝßÞlœT9àÉÃZã°ºÝèím,¿úíwÞžž™tƒhin 3-„®“ùñ’²P(ˆKùìq­ñ“[¬”þÝ·~‚˜¯˜W._²,›ó¸]ïp oß¹¯*ÊÁ~ÍÐô¡ã»^T*gz]×—^¸ã8#p9g ‚ðSÏ.™Ù;;»ãSéüôT&`Ô>ÙÕcïùë_ÚØ_¶ôœÃ\aš™¶øºb»A¬` Ê™SÓ³?^_o´NºÝZàö‚®!’¶3ô£(Jºš?ö¨¦ IDAT]"€Ú†¦é© Jaãp‹s9=>¦ëæL¥üÙç÷›Œ7êµvgsýýÛŸ——.þÆk_<5^þî;ïþÊ×¾b™Öp8ÔT-æ|}ïÀ¶,b&ä^íx÷ðh<Ÿ[ÛÛW9[ÝÛ©ÖNƒ–„±sðhogó~÷iÛþëïþ§ ô\?Z[[Édr×m´¿ðì3|þIµßˆ³5tÒm_X¼xpt°µºÙnµV66ú1;®6¯\<=òƒ™óxð$âPÜ]ÞaLöFn%TU._8o(”p°P}åågþô/¾å œF÷Z}LPÆÖ+ù¬ãúù\êððdû¨‘p¦*J§ïem¿ðòcEDtÓ¾váÉlÐÝ®W±ª 9¬û³ ç>¾û–N4„¥tYð@CEÏä™ïôƒ–Ó© ÃPÙÆAoz~ÎnŠà¦ëê„r¬¤©úÔÙ‹ÀÈw‘Öt…|.H䩉™T¡àEQgÐÝj÷œ‘S¶ì³³“š¢ ŠàIµZ°3”±§Ÿ½©P5ŠcB©N —¶ƒÁÝõ­R.ãxî½Ý›æÇ*Ÿ¯-üd"oLM;ó“÷sªQw†–aÛvjggËÔ¨‘ËíO½ûùúxÖîyƒÜúÀï7ítù•^Óì1Æp»Ó ˜š®Hà‚³gÚ*´×jr.Ç&&×+çí$NRº2:/?{ukÿp|¬òþGŸŽœÑ·¾ýMÓû#—äÌxP ¦Æ íÞHQ©ë@0EÕZ=¿ÓNVÒ•ÙyüÌ3§›^ÐðÝV¿á¡@Üu?¦Ò¹xý¹j­–B$Š<Û>ã$ö{"6ìÚ¹qŽôn¿¤>¬=ñôKÇÛëg–N;AXÊÌ`DH2‡‡ãÙT§Ý201ˆÒìÔÚÍÚÙ™ùV·wvz(´Ñd)„íöÝ£Zí¥Ç¯º¾F4ÃPUß÷k¹ŒÝjwêÍ&„àð¤þñ矖+•îîƒÁ™ùS†Bã$Žœƒ—žºùÕ¿ yøé­/¿úå»ïŽ=ØzÔjÔ)Vóù<ÖÙöîvÂÄ7Þ|óÎæúùÙ¥GÕ½àdC$(æ" "LH9_ü¤3ô°Šym¬ï~ ´Zמ¾öùÇw·¦F½ Æ„F2I›Ö£í½ÉB~}ë°IÿÉ?ùý?ÿË·²œ9 H1r‚ù…J%ªJ+¶Õ󂌥¤l# Y¿ÝÆÏßX"Ã`"[?@ŒÚSËåÜõÇŸßÞÛŸÒL¥¢¥2¶H5‘3*A"ýÚÞxï“÷Mæ&÷ª{Íî„ܸã8v¶BSúå…K¡êº)í\† #_QÂXÑlÆÀìøT- mÏ›Êçü(IÛÖQ·¯cxnrQtyaAU•n·3Ž ”¾ïýÍ'·v.›Y]]s<·h[‡ƒn&•»¿¾¼·ùH@ãK–Vj'Ïß9/<ól9— ãDUH?V77t;®kgò+w±ŠýèÁòT>“¡Ê½•© ‡Ca*™@IÍI ì Fv:å8n·=$”Ø©Ó>¤0"‰LÏLöONNÍVî¯õFžLD»4z^ï¤÷ÎîMÏ*ùõç›RÑõkK?úhyà&aÂ’ˆ·ÜDщdë‡ý¾Ïœ–?^Iá/¼ö´7}ºú‘Ø Œ"_ÿùß}´½’ø½Œ½Oïü dÔi¦SySˆAñôõÍ••Ç.÷U/ 3SÓ YË{ãÞîvµÞHu‰Š/”®•*eŠÉöÆ C2oç ¦Š1ª¤RÍA'ŸÒoo?r|2-‰7 u€ëÍ£“~Óô#IçgíìþÌ^0M3—NDÚ­FÏq£á`è:”š››ËñpHðÄÕ'V›[csŸ|òþÊÖ¦Aq­ÑŠãH¡š3t˜<ŽdàaÈýÉ?ý£ï}ÿ]àõËç¾ÿã÷Ò>ܪU»ÎÎΉàñöa‹˜2Ô0í¾¯Q47ž-<µÐZ;¹xaa2­5Þó7¯ýÌŸ;ujæáú6—(ŸÒž[šyöò)®P%N e£ÖqðÂ)3Qh¾4K³‰ß6 |´·ÊE n‘ CdB…zG"ŒJÐh¸íýêæKÏÿìêò{ùL%p[¿ú³¿ôÞ»Í8W-Ïê„ÖzM 2“+¿øäS_zæZË f'&µ\þÙóKë›JSS˜ Ó¥ò¥ÅE]â”e\¯IAJˆÛÃA?‘î°•@¨ˆ°:ˆÚ­½(‰ª‡>R4¤Kl ÏNÎ|¼±vîì)Ì’åUK5Ê¥‚;ý?óº£áx¡ôÒç%V‡£îæúÆk_ðBþpõöDy, …‚0!š©i†nt¡TÓÍt:ôCÎå¥Åù?»ïºAµÞÖUÚî{ gC7”쟌‚0â üD Ùèû¥A®žX9>ªž»töÖÝo¾uë³;Ë¿ý›_­”2ÿÃþöŸÿå[ÍnWð·°?íœÅ©ÜÔXþûŸît$ŸRS¦R÷RhR†Ý$úüóZ×›,lŸš°—æó*…¿øÅ'n¯lC3÷gÿòoô~úÆé¡àÛaÀXö|"\Û*{á0qqêR¯u\á°ë³S³çwŽöObÆ"-˜ØÚ\ö#OM©®3´²…^ïØ |š.¡0–er±Dg.]¨äs­^{>7uzvú°ÝÏgü8qãp:“iø.¢íj5‰…ÉDÄ1Å\žû3ìbQLÓù1ÉA¶lîtCßÐ@&k þêÿ“÷í÷ÿ§ÿö7.]šü¹Kz÷îz[°~Ü}ñåsëëMüÂK¯€ØcI|°½¬BBªbS¿ÿ÷ÿð£ûŸ5šÇ:s_ý¥ßzñÉ'—Wïº "¶úæ—¾:;9·½~§ïù§¯î¬|¶w¼gtvrþÎÚ­‰‰‹AB¿#Ô‚,æ¼ÚÑìÄÄíG‡nà™´çŒ‚‘£êf9›ynóZ­Þôzîà\ H¬Œï4ª*ãccSýFml|Á ƒóóó);׎ƒÛŸ}”U”ñ|îÁÚꇷÞõNSåáÆÃ…éEQ¯\~ !¼²ºŠ)Õ Ã2 ÎÂ!‡ñÇ·>BH‘¢±‘àBbU‰…dQ(…ù+/o>ÚýäƒOë¶e¸^ŒÍgMÁØíÕCÃPEiö|bËT¢˜1?8îÿüýüÿõÛ=?~úù—.ås÷ÑOþÇ?ùlè¾ôÂÍÿìÿó?ù×¾ÿÁz$Ã(|ýÅ+_|þ¾ùìcŒûTÉBæÕÊ9{§Î]þî7ÿ¬Ö隬t=ÿ¯~òãÍO?b/W9]\¸øäøøŸþûÿÕ =?%É;Xœ»„’°:"ò¼a]Ä}`1·µ›¯>õd?ˆ—gª~œJ¼¹ŒÕì \ß)•Ksc㦦mê¶¡XZ8“µíQ(q¤Ù©ã¨Ýò¼°<1-¬µ‡ ÅBõ¤ÿßüÞ?,å‹{'µÝý}1$#_¸~éj…?ùôÓnÌfúÝ•åSóó[¶ìt*Ž¢ƒZ}f|ìüåKŸv›'ŒRÅ‹U¡@ $P¦S&I?Zßáy†.ÝÀÌXƒ¾Ã…,M{]gv,[ɧŽÚãlä1„c’Üè…ݶŸ0Ôe{ÕZ´¹±õ{¿ûj>Ÿù¯þ»¿ØÙ9œšÈߺµü“{;/¾q®ô“ïýoNÿçî‹øæ × vI$C†L‚ÄÕÇ^˜,—ÛÝææqlf•—ÜkÙ2It#ûú…+÷÷WÞï-=¿ˆPšÀÀ‹¤ëxø^‹G>籉®T0N.œ=ÓéÕüˆ ´Ú-è¶OÙÙÙó/‰PR–à,íGq’”Ò…Óós·ÞgQ’&¹Ð(Ž Ê¥´e¶»íógNãØÛ?©O—óGíöD.wÐé-ÍÏ5—RåáÚêܹ۟¸8½up\ÊgMÍúþųgK…R½Ó |ok§\)RUíuzwï?Ä„ÆqŒ¤×MÓލ©Ã ¢–ÉãX ñÇô¿ó¾Jq¯7b\”' ÉÐï ýLÆn´‡˜@ ˜³”©Z9¨€Í¥Š®ž™úþçÕBÞ¼p¶Üv·k¿ôÆÍËWÿûñÍ£æ°[w—Ç=8GW?ú7ÿËÄO=9›ÆÐÆÆ’›-¥–ïÝt}Öµ©õÄ…+ËGÕÿò7¿±±q3zçxG áÐï‡^óW¿òµG–Sʼn›‹g?߸ ¤¸rí¹”¦9îP3èøô©fã`üÔE5ì1=c#ÕçP#òòù+ÍV‹9tjöú£BPšnL×[U!DS ÃÖuåµ§_ö2†HÌÁKO>Þqó§Î0Æ{ßêv¡î ?rý'^ziB§¶÷ËÅü ?ê;£×_ýâìÄ”®*cŲe[éLºçy6ß»ó™?"Je „)@…|a‡ J$ì“Û÷x’Æ}×Oή§,CS8c†AlµºN˜2èîÉÈ… •à$Ãíµ^<;[3^Ùé¼þüUgàþ‹ÿã{;µ¹×¸8i´|‰8î6ÜC¯Öàõ/ÿ¬×÷–53Ú"NBŸWæû½8vQÃðƒ¿=1>sÿá½ßþÍß_]¾Oïù/¸î°ç¸1d4ht³¦f*ê ïF-]£ÕfÿÚÒù^¯8MÅ,Ë`xfñL% ÓX« %’û1{ò±Ë^_zêúÎÖ.Â\:U©Œ™«µ:ƒˆŒ7 —ÃJ&Õ}×Ïæînn'2 Fý¥Å3ûµ:FÀ Å VÛÙÚr\wvzZOÙ--„F®³wx Û–¡j¼:¬/¯¬*šŠÊ£ˆ`*œÛ” ˆ€”BSXSLÜÿ—«÷~“ìªî~÷>ûäS9uWuι'ô„ž<š ‘4£ŒD9ÛÆ/ö‹ýÚØÆ\cŒ1&ƒÀ$„@BBBa43šº'tÎÝÕ•sÕ©“Ã>÷qyî½ß?a}öÞëYÏþ>ë Ò6eÍ .®\•”º–«Ô¦W " ’Zªh’d² *eɰUÕr±¤a;$"ŽŽwèe @â]÷ïÿϧ^¯ê8™ÌµyÈ÷Ùöì¹¹=ƒ-1÷ìfíÈþ^MÄ •ÕøüXϨ)×lŒ«’DÊàî£G_zþ»éD‚aœ¢XúëOüÅ÷¿ÿ"p½ëÞ©•©|!¥Y6t;ª);Œß¶ä?¦ë6vP[çОá‘é¹Ù=ƒ;ùž‘±Ž¶®—^ý½éH]M1º"º¼~l5l‡áÊùK4C<þÀýoMN <çõz72Q–_`Ht[ÀÛ„bœ¨ˆ ÆP€cÙr©UµT×t³®bl›š¢é4ÃŽŒ ùîŽФU¡hÊïöT¤úêÆR2[°TÕ¶±ÛëÕU !ð$YâÝ‚×íêïyðþ“¯¿ù†‡b€ã|á?÷êËg±íÈšÁÓ4ÄàÖbQ­ènöGèTF±5ûm×¶Š1‰‰ñÐP쳟úC“‹‰øg—¢¢·=¸çÐמ:£ÛàÓï?òÃ&-ɘžJ–$ ß_H¬@ÄÉÈ3²û@“;èïì¦I48´=ÐÚAiÊJM^š¹]œT,¬nÎal»hÛEr]ƒwq·e8€ºº–ÞÈW«†¾Y'V×ùÊR&Å´$•çV–;ú÷ôo¹µ:½c`t1_ ,+ÌܹßL‘E“LUQ©Å ùXCd)‘D¼[ªª~†ën²]WÕT¦¤¨J¥"ùÝ‚fš¡×ëàŠX„4U/W]Þà‰#G)ë¢H $Ö%’$-]ûÅs?}ùÍ3­í¿yñéŒdÙ†îóú1p’´L‹$I–¥t]·±£jªªª—/_ûú¿~uÛ¶¡‹“7!E®Üº©"ªV­CH”ëj®¦k†ågao›bE승KšÅ¸(Ç&, lg…ïýòÌf"qþFü3½gjysb1çjñܾïjó>ûÆœ—%AØ?:„Žuõ¶÷|àƒ^^½¡r¾á±ÉË/ûCMu¼ôì÷$U=uèH¦VËf6Å3„$ZÖ©ƒÕ$)U®3ØYÕñìFYW¬H0°µ­3“Ȼڄ%;ºnlië`ÏøÖ­™|~s#¾žJ*%›ß\߈›Ëv»¼ˆ¤2©LkwWW,¶°‘d=.Ž d©^.ÕŠåŠ(Ê0y–C¬×•²¤*’\kùrÉ‚àsøÈµ;·m`“.¬Æ»:Äjµ¥µUp¹–Rñé¹;:oãøÎ½¾€;2|º»³µVªi¦°MfŽSm‹!IlY6M¾þÚéáÑ‘—®[š‘+IšI€pLÓáhÔàcE¹P1îÛÙ¹Pýª–t¢ÉŽ0××Þzbûæbj=)9<øÓg/nïm05sòêÆŽýíþOxãô¬má?Ô7s=ƒ~ùóg^~ó¥\<%ÖËŒ¯ùÀøž¶®ÁßþâG¾ã2ÆkËwjuÙÛ4phôË0š,nïxß¶3«+}ì]ç.Ÿ½™ªh™e˜Ëw¶PêilÌ” †Š Æ"é”ÛÅŒïÿÙ Ï#‚´uÅïeIÖÕl,+5¯ßŸWµ€›|þ7OÞ}ôö¦èübB—dI¬9†Ð±0 ABÊ´Jµ¬É²)Ë6Á87äܪ¬Ý˜šÒ°ÅS¤h³TIçó KIbý­åÔøðé{Ž©Ko]:k 55ED/,.À1l[ÝÁ„âU½#æÁý1¾P½|=iö6F½Óëš%5ËY¼¸¼wK„ýþ†î­É…)˪VLŠb¨þí{ž{ê›S+ë<4vî|€‰øßº2™”òÓ·2 S?yëÊZAM®& ¦!$".ÞÄ€p(š¢ˆgæW =<禘l¹:»ºáâ8]³ˆ —ª HŠíêÞ;þÈ=ñÍŒe¨o¼~mz%½u¸ã?~zNSr^µ²§+òõøh_SÃHOÓÉ£ã{{»ï>¼­XÎ_YqCⵋWr„Ǧ-òÖÄ ªaJyÇj4‡—TÈ‘þÍ›>òÞw}á[ߪšúÊÒÒò|Èi³4ÁoÆóØq0=zè…Óo}üÃï÷ .ƶË5Ù²`:W}øä¿×S4Íó×gåZõúÂ’]‘ý,sl÷Ž»wm ¾b>?ØÛ^,«,E³ܺkÀò‰(Ÿ›\*t‚ IDAT>cUUžž]ÚLå(‡úÜÐÁ­ÍQŽ£úûzš" MdU4LSU”³ç/Í,-AìȪŒÜà ZzeÄEÝïÃ÷ÝsRZ|f¶VZ©ˆµ|6CÔUH@@‚ TªQ:W BØVªõ憈ê`ií–àâ)¯`ÊŠÛÅÖÓÖmͰgWïîÙ¶õß~üìÏ_8¿™*$Še†°ÿúß~õøÑ~HS”‹~à`ˇޱÿ“û£½c»BÑÆáႪ}ö¿;ysñ×§g¯WÊ_~ç¾Á&ºçøNëÀšhŒcÈ£ûŽÎ\½޶oííãy×õ‹oæeùNºöë·n0ºÅ!Š$‘›£ Ë¡BûŽûŽ 47uuuù<ÞXsôôÅ+ãƒ]ÙÒòz2ô½÷{^:})™)@AÛ¡lÜ ]¼~»§½Ùq C±‹ûzÛÝ^ïs¿<;=¹¾}W§À bµœ)— …²m;^Ÿ7p{Üžß;4<ØßÕð  àÛ²æ—W7S©x"•È–»[cW—–hèh„½­w ‘X5}±úÆÚ]=§®®j°JD;ü¹™ZEœ›°p!Ÿ§)š£(ÝÔiŠt $  ¬ÕE 8˜õÐЦj¦¢ºj†eXöø`S¹&3ùþö‰dö Ÿùðwþç•ÑÎ@¾"{XQÍͬ\*”÷µrÝÒÔtõÆmN®“ÍwC»·w6uvWË%žs‘È4€¿º>ÕÐÒ‚,ë‘ÇÞûú™Kž¾+Æ“¢¬±4ÝßÑ"[˜$meÚ‚>™€ƒ½=Âd2yùÚ\ª\m‰†G†»?ö®‡«¹â…UÛ²b!¯ec†¢››¢kë}=]£#ýùl‰pœ¦æ†J©6;¿6}k=•ªì9Ðg[†¤( IÙØéhm,ÃhŠÆû±÷y(¢™wñžwÖª*ÏR¿×íáY†zëâÜzºba¼wÏPWWÿþë'\.†å…d®¯· ‘œa*™l¾\¨þú÷gúûûûûÒ™ìw~ò‹t®üÚ¥Û²¬Žo͔˱` ,ÖãÙìþ#åt¾"×TÝ.)²€9Ú}½ŽFl Ë‹K—=*¥ MŸ|p§Çë¾>5Ë î}åï-lWëÊ·¾ó´išŽƒÇ¶oq³Ü¾þËÕ•u_ÀƒŽß½«nZJ½À™ú<Ùø\<µÑÒÔCs‚XJ“é¿ùøŸþâùß[†ãØÞÖÆ|E*W%Ó²Î^¾3½ìn¡h’g‚ –×Ö¾ý“ç,l~ê}¼{u3ôºKuC—$›MѦež9{U¹/_º¹’Èþð©ç_;sñâ• €‰d±ôð‰ýñx6öUª’G`Ê)S¨Aë’nê&ÐíD)·žH&ß¹-»]î¶ÖÆ©Ùy¹.xAß¾EÕMKׯݞ9qìpO[K´½¥NxÁÎæ¦Î¶¦ÙéÅþ–H6™ÙÌ”%ÝðutúýaÒ1k–ÃØn/'>È׸³+æå¼KëË;¶ìµ ezq…'‘!"IdÚŸx÷~óÂ+bUZZ[6ySÆ“™ô ›Ù92v3¿ŸÜ¤  ºzÛɂ̳ÈïbEËŽùYUCŸùØc?zöåÞŽ¦† ÿÍs—._¹¹²¶±cÇðð`ÏÒÒÊÓÏýžöª¨77Ùµ‰lctôÞ ³\‘«ÊÈZ[@†"&`Jˆó:ÀRëS33«6Ò UÃrnάEÅËP$EÒˆ4mûòµ[£CÑHd%‘üõ+oí»9»¼¶™Æ– ìó aØïµìrsËkI†! î)¶ìªXÓ)à“)EÑá`)wâž“’$uttüðçO«ºÑßÑäòýnW©RñyÜ·æID,§réÍxO{ëÐÈ––Æh]Qf×ãSÓs·¦W¹’¢é6l¯› —à6$‘ò{–Ò×Ü477×ÞÖÑ ߸øêž±}·nÞE`Û°¹9¶°´ ëFgg»*é±pôÝwßtœ”h ijåޘˎ É¹²2Ôù¹ûOìQ$ùøý®\žª×¥ñ±Áûï>ŒXZY¯Vkþ€—g™••Ó篽yîÖ­¹äÅ›³3W–tI»1½œË«ŸúÄÝÄJº,)š¦¹œR3£âà I5`¹PJ¨Fý/?óE[´xÖ´mÛÆþ «»« B`X¶ œæH„¤ÐS/…~ï¿C4BŽM’Bˆ¥I–B™Biy%~áÚ-Y1i–²t©P+IŠä@@RG"Šˆ$¡¯eÿþ÷_¾|¹»ûþ'ÿûœ®Ë›ÙÕ•uŠåƶ ߺ>¡ÊjÔç ñÌz"ûÛÓ+Õ*†ÎŸÿÉ_þÏS/ i¦iš@SôêÔ²nÙ4á´6·y½<b²&ÎKÃC[Äj¥˜ÏìÞ±4 MÑê5ÉÄ8§Ös¹Š*×K«UJßþþ“E ”Δ†ú{VRåc]·Ö«,’©Ò»¿7_UwîílÿÔ‡üÒç>H1Ì·ðó«ç¯ÎÌ­ÞuäàìüêÜÒJ¼*¾vn>W(cÇYY(ïÙÝcPŽX1·v5¼ñÚ¼xù_itp`smNਊdF=WO_þÖÕ#§Þ‰„uMƶõÞOÿ“¢«Šjšw„}KraÿÊt¼»#º}†,®e*.–À!!dh40Ò—Oç;›]¼°¼ºiÙ€¤HQ¹b©XIÝ,cA”ÏWÊ¢ÒÙÙ@cìâ]¿üŸ+àÿÑ;?¸1ds8(ªÆP_'ÏóC nO8€&’ÉÁþ>à8ªªn”Ë?ÿÑ/¦—â†m˺ibàP$ɳƒwE= Å3m~Áʬ³B¸¿©}dpÐÄ6O³_úÚ—ëY-]¨vF]$€V¥0¿šÎ¦mÎxüx¿-‹I1Dõ…sS¶m+&@ó…<üžGŽ<÷ü+¬À·DȦüþ@ÀïÍçó>°5»>9yõÊMÁÍ­Æ3ÉDay³°} m#‘X© ´z–Ö*§ö÷þæü"4ñ}‡šÉ—Μîíêïmº†Øhg[çÜÜ…&ËVH¾¥¥£¹6~ðÌz§AO“Ÿ¥èT®*gª–íÌÇ ]ÁÛØ1M‹¡ˆŸ‹á˜f¯§”ËKU–fêšB"Ò´lβ2µ|KgK±\s0M5LQQ=52ÒKZÈ0õ·KOÓ¤aXƒC=–a늼sÛpGGCÓ4E‘I"’&PÀë# @$ÒUý¹_ü&‘+ÛŽ£¦n †êD‚ÞªR×QÜÑ`c÷à–€Ïò–“ɳoil ,zvrÝP¬ ßå0’…/êÞ6ì¹ûï}ïï5I<=¹³·É2#ûû"½££BQ³vîØáöøBAïž~cl¸ÅïåxðŸÇçuy6Ó©ÿüÖ.MÌ>rb×J¦Œ‚î³/Nj²µŸ¶Ã{è™ù ¡¨Ézl6ñO>IºOGwß“/>yt׃™Üd6·‚XoY¯léÛ6=¿ÔÕÖúÄ¿ÓÑt7eÍ ò´¡ê™¢ä¦IÅ0ÇA0 ÓÅÑ’j´ÅüQÕL«½5ì86;‘ÎTk2I¼Ï•¯Ôªu©IR HRåkR_W3I“ׯMÀ‰5øÞ`àïÿê©ÿìó,ÇèšQ-•9ŽS5ãùH(¤bìxš¢3…"ËÐ¥J]Ñ4ͰTͬلá8„cÐÕ7E²›#ôÊâ’3{§ÙϾõZúÃww%â«aKâ€i:­MþÎæ†ÊÍõK¤š›™¾mïÝý›¯þâÞ±!(Бö¦…É[BK‹.I¯®¤ÔõüfA4Ei¤¿©ÑÏÏ,$UÃþÕ«wžýÑßýë×~\.×Ýܱc`i}ó³Ÿù³ƒ}ú…ý¯ø— ÷·¿øÖT®¤75 K{<ÂÚFþ­;9`ô«g~:qëÆ@çH*=Í.*ÒtxÿÉÛwÛÞ@w,ú§ÿöOñ‰4eôŽ)Êš¢[uÕt „vÅ’jªºåbÉF¯[± †¢вMÛ˜õ9†^KdëŠ £PS}Ù|Žá–7s[÷æéRYŒ…ý$ívñL¥\­U´?¾Búè};<Ï .@D `¦R®0ËR”±Z)¤R×îÌf UÝÐUKs`ªhׇvG´õ ò <Å n¡&K¼mwtso¾ôb°kèRbeïàU+û\,E шÇë߉P<™;52zj 5›É”ªÚcœ¨y}ëÏØP‡lAØ–Š7VVJÅâñ‡»Ú"[ûOØkj|é­ë>÷‘SûçoÎ=òà‰xrsuiUUë»wôÿì…+ï¹wçå‹+õªU‘µ¹j|±ü³ïDýäG¯Oߪˆµ±í{Û9´}ü‡¿øáÎm;ÛC!Že¿ûÂE\±mA5]¹ªpqAÀ¡æÀz¾îkð µFTUcY”¯(4"£ ~š¦«ɹ•„¦›²¦ó4ó¾÷?1tsl¾\áyæÀÁ‰Õd:WXª%Úd’¢›ÍMþ…™ÌŒïëe¹R®¦2Ù…Åx¶§IÄqœ,Ë>ŸB˜Ée¿õã_mf uEÑ-Y7€"cHzúöôz9Ž‹ø…HgY@ƒš\–ªÅK®˜~ 4\zñN5‘‚v¹y¯[P¡˜ܵÿ‹§îõ`¼˜,„}Û‡$[oo oéš;û–žÉ1m±(IFº»;‡‡úÁÐö±‘öæ(˜»öŽ!ÆA:|dß… W.N,„vvqýÉoýý§œž[‡…wÚê:г~eml,š^+_¿’@'ÀªÖO=~cv†t¨‘¡¡-ÃßúÞDbm/KP4dYбm§,k@ 㠛è+fÐ@xý¾r¥ 0Ž„ü$Ët45”*ÕjMªÖ¤ —?°{›7üô_ŸZîkiüýùÉŽ¶¨iãr>¯(*ë€iåkÕ¡®NË´ŽÚlkyù Μ¾iµnâ¶hC(à½yãN¾Z‡ü‚Kp ÂÚâ’À›ç¯«º"ÊFMŠj@ÂTtjËpk4êmòÒ/å«•š)S"X3Øýýw¾ëêµ¹þü‡¤RÑÂ6K¢£ƒý¿<;îh}½PÈ­olkmÉâ÷nˆ„Μ½Ê²èâí‰î‘C‡öõ‡##£Ã;Ƕôõt»<îl.ëâ]ßùÉÓ½ ž}åL&UºyŸ7øÍŸ¾yòÈö­»F¼X9sm±,êŸù“G'6’ÏóŒcãtB|ìŸLÞÚ@§î¿wxt KQ+K³;÷îÿê7þîØ¾£÷™¼zqjáÖj\6MM3LAŽD†á ËæY BP“õXÈÛ7Ú—ÝÌŽÓÔÕ†‚0õí½3‹kåšj ì¼¹m¤sþÆôµÄ¹Ë·ý<ÝÝÛ±º™R%c5SÑU `Èëêëj¦!qãöü‹¿™üã °m|×Ñ^U3L˽ÝÅZµ»­•aŠaŸçŸ¾òº¢•D¹®Õ%±lØ€ÔêNIìèŽ-fK“ç—ò+ùKoMå—2æJü_~ü²‡ÀWoÎÑIÑʪ#B‡×¥Çý ¡@gC§Ÿy~׎­ûví¼púô–ñ±°Ç?·°L#èr{d]{åì9N£­m$‰€aP 9ÜÛ=519q{þOëo|ò…¯¾0AóÄíµò;îù«¿ÎPë.maÇ”­ÂrúÔ;÷¡ñCc—·R¬V*鉩©;>÷ÆëçNCÎå˜ËsÍP0ØÂºéø\ŒW`Ýà(¤èVÀÑЩWEÛŽÖëŠ×Ãû¼Þx&X:èGûZžkçÙ´¨¼qév¡Tss4N|3××]I–{ZcQÚˆ€ûvokëm¿=½¸8ÿ/…c.Ž¡æWëÉÆ;š¢µZUªTÿéëß/‰2¶íš¬‰Šdé 01@d:ÀÃÂäôJanˆ•B!Ï’„®j£]Q¿ÀndÊÙ1w{Å"¬;‹é°—†*æ¢áwöwRÀùÝ¥k#Ýí$Ißu`S´¢è;vªîõzZ›£ímÓÓ3‚ç÷æ±G ]^asc¢¹õÍÍìfæ'ÏO™º£ª”P ;n‰ÏmÎÏ%i’H¯‰ }4©˜@ÄÄÙE˜É®2'Vë¥zeji¾#ÒdÐÙÚ:½±²83ó«Ó³¤.BY†I“Œ(ëša ÑÙäwvXëEDàD¦(p¬mÙ Ï=t]±"J)òYˆr=ž­áu±‹É"BhÛpkK(rõÖud¤¯7L&Ë¥¹©¥¦ÿüé«Õº"ʪiš¢"U%Ùë€á€M‚&h*äÂ>¡T“9Š" ± ô ÙR=WÕèC'Æh‰Ö3É•¢˜‡¶nêƒ!Š¢lléšQ“¤ºXóB …lÓ®Ôª†¡s÷êïßô¸¹£w]\Xœ›™?züh2•Ìæ*¯>ÿ›WjýmÃgt$Ù5ÔÆ²T9QLæ+ºaØ6xLnšð°Bß`·àv[šJò<©«²fð4º—6‹Û{¶wÆÙJ*[4,;ð>xlïÄÜF¥Zµ>›Ëɪ¬éFv£öÿ`sÆrVœ¸téÒíÙ|Iš™Z|õꜪEŒvDWÒ%]7u b€äbE‘$ÙßÙ`˜ØAl;À†‰Ç·ôzb[{ˆs!“ä}>®×)‚(©õ‚ª·D‚Bµ‚-;W.24ëv¹RÉ$'ð,Kçjb%—?}îr è%"$‰HcdyqMÒµj:÷ÜkSG÷4-ÎBä'ÕÊåe àÉÁ¾P:^Ñ˪QÕ€ÈÂâÎ]ûD±¾°°¸g_~æàÞc"£¡ðÍÛ7fVË^ÇA’¡I†D~~|Çà­¹ Ͱ, ©’¦êVcƒW§É O‘³˜ÈŠ¥æ¦È›WŠÅZ¹¦D^YÓ³•šGà8ŽYË”!$°í ö(š<ØÑž µl[Þ˜‡¦RÐ)âŽXTåtAÔ Ëís—ÊËR¥º.°d[[”'Ék3ÙBI+Õ%U-KJ¥n64‡&î,9¶ccla,Ê:„ ‘ Œš銜-‰ùªÌRˆ$IÝÄ•ªl;Æ ÄŠn¥ÖÿàíêÖ×ãÝm¾šaתUMÕ†ij5|$I®¯­G"!Q®Í•‹Ž^îimmÛ,—{šZFú‡O:¶oÏþöXs<™˜Yœ{á§Ã|ˆá½}±&Y«C²¬Ë:ðG|‘¡¡þµõ –exž›™¿rë¶®*?zæy§y·Ç¶4Ç0[ÝÚÚ´¼ž.ä2Õª‹FóÅ¢®(TP š=–‹¨»n¹YjðDßë?¼ 0ކ=ôÐ@0_T-3ÃQ3-¢ã÷úȣݚ¼jlÂ&!IUS9²ŒàçÑ…RE·l]7vn”ÅZ]T$Í„#! Ë=W‘.¶£9˜-K!C,½µ¿MǸT¨RdÊŠƒÅ0!À™ŠbØŽfØ,…|®cGŸTªs4©¸*ëA¿k¨¯{âêò;ð¡CãÍjË`„"ˆ–XÔëñbÛÐM¡è¹ùeöK†4Ø©”²:G{N¬U]4)V–ê4ËûÝîB¥da|eòö÷?¾‘H:²|ß=÷Wêµ]ÃX–´Ô`I—‹hdÖ£ IDATmŠE½.×…KWUE¹võjwG¡Vg)@QÀ2U"SVE±Î2äj¹ºx{ñÜ­Ìõ‰©Î‘Æ|ØW´ÔÂí<`ˆ=Û[§–‹›3 Ù€€ÂÁm‘BEó…8ÇO‹ ×”“ww¡;‡.ß¹½”^í«ÖKª%Q²‡€X³¨;ë ‰dQ•XÈ/–«³kyÝ´1° ¢öpcŽcî¬æƒ^–cˆªb6Eô‰[ºÔØÐɲԕ¹Ûn†!`Û¶ÇãOç—«¦-VTË‚_úëO<óÛ3ÊÛKà,Ç+І…»š}wV‹MÜ|Äïñ‡x×@ïË%lJ¥3‘pC8¬Tâ<¸1;ùʥߗs›}mCw¾ëð®±ñÞÕå%KÇ«ëkP75͆þðf®¼¶´ôû¿§^/ð¤àðµúó×ÎÞJElXdÙ4±”«ÇÙ3mj¯ÌdMoÎeƒ·ŽE¥œ‚¾ýÕ¯¤KEÁå]L¬F8Ò°,†ájZ)WI™Ø)ÔhähµŠþæÙëša×U“¢ @D¢ŸÌ×÷ ¶ØØnið"Y²1¹”0-»®I t„ÒEѶ°…M !;¦! ر8–T ìxž¥ „AVMu /Pm#±Ìbá ®Ìåƒ L{sDÁ`u#ër³É|•f2Y û\ù&0s÷±ƒ¶d<úÀ}<ͼôæyc®,,D\ —/´DÂKÉÔh?íÀ–Ö¡§Ÿéàø®JµŒm§PÈ–«Æ@WWOgßÞá]’X04½¡±ymmíÆÄuÍ4'‹zgwg"™6 Õ*ã¥.;˜ÆŽãssO?>]¬™&6TK×lÀ ©k?øøÉñÏýÕÇg^áÍUY¶Åð»È¾žàíÉ¤áØ¨(ÛÃCÝ‹ñR9#øÛ 5¿Q[—uÅrlï&!QÖ%Kr¢AOÔçi[K•Žbi¤fYÒ 5¹+æ[MU6ÓUBYÕ%ÝXÊ´ì|EÑtK3-ŒB… C$L› 1ÀåXšeD2n/åuµ´ú¾öÙ‘–¡4ä“zL8&]*.8À!G£áöfŠ€«kéõLxF‡»‘;0ÚÕêãÙtª´¼º†mk%»Y©” :¾[Ës è*K•ÕÙõ;“ÓKɳW®½üÊðòêÊkW&YšXޘʊµã‡ŽÝž¾q×¾»Bá–h´Õð^zf#¾Ðà‹Ú& úªå—ûÔ‰i¹!Ù±u|l´-ë2Ïòã;v?óò¯ÖæIN–3&¶oÙiˆ:í´cÓ‹›/|=”¦ŒuÃ2m z.N%_ùÕ?ï>8:ØÑx|¼ñwVsùº‚ñ{Ž}÷?_²ò©–{Û‚g/\LÆ ¦,:€’ûÇi†¹wtë–žî 7'.Ï\ áÚ–ŸõZ „ÐÕxu|¸#¯ál²ºÒ9±¯·AªJ¢(ªp1Ôþí½O¾2I!¸wGÿíÙõRMXÚ´mA7ǰ ©›Žb˜$A`ˆh– }t(@Èåm¨å+ÉHu=WØòù}‡ÆvÞ˜¼}ï‘cÿñßç·÷ö—ÊQ<² ®VªŠÏÅkˆv°­9 ­!ÖÐ’åifŠ¢ØÙÚ²¾¾Q,VnNÍ*rÐëjéŒné˜-ÕÄZ]f)rzaMSUOÀW·éªM rœ›w•+ÕÑ>€›·nÀ&leûð†àȾý¦a\œ¸Q¯Öj¥¸íIm}§R•ÓxNÓL@*[>²µåýý²ªéŠiݽ¤Hݵo˽Ÿüþ¯&Áââ®÷î_zóÎìü hêÊf¢ÿ×ß¼5ĸSsvŒ»Oïèpµ@T®§ èØ„nN¥kÉl¥/È—EC7YÚ1Mk §¡È+óÉb]š_ϳ’4ûÚÌ:ƒŒ1$€Ÿ¥,˺‰mGà8M·á4Éx½ÁÞÖA+·ãþÇnßìïíîjŒÌoÄ÷mÿÕäÍ…Å%€œP©ë—ËåúÆw/}äý‡66²ªjö GÊUÑ!IèKà<$Ç‘¥R}5YZX+fÒÓ‹–nõuô·Ý·ëÅß»:1·š*ŽÚîaQ´1R+W»ú[G{ºîLÍxÝ®×¥jÇ0™L®V+ÿäâÍC½ƒ-¡¤Û´*b]”ëËþþôÿp¬›¢8±´án0êKéø¼»!f(PÕMŒ1A}mÞôJÎÆ TÓ¿òÙ÷¿ã#_–óð#»þá‰ÿëÉW$i E=\®¦¾zú&ú»/ÿóÈÖ‘g~û¢í¥…¡¾®'NÝ¿<›©k†õ"ªµtc%–­|Y@ØÂ…IRn.g+²¡[ ®È6Fºm“¤T SQŒtE¡IBÒÌ·sjMŒ$`’ £^O…5Þ1d;©…\>ìu_Ÿ›íõ‚¼çÀ>Ñrr]“$É/þï_>øhã+/,”JR0(L\Ùèh0-³«§»X¬äŠEÇR—E“pš"¡Ù¹•JÝ`hänf©R®|áÒ­L±Öó;}ð‘ãŒfM¯ÆÛÛZ»Z›IbKïîêr¹…z]f8ÐÅ në†bÙ0“NûÜ®l> ”¥ÚZz‘MëÙY‡sïß>ž.—JˆÏÄgB1ËRË´–Ò «PÕiD¸9BðÜ+l77y&fϾxÁ°Á>z<+~èý÷8Z½"蟿ü¥¥•ʇvcãÛv*ªzgyÎïo$ghÀ¡)ok³0½w 0–uËÃ1뙊f˜M~6[Q¶-l‘$E7‹¢ª›6C‘†m‡<|c@ÈÖT¡bbÒMº­ÑÛÙÔ77¿0Ø;4½²ÞèsW5…GT(àÖöûŸ;}†¼!Ö÷æÄk«3µ¹ÛU5ªj¶´8/(dij¾P¬U¤L¦L#¬èzcÈSȹ*ˆ¿üÄ»½³5 z8R‰gä¦ÿ‰i…°„ËëÉîö–gê’"°ìôÔžñí–iݼ=SªÔd±†-H»¥9h˜Œ¯Ä¢í€@¥²taþ÷÷î XJM-^ʉµ/~ò ¾X§O_+/G™‰È·ƒu ‚p«Ê$I˜¦#VT8:€þÄî+Wo×5Û1µbUí  /~ñóëkkU©žÈ悜àñº7“ÉžŽÎÃãû_:÷Úѽ-¯ÍÚ¶Ê0\SÌÞL²nïl½³–_ɉ–©¥ªJÔ#´„=…T™äùš¤«ªé8NOƒw´£a=_«Êº‰ž% UÈ€˜ñÓᯕL¿ûчûš¢o^~sî^fmf5¾¾£(/KD‰’xkúw¶œzôу¯¼rãí‘ óqÝ;ÐyIŸ»”-yºš¥\Ùës›uéå³wâ¹êᶪ¤Ý¹3ßÛ ùÜ©\eu³Òöµí½39_.‹½[†zca–¥„Åbs 8ߺª[0ö”ËUMS†4“ 7®-OÞw×C¦mi’Äüßu½g˜\W•¿»ÏÙ'Ö©œ«º:Tç¨îVKjE+K–,9' 1&yˆ30À a x3 `À€qÄQ¶‚•Õ’Z¡sî®êÊ9Ÿ|ö¹¸÷?÷>sçý¸>®w¯õá÷ìçY8uã¦|Q¯÷47ú:ÂåØÒÈ™ðLV  wÈŠV©É8 ˆ œ†\MTU—4«vŸÑm&UI{âñ‡?qÿáp,ò…Oß÷Ëß¼>¨“¤Çå¼xýüƵ›½×Üâ|G[û±3§Ýnß-»÷oèß|ïÍ÷<þãWOçybSkàøÕ…xžÇ&© À 0Íë[Wó#Gµº™™Dua%£A!Tç4 ¢Ba:UœæF›UåoÚ¾Ó̰«‘ðÌò C,Fn5Wqz½;6n©s¸Ç¦&Y†¾>}­;8xáÂäâbRÓPk«!=Ê&£Å¶îúL­ÂêÀf`t˜L¤#‰Ujb¦T“Íd Ç'Ãј*‹ÅÿÈ÷>~^ÑTMA¸,FK¥r:'©*ECŽe(€å«T#Ž2¹g`oÜ·çäéó>‹Ùiöfó%‘WŽLFº/ë$‰éX±P±`ÖŠÌRØßN£¿ Tåþ{7 ö6ú|mr_·w`ܶ}_MïÙ¹qûΡJ&;1wµ»£ÓítÝyó^øoOý¨µ±Áíp¤‹âpo—¨ÈÏÿé—»·ïŸžŸ;¸kO¹\õ¸÷󟟹|U.§&–VW篭_3´’Ì 5v ˘¬4ÉIB ~ãO² syêúšö®ÕÕ¥åЪ%´âxº˜Z™¹L[uïï¾SáËñTÄJÊ|a Ýl·mþó‰wšÍ¶P&3:Æ iÖª° 0à´¾ c ×F4OÙ@¯‰,cDMÌÎ.GÍ žÌåDYûÒÇ>-V„jªÞéjmn¹2u]Sò-¾fZÃS‘©Ñ$:Àþv0ü­ûƒ"õþÎz$IE^;°wk!SpØ4©Ë*òÖ9KÞÅ1¹ŠÐt'ÒY«‰-*u[2Wñ··…£I³Ê«†{lf£ß%* éªFà8ÒP*™„æ°;TUš†aBB“eARiDE•u’À4 D ¥³¥± ×bµÒO>zëZ³ÞÕÇ|ÿ¯¯ë ¬ßr£ÍjÙ½içå…¹™ñ“‡Þ !ÞR×017--Á'žxlae S/¼÷'N##¢¨äÃ#cçãéØ}÷}ââ´ÅD^¼¾ÐÙ0ÒŒÏçܸa€dÓa3Rx(šö7¸“éœÙh\ßnÂñš(‹Š&Ir±*È^V•j¡ªjˆ&pISX£3X1Ÿ§ ‡$ÇÑ’¬@Š"#„‘€aðÑG>þ°ÿøéÝ^"à³j@y÷ƒ+… ‹Ë·Ç¼gÏápt¡šÍF£KÉl®»¥gmÿ: i“W§a3mƒ÷~âþR©léj ´\]kuøYÒíÜy_£ß‰¬êš:6=.J`8<¯—ãU)oÐ –zgä]~º½‘ •K4)œpC§o¨ËÛã·l£'eìcw=ŽÍz8í4µ¶åÊ$iÙ8¸‹5²¯û,Öþ¦æÉÐ íôML‰ ÕZ…¯ùÍ–4±ªye4œ/ÔZ[=ÿo[D‰Hšbð=ƒ ×–S ~gkKKQÍMþî¶`(Seibz±ÞçM¬Æ¢é¢ÑÀ08Þ?ØAaØÄÄ’(+†Òöà=‡2‰DE Ž“ %‹ÙR µÛÒ™äŽÃûOŸ~m™bC«S­¾&Ò¿ñà¡Ù©iÓ$Y}ñ¹çûúÖœœºô™»>VÌçÍvŽÂß{àÁ¿»ÿ–æŽàþáõÃýëìfËr<ôÔ9].I‘îøü?õÑŸy§VÊ`O¿ð³€Ã—¨Ug&N ônR«ò‡#ï¬iÙ|ÓM7ÕÒyÚb ÿÚñ75Y.Ëü\2yóÀ¦x6Ä‹%š†E ­mÛxeö”&×,¬',†ìÐBàt¹Vb9ƒÑ¸ÂHš†éèà®;ß:ñR}ǶðêT­š\×Ô5K‘„£Fã‹_®•q9×ÞÐðºÞ>ö—€ÙÅ´ñ“¥Ütù¾ý¿ñôÓg0 t2wl6ÑÛh/Dƒ¶ÚÍB2u~b BËU]o«s\™KŠæµ·oè:}yVEÇp#GY9ºÂ˧¥Æ‹‹AÓAà M­ß²ž%Á«ÇþrûÖý§fWmÙ’j^ÆøúÉ·‡šûeXØÕ;L&‹ùÜàÚµ.]úë{ç}>ÇŽáö‰¹“¹¼»Vã™B¦$³4uï¡õ{÷ìîioËUJß~úsz)o53Šx^>|ÇZøo?üá ï½þíÏ|îäèµ»nº3hŽ%Ò¥L¨±±CÕµžŽNUñPxï¶Œ¾ûó/üø·Çþ“57Z L‘ª*P2Ù^QiÎ,Ô“ÊÑš…# Fj¡0¡’V˜q8ÚlF#@HÔ‹rÐ8árº œ"9–/Å64·æ*rµ´œŒ/KŠvJ¤¯¼®ð ùÿ|úŸ92j¶b„3uÌÄuõþö&¿Éd:¸cýõ¥$k¥š˜,T6ÎL b±šÊ•EišNBœ& €õ»7wx¼ )fƒÉbìíhߺqé¨P¬îß²w9–îljœš›ctpÛÍ·Œ_™Ö5Œã8UÓ©DK°en)|òüÈôøœÛa1sÌõ±…J…ݱeÓìÂJ2S–d5S¬É‚,Tó ¥Jvv,‘ÔçCEUù¢Ωüâ—õßÿþßõvnììýÿø±ÁÁµ{ü>¿ß@H£Iª«gÐd±2znähÐìÁµ*jK«ŠŒpdµÚUM HBC²ÛfÖq¦(–XÂd4Ú›=-çÍTV‹EW5¬ŠádgÝPY@WW'uÒO@™Wt¶&ÅJReÚh]MEš5ø¿9¨_ã6ÒôR8±}ÚÙha°·© R,ð‹$rédÆf5š tï@[:]BæsZDQ¦)h³€Ž¦éxºˆ4Ý cN«©!X?réJ2“mnð^“xAg0¨²rvä¢5Œœ¢*зmÞræôYŽc "Ô××õËŸ5(¢«¥Ò=w¾uô c.³¡X ¥ÚåÉÕ©Ñk«vbqd±**Âæ:³†þ:7ôµøþùï¿ôw¾yüy¹,=öؗ꬞¦†»Ãµ²²xì£#Ím]&g3Y<^§«î¶}wÌçrÓË—ŠÙ¢Íî7CŘ˥’Ýf3™¹D¶T-•xAªT„ž&o¡Ì×YV‘×LN¬˼¤‰êš[¦$• âJ$ïöyÀû>ùÐë¾ôÄ]êŽO˜¯fRÑX„¯ÕÎ\<ÞÛ9Xˆ-{í³¤~ûü÷¤¿óљ߿õL¾Ä2Kšq\ñÙ×T•*¯fªµyÏÁûÆçFnßw÷Í{÷²Uç÷7ÔÕ¿ýÁüî3£uÖµÅKU L¬Ãt‚Ðʵ´‰5íÚxÛŽÞuÓó †RB9¡'+D>S ÅÿŸ¾Saµ²‚ ô÷úlNÇÙ‘1‡Ù¼>`žÉl"ÝQïìlóõ¯_SÈL«Î26#)êàð`ƒÛZeYCõuµj­RI‚w:\ÍM~ àMuž÷F& Õ’\-Ò£hj_Og2™AHåy™"pB¾ÊHEÆ*•Òt‡I$ $ˆó’Z( ÅŠ iizª"ÉŠ–ª*?ûëO¤Åùîí2ÉJ¥*üò—žˆÅVÖ®ÙôÃÿüÎúÖ~ Ë.F—’ÕX«»Þîö½þ½ÙX:I9õ‡=÷¦‹|>®`E¯³ã¶­wŸ° IDAT-§Ùu-=7¼s×à“ÉÓïé5Xßæ±:ÝpØçtɲBQT©\6¸·ÏŒÔ² Í`ŒrùøuÖÈÔr:ErÃÝ»³ål—¿ù·o=ŸªFÌ–Ž|¢¬ðP)aÿSÀÿ‰%–bƒ ’$¤R¹‹Ó1+¥×;Íál ¬1àÓÌ6½\vXL’Š,F¶T©´v›Ãı8F„R)—ËÙÞÜÀ؉©épx5Í×®_Ÿ¢0×‘È §}ÓÆõ‰XL’d Çpˆ£p¼mh`}ßÀÂÒ¼,kN9&K ¡Iç°ñåZý@;#I%^R4LCÈÂR$îÚÝžNç6õ“yibÎefáðæA+g™[2³îd,I-µ¶õ"7ÙÜ,ŽÏÄ"F­FY ‰Äâ·>°ë†ý§Î~ð¹Cæý_pºTæ+«ÑHoçšX&<kRr¨sK¥&êë)’döìÙ‹ ¦y]ž»~åØ_ºšwÎΫ·E$„4sfQÒ—£ '®ŸÔ¢c_=“,&+:¯ü÷`$å« ÕŒ[ Wÿï¢Nt­kl°qM7t´­ïj©ˆ@Èn1—D ÌÈRÃkûŠ¥rOG‹Ón5[¬6›Ù_ç³ Ö@ MTÕp2%Tk ˺.HŠ®cªXµÙ}•j1‰Í€,ŠI¾}ãæ©ñ±PhQ‘u©²¨ÔøŠN‘B¥* ¢ÈË4AD—bé"O¸Žc@E|í±›^˜Ò¥°‹³ôûo] 1޽öÚóùLQòõ¹Ûîr¹- ‹«·¥Áë””ò-7ݧlra¾´ö ø=n Óü«)ª`³¶¥3çhÆsëþ“áØÛWO@ðû6î[û‹7ŸÞÔ»szþ*4puŽ`´W«©‚¬ÈJE—9“ +äkíÁ¶t•T¤4¤‰«™4†‹ÇO­ ¼€ Nð4©Â¤ ÿw$ñÿáÎG†o6¶[©|RÃpIºvN«ÅÀ±Eº¶•ÕØâRÈa·»V‚ #ñœªËNWôlhȲÓïËÅSâÀ4g1 ’" Š„8$i'HˆAœ$ MÕ‘†pU¤I’¢¨R$Q*ð’RãyQ¡ý®ÄL„%!å´Œ_[æU×ÁðºŽ+Wfö wýáÃ)âBY:‚~öã:ÐEçh‚¡Mm­áðª‘åÄ’h(ªºÃdNg’5QZ7¸öÔÉ3?}á©€·A‡Ü+Ï¿þþÅL$V[ŒñW'jËù·Î\mª“î»ïĹ÷¿øÐ—N^zwÏÐ-o]y­ÁÕ·óþdN¹ïàçg.IHàISŸºëñëÓ#VÚ1Ô=0±8 !œ›«¨BM–d$pÚP‚P& J,À†¿ßZÅPÏ–T:Âa0Õ)§ß¸{K¥³rœÑlÐ4D“ŒËa¯Õd–¡%YH&³‰Dv~q¡P¬9.šHҹƦÀ‘gãË¡Â1DDrùj¡$ó"@º !¥j¬ÝŠ$…" †R×u0šÐ$UÑFB\G:@ª¢Ñ§i¢&«ÒüÍ4…•‹Ц*…ª¢é±h–À± ]þtY\ §s5m:œÕqÐà6Tj "!üÜg?5¿´jµ޼,ê`ynvr~õ‰Ç>ùæîÛ¹gôÒøK¿}îí £÷Ýqû§ÿõ3Õjè·î_û)ä¥Ñ• ÅÐ.õʯ¾×``üšH^›^}á•?÷­ l\·ë•Þ!ö¦Æ5ˆ¯¶·vرƒÄ`CϵÙÉ|ü{[w(’Bæ«KS¡ÄÌ÷>²´œª[Ûš å“qiH’¤ X-öš$à'S{{@,ñ ×­É$2@×Òt¤é:Bº®¼"×€†²™\­PÑ4M(WXšHëմΠ»T¨õx,éª|ã¦V›‘êhtF²Uê;?õнÅ2ÏÐðäõùž&o¥Tò×ûú:;3%ÍâsÛŽ]k÷;¿õôs+ó|‹½éŸ~õ²†ô§¾ù¹][ú.ŽÍýÇOþé·ÿôÔÓïœðÙ "/J2#Iå±ëóÅÚ̽·|¦5Øòꉿ~ëÓ_fMœ,Ê—ËdàzZ{9£Éjµ¦Jù³ÏV„l££ùßó»¥åTo«›¤uV‡0©Î×»míöÝ=ÛΞ:wþÚ_#‘pscG(±¨‰¤Š•v¬»ýׯ}ßïÞ󓣫3ŒÉ4;7³œ+.„bó«q «²(mÝ½ÑÆ@ ¡ë‹Å– íuFW2.+S4oƒ{elS5’„v·•¯Š¬‰A†”j&M:Nè@O&ÓŽãƒ80Ñ—0b8†B¨Kš¦k€Œt€ã²¤H²B* P²PÍ–ÅÅLeCOÝõùÔb²â·º:[…Z-Uàá—¾ò„$ÕDÜ´wW:™ðêvm¿ÁÀ°’ÈÓ)Œ`zÚ;nØjÀt+G¥2y©¹š´¾³áùW?ì_;øÌoÿXÐå&;>¥lœP.AH_ŸM0¾š,=vÿ£‰H¤Áë3›LEõ³ßýl}°ã¯¼ti~‰¼ÕÚÊ/7ø|}­–ý[î]¼JA’”‰²”‹1¿£±%Lg3*.Ö|ñè2u‹™Û½îa ÃÖuoÇçGgOÕׯA€|ô®;“éÐ’Y¶tìèùpl¶–Éó*î5h‰L~òú|¶X‹$r©l±’/#„8tÝY粘 @wîÚ¼¼°B’$€Ž´@ÀµgÏÎ\<#©2 qa$„2¡cÒ,‰a8m2k’ܵucrquãºþåp©š(ˆv§­Rå1 «" AŠÚ<ÔÎl.#î±rCÃGÏŒ7´:à7ÿá+‚,!EŸ˜D:¾}ËÆwÞûðì…‘D"}ëÍ7ñRå¿úÔÙË}ŽW/ÌW$í®Û¶=´'AÑ?tû¿¾øv!NjÏþê_ý»7„"£s&Æ`ªo_ß·Æn4Õ†%IišŽ´lMe¶•hhÒÛ÷:kÅ‚T HƒßQÏEEEÅ 'ôRQÙ·ãPSsókï>' ÕÝ®‰%Že3Õ´,•m¦ºË3Ç úÞ»8úÞ-»Y†ºrý"/”¶/OÌ­no®«a(Ëίß°æÂز¢*õ³ÝȬê·pO{ñ<P2’)²‡¸!NàX¥ÂÏÎÎ˪ tÜä«Ãd‘ 1†¤HR×4 ÃðZ>§< c¶ô÷,ÏÎ ‘VO5›%°8mÅB§(£©7b©ÅPôþ›nxïÂøÙ‘iB×Q­ o:|ÀÄY1E°ùýv«EצH‰L#©…Åå?¾râøÆ-C>òñ¯æþ³§NÇ—B'®Ìž˜=´wû/ù¢Œ”Cû†F—Cj¦TÁ†á@Ñ*NæåÕ(’Rã õnIÑçF/ŒÆ?½ñêìü¬$ ­ÁÖt¶hq:ç–§÷m¹y!<ï0»’™(Ã5é¨XŽÅ‚ëÚƒ-¿zñyëlðw/FGuµšç ­ëY0ЖùèhE¨ø,-©ØÕÆÖµ-ÍÃ'®_™¬Ð¬Ž¯¤ªç¦Ã×'WK‚°¡+ø×ãWvx,FÎéär¥bMÒ=Í>¡T‘Q•5HN§U–e†¦t އ…ë:% BÇq ÓNºŠ0‡$ 5¤õt6Ÿ97B@xóžSS“ª¬ºÜÎL¦ ¨zëŽ _ü¡ŸüúUUE¢¬¦’·Ãâ´²š.ÿàëaçG>*WJ$\›2Px*U6™i“ŠÇÓ5.qœ—¤/\½š/磑«žÆõ«‘Ì#ßňº'HÄ‚$övuò‚øÜ;ïlj ¾õ×?zÜM’*4x»“¹P{pÍKï<õ™{þ1•Jù|¾l6ûÑjè‹·#ž{í˜×k¢ ßr ·£=®éîY*׎_¼ (rCg{°½ãkßý9M݃]ï~ôQ)"pl&šÅâ°tùËq’$n;´ÝCàO~úðär)Z{³f‰R¦t  ûÖÔO®d£¥ro€kä­7šž™Ê•«,Ç8þAQ§}Ž›ˆ,Pxíã·Üûß½M'/}Tâ…-Ãà Iñ’4lùû¯Õ*ñûî|üúÔHgkÿÈÔ{ó—¼ùIÇó_¯çÒÔñr™·ºZ=.»Ý<13f"µói‰“¥dJ4 ³­áÊDˆ ðÎ&ûšîLQM&vÓ†þjµxüÌ5U”%YH¡)ò;Û=Îh2Åg2ý7Ä¢1‡@C]ƒ½åjGºÃex‡8ŽA Ó ¨èH”Š%UQT W$E”iŒÅˆ$iË–mƒq&£*!wÀMa¤™Õ¯.Æ"é|ê§?2[ìI\8Ö =ÍõzM®ÅcgF¯³6£‡%fV“wÞrèÙ÷?J–Ë-n{±TGr’6ÐZÿÞñÑp¡R&È©©È³?xrËÚgß9Ýtuíêwši–©ðЦ‘#+¹Õ|lfá|,S âÝÓojÐhŵT9unæs~gÇg.(JR¨¥Krí³ýÝÛgϾúöû­nÇÈâ¼ß`òÚ:“ɤ‘qÔÕÕ•òÕ…ðõR¹°¸´T­ðÁ`¤:è4yÿã…_ªbùdº5d19#™Ìή†#ç®ww6XY"^P¹gŸ1#­&sCc].S@H/çŠÆ:/«ªœ¼¸0;ÃR´ÓïO®FHê04Y®èª(° F€r‘'IL×1躦câMGšªk@ÇTEVè:m²@55¦ç×t³é…Ôs¯_¼>Ã`MèÛÖvÀï~çk+©„™Â MÌ”*RåZI”¶ß0TTÒjžž]ÉTkéD$^,”«JªT­wØ÷­iâ¡[Šéìõ…ÈB€D$ÿí¯=öóç_(çø:—YÍUï¾ãÆ_¼ò/)yúÛ““ „ G—Òs‰Ø‰Ëc§&ãg,%¿½©±¹³Ùjmoênñ¶´mXRÉ€Åyì܉ðòXçšµ'FÎ÷67·54Ž^9M/2Ç0†Ý;÷c²±¿{øÂô–!ny@VÅX*„ц‰ùkóeHËÀA± °¥ÛGêBæÊäjÃÚæj*;3^Z‰ß}óŽ|2/ñ£ÇDŠf«¥Þfݶ}c±Tð55¨¢$T«„:ÐhŠ„! B\WUL8„NÀpèà8ÐUC IHІ€‘Á²[·oRkQÑÖôµ=tÏ­'Î_‰D“™l®Ák»2jð»\˜€÷Ü{kWko:Mæ ,Åš¤(ŠŠtMV {êèyhÝïÅùÕ>¯çÑÛv›ÉՄ޾} ß=qãØõ]±ÅðÓ¿}å¦[w?;ás[]f×±B>ŸÎ—~ÿæQYѺÜî™PN*£á¦³Š²Âö-ÿòÖ›´¶\RÈh2ew9'Ñ&7ÔÜ! -¤óùT[]°XªL,N¤b“åjŠ5XvßÂÂðÙÐUÃI°°’«HyrÛ¶¯„㋉2Tð•”lÐõñù„ÕõÜuõö‰‘¹¶uí" ðĽÿøó?H RˆªF»“ó:@­vu|&›-ˆ5^UTK£¦(‚¦!ÐLj ƒ†t€t]ÑTŠÄ$IG@' (¨dsscg{³Àó.§CåU‚" ŽÇ2é'৬Iú½×¦W%Y‰¤s>‡ þè'ßY§.œ;ðyâÉ´‚4]ƒM`¸>7bl4=rv¬V³qvf1%ãW^ùMg]Ý_ûzøŽ=«5½‰Ö·â¡ÌÜRä§_þøóï]XI{ÚN\@ßÑS¿ëæ/½u•e‚&C‰Œ‚@Àb·Õ€ßiKfáý÷ßE10MÈŠ‚4at(•¡!iâ¸é¹Å##“ÑX×Á–Ö…dþ ßöÉ;öýÃ?ýð/ošŽϧ3Úä÷ÚD‘Ï ò†îz_Cýº­äÝ[ú¡ôÒjþÒÈP4 UE~ûJ¶–ÊÖzš2@îD®4v-“ùÅp±TJ¿t|z1®cGbx!Ÿczr1ÔÞÔ°¸‘di1‘Òyn6L0¼% V¨É+‰|¶X®wÛl&Að¦CûY1°L.W–]•j@éÕð……•#ÇGw¯iÝ:Ø^V5YQ·ö·ã$óí1™.±”PÊñ€"ê[ƒ«+«o½5²Rª}ñÓwT˵z¿k>6°äåÉù@°^-‹=ÍÎ ë;{ýfAÑnº¡û¾»}íá[ò<Õª×e‰…ò›6öÇ3Ù}Ým—Æbå¼’+ªå’\))›×µØ{s1YŽU"Ö°ù'gÏaH¾aË!!Œ=ÍÏϾÑéݑȇTIÃq‚c`4ž¹0™[L¬j^Û9»”ðÛ9‹‘lî Ö+KÃT¾ZÔ={×Å#©ôrÔÝìË%s'N]²µ4^2{Õ|1±ºŠ›í@“!„8ÄI"Hâ8„¸ÝF*â!J"@ ««½­­Sq§Û‰g:š®OΈ5éªÏá²˜Ì ƒÇRy €ª"Žaj¢Ä+*lj\ÞtË-R­f¶9EL`øâüR&“{÷ÈåGîÙ91³¼~ó–z+Iæ>û‰Ù-ÜÍ{‡^{õà5•3˜ =’(ƒFòÉGn#8S5_XY ŒÌe¹–­LŒ-åRÙçñ#'/¾{-d4³g¯,~02þÆñ‹‚Ÿ§çÃM׫åbG½×aáê]öšªUd@S q$êmM C=kà3¯}ÙŒÙüž¶¶æ¡¥å…£ã/jZ±µ~mGÃP®ñ;uû _’r æ ¶*µr&•›Ž=ûo_ùÓ;gŠÁIS+éLA8¼wmG3RȇÃY†&¥ª€ ‡8e¯Ç‘Íf¯÷ð¡=¡ùEÓHˆa8FÑÄqÇ $®c:Ò1BMV"±$q¯Û/dòÙ”ÑdÝ8¼.H$ÓÙ|.OStcƒ§V­µu4¦“YQÑ4pLd„$üû'?/¨ºÅ@EâÑ_€cHQ“-mR½>µj11‚ªþñÝ Ázç3Ï¿)ÊÕÑ‹ã·îÝtïá]ݰ¾=T¬ 5û“•ÊÇ®:Y¬)àuøü/þæ‡uAÛµ‰QG¨¦¼ð×ÓÕê½wÞ”O§2…š…¥Žþåé®:×î}Ksá›w I„ž+T6á²õõ´EWã%A¶²´ +3ó¡kKÓó«Ó²XI-Êb:’‰-'F÷¯ÿĦµûß<÷ŸµŸ)§J±‚øÖ/Û ö…L²ßf\XM* PUíÝ£ç=£¹Î¾u¨«±¿«Ãk¹<Or™r£×Vª’¬Ò$ÑTï-*7Þ°>ËܸsøØÛGeIbI¨ã8†áÄu ƒ8Ž#\×5Œ 4`@4úIŠöx¼ ó+éLº½-¸Ovµµ9{¾X呦Ë5ÎhHD¤Ó˜…Z‘‡¨oôUyEE Ò!¼qï.¿Ï·^±šM‚(éºN(Ú™ëW[½[³×·¶oìâ ”RM¼ãÞ›ðcݽv»ãK?}î7?ÿf%™¼2YYŽR4á`hÎl8yqRÆ´[öîÂB!5WXiêÀ ý5±öÑÙ‰_zúåc á䉳å&oöÊ벤,‡“vŽîh¶;Ûš§—Båš@Ó„ªCA”âÉòr(ÑÙV¯ ,ЪZ*[IÔŠê C7YŒ®d9Ž©ôÝ>3::ú‡~ô©CΆ"»6­Mó¢/`/e Àå­D’±hjqjiz!J„Ñ@q,I“DS_óºÞ¯>rw iN#}îÚÌCŸ¼û/¾¦!„cÄq à !„AÓ,[H'ÌnÂt³É¨jj¹\-Ux‹…[;ЇT-“+JK¤YR$‰eœ"xQ®ëlkµJÃ=u3Ëù\®¨•2ÐHÂïüËwÞ;z  à ‘‘áŽ^Y×Õ^‘µ&Š)„¢4 Û:Zî=|ÓÍ{nøûü×PNºaMÇ׾𩩹«®{zZÇgCuf¶»£a*œH†³Ës±§_|ùå“—[ÅL¹¢¨Ïýâ¯9•Í•ë\ì›Î_Ÿå(’Å]6_*Äò%EUxIr¬k:¿|é]EUEíjrµ6.§ò.«iÝ`?K»úãÑÕšTzïüd2“ݹn÷[Ÿ-óiAäq—«øåÅ·úv\ž$W¬&š¾ùÀ–j¥ž]±r´;à¢1Ýë4wý•j­ÂKÙBµÍg[ Ç>:?º²) ®£S'G.‹Õï‘JM×AÐ$!¤iZ‡$Å ¦cŠˆtȰŒªÈ=]]š,]º|Íb±d3YE–êýžT¡ˆiÈl5eóÕº£ÙéOFÆúë\N÷å² åŠ¹HÕ×jû̾5°±¾ÎçuËŠB› n··M?EW¯ŽX–g š¦nÚ´!àöúü.MårÙlæÚÚ:[ÚÛZƒQè¨sÍ.‡ºgwoooz)¼’.Q rÔY¿ûƒ¯p6kScóýæ¹ÍƒŠX›¯¯óŸ¹6ÕÝìì–½9}¹~Cwdn¡¡¥^—UÖb‰'2, ‚uû¶-†SK‰\ƒÇAp°»/&§§d)¡RY)`¼÷ÔØ‰‡íßv»sT*…B5•,G´³"· ã8æó»‹Õš™ãʘ±šKg3e«‰3ØM*BÇ‘ªÚ,\M‘ªlû¶þå±1ÎnËE’¾`À€Îr]­M­6£)—MèHÇ (W*MŠ"?·¸@ST!_P•3r™\Aáyše«¸Ü4]>}Òˆ—t±fÏÏ^?W(ÕJe•Ç% ƒÝC-pï ›œuCk×A ˆ’<9;g`(EÓuIªóyê¼^ŸßkâLO=ó, õÏ=ö鎖V€Žt]}©X^ß×vmaååwN&Êå½Mé ourÛ·­ûÖ÷~{väÚ襱X4/)µéåX.—g!Z‰vîÛúÒ›G–“ùJ$šÌUÌ$äÂi2¬íïqÙíëz»»Û[ƒ~/Ôr¥2’¥¹¥ÐJ4ËW.|ThèTY‚22ÚÜRu1»ÚæiœX=å46µ5õùÌmMM|ýSgJy–e8šN•+^ΰ03ÝÔÒäs›¬fs:™1Û¬¥\ÉÙÓ,f …RM”ÔT®žI’b5s•ª`ahW ¾»£9Q«è:Z×Ù.ñòÜòÒt]׆ I8lVEÓ$I4s´¬¨&Ž•e èˆ2[ídVÑJ}AOJÒO\MŒ®¦¯(’%3GÛYÊå²ÀÏ|ö“¼ Ð$½´¸|tôÚðšîLº°ÙŒg2Ñ4Ëæ®Í-žY¼ÿ®£™tWG[±T6qI‘¢(›ƒñDb%û`dòÈ ?ýú/*jUÑÝ3„îÞ`zfuh°eÏæÁË+íõóÓ+צ&såÒºfÀi. âÖÁžáõƒ’ ÈŠb7qF‹ DZº€¯¯«íîÃ{ÇÆ'Sù"GU•"|dŽºíàî3“³¸NåÂÂþùÛù„Pç¯ýè³n[ÃÚ¶nI’œn»ÝfµZ̉H¬TªB`8VÈ—=nûº¾¿Ç)#]É0€UÀ1qŠ$lfÀ™X`dVÃüäl_[[:[¯ •j¹B’$Hš¢šloo+×jð¢¢! ’àÒêEØÆº:‰b–W/Õ7ôi‚k¦òÅ|¹ZáE  ª¤FÜj'íË#;×Êj n¾aƒKRF«U«ÕÚZÛF®¯§sf~^àÖj>|ø¡ªíA_…¯ÝrÓ|î=ý½³)´º^üùí7ó$Æ>äIDAT6¬žYYúÝ÷¿‘/å.]ŸÈ•kgØ¿og"—ÿ‡‡n)¦Ò³áÄÂrâòäÒGo>ó?Ñf3Ruhóà©ñ¥\¹ÂÐT°Îmb&«¥¥µÁf³«@g(ze94ry¬±Þ7±Hënt¯,h ^‹|û‰Çî=|kc½éíß Ö·.®N8-u—çÞýÝßøóGŽzc[KSs}=BZ,›mliíi®ƒœ[ UD±³¹¾Zƒ‚P5à°©­1àsÛœ&Êâ'q¹Ùa…âÙL¡½%8;»ôÛEA]¿~ÝîMë&çæqDÒ,Y­”’©tµT–T€Áò¾íÛi ÿüƒOlÞlwz6 ôY^h÷5IÙ4ewÑŠ(Uå= …Æ/oß|ËöÞþ±úö¾µ›ñ†`ë@ÿN³8öïÿóëÕš™ŸÇu £h§ÁðÜ‹¯Ì.. i²ò«_þשñéÙ••͇ïÿÄç¿ù/?}&4&qE³ÑD”ÊN3³¶§ùð†. ^}ê»OüøÙ#W&/øÂÐÆ¾C»Ü÷åOò³…êhGÒƒ>‡­7À0hµYi’ –¤¹ªTªÉèJUƒ_¹vêÖÛøÍ?ß¹ç¶;ö=ðÐׯíùæ}Ÿº4·òÞé·YUïƒwF3üû¯>iµš~ÆÀ_ëèìŸÐTlxx]<¼|efšPdÖÈ\¸453‹Æc¤N^¸ T^’”RMš‹ç×uï}ðžŸþÖ]7ïÝ5<¸:¿¼mxýÿøþÁm”"3$Œ'KŸÿôc“KI¼ãÆGN\™[Môî]Wo2:Ú0Ø=ØÓ[øéÅÈj8l6°GNŸÝ±yãJ( ‡VæÃcÓ3M{wG«Ãn-Wª³S©#G.üçÏ~ñú»Ïd…ìc÷|:zÎB5H²ŒˆŽS·î?ðëgŽÞ~×6 é@×%¡‰¥t¹t•6¹ï¾õÀÀ@¿ßëmminlð“$! Õ¡þ>$ÉÉbBØ×Ùvöüµáþ#gðøÜІ>ùà]×&&‘Àcð9DžÇpb659Ÿ¹iûÖ¶Ám6ܤ\¹T°8]ÉÐêÄÜäÊÒuÆÛiuú„BÆmw×{êD^@•Z“¿iÿ¾½ýKñÕr±ü×·~¿ò•/ª>•ÎdrùR¡P­–MfÓå‹WÊ• MBAQ†z{Æ'§Qú÷~¯¥!@ZÝg/Ž"U•U$«jOGEoúêžQ tqb‰srA–¡IÝßèÿí§~÷Ô7O\»eß6Ý|ûƒ‘ù(o  •§<´oɰÑx*™L·¶^_(“»aãP!›ÿÍ«GMjny9ð•ùê@Og(œ 6*?òé='GÞûøÇžì ¿uâÙC[™OŸ §ç$I$(tmé½Ô’…Å‘K×±d¢R½ëÀîl¾ÚR﫯÷–JyHÒ ^Ë0FÎèv9[ÛÚ€¦ä ¥\¥<´¦aÙ­›‡ A YmVU–G.]U$‰µ˜;×t…VV ¦5ö %ÉN·ïò¹ók 5µp}|a®¹½ãÈÅ÷ÿë{ÿuþÄñúºŽþÖŽùT2”Œ>÷Öóc 3O|âQc0°ô·~öÕ;ï}Øo«ƒ_|òó$Ä©´ªª²À·µ·ù®sçN3 ¥ë*‚˜Ïî¼r}¼¥§#‰9rü•w?<0ÔuúÊAÀ/}û óW§¾ÿn‹Ñðïo½uõêôå‰e7^˜lí¬;úÑ¥Þ;ûnyðk?\] ÅçW’éôæ¾ÎMû·¦ÆÏÆò‚ÀÜ@!U°Z,N·ÕëpNL/4÷wþá÷¯°F¡¨D‹¥Z°¡Þl4ëU.äk‚R³Y'Gß¹:yÍçhð¹êIÕôôÛ r¹¨i¸·7@¯(J™š0ÔÝQ.U›ƒš¦\«Á`¨U*Á¦¤ë8ŽcÎ2Œ¬ª6‡Ýïóv¶68†¡¿ÏÃV“Éîr𕲨…¯sY€a˜®Ú¹ÃbÝæÝ³™ÜÚ®E‘¼N¯Ž´ltE®æ×nÜÕÛÝýÌkÏÒ wÓ†/¿ùb2V¨ÔÄã£'·öoøÂO4àk:uú £;øCG ~|föIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_band01.png0000644000000000000000000046520511722777314021046 0ustar rootroot‰PNG  IHDR,,ö" IDATxœ|¼I³­Éu¶öÞ™ù5§¹ýkê½W ªP($H‚+hI¤å‰#x±Gï?úöo»šùùÁìàx¾Þ­ÒØ/–ÍzÕujU=O)]]]åXBªÚuggfÛ~7ŸÏ‹yï·Û­ ž®3+¶ÀDDÓCU…šˆ0€ˆ˜™™§÷šÙôÐn½]”Ž›£~µs°oýÚ¯?úð#@@ЍÈr)â)FGLŽQ Ø`ˆŒ°± /ÆóÃêøû½ðÙO?µ¡‹«mÜnŽC»,Xú™ >'˦섄¢EÙêù|7æüà'?þÉçC¶ÖÍ[ßH!³ä Mãåììøðx9»ÿÎéÙÉÁý{guãÌJL£s사SÛívèúããcGüôéÓ¶©TµmÛÅbQbÚívιjÞš8u¹ùô'Ÿ½x~.ºÌ䄯±7ÒºnS¡¾‹ ?këÃY‡íf×§”ÄfŽ)÷}?¤ØuuÓ41ÆœsUUÞWW—UÕxJ))%3«ª&„PJafb7Í<3;çXrÇ0"O,BBŒ¢ˆ1-º™-o—™(Þ>ó¥­B"!5½7¯Ì¦f&"UU9çT€'³‚/ ž®¥ªfÄÌ!ïýtuçps9323OÏäœcÇqhz½*LŒ™Œˆˆ÷23%€˜V»áç?~ò,ƒŽ^½¾brLJf& "r îú!ÆÔ1ms°P1QUÕ¢¥ïûn³qŒ*8¥²ú]ßm·ÛXbÊÚÃrÄÐëõÚÌœ;´¬c7pÕ±½Œ÷Óå=ê®–sffºžöiÍl¿Àõ¿·æ’yšÊ›õ#³hŘªÐ¸Pa¡†¦‘ #5•sn»Ý0›Ía6ÛzÙXÎ)Ldâ ÌxYü|ûtÓǧw~øo¾·{qþñƒ´fË…g%-‚íÿV-©d£0™:C rgj0 žùøpþþÃwÞ{÷㣥cmgõÑé"ç\ˆÇuIcÔ>G‚¨j3‹7pR“PE%UªMú!¯×›¾ïC<¦0F¼YuqÌ0Vb˜c攓šX±±ÏÄµÒ§ËØ•4öcŠ1í.Äf–3r, %2 ,•rïø`UU!ª¼ˆ¨Q)Å (MUD»RR#9»^¨›­<ýøvìÃ( r1ƒ¦§¦UV3L?ß!¬˜Fdˆ@X-çB"¾r® ÓîrNb²i§‘LÏ›YÉÖ¶µ÷>çÜ÷㘆¶mg³YŒƒ©)¦Û@)%æ\Jx†4¤R ˜sp¡ª*¹Þ D$Ó»ÈÀdEA çMÒ6Æç—«TJ§’’9/@5›™ ³3òYyLvµÚ`$©œwðu]KN¹Ä‰,:«õv(I™£q´bŒ!C”TH,«™U¾vìE¤”â%˜t,³~),½]˜›yƒ±ýzÝzÙÍooba΀÷Þ9‚Žïž9œ ® L<±O9‘wÍ|É€ª2qµX¬òX¹† @z”ågŸ?}úòåöÕùærÓ½¾:ü«_ùJ#$Dj`ƒ¦ffj¥·]ìDd^ù“““»W»n—øÎ2´Ä˃£{g§÷ÎNÏNîœ-/Vç©ä®Û^nVêeÛíêù¦,Å}ŸŒ¼÷«]¿[ov»Ýéé³<Úm‡×ç«£c‰iÈ”™9Eì¶QÂ’ gµ’Ô 0Ó’B`ÍiÌe¨œ4¡Ë«n;‘¼¯ë:4 “R'’Rr,°’%5K¥äLNØû¢eÇù|9Ë‚ÂDL ÓTb¨ª 6l03̬”"×@¼YO&"51Õ)Ú^£ÓŒ)i¹yƘ&L@bÌP""öDÌLÂDTÌRJ"ÒÎ|ÎYUsE…ÈM1Ú”TK)EUN©”b1ƾTµM)¯¶»RJVP–œó¶ï‡!:çÒ˜ R;_Š–”æ‹“ÓV €Ýà³±áàC]±o’Q—´ŠÅU`s, çÜ´ÅärÖœµÆ7——õ&ÞgpÁ{/ìùøìt“÷•iÓ⥚5ĈqtÎåqTh]×AD–Ë%‹ˆ‘N‰û†]üRÞa)冄°ðÂÛis5RÕ”ÒÄTsÌ|µ¾dÐå‹WB¸ÿðT2ìºzÞ¡ËÙ;qDÑPb©*.DìꆡUÍ4ô§ßûG¿ÿüìõÓ'ÏžýÆ7å½;÷Óó òŒ×]µ Sfƒ#vÎ98"’œóØŬi88_WÕ0$‹ñxÞÌîŸ~ýk_=;=.%1Rнæ8ŒCIt¾ºâ:\n·U)%ÛÐmÕÃ`fËå2ç|¹êJÑËŸc¬ªª”ruq5ÑûÍæÊ«ªªªfNªù¼…I)VJb€aSZ!Ë1—˜ªÚ}L]$q³f^W–‹•\Xœs+™Oä-§!øjŸŠª' !ÔÎ)ŠÇÌ Ëb0(S†™E4%&‚° èPoöˆ Lf0~›!uOõ„x›[YfL"""Î9vÂÌ6 ˆ|åH¨¤œK.–s1" UÍYcŒã8–Rfí|µÞ àªÎfÞuCΗcÑs´BDÆ’R¹Únv»~¹8èwC)%1;=ªÖsµ‘PÙþÔö ÃHBÝΗ‹ÅÁ}lçsRà:ϳ0(šJvýn“ãã0«ªcïÁ3"aºzöLXß}ÿÝãÃù×¾þÑëõùU·qÁ›ð0&€šp-d"ðp‘‰Iæ’CBíëƒãcÊYDbŒS‚SUS%"0E§imöÌ4Qƒ•Ô‡†]X.—Þ‡sãëR¬¤B.€¤‹v±Þu]'ä¶ÝÅùË‹õ.ŸÝytÿî½8ŒUÛ¨}ÃJÌ̬)Ç1QÓ”dMS÷@~ÿ;ðOþÅÿý—ŸýÕó7ÏïŸÞ9>¹|yNÉÆ.ÅÚ÷1-}Ý6õåÕFÁí¬ÝcÝ6Þ³Å!h#½æ¾§‹Í}× ®?zÿ½_ùø½wÞ9½{‡ «8¤¬Û~X?~µºº™gÕ˜}Ù!¥j»-M}øêõHì7c,ègÃF¸\¼9ßœ_ö¥ËÇ~ ˆªÖ“Bs·Mc?†`ŽyšIçœærKZgU56ª¬°šc*EËHJxÀ3tŒ@ÕR(Ž8/U*ffDØR6-eJ,IÕhŸÒö,.SV…U¡r^rÎ1±¤P9""{Nh€k»Ëu ;j*ÅrV*ƒe @å³a"%[„¶&oªâ)›¶³Ùááaa¬V«>ÁI×÷>x®$j^o¶»ÝŽ˜ëÐÄ¡”¤¥˜ÈI‡ÁbÔÍ®ú”R2•œ»” ÀTù‹²ís,±’ÚמeL¡¬w…)$5¥ÊÑÂ…ŸF£#b#Q.%ÅÔŒÌòîòàèlQ‹Z­V‹ù¡‡ÛsÝMk·]oÒ·ëcm7›6„;ggZÆÙ¢ýð㯺 Þ{öÎ:y$ /K "S.rÎM\qÊT7ìÆ>!~K0§ßN·2­ë—.´P#¦ù| £a7^ «”JÌcìú1ç\Uõb±hÛùáA5Þ{çûï{ŪßôO†:øö䀙J™%1BÉÃ0.3ç=\ÇRñé¼ù/~÷ïüçÿÙßþø›«ÕñÁr³Fâù|^±3³¦iRª¶i›åÕv˜Íš~^<}ñàý‡ ÏŽÏšÙáÉ£÷e¾¸ùêÉÕ8¦ÝÐ÷cÞôݦNO,æ®ï·C2BÌšJq.¯79T3åâ;µØ­.·¹糺 ;B%@åHØW 61³ÉňÄ È…ƒ_à·×ebÓ ~‰˜L"ÇÌ&<Ñ”sd",“ûBlfj–sžÞÒ4³”RÎi3%#"ü,4Ã0Ü|ìu°5€úaç¼4•3â8vªZ·¾öUW%¨ª*ö®3[wö® CÿæM21Æ’Uw*T¶ýdöÄ’Ç1«êšânÈ)•SιdK©ô}ÇBˆQsÎ0VE)…ˆÉKs8Ã$…®‰ôŒ´kn¬0…)‘ÒÞ\¡[“6œ" ¢º®‹EÓl˜Y³ÞHßÛkáÎÏÏͨ»Ú4䈨mëL¥ò®™ÕÛÍ@N°sp)š-™ƒˆMHo¤ L\±I)out"ìDsU.¹{ç„]*{ñÁAü`·»˜@T‹1nwÝn·ëÒ("₪ö1¥œ£•¬%' "UÍIsÖyUgfuLÄ›*‹ˆPTXˆØP²PT'ÍÉ 0Y™%-Y‹™S§°‰ja&C™‚š¢”bªÙ{ß4  ›Í¦ñÁLðEiffnµZ´ÒÁñÑÑÁAUU¬V`6Ÿg”®†4fËJƒÁT‘JÙëf˜Š©•=öÀ¤03½^q3›Ôî[[ùvܽ}[·«£AÆe4!vt÷þƒw§~Áq9©læ›ãùòx¹Œ]/df¥Ý‡¾ÿñ×?ÎZ®vë!'…aÒÚj ³’®%&ù1qËɘºùãéºôG·jo#ô_»¡›‡ ò¡áBD4kfggg=º{ï¾wPÃ$ð (Ì`B hÕ‰sSõDÂ.,’©#VbÉ)C#Z‡:L¼È€NGæÀ‹ü/ÿY¿]ëžþÕgO¿øÕw?tQ׫ñôî¸pµåó‹XÍî½¾ì:3¬‘hÅÏJçK_‰?†ãÆÏìà >&b§°dfâ8T³¶öÍL™Ø‡z6/ª”RavÎvoÎ×W›èÜÂ/¤AºZmÇMí¼“/ÌJPV—3#WÚ×Képfd6i¯›é•)äÓ[dÞžyº.½Þ^†ilêÀ"fZr1À{/Ìñ3ÇD$ 6 uÕ¶-ÍýØíbÌ)%aLU8ã˜þú*4¥ e×QYýFÕçjÊv½î»A³UU`·ÛõýXL·]7¦H$!„1åí¶+¥_ŸžÙu (˜8ŠMt2ñ53(&€tz\˜™¨()XAPÔLA cP1Ê ƒPIuHq;öÇKaÞ[¢fM,ªZ#UÕ¢É{?ŸÏë:ŒCÏÌlüK@[Ñú™‡:£sî`¶Øm×WWWÆtrvêÛ0^ÄÄ…`1‘šDËÁõêcZx»±¹ˆHöõb¶k«™Ô-Öt‡bÔúÊ´ˆs÷NÎ>ùø“ãã¥ú>5@@Q ‚ˆ€ÜeV v0èÁÄM0 ¢…>uov«³ãÓŠ|h]2PÀM®Ð_n.ÿüG?}òâõîòÓõÓW¡`±8/¶CÔQyã›g/½ÿÁ¯|ó׊*BzËÍÑaÍf´oìå«ÕòèÎA;oOfmÝÎfDÔç˜R2q.ø˜³ >Dä›:çÆ!9‘ªÚŒã*„X,I°zQ|½+zÒ:nœ—âaç\)¥”ÂÁ‘w㘢J2%P.Pµ)ì،ɈÊÍŠcßú·õØ÷?yöüâjS·³ÚÏò0Z,PòÜ)!ÆØç¨ªUhr1v¾ l2(¡ibR#" $°™1““0y¯Sº7Ý—”„èºð$‰‹YRÝïAµ}éÁX÷U{S5!2ˆÂ†1m·ÛÓ£Sa5‚ª˜ØLAlDç(Å”RLQ5«ê0 á,ˆ~„{MX×uÒ¬i(ëXâéñqÝVE«º9YÌ3%d*à={QìËü×<æ-&ÔÝDÖ)¸NH»í¾L¢ñ¶&üB€¼ "-Ð2¯gwOŽ—0@5]ä:„ DÂ𞉠°œÔת<«dFa>»¸øþ÷¿ÿÞ{ïý_ÿ[t=ª(Ѓ*ð¿ýô‡ÿößýÙú“üûÿtxs^¹öÞɽzÄ›ótñ·~ãci<k¨ùïþûÿöч'™ ŒÀ øÞ/ÿøjåf|rçÍâøh±˜åœ©ë¸Ê‰Èz}ef:ö"rXWUÕš5¥ªv¡ò‚¼ZíÞ\öC¬ÙP×ܶÑw>£8QaLùTQP‰ú"‡WÝÿt­8b%r‚2ö~:ó5ýTú‘&‹ûf™ª0ïÀıUEÌ1F™jÚ" BLqèv)—ÕjÝo€œ»”ÒÔ¤B #ÙC‘›î™H”HØ'È›mÿ³g/½íaãê ^ ]Ž s†/¥ ƒ¸"pŠ(fÎ×bÆ,)¥œ3™’Au¯‡ qÎñ¦Ñ ìC úÔOd-OÎ"@*¼·.ˆo±<gTrL:¤¸ívªÇU˜a&7Þ/3DÄLÍÌ9*çü$<ù¯+/Bˆ›mU-rÛ匙///›:üƯÿæ¯~óëU]o·Û Ùlê 00Á{cÀn ïý_'œoràD\íºeév‚~û.-˜µõr1jD¶cªºœTssõ|QÏç  ¾É™k_±r.c2uÁCL5•LÁÕÆ!+ŠˆgæRŠ]·o0³£I§Á Ê¤BçƒT•ÈyïÉ,Æ|™ÕZÎ9{ï˜9¥4Á¦©E\ÎÙÞûRʶ½ß4Ãj]וíàêzÓÃç²]w1&*j1m‡-füìÕ«íz5oÚÒmkïæ‹;ý¶[¼k¼¯œU5[Pˆ¸YÌfgG§W—»ínû!+ç1W⼈gVu޲æDÊÌìˆÍ™Y*“]$.ȵC!€MíTR9CQv ‹@U•Œ,+ƒ<ÄÌ,3šÊ0!%*T" ƒ‘Ácöž„ŒêzÖ¶­«¼Zu¼˜¯û]I‰AiŒÁy$ñ6Cj„¬ß T²í®º<^t—Õ©s 2©3À Šº2¨Ë.€…ËË˪ ÷¾sçþº®‡2朧}ß·yíZÑÝd°Ç¥”·Í¬·뽇™šíMÓkæUÕ\ij›:! iŒ»Ýhf‡‡‡HAp]´Áß4nªP·: @L9; Vk›6‹oëvÈý* Ð&0µÄó:Ì|uïä0,g‹£ãeªããã¯}ãã“»÷ »Oþƒ¿úéÇßø(aq¸‰cOÚ@ '§÷?ø`vxVqxï‡Ó~ߤ²î‡¡¤”Óù6ÅûqÓpy~ñB2ƒ4ç/Þ|òÕOŽ–M]=pL§‹J‡óþ|(£S&²%b/dÖÌ0#°)3Ì O¥ ìëSo—¸ZÙgÇD•R:Ô¾¢¾ï¯®®B_ˆd¤ˆ¤”w]7¢„º½Ü¬û!÷)cÕvÓo·ÛnÛ—R‰œsq̋՜ Ôàˆ›P-æóÝnCjÓ€í?s.›¥”JÑ©54¥Äpl“Ô!ž6Š©™ˆ(í#ûuó7¸6uZ÷}‡v›¡ÐuùŽˆØ ª“&¤[ûhoCˆÐ$´'¯ïf¨ñTß³}Jœ.1ÆœR™vû[ÅÌÄfE FEœkš¦m*/.ç –‰6cêô42 ¥nL¨OÝzHqxðþƒ¯㓇ï>òAÖ«˜†ÑC {N}}ÇD¸ù즬y­ o§Ýiv¦³{^2ª{½§@ˆˆgZ‰É™-—Ë?üð`ûÊä „)òTc°EúWßýWÏ?ýÙÃùá»g÷1jJ¥¾ö¼º¼²ÃåApìÀËy³lgÁKIùôxÙ¶í¬iæóùò`~ÿÑÙUÜúł糧ëõ„,ßy¸`ô€¿Ö„WÛ­¯ª1ÅçOŸÞ UeüæòêùëW]Î|{x8j¾\_Õí¼‰¹nf!„aÜúv}غ>ù „ûífÞÝ®vû«ùÙá,»6PÍdâX<µE-C„%‹0ŒM”`B™áœ0»"X=r¡¡uïÃz“Ö»BݳŽã8-Vß÷›í¶/©jgën—²¥¢YYª°Ýô»ÝnìF"ªw,óšC€Æ„ÍÖ+q¢ˆ¥h6˜yòÙw7@€XrJi!Î{ ÆòÛþík_DÁ2n 7}Õ=!#Êo÷!‰ömnÌLjûƺɸºÞŸÓþo‹7™™å@ Å4•Ü ý˜ª¢L¤“í qTÌÔŠ™ªsB0Cö ÇDT˜¢7smŽES,wÞûàã÷ßý껳Ãv×oû±Ë9ÄÈ`F7-ð×1¡dý¥™ð6Nn'®© }Ÿ'Π¦ª•ŽÅñþ Š‰j‡‡‡wN?ùä8fã/¶w|„|B{›&Àÿ›ïÿɫǿýkßú­>éV›QóéÑ!úõfNNNÞÿ}†îv;ç)„PU~†ÃÃ%µ2ŸWõ, 6©¬rë˜ô³ŸÿÖú­ì ^_ _¿Ð*l†ñ|ÓýÅ_þt6›ž6ÍìU¼œùźô€æ2kšæôøt·Ùø¼û¾²œ×/_,æ³ÅùÅËÏûñ+w¿úÞ0V—n1k‡ ¼<ž÷÷Nouru%5“e( {_¸L`Hyj§43Üèm%S&ƒ•lr]Ì?ýÅÓœÕûj½^䪪ݮ‡ñÔç”sf3Ã°Û cÉÍÈ»1I!)™ˆÅͪCÖ^˜ƒ8fö¡ö•W$ͪÕ4+ 4çnÓ÷M'Äl„¢Ä2õ_˾ÍÄÈ¥H¨æóyUUºˆÉ̲)k±k=¦°Röew#&~{ºMU‰@4©yKÐÚÐÜö& ì¥ã”ßnv¯ªÒuª tÝé6͘T˜Ø`„Æ2¤s)¦Ì ãɆÙ'!ƒ€Š–±Š&G°RˆMÈ„8[&c’s^ͱµó¾p IDAT'ó‡ïÝ}ðÑéÃî·í»u¿Í%‘ï½e¬àí%58"¼…Ä ¿”±ïu‚cÞw†Ñtë0BìÄ;,哱,rtpxvpÂm}Óz¥ªìÿÛGØ ‡†H{ëòüòüh6¿¿Xœx7«‚µí;÷ÏÊŠWHÝûæ7>Žy|ùòe´LD1§`")¥nìÈ™Rv!ôêP±oë?ûÁþéÇÌ‘q¹Ùþðç?%'# Äýf÷ɇܽ÷ÀÌÝ×?þpsµÉ93KI9„úùçÛ³û‡ëkï‡g\æmxpgùrVº{ÿÁÝ…ÇÅz[úÝhãúòMêûù|ÆãŽXDÄ„-礪©ÄT!*v1gŒc&2«*'†™™üDR4¥Ñ,A«óÝ~¶ÙlŽî ÃÐw©®‚¤4e‘º!„¢l\9ª„ªBHРžÌÌHóä´¨d0©æbާP+†É1¦˜Cå‰Ôl¿×ßf˜¢*†àüÑò`±X8y½gF†RJR›ÔÄDí¦zK MþÇMÿãMÒôohŸ¼U»é7‚NÎ aïíïAhf9gï½c6‚™pQíKJYËõÇM·‘sVÀùKJ1‰çY[·u‡ä©fbLILçÈŠ««r0oÏî}ã×¾>; õ< iÈ}ÆHD•xï|Ê0×'ÁÞbì ¿$¿ôÃD_¯cÌþå+p"Ž%[ž:= „¼÷gggS1¾øù¿d€}TEá}åàÿãú£Orçîq#4n/kqTQIÝóçO_>yÌ•|ðáû£¦U·Q˜ˆ#c‹%ÇœTbê‹6õâr3Ô•{øðgÏžüá}§Y/Ïyÿƒ‰™+v.¼¾8?:œž©I #ǰ\JQ³0c‡óó7¾ªfÌb*u3+¹7X‰*rV30;OìX29!&Õ’ ³ŠS’RÄ‘˜B³)MNH)2æ2ŒiVÕÁ·–bVc',b %-xÚ–‹03ˆ¦iÚ¶eæœ2WLJj–¡“#”>÷ 7SÖ3LÇ€§$R˜ÙØ”×¾àmèÒ­:ÙMÏç¾Æ˜î¥âÍ˧÷S³¢ê˜Á¤@Ñ’'¿’˜°ïª2gÌ™™=ÃsNU=;9:<8XÅ'/_í†>ç|¸XÂL`³º99(š¥r`\ƒ¿ô 7)•Í 1¢­{Æìþì?üÉþýø»_ýx!NˆVž:ïÙ-ß\ ¯Ötý篷¿÷ýÑv½ã4Œ«óõ;wï ›~6¯?úð½8Oï<8}pçp;Œ‹ùüòjç`wgyóêåOÿ|y|f\m·»Wç8kúüÙãüû¿8hwcœœþôÏp~~®crÄøÂ¨&Q+¯/W¥Ûž¯./µ Û]îw?{ùÌ-¸ò‚~8??ßm6ffEcŒ¯«Ê{ÏN†±œïÒ0 ͬ=:8ª¥Š}ªÚ%—c¯ª1'f.) ‘88c)¥XÆÐ'–ðèởýüéêr «W—CÓ4õ,ìºu۶ð‡q6[¹8æ*xWZM*…Ò®0³°OC E={TQcjàŒ½héûÚ××)g‘ÙxÕ‡ã*2fˆo²Z)‚‹šÀêjš·Ms¸û»OŸœ|–úÐRS·$< c33 |±bÞ;爬”B–XÎÙ‹MMdÃ0älÝ®'SŒÞW!„=±T CBÍ,윈“sžÍáj§¥X@ȸ‹ÎQ¨+UU‚¨°«Ûƒ%‰ˆs`vUäe=:·µ¦hŠY-9»íæp9¯Z×#3 {ý†J¾ß¬îÐn°õªçbmUšÙÑárY9÷½ïýiß÷ÙJÉùW>ùÚb6SÕqE¤®kò""CŒ˜¾?ã†vEÕ‘Ã/oÅî­ iö¶MÏá¯ÁB0µ#©6M#r7L­É¸1Z¯óÛu_ãõ¸äÎàAPC&€Ç¿÷èݳ³3MÃtö?Æxuµ¾8_‰ yÈÏŸ½Z¯Öë«E=oëZ³½zyaI·Û­c99>|ððn]5…øâÕEÉc[ÑÁ¼Z¯wÏ~ñ“ó—ÏIê Z]­Bí¶Wžá+kJùãÿçŸmw})¶lfó¦í ¹‘˸٠•ZxjXÒ˜œ“¶­Ÿ?NŽKJý®ÓRjˆÁjŽØØ¨b×Öµ…Pq¥@jÑŠYŒ1Æxml”é@™Š©ª³L§Ëù‹‹‹õz}uÕUaÞ4­ˆŒãÈÌ¥¤Éá0+D{öõ–ª}qL‰å¶G²_K C)1'&®ëš„†a(¦ªdxÛ¾oVTi¢yÓwžLüÍOE‚\TuÊi´?¿ÊP%_À3föÞyb¨*ŠfT”qÐÄc—LÙ a櫪¨n¶›£c6³Æ…}C¥HÕ„ÙlÆDqÌß¹§¼™õýÎ̦æXœsS³‘¢xÏMS5¡f½÷u4Ç¡˜«›ª®BÎqšç„ ä„EÚ¦²kWÏí²nïN³e[Ӝܟüë?sF]×,îœ2 9+¦JO­º“½ùÿtˆŸö_õKÆnµ‰ÞHÛé9§k¹G]ƒ–`LÌçœ3ö µm q ÞáÛ;áv™õöîH Á0±ä ÈÀ³'OSJóùÜYûsº¼Ú¬vCÎfB›7u0Q¥a‰ºÝ¶ ã‹g¯^=¼è6Cãæ"RŽ–Õ¼ö«×³îêbõüçU˜{W+#ovT{ï}½»ò^æ} †퓾;??ßœ¿îÙkLc‘Š•ÔøÊf5|H±Ë1-fMðG¬ªIuLTtòZHMÁMTQܼjœˆ-e5cÚŸ@5³”RŒQU«ªÊqˆ%¸éµ(¥L(Í9öÃnG×¶9çGçyGbe¡ãD™†±sÞã–οÿ·ýÉ·.%@ä„©ällUUUža)–¨ZŠ–À g3-%å!ç”JŽI3$ŽãtŸû¦p橬'$ Õ¢ªâ¬YKŒñððP³}ò®MÑ6›Ý¬‹ó…(›–±ˆÈbyÂÌÍ9{'̬šÕ”ECÅDsñ òÒ4ADÆšÔAT•UUÕXñÞ/óżUÍ‹¦.%¯R,%%ØÔ$Ïàé ¦„¸0 ‹ˆÌªzÑÔ©ÈÒñaųPÎüèÞü`vê.^­ñ/϶¯Ÿ½¼w÷Œäœ'§§äc”:L…Â) ÑMP¯Å¢}Ñ݇Ï[n …‘N˜¼>È{ÝÌ^ûP‡:wÃ8Ž%é<Ô'''{?fëÔJMÞΊÞU£p2ðÃÏüï|‡s„j¨)E-ã8öqôT?þü«‹­{®´ð6Ž:XðÞ»¦Æ¡¼zþú³¿ú¬¿\7r|:g‘nÛ=©Ô¥NT—Mp‚4fÒÞ'ñðƒ¨´Ñ2ɉ³Wýz|ùtèÇà*/Á‰¯g_5.Ôž•¢™JJQ‡žkï$3o6‰R‚UÂ~$B#æ±ä¡ïªPcª¾UUMõnfU3XI'éÍ<}ë]­.˜qvv¶Ûæ¢9åÑÌD„HsŽ¡òιhÑ9Bˆ1C®gÛº;L‚¼Å$®½3Ïu ,TH¼÷ÁkTK6 ûž²kF0³Ê9ƒ‰œ‘ÅbqçôìÍÅÊnªv× '"f#ÓI’AÄHE£ó~~|¼íi[‚é˜ÃÁ2ÅBBžHU÷‹yí½'L¼Z½÷Vâ8Ž!¸ù¢b2Gùêê*¸ÿŸ­7é•-[ÎâYÍn²=í½·êÖ­*Ö{Ô#mR %Q‚a@² Ð  h&0à‰‡†þüh`B†<°lÃ’,ˆMÐ ‰ùH¾W¯šÛŸ&3w³ºVæ¹§ŠÜƒ‹ÞínîîoßÝNûqðV’”’Zo©i|Ýj¬õ%N¯¾yýÇÞyKÏ_¿tÖÄKš§0ô­»º¸V‰MÓ0–“ö½w–ÓÂ}|½eæífµZ­SÓ4]ëTÕ°Zk—}S¬e×´êý4“hŠq )bUʵD? øE¤:ÄMc©³Ÿ<»úÅ/^\_®7‹fÙYF0­õœµq¾õÍÇOŸoÏÆyÚó>”\T‰‰¼M9׬áç÷/ƒ*¨Ô½ð;T;9šë1üÞÀ¿9¢Âõ'fJ)Å9AÌëåfÕ.–Ë%7þƒáÉÉÚŽ+à{Õ TÉ­žyù“ŸüÑ¢íÎ6Cl™Tq? ã8‘q‡”º¥";g½Ó"Ö:T(¥XK‚xØíRœ¯Î/>ùä“/ßémµÞ{oU2”’¦Ñ9gޤ$¶Õ²*ÁçŸ>¿Ùöw·)i㹊MF‰ÞxÑœRaoÑ#’S 3§ªÙ¥%ç Ì• £ LÆZ6dHS,\)"P Xšçùæææææf½Z½‡ê±gUV«¥NsÓ49g)À NiN  ›cpÓ¶Þ{OD®ñSžµòZN‰ €œ™B$H㤀 ŠU@„bNˆ [SrE@éH@#,E£Žh=#JÊZä(Zvª.PÕ³A‚¢ª É !^®{ësÆ›Òf½Xm:O›pØ]®3–âúvI€¾1O¯Ÿ”45Þ[K@X¼÷­oªP`)Å{Û4hafDçùâlUJ¢œKN)åÂÀp{ûv7Œ! !Íw»F»èúֵȈH,Àl$×àZƧg ³é½a 1¾½_½ïw·UÄ5cœÇqç©êvI)ZЂ֯ÈS÷ ¨û¦¾_·{Ø/ï‘ß;á±Ö‡‡DÀ€DdO8÷Š~ø–úc5õï~5! p‘ € `ñ÷ÿð'ÿøÿãyž½÷)%kXм{÷îþþ^K)ã~çÁ£¢”4MS‰eµZ¥;ršRØ,W={ÒwÝø²ÐBõÙùöìêîÝû$…¬)P¨òó©H‰Z„[.T†8†¹(‹žÐ3™TŠ!FVDÍ9‘*¢*¡7¾(‚*˜ª° ¥Ûü˜Ð01±ʆª²+žt}Â0(÷÷÷P¹#µeàxˆª"SÛ¶µþd­1³±Î¨¦RQ[$Sˆ)ç‘}·ü8-|p‰ä­H.D ª"š KŒ³BGd h‘$"¤D–ÙZU%æ $ƺ¶[¯×}ßO·w•f\ Ô†˜ˆ(Ia2H@¬á¶q3ˆúñÇO†a@5Íbéúúl¹\ú§gRÂjÑ×Võç}ÔzŸó|¶Þ+0C㜩•@c¬s!ÅažÑ¬%í˜C ‡])¥€¨ê8Žó<;ç–¥¤’U‹o¸[v1F-hœ5Þ•XjKG%0ƒªAj w+›RÉaøê«/ ’2Ma~{c±¨:gDòË—/ûu'¢Â«Lž"BLÕö°-8V I¿|~ï_8E¤ð!…;þˆÇªN×4­ïÊ ¢ Çëd{pªTê#S|x_`šgÛ9°` çü£ýèòübº¿?"ò4M4çòúÝÛífc…½÷5ïDãLe0æœ\)%çÜ4®±îææ&9L1ÆÜ.–MßÅW¯tÑ÷1ÍX²dc¨(Æ$bÑ2{×0û®cu%€ÃØyï¼QMY„TÇÞ»)•”E‹Xfc1Ê5ºÊÆ*åÄ¥$k­÷^˜4ô#«V2W!QU ¦ÝngûÅöl³Ù¬‡CôÞ–âºn$MÓÌó!ç\ËnÃ0Q`z(Ï>~ UVïáÓPH)¤TXɲS)%%ÅTqÚ£çxl[¯Ê1Ö¹‚,@îÔÇPƒjÑ£  21ªÎól-7Þxßô‹v³Y®Wu¼]/nÉ\œ¯À ­×ëSÛúË'Û³óÍ<Ž1Æõj!)Çè¯ÏÏsŽaœTËÂDMsr‰ã< àιzsÉ1Ìoß½afWË×9 Ó˜´ØèÇy†a·Ûå}cA ŒãHhUE*ëEÄ‚ˆE9¤ˆHMÈjÍ>Å¥ñq˜¿ýé·çK¿u³<ß.—‹ARÎÂhKHÞ‚#ÿ»²†+æ†E4=Jÿ©Ã*Êø¡Dñð|T•µ¢Í(ª`¸Ê昼u†™¤ÜÞÝ܇ôùóýÙÂ=”„ÎÜCaZ6à HÊ ùvÿî|¹ `n:ê‡XŒiÇ»ÛÕfÝ€üùþð¯þÍ¿ø/ï÷¶¯ta»r7ŽSg¦€ï_¾Ù°Uon˜ ‹ÆÄ˜¡µoeÊNÙúÞû¾[­¿}û¦@IRv Ãî~ßÁ±à)Ä€%eð@qJÃu»®¯ÞÞÜ«F ’´·qÐl½u (Î¥öo×Ì1ˆd™ÂlÁ0s޹avÎIóx01E {Dò‹i`k˜mNÉ­¯|ï¾Ùí/v·g«6”\R 4"`ÐÅDÂzuQbVaç«Ë’‚·ŽQ7ëí8‡ Ð÷«æwß¼\¹Æ[ÇÆPÝ©k}ˆ™Ù(PÉ(†=‰ˆ73¬–>ÅÈhY!•Ô.ÖÀ‹¢Ý0 ‰%("Ñ5H˜YPÑ„©õÆ7¼:_.Ö«Å,}³ “¬Ú%hÐ!ž_,ç´ï]×XÓ-›Ë˳O>½~úôÒ¶ã´Þ,—ËÏåp8¨bß-qÇ'=jPJÖik ¾~÷MÝÎRJïv7ªZ…pò.Š#!ÓbMR*…!EÈzØIÊ9É2Þ »Wã¤9”’cÑd (UU È$Œ†sIÆZtn,%²E4±¤y?Wš.Lɪ\˜ÚÖ‘sŽZ^¾zõä“§J{ï(ŸH@ÉØÃñg†“øÇ'ãi¨‹â±÷OZ‰0MSR¬ðCåËB¿¼9“û?o^_Ÿ¹" »qÞßÝÞ¼d‡ý/½x ùïü—ÿÅíÍøŸýÚí¹ÐñóëËßúÏÿÞz¹µL„”‡!\^\²;„cÇÀœ†aè°?^§UäN=ÂPJ’áÇ/>ùÅ_ü¢îv»”BÚ"&!"꺮m["’ü!Dz ÏÏϱ|ýí7Z YgÙ Š5.îÇJßP-€JŒÎïíœæ¶ó ”ç@DT´­®©”ÌG{`fšË^ÒœµÈ²m}×:+)j±¨Tð„&"HÊažGkM×7»ÃâäË9"ä³õÊZ³´Ž¼0ëõ2NaÞ,9PΩ꯰µŽƒX f¢1ÌÃúé¿þ“ýð³ À@ÏŸ}ÚÚß›¦ˆ±ì÷‡qš#I 9„0OqÑöÇëWQTpl0Á<ÏûñðÃ_|quuq˜Sœ`†¦i[ÛzkWýÂ{/©¨*Õl¨´/dE!,)wMã½µ–»å•ïoöI¢%*DHŒ†Á’],Û媷…·Ûõ4…›i&BÍ’kìQô8ýÆ9×A‡ˆªØº6ç²QRq„ŒPrÔU<©¨AÖl Xƒ iµl/Ï7ß¾z3 ÷Mãæ8š~µˆóè\c{»Ës\¬i­ï˜1ƈo\kÑ;Øï÷!å¾[®ú…vTË‹¶CËEˆÁ“!.ý¢³ £¢óD„­· UrÐÂ)a)qÎavÖoýªó(@ÖHžTpÑÙíêìßþñŸÛ¬»O?ùèãŸu½óÞù†ÆKžmÃŒâØš¾K)• !‡œå0î»®+¥LÓ$2äœëÈŠ9×Nâc_p}J¥bIRÞßîæ¼÷Eu·Û1ß""–R$—R "b™'ClŒñlŽî¥:¡"Ç9%¥T䢔RR"Õ£ÔòÉ'!‚ÆùÕ²ûôÓO?ý…ÏÇ_îJe*ø66`íï( UÂð»}"ó„ÇFˆ§ÀZ[Kÿz’'ÂÚ|ÅÌÌÖX™#yï%Í`Éþýú;0| ¯¾‚q€ˆr?”²ã7_?¿üËÏ×pÿ ¯Wvµ<è4 ‡Õð;ÿøÍÿøo´ðïþ;ã÷ÿÅ¿º½¹oѨ¢7>a1h,»ÖwŠˆµcôÈ™dE‰¡á§]c¿{ÿ&„Ét ­oZßVÖ¿ !xck°@ÇÆKBØíïDQr‰s芢)%‹Ö‡¤†Ô$ï]ã–Û~¹]˜HËe8‡1Æ‚AÔ¦q%%$­þMc,3£‰!K£„çyT£FJBËH@¨Š  ‚  3äÔ/–çÛH†aµZ¥”.Ï7WWWïß¾6Æ¡µãaȹ±k¬W`Ö¾ï‰!„pq¾-f «¾Y¯WD$ˆ%ËäœéºnÕÙ¶mW]ŸKØ,V›íª³~¸}ûö¥J±þŒÙ1š ˆrÊyž<Û¾u—›å8äž<í»®±fÙà ÂW IDATycõÓO/ùG_\^lšÖì÷ûýþöþ^Óýííív»u¶qmÃäJÊÃ0í㜢*PŒñp8Ôpº¶Õßïu.C­ÄThŒ³lǘcŒÓœæ9†‹À4¥R"âRËÄÌ„g r„(Žü[UF>:)8–ʳˆ*J)DG^úƒ‘©d T5Ì‹õÊz—sPdFÃÀGE€jXÕâ©é(1û]§÷§kƒPMUé&ê „U±[ŠT ªa)O÷ûå'ÝÙù9XÛ"u@o¾z¦¿ð‹³ÏLßuÓÝëoþÅ?û¿ÿ£¿õŸvAί.ÈN¦k§iúöõ·‡t 0§øõ«—v —‹µq sŽC¸»¹îöĘ%"( ()d‹S cÛÆ/ž^~ñÅç«UÿòýÏÇñ°X¬ sÛ¶­õË~ÑúfgÍŒ­wNRmÏa&@V(‡ÃAù}ç–†xÙö˜„P˜Ñyv½ë—ÍrÙ¶­™Rž§yÓh]oØ) * ˜Ù9gŒiÛFD Œˆ˜sœÂ,œs4ŒÃ8–Î/äôÑòAp¹ä,aj—ëe¿ðg±Þ1[ÛxDŒYr i˜ïÞß)‰Pò‘­cGØ6nÑ6 YâÌš®Ï×í3ï½sš¦aÙ-ÎÏ/³ ]׬×KU]¯ÛíV¥,—ËóÍV‹¼~óòõ˯w»¦\À(³jí—€TJ ØÄÎ@oùýýK8_Ÿ¯Î./·¿òK¿h¬ û»íÖW¦y¾»8ìqŽ!„ðþÝ­µÞ6žÐ¦”¦)ŒS¹â0†c- D¤bÂu”PŠ+ÙÚpq6ßÝrÎ9çaŠ36Þ™bÐq¢vMƒ*UJD‹ˆÂ‰µê,ÖAx”ÊýnœXƒˆ¹NfRuÎ݇Ã8 ‘Ð"šJ±Äz"¬¤¬>½!NVþ”Èo=Ó9WÃQ@ª9Ç´èzç\$9ד­4¯Çð¾ó×W?„o&˰÷_ÎÓ"¤U÷tÚ \ò­žÇé6òÙªµ¯üîæíí—~öò§m?›®Ö׿þ¿þ¿ý÷ÿpa›•o¥À¸vï÷y*=µÀF ªð !# ®m,Ò4íŸ>=¿¾¾DR1–rLª%åê ïowŽMEÒQ*%¨æˆ Åûæêüìl»É‚*Rë'þº8v‹Î-­oH!Y‡¥$kÍf³²ÖjÔ”Â>Içï}Ó4MÓ´mBÈšK)I1eA$ïš!—ÃRÌ%ÄœEÈ€Ñ|lh*¢Qi¹\]l®vc\.¶–]Û˜iŠ9kšãa?îG¨¤aƒiÙ6mç]Û/ZD‰ë– 7M³Ù®–Ë¥![Jišf±èúeÛv¾õnG߸¾ïs˜»®s΀¤¥wHX¬)åTÐU@°Ä‰D BçÜfÙʳ‹g×›O>ºØn—WËÕÊ¿y#¯Þ¼$¢œe†ÚlRžƒóÌœônH)å|T:ýa`¶ã8ŽãXçvU ¬"¢d¥ãÀP†Ý<Ï Ú8GŠ$j‰;ßJ¥yUvW­Ô!ª!ZPŽž©* XJQPá(’‘!|Y̓0’‹ zï7›ÍÙåÅÃaѰ „”¨Ž$†ïB/õ>R²xpw@ÑS€ª'ÒZwÎ¥¨jaXÏ©™¡÷~µí¹("B)sŒg]ÇÿæŸý“³Ÿ•.\šå™m>Únâts±é6Mãÿ½¿ô«¥èßúë¿Ù ]nºqwÿüéµ]šRV(ýù‚c[ïênS`é×›ëaèØµJ€ È„†UsJ›åŠP_¾ü&†©i|‘q炎Mã|Œ±é,V¡GÜZ Ô0ßõWWWOŸÞ½y 0L³ó-²AçM¿hú…'³ÄÆš1Ä®kccHcšˆHr&"U‰1ˆU©HC…¾ÉxDÎC‘‚Ä sH‡9„˜Ù((Á Dh 3Rò¶Y,–‡é~šxöν}s[¢æ a–Î¯Ðø¾k–-^œ­®¯ÎÖë•÷Ö:ìÛÆ{k ˆˆwv½^ŸŸŸ÷}9gÄb­U(oß‘l!%ëœc,âœÓ”âÀ„Lꘌ䢥œ8¢ØZ»êÚ'Û_ùÑŸ{zuýѳ'lò·_ÿÑM÷S˜Ù´R!æÓ¨³êÄ’¨÷¾ˆ‡:fã§1µ®Í©@DTDÔˆhÉ‚Ì ¤Ì¦¥Š™ëè]’‚ÀÆYCl §‰‰ÑAX¤µAOäDÈ •EA kB'€Bh™µ)G§ TDĤ”ZÛ¬—«§OžlÏÏÆ<ó¤t”¬·wâôT·ý^²GJǃ‰?œÿp‚1¦–Œêë¦iŽ 0â4M˜eÙvRæÆ€æoÏL÷;ÿíýþçô?øõçgOðödóõŸüáÇŸrëÊôßý7ÿUc-4wÓ°j7)Ïdšä YßßÞ’œóanoïß¿yÿþõ».óÆ¯ˆÌ±ëŽYç:ìïïÏ—«å²ÿøãgÞ»W¯^iGžÐ:ÇQ£4uÜtŒÒ´xbE>ÞäÔ‹xœ®øÀêñkL§ñ"U%+`k-"’h™fpDyž;ßbÈq‚Ü;Ê$)—Â[ÞÇýßý÷ÿÈšµ.¿øl€\2‰¶tI“E[tºh À Îp0ÀK0„wøÍÏòõÕ¯0†w?}¥¯ïŸ5Kki9„‚ X”–]óúÛŸ}ôìüêbÙw¬¸”}$Cs±)D(9Ä2.–.•±%S óu´2³Q,%ì#ÈÔ%X“á9fɸ´DÆ aéÎ7vÑ%“k^ïî¤éÞÒ4S¼ÝGoÛÕb1ÜÌj3Ó šD‹Ú‹íEQ|ûú¥A+’¹c³´™f¢fµê[oÝv›| ¦iRIÌelC€ÓзþÓçWoÞ¼9ìv«m—²¶ë^¸k}³Xæ‹ë³~ñâ“7ÖàzëÏÎJBð-vIAÆÃ˜b`æË›û»œ©7©`É †4v!´q÷ãôòÝîêÙs2 ‚œ/×ûý€Ì`Y§Î-›¶KÅ,VSÐo_½C¤›ûùë—üþý^ÕNYÓœbÈcL.…ÙZÃqŽ îp?ÕD ¡–"Y5]×1&EÂ,ZEÓb†¥cLC &f^ZVm$—”"”Q#ZaËA“ˆc›¦±lRJªBdsD¢ªL% Lp €RgQ©$aÄ`£#”’Ùcò0ú¾5ëõ:ÏÔ-úÅzB˜çZÍÇc”Hôã=öuÇãèöá·Úß;rÎU¹Æåï;ksÎõÍyž›ë™‰Ñì¦û¦iT $È¢’R„ÆuxHÓÂu„œAG߇v¹PfÿäÿøßÿÇÿõÇ}dèû&2ìJ äE¦ÁÛ¦¢X±4’ajÛöââb³Ù”’ÇñR"ýþü0kmÓ4šŒäZÏ1(E0–È¡°c4¤ ‘ »¶Y÷ ïÍz½EÔ#‚JHªSžç!ˆÎ»Áwh{l5h¬êÂ·Ì L3dØ?½$(*Ùc­}r½Y,çÛeÛ41Nçç[k`¸ã'MyšB§Eß(¥l¨õÞ¯–=·Þ||ñsÛÆ\]l//·Ï?}þƒ_øôì¢Ó¨ÎÙ¨ ’Æ’÷ãðêíÑ’A”-±µ6¦r”W’s.šQ„·7_M1܆” ³G°dØê£ÆöZH¨”šòÕl%„Pq&Ià(…F屓>¡hÍ Ò±¢&ÇNÄ£ j(zÔl¨ß^ÁMFr•Á¯ªªEUré»6笋ä¢93"s1†k_U /½¯RU¹?`–D$`Ñ9Sr6ƶ¦m;+’½4Ûó3ssó.‡ÃóWŸ}ö™¶ìgŸUTOj§¥,¾>Ž<áD´ÿNyZ¸GñS¦1›ªˆÜßß__\NÓÙl6›/¿üò÷/ÿ—þÜ/)è4Ëvùîî]HÑ{OÆí÷{åZYáÅ‚DñŸþÓ>Åp±=+qšc°«þ/üµ¿âaÙ|ýööíÍ-¼|ýêæ7”y–¼ì›v±d ")Ûêd¦iôüü|»Ý¦”æy®Cë´èÍ >˶mÓôÔ“õjW6¢ eã°í½ïLX´®I%*€õ”RPçóþÕnžBßu­oØw=;.bŠÄy¯9÷‹v¹ìDQ›ÖºíùGÏÎS•êÛu·=[õ‹»Û÷w÷ïÃ4/º®i:Í%ç$j2@bàÖºd&+Ñè´Yöënqu±ýìÓ¯®ÏûM·ZYïhžÊ4Í)…BBHS az÷îs¤¤™¹oZ=Œã!cÍsH! ˆ»i˜S̪Rа@bö)gx@ÕqÖ0 CÝúkeNžàôŒ¾ßÃQ zˆÇ‰GTÛºŽUG'×âøQò#¢B)*Çæ¿z=¥®éUÊTk ŠD¤†´Pá¶BDl,…œs:6}˜Æ Ì(êZcƒB:—0Žãa<ؾ5‡qp¤mßø¶Iü¡K¥:w©ó'ŽÑð :Yãc-™ïy 5fUT‹èÃTŒ¾ï¯®/6ÛÕýp£ªÖÚ,©Z œÒ`çœ÷>ŒÓ±ÙOãߎû«¤R’mºÅ²ë–ÝœF2h½+Qb‘’uš"²à8ÎÃÍPæ´tÍÓõÙz½ÖœŒ1]ëK)‡ÝsîüülµZ!©sn±è¬åŦeF©jBË…s®^áÅöŒ€þðõëŸýtŽ¡õÞÙÆ0¦Dˆ JVè KãV­õ”?ºÞüà“gÏž^]?ÙZG÷ãîÍë÷Ixç$Å{O†Cs ˆ8Lc¥ž¤9€è ‘–2ÎùÍͽwC–˜â­!ÃhÍëŒ3ŒR0£@Uý.µ†PPİ!À’ ŠÖô›êÜ£StV)UkN󉊀'8 Ñu—¬2Ó¥~ !!!3˜ã‚d<‰ègU5ÄÌÂÌÌ­Cä“ H‰Î V )TÉý’Ô)(³ÖI1$©D°ZP§8°àœ7©˜ÕvõüÙåõ³§ww7©¥aBŠ…>e´ÕiÑCàéø`c¬ñ1dú8XµÖ â±ðø`¥gggûý¾ï{IùÍ›7ÏŸ?Ï9ÿöoÿv¿^ýÖoýÖýp”»BÕnчµª8ëÛf±ZnÏϯ¯¯Ï?ßn~ü£›$ Y>{òѯÿêŸoÈyä2ĵkç~YR6Y™ë¼>:šã1¨D],»óEuuåœ+»D 2ÏóQ¨[Iã¬%¤/"§e1f¹\®úÅÝÝ\SeË\5ަaœæƒˆ ÓN§ééf³Y®®/7}ß‹ïýv»îºnï‹Åùvåœc„ÕjÕ´n𯍩ïÛ,)çÜöÆñpxïlÃ(MãbçÉ8cvĆزq–—msu¶=_/ÎW«gW—?xñüéå¹5ò¼wûû)¥y†%©c h!K!¢BŒQr!"Íež¦œ‘ïvSÛ‚g#!å”]F¢~³*Y‰ŽÛSu2¨Ghý!€zX'£ijÐQëÉGçVc4R@9ξy ÔòœÂÔ‡^88-H¨ê™ÕH*<8ƒÇï=E4à½gfƒ'øÚc ¢ªÖ:¶>¥s)¥dR Ÿ–ɇ¬2 wv¦¯^~SÚ¶½? ?ýꕉ9]^]=ñ¼[.Þϻ꬙¹Ž°ÁïdwðÑïö³ü™Îð±“D€:‹âaŠú×£ö¬@ŸÜívðâÅ‹þð‡±”Ãaˆ1BŒ`ìjëç9#‚³~Ñùåúãÿð7ÿãì'Ož­6ëõb±yîz0à7~ý¯êÿë?øéüäíag7«uœƒ7ÞsqÕÈ¢:z¶†Çs ÝÕ¥µf·»ƽª pΙ˜EôAܪv ‹HJ‰‰êºy¼1yr È‚Þ6Þ6 šBN&îv‡ÆxOª1ÝÞ½g×òó«ó_úâÅõÅÅåÕUÛ¶E3"6 ·X,v»®mÛ¾µ¥•¼è€ í§ëB˜÷»Ý4ÚRÊk}̹ïWs‘Ñ„YcšPÁ [l–­—ó-1œ¯6=½Ül×úîîöþp³¿¦‚É‚)j EK)ÈäœÛï!l}@óµˆkZk}U<.ç£:>ÄÊœ#DUfT9F[8âZþ>¢º¢G="U<)m—_m/­-€GÉ•lž¬Z”¤y]˜"¢*9³JR5ˆÖšêxj&Sìº K6hš¦1Þ!âÍMvÜ ™¤eNIzتÈp¬yAÍ €"Ì)£Áûiúé×/‡a\.¶÷û]˜³Q-í¢Ýl6¶32 Õ9j)Jí}ÈÜêPºE¿çñ{ȇXÿ´óÆ~×mŠÈ{ýúeø7åæp§A£–s,ãÐumͧ®_4‹âawïügªúþýûݰ³A¥Ç˜rý£¼÷mÛZkçy¶ÆÔ)dÇMJ•P"–Y¨gÄ$ƒûûÑûÖð¦kÎÏ6ç›O?yöƒOŸ^œ¯W›µ1&Ažç9in‡ìD’‚j†8wP$L‡TȳsP\ߢµYƒwîêê°×\Öë¥dÉ©(Pã­äQ$«ÆÒ4˜²Ñ€rss3c)y˜§9N÷Ãaˆl”%K ¢ª„dÂ,û}@DË&@Ã- µÀÌU¼¤ÎVQ-%!)R%ï2ÄŒ)g€ÓäÚÇë§vBVzÈVj"÷2p…©>œ XCÕ£µ‰hóŒÒH<ÒH˜¹.ÃÓ ´Ì\ç˜SÌQvÓ`ŒÁꙡ„¨\¢ˆ¾½½o¦¤@5J꺮m>P¿’jS ô° '¥‚Ü/.¶gyñÙ§ÏŸ?Gæo¿ýv7sŠìlÝàU•‰±jx©‚T©ßÓ§Õx¾‹Ž>8É«ýá)ì{ä9‹EšC}sš¦¦i¾øâ‹_þ•ëòìr7Ö13¿xú´um‚ÂÀÛúí ‚P:g,¤  TÀ¼žß­›ë æÄC™~þö›Ÿ|õ³?øùO¿yùuK­gÓt “)ÃL„Ç!Ò6Ukív»íû>†!¥DQ@µ0û”ÊiKRföÞ;ç†axX1z‚á3””‘²% CÄd¼uWŸþêç?wÖnW‹ëËíçŸ}r~±ýäù•ѱqºÛ½™æ9«¤’ ÊÙ2zëRJ ”„½AÃèFŒ)ÜÝÜÜÞíîÛ¶3":çÈ,œ+JÙ a@2Só°Ï™wùf†¢bº&r–]N™Ù’1Ɖ9بmZË®Ž*q#…˜æ¯ÕM™ Yf5PTDKš‰ HÀLH šµÔ±+ø|>à^õW—%§^9@Q2ƃ…ˆˆ £hÎ¸Ž 8D/ˆü!R;éLÓˆÇ(ê‡;çK)%ç¨Êƨ*"ÓÝaï½gkJ)qÊ9çqšÆ1„¹XÓTHÉ{yy)ˆU¦àƒ ¯ª‚=??ÏD)ßvïoö7·{{¶íÌ/ÿøsòúúîµ:WâÌícQB'*9}PU(råÉ0T!r•£®]¥¿ÈI«‡ë€+8ÙGÇÉð>„£ÕÖ£ÆôÇaTÇèü¢S¤(UÃFEˆRæý>øgÜ/Ûõê›÷÷ÿü_ýÑŸ|ùÕœKœÓûWïÂ0B(‹¾?ßl–Ë¥µÚ•™â4ŽcŸs.ÓaÚïv ÛÕbV:ë%§yŽ Š®,«,àØ"Pi;ûÙ§Ï?ÿü“~ñi·l÷ó8ÆŒ‚JVUzØ4T‰È{o€w»]E´> Vµ \ Bi¿X¶Û³Õªí?~òôŸ>¿>»Øž­\cïÇÝý¸ƒ=Þíöx!¤º°R,ã8Öâµ1.¥ôþý{"ªDGkí<Å[ØíîëõÚ{_¹ÿwww¥® +ˆ†ˆX@Q$ªçkF©Fø<ÃâD ªÇˆ'EU¬òlª5âZXɲ•?ù½í»Z`!¥ôÄ:4 ±æq€Çš1±–KA&´–¬¥Æ³*IëºÖžo¶Y ²û¾¦y·Û í\ËÖÞíö•ø1ļO Xr·ÃbVÕT$„0ÎQUs‘ãSŒ1')€“ˆïº¶ísNw7û»»mš&¥ÔeêS…m³ BãêöhE²H4"‘œaÕS“)" hEF–ËåbµÜO1•¢@f7ìÇq,E³é”Lâ S©1z * þ R}][›kv'¢›dgÛ-ȱ`Š¢""…ÙCÎfÐIòïÿÞïF²Ëóí}Hòõ×wÓdŒ§¸X,n<ÚóÕf¹\‚j) T‡ƒ¼½ÙÝÜ܈Hß´ZäíÛ»w¯^/œ›³SBMÓ`ã°s¾±Ü-ý¢mg½9¿Ø|ñÅç/>ýèîîv˜‡ýþ^KîZ«ª% *‘a6H)%Dj'Af‡œsßô¾mù´O‰f.ÖYî½ky±é{¾Y?¹¸<ßli7ì^¾{õúæÕ”¢é]NBàÃ0‹ˆw.ç<ìö9‹s.¥]Îy8L«Õ ŒM9(¨…”Æ13ç|¼ÏÆøå²¥#T˧§sâE(ˆè£îða×PU>ÖÚ¨‚ý¤ßÓªŽT¤fÇ ´*S¡%5¾? IDATU-pB @•|ç¿ó!5Oac>Nö;îÚLŠÀ†º¾õÖ¨jLs.Ô¶ív»N) PÌi?ŒCÈ·ûñöîþöö¾_¯RÒlƒjøòçßäœû¾ŸB¼ÝMŠœJž¦©Ž‹©„Æ0€ ”RR‘#x‹¬–—`‘ï5mÛH€”‚1´Zô]×¥Çé0Õ­Ö 3A†ÂaØ¡Xß*@®úã@mãBL1'CÜu1÷sHc˜Í8E‹qÖz—CÄ“9Õ›Ue›+ZuÌô1]Èðƒ¹ob)!„üa6ÕéÖÿÙT›«ªjˆG¨d(¥a?ÌÃ|›{ËëmŒr÷òÕÝÍFmmcã<ß¾ ÓB(ˆ…ü»»ûÝn‡ªÞ[ÝßߥÝ4¶jÀ.ýÒ¯nÄZ³lÝfÓ<½¾X_lŒ1Mç/.Î6ç› BF§9…1Ö"ÆglNñ8çùt@•;ßÌ:?Ü·š£Bý•e*) êz½l»f1ŒZ¤qn˜¦wûû¤ö»skÚ0ERh}£ŠÓ!¨ˆs:9«B1fb¦c=é!êóÞ/—ËišnþCÌ‚JG°¿^ ‚œïàCÕ8EðC`yúœãÖ¾P8¡—G8ÔÛŠ‘XkVK…µ$ˆj¥´:Å:]Q²Ô¶<%E¬bUbLÎyŽ’JL¢9‰*Ìe¦0 0‡nw»yŠfJ77wl=¾½½±Ö/Ón?¼¿éw ªj’c¬ú Ì–ˆÑXçëòÿOÙ›ôÚ–mgB£˜s®jW§¼÷F¯ð ?ÛïÙÏv¦"AJAD'HÐ@BBÑ C‡”h zôRüZ‰Ü J)d‘N;]dÚÎW:"^Ä­O¹‹UÌ9Ç4æÞûž¸a{I÷êœ}öZgŸµæ˜£úÆ÷ívÊ™Dœs³Êc®È 0™j&P§‘Äa&‹Cwf$Ùj¯&[oi±kƒ•duŽT ¤hš¢¤I²¨¡ªÓ8NVp@Èä1æ\ÂÍbNô`,ð˜â½µ™•À©ØjyO.ŒÝE(ç¶Ù¡}÷Z¯ˆˆ|hm—ë0q6ͦdªˆ ï?¹œ¦4˜ ¢'«‡ö/>ýùöêåÓŸ? JÜkÃs'3CòèÚ¬{ÆNר-§Ý¬ªÈ5uU3§©g¤“e{yyö_üàâ|UwuŒŽ1ƒ!‡P¹ãäëà*ÛÆÏÚn¹š¡Z¨ëºYÛ´m»Z-NN—|øÄ{ž4#¢’F›RžDÒ˜¦,ID@²`V˦,Œ$"F{ò¥œ³C.cGˆ¨*Ç0  ³¨ˆ*Ƙ!g™¦4°ßöc¯©™/’2;çÛÐÔ`ŠØbÀœ³÷œöT€b„†E²sHdª…‚Á«Ê0䪪¥Aò“Ú1§@P°7¬ê‡ê PR.X{Bx @]–­˜±÷\0&<äüÌX<^™Þ:¶àË+°ÛírÎmÛ:ç¦i çÈŒö-:"0§Y3à˜a7¥»»»¯^ãsîûi½KUhN~»Ýîv;f>??ï…“)(òQ J6uíR’}ãP´gfOx̪ö$Z`Ö5ˆlE?È•iÀŒžÑî‡nˆ˜£ & €³ï+&3Mj`€„è@ÙT‰!‘s®mÛn>·]œb,â;ÀŒˆNŽ7öÔèþèðŸ$¯÷Ýψ)Vw¼Â113r¼§¢5xx5U-Y…`F4p‹å)NÃëí$ÆQt7ˆà|3Ÿ5´9Œ£g×tmÃüñ“K›Ïç‹Yíœ#T"8;YÆ8ÖòäÉåå)ÜÞ]ßß߃·û~½zq•3TçyuºÚö›Ñowfض­g§¨ÌŒŠ¾nû~Tç|’8ѳ!b×ͨéæÉ(N“sŠÏYµôÂâ”XÉ3`Ýn{™uQrIª‰SŒ.ì1:¥òQ–~ Lô¨Ì~X²GÔý1ÂDD#0Ù‹% ""€‡=µv¢„S[NØ3¾æ ´‡Kƒžšc°¯¨î#v€ív[ àúúºä®u]Ã0ë:ǨÊX6b$Pò”^ßmôéç›Í®éZvõÍýpr:+]8Ï8¯Ú0›`; Ý|UÂ1½½_#b[7ÎËSáòÆB(f1é#…Ì;FD"7Åì› ‚Pï‘½Žª…뺦Mqæ Èûª­:` ¡"ô>x"Ê`YÅØ”TDñ4NÓ4Y꺞Ïç›íÕÕÕ•$#0D•üfÓ² ÕsthǧëŒ5 ":bP›†ÑÌš¦Ù§Žb&G }2( 5Hý‰CO6Ç„ˆúèfF0Ü_½ØMc“ÇEàÝ/=Y¤ï}c±Z¾óäƒaL`6›;$ïœÅt6ó¨ºèfŒä}¨}ÇO/Θ¹YÖÝl6Ä ¡Ÿ^97µ½_.Ïr–Ѧy׌jãùbÕ:GTe$¦,iÇ’%™µ€EÉ£cpU ýØ#bÝ6¹´JCrîa#•X˜ŒršJ‡ ‚Ÿ§î|ךXÏ ” Q©²ÂO‚ÄžB`¼—,6£Ê&C ÕH5$œˆ…Í©÷~ꇚƒ"€c0™rªêJ‰7›]í˘£š*€ð„ Œ„–-ù€Þ{D Íd·^7Ä«å©9Z÷;®ÃrµÊQ®^½Òi<9Y8ç®oo6›]4á*t³eÌ(‘¦i§Wƒ1ç1Ûv7úWCšâ«gO-O¿øñG½ÿØä)ß§‘sÜd$ €è€0WÁÝŨµMã(¼XÔ®¾8íÄ×7ÙÂWUÐ¾áø…jO?Täþ jŒã à‘ÙCÝVuÛ¶møŽ¿˜-›º»89û©b·˜-="î]USšÆ~Ì9Cïýêü³Dbv¾€Íz[7U@ïš  ÐÍ»YAN”*ÃDSÖ8(»ƒ‹pHÈ`tµ}…_L›¦™Ïçæ«J§)gM)åœí}33¥š1çLDP∃,´+­<(1¢*hQ_ØWšÕ@‘‘Â;vµ‰28çÑ‘z¶@hÓ fÇÌb„™B[Á0 Xæ¼ù î b¶ççfç‰Z4B;Ç&4èB6ç£âÍz7Mq3Æàêû>Ƹ½¾½Rž4w÷öò¦™¯Ò˜‡q—§Qrœbî§qÌÖv+ÉëÝn·½¹©îúq3&PûýŒæfcÀˆ€DªºYÌæ'Ëa±Xlw*ÏÈ ùáâDÜ‹èˆÌ¾*Õ~JzÁÑWçcËÕÀJâAi$.R+fEâ‘HIŽ€PØm6„ÌbÀµ™P{å‘#BfuHÈìBeLÆ:N;ç\ݶàa$j›ÆÌ†a(ÈãGÙ£®þ&æw´¢‡fv<ýáëÇãˆ?æÇ`õaö¿¿BŒ¢*’s¶mOY+¤÷Ï/W‹•Gêv ⮪۶ݎÕëaÓΚår @1ƶm_½zÕt‹išDlÒýͽÎçA(¦q·ÛmÓu·w׫Åòôädæ+éw (*€Ê¨¸g‘4Ï jtèªiÍ´m;ŸÏ£äýTµ¤\d$e@SPS+ŪB‡Q¶#B`¤2|Xt©Í Šf#Q]׈˜ —,c(afPIÀ€‚7ÜŒÔ}h‚ªVM眃a$dàŒ‹" ó!À h–³:Æi‚8å``F±ŸrîG³lš£ä³ÄL”¯¶ÓÝýæ~»Aç3ØÍv³§v¶-De(Ù,ƒÀ˜sÎÐðÛìÆ1R¶ª½s¶ï4 ‚C:ÐEšäÚ;^.·»Øu¯6ˆ(ªîAˆûð(¯à×l PßZ‡Ç•f_åj ,Ælx7:Ö QŽ„ffˆ„D† Ñ;< ãv»•ÕLD £Óq¶AUÔ©è8Žý´§!Æ2·u\÷ªz€ªÿ-ìð¡|ëÅr¼IüWêñ a¨f†žöнˆ¤”Ѐ‰È1±s³ª TA‚‡yK‹ÆWáåõ „ÚÕMíÜùùùý«Ö§»µ’aVHæª*üƯþª }ùê…>ûý/†]ßT¡!GŽ•‰ˆØ°H$¡*Š ùT0,Â̾ª|]»s"ÇΠöIÕmoÂE“-TÎö];8ÜrͦBÌZž K@GP¦{RJbJ„àØ£«ÇÉUUUUÕ4Œ"R×m¡Ì†@ÞsVÇh*"¹mœA ˘‰©ªõã¸"% ¢q úG³m7#"%´dвZœrŒ‰‘Ly»ÝN)û®3¦ûÑÆë›{2@€ìƒcv5“šÄ È\×4³¦f¬YCå+³¤( ®ˆø¨  졪|©ÅAÈ1Ð,§ýZ‚7Π|qÜëß,æ‡1׃¨­|Ïì › "£©¢2*‘3SÓ"ÓFŒˆ•£SËŽ<§çkŒÑbÜŽaËO_½ZÇ8[.Wg§0îþä/~²šÍZ,›Úu¡k¸fpóåâ“o~Lj?üÆÇ ôÓŸÿô‡?üaÿørÞ´Ò÷ÚOcMÎ1 1s”´¯$î[hhˆ à«à« kI¢u];ç²f@*]88lºø`e˜•ê6®r‡ÔИXAÑ” ØwX %›R"†ªñÁ³ÄèT8pŒ‚B¡ -æ>KžFIB^ “WPK9vˆNAÁFÍ2欰Þn^½¼Š1Õu1Æ<åa˜†ÝØ´2nÇ!°ã4­ï6³Ù¢òUJ9eu˜•1U¡³)1(¢óˆ˜€ÄœRu9ë5Þ ²J¾eÊf&{-* Ϩ9ª1S)Ÿj”èÀÃ_ô•ãèîÞÊh¾~Ø„‰=Xuå1y_ZŒÈ¦jŠb&ªì˜‘’í½î^Žlš&χq¬§EÕ’w¢ ¤Ì {S(èqÌ9yïB۸ֳ뻡­›œÄ½õ'ý­Üà×ÏÕÃàù_zúqgzëܯ¿¿„áH )§²µ8‡ÎgѨï7~yúó—/~öÙç÷c?ŒÑÕFÔ÷‹ºÍ‹íî\-œ]½¾úÝ?úãõÕÕ÷¾ýÉ÷¾õ­ó¦í7Ó̲ë>ùàÛ˜„*®©ò³ÙìþþÞ{qqñrJ]ž™š‚˜ؾð+`*¢RöEÅ2bL)å€`ŒÑáö`™epJ5› 1:ÂBQs!xï=±©æÌ¨œ÷ÞO„Ú»à# Ì̾®*篶÷9ƨ‚ˆ»aDÄìp“Fï Y§œ7Y’ÖuœË*”Œcï‰Ý”Ó8ɺßõ1_ßÞ|úùÓ¾ïÏV§MÝ™jÓØOëõz1G n7EE¬Z§ UQ£ŠRÒœr@ªÚÀIQ ‹¨š)8çzEM1nrZ{.Ì1@VfŸA• ”Á#Çqƺ«å²®kApÌûY¯(÷slêáÆˆ`¯u4;8¤T‡  S¨˜˜* ’š!*˜Šì wIm7LžÃ”òý°»ÙmÚ…#v`Èû*‡ˆhF„BR3%|3®Æßrh+#üªÏûÊQþdúËNÜGç_ Üí ¤ášŠ+¯QbL@Š9C¿v¯î³GOúì_ý០»àêæd>ûèò¶©\[Gõ~yq±~þì~þüg?­}·Û¹q˜R>¿ä‹Ëê—<¹P~aÒØ4Íõõuß÷º×|TsìTr6QEdç™*– Ó4´Šd(Ù‹˜2»CÕÁªa™è ¡pä 3c`Dœr*îÎ9çÙIÎ"rèªîs›cιd†SNk…qP ›YTuÎmïÆív[æýÓ˜¶ë à·ßlHGxÇ[¦˜Ñnï¯}µ—e73TÝmÆ»ÛM×Í?8{,îèüñ£Åâ½[®æ÷ëçNôÑív=¡®NÏþß?úÃ?ø—ÿò›}XUÕç_~!Wë±ÛN¶žëËÅ·ÞO9¢óU}ôQ;ë˜YL‡aÈÃÀ1ù€L€VfÕœ<¸/þ_vÓÝ89ï½s‚Lšö”^“Œˆ{È3Q×µªjhÌln·T…˜&5É9ç±D$° 90óÇ1Å”RÁ3 qúˆÖö»)æ$V 2a7N/^¼(HLÍy»ÞÔ>x^œ,«*g#”ñ Ec ¡îª¦z}·¥Ð(b¥ìöhT-UŒ1«1;íw“wØ…Ú#bVM‘ \ã™x’Œ j(„F€9e„l¶›5UK•ƒ ¬õå»iÓÐrß"8.B5@sŽ-%ðÐuÝb±ðÞ§í bMíöS©_ݸ÷ ¿Rlh‡G߈%ü-H¯ç‹Gdf#C#,˜f+!D˪¦ZjéJÞÕu«YÁ1W!´]³˜›#cÞËR)ìÙdŠ B˜U^Úf¾‰UU¥89O¤à uí°kqÐ%>‚ ê_apÞ "b"J°/m”Ñ<1Q>åìÐ)à8MœÇmhªª~ùòuÓ´³fþòåõn·ÆíÅÅYÝà¯ýê7ëï~÷ââ¢B,þÁïþ‹Úôï|üíædñ³à¦Šž^¿üáOÿNßû†3L=hnåò£ ‘m±SQF©‘€@è3Z†ˆÙy¯" ÚùJHƜػ0koî×£æ(ÙF«)ÔŽd=xUeOêØ˜™=ŽãŠ]×9®¯¯Ùû¶m7ëcœ"ĬSr Ž9Ni}×sS]ßm6cÏ®&àa3n·ÛIh¤m4Úô»$9Ô‚Å ‚÷ÎRÆ,Û(Ûq·GpŽ=€*‰8Q42²Œ.°Îæa7:óA5ÊÔ÷&àɉڔ‘sÎ#±g 5Ljª æò$è@ "šO…Œ°¬}J©"mÈ?›nv7éêWÿ¿·¬ü8î‰@H&YÙÕlU5œïï=È¢­^\ÞÏTM³ ÷žrÊdÀì‡]¿X,ö󦀄އ!Ŧk%¥~·+4j…æcRÍf1Mã86Mc„ÑÒ¢™å~ðäSÊ)Él¾tÎM)ŠÈ”¥HWÎ8‹¨åÜrXß¼ž/f''§Œ ë–Æ•#¸:@Njyµ˜ ÛÖ¢‚ œ¦Þûát«!Ñt‹™²ŸƒŽ…!‚|-×Ýöþÿüå1(ÿÊn÷`+_ïA½t¨‹–}VòÍf}Â~uzà>ÿòù—_>_Îæíl¹¼xtúøÙ|`xv»ýìÕÕÓ?ÿÑã÷>øöÉ¢›-¶ãæêææÕË«ÍíúÙëIy³£vAÞù®5_m§|³n/–â‚‚‚ú®^œ­ÎÍâåîS’  3"AUpÀ‚V ‘$Šˆä¤`ý° ¡šÍçCÇaÌ–úº©§ß?ÀœÕ’€3w¿ÑëÉTwqx}»›bÞNÙ”dŠN58„I²ïf7÷›õ®A-iš&42fvª© ÎÌv9™YMf½¯jZ¢J4Å*65£‰bù<…´aµZt]C7ã8M¾PY”ì·ŒM ˜ñ!̱CcÍÌÍÀt¿Ã>ŸR30²ÒjJ½«êP;ËJcÎydz³æØåbç€ÐÌ4ådh‚`$Ì<›Íf³¨GyÝ=¨®/‹‚ƒK*¡L€!¢G¢¬Å#9 &–SF"oœûÈÀËj‰†S?¡z$ I-«ÕuÝt­sÎ&RÕþöÖ9çöJ~¦êUÕ4¿ÿä‰IöžÛ¶ M³sÔÕ®®«P¹< )a[1dSL}4!1•I4A Úâ䎣°÷’7xú²zöº¼oËÓ—F—~ÅqÂ[ž°F{š­ÉqÁ *˜©fPB“>ÆÕÙåÍÝ6¥ä}ÝG¯.«¦}ñüjµ™>{yg/ï‡8)^__?}õâO~ï÷o~ò³ï|ÿïÀ×·÷?ûôó»»õòô¼Óa' ƪ&»pµë‡Ÿ‰ô'™1¼»äyýûø/>ûôé÷ßÿ…™Ÿu®C̳90ñ „1áᛘfU4UÕʹBBˆƒ¯,jL‰‘ ÷÷Ã+±šo^^¿¼º«Û†} Æ1^]ß&ÑWW·*`)²AW…y7ó•7ÂYEw×ÉrUØÕ÷(}í°öŽ™ë¶€ÎùÀ Vyt¸BÓżJ¹WïZ*µ +“›{ºŸÙ¬m»Æ9—“IV‡ÈE`¯l¥eA}úPøZ޹ñ¾ë¢„U4Ñ`OJ=ŽcîGÌSÞôn>/Ó ‚KhŽ˜ ûhŽÁ12 쇒ëºfæÍ¶_VË}îgP(›K—(TÕžÆÎûPUex€ƒ§ÂÉ\UÆ5){nC·ÛíØ³÷acµmÛ ›îbJYRí;ßDôʈîübBh«ªª*v‡dÊt>k-g !t]UW‘¡èjÙ9À—›;S™u§fyŠIT«†29târ–€ÍY{v/“Ûë½£˜h±Æ=¡"þ•}…ï«6EOøVMå…ã[}˜ òþt:(ÝðÁ¾UUØqTés^_ßmû´èff!Fð¾#üÅÏÿõ>ýƒý“×ww7ëû(y”äªpóôÙ{uõÅ««`¸»ß\¿º†áturêµ½bVÂmJÜïÒýݧ¾zùâþúì[ï]¾ùÏïw×/žÿýïþ`»îY‰Œ 5gËsÎÉ šP9v¨–ŘQÁX•œÍuÓøºB%DïL²fuÁå>C RfSã/Ÿ_ÿ›Ÿül¶:¹xüîf׿z}ûúöˆ\&K±«ê:4ìjdTÓn>›L¢É0 N©f¿˜-OºÇMÅ“@5›‘†T³ŠYã1xBAâÒ .c,…¥Ì …BpUU™ffvèr¶”'òjE8Ä PAAu_!Ü#+ŠÍ¢Åe#³’ “±”Ò8L6M²*äí¦/“¾D{X\+îãvŽ9I–BÙ4Ííõ–jßý* V¦RÖ2‚A§ œ÷¡›©*NID$[š¢:çÚvãvšœØ˜òf³sÎͧB4[tcQýééâd5WÕ°®kÇæ½oª*„À™909Æ®k,[FÄÙl¶Z­»¼¨æÝf;¼~þb½Ý4¾éf-$A`43 d #”è~×7«Óf>¿ÝMwÛ~ê{Púð'½X]uõ“³“³“UÆ4Lã¬q9¹i$ˆj ­wËšW×TÎû¬"âCC¬|˜¢(€¤ѺP‚æ"ã€DdEœ²*TMݶuUùqÈ9gÇ!2Ú¾"ÌŒ„ˆŠÀÇgJ``ö F¢¦`dªT&íËfk|t‡Z IDAT6M"VU…èÀ…1ZÎy½^ç|ÁÌoTLÑÔ;ÏH¹„£"Ø4Íéééjµº»Ù‰ˆwŒH£\B‰5šä8NqòÞ«§°ìL†1cš¦8 ®VMÜè¬^†P§”Z§§§=M`qaD§§³Óe]¦çóy<3OÌì¼÷MSUÁ-— ï(«äœ«º^.—Áû”ÒãËGOþÅÜL»^ Lœó“d‘  ¨U´õ´h‚+ìü@eß;šBaˆ;tWÞ2¿òïkÝxÀœÿÐ 18D;ìf{A$ÜG¶{Àrå±òc¿y}{GVcòëëõ«§¯sLóvñìÙ³*ëüŸþ'ï~ðþ6O¾©µ¦M¿k³< ÿôýó“þåËOÁÍ«—¯Ÿ~þxu6 nªÎZاQFr^}?õ‹“åÇßþÆûßúðgOÚÂãîüä6ö ˜˜ œ1C‘ ¤1Æä –""5-5ÒwÞyg±X„¦>;;»zõZØ»˜’CÜÏ© 8çêÆÍ»º­Ý»ï\þâ'ß!LÓÔŸ-+ôA—Ð-çíùÉbu:2ºcD#š€ ŠXŠi·ÛªÞn¶uÛ °ªÒŠØcÐÌlлܣ‹ó¦©”Áy(HÔb„E¼Á¬ëšÙlVU!¥uœ„jïÁ;çŒÊ߇Æ6!š!–¢Z1Áû5@ŽogÙc÷sĦ–³bRè½g"3Ç1b+=ñÃ*SUË–rÚkõ”±#‘œsà7FÈÌì_™™FH9ƒ€!ø*„&€#b`cpFݼqÎÍ–uUS×uMÓäœ ñôô´ëº4l§€™çóùj1D›Íf][ŠD33ç\×´uvÛç(ª'®À{©êªª«‹G§×7/}íMƒ"dPr^ÐUuJÉžièûqÖГ˹;ncdPønè g3÷à ‚É7…™¯õÙÿÒlðà7Þ~ݬd€jF&"*$ãðôÅóýèGŸþðùû—Ô¡ùò³Ï§í YšÐüÛ¿õ[ÿð?ø÷Ï/«û|áéë[ 4 ãþà?ÿÓ?ýòËÏ~å—>±4]¿|þú‹ÏÏ«ª¦ËUW/ý¥‰nÇIQÍ!„ ¿ÿ½ïþßþAw¹Z]®>|üèäÉÅæÅë©¿O>cÑ 9(˜!ð›æ "2±±÷Ë““¬¢USD› ¾_o;Oˆ€1›`r.„š}]Q×úwß¹ø…o¼?M»~·VŠª/~ú9±qH™vS´8dIW÷cŠýdþäÛßúçg§óºIãŽPÛ¶F¤9²ªöyÚ|ãã¾ÿ½ïNVÏÞÿÖ‡³¶ûâé¡õBð“@’ƨ.ú$dÄeÅ£÷ ÌUÕf³!ºÅ¼j›m¿“IV‹“¦ke‘ÈŠÖ/€z6dª×vÕÙéìä¤kjòœ9U]7 CÆW÷kÜî’Æ¨’©PÑ!šDhœ¦<Ƙ\…èM4G!SR öš˜cðÁ8»Ú‡V5›¡h)X–Š˜2#2À®ßˆˆóä½7Ef‡ˆº‡Þu¤2ök  Þ!?"`K›ŽŠæ*¾‘ŽÞÃ&ƒL¾"£»þêêú|§¸80dÇÞ;-–¢…&£®‹(ò|>ï¯vGŸ{æt2³a¼÷uÛµ´B]5u UpqSJËE7ŸÏ³™=yt^U•i¬ªêòüŒˆÔdÙÕqX{ÜC«»†BpSÌ"‘Ñ€¨¦8ôÛM™s„'gmã":Íq•ÌãøìÙ³ív;Ÿ- ÷9—DUÈÆçØ`bÄżq»¤"¦Ùƒ+ŠðÕ)üehR.vuÏ=Œ î@°×†òÜT©´%”¨ä3ÉÞ,!.\U×KøèÛòƒøé£×ï=zÿW>ú¨S»¨šï~ë^<{þý_ÿÍy€Ðu2À2xÁê~ýßûµÓwOe§èwß½x§Ç®®±óe½ëÇœâ]ÒMª’ªknïvU½ê¡ŸŸ>:½xÇ­‡?ùþ¸[÷ÿà×ˬo»NCuuwrr¢9æ½ w)ëë›k¨Ã7ž|gvz:¤æ‹z1;üèçñ馿c%Ô†:§l[ߥœÇ!w§§U·pM÷üêîËg¯ï®×Ûë]p¾ÏÃúê*fE”¤ÓnÔ²KÒqêzF`*hŒ“fSl›•σõ€5ÕŽÀ$SØdÊã°<_=º< •»½]{ªÐ*DÎ1“Z]W*IC`öÁå“»W›ŸöŸ¥h\Ï„RVudÌŒ–!‹BöÄyJªzrrZÖMÛ.¶}¿ÛõÁSß÷‹“UJi;öËåÊIÒ~7ZÒiŠ­¯'tw÷ɹ&Ó|;ò£Ëå°ÛæÖqJ#§¤š˜X€IaÙµ]^¤õøº¸8­j¬*‰VŠþï|>¯ªÊ9ªªêôl™s¾ºzõøñâädv{{‹–ïîïka`GÂÛí°¾ÉÁ Ø8Ž|á\[¯×i5ŸÀf½Ö ¢Ö2aTéó®™u]7ûù§ŸÍê»ÜÇóå¨:?H62“iÜÝxGÃ0šs7ÅL\ÎYL TòëC"ýQ–@éÀttìÿàaõi? bÇq$"O¬€ˆB¸8?ÿöÇý½_û·Þ9|ZWy½>©Â‡<ùå_þ¤}t)½Hd"@¿gÃȹƒî|~ú£?ýáò7æÃføòÓŸÿö¯ÿÝï~ôáÿö;ÿÄW!ÌšeèúáÕëþ–&;m¶ÙžO´štV-~åñ‡®}ñìógŸv¦<¤±ªühÁ\ã}写 ³HÎYÀ˜ÙU37M3æ4M“ˆÔuݶ­÷³Šä¬…ÿˆ ,å¼:=‰9ýéŸÿ°äÅÓ×/o+v÷wÛåêTœ)Šd;N/¦4˜!‘«ƒG œ0#CŠ m¯æ•sFPïýÝÝ÷œSáM7"rÎ#ˆ(1ážÆ8 jP×õjµº¿Û‰ˆß£^  ñK8ŠŽÙ{?Ÿ/Æ!»iJYÕ©*9a›Ç^¦hfêÃhû ÏŸ\ŽýcÈ&:ç“¶íÚóÅvÜ]è‚îã ÓœM}TÈÍrLqš¦aLÓTùšÐçBÝœ¸Æ‡&øÀ®:í*wùèñùã'ç³Y=›w¡q"éd9ÔÂuŠúSè·;Uí7ý³ôìæêj·ÛÕuíˆ{5BÕ$)£±‚d‚~èû81"{‡€CœŠÎÏf³I)m¦)™^­ï²ébµÚ®7c?É‘ XŽ1™š'Lh%´Ã!¥BwçömUTb†¿Öfs Ê|àۣ߫ÌÞBÑžÙÎå(-ZÑ,.°÷¾Ð΂èr6ÿæ;ï¿{öÎi5¿¿~aÓ¶=}|ùþ%Ôõ˜·BõÄY ˜lõfsýzs·ù'¿óü‡ÿÑ?\ºæ¿ÿoÿQÜŽ¿ùK¿üïþößÿñÿ1+Åqr!pS—’‰euŒï7«<þ𣪻íÆ|ýéç×OŸ.Ûvº] ÕMF%€32šè¾ "LÔu]˜Ï µ\ŒQ±WÕº®‹f:"©`‡Äž˜d•ùrU·³§Ï^fùÙ¸KÁU¡n|¯IMÅTADbLDE°Bå!¥ˆ Dµ™Ä4Ž“Ömg ¢‚¨¦Á1{M‚k j»99…œ³¦ìBeÎÔTÊ4îñι>çÂr¹¼¿Û Ãà©"`Ï$`PZÅp™!KÞõgúœkˆ¸iªàóTU\cLÔÔ^U§qj›Ö<«#ï}`—RZÌ—³Ù *KÍ*$µŒŽ ’¦ýH“©ª¥¨)!¨gG–1#äÀT1¶µï*×vÕ{O.?ùäù@MëãݰU„›»Û˜ ª*U#öã4^]]ÕU[qf–“åd£%t:NS’,p@ꓪ:¤ûû{uÎÕì%¥~»3Qï}p%ïrÏ7›õýfs2F‡´Izl,g` Á÷…Àƒc &GY4WµcçP5ZÊ9—vÏßÐ ÊÁÚ×O9»´ÒÒþ7Fkž#ÞsdLÓ4Œ!„àɦû—7Ï,§Ç.ïÆëþã÷>ùD|ó¿ü_ÿû‹ûí.Éf»ûô§?ýìG?Y_½’aúïï'ÿêßœ=y4Ýl¿øÙ§àÿÙzš;nد‡±ß®KC†*¯SRüÖ‡ï\¼sMÒ7?þèùÓŸÿéÕ«g/Ÿ}çÝ÷¹ ® …" ²XŒ »ûi,žÌ,`!„2¼·^¯Çql}(²¡¥(_1•* f3BväÀ²*€®×ë¦iB¨·›>F©fmõlfbƄι,ÉÌ;GuãCøCĈ-ç,:I6¢¦iª”RŒ#·m;kZç\×ï=£Îçóâ!cNy˜š‡^Ta¬*͹Ùl¶»»'¢ªªD$F™5êœ/0FB.Í DDdDîÇ)fiÛ¦ê®êùÉJ‰sÎn7vM.©ZÛÖã8ê4^ž¦©¯œÆN“ÔuÝ|Ö¦awöä¤[6W×ÛÝØ“Ç:F6Å FD •  n9oÏN–ý¢=™Ík()Îÿî;gï?¹|çÝ‹ù¬~çñY7«Çi=îî§Øßovíj¹ÙÜVUE¤Ûmïœ#rëõzGƒˆä\´µPß+€1îÆÁÌ Mß÷š²g·ÛíØ f/ìâ0›myÏË<S¯)t²ã¦Qï»`H³¡0ú¦å¶º¿•«3sBÚîvCVg„€d cÌÁù·Íé«nðè;Çw>lÖ?<ñ¡o|Xc,¾EU! 8@KYM¦×Ûõ²ÕÜß§û¨ù7?ùÅ ª?ùâóÿæ¿ûÖ7=d„Ìp·†(à+hÜëóÛÊè½óGAáîù«ôî‡i³½{‡†ÑW21YðY^Ä;=ï&¤Ø<½zþãŸþp·Yã£ß;¿l‚wŽ $§iÒ¨óù|$—TÍ@UÇÉ;§mJiÚl̬iB¼_,жó3iV!õo¤¿˜ùâââ~=\½¾CP‹1¦‘"°b‡„UUu³º®ëÐSŒ"WøÅ‰¨îš¦iÆ1^__ÐÉÙj9_ˆÈ4ìœsÁ“«B’ ”tš<àƒU‘ÂM_(ÀÚ¶-áXŸ‘cfPgf骪˜Ýb6;}tNÌèpuz2¦˜úXi"᪠Ì<ë‘v\„÷Þ{/M="žœ.»®#Ò“““v>ë·›³ÓYÅ|»½d ✑‹i ŠHF Žgµ¿µ{g©õÍjÖUÕòl9ûÆÇ|ðþ“?xüúõóÛ»W÷í§~ƒ$ ÓFÑÆ‡¤vus'"]7ObcãõõÐO×××fXvR" U³ÝnÍ,µ¶ÛmŠÑ9·¹»¯CÕÖ5‚(ƒ¯ªàB˜Íç íæöj×§j>kÛVu¿Ý.O$gI¦`Y5™ŽªS”×ýXgšˆH ×ëÍÝfÀ.fAD)iþÕžð­pÔãú€q€ˆŠÁѱ‡[jYD†XàoK«h{=àœs6(ƒ<Ž˜‘Ä»˜†\‘h¾»z}²\À?ûÝÿûýÿSÞ)ìF ¬ 8@†¸»½¾·›ûë«w/.ž]žzÐo¾÷Îë/>¿š†ùªkÏ–RÕ}¿…%æ¹9_¾ØÞüÓßû?×ý|?Íb¶ËvV+TfÉ̢ɔòÌfݬY÷Cùü1FsÎ5M³KSѯÞ/—Kçœ “ã y Ì  JY²Šf Y­V—§gÏ¿|q-¹kÚy×z$¨C¨=aa¿.(¦ªªj6«CÓ”ú¾1‹HÁW¡›wM×UUÇÛ¶nÛ:ç,ûÏã‹voÉÒKʺßòLö; ™õ}_2Ûû¸×myvÌ  UEµtÜÔ#Öu¸8YT•7g³Y3D™>8{„b‹YBXÌ»º®ÉìââBtrÎ…&xï]pËå²·9çІÍýúógŸ­7uhjb`d_>Xá 1É)Ç1 ;¯Ò.huyúè½wŸ//ÎONNÛMÿêæõ¶¿oÛVÙ2 šļËwëí«« å¬××Û»»»³³³ l‡Ñ¹ ˜onn@m¹\ »^ÁDÔŸD&Õ,¢ŽÅsb@pœƒª†ºùÁoþà®ï·ögW÷·Ñ7À”']ïbo[M9gU„”µOSL 6ë;FÊ*ˆXÀ®1æ‚“ÒBöÁýý•vxthÇ|´À‡9aI‚91I1Û »o>–B+eÝ_§(°’aXž>¹y}u>Ÿ}øä7/^ý—ÿÙþôõõýçOWPAå`^Õí"øzjGªýæÛŸ¿ûäòßüðÿãìMž-I¯û°sÎ7åp§7×\Ý]Ý 4Ðh %ˆ&AHbHÔÂá! o´ñ¿¥•wÞ*IYƒeŠ"H€˜A4=ÔüÆ;æôMçx‘ïUW7(›á»©z¯òÞW/3Ožé7|åÝGÃúê¾ý{øíßýAè›ËÉ‚SH…vshrè]]ùÕÚù8ñYú,ÞËÙv±öܦE€©`¡Ì–sD2UÑm=´a·Û•®(ŠÂDÖÚªª$ª>ï=Œž'>¥œ’ÑDZ4`‰)§ †¦QÂÈ,)jÇ…¡B™YUV{5#ˆdfõ`ˆˆRÊ1fï}ßû²3k¥TL>r¶¥ã˜Û¾c,ä jU QH)çì½oš&íï‰È ·€€€1„PMg@L´;^Ÿ|UÔÆ8ÝX8Yc gËb2™n…•f³I‚ Çtrrä»~6›ÆV¥ÛÛÛƒÌD“wÎeàœ3YE*ygm!Z"$Vâꢪkˆ€ ­GíccHCZ¹œúaè«Ýþ[w ]ï?|xt|¼ïœašF¶Ív×µI¨O0 i¶ë·Ûf¾ØÛnÛ1¹BÞ÷mÛg\3sY`Œ. ¶a†"s"-4‡Æá R¤”‚ReYæœ×ÃÐjšÖE‹fëeՇϤsïÛ!eNù¼¹ä˜r–,Rîcˆ#įO)sTJU…a±¤ÈØRÀ""5Zý¦ÁדaίÃv3õÒ{ð¼ˆS|U¾¾¶G2‰BJ)%Àåe¯q¢¤\¾ÜøMñéó?þÿðþ]½Îâ“ÖrÚß›Ý:Ø·Š>úõ¯Bníî¿ýèÍò'ÿè«wïíj·~ùâê´kÖ¥ARàÐ[æï~ð­¯ÜišÖ_¶S«ŠyS¶á¬îyƹ²Í!QÆ†Ž¯ºM³iº¦?><ªëÚ“nd6sÍÐïv;5*¦›è!A…†ˆ G`æœÒ¤ªöšÍÎSzR”‹ÅþÅî2 §ëñÙx&’ˆä$Jï½²R A+¥´²1ú¡ÆE”¯V«¶i&“Éz¹ªªÊ¶ªÀ9gŸâàýç³ëYÙ(LjXUUHƒ÷~†®ë˜½ùµN*¢¢(Jc{“ƒùüî½£é¤|ðÆmmÅ/ö& •Y­VÓéÔ*­”ÚÛ«Ãà×ëu†äŒJœB ØnÚ]ß•emMµ[ïÖÛMâ,ˆYX#i­‚RJ9c­uuÁÌÆiƒ¤j[îÌëÒ6Û˳¶e’¢(Ö»m gïú”Ïi½óOO?žNfD¦úaÓ¤”ªª88º¥5 Ã@Ö*¥lUZk÷ýQQ”Á'¥TFÀÒBíŒÑ"’—Ín½Ý€Qûv?3_n/ñøÉø÷Ýnøðñ§ºt“ƒýmÛ0Ò´ž R’”8qŽ)'D]TUQç"X4ÀY)U:BˆÁke´!)1$¼^É~Þ¹}žúƼ_x*g˜Y2vKPjAÒ¯‚À(œRH è5_VºÑ›ADï½R( IBÄYª‘´( Ê™™Ôæ¿ý§ÿì{ÿèo=¸7¶¿kð\¬€àOÿòÿª¶»óä“_üü­ãýÓ§ù/ýŸ÷ïïT_5´›žÌvM{±kµq%šbß~kÿíÚùÇ']w¿]öëõ…_›C«ë´i¯ÌJ_m‡«ÍpµiŸ<})!AØ-&“¹=J•²T/¦“ÊVWçWTèœât:µZ»Ùìp6S}´¤JWAdI"=X«CŽ9*e.«¤5ê"™b•du~¹î–Z3Ä çjÌ©ëÚݺ­ëZ£Ë¾c‘ù¼*Ë2g‰ÑÅ w»]ΡtEʺi‡õv»ÙµÝâúæ‹.ø‹‹‹&;).Д¤›'®ÐÆä4h]pò |( <:œ\.Kƹ1¦0ÆÂ²³ ƒ@¾´rçîì'óyùðá½ÙÁ|:VÕt:íúþìù‹´³ûUM!fÖðôñ³.ÄÑïþlù²ñƒRj¾·7Ÿ—S ];1…Oë[ÓE' †T¨XRàƒÅ^J‰9ò0´¾ !H¿Dd¬±åj·é‚ïûžÚÞ¯ÖëQÍÑ9‡ÀJ)Tâë=½òWèÜäh¿]¦õüàøªŠELqfÓù\U:(WMo2Ę1Dö«f×w½0Y·l¶Ê¹ä—§ŸmÚ´uöeË!×ÚrQCÚzL*§Ô ­ÕF‹a%ŒœÔÈèGò¡@јFûÑÔ ’³Ê”R¾z›µ×t~_EÚë9ðõrôoŠÞ¼^_Nü׎yýE¿%$RV¦_ï|l+ë÷ëãÃéƒ;GÚ`ÌpÀDˆgíåÏ~ü“Oÿò§·çûCL“Åþož¼ü³ýÕ¯>úL‡¤Ô¤t71g©êùþþáp9Ô‚ñórz§ è7iZÚ©š7©»|¹ ».û<_>ߴ˶kú|uueM,‘µ¶¬«u³ 9•uU‹Õ°«¬žÏçVë&É8ßJ!FŠ”9ƒ¿BßÖuÝÆcôÞïv}»é¬-¦õ¤ÛöÚ¨±p°ÚC×u«Õ*EÎÂ’!çD`£mDN$è-Ä!¢fCDì´µvLB…1¢XÃíñ†¤^$‡˜@)3Â௛‚qOp y%¡óúxoLB_Ì|9äðóȼQrÅ×ãùo´_89¦NÈÛ¢¶FÅÜr>w ?9þá“OŸœžov;㊳ÓóþéùõŸÿð«ßúÞ÷¾÷ÕÞïÐýé?ºØð{ߪ†dÈÿõ“§¦poe^”eǬ½<ðeú«gÛì§³ZÍøl³:¿¼Ünâ³Ëfçvi1]~—""öi RÛ«+#°Ûí¼÷MÛŠQyÔ14MÃ!ž={±^.‡®'VYfa757'd$¿M&“ƒƒƒ‹‹Õn»#ê%C¿ëÇ–}2™ !H‘cÈ×Ö$eU.óƒ¹ÖZºîøø@DrŒšÔdRKŽƒÖúøè€™Ó½;‹jVõý¡uNUŽS8}²ŽJ³Qš f”Q¤]”*ËrVN;å•(§ˆTp–ꪸuköî;÷=zãà`¢µò¡í¶›ÄÑZ+¨ú¾ýà”íCDÄÞ‡£dæÈyˆ‘P{ïû~`æ¤]íš¶Ým·“ÚIÊR³rvÇ@±îýÀg[ìº.x%©úͰc£¶¡Ë1MÈ@̨¨!R‘#2 2g ÈX$*À %Š< ÝHõŽ0wÙ6¯ij\k#( ãô¾•W΂ôJòðõøRØüv&üÒ[FzåÿË1¯yIE¸Áçßð'^{ÿøgNÀlTYØHf¹[¶Ír÷?¨Ë¡ÿåÇŸ<>=}y~µnv]×?}ülóìùݲÆÌ«Õjºw°ça`ûëç—“êÖ,Q·¾üäÙÅ{|õÍw¾Öœ­^À_'”‹—W‹:ííWÆÚ³õÕ_?ýäI·;õáIÛ/É8PÙX­¨,ÜÄÚJëRe‚¢º®gó¹-‹ïuáFêŽ÷~½Z༚ԮÊü¥_ÿúÙÔuål6›ÍfËåvüWN¹r““Fí¨0d˜¹*Í~,¼ IDATJux9TUUTEY–õ¬žLªœszãà6 ¤Jcçói¡ Oê*§`­v…¾{÷n=­rγÙÄ8» ÃÅÅÅúêÅÐt¨Y[$e‹Ê)1èR»ÚšA’ÇÐï×·÷nß9>::¸{ûäèhŽ”»nׇ~´v‰Ö Pß÷CLHz׬±ïû”’5…ˆÄ•RÌ0¶š!„qâÚ÷}Û¶“Êc´²À×T)dä¦kAHe„˜9ÄØ§À>ž,hù00Y„Zコ0ñåv×õ^ 1%îZÙ€èí¶/#g›m ë°ÔuÙ4öý|žìMjM1§“RVY"­À¢€Qjˆ3ƒb$E …²$}♘2g–ÄŠF/c…Ú@1#ŸZ„A) B}mñqs£|©!|}1øú>ðÕ–nxw¯eÂ/T³¯Þþ7FæëÁÿ¥f$]UCÛç˜+§v¨Ÿ¬/þËGŸ+#ªÓ«U“ m;øä“³îÅr29xpë`B´ÛìÕ­Ûw¨žøuóâìb×q·Þ é~ç÷¾óÝ?|ñäñ*»•Ûí°~ó@¥õÓOž\~ª÷êÉ×îêËÍæÓ«‹†§aRcEU`¬ÑÅߪÊb:*¥\Y”“ÅœFo½â0 ë«% TÖiR <ê“àºþ}1Ƥ¾ï—Ë¥D˜Í*f˜¹*k«*WBÎqðþlêÅ-ªª²N9çH#§C(µÓZÍëÉÞÞ´0VœÕ“¾ÛjƒÆ˜!´!„ùÜ2)7™6í g>F¥”V‰¬²yˆ!zÌàM £ 8œÕï¼u÷·î?xøÐ9—!·CÛ mÓ4®*ÑXµiû®ú¾÷Þ‡œÙ¨!¦ÕjÕu³¥1fÜ=*eÚ¶[¯×]×)¥GW&WUCN¬0BŽ1†”I+eö>ªÂ’Õ uÌ©ghga› (LÏ>{Œ1ļRÓõ»ô"p!(21ƦïDY.§!†U³šf?Íe= CfÒRt…©´eæYR1jat¤uÖY gH€,×&\B’*¤0&§•%‰Ä L˜XˆµI¯užY Q¡µ±šTB”wäq7k•R7^_ †ßÂßNtòŠ{ñÅ.Q¾̯g× #ð&^©Õ«œþù@êB$ç5kÝ'yòòìG?ûùÝ7ß»»ûvbÌà‡Ø­7 õÛo=¢Ý& ÃÕÕUüí;Ç‹I¹ìÃñùgŸžÌæ_ùÆ{ßý£ßÿÚ{ïÿߘÛûëZËí»¿ŒÛ*^Ü5·Þ»ÿ+÷wý¤ùLR/ä d!F D(‚ùððp3HâÜ{ŸARÊ!„¦i.ž<ÿÅÏ~^ O÷Qd óÈÄQÝVF"*ŠbnE$†¶³LÁdcBî·Ûµsv>qoÞ{xx´wttPÕÖ]UE1)œ-›Í¶®§ea벪ª‚SJÁ;çzÇ{“$©ïû¦Ù¦”ŠÚjë|ÊÌ Š”Ñ¨(1ëkÊ &ÉAXJ§o.&®¾}¼?›ÕEYfõn{µ]·mÛBð19ç²pÓ4Cç™™cêü ªŠº®!fÔŠC"¨43cU”…ÕÊcD$…€Æ€µIR3t½ˆµa¥LaÁbMÕ†¸Ò¶âWÍ•&9{ï#°R* {ïËºŠ­oÛ–ˆ¦µéÛ!v¾>¨Ì‘½-iQ/Ê"Ì96Ûmè×’Ra§º°±õ0“3–2 JÊ 0ŠŒ 9#Y€¨‡¤ ‚ÀÄ¢®¶¨e´EEŒÒ¥+ŠÒÎ&…HE|­–"ê×3Ôë¤_н/…å«#à†yø_ëÿ–¯ßö pèºÅbÁÌ’zß­/N¿xú›¯¾÷ÎÃûGï½ÿ“ >ÿèG?zü«ŸmV[Š}íìv»Ù-×û7îÜÚŸ9Ú郎ïï÷ÿàÛüßù{߀_{÷÷þäo7Œ—ÏÞøúÃÿîøCx`"°óAþÕyÈ}–=í(hA•3pòáááá|>ïS(léÊ"qÎÌ èÚ=0„°?Û›Og†ÌzÆçÒõS ¢¤ä½WÚíïï /Š2qRšrˆ¤ 9[zÿødÿÑ£‡o¾q¿ž¸é¬rN«µ&¥„J=q®0¤ˆrvMÓø®·ÖúÐ÷CÛúNDú˜ÙLÊ’ô¶éSÌEQj!ãJÉ9eÉ )gÁlµbª]E2±Å¤°½ž¼8}vu5xßôÃà}Sa7t#ºr„Vj­Q Ŷ+ËÒ•UQÕÚ:f9%ÄÁ{cŒ.+¥”h™û¾o£wÆ2Bfé˜{a•³Ï3úv‡Ú2©.äMÛo[ïc`!­Šv1FDÔNcYpÛ—ÆaÍâD@éùtv÷îÝžÒr½‚R½uûdZ•ÚÖ“òr¹üõ“Ç/Î/ú¸5º@ÃYdAƒ1e¢kU€Ñ‚`äþŒôÔŠôHeDeљҠFMZ欔1&Çd´qÆ °(ÄB›•- r ">¥9ƒˆ|¡'|5˜›lvÝ\þ-ØxM<þRþ­¦£¯ÞöÅ.”'¥VYQé‘[2g‘¬P§AR¤ùáQ$‹ýƒÓÓ“ËóŸ}öñW^œþ¯ÿüŸûf˜M¦?ûÉÏL“*…àIÏ&óC;I/—o¿÷Íw¾ú‘¡¯~óÛ‡è~õìñáé[GËÐmðj¸7=ŒëÓ³îò·ðÐ ˆWàR„®’²Ûô:ÁÁ^Mªý)W\Ì-çÐ\\¤<™.¦TjcÌÁ|ïÍ“;ûl~üÙŸ¿ÁUu lŒà±g€H¢µF« b ±4š}( ݺu¸Þ´-w)÷oí-DÓEuxTÎfÞ~øà­7´ 1úm»õ×Z£Pß÷¾óYSJÞ›±C{I9uY(o·ÛäCîEä½oÏÏPëÖ7C !"bÎ]Ä4>v­VœÒ0¤cÈšÑP€B'2²R†ŒÖDd©KU”¤mÌqôÆŒÄ/€Œ#Ä9´1¬®úœsˆC‚A4B×úí¥ÅÍÿô?ÿ÷[Â?ÿáÓAñ?üý¿ÏÛág?ø«#ÁÕnÛßyôNËJéId÷ââ–Åoþ½ßy¹¾||þrzTìvCûä“ÏJ½û;ïÿîD‡êáíÛ“Ötû¤>Ø›~zu|R<œÔ  ²ÌŒ÷&·n훘\iw÷Ëj""Õt:™Mg³Ùü šíï5Ív/cô1EU–N˜¯N_D€ùþ|ooG‡T£CÌÃÐÇÀ)%‹ÊäÌMk“Ù¤°õ´^ìÏNîÜ~óíÞ¸ßùþã>žÎ'ãðƒˆ¬vDº,,^]5HZ)ÅœºnèûÈÆÀËËóa®qKr}9”RýÆK©µF­˜©u7Œ×HDµ"£0†CÎ)'‘ ”3!ùœQC`–40BbI)m»–F¿mf‰Yç(ÐÇ…ƒï%$KX¡Î!ä®ýÇßûÝoýî·þõŸÿÙ¦ÙÆ¨Ñ‚"Θ„Sâ0xE›¦Òvnq>žÕZ“DSãbfŒ!eʵøï˜ß8ç¿q¤ùªýBÏöÚôåKq(×€ÒõšÑsPÃ1¥œD˜4á¨3 0Ú ŒôUc]UUâ½WEÄ9EÖ§oß>>iº°Ül·ËÝn×n— h¡º–¸ÁmO!/W»'Ï^v­¿urwñ쉵Õí“;aÕÞ9¹urräKw  _÷SÃÔd€`óøãŸi­Ÿ]äéüVUœZNÇóÉ{oÝóöƒ¡íaz|2„ ÀÓɼ,+D¥Ñ(å½ïóïìGÑ$•ÒÞþþÎÇ·nÝyx¿¾åf·ëq®0-+_TQoJSÞ=>Úß«¿ûGÿÍÛï>êû~Ûï¶ëMzcÜЧ¤ïR×u£óVô©BdåÊŠ´†¡iš”Ò¨3Ýù炌”+E9v­!£Ad!uE-®µ”RJ[PŠ&úRJ1KΔŠÌ]Ó…ºSJ)33ÇœBN] ˆˆ F•\L£LYJÎHŠK•²*gª•›ØÃÓŸöaKÄÏŸ=^=æ2|í{“úè»òÞ?ýgÿËá½{ÿé?þ—'=Ó|ÿãG¦F¿ùÞ££?øîïcÒùÜŸ¾Q>|p0CTï¼qçh¶ ~zöÙ³—络M5›ÞR ¶)?þì±ýñÏ¢vŸ={»Pê™ØbQ.jWhPY83gN,¢ˆ% !ô=…Ä]ÛÀ±èœãȾØgßö¾é˜¡t•+ ­l&È9û®Uˆâ{,ТT•3Ž«Â”E¡‘)#V1©k/Ùë•âMeøj'ñª˜ü›ï·"óõâS^‹^"âˆÍAD‘œRýqCcÅ+"Z•ÒÚ2¨m¿efPÊ‘"P'ûG_yôŸd³ëv»O£ôÒüà$vÁïbNøþ ª³ðÅÕÕ®íëzºÛ67]±î6g—û‹ƒºœ p&Èöå*<~ö¤ï—œ;­üóÏžï/|798yûÎñ°7™=ºwüþ{o.ŽÏNO×»nÛu›õNçd5é•Ù%?‡Ã ±ªJIiÑ{?ÄÁÇh1cb»rŒœ×]³ë;eôf³ésÔŒÖ|TM&Ç'Óbrt´wûÍ[‹½Éjuõìå‹Þ!ūͺëº>¦qÛæ‡8Ê™õ}¿ÛµZu=QFÃàCPJ‰Ò"2äXUj-I˜”®&®,¤²tN#iƒˆ!³„’2&°ø}JA$¡bA\oÏRÎ#Ýn¼È£V6çR~Õ›p†ÈÙV5"*P„¨@!"J3(‚ÊÔ$%bEÚ (•¿õ­o–“J‹º¼\ŸÛLµÂf½ì›æèäðïî}ãwÞ{sRìº_íßûÊ€a½[žÌÂôÅÓ'uAD1Î ]EÎ]HKö¿úôã|ô›Óåúl¹.l½j‚Íð›ËÕ²?ýìñÔGO?;_n5ÍLYdð©ëýзcÝB@föaèûÞj¥”jÛ%çBYºÙw™2bÃŽHY1*2ûÐk­Hi­Ñjb‹yYîMápx0Ý[,RJmÓ3ˆžv2Ñcœ0*P¯‹‚¾ŠÃ1óêûŸOnþ+ƒÐk›â›vT.¿&¡k 0)£”Rcœ ŸжÏD>gY6!ôÃv—0­˜9vùÞÉ}WOÏ×ë~àÙtoUíLç«——¹nßÞŸÏ ’4ìÚ>4ýÐ:gÎÎÎ.?;+&Úçó³—‹;G1w¬‰sÖjrÑ¥ñxquvxrøÁ7¿ÎG“__¼p^GnÝnˆ3Z)l|{¶Ù¾¼\ƒi®®VýÕ²Ù­\¥>øÎ·¾q<-µV()õ½ï†°õCŸb;´«íŠÎju¶]ùœªÉ¤ïûèƒ5Ž€s ÎÒâø v…µ*±ÿù/þòâb»Ý“© \­6ƒ} …+•±"¢µ¶Ö&"Ôj- ¬“ffWز,E“Q±šÎ&hL×™\VV#³Z‘”R7 dÈ9qòÍàcî¢!Žk „u³Ë7 u5Š:¡€¢Ð2Š¢B¥•(MZ( ˆ H®UØB𬠣Æ2PìwÍjµÚn·0-LÂþlyv~¹išw¾ú•ýÚ~ÿûß×ÎÕ…»}tptptüàÎ[ßxÿôüü/þìÏšmûöo+²/—Þ6r¶Šë¦ýø¢›|vúë§?~ñtˆér¹ž”“Ó‹mhûv³ÖJËjû|ù£MÛù!“¶]ë7ËÝ%-¨[mrß;Ò9¥”c‘Qè­GÐZ·íNk­Fû¡ÙQ¡´"3ÚE1ç!d€½­”°hB BœKcf³?›ÌÊ"„ã¬cQßH»"¾&îô*ÊŽ(üVã'"šèõã_øJ·FD…¥$‰G07h£•ÓZkãŠò®ëÖ«f¹Ú5»>„À ËÝU¿k PêÊ8›ÍêÙüðΤ2õñáÑb¶˜ÚÂ.¦•›Ì¾÷¿?¿UûЮήöNŽ@…¢P‹½)õ÷fG°íC?Hïu©”V*~åÑ»ßÿ¶Zn¾þÍo~ðþ#ïå?ÿëWç ŸªbÑ]]>yú’̇ìã—WçË]àÞ›mêš“{û£Ý‘BÚµmÓ¶ÆZeLHªI=í§ °kÚÔzE¨–hGV GtJ»u)\½|„L±íú¦÷@4?:v)#"Ðhµ ¨”¶Tj:Ò/­1ÆXW:ç2RJér½ÑUÅDÂ1„˜B€|LÃf‰Jƒ÷~ˆ!ç‡ËõÖÅÁÞQ—r—QOOÎø?þó¿ÿýŸÝ»wß?»¼8;þbY5ÇÍóóÓò“—“ƒƒóÍòªÙ¦,“®SÞì–WWM³>˜/ú¿8;ŸÖ5ªíÐlš¡Ò<„ÜìjãÆ¢lÌ%ޔՔsVB´%KDó(fÔ¨xÈ"(‚œ²€QáLáÌûSŒÁ÷ ÷Ê¢Ì 6M›Rbe(äÐn—oÄÍ¿L¯0_Ú[¼ž {›ÿêcð¦½)hµÊœF]GSZÒºK1tÃåÕãårs~±]¯wWW»årÛ Q‘Ùu›Ðö{®¢ Ä[Ç'û·ú9@Nƒ'Ε"CùÁ½;{ÆýýïüN}¯Z÷›ÍùR»BRVå›oÝ5wî|pû­áb5-+a.Ð6yPDƒÈ@ѝ}-ŸoÞ|ÿQ8øéFü‹Æ_¶)¨v×=åÓ–µ‡â¼õ›W sc'ÓÙ­7îóÛ_÷ƒwlQx?L¦{èÂw]ßšÂg›¡Gg$†iU‚ÂÔ :eD’]Ì4ŠPŒ3qÀèQX1€êº ]Qkª¨4Wˆ´Öj=Â$I¡± DF£Ö¨ 1ä@/ü sJYú¾|dæ ²\m¶ãÞ<¥D€Zk`I)-¦6gd@ÔÆ!ÝÌÛ0æ…”»Ø›”KÖm¿Ùµ½rwO/ì"­A A/Jˆ*€FÌ0ý„É… Ý•£*À©£é|ÏÚEaßÿÊ£ïýƒß?¼wpÖž-›Må,¡bæBYJ©˜’-ì0 J)DB€Ú8Bƒ€‚zˆ} •(k’@ë{!.mA€Êu]‘v»¶q®œíï)mÖ햙ɩ¢°¹iv~è©«å* *hÛ~¹\>)[8aŒ,1Ɣǧ$ ª@ ¤Œ1UQ‘Ä”Gƒ@%0 ¢ 3gÑ£Q&~Áü@ˆ…éFÕR@Gh¾¹ ˆ¢R6ç8ru$ fÐNW•ùþ_ü•20©_{︋‰«é¾q³Ç/.f{‹OÎO‹ÙŒ »fX®þú£g•+›¾KÂUU}ô›CƸõùåÓî鬨BÓÆ6Wë¦i2€Ž·iSÍJÅlºdLÒF«]FÈXp6`€°BIJž\{*hR˜Cö>¥ET@ PI%k«2fÅ4ÚÄp@$‚¢(¥ŒÒÎèœ}bÆÞã&®.4ó: Ô¥šZ§ $„hœF­(dÎÂÀ„x­v>ª^ à(7v£c#¡?b#àÚÇBÂÉ2sP)%ÂYù|kZ_¶K§­«°mã˶ùO?øé_ÿò9I5Q~×MûÚá>äR(dz½ã½.4¦0'÷ïd«iV”´ÚA$tÉ©pþò|Ϫ~µêž~pïÍŸøøäò¢êšÃ㣇ûŸ}؆Ý|¯:={ºç@)§snDpàé'/7—Ûõo~¹ò¦*ªÍP¬RuPº(-Û®·ÙÎ帋GÓűKý­½ÅwþÞï¼ùÞÃÓÍÙªß1dͼ|qvõé“"£%8›ýšë:i~ñâ´"s2›¦® CëœÄ(œbUE£¼zaqÕuÓzJDX–,’Œ€F‰¢¼C¡_ !„p­F|¢eŸ2\ RÖXKD9q¾FòhgGÝxᔆ ”ÒÚHâèUDÆàKf–ë &c4JT Œ1ˆ&§ë½"‘†€Œ1`ŒEÃÐKöÖjáL…s˜RNÑ(màÚ1Íd@è§ÕYa¼ï.²SSb’ˆØù#+Leœ´OSVæk–]UU=ú«ó+`N›®éf弨'v™+]çÝàOTÖ®pŽSˆ9fbUé© ›“ïâ0;˜`DH¨µ¹öo0"˜%cfM¢ c­áªvãcHk-"…-‡¶Ù›ÌH m%j1›Q»®5HÑûv×Ϊ:&Jm¯vËæðÈZÌ‹yMJ]nÒ£SF€tU”0@ƒ7d€…Ç '/øÿ†v0oèö×%žÔz6Kýv×ûaM}úäç?ÿðêtYiKlœA°¦(´› °Ôu]Åâh1•éý¦kúMpE·ÛnÓvë•tíÂT*"¶!*c#ÚÍÀ1qÊ‹ÅâÖ­;ÏÎ^öÕ2BU>zÿkÊÖ Àv½ýÿç¿‹jfê#…úÍÛ÷nIЛÇ&µ¾_wmÛõAk´¶(]uy¹¼½·ç\yvvîì£ÊÙ "õ퇈Œš´V¶(*. ª¢K©.œô¡ïˆÑY]U…(jÖ>aj}—zOÆ&¡Ó‘y”t]Jë 73Ë ó“¬©Gõ Î(QÑj-¤Q± Û¢ˆJ4¶k!9aBˆÁ¿Þh(¢±ÝÕx= È @eF0‰P‘䜅€ˆs9©´R!LlŒqN+¥ª¢T(D4z0 Iß÷}Û…0¬×¢Ú{ŠiðxZV—Ëm½jÚ>„0™Íƒ÷Òt‰ÅΫiUæœSŸ9Åf·Ñ€£,¯Öº¤QF};R`­M•Ò×µ˜RŠ2^Ï)è‹£þë øJþK73¾þë7šÂÆòþ IDATuC/™1Î9RRRJÕÖ*£1ã@®å"yž`æQº µÖLJ7›]Œ‘œ†üyÑq“Þ>ÿÿ½úËõöâoI{}Õ1®¤V9$a¯ma³¼üÁ_üâã?QTU{F×óÉLa:«nf¾sûAa:s™ÃéÕË—g//7«é|a ·ÝîšÍ _è…q¦“´ ½g±)[k뢑âd25Ö¢14©7«Í>üÕáo|]éªÀ³gŸüâ×>»{ß•DõÁ¬eLIn‚Õ¼¥­ÈYYe4*ÐÎÇx~¶üË¿øÑì¨~ëý·Cç}> ‘’…bHCe5ÔF›‘ã@ºÑ–6 $¤>¦——«Õ¦%gLQu š~ÏvºñBÝÝ,E…# B‹ ¤|ý´ÃWØÅ#!Œ@Fïk–, Ü…^èúä5Q’¢(^â^]>N8'¹AqŒ£8M µV@Æ¥TÎdŒ±Ö¦èl]:[³d6šØÇaâ2‚ˆô}ŸsFmÛ6Mƒ¨º®ãÄœr¡Êm³Ú${p4W®cU–Â,¦3˜B?­MU¨ùôùÙù³'O}ª¢Ð¢‡¡c4 µ²ªÉ,™™µ£ f!RðÚd‘¾¸`û|÷Æ <â·^»Õo^ãi”ŒÎ™mÛäÈ“½ýÉd’|à”4QLé:R)6:IL’†aHÉåœÇÝi-"Ã0hNY2SÉB†˜ùº“Ø(²ñÊSþš<ñæÑ6‡¯í6äÚ§ýzÑ5n7¿xñ|µÜHÌ›Ëí‹Ç— êãùñ|vPØrÿðˆˆÊÚN§Óm»ö>®†¾mÛž@Âh¯eªÂu!xï›®c?ÌŠÒpÜõýgçýñ''íáÖ÷};dTù0ΫY×  ó½c¨Ê/ή~ñóó”ªýù²Ÿ¼\ÿ›ÿýßB?ø«Ôµ)·íòáÑ^È’…P•`Ê$ŠÉ@Ö}§EµÝ­SJÏOót99yó®3JŒa9‹0ÆÄƒ^ã9ÅaR ÖY­UÊÌ)U³ºïûÀyçÃå®;_nLQ–S²eÅ8úc‘¶f”ixu’Gt‚³Œ: 7Oæk³ÌptþÌ’G5=D)¬½ÆNÜ ®1ã²™éæ¡‰ˆDP×NX]ÇRZëBJ4b¸£g¥Ä*ɤSH ™SÎ!ÉîÝív ¢BÛí6¥DFûn«\ð E;Šah/vµÓåâd1­Ë &Q)UOKDL<¥²ÐGsÉéÙ'¿ºfq2Óhw›èkÕ"!IQD$‹àèNÃ(#|€AˆxÄS"Ë5yõÆõzŽ3€º1óÄ×,7nî|B¥P)Ô‚ P$ù€Z)BuM^“]ÛÖ™Ô“±4jóQã³I[í€Q²¤Lá¾”ýäu¥™/&ºWWëõ±Í˜!Ç®Ž•ÕØ ¡çðÓ_ýry¾‘HýªsTݹs2-&UUi¥”¡”Ò®OCŠç««¾óZmc•}æ„cÓ]õQbçsŒ$‰Ä—WWô©¢?U·o3Éår9]Læ“ý{î;çž={q|rg~p¸ÏÒI:½8¿øä×§—»Çgmè‡7_6§EÓ:f•»7™]ÅõªYg4¬\Œ91–8øUh³ïOŽ­S¶T9…8›N»å²ïº¦£T’¬Œ6VÇ¡o».“*¡@c¦¶î”?xû˜€¬³å¤¬&œ‹q$€fÈJ&å@åÜ+$%×µý¨Sž±(q´yÇÛ ¨Æ$ ™ˆ £f.K#£iÔ½U–˜#p6cˆ•RÖgP$+¤±²Ê93¤¬sæ}J©Ý5ã.&„ÕHæ`HYD cµÂãn·Ë9ÛÂ\—Ö*;SCF`2q@•¥B;/«¹«æuY• cd!PU)Uy÷øàÖÁbØ6†‘ O&Uß÷€<²Ú ©ë‡QfyU‰]ß±™…Yiæµ;ù:uP¼nÁƤGêzúêèk6 $ö®r”‘AB„hùªÒÅ”@©”’ çœÚ¾‚Óz1¦e¥µÖ´Êˆ¨?}ü™1f6›Xk¯ëÆ›žpü‰¯×¢ãs÷õrT^ÃÓÀkôˆ±xõË‘Ušïß¾u÷èþÅ‹Õ'Û—ÆÎÐN¢²»Sj7¡†ÿ‡²÷ê±,ËÎÄÖZÛwmøŒ¬¬,×UÕÕlSÝMöNƒ0d éA€ Лþƒ~„y”æmôF¤ ‡#9ä€Õ¦\—¯ÊJ>®=çl·–NdVv³)Žö[ÜDܸg¯½—ùLDÖëí†3–NqÊófy±#äë‹“mÛïìí3¨5Yë¬í}ì|8¿Zrïäñù:'rò¸©Šã½Þ|õ½éîfÓ¢Vº4õ´±€ ¸y¸º:»xùî/Þzåý÷K5í—Š»þ…ñŒ××»£f}­2’—BS²` aàTÖÅk¯¿vëx¿›ã»·˜“ähî·Û®ß’BR8F¦„YiGˆž”5¬sDÆm¤8fa­5i’1““R ™s ’ µœœÖƒWÇðÁ²ʈY ÃÉr£‡.„DH‚ B‚CŦ”0÷Y#fEÔ”å`a]—å`^=P:†ÌePãÞ¬ÖÌLD‘Sîû>…(ÒudN)µm+"†T1d¥Pu]—zO„SιÓFÓ ŒÖ%kAHÚ:ã„„ DVªÖºr¶4z2*Ç£j:‹>z椬¢¢HNÏêjR—–8YcÀ(æL„ <ìI¥EŠ0ò0€.Q)h8ªžFáS"ž àÀïDA…Cþ¼ÒM¯˜bW* §C_ºÂhR2F‡ÐK¾pZkm›¦QÖxïW«•u㣨ªîƒgD5MúÜ#âwñÐMòÊaÖ÷,ÿ¾jp¨ûŸI¥TáÌȨðƒïõ^ý›ëŸ7õÔšÑõ¶ Kö¾·½÷FëZ9”Â*Õ®FZx(c¨íŠZù`MQå,˜€@)2J;Fwµì•pìàb½xòàÔ‘ÛŸí>|ò8y¿Ýn×ë¥q¶¨Æ5³ÑÈ…äJ’Ãçû: `йOŒ!´Lh«ÒÇ>s$¥ W*öÞúÎëÇÇn¤LeN×çD(’¶›•ï6³f^ŒêTUnZÖN£±©ó!•¡¨jáÔö[Œ  m­1œhÝ1gÌ9ú–R J˜A# $Hƒ) `Œ®ðf¿‘àÍ‘HšˆªÔ 'M¤ÿPPD¤583½÷"2›Í†-R×õÐûJ•cß÷àŒ[­6o¤ô8å‚䌈¾ë}Û‰rÎZkÔ”<'kR–|î¶ÝbÌÀéL`PU¶a @”D­!" ±5Å>*JYÀsÏœ”h •äqU–ÆäÔ£±Ja×o‰…‘³d@Rx“˜|#€ô|‡è¹ÜnH†üìNyV jLϪÃA"T„@„,10$AæA²×bkEY”R9¥A¾€‰ º®ƒ5Ö"bŠBZ%ý;?x{½\V»²ˆ]DÄ )þ¦:èo¬géèo¼þô}Óà^ðLü×jÚÆãÑÏ~þÙ/Þù™+÷§;ÇÛ‹E"­Œ"Œh•!2HuQ£ºîW ’çC·eö¾*ªáO>ø¶oµÊ9u5 ‹Œ£¦¶Úu«+d*]5ŸÍ–W×ãéÈS:ãÊbww'ö]Ùø _»êþðN³j"†Ÿ¿ûóÃ㣾ÙlÄRYWì[È(FaÈñèèàÕW_v…^lÎWíuŸÚÙÝ;Ïž¬V‹ÐwÕA¹³·£æ3:˜B]“.ÎNN®¯®|Xû2)aDtÎmú­µÖicUÊ…5´P@ˆP£ÖÚÔ €V¨” ì6¾ü ¥¨X†ÀÓZc´VÃÔA)õ4EDÔÚ*…ÛÍR+ìrôÞo7ºmÛËË˲,CƒÌÀ]×@eëóókŽ04fYˆÈ(]¹"HBR¨ MX@ pÌ9&ÔÚ’¡²rÚ ê'!xN9w”!%rR€Ì) !$DÉ;ߎ' b…¬8afdÆœS^®Æ“£ƒý{“ûžõ]ªêqYŽÚ¶U8°ID8 2ÿi'“ð)‚r?ÈÖ7åà³,tØÄƒì‘K¤þV¢ˆhe|߇JPôtÔa­ k-9C P(åÜn¶g—Å ·gƒÖ¶sN¡j£Ï9³€^n–¦vP¸XèÔIŒa`.ÓÓ¥´ºISáèÌM{GéoÚ¤ô´xÞ¦\DˆEÈ÷1¦uëÛJw«“Ç/ŒÇã1àftPïsG”JDT¥Ð…´©¬Š±Û„´Þ^Ï«¢t6÷4²FPÚv[4EßveaT£ºÐµ]lA%Ƹޘ·ÕÚ(¶ýâ‹Ïÿå_ü??øÉnß2 Í¢{Ñ6Û>­žµûE}*I#óþññÃ/ïùß÷Ý“ë“ÝQåÊâëû_ŒÁ“Çû³½yÂIÿd³ºÊkNy·Ÿ|ñðúÞ¥ÚŠÅ‚PæÓ[¯Þ•Æ=¼:w#œÌT®¶ýª,´J`¬ëíl2ÚÆ9O­ž•ÕýÍbÖM3.5²F±J„„,9æÐåÀ®®$ç¬-)«˜ÐiSê"ú@DeY¦Ä›ÍF’*Ê‘°*ËÒ{ß4ïã“'OPdµX2‹Bbïý¥[ômwöøtR5Ü'-(ëõzÕvÕx4Þ™u›È«@ˆœrNµ®‹R)È}¯A5¤™“ƒB””S6 “pD29 XÕ£ æ³lôÙ;ÒZ©”‚mìj»­G“®ÌXOSè}PWgËã£]å((HoBE ¢HÂÑÑ‘¶åjo]„Ž 1Š’W€2YE§ŒÃÈ H†!€*æo.g— Æ £pfFTJ¡ÑhHLJI)BÌÀ>?©ª#L¤Â.xά-X b&A¥£Ò›Œç×ÝÞlž@%±d‹ÐzÒTV;m$æ³ËÓífU×eéì0â-æÜ÷ýЇgZnˆø›N¢O¯u­õÛ¤”8å”"*ÁÃ[}L—«mxd­3µbï —2˜šA’1Ƹí: dÈ‘#§¬P”Ñ!§3F s±Û¶ »„¦Iív^UuÕ`Üœ_]nºöj±8_,Þ}ôèýäÖFK]qaÙðÖçE¶*îŸ_ãª;ÿèþç}ýIe “„ØÅåº ®­嬱•-«—g£édÓ¶m× ñ\2õ}ß÷}JÉÓ4M]ש²˜‰…Ùl6›Íúuo­u¥%a„Ðu}ÁíÅ¢I‘3Ú÷ÛQÓ8kÛ¶)ìîîj­û““ãÃ=DLœRJHäœC(6-eEB±M¾íÚÕ:%^^¬8e"Z­ÖƘâjµrÎ%Ÿ¼÷D:¤´\¯”¶9¥t~éG“Y3‰}PJ5E¥µEܩʲÎòW„™ˆÓ Eø˜÷pÓû ¤ÞœP¥Xmž³öEŠˆQJ ŽR–Ô÷}ß®µÄ$/‡RÞ" ””!ä”!;pØ¢]×) ÅÌ(@7WŠˆ0#â 6ùï¿RJ Ä` ©!**Ë “ˆ(DDc±A)¥Ð â&ÌL‚J©‹ËË”¸IbPJcËJërN9ùœBÐJ£ pѼ÷Ѹ¬s–”Âòòb2›ŒÇckí0üQ7í2xÖ°yŸ¿5ünêÆÌœòps’VV‘²F…åW¾úúäÜ v÷§“½Õ² rí}ô)"¢AdΑ‰èly)– …†Ñl¶íb’”Q#)k¤P¶œÔuÝ\^n/Óz²3™û;ßÿô˯ϻîR³¦PØÕ¤Nû“G'W0ÑóÉίžœ^¶kÍçgvêbRë½vëåqm÷æ“QUîÌ'®ÒÍt¤­q\PisL³ÉÔú¬ˆŒÒà\=jªªjûîº]\¶«bZWUe­Ýl6•²º™„àCŒÌZk­Jm'•ó¾Î¦hF×Ê{/'ãY¶emšÌæ>¤ã@ÏM)E›ŒBßõ‹‹Ký” cL) L±Aífu½€¡Æ+Ë WP !­|r€À$ Ñû ´©›²Ð&¤)1B¾9m‰IH@23 °<õÉzöxSu!*$&bÊ7Γ‚‰³º›!Ñ q–E822=ƒU)k J)yïCôDà”#"@ÍŒVÆ3‹¢Ð ZNñ©©)íC¹Ù«L¿¾Qÿö¾}î{ÌŒÏPwò4wM)hfN7H˜](Eš€sbfMH„ÕhBPÚfN!§Ä˜…·}ŸC–”A©¢R@Šôû¿øàöþá­ýƒÝ¹ÍÉéa(„ˆ!„Ä,"EQ ÀˆgÂ{Ý`~‡=eÉ,D4xg£Ñd,¸úáÙâd±t®î³¬úþáÙÉý¯×Uå»@Š!å¾tES¤±šÔ ÙbણðÕ“U»ÙÌww”s–@÷1JÖ¨±r.„^SÎíÅåõ½GÕ¨:®¦‡õì­—_çà…÷Õ»»…ÒU$FãN®. püì㢠¯Ï×~{ïÞçSRoþàÍŸüà{‡{ã¦.¶ëKëTßo¦³I u]bMJ)­õòìêììlµZ9¥›¦™L§†Íªës¬ŒÆõ|>€¡fLFÙmØ ¢ЦEÅòš¹¬š«>´Û­ï{¥õ¨nVëí¯>úÄ(MˆÎ9ÊÒ¶%@D~Ûv«ÕFä¦?^×uá*D<{t:„«R D$ä¾o¨éÞ4Å @쨘(¥ë.øÄ‚²0£°CRŠà6zÆÁ!T8KF†’ˆ€¥Î—óIº”RY–ˆè½9ßB#JþæíU¢ºáòüæMH„B $§9C 9vù³Ï¿:9½œLäÉÙiUv'ç§ç×§>ŒsL˜8øv\7U½_Ž*¥P$w××m¿=Ø™í’BÖjѵeQç¬K zÈØ§»n¾?¯Q™’âö•ÙÁ÷¿ÿÝ·¾õ$h@ÿèÍßyçý_¾õòkG¯¼Ü½¤mùûeùáŸ\+…€#Êû¯Ü½[Ø{ï½0ŸüÁôÒÝÃõêêã/‚OmH$È•Q‘s¼D•sîd½ ½WHÊ[8S¸ŽCVZ[ksóWï;ßCÊ 2¤ì9)B]xâ°ê7ý’IÆqˆW'/½ö­ÿøÿGW«åï½rrREå ö±Ûl!e€Ä(’õ æÒ)FEdænÝŠHé §œ"ƒ…Ù*=5e[1Åôptx÷8¤ôÞæ:¯Ö«Í² MNçœrŽ…s ©÷H`èÕâà*7$ "Ê-zû Ę…H²0¤,À¨Hxpü œUæˆX’#Ò1ÎÈÌQÄ!æ.¬V«´;-œ5ŠˆcR¨0KÂÜ÷}Èi0c]®)%‚hð›õüôè·DþÝ*¸O9}7®ï"33 C! ƒ6RŒ9ƒh䔸&04‘"•ERÌ>Äœ„ éà‹GcãvI¥‰9TÝxh‡Z“ˆ®š‘ueÈi±]§k-ƒ6뀇ÐOgGð4£—§ Cy^wTèé ‚rc… ŠZuvr~úä D 븩Šã£½ºtçççÖè¢(P =ŸÍ^|éö|wîMèûî˶Ëó6P•mªjÔl·ÛÜnÖ§’rU4FéB¿Ø–hƒÎeŸ_˜ìþÑO~”…mkgç÷üv¿YÿÁw¾;Û߉-@X¼õãÞÿóõîŸþà~Ü_.ßùâW>¬ïßÿêüâɸ֟ññg÷>‰Ùhµ7ÝiF#qºÜÅ µFÃ5øÔ‹HâÜ¥9+§EƒO~4®§³ñéýÓõzm ëÊ¢ˆ)EΤDô„ëàóz;n&ÁoЇ1éï¼úòòÓŸ®²ç¯ÿòûÿ‡Fè×ÛØûUNú^!R¤ÀkI!A•BŒ1îLfÞûÁnÖÐ`0š›¢;E'Õèø•—^ýÞ[WËÅÅõɃû¡Ý®¸ª+å2H`Îi»Ýš¦„È>‰HN Iëa´6Ô` BD‰´VÖeJ9E"È9#àÍO ‰³ÌÂÄ|WW£Ì¨mERˆ€Òu™”®*§ y@„#*„8d‰MÓŒÇãÓó% è"$0烤-áà5ökwßß{æ‡Ü n ôÞ§”„ÐZ@…%eBI€ n¼’P€³ ’HJikm±íSÛ{Qjy~Q¿pàE*a’@Œ!ƒF ÖÁ'o³²Y#Ìvvæ{Ó¦iB '>E3?q>…ÈüÖãä&ŸE‘2Ê8k\“ü¥¼sxëÅ;/íîìöÁ¯V«ýƒ©ÖzT7DƒošæöÑa3Ž&›Íª]\=|Ø…n!¼ÜnÆM£\Ñ÷ýjµY.—eY6Me”­ª*…h´QhŒ¡±«ßxóMPNk5U¯¿õÚx윰bÐ ÐD€'ŸU<Ù-\Á¯ýÕ_ÿùôª|÷“_ž=þÕ{ï®» CžìMJÓÌGÓ¶ïXôÀ¯m۶뺮ë®Î/$„Ò9¥”v¶*h„Q5EÎýf³F‡‡‡‹“•hmªªâ5EÅ!1h$¶›Ê$¹½·÷õ×Ö×KWØ23J‚ Â| É•uAÏ÷v e¨°l”NÑ+%¨Hù5"uÁë‚DáÕâz¶;AÄår¹Z­ªªRÆ ‹arøÍ¥ÿ·&„tƒÝ(Œõ)&N9çÈ„¢ SúâÓÏ.ŸœîìÏg‡û‡/¼ð‚ç´^¯´TQZY¯—ˆX6N(ÇèXˆÇ$ ˆ¶p£Éäá×SbÇ{{û·ö»mÏ™ÛèKP-HÜvÝ:ob?^]ÃÁ$c^ö›WÞx¥*œ’¬@èB›·VÕ»‡÷«ÝÊŽÍôÎÞ·^þúË¿øðýÃñäáç÷öêrtk~|÷èÅCÌ[…åh2¢¸i‡¤Â9W•ÍÎl6›Íš¦éüÆÇ(-/×§8kv‰¨ó} IUÊbp«&†aëTÖ¤¦.@§õ¦d09..«Ë‹ ÊšsڛϪª ½/•yãÍouËõå“S¿íØçÀNö BÄœKºˆDT×¥V8nÊØný¸q/ݽõæ·¿å¦å‹/½³oûm¿XmBk c•M,ŠTYW„Š%2`bF&Å)£‚çÛtJ)cÜ6xFÌCï€qH²ÈÄÌ@± ‘‘¥ª*çœßlB9BôA‰óÞ/—Ëåri1;«•QÃïºM ”²V åR*Óð]bà]7ïèFà):ôß/tިΠ0$í¬¤§ƒ~A RZÙž´2F£>DN‰DðøøxکʦO‰HOg;Ñw•CmM–ÌÊ­µVÚǬãfùÆ÷ÞJn¿°¿{¸s>¿¼Äz4¥Ÿ±ýa¢=ýä )JAʘ ÒSØúµ±E»ÝT£© ±£fú‹wÞûêÃt¯¾txüâìÎë›íE߯÷fͨ2’Â,JWÚ\µí R­›mýå’;.‹QÛÅä7¬íºõ t¿Z†¾WumtßmP8f6¤./®ÏM¹Þl<>¿õ‡?ï•ãCج”q€jÓz3šDp¥r é¯ÿÏ?ys69 ÝK/Ü©Ï.Æ?ýé'‡÷¦óQöp´7«Žw'{S·i×dÛ4eSn‹º73a61Ð:óÞíy2ÕÇ÷¿ÞRˆºß®[î8tÑÔ­ýÝ àØ»éÔC+"Ƙ¢¬¼÷¾ui­–‹~kLs{ÔD ;ª¹³W½÷Wÿ÷Åz¹«ÒâÝÃØ®›¦yéÕ£³s¨o©ÇËUÙ;‹…2Zƒ:#YX˜QY»îZ£´Qªï{kŒ$Ü/ö=¯¿uëî?þéï°ÝßmûÝËËý[ŒmNEa ƒ2t(‚l” °0¹ª¥  (¥H!bJœÁhUP±lŠy³Ù Î IRTS¤Ä¡@˜˜y(*¥.­ÑB‚•ᜪ¦6¶öQ¡)«m¡c=¸lU‹¶¦²*Æ#5a]Qot‘úb´J;C"’Ћ!‘”ÉhD !‘±3tÁ—E•Š¢ˆ‰·Ûíà+¾\m꺮ª*Æè;o­¥×ëõD1ΊǨ­iš±«yÓn·›ös„ÿ IDATå»wïßÿòöí[½ß¦Îë¢ìûmìV£=•c(ú¯ÿàwŽ5Ų€®k·XimÚ˜¢Ö/¾ôÂÑ 1‡éÎTn`jò¬ úü4âÙýì•U(¹ICy˜ñ! ‚ndMBñ1Î%Åv}ûøîÛ¯½òÒk·^š5;Š•ÊÊÙêþ—¬6£ª)£UÙ”– iS=|t¶^n–›îz¹ñÛ06…Ê‚DL©K²h”e†AÈ:SJ5lyú«n1@c€¢›ÏJ4€*F£àÉæZWvLe¿ ‡Gû¯Þ¾}0šÑ[¯WLߺý‚³Mì}NiR»ÝYc1¯C MŠ€mY4“ÚÔåâôêÉâRÕuê㦋_=x|Ò^.¹NÆ;“qÕ#3í¬®V{{{±÷ÆX˜$23g Ôe©‹¢Øö*rV¿ðÚ/=:{ìJW5ý¦mô£ß]®»Ó³+]Øzgº·¿{¸ÞkÃ"á¯KrÁsõ>UO®,MØoW“Ò~ûÍW^¸{ì!ììMvæùË{Õ¬V/SÛ'N†0xf ç먛)±ˆÜôQë‡fD¬\á\tÊì8C2É+ÌW›-f$¨†JM!t{B­”ÖšŒR@¤Rˆ’ò€ÆÖJ1°UZPæ£uŨªóêà“Å BZkBâ§&I IiJ”Öˆ˜E$1Æ]Qkk“1ñ@éH‰;ï'³)ê…„¾ï™¹nÊqSIŽV“3zҔƘ4®•¦ª*ŠÊu]±^¯çµÍ{“[»ãœ «i="5vÚŒššˆJgûvçç—''gƒ3he­Öw_½½¸ÓǶªÜÖÆŽÏá3åÂßXƒ›zJဌÀ13“5I¸Í±°Úszrvöá'_ýð{¿ ªªë]‚:¦~½ºZ/–1» *¬c\\lz¿ÜnZóªo²§W›¶cÁTPDhº¬u"Ž9HDE¨´«JÓ&´Û«õŽó×ír:ÝY§˜%S–¢Ð}ò m½Š›ÂW'W ´Üù“/¾–ù’Rzû•;g—W)ÊÕ*,—}ʹlc·ÞöΉµ½W •ãÆC¾~öÕé“«“ËõåâóOliÎÖ×T©×~ôæ+®:˜×ãñ8 _oV¦pÎZ`Ш@‹ä< <¸úÀÌ×ëë#:úþß>ººuµYl|»õýÑ wŠr|½yÈWËîW~vqvzï‹'Ü‘Føµ¢ŸÂ#‰€@Ιnšj0®lí`2*€ûUºvv\LËl… (CÜö©ƒQš +ÖÏÚlß/¨ê3Ñç§ÊOÀ’"C†¤8†ì{@E (9s¶Fg‰@ Ñ Ü®‰8'€aD¨IkCš R·Z†ÞqH2h½)’ÎdmŒÙÙ™ÏçÓÕºcȉ³"Rh‘9Äœ€EA"ÔJkkh€ÈqÛùÌpcOº¬Gι"F[—J©¦,&“Éz³‘²0DTZƒˆ…3UU9{Ã4Š´&˜º0-nß>H·g»»»›õB)µ·¿S×µ³jhX ¢!lš±ÏÜ÷Q´^µ~¹^ù¾EDk ½°cKˆBò™g‚ž¯ã|}öåp˜=[0Ð×sAÐÖDAͺ(ŠÅzóðñÉ*¥`‹Oï\lSäÔ¶m:çœQ7ãæ¡ÕBð)&Î×ËõÞ|'÷ÐØ‰(ÀQÎý²ë×]ð>çÈ ¨•&M„,èC0eQ[)ÕåfÍþOÞwçãï~ïí÷>~ïÁ½¯^¼}šÄ¬QJ™ö™³dÈbˆ11gíôb»zðøA²p±¾ú«¿yçç¿øÀã«ËõzÝuÛøî/µ¾¾^-¶óñÄÇá››ðùiØ ôzmyfK6špÛ®€r­›-ðƒG_ýð+­ÇTh. c•""aƒ$IdP9| gˆN"È€xŸ£É‡Ù%9GÎ5N'“ÉzÓ*%þ“Q CŽ‚Ö:§Ý³“.¥ØiãòfcŒAçŒ1F©j40óf³Aĺ²ÖÚºPÌ\•ÆjSV¦r…³ŠˆŒ’¢(ŠÒY­îæè‹Åþþ~]Wóùüzu­”ª›’ˆ¡Æaâ¿Ø$¢Ò,1´¾O…ˆ.*9¢Â>ô9#çA:ŸåÏwbžOG¢Ð7Œ€§AH  ”Ê‘1”øòäììì¢xÙõ«Õêt¹nûΧˆUS IÎ9FÌ( IÙšˆ©e £5Ål˜‘sŠrÎ!ELº@Ä, 1õ¬-CòÙ‡Çûw‚ÄÓ“Çngr½Þ<>=¹º:?:ž—cýG?ýÁý_ü§ðoþâϤ ]¿=»¸Y§mÅBB 4ÍwgvÓ¯7¾mÛ«ë îïíhM!fßúËÕÕ£GO>ÿôãÓ'ŽFûw^|ñGoÿðåW_¡Ú³ŠK<]œ±Rë®ûôË/>ùâ³½Élg—C&¡<ÌD˜9¦x£UQW‹ë·÷œ„ßy÷å|RÍwÏ‹‡ggHëõ¢ÝôAK.®·–ܨan‡a&}“Žâsw”È@ ¸ Î ¨Fã(ᣯ¿þèó/w¿uëþòìÓO¾ L¡óµ.ã„F¶AfކÌhˆ"=wÓÞ¨ {þ›çY€,¡EŠ˜²hÐÊíDbÎ1p$!P µÖœóÍaÉ@¨&Î!F#ˆ³d4žS V8Æ€$ZS×uFqSŽ8çÄ ‘qFiÎDˆ´µV$sƒŒYÒZOÆeUU!öZëq1™ŒRJ»“:„`­vÎA­œs³é¨( É~2™ŒÆ•RJTUU×eeÜÞ|rþä´Û¬¶«…ѹ®5Ƥ:ï}ò1Ƙ3'ÎO!PfZ¬6}ß+cê±SÖŒÇS8ú6‘S!åÁ¸Ÿ¿ßžãtü훟1»opè˜9C–¡ ŠÚ«åõ£›™P/®.Œv–”vM+]È 3–õhÓn“1V3‹*ÅZäÀ¶kû>€ïC׃1Ö9¬ *—)å Êi0 hôήn`µXñG‡ÇG·vmS¬ÖýÅå™±¸¾ºXúõï½ý|÷Wt-\V0+ÆéÁéã¬^ovgQ»»o~w³Z\>~xuuJOŸ<9=yr§^îܹ³·3ÞôÛ,¹*,ÇzòÚñíªƒÖo½öÚO¾ÿ½Ã;·/ýb}Ï]—Úªœ¬×ýÕj½Ú´{;ûEQÅ.#ª{N•€œ2¡ VEU}òù½/î= §]Ìž\]¢±Ç·OO¯A›Ùt§_wÛõšÊ"ûØqoµ}æsüìé¸÷àËG…ª?þä éTI%F‰)#‰v cùçÓ]BõtKÜ'ˆ ÒOd”æ‰ ¡'L ”ÑDÔª-Hæ2 Š0)­­ÊI%à<àç7"2ÚV%9Çœ”¨,Ì Y„S`É,i³Ùx߉Ȧk ¦Ùt'3‹ 8ãŒE œWg4*¥ÀcJç´³v<AUU9öEQÔu霫êb»nÇu#ªªFÖRQJSß÷|=×;»“¢(œ¬ÒˆŸyïñƒG''O´Ö‹õf¹j9ç\–eÛ¶!yï}Û¶ÃsÙný¶ Šœu³7Ÿ¹ª.ëÑÎÞ®AïcY™½"E ž%ý¿‡¿±@á7%ÉMX À ‰—SƘiéB‘ñ{¯½!nw¹‰MXn†X;7®&Ix»íâvc¬1‚ܶN`ní$t.GQzwT^aê8¢Q •s6Ù ^Y¥•¡¡¸'e e[8’Wï½ñƋ㦸÷øþ}ò{o¾öúW³É?û`ýøKýÆÄ@T ûÛtv¾}ôþW]†Ð§~q}}vrº\]~ôÑ’ãÕÅe¿îJ]Övt÷øÅÀr¹¸¶¥Ûۙ͛f®ËqÄIG5‡£j¬U¡8§íÊ_ÇZŠyéšòz½é|ïcðÞ{ïcŒFÝLŸÊPQ³3AÚÝ;üå¿Z¶ëMÔ¶ûìó{NN~õégëUÏwoE±]\;D£TYU!Ä0õ\_æ7× ¡‰ˆ>ÁggWIXü&¿óÁƒõò‹{_t—ñêôkÿÕ…©æe3QrÊfì\©½o¡“çã„`ð“A$P"’Rʃ°Jiͤ©ËÂbN©i[8¥Tß÷]×&ï!(DmÈ: 倜EqΉ³BÊ®,1pòœ´˜Œ03 ‰B‘зˆØ41 3öÁKFu£3¡´ÖÖ±PéÖÁ®ÖdŒÙßÝÎ~ggg:cB¿F;óÉàèøøá“±-¬v³é|>¯ªJ)uvu¾¸xrqþ¤Ý.Wëñh4BE1Æzfè6ñââŠ+íV}Úž]Àb±˜L&Þ{RsÞn[­5­[­,Y¬ÊÑÞÁÁüèµm\Sim ðÁ§”'"ümÏò·BFãV|~Öãrˆ*«¦ªs’ãùÞÞäèçÝ;9¿ØÙ;be«ªêûÀJ7¶HË ›å:aÌy½!Mz4šëÜhïθ4./î__®Rë™t]hc€PÓ!B0¤4(Qbn\¹7›Žªrªãƒ}Hy6Œ–v7Ëöò$ºë¢™îºf¼ãšIýѝÐÙf¶ÿÇú—OžùøÃù¤97ϦŨ@7O&“ÉÅælø)¥È ›vñøI3;XŸž.ΟÌgeeu¯Ø•Î:—…»à7]»¸^-&«Ø{ST I‘A¥$‹¤û.\\/vv÷_ãÎùêê½OÞ?]®g»EY/ϰy¶W––½3ZAˆ’3â¯ÁäFÖŸ" ¢€›í¶Ûír}æ?ùj}ßnvoŸ~q‰ªÙ)ç»Í,†Ðkã”ÑÙ·„CïMž…â@œ©k–cŒ’RŠ1æ¤cŒ(2$xƒ?ßð×g“QèÛ¢"RJIÊFicŒU*pH ˜²„œ1rF­2ÏÉçd…%0ÂP‹‘°8ç¦Óéx<μ÷J̰״²EÙæß~ù…[Ã)7•}ßûn³³³óƒï'ç´¸¾, ;ž41Æ“Gû奨֒‰Ýº[.Êqc­}rròÙÇw}Ûm7›v3›Íl]æœ}"”3¶1×U˜.Ë”’Óæòò²ësιi*c ¡3Úi­½IÓfT–åx¾sxë¸ÙÛ]·ÛËͦ»ŒzÓ.¡°Y9D~ÆÞvÝ=;fMþð¦Q6 ʵ(dÐ7?%,×wo5>tw÷æØµß~㕳±ùúóS£ËõÅZ5ãe×j#?ýä…bôöÑòËËËj³Òxýdq\Íßß±Ï]é§)Zß¶½ÙveŸú`¹ªšuôV;­uh½-‹RÓñNùäÁ½¾àý×o}÷µMß@twZÏ)¼ñÆ~a¿ÿ{ÿèÕÉ$¸{?ë¦Í÷ßüôøÕÿúŸýçÿýøÅïÿüƒ{Ÿ^o<~ Ýâ;ßþön9v‰ÓÕÉY1vû{³Yãnïïô9®6ËbÌ!^=:»sxÄ;¯Ý²¯<ÒíƒÅ2“•U|üñƒÅt½Z­l c(yísçå$õž $ÉY†Ô£çP<ØwF?~ûÿןþ+›Ì~µ?q“ïÜ}m×M¶«.猜1)²u3 hR;ï½(¬ëê*3Š”…)„Ô¯9u¨³±`´÷² ìrl£ß»8 ÖÌ®¹8<üΣð:µå5R.j"]Ÿ%XPPºÉvž‡f-+ˆ#'u©yÝID^,ÚvE—ój»"¥D²Oû½Þ·Û>®[ê=²SÔ¶(Mi”«ºð1ù>°.\CˆÉ§œóh>—ªh1ÄívmÍ(t}]×~ë]ÙXSÛÀ¨mèˆøö­ÝªtÙ÷cknNníïíLÞúÞk›í§Óiðéã?¾^žcjOÍêºVÊ\\,NO®˜ùþÇŸ}}Z•ãƒÝý ådyÆ|✠!$q(R–¥Ó®_ååùåÐVÕ¤6›¶0–0ŠÏ5èŒÈYö§s¥(#§Ð#⑯ǣz\ IV~VýUêbî£ôh4"¢>†®óÕoÏiþŽõÍ`P`Pn˜Í'ÌœRhÛ¶VÚ§¼·xÿÞùÑáÞÑþälu‘¼ß¦ÀÝæÎ+¯üáþÄÎÊ»?þÖêï]œý³úϺë‹ET/T–Yæ¼Þn[«õözÛuάº åà“’¤P)P†”5æüüüÖ­[·_><<:Z,Wçäô|oçÓO?=:Ú9>>Þ™á|²°èîîÞ]€úßþÖ?=þ“'O‡Íêú£_}0­\Q—)¤uXm=ôËÍêêº,ïÀîîîåæbí}S×Óݼê3Àf½ÞÙ;Øl»Ore.®| óÅÅœœïììÌçóÑhä7Ýf³¹Rk•ÍÏç*ΖE©Ï//vGåï}ÿwúÍêôñýÛ»Ó?øÃ¢üOÿã?I>iR†œ@J™g„À, Êhm¶Ö8M¢Ù‚²D±…&å”Us•¦°¤9Iâª]†Íb“Œ”Ú%ZL¸-µcY+( Kžcð›ä£%n çõ^3iêB¥ÚMlãºßšéAË:ú¸Þ¤>xÝfR,#™ -e1EQLçãɤ¬ìª»F\ŒÈšÂ9@1ƪ°œòlæ4²Ú—„Z)C „¬Q“Q³¿7ó£f:žÝ¹}{2© möæÓÛ‡óùt2ªVÝR›ÒZ»ÙúÏ>ûìóÏ?WÆNf»ï~øáð·†a ÖºíºÑxš#·m;r;TDú¾7Æäœsâ¾ïˆ’&U:3h@v¦§2­Z!"<…íY"$Ò BÂ4ð.DPt5jŒ1ºóÌ+Ž¿-öókhÌ 'úPAzï1$Tx½^_úîôô´²æÃ?:{¼9?}øéù“Ûw^šV¦9>üÁÛßý½Ÿþ>”ð*¥{i±ü×f ¶í’‹yPzI°aà{Nç>]õ}"²Šµ-´rV%…Z¡(ÄœQ/¼xûÅ—]UĘ€cô á‹¯>ÏymÔ`¶ `ÀP¬–ן}ò¯ÿâßüùÃûï}™w'·¦ã®kŒN¸Y¶ õáÁîtÜt]ç\93¦©k$Z·mFpÕØUõbÓ-ï? Žî]žw}_*}ˆw¦{;³½ÝÙþ"Ÿ`Ì)3 ¢D`œ9Š¢°¶ØïÄ®¿¾8÷ÛÍâôôhÿÈ\__SFÀ’ÒÀ™“ˆ(ÔI‰Ò®)rVJ¡&@&Ì¥-b̘³%FJôt¤÷÷&“y“|ùèq çÞo—m·»s0‡VEžŒ‹£ƒéh:RÉšÀ²Y¡Š)÷±ëû¾ãÍfz_œÔ®´ããÃÙ­ãÃåz ˜üv#Ë>n—çƒfNÌœÙG‘^DFM]Œ¦ådB e隺A­;ï[(aP¬µ.3™Œ\i±(­µvTW׫ëëë"‰PZ€ æ,9D£ôîtšß}éÅÃýƒQí¬¢ùd2i áv±l—ÛözµÂãƒÇ'al«õ¦WFo¶>fñÞo6›®ëˆTå ­ô 7 Á«!^—§ÆÕˆH€Ui‡t] ¨¥¡_R@O1¨C‚B"C"Î ÁhS–I*&Ô9‹RÀþ²à¦Cö4s•;J€ÖºÐvN+åt=jVW‹?ý³?{øõÉõ_þ·¾ÿõ?ÿ²XoA»‚ì"¥g‡¯ì>¼\žÇõ/ñ¡6eLWv4:¹XòlT%Z½éÚNY±•O©Ûvc3#ÒNWeQ8mBb ¦óÙþѫܦ]Û’”U r½\£´³¯ÜyÝ÷§ ‘€"døÝ½ýÇÿâÝÿåþ'˜ªÔ¯Lb×;4F™B)Ò|6~套ä£?Í›j:ÑH×W'§§1qíÊ(°jû^]m¾zòpÛõÓݦª»­¿:½Î­²³Ù¬®kALœŒQ,BüÍYÀV㇞üïò§~øá'_=*Æûÿö¯öùç÷XLˆÿ/eoc[z‡­õ{Ö¡¹Ý%¯¾|}¼>\¹ÊA°HË¥ÔLµµßÝ=9¼ûøxu 5è ÒRœ1E*MÓàÛ$I„àD”åÉÚÚZœFh¨'r\e"Ë"™" o|mm›öÔdÜžwðr‚ÀDäÀ•ÒŠs¢$™j)¥„àMÛ4M嚺‰#(‹yÓúEãšÖåý(‹Æš@(¼'g}UÕÈY’ç\+E:q¡À Âüs‚2­µRªCÙw-ôNEÔ{Ï9§·ôðî×½üY—1\¬–žP;Ï´ÒœydœqθhÛ‘0ÆåŸÕvÍÃ3HK7*ƒD-MkmQ.к’cù•Gåâîò¤dLG1¢bO–«÷ÿÕëñ83hšÅI¬ÒÊ.×GÓƒÃãfY †‰«kïíÑé¬X,c´uh],íÍ¥ç\ –Îäè. œCœ±ã#²3[¼ÄÆ„œ3&êe ë­ )¦gJ Bä‚3À…wíŸÉ€QðHœñû÷z=c\Q•"J†ý0±7›ÿíÿáïü[ñ/þó?üg‡{ÁYEŠ¡ëu´*çóÕìääh:)k3v±çŠ–mé­3uk¼£ÚIÅó8êçi/Oƒ³ˆà­—’FýõÑÕëÛiïŸÌm°YžBFÈNfÅ`0˜nÞb,[\ttP¬½¸Ñ“ÙõW¯loîï–[ë#pļ &¸Ð®æeÜŸ¬O6¶6¦×®^™ÚT°e"±Y&içÚJKì÷ú2Š=ÇãUÝ–%ŒF½8­—Užæyš'#­¹Á¹ÆùÖX‹à:æu Î0 àãQÖø–Q3&!@ž'Iœmnn>wûy‰ídžÃÈz F[Ͻa¿7d„,‡À3h•~ÿ IDAT}@mÃúiB»ÆõÞñb^¬ŽO÷çdÈ”–µóU1ÊãDe:p³(í|1?ÙÜžæ:2‹EÆÝz*ôhؼt=à$òH3F_­Mú‘bÆ'80ûÔË·_¼zmû_üãõ¤w{cHh¥8 Žb4^¹ru:nïì€^S¢^¬f¾ûÑÆt'’I¬I΀ÆÃa¥n*ÉÅúhxíêÍaÞÛ{|ÀOt’Å©Ö"N€+ÊE]—€Ž#ÆÈQðç‘L@,Ýú0í÷û‹ÓÓµµüÕOæóŸÿü¢X½ó†zJµ„8I¢0Š£$ÙÞ¾ÖËǦ 'ËãÙü´5& d ¥4¼µBH®*›:´Ž É™LGi–g”Õ†ŒE¬•Úª®WKSÖœ/fÇ›ƒt³'“4®·GXÖ’©á¨—hšÁ áÂ[çPÇ(bP‘ŠR×¶œ1kí|±(ŠÂY‹±ljcLcs®²mÓ4H0þÖïyc‰1¥ oS7÷Ô9“ª ƒi>žLÒ8¾v媈âãUŒc¥£¸,CMY…¤Ž•ŠB’ " ”äH6Ž¢ŽìO)e­5Ö)¥ò8ê§Iŋłˆƒ~šg ©ªÊ,‰”R]ˆ× N›s4_ˆv˜FƘ`Ìp.wœ >P€sý•xz8/•²å|î‚—‘±”éH&R¥'”‚uü9‘Í…3r>œSn3B:Ÿ‚nh—õ‘cÙªcåœw1‰mJß4·66jóé4—Eµ8™?:z<ȆYÄËYÍQNÔ&"=ži­5''Gk“‰héðÉÁd2¢L·eÓËó^/K"¹9]÷¾’KÁúýts:ÝÙÙìòx2º|b[Š£ƒdŒ1[6a ¢ºšNG“Ií-ãÉ8MR¦°¶‚tzí…äÖöã•íõNš¯Z‰…*žl¦ÓÛ7¥[½ñàñíçnÌW,Â~æ{ï= ûÃþQðRgÃë«§‡½2º5]»¶1ž^Ùj]s¼» ËrHÃQ”£&”Ì!9lëƒñ½$êÊÄT@ú2Šù¨Ÿ€m׃Lª,fQ¢~.Scør4½ÖÏ×¶¯Œú“ûÞ“rÞ‹cV”lw±ŒÓžA#”Ò‰´Ž¥Ã¼©Ôöõ+MU?œÏ{Y¶˜Uàr)Ñ{¢Óf±¦s±õÛ7^üÉ—¿ó½ï¢7O÷ÊlT+6³Þ·¿sgc<ãž63¶¹1îõR¡Uëc•äÙÖH¦MezMÓ–eÙñA\ˆº-‹~¿Ï›ÍfeYJ)¥”àÃá“!rFX1)"©!‘@¬Ï“aÌTšæ“M›Å5àÂÔ\¨–a팈‰ y$†9·­BFÖ É}hÓ*­=@Ì%@"ïzÈc$oÛV$ò㞤ãÀ°ßï«8*ë*(QTT•¢ªªQÛwƵ®˜¯ãJH×´Zô=q×Å‹åÊZ©1ù¦*O¥èKžèˆsN½þ`4êM&“ñ0Ïó˜r.&Prå\1Á:Æ“Lª¨3àŒ€IÉ@ƹ2†w† %÷Þ!„ìâY®µÎ²,Žã«|»sªQõû9c¬lÊ™Ÿí]“R£ÑhÄ%CÄõÍ D Ì…àçõ¼Ûn‰AžA®BÌ á%ÏÇëo|ÿÍö¾;Ì3M½ƒÝzvrotuÔŸFéÚ)]Y›|@VQ)÷ÊíëÍÉbxu´^ËØþàßrÎ=Ý “~o0L³ak™µ¶j ²´*«Õj¾XœžÎg'Ū±ÖçQoЇÃ^–;ï=—"KÒa¿_-Wg=Õ3J:$FÀ3šG¦ ŲžGÅÞîÉã'É $V•mæ'ýlØTæþ½§Yœ82Q¬¤–£ÑÄc@dæ3¯¼pZ,g§\àÃG÷ç2Vrm­.Ë^Hg@À9Wq%¥Z÷Ç#Ð*J©•ì8N‰¯š*ëÛª^TÎ>=Ú=˜rŒóÉúÚái9›ÏƒóŒ˜TJK­k.€1òb`µ«é#bWÐïÖ¨µ¤ž1z „Œ3Þ%=Øp OkÁ”l瀼CîYÇ ¾¿X8©ó8¶­aYc€Y–1Ä^žgq²œ/Pi­uEÝl&1d ”fœyÆX–ªŽÞ²×Ë:rÆk À™¶¬‚%8cÝÔ[ð­÷¾,KクlBÏò½ ôàùŒ~g„?:«ýcÎewLX—­ÚR¡‚% £Þ$ÿÔ‹·®;&“ LÓ´,–ι3$²£ÁÐWÍ|vÚÑ~ˆX !ê¶’RöF=cLѺ¦mÓ†P0ÅE]9ެ Ùâ"‰D’TvžœœÌK_·³Ý§§ûû£tüüíë¹í ¶#­ÛhõâÎNù™OoõÇ[ÃÉíë7|Ý ‰‹Õq3½ûÁ÷¨=Ù\ŸÑ*Mœé€p²Xró¢^.˪®–uÙ8‹LùÐ:Ã5—œË^¯—æÙÑâtuZÊ8ªÛ¦¨*êæ C@ "Þƒdœó.t)e‹(ö÷Ž>úðþ•[לkýááñáÞl5/ŽNoì\²ã4÷ÛƒQkJkmEIÈŸßØxå¾þtvòáÝ{=zðèé~µX\¿zµ¸w$¼fŒû€t«ªœIì‘ìŸ4µAÎãd’õGãí¦(}c8²¦ªƒÞp°1ž–í²j„f‘šKà»þØy¯ì¢:ßñMuj3ž£Û4;ì?c@-AÞ“§,I8 K­³&t4mh@ÂpNlgƒãÞsÎ»í¾£å=·sB< @D ÝÈËŽu˲išÙlfœ}ú䉩JÁ8Y#•Ž¥ %c)”äÓµ<Ï{½ž”²õ.„ µŠ"¥OÓ²,ã9çq¬µ–ËUÓí>D$ b¦i (!;k0míœóÁrÁÅÅÙŒ1@öÌž+DÁ¥dï²¹^>.Îï¸óãY ‹È‘â(gÉš,’éxä&£¶±Y–i­ÇãqG( ”hšF)‘g™YI©HE‘R c¹,É«y÷‰ !÷>P@Ž\ #„@>_[S§¾(>zòàÃǪEÉ-Œãh8X_Í›ÃLJW7‡™óó½§õÑá­éúä+¯MÇk¾òåªxþÖ­ý½ÇÞ[°ÅÞÃ÷þÂ/±?@à§'õ|¾œÛùbÑLÖ¯¤Yvx2 ÌY¤ÀI&Ñ(J½—{Ŭ®›£ÓÓÖ;P¶A;ègÈYYW °34„<ßš6‘ÖZë8BœœœÞ¿{”˜ŸÎNêe%9×œÝØÞ¾}ýzžÈá IÖ‹£Â5–…>2òäæ‹Íþð ¯üä;×ïýýßù½p8ÌúÞ†¸Ÿ³†ù@èÁ;0m[ÙfÕ„2ØÝãÃû{wîÜ»»(V½^ß{ïmmlI|4;==>VJÕe§É€ËÁÚ8ÙMµVZÈXœÍ‰R=»´•ƒ Q2Æ”ê6}ÙédZo"áÙvB(Ë’¯­³Á·m[–%ó‘÷$yǸìÎß¹Ù~¿ß®ÊÎÂ/(´Ö‚CðcÞµÖ´ž1×1²jÉ•TÀYpMðN øÜg?-åY&WJÙ~&…`Œ ÛI’è("¢NJIiGÚÚ6‰ç8"ß)#Ùà[ÆE«ÚzB~ñ_¬Š‘p†¨ bçÓ$Þ?Sž¥Ë›µ”Œ¤”\FQçµ.HˆÈßeJgµ !®^½ª€Mƒà¼T§‰a8êsŸ †±ÖBÛšªª t×!„(‰•Rµ5À•ì§I/9àéé)S“&ªn*cŒÖÚØÖBðà}htQç\ qÑ· ó0`Wê>t ÏÇfØûS "DBA(´Ž°uE`BèN»'„eÓDI‰Ú†Ï„gˆhqŠÓØ;·˜Ýî’jÝ4M`\pÕ‚õÀ˜wŽ1ÆH©ÊUë G¥'lsôä(áJ;7'îø„sœ³ÄƒìQ¨¼÷šÝ{½^¯˜Í\S³ô·þþo™¦\.ÏÿþA½ÿ¾ñæÛoï?žO{bk{ëg?÷Å—~êóßøƒß+* ^¤6ÞlŒû÷OPSÖÇW×>˜Ïro j.z§GõÁ£E$FkÙTµJ’Ö”„>Ë2·\¢Ã¶i××6¬ Û;›ãéäÞ½{¥©×wF;W7£DZp[[[(Åîî®±¼*WPøùã§Qíîìtå¹›?ó—~F`òÝïüçá‹/}NN†Ë¦ùp÷Á7¾ùÿ¾4mö&‹?C&F© À8¥Òiӗׇ·ò5Ó{2ûH%"Í¢ãýÓ¬7Ç»G,‘×>õ—‘ml_9®Ê2Øåªâ‘Dzh¥EÏ–•ÚšÖº&ÏsŽÎ´.JÒ¶q’g`¹óÈ9<8×8g‘3'RB.‘##jÛº5‚ñ8N1D„×véû£áF¿¿2+É FÖ„ÆeQÌ„,æ‹y³zñÖu„1Ì{?&Q)®œsÝeB¨$FFÆ8™LƒÕjSÇá¥Ô䨶Ž1”NWUëzÁ ˆÄÎ?1ª«¶›¡ !h©#Ó0@Å•÷ÞwBcŒ#Š‚w>ŠSï=Jæœ3e À¸ó^tÛÉŤé':ŸØÕ.Ÿ=å9Î À…#vΑ(e`=GDß!€â9 ç¼cO„@ )œÓuÑG÷š¦AD!„’Jpmo­ESÕH2%9ãJjÁ¥mì¿ÿÆÛ{÷×z#Ù¯ëØú<æÃ^²Ù{\e“a<¼÷è ÒLïܽ/€g½Ñ¿|ï½ãÊýþ}g}sú;ÿõßúê—_{ðÁï¼ùhš§ŸþòéæU\.O[S¤}•%í@£ˆSÚ¹6ÜNwtÚ{ûÍïß—eéœã\ìíí=xð ‰v=!.¥Œâ°X¬– ®dc[‚Aª(Íz0ÇéÁÁ{ãÑÆþá,íõú“é·ÿô»ˆÔ³¨nWGÇ[W®oN6¢D¿xýÆ/|í+ëýÁÒÙ/ú‹Óçoýìk_ûà­wÜ¢úÊÏ~ñèÉÒÉÕ«×¹ŽVÅi ViªÊÕ|>žâ8YÍŠ`fµ£(þàý÷«Ö8â("Àå²°æQpN0ÜòTsd¹o-äL˜ÊxÅ´€ºûö½÷ÎƸµ­R1 xo!P]×>˜8Mª¦DÎ=’q€ HB‚ó!Š"ERJ\)%99[ Æ»¢2N’'‘hýÚxIEÁ†¸d]¼§”2Æ]äY× bÎûÚ´¼µ¶sËÞ¹¦i¢$~V’<çÀ¿ •¸àò9¯SÒå,Ô{ßZÓTår¹ ˆãµ!Q§vØ…¦ÝËÏh#€«–^ª‘^.“^ŸA»¿.‰_.ê\øÌ ÿy¹ºs¹ßÎr<~æŠ}è(\;“;›È鈆@H©”ò€!bÌ{_×5XŸ(eêÊ· YC­gr-ótc}<Ú½÷dv|ª,ð¢i<š²ÙõíÁñÉ+Ÿ})î>Ýu– .î¾÷psmçÍ7Þd—‹ðïýÚ¯§ã›¿ÿío]{õµG§°*{«>÷«¿ô+aº³.ÓÈQ°1a™gÑ•kè¡iCÆu<î—ß;<Ø}ºï¼I’äÖ­[“Éä`o·­ë4MÓ4õ«e'ƒá0í@H†§‘fÜ tÞƒRÈXk‚iìrQß{ø`¸¾±,í¿üæ>::ØœL©i˃á€Ñh2½yýÆñéþ R¬X1©*“hðs_ùZ[Ø>õî£5)Fk·Ÿ…Ü?Ø=-N¬wå½îîí?¶9ÓÞSU›ã£ÏâÖ:[µ®vµ5UÕ$™S\Ôu½\Õ‘ŒÚ`­iÉôÍOÇ™'¥ *眬nJ!„#ðÞsNֵεI®{YœEREQ$¹@DÉE'çØëõtyï]ðJ)¡ vL¨Šs†Ì{R 9‚bØOS TÕwNr¥7D@ä(8 ,„‹5vM²Ö’³ÞûN)ÀZk¬e†_t&/ÅÙ:þ8p !xÆð|Ê´k‰wŠºœsÎù3hr!ºÞ ]X !q©wÁú…í}âçåºlá\á±{ÜëÏ»4Ð=%„€ÐÉÝ0èγñﳌôÙsy;¸D+|¦Zg×BXë¬sBj¡¤°2‹¹ê÷½< ÜS轎Äík×ÞúÓ·ö=IX”3•Æ¹Š²¦.žÜ=9~±yûí·{㵇ï>}üh¯¥ü~ÿ§^ýìÑÓƒÿé¿ÿ;Ñó7~õë¿öþ9¼ºe þößüoæON·v®Þ|þæ`’̫ũYX¬=ä<ÉÔ`Y-„N¸ÊOžÞ~á¥å|áZ3¶·¯(y—Óét4•uUœgQ¯— {êºÇ,ŠÔééÑñ±…°jª“““7^ãÝ·ÞM²\°ÈrÖæçÅqÒ$Få2‡*¦ÉúF:[ 4 ´-)4×ÀFjðö;ïBY|áÊúÍíÉí—_ºvãúª*€–J×MÛ {O÷vw§ãl4D‡Æz }2jbWMZ)= †Ãá£û<ÐáÉüð`¬‹„Œ¢ŒÉ¤4‰bÙï§:ê’‡(¯\ÙŠ¢¸n-å½Ä9c];ôЦêÜiš*q¦ÍËIGø°X,Bk…„Xshœ‡@, úLÛ‹MY:çœ+Ë ¥”óÆ2D`!‹ž9 ˆë`„Œ1‹ðL¦sMmÛ°‹õ 1]çZβ/Ö!ù®eÆk*;S)lk‘:äóŠÓ%ZÊî²ÝŠŸp\?Öö.o —ŸåL\X/;Ï'Ÿ™ÓùÛ8{K‚1¡“Yv]ëœÉëlÏè6¡@؆»RþÙžÀ ±& : e•”­µ«e½ÿþ½îxOIœ®MÖ{Áö‡ƒ¤Ÿsε‚óÔš8ŽI«BI.êeícûôñ“ÙÓÃãÇ»›W®þ¿öï§;ë}/™GJö“„ÈéXˆ,õ,g:MƒgO¿ÿN´1ß¾€XRýàþÝ4„#å·ž»ÙïkάiO9kzy’¦ñÑÉq±jVËvœƒw.´Ö¥¼Z®ÙÚpà°ï Q’f½Þr¹œ-–‡Ç媔LfÖ¾…¦1Ðj¦ÖÖ{W¯î †q¯ŸI-—yÞxÕ!†£‘¬3J {dcZÉ"œËâ‚”€œ³ÖoŒgÌwK¨Çñkò IDAT–B0Um A]×ÞÙŽ~BÑaêˆÐ;"A.ò8"¢€:­¶gÅ!ï½wPprþÂ:ÇàCèZšðñ(ïÜ28§Ö""cŒóÖßñ¦’s‰ž >8+˜<«ê~¼êy†ÆKÚƒ?êý>a—ýá3ûþ‘Fâ'Œ/u8ºÜöÂËuçøàÏ&ÅùÙ œm÷Âpî]­µLiX,—Î…GOž¾ÿÖ»77w†ižäòàq RñXËétýúkOžì /ãÀêÆ8ò Ø7_ÿÞ!ƒ~úsûJlù§c?üÞ÷˜£ßþýoNníürsƒ $Öx%~ðá›w÷îÕ¾Ô Ì´öîîŸ,ö–Ô0¨ /ªê´ÄŠë“åÉþѱo+¥”@¦öËUq°÷TkM„IÞ®eJÅiRÔ•Ab‚ ­Lc]Û`H½át]ß¹7;>yqûTõßúÏã ŸÿT%á¿üíïý/ÿóbÜ;~ç^– ’lå‘‹à[?xýÞ½;òÖg»'ËÂþü¯þJS·.¶G»O¶×ã8Áà;žòª-Û0ÉòT#Ó"I¼;*ë ¸w],®uB)ôd}M+Å´”‘n½'ðI¦£DgÄEÜäéÀ{@æJS`YÖ¿víF–ËÅòDjî\ðÞÖuˆŒ³ª*A®,8´Öc¬µžcÌz€x'ñÜU>¬ó@øqœ3ˆsÞ± Á'œs&!ÚN.»ku# ³ç¨\à,P Oge !¸”²ó„pŽ™°Þwíèî:Fx±ø:†òà‰È;BJ‚÷Áž S]œy…^²‚ŽÚ\\.%‡¡6¼¸¡O¸ÄË…œË–I—r½ËO!"pÆ`gH£Œ±nÿ;ËúÏú¶Ÿµ)ϺC "½Z­),ŠÂwrròî»ïÞÿáýOÝ~q}º¶¹3Eá+מìÏ–$ôÑü°¨‹Im27óÒEL@ ›6«[Ãü¿ú¿R,ÀöA~ù«?»vsç›ßùÖŸüçnð«r-÷Þ½{'¿ÿæÛoýðÎridœ‹fË?ýÞ»¯ð>‰ètacLR'B-ŠbùðN! ~ØïÛZ†àÈy­µäâôäh¹\Úàã$1¥]͋ʙÆ”½‡Šªv’£à$e”è$Ilµ8=8øóÿί|ñK? ŽŒ3?ýÊËÿÙúý½¿ûwG=xîÆèêtkmº!ÖFo?ºÿƒwÞþhÿ ™ÕýþÆ×…f'÷ÙWn·‹âùµÍD ë¨7îp«º±Æ”µ‰t6nŒG›Y¬LU:['JrÞ{ k[ÃQIÍŒm‰GŒo×äD޵äBà\Å2x–gý@eU•*Ⱥ.ó¼/•Xâ(9>9pÎ鈃®5DrÞßMöuÓÿÞ{@’BH!pÄ€Á/Ï—ÒRB0Ș…`œoƒcŒ‰N¹äÒ2î*…>é…ŒíìS0‹ ñÒôÏ™I_*mx @ш>„Ðåœ]=ùYžB@Æø%Òò‹‹wªÀâÿÏw]Jü.ÿzq|âv/›_wÓ—_ƒµxn„ˆ1Ö¹¶ Gö†Ã³ÁqênýÒæÑÝO]×\j­ã(ŠƒÄL7·ðèt¾:8:%ÎT ¨xÕ6Þ´»'O=}´»÷4ÑI”ï¸Öœž”~^¾¨ÅÖlöë¿ôuð¶1‹íxD`¿pûÅâÁÞç_|õŸþöïþÒ¯üòK¯}A»äå럡6ùßÚßT¢¯D¿­ÙÁÞòýwܹ·õÖ E”ôû:Ïc–a¥“ûÉ Kz¾1yžF\®V«Žä+Š"ãÀÌ @Ù6佑ö ê¦imÃFi¼–ÇÇfw_mOGJ/6ׯÛÓÑÖtøóŸÿ Ͽ°uóÖœÁ5 ›Â<üÎ[Ç‹’˜RQbªåüç¿úåO_yñÿ£øxÿhiKƒ†XûÁîܽ??-ËUÈ’A¥ý~_„¶éõ²éÔ4¦®ë4Oʶ‰Œ“uµ#×ïgýA%IYä¬kDq&@Ó!D¯×«[×å{ÞÛ‚”|}}=I’ÅrfmE)#ð†!÷ä¼·Þ‚Že'Þ{k­wž#cÝÜ3 Æ„dÁ_°˜ušÕÀ¨nZ šˆ8 Ppyn÷ê-ol< ìöµXFÕÞáµé£Êa”þÁwßxüäÁúdó‹:yáù[¤µ–‰ªªJ$~øD,7vÖQ^K„hq Å|ù$_5EÒë/+&GQÕ­ˆ”¥À1b çà…-ꌫ«ýÍ"Ý?Ø=µmˆey}kë /o¬OÒ‡wÞ^K7¢Tš‘">¨Œ…¯­ok«tÏ{`–G¤×¢,J}Ÿ“6…”˜MU/ƒÍϽpíÊäðð.c,Ó™/]Œ)xLÓ4b‘o‚’*÷˜˜@:âår%´Šã(Ô%ç<Ž#kMÓTZ)àÎ"G"o­(•Œ·m ƃ$PJ À1Bàœ3bÖZFA)E4Êà)”@@gò(#"ôÛÐØñà<9yÃetj›?ùþë±qÄ?zÿ~žolŒ_¸}ÛÛfmmMJÔZ{ ƒƒƒÖµ§“A$ñtvœ¦©ŠtÖ TÖcƒ‹ºnß|óíD'×nÞÈÒžmV ˜#o[΂T±Ô ‹‚£¦iª¶B/|êeæÂîáîËÏm;€Â;o¾ùÁ{ïþå_üåº(¿ÿæëeY.VÅÆÆÆÆæöd2Yå;?|÷ßüæË/¿üܵç RKvµlöv›¦™Ll¬â£ý㓽‡ÅÉâæõçñLgJgP)!•ˆ-ø@ŽùDi$ ÈP T|÷MQõc4Õ¨Ÿm­o¬OÖÖGC u¬e–¤©Mï-‹Enÿ`«ª€¶kšÐ` r‘9ç‹åŠˆ´ÖΆà-ø` 18“ß»£áyñœ.ºyÙ0Æ™ÂZÿ çC—fNØ¥Ô‰1v&ÂÐÅ»g}ì³âE7|Bgœ2tÞ<§óáÇîºé<¢n1w‘p)Ø<‹».Ïy?üc©ç…™ýØ÷ç3nŒ±Î¿!žIgý¨­2&/_Î[ˆJ))åÅ5;Ì+§˳A]ɹåÁŠ÷L±x˜‚¤ÅjžJqucªâ8ÝBZÉHo¬­«æýwÞõþÝ_ý·×†¹^}ä_ýå_‚,ð_úÚ϶ïŸü^:ÈžÇI”Dqð­µ–|hœE†@œt¬…¦® Öß q¥lk³¬ßiråQ|—Sc„à`[Jçœ þãÛ÷Ùæ~±¢.zët¾ï_.L|Ò‹\êû_ÿu’ðq7ãB`}ÞÙ0ÒåKM¡uÛCg²S—ÝÒ…‰Odƒ†wù¼ ëºüCx–ËuFؽ6Š¢ x5œk’!<"òDX§ÜY·mW€âüÿ£ëÍ~$˯3±ó;¿åî±çžUY[/lv³»I E4©™Á ëE`cÿ ~ô» c †Ÿý"0 Œ H¶4¢$Dj$n"Åf“]Õ]U]UY™•Kd,w¿¿íøáFf—hû>$"ˆŒˆ›÷ÜsÎw¾ï;\ ѶmSׂXÄÀxÛv–P„‘ S¼êÚj½æˆpžWº.Ç?ûò[0ßýù÷ò<_>¿2y;Ì&ÙPÅr+͆ó_ýÚ‡EP• Dëº(›Œv†/^<¿ÿàÎd<ØŽ‡4÷g·ë×Ã\¬.çóóõg¿ÿûÿÓå|ak½xyüþ;oþËßûO¶w¦yžß9:ˆ¢ÈS5ŸÏ<Ô†1¤³(îL†ÀxYÕ]Sa];†uÝDá Š"Žxyv>¿¼4mg)XçTg¡ šºôÖ0 «F“áÁdëdùª-«oÎþig[-XS“8òºëŠÜš6˲HHÎ|]®ì½»·ºÎ½º¼¼¼XZx\UÍb™ ä?ýþGùe9'C• tQ(w“­ƒíýÝÝý¶ÒXU,<4 c©T@Fà ®¥0Æ0æ#¤º^ “htÿHöº»º,êj-”l;㜠Ã0P œ³FÛ Ô u·ÙîÉ[§¦íHÅ]«Û¶Uq$„da•uÙu] ””Òô-¢ÖZ…AÙ~„7í]ã.Þ{G^kM7àÿ—ü (rý»_Æ#‘}É_sen‚ló7¼ïÁý/2!~ñ›$DÔ89rð›WßäÉ>.z‡Eqã+ ࿘„üÿ7úz@öÉð—è¹7^OÁýKn6{ô‡Rª—„1Æ‚ Ø8vˆdÄUhíZ;†5e휟WuAÎß¹½ÏU||òêù}ûþ'Ÿ¼ÿÁ»¿xôóO=ï}åkƒÁH ÕuæâäìùóãÑèÃû÷!T/ž|öÑ«§WÏ>3E»sëî'?ùÉw®òÕËË˱TŸœ¾úÒþ‘G"ßN³WŸ˯ÝûÍ_ûÚ?û'ßr`>ùä“0 ‚P¥iX–›Y«*ÎeS×¾3<äItFGBHɳ4,KË–‹‹ÕÕ\×Õh˜¥aPëŽCºó(yÅA0TŒÅ$çµuæ£O>:¹89¸shÀ?ýþø‹ÃÝÝ€!‚, 9yï4×u)ÀƒÓ/Ÿ=;½¸Üß»¥‚äggŸ?yztpë`º½— f[Y¤€\;H£ašÌ&[Û[{Çǯ^¿|ø‹ Áp8Ü?ÜIoFA0Ö d;§+ïœwÜèˆA¸AG¼Ó%ê *íJmã\:@ë-Ö9MÎήnž˜`üzcÍfPá”uÆ9 Ž ¸'„›lqsím˜a›£odØ&zk-À3ÂM º~ŒˆÈ¾`en¢‚áß_|¼c<]ó¡oÆÈœóâïÉ_à”¯ãˆ7Ÿù¦6|½}Û\9¯‡Ü 3½z?›9Éõ]äæ_X•Þ|vÍ‘CÄ0 {"ÂF|©‚¾Q$¢ÞAÕÔ­÷~<{bEY[kÃ0ì÷Œ‡|žçŒò«åj{{;‹# ²óàökíîÞLÜÚÝÎóUU?{òäöí£žXƒE×>~v<™4·Ü–Ù püßÿéŸ}øÕ¯Âöl±X=¸s7LòéÑd\¬óÿÇÿ. žž?üäÍ[·«åêàÞÑ—ß¼ÿÓœqþí£8mËr¹\FiäåEá¼ï¬kMOf1ôŽÚÆÔµ–ŽÅqغŽ#!¸$‰*KÞ¸sëâ­·v·¸7¦.„·ó,’\1 C¥”°­Vœ‡“I"å MŸ>y¶*V?ùøÇ_ýú‡Æ¹I–êÕ*ÙÛµmÇ…J´mk¼eŒ5õŠ<Ë/O¥ïöFÉÎ "Ài$°.”î¾úàŽëºÁ$‚qƒAfŒuŽ®òúìj}>ÏŸ>}Qùh4ªóµÜš yDÆQ$„#Ï€Â$Bä½Ç©n­î,ÆY¦n,sÞÚV7DÞ{,TA«;cœ’,VÊ1@b2Hã>â 1Ó0Í´wUUigXÛx†<éœ1Q’÷Æêa–µUÉz伿JÙFýº¡Ñui Œ1ç¾àKþÒ…Íz?Þ×JÖ/"‡}þµI ¨ßµ‚ŒÑûX鵡…'ßSnz1ï½b´ùœ¯g¯›#^/Rÿ¢®}½ø|½'|ýçÍ{÷xSŽöܼF[o¹…ˆuQôu)ôFïdLDQõž4ýØP1™Ž´î>ýÅÏ?ýôñ·~ã7ßûðÝXÓéT·Ýp<@WC'@8€'—ŸþÝê;÷Ö½/SÎ~ð×?2Ä?üµßxó+o~yyqòüýL´õõoþÍ7¿õ­oýîï:ÅÜOd2üýÿñ÷Ÿ^žøÎ»/çg‹§OÅRK²x6žh§[]'i˜Ä<DëÍ~øc«ù|~x÷Öh¶íQ,‹*MSαn«r]zÅ2T*[ DÀAÛÚ; ŒÙ¶ ”ºt ü¯íïî…œºb)¼ ‰ÈÛ !M¢HùÕR‰`¼3rÎÅqüèÑ#!ñÅ‹g@6æj¾Î]Q>ÿäáN–’sAÞ;ÁÀضmK!Ä@áîÝ¥BÝ9£éƒ7îVUµ“rª*òv;› 'ãܲ(>þüìl!Uty¾ò©×6N˶Ën|¾Z(%™è¡Ï9À¼ÌÄ¥Œ@s)’ÁVrÄyQ7%iÝVMÅ‘W0¯Ê(”‚Œ–È#%[m<°:/Òašd©ojMŽ8zd³YëÚ:™DE×\å9R ƒ¾ã{­ª¼¹”ûôÖƒˆ7á÷zæ¸É„›ò5öÈ5h¹Âÿë ×ô´Œ1Ï{}“Tû¥1Œ1Äúþ“ '¼~¼^‹_ê÷~逿_FÞTžýSkÝëaù:ùÆZÛ¶­ÖšsÞ‚ 899áœ÷Ò²>…½Íød2ÙÚÚ’RŽF#kmE_º÷†ó‡ÝòáG?J¹}°7¸ÁAà[ ÖC?jÆÃø»öÀHg€s5_­Ï‹Cr!j áòÅñÎxº³³*â`5ÀÑ;oõ[¿9òXƒ†Y~ñ*ÞýÒ;WÇ/O._%ÃQ2“aº{°3>þÛ¿“Q¸µ{ðÁWßWAÌQÕÑdŸœAÔVõübž„I– &ãí ËâUÀY "`¨=µMmšFŸ ƒ8âä§,V·µíÀrÏÝ0͆ӈ l25­v@ÿâ÷~¯ªJ­u]׃„ÿéŸüñÕéi°»×Öu ^J΄œçƒAr´¿5_óqÈatÅØéÓ'Ø4ÿàËï,æ—Åòj¾˜¿\ÌO®ÖgWKKÊÙ<_TY9¯”ŒÇéä`g÷í^\>—¡`H]×9»¹‹í™5d‹¢@¨(fa:ܺûàà«ÕÕêª(гó—y×µmã±ÛÝÞÑ”âA”j(•PaV®’Bt¦&Σ$5Œb„tÅI²,–;;;MÓ0ƦÓ1 \k&3~©"½®Ôcà7öõ7Cy"öÿ™ ûÂõïit6hÊkáôz^Ïꉨ'š2`ȸ/^~¹k’M(››Æ6º¿×SZÿ.‚I¿‡&‰$ÚÈ2ÿ:¬„ @‰œÙØ`µm‹LŒ¦Û§EɃ¨n+!Äpv9]]œ× ’5M+<4Ìçu%ëö}m"ÉÕþÞN DÚÛžhê|k{JäÇɰ£Ž3Å;ãÁ¿ýî{ôüQ¾ªÁ „1€7Ò{ð:à Ð,N›oûGßýÞ#Eá « U\±± |çÇ.›á¶‹¦ .çh@Ÿ¼:þ·ÿö6Ä-P7ŽH0‡mmÚn6Ýã8Ï˽x¨ùâÙü9›¦WÝ'ϯ¬|þÎ;ïäùúòòy–Ä?:^ç glšÛ[[Û³ñÎÎÎ(SŽ,—‚yÆ<ˆ#%%rí½ñntoëôìLʼn@¬k¶7Ûž±¸)+äÜ^,®æEÆÞÁgÇ?ŸNÇ_ÿƯxÖý«ßý¦×,ŸqšZWƳβ0–:çPB 5Dä£ÑÕùÒêŽ}þìÕ¢r,ÆáíÛOž>=99/ªêêje;Ýó%Žvv“XÑ,¬óÕÎÖøÁ—ð®3—œ]o”®éɰÓÖ¶ñ®îL¶•½uHhdzx<ËÄÚÝ?yuVTM(ÕÑáÁwÿüÏVgg›( ™sÅzÁ-PÙEÀR¾ûå÷lœ-æÉhÐiUÕþήéô4›¸'sf¥¶‰ ¬®=cQq†®ÓœìYžÈ“&ÁDÈ@·†ÅªðžÀL„Î9F@–€1ð½¥ N ¼Fè-в '¦ÏœsºFdn:JÏ<óŒxòÈ„  k­'f< F΃¡‘¢ègHB’#g¼1ž³Î#cc %r&n2¨µ´^¯‹"’Ô9§uyQ6‹åj0{çÚ¶sFD„4–·o"b’FY–Aï¹F³ñ4ûÕDà«¶P†LLtÄÁÆŒ{ «½öˆW] q|ôþ{¯šú´©§a¤¤"ÀÜ-=8ËÜryyr~¶Z–Ÿ|úøñÉicug¼·½fãd: Éç‹ÅO>þée¯~±¼zröò·,\÷òí}ª¤|ÿ+oïì¿<~ZWzkk¸\®³l(e ¹*ÖESµ“ÑTë¶Íç“ñ°©‹‡?^­æe¾òÞïîÌŽ_>ÛÝ›EÁ`owkkk+ $,/×UÛ º¦¼n†Bà¼wÞ­×ë¾bqr’ç9{ïýýýþ,‘Îg/Š‚1:yùRFl¹\îìŽF£EžWU•e™T2ÉbDÎ8pˆ-³ Ðþñ~6MŠu>?_ÔeU®ëÑ`pÿέÙd´.ó˳Wg'/yN8fqÅq|tp8ÈâÕåÕ£|ÞÔ9g,I¢«Kç¼#æÁ3]é8rD¤µî Lª8ÌT˜e™BÕ €!„!¨ªÁ`_\ôÀZ+…ðÆð@) FÃdy€\$Üö„3®Z°ª×‹ÕÒ› &¶®{Ë&†@ä½×ÞÅad­u½ï“÷=X*¥ÔÎÑusÎ!0v=Á¾É‡„ŒsŽ¢'þ]×±€_*:ç6œo앜wd‘aϳýŒÛ{ýzÍ{­jµÝ9Øx^±^ÊV“é\×µc⺴íœsäŒ÷¾/Ľ2xšÆAÅÉl2¹8=™MÇ};Ç¥iš )åþÎbïc´Ñ€Àhê“p¸!‡2öúVt.ÆP‚$ÜÝ{ÿ·~û¿ûoÿû“¦»wëî¯~íƒ[‡ûŸ~¶Ì—'󓧯ª¦N³q×iž¤ñ`Ø.ê²i•uI– ·¦ÞÄu/ÈØÆöŠ€ù/ÊæMdöuoÌ”­-˦®k.lQ^ {ÅHÉ@Tœ1öÖoÄqÜ›º)%qf;Ã)‡à8C6`ߨF¡ï%8#r’ ë­íuñÖD2 pàìÕÕ™1¦­êõr%ep¹\™Xþïÿ“o|ðM9þýoÿÍÇ?yøWßýþ½½ý/}é¾õ]Ñ´Ö0 dvõši¸{xgîÎʪã†â ÄQ 9sëÖ-°îÅÃ+LØ IDAT'M]Ij=“ûG”L?x÷½åÕ«‡O›õüñ“ç®Õíº ÆÏ>}ž$ vï7¾þµo´º)‹æð€’$rû[a ‡ÃáÛoÞ'¢'O>óÞ3u[•ENDJ Ôƒ@Ы'oFɽ†Óû C(Š¢,ËndØ`ã8–’÷ÆaI’œ†ãÁ`2N_ž]lïît¶Ê»²Ì«Ë‹Åó§'Ìó ˆò«ÕþÞ¡k àhüà£é8³Ö8S¯¯|[•Ó,9ØšN§Ó ²8sέ—«Q¬†©ª†Q–u];Ó5MƒŒàšçqƒrµ– ¡„èwÙê®›Ïçîág>Q ƒÎÛuQÕMG½`Ϻ¶Ê»"Ïó|‡ ¥´ä=‡ܺȟ<{fà5ùÏOŽ[k8çE¹®Wëõùùúü|k2Jèê œ¯1.ðÈ:Ýr΅䈸éÍ1òã׈E]0äÎè0 U¨Ñ8k­u–Q*ɯÿ }3ÆößÑ{Ï®U~3‰wVkT øÆý1@Bp×Ç^OO ’(!" ¼™xò @¥É8‰G”Aˆ EQ’$Q„a¨çœÞfÀ,uÈ64s¡@¿± c‚!€'ð¡z˜ û´æ]™çãÑ€ p¾¾ÒåãçŸ[M×®ÖE„§''¦n1mY{cŸ}þä׿ùâë¦ÕYwòƒ.ŽÞ0óü0³µžM‡I’…*ª¼L ö‡[È”+U‚w™  p¤‘Ëwî¿ùpÿ§g'gÛ“-Å‚ü0Åw“WóÅÇ?ýYW¬}WÅQ¶s8™Ÿ\øŽÊ²fÃÙl¶µµÅ+ŠBw­Rr6M§Ó{÷î!‡¶mû¼gl眈ȅpÎikº®SqÂ<±›Ñ®'ç½Bqï϶L×={ö,Žã¾†éL묗(‰˜5^H€²,³qôÃþp]åwŽî&ÃIY–‡‡‡Ñu§«¦+š¦i:ëÝ0Îv·÷vF³Ñ`ȉâPìlO§“63­#Z]^hcÇÃÁd2f)"*Áó¼ UåÒ›¦®r)‘Ï«¢®+.Ù 0 X¿¼O\rhêº5žiñ¼â¨Ò”IÕY€J)bÌ‚V*LÆj5<Û 9$¢`]•ó_|²ú›9Áßxç½t{ËX¬:ïH¿<9ûèß»|yrk4Út}Uåý&ÝΕ”½Ü©ŸXò›ÄHÔã4¬ÇYCÖw}RÊP}mÌB¥Â0lt³UÓ/Çî±Ã>ðn¸%p=–RÞ EúR”õZ>‹°ë bß–!ˆˆ<óØ¥Ÿ¶øßù®Ì˜ÐÉ×õC°qeEhP±¾€d`F.+o8*Ñ¿À€÷€°¥¶)ÊùÅ¥B¾8¿dž¾öÁ‡2ŠWfAD Z0ÿ×_|÷ÿþîw²Á€¶u“Æ s6‘Á0I r¤GÉðÍÃðxû½/ýô;ÆAWTvUî„Y„AÛ,uYrÅÃ@ @ŠÔ¢0Þû â@¡ìºFëV.wÞzðÆùË‹¶2’ UtöjnM÷øñÓ,ßøÚ{à 0M½¾Xžœœ„A4 Â(à<½8-»z0Öum;-šªð]×™¶é™Î9×÷Rp)úÛŸµ{›m¿™P÷T ÁùÎdòÖ—ßÝžÍzcÜÕjDZ.;c @k-0dŒwºimIä^¾|y~v‘ 'ÇÇdzÝ}ð¬iZpÄ'Q|çpgº½¿»'‹<·ŽBFÂØ¶ë:B\Æ"QQ§©´i(Ù. ¸wÝbYêΪPgë•& ÉÀy n3Ñî›"""çíj²ÀUÀCˆ¢„ e<íŒsÚXBæ­ÙÝÚÎ,ÇcSm[gR¹(ЬÄ*oÎ_]üüŸª ÛÚ9J&[@\C¡0Œç«âÅ‹S.Ðz4žX«m×zk8çÎ%$D½ÕÖº7óìáHD@ž‘Ǿ "ðD¼5¶ë1|ÆX(‚( ÓCäB(ƒ@)ÕSv8°(Œ6sï~€(9ç¬w…ß´TxSŽ~¡¼$¤M3|„°f"cLìF±k½V ˜×¦$ì&† 0cÌ&;“P¹¶2Å«W¯jÝÕuç9\^^꺽89— ]«ß¸{ïk_ý¢ ò€H¾:;yñâó/}ùÝ( Æ£Ì6Ý LGaœIxÖ‚Ù¹øëÿàƒ¬8xó¦ÑJ‰R±i6Hlj±Ô*K±°^ŸžžŸ[5έôJŠܪ­F¤y4MsQ¬@‰«bý‹O?­ 8 µ¶³Ùl2>úøïÉß|ð`þòäôüBp>¤|åÃû÷Þ¡P‘òÌ•]ÑÔõ0Œ+ãÚº¹<¿’R Á‚ â(É›Vkï}gMïs@L×7dc@dØŸMD¥Tßit]wrr¢¸˜ Gˆèœö襔ŒmFGŒ±ñx|x¸ï˜¿8¿‡o¿ýö`2BáH‚h$“(œFQˆ`]§;¨›¥u¡”’«¬Ñ:KGXË o]Ó4*Nû’¦)ç¼i5ÛÊWÏO^-ò¹àB:çÀ}ᜉĈsÞ[Ôö%µL0´ÚfI¢ sR*äÀ82Á8 ûòMJ¹* E6º®޽´/_—§/OG£"To;”a¸½»7ÝÚ¹P£(©rn¬sÆ¿¦^õÝ€5€ØÃ‰7šÕ”gÃØfÎ9²®ÿÖà<óÔ»â÷'DaÉ{ï²0 •RJJÎùz½îï‰Àr†=ø× }…BpÄо·ü¼9úQ c¬‡—É÷e"°ÞyŠ1@ôxt˜»ÑýnÀ€U]­×ë«Ë+¥ÔÝ»÷£ æjÛ¡à+]üùw¾ó½ï}U$I«»ž&« ¬»Xe’ƒ(ñxE%g!€%SGoím§iš¦ñÙ‹—ãHÆè¥m@kìʃ[·$£+(V€#(OóËpzïÖ­ƒÆT#™(!íÚ¬‹ÜköwkïùJ·œYA°6í¢«vȉ4zúäÓ|‘Ÿžž^®×Ÿ}zurº¿5ÛŒµÖ_ùÊ»BE]óšŒPRZ寧=œsÉËó¼®k¥‚0Bæ½çmÛ_Þ{"Ž 8CŒ®7Š2ã]Y–Ïž=ûìÑ£§OŸ&* ¥R\8rZk‰=›èZ…EÑÝ»wï¿óÎÅéÉ?úùíÛ·㛿Mž_œ/£ !ïCÁv·Çi¬ÚºÐmÅ ã(ŠŒöMÛ2¨ÐXïµF`ÆyoŒÑŽ"bŒi­‹¢‡BIDÁ¸¸¸¼ìœïÝËûû‡7¨†÷žœ÷ 7Èã|ï/Ûb"ç‰*äÖ9ë÷€ º®sÎ ¢1ÆADeYÅ]×­W«ËÓ3A$Ôd4õatöy¡;ë½×Z¯Ë…Œê¢”Èo˜[ýi¹99=åƒ1¦”"`œµÚ€àä\§`×öÞù,ËnêLK¾wy*˲êÚºkÛ¶%¢@H)%ô°*¢1&B"Jã¤ïê9ç}Öí¡WèÍ7Èß@;ý|ð&éÚÉ€Ýègû»¬`@ - à „X˜5—òù‹çd©˜/Ÿ}úxqvûÏÿõ–ªÄ[gÁKåO®þ—ÿùß8º«@X² 1$oíöx²e]U~ýÁ}æ·Ú¢UBv€ýóû»±=Þbµfºbµß †\‰8©m\ãgjÚÐS4`‰ÿ_þ濤ÿbý?ü×ÿuÕ'ÏnoJ4KÖ¢cÛFñzÌžŸ]q%³ÙLgIÛé—†ýâ´(Ü积ž?yruvñèÑ£ÎÊ,BÛŸ.ÔÅùÐT?ôwb}µ~ÕN÷~å·IèŒåŒtqådqiÊÚ^Ä>FÐi( A à ! "7Àò<÷ÖAàŒiëJÉ{þro÷Î|Q 1 # §«52Âum:gYiþöÑóÙd*YØz;¨äÅËã;P¨BÅ8óÎ6†:²-Iˆ³`ht—E1gz½¾O'ã!7±FÛïÿà'i4:ú­wMkŽ…¤u^УñV'A:arl “Ã,oÖëªÄ ]åE–eœ¬ ¢Ì#k»Î3 ²Í²\íþÁ-‘gž”RúÖAk³8*Ú*ÄEÈóD†©¸ÔÕÀØÝÁ¨UQ¬bæ0 ÓÉpVæÕÙËãt6Äz%J¤‘€Ãé68á)²^*ä!÷^xç 2†aVUγ֚>x‚À{Z+Á™÷<@©Bï=9ðÈZC^·V6y½\äºíE]×ó|µ²-q¡µmkÍ*i­©ªZ( )Ѽsÿî½ý­im“Ë«+Å<Šyk-÷h­µZ#¢Ó&Žc(k­v–1t Ày$_h<€ÈO$0È!:/¯þßÿe§E]UiÈÏ/.™óº¬¡Úu¹=šJxdļw` ðóùi”„³íi\I-,ržJtnä1C…I<¼' •®¹Þ¹sçö£q<¢íÙ¬*Jè½Ä=qktÛj®â8î9p¸{÷n4NGÓƒƒƒ8Žƒ àÎ8íHkd$•ÆIi-è:¿š7y"ž ÓÀwÅrµ¼< îí%aôµ¯¼³¿5Îsþ΃ûç'/˜uû;Û¡T‡»Û;³­€ƒé´é¥”CèŒ&r@Œ î» ¯Ð{ßÃÜÚáA‚› 'H Û‚ïk#† 6åxòºëÚª.ueµáÀ뺎¢(IŽlo¥B ‘1çáá§ÿÒÔíé‹ãa[ƒÆtU[¡D)%CtŽôÆÒtàVqÄ1"£]QåÑ8é:}u¹>9> Ôêåý—q¢º®k»V8¥Yšîïîìï힟¯_¾|óî “Bp†AðÁ MàÉX=C’!çã8f2ÔºE¡ï=ãNJÉs.Ó(F)ªªs‘àÊàj]¯lQå•"“¶m‹ÕÚi㌠‚$ÅQ0ÙšÅã!ÔnÝ4Ï^žnÓŽ·-‘Ö­öd;Æ”’HeY¶mǦi*„°ÖJ"—"‹ë¦+в,›²íÚV—UÕ¶†ªmìº.«²iõÞ[ã1eY†2dŒ›ÖqàJ…¹Öm§›8R‚´T0Ž’x:Ýyvñ*áBJ(Žˆä6®÷* {ü†1¦¸À^eï½7=´õ…ÞcáiAX@ þO¿óÝÿõþσÝíÍ`0%`ÀŠʤ3* ïݾµ;›8à 9•¶æbpzyšÓÑ8ã ¸ÞÁ1àÈÀr¢:ÏÇi§ Ah¼NDÖ<üôÓ‹‹‹_ùÇ_e===FˆØØ–˜—Rj¥Ôáá!BO+ .I¢ ”qFQÀ99 ´Š´@!U’$#ÓoÑißt«³ãiÀ°7îìN‡£0Tiß¿ºõúâ8dÝlgkšõî˜Y¯8Û–Úzc‘à@HžŒ¥N»ÎH†ÆiA¬_››]äÐ÷u=8vÃiÜ€Ú=>FÄp€€€Y:3Z;K‹b)„$bOž|¾·³;žì1"GÖYòà‰À8bÏŽ_K?=;9»8>S€Ãáî¯~ýCrGÄÈXm 0Îe”ðãBHa¼ce(x«MÓ4]·áñšÖ,æWÎf.„DÈóå<íLf§/¯Ê¼@Â$ÎŒ1à—*dŒ5º20Þõˆ.rdÀYÌÕd<G“†ùeÓç¼÷¾i&Å J÷nÝ{y~þÉG‡ÚÞŒw†“ÖÛªjBMGcc¨X½ï{ U¡‹ d“ä Ø‹²øøñÓýÉÐ4¥µ¶ë:WT$åUUU½Éûí£ÃÉìÀ9S…nÛuQ7Ëz‘W—‹å*Ïë¶­uW5mÕé²mÊÖhïT¢ eTùnè#ιaž¬™'9Úš„¨×——«òøôÒTDytx0MÂ8²Ö6Mc½ï®9¢é:om¿Ý !ûêô51ákØ‹p 0ÏWgÿûŸ|{8™nïï{ð»Û;Ιh1®œ¥Î¼uÿ> àÉZ&¾¨^üÅßü…_—Wù<â<Ë2F>V²)JeÉve¾5B‚×À…@ÕåPž]œ÷Ži)—;{ûmYqDF 9¥¥Œ¢èàðö˜¸ýÙ£‡mÛHŽËÕÕ2ËPq# Qôs§(”ty8¥uYµu9HÒý­ñ88£§ÃQš…‘P[[ƒjuQ//†±B]…BŒ¼sÞ[ð$‘­ÑÚYg0äÊ@Ô¶-9Çq–eJ†žC?m½ùÖÛeÞ8òMÓ Ò\*’R®.¯ˆÑ0S’÷I)‰“¶®ë²bŒ80cmÓ¶±TŽ!¤tº3¶p~q1Ì*Ù6•cðP*FÄ–y.“eÐjö³‡Oü²¬oÝɧmªº(Iƒ@Ùè&_®¼îÀÚ$¯Ê«².£+g-ùµÑÇ‹Õé|Æ8­u×5J)ƨ( H!D‰råxž¯ªªªêâÅÉ9K'«²^åe×uÆzã¬%ðD "&Ã@H¥qá½7ΗJ’Ö32Œ!Ï0ïYYêæ¹ ÖUm,Ò­­ƒ$Ib£»²¨{æJÑU-#€Rp±Ñ*µ¾ALéÚ·†1&!(º®îô—Þyçöáí®kGƒaSh½·žœW’a¼=ÛÛ¶–‘±“ì ÆƒýÛG‡»û¶íÀÛÖ'ŠT ˜¤ÐYŒÌm%D’@ÆÑ;w¬µÚøy^ÇB #ê ðÉyÎ9„áRÆÿݪàÖí}t´Z­x ËQɈ+ιTQÒÁlµM8Û<Å JÃ4 ã¶+ѓ࠻º®Öu±êšuœ¥‹Å\(a("aŒ16ÆJ¥àza¸T¹b¶#íU ÐvÖcÁ€GfŒÇ}êk\}ÃÞ Ö ÀôOÆú êš>[,æ=øùüä,Úb­öÆxï¹³ÌZ∡TÎú8Š$JÓ.¥4Æ”Uå¥Ò‰3!.¥$×4UH@2*ŠæÕ²tq9Ý™g'¹öJ•Rïœ÷ ¹÷ä{Ñ 2u/ãØßV7$T¢Þ&K€÷ñÃO@pàÔ5M§›Â9ĉ â4 ¤®G{;{À“ŠÀ@ì~ø'?úÉÿÑû¿’§£žøÇ p ”²XUëõŠ_DïÕ5%DRƒùÎÇ?úÃ?üCïýv6Ùß:¬çKžrι·”R•¤weª(Ö‡·ößÿ=w•S©¼1NpN\ޏ5pvzyòüÕÅÅÙh4ºÿàh0H­3ƒÉxy9oš6_,[S @"b Ó˜@«;g©ßaà<‰Þ¶ÀYDÆ1ïÁzòàø î,¥Ñ7]ô1Ì®¥'ˆÀú"”]שDd=KÒÄÆ‚$ݽuè<ÿôéçEÓNÀ»Þv7Äy?g»[ï|éÏ?ÿüñ£gmk»Æê,Ù]-Ú‹óÕ³gϯ®–]kœvÆþ˜½“,ŠöFÃ$ ÊÚë—óËb~ºà^ŽÒ·à`o9Ù:œu%¤(‹Vùº,KÜÚ’BI¡”ê!xJ2Á9'ð`!%9a–ÆIÛ€Wº­ºÖêÚ[ð€B Câ¡ÈfÃÁÖô²jÖ¦𾆢ª\kÇñ(ÌóU¾ZíÑ/¬'ÉE’ }».ÚVkß;>Yg[š dè,Õ­)Ë’s^ºÞÖ§\J)y:)ªÎC’s 9瑊˦äý®ÃÊ1©JEÇ tÈ ¢@.„è±Öx¥IœµÑq™Ï×¥mL[wÜ{ïÞÝ‚ ¥°DÞ9BìýNûÊÈ#ë×:8c<ÁPÅ‘3ŽDdœ"Æ…wº<ýË¿ú.€ ’$DÁé.cßêH†h½'>ÊF<ÍE@à,p ´*ª N¦Ó-Î%#l›V&I¿àÛ_ÕպȽ?|útzïqxqüù_ï?~÷'»½»÷Þ—¿l×Íb~ˆä*äœÛ® ‚`8 5<˜LGÈhgwË˰š¯Q)ïí¬°l½ªŠ®{õêܬÊ|±ªëjw׌¦$=2V¶ÍÙË—J`•ç\ˆép”¥1i§‰Ho¤Ø ‘‡A"¥lªŠˆzurÎ6d½ÏøßÓRöÍjµ’RözÈ~£F ç8gÄ ô$|GŒ!¶±ŒWÞ¥Ùèöýñpöìô”©ÀYâÀø†×áÁÑölØTk««8â“i6LFA(^¼xv´?[.ê‹óåÉËùb±\%I–º-Ûºvĸ’iЦ¶n™¿X­ž|þ¼XTo¿ñî—¾òÞz~Õ4+ v]•¨µÚ‚NFëÅòüüü`6óÎ †È¥sΑéíý„L 1† !ÐyÓÙÓÓSÍ8dQݵ–SLap‘¯8·N…"Ñ(®]ób^ E84©­53~8@ÛÑÓ§O?þÅ/F3à ц¶Çq#šºÕŒ3ï[ðNrÉ”äÀ Îëår¹^猱¦ÐÓé4Ž2ßaÛRŒ‚EëcJÈ…aœ3!e°µ›!˜'+Fè¤ D¡Â0BÆH°×!¡âJ¶ºŠ£ ƒež³dàŒ§§Ï‡c¥ÂÃéÖL!³@Ž.¥D€Œ+)¤´Þu]Gä99Èz/y@Fž2ÆQ0 )¹”ü·¾ùTç|(x«uª²®É{Ý´º¬­µ@ètgC¡,#Üd£4€GòÌ9JƒHkkœa¦Yj\kÝùb]%á|}U,άw5³í­(Šª¢ã’01eíœC&½tÖ˜Pˆ$Iz³«ºéx’_-6®­Å­uŽLÛœŸ_=uòøÓ§ RÇi$Ud=6 BžÅÑjµÈën†ÆñDŒ3!‹É«:˲hœ¥ÃáÑ[f;Û˜Åg]W—ë½hkU®Y¤ÖM3›ö8B2N.×WI”6f9òÌ.¢$êêF0ï¼w=Ͻ%2„äm*gï˜o:°1ŽZ£ W:ÃrUFÒîm[Ó……áà8¾ÉÂ#'†%JˆÝeÚìD³‘wÝ,Nšó3r„'Á—eÞÛYwy¹6PcÀ¢V{]ÓÙbÁ™¦â‚½}ç NÔ0Ü>Üëw­Xk*]Ç ófSƒDúî­û…ǯÎwîì½ûƳWŸŸŸ?}RüÊï³Ö¯©Y†!ÏÅÒ Ò+ßž®/£$ c¡:GEÕx †P£Ô¶Ž!xjkw~±2áñ­7ŽT"u…1VP6ÌŠ¦ ‚he*Ž”R_JGi^üÍâ²îšQžÿÚû_ŸëŠ–B Ôýé«_HFªë@ëqUv¾eiprµ„­´fd,9£eíÜl¸ýè³gUËÏx0ˆCáâÐ ÅQ\«ßÝÛéºnµZyïÁ{áÜ0L0M’4HbSçÌö IDATà‚Qp9 Œ£@‘í\×rçÁ[_¯‰;n44m·»·cίr€24(•”‘L‡®\­çç*^ çhLg[íŒU ‘!'ésÈ3ï™GÄÞÌJÌ›ùÿñ !îÞ½kª ½ @p‘†¡4yõÖ{÷nݽÀœs­¶\…©L—ß:¸}ëÖ­@*ãÊb#¢àÿ’ÈMükoüè×/OÞÿðÎî¶Ñ"wy¹ €,ËÚÈo G&¹˜Õùìb™ëL–ÅÅz…¤”"º¸í©"c\*e€WônBŠ1Àˆ0ËÕ†­»Y}Ø|Kh 7Ãw<ºsã& +óŒC.”ÖÞ‡‹ÙŒBŒÎß¹}Pníçz2sÎ%f˽CÁ@J¹^,W«Õ¸ E½Z+¥6i“6Ùôº#Rp11ˆŒ>ÙD$B4Z1ä™V† 6a˜MM=cÝm ^HˆD¬ï°àc†æÕ" åYìY¼t]§xãÀµŽy|zrú£½cì:·^¯§£á­×ö®y6ŸÏ¹$cŒwnX–EQø®É¤¶mQ%„’Z9ç°.8)åpPê²$)Cpï¾ýæ¾·Z,nîî–ƒ\0ècr¾kº>ËÌ›·° ŽçëÀ‚̢̺ºº\w\ø:Ôc9ÓÁáèøpÿ`µªÐ…»woï/g3"ZÅCï‡Ãa_:ç8ç‹'§YÄñxr|mD°Y&³lgPN­‰Ë…[,@K.'<88`ëæ¢9ã™=_7Í»O*£³Éö¾H)ÀòèöñåÅlw€ˆ;;;ÛÛÛ½ˆ¨m–RB­ïçM³l-4xZBˆ­s1QÛ¶­ó)¥ ×UÓæ^1$ÅÆ„,šÜI¥ÆSn­ È…ÈŒ¾õu[KÃO.Qi³C¼–åÛwÎw}ßh­"m”’ˆØy™ BÀ,‰@_û³¯½ù替ø _-¬áŠ £Dð‘8Aê}·®ŸÿÒW²­íÍÆbÓ·ÉJüí÷ßÛžîÜ<ºÁûP(»IEŠÐgƶMç¼WY9*J)†gØI{éé¬D.!Qß÷±w³ˆ©÷Íji¥]‰ `ò襴àÚþÎßýÕ_ÖRmO§“|0ÈìÖ`¤• ½# …)€p Àƒ/¥ JeµÖœËËÕòp÷`´³W¯«Yã—ëõÃEu½í¾ôʽ“÷µÖãÉÖÅÅÅÅl^Ð'Uö¬"%äB0@L&ž 1ÁLGC RJ(Ɖ"!*.¤ž!i³jšHm„²Œ±$ULIåÎÞÞ%†½÷N)Xµn>x⻸˜¯ONæ“Ñ”3Ø›îݹuý Ÿ{éÆƒrÕ«eW‡l8̲l~Cr&±HDL‹¦k¥”›?D¢L˜ ²DiÓLÄrkº¦þh¾¸¼¸àŠ"KÁÖõºk›ªá€ƒñ¨F¿l=¬ÜpÑx6¿<[Õ mE9vÑLÇ£ñøøÆñþîî믿¾š-ßzÿíå|u~9³Ö'ãcxúijX­”R³ó‹ÂþÎ."^;:>ÜßÝ—˜bL¡˜äæ…ë7ªz™qYŠ€´•çÌn±®š¶­º‹…»ÿÁ˜Ü¼öþÃ'[ÓÁÞþÖîÖ`ïxçpgZ¯ÖÛÓÑxz¹ZÕ}h!-«õü·ú¶[/–]Û*i””b!3c,&rÎLœs.“Rs¦"…¢‹ƒòÌ…e 1bt‘ˆI©I$¢Wr±ª¹R{‹DÊf&³½ïŒ1ÖZ!6 WÈ(Æ0_.|¼b q.>‰&ʽùFÓ4B£uêz†H‚‰+ŽãÑHk !%2’$ç 9@>dù€ô®õ(´Dä}¤Ô{ûUÛ)%. g €½þý×’s‹‹ S¦´äbR ¦Û“ï=·5žpÂétÒú>ËLFÐIHÖòŸùâKãáPÏ@ @à¡`DP#`l"!g!ÈÓzV‡~°=Ú¿q¼^¶oßÿHò¿óæ£Ó“ë‡ûž¼÷¥—?¯ólÑVƒéƒ¦®s›7]-ßÜ9l:¶1$&˜Þ4ã‘&¶ñÚÀÖd轇­µ)úªª8l¢Ü  øö*B–¢PÄ€BßÏ//ÆR™yêý{~°]W‹Å[o¼C(¶†[ׯ]»u|3/t&ÕÎîdo'3’ç,ŒÆ…4ÊfÆXADL€PŸ4dHb,„B0Z€áZ(Î2J>$`è}?»¸¬›5Å`´d@Á¹ä=À´Uu6«—~=«3%ÖËjˆn0´ƒÑt0¢<ºv8‡£AçûËËÙ|±ˆ>4}—OŠËÜ!.–ó¶]­ûfdFÃí)cl8#"¦dGeåkÍE¡ ÍôþÁ®/·®ÝÛ߯|óàô”¤>:ÿøÑ©kÓlVu ó×þÎtgôÏÿðö®ïí/ÎO^|é¹\°®kæËËu]/–]H޳ÅlѬ*æ#"1%ºÂfBˆàƒ$ND.$ï=)¥"ˆP·>¨>úBàÀbŒ’¶Æ…Öä™â rÀLë‚1MQPD„¶é‹Õ|¾ŽY–;×Åĵ¾*¼}ïºÎ2“cÒ• EˆM?7C™çù«¯¾*„¨ëzœeœ³&/zçYH“Éäèè´®@Tнõø£ñ¯ÿµ–öääÔ$LÂE}ç“Äå|>dz4 `˜<ÃÈ0 ¯ÎŸ¾zïÞÑþÁþÁîÖpœe™‘j<(5ÓétRŽ% ÑjÅ f î J*@OpH€@ȳPÈ´±kDà tgó0~tíÆÎÖîï~ðèᣦk_øÌ /~î…½ã=ÁñÇï¾]ìsÏ=g…’ Fã‘)óvU%.¸” 9>ƒëEŒ}pFYDÚ,JΖ+!DiU‹¡ Q+™ð¾ß,Þ)9]e:‰CF‚³Ðõ€Ü!v>ÞØ6¾_Uí|êੵL]ÛÛÛoݹqÓ33«´ÖF1Ρu=bDÂb8ª›N„À¥BÀf²m[`”ÉDbBpNÀ$ 1ú¾Wœ ­ˆÆÐ»–‹ÌÊa·à­ó›h¯Ò:b\­êGÁ2s¸·}¸»wx´À›R[¡XJ—çg}߯éx¬¸t.BD,ÆC!Dã{ï=0V–¹²`œ\rÃaiWVïLwoܹí\¸\.žÎgßÿæOf3nòÓóE»NаBéãÏååÿàÕçùW~é—¾úÓßüÁ7Ëá°:š¼ùÃÉ€³‡OBrc}JSÃòrÕ-M²( £4BHL«ˆ„ïÃ&Ø÷ýFV £‹)¥LZJD™6’3 ;8<M'E¦C×b¤šs“éápêC£Ÿ]œ=zô`{g4fÖæu]LHÔGj!q&¸’”6ÉÆ g*%¸j´’ßÿþ÷÷ö8çÛ;;<¼ë:‰eE×¹Ô÷“íÝ­ƒý®E$Î伫EfvwŽæ«µ%x<[ E–eyiG£‘ÞÛÛ͇×oÞe 1DŽR*˜ðìWñúŸýkÓé´”<ë¥c€ 1ˆ†hNàhÃQVÊ*ȈH(@bB!Ö·ªÖU×zÄÆõ]ÄDÓöµëVój½\n¶FåÈÞº#º.„òoýÜ_»÷™—l‘Ï.¾óÚ·ÿà÷~ïõ·ßü›¿ðK23>z`´—EÖ* ”¨ïSJÀXBî#*Éb@"’’qAÀ —Zò X ÑX©3¾!·ÇMà mÐ@Ä€c&³ˆ3nrÓ9_Ïf†Ón1*ÇÛc“Ñð¥ë·Æãáöt¼‚µÝšƒ QÄAÁS²J§„Ð{BÆ¥t1$B!Dç€Mè›3P™œ §€D"Ñi—£Q;n'ÓQjj£ÄpTjÁ«º†ˆyawä2]¯ |l TXsóààöõ£r-ê¥$6?=Zu®mš&„™ÜAH…Í(ç†+éóa¶“Ÿ]ÎcVÛMèi8‡ÃºÝÝ1ÆÐÕÎŽJ¥‹³åÉû§Oÿô;ßúÎ4ÞÞÑ$;É3h×l >»;øÏÿÆ— à+÷®Éâ'¿þ­o¿ýÁû2/~ü½×ܼ֯åÀd6øÐ6ËÔ:Þ"àŠ€°ïzìbÊ]×uÄ"ºÍF¤‹=¥8ÎìP[Æ„2Ïs.2Öììo££>öÞÅœóq¡K;ÎÊb]Wç—糋§>6GG;H[——3™©¾ï\H, (¤V™-B³@|zŠAþ–—‹ù¾ð²1fµ^¯/g `¹X ´5J7mÛ,WãÁ2 p ðU[GF·ï<Ç;|ñÆ-lúÝÝiQÅ(ßÛÞ)$ÇU31„JRÉä°3ËAŸ)+@€ª_¶@H˜%hÆ,)Ü,Η«ˆi9_@BB䉼÷}߯»fÝ6U×l"Ò”¤êºŽsi•¶\mÙ2ôÝv^<|íúñµŸÿ©ŸFÔÛÓ£_üOš®ýßù?þÚ×~ù?úÛ7îÞ^œÏê¶ãœ‘ä„ ˜„\L ¤$J‰s.6´rN\€”B®¸ÈEZkB Áo¬üŠ·Ç8gÈ1 ¬í—Òš¢ëÚª]Øa¹•v¤_.Æy9,3ÆB»º$ôE™ æq—¢ \¢H<1aŒ¢”„¥L ^k•ç¶m[ÁH)á{½ã­Ò¹Ñ\啯‰ ¥d8/Šlº5>ÜÛç. ‡%Qš]ÎNÏNÐfåhL®+¿ÂA µ”[£òÚÑþîÖÔ‡N1@ïçç£éDi™;*Jüp´ÕÖm^È™²Y$‰¶ww¯íÖuÍòÞ_^.1ðq5[œŸ?ÎŒmš®ï¢j¿÷Ã×]œþÙ~@™}þæÍä©kxw¹ «ö…Ã{{ýOÿáÇ´†ÕÊ?úðÿ|í¯þÄO>%Ó,…Ý›ëªâÆô’^,ÐÙÓ']×GBõrµžÏ%1kmé‚•çÐÁýåÅêáýÃjá'×Fÿõõߟ‡ªªa2»¼\lmo !.–s!0f•.Ë2ÓF 1(J¥”‘J+cäLzã#&£´Ò‚¥Mã4 Eì*¯ ”"`P‚&¢²ÌŸœ>YV+AзMHѲB O>jn”±åÞî¨8Ίá`±XôU|Ï‘¤”Vé¾kÊQa¬ÚDl²Ü(%ªz¥¥ÊŒÎ1¥}ß÷Ãáá³B* SDvP”!ºùåe—©­ÉÈG±®}”cѤŽxrˆ‚2ÓC ‰oô4ã¢(8p½jÚuë^ûîw÷Êéq9Ò(÷w†ù`;ŸZÖ´.UQqžfeÔŠ1ÆŠÜKñúïæÙÙb¾>?Ÿ‡ƒuòÉûÅâ²,GI0“×î^ûì_¼õü];°}ßNÜ6¹„uïRß Þ%ÂivqÆßæ³9¹à—Ëåh²UÅ“§'.c¬Èíöö6IQû°\U#fÏOfïôP Û©<q3xåó?M׎íæÓ'õp<üì—>wûÕÏ}ýw^þìËïž|ðëÿÅß0Ö[[[—‹µJ#šz¹®fóyW{ï¶d”fÆ(kµƒb—EžeÙî½ÛRJŠ„äιè",æëè"ø¨P²£ƒ„œ‘&N(‰k“q¡×uÿè|Öy÷Þ£û«å|Q-«$uâV”0uÿÑI ©ë:ˆ‰ `¾óFËé®õÁ¸ú¾FI)Bþ—ÿÙz÷ÚÍ­Ñ´©êÛÏßrÞô!àê11D.QsY5µÒ’6ð6@’lšš7y Ã7(:†€‰€ú®é¼v^y•1c¬ïû§''›躮«Õz0ÄÏÏÏ¥”FêI™ÚÆ2Æ6×Z ­6äÅ…‘*³Z¨œ ©„H6ÂHÐt-øØ4Íjµâ\D Œ§›Ã£_ýÕ_ùÚý¿—õ;Ÿv<^,gÚwD(¹` cÖ ­†“±2Ó²ÌÛªîÚÚ÷Îu]Ó5ÚH››ÎµÝºµÞfe>žŒ|×oÈŒ ɵVH)=ã[&ŠC¸1N\pNM뙪¹Ôu¤`µn.V¿X»>”…=¾V0ȼC‘ mmJœ'!»Æ?¾˜Ÿ_Ö‹&´«‹yZ^Ä,ËW %ƈ7Þ þÌ¿”Rн÷a£¬þµÿð«bÓÖxQJ”à!1¡CðÑ{“ˆ(¸Ê‹ ï!©+^=8p½ë½÷®ësMÓÄ›uå½—R:çÖëu›R…PohHÎeÆJ)]× ‡ÃËÙÙœg£”d*˲ÌXÃDŸµåhB …2B˘œ§Cœ3RJqÓVª6|— 5­ª†…”®–¤œçŒ@ƒð@7oÞ\ÖÕª© c[Ö'O9#J‚eˆ©ªê%ë ÞϲÌ*MD‚q]–\KÜZËm¦J—cO¦Y–1.šªnª*:ï "tÞs!¸tEã»Ò!$d]Ër˜iã0öbËÚõ‡“rÖÄÞûðäÑIYf?ùò¯]?@Ò-tï;ß9‘‹U]=|:;[4»G7×§‹õ¼]_˜^Á!%ö¡-Í2¡T^Œ¶¦».BS£;3-·¦[1ù±(‡ƒÁ¸Oa¹º|º¼Ÿž²s<»8õ¾…›Ðê&ºë\p}R*¥†»;“b nï¾xïÎh0$ÉBŒuò2·ÃÝí6…Ó÷/Î.g']YiÆõrAÚf[]n-Ÿœ~ÿ»¯ïöí‹“ÝñW¿úÕ½‡þñÛæëo¼ûà½û§ Ç[¯ÜhOŸ>ÿò­ñÎø|9»q°7ïÚe[+£³­±ò˾P¦ئ«SJ‰<ãÀ\ðι¢Rªmû¶m•ÒJ©äCÀ$•Úlâi.Œ¤$‘&$.IŠe\=—Þ7M{IÎ¥²A.3ÜùÔ¹÷.°$˜Õ q NİDŒ.0aJÑaBH ˆ€mW ²ANp΀“A„$•–J b $ñ ö‚à\ á;Ÿp#㊠Î9p,!9ßI¥Hd€W[ ËË‚GäYF Ò•/±("ŸL¦1á㳋[×®[£û¦æÞׄˆëÆI­ŸÖÕÒHµÙc5Æ ­DBhš¾‹sœ…í"sÈ"—"˃÷Àà |Ûƒsœoø°„¸i©‘J*®´‘Rè.$$¦¹!à)ºuåvö†ÇÇ…ÐÃéÞ5mí´ÈŸžž†F)£…––se«ÅêñéùãÓ‹jÕ´çÕq>)U¦¶†Åhݬ\ç{祔>Dç+a}êÜÎp¼nbuq‘Ú^+Ëœc>XÉÊæ¥Þ‚qâ}„؆–sŽœåѲêPÒænisýšÌµ]a”HÄ1nOS=OLž©LÉ2cÏŸz÷ÑìÄoOCâÆä£íƒùb¹\ÌBì‹ÕϼúïÑíƒAåúã“ÇÏNS6¸8¹ðŸ‚#Kæî—æ. ÒÝë×–Ô6±=D„åF6·Ûc¿IƤ”D¬m{-•ÖÖõ®ï!â›)bÂH 0Æ$$"¦"ç±H1 É|¦¤´¤tÓwmב *7YßÏSŒ®M˜LIs³Y“†8‹12¹1>ç|ƒ å"Ë<@F D×÷!×Í»®‹1J¡½÷ïÛ¶]·Íz½VÆœ]\2¹뺮ëzôSBÀÎÖ¶H)€áp¨”ÂôÎh9 ˆHqˆR¤Rhž—{ê\Œ‘Bà}×e¹aœˆbTJh­|tD 1^!ˆ8)¹T­Ut‡»;wï£_ r IDATÞ¾~óË“bvyžRÚÝÝuÎqãñ8Ë c,bÚh' JB DŒÑ‡Î5­`¨Uõ\J¹½·+DΕHÀÖóõ[o¾ÿæïÌgÎò­χӉîÓåýo^¿~ï…ÏûϾ~íàèó?õÂg>óâGô§ßùö¢ªM9:¿ÿôßÿÌçî‹òòä±E¶5 ‚® ÷?xDVÄtÏ¢ïëІuc™–FÆD}çš®'¢Ñ'äÄC]×iݧ€ “¤è#¢Br‚Gˆ”& ”ÄDнGœfBJž@ŽÑ¥”Á\6µ G°V—6+Š\)á|Ï%Û`ãÀ˜|9CÎ(¦.zSä÷^|þàÆûï}üFõÅ^ q°=<¸¶§,ýð£‰ïVœ¥|÷Á÷ÇÓïH6™¹Ê¶ÇƒÏ½tïåW¾0™Œ:p&Ë–Ë­Bžç'''Á›Ýéd£×Œ1:ÆCpˆèy jÙÌÎ1õ!„²°©jdT·ï<—†c¯‹6[¹Ç‹×ÞzôÑýUfÇ\ªë7GYþþÛoÝÛÛþoÿÞ¯¿ú¥ÏýjÝaõ·¾ú ðOÞü¦f2ÐÙã áéìÏ¿Ÿ‹’èèøÚãÓ³Ñh¢¸ÑJ%OZæH´¨»åj±^¯µà59›éÓÓÓ༵öŠ¢M|CR@&¥ä‚ÅQjÙµ 1`˜ )""÷‘3¦™ F}ô½wQkÁu ä}o”FÜ(.x £cŒc@ŒRdÀ´dY®Ë\[«%G¡ø”xvÛ¨TÿÕŸüï÷¯~û»¯aRÃÁ¤®kÅ…µv1_HÎWë…RŠ„Nw¨^ ‡CkmÓ4’¢ÂØl#äœ{ïœsZ*Ƙ Œa€$˜ðñêÂÉ9WF3Æú""ræ1y@©%ãÌ·0$Œ˜â™ˆ a²l³ÔœÒ¦.L]×eÖ@J(¤H‚“D<¥$™@Ä”(v>„ˆ D¡’ÚŒôàøÖÍó§ßxÿþýØú·Þ|7çJݽÇI ‹Ïp]QŽÛÎ1о¡‹‘< Ú¼ )eïdfÊ ‘F3™˺íb¯¬eˆ‹Å¢ïšÁ`px°—|è]Sdù°ÈµÖ sNÞ'’"³­¡k3aö·övG{ÇÇ7ÍÖD1Ë @„èY2¥E ¶o¢ ðøøð/F“ßü'¿}wq~"×ë,n‰ÀÈɨ8ºuƒW+•kç[ÊÍúbõàü)·ör¶^vëÝ£½»7níLG/ܹ³¸½®–³ÅE^MÓ !¢dMµìªJ¸®BHL ÁU!øˆ)dùD d^ÈQÑqn¤žÜ¸½¬ŠlÙøÆ¥§³æt<û;×,ËîܹsòÁG?ù™—~ãýãìÂîøïÿþoüö?‰ÐÁò{oýðá'C½ªT?=BKõ²F|·[ëétæ›fµh×ýÑÎ^&­ïº¶êC$&E/¡&‡žyA›L BØœúƒÁ`CCBÆëº!IÉS¡¤É´Ì 2 !¡b|qv&Œe$#PLæÚd9 – cÞù¾ï" &1ˆ’k.ó‡åx2œLdzê<ºc–5 {ºª#¾öλ9òýýÃÃéIiw¶Î.féÃñÃ'ç²,‚O «Ð €cßUÁ¹õz9,)øª­l•iUšÉáA6)ß_-‘Xçi¶èw1«„ëæ«ËÇvvÇeöÙÏÜ›ì gó ,Ƙ"ïë®,²¾sUß¾ðÂÄì—ά¦*$RÊ‚`½tûÕÙSwòðïšÃé`bahåíñÍã[?¾~ãû!8àöx÷AÝüî¿ù†ÝÝ9ºy”‹°c¡wõî`Ê´\4§;fW-ïÝç_xnww{kkk8(í¸X…¦I¾qÞ%äœw›- ÅÞÑa¼0ªnÛà#ç<`rÎqž ·&U]ïßÙÀÂX«3Å…äjýñYÝ5À¤VšÄËó<´w¶‡wwG×·wJFûê`oëðÀD–˜P-–;ÿèû_ÞûøÑýúE?`±LÏ"w\!¥z^óËs)%gtýà çX¯Ï½ï«õ¶Çc.Àd™(ò!‡B ò”ŠA®´Ë‹Bl–î0¥¼Ð)p¨MŽ) ­=ÜÝ2º¾­º¶nº8Ê…´=ASw…ÍX€jy1|d}L@B°ÊbÀ ægËÉtÄ•´áy9ÎelÙ®#&dW€ÌcLƒ˜äx8bDZª,Ëú¾Mõ"eÐ_ÿÎßçÏ\§ølc<Ï[&8‡äCâ(ƦiÚõŠ8[Öùžˆx^޳¼xèV;_ùÌû¿÷Ïà"¼xxw§ú(º€)O+FªkxÏ-š*m\YOkŒÁµÁy@b [È©à„ݺ] Ë,Ó!1JÄr!2¡d"ì}½¨B1"mše @ëª*Fåx<Œˆf`y¥D¾!dmn½…b‚ ”õ›«ÀøÏ|åËß"ÿôáû!ººõjN ŠÑÖð+?óeš<~üáÓÓ‹§OÏφ;£{ϽððôñÅr)¥$Î'“ cŠrHDÖ(! ¶uÓ6MS–%$Ę6×R@ ˆ)ö| ˜øfi 1zï\ ® `BD\j!…€«óÙòüìxk|óÎï½ð3_þòj±üøáƒ|üÚÙÃë7àÿÙÿþ[ÿ÷ÿQH¬ªšzÙÈȸ.R ¾ç„™e9Êóœ0Ç£­ÅbÑuç<&_ç¼òé«Õšˆ '­RJ‘6VݘðJþZ'&7J†¥Úšv¡[®ë7ßû¨ª*#ö.P$×;.š'OžØ¬(Š€u]#j¡'kå`˜gVÚLG¥Í°ä|Çø3اìŒ19¼2@PBð+8Ø3xæ§@šŸ6tsd „ WöÂ+GÀ§üÝŸ‚?úäà¯L³OÞÐ'?ÝLZÎ?…jüËoýÓßäœ ÆŠl¸!µ¥”:w%úH)‘0p~ç…³ñ˜å9#ªºJåùºÌŒãv9‡Uûö‡÷_½Žçæ}ˆ¢iS²°íÛ®E%µT$%˜RDžD—Š,Ú¢kšE³H2ð"yÃ)¶Ñ‹”(E×võzc,ËáöÞþdº;Úš)eÿv=dŸ¼ç'ÇœóMïÿÔBH!Jk¢sœrÎI!²¢H„)Ც¬µ‰èkßøÓ>ÄÛ·ŸJ¯ºRÈ„}pöpë¹NºÔ¼ñžœìqk×]×DÇCÊúhP°.øn£kbˆ)&ˆ‰! ‚¾iãFÅDðžn·v÷vM!A@Ü|±\75ãÂ÷ýåìr2Ý::ËŠ`”\×ÅC ½s>Ķ뚶닉b“÷Á…äCLHˆ"úCˆÐ÷žBŠˆ!¥O1PJ„US§ä›¶½8=³RüüÏþõ/¿òªáœ5Ô÷ƒ7¾þƒÄÁàÝ“§¿ý;¿÷Þ·^ƒ†$+¶ù`Âò ¸&ÎSÂvF#«E‘eZЬ4ÖêQI€‹å"Ä€„ ç\p> ö÷v///꺜I!‰p“5AÆ€s&’IɤD!¹`É{ˆSB±WB `Û¶uÓ==; ‘˜ÁÇB îÞ½UfYž™²È&ãÑÎö´,-tíúÁöö8/ÒL[.$çµ1i“]Üøáø'‡LRL3&„ì¼c|3“®æèÆXqå:dŸš$‚±ž"~Š*ÌØ3g„Ïüjwϧ ×_”Ö¿\?¹B|z|2鉯§&á'%wóXµ•ë;e2cŒ´™T*1ÖäRœÌæ'Ë“““ï|뻜÷ŽÏž<úWüûï×þΗ^ÿÇÇŸåÚKçß{÷)Ú­,H Ò|¥ …RV¬L\&Ç•Ã~Sä€` 9G„Ñõ¡C×51Y>1¥Q BèRZuݺk( ¼ö~j3fÌÅÙÅ;o¿¹ôÝOUß=]ÌÚD”¨sM®ŒÀtÙÕ¬ÐZÊ6†Œ+gx¢•¬×ËÞëñGo¯f犑µK}ZQ“ƒëG/}á¥ËËùÉù‰ãé6Jù£wÞ¹áV«UÕ]Ë@r£ºÖ¹„Þ{ÉclSñƒ"SŸN€!RHi£ªÞü;8O„c ˜ )J¹1¢ŠœsˆÌû˜|"®8“œó”`]×'ç§Ëå² ý×¾ýÍoüð‡o?99zp²h܇ßz :4v¼£Ë©°€ˆCBçŒ"FभÚÚÚ²yöäìô|~iÛf¹\J)9c@(að±éº¦5Ä„H\ Æ8pÁRŠ1\=‰‘'hÚ°gD6Ïë¶ïš¶kZZJÉ8ΕT¥ÍFã|2Ê­µñ`QÈá°ÜÙnm³ÌÄä»®–"aˆ‘ !žù˜þR1”H‰9ãÀH›£ÍxFÎg‚2?™'’>{cÛ4ooœàÀ7Ïã@ ˆ!]ÍÄ¿rºi1û¤Öý;«â_™½Ÿ\CèÊì}•ËÊ‹L+å\ð¶­Z_-×uÕŸÕu7ŸÏgg³|´3[u¿ýüþý÷ÞRÔ}÷ëßýÂôîðøÆó~óïÿƒ?üýÿëñÃw^ùü˜'nÕÁhËG}Fþ²®v(ƒþJ¯»¹@H)çL¨@àˆbJ+ç2Î×>²uUJ€Mí¼K˜ ô¸°Ú!s£-—ýºruÅS$ï8ýÿl½YŒ¥irßö/wË›[UÖÚKu÷ôlä =ôŒ8ÔFSK¢EA–,P€`À€dÈ€übÈÙÃO0 o0$@6Mʤ<¤Ä3r†œ¥÷®ÞªªkÉíæÝþõ["üðgÕ´D' Y÷!Êúïï‹8çÄ9\me9¾z´[Ú,´OµÐDPGL ŽFzHÀý““o}ã·¾÷úáxtëÚÍ^'ð`Ta”ö1ö1deVÆq>Íöw5g¾çmÖmCÆ `×ùÆ>·œ$u›*„`vÆzN "š„TˆA@˜9„Ðc4Ú塂  ÀƒÎdXÕN"‚ŒCðÉ¢¥”-/VË?xó­ó6ô1¼öú›ßó b£úþ¿ú>ðÕ½Ùáõ±@«Tä0)l«zÛl•5óý½ùá~9¯V‹óó¨,”I,Z—„ÚÀ‹Õº Qi«ž„HP+%ƒ, øLdNÊ`#¨)B¬š¦ó¾nûÒ¨ÈlVŒ'3k­ÑšöfÓ2·„2™L†˜§¢(²Â¥”¶ÛµÒfÌ8¥”˜HkHÿÿ·ŽfAd 9¦Ï®—O~úá $cLb?ñó?¼âðd ã'~/ƒT‰†Ï4<ÿ ÌfèW‡2ÃODL=«½ËšTDy®¬ézqqqz~öøÑéÙb£¼ýÖ»{{‡SÕ²PM'‘²^ý‚ ÛžòóàoØBgÀÎt¼3Ï?{m×Eê>º{|¼è2Ùv¾MJÇC"¹¶‰H⤭‰œ(s¥m|wÑT°8Ûúº\¡QÔöîqŒ¹IäÄŒ²ÑÕbŠ›¶úø‰?YÌ^ÜÛ§+ûð²ÊwÇD´?ß…Ö«ÕÁt”‹£o+›Æhz0îø>Z¥s†l Rˆ!uðDš¶]l.VÕJ9Ç=õ P¹‹Í¶(\uO‘™bïÕl¾m‹€ÐÇÄÌ4¢ò‘‡`gf!b̬•“ÁÆãÒ¯•€“V@Ì ¬AÔ8z†º*°NÊ$‹o?<ýpYÙbôx]o1—à'YÁ®S¯ÎçM×R¡ûVRIÉ£îQE%$€ µ$A'HHhl$BçÐf¡÷ ’i@ŒjÓxF«KBDLI#xiŸ&òL33$L‘šÕ²K½QLÁ§¡ ÜMG£I1åeY9ÆÔìïÌ'}Ûh­³,âAC ]_ÇÔ'v¨”RdI‹bk­íšú£2 Ð*ƒ"1Æø‡¨ÀÐ^‘ e0ô‡x9¢1áò.Îá,†éóò¯Ë|å§õ÷̼6ÿõ‹/µ”Ÿ@q>ù¼ž᳚GÄá)(g_,t–Ÿ-Î?øàþƒ‡ïÝûx¹Z•åtïð0&Ô&Û?œ¯×ë½ý£ñdÞ×Õ•›Ïñ?üŸÿ§¿ÿßþWÐýÿ~[_ì:üÂÍ«™É>|c~öè‘8ä,‚Åm}L Zk1YdÐǹÙÎ΢ٞ¬.üê"pÜWc—£"duF,ÐÜäéb»^7éb{çàÚ×¾ü?ñ'¾ @ ¨ûN» M¦`3@HM3)ÊMÕ`Æ©HÜúvÛL&­mŒ©K1tQ#*Føî÷0›OÎ.ÎÞ÷ƒƒ½[·Ž^ä˜Î/Ö.Å=œ†ÈÛº­RÄM[#¨ãó³®ë´ÖÎ9àèœÛ™M2›A ÃÙ+‰™Eˆ4$@à1² hB…$À½$¢D”ˆ%e•F0δûž)G;öÞ“Ç‹‹ S”u—O¦§ï(Y¼1?Èvv&¶ÜÿàäQa‘dQœ#ȤQ$W:——Œxº8·m݆'ž´mBïQH”%"QºOŒÆ:cED¼×Z[§‡ìáÓz é)¥I)r›ºoš®YnÀ‹hÑè¬Ó郃=ëÊr6ÑÊŽŠ,ø®ª6;³1BÌreN„W›uŒ1Ë‹<7Jaž»ÈBH1Š Ã3”ñß,Âq^„zï­µ :c)¥ÈÌÊiañ)8ëihë†}Dž¡ï ‰1£øè},\–•¥O‘5ù@+E˜R´J‘`×ô)IðÉ£µ >*²&%&ÜrŸ]¤2¡„” !Ý@"JÀ€ˆÁº¼‘P…ÀcÓ¶ÝfÛ>yÿáÞzóññùÙr{ûù—@W83{Ef4ǾkŸÛß)¨áD,>êd±Ùüö÷¿{ôË¿úçþÜO}ðÚq\«³—Ôbu|6K07&阌íÖ½q¨º¦ÖFOG#$ÃI PD@w¦“ùhb•g£ùx'!H€Õ*DM£ÌZb†Þ5.“uÙÉÉñ…?ùòO~ùKæßÅÀ­e›» nÞf h+^F™‡^M@D° éìè0—£M½QÜäšRJ%²M?ühyºX'žl›p²8)²2‡.Ž”±ÛËe¢›:,§±¢”.›Œó±11ĬŃI9óð‡ˆØ÷ˆ¨µNÉ$1"@‰ ! Qv=ÇÎ'â:’dãQSW :E8vªkÒêÑ#^¶“ƒ«WnÜ~rü±8ŠFÕ˜¶Uå}”6«íë·móàáãÛÏÝ©ûÎ mUÅöðÊM|~ò¨ëÚÉdR5]^äš’iC*Ï@ú~é¬u.9ç ¹¶m”Í\B­"§"7¹¶¡«uàÒ(Ô*%eFO¬ªó¥Šz,¥§€\´_ùâM¡=y˜Œ¸,KÚŸ·k§MžçƒÙ‚Í(„Èlm®0 üjVäÃÅÌ1õèÜ€³Àe~°( ¥”®ëíð”Q}DÄ!¶H%Ÿb»n˲TÚjÒb B£½Y¬ëãàЉHääœSF£V{ÀĘ[§íû0Ü1F¥€S J F?DYÓðFCÀ-¡¡€ ! EKªšîôdñøÑùý{O_0Óg_ùLÓ…W^¼ÃQ&yÙ×USo»Ô;!ЪïûÕ¦ Š–ëÍ­£ëÜù¯ÿó_þö7ÿ Uí·~ý×cw4n{¯]Æ‚Á'…ª3´½¶4¤ÃÆàÓÛLÆYö~y¾@ÄÅÙI½^ªDjo:‘>Äè­Ñ)Ʀ®Uomš‚MãtZ4ýL™ˆÔqDš/¸žÓèb¹@–ªjn>ÿ\€”CÖB@À!D€ßûƒ?øú׿þg¿ðÙ™¬51€£a2›$”DP×uèãÉâb2JãqÙœW,Vsz²|rvѵ¡ïCÛöõºrÖfN·ŠÖ+UO&W®îíííY­>9±?ë_††ü“'úe¡Á°Ïv92 ?Eó|ßVëêÌ9M»ÓIFº1‚ßT•uƹˆÚªÙÆdŽÏ–ÆeN—ù¨|þ•—.VËÉ8·`,‹B“)•™<æ¬ÑåÎÇ`­5ÊZ+Vé<Ï Ð9g WoÖ±gT‘€@¨«ûºïg{»}ç1EQ±©6Ø•ãñ8 +T™-Øy“„BŠƒi]ŒžAàÄÀ„2ʲ¾„2 Ƙa°bîøp˜¹†'–ž²ø TRDt>ʤ5Ž&¥ˆ@Š„/?•RM¦ã²ì»Ðl«8·Ùt’ Â6ö‘•Ö”ç¬Ö Qb¸¸¸@¥ÈCJ8AH  .#Ú˜•P .ÃÅ‘‘A†€@$”’ ÊÐÓÔˆÀv»UD}bG¤‹ •kÚæáéùûï=¸ûö‡óÝýýéx”g¥=ºrýüü<&ÏÈ£ £1lÚš01s³Ýœ>x¬”ú­ñ«uµÙqÅÕç;[{Òù4pA£Q¶ÌÊL‘ÖÆc¸G ¨CÄÕfÓ÷=ž-D¤jjÉó\1l«M»ÞjHû£éDkŒ`X妨몪æã×ßÿøû…_>¸~´¨ëãÅY:ùÞ^;<:šî¯Ÿ¿|ýæùwÿs@P`Ö ¿þƒoçÝ»Ë&þáý %Þn—q^hBfñ@„!¶¾ ‘ÙäYNªí.NÏ/¶uSßÜ4ÜtËȼZn–Ëu×yB¥µ¾rx8* ët³Y®×«Ð7Ú°µz¬'ÃàýI˜à“S = ‡*°A`ˆÏ”bœ’B£•8gÝ(Cö»‚µ‘ÈÑE>×Ú®W•+v@‰a4=ؽr°mjíŒË³‹~Sì¹FL&&!«PcVf¢È{pp µ•]çcˆuòSﻢզbg,3$æ>ñ¶kËår½²FMGãØ4©í÷fÓ½½=È•›rÆ>è”7m{º8¥"pdL}è¢u¥sŽH‡`PMI•CÕ *¹a×$¥B@c™Y«g0¤3ëÏéƒGƒ†Ôf³ñ1i­{ß÷}?¨Û|¢÷Ë‹õò|ál>ŸÍrW Q9##Ä ]»íЪ$œY«ŒNŠ0ÏFÄ€ŒFéeµ4Fç…ÓZw]Z#)c$tèÏu¨›u €4p;ƒ /"ŒÇSDäºIºº­RxxzúÚëo?Ü4 ïîÚq9³l2ëÞ{ãÛ/<ÿã.Ö«ƒÃ9YÓÇnµZ‰¤q^Œ²Ü­Ï—×mæÜ‹WofÆ,O/Ž®Æ„µOQHPÿoýøOýäO¾ù»_É'Q £u]S–yN¤ÕÈUÝÇt±mºMÓÚõ¦­«&„bœÕÓñd>Ÿ¹ÇVÃz5*Š\¡ìîïÎæ;­oTlf†cþYÕý±ˆ¤eØí–^‚(­V£2/ËÒf&vu°3RdËÔt²WÕ½±Y^Œ›NÎ÷f{û>ñx>«û¶#ÿ©}™“îðSª¶µ÷Qk ¨bd޲©¶Â*ö¾®›0´sŒ)zkUß5eVº©³Zƒ¥B«²,Ÿ¬—+`Æ=Ð ¡ «´…¤ W¨EtäX# 3 çúà3É&³)©ÛªK]–¹I)Ã|‹""1^â1¦áuŒüé@ÐÄÄ€8ØD G›Þ4í +7*ÔÛÍfµÎŠ|:†¾oªJ‘1Æx;Àífº6·!Fß„”” A8D¼ïf“éáµÃ¬,Àê>ñ£'ÏÏ–½õ¹.$±Õ)ËrcôxRo[aÀGŸÞ¡[""$$A–t¹¢Ë""J %±&CTœ°nÛEU.OÏW§›úÊÕÇ‹³Ì¹Û¯¾òèÁdzIþµŸþÓßùÁäw¾ùÆ7ÎXã¬Ö:uœë¬gñÚÑ}ç‡âýLÆùh\ž.–ZS}•@EÏí¶íš6/LßÔZÛ,Ë4©¡ëˆ1vO))"Ed´vÖ:k|£Y¡fâ¤$1ª¡:?k{‰`”m¶¼0›µX{¶ÜjQY†‡ó£fÝ^?¼‘Ý:º®ˆ@0 ÁO~å'>Ú®Xú«ÿÎ{ßÿÞ»è@iŸ’"4Ö *Ò‰A+fèk%DZY‹ »Öë¬HBÊ:¥ s}ÈœÙß›gVE¡ˆA")!‚¼,"ó'ËìÙë`üä}ø¬Õ,¬˜™€a:XGYæ’D"ÆãÑd2©û.X¯·mß0ªƒ«ù¨8½XLfãÈ-¨|÷`–y=Û\îÆûï¼ARŒ›ª^/W1r_uUUq€‹ósaÅ1¥Fé¢åYi5…ØÇ¦'SÌæ‡W®Œ¦•iŸâ÷Þzc½¼X,–}Û!ªÐõ›¦÷­§ÂdEžkK $€BˆuÛž/”Q9;ÌË H‡)¥¶í³ òf¸ö‡õáûû÷¤ÖZ)T’ùÙcCfÖMV«ÕùòSôUe®ß¼á”öÐOŠbHGz÷Ýw9ÆÍfCIÆ…‚dT¦U™Éhw:* ˆI \½zõêëFåøUÓ<9?þðã{`RÎPÈ¢Ú™—yfÑãûB6—˜«`J|iV= ‚0°DLÌœ$}%ìšÍ(Ÿ$‚>Âz»ÙTÚ?<À<îï_=»úP÷m•þ‡ÿÍßß™O¶ýâûo|Ç'®«íêl1sã µ_qy†–ÎÏÏ›u““[/7£SÊj&nBjª-T 3e3cØø!32+!±ïû¶kµÖÆ8JÉ*Qú8)ëªèC‹¬´t’º¦-ÆcRšrËu{UO%¢n]ÙìÞ½{&¦Wž»íBX¯N{n ­„XÍÁ¾týú&Â̪oG;{”¹óÀCïQR×ó“7UÓ„žX¥1‚Q&ú„6ÚÌ”eÎ!¶]ÕÔ›ªÐ¾«Î8)ak5E–MUç™þ$Mõ¬½4ÃÏt—…:¬¨30â¥PJ 1VJ[k÷J©.†ºm˜Pk XF ·©›eggŠØ_;ÚyþÅ+ë¦zþ¥Û&Ï<¾OZ}x÷­·^ã‡Æ/‹zS÷1tÁ ŒÀ, PÙŒQj“çΧ ‚Ÿùí›G{ûûãªÚ™VÄ¡¯« G²©óM ô E;Ö‚ÂI‘¢ðñ£ÇËõ2(Ϧ®È+p lŒ²Æ!P iX†)ß÷J)DL‘CÂ- F£Ã3L) 0 €~ôäüÁƒg‹s#2VxãÊá4S éÚÕ«×oÝ躮Û\¤”ÒÁl2]»:Oœ±eYŽF£éh¬^œ/êf»»7)ÕPeïóÑtÔøÞ7ÉØ¡IÈýñiæŒ÷±,Ëá´ 1ÆáÝžMäáÝ€„é­Jb´ÓZKŠ©÷õ¦V‚/?ç¥O¾qùùÅêÉ4;~ÿýǧ÷3D”îÉÉæÍ·¾ÿÁ‡wµsëÅöüÁñáä`l²ŒôˆçoÜ}çÉâLÚ´[Î÷ç{ʨÕz3¿vY ˆô>Z±£¼4šÈ; ƒ"ÔŠXO‹¹ÖHI]'…6Ë cozÅÌF“"BI!ÈØ,B‘8`Óƒ02:³ÙdЏ\Ä·o]»¶cÍðsõåÏ¿XËš€4[°»Ö€’Ej: ÛÀËmmg\¤~}~™ùÁ£õ`ÊlÐLFãq6RF»³ºmbôJx4¶ÈEfÑ÷Õ&ÖÀ“<Ï5 z#§  ïëg5öɯaÎùduJÀÌñRÌ@ÅŽ(J‰H‡Øùp±©ƒ°"W”óÕx´“R@’«G{mßܺ}ëÚíëÞ÷Ç‹³Ív[h~rúd±Zu›jÝUý6Ô«„h\®rrÓr¤Éð «c@Åœºº JI m×[ÕlÖçÇëíªòͲÚ\,N%ù¬°¹sF°˜å¨(·íÚ)$HÂÂ"Ì@P …ÐuÔ´}U÷zS#¢OBjê6E´µyž;ç†Ûo¤‡QPžª cŒüLÀ-’RbHDú7ß~øðaJ²?f WäY¶Ýn«j3}ù¥Û7¶Ûí{ï˜"ŸÌç³çnÞºqõŠJ èAƒÓv›ó“«j[dª1‚PhE“Î2EN3`L s‚AhÏœºÎ?ïY~¨&DD ^žÂ‰ªÍ–CJ !ˆ3öÖõ›?õç¿6ß9x ð½÷ßøµÅñ½wZ¥ówÞ~ã/ÿì_ü[ÿéß¾ûö[÷ß¿;ÚÝóm´Æîî§MòøìqwúáÛ¯_¹vg¿œoÎ7 z?ÛÛoº>@Ô™qyé(³bœèеaXÑÒì™™Q¶ªí:+VeÖ–®œNLæÖËõf™B$c KÚúQ¬µEQ¤$Ü{m`TNf³I™•g‡;;Pµ/í¾tíÆ_ü›?B"uR€ 0_¾ó¹úÕ׿ýû¿øKÿ­ê&Ÿˆï ¤Øµ‹'ÇÑicŒÝßßFÉ5+Ç¥+"óøhçÞÇÖ'[Kj¾39Ü™‘gôt4žÍfY–UUµiÚ#(k3NahA‡<ÝPûãÐ(2;k@詘TD¤=sÓöççç­!IU·¶(­Ål¹Ü”e¹7+Ž®î¾üÊóÝ{çÎk?þ™/%ï¿û½×nÞ~ú¥/~áÁ‹'¿ð‹¿&! Ö¨QÄ’Ê‹Þ+"D¥/0H ²Z.B×siV‹ª]w¾¯BÕ¿éš¶©2Cy椂L(ÚP‰N" ÈCÆ"‚€*$¬ëæÉ““'ç§1ú|×u)…gèÀþþþl6‘£µvø$+¥†G÷¬›xV„"‰‰èoþà{7Fû/”¹w:Ï·5½ùÝ÷R³Bî¿{¾¨|xóöÕÃǧ1lww‹$j¹<šÍìÎlÎß¿8Ý¿yc»Ú|ðÁGƘ›·l„ªDʸGWµ[Œï/ãr”)'u7MªÚ×›ÓÒÙɸ¾©•3d5ú”RˆÈÃnRV ^Ú†¿½BŒTŽ6!9c›®kÖõó?vó¥ƒ`ðG¿óî¾ÿødõñƒón¿ÚsüGÿä×>øöï–”_¹:/ÒzÛûÖ™„1t§øé¿l­íÛ®ªk³³# |߃È8+ÚÚ+G¦È;ß×âµKd"2´Z£ af³Jú[W® â/<7»¾5aiÞ~ç.},§¯—«kóÃ\Ù¤Èò“1¶ã°õpg>'Å“Éd6pfWRŒãyùÓÿá_©¡ÓÀ PAcÙ€f€G›?úÖë§M=ŸyKY´È­½]kUŒ±ådtVdåî<Ë -È!Å\JS£¾MDùlTU•¯ýíÛ·)s-Çà;Öd2c`"•¢7¤9ç Æ(Ddó¬,KAhš¦m[°Îd©ÙöÑû|uÇLþã¿úµƒkû½‡ë“òüÂûÕ‰–ŒR»‰BÕ4=A""2DÊ*޲O©i­u‡€Õ‰ pœPéÉäÀe•†’µàx<žMÇçQ‰@âLRÂïæ6D/éìü¢ñ¡(Ç"ÒTuÓt}ÄÖd>g¾É{gs­UJ ±( @EÄœ•ÒJ” ¼…>?ï¡í m¯Î²Â‡æÁƒ£ƒùêüì[ßøÍ—_zþú‹·ï?9Mgëj+@'g‹Í韻uk2 Ü•ØÇîÃíç_8:º–VպķÞ}çÝ÷>¼óÒ«öì¬~£bs–Î(úqžRÊ 5M ž"³…¬ÒšŒ&N‚À—#¾ÀSªï‚aëû>¾ßþê׊þ_ý¿ßýÐtÔt¾ª7ÇÇ] :Ëæ/½°©ªÒFÅ™- `ÜŽ=óÙñ ííww§)¥¾ïÀ9¢¤’ï(‘§¦L¨$!`âc¤˜ÝUÛlœîí^¹ÒB‚ /öÖu‹›¢¯Ö ß8FîJâr:™æÓ£kWööö´’q9*œë·õDS1)K©Ý¹@£Ó‰yã7’LL˘.êöô`¼såÚ•õâ¬ÐvdõîxšåFbR™€„ "ËÐ^¥ºÙæy¾»»Û÷½sÎB°ÖÆÁçF©a\7Æh­1›õâJ €>ÕŠHAB µ¢ÒyQZÛÕÍYèêÍêt±·ßûÐ{ÿ…ù¢!ýèÞƒ¾ioÝñÒ d¯n¢gäã–»ÿþýÇo¼þ½ |ë¹Û_þ±/ݾv«,Iðã<›OÆ©Cß'¤K]Gž9aŽ1zA¥”ÍÖdëÔ«‡ÿR 5(Ë,”RF“FâCJ©iš®ë4&àȱ *¨šZµ)™ˆ¢)%¥µVÂ1ƾï›2ªòmæA@-€ÃVÄÓ-£gx2>jֳܿ·*?>Ü'¿\Üx±<Ù›hT¼ÿøÑEð?õS?õÝïýàî»ïVmwüÖ{Û³ÓØõÓrtqqqr±½vý¥ë{W³³2s)¶ ¤ñhº‚Õ;÷ç?xû­»dv­™†.Œ±1BWcRðض#W»"K ÖY!"ŠÃ;l”BIÌŒ0HNÓ¥Q§€Î\ Ücf½‚?zëõùêÕkßùÍßUóbäƒÍnLJUäåî¬Iáããlj¸kîêdŒIbô{{»]³5Ƭ¶›‹íE9åÓÂ{†œ˜®ë‚ˆ˜BðÞû0„4cŒVZ)ÌŒqÆÙÌ¡ðÁÎîçnŽ÷¦‹f­ }t°ûÑé¹7¸I½NVÈ8gò験EY–¸:¿`ß6YžÓn7›ÒíìL£’oþî7ŽnŸ¬V«ùdzüøÉ_û?7ÏiÉ]NøÕ?uög¾øá[ß‘®EËÓùèp:Ÿù¬q욪žìNbŒ] 1Fd…¨Eu1M§S"Z¯×eY:ç†í»ãPÏЗËNDkÒú™„ÖŸ®’ ?9@’X!A$h½×štáª@§›Õùr»Y×Ëåj~x#4]êi»^«hvÜN}Qíß¹¢Kc2ç·Kïýƒå©^+”HEZÿÖï|Ãis´{øÜÍkÛÕöÃwîV«¥»{íPIq¤t¤@gdƒÖdq´b…‚Ì }Zi’Â(!„ºÚ +AXiB%„I„9‰÷MÓ€Õ†DÀ£”‚¼÷MÓ é³9áÙJ °<ÃEÿµ¥"ý?üïÿãï}ðþÎò;¸ú÷>õòë×@…r\¼ð¹Wçóç>ûi°å“Õò{o¼µ],ŸlÎNJã’o¾ö:¢»²T·õv³1æy¥I&@úwÞ~ðñ#ˆ²¼h2c­ ‰ý¤œ9Dƒ0ôáV9¥ô²Z¡!ÒHjžI>ö¡ Åh<°+ðŒö“gúºï¬+®Ü¼¾íüGÇËÕ®Ëg®×}Ü-²;WÊù,›SaG#½nª³ã“M Œ!1‚i¹®î?>¾vóÆìè(¦„Voêšr†î+ùP—¤Ÿ¬±Dd37˜¦¤Â¨Â˜ÅñgÕl:žÊÈAs̵Ý-F7öôØæÚæÚ†ºë‚×Zøàþ|>ß´›èAÜ™LGYÖ÷í™ÇÇ¡"ë|÷ûîîÝwßx'u!uçöí~nl²ÿ¥/~õÆßÛù»ÿÅ?øÞkßýâg?[Œ²Ü™,Ótì Ø£$‚¨‰‰”QZ‘!RªmFEfjçÜP„)%«-)EÌ<ìÐ(‚a|°õËaæé"Üåxˆƒ_#’Šaô‘…¤e¼ª>:>mÚˆhÎë^»‰˜,«Šrs±¾yóæíW_å1›\±‚Åbñp}º^¯Üû˜÷f“\©ÑxZ-ÛåöÍï¿õ½o~û»ßûÁéÉIh[%,ÂÎØ¬È(¥X–9¢*ˆ‚Q (‚jp'$i(£Câˆ(¥%ï,!Šb%@x ï*R¤ŒT: ÆÈ(IDRb’ š~­•RƒR • ûGH0ÐÉp¹“ô¯ÅE"ê?yýàÏÞ¸~ïoÿ_ùù_(TЮ߾ñ¹/~vÑ®Ž®_ýÂçÿĽ‹_{ûÝo}ç»6A4ß9¸ýüéÎnô]Ûö#L¦;¦Ì{æHJ€4¸?ú8F>ºõüþÎÜpi0óÛ­5­•”ZbVä¦(³IÛ7©çáŒ"-F“Q¤Ð*&H 0<" x©KðÞÚb<Ϧ‹åÅâñi<Ù¤rª%Z€Û‡W¿ø™O_{œ™ƒÃG‹ó·ˆBÝieœ3Ú³˜ØGå“î›Xu­*ܶîµ5]ÓîÍ  QZëÉÌPÃ`‰[t±ëš””Ü蓳Ó"3‹åŽ÷1W&7ØQWÕÝùª=^ઙN¯ÎÊq•¨pY9סŸ\ÝÏF)%¥¥p™0Ç^™²XÆ4Ú™n´Ž¤Ì~($E„HF)cŒ"“@bŒÌœe™1ærÌþäE÷ 2P)Õ¶µ1f@üÀ ŸqHÏäÈ—Ò¶”J°V¡Wæ¬êN?ztÂh‹|œå£.Šo»“õj4ao©s5b§úˆ .6›“³'ëÕêlqn®ÌwŽŸÔ«ejúÅÙòÛë?¤|Ç{;{íWÛ¾ÚvZåÓéNÓ4]׸QFZ‘&N#D–$A˜øã ¤xéר‘ZÚ‚@@aÐD,Šƒ 2 ‡ùŒ’’„Øi­‰SfTY–Óé´(²¦O‰ƒ Õ†€—H+üp#÷߸ õ+‘ÀÄÏ¢”_øÜTøåÏ¿røÂ?õÓʪ|uIŒztzüäÉ“ë;ûW®]¿sëÆW¿ò'ž{áæÕ£ÃãóÅ«_þ0‡´Ë0¿ýúï¿öÚ›¹v7¯\±Œ±«J‹¡Öª©Vë³÷Á0Wû‡)¥‹õÊMòÀÑ·>JȬÆÌi£3£º˜x!ò9@€¾÷Öfe–k¥…u­quÜÔ}¿Á&W*/FãÙtooþꫯ{“÷=˜Ï&UÛ(zۉʡP Rz¿_LvŠÑƒåÙ6t£ÂŽww‡ãã )W&Sf† J)c9&N)E!¢DÙdÄ’ÎVë×ïÞ-§åtw닟ÿâÁθÈäöåO½ôraâ:lòlêAEÐkñßüÎïý/ÿôŸ}øÞÇJ×-sµÏ Þ¼v´ì·V'çp½\Ýûè#PTµM>.‚$ŸzA.‹l>›æ¹!"í´<5ùŽ!… [ EºGµ;žŽ\îÄöãƒnS…¶"'‹³×ÞzJ¥ ûxµ8¾X,«¶išØÇ¨bÒ@)b³êÏΞ¿qô'¿ü%˜no -»ú›ð­7LÚß™•Ú:¡kóQkJ;™"ÂH€˜HÀZ[fy³Ýø¾—YíÓúââ¬k"†ºñj\¼øùOgÚ^;<2¤RHãƒLHœs­orcgãb”å¹6³Ñøæõ›Î9ÈIÙÜæÖ½x冠€[è² º®cfÙ̳Lv毽õ¶ûÔ§•O#—IôFYAFÄC³p  ÐÜ9‡ˆ}ß´û7ò.½ÄLF i>òtüáb' ’+$e EEëá¢mîŸoc˜Í¦å ú¤Iî=|2fü›ùg¯¿rë[oþÑ?ý¥Ÿîå[¢hUÕ bh;ÍPj§K5ÍËØ5dŠÉdò°éŸŸŒÇãÀÒu]b]õ]ωI@Å„]L  aŽÂÌ(H¨HkBäáQ ÒeÞ‡´2¹Ëp»ÝÆØ8£GãR‰(¤CD&ã,] Íd8»†FÝ(–ëCq°GË f¤èò$­?¡¹¾ë¨á+_ûÚ¾-»æSׯ {&óæòî¯üæo–ãÙÕùÕ;/¿83ùÏý…Ÿý‘—^nÖ‹Ã+‡ …Hx»ó‹öÍw>xûýÛžû÷¾ýäìB˜Rß/OOnì¥Í¡Ýëʧ”‚V0r¥@zòä‰)£<~„F‘Á¼ÌŒÖ hTF‰™a¸ !À0"ɶj§Q93H³r¬fš’~¯ypÑÔÜ6“q/éd¹xÿÃ6]½ömå{•θÙl66“I6™$œ´›Û7~æçþÚÏüG?5´@|ëúî7¯ìLŠR%¡>îg›‹%ÆÁkL"ˆbTºÈò2Ë£œ’1¸©¶g«³Õr–&óݾé¯_¿¹?Ý)mÛÞ(³;Ÿ×uý™ùüt2AäÒe7÷'.7D»E.U‹™ô={´ @¶µh¿mMæz૟ûÊÉ_Yþæ¯|•Ž1ŠE§ëâƒÕ,( RCœúÀ/ä¾0ô¢ƒy¬1FDX¤õýP¢Cá13>u]`殺¤ “B)ÊJÒéfõñf±‰þÆÞ•Ùh.*—Ò¿û埘íLÿú_øøÑO½úÑã÷óé4¤x±Z…®Á¶“¶ÉtôàšÂ¨‡Og;â}\n«ºíåM)2ŠìS_u½1*¦ ‘4!(aLŒ<¬€f–ôà ukíh4ò1­×ë¶m9ê¼ÈP‡ÖUHD2cY$Á üÖ ÊKÊÜÐ^2³!•çyÀA´£´B"A`DI Qè£õeîå«YÏ7òéþ)4;ë·?úèö+Ÿ~ûøÞ?ÿõßnƒd…;?^7ËæG_ùì­×læÞxïøÛwßÞýàžÁâ|Y]TÕ½ãÓwï?Üv>ˆöË5´¾˜ï›ó‰mŽ7ÛíööÁáñ{N6‹êbc\–M&AJÁgŽæsŒ˜¤¾Ø®„revwç Wdl×÷!ÔF!Ë 4¶àØõQP£ÆMÓt©#•v¯N•Þ%¢Jä^àíéÖZÛÔTæ»}(è+»‡“Ñxg:+ÚM»/ܸú3ýk@ \À`­+ÿþOüÄ£÷î®Õó×o;!ÕÇ«º\­·4ŸŸ®VÎ9yøð¡µh sq±êûÞ³7ß- ­(èøkG_yaóèá½ý‘ý±û¥Tžç·¯ß®ºj”•‚×CïÀ$H ¨Ê–IS *0ˆ‚,pˆÖXbî(tlÇÅéÙ*m›êÊ^IÊùÍúêµë'›% Xð¾K}ƒá„¨š.f9õÞ{"(Š‚XGÌQi Ä!õz8à™}  •¤ä»¶Š3m$õ^’ئ®ë"©<Ï•1gggú³Ÿþœj¼íÙæ…]}û£óý[ß{ï½÷ï/Q›óÕãÍé¢9^<¾¿zôd«Þ¼ûFÕÔ^Å'ONë¡‹i]wÛ¦íT–“ɳr>¤iâ€Cm·ï/|S55Ý€VDZ™˜‘™½Õf:Ï÷&“ (B4€ÀH PÁ%‘" MÓÄ$D!2ÈÓUww®ßêš–AD¤A)Åm_mëÑhdª£Ýƒüz>-G1F~^¨|¦G@9$†”Șalˆ`ôt|÷­wÜÎTb2Q¸©càæ|»m»í“uQùØ©‘;i]ê^yõ¥,Ë®]»–ç¹3f4eYvs>?T׫mUí€ÖâÇFƒìK€a{ÛíV‹ÃÀ BrÆ0 PnAp5¤ÊЫŸûüɯü_?xó­0»:¹r3½wÿþôp?ÆÈ¾¯ÛnÕ5mß’I‡ÈÃè¢"¢ŽcT E„…žr€$ÂÈ¢ÑJ1“U9‘-ABä$¨lQgÉš.…¾íÚw×xÞ?8î«öùÏÛÏž<’ÿKþε«ï,N¯ª^Ayò­ßí­ï½{˜2]-èû°®[izdŽÅ(³Î(Š·\¥4(D@”ˆH„A *BÄÌ:GZt*\¦=)f鵕¢ fJ‹‘Œi'Sóý½«{ãÏ|îUSdÙdô£_úì/ÿú¯ì.NT91Ƶˆƒ¨ô1*Ô€—•ZkkȦ´»{x°7ß›î9A%¤´ÓZ›ñû:߉š@”Feg³‰Oüäba­ÕÖtu;ÙÉíx¦¯]¹n{ÛŠŸ6~û›îŸ/C?žÏ@ðøá£¸®-Ãko?ì«f±¤¶÷Þ·™ÿ?ªÞ4ÆÒì¼ï{Î~ÞõnU·–Þ»gºgŸá3’2)1Šh‰’ 9±%Áˆ[°ùlÀ ɇÄ@¾Ä@€1œ‘c8Œe!¶lS²¨˜Œ–¡¸Îp8[÷tOwWw×v÷w;ËóäÃ[ݤ/ªª uqï=ç<çyþÿßY$IĨTxr!!¢(œó°—_IÆDÈrFQ0Θ\0)¥²&„à‘„– ¥gä eG,“¥ý¸ypm<ý™Ÿþ¢‹øárÙF¤Å—"‚@€,Í”÷‰ÁžÖìC—)­Ò„E%5Á·`Þ´]×ie΀3θd‚çDäbH’DkiŒ©:—ëêÑÑaX&¸”2á €RRH¡•fR %¥D ­µÖ‹Àš/ŒÖZGÂ3…GŒ]×*.8ApnÝ4q³\¹ªY=8É™yôÑÁîðй.0z‡½F¡C‡ÜJcŒÑ “¢‹!„@H«“–ùp¬RÛKzŸsÁpóu_a"b¯$’R†<õŽ’ºk{Ú ¡ëª ÎA@)¥ä¼iº°©eî<šŸ0Än“›üÕ×W˜ÞH^ÕkHeÇP%I @JÙlR€Í Bì ¶¡}ttHÖGë¯ÿá7ž]™&Óÿú7þîjµzí3Ÿ 着©êVá1ƒЦ®§£­Bë]Ij-Ydš)Î!±)'h›bÑß.AP+þK?ÿ ðG_›_¸2ÊÓ¬Ìò‹(²H! #„H1 ¸¼_Ngv\ÄÞ#¤HÀ‹Þi#!xÅø+1Á„ ×mÚ®‹¡n›Ö{•X=ȹåV^ÝÝï#ø‚$}ý÷þ%Ìøx/¯í§"WM»,±Jº Í´†4†yFDι.bŒBð.†¬e.ú3Ìl¯ò}böïºBhšæ XII¿ž7ѲG–ʈmÛ¶”¤ËÝuýíwß¿òÔE¡eZŽ­àÿî¿yz4Ï!çéÅ‹;çÏí)Á8g£a®K­1V ãœiî!†ª­¢1ÜJäÇbŠr<¥Tf“,É­µ½Ñ©C—¦yD.8EƒÌRÚq©™ˆsf´f¤”Lç BŒœ#j¡¥’–KÅH+1ÜŒ÷&<Ó 9%8;==½|ÏuMs@C퀄LŒs3fŒ! ­už§ƒÁÀ†Ú¶E`(Xd<©ï«5ö¯µ1&ÆØ4 ¸¶õÞ÷Ãeï½ BðIjBpgXE|ŒÞEècX@E\3†‘ežŒ†#&88@qà@¾‚£ :ÜN¦ÆPà¤>©nݺ”µ³Å|¾\G`UUUsÎÍ–‹ùÀ±ë—¯fY潿tîü·~ëÛúæÅ‹—mž²boº·Z­ê¶ãlš‚ ±^—EVX3=·0îîî²6Ë´²Ä§“ñþNÎ5ï#‰mÁc]­¹ýÖ÷_Ú» ˜¬3«S‘RB$}´®6‘ŸÍŽŸÈDû D?ÆèEÆ@‘ãÒïXèå_\Õ&è]Û:¡Õ¹sç¦Óépk[•ùÖS—óù°ë2€%ts¨=$&p8i ììãYR¤e/ŒºÚ2©šº;jÖž£P‰÷Þu¥s˜h[×zǹÄ~A†@D1P××2[üüÌ[ mš®«ª¦?ôn&›h!)jkÊᘢg¡¥~çþíÛ§w»™J´y”ÍÖ›ï~û{'Žž{úÙ­ñöxXŽÃÉÖ(ц34Z2F™1R…HQpÎgÄp\dƒAY”‰N¥óÜI:ÞÞé#]EŒK'«ªó€O‰³ý BiÉŒ4J8ŒÄ‰Ñ‘Ib 1×u"¢Ð"#!¼÷Џ€8—J˜k•%òâþôÜõK¢ÔÉV9¹0UÖüöÿùO×~éV K!c¹ê•MU×umE¢µN“<Éì¹s»Û»;Ž­×ëÖs¥T–eJ™€±v¡«[‡T7!Äp8”R†€1Æ4ˤ÷g²Æûèæà:‚À1 .”R©6=×Ý7-G¦¸2Ê™•¢È:кGƒ,ƒ>?CpèÚŽÒ´níšTÿÂKW/^ëƒ"L·8øÕÝ  ×¦û­ßúûóuó•¯|e]žøÅé«?ñ‰46©ÔÒ·ïÜ»ùÞ;ÁI”¢iÚ““ãÙli“¤ëb 4ÚJmˆH Ι.Äè`Ä΀(BTUå#9çb$m1FH™hU%ˆµÞ—åpÿÂyÉ k«"UØ­ÒT~ðñ‡i‘ÒCq<Ÿ¿øü7^ÿ”ŒüÚ•«ãaé½×JXmBì°óŒÇT³$ÕZ*«e–eÖ(N¸5LF“ h

{ã•ÿçÂØ¹6 iä¡í@A4j%ˆÖͱN¶… !Õb9ÛÝÝ=|øÈ{Ÿ§‰DφݼUB&%“‰hZßøn”œCÍÌx8¾{û.ã´áܵ§¯^½qåÜd/BëÁIt„XC›'à  cò‹ŸübÖ@óü3;?øóï4óÕHÚ¡ÍÚJË™»õÁdvºv•W@L$Ä”sŠ­Û ‘oêzÕ¬-£ÔªH Åd2á’­V«³&Sa¶··#ç\9,ò<çJ–IÑ Ò\i¦¥º|å<¹f¦^-}hÆýs#ßuÖÈ×^¾¡%t­G®ËL”db-˜†G­%$ÚäE2ÊË¢Èò,k@@ à8ðeaÛà1ò“Ù)!·Yzxxz:[Œ·÷o=XtWøÔSOíïìG"X']•²¤Uç¢$+$'ÂÎ9r$¥.§r°å;W7­)µ…#"C¾©×iq-/óηwî?¼¿tTz½^E¡•ÒB1‘™tk4ä Ú¶}æå›“ƒÉp´û³z<;;™g?üö7?|øüõ—Áã)>X<»?qÙ8q1DɸV8ª»¶]/×Ql›uçÚÓÓÓåb&¥ô.rÎÛûak×u]çÒ"Fîci 7#c¬0Ά[·o¾òú§^yýÕ ×®D† ]dP£÷„ž‘j8,“"ŸL·] /©g/ìí¾õÍouqzïÁd8\ÏJh…º÷Öº(ÒQ9ØÙÙÏ\{ÿûoé"i!Jež‰%ï?õò'ÆFߨ¿ôÔ•‹%ÀÑ$Æ´ÔfÜ àG$€€A@/˜`œ,ð€Nri¤wÒ–DçÛ¶ýÖw¾ýòå§/]ØqË¥Pœ+Àµ<9Á9ßÙ€ç¼wHè¾Ý%õÄ‚ˆ@@d¸^,MšŒG£LeAÆ®öïÝ;>zôÒK/½ü‹Ï<ÿLf`è tà} ­ë|ŒLp"HpÐ%”Ÿ¾üÚ¹ñö{oýàã÷>¼wü¨Êʺƒ‡'›@AêYÛ5TÛ9+x׺M] !ÒAš'¼¯zL"»´OŒÚJÓqaÓ¦©··¶´Æ Žs‚†ÃaÛÕišfVEý«ø<‘Y6(²ý$IÊ"K’ÄwÍr¹¼÷à^–S‘skmšØAQE–(­”P\-@š¾ñFMµYµ½Çï\¨š¦iºÖyŒ´\¯€äl½”B'[ëõz1_kÒ&/Šb:â rF†Îg6å ›UR)ƒ„ Þ{¥Hˆct]Óº®I¤vε›*„Е™o—§›Ó›C4±ƒv0*µÕuã¤äçÏï]LG[Œ¸æBI7Mž ½s»Åþ$ ÒêþÕ›_?üèíô¥×C™Ì£§åéŸù€{ÿýw½@}p±«isv_ï:ˆn½^.`Päxxx ¥.Ë’ˆ5mR[ï}è‚“>Urs:I¢J[Ø<¶"½þùÏ|ñËñS_øLd*t î =`$ˆ@’ ¡¤µ6°¨A™n\ >zû]Ór¡>ûâ§EÉEAòúðwÿùÿ­¶²ò×~é/ËØGМ[†Êó‚±ÔJ$Î9“ºѱ°‰m×uÑ£ëºv]å6éV͵K—™µÐvÊä€ì §?û¥/}õßüÛ<Ϻ®M“$rÁ¸à‰Ð{ß¶uU/·'%d—‹Ó¶mžP´ÖŒõ¹}(cPZÅ¥¤ˆËÍ*µVs±qîâþ¹O?õü³Ï6€„(„è\Øl6.¢Ñ —–3UQ¤4åQë˜ÈšTj³étzþüùÒ–gnu]Ó¶ÊFm]©”`Š8Ã0¦´ð¡*ÊÄè4ÕF Ë®˜Ò/OÅ#xȇƒÖuuë÷öÏÊ©’Iª¬o»è|ݬW›ÙV™oDûê§_ïmm¸£üö‡>:=üÉ¿óŸúÔgÿ§ÿñ¤Ü¼tý©£$Ìß¼ùÞ$i¡%ãMÓlVë¦i0¥”TU•G¢kÛZkÕ—pÁ… .„˜ïCp”Zh#mt¡Ù4Ce–óuÝåçŸþ¥ßøkO¿ð<¾×RÇ8kyOÌ’Hcèÿa‡0P¨æ‰>wý[ožšno¥Å¯~Ê2ÁIg©ºÈ uÀ¯>}í*$ôí?zûûoßÛo³Í+Ͻ|'•ꪵ±Xk@;€#Zqóû§,€Ç¸X¯æ›Õñéé¦nº¦m«º[WÍr½SŽ&Åà¯þ¥édw\Aˆ‚ Á€'£ñýû÷_¼üÔöδ>>ííˆ0`ô" ]½|ž$Ϭ¹ÿD4&ÑÊ‘÷±ïsœQF…`ŒÑEô¾MLšYdy³ª}ç.»ðìëÃ4EÀ:TÖ†! Q³ ¹Å  b êü鿍‹!/‹¬,÷/_<œŸܺstp|8[CÄ´È·&“éx4Êóá ™±‚3”¼o‡$ËNf§Ãñ@Kaµ!ð,â ÈYDÁ03JK¥¹È‹dP”Ö(!%I¾=†¶·¦#ü8@èB·ZΫ¦!¼þôuª×N´Ô®×ëõ¦vÎ…€³ÙìäxV×5Ñ»À"rÏ­óÀ”RÀ93E¹֖ ¥”INDJ'\è¤d0šlmïLËd@ГY 8"i´rFÛAió”‘Y6d¬ïð4M»¶†ZJÅø`P ²\&¥^WM1(+·)GÙl9Æj×q©’$‹AVëf5_Gï8ëê*´ÊãüùŸºñÜù|ž;ÁfÝ‹¬|é?ùë?÷W~e8þ­Ï}þÙŸúÂ7þýÍÁ/ÿòŸ½õæÞ¥½ÕýícŒ#×vÕŒ1ÚˆDkËørÕx×e©ISk¤mÈK.˜`ZëèE¤år¾5r×A¤Ífsòàѵ‹ç¾ôæúsOõaÏ ÖœpØÆè±—q1àœKˆ‘bŒaX×›ÌLŽfvv&îtñÆËŸ´Àºn¥•à?“Ë÷›(ÁAÞYßópæC—\hcÿk_Ãïß¿?Þšè<ÝŸ7ÕýãGÊd7ßþPÔ®k]·njet–ee^X£‚¢z8[­ã£y3ÙtÀ­¢&xåÒ…Éh°®×UµöÑa œ2PB !3Óíñ />ku¶¿Ðv5b8†sÅr.±§ËðÞ- ¥mÛVp…NOO×óE’˜_z~o§ßÈcŒB bL¤I>#×'õÜtNýŽ„ÕzÃâR4]·qíÉjq<ŸÝð`9Ÿƒsû[ãQQîM·¦ãIfdnÍÖ°,2Ì:ÁXˆmÎ(5U8 ûϤ¶Jk=Ú@’'EQ G àIæ,1ˆ|]­ÞÄîß¿ÀÚ¦ãRhm‘‹ªª6ë:„ ´1R\o¯×nêv³ÙTUÓ÷i¥”,Æè‚å&áBq!ˆch¥È‰Þ{ƸIÏhk}2v*EÁUkD̤´Öîîî”Ãaÿä:ê€1ŽŒä‹/\B$EIlƒ4²( m cL(iŒéºV ¹Ùlbç¦ÓÉöd CXWm¶5"à²4³<1Ëźš¯«Íf½j¼×z"fµœ fJ‰;i²¾÷wÞÔ~+üµ¿ð Ʀ‡´qs¿ú¹Oç½V½tñGIéòäѬmÛQ^æyÂ0´UÍÐ7ëµÖ:-ì…½KO].Ëüí÷Þ¾{ûî0¤6K­¶ÖJc«ª ­!ceÓU‰6È¢ÎÔK¯¾òÚg^ç\µ@-Ƶä“*ßKÏ~Ôï!`ΪÎEÄåÉ©u~ÕltRZ“ÂãFDà ŽMGá°Y|õ«@.ܹs÷g~úg5¿ÿo¿úÔÕ«Ö¤ܺÙERlÚnUWcV Ó´R…„I„sV[Í•ú·ÛÞÙã¦)Fƒuמr@€à•Ö)¨Î=û‹¿ø‹wßûp]W£Ô àL3彤K­ƒÑ\înODÂÐ$¥äŒ ÞÏó‰GâÄ8#bÊhQjÕ†ðàÑCIìõ/|ú3Ÿ~#€G@²Æ PåÑê”GD,"!DÆQ C%˜‹¡iª¦i³y!Õêµ7>Å›h¬`‘ŠÌŽË‚‚WŒlÂY¬«jÍYl³lâCž~êŸ(lŽ òA ÆEà*Bà \­ IDAT"«Àß?:˜¯–>„ع×^zuqrrëÖ­[·nq©O·w¦Rhd\«V(#9ÇÓ‚®ì?¸¼÷.ÆFƘ֊IÃ@H-ln8ç@g‰ÀÈY«¡!@DÍ9yç©%¥C\mV1Æl0ùtk,™Ž@u!)eÿá’Ÿ|í9!DV¡kYpZ $BÖEA’w]§ä-mÛÖÚ´u¾©šª :·«z€÷"…£Ã“{÷žÛÖäFÙÔfif †ÎU*3ç é» -Æc‘†Ýí}[&7ðç¶6H€ý‹Ãƒuþs?ûhý¾÷Þá}\4³vUY+S+ <¡ÓÚBDˆmª³ËöŸ{æ)xÿƒ·šÕ|l3+ 1Æ$V*CÁS JÊÔŒ²$!_O†#×l.O.ñg¿˜Œ²Áq lã*$”&~¦«ì‰wH>xƒó1ÊE.’L?:u0R@â¤äJ²UÝ“<8:bJ½óÝ·Ó⣛·­P§ËÕj³©¼¿yûžCšlíÌWKßvƒ2ßOŽŽNOæFØuÓœ.WŽøôÜÞDê“Ùœ”Èi~ýòÕ®­.]Ý‘‚Ðu»[Û–Ëó;{"bª QSV·ÕŽÍ’¦ÚÖç BP”@réÒ¥»wï~_ÙŸzš#õW!„êù—>´¹õ.Îf³ºñ áqîY¾9ç\CØÙÝ=9™-–k§]ÚéÞtwº×Rc˜A€6twI’&*%Þ9„dÀ‘"a$ €ÐFF\©"ÙεU½œÏ»M½?ì®ì^|åÕÁu«L^BhA*èÖ`’ád¡ÉW˜üÖýŽOï?8PÊ0Æ–‹MrfYÑÔ.Í3£³­b[)“æ… ¾éW¦|2™©-s½'1­µ1 µm»©«¢ÌkF „$çLh¤Ðwª˜d z¹‘÷ ’&ÎyŸØû¤MC:×gZ':‰BˆéÞÅ‹ç¯E€ˆÔüìLU$W³ùzUËÄù`¶^'­€h ³õúõ×Þ<üút4©7ô©W>yÿ£ÛøÞh8µ ó¾H³Ä*Îy1('ÃÓœ˜˜nïÙ´y>n¼Ÿ»hƒ:§¦å\‡E—O§'§òÎËéà¯ÿÝ¿½ã±à¶tCDÐ:úÐrÉÂ"¸"Ä10 }ØÏ6ÎÝnÚ»™½Ùu*B¬ëùá1Ôay|š)›$fµôe6® ÷V§ó éEY™ê¤ùè»7ÜýéŸüÂ'žº±¿·,0”€LÔ¨˜HФ 0 Š€†è k[à2+;À$±°®d®‚&â”ó …¿péå—?ÿ9¼Hr᱑¸ N"–iÆŒzÔ¶7ßúÁ[7?úÁ÷~ðèÞ£éÖÎ0ÛŽGë¦F¯«ZYÅ"ƒ©ÔÑ E]qÓ®w·ö¯?ý€TL®©”ÒHÙ"¢(u>œ9ƒ#E‡.x”ÜuMÜr6¿{ëöl±*´5Æäœ¿pý!INïÝ[®fóù<„`­]lÖWŸº–ƒ“Ù©IÒãÙò½ûG­Gï jI0&Ͷ1&ÓšKFg,ÆÜ$ý}^Ú„q‰Èw¦çúIF’B™«†³¼÷®ßƒRkšM#¹P\R$D” 8q œ€3,7;ûC ‘£·Bô^a9'Æ©sZIŒÌ¹v0(Èû¾Θ@DOHD‘1bLÞ¹s'I²21η=ìà ãÃë{ôŒÛ4é AÎÂ[F“q:Ìê¯|éâ³ÏDH¿ñíoþá7þl{2ÙÌjÁÍr^ó6ŽŠb>ŸÝ?JÇ#¤õr~̇xԵ̵ÝxçàðÝ[·çdzzµùïþÞoz×5ÝÉ·Ç»å€uι5åçJ ÂJ;¿»-"I ÌXï»à<“ä\ Ä€…»£nØcj#'ˆôüéÇ"s ¸}ñÆóû{Sããß{ëÑG·ýzUlOºÆiCBÀÊ9O7XmêºnÏNˆAÕµ­w„Œ9Ð@J˜H[ Ô1Ï8çZŠº™sâŸ|åÕŸÿ¹_Å=ĉ!a@$ø^”þ}B Âè0F !9HYmª‡Çó“™Tj @ͺzöÚÎ/¿:È“<ÏwÎM™–Š+€*¨9¨+Ã8°|ïÚÆ¿ý7ÿƒÞƒs`h:€Ô0¥,ëK/¾žÏ›®-GCnôf½Zûîd6[Wub,:xï`:šüäg¿\(›Ä9cÀn<óÌÇ·ï,—K©³¤²Dk .h#,+nß¹2ß2bÆ&Aœnm7¾i½ã 9x%¡È••‰–ºÈò,+´ÖÛÛÛW¯<-@´X'B7± @8²³- á,V2<ÞÄ ±óÞÇ’Kcc×-«Ó“¹ó!Os«Ó.àábýÝÛ÷wv&’óqÌzXò°­µµ:m:“oÍÃ(HØÎ-•F Õ»:úÈÛÞæ ð„ÝBãÙš ðdQ±Ç>.»£Ÿ,­³•öøs@Oõ?¶/ÿøz!(FÖ‡‡=A~0ÆkÛ¶ÏhÛöâÅ‹ç÷öS‘ÂÙ`ðG+¼ß%ÜÙÙÙÚÚÊ¥÷Þa áìI `‘1®µªš8çBIÁ…@ˆ„‹uýßû“7^ùZÀoÿñwàÖiøtÜìœÜýî7¿óìõ+||¼¸ÿ?ü·ÿWþÓŸ¯^ùìµÿòoýçüÝ|k0ÚœnŒûãéÞp;Î*]{£Ô•át`òêÁñ#繋ۃÑj6£äÃb¾îªÚµÞµ^qѵ¾ÃÈ… .|I\Ü»Pd%XSµÍ¦i1ÆÌ˜B'† †å¹Ý/ùËJŠÐ #ÎÅH؃ñÇÚ¡}} }Œž"pàR€Ò‡³“G§ËUÝp&­@)ÜŽ?ûÚk¯ê“,` ®…u ¶©W³‘BÀ \s´ÌÓÌÀ™V¤óø'}÷‡¾Ï­®—ëB(Ë%úðèÑ£ºª.\¼8˜Lg'ÊèãÓÓfÓ(.XÀÅã‹ûç®{æÂÅ‹ýg&„ÀµâÀŸ}æ™?ý÷ßœ+ =ÆP­«n])FD\[³=ž›Nî|x«[ìo•‚EâLê¢j6IžpX«ö¦;FpB™<’RÇc ä©!DÁP` E"FÄÅcìƒà…@ wžˆk£Œ®šæt¶¨ÛN0ELu>Æ.š|8¯üˆTZ S Õ,—£éXk­ÚNk];o3&MÉ5pÖõzà€{^(0bz5,PÝêßC$`=1¦gÙã/)åYîÐc !±³øçÇXc‚Ç„+"äR b$dŒq)bŒ=÷{™<>±úßj]׃9CeYnmmqD:£%bt¶ååk×8çU]w]'Ž1ÆXD`œˆ¸ZH'¤BÓûÏÁzµz0›U£Á»w~÷Ïß| –üò?³y´ºwü‘DìþþðµlçŠúÌO>×ÁZƒdzyÆU¢Lž•œÕ¡]7иB¨ºd`lZ`çONæ‡ÇMh릑iÉ™œÏk©’Û 9w _º.F&¤±Úm¤á\1–'CŒäª¶q]wOE­kf''™2¯¾öÙO¼þÉÖyfTëh ÿœm•}« ‰zT™¡‹Þ !œ€@q¾ÞÌ+×…2/ Æ„ ©(Ëý­ P€Ûji‡™®@ˆ“l@4ÍÆ3\´íÖÞ%y÷ø¿úo~ës_øü¦jª¶{4;ùÃo|ãýnfÛc~·,v£ñpÚ.ú06o†Ã1†˜("ÔFŽXgëY¶Ô×’GOM–X°<=šdh”ŒGôš,ˈ¢4Ïœ¿nÛÙW>|{$Ý_NqöñýÓAFlg²;ÑBö×Q€è|DžÝþø M™bŠ8ãVêu·fý)tV¹u’# g„à‚o‹Ä¤Q&/‹‡GÇG³9h¥Zçš6&Èc厫ÙîÖN™°®öœ1äR3"b Q‚ÈU¦PÓº¯Ëú¾åÙ¹‡ Î4:=Š1`LJ>!Ï?9ôà1_ü Iõl ö´÷œý7ÖÚ'8¬¾ î×QäDœqDПÈZkDÌó÷Ú§¿ôó_nêÐpRŒX¿wP¿"ô V H.x‡‘8CÁš®]ÕÝüt1?ž5›¥Isf“€qQoü|~ûàÞîî®´Â †¸ðèí7­Ÿ¯W¤þýïíOß,³²âúýÿl3_Ïf‹à|ÕÔç&ÛŸ|öÕÁd¸h–“ÉhP É ±Ès@Úf·^(Ša»X+.¶öÆ#›Rà€‚)ˆ;åà•çoLšxãü,t1ÎY ¾ª÷§ qûü^]××?|óÂ'^¼6¥ølr´&@²¡öáƒCï\S·„Ê‘Z¬š«Wó¢cÌå#)!ˆÎØk‘z5P/RÁµmÛ… ””Ö2©:j«¥–ƒZ_·€4Hó®ë  Î#!ç\( «zm+„ˆ0†¬¿(õÇ^1` z\?;KN|< 'u&ãŒsÑo»g…h°Ç7ÀÞ@ŒýJ?#¹± ¤ 8ôÏ‘sD †P–e]×ûûû»»»»;»à°ãœ÷ÄÀþôëû~‰ä;?xÿÑñQ;"ÊŽuj“"I©­1&Ëã@Ié»6"qΉ10‰ÝÞÞ¾Fè»õNiØË72&.Œeôéötø™/¼þ«¿ö+š£øÛÿðƒ[÷^þâïüË?¼wóØo0ÌN6uµ\ ²}8<< MW–å|½ž­mÛF@!— Ëñ1F>2Æ( "ËÓªªL¢‰¨G<‹bŒžÖ‹ '{ÛûW.fÃŒs8>88=zøôsOÿÒ_þ¥_y>’„£ê˜¬ ‘õtæÇ’"$Ä^èEè¼#"¦dà0߬>:9=<¤®SD®m׉)çÝÉrñ›·ÊÝýýýýMÛܺwo®½ëbxx|ÔùP»n½i޳éÎÎÞtïà£7«uií`g:ÊŠÁ  †ûç÷˜J¦Æ(ï}ë:dëud0ÍSŸ¢ëºbh(TšäîÞ4Õ& Š€"`dœ Î&JŸÿìk{ {æê•– ÀWgÚ€î_:W r›&ØÔÜhÐI<]ÔUŸ0P# ¡··¦ùx׃ñ1" 46ó„„ìñõ 02Bt1¸@p¥Ô¦m³ùÁÁAS·}Ž*c‚sIˆX:L(R‰(ÇÅšár5÷Ñ-‰ˆ Õ'ý<1’ZÍ´ä! H ÑG`‰m´”Œ1ï}¡‡ór®~ÔPÁÇMoçœ1&I’^àr6džÑò'E}L@ïLéöÞ{¥Tš¦ÿ¾Þ¬W²,;[ÃÎw̱*«ª«Øb5{²šM7iQMR-ZlÀ`AÏþQ~0àgÀa@†a†mÊ’AS¦D=’"kÊ9ïÓöÞk-?츷³ºšŽ‡›‰Ès#ÏÙ±×^Ó·¾Oî:‡ŽjïT¥ºÙóóóG¨€êƒNoÕ{jdê~ò“ŸlÆ}lçèÍ›áþÙ)žaÔú¡Õó2‡œ³"UŸõn`$$¸µX}ã?üá_þùÿ÷ÿù]„yu¾üÆo|ø{?üÁ×'íiÛÿ“ò_ý§ÿè?}ñæÙg7pyóµÅ=Úìöû¬f˜î½ó°Þø,jÞ/ 3cƃZAÔ¦u!¬ÄµsÚ)Íιè#!äÔ%Ëúr÷ðñ;¿ù[ßûÖ÷ÿvìÃfsó—}Üm/ÿ“¿÷÷ÿóôŸ È. !4]ßn-eH\g.o_·–h0‘U˜Äd·ß_\\¤a\u‹x´Ìã”K‚è\×@ôÿâÏÿ|4xçá»ì“§Ï>óc$S'sy÷'幦ýè£^¼xõê¯>ùÆ×?z÷ᣆ¡oÚÅ¢wÎ5‹`)…"sSÊ%ÆÐÄ$ż;½/îÇñÉ“'ó8FàÞ}¢S9ëú¼[ûÁ¢G(™Á­ºnûâéxsüºlÀ—û{÷æyœctн÷ø£«Ýî‹Wo†"‹¶¦ñÕú拯vÙ†¹øåóó‡iÊÃ0-ûö½÷ÞóÍbi܆2˜™1™¡À­w!P1ËÓhŽª'ñ1ÒõÕÍ¿ûì雋‹¤€L©¨Édb&6–´:=Ù]¼~~ñòøÞÉññò^ÿÀ¯¹oÚ›«kDŠMÈYÌqP­4JcTÕiš@´ò£NS,)w]Óu"æ9U]-"Ç¡Ú<Ý… Õ¨®®®B}ßW£J)UZEŽOßñÞᬼ½¸9==Ý_nùyž‡õ(ªÓ4©jׇŽÊw¾ñá¿ÿƒÿî¾ñ;?üöû_ÿ7ŸüÅO§éº!ú£?ü‡Ðµ~þìÿþÓg»µŒ»‡M·~}ã‚o]ëœwÎi‘àSÎÙ¼s!G&"hàD}ǻݮ‹ wûɹA¼ëL9ú¾.ÊÉÙñ£Gœ§ý~7}{~ïô?úÃ?xðàÁn{N»cšŸœvøG°µ}£{O~íñ*˜d0C4-RÊÍvÓŸœãXÔн¾Ùv³8šËEÅ•ÐøEÊã«ç7˜ÊbõÎÆn~þÙ«mÒ‡žœ«‹ôðÞý:ýÐ/óEPIYUûмžmÙ¯–qqy³ý7?úí7ÿ. ýOÿϽ÷® \__‡Ðí¦] x~r>nvÛõîüôøÞñâ8P{Û8ÌRD«Fg€ÉTP‘È›ˆ$AfÉyLàüv(Þ7Z õ1ú†Ði)s*E„Uu–óãs(){$蛾:–ívBsvv¶Ùì̬헻ÝÎwu½iÛ6†~*SD¤a[Æq2 JD)YJRJiwrz>Ž»$%„@ŽsÎã<‹È0Î³á ¤iN)‘A%>&"f¦[¹ùZ\©‡5EtÎ5M#“lŸ¿Zß¼:¿ÿ`?Éë7»ÕÉYšäÕ«W<~œ†ñkï>:[­èʬ;fW ˜¨)A6Í5£˜™[ô-©gÐ÷ýbÑÝ;?], –RzýfX¯¯9xfTôÙY*Ù³{ö×Þû lÓñƒ{÷Ÿ¼úÁû?þâóôêù_þ³ú£çÏ_¼xñßý÷ÿ´áÜ@^¾ˆ§g] 䈙é®Wcf"†Èι¦i»ê͉¡‰a ’oÚ•—ä]bÉ:Ïóf·îºîÁãóó{§M×ëeñÞûïÖ…ûîo|÷ÙëgO?ÿä;ßùÎãÇ;î`²¹”BÛ]¹ öµŠª˜®V«¹”í°µÌoÞ¼yýêÕ´Ÿ¾óä9™ó<Ï9gR+¤§§§ÑùÕjurr¢–ÑÀ<9>6Åœ’a¿ßw±A5<99Yö‹Eß§q*¥˜ÊtÝ{ïÝôð>3?}út½^ß»wöþ“wXA<d¨L `àÀ»ÚmMF¥Ð=uÕÆˆheJªºóÓf71_­Ž¯‡)]ßls±lòòâ:ƒ¯eˆýþ*Ï%Æöòòz³ÙIÒׯûøþÀ{µ¨PsfV1ƒƒí]QýÌœ“LjL%Í›ÍöÕ«Wëí¶o;Ë9“IÎ9“™º]±qÖòz'î͛͌fiÞ‹ÈæfRz8âÉ^Öë­ˆøÐì÷ûý°–["…Ú¯;xE€pqy'hSÎyœü'Ÿç”´ÒyWãü|Æ£D¤¹ˆH…©ÄooêVÄ·´Ü½÷µî2ÏcéÙ««»a´Ë›]™õúêj½Þ]½>].˜!¸@4hžç¡‰-¢Ýµ kO^U]›Ì wgG‹®kš@Ñ£˜BÛy"26$%6f¦à-˜ÎÆ@çËÓ?ýã?ÙŽùï^ ëoþöo!þË?þ—²ÙüôŸþGÝêÉ×>8:={üäÝÏNί/¯ÔÒ-`P–À!F¯Úw]W[8ŽCAÁrÎ9‹š„R\)ȨóÛí–¶cÓ4ÌýôÓËËËZà^­VˆH@-«ªgÏÀîrBì (Æ0Bzv±ûÓóãe¿!X.Ž -Íó|trd›Ý¾˜Ëjo®¶»Ù`³ÞïsÐË’ÊåååùÉé¯ýÚ¯­V+^ŠU%ÇhFhfYoËòˆ*RD©ÌJhÈ<åtquyuu%fMÓŒã¬YÔJʪê=góyJÛy7–×Ë›-)”4j‘ýv«ªÃ„ÍËõÅÕMJɇ8§‰£9ÇÕüª%äœ+4OdS­«+çœÓ~<êPÄŘDtNZŠzïS6•BD f†Œb†NoK¬fU–€K)Y€ÑK±yDn.ŽÙÐíǽ+Y÷ëÝñññOÞ;Y ”lÅL}S븅£_Ô‰ÌAb`4E) 2î÷ Œ"Òu­‹!K)Ù¹ñÞ¡òèÏÓþ¡ÔôÈ IDATüŸ?ù_þÙÏ..6ÓpzvÿæÕõ?û仿ñÍ€¿ó›?øÚ×¾6Bv]~þÓó¯ÿõ¼ÊœZC†Ø6ι¦éK)U7`7Œãœ§iJ¹Ôzå¸ÛÓw"eš&fŒ1žÝ;ííitttÛ°w†ÅTcŒW—Ç'Ë×Ûí¿øçÿÛÑÑÑ?ø£¿ÿ辂Î0'Éì! HªB)f ` VT³Š˜fÓõ~çÛ®_.vS¾¹¼Z__ƒZ×·2$-e.¹*B2!€")»qØ {)ón·ËeD#SUØn·1î¶ëݰÛ!b’sDQ‹”R¶»ÁÌ>{öô“çÞûO>ùäæææ“×õì²mÛ—/_v]GDã8VItçœ,ï=4 ChÛv½[_\\\^]ýüç?o¢!@çyj@Dv»ÝÓ×€(€ªj@)ïñfDä’äü¼¿¾z3ìvËeoŠ'Çg¿û»¿ëD@‹Š‚¡™ Š ªpЦ`RW¬€2XÝí÷×××ã<g‘ú°‘= $µŒDŠ`¥ŒãèDrXNWÇ9gRJC²¢ Äè‚ „ÐøR*¥ŠEKiÛ‹TURvà‘xŽªˆÐ³ T¸Šg¨U6+ЊSkÕj`1wŽ‘XWD¬ZqªBl‚'n‰[@×5šçQîýàûßþö7¿E€SÉ`Œ\›t0„ÚšV¨2Y®HeæZàµú„„@Lß`p ¡¨ÜÍÅÕ÷ÓçÏN¾õõg?ùÙÿÉŸDv8ýøÓŸþÅCëÞÅîƒï}üýïý–?Zä%¿š¶ûgzòkoþêiºÙQ0Û #¥TÜn¼¹¹1å©äyÎcJªj„]§&vÞ3¡,–Ýýû÷CÃÌüäƒwbŒ5ﺆ“&TC€auÇàü÷¿÷›ç·þdÈ¢‚ˆˆl`U陲ªHѤ%IS!mƒÞM9½xýúéÓ§ûíΦÝ>RHÓв_ˆúEßOûÁ*–À3Rþïûý~/šk¤‡LžCÎÙ˜†>¿ÜÑFüìÏn¦ËésDüä“OÚ¶uÎÕýWë¢jDÛÝn?çççMK)«~qrrïxµìšó8#"z6Ñéù½RŠ˜z×°w`5¨CÌ)1û6v’˽ӳýë-9€bp˜ó&"C(R’GÞ*PFUÑî"·ARVa°qš6»íz·rZ˜™ˆ±L(¥ 3DGØ8Âà¬#k‘c¨â¿ &3"žtÑ9΋„y[ ¬6ÊE ͵æÀÙIðõâÑ[ ŽQURJX Ô#ÄÔª„cíµÛ<ÏwV÷¥2¦jõ·Õü*À͹Eún5 äTºn1ì.‡Ýþôý÷?üàƒÈ ¡£˜R€˜ŠVÅ­(2@ÀªèúèÇGß{Òt­1SƒÐuÞûI2©ºRrÎeÎÓ4iv±™ô‹“'}íêåeZï¦Íî¼=zÿìÁø³Ø>9=—¥»¦ùþÑñ{>š¦Ýæi˜“æœ,“}’R†ýÄÌ‚$*€ìÛ&ômt¾;?»w~Û轿wïäìüÄGόܛ¦)[öÞ×Qš‹JÉÓx¼Z]¼y9Žã¯ÿú¯ç;ß!À‰­ÖPAg-ª H̬’MUL³”¹äjJ¸X._]^=óêóç¯67ëÆ nÞM)ÏÓ<ŽP´Ò$QRKª’2B¹ö×]ÍŒ Ò8‰XNÙ÷Þ³×\ˆ€´hô1¥€)%EðÞ ¢ómßz5¢£ó‡+³RJ0=ùðoUŽçCø–lsµê6›ÍÅÅEÓ4Þñ<ÏÇ«£®ë¸JÿpGµ\AW|’s­ö•ŒFŽÁ¸º³ãÕÑæzóðáøñ³ÓÇÇßüo €€(H© —„v ²U­îATK)Å´"À±€m÷»:ŒÓ4€ˆÌÃ<æ=…¬Žê†d$D2É’´@–yž+$ÓÙ™¦}žK"& Feu DÞ¤#œG' &F ˆHFŽÙȸòÙš1#*êm-«ú cU˜¶,åÀ´óVfPk3‡–† ¢sÓ”}ߪ!A)‰QÞ?}üðÜ ç2+Žœ€›€”ÊU®ôè`æÐ»Ð˜½SçöI®Ö7µ+¢ª"^¯oB@•ì‘L !Ú7¿ÿúÍå;ggKjžëÓ¼›Âó«+8òOž½þøœ–üÁ½G/ÎÎ~tñ'i?o¶³÷ˆùØ.‚oKÊ«åqÛw¡m€ÉÅÐö]ì;G|Ú³3f:==vžŠ¦ãbæ4Ž`¨˜Î¹e¿xñ<7MóñÇŸ@€0Ál`–«b’R! ªZ{; ‘Éñ~Ÿ¿|ñôÕ‹aH三-ÉJJã8æ9çÕlÎ ²t!Æ®j*ÙgòDEaFïcNÉbCbÃ0¶±!µy?4]jŒD€@c,`±ñã”Ðóì‰IÁûCœäB0¶¹dðΧýþd±ˆÌìÙ圛6 Ú<ŒYÑœs€˜“¡‹N˽ ìÌXìÐÜBÄa;x KEÉ>xòî÷¾ó­'÷0è¢&u#Àj€|QÚ¼ÖC=FT ̇PJºÙn¾xþìÍå%9cÌ9ßÉ©¥q"µÈÁ#‘Œ¨Î±à &sš¬.ÊH¢’¥ªªŽ)kï£ÌS½«E”ÐÄÚ‘W0¨Tþ†€d9M„"P šˆ”R L P+hFÅàÉ>´­€j;O 9GfP’š‰úÜœ“‰RššÀï?|ÿÛßþõ>†, &ikp>†UÀPõî,3Uu –UöÃ|¹¾¹úù È›Íæää¤é»yž/×›ý~us}|||rrrzzºlºÐmµa}}ÆÁ<»%®¾õÍãO.Ÿ¿I-¼’¸ðoþ£û×§¿ÿÿþ“Óó?½Þ,Ò~¶1«kúÅñQß=¾ÿ° ÁDm±ZvË|9xTâ}lD’;·ßïöÃz¹\Hã4Š("Ni’¢D®uaš§—/_n®o>þøã÷Ÿ<9îVºÏûY9®="B¢"2MTBþÛ¢¨€2"^\]¾¾¼Ç1„VTÓ›6/¿ØÑŸüùw½x6– ð<~뻞Å+÷Ûr¹¼«h½ _!Ä‹i)eš5å¼__‘[ÍHˆ>C.– VyDGvêüpsóøxùƒï[½û®B1(B©<+ 3VU†·i`fŸsÆÐro.ÖŸ¿Zï&$·‡1gëC3{HâÀº¦ECçwÝcÓ @Î9À’¯çŒ¶U)Åé^¦´¹yÕ¶-q|}³«øÃÌŠ>nÇDDlØ‘ƒ ù¤ªÌ·Ål?g3C‡YTU€=3gƒÅb±Ý®Ñ923QÉ“b.‰`NÕgÐ _€qʄԴ¨Ù$—‚KWÎÏNÝ?B(Š€)¢gB©-0!F äl§Ó~·+’}ßöGË7yøâêõçÏ_ø—Èeš§Ü"›;nZçÂ<Œó8‘Z™4R3(’ç<æRH,Ïó4ï(§Ä)·‹EÓD3# P“>tÌL È ¡!€åd¨†LÙÔU E +šT-ÙmC¡T"¨!4®ñà±!b#L"Xã"0‚äz·Ð!Ï6åÍúÉG|ç»ß,€L5|à¼.ã”ÖÕ]Ó=ùÀ)Oª=)Î HUs™Ó:K˜À#6‹Æ-Z³U›ãÓãÅj¹\.)‹fS1Í*‹Åb¿ßC–€ìšGG1„6DPÛl6Ó0¾xñâÏþì϶Ûí囋.6?üáÏïß?>>® „¦i±*l¾­RR5 Òªƒ,ªjª:Žcm›:¤ÛÀô¯¿ødãïÿáüàwÿ˜¡(» BÀ ¨Æ¢`¢  »ý¤`SÉ›iÎhq;ì__^<ùb½Ùµm[@½+Ѭbj@IMp·ÞhÊ)M (d 9Y±elK*ì(Z`ôÞ{½Ëc«h+3׌Ÿˆ²”zßeÿv‹Hþ•ƒ»Ûû¥½ëܽS[|ˆøö q·MeØîB~øáÇë$3‚›ò “I6I–³H-±„Ú±6ËÞ‚!ÍŸñüóÏž_]ÝDº®qFÎ9×ñ囫Ú×T…œ+jÅ lXïÇnØ5>Ç} «®wÎI.ÄØ÷}Ý*Ó4¼ý\‡Áô/?)ܯñm8ÔW__v¿½z‡¿|yæðn©ÌrNα UüêÙÙiß÷3Ìf’Rò˜sžsI)0önÎyœ'ç1ƨ–˜™V3w«õA’Kà€’µt¾ËÕb¹ìúÊ4„"‚"JPÀÈ{U5ÉšF&],mŒ¥îøøx»Þœ®ð£¯=qÌ]×ÿp±êW'VÇÇMÓÔa¨ „ Æ{{Ê«F8‡HUƹª×@Õµd&25Ue"&RÕ~µ Áí׿à$˜ ”1MäX‘JÖ¢b9I.³4]«£B\-|ÓÛõz»y}u9M‰™ PEå®7ef%Iª¯ý Šy?Þ\_cQ0 ÈÑ“w.º€l}ßK,ιÅbQ¥iˆ 9àN¾œˆª:*þÒV¸›±¾[™·ƒÀ·/þªáÙ—'â Œ£°ÈHLà 1„MšÎÏξýío/»E½Ú\slvÃ>©ÎR š ˆ©ˆH.6ìÛ™Ybßví"LÓpu³Ûlöi–.ÚïöV,°##‡.[™çT²Žû}šfDÌó\{垸‰acbdÇLmÓvÅ"hcÞ€Åh_yÕÓì­Å¹{ì_>ºð­5üŠšÙWº·Î8û’8æšaÜ’ééÙñ‡|í¤;RÐͼçyÌ“ˆ$UEuÌÎs6µŒÅJÎ2‘3.¦UU%IêZÖ9ã¨Î»ãÕ½“ÕãÇ4CÖažÆ4WÞ<ÏÌ‚„BEš£cfÀœ3Á-ëI…áb¯D&&»­Ç ‘Š{Þ4 yï­ˆQ+¤ÆÈižòœËœ$kžR'Pdoæˆ_u€_1·_m„_ý•j´_]仯Ìn‰¿àvÜ¢c4Mã VŽ–ËåªÐI†ëõuÎ9CAÄZó7-³fôÈêða.šó\›çÙÐåjPd°Å$er¡kšÓããǾóÎ;ȰÙïnv›¦ Ûyœrnb?MùhµjB¬¬ØK×uÌÜ4‰NÓtq}U*‰GJMÓrÎóBçî »ÃìÙ­JÉáQ™k9Eµc½¥BQCd"‘içiß´'ßûÁ÷NŽÏgHIÊÅåuÙÍcÛ÷@Z´äœ™‰ÀÀx˜'1m»™¯on.//çyîûž•¢Eæœ%%IÓjûͶ”bèbh0 ïÛÎ2YdW)Ó™“ÚAKôvTÚ3¯Õ$~VU‚%@«g"¼åÜÞö„wžíöHþeSüêÞº{ÓÌ Y…Öæ˜”\ôæâ¢ þÁ½û1úÒ0ภ¶ˆˆeÅ"’s))›«L¹l÷»›Mó~³›wÃ<Ì‹B*©#§ çËc4``"WÅL3µó‹µG^Ó;„€Tùîûä;ëúòKky¬&Š¿bÇüêpß¶±»ëïÖç—‚ÕúIõ+`"‡•Z ß}÷ãÿÖ“'Oî[6cøeŸö+ÊYoyBøŠDD$|ûPB8»oûøxk™ž]ˆ^4yÏìPL|ïlqrµ¿à&´m»ž¦}·:jÇÎKÎ9d?Ï3’¨jŒ±d-ª»õf3ì‡$Ãv÷òù‹“£#M hà}Xµ=t=°iUÄ#"LjêpV2¬Äfdâ«&níÕPðPíüÅV¨jõ“w¡ÎÝ:Ô@ýîäú¥pô—ÜÂß”Þýd®„³*ªÕmïòÉ¢p~oÑ.¤w½w±€—!•6Dlšb*µ–& ’K’<æ’RªéFN‚†'Ç«y3F¦>†”’L‰ÈµM,9³0¢1!ˆ%%dç €ðà‚*%¨*‚!VS4eS|k¡îžôí|Å1þM¯ÿŸpôïß~>"Ò—™‰÷»ÝŸ}æÙÞ¼:‹]†Ý“¯=™rÊ’!•|³Ý\o·iLGÝêúòf7Mf6æRïrçÝ¢m[t\J m·Ùí©ÐªëÓ0N»aÑÅE¿b—ýñéê䓟ýåó†Ÿ>ûìÅ«çYis™\{B‘<ÍŽ™WK;==½¹¹)¥,—Ëqs©dDÌRˆˆÈ•Rˆ©˜¸mÞ Àj@GÀYÍJ. æ½Þ!â0 ’K†¼ìzlðxqôÎÃwè¢?NïuýÑb½_?zøá†&ôÏ_=÷]³Yoæ\œs×/6M×ÏÀݰY—2öi7ãÅî1Æ…†‡‹D |ãXJiív»SŠÎ©ƒqë@glã<ÏlÄÄFLˆzçNÎýrÕ®ŽEF°7ãö_ýÛ,y½¹VM±]õ–Rw[ú*3CB¨|t˜kvÎ9b1!«õ!4À ¥QÑ\‡µàRP3Q‘Ø9y+%÷§GÌ\æÄHxÜíw_|¶Íû¹ù®\TbŒW7›õz½:^§”؇Ýn†ö‹/žMó¼\._]¯õò:§ÙsÎwË.:;uÄûÍŽ™€Ð£€#Ä[¯ˆ²÷•zˆj ±Ö;™9:Ï€@lf*)µ£)ÊHyNf†%åú‹P»avh Ü"6j¬Qá”ZQ9ÄÌìЉˆÞò5"¢€U! "Ê¥ ";wë9 €U¨œ#@Ðdúòõ›œŸÿøßýÜ9×öÍr¹³«›ëmÉ!Æa7v]×¶í~¿GÅ:dçœóì °37‹1:@® Ö@ÑHÔÄÐI.ÄL E¬”YSQÌ”½3;sfÆ&¦CՈ΅æ€Ì±ŽÕx'"y7"bïc% Ýn·dF€N‘ˆQD vÜ13©ªC@VñÉÔ›:Ra¬—`)é.ßùEÄ¡•Ë-©ˆ‰3ŠŠ%:_O9MÓÄB‘"1å’Sš¿žÞÜÜ4MbÚ4ˆ ÑÉéI’2L™ÚØuï$—öc…qðjåššcÈ…Ð,›.6^‘–÷ÎÌ̬l’& '!rÓô: u·pý"à˜Õ Õ¢™¨©ÖƒÐ+æ”á-ÖZ };¦º ·ÈF f#2SE˜KF)%g"‚Aó~³}µ¹|zýÂ7ÞcÜlvûý~y|ľò|úé§YìwÞÆ<“É쨂˜%“SU6>ŒÀL j¦E ¬Ì‰ ÆX‰3V«•TtäœÁ€„X™•-—2–<'wv|Ûfy´jý“GCÓtÁ7ŽÈs.9çÏž=mÛ¶í"ôìIÀvÃc§¹*-³Ú-¢‡Uk”J9¤H9‹¡¥TœD z¹*0{¢/Õ÷jã$úÆÌRÉ¥ ! ‘#Ïè̌ђC·ì–‘B*ó‹/^#cÓv1Æý~_J™!¢)Í‹Åb¹\Ž7ƒæý”ÙÇžjiJÎó<Ï9M3 3’@…v"PÑ'a IDAT i rDÎÌ rB©ˆHßv‚fŠÄì ¼óÞÄÂõlºKZðÀ$ ÕýVÊs½•9Lú!Ð-wNMš§”à@S;楔9g%¢ÛÛ_h ³™4¥’K))%UpTÍDU³”bfM;ƬËårѵ¹EØîwÎûóÓ³aú¶›öC i‚Ø6}Ó4{ïñÐz¦iš¦v¹PB+`VL À± ˜y® Óz«yž‘YUç” ÆˆDYd¹Xl·ÛšÅ4MCΉHQ5@1çÂbᜣ@˜Ñ9«À”±Ž¢ù‚€¬ÙÈj«6Ï3!Í& €j¥¨7 ¹¶ñ€àуš¡…è}œPÉ@#£õ”–¾© 0Bl»Õj7ìÍ×öÉpNóh ¢9ç ÒuÝ·]Óæœ‡yÊF è>þøã'Ož¸&l‡u»ŠE³÷Üu­!ì¶#HŽkâqí¤—RT\ÕâC4ªL¬Rçz袪¢cB¬E—Ph"IŠ"0øzq¥‘°CôMt(áB ธfU6der@Œj"âY¡Œ3#Ed¦øøôјæ¶m™9ôáÎÙöÔ Aù¬?63Å+Ž ˆ¼"&IPÍùx—¦cEëš0:T½sÓ&*xë”4˜!:¦à‘YKaB0T1ÑC! ©R$™Éq X;´ c«•qdò1€ÔH Á$—”r½‡lçp“ˆ€(ö¥BÅa‰¦iò>Ô„ª2°w±mz[…ØHIÀžú~‰ÞžÝó¼nCDÅ !Ì9£9Z.á¶ùé={ï§aœ¦Á™g`D! B‡*! @ÎY‹<3b%üK‚æÉ =Y¢šgèbl|ÅQ‰ˆä\1jcΈ»¨Ìƒ øE³Ÿ&3ñˆˆÆFdŠ4%aÓÊÃÌQU§Yïß?g7¾ÆRÀ{}y¹ÞÞÕ’X=ø‚˜¦df½9DL©iq0› ±<>>öSÚ\¿¾¾¾&¢;Çq¿ß/òX»ÜìÉ„L4A™çy·ßÄQÍ7¸¸Þòn ã+?gøæÏ¾ÿ‹¿üKÿãkÉ¿ý¦ëºþrùp|ʙ㲢£¾ï Á²,,¢Â>„à“Â)%ÉÅ!çÖuVÅ("ûãa¿ß/Ëòúú Ž´P°åñxüÛ¿ûÛœ3FÉ…S€ÎùËéÚ÷ý~¿Ÿçùåõëóóóço¿O%ǼRðçóë0 ûaŒ1†Î#ânèC…SŒqì»§§§RÊåtšÏÓ~Ü©«óDDAœ³& ªPðÞ]_ŠÜ.×cA§)*F¥¥ÀDt8Æq\×õõõõr¹|ÿÝ]×¥”ÎçsÎùÇŸ?Ö`Ï—/_®×«z}:åã7^//î~~†A5ª2çõº·u=ã8j®eIièú¾ï 6FW{þkJm´IDã8ê<ø yJÔˆ®s.•|¹\>|ø0À!(×é*"Óår8Ñóî( ë4ïv;Àÿõûß»aìÆáéð|½¬iÍþûòóÏ‘—~ÿgQ²Hùzz9ó|+¥8•.çóùp¿ùæ ¸???ëûë;\¯×q5>c|yy !ŽO̼,‹–~G™¦iÇ­—én§ Þ?<‡¯§×>¨¾ýþ‡¾|ù2Žã~¿GG·ÛíÇ !üþ÷¿¿Ýnó¼ â‡N§|øðáv»móºj™¢&Ùpv5Žãš3‡¡ŸçyZ—ãñÈÌûý^­\Y—e]J ´K$¹®ë:GD¤½Røt:=}xþôéÓËéå|>‡¾ Î{qRƒ;ŸÏè܇Rɰßï×uMk$¢±ï‡®W‹€AŠÈ8ŽÓ4MÓ„ˆ9çý~ß÷ýׯ_÷û½ÖŽãøáǼ¬××—çý™õ—ß}þ®@ùò勈Büòó—ÃáàÖiÝã4χç'tt¾^»¡¿Ýnðüü\RöD{·›Ö믿ür8>?€UVÝœýntr Èy>+;ábÇTÒívQ/T#R““5§Rdfþüùó¡;Ìef$µês1ÆyžCOû'äœyùÙ;§uŒžPÇu8çìÎëy×ï8ùæ/f˜ ‚O àÀ_âþp–YD$fFef$êqˆ=øëÓUÍݨÇó‡ÏιÞõëquÎë€ø]aáE¤t]ð@pûišÃnø³.@``ï©ëºÝn—RñÞ‡àû#0oÿûüüôùÓ'Î{—óQ)Õ“#”!tŠîj%FrÎ]n_Çqôä3pŽëf]ðŽ êxcdá%„Ì1çX|—KÔŽ"€˜K,Å αà “@I)ŵK) ár‰"E¤\ãä¶š()vPJ¹ÝnÓ4yï„VÄ%ÆHĪӌëT«Š†áx<®ë:M“*¡û|N®ó™®t !h3[½‰ÒÞº®¯[EΖ}‰%+d¨;ãºÊDd+2óîxð)Y ”ªYfö‚8Íó×Ëùz¹ÄË)†î_þñ‡ÿñ¿ÿoþÅ_þM‚\ p’4Ï»§Ý“?Åi×|„¹ƒ.C^Ò²IšÃB@ü´,Ë~Ø[ÇèåÓs}ÑF/’J)ï:è ]/IÅ•÷¾Ã΃û©ƒ!vÐ 8ö$]¿c`Ãx¸,„æô!ÐØ…ÀqØö½gæÝÓ^™\mž…dFN)}ì})ÅyDô»>@b?cç¸Ëq_’ˆ¸´¢ÃØw÷œ ² H=:ÎL´ÒmÉ™÷ûçÑ­Q0Q\2²Hâ锸Èh†·L1®ë ,º0ôçüU{ø•eÉ{`ãeÉ̬™"‘9 £ƒµ ëºN—kîºÞX§Y–uÚ’BØ#Ì×Ûº$müÎ13ó<Ï]×iÕó×W%¾®ë°HY8ö hWëÎ4=%„ ŽƒBAà=­‹sJ Ý6Z+H5ÏA­SjJ–cŒ‘‹Ž›æ”JŒ3ÞRJ+ Åe)¥Äœ–sê†×¸ŠˆÌ‘)®KN¤,`ئ*†ºö{ˆw»ã<ÏK–€0'ÖrV"#nÞ„ Ãz]ºŽoóöŽÌÜtNÖ59ĈÈÞRÛD ȱìv½8` !?ìÕ¾-9¥¬>g,‰SŒÑ‡® 9Oq¾]Ováïÿöoÿü?üî/þüϾ}BX_^J)eɺqrïûuš0G k%‡9gíþ¯^lf'"%¥„ë©ëõÚuݸ; "äœ×5ò6JN;µx,ãÔx‘ Η¸–®Óã? GÌsá5„r.Þß®×ÓׯWçæyþøü òÂeQ7É,Ͼï˜9Åua^¼s—ó¯ˆèu]Ú:=¥¸\‚ÃÇ] "â0_®Ç=祓1®ZÓ‰ÌêÒ0sÎ1CDH) Ò~w€Â.„”’²Ÿ’Â4M!„@.§cˆÞÅQg¨y£±2ÅÔT$¬”²úúò£Ï’µÅ Ô0Ñ¡Ój¡éòn·[;Ž-³Â{eKKûRòÕŒâË|Ûú2"Ú,”®ë,‡K snÛÞJîºZD\RÜb›9@*9-Å2å$"ë佊–""ëº,‹ºúRÌ,ˆŽy‰q7Œ©p‰Éè_t7¨ëJ)óõ:-óív+¥|ýúõãóD4‡FWµ,‹ëꈾyþø´ëÿó¿þÃÿü?ýþ‡ß¡wCè§2Ç4­ëê+Yäœ8=†—R»08çTª“·@ðµyxÝ\Ùêœ UíÌ¥p)ŠÇDçBó9'ÕSyÓ2+]r.‘ã¡?PG*;°* ~70á)Î$-†À¥œÓ¢"PÍ""ï‰hù:;çú¾‡.ÜÒ:Ç9W;!¤)rrH¹Ä™óº„.dq $e-eIëry—}$×ëuZæàü!%)%ôý4O©d_üe™Tv‚«0Hç‘»;÷r¾ BºÑ¶~çn·›ŠDÜN—H÷|wIbÉ9Ç5sÂS,9sð°Ó4}}9)W{×å\˜‘RÊj5¥”KÙ䈈ä\n·ižguÚçuñ)ë¶û\4²Cº­gå^ÝÒ\8ç,eU˜A…rÌÙ9×¥ïY½&ÍnÕˆYÎY[“tËÜ6{C!}ñT¢RTÌ 1'YÖÌe7Ôa+¥,©8w/ PBï“%ÙvD,5þëùjdYJÇñt^^^éûï¿?k,ˢ›‘·p·ÒsdôÞ/·eY ¦’Õèèû>–|»ÝbŒkÂmé}¹\žŸŸQS'Š™‡,™$‹ˆsL¹(ŒÁ>üÃ?üƒö}1@{žçÛåúÍÇoR)e]×Ì%„Ðïb!—²®«ë‚²¢¾Wp>ç艆®¿ÝnÈr8¤°÷¾ë°”’tòoÊDsZ–e¾-‡Ã¢½D„(qÓ‘èp8 ÀäЇ,2­Ñ{O𻓳ÊwU†j\¬ëz:rÎOOOιómZchƨùÐǤ†m&Jåv›™o‡ÝCÀ{&SšS¾Í‹»ÞŠðº®×y™Ö†~|~~½\÷ø?¤1meCDèü‡ãÓ÷ÿâ¯ÿê¯þêý°û‡÷゙^!sš×e8ìbŒ‡ç§”òétò®“,Ó´ ]@úÇBøöÛoŸžž”ˆH`çÜñ¶˜' ’õÛOÝ<Ïê%WÀ*ª¥¤ÖÅn·‘Ûí¦ZûË?ýOOOÃ0xï÷û½$^³Ìst¯—¯ç“rþ4MjíVN)ýüóÏûý~¿ßÀmHÞ=±ïE!/C×çœ×yž§âœ;M³Êà’(Lӎ˼xrn×ÏÓ-³ÜòsV€4BŽë¼,‹÷Ëóó3y,¥¬%¿¼¼¬9}þü™„ÖuíÖŒˆ]ßs¡yJ0ÏÑ9ç‰5)‡ˆz_B·u9ŸÏj.ŠHß÷Úëx<žÏç®ë‡ƒˆt]‚ü:½^¯W͆wÎy ‘Q à2Çüéx„TdZ&õÜN—éùã7¾ën·›Ì13Žû'fXcLeþåå$"èºiI¥A® 1.Z«žsX‡]_@Ô9‘ë¼23u÷?ü^Äù|ä»ÝÁ»5–ÝáÙã6¶ë{M˜¦ ³“Ï@Y„ƒ$×å“àš˜ˆR9•P€\I©X ;Á¥ðmMúœ9ÆI™ß¹0 ƒsÁ¹sΙçyÍ™C­®ˆkØÌ1õÕ:=Nj@~øðAµ¢úºÇãQ†c,çár¹h.„jÂÖÿRlš¦i]¼÷è].åt½$.âi·Û==?¯š'L ý=iæ±û?þÏóÝŸÿ ;wÊËÿû§K]È,ósçºa8t~ìÃ..ɹŽÐMÓ¤PÇn7jxðãÇÊNbR;P}?õFò^c\S¢à»qð}GÞ)t&Ÿ?LÓ"Ÿ>}‡a™gôéó'€JäB×qæ——¯ómò䞟ž ©ÇeY¿^Ρï»Ý8Å|xnY½í W ,Â@XH J$NÀÉAq0Ï #PÀÑ*…4ÏxZ Þwá|½ž®ßp˜¸ø]®S\Ñ»Œr]çìp|~Â>D)çkŒ+óp<ûÃ’óW žc)kÔö¶ê$ ³äR2³ïº~7bð±äk\Ñû”Òáp€_~þE2Ç5jcEÍíÆ».sÎ%§ˆ":Y„ië ÷Ë/?ï÷; Ô™… 9"G€rÌ%އa®·k.9taÜ Î;ÍH`@”\’#*) ””8É1–”÷ã艎û}BZ#æœåt=Ç´’C.%Ïóôúõ%ǵ÷žcôû®£Rz¤}×cLSYã~GMçX—%®>ø˜“#š§‰Säʲ†± ÃЈλp<>ß­kʙ㚆aç\X—˜3‹à4-×Ó•†Ð‚ÆÑ…PDbJ¹–Rx]:Î¥ë»Ý8:¢uYâºj9SŠ‘KqDàˆ±ä\röÞiiN軘Ӻ.¥qDœ’GÈ{ü‡Ý~绞Ü8}߉HJ±ÂiBDþ÷ù»¥¤Ÿ¿þüz9k”\!õ@ÔÇX–Ej=Žþ Ù=Ÿ>}R~3¬Ù¢™ê+«·æmš\a •.Ë‚»Ýn?î¼÷?ÿüó4MðO?ý„§Ó©”’Až?}4dYkxgš&ç\!Pø'¥t¾^.—Káʵ6Ÿp˽TAå÷ê;eÎóZ¶dÍTVçXÔET'í|>ë[‡½ ¼JƒO*³Y‰V‹Àù|Þà™-øuÁ×evÎqÊTÇ>rDôòò‚ˆaèµg)X/£‰¾ãaˆDôý÷ßçœSÎê hoeïýËËWß-AŸ«{²aùÌX1í\{ èÊU-h²ò0 jb½4kLÉF±:ùª:¡mQJ.(¾ªÐ\%3çœeo֪ɺÂÝn§§ Þ²úù áÎó¬V2#çRJE‰u²RðžsÑ Ñ¯k†ª¢;R Ó”àõÝm%åÓ-R`I¡”¢ÏôôakDÞûT²á1Ø\þšn/çÓËù—i‰è|š&ÝMÕø»Ýnš¦Ó鄈ÝÐë~ã¨`‰÷N»†ªTÔUßÇxRy`냲÷¾ï:(µ6GDÂÐi“fÞí÷ˆèû.ô],9§$.øÞ;Ôu],9 ÂóóóþùéË—/Ó—Ÿt×B¾#}h)E„m[gÀàˆˆEÖuݹ-·K—ÝæÍé:¤®ë$o½å¶wWÆÓƒQÚ-¥X=6×ÉÌâ½YõF¼F̤¶ÕÑÇéÚÙ­¨ÛãœÛï÷ˆèº T¾,Ëõz½\.»¾×¦­À…É{ÅœD¤ÈVO¨p¢ŠW±*j¼)AØnÝkŽÌ‡×Xë·ß~+5Z¨_Ôß단5Ë5¥þˆ%¬XœZ_Ðx šK¦¹SjFbmœÃMûÝ1‹”èq¨”!Œ]¯1 ÙB %ç U1lÇHDRj{e¾÷×2®kŸe;,5þUØ"U$åmÔ½I±I:%{û_ÿ§Ÿÿt§µD?t\(¯«ŒZÉ]×].—Ëå²ÛímwÔzÞïw—ËE÷Qc,ç½×±à]×iOÄRŠvéÕ›¨RRš¦I¶&“¢3!º†aèú>¦TrffA""AL¼a\B¸?>~þôõôZ@öû½w0;@mæ…È`LÂÚ]H´§sb¨,ožbTÞˆë*äú¾1¥µ\@$MÅ IDAT鯄‘Vý©.ª‡½q`JééxT9ÍÌ*§Upª²5µ¦_цSÖ„cå3@4!‰ÊLJ8oÁ¨ÝÙôìÔr¡ziîrŒQdÓ0[¢†÷úú*­ß‹‘ ¢)^£{£KßL“VÒ7ŸGE×$x»a«Mœ©ÿ¦yØ&ÑTiQŒI h¦¨Ò•2žÊ}ÅfK)»QJ)¹è4.ÔefÑÞjTØÙV›ò78½å"{ •)z¦úS}`­½ûåÕ˜¾'3³§.p¢\¸ä°··mÚFšTöÕ“Ð×0¦ýŠ™aÃ0h¨Wì½ïº^ņ¦|í8šRºÝn,2 ƒˆ,q£,œ…s}%Ü&Ë!8p ¨_<ŸÏ˲ìú!ç "Z·ªbPÛ1(Á!ÔöÁˆHÕÚ¶·mU·m%oÂ[/Í nÅÛÖ¿“™™¥¡­\3Âõ²xºFÒ·3³¢ª£4/¼”RrÝv½t„™ËºhÔ›ÓfLšõ+M쇈˜%7=µ42a´®RYÞ*";eÃôë÷øõ×_Õx³÷U~ æ2¹l&®Þ§$³Ñ·¥~ÑØÕ^ßlÚœ³JLÍDË[AãV!¡vµ©£œóõzM1 À²,+ç9Ç̪`sJÁyDìBØ^îu˜Æ!ös«õ3Zœ¥‚Ì«]L–Qí Áqµ›cÍ@D>ºÈ(™15t÷×uÕšÛ8©ÉrµÍÖª`ºî‹>2ç¼ßï•Âô¶*€´F®árÝÓËõº1­s,LÁ#bq]ÐZA%SS&д»- §ëå´N_ϧ”󒢯ˆÇÊ’RÊ}ïà.´›Ý–©€è‰´a‰‘™Ù¡sŽJQÓBjS½#ˆ¨î:Ÿ^…Ò¸Èõz }g©$¹ uê×5Þ §9(*§Mâ*§©=/"ò½sºN=WРw"2Ç5Æ8-s‰é¸Ûa-o×¥Úº}ßw}§ë7^Òå;µÀl0Ù:šnLhûÓhé#TÓk©DÆ6ÆKzÓ¥ÆfFÚX"g•Ë¾Žž§j4©[î½ÙRðïÞ”÷ã8*¡ayŒÔoA¦ÖÞ»lŠˆ€Ø.Ùôè¡évgû¦ò ]ÜvÇZ#kA†1³ ,?Oq™ìBȹìB¯–ý]AÕä]Ý&µ!uÓ».¨IcgÀ† Ýt=’sa7Œˆ¨C'××uÕÉ„X$ƈŽÈ;A¸Ü®Ì\¸èX¼­žÖªU¢™çy¹&9zœ„È¥¤5®ëšS‚7ÂÚš æ»À;TED˜¥”Sº\.º}×ièywN_J)Æò‡´?€¯E‰¶¿¹3k‘Žñ€y –èÏÚ_L¿¼é£†”ÒétÇq<ìC!õ» C)®f›ÑuCï«SÚzƒvRfòÙÂ\-5’Æn4ÝÎÖüc½•¢Ró›•m°¢ù¦cõÒ5÷• ¢zg…$Z5nv]ûhW«ZÒ<ŽcBÖ~j|o›b~ìf›@ÍÂswæ— °Ýé§m[Þx¹Ðtm†Æ=Ù^íMSSó ( qHË´%ø2Ûùéþj¹VEèæn6X[b¤`ïû^ãìó<¿¾¾^¯WÛ¸RJNE˜¾ï—‡aÈ\Öuu‚ã8"å‘?z•R„0ç¼æØu]úu^N¯¯}בlF¹Òwß÷ÕaÑ–D©`^×Õ…® !h™ò¼,šæº!ÎkÐÐ÷§ÓéÓ§O1Æëõª¸”š7&Ñõ”.•²—y6 nw_é@E›‘iJ‰ãÖN4ç|84‚kÂtæâû®ÃJv* s-áCDõ ÛxWu)¤=,=åÒ ²NÓ'z¦¦áKÍíl_J¯P¡ª_ÕjIBãA)]2ó2M–›j:PåˆZªT÷¦”6ºW¯XªY[jÛB[!”Â˲p)\?æ½wÕ¢ Läœ9å b”︥J[“Vfç·¤è½×Œ<ªÓL ˜í û³ñ³¿·~6ëñÿúþïÓé”r~:×uy>>):BÐJŸÛí¦)cúTÍWR%©)ç:ñ›sÚÖÔ…‚2s,YrqÌ9&í J]`æÈ…™µ7æõz}zzêC§uúRŠ'OðØÞmRj°Á2̼®éןǽه!„Ãa§Ö£ˆäMÞcã++"""Ó4©eEãÒ?™~0ÂåÆÍ®¶dE£ZmÝï`Sà(Ûp<%PpÚ~" “€wN›Û¶D/"j_ÇÝnw¹\4„.xÍÓÅPÅBM?´úöû½1!׆ÂJÊ6*:[‹Ñ¿4•æ-Šct»ý~]×.„¡ëSJy®Qb¨6›§Rʲ®)Ƽ'§54y‹&Lë»”ÆÐ°€=½Õ?zi?%Õvó]MÅy#0³*‘Îç çœ;ž‡awX ¬Kœ¦IË£½Vœä²=BÇb ":ÀÑû“ xïÅm¥Ï]×m¦£~Í 7u•(ÕReq•—ÚÀC;aÛaˆˆæòQÉ9gí–eãÕœs"ÌPJ‰*¢dc]®ÍK=‘6¨¢º¥Y—bØ#9§¹ñœÛlcÝSÕj ju©¨@+¥¤¶Ù|×” Â†*_’ìÛó6…&nCÖyƒ¨«ÚÐ8Ð@–ëŽË%﯃sßÉ„}kùZÓÈüù76çÈ>õ²P*Õ ¢’#×ÒgÛUûJË{v©¡NˆVU À‘žKû-Û.[4&U»6C/ˆ¨l#å~Fzc ê·LJJ3T§]9VÇÏÖc~š€ÎWCãŽR˜XLRÄ3pÎYl|š—H€¤£­c Á}²¡£DªU†¾ÏyCº®ÓØŽš4šh–k6¶J_XStÎiXÉ:Ù‰¨ë{•ôØŒÿFÄÂŒŽ‚ÖõGDSJÃ0t]G€"Òyßu]`NRAäjnmÎ7W4r]W­ ÞïTm95öº®Bˆ¨ë‚†žT¾ªÂÄêƒEjýøç4Tn'jšÄLh¬|}_çœd5êxëMºÅåœCDn &aÞØT¿îœÕ4ÀÆÄ¹I…—ÚOÑ$Wûƒ­¿åŸÖг­Ƭ25õæÒ•RŽÇcŠq^%’ãý §Ã]üÙ cÔ?©¡›k© T·"íV[D®Ôè‘"*²[ßò¡­A]Êó/ŠEsff-)a’‚9çTæLòCÜE¯-ê«{¢* DÈ{Î…A˜™ E •RŸó}"r€Ž\ç;ÎLK­È4[‚™‡C©¶þ0 ÚD ë†“’™+¥$EkÀ{ÄÈŠ×YêÉ4Œùã†Æ&”j½´2Lß]MâûzÀD°UóhdL¶1ojÕZaS§­qk6°©_#ùléÏÌ3Sö.XãÝfè zÃi¶°÷Õ†¼^¯ÓõæœKe]æy_;ëéb2+qkÏV'“§Iµôe•ǘô_ªr“Š `EAÀמnovàÍ>´â¦Ôb¥í—›¤Ý.m€€Õ9Ê" \X .ôDp› S´_9C¶»KcBáRÊ–P–¸d¹·ÄÖ3˜¦IÓAõ_¬šëõº™Ú¥P)Þ3nm7U2‰&© 3kOè" ,PØ;§‡Y@Ö¼é1æ˜J)IÞÔßXÊæ‹#0óét"¢X3*VÉÞ{ï»ÖôWêת<`N?׉p¨¶=®J%j®¿aE¨« £õ3JÙÈ›°Ù+"\¶Y zsÜ:®¢˜¯e§Å­Ÿ¦¶–…ÕHÑ®aZ´¥]t.ˆŸ-¸•­ª·Ë^á §Iõßs âåryyyÑ‘Úë4§‡ÃfØo›¹‘5ˆhWe©0 UpE÷ÙðÛ;ø¨pL¶ž°ÙÞû˜×–[Qk´a̬Ïî @¥¤»3ì=yíÎ̈\)É –ÖÖp D„`óÿu‘ž‰zÍÙí*^êÁQf^SDç óµ¥ò¢¦]ÊlשùU)¥à¶,™‡¸Ÿ>®é4Bpå²¥õÖ:W›”¾ c¾aB“ íF©ÕО”½û¶´›´7—:—W/·]´ñÔŽ’”Ù@`'úu]²ˆlÿB Àj¬[ôuj|Ãf‚÷1f[÷^õ­5Ì¥–6>"Ã8,…D\ý3aDTÏV*lcJ`I1 — …‘S:eô"æ˜bŒRØuÎÌÂVTøðADúaÐê²u"¤<¤h vÐF†áp8Œc¯ 5GÑ­miT^鸅-þùÀcµÖ*ÿk"; “1! ˆè~fáœ3°Ê2Vs”*`ü 5/|S Õ„V"Ó•cñ‹ˆu.2 P?ö(éï×­jüG¼_c¼ö_h”ª>EÇfô}*ÐJDøª1öà',5õG©íu19gßuoD’Th­µ\°&08$Ûi®M WJ¶¶[Zô¿Àö‘¢ÓѰÚðJÞõó¬ìw—\fCÞb[g ÂR¶I&‚PJÙàDFpÁ{¯j0Ôt[ŸáÂÚ¦rØÆ$Ûk×q§Rƒàêú Á-k>Åècá¾ëˆhNÙ!ßr/Œ™Y÷F«xÉ9ÛºÂý~_RÖQ›êÔi3BµWÇ#9¸\.ª9mëí$°IhÆA£ZÍ÷£Á3ÄØV»Ñ4mÛ ÛÉä’sÖºgÕ„YçõÒ¶'¢(Mºœ>Ѭ²º±œR4£@…ˆeik TÍÉn…ßÒ`–Åæjbw®ý­ÛoÑcÌîc¨lO[ÄhÝõCAÛ8çH“T¥¨µMˆË²šþPÀLЭ~ÃáíƒZ "ƒ`BkÌ›—Õý4M 0¾s,è›nlS)…\§)Ì9%ï=êh+VØC˜Ñm£}êh-`"BGzâÎ9 |¼­ÂP-”–ˆñÑÀk/ ¶Dµ +|¥ŽˆZj÷·£×%¹Zz ïR¬°‰òÙžlš£ ðˆ*ée.´ý PtÌõ ‘ÂÅvXš¼ˆmUMûèÔÜW¨††©k»ƒúM:ÐNSmr5’©v4/Vohw¨QT„ÌEéÁ{ßù€ˆP«âœëú>„¥Ì󼬫šIlŪBí/¡ 3½Êzòj%¶ßj9°Í¸ÝnXwTVªƒÞ’&Ñ=}äîl óºPÙ åm³oÍàQ†×S/›™ðX禫BÄmÚTSc›c¼¤?ÛÇÚûHÅß[æ´½É:ÇtÇ÷¬eÒþjtÖR¶}¾õ õ7–Ï MV´­V§@µ¥í*¹ï«Ú¼8$sËõ7¥ñߨ ÿ»÷6dË3†¼`ûæ¶d…p¿¹Ñ­}¬Ô4#¨, ‡¥ùt¥6k3±Ñg-(¥(š Ÿsö5zg{íך¹ ¢Ö¼lÙt‰™ñq5Ÿ°¡°,â›È˜þV=Ð ˜AiðÍ"°ú?Ò´=ÆêßkßbBDGèˆ7³RÉ! Ì\¤l©-Z0Öò¼=×VhGµ=¤€.êëØs@X€4ãA#"ª5lcy æësmȹ½‹€ñ’1¡•Û¹šv·‘ÊÖ¨:­}X Í^Ç$š=ÚX×6¤Ô^—ö­–·íóo˜Ð¶¤Ûe1ýPi°x¦r‚Æ¥–°´'ÂV©¬V7)¬í€·ºà‡<µö@¹úðp—þ„ˆ„wMû†ì•m{‹ð 6L¸ iUÉ›mÚàjØ Ÿ{úThðX{Ü{ú€mMÑyzº RJ‰DçÀ² { ¬eÜòÚ° ¦µoM1ˆmTÔÈ$ŠÑ"*P©8­²:Ö²k3‡ ÊWj2$«ô4aØduµÔÓ˜‘š7úT/½›¾Q‡ƒæßH Khf†9fF»wmS™Pª8í.§¸—¾¯ÞÄ¿•›äìk±¥Fí5á̔Ƶ³—2t¾e§7ñ†äÞÐORÅ¥íóºE/ÛÏëliku.Jß÷Ú|m {lˆÌ†å""9ÔÜ,Ûg©ºß Ylϱ]Œ?Fk5ûÊ^û| ÕàFe¯ÙŠ'{p®¥Ì"¢ÕfÐ"š5á½–³ÛøÑp¸3¡æml½7Ú¶ei†—Ê€BwÅïtŽþëjÂ3«]X¡|“Ùvõ u\Ž¢²êhfÔiÒ ¢¦¤ZÍ­È9g-eD”Ú›ïfÆÛ¤ÁVd¡Ê:a¨¥ýwd[k–-`åh¼¼¼‹Z†þbÑ3S7›`ÔXY.(ÒÕŒiÜžRŠUup¡éÇeõÞû°­¯QKF¨)Ä , Þá;ˆUDXžšôKݨVXØç ¨ÃêÚAµP°º£÷Ù·9!‘Ä ‚„¾ NççpVó›TUÈ[;&@4NÑkÜ”X¶¸¨’’ëBÐtóu]sÙª3kbŠšÄªŒA ôéã0héÔ °û)ä,NhN+vÕ­Pí-"º’V(—R@úq]WaöΑe]·”Žã³¹::ã8§¸®ë×ÍûÔ+6ûüñÃ6^GWHh¤þ!¶ï«ÇvWËb½§‰m\Ál~—9]&ѨÆKug¨ ù·ÀÿŸË@ m‘ïÚ„au5±ö•ÑOÚŒåÑ2TÙaÖ²¾…«…—¥ ˜UÒÒ€Ýj»[cÛå@M”WQe(¥¾Wœ˜[’¥U¡f}`“4g›ðÆ:‘ò¾Æ²3ˆ ¦Í¬ìÉ[‡Uã"Ú”œsŽ:&aÖ;jé]+•±­5ë{ÛüÚÒ¯&näÕž+6MM zžw¿E€™5'«*¬{úoº.æPµ4÷†Pl"¢ò_»îmÒ='s‰ s! s–—êMŽ)%­[ ÿzÌ”ªŒ§·ÄGx¦å@¨êÅÐW½C ›yßr©"«ð[ך³Ë Ë»Œ'2|žØ^íMìd ²‡ÆjÏ×jé‰THƒßõDüóz‡Vèƒl7ZÜAïIï¾bË~ÿƒé4¬Ù§vÿ÷¢Ad«;k×ÉŠä·4›™ÕçêºÎÛZUx¢–0ªo­a5lîÆw• ï*— Á*ÇkŽˆq])÷†°øØ3§¥h¬©–cïFÔöTG…-Ë’âba}=`T7ü­¤[Ù¦} EÄn©*ó<¿¼¼\¯×9EfV®CG)&1]¯W;6mH£€DpžÃ½UÌvÒövP¸¥æ7 ª¸±.,ô˜NiV¥)(üOÓ¿I|öƒ4EÃÆovQEkÿ#DfmÀ"Ÿ¾ö&¶§è%ÀU{Rí‚ßHj³=#ÐTå·ßmß½ýT¹`~»‚ †f¿ßFr."*‘6 íQ“kþOðA{j[ôb+¡Í|="½Å4Mò\ ÍÙsΛ´h·rÓ“ïäIÁRv42iEÐØÀ­÷ŽZl©j |¯_1ßמ[š¬¦šÈ#2R‘@áÍ‘èã8®ëª ‹"—‚sž¼ó]`Ø [Ô -9[`Ó”˜Úûýþz½™€ßöÞÂýö³s*;™H¶gQèe9+ˆ³€Jp\~“=à‘^©bE-q¿çm¬¦P{«–èõáÑrƒ:Š´]g±(×#öŽM.¨ÝÜñF³q\ÙbÊoò¶¯ù†QÛSG¶±Ë½IJ±ïVçâÍ:¥¹Þp;TÌ5$£–‹W:ûáz½jrƒ–)˜XÍú-­a¼{~€R?ƒ‘vÈŦQBݬ-ÅÌ|6“ŽTãŠ÷}a麮«‰Â[™ "êÐ/¿.:9Ì”¡öæ­ÿ †ºÚq™QjwúªfÉ“sNý}Ør ´z@ðA6—RR)[oÝNËš™a¬ˆ nƒÊ\çƒZ’Ф¼@Âýät“·jëÇÈa©) Jöu"ºŸºIë÷2û ÁµšÄ„æ"Ó§ p5|M¾§Kƒšù1¶Q÷öždc¬·hµ ?zÈÍâ7,µ%<¤w¦áºöÃFfÒÄ!m·ÛGsÓû¹Ôúl`óüt¯**a8¢œ¼hÛâRSásÎ[§¯#ãKÓ'¥„(6ɉù¶‚­E×C1Ñ2~Û‘ÆÊÒ‹ù^9Ò K“ÒZõeZ9'ªjœs.ßÇ'è+õ#ƒõÚt‘<”Ü)’jŒK19Ûz¬ }ŽcN¥ŸƒKqÍ\D TBEÆ ç,IDbm™eGÞê1wGÎ2¼maú-#khÄ™ æRóÝ¥¶É‚–áÿ.l ¹7ß²µµ²À`•÷÷©DÂw³åñV›(¬Š¥u=Z&ùç/"`)¾µ…GëÅ`ÍæW…ÌÌÔdäB£9áQ5µÿÛò¡Qõ›Ë˜Þ©>+Öß›îm)¼M£AZ¬_H)q.–ã§-·Öua- ‹12o` ’nº«Ij)%B"Õ´m­{Áo¨‡j©›ê:nñqé hIDAT(–eYÊn§½Þ¶íaæ_ý5„°ÄU5ªK)›Æ0dB爫¶Œ÷pmÂ'ÜõÊŸ-æ[Æ"öÞ“÷K\­ÙөȾvþuõ}s½R%bWs”5Œ»m9ý ˜¨r›¶–\;¦H÷Pç÷ÐÜ?“ñ›6VY¨]Û  {3GÍ…Kͤۖ ߬Õø+£—«W¬m ÞpEûá–¦ ©2?M©B+Z±MÙ‰1ZœÓHîͽQXAQx–l{ÍdØÖùNlaE‰íîwúpŽ‚F6 Áý/ÿú_’¦Vƒ”R2aÎ)çÄ ¹d$ì‡^S)@DàCÈ%¿~}UïQí.GÉ;Ï¥¬ó"…ƒ÷ 2Ýnä|©]R,ˆyG!VB ž<":ìºà:ÏŠ )Øö] Béˆ:çjë¤fãxÆžœ¦K€C HžÐ °w¼#‚¢i„cNB(Z¨Ê…sŒË´°p*$èÉ9$tä ócÒ MD\ýX3)øÙdy)D4ô½#Úãwß}7 C×o¡B%/%;í•´±zµërÎÞm-®•4©^­Èo5ŒŽ»27UiÃÜóÒ7béÈy@ÍbgDdBAt!0@‘­ÛŠ}W ;rÞ9ï 3ˆhÌM $Ò~€k¡Ö¼ÒvÒ(O¥‡D)䇡÷D™KŒ1rÎ\˜=ùàˆPH¡°#,¥PEð•2ôãAûVûGª°fÙ> "¨ ,õ[ß ýºî5ˆh̼”µIqÒ¥€ª¼õ}«Ü$ož=pÙæI@¤JSÜeƆڸÚVHj5€íæÖM¬Ê¼P§jåÆŠÁæúmYÝÐl{ò`êh°Q f=€þPm]FëV–’¥‘‚wbj¬…*@)¿Y°U@ï=Ý{ÀÝùöîy?ÚôRï[,AãþÁÀ¨[­ÔïoÞK}qW»›™¡Õn½p{ÆÝn ¥úŸJaÎ9ín¬T›K¹Ýn”c+ìì†oœŸR'ϼ9 û4«%)^W3q[¾57DšŽÀBä ³Ôƒˆ.†V¹¿¿{—”u?ññ²si-Oû°%`› ΂ ÛLUqJܤªU6I![õ2´…¦öÖØ -!ÙÂè¼ìÞÕš(±ÇÆÖ5>²7â¦õÉû˧’3"BÂE&ruñ5î×JYû&"j3#SªØ©þÒN+7ýsÚgs3Gòý_EëÇênmÉß9Bû !Li9ÙD—‘»ˆH&‰„: ·%2[6VOŹaw¨c!DmäÉÙqv]71ç•0‘gæWŽ‹)mxÔWÜz˦-émoR½Zˆ¯=¯ü˜}a„¨ÝÖRµ}‘ÈÙ-hKê¸[¢‘Õš}î7ߪHMÍè"#D½««/Ør4•ûbW$ cÉ@!€v0rM4e» T&l¡Wߌı­°«u¶MCÂy³Ÿ’ï?uý:©Ö{m™kß""‚† ïù(€H°å^oGŽàœÓ4³ÑîKDMË&åL®uƒ¾ö¥¯É7oxì´¿a”RÕ*FPàç.±*)¢bõÁ“I>hÐÛMxT¿ØøÍ›/Ô<»aëo­ºkžgçâØèa#2WÛJýI5,f»ª.€Mø¸0¾ÅÙ!Y“o#Ê74‰/í"Û·Öh,ÞV¼‚¶9ís±f”Ø[¯oªI‚í{{„T }#ã@WS¤iG …Äyñ–ÓB"‚÷›‹&šâC¡Ý®V³µ<Ù~àn ¿û€ÞM+Ü±Ñ ¶½Ddºô»®Ó¤´÷—íý„€œ4f«I”MÚUbå ”‡´7ŽÍ(/µ¦ÁÎÆ˜+¤ûæ°¡!Ä7¿wÎõ7Æ­?·IýÖ'ÜfµQÍ}›êt±ö$* sÁÚ¼C± hìXól5ÜG *øFÏ”¦mi¶LyôH޲.’K¦­O¶ÆTµc€v1"Gø­iZ;pjl­ó[ö¼mòòzC­!Ъt1bhÍÆ¢òö»Æw£WoÊ¢òXaÕöˆM=Þ×&܉í¤'ÀFó3€¬`Ì9sÖ°d16Öñf @´®šühÌÐî­½os¬÷pãL¾·™õ[ŽÊÇ¡²´Æ®ŠÜÁmlò ß_¼®BÍ»ûvo¢A¬òcu,?æø`« Íæ½c¿äíïï|[ãz*€pwô¨B[W‚Dz:yç#= &Ììš—R8ËÖ\ê¼{ªM+ïÈM+&ms¹‚ˆHˆŽéºNªâ@цH›´rNCÃ0pÅéÍÍ~n­D#&³BåÑü†F(ÈcƆ¶9‚Æ„ÑÏo^Ö#|/",žÄÌ%1èÓ;Ÿ7›ÌÌ*Á·ôýºª÷E¤vÐ\j»—v‘5 ÔÖi\Wûå3¯ëŠ:eÔÔ†i,ºNeqø`[¶íƒnxü«)üVí¿gBÀß2/¥¦¯nž…å—¿¡s»¶ w"ç– ©ÎUd2³Î£7ä)Æè|0©fÂÕd3Ôá&€ˆ–Û õ¤[öv»€ŽˆÃšg+7"€¦÷ŒÅërm뽯-<¥}5|—c¯Ì•–ð‡Ö™úúÀ‚µÙ-3«Rfz¨„²¼-{ž¸Fö-¦Òª£zР€«9¥nÉ£=Mà­Û!çˆ(–;ólt¯È¹&dßÊbxWz¢ÏÁƒÔ_i#ì÷WËÀzéÏOOO»ÝN›üŠˆÎ0´3}ýð7@ߟCeIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/caution.png0000644000000000000000000000234211722777314020722 0ustar rootroot‰PNG  IHDRשÍÊPLTE!!11BBZZcckkss{{„„„„sŒŒŒŒsŒŒŒ””””s””{œœœœsœœ{œœ”œœœ¥¥¥¥c¥¥œ¥¥¥µµµµZµµcµµµ½½½½cÎÎÎÎÎÖÖÖÖÎÖÖÖÞÞÞÞ1ÞÞ9ÞÞBçççç1çç9çççïïïïï÷÷÷÷÷÷÷÷1÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_§ä\bKGDˆHñIDATxÚu’ÛŽ‚@ †ñÀ®bÌ®ÊIc¹APÛ`bxÿ³sBEíU§_çïOh¿<Îô`Ó'€á1û§wpŽÜä õW–Èt:%suá&³w,ÀHêéȯøf Øþ“Èü‚—²59 ævÀ:€Ç\^ F;`çªHãJ'Ê8‰ƒ71€›íZJ²Æ+ïçb²2B‘¢8·ÀŸ›¤Q§$×wŠéRKÕ ´v)ÎnR˜Áp¯t¤ß} Ì²ŽÅîéŸVb¢Tšz·Dç ±·vã@Ïí=”rPºþ—§¥duõ—Ÿvz{Nël;—a*CtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignaturec70387830aa4ecd5a4a32a852283b3d6øP¶tEXtPage24x24+0+0r[ 1IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/important.png0000644000000000000000000000132211722777314021272 0ustar rootroot‰PNG  IHDRשÍÊäPLTE)))999BB1ZZ)ccBBBRRRkkBccRssRccckkk{{{ŒŒŒŒ9½½­­!­­9œœZŒŒ{œœcœœ{µµJµµR½½Z¥¥c­­k­­{ÞÞÖÖÞÞ!ÞÞ1ÞÞ9ççïïïïÿÿÿÿÿÿçç)çç1ïï1ÿÿ!ÆÆZÖÖRÎÎsÖÖcÖÖkïïBççcçç{„„„ŒŒŒ”””¥¥„­­Œ¥¥”¥¥œ½½„½½œ¥¥¥­­¥­­­µµµ½½½ÆÆÆÎÎÎÖÖÖÞÞÞçççïïï÷÷÷ÿÿÿ­ÒÃÞbKGDCgÐ bIDATxÚm’ SÂ0 Ç3Eñ1•¡ÀÔÉKÜPT”•‰F'µûþßÇ®Qïö¿ë]’_iÈK±B¥&ºF‚(å6àßñrúðcºŒ/‘Ñ´…\NÞÃh£°›* â2pã¹=…:©ôJí÷v•?°•¾ÿ 6Ôï| @}÷`ÿ^Û>ƒ¯µs P¿ÕvB¡É¨é@Ãd6"èo;g•`PsÎ+ÁÝÞÖs%˜Çǯ%@ÈS{4ñܾ•Už-µs"þ1чßÄ?øjª<`g ­ñeZÔ* Ô+½ƒÃ¦Ú2Ã_Yvì*ÿÁ¤è•lv¬~Œg Z¶[s“ôY[Ãa; =ùí/öoJĘ!¤f€þcl¯RmÌRCtEXtSoftware@(#)ImageMagick 4.2.8 99/08/01 cristy@mystic.es.dupont.com‘º!¸*tEXtSignaturec3ecc1fc5135d1e959695e569d213122riðIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebrafctngb02.png0000644000000000000000000002737511722777314023424 0ustar rootroot‰PNG  IHDR««<ƒ3ÅtRNS€›+N IDATxœì½mv$G®,hxD’%Ý™YÕ,iÖýî•Td†fó‘$Õ³‚9çñtŸV—H&ÂŽ3 øß_ÿûëÿ?_€ÿ L’ HÆ`ˆ‘y¾¿?Îóñx?‘ 2ƒD p~Û|0ìvËjdk«eˆ1Ä4¬®çóyuË‘y¬$ÉÌŒÿÀúþ, 0I‚aØ$ rd$IâÛDóÇ ¼~ïüwÛö|‹m[¶-ßßß]U[í´ ‘¤¤ÄËVz~þ¶ €í†HÃ`Ä—e$cæ6‡/«ÆÊoëýe®ºÛ¶¦_¶Á0<ÛwuË4Ô&HU·­¸µ "x=?`š‘ßæFÌA“ßgiÞÿôÓTÁ†!Y²l IšüñMó#†jï½»[&ç…Ìcù‡­¯Ó¡ηÁ–d0¬#bŒ— ÄŠãëáq8úljÚlª[€ƒ6øýs÷É~;†d™däZ‘oïÛúúšqŸµç<ž –ºI™œ»Ä—¥÷ùúU†Ýò\$¹[‚$ï×Î!Ûâír²mD†‘Ç‘lþ@‹p«¢ªóNïŒÈ•úy–'úÎa·ËB–•wn›ciuõØ ‘ˆ€Ýí¯NVïrÌ-ž8’¶=ñÎ1N0vØV«bb£Af¦î“4|¿”o§òÜ-SäT0Tu{W—ªwp“™I­IFAu×.óç¹Îë‹yJ[ ##Ë\²žš*ld®%ä‡Å˜jK*˘w¸¦«åÚUÝ{oƒ˜™óa îìmuUuñÃ_É‚â¦Í /omT£+3’̈®ªj0n+è¯t„ÛXý(2×üI»éj«kWW=÷•b1&¨3"#É)»«ìøîT5YD2 Û[[Äw2ãŠU;ˆ¯Ré¾QðWxíj K*¨7l`÷T]µ·Çª0ã[ßµ&¤®.1ÿek¯rE² †pùñb‡Ü]ݹu§Šo['-Y6lBMm»¶ ºÛè iÕBÐPD&råŠÌ°dë.âÇ^IxÙê0¬–#¶S] Û±ö['8¿œõ.Dï+˜PàVÙû²èÔÝݵ[ ÇœÉ6k+#‚¯bÉÀp¾û‚1k*MÜ×¶JrLnÙ™ yTµcJÉyXüøf„í [êi 8µŠ^nbÁÆZœ)cJ§¯JÅÿ‘·ðÊFS°Ì#ùë¿¡¦áÌHfFJ÷+þ.}&Ü%¿m›)OÐj÷.›a›`#›œÒFd|ÕD6ÜÝj}µ€w|Uœ’g’`Ë‚Ý5þ;MƒM#ÂàëE7#ÿŸÆÐ C°ÀV—´71·‰‘T0,uI "(s-»{¢Äþy®†¤nõí[iK-Ë÷¯øøw ÿzßwóE¿j™y¶;¼¨ª[Ú}qßóÛV[Ý}Wæ°&ä*ÙúÙM3È;îv_=Ïwƒx—¥[sIuUß—–4rÒ´ï+¦6""×zœg®•«áûö•úGÞšžôŽ3@ æî²/¯$É)2#uòn»ï6ü`ÕÒƺ¶ì~}BÚ IÚUÝÝ ‚„,7NW]Ðóù|>·ºÅŸ},¾.À` “6iƒm—_}à4my_ÖºãÕƒßÎ@߯H²Teìº6àÒXN«’ªz¼•1õ:ï{âºv÷õù¼vµ^íΫçöëýN$E.À¤§ú¤¿"VHZbÚRÞž¬ñ€ªî’kwÁU=—sz 3ªïùU«ÔQÝs!¯çÕu=?¯]¯Ûò_íiŒ Òd &B÷çËá$h{ŠÒj´*"‚ù ¥ÓII}íVµ.Iv•d·›-¶ªo/™ó™7Û¬Š(9ûz>«®çç®¶íøá`¾Ê•`zr.);¦µc|ûê8?:“™a¦hš(ÝõÜÝ]½m@%ÙRÙÚ6JÂ}ãL¤ïëZEýùñ¬}]ÏjMäøq®i‚©ˆ  :l¡ZÆO#µ»‰µ"—t8•¦ÕRïýÜê®.PÛ‚$t ¥.dû¹« Ý&`§ëããÚuíÝSQ(~œë}m¶ÍD„ 9Ýÿ6tvÑL¢ÅÕ+ÛA©¥½¯Ï¶Uj iš£É;ªêFÃþ|îV(‹h+R°÷ÇgÝm"ü*îž[s§#_øà}Éé±ïvmú.4Pµ:"V0ÀV«÷¾ž¢17ÇRh‰V«lï¢mï’Ü÷©ª­ˆ¨³÷çgu]—@2¾ó–²yU¢Œ4c‚Ït^?ÀŸiâêÊ¥ŒâØZ­«®­)r"PÈWØ-jM¹ý‚¢º©WEðz«~>UÚ{ªãÅYw Bð† t—ˆëã†- 0 GGwf#c4ª«z×.d‘Bwl½R3j7EH|á 2ÔéV¤­k»\}ŸÖaïÚÅ&Áe‚¯÷êE=È™¹‚n›pL¬Yi ¾•쪪Þ*ÄB,*È t†ºJînˆñjÃÉVË.UÛÝ_&ÈjûÀøæ 9½cНs€4"òî>GÎh‘ÁAÛºTVd0‚êª}ÝéfPNM¿¬‚ÚiÑDí¢‘Ìéâ$µ~ÖYv0Ø_°ÿ]HÝ€iDætm¯œ¾]l¹¦^ÇŠ)Ol©÷vðîˆ<®¿ymijñ¥¦ƒv/ ÝePw}û@K1n|wæ¶T¹[£$-ëtW×O5,ÆÍ2€Ö@ª­û³qCš1ù…¾bɬ¹àÀV°9¾d‰rUë…â«¿¹ês©w{ÞŠƒ)@BBãŸ8¡_¿eÜ]¾þÛùCDÆô/"¨©xºùÊKsx™a«-í=<Ð- ßhôóUm+\r¢)ZîFwU¿*ú–ñ" ¬V{Z¢8aˆ¼qþHw¹/0#H3XhQªó0N¾ôen—Ÿ#ÉJ6rG7»Ýš°¢þakèU*AÛ¯ÿ&L8=q ”“ú".¤nù>+2˜ë\kG- ÈÁ < ë|^ Û}‹Õ@Ɉù(òNüì·À@ÄŠåŠD xO6ÁxÑeDd’–ééÐî÷œ˜–ëX+“„ÚfF.k"Q÷„Ùï^z~E©¥†Û®@RXË’k×ö´ߨÛPœ> öÝS9,¿šhYAD®¤Äéín$Uˆ)€dÄ]ˆ£ ¹ŽÖvÐw ÂÝ?ÞAqÚˆé&Ý—ÂÝLH b÷ónÝ®>¨B4Э¾ñÖi"rÐø ˆ 4ðI{®3s­9Qj*‰|¤õ¤+}!_},^!^áÈp¸;IB‘Gþ«àWö²Œû Ù¯– F0c¼˜ßøê 9M@[ëÈã8Ž… H‹Áê£"&À¿Þ €Ì°c2(Z^óEü¸[dŽ&bÔÂ+Úwþ•È&¥;MwÝ- È•çqäqë06‘ÇZG$Rënþñ¢ŠïËED¡az`Îõ”~ð†€‘1ïTû¦‰oÊ;"Ö‹ï{F’±îo æŠc­»i\`içñ~F`ïŒñyâÖM´²M伡jøUÒŒ¼]àö×FAYáhƒ/Ú"xûi¼HÊaþ&ÙÂd0W28¹vj¡Èužç#BX1/ÿu—_çpÇÆ› “íÕ¡¤c¾Uªï~+¹‚¹2ÁºólÂB(Ìœ‘kEDæ r7®é#7EX~u¸Gfœóq$╟_¦ÞåÜ mê'l)""dF¬@/Åë™^ñ5¹îøÊ¯àû…`Df®dĤ~‘vDÀd¬©Ñ%ªí` ¤ÕÁŸî辈é9»»€yE0€mjÕ.õ7Ft䑱"¯¾d4÷D³I#¥äé#¿le€´D·‘4»;Šd]#`˜T`€dBÓúªUÝe™ÈVÅ&Ä®ÒÕøÑÇsÝïâ²4(¿Á- æi¸­n€`ޝ{¸äÔ*˜¼®ç®»Æ¾¹t“î[2ñÂ{Gq_\HîçÖ%ÿÐeÄ:V’Tw#¦Á &ˆaõpÁ&͈yŸ_t]2SpEKÄóããÚÕí— ÝòFÄý:(Àˆ©I¯gÕÕÝë§ ’r5Hd[wD ¶ P–ïG á3§ß¼¹žÛE^iânb§zuš@¦ûʼnèŽñš’T°zïª.ýÄà#I¤}ÙŒhtd[îù6»MDÐq–qSþ&ÅÜ·a‘&aÑR¹2ÂÏÌöÈ&0e_‰éfs-UmÀfWƒqã]ß|©ùß1ºk_ƒ—…f·U+05–¿˜É-@´mÝMt×q¬t âó¹çŸ*"×:ìYɸ[½!*åÕ™h „ˆãª¶†U7êÔpïëy=¯«¾‰Ë‚«kþ$î"Tú‚3I‹Œ`®œ]Ÿ×†ô%‹adBT®Ê¥\âÀ’›°ËTƒu䢼?ô[€Å’)H²j_ûyUé%Öz{ûãýŒ#k×ç·@Úûùñqý®pðüõç=‚»”Ï "º;r¹Ö±ævµºK9ÀãXÇÊ ,wW×®º…©‚{`M@á[[Õò›2"y, «xÄzüùç¯_™Gö®ß?â+ƒH©¯ëóóãw;#×ãÿú?þ¯·ågíX™ÝV¯ƒëXÉHÒäu(™ë<ÏóHZ×~~\×µ«šsKP„ÑŒ¨i©·jïªëªþ;ÆZãxüñçû{p±ë‡¿|*èz~~~*À<o¿~½¿Î+ÚBE¦¤^+#)FnɨÑì¾®ëóÚÏ*uŠÆÐYf ªg{Ž~×Uµ?w›ÞÖ‘@ä:xüz;ï㤂Z?ôYÆÍ¾Ü¿¥ë8Ï·Çã42±ŠìVEqdò¾P9Ö”ð"7Qu}îk?«¥d ¸…pxúµ ÂTYÝU»A»»—´r­ãí×Û±Îs^_øGÞõo°Û¦ÉÌuœç:·^Ò &á›ßÂ]5%ài'«Ëv]Ïk_7=5Å&1RZ’DÒ1 åW"X 0yÇy¾¿¿ëX\ðõþ_o xX?€@D$`¹j ß]MŒ©R ‘áÕ~ܲFwGÖ©k_ÏÏëFç—ƒ F¥E1g38Ïz¨±ïïçÛÛûÛ™‘lÜ¥}מô ØüBðº»öõ|>¯rެ`n¹ÛÚ¨6Õµ3e‚#e¾ž—ÀŽ ‡Ï£Ã7F:su—V»‰`æD½÷··_ïg˜m¹j·ü³æ·1râ²ÕU‚».îëóãóYòë ‚»äê›kÈ)u×HöÞûÚÏKŒÎ>˜Vú–ƒÜ™j>6˜yœï¿þü¯_¿ÞÞÞÎd7P½{Wïñ0Àuž×Yû84@ÕõüÝ}í®§@y—øèÚð%öŒ`ˆù‘ÿLTíëù)æZgdÆ F¦U5ˆ50§§cäq<ïüùþñþvž‹’öõÜϺ®]×s…à:ÖqËûz~PÕÏÏ«‘l’”Û–kPŠ~©VÆ:Ö:òL@î‹®ÛÖéW¡Ø­†Y ôÞ5@¢žëXªçÕ¸¡¨¶JRïnCJCžH¹î¯`»®ëóCÌCq‘¹"ÔC`”""ÙŽÅH'šçùx¼¿+Ñ—¬ë÷?Ÿ¿ÿÙWï®>@bdàênu‡ã¹°Ÿ¹Âªr…怘®nr)2WyœçqžçqD”¯DïÏߟb¶WÛS ô¾vIÞÎ ZÈŒ¤\ Îã½QKÝ×Ç?¿ŸÿüýûùtÕ·­ "%Õ¾®çµb,VÆ «›|d­ áÆ. tw•¸Ò'bóíqÇâÞÖ¾®KL䮪J}=¯«,oe0ˆÁt)7èóxãLØÕW]¿ÿþý×_ÏÏñ[i"nUä~^%ŸŽˆ PÈe7ÂD·ÔBµÁ÷¾6Îlœˆ™ˆ€»êº>>>ž—é¨î½VHçó¹raðýˆ`$d3yžõXki«öõüøýÏïß×Õ?gLÒ#b¸õd]N¾WØ à†•P=ŸÏËg6ß4Ý@k_ÏçççÇóÚÞB´ÏkWAª „è8 äŠÇùX'#ÂÕýÜÏççs"êç|Áû6bÀ†¯là sdS33¤ÑÞ ×ÕÕÎ8ê¡ebÔÀ×çõÜ5¤ÊÝІ÷®–»„+dx¬“çy€ت}]U6“Ko[OZlUu諭5仃™ 1RJÑj£»«ÀH·,5±kWËŒ\G4ÃóQ»)©*\Œðµ·=ôLd¬<Ã$2Žã\±Ž•©»¯k$=füÔeDbïëzîk7  "ãKŒH£¿9©G› ¨«jïškgÕu=ŸŸ×ó¨î® ›U#¾™Çq¼o 8x‰È°ÝÒÞ}ýþýñqÕ®üÐæ€KVÕ¾®Ý·rà·‡öÕŒaà+X™Ù(î}=¯kE]F=ÿúëï¿|^ƒæ](ÛËZ‰àñx{œ¿ïi‡\I;ؼëº>ÿþçãóc?wI~9æØãi=x_Däœ|éU8÷†å–üùñöñûLÒÕ×ó¯ÿùŸ¿ÿùýÜ=„a«5 HrïüñþöÇû[h l’¡4íÞÏëùùÜÏš •þö×w©ákÊй›±ÆÖœœ+»‡í%ЫÁ#ÜÝùùûqT]ìçÇ_ÿë¿ÿúçc“m5Qž1£Q“¾½ÿúóÏ_ÿõö`m«­Ä ÜQ.¢\ûóŸß×¾Ô=ÂÜï»%uß`ÍHÃÌ×û@HvÕ!28bù×óóã8´Ïd=ÿõßÿó×ï絜”ì†"ȈÀÈÔ¹FÐ ÅTlÍ%/Z»žŸŸUp;ú§ nõ"æ!¿ªÉÌX+^’šo]2iˆên[e|¬#¢÷#Q×ÇÇçµkðFÀV“·tpôD×®}e¦Jh÷4ûúü篿ÿúûŸßW7Ñá‡^ûVjh„z y¿ËÞ#bð—ñ¶õƵ«ÄÒ—Äç†!=5¶ºkR$ 9×;7 ¨ÚÏ̶jpãh!×ãq>Ë’¶º•™t×¾XA£¯Þu©Jûùùû÷çUÕ&ÞúJ²·¿šuí]/ÎØž¡Ò5”ôH<ºÔmy}AŒ DÄM/Ø+F%7Ê:®õööx{;¬î«ª*Hf¬¤®¤ŽÜ]»¶JPëúüüçãóª{:)@*ßÑßaúãzV 9x¶ŽÆ\CBVI–ÓC ¦X̤7¼±…;ˆ®õx{;íîçÞ»·´*誽·ºÝÕ×ççïÏ«$0¦dDðø²õ¦Ÿ×U»{´-aÞJ&IµÕ}mɾ‡yc&–ûZɉv$“Ì 3×ÛûÛÛÛawWU4Md®àðÞ]u]ÛÝÖî«®çµK°Ä"ˆXü>×KöUU=²¹nÍ\eÌî]z‰¥F(Ãy³Ü §’ÐL‹ŽW¯øöëñx¤éÕ†,#Çy$ÜÁš­®«ž×ççU¥6—ƒ‹¤þå¯ÕETí;²Tî°`…íõ.÷T6“† OÀ¨lô¾r­ªÌX‚#ÊX+p×ðƒw A¸Ü²k×ðiõ¼žuM8Úk2SáñÕMf÷Kîz«RØÂ=>Ú½KãÈÖåq¸Ž]ðÖlæ{y+úl«! «ªn¹&gË4Ž4ó×sï[Ó÷¢0Àdà_³çSäÎðKßÓ„×\çdÁ[ÜG®óXçã¡®«zÅ}­º’™7·l±+ܘ©¡!cý¼• ÖÝáy®ØÞ»4:¿dþYgÝg7HýŽE·ƒf&À±°Ê§v^‹J_»j´=9Ód&F÷0{{̘³œê<¥QñAsñ@žs}ׯ‡lBªë9lpÜZ¬Ú›+ÈÈó|çy«œ§¶­ç®ëy=ŸU!çÚ+â¥{7ôˆÄj©++Fà7›ï逗r×îJ8ó|¼óxœçúÖ>Ƭýa¬‡ìz>»9u+cE"r­ã<2•˜AgfïªÝêêfWT·@ær„,ªg]€·zÅÊÉðtõ×< N^±Ž·Çñ`»¿ªIDATþ+Çqþè·ö¾JB¬õöù(Í ùÌEŒ /#Žã<Ž„{ tƒÃRIìbtuKšÍ/±¿(9ØY™ ÆBF¼4¦¾1»Ñð]!½ÿñë|<ŽãçL¿J=c”ã,ìL«'œäÊ•ñ¶Îó¯]Ð1à‚güðØKÝ·“@÷f6¼õñR¾Œ Ù^ÉÌUm 7ȦzÿÓ?Îuë^Ý]ë8ÍÐÑ(¯VŠ<Ö:˜±N2A¸ ›*éúøç÷Çóy•ºï^˜¹ŠÌê ÜSPÌÀ(—ùêé‘–åŠn3ªë’ÑÛÖEuýýmë–'!€XgÅÚh0“±„ä:éÌ霠Ң»êùy=¯ëYmƒÓçï½+Md§‰Ž°ïrÙ0"#×=‰„Wñ6 ¾¬ÙzXh[›ûù\ø÷¹VÌíZ®³s {W Éuœ‹Ë¤ÕæÜZ‡èªºö®*;¦ ²«öµžD$ä{ƒÙk›±ÖZ9n?Ã~ibIä w\of¦»÷ïÚr&ÖšÍY‘ëám/gšLˆy>.ÓÞ{V~Ô,«ê®*9çzÊ"dÄ`û³%‰ÌQ¯µÖ(^+#xW…G•6ãí2ÓÚ·„äŽY0Ñ„—,Ôˆ:â¢#s='ÓèlQ6h²{×½Gâ«r1Žîjñ káŽ2AÆ:Ïãž^õŒz·½!«ëz~~~|\Õa-ôóÛVk²d¶Íˆ\‹ŽFƒÎˆãñvæj\ ´Ñ{_Ïçu]uçȽ÷ÞK¡î)Dä‘Çñ8Ï##÷˜ö A¶Ó¸'w÷óóóyí{â ³ïkN~šì×0Aæ:(ÛôZy¼ýz«{_–]Ó+Øpíëºö®ÝLVw§Á€IY÷¼\ë˜t2§9|Á`÷@nß“1 Z¥{ù'gÄ!Ý f„œ°ÂבçÛûûqj?£« 3µbï"»õò9«²«ª¤‚ÎÄ,åĽâVrÂVÏæòÝSÞÛ©Ü{· $ý£Îj°%2c‘KÜB÷’CŒX+32è† ûމêÚµ¶Žn¦á†÷FBÕ—_¶æb¬•/©ƒš¢1ËB^½ýÔ:s󇿲ƒL®Ì{á™$iÎA'Bª<®XÍž–jÎuWï©™Œ¼Ù…¯Õ™‘“ñ3"sD‰öíEùß°$nTõ†«æÎ‰ÿâ8{[±T j=oßîÁ÷RÑ"“ êÆ{üZÓCÌ2Yp!@6óñ8cåZz-Iº?vf%f}ÒË<äŒ5_¨)F®H„?çŒj»‘d(¯k¡žõÏós_%t83}q‘‰¹ÎÞ u¹#sÕ1ÈçBÎÈó<îUs÷«Ä ã…ÜÜä,˜#^Ñ ÞȾE–ZˆÙ¸úƒ/( †è ?»>®­j¨]Ù빞r6£žÍFwyDÊtŒ)×ãíñ8"ß›ët;ÞM7ÞÃ>C¡Jà^ê]ÝdjÝ—Íßñì?Â2÷§ê³ËRV(6ŒœùÇ3˜‰h¢'ÚDš>^m­XÇã<Ïs‘ž4bBé pSÈŒœËˆÆ$æÈgæ²C†üÐè…ÁÈUöõ)Wm•Q»Lñ¬V<3Ï™¼Ü’Fr0£ó³U¶aE¾=ŽÇã8Ö Ä"®‰sÓ †I&×]·Ì†ŽWÍp{kç2"Û÷êà—­Ù6Ü­xîNóÒóÚ@ûØr"Ï…<@Rè«fý`ØÉAJݶ"ëx+IC*HÍ$7G• ©ÀÀ«¤ðj½N[KêˆìH`Aú¡ÕÍ @¥ ½÷f??>[¸>ŸÞZW5+WÒhGÓ¢" ƒ˜Õ™Å83ceXpï–Õí6¡ FÞÛ5Æn``‚Û¯Ù¼¾:‡±5ÓµªëwÏ«Íëù¹[¥eð8Þ·ã`v_ÉöÎ^')Ï´bØr—ÝàŠ8n‚{_Ýf•dDhe,€1:Vãë6/àeldÏÀ4€ïsÁ„zÛ×~~ìÄuU;$Õ®R8ò<ߟŸ'"‚•¹V3∃‘k­0[¥ºä&"p®„L¸¯ÝeVÙ\" ˜ý¸£î—±¯¹Ü»$±œë„v¸÷¾öžZêä¶ŠÇþüë8GjM4x“w°ÒÈãÌã°å]WlŸwñªîÚhƒ‘qèHæ ^›ŒàW#Cpxø™æÄ1f¿fð¬2к[ÞÑ9K ‡ÀT°ŸŸ‰çñLöþü|>·2bë<å6é¶Û÷V(ųÈÁ$˜kyÅ4 w”º9ƒùó’®Ü±0îŒýc×LTÝäMOGß3,A«öçÇ?ø<Î`WÕ.Ça¹2À0´@R9[å2ô«2–µ.0gF'îy¯S›ôvg®‘‡À ÿk^gw}ŠûÚ»û³wp÷ž‰ã·3ÙϼÇ#x¡k˜×Ù{7sx^GÃ8ìꦵÖÂZo\žNeÊWL úºYóTLYb š®é³`Ï2tuP-áHd¨©¦ÊaîsgÆà|¬È•<Ι¬µ»A©H’¯ eÝBÈ äZ±¾¤zx±¯îàŽX¯™þÙJ1|Ð[_ÿ”êÚµÁn0"±Â*º¶Z+Ï·u¯ÈĹÖÒZ÷T3ɰsD|à êÖ- VJ£ðw×úuž/:ê¾id,sÖ†ÈÚÕ?uð7}®®ÝQÊ„3‘¡EvéÂ'òñ©DÇyäÛq6òŽy#o\ð,ŒœŽÅÌëÍV Þcà|½|7Ýwïj$§H&^z»;¾Î²‡®½¯]ª˜›V®€íà&ÑÝü|,‚q¤uî<öÊõ¶VGðãù¥W ‰ Ԟɠ‘ÜÜ¡`þó_†)²2gÎåËÖ¢Ù×óyUíéQﳘíiÈBoÞƒÇ2öÊ<‚ùXç1éWKfG—|¯ó jøM”ZôEÛ üfžõ•3ð_uíçÏÙiF®ëyfN b³‘D–ÝÛ«V·b`žkIÖQc9¯=1Ò*Fg÷¾ò¦ 3î =÷ú8q¾„¼ÝÁ#öØ×µÌDÿwÕß$±š=*íPµº—,¯¤³}j]Ïóxœ^÷O2ápä*åJ+t–jÚ41î÷üúzMw#2‘»ªjWëçÜ1^6)Ç‹ŒræÁ6Mõµ—ënÏ«!°×Z‰èîªSÖaI0™X:ÐéÆ\¥yT0^ZÓÚz¿•æïÞÔøÚ’ÿµ?‹y´gç +o5%¢Ú2¼w~ΰÔÌÜk• ×N‚‰d,9Œ®«íLÏß{rËn ¸_¿§ôàd¨gñfd®ŽøÑsßò²È#yЉ,ögÁ iGH©Xk5-º \‘ka¬ NEf¦ÙPçÕîÙ‰i)–Ê÷ÞIö®©n~ôV`F¨œ+G:»ŽçI'£¢¸£~˜+‚S~fFͬþª£÷Ê€ f.F8˜Ë /v¬Rwß´¶䀹(_4‘q“%$ÁáŠü–{?N'ó$3RÑëòÕ]9{E'#Í’Q!ÜPuTÈŒ3WÄR*{»ª {ñQF„#FL¯$æ{¥ø,€ÂaWø“7Ì<ζW3ˆŒ…UÇs\Þ=XN§8+ì*!"‘‰°Í•®Yuí›+ÉÑF*zkW¹íºõª~É fcÔë´ùÊaæ´«vˆùÇîÏX‡›‹«çÊ\gz|>'åûB ÔR®ŒÅ÷I€çÌaéûë3@…é·ö8p¿É#ìÿ„ãêôúÖC›ÇÿëHg$¸Žw”r|3™;@³©#Œ'ÆÏÍïA€fD–Ò—n½8à‚Å©M¿6ñ`‰Qš~Çà3"Ä@¸†Ũ\zh·! ÀwˆP€ÚÉ—¶ð"£tøùüXö¿X` "t’{ú™`=" 4ýÚ À=ˆà^D8HþÃO3<†ä;ü4#À㈠àD8ˆòô;w)‚Ï"Bœ@€-aGÊÓï<l…q¶D„؉[#†r~š`D8¹ú3¡Ø žiú¬ØâìñŽ@„Øè8ÛÏ×÷ëϸ߮ž;¡¿E¡þÓôûþV¼‚c?l#ÇY‹nË®E"$ÀÖ°‰=á=«Q Bìa„7²Ÿ3ñ•ªBtŽ{ ÀÃZÅ·P«Y+·ëݰRëøÊà~GÖɧ5 ·‘£õŠÏLû=!Öéý¶Db#½ôŒo¡!nyDÄ…x\¬w÷õm÷ž/Êk·=í1ýŠ× ™€?F®ƒE¹¦œ€Oz5&á½§]­é& ÷+^µÎ“pÆ ¨ÜbYSNÀÑíx&a3*Ó®´<ž?Þd$µðÑõv™-–V¢ìëiŒ²C^aµˆûxŠCЈ;æAÏÃÑ1kM3=: óŒIø jpÏÒOÀ,;Ê̘„{Ú=ûú¶{ê ˜eG=h0 ï×[«G3DÊýøWÚ ˜y§eŸ„Ë5ÀLÓnÍíj—´ªhòþoMⳇWJà,;/s„³H R|ݦ_‰CKàtñ-ˆ0> 𠆔&Ài§_‰CH÷}@â+¡´çõ‘"@îñ-ˆ0Œð*M?)D(åvµKºeRŠOfú•ˆP»µ6@â«D„n¶¦^)l€*¤ã[áP5á-B~Biú…Á÷ »:úBn*Åbú•˜„Íí™vkBM@âkà'B™ç1¢–û>T€*ÂÆ‡Szì÷0*M¿È¾¾ínWïGGïÛ*Åuú)=‡ŒÚÏò*-œhñ)=wxì_ùUDŠðêyïWéYHõx®öño! Ò‚RÙYk”ž'uŠûQ2@¥E¥¸ÓÌ´ž#uªûÐL4@j;Žèê©í»-r²È^ñœÔ‹ÞB*@¥…æ½#•ž uÞûê ™•œçUzÔEo!àì¯N†èJ*-¾‘;Xi»•e‹®ä Ò"µ£•¶YYæð®*-ÄÞ;[i[ÕÍÞÂ}fGxxÇ-@¥…ÙúWiÛ Íå7a”hËøfúÃ’]MôãQÃTZ ­â#¼&‰÷€Üß_÷ì¿ä6t*-Ú£Ói7XòI8l*-Ú½ñ)=ö)%ž„á~˜÷¬=ñ1í„$„CŒ¶ˆ OT»‚*-äwÓOéqâd‡£]' Ò¢ÞŠiP¢I8Åeˆçø.$“°ÛT\äL»dLÂ.*-òÛÕ.„—X𛨶ÐÕ:átבTЛž„aÚèz:•s?<1ÓlŸ¦³B9œ`“°I€Ä§gºðJ"œâ:à,¦ .°Óéçoêi·%È<5‰ÏÁUpRæð$>L»Ä'!׃ ¼„#E·åràñˆšõ;tŠ9ÝšÞ!† Ð,}„Õ'aˆo[ËøÌ~Qd˜^¡ˆœ˜©Ú8â[×:¼5=¦¡zܫۜt~œ€Ä·nD|fLÃ’NB®0*¾ZÊßÈô{å É"Ü øô0ÿJ!‡ ;(L¿óÞsDœ$ÂÕ™~¯â[0 ÿJáK€Ä—Y’éW !¿ýÁò¹LÅ©³ÿáO€wñÏxºöô:!?I±âùÃЊñí—pú•®·~àîèßBcúm A9Àúiñ`Ê ¸èaÇ)8ýŒþ»»Ù}Ô·(ÐÞfsN¿Úo˜+O¿zÉ?K"ßr¨5ÝuÀŒ?íãE¢¡@Nqš-¸}&š~¥ 'eROÀŒÓnKý¼Lñ|˜YˆIxÉöþ¯upÑïOȬM¿ËE}›šŸT:3 ;GœfÎ4펛hú•„'aø ïÑït›ô½ß–#÷bï2ÄÈàÔ×ÖüÂ=ø;ýÔ·©ëuÍÚÃÑAS3ÔYPIw1“ÏôìïÅy¬YÂÚ qðáª|€^s·‹]b½nŒ%ò¾P6@ÂkiÒ“/È}[1¼h‡ ¥Ÿ)ø úöÌôÙV‰ ¨])âûÀ_L?e®_ÈU¯7À׉¢¾-3MÀ— ía¤èž©/ÜwÊE­¾ShÖ'ÂÈá•ÔïÔ´¹¡-"Ì]I}ñ¾³,lõm À‘3†WR_À[POõ†~ 1{t%õüN„3ºˆÔqd3þÛ^fZ$è‡GxSg àˆOb â l€qް¦ Ž @À6ÄÄ^Øb`LAÔ"@ÀvÂD ìˆñ ް3¦ Þ!@ÀÀÄ„±†G8SÏpD€ƒ1Q"@DˆŽÐ Sf¸"@GLA 3"œŽPSp^8"@LÁ9 "œŽP Sp.8"@ALÁy ("œŽPS0? 8¦`næE€€# ‚)˜Ž0¦`> æB€€# ˆ)˜Ž0(¦`ÆG€€# Ž)Ž0¦`\˜ÆD€€#L„)Ž0¦`,˜ÆA€€#LŠ)Ž01¦ >L޵ àˆ'ÀÔE€€#œSPN„õ àˆWÄ ÝÍîÞaËlSš 8"À Í6e”±#&¦v(:ã p4Ý+©LÁ§Ÿp5å«yOÁY§ŸÙÄŽG^ΟÙäG£#œ=>3ž<!ñýàIÀ‹Þß/žlj"á½â Á[-"$¼m<1¨¶7F íòÅ“„ IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebraexpr2_02.png0000644000000000000000000000271611722777314023350 0ustar rootroot‰PNG  IHDRÈÌ¢³TtRNSv“Í8‡IDATxœíËz«: …•~g”'êØîqŸˆñ‰_t³,¼Y“&)MüwI²1Ä~®Þè#Ý~i¾žb•&‹b—Œ—b• ‹ˆŒb•œE ¢A±JÈ"Ñ£X%a‘€hsˆHø ú.H 6 ¤…Ò€…BéÀ@!ƒØpÐI~h‡¿±ë'ýGzsÚ{Eã€7ÉJhYEÕWˆŒ#ú_áIÐ9"ÉŽMäà¢|*D#¬VG"1é‘Ç!CK#2" °á…±OóT(ÈX dDZÈ!HÚâ;NÑ76«Ö˜°º†f3Z¡5:=¾jxÒñÃÑ"©ƒxâhTA|qÔIj Ý8xH¨’TÊo'ÆÐñ£w™„x†¨"î «ªrh9J$‹–AqFÎ%’ˆ+Žƒ $¿%’É~TµŠáK\Ä!¹—o\6´Üp” ®ˆ)«—ÏdBË»m¢Q²KÆ%8]Aú²“\fµkÄrmä%GúV5#H3_ç4ß$’àÙ‘Þ™ÕÆ¾'K¬Aôt9…– Ç%„81ujê¹F—¼<CkÄY:?kÁåªj±ô÷'Gî“髸€_˜Á‘M©#c.Hú•Õ’_€Ã¼ÖÝ Öy®ßõá„¡ÕÓö…Ц>%ØÄ‘hpBòé<|/X«O?/ïg1×kôŸf›8‚>yjÊì9â»dÕrlË’{€Ô´˜—_â­(hÙ÷#*ñZ÷¬=¶ÆÎk)Æ™HTŸ([A,"+¶Ixkã_ÉãÞÊ÷é@ž7¨_,«æß]é¹[úkˆ‚Þ[hß*‰s[†dóBö ¹öF‚è•0âhwü>ä vU+†°54HN•!;Í‚HßV¨Úİ?ã_î†-ÊÏNZF`ªmÛ,h˰y-\ ÅÌ£ô×I¦Y‚lKâ†ÏÏ&¸ HÜZO*J!yµ ´r$)J¨‘!¹•ßB’±ÂK»1W¬_#ŠV$²ä\¼ÎÆ7Bë <Ä‘¼¾ÿhÆ~¢wx -Ù½(VŽ0 œ 8päØÑ³MžìÇZzJs¼‹‹E‡˜4§,¡ú´&Óy­áhT’ƒa¼’oz@¼éñ¦Ä›¦u1TYã.†ªëñ¦Ä›^0CÙZ&rdG÷4òµß 8…o²¼7¾—Œïï¬i@ž¯&yÓ4 Ï*½éñ¦Ï wM’}‰ù¹©%¶k>X(Yà厖|×AšÑ‘Z’,L5¥#·³$])Ìhų.šlųM§å ïdÉq}ÃY¹‘%õ'ï+ãÕeõäzuY‰®kbßÒ˪Ø;r K®Ë”_n¥ÌrëS/€ï$»KÄÌÉàÛ’ü¶³o¤â—„ºµWúfC>I|ícÕEC¶Hc«²EÚ?±i7þ6‚¾H$;z"‘mµé‡¤µk{_]$Ííh{ iïüOmÙ<šDoí±$šÛš$Áq A†‘ 9ð cP°$$xˆ9 ƒb‹BÁ ƒ’Ð8È V(D ˆ ƒÒ…Áé‰ÂÂàƒôBabH@º°9$ ú(| !ˆ.ŠC  #ƒP)‹œ´@€Ï¢BŠ ÀaÑ¢] ±(R€:ȪŽ.ª. _¥H=šÿȯþâÊaÐvN‰IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebraexpr2_05.png0000644000000000000000000000166011722777314023350 0ustar rootroot‰PNG  IHDRÈÈ­X®žsRGB®ÎégAMA± üaZIDATx^íÛÑ ‚@Pí[ý¬ýׂ  0‘ÖA¹{zï™æ!&? @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€@²À¼nY–ûÚõÖÚæ}É`²%°zÐ Æ7Aë°Œ˜öc@ö†Añ¨Œ™ù= ÿÇ‹Í6ó¥§¾¥”@Àsƒôn[¤§î½²€ råîx¶Ó棶‡-rz/=@€ R€ªdŽ€Éé¥$¤UÉ’ÓKI  Hª’9þÉé¥$6Hª’9ÞÅÊé¥$6Hª’9^wÏé¥$>˜*@U2GÀ'·9½”„ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€8TàG,àŽ;IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/matrix_checkmark.png0000644000000000000000000000116311722777314022574 0ustar rootroot‰PNG  IHDRóÿasRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tEXtSoftwarePaint.NET v3.22·‘}ÍIDAT8OeS;1Q] ñˆGBÅ¿Ð!…ß *5~‰G¢¤!Ñ)tB-Z¢TB¼ÏçÌ—»ßÝý&¹{wïÜ9sÎ̬Í 9ÙíFÿûý6¸»\.ã~¿n·Ûø~¿Mû]×Ï!ëõzÉÒíñx`¿ß£Ûíâv»Áø|>¦Ÿï TF0Úóù”E°ù|ŽB¡€~¿/É êA–tÚïÍf3Äãq´Ûmí|ØHS]PÃáétÕjÕÂÐPtéÕeQg§ÓA(B¹\6Ïçó?*HáÙõzÅ`0@0D&“Áét’:¨{LÄö˜”tÚ—Ë«Õ áp@ÓéÔ,(_è7k@ÍöÊG‹Ex<ŒÇc‘¥¤é¥£Ñ•JËåRpÜl69](•JØív–ìz2c»Ý"‘HÀét"—Ëa³Ù`±XÀçó!‹‰ »éÃ% &“ "‘~cŠz½Žd2 ¯×‹F£aƲÊ~£lÒPSV«Õ„²ßï—=•Jáp8XZJízÑeÕ‘v4•`®^¯÷u¾*"cE»ÀZ0+µg³YùaTwÈR¯<¿•Oþe­V ù|ëõÚ XÚ w]Ëk’çyIEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/images/st_mapalgebrafct2_02.png0000644000000000000000000001223411722777314023142 0ustar rootroot‰PNG  IHDRúú­‡átRNSv“Í8UIDATxœíi;[Ýß°O Äó<Ïc5µ´Z´ê¸?Ãý¹ž÷ëû8ž­WU[ÕÒ5ÔþcÕ‡ ©[ìï7£. Ðá3Ù[¹åý€x/õÜí¹ßHƒ×A©„ì ”@/oV^B28ÉÝvn¢ú ¸‰óúð(9/st_A¤.Ûörîâ‡Pn}“Fl»Ý@çr ^Èéªù×ÀÝv׸ÍéRÉ ê‡&Õâ\€åÕˆžàÞd{8d{H©\ú8¸­Þnñ¾.dÀ±Žeù©î¸Î!1oFÀ¹Ú@Œ¥#¸Kg]€G¯^,Ë‚ãŽNqá[ZÊF–KZ‘KÂ’,Á…X8ë‚7tà”‚3,û+BßYð]‹KKž_+ìêG-ÁÅXV]@‹§¥ƒdàØ Eq=P. Ù15[4‚?`Quáiáñ sP²Gîà 4 OS™‹ëüBߪrª¤.|²dÂ’}ýø=YÙ²pô2¯ãaÀêѯJ<6¹µÞ‚—4ƒ^îs ¨¨ÏÈêÈsSw 4Ç%Vá&o›ÃrOŽoκԾžûa@ÇÎH[DŸ=­®®Z,‚¿`±¿Ø_8âlRCE3±ülî'(o©É[*ëB>¬<"”*Ô^Ð\ÁD¬þ»°…‚ø3Ro¤Ömn@ò:ç-õTxÍ™ÀWËÔxu,3Ì šô»ÞÚ˜™.¨qx8˜zýWþóÛÂ"êý¦YBîÒ—3#'Ç:<•0mÀ=å`=æiðºÉ)O6|ÛÛ·õr5t…¿41j€§¡ Z ºëbuámxùƒkܧӥhñ™N ‚ŒV”sKœÜ„;_!d\õyoå»@ÕG=îNë¾çß©(oé‚Nô¬ ~_ \ôlºòà Ь¯!Ñ•[»G;±‡9 ÊÀØÛ¼ nÜÑ@·wÅz"Ç#”«Åøû–B³K0ãµF ¡äèÇŠ·¯ ¸m“Öòk螆Œ¾ã_.âþ¿èëÑIÛ‘ô“rü)\ÒTtç¨WYÕàˆ«.d¸ GÏÀhp–#J&ü^òê+­Ñ\Lõ-ÜÙNÝË$>}£ á‹û8÷¬Ò\Ä^ý…fÿòwQ*ÂǶÔS›JZc²‡çUš‹—ua›RVÞ¨Èùî¦ænÛeIø0¤z½l•梩 8µCÄ77”ÛD»@ØÇ°£ ™÷"Õ!2"©¿åñF˜Õ—òÊàÃT³õl¦Ìç[g?±ÔG¿éƒd¸d?l„Öõ\"|5öܺÙIá¹ä̹¿¯`ž’¡óQ> âåלë×)&×W_-÷$'…)=ðwŒÐ‰Ïlzp½7üßóQÞÝQ—Á»k×)*Òÿ¾æÂî@‚ÂU§YÝ»'›,ÐçGê ¨Ò'vÃéÍJýÑÏÌÍýXý´!ýÙ»ÞÒݬ$˜ÑY} Q°;Œj}²>[騦t®e÷Ù¢?¯`æ½—êç¶øBˆY!‹Å5ÕGµô±Ñš;}Ÿ•„;»UwïΡ%¾Ž‘³Ešßc¯\BX0/f‘¸Þy½a?Æ£g  “÷TÍð=jÄ@‘÷ `lì—ÓÚOs¥ç6W¬DüšYöÑ8dW@zG:œ@:úHÖ‘ñÛ¬ÌOóÿbDRIðƒ[[þ ×ɺþ6·àÑkä»_!v´žƒ 6Ø»È\Ù?V BË`kàYy›Ð þv¡ŒPh>SÉ…æ•hòT- u%Ý̘EâêêjÐ2ZF2|§°¼ÐŸuÈ&xó[ÑSsä¹Ú¤møè=¿™³H\ùq£e^æ4‰ÇãyØœäðפŸÞ—|>ý³SJïïMã?âq£Âº †‘Ò¬;¤zãÂ!áçš×ñésV6A ó#pó¹¢z·Ó8àCž¬A@x÷|e@ËX%œ½”9cô ägjžé¾›µ(\­Á/kŒ]0œ¾ƒ ÂæˆÜwš9¿µ×¡=î!ø¯pguþà_c¡õ7x!¨‚‰ê(j¨~@pD†) æJ˜Y¸Ðœx²_¥¢Dn6W¹}¼–ˆ_Sï?cL²3θn{+ok{ß_åŠïÙ;ô_ÌqZ™– ?¶mÕ‡ÿ¸ÛÁûG l£¢Ê#ˆ_Á¡iصzb~Yõ«9ý¥  vfÅ ±\”ÈÍæòêZFÙN ÷("Æü*“0j¦‰®¿°µAîiÉ×Á‡¥ðÎ:¦%/­.xSÒž€ëîÁ4³„½‚ßÌQ7Leþ3ꀦ~½³»5.«. ¥ ·CèAˆž·²ü¤ìndŠpÔUŽŽógŠþˈë=dX†¢¬crî’êÕÀ6JBð^ö¾ ƒT÷¤MãÙůç™K¶Ž~zQCÓÖ±xðrQ ÀÑ'ÎÑg/°ï<£l+§FO%ÃmüÅüÉáÑ„UùŒâþÃì°ÅàRêÂÜC%¯ Œn|uò "æFäÝ ¼)&é/æ¼8>“ÏÃk>*¬`S.§nø»Íhô°Ç>m//+!ƒO ­§EÏ’X¬â¾0vðóS›¶\B] ~ W@P†š\Ìûâò†¨¶Ó¢gÌÏ^›~Êãý:@;Tº=#nø»z1ï"t–Žðü1ÛFbïT¬„@çiÑ ÌyÒAr!ådÃ]h‚«XÁ›Ç_'¨&!BÔî9VÓ@áç Ø¥luß5§«çp¿Ý4£‚w¬8ÊgûÁJý-ëB,.îȦ—¢œö#éð¯q¡3ýã ª®ìž\ÊœP¹d1o¤?€ˆÛÜ›ã QŠ'ØÙrù’05™üF"=XÑïU\tG£»”9¬Þ¡“ž Òulb%·ëQWÁ]rñsó„„/²©'É{˜¨ÿô@ö´èŸÌBzäT{öñ "\k©)xóø£ºÄ'Z×ï.U¼–ÅQ¾ÈÏiô4Gšý“9û“s»¼ÜÀ#7GÏ^‰º¹üI]pÒÀ·èI}ÖTY#äóRIÙ¦ @¾xÚÜÿh@ùlvªPOr(Fäf󇩊х-¾;h3 Ó̳ éVÍøJU;N’õ@‹?‹þÅ\.ÝqS..›â&,­|ª¢U;$ˆ;}Z "úiˆ+é§jšÐ`ÎÍùù•„ƒºà>ÕOW_ËßZÇRš‹Õ×6yŒgq ‹ìá0 > Oqo•Ð~@×ù­ýüæªbŒ¬š÷O^þÓË.··Í/\4#+8€É8Õƒ«ïÃÜ·rG¥-µÿçgÑ¿š3ÓKìÁº)G½öÙOÿŸNYÓŒ¬pßH'Çz”ƒ¶ôíSc¦„–rO‚ò®bNoQÁºaég¶(‰)v39_½×Ú¸j¨ îR¾ÊDU%“ü“£:|Ì»½Çê—?‹^œ"Œt ¹Çî=W+Q?·Á=iðØ"fòôŽFHÿöäEä \0Â]ØlNöËí$tÞŠ¼À3€¼‰› CŸoüxÁx½”9å@{¼c¥ß)]w2?jQ8G]€úˆÝEËøÉâu‡lÿ@ [ðú™´Ë™ø$Žߘj%-ú}¹×‹Þÿnðžcw[4¬ Ðeö·}(:𕏲¹ÊgÈÑèšý)r€G¯­³Ák†Â¤Ä,iÃH|è…¤Í,@F[I5×0g)Zjt{ø‰™{)ñÀk‘b7“ß³~²EŒËåïÿ°ï¨}™;]ëDΜkþgu£­§ÀÙ€³Áwͳ.!È2“v@Å+»ày¾«ooýi€wä5̦(ïÚ (ÁÑÀzšHÁ›Ç¯êÃ.ÁŠ©w؆áSóÑž"úä,Ëþ÷¤è•Ì‹Ý×Ð>wæ#˜¬pQ¸ ÞY„QòÀãø€ž¤°TOÉ4JNŠ^ÉœO› Xé ‘ù‰¿œU²7q#‡Qø®{‘/yzª:`ù¤èÕÌ)¯ÐÔÆGà ãUÝÞ¬HÁ›ÇõnºÁÙ´Oð#ÚW—¼É÷¤6rÍ~Y-.?x>ÖOÆ“½‡µYbEo§êÂw’g<¶\ñ–¡_Y’È#y8sRôŠæô¾e‡ ¤©Á¡IG܆8±›ÉOõ ê*‡ b¦¼ ¢¥[€,ÈÁ¥˜0q¸Ûö$éW5ç ûþ.x&QcÊR=Ÿ/~38™ 2µ2²¿Óï`V6ø™´“¤®ämkÂËF·J^resžGw3±^÷y½büñó¬%«˜ :~ú"=÷_éU¢½–!J×E‰³Áw ãY}ÀsåÎÉG:®n³8í»(tQ­ü6-büfpÔàû˜BÓν¼étÂ·Š–éHhmÞR™`9Ùp2*_ëS™D'쀎VŸ@?/ëx¼~¤.lÏ=ƒý>¤…ûšw©nàÝ àƒQîC'ÝóWóË^€Þat'wHH_Òôÿ½ü V\ëA 4KzöÔÁuÑÛ  ŒLž;Â]þÒ{ #ö·ÀíC-ÜÚ¶è¿rÔàïëy|tR ê&Góàá!¬ÄÃéÍÚ5ÍK”}½G¯xNü€Õ¬¥Èy_ëñŠ´x ‰Dž0%BEd˜b¦9­ È€bª–¡ÔÙJž¾HÆ g6ñéƒZÔþ¤iÝa„jêڔݰt²¸÷ºæ¤ÂÞÓ†Z¬ãã ¡b?GB”óœéÚD&¼dUü+NŠ^Ûœ…¼|µ•5–€p%âÄn&ªãÉ w¯9 º-¥½|n|_åÎýzGìv`I=úD¢æe®>Ó°KÅ^äfÙŽK²ÙQ‹‚$‰”}xÇ:m|O1ºÇÅ! ÞXŒœ{ëw€-šã¾ñ‘˜ggÿykÛ2Ip\Ï2Éñ~J-¬ôÁŠ_-,°Íô9]÷²ËÓë:þòxYoVÈbá bÚC° ÄnÛÜ5vµ•ìt­ŠfÎB'Ô,ôeŸþ½¦ø¶ž¹Í’TÅ$àܾìÚFkW…xæt ½’(~O$ÈŒ€ÅC±h7/@p÷#³zÀ³YÄnXÄMÓ„Á™ÐÓÜâlG&Þ½®Õë¤-²‚7ü¾Ò¬f¿¤z:  ýÔ•)â_0Ý÷Û_ÓúCS^×ýö},æ(Ëßzn€Û6T5þ:ïs‹_yU˜µøSJÐÏüçºßB23¾ºO*§ o³ÈNnÌ;nç·iþsUÅpxwl‡éa^? H}ÎiÞEˆOÀgœ.€Úç§§Ûúf¯Ó%ÙÝ@ìDŒOç™hŽäE O¨~ NûÊÕ°9êD}çkpv-Íè˜CÍä€e£ùÐm´Üä÷¯[Öñ4àV°«Û"vu[Ä®n‹ØÕm»º-bW·Eì궈]ݱ«Û"vu[Ä®n‹ØÕm»º-bW·Eì궈]ݱ«Û"vu[Ä®n‹ØÕm»º-bW·Eì궈]ݱ«Û"vu[Ä®n‹ØÕm»º-bW·Eì궈]ݱ«Û"vu[Ä®n‹ØÕm»º-bW·Eì궈]ݱ«Û"vu[Ä®n‹ØÕm»º-bW·Eì궈]ݱ«Û"vu[Ä®n‹ØÕm»º-bW·Eì궈]ݱ«Û"vu[Ä®n‹ü?¶ À<1´IEND®B`‚postgis-2.1.2+dfsg.orig/doc/html/image_src/0000755000000000000000000000000012317530606017225 5ustar rootrootpostgis-2.1.2+dfsg.orig/doc/html/image_src/st_issimple05.wkt0000644000000000000000000000023511722777314022464 0ustar rootrootStyle1;GEOMETRYCOLLECTION ( LINESTRING ( 30 190, 60 60, 170 10 ), LINESTRING ( 100 190, 180 150, 160 70 ), MULTIPOINT ( 30 190, 170 10, 100 190, 160 70 ) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_line_substring01.wkt0000644000000000000000000000022311722777314023657 0ustar rootrootStyle2;LINESTRING(25 50, 100 125, 150 190) Style1-thinline;LINESTRING(69.2846934853974 94.2846934853974,100 125,111.700356260683 140.210463138888) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_issimple06.wkt0000644000000000000000000000023211722777314022462 0ustar rootrootStyle1;GEOMETRYCOLLECTION ( LINESTRING ( 30 190, 60 60, 170 10 ), LINESTRING ( 30 190, 180 150, 160 70 ), MULTIPOINT( 170 10, 30 190, 170 10, 160 70 ) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_touches06.wkt0000644000000000000000000000015611722777314022314 0ustar rootrootStyle1;POLYGON (( 30 30, 10 110, 40 190, 120 170, 180 180, 170 100, 130 10, 30 30 )) Style2;POINT ( 170 100 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_overlaps02.wkt0000644000000000000000000000023011722777314022462 0ustar rootrootStyle1-alpha;LINESTRING ( 10 10, 40 90, 70 110, 140 110, 170 130, 190 190 ) Style2-alpha;LINESTRING ( 10 190, 50 130, 90 110, 130 110, 160 70, 180 10 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/de9im09.wkt0000644000000000000000000000131611722777314021145 0ustar rootrootStyle1-alpha;POLYGON (( 140 140, 140 122, 135 105, 126 100, 118 99, 110 94, 100 86, 97 73, 102 59, 98 49, 87 38, 70 30, 55 29, 40 30, 28 38, 20 50, 14 66, 10 84, 6 100, 4 119, 4 143, 6 166, 10 180, 18 191, 28 195, 40 190, 55 189, 67 186, 86 179, 112 165, 124 158, 133 148, 140 140 ), ( 48 177, 40 177, 30 174, 24 166, 22 159, 25 155, 30 153, 40 154, 45 157, 52 162, 53 169, 51 174, 48 177 )) Style2-alpha;POLYGON (( 75 63, 79 50, 87 38, 95 31, 108 25, 124 22, 140 18, 154 11, 166 6, 176 10, 184 21, 188 35, 190 58, 190 82, 193 104, 190 121, 185 139, 178 154, 166 163, 154 171, 139 172, 124 171, 112 165, 96 152, 92 142, 92 126, 86 116, 79 110, 75 104, 72 94, 73 86, 75 76, 75 63 )) Style6;MULTIPOINT ( 87 38, 112 165 )postgis-2.1.2+dfsg.orig/doc/html/image_src/st_isvalid02.wkt0000644000000000000000000000016511722777314022271 0ustar rootrootStyle1;POLYGON ((10 140, 90 190, 130 170, 190 60, 160 10, 50 20, 10 140), (190 60, 140 40, 110 60, 120 90, 190 60)) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_concavehull07.wkt0000644000000000000000000000074211722777314023147 0ustar rootrootStyle2;POLYGON((132 10,66 28,22 64,36 150,92 182,132 186,176 184,190 122,190 100,186 52,178 34,168 18,132 10)) Style1-thinline;MULTILINESTRING((106 164,30 112,74 70,82 112,130 94,130 62,122 40,156 32,162 76,172 88),(132 178,134 148,128 136,96 128,132 108,150 130,170 142,174 110,156 96,158 90,158 88),(22 64,66 28,94 38,94 68,114 76,112 30,132 10,168 18,178 34,186 52,184 74,190 100,190 122,182 148,178 170,176 184,156 164,146 178,132 186,92 182,56 158,36 150,62 150,76 128,88 118))postgis-2.1.2+dfsg.orig/doc/html/image_src/st_touches04.wkt0000644000000000000000000000012311722777314022304 0ustar rootrootStyle1;LINESTRING ( 10 10, 60 140, 140 190 ) Style2;LINESTRING ( 140 190, 190 10 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_buffer08.wkt0000644000000000000000000000226311722777314022116 0ustar rootrootStyle2;POLYGON((148.123572904471 161.601163554697,159.530095742831 156.876427095529,160 50,159.807852804032 48.0490967798387,159.238795325113 46.1731656763491,158.314696123025 44.444297669804,157.071067811865 42.9289321881345,155.555702330196 41.6853038769745,153.826834323651 40.7612046748871,151.950903220161 40.1921471959677,150 40,148.049096779839 40.1921471959677,146.173165676349 40.7612046748871,144.444297669804 41.6853038769745,142.928932188135 42.9289321881345,141.685303876975 44.444297669804,140.761204674887 46.1731656763491,140.192147195968 48.0490967798387,140 50,140 125.857864376269,57.0710678118655 42.9289321881345,55.555702330196 41.6853038769745,53.8268343236509 40.7612046748871,51.9509032201613 40.1921471959677,50 40,48.0490967798387 40.1921471959677,46.1731656763491 40.7612046748871,44.444297669804 41.6853038769745,42.9289321881345 42.9289321881345,41.6853038769746 44.444297669804,40.7612046748871 46.1731656763491,40.1921471959677 48.0490967798387,40 50,40.1921471959677 51.9509032201613,40.7612046748871 53.8268343236509,41.6853038769745 55.555702330196,42.9289321881345 57.0710678118655,148.123572904471 161.601163554697)) Style1-thinline;LINESTRING(50 50,150 150,150 50) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_contains05.wkt0000644000000000000000000000025211722777314022454 0ustar rootrootStyle1;POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130 ), ( 70 40, 100 50, 120 80, 80 110, 50 90, 70 40 )) Style2;MULTIPOINT ( 99 130, 87 70 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_snap01.wkt0000644000000000000000000000027611722777314021601 0ustar rootrootStyle2;LINESTRING (5 107, 54 84, 101 100) Style5;MULTIPOLYGON ((( 26 125, 26 200, 126 200, 126 125, 26 125 ), ( 51 150, 101 150, 76 175, 51 150 )), (( 151 100, 151 200, 176 175, 151 100 ))) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_sharedpaths01.wkt0000644000000000000000000000023311722777314023137 0ustar rootrootStyle2;MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),(51 150,101 150,76 175,51 150)) Style5;LINESTRING(151 100,126 156.25,126 125,90 161, 76 175) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_issimple07.wkt0000644000000000000000000000023011722777314022461 0ustar rootrootStyle1;GEOMETRYCOLLECTION ( LINESTRING ( 30 190, 60 60, 170 10 ), LINESTRING (100 190, 180 150, 80 10), MULTIPOINT( 30 190, 170 10, 100 190, 80 10 ) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_minimumboundingcircle01.wkt0000644000000000000000000000216011722777314025215 0ustar rootrootStyle1;POLYGON((135.59714732062 115,134.384753327498 102.690357210921,130.79416296937 90.8537670908995,124.963360620072 79.9451031602111,117.116420743937 70.3835792560632,107.554896839789 62.5366393799277,96.6462329091006 56.70583703063,84.8096427890789 53.115246672502,72.5000000000001 51.9028526793802,60.1903572109213 53.1152466725019,48.3537670908996 56.7058370306299,37.4451031602112 62.5366393799276,27.8835792560632 70.383579256063,20.0366393799278 79.9451031602109,14.20583703063 90.8537670908993,10.615246672502 102.690357210921,9.40285267938019 115,10.6152466725019 127.309642789079,14.2058370306299 139.1462329091,20.0366393799275 150.054896839789,27.883579256063 159.616420743937,37.4451031602108 167.463360620072,48.3537670908992 173.29416296937,60.190357210921 176.884753327498,72.4999999999998 178.09714732062,84.8096427890786 176.884753327498,96.6462329091003 173.29416296937,107.554896839789 167.463360620072,117.116420743937 159.616420743937,124.963360620072 150.054896839789,130.79416296937 139.146232909101,134.384753327498 127.309642789079,135.59714732062 115)) Style2;LINESTRING(55 75,125 150) Style2;POINT(20 80) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_centroid02.wkt0000644000000000000000000000026111722777314022442 0ustar rootrootStyle1;LINESTRING ( 190 160, 10 190, 40 90, 20 70, 10 10, 30 40, 30 10, 110 40, 70 10, 110 10, 140 40, 140 10, 160 30, 180 10 ) Style2;POINT(76.1907245453253 79.8755933886095) postgis-2.1.2+dfsg.orig/doc/html/image_src/de9im02.wkt0000644000000000000000000000036011722777314021134 0ustar rootrootStyle1;POLYGON (( -20 10, 30 30, 80 70, 110 80, 145 85, 190 110, 300 220, 230 220, -20 220, -20 10 )) Style2;MULTILINESTRING(( 120 180, 145 85 ),( 10 130, 30 70 ),( 90 140, 110 80, 94.81118881118876 75.83496503496498 ),( 150 160, 180 80 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_closestpoint02.wkt0000644000000000000000000000213111722777314023357 0ustar rootrootStyle1;POLYGON((175 150, 20 40, 50 60, 125 100, 175 150)) Style2;POLYGON((130 170,129.615705608065 166.098193559677,128.477590650226 162.346331352698,126.629392246051 158.888595339608,124.142135623731 155.857864376269,121.111404660392 153.370607753949,117.653668647302 151.522409349774,113.901806440323 150.384294391935,110 150,106.098193559677 150.384294391935,102.346331352698 151.522409349774,98.888595339608 153.370607753949,95.8578643762691 155.857864376269,93.3706077539491 158.888595339608,91.5224093497743 162.346331352698,90.3842943919354 166.098193559677,90 170,90.3842943919354 173.901806440323,91.5224093497742 177.653668647302,93.3706077539491 181.111404660392,95.857864376269 184.142135623731,98.8885953396079 186.629392246051,102.346331352698 188.477590650226,106.098193559677 189.615705608065,110 190,113.901806440323 189.615705608065,117.653668647302 188.477590650226,121.111404660392 186.629392246051,124.142135623731 184.142135623731,126.629392246051 181.111404660392,128.477590650226 177.653668647302,129.615705608065 173.901806440323,130 170)) Style3;POINT(140.752120669087 125.695053378061) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_contains04.wkt0000644000000000000000000000022611722777314022454 0ustar rootrootStyle1;POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130 )) Style2;POLYGON (( 70 40, 100 50, 120 80, 80 110, 50 90, 70 40 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_dumppoints01.wkt0000644000000000000000000000053211722777314023035 0ustar rootrootStyle1;POINT( 26 25 ) Style2;LINESTRING ( 26 75, 101 100 ) Style3;POLYGON (( 76 0, 76 75, 26 50, 76 0 )) Style4;POLYGON (( 101 0, 101 75, 176 75, 176 0, 101 0 ), ( 151 25, 126 50, 151 50, 151 25 )) Style5;MULTIPOLYGON ((( 26 125, 26 200, 126 200, 126 125, 26 125 ), ( 51 150, 101 150, 76 175, 51 150 )), (( 151 100, 151 200, 176 175, 151 100 ))) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_linecrossingdirection01.wkt0000644000000000000000000000045011722777314025232 0ustar rootrootStyle2-mediumline;GEOMETRYCOLLECTION(LINESTRING(25 169,89 114,40 70,86 43), POINT(25 169),POLYGON((78.26 40.98,83.98 50.74,86 43,78.26 40.98)) ) Style1-mediumline;GEOMETRYCOLLECTION(LINESTRING(171 154,20 140,71 74,161 53),POINT(171 154),POLYGON((153.15 48.12,156.12 60.85,161 53,153.15 48.12)) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/styles.h0000644000000000000000000000230011722777314020724 0ustar rootroot/********************************************************************** * $Id: generator.c 3967 2009-05-04 16:48:11Z kneufeld $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Kevin Neufeld * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * * TODO: add descriptions **********************************************************************/ #include #include #include typedef struct layerStyle LAYERSTYLE; struct layerStyle { char *styleName; // A unique name int pointSize; char *pointColor; int lineWidth; char *lineColor; char *polygonFillColor; char *polygonStrokeColor; int polygonStrokeWidth; LAYERSTYLE *next; }; void getStyles( LAYERSTYLE **headRef ); void freeStyles( LAYERSTYLE **headRef ); void addStyle( LAYERSTYLE **headRef, char* styleName, int pointSize, char* pointColor, int lineWidth, char* lineColor, char* polygonFillColor, char* polygonStrokeColor, int polygonStrokeWidth ); int length( LAYERSTYLE *headRef ); LAYERSTYLE* getStyle( LAYERSTYLE *headRef, char* styleName ); char* trim(char* str); postgis-2.1.2+dfsg.orig/doc/html/image_src/st_touches02.wkt0000644000000000000000000000023211722777314022303 0ustar rootrootStyle1;POLYGON (( 10 190, 10 70, 80 70, 80 130, 50 160, 120 160, 120 190, 10 190 )) Style2;POLYGON (( 140 140, 190 110, 180 40, 140 10, 80 70, 140 140 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_isvalid03.wkt0000644000000000000000000000017011722777314022266 0ustar rootrootStyle1;POLYGON ((10 140, 90 190, 130 170, 190 60, 160 10, 50 20, 10 140), (130 170, 10 140, 50 120, 110 110, 130 170)) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_overlaps01.wkt0000644000000000000000000000030111722777314022460 0ustar rootrootStyle1-alpha;MULTIPOINT ( (20 20), (40 90), (80 130), (140 100), (110 40), (120 170), (150 70) ) Style2-alpha;MULTIPOINT ( (180 10), (40 90), (80 130), (160 150), (110 40), (50 50), (50 160) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_split02.wkt0000644000000000000000000000227611722777314021776 0ustar rootrootStyle1;POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,141.573480615127 62.2214883490199,135.355339059327 54.6446609406727,127.77851165098 48.4265193848728,119.134171618255 43.8060233744357,109.754516100806 40.9607359798385,100 40,90.2454838991937 40.9607359798385,80.8658283817456 43.8060233744356,72.22148834902 48.4265193848727,64.6446609406727 54.6446609406725,60.1371179574584 60.1371179574584,129.862882042542 129.862882042542,135.355339059327 125.355339059327,141.573480615127 117.77851165098,146.193976625564 109.134171618255,149.039264020162 99.7545161008065,150 90)) Style2;POLYGON((60.1371179574584 60.1371179574584,58.4265193848728 62.2214883490198,53.8060233744357 70.8658283817454,50.9607359798385 80.2454838991934,50 89.9999999999998,50.9607359798384 99.7545161008062,53.8060233744356 109.134171618254,58.4265193848726 117.77851165098,64.6446609406725 125.355339059327,72.2214883490197 131.573480615127,80.8658283817453 136.193976625564,90.2454838991934 139.039264020161,99.9999999999998 140,109.754516100806 139.039264020162,119.134171618254 136.193976625564,127.77851165098 131.573480615127,129.862882042542 129.862882042542,60.1371179574584 60.1371179574584)) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_split01.wkt0000644000000000000000000000204311722777314021765 0ustar rootrootStyle1;POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,141.573480615127 62.2214883490199,135.355339059327 54.6446609406727,127.77851165098 48.4265193848728,119.134171618255 43.8060233744357,109.754516100806 40.9607359798385,100 40,90.2454838991937 40.9607359798385,80.8658283817456 43.8060233744356,72.22148834902 48.4265193848727,64.6446609406727 54.6446609406725,58.4265193848728 62.2214883490198,53.8060233744357 70.8658283817454,50.9607359798385 80.2454838991934,50 89.9999999999998,50.9607359798384 99.7545161008062,53.8060233744356 109.134171618254,58.4265193848726 117.77851165098,64.6446609406725 125.355339059327,72.2214883490197 131.573480615127,80.8658283817453 136.193976625564,90.2454838991934 139.039264020161,99.9999999999998 140,109.754516100806 139.039264020162,119.134171618254 136.193976625564,127.77851165098 131.573480615127,135.355339059327 125.355339059327,141.573480615127 117.77851165098,146.193976625564 109.134171618255,149.039264020162 99.7545161008065,150 90)) Style2;LINESTRING(10 10,190 190) postgis-2.1.2+dfsg.orig/doc/html/image_src/de9im08.wkt0000644000000000000000000000146311722777314021147 0ustar rootrootStyle1-alpha;POLYGON (( 140 140, 140 122, 135 105, 126 100, 118 99, 110 94, 100 86, 97 73, 102 59, 98 49, 87 38, 70 30, 55 29, 40 30, 28 38, 20 50, 14 66, 10 84, 6 100, 4 119, 4 143, 6 166, 10 180, 18 191, 28 195, 40 190, 55 189, 67 186, 86 179, 112 165, 124 158, 133 148, 140 140 ), ( 48 177, 40 177, 30 174, 24 166, 22 159, 25 155, 30 153, 40 154, 45 157, 52 162, 53 169, 51 174, 48 177 )) Style2-alpha;POLYGON (( 75 63, 79 50, 87 38, 95 31, 108 25, 124 22, 140 18, 154 11, 166 6, 176 10, 184 21, 188 35, 190 58, 190 82, 193 104, 190 121, 185 139, 178 154, 166 163, 154 171, 139 172, 124 171, 112 165, 96 152, 92 142, 92 126, 86 116, 79 110, 75 104, 72 94, 73 86, 75 76, 75 63 )) Style6;LINESTRING ( 112 165, 124 158, 133 148, 140 140, 140 122, 135 105, 126 100, 118 99, 110 94, 100 86, 97 73, 102 59, 98 49, 87 38 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_symdifference02.wkt0000644000000000000000000000006711722777314023462 0ustar rootrootStyle1;MULTILINESTRING((50 150,50 200),(50 50,50 100)) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_concavehull02.wkt0000644000000000000000000000552111722777314023142 0ustar rootrootStyle2;POLYGON((20.5 39,20 39,19.5 39,19.5 39.5,19 39.5,19 40,19 40.5,93.5 157,93.5 157.5,93 157.5,93 158,92.5 158.5,92.5 159,92 159,92 159.5,91.5 160.5,91 160.5,91 161,90.5 162,90.5 162.5,90.5 163,90 163,90 163.5,90 164.5,89.5 164.5,89.5 165,89.5 165.5,89.5 166,89.5 166.5,89.5 167,89 167,89 167.5,89 168,89 168.5,89 169,89 169.5,89 170,89 171,89 171.5,89 172,89 172.5,89 173,89.5 174,89.5 174.5,89.5 175,90 175.5,90 176.5,90 177,90.5 177,90.5 177.5,90.5 178,91 179,91 179.5,91.5 180,92 180.5,92 181,92.5 181,92.5 181.5,92.5 182,93 182,93 182.5,93.5 182.5,93.5 183,94 183.5,94 184,94.5 184,95 184.5,95 185,96 185.5,96 186,96.5 186,97 186,97 186.5,97.5 186.5,97.5 187,98 187,98 187.5,98.5 187.5,99 187.5,99 188,99.5 188,100.5 188.5,100.5 189,101 189,102 189.5,102.5 189.5,103 189.5,103 190,103.5 190,104 190,104.5 190,105 190.5,105.5 190.5,106 190.5,106.5 190.5,107 190.5,107 191,107.5 191,108 191,108.5 191,109 191,109.5 191,110 191,110.5 191,111 191,111.5 191,112 191,112.5 191,113 191,114 190.5,115 190.5,115.5 190,116 190,116.5 190,117 190,117 189.5,117.5 189.5,118 189.5,119 189,119.5 189,119.5 188.5,120 188.5,120.5 188,121 188,121 187.5,121.5 187.5,122.5 187,122.5 186.5,123 186.5,123.5 186,124 186,124 185.5,124.5 185,125 185,125 184.5,125.5 184,126 184,126 183,126.5 183,126.5 182.5,127 182.5,127 182,127.5 181.5,127.5 181,128 181,128 180.5,128.5 179.5,129 179.5,129 179,129 178.5,129.5 178,129.5 177.5,129.5 177,130 177,130 176.5,130 176,130 175.5,130.5 175,130.5 174.5,130.5 174,130.5 173.5,130.5 173,131 173,131 172.5,131 172,131 171.5,131 171,131 170.5,131 170,131 169.5,131 169,131 168.5,131 168,131 167.5,131 167,130.5 166,130.5 165,130 164.5,130 164,130 163.5,130 163,129.5 163,129.5 162.5,129.5 162,129 161,175 151,175.5 151,175.5 150.5,176 150.5,176 150,176 149.5,175.5 149.5,135 109,125.5 99.5,125.5 99,20.5 39)) Style1;POLYGON((175 150, 20 40, 50 60, 125 100, 175 150)) Style1;POLYGON((130 170,129.615705608065 166.098193559677,128.477590650226 162.346331352698,126.629392246051 158.888595339608,124.142135623731 155.857864376269,121.111404660392 153.370607753949,117.653668647302 151.522409349774,113.901806440323 150.384294391935,110 150,106.098193559677 150.384294391935,102.346331352698 151.522409349774,98.888595339608 153.370607753949,95.8578643762691 155.857864376269,93.3706077539491 158.888595339608,91.5224093497743 162.346331352698,90.3842943919354 166.098193559677,90 170,90.3842943919354 173.901806440323,91.5224093497742 177.653668647302,93.3706077539491 181.111404660392,95.857864376269 184.142135623731,98.8885953396079 186.629392246051,102.346331352698 188.477590650226,106.098193559677 189.615705608065,110 190,113.901806440323 189.615705608065,117.653668647302 188.477590650226,121.111404660392 186.629392246051,124.142135623731 184.142135623731,126.629392246051 181.111404660392,128.477590650226 177.653668647302,129.615705608065 173.901806440323,130 170)) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_linecrossingdirection02.wkt0000644000000000000000000000045611722777314025241 0ustar rootrootStyle2-mediumline;GEOMETRYCOLLECTION(LINESTRING(25 169,89 114,40 70,86 43), POINT(25 169), POLYGON((80.84 41.66,84.66 48.16,86 43,80.84 41.66)) ) Style1-mediumline;GEOMETRYCOLLECTION(LINESTRING(171 154, 20 140, 71 74, 2.99 90.16),POINT(171 154),POLYGON((6.66 84.21,2.99 90.16,8.94 93.83,6.66 84.21)) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_buffer03.wkt0000644000000000000000000000276511722777314022120 0ustar rootrootStyle2;POLYGON((142.928932188135 157.071067811865,144.444297669804 158.314696123025,146.173165676349 159.238795325113,148.049096779839 159.807852804032,150 160,151.950903220161 159.807852804032,153.826834323651 159.238795325113,155.555702330196 158.314696123025,157.071067811865 157.071067811865,158.314696123025 155.555702330196,159.238795325113 153.826834323651,159.807852804032 151.950903220161,160 150,160 50,159.807852804032 48.0490967798387,159.238795325113 46.1731656763491,158.314696123025 44.444297669804,157.071067811865 42.9289321881345,155.555702330196 41.6853038769745,153.826834323651 40.7612046748871,151.950903220161 40.1921471959677,150 40,148.049096779839 40.1921471959677,146.173165676349 40.7612046748871,144.444297669804 41.6853038769745,142.928932188135 42.9289321881345,141.685303876975 44.444297669804,140.761204674887 46.1731656763491,140.192147195968 48.0490967798387,140 50,140 125.857864376269,57.0710678118655 42.9289321881345,55.555702330196 41.6853038769745,53.8268343236509 40.7612046748871,51.9509032201613 40.1921471959677,50 40,48.0490967798387 40.1921471959677,46.1731656763491 40.7612046748871,44.444297669804 41.6853038769745,42.9289321881345 42.9289321881345,41.6853038769746 44.444297669804,40.7612046748871 46.1731656763491,40.1921471959677 48.0490967798387,40 50,40.1921471959677 51.9509032201613,40.7612046748871 53.8268343236509,41.6853038769745 55.555702330196,42.9289321881345 57.0710678118655,142.928932188135 157.071067811865)) Style1-thinline;LINESTRING(50 50,150 150,150 50) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_overlaps03.wkt0000644000000000000000000000125311722777314022471 0ustar rootrootStyle1-alpha;POLYGON (( 140 140, 140 122, 135 105, 126 100, 118 99, 110 94, 100 86, 97 73, 102 59, 98 49, 87 38, 70 30, 55 29, 40 30, 28 38, 20 50, 14 66, 10 84, 6 100, 4 119, 4 143, 6 166, 10 180, 18 191, 28 195, 40 190, 55 189, 67 186, 86 179, 112 165, 124 158, 133 148, 140 140 ), ( 48 177, 40 177, 30 174, 24 166, 22 159, 25 155, 30 153, 40 154, 45 157, 52 162, 53 169, 51 174, 48 177 )) Style2-alpha;POLYGON (( 75 63, 79 50, 87 38, 95 31, 108 25, 124 22, 140 18, 154 11, 166 6, 176 10, 184 21, 188 35, 190 58, 190 82, 193 104, 190 121, 185 139, 178 154, 166 163, 154 171, 139 172, 124 171, 112 165, 96 152, 92 142, 92 126, 86 116, 79 110, 75 104, 72 94, 73 86, 75 76, 75 63 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_isvalid07.wkt0000644000000000000000000000026211722777314022274 0ustar rootrootStyle1;GEOMETRYCOLLECTION (POLYGON (( 10 40, 29 118, 120 118, 180 88, 140 30, 70 10, 10 40 )), POLYGON (( 50 170, 100 190, 160 180, 180 140, 180 90, 120 120, 30 120, 50 170 ))) postgis-2.1.2+dfsg.orig/doc/html/image_src/de9im03.wkt0000644000000000000000000000061011722777314021133 0ustar rootrootStyle1-alpha;POLYGON (( 140 140, 140 122, 135 105, 126 100, 118 99, 110 94, 100 86, 97 73, 102 59, 98 49, 87 38, 70 30, 55 29, 40 30, 28 38, 20 50, 14 66, 10 84, 6 100, 4 119, 4 143, 6 166, 10 180, 18 191, 28 195, 40 190, 55 189, 67 186, 86 179, 112 165, 124 158, 133 148, 140 140 ), ( 48 177, 40 177, 30 174, 24 166, 22 159, 25 155, 30 153, 40 154, 45 157, 52 162, 53 169, 51 174, 48 177 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_centroid03.wkt0000644000000000000000000000022611722777314022444 0ustar rootrootStyle1;POLYGON (( 190 190, 10 190, 10 10, 190 10, 190 20, 160 30, 60 30, 60 130, 190 140, 190 190 )) Style2;POINT(80.2508960573477 113.405017921147) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_issimple02.wkt0000644000000000000000000000015211722777314022457 0ustar rootrootStyle1;GEOMETRYCOLLECTION ( LINESTRING ( 10 190, 130 40, 170 160, 10 10 ), POINT(10 190), POINT(10 10) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_concavehull08.wkt0000644000000000000000000000112211722777314023141 0ustar rootrootStyle2;POLYGON((132 10,119 23,85 35,68 29,66 28,49 42,32 56,22 64,32 110,40 119,36 150,57 158,75 171,92 182,114 184,132 186,146 178,176 184,179 162,184 141,190 122,190 100,185 79,186 56,186 52,178 34,168 18,147 13,132 10)) Style1-thinline;MULTILINESTRING((106 164,30 112,74 70,82 112,130 94,130 62,122 40,156 32,162 76,172 88),(132 178,134 148,128 136,96 128,132 108,150 130,170 142,174 110,156 96,158 90,158 88),(22 64,66 28,94 38,94 68,114 76,112 30,132 10,168 18,178 34,186 52,184 74,190 100,190 122,182 148,178 170,176 184,156 164,146 178,132 186,92 182,56 158,36 150,62 150,76 128,88 118))postgis-2.1.2+dfsg.orig/doc/html/image_src/styles.conf0000644000000000000000000000662712023642045021425 0ustar rootroot# This file describes the styles used to render the png images # The styleName attribute for every style should be unique. # # To use a style, prefix the wkt string with the styleName; i.e. # Style1;POINT(50 50) # # convert -list color [Style] # The default style if no style is specified. styleName = Default pointSize = 6 pointColor = Grey lineWidth = 7 lineColor = Grey polygonFillColor = Grey polygonStrokeColor = Grey polygonStrokeWidth = 0 [Style] # The bottom layer in the rendered WKT image styleName = Style1 pointSize = 6 pointColor = "#00bfff" lineWidth = 7 lineColor = "#00bfff" polygonFillColor = "#00bfff" polygonStrokeColor = "#00bfff" polygonStrokeWidth = 0 [Style] # The bottom layer in the rendered WKT image styleName = Style1-alpha pointSize = 6 pointColor = "#0000ff80" lineWidth = 7 lineColor = "#0000ff80" polygonFillColor = "#0000ff80" polygonStrokeColor = "#0000ff80" polygonStrokeWidth = 0 [Style] # The bottom layer in the rendered WKT image styleName = Style1-thinline pointSize = 6 pointColor = "#00bfff" lineWidth = 3 lineColor = "#00bfff" polygonFillColor = "#00bfff" polygonStrokeColor = "#00bfff" polygonStrokeWidth = 0 [Style] # The bottom layer in the rendered WKT image styleName = Style1-mediumline pointSize = 6 pointColor = "#00bfff" lineWidth = 5 lineColor = "#00bfff" polygonFillColor = "#00bfff" polygonStrokeColor = "#00bfff" polygonStrokeWidth = 0 [Style] # The second layer in the rendered WKT image styleName = Style2 pointSize = 6 pointColor = DarkSeaGreen4 lineWidth = 7 lineColor = DarkSeaGreen4 polygonFillColor = DarkSeaGreen4 polygonStrokeColor = DarkGreen polygonStrokeWidth = 0 [Style] # The second layer in the rendered WKT image styleName = Style2-alpha pointSize = 6 pointColor = "#00ff0080" lineWidth = 7 lineColor = "#00ff0080" polygonFillColor = "#00ff0080" polygonStrokeColor = "#00ff0080" polygonStrokeWidth = 0 [Style] # The second layer in the rendered WKT image styleName = Style2-mediumline pointSize = 6 pointColor = DarkSeaGreen4 lineWidth = 5 lineColor = DarkSeaGreen4 polygonFillColor = DarkSeaGreen4 polygonStrokeColor = DarkGreen polygonStrokeWidth = 0 [Style] # The second layer in the rendered WKT image styleName = Style2-thinline pointSize = 6 pointColor = DarkSeaGreen4 lineWidth = 3 lineColor = DarkSeaGreen4 polygonFillColor = DarkSeaGreen4 polygonStrokeColor = DarkGreen polygonStrokeWidth = 0 [Style] # The third layer in the rendered WKT image styleName = Style3 pointSize = 6 pointColor = yellow lineWidth = 3 lineColor = yellow polygonFillColor = yellow polygonStrokeColor = yellow polygonStrokeWidth = 0 [Style] # The fourth layer in the rendered WKT image styleName = Style4 pointSize = 6 pointColor = olive lineWidth = 3 lineColor = olive polygonFillColor = olive polygonStrokeColor = olive polygonStrokeWidth = 0 [Style] # The fifth layer in the rendered WKT image styleName = Style5 pointSize = 6 pointColor = turquoise lineWidth = 3 lineColor = turquoise polygonFillColor = turquoise polygonStrokeColor = turquoise polygonStrokeWidth = 0 [Style] # The fifth layer in the rendered WKT image styleName = Style6 pointSize = 6 pointColor = red lineWidth = 5 lineColor = red polygonFillColor = red polygonStrokeColor = red polygonStrokeWidth = 0 [Style] # The fifth layer in the rendered WKT image styleName = Style7-smallpoint pointSize = 3 pointColor = orange lineWidth = 5 lineColor = orange polygonFillColor = orange polygonStrokeColor = orange polygonStrokeWidth = 0 postgis-2.1.2+dfsg.orig/doc/html/image_src/st_buffer07.wkt0000644000000000000000000000223111722777314022110 0ustar rootrootStyle2;POLYGON((142.928932188135 157.071067811865,160 150,160 50,159.807852804032 48.0490967798387,159.238795325113 46.1731656763491,158.314696123025 44.444297669804,157.071067811865 42.9289321881345,155.555702330196 41.6853038769745,153.826834323651 40.7612046748871,151.950903220161 40.1921471959677,150 40,148.049096779839 40.1921471959677,146.173165676349 40.7612046748871,144.444297669804 41.6853038769745,142.928932188135 42.9289321881345,141.685303876975 44.444297669804,140.761204674887 46.1731656763491,140.192147195968 48.0490967798387,140 50,140 125.857864376269,57.0710678118655 42.9289321881345,55.555702330196 41.6853038769745,53.8268343236509 40.7612046748871,51.9509032201613 40.1921471959677,50 40,48.0490967798387 40.1921471959677,46.1731656763491 40.7612046748871,44.444297669804 41.6853038769745,42.9289321881345 42.9289321881345,41.6853038769746 44.444297669804,40.7612046748871 46.1731656763491,40.1921471959677 48.0490967798387,40 50,40.1921471959677 51.9509032201613,40.7612046748871 53.8268343236509,41.6853038769745 55.555702330196,42.9289321881345 57.0710678118655,142.928932188135 157.071067811865)) Style1-thinline;LINESTRING(50 50,150 150,150 50) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_buffer01.wkt0000644000000000000000000000204011722777314022100 0ustar rootrootStyle2;POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,141.573480615127 62.2214883490199,135.355339059327 54.6446609406727,127.77851165098 48.4265193848728,119.134171618255 43.8060233744357,109.754516100806 40.9607359798385,100 40,90.2454838991937 40.9607359798385,80.8658283817456 43.8060233744356,72.22148834902 48.4265193848727,64.6446609406727 54.6446609406725,58.4265193848728 62.2214883490198,53.8060233744357 70.8658283817454,50.9607359798385 80.2454838991934,50 89.9999999999998,50.9607359798384 99.7545161008062,53.8060233744356 109.134171618254,58.4265193848726 117.77851165098,64.6446609406725 125.355339059327,72.2214883490197 131.573480615127,80.8658283817453 136.193976625564,90.2454838991934 139.039264020161,99.9999999999998 140,109.754516100806 139.039264020162,119.134171618254 136.193976625564,127.77851165098 131.573480615127,135.355339059327 125.355339059327,141.573480615127 117.77851165098,146.193976625564 109.134171618255,149.039264020162 99.7545161008065,150 90)) Style1-thinline;POINT(100 90) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_issimple03.wkt0000644000000000000000000000017411722777314022464 0ustar rootrootStyle1;GEOMETRYCOLLECTION ( LINESTRING ( 90 190, 120 190, 130 140, 190 50, 70 10, 10 70, 10 150, 90 190 ), POINT(90 190) ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_split04.wkt0000644000000000000000000000017711722777314021776 0ustar rootrootStyle1;LINESTRING(10 10,30 30) Style2;LINESTRING(30 30,190 190) Style3;LINESTRING(15 15,30 30) Style4;LINESTRING(30 30,100 90) postgis-2.1.2+dfsg.orig/doc/html/image_src/Makefile0000644000000000000000000001160712315456245020676 0ustar rootroot# ********************************************************************** # * $Id: Makefile.in # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Kevin Neufeld # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** CC=gcc CFLAGS=-g -O2 -Wall -Wmissing-prototypes -I/usr/local/include CUNIT_LDFLAGS= CUNIT_CPPFLAGS= -I../../../liblwgeom IMAGES= \ ../images/de9im01.png \ ../images/de9im02.png \ ../images/st_azimuth01.png \ ../images/st_azimuth02.png \ ../images/st_buffer01.png \ ../images/st_buffer02.png \ ../images/st_buffer03.png \ ../images/st_buffer04.png \ ../images/st_buffer05.png \ ../images/st_buffer06.png \ ../images/st_buffer07.png \ ../images/st_buffer08.png \ ../images/st_buildarea01.png \ ../images/st_buildarea02.png \ ../images/st_closestpoint01.png \ ../images/st_closestpoint02.png \ ../images/st_centroid01.png \ ../images/st_centroid02.png \ ../images/st_centroid03.png \ ../images/st_centroid04.png \ ../images/st_contains01.png \ ../images/st_contains02.png \ ../images/st_contains03.png \ ../images/st_contains04.png \ ../images/st_contains05.png \ ../images/st_contains06.png \ ../images/st_concavehull01.png \ ../images/st_concavehull02.png \ ../images/st_concavehull03.png \ ../images/st_concavehull04.png \ ../images/st_concavehull05.png \ ../images/st_concavehull06.png \ ../images/st_concavehull07.png \ ../images/st_concavehull08.png \ ../images/st_convexhull01.png \ ../images/st_crosses01.png \ ../images/st_crosses02.png \ ../images/st_crosses03.png \ ../images/st_crosses04.png \ ../images/st_delaunaytriangles04.png \ ../images/st_difference01.png \ ../images/st_dumppoints01.png \ ../images/st_issimple01.png \ ../images/st_issimple02.png \ ../images/st_issimple03.png \ ../images/st_issimple04.png \ ../images/st_issimple05.png \ ../images/st_issimple06.png \ ../images/st_issimple07.png \ ../images/st_isvalid01.png \ ../images/st_isvalid02.png \ ../images/st_isvalid03.png \ ../images/st_isvalid04.png \ ../images/st_isvalid05.png \ ../images/st_isvalid06.png \ ../images/st_isvalid07.png \ ../images/st_isvalid08.png \ ../images/st_isvalid09.png \ ../images/st_linecrossingdirection01.png \ ../images/st_linecrossingdirection02.png \ ../images/st_linecrossingdirection03.png \ ../images/st_linecrossingdirection04.png \ ../images/st_line_interpolate_point01.png \ ../images/st_line_substring01.png \ ../images/st_longestline01.png \ ../images/st_longestline02.png \ ../images/st_longestline03.png \ ../images/st_minimumboundingcircle01.png \ ../images/st_offsetcurve01.png \ ../images/st_offsetcurve02.png \ ../images/st_offsetcurve03.png \ ../images/st_offsetcurve04.png \ ../images/st_offsetcurve05.png \ ../images/st_offsetcurve06.png \ ../images/st_overlaps01.png \ ../images/st_overlaps02.png \ ../images/st_overlaps03.png \ ../images/st_sharedpaths01.png \ ../images/st_sharedpaths02.png \ ../images/st_shortestline01.png \ ../images/st_shortestline02.png \ ../images/st_snap01.png \ ../images/st_snap02.png \ ../images/st_snap03.png \ ../images/st_snap04.png \ ../images/st_snap05.png \ ../images/st_split01.png \ ../images/st_split02.png \ ../images/st_split03.png \ ../images/st_split04.png \ ../images/st_symdifference01.png \ ../images/st_symdifference02.png \ ../images/st_touches01.png \ ../images/st_touches02.png \ ../images/st_touches03.png \ ../images/st_touches04.png \ ../images/st_touches05.png \ ../images/st_touches06.png \ ../images/st_within01.png # Images that are created with dimensions 100x100 IMAGES_RESIZED= \ ../images/de9im03.png \ ../images/de9im04.png \ ../images/de9im05.png \ ../images/de9im06.png \ ../images/de9im07.png \ ../images/de9im08.png \ ../images/de9im09.png \ ../images/de9im10.png \ ../images/de9im11.png \ ../images/de9im12.png \ ../images/de9im13.png OBJS=styles.o generator.o # Build the generator all: generator # generate the images images: $(IMAGES) $(IMAGES_RESIZED) # Command to build each of the .o files $(OBJS): %.o: %.c $(CC) $(CFLAGS) $(CUNIT_CPPFLAGS) -c -o $@ $< # Command to build each of the .wkt files $(IMAGES): ../images/%.png: %.wkt generator styles.conf @./generator $< # Command to resize each of the images $(IMAGES_RESIZED): ../images/%.png: %.wkt generator styles.conf @./generator $< convert $@ -resize 100x100 $@ # Build the main executable generator: ../../../liblwgeom/.libs/liblwgeom.a $(OBJS) $(CC) -o $@ $(OBJS) ../../../liblwgeom/.libs/liblwgeom.a -lm $(CUNIT_LDFLAGS) # Build liblwgeom ../../../liblwgeom/.libs/liblwgeom.a: make -C ../../../liblwgeom liblwgeom.la # Clean target clean: rm -f $(OBJS) rm -f generator rm -f tmp[0-9].png distclean: clean rm -f Makefile images-clean: rm -f $(IMAGES) $(IMAGES_RESIZED) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_convexhull01.wkt0000644000000000000000000000024211722777314023020 0ustar rootrootStyle1;POLYGON((50 5,10 8,10 10,100 190,150 30,150 10,50 5)) Style2;MULTILINESTRING((100 190,10 8),(150 10, 20 30)) Style2;MULTIPOINT(50 5, 150 30, 50 10, 10 10) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_snap04.wkt0000644000000000000000000000026611722777314021603 0ustar rootrootStyle3;MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100))) Style1;LINESTRING (5 107, 54 84, 101 100)postgis-2.1.2+dfsg.orig/doc/html/image_src/st_longestline02.wkt0000644000000000000000000000217011722777314023157 0ustar rootrootStyle2;POLYGON((175 150, 20 40, 50 60, 125 100, 175 150)) Style2-mediumline;POLYGON((130 170,129.615705608065 166.098193559677,128.477590650226 162.346331352698,126.629392246051 158.888595339608,124.142135623731 155.857864376269,121.111404660392 153.370607753949,117.653668647302 151.522409349774,113.901806440323 150.384294391935,110 150,106.098193559677 150.384294391935,102.346331352698 151.522409349774,98.888595339608 153.370607753949,95.8578643762691 155.857864376269,93.3706077539491 158.888595339608,91.5224093497743 162.346331352698,90.3842943919354 166.098193559677,90 170,90.3842943919354 173.901806440323,91.5224093497742 177.653668647302,93.3706077539491 181.111404660392,95.857864376269 184.142135623731,98.8885953396079 186.629392246051,102.346331352698 188.477590650226,106.098193559677 189.615705608065,110 190,113.901806440323 189.615705608065,117.653668647302 188.477590650226,121.111404660392 186.629392246051,124.142135623731 184.142135623731,126.629392246051 181.111404660392,128.477590650226 177.653668647302,129.615705608065 173.901806440323,130 170)) Style1-thinline;LINESTRING(20 40,121.111404660392 186.629392246051) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_contains01.wkt0000644000000000000000000000013111722777314022444 0ustar rootrootStyle1;LINESTRING ( 10 190, 60 80, 130 120, 190 10 ) Style2;MULTIPOINT ( 60 80, 190 10 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_crosses01.wkt0000644000000000000000000000015511722777314022315 0ustar rootrootStyle1;LINESTRING ( 10 190, 60 80, 130 120, 190 10 ) Style2;MULTIPOINT ( 80 170, 120 13, 130 119, 181 142 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_touches01.wkt0000644000000000000000000000025011722777314022302 0ustar rootrootStyle1;POLYGON (( 10 190, 10 70, 80 70, 80 130, 50 160, 120 160, 120 190, 10 190 )) Style2;POLYGON (( 81 110, 140 140, 190 110, 180 40, 140 10, 81 50, 81 70, 81 110 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_concavehull04.wkt0000644000000000000000000000051011722777314023135 0ustar rootrootStyle2;POLYGON((8 6,6 8,6 194,14 194,154 14,154 6,8 6)) Style1-thinline;MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14,150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6,14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130,6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114,14 94,14 74,14 54,14 34,14 14) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_sharedpaths02.wkt0000644000000000000000000000035111722777314023141 0ustar rootrootStyle2;MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),(51 150,101 150,76 175,51 150)) Style5;LINESTRING(151 100,126 156.25,126 125,90 161, 76 175) Style3;MULTILINESTRING((126 156.25,126 125),(101 150,90 161),(90 161,76 175)) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_offsetcurve04.wkt0000644000000000000000000000017611722777314023175 0ustar rootrootStyle2-thinline;LINESTRING(164 1,11.7867965644036 1,1 11.7867965644036,1 195) Style2-thinline;LINESTRING(31 195,31 31,164 31) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_crosses04.wkt0000644000000000000000000000015311722777314022316 0ustar rootrootStyle1;LINESTRING ( 10 190, 60 80, 130 120, 190 10 ) Style2;LINESTRING ( 10 10, 70 30, 110 120, 190 190 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_closestpoint01.wkt0000644000000000000000000000021711722777314023361 0ustar rootrootStyle1;POINT(100 100) Style2;LINESTRING (20 80, 98 190, 110 180, 50 75 ) Style3;POINT(100 100) Style4;POINT(73.0769230769231 115.384615384615) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_within01.wkt0000644000000000000000000000400611722777314022135 0ustar rootrootStyle1;POLYGON((90 50,89.2314112161292 42.1963871193549,86.9551813004515 34.6926627053964,83.2587844921018 27.7771906792159,78.2842712474619 21.7157287525381,72.2228093207841 16.7412155078982,65.3073372946036 13.0448186995486,57.8036128806452 10.7685887838708,50.0000000000001 10,42.1963871193549 10.7685887838708,34.6926627053965 13.0448186995485,27.777190679216 16.7412155078981,21.7157287525382 21.715728752538,16.7412155078982 27.7771906792158,13.0448186995486 34.6926627053963,10.7685887838708 42.1963871193548,10 49.9999999999999,10.7685887838708 57.803612880645,13.0448186995485 65.3073372946035,16.7412155078981 72.222809320784,21.715728752538 78.2842712474618,27.7771906792158 83.2587844921017,34.6926627053963 86.9551813004514,42.1963871193547 89.2314112161292,49.9999999999999 90,57.803612880645 89.2314112161292,65.3073372946035 86.9551813004515,72.222809320784 83.2587844921019,78.2842712474618 78.284271247462,83.2587844921018 72.2228093207842,86.9551813004514 65.3073372946037,89.2314112161292 57.8036128806452,90 50)) Style2;POLYGON((70 50,69.6157056080646 46.0981935596774,68.4775906502257 42.3463313526982,66.6293922460509 38.888595339608,64.142135623731 35.8578643762691,61.1114046603921 33.3706077539491,57.6536686473018 31.5224093497743,53.9018064403226 30.3842943919354,50 30,46.0981935596775 30.3842943919354,42.3463313526982 31.5224093497743,38.888595339608 33.3706077539491,35.8578643762691 35.857864376269,33.3706077539491 38.8885953396079,31.5224093497743 42.3463313526982,30.3842943919354 46.0981935596774,30 49.9999999999999,30.3842943919354 53.9018064403225,31.5224093497742 57.6536686473017,33.3706077539491 61.111404660392,35.857864376269 64.1421356237309,38.8885953396079 66.6293922460509,42.3463313526981 68.4775906502257,46.0981935596774 69.6157056080646,49.9999999999999 70,53.9018064403225 69.6157056080646,57.6536686473017 68.4775906502258,61.111404660392 66.6293922460509,64.1421356237309 64.142135623731,66.6293922460509 61.1114046603921,68.4775906502257 57.6536686473018,69.6157056080646 53.9018064403226,70 50)) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_snap03.wkt0000644000000000000000000000030011722777314021567 0ustar rootrootStyle3;LINESTRING(5 107,26 125,54 84,101 100) Style1;MULTIPOLYGON ((( 26 125, 26 200, 126 200, 126 125, 26 125 ),( 51 150, 101 150, 76 175, 51 150 )), (( 151 100, 151 200, 176 175, 151 100 )))postgis-2.1.2+dfsg.orig/doc/html/image_src/st_shortestline02.wkt0000644000000000000000000000222411722777314023357 0ustar rootrootStyle2;POLYGON((175 150, 20 40, 50 60, 125 100, 175 150)) Style2-mediumline;POLYGON((130 170,129.615705608065 166.098193559677,128.477590650226 162.346331352698,126.629392246051 158.888595339608,124.142135623731 155.857864376269,121.111404660392 153.370607753949,117.653668647302 151.522409349774,113.901806440323 150.384294391935,110 150,106.098193559677 150.384294391935,102.346331352698 151.522409349774,98.888595339608 153.370607753949,95.8578643762691 155.857864376269,93.3706077539491 158.888595339608,91.5224093497743 162.346331352698,90.3842943919354 166.098193559677,90 170,90.3842943919354 173.901806440323,91.5224093497742 177.653668647302,93.3706077539491 181.111404660392,95.857864376269 184.142135623731,98.8885953396079 186.629392246051,102.346331352698 188.477590650226,106.098193559677 189.615705608065,110 190,113.901806440323 189.615705608065,117.653668647302 188.477590650226,121.111404660392 186.629392246051,124.142135623731 184.142135623731,126.629392246051 181.111404660392,128.477590650226 177.653668647302,129.615705608065 173.901806440323,130 170)) Style1-thinline;LINESTRING(140.752120669087 125.695053378061,121.111404660392 153.370607753949) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_isvalid05.wkt0000644000000000000000000000014511722777314022272 0ustar rootrootStyle1;POLYGON (( 10 100, 60 140, 60 190, 61 190, 61 157, 130 170, 190 60, 160 10, 50 20, 10 100 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_buffer04.wkt0000644000000000000000000000113511722777314022107 0ustar rootrootStyle2;POLYGON((142.928932188135 157.071067811865,144.444297669804 158.314696123025,146.173165676349 159.238795325113,148.049096779839 159.807852804032,150 160,151.950903220161 159.807852804032,153.826834323651 159.238795325113,155.555702330196 158.314696123025,157.071067811865 157.071067811865,158.314696123025 155.555702330196,159.238795325113 153.826834323651,159.807852804032 151.950903220161,160 150,160 50,160 40,140 40,140 125.857864376269,57.0710678118655 42.9289321881345,50 35.857864376269,35.857864376269 50,142.928932188135 157.071067811865)) Style1-thinline;LINESTRING(50 50,150 150,150 50) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_offsetcurve05.wkt0000644000000000000000000000050611722777314023173 0ustar rootrootStyle1-thinline;LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,44 16,24 16,20 16,18 16,17 17,16 18,16 20,16 40,16 60,16 80,16 100,16 120,16 140,16 160,16 180,16 195) Style2-thinline;LINESTRING(164 31,46 31,40.2597485145236 32.1418070123307,35.3933982822018 35.3933982822018,32.1418070123307 40.2597485145237,31 46,31 195) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_shortestline01.wkt0000644000000000000000000000023211722777314023353 0ustar rootrootStyle2;POINT(100 100) Style2-mediumline;LINESTRING (20 80, 98 190, 110 180, 50 75 ) Style1-thinline;LINESTRING(100 100,73.0769230769231 115.384615384615) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_crosses02.wkt0000644000000000000000000000020111722777314022306 0ustar rootrootStyle1;POLYGON (( 30 190, 10 100, 10 10, 90 20, 110 70, 80 130, 30 190 )) Style2;MULTIPOINT ( 56 60, 120 13, 130 119, 181 142 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_crosses03.wkt0000644000000000000000000000020011722777314022306 0ustar rootrootStyle1;POLYGON (( 30 190, 10 100, 10 10, 90 20, 110 70, 80 130, 30 190 )) Style2;LINESTRING ( 30 40, 70 50, 120 150, 190 190 ) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_offsetcurve03.wkt0000644000000000000000000000044011722777314023166 0ustar rootrootStyle1-thinline;LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,44 16,24 16,20 16,18 16,17 17,16 18,16 20,16 40,16 60,16 80,16 100,16 120,16 140,16 160,16 180,16 195) Style2-thinline;LINESTRING(164 1,18 1,7.39339828220179 5.39339828220179,5.39339828220179 7.39339828220179,1 18,1 195) postgis-2.1.2+dfsg.orig/doc/html/image_src/styles.c0000644000000000000000000001025711722777314020731 0ustar rootroot/********************************************************************** * $Id: generator.c 3967 2009-05-04 16:48:11Z kneufeld $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Kevin Neufeld * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * * TODO: fix segfault bug caused by a referenced style that doesn't exist in * the .conf file **********************************************************************/ #include #include #include #include #include "styles.h" void getStyles( LAYERSTYLE **headRef ) { char line [128]; FILE* pFile; char *getResults; *headRef = NULL; if ((pFile = fopen("styles.conf", "r")) == NULL) { perror ( "styles.conf: No such file or directory" ); return; } getResults = fgets ( line, sizeof line, pFile ); while ( getResults != NULL ) { // process defined styles while ( (getResults != NULL) && strncmp(line, "[Style]", 7) == 0) { char *styleName = "DefaultStyle"; int pointSize = 5; char *pointColor = "Grey"; int lineWidth = 5; char *lineColor = "Grey"; char *polygonFillColor = "Grey"; char *polygonStrokeColor = "Grey"; int polygonStrokeWidth = 0; getResults = fgets ( line, sizeof line, pFile ); while ( (getResults != NULL) && (strncmp(line, "[Style]", 7) != 0) ) { char *ptr; // loop over all lines until [Style] is reached again if ( (*line != '#') && (ptr = strchr(line, '=')) ) { ptr = trim((++ptr)); if (strncmp(line, "styleName", 9) == 0) styleName = ptr; else if (strncmp(line, "pointSize", 9) == 0) { pointSize = atoi(ptr); free(ptr); } else if (strncmp(line, "pointColor", 10) == 0) pointColor = ptr; else if (strncmp(line, "lineWidth", 9) == 0) { lineWidth = atoi(ptr); free(ptr); } else if (strncmp(line, "lineColor", 9) == 0) lineColor = ptr; else if (strncmp(line, "polygonFillColor", 16) == 0) polygonFillColor = ptr; else if (strncmp(line, "polygonStrokeColor", 18) == 0) polygonStrokeColor = ptr; else if (strncmp(line, "polygonStrokeWidth", 18) == 0) { polygonStrokeWidth = atoi(ptr); free(ptr); } } getResults = fgets ( line, sizeof line, pFile ); } addStyle(headRef, styleName, pointSize, pointColor, lineWidth, lineColor, polygonFillColor, polygonStrokeColor, polygonStrokeWidth); } getResults = fgets ( line, sizeof line, pFile ); } fclose( pFile ); } void freeStyles( LAYERSTYLE **headRef ) { LAYERSTYLE *curr = *headRef; LAYERSTYLE *next; while (curr != NULL) { next = curr->next; free(curr->styleName); free(curr->pointColor); free(curr->lineColor); free(curr->polygonFillColor); free(curr->polygonStrokeColor); free(curr); curr = next; } *headRef = NULL; } void addStyle( LAYERSTYLE **headRef, char* styleName, int pointSize, char* pointColor, int lineWidth, char* lineColor, char* polygonFillColor, char* polygonStrokeColor, int polygonStrokeWidth) { LAYERSTYLE *style = malloc( sizeof(LAYERSTYLE) ); style->styleName = styleName; style->pointSize = pointSize; style->pointColor = pointColor; style->lineWidth = lineWidth; style->lineColor = lineColor; style->polygonFillColor = polygonFillColor; style->polygonStrokeColor = polygonStrokeColor; style->polygonStrokeWidth = polygonStrokeWidth; style->next = *headRef; *headRef = style; } int length( LAYERSTYLE *head ) { int count = 0; LAYERSTYLE *curr = head; while (curr != NULL) { count++; curr = curr->next; } return (count); } LAYERSTYLE* getStyle( LAYERSTYLE *headRef, char* styleName ) { LAYERSTYLE *curr = headRef; while (curr != NULL && (strcmp(curr->styleName, styleName) != 0)) curr = curr->next; return (curr); } char* trim(char* str) { int len; char* result; char* start = str; char* end = strchr(start, '\0'); while (start #include #include #include #include "liblwgeom.h" #include "lwgeom_log.h" #include "styles.h" #define SHOW_DIGS_DOUBLE 15 #define MAX_DOUBLE_PRECISION 15 #define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 2) /* +2 for dot and sign */ // Some global styling variables char *imageSize = "200x200"; int getStyleName(char **styleName, char* line); /** * Writes the coordinates of a POINTARRAY to a char* where ordinates are * separated by a comma and coordinates by a space so that the coordinate * pairs can be interpreted by ImageMagick's SVG draw command. * * @param output a reference to write the POINTARRAY to * @param pa a reference to a POINTARRAY * @return the numbers of character written to *output */ static size_t pointarrayToString(char *output, POINTARRAY *pa) { char x[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1]; char y[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1]; int i; char *ptr = output; for ( i=0; i < pa->npoints; i++ ) { POINT2D pt; getPoint2d_p(pa, i, &pt); sprintf(x, "%f", pt.x); trim_trailing_zeros(x); sprintf(y, "%f", pt.y); trim_trailing_zeros(y); if ( i ) ptr += sprintf(ptr, " "); ptr += sprintf(ptr, "%s,%s", x, y); } return (ptr - output); } /** * Serializes a LWPOINT to a char*. This is a helper function that partially * writes the appropriate draw and fill commands used to generate an SVG image * using ImageMagick's "convert" command. * @param output a char reference to write the LWPOINT to * @param lwp a reference to a LWPOINT * @return the numbers of character written to *output */ static size_t drawPoint(char *output, LWPOINT *lwp, LAYERSTYLE *styles) { char x[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1]; char y1[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1]; char y2[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1]; char *ptr = output; POINTARRAY *pa = lwp->point; POINT2D p; getPoint2d_p(pa, 0, &p); LWDEBUGF(4, "%s", "drawPoint called"); LWDEBUGF( 4, "point = %s", lwgeom_to_ewkt((LWGEOM*)lwp) ); sprintf(x, "%f", p.x); trim_trailing_zeros(x); sprintf(y1, "%f", p.y); trim_trailing_zeros(y1); sprintf(y2, "%f", p.y + styles->pointSize); trim_trailing_zeros(y2); ptr += sprintf(ptr, "-fill %s -strokewidth 0 ", styles->pointColor); ptr += sprintf(ptr, "-draw \"circle %s,%s %s,%s", x, y1, x, y2); ptr += sprintf(ptr, "'\" "); return (ptr - output); } /** * Serializes a LWLINE to a char*. This is a helper function that partially * writes the appropriate draw and stroke commands used to generate an SVG image * using ImageMagick's "convert" command. * @param output a char reference to write the LWLINE to * @param lwl a reference to a LWLINE * @return the numbers of character written to *output */ static size_t drawLineString(char *output, LWLINE *lwl, LAYERSTYLE *style) { char *ptr = output; LWDEBUGF(4, "%s", "drawLineString called"); LWDEBUGF( 4, "line = %s", lwgeom_to_ewkt((LWGEOM*)lwl) ); ptr += sprintf(ptr, "-fill none -stroke %s -strokewidth %d ", style->lineColor, style->lineWidth); ptr += sprintf(ptr, "-draw \"stroke-linecap round stroke-linejoin round path 'M "); ptr += pointarrayToString(ptr, lwl->points ); ptr += sprintf(ptr, "'\" "); return (ptr - output); } /** * Serializes a LWPOLY to a char*. This is a helper function that partially * writes the appropriate draw and fill commands used to generate an SVG image * using ImageMagick's "convert" command. * @param output a char reference to write the LWPOLY to * @param lwp a reference to a LWPOLY * @return the numbers of character written to *output */ static size_t drawPolygon(char *output, LWPOLY *lwp, LAYERSTYLE *style) { char *ptr = output; int i; LWDEBUGF(4, "%s", "drawPolygon called"); LWDEBUGF( 4, "poly = %s", lwgeom_to_ewkt((LWGEOM*)lwp) ); ptr += sprintf(ptr, "-fill %s -stroke %s -strokewidth %d ", style->polygonFillColor, style->polygonStrokeColor, style->polygonStrokeWidth ); ptr += sprintf(ptr, "-draw \"path '"); for (i=0; inrings; i++) { ptr += sprintf(ptr, "M "); ptr += pointarrayToString(ptr, lwp->rings[i] ); ptr += sprintf(ptr, " "); } ptr += sprintf(ptr, "'\" "); return (ptr - output); } /** * Serializes a LWGEOM to a char*. This is a helper function that partially * writes the appropriate draw, stroke, and fill commands used to generate an * SVG image using ImageMagick's "convert" command. * @param output a char reference to write the LWGEOM to * @param lwgeom a reference to a LWGEOM * @return the numbers of character written to *output */ static size_t drawGeometry(char *output, LWGEOM *lwgeom, LAYERSTYLE *styles ) { char *ptr = output; int i; int type = lwgeom->type; switch (type) { case POINTTYPE: ptr += drawPoint(ptr, (LWPOINT*)lwgeom, styles ); break; case LINETYPE: ptr += drawLineString(ptr, (LWLINE*)lwgeom, styles ); break; case POLYGONTYPE: ptr += drawPolygon(ptr, (LWPOLY*)lwgeom, styles ); break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: for (i=0; i<((LWCOLLECTION*)lwgeom)->ngeoms; i++) { ptr += drawGeometry( ptr, lwcollection_getsubgeom ((LWCOLLECTION*)lwgeom, i), styles ); } break; } return (ptr - output); } /** * Invokes a system call to ImageMagick's "convert" command that adds a drop * shadow to the current layer image. * * @param layerNumber the current working layer number. */ static void addDropShadow(int layerNumber) { // TODO: change to properly sized string char str[512]; sprintf( str, "convert tmp%d.png -gravity center \"(\" +clone -background navy -shadow 100x3+4+4 \")\" +swap -background none -flatten tmp%d.png", layerNumber, layerNumber); LWDEBUGF(4, "%s", str); system(str); } /** * Invokes a system call to ImageMagick's "convert" command that adds a * highlight to the current layer image. * * @param layerNumber the current working layer number. */ static void addHighlight(int layerNumber) { // TODO: change to properly sized string char str[512]; sprintf( str, "convert tmp%d.png \"(\" +clone -channel A -separate +channel -negate -background black -virtual-pixel background -blur 0x3 -shade 120x55 -contrast-stretch 0%% +sigmoidal-contrast 7x50%% -fill grey50 -colorize 10%% +clone +swap -compose overlay -composite \")\" -compose In -composite tmp%d.png", layerNumber, layerNumber); LWDEBUGF(4, "%s", str); system(str); } /** * Invokes a system call to ImageMagick's "convert" command that reduces * the overall filesize * * @param filename the current working image. */ static void optimizeImage(char* filename) { char *str; str = malloc( (18 + (2*strlen(filename)) + 1) * sizeof(char) ); sprintf(str, "convert %s -depth 8 %s", filename, filename); LWDEBUGF(4, "%s", str); system(str); free(str); } /** * Flattens all the temporary processing png files into a single image */ static void flattenLayers(char* filename) { char *str; str = malloc( (48 + strlen(filename) + 1) * sizeof(char) ); sprintf(str, "convert tmp[0-9].png -background white -flatten %s", filename); LWDEBUGF(4, "%s", str); system(str); // TODO: only remove the tmp files if they exist. remove("tmp0.png"); remove("tmp1.png"); remove("tmp2.png"); remove("tmp3.png"); remove("tmp4.png"); remove("tmp5.png"); remove("tmp6.png"); remove("tmp7.png"); remove("tmp8.png"); remove("tmp9.png"); free(str); } // TODO: comments int getStyleName(char **styleName, char* line) { char *ptr = strrchr(line, ';'); if (ptr == NULL) { *styleName = malloc( 8 ); strncpy(*styleName, "Default", 7); (*styleName)[7] = '\0'; return 1; } else { *styleName = malloc( ptr - line + 1); strncpy(*styleName, line, ptr - line); (*styleName)[ptr - line] = '\0'; LWDEBUGF( 4, "%s", *styleName ); return 0; } } /** * Main Application. Currently, drawing styles are hardcoded in this method. * Future work may entail reading the styles from a .properties file. */ int main( int argc, const char* argv[] ) { FILE *pfile; LWGEOM *lwgeom; char line [2048]; char *filename; int layerCount; int styleNumber; LAYERSTYLE *styles; char *image_path = "../images/"; getStyles(&styles); if ( argc != 2 || strlen(argv[1]) < 3) { lwerror("You must specify a wkt filename to convert, and it must be 3 or more characters long.\n"); return -1; } if ( (pfile = fopen(argv[1], "r")) == NULL) { perror ( argv[1] ); return -1; } filename = malloc( strlen(argv[1]) + strlen(image_path) + 1 ); strcpy( filename, image_path ); strncat( filename, argv[1], strlen(argv[1])-3 ); strncat( filename, "png", 3 ); printf( "generating %s\n", filename ); layerCount = 0; while ( fgets ( line, sizeof line, pfile ) != NULL && !isspace(*line) ) { char output[32768]; char *ptr = output; char *styleName; int useDefaultStyle; ptr += sprintf( ptr, "convert -size %s xc:none ", imageSize ); useDefaultStyle = getStyleName(&styleName, line); LWDEBUGF( 4, "%s", styleName ); if (useDefaultStyle) { printf(" Warning: using Default style for layer %d\n", layerCount); lwgeom = lwgeom_from_wkt( line, LW_PARSER_CHECK_NONE ); } else lwgeom = lwgeom_from_wkt( line+strlen(styleName)+1, LW_PARSER_CHECK_NONE ); LWDEBUGF( 4, "geom = %s", lwgeom_to_ewkt((LWGEOM*)lwgeom) ); styleNumber = layerCount % length(styles); ptr += drawGeometry( ptr, lwgeom, getStyle(styles, styleName) ); ptr += sprintf( ptr, "-flip tmp%d.png", layerCount ); lwfree( lwgeom ); LWDEBUGF( 4, "%s", output ); system(output); addHighlight( layerCount ); addDropShadow( layerCount ); layerCount++; free(styleName); } flattenLayers(filename); optimizeImage(filename); fclose(pfile); free(filename); freeStyles(&styles); return 0; } postgis-2.1.2+dfsg.orig/doc/html/image_src/st_concavehull06.wkt0000644000000000000000000000044311722777314023144 0ustar rootrootStyle2;POLYGON((26 179,27 177,26 170,24 162,27 157,26 150,24 142,27 137,26 130,24 122,27 117,26 110,24 102,27 97,26 90,24 82,27 77,26 70,24 62,27 57,26 50,24 42,25 41,27 34,27 27,31 27,41 37,54 40,64 38,74 40,84 38,94 40,104 38,114 40,124 38,134 40,154 14,154 6,8 6,6 8,6 194,14 194,26 179))postgis-2.1.2+dfsg.orig/doc/html/image_src/st_line_interpolate_point01.wkt0000644000000000000000000000014411722777314025400 0ustar rootrootStyle2;LINESTRING(25 50, 100 125, 150 190) Style1-thinline;POINT(51.5974135047432 76.5974135047432) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_snap02.wkt0000644000000000000000000000026211722777314021575 0ustar rootrootStyle1;LINESTRING (5 107, 54 84, 101 100) Style3;MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))postgis-2.1.2+dfsg.orig/doc/html/image_src/st_linecrossingdirection03.wkt0000644000000000000000000000043011722777314025232 0ustar rootrootStyle2-mediumline;GEOMETRYCOLLECTION(LINESTRING(25 169,89 114,40 70,86 43), POINT(25 169),POLYGON((78.26 40.98,83.98 50.74,86 43,78.26 40.98)) ) Style1-mediumline;GEOMETRYCOLLECTION(LINESTRING (20 140, 71 74, 161 53), POLYGON ((153.15 48.12, 156.12 60.85, 161 53, 153.15 48.12))) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_isvalid08.wkt0000644000000000000000000000033411722777314022275 0ustar rootrootStyle1-thinline;GEOMETRYCOLLECTION (POLYGON (( 10 40, 42 93, 113 105, 180 86, 140 30, 70 10, 10 40 )), POLYGON (( 50 170, 100 190, 138 182, 149 156, 146 137, 113 129, 58 140, 50 170 )), LINESTRING ( 113 105, 113 129 )) postgis-2.1.2+dfsg.orig/doc/html/image_src/st_contains06.wkt0000644000000000000000000000017311722777314022457 0ustar rootrootStyle1;POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130 )) Style2;LINESTRING ( 99 130, 170 131 ) postgis-2.1.2+dfsg.orig/doc/html/style.css0000644000000000000000000000742511765402240017154 0ustar rootroot/* PostGIS Alternative Docbook CSS | Dane Springmeyer ----------------------------------------------------- */ /* 1. Body ----------------------------------------------------- */ body { font: 90% 'Lucida Grande', Verdana, Geneva, Arial, Helvetica, sans-serif; background: #ffffff; color: #2e2e2e; margin: 2em; padding: 2em; } /* 2. Standard Tags ----------------------------------------------------- */ a {text-decoration: none; color: #418acd; } a:hover, li a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover {color: #e9cb2b; } p,form,td,th,dt,li{font-size:10pt} h1, h2 {color: #282e5b;} h3,h4,th,dt,b {color: #213780;} h1 { font-size: 24px; line-height: 24px; margin-bottom: 24px;} h2 { font-size: 22px; line-height: 22px; margin-bottom: 21px;} h3 { font-size: 16px; line-height: 18px; margin-bottom: 16px;} h4 { font-size: 14px; line-height: 16px; margin-bottom: 14px;} h5 { font-size: 13px; line-height: 10px; margin-bottom: 13px;} table, td {border-collapse: collapse;} /*table, td {border: 1;padding: 0} */ /* 3. Block Formatted ----------------------------------------------------- */ pre, .literallayout { border-right-width: 0px; border-left-width: 0px; border-bottom-width: 2px; border-top-width: 2px; font-family: "DejaVu Sans", "Lucida Grande", "Verdana", Courier, mono; line-height: 16px; border-color: #f7931e; border-style: solid; font-size: 11px; margin-bottom: 10px; margin-top: 10px; overflow: auto; padding: 10px; background: #f8f8f9; -moz-border-radius: 2px; -webkit-border-radius: 2px;} .note { border-left-width: 0px; border-bottom-width: 2px; border-right-width: 0px; border-top-width: 2px; width: 80%; border-color: #a2d545; border-style: solid; font-size: 11px; margin-bottom: 10px; margin-top: 10px; overflow: auto; padding: 10px; background: #e4f7dd; -moz-border-radius: 2px; -webkit-border-radius: 2px;} /* code { border-right-style: solid; border-right-color: #79791a; border-left-color: #79791b; border-left-style: solid; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-top-width: 0px; padding-left: 3px; padding-bottom: 1px; padding-right: 3px; padding-top: 1px; font-family: "Courier New", Courier, Monaco, monospace; color: #fefff7; background: #9b9e96; -moz-border-radius: 2px; -webkit-border-radius: 2px;} */ .programlisting {font-family: "Courier New", Courier, Monaco, monospace;} .warning { border-left-width: 0px; border-bottom-width: 2px; border-right-width: 0px; border-top-width: 2px; width: 80%; border-color: #a2d545; border-style: solid; font-size: 11px; margin-bottom: 10px; margin-top: 10px; overflow: auto; padding: 10px; background: #FFE699; -moz-border-radius: 2px; -webkit-border-radius: 2px;} /* 4. Docbook Specifics ----------------------------------------------------- */ .question {font-weight: bold; color: #213780;} .term { font-weight: bold; color: #38488d;} .term:hover { font-weight: bold; color: #88000f;} .chapter { margin-top: 60px; } .sect1 { margin-top: 50px; } .sect2 { margin-top: 40px; } .sect3 { margin-top: 30px; } .caption p {font-style: italic; font-size: 90%;} .remark { background: #ffff00; } .equation {font-style: italic; font-size: 90%;} .command, .code {font-weight: normal; font-family: "Courier New", Courier, Monaco, monospace; color: #000000;} .styledtable table thead th { border-right-width: 0px; border-left-width: 0px; border-bottom-width: 1px; border-top-width: 0px; border-color: #f7931e; border-style: solid; } .styledtable > table { border-right-width: 0px; border-left-width: 0px; border-bottom-width: 2px; border-top-width: 2px; border-color: #f7931e; border-style: solid; } .styledtable table td,th { color: #000000; font-style: italic; padding-right:10px; padding-left:10px; border-right-width: 0px; border-left-width: 0px; border-bottom-width: 2px; border-top-width: 2px; border-width: 0px;} .pdparam {color: #990000} postgis-2.1.2+dfsg.orig/doc/reference_transaction.xml0000644000000000000000000002326011722777314021430 0ustar rootroot Long Transactions Support This module and associated pl/pgsql functions have been implemented to provide long locking support required by Web Feature Service specification. Users must use serializable transaction level otherwise locking mechanism would break. AddAuth Add an authorization token to be used in current transaction. boolean AddAuth text auth_token Description Add an authorization token to be used in current transaction. Creates/adds to a temp table called temp_lock_have_table the current transaction identifier and authorization token key. Availability: 1.1.3 Examples SELECT LockRow('towns', '353', 'priscilla'); BEGIN TRANSACTION; SELECT AddAuth('joey'); UPDATE towns SET the_geom = ST_Translate(the_geom,2,2) WHERE gid = 353; COMMIT; ---Error-- ERROR: UPDATE where "gid" = '353' requires authorization 'priscilla' See Also CheckAuth Creates trigger on a table to prevent/allow updates and deletes of rows based on authorization token. integer CheckAuth text a_schema_name text a_table_name text a_key_column_name integer CheckAuth text a_table_name text a_key_column_name Description Creates trigger on a table to prevent/allow updates and deletes of rows based on authorization token. Identify rows using <rowid_col> column. If a_schema_name is not passed in, then searches for table in current schema. If an authorization trigger already exists on this table function errors. If Transaction support is not enabled, function throws an exception. Availability: 1.1.3 Examples SELECT CheckAuth('public', 'towns', 'gid'); result ------ 0 See Also DisableLongTransactions Disable long transaction support. This function removes the long transaction support metadata tables, and drops all triggers attached to lock-checked tables. text DisableLongTransactions Description Disable long transaction support. This function removes the long transaction support metadata tables, and drops all triggers attached to lock-checked tables. Drops meta table called authorization_table and a view called authorized_tables and all triggers called checkauthtrigger Availability: 1.1.3 Examples SELECT DisableLongTransactions(); --result-- Long transactions support disabled See Also EnableLongTransactions Enable long transaction support. This function creates the required metadata tables, needs to be called once before using the other functions in this section. Calling it twice is harmless. text EnableLongTransactions Description Enable long transaction support. This function creates the required metadata tables, needs to be called once before using the other functions in this section. Calling it twice is harmless. Creates a meta table called authorization_table and a view called authorized_tables Availability: 1.1.3 Examples SELECT EnableLongTransactions(); --result-- Long transactions support enabled See Also LockRow Set lock/authorization for specific row in table integer LockRow text a_schema_name text a_table_name text a_row_key text an_auth_token timestamp expire_dt integer LockRow text a_table_name text a_row_key text an_auth_token timestamp expire_dt integer LockRow text a_table_name text a_row_key text an_auth_token Description Set lock/authorization for specific row in table <authid> is a text value, <expires> is a timestamp defaulting to now()+1hour. Returns 1 if lock has been assigned, 0 otherwise (already locked by other auth) Availability: 1.1.3 Examples SELECT LockRow('public', 'towns', '2', 'joey'); LockRow ------- 1 --Joey has already locked the record and Priscilla is out of luck SELECT LockRow('public', 'towns', '2', 'priscilla'); LockRow ------- 0 See Also UnlockRows Remove all locks held by specified authorization id. Returns the number of locks released. integer UnlockRows text auth_token Description Remove all locks held by specified authorization id. Returns the number of locks released. Availability: 1.1.3 Examples SELECT LockRow('towns', '353', 'priscilla'); SELECT LockRow('towns', '2', 'priscilla'); SELECT UnLockRows('priscilla'); UnLockRows ------------ 2 See Also postgis-2.1.2+dfsg.orig/ltmain.sh0000644000000000000000000105162712315456230015415 0ustar rootroot # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin|-stdlib=*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 postgis-2.1.2+dfsg.orig/ChangeLog0000644000000000000000000372135512315454075015360 0ustar rootroot2014-03-28 22:10 strk * regress/run_test.pl: Fix extension upgrade call for topology in run_test.pl 2014-03-28 20:11 strk * regress/legacy.sql: Also find uninstall_legacy.sql in :scriptdir, use \cd for 9.1 support 2014-03-28 19:56 robe * NEWS, doc/release_notes.xml: #2690 copy news to doc release notes. Be optimistic we'll release 3/31/2014 2014-03-28 19:21 strk * topology/test/regress/st_createtopogeo.sql: More spatial_ref_sys truncation during test 2014-03-28 19:04 strk * regress/legacy.sql: Have regress/legacy.sql truncate spatial_ref_sys 2014-03-28 19:04 strk * regress/legacy.sql, regress/run_test.pl: Allow using :scriptdir variable in regress tests Have legacy.sql use it to find legacy.sql. The run_test.pl script sets it using pg_config when --extensions switch is given. 2014-03-28 13:04 pramsey * regress/loader/ReprojectPts-pre.sql, regress/regress_ogc.sql, regress/regress_proj.sql: #2687, pass tests when raster/vector are co-loaded 2014-03-28 12:53 strk * extensions/postgis/Makefile.in: Extension "next" is patch-level away (#2684) 2014-03-28 12:34 pramsey * extensions/postgis/Makefile.in, extensions/upgradeable_versions.mk: #2684, upgrade extensions at the patch level 2014-03-26 15:04 pramsey * liblwgeom/lwgeodetic_tree.c: CircNode compare function needs to deference inputs 2014-03-26 10:20 colivier * postgis/lwgeom_in_gml.c, regress/in_gml.sql, regress/in_gml_expected: #2681 fix for 2.1 branch 2014-03-26 10:06 pramsey * NEWS: Add #2619 2014-03-26 09:37 pramsey * liblwgeom/lwgeodetic.c, liblwgeom/lwin_geojson.c: Quiet a pair of llvm warnings 2014-03-26 09:22 pramsey * configure.ac, liblwgeom/lwin_geojson.c, regress/in_geojson.sql, regress/in_geojson_expected: #2619, SIGSEGV in ST_GeomFromGeoJSON with empty list of coordinates 2014-03-25 20:02 bergun * java/jdbc/jtssrc/pom.xml, java/jdbc/pom.xml: #2625 updating pom.xml for 2.1.2 release 2014-03-25 13:35 strk * raster/rt_pg/Makefile.in: rtpostgis_upgrade_21_minor.sql is _not_ same as 20_21 Should fix make check w/out re-breaking #2674 2014-03-25 12:31 pramsey * NEWS: Update with latest changes 2014-03-25 12:26 pramsey * configure.ac: #2539, Check for json-c/json.h presence/usability before json/json.h 2014-03-25 08:34 pramsey * liblwgeom/cunit/cu_tree.c: Remove noise from test 2014-03-25 08:17 pramsey * liblwgeom/cunit/cu_tree.c, liblwgeom/lwgeodetic.c, liblwgeom/lwgeodetic.h, liblwgeom/lwgeodetic_tree.c, liblwgeom/lwgeodetic_tree.h, postgis/geography_measurement_trees.c: #2675, bad handling of multi-geometries in geography tree distance 2014-03-24 17:49 strk * NEWS, utils/postgis_proc_upgrade.pl: Fix missing operator = and hash_raster_ops opclass on raster Closes #2674 2014-03-22 05:29 robe * raster/rt_core/rt_api.h: #2620 allow kFreeBSD to be treated as FreeBSD 2014-03-22 04:29 robe * raster/rt_pg/rtpostgis.sql.in: #2674 missed the operator class hash_raster_ops in last commit 2014-03-22 04:28 robe * raster/rt_pg/rtpostgis.sql.in: #2674 raster missing availability info for some operators and functions used in equality operator 2014-03-18 16:36 strk * .travis.yml: Fix travis build by only installing postgresql 9.1 (#2678) 2014-03-13 21:11 robe * doc/Makefile.in: #2609 topogeo_AddPolygon unnecessary use of DISTINCT 2014-03-10 18:46 robe * topology/sql/populate.sql.in: #2609 topogeo_AddPolygon unnecessary use of DISTINCT 2014-03-09 23:16 robe * doc/using_postgis_dataman.xml: #2558: WKT form(s) of MULTIPOINT documentation make OGC compliant 2014-03-09 18:55 strk * NEWS, configure.ac: Error out at configure time if no SQL preprocessor can be found Closes #2666 2014-03-08 00:51 pramsey * NEWS, liblwgeom/cunit/cu_geodetic.c, liblwgeom/lwgeodetic.c: #2534, st_distance is returning incorrect results for large geographies 2014-03-08 00:43 pramsey * liblwgeom/lwgeodetic.c, liblwgeom/lwgeodetic_tree.c: #2636, Regress ST_Distance_Sphere between 2.1.2dev and 2.0.4 with 2D 2014-03-07 23:58 pramsey * NEWS, liblwgeom/lwgeodetic.c: #2634, regression in sphere distance code 2014-03-07 23:20 pramsey * NEWS, liblwgeom/lwin_geojson.c: #2546, GeoJSON with string coordinates parses incorrectly 2014-03-07 13:27 pramsey * NEWS: Update for #2638 2014-03-06 05:53 pramsey * liblwgeom/cunit/cu_geodetic.c, liblwgeom/g_box.c: #2638, geography ST_Intersects bugginess with Polygon/multilinestring M 2014-03-03 03:01 robe * extensions/postgis/META.json, extensions/postgis/doc/postgis.md, extensions/postgis/sql_bits/remove_from_extension.sql.in, extensions/postgis_extension_helper.sql, extensions/postgis_extension_helper_uninstall.sql, extensions/postgis_tiger_geocoder/META.json, extensions/postgis_tiger_geocoder/doc/postgis_tiger_geocoder.md, extensions/postgis_tiger_geocoder/sql_bits/remove_from_extension.sql.in, extensions/postgis_topology/META.json, extensions/postgis_topology/doc/postgis.md, extensions/postgis_topology/sql_bits/remove_from_extension.sql.in: fix website links to go to postgis.net 2014-02-25 17:54 pramsey * postgis/geography_measurement_trees.c, postgis/gserialized_estimate.c: Fix variable decls in debugs, closes #2650 2014-02-24 10:25 strk * NEWS, postgis/postgis.sql.in: Let users without topology privileges call postgis_full_version() Closes #2655 2014-02-24 07:08 strk * NEWS, topology/sql/sqlmm.sql.in: Drop deprecated calls from topology (#2654) 2014-02-24 06:41 strk * NEWS, topology/sql/export/TopoJSON.sql.in, topology/sql/populate.sql.in, topology/sql/sqlmm.sql.in: Fully qualify calls to topology methods (#2653) 2014-02-23 16:32 strk * utils/postgis_proc_upgrade.pl: Fix AGG signatures with multi-word typenames For example... "double precision". This fixes upgrades involving drop/recreate of aggregates 2014-02-23 16:32 strk * regress/run_test.pl: Fix --extension --upgrade handling 2014-02-23 16:32 strk * regress/tickets.sql: Fix ambiguous query in tickets.sql when raster support is loaded See #2651 2014-02-23 16:09 strk * regress/run_test.pl: Add support for --extension --upgrade in run_test.pl 2014-02-23 15:27 strk * extensions/postgis/Makefile.in: Do not force extension-specific removal of objects on upgrade It should be taken care of by the upgrade scripts themselves 2014-02-22 14:57 strk * raster/rt_pg/Makefile.in, raster/rt_pg/rtpostgis.sql.in: Generate raster upgrade script using postgis_proc_upgrade 2014-02-22 14:57 strk * utils/postgis_proc_upgrade.pl: Make postgis_proc_upgrade ready to deal with rtpostgis.sql 2014-02-22 09:13 strk * NEWS, utils/postgis_proc_upgrade.pl: Soft upgrade: avoid drop/recreate of aggregates that hadn't changed Closes #2560 2014-02-22 09:13 strk * topology/sql/topoelement/topoelement_agg.sql.in: Encode availability of topology aggregates See #2560 2014-02-22 09:13 strk * raster/rt_pg/rtpostgis.sql.in: Encode availability and last change in raster aggregates See #2560 2014-02-22 08:32 strk * NEWS, topology/sql/sqlmm.sql.in: Fully qualify topology.topology (#2648) 2014-02-20 05:46 robe * doc/reference_measure.xml: #2646 typo arithmetric -> arithmetric in ST_Centroid 2014-02-14 03:30 robe * doc/using_raster_dataman.xml: #2576 Error in manual wrt using_raster RT_PLPython 2014-02-14 03:23 robe * doc/reference_constructor.xml: #2582 fix all references to -1 in constructors and change to 0 (SRID Unknown) 2014-02-05 05:25 pramsey * regress/empty.sql, regress/sql-mm-curvepoly.sql, regress/sql-mm-curvepoly_expected: #2396, wrap wkb outputting tests in explicit endianness 2014-02-04 23:17 pramsey * NEWS, postgis/gserialized_estimate.c: #2615, EstimatedExtent (and hence, underlying stats) gathering wrong bbox 2014-02-04 22:43 pramsey * NEWS, postgis/gserialized_estimate.c: #2543, invalid join selectivity error from simple query 2014-02-04 19:44 pramsey * NEWS: #2556 news entry 2014-02-04 19:31 pramsey * regress/tickets.sql, regress/tickets_expected: #2556, regression test 2014-02-04 08:36 strk * doc/extras_topology.xml: Fix ST_ModEdgeSplit documentation (#2633) 2014-02-04 06:30 pramsey * postgis/geography_measurement_trees.c: #2422, geography regression difference ST_DWithin "Fix" actually just removes tolerance-stop from the distance calculation Question of why tolerance stop fails, remains open. 2014-02-04 06:05 pramsey * postgis/geography_measurement_trees.c: Free tree on short circuit 2014-02-04 06:01 pramsey * liblwgeom/lwgeodetic_tree.c, liblwgeom/lwgeodetic_tree.h: Add circtree get point signature 2014-02-04 05:56 pramsey * doc/faq.xml, doc/using_postgis_dataman.xml: Update docs on WKB 2014-02-04 05:56 pramsey * HOWTO_RELEASE: Update SVN urls for osgeo https 2014-02-04 05:47 pramsey * postgis/geography_measurement_trees.c: #2556, ST_Intersects results depending on insert order 2014-01-30 19:17 pramsey * java/jdbc/src/org/postgis/GeometryCollection.java: #2588, GeometryCollection constructor parse defect for sub geometries (POINTM,POLYGONM,...) of GEOMETRYCOLLECTIONM (From bergun) 2014-01-22 16:21 strk * NEWS: Add notice about 2.0.0 having drop the SRID check in operator && 2014-01-17 03:46 dustymugs * NEWS, raster/rt_core/rt_api.c: Fix the inability to open more than ~1024 unique out-db files in one process 2014-01-13 22:49 strk * NEWS, topology/sql/sqlmm.sql.in: Ensure face splitting algorithm uses the edge index (#2610) 2014-01-04 17:45 dustymugs * NEWS, raster/rt_core/rt_api.c: Remove use of void pointers in rt_raster_from_gdal_dataset to prevent void point arithemetics. Ticket #2589 2014-01-01 02:18 robe * doc/extras_topology.xml: #2593: document topology relationship functions intersects and equals. 2013-12-19 17:29 strk * extensions/postgis_tiger_geocoder/Makefile.in: Ensure output dir is created before attempting to write to it See https://travis-ci.org/postgis/postgis/builds/15654853#L1357 2013-12-18 15:54 strk * NEWS, postgis/postgis.sql.in: Do not allow installing postgis twice in the same database (#2580) Checks for the presence of a "postgis_version" function, and if found raises an exception with a message with the schema containing it. 2013-12-07 14:41 dustymugs * NEWS, raster/rt_pg/rt_pg.c, raster/test/regress/rt_reclass.sql, raster/test/regress/rt_reclass_expected: fix parsing issue of range arguments of ST_Reclass. Ticket #2555 2013-11-27 16:03 dustymugs * NEWS, raster/rt_pg/rtpostgis.sql.in, raster/test/regress/rt_asjpeg.sql, raster/test/regress/rt_asjpeg_expected, raster/test/regress/rt_aspng.sql, raster/test/regress/rt_aspng_expected, raster/test/regress/rt_astiff.sql, raster/test/regress/rt_astiff_expected: fix NULL raster handling in ST_AsPNG, ST_AsJPEG and ST_AsTIFF 2013-11-21 17:24 strk * NEWS, topology/sql/topogeometry/simplify.sql.in, topology/test/regress/st_simplify.sql, topology/test/regress/st_simplify_expected: Fix ST_Simplify(TopoGeometry) for hierarchical topogeoms (#2547) 2013-11-21 16:52 strk * doc/extras_topology.xml: Add link from TopoElement to TopoElementArray 2013-11-21 16:52 strk * raster/rt_pg/rtpostgis.sql.in: Fix dangling commutator for raster/geometry OPERATOR ~ (#2532) 2013-11-20 00:17 pramsey * NEWS, postgis/gserialized_gist_2d.c: #2494, Avoid unnecessary memory copy in gserialized_datum_get_box2df_p 2013-11-16 22:35 robe * HOWTO_RELEASE: minor tweaks to how to release 2013-11-16 21:57 robe * extensions/upgradeable_versions.mk: #2544: fix extension script (made a booboo last commit) 2013-11-16 20:01 robe * HOWTO_RELEASE, Version.config, extensions/upgradeable_versions.mk: #2544: change micro from svn to devand clarify how to release docs 2013-11-12 21:40 pramsey * liblwgeom/g_box.c: #2542, build on Centos/ RHEL 5 2013-11-08 19:46 pramsey * NEWS, Version.config: Set for next release 2013-11-08 19:37 pramsey * NEWS, README.postgis, Version.config, extensions/postgis/sql_bits/postgis--unpackaged.sql.in, extensions/postgis_tiger_geocoder/sql_bits/tiger_geocoder--unpackaged.sql.in, extensions/postgis_topology/sql_bits/topology--unpackaged.sql.in: Update all manual bits for 2.1.1 release 2013-11-07 14:57 dustymugs * NEWS, raster/rt_pg/rtpostgis.sql.in, raster/rt_pg/rtpostgis_upgrade_cleanup.sql.in, raster/test/regress/tickets.sql: Add missing operators for raster. Ticket #2532 2013-11-06 16:32 strk * NEWS, postgis/postgis.sql.in: Remove duplicated signatures 2013-11-06 09:46 strk * NEWS, liblwgeom/cunit/cu_split.c, liblwgeom/lwgeom_geos_split.c: Fix small memory leak in lwline_split_by_line (#2528) Thanks Alessandro Furieri for the report and test 2013-11-06 09:42 strk * NEWS: tab to space 2013-11-06 05:12 dustymugs * NEWS, raster/loader/raster2pgsql.c, raster/loader/raster2pgsql.h: added -k to raster2pgsql for skipping band is NODATA check 2013-11-05 19:57 pramsey * postgis/lwgeom_functions_basic.c: #2529, inconsistent behaviour in ST_FlipCoordinates 2013-11-05 18:25 pramsey * ChangeLog, NEWS, README.postgis, doc/release_notes.xml: Update doco for 2.1.1 release 2013-11-05 17:58 pramsey * extensions/postgis_tiger_geocoder/sql_bits, install-sh, postgis, raster/rt_pg, raster/test/cunit, topology, topology/test/regress: Ignore build artifacts 2013-11-05 00:15 pramsey * liblwgeom/lwgeom.c, regress/summary_expected: #2433, put SRIDs on sub-geometries 2013-11-04 23:51 pramsey * liblwgeom/cunit/cu_in_geojson.c, liblwgeom/cunit/cu_surface.c, liblwgeom/cunit/cu_tree.c: Quiet clang/llvm warnings 2013-11-04 23:17 pramsey * configure.ac, liblwgeom/g_box.c, liblwgeom/lwcircstring.c, loader/pgsql2shp-core.c, loader/shpopen.c, postgis/gserialized_gist_2d.c, postgis/gserialized_gist_nd.c, postgis/lwgeom_sqlmm.c: Silence warnings under clang/llvm 2013-11-04 20:48 robe * doc/installation.xml: #2517 change to reflect using 2.1 scripts instead of 2.0 scripts 2013-11-03 02:53 robe * doc/installation.xml: fix xml parse error 2013-11-02 18:26 robe * doc/installation.xml: #2522 document RegExp::Assemble perl dependency 2013-10-30 09:45 strk * NEWS: Reword raster license change NEWS item (#2514) 2013-10-30 09:38 strk * LICENSE.TXT: Clarify licensing of PostGIS core as GPL2+ (#2515) 2013-10-28 19:45 dustymugs * NEWS: wrong ticket 2013-10-28 19:44 dustymugs * NEWS, raster/Makefile.in, raster/loader/Makefile.in, raster/loader/raster2pgsql.c, raster/loader/raster2pgsql.h, raster/macros/ac_proj4_version.m4, raster/rt_core/Makefile.in, raster/rt_core/rt_api.c, raster/rt_core/rt_api.h, raster/rt_pg/Makefile.in, raster/rt_pg/rt_pg.c, raster/rt_pg/rt_pg.h, raster/rt_pg/rtpostgis.sql.in, raster/rt_pg/rtpostgis_drop.sql.in, raster/rt_pg/rtpostgis_legacy.sql.in, raster/rt_pg/rtpostgis_upgrade_cleanup.sql.in, raster/scripts/Makefile.in, raster/scripts/python/Makefile.in, raster/scripts/python/Makefile.rt.sample, raster/scripts/python/genraster.py, raster/scripts/python/ovdump.py, raster/scripts/python/pixval.py, raster/scripts/python/raster2pgsql.py, raster/scripts/python/rtgdalraster.py, raster/scripts/python/rtpixdump.py, raster/scripts/python/rtreader.py, raster/scripts/python/rtrowdump.py, raster/scripts/python/window.py, raster/test/Makefile.in, raster/test/cunit/Makefile.in, raster/test/cunit/cu_band_basics.c, raster/test/cunit/cu_band_misc.c, raster/test/cunit/cu_band_stats.c, raster/test/cunit/cu_gdal.c, raster/test/cunit/cu_mapalgebra.c, raster/test/cunit/cu_misc.c, raster/test/cunit/cu_pixtype.c, raster/test/cunit/cu_raster_basics.c, raster/test/cunit/cu_raster_geometry.c, raster/test/cunit/cu_raster_misc.c, raster/test/cunit/cu_raster_wkb.c, raster/test/cunit/cu_spatial_relationship.c, raster/test/cunit/cu_tester.c, raster/test/cunit/cu_tester.h, raster/test/regress/Makefile.in, raster/test/regress/box3d.sql, raster/test/regress/bug_test_car5.sql, raster/test/regress/check_raster_columns.sql, raster/test/regress/check_raster_overviews.sql, raster/test/regress/rt_addband.sql, raster/test/regress/rt_band_properties.sql, raster/test/regress/rt_bytea.sql, raster/test/regress/rt_dimensions.sql, raster/test/regress/rt_georeference.sql, raster/test/regress/rt_gist_relationships.sql, raster/test/regress/rt_hasnoband.sql, raster/test/regress/rt_isempty.sql, raster/test/regress/rt_pixelsize.sql, raster/test/regress/rt_pixelvalue.sql, raster/test/regress/rt_rotation.sql, raster/test/regress/rt_scale.sql, raster/test/regress/rt_set_band_properties.sql, raster/test/regress/rt_set_properties.sql, raster/test/regress/rt_upperleft.sql, raster/test/regress/rt_utility.sql: Change raster license from v3+ to v2+. Ticket #2516 2013-10-24 19:54 pramsey * utils/postgis_proc_upgrade.pl: #2510,postgis_major_version_check interferes w/ upgrade 2013-10-19 17:20 dustymugs * NEWS, raster/rt_pg/rtpostgis.sql.in: add support for materialized views and foreign tables in raster_columns and raster_overviews. Ticket #2512 2013-10-18 21:32 pramsey * postgis/postgis.sql.in: #2511, geometry_columns doesn't support materialized views or foreign tables 2013-10-18 20:59 pramsey * liblwgeom/lwtree.c, liblwgeom/lwtree.h: Revert accidental code committed to lwtree.* 2013-10-18 20:57 pramsey * liblwgeom/liblwgeom.h.in, liblwgeom/lwalgorithm.c, liblwgeom/lwcircstring.c, liblwgeom/lwtree.c, liblwgeom/lwtree.h, liblwgeom/ptarray.c, regress/tickets_expected: #2463, st_length on curve is on linearized geom 2013-10-16 22:41 pramsey * postgis/postgis.sql.in: #2511, geometry_columns doesn't support materialized views 2013-10-11 01:48 robe * regress/tickets.sql, regress/tickets_expected: #2506 regress failure on 32-bit windows PostgreSQL. More stringent round but also subtract to guarantee they are the same 2013-10-11 01:07 robe * regress/tickets.sql, regress/tickets_expected: #2506 regress failure on 32-bit windows PostgreSQL. Round values so match on all platforms 2013-10-09 14:41 strk * NEWS: Add 2.0.4 block in NEWS file 2013-10-09 14:38 strk * NEWS, loader/pgsql2shp-cli.c: Fix segfault on bogus pgsql2shp call (#2504) 2013-10-09 06:45 strk * NEWS, postgis/postgis.sql.in, topology/topology.sql.in, topology/topology_drop_before.sql.in: Put postgis_topology_scripts_installed() in topology schema (#2502) This was the only topology signature installed in the default schema. The postgis_full_version() function is updated to find it there. 2013-10-08 14:05 strk * NEWS, postgis/postgis_drop_after.sql, raster/rt_pg/rtpostgis_drop.sql.in: Fix upgrades from 2.0 leaving stale function signatures (#2489) 2013-10-07 19:20 pramsey * postgis/gserialized_gist_2d.c: Apply patch from smagen to fix infinite loop in index where NaN geometry appears #2449 2013-10-07 17:55 pramsey * regress/run_test.pl: Filter LOG entries #2499 2013-10-03 03:40 dustymugs * raster/test/regress/rt_dumpvalues.sql, raster/test/regress/rt_dumpvalues_expected: added regression tests for ticket #2493 2013-10-03 03:40 dustymugs * NEWS, raster/rt_pg/rt_pg.c: Fixed behavior of ST_DumpValues(raster, ...) when passed an empty raster 2013-09-30 20:26 robe * extras/tiger_geocoder/tiger_2011/tiger_loader_2011.sql, extras/tiger_geocoder/tiger_2011/tiger_loader_2012.sql, extras/tiger_geocoder/tiger_2011/tiger_loader_2013.sql: #2490 point back to state level zip files (only available in tiger 2010 folder) 2013-09-27 21:17 robe * regress/tickets.sql, regress/tickets_expected: correct typo in ticket # (as I noted in #2396 ) 2013-09-27 16:08 strk * postgis/postgis.sql.in, postgis/sqldefines.h.in: Change deprecation warning to raise a WARNING after 2 version deprecation time I kept the DEBUG for the first deprecating version to keep changes small (no need to change testsuite again) but I really think it should be at least a NOTICE in that case, or nobody would notice. See #2440 2013-09-27 15:22 strk * postgis/postgis.sql.in: Drop misplaced comment 2013-09-27 03:30 robe * regress/tickets.sql, regress/tickets_expected: #2396 big-endian architecture regress failure 2013-09-26 09:47 strk * NEWS: Format! 2013-09-24 21:57 robe * regress/empty.sql, regress/regress.sql, regress/regress_expected, regress/sql-mm-compoundcurve.sql, regress/sql-mm-compoundcurve_expected, regress/sql-mm-curvepoly.sql, regress/sql-mm-curvepoly_expected, regress/tickets.sql, regress/tickets_expected: #2396 liblwgeom tests fail on big-endian architectures (oops copied the wrong tickets file) 2013-09-23 18:25 robe * NEWS, doc/extras_tigergeocoder.xml, doc/xsl/postgis_aggs_mm.xml.xsl: document #2478 support for tiger 2013 2013-09-23 04:53 robe * doc/installation.xml: #2466 point json-c to github loc instead of old 0.9 loc 2013-09-23 04:36 robe * extensions/postgis_tiger_geocoder/Makefile.in, extras/tiger_geocoder/tiger_2011/create_geocode.bat, extras/tiger_geocoder/tiger_2011/create_geocode.sh, extras/tiger_geocoder/tiger_2011/tiger_loader_2011.sql, extras/tiger_geocoder/tiger_2011/tiger_loader_2012.sql, extras/tiger_geocoder/tiger_2011/tiger_loader_2013.sql, extras/tiger_geocoder/tiger_2011/upgrade_geocoder.bat, extras/tiger_geocoder/tiger_2011/upgrade_geocoder.sh: #2478: incorporated Kahif Rasul's trunk fixes and also logic to enable tiger geocoder in 2.1 extension 2013-09-22 02:13 robe * postgis/postgis.sql.in: #2440 -- remove warnings from functions -- (pushing this to a debug level notice) 2013-09-22 02:10 robe * regress/tickets.sql, regress/tickets_expected: #2440 -- remove warnings from functions -- (pushing this to a debug level notice) 2013-09-08 15:13 robe * HOWTO_RELEASE: update to include updating source.html page. Minor other changes reshuffling 2013-09-07 13:25 strk * utils/postgis_restore.pl.in: Clean up restore script (#2471) 2013-09-06 22:52 pramsey * doc/using_postgis_dataman.xml: Splling (#2255) 2013-09-06 16:46 strk * liblwgeom/lwgeom_geos.c: Enhance error messages in lwgeom_intersection and lwgeom_normalize 2013-09-05 19:59 robe * regress/run_test, regress/run_test.pl: #2469 add min_messages=NOTICE so travis doesn't scream 2013-09-05 08:16 robe * .travis.yml: yaml config - not sure why travis is trying to test without yaml config 2013-09-05 07:58 robe * regress/tickets.sql, regress/tickets_expected: #2168 test to test non-commutative fix of geog ST_Distance 2013-09-04 04:37 robe * regress/regress_index_nulls.sql, regress/regress_ogc.sql, regress/tickets.sql: #2467 add min_messages so travis doesn't scream 2013-09-02 16:18 pramsey * postgis/geography_measurement.c: Geog best srid fix, from kashif (#2434) 2013-08-31 15:00 dustymugs * NEWS, doc/reference_raster.xml, raster/rt_pg/rt_pg.c, raster/test/regress/Makefile.in, raster/test/regress/rt_clip_expected, raster/test/regress/rt_elevation_functions_expected, raster/test/regress/rt_intersection_expected, raster/test/regress/rt_pixelascentroids_expected, raster/test/regress/rt_pixelaspoints_expected, raster/test/regress/rt_pixelaspolygons_expected, raster/test/regress/rt_setvalues_array_expected, raster/test/regress/rt_union_expected: Fix behavior of ST_PixelAsXXX functions with regard to exclude_nodata_parameter 2013-08-23 19:57 pramsey * configure.ac: Allow version parser to handle 9.3rc3 2013-08-23 12:04 robe * doc/extras_tigergeocoder.xml: fix typo in function name 2013-08-23 02:47 robe * doc/extras_tigergeocoder.xml: #2446 Drop_Nation_Script doco is wrong 2013-08-22 04:41 robe * extensions/postgis_tiger_geocoder/Makefile.in, extras/tiger_geocoder/tiger_2011/tiger_loader_2012.sql: #2441 Tiger geocoder uses new features only available in Postgres 9.3. Changed to not use CREATE .. IF NOT EXISTS and use DO instead. Also revised extension to upgrade loader (it wasn't before) 2013-08-18 01:16 robe * Version.config, doc/postgis.xml, extensions/upgradeable_versions.mk: bump version to 2.1.1dev 2013-08-18 00:50 robe * doc/release_notes.xml: one more paragraph mark missing 2013-08-18 00:34 robe * doc/release_notes.xml: fix para tag 2013-08-18 00:14 robe * doc/release_notes.xml: fix remaining unbalanced para tags 2013-08-18 00:09 robe * Version.config, doc/postgis.xml, doc/release_notes.xml, extensions/upgradeable_versions.mk: fix unbalanced para, flip version to 2.1.0 2013-08-18 00:03 robe * HOWTO_RELEASE: minor corrections 2013-08-18 00:03 robe * extensions/postgis/sql_bits/postgis--unpackaged.sql.in, extensions/postgis_tiger_geocoder/sql_bits/tiger_geocoder--unpackaged.sql.in, extensions/postgis_topology/sql_bits/topology--unpackaged.sql.in: update unpackaged scripts in prep for 2.1.0 release 2013-08-17 23:51 robe * README.postgis: forgot README.postgis 2013-08-17 23:49 robe * ChangeLog, NEWS, doc/release_notes.xml: update ChangeLog, NEWS in prep for 2.1.0 release 2013-08-16 18:45 nicklas * liblwgeom/measures.c: fix back polyhedralsurface to distance calculations #2431 2013-08-16 00:59 robe * doc/reference_accessor.xml: #2435 ST_Summary document S flag 2013-08-14 07:42 strk * liblwgeom/cunit/cu_ptarray.c, liblwgeom/lwsegmentize.c: lw_segment_side may return any negative number, not just -1 (#2420) Adds other unit tests for line desegmentation excercising quadrant computation. 2013-08-13 23:48 strk * liblwgeom/cunit/cu_ptarray.c, liblwgeom/lwsegmentize.c, regress/tickets.sql, regress/tickets_expected: Fix computation of number of quadrants per arc (#2420) Note: I had to change some tests that expected 3-quadrant curves to be accepted as curvey input to rely on round-trip instead 2013-08-13 23:48 strk * liblwgeom/cunit/cu_ptarray.c, liblwgeom/lwsegmentize.c, regress/tickets_expected: Pick curve control point farther than in the middle Seems to get a good point when doing manual tests... 2013-08-13 22:54 strk * liblwgeom/cunit/cu_ptarray.c, liblwgeom/lwsegmentize.c, regress/tickets.sql, regress/tickets_expected: Make sure to retain first point of curves on linearization (#2427) 2013-08-13 07:25 strk * liblwgeom/cunit/cu_ptarray.c, liblwgeom/lwsegmentize.c: Fix short allocation of edge to curves store (#2425) 2013-08-13 06:53 strk * liblwgeom/lwsegmentize.c, regress/tickets.sql, regress/tickets_expected: Add COMPOUNDCURVE in MULTICURVE support for ST_CurveToLine (#2424) 2013-08-12 18:19 strk * liblwgeom/lwsegmentize.c, regress/tickets.sql, regress/tickets_expected: Require all arc edges to form the same angle (#2423) Note: gives expected result for #183 2013-08-12 09:58 strk * regress/tickets.sql, regress/tickets_expected: Fix ticket reference (it's #2420, not 30) 2013-08-11 18:15 strk * liblwgeom/lwsegmentize.c, regress/tickets.sql, regress/tickets_expected: Require at least 8 edges to define a full circle (#2420) 2013-08-11 08:51 strk * liblwgeom/lwsegmentize.c, regress/tickets.sql, regress/tickets_expected: Fix ST_LineToCurve with input having less than 4 vertices (#2412) 2013-08-10 06:25 robe * extras/tiger_geocoder/tiger_2011/census_loader.sql: #2414 extension not installing census tables 2013-08-10 06:14 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2419: agc_rules loading defaulting to is_custom true instead of false 2013-08-09 07:00 strk * liblwgeom/lwgeom.c, postgis/lwgeom_functions_basic.c, regress/tickets.sql, regress/tickets_expected: Fix ST_Multi with COMPOUNDCURVE and CURVEPOLYGON types (#2415) 2013-08-08 22:54 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: dupe 2934 (give Northwest next id) 2013-08-08 22:31 robe * extras/tiger_geocoder/tiger_2011/tiger_loader_2012.sql: get rid of hard-codings of schemas in sh profile, add logic to create data schema if not present 2013-08-08 06:21 strk * liblwgeom/lwsegmentize.c, regress/sql-mm-circularstring.sql, regress/sql-mm-circularstring_expected: Fix segmentize of collinear curve 2013-08-08 05:19 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2403 force northwest into postdir, fix some other casing issues 2013-08-06 16:01 robe * liblwgeom/cunit/cu_libgeom.c: #2396: change wkb compare to a same check 2013-08-04 16:07 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2404: DISTRICT OF COLUMBIA is not abbreviated 2013-08-03 17:11 robe * Version.config, doc/postgis.xml, extensions/upgradeable_versions.mk: flip branch to rc3 (hopefully we won't need it and can go straight to release) 2013-08-03 17:08 robe * doc/postgis.xml: prep for release of rc2 (I know but too many new tickets closed in rc1 cycle and want to wait for geos) 2013-08-03 16:30 robe * extensions/postgis_tiger_geocoder/sql_bits/mark_editable_objects.sql.in: #2401 logic to mark pagc_rules as editable and for backup save custom rules 2013-08-03 16:10 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2401 What was I thinkng. pagc_rules needs to set existing to is_custom = false so old records are not considered custom 2013-08-03 16:03 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2401 fix typo in add column statement 2013-08-02 16:33 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2401 fix typo 2013-08-02 16:31 robe * extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2401 Add is_custom options to pagc_rules table 2013-08-02 01:30 dustymugs * NEWS, doc/release_notes.xml, doc/using_raster_dataman.xml, doc/xsl/postgis_aggs_mm.xml.xsl: Add note regarding limitation of raster bands only being able to reference the first 256 bands of an out-db raster. Ticket #2111. 2013-07-20 03:20 robe * loader/pgsql2shp-cli.c: #2230 can't dump on windows 64 if schema qualified. Fix by replacing with more modern code (follow same pattern and standardiz naming of variable as shp2pgsql) 2013-07-20 01:42 robe * loader/shp2pgsql-gui.1: #2389 man page for shp2pgsql-gui provided by Mònica Ramírez Arceda and mwanner 2013-07-19 05:51 robe * doc/extras_tigergeocoder.xml, doc/installation.xml, extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql: #2380 backport changes related to PAGC as wwell as tiger doco updates 2013-07-17 14:45 dustymugs * NEWS, raster/rt_pg/rtpostgis.sql.in, raster/test/regress/rt_neighborhood.sql, raster/test/regress/rt_neighborhood_expected: Fix variable datatypes in ST_Neighborhood(). Ticket #2384 2013-07-17 14:04 dustymugs * NEWS, raster/rt_pg/rtpostgis.sql.in: Removed unsafe use of \' from raster message. Ticket #2383 2013-07-14 18:38 strk * topology/test/Makefile.in: GEOS 3.3.8 uses old snapping (#2379) 2013-07-10 11:38 robe * doc/extras_tigergeocoder.xml, doc/installation.xml: 2013-07-10 11:17 robe * doc/extras_tigergeocoder.xml: oops booboo 2013-07-10 11:11 robe * Version.config, doc/postgis.xml, extensions/upgradeable_versions.mk: call this one rc2 with plan it will never be released and we'll go straight to gold after we clean up the news and docs. 2013-07-10 11:07 robe * ChangeLog, HOWTO_RELEASE, NEWS, README.postgis, Version.config, doc/postgis.xml, extensions/upgradeable_versions.mk: prepping for rc1 release 2013-07-10 03:44 robe * extras/tiger_geocoder/README, extras/tiger_geocoder/tiger_2011/README: #2245 Doc patches to tiger 2013-07-10 02:44 robe * doc/extras_tigergeocoder.xml, doc/installation.xml: briefly document pagc in docs and where to get. will flesh out later, but good enough for 2.1 release 2013-07-09 16:37 robe * doc/reference_editor.xml: #2378, document that ST_CollectionExtract and ST_CollectionHomegenize are flawed when dealing with polygons with shared edges 2013-07-09 03:36 pramsey * configure.ac: Allow build to work with --libintl-prefix and other configure directives 2013-07-08 06:57 robe * doc/reference_lrs.xml: get rid of deprecated ST_Line_Interpolate_Point in code examples 2013-07-05 10:45 strk * liblwgeom/cunit/cu_clean.c, liblwgeom/lwgeom_geos_clean.c: Backport ST_MakeValid memory leak fix (#2307) 2013-07-02 22:34 pramsey * liblwgeom/lwgeom_geos_clean.c, regress/tickets.sql, regress/tickets_expected: #2307, add test and comment on lwgeom_free 2013-07-02 21:51 robe * doc/html/image_src/st_azimuth01.wkt, doc/html/image_src/st_azimuth02.wkt, doc/reference_measure.xml: #876 ST_Azimuth doc patch 2013-07-02 20:12 pramsey * NEWS, configure.ac, topology/test/Makefile.in: #2371 Support GEOS versions with more than 1 digit in micro 2013-06-28 13:58 strk * postgis/lwgeom_in_kml.c, regress/in_kml.sql, regress/in_kml_expected: Support parsing KML with space between digits and comma (#2372) 2013-06-25 14:40 dustymugs * configure.ac: Comment out call for gdal-config --dep-libs as it shouldn't be necessary. 2013-06-25 13:50 strk * configure.ac, topology/test/Makefile.in, topology/test/regress/topogeo_addlinestring_expected, topology/test/regress/topogeo_addlinestring_expected_newsnap, topology/test/regress/topogeo_addlinestring_expected_oldsnap: Base expected TopoGeo_addLinestring output on GEOS version (#2368) 2013-06-22 02:39 robe * Version.config, doc/postgis.xml, extensions/upgradeable_versions.mk: start rc1dev cycle and switch docs back to dev site 2013-06-22 02:37 robe * ChangeLog, HOWTO_RELEASE, NEWS, Version.config, doc/postgis.xml, extensions/upgradeable_versions.mk: update ChangeLog and prepare for tagging 2.1.0beta3 2013-06-21 15:45 strk * configure.ac: Do not override JSON_LDFLAGS, fixing --with-jsondir usage 2013-06-20 22:22 strk * NEWS, configure.ac: Add support for libjson-c 0.10+ (#2213) 2013-06-20 06:35 robe * .: branch in prep for beta3 2013-06-20 06:24 robe * #2336 state level regex wget is too greedy and pulling all states when KS is chosen 2013-06-13 15:26 dustymugs * Fixed handling of schema name when adding overview constraints. Ticket #2359 2013-06-11 22:52 dustymugs * Have cleanup before calls to elog(ERROR, ...) 2013-06-11 22:52 dustymugs * Grammar fixes for error messages (active vs passive) 2013-06-08 20:28 robe * #2356: quick fix for extensions not building anymore because of raster upgrade file change from rtpostgis_upgrade_20_minor.sql to rtpostgis_upgrade_20_21.sql Also got rid of some commented out code 2013-06-08 20:09 robe * Get rid of postgis_drop_before for extension upgrade -- we don't need it any more after #2334 2013-06-07 17:39 pramsey * #2351, st_distance between geographies wrong 2013-06-05 22:35 pramsey * Ignore generated sfcgal.sql 2013-06-05 22:34 pramsey * Ignore generated makefile 2013-06-05 21:31 pramsey * #2315, geography_distance_uncached: variable ‘tolerance’ set but not used 2013-06-05 21:01 pramsey * #2168, ST_Distance is not always commutative 2013-06-05 20:38 pramsey * #2165, ST_NumPoints regression failure with CircularString 2013-06-05 18:11 pramsey * #2307, ST_MakeValid outputs invalid geometries 2013-06-04 19:18 dustymugs * Added raster upgrade path from 2.0 to 2.1. Ticket #2348 2013-06-04 16:26 strk * Fix spelling errors in st_makevalid documentation Fixes a couple of spelling errors, and use the full word 'without' instead of the contraction 'w/out'. 2013-06-04 16:22 strk * Renew the COPYING gpl-2.0 with last version from gnu.org 2013-06-04 14:13 strk * Let DO commands from SQL drop files end up in final upgrade script Should fix upgrade path from 2.0 to 2.1 (#2334) 2013-06-03 20:26 strk * Turn lwgeom_backend_switch into a static function 2013-06-03 17:45 strk * Another couple of warnings gone 2013-06-03 08:53 strk * More unused variables and functions warnings cleaned 2013-06-03 08:26 strk * Remove warnings from liblwgeom These are mostly unused variables 2013-06-01 11:54 mcayland * Fix "array subscript is above array bounds" gcc build warnings on trunk using a suitable pointer and cast. 2013-05-30 22:16 strk * Update expectances after GEOSSnap fixes (#2346) 2013-05-30 17:10 dustymugs * Alphabetize built-in map algebra callback functions 2013-05-27 16:04 strk * Actually use the --strip-trailing-cr switch, do not check it only 2013-05-27 07:03 strk * Use system diff only if it knows how to strip trailing CR (#2344) 2013-05-25 18:14 strk * Not all args with a dash are options, only those starting with one 2013-05-25 18:10 strk * Use system diff when available (my implementation is horrible) 2013-05-25 16:58 strk * Cleanly handle unsupported switches 2013-05-25 16:49 strk * Use consistent formatting for the NEWS file 2013-05-25 16:47 strk * Fix swapped obtained/expected in regression failure report 2013-05-24 17:27 dustymugs * Refactored use of out-db rasters for regression tests 2013-05-24 17:27 dustymugs * Removed unnecessary test due to introduction of ST_FromGDALRaster() 2013-05-24 06:29 robe * hardcode minor for now fix later, get rid of old links 2013-05-24 04:42 robe * add Natural Resources Canada (supporting Lidar point cloud) 2013-05-24 04:24 robe * this may not work 2013-05-24 04:13 robe * 2013-05-24 04:13 robe * 2013-05-24 04:11 robe * minor edit 2013-05-23 22:02 dustymugs * Fixed issues caught by clang 2013-05-23 20:21 robe * replace defunct credit reference with credits_other_contributors 2013-05-23 19:16 robe * oops forgot beginning tag 2013-05-23 04:34 robe * credit past is taking up too much prime real estate relegate past contributors to other section, add missing corporate sponsor Palantir Technologies (funded geography and funding point cloud), minor updates to bios, alphabetize core contributors otherwise have to go by relevance and get into hissing fights 2013-05-22 20:24 strk * Avoid (srf()).* construct, known to invoke srf() for each out field Should slightly improve performances of TopoGeo_addLinestring (in turn used by toTopoGeom) 2013-05-20 10:41 robe * #2185: failure on 64-bit windows edb. In event of parse error return PG_RETURN_NULL() instead of forcing functions not to cache (revert last sugar coat change) 2013-05-20 00:02 robe * move Bborie Park up to PSC section and augment bio on all the work he's been doing 2013-05-19 19:01 robe * #2185: bah still crashes sometimes on 9.2 -- better just remove teh immutable entirely fromt hese functions. No one should be suing these anyway since they are deprecated 2013-05-19 18:41 robe * #2185: bandage for 9.2 EDB x64 basically set all these SQL functions to have a cost of 1 (like the others) so they rarely will ever cache. It's super sugar coating the issue -- there is something I feel wrong with our parser that it's properly cleaning on error and corrupting shared memory when things are cached. but at least regress.sql now passes under 9.2 edb 64 2013-05-19 15:37 robe * #2332 ammendment correct the note to note we are no longer just wrapping the otehr function 2013-05-19 13:01 robe * #2332 windows 64 EDB crasher on invalid wkb using ST_GeomFromWKB - fix by using similar logic to go ST_GeomFromEWKB and skipping intermediary call. 2013-05-18 21:07 strk * Use finite() instead of isfinite() The former is also already used under postgis/ so we already rely on it. The latter is been reported to be unavailable on Solaris. 2013-05-17 22:53 strk * Ensure local liblwgeom and libpgcommon includes are scanned first 2013-05-16 12:37 robe * clarify soft upgrade requirement for PostGIS 2.0 2013-05-15 23:55 dustymugs * Added SFCGAL version output 2013-05-14 22:38 dustymugs * Allow correct handling of sect2 tags in chunked html 2013-05-14 21:03 robe * #2329: fix bug in where condition of backup 2013-05-14 20:42 dustymugs * Fixed Raster Processing section 2013-05-14 18:52 dustymugs * Reorganized the entire Raster Processing section. Lets see if this makes things easier to find... or not. 2013-05-14 14:32 dustymugs * Minor tweaks to ST_ColorMap() doc 2013-05-14 12:57 robe * alphabetize raster processing section - impossible to find stuff otherwise 2013-05-14 12:10 robe * #2326: describe behavior of having no non-datavalue as by design. Also change all examples to explicitly specify band (though we have only 1 band anyway) for anal clarity. (forgot edits in last commit 2013-05-14 12:08 robe * #2326: describe behavior of having no non-datavalue as by design. Also change all examples to explicitly specify band (though we have only 1 band anyway) for anal clarity. 2013-05-13 09:42 strk * Revert changes in test for wmsservers clients Augment min client messages to ERROR so that new deprecation warnings don't need to be expected. 2013-05-13 06:45 robe * fix typo in ST_ColorMap query 2013-05-13 04:14 robe * dustymugs must have made a correction to pseudo_color -- no black background anymore, also add in visualizations for new named color ramps and liink fromST_AsPNNG TOST_COLRMap 2013-05-12 19:40 colivier * #2323. Commit it and br .po for sfcgal doc 2013-05-12 08:43 colivier * #2323. Add reference_sfcgal.xml.pot 2013-05-12 04:19 robe * bump trunk to 2.1.0beta3dev 2013-05-12 03:08 robe * switch download location to downloads.osgeo.org 2013-05-12 03:05 robe * prep for beta2 tagging 2013-05-12 02:27 robe * #1898, #2322 move geos functions in lwtin.c to lwgeom_geos.c to prevent unhealthy dependency on geos (for loader tools and also image generator), roll back change to cunit for loader (the geos includes). bump up version number to beta2dev 2013-05-11 16:05 robe * one more try 2013-05-11 15:55 robe * try again. committed obsolete version last time. 2013-05-11 15:50 robe * fix booboo 2013-05-11 15:46 robe * update version number to beta1 in prep for tagging, upgrade from old dev, amendments to how to release, rebuild of unpackaged scripts 2013-05-11 15:32 robe * change 3d icons, better distinction between required and enhnaced, minor grammar correction 2013-05-11 13:24 colivier * Related to #2321. SFCGAL doc entry in installation.xml. 2013-05-11 07:47 colivier * #2319 fix. Update SFCGAL regress tests after #1994 functions renaming 2013-05-11 05:20 robe * have sfcgal function appear in special index and also flag if a function requires sfcgal in matrix 2013-05-11 03:18 robe * update screen outputs 2013-05-11 02:34 robe * missed one comment 2013-05-11 02:32 robe * repeat create extension instructions in short -- heck its shorter than the crap we have listed. Also correect compile instructions (with-raster and -with-topology no longer need stating) get rid of other obsolete statements 2013-05-11 02:14 robe * update ReadMe to include SFCGAL and preferred versions of GEOS/GDAL/CGAL. Put pretty anchors in install so doesn't create hard to bookmark numbered anchors. 2013-05-11 01:56 robe * update change log in preparation for beta1 release 2013-05-10 22:27 dustymugs * Added more predefined color ramps for ST_ColorMap(raster). Removed RGB <-> HSV colorspace conversion as it sometimes resulted in strange answers when interpolating. 2013-05-10 22:27 dustymugs * Remove noisy info message. A big source of confusion. Ticket #2309 2013-05-10 17:17 colivier * cf #2318, add a optional additional version parameter in ST_ForceSFS, handle both 1.1 and 1.2. default is 1.1 2013-05-10 16:23 colivier * Use ST_MinkowskiSum rather than ST_Minkowski userland. 2013-05-10 16:17 colivier * add a flag for SFCGAL function cf #2317. Remove useless ST_MakeSolid doc entry 2013-05-10 15:00 strk * ST_Force_XXX renamed to ST_ForceXXX 2013-05-10 13:24 colivier * Update NEWS related to #2254 and #1823 2013-05-10 13:02 colivier * Change ST_force_sfs to ST_ForceSFS, also in ST_ConcaveHull calls... 2013-05-10 11:43 colivier * Change ST_force_sfs to ST_ForceSFS 2013-05-10 11:40 colivier * output COLLECTION of Polygon for TIN and PolyhedralSurface, for ST_ForceSFS (instead of MultiPolygon). Thanks to Sandro for these input 2013-05-10 10:47 colivier * Fix #2314. Add a unit test for postgis_sfcgal_version 2013-05-10 07:51 strk * Fix more compiler warnings There are still some that would be nice to fix, but it's mostly the array subscript is above array bounds one 2013-05-10 07:43 robe * link to ST_NumBands 2013-05-10 07:42 robe * example of a custom color map 2013-05-10 07:17 strk * Fix compiler warnings in lwgeom_functions_analytic 2013-05-10 07:06 strk * Fix implicit declaration of function 'tolower' warning 2013-05-10 07:00 colivier * Related to #2313 2013-05-10 06:57 robe * #2290 provide visual example of color map 2013-05-10 00:09 dustymugs * Added generated sfcgal files 2013-05-10 00:09 dustymugs * Addition of ST_ColorMap(raster). Ticket #2290 2013-05-09 23:46 dustymugs * Prevent compile error for when CGAL isn't wanted. 2013-05-09 22:12 colivier * add st_force_sfs doc 2013-05-09 19:38 colivier * Add SFCGAL support cf #2254. Include SFCGAL support, postgis backend handling (GEOS/SFCGAL). Regress tests, documentation prototypes and also additional force_sfs function. 2013-05-09 14:22 robe * update extension install to include tiger geocoder and some helpful commands you can run from psql 2013-05-09 09:24 strk * Fix potential access to uninitialized value It would have happened on malformed COMPOUNDCURVE (unlikely). Hushes compiler warning. 2013-05-09 06:34 robe * start accounting for more raster helper types - addbandarg etc. 2013-05-08 20:37 pramsey * #2298, ST_AsGML geography crashable with monkey inputs 2013-05-08 05:18 robe * #2242: Clarify behavior of ST_Union with NULLS 2013-05-08 05:05 robe * put full version number on st_tpi, st_tri, st_roughness 2013-05-07 23:04 dustymugs * Commented out debug call to non-existant function nd_stats_to_grid(). Ticket #2282 2013-05-07 15:39 dustymugs * Added ST_TRI(raster). Ticket #2164. Thanks to Nathaniel Clay for writing the function and required docs and regression tests. 2013-05-07 15:39 dustymugs * Added ST_Roughness(raster). Ticket #2302. Thanks to Nathaniel Clay for writing the function and required docs and regression tests. 2013-05-07 15:39 dustymugs * Added ST_TPI(raster). Ticket #2163. Thanks to Nathaniel Clay for writing the function and required docs and regression tests. 2013-05-07 15:32 robe * try again 2013-05-07 15:00 robe * put in author info ePub just shows unknown for author (annoying). Move editor into authorgroup. Also put in productname and number 2013-05-07 06:05 robe * fix PGCONFIG (change to @PG_CONFIG@ ) to be consistent with configure variable change. 2013-05-06 08:30 strk * Ensure local liblwgeom dir is added first to include path in loader/ 2013-05-06 07:58 robe * Add GEOS to compile cunit flags of shp2pgsql to prevent error in #1898 2013-05-06 06:48 robe * #1898: Nathan Wagner's patch that adds a flag 2 to allow ST_DelaunayTriangles to dump out a TIN. Just commit and see if winnie has same issue with shp2pgsql-gui checks 2013-05-05 22:35 robe * #1818 slight doc change move the FromGeoHash family to constructor section and link back to ST_GeoHash output and amend credits to Jason Smith 2013-05-05 16:34 robe * #2118: add enhanced note to ST_Boundary (to note Nathan Wagner ST_Triangle support feature) 2013-05-05 16:24 robe * #2118: ST_Boundary support for Triangle type 2013-05-05 01:37 robe * change output naming of epub to be consistent with pdf and also try to add in the css include 2013-05-04 20:15 robe * bah dbtoepub doesn't understand includes 2013-05-04 20:04 robe * switch back to rout but attempt a -I include 2013-05-04 19:42 robe * change epub to be built in html so relative search for images doesn't break, fix deprecated links 2013-05-04 16:59 robe * #2204: regina programming in dark trying to put in epub build logic 2013-05-04 13:54 robe * change log tables generated to have 21 in name (topology garden test is far from done) 2013-05-04 13:18 robe * #2295 Nathan Wagner patch to support for dumping circular strings in dump points 2013-05-04 01:16 robe * #2293: patch to throw an error for curved geoms on ST_DumpPoints rather than crash. 2013-05-03 05:54 robe * #1292 commit patch ST_SnapToGrid returns a value of of range 2013-05-03 04:45 robe * #1818 credit updates J. Smith (also fix web link in CREDITS file) 2013-05-03 04:12 robe * #1818: geohash one more file forgot to commit. 2013-05-03 04:05 robe * #1818: oops forgot to add the tests 2013-05-03 04:04 robe * #1818: geohash patch hashbox to geom 2013-05-02 12:03 robe * #2262 change box cast from implicit to assignment 2013-05-02 12:00 robe * add 2.0.3 and 2.1 sections, break out 2.1 changed from new 2013-05-01 13:48 robe * ban strk's annoying warning note about using deprecated functions 2013-05-01 05:51 robe * revise unpackaged to include pagc stuff 2013-05-01 05:05 robe * fix formatting was causing miss parsing of zips 2013-04-30 03:39 robe * one more clarification 2013-04-30 03:35 robe * clarify under what conditions you can compile without GDAL 2013-04-29 05:31 robe * #2279 fix typo got smallint and int4 confused 2013-04-28 21:27 robe * #2279: fix inability to upgrade from 2.0 to 2.1 by renaming old geog/geom selectivity functions to new name (if they are currently used) aand then allowing the standard upgrade to steam roll over the definitions. 2013-04-26 14:47 dustymugs * Added ST_Summary(raster). Ticket #2280 2013-04-25 10:07 robe * updates to instructions more coming though should probably just put n onlin documentation 2013-04-25 10:07 robe * #2260: revise to use new API structure of pagc standardizer 2013-04-24 15:54 dustymugs * Added better handling of file paths for msys 2013-04-24 03:34 robe * Add update path from 2.0.3 to 2.1.0SVN 2013-04-23 23:46 dustymugs * Added parameter to ST_AsBinary(raster) to permit out-db bands to be treated as in-db. Ticket #2222 2013-04-23 21:48 pramsey * #2275, revert configure argument with-pgconfig 2013-04-23 21:03 pramsey * #2277, potential segfault condition removed 2013-04-23 20:37 dustymugs * Added test for loading out-db rasters in raster2pgsql 2013-04-23 19:32 dustymugs * Explicitly initialize memory as valgrind complains 2013-04-23 19:32 dustymugs * Added bash versions of "bootstrapping" code for rt_addband test 2013-04-23 19:32 dustymugs * Addition of ST_AddBand(raster, ...) for out-db bands. Ticket #2276 2013-04-17 12:46 robe * oops had wrong data type for tables 2013-04-17 06:58 strk * Properly escape dashes in man pages Patch by Markus Wanner 2013-04-16 18:23 dustymugs * Added numerical parameters version of ST_SetGeoReference(raster). Ticket #613 2013-04-16 15:21 pramsey * Change PGCONFIG to PG_CONFIG 2013-04-16 07:40 strk * Link to wikipedia article about GeoHash from ST_GeoHash 2013-04-15 21:40 dustymugs * Emit warning when changing a raster's georeference if raster has any out-db bands. Also updated docs with note. Ticket #2244 2013-04-15 21:14 robe * add new use_pagc_addess_parser switch in list 2013-04-15 08:02 strk * Add -s to usage string of postgis_restore.pl. See #2264 2013-04-13 18:26 mcayland * Associated CLI fix for #2272: shp2pgsql-gui crashes when given filenames with dots. After some experimentation, the best solution seems to be to use a separate scan to remove the extension before finding the non-path section when deriving the table name. 2013-04-13 17:36 mcayland * Fix for bug #2272: shp2pgsql-gui crashes when given filenames with dots. This was a combination of two bugs: firstly, we weren't initialising the state variable field_names to NULL, and so if the variable happened to be filled with junk and we were unable to import a shape file, we would end up freeing a random pointer. Secondly, shapelib tries to be clever and strip off any file extension by searching for a "." character from the end of the filename, hence causing the truncation of the filename. Resolve this by leaving the .shp/.dbf extension from the file selector in the filename string so that shapelib does the right thing. 2013-04-13 07:15 robe * #2260 - fix normalize discrepancy in pagc handling service drives 2013-04-12 18:46 pramsey * #945, clean up build artefacts and upgrade script 2013-04-12 18:33 pramsey * #945, remove the old selectivity code, now no longer being called 2013-04-12 16:20 strk * Rewrite the postgis_restore.pl improvement line The commit message was also wrong, it's not the dump having postgis in custom schema but the new install... 2013-04-12 16:10 strk * postgis_restore.pl support for dump with postgis in custom schema See #2264 -- thanks Thomas (frost242) 2013-04-11 20:14 dustymugs * Prevent parallel make of raster. Ticket 2271 2013-04-10 20:06 robe * give license faq a permanent pretty anchor. 2013-04-09 23:45 dustymugs * Fix expression-based ST_MapAlgebra resulting in regression failures on some machines 2013-04-09 22:43 strk * Fix access to random memory during ANALYZE The bug was introduced with previous commit, see #2269 As part of this fix, the stawidth field of pg_statistics is changed to represent the average _compressed_ size rather than the average _uncompressed_ size of non-null geometry values. This may have some consequence on the planner (not known at time of commit). 2013-04-09 18:35 strk * Avoid uselessly detoasting full geometries on ANALYZE (#2269) 2013-04-06 18:14 dustymugs * Removed debug statements 2013-04-06 18:11 dustymugs * GBOX variables not initialized for empty geometries. Ticket #2257 2013-04-05 14:37 robe * change to use some elements from parse_address 2013-04-05 14:28 robe * add pagc regression testing. Will upload the regress output once I look into the regression failures 2013-04-04 06:46 robe * #2192: doco patch 2013-04-03 22:53 robe * #2258 get rid of explicit public (so people can install postgis in any schema they want), but insure we use security invoker to call new st_esimatedExtent to prevent malicious code injection. 2013-04-03 13:39 robe * mark pagc lookup tables is_custom = true as editable 2013-04-03 12:54 robe * #2261: fix creation of next next upgrade script, add null protection for pagc_normalize_address 2013-04-02 22:22 robe * #2193: implement upgrade next next functionality hack, implement swap -- SELECT set_geocode_setting('use_pagc_address_parser','true'); will cause geocoder to use pagc address parser instead of build in normalizer 2013-04-02 20:51 robe * #2193: get rid of redundant call. 2013-04-02 20:46 robe * #2193 integrate pagc in extension (loads helper tables) and also upgrade and create scripts, modify tables some more. Still need to put in another folder with c files for compile and in manual on how to enable. 2013-04-02 15:07 robe * #2193: pretype (not ideal because norm_addy doesn't have slot for it so just stuff in streettypeabbrev ) .norm_addy should ideally be changed. 2013-04-02 14:57 robe * forgot the pre direction 2013-04-02 14:43 robe * First step of integrating the pagc normalizer, add the tables and wrapper function that return a norm_addy object and also a geocode_setting option to swap out old address parser with pagc 2013-03-31 01:55 robe * #2018 mark ST_Dwithin as also supporting curves. Just taking rpamsey's word for this -- will test later. 2013-03-30 01:19 robe * #2018: highlight that curves are now supported - examples forthcoming. Also broke geography into separate example section 2013-03-29 20:38 pramsey * #2018, Remove old bruteforce function and replace with new one. 2013-03-29 20:37 dustymugs * Set CFLAGS in loader cunit tests so that mingw can run tests 2013-03-29 16:47 dustymugs * Removed commented out variants of ST_MapAlgebra removed in r11222. 2013-03-29 16:36 dustymugs * Added news about Ticket #2133 2013-03-29 16:34 dustymugs * Code cleanup to shut gcc up 2013-03-29 16:33 dustymugs * Refactored expression variant of ST_MapAlgebra() to be faster. Performance is almost as good as ST_MapAlgebraExpr(). Ticket #2133 2013-03-29 15:55 robe * fix link 2013-03-28 22:11 pramsey * #2018, Distance calculation support for arc features (circstring, compoundcurve, curvepolygon) 2013-03-28 13:32 robe * change variable used to __MINGW64_VERSION_MAJOR (the mingw64_w32 doesn't have __MINGW64_ (only the mingw64-w64 has that) 2013-03-28 09:30 robe * #1668: if mingw64 and it returns <0 switch to _vscprintf native windows implementation. Thanks to swoodbridge for pointing out the define to use. 2013-03-27 13:30 dustymugs * Fix bad dimensions when rescaling rasters with default geotransform matrix. Ticket #2251 2013-03-26 15:47 pramsey * flag #945 as complete 2013-03-26 15:24 pramsey * #2201, ST_GeoHash wrong on boundaries 2013-03-26 13:12 pramsey * #2186, gui progress bar update is slowing loads 2013-03-26 04:14 dustymugs * Enhanced ST_Union(raster, uniontype) to union all bands of all rasters. Ticket #2200. 2013-03-25 18:45 colivier * revert wrong regress encoding stuff from r11205 2013-03-25 18:41 colivier * Related to #1553. Add missing free in cu_surface cunit to be valgrind clean. As TGEOM was not used as storage serialization, i purely remove TGEOM for now, and kept only the TIN/POLYHEDRALSURFACE lwgeom expression (will see in future if we really need to have a 3D topological storage PostGIS side) 2013-03-25 17:17 dustymugs * Removed old raster core tests from configure 2013-03-25 17:11 dustymugs * Delete old core raster tests. Ticket #2115 2013-03-25 03:14 dustymugs * Addition of ST_FromGDALRaster(). This is what happens on a long airplane flight! Ticket #2123. 2013-03-25 03:08 dustymugs * Added item regarding -n of raster2pgsql. Ticket #2231 2013-03-25 03:05 dustymugs * Added ability to specify name of filename column in raster2pgsql. More stuff being done stuck in a tube at 30k feet. 2013-03-22 16:12 strk * Revert "Add '-x c' switch to CPP / CC when used as SQL preprocessor" It seems it wasn't needed, see #2239 2013-03-22 12:34 strk * Fix lineal TopoJSON output to keep multi components separated REF: #2228 2013-03-22 11:20 strk * Add '-x c' switch to CPP / CC when used as SQL preprocessor Hopefully it'll set us free to name our input files with any extension we decide. 2013-03-21 21:28 dustymugs * Fix ST_InvDistWeigh4MA() to handle a situation when neighborhood is empty except the center pixel. 2013-03-21 16:15 strk * Fix areal TopoJSON output to group and order polygon rings (#2228) 2013-03-21 09:01 strk * Review comments above Makefile rule to generate .sql from .sql.in 2013-03-20 17:38 strk * Have functions deprecated in 2.1.0 raise a WARNING message (#1994) Drop use of some deprecated functions by other functions (as exposed by testsuite). Add a _postgis_deprecate service function for the message, so we can change from WARNING to NOTICE or we can tweak the message, in a central place. 2013-03-20 16:47 strk * Deprecate non-CamelCase linear referencing function (#1994) - ST_Line_Interpolate_Point renamed to ST_LineInterpolatePoint - ST_Line_Substring renamed to ST_LineSubstring - ST_Line_Locate_Point renamed to ST_LineLocatePoint Tests updated to use the new signature, docs updated to show the new signature and report deprecations 2013-03-20 16:10 strk * Add perturbating edges in TopoJSON test 2013-03-20 12:18 strk * Update TopoJSON example with correct output, add note about arc indices 2013-03-20 11:44 strk * Speedup areal TopoJSON output routine to use edge walking Now it takes 6% of the time to do the same thing ! Tweak tests to expect new arcs numbering and order. Also fixes missing comma separating polygon ring arcs. 2013-03-20 10:27 strk * Fix AsTopoJSON call in testcase 2013-03-20 10:26 strk * Properly encode TopoJSON.sql.in dependency into topology.sql 2013-03-20 07:48 strk * Oops, forgot to add topojson test expectancy (#2240) 2013-03-19 18:29 strk * Add AsTopoJSON(TopoGeometry) function (#2228) 2013-03-19 11:52 strk * Cleanup and integrate documentation of ST_GetFaceEdges 2013-03-19 09:59 strk * Move GML function under a new export/ subdir 2013-03-19 09:53 strk * Drop the .c suffix of sql files to preprocess under topology/ dir 2013-03-19 09:16 strk * Drop the .c suffix of sql files to preprocess under raster/ dir 2013-03-18 19:50 robe * #2238: clarify neighborhood distance terminology 2013-03-18 18:14 strk * Drop unused variables 2013-03-18 17:20 strk * Drop the .c suffix of sql files to preprocess The suffix was added to make compilers happy about preprocessing, but invoking cpp directly should be just fine (SQLPP macro) This is an experimental change under postgis/, if everyone is happy the same thing will be done for raster/ and topology/ 2013-03-18 00:49 dustymugs * Fixed unescaped % in RAISE message. Ticket #2237 2013-03-16 15:30 robe * fix typo in ST_AsGDALRaster example 2013-03-08 13:58 strk * Make test for ST_PointOnSurface accept any contained point as valid This is to support a change in GEOS 3.3.9 / 3.4.0 that started giving different (but still valid) results. See http://trac.osgeo.org/geos/ticket/623 2013-03-08 09:19 strk * Reword ST_Simplify(TopoGeometry) description (#1687) 2013-03-07 17:08 strk * Document ST_Simplify(TopoGeometry) -- closes #1687 2013-03-07 16:14 strk * Add ST_Simplify override for TopoGeometry objects (#1687) 2013-03-07 07:31 strk * Split test for #1968 in two parts, to avoid false negative 2013-03-06 18:37 strk * Improve the test for #1968 to also check duplicated components 2013-03-06 18:11 strk * Fix missing edge from toTopoGeom return (#1968) 2013-03-06 15:33 dustymugs * Bad switch for debug output 2013-03-06 15:20 strk * Allow adding points at precision distance with TopoGeo_addPoint 2013-03-05 16:57 dustymugs * Minor code cleanup in raster2pgsql and additional debug output for rt_api 2013-03-05 09:10 strk * Make libjson-c optional adding --without-json configure switch (#2202) 2013-03-04 17:57 strk * Fix equality operator between EMPTY and point on origin (#2110) 2013-03-04 17:02 strk * Drop PDF version of EJB3 spatial tutorial There's an ODT version of the manual, pdf can be generated 2013-02-28 17:56 strk * Add regression test for #2216 2013-02-28 17:42 strk * Fix parsing GeoJSON of multipolygon with holes (#2216) 2013-02-28 17:04 strk * Add lwgeom_from_geojson to liblwgeom, add cunit test, fix memory leak 2013-02-26 23:23 dustymugs * Added ST_MinConvexHull(raster). Ticket #2210 2013-02-26 17:42 dustymugs * Changed name of exclusion constraint to by dynamic due to conflict of implicit index names. Ticket #2215 2013-02-26 17:42 dustymugs * Addition debug output for rt_raster_from_gdal_dataset() 2013-02-23 05:08 robe * mordernize faq on creating spatial table. 2013-02-23 02:04 robe * #2209: reword to encoding raster issue to not specify explicit byte count 2013-02-22 18:26 pramsey * #1292, go back to nudging geodetic coordinates (realityexists) 2013-02-21 15:53 robe * remove duped qandset tags 2013-02-21 14:09 robe * missing para tag 2013-02-21 13:31 robe * oops forgot pretty anchor 2013-02-21 13:29 robe * document issue in ticket #2209 in FAQ. Probably only affects me, but who knows. 2013-02-19 23:03 robe * #2208 : document that ST_PointN no longer works with first linestring of multilinestring 2013-02-18 04:17 dustymugs * Wrong debug output function 2013-02-17 19:27 robe * had type and name swapped 2013-02-17 18:37 robe * ST_MapAlgebra: create variablelist and move much of commentary to that so page is more easily digestable 2013-02-17 16:24 dustymugs * Fixed handling of out-db rasters with no geotransform matrix 2013-02-16 21:47 dustymugs * Additional debug output for rt_raster_gdal_warp() 2013-02-16 21:47 dustymugs * Update raster TODO as it was sorely out of date 2013-02-16 01:00 dustymugs * Faster ST_Union() done using memcpy when possible 2013-02-15 23:53 dustymugs * Changed how rasters with unknown SRID and default geotransform are handled when calling GDAL Warp API. Ticket #2203 2013-02-09 06:08 robe * change check geos to be 3.4 (3.4 is the new standard of excellence) 2013-02-09 05:24 robe * get rid of use of xml tags in arg - messing up formatting of cheat sheet gen 2013-02-09 05:17 robe * missed one 2013-02-09 05:16 robe * fix version number -- should change to read from config at some point, but too lazy to figure that out right now 2013-02-09 04:29 robe * add styles to avoid page breaks in awkward places 2013-02-09 03:45 robe * update to summary of what's new in PostGIS 2.1 - this will be a really slick release :). Fix doc links in cheatsheet generator 2013-02-07 20:49 pramsey * Expand size of generic cache to allow future pointcloud cache to sneak into it if necessary 2013-02-07 17:16 dustymugs * Corrected use of pfree instead of PG_FREE_IF_COPY 2013-02-07 17:16 dustymugs * Additional assert() calls. Will need to add usage of NDEBUG flag to turn off assert() for non-debug builds 2013-02-07 06:31 robe * uhh how could we forget to mention the cool ST_Union(rast,unionarg) is new in PostGIS 2.1. Got rid of some other notes as its only that annoying ST_Union(rast,uniontype) that's a sore in my back. 2013-02-06 21:38 robe * #2199: clarify ST_Union(rast) multiband union feature is just for first variant. A bit too verbose, but at least I won't be confused anymore. 2013-02-04 19:07 dustymugs * Fixed dimension error of bands when using ST_Tile on out-db rasters. Ticket #2198 2013-02-04 19:07 dustymugs * Additional calls to assert() and better checking of out-db raster bands 2013-02-04 19:07 dustymugs * Removed some unnecessary assert() calls 2013-02-02 23:48 robe * #2190: further cleanup of topology existence checking so regresses for 9.3. Should pass with flying colors now. 2013-02-02 22:12 robe * fix for 9.3 -- pg 9.3 seems to throw errors sooner so we need to check a topology exists before trying to query it. 2013-02-01 20:13 robe * fix gdal_translate examples (port now required) and have typos in syntax 2013-01-29 15:25 dustymugs * Added check that raster metadata check and warn if not 2013-01-29 14:48 dustymugs * Remove debug output from rt_raster_gdal_warp() 2013-01-28 23:01 dustymugs * Fix function parameter value overflow that caused problems when copying data from a GDAL dataset. Problem first appeared in ST_Resize(). Ticket #2188 2013-01-28 23:01 dustymugs * Code cleanup of rt_raster_gdal_warp() 2013-01-26 18:17 robe * ST_Perimeter not being flagged in matrix as geography function because of double function synopsis 2013-01-26 17:31 robe * link happiness -- add ref to postgresql math functions so people aren't puzzled by degrees, pi, radians where they came from 2013-01-26 17:27 robe * clarify distance is in meters in the short-descrip that shows in db environment 2013-01-26 17:22 robe * ST_Project -- somebody didn't follow protocol and didn't tag PostGIS version when they added this 2013-01-26 02:42 robe * spell degrees correctly -- its degrees not degreees 2013-01-26 02:32 robe * #657: correct the documentation on ST_Project to reflect it expects bearing measured in radians and how to handle for both degrees and radians 2013-01-25 11:03 strk * Support dumps where the geometry column has a mixEdCaseD name 2013-01-24 21:15 strk * Properly copy topologies with Z value (#2184) 2013-01-20 16:56 dustymugs * Fix issue with outdb rasters with no SRID and ST_Resize (GDAL warp calls). Ticket #2182 2013-01-18 18:09 strk * Have ST_Summary advertise presence of known srid with an [S] flag Closes #2178 2013-01-18 14:10 robe * obsolete links 2013-01-18 08:55 robe * update news with new tiger geocoder features 2013-01-17 08:05 strk * Prefer boolean predicates over overlay ops in ST_ChangeEdgeGeom Further reduces robustness issues and squeezes another bit of performance. 2013-01-16 21:42 strk * Drop useless input endpoints relate check in ST_ChangeEdgeGeom 2013-01-16 15:14 strk * Make ST_ChangeEdgeGeom motion collision detection code more robust The new model avoids a call to GEOSSymDifference but rather checks each candidate node against both "motion ranges" containment. It still constructs something, but only MULTIPOINT, which should be safe. Haven't profiled but the new code should also be faster than the previous. Fixes ticket #2176, includes testcase for it. 2013-01-16 14:24 robe * change to about link to show new website link 2013-01-16 09:42 robe * fix formatting and word changes to tiger extension install section 2013-01-16 09:16 robe * update to reflect new protocol when we are on new site. Also to update download links 2013-01-16 07:48 robe * move note into para 2013-01-16 07:38 robe * get rid of program listing stuff try to fix regress. 2013-01-16 07:24 robe * get rid of unbalanced para tag 2013-01-16 07:13 robe * add extension model instructions for tiger geocoder install. add xml entity for download link 2013-01-15 11:54 strk * Base vertex snap tolerance in lwline_split_by_point on line length Fixes robustness issue in splitting line with own vertex (#2173) Also fixes one case of topology building (#2172) 2013-01-02 12:24 robe * give anchor friendly ids for chapter and sections (so if we shuffle in future anchor doesn't change) 2012-12-31 15:18 strk * Use grep found by ./configure (and have ./configure look for it) 2012-12-27 23:38 strk * Use grep found by ./configure 2012-12-27 12:56 strk * Drop "lwgeom_init_allocators" need, add "lwgeom_set_handlers" This change allows using liblwgeom from clients which cannot define C-level methods for link-back (e.g. python ctypes). See #2089. NOTE: existing clients should take care of calling the new function because their "lwgeom_init_allocators" won't be called anymore. Failure to do so will result in default allocators / reporters being used. Thanks Giuseppe Sucameli for the base work on this 2012-12-26 13:44 robe * Add add_search_path helper function and call it in install of postgis_tiger_geocoder to add tiger to search path. Create unpacked script for geocoder so can do CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged; 2012-12-21 22:55 dustymugs * More code and memory cleanup 2012-12-21 22:18 dustymugs * Additional cleanup and making sure to free memory when hitting errors 2012-12-21 22:18 dustymugs * Code cleanup of rt_raster_serialize(). Basically make sure to free allocated memory if function has error 2012-12-21 10:53 strk * Fix memory leak in lwcollection_homogenize 2012-12-21 10:01 strk * Update ignores 2012-12-21 10:01 strk * Fix compiler warnings 2012-12-20 20:47 dustymugs * PostgreSQL 9.3 changed where heap_form_tuple() is declared. Fixed in raster and postgis. Ticket #2013. 2012-12-20 18:40 pramsey * Quiet compile warnings. 2012-12-20 18:26 strk * Fix leak in cu_stringbuffer test 2012-12-20 18:07 strk * Fix memory leak in lwmline_locate_along 2012-12-20 17:51 strk * Fix memory leak in geometry cleaner 2012-12-20 17:20 strk * Drop unused "libtgeom.h" include This is to make libtgeom memory errors less scary :) See #1553 2012-12-20 17:19 strk * Fix memory leaks in lwsegmentize and cu_ptarray 2012-12-20 16:02 robe * add topology so extension now installs cleanly. still need to add set path and cleanup the make clean 2012-12-19 23:26 dustymugs * Stomp out memory leaks in CUnit tests 2012-12-19 23:26 dustymugs * Make sure to free OGR geometry when the geometry is empty 2012-12-19 23:26 dustymugs * Changed memory handling of offline band path. Now explicitly owned internally 2012-12-19 20:52 strk * Fix memory leak in circ_tree_new 2012-12-19 20:52 strk * Fix leak in cu_geodetic test 2012-12-19 20:08 strk * CUnit is not only needed for liblwgeom 2012-12-19 18:18 strk * Put JSON input test where it belongs (#2156) This time do not include other unrelated changes... 2012-12-19 18:06 strk * Revert "Move JSON input test where it belons (#2156)" Accidentally committed an unrelated patch.. 2012-12-19 18:01 strk * Move JSON input test where it belons (#2156) 2012-12-19 00:32 robe * #2153: fix typo in file path 2012-12-18 20:42 dustymugs * Tweaked UpdateRasterSRID() to drop/add coverage tile as needed 2012-12-18 05:06 robe * #1959 remove sql_bits/mark_editable_objects.sql.in from upgrade script. It is the one causing pg_extension table to bloat and in theory not needed for upgrade since we don't change spatial_ref_sys during upgrade. 2012-12-15 20:27 robe * add 2.0.2 as upgrade from path 2012-12-15 08:09 robe * #2147 upgrade topology doesn't work on Mac BSD sed doesn't default to extended. Use already perl built topology upgrade script instead as template for extension upgrade 2012-12-15 00:55 dustymugs * Fixed handling of identifiers with single quote (') such as in O'Reilly. 2012-12-14 20:28 dustymugs * Changed testing of extent geometry 2012-12-14 20:27 dustymugs * Updated raster2pgsql help and docs to reflect changes to regular_blocking. 2012-12-14 20:27 dustymugs * regular_blocking constraint removed. regular_blocking column of raster_columns now looks for spatially_unique and coverage_tile constraints. Ticket #2150 2012-12-14 20:27 dustymugs * Added regression tests for ST_IsCoverageTile(). 2012-12-14 20:27 dustymugs * Added support for padded edge tiles to ST_IsCoverageTile() 2012-12-14 20:27 dustymugs * Added support for no-band rasters to ST_Tile(raster) 2012-12-14 20:27 dustymugs * Added missing tickets and reorg of ticket list 2012-12-14 20:27 dustymugs * Added parameters to ST_Tile(raster) to control padding of generated tiles. ST_Tile(raster) no longer defaults to padding tiles. Ticket #2069 2012-12-14 20:26 dustymugs * Addition of coverage_tile constraint for raster. Ticket #2148 2012-12-14 20:26 dustymugs * Addition of ST_IsCoverageTile() to tell if tile is part of a coverage 2012-12-14 20:26 dustymugs * Added raster's spatially_unique constraint. Ticket #2149. Still needs regression tests but won't happen until regular_blocking is finished. 2012-12-14 20:26 dustymugs * Tweaked the extent computed for the extent constraint 2012-12-14 20:26 dustymugs * Changed blocksize constraint to permit multiple possible values. Ticket is #2143. We just need a coverage constraint and a spatially unique constraint to determine regularly blocked. 2012-12-14 20:26 dustymugs * Fixed incorrect return type in docs 2012-12-14 20:26 dustymugs * raster2pgsql no longer pads tiles by default based upon tile position and tile size. This is part of the refactoring to remove padded tiles. Flag -P added so that users can indicate that tiles should be padded. Ticket #826. 2012-12-14 20:25 dustymugs * Removed hardcoded flags for raster2pgsql from run_test 2012-12-14 20:25 dustymugs * Quiet down ST_SameAlignment(raster, raster) as it was way too talkative 2012-12-14 20:25 dustymugs * Updated regression tests for raster2pgsql 2012-12-13 09:34 strk * Revert "Return NULL when simplifying a line results in a line with < 2 vertices" The correct behavior is still being discussed here: http://trac.osgeo.org/postgis/ticket/1987 Better reduce the noise... 2012-12-12 15:52 strk * Return NULL when simplifying a line results in a line with < 2 vertices Also return NULL from ST_Simplify when the input is an empty (null is a simpler form than EMPTY...) Yes, both break backward compatibility, but seem more consistent to me. I'm still interested in allowing collapses avoidance but I think consistency is also important. 2012-12-09 19:59 pramsey * #2145, ST_Segmentize(geography, dist) fails with redundant coordinates 2012-12-07 22:07 dustymugs * More verbose output when constraints fail to be added to a raster column. Ticket #2141 2012-12-07 09:27 strk * Add an id to the toTopoGeom proxy entry 2012-12-07 09:24 strk * Element xref can't have content (was declared EMPTY) I'm surprised postgis_aggs_mm.xml.xsl contains all that XML, shouldn't it just transform source XML ? 2012-12-07 09:24 strk * Add a "TopoGeometry Editors" section I've added a toTopoGeom entry in this section for the sole purpose of redirecting to the one in "TopoGeometry Constructors". It's two overloaded functions, documented togheter in the latter section. If there's any better way to deal with this I'm looking forward for enhancements. 2012-12-07 08:36 strk * Element xref can't have content (was declared EMPTY) 2012-12-07 08:31 strk * Fix links to legacy faq 2012-12-07 08:31 strk * Document new toTopoGeom override and clearTopoGeom 2012-12-07 01:08 dustymugs * Fixed behavior of ST_ConvexHull() for empty rasters. Ticket #2126 2012-12-06 23:23 strk * Provide a version of toTopoGeom taking a TopoGeometry object Such version would _add_ the space taken by the input geometry to an existing TopoGeometry. 2012-12-06 23:02 strk * Add topology.clearTopoGeom(TopoGeometry) function 2012-12-06 18:45 strk * Do not hardcode version to rule to build topology_upgrade_X_minor 2012-12-06 17:56 pramsey * #2101, add some doco in the .sql.in.c file on the _postgis_* stats info functions. 2012-12-06 17:39 mloskot * Added RasterReader.copy_to() utility based on SQL command COPY TO and PostGIS Raster functions ST_As and outputs rasters to hex-encoded plain text or binary raster file. 2012-12-06 10:49 mloskot * Typo 2012-12-06 05:43 dustymugs * Fixed handling of SRS strings as they are passed to GDAL functions. Ticket #2134 2012-12-05 18:50 pramsey * #2132, _postgis_stats crashes backend on missing stats 2012-12-05 10:28 strk * Fix broken shp2pgsql help string suggesting -r to reproject 2012-12-04 19:54 pramsey * #945, expose and add selectivity to the 3d/4d index (&&&) bindings 2012-12-04 13:24 robe * upport 2.0.2 release notes 2012-12-03 22:17 dustymugs * Fixed incorrect return type for ST_BandIsNoData(raster) in docs 2012-12-03 16:19 strk * Fix memory error in MultiPolygon GeoJson parsing (#2130) 2012-12-03 14:10 strk * Fix SRID in ST_Homogenize output with collection input (#2129) 2012-12-03 10:09 strk * Make ST_RemEdge* tests 30% faster by reducing service costs 2012-12-02 22:36 dustymugs * Removed PICFLAGS from CFLAGS when compiling CUnit suites. Ticket #2125 2012-12-01 22:56 robe * fix return type 2012-12-01 20:32 robe * TopoGeo_AddPolygon says aline instead of apoly 2012-12-01 08:34 robe * don't dtd validate when making comments and cheatsheets 2012-12-01 01:19 dustymugs * Added ST_Resize(raster) to resize a raster using desired width/height. Ticket #1293. 2012-12-01 01:19 dustymugs * Removed requirements of SRID for calling GDAL Warp API 2012-11-30 15:18 dustymugs * Removed use of pi html code. Using "pi" instead. 2012-11-30 01:13 dustymugs * Additional cleanup and validation regarding ticket #1653 2012-11-30 01:13 dustymugs * Added NEWS item and doc updates for changes related to ticket #2119 2012-11-30 01:12 dustymugs * Added a special case to RASTER_GDALWarp() where if the input raster has no SRID (SRID_UNKNOWN) AND the operation does not involve a reprojection, then use a catchall/substitute SRID (in this case 4326). Ticket #2119 2012-11-29 22:33 colivier * Fix #2092 for trunk branch 2012-11-29 19:29 strk * Enhance error message on unsupported geometry type (#1899) 2012-11-29 19:11 dustymugs * Fixed incorrect ticket #. From #2026 to #2062 2012-11-29 18:59 dustymugs * Removed confusion between ST_Resample(raster) and ST_Transform(raster) by removing srid parameter for ST_Resample(). Ticket #1653 2012-11-29 18:59 dustymugs * Renamed RASTER_resample() to RASTER_GDALWarp() and adjusted SQL functions as needed. Next is to audit and possibly refactor those functions that make use of RASTER_resample(). 2012-11-29 18:30 strk * Ensure ST_Line_Interpolate_Point always returns POINT (#2108) 2012-11-29 18:13 strk * Ensure ST_PointOnSurface always returns POINT (#2117) 2012-11-29 18:01 strk * Early release lwgeom memory 2012-11-29 17:49 strk * Ensure ST_Centroid always returns POINT (#2109) 2012-11-29 02:12 robe * #1795 make raster_views, raster_columns, geometry_columns, geometry_views, spatial_ref_sys public viewable -- none issue since they are views that only list user viewable tables and aspatial_ref_sys is harmless public info. 2012-11-29 01:21 dustymugs * Added CUnit test suites for raster core. Old raster core regression tests can still be found in raster/test/core but are no longer run. Probably should delete before 2.1 is released. Ticket #173 2012-11-28 22:35 nicklas * #2112 2012-11-28 20:16 dustymugs * Refactored return and parameters of rt_raster_iterator() 2012-11-28 19:31 dustymugs * Refactored return and parameters of rt_raster_from_two_rasters() 2012-11-28 15:27 dustymugs * Refactored return and parameters of rt_raster_surface() 2012-11-27 00:58 dustymugs * Added ST_NotSameAlignmentReason(raster, raster). Ticket #1709 2012-11-26 21:09 dustymugs * Added ST_Transform(raster) variant that allows of aligning output rasters to a reference raster. Ticket #2105 2012-11-26 19:13 dustymugs * Renamed variants of ST_World2RasterCoord() and ST_Raster2WorldCoord() to ST_WorldToRasterCoord() and ST_RasterToWorldCoord() as names are inconsistent with other PostGIS function names. Ticket #2104 2012-11-26 12:07 strk * Skip st_area(geography) and st_length(geography) See http://lists.osgeo.org/pipermail/postgis-users/2012-November/035854.html 2012-11-25 22:36 robe * #1869 take care of ST_AsBinary(unknown/text), ST_AsText(unknown/text) is not unique errors 2012-11-25 21:55 dustymugs * Where appropriate, functions in rt_core now use standardized function return states. 2012-11-23 22:15 strk * Fix ST_{Mod,New}EdgeHeal joining edges sharing both endpoints Closes #1998. Include testcases. Also simplifies the code and avoids a GEOS call. [RT-SIGTA] C.I.G.: 0494241492 2012-11-23 15:57 pramsey * Try to stomp out -180 (#2066) 2012-11-23 06:13 pramsey * #1828, geography stats are really sensitive to narrow dimensionality issues, so geodetic bounds have to be exactly calculated for things like points 2012-11-22 17:39 pramsey * #1828, fix mistake to geography calculation routine 2012-11-21 23:26 pramsey * Of course we're going to do real joinsel... 2012-11-21 19:52 pramsey * Explain "selectivity" a little more explicitly 2012-11-20 23:47 pramsey * Better/different error messages in stats interogator 2012-11-20 23:28 pramsey * #2101, sql functions for selectivity inspection 2012-11-20 21:34 pramsey * Make default joinsel message more obvious 2012-11-20 21:31 pramsey * Make error message minimally more helpful 2012-11-20 21:29 pramsey * Be more explicit about the types we're passing around 2012-11-20 20:57 pramsey * Convert SearchSysCache calls to SearchSysCache# calls, per the guidance in the PostgreSQL syscache.h file 2012-11-20 20:51 pramsey * #2102, SQL hooks for calling selectivity functions 2012-11-20 19:07 pramsey * #1828, Poor selectivity estimate on ST_DWithin 2012-11-20 17:50 pramsey * Remove conditional use of USE_STANDARD_DEVIATION, it's been working for years, that's what we use. 2012-11-20 09:51 robe * minor formatting fix 2012-11-20 09:49 robe * #1287: legacy script to reinstall old PostGIS gist op. Added to FAQ when you need to use it and stress to try not to use it and reindex if you do. 2012-11-19 23:18 dustymugs * Fixed issue where ST_AsRaster() may not return raster with specified pixel types. Ticket #2100 2012-11-19 23:18 dustymugs * Code cleanup of rt_raster_gdal_rasterize() 2012-11-19 23:18 dustymugs * Refactored internal use variables and functions for rt_raster_iterator() 2012-11-19 23:04 pramsey * Move box-reading code in geography stats to use serialized box. 2012-11-19 15:47 strk * Fix double free on ST_OffsetCurve exception (#2099) 2012-11-19 10:20 strk * Restore 1.5.x behaviour of ST_Simplify (#1987) 2012-11-16 22:59 dustymugs * Added RANGE uniontype option for ST_Union(raster) Ticket #2097 2012-11-16 12:35 robe * geos new is 3.4 2012-11-16 06:46 robe * update tto reflect 2.1 2012-11-16 03:39 dustymugs * Fixed SQL error in regression test 2012-11-16 01:32 dustymugs * Added docs and regression test for extent parameter variants of ST_Slope, ST_Aspect and ST_Hillshade 2012-11-16 01:32 dustymugs * If hillshade < 0, hillshade = 0 for ST_HillShade() 2012-11-16 01:31 dustymugs * Added variants of ST_Slope, ST_Aspect and ST_Hillshade to provide support for tiles in a coverage. Ticket is #2078 2012-11-15 00:15 pramsey * Comment on the dump_toupper function 2012-11-15 00:08 pramsey * Use a locale-independent braindead upper implementation 2012-11-14 23:01 pramsey * #2035, Strange behavior when using left (<<) and right (>>) operators 2012-11-14 22:29 pramsey * #2028, ST_Multi() does not make a TIN 2012-11-14 21:31 pramsey * #2042, measures.c: 'pt_in_arc_A' may be used uninitialized 2012-11-14 21:25 pramsey * #2001, ST_CurveToLine has no effect if the geometry doesn't actually contain an arc 2012-11-14 20:45 pramsey * #799, make geographic coordinates in range 2012-11-14 17:21 pramsey * Make Korotkov split the default 2012-11-13 22:48 pramsey * #2090, gserialized_read_gbox_p sets Z dimension instead of M dimension for two-point lines 2012-11-13 22:30 pramsey * #2044, lw_arc_length: warning: variable 'a2' set but not used 2012-11-13 22:10 pramsey * #1895, New node splitting algorithm for GiST Set the KOROTKOV_SPLIT define to 1 to use the new approach, to 0 to use the old approach. After testing is complete, we can set the new split as the default. 2012-11-13 18:58 pramsey * Remove element 2012-11-13 18:57 pramsey * Remove MathML from documentation. It's not really being used for any math. 2012-11-09 21:54 pramsey * Remove module magic from here, #1162 2012-11-09 00:09 pramsey * Remove many warnings from -pedantic build, and clean up parser globals a little more thoroughly. 2012-11-08 08:40 strk * Rewrite topology.GetRingEdges using a recursive CTE (#2087) Walking around a ring of ~22k edges takes 1/7 of the time 2012-11-08 08:40 strk * Share some code between ST_RemEdgeModFace and ST_RemEdgeNewFaces Also check TopoGeometry existance as first thing, to reduce the time it takes for failing calls. 2012-11-08 05:48 robe * update install to note that we now support loading tiger 2012 data and it is the default and upgrade instructions to get the new loader behavior 2012-11-08 05:46 robe * change this to use 2012 loader, but remark it out so it doesn't overwrite people's custom settings. 2012-11-06 00:27 pramsey * #2048, add regression test 2012-11-05 10:27 strk * Create indices on start_node and end_node of edge_data (#2082) Those indices speed up nodes deletion by a factor of x1000 ! I didn't profile, but I suspect those indices would also speed up ring walking (whereas you have to find a match between endnodes). 2012-11-05 00:47 robe * #2020: stop penalizing windows 9.2 32-bit when it gives a stupid answer to an ill-defined question. Change to be a well-defined question. 2012-11-04 20:03 robe * #2081: extension files being installed twice causes errors on Ubuntu (9.3) 2012-11-04 14:40 strk * Fix order of TopoGeometry property names 2012-11-04 10:45 robe * #1980: define new configure arg --with-mathmldtd to allow overriding path to mathmldtd 2012-11-04 00:44 strk * Oops, revert the revert... Note to self: never commit between 1:00am and 8:00am 2012-11-04 00:30 strk * Add note about lwgeom_make_valid being only available with GEOS-3.3+ 2012-11-04 00:30 strk * Revert "#1970 - 9.2rc1 regress failure change layer_id_seq from select * to explicitly select fields. log_cnt now returns 0 for 9.2rc1 so fails regress otherwise" This reverts commit c272b5ed6dec2cc415c9bccd305e81394f1bde83. 2012-11-03 18:12 robe * change default new install to use tiger_loader_2012.sql file instead 2012-11-03 17:54 robe * #2076: support for loading tiger 2012 data. revise loader_load_staged_data to leave out pumace10, estatefp, ugace. This fixes the faces not loading issue for 2012 data (tested with MA, DC) 2012-11-02 21:14 pramsey * #2015, ST_IsEmpty('POLYGON EMPTY') returns False 2012-11-02 20:40 dustymugs * Removed code that is no longer used and updated docs with default parameters 2012-11-02 19:15 pramsey * #1996, ST_AsGeoJSON('POINT EMPTY') produces invalid JSON 2012-11-02 19:08 pramsey * Be a bit more explicit about what we're returning from point-in-ring tests. 2012-11-02 18:12 dustymugs * Updated reference links to "How Hillshade works" for ST_Slope, ST_Aspect and ST_HillShade 2012-11-02 18:02 pramsey * Remove double call of flip test. 2012-11-02 17:52 pramsey * #2019, ST_FlipCoordinates does not update bbox 2012-11-02 17:22 dustymugs * Refactored ST_Slope, ST_Aspect and ST_Hillshade() (also their _st_XXX4ma() functions). Detailed docs for all three functions. Outputs now in sync with return from ArcGIS. Ticket is #2077 2012-10-31 19:33 robe * some wording changes, add tutorial faq 2012-10-31 14:31 dustymugs * Added missing DROP FUNCTION statements. Ticket #2073 2012-10-31 09:46 strk * Add instruction for upgrading between SVN revisions using extensions 2012-10-31 00:42 dustymugs * Changed when the isnodata check takes place for out-db raster tiles 2012-10-30 23:25 pramsey * #1940, epsg:2065 projection is incorrect 2012-10-30 21:38 robe * Add Nathan Wagner to credits 2012-10-30 21:16 robe * Put in Enhanced note about ST_DumpPoints -- should in theory be faster. Revise expertbot xsl script (prevent url from abutting the title) 2012-10-30 20:32 pramsey * (#310) ST_DumpPoints as C function 2012-10-29 22:24 robe * Fix gdal binaries link 2012-10-29 22:23 dustymugs * Added SRID check to ST_Neighborhood(raster, geometry) 2012-10-29 22:23 dustymugs * Added SRID check for ST_Intersects(geometry, raster) 2012-10-29 22:23 dustymugs * Added SRID check of geometry for ST_World2RasterCoord variants 2012-10-29 22:22 dustymugs * Added check for SRID match in ST_Value(raster) geometry variant 2012-10-29 20:14 dustymugs * Set defaults for parameters of ST_Slope(raster). Ticket #1655 2012-10-29 18:56 dustymugs * Added UpdateRasterSRID() as per ticket #739 2012-10-27 05:53 robe * more ids and descriptive titles 2012-10-27 05:31 robe * revise script hallie uses so strips out tags such as ulink, xref, command leaving just textual representation (these were getting cut out before) 2012-10-27 04:18 robe * try to put in some ids 2012-10-26 00:28 dustymugs * Added news regarding ST_Clip(raster, ...) in C and update docs 2012-10-26 00:28 dustymugs * Rewrite of ST_Clip(raster) to be C-based and updated regression test. Ticket is #2065 2012-10-25 23:06 dustymugs * Fixed default Y-scale to -1 from 1 2012-10-25 22:17 pramsey * Expose some geodetic functions a little higher 2012-10-25 20:36 pramsey * Fix error in ptarray traversal. 2012-10-25 19:29 pramsey * Reorganize some pointarray loops and functions. Use direct aligned access more. 2012-10-25 18:57 pramsey * Remove old signature for serialized_form function 2012-10-25 18:54 pramsey * Allow WKB generation to do direct memcpy of coordinates in specific cases. 2012-10-25 18:42 pramsey * Use double alignment property to remove memcpy from wkb generation 2012-10-25 18:29 pramsey * Remove TODO note: the storage is now double aligned 2012-10-25 17:47 pramsey * Change the gbox calculation for geodetic edges to use 3-space geometry instead of lots of transcendental functions. Much faster, much simpler, all regression tests pass. 2012-10-25 06:00 robe * revert release note changes see if it fixes doc build issue 2012-10-25 05:18 robe * fix id again (maybe old conflicted with another id) 2012-10-25 04:12 robe * fix chapter id doesn't follow our convention 2012-10-25 04:07 robe * give release sections ids for easier reference 2012-10-24 22:22 dustymugs * Preprocess input geometry for clipping raster by using the intersection of the input geometry and the convex hull of the raster. Ticket #1989 2012-10-24 22:21 dustymugs * Added checks to rt_raster_gdal_rasterize() and RASTER_asRaster() where if input geometry is empty, return empty raster. 2012-10-24 21:14 dustymugs * Broke string for iowa hex into three parts so that doxygen doesn't choke 2012-10-24 19:22 dustymugs * Have ST_Tile() generate out-of-db tile bands if input raster's band is out-of-db. 2012-10-24 18:54 pramsey * Whoops make sure the test macros match the library ones 2012-10-24 18:44 pramsey * Add some debugging info to find failure in debbie 2012-10-24 18:28 pramsey * Add explicit tests for edge_intersects() 2012-10-24 17:26 pramsey * Move the distance calculation to also use the edge_intersects() function instead of edge_intersection() 2012-10-24 16:31 dustymugs * Added "auto" option to -t switch where raster2pgsql can compute a usable tile size. Added warning message if generated tiles may cause memory issues. 2012-10-24 03:41 robe * minor adjustments to terminology to improve searchin 2012-10-23 23:59 dustymugs * Rearranged function arguments for ST_Tile(raster) 2012-10-23 22:44 dustymugs * Added news and docs for ST_Tile(raster). Additional regression tests for one additional variant of ST_Tile(raster) 2012-10-23 22:44 dustymugs * Added ST_Tile() and regression tests. The circle is complete. 2012-10-23 22:44 dustymugs * Added rt_band_get_pixel_line() and regression tests 2012-10-23 22:43 pramsey * (#2063) fix the vertex-crossing logic in the circular tree code to use the new edge_intersects routine 2012-10-23 22:17 pramsey * (#2026) fix performance regression in geography distance calculation 2012-10-23 21:18 pramsey * (#1976) Geography point-in-ring code overhauled for more reliability 2012-10-23 13:46 dustymugs * Make changes to reflect patch from #2061 2012-10-23 04:56 pramsey * Future test case for when we've solved p-i-p in generality 2012-10-22 19:05 dustymugs * Fix POSTGIS_RT_DEBUGF() usage 2012-10-22 19:05 dustymugs * Fixed doxygen comment formats 2012-10-22 17:20 dustymugs * Remove unused variables. 2012-10-22 17:20 dustymugs * Cache frequently used variables minimize # of function calls in rt_raster_iterator() 2012-10-22 17:20 dustymugs * Include output from gdal-config --dep-libs when building raster2pgsql 2012-10-22 17:19 dustymugs * Add news and doc changes to indicate proper support for raster band's "isnodata" support 2012-10-22 17:19 dustymugs * have raster2pgsql check for raster bands being NODATA 2012-10-22 17:19 dustymugs * Tweaked rt_band_check_is_nodata() to make use of rt_band_get_pixel()'s ability to return flag indicating if value is NODATA 2012-10-22 17:19 dustymugs * Final fixes to support band's isnodata flag. 2012-10-22 17:19 dustymugs * All functions in core API now support a band's isnodata value. 2012-10-22 17:19 dustymugs * Changed signature of rt_band_get_nodata() as there was no way to indicate an error if the band has no NODATA. 2012-10-22 17:19 dustymugs * Some work adding proper support for using a band's isnodata flag. 2012-10-22 17:19 dustymugs * Changed function signature for core API function rt_band_get_pixel() to indicate if pixel is NODATA 2012-10-22 17:18 dustymugs * Minor changes to references to raster2pgsql 2012-10-21 23:53 robe * update crowd funding details 2012-10-21 18:02 strk * Fix GetTopoGeomElementArray(TopoGeometry) function, and add test See http://trac.osgeo.org/postgis/ticket/2060 2012-10-20 21:07 robe * fix headeer and description 2012-10-19 22:20 pramsey * Wrap NEWS to 80cols 2012-10-19 18:51 dustymugs * Added to news regarding ticket #2057 2012-10-19 18:49 dustymugs * Add variables specifying PostgreSQL CPPFLAGS and LDFLAGS. Ticket is #2057 2012-10-19 01:36 dustymugs * Forgot to wrap tags with in reference_raster.xml. Minor comment cleanup in rt_pg.c 2012-10-19 00:27 dustymugs * Fixed annoyances in the raster docs 2012-10-18 23:52 dustymugs * Combined the gist spatial relationship tests into rt_gist_relationships 2012-10-18 23:52 dustymugs * Combined all raster GEOS dependent spatial relationship regression tests into rt_geos_relationships.sql 2012-10-18 21:45 dustymugs * Clamp SRID when comparing SRIDs of raster vs geometry for geomval variant of ST_SetValues() 2012-10-18 21:45 dustymugs * Added docs for geomval variant of ST_SetValues 2012-10-18 21:45 dustymugs * Add news items regarding changes to ST_SetValue and addition of geomval variant of ST_SetValues() 2012-10-18 21:45 dustymugs * Code cleanup in rt_pg/rt_pg.c. Changed point geometry variant of ST_SetValue() to wrap around geomval variant of ST_SetValues(). This will result in a behavior change for geometry variant of ST_SetValue(). 2012-10-18 21:45 dustymugs * Addition of geomval variants of ST_SetValues() and regression tests. Added helper function rt_raster_get_inverse_geotransform_matrix(). Additional code cleanup for rt_raster_geopoint_to_cell() and rt_raster_cell_to_geopoint(). 2012-10-18 14:47 robe * script to concatenate all the sections of postgis doc for easier digestion of postgis expert bot 2012-10-17 19:30 dustymugs * Correct usage of memset() 2012-10-17 19:30 dustymugs * Cleanup description for ST_SetValues() 2012-10-17 16:08 dustymugs * Added items to NEWS and docs for ST_DumpValues 2012-10-17 16:08 dustymugs * Addition of ST_DumpValues() and regression tests. Ticket #2011 2012-10-17 14:29 dustymugs * Add fallback method of getting maximum extent for extent constraint. Ticket is #2050 2012-10-17 14:16 strk * Move trim_trailing_zeros out of liblwgeom.h (#2054) 2012-10-17 13:38 strk * Get OUT_* export macros out of liblwgeom.h (#2053) 2012-10-17 11:43 strk * Do not print more digits than available from lwgeom_to_geojson See http://trac.osgeo.org/postgis/ticket/2051 Adds tests for the ticket cases. 2012-10-17 09:52 strk * It is OUT_MAX_DOUBLE_PRECISION, not OUT_MAX_DIGS_DOUBLE, we should use These macros should really get out of liblwgeom.h and be properly documented... 2012-10-17 09:45 strk * Fix buffer overflow in lwgeom_to_geojson (#2052) 2012-10-16 20:59 dustymugs * Added optional interpolate_nodata flag as function parameter to ST_HillShade, ST_Aspect and ST_Slope. 2012-10-16 20:42 strk * Do not abort populate_geometry_columns when table can't be altered Also print the reason for the limitation. See #2049. 2012-10-16 20:17 dustymugs * Fixed xml issues that are making debbie mad. 2012-10-16 19:55 dustymugs * Added news blurb and docs regarding expression variants of ST_MapAlgebra. 2012-10-16 19:55 dustymugs * Added 2-raster expression variant of ST_MapAlgebra() and regression tests. 2012-10-16 19:55 dustymugs * Additional tweaking of returning empty raster from map algebra of INTERSECTION or UNION extent 2012-10-16 19:55 dustymugs * Corrected handling of NULL raster resulting from NO intersection of input rasters in map algebra. Fixed spelling mistakes. Additional tests for intersections of more than 3 rasters that don't actually intersect in ST_MapAlgebra 2012-10-16 19:55 dustymugs * Added one-raster expression variant for ST_MapAlgebra and appropriate regression tests. 2012-10-16 16:08 strk * Enhance documentation about TopoElement domain 2012-10-16 16:07 strk * tweak DEBUG line 2012-10-16 08:29 strk * Improve TopologySummary output Add unregistered layers and orphaned TopoGeom count 2012-10-16 08:29 strk * Have TopologySummary use the word "Mixed" for collection layers 2012-10-15 19:21 dustymugs * Fixed incorrect use of RASTER_DEBUGF(). 2012-10-15 14:48 dustymugs * More poking at the docs for ST_MapAlgebra 2012-10-15 14:20 dustymugs * Add another example of ST_MapAlgebra() and some formatting cleanup 2012-10-15 03:34 dustymugs * Changed how ST_MapAlgebra regression test runs on PostgreSQL 9.0 as usage of "GROUP BY raster" does not work. Ticket is #2048. 2012-10-14 05:40 robe * #2046: fix 2.1 doesn't compile with postgresql 9.0 2012-10-14 05:13 robe * updategeometrysrid was describing old behavior. Update to new and provide alternative syntax 2012-10-12 20:06 pramsey * Remove odd srs error line from expected 2012-10-12 19:49 pramsey * Reduce precision test to 1cm2. There is no doubt that this approach is less numerically stable than the last. (#2043) Though in exchange, it covers the globe more completely. 2012-10-12 19:32 pramsey * Reduce the precision of the double test... it passes here.. (#2043) 2012-10-12 19:31 dustymugs * Bug fix where pos array size was incorrect. 2012-10-12 19:31 dustymugs * Removed warning block for ST_MapAlgebra() doc page. Rearranged warning boxes 2012-10-12 16:06 dustymugs * More documentation changes regarding deprecation status of ST_MapAlgebraFct() variants. Added news item regarding deprecation status of ST_MapAlgebraFct and ST_MapAlgebraFctNgb variants 2012-10-12 16:06 dustymugs * Duplicated and refactored the ST_XXX4ma() functions for ST_MapAlgebra usage. Exception for ST_InvDistWeight4ma() and ST_MinDist4ma(), both of which are new for 2.1. Added regression tests as well. 2012-10-12 15:20 strk * Exit with non-zero code when commandline is malformed It still exists with zero code when user explictly asks for the help screen (with -? as documented and with no switch as popular habit [well, mine]) 2012-10-12 14:26 strk * Add pdf-localized rule for building localized pdf manual 2012-10-12 14:06 strk * Ignoring generated files in tiger_geocoder extension 2012-10-12 08:40 strk * Fix compiler warnings in lwgeom_geos.c 2012-10-12 08:34 strk * Fix a "set but not used" warning. This was about the return from getPoint2d_p, but it really only returns zero on error and after lwerror was called, and only if a PARANOIA compile time macro is set... 2012-10-12 08:27 strk * Fix ptarray_area_sphere signature (#2040) Since I was a it I also removed a "set but not used" warning. 2012-10-12 07:50 strk * Update po files after changes in installation.xml 2012-10-12 07:49 strk * Add more uses of and in installation.xml Also fixes a missing dash in "make comments-install" 2012-10-12 07:49 strk * Put tags in , fixing #2041 2012-10-12 07:20 strk * Consistently use tag for "make comments" Fixes complains by msgmerge (internationalization) 2012-10-11 22:48 pramsey * Improve support for ST_Area(geography) over dateline and poles (#2006, #2039) 2012-10-11 21:44 strk * Translation of intruduction.xml to pt_BR by George Silva 2012-10-11 21:41 strk * Update po files 2012-10-11 17:29 pramsey * Move area core calculation to ptarray. 2012-10-11 17:29 pramsey * Ignore build artifacts from geocoder 2012-10-11 17:07 strk * Simplify description of TopoElementArray ... and add TopoElement link to See Also section (things are better explained in there). 2012-10-11 15:23 robe * Get rid of hard-coded paths 2012-10-11 10:53 strk * Update json-c url 2012-10-10 23:06 robe * create norm_addy 2012-10-10 22:59 robe * #1627 : more cleanup of extension install, add configure of tiger extension script to configure.ac. Fix comment in tiger comments preventing install 2012-10-10 22:41 dustymugs * Added missing Availability details for various raster docs. Ticket is #2037 2012-10-10 22:30 robe * fix error in index column name picked up when trying to install as extension 2012-10-10 22:06 robe * #2037: flag some new raster functions as new in this release. Hmm I merged hopefully didn't screw things up 2012-10-10 22:02 dustymugs * Added n-raster ST_MapAlgebra(). Additional error checking in rt_raster_iterator(). Added regression checks for n-raster ST_MapAlgebra(). Ticket is #2030. Added news and docs for ST_MapAlgebra(). 2012-10-10 21:45 robe * Just enough to make it compile but doesn't work yet 2012-10-10 00:00 pramsey * Add in arc ptarray vs ptarray and arc ptarray vs arc ptarray distance functions. (#2018) 2012-10-09 23:12 dustymugs * Added HASH opclass and = operator for raster. This permits GROUP BY raster usage. 2012-10-09 23:12 dustymugs * Syntax cleanup 2012-10-09 22:48 pramsey * Add in arc ptarray vs point distance function (#2018) 2012-10-09 22:04 pramsey * Fix comment per rcoup 2012-10-09 21:48 pramsey * Fix up some errors in ptarray_arc iteration and the cunit test cases for arc p-i-p. (#2018) 2012-10-09 17:49 pramsey * Point-in-polygon function for arc-based point-arrays. (#2018) 2012-10-09 05:06 robe * #1627: Start work on packaging as an extension -- it's not functioning yet 2012-10-05 19:26 strk * Fix adding a splitting point into a 2.5d topology (#2033) 2012-10-05 19:22 robe * link to ST_3DClosestPoint from ST_ClosestPoint. Some people didn't notice we had a 3D variant and looked in the wrong place. 2012-10-05 12:25 robe * #2027: change order of operation -- have cleanup happen first since the drop sometimes tries to drop functions that use types that don't exist in older versions 2012-10-04 04:08 robe * update st_union examples (single should always specify band number to be safe) and all bands can be done now with just union 2012-10-03 23:07 dustymugs * Addition of flag nbnodata to rt_raster_iterator() thus allowing some memory savings from ST_Union(raster) 2012-10-03 21:03 dustymugs * Updated NEWS and docs regarding ST_Union(raster) behavior change. 2012-10-03 20:53 dustymugs * Tweak what value to initialize new band to when NODATA isn't present 2012-10-03 20:53 dustymugs * Addition of ST_Union(raster) function and regression tests 2012-10-03 20:53 dustymugs * Added regression test for rt_raster_clone() and added missing SRID copy. 2012-10-03 20:53 dustymugs * Addition of shortcut function rt_raster_clone() 2012-10-03 16:06 robe * update unpackaged to include new raster (e.g. unionarg) 2012-10-03 14:33 robe * #2027: Add unionarg 2012-10-03 06:16 strk * ST_AddEdge*: make update of old face edges more robust (#2025) Include tests for adding an edge that splits an hole in a face while forming a left ring which constitutes an invalid polygon ring. Also fixes one case of invalid topology creation (when the formed ring has a dangling edge but not a new area on the other side). 2012-10-03 06:08 robe * oops forgot to finish the changed statement 2012-10-03 06:06 robe * revise st_union example to show new and faster way of doing multi-band union 2012-10-02 22:47 dustymugs * Minor addition of debug messages 2012-10-02 21:45 dustymugs * Added multi-band support for ST_Union. Ticket is #2021 2012-10-01 23:13 robe * #1938 document addition of addbandarg and swap out old example with example utilizing addbandarg 2012-10-01 22:23 pramsey * Rename lwcircle_calculate_gbox_cartesian_2d to lw_arc_calculate_gbox_cartesian_2d 2012-10-01 22:18 pramsey * Rename lwcircle_center to lw_arc_center to match other lwalgorithm signatures 2012-10-01 22:10 pramsey * Anal retentive code re-organization. Try and move the primitive computational geometry functions into lwalgorithm.c 2012-10-01 14:04 strk * Do not confuse CREATE OPERATOR FAMILY with a CREATE OPERATOR 2012-10-01 09:28 strk * Accept array properties in GML input multi-geom input (#1928) Patch by Kashif Rasul and Shoaib Burq / SpacialDB 2012-10-01 08:47 strk * Create target dir if non-existing 2012-09-29 17:57 robe * update postgis unpackaged script. postgis_topology was already up to date. 2012-09-29 16:14 strk * Provide a script to opt out of extensions 2012-09-28 23:09 dustymugs * Addition of C-based ST_Union(raster) aggregate function (ticket #1364). Renamed low level function rt_raster_has_no_band() to raster_has_band(). Updated docs and NEWS for ST_Union. 2012-09-28 22:51 pramsey * Remove unused point in poly function 2012-09-28 22:48 pramsey * Add ptarray_contains_point to ptarray file, so that all other liblwgeom functions can use the one routine. 2012-09-28 21:52 pramsey * Remove no longer used function, lwgeom_pt_inside_circle. 2012-09-28 21:48 pramsey * Add new pointer-based coordinate access method, now that aligned storage is the new normal. 2012-09-28 21:08 pramsey * Anal retentive function renaming: ptarray_isclosed -> ptarray_is_closed 2012-09-28 20:30 pramsey * Move some ptarray functions out of postgis and back into liblwgeom from silly old function that shouldn't even exist anymore (LWGEOM_inside_circle_point) 2012-09-28 18:23 pramsey * Measurement support for arcs (#2018) 2012-09-28 17:03 pramsey * Add casts from geometry::path, geometry::point, geometry::polygon, polygon::geometry, path::geometry, point::geometry to allow easier migration to PostGIS for folks who start with the Pg types. 2012-09-27 20:23 pramsey * Distance calculation support for arc features (#2018). Commit adds lowest level primitive support for distance calculations on single arcs. 2012-09-26 15:56 dustymugs * Additional regression tests for ST_Neighborhood and tweaked to support a distance values of zero for one axis. 2012-09-25 22:22 dustymugs * Added docs regarding the callback function for rt_raster_iterator() 2012-09-25 22:22 dustymugs * Added regression tests, bug fixes and code cleanup for rt_raster_iterator(). 2012-09-25 22:22 dustymugs * Added rt_raster_iterator(), which is feature complete. Now need to add lots of regression tests before moving on to the PostgreSQL side to hook into it. 2012-09-25 19:23 dustymugs * Changed behavior when there is no pixels in the neighborhood for ST_Neighborhood. It should still return an array as the pixel of interest could have a value... just surrounded by NODATA. 2012-09-25 17:20 dustymugs * Additional documentation regarding memory ownership 2012-09-25 14:07 dustymugs * Added correct handling of rt_band's ownsdata flag indicating if the memory used for the band's data (only for inline, not offline) is managed internally. 2012-09-25 02:45 robe * #2012: Change client_min_messages to warning instead of relying on default notice. 9.3's idea of notice doesn't seem to include notice about create of new tables. 2012-09-24 15:07 dustymugs * Changed output array of ST_Neighborhood to have dimensions of Y,X instead of X,Y. This matches that found for GDAL blocks. 2012-09-24 15:07 dustymugs * Additional tests for ST_Neighborhood() 2012-09-22 14:44 robe * #2010: Include for 9.3 move to below postgis_config.h so version number of postgresql is picked up before the conditional include is attempted 2012-09-22 09:00 robe * #2010: compile support for 9.3 2012-09-22 03:55 robe * Add link to OpenGeo workshop on KNN to KNN operator. 2012-09-20 23:44 pramsey * Remove now obsolete note. 2012-09-20 22:24 pramsey * Document ISO WKT/WKB (#1451) 2012-09-20 13:32 robe * #1991: speed issue with 9.2 on geocode and geocoder_intersection, seems to be 10-50 times faster by forcing join_collapse limit = 2 2012-09-20 11:54 robe * remark out regress and also put in name in database #2009 turn off loading of addrfeat #1614 add U.S. and COUNTY RD as street_type highways 2012-09-19 18:48 dustymugs * Additional regression tests for rt_raster_get_nearest_pixel() 2012-09-19 18:48 dustymugs * Added docs for ST_InvDistWeight4ma() and ST_MinDist4ma(). Changed function signature for ST_Neighborhood() to support specifying distances on both X and Y axis. 2012-09-19 18:48 dustymugs * Tweaked ST_Neighborhood() to use two separate distance parameters for X and Y axes. 2012-09-19 18:48 dustymugs * Added ST_MinDist4ma() for getting minimum distance from the center pixel to the nearest neighbor in neighborhood with value 2012-09-19 18:48 dustymugs * Added regression tests for ST_InvDistWeight4ma() 2012-09-19 18:47 dustymugs * Added Inverse Distance Weighting function for use with ST_MapAlgebraFctNgb 2012-09-18 12:21 robe * #2055: (L burned in all subsequent images after Delaunay) increase remove to remove images 0-9 before building next. The remove went from 0-5 and I guess Kevin wasn't counting on anyone crazy enough to have 6 image layers. This code definitely needs some work, but this will do for now. 2012-09-17 12:31 strk * Initial support for documentatin translation Adds "update-po" Makefile target under doc/ Adds "local-html" Makefile target under doc/po/ 2012-09-17 11:43 strk * Update URL of Maven jar (thanks Sandeep Thakkar) 2012-09-14 21:03 strk * reference_type.xml has been missing from XML sources for years ! 2012-09-14 20:59 strk * Other double quotes needed by poxml 2012-09-14 20:52 strk * More Double quote tag attribute values for poxml support 2012-09-14 20:33 strk * Double quote tag attribute values and use open&close for This format plays nicely with xml2pot and po2xml... 2012-09-14 11:29 robe * PostGIS 2.1 changes section was incorrectly listing 2.0 instead of 2.1 changes. Also just folder 2.1 changes into many What is new in 2.1 section. 2012-09-14 07:49 strk * Distinguish between generated and source XML inputs 2012-09-14 07:40 strk * Rewrite header file to have full credits Used git history to figure out authors and commit years 2012-09-14 03:10 robe * Add changed section for 2.1 and mark ST_Segmentize as having a breaking change 2012-09-13 20:41 strk * Fix ST_Estimated_Extent name change documentation encoding 2012-09-13 20:11 pramsey * Remove code in #ifdefs for PgSQL 8.4 and under, per #1880 2012-09-13 19:23 pramsey * Test for #1780 2012-09-13 09:53 strk * ST_Estimated_Extent renamed to ST_EstimatedExtent (#1994) ST_Estimated_Extent is kept but deprecated, testcases test both signatures. Documentation documents the new name and warns about it being renamed in 2.1.0 2012-09-13 02:08 pramsey * #1780 ST_GeoHash should support geography type without cast 2012-09-12 02:37 dustymugs * Reverted some of the changes committed in r10238 2012-09-11 14:07 robe * forgot to commit ST_Delaun... reference in last 2012-09-11 14:01 robe * ST_DelaunayTriangle examples and a 3D example 2012-09-10 18:36 pracine * Fixed the state and final functions when count is zero or initial sum is null 2012-09-10 15:00 robe * #1869 note that ST_Asbinary on unknown is now illegal. Have to backport to 2.0 as well. I will add to full legacy though for those who can't change code. 2012-09-08 02:26 robe * Update PSC list 2012-09-08 01:24 dustymugs * Added docs for new variant of ST_SetValues() 2012-09-08 01:21 dustymugs * Added new variant on existing ST_SetValues where instead of a noset 2D array of booleans, the parameter nosetvalue can be used instead. 2012-09-08 01:18 dustymugs * Minor message tweaks regarding GDAL/OGR detection 2012-09-07 22:20 pramsey * correct length for closed circles (#1978) 2012-09-07 20:05 pramsey * ST_GeomFromGML on CurvePolygon causes server crash (#1936) 2012-09-07 19:54 pramsey * Fix cunit crash due to lack of proper signature for lwgeom_segmentize_sphere in header. 2012-09-07 18:27 pramsey * ST_Distance to a one-point LineString returns NULL (#1957) 2012-09-06 18:08 dustymugs * Added item for fixes regarding ticket #1981 2012-09-06 17:34 dustymugs * Removed unnecessary/unused variables and assignments. Ticket is #1981 2012-09-06 17:30 dustymugs * Minor cleanup of raster2pgsql Makefile 2012-09-06 09:30 strk * Encode dependency on GEOS >= 3.3.0 2012-09-06 09:27 strk * Encode dependency on PROJ >= 4.6.0 2012-09-06 09:24 strk * Encode dependency on PostgreSQL 9.0 or higher 2012-09-05 13:41 robe * #1970 - 9.2rc1 regress failure change layer_id_seq from select * to explicitly select fields. log_cnt now returns 0 for 9.2rc1 so fails regress otherwise 2012-09-04 12:53 robe * #1974 evidentally Unix really needs the RGB, RGBA quoted and windows doesn't like single quotes. Change to double quotes to satisfy both :) 2012-09-04 12:48 robe * #1974 revision of () escaping to work on Posix 2012-09-04 12:43 strk * Re-quote the styles, needed here Here is ImageMagick 6.5.7-8 2012-08-17 Q16 Didn't look what exactly parses styles.conf 2012-09-04 12:34 strk * Properly escape imagemagic paren arguments 2012-09-04 11:44 robe * #1974 revise style colors and generator.c convert calls so they work with windows ImageMagick 6.7.9 Q16 2012-09-01 08:39 strk * Add missing signatures from 1.5, closing #1391 These are: st_asukml and {x,y}{min,max}(box2d) 2012-08-28 04:08 robe * #1960 JDK7 compatibility patch 2012-08-28 00:05 robe * Fix for #1969 (and test buildbot) make postgis_upgrade_21_minor.sql same as postgis_upgrade_20_21.sql for now since we are in prerelease mode. 2012-08-27 04:50 robe * #1897 relabel currently mislabeled postgis_upgrade_20_minor.sql to postgis_upgrade_20_21.sql (still need to do the same for raster and topology) 2012-08-25 03:16 robe * Up version number from 2.0.1.SVN to 2.1.0SVN 2012-08-23 07:16 robe * 1963: Cast text to geometry for ST_Segmentize -- introduction of geography means no more laziness allowed 2012-08-23 06:37 robe * update about enhancements in geography ST_DWithin and ST_Distance. Done for ST_Intersects too I think? Paul? But haven't marked ST_Intersects since wasn't sure. 2012-08-23 06:31 robe * document ST_Segmentize new geography function. Will provide example later. 2012-08-22 21:04 pramsey * ST_Segmentize(geography, maxseglength) (#1962) 2012-08-21 18:22 pramsey * ST_Intersects(geography) returns incorrect result for pure-crossing cases (line cross line, line crosses polygon) (#1958) 2012-08-20 12:06 robe * Cleanup of required versions and link to new page that lists pre-packaged distros for various OS 2012-08-17 19:15 pramsey * Error in ST_Intersects: lwgeom_covers_lwgeom_sphere: only POLYGON and POINT types are currently supported (#1949) 2012-08-17 17:18 strk * Fix ST_ModEdgeHeal and ST_NewEdgeHeal for doubly connected edges Includes testcases, closes #1955 2012-08-15 18:55 pramsey * Crash in ST_Distance (#1951) 2012-08-14 12:06 robe * remove tiger_2010 from 2.1. So just need to update for 2.0 branch. too much hassle to backport and most people will want to use tiger_2011 2012-08-13 21:45 robe * #1838 for tabblock name and tabblock_id are not big enough for california. Will only alter the columns if they have not already been increased in size 2012-08-11 19:58 robe * #1838 -- tabblock not loading. oops committed wrong change. Revert previous change and make correct change. 2012-08-11 19:49 robe * #1838 tabblock not loading 2012-08-10 16:00 pramsey * Switch from gnomic to LAEA for the projection for the custom zones. Less perfect intersections, but measure metric fidelity for distances, areas, etc. (#1610) 2012-08-09 15:54 robe * #1944: Support for 2.1.0SVN/2.1.0SVN extension for topology ALTER EXTENSION postgis_topology UPDATE TO "2.1.0SVNnext"; ALTER EXTENSION postgis_topology UPDATE TO "2.1.0SVN"; 2012-08-09 02:31 robe * fix typo revision to previous commit in support of #1944 2012-08-09 00:18 dustymugs * Added clamped value comparisons and updated comments for rt_band_get_pixel_of_value() 2012-08-08 06:26 robe * revision to previous commit -- forgot one and change Next to next 2012-08-08 06:18 robe * #1944 Extensions Migration path from 2.1.0 to 2.1.0 - yoyo upgrade to allow upgrade 2.1.0SVN to 2.1.0SVNNext to 2.1.0SVN 2012-08-07 12:34 robe * #1945 for upgrade from pre 2.1.0 release to 2.1.0 -- create samealignment agg and addbandarg types if they don't exist. Get rid of pre-9.0 code -- WE CAN DO now since we don't support 8.4 in 2.1 :) 2012-08-06 22:29 dustymugs * Refactor data type cleanup 2012-08-06 16:21 robe * #1948 drop types from extension no longer needed by raster. Still can't upgrade because addbandarg can't be altered if it doesn't exist. 2012-08-06 15:02 dustymugs * Simplify code underlying ST_AddBand(raster, raster[]) 2012-08-05 23:04 robe * Another example for ST_DumpPoints which is the most common use case 2012-08-04 14:28 dustymugs * Replaced last commit with something much simpler and possibly more effective 2012-08-04 14:12 dustymugs * Added logic for when to DROP and/or CREATE TYPEs. 2012-08-03 21:45 robe * #1947 try again forget end mark 2012-08-03 21:38 robe * #1947 define upgrade path from 2.0.1 to 2.1.0SVN 2012-08-03 19:43 dustymugs * Added missing variant of ST_SetValues without nband parameter. 2012-08-03 17:44 dustymugs * Added new TYPEs that need to be added when doing a minor upgrade. 2012-08-03 00:19 dustymugs * Cleanup of GDAL checks and additional check for OGR 2012-08-03 00:19 dustymugs * Added rt_util_gdal_register_all() to prevent multiple calls to GDALAllRegister() 2012-08-02 19:27 dustymugs * Tweaked tests to use new variants of ST_AddBand and ST_SetValues 2012-08-02 18:51 dustymugs * Code and comments cleanup. 2012-08-02 15:21 dustymugs * Additional comments regarding use of PG_DETOAST_DATUM_COPY 2012-08-01 23:19 dustymugs * Added comments regarding use of PG_DETOAST_DATUM* 2012-08-01 23:16 dustymugs * Rewrote ST_AddBand(raster, ...) array version in C. Ticket is #1363 2012-08-01 03:47 robe * Fix raise notice that only shows in debug mode 2012-07-31 23:44 dustymugs * Added regression tests and docs for two of the ST_SetValues variants 2012-07-31 23:44 dustymugs * Added ST_SetValues for setting an area defined by x, y, width and height to one value. Also added function parameter "keepnodata". 2012-07-31 23:44 dustymugs * Added ST_SetValues() for setting an array of new values to a band. Ticket is #595 2012-07-31 23:43 dustymugs * First steps of add ST_SetValues() variant for array of values 2012-07-31 15:40 dustymugs * Fixed forgotten type casting for ST_DWithin and ST_DFullyWithin() 2012-07-30 22:40 dustymugs * Make PostgreSQL 8.4 happy with the rt_polygon regression test. 2012-07-30 15:40 dustymugs * Added final touches of removing output-only data types 2012-07-29 02:36 dustymugs * Added news regarding #1939 2012-07-29 02:34 dustymugs * Removed histogram data type. Ticket is #1939 2012-07-29 02:34 dustymugs * Removed valuecount data type. Ticket is #1939 2012-07-29 02:34 dustymugs * Removed quantile data type. Ticket is #1939 2012-07-29 02:34 dustymugs * Removed summarystats data type. Ticket is #1939 2012-07-27 22:49 dustymugs * Expanded on comments about things to keep in mind when using rt_band_set_pixel_line() 2012-07-27 19:46 dustymugs * Updated docs for new type addbandarg and new ST_AddBand() variant 2012-07-27 19:46 dustymugs * Refactored ST_AddBand to permit adding one or more new bands in one call. Ticket is #1938. 2012-07-27 19:45 dustymugs * New and refactored variants of ST_AddBand(). Purely superficial as none of the underlying code has been rewritten for the changes... 2012-07-25 20:37 dustymugs * Added examples to a bunch of functions 2012-07-25 19:31 dustymugs * Added rt_pixtype_compare_clamped_values() for comparing two doubles in the context of a pixeltype. 2012-07-25 15:26 dustymugs * Added info about a few undocumented raster2pgsql flags 2012-07-25 15:03 dustymugs * Added #1932 to NEWS 2012-07-25 15:03 dustymugs * Fixed syntax for setting tablespace for index. Ticket is #1932. Thanks kib. 2012-07-25 13:52 strk * Do not advertise broken type "geometry(srid)" (#1934) 2012-07-25 03:36 dustymugs * Removed garbage comments 2012-07-25 03:36 dustymugs * Consolidated create_* and drop_* scripts into respective regression tests. Should make things easier to build a valgrind test suite. 2012-07-25 03:36 dustymugs * Added docs for ST_DFullyWithin(raster, raster) 2012-07-25 03:36 dustymugs * Added ST_DFullyWithin(raster, raster) and regression tests. Ticket is #1920 2012-07-25 03:35 dustymugs * Added rt_raster_full_within_distance() and regression tests 2012-07-25 03:35 dustymugs * Added docs for ST_DWithin(raster, raster) 2012-07-25 03:35 dustymugs * Added ST_DWithin(raster, raster) and regression tests. Ticket is #1922 2012-07-25 03:35 dustymugs * Added rt_raster_within_distance() and regression tests 2012-07-24 18:01 dustymugs * Added ST_Disjoint(raster, raster), regression tests and docs. Ticket is 2012-07-23 22:57 dustymugs * Added to docs for ST_CoveredBy 2012-07-23 22:57 dustymugs * Added ST_CoveredBy and regression tests. Ticket is #1917. 2012-07-23 22:57 dustymugs * Fixed missing closing tag 2012-07-23 22:57 dustymugs * Added rt_raster_covered_by() and related tests 2012-07-23 22:56 dustymugs * Added docs for ST_Covers() 2012-07-23 22:56 dustymugs * Added ST_Covers() and regression tests. Ticket is #1916 2012-07-23 22:56 dustymugs * Added rt_raster_covers() and regression tests 2012-07-23 18:58 dustymugs * Added docs for ST_ContainsProperly(raster, raster) and minor tweaking of comments 2012-07-23 18:58 dustymugs * Added ST_ContainsProperly(raster, raster) and regression tests 2012-07-23 18:58 dustymugs * Addition of rt_raster_contains_properly and regression tests 2012-07-23 17:50 dustymugs * Added regression tests for ST_Within(raster, raster). Ticket is #1923. 2012-07-23 17:50 dustymugs * Minor fixups to ST_Polygon in docs. Ticket is #1929. 2012-07-23 17:50 dustymugs * Minor changes to comments 2012-07-23 17:50 dustymugs * Addition of docs for ST_Within(raster, raster) 2012-07-23 17:49 dustymugs * Reintroduced ST_Intersects(geometry, raster) and ST_Intersects(raster, geometry). Added notes regarding the use of ST_Polygon when needing to test the spatial relationship between a raster and a geometry. 2012-07-23 17:49 dustymugs * Added docs for ST_Contains(raster, raster) 2012-07-23 17:49 dustymugs * Updated regression tests to reflect the removal of various functions 2012-07-23 17:49 dustymugs * Removed all raster/geometry variants of ST_Intersects, ST_Overlaps, ST_Touches and ST_Contains. 2012-07-23 17:49 dustymugs * Removed geometry-based ST_Touches for raster,geometry combinations. 2012-07-23 17:49 dustymugs * Removed vector-space (geometry-based) variants of ST_Overlaps. Only raster-space versions remain. 2012-07-23 17:49 dustymugs * Addition of ST_Contains and regression tests. Ticket is #1914 2012-07-23 17:49 dustymugs * Added rt_raster_contains() and regression tests 2012-07-23 17:49 dustymugs * Removed some commented out code and added more debug output 2012-07-23 00:46 robe * #1929 document behavior change and speed improvements 2012-07-20 00:31 dustymugs * Addition debug messages and disabled one regression test for ST_Touches due to floating point issues. Will need to see the WKB output. 2012-07-19 23:53 dustymugs * Code cleanup and additional debug output 2012-07-19 20:10 dustymugs * Updated NEWS and docs for ST_Touches() 2012-07-19 20:10 dustymugs * Addition of ST_Touches() for rasters and related regression tests. Ticket is #1921 2012-07-19 20:10 dustymugs * Remove rt_spatial_relationship regression tests as similar tests are done in rt_intersects and rt_intersection 2012-07-19 20:09 dustymugs * Extracted most of code in rt_raster_overlaps to create generic GEOS spatial relationship testing function rt_raster_geos_spatial_relationship(). Refactored rt_raster_overlaps() call rt_raster_geos_spatial_relationship(). Added rt_raster_touches() and associated regression tests 2012-07-19 18:18 dustymugs * Added docs for ST_Overlaps 2012-07-19 18:18 dustymugs * Added ST_Overlaps() and associated regression tests 2012-07-19 18:18 dustymugs * Addition of rt_raster_overlaps and related regression tests. Fixed memory leaks in rt_raster_surface. 2012-07-19 18:18 dustymugs * Removed code preventing use of rt_raster_intersects on offline bands as offline bands are supported 2012-07-19 18:18 dustymugs * Minor documentation change regarding && operator and tweaked one variant of st_intersects 2012-07-19 17:00 pramsey * Add in geography note 2012-07-17 22:38 dustymugs * Fixed ST_Polygon regression tests to properly handle different GEOS versions 2012-07-17 22:37 dustymugs * Fix function creation statement 2012-07-17 22:37 dustymugs * Added cleanup code for removing ST_BandSurface 2012-07-17 22:37 dustymugs * Regression tests intended for ST_BandSurface are now for ST_Polygon 2012-07-17 22:37 dustymugs * Removed ST_BandSurface as ST_Polygon does the same thing, just in SQL. Changed ST_Polygon to point use C function instead of sql. Refactored rt_raster_surface to match performance of SQL-only ST_Polygon. 2012-07-16 03:17 robe * additional cleanup to insure settings are consistent 2012-07-16 03:11 robe * #1913 regress check 2012-07-16 03:09 robe * #1913 reverse geocoder sometimes gives least optimal answer because of sorting issue 2012-07-14 00:14 dustymugs * Updated TODO since a bunch of functions just had tickets created. 2012-07-13 23:44 dustymugs * Updated TODO and refactored ST_Intersects(geometry, raster) to use ST_BandSurface() 2012-07-13 23:29 dustymugs * Added docs and updated NEWS for ST_BandSurface 2012-07-13 23:28 dustymugs * Addition of ST_BandSurface and regressions tests. Ticket is #1911 2012-07-13 23:28 dustymugs * Additional tests for rt_raster_surface() 2012-07-13 23:28 dustymugs * Additional comments regarding use of lwgeom_as_multi() and the lwgeom_clone_deep() 2012-07-13 23:28 dustymugs * Addition of rt_raster_surface() function and related regression test. Added regression test for rt_raster_pixel_as_polygon. 2012-07-13 23:28 dustymugs * Initial commit of rt_raster_surface() with base regression tests 2012-07-12 17:24 pramsey * Add in test for node splitting with nulls and empties (#1905) 2012-07-12 13:49 dustymugs * Changed word choice "Supported" instead of "Available" 2012-07-12 03:38 pramsey * Allow circtree nodes to have more than 2 children (#1910) 2012-07-11 19:33 pramsey * Comment on methodology behind tree node merging 2012-07-11 18:15 pramsey * Complete geography performance work (#1796), move testing functions into _ST_* name space for privacy, add regression tests for issues encountered during development. 2012-07-11 04:14 pramsey * Add note for future pain 2012-07-11 04:05 pramsey * Fix issue with projecting from the poles, retain the source longitude for more sensible result. 2012-07-10 20:32 pramsey * Fix a NaN result leaking into the tree building algorithm (optimized 32 bit code only!). 2012-07-10 20:27 strk * Create target dir if non-existing 2012-07-06 23:50 pramsey * Handle best SRID finding for shapes the cross the poles and dateline. Also add some new larger zones in gnomic for larger shapes. (#1610) 2012-07-05 19:15 pramsey * Fix issue where the cached object is a point and the uncached one is a polygon. (#1796) 2012-07-05 16:50 pramsey * Support for larger objects in ST_Intersection(geography) (#1610) This adds a set of larger regions that are handled with a gnomic projection. It could also use an orthographic. There's still a case to be handled for objects that cross the dateline or poles. 2012-07-04 18:11 pramsey * Fix problems with circtree building on short edges near the poles. (#1796) 2012-07-04 13:12 strk * Fix pgsql2shp for big-endian systems (#1900) Submitted By: Ryan Oliver 2012-07-04 00:47 dustymugs * Changed return value of rt_pixtype_get_min_value() when pixel type is unknown 2012-07-04 00:33 dustymugs * Fixed how the minimum possible value of a pixel type was being determined. Added regression tests for band without NODATA. 2012-07-03 23:40 dustymugs * Fixed handling of pixel value check for NODATA 2012-07-03 22:30 dustymugs * Added docs for ST_PixelAsPoints and ST_PixelAsCentroids and update NEWS 2012-07-03 22:30 dustymugs * Addition of notes differentiating ST_DumpPolygons and ST_PixelsAsPolygons 2012-07-03 22:30 dustymugs * Addition of regression tests for ST_PixelAsCentroids and ST_PixelAsPoints 2012-07-03 22:30 dustymugs * Addition of ST_PixelAsPoints and ST_PixelAsCentroids 2012-07-03 22:30 dustymugs * Removed RASTER_getPixelPolygon as it has been replaced with RASTER_getPixelPolygons 2012-07-03 22:30 dustymugs * Change signature of ST_PixelAsPolygons() and added regression tests. 2012-07-03 22:29 dustymugs * Added check for empty raster to RASTER_getPixelPolygons 2012-07-03 22:29 dustymugs * Refactored ST_PixelAsPolygons to call a C function and have enhanced capabilities. Additional variants and regression tests are next. 2012-07-03 22:29 dustymugs * Renamed "hasnodata" function parameter to "exclude_nodata_value" 2012-07-03 20:08 robe * fix typos 2012-07-03 19:45 robe * Admit defeat and render geometries old-fashoined way 2012-07-03 19:18 robe * let see if a geom collection works 2012-07-03 19:11 robe * lets take out completely for now. 2012-07-03 19:04 robe * break out multiline into separate linestrings hopefully wkt parser can deal with this better 2012-07-03 18:44 pramsey * Add in ST_DistanceTree for testing purposes. Do not document. 2012-07-03 16:13 robe * one more try 2012-07-03 15:50 robe * forgot to commit wkt files 2012-07-03 15:45 robe * some examples of delaunay triangles 2012-07-03 13:58 strk * Be tolerant with regressing against GEOS-3.2.0 2012-07-03 13:16 dustymugs * cleanup of examples for ST_Raster2WorldCoord() 2012-07-03 07:57 robe * update unpackaged. Need to make this an automated task perhaps thru jenkins first. 2012-07-01 14:24 pramsey * Fix problem thresholded distance searching in circ-trees. (#1796) 2012-06-30 21:18 pramsey * Fix cache coherence error where the trees were being built on top of geometries which would get freed out from underneath them. Instead build them on the cached representations we're carrying around anyways (#1796) 2012-06-29 20:48 dustymugs * int32 instead of int4 as per Peter Eisentraut on postgis-devel. 2012-06-29 19:00 dustymugs * Added svn:keywords entry and removed TODO item as ticket already exists. 2012-06-29 17:10 strk * Let testing temp dir be settable using PGIS_REG_TMPDIR Prior to this change you could change it using the TMPDIR variable but that one could have been used by other software as well. 2012-06-29 02:06 dustymugs * Fixed line issues. Added another TODO item. 2012-06-29 01:58 dustymugs * Line formatting 2012-06-28 17:31 dustymugs * Added raster TODO. Ticket is #1672 2012-06-27 15:53 strk * Add ST_DelaunayTriangles (#1215) 2012-06-27 14:26 strk * Add lwgeom_delaunay_triangulation (#1215) 2012-06-27 08:26 strk * Use LDFLAGS environment when building liblwgeom (#1891) Thanks mweisman 2012-06-26 20:01 dustymugs * Int32GetDatum() not Int64GetDatum() 2012-06-26 18:17 dustymugs * Cleanup of needless dynamic memory allocations 2012-06-26 18:17 dustymugs * Addition of ST_PixelOfValue. Ticket is #1889. 2012-06-26 18:17 dustymugs * Removed improper freeing of memory. 2012-06-25 09:06 robe * #1866 -- apply same geom_equal hack as we did in build area so differnt order of geometries in resulting geomcollection is ignored 2012-06-24 19:31 robe * 2.0.1 ticket notes 2012-06-22 17:54 pramsey * Fix a currently defined-out function signature mismatch. 2012-06-22 05:52 robe * fix census tract loader for sh 2012-06-21 22:24 mcayland * Remove auto-resizing columns from text fields in shp2pgsql-gui as they seem to be the cause of #1881. 2012-06-21 20:18 dustymugs * Changed the string "MISSING GDAL DATA" to "GDAL_DATA not found". 2012-06-21 20:18 dustymugs * Added method that includes the string "MISSING GDAL DATA" in the output of postgis_gdal_version() if GDAL is unable to access its data files 2012-06-21 11:02 robe * #1759: ST_Transform fix for geography 2012-06-20 19:32 pramsey * Hey kid, here's quarter, go buy yourself a compiler. 2012-06-20 19:29 pramsey * Don't try to do tree caching tricks when the arguments are both points, that's silly. 2012-06-20 03:32 robe * might as well change last geos version to latest release we technically don't even support 3.3.0 2012-06-20 03:32 robe * Change minimum postgres version from 8.4 to 9.0 2012-06-20 03:01 pramsey * ST_LocateAlong chokes on some value combinations (#1874) 2012-06-19 22:09 dustymugs * Refactored aggregate ST_SameAlignment to return NULL if one of the rasters passed in is NULL. Added regression tests for aggegrate ST_SameAlignment. 2012-06-19 20:47 pramsey * ST_InterpolatePoint returns empty M value (#1873) 2012-06-19 19:08 dustymugs * Addition of aggregate variant of ST_SameAlignment. Ticket is #1661. 2012-06-19 19:08 dustymugs * Minor cleanup of comments 2012-06-19 18:11 pramsey * Fix mistake in tree p-i-p return value. 2012-06-19 16:46 pramsey * Fix mistaken error trap in st_dwithincached 2012-06-19 03:42 pramsey * Add in SQL binding for circ-tree cached searching. Currently in *Cached variants to allow comparisons. 2012-06-18 23:59 pramsey * Fix mistake in handling crossings-at-a-vertex 2012-06-18 22:58 dustymugs * Updated NEWS of recent fixes to trunk 2012-06-18 22:48 dustymugs * Behavior is consistent across ST_Intersects(raster, ...) variants. Synced docs of ST_Intersects to actual behavior. Ticket is #1870. 2012-06-18 22:48 dustymugs * Addition of comments to RASTER_mapAlgebra2() 2012-06-18 22:47 dustymugs * Added check before calling PG_FREE_IF_COPY() in RASTER_mapAlgebra2() 2012-06-18 22:47 dustymugs * When no pixels are counted for summary stats, all other elements of stats output should be NULL. Ticket is #1875 2012-06-18 22:47 dustymugs * Cleanup of dev comments 2012-06-18 22:47 dustymugs * Finished work implementing use of PG_FREE_IF_COPY() and better handling of rt_pgraster variables. 2012-06-18 22:47 dustymugs * Fix division by zero in ST_ApproxSummaryStats and the situation where band is empty. Added regression tests for both situations. Ticket is #1872 2012-06-18 22:47 dustymugs * More work implementing use of PG_FREE_IF_COPY() and better handling of rt_pgraster variables. 2012-06-18 22:47 dustymugs * First chunk of code reintroducting PG_FREE_IF_COPY() and prevent arbitrary reuse of rt_pgraster variables. 2012-06-18 22:02 pramsey * Silence a warning 2012-06-18 22:02 pramsey * Move the circ tree caching code out of libpgcommon and into the geography area that actually uses it 2012-06-18 21:40 pramsey * Fix missing symbols problem with lwgeom_calculate_circ_tree (#1876) 2012-06-18 20:14 pramsey * Quiet some warnings. 2012-06-18 17:44 pramsey * Remove dead code, add commentary on caching system. 2012-06-18 17:12 pramsey * Update caching code to be more generic, using call-backs to allocate/build/free specific cache structures. 2012-06-18 13:19 robe * more additions and clarifications 2012-06-18 13:06 robe * take out interruptibility from 2.0.1 release notes - got pushed to 2.1.0 2012-06-18 02:35 robe * Add in 2.0.1 news 2012-06-16 17:44 robe * put link to user contributed install guides (more nicely organized than the dev one) 2012-06-15 23:53 pramsey * Hide internal arguments for tree calculations and shut up the print output. 2012-06-15 23:11 pramsey * Update the caching infrastructure to allow for arbitrary new caching systems to be combined into one fn_extra pointer slot. Clean up the 1-d r-tree code a little bit. Make the cache handling code for geometry caching generic so it can be re-used across different internal indexing approaches 2012-06-15 23:08 pramsey * Change ignore parameters on directory 2012-06-15 22:51 pramsey * Add circular tree calculations and associated tests in support of faster geography calculations. 2012-06-15 21:59 dustymugs * Fixed expected output. Ticket is #1848 2012-06-15 15:30 dustymugs * Additional sorting of rt_clip regression test. Ticket is #1848 2012-06-15 15:16 dustymugs * Make the sql in rtpg_getSR slightly more flexible when handling auth_name and auth_srid. 2012-06-14 16:56 pramsey * update ignore to ignore generated doxygen file 2012-06-14 16:06 strk * Catch invalid topology name passed to topogeo_add* (#1867) 2012-06-13 18:28 strk * Don't strip comment lines in the middle of COPY commands (#1865) Patch by J Smith 2012-06-12 17:28 strk * Move sqldefine include on top of the file (#1822) 2012-06-12 13:11 strk * Fix call to GEOS_interruptRegisterCallback (win32) 2012-06-12 13:06 strk * Only show readable relations in metadata tables (#1813) Affects both geometry_columns and geography_columns. No easy way to put this under automated regression testing. 2012-06-12 12:34 strk * Clearer error on setting an geometry to an invalid one (#1774) Include testcase 2012-06-12 10:46 strk * Drop temporary table at end of ValidateTopology (#1797) 2012-06-12 09:30 strk * Really accept collections and multipoints from ST_MakeValid (#1719) Also updates documentation and SQL level tests. 2012-06-12 09:30 strk * Add test for MULTIPOINT processing 2012-06-12 09:09 strk * Add GEOMETRYCOLLECTION input support for ST_MakeValid (#1719) 2012-06-12 08:29 robe * part fix for #1860 ST_SRID not unique 2012-06-12 07:57 strk * Install comments when available, even withouth XSLTPROC (#1779) 2012-06-11 18:39 strk * Build and install comments when if possible (#1779) 2012-06-11 18:01 robe * Mislabeled function (raster missing new flag and ST_ASGML mislabeled as new instead of enhanced) 2012-06-11 17:28 robe * get rid of 2.1 enhancements section -- probably causing pdflatex issues because we have no enhancements 2012-06-11 17:12 robe * fix unclosed tag 2012-06-11 16:26 robe * Add a what's new in 2.1 section 2012-06-11 15:46 dustymugs * Added DROP statements for st_intersection variants that were removed before 2.0. Ticket is #1749 2012-06-11 14:45 robe * warnings too dark 2012-06-11 14:02 robe * warnings should be more prominent. Move extension warning up a bit. correct misspelling 2012-06-11 11:47 robe * #1815 put a big warning about this unexpected behavior when trying to explicitly backup tables that are part of an extension 2012-06-10 06:25 robe * #1859 commit doc corrections from Kashif Rasul. 2012-06-08 17:18 robe * snaptogrid to get rid of false failures on mingw-64 resulting from single digit rounding differences 2012-06-08 14:04 mcayland * Rename references to -r to -s in shp2pgsql-cli.c and also move argument combination validation to a separate phase. This is based upon a report from Lauri Kajan who was having issues using -D and -s TO_SRID on Windows. 2012-06-08 12:45 robe * #1834 itemize srid ranges we include and set filter to not back these up. It's long and ugly I know. 2012-06-08 11:55 strk * Fix failure to detect endpoint mismatch in ST_AddEdge*Face* (#1857) Affects calls with start_node = end_node and matching start point. 2012-06-08 11:13 strk * Remove unused variables 2012-06-08 04:14 robe * minor improvements to prefer a named road over an unnamed one if within 20 meters, also #1856 ability to control preferred name for highways, county and state roads (whether numbered or local name) 2012-06-07 23:08 strk * Properly set permissions on backend temp dir 2012-06-07 15:56 dustymugs * Tweaked rt_clip queries to have the output ordered. Changed the round() call to a ceil() call due to the question of rounding 27.5 (is it 28 or 27?). Ticket is 1848. 2012-06-07 15:18 strk * Register a GEOS interrupt callback to dispatch windows events NOTE: won't build on WIN32 with GEOS-3.4.0SVN < r3672 2012-06-07 14:17 strk * Remove unused code 2012-06-07 07:17 strk * Ignore generated Makefile (a new one) 2012-06-07 06:55 strk * Fix scoping of TEST variable (#1853) I didn't really understand why it is only TEST needing to be "our" but it seems to work. 2012-06-06 15:25 pramsey * Wrong parameters for EPSG:3844 in spatial_ref_sys (#1851) 2012-06-06 15:24 strk * Have run_test.pl use strict mode 2012-06-02 07:12 robe * Forgot to add gisgraphy as another PostGIS geocoder. I know I am missing others. 2012-05-31 22:49 pramsey * Convert to using run_test.pl instead of run_test.sh 2012-05-31 22:16 pramsey * Works for MinGW now 2012-05-31 20:16 pramsey * back out run_test.pl change, that was an accident 2012-05-31 20:11 strk * Use our own diff, avoid using Which. Works for me. Tests welcome. 2012-05-31 17:29 pramsey * Change from sed to perl 2012-05-31 16:57 pramsey * Convert sed to perl 2012-05-31 16:47 pramsey * Switch from sed to perl 2012-05-31 16:45 pramsey * Switch from sed to perl 2012-05-31 05:46 dustymugs * Explicit error message when dimensions requested exceeds the maximum permitted of a raster. 2012-05-31 05:45 dustymugs * Added more verbiage regarding setting SRID with -s for raster2pgsql 2012-05-31 05:45 dustymugs * Correct spelling mistakes 2012-05-31 05:45 dustymugs * Updated docs to reflect change to minimum GDAL version 2012-05-31 05:45 dustymugs * Bumped up the minimum version of GDAL from 1.6 to 1.8 2012-05-31 01:44 robe * #1812 change to use sT_Equals to account for polygon order difference under windows (mingw) 2012-05-31 01:34 robe * fix typos 2012-05-31 00:50 robe * #1843 document new geocode_setting set/get functions, make publically readable. 2012-05-30 21:49 pramsey * Convert calls to 'sed' to calls to 'perl' 2012-05-30 18:59 pramsey * Perl-based pre/post hooks for the raster loader tests 2012-05-30 18:58 pramsey * Update the run_test.pl script to handle the raster loader pre/post rules 2012-05-30 08:55 robe * #1845 fix tracts/bg/tabblock loading 2012-05-28 19:21 pracine * Replace the x, y iteration with a call to ST_MapAlgebraExpr() now that it supports [rast.x] and [rast.y]. Much faster! This is not (yet) part of rtpostgis.sql. Should be in 2.1. 2012-05-28 08:04 strk * Install a signal handler to request GEOS interruption (#1802) Requires GEOS-3.4.0SVN 2012-05-27 18:28 robe * #1843 - logic to add the new settings table, a get and set function, and changed debug variables in various functions to lookup value from table 2012-05-25 15:20 strk * Handle exceptions from GEOSUnionCascaded() in LWGEOM_GEOS_buildArea 2012-05-24 23:13 dustymugs * Code cleanup related to rt_band_load_offline_data() 2012-05-24 10:10 strk * Do not call OGRCleanupAll() within API functions Valgrind didn't show any leak. Eventually we can do cleanups in _PG_fini. 2012-05-24 06:41 strk * Do not assume geos allocates using malloc. Reduce memory use too. 2012-05-23 22:51 dustymugs * Fixed GDALDriverH * to GDALDriverH. 2012-05-23 22:36 dustymugs * Use GDALIdentifyDriver() to detect whether or not a raster is supported by raster2pgsql. Thanks to rouault for the suggestion 2012-05-23 21:41 colivier * Fix ST_AsGML prototype in legacy. Related to #1823 2012-05-23 20:49 colivier * Fix geography prototype for ST_AsGML. Related to #1823 2012-05-23 17:54 dustymugs * Correct when to compute number of tiles. Ticket is #1840 2012-05-23 17:54 dustymugs * Add support for GeoTIFF subdatasets. Ticket is #1839 2012-05-23 06:58 robe * force casting to text for band types in various examples prevent unknown warnings (alibo noted) 2012-05-23 03:24 robe * backout changes about 2.0.1 already accounted for in 2.0 branch 2012-05-23 03:16 robe * add section for 2.0.1 and more items in 2.1.0 -- sitll a lot of gaps to fill in. 2012-05-22 17:47 dustymugs * Added missing "See Also" sections for ST_NearestValue and ST_Neighborhood 2012-05-22 17:07 dustymugs * Fix unbalanced tags 2012-05-22 17:07 dustymugs * Added ST_World2RasterCoord, ST_Raster2WorldCoord, ST_NearestValue, ST_Neighborhood to New Features section 2012-05-22 17:06 dustymugs * Added docs for ST_NearestValue and ST_Neighborhood 2012-05-22 17:06 dustymugs * Refactored function parameter names of ST_NearestValue and ST_Neighborhood 2012-05-22 17:06 dustymugs * Added docs for ST_World2RasterCoord() and ST_Raster2WorldCoord() 2012-05-22 17:06 dustymugs * Expansion of regression tests and fix error messages 2012-05-22 17:06 dustymugs * Lowercase language due to case-sensitivity of PostgreSQL 9.2 2012-05-22 17:06 dustymugs * Added regression tests for ST_World2RasterCoord and ST_Raster2WorldCoord. Updated existing tests use the same functions 2012-05-22 17:06 dustymugs * Added ST_Raster2WorldCoord and ST_World2RasterCoord functions to consume RASTER_rasterToWorldCoord and RASTER_worldToRasterCoord functions. Refactored existing ST_Raster2WorldCoord(X|Y) and ST_World2RasterCoord(X|Y) functions to call new functions 2012-05-22 17:06 dustymugs * Removed unnecessary/unused variable 2012-05-22 17:05 dustymugs * Drop ST_Neighborhood variants due to output datatype changes 2012-05-22 17:05 dustymugs * Modified ST_Neighborhood and underlying functions to return 2D double precision array. This allows the output to be readily passed onto the ST_xxx4ma functions. 2012-05-22 17:05 dustymugs * Updated copyright 2012-05-22 17:05 dustymugs * Added SRID check to ST_NearestValue 2012-05-22 17:05 dustymugs * addition of ST_NearestValue and ST_Neighborhood 2012-05-22 16:02 colivier * Fix wrong SQL prototype, wrong PostGIS version number, and use NULL as default value rather than empty string, related to #1823 2012-05-22 15:29 robe * #1837 dupe refentry 2012-05-22 15:26 robe * detail how to upgrade from tiger_2010 to tiger_2011 data 2012-05-22 15:13 pramsey * Add upgrade mode and start to get raster working. Bah, going to need to handle pre/post actions after all. 2012-05-22 14:17 pramsey * Upgrade from 2.0 only 2012-05-22 13:34 robe * Add new functions and notes that 2.1 is tiger_2011 instead of tiger_2010. More on upgrade instructions from tiger_2010 to tiger_2011 2012-05-22 13:25 robe * rename function drop_national_tables_generate_script() to drop_nation_tables_generate_script(), revise regex to prevent psql warning in 9.2 psql 2012-05-22 12:23 colivier * Use NULL value as default for id on ST_AsGML cunit tests. Related to #1823 2012-05-22 09:20 strk * More entries in authors.* With this I could complete a git-svn-clone operation 2012-05-22 08:49 colivier * Fix some unintialized vars. Fix becoming wrong prototype call in GML3 cunit tests. Related to #1823 2012-05-22 08:49 pramsey * Initial commit of the run_test.pl perl port of the regression harness. This version runs the postgis loader and sql tests. It does not yet run in --upgrade mode or handle the raster or topology tests. 2012-05-22 07:45 strk * Update authors file for both SVN and GIT 2012-05-21 21:17 colivier * First implementation of gml:id support for ST_AsGML. Related to #1823. Not yet really tested. Cunit still missing 2012-05-21 20:29 robe * get rid of old stuff can always be pulled from prior versions 2012-05-21 20:28 robe * move tiger_2011 work to 2.1 2012-05-21 14:48 strk * UTF8 author names 2012-05-21 10:57 pramsey * Back out ST_CollectionExtract changes, too many regression failures 2012-05-21 10:13 pramsey * Harmonize regression to new ST_CollectionExtract behavior 2012-05-21 09:41 pramsey * ST_CollectionExtract: inconsistent EMPTY results (#1778) 2012-05-21 09:39 pramsey * Bump numbers for 2.1 on trunk 2012-05-21 09:36 pramsey * Accept PostGIS 1.5 WKB type numbers in WKB parser (#1807) 2012-05-21 08:05 pramsey * Revert #1830 2012-05-20 09:27 pramsey * loader dumper / gui About have version correct credits (#1743) 2012-05-20 09:17 pramsey * the pgsql2shp tool should qualify its query against pg_class to ensure it gets the correct table to dump (#1814) 2012-05-20 08:21 pramsey * News update 2012-05-20 08:20 pramsey * pgsql2shp fix for "XInvalid endian flag value encountered" on PostgreSQL 9.2 (#1830) 2012-05-20 07:31 pramsey * Update NEWS with some bug fixes 2012-05-18 09:59 strk * Fix uninitialized read in GeoJSON parser (#1829) 2012-05-17 13:37 strk * Last bugfix item... 2012-05-17 13:36 strk * Do not compare uninitialized memory (#1825) May fix prepared geometry cache sub-uses (misses) 2012-05-17 12:27 strk * Fix topology loader against PostgreSQL 9.2 (#1822) 2012-05-17 12:10 pramsey * configure enabling extension reads 9.1 even on 9.2 (#1821) 2012-05-17 11:59 pramsey * Put back 900913 srid (#1805) 2012-05-17 11:54 pramsey * Error in empty short circuit (#1828) 2012-05-17 11:47 strk * Link lwgeom_normalize change to its ticket #1812 2012-05-17 11:45 strk * Add lwgeom_normalize in LIBLWGEOM, use in cu_buildarea tester 2012-05-16 19:39 strk * Use the proper function to release returns from GEOS. 2012-05-16 19:39 strk * Cleanly handle database creation error 2012-05-16 18:50 dustymugs * Updated to note bug #1819 2012-05-16 18:47 dustymugs * Added ST_Raster2WorldCoord and ST_World2RasterCoord functions to consume RASTER_rasterToWorldCoord and RASTER_worldToRasterCoord functions. Refactored existing ST_Raster2WorldCoord(X|Y) and ST_World2RasterCoord(X|Y) functions to call new functions 2012-05-16 18:47 dustymugs * Addition of RASTER_rasterToWorldCoord and RASTER_worldToRasterCoord functions 2012-05-16 15:16 dustymugs * Additional lower-casing of language for PostgreSQL 9.2 as per r9735 2012-05-16 08:29 robe * #1820 part fix 9.2 language is case sensitive if quoted -- change 'C' and 'SQL' to 'c' and 'sql' 2012-05-14 23:28 dustymugs * Addition of some commented code. Might be useful if an option is added to output the VRTs used in the process of loading rasters 2012-05-14 23:28 dustymugs * Changed function parameter datatypes from uint16_t to int to better handle out-of-range values 2012-05-10 07:24 strk * Cleanup new BuildArea code, add profiling prints (#1806) 2012-05-09 12:08 strk * Significatively speedup BuildArea with complex input (#1806) Affects ST_BuildArea, ST_MakeValid and ST_GetFaceGeometry. Replaces the iterated SymDifference used since 2005 with a more scalable algorithm. The new algorithm removes from the polygonized result all polygons whose rings are known to be already represented by holes or shells of other polygons and finally runs a single overlay operation (unary union). With the case attached to ticket #1806, ST_BuildArea completes within 12 seconds using the new code while it takes 27 _minutes_ with the old. Both versions return the same result (according to ST_Equals). 2012-05-09 12:08 strk * Add unit test for lwgeom_buildarea (useful for #1806) 2012-05-08 16:47 strk * ST_BuildArea: arrange polygonized output reducing overlay cost (#1806) By running SymDifference against items with less points first we reduce the overall cost (output vertices tend to always grow). 2012-05-08 16:47 strk * Make ST_MakeValid tests immune by coordinates order (using ST_Equals) 2012-05-08 16:47 strk * Cross reference ST_BuildArea with ST_MakePolygon 2012-05-07 11:50 robe * who is in charge of QA here? 1.5.4 completely missing from trunk 2012-05-07 07:08 strk * postgis_raster_lib_version is also in rtpostgis.sql, not topology.sql 2012-05-07 06:58 strk * postgis_raster_scripts_installed is in rtpostgis.sql, not topology.sql 2012-05-05 13:06 pramsey * README Installation error (#1804) 2012-05-04 15:12 strk * Sort bugfixes by ticket number, add an item for #1802 2012-05-04 11:21 strk * Turn custom allocators into an occasion for interruption (#1802) This change allows interrupting any function at allocation time. Doesn't allow interrupting loops not invoking custom allocators (includes GEOS, so far). 2012-05-04 08:06 strk * Protect ST_Segmentize from max_length=0 (#1799) 2012-05-04 02:54 dustymugs * Additional refactoring of rtpg_getSR(). 2012-05-04 02:54 dustymugs * Additional fixups in rtpg_getSR() for better handling of spatial_ref_sys. Also inclusion of several regression tests to stress rtpg_getSR(). 2012-04-30 17:27 pramsey * Restrict the coverage of the geography polar interesction slightly. 2012-04-30 00:35 robe * update stats 2012-04-30 00:22 robe * drop_state_tables_generate_script state arg misnamed as address instead of param_state 2012-04-26 20:32 strk * Add note about clang build fix (#1694) 2012-04-26 20:26 strk * Fix wrong ticket reference 2012-04-26 20:10 strk * Fix false edge-node crossing report in ValidateTopology (#1625) 2012-04-26 16:30 strk * Give ST_Azimuth a chance with close but distinct points (#1791) 2012-04-25 22:36 robe * meida /print wasn't working on all cheatsheets because too specific. 2012-04-25 20:04 pramsey * AddGeometryColumns allow dims = 0 (#1573) 2012-04-25 19:41 strk * Fix toTopoGeom handling of duplicated primitives (#1790) 2012-04-25 18:49 pramsey * st_dwithin(geog, geog, 0) doesn't work (#1264) 2012-04-25 17:54 pramsey * Forward port test from #1170 2012-04-24 22:05 robe * don't underline and color hyperlinks in print mode 2012-04-24 20:02 pramsey * run_test hangs on MSYS (#1788) 2012-04-24 19:56 pramsey * run_test hangs on MSYS (#1788) 2012-04-24 19:12 strk * Azimuth on the 9th hour of the clock is 3PI/2, not 3PI/4 (thanks ij) 2012-04-24 17:58 pramsey * libjson configure test doesn't include support for DLL (#1787) 2012-04-24 15:37 strk * Hush debugging in ST_DumpPoints 2012-04-24 09:16 strk * liblwgeom depends on postgis_config.h and postgis_svn_revision.h (#1786) 2012-04-24 09:16 strk * Fix deps of postgis on postgis_svn_revision.h, pgcommon and lwgeom 2012-04-23 05:48 robe * make igst index link tag friendly and provide example of nd index. 2012-04-20 16:13 dustymugs * Added note related to overviews not being aligned though the source rasters are aligned for specific overview factors. 2012-04-20 14:50 dustymugs * Added ticket #1782 to NEWS. Updated contributors section. 2012-04-20 03:28 pramsey * Fix incorrect call to geom->type where geom->flags is needed 2012-04-20 03:23 pramsey * st_isclosed() doesn't return false for unclosed POLYGONS only LINESTRINGS (#1756) 2012-04-19 15:24 dustymugs * Removed emptry string check that prevented use of proj4text or srtext in rtpg_getSR(). Ticket is #1782 2012-04-19 15:23 dustymugs * minor comments changed 2012-04-18 19:21 dustymugs * Fix handling of tuples as described in #1782 2012-04-16 20:06 dustymugs * Replaced testing of two rasters' geotransform matrix with alignment test 2012-04-15 15:47 mcayland * Fix #1468: shp2pgsql-gui table column schema get shifted A couple of copy/paste errors meant that the update handler was being invoked a second time on the loader shapefile column name, rather than just once on the schema column. 2012-04-15 15:46 mcayland * shp2pgsql-gui: don't allow the user to edit the schema name in the listview. This brings the behaviour in line with that of the table name, and since these entries are generated from the table selector there should be no need to do this. 2012-04-13 21:14 strk * Regress-test ST_ChangeEdgeGeom with 2-vertext target (#1775) This case was actually fixed by previous commit (ST_SymDifference) 2012-04-13 21:04 strk * fix ST_SymDifference(empty, geom) to return geom (#1776) 2012-04-13 14:32 strk * Give more detail on topology editing function exception 2012-04-12 14:09 strk * Use an SQLPP command for pre-processing SQL files (#1694) The SQLPP command is figured at ./configure time. It will use cpp(1) or gpp(1) if any is found in that order or fallback to whatever CPP expands to (usually the compiler with -E) 2012-04-12 14:09 strk * Use more compatible '#define' syntax 2012-04-12 10:51 strk * Do not assume ndims check statements are fully qualified (#1708) 2012-04-12 10:28 strk * Automate test for toTopoGeom usage with custom search_path (#1763) 2012-04-12 10:28 strk * Do not consider RESET outputs 2012-04-12 10:06 strk * Rephrase item for about topology functions and full qualification 2012-04-12 07:21 strk * Fix NaN from ptarray_locate_point with zero-length lines (#1772) 2012-04-12 07:21 strk * Fix comment doc about lwline_split_by_point_to 2012-04-11 19:20 strk * Add note about ST_RemEdgeModFace and ST_RemEdgeNewFace fix (#1766) 2012-04-11 19:17 strk * Don't let ST_RemEdge* destroy TopoGeometry objects (#1766) 2012-04-11 12:37 strk * Add note aboute #1714 bugfix 2012-04-11 12:37 strk * Cleanup lines after (bad) snapping (#1714) 2012-04-10 17:26 strk * Have ST_ModEdgeSplit and ST_NewEdgesSplit to use ST_Spit (#1715) 2012-04-10 15:51 strk * Call config.status if liblwgeom.h.in newer than liblwgeom.h (#1691) 2012-04-10 10:20 strk * Add bug fixes committed so far in the 2.0 branch 2012-04-10 00:20 robe * #1759 transform functionality doesn't work if you have raster installed. 2012-04-09 22:44 dustymugs * Added handling of subdatasets coming from NetCDF, HDF4 and HDF5. Associated ticket is #1761. 2012-04-08 10:00 strk * Fully qualify calls to topology functions (#1763) 2012-04-07 02:05 robe * #1757 -- change in behavior of ST_3Dlength_spheroid not noted and changed name incorrectly stated. 2012-04-06 12:38 robe * hyperlink function names to section in online manual 2012-04-05 18:35 chodgson * updated version number in pom.xml 2012-04-05 18:25 pramsey * Geometry has Z dimension but column does not (#1755) 2012-04-05 18:22 pramsey * Send an "unknown" typmod into gserialized constructor from ST_GeographyFromText (#1755) 2012-04-05 09:11 strk * Allow for 1.#INF to be threated as Inf (#1736) 2012-04-05 09:11 strk * Threat Infinite and 1.#INF the same (#1736) 2012-04-05 08:56 strk * Drop java/pljava dir (#1411) 2012-04-05 08:54 strk * Do not mention pljava, it's gone (#1411) 2012-04-05 00:27 dustymugs * Fixed missing SVN revision tag in raster2pgsql's help 2012-04-04 21:49 strk * Add note about topology.Polygonize not doing edge linking 2012-04-04 21:49 strk * Tabs to spaces 2012-04-03 19:26 pramsey * Update release date for 2.0.0 (TODO more readable release notes) 2012-04-03 19:24 pramsey * Set up for 2.0.1 2012-04-03 19:22 pramsey * Prep for 2.0.0 2012-04-03 18:46 dustymugs * Fix error message 2012-04-03 18:29 strk * Use full URL to trac query 2012-04-03 18:24 pramsey * Add extensions 2012-04-03 18:21 pramsey * Convert text to UTF8 2012-04-03 18:10 pramsey * Final answer? 2012-04-03 17:46 pramsey * rewrite breaking section 2012-04-03 17:34 pramsey * More minor edits 2012-04-03 17:27 strk * Add ST_Node item 2012-04-03 17:25 pramsey * Minor reorg of NEWS, more to come 2012-04-03 12:05 strk * Write CREATE TYPE as expected by postgis_proc_upgrade.pl (#1746) The script expects CREATE TYPE to spawn multimultiple lines ... 2012-04-03 12:05 strk * Add note about input noding for ST_Polygonize and ST_BuildArea 2012-04-01 20:19 pramsey * Update changelog on trunk 2012-04-01 20:16 pramsey * Version bumps for RC2 2012-03-31 16:26 dustymugs * Minor tweak to message regarding GEOS < 3.3 2012-03-30 22:40 pramsey * Comment out noise in the GEOS 3.2 case. (#1740) 2012-03-30 14:17 mcayland * Make sure that we clear any previously selected files when (re)opening the import file selector in the shapefile GUI. 2012-03-30 14:17 mcayland * Fix #1741: Build error --with-gui, gtk problem. Older versions of GTK (< 2.14.0) don't have gtk_dialog_get_content_area(). Work around this by providing a compatibility #define for these older GTK versions. 2012-03-30 08:36 strk * Have BuildArea catch exception from GEOSSymDifference (#1738) 2012-03-29 21:52 pramsey * wrong proj4text in spatial_ref_sys for SRID 31300 and 31370 (#1389) 2012-03-29 12:37 strk * Fix crash on NULL item in ND index (#1734) Add regression testing for the case 2012-03-28 23:12 pramsey * make install doesn't install postgis_restore.pl (#1732) 2012-03-28 22:59 pramsey * Bump versions for 2.0.0rc1 release 2012-03-28 14:02 strk * Strip schemas from search_path as part of uninstall procedures 2012-03-28 12:40 strk * Reduce extensions requirements (#1724) Build extensions even w/out topology, and even w/out xsltproc if comments are already built. 2012-03-28 11:36 strk * Fix GetGopoGeomElementArray code (#1730) Includes regression testing for both GetGopoGeomElements and GetGopoGeomElementArray 2012-03-28 09:19 strk * Add regression test for GiST index crash on empty (#1697) Also tests you can query all empty items from an index 2012-03-28 08:22 strk * Fix crash in n-dimensional GiST index on EMPTY geoms (#1697) This is Paul's patch with the unrelated btree changes removed and the memset removed too. 2012-03-27 23:39 robe * detail how to use create extension .. from unpackaged 2012-03-27 23:17 robe * #1727 this will make statements like CREATE EXTENSION postgis FROM unpackaged; CREATE EXTENSION postgis_topology FROM unpackaged; work. It's sadly static at the moment. 2012-03-27 22:05 dustymugs * Added robustness checking that GDAL supports spatial reference text from spatial_ref_sys table 2012-03-27 19:25 dustymugs * Merge branch 'master' into HEAD 2012-03-27 18:14 strk * Have uninstall scripts drop created schemas, regress test it 2012-03-27 17:30 strk * Wrap most topology.sql into a transaction CREATE SCHEMA is left out because uninstall_topology isn't getting rid of it (to be fixed later) 2012-03-27 17:06 strk * Do not mess with search_path when installing comments (#1723) 2012-03-27 14:47 strk * Update extensions/README (#1720) - reStructuredText Markup, 80 column text - Rewrite several paragraphs - Add requirements section - Make it clear that --with-raster is required, and that postgis also includes the raster support Patch by Mike Toews 2012-03-27 14:32 strk * Accept POINT types in ST_MakeValid (#1719) 2012-03-27 10:51 strk * 80 cols wrap for pgsql2shp help screen (#1722) Patch by Mike Toews 2012-03-27 09:56 strk * Update doc/README (#1721) - reStructuredText Markup, 80 column text limit - Structure the make targets using definition lists - It turns out that graphviz is required for make doxygen Patch by Mike Toews 2012-03-27 07:01 strk * Drop pljava (#1411) 2012-03-27 02:08 robe * #1693, #1704 - twofer - change DROP AGGREGATE and DROP VIEW to be DROP .. IF EXISTS 2012-03-27 01:16 robe * minor typo correction 2012-03-26 16:23 mcayland * Rework code from r9204 (bug #900: shp2pgsql: a switch to drop M from 4d imports) to fix bug #1710: shp2pgsql -t option is not working properly. The original implementation set the has_z/has_m flags directly based upon the -t parameter; however this lost the information as to how many dimensions were specified. Resolve this by specifying a new force_output configuration variable and setting it to an enumerated constant, so that we can then implement a simple switch() to set both the output dimension and output flags correctly. 2012-03-26 16:23 mcayland * Remove istypeM state variable from loader as it isn't used anymore. 2012-03-26 16:23 mcayland * Improve readability in the loader by fixing various whitespace issues. 2012-03-26 13:18 robe * change example for totopogeom 2012-03-26 13:17 strk * Wrap within 80 cols 2012-03-26 12:26 robe * Add an example for toTopoGeom 2012-03-23 23:46 pramsey * Updates for 2.0 2012-03-23 23:00 strk * Add topology validity checking (extra paranoia) 2012-03-23 22:54 strk * Do not abuse ST_Snap for tweaking edge endpoints (#1706) 2012-03-23 22:23 strk * Enhance edge splitting robustness (#1711) 2012-03-23 21:07 pramsey * Skip over geodetic check for empty geometries. 2012-03-23 19:14 pramsey * Allow build to work under DEBUG=5 2012-03-23 17:08 strk * Add debugging lines to sqlmm edge splitting functions 2012-03-23 15:11 strk * Add missing ticket reference to it's regression test 2012-03-23 13:16 pracine * Made the red color for parameters a bit darker... 2012-03-23 13:09 robe * flesh out upgrade a bit. 2012-03-23 07:54 robe * make variables names red to stand out better 2012-03-22 17:24 pramsey * Update regression to handle new collection(empty) possibilities 2012-03-22 16:55 pramsey * Parse error on WKT for multi with empty elements (#1703) 2012-03-22 15:07 strk * Add collapsed polygon case to ST_Simplify test (#1698) 2012-03-22 15:07 strk * Add a ptarray_simplify parameter to preserve min vertices (#1698) A polygon ring collapsed to a segment is still better handled by mapnik than the same ring collapsed to a single point. This commit retains at least 3 vertices for polygons. 2012-03-22 15:06 strk * Do not drop collapsed polygon shells (#1698) 2012-03-22 13:33 robe * missing para tag 2012-03-22 13:29 robe * explain geometry_columns is now a view and that spatial tables can be created in 1 step. 2012-03-22 13:02 robe * more expounding on typmod vs. constraint based geometry columns 2012-03-21 21:36 pramsey * Change @rm to rm for visibility 2012-03-21 20:32 pramsey * Make distclean should remove all the Makefile's generated by ./configure 2012-03-21 20:03 pramsey * Bump versions for beta4 2012-03-21 18:22 pramsey * Ignore some files 2012-03-19 20:40 pramsey * README.raster needs updating or removal (#1649) 2012-03-19 12:07 strk * ST_SnapToGrid: retain type on empty return (#1695) 2012-03-16 19:13 strk * Fix typo puffered -> buffered 2012-03-16 19:11 strk * Be quieter on polygon ring collapse (in ST_Simplify) 2012-03-16 15:03 robe * fix typo in example was adding band 1 twice 2012-03-16 12:58 robe * surreal clipping 2012-03-16 12:47 robe * slightly more efficient (and hmm my last timing was with 2 buildings instead of 3) 2012-03-16 12:40 robe * minor adjustment to example 2012-03-16 12:25 robe * Provide summarizing summary stats example using intersection of geometry. Pretty fast. 2012-03-16 12:15 strk * Rename legacy_compatibility_layer.sql to legacy_minimal.sql As per http://postgis.refractions.net/pipermail/postgis-devel/2012-March/019663.html 2012-03-16 11:58 strk * Do not take PROJ4 errno value as a sign of error (#1580, #1690) Dejavu... 2012-03-16 08:48 robe * Add more descriptive notes detailing difference between files 2012-03-16 08:27 robe * fix spelling typos 2012-03-16 06:59 robe * Put in a section for crowd sourcing campaigns 2012-03-15 09:54 strk * Bail out if user specified json dir isn't correct (#1688) 2012-03-14 21:45 robe * put note about slowness of raster st_union and promise it will be better in later versions 2012-03-14 21:35 robe * change example to be more efficient (prior version was taking 9-10 seconds this much improved one takes 3.5 seconds) 2012-03-14 20:26 dustymugs * Updated to have C API tests use libtool 2012-03-14 19:05 dustymugs * Use AC_SEARCH_LIBS instead of AC_CHECK_LIB for checking GDAL libraries 2012-03-14 16:35 strk * Don't re-implement AC_PATH_PROG for gdal-config 2012-03-14 16:02 pramsey * Prepare for 2.0.0beta3 release 2012-03-14 15:50 strk * Encode dependency of raster _scripts_ to postgis_svn_revision.h 2012-03-14 15:46 strk * Encode postgis_svn_revision.h dependency for raster lib 2012-03-14 15:40 strk * Make sure to rebuild topology.sql on postgis_svn_revision.h change 2012-03-14 15:32 strk * Add a TOPOLOGY and a RASTER label in postgis_full_version() output This is to know if they are available 2012-03-14 13:13 strk * Simplify ST_AsLatLonText code and possily fix #1657 The possible bug was a call to pg_do_encoding_conversion w/out a defined string size argument. 2012-03-14 12:15 strk * Use existing text2cstring and cstring2text wheel 2012-03-13 18:06 dustymugs * Explicitly set NULL character to snprintf outputs as Windows does not do so automatically. Ticket is #1682. 2012-03-13 17:08 strk * Add simple tests to stringbuffer class (#1668) Hopefully these fail on windows so it's easier to test. It may take a memory debugger to really see the failure. 2012-03-13 17:08 strk * Rename misc testsuite to "misc" 2012-03-13 16:23 pramsey * Roll back changes for autodetecting C99 vsnprintf (#1688) 2012-03-13 16:13 dustymugs * Removed "hasnodata" column output of ST_BandMetaData as per #1681. If a band does NOT have a NODATA value, the "nodatavalue" column will be NULL. 2012-03-13 09:18 strk * Add upgrade instructions 2012-03-13 09:17 strk * Drop SRID constraint issue (not an issue anymore with typmod) 2012-03-13 09:17 strk * Add note about toTopoGeom 2012-03-13 08:33 strk * Set Version to match Version.config (HOWTO_RELEASE file mentions you need to edit it anyway) 2012-03-13 08:30 strk * Add note about topology/README 2012-03-13 08:18 strk * Update README.postgis (#1670) - Use consistent formatting in reStructuredText; see formatted result with rst2pdf or rst2html, or if you don't want to install docutils, you can copy/paste the text to http://www.tele3.cz/jbar/rest/rest.html - Wrap lines to 80 columns, trim trailing whitespace, replace tabs with space chars - Fix typos, and use consistent case and punctuation - Alphabetize the directory structure - Add ./libpgcommon to directory structure, and attempt to describe it - Arrange style of REQUIREMENTS section a bit more consistent across components: removing repetition, stating what is required or optional, etc. - When referencing PostGIS SQL functions, use the "ST_" prefix, where applicable - Mention that both Raster and Topology extensions are built by default, add notes how build without them Patch by Mike Toews 2012-03-12 21:27 pramsey * Complete alternate implementation of vsnprintf, vasprintf for non-C99 systems. (#1668) 2012-03-12 17:45 strk * Fix UTM zone reserved SRID interpretation (#1680) 2012-03-10 14:33 strk * Check docs as part of "make check" Adds "xmllint" to the requirements for running "make check" 2012-03-10 14:28 strk * Introduce use of . I think we should use it more.. 2012-03-10 14:28 strk * typo 2012-03-10 14:27 strk * Drop commented out lines 2012-03-10 14:08 strk * Add credits to Salvatore 2012-03-10 14:08 strk * No allowed after in (xmllint) -- add Vizzuality credit 2012-03-10 14:08 strk * goes before 2012-03-10 14:08 strk * <note> cannot be direct child of <abstract> (xmllint) 2012-03-10 14:07 strk * choice is a <paramdef> attribute, not <type>'s 2012-03-10 14:07 strk * <abstract> can't contain <note> (xmllint) 2012-03-10 13:44 strk * Use empty params as placeholders, add missing refsection title (xmllint) 2012-03-10 13:44 strk * More <para> wrapping (xmllint) 2012-03-10 13:44 strk * wrap more <informalfigure> content in <para> (xmllint) 2012-03-10 13:43 strk * choice is a <paramdef> attribute, not <type>'s 2012-03-10 13:43 strk * wrap <informalfigure> content in <para> (xmllint) 2012-03-10 13:43 strk * wrap <listitem> content in <para> (xmllint) 2012-03-10 13:43 strk * choice belongs to <paramdef>, not <parameter> (xmllint) 2012-03-10 13:43 strk * <sect1info> goes before <title> 2012-03-10 13:43 strk * <informalfigure> goes in <para> (xmllint) 2012-03-10 13:42 strk * Use <para> as appropriate (xmllint) 2012-03-10 13:42 strk * <informalfigure> must be in <para> (xmllint) 2012-03-10 13:42 strk * Put semicolon where it belongs (xmllint) 2012-03-10 13:42 strk * Use <para> elements according to the DTD (xmllint) 2012-03-10 13:42 strk * <strong> to <emphasis> (xmllint) 2012-03-10 13:00 strk * <filename> is not a valid child of <listitem>, <para> is (xmllint) 2012-03-10 12:51 strk * More linked -> linkend typos 2012-03-10 12:10 strk * Fix xref (thanks make check) 2012-03-10 12:07 strk * linked -> linkend (thanks make check) 2012-03-10 11:38 strk * Add credit to Avencia (#1671) 2012-03-10 11:31 strk * More credits 2012-03-10 11:26 strk * Add postgis topology signers to credits section (#1601) I also formatted the names to be one-per-line. Output won't care but it's easier to sort alphabetically ... 2012-03-10 10:34 strk * Substitute CREDITS content with pointers to manual (#1601) 2012-03-10 10:27 strk * Be quiet when postgis_svn_revision.h isn't needed (#1666) 2012-03-10 00:40 dustymugs * Cleanup for testing GDAL include files 2012-03-10 00:30 dustymugs * This should do it. Debugging Hudson is fun... like entertaining a grumpy old man. 2012-03-10 00:24 dustymugs * Removed multiple AC_ARG_WITH calls for raster 2012-03-10 00:19 dustymugs * Another attempt to fix hudson... 2012-03-10 00:05 dustymugs * Comment cleanup as hudson isn't happy. 2012-03-09 23:57 dustymugs * Fixed GDAL configuration as hudson wasn't getting GDALFPolygonize. This may be the cause for Windows not detecting GDALFPolygonize either. 2012-03-09 19:00 dustymugs * Initialize variables that may cause compile-time warnings in rt_api.c. Added additional NLS items to raster2pgsql. 2012-03-09 17:46 pramsey * Work around difference between behavior of MS snprintf and C99 snprintf. (#1668) 2012-03-09 14:59 robe * minor correction in title of example 2012-03-09 14:20 robe * Fix mapalgebra2 syntax 2012-03-08 10:58 strk * Ignore all html files under doc/html/ (also chunked) 2012-03-08 10:58 strk * Give introduction chapter an id. This should give it a nice URL online so we can point to credits from the CREDITS file (#1601) 2012-03-08 10:36 strk * Remove .svnignore files (#1665) 2012-03-08 10:36 strk * Drop .cvsignore files 2012-03-07 20:51 pramsey * Update trunk versions for next cycle 2012-03-07 20:50 pramsey * Update for beta2 release 2012-03-07 20:47 pramsey * Fix need to hack regress source path 2012-03-07 20:38 pramsey * Remove reliance on `pwd` for raster build and test. 2012-03-07 19:31 pramsey * Replace " with ' in mingw pwd call 2012-03-07 19:27 pramsey * MinGW configure for regression dir 2012-03-07 17:40 pramsey * ST_Summary output contains a spurious "+" sign (#1663) 2012-03-07 11:39 strk * Actually run GeoJSON input tests when libjson is available 2012-03-07 11:18 strk * Report libjson availability from postgis_full_version (#1660) This commit adds a postgis_libjson_version() although the library doesn't give any version information. We just return NULL if not using the library and "UNKNOWN" otherwise. 2012-03-07 10:55 strk * Add note about installing json-c library on apt-based systems 2012-03-07 09:16 strk * Update REQUIREMENTS section, add JSON-C (#1660) 2012-03-07 08:17 strk * I didn't realize we had ST_AsLatLonText already :) 2012-03-07 05:31 pramsey * Crash in ST_Project on NULL input (#1658) 2012-03-07 04:28 dustymugs * Slightly more verbose error message for when rt_raster_gdal_rasterize() is unable to have an OSR object project a provided srs text. 2012-03-06 21:16 strk * Update TODO list dropping done items 2012-03-06 18:55 pramsey * Work around default rule for lexer generation. (#1644) 2012-03-06 16:19 pramsey * I'm not sure this "fix" was actually a fix so I'm removing it. 2012-03-06 16:16 strk * Snap new lines over existing nodes (#1654) Also add Salvatore to the list of testing heroes :) 2012-03-06 13:44 strk * Don't let a single collapse hide _all_ edges (#1650) 2012-03-06 13:21 strk * Skip collapsed edges after snapping (#1650) 2012-03-06 13:20 strk * Uncomment new tests for #1641 2012-03-06 09:45 strk * Have "make install" only install what "make" built (#1652) Also updates the README to be in sync with Makefile.in 2012-03-06 09:05 strk * Fix toTopoGeom to actualy _use_ to given tolerance (#1647) 2012-03-05 23:09 pramsey * Rename LOADER_OBJS to the more direct SHPLIB_OBJS 2012-03-05 22:54 pramsey * Defines are picked up from ../../postgis_config.h via ../liblwgeom_internal.h 2012-03-05 22:51 pramsey * Add static link directive to libtool (#1644) allows build on Debian Wheezy 2012-03-05 16:45 pramsey * Update kneufeld contact info 2012-03-05 12:24 strk * Add GetTopologySRID (#1182) 2012-03-05 12:14 strk * Optimize ST_AddIsoNode (#983) 2012-03-05 11:33 strk * Move topology reference entries from "processing" to "constructors" 2012-03-05 11:05 strk * _ST_MinTolerance isn't IMMUTABLE, due to db lookup... 2012-03-05 10:49 strk * Handle 0 tolerance by using topology.precision or min float one This handling fixes the #1641 case w/out passing an explicit tolerance and makes a step toward #785. 2012-03-05 08:28 strk * Fix typos (FUNCION), drop duplicate entries 2012-03-04 22:35 robe * put in libiconv path specification if it needs to be done. For some reason my mingw64 can't find it unless its explicitly set. 2012-03-03 22:59 robe * Link postgis raster contributors to raster funding page. 2012-03-03 22:56 robe * add in missing credits and link to Paul's credit description blog pages. 2012-03-02 23:35 pramsey * Add an SRID to box3d to allow lossless casts. 2012-03-02 20:53 pracine * Finish fix for ticket #1635. Added operator function to skip when restoring. 2012-03-02 20:17 pracine * Fix for ticket #1589. Removed misleading example. 2012-03-02 20:14 pracine * Fix for ticket #1589. Removed misleading example. 2012-03-02 19:00 dustymugs * Fixed problem with passing PROJ.4 text to GDAL which may result in SRS WKT that is NOT what is desired. Now preferentially use EPSG:SRID if available. Ticket is #1618. 2012-03-02 15:02 robe * #1630 and drop type raster_columns. Good grief how many hidden objects are there. 2012-03-02 14:36 robe * #1630 Add missing permutations of st_clip that exist in older versions so trimraster can be renamed to crop 2012-03-02 14:11 robe * oops type in last commit. 2012-03-02 14:05 robe * #1630 -- this has got to be a bug in the PostgreSQL extensions model that I have to drop dependent types of views and types from extension when drop view and type. Will confirm later. 2012-03-02 13:15 robe * Add section about soft upgrade with extensions. 2012-03-02 01:15 dustymugs * Add handling of when clamped pixel values is equal to the band's clamped NODATA value. Ticket is #1139. 2012-03-01 22:25 dzwarg * Added regression test for error case reported in #1638. 2012-03-01 22:17 dustymugs * Refactored how skewed rasters are computed as the extents were not correct. Rewrote parts of rt_raster_gdal_warp and rt_raster_gdal_rasterize. Related ticket is #1615. 2012-03-01 21:05 pracine * Fix for #1589 and #1633. 2012-03-01 20:32 strk * postgis_drop_before.sql.in.c => postgis_drop_before.sql 2012-03-01 19:46 pramsey * Make --prefix note a warning rather than a failure. (#1628) 2012-03-01 19:09 strk * Add an internal topology._st_mintolerance funtion This function computes the minimum tolerance for a given geometry. It works by computing the smallest floating point difference that could be expressed on any vertex of the geometry. Currently it's only used to workaround the ST_DWithin/ST_Within inconsistency (#1625) but could probably be used everytime 0 is passed as a tolerance, possibly fixing #1641 as well. 2012-03-01 16:47 dustymugs * Update regression tests for 1-raster ST_MapAlgebraExpr due to commit r9371 2012-03-01 16:47 pracine * Fix for ticket #1635. Added explicit ~ and && operators on raster and geometry. 2012-03-01 15:59 dustymugs * Forced casting of output from 1-raster ST_MapAlgebraExpr. Ticket is #1639. 2012-03-01 15:51 strk * MathML DTDs are also needed for the HTML 2012-03-01 15:51 strk * added MathML 3 DTD to requirements in doc 2012-03-01 15:14 strk * Add a test for #1641 using a tolerance (1e-16 is good enough) 2012-03-01 15:07 strk * Add test for #1641 (disabled as it would fail) 2012-03-01 15:07 strk * Cleanup the face table as well (you just can't drop the universe) 2012-03-01 12:50 strk * Add more items in the skip list (#1640) 2012-03-01 12:25 strk * Add tests for ptarray_insert_point (see #1640) 2012-03-01 12:25 strk * Check args passed to ptarray_set_point4d 2012-03-01 11:58 strk * Drop reference to postgis_uses_stats (#1632) 2012-03-01 09:16 strk * Properly exit the loop parsing spatial_ref_sys population (#1640) 2012-03-01 08:54 strk * Drop postgis_uses_stats (#1632) 2012-03-01 08:26 strk * Rename drop files to be hopefully clearer, add copyright headers 2012-03-01 08:26 strk * Stop including drop calls from main postgis.sql file Upgrade file is still generated with the drop file included 2012-02-29 18:58 pramsey * make parse location error test a little more lenient 2012-02-29 18:19 pramsey * Update for post-Beta1 2012-02-29 18:18 pramsey * Update for beta1 2012-02-29 15:59 strk * Check first point after snapping an edge to a new point (#1631) 2012-02-29 14:20 strk * Get the deprecated function right (fixes previous commit) 2012-02-29 14:14 strk * Drop removed st_clip function (#1630) 2012-02-29 13:52 strk * Do not install intermediary files (#1621) 2012-02-29 13:35 strk * Don't override postgis_svn_revision.h with a fake revision (#1634) 2012-02-29 10:55 strk * Stop using postgis_uses_stats() from postgis_full_version() (#1632) 2012-02-29 10:48 strk * Integrate upgrade tips in postgis_full_version reference 2012-02-29 10:39 strk * Mention rtpostgis_upgrade* and topology_upgrade* in manual (#1611) 2012-02-29 10:08 strk * Have XSLTPROCFLAGS default to --nonet This way you can drop by redefining it as in: make XSLTPROCFLAGS= 2012-02-29 09:51 strk * Add support for a user-defined XSLTPROCFLAGS variable to append Example: make -C doc html XSLTPROCFLAGS=--nonet Still defaults to allow net access, I couldn't find an option to override --nonet with its contraty... 2012-02-29 09:00 robe * #1630: Swap the order of dropping - you have to drop the function first before the type 2012-02-29 08:44 robe * #1630: drop wktgeomval type from extension, but still can't drop because of function _st_dumpaswktpolygons 2012-02-29 08:04 robe * #1619: Logic to mark spatial_ref_sys, topology, layers tables as user editable so that the data in them gets backed up during pg_dump 2012-02-29 03:01 pracine * 2012-02-29 02:56 pracine * Other minor fix. 2012-02-29 02:51 pracine * fix doc typo. 2012-02-29 02:47 pracine * Fix for ticket 1536. Added a nodataval[] parameter to ST_Intersection and removed the otheruserfunc one. Changed the ST_Clip trimraster parameter name to crop and set it to true by default. Updated the doc. 2012-02-29 00:52 pramsey * Fix for MinGW! 2012-02-29 00:49 pramsey * Fix for windoze! 2012-02-28 18:50 pramsey * Make our --prefix policy crystal clear 2012-02-28 18:29 pramsey * Fix regression due to new error message in GML generation 2012-02-28 18:09 pramsey * Make error message on GML2 calls for TIN more instructive (#1591) 2012-02-28 17:17 strk * TopoGeo_addPoint: use a more functional tolerance when snapping (#1613) All of this looks like magic but it isn't. I actually wonder if ST_ModEdgeSplit and ST_ModEdgesSplit and ST_Split itself should do this internally, and if in doing so we wouldn't need to do it from higher levels. It doesn't indeed feel comfortable to do all this noise on such an high level. Anyway this commit adds a now-passing regression test for the topology building issue and that's A Good Thing. 2012-02-28 17:17 strk * Hush debugging lines unless requested 2012-02-28 10:43 strk * Ignore extension sql target dirs 2012-02-28 10:28 strk * Have configure look for mathml2.dtd, rework doc build scripts (#1157) 2012-02-28 10:17 robe * correct proto output type -- ST_Union of rasters always returns a raster 2012-02-28 06:13 pramsey * Set eol-style to LF 2012-02-27 22:08 pramsey * Try again with line endings, this time using eol-style instead of eol-type (#1605) 2012-02-27 20:58 pramsey * Set appropriate mime types and text file types on all files. (#1605) 2012-02-27 18:19 pramsey * Load the "right" legacy.sql file (warning: hard coding 00-regress-install into a sql file). 2012-02-27 18:13 pramsey * Quiet compile warning. 2012-02-27 18:07 strk * Use rounder numbers in tests (fixes a regression on 32bit system) 2012-02-27 17:48 pramsey * Ignore LF/CRLF differences when differencing sql output files in raster tests. 2012-02-27 17:36 strk * Add regression test for legacy.sql and uninstall_legacy.sql (#915) 2012-02-27 17:36 strk * Properly cleanup spatial_ref_sys after loader tests 2012-02-27 17:36 strk * Properly cleanup spatial_ref_sys 2012-02-27 16:55 strk * Define the legacy 'within' as a proxy to ST_Within as the C entry point was dropped 2012-02-27 16:52 strk * Generate uninstall_legacy.sql from legacy.sql (#949) 2012-02-27 16:42 dustymugs * Correct handling of 8BSI pixel types when converting a raster to a GDAL MEM dataset. This should resolve the failures in #1617. 2012-02-27 16:26 strk * Fix "make clean" to drop all generated files 2012-02-27 16:06 strk * Encode dependency of topology script on sqldefines (for version) 2012-02-27 15:55 strk * Have postgis_full_version() check versions of all objects (#1608) 2012-02-27 15:39 strk * Have postgis_raster_lib_version() include SVN revision (#1608) 2012-02-27 15:26 strk * st_clip signature changed (#1620) 2012-02-27 15:03 strk * Add postgis_raster_scripts_installed() function (#1608) 2012-02-27 15:02 strk * Add postgis_topology_scripts_installed() function (#1608) 2012-02-27 14:08 robe * update to March. Seems likely we'll miss the February boat. Maybe shoot for March. 2012-02-27 11:22 strk * Set script version to master version + svn revision (#1608) Affects postgis_scripts_released() and posgis_scripts_installed(). Needs some wider testing of upgrade scripts and then will attach the same version to raster and topology. 2012-02-26 18:31 dustymugs * Additional test of rt_raster_to_gdal(). 2012-02-25 20:35 pramsey * Minor update to comments. 2012-02-25 20:30 pramsey * Simplify table/schema copying, hopefully fix windows. 2012-02-25 19:46 pramsey * Compress sed calls into one to make life better for MSYS 2012-02-25 17:10 pramsey * Correct fix for win32 crasher, it was proj returning a null error string. 2012-02-25 05:53 pramsey * SPI_finish before dropping out on NULL proj4text 2012-02-25 05:49 pramsey * Match to new behavior on null proj4text 2012-02-25 03:12 pramsey * Remove Win32 crasher on NULL proj4 string 2012-02-24 23:58 pramsey * Quote out the svn and git commands for windoze 2012-02-24 23:42 dustymugs * Forgot to update regression tests for changes made in r9293 2012-02-24 22:54 dustymugs * Fixed conversion of pixel types between PostGIS raster and GDAL. Essentially PostGIS raster 8BSI is now a GDT_Int16. 2012-02-24 22:46 pracine * Minor corrections. 2012-02-24 22:41 pramsey * Fix up the revision info in the usage lines 2012-02-24 20:17 strk * Make sure the created backend temp directory is world writeable 2012-02-24 19:24 dustymugs * Additional fixups to not increase extent if an alignment is to take place in rt_raster_gdal_rasterize(). 2012-02-24 19:11 strk * Be immune from topology sequence advancements 2012-02-24 18:49 pramsey * Make sure the regress tmp directory exists before trying to write to it. 2012-02-24 17:33 dustymugs * Added additional conditions for rt_raster_gdal_rasterize() determining when to expand the extent. 2012-02-24 15:23 strk * Do not report "face without edges" error for universal face (#1612) 2012-02-24 15:23 strk * Rename the backend temp dir and drop with brute force Avoids errors when no test writes anything in there (so no dir) 2012-02-24 10:21 strk * Properly drop the temporary directory setup for backend output This prevents errors when running "make check" against backends owned by different users. 2012-02-24 05:05 dustymugs * Set all raster CASTs to be ASSIGNMENT not IMPLICIT. Related ticket is #490. Knowing my luck, I'll be reverting this due to some showstopper. 2012-02-23 22:25 dustymugs * Added correct handling of negative scale-x and positive scale-y in rt_raster_gdal_warp(). 2012-02-23 21:49 dustymugs * Renamed rt_raster_dump_as_wktpolygons() to rt_raster_gdal_polygonize(). Refactored rt_raster_gdal_polygonize() to use LWPOLY objects instead of WKT strings. Also added cleanup code to make invalid dumped geometries valid. Associated tickets are #1586 and #637. 2012-02-23 16:07 strk * Don't deep clone POINTARRAY in GML input routine. Let's see if doing so exposes more memory errors (#1591). Does run valgrind clean here. 2012-02-23 15:42 pracine * Rewrote most of ST_AsRaster. Grouped similar variants to make everything a bit more readable. 2012-02-23 13:28 strk * Set the default regression temp dir to /tmp/pgis_reg (#1607) 2012-02-23 12:54 strk * Have ST_GetFaceGeometry check face existance, regress-test 2012-02-23 11:24 strk * Drop the UpdateGeometrySRID version with old param name (#1606) 2012-02-22 23:13 pramsey * Correctly handle the new lexer/parser output files 2012-02-22 23:06 dustymugs * Rewrote chunks of rt_raster_gdal_warp() and rt_raster_gdal_rasterize() to correctly generate skewed rasters. Related ticket is #1395. This should also resolve #1586. 2012-02-22 20:38 pramsey * Set svn:eol-style native (#1598) 2012-02-22 19:40 pramsey * Update numbers for alpha6 2012-02-22 19:31 robe * put in LF instruction to prevent my windows from putting in windows offensive line breaks 2012-02-22 19:29 pramsey * Change dos to unix lineends. (#1598) 2012-02-22 19:20 pramsey * Ignore makefile 2012-02-22 19:18 pramsey * Really remove the dos linefeeds this time (#1598) 2012-02-22 19:08 pramsey * Revert dos lineending commit that blew away those files... 2012-02-22 19:01 pramsey * Use consistent UNIX line endings (#1598) fix up those files that pass through the C preprocessor at least. 2012-02-22 18:59 pramsey * Switch to evaluating tests using psql with verbosity=terse 2012-02-22 17:19 strk * Fix ST_Polygonize aggregate to retain Z (#1602) 2012-02-22 15:52 strk * Stay within 80 cols 2012-02-22 15:33 strk * Parametrize max user SRID in the SQL file too 2012-02-22 12:49 strk * Check SRID passed to UpdateGeometrySRID, patch by Mike Toews (#1596) Adds regression testing 2012-02-22 12:48 strk * Forward port fix to #1595, although there's no way to expose in 2.0 2012-02-22 03:09 robe * correct st_clip raster so eimage matches the code. the behavior changed butthe code was wrong (showing old behavior). Also put back the multiband case using new syntax which is probably more common usaage. 2012-02-21 15:51 pracine * Added single quote around 8BUI since the XSL now escape them. See #1588. 2012-02-21 15:47 pracine * Added one missign default value for the value parameter of ST_AsRaster and added one missing variant. 2012-02-21 14:32 strk * Add a ptarray_transform function in liblwgeom API 2012-02-21 13:54 strk * Draft an lwgeom_from_gml function (#1591) Can't be moved all to liblwgeom due to use of spatial_ref_sys 2012-02-21 11:07 strk * Print SRID in decimal form, not hex (#1593) 2012-02-21 10:57 strk * Update documentation about shp2pgsql -s/-g flag (#1524) 2012-02-21 09:43 strk * Add an --extensions switch to run_test (#964) When passing that switch the install and uninstall of spatial db happens using the EXTENSION model. It's currently not run as part of "make check" because some tests fail due to use of ambiguos calls when both core and raster modules are installed (there's no way to separate them in the EXTENSION model). 2012-02-21 09:07 strk * Put prepare/upgrade/uninstall operations in their own functions 2012-02-20 20:09 pracine * More work on ST_Resample and ST_Intersection 2012-02-20 14:32 strk * Ignore generated extensions and java files 2012-02-20 13:28 strk * Do not printf from potgis library. Possibly fixes #1570 2012-02-20 13:18 strk * Ignore generated java/jdbc/Makefile 2012-02-20 13:16 strk * Escape single quotes in param list when generating raster comments Closes ticket #1588 2012-02-20 12:52 strk * Ant rules to excecute maven by Maria Arias de Reyna (#1437) Also simplify java Makefile to be simple proxies of ant 2012-02-20 10:52 strk * Update face MBR on edge change (#1587) 2012-02-20 10:19 strk * Enhance documentation for ST_ChangeEdgeGeom 2012-02-17 23:41 robe * Link to my office base article on how to display postgis rasters in base reports. 2012-02-17 22:23 pracine * Rewrote the ST_Rescale documentation. 2012-02-17 22:00 pramsey * This works but it makes estimated extent case sensitive both ways (no weaseling out and giving upper case versions of lower case tables) (#1585) 2012-02-17 20:52 pracine * Ticket #1536. First revision of st_intersection(). Removal of the extent parameter and first documentation. 2012-02-17 18:29 strk * Check edge disposition around endnodes (#1571) Includes a couple new testcases, for closed and non-closed edges changing disposition around their end nodes. 2012-02-17 18:28 pracine * Many more small typo fixes... 2012-02-17 15:11 strk * Rework edge motion range construction (#1571) Includes a new testcase which was failing before this change 2012-02-17 14:03 strk * Add another test for ST_ChangeEdgeGeom 2012-02-17 13:46 strk * Handle some (not all) cases of non-isomorphic edge changes (#1571) The problem is much harder than it looks ... 2012-02-17 08:39 strk * Add test numbers to ST_ChangeEdgeGeom regression cases 2012-02-17 08:39 strk * Ignore utils/postgis_restore.pl (now generated) 2012-02-16 17:45 strk * Update comment, hopefully clearer now 2012-02-16 15:49 pracine * Fixed a number of small problem. Capitalized x and y. 2012-02-16 10:25 strk * Add a topology.GetNodeEdges function This function is a fundamental topological primitive to do things like SQL-based poligonization. 2012-02-16 08:49 strk * Ignore postgis_svn_revision.h 2012-02-16 08:08 strk * Set availability of ST_ChangeEdgeGeom 2012-02-16 08:08 strk * Fix cross reference 2012-02-16 00:28 pramsey * Remove now-obsolete TODO comment 2012-02-16 00:25 pramsey * Prepare for Proj4.8 with spheroid info handling 2012-02-15 23:25 pramsey * Add generated files to svn:ignore 2012-02-15 22:45 pramsey * jdbc: org.postgis.Point.equals() is not reflexive (#1313) 2012-02-15 22:34 pramsey * Fix XML typo 2012-02-15 22:27 pramsey * Negative distance argument to ST_Buffer not documented (#1535) 2012-02-15 21:56 pramsey * shp2pgsql: a switch to drop M from 4d imports (#900) 2012-02-15 21:37 pramsey * shp2pgsql: a switch to drop M from 4d imports (#900) 2012-02-15 21:23 pracine * Updated the version returned by the PostGIS_Raster_Lib_Version() example. 2012-02-15 21:18 pracine * Removed some garbage. 2012-02-15 21:12 pramsey * Remove fugitive EOL white space 2012-02-15 20:58 pramsey * Add minor version upgradeable 2012-02-15 20:57 pramsey * Push trunk version forward 2012-02-15 20:55 pramsey * Update meta for alpha5 2012-02-15 19:28 pracine * Fix for #1576 & #1569. ST_Clip now works on multiband rasters and accept an array of nodata values. 2012-02-15 15:59 strk * Do not take PROJ4 errno value as a sign of error (#1580) 2012-02-15 11:00 strk * dd support for fetching SVN revision from pure-git clones (#1579) 2012-02-14 22:21 robe * Example of how to use only psql to output a raster image. 2012-02-14 17:57 strk * Fix crash with empty polygons in P-I-P tests (#1578) 2012-02-14 17:54 robe * #1494: documentation of new census tract loader and get_tract functions. 2012-02-14 17:53 robe * #1494: done with programming need to finish documenting and regress test. 2012-02-14 17:47 dustymugs * Readded rt_clip regression test. 2012-02-14 17:29 dustymugs * Fixed handling of negative X-scale or positive Y-scale in rt_raster_gdal_rasterize(). Ticket is #1574. 2012-02-14 17:15 strk * We don't use a profiler anymore 2012-02-14 17:00 dzwarg * Reverting changes that optimize ST_MapAlgebraExpr. Re-advertise x and y parameters as int32. Reverts changes from r9137, closes #1557. 2012-02-14 13:31 strk * Make one-point lines convertible to GEOS, see #1543 2012-02-13 22:46 pracine * Temporarily remove st_clip regress... 2012-02-13 22:02 pramsey * Configured without raster still tries to make raster/rt_pg/rtpostgis.sql (#1575) only try to build extensions if we have both raster and topology as well as pgsql 9.1 2012-02-13 21:58 pracine * Closing ticket #597. Added regression tests for ST_Clip. More tests to come when fixing #1576. 2012-02-13 21:25 strk * Encode dependency of topology comments and cheatsheet Same should be done for raster and tiger... 2012-02-13 20:44 strk * Fix documentation of GetRingEdges 2012-02-13 20:44 strk * Install topology comments too, when regressing topology 2012-02-13 20:44 strk * Install topology_comments.sql as well 2012-02-13 18:28 pracine * Fix for ticket #1572. ST_PixelAsPolygons() return NULL values when the requested band or no band exist. 2012-02-13 18:06 strk * Allow retaining all custom spatial_ref_sys entries, even clashing Update manual accordingly (hard upgrade procedure) 2012-02-13 17:47 strk * Fix regexp renaming srid enforcement check 2012-02-13 17:01 strk * Add a note about handling of out-of-range SRIDs on hard upgrade 2012-02-13 16:29 strk * Accept more feature type names from AddTopoGeometryColumn (#1470) With this commit you can pass return of ST_GeometryType or return GeometryType as input to the function. 2012-02-13 16:11 strk * More VOLATILE -> STRICT (#955). Let's call it completed. 2012-02-13 16:04 strk * Some VOLATILE functions turned to STABLE (#955) A noticeable exception is the Geometry(TopoGeometry) cast which triggers a regression when made STABLE. 2012-02-13 15:43 pracine * Fix regression broken by the limit imposed to SRID < 999999. Anyway the srid provided was not the right one. Changed from 4269 to 26919. 2012-02-13 15:12 robe * #1494 - ability to load census tract, block group, tabblock - boy did I screw this one. Should be all fixed now and tested (loading part), still need to write the function, but that's the easy part 2012-02-13 14:48 strk * Move SRID max and user-max definitions to configure.ac This should help keeping postgis_restore.pl and core in sync wrt SRID ranges. 2012-02-13 14:17 strk * Refine user feedback about SRID conversion and reserved zones 2012-02-13 11:25 strk * Drop (SRF()).* constructs (#956) 2012-02-13 10:58 strk * Have regress install comments adn throw an error on failure (#1532) 2012-02-13 10:58 strk * Have staged-install install comments when possible (#1532) 2012-02-13 10:16 strk * Report svn revision 2012-02-13 10:16 strk * Encode postgis_svn_revision dependency 2012-02-13 10:00 strk * Cleanup postgis_svn_revision.h makefile rule (PHONY) 2012-02-13 09:58 strk * Do not override postgis_svn_revision.h if revision didn't change 2012-02-13 09:15 strk * Add support for fetching SVN revision from local git-svn repository 2012-02-11 21:17 strk * It's "svn", not "svnn". And a TODO item... 2012-02-11 16:08 pramsey * Fix regression in OSX (-0 vs 0) 2012-02-11 05:14 pramsey * Report SVN revision in PostGIS_Full_Version (#1518) 2012-02-10 23:33 dustymugs * Added checks of SRID to make sure that SRIDs are within the permitted range. Ticket is #1568. 2012-02-10 22:42 pracine * ST_Clip returns all bands when no band is specified. 2012-02-10 22:36 pracine * Fix for ticket #1569. ST_Clip variants defaulting to band 1 should default to NULL so that they return all bands. 2012-02-10 20:21 pramsey * Back out SVN generation stuff. 2012-02-10 19:55 pramsey * Try to fail better on SVN snatching... 2012-02-10 19:49 pramsey * Report SVN revision in PostGIS_Full_Version (#1518) 2012-02-10 18:46 pracine * ST_PixelAsPolygon() does not have a band parameter anymore. 2012-02-10 18:38 robe * #1494: move parent table creation to a function so logic is in single place, add a new census_loader.sql script with census specific load logic, revise create and update scripts to load the new census logic and create tables if not present. Still need to test and write a function to return census info given a point before can mark this as done. 2012-02-10 17:05 pracine * Have perl to backup the file before editing. 'make check' is failing on Windows 7 without that. See http://postgis.refractions.net/pipermail/postgis-devel/2012-February/018482.html 2012-02-10 16:53 strk * Clamp SRID valuesu > SRID_MAXIMUM to fall in the reserved range (#1505) The reserved range is SRID_USER_MAXIMUM+1 to SRID_MAXIMUM. Core takes care of typmod clamping, postgis_restore.pl takes care of clamping table definition and spatial_ref_sys entries. 2012-02-10 16:53 strk * Add SRID_USER_MXIMUM define 2012-02-10 16:18 pramsey * Fix syntax error in MS example 2012-02-10 09:19 strk * Drop the now-generated Makefile on distclean, and ignore it 2012-02-10 09:16 strk * Fix builds --without-topology (#1565) 2012-02-10 01:21 robe * #1564 fix typo in cat call preventing other files from being concatenated 2012-02-09 23:02 robe * #1563: remove raster_columns view from extension so it can be dropped without complaint. 2012-02-09 20:12 dzwarg * Performance improvement by keeping x and y pixel coordinates as floats. 2012-02-09 19:19 strk * Actually save Grand Unified Geom Cache rather than just building it Fixes #547 2012-02-09 17:16 strk * More postgis_config.h inclusion removal from headers 2012-02-09 17:00 strk * Drop postgis_config.h include from lwgeom_pg.h header. Generally, package config files should _not_ be included by package headers. In this specific case the aim is overriding POSTGIS_DEBUG_LEVEL in implementation files for the sake of enabling debugging of a single file. Also part of this commit is addition of copyright header in two files which were missing it (used git history to figure assignments) 2012-02-09 17:00 strk * Fix header guard of pgsql_compat.h and drop the duplicate 2012-02-09 10:49 robe * Hmm double added a file -- #1563 which was causing the can't drop because postgis extension depends on it error 2012-02-09 10:10 strk * Forward distclean to extensions subdirs 2012-02-09 02:34 pramsey * Don't delete the comments. 2012-02-09 01:54 robe * #1562 replace string with text 2012-02-09 00:42 pramsey * More verbose message, per DFuhriman 2012-02-09 00:37 pramsey * Invalid geography polygons: BOOM! Could not generate outside point! (#1046) 2012-02-09 00:27 dzwarg * Fixed bug where PG_DETOAST_DATUM args were incorrect. 2012-02-09 00:18 dzwarg * Changed DATUM_SLICE to DATUM in setGeotransform. 2012-02-08 23:59 dzwarg * Added documentation for raster processing builtin functions: st_min4ma, st_max4ma, st_mean4ma, st_sum4ma, st_range4ma, st_distinct4ma, st_stddev4ma. 2012-02-08 23:01 pramsey * Change from scripts-based script versions to repository based versions. Should also be more robust? ha ha ha. (#1282) 2012-02-08 22:44 pramsey * Make the scripts version get read again. 2012-02-08 21:58 dustymugs * Fix to correct building of testapi in MinGW. Ticket is #1560. 2012-02-08 21:31 dzwarg * Do not allocate inside of 1 raster mapalgebra loop for datum values and nulls. 2012-02-08 21:29 pramsey * ./configure still display the old raster version number (#1599) 2012-02-08 21:20 dustymugs * Instead of dynamically allocating space for variables "values" and "nulls" with each pixel, just initialize both to the max possible # of elements. Done for 2-raster ST_MapAlgebraExpr 2012-02-08 21:08 dustymugs * Remove deleted function signature for ST_PixelAsPolygon. Ticket is #1529 2012-02-08 21:08 pramsey * test for termios.h in case we want to do password prompting in the future 2012-02-08 21:04 dustymugs * Values for [rast1.x], [rast1.y], [rast2.x] and [rast2.y] should be INT4 instead of FLOAT8. Ticket is #1557 2012-02-08 21:03 dzwarg * Removed geotransform type. Fixed rounding, so Hudson will be my friend in raster regression tests. 2012-02-08 20:51 strk * do not heap-allocate SPI arg types 2012-02-08 20:33 strk * ST_MapAlgebraExpr: advertise X and Y params as integers (#1557) Also stop doing 3 string matches per pixel for no reason 2012-02-08 19:44 dzwarg * Added documentation for 1 and 2 raster map algebra user callback function documentation for pixel position array parameter to userfunc. #1525 2012-02-08 19:09 pramsey * Handle French svn? 2012-02-08 19:04 dzwarg * Added geotransform methods and correction to basis vectors during raster rotation. #1353 2012-02-08 18:51 pramsey * Stop relying on private projects.h PROJ header (#1541) 2012-02-08 17:39 pramsey * Add missing target 2012-02-08 17:36 pramsey * Push forward version numbers 2012-02-08 17:33 pramsey * Commit in preparation for 2.0.0alpha4 2012-02-08 17:23 dzwarg * Added ST_StdDev4ma raster neighborhood processing function. #1318 2012-02-08 17:19 pramsey * lwgeom_release (#699) move free if copy calls to end of functions in any place where there is any chance that a problem might occur 2012-02-08 16:44 dustymugs * Minor debug message tweak 2012-02-08 16:11 dustymugs * Added regression tests for raster2pgsql loader. Ticket is #1388 2012-02-08 15:17 colivier * Bugfixes related to #1552, and somehow to #665. Thanks to Sandro for report and valgrind stuff ! 2012-02-08 10:06 strk * Document topology.GetRingEdges (#959) 2012-02-08 09:36 strk * Do not release serialized input until output is deserialized See http://postgis.refractions.net/pipermail/postgis-devel/2012-February/018336.html 2012-02-08 06:42 pramsey * configure_json.patch (#1539) from Evan Roualt 2012-02-08 05:29 colivier * restore (at least) tin_geom and psurface_geom unit tests call. Related to #665 2012-02-08 05:23 colivier * Fix BBOX handling in serialization. Still related to #665 2012-02-08 04:36 colivier * Change BBOX double to float in serialization. Related to #665 2012-02-08 00:43 dzwarg * Added ST_Distinct4ma helper neighborhood processing function. See #1318 2012-02-08 00:29 dzwarg * Fixed typo in configure.ac 2012-02-08 00:23 pramsey * loader/Latin1 regression failure with database SQL_ASCII encoding (#1465) from Greg Troxel 2012-02-08 00:15 pramsey * Remove another dying test 2012-02-08 00:14 pramsey * Remove failing test 2012-02-08 00:14 pramsey * Remove dependency on svnrevision.h 2012-02-08 00:01 pramsey * docs-install uses bare cp (#1528) from Greg Troxel 2012-02-07 23:51 pramsey * Ignore svnrevision.h 2012-02-07 23:49 pramsey * ST_MinimumBoundingCircle needs regression test (#1042) 2012-02-07 23:42 pramsey * Add a warning for lower numbers of GEOS 2012-02-07 23:37 colivier * Still several bugfixes related to #665 2012-02-07 23:27 pramsey * Force generation of an svnrevision.h file when building in a repo and the svn executable is available. Ensure that when building a tarball with make_dist.sh the revision is read from the tag in the remote svn repository. This should cover both development and distribution cases. 2012-02-07 22:17 pramsey * Add dzwarg 2012-02-07 22:05 dustymugs * Clean up raster regression and move loader regression directory. 2012-02-07 21:30 colivier * Still bugfixes. Related to #665 2012-02-07 21:14 pramsey * Test non-empty new types in regress/wkb (#1477) 2012-02-07 21:04 colivier * Restore surface cunit tests 2012-02-07 21:01 colivier * Fix some bugfixes. Handle EMPTY use cases. Minor changes. Related to #665 2012-02-07 19:42 pramsey * lwgeom_release (#699), reviewed all usage of lwgeom_release and replaced with lwgeom_free where possible. Changed the def'n of lwgeom_release so that it only frees the containing objects, and not any sub-objects, for those few remaining cases that required a gentler freeing of objects. 2012-02-07 19:35 dustymugs * Minor cleanup of parameter names of ST_Intersection(raster, geometry) 2012-02-07 19:25 dzwarg * Added positional parameters to 1 raster version of ST_MapAlgebraFct. Closes #1525 2012-02-07 18:40 pracine * Added ST_TileAsGeom() returning only the extent of the planned tiles as polygons 2012-02-07 18:07 dzwarg * Corrected clamped values in tests for ST_MapAlgebraExpr and ST_MapAlgebraFct. Implemented prepared statements in ST_MapAlgebraExpr. 2012-02-07 17:23 pramsey * Documentation URLs, visible whitespace, and minor touchups (#1548) from mwtoews 2012-02-07 17:07 pramsey * Reorder the include flags, per Greg Troxel 2012-02-07 15:47 pracine * First plpgsql prototype for ST_Tile(rast raster, width integer, height integer, padwithnodata boolean, nodatavalue double precision) 2012-02-07 13:12 mcayland * Fix a couple of compiler warnings in shp2pgsql-gui caused by uninitialised variables. 2012-02-07 10:14 strk * Allow changing a closed edge (but w/out fixing linking, see #892) 2012-02-07 09:50 strk * Re-add install-sh in the repository to support libtool < 2.0 2012-02-07 07:22 strk * Ignore install-sh 2012-02-07 07:20 strk * install-sh is generated by ./autogen.sh, needs not be in repository 2012-02-07 02:34 colivier * temp desactivation of surface unit test 2012-02-06 23:50 pramsey * Whoops, slight error in the empty geometry handling fixed. 2012-02-06 23:30 colivier * Temp remove su_surface till everything fixed on it... 2012-02-06 23:25 pramsey * Have ST_Union aggregate use UnaryUnion from GEOS-3.0.0 (#922) 2012-02-06 23:14 dustymugs * Make sure new bands when added using ST_AddBand are correctly clamping NODATA values. Ticket is #1546. 2012-02-06 21:32 pramsey * Remove dead prototype 2012-02-06 21:15 colivier * Fix a bug in tgeom_free, related to #665 2012-02-06 20:53 dustymugs * Added support to pass pixel positions of both rasters to user function in 2-raster ST_MapAlgebraFct. This provides similar functionality to the keywords described in #1525. 2012-02-06 20:07 pramsey * Change searched location of proj files when no proj variable (#1022) 2012-02-06 19:45 pramsey * Quiet rm 2012-02-06 19:44 pramsey * quiet echo 2012-02-06 19:33 pramsey * Dummy up a check target 2012-02-06 19:32 pramsey * Move regres forward again 2012-02-06 19:30 pramsey * Make exensions depend on comments, so also depend on xsltproc 2012-02-06 19:13 pramsey * Duplicate named case-insensitive XML refentry ids / HTML files (#1511) 2012-02-06 19:01 pramsey * PostGIS extensions should build/install automatically if PostGIS is compiled against 9.1 (#1490) 2012-02-06 18:44 pramsey * Change how we calculate minor versions suitable for extension upgrade. 2012-02-06 18:36 dzwarg * Checked connection to SPI manager in ST_MapAlgebraExpr 2012-02-06 17:49 dzwarg * Whitespace changes to _st_hillshade4ma 2012-02-06 17:26 dzwarg * Reordered linking order for core regression tests. Follow up to http://postgis.refractions.net/pipermail/postgis-devel/2011-December/016646.html and r8399 2012-02-06 13:43 strk * Tabs to spaces (2) 2012-02-06 13:16 strk * Don't let ValidateTopology choke on invalid edges (#1544) 2012-02-06 03:20 pramsey * Allow 'make check' to run all the way through on OSX (the sed implementation must be slightly different, so let's see if Perl is any more standard). Hopefully other platforms will be happy. 2012-02-06 02:15 pramsey * Try out the pj_get_def() method of finding the spheroid parameters, but: it doesn't work. 2012-02-05 02:15 robe * put in an FAQ about the common function is not unique error that I suspect a lot of people will be running into because they don't cast their geometry inputs and that a lot of raster functions have overloaded functions similar to the geometry ones. 2012-02-05 00:30 mcayland * Change encoding reference URL to that used for libiconv rather than PostgreSQL since that's what we are using to do the encoding conversion (as per #1303). 2012-02-05 00:30 mcayland * Fix for #1540: Fix segfault in shp2pgsql-gui when no port is specified. Prevent dereferencing a NULL pointer if the string is empty. 2012-02-04 17:53 strk * Implemented new keywords for 1-raster ST_MapAlgebraExpr (#1525) 2012-02-04 02:36 mcayland * Fix an issue in the shapefile GUI caused by saving the original shapefile name before processing. This was a bug caused by having two separate passes during export; we were saving the original export shapefile name during the first loop, and so when we came to free() the temporary name at the end of export it would only free the shapefile name from the last iteration, and do it multiple times causing random crashes. 2012-02-04 01:30 pramsey * Geography should support SRIDs other than 4326 (#1538) 2012-02-04 01:17 mcayland * Alter the shapefile GUI so that multiple shapefiles can be selected in the import file chooser. 2012-02-04 00:39 mcayland * Add GUI support for the shp2pgsql -S (simple geometries) switch. This closes #660. 2012-02-04 00:39 mcayland * Update shapefile GUI "About" text and window title to reflect that it now handles export as well as import. 2012-02-04 00:39 mcayland * Add shapefile dumper (table export) to the shp2pgsql GUI. This closes ticket #1480. 2012-02-04 00:02 dustymugs * Explicitly set the output band's pixel type depending on the band being returned (FIRST, SECOND, BOTH. OTHER is left NULL) in ST_Intersection(raster, raster). Related ticket is #1537. 2012-02-03 22:57 dustymugs * Implemented keywords for 2-raster ST_MapAlgebraExpr as described in #1525. Will do 2-raster ST_MapAlgebraFct next. 2012-02-03 21:29 pramsey * Separate the cache handling code from the transform function 2012-02-03 21:04 mcayland * Fix pgsql2shp crash when dumping a table without a geo column. 2012-02-03 21:04 mcayland * Fix construction of pgsql2shp's main retrieval query in ShpDumperOpenTable(). This fixes a regression which caused pgsql2shp to generate an incorrect SQL query for tables without any geo columns. 2012-02-03 21:03 mcayland * Move initialisation of pgsql2shp state endian flag to the same location all the other initialisers. 2012-02-03 21:03 mcayland * Fix missing #ifdef POSTGIS_GEOS_VERSION ... #endif preventing liblwgeom from compiling on GEOS < 3.3.0. 2012-02-03 18:09 dustymugs * Fixed optimization bug in 1-raster ST_MapAlgebraExpr. Ticket is #1515. 2012-02-03 12:51 robe * #1530: fix typo in full upgrade -- was using the postgis only script instead of the combined postgis + raster script. Still need to test, will close out once tested. 2012-02-03 03:58 dustymugs * Reverted r9014. Hudson ain't happy with sed. 2012-02-03 03:51 dustymugs * Merge of patch provided in #1533. Thanks gdt. 2012-02-02 19:25 dustymugs * Message cleanup by removing unnecessary newlines. 2012-02-02 18:47 dustymugs * Refactored stderr messaging so that C API messages are properly emitted. Based on suggestion in comment 4 of #1531. 2012-02-02 17:38 dustymugs * Additional error checking and formatting of error messages 2012-02-01 23:55 pramsey * Add lwcollection_homogenize and ST_Homogenize (#375) 2012-02-01 23:18 pramsey * Add lwcollection_homogenize and ST_Homogenize (#375) 2012-02-01 23:00 pramsey * Support curves in lwgeom_homogenize (#1526) 2012-02-01 22:06 dustymugs * Added check of values being passed to atan2() in _st_hillshade4ma() 2012-02-01 21:27 pramsey * Enhance ST_Rotate by adding offset origin parameters (#1251) from mwtoews 2012-02-01 21:17 pramsey * ST_Azimuth, ST_Project regression tests (#1398) 2012-02-01 17:39 pramsey * Also remove .gitignore files from tarbal distro 2012-02-01 17:35 pramsey * Push forward versions for weekly snap 2012-02-01 17:28 robe * #1494: build parent structures to support census tract reporting by geocoder. 2012-02-01 15:28 dustymugs * Additional cleanup of a few functions using ST_PixelAsPolygon(raster, int, int, int). Also, made map algebra expression case-sensitive in 2-raster ST_MapAlgebraExpr. Now, the keywords must be RAST1 and RAST2. 2012-02-01 14:58 dustymugs * Refactored regression test for ST_PixelAsPolygon 2012-02-01 14:32 dustymugs * Deleted deprecated ST_PixelAsPolygon(raster, int, int, int) variant. 2012-02-01 11:51 strk * Make test more readable 2012-02-01 11:39 strk * Keep initial value when an expression eveluates to null (#1523) 2012-02-01 10:15 strk * Implement RAST.X and RAST.Y keyword substitution in ST_MapAlgebraExpr Includes regression test and documentation update. See #1519. 2012-02-01 09:20 strk * Implement ST_PixelAsPolygon in C, provide a core API entry for it The API entry point is expected to be useful for #1519 2012-02-01 05:30 pramsey * Try again to fix #1292 2012-02-01 02:14 pramsey * VACUUM cannot be executed from a function or multi-command string (#1517) 2012-02-01 00:41 pramsey * Fix include to be pathless 2012-01-31 23:36 pramsey * Update spatial_ref_sys to latest GDAL generated version (#1493) 2012-01-31 22:33 pramsey * ST_Line_Interpolate_Point doesn't interpolate M-values (#639) 2012-01-31 20:46 pramsey * Remove some compile warnings. 2012-01-31 18:56 pramsey * Gah, someone else can do this... 2012-01-31 18:24 pramsey * Really, I do know how to write XML. 2012-01-31 18:19 pramsey * ST_SnapToGrid returns a value out of range (#1292) 2012-01-31 18:12 pramsey * Rename ST_BuildArea backend function 2012-01-31 18:10 pramsey * Fix missing tag 2012-01-31 18:09 pramsey * Drop Equals(geom,geom) - deprecated in 1.2.3 (#1486) 2012-01-31 18:03 pramsey * FAQ about licensing (#1262) 2012-01-31 17:44 dustymugs * Explicitly set spatial index name as PostgreSQL 8.4 requires an index name. Associated ticket is #1513. Also fixed string trim functions to prevent modification of passed string. 2012-01-31 14:50 dustymugs * Fixed evaluation of two floating point numbers in RASTER_getRotation. Fixes one of the two regression failures described in #1501. 2012-01-31 14:46 dustymugs * Added check of band # passed to ST_DumpAsPolygons. Fixes #1514. 2012-01-31 05:50 pramsey * Pgsql2shp: Dumping: XWKB structure does not match expected size! (#1479) 2012-01-30 21:52 pramsey * ST_Segmentize returns invalid LINESTRING for zero-length input (#1304) 2012-01-30 20:41 pramsey * ST_LocateBetweenElevations should return NULL and not fail if intersection is void (#1250) 2012-01-30 20:17 pramsey * ST_Within not using prepared geometries (#962) 2012-01-30 02:47 pramsey * (#393) shp2pgsql returns "fseek(-xxx) failed on DBF file." for large (>2GB) DBF files 2012-01-30 00:37 pramsey * GML for empty geometries should be NULL (#1377) 2012-01-29 23:30 nicklas * Increase robustness in distance-calculations when point is on segment. 2012-01-29 21:19 strk * typo 2012-01-29 19:57 pramsey * Be more liberal in accepting "empty" tags in constructing geometries from GML (#1059) 2012-01-29 14:44 strk * Give me psc status 2012-01-28 23:11 strk * Fix _ST_AddFaceSplit code against PostgreSQL 9.1 2012-01-28 22:08 strk * Don't put constant geometries in CTE, which confuses estimator 2012-01-28 17:05 strk * Simplify code in _ST_AddFaceSplit, reduce edges table scans. Also set debugging off by default 2012-01-28 16:20 strk * Switch ST_AddEdgeNewFaces from ST_Polygonize to _ST_AddSplitFace See ticket #1508 2012-01-28 13:45 strk * Stop using ST_Polygonize from ST_AddEdgeModFace. This commit also estrapolates an internal _ST_AddSplitFace function for reuse by ST_AddEdgeModFaces 2012-01-28 13:18 strk * Rename topogeometry column check to be more readable 2012-01-28 10:42 strk * New test for closing multi-edge ring in a face (ST_AddEdge*Face*) 2012-01-28 07:44 strk * Allow multiple topogeometry columns in one table (again) Dunno why this piece was missing from previous commit, sorry 2012-01-28 07:37 strk * Allow multiple TopoGeometry column in the same table 2012-01-28 00:23 robe * add protos for ST_Quantile raster table coverage. Still some more to add as well as examples of usage 2012-01-27 23:31 pramsey * Fix one remaining crasher for ST_AsGML('SRID=4326;POLYGON EMPTY'); 2012-01-27 22:24 pramsey * #1504 (Segfault running ST_EstimatedExtent()) 2012-01-27 21:05 dustymugs * Fixed segfault caused by an empty quantile linked list being used to get the quantile's value. Ticket is #1506. 2012-01-27 20:55 pramsey * Tighten up on-arc test a bit more. 2012-01-27 20:14 strk * Add "face has no rings" validity checking 2012-01-27 18:57 pramsey * Revert accidental inclusion of shape file size patch in curve patch 2012-01-27 18:54 pramsey * #920 (ST_LineToCurve generating invalid CURVEPOLYGON) 2012-01-27 14:22 strk * More test for face splitting and inside holes 2012-01-27 11:36 strk * More test for update of isolated nodes in split-faces. 2012-01-27 11:05 strk * Rewrite test for ST_AddIsoNode (see #1503) 2012-01-27 11:05 strk * Simplify the code looking for face containment in ST_AddIsoNode Fixes bug #1503 for me, altough I didn't handle to produce a testcase for it. 2012-01-27 08:18 strk * Add test for update of isolated nodes in split-faces. Affects both ST_AddEdgeModFace and ST_AddEdgeNewFaces (both work) 2012-01-26 20:25 pramsey * Complete #737 2012-01-26 20:19 pramsey * Detect asprintf, vasprintf, fseeko 2012-01-26 18:09 strk * Change expectations from tests involving ST_MakeLine 2012-01-26 17:23 pramsey * Clean up and exit when shp file missing 2012-01-26 16:22 pramsey * Fix contact per a message on postgis-users from Markus Innerebner 2012-01-26 13:00 strk * Add support for linestrings in ST_MakeLine (#1500) Affects both the aggregate and the 2-parameters function. Regression testing included. Documentation was updated, but lacks examples. 2012-01-26 12:59 strk * Implement lwline_from_lwgeom_array (untested) 2012-01-26 12:59 strk * Don't let ptarray_append_ptarray change read-only pointarrays 2012-01-26 12:59 strk * Test that mixed dimensionality is not allowed by ptarray_append_ptarray 2012-01-26 12:34 strk * Add more test for FLAGS_GET_ and FLAGS_SET_ 2012-01-26 09:16 strk * Implement ptarray_append_ptarray, and change its signature This is propedeutic to ticket #1500 2012-01-26 08:12 strk * Tweak debug messages not to clutter output 2012-01-25 17:40 pramsey * Bump version string forward 2012-01-25 17:38 pramsey * Prep for alpha2 2012-01-24 22:23 pramsey * SVG empty geometries gives invalid memory alloc (#1038) 2012-01-24 21:57 pramsey * Update shplib to the latest release (1.3.0b3) and stitch in our special date and logical handling. (#393) 2012-01-24 19:42 pramsey * Double guard against geos versions of 3.4.dev form. (#1488) 2012-01-24 18:04 strk * Stop WARNING from AddFace about next_left_edge/next_right_edge 2012-01-24 17:29 strk * Optimize ST_AddEdge*Face* detection of face split conditions (#1497) 2012-01-24 17:29 strk * Protect DEBUG lines in compile-time conditional 2012-01-24 17:20 pramsey * Test for #1150, null entry in spatial_ref_sys 2012-01-24 14:03 strk * Fix linking bugs with ST_NewEdgesSplit function (#1496) Includes test coverage for this other function. 2012-01-24 11:15 strk * Fix edge-linking in ST_ModEdgeSplit (#1496) Includes regression test. ST_NewEdgesSplit still needs testing. 2012-01-24 00:09 pramsey * Prevent people from inserting entries in spatial_ref_sys with no proj4text (#1150) 2012-01-23 23:27 pramsey * Make topology enabled the default 2012-01-23 23:20 pramsey * Allow raster to actually turn on by default 2012-01-23 22:20 pramsey * Move raster/topology status to the bottom of the report 2012-01-23 22:18 pramsey * Report on raster status whether enabled or not 2012-01-23 21:42 pramsey * Push forward the trunk version to match release march 2012-01-22 20:10 strk * Fix ambiguos references (with postgresql 9.x) 2012-01-22 19:25 strk * AddTopoGeometryColumn: check child layer before incrementing sequence 2012-01-22 19:13 strk * typo 2012-01-22 15:43 strk * TopoGeo_addLineString: fix node crossing, reduce edges creations 2012-01-22 12:10 strk * Comment typo 2012-01-21 01:31 robe * update build extensions to include the make comments if building from source repo and also that it requires a separate compile step (until #1490) 2012-01-20 23:41 pramsey * Fix typo 2012-01-20 23:05 pramsey * Make raster on by default and --without-raster the configuration parameter to disable it. 2012-01-20 18:14 robe * fix typo 2012-01-20 18:14 robe * Add a plpython example for outputting raster images 2012-01-20 14:47 strk * Have TopoGeometry::Geometry always return a MULTI* (#1462) 2012-01-20 14:47 strk * Don't let ST_Multi create collections of a single EMPTY (#1489) 2012-01-20 10:06 robe * #1487: add out_db argument to AddRasterConstraints and DropRasterConstraints documentation so extensions can install again 2012-01-20 10:02 strk * Test new types in regress/wkt (#1476) 2012-01-20 09:11 strk * Exclude raster_columns from geometry_columns (#1122) Add regress test, with a newborn "tickets" testcase for raster 2012-01-20 08:46 strk * Fix a missing return introduced with fix to #547 2012-01-20 08:12 strk * Change ST_Equals to use the ~= operator (#1453) Doing so it will consistently return TRUE for EMPTY-EMPTY, while previously _ST_Equals returned TRUE but ST_Equals returned FALSE. The commit also changes signature of the C function from 'geomequals' to 'ST_Equals' and marks an SQL 'Equals' signature as a candidate for dropping before 2.0.0 final 2012-01-20 08:12 strk * Revert "remove ~= from documentation -- we don't want people using this operator" This reverts r8799 2012-01-20 07:10 robe * readme was outdated. 2012-01-20 05:08 pramsey * Update for alpha1? 2012-01-20 00:11 pramsey * Transforming from SRID 4267 to 4326 returns incorrect result (#1301) 2012-01-19 23:58 pramsey * Stop configure if we don't find perl. (#1484) 2012-01-19 17:39 strk * In 9.1, it is datamoduledir driving module install dir, not MODULEDIR 2012-01-19 17:15 strk * Have both RTREE and PREPARED_GEOM caches cohexist (#547) Fixes a memory leak and improves performances when both p-i-p and other kind of overlays are requested during the same statement. 2012-01-19 17:03 strk * Update expected raster intersection results after fix to #852 I've carefully checked the cases and where indeed expecting wrong results (the point is very close to the raster's convex hull boundary but slightly outside, ST_Distance reports 1.58882185807825e-14 units) 2012-01-19 09:48 strk * Add test for cached version of point_in_ring (#852) 2012-01-19 08:59 strk * Drop use of tolerance in PIP (#852) Affects point_in_ring and point_in_ring_rtree. Includes regress test but not hitting the cache. 2012-01-19 08:16 strk * Do not run the upgrade test if the normal test failed 2012-01-19 08:16 strk * Oops, forgot to cleanup after debugging (triggered testsuite failure) 2012-01-18 15:47 strk * Rework st_estimated_extent to deal with analyzed empty tables (#818) Still doesn't distinguish between empty and not analyzed recently (might be improved in that reguard) 2012-01-18 14:19 strk * Drop &Z_support in ST_Summary, see #649 comment:2 2012-01-18 14:17 strk * Add ST_Summary(geography), "G" flag (#1277), document (#649) 2012-01-18 13:46 strk * Complete binary IO testing in presence of typmod (#850) 2012-01-18 13:46 strk * Do proper cleanups 2012-01-18 13:46 strk * Check typmod on binary geometry input (#850) Testcase will follow 2012-01-18 10:17 strk * Have geography typmod threat unkonwn srid an omitted srid (#1482) 2012-01-18 10:17 strk * Add --expect switch to save obtained output as expected Will help generating testcases 2012-01-18 10:17 strk * Drop the support for multiple expected files (not needed anymore) The support was also broken, btw... 2012-01-18 08:19 strk * Test roundtrip with a binary cursor for both geometry and geography With this commit the binary.sql testcase doesn't test the actual binary output anymore but rather uses canonical binary output to copy objects to a temporary file, then uses canonical binary input to read the objects again into a new table and then compares the original and the final tables. In order for this to work run_test was modified to pass a :tmpfile variable to testcases. Next stop: typmod for canonical binary input. See ticket #850 for more info 2012-01-17 20:01 strk * Implement canonical input-output for geography (#850) Note: canonical output is tested, input isn't. 2012-01-17 19:15 strk * Test canonical binary output for geometry (#850) NOTE: big-endian machines are expected to fail this new test please send your actual output for a fix 2012-01-17 19:15 strk * Support alternate expected files Useful to test WKB output on different byte-endian machines. 2012-01-17 19:15 strk * Support for binary output (#850) 2012-01-17 18:04 strk * Override geometrytype for geography (#1450). The testusite runs without problems so I didn't also add a geometrytype(text) function [I want the implicit cast!] 2012-01-17 17:52 strk * Run the testsuite again after upgrading (#1326) 2012-01-17 17:52 strk * Reword loading of upgrade scripts 2012-01-17 17:13 strk * Enhance staged install to include raster, topology and all scripts Add an --upgrade switch to regress/run_test in preparation of regress testing upgrade scripts (#1326) 2012-01-17 08:57 strk * Do not drop legacy getSRID in postgis_drop (#1401) This commit reverts r8837 2012-01-16 22:26 pramsey * Rename lwpoint_interpolate to point_interpolate 2012-01-16 21:13 strk * Snap output of test for #723 to a grid The test was failing due to coordinate drifts on 32bit 2012-01-16 17:37 strk * Fix 2.5d split (#745) 2012-01-16 17:00 strk * Keep UTM zone numbers in range, regress-test _ST_BestSRID (#1234) 2012-01-16 15:39 strk * Add an ST_AsEWKT(text) to prefer geometry over geography 2012-01-16 14:46 strk * Add ST_EWKT for geography type (#675) 2012-01-16 14:33 strk * The official unknown SRID is 0, not -1 2012-01-16 14:21 strk * Have 'make doc' build the single-page HTML 2012-01-16 14:04 strk * Allow building with gettext 0.14. Patch by Greg Troxel <gdt@ir.bbn.com> 2012-01-16 13:56 strk * Detect PERL locally 2012-01-16 13:10 strk * Ignore generated extension files 2012-01-16 12:33 strk * Move lwgeom_summary to liblwgeom (#1446) 2012-01-16 12:25 strk * Drop getsrid (#1401) 2012-01-16 12:10 strk * Add test for insertion into typmod-ed table (#1414) 2012-01-16 11:22 strk * Fix WKB output for POINT EMPTY with SRID or higher dims (#1478) 2012-01-16 10:34 strk * Add WKB round-trip test for TIN 2012-01-16 10:31 strk * Fix reading TRIANGLE EMPTY in WKB form (#1474) 2012-01-16 10:31 strk * Add POLYHEDRALSURFACE roundtrip WKB test 2012-01-16 10:24 strk * Implement lwgeom_same for MULTICURVE and MULTISURFACE (#1475) 2012-01-16 10:21 strk * Implement lwgeom_same for CURVEPOLYGON types (#1475) 2012-01-16 10:18 strk * Implement lwgeom_same for COMPOUNDCURVE (#1475) 2012-01-16 10:11 strk * Implement lwgeom_same for circularstring (#1475) 2012-01-16 09:11 strk * A CURVEPOLY is also a collection. Fixes #1473. 2012-01-16 09:11 strk * Prevent lwcollection_construct from creating non-collection types 2012-01-16 08:25 strk * Use a CTE for queries involving largs WKB input. Reduces parsing and execution time. 2012-01-16 08:25 strk * Comment out expensive DEBUG lines 2012-01-16 08:24 strk * Downgrade notice of face splitting to debug level 2012-01-15 20:52 strk * Wrap DEBUG output in ifdef POSTGIS_TOPOLOGY_DEBUG (#1469) 2012-01-15 17:50 strk * Make AddTopoGeometryColumn less sequence-number-eager, regress-test 2012-01-15 09:25 robe * put in spaces in ST_InterpolatePoint See Also references 2012-01-15 09:23 robe * ditto for ST_LocateBetween - name change flag and minor other corrections 2012-01-15 09:10 robe * put a note ST_LocateAlong name changed (and is a new name in 2.0 - old name is ST_Locate_Along_Measure) 2012-01-15 03:59 robe * link to where to download pre-built cheat sheets 2012-01-15 03:32 robe * revise docs about make installing extensions to note that extensions are now installed by default if compiling against 9.1+. Also provide an example query to run to verify extensions are installed. THANKS pramsey -- now if we can only have a real tagged release that would be SWEET. 2012-01-15 03:18 robe * #1401 Goodbye getSRID() 2012-01-14 13:10 mcayland * Display "Creating Index..." text within the progress dialog rather than within the shp2pgsql-gui log window. This should make it more obvious to users that something is still happening in the case that they are building on a index on larger shapefiles which can often take quite some time. 2012-01-14 07:37 robe * change eol from native to LF to try to resolve #1466 2012-01-14 07:29 robe * document --with-gettext=no optionand case why you would want to do this. Also minor modifications as to use GEOS 3.3.2 and why you should 2012-01-14 01:03 pramsey * Add ST_InterpolatePoint, deprecate ST_Locate_Between_Measures and ST_Locate_Along_Measure. Document new functions. Alter regressions and docs to use AsText instead of AsEWKT. 2012-01-14 00:49 mcayland * Use normal autoconf convention of using #define to determine whether or not GDALFPOLYGONIZE is present, rather than always having it present and setting its value to either 0 or 1. 2012-01-14 00:49 mcayland * Switch liblwgeom to use the POSTGIS_* defines already generated by configure, rather than passing them in directly. Similar to my previous commit, however here the aim is that by moving the logic outside of make then we can potentially allow other generators (such as CMake) to detect and use other compilers rather than embedding specific -D flags into the command line. 2012-01-14 00:49 mcayland * Switch NLS build to use the in-built ENABLE_NLS define rather than USE_NLS. The key concept here is that we eliminate all logic from the Makefile and put it in the build system (e.g. configure). By having the logic at this higher layer, we make it much easier to transition to another build system in future such as CMake. 2012-01-14 00:49 mcayland * Enable configure to accept the additional parameter --with-gettext=no to disable NLS builds. This makes it possible to explicitly disable builds at configure time if required for platforms where this causes problems such as Windows (see bug #748). 2012-01-14 00:48 mcayland * Fix incorrect camel-casing for HAVE_JSON within configure.ac. 2012-01-14 00:48 mcayland * Fix up AC_DEFINE macros in configure.ac that don't have a description. While autoheader emits a warning, it actually fails and does not regenerate postgis_config.h.in. Along with this fix, we commit an updated version of postgis_config.h created from a fresh invocation of autoheader minus the PACKAGE_* macros. 2012-01-13 17:34 strk * Add test for creating tables with circularstring typmod (#1085) 2012-01-13 17:33 strk * First draft of a test for typmod (#1085) This version simply creates the tables and checks geometry_columns. Should be enhanced to test effectiveness of constraints. 2012-01-13 16:28 robe * remove dangling reference to geometry_same 2012-01-13 16:23 strk * Virtualize ``make'' calls (#1464) 2012-01-13 15:54 mcayland * Rename geometry column header in shp2pgsql-gui to "geo column" to reduce its visible width based upon feedback from Regina. 2012-01-13 15:50 robe * remove ~= from documentation -- we don't want people using this operator 2012-01-13 13:31 strk * Add all signature in the current repository 2012-01-13 11:34 strk * Add more signatures found in a more recent dump of mine 2012-01-13 11:29 strk * Make verbose output of postgis_restore.pl more useful for maintainance It will now avoid to collapse all spaces to keep the door open for better parsing in the future and to be more human readable. 2012-01-13 10:00 strk * Make ~= operator GIST-indexable, following existing documentation NOTE: it takes a dump/reload for this to be in effect. 2012-01-12 21:43 pramsey * Add in an offset option to ST_LocateBetween 2012-01-12 19:55 pramsey * Add support for MULTIPOINT and POINT to ST_LocateBetween 2012-01-12 19:07 pramsey * Flip ST_LocateBetween to use the same LRS code as ST_LocateBetweenElevations 2012-01-12 17:41 strk * Add regress test for topology.AddFace robustness (see #1383) 2012-01-12 17:06 strk * Fix lw_dist2d_pt_seg(B, AB), see #1459 Includes regress testing. Should also fix #1383 2012-01-12 11:21 strk * Complete tests for higher coordinate dimensions (#1455) 2012-01-12 11:21 strk * Fix bug in dimension computer for collection WKT. The parser got confused by inner M letters. This commit also improves speed early breaking the loop over WKT. 2012-01-12 11:20 strk * Add tests for higher coordinate dimensions (#1455) GEOMETRYCOLLECTION still fails 2012-01-12 08:52 strk * Test roundtrip of WKT. Higher dimensions still needed (#1455) 2012-01-12 08:52 strk * Fix a bug in gserialized_read_gbox_p reading garbage in EMPTY point Includes cunit test. Fixes #1458. 2012-01-12 08:51 strk * gbox_float_round: do not attempt to round M when not present 2012-01-12 08:51 strk * Expose gbox_float_round to liblwgeom API 2012-01-11 19:45 pramsey * Change references to BOX2DFLOAT4 to just BOX2D and remove the struct. Ding dong. 2012-01-11 19:20 pramsey * Tie astext(geography) and asbinary(geography) directly to the lwgeom_ C functions, without a cast 2012-01-11 18:53 strk * Allow higher dimensions in GeomFromWKB (#1452) Includes regress test for WKB roundtrip (failing as expected with point empty) 2012-01-11 18:45 strk * Fix bug in gbox_same -> lwgeom_same -> ST_OrderingEquals (#1454) Adds regression test for lwgeom_same and ST_OrderingEquals 2012-01-11 17:18 strk * Fix EMPTY ~= EMPTY to return TRUE (#1453) This also fixes ST_OrderingEquals for empty geometries and adds the concept of NULL boxes to represent EMPTY boxes. ST_Equals is still broken as it uses the overlap operator instead. 2012-01-11 17:18 strk * Encode dependency of libpgcommon on postgis_config.h 2012-01-11 17:18 strk * Xref ST_AsBinary to its reverse ST_GeomFromWKB 2012-01-11 15:57 strk * Add paranoid test of another malformed WKB found in #168 2012-01-11 15:51 strk * Drop ST_AsBinary(text) wrapper, removed in previous commits 2012-01-11 14:50 strk * Add documentation about enhancements in ST_AsBinary (#288) 2012-01-11 14:46 strk * Drop geography-specific C-side of AsBinary function. Proxy to geometry. See #288 2012-01-11 12:30 strk * Limit geometry_columns view definition within 80 columns. This is to avoid issues like #1449 2012-01-11 11:17 strk * Add regress test for WKB (#1448) and enable the existing one for WKT 2012-01-11 11:17 strk * Unlease higher dimensions in ST_AsBinary, using SQL/MM (#288) 2012-01-11 11:16 strk * ST_AsText item is an enhancement, not a new feature 2012-01-11 10:40 strk * Add note aboute AsText support for higher dimension 2012-01-11 10:34 strk * Unleash SQL/MM WKT returned by ST_AsText (#287) 2012-01-11 08:36 strk * Use $(MAKE) to invoke whatever make was used by builder 2012-01-11 08:26 strk * Update HARD UPGRADE section, mention --with-topology 2012-01-11 02:27 pramsey * Try an older bash syntax for robe? 2012-01-10 23:22 pramsey * Add ST_LocateAlong support for multipoints too (completeness) 2012-01-10 23:14 pramsey * Bind ST_LocateAlong() to the new LRS function that supports offsets. 2012-01-10 23:04 pramsey * svn:ignore properties 2012-01-10 23:04 pramsey * Spacing, yes 2012-01-10 22:20 robe * #1444 fix typo in command (should be command not comand) 2012-01-10 21:51 pramsey * Bring the extensions into the autoconf environment 2012-01-10 19:36 dustymugs * Fixed incorrect call to rt_raster_geopoint_to_cell in rt_band_load_offline_data and added additional debug messages 2012-01-10 18:45 dustymugs * Fixed incorrect use of rt_band_destroy when loading offline band data. ALso added rules to raster_columns and raster_overviews to gracefully handle insert/update/delete. 2012-01-10 18:18 dustymugs * Fixed double free of memory when using out-of-database bands 2012-01-10 18:12 strk * Add rules on geometry_columns view to tolerate insert/update/delete Fixes OGR, see #1426. Raises no warning on operation (it should). This commit includes changes in postgis_proc_upgrade.pl to retain rules. 2012-01-10 14:58 strk * Reflect type of empty from ST_Dimension (#1441) No existing testcase fail, no new testcase is added. This change doesn't invalidate any part of the reference manual. Reference manual isn't updated. Signed-off-by: Charlie Brown 2012-01-10 13:17 strk * Use a standard lwcollection_allows_subtype function to guard against bad input. Fixes #698 (and #1445 in a better way) 2012-01-10 12:28 mcayland * If the database settings are incorrect when attempting an import, display the connection settings dialog. Also a minor bugfix: if the dialog is cancelled by closing the window, ensure that any unset fields are reset back to blank. 2012-01-10 12:28 mcayland * Switch shp2pgsql-gui to COPY mode by default for increased speed; the user doesn't really care what form the output takes when it's being loaded into the database directly rather than via a file. 2012-01-10 12:28 mcayland * Raise an error within shp2pgsql-gui if the user clicks "Import" without having added any files to the list. 2012-01-10 12:28 mcayland * Alter shp2pgsql-gui so that we use one connection per file; this makes tracking error state on the server considerably easier, since upon abort we just disconnect from the server rather than trying to figure out what state we are in and handle it appropriately. 2012-01-10 11:36 strk * Check type of elements added to multi geometries. Fixes #1445. Includes regress testing both at the liblwgeom and postgis levels. 2012-01-10 10:06 strk * Add "M" type modifiers on elements of GEOMETRYCOLLECTION Reflects specs in doc/ZMgeoms.txt and satisfies the parser. Closes ticket #724. 2012-01-10 08:32 strk * Other generated files 2012-01-10 08:28 strk * Ignore new generated files 2012-01-10 08:26 strk * Add images-clean rule and perform the cleanup on maintainer-clean 2012-01-10 07:25 robe * put in missing title tag 2012-01-10 07:12 robe * put in missing end paragraph end tag 2012-01-10 07:03 robe * fix typo 2012-01-10 06:53 robe * #1442: Add sections on installing, upgrading and loading data into tiger geocoder. Got at least 2 people who seem confused about how to upgrade their tiger installs and assume it follows the same steps as the rest of PostGIS. 2012-01-09 22:43 dustymugs * Added column "out_db" to raster_columns. "out_db" is of type boolean[] with each element indicating if that band of same index is out-of-database. Updated relevant AddRasterConstraints and DropRasterConstraints functions. Related ticket is #1440. 2012-01-09 20:17 robe * put in svn Author Date Id Revision keywords 2012-01-09 20:08 dustymugs * Make the data of externally-loaded band internally owned so a call to rt_band_destroy() properly frees the memory. 2012-01-09 19:48 dustymugs * Add read-only support for band data located outside the database in raster files. All "get" and analysis functions should work for out of database bands. Related ticket is #1440. Also added a test raster file for use by an out of db band and future use for raster2pgsql loader regression tests. 2012-01-09 19:05 dustymugs * Removed garbage whitespace. 2012-01-09 19:02 dustymugs * Added conditional check to ST_Intersects(raster, int, raster, int) to deal with STRICT being set on _st_intersects(raster, int, raster, int). Fixes regression caused in r8714. 2012-01-09 18:50 pramsey * Remove whitespace 2012-01-09 18:27 pramsey * Interim progress on LRS work. 2012-01-09 18:01 strk * Change lwgeom_is_empty to return spatial emptiness (#671) 2012-01-09 17:55 mcayland * Allow manual resizing of the filename column within shp2pgsql-gui if required, as per request from Regina. 2012-01-09 17:27 strk * Further cleanup of ST_CollectionExtract documentation 2012-01-09 17:10 strk * Document new ST_CollectionExtract behavior 2012-01-09 17:01 strk * Switch back ST_CollectionExtract to return EMPTY rather than NULL on no matches (#835) This behavior seems closer to the one requested in original #457 testcase, and is still consistent. Is also closer to documentation. 2012-01-09 17:01 strk * Add lwgeom_construct_empty API call 2012-01-09 17:01 strk * Implement lwcompound_construct_empty 2012-01-09 16:20 strk * Alwas return NULL on type miss from ST_CollectionExtract (#835) 2012-01-09 16:20 strk * Return typed empties from lwcollection_extract 2012-01-09 15:27 strk * Distribute comments in tarball. Stop distributing pdf or html (#626) 2012-01-09 15:03 strk * Fix compiler warnings 2012-01-09 15:01 dustymugs * Make _ST_Intersects(raster, raster) STRICT as per comments in #1412. 2012-01-09 14:56 robe * #1392: Can't geocode intersecting highways or areas where no zip available 2012-01-09 13:36 strk * Build the libtool wrapper script version of raster2pgsql 2012-01-09 12:48 robe * Add Maria Arias de Reyna to credits 2012-01-09 11:01 strk * Update Java components to support SRID<=0 as unknown SRID (#1221) This is first patch by Maria Arias de Reyna taking on maintainance of the Java components. It includes tweaks in README file and a new maven based build system. It also includes some indenting changes. 2012-01-09 10:34 strk * Fix memory leak in shapefile loader (#1436) 2012-01-09 07:52 robe * fix typo in extension version 2012-01-08 23:32 mcayland * Commit reworked version of shp2pgsql-gui to the repository. As per my email to postgis-devel, this commit contains a major reworking of the inner core, with many bugfixes. The primary changes are: - Elimination of FILENODE, since we can just use pointers to SHPLOADERCONFIG - Abstract the configuration structures from the GUI interface - Restrict entry to either drag/drop or file chooser - Instead of constantly destroying/creating new dialogs, create them once and then just show/hide them (in particular this enables the file chooser to open at its previous directory) - Add separate connection details and progress bar dialogs - Rework both internals and GUI in preparation for adding dumper support Note that the dumper integration changes are being worked on separately and will be included in a later commit. 2012-01-08 19:15 robe * Fix typo in manual and more description about schema. Evidentially some people do try to read the manual and make sense of it as demonstrated here: http://gis.stackexchange.com/questions/18254/loading-a-raster-into-a-postgis-2-0-database-on-windows 2012-01-08 16:28 dustymugs * Code cleanup related to registering and deregistering GDAL drivers 2012-01-08 07:57 robe * lots of corrections, also add integer[] arg recognition 2012-01-08 07:29 robe * more cleanup -- issue with raster / raster functions and output convexhull instead of raster when result type is raster or geometry 2012-01-08 06:49 robe * revise to recognize array of raster arguments 2012-01-08 06:26 robe * get rid of dropraster addrastercolumn and replace with create table, apply constraints. Still a lot of cleanup to go 2012-01-07 19:28 robe * #1435: fix function proto typo of TopoGeo_AddPoint in docs 2012-01-07 19:24 robe * fix typo in version number 2012-01-07 19:04 robe * change alpha1 to a14. It appears we won't be releasing an alpha1 this weekend bah. 2012-01-07 19:02 robe * update instructions to reflect changes that need to be made to extensions before tagged release. Hopefully we can automate this part in the future -- but have no clue how. 2012-01-07 15:24 dustymugs * Have rt_raster_from_gdal_dataset attempt to determine the SRID of the raster using OSR. 2012-01-07 14:05 dustymugs * Additional tweaks for the NODATA values constraint. Continues changes made in r8691. 2012-01-07 00:55 robe * bump version to alpha1 in preparation for alpha1 shuttle launch 2012-01-07 00:47 pramsey * Move geojson test into geojson.sql file 2012-01-07 00:42 dustymugs * Fixed handling of NODATA value constraint as band with no NODATA was being constrained with the value of zero. 2012-01-07 00:29 pramsey * ST_GeomFromGeoJSON - Malformed GeoJSON causes SIGSEGV in postgres process (#1434) 2012-01-06 21:39 pramsey * Move offset curve generation into liblwgeom with other geos functionality 2012-01-06 17:35 robe * fix tag typo 2012-01-06 16:29 robe * example of AddRasterConstraint that takes listing of constraints to apply 2012-01-06 15:35 robe * Accidentally took out ST_WKTToSQL during #1443. ST_WKTToSQL is documented SQL/MM alias (extension didn't install as a result since the documentation comment installation failed) 2012-01-05 22:10 pramsey * Add files to svn:ignore 2012-01-05 21:18 dustymugs * Added shortcut mechanism for copying data in rt_raster_from_gdal_dataset() when the natural block width is the raster width. Enhanced testing in testapi.c. 2012-01-05 20:52 dustymugs * Syntax cleanup as part of memory bugs audit. Related to ticket #1432. This should be the last of it for now. 2012-01-05 20:31 robe * #1433: Part 2 - merge what is left of sqlmm.sql.in.c into postgis.sql.in.c 2012-01-05 20:13 dustymugs * Additional regression tests for ST_AsGDALRaster, ST_GDALDrivers, ST_AsRaster, ST_Resample, ST_Metadata. Syntax cleanup in rt_pg.c and testwkb.c 2012-01-05 19:56 robe * #1433: part 1 -- get rid of SE functions 2012-01-05 18:59 dustymugs * Memory bug fixes and additional regression tests for ST_SummaryStats, ST_Histogram, ST_ValueCount, ST_Reclass and ST_Quantile. Ticket is #1432. 2012-01-05 16:10 strk * Switch memory context back before returning in RASTER_bandmetadata Fixes second case in #1432 2012-01-05 08:15 strk * It takes GEOS-3.3.2 for a sane topology (noding fixes in there) 2012-01-05 07:59 robe * #1430: create topology_drop_before and topology_drop_after to allow changing names of input args and allow changing functions to use default args 2012-01-05 07:51 robe * svn tags 2012-01-04 22:30 strk * Fix deallocation of terminating NULL in RASTER_asGDALRaster (#1432) 2012-01-04 21:38 strk * Work around a PostgreSQL 8.4+ bug with CREATE INTO (#1431) 2012-01-04 20:50 strk * Document topology.toTopoGeometry (#1017) 2012-01-04 18:33 strk * Complete implementation and regress test for toTopoGeom (#1017) You can start playing with this. Lacks documentation. Expect troubles. Feel free to report them. 2012-01-04 18:17 strk * Implement TopoGeometry->Geometry converter for COLLECTION types 2012-01-04 17:58 pramsey * Don't allow --with-topology when GEOS version < 3.3 2012-01-04 02:07 pramsey * Try to make json-c detection slightly more automatic. 2012-01-03 23:52 pramsey * Change to GNU macro NAN. Still not feeling The Confidence. 2012-01-03 23:42 pramsey * Make numerical stability fix actually be present 2012-01-03 23:28 pramsey * Hm, nan() function? 2012-01-03 23:24 strk * Document TopoGeo_AddPolygon 2012-01-03 23:17 strk * Implement and regress-test TopoGeo_addPolygon 2012-01-03 22:07 pramsey * Make ST_Azimuth(p1, p1) return NULL and make ST_Project(p1, 0, NULL) return p1. 2012-01-03 21:30 strk * ST_Split was implemented - a lot more to remove from TODO 2012-01-03 20:55 strk * Change parameter names to use the "athing" convention. See #1427 2012-01-03 20:48 strk * Fix typo in exception message, change signature of TopoGeo_addPolygon 2012-01-03 20:31 pramsey * Reorganize SQL definitions a bit: type creation at the start, indexes and operators after, then other stuff. Probably further ordering would be C-stuff before PL/PgSQL stuff. 2012-01-03 20:24 strk * Test invalid calls to topogeo_addpoint 2012-01-03 20:04 strk * Document TopoGeo_addLineString 2012-01-03 19:21 pramsey * Change units to radians and add some tests (#657 and #1305) 2012-01-03 18:41 strk * Implement and regress-test TopoGeo_AddLineString 2012-01-03 18:34 dustymugs * Removed DROP VIEW statements as per suggestion by robe in ticket #1422. 2012-01-03 10:52 strk * Document TopoGeo_addPoint 2012-01-03 10:39 strk * Add regression test for TopoGeo_AddPoint 2012-01-03 10:10 strk * Move TopoGeom_addXXX functions to populate.sql and refine signatures Implement TopoGeom_addPoint (misses regression testing yet) 2012-01-03 09:49 strk * Don't consider the old self edge when checking integrity Fixes a bug introduced by previous commit. 2012-01-03 09:44 strk * Don't consider shared nodes as edge intersections. Fixes #1428. 2012-01-02 06:59 dustymugs * Renamed legacy.sql.in.c to rtpostgis_legacy.sql.in.c to not conflict with postgis' legacy.sql. Associated ticket is #1422. 2012-01-02 00:31 robe * #722 more regress fixes for GeomFromText 2012-01-02 00:25 robe * #722: regress replace GeomFromText with ST_GeomFromText 2012-01-01 23:42 robe * #722: Good bye GeomFromWKB, GeomFromText 2012-01-01 21:04 dustymugs * Added legacy.sql which adds renamed and removed columns to raster_columns and raster_overviews. This will allow 3rd party software that hasn't been updated to the current structures of raster_columns and raster_overviews to still operate successfully. 2012-01-01 15:58 robe * #961: Change ST_GeoHash to use default args 2012-01-01 15:41 robe * update to include ST_Azimuth for geography -- still need example. Also provide example for using degrees 2012-01-01 15:22 robe * #961: ST_AsGeoJSON change to use default args 2012-01-01 14:39 robe * over dropped ST_AsKML protos 2012-01-01 14:10 robe * changed name of prec to maxdecimaldigits for ST_AsX3D to be consistent with other ST_As* functions, change ST_AsKML to use default args 2012-01-01 13:28 robe * fix incorrect arg name in ST_AsGML 2012-01-01 13:24 robe * #722: Remove all functions with ST_ equivalents from core postgis.sql. Good bye SetSRID 2012-01-01 04:38 robe * #1423: ST_AsGML regress fixes -- bah revert last change evidentally '' and NULL prefix do not mean the same thing. 2012-01-01 03:41 robe * #1423 revision -- put back the strict but set default prefix to '' AND NULLIF it in the function 2012-01-01 03:28 robe * #1423 -- fix for geography ST_AsGML - take off strictness if we allow null for prefix 2012-01-01 03:27 robe * #1423: ST_AsGML fix - Can't have strict on funcs that take default args where a default arg defaults to NULL. Really :) 2012-01-01 02:57 robe * forgot a ST_AsGML drop version,geometry version 2012-01-01 01:40 dustymugs * Added support for attempting to identify the EPSG from a raster's metadata if SRID is not provided with -s. If unable to get geotransform matrix from raster, use generic default of (0, 1, 0, 0, 0, -1). Associated ticket is #1421 2012-01-01 01:26 robe * #961: Change ST_AsGML to use default args 2011-12-31 09:47 strk * Document new optional arguments to AddNode 2011-12-31 09:47 strk * topology.AddNode: add 2 additional optional arguments to allow splitting edges and computing containing_face 2011-12-31 09:47 strk * Add parameter names 2011-12-31 09:47 strk * Use DEBUG level for printing SQL being executed... 2011-12-31 04:45 robe * bump up release numbers 2011-12-31 04:36 robe * forgot altitude arg for hillshade 2011-12-30 15:52 robe * quickly change the options name arg to agree with ST_AsGML docs 2011-12-30 15:43 robe * #1415 -- beginning support for options -- expose the currently useless opts flag 2011-12-30 13:23 pramsey * Stub in ST_LocateAlong and ST_LocateBetween for implementation before 2.0 2011-12-30 09:24 robe * put in default values for ST_AsSVG geography 2011-12-30 09:06 robe * change ST_AsSVG(text) to explicilty list all args otherwise upgrade script fails -- since old signature exists causing ambiguous conflict during install. 2011-12-30 08:48 robe * change ST_AsSVG to use default args and support named args. Also correct misstatement in geography code as to the ordering of args thought that ordering makes more logical sense to me (it ain't the way it is) 2011-12-29 21:00 pramsey * Conditionally drop loader test tables (requires PostgreSQL >= 8.2 to support IF EXISTS syntax) 2011-12-29 20:32 pramsey * Fix postgis_valid_typmod to use gserialized* as an input instead of lwgeom* to get past in/out memory management issues (#1413) 2011-12-29 18:13 strk * Retain type of TopoGeometry objects defined by NO element (#1017) Includes regression tests for conversion of typed empty objects from simple to topological model. 2011-12-29 18:01 strk * Consider TopoElements of type 0 as empty, allow CreateTopoGeom calls w/out a TopoElementArray to construct empties (#1017) 2011-12-29 11:18 strk * Test more TopoGeometry creation 2011-12-29 10:52 strk * CreateTopoGeom: tweak error message on out-of-range TopoGeometry type 2011-12-29 10:44 strk * Complete parameter names 2011-12-29 07:40 strk * Typos and argument names 2011-12-29 07:39 strk * Honour verbosity for database initialization errors 2011-12-29 07:04 strk * Tabs to spaces, a few TODO items... 2011-12-29 07:04 strk * Put overridden (for topology) spatial predicates in their own file 2011-12-29 06:48 strk * topology.toTopoGeom: add type compatibility checks (#1017) 2011-12-29 06:05 strk * Add geometry parameter names to functions 2011-12-28 16:51 dustymugs * Removed STRICT from various ST_Intersects functions and changed the costs of calling ST_Intersects to 1000. Related ticket is #1410. 2011-12-28 15:45 dustymugs * Force initialization of output GDAL raster from rt_raster_gdal_warp to band's NODATA value. Also, spelling correction. 2011-12-28 14:07 robe * I have difficulty with simple math 2011-12-28 13:59 robe * more description of over view 2011-12-28 11:01 strk * Drop spurious white spaces. Should fix #1409. Thanks Peter Clark. 2011-12-28 02:19 dustymugs * Correct output of INSERT statements for overviews in raster2pgsql.c. Associated ticket is #1404. Aslo minor code formatting and additional code checks in rtpostgis.sql.in.c 2011-12-27 16:37 robe * oops missing tag -- removed other copy paste mistakes 2011-12-27 16:33 robe * document ST_HillShade (still need to put in examples) 2011-12-27 15:31 robe * norm is right - powers of 2 are better especially since my file tiles are in powers of 2 so don't get scrap tiles 2011-12-27 06:32 robe * link to npgsql download site. 2011-12-27 06:27 robe * fix typo and provide link to java jdbc download site 2011-12-27 06:04 robe * link to raster applications section that demonstrates how to use these functions in an application 2011-12-27 06:01 robe * replace java example with a simpler more useful one 2011-12-27 05:29 robe * provide a java console app example 2011-12-26 22:22 robe * more description 2011-12-26 22:10 robe * c# example using ST_AsPNG 2011-12-26 20:31 robe * more cleanup 2011-12-26 20:24 robe * use docbook paragraph tags 2011-12-26 20:21 robe * some other minor cleanup 2011-12-26 20:20 robe * wrap php code in cdata tags 2011-12-26 20:10 robe * Add php example using postgis raster 2011-12-26 17:43 robe * correct comment 2011-12-26 17:38 robe * minor formatting cleanup 2011-12-26 17:37 robe * fix typo in image names 2011-12-26 11:04 robe * example of resample 2011-12-26 10:31 robe * fix typo in cast check expression. Should be checking for box3d existence not box2d 2011-12-26 09:32 robe * bump up version numbers 2011-12-25 10:56 strk * Stub toTopoGeom function and testcase (#1017) 2011-12-25 10:56 strk * Add missing dependencies of topology.sql (includes) 2011-12-24 22:27 robe * another minor typo 2011-12-24 22:10 robe * fix typo in column numbers 2011-12-24 21:39 robe * minor formatting change 2011-12-24 21:07 robe * fix formatting of ST_Transform example and add another sub example demonstrating using different algorithm 2011-12-24 20:18 robe * example for raster transform 2011-12-24 18:40 robe * change docs to use unix style slashes which work correctly on both Unix and windows. 2011-12-24 16:42 dustymugs * If generating overviews and -F is set, overview tables will have "filename" column. 2011-12-24 15:52 dustymugs * Testing the wrong variable when checking if two rasters is different. 2011-12-24 11:41 strk * Encode dependency of objects and scripts on configuration 2011-12-24 11:22 strk * Ignore generated uninstall_rtpostgis.sql 2011-12-24 11:22 strk * Drop created tables after run 2011-12-24 11:22 strk * Cleanup created tables after run 2011-12-24 11:21 strk * drop created table after run 2011-12-24 11:21 strk * Add support for dropping DOMAINs in create_undef.pl (#1407) 2011-12-24 11:21 strk * Enable uninstall_topology.sql testing 2011-12-24 11:21 strk * Allow fully-qualified basetype name for aggregates 2011-12-24 11:21 strk * Drop tables in reverse order, reducing probability of fkey troubles 2011-12-24 10:42 strk * run_test doesn't need USE_VERSION anymore 2011-12-24 10:42 strk * Generate uninstall_topology.sql 2011-12-24 10:34 strk * Stop using USE_VERSION, assume pgsql is always > 7.4. Hopefully fixes #819 2011-12-24 10:34 strk * Add support for objects schema definition in create_undef.pl 2011-12-24 09:59 strk * Drop created function after run 2011-12-24 09:59 strk * Ensure mapalgebra test functions are dropped 2011-12-24 09:59 strk * Don't load rt_utility_test data creator as test 2011-12-24 09:58 strk * Add rt_empty_raster dropper script 2011-12-24 09:58 strk * Add rt_properties_test dropper script 2011-12-24 09:58 strk * Move single-test data tables within the testfiles, cleanup after run 2011-12-24 09:58 strk * Cleanup after run 2011-12-24 09:58 strk * Add a drop_rt_band_properties_test script for cleanup purposes 2011-12-24 09:58 strk * cleanup data tables 2011-12-24 09:58 strk * Add a drop_rt_gist_test.sql file for cleanup purposes (#301) 2011-12-24 09:58 strk * Cleanup created objects 2011-12-24 09:57 strk * Avoid function calls in DEFAULT specifications for unknown SRID Matches what postgis.sql does as well. Fixes generation of uninstall script for raster (#301) 2011-12-24 09:57 strk * Enhance DEFAULT specification stripper 2011-12-24 09:57 strk * Run uninstall test for raster, when enabled 2011-12-24 09:56 strk * Generate uninstall_rtpostgis.sql (#301) 2011-12-24 02:51 dustymugs * Additional work to remove DROP FUNCTION statements depending upon prior DROP TYPE ... CASCADE statements that generate ERRORs 2011-12-24 01:14 dustymugs * Instead of using spatial reference text in WKT format, use PROJ.4 format when possible. This does mean that in situations that require WKT format, rt_raster_gdal_sr must be called to convert from one format to the other. 2011-12-24 01:08 dustymugs * Fix issue with RASTER_sameAlignment where the deserializing of the raster is not being limited to just the header. 2011-12-23 17:33 strk * support multiline function signatures at the parsing stage too... 2011-12-23 17:30 strk * Add support for multiline function signatures 2011-12-23 17:01 dustymugs * Overview constraints should always be added regardless of whether or not the user requests raster constraints. 2011-12-23 16:49 strk * Write header in the files generated by create_undef.pl Header includes license, creation timestamp and input filename 2011-12-23 16:49 strk * Simplify uninstall_postgis.sql rule, drop the manual edited version 2011-12-23 16:39 dustymugs * Fixed erroneous addition of filename to overviews when the flags -l -F -Y are combined. 2011-12-23 16:22 dustymugs * Fixed for better path handling 2011-12-23 16:18 robe * put in sections for postgis extensions. Probably will need some cleanup. 2011-12-23 16:14 strk * Ignore generated comment files 2011-12-23 16:14 strk * Ignore generated raster files 2011-12-23 16:14 strk * Let create_undef.pl generate uninstall_postgis.sql 2011-12-23 16:14 strk * Cleanup after loader test runs, fixing uninstall testing 2011-12-23 16:14 strk * Drop objects created by the tests 2011-12-23 16:14 strk * Fix create_undef.pl script to generate correct uninstall script 2011-12-23 16:04 dustymugs * Added uninstall_script to facilitate generation of uninstall_postgis.sql and uninstall_rtpostgis.sql. It could still use additional validation and cleaning up of the output uninstall sql files. 2011-12-23 13:20 robe * minor code change to make example a bit shorter 2011-12-23 13:06 robe * fix some erroneous statements about ST_Clip and provide example demonstrating trimraster argument effect 2011-12-23 08:53 robe * fix unbalanced tag 2011-12-23 08:38 robe * some cosmetic cleanup 2011-12-23 08:35 robe * example of st_clip with pictures 2011-12-23 07:58 robe * start documenting ST_Clip 2011-12-22 19:09 robe * fill in missing protos for droprasterconstraints / addrasterconstraints 2011-12-22 13:24 robe * make title a little shorter 2011-12-22 13:23 robe * changing titles -- raster data man I'm eventually going to throw in mapserver, .net, jdbc examples cause I'm too lazy to create a separate chapter. The postgis app section is really specific to postgis geometry since it doesn't talk about raster or geography at all. 2011-12-22 13:18 robe * minor error in statement 2011-12-22 11:20 strk * Drop operator families, not classes (#543) 2011-12-22 11:20 strk * Encode dependency of uninstall_postgis.sql on included files 2011-12-22 11:20 strk * Add more uninstall objects found by uninstall test (#1397) 2011-12-22 11:19 strk * Count objects in the _regress_ database, not elsewhere (#1397) 2011-12-22 10:21 strk * Fix testing of uninstall script count [#1397] This commit also adds new utility functions and skips testing uninstall when raster or topology are enabled. 2011-12-22 10:21 strk * Fix uninstall script [#1153] 2011-12-22 10:21 strk * Deprecate Polygonize and Collect aggregates [#1400] 2011-12-22 10:21 strk * Encode dependency of postgis.sql from included scripts 2011-12-22 10:21 strk * Encode dependency of postgis objects on postgis_config.h Fixes ./configure && make check after switching between different PostgreSQL versions. 2011-12-22 10:21 strk * Add testing for uninstall_postgis.sql [#1397] The uninstall currently fails due to #1153 2011-12-22 08:23 strk * Don't depend on bytea representation for unrelated tests. Fix testing against PostgreSQL 9.0+. 2011-12-22 08:01 strk * Replace INFINITY with MAXFLOAT. Should fix Solaris build [#1396] I don't think it makes a difference as those functions are not documented about the exceptional return, and no regression test fails with the change. 2011-12-22 05:48 pramsey * Move SPI_finish to after elog calls. This seems to fix the regression failure in 877, though why is not clear. Is SPI_finish removing a memory context that palloc has allocated things inside? This would explain the odd result (tbl and col variables get emptied upon call to SPI_finish). 2011-12-21 21:49 robe * change ST_Reclass example to use less verbose ST_AddBand array syntax 2011-12-21 19:07 pramsey * ST_Azimuth on the spheroid (#1305) 2011-12-21 18:42 pramsey * Add ST_Project(geography, distance, azimuth) (#657) to construct a new point given a heading and a distance. 2011-12-21 17:16 robe * fix typo 2011-12-21 17:15 strk * Add missing options in the help string 2011-12-21 17:09 strk * Put staged postgis.sql with other staged intsall objects 2011-12-21 16:17 strk * Document the new -s from:to syntax of shp2pgsql [#994] 2011-12-21 14:53 strk * Add include for lwgeom_typmod_valid define 2011-12-21 14:50 strk * Add top-level and postgis/ dirs in include path for building scripts Fixes an error finding sqldefines.h 2011-12-21 14:37 strk * Use own implementation of endian detection, should fix #1172 2011-12-21 14:16 strk * Fix repeated modifier 2011-12-21 14:03 strk * Put PostgreSQL module related code in a new postgis_module.c file Beside the existing MODULE_MAGIC macro we now also have _PG_init and _PG_fini which are called at module load and unload. Such functions may be used to deal with GUC (and sample code for that is stubbed already). See #1393. 2011-12-21 13:59 robe * #1257 - drop mem_size 2011-12-21 13:14 robe * #1345 write this off as an observed regression difference and document the behavior for those like me who will be adversely impacted and confused by application breakage. 2011-12-21 13:03 robe * #1242 write this off as a documentation bug. I don't have 1.5.1 anymore to confirm ST_Line_Locate_Point ever worked with multilinestrings and doesn't work on my 1.5.3 install 2011-12-20 19:35 strk * Convert java components to SRID<=0 being unknown and 0 being the official one [#1221] NOTE: this is untested, as "make" didn't know what to do and so neither do I 2011-12-20 18:51 strk * Different types _can_ be equal, see #756 2011-12-20 16:56 robe * link to windows supplementary hard upgrade instructions 2011-12-20 16:01 strk * Add comments in current version, including topo and raster [#1390] 2011-12-20 15:43 strk * Add comments from pgis-1.4 [#1390] Also handle pg_restore errors more cleanly 2011-12-20 15:18 strk * Add more objects from a 1.5 install, including comments [#1390] 2011-12-20 03:28 dustymugs * Finished support for make target "uninstall". 2011-12-20 02:58 dustymugs * Correct handling of make target "distclean". Next is "uninstall". 2011-12-19 19:21 strk * Update loader tests to use the new reprojection switch [#994] 2011-12-19 19:06 strk * Drop -r switch, allow requesting reprojection with -s [#994] 2011-12-19 16:19 strk * Make sure input is at least 3 characters long (#1146) 2011-12-19 16:19 strk * Report testing of pg-8.4.9/pgis-2.0.0SVN => pg-9.1.2/pgis-2.0.0SVN 2011-12-19 12:27 strk * Document postgis_restore.pl based HARD UPGRADE procedure Reviews are welcome. The new description replaces the old one so the brute force noisy process is now undocumented. If really needed it may come back in a subsection. 2011-12-19 09:07 strk * Allow keeping rows in spatial_ref_sys at postgis_restore.pl time After this commit the entries found in spatial_ref_sys at time of restore are retained w/out triggering ERROR lines in logfile or transaction aborts. Entries in dump with SRID not found in existing spatial_ref_sys are inserted. 2011-12-19 08:18 strk * Fix SRIDs in topology.topology after restore. 2011-12-19 06:33 robe * bump up numbers. logic to drop raster casts from extension if they are present and script asks to drop. 2011-12-19 05:00 robe * get rid of superfluous drop if exists _drop_st_samealignment 2011-12-19 04:56 dustymugs * Fixed to suppress PL/pgSQL notices causing issues due to line # output. Added order by to check_raster_overviews to ensure consistent output. 2011-12-19 04:48 robe * revise upgrade script to take into consideration change in casts 2011-12-19 04:12 robe * replace box2d with box3d in examples and remaining func 2011-12-19 03:44 robe * Clarify topology topoelement example that it is an example of WHAT NOT TO DO 2011-12-19 03:37 robe * replace references to box2d with box3d 2011-12-19 02:18 robe * get rid of remove ST_Intersection signatures and replace with new ones. Add the raster outputting intersection signatures. Still need to put in examples. 2011-12-19 01:59 robe * update faq for raster to bring it more up to line with new loading , QGIS support etc., remove box2d and replace with box3d, minor rewording -- people who don't know GDAL don't know what a GDAL raster is. Took that word out when describing -G since it confuses rather than adding value. 2011-12-19 01:53 dustymugs * Refactored and cleaned up the regressions checks of values in raster_columns and raster_overviews views. 2011-12-18 23:02 strk * Document darkblue test: pg-9.1b3/pgis-1.5 to pg-9.1.1/pgis-2.0.0SVN 2011-12-18 22:42 strk * Do not expect things to happen in "userland" schema (what is it?) 2011-12-18 18:49 robe * put in missing tag 2011-12-18 18:05 robe * add in some missing raster2pgsql switches and provide an example of the -G list drivers option. 2011-12-18 14:24 strk * Update after typo fix for AddGeometryColumn error message 2011-12-18 14:22 strk * Fix st_extent on empty relation (#1385) 2011-12-17 21:00 strk * AddGeometryColumns => AddGeometryColumn 2011-12-17 01:50 robe * fix typo 2011-12-16 22:07 dustymugs * Minor comment cleanup in rtpostgis.sql.in.c. Added regression tests for AddRasterConstraints, AddOverviewConstraints, DropRasterConstraints and DropOverviewConstraints. 2011-12-16 17:20 strk * Do restore spatial_ref_sys from dump, temporarly disabling srid check Assuming you don't source spatial_ref_sys.sql prior to run postgis_restore.pl you would always end up with all your data in the table and if no SRIDS are out of the valid range you'd also have the constraint in place. 2011-12-16 16:39 strk * Add more signatures to skip on restore (raster) 2011-12-16 15:16 strk * Report full exception string on ST_Intersection failure (see #1173) 2011-12-16 14:59 strk * Add test for #1344 (can't dump invalid geometries) 2011-12-16 04:34 robe * fix more typos 2011-12-16 04:27 robe * more typo fix 2011-12-16 04:24 robe * fix more typos 2011-12-16 04:21 robe * flesh out creating rasters section a bit. 2011-12-16 01:41 robe * start best practices stuff and break up loading and creating into two separate sections. 2011-12-16 01:25 robe * cosmetic change to lists 2011-12-16 01:11 dustymugs * Addition of C-based ST_MinPossibleValue to replace the existing ST_MinPossibleVal which uses hard-coded values. Updated dependent functions and scripts/plpgsql to use new function. Deleted scripts/plpgsql/st_minpossibleval.sql to stop people from using it. Associated ticket is #1298. 2011-12-16 00:09 dustymugs * Just changes to the comments of ST_Intersection(geometry, raster) 2011-12-15 23:47 dustymugs * Addition of two-raster ST_Intersection function set in raster-space well as another set for raster,geometry ST_Intersection in raster-space. Associated ticket is #1381 2011-12-15 23:43 dustymugs * Renamed function parameters for ST_SameAlignment and ST_Intersects so that the names follow the convention used for similarly purposed parameters of other raster functions. 2011-12-15 23:29 strk * Allow calling geography_in with less than 3 args (see #1320) 2011-12-15 23:26 strk * Check typmod on geometry input. Fixes before triggers (#1320) 2011-12-15 15:11 strk * Fix documentation for the new option for GML box output 2011-12-15 02:19 robe * more error fixes and change ordered lists to itemized lists 2011-12-15 02:17 robe * fix invalid link end 2011-12-15 02:15 robe * get rid of extra tag 2011-12-15 02:14 robe * correct regular_blocking definition, add descriptions for raster_overview columns 2011-12-15 01:56 robe * more reasons why we have raster overviews 2011-12-15 01:54 robe * Start raster_overviews section 2011-12-15 00:21 dustymugs * Renamed st_bytea to bytea as per PostGIS convention. Existing databases will not be affected if upgraded using the upgrade scripts. Associated ticket is #1003 2011-12-15 00:16 dustymugs * Commented out the dropping of box2d casts as the upgrade scripts won't install the box3d casts. 2011-12-14 23:51 dustymugs * Renamed operator functions and made appropriate changes to associated operators to be inline with usage for geometry and geography. Associated ticket is #633. Existing users will not be affected as the upgrade scripts do not drop or add new operators. 2011-12-14 23:02 dustymugs * Added DROP CAST and DROP FUNCTION for box2d. 2011-12-14 22:57 dustymugs * Dropped casts to box2d and replaced with casts to box3d. Associated ticket is #1330. 2011-12-14 22:23 dustymugs * Added option -G to get listing of supported raster types instead of calling ST_GDALDrivers in SQL. Had to tweak rt_raster_gdal_drivers in rt_api.c to not limit drivers based upon creation capabilities. Associated ticket is #1374. Added ability to specify band indices with ranges for option -b. Example: -b 1-5,7,9-15. Associated ticket is #1375. Added warning messages when loader is processing more than one raster and rasters may have different number of bands, pixel types, hasnodata flags, NODATA values, geotransforms andtile sizes. Associated ticket is #153. 2011-12-14 22:14 robe * document raster_columns catalog view 2011-12-14 18:33 strk * Make dropping of log files fully controlled by switch (#1376) This is because hudson wants to report the regress.log in any case 2011-12-14 18:25 strk * Regress test all behaviors involving EMPTY geometries See http://trac.osgeo.org/postgis/wiki/DevWikiEmptyGeometry Changes ST_NumPoints and ST_ExteriorRing to behave requested. Keeps ST_InteriorRingN returning NULL, as per "n is out of range" Closes #692 2011-12-14 18:24 strk * Crossref ST_InteriorRingN with ST_ExteriorRing 2011-12-14 17:13 strk * Drop temporary files if there are no failures (#1376) 2011-12-14 16:02 strk * Fix crash on ST_AsGML('POLYGON EMPTY') (#681) Also tweak GML of empty types to be smaller and include regression testing both at the liblwgeom and sql level 2011-12-14 15:07 strk * Fix a typo from last commit, stub test for GML emptyness 2011-12-14 14:46 strk * Enable a test for an old bugfix (#683) 2011-12-14 14:46 strk * Move the EMPTY buffer test from tickets.sql to empty.sql 2011-12-14 14:37 strk * Return empty geoms snapped to a grid as immutated (#1089) Also introduces an "empty" regression test 2011-12-14 14:25 robe * minor corrections / enhancements 2011-12-14 13:31 strk * Drop topology specific versioning 2011-12-14 13:31 strk * Add more skip signatures, from interim builds 2011-12-14 11:22 robe * minor change to rtpostgis_drop so can more easily drop from extension for extension install. Many changes to extensions so can use native postgis upgarde and raster upgrade scripts. bump up version numbers 2011-12-14 10:44 robe * fix errors in documentation and comment scripts preveningt comments install from installing cleanly 2011-12-14 10:06 robe * Get rid of removed AddRasterTable,Column etc and replace with newer AddRasterConstraints/DropRasterConstraints 2011-12-14 07:59 strk * Add -v switch to postgis_restore.pl, tweak usage and debug output 2011-12-14 02:54 robe * Add stub section describing the raster_columns and raster_overview catalog views. Also fix typo. More coming. 2011-12-14 02:31 dustymugs * As per discussion in postgis-devel regarding Ubuntu 11.10, tweaked the order in which -lm is passed to LDFLAGS 2011-12-14 01:22 dustymugs * Refactored for less memory usage by aggresively flushing string buffers. 2011-12-13 23:29 strk * Disable triggers on the topology.layer table during restore, to allow population in random order (#1371) 2011-12-13 23:21 dustymugs * As per discussion in ticket #1373, convert raster constraints with floating point values (scalex, scaley, nodata values) into numeric(16,10) for comparison due to precision issues. 2011-12-13 22:39 robe * Add -Y copy switch 2011-12-13 21:58 robe * more examples -- put in a missing copy switch -- more switches to add. 2011-12-13 21:19 dustymugs * Fixed handling of output ranges going from high to low rather than the default of values going from low to high. Based upon message on postgis-users: http://postgis.refractions.net/pipermail/postgis-users/2011-December/031763.html 2011-12-13 20:05 dustymugs * Fixed incorrect entity using_raster_dataman. 2011-12-13 19:15 robe * break raste loder into its own data management chapter -- this chapter will expand in time. Get rid of how to use old raster2pgsql.py and replace with instructions on using raster2pgsql executable. 2011-12-13 18:19 dustymugs * Removal of now-unsupported AddRasterColumn, DropRasterColumn and DropRasterTable. 2011-12-13 18:16 dustymugs * Added DROP AGGREGATE for new ST_Union signature. Associated ticket is #1372. 2011-12-13 17:24 dustymugs * Removed PGXS and added explicit bin path variable. Works now in 8.4, 9.0 and 9.1. Related ticket is #1370. 2011-12-13 16:37 strk * Drop the old postgis_restore.pl and substitute it with the new one 2011-12-13 16:33 strk * Ignore more Makefiles 2011-12-13 16:33 strk * Strictness fixes, internal docs 2011-12-13 15:04 dustymugs * Revert change made in r8383. Install of loader doesn't work correctly without PGXS. Still need to figure out why LDFLAGS is getting eaten. Associated ticket is #1370. 2011-12-13 14:14 dustymugs * Removed PGXS as per ticket #1370. 2011-12-13 12:00 strk * Maintain the buffer-returns-areal invariant on empty input (#322) 2011-12-13 12:00 strk * tabs to spaces 2011-12-13 10:38 strk * Always output create ore replace view in upgrade scripts (#1097) 2011-12-13 09:59 strk * Allow function definitions to end with '$$ LANGUAGE' (#1365) 2011-12-13 09:59 strk * Use warnings 2011-12-13 09:58 strk * Encode dependency of upgrade script from the tool generating it 2011-12-13 09:16 strk * Add copyright headers, looking at SCM logs. Review welcome. 2011-12-13 05:23 dustymugs * Text format cleanup in loader/raster2pgsql.c. Fixed missing target in scripts/Makefile.in 2011-12-13 05:11 dustymugs * Added missing Makefile.in for raster/scripts 2011-12-13 05:06 dustymugs * Set svn:keywords for "$Id$" 2011-12-13 05:03 dustymugs * Added version information. Associated ticket is #1369. 2011-12-13 03:00 dustymugs * With commit of C-based raster2pgsql in r8369, removed dependency checks on Python, NumPy and GDAL with Python bindings. You will want to run autogen.sh with this commit. With this commit, the python-based raster2pgsql.py is now retired and unsupported. 2011-12-13 01:58 dustymugs * Additional check with warnings if PostgreSQL identifiers exceed the standard maximum length of 63 characters (64 counting NULL) 2011-12-12 23:12 dustymugs * Addition of C-based raster2pgsql in raster/loader. No changes have been made to remove the existing python-based raster2pgsql.py nor remove the python dependency in configure. Users will need to run autogen.sh after this revision. Associated ticket is #1297. 2011-12-12 22:42 strk * Skip constraints on raster_columns and raster_overviews 2011-12-12 22:38 robe * fix title 2011-12-12 22:22 strk * Rewrite spatial table constraints to add st_ prefix and use 0 rather than -1 for unknown 2011-12-12 21:45 strk * Filter OPERATOR at the ASCII dump phase to have finer control over which operators are really skipped (#1368) 2011-12-12 20:32 robe * another example of ST_Union 2011-12-12 20:23 robe * example of ST_Union 2011-12-12 16:10 strk * Drop lwgeom_gist and dependent items, including from dumps (#1362) 2011-12-12 15:45 strk * Do not restore metadata tables which now became views 2011-12-12 15:28 strk * Cleanup item list: drop duplicates, add some missings 2011-12-12 15:28 strk * Remove duplicated entries, add some missing ones 2011-12-12 12:17 robe * reduce ST_MakeEnvelope down to one function but make srid default to 0 (would be nice if we defined an @SRID_UNKNOWN in the sqldefine.h.in so I don't have to hard code this). Get rid of other variant. changing to use default parameters doesn't seem to require dropping the function so only had to drop one of them 2011-12-12 12:09 robe * oops took out a tag by accident 2011-12-12 12:03 robe * document the new ST_MakeEnvelope variant (pretend like its used default paramters already), will fix the code later 2011-12-12 02:20 robe * #1366 -- don't rely on state field being capitalized. 2011-12-11 20:23 robe * forgot about max /min 2011-12-11 20:21 robe * change generateor to display name for aggregates instead of id. For raster ids are different from name 2011-12-11 19:29 robe * preliminary documentation for raster version of ST_Union aggregate function 2011-12-11 15:45 robe * Revisions to ST_Union for raster: get rid of dependency on rastexpr (and get rid of type), put in regress tests, get rid of many ST_Union permutations and limit to st_union(rast), st_union(rast,p_expression), st_union(rast,band_num), st_union(rast,band_num,p_expression). Note for drop I'm not dropping those other versions in case people have installed them from scripts folder or are currently using them. just dropping the ones I'm replacing. 2011-12-11 02:42 robe * fix function name typo in geocode_intersection 2011-12-10 18:08 robe * minor edit 2011-12-10 18:03 robe * fix error in logic 2011-12-10 16:56 robe * missed a spot 2011-12-10 16:55 robe * describe the example a bit better for ST_AddBand multi-band example 2011-12-10 11:09 robe * #1361: fill in some more cases where hard/soft 2011-12-10 11:04 robe * #1361: make it clearer that a hard upgrade is required of everyone. 2011-12-10 03:12 robe * ST_AddBand version that takes an array of rasters 2011-12-10 01:20 dustymugs * Fixed calls to the wrong memory allocation function in rtpg_XXX utility functions. 2011-12-10 01:01 dustymugs * Code refactoring in rtpg_ utility functions for better memory usage and syntax cleanup in rt_api.* 2011-12-10 01:00 dustymugs * Fixed missing $ in AddOverviewConstraint() which was setting 7 as the overview factor instead of the value at $7. 2011-12-09 18:59 strk * Add all signatures found in a newly created PostGIS 2.0 database See #1360 2011-12-09 17:17 strk * Add box3d related objects to skip in the _restore scripts (#1359) 2011-12-09 16:27 strk * Restrict disabled code to the one really hurting See ticket #665 for more informations. The commit also renames the test suite to "surface". 2011-12-09 15:33 strk * gbox_float_round: don't roundup Z value if the box doesn't have one Fixes #1309 2011-12-09 14:37 strk * Add a public lwgeom_get_bbox function (#1324) 2011-12-09 14:37 strk * Don't let lwgeom_add_bbox syntetize a fake box for empty geometries Empty geometries have no box. Period. Update GML extent output for empty geometries to handle the special case by using empty tags. Regress test it. 2011-12-09 13:50 strk * Fix segfault in GML3 extent output (#1323) Add support for srsDimension in GML3 extent output. Add unit level comprensive regression testing. 2011-12-09 12:25 strk * Allow calling ST_MakeEnvelope w/out a srid (#1339) 2011-12-09 11:18 strk * Add a gbox_overlaps_2d function, use when appropriate (#1357) 2011-12-08 22:16 pramsey * Guard against NaN values in coordinates passing into GEOS (#627) 2011-12-08 21:57 pramsey * Check that NaN coordinate values find their way into bboxes, they do, NaN is bigger than Inf, apparently. 2011-12-08 21:26 pramsey * Test for bbox calculations when there's an infinite coordinate. 2011-12-08 20:05 dustymugs * Return use of GDAL "natural" blocking removed in r8313 and refactor pointer handling. 2011-12-08 19:51 pramsey * Remove box3d_extent hack 2011-12-08 17:54 pramsey * Make the ST_Equals test insensitive to minor box differences. 2011-12-08 14:44 robe * Add Jose and Even to credits 2011-12-08 13:35 strk * Add a note about ST_Estimated_Extent on empty or non-analyzed tables (#877) 2011-12-08 11:29 strk * Have ST_Estimated_Extent return NULL when no stats are found for a table. No stats means empty table or no run of analyze. Warn about that. These Fixes bug #877. Includes regress test. 2011-12-08 11:28 strk * Hush VACUUM and ANALYZE backend feedback while running tests 2011-12-08 08:07 strk * topology.AddToSearchPath: quote database identifier. Thanks to Jose Carlos Martinez Llario <jomarlla@cgf.upv.es> 2011-12-07 20:46 dustymugs * Added rt_raster_set_pixel_line for use when setting values for sequential pixels. Should be faster than repeated calls to rt_raster_set_pixel. 2011-12-07 15:29 dustymugs * Refactored the GDALRasterIO part of rt_raster_from_gdal_dataset to use scanlines instead of "natural" blocks, which dramatically simplifies the code and makes it easier to maintain. 2011-12-07 06:17 robe * alphabetize and update tester credits 2011-12-07 03:41 robe * update license to provide detail about documentation license and copyright of data etc. 2011-12-07 01:15 dustymugs * Fixed regression issue with rt_raster_from_gdal_dataset by explicitly setting the valid block sizes passed into GDALRasterIO. Probably related to the changes made in r8309 2011-12-06 16:48 dustymugs * Removed attempt to duplicate entire band in rt_raster_from_gdal_dataset 2011-12-06 14:40 robe * put some obsolete notes in existing management functions. Now that raster_columns is a view no longer need to use management functions to drop or add raster columns or tables. Will document the new addconstraints etc. taht replaces much of these soon. 2011-12-06 12:16 strk * Add copyright header. Date and attribution looked up by SCM history. Verified by my own memory (I wrote the initial vesion of that file) 2011-12-06 06:06 dustymugs * Resolved a bunch of memory issues related to use of SPI that have been bugging me for a while. Tested successfully in Linux 32 and 64-bit and OSX 64-bit. 2011-12-05 18:58 dustymugs * As per discussions and ticket #1319, raster_columns and raster_overviews are now constraint-based views. AddRasterColumn, DropRasterColumn and DropRasterTable are now deprecated in favor of AddRasterConstraints and DropRasterConstraints. Additional constraints are now available for enforcing the consistency of the rasters in a table. 2011-12-05 18:36 dustymugs * Removed division by bin-width for when bin-widths are specified in ST_Histogram 2011-12-05 02:06 dustymugs * Correctly free raster memory when handling NULL rasters. Associated ticket is #1349 2011-12-03 08:29 robe * #1343: get rid of geomvalxy and change ST_PixelAsPolygons to use default args and do without geomvalxy 2011-12-03 07:24 robe * #1338 - document ST_PixelWidth/Height 2011-12-03 06:54 dustymugs * Removed VARIADIC from ST_BandMetadata. Associated ticket is #1343. 2011-12-02 17:44 robe * #1346: fix misuse of quote_literal causing topology, topology, topology, topology 2011-12-02 17:28 strk * Encode dependency of topology.sql on ManageHelper.sql 2011-12-02 15:43 robe * more revisions to cross streets logic -- don't rely on start point working with multilinestrings. change tfid to be unique index on faces. 2011-12-02 15:22 dustymugs * Added cleanup statements for bandmetatype type and change function signature for st_bandmetadata. 2011-12-02 15:13 dustymugs * Removed the type bandmetadata as per #1343. 2011-12-02 08:07 robe * move geocode_intersection.sql to user api section since it is documented. 2011-12-02 06:27 robe * try to make emphasis bold by putting in a role='bold' 2011-12-01 20:41 robe * replace ~= with ST_OrderingEquals (now that we got rid of recheck the older ~= no longer is a truish geometry equality operator 2011-12-01 20:37 robe * emphasize approximate in KNN operators to reduce the chance of any misunderstandings 2011-12-01 19:06 robe * make compatible with postgresql 8.4, more speed improvements 2011-12-01 17:52 robe * missed a spot about occasions where point distance is not same as <-> 2011-12-01 17:38 robe * try to clarify accuracy etc. of <#> and <-> 2011-12-01 16:14 pracine * Ticket 1342. Integrate ST_PixelAsPolygons into rtpostgis.sql 2011-12-01 16:07 pracine * Return null when band number does not exist. 2011-12-01 16:06 pracine * Removed ST_MinPossibleVal defined in another script 2011-12-01 16:05 pracine * Added doc, more test and return null when band number does not exist. 2011-12-01 15:52 pracine * Ticket 1342. Integrate ST_Clip script into rtpostgis.sql 2011-12-01 15:15 pracine * Ticket #1340. Integrate ST_Union into rtpostgis.sql 2011-12-01 15:11 pracine * Replaced AsBinary with ST_AsBinary in the test section 2011-12-01 13:32 robe * #1337 clarify what sql is good for and get rid of some other obsolete syntax (this really needs to be read with a fine-tooth comb). The amount of obsolete info in this chapter is mesmerizing 2011-12-01 08:36 robe * #1333 geocode_intersections: would help to actually include the function to. 2011-12-01 08:28 robe * #1333 geocode intersections 2011-12-01 04:29 dzwarg * Added neighborhood hillshade on top of ST_MapAlgebraFctNgb. Part of #1318 2011-12-01 02:23 dustymugs * Tweaked ST_BandMetadata so that calling the function with an empty array returns all metadata of all bands. Example: ST_BandMetadata(rast, VARIADIC ARRAY[]::int[]) 2011-12-01 01:11 pracine * Copied from ST_MapAlgebra.sql 2011-12-01 01:10 pracine * Copied from ST_Union 2011-12-01 01:09 pracine * Some cleaning before inclusion in rtpostgis.sql Removed ST_MultiBandMapAlgebra and ST_HasNoBand 2011-12-01 01:07 pracine * Return the last band when the provided band number does not exist. 2011-12-01 01:07 pracine * Added some variants and tests 2011-11-30 22:42 pracine * plpgsql implementation for st_clip.sql(raster, geom) 2011-11-30 22:41 pracine * Added the id of the polygon in the example 2011-11-30 22:34 dzwarg * Added ST_Aspect map algebra neighborhood shortcut function. #1318 2011-11-30 21:44 dzwarg * Added ST_Slope map algebra neighborhood shortcut function. 2011-11-30 20:35 dustymugs * Fixed ST_AsRaster to duplicate exactly the attributes of a reference raster. Associated ticket is #1336. 2011-11-30 19:26 dzwarg * Added helper user functions for common MapAlgebra operations: Min, Max, Mean, Range. #1318 2011-11-30 16:45 dzwarg * Updated tests for 'dog-ate-my-homework' test. Expanded comments and elaborated on complex conditionals in ST_MapAlgebraFctNgb 2011-11-30 14:51 dzwarg * Added additional tests for ST_MapAlgebraFctNgb, changed string compare on nodatamode to != 2011-11-29 23:25 dustymugs * In preparation of turning the table raster_columns into a view, refactored ST_BandMetadata to have the bandnum parameter be variadic. Fleshed out regression tests for ST_BandMetadata. 2011-11-29 20:30 strk * Ignore more generated files 2011-11-29 20:22 pramsey * ST_AddPoint returns incorrect result on Linux (#1335) from roualt 2011-11-29 16:57 pracine * Replaced the summarystatsstate type with the summarystats type to avoid defining a new type. 2011-11-29 16:34 pracine * Changed the note at the beginning of the file when the function is now implemented in C. 2011-11-29 16:20 pracine * Some more useful functions 2011-11-29 16:15 pracine * Added some plpgsql functions 2011-11-29 08:49 robe * Fix for #1310 2011-11-28 13:36 robe * Note: libxml2 dependency of ST_Geom*ML functions and ref back to configuration section. Also put in missing --with-xml2config flag in installion_configuration section 2011-11-26 21:17 robe * put a firmer sorta date in the sand 2011-11-26 21:16 robe * more credit cleanup -- add people I missed, fix some minor typos 2011-11-26 06:07 pramsey * ST_AsSVG kills whole postgres server when fails (#1028) 2011-11-26 05:25 robe * update credits to include hard-core testers 2011-11-26 05:04 pramsey * Revert per #1246 2011-11-25 11:54 robe * remove more obsolete protos in docs and up extension alpha version numbers 2011-11-25 11:49 robe * remove more protos that have been removed and replaced with default args 2011-11-24 21:13 strk * Move the 'CREATE SCHEMA' query out of first column anchorage (#1325) Makes the upgrade script generator less confused... 2011-11-24 19:17 pramsey * Fix operator mis-referencing nd function for 2d op. 2011-11-24 16:01 strk * Override GeometryType and ST_GeometryType for TopoGeometry (#1289) Includes regression testing. NOTE: we'll always advertise MULTI as a safest bet 2011-11-24 16:01 strk * Shake legacy testcase a bit to avoid to mix population with queries 2011-11-24 03:44 robe * provide examples for ST_GeomFromGeoJSON now that I can compile it :) 2011-11-24 03:23 robe * update to include links to wiki for extra compilation help and pre-built binaries. 2011-11-24 03:14 robe * Amend installation instructions to include json-dir configure option 2011-11-24 02:05 robe * minor updates to bios 2011-11-24 01:58 robe * update news / credits for ST_GeomFromGeoJSON 2011-11-23 17:28 strk * Const-correct GML signatures 2011-11-23 17:26 robe * change + to | to make strk happy 2011-11-23 17:24 robe * update ST_AsGML with examples and include envelope bits option 2011-11-23 15:27 robe * fix typo in GML description noted by strk 2011-11-23 02:17 robe * correct signatures of some functions changed to use more default args 2011-11-22 19:01 dustymugs * Prefixed internal C utility functions with rtpg_. This keeps the coding style inline with that for postgis. 2011-11-22 18:10 dustymugs * Corrected incorrect drop function statement. 2011-11-22 17:58 dustymugs * More SQL function cleanup with use of default parameter values. 2011-11-22 09:26 robe * up the alpha numbers 2011-11-22 09:21 robe * missed a spot 2011-11-22 09:05 robe * correct documentation to get rid of protos eradicated in r8218 (so extensions installs) 2011-11-22 01:06 dustymugs * Additional function cleanup by making use of DEFAULT parameter values 2011-11-21 20:09 dustymugs * Fixed expression parsing in RASTER_mapAlgebra2. Evidently, the count parameter of replace() is an input/output parameter. Associated ticket is #1317. 2011-11-21 19:55 dustymugs * Fixed behavior of one raster not having specified band and being sampled. Associated ticket is #1316. 2011-11-21 19:18 dustymugs * Fixed extent bug for UNION in rt_raster_from_two_rasters 2011-11-21 19:18 robe * description corrections to ST_MapAlgebraNgbFct based on input from dzwarg 2011-11-21 17:37 pracine * Many fix following the C implementation of the two raster version of ST_MapAlgebra. 2011-11-21 16:32 strk * Add a vertex-snap-tolerance parameter to ptarray_substring This is aimed at improving robustness for ST_Split, which now uses an hard-coded tolerance of 1e-14 (see #1311) 2011-11-21 16:15 robe * revise explanation based on trying to read the code to figure out what nodatamode in theory should be doing 2011-11-21 16:03 strk * Numerate tests for line_substring 2011-11-21 15:59 pracine * -Fix cut and paste error 2011-11-21 15:37 robe * get rid of extra para tag 2011-11-21 15:32 robe * ST_MapAlgebraFctNgb:add in the nodatamode to ST_ (forgot it last time). I still have no clue what this parameter does -- doesn't seem to do anything for me like get rid of the border. Add in links to where to get example raster used. fix some typos 2011-11-21 14:59 strk * Add testcase for #1311 (lwgeom_split). Also fix existing testcase (wasn't really testing it). 2011-11-21 14:59 strk * Fix memory leak in lwgeom_split 2011-11-21 12:10 strk * Hush warning about missing prototype. This is really a commit intended to amend the previous for the sake of pointing to the correct bug being closed by it: #1273 (not #1023 which is more complex) 2011-11-21 12:03 strk * Have gserialized_get_gbox_p always return a round-to-float box That is, even when computing the box from scratch. This makes the box always float-oriented, consistently between cached and computed boxes. Closes (hopefully forever) bug #1023. Includes testcase otherwise failing. 2011-11-21 09:33 strk * Add testcase for ticket #1302 (now passes) 2011-11-21 08:33 strk * Update expected error messages not to include the "topology" namespace (now that it's part of the search_path). 2011-11-21 08:23 strk * Rename "LibGeom Suite" to simply "libgeom", for easy of use 2011-11-21 08:21 strk * Surrender to evidence of the narrow ring tested being clockwise 2011-11-21 08:08 strk * Improve robustness of ptarray_isccw (see #1302) 2011-11-21 07:48 robe * Logic to add topology to database search path on install or upgrade 2011-11-21 04:02 robe * FIX upgrade script - complement to r8186 - drop all mapalgebra functions before upgrade because for pg9.0+ CREATE OR REPLACE FUNCTION fails if argument names have changed. Also update docs to reflect new naming of userfunction to onerasteruderfunc,tworasteruserfunc,onerasternguserfunc 2011-11-20 21:37 robe * fix some ST_MapAlgebra userfunc arg names to agree with code. Still ng ones to go and drop fix. 2011-11-20 21:35 strk * Add another test for ptarray_isccw, which incredibly seems to disagree with the same check done when the same ring occurs in a polygon 2011-11-20 21:19 strk * Do not memcpy to self in ptarray_reverse (see #1302) 2011-11-20 21:19 strk * Better indent for comparing obtained/expected 2011-11-20 20:51 strk * Fix 'clean' rule under loader to drop stuff under .libs 2011-11-20 20:51 strk * Add test for lwgeom_force_clockwise (see #1302) 2011-11-19 17:28 strk * Add test for ptarray_isccw (see #1302) 2011-11-18 23:47 dustymugs * Addition of function rt_util_gdal_datatype_to_pixtype to complement rt_util_pixtype_to_gdal_datatype. 2011-11-18 22:38 dzwarg * Documented ST_Rotation and ST_SetRotation. 2011-11-18 21:41 dustymugs * Update parameter names for regprocedure data types 2011-11-18 21:28 dzwarg * Nodata mode defaults to 'ignore' if it is NULL. Added tests for out of range neighborhoods. 2011-11-18 20:56 dzwarg * Non-functional change. Updated author email address for dzwarg. 2011-11-18 20:53 dzwarg * Refactored ST_MapAlgebraFctNgb to cache userfunction lookup, and accept NULL input and output values. 2011-11-18 20:15 dzwarg * Refactored ST_MapAlgebraFct to cache userfunction lookup, and accept NULL input and output values. 2011-11-18 18:30 dustymugs * Added a flag --with-raster-dblwarning so as to provide the software builder the option of enabling all the value truncation/clamping/conversion warnings, which can be many. The new default is to suppress those warnings. All appropriate regression tests have been updated. Associated ticket is #1307 2011-11-18 15:53 dzwarg * Enabled all tests on ST_MapAlgebraFctNgb. 2011-11-18 14:53 dzwarg * Fixed debug problem in #1308 2011-11-18 13:59 robe * fix minor typo 2011-11-18 13:58 robe * document new ST_GeomFromGeoJSON function. Will provide examples later once resolved my JSON-C compilation issues 2011-11-18 13:24 robe * minor corrections 2011-11-18 03:36 robe * increment alpha release number to allow upgrade with extensions 2011-11-18 03:08 robe * fix code comment 2011-11-18 02:54 robe * forgot pixeltype in ngb arg list 2011-11-18 02:48 robe * fix typo in linkends 2011-11-18 02:32 robe * put in missing spaces 2011-11-18 02:31 robe * ST_MapAlgebraFctNgb (and put in immuatable for other st_mapalgebras) 2011-11-18 01:15 robe * #1306: document rescale and provide examples, fix st_resample args. (still 2 more to go in this ticket) 2011-11-18 00:29 pramsey * Move library link to appropriate place. 2011-11-18 00:17 pramsey * Add ST_GeomFromGeoJSON (#376) 2011-11-18 00:17 robe * correct ST_Resample arguments to agree with implementation. Still need to fill in descriptions of what all params mean 2011-11-17 22:48 dustymugs * Fix the 8.4 error only described in #1296. 2011-11-17 15:04 dustymugs * Additional corrections and cleanup for ST_BandNoDataValue 2011-11-17 14:57 dustymugs * Fixed a bunch of other nodataval datatype issues. 2011-11-17 14:49 dustymugs * Fixed invalid handling of nodatavalue in ST_BandMetaData(). Issue arises due to C backend using Float8GetDatum while SQL frontend using real datatype. 2011-11-17 04:25 robe * put in some spacing 2011-11-17 01:44 robe * more event ideas 2011-11-16 20:39 robe * put in missing svn:keywords fix formatting of cards so easier to break on pages 2011-11-16 17:38 robe * Post GIS day commemorative cards generator 2011-11-16 03:41 robe * logic to create a an topology_upgrade_20_minor.sql 2011-11-15 18:15 dustymugs * Removed hardcoded SRID of 0 and replaced with ST_SRID('Point(0 0)'::geometry) 2011-11-15 00:48 robe * put in missing t in raster load examples 2011-11-14 23:21 dzwarg * Added single version of map algebra that operates on neighborhoods. 2011-11-14 21:40 dustymugs * Added ability to specify raster width and height to ST_Resample. Associated ticket is #1267 2011-11-14 08:15 robe * revise extension upgrade builder to use new remove functions from extension before attemtpting to readd them. Cool I can now upgrade my 2.0.0a3 to 2.0.0a.6 without any complaints. 2011-11-14 07:36 robe * minor corrections to extension helper, create extension uninstall, incorporate in topology extension upgrade script 2011-11-14 05:44 robe * helper functions for creating upgrade extension script. So far helper so I can sneakingly drop functions from an existing extension so I can reinstall them if a create or replace will not be sufficient.(so I avoid the dreaded error -- can't drop function /aggregate because its part of an extension.) 2011-11-13 03:45 robe * #1288: correct some obsolete advice about how to create indexes and register a geometry column. 2011-11-12 18:20 strk * Do not consider nodes with the same bounding box as being equal. Fixes bug #1284. Includes regression test. 2011-11-12 15:12 dustymugs * Added checks to make sure user-function is valid. Also added check for volatility of user-function with notice if function is volatile. 2011-11-12 13:14 robe * Fix typo 2011-11-12 05:28 robe * escape html entitities in program listing of ST_MApAlgebrafct 2 band version 2011-11-12 04:27 robe * add examples and fix arg list 2011-11-12 00:01 dustymugs * Removed third variant as it conflicts with the second variant of 2-raster ST_MapAlgebraFct Related ticket is #1283 2011-11-11 23:07 robe * begin documentation of 2 band ST_MapAlgebraFct -- waiting for dustymugs to fix signature before providing examples 2011-11-11 20:34 robe * fix arg list in ST_MapAlgebraExpr single band version (nodatavalexpr got relaplced with nodataval which is now double precision instead of text) 2011-11-11 19:31 dzwarg * Added more test to plpgsql ST_MapAlgebraFctNgb prototype. 2011-11-11 18:50 dzwarg * Added pl/pgsql prototype of the neighborhood map algebra function. 2011-11-11 15:45 dustymugs * Removed commented-out stubs for nonexistant RASTER_mapAlgebra2Fct 2011-11-11 15:41 dustymugs * Add ST_MapAlgebraFct for 2 rasters. This is the sibling of 2-raster ST_MapAlgebraExpr. Renamed RASTER_mapAlgebra2Expr to RASTER_mapAlgebra2 as both 2-raster ST_MapAlgebraExpr and ST_MapAlgebraFct call the same function. Associated ticket is #1281. 2011-11-11 08:40 robe * put comment about expression 2011-11-10 20:59 dzwarg * Updated documentation for all variants of ST_MapAlgebraFct. 2011-11-10 11:10 strk * Make sure to "round-to-float" boxes read from serialized, no matter if there was or not a cache. Fixes #1273. Includes regress testing. Note: would be worth to also test the 2-points line case (I didn't in this specific commit, but the patch should fix that as well). 2011-11-10 00:18 robe * add missing references to other functions used 2011-11-10 00:15 robe * Add example of overlaying single rasters on same canvas 2011-11-10 00:02 dustymugs * Signatures changed for ST_MapAlgebraExpr where nodatavaluerepl (text) is now nodataval (double precision) 2011-11-09 23:52 dustymugs * Removed all remaining memory leaks from testapi.c 2011-11-09 23:12 dustymugs * Rolled back attempt to clean up memory handling. We'll just live with this until testapi.c is replaced by cunit tests for raster. 2011-11-09 23:00 dustymugs * Separated the output raster's extent calculation from RASTER_mapAlgebra2Expr() in rt_pg.c to rt_raster_from_two_rasters() in rt_api.c. Added test of rt_raster_from_two_rasters() in testapi.c 2011-11-09 17:15 robe * fix typos, provide description for nodatanodataval (pierre / bborie /dzwarg -- please check my definitions to make sure they are right) 2011-11-09 15:35 dustymugs * Fixed bug where an expression doesn't contain a placeholder (either rast1 or rast2). Associated ticket is #1276. 2011-11-09 05:02 robe * fix minor typos 2011-11-09 03:52 robe * increment version 2011-11-09 03:45 robe * break out what all the different arguments are in 2 map algebra. 2011-11-09 02:55 robe * fix some typos, revise example demonstrating difference between intersection and union. include pictures. 2011-11-09 01:05 robe * Add ST_BandMetaData to drop target. Upgrade can't install the new version otherwise since the output parameter data types changed. 2011-11-08 23:18 dustymugs * Fix floating point issues in rt_raster_geopoint_to_cell in addition to other minor changes. 2011-11-08 21:34 dustymugs * Bug fix for evaluating remainder when remainder is infinitely close to 1. Basically, the check wasn't added to a block of code those similar blocks of code had the check. 2011-11-08 20:32 robe * ST_MapAlgebraExpr - 2 band version - incorporate Pierre's corrections / additions 2011-11-08 18:41 robe * document ST_MapAlgebraExpr (2 raster band version). Need to clean up the example also figure out how I managed to crash my server with this. 2011-11-08 17:47 pramsey * Do the "are boxes different?" test in ST_Equals using a tolerance instead of exact comparisons. 2011-11-08 10:23 strk * Re-fix robustness issue on 32bit system (seg is 0-based, npoints is 1-based but segments is npoints-1) 2011-11-08 08:55 strk * Give unique names to linearref tests 2011-11-08 08:55 strk * Add test for bug #1270 2011-11-08 08:51 strk * Fix st_line_locate_point check for "last point" (#1271) 2011-11-08 05:27 dustymugs * Renamed ST_MapAlgebra2Expr to ST_MapAlgebra after concensus with Pierre and Regina. 2011-11-08 00:00 dustymugs * Replaced ST_MapAlgebraExpr's "nodatavalueexpr" parameter with "nodataval" and datatype changed from text to double precision. This makes this parameter the same as "nodatanodataval" found in ST_MapAlgebra2Expr. Associated ticket is #866 2011-11-07 21:17 dustymugs * Rephrased a sentence or two in ST_Resample. Might not be the best. 2011-11-07 21:07 dustymugs * Addition of 2-raster map algebra function ST_MapAlgebra2Expr. Next is ST_MapAlgebra2Fct. Ticket is #1268. 2011-11-07 17:01 strk * Enhance robustness of ptarray_locate_point, fixing bug #1269. Includes regression testcase. 2011-11-06 20:26 dustymugs * Following the cleanup in r8104, additional cleanup to remove POSTGIS_GDAL_VERSION 2011-11-06 20:17 strk * Double-check line splitting to avoid returning empty components It happened on my 32bit system based on presence or absence of an lwnotice call, probably a compiler bug... 2011-11-06 19:39 strk * Don't change SQL at compile time. The code is safe enough. 2011-11-06 19:30 dustymugs * Renamed output parameter "hasnodatavalue" to "hasnodata" in ST_BandMetadata(). This makes the parameter name consistent with all other use of "hasnodata" and the docs for ST_BandMetadata. 2011-11-06 04:56 dustymugs * Fixed the bug described in #1263. Also fixed additional code that has the same problem. Additional syntax cleaning and comments updated. Fixed the problem with "make check" running test/core twice. 2011-11-05 22:40 dustymugs * Reverted r8100 due to regression failures. Instead, I added an exception check to catch for when the client isn't able to find postgis_gdal_version in the search path. Associated ticket is #1266 2011-11-05 14:28 dustymugs * Moved postgis_gdal_version() from rtpostgis.sql.in.c to postgis.sql.in.c. Added additional sed command to postgis/Makefile.in to handle RASTER_MODULE_PATH so as to continue using the underlyiing RASTER_gdal_version(). Associated ticket is #1266. 2011-11-05 03:50 robe * Fix output of ST_Node -- evidentally we haven't yet instituted the change to output MULTILINESTRINGZ etc in WKT in ST_AsText nor ST_AsEWKT 2011-11-04 22:06 robe * increment to 2.0.0a4 2011-11-04 22:05 robe * increment to 2.0.0a4 2011-11-04 21:43 robe * alphabatize reference_processing section. Change postgis cheatsheet to output to 2 columns. Minor adjusts to tiger cheatsheet 2011-11-04 20:46 robe * #1206: put in example for ST_Node. Can't test yet since my geos is recompiling. 2011-11-04 18:48 strk * Document ST_Node (#1206) 2011-11-04 18:24 strk * Add SQL-level tests for ST_Node (#1206) 2011-11-04 18:17 strk * Fix clean rule to get rid of .o files 2011-11-04 14:25 strk * Expose ST_Node at SQL level (#1206) 2011-11-04 12:22 robe * ability to turn off example generation, and change to turn off by default 2011-11-04 08:15 strk * Fix builds againts GEOS < 3.3 2011-11-04 06:45 strk * Add an lwgeom_node function in liblwgeom (see #1206) Includes testcase 2011-11-04 00:57 robe * Add enhanced note for AddGeometryColumn 2011-11-03 17:28 strk * Add lwcollection_reserve internal function 2011-11-03 17:09 strk * Pass GEOS version to unit tests, skip test for SPLIT when building against older geos. 2011-11-03 16:20 strk * Add an line-by-point internal split function taking an output vector. Regress test the new function. 2011-11-02 16:53 strk * Add test for ST_Summary 2011-11-02 13:48 robe * change order of populate_geometry_columns drop all one depends on oid one 2011-11-02 13:47 robe * drop populate_geometry_columns(). This is needed because got replaced by populate_geometry_columns(use_typmod=true). So if both exist get function is not unique error 2011-11-02 13:42 robe * #1256 drop memgeomunion so geomunion can be dropped 2011-11-02 06:50 robe * more formatting experiments 2011-11-02 04:28 pramsey * Composite geometries end up with nested BBOX caches (#1254) 2011-11-01 18:17 dustymugs * Based upon mailing list discussion, changed call to ST_AsRaster in _st_intersects(raster, geometry) to _st_asraster. 2011-11-01 17:59 pramsey * Make st_summary at least return consistent results (#1254) 2011-11-01 17:11 robe * document ST_SameAlignment 2011-11-01 04:41 robe * revise all to output arg list and conditionally show examples and descriptions 2011-11-01 03:06 robe * xsl to generate postgis cheatsheet, add make cheatsheet to gnumake, better outptuting of functions with different protos. 2011-10-31 22:26 strk * ST_CreateTopoGeo: speedup merged lines splitting [RT-SIGTA] 2011-10-31 21:18 pramsey * Increase accuracy of area calculation (#810) 2011-10-31 20:59 pramsey * Remove redundant prototype 2011-10-31 20:55 pramsey * Move gserialized_get_gbox_p to liblwgeom and gserialized_read_gbox_p to liblwgeom_internal 2011-10-31 20:23 pramsey * Rename pglwgeom_box2d_p 2011-10-31 20:02 robe * add raster cheat sheet generator -- and a make cheatsheets command to generate all. 2011-10-31 19:20 robe * get rid of word "Functions" in section headers 2011-10-31 13:03 strk * ST_CreateTopoGeo: do not drop input nodes of degree 2 (#1258) [RT-SIGTA] 2011-10-31 12:45 strk * Fix generation of topology in presence of edges with same bounding box (#1261). Includes regress test [RT-SIGTA] 2011-10-31 12:22 robe * fix another erroneous statement - its ValidateTopology not ST_ValidateTopology 2011-10-31 11:58 robe * get rid of word feature in description of AddTopGeometryColumn. Table can be any kind of table. 2011-10-31 05:32 robe * more cleanup -- only print example sections if they have examples 2011-10-31 03:14 robe * build cheat sheet for tiger geocoder. This one looks better laid out than topology one so have to revisit topology 2011-10-31 02:11 robe * logic to flag new functions and allow tags in listings to be displayed 2011-10-30 23:10 robe * get rid of unused styles 2011-10-30 21:47 strk * AddEdgeModFace, AddEdgeNewFaces: simplify calls to AddEdge [RT-SIGTA] 2011-10-30 20:57 pramsey * Remove some duplicate headers (much of this to be done...) 2011-10-30 20:45 pramsey * Remove SERIALIZED_FORM 2011-10-30 20:40 pramsey * Remove pglwgeom_serialize 2011-10-30 19:15 strk * Add some hints about the visited table for topology.AsGML 2011-10-30 18:49 robe * logic to build html cheatsheet -- some logic still needed to extract the examples correctly. 2011-10-30 15:36 robe * get rid of extra fluff words in section titles 2011-10-29 20:54 pramsey * Fix regression 2011-10-29 20:35 pramsey * Remove pglwgeom_ndims 2011-10-29 20:07 pramsey * Remove pglwgeom_size 2011-10-29 20:04 pramsey * Remove pglwgeom_get_zm 2011-10-29 01:05 pramsey * Fix odd formating in optimistic_overlap 2011-10-29 01:01 pramsey * Remove pglwgeom_is_empty 2011-10-29 01:00 pramsey * Remove pglwgeom_drop_bbox 2011-10-29 00:58 pramsey * Remove pglwgeom_has_bbox, pglwgeom_has_z, pglwgeom_has_m 2011-10-29 00:58 pramsey * Remove pglwgeom_has_bbox, pglwgeom_has_z, pglwgeom_has_m 2011-10-29 00:50 pramsey * Remove pglwgeom_get_type 2011-10-28 22:06 pramsey * remove pglwgeom_get_srid, pglwgeom_set_srid 2011-10-28 21:57 pramsey * Remove pglwgeom_deserialize 2011-10-28 20:54 pramsey * Commit remaining removals of BOX2DFLOAT4 and PG_LWGEOM 2011-10-28 20:46 pramsey * Remove BOX2DFLOAT4->GBOX and PG_LWGEOM->GSERIALIZED #defines 2011-10-28 18:21 pramsey * Fix call to geometry_type_from_string to use right type. 2011-10-28 18:09 pramsey * Move clone support functions into internal 2011-10-28 18:01 pramsey * Replace min/max/abs macros with FP_* variants in liblwgeom/ and with pgsql variants in postgis/ 2011-10-28 17:52 pramsey * Remove orphaned box3d and box2dfloat4 utility functions 2011-10-28 17:44 pramsey * Remove orphaned _compute_box3d functions 2011-10-28 17:35 pramsey * Remove box2df_from_gbox and gbox_from_box2df 2011-10-28 17:01 pramsey * Ensure calls to lwgeom->type use type of uint8_t 2011-10-28 14:51 pramsey * Remove old profiling code 2011-10-27 23:02 pramsey * Remove old 8-bit type utility functions. 2011-10-27 22:48 pramsey * Remove LWGEOM_Min* and LWGEOM_Max* 2011-10-27 21:03 pramsey * Remove serialized_form functions: lwpoint_serialize_size lwpoint_serialize lwpoint_serialize_buf lwline_serialize_size lwline_serialize lwline_serialize_buf lwpoly_serialize_size lwpoly_serialize lwpoly_serialize_buf lwtriangle_serialize_size lwtriangle_serialize lwtriangle_serialize_buf lwcircstring_serialize_size lwcircstring_serialize lwcircstring_serialize_buf lwcollection_serialize_size lwcollection_serialize_buf lwgeom_constructempty lwgeom_constructempty_buf lwgeom_empty_length lwgeom_serialize_size lwgeom_serialize lwgeom_serialized_construct lwgeom_getsrid 2011-10-27 20:52 pramsey * Remove printBYTES 2011-10-27 20:51 pramsey * Reorder header file a little. 2011-10-27 20:14 pramsey * Complete removal of LWGEOM_INSPECTED 2011-10-27 20:07 pramsey * Remove LWGEOM_INSPECTED 2011-10-27 20:05 pramsey * Remove old deserialze and inspected functions. serialized_lwgeom_size lwgeom_size_subgeom lwgeom_size_point lwgeom_size_line lwgeom_size_circstring lwgeom_size_poly lwgeom_size_triangle lwgeom_deserialize lwpoint_deserialize lwline_deserialize lwpoly_deserialize lwtriangle_deserialize lwcircstring_deserialize lwmpoint_deserialize lwmline_deserialize lwmpoly_deserialize lwcollection_deserialize lwcompound_deserialize lwcurvepoly_deserialize lwmcurve_deserialize lwmsurface_deserialize lwpsurface_deserialize lwtin_deserialize printMULTI lwgeom_inspect lwgeom_getpoint_inspected lwgeom_getpoint lwgeom_getline_inspected lwgeom_getline lwgeom_getpoly lwgeom_getpoly_inspected lwgeom_gettriangle lwgeom_gettriangle_inspected lwgeom_getcircstring_inspected lwgeom_getgeom_inspected lwgeom_getsubgeometry lwgeom_getsubgeometry_inspected lwgeom_getsubtype lwgeom_getsubtype_inspected lwgeom_getnumgeometries lwgeom_getnumgeometries_inspected 2011-10-27 19:23 pramsey * Remove compute_serialized_box3d 2011-10-27 19:10 pramsey * Remove duplicate and unused is_worth_caching_serialized_bbox and is_worth_caching_lwgeom_bbox 2011-10-27 18:44 pramsey * Add ignores for new built files 2011-10-27 14:35 strk * Wrap lines within 80 columns 2011-10-27 14:09 dustymugs * Added rtpostgis_drop.sql, rtpostgis_drop.sql.in, rtpostgis_upgrade.sql and rtpostgis_upgrade_20_minor.sql to svn:ignore 2011-10-27 14:08 dustymugs * Refactored rt_band_get_min_value() to call new function rt_pixtype_get_min_value(). Addition of function rt_util_extent_type(). 2011-10-26 23:47 pramsey * Remove PG_LWGEOM_construct 2011-10-26 23:21 pramsey * Remove orphaned pglwgeom function pglwgeom_compute_serialized_box3d 2011-10-26 23:07 pramsey * Remove non-gserialized portions of utility functions. 2011-10-26 22:58 pramsey * Remove more orphaned box2d support functions 2011-10-26 22:36 pramsey * Remove *_compute_box2d* functions that are now orphans. 2011-10-25 21:19 pramsey * Remove gserialized_on conditionals. Only type defines remain to be cleared out. 2011-10-25 21:05 pramsey * Remove old box2dfloat4 in favor of gbox. 2011-10-25 20:31 strk * Add own copyright on the file. See http://postgis.refractions.net/pipermail/postgis-devel/2004-March/thread.html for historical mail exchanges about it :) 2011-10-25 20:02 pramsey * Remove old serialized_form index selectivity code. 2011-10-21 21:49 strk * Explode the topology sections to keep primitive (sql/mm) topology management more separate from higher (TopoGeometry) management. 2011-10-21 21:42 dustymugs * Added rt_raster_set_geotransform_matrix() to provide quick setting of a raster's geotransform based upon the matrix 2011-10-21 19:10 dustymugs * Corrected rt_raster_same_alignment() and RASTER_sameAlignment() to behave as an end-user would expect it to. So intead of errors when parameters don't match, return false. 2011-10-21 18:11 dustymugs * Changed rt_raster_has_no_band to use 0-based band index instead of 1-based. Removed function prototype ST_HasNoData(raster) as the other prototype ST_HasNoData(raster, nband) now uses the default value of 1 for nband. 2011-10-21 14:53 dustymugs * Changed those functions that is 1-based for band index to 0-based in rt_core. This leaves only rt_raster_has_no_band, which may have other issues as well. Associated ticket is #754 2011-10-21 12:01 robe * put in logic to st_setsrid to wgs84 before doing st_distance_sphere in case Paul decides he doesn't want to fix the regression issue noted in #1243 2011-10-20 22:24 dustymugs * Renamed RASTER_samealignment() to RASTER_sameAlignment() and corrected C++ style comments with C comments 2011-10-20 22:07 dustymugs * Removed use of PG_DETOAST_DATUM_COPY and PG_FREE_IF_COPY as all rasters should be detoasted using PG_DETOAST_DATUM as it doesn't create a copy, thus consuming more space. 2011-10-20 13:31 dzwarg * Replaced missing signatures of ST_MapAlgebraFct. 2011-10-20 00:49 robe * move function args to single line so CREATe EXTENSION topology FROM unpackaged script builds corectly 2011-10-19 23:47 robe * add in missing ST_MapAlgebraFct protos 2011-10-19 23:25 robe * evidentally missed one or get the wrong ST_MapAlgebraFct proto in last commit 2011-10-19 20:31 robe * Get rid of st_mapalgebrafct(raster,text,regprocedure,text[]) proto since there is no matching function - messing up my ability to test my extensions 2011-10-18 11:37 robe * #860 Get rid of some dup definitions in ST_MapAlgebraFct and add some missing ones. 2011-10-18 02:23 robe * Add postgis_before_drop for dropping functions that have arument names renamed before reinstall. Just for upgrade script since can't do CREATE OR REPLACE if arg names have changed 2011-10-17 16:16 dzwarg * Fixed documentation code listing typo for ST_MapAlgebraFct, and added more information about userfunctions and variadic text args. 2011-10-17 13:45 robe * update bios 2011-10-17 13:10 dzwarg * Added ST_MapAlgebraFct to documentation, with same examples as ST_MapAlgebraExpr 2011-10-16 18:17 robe * upgrade from a1-a3 for topology, beginning of upgrade extension for postgis -- still need to resolve issue of ALTER EXTENSION not having a DROP IF EXISTS -- a bit annoying for aggs. 2011-10-14 22:43 robe * Move XMin/Max etc out of miscellaneous into accessors -- Per Pierre's suggestion. Seems more logical. 2011-10-14 22:36 robe * Getr di of the word function in heard. Guess it is kind of stupid 2011-10-14 18:11 dzwarg * Implemented raster map algebra with user functions/callbacks. (#860) 2011-10-13 17:54 pramsey * Actually we use bash code, not sh code 2011-10-13 12:28 robe * Add _ST_Resample -- evidentally arg names changed. also got rid of arg names in _ST_AsRaster 2011-10-13 11:56 robe * Some functions need to be dropped before upgrade minor if they need to be recreated. This is required for functions where argument names change but fundamental types do not. Will add this to upgrade minor script build later. 2011-10-12 14:36 dustymugs * Bug fix for _ST_Intersects(geometry, raster) where the buffering of the intersection could return NULL. This happens if the buffer was passed zero for the buffer distance. 2011-10-12 12:51 robe * move ST_AddBand to raster constructors section per ticket #1240 and rename Raster Band Accessors and Constructors to just Raster Band Accessors 2011-10-12 11:26 robe * another minor correction 2011-10-12 11:18 robe * #1241 apply doc_vacuum_analyze_and_I_None_typo.patch 2011-10-11 14:37 strk * Typename in type specifier doesn't need to be quoted. 2011-10-11 10:33 strk * Ignore more generated files 2011-10-10 20:50 strk * Restrict valid spatial_ref_sys SRID values between 1 and 998999 (#1233) I guess it'll take some special handling for this change in the upgrade scripts. I didn't do any with this commit. 2011-10-10 20:38 strk * Clamp SRID in typmod parser. Now we get NOTICE/clamp also on create table. 2011-10-10 20:26 strk * Clamp SRID in AddGeometryColumn, update expected topology test results to expect -1 being transformed to 0 (current official UNKNOWN SRID value). 2011-10-10 19:25 strk * Do not use AddGeometryColumn, to avoid having to write an explicit unknown SRID value. 2011-10-10 17:50 strk * Hush NOTICES in regress test currently not emitting any (propedeutic for srid clamping in AddGeometryColumn, which is invoked with SRID=-1 by this testcase) 2011-10-10 07:38 strk * Clamp SRID on serialization and deserialization. Raise an error when clamp_srid receives a number > 999999 2011-10-10 07:35 strk * Do not input an explicit value to mean unknown SRID (in raster test) 2011-10-10 07:20 strk * Do not input an explicit value to mean unknown SRID 2011-10-10 06:55 strk * Use macros for hard-coded "magic" SRIDs used by _BestSRID and ST_Transform, use 999xxx range for them. See ticket #1230. 2011-10-07 00:29 dustymugs * Added additional error checking and error messages to ST_SameAlignment function 2011-10-06 23:25 dustymugs * minor cleanup and prettiness. 2011-10-06 15:47 dustymugs * Make use of clamp_srid function for SRID checks 2011-10-06 14:08 strk * Raise a NOTICE when a SRID <= 0 but != SRID_UNKNOWN is converted 2011-10-06 13:35 strk * Clamp literal SRID values occurring in WKB and WKT. 2011-10-06 13:35 strk * Add clamp_srid internal function returning UNKNOWN for <= 0 values. 2011-10-06 07:18 strk * Do not use an explicit SRID=-1 in EKWT. It's not needed. 2011-10-06 06:57 strk * Do not use an explicit SRID=-1 in EKWT. It's not needed. 2011-10-05 23:03 dustymugs * Implements ST_SameAlignment. Associated ticket is #589. 2011-10-05 18:55 dustymugs * Fixed --with-gdalconfig parameter as per ticket #1167. 2011-10-05 18:49 dustymugs * As per Bryce's comments in ticket #1174, reduce the number of calculations when doing rt_raster_geopoint_to_cell by using an inverse geotransform matrix. Unlike the patch attached to the ticket, this commit does not change the structure of the rt_raster struct. It may be worth changing the rt_raster struct eventually, but will cost us the single memcpy when serializing rt_raster. Also, changes for testing SRID as "unknown" if value is lte SRID_UNKNOWN (presently 0). Associated ticket is #1174. 2011-10-05 04:54 dustymugs * Removed hackish use of POSTGIS_GDAL_VERSION in postgis/sqldefines.h.in and postgis/postgis.sql.in.c. Added conditional compilation of extent resizing based upon GDAL version in rt_api.c 2011-10-04 23:32 dustymugs * Fixed bug where a call to postgis_full_version causes error if postgis_gdal_version doesn't exist because raster support is not included 2011-10-04 23:13 strk * don't try to call postgis_gdal_version() if not testing raster (the signature is unavailable) 2011-10-04 22:38 dustymugs * Adds postgis_gdal_version() function as per ticket #1225. 2011-10-04 20:51 dustymugs * Changed adjustment of extent by half-pixel to full-pixel for points and linestrings to ensure compatibility with GDAL 1.6, 1.7 and 1.8. GDAL 1.9 (current trunk) appears to work fine with half-pixel adjustments. 2011-10-04 20:46 robe * add KNN GIST + credits to news release (was already in docs) 2011-10-04 20:43 robe * minor correction to <#> description 2011-10-04 19:50 dustymugs * For linestrings, use same logic for points where extent is increased by half a pixel to catch geometries on the edges. Associated ticket is #1213 2011-10-04 17:08 strk * Do not base availability of SQL ST_Hausdorff* signatures on GEOS version Tested with GEOS from the 3.1 branch (yes, we still support it !) 2011-10-04 16:45 strk * Simple review of the topology README. Wasn't that outdated :) 2011-10-04 16:27 strk * Do not base availability of SQL isValid* signatures on GEOS version This is a work for the C level library. 2011-10-04 14:33 strk * Tweak expected test output to expect unknown srid to be reported as 0 If this will change before release, git-revert is our friend 2011-10-04 14:33 strk * Make topology.CreateTopology unknown-srid-agnostic (uses ST_Srid to tell) Hopefully this makes the topology code stable during the SRID fights :) 2011-10-03 15:29 robe * Guess Nicklas was right - should have looked at my explain. Revised example to use geometry constants. Seems to be a limitation in KNN that it needs constants. Same annoying behavior with my trigram KNN that only constant phrases work, not even constant phrases wrapped in alias work. 2011-10-03 10:32 strk * Drop more non-ascii dashes, update regress tests (#1226) [RT-SIGTA] There's a still-failing regress test due to SRID 0 being considered != 1 2011-10-03 10:26 strk * Use ASCII dash, not UTF8 one. Fixes #1226. [RT-SIGTA] 2011-10-02 23:38 robe * Add in st_valuecount evidentally changed output in 2.0 series 2011-10-02 14:12 dustymugs * fixed _st_intersects(raster, geometry, integer) where call to ST_Intersects was hardcoding the first band of raster instead of using user-provided nband. 2011-10-02 03:18 robe * preliminary logic to build an rtpostgis_upgrade_20_minor.sql script. Still missing a drop somewhere since my older db doesn't upgrade because complains about out parameters changed in some function. 2011-10-01 17:28 dustymugs * Fixed installation path of rtpostgis.sql to contrib/postgis-2.0. Added build of rtpostgis_drop.sql Associated ticket is #615 2011-10-01 16:47 robe * itemize more removed functions for upgrade purposes 2011-10-01 03:46 robe * add very paertinatnet ST_3DDistance reference to ST_3DDwithin 2011-10-01 02:58 robe * get rid of obsolete proto, replace with new onesfor ST_Intersects. Clarify distinctions between raster/goemtry and geometry/raster operations 2011-09-30 20:03 dzwarg * Changed ST_MapAlgebra to ST_MapAlgebraExpr. Also moved around the pixeltype parameter -- it is no longer optional. Also updated docs that referred to ST_MapAlgebra. (#860) 2011-09-30 18:34 dzwarg * Renamed 'nodatavalueexpr' variable. (#866) 2011-09-30 00:11 dustymugs * Updated regression tests to correctly support change of unknown SRID from -1 to 0. 2011-09-29 19:43 strk * Fix distclean rule to drop Makefile too 2011-09-29 19:43 strk * Define SHELL (used by LIBTOOL and INSTALL) hopefully helps bug #1218 2011-09-29 18:53 dustymugs * Uncommented include of lwgeom_pg.h in rt_pg.c. Fixed setting SRID to -1 to SRID_UNKNOWN. 2011-09-29 18:33 dustymugs * Changed function ST_Intersects(raster, raster, int, int) to ST_Intersects(raster, raster). Added additional comments to rt_raster_geopoint_to_cell(). Associated ticket is #1212 2011-09-29 10:40 strk * Do not incentivate use of SRID=-1 in mapserver examples. 2011-09-29 10:34 strk * Do not suggest using "SRID=<unknown>" prefix in EWKT 2011-09-29 07:18 robe * start work building unpackaged 2011-09-29 04:05 robe * add KNN gist and srid =0 breaking change. Add Vizzuality to corporate sponsors 2011-09-28 23:59 pramsey * Remove gserialized.h define file (actual #define is now temporarily in liblwgeom.h) 2011-09-28 23:58 pramsey * Remove GSERIALIZED_ON from .sql files. 2011-09-28 23:38 pramsey * Change "no SRID" SRID to 0 (#286) 2011-09-28 21:56 robe * document box distance KNN operator 2011-09-28 15:06 pramsey * Make the <-> operator return linear not square units, to match the <#> operator. 2011-09-28 15:04 pramsey * Add box-wise ORDER BY for KNN (#701) 2011-09-28 10:13 strk * Image generator also uses LWDEBUG macros... how popular ! 2011-09-28 10:05 strk * Move LWDEBUG macros in a new lwgeom_log.h header file (see #1220) Update all implementation files accordingly. Fix some misuses out of liblwgeom. Add missing copyright notices in a few files. 2011-09-27 23:29 robe * merge postgis and raster into a single extension called "postgis", revise postgis_topology control to depend on this new extension 2011-09-27 23:28 robe * more drop of functions that changed signature 2011-09-27 17:35 robe * clarify current implementation is centroid of box not the geometry. 2011-09-27 15:33 strk * Drop duplicated geometry_out definition 2011-09-27 05:09 robe * correct the description on semantics of knn operator 2011-09-27 03:40 dustymugs * Removed ST_Intersects(raster, int, raster, int) version of two raster ST_Intersects. Associated ticket is #1212 2011-09-27 03:15 robe * wrap examples in cdata tags so don't break parser 2011-09-27 02:58 robe * document new knn gist operator -- example mostly plagiarized from Paul's postgis-devel example with addition of care consideration of safe casting and SQL formatting. I know I'm getting lazy in my old age. 2011-09-27 02:22 robe * preliminary work on drop deprecated functions. Not tied into anything yet. 2011-09-27 02:09 robe * get rid of obslete protos for ST_Intersects and revise description to describe new semantics of raster st_intersects 2011-09-27 01:55 robe * put in svn keywords and forcce to LF 2011-09-26 21:05 pramsey * Wrap <-> distance ordering into a PgSQL 9.1+ block. 2011-09-26 20:39 pramsey * Add support for KNN-GiST ops. First cut only, much testing required. (#701) 2011-09-26 14:25 strk * Don't use the same name for input parameter and returned table description. Hopefully fixes ticket #1210 [RT-SIGTA] 2011-09-26 06:29 robe * document ST_Intersects(rasta,rastb,nbanda,nbandb) -- left out ST_Intersects(rasta,nbanda,rastb,nbandb) - that one offends my senses. 2011-09-25 20:37 robe * add missing geos flag to let it make check under mingw 2011-09-25 14:48 dustymugs * Removed unnecessary typedef for fmin and fmax on windows. Possible fix to #1207. 2011-09-24 19:05 dustymugs * Tweaks to makefiles due to linker symbol errors in OSX. Hopefully this can also resolve the issue with #1207. 2011-09-23 22:00 robe * Add killer sed command to create a topology upgrade minor script from topology.sql. Also change release version to 2.0.0a1 since we haven't released yet. This will build a script to upgrade our mislabeled 2.0.0 to 2.0.0a1 2011-09-23 19:58 robe * #1209: redundant constraint chk_statefp on loading edges. 2011-09-23 19:21 strk * Update topology functions status. We've completed the SQL/MM set ! 2011-09-23 19:21 strk * Implement topology.ST_CreateTopoGeo (#1190) [RT-SIGTA] Includes regress testing and documentation update 2011-09-22 15:07 dustymugs * Further tweaks to rt_raster_gdal_rasterize to correctly handle auto-computed extents of multipoints. Addition of ST_Intersects for two rasters. Refactored the one raster and one geometry version of ST_Intersects. Associated ticket is #1176 2011-09-22 14:06 strk * Make face creation order predictable in ST_AddEdgeNewFaces (#1205) Always create the face on the right first [RT-SIGTA] 2011-09-22 09:14 strk * Add notes and TODO items about the edge-adding functions [RT-SIGTA] See ticket #1205 2011-09-22 07:22 strk * Reduce noice produced by ST_AddEdgeModFace at NOTICE level [RT-SIGTA] 2011-09-21 10:34 strk * Don't wrap prepared geom implementation in a conditional macro These kind of full-disabling should be done at Makefile level... 2011-09-21 09:50 strk * Add header guards to geos headers, move GEOS_PREPARED define to the implementation file, add missing copyright header. 2011-09-21 07:32 strk * Make RemEdgeModFace symmetric to AddEdgeModFace about face retention Save the face on the right, so that running: ST_RemEdgeModFace(name, ST_AddEdgeModFace(name, ...)) ... will not modify the topology. [RT-SIGTA] 2011-09-21 03:29 robe * move args to same line as func so extensions unpackaged adds them correctly will ahve to come up with a better way of doing this. 2011-09-21 03:28 robe * makr postgis_core as required. Admittedly this will go away once we merge postgis_core and raster. Doing this gets rid of issues with raster not being able to find geometry etc if installed in separate schema from postgis_core 2011-09-21 03:23 robe * more changes to properly utilize extenions model, 1 remove create schema since extesnion creates it if not present, in control file designate postgis_core is required so create adds it to search path, more cleanup for unpackaged 2011-09-21 02:14 robe * pick up table, type, trigger, and schemas in unlogged add 2011-09-20 16:47 robe * get rid of linebreaks in function arg list so unpackaged builder works, fix logical error in sed expression 2011-09-20 15:49 robe * preliminary logic to build install from unpackaged file 2011-09-20 15:21 strk * Implement ST_RemEdgeModFace (#1189) [RT-SIGTA] Include regress testing and documentation. 2011-09-19 21:28 dustymugs * additional code cleanup of rt_raster_gdal_rasterize 2011-09-19 16:53 strk * Have ST_RemEdgeNewFace return NULL when no face is created [RT-SIGTA] This is to match the ISO spec more closely. Docs and regress test updated. 2011-09-19 14:17 strk * Fix ST_Estimated_Extent by correctly interpret histogram box (#1200) 2011-09-19 06:40 strk * TopologySummary: do not count the universe face in the face count 2011-09-19 06:40 strk * ST_InitTopoGeo: use named argument, drop trailing space from return text 2011-09-18 15:51 robe * #1202 -- also fixed issue with when typ mod application fails (because of mixed geometries) to properly catch error and raise warning instead of throw error. 2011-09-18 15:04 robe * fix typo in warning 2011-09-18 14:56 robe * #1201 don't error out when populate_geometry_columns is called on an empty table, just provide warning and don't do anything. Exclude raster_columns from populate_geometry_columns inspection. 2011-09-17 19:59 pramsey * shp2pgsql gui wrong use of create spatial index (#1091) 2011-09-17 07:58 strk * Typo in testcase label 2011-09-17 07:10 strk * Typo 2011-09-17 06:58 strk * Minor inline documentation updates 2011-09-17 06:46 strk * Implement ST_RemEdgeNewFace (#1188) [RT-SIGTA] Includes regress testing and documentation. 2011-09-16 13:32 dustymugs * fixups and code cleanups for the rt_raster_gdal_rasterize to better handle point and linestring geometries 2011-09-15 20:43 robe * more cleanup and put in logic to also install in database help descriptors 2011-09-15 20:05 robe * fix invalid st_summarystats proto 2011-09-15 18:35 robe * now topology installs can get rid of error note. 2011-09-15 18:33 robe * postgis_topology extension now installing right. Had to get rid of ALTER TABLE .. hasz and merge it into the CREATE TABLE since that was the culprit causing extension install error 2011-09-15 13:57 robe * more cleanup -- this time no more errors when installing 2011-09-15 08:40 robe * Support for PostgreSQL 9.1 CREATE EXTENSION syntax 2011-09-14 15:37 robe * change & to html equivalent entity 2011-09-14 15:24 robe * provide real world examples of how to use CreateTopoGeom 2011-09-14 14:55 robe * more fixes 2011-09-14 14:51 robe * put in new timings. After speed fix loading is 3 times faster 2011-09-14 14:02 robe * fix typo and create another link reference 2011-09-14 12:14 pracine * Commented some queries so that the file can be executed to load the functions. 2011-09-14 07:02 robe * drop populate_geometry_columns version that just takes oid. Has bene replaced with versoin that takes default arg use_typmod 2011-09-13 18:52 strk * Re-enable accidentally disabled prepared geoms. Fixes bug #1165. 2011-09-13 18:47 chodgson * Added some diagrams to the st_overlaps docmentation 2011-09-13 03:51 robe * fix for #1158 can't compile 8.4 under mingw windows 2011-09-12 16:02 strk * Handle db initialization errors earlier 2011-09-12 04:56 robe * make topoelementarray examples make more sense 2011-09-12 04:44 robe * put in more description about what type id means 2011-09-11 02:42 robe * Link several functions back to new Topology_Load_Tiger since that demonstrates use of these functions 2011-09-10 14:09 robe * minor wording changes and reference to configuration part of documentation 2011-09-10 13:52 robe * fix typo link to tiger topology loader 2011-09-10 12:43 strk * Fix "no ID for constraint linkedn: Create_Topology" error 2011-09-10 11:49 strk * Honour DESTDIR in documentation Makefile. Patch by Bryce L Nordgren. See ticket #1184 2011-09-10 06:43 robe * Document tiger to postgis topology loader and revise scripts to install the new function. also some additional minor fixes 2011-09-10 05:35 robe * save as UTF-8 2011-09-10 05:11 robe * Alas a load with no topology validation errors. Fix remaining issues with missing loading of some edges of faces 2011-09-10 02:49 robe * get rid of superfluous junk 2011-09-09 14:47 robe * example of how to get actual edge geometries 2011-09-09 14:06 robe * revise to snap points to topology precision, also set edge left/right face to 0 if null (world face). ValidateTopology now reports 25 errors instead of 484 errors (what it did before) 2011-09-08 19:18 robe * revise to transform to spatial reference system of target topology 2011-09-08 16:47 robe * more changes to add missing edges 2011-09-08 14:36 robe * more minor corrections 2011-09-08 14:23 robe * #1181 TopologySummary is broken causing ambiquous reference. Changed to have local variable be called var_topology_id so doesn't conflict with table column topology_id 2011-09-08 08:06 robe * logic to load in edges marking those with orphaned next_left, next_right to -neg of itself 2011-09-07 17:13 robe * more typo corrections 2011-09-07 14:57 robe * more typos 2011-09-07 14:55 robe * fix typo 2011-09-07 14:54 robe * more work on tiger topology loader -- revised to use temp table. 2011-09-07 13:58 dustymugs * Updated expected output due to change in message 2011-09-06 21:01 robe * correct some mistatements about export functions 2011-09-06 20:10 dustymugs * Fixed ST_AsPNG to allow rasters with four bands as that becomes a RGBA PNG image. 2011-09-06 16:40 robe * fix typos 2011-09-06 16:24 robe * more examples 2011-09-06 08:07 robe * minor indentation fix 2011-09-06 08:07 robe * document st_resample - still need to put in examples 2011-09-06 07:25 robe * get rid of transparency -- transparency turning to black in pdf format 2011-09-06 06:56 robe * Add another example with pictures 2011-09-06 02:11 robe * Move ST_AsRaster and ST_Band to raster contructor section 2011-09-05 15:44 robe * revmoe history table out of docs for now 2011-09-04 02:50 robe * fix typo 2011-09-02 19:46 robe * Put in creative commons license stamp 2011-09-02 01:54 dustymugs * Added optimizations and shortcuts for rt_band_get_quantiles_stream 2011-09-01 14:58 robe * revise to return first part of street number e.g. 112-345 -> 112 2011-09-01 12:35 robe * revise so works under 8.4 evidentially in 8.4 INTO USING clauses are not interchangeable but they are in later versions 2011-09-01 11:41 robe * fill in missing tag 2011-09-01 09:00 robe * more finetuninng of street offset to consider non-straight tlids 2011-08-31 14:54 robe * #1052 update doco to reflect change in behavior. 2011-08-31 14:53 robe * #1052 -- instead of placing geocoded point at center line, offset it 10 meters to the correct odd/even (L / R utilizing addr.side field). May later change this to allow the user to specify the offset amount. 2011-08-31 07:06 strk * With libtool for loader/dumper there's no need to stage-install them Fixes ticket #1177 [RT-SIGTA] 2011-08-29 16:02 robe * fill in missing protos for ST_AsRaster 2011-08-29 15:23 strk * Dynamically link loader and dumper to liblwgeom [RT-SIGTA] This reduces each of the 3 installed executable sizes by 547 Kb. 2011-08-29 14:45 strk * Use libtool to link liblwgeom unit tester (helps testing the shared library) 2011-08-27 17:16 dustymugs * fixed improperly commented-out RAISE DEBUG statement for AddRasterColumn function. Associated ticket is #1175. 2011-08-26 14:47 dustymugs * Added solaris define for UNIX using patch provided by rroliver. Associated ticket is #1171. 2011-08-26 00:04 dustymugs * Tweaked memory allocation in RASTER_quantileCoverage. 2011-08-25 23:23 dustymugs * Fixed the function rt_band_get_summary_stats rt_core/rt_api.c to correctly handle the situation where a band's values are all nodata 2011-08-25 18:39 dustymugs * Removed "WITH OIDS" from raster table creation. 2011-08-25 18:18 dustymugs * Fix error of unknown symbol gidx_to_string when building with the flags --with-raster --enable-debug using patch gidx_to_string.patch provided by bnordgren. Associated ticket is #1161 2011-08-25 14:44 dustymugs * Fixed the problem where having configure detect that GDAL has the GDALFPolygonize function does not cause the code to use GDALFPolygonize. This is due to the macro GDALFPOLYGONIZE not being set anywhere. So, it is now being set in raster_config.h.in and included in rt_core/rt_api.h. Had to update testapi.c as the geometries generated differ depending on whether or not GDALFPolygonize is used. Associated ticket is #650 2011-08-25 11:33 robe * provide better example and images to complement. Also note that ST_AsRaster doesn't yet work with newer geometries 2011-08-24 22:31 pramsey * Added in gettext headers to allow compilation under osx with iconv 2011-08-24 19:20 robe * cleanup formatting a bit on ST_AsRaster example 2011-08-24 17:40 dustymugs * Added DESTDIR so that raster2pgsql.py is installed in the user-specified path 2011-08-24 16:08 robe * Provide some examples for using ST_AsRaster. This function is way cool. 2011-08-24 15:23 dustymugs * Inclusion of missing ST_PixelWidth and ST_PixelHeight functions and regression tests. Associated ticket is #928 2011-08-23 22:41 dustymugs * Refactored ST_ValueCount and ST_ValuePercent to be a C function rather than a plpgsql function. 2011-08-22 21:24 robe * #997 put in correct codes for non-state us territories 2011-08-21 03:34 robe * #1158 add proj flags to fix mingw test issue 2011-08-20 21:17 strk * Put PG_MODULE_MAGIC in raster and postgis source files rather than in libpgcommon. Should fix the mingw build. See ticket #1158. 2011-08-20 21:08 strk * Use PROJ cflags when building raster module (see #1158) 2011-08-20 17:51 dustymugs * More fixups for the quantile coverage function. Fixes segfault that seems to only occur on OSX. 2011-08-20 16:43 strk * Drop duplicated typedef [RT-SIGTA] 2011-08-20 15:55 strk * Install liblwgeom.h under a sensible location... [RT-SIGTA] 2011-08-20 15:43 strk * Move gserialized_gist to libpgcommon fixing a circular dependency between libpgcommon and liblwgeom, put libpgcommon _after_ liblwgeom in pg modules link lines, drop duplicated lwgeom_init_allocators and PG_MODULE_MAGIC from raster module (they are in libpgcommon already). Includes patch in #1161. [RT-SIGTA] 2011-08-20 00:54 dustymugs * Corrected incorrect function usage 2011-08-19 22:57 dustymugs * Added forgotten explicit freeing of memory and some code cleanup 2011-08-19 19:08 dustymugs * Adds coverage table version of ST_Quantile and ST_ApproxQuantile. Function implemented using the algorithm discussed in A One-Pass Space-Efficient Algorithm for Finding Quantiles (1995) by Rakesh Agrawal, Arun Swami in Proc. 7th Intl. Conf. Management of Data (COMAD-95) http://www.almaden.ibm.com/cs/projects/iis/hdb/Publications/papers/comad95.pdf Also refactored the regression test for rt_histogram due to unnecessary columns in output 2011-08-19 14:04 dustymugs * Commit of patch provided by David Zwarg in #482 adding the functions ST_SetRotation, ST_Rotation, ST_PixelHeight and ST_PixelWidth. Associated tickets are #482, #928, #929 and #936 2011-08-19 10:12 strk * Include version in liblwgeom.h [RT-SIGTA] Closes ticket #1164 2011-08-19 09:34 strk * Drop (u)int32 and uchar in favor of C99 standard int types [RT-SIGTA] This commit drops PostgreSQL references in liblwgeom.h (C_H define) and hopefully reduces the noise generated by custom symbols. 2011-08-19 09:30 strk * Don't use problematic int types for no reason... 2011-08-19 08:16 strk * Install liblwgeom on 'make install' [RT-SIGTA] Uses liblwgeom.h as the API header for liblwgeom. 2011-08-19 07:55 strk * Move SQL-exposed functions out of libpgcommon (#1163). 2011-08-16 13:19 robe * more clarification of behavior change in 2.0 of bbox storage 2011-08-16 12:51 robe * #1160: documentation clarification of behavior 2011-08-16 09:47 strk * Move NO_*_VALUE from liblwgeom.h to liblwgeom_internal.h [RT-SIGTA] 2011-08-16 09:25 strk * Move DIST_MAX and DIST_MIN from liblwgeom.h to liblwgeom_internal.h (weird values, btw) [RT-SIGTA] 2011-08-16 09:15 strk * Honour DISTDIR when installing liblwgeom. Drop the finish call as it may require root privileges on some systems [RT-SIGTA]. 2011-08-15 22:43 dustymugs * Removed unnecessary code from rt_band_get_summary_stats. Fixed incorrect comment for rt_band_get_value_count. 2011-08-15 11:36 strk * Use proper PROJ4 flags when linking against liblwgeom. See ticket #1158. [RT-SIGTA] 2011-08-14 19:47 strk * Fix for missing include directory on Mingw (#1158). Thanks Bryce Nordgren. 2011-08-14 12:39 robe * #1071: Logic to mark nodes that are contained in a face 2011-08-14 12:32 robe * #1071 - start work on tiger PostGIS topology loader 2011-08-13 18:10 dustymugs * Consolidated various struct declarations from rt_api.c into rt_api.h as these structs are duplicatively redeclared in rt_pg.c and testapi.c 2011-08-13 10:06 strk * Second attempt at libtool usage. Seems better to me now. PostGIS clients still all use the static version of the library. Libraries are not installed by default. [RT-SIGTA] 2011-08-13 09:02 strk * Drop unused code 2011-08-13 02:01 robe * #1156 incorporate suggestions from forkandwait 2011-08-12 19:18 strk * Move lwproj_from_string from libpgcommon to liblwgeom [RT-SIGTA] 2011-08-12 17:57 strk * liblwgeom/cunit also needs PROJ_CPPFLAGS 2011-08-12 17:55 strk * Rename make_project to lwproj_from_string, ready to be moved to liblwgeom [RT-SIGTA] 2011-08-12 17:42 strk * Even generator.c will need proper proj cflags now.. 2011-08-12 17:37 strk * loader also includes liblwgeom.h, thus wants PROJ cpp flags 2011-08-12 17:33 strk * Use PROJ4 C flags, see if this makes Hudson happy. 2011-08-12 17:26 strk * Copyright review on lwgeom_pg.{c,h} files 2011-08-12 17:25 strk * Make transformation and projection cache API available (ticket #1053) 2011-08-12 10:12 strk * Drop unused macros CARTESIAN and GEODETIC from liblwgeom.h 2011-08-12 10:11 strk * Snap and SharedPaths are both direct GEOS proxies, not extra [RT-SIGTA] 2011-08-12 09:11 strk * Export lwgeom_sharedpaths to liblwgeom, and fix exception message [RT-SIGTA] 2011-08-11 21:01 dustymugs * Rewrote the code for the coverage table versions of ST_SummaryStats and ST_Histogram. So instead of plpgsql, it is now in C within rt_pg/rt_pg.c 2011-08-11 16:35 robe * change reverse_geocode back to using addr table and also use cousub for location 2011-08-11 08:04 strk * Fix leftover PARSER_CHECK reference (thanks Hudson) [RT-SIGTA] 2011-08-11 08:04 strk * Export lwgeom_split to liblwgeom, const-correct it [RT-SIGTA] 2011-08-11 07:52 strk * Export lwgeom_snap to liblwgeom [RT-SIGTA] 2011-08-11 07:51 strk * Give PARSER_CHECK macros an LW_ prefix [RT-SIGTA] 2011-08-11 07:50 strk * Fix parser documentation [RT-SIGTA] 2011-08-10 23:16 pramsey * Match style of liblwgeom.h include guard 2011-08-10 22:43 pramsey * Little checks in clean_wkt_out_suite 2011-08-10 22:28 pramsey * Remove old WKB/WKT parsers and generators and switch all internal references remaining (mostly in cunit) over to the new implementations. 2011-08-09 16:56 strk * Export lwgeom_makevalid to liblwgeom [RT-SIGTA] 2011-08-09 16:05 strk * Add GEOS entry points in liblwgeom.h (public API) [RT-SIGTA] 2011-08-09 15:43 strk * Add some documentation about parsing [RT-SIGTA] 2011-08-09 15:43 strk * Mark "chip" functions for deletion 2011-08-09 15:12 strk * Drop REPEATED_POINTS_* and SPLICE_* defines from liblwgeom.h, move MAXFLOAT to liblwgeom_internal.h [RT-SIGTA] 2011-08-09 14:54 robe * make eol for all rfcs be LF so our unix brethren can edit them without fuss 2011-08-09 14:19 strk * Move floating points comparator macros from liblwgeom.h to liblwgeom_internal.h (not prefixed symbols) [RT-SIGTA] 2011-08-09 09:51 strk * Don't include liblwgeom.h from headers if not needed, document what is it needed for in implementation files [RT-SIGTA] 2011-08-09 09:50 strk * Clean up gui as well 2011-08-09 08:28 strk * Drop CHIP type and any reference to it [RT-SIGTA] 2011-08-09 05:52 robe * strk's patch fix for #1155 2011-08-08 10:11 strk * Encode more deps 2011-08-08 09:56 strk * Const-correct some GEOS functions in liblwgeom fixing pending memory errors when overlaying empty and non-empty geometries (not exploited by testing) [RT-SIGTA] 2011-08-08 09:27 strk * Move getMachineEndian() and error_if_srid_mismatch() from liblwgeom.h to liblwgeom_internal.h 2011-08-08 08:59 strk * Put PG_LWGEOM stuff where it belongs (out of liblwgeom) [RT-SIGTA] 2011-08-06 18:42 strk * Include postgis_config.h to find POSTGIS_VERSION and stringbuffer.h when needed 2011-08-06 18:17 strk * Reduce number of includes from liblwgeom.h (closest header to a public API). Update other files accordingly. [RT-SIGTA] 2011-08-06 18:03 strk * Fix dependency referencing dropped rule [RT-SIGTA] 2011-08-06 18:01 strk * Add static library to {,un}install-liblwgeom rules [RT-SIGTA] 2011-08-06 17:48 strk * Re-drop use of libtool (more troubles than help). Stub a rule to build and install a shared liblwgeom. [RT-SIGTA]. 2011-08-06 16:18 strk * Re-introduce numerical flags in building "NM" objs [RT-SIGTA] 2011-08-06 15:12 strk * Use libtool to build liblwgeom. Still only static. [RT-SIGTA] 2011-08-06 09:47 strk * Use GEOS compiler and linker flags for liblwgeom, add lwgeom_geos_noop and cunit test for it (to confirm linking works, and it does) [RT-SIGTA] 2011-08-06 09:46 strk * Add lwgeom_buildarea to liblwgeom [RT-SIGTA] 2011-08-06 09:46 strk * Add GEOS spatial operations to liblwgeom (ticket #1050) [RT-SIGTA] 2011-08-05 12:45 robe * Another minor check 2011-08-04 15:03 robe * Update hard upgrade to include use of legacy_compatibility_layer.sql 2011-08-03 15:01 robe * Create new legacy compatibility layer script which will install the absolute minimal to restore an old postgis database. Also got rid of srid function and moved to legacy compatibility layer. Still need to test with a restore. 2011-08-03 12:14 robe * some typo cleanup 2011-08-03 05:00 robe * Make more efficient the case when no state or city is provided but zip is provided. 2011-08-03 03:51 robe * document new drop_indexes_generate_script function 2011-08-03 02:06 robe * Major rework to improve speed, selectivity, and additional regress. Also added some indexes and removed some -- should solve #1145, #1148, and #1131 (should be about 60% faster for most cases and in some as much as 20 times faster). Better performance if you set max results = 1. Some other minor cleanup. documentation of new management helper functions coming next. 2011-08-02 06:33 robe * Add link to Sandro's topology Paris 2011 slides in summary of topology reference section 2011-07-28 18:56 strk * Use strcpy rather than strncpy, simpler and less error-prone 2011-07-28 18:43 strk * Give strncpy enough space to write a terminating null. Thanks gengor for the patch. 2011-07-27 19:21 robe * minor updates to ST_MakeLine to clarify pre-9.0 and 9.0+ approaches 2011-07-27 11:55 robe * 1 more change 2011-07-27 11:54 robe * fix typo 2011-07-27 11:52 robe * example of using new PostgreSQL 9.0+ ORDER BY aggregate feature for ST_MakeLine 2011-07-26 15:39 robe * more examples for ST_Offsetcurve 2011-07-26 14:30 robe * fix typo 2011-07-26 14:29 robe * remove left and right notes until I have arrows. not embarrass myself with my directional dyslexia. 2011-07-26 05:37 robe * Start work documenting ST_AsRaster 2011-07-25 15:53 robe * reduce spacing more 2011-07-25 15:52 dustymugs * Addition of ST_AsRaster function to provide the ability to convert geometries into rasters. Associated ticket is #1141. 2011-07-25 14:20 robe * another typo 2011-07-25 14:10 robe * fix coloring to agree with color of other examples 2011-07-25 14:08 robe * reduce width of table cells -- ST_OffsetCurve 2011-07-25 14:04 robe * redo all examples so they fit in the 0 0 200 200 grid 2011-07-25 13:44 robe * fix some typos and grid more to fix 2011-07-25 12:18 robe * get rid of semicolons 2011-07-25 12:13 robe * need more pictures :), visual examples for st_offsetcurve 2011-07-24 08:15 robe * update ST_MapAlgebra to agree with implementation (got rid of bosolete proto and example and replaced with new example 2011-07-23 21:42 strk * Be terse, we don't care about context. Closes ticket #1142. 2011-07-23 21:34 strk * Set 'C' collation when creating regress database. See #1140. 2011-07-22 20:20 pracine * Added a note saying that those function now have a C implementation. Many TABs converted to spaces. 2011-07-22 20:05 pracine * -Fix for #645. -Replaced min and max with LEAST and GREATEST -Adaptation to ST_SetBandNodataValue() 2011-07-22 19:38 pracine * Fix for ticket #969. Removed conflicting function variant. 2011-07-22 19:31 pracine * -Addaptation to new two rasters ST_MapAlgebra in which nodatavalue expressions are text and now accept a nodatanodatavalueexpr. -Added RANGE as a predefined expression. 2011-07-22 19:29 pracine * Modified comment on further enhancements. 2011-07-22 19:28 pracine * -Fix for ticket #644. Removed all variants. -Fixed the two rasters version. -Added some tests. -Added ST_MinPossibleVal(). -Determine new nodata value AFTER determining the new pixeltype. -Replaced ST_SetBandHasNodataValue with ST_SetBandNodataValue(rast, NULL). -Added implementation of two rasters overlay operations using the two raster MapAlgebra. 2011-07-21 17:31 dustymugs * Cleaned the grid alignment code to remove unnecessary cruft in rt_raster_gdal_warp 2011-07-21 16:20 dustymugs * Fixed floating point issue with the remainder returned from the function modf in rt_api.c. Updated messages in rt_pg.c. Corrected expected regression results in rt_resample_expected. Associated ticket is #1114 2011-07-20 19:53 strk * Improve testsuite predictability (#1135) 2011-07-19 22:20 dustymugs * Bug fix of deallocating array using wrong index variable 2011-07-18 23:39 dustymugs * Fixed width and height values expected. 2011-07-18 23:29 dustymugs * - tweaked the rt_resample regression test to use SRIDs under 1000000 - changed the computation of width and height when aligning to a grid 2011-07-18 04:44 robe * Fix datatype of tlid on edges table. Other tables with tlid are set to bigint. This one set to numeric(10). Still revising my tables to determine what impact this has in utilizing the existing indexes 2011-07-17 17:39 robe * Limit edge and featnames search to just road / street types 2011-07-17 17:02 robe * more regress tests for reverse_geocode 2011-07-17 16:46 robe * simplify logic by getting rid of addr join. Speed improved slightly 2011-07-17 16:11 robe * enhancements to support reverse geocoding of highway locations. Also add reverse geocode regress tests 2011-07-16 04:19 robe * #1125 have highway designations print in front of streetname instead of after 2011-07-15 21:07 dustymugs * Minor comment updates to correct details 2011-07-15 06:40 robe * revise ratings to minimize numberes steetss from matching highly with interstate routes. Also glue on pretype abrv (which are technically street types) to front of street name in normalize output so that highways print correctly as e.g. State Hwy 10 etc. 2011-07-15 05:31 robe * Add in common abbreviation RT to map to Rte and test case to regress to test 2011-07-14 20:11 dustymugs * Code refactored for RASTER_dumpWKTPolygons to use same mechanisms for resultset generation (Datums instead of CStrings) as RASTER_metadata and other functions. SQL functions refactored to use one call to ST_Metadata for attributes rather than separate/multiple calls to ST_Skew*, ST_Scale*, ST_UpperLeft*. 2011-07-14 14:54 dustymugs * Refactored functions returning sets to use Datums instead of C strings, which were causing rounding issues particularly for ST_Metadata. This refactoring affected RASTER_metadata, RASTER_bandmetadata, RASTER_summarystats, RASTER_histogram, RASTER_quantile, RASTER_valuecount and RASTER_gdaldrivers. Also refactored the ST_Raster2World* and ST_World2Raster* functions to get the raster's metadata in one call using ST_Metadata rather than individual calls for the georeference components 2011-07-14 11:47 robe * add make tiger_geocoder_comments.sql to build script 2011-07-14 11:32 robe * Start work on PostgreSQL in db help for geocoder 2011-07-14 11:13 robe * document the install_missing_indexes function that is used as part of the upgrade process 2011-07-14 07:45 robe * #1113 take into consideration street prequals like Old in rating and filtering, also added btree varops on fullname (trigrams and fulltext proved too slow will need to reinvestigate those), also added helper function install_missing_indezes() which gets run as part of upgrade script. will need to add to documentation. Also added regress tests from snippets in #1113 2011-07-13 19:33 dustymugs * Complete refactoring of code from ST_Transform to ST_Resample. There are four new functions as of this revision: ST_Resample, ST_Rescale, ST_Reskew and ST_SnapToGrid. ST_Transform is still present but points to ST_Resample. Associated ticket #1114 2011-07-12 19:45 robe * Fix for #1112 service roads 2011-07-12 13:03 robe * Partial fix for #1108 2011-07-12 04:14 robe * Fix regress failure with #1074 (wasn't correctly handling all cases where street name is composed of a street type 2011-07-11 17:03 strk * Change ST_OffsetCurve parameters type from cstrin to text. See ticket #1117. 2011-07-11 12:17 strk * Stricter ISO output from ST_GetEdgeFaces: start enumerating ring edges from the edge with smaller id [RT-SIGTA] 2011-07-09 20:32 robe * oops typo 2011-07-09 20:25 robe * revert change 2011-07-09 20:12 robe * fix type in county load 2011-07-09 15:55 strk * Clarify return code from topology.ST_ModEdgeHeal. Clean up description of ST_NewEdgeHeal too. 2011-07-09 01:23 robe * example of using geocode geometry filter 2011-07-09 01:06 robe * Fix ST_Transform signature to match revised function declarations 2011-07-08 08:23 robe * upper case and replace (ZM and Z) in geometry_columns so its more backwards compatible with old geometry_columns table 2011-07-07 22:45 robe * #1070 optional geometry filter arg, documentation (well start need example), and regress tests 2011-07-07 22:23 dustymugs * Final refactor of ST_Transform and underlying RASTER_resample before overhaul for ST_Resample 2011-07-07 21:58 dustymugs * Refactored ST_Transform in preparation for additional refactoring to accomodate ST_Resample 2011-07-07 18:28 dustymugs * Cleaned up the large number of floating point equality tests with a function-like macro 2011-07-07 12:41 robe * #1074, #1109 - Fix for compound named streets that have a portion that is a street type 2011-07-06 23:44 robe * more regress tests for #1109 2011-07-06 23:15 dustymugs * Refactored how user-specified upperleft corner coordinates are handled 2011-07-06 23:00 robe * fix for #1109 when a street name is same as a defined street type 2011-07-06 15:02 strk * Properly destroy lwgeom in lwgeom_to_x3d3 now that it's safe (see #1102) 2011-07-06 14:55 strk * Properly release memory in lwmline_clip_to_ordinate_range (see #1102) 2011-07-06 14:45 strk * Have lwcollection_extract clone (shallow) the extracted components. Safely lwgeom_free the return from lwcollection_extract in testcase. 2011-07-06 14:29 strk * Properly lwgeom_free cloned objects in lwgeom_homogenize now that it is safe 2011-07-06 14:29 strk * Implement ptarray_clone (shallow) and update clone documentation (doxygen), have lw*_clone clone the POINTARRAY but not the serialized point list (using ptarray_clone), add unit testing for lwgeom_clone. See ticket #1102. 2011-07-06 10:48 mcayland * Fix compile warning in geography_measurement.c caused by missing function prototype. 2011-07-06 10:48 mcayland * Fix compile warning for lwgeom_init_allocators() in loader/dumper by adding missing liblwgeom.h #include. 2011-07-06 09:40 strk * Rename ptarray_clone to ptarray_clone_deep, to be conformant with lwgeom_clone_deep in that it copies the serialized pointlist too 2011-07-06 08:04 strk * Compiler warning fix 2011-07-06 07:42 strk * Fix compiler warnings (#999) 2011-07-06 07:42 strk * Don't let temporary collection leak in lwgeom_to_x3d3 (actually do, but sligthly less, till we fix lwgeom_clone). See #1102. 2011-07-06 07:42 strk * const-correct lw*_is_closed 2011-07-06 06:46 strk * properly release reported error message string 2011-07-06 06:46 strk * properly release lwgeom objec in test_lwprint_assert_error 2011-07-06 06:46 strk * properly release lwgeom objec in test_misc_area 2011-07-06 05:18 dustymugs * Changed expressions for pixel byte boundaries in assert tests of rt_raster_serialize and rt_raster_deserialize in rt_api.c. The changed expressions are based upon relative values rather than the original absolute values. This should resolve the problem defined in ticket #1061. It may also help with the crashing in ticket #1066. Associated tickets are #1061 and possibly #1066. 2011-07-06 02:17 robe * fix typo 2011-07-06 01:02 robe * drop_state_tables_generate_script function and document it. Also add blank paramdef to missing indexes so doesn't look goofy in docs 2011-07-06 00:40 robe * Get rid of use of array_accum and replace with array_agg (which exists in PostgreSQL 9\8.4+). Now that we only support 8.4+, we can just use array_agg. 2011-07-05 22:02 pramsey * Remove leak in mixed time ptarray case (#1102) 2011-07-05 21:01 strk * Plug some more easy leaks in testers 2011-07-05 20:21 pramsey * Stop up small but universal leak. (#1102) 2011-07-05 18:55 strk * Fix memory leak while computing box3d for nested geometrycollection (revealed by test in cu_geodetic.c) 2011-07-05 18:41 strk * Properly release memory allocated by tester 2011-07-05 17:49 robe * #1076 hanlde of post direction with highways -- 1940 County Road C W, Roseville, MN 55113 , also trim excess space left in street names 2011-07-04 22:51 pramsey * Remove memory leaks when a parse error kicks out in WKT (#1102) 2011-07-04 17:32 robe * #1076 more work toward Highway geocoding -- significant rework of original patch. Still need to parse out the direction information 2011-07-04 15:50 strk * Drop dangling reference to Probe_Geometry_Columns (see #1083) 2011-07-04 15:40 strk * A couple more tests for btree against points: different points, differently cached boxes 2011-07-04 15:34 strk * Have pglwgeom_getbox2d_p compute a bounding box when not cached. Fixes #1023. 2011-07-04 15:12 strk * Document pglwgeom_getbox2d_p. See http://trac.osgeo.org/postgis/ticket/1023 2011-07-04 14:50 strk * More unit test memory leaks and compiler warnings fixed 2011-07-04 14:14 strk * Add test for btree equality of points (#1023) 2011-07-04 13:56 strk * Do not deep-free return from lwcollection_homogenize as it doesn't copy POINTARRAY memory. See #1104. 2011-07-04 12:29 strk * Plug some memory leaks in the unit tests, to help finding lower-level ones... 2011-07-04 12:29 strk * Document memory management of lwdoubles_to_latlon and lwpoint_to_latlon 2011-07-04 11:24 strk * Fix support for MULTICURVEZM and make TIN spelling conformant to other (MixedCase). Add cohomprensive regress test for postgis_type_name(). Closes bug #1096 once again. 2011-07-04 11:24 strk * Add missing circular types to geomtype_struct_array, fixing bug #1094 2011-07-04 11:24 strk * Do not hard-code lenght of geomtype struct array (See #1094) 2011-07-04 10:10 strk * AddGeometryColumn: when complaining about unknown geometry type also report the used name and dimensions (see related bug #1096) 2011-07-04 10:02 strk * Fix unused variable warning when building against GEOS >= 3.3 2011-07-04 09:26 mcayland * Make all PostGIS object files depend upon liblwgeom, so that if liblwgeom is changed then it also triggers a (complete) rebuild of PostGIS. Note as documented in #447 this is an over-cautious approach since it rebuilds all of PostGIS if liblwgeom changes, but at least its a starting point and does actually solve the case whereby a user updates liblwgeom but doesn't force a rebuild of PostGIS. 2011-07-04 09:09 strk * typo 2011-07-04 09:07 strk * Update expected error messages since typmod introduction. Closes ticket #1101. 2011-07-04 09:00 strk * Do not manually delete rows from geometry_columns (which is now a view). Closes ticket #1099. 2011-07-04 07:35 robe * Partial fix for #1076, county roads and highways, but think I might have broken the SELECT (addy).*,* from geocode('16725 Rockford Road, Plymouth, MN 55447') or my data is bad 2011-07-03 21:47 mcayland * Fix for #1088: Too many columns in select crashes pgsql2shp. Instead of a fixed length query string, dynamically allocate the memory based upon the sum of the lengths of all of the column names. 2011-07-03 16:51 robe * #1087 improve rating algorithm. also start to use prepared statements where appropriate (don't put state in prepared part since that would prevent constraint exclusion from kicking in) 2011-07-03 10:45 robe * Add more tests, minor cleanup 2011-07-03 05:03 robe * Update credits and release notes to include change in geometry_columns and management functions, add ST_OffSetCurve to release_notes.xml, add Rafal Magda to people credits list 2011-07-03 01:58 robe * more column width cleanup 2011-07-03 01:52 robe * #1095 clarification of what is mean by geometry_columns not supporting views built the old constraint way 2011-07-03 01:50 robe * #1095 cleanup MIGRATION document 2011-07-03 01:29 robe * #1096 same fix as for linestringZ, apply to geometryM, zm and multilinestringZ 2011-07-03 00:59 robe * #1098 fix UpdateGeometrySRID 2011-07-02 18:19 robe * #1083, #1093: fix typo, delete probe_geometry_columns which is now completely obsolte with gnew geometry-columns view change 2011-07-02 17:53 robe * missed a spot 2011-07-02 17:52 robe * add missing para end tag 2011-07-02 17:25 robe * start describing management functions how typmod changes things --- Populate_geometry_columns, dropgeometrytable, dropgeometrycolumn. More to go. 2011-07-02 16:52 robe * #1096 can't create 2.5d linestrings 2011-07-02 16:29 robe * revise template to give example of optional argument 2011-07-02 13:43 mcayland * Update loader regression test suite to add a simple test for shp2pgsql (much as we now do for pgsql2shp). Note that these tests aren't completely comprehensive and should be expanded, with the long term aim of moving the loader regression tests out of the main regression harness and into CUnit instead. 2011-07-02 12:34 mcayland * Fix up the loader unit tests so that if --with-gui is not passed to configure, the non-GUI tests will continute to run instead of failing compilation. 2011-07-02 09:27 robe * revise wmsservers_new to use new typmod and not directly delete and add to geometry_columns so passes regress 2011-07-02 08:58 robe * #944, #1081, #1083, #1088, #1084: Convert geometry_columns to a view, revise management functions to not update/delete from geometry_columns and to support typmod. Will use typmod behavior as default fix typos in postgis_type_name and delete from geometry_column calls in regress. 2011-07-01 22:36 mcayland * Another attempt to fix #1080 on Windows - it seems that simply opening and closing a pgsql2shp state object is a good way to find all uninitialised variables. 2011-07-01 21:37 mcayland * Revised fix for #1080 based upon backtrace provided by Regina. 2011-07-01 21:32 robe * #1082 get rid of delete from geometry_columns call. Also cleanup argument list to make more modern 2011-07-01 14:34 robe * Benchmark notes 2011-07-01 13:45 robe * itemize more upgrade GOTCHAS 2011-07-01 13:10 robe * convert to CREATE OR REPLACE postgis_constraint_srid 2011-07-01 12:59 robe * put in associated ticket numbers change to unaligned format for easier diffing, add in script to run test suite. Force LF and put svn keywords 2011-07-01 11:47 strk * Add 2 more testcases for ST_OffsetCurve, one of which returning a MULTILINESTRING 2011-07-01 10:59 strk * Use choice="opt" to encode default parameter for ST_OffsetCurve 2011-07-01 10:36 strk * Well, let's run the ST_OffsetCurve regress test only against GEOS-3.3. After all it's known to fail against 3.2 ... (due to http://trac.osgeo.org/geos/ticket/455#comment:1) 2011-07-01 10:14 strk * Test LINESTRING EMPTY return from ST_OffsetCurve 2011-07-01 10:10 strk * Properly convert typed empties coming from GEOS. 2011-07-01 10:10 strk * Add ST_OffsetCurve news item 2011-07-01 09:56 strk * Add ST_OffsetCurve function supporting both GEOS-3.2 and GEOS-3.3+. Uses distance parameter sign to derive left/right side. Includes regress testing and documentation. Based on patch by Rafal Magda. 2011-07-01 09:33 mcayland * Fix #1080: cunit is crashing on test_ShpDumerDestroy(). Looks like the original code omitted to set the default config values causing the addition of a ShpDumperDestroy() call to fall over on some platforms due to uninitialised pointers. 2011-07-01 06:17 robe * Force unix LF. Also get rid of unnecessary call to CREATE INDEX .. we have a missing script for that. 2011-07-01 02:22 robe * Fix for #1086 Issue with parsing out location. also added to regression tests 2011-07-01 00:02 robe * fix build -- had functions installed out of order of dependency 2011-06-30 19:18 robe * add pretty function to return pretty name and use in postgis_constraint_type (seems 3 times as slow with conversion -- will investigate later) -- before my 50 odd goemetry_columns based on all constraint columns returns 75ms now takes 250-300 ms. 2011-06-30 17:16 dustymugs * removed accidental commit of some debug testing 2011-06-30 13:28 dustymugs * fixed logic issues in ST_AsJPEG 2011-06-29 23:14 pramsey * Change parameter order in 900913 (magic!) 2011-06-29 22:40 mcayland * Commit rework of #885 (pgsql2shp fields conversion from predefined list). This patch required extra work to ensure that it was a better fit for the new loader/dumper structure including error reporting, better use of C coding style and altering various names/code locations as appropriate. 2011-06-29 22:40 pramsey * GEOS no like POINT EMPTY (#1060) 2011-06-29 21:10 robe * Itemize some issues with restoring data from old that cause failures 2011-06-29 19:14 robe * Add Hunter Systems Group to credits for funding Geocoder enhancements 2011-06-29 16:26 robe * #949 more legacy cleanup -- add G-M to uninstall, remove accum 2011-06-29 12:56 robe * fix typo in uninstall script 2011-06-29 10:35 robe * #1069: Support for specifying max_results to return. Regress already committed 2011-06-29 05:06 robe * fix for #1073 handling mangled zipcodes and update regress to include these 2011-06-29 04:23 robe * #1077 preliminary regress tests and current outputs (formatting needs cleanup and to be run by script but will deal with that later). Already have a regress failure when compared with docs. 2011-06-28 19:36 strk * Simplify layertrigger tests dropping unneeded operations. The reduction was verified to still trigger bug #950 prior to the fix for it. 2011-06-28 19:36 strk * Apply patch by Andrea Peri to fix topology layer trigger. Includes regress test. Closes ticket #950. 2011-06-28 14:26 robe * #1063 - add update website with released doc version to HOWTO_RELEASE steps 2011-06-28 12:32 robe * fix windows script -- had sh style commented alter schema line instead of windows batch style commented alter schema 2011-06-28 12:21 robe * put in missing homage to GDAL. Also updated the GDAL use list http://trac.osgeo.org/gdal/wiki/SoftwareUsingGdal to include PostGIS 2011-06-28 03:55 robe * Partial fix for #1068 -- handling of misspelled numeric streets such as 13nd or 22th and partial support for numeric streets with fractions like 1/2 2011-06-28 02:50 robe * get rid of drop / recreate norm_addy. It's not necessary yet since we haven't changed it. 2011-06-28 01:27 robe * #1068 partial fix -- trimmed leading/trailing spaces in normalize_address fields so now correctly handles things like W.,N. etc. More fixes coming. 2011-06-27 21:35 dustymugs * - wrote function getSRTextSPI to create one code for getting the srtext of a SRID from the spatial_ref_sys table. - removed plpgsql function _ST_srtext with addition of getSRTextSPI. The regression failure in ticket #1064 should be resolved as a side-affect of the new function as the srtext returned through SPI is copied to an interval variable. 2011-06-27 19:31 pramsey * Ignore GNUMakefile 2011-06-27 19:24 pramsey * Change CompoundString to CompoundCurve 2011-06-27 19:02 dustymugs * modified expected results for rt_pixelvalue. Associated ticket is #1055 2011-06-27 18:53 pramsey * Add migration guide for upgraders 2011-06-27 18:02 pramsey * Fix type name for CompoundCurve 2011-06-27 16:47 mcayland * Edit rt_band_get_pixel() so that the warning message contains the out-of-bound coordinates being accessed. 2011-06-27 14:35 dustymugs * Cleanup of error messages. 2011-06-27 01:53 robe * version garden test files so now named raster_gardentest_20.sql, postgis_gardentest_20.sql. Add reclassarg type example to raster garden objects 2011-06-26 19:44 robe * revise to ignore OUT parameters. Also add 20 to postgis garden output table name 2011-06-26 18:18 robe * change ST_AsX3d from using methodsynopsis back to funcsynopsis. This was an attempt before to stylize default args which didn't work out. 2011-06-26 17:31 pramsey * ST_IsValidDetail and ST_IsValidReason POLYGON CRASH (#712) 2011-06-26 03:15 pramsey * Make test for co-linearity a little more double-barrelled. 2011-06-26 02:29 pramsey * Simplify circle stroking code (#1057) 2011-06-25 23:35 pramsey * Remove reference to algorithm.h from generator.c 2011-06-25 22:36 pramsey * Prototype segmentation code and move lwalgorith.h prototypes into liblwgeom.h and liblwgeom_internal.h 2011-06-25 21:42 pramsey * Convert some BOX3D functions to GBOX 2011-06-25 21:11 robe * correct column names of norm_addy object - they were wrong 2011-06-25 20:32 robe * update release notes 2011-06-25 20:24 robe * #1062 apply typo patch from Kasif Rasul 2011-06-25 19:20 dustymugs * Modified ST_Transform to permit specification of projected raster's scale. This is due to the scale change that occurs when a raster is being reprojected. 2011-06-25 18:15 robe * bounding box clarification && (that it's 2D) 2011-06-25 18:14 robe * minor clarifications 2011-06-25 08:13 robe * #1051 - fix rating logic (typo in direction weight) causing - select (g.addy).*, astext(g.geomout), g.* from geocode('150 2nd Ave S, Minneapolis, MN 55401') as g To return north instead of south. Also change functions to use named args 2011-06-24 23:18 robe * bah pdflatex doesn't like sect3. Just make it a sect2 2011-06-24 21:49 robe * Id on para didn't take -- lets try a sect3 2011-06-24 21:20 dustymugs * Added sanitization of the algorithm parameter of ST_Transform. Refactored the regression test for ST_Transform. 2011-06-24 16:30 robe * put in ancho for changed section and link back from top of What's new to breaking changes section 2011-06-24 16:14 robe * revise 2.0 changed,enhanced, new to also capture paragraphs embedded in sub tags such as warning, note. Was missing some breaking changes ST_Length, ST_GeomFromText etc because it wasn't catching warnings 2011-06-24 14:25 robe * thought had changed to use default params -- guess not. Also stamp in time author info as comment inside function 2011-06-24 13:02 robe * Get rid of note about ST_Transform not working on all platforms. No longer true 2011-06-24 01:28 robe * revert unnecessary edit 2011-06-24 01:20 robe * fix for #1051 -- postDirAbbrev doesn't parse 2011-06-23 23:50 chodgson * further bug fix for #884 2011-06-23 22:29 robe * note about ST_length geography breaking change -- in 1.5 used to return perimeter of a polygon now returns 0 just like geometry 2011-06-23 21:15 robe * time autho stamp signatures 2011-06-23 21:11 robe * fix typos 2011-06-23 21:08 robe * put in author revision id placeholder and have as part of code logic as well 2011-06-23 20:46 dustymugs * Removed rt_raster_transform from rt_api.c and any calls to it since rt_raster_gdal_warp has same results for reprojections. 2011-06-23 20:29 dustymugs * Addition of rt_raster_gdal_warp function in rt_api.c. This was written based upon GDAL's gdalwarp utility to provide a flexible means to reproject, change the scale of, adjust the skew (deskew) of and shift the origin of a raster. RASTER_transform in rt_pg.c has been adjusted to make use of rt_raster_gdal_warp instead of rt_raster_transform. Regression te sts confirm that resulting rasters from rt_raster_gdal_warp are identical to that of rt_raster_transform. The abilities to change a raster's scale, skew and origin have yet to be tested and have no user-accessible SQL functions as of this revision. This will occur in future revisions. The function rt_raster_transform will be removed in a future revision. 2011-06-23 15:36 pramsey * Re-base circular bbox regressions 2011-06-23 13:57 pramsey * PostGIS Box2D (and && operator) gives wrong result for ST_CircularString type (#578) 2011-06-23 13:53 robe * clean up credits a bit 2011-06-23 11:07 robe * #944 support functions to comb out type,srid, dim from constraint based geometries and integration into geometry_columns_v so that non-typmods and typmods of the world can coexist in harmony 2011-06-23 11:01 strk * Don't interpret types as flags in ST_Summary. Fixes bug #1054 (needs automated testing) 2011-06-22 23:13 robe * minor addition to GEOMETRYCOLLECTION(EMPTY) warning 2011-06-22 23:10 robe * #924 - document breaking change 2011-06-22 22:09 pramsey * ST_ForceRHR POLYGON EMPTY crash (#710) 2011-06-22 21:33 pramsey * ST_GeoHash POLYGON Empty crash (#711) 2011-06-22 06:55 robe * Fill in raster coverage protos for ST_Histogram (still need examples for these), fix typo in another function, change ST_SetBandNoDataValue as if it supports default args (the documentation will be consistent with implementation onces #1049 is done) 2011-06-21 06:13 robe * get rid of extraneous proto 2011-06-21 05:45 robe * more fine tuning of output of driver options 2011-06-21 05:25 robe * Fix ST_GDalDrivers output to correctly output options as table. I had thought it was evenly balanced (all options have descriptions), but that is not the case so origianl example had the name and descriptions mismatched 2011-06-21 05:05 dustymugs * Refactored code and removed the use of SET_VARSIZE for RASTER_band to fix segfault. Associated ticket is #1044. 2011-06-21 04:18 robe * change bigint to integer for ST_ValueCount record outputs 2011-06-21 03:26 robe * document ST_AsJPEG and fill in missing protos for ST_ValueCount 2011-06-21 01:52 robe * Get rid of removed ST_SummaryStats proto and add new ST_SummaryStats proto 2011-06-20 21:15 pramsey * ST_Dump with GSerialized POINT EMPTY and EWKT/AsText mismatch (#746) 2011-06-20 17:08 pramsey * Increase size of generator.c static buffer. (#583) 2011-06-20 16:58 pramsey * geography: ST_Intersects, ST_DWithin gbox_overlaps: geometries have mismatched dimensionality (#1037) 2011-06-20 14:55 dustymugs * Changed the regression tests for ST_Transform in preparation for testing replacement ST_Transform function with different underlying code. 2011-06-20 11:37 strk * Add missing SQL/MM functions in the status section (TODO) 2011-06-20 09:29 robe * #1040 -- ST_MinimumBoundingCircle -- replace X(), Y() deprecated calls with ST_X(), ST_Y(). Also changed to use default args. We really need regression tests for this function. Will put on separate task. 2011-06-19 06:24 robe * more cleanup of hard upgrade instructions 2011-06-19 05:52 robe * Amend hard upgrade instructions to remove stuff that is obsolete and add in additional steps needed for PostGIS 2.0. Also update creating new spatial database to include instructions for installing raster and topology support 2011-06-19 00:31 robe * add index check / generation for soundex, lower, geometry gist, and least_hn 2011-06-18 22:16 robe * Fix for #1025 -- Geocoder Failing with NORTH EAST is street name 2011-06-18 18:24 pramsey * Error message change 2011-06-18 07:35 robe * hmm lets try that again 2011-06-18 07:34 robe * backout some code didn't mean to commit 2011-06-18 07:29 robe * Found some indexes I missed -- added to tiger_loader, also #1036 create missing_indexes generation script to back install. Still need to put in logic for some more indexes, but htis is a good start. Also documented new function 2011-06-18 06:03 robe * fix error in last commit 2011-06-18 05:33 robe * get rid of unnecessary auto casting 2011-06-18 05:15 robe * #1035 gluing on .0 is making least check always return 0. 2011-06-18 03:41 robe * Change ST_Length, ST_Perimeter for geography to use default parameters, document ST_Perimeter(geography,use_spheroid) 2011-06-17 22:36 pramsey * Quiet regression failure for minor rounding difference. 2011-06-17 22:18 pramsey * Bounding box calculation for straight CircString fails (#668) 2011-06-17 21:26 pramsey * Retrieving and storing Geography column data through JDBC does not work (#350) 2011-06-17 21:11 pramsey * Define alias ST_Perimeter (for geography ST_Length) (#526) 2011-06-17 20:33 robe * #1032 fix typos 2011-06-17 20:14 robe * change geography to geometry and limit view to only output tables and views 2011-06-17 20:06 dustymugs * fixed parameter passing in ST_AsTiff 2011-06-17 15:16 dustymugs * Refactored ST_SummaryStats so that there is a non-user _ST_SummaryStats that is the backend of all ST_SummaryStats and ST_ApproxSummary stats functions. This eliminates the "sample_percent" parameter from the one ST_SummaryStats function that had it. 2011-06-16 21:01 pramsey * Partial typmod support for PostGIS geometry (#944) 2011-06-16 20:29 robe * Some cleanup. change ST_AsGDALRaster example using spatial ref to agree with new syntax of just passing in the srid. 2011-06-16 02:16 robe * put in missing tag 2011-06-16 02:08 robe * document &&& nd interacts bounding box operator 2011-06-15 23:59 pramsey * Fix up selectivity and operators a little 2011-06-15 20:22 pramsey * Add a couple more GBOX functions to map to B2DF4 requirements 2011-06-15 15:43 dustymugs * Changed band pixel types to 64BF instead of 32BF so that the warning messages for data getting converted are mitigated. 2011-06-15 14:29 dustymugs * Added value for nBandCount attribute of GDALWarpOptions in rt_raster_transform function. This is based upon the discussion found at: http://lists.osgeo.org/pipermail/gdal-dev/2011-May/028730.html Related ticket is #1015 2011-06-15 12:44 robe * #722 - get rid of transform and remainder of SnapToGrid deprecated family of functions. Add to #945 uninstall_legacy and also legacy.sql.in.c files 2011-06-15 01:25 robe * Change ST_MapAlgebra to use default args and amend the documentation to reflect change. In so doing fix #969 - inconsistent order of args, #967 raster regress failures on 9.0 and 9.1 2011-06-14 19:32 dustymugs * Changed SRID to something within the range permitted by GSERIALIZED. As of this revision, all raster regression tests pass successfully. 2011-06-14 16:21 pramsey * bug in BOX2DFLOAT4_in function due to GSERIALIZED_ON change (#1020) 2011-06-14 16:04 dustymugs * With GSERIALIZED_ON enabled, adapted code that needs preprocessor conditions. Basically instead of "geometry_gist_sel" and "geometry_gist_joinsel", GSERIALIZED_ON uses "contsel" and "contjoinsel" 2011-06-14 08:20 strk * Do not explicitly name GIST opclass (was renamed). Fixes topology after the GSERIALIZED switch. 2011-06-14 08:20 strk * Fix libiconv linker flags 2011-06-14 04:26 pramsey * Apply bug in BOX2DFLOAT4_in function due to GSERIALIZED_ON change (#1020) from dustymugs 2011-06-13 21:47 dustymugs * Fixed memory leak in RASTER_asGDALRaster of rt_pg.c and left note in comments of rt_raster_to_gdal 2011-06-13 21:31 pramsey * Move from GSERIALIZED off by default to on by default. Adjust minor regression changes as necessary. 2011-06-13 20:20 pramsey * Allow cunit tests to build and run in OS/X 2011-06-13 19:51 pramsey * Add svn:ignores for some new derived files. 2011-06-13 12:30 robe * update 1.5.3 release notes 2011-06-13 11:25 robe * #609 revise JDBC to use non-deprecated calling syntax 2011-06-13 01:32 robe * surpress outputting sql if not in debug mode 2011-06-13 01:31 robe * change to return as much address as possible even if no fullname at least try to return city, state, zip 2011-06-12 14:33 robe * fix typo in reverse_geocode name and get rid of other prot since changed to use default args 2011-06-12 06:34 robe * fix division by zero issue 2011-06-12 04:55 robe * make debug statement conditional 2011-06-12 04:52 robe * significantly improve speed of reverse geocode (when all states loaded), but using CTEs and unparameterizing query (parameterized often does not use inheritance), reverse_geocode to use default parameters, put in table column comments to describe some of what loader columns mean. 2011-06-11 19:26 dustymugs * Added function parameter "header_only" to rt_raster_deserialize. This instructs the function to only extract the raster header. All functions calls to rt_raster_deserialize in rt_pg.c and testwkb.c have been modified to account for the "header_only" parameter. In addition, functions that can use PG_DETOAST_DATUM_SLICE have been modified to use it. Associated tickets are #867 and #985. Now to work on valgrinding rt_pg.c 2011-06-11 19:06 dustymugs * Removed the ST_SummaryStats wrappers: ST_Sum, ST_Mean, ST_Stddev, ST_MinMax. Only ST_Count is preserved as it has a shortcut for when "exclude_nodata_value" is FALSE. Refactored regression test for rt_transform due to removal of some ST_SummaryStats wrappers and make the tests no longer about being exact to specific values but more about being in the appropriate contexts. Associated ticket is #1005 and to some degree, #985. 2011-06-11 13:41 robe * Sort what's new 2.0 by name of section insted of id since raster ids start with RT_ they are being sorted at the top above everything else which is confusing 2011-06-11 05:27 robe * Fix ST_BandMetaData, ST_AsGDalRaster (they take defaults now so prots have ben removed) 2011-06-11 04:59 dustymugs * Refactored rt_raster_replace_band in rt_api.c to return the replaced band. Additional memory cleanups in testapi.c due to segfault and leaks. 2011-06-11 01:09 robe * Note about issues with raster ST_Transform 2011-06-11 00:43 robe * document raster ST_Transform function. Will provide examples later. 2011-06-11 00:05 dustymugs * Fixed bunch of memory leaks in rt_api.c and testapi.c. Will need to valgrind the regression tests to clean up the leaks in rt_pg.c 2011-06-10 23:19 robe * get rid of ST_SRSText usage is gone and replaced with just srid so parallel with geometry. Update all the function doco -- they used to use srstext, but now they use srid. 2011-06-10 23:01 dustymugs * Refactored how GDAL warp options are freed. I believe I was prematurely freeing the options. Associated ticket #1015 2011-06-10 19:49 pracine * Getting pixel value at out of range coordinate should only return a warning. Was broken at r7106. Added a check. 2011-06-10 18:18 dustymugs * Fixed error messages. 2011-06-10 18:14 dustymugs * Explicitly set GDALWarpOptions element padfSrcNoDataImag as it seems some folks are having regression error. Based upon the GDAL code, explicitly setting padfSrcNoDataImag and padfDstNoDataImag should eliminate the error message that is occurring. Associated tickets are #925 and #1015. 2011-06-10 17:24 robe * #609 jdbc error in documentation 2011-06-10 17:00 robe * #666 -- strange I don't recall this being an issue on PostGIS 2.0, but seems to be also. Still need regress test for it though. 2011-06-10 16:16 pramsey * Update NZ projections for grid transformation support (#631) 2011-06-10 15:19 dustymugs * Rewrote ST_BandMetaData to use a C function instead of sequential calls for the metadata of a raster's band in plpgsql. Also added regression tests for ST_MetaData and ST_BandMetaData due to C functions. Associated ticket #1012 2011-06-10 05:13 robe * more description on reclass expressions 2011-06-10 01:52 robe * more examples for ST_Point and example converting to geography 2011-06-09 21:27 pramsey * Minor change to work with gserialzed 2011-06-09 21:15 dustymugs * Rewrote ST_Metadata to make use of a C function instead of sequential calls for the metadata of a raster in plpgsql. Associated ticket #1012 2011-06-09 21:12 pramsey * Remove some compile warnings 2011-06-09 21:12 pramsey * Add some ignores 2011-06-09 20:51 pramsey * Bad handling of Inf values in GEOS (#1013) 2011-06-09 20:32 robe * #448 add CUnit requirement for testing 2011-06-09 18:55 dustymugs * Replaced the parameter "srs" in ST_AsGDALRaster with "srid" so as to match that of ST_Transform and other functions that deals with spatial reference systems. In doing so, this eliminates the user function ST_srtext and just has a hidden _ST_srtext function for use by the underlying C functions. Another nice benefit is that I was able to reduce the number of user-facing functions. Associated ticket #1011 2011-06-09 16:01 robe * #1009 typo in index creation 2011-06-08 22:47 dustymugs * - added additional tests that shouldn't require datum shift files for proj.4. - refactored output that would be double precision to be rounded 2011-06-08 21:10 dustymugs * Rewrote how the standard/sample deviation is computed in ST_SummaryStats for coverage tables. It now extends the existing use of a single-pass standard deviation calculation to be able to do the calculation for a coverage table. Associated ticket #985. 2011-06-08 00:10 dustymugs * forgot to comment out debug code for ST_Histogram thus causing rt_histogram regression to fail 2011-06-08 00:00 dustymugs * fixed ST_SummaryStats for coverage tables where the sum of all tiles was not being computed. Associated ticket #1005 Also added shortcuts to ST_Count for when parameter "exclude_nodata_value" is FALSE, just compute the count based upon the raster's dimensions. Performance difference between the normal route and the shortcut is negligible for small rasters but noticable when run on large rasters and coverage tables 2011-06-07 22:59 dustymugs * Added support for coverage tables to ST_Histogram. This entailed adding the ability to explicitly specify the min and max values in the underlying C function rt_band_get_histogram. The min and max parameters should ONLY be used by the established coverage table handling ST_Histogram functions as the returned percent element of the histogram type is changed from returning the percentage to returning the sum of counts for that histogram. Associated ticket is #934. 2011-06-07 18:21 dustymugs * Add ST_Transform function that achieves the primary purpose of reprojecting a raster to a new projection system. This makes use of the GDAL Warp API function GDALAutoCreateWarpedVRT(). In the future, the underlying C function is expected to be refactored to support skewing and pixel scaling at the same time the raster is reprojected. Really minor changes to rt_pg/rt_pg.c adding initilization values to variables for eliminating compile warnings in Windows (thanks Pierre). Fixed variable "status" in rt_raster_from_gdal_dataset() of rt_core/rt_api.c Associated ticket is #925 2011-06-07 13:04 robe * Put legacy.sql in varname tag so prints out as courier and stands out more. Some clarification on the geography/geometry choice question 2011-06-07 12:37 robe * more corrections of erroneous statements 2011-06-07 12:16 robe * Fix minor formatting issues 2011-06-07 07:45 robe * forgot output column in histogram type 2011-06-07 07:41 robe * more correction in ST_Histogram explanation 2011-06-07 07:26 robe * make description of programming match what is going on in histogram example 2011-06-07 07:24 robe * missing one proto for ST_Histogram 2011-06-07 07:20 robe * add description ST_Histogram inputs 2011-06-07 07:10 robe * document histogram type 2011-06-07 07:02 robe * document ST_Histogram 2011-06-05 21:49 dustymugs * bug fix of r7325 where the wrong variable is used in the "for" loop at line 5442 2011-06-05 20:52 dustymugs * - added additional function parameters "bandNums" and "count" to rt_raster_to_gdal_mem so that the GDAL dataset created only contains those bands specified - any calls to rt_raster_to_gdal_mem function was refactored for the new function parameters - refactored rt_raster_dump_as_wktpolygons to make use of rt_raster_to_gdal_mem so as to reduce duplicate code and improve cleanliness 2011-06-05 07:55 robe * fix ambiguous column issue now that new zcta5 also has statefp 2011-06-05 07:35 robe * more speed optimizations 2011-06-05 07:07 robe * revise function s so lookup zip utilizes constraint exclusion 2011-06-05 06:13 robe * #1004: census has finally released zcta5 for 2010. Get rid of zcta500 table. replace with a more generic named zcta5. Revise loader state script to load in zcta510 data and revise functions to use new zcta5 table. 2011-06-04 02:11 robe * Fix more erroneous statements about ST_Reclass 2011-06-04 00:59 robe * get rid of TODO note on ST_REclass exmaple -- I already did it. 2011-06-04 00:58 robe * huh more mistakes in ST_Reclass 2011-06-03 17:02 dustymugs * Added rt_raster_from_gdal_dataset function to rt_core/rt_api.c. This function provides the functionality needed to convert a GDAL dataset into a PostGIS Raster object. 2011-06-03 15:19 jorgearevalo * Check for new GDALFPolygonize function. If it isn't present, the old GDALPolygonize is called. Related ticket #650. 2011-06-03 06:00 robe * add missing ST_ValueCount protos, get rid of ' around , causing comment installation to fail. 2011-06-02 22:51 robe * fix wording of reclassarg and summarystats 2011-06-02 22:25 robe * Fix typo 2011-06-02 21:54 robe * document ST_Band 2011-06-02 21:27 robe * get rid of extra paragraph marks 2011-06-02 21:13 robe * example how to use variadic version of ST_Reclass raster function, finish off reclassarg type description, add summarystats type 2011-06-02 05:05 robe * Clarify GDAL version requirements for Mapserver to load PostGIS raster 2011-06-01 23:50 jorgearevalo * Fixed ticket #650. You need to update your GDAL copy to a release up to 22476 to make it work. 2011-06-01 12:31 strk * The box2d of an empty geometry is NULL, not a point. Closes ticket #938 and regress-tests it. 2011-06-01 11:55 robe * put a space after parameter name to try to prevent getting shoved in with type in reclassarg type def 2011-06-01 08:22 robe * st_recalss -- hmm screwed up on example. Had overlapping ranges before. 2011-06-01 08:17 robe * move raster types to raster section (there are way too many now to try to lump into reference_type and do case statements to exclude from postgis_comments). Revise raster_comments to look for types in reference_raster. Add docu for ST_Reclass and reclassarg type. Need at least one more example to show how to use recalssargs. 2011-05-31 22:54 dustymugs * additional code refactoring in rt_raster_from_band 2011-05-31 22:47 dustymugs * code refactored and added copying of raster attributes to new raster in rt_raster_from_band 2011-05-31 01:50 robe * #960 get rid of obsolete ST_AsPNG protos to make consistent with implementation 2011-05-31 01:39 robe * #960 get rid of ST_AsGDALRaster proto and update remaining to be consistent with new default args. 2011-05-31 01:29 robe * #961- reduce number of functions - Get rid of st_area(geography) and change st_area(geography, use_spheroid = true) and also have named argument names so callable by named args 2011-05-31 01:09 robe * document missing proto for createtopology 2011-05-31 00:54 robe * Document ST_SummaryStats raster function 2011-05-30 20:18 dustymugs * Added default values for function parameters of ST_AsTIFF, ST_AsJPEG and ST_AsPNG. Associated ticket is #960 2011-05-30 15:48 dustymugs * Added default parameter for ST_AsGDALRaster Associated ticket is #960 2011-05-30 14:53 dustymugs * renamed all instances of "hasnodata" function argument to "exclude_nodata_value" in SQL functions (and underlying code where appropriate) ST_SummaryStats, ST_Count, ST_Sum, ST_Mean, ST_StdDev, ST_MinMax, ST_Quantile, ST_Histogram, ST_ValueCount and ST_ValuePercent 2011-05-30 09:45 robe * get rid of bash line -- seems unnecessary and breaks if multiple states. Forgot cd which was making secondary states fail loading. 2011-05-30 08:28 robe * 2011-05-30 08:27 robe * more corrections and one more example for ST_ValueCount 2011-05-30 07:39 robe * fix errors in notes 2011-05-30 03:57 robe * fill in more missing protos for st_valuecount -- still more to go 2011-05-30 03:43 robe * put in missing protos for st_quantile. Revise comment generator scripts to properly handle OUT parameters 2011-05-30 02:52 robe * document ST_quantile -- still missing some protos (also get rid of obsolete warnings) 2011-05-30 01:56 robe * reference to st_valuecount in st_dumpaspixels 2011-05-30 01:51 robe * Move Bborie's new cool stat functions into their own section. Add documentation for st_valuecount -- more coming for other raster functions. macro replace hasnodata with exclude_nodata_value which hopefully will be clearer to everyone. The raster codebase needs to be changed to agree with new names (mostly for those utilizing named arguments in PostgreSQL 9.0+). In enhnced section --put a note that hasnodata was renamed to exclude_nodata_value. 2011-05-30 00:30 robe * add remarked out line to set search path -- suggested by Brian Hamlin. Also some other minor changes 2011-05-28 23:32 robe * Get rid of deprecated call to centroid 2011-05-28 15:07 robe * fix for #996 also had to revise least and greatest helper functions to deal with to and froms that can't be converted to integers. Also added missing indexes to base tables (helps the planner with inherited tables though it never really uses those indexes) 2011-05-28 13:29 robe * fill in some missing licensing headers and svn tags 2011-05-28 11:46 strk * It's "spatialreference.org", not "spatialreferencing.org" (srid=900913) 2011-05-28 11:24 robe * revise readme wording so those unix users who aren't on linux won't be quite as offended 2011-05-28 11:18 robe * fix for #995 handling lower level fips. Also many fixes for #908 sh tiger loader profile. Testing now and will close out if confirmed its fixed. Also put in a note in the .sh and .bat that for PostgreSQL 9.1+ have to install fuzzystrmatch with the CREATE EXTENSION syntax 2011-05-27 23:35 dustymugs * - remove OUT parameters on those functions that only return a single value. - updated regression tests that made use of those functions returning single values with OUT parameters 2011-05-27 14:42 dustymugs * Added default values for function arguments of ST_Reclass 2011-05-27 14:01 strk * ST_AddEdgeModFace is complete... 2011-05-27 14:01 strk * Document ST_AddEdgeModFace, tweak documentation of ST_AddEdgeNewFaces [RT-SIGTA] 2011-05-27 14:01 strk * Implement topology.ST_AddEdgeModFace. Includes regress test. [RT-SIGTA] 2011-05-27 12:15 robe * fix indentation 2011-05-27 10:18 strk * Simplify face registration by the end of ST_AddEdgeNewFaces [RT-SIGTA] 2011-05-27 09:51 strk * ST_AddEdgeNewFaces: another test splitting a face with holes on both sides [RT-SIGTA]. 2011-05-27 09:34 strk * topology.ST_AddEdgeNewFaces: do not needlessly replace face of holes found in a face splitted by the newly added edge. Regress test it. [RT-SIGTA]. 2011-05-27 08:34 strk * Add an optional force_new parameter to topology.ST_AddFace to force creation of a new face when one already exists. Regress test and document. [RT-SIGTA] 2011-05-27 08:34 strk * fix cpp extra token warning 2011-05-27 07:13 robe * change ST_ConcaveHull to use default parameters 2011-05-27 06:46 robe * preliminary documentation for ST_Count 2011-05-27 00:02 dustymugs * - Added default values for function parameters of ST_ValueCount and ST_ValuePercent. Removed duplicative functions of the same. - Tweaked the regression tests for ST_ValueCount and ST_ValuePercent as one question for each function type was too ambiguous. 2011-05-26 23:32 dustymugs * Added default parameter values for ST_Quantile functions 2011-05-26 23:11 dustymugs * Added default values for function parameters of ST_Histogram and removed duplicative functions. 2011-05-26 22:50 dustymugs * Forgot to delete the commented out functions of ST_SummaryStats and dependants from r7260 2011-05-26 22:40 dustymugs * Added default values for function parameters of ST_SummaryStats, ST_Count, ST_Sum, ST_Mean, ST_StdDev and ST_MinMax. 2011-05-26 21:35 dustymugs * Added default parameter for ST_Band and reduced function count by 1. Added additional regression tests for ST_Band. 2011-05-26 21:23 dustymugs * Changed to STABLE from IMMUTABLE for all functions that operate on a coverage using the function parameters "rastertable" and "rastercolumn" 2011-05-26 20:09 dustymugs * changed name "proportion" to "percent" for ST_Histogram to stay consistent with ST_ValuePercent 2011-05-26 20:04 dustymugs * Addition of ST_ValuePercent, sibling of ST_ValueCount. This function provides the ability to determine the percentage of a raster's band that is of a user-specified value. Assocated ticket is #990 Also specified STRICT for functions with "searchvalue" (the singular) argument. 2011-05-26 15:43 dustymugs * Changed the datatype for "count" from integer to bigint. This should allow the "count" return value to handle large numbers coming from the various coverage functions. 2011-05-26 14:01 robe * #949 Add all E and F deprecated functions to uninstall_legacy.sql.in.c and minor sorting and casing cleanup. 2011-05-26 07:26 strk * Error handling refinements in topology.ST_AddEdgeNewFaces (#988) Check for given edge having two distinct vertices before getting a new edge id from sequence, and before testing it for crossing nodes (or it'd give a confusing error message). Refine error message about no-segment edges to not talk about nodes. [RT-SIGTA] 2011-05-26 04:23 dustymugs * Adds ST_ValueCount to count the number of times a user-provided value or all values occurs in a raster's band. Associated ticket is #953 2011-05-25 23:38 robe * 2011-05-25 23:37 robe * put header on table 2011-05-25 21:09 robe * try group 2011-05-25 18:42 pramsey * #661 Type info of geography columns incomplete - pg_dump output wrong 2011-05-25 18:28 dustymugs * Add ST_Count and ST_Sum functions that are fronts for the count and sum values of ST_SummaryStats Associated tickets are #985 (ST_Count) and #986 (ST_Sum) 2011-05-25 13:13 robe * 2011-05-25 12:49 robe * 2011-05-25 12:48 robe * 2011-05-25 12:35 robe * 2011-05-25 12:29 robe * revert 2011-05-25 12:13 robe * define style for methodsynopsis 2011-05-24 18:53 robe * missed a spot 2011-05-24 18:50 robe * experiment with methodsynopsis evidentally seems to support default parameters and conditional args, we need to move from funcsynopsis (designed for C) to methodsynopsis. This is what PHP uses -- https://doc.php.net/php/dochowto/chapter-skeletons.php 2011-05-24 15:21 strk * Stop using astext legacy function in raster tests -- make check finally succeeds with both raster and topology enabled 2011-05-24 14:47 strk * Allow dumping universal face edges with ST_GetFaceEdges. Do it in the correct order. Fixes bug #984. [RT-SIGTA] 2011-05-24 14:27 dustymugs * - Added test testgdalraster.in which properly tests the output of ST_AsGDALRaster. This test makes use of rtgdalraster.py found in raster/scripts/python, which itself requires psycopg2. - Refactored rt_asgdalraster.sql, rt_astiff.sql, rt_asjpeg.sql and rt_aspng.sql to no longer attempt to validate the output of the respective functions with an MD5 checksum but rather be a test of the functions' behaviors. 2011-05-24 13:49 strk * ST_GetFaceGeometry: throw SQL/MM exception when asked for the Universal Face geometry. Fixes bug #973 [RT-SIGTA] 2011-05-24 13:47 strk * topology.ValidateTopology: do not construct the geometry of universal face, it's not used anyway. Closes bug #977. [RT-SIGTA] 2011-05-24 13:15 strk * ST_AddEdgeNewFaces: don't get fooled by empty segments when computing azimuts [RT-SIGTA] 2011-05-24 12:14 strk * Fix a bogus test for ST_AddEdgeNewFaces (was missing to check informations about the newly added edge) -- [RT-SIGTA] 2011-05-24 10:45 strk * Add another (successful) test for ST_AddEdgeNewFaces when creating a new face in the universal face by closing a ring around an existing non-isolated edge [RT-SIGTA]. 2011-05-24 09:22 strk * Add TODO item and SQL/MM compatibility note in ST_ChangeEdgeGeom 2011-05-24 09:13 strk * Test ST_ChangeEdgeGeom with edge crossing 2011-05-24 08:45 strk * ST_ChangeEdgeGeom: check existence of given edge, reduce scans used to check start/end point and simplify the code, regress test the fix. Fixes bug #979. 2011-05-24 08:22 strk * No functional change: tabs to 2 spaces. 2011-05-24 08:13 strk * Move tests for ST_ChangeEdgeGeom into a dedicated file. Prepared for ticket #979. [RT-SIGTA]. 2011-05-24 07:54 strk * Test ST_GetFaceGeometry behavior when given face_id 0 (Universal Face). See ticket #973. 2011-05-24 07:04 strk * ST_AddIsoEdge: tell that a node is isolated by only looking at containing_face rather than recomputing it. Closes ticket #978. [RT-SIGTA] 2011-05-24 06:55 strk * Do not let ST_AddIsoNode add non-isolated nodes. Allow specifying 0 as the isolated node face and check it is correct. If containing_face is given as null then compute it. Patch by Andrea Peri. [RT-SIGTA] 2011-05-24 06:44 robe * Fix for #981 - using astext legacy function in tests 2011-05-24 06:43 robe * fix typos 2011-05-24 05:48 robe * #722 remove Centroid and Dump, #949 more additons to uninstall (Centroid, Dump, addbbox,dropbbox) 2011-05-24 05:19 robe * fix link error 2011-05-24 05:05 robe * #722 remove AsBinary and AsText, #949 more additons to uninstall (AsText,Asbinary, other output functions) 2011-05-24 03:03 robe * Document ST_ChangeEdgeGeom, revise function to confirm to new plpgsql coding standard. Get rid of redundant && check since its already encapsulated in ST_Intersects and ST_Within 2011-05-23 13:30 strk * update the list of what's implemented and what not 2011-05-23 13:30 strk * Style-only change: tab to spaces in ST_AddIsoEdge, shorten name of test topology 2011-05-23 13:13 strk * Fix test for ST_AddIsoEdge verifying "geometry intersects an edge" exception. Fix exception message raised when attempting to insert a closed edge. Update regress test accoringly. 2011-05-23 12:49 strk * ST_AddIsoEdge: set containing_face of nodes connected by the newly added edge to null as the nodes are not isolated anymore. Regress test it. Closes ticket #976. 2011-05-23 12:33 strk * Put tests for ST_AddIsoEdge in their own file. Fix use of ! rather than "not" for negating booleans in pl/pgsql. 2011-05-23 11:30 strk * Update load_topology.sql to properly set MBR field of faces. 2011-05-23 11:28 strk * And fix expected test output from st_addedgenewfaces (dunno how I could commit such a partial change...) 2011-05-23 11:26 strk * Oops, forgot to uncomment temporarely disabled lines 2011-05-23 08:44 strk * Test that topology.ST_AddEdgeNewFaces properly updates isolated edges contained in a newly created face [RT-SIGTA] 2011-05-22 16:06 dustymugs * - fixed band count check in st_asjpeg and st_aspng - fixed regression expected output for rt_aspng 2011-05-22 06:33 robe * Start work on #949 uninstall_legacy.sql and also some minor cleanup additions/sorting fo existing 2011-05-20 20:18 robe * treating as executable didn't help - going to reinit my db as utf-8 instead 2011-05-20 13:48 jorgearevalo * Commented line that caused memory crash because an invalid free. Related ticket #958. 2011-05-19 20:36 strk * topology.AddEdge: make edge linking self-consistent (each added edge will form a proper loop) 2011-05-19 04:54 robe * fix typo 2011-05-19 04:53 robe * support for 2D points, add multipoint 2d / 3d to cunit. Add a mapping table to documentation to clarify how we map PostGIS geometries to X3D equivalent. 2011-05-19 04:04 robe * clean up some compiler warnings 2011-05-18 23:33 dustymugs * - taking a suggestion from strk in #958, all regression tests for functions related to ST_SummaryStats has been rounded to 3 decimal places - added additional argument checks for pgraster to rt_pg.c - changed floating point comparisons in rt_pg.c and rt_api.c 2011-05-18 16:18 strk * ST_AddEdgeNewFaces is now implemented.. 2011-05-18 16:08 strk * topology.ST_AddEdgeNewFaces implementation and regression test [RT-SIGTA] 2011-05-18 14:18 dustymugs * ST_SummaryStats returns the sum as part of the summary stats. _ST_SummaryStats(rastertable, rastercolumn) function changed to make use of the sum and compute a straight mean (sum / count) rather than computing a weighted mean. 2011-05-18 13:59 strk * topology.AddFace(): properly update left/right face for edges _contained_ in the newly registered face and containing_face for isolated nodes in it, refine documentation about it [RT-SIGTA] 2011-05-18 13:32 robe * damn mathml you mock me! anyrate put in defaults as Pierre asked for ST_ASTiff (hope www... fixes their damn mathml). We really got to stop downloading that file. 2011-05-18 12:55 robe * define ST_SRText and backref 2011-05-18 12:41 robe * fix ST_ASTIFF incorrect types start putting in defaults 2011-05-18 12:05 robe * let me try to put the opt somewhere else. 2011-05-18 11:12 robe * more mistakes 2011-05-18 11:08 robe * fix some incorrect statements 2011-05-18 08:58 strk * topology.GetRingEdges() implementation and test. This is the first real user of next_left_edge/next_right_edge fields in the edge table. [RT-SIGTA] 2011-05-18 07:23 strk * Add a short paragraph about the semantic of edge's next_left_edge and next_right_edge fields. 2011-05-18 07:15 robe * Fix ST_AsTiff function proto typos 2011-05-18 05:43 robe * Document ST_AsTIFF and fix some missttatements about ST_ASPNG. Also pretend like we are using default args already 2011-05-18 05:08 robe * get rid of opt 2011-05-18 04:43 robe * bah just use brackets for optional args -- docbook seems to be ignoring the choice='opt' tag 2011-05-18 04:13 robe * try to get optional argument to have brackets using optional tag 2011-05-18 00:00 robe * revise to put optional arguments in [] in the description. Damn dtd keeps downloading 2011-05-17 22:50 robe * Nothing like experimenting with myself. Change ST_AsX3D to use default parameters and reduce down to one proto 2011-05-17 19:35 strk * Appropriately tag GML functions as STABLE, IMMUTABLE or VOLATILE - see bug #955 2011-05-17 17:51 robe * more back ref 2011-05-17 17:45 robe * fix typos add backrefere to ST_GDALDrivers 2011-05-17 15:58 strk * Strip 'SELECT' feedback from regression test outputs 2011-05-17 15:27 dustymugs * changed the dimensions of the raster generated for the summary stats test from 10000 x 10000 to 100 x 100 2011-05-17 15:01 dustymugs * Code cleanup of uncorrected statement from r7170 Associated ticket is #954 2011-05-17 14:46 dustymugs * refactored code that attempted to modify a function parameter as PostgreSQL 8.4 sets all function parameters as CONSTANT, unlike PostgreSQL 9.0 2011-05-17 14:42 strk * Tag some functions as STABLE or even IMMUTABLE (from volatile) - see bug #955 2011-05-17 14:04 dustymugs * refactored usage of snprintf to use explicit string sizes rather than what is a gcc specific implementation where the return value of snprintf is the ideal size of the string 2011-05-17 07:33 strk * Fixed bug in sample topology load (face id sequence value) [RT-SIGTA] 2011-05-17 06:34 robe * revise to correctly comment functions with OUT parameters 2011-05-17 05:37 robe * fix typo 2011-05-17 03:02 robe * document ST_GDALDrivers and back reference to ST_AsGDALRaster 2011-05-17 02:06 robe * Document ST_AsGDALRaster 2011-05-17 00:55 robe * forgot availability and GDAL dependency note on ST_AsPNG 2011-05-17 00:40 robe * First draft of ST_ASPNG doco. Need some more examples and perhaps even pictures. 2011-05-16 22:01 dustymugs * - fixed usage of function parameter "hasnodata" to follow standardized interpretation - added copyright notices for work done by Bborie Park funded through the Regents of the University of California 2011-05-16 19:56 dustymugs * removed duplicative ST_Histogram function 2011-05-16 19:54 dustymugs * Add ST_AsPNG - added SQL functions for ST_AsPNG - added regression tests Associated ticket is #342 2011-05-16 19:52 dustymugs * Add ST_AsJPEG function - added SQL functions for ST_AsJPEG - added regression tests Associated ticket is #340 2011-05-16 19:50 dustymugs * Add ST_AsTIFF function - add SQL functions for ST_AsTIFF - add regression tests Associated ticket is #341 2011-05-16 19:48 dustymugs * Add ST_AsGDALRaster function and helper functions ST_GDALDrivers and ST_srtext - added rt_raster_to_gdal, rt_raster_gdal_drivers and rt_raster_to_gdal_mem functions to rt_core/rt_api.c and rt_api.h - added test cases to test/core/testapi.c - added RASTER_asGDALRaster and RASTER_getGDALDrivers to rt_pg/rt_pg.c - added SQL functions - added regression tests Associated ticket is #901 2011-05-16 19:43 dustymugs * Added ST_Reclass function - added rt_band_reclass and rt_raster_replace_band to rt_core/rt_api.c and rt_api.h - added test case to test/core/testapi.c - added RASTER_reclass to rt_pg/rt_pg.c - added SQL functions for ST_Reclass - added regression tests Associated ticket is #903 2011-05-16 19:39 dustymugs * Added ST_Quantile functions - added function rt_raster_get_quantiles to rt_core/rt_api.c and rt_api.h - added test case to test/core/testapi.c - added function RASTER_quantile to rt_pg/rt_pg.c - added SQL functions for ST_Quantile - added regression tests Associated ticket is #935 2011-05-16 19:36 dustymugs * Added ST_Histogram functions. - added function rt_band_get_histogram to rt_core/rt_api.c and rt_api.h - added test case to test/core/testapi.c - added function RASTER_histogram to rt_pg/rt_pg.c - added SQL functions for ST_Histogram - added regression tests Associated ticket is #934 2011-05-16 19:34 dustymugs * Added ST_MinMax function - added SQL functions for ST_MinMax - added regression tests Associated ticket is #902 2011-05-16 19:32 dustymugs * Added ST_StdDev function - added SQL functions for ST_StdDev - added regression tests Associated ticket is #932 2011-05-16 19:30 dustymugs * Added ST_Mean function. - added SQL functions for ST_Mean to rt_pg/rtpostgis.sql.in.c - added regression tests Associated ticket is #931 2011-05-16 19:17 dustymugs * Addition of ST_SummaryStats function. - added function rt_band_get_summary_stats to rt_core/rt_api.c and rt_api.h - added test case to test/core/testapi.c - added function RASTER_summaryStats to rt_pg/rt_pg.c - added SQL functions for ST_SummaryStats to rt_pg/rtpostgis.sql.in.c - added regression tests in test/regress Associated ticket is #930. 2011-05-16 19:11 dustymugs * Addition of ST_Band functionality. - added function rt_raster_from_band to rt_core/rt_api.c and rt_api.h - added test case to test/core/testapi.c - added function RASTER_band to rt_pg/rt_pg.c - added SQL functions for ST_Band to rt_pg/rtpostgis.sql.in.c - added regression tests in test/regress Associated ticket is #339 and attached patch st_band.3.patch 2011-05-16 11:01 strk * Fix a bug in the example topology data (related to next_left_edge) -- affected regress testing, also updated [RT-SIGTA] 2011-05-13 19:29 robe * forgot to add Bborie's organization 2011-05-13 19:27 robe * Add Bborie Park to development team lists. Assume Paul, you've given him SVN edit rights already. 2011-05-13 08:46 robe * apply astyle 2011-05-13 08:46 robe * apply astyle 2011-05-13 01:04 chodgson * additional bug fix for #844 2011-05-12 22:05 chodgson * added regess test for #884 2011-05-12 18:51 chodgson * merged fix from r7136 in 1.5 branch, fixes broken point_in_multipolygon_rtree, for #884 2011-05-12 17:39 robe * fix for #940 -- can't compile PostGIS 2.0 against PostgreSQL 9.1 beta 1 2011-05-12 16:14 strk * topology.ST_AddEdgeNewFaces : tabs to spaces, named arguments, code cleanups and improved checks, tests for invalid calls [RT-SIGTA] 2011-05-12 10:23 strk * Don't miss to clean load_topology-4326.sql 2011-05-12 07:28 robe * add about the tiger upgrade script 2011-05-11 14:59 robe * more optimizations 2011-05-11 13:50 robe * put in some missing indexes 2011-05-11 13:32 robe * more performance enhancements 2011-05-11 12:56 robe * turn off debug mode 2011-05-11 12:55 robe * more usability and performance enhancements. Change geocoder/reverse_geocode to use tiger.state_lookup instead of each schema state table (to achieve this had to add statefp to lookup table). Also put in upgrade scripts and notes on upgrading in README. (current script will only upgrade an alpha tiger 2010 (PostGIS 2.0.0 install) ). 2011-05-11 11:32 robe * bah Hudson still not happy. Make some preemptive changes 2011-05-11 11:08 robe * Frivolous edit to try to cure Hudson's hiccup 2011-05-11 02:34 robe * minor change to Kevin's bio 2011-05-11 02:11 robe * update PSC list and alphabetize it to get rid of any unintended implications of hierarchy. Add new PSC members / remove old and mark Paul as Chair. 2011-05-10 04:54 robe * fix some comments 2011-05-10 03:57 robe * put in a todo why I'm punting properly handling holes for now 2011-05-09 19:59 robe * more cleanup of normalize_address function 2011-05-09 16:10 robe * put in missing constraints 2011-05-09 15:16 strk * Implement, document, and regress-test SQL/MM ST_NewEdgeHeal [RT-SIGTA] 2011-05-09 15:00 robe * major speed improvements to normalize_address 2011-05-09 14:17 strk * Check for "other connected edges" before TopoGeometry definitions 2011-05-09 14:07 strk * Fix path to raster (regress) enabler script. Fixes ticket #947. 2011-05-08 19:34 robe * some explanation of theoretical vs. actual 2011-05-08 17:20 robe * mark as immutable 2011-05-08 17:18 robe * more cleanup. Get rid of more deprecated functions, put in more stable,imuutable markers. Change some functions from plpgsql to sql 2011-05-08 16:36 robe * Put in costing and make most of the functions either STABLE or IMMUTABLE. We were loosing a lot of cacheability of that. Also put in instructions in README how to upgrade the scripts. Will need to put this in the official docs too once cleaned that up a bit. 2011-05-07 16:33 robe * put in clock timestamps in debugging logic. We seem to be loosing more time on this normalize than we should be. 2011-05-06 21:39 strk * ST_ModEdgeHeal: move check for TopoGeometry after check for connected edges. Fixes bug #942 and regress-tests it [RT-SIGTA] 2011-05-06 21:21 strk * topology.ST_ModEdgeHeal: Check for edge existance before TopoGeometry definitions. Fixes bug #941 and regress-tests it. 2011-05-06 14:29 jorgearevalo * Trailing spaces removed from raster files. 2011-05-06 12:06 jorgearevalo * Changes in raster memory management: - Only calling function memory context is used, except in SRF functions, where multi_call_memory_ctx is used. - rt_context internals hidden. The memory management and error reporting is performed by rtalloc/rterror family functions. They simply call rt_context struct fields as requested. Same philosophy here than in liblwgeom. - Now rt_context memory is statically allocated. Before this, new memory for rt_context was allocated in every function call. And the memory was allocated outside the calling function (in fcinfo->flinfo->fn_mcxt postgres memory context). 2011-05-06 06:46 strk * Closer-to-iso exceptions from ST_GetFaceEdges/ST_ModEdgeHeal [RT-SIGTA] 2011-05-05 21:12 strk * Drop commented out code 2011-05-05 21:12 strk * Do not attempt to read points from empty pointarrays (thanks valgrind for finding this) 2011-05-05 21:12 strk * Allow dumping polygons with empty rings, fixing bug #937, add unit testing for that case. 2011-05-05 12:13 robe * amend 2011-05-05 08:32 strk * another generated file git-ignored 2011-05-05 07:34 strk * Ignore new generated files 2011-05-05 07:30 robe * replace osgeo log with project one and one that is not transparent so looks okay in pdf. Add PostGIS logo. Move logos to cover page. 2011-05-05 02:45 robe * get rid of literal wrapper 2011-05-05 02:44 robe * amend faq and fix some typos 2011-05-05 02:30 robe * Update Chris' bio now that he is taking on more of an active role 2011-05-05 02:26 robe * attempt at OSGeo branding our documentation 2011-05-04 23:56 chodgson * merged changes r7092 to fix null handling in st_collect for #912, #630 in 1.5 branch into trunk 2011-05-04 18:34 strk * Add note about updating joined edges and relationships, touch ST_ModEdgeSplit, ST_NewEdgeSplit, ST_ModEdgeHeal [RT-SIGTA] 2011-05-04 18:20 strk * Document ST_ModEdgeHeal [RT-SIGTA] 2011-05-04 18:20 strk * ST_ModEdgeHeal: update TopoGeom definitions, and test it [RT-SIGTA] 2011-05-04 18:20 strk * Test that healing of two edges is forbidden if any topogeom is defined by only one of them [RT-SIGTA] 2011-05-04 18:20 strk * Forbid healing edges if any feature is defined by only one of the two [RT-SIGTA] 2011-05-04 18:19 strk * Complete primitive (SQL/MM) portion of ST_ModEdgeHeal, regress test [RT-SIGTA] 2011-05-04 18:19 strk * Stub topology.ST_ModEdgeHeal [RT-SIGTA] 2011-05-03 16:56 strk * Add examples of ST_GetFaceEdges 2011-05-03 13:35 robe * more work on handling 3d polygons with holes 2011-05-03 13:32 strk * extent() -> st_extent() 2011-05-03 13:32 strk * Implement ST_GetFaceEdges (sql/mm topology function) [RT-SIGTA] 2011-05-03 12:45 robe * Use strk's suggestion of quieting hudson reqress by adding a \set VERBOSITY terse 2011-05-03 08:20 strk * Move type definition close to the function using it (ST_GetFaceEdges) 2011-05-01 02:46 robe * Fix handling of 3d polygons (still doesn't handle holes right), update doc to show example and also caveats so far, add polygon and polyhedralsurface example to c unit tests 2011-04-30 22:26 colivier * First implementation of #459. Still need unit tests and docs 2011-04-30 08:38 robe * put topology_comments generation back in the overall comments make 2011-04-30 08:29 colivier * Fix #933. Update related unit test. Add a convenient way to trace error in ST_GeomFromGML function 2011-04-29 19:10 robe * fix some typos in tiger geocoder documentation and hmm if Hudson is hiccuping (causing Olivier headaches), this might be the water he needs. 2011-04-29 18:39 colivier * Add LinearRing unit test for ST_GeomFromGML. Related to #905 2011-04-29 17:44 colivier * Add an srid default value as second optional parameter for ST_GeomFromGML. Related to #906. Remove a wrong srsName definition. Update doc and unit test 2011-04-28 21:05 robe * Fix for #927 2011-04-28 17:57 robe * fix typo 2011-04-26 12:35 robe * #722 More deprecated functions: Get rid Extent deprecated aggregate, find_extent, Combine_BBox,StartPoint, EndPoint 2011-04-25 21:19 robe * missed a spot 2011-04-25 21:18 robe * #923: document fix 2011-04-25 20:43 robe * more link back to legacy_faq in release notes and what's changed 2011-04-25 20:32 robe * more update of credits 2011-04-25 18:49 pramsey * Fix spelling of chodgson 2011-04-23 08:19 robe * Add faq about how to get back removed legacy functions 2011-04-23 08:03 robe * Add missing ST_MapAlgebra proto 2011-04-22 11:36 jorgearevalo * MapAlgebra expected test messages updated. 2011-04-21 18:51 pracine * Function necessary for ST_Histogram with a geometry parameter 2011-04-21 15:03 pracine * -First version of ST_Histogram 2011-04-20 09:23 nicklas * Fix bug #918 2011-04-20 08:36 robe * take out topology_comments build from make comments -- seems to be making Hudson mad. Will put back in later. I think this is flaw in docbook and its trying to download a buggy docbook version since it succeeds for me when built separately but not built in chain. Will try to put back later. 2011-04-20 08:34 robe * attempt at itemizing our licensing terms and licenses in use by various files and dependencies 2011-04-20 08:06 robe * minor indent change 2011-04-20 07:04 robe * Hudson is a demanding man. Try to make him happy again so he builds the docs again. 2011-04-19 16:58 strk * Document topology.polygonize(<toponame>) 2011-04-19 16:58 strk * Regress test for topology.polygonize(<toponame>) 2011-04-19 16:58 strk * Add topology.polygonize(<toponame>) function, see ticket #916 2011-04-19 16:51 robe * #914 separate chip legacy functions from rest of legacy functions (regular legacy will be converted to legacy.sql, but chip won't for now) 2011-04-18 14:08 robe * fix for #913 replace geometry2box2d with LWGEOM_to_BOX2DFLOAT4 in st_box2d function definition. 2011-04-17 16:41 robe * variable for buffer styles 2011-04-15 20:34 pracine * Warn that this function was implemented in C 2011-04-15 20:30 pracine * -The minimum for float and double are -FLT_MAX & -DBL_MAX -Stacked some CASE options 2011-04-15 18:06 pracine * -Fix for #651. Replace "scale" parameter for "pixelsize". 2011-04-15 18:05 pracine * -Fix for #651. Replace "scale" parameter for "pixelsize". 2011-04-15 17:56 jorgearevalo * Bug fixed: Loader tried to insert in <schema>.raster_overviews instead of public.raster_overviews 2011-04-15 11:21 robe * 2011-04-15 11:19 robe * change to all line feed 2011-04-15 11:15 robe * more patch corrections to support sh 2011-04-15 11:03 robe * cleanup of breaks minor other changes 2011-04-15 11:00 robe * replace with linux breaks, minor changes to paths 2011-04-14 16:29 jorgearevalo * palloc return value doesn't need to be checked, because if out of memory, function ends with elog(ERROR). It never returns NULL. 2011-04-14 13:50 strk * Drop the unused BUILD_RASTER configure variable, fix use of the RASTER variable. Fixes bug #910. 2011-04-14 11:07 strk * Properly credit Stadt Uster, co-sponsor of buffer styles in 1.5 2011-04-14 11:07 strk * Implement SnapToGrid for CIRCULARSTRING and COMPOUNDCURVE. Just enough to fix #183. 2011-04-14 10:38 strk * Do not error out if things are clean already 2011-04-14 10:36 strk * Properly clean in loader's cunit test dir 2011-04-13 19:53 jorgearevalo * Context freed. It's not necessary. 2011-04-13 19:44 jorgearevalo * Fixed bug from ticket #837. Some other improvements in RASTER_mapAlgebra. Minor bug fixed in rt_raster_serialized_size. 2011-04-13 11:21 strk * Add test for ticket #834 2011-04-13 10:25 mleslie * Adding a dbf filter for file selection. 2011-04-13 08:08 strk * Have 'svnrebase' rule use an authors file rather than command. Lets older git do it (old git on the machine currently mirroring the codebase to github). 2011-04-13 07:57 strk * Add svnrebase rule, to facilitate use from git 2011-04-13 07:41 strk * Add script to be used with git-svn --authors-prog 2011-04-12 12:34 robe * Quiet quiet Hudson 2011-04-11 17:13 robe * credit change 2011-04-11 16:17 robe * 2011-04-11 16:14 robe * preliminary cunit tests for x3d output functions 2011-04-11 09:54 strk * Add support for a RUNTESTFLAGS variable so you can do something like: 'make check RUNTESTFLAGS=-v' and get the problems printed w/out having to look at logs. 2011-04-11 09:53 strk * Do not raise an exception from DropGeometryTable if a non-existing table is given. Patch by Andrea Peri. Regress test mine. Closes ticket #861. 2011-04-09 14:27 robe * minor cleanup replace tabs with spaces in ST_LineToCurve example 2011-04-09 06:32 robe * fix url in ST_Azimuth. 2011-04-08 17:02 robe * Azimuth example with angles of azimuth and my drawing cheatsheet (st_azimuthmath.sql) in case have to do this again. 2011-04-08 14:04 robe * Document TopologySummary 2011-04-08 10:58 strk * tabs to spaces 2011-04-07 18:02 jorgearevalo * Some memory freed. Related ticket #851. 2011-04-06 14:30 strk * Fix typo in gserialized_overlaps (contains->overlaps). Fixes ticket #869. 2011-04-05 22:26 robe * Get rid of some tests in _ST_ConcaveHull and only attempt to make a polygon if the line is simple. ST_Covers is causing me quite a bit of greif as a testing tool. don't recall so many topo node this and that in GEOS 3.2 ST_Covers. Also add in some regress tests for ST_ConcaveHull -- more to come. 2011-04-04 16:25 robe * Fix typo in tiger manual and fix for #887 -- it was really the issue of using , instead of space to separate state and zip that was the main culprit 2011-04-04 15:19 robe * add pgsql2shp -m switch to dumper help 2011-04-04 13:10 robe * minor issue preventing legacy load: locate_along_measure should use ST_ wrapper 2011-04-04 12:11 strk * topology.AddFace: prepare ring geometry and check intersection with an interior edge point. Speeds up registration of faces, particularly when composed by many edges. See ticket #880. [RT-SIGTA] 2011-04-04 07:05 strk * Add -m reference in pgsql2shp manpage, by Loic Dachary. See ticket #885. 2011-04-04 03:10 robe * Add pgsql2shp allow predefined list to news and release. Add Loic Dachary to credits. 2011-04-04 02:35 robe * forgot one ST_AddBand proto 2011-04-04 02:20 robe * Add missing ST_Band protos and remove non-existent one 2011-04-04 01:25 robe * #898, #551: generate postgis_upgrade_20_minor.sql, legacy.sql and stop generating obsolete 15_minor, 14, 13_14 2011-04-03 19:19 strk * Ticket #855 by Loic Dachary: pgsql2shp fields conversion from predefined list 2011-04-02 12:27 strk * Use a 2d geometry for face mbr, even for 2.5d topologies. After all mbr is a rectangle (not cube) by definition (Minimum Bounding Rectangle) so we don't want to mess with poliedron or whatnot [see #103 for more infos about the can of worms..] 2011-04-01 05:18 jorgearevalo * Raster testing added to core testing. Related ticket #762. 2011-03-31 10:26 strk * topology.TopologSummary: survive presence of stale records in topology.topology and missing tables from topology schemas. 2011-03-31 10:26 strk * topology.TopologySummary: report 'has Z' flag on topologies 2011-03-31 09:35 strk * Add support for creating topologies allowing 3d vertices on edges and nodes. Includes regress testing [RT-SIGTA] 2011-03-29 14:58 robe * try to save as utf-8 2011-03-29 14:10 robe * that didn't work. Try resaving as latin1 and then repull down. 2011-03-29 13:57 robe * mark this as an executable then maybe just mamber it won't try to inherit the encoding of my OS 2011-03-29 13:57 strk * Add another test for topology.AddFace in presence of an open edge whose endpoints both intersect a polygon ring which does not cover it. 2011-03-29 13:20 jorgearevalo * Modified expected result for create_rt_gist_test regress test. It works differently in PostgreSQL 8.4.7 and PostgreSQL 9.0.3. See ticket #870. 2011-03-29 11:10 robe * Add #817 Renaming old 3D functions to the convention ST_3D to release notes 2011-03-28 23:24 jorgearevalo * Modified expected values for some raster tests 2011-03-28 23:10 pracine * -Minimal value for float is -FLT_MAX, not FLT_MIN 2011-03-28 22:56 jorgearevalo * liblwgeom/lex.yy.c version 6180 reverted 2011-03-28 22:52 jorgearevalo * Missed check added again. 2011-03-28 22:49 jorgearevalo * Some bugs related with ticket #870 solved. Added more test for polygonize function. 2011-03-28 22:10 pracine * -Changed message not proper when just setting pixel value 2011-03-28 20:31 pracine * -Transformed many error into warning (or notice) -Removed function name in message for warnings -Added doc about rules when to return notice or error -Removed commented out notices -removed warning when passed raster is null. Just return null -Get band number with PG_GETARG_INT32 instead of PG_GETARG_UINT16 which was converting values < 0 to something > 0 2011-03-28 20:21 robe * attempt to quiet floating point erros in reprojection by roudning the coordinates (worked on mingw and still works after change). I assume -ws are when using -w switch? 2011-03-28 18:46 nicklas * Putting renamed 3D-functions in legacy.sql.c and some clarifying notes about the renaming 2011-03-28 18:01 jorgearevalo * Raster polygonization optimized using a layer filter to avoid NODATA values. Related ticket #870. 2011-03-27 17:50 nicklas * Renaming of 3D functions, #817 2011-03-27 02:43 robe * more additions / corrections to release notes 2011-03-26 23:44 robe * 2011-03-26 23:42 robe * more typo corrections 2011-03-26 18:04 robe * update docs to reflect changes in tiger loader 2011-03-26 17:43 robe * cleanup change linux to sh. Get rid of some typos in the sh script generator, move some more variables to the top for easier setting. Fix some errors in loader_tables preventing some soundex index from being created. Change reverse_geocoder.sql (from utfy-8 (not sure how that happened) 2011-03-25 09:11 robe * amend to include work on tiger geocoder 2011-03-24 22:56 pracine * -Fixxed a bug getting toindex band index -Classified one function declaration 2011-03-24 22:55 pracine * -ST_AddBand should add the new band as the last band if no band index is apecified 2011-03-24 11:39 robe * Give special functions index a static name so it doesn't get pushed down to another chapter every time we add a new chapter 2011-03-23 22:09 pracine * -Return NULL if raster is NULL in RASTER_addband -Warn if first raster is NULL in RASTER_copyband and return NULL 2011-03-23 22:01 pracine * -Reordered/classified function declaration -Renamed index and nband to bandindex in many functions -Better handling for NULL in RASTER_setBandNoDataValue following ticket #883. Return original raster if can't set nodata value 2011-03-23 21:50 pracine * Removed extra spaces 2011-03-23 20:51 pracine * -Better handling of NULL for ST_SetValue. Return the original raster when band, X or Y are NULL instead of an error or NULL. See #883. 2011-03-23 19:52 pracine * -General review of ST_AddBand following ticket 871 -Moved some warning in the core -Renamed the parameters to make more explicit which one is "to" and which one is "from" -Fixed confusion in parameter order. -Set many rtpostgis.sql.in.c functions to STRICT -Removed check for null in RASTER_getPixelValue since st_value is now strict. More might follow. -Removed (or moved) some documentation from rt_api.c already present in rt_api.h 2011-03-23 18:15 jorgearevalo * Semicolon missed. 2011-03-23 02:57 jorgearevalo * Server crash reported in ticket #837 partially solved. SPI_finish causes server to crash. Commented in this commit, but it's not a good solution, I think. This guy had the same problem 10 years ago. No responses: http://www.mail-archive.com/pgsql-general@postgresql.org/msg18558.html 2011-03-22 20:31 pracine * -ST_PixelAsPolygons also return the x & y coordinates of the pixel 2011-03-22 14:26 robe * some clarification of specs 2011-03-22 13:54 robe * more cleanup 2011-03-22 05:57 robe * minor rearrangement wording changes to Paul's bio 2011-03-22 05:53 robe * Amend my bio so people know who to point fingers at when Tiger Geocoder and X3D don't work right. 2011-03-22 05:44 robe * Fix #879 (get rid of use of both deprecated line_locate_point and line_substring... document function 2011-03-21 16:33 strk * Add test for ST_Polygonize with nested collection input (see ticket #878) 2011-03-21 11:04 strk * Convert to $$ quoting (ticket #714) 2011-03-21 10:28 strk * Add an ST_RemIsoNode alias to ST_RemoveIsoNode (ticket #798) 2011-03-21 10:18 strk * ST_ModEdgesSplit -> ST_ModEdgeSplit (ticket #794) 2011-03-20 16:04 robe * 2011-03-20 15:58 robe * more credit cleanup and rounding up of credits 2011-03-20 15:44 robe * fix typo 2011-03-20 14:01 jorgearevalo * Two ST_AddBands missing variants added. Related tickets #858, #792. 2011-03-20 08:55 strk * Re-drop ST_SharedPath from topology.AddFace, this time with stronger robustness, so not prone to error exposed by #874. It was a pity to give up a 10% speed improvement... Thanks supermoon for keeping me up. [RT-SIGTA] 2011-03-19 23:35 strk * Fix #874 by getting back to ST_SharedPaths use. Might try to optimize again in the future, but correctness first! This commit also adds regression testing for the case [RT-SIGTA] 2011-03-19 02:49 robe * more company contribution amendments 2011-03-19 02:31 robe * more updating to better reflect corporate sponsor contributions 2011-03-19 02:05 robe * More cleanup of release notes. Add a corporate contributors section to kill 2 birds (give credit to companies that have funded PostGIS and also so we have a catalog of companies that can lay claim to parts of PostGIS as part of our incubation due diligence). Guys if I'm missing companies in the list which I most surely am, please add them. 2011-03-18 21:13 robe * Fill in coordIndex for multipolygons 2011-03-18 20:06 robe * 2011-03-18 19:56 robe * force to LF eol type so doesn't barf in MingW 2011-03-18 19:43 pramsey * Jeff Adams: Changed variables we are storing getopt result in from char to int, since int is the return type from the getopt function. (#663) 2011-03-18 19:33 robe * Update credits and release notes to include Jeff Adams much appreciated contributions and other minor things 2011-03-18 19:22 pramsey * Jeff Adams: Removed not-really-necessary -m1 parameter from grep call because it does not work on MingW. 2011-03-18 19:13 pramsey * Jeff Adams: Added regression test for LATIN1 encoding, fixed failure to convert to UTF8. (#808) 2011-03-18 19:03 robe * need to always output with LF breaks otherwise fails on windows mingw as windows switches the breaks to CRLF 2011-03-18 18:30 pramsey * Jeff Adams: Added dumping tests for -G versions of loader regress tests. 2011-03-18 18:21 pramsey * Jeff Adams: Now runs all the normal regression tests with the -G option as well. (#358) 2011-03-18 17:36 pramsey * Jeff Adams: Adding a regression test for the loader that uses a schema-qualified table name. 2011-03-18 16:54 pramsey * Jeff Adams: Per suggestion on #857, corrected output to indicate table name is optional. 2011-03-18 16:47 pramsey * Whoops, back out the gserialized flag 2011-03-18 16:24 pramsey * Jeff Adams: Increasing precision due to tests failing in automatic build. 2011-03-18 16:16 pramsey * Add the &&& operator and index binding for 'gist_geometry_ops_nd'. Operator behavior in mixed-dimension query situations still to be determined. 2011-03-18 15:52 pramsey * Fix build fail when DEBUG = 1. 2011-03-18 15:40 pramsey * Fixes the following shp2pgsql issues: #229: A new "-r" command line parameter to specify a "from" SRID for reprojecting (the existing -s is the "to"). #779: -S now works for points, and -w is documented. #864: MULTIPOINT shapefiles with single-vertex points now correctly load with all MULTIPOINTs. #865: no longer crashes when both -g and -G are used. 2011-03-18 14:11 pracine * -Standardized the way we write "nodata" from "NODATA" to "nodata" -My editor remove a lot of trailing space and convert tab to 4 spaces. Please set your editor to do the same. 2011-03-18 14:06 pracine * -Fix for ticket 792: Clamp double to known values when pixeltype is other than double in rt_band_set_nodata, rt_band_set_pixel & rt_raster_generate_new_band -Added function name to many error messages -Standardized the way we write "nodata" from "NODATA" to "nodata" -Moved some documentation to the header file -My editor remove a lot of trailing space and convert tab to 4 spaces. Please make your editor do the same. -Removed declarations of many unused variable 2011-03-17 19:30 pramsey * Quiet some debug-level warnings. 2011-03-17 19:27 pramsey * Fix mis-named debugging global 2011-03-17 13:44 pramsey * Replace variable-length-key 2D index with fixed-length-key for GSERIALIZED case. 2011-03-17 00:08 strk * Avoid using ST_SharedPath in topology.AddFace as well. 2011-03-16 22:15 robe * Multilinestring working even for closed multilinestrings. Still need to fix polygon and multipolygons. also added example of closed multilinestring. 2011-03-16 20:23 robe * sort of take care of multilinestrings -- doesn't work for multilinestrings with closed linestrings so that's next up to correct. 2011-03-16 19:16 pramsey * Jeff Adams: Updated man page for -X, -T, and -e parameters (#110 and #67). 2011-03-16 19:16 pramsey * Jeff Adams: Only automatically run -D tests if no custom parameters have been set. 2011-03-16 18:48 jorgearevalo * Deleted empty rt_raster_map_algebra function from rt_core. MapAlgebra implemented at PostgreSQL level. 2011-03-16 17:53 robe * replace & with & to fix build 2011-03-16 17:16 pramsey * Jeff Adams patch to add command line flag to not use a transaction. (#110) 2011-03-16 16:47 robe * #651 revise ST_MakeEmptyRaster so arg names and types are consistent 2011-03-16 14:06 pramsey * Jeff Adams new testing of loader with cmd line options. 2011-03-16 13:03 pramsey * Jeff Adams patch to allow pre/post actions in regression tests 2011-03-16 13:02 pramsey * Jeff Adams patch to support tablespaces (#67) 2011-03-16 05:15 robe * Document ST_ASX3D function -- still a work in progress -- will add more as I flesh out the rest. 2011-03-16 04:48 robe * Alas a functioning polyhedralsurface export viewable in freeWRL. Also add proto that just takes geometry as argument and defaults to precision 15 2011-03-15 15:11 jorgearevalo * Added ST_IsEmpty documentation. Related ticket #591. 2011-03-15 14:04 robe * Add regress tests for populate_geometry_columns,DropGeometryTable 2011-03-15 06:01 robe * Fix copy comment error 2011-03-14 17:00 robe * Lots of fixes. TIN is about perfect, Point, multipoint about perfect too, LINESTRING close. 2011-03-12 10:42 robe * minor corrections 2011-03-11 21:12 robe * preliminary work on x3d export. Still a lot to go. point, multipoint, tin, linestring almost working. Still need to fiddle with coordindex and spacing and get rid of junk copied from gml not needed. 2011-03-11 13:27 robe * minor change 2011-03-11 12:37 robe * Add Availability: 2.0.0 for functions I know are new after the raster postgis 2.0.0 merge 2011-03-11 12:26 robe * document GetFaceByPoint and revise release_notes 2011-03-10 21:18 robe * Add in Jorge's great windows instructions 2011-03-10 18:53 strk * Add a --raster flag to run_test 2011-03-10 11:33 strk * TopologySummary: Take an empty feature_column as a sign of a "detached" topological layer (one having no deploy on user-tables). 2011-03-09 21:59 strk * Ticket #849 by Andrea Peri: topology.GetFaceByPoint implementation and test 2011-03-09 19:18 strk * Ticket #856: topology.CopyTopology(text,text) implementation, test and documentation 2011-03-09 16:30 strk * Make createtopogeom test independent from the number of topologies created before running it 2011-03-09 10:19 strk * Ticket #855: topology.TopologySummary(<name>) 2011-03-09 10:14 strk * Add note for ST_Relate with boundary node rule 2011-03-08 15:26 strk * Simplify AddEdge code by using BoundaryNodeRule 2 (Endpoint) in ST_Relate call, thus saving a couple of calls to ST_RelateMatch. See tickets #770 and #844. 2011-03-08 10:43 strk * Some (poor) documentation for ST_Relate(g1,g2,boundaryNodeRule) 2011-03-08 10:23 strk * Ticket #844: add support for boundary node rule specification in ST_Relate [RT-SIGTA] 2011-03-08 08:16 strk * Enable a very old relate test which for some reason was never automatically run 2011-03-07 11:05 strk * Avoid using ST_SharedPath (expensive) 2011-03-05 11:00 jorgearevalo * is_nan function defined for Python versions under 2.6 2011-03-05 09:12 robe * more marks of TIN 2011-03-05 06:17 robe * Flag more functions as supporting TINS, provide some examples 2011-03-05 06:07 robe * more examples of TIN and polyhedral surfaces 2011-03-05 05:51 robe * Fix ST_DumpPoints 3D examples so they don't flatten to 2D 2011-03-01 14:47 strk * More ignores 2011-02-28 18:14 strk * Use left_face/right_face when looking for face ring's edges. I've seen some areal TopoGeometries dumped in 1:76 of the time [RT-SIGTA] 2011-02-28 10:53 strk * Add test for invalid AddFace call (polygon not fully defined by known edges) 2011-02-28 10:40 strk * Founded -> Found (in expected results..) 2011-02-26 21:29 robe * #848 Fix eror message for GetNodeByPoint, GetNodeByEdge 2011-02-26 04:22 robe * cealn up examples and data type mistake 2011-02-26 03:32 robe * minor changes and attempt to fix matrix table (cutting off now) 2011-02-25 23:01 robe * doucmentation for #791 , #793 - GetNodeByPoint, GetEdgeByPoint -- made some changes to Andrea Peri's wording and change ot examples so they really fall in MA. Still need to output results. 2011-02-25 09:18 strk * Update copyright notice 2011-02-25 08:56 strk * topology.GetEdgeByPoint: implementation and regress test, by Andrea Peri. Ticket #791. Note that previous commit (for #793) was GetNodeByPoint. My mistake, sorry. 2011-02-25 08:45 strk * topology.GetEdgeByPoint: implementation and regress test, by Andrea Peri. Ticket #793 2011-02-24 21:44 nicklas * Copyright notes 2011-02-24 17:39 robe * fix typo 2011-02-24 17:23 robe * Put in a note about nominatim OSM geocoder that works with international addresses and open street map data 2011-02-24 17:16 jorgearevalo * Now is not possible to load rasters with different scale in the same table. Related ticket #153 2011-02-24 15:45 strk * Improve precision of point_in_ring_rtree too (bug #845). 2011-02-24 15:17 strk * Improve precision of point_in_ring. Fixes and regress-tests bug #845. 2011-02-24 07:54 robe * note psc members 2011-02-24 07:52 robe * amend list of core contributors, add in their svn usernames and core areas of responsibility 2011-02-24 07:35 robe * Amend author list and credits (credits is still obsolete -- tempted to just get rid of it since its redundant with news and hard to maintain) 2011-02-23 08:58 robe * amend enhancements line for ST_AsGML to note strk's addition of option 4 -- use LineString instead of curve tag 2011-02-22 14:52 strk * Ticket #816: flag to select <LineString> over <Curve> for GML3 line output [RT-SIGTA] 2011-02-22 14:25 strk * Test new LW_GML_SHORTLINE GML2 option [RT-SIGTA] 2011-02-22 14:25 strk * Add LW_GML_SHORTLINE flag to prefer <LineString> over <Curve> tag for lines GML3 output [RT-SIGTA] 2011-02-22 13:01 strk * Use a single bitfield for GML output options [RT-SIGTA] 2011-02-19 01:05 mloskot * Improved GDAL detection and reporting 2011-02-19 00:42 mloskot * ./configure checks for GDAL Python bindings with built-in NumPy array support (Ticket #838) 2011-02-18 16:24 strk * Performance improvements in topology.AddFace: consider each ring separately when looking for composing edges; compute orientation inside the loop body to avoid sorting and grouping [RT-SIGTA] 2011-02-18 14:58 strk * Test passing polygons with holes to topology.AddFace [RT-SIGTA] 2011-02-17 19:19 robe * Amend ST_AsGML and ST_GeomFromGML to include the fact they support TINS 2011-02-17 13:13 robe * 2011-02-17 13:08 robe * wrong statement 2011-02-17 13:02 robe * indent a bit better 2011-02-17 13:01 robe * Provide a more useful example of map algebra. 2011-02-17 12:15 robe * fix typo and add reference to ST_Value 2011-02-17 12:10 robe * fix typo in xsl hopefully will make raster list right -- though must have syntax wrong anyway since topology and tiger get listed. 2011-02-17 06:07 robe * provide an example of map algebra 2011-02-17 04:31 robe * #836 PostGIS raster in 2.0 is not being output in Trunk Doxygen 2011-02-17 04:23 robe * Document ST_MapAlgebra -- need better description and examples forthcoming 2011-02-16 19:15 jorgearevalo * Added documentation for the new version of ST_AddBand function 2011-02-16 19:12 jorgearevalo * Added a new variant for ST_AddBand, taking 2 rasters as input. Needs doc. 2011-02-16 18:19 jorgearevalo * - One raster core implementation of MapAlgebra (related ticket #588, needs documentation). - RASTER_addBand code moved to core level. The new RASTER_addBand function calls the core one (rt_raster_generate_new_band). - Added regression tests for MapAlgebra. - Deleted lexer/parser at core level. Not used. - Fixed small bug in documentation: ST_SetBandNoDataValue returns a raster, not an integer. 2011-02-16 17:41 strk * Add UnaryUnion item 2011-02-16 11:15 strk * Document ST_UnaryUnion 2011-02-16 10:19 strk * Stop on first error when creating the regress db 2011-02-16 10:19 strk * Expose versions of ST_IsValid and ST_IsValidReason accepting "the ESRI flag" and implemented as wrappers to ST_IsValidDetail. Only available when building against GEOS-3.3+. Commit includes documentation and regress-testing. Closes ticket #831 [RT-SIGTA] 2011-02-16 09:12 strk * Only run ST_isValidDetail if GEOS is >= 3.3 -- Reduce tests for GEOS version grouping togheter tests depending on the same version [RT-SIGTA] 2011-02-16 08:54 strk * Regression test for ST_isValidDetail (including "ESRI" flag) [RT-SIGTA] 2011-02-16 08:34 strk * Document ST_isValidDetail(geom, flags) variant [RT-SIGTA] 2011-02-15 17:36 strk * Allow specifying validity checking flags in ST_isValidDetail [RT-SIGTA] 2011-02-15 13:49 robe * Make work on PostgreSQL 8.4 (was using some syntax only allowed in 9.0+). Also account for the odd / even side of street rule. And of course that demonstrated there is a bug somewhere (most likely in the geocoder), but got to pull up some maps to see which is right. One of these has the address orientations flipped (odd /even not right). Of course I have to be right :). Boy do I hate when you program the reverse of something and it exposes a bug. Also fix some minor documentation. 2011-02-15 08:26 strk * topology: create an index on edge.left_face and edge.right_face, speeding up construction of polygonal Geometry from TopoGeometry by a factor of 10 (Closes #806) 2011-02-15 07:19 robe * document reverse_geocode 2011-02-15 06:36 robe * Change to transform the point if not in nad83 long lat already 2011-02-15 06:15 robe * reverse_geocode complete (with street range), now to document and improve speed and test 2011-02-15 00:26 robe * Journeying into street ranges now can tell which side of the street we are on and spits that out when include_strnum_range is true. Next (hopefully last) step will be to pinpoint address number 2011-02-14 18:22 robe * First draft of reverse geocde currently just gets the street need to interpolate to get approximate number 2011-02-14 17:26 strk * ST_UnaryUnion and test 2011-02-14 12:10 jorgearevalo * The array for NODATA values is not generated if NaN is returned as nodata value for bands. Related ticket #828. 2011-02-14 11:57 robe * fix another mismatched tag 2011-02-14 03:33 robe * put in missing / and not about implementation 2011-02-14 03:10 robe * recommit 2011-02-14 02:33 robe * amend mapserver instructions mode='2' is now required for most rasters to display 2011-02-13 03:51 robe * ST_AddEdgeNewFaces - On closer inspection -- a lot of work is done in it, but not enough to make it functional. 2011-02-13 03:45 robe * ST_AddEdgeNewFaces - still need to put in an example 2011-02-12 18:22 robe * fix typo and add minor amendments 2011-02-11 22:58 robe * 2011-02-11 22:45 robe * add back in example 2011-02-11 22:40 robe * more pieces 2011-02-11 22:31 robe * add another piece 2011-02-11 22:18 robe * Slowly put back new section -- last build worked. 2011-02-11 22:06 robe * remove new section to see if that fixes build 2011-02-11 21:15 robe * Get rid of <p> and replace with <para> 2011-02-11 21:04 robe * Hudson is alive again but not happy. Hopefully this will make him happier. 2011-02-11 08:56 robe * Add new section on loading rasters. will eventually copy some content from gdal site and wiki site and various examples of loading rasters and creating from scratch. 2011-02-10 11:59 robe * #824 more corrections from Kashif Rasul 2011-02-10 06:56 robe * wow geocoder flies on decent hardware. 2011-02-10 06:10 robe * documentaiton is in DocBook XML not SGML (well not anymore anyway). 2011-02-10 06:01 robe * Add tiger_geocoder to enhancements, add Kashif Rasul to credits in appreciation of his many corrections to the documentation, other minor credits corrections 2011-02-10 05:33 robe * Add some calrification notes to normalize_address function. Get rid of superfluous line break in linux script. 2011-02-10 04:40 robe * Revise README to be clearer. Update the tiger_loader linux script. 2011-02-09 16:36 strk * topology.AddFace: report an "uncovered point" on missing edges [RT-SIGTA] 2011-02-09 16:01 robe * change references of the_geom and the_geog to geom and geog. "the" is so much wasteful typing 2011-02-09 12:54 robe * #821: doc typos errata from Kashif Rasul 2011-02-08 17:42 strk * Do not call lwmessage_truncate if not needed (an prior to checking the args passed to it) 2011-02-07 22:05 robe * fix typo 2011-02-07 17:51 robe * document history_table feature 2011-02-07 17:03 strk * Also set LANG (see ticket #819) [RT-SIGTA] 2011-02-07 16:53 strk * Tag VOLATILE functions explicitly [RT-SIGTA] 2011-02-06 00:39 robe * oops 2011-02-06 00:34 robe * Fix typo in ST_SetSRID and add examples 2011-02-05 00:53 robe * Id for chapter 4 in wrong place -- move, add missing -S switch in loader detail, fix some typos in tiger geocoder and add reference to shp2pgsql section in manual 2011-02-04 18:33 robe * 2011-02-04 18:33 robe * fix some spelling and revise some wording 2011-02-04 17:33 robe * add description of loader function. 2011-02-04 17:26 strk * Use quote_ident more... 2011-02-04 17:19 strk * Fix a bug in topology.CreateTopoGeom in presence of MixCased topologies [RT-SIGTA] 2011-02-04 16:31 strk * Fix a bug in topology.add{Node,Edge,Face} breaking on MixedCased topology names [RT-SIGTA] 2011-02-01 13:55 robe * Best guess at what the Linux equivalent should look like will have to test later once get my Linux box setup again 2011-02-01 13:53 strk * ST_Estimated_Extent: make exception message about lack of stats clearer 2011-02-01 10:24 strk * AsGML(TopoGeometry): test xref to visited face [RT-SIGTA]. 2011-02-01 09:55 strk * AsGML(TopoGeometry): add test for faces marking visit of edges [RT-SIGTA] 2011-02-01 09:43 strk * AsGML(TopoGeometry) Add test for ouput of multi puntual features [RT-SIGTA] 2011-01-31 20:26 strk * Document the new version of topology.AsGML() signature (polluting for commandline friendliness!) 2011-01-31 17:33 strk * Use a <gml:Face> tag for each topological face, allowing proper xrefs. Needs xref testing (requires overlapping topological features) [RT-SIGTA] 2011-01-31 15:04 robe * minor formatting change in doc. #722 remove more deprecated functions: ConvexHull. 2011-01-31 14:39 robe * fix typo 2011-01-31 14:37 robe * document ST_HasNoBand, fix note on ST_Value so appears in right place in what's new index 2011-01-30 18:40 robe * out in missing protos for ST_Value and not that hasnodata is a new option for ST_Value in 2.0 2011-01-30 01:29 robe * rename to agree with documentation and other tiger folder 2011-01-28 21:31 robe * remark out Paul's cunit test that fails on windows so my regress checks don't always halt and can complete. 2011-01-28 18:04 strk * syntetize purpose of AsGML(TopoGeometry) 2011-01-28 17:15 strk * Use named parameters 2011-01-28 17:05 strk * Add a "gmlversion" parameter to topology.AsGML(TopoGeometry). Test and document. [RT-SIGTA]. 2011-01-28 16:01 robe * 2011-01-28 16:00 robe * corrections to data types in functions -- had them backwards 2011-01-28 15:19 robe * missed some spots 2011-01-28 15:01 robe * some other minor doc corrections. Stamp files with svn author, revision etc keywords 2011-01-28 14:37 robe * fix some typos 2011-01-28 13:09 robe * put back missing tag 2011-01-28 13:03 robe * simplify example 2011-01-28 12:27 robe * get rid of some redundancy 2011-01-28 12:25 robe * minor clarifications 2011-01-28 12:11 robe * After having to answer this yet again I am finally reduced to adding the age old question: Why does pgAdmin show that my geometries are blank. Also change the FAQ to a pretty anchor so its easily referenceable and permanent. 2011-01-28 08:55 strk * Change face.mbr field from BOX2D to GEOMETRY, and gist-index it, closes ticket #800 [RT-SIGTA]. 2011-01-28 06:14 robe * document normalize_address and pprint_addy functions of tiger geocoder 2011-01-27 20:40 strk * Document new parameter of AsGML(TopoGeometry) [RT-SIGTA]. 2011-01-27 20:35 strk * AsGML(TopoGeometry): allow specifying a prefix for topology element identifiers, and test it. [RT-SIGTA] 2011-01-27 18:21 robe * correction 2011-01-27 18:17 robe * put in a batch geocoding example, more performance enhancements and loading changes. 2011-01-27 15:56 robe * start documenting tiger geocoder 2011-01-27 09:43 strk * AsGML(TopoGeometry): fix xref syntax error (#811) [RT-SIGTA] 2011-01-27 08:48 strk * topology.AddEdge: when an intersection occurs, also report intersection point [RT-SIGTA] 2011-01-26 16:57 jorgearevalo * Added header for RASTER_setBandIsNoData.Related ticket #593. 2011-01-26 16:28 jorgearevalo * The documentation for ST_BandIsNoData was changed by error. This commit fixes it. Related ticket #593. 2011-01-26 16:08 jorgearevalo * Added function ST_SetBandIsNoData with tests and doc. Deleted isnodata checking for loader. Related ticket #593. 2011-01-26 15:16 robe * put in logic to fill zipcode_lookup_base, fix some other errors 2011-01-26 13:43 strk * Try to keep NEWS format consistent (80 cols, same indenting as previous). Still too much information for my taste, but it's a step forward. 2011-01-26 13:34 strk * Document the new 'visitedTable' parameter to topology.AsGML [RT-SIGTA]. 2011-01-25 21:52 strk * Complete visited bookkeeping for AsGML(TopoGeometry) and automate test for it [RT-SIGTA] 2011-01-25 18:08 strk * I realized we're in 2011... 2011-01-25 17:16 robe * update installation instructions to include raster_comments.sql, topology_comments.sql 2011-01-25 17:04 strk * AsGML(TopoGeometry): Add support for visited table and xlink:xref for Edges [RT-SIGTA] 2011-01-25 16:46 robe * Put in missing make topology_comments.sql and also add to the make comments routine 2011-01-25 15:05 strk * Test use of the options argument to topology.AsGML [RT-SIGTA] 2011-01-25 14:52 strk * Allow specifying GML output precision and options to the topology.AsGML(TopoGeometry) function [RT-SIGTA]. 2011-01-25 09:39 strk * Make topology.AddEdge consistent with AddNode and AddFace in that it will return an existing identical Edge, if found. 2011-01-25 06:38 robe * cleanup -- other legacy stuff is already in tiger2006 2011-01-25 06:36 robe * 2011-01-25 06:31 robe * reshuffle in preparation for merging in tiger 2010 support version 2011-01-25 06:20 robe * Add ST_ConcaveHull to news item 2011-01-24 20:56 strk * Test multi-component lineal topogeometries [RT-SIGTA] 2011-01-24 20:52 strk * Output multi-edge lineal TopoGeometry GML with a meaningful edge ordering [RT-SIGTA] 2011-01-24 15:06 jorgearevalo * Documentation updated for ST_BandIsNodata function. Added band nodata checking in loader script. 2011-01-24 14:38 strk * Add test for TopoSurface GML output with multi-face TopoGeometry objects [RT-SIGTA] 2011-01-24 14:18 strk * load_topology* are generated now 2011-01-24 14:14 strk * Test the noprefix and customprefix GML outputs against all geoms taken in consideration for the default GML .. 2011-01-24 14:03 strk * Add test for single-component areal TopoGeometry GML output [RT-SIGTA] 2011-01-24 14:01 strk * AsGML(TopoGeometry): Do not force right-hand-rule on each polygon ring (isn't needed and doesn't make sense as it would get the hole rings wrong anyway) [RT-SIGTA] 2011-01-24 11:43 strk * AsGML(TopoGeometry): for TopoSurface, make the directedEdge sequence be ordered to go around each ring (ie: make the order meaningful) [RT-SIGTA]. 2011-01-24 11:11 strk * AsGML(TopoGeometry) add test for TopoCurve output (only single-element, till ordering of components is sorted out) [RT-SIGTA]. 2011-01-24 09:31 strk * Test GML output of puntual TopoGeometry objects. Lineal and Areal are still undergoing manual tests and debate about importance of components sequence ordering [RT-SIGTA]. 2011-01-23 20:25 strk * topology.AsGML(TopoGeometry): Write end node of edges. Fixes bug #807 [RT-SIGTA] 2011-01-23 14:48 robe * Document AsGML and fill in some missing examples in other functions 2011-01-22 23:02 strk * Port topology.Geometry to $$ syntax [RT-SIGTA] 2011-01-22 22:38 strk * update email address 2011-01-22 19:26 strk * topology.AsGML: Add the missing gml:directedEdge part within the gml:Face tag, appropriately (?) computing orientation of each "ring" edge [RT-SIGTA] (#803) 2011-01-22 18:46 strk * Add test for ST_AsGML with long srsName. Expects what at first sight looked like a bug (#804). 2011-01-22 18:08 strk * There's no need to add geometry columns when creating Topological layers, that's something only useful for caching geometries, so move to cache_geometries.sql 2011-01-22 18:08 strk * Cleanup the topology regress dir Makefile. Have load_topology.sql generated to allow for specifying different SRIDs. 2011-01-22 17:26 strk * Rename internal functions so to have an underscore prefix, document them as such. Drop wrappers for internal functions (they are not meant to be called by users so don't need to be friendly) [RT-SIGTA] 2011-01-22 17:21 strk * topology.AsGML(TopoGeometry): Add support for specifying a namespace prefix. See ticket #801. [RT-SIGTA] 2011-01-22 16:10 strk * topology.AsGML: Use Long CRS for pointProperty and curveProperty [RT-SIGTA] 2011-01-22 15:24 strk * Use GML3 for Edge curveProperty and Node pointProperty (see #802) [RT-SIGTA]. 2011-01-22 13:55 strk * topology.AsGML(TopoGeometry): add a <gml:Face> tag (See ticket #803) [RT-SIGTA] 2011-01-22 13:27 strk * Don't miss to include the gml routines in the main topology.sql 2011-01-22 08:37 strk * fix spurious ending bracket in topo-GML output [RT-SIGTA] 2011-01-21 22:10 strk * First version of topological gml output routines (still miss the visited map) [RT-SIGTA] 2011-01-21 14:08 strk * I've just realized TopoElement is also used for TopoGeomId/LayerID, thus can't restrict the second element to a max of 4 or using layers beyond the forth would be impossible. Fix the domain and test accordingly. Update documentation to be informative on the matter. 2011-01-21 13:21 strk * Fix TopoGeometry -> Geometry conversion for hierarchically defined TopoGeometries in presence of multiple topologies. Take the chance so simplify a query. WARNING: This fix doesn't have an automated regression test. 2011-01-21 07:15 robe * document ST_RemoveIsoNode minor changes to match function signatures toponame -> atopology for ST_ functions 2011-01-21 07:03 robe * Move ST_GetFaceGeomety, document the non-existence of ST_GetFaceEdges (its just a stub) 2011-01-20 23:29 pracine * -Fix for ticket 606: ST_Value now return NULL for nodata value and ST_SetValue accept NULL values (if there is a nodata value in the band). ST_Value accept a boolean parameter which, when set to false, have the function to return nodata values as their true value instead of null. 2011-01-20 17:07 jorgearevalo * Added isnodata flag at core level and st_bandisnodata at postgresql level. Related ticket #593. Fixed bug with debug functions at raster core level. Still need to change the loader and the doc. 2011-01-19 21:42 robe * #795: ST_Intersects raster documentation is confusing 2011-01-19 21:11 pracine * -Clarify help messages. 2011-01-19 20:52 pracine * -Added a -a option to append tiles to an existing table. -Fixed ticket 542. The table WAS dropped but not recreated. 2011-01-19 16:46 strk * Make the TopoElement domain stricter to forbid arrays with more than 2 elements and also checking the element type being in valid range [RT-SIGTA] 2011-01-18 23:24 robe * Put in section abstact for each 2011-01-18 17:19 strk * Raise an exception if AddEdge is called on a topology which already defines faces other than the universe face (see #781) 2011-01-18 14:53 robe * #722: remove more deprecated functions - ST_MakeLineGArray, Polygonize_GArray,PointFromWKB (proto), max_distance 2011-01-18 13:52 strk * ValidateTopology: have temporary table dropped on commit (#783). Thanks Andrea Peri [RT-SIGTA] 2011-01-18 12:50 robe * Link to Vincent Picavet's great Foss4G 2010 presentation on Topology and Network Analysis. 2011-01-18 12:28 robe * minor corrections 2011-01-18 06:38 robe * Fix #786 ST_MoveIsoNode gives ST_Intersects is not unique. Also change to use newer $$ quoting syntax. 2011-01-18 06:10 robe * Fix typo 2011-01-18 06:06 robe * ST_MoveIsoNode 2011-01-18 05:17 robe * fix redundancy in description 2011-01-18 04:45 robe * ST_NewEdgesSplit, add new processing section, fix some links 2011-01-17 23:07 robe * Add ST_AddIsoEdge (still need to put in examples), put in more back links. Revise special index section to also consider topology aggregates 2011-01-17 22:35 strk * topology.AddNode: fix detection of edge crossing (#780) [RT-SIGTA] 2011-01-17 21:32 strk * ValidateTopology: Use a temporary table to create face geometries only once. Huge speed boost for #772. 2011-01-17 21:03 strk * ValidateTopology: Put some water on fire by avoiding a full cartesian product scan (#772). It's still too slow, but it is a step forward. 2011-01-17 19:58 strk * ST_DWithin already includes a bounding box check 2011-01-17 18:15 robe * Put in accent in Jorge's name 2011-01-17 13:18 robe * forgot this in last commit 2011-01-17 13:18 robe * fix typos in Mat's name 2011-01-17 12:16 robe * document ST_InitTopoGeo, cleanup some of the sql-mm labelings 2011-01-17 10:39 robe * Document ST_AddIsoNode - still need to add examples. Update ValidateTopology to reflect enhancements and bug fixes in 2.0. 2011-01-17 09:04 strk * topology.ValidateTopology: rewrite the edge crossing detection query. Fixes a false positive (#777) and unexpectedly a bunch of false negative in the legacy_invalid testcase (now properly checked visually). [RT-SIGTA]. 2011-01-17 08:47 strk * topology.AddEdge: correctly handle the case in which a newly added closed edge touches an existing closed edge with an endpoint over a non-endpoint [RT-SIGTA]. 2011-01-17 08:47 strk * topology.AddFace: raise another WARNING about next_left/right_face element of topology edges not being set as dictated by the model 2011-01-17 03:26 robe * note magnitude of deprecation 2011-01-16 21:42 strk * ValidateTopology: don't compute full intersection matrix to detect edge-node intersection. Use ST_DWithin instead. Use ST_DWithin for coincident nodes detection as well, so to be more consistent [RT-SIGTA] 2011-01-16 21:29 strk * ValidateTopology: && operator is not enough to tell if two points are cohincident (it was at time of HWGEOM...) [RT-SIGTA] 2011-01-16 20:17 robe * release notes minor updates while still fresh in my mind. 2011-01-16 17:19 strk * ignore more generated files 2011-01-16 12:08 robe * document ST_3DLongestLine and add missing polyhedralsurface and 3D support flags for ST_3D family of functions 2011-01-16 11:22 robe * #776: replace dump with ST_Dump in ST_CreateTopogeo 2011-01-16 10:36 strk * Drop unused domain TopoGeomElementArray. See #775 2011-01-16 10:22 robe * minor corrections and start documenting ST_CreateTopoGeo 2011-01-16 09:10 robe * #774: regress fails - Oops forgot to commit this file on last commit 2011-01-16 08:18 robe * #722: remove drecated functions BuildArea, MakePolygon 2011-01-15 23:55 strk * html/postgis.html doesn't really depend on images, and encoding such dep has the only effect to _always_ rebuild the documentation, which defeats the purpose of 'make'... 2011-01-15 23:37 strk * There's no 'html' rule, so there's no point in making it PHONY... 2011-01-15 23:37 strk * Don't need to clean image_src in maintainer-clean as that's already done by clean, which is a dependency of maintainer-clean 2011-01-15 23:14 strk * topology.AddFace: group face boundary edge finding query results to avoid considering the _same_ edge multiple times. Can reduce execution time from _hours_ to _minutes_ [RT-SIGTA] 2011-01-15 19:11 robe * ST_GetFaceGeometry and minor formatting 2011-01-15 18:49 robe * fix some typos 2011-01-15 14:59 robe * Put back AddNode -- accidentally replaced with an extra AddEdge. 2011-01-15 14:33 robe * AddFace, minor additions to other functions and note about dependencies on GEOS 3.3 2011-01-15 07:14 robe * document addnode, fix typo 2011-01-15 06:50 robe * Add examples for AddEdge, fix typo, add TIGER overview link as an example of a topologically based database for people not clear of its utility. 2011-01-14 16:40 strk * topology.AddEdge: handle case of endpoint intersection between closed edges. Fixes #770. [RT-SIGTA] 2011-01-14 00:01 robe * Get rid of ST_BandHasNoDataValue and ST_SetBandHasNoDataValue. Amend ST_BandNoDataValue to reflect new way of setting it to NULL if you want all pixel values considered. 2011-01-13 23:56 robe * Document AddEdge function will provide example later 2011-01-13 23:44 robe * forgot to update the description too 2011-01-13 23:40 robe * Amend ST_GeometryN to note singular geometry behavior change 2011-01-13 21:36 jorgearevalo * Functions ST_BandHasNodataValue and ST_SetBandHasNodataValue deleted. Related ticket #602. 2011-01-13 20:09 jorgearevalo * Minor bug solved in debug functions. 2011-01-13 15:05 robe * fix typo 2011-01-13 14:55 robe * Amend release notes to include new changes in 2.0 2011-01-13 13:36 robe * mark TopoElementArray_agg as new in 2.0.0, back reference topoelementarray back to this function. 2011-01-13 13:21 strk * add ST_RelateMatch item 2011-01-13 09:37 robe * fix another id typo 2011-01-13 09:34 robe * fix link id 2011-01-13 08:48 robe * topolelementarray_agg and revise xsl to comment agg (hack fo r now will do better later) 2011-01-13 08:27 robe * Another minor change to ST_3DShortestLine. Document topoelementarraay and GetTopoGeomElementArray (which by the ways seems to me a bit of a misnomer) 2011-01-13 07:13 robe * Minor formatting changes of ST_3DShortestLine, get rid of note abotu ST_3DMaxDistance only working for points and linestrings now that it works for most everything. 2011-01-12 22:37 jorgearevalo * Fixed bug #655. 2011-01-12 22:03 robe * #768: get rid of replace ndims with st_ndims in populate_geometry_columns 2011-01-12 22:02 mloskot * [raster] Cleaned and updated copyright notice. 2011-01-12 21:58 nicklas * Added ST_3DShortestLine in doc and some small editing. ST_3DLongestLine is still missing. Regina, please take a look if it looks ok. 2011-01-12 21:17 jorgearevalo * Regression test expected result is now empty. Related tickets: #759, #769. 2011-01-12 19:10 pracine * -Revert to original values for two test failing on Mat machine. Those values are the good ones on Pierre`s Windows and Jorge`s Linux. Something must have gone wrong on Mat`s one. 2011-01-12 17:24 robe * update see also links 2011-01-12 17:22 robe * Get rid of note in ST_3DDistance that states only works for linestrings and points. Now works for all. Add an example of polygon/multilinestring and update 3DClosestPoint example to be the same for contrast compare 2011-01-12 11:07 robe * get rid of note about 3d relatonship dist functions only workng for points and linestrings. They work for polygons and even polyhedralsurfaces though need to verify answers are right. 2011-01-12 10:23 robe * update to reflect note about breaking change in naming of PixelSize to Scale 2011-01-12 08:14 robe * GetTopologyName, GetTopologyID accessors 2011-01-12 07:52 robe * remove availaiblit 2.0 from existing functions since they were available before (will reserve that for really new functions). Add domains section and accessors section. Revise topology_comments to be able to put in descriptors for domains 2011-01-12 06:32 robe * ValidateTopology and validatetopology_returntype 2011-01-12 05:01 robe * get rid of deprecated calls and checks to srid() and setsrid() and ndims() in populate_geometry_columns, UpdateGeometrySRID, probe_geometry_columns, find_srid 2011-01-11 17:18 robe * make relatematch a conditional GEOS 3.3 test 2011-01-11 15:53 robe * Add another type, add missing element, update make check example in installation. Fix error introduced in regress that prevented all tests from running. 2011-01-11 15:20 robe * Give installation a pretty anchor name so can be referenced easily from elsewhere. Update to include how to compile with topology and raster support. Add a type section to topology to define structure of topogeometry etc. Ammend topology_comments to be able to extra type comments. 2011-01-11 09:12 robe * #764: Topology error using ST_AddIsoNode (now that raster has an ST_Intersects it is now more necessary to not rely on auto casts) 2011-01-11 03:38 robe * fix duplicate refentry id 2011-01-11 03:22 robe * #763: documentation had wrong datatype for tg_type which made the associated comment break 2011-01-10 17:31 robe * #760: missed some 2011-01-10 17:27 robe * #760: replace deprecated function names with new names so all regress tests pass again. This should completely work now. 2011-01-10 17:13 robe * Start replacing deprecated names with new names - still more to do 2011-01-10 16:36 robe * #722: Get rid of more deprecated functions - mem_size, xmax, xmin,ymax, ymin,zmflag,zmax,zmin 2011-01-10 14:21 jorgearevalo * Deleted gserialized check. It's safe to use geometry_gist_sel. Related ticket #758. 2011-01-09 18:38 robe * Get rid of now unuseful note in ST_Value. Update short-description to reflect now works with geometry points 2011-01-09 16:01 jorgearevalo * Replaced annoying warning message for a debug-only message. Related ticket #759. 2011-01-08 10:51 nicklas * fix typo from r6580, and some enhanced notes 2011-01-07 15:12 jorgearevalo * Bug solved: RASTER_DEBUGf replaced by RASTER_DEBUGF. Related ticket #757. 2011-01-07 13:38 robe * remove wmsservers_old so its failure doesn't halt further make check 2011-01-07 13:08 nicklas * Fix for ticket #755 2011-01-07 10:48 strk * Enlarge the diagram image, by Andrea Peri (#750) 2011-01-07 09:55 strk * Fix bug in topology.DropTopology getting confused in presence of multiple topologies [RT-SIGTA] 2011-01-07 09:54 strk * Add TopoElementArray_agg function, to help with TopoGeometry construction [RT-SIGTA] 2011-01-05 23:35 robe * #722 : remove deprecated functions (part): contains, intersection, line_interpolate_point, line_locate_point, line_substring, locate_between_measures 2011-01-05 22:25 robe * #722 remove deprecated functions (part): boundary, GeomUnion, intersects, IsRing, IsSimple, length2d_spheroid, locate_along_measure, relate,PointOnSurface, SnapToGrid, symmetricdifference, touches 2011-01-05 17:41 jorgearevalo * Replaced references to "pixsize" by "scale". Complete the previous commit. Related ticket #654 2011-01-05 17:38 jorgearevalo * Updated plpgsql scripts, replacing "PixelSize" with "Scale". Related ticket #654 2011-01-05 17:01 jorgearevalo * Call to ctx->warn replaced by RASTER_DEBUGF, to avoid annoying and unexpected messages in calls to st_bandmetadata. 2011-01-05 14:56 robe * #722 (part): Down with really really dumb constructors :) GeomCollFromText,LineFromText,LineFromWKB,LineStringFromText,LinestringFromWKB,LineMerge,MLineFromText ,MLineFromWKB,MPointFromText,MPolyFromWKB,MultiLineFromWKB,MultiLineStringFromText,MultiPointFromWKB, ST_Polygonize_GArray,PolyFromText,PolyFromWKB,PolygonFromWKB,PointFromText,PointFromWKB 2011-01-05 13:47 robe * more cleanup of operator functions that are now removed 2011-01-05 13:36 robe * remove related operator, chip no longer installed. I still think we need to get rid of the DROP CASCADES in this file 2011-01-05 13:34 robe * #302: okay I forgot some - remove old functions that are ST_ redundant copies of operator ones st_geometry_lt,st_geometry_le,st_geometry_le,st_geometry_gt,st_geometry_ge,st_geometry_eq,st_geometry_cmp, postgis_gist_sel,postgis_gist_joinsel,st_postgis_gist_sel,st_postgis_gist_joinsel,st_geometry_overleft, st_geometry_overabove,st_geometry_left,st_geometry_right,st_geometry_above, st_geometry_below,st_geometry_contain ,st_geometry_contained,st_geometry_overlap,st_geometry_same 2011-01-05 05:57 robe * #302 completed I think: Drop ST_ duplicate variants of functions underneath TYPE and OPERATOR definitions. remove: st_geometry_analyze 2011-01-04 17:44 robe * #302 (part done): Drop ST_ duplicate variants of functions underneath TYPE and OPERATOR definitions. st_box3d_in, st_box3d_out,st_spheroid_in, st_spheroid_out,st_geometry_in, st_geometry_out, st_geometry_recv,st_geometry_send 2011-01-04 17:25 robe * #722 - remove more deprecated functions - crosses, within,multipointfromtext,mpolyfromtext, multipolygonfromtext 2011-01-04 13:59 robe * remove deprecated functions: bdpolyfromtext,bdmpolyfromtext,collect,disjoint,memcollect,memgeomunion, unite_garray,st_unit_garray . reshuffle legacy.sql.in.c so aggregates and dependencies are together 2011-01-04 13:35 robe * remove more deprecated: dimension,exteriorring, geometryn,interiorringn, isempty,isclosed, m,numinteriorring, numinteriorrings,pointn,x,y,z 2011-01-04 13:07 robe * remove deprecated functions: addpoint,ndims,numgeometries,numpoints,removepoint,setpoint 2011-01-04 12:51 robe * remove more deprecated functions 2011-01-03 19:26 robe * get rid of more deprecated functions 2011-01-03 18:52 robe * remove more deprecated functions 2011-01-03 18:24 robe * 2011-01-03 16:35 jorgearevalo * Deleted old flex/bison analyzer for MapAlgebra. Newer version on raster/rt_core. 2011-01-03 16:17 jorgearevalo * Added regress test files for ST_IsEmpty and ST_HasNoBand (they were missed in previous commit) 2011-01-03 16:07 jorgearevalo * Added code for ST_IsEmpty and ST_HasNoBand functions. And test code for the first one. Related tickets #592, #593. 2011-01-03 11:53 jorgearevalo * Changed information return by postgis_raster_build_date and postgis_raster_lib_version, to match the PostGIS build date and version. Related ticket #653 2011-01-03 10:55 jorgearevalo * Raster doc updated with the new names of several functions (Box2D, Scale, etc). Related ticket #654 2011-01-03 10:46 jorgearevalo * Renamed accessors and editors of 'PixelSize' to 'Scale', including tests. Related ticket #654. 2011-01-02 22:21 jorgearevalo * Some modifications made on basic MapAlgebra lexer/parser. Very basic version just now. 2011-01-01 15:35 jorgearevalo * Temporarily include postgis/gserialized.h file in raster/rt_pg/rtpostgis.sql.in.c to get access to GSERIALIZED_ON and avoid error with gserialized enabled 2010-12-31 08:12 robe * add gist index overlap tests 2010-12-31 01:53 robe * update bios 2010-12-30 23:28 jorgearevalo * Changed some functions names for operators. Related tickets #742, #730 2010-12-30 23:17 pramsey * gserialized enabled ST_Reverse LINESTRING EMPTY crash (#743) 2010-12-30 21:00 pramsey * Convex hull serialization problem (#741) 2010-12-30 18:31 nicklas * rounding precision difference in measures regress test #703, #735, #607 2010-12-30 16:54 pramsey * Guard against empty in isclosed (#740) 2010-12-30 00:14 pramsey * Add in gserialized-ready selectivity functions for 2d default index. 2010-12-29 18:51 pramsey * ST_ExteriorRing POLYGON EMPTY crash (#708) 2010-12-29 15:49 nicklas * typo in comment 2010-12-29 15:38 robe * Get rid of a lot of deprecated functions. People will hate me c'est la vie. 2010-12-29 15:37 robe * get rid of more deprecated calls, but keep old deprecated wmsservers and rename to wmsservers_old. Create a new version wmsservers_new that doesn't use deprecated calls. the old will fail once I pull the switch on old deprecated calls, but the new should work. 2010-12-29 15:17 robe * remove deprecated tests 2010-12-29 14:50 robe * forgot these 2010-12-29 14:48 robe * get rid of more deprecated 2010-12-29 14:14 robe * Get rid of more deprecated calls 2010-12-29 14:07 pramsey * Update test to reflect that polygons are now supported. 2010-12-29 09:58 robe * start new section 2010-12-28 22:12 nicklas * 3D distance functions against polygons 2010-12-28 21:58 robe * fix dangling RT_ST_Box2D references 2010-12-28 18:24 robe * Get rid of deprecated calls 2010-12-28 18:24 robe * get rid of deprecated calls 2010-12-28 18:22 robe * start getting rid of deprecated calls 2010-12-28 18:00 pramsey * Fix regression failure in standard serialization mode. (#735) 2010-12-28 17:16 strk * Default topology tolerance is 0, not -1 2010-12-28 15:47 robe * reenable ST_AddPoint 2010-12-28 01:10 pramsey * Over-determined dimensionality in building line from lwptarray 2010-12-28 00:54 pramsey * Whoops, senses of many 2d operators were reversed. 2010-12-28 00:42 robe * miscellaneous fixes and indentation 2010-12-28 00:27 pramsey * T_Distance_Spheroid is kinda broken (#677) 2010-12-28 00:24 pramsey * ST_Distance_Spheroid is kinda broken (#677) 2010-12-27 22:41 pramsey * ST_MakeLine aggregate function crashes with empty geometries (#729) 2010-12-27 11:56 strk * PG_CONFIG seems to be needed for PGXS 2010-12-27 11:10 strk * Add ST_SharedPaths and ST_Snap items 2010-12-27 11:05 strk * Do not consider DEBUG and NOTICE mesages when running sqlmm regression tests. Should fix #734. 2010-12-27 03:38 robe * ST_Box2D -> Box2D 2010-12-27 01:40 robe * get rid of more functions 2010-12-26 19:27 robe * revise to include mention of topology support 2010-12-26 19:11 robe * fix tag typo pointed out by strk 2010-12-26 18:47 robe * put AddTopo.. example in programlisting tag, minior indenting changes 2010-12-26 13:24 jorgearevalo * ST_Box2D replaced by Box2D. Related ticket #730. 2010-12-25 19:38 robe * DropTopogeometryColumn 2010-12-25 19:02 robe * 2010-12-25 18:58 robe * Example for addtopogeometrycolumn 2010-12-24 22:08 pramsey * Change default gserialized gist index to 2d and put all the old operators back in place. 2010-12-24 18:13 robe * fix data type mismatches that got flagged when generating topology comments, put in a set_path clause for topology comments generation 2010-12-24 18:01 robe * Start work on topology database help and garden tester. 2010-12-24 17:53 robe * AddTopoGeometryColumn 2010-12-24 10:22 strk * Update with some integrations provided by Andrea Peri [RT-SIGTA] 2010-12-24 01:38 robe * Fix for #732 - chip does not exist 2010-12-23 22:49 pramsey * Add more tickets tests up to #700 2010-12-23 22:06 pramsey * Fix conversion to geometry (#730) 2010-12-23 19:06 pramsey * Add some tickets from the trac into regression 2010-12-23 18:05 pramsey * Move clone prototypes back into public... 2010-12-23 18:03 pramsey * ST_AddPoint is broken (#662) 2010-12-23 17:41 robe * ability to exclude operators from testing 2010-12-23 17:30 strk * Other CREATEFUNCTION and _VOLATILE* gone (see #714) 2010-12-23 17:21 robe * log more sql 2010-12-23 17:04 pramsey * ST_MakeBox2D crashes with LINESTRING (#728) 2010-12-23 14:19 strk * Stop relying on preprocessor for CREATEFUNCTION and _VOLATILE (see #714) 2010-12-23 13:31 robe * miss end para 2010-12-23 12:49 strk * Make ST_GetFaceGeometry use ST_BuildArea rather than assuming first polygon coming out of Polygonize will be the correct one. Fixes ticket #726. Enables automated testing for it. 2010-12-23 12:28 strk * Add test showing bug in st_getfacegeometry 2010-12-23 07:57 strk * more git ignores 2010-12-22 22:40 pramsey * Last regression fixes for postgis-on-gserialized 2010-12-22 21:16 pramsey * Change srid from uint32 to int32 and update gserialized and TYPMOD handlers to deal with signed SRIDs 2010-12-22 20:02 robe * miscellaneous 2010-12-22 19:41 robe * Goodbye length 2010-12-22 19:15 robe * Good bye simplify 2010-12-22 19:04 robe * History #515: good bye chip (we can hold on to the dependency functions thru postgis 2.0 and then maybe completely rid in 2.1) 2010-12-22 18:59 jorgearevalo * Basic flex/bison grammar to start working with raster MapAlgebra 2010-12-22 18:45 strk * Support faces with all edges on the same side, and test [RT-SIGTA] 2010-12-22 18:42 robe * get rid of addbbox,dropbbox,hasbbox (and replace occurrences in regress with newer postgis_addbbox etc) 2010-12-22 18:24 strk * Add rules to avoid the infinite loop took before ./configure is run 2010-12-22 17:27 strk * Implement topology.AddFace and add test 2010-12-22 17:08 robe * move all deprecated Affine functoins to legach.sql.in.c, remove use in non-deprecated functions and in regress tests 2010-12-22 06:17 pramsey * Add legacy file for removed-but-not-forgotten old function aliases 2010-12-22 01:08 pramsey * Continue working GSERIALIZED_ON into the code base. Working on switching BOX2DFLOAT4 to a GBOX 2010-12-21 23:56 pramsey * Remove some ST_ variants of cast-support functions (#302), and start legacy.sql.in.c (#722) 2010-12-21 22:19 robe * fix typo 2010-12-21 22:14 robe * point relation functions to DE-9IM section of docs for more info 2010-12-21 21:39 pramsey * More clean-up and work on using gserialized. 2010-12-21 18:01 pramsey * Push the UNKNOWN forcing down into gserialized get/set 2010-12-21 17:38 robe * Document ST_RelateMatch -- polish up later 2010-12-21 17:36 strk * Don't release memory associated with arguments. Fixes #725. 2010-12-21 10:32 strk * Implement ST_RelateMatch, see ticket #717. [RT-SIGTA] 2010-12-21 01:55 pramsey * Some preliminary fixes to support SRID_UNKNOWN == 0 2010-12-20 23:34 pramsey * Add regression test for #723 2010-12-20 22:01 strk * Fix addEdge when both endpoints are shared with an existing edge (and test) [RT-SIGTA] 2010-12-20 19:41 pramsey * Fix last regression break in casting 2010-12-20 19:31 pramsey * Arg, there's regression breaks in the last commit! 2010-12-20 19:16 pramsey * ST_Intersection for geography is really messed up (#723) 2010-12-20 12:03 robe * fix typo 2010-12-20 04:39 pramsey * Remove a few more old constructions in favour of forward-compatible approaches. 2010-12-18 21:48 robe * fix spatial_class update 2010-12-18 16:44 pramsey * Add the operators to the index opclass too 2010-12-18 16:42 pramsey * Add some operators to indexes on gserialized 2010-12-18 15:31 pramsey * Add in test for #720 2010-12-18 15:27 pramsey * ST_Transform is broken for all MULTI geometries (#720), wonder how that got through... 2010-12-18 05:06 pramsey * Add gserialized.h. Later this can be the central place for index/object utilities, for now it just holds the switch to turn the gserialized code on and off while we develop 2010-12-18 04:54 pramsey * Remove oddity around gbox duplication 2010-12-18 00:38 pramsey * More syncro between geometry and geography. Stubbed index binding. 2010-12-17 22:16 pramsey * Re-name GiST index functions generically for re-use in geometry. 2010-12-17 22:03 pramsey * Review to prepare generic index bindings for geography, then geometry 2010-12-17 21:32 pramsey * Harmonize some index support functions to be more generic gserialized functions and less specific geography functions. 2010-12-17 20:10 pramsey * Re-orgs to push the geodetic/cartesian divide a little further under the covers as part of the geometry/geography group hug at the index bindings level. 2010-12-17 18:34 robe * fix typo add DropTopology 2010-12-17 17:56 strk * Add regress testing for topology.AddEdge 2010-12-17 17:44 robe * 2010-12-17 17:24 robe * 2010-12-17 17:19 strk * Add a note about possible semantic change 2010-12-17 17:16 strk * New topology.AddEdge function [RT-SIGTA] 2010-12-17 16:45 robe * fix typos 2010-12-17 16:34 robe * Put in section in manual for topology and extras in general. Change postgis.refractions.net to www.postgis.org 2010-12-17 16:16 strk * Use newer quoting paradigm ($$); use ST_Crosses when willing to check crossing, not just intersection...; add proper credits 2010-12-17 15:51 strk * Add an inspection in the final node table 2010-12-17 15:27 strk * Add test for topology.addNode 2010-12-17 15:17 strk * Avoid NOTICE messages while running topology tests, make results immune of the number of topologies ever created in the database (helps getting stable results when running the tests manually using run_test directly) 2010-12-17 14:00 jorgearevalo * Added very basic flex files for raster MapAlgebra implementation. The file 'ma_lexer_only' is for testing only the lexer, without the parser 2010-12-17 07:52 strk * split load_topology in 3 steps: load of topology, creation of feature tables, query of feature tables. Adapt tests accordingly. 2010-12-16 18:02 strk * Return number of failures as exit status 2010-12-16 18:00 strk * Have run_test exit code reflect presence of failures. 2010-12-16 17:52 strk * Remove duplicated check rule 2010-12-16 17:46 strk * This one shouldn't be in the repository.. anyway, since it is... 2010-12-16 17:30 strk * Turn 'regress' dir into a first class subdir, fixes ticket #715 2010-12-16 16:33 strk * Comment-out obsoleted rules (didn't drop in case someone will miss them) 2010-12-16 16:28 strk * Add 'distclean' to the SUBDIRS target 2010-12-16 14:46 strk * Add 'check' rule under the SUBDIR loop. You now get topology checked if you configured --with-topology 2010-12-16 14:35 strk * Only run unit tests when building GUI (See http://postgis.refractions.net/pipermail/postgis-devel/2010-December/011014.html) 2010-12-16 14:17 robe * yeh can put ST_AsKML test back in now that trunk isn't crashing on it. 2010-12-16 13:16 robe * most have missed these 2010-12-16 09:48 strk * Add 'clean' to the set of targets handled with the SUBDIRS loop 2010-12-15 22:17 pramsey * Add in GSERIALIZED options for many of the pglgweom_ support functions. 2010-12-15 21:31 pramsey * Add in #defines to allow conditional switch-over to GSERIALIZED 2010-12-15 20:06 strk * Fail on fix subdir build failure. Add missing uninstall rule in liblwgeom 2010-12-15 18:35 pramsey * Remove silly pointer tests from LWGEOM_collect 2010-12-15 18:29 strk * Install topology.sql in the same directory as other things postgis 2010-12-15 18:28 pramsey * LWGEOM_accum is orphaned code, bye bye! 2010-12-15 18:03 strk * Generate GNUMakefile, add a --with-topology switch to configure, enabling descending under topology/ dir 2010-12-15 17:51 pramsey * Move geometrycollection back out of the supported types for KML 2010-12-15 17:46 pramsey * KML crashes on EMPTY (#681) 2010-12-15 17:14 strk * Thanks for the great partecipation around GNUmakefile improvements proposal. It's finally here :) 2010-12-15 17:11 strk * Add a check rule under topology/ [RT-SIGTA] 2010-12-15 17:06 strk * Make sure predicate sql file is generated before use 2010-12-15 16:41 strk * Add sqlmm automated test. Drop old rules [RT-SIGTA] 2010-12-15 16:24 strk * automatize topology validity checking [RT-SIGTA] 2010-12-15 16:04 strk * Start a proper 'make check' rule, using the testrunner in top dir's regress dir 2010-12-15 15:25 robe * okay just exclude POLYGON EMPTY and ST_AsKML -- too many victims for POLYGON EMPTY including ST_LineMerge now. change namespace to www.postgis.org 2010-12-15 14:14 strk * Allow run_test calls from foreign directories 2010-12-15 14:09 strk * Do not read ~/.psqlrc when creating database 2010-12-15 14:04 strk * Add a --topology switch to equip regression db with topology support when requested 2010-12-15 13:39 strk * Add new populate.sql file to host topology population routines. Properly encode dependencies. 2010-12-15 13:23 robe * exclude more functions from tests that are sorta broken 2010-12-15 11:01 strk * Split sqlmm specific things into its own file 2010-12-15 10:48 strk * Work outside of transaction, to help upgrade/test cycles. Fix leftover from previous commit. [RT-SIGTA] 2010-12-15 10:44 strk * Fix typo in TopoGeo_addLinestring description, add DEBUG lines [RT-SIGTA] 2010-12-15 10:08 strk * Fix detection of non-existent schema in ST_CreateTopoGeo 2010-12-15 00:57 pramsey * Flip more memcpy calls away. 2010-12-15 00:24 pramsey * Remove some calls to memcpy in favor of API functions. 2010-12-15 00:12 pramsey * Strip out more instances of SERIALIZED_FORM 2010-12-14 20:30 pramsey * Return non-zero when tests fail 2010-12-14 20:21 pramsey * Fix regressions in the new KML emitter 2010-12-14 16:00 robe * exclude from testing functions known to crash with POLYGON EMPTY 2010-12-14 05:53 pramsey * Memory leak in geography_from_text (#624) 2010-12-14 05:01 pramsey * Minor usage changes. (#604) 2010-12-14 00:56 pramsey * Update (c) header 2010-12-14 00:54 pramsey * Convert KML output to use stringbuffer for a 50% code shrinkage... 2010-12-14 00:49 pramsey * Remove multicurve warning 2010-12-14 00:37 robe * fix some typos and add back curvepolygon example that was crashing before with old ewkt parser 2010-12-13 23:50 pramsey * Second thoughts on stringbuffer changes 2010-12-13 23:40 pramsey * Potential minor speed-up functions for stringbuffering 2010-12-13 23:34 pramsey * Add extra multicurve test for WKT 2010-12-13 21:42 pramsey * Update parser to handling compound curves within multicurves (#525) 2010-12-13 21:31 pramsey * ST_CollectionExtract returns non-requested type (#457) 2010-12-13 20:40 pramsey * Return value of snprintf not correctly checked (#556) 2010-12-13 20:25 pramsey * Improve stringbuffer_t performance (#439). This is largely done already in past passes. Added one small memory fix. 2010-12-13 20:09 pramsey * Change default shp2pgsql column to "geom" (#352) 2010-12-13 19:50 robe * 2010-12-13 19:44 robe * 2010-12-13 19:44 robe * 2010-12-13 19:43 pramsey * Fix ST_Segmentize on curved geometries -- CRASH (#706). This is actually a reflection of inconsistency in the lwgeom_clone() function (creates copy of everything except point array) and the ptarray_clone() function (creates copy of everything). The definitions of _clone, _copy, _release, and _free need to be made consistent and documented. 2010-12-13 19:42 robe * 2010-12-13 19:34 robe * 2010-12-13 19:32 robe * 2010-12-13 19:25 robe * 2010-12-13 19:25 pramsey * Fix up failure in distance calculation (#705) and replace some SRID -1 with SRID_UNKNOWN 2010-12-13 19:19 robe * 2010-12-13 16:38 robe * Okay changed this to LF since people seemed to like changing this one a lot. We'll see if this fixes my frustrations without causing any frustration for anyone else. 2010-12-13 13:14 robe * remove collection of geometries into crasher group to prevent testing until we revisit #700 2010-12-13 10:49 strk * Add comments on the 'edge' topology primitives view 2010-12-13 09:51 strk * typo 2010-12-12 22:42 nicklas * 3d distance functions for line-line cases 2010-12-12 18:59 nicklas * Some cleaning up in measure functions in lwgeom_functions_basic.c 2010-12-12 00:12 pramsey * Remove more SERIALIZED_FORM 2010-12-11 00:28 pramsey * ptarray_free now frees the serialized_ptlist, unless FLAGS_GET_READONLY is set. 2010-12-11 00:27 strk * Do not force drop of pre-existing topology schema. Sounds dangerous when start using it for real. 2010-12-10 23:22 pramsey * Switch to cstring2text for text returns. 2010-12-10 23:15 pramsey * Clean out more SERIALIZED_FORM calls 2010-12-10 22:45 pramsey * Clean out some more calls to SERIALIZED_FORM 2010-12-10 20:22 pramsey * Issues with TRIANGLE AND TIN EMPTY collections - hmm do they exist? (#686) 2010-12-10 19:44 pramsey * Fix for TIN EMPTY per #686 2010-12-10 19:10 pramsey * Fix cunit failures on Polyhedral surface (#697) 2010-12-10 18:10 pramsey * WKB and WKT closure checks are now in X/Y only (#693) 2010-12-10 18:06 strk * Revert GNUMakefile changes as per Mark request. I had enough complains about build scripts this week... 2010-12-10 18:00 pramsey * Fix ST_Segmentize and Polyhedral Surface -- CRASH (#696) 2010-12-10 17:57 strk * Add 'uninstall' rule in the loop. Work around the docs dep by using uninstall deps. Add an 'uninstall' rule to raster subsystem 2010-12-10 17:49 strk * Be verbose during recursion. List liblwgeom in SUBDIRS, stub install rules for liblwgeom and utils 2010-12-10 17:29 strk * more ignores 2010-12-10 17:19 strk * Start listing some subdirs to recurse into. Hopefully one day this will become cleaner 2010-12-10 17:19 strk * add .svn to .gitignore (why is this in repo ? oh well.. it is useful anyway) 2010-12-10 15:45 pramsey * Fix for crash in ST_RemovePoint (#695) 2010-12-10 14:53 mloskot * Fixed problems with truncated decimal places of float-point values in textual output. For large datasets, it was leading to incorrectly calculated dimensions. Now, all floats are formatted with 15 decimal places. 2010-12-09 19:17 pramsey * Wrap up GEOS predicates in EMPTY tests (#685) 2010-12-09 18:52 pramsey * Remove old function calls 2010-12-09 18:51 pramsey * Fix for centroid crash on emtpy (#684) 2010-12-09 18:00 pramsey * Fix crash in ST_MakeLine (#690) 2010-12-09 16:10 pramsey * Add config rpath 2010-12-09 15:00 robe * formatting 2010-12-08 23:58 pramsey * Remove more appeals to pglwgeom->type 2010-12-08 23:52 pramsey * Remove more appeals to pglwgeom->type 2010-12-08 23:40 pramsey * Remove more appeals to pglwgeom->type 2010-12-08 23:29 pramsey * Remove another call to TYPE_HASBBOX 2010-12-08 23:28 pramsey * Remove call to TYPE_HASBBOX 2010-12-08 23:27 pramsey * Remove many cases of calls to SERIALIZED_FORM in favour of direct pglwgeom deserialization 2010-12-08 23:19 robe * need to keep GEOMETRYCOLLECTION EMPTY away from others since GEOS throws geometry collection not support for it often so hiding the crashing in some cases of typed empties. 2010-12-08 22:31 pramsey * Remove many instances of lwgeom_getType used on PG_LWGEOM 2010-12-08 22:02 robe * Add more emptiness. We need to explore emptiness more deeply :) 2010-12-08 21:21 pramsey * When asking for a serialized forms type, use pglwgeom_get_type 2010-12-08 20:54 pramsey * Cut down reliance on TYPE_GETTYPE macro in favor of a function we can repoint later in the serialization change process 2010-12-08 20:35 pramsey * Expunge some TYPE_GETTYPE 2010-12-08 20:35 pramsey * Start to work on PG_LWGEOM sanity before changeover 2010-12-08 19:24 pramsey * Rename has_arc to lwgeom_has_arc 2010-12-08 19:23 pramsey * Fix crash on BuildArea(empty) (#683) 2010-12-08 18:20 pramsey * Handle empty geometries in ST_Buffer(). If argument empty, return empty. (#682) 2010-12-08 18:06 pramsey * Fix crash in GML output of POLYGON EMPTY (#681) 2010-12-08 16:20 pramsey * Fix AsBinary handling of > 2d features in geography (#680) 2010-12-08 16:04 pramsey * Output higher dimensions in astext in geography (#680) 2010-12-08 00:23 pramsey * Minor rearrangement of memory handling. 2010-12-08 00:02 pramsey * Rename lwgeom_from_wkt to lwgeom_parse_wkt to note the use of the parser object. 2010-12-07 21:59 pramsey * Start flipping over references to srid = -1 to srid = SRID_UNKNOWN 2010-12-07 21:55 strk * Use unified diffs for expected/obtained (easier to read) 2010-12-07 21:08 pramsey * Replace the old WKB/WKT parser and emitters with the new ones. 2010-12-07 14:02 robe * change to 1 column (st_sharedpaths) 2010-12-07 13:45 robe * reduce width some more 2010-12-07 13:42 robe * change color to be clearer reduce width of text 2010-12-07 12:51 robe * end tbody 2010-12-07 12:45 robe * fix formatting 2010-12-07 12:42 robe * diagram of shared paths 2010-12-07 12:25 robe * formatting fixes 2010-12-07 12:02 robe * more examples to demonstrate its not just limited to 1 point snapping 2010-12-07 08:30 robe * looks funny in one row, better put each in separate row 2010-12-07 07:56 robe * example with diagram for ST_Snap 2010-12-06 15:15 robe * minor comment corrections 2010-12-06 15:15 robe * start logging sql queries to log table 2010-12-06 15:07 strk * Add a couple more cases provided by RT-SITA 2010-12-06 14:52 strk * Document ST_Snap, xref with SnapToGrid 2010-12-06 14:21 strk * Fix typo in ST_SharedPaths documentation, add some xrefs 2010-12-03 21:38 pramsey * Updates to the WKT parser to report errlocation in more places. 2010-12-03 16:53 pramsey * Make use of ptarray api for manipulating serialized_pointlist 2010-12-03 15:53 pramsey * Remove a couple warnings. 2010-12-03 10:13 strk * Add SNAP test reported on JTS mailing list 2010-12-03 09:53 strk * Fix release of wrong memory (same bug as #670, found here for copy&paste) 2010-12-03 09:22 strk * FREE the right argument (fixes bug #670) 2010-12-03 09:00 strk * Add test for bug 670 2010-12-03 05:40 robe * document st_sharedpaths and alphabetize listings 2010-12-02 20:38 pramsey * Change i18n instructions to use shp2pgsql_LANG.po as format for po file names. 2010-12-02 20:35 pramsey * Remove serialized_pointlist direct access from ./postgis 2010-12-02 19:09 pramsey * Move is_closed fully to liblwgeom and remove LWGEOM_INSPECTED from IsClosed 2010-12-02 18:52 pramsey * Remove LWGEOM_INSPECTED from pointn, startpoint, endpoint, and migrate functionality to liblwgeom. 2010-12-02 18:12 strk * ST_Snap and regress testing 2010-12-02 18:01 pramsey * Remove LWGEOM_INSPECTED from PointN 2010-12-02 17:46 pramsey * Remove LWGEOM_INSPECTED from NumInteriorRings 2010-12-02 17:39 pramsey * Remove unused function 2010-12-02 17:38 pramsey * Remove LWGEOM_INSPECTED from ndims 2010-12-02 17:18 pramsey * Remove INSPECTED from numpoints 2010-12-02 16:25 mloskot * Updated SQL scripts location in the database building makefile 2010-12-02 16:13 pramsey * Remove GET_GETTYPE from some functions. 2010-12-02 16:06 robe * fix typo 2010-12-02 15:55 pramsey * Remove LWGEOM_INSPECTED from ST_Union 2010-12-02 15:54 robe * remove ~= geography according to garden tests geography doesn't have such an operator. Also put in version number arg name to make GeoJSON easier to test 2010-12-02 15:51 robe * all test sql statements should be logged to postgis_garden_log and successful results output to postgis_garden_log_output 2010-12-02 15:37 pramsey * Pass iconv header flags to cpp in all cases. 2010-12-02 15:29 mloskot * Fixed invalid on-error return value from rt_raster_add_band 2010-12-02 15:28 mloskot * Updated the raster messages output by the configure script. 2010-12-02 14:40 jorgearevalo * Changed SRID by srid in LWPOLY structure call. Due to change in r6204 2010-12-02 06:55 robe * start logging the sql to postgis_garden_log table and store the output as xml in postgis_garden_log_output. Still more to fix. This will hopefully make it easier for vegetable gardeners to pick ripe vegetables. 2010-12-02 03:43 pramsey * Add i18n string wrapper for pgsql2shp utility too. 2010-12-02 00:51 pramsey * Now for sure. 2010-12-02 00:50 pramsey * Final one? 2010-12-02 00:48 pramsey * More NLS macros 2010-12-02 00:47 pramsey * Add another NLS macro 2010-12-02 00:46 pramsey * Add needed macro 2010-12-02 00:44 pramsey * First attempt at i18n for the loader/dumper. 2010-12-01 20:28 pramsey * Remove LWGEOM_INSPECTED from perimeter calculation 2010-12-01 19:59 pramsey * Remove LWGEOM_INSPECTED from transform functions 2010-12-01 18:13 strk * Add regression testing for ST_SharedPaths 2010-12-01 18:11 strk * Support typed multi* empties, just enough fro ST_SharedEdge (see issue #673 for more) 2010-12-01 16:23 strk * Fix builds against libgeos < 3.3.0 2010-12-01 16:23 strk * Retain SRID in output 2010-12-01 16:15 strk * Newer script (2009 rather than 2006). Hoping others' won't have it updated (my ./autogen.sh runs always update it) 2010-12-01 15:54 strk * Build and register ST_SharedPaths 2010-12-01 15:42 strk * postgis/Makefile is generated from postgis/Makefile.in by ./configure 2010-12-01 15:12 robe * no fair -- I want a collection of empties too 2010-12-01 15:07 strk * typo 2010-12-01 14:56 strk * Test dumping an insanely _empty_ geometry 2010-12-01 14:44 strk * Test ST_Dump(EMPTY) 2010-12-01 14:41 strk * Add test for ST_Dump 2010-12-01 13:57 strk * some ignores 2010-12-01 13:57 strk * Execute bit 2010-12-01 13:57 strk * Build ST_SharedPaths function (currently returning a geometrycollection) 2010-12-01 01:02 pramsey * Add stringbuffer_create_size() to allow different starting sizes for the buffer 2010-12-01 00:53 pramsey * Move affine transforms into liblwgeom and expunge LWGEOM_INSPECTED 2010-12-01 00:00 pramsey * Make spheroid distance respect z if it's there. 2010-11-30 23:46 pramsey * Remove old length_ellipse functions 2010-11-30 23:44 pramsey * Move spheroid length calculation to using same function as geography 2010-11-30 23:23 pramsey * Include some extra memory freeing in the force_ndims variants. 2010-11-30 22:55 pramsey * Move length calculations fully to liblwgeom and remove LWGEOM_INSPECTED 2010-11-30 21:54 pramsey * Move area calculations fully to liblwgeom and remove LWGEOM_INSPECTED 2010-11-30 21:35 pramsey * Remove LWGEOM_INSPECTED from AsGML and AsKML 2010-11-30 20:11 pramsey * Remove LWGEOM_INSPECTED from AsGeoJSON 2010-11-30 19:02 pramsey * Remove LWGEOM_INSPECTED from AsSVG 2010-11-30 07:02 robe * more logging cleanup and add create index test for geometry/geography. Change verison number arg in ST_GeoJSON so can stuff the right value in testing 2010-11-29 13:02 robe * more mistakes 2010-11-29 12:55 robe * fix typo 2010-11-26 16:55 robe * fix more mistakes in table logging. replace toxic curved geometries with little more harmless. Get rid of false positive relationships by forcing geometries to have bounding boxes that intersect at least sometimes. 2010-11-26 13:40 robe * put back curved geometries. Had taken them out in 1.4, but guess never put them back because of distance issues. Also some other minor cleanup 2010-11-25 18:38 colivier * Change POINTARRAY.dims to POINTARRAY.flags. Related to #658 2010-11-25 17:34 colivier * Change SRID to srid in LWGEOM struct (and also in CHIP too). Rename some functions related to SRID from Camel notation to lower case: errorIfSRIDMismatch, pglwgeom_getSRID, pglwgeom_setSRID, LWGEOM_getSRID, LWGEOM_setSRID, hasSRID. Related to #658 2010-11-24 23:44 robe * fix casing in dropRastertable 2010-11-24 22:29 robe * fix table casing in Addrastercolumn 2010-11-24 17:49 pramsey * Fully free temporary ptarray 2010-11-24 17:46 robe * reenable st_curvetoline and st_linetocurve functions. Seem to work now. 2010-11-24 15:41 robe * Exclude ST_MinimumBoundingCircle from testing. That uses ST_AddPoint too. 2010-11-24 13:34 robe * change polygon z and m building to not use ST_AddPoint and remove ST_AddPoint from testing until it works again. Put ST_Transform back. 2010-11-24 01:09 pramsey * Inherit gbox flags from lwgeom when calculating. This makes sense. 2010-11-24 01:06 pramsey * Initialize static GBOX flags to zero to avoid nastiness. 2010-11-24 00:39 pramsey * Tighten up lwgeodetic a little 2010-11-24 00:28 pramsey * Ensure that flags are initialized cleanly in constructors 2010-11-23 23:47 pramsey * Update geography functions to use the in-build .flags attribute on LWGEOM 2010-11-23 20:22 pramsey * Remove libgeom.h 2010-11-23 15:49 robe * fix casing of pixel types 2010-11-23 00:44 pramsey * Make the ptarray_add_point behavior more explicit. 2010-11-23 00:23 pramsey * Remove dlfcn.h. Doesn't seem to make any difference under OS/X. 2010-11-23 00:16 pramsey * Update force2d to preserve repeated points. 2010-11-22 22:33 pramsey * Add in actual cu_ptarray.c test file 2010-11-22 22:23 pramsey * Make ptarray_append_point handle higher dimensions more consistently. 2010-11-22 19:24 pramsey * Make LWGEOM_expand use the ptarray API 2010-11-22 15:43 robe * change to not use skewed rasters and insure when point is used in falls in the raster to prevent unnecessary alarms 2010-11-22 15:17 robe * fix more bugs in test 2010-11-22 13:34 robe * fix some bugs in tests. More fixes to come 2010-11-21 19:13 colivier * Add triangle support for ST_Transform. Fix #600. Thanks to Regina for report ! 2010-11-21 19:02 colivier * #658 part 1. Enhance LWGEOM struct (type, flags and GBOX) and related functions call. 2010-11-19 22:12 pramsey * Revert GML change. Hm. 2010-11-19 21:51 pramsey * Change in gml regression to match what seems to be the right answers. 2010-11-18 18:37 pramsey * Flip nrings function from serialized to lwgeom based. 2010-11-18 18:13 pramsey * Change over npoints to use an lwgeom based function intead of serialized. 2010-11-18 05:28 pramsey * An argument for git. This massive commit includes the renaming of function in the ptarray API, the removal of some pointArray_* variants in favor of ptarray_* variants, and, importantly, the adition of _append_point and _insert_point options for pointarrays. Functions have been switched over to using the API instead of managing the serialized_pointlist themselves. This has necessitated the re-writing of some functions. Simplify2d and Force2d have been re-written as lwgeom functions instead of serialized form functions, and moved into liblwgeom. There are still some major functions to move into liblwgeom, including the point_in_polygon functions that support the intersects shortcuts and the linear referencing fuctions in lwgeom_functions_analytic. 2010-11-16 17:25 robe * minor logging corrections 2010-11-14 18:10 jorgearevalo * Added MapAlgebra prerequisites to raster core. 2010-11-12 15:48 robe * Update 9.0 FAQ to include npgsql fixed driver for bytea support 2010-11-04 23:21 pramsey * Change pointArray_construct() to ptarray_construct_reference_data() 2010-11-02 14:20 robe * add relevant references 2010-11-02 06:20 pramsey * Change over to lwgeom_is_collection where appropriate. 2010-11-02 05:52 pramsey * Remove unused function. Rename lwgeom_is_collection to lwtype_is_collection. 2010-11-01 21:03 kneufeld * try an experiment to fix Docbook and MathML compatibility issues. upgrade Docbook to 4.5 upgrade MathML to 2.0 One should be able to use mml namespaces now without specifying in every block. "make check" should now pass without incident. 2010-11-01 14:48 robe * logging for multi arg functions 2010-11-01 14:07 robe * Get rid of WKT in credits and some minor spring cleaning 2010-11-01 08:15 pramsey * Fix liblwgeom.h reference in generator 2010-11-01 08:11 pramsey * Remove DYNPTARRAY and all users of it 2010-11-01 01:28 pramsey * Flip all the internal liblwgeom files over to use liblwgeom_internal.h 2010-11-01 01:16 pramsey * Remove one use of DYNPTARRAY 2010-10-31 03:19 pramsey * Remove a pair of unused functions. 2010-10-31 02:31 pramsey * Clean out scruft from my G_ phase and start attempting to separate _internal from external liblwgeom functions. 2010-10-30 17:35 strk * ISO C90 forbids mixed declarations and code 2010-10-29 22:57 robe * put in references to geomval data type 2010-10-29 22:20 robe * 2010-10-29 21:57 robe * switch order back 2010-10-29 21:33 robe * Include rasters in special function index and switch ordering of chapters so special function index is at the end again after raster 2010-10-29 13:04 robe * test all functions -- first draft -- lots of false negatives 2010-10-29 12:21 robe * fix typo in logging 2010-10-29 12:04 robe * update to test the raster operators 2010-10-29 11:28 robe * ST_3DDFullyWithin 2010-10-28 23:08 pracine * --General enhancement to the script functions. Still a lot of work to do... 2010-10-28 13:47 robe * some cleanup and one more link 2010-10-28 13:10 robe * get rid of tabs 2010-10-28 12:45 robe * Try to clarify use of ST_MakeEmptyRaster to address #651 2010-10-27 18:01 kneufeld * updated reference to appropriate image in the discussion on geometry validity 2010-10-27 17:27 kneufeld * added an example for ST_IsValid that shows a valid multipolygon that touches at a point. 2010-10-27 17:09 kneufeld * remove <remark> TODO tag in doc. 2010-10-27 16:47 robe * Logic to test inserting rasters of all different types 2010-10-27 14:38 robe * First working version of raster garden test -- currently just does an addrastercolumn for all pixel types supported, drop raster table and logs completion and timing to raster_garden_log table 2010-10-27 12:51 jorgearevalo * gdal2raster.py renamed to raster2pgsql.py. Related ticket #612 2010-10-27 11:06 jorgearevalo * Added CC=@CC@ in raster/rt_core/Makefile.in. Related ticket #550. 2010-10-26 17:40 jorgearevalo * Fixes on PostGIS Raster debug system. The raster core uses default_info_handler() call. Other minor bugs fixed. Created DEBUG file in raster directory, similar to postgis/DEBUG file. Erased references to old raster debug variables in configure.ac. Deleted old readme file. 2010-10-26 16:41 robe * start work on raster garden test generator 2010-10-26 16:40 jorgearevalo * New debug system, similar to the PostGIS debug system, with two sets of macros that depend on the POSTGIS_DEBUG_LEVEL value. Related ticket #638. 2010-10-26 15:50 robe * fix id ref 2010-10-26 15:42 robe * fix build issue -- need more fixing later 2010-10-26 15:01 robe * fix typo 2010-10-26 14:47 robe * add raster types in in reference_types section and also put in special indexes section. Will eventually move special indexes below raster since it will now cover it as well. 2010-10-26 12:46 robe * try to get rid of utf stuff again 2010-10-25 17:28 pramsey * Use ptarray_isclosed to check closure 2010-10-25 16:06 jorgearevalo * Added svn tag keywords to raster plpgsql scripts. Related ticket #642. 2010-10-25 14:46 robe * revert 2010-10-25 14:33 robe * get rid of utf header entirely -- my xsltproc when run with make-comments chokes on it. 2010-10-25 05:01 pramsey * Add some WKT tests on EMPTY 2010-10-25 04:57 pramsey * Add/improve comments, fix SRID handling for EWKT inputs. 2010-10-25 04:34 pramsey * More care handling mixed dimensional inputs and being tolerant of wierd stuff 2010-10-25 00:14 pramsey * Add destructors for the _list elements of the grammar. 2010-10-24 19:51 pramsey * Remove parse/lex outputs from 'clean' target, add to 'maintainer-clean' 2010-10-24 19:30 pramsey * Update lexer 2010-10-24 19:30 pramsey * Add generated parser/lexer files 2010-10-24 19:29 pramsey * Remove svn:ignores for lex/parser results 2010-10-24 19:28 pramsey * Remove header-file option 2010-10-24 19:25 pramsey * More tweaks to lexer to generate header 2010-10-24 19:13 pramsey * Change order of options 2010-10-24 19:00 pramsey * Turn off verbose grammar 2010-10-24 19:00 pramsey * Add in tests for more WKT types and fix bugs as they show up. 2010-10-24 16:08 pramsey * Add quotes to bison/flex calls. 2010-10-24 16:04 pramsey * Match the error strings with the legacy ones in the old WKT parser. 2010-10-24 15:25 pramsey * Rename WKT out suite. 2010-10-23 23:53 pramsey * Change sytax on calls to LEX to maybe make windoze and others happier 2010-10-23 23:50 pramsey * Ignore generated Makefile 2010-10-23 23:49 pramsey * Change empty collection constructor to take a type number, like the non-empty constructor (because we now believe in typed empties). 2010-10-23 23:48 pramsey * Finish untested support for all types in WKT input. 2010-10-23 14:41 pramsey * Remove long form lex parameters 2010-10-22 23:32 pramsey * Add dimensional empties to the grammar 2010-10-22 23:29 pramsey * comment the fact we support ISO extended types in WKB emitter 2010-10-22 23:27 pramsey * Add in the ISO extended types to the WKT parser and emitter. 2010-10-22 19:27 pramsey * Apply mcayland patch to build parse/lex. Remember: make clean before make. 2010-10-22 16:29 jorgearevalo * Changed '--with-gdal' for '--with-gdalconfig'. Related tickets #610 #616 2010-10-22 14:54 robe * fix typo 2010-10-22 14:52 robe * document GDAL config setting. Showing with-gdal for now. Jorge -- don't forget to change this in make to with-gdalconfig to be consistent with other config namings. 2010-10-22 14:43 robe * amend install instructions to reflect new simplied installation of raster support 2010-10-22 14:00 jorgearevalo * Raster build simplified. Only "./configure --with-raster & make & make install" needed. Raster objetive names changed in GNUMakefile. Raster library object generated with PostGIS version numbers. 2010-10-22 02:14 pramsey * Add in more parser cases and test an EMPTY case. 2010-10-21 22:22 pramsey * Add support for point and multipoints to the WKT parser. 2010-10-21 21:32 pramsey * Ensure the parser prereqs are built (#636) 2010-10-20 22:51 pramsey * Current work on bison-based WKT-to-LWGEOM parser. Implemented for LINESTRING, almost ready to extend to all types. 2010-10-20 14:09 robe * correction in output type 2010-10-20 13:41 pracine * -Fix for ticket ticket 634. Typo in error message. 2010-10-20 13:38 pracine * -Fix for ticket 632. st_world2rastercoordx and st_world2rastercoordy must return int instead of float8. 2010-10-20 12:22 robe * finish off documenting current public raster functions. Think that's all of them we have so far 2010-10-19 13:02 robe * fill in missing portos and provide more description of what additional protos do when args are left out or included 2010-10-19 12:31 robe * missing protos for st_askml, st_asgml 2010-10-18 15:59 strk * Location argument to GEOSIsValidDetail is non-const 2010-10-18 13:15 strk * Snap ShortestLine to 1e-14 grid (fixes failure on opensuse) 2010-10-15 21:46 pracine * -Fix for ticket 628. 2010-10-15 14:32 robe * typo 2010-10-15 14:29 robe * more logic errors 2010-10-15 13:28 robe * fix error in logic in test, change xml header to match other xml files 2010-10-14 06:54 robe * fix non valid RT_Reference link 2010-10-14 06:04 colivier * Fix few errors inside DocBook documentation. Refer to #471 2010-10-13 22:22 robe * address some dtd errors 2010-10-13 17:12 jorgearevalo * Modified raster Makefiles to solve bugs of ticket #610 (build error and incorrect placement of rtpostgis.sql file) 2010-10-13 15:41 jorgearevalo * Deleted references to 'WKT' in rtpostgis.sql and faq_raster.xml 2010-10-13 14:31 robe * Correct the spelling of Peucker 2010-10-13 13:44 robe * correction to example 2010-10-13 13:03 robe * amend the what is new in PostGIS 2.0 section 2010-10-13 08:52 robe * Put reference to addband and setvalue in empty raster. If a raster has no bands and values, do you see it :) 2010-10-13 08:45 robe * fill in missing protos for ST_AddBand and an example of creating a raster from scratch 2010-10-13 08:12 robe * add raster_comments.sql to be copied to contrib directory as well 2010-10-12 18:38 robe * this is now auto built when make comments is run 2010-10-12 18:37 robe * revise to also build raster_comments.sql when make comments is run 2010-10-11 00:45 robe * typo 2010-10-11 00:45 robe * fix typo in faxq_raster. Document ST_AddBand 2010-10-10 22:00 pramsey * Remove warnings 2010-10-10 11:16 jorgearevalo * Modified the prototype of dump core/server/sql functions, adding "wkt" to their names, because their returning elements are WKT geometries, not real PostGIS geometries. 2010-10-10 00:08 pramsey * Put the WKT new parser files into repo so others can see them and I can work in synch with trunk. 2010-10-09 04:03 robe * Put link to Jorge's PostGIS Raster and Oracle GeoRaster series 2010-10-08 18:08 pramsey * Add param.h to headers, pick up ENDIAN macros? 2010-10-08 16:45 robe * another fix 2010-10-08 14:55 pracine * -Modify ST_Intersects so that index is taken into account by the planner -Added a series of ST_Intersects with a boolean parameter to make the desactivation of the nodata value working with indexes 2010-10-08 13:15 robe * 2010-10-08 13:14 robe * more corrections 2010-10-08 13:00 robe * take out automatic build of raster_comments (until figure out what's wrong), fix some logic in gardent test, take out ST_Transform until it stops crashing. 2010-10-08 11:39 robe * logic to build raster_comments postgresql help instructions -- also replace postgis.refractions.net with www.postgis.org 2010-10-08 11:31 robe * rename to raster to be consistent with other files 2010-10-07 15:55 robe * Put in vacuum analyze crash test 2010-10-06 20:23 pramsey * Add nested geometry collection test. 2010-10-06 20:11 pramsey * Add extra comments. 2010-10-06 19:32 pramsey * Add extra tests, remove printf noise from run. 2010-10-06 19:17 pramsey * Add in WKB reader and associated test framework to build. 2010-10-06 17:51 pramsey * Fix a write-out-of-bounds error. 2010-10-06 15:20 pramsey * Finish first draft of WKB reader. 2010-10-06 00:35 pramsey * Clean out compile warnings. 2010-10-05 23:33 pramsey * Add WKB writing support for TIN, Triangle and PolyhedralSurface 2010-10-05 23:32 pramsey * Add WKB writing support for TIN, Triangle and PolyhedralSurface 2010-10-05 22:49 pramsey * Macroify the WKB type numbers and add the extended types for 3D objects. 2010-10-03 19:57 pramsey * Fix syntax error in ptarray_segmentize2d introduced in last commit 2010-10-03 19:43 pramsey * Ensure maxpoints is filled in appropriately 2010-10-03 18:15 pramsey * Remove lwin_wkb from build until it's complete 2010-10-03 18:14 pramsey * Continue with new WKB parser. Change signature of RHR "right hand rule" functions to "clockwise" to avoid misinterpretations of orientation rules. 2010-10-03 01:39 robe * typo 2010-10-02 15:46 robe * update PostgreSQL 9.0 that upgrading the driver works as well. 2010-09-29 20:28 nicklas * removing run-time sized array 2010-09-27 15:20 robe * copy Paul's changes to trunk 2010-09-27 13:25 robe * missing gtk dependency note 2010-09-27 13:11 robe * update install instructions to include install of raster and dependency on GDAL 2010-09-27 12:59 jorgearevalo * liblwgeom/lex.yy.c replaced with previous version 2010-09-26 21:41 jorgearevalo * README files updated with the new raster extension information. 2010-09-26 21:21 jorgearevalo * - Added raster extension to new 'raster' directory. - Modified PostGIS 'configure.ac' script to add support for new raster type (driven by '--with-raster' configure option. - Added raster build options to 'GNUMakefile' script. - PostGIS Python scripts moved to a 'python' subdirectory inside 'raster/scripts' directory. - References to "WKT" deleted from source code. 2010-09-24 18:41 pramsey * Forward port regression fixes for pgSQL 9.0 support 2010-09-24 12:53 robe * move to enhanced from available 2010-09-24 11:39 robe * change all these polyhedral surface/tin to enhanced from available 2010-09-24 11:00 robe * Note change in behavior of ST_NumGeometries and add back changed section. 2010-09-24 10:52 robe * get rid of changed for now 2010-09-24 10:38 robe * mark all polyhedral preexisting functions as enhanced. minor correction to comments 2010-09-24 10:34 robe * we have too many new functions (those polyhedral things that should really be marked as enhancements) and we are going to have a lot of breaking changes. Revise what's new section to have a really new, enhanced, and behavior changed section 2010-09-23 07:40 mleslie * Reverting erroneous changes to pgui_read_connection. 2010-09-22 23:45 mleslie * Reverting the default geometry column name change. Got too excited... breathe deep... 2010-09-22 22:30 pramsey * Use 'the_geom' as geometry column when running regression tests to match the old regression fragments. 2010-09-22 22:24 pramsey * Remove compiler warnings in OS/X 2010-09-22 17:30 robe * ST_3DIntersects 2010-09-22 17:22 robe * fix some typos 2010-09-22 17:15 robe * ST_3DClosestPoint -- if only our wkt diagrammer could draw 3d geometries 2010-09-22 05:34 mleslie * Forcing table names to lower case when initially added. 2010-09-21 23:22 mleslie * Removing lingering references to the broken icon support. 2010-09-21 23:12 mleslie * Changing the default geometry name from 'the_geom' to 'geom' 2010-09-21 23:11 mleslie * Changing the default geometry name from 'the_geom' to 'geom' 2010-09-21 03:36 mleslie * Clearing some compile warnings and fixing the issue where the test connection button always reported success. 2010-09-19 17:44 robe * ditto 2010-09-19 16:56 mcayland * Fix #603: shp2pgsql: "-w" produces invalid WKT for MULTI* objects. 2010-09-19 12:48 robe * 1.5.2 release notes updated 2010-09-19 12:22 mcayland * Fix the comments-uninstall target so it now works correctly with the new PGXS code. 2010-09-19 12:11 mcayland * Fix #572: Password whitespace for Shape File to PostGIS Importer not supported. Fixed by adding a new function especially designed for escaping arguments for PQconnectdb strings, and plugging it into the GUI. Note this commit is different from the 1.5 branch version, since the escaping function is moved into a new common library as I can see it being required for the new pgsql2shp CLI in the not too distant future. 2010-09-18 23:54 robe * ditto 2010-09-18 15:22 mcayland * Fix #527: Log window in shp2pgsql-gui should always append text to bottom of window. 2010-09-15 16:51 colivier * Add Triangle support for ST_NPoints. Thanks again to Regina for this report. Related to #596 2010-09-15 16:09 robe * start documenting 3d measurement functions 2010-09-15 16:01 robe * another spot missing 2010-09-15 15:15 robe * forgot a spot 2010-09-15 15:12 robe * rename wktraster to raster 2010-09-13 19:18 strk * Drop references to topology geometry tables in DropTopology (see #586) 2010-09-13 17:01 strk * Add note about topology.sql expecting a postgis-enabled db 2010-09-13 16:59 strk * PostgreSQL 9 support : don't use reserved 'table' keyword (see #585) 2010-09-13 13:45 robe * more cleanup 2010-09-13 13:01 robe * minor changes 2010-09-13 12:46 robe * give up on complex S example and change to simpler L example 2010-09-10 20:47 pramsey * Add support file for shapefil update 2010-09-10 20:47 pramsey * Fix for #554, align internal shapelib with official shapelib 2010-09-10 19:07 robe * get rid of points in the lower concave hull as well, minor text cleanup 2010-09-10 18:47 robe * revert changes. Getting crud from other pictures in all pictures that follow 2010-09-10 16:33 robe * 2010-09-10 15:34 robe * get rid of points too cluttered 2010-09-10 15:25 robe * put back example -- some minor clean up 2010-09-10 15:25 pramsey * Bring forward fix from #513 2010-09-10 15:20 colivier * Apply patch from mwtoews. On postgresql_min_version entity in doc. Related to #539 2010-09-10 15:14 pramsey * Fix for #532, Temporary table geography columns appear in other's sessions 2010-09-10 14:53 robe * 2010-09-10 14:47 robe * give up for now 2010-09-10 14:44 robe * move holes to geometrycollection 2010-09-10 14:35 robe * get rid of some holes 2010-09-10 14:25 colivier * Fix wrong name in function definition 2010-09-10 14:18 robe * 2010-09-10 14:17 robe * 2010-09-10 14:13 robe * alright just going to increase allocated line size 2010-09-10 14:08 robe * 2010-09-10 14:06 colivier * Fix TGEOM wrong size allocation. Tks to Paul for report 2010-09-10 14:03 robe * break into several more multipoints -- parser has limit (need to fix parser later) 2010-09-10 13:59 robe * break multipoint 2010-09-10 13:51 robe * 2010-09-10 13:49 robe * 2010-09-10 13:37 robe * 2010-09-10 13:35 robe * 2010-09-10 13:29 robe * concavehull can't reset input params in 8.3, fix document example 2010-09-10 13:15 robe * cleanup 2010-09-10 13:00 robe * Faster and more robust and accurate concave hull with Simon's S shape example test 2010-09-10 12:58 mcayland * Fix #458: postgis_comments being installed in contrib instead of version folder (this is a little bit of a hack since we can't merge PGXS into the main Makefile directly, but it works). 2010-09-10 08:50 mcayland * Fix #581: LWGEOM_expand produces inconsistent results. Change the bounding box calculation routines in ptarray.c so that they perform the entire calculation in double precision then convert the final result to BOX2DFLOAT4. This prevents rounding errors being introduced into the bounding box when each input result is converted to BOX2DFLOAT4 in turn. 2010-09-07 21:59 strk * concave hull is currently supported 2010-09-07 21:34 robe * availability note for st_concavehull 2010-09-07 09:45 mcayland * Fix incorrect status return code from projFileCreate. 2010-09-07 09:30 colivier * minor changes on comment 2010-09-06 21:52 mcayland * Fix ShpDumperCloseTable so that it now passes back any errors that may occur during projFileCreate. 2010-09-06 21:49 mcayland * Fix the mixed-type geometry column detection routines so that they allow just MULTI/non-MULTI versions of the same basic geometry type within a column. Per report from Denis Rykov. 2010-09-06 21:07 robe * minor corrections 2010-09-06 21:00 robe * fix typo 2010-09-06 20:55 robe * slightly more robust concave hull and update with links to our test real world cases. 2010-09-06 12:53 colivier * Add TRIANGLE, TIN and PolyhedralSurface support to Perimeter, and relevant cunit tests (cf #568). Add TRIANGLE Area support (and so to TIN). 2010-09-06 09:40 colivier * Add TRIANGLE support for GeometryN. Fix #574. Thanks to Regina for report 2010-09-06 08:16 robe * more cleanup of bios. Get rid of WKT and just called it Raster since in PostGIS 2.0, we will eventually drop the WKT from the name 2010-09-05 17:01 colivier * Revert changes on PointN and Numpoints to remove TRIANGLE support. Add ExteriorRing support to TRIANGLE. Changes DumpPoint behaviour to reflect exteriorRing. Update unit tests 2010-09-05 16:42 colivier * make astyle 2010-09-05 15:25 colivier * Use TGEOM struct to compute POLYHEDRALSURFACE and TIN dimension. Add relevant cunit tests. Few astyle improve 2010-09-03 16:14 robe * add additional proto for creating holed polygons -- example later 2010-09-03 15:37 robe * 2010-09-03 15:35 robe * 2010-09-03 15:13 robe * 2010-09-03 15:08 robe * typo 2010-09-03 15:06 robe * ST_ConcaveHull mark as new, reduce precision of point examples so passes thru wkt image generator 2010-09-03 14:48 robe * Example of ST_ConcaveHull against point set 2010-09-03 13:58 robe * 2010-09-03 13:52 robe * try again 2010-09-03 13:47 robe * snap points to grid 2010-09-03 13:42 robe * take out last example for now 2010-09-03 13:39 robe * Will assume my concave hull with the over 1100 points polygon slaughtered the wkt processor 2010-09-03 13:23 robe * First draft of ST_ConcaveHull -- more to come 2010-09-03 12:31 strk * Make edge-edge relations clearer. Thanks to Peter Hopfgartner and to Xfig developers for the wonderful experience of patching a diagram ! :) 2010-09-01 23:44 mcayland * Fix pgsql2shp so that it correctly returns an exit code of 1 (fail) in the case where either a user query returns no rows, or the specified table is empty. 2010-09-01 23:23 mcayland * Revert r5888 - the real bug is that the error message handling in place should already catch this condition but doesn't. 2010-09-01 20:14 nicklas * Fixed some build warnings I had missed 2010-09-01 19:55 nicklas * 3D Distance functions, only point-point and point line. #576 2010-09-01 17:40 mcayland * Alter the pgsql2shp CLI program so that it returns a new exit code of 2 to indicate "success, but 0 records processed". This could happen if a user-defined query doesn't return any results, or the source table happens to be empty. By setting a separate exit code, we allow scripts to determine whether or not the output shapefile contains any (useful) data. 2010-09-01 12:50 robe * missed a spot 2010-09-01 12:48 robe * update with 1.5.2, 1.5.1 changes and also TIN/Polyhedral for 2.0.0 2010-09-01 05:56 robe * update credits 2010-09-01 05:51 robe * update release notes to include 1.5.2 (uppcoming) and 1.5.1 and corrections to 1.5.0 2010-08-31 19:14 colivier * Fix wrong pointer allocation size, with 64 bits errors. Tks to Mateusz for report. Improve cu_unit report. Improve and fix some messages from LWDEBUG 2010-08-31 18:01 nicklas * remove strict on st_equals as discussed in #536 2010-08-30 09:06 colivier * Astyle on new files 2010-08-30 06:49 colivier * Add Topology structure for connected surfaces (PolyhedralSurface, Tin) and LWGEOM to TGEOM transformations routines. Add related cunit tests. Merge cu_tin and cu_polyhedralsurface into a single cu_surface unit test. 2010-08-30 06:47 colivier * Improve comments 2010-08-30 06:45 colivier * add Triangle support in lwgeom_getnumgeometries 2010-08-28 09:21 mcayland * Fix uninitialised gidfound variable which would sometimes cause pgsql2shp to fail if a gid column was not present on a database table. 2010-08-28 09:16 mcayland * Set svn:keywords property so that the version number is updated correctly on checkout. 2010-08-24 12:42 robe * more visually appealing example 2010-08-24 11:37 robe * another st_split example 2010-08-23 14:12 strk * Add 3 more postgis objects to skip from dumps 2010-08-23 13:08 robe * fix pixel types list to agree with Mat's changes to raster rfc 2010-08-21 21:20 robe * Fix dead link -- Jorge changed his link for Oracle raster / wkt raster compare 2010-08-20 22:38 pramsey * Add unfinished WKB input parser for later. 2010-08-20 16:40 pramsey * Synch up to 1.5 version 2010-08-20 13:14 robe * some fluff from the example I copied from didn't mean to put in. 2010-08-20 12:50 robe * Example for ST_Split 2010-08-19 19:50 pramsey * Slight improvement for #573 2010-08-19 12:28 robe * more tin and ps. Note about change in st_asbinary in 9.0 2010-08-18 18:48 robe * mark more TIN compatible functions. revise template slightly 2010-08-18 14:22 robe * Flag more TIN support 2010-08-18 11:19 colivier * Add lwtype_name to report more user friendly error message. Cf #570 2010-08-18 08:02 colivier * Put TYPE_GETTYPE before his possible debug use... 2010-08-18 08:01 colivier * Fix for #573, where has_arc check with unsupported TRIANGLE/TIN/POLYHEDRALSURFACE produce crash with POSTGIS2GEOS function. Thanks to Regina for bug report ! 2010-08-17 20:10 pramsey * Return the, er, return value. 2010-08-17 18:24 colivier * Add TRIANGLE support to ST_Affine function. Thanks to Regina for detailled bug report. Cf #571 2010-08-17 15:21 robe * revise slightly for true collection for polysurface. 2010-08-17 07:48 robe * Add examples of EWKB/EWKT for TIN, TRIANGLE, and MULTICURVE 2010-08-17 07:24 robe * mark ST_Dump as TIN supporting, update peoples bios. Add Maxime van Noppen (aka yabo) to contributors list (ST_DumpPoints and ST_Collect support) 2010-08-16 15:09 robe * Add matrix column for TIN/Triangles. Add TINA dn triangles to garden tests 2010-08-16 14:19 robe * Mark ST_Dumpoints as supporting Polyhedral, triangles, and TINS. Example of these. Revise add a marker in template and postgis.xml for Triangles and TINS. 2010-08-16 07:59 mleslie * Changing the ID keyword to Id, so it will actually get picked up. 2010-08-16 07:58 mleslie * Setting svn:keywords so the headers make sense. 2010-08-16 07:49 mleslie * Adding copywrite header to the structure files. 2010-08-16 07:49 mleslie * Removing a Makefile that shouldn't have been committed. 2010-08-15 18:54 colivier * Add St_NumPoints and ST_PointN support for Triangle. Add ST_DumpPoints support for Triangle, Tin and Polyhedral Surface, and related unit tests. Tks to yabo for patch. Related to #564 2010-08-15 18:51 colivier * Add forgotten Triangle support in lwgeom_inspect 2010-08-15 14:20 mcayland * Commit initial version of reworked pgsql2shp architecture that defines a common API within pgsql2shp-core that can be called from both the existing CLI and in the future a GUI interface. This commit also includes a very comprehensive reworking of the old pgsql2shp code designed to make things better commented and maintainable in the long term, so please use on as many PostGIS tables as possible during testing. This work was primarily sponsored by OpenGeo (http://opengeo.org) - thanks guys! 2010-08-15 13:57 colivier * Add Tin and Triangle support for ST_GeomFromGML. Add related unit tests 2010-08-15 13:56 colivier * Fix error in lwgeom_recursive2d for Triangle type 2010-08-15 08:30 colivier * Astyle session on whole trunk 2010-08-14 10:57 mcayland * Fix a memory leak in all of the MULTI* deserialize routines - once the relevant information had been copied from the LWGEOM_INSPECTED structure, the inspected structure itself was not being freed. 2010-08-13 17:30 colivier * Few lwtype_name add 2010-08-13 17:29 colivier * Add Triangle and TIN new geometry type. Add Cunit tests on parse stage, related to #561. Add ST_AsGML support TIN and Triangle for GML 3. Slightly cast change in PolyhedralSurface LWGEOM struct Remove PolyhedralSurface support from forceRHR function as orientation is meaningfull in PS. Move is_closed functions from PostGIS to LWGEOM dir and related cunit test case on line and curves. 2010-08-13 15:26 robe * ST_AsGML polyhedral support 2010-08-13 15:15 robe * st_isclosed polyhedral surface 2010-08-12 15:40 robe * more. Change polyhedralsurface example to valid srid so don't get false errors 2010-08-12 14:58 robe * Affine family polyhedral 2010-08-12 14:52 robe * Polyhedral findings based on monkey testing -- more to come 2010-08-12 12:39 robe * missing SELECT 2010-08-11 19:20 robe * more logging 2010-08-11 18:41 robe * start logging start and stop times to logging table postgis_garden_log. Still needs some fine tuning 2010-08-11 13:42 robe * ST_GeomFromGML example for Polyhedral surface 2010-08-11 12:15 robe * I think Mark committed this file by accident 2010-08-11 09:50 mleslie * Pushing the shp2pgsql-gui changes (multi-file, validation, drag-n-drop) pulled from stable branch into trunk. 2010-08-11 09:24 nicklas * pushing *uchar use out of measures.c as part of #308 2010-08-10 19:43 pramsey * Add in fix for #562, forward ported from 1.5 branch (point-in-poly failure for large large geography polygons) 2010-08-10 16:19 colivier * Add POLYHEDRALSURFACE support to ST_AsGML for GML 3 output 2010-08-09 18:56 robe * Flag st_dimension supports polyhedral and no longer throws exception for empty geoms 2010-08-09 15:40 robe * ST_GeometryN polyhedral support 2010-08-09 14:22 robe * mark some more functions support polyhedral surface 2010-08-09 13:53 robe * appendments about Polyhedral surface support 2010-08-08 22:20 strk * Drop spurious empty line 2010-08-08 22:20 strk * 'pushd' is not guaranteed to be provided by all shells (Ubuntu 8.10 has /bin/sh point to dash(1) which doesn't provide it) 2010-08-08 20:41 colivier * Add function aliases for ST_NumPatches and ST_PatchN (both SFS 1.2 and SQL/MM). Add PolyhedralSurface for ST_IsClosed (surface vs volume). Update ST_Dimension support to be consistent. Add unit tests. 2010-08-08 20:36 colivier * Improve printLWPSURFACE to also print each rings if any 2010-08-06 21:31 colivier * lwtype_name session. cf #453 2010-08-06 20:30 colivier * Typo in error message 2010-08-06 20:08 colivier * Add PolyhedralSurface support to ST_GeomFromGML. Add related unit tests. related to #430 2010-08-06 20:07 colivier * Add PolyhedralSurface support to force_* functions 2010-08-06 16:17 robe * flag more ps functions 2010-08-06 15:50 robe * typo in entity 2010-08-06 15:42 robe * typos 2010-08-06 13:43 robe * 2010-08-06 13:42 robe * st_area polyhedral support 2010-08-06 13:24 robe * flagged wrong function - swap 2010-08-06 13:22 robe * flagged 1 too many functions as polyhedral supporting 2010-08-06 13:03 robe * forgot to increment column count 2010-08-06 13:00 robe * itemize some constructors supporting polyhedral surfaces 2010-08-06 12:50 robe * update template to include polyhedral, add a special section listing just polyhedral support functions 2010-08-06 12:42 robe * Add polyhedral column and abbreviate the others so can easily fit new column. We should eventually have raster in there too. 2010-08-06 12:22 robe * Add polyhedral surface to code names and add ST_Dump as supporting polyhedral surfaces 2010-08-05 19:43 colivier * Add POLYHEDRALSURFACE support to AddGeometryColumn, GetType, ST_Dimension, ST_NumGeometries. Related to #555 2010-08-05 15:58 colivier * Change label 'face' to 'patch' in POLYHEDRALSURFACE. Related to #427 2010-08-04 20:02 colivier * Add geography support for POLYHEDRALSURFACE. Related to #427 2010-08-04 19:04 colivier * Update some comments to add year to each ISO specs reference. Some beautify on code. Not a single change on code itself. 2010-08-03 17:55 robe * fix typo 2010-08-03 14:19 robe * minor corrections and addition about bytea output behavior in 9.0 2010-08-02 16:02 robe * Add polyhedralsurface to ewkt example forms 2010-08-02 15:59 robe * Add polyhedral surface to garden geometry set 2010-08-01 21:11 colivier * Add 2D and 3DM support to POLYHEDRALSURFACE. Allow interior rings for patches. Don't check anymore minimum patch number. Related to #427 2010-07-29 13:44 nicklas * ugly style fix 2010-07-29 13:36 nicklas * param.h is needed for ENDIAN definitions in mingw 2010-07-28 04:30 robe * amend docs to talk about standard_conforming_strings and change in 9.0 2010-07-27 18:22 robe * ST_SetValue 2010-07-25 21:20 colivier * Add really basic POLYHEDRALSURFACE support. Parse, Unparse, Serialization and cunit unit tests. related to #427 2010-07-24 10:55 colivier * Remove Integer deprecaded types (POINTTYPEI, LINETYPEI, POLYGONTYPEI) and lwgi related stuff. As a consequence EWKB of CURVEPOLYTYPE, MULTICURVETYPE and MULTISURFACETYPE is changed/impacted (geometry type bits). Now we have 3 new free geometry type available. Preliminary work to #427 2010-07-23 14:55 robe * Polish up Raster FAQ a bit more 2010-07-23 14:16 robe * document raster2coord family of functions 2010-07-22 12:26 robe * Add Jorge's discussion on Oracle GeoRaster to FAQ 2010-07-22 10:50 robe * Update to include link to MacOSX binaries. Also put in the reason for rtpostgis not loading (our fault but...) 2010-07-09 16:59 robe * ST_PixelAsPolygon 2010-07-09 14:55 robe * additional note link to ST_BandPixelType in case people don't know what the codes mean 2010-07-09 14:53 robe * ST_RasterBandMetaData 2010-07-07 21:52 strk * Add 7.3+ CAST (wasn't needed up to 7.2, against which this topology implementation was coded) 2010-07-07 14:23 robe * get rid of obsolete note. Have to simplify example too since its not needed anymore -- oh well - will do later 2010-07-07 14:20 robe * typo missing end tag 2010-07-07 14:18 robe * new protos for st_value (the point geometry versions -- yeh) plus examples 2010-07-07 13:59 robe * st_metadata 2010-07-07 13:50 robe * other missing protos of existing defined 2010-07-07 13:44 robe * missed spot 2010-07-07 13:43 robe * ad missing proto for bandnodatavalue 2010-07-06 08:28 strk * Document ST_isCollection (see #549) 2010-07-06 08:28 strk * Remove spurious element (was hiding behind a fill) 2010-07-04 16:34 pramsey * Add in micro commit to see if email hook is running 2010-07-01 13:20 strk * Add ST_isCollection (see ticket #549) 2010-06-30 16:14 strk * Do not source psqlrc when doing tests 2010-06-30 16:10 strk * More explicit cast from geometry to text (for quote_ident's sake) and an handling of unexistent topology. Tests run again with psql 8.3.9 2010-06-30 15:52 strk * Define the cross-pgsql macros that used to be in sqldefines.h (now lost) + use st_union rather than geomunion (now lost) 2010-06-30 15:51 strk * Fix loading of postgis.sql 2010-06-25 10:05 strk * More exception handling to avoid leaks and give more info when it happens 2010-06-25 09:30 strk * Properly handle GEOS exceptions on cascaded union code (failing since introduction of postponed exception for cleaning geoms) 2010-06-25 07:46 robe * #536 get rid of strict on ST_Intersects, ST_CoveredBy and ST_Covers because spatial index doesn't work with strict on (and text,text ST_DWithin) 2010-06-25 07:41 strk * Test splitting 3d line by 2d blade 2010-06-24 13:26 robe * minor corrections 2010-06-24 13:22 robe * Add another FAQ 2010-06-24 12:02 robe * fix some data type typos 2010-06-23 17:56 robe * typo in data type 2010-06-23 16:53 robe * ST_Intersection and minor changes for setof to distinquish from array types 2010-06-23 16:27 robe * fix typo 2010-06-23 14:36 robe * Document ST_Intersects 2010-06-23 14:18 robe * document ST_Polygon 2010-06-23 13:51 robe * Add some faqs from the wkt raster wiki. A lot I left out for now because they are too wordy. 2010-06-03 19:10 pramsey * Remove crash when dbf file is missing / unloadable 2010-06-01 19:59 pramsey * Fix sense of the dbf/date test. 2010-06-01 19:58 pramsey * Accept "0" as a null value for Date types. 2010-05-27 14:03 pramsey * Remember to close the iconv handle 2010-05-27 14:02 pramsey * Make use of iconvctl conditional on it existing 2010-05-27 13:40 pramsey * Remove unused variable 2010-05-27 13:19 pramsey * Fix utf8 to return *something* when it can, so that something can be reported in the error string. 2010-05-26 17:26 pramsey * Change default back to UTF8 and improve error message on failure. 2010-05-26 16:26 pramsey * Read configuration info from environment, if it's there. 2010-05-26 16:02 pramsey * Only update the progress bar once every N records, where N is determined by the number of records in the file. 2010-05-25 18:44 pramsey * Back off from Win32 encoding to more generic ISO8859-1 2010-05-22 15:41 strk * Add note about the truncated multibyte enhancement (as the issue came out on IRC for another dataset) 2010-05-20 04:20 robe * minor formatting on ST_Covers 2010-05-19 15:22 robe * link to ST_MakePointM from ST_MakePoint 2010-05-19 15:17 robe * geography example for st_covers 2010-05-18 17:43 pramsey * Remove crash for case when all geographies are on the outer edges of the histobox, causing all to be classified as "deviants" by the stdev code line (#474) 2010-05-17 23:38 pramsey * Rename vasbappend to stringbuffer_aprintf 2010-05-17 23:33 pramsey * Allow GUI to create partial connection strings. 2010-05-13 08:39 strk * Fix memory error in ST_Split (short allocation) 2010-05-04 21:21 strk * Add ST_MakeValid item 2010-05-04 21:19 strk * Oops, was using GEOS types instead of LWGEOM ones.. 2010-05-04 17:18 robe * fix formatting 2010-05-04 17:17 robe * Provide at least one example of ST_GeogFromText 2010-05-04 15:36 robe * fix some faqs I got wrong, break out some long faqs. Add Tamas nightly build to list for latest and greatest windows GDAL binaries 2010-05-04 03:50 robe * Break out raster band editor functions into separate section 2010-05-03 20:01 robe * link ref 2010-05-03 19:59 robe * requested changes from #514 2010-05-03 16:35 strk * ST_MakeValid: Early fail if an unsupported type is given 2010-05-03 16:24 strk * Document ST_MakeValid 2010-05-03 16:02 strk * Add a 'staged-install' rule, helpful when you want to run a single test after changing the core lib ... 2010-05-03 15:59 strk * ST_MakeValid: don't choke on MULTILINESTRING containing invalid LINESTRING elements 2010-05-03 12:11 strk * Merge SRID-retainment tests with some of the other tests 2010-05-03 11:31 strk * Do not drop polygon boundaries collapsed to points 2010-05-03 03:26 robe * Link to helper function built using ST_Value 2010-05-03 03:11 robe * Get rid of still under development for ST_DumpAsPolygons. Seems to be working fairly well now. 2010-04-30 19:17 robe * move bandnodatavalue to raster band section 2010-04-30 18:34 robe * slight correction 2010-04-30 18:34 robe * document build date and lib version maintenance functions 2010-04-30 18:25 robe * document more functions -- start breaking out raster band functions from raster functions 2010-04-30 16:17 robe * example for ST_DumpAsPolygons 2010-04-27 15:26 colivier * Add new option to ST_AsGML: ability to remove srsDimension attribute in GML 3. cf #508 2010-04-27 13:58 colivier * Fix wrong OGC URN in GeoJson and GML output. Cf #507 2010-04-20 04:18 robe * Add another example to st_value demonstrating sampling and fix other example 2010-04-19 03:07 robe * document ST_SetBandHasNoDataValue 2010-04-18 12:13 strk * Escape fields named xmin (xmax was already escaped). See issue #504. 2010-04-17 21:25 strk * Fix documentation for ST_Split (so postgis_comments.sql is correct) 2010-04-17 11:06 strk * Plug a couple of memory leaks 2010-04-17 08:26 strk * Fix crash on invalid polygon rings conversion to geos 2010-04-17 01:53 robe * fix typos and add more links 2010-04-17 00:57 robe * ST_SkewX, ST_SkewY, ST_SetSkew 2010-04-17 00:13 robe * typo in return description of ST_MakeEmptyRaster 2010-04-14 17:42 robe * fix typos 2010-04-14 14:56 robe * more gdal_translate examples 2010-04-14 14:48 robe * another example of gdal_translate 2010-04-14 14:09 robe * Example of AddRasterColumn 2010-04-14 13:16 robe * Fix typo 2010-04-14 12:52 robe * Provide yet more common use case examples of ST_Value 2010-04-14 11:48 robe * try to get rid of really long lines 2010-04-14 11:40 robe * Document how to define a raster layer in Mapserver 2010-04-13 06:08 robe * Give faq an id for easier pretty bookmarking 2010-04-13 04:38 robe * 2010-04-13 04:37 robe * forgot paragraph mark 2010-04-13 04:35 robe * more elaboration of the important Can I export my raster data FAQ 2010-04-12 21:11 robe * typo fix 2010-04-12 20:58 robe * Add quickie faq about exporting raster data from PostGIS 2010-04-12 08:48 colivier * Add optional namespace to ST_AsKML function. related in a way to #460 2010-04-12 04:44 robe * minor additions 2010-04-11 23:21 robe * start documenting ST_DumpAsPolygons. Will provide examples once get it to stop crashing on me. 2010-04-11 23:03 robe * fix tag typo 2010-04-11 22:52 robe * mistated something. Correct constraint description of addrastercolumn 2010-04-11 22:45 robe * Add management functions section 2010-04-10 15:32 robe * minor change 2010-04-10 03:39 robe * title change 2010-04-10 02:48 robe * start itemizing operators 2010-04-10 01:42 robe * document st_setgeoreference 2010-04-09 16:24 robe * Add ST_SetUpperLeft 2010-04-07 21:45 robe * 2010-04-07 19:22 robe * fix reference typo 2010-04-07 17:25 robe * forgot to add faq_wktraster item 2010-04-07 16:54 robe * First draft of wktraster faq 2010-04-07 14:35 robe * conver to 1 column 2 row table 2010-04-07 14:15 robe * typo 2010-04-07 14:06 robe * correct typo 2010-04-07 14:05 robe * Put link to spec for a diagrammatic view. 2010-04-07 13:59 robe * first draft of ST_ConvexHull -- still need to put in pictures 2010-04-06 23:37 pramsey * Add support for command-q shutdown in Mac GTK build 2010-04-06 18:33 strk * WARN and continue on incomplete multibyte sequence 2010-04-05 21:38 robe * slight correction 2010-04-05 21:32 robe * itemize band pixel types and fix some formatting issues 2010-04-05 15:17 robe * more blurb in description 2010-04-05 15:16 robe * xsl to build postgresql help for wktraster 2010-04-05 14:12 robe * Start adding editors, give an additional better example of ST_Value 2010-04-05 07:28 robe * upper left x and y 2010-04-05 05:59 robe * example for st_value 2010-04-05 05:55 robe * typo in constructor section 2010-04-05 05:52 robe * st_box2d, st_envelope (note regular Postgis changed st_box2d to just box2d old st_box2d is deprecated) 2010-04-05 05:25 robe * more typos fixed, add constructor section 2010-04-05 04:59 robe * Fix typo 2010-04-05 04:30 robe * more functions documented 2010-04-05 02:28 robe * more accessors 2010-04-05 01:32 robe * more changes 2010-04-05 01:05 robe * First start at integrating wktraster documentation -- hopefully didn't break anything doing this. 2010-03-31 15:34 strk * Do not hard-code default encoding (since it's a macro) 2010-03-31 14:50 strk * Dump more informations about failing decoding 2010-03-30 12:32 colivier * Add geography support to ST_AsGML with prefix namespace option. Update doc and unit tests. cf #460 2010-03-30 12:29 colivier * Remove old reference file 2010-03-29 20:03 pramsey * Fix syntax error. 2010-03-29 20:02 pramsey * Reorganize avprintf a litle. 2010-03-29 19:57 pramsey * Propogate vsnprintf errors up verbatim 2010-03-28 08:33 colivier * Fix a lot of DocBook errors. Use DocBook + MathML DTD. Fix xsl/postgis_aggs_mm.xml.xsl to produce valid Docbook. Now make check output in docs is clean. cf #471 2010-03-27 17:50 colivier * add make check rule in doc/Makefile. Use xmllint to check postgis.xml documentation against docbook dtd. 2010-03-25 05:11 pramsey * Make the default size more reasonable again. 2010-03-25 05:09 pramsey * Add comments on error return values. 2010-03-25 05:06 pramsey * Improved stringbuffer again. Always write directly into the buffer, no more memcpy'ing. Change return values for printing calls to int, so that print errors can be detected and handled by the layers above, if desired. 2010-03-24 17:54 pramsey * Restore original license terms. 2010-03-23 19:35 strk * Expose custom prefix arg for ST_asGML to SQL, add tests and dox 2010-03-23 00:25 pramsey * Fix for array aggregation error (#469) 2010-03-22 21:13 strk * Add support in liblwgeom for specifying a custom (or no) namespace/prefix for GML output 2010-03-22 19:38 pramsey * Convert all extern opt* variables to pgis_opt* variables to avoid clashes with system variables. (ug!) 2010-03-17 08:27 strk * Add test for GEOMETRYCOLLECTION and ST_Split 2010-03-17 07:42 strk * Add ST_Split 2010-03-17 07:40 strk * Don't choke on clean when there's nothing to clean 2010-03-17 07:32 strk * Fix 'clean' rule to descend in cunit 2010-03-16 22:18 strk * Add support for MULTI* in ST_Split 2010-03-16 13:14 strk * Document ST_Split 2010-03-16 03:13 pramsey * Some function renaming: lwgeom_typename => lwtype_name. The internal float/up/down functions get slightly better names. Make collection types re-sizable: added maxgeoms to all collections, and created lwcollection_add_lwgeom() function. Remove all *_add functions. Revized homogenize function to use the new _add_lwgeom and variants. 2010-03-15 18:03 strk * Rename ST_SplitGeometry to ST_Split (better now than never) 2010-03-15 18:00 strk * Implement split-poly-by-line 2010-03-13 12:55 strk * Reword exception message, make algorithm more robust not relying on constructive functions to detect relation between inputs 2010-03-13 11:23 strk * Fix printf call 2010-03-13 11:16 strk * Split-line-by-line: handle overlap cases by raising an exception 2010-03-13 10:59 strk * Implement split-line-by-line 2010-03-13 09:22 strk * Be polite 2010-03-12 18:39 strk * Fix memory errors in presence of NULL (0-verticed) geometries and insert (default) policy. 2010-03-12 15:46 strk * ptarray_substring *does* already implement interpolation 2010-03-12 15:25 strk * Drop extraneous task (if it referred to loader we do have a switch for index creation now) 2010-03-12 15:15 strk * Fix ST_DumpPoints not to relay on NULL return from ST_NumGeometries to tell multi and singles apart 2010-03-12 15:14 strk * Trigger reconstruction of regress' postgis.sql when original one changes 2010-03-12 14:03 strk * Add item about GeometryN/NumGeometries 2010-03-12 13:50 strk * Add support for simple geometries in ST_GeometryN and ST_NumGeometries 2010-03-12 13:29 mcayland * Fix the PGXS override code for detecting older versions of PostgreSQL - the existing (incomplete) check was still checking for a minimum version of 8.5, rather than the new version number of 9.0. 2010-03-12 00:21 robe * put in note about improvement to ST_Line_SubString #410 2010-03-11 20:50 strk * More comments cleanup 2010-03-11 20:48 strk * remove wrong comment 2010-03-11 20:34 strk * Set interface specs in stone within the implementation file, add a testcase to show what's "left" and what's "right" in the split-line-by-point 2010-03-11 20:28 strk * *always* return a collection from ST_SplitGeometry 2010-03-11 20:19 strk * Have ST_SplitGeometry return a collection of at most 2 elements (original part, cut-away part) so it's easier to handle by callers 2010-03-11 17:53 strk * Add SRID retainment testcase for removerepeatedpoint (paranoia) 2010-03-11 17:51 strk * Add SRID retainment testcases 2010-03-11 17:21 strk * Don't 'clean' the SRID... 2010-03-11 14:34 pramsey * Grammar fix. 2010-03-10 15:38 pramsey * Fix to allow compile on 9.0alpha 2010-03-10 15:33 strk * Initial work on ST_SplitGeometry. Split line by point implemented. 2010-03-10 15:29 strk * Since we do a full scan of pointarray from ptarray_locate_point, take the chance to also return min distance 2010-03-10 14:32 strk * Document closest_point_on_segment in header file 2010-03-10 14:20 strk * Document ptarray_locate_point in header file 2010-03-10 10:07 strk * Export geos error logger 2010-03-09 00:37 pramsey * Fix syntax error in spatial_ref_sys hard upgrade directions (#373) 2010-03-09 00:31 pramsey * Include 'geography_columns' defn when upgrading from <= 1.4 (#414) 2010-03-09 00:22 pramsey * Quiet notices in the .sql install files (#415) 2010-03-08 23:28 pramsey * Update the bbox when you alter the underlying geometry (#410) ST_SetPoint, ST_Ad dPoint, ST_RemovePoint. 2010-03-08 16:37 kneufeld * updated broken link to utmzone PostGIS plpgsql helper function. bug #461 2010-03-05 23:31 pramsey * Note minimum required versions. 2010-03-05 21:49 strk * Fix typo 2010-03-05 02:35 pramsey * A few more WKB unit tests. 2010-03-04 09:40 colivier * Add ST_PointN xref in ST_SetPoint entry, from Bruno Friedmann report 2010-03-03 06:10 pramsey * Set keywords. 2010-03-03 06:10 pramsey * Set keywords and some copyright headers. 2010-03-03 06:06 pramsey * Add some tests of the old versus new WKB output. 2010-03-03 06:06 pramsey * Move spheroid test to the correct place. 2010-03-03 05:40 pramsey * Remove doxygen flags from static functions. 2010-03-03 05:38 pramsey * Add some documentation to the public functions. 2010-03-03 01:15 pramsey * Add in tests and fixes for WKB emitter. 2010-03-02 23:18 pramsey * Add first cut to lwgeom_to_wkb function. 2010-03-02 23:16 pramsey * Add a couple functions (length, copy) to stringbuffer, and add comments. 2010-03-02 21:32 strk * ST_MakeValid : turn collapsed lines into points [RT-SIGTA] 2010-02-28 23:11 strk * Node lineal geometries resulting invalid. Re-enable automated testcase for st_MakeValid [RT-SIGTA] 2010-02-28 22:48 strk * Don't use a collection when there's no area 2010-02-28 22:24 strk * Fix build with debugging on, fix bug when run against invalid linestrings 2010-02-28 21:31 strk * Add paranoid check to make super-sure no input vertices are dropped by ST_MakeValid [RT-SIGTA] 2010-02-28 20:36 strk * Put GEOS-only functionality of ST_MakeValid in its own function 2010-02-28 19:24 strk * Fix documentation to match current behaviour 2010-02-28 19:09 strk * Simplify code 2010-02-28 19:04 strk * Avoid a call to the GEOS CAPI when unnecessary (works around a bug in GEOS aborting in some cases of EMPTY polygons 2010-02-28 17:20 strk * Move ST_CleanGeometry core code into specialized 'lwgeom' function 2010-02-28 17:11 strk * cleanups 2010-02-28 14:05 strk * Put areal part first in collection, and collapsed edges second 2010-02-26 15:05 colivier * Add new 'make garden' rule to launch full Garden test regression tests 2010-02-26 02:50 pramsey * Instructions on adding new tests to cunit, from Jeff Adams. 2010-02-26 00:16 colivier * Add few more lwgeom_typename, and update regress test if needed. Restore initial lwnotice behaviour in remove_repeated_points on unknown types (instead of lwerror). 2010-02-25 17:54 colivier * Fix add forgotten return in flip_coordinates (cf #452). Add lwgeom_typename in several functions to avoid cryptic error message (#452 again). 2010-02-25 15:13 pramsey * Fix potential corner case in sphere area calculation (#451) 2010-02-25 14:30 robe * Put new functions in alphabetical order. 2010-02-25 14:23 robe * Put in What is new in 2.0 section to trap new 2.0 enhancements 2010-02-25 14:11 colivier * Add libxml2 requirement para. Fix #344. Thanks to Mateus for report. 2010-02-25 13:41 pramsey * Fix for st_area(geography) over the dateline (#450) 2010-02-25 13:38 colivier * rename ptarray_reverse_axis to ptarray_flip_coordinates. Add lwgeom_flip_coordinates and ST_FlipCoordinates (#354). Add relevant cunit tests and basic documentation. 2010-02-25 13:30 strk * Drop unused code, avoid putting empty geometry in a collection.. [RT-SIGTA] 2010-02-25 13:15 strk * Recursively try to build area with portions of the original boundary not on the boundary of newly constructed area and symdifference the new area (if any) with the final polygon being built. This behaviour gives more chance to get a pure areal (not mixed) output still not missing vertices. 2010-02-24 14:40 pramsey * Change dimensionality indicators to have spaces between type indicators for WKT_ISO output form. 2010-02-24 13:50 pramsey * Add support from SRID= block on EWKT 2010-02-23 22:18 pramsey * Remove last compile warnings. 2010-02-23 22:16 pramsey * Making test methods static to avoid compiler warnings. For Jeff Adams. 2010-02-23 22:14 pramsey * Making test methods static to avoid compiler warnings. 2010-02-23 22:11 pramsey * Make test functions static. 2010-02-23 22:07 pramsey * Made unit tests easier to add. New suites now just need to be added to two lines in cu_tester.c, no changes to header files necessary, new tests need one line in the appropriate .c file. From Jeff Adams. 2010-02-23 21:41 pramsey * Remove unused va_copy. 2010-02-23 21:41 pramsey * Woops again, got work and start size values reversed. 2010-02-23 21:30 pramsey * Oops, commit stringbuffer.h with sensible values for internal sizes. 2010-02-23 21:29 pramsey * Improve performance and cut back stringbuffer_t to the minimum. 2010-02-23 19:51 pramsey * Allow cu_tester to accept parameters to run individual tests or suites, from Jeff Adams. 2010-02-23 19:42 strk * Don't let ST_RemoveRepeatedPoint collapse LINESTRINGs (not sure why, but someone doesn't want them in the db) 2010-02-23 18:29 colivier * Move ptarray reverse axis function from postgis/lwgeom_in_gml to liblwgeom/ptarray 2010-02-23 18:18 pramsey * More WKT tests. 2010-02-23 17:55 pramsey * More WKT unit tests 2010-02-23 15:55 colivier * In fact Nested GeometryCollection are never been supported in SVG and GeoJSON. Update the cunit tests cases 2010-02-23 15:21 colivier * Check astyle version prior to do anything. 'blessed' version is 1.23. Related to #433 and postgis-devel discussions 2010-02-23 14:52 colivier * Fix 443. Move all regress export functions test files in a single one. add geography output regression tests (SVG/KML/GML/GeoJSON) 2010-02-22 22:43 pramsey * Add more unit tests for WKT 2010-02-22 22:04 colivier * Fix #441. And introduce a change in behaviour: if geometryCollection and bbox, not sub geoms bbox are provided anymore 2010-02-22 20:58 strk * Let ST_CleanGeometry down to C [RT-SIGTA] 2010-02-22 20:45 strk * Derive an lwgeom_make_valid from ST_MakeValid [RT-SIGTA] 2010-02-22 20:42 pramsey * ST_AsLatLonText(geometry, format) from Jeff Adams 2010-02-22 20:29 strk * Follow style guidelines for function naming 2010-02-22 19:53 pramsey * First cut of new WKT output functions, need more unit tests. 2010-02-22 19:52 colivier * Fix missing math.h include in lwout_svg (#438). Put back lwgeom_export.h as we need header for getSRSbySRID. 2010-02-22 19:37 strk * Oops (#434) 2010-02-22 19:35 strk * Fix warnings when building with GEOS < 3.3.0 (ticket #434 2010-02-22 19:31 strk * Fix missing prototypes warnings 2010-02-22 19:31 colivier * Id tag 2010-02-22 19:16 colivier * merge all export functions in a same file. remove useless old ones. rename SVG one to LWGEOM_asSVG for consistancy. 2010-02-22 18:49 colivier * Fix comment stuff in cunit 2010-02-22 18:43 colivier * move ST_AsSVG from postgis to lwgeom dir. write cun it tests. related to #377 2010-02-22 15:37 colivier * bbox only bother about external ring. add the related cunit test 2010-02-22 15:30 pramsey * Move stringbuffer from ./loader to ./liblwgeom for use in string emitter functions. 2010-02-22 14:03 colivier * Move ST_AsGeoJson from postgis to liblwgeom dir. Use as most as cunit test as possible. Related to #377. 2010-02-21 22:34 strk * Cleanup the GeometryClean function now that vertex checking is done better in ST_MakeValid 2010-02-21 22:10 strk * Force multi-type in output if input was multi [RT-SIGTA] 2010-02-21 21:53 colivier * Add missing MultiPoint test. Fix wrong LWGEOM type on cu_gml tests. 2010-02-21 21:34 colivier * add explicit void return type 2010-02-21 21:11 strk * Disable 'clean' test (still deciding on what's the expected output); keep only cut-lines that have vertices not shared with boundary of final area; move 'clean' code in separate file [RT-SIGTA]. 2010-02-21 20:32 colivier * Move ST_AsKML from postgis to liblwgeom dir. Use as most cunit test as possible. Few related corrections on GML similar implementation. cf #377 2010-02-21 18:23 colivier * Add forgotten lwout_gml.c file (#377) 2010-02-21 18:18 colivier * Move ST_AsGML from postgis dir to liblwgeom. Rewrite most units test with cunit. cf #377 2010-02-21 12:36 colivier * make astyle session 2010-02-21 12:22 strk * ST_RemoveRepeatedPoints [RT-SIGTA] 2010-02-21 12:21 strk * style... 2010-02-21 12:21 strk * Make stylish 2010-02-20 19:47 colivier * use the rights homogenize cunit suite handlers 2010-02-20 19:09 colivier * Fix computed string length in Polygon with several rings for ST_AsGML with GML3. Related to #421 2010-02-20 18:26 colivier * Use lwgeom_homogenize in in_kml stuff. Related to #375 2010-02-20 18:25 colivier * Add lwgeom_homogenize function. Related to #375. Add cunit related tests 2010-02-20 16:47 colivier * Add Cunit - lwerror use case handle - #420 2010-02-18 21:02 pramsey * Add multilinestring support to st_line_substring (#419) 2010-02-17 21:02 strk * Allow retaining badly collapsed rings (single-point) as points in ST_MakeValid. Add testcase for it [RT-SIGTA] 2010-02-16 23:27 kneufeld * removed sfs_compliant note for ST_Transform 2010-02-16 09:38 strk * Return NULL rather than throwing when a COLLECTION is given to ST_Boundary [RT-SIGTA] 2010-02-16 09:29 strk * Fix build with --enable-debug=3 [RT-SIGTA] 2010-02-16 09:08 strk * Add origin field for the clean dataset table, so we can add PG-specific ones w/out caring about visualizing them:) 2010-02-16 09:06 strk * Add a test for input being invalid (a test of the test) 2010-02-16 09:03 strk * Separate areal-specific cleanups in LWGEOM_GEOS_makeValidPolygon [RT-SIGTA] 2010-02-16 08:28 strk * Empty geometries are cleanest [RT-SIGTA] 2010-02-16 08:22 strk * Drop the optional arg to ST_MakeClean, document what it does, improve the ST_CleanGeometry stub. [RT-SIGTA] 2010-02-16 08:07 strk * Drop the optional parameter to ST_MakeValid, we always want to collect collapses (users can always filter later) [RT-SIGTA]. 2010-02-16 08:03 strk * Document ST_Dimension handling of empty geometries 2010-02-16 07:54 strk * Do not throw exception on empty ST_Dimension(empty) [RT-SIGTA] 2010-02-15 22:41 strk * Further cleanups in ST_MakeClean [RT-SIGTA] 2010-02-15 22:31 strk * Fix unsupported message 2010-02-15 21:17 strk * Plug more leaks 2010-02-15 20:40 strk * Plug memory leak on GEOS geom construction failure [RT-SIGTA] 2010-02-15 20:21 strk * Rework the regress test to make it easier for curious people to keep the test dataset for inspection with some GUI (give it a try, it's a nice one). 2010-02-14 23:35 strk * Clarify the case of linestring invalidity dropping confugins reference to linearrings 2010-02-14 22:59 strk * Implement ST_MakeValid(geom_in, collect_collapses) and stub ST_CleanGeometry. Add regression test for ST_MakeValid and polygons [RT-SIGTA] 2010-02-14 16:54 strk * Cleanups. Hope to reuse some structs for a C-version of ST_DumpPoints 2010-02-14 16:33 strk * Try to make st_DumpPoints reference somewhat clearer [RT-SIGTA] 2010-02-14 13:46 strk * ptarray_remove_repeated_points [RT-SIGTA] 2010-02-13 15:29 strk * Add another validity test [RT-SIGTA] 2010-02-13 14:35 strk * Handle NULL returns from POSTGIS2GEOS and LWGEOM2GEOS now that we allow that [RT-SIGTA]. Add a 'commit' rule (give it a try) 2010-02-12 23:04 strk * Revert GEOS error handlers to be lwnotice to avoid aborting full transactions (like it was in 1.5) 2010-02-11 23:12 strk * Fix typo 2010-02-11 21:01 strk * Get style 2010-02-11 18:56 strk * Separate GEOS part of 'buildarea' function from POSTGIS part of it (might eventually be moved down to GEOS) [RT-SIGTA] 2010-02-10 22:23 strk * xref 2010-02-10 20:54 strk * Enhance documentation of ptarray_addPoint [RT-SIGTA] 2010-02-09 22:36 strk * Don't refuse to output invalid geometries trough a cursor, being consistent with other output routines (dumper ends up using these) -- [RT-SIGTA] 2010-02-09 17:59 strk * Oops, it seems I broke the build (sorry) 2010-02-09 06:52 strk * Fix documention 2010-02-08 22:36 strk * tweak the sponsor name 2010-02-08 21:39 strk * Initialie GEOS using lwerror for errors so that exceptions are really handled (or testcases in #411 crash on many GEOS functions) 2010-02-08 20:05 strk * Add credits to new feature item 2010-02-08 18:54 strk * Don't refuse to unparse malformed geometries. Fixes #411. Didn't seem to expose the crash in #168, the testcase for it was expanded to extract invalidity reason. 2010-02-06 13:57 strk * Simplify hooks on GEOS error reporter function from isvalid* functions 2010-02-06 13:48 strk * Add another test for #407 2010-02-06 10:49 colivier * Fix non NULL terminated string in ST_AsSVG with GEOMETRYCOLLECTION EMPTY, cf #409 reported by sdikiy. Add related unit test 2010-02-05 20:58 strk * Add ST_isValidDetail item 2010-02-05 20:55 strk * Register a buffer-logger as error-reporter from ST_isValidReason and ST_isValidDetail so to catch exceptions thrown by GEOS at postgis->geos conversion for the sake of reporting actual error. Fixes ticket #408. Completed with testcase. 2010-02-05 17:58 strk * A space after return type looks better (and seems to be the policy) for funcdef tags 2010-02-05 17:57 strk * Document ST_IsValidDetail 2010-02-05 17:26 strk * Add ST_isValidDetail(geom) returns valid_detail (new type!) 2010-02-04 20:30 strk * Astyle run (a-ha, got you!) 2010-02-04 17:43 pramsey * Push version numbers on trunk forward to next release. 2010-02-04 17:21 pramsey * Update release dates and changelog for 1.5.0 2010-02-03 22:42 pramsey * Initialize config->createindex value to 0 2010-02-03 21:42 pramsey * Fix handling of "missing table argument" case to use file name properly. 2010-02-02 23:47 pramsey * Add --no-psqlrc to run_test (#405) 2010-02-02 22:44 pramsey * Tiny re-format 2010-02-02 17:44 pramsey * Extra information per Greg Troxel 2010-02-02 16:13 pramsey * Update usage string to show correct default encoding. 2010-02-02 04:14 pramsey * astyle recent change 2010-02-02 02:41 pramsey * Fix segfault on cases where not enough arguments are provided. (#402) 2010-02-02 00:15 pramsey * Fix mis-handling of the commandline operations modes (#401) 2010-02-01 18:24 pramsey * Silence 'no-eol' compiler warning. 2010-02-01 17:35 pramsey * 1.5 astyle pass 2010-01-29 21:24 pramsey * Keep floats out of registers for spheroid calculation. Fixes odd bug in OS/X gcc 4.1. Could probably be narrowed to only use flag on affected platform. (#395) 2010-01-29 18:22 robe * fix example 2010-01-29 18:00 pramsey * Extra debugging information in spheroid area calculation. 2010-01-28 17:42 pramsey * Make area unit tests actually test against known good values 2010-01-28 15:51 colivier * revert r5175 commit about points results on #304. Related to #395 2010-01-28 15:28 colivier * In regress/tickets* Add missing srid 32702 and 32602. Add results from #304 tests. Related to #395 2010-01-28 15:09 strk * Fix 'maintainer-clean' rule 2010-01-28 14:23 mcayland * Fix astyle.sh script so that if astyle cannot be found then it immediately aborts with an error. Per report from Nicklas. 2010-01-28 12:19 mcayland * Add "make astyle" target to clean up source tree formatting as per the style guidelines. 2010-01-26 21:10 pramsey * Make GEOS test insist on >= 3.1.1 2010-01-26 20:20 pramsey * Remove warning from lwline 2010-01-26 19:08 pramsey * Add example for ST_AddMeasure on multilinestring 2010-01-26 18:56 pramsey * Make ST_AddMeasure handle multilinestrings as well as linestrings. 2010-01-26 17:24 pramsey * Remove unneeded See Also section. 2010-01-26 17:09 pramsey * Remove ST_StartMeasure ST_EndMeasure 2010-01-26 01:13 pramsey * Ignore postgis_comments.sql 2010-01-25 21:08 pramsey * Replace soft tabs with hard. 2010-01-25 21:06 pramsey * Add uninstall recipe for AddMeasure (#390) 2010-01-25 21:03 pramsey * Add ST_AddMeasure and associated documentations (#390) 2010-01-24 09:10 nicklas * 2010-01-23 23:31 nicklas * Tiny Typo 2010-01-23 23:29 nicklas * remove ST_Maxdistance from TODO and note that C-version is still TODO for ST_DumpPoints 2010-01-22 06:05 pramsey * Add note on removing milestone from trac 2010-01-21 16:44 pramsey * Updates for 1.5.0rc1 2010-01-21 13:08 nicklas * add missing comment 2010-01-21 07:19 nicklas * Fix for make check on MingW #389 2010-01-21 00:06 pramsey * Updated XML release notes (#374) 2010-01-20 20:17 pramsey * Make proper #! calls to perl in perl scripts 2010-01-20 18:55 robe * Add Jorge Arevalo to list since he's contributing a lot of work to WKT Raster 2010-01-19 12:40 robe * Add George, Guillaume, and Vincent to contributors list 2010-01-19 12:37 robe * Bump Nicklas up since he's added a lot to this release and now has commit access 2010-01-18 19:40 pramsey * Add towgs84 line into proj4text for srid = 28992 (#387) 2010-01-16 04:26 robe * Add Guillaume's PostgreSQL 8.5 contribution 2010-01-15 19:48 pramsey * 80col wrap NEWS 2010-01-15 18:49 robe * add note about GEOS 3.2 2010-01-15 18:41 pramsey * Short circuit on distance tests: only do full spheroidal calculation where the distance is near or greater than the tolerance. This will make large st_dwithin() radius searches much faster since points that are well within the radius will not have their full geodetic calculation run, only those that are close to the radius boundary. 2010-01-15 18:06 pramsey * Prepare for 1.5.0b2 2010-01-15 17:54 pramsey * Make GEOS 3.1 the mandatory minimum (#385) 2010-01-15 17:47 pramsey * Ignore all PNG files. 2010-01-15 08:13 colivier * Round decimal part in #58 ticket unit test. As the previous result was not cross platform compliant 2010-01-14 14:45 colivier * Fix undefined vars in LWDEBUGF (#383) 2010-01-14 08:34 colivier * Update TODO. remove ST_GeomFromKML entry 2010-01-12 10:33 mcayland * Add missing MODULE_big section for #311 which was preventing the main PostGIS library from being installed on older versions of PostgreSQL. 2010-01-12 08:23 robe * slight typo correction 2010-01-12 08:18 robe * Add ST_DFullyWithin and add analysis as descriptor to functions 2010-01-12 04:28 pramsey * Change ST_Equals to use && instead of ~= (#378) 2010-01-12 04:24 pramsey * Shorten trac URL. 2010-01-12 01:01 pramsey * Add comment about postgis_comments.sql handling in 'clean' target of docs 2010-01-12 01:00 pramsey * Don't remove postgis_comments.sql when doing a 'make clean' in doc, that way they can survive into the tarball build for final release. 2010-01-12 00:25 pramsey * Performance tweak to distance calculations with tolerance. If distance is much less than tolerance, don't bother with geodetic calculation. If distance is close to or greater than tolerance, do the geodetic calculation. Should make st_dwithin faster, avoiding geodetic calculations for points that are clearly within tolerance. 2010-01-11 17:31 kneufeld * added missing liblwgeom target needed to build the documentation images 2010-01-09 03:05 robe * fix typo 2010-01-09 03:05 robe * Fill in missing spots in News 2010-01-09 00:10 pramsey * Use macro define to determine default geometry column name in gui 2010-01-08 23:39 pramsey * Update the NEW file 2010-01-08 23:16 pramsey * Added in one removed function (st_max_distance, replaced by st_maxdistance) to the drop script (#330) 2010-01-08 22:48 pramsey * Override pgxs defaults for install, from mcayland (#311) 2010-01-07 16:04 mcayland * Apply a modified version of Guillaume Lelarge's patch to allow compilation under current PostgreSQL 8.5 CVS. 2010-01-04 23:25 pramsey * Initailize config value from simple_geometries 2010-01-04 19:52 pramsey * Bracked and reformat comparison to be more explicit 2010-01-04 17:55 pramsey * Fixed up de-serialization routines to avoid *geoms = malloc(0) cases which were causing free to fail later on down the line (#370) 2010-01-04 05:47 pramsey * Remove the ifdef/endif blocks for HAVE_ICONV (#367) 2010-01-04 05:42 pramsey * Make configure error out when iconv is unavailable. (#367) 2010-01-04 05:21 pramsey * Minor change to about dialog build. 2010-01-04 04:52 pramsey * Re-fix connection password hiding (#356) 2010-01-04 00:34 pramsey * Fix the RCSID to actually substitute 2010-01-04 00:32 pramsey * Add an About dialogue that contains the revision string (hopefully) 2010-01-04 00:31 pramsey * Make lwcollection_extract slightly more empty-intelligent 2010-01-03 23:05 pramsey * Separate the options config persistence from the main persistence routine to allow the "geocolumn" magic to work more reliably (#369) 2010-01-02 08:17 pramsey * Add initialization to fix one Win32 segfault. 2010-01-02 07:01 pramsey * Add getopt.o into the modules used by shp2pgsql-gui.exe 2010-01-02 06:57 pramsey * Flip back to pgis_getopt 2010-01-01 20:28 pramsey * Change log entry to reflect actual iconv target encoding (UTF-8, not UTF8) 2010-01-01 19:44 robe * amend upgrade instructions to include description postgis_upgrade*.sql 2010-01-01 19:30 robe * put in ?, -n and -N missing from loader list 2009-12-31 12:41 robe * minor change 2009-12-31 11:56 robe * amend shp2pgsql section to mention gui loader and also -G geography switch 2009-12-30 15:31 robe * change wording in what is new titles to reflect they show both new and changed/enhanced functions 2009-12-30 15:12 robe * Fix ST_Extent/ST_Expand docs to reflect change in behavior of outputting double precision coords instead of float4. Still need to fix up examples. 2009-12-30 14:52 mcayland * Fix ST_Envelope() and ST_Expand() so that they use double precision arithmetic rather than single precision arithmetic for their calculations. The internal BOX2DFLOAT4s should *never* be used for calculation purposes. 2009-12-30 13:08 robe * ST_Box back to Box link ref 2009-12-30 12:53 robe * oops revert change I guess ST_Box .. is the one that's deprecated. How confusing :) PRobably should remove from docs at some point. 2009-12-30 12:48 robe * amend faqs and change Box2D,Box3D to ST_Box... 2009-12-30 09:15 robe * correct example 2009-12-30 07:20 robe * more clarity on the float4/float8 for ST_Envelope 2009-12-30 06:53 robe * #531 ST_Envelope has wrong return type changed from boolean to geometry 2009-12-30 06:45 robe * slight wording change 2009-12-30 06:44 robe * fill in mising geography = operator 2009-12-30 06:38 robe * fix typo 2009-12-30 06:12 robe * #365 document ST_GeogFromWKB and ST_GeogFromText 2009-12-30 01:25 pramsey * Rename ST_GeographyFromBinary to ST_GeogFromWKB. Add ST_GeogFromText to ape the ISO geometry spec more closely. (#360) 2009-12-30 01:20 pramsey * Remove the NULL policy line from the GUI options (#363) 2009-12-30 01:12 pramsey * Make a few things more explicit in the handling of encoding. 2009-12-29 20:23 pramsey * Remove a couple compiler warnings following last change. 2009-12-29 20:16 pramsey * Change options dialogue into actual GTK dialog and move to creating/destroying it on each appearance. (#363) 2009-12-29 19:23 pramsey * Try and get around the expanding window problem 2009-12-29 08:52 mcayland * Add a filter name to the shapefile file selector; this is just a cosmetic fix. 2009-12-29 08:35 mcayland * Restrict SQL to only 255 characters when displaying erroneus SQL in the log window. This prevents GTK from crashing when really long lines are added to the log window. 2009-12-28 18:48 pramsey * Include GUI as conditional install target 2009-12-28 13:32 mcayland * Add some more missing defaults to the shapefile loader configuration. 2009-12-27 17:16 mcayland * Fix shp2pgsql-gui not picking up the correct default settings, which was causing some shapefiles to abort in the GUI but when using the CLI. 2009-12-25 04:41 pramsey * Fix up another password leaking into the log (#356) 2009-12-24 00:57 pramsey * Handle case where there is no password to sanitize 2009-12-23 19:49 pramsey * Sanitize the connection string displayed in the GUI log (#356) 2009-12-23 19:34 pramsey * Add support for dumping geography tables. (#251) 2009-12-23 15:48 colivier * Add http://www.epsg.org/6.11.2/4326 srsName pattern support (related to CITE WFS 1.1 GetFeature-tc17.2. Add related unit tests 2009-12-23 05:01 pramsey * Remove hack PGAdmin GUI target (#355) 2009-12-22 20:50 pramsey * Add message to GUI when creating spatial index. 2009-12-22 19:38 pramsey * Add shp2pgsql-pgadmin build target for exe without special win32 options. 2009-12-22 12:38 mcayland * Fix bug in geography support when creating indexes. 2009-12-22 12:28 mcayland * More improvements to the shapefile loader: - Fix COPY support for shapefiles containing more than 1 record - Fix cancellation on mid-import - Remove progress logging on import, and replace with flashly progress bar 2009-12-22 00:35 pramsey * Handle index building when loading geography 2009-12-22 00:27 pramsey * Add support for GEOGRAPHY type to loader GUI. (#251) 2009-12-21 23:22 pramsey * Add support for geography type to command-line loader (#251) 2009-12-20 17:42 pramsey * CFLAGS=-pedantic pass over the codebase and warnings reduced 2009-12-20 17:23 pramsey * Disable unused static function. 2009-12-20 04:42 pramsey * Minor changes to header inclusions. 2009-12-20 04:31 pramsey * Fix bracket issue in commandline opt handline 2009-12-19 03:56 pramsey * Radically simpler getopt implementation from AT&T UNIX. 2009-12-18 20:51 pramsey * Add some logging during the load so we can see what's going on. 2009-12-18 19:28 colivier * remove the #273 test, as it already the same than point_1 2009-12-18 19:08 colivier * Libxml become mandatory. Cf #344. Modify configure step, remove all HAVE_LIBXML2 from code, sql and unit tests. Update documentation 2009-12-18 18:38 pramsey * Moved size of int8 down to 19 chars (#326) 2009-12-18 18:26 robe * fix some typos, cosmetic changes, throw some more geography around 2009-12-18 17:43 robe * Find a home for Paul's examples and Advanced FAQ and back reference from main FAQ section 2009-12-18 17:16 robe * We all new this day would come when we'd have to devote a whole section to this new kid called "geography". Think we still need to shuffle things around as the next section seems like a disconnect from the geography section 2009-12-18 07:46 mleslie * Reverting the change of r5007, removal of the getopt hack, to get windows builds working again. 2009-12-18 06:39 pramsey * Add in icon and resource information for Win32 GUI 2009-12-18 05:55 pramsey * Make GUI open w/o console under Win32 2009-12-17 12:54 mcayland * Implement proper cleanup if an import fails, and also disable the "Import" button during the import to ensure that multiple import threads can't be launched. 2009-12-17 11:16 mcayland * Add GUI option to allow the use of COPY rather than INSERT to load geometries into the database. Currently the default is still to use INSERT. 2009-12-17 11:11 mcayland * Fix memory scope error (resulting in segfault) accidentally introduced by the command line changes. 2009-12-16 17:13 pramsey * Temporarily de-regress the loader while talking to -devel 2009-12-16 17:00 pramsey * Quiet solaris warnings 2009-12-16 16:49 pramsey * Remove warning on Solaris 2009-12-16 00:43 pramsey * Add initial values. 2009-12-15 23:55 pramsey * Change MAX_DBF_FIELD_SIZE to 254 (#326) 2009-12-15 23:44 pramsey * Add in support for command-line options for connection info to GUI (#338) 2009-12-15 21:45 pramsey * Remove custom getopt files and move back to system getopt. Will take some testing, but will be worth it to be rid of this unmaintainable hack. 2009-12-15 20:56 pramsey * Make null date field blank rather than 00000000 (#321) 2009-12-15 20:08 pramsey * Make 4326 the default SRID for "unknown" cases, both in column creation and in geography object creation. (#347) 2009-12-15 18:44 pramsey * Add --with-libiconv argument to configure, to allow third-party iconv libraries to be used instead of system iconv, if so desired. Necessary to work around an OS/X Snow Leopard issue (iconv_open only available as a 32 bit call!) 2009-12-15 18:42 pramsey * Fix buffer overrun case. 2009-12-15 15:10 pramsey * Remove syntax error (fumbling fingers?) in the usage line (#345) 2009-12-15 15:08 pramsey * Remove test that enforces only OGC-standard WKT for GeomFromText(). We'll accept any string we can parse, just like geometry_in(). (#332) 2009-12-14 18:04 pramsey * Flip argument order for -cli exe build and add CFLAGS back into linking line 2009-12-14 11:26 mcayland * Remove the original shp2pgsql.c file which is no longer required with the new architecture. 2009-12-14 01:38 mcayland * Fix incorrect logic when outputting escaped strings; COPY does not require the attribute to be surrounded by apostrophes. 2009-12-14 01:23 mcayland * Fix missing COPY terminator from shp2pgsql command line component. 2009-12-13 20:31 mcayland * Commit initial version of reworked shp2pgsql architecture that defines a common API within shp2pgsql-core that can be called from both the CLI and GUI interfaces. There are still some minor TODOs left, however the basic concept appears to work well and I've also spent time running tests under valgrind to ensure that we don't leak memory on larger shapefiles. 2009-12-09 17:33 kneufeld * added identifier to shp2pgsql usage section 2009-12-09 17:12 kneufeld * updated "Using the Loader" to demonstrate the use of the available options 2009-12-09 05:08 robe * Correct the output type of ST_Extent and flag this as a change in behavior in PostGIS 1.4 2009-12-07 15:56 pramsey * Fix mistakes in geography faq item. 2009-12-04 15:39 robe * get rid of begin; commit in geography.sql.in.c. Now that it is part of postgis.sql.inc.c, no need for it. 2009-12-04 12:32 robe * change to use refname instead of refid for link in what's new -- so operators show the operator symbol instead of underlying function name 2009-12-03 20:42 kneufeld * removed VACUUM made into a single transaction block 2009-12-03 18:51 kneufeld * removed url that is probably the cause in breaking docbook 2009-12-03 18:43 kneufeld * a couple typos in the DE-9IM explanation added further reading references. 2009-12-03 16:23 kneufeld * fixed a typo and added a few cross links 2009-12-03 14:23 robe * Replace unicode codes with images. IE 6 and 7 not happy. PDF not happy with unicode happy face symbol -- Regina not happy :( 2009-12-03 08:58 robe * fill in missing curve support flags for outputs 2009-12-03 06:14 kneufeld * added a few reference cross links 2009-12-02 23:41 kneufeld * removed borders around the tables in the geometry compliancy section 2009-12-02 23:25 kneufeld * added some thoughts on DE-9IM 2009-12-02 23:23 kneufeld * added target to resize certain images 2009-12-02 22:05 robe * Flag more as working with curves. I think all do except same operator but need to verify. 2009-12-02 21:48 robe * Looks fine in all my IE8 browsers perhaps its just IE7 that's behind the times. Use cutesy unicode dingbats for now -- alos put in item list legend. 2009-12-02 21:02 kneufeld * added de9im images 2009-12-02 15:20 robe * Now that pdf table layout is fixed with informal table -- put back operators in matrix 2009-12-02 14:47 robe * Do I dear try an informal table again :) 2009-12-02 14:03 robe * Try Mateusz idea of a unicode checkmark 2009-12-01 22:54 robe * hmm spelled geometry wrong 2009-12-01 22:40 robe * get rid of padding on tables 2009-12-01 22:30 robe * try again 2009-12-01 21:47 robe * back to formal table 2009-12-01 20:08 robe * 2009-12-01 20:00 robe * try again 2009-12-01 19:53 robe * 2009-12-01 19:34 robe * fix build 2009-12-01 19:19 robe * seeif pdf looks better with an informaltable 2009-12-01 18:30 robe * title change 2009-12-01 18:29 robe * typo 2009-12-01 18:07 robe * Add sql mm compliance column get rid of cell-padding 2009-12-01 17:17 robe * shorten matrix list to exclude operators and exception so pdf is not quite so ugly. Try to fit on one page. 2009-12-01 17:06 robe * fix filter for 2.5D/curved support. More tweaking of style 2009-12-01 16:42 robe * get rid of border=0 altogether exclude management,types, and transaction from matrix 2009-12-01 16:15 robe * border not taking 2009-12-01 15:09 robe * I want table borders 2009-12-01 14:42 robe * oops had left over junk -- get rid of junk 2009-12-01 14:28 robe * try to get rid of section abstract -- see if pdflatex accepts super duper matrix 2009-12-01 14:15 robe * First attempt at super-duper type functionality compare matrix 2009-11-30 22:08 pramsey * Fix up boundary condition in node interaction test. 2009-11-30 20:52 pramsey * Add an internal geometry tree for use in a native prepared geometry scheme for fast intersection tests. 2009-11-30 20:50 pramsey * Add svn:keywords to everyone 2009-11-30 20:49 pramsey * Add NL to end of expected file. 2009-11-30 20:44 pramsey * Move the fromGML test into the in_gml.sql file, so that it will be properly excluded when libxml2 is not available. 2009-11-30 20:39 pramsey * Move have_libxml2 define to the other library have_ defines. 2009-11-30 20:37 pramsey * Fix warnings from cpp during sql file build as reported by kneufeld 2009-11-30 19:56 pramsey * Updated SQL files for uninstallation to match current state. 2009-11-30 19:12 pramsey * Update the upgrade process description to match new scripts. 2009-11-30 17:27 pramsey * Rename ST_PointOutside to _ST_PointOutside (#325) 2009-11-30 16:40 kneufeld * renamed ST_DumpPoints to _ST_DumpPoints 2009-11-30 14:30 robe * revise template to use new entities 2009-11-30 14:24 robe * availability note not specified right for ST_DumpPoints 2009-11-30 09:16 robe * fill in missing proto for st_polygonize 2009-11-29 09:07 robe * Yeh ST_GeomFromKML/GML not crashing anymore on Windows (when libxml statically compiled in) -- can put back the tests 2009-11-28 22:36 robe * Add missing ST_CoveredBy proto for geography 2009-11-28 07:13 robe * try to force paragraph at top using sectinfo abstract. Make note about deprecation more threatening. 2009-11-28 06:50 robe * slight amendment to description of casts 2009-11-28 06:40 robe * fill out casting behavior, also list box type functions and links to it and from it 2009-11-27 23:38 pramsey * Add install directory as an ignore. 2009-11-27 20:58 robe * link to new geometry_dump sections, also alphabetize dump functions 2009-11-27 20:39 robe * thanks Kevin -- this should work now 2009-11-27 20:31 robe * take out link and see if hudson is happy 2009-11-27 20:01 robe * try again - maybe typo 2009-11-27 19:46 robe * Add geometry_dump and special index to list all functions that take as input or output geometry_dump objects 2009-11-27 19:21 pramsey * A few more Mapserver usage updates. 2009-11-27 19:17 pramsey * Update the using mapserver section a little 2009-11-27 17:50 pramsey * Add newlines at file ends to silence warnings 2009-11-27 17:06 kneufeld * Fixed a few typos and missing references 2009-11-27 16:28 robe * okay another try. bad scaling 2009-11-27 16:01 robe * make all colors different for clarity 2009-11-27 15:37 robe * forgot images 2009-11-27 15:36 robe * remove dupe ST_DFullyWithin, put in availability note for ST_DFullyWithin, add ST_ClosestPoint documentation and images, fix ST_LongestLine diag 3(forgot about the 200x200 rule) 2009-11-26 18:50 robe * another st_longestline example 2009-11-26 17:56 mcayland * Commit slightly altered regression tests for the above. 2009-11-26 17:55 mcayland * Fix #316: IsValid? called on invalid 3d object leads to crash. Because of the way the parser works, not all tuples can hold a valid parse position; hence when trying to display the error message, the parser would crash. The solution I went for here was to alter pop() so that "counting tuples" always hold a valid parse position, and then re-write the various check functions to ensure that they only display parse errors with details from the next "counting tuple" higher up in the stack. 2009-11-26 16:52 robe * change shortestline/longestline point/line example 2009-11-25 23:37 robe * another typo 2009-11-25 23:36 robe * fix typo in coordinates 2009-11-25 23:07 robe * make diagrams more interesting 2009-11-25 22:48 robe * Put in figures for ST_LongestLine. revise figure for shortest line make geometries the same for easy compare 2009-11-25 22:15 robe * cosmetic changes 2009-11-25 22:12 robe * Put in images for ST_ShortestLine 2009-11-25 21:49 robe * put in missing availability notes 2009-11-25 19:15 pramsey * Merge Nicklas Aven's distance spike into trunk. (#63, #231) 2009-11-24 22:10 kneufeld * added refentry section for ST_DumpPoints() 2009-11-24 21:46 kneufeld * added an ST_DumpPoints image to the collection. 2009-11-24 17:28 colivier * explicit NULL test on xa->name. Related to #273 2009-11-24 10:28 colivier * add also availability note to GmlToSQL() 2009-11-24 10:20 colivier * add availability information for postgis_libxml_version() 2009-11-23 18:07 robe * #300 - minor casing changes to reference. Incorporate logic to comment types. Types need more description and casting behavior detail. 2009-11-23 14:27 robe * New postgresql type section per #300. Still need to modify postgis_comments.sql.xsl accordingly 2009-11-23 14:26 colivier * Add libxml2 version information in postgis_full_version. Add libxml2 support information in postgis_version. Add new postgis_libxml_version function. Add doc entry for this new function. 2009-11-22 04:56 pramsey * Move utility functions only used in cunit tests to the cunit code. 2009-11-22 04:28 pramsey * Replace pow(,2.0) with POW2 macro. 2009-11-21 06:08 pramsey * Move from pass-by-value to pass-by-const-pointer. What can I say, I have no control over myself. 2009-11-21 03:44 robe * update st_buffer, st_intersection details for geography to reflect what we are actually doing in bestsrid calc 2009-11-21 03:31 robe * grammar correction 2009-11-20 20:12 pramsey * Fix an error hidden in a debug line. 2009-11-20 18:36 pramsey * Fix graxing case and improve co-linear handling with help from Nicklas Aven (#314) 2009-11-20 18:05 kneufeld * added missing dependency of postgis_aggs_mm for the comments 2009-11-20 14:02 mcayland * Apply Kris Jurka's pgsql2shp patches, as detail in the postgis-devel archives on 12th Nov. Thanks Kris! 2009-11-20 13:53 mcayland * Finish working on Dave Fuhry's memory-leak patch, and also fix several other leaks found by running shp2pgsql through valgrind. 2009-11-19 22:35 colivier * Switch to reference splitted files. Add references entities. Use postgis.xml rather than reference.xml in doc/xsl/* files. Add template rule in doc/xsl/* to only use /book/chapter[@id='reference']. 2009-11-19 20:23 pramsey * Handle the case where the stabline and a polygon edge are co-linear in point-in-polygon test. 2009-11-19 15:39 mcayland * Alter regression test harness so that shp2pgsql/pgsql2shp can be tested without being installed. 2009-11-19 00:54 pramsey * Attempt to clarify MULTIPOLYGON behavior in ST_SimplifyPreserveTopology (#240) 2009-11-18 19:54 pramsey * Add another example (#218) 2009-11-18 19:53 pramsey * Put constants reference in the example, so people see it (nobody reads documentation) (#218) 2009-11-18 17:28 kneufeld * Ok, well that didn't work. Reverting changes. 2009-11-18 17:19 kneufeld * simplified postgis-out.xml target. The sed replacement should only happen on the postgis.xml file as the DocBook variable &last_release_version is used throughout the documentation 2009-11-17 23:27 pramsey * Add in the history table convenience functions, a README and some manual examples for pedagogy. 2009-11-17 22:29 pramsey * Fix a double-free in the unit test for collection extract. 2009-11-17 20:14 pramsey * Add availability line. 2009-11-17 20:05 pramsey * Add more explanation of type numbers. 2009-11-17 20:03 pramsey * Implement ST_CollectionExtract() to pull specific homogeneous collections out of heterogeneous collections. Regressions and documentation included. (#218) 2009-11-17 17:23 pramsey * Trim the binary versions of geometries to try and remove regressions from other platforms. 2009-11-17 14:00 mcayland * Properly fix #219 by creating a separate "mini install" of PostGIS into the PGXS regression directory that can be used for regression. This is because different architectures have different naming conventions, and so Paul's original hack isn't guaranteed to work. By using PGXS to perform the install, we eliminate the problem of having to know the final architecture library name. 2009-11-17 04:28 pramsey * Add tests from #210 to the tickets.sql 2009-11-17 04:25 pramsey * Add tickets.sql and expected tests derived from old trac entries (#214) 2009-11-16 23:30 pramsey * Add identifying lines to SQL so that error lines are easier to find. 2009-11-16 23:22 pramsey * Remove trailing space from libname 2009-11-16 22:01 pramsey * Add in hack to match the library .so substition name to the one produced by a particular PgSQL version. (#219) 2009-11-16 21:13 pramsey * Add in tests for MapServer/Geoserver-style SQL calls. (#224) 2009-11-16 20:25 pramsey * Make scripts version independent of library micro-version. 2009-11-16 19:52 pramsey * Make POSTGIS_SCRIPTS_VERSION reflect the maximum SVN version of the SQL input files. (#242) 2009-11-16 19:47 kneufeld * Ticket #76. - added a modified version of a plpgsql implementation for ST_DumpPoints() proposed by Maxime van Noppen. - added regression tests 2009-11-16 19:10 pramsey * Make an unknown geography SRID translate to a 4326 geometry SRID during a cast (#298) 2009-11-16 19:06 robe * forgot availability note 2009-11-16 19:04 robe * fix typos in ST_MakeEnvelope (at least he tries :) ) 2009-11-16 18:46 pramsey * Add doco and regression tests for ST_MakeEnvelope() (#199) 2009-11-16 18:28 pramsey * Add ST_MakeEnvelope() constructor, terse function for making bbox polygons. (#199) 2009-11-16 13:50 robe * revise to deal with boolean arguments 2009-11-16 12:57 robe * Update geography transform description to reflect new cowboy transform hack strategy :). Need to update functions as well once Olivier has stopped kicking dust. 2009-11-16 05:55 robe * More encouragement to use GEOS 3.2 :) 2009-11-16 05:53 robe * get rid of reference to loading geography.sql (now integrated in postgis.sql) 2009-11-16 00:28 colivier * revert Makefile.in reference.xml and postgis.xml to r4816. Need to fix NewFunction reference to go further :( 2009-11-16 00:27 pramsey * Cowboy triumphs. (#304) 2009-11-15 23:13 pramsey * Actually use Antarctic stereographic for antarctic points. (#304) 2009-11-15 22:17 colivier * Add final semicolon. Remove useless copy related to reference.xml 2009-11-15 22:03 colivier * Add forgotten .xml (in pdf rule) 2009-11-15 21:55 colivier * Add forgotten .xml in postgis-out rule 2009-11-15 21:23 colivier * Update Makefile rules, related to reference.xml split (r4817) 2009-11-15 20:39 colivier * Split reference.xml on several sub files (upon sect1). Use entity to avoid redundant compliant/support text (SFS, SQL/MM, Z/M dimensions, Curve support) 2009-11-15 19:52 pramsey * Handle odd ArcMap scinotation for large ints. (#38) 2009-11-15 19:32 pramsey * Add locale handling by setting to 'C' (#303) 2009-11-15 19:23 pramsey * Make the _cmp and _eq methods use the same equality conditions so that indexed and unindexed answers will be the same. (#292) 2009-11-14 21:14 pramsey * Move the polar stereographic line a little further north in bestsrid. (#304) 2009-11-14 03:49 robe * missing ST_DWithin geography spheroid proto 2009-11-14 00:40 pramsey * Add testing and drop deprecated functions (#202) 2009-11-13 22:13 pramsey * Build out version specific upgrade scripts. 2009-11-13 20:04 pramsey * First baby steps towards version-specific loader 2009-11-13 15:28 robe * libxml preferable 2009-11-13 15:27 robe * fix Paul's bad spelling, add KML in output list, link to what's new in PostGIS 1.5 section, GEOS 3.2 preferred 2009-11-13 03:35 robe * fix formatting in ST_LineCrossingDirection (replace tabs with spaces)-- show new corrected output after #272 - should be negatively symmetric fix 2009-11-12 19:00 pramsey * Walk back function deletions of ST_ functions under types and operators, these can't be dropped during an in-place upgrade, *sigh*. (#195) 2009-11-12 04:09 pramsey * Remove old version ifdefs for versions < PgSQL 8.3 (#290) 2009-11-11 19:57 pramsey * Update behavior of lwgeom_same to match "orderingequals" semantics (#289) 2009-11-11 19:35 pramsey * Slightly loosen equality tolerance check for point in cone... does this fix cunit regressions? 2009-11-11 19:02 pramsey * Simplify code and improve consistency of linecrossing results (#272) 2009-11-11 00:00 pramsey * Remove GisT headers from file and set keywords. 2009-11-10 23:58 pramsey * Make the = operator do a pure equality test 2009-11-10 20:39 pramsey * Stub implementation of ordering operators (#292) 2009-11-10 19:30 pramsey * Apply handling for EMPTY geometries to all geography functions per the DevWikiEmptyGeometry page. 2009-11-10 18:34 robe * put logic to recognize boolean and KML text args. Exclude ST_GeomFromKML and ST_GeomFromGML from testing until crashing problem under mingw is resolved. 2009-11-10 12:45 robe * put availability note first in what's new for 1.5. Some of the functions aren't new but support geography or have behavior change. Easier if that note comes first. Will change for prior what's new later if this looks okay. 2009-11-10 12:18 robe * using (T) to denote Paul's transform hacks and noting what that (T) means. Will eventually use to generate super duper function compare matrix :) 2009-11-10 12:13 robe * Put in ST_Intersection proto for geography 2009-11-10 12:08 robe * add ST_Intersects proto for geography 2009-11-10 11:57 robe * Add ST_GeomFromKML, add some grammar corrections to ST_GeomFromGML 2009-11-08 19:05 colivier * Initial version of ST_GeomFromKML function and related units tests 2009-11-08 19:02 colivier * remove an unused var. minor comment change 2009-11-08 06:42 colivier * Complete ST_GeomFromGML documentation. Add ST_GMLToSQL documentation entry. (Please tks to read back as my english grammar is far to be perfect) 2009-11-07 16:49 pramsey * Remove TODO items that have actually been done. 2009-11-07 16:17 pramsey * Make the configure-time test for PgSQL version check for 8.3+ (#290) 2009-11-07 01:47 pramsey * Drop database when function loads fail in regression tests. (#77) 2009-11-07 01:31 pramsey * Make ~= be a bounding box only operator and upgrade ST_Equals() and ST_OrderingEquals() to match the new behavior. Update regression tests to match new behavior. (#282) See also #289 for an odd quirk discovered while updating regression tests. 2009-11-07 00:33 pramsey * Add text wrappers to functions we commonly expect people to call with text arguments but expect implicit casting to geometry. (#252) 2009-11-07 00:12 pramsey * Fix for point-on-vertex case of st_covers (#271) 2009-11-06 22:55 pramsey * Utility to read svn revision numbers from SQL scripts. 2009-11-06 22:49 colivier * finalize Xlink support (GML SF-2 fully compliant). Fix typo on PointProperty/Point. Few comments and style corrections. Update unit tests. 2009-11-06 21:45 pramsey * Make geography.sql part of the standard postgis.sql build. 2009-11-06 20:46 pramsey * Add costs to CPU intensive C functions and update doco to ensure 8.3 is the referenced minimum PgSQL version. (#230) 2009-11-06 17:30 pramsey * Update documentation for those functions affected by RFC3. They are all internal functions that are going to disappear in 2.0, might be better to simply remove them, but for now... 2009-11-05 20:20 pramsey * Fix for #157, ST_GeometryType output doesn't correctly identify curved geometries 2009-11-05 19:29 pramsey * Fix for new LRS regression (#283) 2009-11-05 19:04 pramsey * Implement RFC3 (#195) 2009-11-05 04:55 pramsey * Some initializations and a null pointer avoidance test (#273) 2009-11-05 00:58 pramsey * Add ST_Intersection() and ST_Intersects() for geography. 2009-11-05 00:43 pramsey * Remove createdb_opt lines from psql and createlang calls. (#228) 2009-11-05 00:37 pramsey * Make non-M attempts to run LRS functions error out instead of return NULL (#113) 2009-11-04 23:51 pramsey * Fix for #273? Some unitialized variables may have been causing problems. Initializing them fixed this problem for me. 2009-11-04 23:03 pramsey * Fix hausdorf crasher (#279) 2009-11-04 21:19 colivier * revert wrong commit (r4741) on wktparse.lex file 2009-11-04 21:10 colivier * Allow a double to not have digit after dot (related to #175). Update unit test case 2009-11-04 20:35 pramsey * Fix for #175, numbers with a terminal decimal won't parse. 2009-11-04 18:59 robe * amend ST_Length to include use_spheroid proto and amend examples to state new default behavior 2009-11-04 18:47 pramsey * Allow ~= operator to recheck, per #253. 2009-11-04 11:57 robe * type correction in ST_BuildArea output. Add additional proto to ST_Area and correct the example to show the new spheroid measurement default 2009-11-04 09:53 colivier * Give priority to gml namespace attribute if any. Apply a fix on ring incrementation (Surface/interior) 2009-11-04 03:27 pramsey * Change ST_Area(geog) to defaul to spheroid calculation. 2009-11-04 00:13 pramsey * Remove unit test failure cases in 32-bit architectures. Now have to test correctness of algorithms on test data in 64-bit environment. 2009-11-03 22:26 colivier * Initial support of Xlink. Add related units tests. Few cleaning 2009-11-03 22:24 colivier * Add xpath headers support for libxml2 2009-11-03 21:24 pramsey * File headers and property setting. 2009-11-03 21:16 pramsey * Add in handlers to avoid sheroid area cases we currently cannot handle. 2009-11-03 21:13 pramsey * Slight change in ST_Area wording. 2009-11-03 15:32 robe * amend distance proto and example -- now we default to spheroid 2009-11-03 13:36 colivier * Add namespace support. Add pointProperty and pointRep support. Fix pos and posList spaces inside coordinates issue. Comments update. Update unit tests 2009-11-03 10:03 robe * get rid of extra para tag 2009-11-03 09:47 robe * more typo fixing 2009-11-03 09:33 robe * fix typo 2009-11-03 05:19 robe * Document ST_Buffer for geography and caveats 2009-11-03 02:58 pramsey * Re-enable other geodetic unit tests and remove Java code block. 2009-11-03 00:36 pramsey * First cut of ST_Area(geography) on spheroid. Currently not default, use ST_Area(geog, true) to enable it. Beware of limitations over poles and eequator. 2009-11-02 12:05 robe * minor corrections to ST_distance_sphere/spheroid descriptions 2009-11-01 22:31 robe * amend doc for st_distance_sphere, st_distance_spheroid to reflect expanded support. 2009-10-31 05:05 pramsey * Make distance_spher(oid) functions a little more type safe. 2009-10-31 04:53 pramsey * Update distance_sphere and distance_spheroid to back onto new geodetic handlers and support generic geometry. 2009-10-31 00:10 pramsey * Tighten up geometry->geography case (#265) 2009-10-31 00:01 pramsey * Add ST_Length() implementation on spheroid and rationalize the sphere/spheroid implementations into a smaller shared set of functions. 2009-10-30 20:45 pramsey * Add in spheroid calculations for ST_Distance and ST_DWithin. 2009-10-30 19:00 robe * Add link to new compatibility matrix 2009-10-29 20:31 colivier * Change dimension to srsDimension (GML 3.1.1) 2009-10-29 20:21 colivier * Change attribute dimension into srsDimension (GML 3.1.1), cf #276 2009-10-29 19:53 pramsey * Minor changes for numerical stability. Remove logging. 2009-10-29 19:41 pramsey * Increase precision of minor axis constant. 2009-10-29 19:24 pramsey * Spheroid distance calculation between points added. 2009-10-29 18:42 colivier * Add mixed GML srs support. Add ability to deal with lat/lon issue in GML 3. Fix GML collection units tests. Update units tests 2009-10-29 18:40 colivier * Expose transform_point, make_project and GetProj4StringSPI. Creation of lwgem_transform.h 2009-10-29 14:21 colivier * Update unit test result, related to error message change (r4662 in lwgeom_transform.c) 2009-10-29 14:08 colivier * Add attribute dimension in gml:pos and gml:posList. Fix geometrycollection invalid GML output. Update units test. Cf #276 2009-10-28 23:05 pramsey * Note why the penalty function was changed. 2009-10-28 23:02 pramsey * Remove overly clever penalty calculation and improve index structure a lot! 2009-10-28 18:38 pramsey * Fill in actual error condition 2009-10-28 18:20 pramsey * Fix error in picksplit routine, perhaps will fix balance problem. 2009-10-28 12:13 robe * slight attribution update 2009-10-28 11:56 robe * minor update to release notes (copying content from branch 1.3 not in trunk) 2009-10-28 11:47 robe * switch pretty tag back to credits -- already linked in reference.xml 2009-10-28 11:40 robe * update credits to include breakout of PSC and bump up people with commit access and currently committing work 2009-10-28 11:05 robe * copy release notes text from branch 1.4 which is strangely more up to date. 2009-10-28 10:58 robe * correct links to postgis bug tracker and subversion repository. Also amend the release_notes section to reflect newer version changes 2009-10-27 21:39 colivier * Fix huge number overflow in export functions, cf #277 2009-10-24 16:37 colivier * Add multi data coordinates support. Add unit test case data_1 2009-10-24 16:35 colivier * Add ptarray_merge function 2009-10-23 23:16 pramsey * Update personal information. 2009-10-23 16:01 robe * typo in example 2009-10-23 15:51 robe * put in availability note for ST_GeomFromGML, link back from ST_AsGML, note about libxml2 required 2009-10-23 13:26 robe * Preliminary documentation for ST_GeomFromGML and logic to support gml input parameters 2009-10-22 14:08 colivier * Use ptarray_isclosed3d to check if 3D rings are closed also on Z. Update units tests cases 2009-10-22 14:06 colivier * Add ptarray_isclosed3d function 2009-10-20 15:30 robe * fix typo in libxml deactivated notice 2009-10-20 13:07 colivier * Add HAVE_LIBXML2 2009-10-20 12:54 colivier * Add initial version of GeomFromGML function, and units tests cases. 2009-10-20 12:51 colivier * Add libxml2 support (needed by GeomFromGML) 2009-10-19 12:53 robe * update to include ST_Length for geography 2009-10-19 05:05 pramsey * Add _ST_BestSRID(Geography) utility function to support ST_Buffer(geography, radius) hack that casts back and forth to geometry. 2009-10-18 21:15 pramsey * Add in support for magic srid numbers that will always be available for UTM WGS84 and polar stereography. Will be used in wrappers that allow geometry functions to be applied to geography. 2009-10-18 04:19 pramsey * ST_Length(geography) per #266 2009-10-16 23:30 pramsey * Muck with index logging code. 2009-10-16 16:33 mcayland * Fix the geography <column> && <column> selectivity code. Now the answers between geometry and geography are reasonably similar :) 2009-10-16 16:31 mcayland * Commit a first-hack attempt at a script to test the geography join estimation code. 2009-10-16 16:23 mcayland * Change "Mixed Geometry Types" message into a warning rather than an error in the existing join estimation test script. 2009-10-16 13:33 robe * revise to test && against table and also put in some floating points to make tests more interesting 2009-10-16 13:01 robe * #269 get rid of geography -> geometry implicit to make it an explicit cast 2009-10-16 09:37 strk * Tell what the default is for -N in help output and README file 2009-10-15 17:50 mcayland * Update the TYPMOD_SET_* macros in the same way as for the FLAGS_SET_* macros earlier, so that they actually change the variable they reference. 2009-10-15 17:45 mcayland * Add (slightly hacked) version of geography selectivity test script to the repo. 2009-10-15 17:44 mcayland * Fix test_estimation.pl script so it doesn't require oids - no-one uses these in the 21st century... 2009-10-15 15:35 mcayland * Alter the FLAGS_SET_* macros so that they actually update the specified flag variable, rather than just returning the new value of the flag variable. 2009-10-15 14:48 mcayland * Fix for column intersection geography queries sometimes returning "lwgeom_get_gbox_geodetic: non-geodetic gbox provided" during execution - a missing initialisation bug. 2009-10-14 16:57 mcayland * Re-enable ANALYZE hook, now that it doesn't crash upon loading Paul's test dataset anymore. 2009-10-14 16:22 mcayland * Don't use the default (integer) version of abs() during floating point calculations... 2009-10-13 19:50 pramsey * Much better fix for NaN area problem. 2009-10-13 19:39 pramsey * HAck fix for NaN areas. 2009-10-11 02:03 pramsey * Don't copy bboxes from lwgeom to gserialized when working with geodetics. (#263) 2009-10-10 16:59 robe * update to include ST_Covers geography 2009-10-10 15:43 robe * update ST_Area with geography examples 2009-10-10 03:18 pramsey * Add geometry(geography) case per #257 2009-10-10 00:08 pramsey * Fix ST_Area(geography) calculation to be more... correct. 2009-10-09 19:23 pramsey * Add implementation for ST_Covers(geography, geography) in point-in-polygon case. 2009-10-09 18:07 pramsey * Fix incorrect use of flags macros 2009-10-09 16:51 pramsey * One more fix for #260. 2009-10-09 16:07 pramsey * Fix for #261 (spurious dimension difference errors) 2009-10-09 10:39 robe * Put in proto for ST_Area(geography). Still need to put in example but my ST_Area is non-existent will double-check why. 2009-10-09 04:16 pramsey * Add ST_PointOutside() function for testing purposes. 2009-10-08 19:40 pramsey * Make geographic point initialization slightly more efficient (avoid doing it twice for each vertex) 2009-10-08 18:59 pramsey * Make error messages slightly less opaque 2009-10-08 18:41 pramsey * Comment out analyze argument in geometry type creation -- it is causing a crash for me when loading my test data tables. 2009-10-08 17:10 pramsey * Change radius figure to common average. 2009-10-08 17:04 pramsey * Reformat SQL lines with tabs 2009-10-08 11:43 robe * revise readme to include link to instructions for garden test 2009-10-08 11:40 robe * Revise to have function list past in as arg to xsltproc 2009-10-08 10:29 mcayland * Commit first attempt at working geography index selectivity - the conversion should be there, however it needs some kind of test harness to verify some of the results. 2009-10-08 05:35 pramsey * ST_Area(geography) implementation and SQL bindings. 2009-10-07 14:26 pramsey * Make the calculation of gboxes a little simpler in the db level code. 2009-10-07 12:16 mcayland * Fix #179: ST_MakeLine and ST_MakeLine_Garry crash server with null arrays again. There was another non-NULL safe array iterator within LWGEOM_makeline_garray. 2009-10-07 11:52 robe * Add table with multiple nulls to garden of geometries. Evidentally -- there are some NULL bugs that escape trapping with just a single null geometry in the table. 2009-10-07 04:38 robe * flip order of ST_Relate protos as Martin observes it doesn't match our description 2009-10-07 03:38 pramsey * Put prototypes into place 2009-10-07 03:37 pramsey * Change from pass by reference to pass by value 2009-10-07 03:35 pramsey * Short circuit the edge intersection test when the gboxes are disjoint 2009-10-06 16:16 mcayland * First attempt at porting the estimate_selectivity() function to handle 3 dimensions. Note this is mostly untested at the moment, as this is only the function that cuts the relevant section out of the histogram. We still need to plug this into the PostgreSQL infrastructure. 2009-10-06 13:51 mcayland * Fix #258: ST_HausdorffDistance crashes server. Another geometry free typo (same as #241) in both st_hausdorffdistance() and st_hausdorffdistancedensify(). 2009-10-06 13:43 mcayland * Fix #241: ST_LineCrossingDirection Server Crash (Segfault) caused by a typo freeing the wrong parameter. 2009-10-06 12:02 robe * Put NULL safety tests back in now that Mark has fixed aggregate collection bug 2009-10-06 11:15 robe * Turn of Paul's accidental commit of fanboy mac enabled random test 2009-10-06 10:49 mcayland * Fix compilation bug when debug is enabled. 2009-10-06 10:15 mcayland * Fix another non-NULL safe array iteration within LWGEOM_collect_garray, as discovered by Regina's torture tests. 2009-10-06 08:52 mcayland * Move CFLAGS after the PGXS include directive, so that the autotools configuration doesn't getting overwritten by the PGXS version. Required when passing custom compiler f lags into PostGIS as reported by William Kyngesburye. 2009-10-06 04:59 pramsey * Make db implementation consistent with liblwgeom 2009-10-06 04:50 pramsey * Change signatures for lwgeom distance sphere 2009-10-06 04:19 pramsey * New point-outside routine, and allow distances against empty geometries. 2009-10-05 21:15 kneufeld * updated ST_IsValid's reference to the OGC specs. 2009-10-05 19:43 pramsey * More test cases in there (but turned off, because they fail :( 2009-10-05 19:38 pramsey * Add untested new p-i-p approach for more testing later. 2009-10-05 16:17 mcayland * Commit first attempt at a multi-D statistics histogram builder. Note that while geodetic data is inherently 3D, the builder also contains code to handle lower dimension cartesian coordinates, which should make porting to ggeometry easier at a later date. At the moment there are no selectivity routines which actually use the histograms for real queries, however a reasonably convincing histogram is created in pg_statistic and all regression tests pass here. 2009-10-05 14:37 pramsey * Increase precision. 2009-10-05 14:37 pramsey * Add another printing block 2009-10-05 12:52 robe * more errors in my logic 2009-10-05 11:45 robe * more corrections 2009-10-05 05:05 pramsey * Added new point-on-edge routine still no joy on bad test case. 2009-10-04 22:26 pramsey * Add another test case that needs resolution 2009-10-04 01:41 pramsey * Add SQL bindings for selectivity functions. 2009-10-04 00:52 pramsey * revert to previous version 2009-10-04 00:51 pramsey * Some fixes to the ST_DWithin code. 2009-10-02 20:07 robe * more changes to better test geography 2009-10-02 19:24 robe * cosmetic change to tolerance args for ST_DWithin 2009-10-02 19:21 robe * put create table examples in program listing tag 2009-10-02 19:08 robe * add geography proto for ST_DWithin, also fill in some availability marks forgotten. 2009-10-02 18:44 robe * Add geography example for ST_Distance, more geometry examples and amend to reflect its in meters 2009-10-02 18:28 pramsey * Largely untested implementation of ST_DWithin(geography, geography). We're in business baby! 2009-10-02 14:13 strk * typo in help message 2009-10-02 01:38 pramsey * Make the units of st_distance(geography, geography) meters 2009-10-01 23:54 pramsey * Fix boner error 2009-10-01 21:18 robe * typos 2009-10-01 20:37 robe * put in ST_Distance proto for geography so can test it. 2009-10-01 19:50 pramsey * ST_Distance(geography, geography) roughed in. Small detail, currently returns answers in radians. :) 2009-10-01 18:45 pramsey * Add polygon/point distance and tests. 2009-10-01 14:52 pramsey * Wow, error that only showed up in MinGW, but totally an error. I wonder why my test passed this... clean memory I guess. 2009-10-01 05:53 pramsey * lwgeom sphere distance function and tests for point/linestring 2009-09-30 23:59 pramsey * Roughing in lwgeom distance machinery now. 2009-09-30 23:03 pramsey * Add edge-edge distance tests. 2009-09-30 21:45 pramsey * Add return value for point of closest approach on arc/edge distance. 2009-09-30 21:21 pramsey * Add edge-to-point distance calculation and tests 2009-09-30 19:34 pramsey * Remove CPU intensive test and add some lat/lon utility functions 2009-09-30 19:02 pramsey * Make point-in-edge test even looser (fp tolerance factor) 2009-09-30 18:57 pramsey * Move defines around a bit. 2009-09-30 18:54 pramsey * Add some debugging blocks for later 2009-09-30 18:28 pramsey * Add in special case test for parallel / equal edges. 2009-09-30 17:12 pramsey * Whoops, make sure we test all our test cases. 2009-09-30 17:09 pramsey * Make random brute force test a compile-time option. 2009-09-30 17:05 pramsey * Add more test cases for geocentric bbox calculation and make 'in cone' test inclusive of end points. 2009-09-30 15:50 robe * more fixes to make geography friendly 2009-09-30 14:10 strk * Can't put backslash-commands in 'echo' parameter in a standard way (would take -e in some cases) so replace \t with some spaces 2009-09-30 08:39 strk * add missing newline at end of error message (utf8/iconv) 2009-09-30 00:17 pramsey * Re-enable all geodetic tests. 2009-09-30 00:11 pramsey * Add some extra comments 2009-09-29 20:44 pramsey * astyle the work thus far 2009-09-29 20:41 pramsey * Flip the clairaut calculations to return both top and bottom in one go. 2009-09-29 19:53 pramsey * Remove old GBOX test answers (some were wrong!) in favor of actual slow calculations 2009-09-29 19:50 pramsey * Add randomized box maker/checker... still some small errors? 2009-09-29 19:02 pramsey * Make polygon pole check a little more general. 2009-09-29 18:48 pramsey * All bbox test cases now pass. Suck on that! 2009-09-29 15:55 robe * remove null geometry from testing until we fix aggregate null crashing bug. Also fix multipolygonz and m not returning those geometry types. 2009-09-29 14:40 pramsey * Remove un-used function from testing. 2009-09-29 14:39 pramsey * Work on making "on edge" test more reliable. 2009-09-29 13:31 strk * Ensure lwcollection_segmentize2d always return a NEW geometry. Fixes ticket #254. Add regression test for that bug. 2009-09-29 12:42 robe * Add missing protos for geography for ST_AsKML, ST_AsGeoJSON, ST_AsSVG, ST_AsGML. Revise xml parser special index generator to not dupe when multiple protos with geography 2009-09-29 12:23 robe * Put in overload text for ST_AsText and ST_AsBinary to prevent the function .. is not unique when passing in text (unknown) rep of a geometry. Still need to do this for ST_AsKML etc. that Olivier just put in. 2009-09-29 07:45 colivier * Update documentation related to geography typmod export functions (r4535, r4536) 2009-09-29 06:34 robe * Add a new special index section to collect functions that take as input or output geography data type. Also give pretty anchor to PostGIS Geography section 2009-09-28 22:45 pramsey * Test re-org and first cut at edge intersection. 2009-09-28 18:31 colivier * A forgot prototype in ST_AsGeoJson export function 2009-09-28 18:16 colivier * Add geography typmod support for export functions (ST_AsGML, ST_AsGeoJson, ST_KML, St_AsSVG). Create lwgeom_export.c and lwgeom_export.h to factorize common export functions routines. 2009-09-25 13:32 robe * remove regex.h include per Nicklas observation its still in there. 2009-09-23 18:15 pramsey * Add SQL def'n for geography_analyze function. 2009-09-23 16:11 robe * another typo 2009-09-22 21:56 robe * missing spots for geography.sql and postgis_comments.sql 2009-09-22 21:53 robe * correct typo 2009-09-22 21:14 robe * start putting in geography functions 2009-09-22 13:38 mcayland * Commit fix to LW_ABS() macro as discovered by Nicklas Aven. 2009-09-22 13:09 mcayland * Add the basic machinery to call a function when running VACUUM ANALYZE on a geography column - the more interesting parts are yet to come ;) 2009-09-22 12:27 robe * get rid of things like invalid coords for 4326 space tripping up geography testing. 2009-09-22 11:53 mcayland * Oops - forgot to bump the array indices on the last commit :( 2009-09-22 11:27 robe * Update installation to include geography.sql (yikes we still had install lwpostgis.sql -- no wonder people are so confused). Also upped required to 8.3 2009-09-22 11:23 robe * cut in Paul's geography.txt into the official docs. Didn't notice it before :(. We might need a whole new chapter for this to do it justice but will deal with formatting later. 2009-09-22 11:23 mcayland * Add missing geometry(m)(z) type missing from previous commit. 2009-09-22 11:13 mcayland * Remove dependency on regex library by implementing the same functionality using standard C functions. Passes regression tests for me. 2009-09-22 00:06 pramsey * Change signatures to use fewer pointers. 2009-09-21 10:57 mcayland * Update LWDEBUG(F)/POSTGIS_DEBUG(F) macro debug levels to follow the standard in postgis/DEBUG. 2009-09-21 10:50 mcayland * Change macros to use capitalised names, as per standard C convention. This means it is possible at a glance to determine what is a macro and what is a function. 2009-09-20 08:15 robe * fix typos and redundant things 2009-09-20 08:10 robe * flag some operators that support geography, put in logic to test for geography marked functions 2009-09-20 07:50 robe * 2009-09-20 07:45 robe * Make slot for geography data type and start filling in details 2009-09-18 14:53 pramsey * Clean up tests so they pass quietly. (#249) 2009-09-18 14:10 robe * #250: Fix to get mingw to compile using conditional -lregex Had to change configure.ac too so -lregex is not put in if its built-in. 2009-09-17 15:44 robe * Revise garden test to include testing for creating geography types. Still needs a bit more work. Also discovered more crashers to put in bug list (not all related to geography) 2009-09-17 05:57 pramsey * Fix serialization problem with lwgeoms that have bboxes. 2009-09-17 05:33 pramsey * Clean up gbox serialization a little 2009-09-17 02:33 pramsey * Add lwgeom_is_empty() test 2009-09-17 00:01 pramsey * Work on tracking down bug in casting geometry->geography 2009-09-16 22:43 pramsey * Fix some test cases crossing the date line 2009-09-16 21:09 pramsey * Add gbox string constructor for testing purposes 2009-09-16 20:19 pramsey * More tests pass 2009-09-16 18:54 pramsey * Change back to less intensive cartesian clairaut 2009-09-16 18:50 pramsey * Fix errors in calculating geocentric bounds. Early test cases now pass! 2009-09-15 21:21 pramsey * Hook geocentric calculation into gbox routines, start testing 2009-09-15 19:50 pramsey * Geocentric bounding box roughed in and compiles. 2009-09-14 20:30 pramsey * Start the geodetic machinery. Add an internal API header for eventual API rationalisation 2009-09-14 18:33 pramsey * Crib index penalty tweak from pgsphere. 2009-09-14 18:15 pramsey * Add FP_EQUALS and bracket arguments for a little extra safety 2009-09-14 17:01 kneufeld * fix for POPULATE_GEOMETRY_COLUMNS - remove hard-coded "public" schema references. 2009-09-14 10:54 mcayland * Merge Paul's geodetic (geography) branch into trunk, as per discussions on postgis-devel. Most of the merge was automatic (albeit quite slow), with a few manual touch-ups where the merge algorithm couldn't handle this automatically. "make check" runs and passes, so I hope I haven't managed to break too much ;) 2009-09-12 04:01 robe * formatting cleanup 2009-09-12 03:43 robe * Add more line crossings. change tab to 4 spaces 2009-09-12 03:12 robe * define new styles mediumline and use those 2009-09-11 21:24 robe * add new st_linecrossing graphic, experiment with new style, put in informal table 2009-09-11 12:40 robe * incomplete finish later 2009-09-11 12:26 robe * make arrow and start separate to see if it shows better 2009-09-11 06:04 robe * revise example so scales well on 200 x 200 grid 2009-09-11 03:19 kneufeld * added a few comments to aid in image generation. 2009-09-10 06:34 robe * round digits 2009-09-10 06:19 robe * 2009-09-10 05:56 robe * try geometry collection instead 2009-09-10 05:54 robe * 2009-09-10 05:39 robe * typo in makefile 2009-09-10 05:27 robe * first attempt at figure for st_linecrossingdirection. Also query correction. 2009-09-10 04:10 robe * figure for st_line_substring 2009-09-10 04:03 robe * figure of st_line_interpolate_point 2009-09-08 06:09 robe * better fit example 2009-09-08 05:28 robe * typos 2009-09-08 05:24 robe * forgot wkt 2009-09-08 05:24 robe * figure for minimum bounding circle 2009-09-05 17:31 robe * Some wording changes and addition of figure for st_difference 2009-09-05 17:11 robe * formatting change 2009-09-05 16:55 robe * add figures for st_symdifference and slight update on st_convexhull 2009-09-04 18:43 kneufeld * added images as a requirement to the chunked-html target 2009-09-04 18:24 kneufeld * made the 'images' a requirement for pdf generation changed the background of the generated images to white instead of being transparent. 2009-09-01 18:57 robe * minor formatting 2009-09-01 18:34 robe * better convex hull example 2009-08-28 19:10 robe * 2009-08-28 18:58 robe * better visual convex hull 2009-08-28 18:38 robe * Put in image of ST_ConvexHull 2009-08-28 17:41 robe * put in alpha order 2009-08-28 17:32 robe * get rid of extra space 2009-08-28 17:23 robe * Make gaping hole more gaping, make code table 1 column instead of 2 2009-08-28 16:44 robe * improve on st_buildarea code formatting 2009-08-28 15:37 kneufeld * Changing MULTIPOLYGON into several POLYGONs so the image generating WKT parser doesn't fail. 2009-08-28 15:16 kneufeld * added a small How To section, referencing the wiki on how to generate images used in the documentation. 2009-08-28 12:03 robe * Add pictures for ST_BuildArea examples 2009-08-28 11:34 robe * Commit jlivni documentation addition and update with minor comment for PostgreSQL 8.4 users and notice about obsolete settings. Also put in hyperlinks back to the current interactive version of PostgreSQL manual for each part. 2009-08-23 02:20 robe * change lwpostgis to postgis and example to show 1.5.0SVN 2009-08-17 13:22 pramsey * Initialize counter to ensure later test works (#239) 2009-08-17 13:19 pramsey * Add comment and clearer information to fix for #239 2009-08-17 11:37 robe * revert order of availability. Revise xsl to pick up availabilities embedded in note tag 2009-08-17 11:29 robe * debugging why not showing in new section 2009-08-17 02:59 pramsey * Fix for handling of empty geometrycollection in asssvg (#239) 2009-08-16 15:03 robe * update svg availability note 2009-08-16 14:49 robe * Correct ST_AsSVG command to reflect introduction of L command 2009-08-16 05:34 robe * add null and empty geometry collection to garden variety geometry list 2009-08-16 05:29 robe * cast null to geometry 2009-08-16 05:09 robe * Version of garden test to allow selecting a subset of functions to test. 2009-08-16 04:41 robe * update ST_buffer (include buffer style in refpuprose so shows in postgresql function descrip), update refpurpose of hausdorf and include useful links for more details 2009-08-13 00:37 mleslie * Removing accidental commit from r4366. 2009-08-11 16:38 strk * Add ChangeLog.svn rule, and auxiliary authors file 2009-08-07 03:38 mleslie * Fix for ticket #234 2009-08-05 18:09 pramsey * Remove printfs from code. 2009-08-01 18:33 robe * update ST_Line_Locate ... with example of closest point. Asked way too many times on postgis news groups 2009-07-30 16:03 mcayland * Remove quotes from PATH in regression Makefile, as it seems that the last MingW hack doesn't need this any more. 2009-07-18 20:01 mcayland * Fix for Windows combining stdout/stderr when executing the $(shell) command. 2009-07-18 19:01 mcayland * Apply fix to allow regression tests to run on MingW by fixing PATH and removing trailing CR/LFs on some outputs. 2009-07-18 18:45 mcayland * Fix regression regex listings so that the newer "LINE n:" lines and lines containing just a position indicator (^) introduced in PostgreSQL 8.4 are removed from the regression output. 2009-07-16 21:32 mcayland * Move SERIALIZED_FORM to lwgeom_pg.h from liblwgeom.h since it references a PostgreSQL-only structure. Per report from Nicklas Aven. 2009-07-16 21:26 mcayland * Commit patch for missing lw_asprintf() from #222. 2009-07-13 17:27 pramsey * MinGW fix for loader (#222), Mark Cave-Ayland 2009-07-13 16:57 pramsey * ignore copied version of postgis.sql 2009-07-13 16:57 pramsey * ignore generated images 2009-07-08 22:43 robe * Put in availability and GEOS for Hausdorff distance 2009-07-08 22:39 pramsey * match header format 2009-07-08 16:27 strk * Update instructions for testing (and moved that step *before* install - finally!) 2009-07-08 16:03 strk * Pre-install check rule by Paul cleaned up to allow top-level run and correct dependencies. See issue #219. 2009-07-08 15:28 pramsey * Remove images from clean target 2009-07-08 15:16 pramsey * Remove CUnit dependency 2009-07-08 15:15 pramsey * clean doc images as part of clean 2009-07-08 15:09 pramsey * Fix itglish. 2009-07-08 04:59 mcayland * Fix #112: ST_CurveToLine sometimes crashes server. While the circle segmentiser detected colinear circle points, it didn't check for the NULL pointer returned in this case. Since we are converting to a line, the current behaviour is to simply append the circle points as s tandard line points. 2009-07-08 04:48 mcayland * Fix #183: ST_LineToCurve gives getPoint4d_p offset error. This was due to the lookahead in the curve segmentising code going off the end of the point array. 2009-07-08 00:20 pramsey * Change error message to be more relevant 2009-07-07 15:44 strk * It's "synonym", not "synonim"... 2009-07-07 15:03 strk * For buffer parameters: accept 'butt' as a synonim for 'flat', 'miter' for 'mitre' and 'miter_limit' for 'mitre_limit'. 2009-07-07 13:18 strk * Fix join style images to match calls 2009-07-07 10:33 mcayland * Fix compile problems on non-GNU systems by using va_copy as an alias onto the real version. Per report from Stefano Bonnin. 2009-07-06 16:07 strk * Don't use strtok_r, to help with MingW builds. 2009-07-06 07:37 robe * forgot to save last change 2009-07-06 07:37 robe * slight correction 2009-07-06 07:33 robe * Update style on commenting required to be picked up by doxygen 2009-07-05 21:41 mcayland * Alter loader Makefile to include PGXS so that we can extract DESTDIR to use for the location for shp2pgsql/pgsql2shp. Per report from Devrim GÜNDÜZ. 2009-07-03 07:21 robe * update st_pointn to note it supports circular strings and curves 2009-07-03 04:57 kneufeld * removed the images used in the documentation since these are now generated automatically using ImageMagick. 2009-07-03 04:56 kneufeld * updated the doc's README file made "images" a target to "all" so the images get automatically generated when calling make with no parameters. 2009-07-02 16:57 pramsey * Add SQL/MM item 2009-07-02 16:31 pramsey * Build doc images as part of distribution build. 2009-07-02 16:29 pramsey * add generator to ignore 2009-07-02 16:00 pramsey * more notes on requirements 2009-07-02 08:31 mleslie * Making the changes from r4244 and r4245 onto trunk, addressing ticket 212. 2009-07-01 16:56 pramsey * Bring this up to date. 2009-07-01 15:42 pramsey * Fix bad memory access in aggregates on nulls (#210), Mark Cave-Ayland. 2009-07-01 12:30 robe * arg should be text not string for st_buffer 2009-07-01 11:53 robe * amend documentation on curved support to include new compound curve in curve polygon support. 2009-06-30 07:46 mleslie * Enabling the compound curve parsing for segmentisation; reported in ticket 213 2009-06-30 07:35 mleslie * First swing at ticket 212. 2009-06-26 13:43 robe * slight correction some functions are not new but enhanced 2009-06-26 13:33 robe * change ST_Buffer argname from params to buffer_style_params so torture test can eventually properly exercise it and not feed it garbage params 2009-06-26 13:30 robe * update ST_Buffer so appears in new in PostGIS 1.5 section 2009-06-26 13:22 robe * try to fix hudson build error 2009-06-26 12:43 robe * Update special index to include a what is new in 1.5 section 2009-06-26 09:35 mcayland * Unbreak the PostGIS universe for people who aren't using GEOS SVN (will be 3.2). 2009-06-25 12:01 strk * Put queries right below the diagram showing them 2009-06-25 12:00 strk * Make quad_segs images style consistent with others; add original point 2009-06-25 11:19 strk * Add more styled buffer example images and update reference manual to include them 2009-06-25 10:57 strk * Use thin link style for source linestring 2009-06-25 08:16 strk * Add examples of different encdap styles 2009-06-25 07:34 strk * Add item for parametrized buffers 2009-06-25 03:32 robe * More cleanup of code comments so function descriptions are picked up by doxygen 2009-06-25 03:03 robe * fix commenting style so function descriptions are picked up by doxygen 2009-06-24 22:09 pramsey * Add news item for #206 2009-06-24 22:08 pramsey * Add support for hausdorff distance calculations. Requires GEOS 3.2+. (#209) From Vincent Picavet. If you are working off of GEOS trunk, svn up, compile and install! 2009-06-24 17:10 strk * Add uninstall lines for new buffer signatures 2009-06-24 13:32 strk * Add tests for parametrized buffer 2009-06-24 13:04 strk * Document third ST_Buffer signature (the one taking parameters as string). 2009-06-24 11:18 mcayland * Remove validation from shapefile to WKT/WKB conversion to retain same behaviour as 1.3. Final resolution for #198. 2009-06-24 10:44 mcayland * Fix accidental typo; module name hardcoded in the .sql.in.c file rather than being set to MODULE_PATHNAME. Fixes #208. 2009-06-24 10:34 strk * Use $$ quoting. See ticket #207. 2009-06-23 22:40 strk * Add _ST_Buffer(geom, distance, params); refactor other versions to all proxy to the new one. 2009-06-23 20:57 pramsey * Bump up to 1.5 in trunk 2009-06-23 16:46 strk * Fix dangerous use of message string as printf-like format. 2009-06-23 16:38 strk * Yet another buffer auto-cast test. With a different quadSegs this time to be really sure the argument is being used. 2009-06-23 16:36 strk * Add test for third argument to buffer() being a string (based on auto-cast) 2009-06-22 03:12 robe * Put in minimal GEOS requirement for ST_Covers and ST_CoveredBy. Its not necessary for 1.4 really but oh well. 2009-06-20 22:13 strk * Gracefully handle typed empty GEOS geometries. 2009-06-20 21:26 strk * Add tests for area() called against empty geometries 2009-06-20 21:25 strk * Handle empty polygon rings 2009-06-19 17:12 robe * get rid of ref_geom so doesn't break agg checks 2009-06-19 15:13 robe * test not handling aggregates right 2009-06-19 14:18 robe * typo in docs -- 2009-06-19 12:20 robe * fix type and add --with-gui description for building loader gui 2009-06-16 15:53 robe * Forgot ST_MinimumBoundingCircle and credit Bruce Rindahl 2009-06-15 17:48 pramsey * More updates 2009-06-15 17:42 pramsey * Update doc instructions. 2009-06-12 15:30 robe * replace _VOLATILE_STRICT with VOLATILE STRICT 2009-06-12 15:14 robe * Change _VOLATILE to VOLATILE 2009-06-11 16:44 pramsey * astyle --style=ansi --indent=tab (#133) 2009-06-11 16:31 pramsey * remove file that should never have been added 2009-06-11 15:52 pramsey * Clean up old compatibility code. (#196) 2009-06-11 13:28 mcayland * Further fix for #156, and also #167 it seems. Looks like I forgot to apply the fix to the WKB routines aswell. 2009-06-10 14:51 robe * correct example 2009-06-10 01:26 robe * Add David Techer, new doco enhancements, new populate_geometry_columns 2009-06-10 01:18 robe * Add Jean David Techer to list of contributors 2009-06-09 23:54 pramsey * Update the hard upgrade script to handle 1.4 transition. (#144) 2009-06-09 23:27 pramsey * Closes (#134) 2009-06-09 22:51 pramsey * More work on 1.4 upgrade script. 2009-06-09 22:14 pramsey * More fixes to upgrade process. 2009-06-08 23:21 pramsey * Work on upgrade script. 2009-06-08 22:33 pramsey * Turn "CREATE OR REPLACE FUNCTION" into "CREATEFUNCTION" for preprocessing magic. 2009-06-08 22:30 pramsey * remove syntax error 2009-06-08 19:40 pramsey * Updated to EPSG 7.1 version (#191) 2009-06-08 17:35 robe * #190: populate_geometry_columns gives nonstandard use of \' in a string literal in 8.4 2009-06-06 14:09 mcayland * Add a new uninstall_postgis.sql file to the repository that will enable the complete removal of PostGIS from a database. 2009-06-04 15:29 robe * updated to make 8.2 minimum for Linux as well (its too confusing to have minimum 8.2 for windows and not for Linux as well) 2009-06-04 15:20 robe * change ReadME and installation to change minimum version from 8.1 to 8.2 (not many people are running 8.1 and besides Paul already put in a DROP AGG IF EXISTS in upgrade script -- so binds us to 8.2+ already. Besides I don't think we should be supporting more than 2 versions behind of latest PostgreSQL release in our trunk. Too much maintenance. Correct ReadME bug tracker link 2009-06-04 14:17 pramsey * Fix for #192. 2009-06-03 23:56 pramsey * Fix for issue #189, includes implicit requirement for 8.2+ in DROP AGGREGATE 2009-06-03 23:07 pramsey * Fix for issue #186 2009-06-03 22:46 pramsey * remove warnings from autoconf process 2009-05-29 18:10 kneufeld * small typo in Populate_Geometry_Columns doc 2009-05-27 17:14 kneufeld * performed an overhaul of the installation guide ... hopefully it's easier to follow. 2009-05-26 18:35 kneufeld * updated the comments-install make target 2009-05-26 18:28 kneufeld * added version numbers to the requirements section in the installation doc. 2009-05-26 18:27 kneufeld * added dblatex and convert to the status lines at the end of configure 2009-05-26 18:10 kneufeld * added postgis_aggs_mm.xml to the 'make clean' target 2009-05-26 18:00 kneufeld * added postgis_comments.sql as a target to the main makefile Since we don't want to add xsltproc as a dependency, this will remain separate for now: make comments make comments-install (the file should be removed by 'make uninstall') 2009-05-26 17:24 robe * make example fit the diagram in text 2009-05-26 17:08 robe * Make lame circle more lame 2009-05-26 16:47 robe * put in images for buffer, fix within example image and example query 2009-05-26 16:26 robe * for consistency make example be same as what is used to generate the image. 2009-05-26 16:24 robe * bad image try again 2009-05-26 15:05 robe * Add st_within example to makefile and translate example so in viewable region. 2009-05-25 20:26 kneufeld * added a status line to the main makefile that indicates if PostGIS was built successfully. 2009-05-24 07:52 robe * update to include behavior for 3D and also note this seems to go beyond what the spec defines. 2009-05-22 23:22 kneufeld * use a docbook variable instead 2009-05-22 23:19 kneufeld * didn't need the c preprocessor after all 2009-05-22 22:14 kneufeld * Added a Short Version section. Updated requirements. 2009-05-22 22:07 kneufeld * formatted installation.xml in preparation for editing 2009-05-22 21:32 kneufeld * added the xmlformatter conf file for pretty printing the documentation's xml files This will allow us to separate code changes from style changes in the docs. 2009-05-20 11:16 robe * Testing out Kevin's auto image generator hopefully I didn't break it. 2009-05-20 10:54 robe * Correct ST_GeometryN example -- sign was wrong. Also embellish by showing a multicurve and flag as working for multicurves 2009-05-19 20:49 kneufeld * added image examples to ST_Contains 2009-05-19 03:44 robe * Example exploding a compoundcurve, also reference to ST_GeometryN since they serve similar purposes 2009-05-14 23:42 kneufeld * added styles to the generated documentation images added ImageMagick as a dependency 2009-05-09 12:53 mcayland * Fix #178: ST_XMax() and ST_YMax() return incorrect values. This was caused by the fact that the min/max routines did not check whether the result for each axis was actually the min or max, but instead simply returned the structure value. Hence if an inverted coordinate system were being used, the wrong value would be returned. 2009-05-09 12:34 mcayland * Remove a double-free bug caused if the unparser finds an invalid geometry (fixes #168) 2009-05-09 11:46 mcayland * Correct erroneus formatting which was causing two comments to be nested and hence generating a compiler warning. 2009-05-06 23:32 kneufeld * removed horrible dos carriage returns - convert to unix 2009-05-06 23:20 kneufeld * Added code that will automatically generate the spatial images used in the documentation from WKT input. 2009-05-06 18:11 robe * typo 2009-05-06 18:04 robe * update with 1.3.6 items 2009-05-05 19:40 pramsey * Add 900913 to allow web mappers a smoother ride. 2009-05-05 04:44 robe * doxygen friendly comments 2009-05-05 04:29 robe * doxygen friendly comments 2009-05-04 18:00 robe * more doxygen comment cleanup 2009-05-03 04:36 robe * slight mod 2009-05-03 04:32 robe * make doco descriptions doxygen/javadoc friendly 2009-05-03 03:58 robe * make function doc doxygen friendly 2009-05-03 03:50 robe * make function descriptor doxygen friendly 2009-05-03 03:33 robe * enable alphabetical index 2009-05-03 03:16 robe * change commenting style to javadoc style 2009-05-03 03:03 robe * enable javadoc autobrief 2009-05-02 09:40 robe * make function descriptions doxygen friendly 2009-05-02 07:13 robe * make function descriptions doxygen friendly 2009-05-02 06:27 robe * Experimenting with Doxygen hyperlinking tags 2009-05-01 22:47 robe * More experimentation with doxygen commenting styles 2009-05-01 04:26 robe * More auto doc friendlying 2009-05-01 04:24 robe * typo 2009-05-01 04:24 robe * experiment with making our inline comments more doxygen friendly 2009-04-30 22:26 kneufeld * updated several Doxygen parameters 2009-04-30 21:38 kneufeld * removed full path names from config file 2009-04-30 20:19 kneufeld * add make target to build Doxygen 2009-04-30 19:41 kneufeld * added a Doxygen configuration file 2009-04-29 19:22 kneufeld * dropping a table that's not there causes an ERROR in the logs - 8.1 does not support DROP TABLE IF EXISTS, so first test if the table is there, then drop it. 2009-04-28 19:13 colivier * Add a new option for ST_AsGML related to axis order, and lat lon inversion in GML 3.1.1, cf #161. Add unit test on this new option bit field. Update documentation. Fix also wrong option value in ST_AsGML for CRS, and outdated example output (still for ST_AsGML). 2009-04-28 17:04 kneufeld * - removed a few compile errors from the javadoc build - renamed jar so it follows the name-version convention 2009-04-27 22:07 robe * change error about unknown spatial ref to a warning. 2009-04-27 19:46 kneufeld * test commit 2009-04-27 19:24 kneufeld * test commit 2009-04-27 19:07 kneufeld * Test commit to test autobuild 2009-04-27 16:09 robe * revise to better guarantee a deteriministic sort so can diff compare between 1.3.5, 1.3.6, 1.4 (still needs work). Also exclude curved tests and functions not supported in 1.3.5 since it curve crashes 1.3.5 thus making it not comparable. 2009-04-26 05:37 kneufeld * small typo fix 2009-04-24 19:13 pramsey * add feature mangling task 2009-04-23 14:36 robe * exclude curved geometries from 1.3.5 testing 2009-04-23 12:12 robe * Add ST_BdMPolyFromText to list not to test against 1.3.5 (crashes 1.3.5 with curves though fine in 1.3.6) 2009-04-22 18:33 robe * revise to include a version variable and get rid of limit (think its causing different tests to be run non-consistently depending on ordering of postgresql so hard to compare outputs) 2009-04-21 17:45 pramsey * More info about XSL in final configure output 2009-04-17 13:59 robe * add ST_MinimumBoundingCircle to 1.3 exclude 2009-04-16 07:31 robe * Update installation to have link to Windows Compilation guide Nicklas put together. 2009-04-16 05:54 robe * ADd more curved geometry support functions to list and give curved geometry special index a pretty anchor. 2009-04-15 17:18 pramsey * wee reformatting 2009-04-15 17:15 pramsey * remove tabs 2009-04-15 17:09 pramsey * add link to trac for 1.4 2009-04-15 01:22 robe * add link to st_relate 2009-04-15 01:11 robe * amend ST_ContainsProperly to summarize its speed advantages 2009-04-14 14:25 mcayland * Try and fix shp2pgsql-core for bug #124. Need to change sprintf() to pgis_exec() within the loader. 2009-04-14 06:47 robe * add containsproperly 2009-04-14 06:42 robe * I think the year is 2009 and we are in april now 2009-04-12 12:18 mcayland * Same as r3994 but for the second copy of shp2pgsql. 2009-04-12 11:16 mcayland * Fix #104 'shp2pgsql is using deprecated PostgreSQL escape syntax'. Remember that not everyone's installation has "standard_conforming_strings" enabled by default. 2009-04-12 10:56 mcayland * Fix bug #148 'envelope() doesn't support new box3d_extent type'. Looks like we do need to add casts for box3d_extent to all of box2dfloaat, box3d and geometry after all. 2009-04-12 05:25 robe * missed some 2009-04-12 05:14 robe * Add ST_ContainsProperly to exclude for 1.3 testing. 2009-04-12 04:10 robe * Add new function ST_ContainsProperly and provide examples. Also update ST_Contains to better explain the subtleties of the definition and example to demonstrate the difference between contains and containsproperly 2009-04-10 08:27 mcayland * Make good on my promise from bug #123 to remove the E'...' escaping from shp2pgsql and revert to standard SQL escaping. Also rename protect_quote_string() and make_good_string() to escape_insert_string() and escape_copy_string() respectively so the names reflect what they actually do. 2009-04-06 17:31 pramsey * Fix mis-spelling in Eduin Carrillo's name 2009-04-05 18:06 pramsey * keywords 2009-04-05 18:05 robe * Add Nicklas Avén to contributors list 2009-04-05 16:48 pramsey * Fix for collection vs collection distance behavior. Per Nicklas Avén. GBT #146 2009-03-29 08:12 mcayland * Fix for previous commit; move the locations of the CASTs so that they are after the definitions. Thanks Olivier! 2009-03-29 00:34 mcayland * Add additional casts for box3d_extent to box3d/box2d so that other PostGIS functions can use the output of ST_Extent. Per report from Olivier Courtin related to GBT#93. 2009-03-24 19:05 colivier * suppress compilation warning on non initialized variable 2009-03-23 22:45 pramsey * Ignore autotools artefacts. 2009-03-23 22:44 pramsey * Once more unto the breach! autotools w/ mloskot autogen.sh from GBT#142 2009-03-23 17:18 pramsey * Back to the future. 2009-03-22 07:50 robe * expansion of example and description 2009-03-22 07:46 robe * Create new exception section and move over the Has,Drop, Add BBOX family per MCA request. 2009-03-22 07:08 pramsey * Can't get enough punishment: write out results of configure. 2009-03-22 06:43 pramsey * Back for more punishment: if we can checkin config.sub and config.guess, we can check in ltmain.sh. Autotools, I despise thee. 2009-03-22 06:30 pramsey * OK, didn't like that. libtoolize alters config.guess and config.sub, but removing them breaks build. Run libtoolize by hand and add the resultants to svn? 2009-03-22 06:28 pramsey * config.guess back? 2009-03-22 03:34 pramsey * config.sub back in? 2009-03-22 03:23 pramsey * Break build per mloskot. Remember to run ./autogen.sh and hopefully you have libtoolize! 2009-03-22 02:26 robe * typo 2009-03-22 02:23 robe * not dealing correctly with arguments that are geometry arrays where there is only one geometry in the arglist 2009-03-21 19:14 colivier * Fix static buffer size to add precision spaces. Cf #119 2009-03-20 18:43 pramsey * Update release notes more 2009-03-20 16:48 kneufeld * updated the operator notes in reference.xml to reflect the fact that they do indeed use indexes. 2009-03-20 14:55 robe * Add ST_MakeLine array proto. Provide example use. Flag that ST_MAkeLine was enhanced in 1.4 2009-03-20 14:40 robe * Fill in missing ST_Collect(geomarray) proto. Provide examples for using ST_Union(geomarray), ST_Collect(geomarray) 2009-03-20 13:39 colivier * Fix GML multi size computation. Cf issue #141 2009-03-20 05:43 kneufeld * a small typo patch from mloskot, renaming a few "geometry_column" to "geometry_columns" 2009-03-20 05:32 kneufeld * renamed reference.xml to reference_old.xml renamed reference_new.xml to reference.xml updated configure.ac, doc/Makefile.in, and doc/postgis.xml accordingly. 2009-03-19 17:58 pramsey * Revert, now I get a warning in OS/X. Solaris will have to suck it up. 2009-03-19 17:50 pramsey * Make autogen.sh a little more tolerant of missing / re-named autotools. 2009-03-19 17:28 kneufeld * updated ST_Relate docs - changed 3rd parameter to be more clear 2009-03-19 17:03 pramsey * Remove warning in Solaris. 2009-03-19 16:58 pramsey * Remove warning in Solaris. 2009-03-19 16:52 pramsey * Remove one last 'const' warning. 2009-03-19 13:27 colivier * Few minor improve/change on memory size to allocate 2009-03-19 11:52 mcayland * More lwgeom_geos.c fixes to remove compilation warnings, but this time for compiling with GEOS >= 3.1. 2009-03-19 06:05 pramsey * Oops, we don't use the literal output of autoheader. 2009-03-19 05:55 pramsey * Remove prepared geometry compilation warning. 2009-03-19 05:54 pramsey * Add ieeefp.h for Solaris. 2009-03-19 05:53 pramsey * Add testing for ieeefp.h to autoconf 2009-03-19 00:48 pramsey * Final fix to remove cpp requirement 2009-03-19 00:38 pramsey * Remove preproc step for sql-mm curve regression. 2009-03-19 00:37 pramsey * Remove USE_JTS and cpp preproc from sql-mm regression 2009-03-18 23:42 pramsey * Add lidar item 2009-03-16 23:06 mcayland * More cleanup work based upon Mateusz's MSVC patches; remove references to unistd.h and sys/param.h since they are no longer required for determining endian-ness. 2009-03-13 13:11 robe * switch order 2009-03-13 13:09 robe * get rid of sT_PolyFromWKB reference. Will readd those stupid ones left in reference.xml later 2009-03-13 13:08 robe * more spots 2009-03-13 13:05 robe * missed a spot 2009-03-13 12:53 robe * remove using_postgis and reference and add using_postgis_dataman, using_postgis_app 2009-03-13 12:11 robe * Break using_postgis into 2 sections, remover reference.xml from doc make 2009-03-12 23:20 robe * #HISTORY #GBT 121: update tiger_geocoder to run in PostgreSQL 8.3 - apply patch from cdwinslow 2009-03-11 05:31 kneufeld * updated SQL/MM specs in ST_PointFromWKB 2009-03-11 05:13 kneufeld * moved over ST_LineFromWKB 2009-03-11 05:11 kneufeld * added missing linkend 2009-03-11 05:09 kneufeld * updated doc descriptions and linkends. 2009-03-11 04:56 kneufeld * moved over ST_PointFromWKB 2009-03-11 04:35 kneufeld * moved over ST_GeomFromWKB 2009-03-10 21:29 mcayland * More MSVC fixes from Mateusz related to ISO C++ vs. C99 variable initialisation. 2009-03-10 21:05 colivier * updated SVG unit to reduce to max 2 decimal digits 2009-03-10 21:03 pramsey * MSVC line 2009-03-10 20:49 colivier * Add SVG unit test file 2009-03-10 20:42 pramsey * Add 1.3.5 release notes into trunk docs 2009-03-10 20:37 pramsey * First cut of 1.4 release notes. 2009-03-10 20:25 mcayland * Fix for GBT#132: Make check should run CUnit. This is to aid developers as we move the majority of the testing framework over to CUnit. 2009-03-10 20:15 mcayland * Commit Mateusz's patch to move the postgres.h #include to the top of the file in order to aid the MSVC build. 2009-03-10 20:15 colivier * update GML unit test according to AsGML option related to CRS output option 2009-03-10 19:37 mcayland * Remove compiler warning from commit r3821. 2009-03-10 19:30 colivier * Update unit test upon previous GeoJson CRS change 2009-03-10 19:29 mcayland * Update PostGIS trunk so that the minimum required version of GEOS is 3.0.0. This allows us to finally remove all remaining compilation warnings since we can adjust the casts to make correct use of the GEOS 3.0.0 header types. 2009-03-10 18:20 colivier * Fix GeoJson CRS output format (1.0 spec). Add OGC long CRS format (Cf RFC 5165) as an option. On AsGeoJson it change option order from 1.3.X between Bbox and CRS. On AsGML a new option parameter is added 2009-03-10 17:24 mcayland * Some documentation updates; change the instructions for decompressing the tarballs for PROJ and GEOS so that they work for our Solaris friends (as per the instructions for the main PostGIS tarball). Also move version entities for GEOS and PROJ into postgis.xml, so that as newer versions of PROJ/GEOS are released, we only need to update the version number in one location for the change to be reflected throughout the installation documentation. 2009-03-10 16:26 mcayland * Augment comment related to Paul's fix for GBT#130 as I'm bound to forget why we decided to do this at a later date... 2009-03-10 16:24 colivier * Add circstring release and LWGEOM conversion entry 2009-03-10 16:18 mcayland * Remove some GCC-isms from the unparser related to setting array sizes at run-time rather than compile time. Per report from Mateusz Loskot. 2009-03-10 15:54 mcayland * Fix GBT#126: Don't include private PROJ.4 header projects.h. It appears that from its inception, PostGIS has inadvertently used the PROJ.4 internal projects.h header file rather than the correct proj_api.h header file. This patch flips over to the new header file and changes everything over to use the new external structures/APIS. 2009-03-10 15:12 pramsey * Fix for GBT #130, remove bdpoly regression failure. 2009-03-10 15:06 mcayland * Fix for GBT#89: transform() grid-shift 2nd chance logic defective. Remove the 2nd chance logic completely and allow the user to configure the behaviour using the standard PROJ.4 +nadgrids parameter. I've added a section to the ST_Transform() section of the manual which gives an example of how you can do this. 2009-03-10 14:59 colivier * Add SVG L Command in absolute path according to BNF SVG Path. Add some forgotten geometry release. 2009-03-10 00:29 mleslie * Moving parser changes from spike/mleslie/parser to allow the proper nesting of compound curves within curve polygons and the validation of compound curve continuity. This also resolves GBT#124. 2009-03-09 22:01 pramsey * Don't segmentize geometry if input doesn't pass hasarc 2009-03-09 21:15 robe * Put ST_CurveToLine back in script. Seems to not crash anymore with Paul's changes to GBT: 112 2009-03-09 18:40 pramsey * Fix for GBT#96. 2009-03-09 17:19 mcayland * Fix the OSGB 27700 SRID definition in spatial_ref_sys.sql since it is missing a datum parameter. We can't backpatch this since it is only available in newer versions of PROJ, and we don't have any PROJ version detection capability in 1.3 branch. 2009-03-09 16:20 mcayland * Remove compile warnings from lwgeom_dump.c related to the removal of TupleDescGetSlot (we don't need to set the deprecated fields in FuncCallContext if we are using BuildTupleFromCStrings). 2009-03-09 15:34 pramsey * More camel-case changes. 2009-03-09 14:51 colivier * Refactored the whole assvg export function in the same way than asgeojson. Fix #119 issue on big geometrycollection geometry. Keep the same SVG output than before 2009-03-09 14:36 pramsey * Remove some camelCase function signatures from liblwgeom 2009-03-08 22:33 mcayland * Fix for GBT#93: ST_Extent() and ST_Estimated_Extent() return BOX2DFLOAT4s. This is currently done using a horrible hack for backwards compatibility which introduces a new type just for ST_Extent(). See GBT email to postgis-devel and code comments for more detail. 2009-03-08 21:41 pramsey * Fix goof in box2d computation. 2009-03-08 21:15 pramsey * Fix for GBT#112 2009-03-08 17:00 mcayland * Add some explanation comments to lwgeom_accum.c explaining why we need to implement our own set of geometry aggregate functions. 2009-03-08 16:36 mcayland * Alter the in-built casts between the internal PostgreSQL BOX type and the PostGIS geometry/BOX3D types so that they do not go through an intermediate BOX2DFLOAT4 first. This prevents the float4 rounding errors appearing in the numbers when invoking the casts. 2009-03-08 15:37 pramsey * Fix for GBT #116, EMPTY hex polygon no longer causes crash. 2009-03-08 14:36 mcayland * Fix GBT#122: ST_SnapToGrid gives 13 when fed circular string. Alter the error message so that it correctly displays the type rather than just it's internal number. 2009-03-06 14:15 robe * missing svn tags and copyright info 2009-03-03 18:01 robe * Flag ST_GeoHash as curved support friendly, put in pretty anchors for special function sections 2009-03-03 18:00 pramsey * Fix tests to match current geohash signatures (lon/lat) and precisions (odd and even) 2009-02-27 18:09 robe * Get rid of additional calls to TupleDescGetSlot(tupdesc) in dump and dumprings and replace deprecated use of TupleDescGetSlot with 8.1+ preferred BlessTupleDesc 2009-02-23 15:19 strk * Fix parse_hex to support lower-case A-F too (issue 120) 2009-02-23 13:47 robe * change to move postgis_comments.sql to root 2009-02-19 21:12 pramsey * Add variable decls to trunk :) 2009-02-19 20:59 pramsey * Add EOF marker, per GBT#105 2009-02-19 09:42 mcayland * Update trunk so that it will compile against PostgreSQL 8.4. Based upon Talha Rizwan's original patch, with a small tweak from me. 2009-02-17 18:26 robe * change to use tab separator instead 2009-02-17 03:56 robe * fix typo 2009-02-17 03:02 robe * 2009-02-17 02:59 robe * Make new - 1 section with 2 subsections. Change ST_AsGeoJSON availability tag to be consistent with others 2009-02-17 02:55 robe * Section new functions in 1.3 2009-02-16 22:18 robe * Try again to get postgis_comments.sql to generate 2009-02-13 19:56 robe * amend st_union description to include new proto and performance enhancements. Add space before availability in xsl parser what is new section 2009-02-13 19:23 robe * Add special section listing new functions in this release. Get rid of note tag around ST_GeoHash availability so consistent with other availability text 2009-02-13 06:58 robe * 2009-02-12 18:32 robe * more work on comments generation 2009-02-12 17:39 robe * Put in logic to output postgis_comments.sql 2009-02-11 21:48 pramsey * Bind ST_GeoHash into SQL. 2009-02-11 18:28 pramsey * Change references from ./lwgeom to ./postgis 2009-02-11 18:22 pramsey * Change the name of the main source directory. This is going to break the build for a little while until I fix all the references, but I want to do it atomically to ensure version history is preserved. 2009-02-11 02:11 pramsey * GeoHash implementation first cut. 2009-02-10 21:20 pramsey * Solve iconv-on-Solaris (and hopefully many other platforms with system iconv in libc) problem in autoconf. 2009-02-10 20:10 pramsey * Demote new loader code from default build for now. 2009-02-10 20:06 pramsey * New restore script, much simpler, takes -Fc dump and writes back ASCII on stdout 2009-02-10 08:00 colivier * KML output: use decimal places rather than significant digit, trim trailing zeros, update documentation, update unit test 2009-02-10 07:54 colivier * GeoJson output: trim trailing zero, add forgotten free on subgemotry inspect. GML output: precision no more as a global one, decimal places rather than significant digits, trim trailing zero, add unit test, doc update with output example 2009-02-09 23:51 pramsey * Fix case sensitive in AGGREGATE reading. 2009-02-05 20:01 kneufeld * Updated ST_DumpRings description and example. 2009-02-04 18:13 kneufeld * Added example to ST_PointN 2009-02-04 13:54 robe * minor changes. Take ST_CurveToLine out so tests can complete until we fix. 2009-02-04 00:28 pramsey * Propset Author Id Keyword Revision on all files. 2009-02-04 00:23 pramsey * Formating 2009-02-03 20:51 pramsey * Fix boundary conditions with from==to hitting first/list vertex. 2009-02-03 19:09 mcayland * Fix GBT#109: Some operators not supported for Circular. In this case I haven't added the comparison code as I am not 100% sure on the semantics, but the error message should be much clearer to users now. 2009-02-03 17:49 robe * Add corrections from Bruce Rindahl 2009-02-03 17:30 robe * forgot some spaces 2009-02-03 16:10 robe * forgot availability info 2009-02-03 15:23 robe * update st_convexhull definition -- wasn't very clear 2009-02-03 15:20 robe * Document ST_MinimumBoundingCircle 2009-02-03 14:52 robe * #HISTORY: ST_MinimumBoundingCircle -- also change to support geometries with LINESTRING,POINT convex hulls 2009-02-03 14:21 robe * First draft of ST_MinimumBoundingCircle contributed by Bruce Rindahl. Changed to use named params and renamed function from mbc to ST_MinimumBoundingCircle. 2009-02-03 13:23 robe * put back linetocurve curvetoline tests now that issue 86 and 108 should have fixed 2009-02-03 07:20 pramsey * Use "extended string" format for escaping \ and ' in insert statements. 2009-02-03 04:36 mleslie * Adding an rfc for changing the validation approach when parsing WKT. 2009-02-03 01:59 pramsey * astyle this file 2009-02-03 01:04 pramsey * Comment datum slice pull. 2009-02-02 22:21 pramsey * formatting 2009-02-02 18:26 robe * Typo in docs confusing gardentester. Also change ST_Collect use to ST_Union so we are testing with valid polygons (reduces union intersection error messages) 2009-02-02 06:01 mleslie * Fix for Issue 108 and regress test. 2009-02-02 04:19 robe * Document ST_LocateBetweenElevations 2009-02-01 06:48 robe * Get rid of warnings -- no longer relevant for ST_LineCrossingDirection 2009-01-30 17:16 robe * revise to correctly fill in timestamp/date args 2009-01-30 14:03 robe * put in logic to test operators 2009-01-30 13:44 robe * Operator check in wrong segment of xpath 2009-01-28 23:42 pramsey * Change error message. 2009-01-28 23:34 pramsey * Handle null return from cascadedunion. 2009-01-28 01:02 pramsey * wrapping 2009-01-27 05:30 robe * missing meta properties 2009-01-25 15:52 robe * Document ST_Extent3D now that Paul has proclaimed it a public function 2009-01-24 20:49 pramsey * Small changes in createrelplace syntax, comments, function rename recommendation. 2009-01-23 22:05 kneufeld * small wording fix for DropGeometryColumn 2009-01-23 20:06 pramsey * Add function naming rfc 2009-01-22 23:58 pramsey * Flip all aggregate functions over to the new aggregation system. Remove catalog hacks in favour of wrapper type. Make the fast implementations the default and _old implementations the legacy. 2009-01-22 19:25 robe * Filter out Operators section from xsl transforms 2009-01-22 19:25 kneufeld * moved over the remaining operands from reference.xml to reference_new.xml in the documentation 2009-01-22 19:15 robe * Give operators section a pretty anchor and id so easy to bookmark and I can exclude from xsl scripts 2009-01-22 18:19 robe * Fix DBFReadDeleted logic -- should return 1 if record is deleted and 0 if it is not deleted 2009-01-22 18:02 kneufeld * moved over |>> from reference.xml to reference_new.xml in the documentation 2009-01-22 17:46 kneufeld * moved over <<, <<|, and >> from reference.xml to reference_new.xml in the documentation 2009-01-22 05:56 pramsey * Remove protection from ST_GeometryArray() aggregate. 2009-01-22 05:37 pramsey * More ignore fixes 2009-01-22 05:35 pramsey * Ignore postgis.sql.* 2009-01-22 05:32 pramsey * Alter pg_proc update to work with older PgSQLs too. 2009-01-22 01:39 pramsey * First stab at a back-port of the array_agg from 8.4. Our's isn't generic, and it's got it's own name, so it won't collide, ... needs testing on PgSQL < 8.3 still. 2009-01-22 01:16 kneufeld * moved over |&> from reference.xml to reference_new.xml in the documentation 2009-01-22 00:44 kneufeld * moved over &>| from reference.xml to reference_new.xml in the documentation 2009-01-22 00:16 kneufeld * moved over &> from reference.xml to reference_new.xml in the documentation 2009-01-21 23:26 kneufeld * moved over &&, &<, and = from reference.xml to reference_new.xml in the documentation 2009-01-21 23:19 pramsey * Add support for fast unions, with cascaded union. Currently for testing, in the ST_Union_Fast() agggregate. Requires GEOS SVN r2252 or higher. 2009-01-21 21:55 pramsey * Add rfc document. First one: alignment ideas. 2009-01-21 21:50 pramsey * Headers split in 8.4? 2009-01-20 18:43 pramsey * Put translation_stage into descriptive MACRO names 2009-01-20 18:28 pramsey * Add GTK macro. 2009-01-20 17:48 pramsey * Replace hand-built pkg-config routine w/ m4 from gtk source. 2009-01-20 07:36 pramsey * Compile your work much? 2009-01-20 07:13 pramsey * Protect the filename setting a little bit more in case it's NULL. 2009-01-20 00:50 kneufeld * Fixed accidental broken build in docs from Rev3536. 2009-01-19 21:33 pramsey * First revision of the GUI. Configure using --with-gui to enable full GUI build. New core/cli will build by default. Old utilities remain in place for now. 2009-01-16 17:58 robe * move ST_GeomCollFromText 2009-01-16 17:41 robe * Move st_mpolyfromtext 2009-01-15 21:11 robe * Left some garbage in 2009-01-15 18:35 mcayland * Part 1 of GBT#94: Rename folders/files to be more consistent. Embed the MAJOR.MINOR version in the PostgreSQL shared library name (to allow different databases to contain different PostGIS versions) and also rename lwpostgis.sql to postgis.sql. Update documentation in various files to reflect the new names at the same time. 2009-01-15 18:24 robe * Move ST_MLineFromText 2009-01-15 18:17 robe * more stuff 2009-01-15 18:16 robe * forgot some stuff 2009-01-15 18:14 robe * Move over MPointFromText 2009-01-15 15:10 mcayland * Fix the output of "SELECT postgis_full_version()" on trunk by ensuring that USE_STATS is present, and correctly generating the POSTGIS_SCRIPTS_VERSION variable so that installations of trunk don't keep thinking that they need a scripts upgrade. 2009-01-14 17:46 pramsey * Remove missing prototype warning from build. 2009-01-13 15:12 robe * Error in logic in gardentest not correctly flagging WKT functions as taking geometry variant 2009-01-13 15:11 mcayland * Fix regression tests to account for changes made in r3522 (rename 'Curve' to 'CircularString') 2009-01-13 14:04 robe * Move over ST_PolygonFromText 2009-01-13 13:12 mcayland * Fix compile warnings for the cunit tests (unused variables). 2009-01-13 13:00 mcayland * Update lwgeom_gettypename() by renaming Curve to CircularString. Now lots of error messages scattered throughout liblwgeom should start to make sense... 2009-01-13 12:59 mcayland * Rearrange liblwgeom.h as per Paul's comment on GBT#97: Rename LWCURVE to LWCIRCSTRING. Also rename lwfree_circstring() to lwcircstring_free() so that it matches the others (I guess this was missed in the first pass). 2009-01-13 12:27 mcayland * Commit for GBT#97: Rename LWCURVE to LWCIRCSTRING (also know as restoring balance to the universe). Having gone through and re-read sections of the CIRCULARSTRING code, it is amazing how much easier the code is to read without the confusion of a curve being either a CIRCULARSTRING or LINESTRING as per the SQL-MM spec. The resulting commit compiles & installs cleanly for me, passes "make check" and also Regina's torture script. Please let me know if I accidentally broke anything :) 2009-01-12 19:29 pramsey * Remove double-free problem from loader in presence of new deep-freeing lwfree calls. 2009-01-12 14:38 robe * typos 2009-01-12 14:24 robe * Correct. ST_LinestringFromText does not exist though was documented before. 2009-01-12 13:54 robe * Move over ST_Line functions and point out how pointless they are. Also correct incorrect statement that they throw errors when given non-line - they just return null. 2009-01-12 12:23 mcayland * Remove erroneus merge from r3502 (HAVE_CUNIT_H just isn't defined anymore...) 2009-01-11 07:10 pramsey * Remove RECHECK per GBT#18. 2009-01-09 23:04 robe * Fix typo 2009-01-09 22:52 robe * Move over rest of miscellaneous -- NOTE st_find_srid does not exist - was never renamed from find_srid. Not sure its worth fixing since its rarely used anyway. 2009-01-09 19:17 pramsey * Rename lwfree_inspected to lwinspected_release, per it's "shallow free" behavior. 2009-01-09 17:41 pramsey * Rename lwfree_* to *_free. 2009-01-09 14:15 robe * Missed some ST_ spots. 2009-01-09 13:49 robe * Missed a spot. 2009-01-09 13:48 robe * Using - fix some connectiontype omissions in Mapserver section, add in processing defer comment, fix some missing ST_ 2009-01-09 13:32 robe * Add circular string note 2009-01-09 13:29 robe * Move over ST_NRings 2009-01-09 13:17 robe * Move over ST_Zmflag 2009-01-08 17:22 pramsey * Forgot to save this file. Also changes to lwfree_* *_release. 2009-01-08 17:04 pramsey * Alter lwfree_* to deep-free memory. Add variants of *_release to support shallow-free. Go through lwgeom/ and replace any lwfree_* instances with *_release where appropriate. (Surprisingly few.) 2009-01-08 16:06 robe * documentatioin out of synch with reality since garden test failing. Change spelling ST_CrossingDirection to new name ST_LineCrossingDirection 2009-01-08 15:50 robe * put in valid name space (giving error with my xsltproc otherwise) 2009-01-07 19:40 robe * Finish off adding multi garden geometries 2009-01-07 18:25 kneufeld * updated documention on addgeometrycolumn, clarifying the errors thrown. 2009-01-07 12:11 mcayland * Bump some LWDEBUG(F) from level 1 up to levels 3-4 (level 1 is reserved) 2009-01-07 01:16 pramsey * Remove memory leak in standard loader. 2009-01-05 20:54 mcayland * Allow CPPFLAGS/LDFLAGS parameters from the command line to be passed into the CUnit Makefile, since CUnit is the only dependency that cannot determine its own flags using a --with-X parameter. This allows CUnit to be installed in a non-standard location if required. 2009-01-05 14:44 robe * Put circular back in mix. Doesn't crash now that MCA changed distance to throw error. 2009-01-05 00:08 mcayland * Rework the CUnit detection infrastructure as you can't locate include files based on an absolute path. This is because autoconf and the compiler have differing ideas of the current paths (this totally breaks the Win32 build since you have the extra mapping between UNIX-type MingW paths and Windows-type paths). Hopefully this should not affect existing users at all - if so, please post a report on -devel. I'll try running this on MingW at a later date. I've also enforced "make check" to run the unit tests, rather than "make test". This is a fallout from the early days when strk committed the regression test suite to run using "make test" by accident which appears to have stuck :( . 2009-01-04 20:39 mcayland * Fix comment in lwgeom_from_ewkt() and also add a quick error check to lwgeom_from_ewkt() and lwgeom_from_ewkb() - otherwise upon parse failure we could pass a half-baked geometry back to the caller which would not be good :( 2009-01-04 20:11 mcayland * Update the cunit tests to use the proper parser flag PARSER_CHECK_NONE rather than the hard-coded zero. 2009-01-04 19:54 mcayland * Add -lm to the cu_tester link line - we must always add this to the link line for anything that links agains liblwgeom.a (at least on my Linux system here) 2009-01-04 19:24 mcayland * Commit quick fix for GBT#85: ST_Distance crashes on Circular String. Rather than devise and implement a set of distance functions for CIRCULARSTRINGs, I've simply added code to detect the condition and throw an "Unsupported geometry type" error, similar to as already exists within the codebase. 2009-01-02 13:25 robe * minor update 2009-01-02 13:23 robe * Add ST_DumpPoints. Not sure how simple it is. 2009-01-01 21:36 robe * Put time stamp placeholder on (I think) 2009-01-01 21:26 robe * Fix typo 2009-01-01 00:31 pramsey * Fix based on test case from MAC. 2008-12-27 22:58 pramsey * Add support for multilinestring to st_locatebetweenelevations 2008-12-27 08:08 pramsey * Add heat map case. 2008-12-24 20:15 pramsey * Add mline version of clipper. 2008-12-24 17:37 pramsey * Add lwfree_geom to generically deep-free lwgeometries. 2008-12-24 17:09 pramsey * Add lwgeom_from_ewkt and change larger cunit tests to create candidate geometries from text instead of by hand. 2008-12-24 00:32 mcayland * Try and commit a pre-generated output from flex that works for the build-bot. 2008-12-23 22:11 pramsey * Revert accidental commit of lex.yy.c 2008-12-23 20:20 pramsey * Rename new functions to ST_LineCrossingDirection and ST_LocateBetweenElevations for more explicitness and closer correspondance to SQL/MM, respectively. Add a new geometry counter for collections. 2008-12-23 13:24 robe * Break out multi as separate geometry types and start putting in. Remove unary/aggregate geom since now exactly the same as section that takes only 1 geometry. 2008-12-22 23:37 pramsey * Add CUnit to main 'make test' build and check for existance of CUnit.h as part of ./configure 2008-12-22 21:49 mcayland * Fix typo in the backticks when extracting linker/include flags from pg_config. Resolving this allows SVN trunk to compile on MingW! :) 2008-12-22 17:49 robe * More typos 2008-12-22 17:48 robe * More typos 2008-12-22 17:47 robe * typo 2008-12-22 16:54 robe * Missed a constant 2008-12-22 16:53 robe * First draft of ST_CrossingDirection -- needs more work 2008-12-22 15:22 robe * More conditional corrections. Also take circular back out of test since still crashes under 1.4 with ST_Distance. 2008-12-22 14:14 robe * Revision - change to not test geoms against other geoms if function only takes one geom, better commenting of output. Put back circularstring -- crashes on 1.3 still on ST_Distance in some cases. Haven't tested against trunk 2008-12-22 12:15 mcayland * Remove the few C++-style comments that have crept into the codebase, and add a note to the STYLE document stating that C-style comments should be used. 2008-12-22 11:51 mcayland * Remove the WKB_CONVERSION hack which was invented to try and make the JTS connector more reliable. Since all the other JTS code has gone, this can now go too. See http://postgis.refractions.net/pipermail/postgis-devel/2008-August/003495.html for a little discussion. 2008-12-22 11:38 mcayland * Errr.... unsigned *what* exactly??! If you'd have asked me yesterday if I thought this would compile, I would have said no... 2008-12-22 11:11 mcayland * Some code tidy-ups: remove Windows CR/LFs from the file, change the free()s into lwfree()s, and fix a spelling mistake. 2008-12-22 09:30 robe * revert part of last change 2008-12-22 08:39 robe * correction to last edit 2008-12-21 06:37 pramsey * Add ST_LineClipZ(geometry, from, to) SQL and C functions. 2008-12-19 19:21 pramsey * Complete c-level line clipping routines, and unit tests. 2008-12-19 19:20 pramsey * Add in lwfree_* deep memory clean-up routines for multi-objects. 2008-12-19 18:51 kneufeld * Upgraded section in using_postgis.xml that talks about OGC Simplicity / Validity. 2008-12-19 16:57 pramsey * Remove camelCase example from style guideline against camelCase (! :) 2008-12-19 14:59 mcayland * Remove the PostGIS LWGEOM type constants from pgsql2shp - they are no longer needed here as they are included as part of liblwgeom.h. 2008-12-18 20:42 pramsey * Complete the pfree_ to lwfree_ renaming. 2008-12-18 20:36 pramsey * Move curve back down below curve struct. Hm. 2008-12-18 20:35 pramsey * Complete the pfree_* to lwfree_* renaming. 2008-12-18 20:30 pramsey * Rename pfree_* memory management function lwfree_* 2008-12-18 20:22 pramsey * Partial work commit for safety 2008-12-18 17:07 pramsey * Ignore generated Makefile 2008-12-18 15:58 robe * Revise to cross every geometry with every other to better test the functions that take 2 geometries. This increases the generated script to about 18 MB. Still need to trim off some of these tests (since it does the same for singular geom functions) 2008-12-18 15:38 robe * Get rid of redundant variable declares 2008-12-18 15:32 robe * Get rid of 2 geom relation section. Its redundant now that the last condition section has been improved. 2008-12-18 15:25 robe * Numerous enhancements to make torture script generator smarter - e.g. don't use geometry select when function takes not geometries, don't put monkey in when you see pattern matrix use a real intersectionmatrix, concept of version 2008-12-18 00:54 pramsey * Partial work saved back for later. 2008-12-17 20:47 pramsey * Partial work into SVN where I can get at it elsewhere. 2008-12-17 20:22 pramsey * Remove LFs from regression files per MCA. 2008-12-17 19:37 mcayland * #HISTORY: Really fix what was broken in r3431/3432. See the notes there for the full detail. 2008-12-17 18:20 pramsey * Re-locate cunit, add a STYLE guideline draft and some TODO notes. 2008-12-17 16:03 mcayland * Undo r3431/3432: this isn't ready for the primetime yet as it breaks a couple of the regression tests. 2008-12-17 15:01 mcayland * Fix for one of Regina's torture failures as posted to the -devel list here: http://postgis.refractions.net/pipermail/postgis-devel/2008-December/004362.html. A CurvePolygon has a "standard header" and so must be passed through a function that understands the optional existence of SRIDs/BBOXes etc. in the header. 2008-12-17 05:36 pramsey * harmonize unit tests with new function names 2008-12-17 05:32 pramsey * harmonize function names so things... compile 2008-12-17 05:28 pramsey * Revisison per MCA and (c) headers. 2008-12-17 00:22 pramsey * Add some co-linearity tests. 2008-12-17 00:19 pramsey * Basic co-linearity support. Remove touching cases from crossingdirection. 2008-12-16 23:43 pramsey * Add ST_CrossingDirection(line, line) bindings into SQL. 2008-12-16 22:29 pramsey * First cut of line crossing function, and associated cunit tests. 2008-12-16 21:21 kneufeld * fixed bug in probe_geometry_columns where an srid of -1 is not properly detected. (last time :)) 2008-12-16 21:11 kneufeld * fixed bug in probe_geometry_columns where an srid of -1 is not properly detected. 2008-12-16 21:07 kneufeld * fixed bug in probe_geometry_columns where an srid of -1 is not properly detected. 2008-12-16 16:22 robe * More changes - can't remember 2008-12-16 13:01 robe * Add cross reference to ST_IsValidReason on ST_IsValid and ST_Summary 2008-12-16 12:40 robe * Fix formatting of ForceRHR args -- messing up torture test generator 2008-12-15 14:50 robe * missing the st_geomfromtext among others because of bad conditions - switched to xsl:choose to simplify logic. 2008-12-15 13:36 robe * minor comment addition 2008-12-15 12:56 robe * add more data types. Remove curve tests again -- too many crashers 2008-12-15 12:36 robe * Typo in data type param 2008-12-15 10:30 mcayland * #HISTORY: Fix for GBT#83: "ST_Multi on curved polygon gives ERROR: Unknown geometry type: 0". On reflection, ST_Multi() can only operate on standard POINT, LINESTRING and POLYGON types as the only MULTI geomtypes are MULTIPOINT, MULTILINESTRING and MULTIPOLYGON. This was caused by the introduction of the curve crashing fixes in 1.3.4. 2008-12-15 05:33 robe * more cleanup 2008-12-15 05:03 robe * Think I got most of the functions with additional args, left out circular since it crashes. We can fix in 1.4 2008-12-15 04:12 robe * replace param logic 2008-12-15 02:38 robe * #GBT 84: Fix typo in boundary error 2008-12-14 15:14 robe * Add circular string and curved polygon to garden set. Also start work on dealing with functions that take floats and integers as additional params 2008-12-14 07:24 robe * Exclude st_curvetoline from test for now. Crashes on geometry collection test. 2008-12-14 03:19 robe * Add GEOMETRYCOLLECTION to garden mix. This crashes my 1.3.5SVN build after running generated script - investigating 2008-12-14 03:10 robe * Add logic to test for unary functions that take box2d/3d and add 3d geometries to garden set. 2008-12-14 01:50 robe * Add create table, add geom, drop column, drop table to batch of tortures 2008-12-13 19:48 pramsey * Remove isvalidreason, it's done. 2008-12-13 19:47 pramsey * Add typmod idea 2008-12-12 17:07 robe * Fix condition statement that prevented some 2 geom functions from being picked up 2008-12-12 16:55 robe * Added POLYGONM gset to test. Also got rid of monkey crashing LineMerge. May add back later by removing the NOT (j=i) conditions. 2008-12-12 16:49 robe * Note that ST_MakePolygon can be used to make measured polys and 3d polys 2008-12-12 16:26 robe * use strcmp for compare instead of comparing first element in projcreate 2008-12-12 14:20 robe * get rid of accidentally copied comment 2008-12-12 14:11 robe * Add relationship/ functions that act on 2 geometries tests to the mix 2008-12-12 13:40 robe * Add POINTM and LINESTRINGM to garden family 2008-12-12 13:17 robe * Remove Postgis_JTS_Version from docs. No longer in 1.4 code base. 2008-12-12 13:05 robe * Revise to use an xml collection instead of repetitive loops. Also put in select start and end so when the server crashes you know where it broke. 2008-12-12 11:07 mcayland * Looks like I accidentally removed some code from LWGEOM_accum that was required to set the Oid of the array being used to store the aggregate results. As reported by Regina. 2008-12-11 19:38 robe * Fix typo in geometry test 2008-12-11 18:57 robe * put in the svn:keywords thingy and also update postgis_gardentest to generate garden test for all unary postgis functions and aggregates 2008-12-11 17:18 kneufeld * added a HINT to the ERROR message in errorIfGeometryCollection indicating the geometry that is in error. 2008-12-11 16:56 robe * First draft of garden test sql generator. This version just searches the docs and outputs tests for functions that take no arguments. Need to formulate a list of geometries to generate code for unary and so forth. 2008-12-11 15:56 robe * Incorporated Mark's suggestion to use PQescapeStringConn instead of building a custom function. Also fixed typo. Note using free() instead of PQfree since couldn't find a PQfree. I looked at the 8.3.5 postgresql source code base, and that's what they seem to use when releasing buffer space. 2008-12-11 14:55 mcayland * Increase the amount of allocated memory by 3 bytes, so that if maxlength < 3 and we return just "..." then we still have enough space to store the string without clobbering memory. 2008-12-11 13:46 mcayland * Fix up a couple of errors in the new lwmessage_truncate() function found by Kevin - correct an off-by-one error in the code, and include a missing startpos offset in the end truncation code. Also ensure that if maxlength gets too small then we return "..." rather than crashing. 2008-12-10 12:36 mcayland * Resolve local merge conflict from previous commit. 2008-12-10 12:32 mcayland * Add new lwmessage_truncate() function to liblwgeom that will truncate a string to a maximum number of characters, adding a "..." to indicate where the string has been trimmed. Truncation can be specified to occur from either the start or end of the string as required. Also update the parser error handler to use the new function. 2008-12-09 23:29 mleslie * Porting the floating point comparison operator upgrade from the 1.3 branch. 2008-12-07 02:52 robe * correct mm reference of ST_PointFromText and remove from old MM section 2008-12-07 02:47 robe * Minor additions 2008-12-07 02:42 robe * fix some typos 2008-12-07 02:29 robe * Move over (x,y,z) min/max family and add cross reference to those from ST_X, ST_Y, ST_Z 2008-12-07 00:40 robe * Move over ST_Box2D and ST_Box3D and flag ST_Accum as working with circular strings 2008-12-05 19:39 robe * revise example 2008-12-05 19:31 robe * Clarify use of ST_Relation and include Martin's example of interior intersects 2008-12-05 13:46 robe * #HISTORY: #GBT:34 - .prj creation by pgsql2shp 2008-12-05 12:33 robe * #GBT 80: ST_Multi seg faults when given MULTILINESTRING 2008-12-04 17:01 robe * Move over rest of Long Transactions 2008-12-03 17:12 mcayland * Fix GBT#79: shp2pgsql does not honor -s (also known as Mark accidentally missed the sr_id from the geometry constructors) 2008-12-03 16:02 mcayland * Lightbulb moment: the fix for GBT#21: locate_along_measure: wrong values, invalid data required extra work as floating point errors could still be introduced by the removal of the memcpy(). In fact it was the clipping logic that was wrong, so this patch re-adds the memcpy() in the correct place(s) and corrects the clipping flags to remove this floating point error. With thanks to Stephen Davies. 2008-12-02 20:04 robe * Remove some junk and fix some typos, rephrase descriptions 2008-12-02 20:00 robe * Move over LockRow 2008-12-02 19:43 robe * Move over CheckAuth 2008-12-01 23:34 robe * typo 2008-12-01 22:19 robe * remove extra def 2008-12-01 22:06 robe * Move over Enable/Disable LongTransactions 2008-12-01 12:41 robe * Damn casing - wrong fix 2008-12-01 12:38 robe * typo ? 2008-12-01 12:13 robe * typo? 2008-12-01 06:32 robe * Move over ST_HasBBox 2008-12-01 06:26 robe * Move over ST_AddBBox, ST_DropBBox - the last of the Geometry Editors 2008-11-28 16:38 pramsey * wrap isvalidreason in test for GEOS >= 3.1 2008-11-27 19:04 robe * correction 2008-11-27 18:53 robe * ST_IsValidReason typo and add an example of a valid geometry 2008-11-27 18:31 robe * Document new ST_IsValidReason function. I suppose this may be the last time I can successfully create invalid geometries before Mark ruins all the fun. 2008-11-26 19:04 pramsey * ST_IsValidReason(geometry) returns text reason for validity failure. Requires GEOS >= 3.1. GBT#51 2008-11-26 13:40 mcayland * Apply patch from strk to prevent unneccesary invocation of 'ar' when building liblwgeom. 2008-11-26 12:11 robe * Correct install docs to agree with README. Not sure if this is necessary since this is partially for already installed postgis. Are we going to have an lwgeom folder in contrib? 2008-11-26 11:49 mcayland * Create liblwgeom as a phony dependency, so that any changes to liblwgeom cause a re-build of liblwgeom.a during "make". Patch provided by strk. 2008-11-26 11:43 mcayland * Fix some minor errors in the README documentation as indicated by strk. 2008-11-25 21:46 pramsey * Bring forward release notes from 1.3.4 2008-11-25 10:42 mcayland * Quick fix for GBT#72: ST_Estimated_Extent sometimes returns null if table exists but not in current schema. 2008-11-24 13:18 robe * Fix indentation for estimated_extent example. Document ST_Force_Collection broken when given Circular strings for versions prior to 1.3.4 2008-11-24 11:04 mcayland * Fix for GBT#73: ST_Force_Collection crashes with CIRCULARSTRING. This is basically the same fix for GBT#66: ST_Dump kills backend when fed CIRCULAR STRING except that it occurs in a different place. 2008-11-24 11:01 mcayland * Move lwgeom_contains_subgeoms() into liblwgeom core as it seems it is now required outside of lwgeom_dump.c. 2008-11-23 19:18 robe * Move over the rest of the ST_Force* family 2008-11-23 07:22 robe * Move over ST_Estimated_Extent 2008-11-23 06:54 robe * minor changes 2008-11-23 06:50 robe * Move over ST_GeomFromWKB 2008-11-21 14:41 robe * typo 2008-11-21 14:30 robe * Fix indentation of examples 2008-11-21 14:28 robe * GBT #71: Update section 4.2 of docs to describe manual adding to geometry columns - revision. Add pretty anchor, reference pretty anchor in AddGeometryColumn reference section. Rearrange order. 2008-11-21 14:15 robe * GBT #71: Update section 4.2 of docs to describe manual adding to geometry columns. Decided to just add a new section after 2008-11-21 08:32 robe * 2008-11-21 08:31 robe * Move over ST_CoordDim 2008-11-20 22:03 mcayland * Located more profile calls using grep and converted them over to use the new macros. Hopefully I've caught all of them now... 2008-11-20 18:45 mcayland * Found some new locations containing profiling code outside of the GEOS functions, so swap them over to using the new macros. 2008-11-20 15:00 mcayland * Switch GEOS profiling over to use conditional macros, much in the same way as LWDEBUG(F) has been implemented. This improves code readability by not having constant #if...#endif sections throughout the code. I've also changed the variable that indicates whether profiling has been enabled to POSTGIS_PROFILE, and integrated it into the autoconf configuration. Hence profiling can be enabled by running configure with the --enable-profile option, or setting POSTGIS_PROFILE in postgis_config.h to 1 and re-compiling. 2008-11-20 13:32 robe * typo 2008-11-20 12:55 robe * Add note on ST_Transform and ST_AsKML that they require Proj support 2008-11-19 13:40 robe * update doc on install to reference geos 3.0.3 2008-11-17 17:30 robe * amend ST_Mem_Size 2008-11-17 01:00 robe * typos 2008-11-17 00:52 robe * st_mem_size 2008-11-17 00:05 robe * Document missing ST_AsGML func proto 2008-11-16 15:54 robe * typo 2008-11-15 20:33 robe * Move over ST_Polygon and ST_WKBToSQL, move ST_MakePolygon from Geometry Processing to Geometry Constructors section 2008-11-14 23:46 robe * Move over rest of non-MM compliant Geometry Constructor functions 2008-11-12 17:42 pramsey * Update with latest BS 2008-11-10 16:35 pramsey * astyle --style=ansi --indent=tab=8 2008-11-10 15:48 pramsey * Fix error in prepgeomcache type 2008-11-08 14:43 robe * Document affine functions now work with curves. Though I don't have a tool to verify correctness, so my assumption - it returns something that sounds sort of right. 2008-11-08 14:17 robe * document more functions that work with circular strings 2008-11-08 06:46 robe * document support for curves of functions Mark C just fixed with disclaimer only works in 1.3.4+ 2008-11-07 17:07 pramsey * Prepared geometry mixed-types bug fix ported forward from 1.3. 2008-11-07 14:23 mcayland * After a quick sanity grep, I noticed that ST_Transform() was also susceptible to crashing on curve types in the same way as the previous two fixes. Hence I'm committing a fix now before Regina finds it and logs another bug report :) 2008-11-07 14:21 mcayland * Fix GBT#69: ST_Translate crashes when fed circular string. lwgeom_affine_recursive() needs to know about the new lwgeom_getcurve_inspected() function. 2008-11-07 14:18 mcayland * Fix GBT#70: ST_NPoints Crashes with Curves. lwgeom_npoints() needs to know about the new lwgeom_getcurve_inspected() function. 2008-11-07 14:05 mcayland * Add missing lwgeom_getcurve_inspected() function which is required for some of the latest GBT fixes. 2008-11-07 07:44 robe * Yeh ST_Dump now works with curves 2008-11-06 17:16 mcayland * Add missing function prototype from r3263. 2008-11-06 17:05 mcayland * Fix for GBT#66: ST_Dump kills backend when fed CIRCULAR STRING. With thanks to Regina Obe. 2008-11-06 16:12 mcayland * The GEOS 2.2 series "geos_c.h" is missing header guards, so including the header multiple times as is done in lwgeom_geos.h and lwgeom_geos_prepared.h causes compilation to fail with multiple definition errors. This patch fixes this problem allowing GEOS 2.2 to work with PostGIS once again, although of course it can easily be removed when it is decided that GEOS 2.2 support is no longer required. 2008-11-06 15:15 mcayland * Change configure to check for the existence of the PGXS Makefile, even if pg_config can be found. This is become distributions such as Debian install pg_config as part of libpq-dev but this package doesn't contain the required Makefile. Per bug report from strk. 2008-11-05 13:03 robe * amend ST_Longitude bug comment 2008-11-05 11:29 mcayland * Fix ST_AsGML() not recognising GEOMETRYCOLLECTION as a valid geometry type from my GBT#65 fix :( 2008-11-05 11:25 mcayland * Fix regression tests reporting incorrect failures due to a change of output caused by r3243. 2008-11-05 11:06 mcayland * Fix for GBT#68 - ST_Shift_Longitude doesn't work with MULTIPOINT. Looks like this was just a simple mistake in the code. I've also improved the error message to return the proper type name instead of just a number. 2008-11-05 01:56 robe * add ST_Collect as having some support for circular 2008-11-04 20:26 robe * typo in proto 2008-11-04 20:05 robe * Add missing proto for ST_CurveToLine 2008-11-04 14:15 robe * Add ST_HasArc, pull some useful comments from source code to add to ST_CurveToLine 2008-11-04 14:09 mcayland * Fix lwgeom_typename() not returning a valid string for any of the newer geometry types. 2008-11-04 13:58 mcayland * Fix for GBT#65: ST_AsGML kills the backend when fed a CIRCULAR STRING. The default code attempts to inspect any unknown geometry which fails on CIRCULARSTRING. A longer term fix may be to fix CIRCULARSTRING so that it can be inspected, however the fix here is to throw an ERROR for unknown types just as the other As_*() functions do. 2008-11-04 13:43 robe * Change all ST_AsKML to use new ST_Transform 2008-11-04 13:14 robe * More flagging of functions that work with 3d 2008-11-04 12:31 robe * fill in all protos for kml, flag more functions as supporting 3d and circular/curve 2008-11-04 10:00 mcayland * Change ST_GeomFromText() to GeomFromText() for older hwgeom (-w) support - looks like I was a little bit to eager in my earlier conversion to use the new ST_ calling convention. 2008-11-04 09:57 mcayland * Alter loader Makefile to add liblwgeom.a dependency, so people who just want to build the shapefile loaders can do "make" within the loader subdirectory and liblwgeom.a will automagically get build first. 2008-11-04 02:48 robe * fix typo 2008-11-04 02:19 robe * document circular support of more functions 2008-11-04 02:07 robe * Get rid of MM compliancy note for ST_LineToCurve, can only find ST_CurveToLine in MM docs 2008-11-04 01:56 robe * correct comment 2008-11-04 01:55 robe * Add new section to document circular string support 2008-11-04 01:47 robe * Document ST_LineToCurve and ST_CurveToLine, update template to include note about Circular String support in prep for new index section 2008-11-03 17:00 kneufeld * updated url in comments to the documentation on the implemented point-in-polygon algorithm to http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm#Winding%20Number. Old link was dead. 2008-11-03 16:23 mcayland * Add missing ICONV_LDFLAGS variable to the loader Makefile. Thanks to Olivier Courtin for noticing. 2008-11-03 16:17 mcayland * Switch pgsql2shp over to using liblwgeom. There are few commits that can be as satisfying as one which involves the removal of ~1200 lines of code. By using the liblwgeom parser instead of the in-built parser, we have now achieved the following: i) all parsers within PostGIS, shp2pgsql and pgsql2shp are now the same which means they all follow the same rules. Also extended error reporting information including error text and position information is available. ii) the complexity of the shp2pgsql/pgsql2shp is considerably reduced. The slightly unfortunate cost is the overall executable size is larger, since we are linking with liblwgeom. However, from both a consistency and maintainability point of view, this is a big win. Note that while there may be a difference in behaviour in some corner cases, all regression tests pass here. 2008-10-31 10:41 mcayland * Add missing serialized_lwgeom_from_hexwkb() function to liblwgeom which is required for adding liblwgeom support to pgsql2shp. 2008-10-31 10:04 mcayland * Some more shp2pgsql clearups; remove some dead commented code and switch over to use the LWDEBUG(F) debugging framework. 2008-10-30 23:13 mcayland * Fix regression test differences between different platforms in the AsGeoJSON regression code. There were two issues: firstly, the original regression tests included precision information > 15 significant figures, and secondly the GeoJSON code was exposing BOX2DFLOAT4 information to the client instead of calculating the true bounding box. With thanks to Olivier Courtin. 2008-10-30 22:48 robe * Move over ST_DumpRings 2008-10-30 17:10 mcayland * Switch shp2pgsql over to use liblwgeom instead of its own internal parser. Some notes from looking at the code: i) I've abstracted the I/O formatting functions into a new OutputGeometry() function since it allow the logic concerning output formatting to kept in one place, rather than sprinkled throughout all the other Insert* functions. ii) InsertPoint() and InsertMultiPoint() have been combined, since it seems that the same code will work for both - all that is required is to know whether to produce a MULTIPOINT collecton or a POINT at the end. iii) I've added additional comments within the Insert* functions to help clarify what is going on in places iv) It appears some corner cases were missing within the conversion code with respect to Z/M coordinates, so in theory the new code should do a better job. All in all, the source code is slightly reduced in size (although of course the binary is larger after linking with liblwgeom), and seems a lot more readable to my eyes. A quick TODO is to go through the file and replace the #if...#endif sections related to debugging with LWDEBUG(F) options. NOTE: I've had to change the Makefile to allow linking against the maths library and liblwgeom.a, so some manual intervention on the automated build may be required ;) 2008-10-29 18:32 robe * Make more pretty section names, move over ST_Accum and provide example. 2008-10-29 18:05 robe * Pretty anchors for all new sections 2008-10-29 17:59 robe * Incorrect function arg in ST_Union 2008-10-29 17:36 robe * Okay maybe hmm 4th or 5th time is the charm 2008-10-29 17:34 robe * Again 2008-10-29 17:34 robe * Lets try again 2008-10-29 17:29 robe * function name typo 2008-10-29 17:27 robe * Move over rest of Linear Referencing functions and provide examples. Experiment with giving pretty anchor to section. 2008-10-29 13:58 robe * Add Availability note for Populate_Geometry_Columns 2008-10-29 13:52 robe * Fix line_interpolate_point link 2008-10-29 13:13 robe * Move over ST_Line_Substring 2008-10-29 12:37 robe * Move over ST_Line_Interpolate_Point 2008-10-27 16:13 kneufeld * changed linkend to match case in ST_Length2d to ST_Length2D 2008-10-27 16:05 kneufeld * attempt to fix broken linkend by replacing it with an xref in reference_new.xml 2008-10-27 15:53 robe * Move over sql mm compliance for ST_Disjoint and get rid of annoying carriage return in template.xml 2008-10-27 15:49 kneufeld * added availability to Populate_Geometry_Columns 2008-10-27 15:48 kneufeld * fixed typo in broken link to ST_Distance_Spheroid 2008-10-27 15:33 kneufeld * fixed typo in ST_Length3d_Spheriod xref to ST_Length_Spheroid 2008-10-27 15:29 kneufeld * fixed typo in missing constraint linkend: ST_InteriorRings to ST_NumInteriorRings 2008-10-27 15:26 kneufeld * typo in xref link 2008-10-27 15:25 kneufeld * added id for missing constraint linkend: PostGIS_Scripts_Released 2008-10-27 15:21 kneufeld * added id for missing constraint linkend: line_substring 2008-10-27 15:15 kneufeld * added id for constraint linkend: length2d 2008-10-27 06:49 kneufeld * fixed bug in lwpostgis.sql.in.c in POPULATE_GEOMETRY_COLUMNS when detecting SRIDs of -1. 2008-10-27 06:29 kneufeld * updated description for Populate_Geometry_Columns 2008-10-27 06:13 kneufeld * added plpgsql function Probe_Geometry_Columns to lwpostgis.sql.in.c and added documentation in reference_new.xml 2008-10-26 22:26 robe * Fix typo 2008-10-26 22:18 robe * Move over ST_Length* functions. Correct documentation - e.g. missing ST_Length2D_Spheroid and ST_Length3d_Spheroid and ST_Length_Spheroid are synonyms. Seems to disagree with how we define ST_Length. 2008-10-26 21:24 robe * Move over ST_Distance_Spher* functions 2008-10-26 19:49 robe * Put in availability info for rotate functions 2008-10-26 19:43 robe * Move over rest of Affine family. Correct some typos. Put ST_ForceRHR in right location. 2008-10-26 18:14 robe * Move over ST_Affine 2008-10-25 17:29 robe * Add = operator the most confusing and accidentally used operator of all 2008-10-25 16:30 robe * Commit provide another example of ST_SetPoint and flag as supporting 3d 2008-10-24 15:01 robe * typo 2008-10-24 14:53 robe * Move over ST_SnapToGrid 2008-10-23 00:28 robe * typo 2008-10-22 18:55 robe * Move over ST_Relate the last of the Geometry Relationship Function and destroy the section in old reference. 2008-10-21 06:41 robe * Move over perimeter and max distance 2008-10-21 04:54 kneufeld * moved ST_ForceRHR into the correct category 2008-10-21 04:41 kneufeld * moved over ST_ForceRHR 2008-10-20 17:36 robe * typo in st_cover something. Hate non-symmetric relationships 2008-10-20 17:29 robe * Revert change to ST_MemUnion - it really is that. Most have had a faulty restore when it was named ST_MemGeomUnion 2008-10-20 17:25 robe * Move over ST_Covers and ST_CoveredBy and provide examples, update ST_Contains example to show distinction between ST_Covers, ST_Contains etc. 2008-10-20 14:49 robe * correct links in README and note about running make check before make install. How the hell do you do that? 2008-10-19 23:40 robe * Provide example for GeometryType. fix typo 2008-10-19 23:31 robe * typo in ST_Y definition. Also added common use-case example of ST_Centroid used with ST_X, ST_Y 2008-10-19 14:52 mcayland * After several discussions at PGDay, it seems that the only use-case for the PGXS PROGRAM clause is for programs that wish to link with the backend libraries. Hence create a new Makefile for the loader directory which uses the new autoconf infrastructure, based upon library and dependency lists from the original 1.3 branch. 2008-10-19 14:40 robe * Move over remainder of Geometry Accessors to new section. Fix ST_MemUnion (really ST_MemGeomUnion), correct mistake in ST_SymDifference 2008-10-18 08:33 mcayland * Remove postgis_jts_version() function call from regression tests as the function no longer exists (prevents warning being displayed at the start of the test run) 2008-10-17 18:51 robe * Move over the *N family 2008-10-17 17:58 robe * Move over ST_length2d, ST_length3d 2008-10-17 03:39 robe * Move over ST_MemUnion the last of the geometry processing functions and destroy the geometry processing functions old section 2008-10-17 03:05 robe * forgot to delete some stuff 2008-10-17 03:04 robe * move over ST_Shift_Longitude, ST_Difference, ST_SymDifference 2008-10-16 22:13 kneufeld * reverting accidental commit to template.xml 2008-10-16 18:35 robe * Move over ST_NumGeometries 2008-10-16 18:17 robe * Move over ST_ExteriorRing, ST_NumInteriorRings, ST_NumInteriorRing 2008-10-16 18:12 kneufeld * added dblatex as a dependency for building PDF's added a pdf target to doc/Makefile.in 2008-10-16 08:33 mcayland * Update to previous parser patch: if the error location is 0 (i.e. we haven't even matched a valid OGC WKT type) then display a more appropriate message. Per minor gripe from Paul. 2008-10-16 07:22 robe * update st_azimuth - it should be called vector instead of line since order of points reverses the angle 2008-10-16 07:17 robe * Move over ST_Azimuth and provide example 2008-10-16 06:35 robe * Move over ST_Boundary to new section, copy comment about SQL-MM srid to xsl header 2008-10-15 21:44 mcayland * Fix pointer problem in the new HINT code caused by strncpy() not padding with zeros unless the specified length is *longer* than the source string. 2008-10-15 18:36 pramsey * last one! 2008-10-15 18:26 pramsey * expunge remaining stringBuffer references 2008-10-15 17:59 pramsey * Remove stringBuffer.* from build/repository. 2008-10-15 15:03 mcayland * Update the LWGEOM parser to provide error HINTs when being called from PostgreSQL, and update regression tests accordingly. 2008-10-15 13:43 robe * fix spacing of st_linemerge, st_segmentize examples. 2008-10-15 13:39 robe * Move over ST_Segmentize and ST_LineMerge 2008-10-14 23:08 kneufeld * moved cleanup of the pdf to the maintainer-clean target 2008-10-14 20:11 pramsey * Remove sliced test code and return to original state. 2008-10-14 19:51 mcayland * Nearly finish work on the new parser API. The key part of this patch is to alter the behaviour of the parser so that instead of generating errors directly, it returns an error code, error location and an error message. Hence the caller is now in charge of the behaviour when parsing invalid geometries, and so can ignore errors or proceed onto the next geometry if required. The regression test change is due to a change in an error message, since the error is now returned from the unparser before it even gets to GEOS. 2008-10-14 19:39 robe * Provide examples for ST_Simplify and ST_SimplifyPreserveTopology 2008-10-14 18:16 robe * Move over st_simplify and st_simplifypreservetopology. Still need to put in examples. 2008-10-14 17:42 pramsey * astyle style=ansi indent=tab=8 2008-10-14 11:40 robe * completely move over rest of management functions to new section. Add probe_geometry_columns - never been documented, but useful. Get rid of update_geometry_stats - just returns a dumb message that its obsolete. 2008-10-14 03:56 robe * Add missing function proto for dropgeometrytable 2008-10-13 13:16 mcayland * Rename parser_check_flags to current_parser_check_flags and unparser_check_flags to current_unparser_check_flags to clarify that these status variables only reflect the checks enabled for the current parse. 2008-10-13 13:03 mcayland * Move the liblwgeom unparser example over to the dynptarray API which is the proper way to alter point arrays in memory. 2008-10-13 11:36 mcayland * Fix up some more warnings in SVN trunk; note that there are still 2 remaining PreparedGeometry warnings, but these will require patching GEOS. 2008-10-12 17:47 pramsey * Performance boost: only detoast the front of the tuple first and extract the bbox from that. 2008-10-10 16:34 pramsey * Pull prep_cache reference safely inside PREPARED_GEOM #ifdef 2008-10-10 05:24 pramsey * Set keywords propery. 2008-10-10 05:17 pramsey * Clean-up and comment. 2008-10-10 04:41 pramsey * Rename lwgeom_geos_c.c to lwgeom_geos.c 2008-10-10 04:39 pramsey * Prepared geometries getting closer to readiness. Integrated into standard functions, regression tests added. 2008-10-10 01:35 mleslie * Updating the regression test README file with details about the c preprocessing step and the formatting of the _expected file results. 2008-10-08 18:57 robe * SQL my MM 2008-10-08 18:51 robe * update st_translate include support for 3d flag 2008-10-08 18:27 pramsey * Move to memcmp keys, leave prepared functions tied to old keyed signatures for now. 2008-10-08 10:14 mleslie * Rebuilt the box3d generation for circular strings to account for a special large-arc case. Fix for issue 58, includes regression test for the case. 2008-10-08 05:48 kneufeld * fixed several broken or redirected external URLs. 2008-10-08 05:45 kneufeld * fixed several broken or redirected external URLs. 2008-10-08 04:25 pramsey * Fix minor logic error in intersects() bbox shortcut. 2008-10-07 23:51 pramsey * Re-work prepared geom cache to use memcmp instead of keys, step 1. 2008-10-07 20:38 pramsey * Move DEBUG statement next to a req'd variable. 2008-10-07 18:09 robe * correct mistake 2008-10-07 17:39 robe * Move over ST_ConvexHull 2008-10-06 19:51 pramsey * Fix slight error in box shortcut logic in prepared intersects. 2008-10-05 22:12 pramsey * Convert from LWDEBUG to POSTGIS_DEBUG 2008-10-05 17:33 mcayland * Fix stupid mistake in the liblwgeom parser... 2008-10-04 21:29 pramsey * Fix boneheaded error in prepared intersects. 2008-10-04 17:49 pramsey * Protect prepared geometry implementation in GEOS>=3.1 defines. 2008-10-04 16:00 mcayland * Fix the DEBUGF statements I didn't realise I broke with the new LWGEOM parser/unparser API (in response to Paul's r3061 commit). 2008-10-03 18:07 pramsey * Some extra debugf's in the prepared geometry code. 2008-10-03 17:37 pramsey * Patch up and comment out some DEBUGF lines that don't compile due to changes in function signatures in liblwgeom 2008-10-03 13:23 robe * correct incorrect statement 2008-10-03 13:20 robe * Update ST_Union's fitness for 3d with examples. 2008-10-03 09:22 robe * Add more examples of 3d use and annotate more 3d functions 2008-10-02 23:53 pramsey * Rework prepared geometry handling to look more like the implementation of PJ caching in transform. 2008-10-02 18:52 pramsey * Flip format to 'astyle --style=ansi --indent=tab=8' to make upcoming changes more consistent, stylewise. (Can't stand the mixed styles anymore!) 2008-10-02 18:35 pramsey * add .so. to svn:ignore 2008-10-02 17:36 pramsey * add check for invalid srid to addgeometrycolumn (#33) 2008-10-02 16:46 pramsey * ensure relate(g,g,p) is case insensitive (#44) 2008-10-02 16:15 robe * Flag more 3d compatible functions 2008-10-02 16:00 pramsey * pass commandline options into backend command (#45) 2008-10-02 15:56 pramsey * Fix log message to refer to correct function name 2008-10-02 12:43 robe * Fix minor typos in ST_Polygonize 2008-10-02 12:14 robe * Get rid of extra line breaks in specialty function section (by changing xsl). Move over ST_Polygonize and provide examples. 2008-10-02 11:40 robe * Start annotating functions that support 3d, add some examples of 3d, update xsl to pull out functions that support 3d in a separate special function index 2008-10-02 11:17 robe * extraneous junk left 2008-10-02 11:16 robe * Move over ST_Extent 2008-10-01 21:55 robe * Get rid of excess paragraph in mm compliance section 2008-10-01 21:53 robe * Moved some functions to Geometry Processing section 2008-10-01 21:42 robe * Put in SQL mm compliance for ST_Intersection 2008-10-01 20:04 robe * Move ST_Intersection to new reference_new.xml 2008-09-30 17:42 robe * Revise to include mm compliance section 2008-09-30 17:39 robe * Move over ST_Intersects sql mm compliance note to reference_new (remove sT_Intersects from MM section of old reference) 2008-09-30 13:29 mcayland * Update regression tests to include test cases for GBT#21. 2008-09-30 13:25 mcayland * Fix for locate_along_measure returning invalid values (GBT#21) 2008-09-30 04:06 kneufeld * added a new aggregate and sql_mm toc to docs generated via a custom xsl (provided by Regina Obe) to the documentation Makefile 2008-09-29 16:20 robe * change to sort functions alphabetically 2008-09-28 19:48 mcayland * Update LWGEOM unparser to (E)WKT/WKB to resturn a LWGEOM_UNPARSER_RESULT structure instead of just the WKT/WKB character array. This is the same work done for r3023 but applied to the unparser instead. 2008-09-28 16:18 mcayland * With the advent of LWGEOM_PARSER_RESULT, it is now possible to get rid of the horrible SERIALIZED_LWGEOM hack for PostgreSQL 8.3 to allow us to return the size separate from the result. This is good as it removes another level of indirection from the parser. Note that the size field has now been added to the LWGEOM_PARSER_RESULT structure. 2008-09-28 15:47 mcayland * Clear up warnings (mixed declartions within code and invalid return) from r3022. 2008-09-28 15:32 mcayland * Update (E)WKT/WKB parser to return a structure (LWGEOM_PARSER_RESULT) instead of just the serialized lwgeom. This is in preparation for returning more detailed error information back to the caller. 2008-09-28 09:03 pramsey * Update pip shortcut code to be less aggressive in building cache. 2008-09-27 08:19 mcayland * Rename parser_check_flags to unparser_check_flags for the unparser to prevent linking error under OS X. Also add missing function prototype to silence compiler warning in the PiP code. 2008-09-26 21:46 pramsey * harmonize sql functions with c functions for prepared geometry 2008-09-26 21:34 pramsey * Make preparedgeometry memory handling a good deal kinder (no longer losing base geometry every time) 2008-09-26 21:01 robe * put index in listitems and hope for the best 2008-09-26 19:43 pramsey * P-I-P rennovation complete: memory leaks gone, multipolygon support added 2008-09-26 18:59 robe * correct the comments 2008-09-26 18:55 robe * xsl that generates index listing of postgis spatial aggregates and MM compliant functions 2008-09-26 12:45 robe * Put in author/license info (hmm this is a guess - couldn't find a good example in SVN to go by). Also comment on what xsl is doing. 2008-09-26 02:50 kneufeld * updated "make clean" directive to include the newly generated PDFs 2008-09-25 21:50 mcayland * Add parser flags to the LWGEOM to (E)WKB/WKT parsers, similar to has already been done for the (E)WKB/WKT to LWGEOM parsers. 2008-09-25 21:34 mcayland * Remove missing variables from LWDEBUG(F) statement that would cause compilation to fail with POSTGIS_DEBUG_LEVEL > 0 2008-09-25 20:46 pramsey * Another biggish leak into the parent context. 2008-09-25 19:18 pramsey * More small memory leaks removed. 2008-09-25 17:18 pramsey * Remove more memory leaks from P-I-P shortcut code. 2008-09-25 12:18 robe * More typo fixes 2008-09-25 12:10 robe * Move over ST_MakePointM, miscellaneous typo fixes 2008-09-24 14:05 robe * Put svn back in microversion 2008-09-24 14:01 robe * typo 2008-09-24 13:55 robe * Added ST_MakePointM, removed redundant redefinition of MakePointM so docs are now in synch with actual functions. 2008-09-23 21:32 mcayland * Use __va_copy() to pass a copy of the variadic structure to lw_vasprintf() to solve ABI difference between 32bit/64bit architectures. 2008-09-23 19:59 mcayland * Remove a couple more warnings when compiling with debug enabled from lwgeom_gist.c. 2008-09-23 19:53 mcayland * Revert commit 2990: the real bug was that the LWDEBUG statement was incorrect rather than the code - the additional read_int() was causing an off-by-one error when outputting WKB causing several regression tests to fail. 2008-09-23 19:44 mcayland * Refactor the memory management routines to account for the fact that variadic functions can't be called directly from the initial allocators. Also solve issues related to differences between the system vasprintf() (if supplied) and the liblwgeom vasprintf() by renaming to lw_vasprintf() and using it throughout PostGIS. With all this in place, GBT#54 is fixed which is very useful when debugging ;) 2008-09-23 19:07 pramsey * Reduce p-i-p memory leak by 50% 2008-09-23 13:05 robe * fix typo add more links 2008-09-23 13:00 robe * Move over ST_Buffer 2008-09-22 22:59 pramsey * Add cnt declaration where missing. 2008-09-22 17:55 robe * change to xsl 1.0 plus minor indent change 2008-09-22 12:28 robe * Add xsl file that autogenerates sql set comment statements from reference_new.xml 2008-09-22 12:18 robe * Realized from my sql comment generation xsl that there is really no ST_WKTToSQL that takes an SRID and no ST_BD.. that doesn't take an SRID. Very shocking. 2008-09-21 23:15 robe * typo in st_setsrid returns geometry not boolean 2008-09-18 22:12 pramsey * Add a few more generated files to ignore 2008-09-18 22:09 pramsey * Set ignore properties on generated files. 2008-09-18 13:54 mcayland * Update the code for unparsing LWGEOMs to WKB/WKT so that it includes the standard simple checks: LINESTRINGs must have > 2 points, POLYGONs must have closed rings and CIRCULARSTRINGs must have > 2 points and the number of points must be odd. There is still a little more work to do to allow flags to be passed into the parser to specify which checks should be enforced, much like has already been done for the parsing from WKB/WKT to LWGEOM. 2008-09-18 04:34 kneufeld * commit to test autobuild process and svn hooks - removed extra tabs from preformatted text blocks 2008-09-18 04:22 kneufeld * commit to test autobuild process and svn hooks - removed extra tabs from preformatted text blocks 2008-09-17 15:05 robe * Add to ST_SetSRID - reference to spatial_ref_sys 2008-09-17 14:46 robe * Link ST_SetSRID to updated spatial_ref_sys section using cutesy anchor. 2008-09-17 14:41 robe * Give spatial reference systems section a cutesy anchor. 2008-09-17 05:49 robe * 2008-09-17 05:48 robe * typo in link 2008-09-17 04:14 robe * more fleshing out of spatial ref section 2008-09-17 04:00 robe * Beef up spatial reference section. Still needs work. 2008-09-17 03:54 kneufeld * added an id to ST_Buffer to provide an end link for cross references. 2008-09-16 22:43 mcayland * Silence a few more compiler warnings that had appeared during my last few parser commits. 2008-09-16 22:29 mcayland * Add an example of how the liblwgeom API can be used by other C programs to manipulate geometries and output the result. Currently the unparser.c program shows how a geometry can be constructed "on the fly" and then exported in both WKT and HEXWKB formats; however it gives programmers the potential to devise some very unique processing tools which can generate files that can be loaded into PostGIS. 2008-09-16 18:44 mcayland * Move the LWGEOM-specific functions from lwgeom_sqlmm.c into liblwgeom/lwsegmentize.c to ensure that liblwgeom can exist as a standalone library. 2008-09-16 13:35 robe * Cleanup of FAQ 2008-09-16 13:17 robe * Move over ST_Expand 2008-09-16 01:51 robe * Expand list of contributors 2008-09-16 01:47 robe * Expand list of contributors 2008-09-15 11:54 robe * Fix url link to proj to point to osgeo 2008-09-13 05:41 kneufeld * Moved over ST_IsRing to new PostGIS reference. Fixed link errors to ST_IsSimple. 2008-09-12 12:12 robe * typo 2008-09-12 10:46 robe * Spelled Kevin's last name wrong and Mateusz first name wrong. Sorry Kevin and Mateusz. 2008-09-12 10:40 robe * Update Credits and project links 1) Get rid of emails 2) Change order of key contributors based on heuristics a) duration of contribution, b) frequency of contributions, c)recency of contributions, d) impact of contributions, and add some new contributors (more need to be added) 2008-09-11 12:18 mcayland * Reinstate the PDF documentation system based on OpenJade, including integration with autoconf. "make postgis.pdf" should now output lovely PDF format documentation :) 2008-09-11 12:04 mcayland * Documentation fixes to allow PDF documents to be generated from Docbook source using OpenJade - OpenJade seems a lot more strict than xsltproc when generating output :( 2008-09-10 21:06 robe * Get rid of left over stuff from ST_IsValid and ST_Summary copy. 2008-09-10 11:57 robe * example and result misaligned 2008-09-10 11:39 robe * Move over ST_Summary and provide example. 2008-09-10 11:28 robe * Move over ST_IsValid and provide example 2008-09-10 07:28 robe * correct st_contain signature, other misc fixes 2008-09-10 06:47 robe * Add ST_IsValid reference to ST_Within. 2008-09-09 21:10 mcayland * Allow a flags parameter to be passed into the WKT parser to determine which consistency checks are performed out of polygon ring closure, minimum number of points and odd number of points. 2008-09-08 20:17 mcayland * Commit generated versions of the new parser files for people who do not have flex or bison installed. 2008-09-08 20:16 mcayland * Enhance geometry parser so that it keeps track of the current position during parsing. With a bit more work, this should allow error messages to pinpoint the exact location of an invalid geometry section or syntax error. 2008-09-08 13:12 robe * Move over ST_Translate and provide example use 2008-09-07 11:02 mcayland * Yet another update to the liblwgeom parser API - lwgeom_from_ewkt() has been renamed to serialized_lwgeom_from_ewkt() to indicate that the function returns a serialied LWGEOM rather than an unserialized LWGEOM structure. 2008-09-07 09:14 robe * typo in funcprototype 2008-09-07 09:07 robe * Provide example of ST_SetPoint 2008-09-07 08:43 robe * Move over ST_SetPoint to new section 2008-09-06 19:12 robe * change alias field names of st_contains examples 2008-09-06 19:02 robe * correct mm spec section of ST_Contains. Remove MM ST_Contains from old ref section 2008-09-06 18:58 robe * Move over ST_Contains to new section. Provide example. Minor changes to ST_Within 2008-09-04 18:28 robe * Put in disclaimer on ST_Equals when dealing with invalid geometries 2008-09-04 12:40 robe * Move over ST_NDims and ST_Dimension to new reference section 2008-09-04 12:08 robe * minor change to example 2008-09-04 12:04 robe * accidentally took out reference from ST_OrderingEquals 2008-09-04 11:56 robe * Move over ST_Overlaps to new reference section and provide some examples 2008-08-28 21:09 robe * Fixed url links to geos and proj. Both are now osgeo projects and no longer at refractions or remotesensing. Move around instructions putting geos and proj compilation steps at the end per Mark's request 2008-08-27 04:34 kneufeld * moved ST_IsClosed to the new documentation template. 2008-08-24 04:54 kneufeld * moved ST_StartPoint and ST_EndPoint to new reference_new.xml 2008-08-22 17:47 robe * another typo 2008-08-22 17:36 robe * Typo 2008-08-22 17:13 robe * Some changes based on Mark's comments. 2008-08-22 14:46 robe * More typos 2008-08-22 13:37 robe * typo 2008-08-22 13:05 robe * More reordering 2008-08-22 12:52 robe * Installation got moved out of order for some reason. 2008-08-22 12:32 robe * Typo 2008-08-22 12:14 robe * Updated the installations docs. I took some of Olivier Courtin instructions for install (http://postgis.refractions.net/pipermail/postgis-users/2008-August/020746.html) which seemed much easier to follow than the ones we currently have. Also corrected path settings we had to the install files. They are all in downloads not root of postgis as we suggested. 2008-08-21 11:27 mcayland * Update PostGIS README file to account for changes in SVN trunk. 2008-08-21 10:56 mcayland * Update PostGIS SVN trunk to use the new 8.4 GiST API (where RECHECK is now specified within the consistent function, rather than being supplied as part of the operator class definition). This allows PostGIS to compile and pass regression tests on the latest PostgreSQL 8.4 CVS HEAD. 2008-08-21 08:45 mcayland * Alter the lwgeom Makefile so that liblwgeom.a is linked directly, rather than using the -L...-l options on the command line. This is to prevent problems on OSX where PGXSadds the PostgreSQL $libdir to the PostGIS link line, causing it to link to liblwgeom.so produced by older versions of PostGIS rather than the static liblwgeom.a. Also change the PGXS CPP/LIB equivalent variables to use += so that extra compile/link options can be supplied. Per report from Robert Rainthorpe, with thanks to William Kyngesburye. 2008-08-12 16:42 pramsey * move to CLASS/STYLE mapserver 5.X syntax 2008-08-04 11:50 robe * Moved over ST_SRID, fixed a typo, added some references 2008-08-04 11:32 robe * got rid of additional entry for ST_GeomFromText - was already moved over, moved over ST_PointFromText, ST_MakePoint 2008-08-03 15:05 pramsey * Spelling changes from Mark Kolybabi. 2008-08-02 22:03 mcayland * Add a download reference for Apache Ant, plus fix a couple more typos. 2008-08-02 08:41 mcayland * Correct typo from the previous documentation commit. 2008-08-02 08:24 mcayland * A long overdue documentation update - update the installation section to reflect the many changes in the new SVN trunk build system. 2008-08-01 16:01 robe * bad break in GeoJSON example 2008-08-01 15:18 robe * Provide example for geojson (excerpts from postgis newsgroup thread) 2008-08-01 15:12 kneufeld * Reverted html markup for mathematical expressions in ST_Touches and ST_Crosses to a gif image. It seems unicode markup does not work well for both IE and Firefox. The next best thing to do is to get MathML markup working. 2008-08-01 04:42 kneufeld * small grammar correction in ST_Touches 2008-08-01 04:26 kneufeld * added ST_Touches examples 2008-07-31 12:32 robe * took out kml example - causing parsing error. 2008-07-31 12:14 robe * Moved over remaining geometry output functions and put in availability for each. 2008-07-31 06:35 robe * Put in Availability 1.3.4 for ST_AsGeoJSON 2008-07-31 06:33 kneufeld * fixed small typo in ST_Touches mathematical expression 2008-07-31 06:29 kneufeld * Moved over ST_Touches to new PostGIS reference. Examples forthcoming. 2008-07-31 04:57 kneufeld * replaced the mathematical gif expression in ST_Crosses with simple html markup 2008-07-30 14:05 robe * Move over ST_WKTToSQL and also defined ST_GeometryFromText (didn't see it in the old docs, but its not deprecated and is a popular variant) 2008-07-30 11:41 robe * Got rid pf superfluous redirection to deprecated functions of ST_GeomFromWkb and ST_GeomFromText - now they just point directly to the c functions. Changed all FromWKB, FromText variants to point to the non-deprecated ST_GeomFrom, ST_BuildArea etc. (before they were pointing at deprecated functions) 2008-07-29 15:46 robe * grammatical error 2008-07-29 15:42 robe * Move over ST_Collect and ST_Union, provide examples for ST_Union. Get rid of comment about don't use ST_Union with geometry collections - seems to work fine with those. 2008-07-29 12:35 robe * typo in function declare for perimeter 2008-07-29 12:00 robe * remove ST_Area from reference.xml already accounted for in reference_new.xml, move over ST_Length, ST_Perimeter 2008-07-29 05:43 kneufeld * moved over st_pointonsurface and provided examples. 2008-07-29 05:11 kneufeld * moved over st_centroid and provided examples in both svg and png format. Eventually, ImageMagick will be used to generate the png files, but for now they are committed into svn. 2008-07-29 04:42 robe * minor formatting changes, note about ST_NumPOints being an alias for ST_NPoints moving forward. 2008-07-28 19:05 kneufeld * fixed some minor xrefences in the documentation so the autobuild doesn't throw errors. 2008-07-28 12:07 robe * Move over ST_GeomFromEWKT, ST_GeomFromEWKB and provide examples. Fix some miscellaneous references. 2008-07-28 10:03 mcayland * Allow Makefile substitutions for PGCONFIG which are required if pg_config is not located in the path. Note that as part of this fix, we now need to generate topology/Makefile using autoconf. Thanks to Jorgen Austvik for the report and partial patch. 2008-07-28 09:13 mcayland * Fix -o option for flex; the output filename must be specified immediately after -o without any preceding white space. Per report from Jorgen Austvik. 2008-07-24 11:58 robe * Move over ST_GeomFromText and provide examples 2008-07-24 10:22 mcayland * Add PROJ.4 version check to ensure that a minimum version of 4.5.0 is installed. This is to ensure that the pj_set_searchpath() function is present (note: it was actually added in 4.4.9, however we version detect on major.minor rather than major.minor.release) 2008-07-24 05:55 kneufeld * Moved several version functions to the new PostGIS reference. 2008-07-23 17:13 kneufeld * added some xreferences so the autobuild process does not throw errors. 2008-07-23 16:40 kneufeld * changed @@LAST_RELEASE_VERSION@@ with a DocBook variable so the correct version number gets substituted in all included files, not just postgis.xml 2008-07-23 12:03 robe * move of ST_AsBinary,ST_AsEWKB - add examples, various minor fixes to ST_As function descriptions 2008-07-23 10:56 robe * 2008-07-22 13:53 robe * Deprecate ST_area2d 2008-07-22 11:38 robe * Move over ST_AsText, ST_AsEWKT and provide examples. Change order of ST_Multi. 2008-07-22 11:12 robe * move over ST_SetSRID, ST_Transform and ST_Multi. Provide examples. 2008-07-21 16:20 robe * Remove ST_Area2D and replace with ST_Area - move to new section and provide example 2008-07-21 12:09 robe * Move over ST_GeometryType, ST_MakePolygon 2008-07-21 11:38 robe * delete reference to ST_Equals in reference.xml - alread in new version, include an ST_DWithin non-join join example. 2008-07-18 12:23 robe * Move over ST_AddPoint, ST_RemovePoint, ST_Npoints, ST_NumPoints and provide examples. 2008-07-17 14:16 robe * Move ST_Reverse and add example 2008-07-17 12:14 robe * Move ST_BuildArea expand on definition, provide example, Move ST_BdPolyFromText and ST_BdMPolyFromText 2008-07-17 11:20 robe * move over ST_Within and provide example 2008-07-16 08:42 mcayland * Fix for segfault in ANALYZE due to incorrect use of legacy BOX type within compute_geometry_stats() (Fixes GBT#43). Thanks to Landon Fuller for the bug report and fix. 2008-07-16 06:42 kneufeld * moved ST_Envelope, complete with examples. 2008-07-16 05:10 kneufeld * updated the st_crosses method: made the geometry parameters lowercase and made a few changes to content. 2008-07-16 05:03 kneufeld * Moved ST_Crosses into new reference_new.xml file, complete with images. Updated css to use fixed-width fonts for programlistings. 2008-07-16 04:55 kneufeld * fixed small typo 2008-07-16 04:54 kneufeld * Apparently, the <inlinegraphic> will become deprecated in a future version of DocBook. Now replaced with <inlinemediaobject>. 2008-07-15 21:20 kneufeld * fixed a small typo so the autobuild process will still work. 2008-07-15 19:38 robe * Move ST_Equals, ST_OrderingEquals - provide examples. Make Geometry - geometry 2008-07-15 18:02 robe * minor corrections to ST_SetSRID and UpdateGeometrySRID 2008-07-15 17:54 robe * remove includes index note for ST_MakeLine 2008-07-15 17:51 robe * Move ST_Intersection, ST_Disjoint provide examples for both. 2008-07-15 15:33 kneufeld * applied patch from Mark to fix the if/then/else so the Makefile can run on older systems (ie. FC3) 2008-07-15 11:34 robe * typo 2008-07-15 11:03 robe * Move ST_MakeLine from reference.xml to reference_new.xml and add an additional example to ST_MakeLine 2008-07-15 06:57 kneufeld * Started migration of the functions in reference.xml using the <variablelist> concept to a new "reference_new.xml" using DocBook's <refentry> concept. Once migration is complete, reference.xml will be removed and reference_new.xml will be renamed to reference.xml. The included template.xml file is not used, except to provide example usage of DocBook's refentry tag. 2008-07-14 21:52 pramsey * Updated CSS from Dane Springmeyer 2008-07-14 16:30 robe * Example use case of ST_DWithin 2008-07-14 11:40 mcayland * Modify autoconf stylesheet logic (again) to correctly distinguish between the case where a valid docbook stylesheet is found automatically and where it is explicitly specified using the --with-xsldir option. 2008-07-14 10:41 mcayland * Change autoconf iconv-detection code so that ICONV_LDFLAGS is explicitly set in the AC_CHECK_LIB() action-if-found section (LIBS does not get automatically set when action-if-found is set). Thanks to Olivier Courtin for the bug report. 2008-07-14 10:05 mcayland * Apply some autoconf / Makefile changes from Olivier Courtin. XSLBASE should not be checked for validity unless it has been explicitly specified using the --with-xsldir option, and we also add some friendlier messages in the documentation Makefile in case the DocBook stylesheets and/or xsltproc cannot be found. Additionally, the configure --help output has been tidied up using the AS_HELP_STRING macro. 2008-07-13 23:47 pramsey * Apply GeoJSON patch from Olivier Courtin. 2008-07-13 17:33 mcayland * Rename the new parser function ewkt_to_lwgeom() to lwgeon_from_ewkt() so that it matches the rest of the parser API 2008-07-13 11:09 mcayland * Add some additional LWDEBUG(F) statements for debugging that I missed the first time around with the new debugging infrastructure 2008-07-13 10:50 mcayland * More work on improving the EWKT/B parser; remove all references to allocator functions from outside of liblwgeom by generating wrapper functions with more meaningful names. As well as cleaning up the API, it also makes the code much more readable 2008-07-11 10:48 robe * Example uses of ST_Line_SubString 2008-07-10 13:16 robe * Examples of using ST_ExteriorRing and ST_NumInteriorRings 2008-07-09 11:16 robe * Numerous small changes. Changed some returns 1 (TRUE) to just TRUE. Automatic casting between 0 1 and boolean no longer exists in PostgreSQL. Lets not confuse people by suggesting to them they are the same. 2008-07-08 13:30 robe * numerous changes(remove additional parent, argument list changes, multi function breakout) 2008-07-08 12:01 robe * Provide examples of using ST_MakePolygon in conjunction with ST_Accum and PostgreSQL ARRAY() function 2008-07-08 06:05 mleslie * Added brief descriptions to the SQL-MM curve types. 2008-07-08 05:15 kneufeld * modified toc top generation level param 2008-07-08 05:09 kneufeld * split postgis.xml into manageable chunks, broken at chapter divisions. 2008-07-08 03:12 kneufeld * updated tips section to reference ST_* function names 2008-07-07 12:20 robe * Example of ST_AddPoint, some fixes of non-ST references, miscellaneous indenting changes. 2008-07-07 11:57 robe * Add examples for ST_MakePolygon, correct non-st to ST references in ST_MakePolygon section 2008-07-06 07:22 robe * fixed ST_Dimension example, flipped order of conditions in WHERE on some examples (in later versions of PostgreSQL since we don't have our costs right - the planner may choose to process in order of conditions 2008-07-06 01:47 kneufeld * fixed typo in a WKT example. 2008-07-03 19:07 robe * Examples of use of ST_MakeLine, correction to my ST_Collect example. 2008-07-03 17:36 pramsey * Add version information to <title> 2008-07-03 17:08 pramsey * Match version numbers to new naming conventions. 2008-07-03 09:28 mcayland * Add the parser build rules back into the liblwgeom Makefile, so now any changes to either the lexer or parser source files will automatically invoke a rebuild of the relevant output files during make 2008-07-01 14:15 mcayland * Fix liblwgeom requiring gcc to compile. By using macros and variables supplied by libtool, we can now detect the PIC flags and whether the compiler will accept additional gcc warning flags for developers 2008-06-30 15:30 robe * Fixed typo 2008-06-29 19:19 mcayland * Move some PostgreSQL compatibility macros from lwgeom_pg.h into pgsql_compat.h which is their proper home 2008-06-29 19:11 mcayland * Split the basic geometry accessors into a separate static library liblwgeom.a; this potentially allows re-use of the liblwgeom functions from within PostGIS, or could be extended at a later date to include databases other than MySQL. This patch includes a change to the liblwgeom handler functions; instead of sprinkling init_pg_func()s around the source, I have changed the default liblwgeom handlers to make use of a callback to allow linked libraries to set their own handlers the first time any of them are called. I have also tidied up the parser API a little in liblwgeom.h, which means wktparse.h can be removed from all of the headers in the lwgeom/ directory, plus renamed wktunparse.c to lwgunparse.c to keep things similar to lwgparse.c. Finally, I renamed liblwgeom.c to lwutil.c to avoid confusion within the new interface. TODO: the liblwgeom Makefile has some gcc-specific options, but these can be fixed later - it seemed more important to make the warnings visible to developers. 2008-06-28 05:34 robe * Flesh out definition of ST_Collect and how to use it. 2008-06-26 02:40 kneufeld * ST_SnapToGrid SQL functions were referencing the deprecated SnapToGrid instead of their ST_.. equivalents. 2008-06-24 16:12 robe * Fix mismatched para in intersection documentation and remove dangling command tag in Reporting Documentation Issues section. 2008-06-24 15:57 robe * Definitions for st_convexhull and st_shift_longitude 2008-06-06 08:53 mcayland * Rearrange lwgeom/Makefile.in in terms of the liblwgeom/PostgreSQL distinction, plus remove remaining JTS reference. 2008-06-06 08:48 mcayland * Remove JTS support from liblwpostgis; native GCJ-compiled JTS code is reported not to be reliable enough within a production environment, so well stick with GEOS. 2008-06-05 16:08 mcayland * Some more updates to lwpostgis.sql.in.c; correct a couple of missing conversions from OPAQUE_TYPE to internal (how on earth did regression tests pass with this still in place??), plus remove the UPDATE on pg_opclass to change the OID of the index storage type since we can do this by specifying a STORAGE clause instead. 2008-06-05 14:49 mcayland * Remove Makefile from lwgeom/ directory; it is no longer needed as it is automatically generated from lwgeom/Makefile.in 2008-06-05 14:47 mcayland * Update new Makefile copyrights, also remove compat.h from the loader/ directory since it is now no longer needed. 2008-06-05 14:30 mcayland * Update copyrights for configure.ac (rewritten from scratch, and now renamed from the deprecated form configure.in) and also the PROJ.4 version detection macro 2008-06-05 12:09 mcayland * Switch all SQL and PL/PGSQL stored procedures over to use dollar quoting instead of apostrophes for function bodies. At last, most of the stored procedures actually become readable 2008-06-05 11:19 mcayland * Remove the HAS_SCHEMA #define and all related #else code since we now guarantee to be using PostgreSQL > 7.2 2008-06-05 11:07 mcayland * Remove PQunescapeBytea hack from pgsql2shp which is no longer needed, as it was only required for versions of PostgreSQL < 7.3 2008-06-05 10:51 mcayland * Remove all of the pre-PostgreSQL 7.3 schema #ifdefs from lwpostgis.sql.in to make things readable once again. 2008-06-05 10:19 mcayland * Blast away the huge amounts of legacy C code related to PostgreSQL versions < 8.1. Next step will be to work on the SQL script files too. 2008-05-31 10:35 mcayland * Provide a new text file called DEBUG explaining how to use the new debug system. 2008-05-31 09:56 mcayland * Commit new PostGIS debugging infrastructure. These changes unify all the debug logging to use a new set of macros: LWDEBUG()/LWDEBUGF() for LWGEOM functions, and POSTGIS_DEBUG()/POSTGIS_DEBUGF() for PostgreSQL functions. To enable debugging, run configure with --enable-debug and then remake the entire project. If --enable-debug is omitted during configure, the above macros evaluate to (void)0, and hence should be removed by the compiler during optimisation. Also: contains minor warning cleanups and a fix for the ST_Dwithin SQL definition. 2008-05-28 23:03 pramsey * Enhanced speed _ST_DWithin(g,g,d) that returns as soon as g and g are within d of each other, rather than using distance naively. Change ST_DWithin to use enhanced op. (Issue 20) 2008-05-28 21:58 pramsey * Fix towgs84 for 31300 and 31370 (issue 23) 2008-05-28 21:47 pramsey * Geomunion name change note, issue 26. 2008-05-28 21:45 pramsey * Bug reporting documentation (issue 27) 2008-05-28 21:35 pramsey * Fix for issue 30, ST_Buffer doco mistake 2008-05-27 15:08 mcayland * Remove extra warnings related to the shp2pgsql deleted records patch 2008-05-27 14:47 mcayland * Update new build system to include iconv detection for shp2pgsql 2008-05-27 03:00 pramsey * Fix for DBF files with deleted records. (#29) 2008-05-22 20:43 mcayland * Since PGXS compiles libraries with -Wall, attempt to remove as many warnings as possible. Most of these are missing function prototypes at the top of each file. 2008-05-22 14:34 mcayland * Update documentation build so that "make install" now works. Maybe this will fix the on-line website build? 2008-05-22 14:31 mcayland * Update topology/ directory to use the new PGXS build system. 2008-05-20 22:24 mcayland * Update previous commit: add Makefile.in and remove Makefile, since Makefile is now generated from Makefile.in automatically. 2008-05-20 22:10 mcayland * Rework the documentation Makefile so that it works with the autoconf build system. 2008-05-14 17:24 mcayland * Fixes for previous commit: missed Makefile.config target for "make clean" 2008-05-14 17:19 mcayland * Fixes for previous commit: Alter GNUmakefile to understand that Makefile.config no longer exists, plus remove lwgeom/sqldefines.h as it is generated by autoconf 2008-05-14 17:10 mcayland * Commit new build system based upon PGXS. Due to the large number of changes, please refer to http://postgis.refractions.net/pipermail/postgis-devel/2008-May/003010.html. 2008-04-24 01:04 pramsey * ST_AsGeoJSon patch from Olivier Courtin <olivier.courtin@camptocamp.com>. 2008-04-22 14:54 pramsey * envelope doco fix 2008-04-12 18:39 pramsey * Bump trunk up to 1.3.4SVN 2008-04-12 18:32 pramsey * Versions and news for the 1.3.3 release. 2008-04-12 16:46 pramsey * Update re dbf patch 2008-04-12 16:44 pramsey * New -n switch to support DBF-only loading of attributes without shapes. Submitted by Regina Obe. 2008-04-12 10:16 mcayland * Remove svn:eol-style from regress_ogc_expected; MingW requires unix line endings in order for the diff to work as expected. 2008-04-10 14:44 pramsey * Reduce FTDate field size to 8 bytes from 10. Matches other calls in the file now, no good explanation in code why it was 10 to start with. http://postgis.refractions.net/pipermail/postgis-users/2008-April/019169.html 2008-04-10 06:40 mcayland * Another round of PostgreSQL 8.3 fixes, this time related to arrays. Make sure that we use the supplied ArrayType pointer macros, instead of attempting to access to cast directly to ArrayType. This resolved GBT#13 where a "corrupted histogram" error is thrown when using using ST_EstimatedExtent() under 8.3. 2008-04-09 19:52 pramsey * Change sr_id into an integer, per mca's suggestion. 2008-04-08 21:36 pramsey * Fix string literal comparison warnings: "comparison with string literal results in unspecified behaviour" 2008-04-07 20:09 pramsey * Rename all occurances of getopt to pgis_getopt to work around OS/X 10.5 system function name collision. 2008-04-07 19:47 pramsey * Fix the ST_AsKML regression tests. 2008-04-07 19:47 pramsey * Allow conditional regression tests based on GEOS_VERNUM and move the cover/prepared tests into the appropriate buckets. Fix the AT_AsKML regression tests. 2008-04-05 14:49 pramsey * remove unloved header file 2008-03-31 11:16 mcayland * Remove the code that adds share/contrib/nad to the PROJ.4 search path for PostgreSQL < 8.0 since the mechanism for determining the path has changed from earlier versions, and this was mainly for Win32 users. Also rename nad/ directory to proj/ to keep it inline with an existing PROJ.4 installation. 2008-03-30 19:38 pramsey * small syntax errors in ST_YMAX, etc functions 2008-03-30 19:37 pramsey * confirm st_*min st_*max 2008-03-28 23:24 pramsey * Syntax error in sql.in 2008-03-28 21:31 pramsey * Fixed up KML patch from Eduin Carillo. 2008-03-28 21:28 pramsey * Enable the USE_PROJ and GEOS_VERNUM macros to propogate into lwpostgis.sql.in 2008-03-28 21:10 pramsey * Revert KML patch, bad puppy! 2008-03-28 21:04 pramsey * Added KML patch from Eduin Carillo. http://code.google.com/p/postgis/issues/detail?id=17 2008-03-28 20:18 pramsey * Changed ifeq to ifndef for CXX macro test. 2008-03-28 20:17 pramsey * Removed unloved and un-used geos_version.sh file. 2008-03-28 20:03 pramsey * Added SVN support patch from Dr. Marco Hugentobler, as described in http://postgis.refractions.net/pipermail/postgis-devel/2008-February/002883.html 2008-03-28 19:25 pramsey * Added GEOS_VERNUM macro and protected GEOS 3.0/3.1 functionality behind it. 2008-03-28 18:55 mcayland * Fix crash caused by double-free in LWGEOM_same - we were accidentally freeing the 1st parameter twice instead of freeing the second parameter. Thanks to Cliff Wright for the bug report. 2008-03-28 17:05 pramsey * Removed regress_ogc_prep from tests temporarily until a new GEOS is released with support for new predicates. 2008-03-27 21:18 mcayland * Fix bug with |>> and <<| operators - the BOX2D overabove and overbelow functions were actually wrong, causing index scans to return the wrong results. Per bug report from Tomas Karlsson. 2008-03-26 03:40 pramsey * Change link to postgis bug tracker 2008-03-21 08:17 mcayland * Resolve GBT bugs #2,#3 and #9 related to crashes when calling aggregate functions under PostgreSQL 8.3 (all earlier versions would not see the error). This was due to missing more VARSIZE macros in the PostgreSQL 8.3 conversion. The complete list of affected functions under PostgreSQL 8.3 is: ST_force_2d(), ST_force_3dz(), ST_force_3dm(), ST_force_4d(), ST_Collect(), ST_MakeLine(), ST_Polygonize(), ST_Union()/ST_GeomUnion(), ST_MakePolygon()/ST_Polygon(). 2008-02-12 15:05 pramsey * Document ST_SimplifyPreserveTopology(geometry,float) 2008-02-12 15:03 pramsey * Added hook to GEOSTopologyPreserveSimplify 2008-01-29 01:24 benjubb * Changed the interface for the GEOS prepared predicates. ST_contains, ST_containsProperly, ST_covers, and ST_intersects are now overloaded. The new arguments style is ( geometry, geometry, integer). The third argument is used to determine when the first argument changes. The assumption is that when the third argument changes, the first argument is assumed to have changed too. This side-steps the issue of determining when the identity of the first geometry changes. 2008-01-22 19:44 benjubb * Ammended to include prepared geometry cache code in scope of PREPARED_GEOM symbol. 2008-01-22 00:24 benjubb * Modified to check version of GEOS and stub out prepared predicates if GEOS is prior to 3.1.0 2008-01-18 18:57 benjubb * Made some minor changes suggested by Mark Cave-Ayland. 2008-01-18 01:05 benjubb * Added new function wrappers to expose prepared geometry predicates: ST_ContainsPrepared( geometry, geometry ) ST_ContainsProperlyPrepared( geometry, geometry ) ST_CoversPrepared( geometry, geometry ) ST_IntersectsPrepared( geometry, geometry ) as well, this function was added, for orthogonality: ST_ContainsProperly( geometry, geometry ) 2008-01-18 01:04 benjubb * Added new functions to lwgeom_geos_c.c to support prepared geometry predicates. bool containsPrepared( geom, geom) bool containsProperlyPrepared( geom, geom) bool coversPrepared( geom, geom) bool intersectsPrepared( geom, geom) 2008-01-18 00:59 benjubb * Tests for the prepared geometry predicates. The tests were copied from regress_ogc, and modified. Most of the tests use a pattern where the same function is invoked three times with the same argument. This tests the prepared geometry caching mechanism. This testfile haven't been added to regress/Makefile yet, as it fails for one case. This probably due to a bug in GEOS. 2008-01-11 15:05 mcayland * Bump version number to 1.3.3SVN for next development cycle. 2008-01-11 15:04 mcayland * Rewrite the pgsql2shp connection string code so that it uses a connection string, rather than setting environment variables. MingW-compiled and MSVC-compiled apps seem to have great problems passing the variables to each other, causing regression to fail. With this fix (and a Makefile tweak), it is now possible to run a MingW-compiled PostGIS against an MSVC compiled PostgreSQL and pass all regression tests. 2007-12-03 23:10 pramsey * Fix up bad entities and screwed up programlistings from some previous pretty-printing run on the XML. 2007-12-02 20:37 mcayland * Commit updated versions of the ChangeLog and README.postgis (also change some references in README.postgis from "run as root" to "run as postgres", and correct the --with-pgsql and --with-geos documentation) 2007-11-30 18:19 pramsey * Added release notes. 2007-11-30 13:04 mcayland * Fix the (E)WKB parser so that it performs validation checks in the same way as the WKT parser, e.g. ensure POLYGON rings are closed, LINESTRINGs consist of at least 2 points and that curves have at least 3 points. As discovered when looking simplify() bug submitted by Ivan Mincik. 2007-11-27 22:39 mcayland * Rename the existing get_int32() and get_uint32() functions to lw_get_int32() and lw_get_uint32() respectively in order to avoid a collision with functions of the same name in newer versions of OS X. This should resolve the problem with PostGIS crashing on some OS X installations. Many thanks to William Kyngesburye and others for resolving this issue. 2007-11-27 22:19 mcayland * Extend the PROJ.4 search path to include $sharedir/contrib/postgis/nad when looking for grid files. This is mainly to allow Win32 builds to find grid files without having to use a PROJ.4 DLL compiled containing a fixed path. 2007-11-23 10:42 mcayland * Apply Tom Glancy's patch to shp2pgsql which corrects an off-by-one error in the field_width calculation when determining which SQL numeric type is required depending upon the length of the corresponding shapefile field. This should eliminate various out of range error messages that may have appeared when attempting to load a converted shapefile into PostgreSQL. 2007-11-23 10:24 mcayland * Commit a first attempt at an Ant build.xml file for the PostGIS JDBC driver so finally all the Java drivers build with Ant for consistency, plus we eliminate numerous cross platform problems. As it stands, the build.xml file supports only the standard JDBC driver - if you wish to use a JTS-enabled JDBC driver or run the online regression tests then you must still use the Makefile. Any help porting the remaining parts of the Makefile would be appreciated. 2007-10-29 16:29 mcayland * Apply parts of Charlie Savage's MSVC patch - mainly tidying up variable allocations so they appear at the start of functions, but also making better use of the pj_get_errno_ref() which gets rid of the auto-import warnings on MingW. 2007-10-29 14:22 mcayland * Remove version numbers from liblwgeom references in lwpostgis.sql as per http://postgis.refractions.net/pipermail/postgis-devel/2007-September/002764.html. This should help make upgrades a lot easier for people since it removes the need to change the SQL function definitions when upgrading version. Note that this is a quick and dirty fix as I didn't want to change Makefile.shlib too much - as soon as we remove support for PostgreSQL < 8.0, we can use PGXS instead and thus remove the redundant shared library code from PostGIS. 2007-10-29 13:44 mcayland * Commit Charlie Savage's patches (with additional comments) to the bounding box/envelope functions to ensure that valid geometries are always returned; in more specific terms, if a bounding box is a point then a POINT is returned, and if a bounding box is 1-dimensional a LINESTRING is returned. Otherwise a POLYGON is returned as per the old behaviour. For details see the thread in the postgis-users archives Sept 2007 'How to get the centroid of an bounding box using st_extent'. 2007-10-29 12:34 mcayland * Fix broken error message when attempting to deserialise a type other than a point; the message should now correctly show the name of the offending type. Patch supplied by Charlie Savage. 2007-10-23 00:19 pramsey * KML credits patch <yecarrillo> 2007-10-10 21:27 mcayland * Apply extra fixes for the reworked AsGML() function to ensure that enough memory is allocated for the GML output. Patch supplied by Barbara Phillipot. 2007-09-28 10:18 mcayland * Fix a mistake in my refactoring of the AsGML() patch for GML3 support - the detoasted geometry is now the second argument rather than the first. Per report from Olivier Courtin. 2007-09-19 05:01 pramsey * Applied patch from Charlie Savage to make ST_Envelope return a POINT when the input geometry is a POINT or a one-part MULTIPOINT. 2007-09-06 16:03 mcayland * Commit modified version of Barbara Phillipot's GML patch to fix existing output to make it GML2 compliant, plus add GML3 output capability 2007-08-22 15:09 pramsey * Rename ST_GeomUnion to ST_Union in docs and ST_MemGeomUnion to ST_MemUnion in .sql. 2007-08-21 23:02 mcayland * Fix crash when calling ST_EndPoint caused by a double-free in LWGEOM_endpoint_linestring. This bug has been there for a while - thanks to Eric Francois for the bug report. 2007-08-15 14:39 snowman * - Include levenshtein difference in rating when doing city/state match. 2007-08-13 16:30 pramsey * Increment version number to 1.3.2 for next development cycle 2007-08-13 16:12 pramsey * Version flip up to 1.3.1 2007-08-13 15:51 mcayland * Fixed spelling error for the word "geometry" thanks to Regina Obe, plus added comment about initial PostgreSQL 8.3 support. 2007-08-13 07:27 mcayland * This time really fix the documentation missing tag problem... 2007-08-13 07:14 mcayland * Fix documentation since an error in the 1.3.0 release notes xml caused the build to fail (this may need author review) 2007-08-13 07:06 mcayland * Remove warning about unused variable in lwgeom.c (it was a leftover from the PostgreSQL 8.3 compatibility patch) 2007-08-09 22:50 mleslie * Added release notes and updated version numbers and release dates. 2007-08-09 22:19 mleslie * Moved the intersects method back to the original definition and disabled the new apparently broken implementation. 2007-08-09 16:57 mleslie * Bumped the version number to RC5. 2007-08-09 16:56 mleslie * Updated the regression tests for curved geoms to avoid the byte ordering problems. 2007-08-03 20:58 mleslie * Removed an unused function that was erroneously committed. 2007-08-02 19:58 mleslie * Added PreparedGeometry and caching support to the intersects function in the jts connector. Created wrapper functions for the PreparedGeometry functionality. 2007-08-02 19:57 mleslie * Removed a call to the deprecated point_in_ring function. 2007-07-31 20:40 mleslie * Updated the version numbers. 2007-07-26 18:55 mleslie * Applyed Michael Fuhrs patch to fix the reserved word issue against PostgreSQL 8.3. 2007-07-23 21:43 mleslie * Fixed the FP_LTEQ macro to accomodate values significantly larger that zero. 2007-07-23 18:52 mleslie * Added the covers and coveredby functions to the jts connector. 2007-07-23 16:29 mleslie * Updated the loader to create the index after the data has been loaded. 2007-07-20 04:29 pramsey * Fix some ST_ declarations that were missing. 2007-07-18 15:57 mleslie * Applying Michael Fuhrs patch to correct my attrocious selling. 2007-07-16 18:53 mleslie * Added notes about the implicit index operators on the relational functions. 2007-07-16 18:26 mleslie * Resurrected the ST_LineToCurve regression tests, but commented them out until ST_SnapToGrid excepts curves. 2007-07-16 18:06 mleslie * Upgraded the escaping of quotes from the deprecated backslashing to the doubling of quotes. 2007-07-13 05:48 mcayland * Rollback experimental shp2pgsql escaping change that accidently got included in the last commit :( 2007-07-13 05:42 mcayland * Correct previous commit for older PostgreSQL versions - the order of the methods in PROJ4SRSCacheContextMethods is not consistent between versions. 2007-07-12 20:33 mcayland * Add missing methods to the PROJ.4 cache memory context to prevent a backend crash caused by a NULL pointer dereference when PostgreSQL is trying to clean up memory contexts. Per report from Tom Lane. 2007-07-12 17:20 mleslie * Removing the unsnappable test calls to LineToCurve. 2007-07-11 01:17 pramsey * Remove extra/debian, per recommendation from Stephen Frost 2007-07-10 21:12 pramsey * Remove templategis from make, install, clean targets. 2007-07-09 03:11 snowman * - Remove debugging NOTICE 2007-07-09 02:20 snowman * - Added print-print function for norm_addy type (norm_addy -> varchar) - Restructured geocode(), accept address in parsed norm_addy form as well as unparsed varchar form. Return norm_addy type instead of varchar (use pprint_addy() if you want a varchar result instead) 2007-07-08 21:56 snowman * - City names are 90 characters (this matters more than you might think because it affects the types returned from the various calls and if they don't match subsequent geocode() queries in the same session may complain about the planned record type not matching across calls) 2007-07-06 16:45 pramsey * ST_Dwithin reference entry 2007-07-06 16:44 pramsey * Added ST_DWithin SQL function 2007-07-04 17:12 mleslie * Applied the patch from Michael Fuhr to fix the definition of ST_PointN 2007-07-03 21:36 snowman * - Change to generic database name 2007-07-03 21:36 snowman * - Update install instructions 2007-07-03 21:32 snowman * Add in initial import scripts for importing the TIGER/Line data into a PostGIS system. Could probably be improved to accept more arguments/etc and require less direct script modification to make it work. Also, not sure the polygons are done perfectly yet. :/ 2007-07-03 21:30 snowman * Add in broken out/updated normalize/geocode functions - create_geocode.sql: Main creation script for pulling in all the other .sql files to create all the functions and whatnot - normalize/ Normalization routines, includes mapping 'North' -> 'N', 'Virginia' -> 'VA', etc, etc. - geocode/ Actual geocoding routines to find the point geometry of the address. Includes interpolation across the linestring found for the location (perhaps not the best), and fallbacks to zip-code and city, state matches using the associated lookup tables for those. Also currently returns a set rather than a cursor, that's up for some debate but the cursor makes it difficult to do things like fallback, imv. Especially since references to it from another pl/pgsql function require it to be a specific record type across multiple calls. That's currently a problem. :/ 2007-07-03 21:22 snowman * Initial import of utility functions, seperated into individual files for sanity. 2007-07-03 21:19 snowman * tables/- New scripts for roads_local/tiger_geocode_roads, clean up lookup_tables - roads_local.sql: Script to create the road_local table from the completechain table which is created by ogr2ogr. Mainly handles type conversions. Also creates the tlid, cfcc, and geometry indexes. - tiger_geocode_roads.sql: Script to create the tiger_geocode_roads table which breaks down the roads_local to just the street name, etc, much smaller than roads_local but has the pointers to get back to the full roads_local for address number matching, etc. Also creates the appropriate indexes using soundex(). - lookup_tables.sql: - Add 'drop if exists' to make script easily re-runnable - Add primary keys, good thing to have, and creates indexes - Add st_code (TIGER/Line state code) to state_lookup - Remove dup in street_type_lookup - Add in building of: place_lookup county_lookup countysub_lookup zip_lookup_all zip_lookup 2007-07-03 21:05 snowman * - Minor reorg, add in other parts of the initial load 2007-07-03 20:51 snowman * - Original tiger geocoder 2007-07-03 20:03 mleslie * Added a home for the tiger geocoder. 2007-06-28 22:46 mleslie * Added ST_Covers and ST_CoveredBy functions, as discussed at http://lin-ear-th-inking.blogspot.com. Added regression tests and documention for the new functions. 2007-06-28 20:21 mleslie * Added a 1D rtree for polygon segment indexing, and tied the index into the point in polygon short-circuit of the contains, within, intersects and disjoint methods. Added an index cache to the comparitor methods to save index build times. 2007-06-28 20:16 mleslie * Added or updated debugging statements. 2007-06-28 20:14 mleslie * Altered the macro tests for pg_alloc, pg_realloc to only print debugging information when alloc debugging is enabled. 2007-06-15 19:06 mleslie * Updated the regression test suite to allow variable results depending on jts/geos availability. 2007-06-15 19:04 mleslie * Added curvey geometry recognition to the jts connector. 2007-06-12 14:46 pramsey * Typo corrections from Michael Fuhr. 2007-06-08 10:28 mcayland * Applied Michael Fuhr's patch to use explicit text casts where required. Required for PostgreSQL 8.3 where many of the implicit casts to text have been removed. 2007-06-07 16:16 mleslie * Added relational function definitions that inline index operators for automagic index utilization. 2007-06-06 19:19 nbarker * Hibernate Spatial Criteria Queries and Dialect 2007-06-05 20:46 mleslie * Updated the docs to reflect the function name transition. 2007-06-05 20:45 mleslie * Reorganized the sqlmm function declarations to prevent duplication and confusion. 2007-06-04 23:06 mleslie * Added versions of functions with standard ST (Spatial Type) prefixes to any functions that were lacking them. Updated the regression tests to include the new functions. 2007-06-01 20:56 mleslie * Ongoing PIP trauma. Addressed the issue of points in line with a boundary segment, but not actually on it. Added appropriate unit tests. 2007-06-01 12:44 mcayland * Reduce 'LWGEOM_gist_joinsel called with arguments that are not column references' warning to DEBUG1; it's not really a problem, and in cases where people a lot of these types of queries, the logs get flooded with these NOTICEs. Per email from Flavio Perri. 2007-06-01 09:54 mcayland * Fixed bug #145 - RemovePoint Failure in the bugtracker. It was an off-by-one error in ptarray.c which caused the penultimate point to not be copied to the new geometry. 2007-06-01 07:01 mcayland * Fix broken docbook stylesheet search. AC_ARG_WITH only calls its contents when a --with-* option is specified, so the search would never be invoked in its current position. Moved the search into the second macro argument, so it is now invoked if no --with-xsl argument is specified, which I believe was the intended behaviour. 2007-05-31 13:18 mcayland * Add support for the upcoming release of PostgreSQL 8.3. From PostgreSQL 8.3, the internal structure of varlena datatypes has changed and so any references to the size of the varlena and its address must use the VARSIZE and SET_VARSIZE macros. Includes a #define in pgsql_compat.h so that SET_VARSIZE still works with the older PostgreSQL versions. Passes all regression tests under PostgreSQL 8.2 and PostgreSQL 8.3. Thanks to David Techer and Michael Fuhr for additional testing. 2007-05-28 15:34 mleslie * Added curve handling to getType, numGeometries, geometryN, dimension, exteriorRing, numInteriorRings, interiorRingN, closed (lwgeom_ogc.c) lwgeom_clone (lwgeom.c) and area. Added function ST_CurveToLine and ST_LineToCurve. Added regression tests for sql-mm geometries and related functions. 2007-05-22 22:10 mleslie * Added short-circuit calls for the point-in-polygon cases of disjoint and intersect calls. Added regression tests for the new short-circuits. 2007-05-14 18:04 mcayland * Bump SVN code version to 1.2.2SVN 2007-05-14 17:55 mcayland * Fix broken regress_proj expected results by removing the extra DELETE at the end of the file. 2007-05-14 17:51 mcayland * Remove GEOS C++ API support from PostGIS HEAD; it's been broken since 1.2.0 and so we require a minimum of GEOS 2.2.0 to compile and run PostGIS. Includes alterations to autoconf to display an error message during configure if the GEOS version is incorrect. Passes all regression tests with GEOS 2.2.3 and GEOS 3.0.0rc4 using GEOS CAPI. 2007-05-08 16:37 pramsey * Spelling fix 2007-04-02 21:17 pramsey * Small doco fix 2007-03-15 09:22 mschaber * aded PostGIS Dialect for Hibernate from Norman Barker 2007-03-09 19:34 mleslie * Bug 143 is once again dealt with, this time for good. 2007-03-09 18:30 mleslie * Rolling back a cure that killed the patient. 2007-03-09 00:33 mleslie * Bug 143 code fix and regression case. 2007-03-01 08:31 strk * * extras/template_gis/Makefile: Install 'defaults' file to $(DATADIR)$(prefix) 2007-02-28 17:39 pramsey * Remove minor typo 2007-02-26 09:03 strk * * regress/run_test: discard CONTEXT and DELETE lines from test outputs. Patch by Eduin Carrillo, sliglty modified to take precision into account: * regress/: Makefile, kml.sql, kml_expected: Regression test for asKML(). 2007-02-06 17:38 pramsey * Edits from Bruce Rindahl 2007-01-26 15:11 mcayland * Refine previous patch to use a different delimiter than : (!) for sed. This simplifies the Makefile and protects all the $*dir arguments from escaping issues under Win32. 2007-01-19 09:44 strk * * extras/template_gis/Makefile: escape $bindir to allow for colons in it's value (win32 issue). 2007-01-18 18:51 mschaber * finally really fixed javadoc build on Windows. Yes, that hack is ugly. Kudos to Marc Cave-Ayland. 2007-01-18 18:33 mschaber * further fix for javadoc build 2007-01-18 17:56 mschaber * fixed jdbc javadoc build 2007-01-15 10:48 strk * Patch by Michael Fuhr: * extras/template_gis/Makefile: quote grep argument for Solaris to work. 2007-01-12 20:28 pramsey * Change 'Postgis' to 'PostGIS' 2007-01-12 18:07 strk * Patch by Gerald Fenoy <djay@gentoo.org>: * configure.in: add --with-xsl switch. 2007-01-12 01:50 pramsey * 1.2.1 release prep 2007-01-11 01:40 mleslie * Added a length check to prevent the point in polygon shortcut from finding points contained within a zero length segment. 2007-01-11 01:39 mleslie * Fixed the COMPOUNDCURVE example to properly should the contained CIRCULARSTRING. 2007-01-08 10:48 mschaber * fixed 8.2 compatibility 2007-01-08 10:12 mschaber * hopefully fixed GCJ build 2007-01-05 00:52 strk * * GNUmakefile: bring in extra/template_gis for all rules. * extras/template_gis/Makefile: have 'install' also install manuals. 2007-01-03 17:28 kneufeld * initial load 2006-12-29 00:31 strk * * configure.in: fixed GEOS_LDFLAGS detection for older GEOS versions. 2006-12-29 00:26 strk * cleaned up Hard Upgrade manual section (was unreadable). 2006-12-27 04:58 devrim * Update spec file to 1.2.0 and fix many issues. Update RPM patches. 2006-12-22 11:28 mschaber * Added generation of JDBC javadoc zip file 2006-12-21 00:19 pramsey * Updated to 1.2.0 2006-12-20 20:43 strk * * regress/README: wrote info about adding regression tests (plus some ChangeLog formatting) 2006-12-20 18:47 kneufeld * Added fix to permit gist indexes to have more than 459 null geometries in a table 2006-12-20 18:44 kneufeld * Added test to fix that permitted gist indexes to have more than 459 null geometries in a table 2006-12-20 18:43 kneufeld * Added fix to permit gist indexes to have more than 459 null geometries in a table 2006-12-18 14:12 mschaber * Improved SRID handling in regression tests and added CoordinateArraySequence tests. 2006-12-18 13:04 mschaber * Added ChangeLog/News entries for recent commits 2006-12-18 12:58 mschaber * Fix multi-dimension handling in JtsBinaryWriter, thanks to Thomas Marti for the hints 2006-12-18 12:55 mschaber * Fixed Makefile for jts tests, commented debug options better 2006-12-15 11:00 strk * Patch by Eduin Carrillo: short circuit transform when source and target SRID are the same. 2006-12-15 10:54 strk * Added additional step for adding release marks in ChangeLog 2006-12-15 10:51 strk * marked 1.2.0 release 2006-12-15 10:48 strk * Patch by Eduin Carrillo <yecarrillo@yahoo.com>: * lwgeom/: Makefile, lwgeom_kml.c, lwpostgis.sql.in: New AsKML() function * doc/postgis.xml: document new AsKML function. 2006-12-13 17:50 mschaber * fixed 'hard upgrade' instructions in readme.postgis 2006-12-11 17:41 pramsey * Updated vers. # 2006-12-09 03:57 pramsey * Update version to corrent 1.2.0 version, and set news to correct version and date. 2006-12-06 02:00 mleslie * Updated with curved geometry definitions. 2006-12-06 00:30 mleslie * Added sections for SQL-MM and ArcSDE function ports. 2006-12-05 20:45 mleslie * Fixing some incomplete paths, and adding changes to the regress directory. 2006-12-05 20:41 mleslie * Added the previous changes for the curved geometry support. 2006-12-05 19:22 kneufeld * Added SQL/MM wrappers to existing PostGIS functions 2006-12-05 19:07 kneufeld * added a subset (only those implemented by ArcSDE) of the SQL/MM function prototypes and appended the file to lwpostgis.sql 2006-12-05 19:05 kneufeld * Moved common sql defines to their own header file. ie. IF USE_VERSION>72 ... 2006-12-05 11:00 mschaber * Added JTS shape + missing News message 2006-12-05 01:21 mleslie * Updated the documentation to include an SQL-MM types section. 2006-12-01 22:16 mleslie * Added typedefs and serialization/deserialization functionality for sql-mm defined curved geometry types. Added a point_in_polygon short-circuit for contains and within functions. 2006-11-22 10:42 mschaber * java/ejb3/src/org/postgis/hibernate/GeometryType.java Added Nullpointer Fix by Norman Barker 2006-11-20 12:59 strk * * utils/postgis_restore.pl (canonicalize_typename): canonicalize 'timezone .* time stamp' to 'timezone' (fixes bug #121) 2006-11-17 17:12 strk * Patch by "Antoine Bajolet" <antoine.bajolet@tdf.fr>: * lwgeom/lwgeom_gist.c: fixed 'directives may not be used inside a macro argument' error raised by some compilers. 2006-11-10 15:17 strk * * configure.in (geos detection): use $geos_prefix/lib when --ldflags is not supported by geos-config available. 2006-11-10 14:11 strk * Patch by Havard Tveite <havard.tveite@nlh.no>: * doc/postgix.xml (Hard Upgrade): add info about createdb params * utils/postgis_restore.pl: fix use of createdb params 2006-11-02 13:22 strk * * doc/postgis.xml: list setSRID bug fix in 'Bug fixes' section. 2006-11-02 11:48 mschaber * Added missing docs about setsrid() 2006-11-02 09:03 mschaber * fixed setSRID bug in JDBC ComposedGeom. 2006-11-02 08:06 strk * ready for 1.1.6 release 2006-11-02 07:55 strk * * lwgeom/lwgeom_api.c, lwgeom/wktunparse.c: cast -1 to a char to make some compilers happy about comparison with a char type. 2006-10-26 09:41 strk * Renamed CHANGES file to NEWS, updated references to it 2006-10-26 09:35 strk * Initial import of an automatic generated ChangeLog - all developers please manually edit this on each commit 2006-10-25 10:23 mschaber * fixed CAPI change that broke 64-bit platforms 2006-10-25 10:00 mschaber * updated changelog to reflect loader regression fix 2006-10-25 09:57 mschaber * Make regress test build loader and dumper as it needs them 2006-10-24 12:35 strk * use Z ordinate in reprojections 2006-10-19 12:01 strk * spatial_ref_sys.sql updated to EPSG 6.11.1 2006-10-14 14:22 mschaber * sanitized usage info output on loader/dumper 2006-10-14 09:26 mschaber * Cleaned up Version.config & co. 2006-10-13 15:56 mschaber * updated CHANGES and doc/postgis.xml in preparation of upcoming release 2006-10-13 15:35 mschaber * updated HOWTO_RELEASE to reflect version. 2006-10-13 14:18 mcayland * Updated CHANGES files to reflect the MingW (Win32) linker fix for pgsql2hp under PostgreSQL 8.2 2006-10-11 13:35 mschaber * Added hint about template_postgis to docs, thanks to Marc Cave-Ayland for contribution. 2006-10-11 11:19 mschaber * fix ARC regression test failures in loader 2006-10-11 10:45 mschaber * added note about odt to README, re-exported pdf 2006-10-11 10:00 strk * Fixed a bug in InsertLineStringWKT, also fixed some typos 2006-10-11 09:43 mschaber * added -S option and updated README to loader/dumper 2006-10-11 09:37 mschaber * bumped versions to 1.1.5 2006-10-09 17:22 mschaber * fix EJB3 replace Method for Hibernate 2006-10-09 17:12 mschaber * added EJB3Spatial.odt, fixed Normans contact mail 2006-10-09 16:33 mcayland * Remove extra PGFELIBS definition in one of the MingW specific sections since it was triggering a linker bug within MingW's gcc. This was the reason that compiling against PostgreSQL 8.2 beta 1 under MingW would produce pgsql2shp executables that would segfault. 2006-10-04 10:47 mschaber * fixed svn:ignore 2006-10-02 23:26 mschaber * Fix all Eclipse warnings in java code, small cleanup 2006-10-02 23:16 mschaber * First PLJava checkin. pljava needs some patches that are currently floating on pljava-dev to make it work, it seems that we're the first actual users of varlen UTD mappings in pljava. 2006-10-02 15:58 mschaber * fixed NullPointer exception in org.postgis.Geometry.equals() 2006-10-02 14:39 mschaber * added .settings to svn:ignore 2006-10-02 14:30 mschaber * Removed obsolete synchronisation from JTS. 2006-10-02 12:37 mschaber * fix bit width bugs in Docu 2006-09-27 15:50 mschaber * Added further jdbc Todo issues. 2006-09-27 12:37 strk * removed incompatible pointer type warning 2006-09-27 08:37 mschaber * fix erroneously changed build.xml 2006-09-27 08:36 mschaber * removed hyperflous jar file 2006-09-27 08:23 strk * lower default verbosity level 2006-09-27 08:22 strk * fixed to work with SVN 2006-09-27 07:50 strk * updated tag step 2006-09-27 07:39 strk * updated release notes 2006-09-27 07:29 strk * version set to 1.1.4 (stripped CVS suffix 2006-09-25 08:27 strk * Encode pgsql2shp process pid into temporary table name, to reduce likelyhood of name clashes. 2006-09-22 14:51 mschaber * fixed typo, updated CHANGES 2006-09-20 09:03 mschaber * added ejb3 tutorial 2006-09-18 13:21 strk * Applied patch by Michael Fuhr <mike@fuhr.org>: Most are spelling errors, but in one case I removed the word "symmetric" from the description of the Difference() function (SymDifference() is symmetric; Difference() is not). 2006-09-18 09:16 strk * Fixed regress tests to pass with GEOS-3.0.0 2006-09-13 20:17 mschaber * updated readme to java directory layout change 2006-09-09 16:32 pramsey * Added fix for null dates that are encoded as '' instead of 00000000. 2006-09-07 17:37 strk * More fixes for mixed declarations and code 2006-09-07 17:03 strk * Declare variables at start of blocks... 2006-09-06 11:16 strk * removed duplicated function definition 2006-09-05 15:22 mschaber * updated jdbc Makefile to new directory layout 2006-09-05 15:16 mschaber * Java/JDBC directory reorganization 2006-08-30 08:46 mschaber * added EJB2 support POC 2006-08-30 08:39 mschaber * fixed README about droped trove4j dependency 2006-07-28 13:11 strk * added regress/lwpostgis.sql to svn:ignore list 2006-07-28 13:08 strk * updated 2006-07-28 13:07 strk * Added tests for makeline, makebox2d and makebox3d 2006-07-28 13:07 strk * Fixed small typo in debugging message, replaced custom SRID check with errorIfSRIDMismatch() function in LWGEOM_makeline 2006-07-28 13:06 strk * Added SRID match check in MakeBox3D, fixed small typo in error message 2006-07-28 13:05 strk * Added SRID match check in MakeBox2D 2006-07-27 15:06 strk * Marked shapefiles as binary, corrected accidentally mangled ones 2006-07-27 09:44 mschaber * typo fix in comment 2006-07-26 18:44 pramsey * Changed Refractions mailing address. 2006-07-26 17:21 pramsey * Re-order repository 2006-07-26 17:21 pramsey * Re-order repository 2006-07-25 20:16 strk * Fixed bug in collect() function discarding SRID of input 2006-07-25 18:24 mschaber * Reworked jdbc2 makefile 2006-07-21 21:21 pramsey * Add official "adaptions" to the files to make them suitable for submission to the OGC compliance process. 2006-07-19 13:31 mschaber * fixed checkSrid method in JtsBinaryWriter 2006-07-19 09:45 mschaber * Fix setSridRecurse function in JTS 2006-07-18 18:13 mschaber * fix compiler warning due to deprecated method 2006-07-18 18:13 mschaber * fix SRID handling in JTS code 2006-07-07 13:56 strk * Applied Michael Fuhr patches: Eliminate the warnings that escape_string_warning complains about. The patches change \' (backslash single-quote) to '' (single-quote single-quote) and replace a couple of other escapes with calls to chr(). 2006-07-02 23:41 strk * Fixed support for PostgreSQL 8.2 (gist) - patch by Michael Fuhr <mike@fuhr.org> 2006-06-30 21:29 strk * Prepared for 1.1.3 release: release notes, changes, version. Release date set for today (2006-06-30) 2006-06-26 01:02 strk * replaced ROLLBACK with COMMIT in psql output to hide differences with 7.4 and lower pgsql versions. 2006-06-26 00:56 strk * Fixed Invalid Memory Alloc request size error on GEOS=>LWGEOM conversion for EMPTY geometries. Removed warnings when built with POSTGIS_DEBUG enabled. 2006-06-26 00:41 strk * Added debug lines in LWGEOM_affine, fixed some compiler warnings for build with POSTGIS_DEBUG enabled. 2006-06-26 00:40 strk * qualified all geometry arguments. 2006-06-25 23:59 strk * Added Long Transaction Support routines, dox and regress test. 2006-06-25 23:45 strk * Fixed the lc_messages failure by avoiding attempts at setting it when run against a postgresql version < 8.0. Also fixed a path in a message from run_test. 2006-06-25 22:53 strk * Release Notes moved to an higher depth to reduce ToC noise. 2006-06-25 22:50 strk * Fixed HTML output rules 2006-06-25 22:33 strk * Add getTransactionID() stored procedure to support pgsql 7.3 (not tested against 7.2) 2006-06-24 01:08 strk * Removed compiler warnings (and more requested) 2006-06-24 00:11 strk * Added spaces between parameters ref and operator, as pgsql 7.3 chokes otherwise ($1*$2 becomes $1 * $2) 2006-06-23 23:37 strk * Added EnableLongTransactions() and DisableLongTransactions(). 2006-06-23 21:56 strk * Fixed a couple of bugs, added a simple test script, cleaner error messages and compile-time support for unauthorized row updates behaviour (abort, skip). 2006-06-19 10:42 strk * Removed -0 values from polygon doubles 2006-06-18 11:29 strk * Changed -e test with -f, for Solaris support 2006-06-17 11:46 strk * removed spurious newline 2006-06-17 11:44 strk * Fixed portability issues in the new run_test code, added loader test for all supported shapefile types 2006-06-16 14:18 strk * Aliased 'test' rule as 'check', to conform to common practice. 2006-06-16 14:13 strk * New regress test cases and support for loader/dumper. 2006-06-16 14:12 strk * - BUGFIX in pgsql2shp successful return code. - BUGFIX in shp2pgsql handling of MultiLine WKT. 2006-06-13 10:20 strk * Updated template_gis Makefile to work with older debian sarge (stable). Patch by Alex Bodnaru. 2006-06-09 06:03 strk * Fixed bug in PGISSCRIPT variable (provided by Alex Bodnaru) 2006-06-05 17:24 strk * Updated misleading documentation for Segmentize() function 2006-06-02 16:59 strk * Fully supported georeferencing in chip drawing ops (must still tweak edge cases) 2006-06-01 16:57 strk * Fixed lwgeom drawing primitives to honour georeferencing. 2006-06-01 07:07 strk * Added "fmgr.h" include, for PG_MODULE_MAGIC definition 2006-06-01 06:58 strk * Added magic block ctor for 8.2 compatibility 2006-06-01 06:56 strk * Don't link pgsql2shp to more libs then required. 2006-05-31 08:58 strk * Added support and info for CHIP.datatype 7,8,107 and 108. They were not documented but used by CHIP canonical input function. 2006-05-31 06:43 strk * Imported template_gis utilities contributed by Roberto Boati and Alex Bodnaru. 2006-05-30 17:19 strk * Added some primitives for CHIP management + rendering for points and lines 2006-05-30 17:17 strk * Fixed bug in CHIP input routine failing on uncompressed 1x1 integer chip inputs 2006-05-30 08:47 strk * added copyright header 2006-05-30 08:38 strk * Added some missing copyright headers. 2006-05-23 09:48 strk * NEW AsHEXEWKB(geom, XDR|NDR) function + documentation 2006-05-22 15:29 strk * Moved 'measures' query into a specific file, added a test for bug #108 2006-05-22 14:57 strk * Set version to 1.1.3CVS 2006-05-22 14:23 strk * Transform a SRID==0 from GEOS to a SRID=-1. 2006-05-22 13:08 strk * Fixed a bug in distance2d_poly_poly() never really comparing ring distances between 1st ring of 1st geom and all rings of second one. 2006-05-22 12:10 strk * Added 'with oids' specification to create table (oids are used for the test). 'With oids' was available in postgresql 7.3.4 so we should not be highering the requirements for topology. Suggestion from Alex Bodnaru. 2006-05-22 11:17 strk * Applied cleanups by Alex Bodnaru 2006-05-22 11:02 strk * New DumpRings(polygon) function + docs 2006-05-22 10:58 strk * fixed errors in DEBUG builds 2006-05-22 10:38 strk * Added usage comment about lwpoly_construct() 2006-05-17 15:52 strk * Added Bruce Rindahl in the credits hall 2006-05-17 15:32 strk * Added note about doc generation change 2006-05-17 13:11 strk * DocBook version set to 4.3 (4.2 did not have <code> tag) Thanks to Mateus Loskot for the tip! 2006-05-17 13:04 strk * Changed PDF manual generation rule to use db2pdf from docbook-utils package. Input does not validate, thus the rule doesn't succeed yet, but removing <code> tags is enough to complete. 2006-05-17 12:26 strk * Added note about pdfxmltex being provided by xmltex package 2006-05-17 12:25 strk * Added check for pdfxmltex availability before attempting to use it 2006-05-17 07:52 strk * Additional bbox tests for transcale, rotateX and rotateY 2006-05-16 19:11 strk * Added tests for translate and scale bbox computation 2006-05-16 17:09 strk * BUGXFIX in affine() failing to update bounding box 2006-05-11 14:24 strk * Update to 1.1.2 by Laurent WANDREBECK 2006-05-11 09:41 strk * added postgis.fo and postgis.pdf 2006-05-11 09:41 strk * changed single-file html production to 'make html', simpler 2006-05-10 13:40 strk * Added notes about requirements for dox generation, cleaned up Makefile 2006-05-10 10:47 mschaber * Small typo fix in comment 2006-05-10 10:37 strk * Removed >/dev/null redirection of pdfxmltex command, to see what's going on 2006-05-09 13:06 mschaber * Fixed JtsGeometry.equals() Imporoved Geometry setter/getter updated postgis version 2006-05-04 15:19 strk * Support for Tru64 build (bug#104) 2006-05-03 08:33 mschaber * added eclipsebin to cvsignore 2006-05-03 08:30 mschaber * Added regression tests for OGC conformant multiPoint parsing, updated CHANGELOG 2006-05-03 08:18 mschaber * Added test case for scientific notation 2006-04-26 14:42 mschaber * fixed typo in regression test online help 2006-04-26 12:19 strk * Added --with-geos-libdir and --with-proj-libdir configure switches 2006-04-18 16:57 strk * Fixed invalid C++ style comment 2006-04-18 16:56 strk * Used ad-hoc AC_PROG_YACC for yacc detection 2006-04-18 14:09 strk * Limited text field size to 255 (bug #84) [will eventually provide a switch to support wider fields ] 2006-04-18 12:36 strk * updated 2006-04-18 12:30 strk * Added test for wkt parser 2006-04-18 12:30 strk * WKT parser: forbidden EMPTY elements in non-collection multigeoms. 2006-04-18 10:28 strk * Cleanly handled deserialization of points with non-point input by raising an error. Made other simple geoms deserializers errors of this kind be consistent. Added a check in lwgeom_typename() to avoid memory corruption when input geometrytype is out of range. 2006-04-18 09:19 strk * Added check for libiconv_open (for MingW) - patch provided by Mark Cave-Ayland 2006-04-18 09:16 strk * Substituted bzero() use with memset() 2006-04-18 09:10 strk * Applied patch by Mark Cave-Ayland allowing in-place regression tests to be run under MingW (Win32) 2006-04-10 08:19 strk * Added support for printing argument geoms on union failures within unite_garray() loop. 2006-03-29 09:25 strk * removed obsoleted items 2006-03-29 09:19 strk * Set release version and date 2006-03-29 09:14 strk * Prepared for 1.1.2 release 2006-03-28 08:39 strk * Mangled Self-intersection message to remove 'at or near point' so that test works with both GEOS 2.x (w/out point spec) and 3.x (with point spec) 2006-03-27 09:33 strk * Used a larger grid for buffer() test, to account for rounding changes between GEOS-2.2 and GEOS-3.0 2006-03-13 10:54 strk * Applied patch from Mark Cave Ayland embedding access control for the estimated_extent functions. 2006-03-13 10:41 strk * added enforceRHR fix 2006-03-12 17:20 pramsey * Fix isccw to return correct ccw answer. 2006-03-12 17:13 pramsey * Fix for enforceRHR to actually enforce rather than just reverse. (Note that seems to be enforcing CW RHR rather than CCW RHR.) 2006-03-08 18:21 strk * Added pg_config --libs to PGFELIBS as a workaround for systems that doesn't automatically detect dependencies 2006-03-01 09:10 strk * Fixed 'clean' rule to succeed also when tree already cleaned (rm -f) 2006-02-24 20:23 pramsey * Minor error in install instructions 2006-02-23 11:48 mschaber * documented affine(), rewrote transscale() to use affine() 2006-02-22 14:06 strk * Added affine() internal function. Provided rotate{Z,X,Y}() internally using affine(). Made scale() and translate() internally use affine(). Obsoleted transscale() function. Fixed a bbox-related bug in transscale() Added a test for affine transformations. 2006-02-15 08:38 strk * Qualified args of difference() to avoid clashes with other packages 2006-02-10 10:58 strk * Made it a single transaction 2006-02-10 10:57 strk * Removed intermediate VACUUM 2006-02-06 20:04 mschaber * fixed srid handling in jts for composed geometries - this had prevented 'inner' geometries with no given srid from inheriting the srid from outer collection. 2006-02-06 11:16 strk * Added uchar typedef 2006-02-06 11:12 strk * uint32_t typedef moved back from wktparse.h to lwgparse.c and wktunparse.c 2006-02-06 11:09 strk * added snaptogrid behavior 2006-02-03 20:53 strk * Swapped stdint.h (unavailable on Solaris9) with inttypes.h 2006-02-03 09:52 strk * Changed int4 typedefs to use POSIX uint32_t 2006-02-02 04:46 pramsey * Updated maintainers info. 2006-02-01 22:15 strk * Made regress/run_test create and drop it's regress database unless otherwise specified using --nocreate and --nodrop switches. 2006-02-01 20:48 strk * Portable tests for docdir and datadir, comments fixed. Thanks to Havard Tveite for pointing out. 2006-01-29 13:54 strk * Fixed bug in SnapToGrid() bbox computation. Previous policy (WHEN SIMPLE) turned out to be non-simple, so this has been changed to TAINING. Bbox will then be recomputed by scanning output coordinates iff input had a bbox cache. AUTOCACHE_BBOX define (the default) will still force a computation of output box if worth it. Regress tests added for the case reported on postgis-users Run of regress tests do not require postgis install anymore. The library build in source tree will be used for this purpose. Version bumped to 1.1.2 and CHANGES file updated. 2006-01-23 00:13 strk * Set version to 1.1.1, edited 1.1.1 Release Notes chapter in manual and set release date (2006-01-23). 2006-01-22 23:09 pramsey * Fix for bug 10, SRID 28992 incorrect 2006-01-21 08:40 strk * Separated 'export' from assignment, for Solaris support - reported by Michael Fuhr 2006-01-19 19:19 strk * Updated documentation for line_substring() and line_interpolate_point() 2006-01-19 19:13 strk * Added a couple of line_interpolate_point tests 2006-01-19 19:11 strk * Z and M interpolation in line_interpolate_point() 2006-01-19 18:26 strk * Made line_substring() handle corner case of start/end having the same value. A point is returned in that case. 2006-01-19 18:17 strk * Added more regress tests for line_substring 2006-01-19 18:17 strk * Added Z and M interpolation in ptarray_substring(), fixed some corner-case bugs 2006-01-19 18:16 strk * Added interpolate_point4d() general function in API 2006-01-19 18:15 strk * Added -v switch to show differences inline 2006-01-18 21:06 strk * Forced lc_messages to be 'C' during regress tests 2006-01-18 10:19 strk * Fixed out-of-bound condition in ptarray_substring during copy of unaltered points. Added regress test for the case (postgis-devel/2006-January/001951.html) 2006-01-17 14:53 strk * Fixed $datadir and $docdir paths to support postgresql convention of adding 'postgresql' component IFF neither 'pgsql' nor 'postgres' already appear in the path. 2006-01-17 08:37 strk * Added postgis_restore.pl fix 2006-01-17 08:36 strk * Commented out debugging premature exit left from last review 2006-01-16 10:42 strk * Added support for Bool and Date DBF<=>PGIS mapping 2006-01-16 10:10 strk * Fixed default pgsql prefix to /usr/local/pgsql (default since pgsql 7.2) 2006-01-15 22:56 strk * Fixed handling of pg_config --bindir 2006-01-13 09:11 strk * Fixed bug in ptarray_locate_point() - added regress test for specific case 2006-01-12 12:26 strk * Fixed bug blessing all GEOMETRYCOLLECTIONS to MULTIPOLYGONS in postgis->GEOS converted trough C-API 2006-01-10 16:38 mschaber * Added NumInteriorRing(geometry) alias function 2006-01-09 16:40 strk * ISO C90 comments, signedness mismatch fixes 2006-01-09 15:55 strk * ISO C90 comments (finished in lwgeom/) 2006-01-09 15:12 strk * ISO C90 comments 2006-01-09 15:11 strk * Removed variable-sized array and fixed comments as for ISO C90 requirements. 2006-01-09 15:09 strk * Added simplify() test unit 2006-01-09 14:43 strk * ISO C90 comments, indenting 2006-01-09 12:56 strk * Proc upgrade requirement message made more clear. 2006-01-09 12:55 strk * Removed variable-sized array forbidden by ISO C90. 2006-01-09 12:39 strk * C++ style comments removed, fixed return from void function. 2006-01-09 12:36 strk * Changed C++ style comments to ISO C format 2006-01-09 12:30 strk * Changed C++ style comments to ISO C ones. 2006-01-09 12:17 strk * Added Solaris 2.7 and MingW support improvements item 2006-01-09 11:48 strk * Fixed "strict-aliasing rule" breaks. 2006-01-09 11:43 strk * Found another (faster) way to avoid breaking "strict-aliasing rules" 2006-01-09 11:05 strk * Removed POINT4D=>POINT2D cast raising GCC warning 2006-01-09 10:56 strk * Changed "! test" to "test !" and "-e" to "-f" for Solaris compatibility. 2006-01-09 10:42 strk * Changed all C++ style comments to ISO C ones. 2006-01-08 15:02 strk * Added lwpostgis_upgrade.sql 2006-01-07 10:18 strk * Changed $PWD uses with `pwd` (required for Solaris 2.7) 2006-01-05 15:01 strk * More portable (hopefully) use of quotes and backticks 2006-01-05 00:26 chodgson * rollback to contain cast 2006-01-05 00:19 chodgson * 1.12 with changes from 1.11 integrated 2006-01-05 00:07 chodgson * Recommitted with changes from 1_34 integrated 2006-01-04 21:37 chodgson * Added function optimistic_overlap in order to support TerrainServer. Note that optimistic_overlap existed in postgis prior to 1.0 but was removed. The included version is a hack to work with the newer lwgeom structs 2006-01-04 21:21 chodgson * Modified lwgeom2 = ... line in LWGEOMFromWKB function; removed the (uchar *) cast 2006-01-04 21:16 chodgson * Added the CHIP_send function which enables Postgres 8.0 to send a binary CHIP 2006-01-01 02:30 strk * Added missing include for definition of unparse_WKB() 2006-01-01 02:19 strk * Dropped unused box2df_to_box() and box_to_box2df() functions. Added box_to_box2df_p() function to complement exiting box2df_to_box_p(). 2005-12-31 15:11 strk * Fixed reference to PostgreSQL "contrib" directory (no more required) 2005-12-31 14:57 strk * Fixed "possibly uninitialized" warning in box2df_to_box3d 2005-12-30 18:14 strk * Fixed all signedness warnings 2005-12-30 17:40 strk * Moved PG_LWGEOM WKB I/O and SRID get/set funx from lwgeom_api.c to lwgeom_pg.c. Made lwgeom_from_ewkb directly invoke grammar parser rather then invoke the PG_LWGEOM-specific function. Cleaned up signedness-related and comments-related warnings for the files being committed (more to do on other files) 2005-12-28 18:43 devrim * Removed unused patch 2005-12-28 18:40 devrim * Lots of fixes for 1.1 2005-12-21 18:45 strk * Removed awk usage, --with-template is detected during the single pg_config --configure scan 2005-12-21 13:18 strk * Changed $() constructs to "``" ones, for portability 2005-12-21 12:12 strk * Raised a warning on pj_errno==-38 (a nodatum transform is attempted before giving up) 2005-12-20 09:17 strk * Used more portable sed syntax, submitted by Michael Fuhr. 2005-12-20 09:06 strk * Fixed inconsistency between docs install/uninstall paths 2005-12-19 20:33 strk * Fixed eprefix (bindir) use 2005-12-19 20:23 strk * Dropped `liblwgeom' dependency from 'test' rule 2005-12-19 15:07 strk * Allowed for overriding of --datadir. reworked pg_config --configure parsing to make a single scan. Fixed mishanlding of --prefix 2005-12-19 12:26 strk * make regress => make test 2005-12-19 10:39 strk * used a consistent construct for out_and_err redirect, added rule to make [eE][-+]0+[0-9]+ become e[-+][1-9]+ 2005-12-19 10:17 strk * Applied patch for MingW support (buffering and INF representation problems) 2005-12-19 09:43 strk * Fixed uninstall rule for scripts 2005-12-16 16:53 strk * fixed iconv check 2005-12-16 16:47 strk * Added support for mixed libiconv/iconv 2005-12-16 15:07 strk * Added make_dist.sh argument. 2005-12-16 11:55 strk * Almost done with closure 2005-12-16 11:53 strk * Added Carl Anderson to release-specifi credits section (forgot, who know how many else) 2005-12-16 11:14 strk * Edited release notes in manual, set release date to 2005/12/21 (if everything goes file) 2005-12-16 10:06 mschaber * small README improvements 2005-12-16 09:36 strk * Added installed procs version when proc upgrade needed 2005-12-16 09:32 strk * Added release procedure and Versioning rationale. 2005-12-16 08:59 strk * lwpostgis_upgrade.sql installed by install and removed by uninstall, fixed path info for lwpostgis.sql install. Stripped CVS from version strings and added note about SO/REL versions being the same. 2005-12-16 08:56 strk * Added required typinfo include 2005-12-16 08:38 strk * Simplified top warning about upgradability of changes. 2005-12-16 08:37 strk * Added dependency of postgis_proc_upgrade.pl in lwpostgis_upgrade.sql rule 2005-12-16 08:33 strk * Fixed version checker to only use Major to compare 2005-12-16 02:08 strk * Reverted use of $(shlib_major) to $(shlib). Since lwpostgis_upgrade.sql is always enough to rebind, and also required... 2005-12-16 01:48 strk * Added comment about the use of postgis_lib_version in version checker (last commit log was incomplete) 2005-12-16 01:41 strk * Unified SCRIPTS, LIB and RELEASE versions for the sake of simplicity. postgis_scripts_released() will return the same as postgis_lib_version() postgis_scripts_installed() return still the same numbers but as written in the database at the time of lwpostgis.sql sourcing. 2005-12-16 01:35 strk * Added notes `bout postgis_scripts_released(), postgis_scripts_installed() and postgis_version(). Copied soft upgrade description from README file - removed most references about DBPROC/RELPROC and the like. 2005-12-15 23:57 strk * perl availability check by ./configure (sorry, you'll need it from now on) 2005-12-15 23:52 strk * Added note about jdbc/ drop and PgSQL source dependency relief 2005-12-15 23:49 strk * Removed obsoleted code 2005-12-15 23:46 pramsey * Remove qandasetdiv tags and fix numbering... 2005-12-15 23:28 strk * - Made postgis_version() a C function w/out changing output. - Moved postgis centroid() version (neither GEOS nor JTS) from lwgeom_functions_basic.c to lwgeom_nojts.c (fails far less times with "redefinition of centroid" errors.) - Made lwpostgis_upgrade.sql build by default (must add a check for perl availability in ./configure.in) 2005-12-15 23:17 pramsey * Wording changes here and there. 2005-12-15 22:50 strk * Updated Upgrading section 2005-12-15 19:11 strk * back to single full package 2005-12-15 18:34 strk * Switched HARD/SOFT upgrade and removed HACK upgrade sections. 2005-12-15 18:30 strk * Added item for 1.1 closure 2005-12-15 15:18 strk * Added things to do for 1.1.0 closeup 2005-12-15 09:28 strk * Infinite->Infinity 2005-12-15 01:27 strk * Added PROJ version in output - would change the whole thing to postgis_full_version() if it only fit into 80 cols 2005-12-15 01:21 strk * Made PROJ test be run only if USE_PROJ=1 2005-12-15 01:19 strk * Moved GEOS/JTS function from regress to ogc test 2005-12-15 01:07 strk * Removed call to replace(text,text,text) in regress.sql (unsupported by pgsql 7.2) Used sed in run_test to Transform Infinite to inf and Inf to inf 2005-12-15 00:49 strk * Splitted SCRIPTS_VERSION in MAJOR,MINOR,MICRO 2005-12-15 00:47 strk * 'IMMUTABLE STRICT' -> '_IMMUTABLE_STRICT' fix for new polygon ctors 2005-12-15 00:28 strk * typo fixed 2005-12-14 18:56 strk * Removed rectangle-level locking (DONE) 2005-12-14 18:45 strk * Dropped 1.1.0 specific section - all pending items dumped to 'other random items' 2005-12-14 18:44 strk * Typo fixed (dumber->dumper) - was tempted to keep it ;) 2005-12-14 18:34 strk * Reintroduced revised INSTALLATION, UPGRADE, USAGE. Added REQUIREMENTS, CONFIGURATION and TESTING. UPGRADE still requires some cleanup (IMHO). 2005-12-14 15:40 strk * Removed most info, added reference to PostGIS manual instead 2005-12-14 15:29 strk * Removed postgis_geos_version.h - should be under lwgeom/ 2005-12-14 15:23 strk * - Create two packages: postgis-$$.tar.gz and postgis-regress-$$.tar.gz - New syntax: -- postgis-cvs.tar.gz postgis-regress-cvs.tar.gz sh make_dist.sh -- postgis-1.1.0.tar.gz postgis-regress-1.1.0.tar.gz sh make_dist.sh 1.1.0 2005-12-14 14:14 strk * Removed obsoleted --param shade.verbatim param from xsltproc call, moved common flags on top file. 2005-12-14 13:43 strk * fixed closing tag mismatch 2005-12-14 13:42 strk * Added release version in abstract, updated INSTALL section to reflect autoconf-based layout 2005-12-14 12:24 strk * Nicely handled missing requirements for docs build 2005-12-14 11:13 strk * Snapped buffer() output to a grid of 1.0E-14 grid to account for slightly different floating number behaviours on Solaris. Normalized Infinity to inf to account for different libc outputs. 2005-12-14 00:26 strk * Regression tests output made much more concise 2005-12-13 23:25 strk * removed unused variable 2005-12-13 22:04 strk * Added GEOS/JTS version info when available 2005-12-13 21:16 strk * Fixed a misnamed test 2005-12-13 19:01 strk * Renamed ReplacePoint() to SetPoint() 2005-12-13 18:39 strk * Added RemovePoint() and ReplacePoint() to complete Geometry editiong function. Added regress tests for them. 2005-12-13 18:19 strk * Fixed bug in lwgeom_as_anytype cast funcions 2005-12-13 14:19 strk * LRS section repopulated 2005-12-13 12:51 strk * Moved out of LRS section: line_locate_point back (to Misc), line_substring and line_interpolate_point (to Geometry constructors). Added more cross-references. 2005-12-13 12:12 strk * updated 2005-12-12 20:41 strk * Handled common invokation mistake (accept trailing .sql in test names) 2005-12-12 20:31 strk * Changed math statements to be compatible with solaris shell, fixed typo 2005-12-12 17:40 strk * - Fixed Z presence detection in GEOS funcions (C++ and C wrappers). - NEW BuildArea(any_geometry) function - NEW OGC BdPolyFromText(linestring_wkt, srid) function - NEW OGC BdMPolyFromText(linestring_wkt, srid) function - Updated postgis manual and added regression tests for new functions. - Reworked regress test runner to be more succint and report a summary of test results 2005-12-12 11:35 strk * Avoided detect_geos_version rule when using the GEOS C-API 2005-12-12 11:33 strk * Wrapped grid_print declaration and definition in VERBOSE block, to avoid compiler warning about it being unused 2005-12-10 15:46 strk * Fixed error message typo 2005-12-09 20:43 pramsey * Added credits for GEOS and Proj4. 2005-12-09 15:14 strk * Organized Change log for 1.1.0 2005-12-09 12:02 strk * Added Charlie Savage in credits 2005-12-09 12:00 strk * Plugged memory leaks in Polygonize(). 2005-12-09 10:14 strk * Added a couple of polygonize tests 2005-12-07 12:22 strk * Fixed handling of CAST for 8.0.0 restore. Type name canonicalization function defined separately. 2005-12-07 09:05 strk * Added note about OID column drop in pre 8.1 to 8.1+ upgrades 2005-12-06 15:42 devrim * Label the spec file as 1.1.0 2005-12-06 15:37 strk * Updated SnapToGrid documentation 2005-12-06 15:26 devrim * Update to 1.0.6 2005-12-06 15:09 strk * Updated after release 1.0.6 2005-12-06 14:56 strk * Added check for successfully postgis installation before running tests 2005-12-06 14:51 strk * Added user-reported intersects() test 2005-12-02 15:11 strk * Had regress_ogc test skipped if no GEOS nor JTS support is compiled in 2005-12-02 14:56 strk * Added missing rules 2005-12-02 14:52 strk * Copied PostgreSQL top-level Makefile for use by systems in which make != gmake 2005-12-02 14:35 strk * Fixed support for PGSQL version 7.2 and 7.3 2005-12-02 14:15 strk * Fixed SnapToGrid output expectance (higher dims no more discarded) 2005-12-02 13:21 strk * Added note about new SnapToGrid function 2005-12-02 13:16 strk * Added SnapToGrid(geom, point_offset, xsz, ysz, zsz, msz) 2005-12-02 10:46 strk * Added LWGEOM_snaptogrid_pointoff and gridspec utility funx 2005-12-02 09:12 strk * Added note about SnapToGrid bbox computation 2005-12-02 09:07 strk * Fixed output box2d computation in SnapToGrid (was working with float, changed to work with doubles and call appropriate box3d->box2d converter). 2005-12-02 09:06 strk * Added PARANOIA_LEVEL checks in box3d<->box2d converters 2005-12-02 08:26 strk * Quoted grep pattern (Solaris' shell threats carets as pipes). Added a sleep 1 before dropping DB (to avoid "database being accessed" errors). 2005-12-01 22:29 strk * Changed back 'tests' to 'test' 2005-12-01 19:25 strk * Added note about SnapToGrid and higher dims 2005-12-01 19:09 strk * Exported DYNPTARRAY struct and accessor funx (from _lrs.c). Rewritten ptarray_grid() to allow snapping of all dimensions and never discard input ordinates. 2005-12-01 17:14 strk * Fixed missing LineMerge symbol when built against geos-1.0 2005-12-01 16:21 strk * Added SRID mismatch checks in GEOS and JTS wrappers 2005-12-01 16:19 strk * Updated comment about GEOS C-API (starts with 2.2.x) 2005-12-01 15:53 strk * Renamed clean: to cleanup:, provided empty clean: to make things work from toplevel makefile. 2005-12-01 15:50 strk * Fixed handling of bogus geos-1.0 2005-12-01 14:07 strk * Skipped checks of SQL command outputs (INSERT,UPDATE,CREATE,DROP). Cleaned up postgis_reg after tests run. 2005-12-01 13:53 strk * Fixed lwgeom_segmentize2d() to always return a clone 2005-12-01 13:49 strk * Fixed short-allocation in lwcollection_clone() 2005-12-01 13:37 strk * Fixed test to cleanup after run 2005-11-30 21:02 strk * Added missing proj tests 2005-11-30 18:24 strk * Fixed segfault on addPoint() with invalid offset 2005-11-30 18:24 strk * Fixed error message on non-readable expected file 2005-11-30 17:04 strk * Added Alex Mayrhofer to list of contributors 2005-11-30 16:59 strk * Moved 8.2 support to 1.0.6 section 2005-11-30 16:57 strk * Added proj tests, curtesy of Alex Mayrhofer 2005-11-29 22:40 strk * CAPI usage triggered starting at geos-2.2 2005-11-29 10:05 strk * Added locate_among_measure() and locate_between_measures() dox. Updated CHANGES adding new LRS funx and new transform() code. 2005-11-29 09:00 strk * Updated documentation for X,Y,M and Z 2005-11-28 16:01 strk * Fixed a segfault on geom_accum(NULL, NULL) condition 2005-11-28 15:59 strk * Added geom_accum(NULL,NULL) test 2005-11-28 15:06 strk * Estrapolated SERIALIZED_FORM doc from liblwgeom.h and put it into SERIALIZED_FORM file. Cleaned up header files so to avoid C++ style comments and -pedantic errors. (more to come on this front) 2005-11-28 11:49 strk * Added bbox cache handling fix in 1.0.6 2005-11-28 11:48 strk * minor cleanups and comments 2005-11-28 11:31 strk * memory release in force_collection 2005-11-28 11:27 strk * Added force_collection test 2005-11-28 11:20 strk * Fixed ExteriorRing() and Segmentize() handling of bbox cache 2005-11-28 11:04 strk * Added ExteriorRing and Segmentize tests 2005-11-25 17:22 mschaber * java2d and doc improvements 2005-11-25 16:14 strk * Added support for PostgreSQL head, as suggested by Michael Fuhr. Cleaned up includes. 2005-11-25 16:11 strk * Wrapped PROJ4SRSCacheCheck function in ifdef MEMORY_CONTEXT_CHECKING block, to avoid compiler warning 2005-11-25 15:43 strk * Added unite_garray() test 2005-11-25 15:43 strk * Added database version info 2005-11-25 15:34 strk * Fixed expected ERROR and NOTICEs 2005-11-25 15:28 strk * Fixed 0-size allocation in lwcollection deserializer (only matters when backend is compiled with --enable-cassert) 2005-11-25 14:14 strk * Added postgis library version and builddate, to make sure the existing database being used is equipped with the library we are willing to test. 2005-11-24 20:20 strk * Added note about documentation updates requirement (will anyone read it before 1.1.0 ? ;) 2005-11-24 20:18 strk * Fixed sizeof(GEOSGeom) calls, minor debugging improvements. 2005-11-24 20:11 strk * Added -N and -g documentation 2005-11-23 15:54 strk * Changed X(), Y(), M() and Z() to raise an error if input is not strictly a point (must update documentation) 2005-11-23 15:30 strk * Changed locate_between_measures() to return simpler types 2005-11-23 14:52 strk * Changed M() and Z() to return NULL when input doesn't have the requested dimension. Updated regress tests with a few of these cases. 2005-11-23 14:44 strk * Added usage dox and check for required input files 2005-11-23 14:38 strk * Reworked regress tests to avoid multiple database creations 2005-11-23 13:48 strk * fixed bug in points duplication check of dynptarray_addPoint4d 2005-11-23 13:46 strk * Added a few regression tests for LRS functions 2005-11-23 13:19 strk * Initial implementation of locate_among_measure() and locate_between_measures() 2005-11-22 21:29 strk * Fixed a bug in getPoint{3dm,3dz,4d}_p() api calls automatically fixing bugs in force_{3dm,3dz,4d}() user functions, for which tests have been added in regress dir. Wrapped paranoid checks in PARANOIA_LEVEL preprocessor blocks. Updated release notes and CHANGES file. 2005-11-22 19:59 strk * Fixed debugging printf call 2005-11-18 17:37 mcayland * Add fix for PG 8.1 calling the MemoryContext check method when compiled as a debug build 2005-11-18 10:48 strk * fixed double release of bbox cache memory 2005-11-18 10:16 strk * Removed casts on lwalloc return. Used varlena macros when appropriate. 2005-11-17 23:35 mcayland * Removed duplicate debugging code used to reset the cache when it was full 2005-11-17 23:25 mcayland * Fixed assertion bug and an off-by-one palloc() in the new transform() code 2005-11-17 17:49 mcayland * Reimplement transform() using a cache that maintains SRS and PROJ.4 library handles throughout each portal to speed up reprojections on large datasets 2005-11-16 13:04 mschaber * small comment improvements in Point.java 2005-11-16 10:34 strk * Added availability info of line_interpolate_point function 2005-11-16 09:49 strk * Updated 1.0.5 release documentation 2005-11-14 10:05 strk * Forced use of CAPI when building against GEOS 3.x.x or superior 2005-11-14 09:01 strk * Forced copy of BOX2D at deserialization time. LWGEOM (sub)objects will always have their own copy, safely released by lwgeom_release(). This will remove memory alignment problems. 2005-11-11 18:04 strk * updated 2005-11-11 17:49 strk * Updated 2005-11-11 17:45 strk * Fixed memory alignment bug in base geometry type serializers, added integrity check for geometry type flag and it's pointarrays dimension mismatch 2005-11-11 17:23 strk * Fixed memory alignment issues in force_*d*_recursive 2005-11-11 17:03 strk * Added some dimensionality changes tests 2005-11-11 17:02 strk * Added linemerge test 2005-11-11 10:49 strk * Fixed short-initialization in getPoint4d_p 2005-11-01 17:11 strk * Ported ELF detection code from PostgreSQL. PostGIS builds on freebsd > 2 out of the box now. 2005-11-01 11:56 strk * Initial work on ST_AddEdgeNewFaces 2005-11-01 11:46 strk * Removed calls to get_proj4_from_srid() from transform() to require a single scan of spatial_ref_sys for call rather then two. 2005-11-01 11:37 strk * Fixed handling of --with-proj handling 2005-11-01 10:29 strk * updated 2005-11-01 10:22 strk * Changed major-minor version numbers extraction to be compatible with postgresql 7.2.1 (relies on the fact that this information will always be in the first 4 characters - single digit per version) 2005-11-01 09:25 strk * Reworked NULL geometries handling code letting user specify policy (insert,skip,abort). Insert is the default. 2005-10-31 13:42 mschaber * Document Bug in PGShapeGeometry 2005-10-28 13:48 mschaber * Small winding rule fix and some comment improvements 2005-10-26 11:10 strk * updated 2005-10-26 11:07 strk * Added optional second argument to specify schema in which postgis functions are to be replaced 2005-10-25 14:31 strk * Added azimuth() and shift_longitude() functions 2005-10-25 14:31 strk * Added documentation for azimuth() 2005-10-25 14:21 strk * Added missing SRID check in azimuth() function 2005-10-25 14:15 strk * Added azimuth(point,point) function. 2005-10-25 11:38 strk * Added shift_longitude(geometry) sql procedure and underlying ptarray_longitude_shift(POINTARRAY *) and lwgeom_longitude_shift(LWGEOM *) functions. 2005-10-25 11:37 strk * Fixed bug in GEOSCoordSeq to POINTARRAY converter 2005-10-25 11:16 strk * Added pglwgeom_deserialize() 2005-10-24 16:14 strk * Moved loader/dumper stricter handling of attribute sizes from 1.0.5 to head section 2005-10-24 15:54 strk * fixed wrong assumption about maximum size of integer attributes (width is maximum size of text representation) 2005-10-24 13:29 strk * Updated to reflect ownership policy in GEOS C-api. 2005-10-24 11:33 strk * Added attribute types mapping change 2005-10-24 11:30 strk * Fixed a bug in string attributes handling truncating values of maximum allowed length, curtesy of Lars Roessiger. Reworked integer attributes handling to be stricter in dbf->sql mapping and to allow for big int8 values in sql->dbf conversion 2005-10-21 15:35 mschaber * PGShapeGeometry constructor cleanup 2005-10-21 13:06 mschaber * Updated jdbc2 README to reflect JTS dependency on trove4j 2005-10-21 12:07 mschaber * implemented JTS GeometryFactory caching 2005-10-21 11:33 strk * Applied patch by Lars Roessiger handling numerical values with a trailing decima l dot 2005-10-21 08:53 mschaber * typo fix in java2D example 2005-10-20 18:07 mschaber * added example for java2d 2005-10-20 16:13 mschaber * moved java2d to ordinary src directory, as it does not depend on any external libraries. 2005-10-20 16:04 mschaber * fix postgresql 7.2 datatype registration compatibility code 2005-10-20 15:58 mschaber * Fixed all deprecation warnings in JTS code by using proper GeometryFactory instances (hope) 2005-10-20 15:57 mschaber * added forgotten changelog entry 2005-10-20 14:35 mschaber * Added some source for java2D readonly support 2005-10-19 13:11 strk * Handled some more errors. 2005-10-19 10:12 strk * Removed useless variables from linemerge() 2005-10-19 10:09 strk * Removed unused variables in linemerge() 2005-10-19 10:04 strk * Added ST_ModEdgesSplit function, cleaned up test files, added tests for the new topology editing functions. 2005-10-18 16:39 strk * Fixed ST_NewEdgesSplit function to return new Node id rather then text 2005-10-18 15:31 strk * Added SQL/MM functions ST_RemoveIsoEdge and ST_NewEdgesSplit. The ST_NewEdgesSplit also updates the Relation table (out of SQL/MM specs). 2005-10-17 09:40 strk * Changed GEOS initializzation to use lwnotice for errors rather then lwerror, to allow for cleanup on exceptions. 2005-10-17 09:39 strk * Added -Wall flag to compilers invocation 2005-10-17 08:37 strk * Fixed compiler warnings, handled exceptions in POSTGIS2GEOS conversions 2005-10-14 08:29 strk * Added topology change 2005-10-13 16:21 strk * Initial work on topology model support 2005-10-13 13:40 strk * Fixed return code from shp2pgsql 2005-10-10 16:19 strk * Fixed null values fraction computation in geometry analyzer as suggested by Michael Fuhr 2005-10-03 21:45 devrim * Added basic doc about building RPMs 2005-10-03 21:29 devrim * - Make PostGIS build against pgxs so that we don't need PostgreSQL sources. - Fixed all build errors except jdbc (so, defaulted to 0) - Added new files under %utils 2005-10-03 18:08 strk * Stricter string attributes lenght handling. DBF header will be used to set varchar maxlenght, (var)char typmod will be used to set DBF header len. 2005-10-03 17:36 devrim * Removed postgis-jdbc2-makefile.patch (applied to -head) 2005-10-03 17:29 devrim * Applied to HEAD, so removed 2005-10-03 07:53 strk * Added -W and -I loader switches to manuals. 2005-10-03 07:45 strk * Issued a warning when -W is specified and no UTF8 support has been compiled in. 2005-09-30 15:09 devrim * Removed 2005-09-30 15:09 devrim * Renamed the file and fixed the non-ascii char 2005-09-30 12:44 strk * undefined UNITE_USING_BUFFER (defining it to 0 did not have the expected result) 2005-09-30 08:59 strk * Fixed release of stack memory occurring when shp2pgsql is compiled with USE_ICONV defined, an attribute value needs to be escaped and no -W is used 2005-09-29 07:11 mschaber * Manually applied Makefile changes from Devrim GUNDUZ (extras/rpm/patches/postgis-jdbc2-makefile.patch) to HEAD jdbc2 Makefile 2005-09-28 16:34 strk * Honoured want3d parameter in GEOS2POSTGIS converters 2005-09-27 21:50 devrim * Mentioned about the patches in spec file. 2005-09-27 21:48 devrim * Initial README file for PostGIS RPM 2005-09-27 21:26 devrim * Initial import of postgis.spec 2005-09-27 21:12 devrim * Necesarry patches used to build PostGIS RPMs. 2005-09-27 16:30 strk * Wrapped debugging line in preprocessor block. 2005-09-26 13:48 strk * Made USE_GEOS_CAPI definable by ./configure 2005-09-26 13:47 strk * Added --with-geos-capi switch 2005-09-26 12:53 strk * Added LineMerge function in Geometry Editors chapter 2005-09-26 12:36 strk * Initial switches for use of GEOS C-API 2005-09-26 12:30 strk * Added LineMerge interface 2005-09-26 12:09 strk * Updated LineMerge facts 2005-09-26 12:08 strk * Added JTSLineMerge stub, fixed typos in profiling outputs. 2005-09-26 12:07 strk * Added stub for linemerge() 2005-09-26 12:04 strk * Added new LineMerge funtion 2005-09-26 12:03 strk * Fixed prototype of linemerge() and error typo in it 2005-09-26 11:35 strk * Changed GEOSLineMerge function to take one geometry and return the simplest geometry formed by set of merged LineStrings. Fixed memory leak in GEOSrelate(). 2005-09-23 17:25 strk * Added linemerge_garray function 2005-09-23 17:22 strk * Added LineMerger interface 2005-09-23 17:06 strk * Initial wrapper to GEOS C api 2005-09-23 16:43 strk * Added wrappers for ewkb output 2005-09-23 16:41 strk * cleanups 2005-09-23 16:24 strk * cleanups 2005-09-23 15:43 strk * added header sentinels 2005-09-23 11:45 strk * Made LWGEOMFromWKB use underlying pglwgeom_from_ewkb() 2005-09-23 11:23 strk * Added pglwgeom_from_ewkb function 2005-09-16 13:19 strk * given some consistent format to items 2005-09-15 14:53 strk * Fixed X(),Y() and Z() functions descriptions, added M(). 2005-09-15 10:24 strk * Moved AddPoint() function from 'geometry constructors' to 'geometry editors' chapter 2005-09-15 10:16 strk * Disabled buffer-based GeomUnion 2005-09-15 10:13 strk * Moved the fix_geometry_column() removal to 1.1.0 section 2005-09-15 09:55 strk * Removed automatic fix_geometry_columns() call in update_geometry_stats and AddGeometryColumns() 2005-09-15 09:50 strk * Added Reporting Bugs chapter 2005-09-09 17:03 strk * Updated release info for 1.0.4 2005-09-09 16:21 strk * Fixed bug in scale() and transscale() functions corrupting output bounding box 2005-09-09 15:23 strk * cleanups for waste left in previous patches 2005-09-09 14:47 strk * Fixed bug in translate() corrupting output bounding box. Bounding-box related cleanups in exterior_ring() 2005-09-08 23:30 strk * Made ptarray_compute_box3d a wrapper of ptarray_compute_box3d_p 2005-09-08 22:59 strk * minor speedups in distance() 2005-09-08 19:26 strk * Handled search_box outside of histogram_box case in selectivity estimator 2005-09-07 11:58 mschaber * added some more Todo points 2005-09-06 09:22 strk * Added notes about PointN, GeometryN and InteriorRingN indexing method 2005-09-06 08:29 strk * BOX3d parser note 2005-09-06 08:28 strk * looser BOX3D parser 2005-09-03 06:11 strk * Leak plugged in compute_serialized_box3d_p 2005-08-31 17:09 strk * removed compiler warnings 2005-08-31 16:49 strk * Fixed bug in pointArray_construct() misinterpreting hasZ and hasM parameters 2005-08-29 22:36 strk * Removed premature object destruction in InsertLineString{WKT,} causing segfault 2005-08-29 12:08 strk * Added Nikita Shulga <malfet@jscc.ru> in contributors list. 2005-08-29 11:56 strk * Typo fixed 2005-08-29 11:48 strk * Fixed sprintf() calls to avoid overlapping memory, reworked not-null objects existance check to reduce startup costs. 2005-08-16 21:38 strk * Added M(point) function 2005-08-16 11:24 strk * Early memory release in GiST indexing 2005-08-12 19:20 pramsey * Added +proj=longlat to all corrupt srs entries. 2005-08-10 23:16 strk * Removed pfree of proj4 text in make_project failure cases (required for error message) 2005-08-10 23:12 strk * Added segfault fix 2005-08-10 23:06 strk * Fixed a segfault in transform_geom exploited by proj4's make_project error. 2005-08-04 16:29 strk * Checked for PSQL run success 2005-08-04 15:20 strk * Added availability note for version functions 2005-08-04 15:03 strk * Updated 2005-08-04 14:55 strk * 1.0.3 release notes and date 2005-08-04 14:54 strk * Added plpgsql_validator explicit function skip 2005-07-29 22:24 strk * updated 1.0.3 section 2005-07-29 22:08 strk * Added more obsoleted functions, new obsoleted_ops considered, check of pg_restore -l return code, better regexp to allow broader range of dump/restore versions. 2005-07-28 12:23 mschaber * fix EWKT constructors to accept SRID=4711; representation 2005-07-27 02:47 strk * Support for multibyte field names in loader 2005-07-27 02:35 strk * Minor cleanups in loader 2005-07-27 02:07 strk * Fixed handling of POINT types as WKT (-w) in loader 2005-07-25 22:24 strk * bugfix in ptarray_compute_box2d_p 2005-07-22 19:15 strk * Fixed bug in {get,pop}{int,double} for 64bit archs 2005-07-19 11:26 strk * removed useless strchr call in LWGEOM_in 2005-07-13 14:28 strk * updated 2005-07-13 14:26 strk * Fixed bug reported by klaus F�rster 2005-07-12 16:19 strk * Fixed bug in user query handling, reported by Andrew Seales 2005-07-05 16:12 strk * Forced INSTALL to be install-sh 2005-07-05 15:13 strk * Added more win32-specific variables 2005-07-04 17:04 strk * Cleaned up to use more facilities from Makefile.shlib 2005-07-04 09:47 strk * Added conservative iconv detection code 2005-07-04 09:14 strk * adjusted for 1.0.2 release 2005-07-04 09:12 strk * Dropped broken attempt at 'detecting' iconv. 2005-07-03 17:46 strk * Added 1.0.2 release notes 2005-07-01 21:10 strk * Included debian packaging scripts 2005-06-28 22:01 strk * Added index concurrency tester 2005-06-28 22:00 strk * Fixed extimators to work with postgresql 8.1.x 2005-06-28 14:58 strk * Reverted rtree logic back to use leaf/internal consistency functions 2005-06-28 14:51 strk * updated 2005-06-28 14:42 strk * Maintained separate vars for CFLAGS and CXXFLAGS 2005-06-28 14:34 strk * Bugfix in RTBelowStrategyNumber handling 2005-06-28 14:00 strk * updated 2005-06-28 13:53 strk * Inclusion of core rtree header for StratregyNumber typedef (8.1 support) 2005-06-28 11:33 strk * Added switch for pgsql 8.1 build 2005-06-28 11:33 strk * Moved chunked GeomUnion defines on top of file 2005-06-28 08:12 mschaber * fix compile problems in ValueSetter for ancient jdk releases. 2005-06-27 15:16 strk * Initial chunk-based unite_garray implementation 2005-06-26 09:15 strk * Added collect,buffer implementation for unite_garray(). Compile-time definable: GEOS version defaults to on, JTS to off 2005-06-25 10:24 strk * Added pgsql standard geometryc types cast 2005-06-24 12:36 strk * Fixed rtree indexing (ported from pgsql rtree fix) 2005-06-24 07:55 mschaber * added casts between PostgreSQL and PostGIS geometries to TODO list 2005-06-17 14:51 strk * Memory leak fix in pg_error 2005-06-16 17:55 strk * Added -I switch for GiST index creation in loader 2005-06-15 16:04 strk * fault tolerant btree ops 2005-06-15 16:04 strk * fault tolerant btree ops 2005-06-10 16:27 strk * Added (commented) aggregates handling 2005-06-10 16:03 strk * Renamed {GEOS,JTS}_polygonize_garray to polygonize_garray to reduce redundancies. 2005-06-10 16:02 strk * Fixed handling of --with-geos 2005-06-10 12:36 strk * Added availability info for postgis_full_version() and postgis_jts_version() 2005-06-10 12:00 strk * Added JTSnoop and JTSversion functions. 2005-06-10 11:58 strk * More info in the Upgrade chapter (soft upgrade/hard upgrade) 2005-06-10 09:54 strk * Added isvalid(empty) test 2005-06-09 16:02 strk * updated 2005-06-09 16:02 strk * Added SRID check in line_locate_point() 2005-06-09 16:02 strk * removed spurious comments 2005-06-09 16:01 strk * Fixed bug in ptarray_locate_point 2005-06-09 16:00 strk * Added test for line_locate_point 2005-06-09 15:12 strk * Added line_locate_point() function 2005-06-09 12:30 strk * Added a check for correct order of ``from'' and ``to'' args in line_substring() 2005-06-09 12:24 strk * NEW line_substring() function 2005-06-07 07:51 strk * Added missing Makefile.shlib and removed explicit 'all' rule from lwgeom build 2005-06-06 18:42 strk * iconv autodetection 2005-06-06 17:28 strk * Moved 'all' rule before Makefile.shlib inclusion, to have bare 'make' calls work again 2005-06-06 17:21 strk * Added WARNING about changes implications in terms of SCRIPTS_VERSION upgrade. Removed extra tokens after #endif directives to make newer preprocessor (3.4.3) happy. 2005-06-06 16:49 strk * Initial implementation of postgis procedures upgrade script 2005-06-06 16:49 strk * Added availability info for new functions 2005-06-06 16:48 strk * Incremented micro version number in SCRIPTS_VERSION (due to functions addition) 2005-06-06 16:47 strk * Moved create_undef.pl from root to utils/ dir 2005-06-06 16:47 strk * Removed automatic build of docs 2005-06-06 07:58 mschaber * added scale() and transscale() functions (like transform()) 2005-06-06 07:54 mschaber * merge Alex' jdbc2 specific Makefile patches 2005-06-04 10:06 strk * Applied Alex Bodnaru patch for pgsql source tree dependency drop. 2005-05-25 12:01 strk * Stripped out CR chars 2005-05-25 10:12 mschaber * fix comment 2005-05-25 10:08 mschaber * JTS binary parser now passes basic regression suite 2005-05-24 17:19 strk * Added release date for postgis-1.0.1 2005-05-24 16:56 strk * Added iconv autodetection, removed already-added things 2005-05-24 14:02 strk * Added postgis-1.0.1 release date 2005-05-23 16:18 mschaber * Cleaned up Point.equals(Point) mess 2005-05-23 14:15 strk * Compiled 1.0.1 release notes 2005-05-18 17:01 strk * Applied 'strictness' patch by James Marca 2005-05-18 15:49 strk * Fixed SetSRID() entry 2005-05-18 15:39 strk * added Paris projections fixes 2005-05-18 15:36 strk * Updated proj4text for some French projections, as for Nicolas Ribot report 2005-05-16 17:50 strk * Added note about pgsq2shp attributes names bugfix 2005-05-16 17:22 strk * Fixed DBF field names handling as for clashes avoiding. pgsql field renames are warned. 2005-05-16 08:05 strk * Moved dumper and postgis_restore.pl changes in 1.0.1 section (back-ported) 2005-05-16 07:49 strk * Allowed custom args passing to createdb invocation 2005-05-15 08:05 strk * updated docs as for -k switch 2005-05-13 14:16 strk * Added new -k switch and credits for it 2005-05-13 14:06 strk * Applied patch from Obe, Regina to keep identifiers case. 2005-05-13 08:03 strk * Added support for macosx build 2005-05-12 10:09 strk * changed PGBELIBS command to avoid backtics and newlines 2005-05-12 07:45 strk * Added another dir in search path for docbook.xml, changed shell invocation line for mingw to avoid newline char being used. 2005-05-11 08:55 strk * Renamed MINGW to mingw in HOST_OS findstrings 2005-05-10 12:52 strk * Forced OID usage in geometry_column table 2005-05-10 12:32 strk * fixed mingw handling syntax 2005-05-10 10:58 strk * Added Makefile.config 2005-05-10 10:57 strk * Added scripts used by autoconf 2005-05-10 09:35 strk * Added initial custom support for MINGW 2005-05-10 08:31 strk * GEOS autodetect activated 2005-05-10 08:15 strk * fixed upgrade procedure section as suggested by Steven Bowden 2005-05-09 22:33 strk * updated 2005-05-04 07:00 strk * Version bumped to 1.1.0CVS 2005-05-04 06:58 strk * GEOS/JTS performed operations dox made more explicit about which argument is 'this' and which is 'otherGeometry'. 2005-05-02 10:52 strk * Moved 1.0.1 changes into their own section - added jdbc2 -target change notice 2005-04-28 11:51 mschaber * added jdbc2 maintainerclean 2005-04-28 11:01 strk * Fixed distclean rule to build required Makefile.config 2005-04-28 08:35 mschaber * fix sources.inc things 2005-04-27 16:14 mschaber * Reworked Makefile 2005-04-26 18:45 strk * Added MakeValidShape() function 2005-04-26 18:08 strk * Fixed USE_JTS variable to actually use autoconf-detected value 2005-04-26 07:01 mschaber * Improved versionprinter to print offline versions even if database is not available 2005-04-22 01:07 strk * Added fix in join selectivity 2005-04-22 01:07 strk * Fixed bug in join selectivity estimator returning invalid estimates (>1) 2005-04-21 16:31 strk * Fixed bug in 3d spheroid length computation, patch by zmocnik at hotmail dot com 2005-04-21 09:21 strk * Added new LRS funx suggested by Paul 2005-04-21 09:09 strk * updated 2005-04-21 09:08 strk * Applied patch from Ron Mayer fixing a segfault in string escaper funx 2005-04-20 15:22 strk * Fixed link to SimpleFeature Specification 2005-04-20 15:17 strk * Fixed clean-lib rule (wasn't removing anything!) 2005-04-20 15:09 mschaber * Fixed pg_opclass update to be schema-aware. 2005-04-20 10:21 strk * Fixed bogus example of GeometryFromText(box3d, int) changing it to SetSRID(box3d, int) in chapter 5.1.2 2005-04-20 08:12 strk * Updated 2005-04-20 08:10 strk * Added rules to automatically call configure or config.status, added docs rule to be invoked by topdir. 2005-04-20 08:01 strk * Removed again, can't work anymore. 2005-04-20 07:55 strk * Put old Makefile.config back to allow for automatic documentation production, must be removed again when process gets updated. 2005-04-19 10:58 strk * added LPATH to summary output (if different from install dir) 2005-04-19 10:41 strk * Reworked autoconf path to use pgsql or custom layout based on presence of a --prefix switch. 2005-04-19 09:32 strk * Added -c flag to INSTALL invokations (copy, not move) 2005-04-19 09:20 strk * More info in configure output, added autogen.sh wrapper 2005-04-18 23:31 strk * Added 1.0.0 section 2005-04-18 14:46 strk * Improved autoconf script, dropped pgsql source dependency. EXPERIMENTAL. 2005-04-18 14:25 strk * Added TODO list for release 1.1 2005-04-18 14:15 strk * Fixed 1.0.0 release date to 2005/04/19 2005-04-18 14:12 strk * Slightly changed standard deviation computation to be more corner-case-friendly. 2005-04-18 14:04 strk * Added estmator code and testers bugfix for 1.0.0 release. 2005-04-18 13:50 strk * Fixed bug in table2 schema parsing. 2005-04-18 13:30 strk * Fixed to work against LWGEOM installations 2005-04-18 10:57 strk * Applied patched by Ron Mayer fixing memory leakages and invalid results in join selectivity estimator. Fixed some return to use default JOIN selectivity estimate instead of default RESTRICT selectivity estimate. 2005-04-15 20:12 strk * Fixed Makefile to read Makefile.config 2005-04-15 15:10 strk * Updated to reflect examples->extras rename 2005-04-15 15:09 strk * Renamed examples/ to extras/. Added WFS_locks. 2005-04-15 14:04 mschaber * jdbc2 works: + Makefile improvements + JTS support improvements + Improved regression test system + Basic consistency check method for geometry collections + Support for (Hex)(E)wkb + Autoprobing DriverWrapper for HexWKB / EWKT switching 2005-04-15 10:01 strk * Added configure outputs 2005-04-15 09:54 strk * Added more people to manual "CREDITS" chapter (copied from CREDITS file). Added a not in CREDITS redirecting to the postgis manual. 2005-04-15 09:31 strk * Version bumbed to 1.0.0 2005-04-14 13:35 strk * Added shp2pgsql bugfix and autoconf improvement in Release Notes. 2005-04-14 12:58 strk * Applied patch by Gino Lucrezi fixing bug in string escaping code. 2005-04-14 11:25 strk * --enable-autoconf put back 2005-04-14 11:23 strk * Cleanup, improvements, JTS support added 2005-04-14 09:40 strk * Added Alex Bodnaru in the "Other contributors" section, for debian packaging. 2005-04-14 08:02 strk * Added a not about need of memory alignment constraints handling for deserializers 2005-04-13 15:57 strk * Removed the CREDITS section from Release Notes and move contributors in chapter 1.1 (Credits). 2005-04-13 14:25 strk * Release notes made an appendix, updated credits section 2005-04-13 14:24 strk * Added MINGW support as suggested by David Techer. 2005-04-12 11:18 strk * Added release notes for 1.0.0 final 2005-04-12 11:17 strk * XSLBASE made back-redefinable 2005-04-08 06:45 pramsey * Make xsl reference work for rackmount nightly build 2005-04-07 21:02 mschaber * typo fixes and linked function in 4.2.4 2005-04-07 19:03 strk * Added new strict OGC compliancy enforcement sector of manual 2005-04-07 19:00 strk * Corrected and augmented the new chapter about ensuring OGC compliancy. 2005-04-07 09:32 mschaber * Added information about geometry validity. 2005-04-06 16:49 strk * Added -p flag addition for shp2pgsql 2005-04-06 14:16 strk * Removed manual update of gid field. 2005-04-06 14:02 mschaber * added -p option (prepare mode) that spits out the table schema without inserting any data. 2005-04-06 10:46 strk * Bugfix in -w (hwgeom) handling of ZM shapefiles. Big reorganizzation of code to easy maintainance. 2005-04-06 08:53 strk * force_3dm() bugfix 2005-04-06 08:53 strk * Augmented memory allocated by force_3dm() - detected cases of memory shortage 2005-04-05 13:43 mschaber * Fix documentation of -D option in shp2pgsql manpage 2005-04-05 10:18 strk * Added transform() bugfix 2005-04-05 10:18 strk * BUGFIX in transform() releaseing random memory address 2005-04-05 08:00 strk * Documented loader support for 0.x versions 2005-04-04 20:51 strk * Added -w flag to output old (WKT/HWGEOM) sql. 2005-04-04 09:48 strk * Added install of loader/dumper manual pages 2005-04-01 09:39 strk * Added not about new manual pages 2005-04-01 09:38 strk * Added manual pages provided by Roberto Boati <roberto.boati@daisyred.com> 2005-03-30 17:25 strk * Updated to replace 'RC' into '-rc' when building package dir (and tar). Removed autom4te.cache directory after call to autoconf. 2005-03-30 17:03 strk * Scripts version set to 0.3.0 (minor increment as a scripts override won't suffice to get rid of dropped box2d funx). Set release date and other versions to RC6 2005-03-30 15:24 mschaber * Preliminary change email addres to private one because schabios@logi-track.com is currently not working. 2005-03-30 11:47 strk * Added RC6 release notes. 2005-03-30 11:46 strk * Obsoleted functions set back in, to avoid problems upgrading. 2005-03-30 11:40 strk * Removed obsoleted box2d functions 2005-03-29 16:34 strk * Added postgis_restore.pl bugfix 2005-03-29 16:33 strk * Changed she-bang back the way it was (disabled) - didn't work like that! Added {x,y}{min,max}(box2d) to list of obsoleted funx. 2005-03-29 13:23 mschaber * Fix build for win32 using mingw 2005-03-28 11:37 strk * Dropped {x,y}{min,max}(box2d) functions 2005-03-28 09:48 strk * Added multi() changes 2005-03-28 09:47 strk * Fixed bug in multi() leaving SRID in inner geometries. Added early return for already multi() and BBOX'ed geoms. 2005-03-28 09:45 strk * Added regress tests for multi() 2005-03-25 18:43 strk * Fixed PQunescapeBytearea argument (might give problems on 64bit archs) 2005-03-25 16:38 strk * MICRO_VERSION set to RC5 2005-03-25 16:38 strk * Added release date and version 2005-03-25 16:37 strk * Added release dates 2005-03-25 16:28 strk * Added a not in performance tips chapter about dimension constraints. Removed part on update_geometry_stats as it should have no effect. 2005-03-25 14:49 strk * generalized Other changes 2005-03-25 14:48 strk * Fixed bogus she-bang 2005-03-25 13:56 strk * Updated release notes section 2005-03-25 09:34 strk * code cleanup 2005-03-24 18:01 mschaber * additional performance tips 2005-03-24 16:28 strk * Variable declaration set in place in lwgeom_centroid() 2005-03-24 16:27 strk * Added estimated_extent() bugfix notice 2005-03-24 16:27 strk * Added comments in estimate_allocation() bugfix point. 2005-03-24 15:07 strk * Fixed non-GEOS centroid() function to avoid obsoleted LWGEOM_EXPLODED funx 2005-03-24 14:45 strk * Fixed bug in estimated_extent() returning pointer to a memory allocated in SPI memory context 2005-03-23 17:10 strk * Removed cr 2005-03-23 16:29 strk * Added box3d computation tests 2005-03-23 16:24 strk * added box3d computation fix 2005-03-23 16:23 strk * Fixed bug in box3d computation. Dropped obsoleted LWGEOM_EXPLODED structure and associated functions. 2005-03-21 17:56 strk * grep -v arg quoted.. 2005-03-21 17:52 strk * Quoted grep argument 2005-03-21 13:43 mschaber * handle versioned jars in cvsignore 2005-03-21 12:24 strk * Expanded estimated_extent() paragraph to document differences between pre and post pgsql 800. 2005-03-18 21:04 strk * Set release date 2005-03-18 17:47 strk * postgis_restore.pl improvements 2005-03-18 17:23 strk * Hash used for detecting obsoleted funx in dump 2005-03-18 12:43 strk * Fixed missing use of _IMMUTABLE_STRICT define in new get_proj4_from_srid(). Improvement in Makefile to allow reconstruction of missing ../lwpostgis.sql 2005-03-18 12:37 strk * added box3d-computation bugfix note 2005-03-18 12:36 strk * Big API cleanup. Bug fix in box3d computation for collections containing empty elements. 2005-03-18 10:47 strk * Added extent(), extent3d() and collect() tests - should really give this tests a new layout ... 2005-03-17 18:14 strk * box2d outupt precision increment 2005-03-17 18:11 strk * BOX2D output reverted to .15g precision 2005-03-17 09:39 strk * Early memory releases in lwgeom_translate_recursive 2005-03-16 15:08 strk * Changed get_proj4_from_srid() implementation from SQL to PLPGSQL to workaround a bug of pgsql8.0.{1,2} 2005-03-16 11:41 strk * Early memory releases on transform_geometry_recursive() and LWGEOM_asText(). Code cleanups. 2005-03-15 12:24 strk * hole-in-ring detector made more readable 2005-03-15 09:25 strk * Added loader bug fix 2005-03-14 22:02 strk * Fixed holes handling. 2005-03-14 11:31 strk * Added cleanup of versioned jars 2005-03-14 11:14 strk * installdirs/clean rules cleanup suggested by Alex Bodnaru 2005-03-11 17:56 strk * Early memory release in transform_geom 2005-03-11 17:47 strk * Fixed destructive memory release in LWGEOM_translate() 2005-03-11 17:47 strk * Added test for translate() 2005-03-10 21:37 strk * added 64bit bug fix 2005-03-10 19:26 strk * Hopefully fixed bug in int4 and double reader from byte stream (was not working on 64bit machines). 2005-03-10 18:19 strk * Made void args explicit to make newer compilers happy 2005-03-10 18:18 strk * changed report_error typedef to allow for lwerror usage w/out problems 2005-03-08 18:36 mschaber * Additional explanations in README. 2005-03-08 18:32 mschaber * Fix possible null pointer exception if PostGIS is compiled without geos / proj support. 2005-03-08 16:46 strk * More cleanups on 'clean' 2005-03-08 16:41 strk * Simplified clean rule 2005-03-08 16:39 strk * Added configure script removal in maintainer-clean rule 2005-03-08 16:00 strk * Deleted libjts directory... libjts production should happen from within JTS itself. 2005-03-08 15:44 strk * Changed default JTS includes and lib paths 2005-03-08 12:39 strk * Added libjts build scripts 2005-03-08 12:21 strk * Added a distclean rule to get rid of autoconf-generated files. Had maintainer-clean rule invoke distclean rule. 2005-03-08 12:13 strk * set USE_JTS back to 0 - got set to 1 from previous commit 2005-03-08 12:11 strk * Added utils rule to set the execute bit on utilities. 2005-03-08 12:04 strk * synced makefiles, changed default path of libjts 2005-03-08 11:24 strk * Commented out debugging lines 2005-03-08 11:24 strk * avoided initializzation of JvNewObjectArray with undefined pointer 2005-03-08 11:06 strk * modernized old-style parameter declarations 2005-03-08 09:42 strk * Added estimator changes 2005-03-08 09:27 strk * RESTRICT selectivity estimator use self->varno instead of varRelid. Seems to work for subqueries... 2005-03-08 09:23 strk * Fixed debugging lines. 2005-03-08 08:38 strk * Discarded environmental variable USE_JTS to avoid unexpected enabling 2005-03-07 21:24 strk * Added missing JTSnoop prototype 2005-03-07 21:19 strk * Put optimization flag back to -O2 2005-03-07 21:11 strk * Removed stub functions (moved to lwgeom_nojts.c) and added stub for JTSnoop. 2005-03-07 21:07 strk * Added initial JTS wrapper. 2005-03-07 21:06 strk * Added spatial_ref_sys.sql and README.postgis to scripts install targets. Moved .sql scripts from ...$(datadir) to ...$(datadir)/contrib. Modified GEOS/JTS stub handling to use separate file when disabled. 2005-03-07 20:47 strk * Separate stub funx file for builds w/out GEOS or JTS 2005-03-07 20:46 strk * sync'd with Makefile.config 2005-03-07 20:44 strk * Added JTS support parameter 2005-03-07 18:36 strk * Sync with Makefile.config 2005-03-07 16:08 strk * Incremented SCRIPTS_VERSION micro num 2005-03-07 13:58 strk * Added process id to output files. Removed 'clean' rule. 2005-03-07 13:20 strk * Removed unused lwexploded_dump() function 2005-03-07 11:53 mschaber * Fix version.in vs. version.config typo 2005-03-04 19:34 strk * cleanups - version file source 2005-03-04 19:31 mleslie * Cleaned up distance_sphere and updated documentation. 2005-03-04 19:25 strk * removed temp files used in docs creation step 2005-03-04 19:18 strk * Expanded "upgrading" chapter to explain postgis_restore.pl upgrade procedure. 2005-03-04 19:18 strk * Made 'html' the default rule 2005-03-04 19:15 strk * Parametrized XSLBASE directory 2005-03-04 16:29 strk * Changed to use Version.config 2005-03-04 15:54 strk * Commented out unused variable 2005-03-04 15:25 mschaber * added version improvement to changes 2005-03-04 15:22 mschaber * - Separates the version config variables into the toplevel Version.config - Adds new version config variables for jdbc - jdbc "make jar" additionally creates files named like postgis_1_0_0RC4.jar using the info from Version.config - org/postgis/Version.java now uses a Makefile generated ressource to initialize its values, so it is always "in sync" with Version.config 2005-03-04 14:55 strk * Added loader/dumper bug fixes 2005-03-04 14:54 strk * Fixed bug in multiline handling. 2005-03-04 14:48 strk * Applied patch from Jonne Savolainen fixing multilines handling 2005-03-04 14:25 strk * Added 'test' and 'maintainer-clean' rules. 2005-03-04 14:25 strk * Added a maintainer-clean rule. 2005-03-04 14:13 strk * Parametrized test output dir and added Makefile 2005-03-04 11:03 mschaber * another make install fix :-( 2005-03-04 09:03 strk * PG_LWGEOM_construct() moved from lwgeom_api.c to lwgeom_pg.c. 2005-03-04 08:52 strk * Modified upgrade section to show postgis_restore.pl based procedure. 2005-03-04 07:51 mschaber * another "make install" fix from alex 2005-03-04 07:48 mschaber * Adopted Version.java to the official PostGIS scheme. 2005-03-04 07:36 mschaber * Updated VERSION to RC4 2005-03-04 07:32 mschaber * Removed unneccesarry TEMP variable 2005-03-03 22:12 mschaber * removed obsolete build.xml 2005-03-03 21:55 mschaber * Make classpath element separator configurable 2005-03-03 20:55 mschaber * jdbc2 naming explanation Contact info Copyright notice 2005-03-03 19:08 mschaber * add postgis_debug.jar to make install (thx to alex bodnaru) 2005-03-03 17:20 mleslie * Rebuilt the distance_sphere function. 2005-03-03 16:06 mschaber * Fix compile with jikes 2005-03-03 10:32 strk * parser additions note 2005-03-03 10:31 strk * Removed generated parser files. 2005-03-03 10:29 strk * Added generated parsers to avoid FLEX/YACC requirement on release. 2005-03-02 17:29 strk * Commented out parser generation... requires PGSQL source :( 2005-03-02 17:26 strk * Added parser generation. 2005-03-02 17:04 strk * added FLEX & YACC fix 2005-03-02 13:10 mschaber * Additional Regression Test for prepared statement usage 2005-03-02 12:06 mschaber * Code cleanups, Makefile improvements. 2005-03-01 13:22 strk * Renamed lwgeom_to_wkt to lwgeom_to_ewkt, as it doesn't strip out non-ogc extensions. 2005-03-01 13:20 strk * Corrected expected results. 2005-03-01 11:41 strk * Added GEOS/JTS provided functions test 2005-03-01 08:43 strk * Fixed install-lwgeom-scripts rule as suggested by Rhys Ickeringill. 2005-03-01 08:40 strk * FLEX and YACC variables set after PGSQL/Makefile.global has been sourced and only if not therein defined. 2005-03-01 01:17 pramsey * Fix link error. 2005-02-28 09:57 mschaber * Add serialVersionUID for jdk1.5 correctly setType(), needed for jdbc 8.0+ 2005-02-28 08:14 mschaber * Add serialVersionUID for jdk1.5 correctly setType(), needed for jdbc 8.0+ 2005-02-25 13:44 strk * Added geom_accum and SnapToGrid bug fixes 2005-02-25 13:42 strk * SnapToGrid: Fixed minor bug in consistency check. 2005-02-25 13:28 strk * Fixed a bugus free() in LWGEOM_accum. 2005-02-25 09:34 strk * added force_collection early return 2005-02-25 09:31 strk * Added early return from force_collection when input is already a collection AND has a bbox cache. Suggested by Ron Majer. 2005-02-25 08:57 strk * Added comment on top of TYPE macros 2005-02-24 14:13 mschaber * Fixed makefile to allow compilation via kaffe javac - this one does not automatically include non-mentioned source files that are present in the classpath. 2005-02-24 11:43 mschaber * moved trim() call, this avoids calling trim() twice on unchanged value if we have only (1 2,3 4) rep. 2005-02-24 11:20 mschaber * Additional regression tests for EWKT and EWKB on PostGIS 1.X 2005-02-24 08:36 strk * Added missing prototype 2005-02-24 08:32 strk * Fixed bug in StartPoint and EndPoint functions. 2005-02-24 08:10 strk * lib version changed to 1.0.0RC3, scripts version to 0.2.0. 2005-02-24 08:08 strk * Added spatial_ref_sys change and version/release 2005-02-23 19:17 pramsey * Hand edit paris central meridian definitions. Danger: other non-Greenwich projections might also have problems. 2005-02-23 13:31 mschaber * another fastjar fix 2005-02-23 13:19 mschaber * Fixed jikes compiler warning, using super. for static methods is suboptimal. 2005-02-23 09:59 strk * GeometryFromText() bug fix 2005-02-23 09:58 strk * Fixed GeometryFromText() to add a bbox cache FOR_COMPLEX_GEOMS 2005-02-23 09:44 strk * Added bool::text cast 2005-02-23 09:00 strk * Added bool::text cast. 2005-02-22 18:10 mschaber * Updated jdbc2/Makefile: - more comments - all helper binaries are now configurable - workaround for broken woody jars via DEBUGJAR environment variable - classpath cleanups, regression tests now use jars instead of build directory, this should help catching packaging errors - small other cleanups 2005-02-22 13:05 mschaber * Removed unused import 2005-02-22 13:04 mschaber * Some more debian woody fixes. 2005-02-22 13:01 mschaber * Remove redundant addDataType() call that slipped in during WKT measured geometries work. It also broke pgjdbc7.2 compatibility. 2005-02-22 12:31 mschaber * Patches from Alex Bodnaru (debian maintainer) 2005-02-22 12:12 strk * Added not about early memory release 2005-02-22 10:10 strk * Early release of DETOASTED geoms. 2005-02-22 09:59 strk * Fixed path to lwpostgis.sql script 2005-02-22 09:55 strk * Early release of DETOASTED or deserialized geometries, to reduce memory usage 2005-02-22 09:39 strk * Forced cleanup of DETOASTED and deserialized geometries for better memory usage. 2005-02-21 18:28 mschaber * *** empty log message *** 2005-02-21 16:22 strk * Changed min() max() usage with LW_MIN() LW_MAX() 2005-02-21 16:16 strk * Changed byte to uchar to avoid clashes with win32 headers. 2005-02-21 15:49 mschaber * removed ugly () display 2005-02-21 14:59 mschaber * Added version printing (for debugging purposes) 2005-02-21 14:16 mschaber * Skip tests that are known to fail when running against older PostGIS server versions 2005-02-18 16:01 mschaber * Some micro optimizations and cleanups 2005-02-18 14:49 mschaber * Added Version.class to allow programatically identification of PostGIS jdbc version 2005-02-18 14:40 mschaber * Added beta support for JTS classes 2005-02-18 08:43 strk * added memory leak fix 2005-02-18 08:42 strk * Removed memory leak in geos2postgis polygon conversion. 2005-02-17 16:09 strk * Improved transform() errors verbosity. 2005-02-17 15:54 strk * Syntaxes cleanups. 2005-02-17 15:44 mschaber * removed verbosity from my last entry 2005-02-17 15:42 mschaber * fixed postgis_debug.jar 2005-02-17 15:39 strk * Fixed some introduced misorderings of func declaration/body. 2005-02-17 14:48 mschaber * Fixed dependency handling for jars 2005-02-17 14:41 mschaber * Updated makefile - better dependency management for jars, additional targets for debian, more comments. 2005-02-17 09:19 strk * Fixed a bug in pointArray_construct() copying input points instead of keeping a pointer to them. This has been introduced *after* RC2 was released. 2005-02-17 08:36 strk * Added wkb_recv and wkb_send obsoleted functions handling 2005-02-14 20:49 strk * Added force_collection() bug fix 2005-02-14 20:45 strk * Fixed bug in force_collection() leaving spurious bbox cache and SRID info in inner geometry when applied to single geoms. 2005-02-14 11:49 mschaber * Now compiles against 7.2 with some magic trickery instead of patching. 2005-02-10 17:56 strk * added memory alignment handling 2005-02-10 17:41 strk * Dropped getbox2d_internal(). Removed all castings of getPoint() output, which has been renamed to getPoint_internal() and commented about danger of using it. Changed SERIALIZED_FORM() macro to use VARDATA() macro. All this changes are aimed at taking into account memory alignment constraints which might be the cause of recent crash bug reports. 2005-02-10 17:38 strk * Added a couple of distance() tests. 2005-02-10 16:34 strk * Added -Wall to CFLAGS 2005-02-10 10:52 strk * Changed 'char' to 'uchar' (unsigned char typedef) wherever octet is actually meant to be. 2005-02-10 10:03 strk * Added X(), Y() and Z() tests. 2005-02-09 18:11 mschaber * adopt documentation wr/t conflicting driverconfig.properties to reflect what jdbc actually does. 2005-02-09 11:55 strk * documentation update item 2005-02-09 11:53 strk * Removed PGSQL7.1 references, clearly stated support starting from 72. Renamed all postgis.sql refs to lwpostgis.sql. 2005-02-09 11:48 strk * fixed debugging output 2005-02-08 17:48 mschaber * Added patch to enable compilation against pg72jdbc2.jar. 2005-02-08 14:54 mschaber * Added jdbc2 jdk1.3 enabling note. 2005-02-08 14:53 mschaber * Removed use of jdk1.4 only features to allow jdbc2 to be build with older jdk releases (tested with 1.3) 2005-02-08 08:17 strk * Reduced scope of VACUUM ANALYZE call to the sole spatial_ref_sys table as suggested by Kevin Neufeld 2005-02-08 07:59 strk * updated 2005-02-08 07:59 strk * Fixed probe_geometry_columns to work with PG72 (pg_constraint was pg_relcheck) 2005-02-08 07:37 strk * Fixed probe_geometry_columns so to work on spatial tables with multiple geometry columns. 2005-02-07 14:06 strk * updated 2005-02-07 14:02 strk * Fixed broken 72 index bindings. 2005-02-07 13:42 mschaber * Fixed pgjdbc 8.0 autoregistration. 2005-02-07 13:21 strk * Replaced DEBUG* macros with PGIS_DEBUG*, to avoid clashes with postgresql DEBUG 2005-02-07 12:56 strk * updated CHANGES 2005-02-07 12:56 strk * More portable date command for BUILDDATE extraction 2005-02-07 12:32 strk * updated with next release changes 2005-02-07 12:31 strk * updated 2005-02-07 11:49 mschaber * Fix makefile (broken by driverconfig.properties rename 2005-02-07 11:31 mschaber * Removed issues that were done, hoping they will not re-emerge :-) 2005-02-07 09:15 mschaber * Fixed jdbc8.0 autoregistration, added regression test. 2005-02-04 17:08 pramsey * Fixed literal && inside the text, replaced with & 2005-02-04 14:20 strk * missing license 2005-02-04 10:20 strk * Added Performance Tips chapter 2005-02-04 09:05 strk * Applied Markus Shaber licensing patches. 2005-02-01 16:53 strk * Changed performance-sensible functions from STABLE to IMMUTABLE 2005-02-01 15:26 strk * Another small patch from Markus 2005-01-31 22:15 strk * Added maintainer notice, to reduce Jeff-strk mail bounces 2005-01-31 17:17 strk * Applied Markus Shaber patches. 2005-01-31 12:32 strk * Markus Shaber version. 2005-01-31 09:24 strk * Used default float precision in BOX2D output 2005-01-31 09:01 strk * More error handlings in transform(geom, int) 2005-01-30 09:48 strk * replaced by PGbox2d.java 2005-01-30 09:46 strk * Added BOX2D and BOX3D support and tests, by Markus Shaber. 2005-01-30 09:12 strk * Made unparsable proj strings error more verbose and removed a typo in transform_geom(). 2005-01-28 16:10 strk * Changed --with-geos arg to express GEOS_DIR (is more intuitive). Made --help string advertise optionality of args for --with-geos and --with-proj. Made configure show used variables values on path checks. 2005-01-28 15:40 strk * LAST_RELEASE_VERSION bumped to 1.0.0 2005-01-28 14:50 strk * Applied small patches from Markus Shaber 2005-01-27 18:06 strk * Fixed a bug in transform() missing to update SRID in output 2005-01-27 11:17 strk * Fixed FAQ to use the schema version of AddGeometryColumn (generated confusion for 0.7.5 users) 2005-01-26 08:35 strk * Version bumped to 1.0.0RC2 2005-01-26 08:34 strk * Added 1.0.0RC2 section 2005-01-26 08:18 strk * Added an --enable-autoconf switch to make sure users will known about the untested nature of the ./configure script. 2005-01-25 13:52 strk * Removed ?= construct in FLEX/YACC rules 2005-01-25 11:29 strk * Made all *FromText() accept only WKT <text>, no more cheating. 2005-01-25 09:47 strk * Fixed a bug in transform() missing to update bbox cache 2005-01-25 09:03 strk * Made all OGC TypeFromWKB() functions consistent in taking a bytea 2005-01-25 08:48 strk * Added autoconf invokation 2005-01-24 18:11 strk * Fixed bug in definition of distance_spheroid. 2005-01-24 15:22 strk * Added checks for flex and yacc paths. 2005-01-24 15:16 strk * Moved YACC default value set from inner to config Makefile. 2005-01-24 15:14 strk * Added default value for FLEX 2005-01-24 11:23 strk * Removed spaces and '?' signs in Makefile.config.in. Added support for geos-config call in configure. 2005-01-24 11:00 strk * Initial autoconf script. 2005-01-19 18:18 strk * removed unused files 2005-01-19 18:15 strk * Added failcount output. 2005-01-19 18:05 strk * Fixed ptest rule. 2005-01-19 17:37 strk * Quoted -classpath args, added ptest args in make ptest rule 2005-01-19 17:00 strk * Added bin/ removal to clean rule 2005-01-19 16:58 strk * Changed postgis_debug.jar rule to be portable 2005-01-19 16:55 strk * Added command line params to jtest rule 2005-01-19 16:51 strk * Applied Markus patch to accept command line params 2005-01-19 16:49 strk * Applied Markus patch 2005-01-19 16:46 strk * Changed postgis.jar creation rule to respect postgresql.properties path 2005-01-19 12:30 strk * Added jar files 2005-01-19 12:27 strk * Added postgresql.properties and .cvsignore, Modified CP variable assignment to be quoted. 2005-01-19 09:53 strk * Made output more readable 2005-01-19 09:47 strk * Changed 'compile' rule to keep track of last compile time and avoid recompilation 2005-01-19 09:38 strk * fixed jar call for postgis.jar production 2005-01-19 09:21 strk * user env CLASSPATH honoured 2005-01-19 08:54 strk * Imported new jdbc driver source by Markus Schaber 2005-01-18 15:39 strk * Fixed a bug in pointarray box3d computation. 2005-01-18 13:31 strk * Reintroduced support for '<anygeom> EMPTY' form, for OGC compliance. 2005-01-18 12:44 strk * Handled GEOS Geometry construction errors as FALSE results in isvalid(geom). 2005-01-18 10:09 strk * updated 2005-01-18 09:32 strk * Changed unparse_WKB interface to take an output size pointer and an HEXFORM specifier. Reworked code in wktunparse to use function pointers. 2005-01-18 09:30 strk * Fixed bug introduced supporting GEOMETRYCOLLECTION(EMPTY). Dropped support for all EMPTY goems execept GEOMETRYCOLLECTION. 2005-01-17 12:15 strk * Added GEOMETRYCOLLECTION(EMPTY) support 2005-01-17 11:44 strk * Used quote_ident() for spatial columns constraints nams, suggested by Bernhard Herzog 2005-01-17 09:21 strk * Added one more bytes for terminating NULL in utf8 encoder 2005-01-16 16:50 strk * String escaping algorithm made simpler and more robust. Removed escaped strings leaking. Fixed UTF8 encoder to allocate enough space for 3bytes chars strings. 2005-01-14 16:36 strk * Switched to preprocessor driver CREATEFUNCTION attribute specification 2005-01-13 18:26 strk * estimated_extent() implemented for PG<80 2005-01-13 17:41 strk * estimated_extent() prepared for future expansion (support of pre-800 PGSQL) 2005-01-13 13:37 strk * Updated expected error message on !closed polygon rings to match current one. 2005-01-13 13:36 strk * Added closed-ring check for polygon geometry inputs. 2005-01-13 10:54 strk * changed asText to asEWKT for lossless conversions 2005-01-13 10:45 strk * Added GEOSexception test 2005-01-13 10:44 strk * Fixed more tests 2005-01-13 10:37 strk * Changed astext() calls with asewkt() to mach expected results. 2005-01-13 09:42 strk * Updated 1.0.0 release date and changed version to 1.0.0RC1 2005-01-13 09:10 strk * Removed initial README, replaced with an updated one. 2005-01-13 09:10 strk * Added updated README file 2005-01-13 08:48 strk * Added note about utils/postgis_restore.pl 2005-01-13 08:43 strk * Added more New Things 2005-01-13 08:39 strk * Added release notes chapter 2005-01-12 17:03 strk * added USE_ICONV configuration 2005-01-12 17:03 strk * Added optional UTF8 output support as suggested by IIDA Tetsushi 2005-01-12 09:38 strk * Added not for AUTOCACHE_BBOX setting 2005-01-12 09:31 strk * don't drop the regress test 2005-01-12 09:23 strk * Added a sleep before running make dist 2005-01-12 08:43 strk * commented notice in LWGEOM_noop() 2005-01-12 08:30 strk * Changed force_*d(geom) and multi(geom) to support AUTOCACHE_BBOX 2005-01-12 07:37 strk * setSRID() and force_2d() changed to use PG_LWGEOM_construct() entry point, for AUTOCACHE_BBOX support. 2005-01-12 07:27 strk * forceRHR() and reverse() forced to use pglwgeom_serialize() entry point for honouring the AUTOCACHE_BBOX define 2005-01-11 18:05 strk * fixed postgis_gist_joinsel signature for PG72 2005-01-11 18:04 strk * added optional versions specificatoin on command line 2005-01-11 17:56 strk * dropped special pgsql 7.1 handling 2005-01-11 17:46 strk * added postgis_lib_build_date() and postgis_scripts_build_date() docs 2005-01-11 17:45 strk * Changed builddate format to Y-m-D H:M:S 2005-01-11 17:39 strk * Added postgis_lib_build_date() and postgis_scripts_build_date() provided by Markus Schaber 2005-01-11 16:54 strk * initial revision 2005-01-11 15:40 strk * Comments cleanup. 2005-01-11 15:10 strk * removed obsoleted script 2005-01-11 15:09 strk * Added SRID checks for all operators. 2005-01-11 14:20 mcayland * Added new indexable operators <<|, &<|, |&> and |>> to allow comparisons of bounding box positions in the Y axis 2005-01-11 14:10 strk * Fixed translate() to always use one of the AUTOCACHE_BBOX honouring entry points. Cleaned up expand(geom). 2005-01-11 08:33 strk * removed link from geometry_dump type ref 2005-01-11 08:29 strk * Dropped inherithed rule for static lib build (liblwgeom.a), added a 'tsort' rule to check xdeps status. 2005-01-11 08:12 strk * Fixed memory handling bug in dump(geom) 2005-01-10 09:47 strk * Added missing prototypes 2005-01-10 09:28 strk * changed size_t printing lines to use %lu and unsigned long cast 2005-01-10 09:27 strk * renamed misures.c to measures.c 2005-01-09 20:28 strk * size_t usage cleanups. 2005-01-09 18:32 strk * Avoided lwcollection_deserialize call for non collections (was broken). 2005-01-07 18:32 strk * Dropped BOX2D operators. They will rely on cast to geometry. 2005-01-07 16:43 strk * Fixed handling of empty collection in GEOS2POSTGIS converter 2005-01-07 14:42 strk * Made accum(geometry) compatible with PG73. 2005-01-07 14:23 strk * removed unused variable 2005-01-07 14:20 strk * Added a geometry type OID extractor and caching function. 2005-01-07 12:33 strk * Added a note about compatibility of Dump(geometry) 2005-01-07 12:28 strk * made accum(geom) compatible with PG72 2005-01-07 12:24 strk * dropped dump(geometry) for PGSQL<73 builds 2005-01-07 12:09 strk * fixed var declaration misplacement 2005-01-07 12:00 strk * make LWGEOM_{to,from}_bytea available to all pgsql versions 2005-01-07 11:57 strk * fixed typo in symdifference function definition 2005-01-07 11:55 strk * fixed postgis_gist_joinsel definition for PG73 2005-01-07 11:50 strk * Moved pgsql compatibility code into pgsql_compat.h 2005-01-07 10:26 strk * variable declaration cleanups. 2005-01-07 10:25 strk * Added WARNING define for pgsql<73 2005-01-07 10:13 strk * fixed misplaced declaration after body start 2005-01-07 10:10 strk * Dump(geometry) enabled by default. 2005-01-07 10:06 strk * Added Dump(geometry) doc 2005-01-07 10:04 strk * cleanup 2005-01-07 09:56 strk * fixed typo in error message 2005-01-07 09:56 strk * fixed typo in error message 2005-01-07 09:52 strk * JOINSEL disabled for builds against pgsql<80 2005-01-07 00:58 strk * Initial import 2005-01-06 15:45 strk * Added MakePolygon documentation 2005-01-06 15:34 strk * Added not about possible lost of simplicity() using SnapToGrid(), added links to the function from there and simplify() 2005-01-06 15:29 strk * Renamed Apply_Grid to SnapToGrid, documented behaviour of collapsed geoms. 2005-01-06 13:46 strk * Added makepolygon(geometry, geometry[]) 2005-01-06 13:45 strk * forward declarations for lwpoly_from_lwlines(), ptarray_clone() and ptarray_isclosed2d() 2005-01-06 13:45 strk * Added lwpoly_from_lwlines() 2005-01-06 13:44 strk * Added ptarray_clone() and ptarray_isclosed2d() 2005-01-06 09:38 strk * Added accum(geom) documentation 2005-01-06 09:36 strk * Added accom(geom) aggregate 2005-01-06 09:08 strk * Added apply_grid wrappers. 2005-01-06 08:51 strk * Modified transform() to always use PG_LWGEOM_construct entry point for output (to support AUTOCACHE_BBOX). 2005-01-06 01:10 pramsey * Fix spelling error 2005-01-05 22:52 strk * updated Polygonize doc 2005-01-05 22:48 strk * Had translate compute bbox cache translating input one if present. Cleanups. 2005-01-05 22:11 strk * Made apply_grid compute output bbox WHEN_SIMPLE (input bbox is present) 2005-01-05 21:59 strk * Simplify reworked to use LWGEOM abstraction (no more flattening of input collection). 2005-01-05 17:08 strk * Added apply_grid doc 2005-01-05 17:06 strk * Integrated apply_grid() contributed function. 2005-01-05 12:44 strk * Added is_worth_caching_serialized_bbox(). Renamed lwgeom_setSRID() to pglwgeom_setSRID(). Fixed a bug in PG_LWGEOM_construct support for AUTOCACHE_BBOX. 2005-01-05 10:06 strk * Added AUTOCACHE_BBOX support in PG_LWGEOM_construct(). 2005-01-05 09:47 strk * collect(geom, geom) and collect_garray(geom[]) use WHEN_SIMPLE strategy for bbox computation. pglwgeom_serialize() honour user's AUTOCACHE_BBOX define. BBOXCACHE_BEHAVIOURS updated. 2005-01-03 17:51 strk * GEOSpolygonize returns GEOMETRYCOLLECTION instead of MULTIPOLYGON 2005-01-03 15:00 strk * iscacheable patch from Carl Anderson 2004-12-31 13:11 strk * update ExteriorRing doc 2004-12-31 13:10 strk * Made ExteriorRing use LWGEOM. 2004-12-31 12:46 strk * update InteriorRingN doc 2004-12-31 12:44 strk * GeometryN and InteriorRingN changed to use LWGEOM format (and the latter made OGC-strict). 2004-12-31 12:00 strk * updated 2004-12-31 11:39 strk * All output geoms serializzations made using pglwgeom_serialize 2004-12-31 11:31 strk * fixed bugs in convexhull, made GEOS2POSTGIS use pglwgeom_serialize 2004-12-31 11:30 strk * Fixed a bug in lwpoint_serialize_size 2004-12-31 11:26 strk * error messages and VARLENA handling cleanups 2004-12-31 10:47 strk * initial import 2004-12-31 10:35 strk * re-introduced G2P conversion profile for convexhull (was missing from previous patch) 2004-12-31 10:28 strk * Made convexhull use input bbox cache if any for output geom. 2004-12-31 09:04 strk * Varlena handling cleanups 2004-12-30 20:41 strk * updated 2004-12-30 20:36 strk * Rewrote GEOSCentroid() to pass exception using an input arg, and return NULL for EMPTY geom. 2004-12-30 16:08 strk * Made parse_WKT_lwgeom (text::geometry) use AUTOCACHE_BBOX heuristic, stricter use of PG text type 2004-12-30 15:59 strk * Fixed a bug in translate() and transform() leaving result geometries with the old bounding box cache. 2004-12-30 15:58 strk * Added compute_serialized_bbox_p() to always recomputed a geometry bounding box 2004-12-30 15:11 strk * Had LineFromMultiPoint make use of input SRID 2004-12-30 14:44 strk * Added AUTOCACHE_BBOX variable, defaulting to 1. 2004-12-30 13:47 strk * Introduced bbox caching worth evaluation functions, honoured in LWGEOM_in, LWGEOMFromWKB, and GEOS2POSTGIS. 2004-12-30 13:35 strk * Handled NULL returns from getCentroid making it an EMPTY GEOM 2004-12-30 10:27 strk * Applied Carl Anderson patch for LinearRing support. 2004-12-30 10:27 strk * USE_GEOS and USE_PROJ defaults switched to NO, and made overridable via environment. 2004-12-30 10:24 strk * Added cache_bbox trigger 2004-12-30 10:22 strk * moved some BBOX procs signatures from lwgeom_inout.c to lwgeom_pg.h 2004-12-30 10:21 strk * removed useless memory copies in ndims(geom) 2004-12-30 10:18 strk * initial revision 2004-12-28 09:23 strk * specified LineString input requirement for StartPoint and LastPoint 2004-12-27 13:34 strk * Expanded "GIS Objects" chapter adding OGC/PostGIS (E)WKT/B and canonical forms. 2004-12-27 12:50 strk * Added HasBBOX() item 2004-12-27 09:59 strk * Added bool hasBBOX(geometry). Removed useless input copy in zmflag(geometry). 2004-12-23 14:48 strk * Fixed help string, and added a TODO item 2004-12-23 11:02 strk * Updated <GEOM>FromWKB signatures to take bytea instead of text, Removed non-standard GeometryFromText references and substituted with OGC GeomFromText. 2004-12-23 10:39 strk * Adjusted some function refereces, added another subsection for Geometry Output functions. 2004-12-22 17:12 strk * Added Mark Cave-Ayland implementation of JOIN selectivity estimator. 2004-12-22 17:02 strk * initial revision 2004-12-22 10:32 strk * GeomFromWKB() and GeometryFromText() issue a warning if provided formats are not OGC-strict. Introduced GeomFromEWKT() and GeomFromEWKB() for extended formats. 2004-12-22 10:29 strk * Drop useless SRID from geometry when downloading EWKB format. 2004-12-21 17:46 strk * Made asText and asBinary strict OGC conformant, introduced asEWKT and asEWKB for extended version outputs. 2004-12-21 15:19 strk * Canonical binary reverted back to EWKB, now supporting SRID inclusion. 2004-12-21 15:17 strk * Made setSRID(geom, -1) actually *remove* srid from LWGEOM. 2004-12-21 12:21 mcayland * Fixed bug in pass 4 where sample boxes were referred as BOXs and not BOX2DFLOAT4. Also increased SDFACTOR to 3.25 2004-12-21 12:04 strk * Updated geom_accum to create *real* geometry arrays, changed aggregates using it accordingly. Fixed collect output type settings, and dropped CR/LF in lwgeom_functions_basic.c 2004-12-21 11:25 strk * allocation for deserialized lwline made after type checking 2004-12-20 17:49 strk * Added array element delimiter for type geometry 2004-12-20 14:21 strk * SRID is no more skipped from asText output. 2004-12-20 14:11 strk * Created a new 'Geometry Editors' section. 2004-12-20 14:02 strk * Added addBBOX() and dropBBOX() documentation. 2004-12-20 14:01 strk * Added dropBBOX(). 2004-12-17 18:00 strk * LWGEOM_gist_joinsel defined for all PG versions 2004-12-17 18:00 strk * Fixed call to geos_version.sh 2004-12-17 11:08 strk * Moved getMachineEndian from parser to liblwgeom.{h,c}. Added XDR and NDR defines. Fixed all usage of them. 2004-12-17 11:07 strk * Added missing prototype 2004-12-17 11:06 strk * Added GEOSnoop stub for non-geos installations 2004-12-17 10:10 strk * Added canonical binary conversions as bytea<->geometry casts and explicit _send and _recv for PG>73 2004-12-17 10:10 strk * getMachineEndian exported 2004-12-17 06:53 pramsey * Changes in preparation for 1.0.0RC1 2004-12-16 12:30 strk * Initial skel for geometry_send canonical binary rep. 2004-12-16 12:07 strk * pg_restore-800 handling 2004-12-15 13:10 strk * Added UpdateGeometrySRID documentation 2004-12-15 12:59 strk * Enforced schema use in UpdateGeometrySRID 2004-12-15 12:54 strk * Added UpdateGeometrySRID 2004-12-15 09:46 strk * updated TODO 2004-12-15 09:43 strk * Die if target database exists 2004-12-15 08:46 strk * Fixed memory leaks depending on input size. 2004-12-14 11:41 strk * Fixed a bug in lwgeom_dropBBOX() 2004-12-14 11:02 strk * Added geometry::text cast. 2004-12-14 09:47 strk * Added SRID check in collect_garray(); 2004-12-14 09:37 strk * reduced function calls in lwcollection_serialize_size 2004-12-14 09:29 strk * fixed a typo in polygonize function 2004-12-13 14:12 strk * updated 2004-12-13 14:03 strk * Initial skeleton on join selectivity estimator. Current estimators application for box2d && box2d operator. 2004-12-13 13:04 strk * lwpostgis.sql copy moved from root to lwgeom/Makefile 2004-12-13 12:56 strk * Handled more schema specification in 800 pg_restore output. 2004-12-13 12:25 strk * Removed obsoleted function and fixed some warnings. 2004-12-10 22:20 strk * Added notice about availability of shorter syntax for estimated_extent() 2004-12-10 22:16 strk * Added estimated_extent() doc. 2004-12-10 12:35 strk * implemented estimated_extent() function 2004-12-09 09:42 strk * Adjusted to work with new bytea WKB encoding, only supports 2d/3dz. 2004-12-08 14:46 strk * updated 2004-12-05 11:46 strk * Initial revision 2004-12-05 11:45 strk * commented out drops of unexistant tables 2004-12-05 11:44 strk * Changed AddGeometryColumns to not complain about invalid schema 2004-11-29 16:37 strk * Fixed a bug in pt_in_ring_2d. 2004-11-29 11:16 strk * Commented out useless CFLAGS override. 2004-11-29 11:15 strk * Some initializzations to make compiler happy. 2004-11-26 17:08 strk * Removed duplicated tests 2004-11-26 17:06 strk * Moved basic LWGEOM parsing tests in mainstream regress dir. 2004-11-26 16:54 strk * First regress test cleaned up. 2004-11-26 16:26 strk * Ported index regress test to lwgeom 2004-11-26 15:52 strk * Added regressions test notes 2004-11-26 15:50 strk * Finished cleanup of main regression test. 2004-11-26 15:06 strk * lwcollection_same allows different components ordering to reflect older behaviour. 2004-11-26 14:56 strk * Cleanup 2004-11-26 14:55 strk * Fixed a bug in lwcollection_same 2004-11-26 13:04 strk * Initial regress tests adaptation for lwgeom 2004-11-23 16:16 strk * POSTGIS2GEOS conversion failures handled cleanier 2004-11-19 17:39 strk * Massaged to work with pg_dump-7.2 and pg_restore-7.2 2004-11-19 17:29 strk * precision made of type signed int (for %.*d correct use). 2004-11-19 13:48 strk * Added support for PG<73 in gist support functions and modified preprocessor flags to be compatible with older versions. 2004-11-19 13:32 strk * Fixed IN/OUT representation of types to support < 73 PG versions 2004-11-18 18:16 strk * updated 2004-11-18 18:14 strk * Added a copy of the PQunescapeBytea function found in libpq of PG>=73 2004-11-18 13:47 strk * Substituted isfinite() with finite(). 2004-11-17 15:28 strk * Yet another GEOSHasZ bug fix 2004-11-17 15:18 strk * GEOSHasZ now checks both DoubleNotANumber and isFinite 2004-11-17 09:07 strk * Changes GEOSHasZ to use isfinite() 2004-11-17 07:57 strk * Fixed a typo in geometry type names. 2004-11-16 13:54 strk * SRID checks and enforce for all GEOS operations. Z value handled so to show it only when available. 2004-11-16 13:52 strk * Added GEOSHasZ() and GEOSSetSRID() 2004-11-15 10:51 strk * Fixed a bug in PIP invocation, added some debugging lines. 2004-11-13 01:47 pramsey * Add information about where test was downloaded from. 2004-11-12 18:13 strk * Deleted entries in spatial_ref_sys and geometry_columns. 2004-11-12 17:50 strk * Made PointN, InteriorRingN and GeometryN 1-based as required by OGC conformance suite. 2004-11-11 21:29 pramsey * Added grep -v ^# to cpp pipeline for .sql generation. Under OS/X cpp adds a header with a # comment field to the start of the output file. 2004-11-11 09:42 strk * updated 2004-11-08 11:08 strk * Added -fPIC to CFLAGS as suggested by Vincent Schut. 2004-11-05 11:44 strk * updated 2004-11-05 11:44 strk * Had isvalid raise a NOTICE with invalidity message. 2004-11-05 10:04 strk * updated 2004-11-05 08:16 strk * Added ndims(geometry) function, used in a 3rd constraint set by AddGeometryColumn, documented. 2004-11-04 11:40 strk * Renamed max/min/avg macros to LW_MAX, LW_MIN, LW_AVG. 2004-11-04 09:18 strk * Oops.. my attemt at moving lwpostgis.sql.in one dir up was bogus. 2004-11-04 08:56 strk * Moved lwpostgis.sql.in and it's build logic up to root directory. 2004-11-02 17:53 strk * Fixed "compat.h" include to be local. 2004-11-02 16:48 strk * Added a copy of GNU vsprintf.c file and compiled in. 2004-11-02 15:59 strk * min/max macro made available regardless of MINGW32 define. 2004-11-02 07:50 strk * Updated as suggested by Frank Warmerdam. 2004-11-02 07:25 strk * Fixed a typo in probe_geometry_columns() reported by Vinko Vrsalovic. 2004-10-29 05:28 strk * updated 2004-10-29 05:27 strk * Fixed bug in AddGeometryColumn refusing to add 4D geoms. 2004-10-28 16:48 strk * Initial local TODO 2004-10-28 16:28 strk * header inclusion cleanup 2004-10-28 16:25 strk * Fixed bug in debugguing output 2004-10-28 16:24 strk * removed LF 2004-10-28 16:23 strk * More cleanups. 2004-10-28 16:13 strk * cleanups. 2004-10-28 16:10 strk * Made data structurs old-compilers-friendly. 2004-10-28 16:10 strk * Fixed a bug in LWGEOM_asGML. 2004-10-28 15:40 strk * Fixed geos-based opPolygonize include. 2004-10-28 09:38 strk * Cleanups. 2004-10-28 09:29 strk * Added makeline(point, point). Changed LineFromMultiPoint definition. 2004-10-28 09:00 strk * Added AddPoint(line, point, [position]) and support API functions. 2004-10-28 07:56 strk * fixed name of line constructor as documentation reports it. LineFromMultiPoint(). 2004-10-28 07:45 strk * collect(geometry, geometry) re-introduced. collector() is an alias for collect(). 2004-10-27 15:40 strk * Added MakeBox2D, MakeBox3D implementation and documentation. 2004-10-27 15:19 strk * MakePoly renamed to Polygonize 2004-10-27 15:09 strk * updated 2004-10-27 14:28 strk * Added constructors docs and intial organizzation for postgis extension functions. 2004-10-27 13:35 strk * Unset debug define. 2004-10-27 12:30 strk * AsSVG returns NULL on GEOMETRY COLLECTION input. 2004-10-27 11:06 strk * updated 2004-10-27 11:05 strk * Added polygonize interface (makepoly aggregate) 2004-10-27 11:02 strk * Removed another getbox2d() call. 2004-10-27 10:55 strk * Fixed fix_geometry_columns() to leave correctly linked records untouched. 2004-10-26 16:48 strk * Bug fix in GEOS version extractor. 2004-10-25 17:07 strk * Obsoleted getbox2d(). Use getbox2d_p() or getbox2d_internal() instead. 2004-10-25 15:31 strk * portable math expressions. 2004-10-25 14:20 strk * Y axis reverse and relative path fixes from Olivier Courtin. 2004-10-25 12:27 strk * Removed useless network type includes, Added param.h include for BYTE_ORDER defines under win32. 2004-10-21 19:48 strk * Stricter syntax fixes. Reported by S�bastien NICAISE <snicaise@iciatechnologies.com> 2004-10-21 19:47 strk * updated 2004-10-21 19:46 strk * ZMflags check on costituent geometries only performed when there is at least one. 2004-10-21 19:45 strk * Added detect_geos_version in all: rule 2004-10-18 11:35 strk * Added reverse(geometry) and ForceRHR(geometry) documentation. 2004-10-18 11:29 strk * makeline_from_multipoint renamed to line_from_multipoint 2004-10-18 09:37 strk * updated 2004-10-17 13:25 strk * removed USE_WKB partially-used define 2004-10-17 13:24 strk * HEXWKB polygon 2004-10-17 13:01 strk * updated 2004-10-17 12:59 strk * HEXWKB multiline output 2004-10-17 12:51 strk * Fixed a bug in lwline_serialize_buf preventing dimension override 2004-10-17 12:43 strk * Fixed a debugging function output bug 2004-10-17 12:26 strk * Point and MultiPoint loaded using HEXWKB. 2004-10-17 12:16 strk * fixed prototype for user query table 2004-10-17 12:15 strk * Bug fixed in multipoint4D creation 2004-10-15 22:02 strk * updated 2004-10-15 22:01 strk * Initial WKB functionalities 2004-10-15 16:21 strk * makeline_from_multipoint() implemented and exposed. 2004-10-15 15:25 strk * updated 2004-10-15 15:21 strk * Fixed a bug in outputput dimension detection for makeline() 2004-10-15 15:01 strk * updated 2004-10-15 15:00 strk * Added debugging lines 2004-10-15 15:00 strk * Fixed a bug in make_lwline 2004-10-15 11:52 strk * updated 2004-10-15 11:48 strk * Fixed a bug making asSVG return a spurious char at the end. 2004-10-15 11:42 strk * Added makeline() aggregate and make_lwline() API method. 2004-10-15 09:44 strk * updated AsSVG doc 2004-10-15 09:41 strk * changed precision semantic back to number of decimal digits 2004-10-15 09:41 strk * Added a trailing zeros trimmer 2004-10-15 08:26 strk * Fixed handling of mixed dimensioned geometries in source table. 2004-10-15 07:35 strk * Fixed a bug introduced by me (byteorder skipped for inner geoms in WKB) 2004-10-14 10:28 strk * Updated pgsql2shp documentation. 2004-10-14 09:59 strk * Added support for user query (replacing schema.table) 2004-10-13 19:33 strk * updated 2004-10-13 19:32 strk * Added third buffer arg expanation 2004-10-13 18:49 strk * fixed arg number in buffer third arg 2004-10-13 18:39 strk * Added a third argument to the buffer() function. 2004-10-13 17:21 strk * Dropped SRID argument from point constructor. Unified procedure name to 'makepoint' for 2d,3dz,4d and 'makepointm' for 3dm. 2004-10-13 15:20 strk * updated 2004-10-13 15:19 strk * Added point constructors PG funx. 2004-10-13 14:26 strk * Added simpler lwpoint constructors. 2004-10-11 14:36 strk * updated 2004-10-11 14:34 strk * Added endiannes specification for postgis-1.0.0+ 2004-10-11 14:03 strk * Added endiannes specification to unparse_WKB, AsBinary, lwgeom_to_wkb. 2004-10-11 12:23 strk * Added test.o to cleanup list 2004-10-11 12:23 strk * updated 2004-10-11 11:53 strk * Moved misuring functions to misures.c (from lwgeom_functions_basic.c). Added -lm to build line for the API test application. 2004-10-11 11:46 strk * changed description of pgsql2shp -b switch 2004-10-11 10:31 strk * Changed collect() to return MULTI* if applicabe (all input is corresponding SINGLE type). 2004-10-11 10:30 strk * Added debug strings 2004-10-11 09:55 strk * collect() always return a collection, with a component for each input geometry. memcollect() obsoleted. 2004-10-11 09:46 strk * Fixed bug making it unbuildable. 2004-10-11 09:32 strk * Added lwgeom_addBBOX() and lwcollection_construct_empty() 2004-10-11 07:15 strk * lwgeom_same new implementation 2004-10-11 06:03 strk * updated 2004-10-10 20:31 strk * segmentize2d() port and use of new LWGEOM structure. 2004-10-09 15:17 strk * updated 2004-10-08 13:26 strk * updated 2004-10-08 13:21 strk * Debugging output cleanup. 2004-10-08 13:20 strk * Changed LWGEOM structure to point to an actual BOX2DFLOAT4. Renamed most function to reflect a TYPE_method naming convention. (you'll need a dump/reload for it to work) Added more manipulation functions. 2004-10-08 13:16 strk * added memory allocation debugging 2004-10-08 13:15 strk * Added box2d.o module, reverted SCRIPTS_VERSION to 0.1.0. 2004-10-08 13:15 strk * Initial revision 2004-10-08 10:48 strk * Some updates 2004-10-08 07:01 strk * Dropped HWGEOM from this branch. 2004-10-07 22:02 strk * updated 2004-10-07 21:52 strk * Lots of rewriting/cleanup. TypeM/TypeZ supports. 2004-10-07 21:51 strk * Fixed a bug in 4d handling 2004-10-07 20:39 strk * Fixed bugs in TYPE_ macro usage 2004-10-07 17:18 strk * Changed ptarray2d_construct interface. 2004-10-07 17:18 strk * Changed geometrytype() to support TYPEM. 2004-10-07 17:17 strk * Changed AddGeometryColumn to handle TYPEM. Updated SCRIPTS_VERSION to 1.1.0 2004-10-07 17:15 strk * Fixed TYPEM handling. 2004-10-07 10:03 strk * API cleanup, more steps toward standalone library. 2004-10-07 06:54 strk * cleanups 2004-10-06 17:04 strk * ZM handling. Log trimmed. 2004-10-06 10:11 strk * Other separator fixes 2004-10-06 09:52 strk * Added zmflag(geom) doc 2004-10-06 09:40 strk * Handled 0-DBF-attributes corner case. 2004-10-06 08:53 strk * Added zmflag(geom) function. 2004-10-06 08:17 strk * updated 2004-10-06 07:19 strk * Left off a semicolon in previous patch... 2004-10-05 22:46 strk * Removed PGSQLException use as suggested by Kris Jurka 2004-10-05 21:59 strk * Flex invocation patch by Kris Jurka. 2004-10-05 21:54 strk * Yes another change in SPI_cursor_open 2004-10-05 21:53 strk * Fixed bugs in Centroid (not GEOS) 2004-10-05 21:42 strk * Cleanups for older compilers and PG verisons. 2004-10-05 21:20 strk * updated 2004-10-05 21:08 strk * Added debugging lines, fixed a bug in TYPE_HASSRID and TYPE_HASBBOX macros. 2004-10-05 21:08 strk * Made clean rule verbose 2004-10-05 17:15 strk * Bug fix in size computation. 2004-10-05 16:28 strk * Added ZM dimensions flags knowledge. 2004-10-05 16:07 strk * updated 2004-10-05 15:12 strk * Added newlines in standalone reporters 2004-10-05 15:11 strk * Added force_3dz, force_3dm docs 2004-10-05 15:11 strk * Changed default variable setting to a more portable syntax 2004-10-05 07:53 strk * ZM aware WKT/WKB input/output. 2004-10-04 13:53 strk * Serialized form and WKB prepared to accept ZM flags replacing DD (dimensions) 2004-10-04 09:25 strk * Added missing prototype 2004-10-03 15:57 strk * updated 2004-10-03 15:52 strk * Made GEOS<->LWGEOM converters keep geometry structures. Fixed bug in serializers. Added noop(geometry) for deserialize/serialize debugging. 2004-10-01 14:49 strk * Added lwgeom_add(LWGEOM *to, int where, LWGEOM *what). Added LWGEOM2GEOS keeping input geometry structure. 2004-10-01 07:51 strk * initial revision 2004-10-01 07:51 strk * Added runtime cast functions. 2004-09-30 16:06 strk * bug fixes 2004-09-30 15:42 strk * Added BBOX finders and its support in serializer. 2004-09-30 11:49 strk * updated 2004-09-30 11:45 strk * More common flags between LW<type>s. LWGEOM_summary output made cleaner and moved to lwgeom_debug.c 2004-09-30 08:18 strk * Added missing liblwgeom.c file. Made LWMPOINT, LWMLINE, LWMPOLY compatible with LWCOLLECTION. Fixed reverse() and forcerhr() to maintain geometry structure. 2004-09-30 06:54 strk * updated 2004-09-29 15:25 strk * Added serialize function for LWGEOM 2004-09-29 10:50 strk * Big layout change. lwgeom.h is public API liblwgeom.h is private header lwgeom_pg.h is for PG-links lw<type>.c contains type-specific functions 2004-09-29 06:31 strk * Changed LWGEOM to PG_LWGEOM. Changed LWGEOM_construct to PG_LWGEOM_construct. 2004-09-28 17:13 strk * Removed ^Ms, added note about flatting nature of LWGEOM_EXPLODED. 2004-09-28 16:22 strk * Added AsGML function ref 2004-09-28 09:31 strk * Fixed a bug in PostGIS2GEOS_point 2004-09-28 09:05 strk * updated 2004-09-28 09:01 strk * Added forceRHR() and support functions. 2004-09-28 09:00 strk * Added ptarray_isccw(). Added extern modifiers to public prototypes. 2004-09-28 08:28 strk * updated 2004-09-28 08:22 strk * Added reverse(geometry) and support functions 2004-09-28 08:21 strk * Added some const modifiers 2004-09-27 17:27 strk * updated 2004-09-27 08:26 strk * Debugging defines set to NODEBUG. 2004-09-27 08:24 strk * updated 2004-09-27 08:23 strk * Added USE_GIST variable on top of file. Changed true values report as fraction of total rows. 2004-09-24 22:27 strk * Added profile.h deps 2004-09-24 12:20 strk * Added worst and best percentile for both intersects and distance 2004-09-24 11:58 strk * approximated nums to 2 decimal digits 2004-09-24 11:35 strk * initial intersects profiler frontend implementation 2004-09-24 09:46 strk * Added box2d->geometry cast. 2004-09-23 16:14 strk * Added -m / -z switches to control output type: XYM,XYMZ. 2004-09-23 15:09 strk * Modified GML output as suggested by Martin Daly. 2004-09-23 11:12 strk * Initial GML output routines. 2004-09-23 10:13 strk * Profile output modified again, input geoms points and conversion times separated 2004-09-22 17:13 strk * indentation fixes 2004-09-22 17:12 strk * indentation and function-call-debugging preparation 2004-09-22 17:11 strk * removed some compiler warnings 2004-09-22 17:11 strk * Added missing prototype to make compiler happy 2004-09-22 16:52 strk * Added lwpoint_size, lwline_size, lwpoly_size for computing serialized size from deserialized objects. 2004-09-22 16:29 strk * Some more source file cleanups. 2004-09-22 16:09 strk * Moved size computation functions in module static scope. Renamed public one to lwgeom_size(char *). 2004-09-22 15:15 strk * lw<type>_findlength function made statics of lwgeom_api.c. public functions with those names should accept LW<TYPE> pointers instead.. 2004-09-22 15:11 strk * LWGEOM TODO moved back to the lwgeom/ dir. 2004-09-22 14:57 strk * updated 2004-09-22 14:57 strk * line_interpolate_point added. 2004-09-22 14:56 strk * fixed a comment 2004-09-22 13:45 strk * Added 'label' argument to the profreport macro. 2004-09-22 11:42 strk * Renamed lwgeom_npoints_recursive to lwgeom_npoints and exposed in lwgeom.h. Changed SERIALIZED_FORM macro to be less LWGEOM structure aware. Added profiling header file. Modified profiling calls to include total query time. Initial profiling support in the mindistance function. 2004-09-22 04:48 pramsey * Add number nesting to sections. Fix link in postgis.xml 2004-09-21 21:04 strk * slightly changed PROF_SUM output for sort acceptance 2004-09-21 20:44 strk * Fixed a profiler bug. Added points count and doubled profiler output. 2004-09-21 19:10 pramsey * Add section autolabelling to printed output 2004-09-21 19:09 pramsey * Add autolabelling to sections in generated HTML. 2004-09-21 17:50 strk * Added missing profiling report calls in predicates 2004-09-21 17:36 strk * Added GEOS profiling support. 2004-09-21 16:08 strk * reduced memory copies in GEOS2POSTGIS() 2004-09-21 16:07 strk * buffer serialized accept NULL as return-size pointer 2004-09-21 15:44 strk * Added lwgeom_empy_length(), lwgeom_constructempty_buf(), lwexploded_serialize_buf() 2004-09-21 10:57 strk * Added lwexploded_findlength 2004-09-20 21:13 strk * Optimized postgis->geos conversion 2004-09-20 21:13 strk * commented pfree call in GEOSnoop (seems to generate memory faults) 2004-09-20 17:14 strk * updated 2004-09-20 17:13 strk * changed comments to better show shape type handling 2004-09-20 17:11 strk * Added -d -d availability notice in help string. Added user notice about output shape type. 2004-09-20 17:03 strk * Added force_4d(geometry) 2004-09-20 16:33 strk * Added 4d geometries support. Changelog section moved at bottom file. 2004-09-20 14:14 strk * Fixed a bug in popbyte. Trapped WKB endiannes errors. 2004-09-20 13:50 strk * updated 2004-09-20 13:49 strk * Postgis-1.x support (LWGEOM) added. postgis version detected at runtime. Endiannes unchecked ... TODO. 2004-09-20 12:07 strk * Changed postgis.sql to lwpostgis.sql 2004-09-20 12:07 strk * Added lwpostgis.sql rule 2004-09-20 10:58 strk * updated layout description and configuration instructions 2004-09-20 10:09 strk * Renamed README 2004-09-20 10:08 strk * Added missing 'uninstall' rules. Fixed existing install rules. 2004-09-20 09:58 strk * Configuration and common Makefile work moved to Makefile.config Build is possible from each directory and from the root directory. 2004-09-20 09:29 strk * added missing prototype 2004-09-20 09:22 strk * Reworked build scripts. 2004-09-20 09:21 strk * fixed bugs in non-GEOS centroid function 2004-09-20 09:20 strk * cleanups 2004-09-20 08:53 strk * generalized library ignore line 2004-09-20 08:52 strk * Added postgis_geos_version.h 2004-09-20 08:52 strk * included local postgis_geos_version.h 2004-09-20 08:51 strk * Added detect_geos_version rule 2004-09-20 08:29 strk * Moved lwgeom TODO in the root 2004-09-20 08:25 strk * HWGEOM functions moved under hwgeom/ directory 2004-09-20 08:21 strk * fixed typo 2004-09-20 07:50 strk * prepared to contain old internal representation code 2004-09-18 22:15 strk * Fixed a serius bug in pointArray_construct. Added debugging output, optimized some functions, indentation buties.. 2004-09-18 22:13 strk * Added more debugging output 2004-09-16 20:36 pramsey * Reorganize OpenGIS function reference into categories. 2004-09-16 15:50 mleslie * Added the distance_sphere function to calculate the distance between two points on an earth-sized sphere using an algorithm implemented by Bruno Wolff III. Added the postgresql loader function. 2004-09-16 10:42 strk * Added box3d_to_box2df_p to reduce number of required memcpys 2004-09-16 09:06 strk * Changed SPI_cursor_open call changes to be used for USE_VERSION > 80 (change seems to be intended for future releases) 2004-09-16 09:05 strk * Added binary predicate short-circuits 2004-09-16 09:05 strk * Added getbox2d_internal 2004-09-16 09:04 strk * updated 2004-09-14 12:31 strk * CHIP and GEOS types (forgot to add) 2004-09-14 12:23 strk * Added a note about tweeking random_page_cost 2004-09-14 08:39 strk * fixed a typo in the geometry_send function definition 2004-09-14 07:43 strk * Updated call to SPI_cursor_open to 8.0 (beta2) interface. 2004-09-13 19:04 strk * updated 2004-09-13 17:59 strk * removed old files from Attic/ 2004-09-13 15:37 pramsey * Added pdf rule that uses pdfxmltex 2004-09-13 14:26 strk * Added binary input/output function for type geometry. 2004-09-13 14:26 strk * indentation fix 2004-09-13 13:35 strk * updated 2004-09-13 13:32 strk * Added AsSVG(). 2004-09-13 08:48 strk * Added POINT rendering info for AsSVG function 2004-09-10 18:41 pramsey * Bump version numbers to 0.9.0 2004-09-10 16:41 pramsey * Added 'recommended' to proj/geos flags 2004-09-10 16:19 pramsey * Note 8.0 support and w32 2004-09-10 16:16 pramsey * Added Log tag to header. 2004-09-10 15:52 strk * Added asSVG documentation 2004-09-10 13:26 strk * updated 2004-09-10 13:25 strk * fixed a memory fault 2004-09-10 12:49 strk * Included SVG output function, modified to have precision expressed in terms of significant digits. 2004-09-10 08:48 strk * Added all ..FromWKB functions, asbinary(geom) and bytea<->geom casts 2004-09-10 07:36 strk * asbinary(), geomfromwkb 2004-09-09 22:48 pramsey * Changes in preparation for 0.9 2004-09-09 20:51 pramsey * Fix silly entity handling in chunked mode HTML generation 2004-09-09 19:08 pramsey * Added FAQ for mapserver section and entries on SQL spatial queries. 2004-09-09 17:38 pramsey * Added example spatial SQL section. 2004-09-09 15:37 pramsey * Add --output flag to html build rule 2004-09-08 16:34 strk * some bug fixes... geometry_analyze added 2004-09-08 14:30 strk * Fixed bug in GEOS link reference 2004-09-08 14:27 strk * updated 2004-09-08 14:19 strk * Added segmentize() 2004-09-08 14:18 strk * Added segmentize(geom,double) documentation 2004-09-08 10:57 strk * updated 2004-09-08 10:44 strk * re-introduced 'jw' optional production method 2004-09-08 10:25 strk * Fixed a bug in the z() function. Added ! GEOS implementation of Centroid(). 2004-09-08 00:31 pramsey * Commit today's edits. 2004-09-07 22:40 pramsey * Make default html output be a single page. 2004-09-07 22:35 pramsey * Change chunking depth to "chapter". 2004-09-07 22:28 pramsey * More minor editorial changes. 2004-09-07 22:28 pramsey * Changed Docbook processing from DSSSL to XSL. 2004-09-07 17:04 strk * GEOS support added. 2004-09-07 07:47 strk * Added CHIP type and support funx 2004-09-06 16:18 strk * updated some comments 2004-09-06 16:05 strk * updated 2004-09-06 16:04 strk * Changed getbox2d_p signature to return 0 for EMPTY geometries. Ported DP simplifier. 2004-09-06 12:24 strk * Added IsEmpty() 2004-09-06 10:37 strk * Finished BOX3D functions porting. Added envelope() and extent3d(). 2004-09-06 09:32 strk * Added min/max coordinates from box2d and box3d. Made geometry->box3d cast actually use 'z' value. 2004-09-06 09:13 strk * Added box3d support and expand(geom|box2d|box3d, double) 2004-09-04 19:58 pramsey * More minor edits. 2004-08-28 23:00 pramsey * Replace all tabs with spaces. 2004-08-28 22:55 pramsey * Updated street address reference. 2004-08-28 22:54 pramsey * Removed < sign and replaced with < 2004-08-27 16:01 strk * Added geom_accum(), collect_garray() and collect() 2004-08-27 15:04 strk * updated 2004-08-27 15:03 strk * Fixed bug in lwgeom_explode allocating less memory then needed. 2004-08-27 14:35 strk * Added LWGEOM_EXPLODED structure definition and utility funx. Added collector() function and memcollect() aggregate. Still faulting... 2004-08-27 08:13 strk * Added point_inside_circle() and translate() 2004-08-27 08:12 strk * Fixed typo ( mem_collect ==> memcollect ) 2004-08-26 16:55 strk * max_distance() raises an 'unimplemented yet' error. 2004-08-26 16:44 strk * Added nrings(geom), multi(geom) and all of <type>FromText(geom, [srid]) 2004-08-26 15:04 strk * updated 2004-08-26 15:02 strk * Added (bogus) max_distance(geom,geom) 2004-08-26 12:55 strk * Added distance(geometry) and all support functions. 2004-08-26 12:54 strk * Added a note about spheroid computation 2004-08-26 08:57 strk * Added spheroid type and functions 2004-08-25 15:28 strk * Added IsClosed() and force_collection() 2004-08-25 15:26 strk * Added macros for LWGEOM.type manipulation 2004-08-25 13:41 strk * Added force_3d 2004-08-25 12:32 strk * Added perimeter,perimeter2d,perimeter3d. Modified length,length2d,length3d semantic. Added force_2d. 2004-08-25 12:29 strk * Added serialized functions writing to a pre-allocated buffer. 2004-08-25 07:29 strk * Moved some OGC functions from lwgeom_inout.c to lwgeom_ogc.c. Added area2d (area) to lwgeom_functions_basic.c 2004-08-25 07:28 strk * Added lwgeom_pg to contain PG-specific functions/interfaces. 2004-08-24 16:33 strk * Added StartPoint(), EndPoint() 2004-08-24 16:20 strk * Added X(), Y() and Z() funx 2004-08-24 15:50 strk * PointN() ported. 2004-08-24 15:10 strk * fixed a bug preventing ExteriorRing() and InteriorRingN from setting the correct SRID. 2004-08-24 15:07 strk * updated 2004-08-24 15:05 strk * Added NumInteriorRings() and InteriorRingN() 2004-08-24 14:48 strk * Added dimension() and exteriorring() 2004-08-24 14:47 strk * Added LWGEOM_construct() function to easy the work of dealing with SRID/BBOX optional embedding. 2004-08-24 13:45 strk * Fixed a bug in lwgeom_getSRID() 2004-08-24 13:35 strk * Indentation and debugging output. 2004-08-24 13:34 strk * fixed a typo in a comment 2004-08-24 13:33 strk * Fixed a bug in LWGEOM_addBBOX preventing it to detect missing BBOX embedding. 2004-08-24 10:01 strk * OGC functions (not implemented by GEOS) moved to lwgeom_ogc.c. Renamed PG-exposed functions to start with LWGEOM 2004-08-24 09:34 strk * Added npoints,numpoints,numgeometries,geometryn 2004-08-24 07:40 strk * transformation work made on an input copy (made by setSRID). previous behaviour was unsafe (scribbling input object). 2004-08-24 07:32 strk * initial import 2004-08-24 06:59 strk * added missing prototype 2004-08-24 06:56 strk * geos version detector and wrapper used from parent directory 2004-08-23 16:05 strk * fixed typo 2004-08-23 15:57 strk * versioning functions completed 2004-08-23 15:41 strk * changed install rule to install lwpostgis.sql instead of lwgeom.sql 2004-08-23 15:37 strk * Changed SCRIPTS_VERSION to 0.0.1 2004-08-23 13:54 strk * proj support added 2004-08-23 13:40 strk * deleted debugging block from summary() fn 2004-08-23 13:38 strk * Added getPoint(POINTARRAY *pts, int ptnum) 2004-08-23 10:49 strk * Fixed a bug in serializedform length computation (for collection). 2004-08-23 08:32 strk * Removed custom allocator from lwgeom_api. Added summary(geometry). Some indentation. 2004-08-20 16:36 strk * transform() support 2004-08-20 16:35 strk * initial skel for transform() 2004-08-20 14:54 strk * updated 2004-08-20 14:54 strk * gist operators support functions renamed to allow for finer control by postgis_restore.pl 2004-08-20 14:52 strk * Hardcoded some functions being obsoleted 2004-08-20 14:08 strk * Added Geom{etry,}FromWkb(<geometry>,[<int4>]) funx. Added LWGEOM typedef and SERIALIZED_FORM(LWGEOM) macro. Made lwgeom_setSRID an API function. Added LWGEOM_setAllocator(). 2004-08-20 10:24 strk * Added lwpostgis.sql 2004-08-20 10:23 strk * removed leak from mem_size() 2004-08-20 09:35 strk * lwgeom_mem_size uses int32 cast instead of int 2004-08-20 09:31 strk * bug fixed in lwgeom_mem_size 2004-08-20 08:14 strk * Whole output wrapped in transaction blocks. Drops are out of transaction, and multiple transactions are used for INSERT mode. 2004-08-20 07:57 strk * Fixed a bug in 'append-mode'. Added -g switch to specify geometry column. Added a note about -d mode conceptual bugs. 2004-08-19 14:16 strk * indentation fixes 2004-08-19 14:15 strk * added lwpostgis.sql build rule 2004-08-19 14:05 strk * Added finite coordinate check. Reduced required bounding box copies. 2004-08-19 13:57 strk * mem_size removed from list 2004-08-19 13:56 strk * Added mem_size(lwgeom) 2004-08-19 13:54 strk * cpp checks updated to use 80 instead of 75 for USE_VERSION 2004-08-19 13:49 strk * initial import 2004-08-19 13:21 strk * initial import 2004-08-19 13:18 strk * Added selectivity estimation 2004-08-19 13:16 strk * some indentation fixes 2004-08-19 13:10 strk * fixed typos 2004-08-19 12:29 strk * added btree index support file 2004-08-19 12:28 strk * added btree index support 2004-08-19 10:52 strk * Fixed a bug in ascii dump "CREATE OPERATOR" scan 2004-08-19 09:30 strk * rename_geometry_table_constraints() re-introduced to make constraint names conformant. 2004-08-19 09:28 strk * fixed some of the buch of broken comments 2004-08-19 06:15 strk * USE_VERSION gets 80 where it got 75 2004-08-19 05:38 pramsey * Added some references to Proj4 and GEOS utility and source code location in the Makefile to add context for new users. 2004-08-18 13:46 strk * Added PG80 (75) patches. 2004-08-18 13:21 strk * Added skip of postgisgistcostestimate (obsoleted) 2004-08-18 08:26 strk * Spatial table constraints names get column name appended. rename_geometry_table_constraints() obsoleted. 2004-08-17 15:27 strk * added extent(lwgeom) and support functions. 2004-08-17 14:35 strk * SRID(geometry) changed to SRID(lwgeom) 2004-08-17 14:30 strk * Initial support for geometry->lwgeom switch (dump objects defined for 'geometry' are considered same of sql object defined for 'oldgeometry') 2004-08-17 14:28 strk * Added SRID(geometry) for backward compatibility 2004-08-17 14:21 strk * Added geometrytype(LWGEOM) 2004-08-16 20:38 strk * OPERATOR parsing bug fixed. Schema removal improoved. More test reports. 2004-08-16 11:03 mcayland * Added DLLIMPORT reference to "default_statistics_target" if we are compiling under Win32. This should make it unnecessary to apply Romi's patch to the PostgreSQL source tree when compiling PostgreSQL ready for PostGIS. 2004-08-16 10:46 strk * GEOS version extraction not attempted if USE_GEOS is not set to 1. 2004-08-13 12:29 strk * Support dump generated by pg_dump 7.4 2004-08-11 17:07 strk * Fixed a bug in non-finite Z check 2004-08-10 21:09 strk * changed proj version extractor to support pre 4.4.8 releases 2004-08-08 18:10 strk * reduced psql invocation to a single one. 2004-08-08 18:09 strk * lwgeom.sql production follow postgis.sql production rules (cpp usage) 2004-08-08 18:09 strk * Added missing required parameter to usage string 2004-08-07 12:13 strk * more header comments 2004-08-06 09:54 strk * added handling of operators and operator classes (skip postgis defined, keep others) 2004-08-06 08:08 strk * perl detection and bug fixes. 2004-08-05 20:00 strk * Another schema support bug from Mark 2004-08-05 19:12 strk * fixed bug in automatic perl invokation 2004-08-05 16:53 strk * schema support patches sent by Mark 2004-08-03 09:41 strk * geometry_columns and spatial_ref_sys back created from dump 2004-08-03 09:30 strk * Always added 'public' to search_path, to bypass pg_dump loss of constrain functions schema. Added automatic 'perl' invocation. Reduced output (set $DEBUG=1 to have it back). 2004-08-03 09:29 strk * updated 2004-08-03 07:58 strk * handling of more cases 2004-08-02 19:03 strk * initial import 2004-08-02 16:27 strk * Fixed format bugs (needed for postgis_undef.pl to work) 2004-07-29 14:10 strk * Unability to open a shapefile or dbffile reported more nicely. 2004-07-28 17:32 strk * Added postgis_full_version(), marked postgis_version() as deprecated. 2004-07-28 16:15 strk * Fixed a bug in postgis_full_version() 2004-07-28 16:10 strk * Changed all version functions to return text. Renamed postgis_scripts_version() to postgis_scripts_installed() Added postgis_scripts_released(). Added postgis_full_version(). 2004-07-28 13:37 strk * Added postgis_uses_stats and postgis_scripts_version. Experimented with PIP short-circuit in within/contains functions. Documented new version functions. 2004-07-28 10:52 strk * Added postgis_scripts_version 2004-07-27 17:51 strk * short-circuit test for 'contains' 2004-07-27 17:49 strk * Added short-circuit test for the within function. 2004-07-23 21:24 strk * Added postgis_proj_version() 2004-07-22 16:58 strk * Updated to reflect geos version string split. 2004-07-22 16:20 strk * Added postgis_lib_version() and postgis_geos_version() 2004-07-19 16:24 strk * Added -i switch 2004-07-17 09:52 strk * GEOS multi-version support switches implemented with GEOS_LAST_INTERFACE 2004-07-17 09:52 strk * Added GEOS_FIRST_INTERFACE, GEOS_LAST_INTERFACE, GEOS_JTS_PORT detection 2004-07-17 09:51 strk * Modified to always detect geos version (no deps) 2004-07-08 19:33 strk * Updated to respect CoordinateSequence GEOS interface switch. 2004-07-02 13:33 strk * Changed GEOS header inclusion mechanism to be more polite 2004-07-01 17:02 strk * Updated to support latest GEOS API. 2004-07-01 17:02 strk * Updated to support latest GEOS (actually removed all geos-version related switches). Fixed an access to unallocated memory. 2004-06-22 21:30 pramsey * Compile patch from Markus Schaber 2004-06-22 16:52 strk * Standard deviation factor used in histogram extent computation made a compile-time define. 2004-06-22 11:05 strk * Handled empty strings in numeric fields as '0'es... pg_atoi() does not do this (while atoi() does). 2004-06-18 17:11 strk * Fixed a bug in minor version extractor. Wrapped GEOS_VERSION in an #ifndef block. More runtime checks. 2004-06-16 20:04 strk * added geos_version.sh as dependency of postgis_geos_version.h rule 2004-06-16 19:59 strk * Changed GEOS_VERSION to POSTGIS_GEOS_VERSION to avoid future clashes 2004-06-16 19:37 strk * Added cleanup needed for GEOS > 1.0 2004-06-16 19:28 strk * fixed a typo in preprocessor define 2004-06-16 18:50 strk * Added postgis_geos_version.h to .cvsignore and to the list of files removed by the clean: rule. 2004-06-16 18:47 strk * Added code to detect geos version. Added appropriate includes in geos connectors. 2004-06-16 18:47 strk * initial import 2004-06-16 13:42 strk * Added schema support in getMaxFieldSize. Added direct support for TIMESTAMP field types (thanks to Steffen Macke). 2004-06-16 13:14 strk * documented statistics gethering operations 2004-06-14 08:06 strk * fixed bogus support for PG71 2004-06-14 07:48 strk * Histogram extent redefinition after hard deviant removal fixed to be "at most" the standard deviation based computed. 2004-06-11 11:38 strk * Infinite geometries handling. Histogram extent re-computation after 'hard deviant' features removal. 2004-06-10 18:54 strk * histogram grid size refined to use near-square cells. 2004-06-10 15:44 strk * Added standard deviation based histogram extent refinement 2004-06-10 13:42 strk * Separated the estimator code in an estimate_selectivity() function. Handled complete contaiment and complete miss of histogram by searc box. 2004-06-09 10:19 strk * Moved changes needed for PG75 inside postgis_gist_72.c using #if switches. 2004-06-09 10:05 strk * Added switch for GIST_SUPPORT=75 2004-06-09 10:05 strk * initial import 2004-06-09 09:35 strk * Removed partial pgsql List API copy 2004-06-09 09:08 strk * changed index/rindex to strchr/strrchr 2004-06-09 09:06 strk * Added Romi's Win32 patches. 2004-06-08 17:49 strk * Fixed to build cleanly agains pg75 2004-06-08 17:48 strk * Compression of code terminated. Big blocks switched based on version have been removed. 2004-06-08 17:40 strk * removed user connect command 2004-06-08 15:18 strk * Deleted prototype for isspace() in postgis.h and included <ctype.h> in postgis_inout.c, which is the only module calling isspace(). This was needed to compile postgis against PG75(CVS). 2004-06-08 08:42 strk * MODULE_FILENAME path always defaults to $libdir, but is overridable using environment variable LPATH. Added comments about it and cleaned up code. Made global and lwgeom Makefile conformant about this. 2004-06-08 08:20 strk * added 'static' modifiers for the 'error' function, possibly clashing with some other declaration 2004-06-07 17:58 strk * reverted change in lwg_parse_yyerror 2004-06-07 17:26 strk * Default MODULE_FILENAME uses $libdir unless LPATH is set in the environment 2004-06-07 16:57 strk * Removed obsolete postgisgistcostestimate function creation 2004-06-07 16:34 strk * Removed postgis_old.sql from list of default rules 2004-06-07 16:32 strk * Moved old version-specific sql files under the Attic directory. 2004-06-07 16:32 strk * Moved old version-specific sql files under the Attic directory. 2004-06-07 16:11 strk * AddGeometryColumns call table constraints 'enforce_srid' and 'enforce_geotype' 2004-06-07 15:32 strk * Fixed a bug killing the backend - lwg_parse_yyerror never called custom error handler 2004-06-07 10:07 strk * allowed lower case in wkt 2004-06-07 09:16 strk * Added missing prototypes. 2004-06-04 15:24 strk * Added y.output 2004-06-04 15:24 strk * Added more cleanup 2004-06-04 15:23 strk * added semicolumns at end of blocks 2004-06-04 15:21 strk * removed, will be created 2004-06-04 13:39 strk * Removed references to constraint name (unsafe) from probe_geometry_columns() and fix_geometry_columns(). Added a rename_geometry_table_constraints() renaming all geometry constraints to 'enforce_srid' and 'enforce_geotype' 2004-06-04 13:11 strk * probe_geometry_columns() return message extended 2004-06-04 12:40 strk * Added comments about fix_geometry_columns() job. SRID and type checks made stricter in fix_geometry_columns(). 2004-06-04 12:26 strk * Added probe_geometry_columns(). Modified fix_geometry_columns() to prevent fixing of bogus records for which a corrected equivalent already exists. 2004-06-04 10:19 strk * Added DropGeometryTable description 2004-06-04 10:07 strk * Added DropGeometryColumn function 2004-06-04 09:16 strk * first entries 2004-06-04 09:11 strk * Added prototypes 2004-06-04 09:07 strk * Fixed YACC call to rename standardly produced y.tab.c and y.tab.h to wktparse.tab.c and wktparse.tab.h 2004-06-04 08:49 strk * Moved all geoemtry_columns cleanup in fix_geometry_columns, update_geometry_stats(*) and addgeometrycolumn(*) will now call the former and print out its result text. 2004-06-04 08:31 strk * Lifted AddGeometryColumns result message, including output from fix_geometry_columns 2004-06-04 08:25 strk * fix_geometry_columns() makes its best effort to find appropriate schema. 2004-06-03 16:44 strk * Added expand_geometry - expand(geometry, int8) 2004-06-03 13:49 strk * added postgis_old.sql 2004-06-03 13:44 strk * Made it functional again. 2004-06-03 13:43 strk * compatted CASTS section, commented out bogus cast geometry::chip referring to missing function 2004-06-03 13:20 strk * Skipped attrelid, varattnum linking for PG>=75 2004-06-03 12:48 strk * All type definitions moved at the beginning of the file. Left to compat: what was in postgis_sql_end_VER_. 2004-06-03 11:06 strk * Fixed bug in update_geometry_stats() choking on null attrelids. Modified update_geometry_stats(varchar, varchar) to cleanup stale record(s). Added a CREATEFUNCTION define to become CREATE OR REPLACE FUNCTION for PG > 71. Made update_geometry_stats(*) return meaningful result. 2004-06-03 09:45 strk * infinite geoms handled in WKB parser 2004-06-03 08:19 strk * yet another Infinite check used: finite() - which checks for NaN,-Inf,+Inf 2004-06-03 08:13 strk * Simplified INFINITY checks by use of isinf() 2004-06-03 07:58 strk * Infinite coordinate geoms omitted from index 2004-06-03 07:57 strk * wkt parser throws an error on Infinite coordinates 2004-06-03 04:51 pramsey * Document the expand() function (finally!) 2004-06-02 23:54 strk * Made equality checks the default in picksplit to catch also NaN results (INF geoms) 2004-06-02 23:29 strk * reverted Inf handling modification (conceptually bogus) 2004-06-02 22:43 strk * handled special case of Inf boxes as GiST keys in picksplit 2004-06-02 17:15 strk * stale locks removal in fix_geometry_columns() and update_geometry_stats(). Fixed a bug in fix_geometry_columns() deleting stats. 2004-06-02 16:21 strk * build_histogram2d sets 'local' search_path. fix_geometry_columns sets to NULL cached data for unexistant tables. 2004-06-01 16:56 strk * removed namespace check for PG<73 in update_geometry_stats() 2004-06-01 16:30 strk * Made AddGeometryColumn delete from geometry_column records which would be incompatible with the one being added 2004-06-01 16:16 strk * Placed histogram2d type definition in a common place; added find_extent(schema, table, column) and build_histogram2d(histogram, schema, table, column); modified update_geometry_stats() to make use of available f_table_schema and to set statistical fields to NULL for stale records. Thanks to Carl Anderson for the ideas. 2004-05-28 03:01 pramsey * Updates in anticipation of 0.8.2 release 2004-05-28 02:42 pramsey * Document the multi() function. 2004-05-24 13:02 strk * compat definition of fix_geometry_columns 2004-05-20 19:21 pramsey * Fix bug in append mode that filled values into nonexistant gid column. 2004-05-18 16:56 pramsey * Fix typos and section misreferences in OGC function reference section 2004-05-18 16:52 pramsey * Add multi() to the new cpp based sql.in file. 2004-05-13 12:24 strk * Transformed NULL numeric values to 0 as it was before the introduction of bigint bug workaround. 2004-05-13 12:13 strk * Used DBFWriteAttributeDirectly interface for writing attributes. This way we are not affected by shapelib long-integer bug. 2004-05-13 12:07 strk * Other fix in 3d handling - you should now be able to dump as 2d or 3d any 2d or 3d object 2004-05-13 11:59 strk * Fixed bug in 3d features handling. 2004-05-13 09:40 strk * Totally reworked code to have a main loop for shapefile objects. Much more readable, I belive. 2004-05-13 07:48 strk * Put table creation code in its own function. Fixed a bug with NULL shape records handling. 2004-05-13 06:38 strk * DBFReadStringValue always used to workaround shapelib bug with int values. 2004-05-04 16:55 strk * Added -fPIC to CXXFLAGS. Reported to be needed on Solaris7 w/ gcc-3.3.2 by Havard Tveite <havard.tveite@nlh.no>. 2004-04-29 21:07 rmason * removed generated file 2004-04-29 21:07 rmason * *** empty log message *** 2004-04-29 18:44 dblasby * Noted diff between inf and Infinity on Solaris/Intel machines 2004-04-29 18:41 dblasby * updated version 2004-04-29 18:36 dblasby * added sleep so it wouldnt complain on solarias as much 2004-04-29 18:20 dblasby * WKT parser changes required this change 2004-04-29 18:16 dblasby * minor changes 2004-04-29 18:15 dblasby * WKT parser changes to MULTIPOINT required this be updated 2004-04-29 04:35 rmason * clean up of wbk int and double reading code 2004-04-29 03:57 rmason * fix number parsing 2004-04-29 03:13 rmason * remove extra brackets from multipoints 2004-04-28 23:07 pramsey * Change PGSQL_SRC behavior back to developer-friendly. 2004-04-28 22:59 dblasby * minor changes 2004-04-28 22:50 dblasby * Inital Version. Hasnt been proofread. 2004-04-28 22:40 pramsey * Added flex/bison lines for parser. 2004-04-28 22:26 pramsey * Fixed spelling mistake in header text. 2004-04-28 21:20 dblasby * minor changes to ensure its using the index 2004-04-28 21:08 dblasby * updated results 2004-04-28 21:02 dblasby * minor change for endianess 2004-04-28 21:00 dblasby * removed an elog(NOTICE) 2004-04-28 19:17 dblasby * inital version of regression tests 2004-04-28 18:27 dblasby * moved to regress/ directory 2004-04-28 18:10 dblasby * Added automatic endian detection for the WKB parser/unparser. 2004-04-28 04:55 pramsey * Genericize the Makefile per Dave's request. 2004-04-27 23:47 dblasby * minor 3d geometrycollection bug fix 2004-04-27 23:33 dblasby * initial version 2004-04-27 23:12 dblasby * minor changes for solaris 2004-04-27 22:13 dblasby * fixed some typos for flip_bytes in read_int and read_double 2004-04-27 20:53 dblasby * minor ordering change 2004-04-27 20:49 dblasby * added float nextafterf_custom(float x, float y) for OSs that do not have a nextafterf implementation. 2004-04-27 17:46 dblasby * bison -vd -p lwg_parse_yy wktparse.y flex -Plwg_parse_yy -if -o'lex.yy.c' wktparse.lex Initial versions (from Ralph Mason) 2004-04-27 13:50 strk * Fixed bug in simplify() that was using the square of the given tolerance. 2004-04-27 07:44 strk * Removed use of geometryFactory->toGeometry(), indicated by Martin Davis as being intended for internal use only. Created a linear ring instead (the function converts a box3d to a geos geometry). 2004-04-26 23:16 dblasby * made slightly more generic 2004-04-26 23:15 dblasby * Minor cleanup 2004-04-26 23:12 dblasby * inital version 2004-04-26 23:05 dblasby * Initial working version - based on Ralph Masons WKT and WKB parser/writer. 2004-04-22 16:05 dblasby * fixed minor typos GeomFromWKB not GeometryFromWKB 2004-04-21 09:13 strk * Attribute names escaping mechanism added. You should now be able to dump a shapefile equal to the one loaded. 2004-04-21 07:38 strk * Memory allocated for main_scan_query was not enough when using binary cursor. Fixed 2004-04-13 16:49 dblasby * GeometryN(...) now correctly says "1" is the 1st geometry (used to be 0). 2004-04-08 17:05 dblasby * Somehow the memory leak changes I made got removed - I've re-added them. 2004-04-08 17:00 dblasby * Changed ggeometry_consistent to be aware of NULL queries. Ie. select * from <table> where the_geom && null::geometry; This tends to happen when you're joining two tables using && and the table has NULLs in it. 2004-04-07 23:12 dblasby * Added a cstring(lwgeom) function that returns WKT! 2004-04-07 16:23 strk * Made new postgis.sql generation procedure the default 2004-04-06 22:58 dblasby * Changes to make it work with all the PostGIS type. 2004-04-02 19:03 dblasby * Added support for 4d coordinates 2004-03-29 10:46 strk * postgis.sql.in is now parsed by both sed and cpp 2004-03-29 10:20 strk * Fixed a bug in WKB parsing for Multipoints. Fixed a bug in -d handling for WKB. Added point->multipoint fluffing capabilities. 2004-03-26 01:09 pramsey * Removed rogue docbook tags 2004-03-26 01:07 dblasby * changed name of fluffType() to multi(). 2004-03-26 00:54 dblasby * added full support for fluffType(<geom>) postgis09=# select fluffType('POINT(0 0)'); flufftype ------------------------- SRID=-1;MULTIPOINT(0 0) 2004-03-25 00:43 dblasby * added function fluffType() that takes POINT LINESTRING or POLYGON type and converts it to a multi*. Needs to be integrated into a proper Postgresql function and given an SQL CREATE FUNCTION 2004-03-22 09:39 strk * Moved AddGeometryColumn and DropGeometryColumn from USE_VERSION blocks to the end of file. Here, differences between versions are handled on a minimun-diff basis, making it easier to understand the differences and to modify the code. Also, diffs have been splitted between pgsql < 73 and >= 73. Added reduced-parameters wrappers to both functions. 2004-03-22 08:18 strk * postgis_new.sql build by default 2004-03-19 16:35 strk * Updated AddGeometryColumn() and DropGeometryColumn() descriptions to the schema-aware versions 2004-03-15 17:07 strk * Added calls to vacuum_delay_point() to give backend a chance of interrupting geometry stats computation. Set default DEBUG_GEOMETRY_STATS to 0. 2004-03-11 01:27 dblasby * minor clean and trying to figure out a memory bug. valgrind wasnt helping, but it went away. 2004-03-11 00:54 dblasby * Should be working (with a tonne of notices) for points lines and polygons (2d and 3d) 2004-03-10 18:46 strk * Fixed a bug reducing the output shapes from Multipolygon tables. 2004-03-10 17:35 strk * removed just-introduced bug 2004-03-10 17:23 strk * code cleanup, fixed a bug missing to transform 'gid' to 'gid__2' in shapefile attribute name 2004-03-10 01:15 dblasby * WKB reader and WKB writer (totally untested) 2004-03-09 17:29 dblasby * Initial implementation - should compile; not at all tested. 2004-03-09 00:21 strk * Removed useless code blocks in histogram builder 2004-03-09 00:09 strk * estimator applies a gain of AOI/cell_area on each cell it intersects (reverted to previous behaviour) 2004-03-08 17:21 strk * changed error computation code to delta/totrows 2004-03-08 12:16 strk * Added the RECHECK clause for gist_geometry_ops operator class operators 2004-03-06 18:02 strk * Comma-separated bps values accepted 2004-03-06 17:43 strk * Added RCSID string in usage output 2004-03-06 17:35 strk * Added rcsid string to usage output 2004-03-05 21:06 strk * Added -vacuum switch 2004-03-05 21:03 strk * Made the -bps switch specify the exact level(s) at which to run the test 2004-03-05 18:25 dblasby * Empty files - preparing for writting actual code. 2004-03-05 18:23 dblasby * Same as the one in the above directory 2004-03-05 18:23 dblasby * moved to lwgeom/ directory 2004-03-05 18:16 strk * Applied Mark Cave-Ayland patch 2004-03-05 16:40 strk * rewritten split_extent to be more datatype-conservative 2004-03-05 16:01 strk * added -bps switch to set maximun query level. reworked command line parsing 2004-03-05 15:29 strk * more verbose output 2004-03-05 11:52 strk * initial import 2004-03-05 00:38 dblasby * Initial version - still under discussion. 2004-03-04 13:50 strk * postgis_gist_sel(): added warnings if search_box goes outside of histogram grid 2004-03-04 09:44 strk * The selectivity estimator does add the full value of each cell it overlaps, regardless of the actual overlapping area. Final gain is not applied (formerly 1 / minimun between average feature cells occupation and search_box cells occupation) 2004-03-03 21:59 strk * added check to keep selectivity value in the range of validity (suggested by m.cave) 2004-03-02 11:39 strk * cpp call for postgis_new.sql creation uses shell redirection for the output file 2004-03-02 11:37 strk * modified to reflect new statistics building process for PG75 2004-03-01 16:02 strk * histogram's boxesPerSide computed as a function of the column's statistic target 2004-02-29 21:53 strk * bug fix in postgis_gist_sel (for PG75): SysCache is not released if not acquired 2004-02-28 14:44 strk * Added rule to generate postgis_new.sql from postgis.sql.in using cpp 2004-02-28 14:43 strk * initial import 2004-02-26 16:42 strk * Fixed bugs reported by Mark Cave-Ayland <m.cave-ayland@webbased.co.uk>. Re-introduced previously removed estimate value incrementation by the fractional part of each of the cells' value computed as the fraction of overlapping area. 2004-02-25 13:17 strk * RTContainedBy and RTOverlap strategries implemented locally with a pgbox_overlap function 2004-02-25 12:00 strk * Added handling for point features in histogram creation (add 1 instead of AOI/cell_area when AOI is 0). Fixed a wrong cast of BOX3D to BOX (called the convertion func). Added some comments and an implementation on how to change evaluation based on the average feature and search box cells occupation. 2004-02-25 00:46 strk * initial version of && selectivity estimation for PG75 2004-02-23 21:59 strk * geometry analyzer builds the histogram 2004-02-23 12:18 strk * added skeleton functions for pg75 stats integration 2004-02-12 10:34 strk * changed USE_GEOS check from ifdef / ifndef to if / if ! 2004-02-09 18:49 strk * byte endiannes detected empirically 2004-02-06 08:26 strk * updated wkb reading funx to reflect changes made by pramsey in postgis_inout.c to be nicer with solaris 2004-02-06 00:42 dblasby * moved forward declarations from postgis.h to postgis_proj.c 2004-02-05 20:31 dblasby * Optimized the curvature method (doesnt have to calculate e2) 2004-02-05 20:21 dblasby * Added 'curvature method' for cases where the original algorithm breaks down. 2004-02-04 22:27 strk * Added pg75 support scripts 2004-02-04 22:21 strk * Added detection code for PG75 2004-02-04 02:53 dblasby * applied patricia tozer's patch (distance function was taking acos of something just slightly outside [-1,1]). 2004-02-03 22:19 pramsey * Backed default sql file location out of contrib insto share 2004-02-03 22:04 pramsey * Real DESTDIR changes this time. 2004-02-03 21:51 pramsey * Ooops, let local configuration slip into cvs version 2004-02-03 21:42 pramsey * Fixed error in -C loader directive 2004-02-03 21:38 pramsey * Added DESTDIR to Makefiles to assist in RPM building. 2004-02-03 08:37 strk * schema support added, slightly modified logic used to keep table and schema names cases (always quoted and forced to lower case if not asked to keep original case) 2004-01-25 19:33 pramsey * Test commit on new CVS archive. 2004-01-21 19:11 strk * Added line_interpolate_point entry 2004-01-21 19:04 strk * Added line_interpolate_point function by jsunday@rochgrp.com 2004-01-20 20:14 strk * cleaner comments for DropGeometryColumn 2004-01-20 20:10 strk * removed bogus comment about missed alter table drop column 2004-01-16 20:06 strk * Added FTLogical<->boolean mapping 2004-01-15 09:57 strk * field type array allocates num_fields * sizeof(int) instead of sizeof(char*) 2004-01-15 00:23 pramsey * Change absolute classpath reference to relative. 2004-01-14 01:52 pramsey * Fix solaris alignment problem in transformations. 2004-01-13 22:14 pramsey * Changed getint and getdouble used by WKB so that it plays nice with memory alignment (solaris issue). 2004-01-13 20:30 strk * Added useless PG_RETURN_NULL() call to make compiler happy 2004-01-12 19:12 pramsey * Updates for 0.8.1 release. 2004-01-02 20:11 strk * always call setval with no schema specification. drop 'database' argument using the empty string to the AddGeometryColumn call 2003-12-30 13:31 strk * made shp2pgsql looser about numeric precisions 2003-12-30 12:37 strk * Fixed segfault bug reported by Randy George, removed explicit sequence drop 2003-12-30 10:40 strk * For all versions: Updated fix_geometry_columns to use a more readable format in queries. For PG >= 73: Updated fix_geometry_columns() to consider schema when fixing attrelid and varattnum, also changed empty value to 'public' string for records with an invalid schema specification. Updated DropGeometryColumn to actually issue the ALTER TABLE DROP COLUMN query. 2003-12-27 13:30 strk * Added schema specification support 2003-12-23 09:00 strk * AddGeometryColumn, DropGeometryColum moved to version-specific scripts. Schema support enabled for version 73 and 74. 2003-12-19 18:55 strk * substituted setenv() calls with putenv() for Solaris support 2003-12-18 18:07 strk * Changed fix_geometry_columns() for PG >= 73 so to set f_table_schema to the empty string if its value is not a valid pg namespace. 2003-12-16 11:04 strk * added simplify() documentation 2003-12-12 18:00 strk * reverted make_line patch, patched size_subobject instead - the reported bug was caused to their inconsistency 2003-12-12 14:39 strk * Fixed a bug in make_line allocating less memory then required 2003-12-12 13:34 strk * added missing 'const' in prototypes 2003-12-12 12:03 strk * More debugging output, some code cleanup. 2003-12-12 10:28 strk * added GEOSnoop OUTPUT debugging info 2003-12-12 10:08 strk * Added GEOSnoop function and some optional debugging output for geos<->postgis converter (define DEBUG_CONVERTER at top postgis_geos.c) 2003-12-09 11:58 strk * Final touch to wkb binary input function 2003-12-09 11:13 strk * WKB_recv: set StringInfo cursor to the end of StringInfo buf as required by postgres backend 2003-12-08 17:57 strk * Binary WKB input function built only when USE_VERSION > 73. Making some modifications based on reported failures 2003-12-04 19:12 strk * Removed useless linkages from dumper and loader 2003-12-04 19:11 strk * code cleanup (removed useless and leaking malloc calls) 2003-12-04 18:58 dblasby * changed david skae to skea 2003-12-01 20:52 strk * shapelib put in sync with gdal cvs 2003-12-01 14:27 strk * added simple malloc wrapper 2003-11-28 11:28 strk * Some more changes, now useless since wkb.h is no more used (just to get in sync) 2003-11-28 11:25 strk * Added explicit geometry as text cast 2003-11-28 11:06 strk * Added WKB_recv function for binary WKB input 2003-11-26 18:54 strk * fixed bug in HexDecoder, made WKB parsing the default 2003-11-26 18:14 strk * binary cursor implemented 2003-11-26 17:21 strk * Made HEXWKB parsing settable at compile time 2003-11-26 16:40 strk * Handled NULLS in wkb parsing, reduced functions args 2003-11-26 15:45 strk * wkb support for all geom types 2003-11-26 14:31 strk * WKB start to work 2003-11-25 17:32 strk * first attempt at wkb definitions 2003-11-25 17:28 strk * hardly trying to get WKB parsing work 2003-11-25 03:03 pramsey * Updates for 0.8.0 release. 2003-11-25 02:38 pramsey * Fixed syntax error in execution example. 2003-11-24 17:36 strk * Removed useless BYTE_ORDER checks 2003-11-21 23:51 pramsey * Added Cygwin endian definition include to fix windows compile. 2003-11-20 18:01 strk * patch from m.spring@gmx.de 2003-11-20 17:51 strk * Installs for PG>7.1 goes to pkglibdir 2003-11-20 16:46 strk * postgresql linking against libstdc++ reported as possibly needed for geos support 2003-11-20 15:54 strk * Updated postgis library path to be referenced with /.. 2003-11-20 15:34 strk * expected in-transaction memory release for btree operators 2003-11-20 15:29 strk * Moved MODULE_FILENAME definition where it will be easly modifiable 2003-11-20 15:27 strk * Removed some useless strdups. Removed pgtype 22 (int2vector) from the list of integer DBF field types. Added pgtype 1700 (numeric) in DBF doubles list. 2003-11-20 14:46 strk * Set CFLAGS where useless CPPFLAGS were used before 2003-11-19 18:01 strk * CR removed 2003-11-19 17:50 strk * missing function definition added (I forgot - sorry) 2003-11-19 15:44 strk * added prototypes for geometry_{le,ge,cmp} 2003-11-19 15:29 strk * Added default btree operator class for PG7.4 2003-11-19 15:26 strk * Added geometry_le, geometry_ge, geometry_cmp functions, modified geometry_lt, geometry_gt, geometry_eq to be consistent. 2003-11-19 15:23 strk * Fixed wrong COMMUTATOR specifications in '<','>','~=','@' operators, added new '<=', '>=' operators 2003-11-19 10:27 strk * typo fixed (ENABLE_SEQSCAN missing) - PG7.4 support listed in 2.2 2003-11-18 14:58 strk * default row buffer lenght set to 100 2003-11-18 14:39 strk * Some more structuring. Initialization routine moved out of main loop. Preparing dumper for WKB parsing. 2003-11-16 00:27 strk * Huge code re-organization. More structured code, more errors handled, cursor based iteration, less code lines. 2003-11-14 22:04 strk * Used environment vars to pass libpq connection options (less error prone, easier to read). Printed clearer error message on query error. 2003-11-13 13:14 strk * used quote_ident() calls in AddGeometryColumns as suggested by Bernhard Herzog 2003-11-12 20:59 strk * more cvsignore 2003-11-12 20:57 strk * first import 2003-11-12 20:55 strk * AddGeometryColumn column identifier case respect fix as suggested by Bernhard Herzog 2003-11-12 16:36 strk * delete all caught exceptions after use 2003-11-11 11:28 strk * Added (mem)GeomUnion and (mem_)collect aggregates documentation, updated Centroid paragraph 2003-11-11 10:58 strk * Fixed a typo in envelope() 2003-11-11 10:38 strk * Postgresql 7.4 enabler scripts. 2003-11-11 10:14 strk * Added support for PG74 2003-11-05 18:26 strk * Added fast collect() and geomunion() aggregates implementations 2003-11-05 18:25 strk * moved #ifdef USE_GEOS below prototypes, added NULL implementation of unite_garray 2003-11-05 18:02 strk * renamed unite_finalfunc to unite_garray 2003-11-05 17:48 strk * Added GEOS support tips to installation instructions 2003-11-05 11:00 strk * postgis.xml put back in place. Makefile modified to generate a postgis-out.xml from postgis.xml. 2003-11-04 21:54 strk * made last release version a parameter 2003-11-04 21:52 strk * added 'global' specification to sed command 2003-11-04 19:23 strk * renamed postgis.xml to postgis.xml.in 2003-11-04 19:20 strk * dropped 'clean' rule (not really a good idea right now) 2003-11-04 19:07 strk * added doc clean in clean rule 2003-11-04 19:06 strk * added missing first geom pfree in unite_finalfunc 2003-11-04 18:56 strk * initial import 2003-10-29 15:53 strk * geoscentroid() removed. both geos and pgis versions are called 'centroid'. only one version will be compiled based on USE_GEOS flag. 2003-10-29 13:59 strk * Added geoscentroid function. 2003-10-29 13:58 strk * Added GEOSGetCentroid() function 2003-10-28 16:57 strk * Added collect_garray() function. 2003-10-28 15:16 strk * unite_sfunc() from postgis_geos.c renamed to geom_accum() and moved in postgis_fn.c 2003-10-28 11:18 strk * Added Algorithms section and simplify() enabler code 2003-10-28 11:16 strk * Added postgis_algo.c prototypes 2003-10-28 11:16 strk * Added postgis_algo.c build support 2003-10-28 10:59 strk * handled NULL state array in unite_finalfunc, cleaned up some spurios code 2003-10-27 23:44 strk * unite_sfunc made always copy input array in long lived memory context. It should now work with safer memory. 2003-10-27 20:13 strk * Made GeomUnion release memory soon, Added fastunion support functions 2003-10-27 10:21 strk * Initial import. 2003-10-24 21:52 strk * Modified strcmp-based if-else with switch-case in GEOS2POSTGIS() using new GEOSGeometryTypeId() interface. 2003-10-24 21:33 strk * Added GEOSGeometryTypeId(Geometry *) wrapper function. Added GEOSGetCoordinates_Polygon(Polygon *) as an experimental optimized version of GEOSGetCoordinates(Geometry *); More to add ... 2003-10-24 14:29 strk * GEOSGetCoordinates() reverted to getCoordinates() call so to be compatible to all type of geometries (not only LineStrings) 2003-10-24 08:28 strk * Fixed memory leak in GEOSGetCoordinates(), made sure that GEOS2POSTGIS free type string even in case of collapsed geoms. Made sure that geomunion release memory in case of exception thrown by GEOSUnion. Sooner release of palloced memory in PolyFromGeometry (pts_per_ring). 2003-10-23 19:52 strk * added memory debugging tips for gcc >= 3.2.2 2003-10-23 09:14 strk * Added default-commented line to disable gcc "smart" memory caching feature. 2003-10-23 08:06 strk * Added 'unite' aggregate. 2003-10-22 20:58 pramsey * More additions to the TODO 2003-10-22 18:51 pramsey * Updated TODO list somewhat 2003-10-21 07:44 strk * Made GEOS_DIR and PROJ_DIR settable via environment vars 2003-10-20 19:50 strk * Removed some memory leaks in PostGIS2* converters. 2003-10-17 16:32 pramsey * Pass USE_* information to version string, add some 7.4 version passing flags to the compile. 2003-10-17 16:12 dblasby * Made Envelope() CW instead of CCW. 2003-10-17 16:07 dblasby * made isEmpty() return true/false 2003-10-17 00:56 pramsey * Added some more AsText wrappers. 2003-10-17 00:55 pramsey * Added some AsText wrappers to results to make results match answers. 2003-10-16 20:16 dblasby * Added NOTICE_HANDLER function. For some reason this didnt get properly committed last time. 2003-10-16 16:35 dblasby * added #include <sys/types.h> for people using freeBSD (strk@keybit.net patch) 2003-10-15 17:04 dblasby * added a bunch of catch (GEOSExceptions) blocks to write out more imformative error messages. 2003-10-14 23:19 dblasby * GEOS2POSTGIS - added protection to pfree(NULL) for multi* geoms 2003-10-14 21:42 pramsey * Added const declarations to sync with current GEOS cvs. 2003-10-06 18:09 dblasby * Fixed typo in add_to_geometry(). With very poorly aligned sub-objects, it wouldnt allocate enough memory. Fixed it so its pesimistic and will allocate enough memory. 2003-10-03 16:45 dblasby * added pointonsurface() as a sub. Some memory management fixes/tests. removed a few NOTICEs. 2003-09-29 16:15 pramsey * Patch from strk: - "\t" always preceeded the first value of a dump_format query if NULL - field values where quoted with (") in dump_format when called with -k ( did I introduce that? ) - Appropriate calls to DBF[..]ReadAttributes based on cached attribute types. - Assured that *all* shapes are NULL before exiting with an error ( I did not check that NULL shapes in the midle of the shapefiles are handled, but previous code did not check that either ... ) 2003-09-19 00:37 jeffloun * fixed a bug that actually tests the first 2 point for pip instead of just thinking I was testing the first two. 2003-09-16 20:27 dblasby * added ability to delete geometries. 2003-09-10 22:44 jeffloun * got rid of warning... 2003-09-10 22:40 jeffloun * changed it to make the field names in the dbf file capital letters 2003-09-10 21:36 jeffloun * fixed a bug in is_clockwise... 2003-09-04 16:46 dblasby * removed truly_inside() doc. 2003-09-04 16:19 dblasby * removed truly_inside() function. 2003-08-22 17:40 dblasby * fixed geometry_in('SRID=<int>{no ;}'). 2003-08-21 16:22 dblasby * added patch from strk@freek.keybit.net for PG_NARGS() not being in 7.2 2003-08-18 20:19 pramsey * Add missing </para> 2003-08-18 20:08 pramsey * Removed illegal characters from the file. 2003-08-18 20:00 pramsey * More entities 2003-08-18 19:45 pramsey * Replace <> with proper entities in Dave's new function entries 2003-08-18 16:59 pramsey * Added info on piping results to output file. 2003-08-18 16:41 pramsey * Change include from io.h to geom.h. 2003-08-17 19:00 pramsey * Change sequence handling to respect versions prior to 7.3. Patch from strk. 2003-08-08 18:19 dblasby * Conformance changes. Removed junk from postgis_debug.c and added the first run of the long transaction locking support. (this will change - dont use it) conformance tests were corrected some dos cr/lf removed empty geometries i.e. GEOMETRYCOLLECT(EMPTY) added (with indexing support) pointN(<linestring>,1) now returns the first point (used to return 2nd) 2003-08-07 05:13 pramsey * Added some information about compiling PostgreSQL with C++ support to enable proper GEOS behavior. 2003-08-06 19:31 dblasby * Added the WKB parser. Added all the functions like PolyFromWKB(<WKB>,[<SRID>]). Added all the functions like PolyFromText(<WKT>,[<SRID>]) Minor problem in GEOS library fixed. 2003-08-05 18:27 dblasby * Added null implementations of new GEOS-returning-geometry functions (ie. buffer). 2003-08-05 16:28 jeffloun * Removed the setval for the sequence if the value was going to be 0. This avoids a warning that occirs when you try to set it to 0. 2003-08-01 23:58 dblasby * added the functionality to convert GEOS->PostGIS geometries. Added those geos functions to postgis. 2003-08-01 23:22 jeffloun * Altered the loader to use a (gid serial) type instead of just a (gid int4). Also the gid is now declared as a primary key. 2003-08-01 17:44 pramsey * Added BC Albers parameterization (epsg 42102) 2003-07-25 17:08 pramsey * Moved Cygwin endian define out of source files into postgis.h common header file. 2003-07-08 18:35 dblasby * changed asbinary_specify() so that it is more aware of TEXT being un-terminated. this is a modified patch from David Garnier <david.garnier@etudier-online.com>. 2003-07-01 18:30 pramsey * Added CVS revision headers. 2003-06-18 16:30 pramsey * It seems that invalid geometries where in the shapefile (as far as shapelib let shp2pgsql know). LINEZ objects with less then 2 vertices. I've patched shp2pgsql to recognized such an inconsistence and use a NULL geometry for that record printing a warning on stderr. <strk@freek.keybit.net> 2003-06-12 22:25 pramsey * Added transaction begin and end. 2003-05-27 22:35 dblasby * New version of the postgis-GEOS connector. 2003-05-13 22:51 dblasby * Added a modified version of Carl Anderson <carl.anderson@vadose.org> patch for schema-aware find_srid(). I have modified your schema-patched find_srid() and commited it to the postgis 1. removed isstrict qualification and explicity throw an error if one of the arguments is null 2. use "LIKE" instead of "~" for pattern matching because "~" wasnt working on my system 3. throw an error if the the requested geometry couldnt be found. 2003-04-14 18:01 pramsey * Patch for optional case sensitivity respect. From strk. 2003-04-10 23:35 pramsey * More info 2003-04-10 19:17 dblasby * added area() as alias for area2d() 2003-04-10 19:16 dblasby * changes to area() 2003-04-10 17:45 pramsey * More info. 2003-04-10 17:40 pramsey * Fixed within() test to have right order of arguments. 2003-04-10 17:29 pramsey * Changes to function names to MATCH the specification. 2003-04-10 17:19 pramsey * More consistency fixes. 2003-04-10 17:05 pramsey * Fixes for consistency (!!!!) of the tests and a first README on how to run them. 2003-04-10 16:40 pramsey * Extra OGC text constructor functions. 2003-04-10 16:22 pramsey * Hack to supply c++ CXX variable if undefined. 2003-04-10 16:20 pramsey * Cruft removal 2003-04-10 05:19 pramsey * Formatting changes. 2003-04-10 05:16 pramsey * Remove old commented out duplicate function. 2003-04-09 21:53 pramsey * Makefile should fully honor USE_GEOS flag now. 2003-04-09 21:35 pramsey * Cleaned up makefile and transform warning removed for null case. 2003-04-09 21:08 pramsey * Some reformatting. 2003-04-09 18:34 dblasby * GEOS support -first run 2003-04-09 18:34 dblasby * test data for isvalid() 2003-04-09 03:40 pramsey * Makefile update 2003-04-09 03:40 pramsey * Updates for 0.7.5 release. 2003-04-08 21:41 pramsey * Cygwin BE_DLLLIBS fix from nvine/jtishler 2003-04-08 21:23 dblasby * simple table to test relate(g1,g2). Taken from JTS/GEOS regression test. 2003-04-01 23:02 jeffloun * Fixed a bug which dropped the last Z value of each line in 3d lines. 2003-03-07 16:39 pramsey * M-handling patch and some Z-recognition too. From strk@freek.keybit.net. 2003-03-06 18:57 chodgson * swapped '~=' for '=' in the operator class definition for gist_geometry_ops. 2003-03-06 18:29 chodgson * changed 'geometry' to 'GEOMETRY' two places in the AddGeometryColumn sql code. 2003-03-06 18:10 chodgson * Updated the documentation for the '~' operator and added documentation for the '@' operator (they were backwards). 2003-03-06 18:04 dblasby * indexing for 7.3: @ and ~ were backwards. Corrected. 2003-02-15 00:27 jeffloun * added more type checking into the create table statment. Now uses int8, and numeric types if the columns definitions are too big 2003-02-14 20:07 jeffloun * changed the PIP function to loop from i=0 to 1<n-1 2003-02-13 02:48 pramsey * Changes in preparation for 0.7.4 release. 2003-02-12 21:03 pramsey * Fixed bug with 7.1 build relating to postgis_estimate. 2003-02-04 23:11 pramsey * Changed constraint name for geometry_columns_pk. 2003-02-04 22:57 pramsey * Fix memory management error, array of pointers allocated insufficient space. 2003-02-04 21:39 pramsey * Added CVS substitution strings for logging. 2003-02-04 06:49 pramsey * Fixed stupid case error in 7.2 gist support. 2003-02-03 20:08 pramsey * Updated SRS file with better proj4 definitions and nicer commented description lines. 2003-01-31 17:23 chodgson * fixed a small error in an example - road_name -> name 2003-01-22 17:07 dblasby * applied Mark Cave-Ayland's new patch that is a bit cleaner and has a user-defined FETCH limit for creating a histogram. 2003-01-21 17:46 dblasby * added patch from Mark Cave-Ayland that saves memory during histogram calculations by using cursors instead of loading all the BOXs at once. 2003-01-06 18:07 pramsey * Added USE_STATS fix for index selectivity. 2002-12-17 23:24 dblasby * fixed select astext(the_geom)||'dave' from ...; bug 2002-12-10 04:45 pramsey * Removed old sql.in files. 2002-12-10 04:37 pramsey * Support for 7.3 undefinition. 2002-12-10 04:36 pramsey * New SQL update files, with version dependant start and end scripts. 2002-12-06 20:31 pramsey * Set USE_PROJ back to default 0. 2002-12-05 22:12 pramsey * Returned to 'opaque' as type in creation, since 7.3 will automatically cast and < 7.3 will fail if I use a different value. This causes some warnings in 7.3, but no failures. 2002-12-05 21:49 pramsey * Updates to support 7.3 typecasting conventions. 7.3 support is now ready for beta testing. 2002-12-05 21:11 pramsey * "fixed" pg_opclass so that 7.3 index creation works. 2002-12-05 20:57 pramsey * Changed an opaque to internal (many to go...) 2002-12-05 20:54 pramsey * Pass USE_VERSION macro into the C compilation process to the pre-processor can make use of it 2002-12-05 20:48 pramsey * Changed libdir references to LIBPATH and started using the magic $libpath entry for default installs. 2002-12-05 20:40 pramsey * Formatting change. 2002-12-05 20:30 pramsey * Early support for 7.3. No fixes for typecasting problems yet. 2002-12-05 19:55 pramsey * Removed DOS linefeeds from SQL files. 2002-12-05 19:48 pramsey * Changes to support 7.3 cleanly. 2002-12-05 19:48 pramsey * Changes to allow 7.3 support to be easily added. 2002-12-01 05:59 pramsey * Original OpenGIS test suite files. To be edited to conform to PostGIS syntax where legal. 2002-11-26 03:59 pramsey * Changed references to 'make' into macro references to MAKE 2002-11-22 21:25 chodgson * changed the title of the new section from "Mapserver" to "Using Mapserver" 2002-11-22 21:22 chodgson * added more advanced mapserver documentation, and separated mapserver into its own section of the documentation 2002-11-22 17:38 dblasby * Non-compiled in transform() returns error instead of nop. 2002-11-20 21:32 chodgson * re-formatted the xml doc and added a bit about complex queries (still lots more to come on that topic) 2002-11-06 23:55 jeffloun * added support for clockwise-ness in shp dumper 2002-11-04 21:21 pramsey * Removed debugging connstring print. 2002-10-25 16:13 dblasby * Now accepts both types of multipoint - 'MULTIPOINT(0 0, 1 1)'::geometry and 'MULTIPOINT( (0 0), (1 1))'::geometry; 2002-10-24 15:53 pramsey * Added PGbox3d accessors for LLB and URB. Added PGgeometry update to account for SRIDs when they are present in the WKT. Submitted by Rueben Schultz. 2002-10-17 17:06 chodgson * fixed the last compile warning on solaris/gcc 2002-10-17 16:45 chodgson * - cleaned up all the compiler warnings - for getopt.c, this involved moving the line: extern char *getenv(const char *name); outside of the two nested #ifdefs that it was inside, as it is always required (the code that calls it isn't inside any #ifdefs) Perhaps this may break compilation in non-linux/gnu environments? 2002-10-16 23:48 pramsey * Fixed syntax error in hyperlink to postgis source. 2002-10-16 20:33 dblasby * Added support to turn off the postgis_gist_sel() computations (see Makefile). 2002-10-16 17:27 pramsey * Added USE_STATS switch to make the new statistics system optional. 2002-10-16 17:06 chodgson * makefile now has both support for auto-determining postgres version and support for the new histogram2d stuff 2002-10-11 22:52 dblasby * New file with original estimation methods. 2002-10-11 22:52 dblasby * Added support for histogram2d and better statistical analysis. 2002-10-11 20:22 jeffloun * fixed the errors in the error fix i had just committed... 2002-10-11 20:10 jeffloun * Fixed a bug from adding NULL support to shape dumper 2002-10-10 17:32 jeffloun * added support to write out null geometries to polygon, multipolygon, arc, and multiarcs... 2002-10-10 17:11 jeffloun * Added support to write out Null geometries to point and mulitpoints 2002-10-10 17:00 chodgson * - fixed a bug in box3d_overleft which would likely go unnoticed - fixed the docs for &<, &>, <<, and >> which were backwards 2002-09-20 18:05 dblasby * Fixed complier complaint reported by Mark Sutton <mes@lazo.ca>. 2002-09-06 20:29 pramsey * Trivial initialization bug, forget to set dimension. 2002-09-05 16:49 pramsey * Changes in preparation for 0.7.3 release 2002-09-05 16:39 dblasby * Fixed typo in dropgeometrycolumn() - IS null to =null. This was caused in the last 'fix'. 2002-09-05 00:07 pramsey * Make 7.2 index test check for version 7.1 and default to 7.2 if not This is preparatory to the 7.3 pgsql release which uses the sames GiST bindings as the 7.2 release. 2002-09-04 16:55 dblasby * Applied "Mark Cave-Ayland" <mark.cave-ayland@webbased.co.uk>'s patch so transform() will correctly tranform BBOX only geometries. 2002-09-03 15:31 pramsey * Added automatic test for version string and setting of USE_PG72 to appropriate value, as submitted by Greg Stark. 2002-09-01 20:04 pramsey * Changes in preparation for 0.7.2 release. 2002-08-19 16:14 dblasby * changed "=NULL" to "is null" for postgresql 7.3 devel issues (as reported by Eric - redmonde@purdue.edu) 2002-08-16 17:58 dblasby * Applyed "Mark Cave-Ayland" <mark.cave-ayland@webbased.co.uk>'s patch to the truly_inside() function. Thanks mark! 2002-08-07 16:31 pramsey * Patch to write null geometries as "\N" in the dump file format case. Submitted by Steffen Macke <sdteffen@web.de> 2002-07-26 16:50 chodgson * minor correction 2002-07-24 20:40 pramsey * fixes the unwanted quotation of NULLs for the sql insert format. Submitted by Steffen Macke. 2002-07-17 20:10 chodgson * fixed some formatting errors from my previous addition 2002-07-17 18:34 chodgson * added a "common problems" sub-section to the "installing postgis" section 2002-07-06 17:51 pramsey * Reverted USE_PROJ to 0 2002-07-06 15:16 pramsey * Patch from Steffen Macke, NULL attributes are imported as NULL now, gid field renaming works now (case problem), \ and ' are escaped and don't break the import 2002-07-04 23:38 dblasby * added bytea(wkb) 2002-06-26 18:34 pramsey * fixed syntax error in reference to pgsql2shp 2002-06-26 18:25 pramsey * Cygwin fixes to the install target to provide .exe extensions. 2002-06-07 18:16 jeffloun * fixed a bug in pgsql2shp which displayed the total DBF rows written as one less than actually was written. 2002-05-28 18:01 chodgson * - updated the ~ and @ operator definitions in postgis_gist.sql.in so that ~ is contains and @ is contained (should have been done in the last update, but I forgot) 2002-05-28 17:59 chodgson * - updated the ~ and @ operator definitions in postgis_gist_72.sql.in so that ~ is contains and @ is contained 2002-05-28 17:54 chodgson * - updated the translate function in postgis_fn.c to translate the bounding box as well, as suggested by Robert Burgholzer 2002-05-22 19:29 pramsey * Fixed syntax error in GeometryN defn. 2002-05-14 20:50 pramsey * Set USE_PG72 to 0. 2002-05-14 20:47 pramsey * Documentation updates for 0.7.1 release. 2002-05-14 20:36 pramsey * Stripped DOS carriage returns from all source code files. Should fix some compilation problems on some platforms. 2002-05-14 18:28 chodgson * - integrated a bugfix for the rtree_picksplit algorithm from Teodor Sigaev. This fixes the bug which reports "ERROR: MemoryContextAlloc: invalid request size 0" while building a gist rtree index (first reported by Andy Turk) - cleaned up some warnings (mostly "possibly unitialized variables") 2002-05-06 17:35 chodgson * - changed add_to_geometry() and collector() so that the sql collect() aggregate returns the simplest possible geometric type, ie. a MULTIPOINT instead of a GEOMETRYCOLLECTIONwhen all of the geometries being collected are of either POINT or MULTIPOINT type 2002-05-04 23:08 pramsey * Fixed mistake in FAQ example on radius searching. 2002-05-04 22:52 pramsey * More docbook changes. 2002-05-04 22:51 pramsey * Docbook syntax error changes. 2002-05-04 22:47 pramsey * Added postgis_undef.sql to make clean target. 2002-05-04 22:46 pramsey * Documentation updates to go with the 0.7 release. All new functions documented, and appropriate changes made to installation and other directions. New build process for the PG72 indexes and PROJ4 support added to Makefile. 2002-05-04 22:44 pramsey * Add commenting to indicate the coordinate system of each insert line in a human readable form. 2002-05-04 22:44 pramsey * Update shapelib references to 1.2.9. 2002-05-04 20:30 pramsey * Added an "install" target which installs shp2pgsql and pgsql2shp in the default pgsql bin directory. 2002-05-04 20:29 pramsey * Changed WANT_PROJECTION flag to USE_PROJ to match other Makefile defines. 2002-05-04 20:28 pramsey * Added GeomFromText alias to GeometryFromText since the former is in the SFSQL spec and the latter is not. 2002-05-03 03:14 pramsey * Start of 0.7 documenation edits. 2002-05-02 22:25 dblasby * transform_geom() - if it gets and error -38 from PROJ.4 (couldnt open grid file) it will try to do the transform without a a datum conversion. This usually occurs if you ask for a re-projection for a point outside where you have grid data for. 2002-04-30 23:37 dblasby * Better error reporting. 2002-04-30 23:20 dblasby * Added some debugging to transform. 2002-04-29 17:23 dblasby * Added distance_ellipsiod(point,point,ellipsoid) (called distance_spheroid in SQL) 2002-04-26 22:50 chodgson * - cut the gist indexing-related functions out of postgis_ops.c and put them in postgis_gist.c, then put the new gist indexing functions for postgres >= 7.2 in the file postgis_gist_72 - similarly, the sql definitions of the gist functions have been split into their own new sql.in file, with postgis_gist_72.sql.in containing the new postgres >= 7.2 definitions - the makefile has been updated to compile EITHER postgis_gist.c OR postgis_gist_72.c, and also to process EITHER postgis_gist.sql.in OR postgis_gist_72.sql and add the output to the end of postgis.sql - in order to compile the gist functions for posgres 7.2 or newer, make sure to point your PGSQL_SRC at the new source directory, and uncomment the line in the makefile which says PG72 = 1 (near the top) - some functions that were previously in postgis_ops.c were moved to postgis_fn.c, as part of a general cleanup I did when splitting off the gist functions into their own file - some definitions that were previously in postgis.h (unnecessarily) where removed, as they varied depending on which version of postgis_gist was being used - also edited the loader/Makefile to clean up properly 2002-04-26 16:13 pramsey * Column name length limitation removed. Patch submitted by Bernhard Reiter <bernhard@intevation.de> 2002-04-23 17:02 pramsey * XML syntax error. 2002-04-19 18:20 pramsey * Removed the CREATE INDEX statement since there is already a primary key index. 2002-04-19 18:15 pramsey * Added PROJ4 entries to all relevant rows, altered the auth_name to be EPSG for those IDs which originated from the EPSG. 2002-04-19 15:14 pramsey * Patches to bring example up to current version in terms of SQL access and to stop silly bug in missing table case. Submitted by Steffen Macke <sdteffen@web.de> 2002-04-15 22:38 jeffloun * fixed bug that allowed two field names to be the same in shp2psql, we are now checking for that. 2002-03-26 23:46 dblasby * changed postgis_Version() to return type text, not type char. 2002-03-25 22:20 pramsey * Minor syntax changes in commenting. 2002-03-25 02:04 pramsey * Minor syntactical changes to try and allow compilation on IRIX. 2002-03-22 18:42 chodgson * Added the collect(geometry) function which is an aggregate function that takes a group of geometries and turns them into a geometry collection. For example, "select collect(roadsgeom) from roadstable group by roadname" would return one geometrycollection for each unique road name. 2002-03-15 17:10 dblasby * ADD xmin(box3d) etc... for box3d's. 2002-03-14 19:35 jeffloun * added a warning to the shape dumper when there are no fields in the database. 2002-03-01 19:32 pramsey * Alter shp2pgsql in the -d case so that 'DELETE FROM' is used to clear the 'GEOMETRY_COLUMNS' table during table drop instead of DropGeometryColumns. Patch submitted by Steffen Macke <sdteffen@yahoo.com>. 2002-02-27 00:38 dblasby * minor bug in geometry_to_text() for BOX3D only types fixed. 2002-02-27 00:06 dblasby * BOX3D only geometries now dump as "SRID=x;BOX3D(...)". They are now okay to dump/restore. 2002-02-26 23:46 dblasby * for bbox only geometries, it will dump as "SRID=x;NULL", and on load, it will be NULL. 2002-02-23 19:04 pramsey * Patch to pgsql2shp to allow dumping of tables with more than one geometry column, and addition of -g option to specific which geometry column to dump. Submitted by Steffen Macke <sdteffen@yahoo.com>. 2002-02-19 16:57 pramsey * Patch to shp2pgsql.c to properly handle 3D shape files. Submitted by Steffen Macke <sdteffen@yahoo.com>. 2002-02-18 18:02 dblasby * minor bug fix 2002-02-18 17:02 dblasby * Added TS support function (chip and some non-SFSQL functions) 2002-02-13 16:50 pramsey * Fixed syntax error in UPDATE statement. 2002-01-11 16:58 dblasby * better "no proj4" support addded 2002-01-08 16:55 pramsey * Fixed dumb error in POINT syntax example. 2002-01-07 21:07 dblasby * Order changes to avoid conflicts. 2002-01-03 23:31 dblasby * Added max_distance(l1,l2) function 2001-12-21 23:01 dblasby * Coordinate transformation function, transform() added in this file. Adds requirement for linking the proj4 library if non-null version of function is requested. 2001-12-21 19:44 pramsey * Doco changes to reflect use of 'createlang' as default language creator. 2001-12-18 22:28 dblasby * Added to achive (no code) 2001-12-12 22:21 dblasby * changed setSRID(chip and geometry, int) so its cachable 2001-12-12 22:19 dblasby * Made setSRID cachable 2001-11-21 19:39 dblasby * Chip now handles data with different datasizes (datum_size) 2001-11-19 17:25 pramsey * Fix error in sentence about OGC support. 2001-11-07 19:35 pramsey * Added dates to changelog *yawn* 2001-11-07 17:25 pramsey * Added 0.6.2 changes. 2001-11-06 23:03 jeffloun * Fixed the 'free memory that didn't exist problem' from newsgroup feedback 2001-11-02 23:04 dblasby * New CHIP type 2001-11-02 23:00 dblasby * Added CHIP info 2001-11-02 00:28 pramsey * Added README to files installed by default 2001-11-01 22:57 pramsey * Updated shapelib files from latest CVS version. 2001-10-31 22:18 pramsey * Added spatial_ref_sys.sql to the installed files for 'make install' 2001-10-30 19:52 pramsey * Added some line commenting to make names more readable. 2001-10-30 19:47 pramsey * More spelling fixes, this time with ispell! :) 2001-10-30 19:43 pramsey * Fix spelling mistake. 2001-10-29 17:52 jeffloun * fixed a bug which made the last column value in the dbf file loading incorrect if you were using Dump format. 2001-10-26 17:04 pramsey * Added N.Vines changes to Makefile for better compilation under cygwin. 2001-10-26 16:30 pramsey * Fixed documentation error with respect to box3d 2001-10-25 18:22 dblasby * Fixed but in WKB out - wkb_multi* didnt set the 'size' return value. 2001-10-24 20:56 pramsey * File with all the ESRI standard ID codes, with corresponding WKT definitions, for loading into the SPATIAL_REF_SYS table. 2001-10-24 20:42 pramsey * Sweet mary, mother of god, getopt.c was a mess! Cleaned out HTML entities and added stdio.h include. Works better now. 2001-10-23 23:41 jeffloun * fixed a bug in shp2pgsqkl that allocated way too much memory in polygon files. 2001-10-22 20:13 jeffloun * Standard GNU option handling. 2001-10-22 20:12 jeffloun * Modified both loader/dumper to use gnu getopt.c instead of standar one since getopt was not the same on solaris and linux. 2001-10-18 17:52 pramsey * postgis_undef.sql is now automatically generated from postgis.sql so no longer part of source code distribution 2001-10-18 17:51 pramsey * Added lines to automatically create postgis_undef.sql from postgis.sql using create_undef.pl as part of standard build process. 2001-10-18 16:39 dblasby * create_undef.pl changed to reove the 2 meta-info tables (spatial_ref_sys and geometry_columns). 2001-10-17 23:13 pramsey * Updated style.css to match new website. 2001-10-15 18:07 pramsey * 0.6.1 changes 2001-10-15 17:42 pramsey * Usage documentation changes. 2001-10-11 18:35 pramsey * Added line break ot usage. 2001-10-11 18:34 pramsey * Made usage line more friendly for 80 column displays. 2001-10-11 18:26 pramsey * Edited the usage log to by nicer to 80 column displays 2001-10-11 18:07 jeffloun * Fixed some errors and warning that caused it not to compile under linux 2001-10-11 17:15 jeffloun * Modified the .c files slightly to get rid of some warnings. 2001-10-04 18:53 jeffloun * Modified the pgsql2shp file to use getopt to parse the arguments. Modified the Readme file accordingly to the new command line usages. automatically CVS: CVS: Committing in . CVS: CVS: Modified Files: CVS: postgis/loader/README.pgsql2shp postgis/loader/pgsql2shp.c 2001-10-01 19:33 jeffloun * Modified the program to use getopt topion parsing. 2001-09-20 18:14 jeffloun * Modified this file to dynamically detemine the name of the geometry column instead of using the default one the loader assigns. 2001-09-20 16:08 dblasby * Removed index-based extent() support functions in postgis_debug.c due to compile errors reported under cygwin. 2001-09-19 23:03 pramsey * Updated to provide usage information for the dumper. 2001-09-19 22:59 pramsey * Split the loader README into two readmes, one for loader and one for dumper. 2001-09-19 19:01 pramsey * Makefile changes in preparation for 0.6 release. Documentation fiddling for final format. 2001-09-19 18:47 pramsey * Changes and additions necessary to include pgsql2shp 2001-09-19 18:00 pramsey * Additions for the 0.6 release. 2001-09-18 01:34 pramsey * Updates to the documentation (new functions, 0.6 special info, mapserver info). Other release-specific updates in CHANGES, README, TODO to give info on the new code. 2001-09-17 21:24 jeffloun * Fixed a stupid debugging error that would cause all things to be treated as 3d points. 2001-09-17 21:00 jeffloun * Makefile changes: I added an option in the makefile to add debugging information into the compile. shp2psql.c Modified this program so that it works with the new specs of version 0.6 , sr_id's etc. Also added a command line option to specify the sr_id. 2001-09-04 19:41 dblasby * Added workaround for PostgreSQL's user defined VARIABLE length datatype default value bug 2001-09-04 19:30 dblasby * Added support to make WKB a full type. 2001-08-30 22:24 pramsey * Typo in SQL example fixed. 2001-08-24 21:11 dblasby * geometry(text) function safer with null text fields. 2001-08-24 21:02 dblasby * added geometry(text) conversion function 2001-08-14 22:15 dblasby * Added support for better restrictivity of && searches. Defaulted to 0.005 (in backend/utils/adt/geo_selfuncs.c) - I've changed it to be much smaller. This should work for everything but really really large tables. 2001-08-10 02:21 pramsey * Fixed type in index description. 2001-08-08 22:10 pramsey * Added a -C option for the shp2pgsql compile 2001-08-08 21:54 dblasby * Added new undef.sql file and perl file to generate it. 2001-08-08 21:49 dblasby * Added new perl function to make an undef SQL script. 2001-08-08 05:25 pramsey * Made OGIS type numbers final per request from James MacGill @ Leeds 2001-08-07 21:36 pramsey * This file is superceded by the Makefile. 2001-08-07 21:35 pramsey * This binary should not have been in CVS. 2001-08-02 16:50 dblasby * Added more openGIS functions: Length2d() is renamed length() perimeter2d() is renamed to perimeter() numgeometries(geometry) works on MULTI* types geometryn(geometry) works on MULTI* types from section 2.1.5.1 -------------------- startpoint(geometry) :- if geometry is a linestring, return the first point. Otherwise, return NULL. endpoint(geometry) :- if geometry is a linestring, return the last point. Otherwise, return NULL. from section 2.1.9.1/3.2.18.2 -------------------- centroid(geometry) :- if geometry is a polygon (or multipolygon), return the mathematical centroid (no guaranteed to be on polygon), otherwise return NULL. I define centroid as the average location of all the points in the polygon (outer ring only). For multipolygons, average all the points on all the outer rings. from section 3.2.12.2/3.2.17.2 --------------------- isclosed(geometry) :- if geometry is a linestring then returns startpoint == endpoint. If its not a linestring then return NULL. If its a multilinestring, return true only if all the sub-linestrings have startpoint=endpoint. 2001-07-31 19:11 dblasby * Added plpgsql functions AddGeometryColumn() and DeleteGeometryColumn(). 2001-07-30 17:29 dblasby * Starting to integrate all the SRIDs into functions that create geometries or use two geometries. Throws error if try to compare geometries with different SRIDs. 2001-07-30 16:41 pramsey * Ooops, back to shp2pgsql as the target (dummy target) 2001-07-30 16:31 pramsey * Renamed loader target to 'loader'. 2001-07-30 16:27 pramsey * Added a line to automatically make shp2pgsql with 'all' 2001-07-29 17:18 pramsey * Added section on upgrading. 2001-07-26 17:41 pramsey * And one last time, this time for real, fixing the install location. 2001-07-26 17:37 pramsey * Changed back to libdir for the install path 2001-07-26 17:22 pramsey * Updated minor version number to 5 2001-07-24 20:37 dblasby * added expand_bbox(bbox,double) for easier searching. 2001-07-24 20:18 dblasby * minor change to distance(geom,geom) for stability 2001-07-24 20:12 dblasby * added distance(geometry,geometry) and support functions 2001-07-23 22:53 pramsey * Apply Norman Vine's Cygwin fix for the loader to compile 2001-07-22 19:00 pramsey * Fix error in shp2pgsql section. 2001-07-21 00:43 pramsey * Added lines for 0.2 and 0.5 2001-07-21 00:16 dblasby * Fixes to single-point-line problem. 2001-07-21 00:02 pramsey * Updates for 0.5 release. 2001-07-20 23:49 pramsey * Entered 0.5 change list 2001-07-20 23:40 pramsey * First version. 2001-07-20 23:27 pramsey * Change version numbers 2001-07-20 23:26 pramsey * Updated to include all new functions and features since release 0.2 2001-07-20 18:48 dblasby * Dumper changes. 2001-07-20 18:24 pramsey * Spelling error in makefile. 2001-07-20 18:23 pramsey * Fixed dos2unix problem. 2001-07-20 18:21 pramsey * Added newlines after each begin directive. 2001-07-20 16:10 dblasby * Added -dump option to produce pg_dump format output. Minor fixes. 2001-07-20 15:25 pramsey * Hopefully fixed PGSQL_SRC environment variable test. 2001-07-18 22:17 dblasby * Added function: point_inside_circle(geometry, Px, Py, d) - returns true if there is a point in geometry whose distance to (Px,Py) is < d 2001-07-18 21:45 pramsey * Changed loader name to shp2pgsql 2001-07-18 21:42 pramsey * Initial add of the data loader code. 2001-07-16 16:53 pramsey * Added a 'make clean' directive. 2001-06-29 22:32 dblasby * Fixed bug: must ALWAYS copy input data - never modify it in place. If you do, it'll (unexpectly) update the database. 2001-06-29 00:08 dblasby * Fix typo in box3d 2001-06-28 23:53 dblasby * Added force_collection(geometry) 2001-06-28 17:52 dblasby * converting a GEOMETRYCOLLECTION to wkb had the size of the wkb off by 9 bytes (size of the collection header). Fixed. 2001-06-27 21:43 dblasby * *** empty log message *** 2001-06-27 17:28 dblasby * Initial version of Projection support (currently limited to ellipsoids). 2001-06-26 23:57 pramsey * Building in non-standard location now requires the PGSQL_SRC environment variable to be set and installs in the build location. 2001-06-26 18:33 dblasby * Added OGIS support functions and basic constructors. 2001-06-22 18:13 dblasby * Altered to point local development library path at right place. 2001-06-22 17:39 cvs * Initial revision 2001-06-22 17:39 cvs * New repository initialized by cvs2svn. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/COPYING���������������������������������������������������������������������0000644�0000000�0000000�00000043254�12153412073�014621� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/LICENSE.TXT�����������������������������������������������������������������0000644�0000000�0000000�00000003730�12234151641�015245� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS Licensing ================== This file attempts to include all licenses that apply within the PostGIS source tree, in particular any that are supposed to be exposed to the end user for credit requirements for instance. PostGIS General ---------------- In general PostGIS may be distributed and/or modified under the conditions of the GNU General Public License, either version 2 or (at your option) any later version. Please refer to the COPYING file for details. PostGIS has dependencies on other libraries which are not under GPL and that are commonly distributed with PostGIS core libraries. In general these are dynamically linked libraries. Libraries are as follows: Proj4 - http://proj.osgeo.org -- X/MIT License GEOS - http://geos.osgeo.org -- LGPL License LibXML - http://xmlsoft.org/ -- X/MIT License GDAL - http://gdal.osgeo.org/ -- X/MIT Style License Source files included with PostGIS not under GPL ------------------------------------------------ -- The following loader/dumper files are derivative works or direct ports of ShapeLib which is under an X/MIT License: loader/dbfopen,safileio.*, shapefil.h, shpopen.c -- These are under AT&T public domain (someone should probably verify) loader/getopt.* -- Doc/xsl files These are under a BSD Style license The documentation for PostGIS is under a creative commons share-alike 3.0 license. http://creativecommons.org/licenses/by-sa/3.0/ Data used in documentation falls in one of the following categories - Many of the examples in the topology and tiger geocoder section utilize data from US Census Tiger data 2010 http://www.census.gov/geo/www/tiger/tgrshp2010/tgrshp2010.html - data or snapshots generated by community - many images autogenerated by PostGIS documentation generator (which utilizes ImageMagick) as described http://trac.osgeo.org/postgis/wiki/DevWikiDocNewFeature - PostGIS raster output functions such as the ST_AsPNG etc. - raster/vector data from MassGIS: http://www.mass.gov/mgis/laylist.htm ����������������������������������������postgis-2.1.2+dfsg.orig/extras/���������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015071� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/rpm/�����������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015667� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/rpm/patches/���������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017316� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/rpm/patches/filter-requires-perl-Pg.sh�������������������������������0000755�0000000�0000000�00000000070�11722777314�024310� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh /usr/lib/rpm/perl.req $* | grep -v 'perl(Pg' ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/rpm/patches/postgis-configure.patch����������������������������������0000644�0000000�0000000�00000001012�10544376601�024003� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- configure.old 2006-12-25 14:39:26.000000000 +0200 +++ configure 2006-12-25 14:39:35.000000000 +0200 @@ -4609,13 +4609,6 @@ GEOS_DIR=`$GEOSCONFIG --prefix` GEOS_LDFLAGS=`$GEOSCONFIG --ldflags 2> /dev/null` - if test x"$GEOS_LDFLAGS" = "x"; then - # older geos-config versions did not - # support the --ldflags switch, we'll - # default to GEOS_DIR/lib in this case. - # - GEOS_LDFLAGS="$GEOS_DIR/lib" - fi GEOS_MAJOR=`$GEOSCONFIG --version | cut -d. -f1` if test "$GEOS_MAJOR" = "@GEOS_VERSION@"; then ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/rpm/patches/postgis-javamakefile.patch�������������������������������0000644�0000000�0000000�00000000472�10544376601�024452� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- java/jdbc/Makefile.old 2006-12-25 15:25:19.000000000 +0200 +++ java/jdbc/Makefile 2006-12-25 15:25:26.000000000 +0200 @@ -27,7 +27,7 @@ # Configure the helper executables used during build. -JAVAC?=javac -target 1.2 -source 1.2 +JAVAC?=javac -target 1.5 -source 1.5 JAVA?=java JAR?=jar MKDIR?=mkdir -p ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/rpm/spec/������������������������������������������������������������0000755�0000000�0000000�00000000000�12315456222�016620� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/rpm/spec/postgis.spec������������������������������������������������0000644�0000000�0000000�00000012747�10544376601�021203� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{!?javabuild:%define javabuild 1} %{!?utils:%define utils 1} %{!?gcj_support:%define gcj_support 1} Summary: Geographic Information Systems Extensions to PostgreSQL Name: postgis Version: 1.2.0 Release: 2%{?dist} License: GPL Group: Applications/Databases Source0: http://postgis.refractions.net/download/%{name}-%{version}.tar.gz Source4: filter-requires-perl-Pg.sh Patch1: postgis-configure.patch Patch2: postgis-javamakefile.patch URL: http://postgis.refractions.net/ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: postgresql-devel, proj-devel, geos-devel, byacc, proj-devel, flex, postgresql-jdbc Requires: postgresql, geos, proj %description PostGIS adds support for geographic objects to the PostgreSQL object-relational database. In effect, PostGIS "spatially enables" the PostgreSQL server, allowing it to be used as a backend spatial database for geographic information systems (GIS), much like ESRI's SDE or Oracle's Spatial extension. PostGIS follows the OpenGIS "Simple Features Specification for SQL" and has been certified as compliant with the "Types and Functions" profile. %if %javabuild %package jdbc Summary: The JDBC driver for PostGIS Group: Applications/Databases License: LGPL Requires: postgis BuildRequires: ant >= 0:1.6.2, junit >= 0:3.7 %if %{gcj_support} BuildRequires: gcc-java Requires(post): java-1.4.2-gcj-compat Requires(postun): java-1.4.2-gcj-compat %endif %description jdbc The postgis-jdbc package provides the essential jdbc driver for PostGIS. %endif %if %utils %package utils Summary: The utils for PostGIS Group: Applications/Databases Requires: postgis, perl-DBD-Pg %description utils The postgis-utils package provides the utilities for PostGIS. %endif %define __perl_requires %{SOURCE4} %prep %setup -q %patch1 -p0 %patch2 -p0 %build %configure make %{?_smp_mflags} LPATH=`pg_config --pkglibdir` shlib="%{name}.so" %if %javabuild export MAKEFILE_DIR=%{_builddir}/%{name}-%{version}/java/jdbc JDBC_VERSION_RPM=`rpm -ql postgresql-jdbc| grep 'jdbc.jar$'|awk -F '/' '{print $5}'` sed 's/postgresql.jar/'${JDBC_VERSION_RPM}'/g' $MAKEFILE_DIR/Makefile > $MAKEFILE_DIR/Makefile.new mv -f $MAKEFILE_DIR/Makefile.new $MAKEFILE_DIR/Makefile make -C java/jdbc %endif %if %utils make -C utils %endif %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} install -d %{buildroot}%{_libdir}/pgsql/ install lwgeom/liblwgeom.so* %{buildroot}%{_libdir}/pgsql/ install -d %{buildroot}%{_datadir}/pgsql/contrib/ install -m 644 *.sql %{buildroot}%{_datadir}/pgsql/contrib/ rm -f %{buildroot}%{_libdir}/liblwgeom.so* rm -f %{buildroot}%{_datadir}/*.sql %if %javabuild install -d %{buildroot}%{_javadir} install -m 755 java/jdbc/%{name}_%{version}.jar %{buildroot}%{_javadir} %if %{gcj_support} aot-compile-rpm %endif %endif strip %{buildroot}/%{_libdir}/gcj/%{name}/*.jar.so %if %utils install -d %{buildroot}%{_datadir}/%{name} install -m 644 utils/*.pl %{buildroot}%{_datadir}/%{name} %endif %clean rm -rf %{buildroot} %post -p %{_bindir}/rebuild-gcj-db %postun -p %{_bindir}/rebuild-gcj-db %files %defattr(-,root,root) %doc COPYING CREDITS NEWS TODO README.%{name} TODO doc/html loader/README.* doc/%{name}.xml doc/ZMSgeoms.txt %attr(755,root,root) %{_bindir}/* %attr(755,root,root) %{_libdir}/pgsql/liblwgeom.so* %{_datadir}/pgsql/contrib/*.sql %if %javabuild %files jdbc %defattr(-,root,root) %doc java/jdbc/COPYING_LGPL java/jdbc/README %attr(755,root,root) %{_javadir}/%{name}_%{version}.jar %if %{gcj_support} %dir %{_libdir}/gcj/%{name} %{_libdir}/gcj/%{name}/*.jar.so %{_libdir}/gcj/%{name}/*.jar.db %endif %endif %if %utils %files utils %defattr(-,root,root) %doc utils/README %attr(755,root,root) %{_datadir}/%{name}/test_estimation.pl %attr(755,root,root) %{_datadir}/%{name}/profile_intersects.pl %attr(755,root,root) %{_datadir}/%{name}/test_joinestimation.pl %attr(644,root,root) %{_datadir}/%{name}/create_undef.pl %attr(644,root,root) %{_datadir}/%{name}/%{name}_proc_upgrade.pl %attr(644,root,root) %{_datadir}/%{name}/%{name}_restore.pl %endif %changelog * Mon Dec 26 2006 - Devrim GUNDUZ <devrim@commandprompt.com> 1.2.0-2 - More spec file fixes per bugzilla review #220743 * Mon Dec 25 2006 - Devrim GUNDUZ <devrim@commandprompt.com> 1.2.0-1 - Initial submission for Fedora Core Extras - Spec file changes and fixes per FC Extras packaging guidelines * Fri Jun 23 2006 - Devrim GUNDUZ <devrim@commandprompt.com> 1.1.2-2 - Update to 1.1.2 * Tue Dec 22 2005 - Devrim GUNDUZ <devrim@commandprompt.com> 1.1.0-2 - Final fixes for 1.1.0 * Tue Dec 06 2005 - Devrim GUNDUZ <devrim@gunduz.org> - Update to 1.1.0 * Mon Oct 03 2005 - Devrim GUNDUZ <devrim@gunduz.org> - Make PostGIS build against pgxs so that we don't need PostgreSQL sources. - Fixed all build errors except jdbc (so, defaulted to 0) - Added new files under %%utils - Removed postgis-jdbc2-makefile.patch (applied to -head) * Tue Sep 27 2005 - Devrim GUNDUZ <devrim@gunduz.org> - Update to 1.0.4 * Sun Apr 20 2005 - Devrim GUNDUZ <devrim@gunduz.org> - 1.0.0 Gold * Sun Apr 17 2005 - Devrim GUNDUZ <devrim@gunduz.org> - Modified the spec file so that we can build JDBC2 RPMs... - Added -utils RPM to package list. * Fri Apr 15 2005 - Devrim GUNDUZ <devrim@gunduz.org> - Added preun and postun scripts. * Sat Apr 09 2005 - Devrim GUNDUZ <devrim@gunduz.org> - Initial RPM build - Fixed libdir so that PostgreSQL installations will not complain about it. - Enabled --with-geos and modified the old spec. �������������������������postgis-2.1.2+dfsg.orig/extras/rpm/README�����������������������������������������������������������0000644�0000000�0000000�00000011176�11722777314�016565� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������README ----------------------------------------------------------------------------- Version 1.0.4, for PostGIS RPM Set Devrim Gunduz <devrim@gunduz.org> Oct 04, 2005 ----------------------------------------------------------------------------- INTRODUCTION ----------------------------------------------------------------------------- This document exists to explain the layout of the RPM for PostGIS . This document is written to be applicable to version 1.0.X of PostGIS which is the current version of the RPM's as of this writing. More to the point, versions prior to 1.0.X are not documented here. It is preferable for the distribution-specific set to be the one used. If you want to stay up-to-date on the PostGIS core itself, use the community RPMS. These RPMs are kept up2date. PostGIS RPM is installed as every RPM, so it is not mentioned in here. BUILDING RPMS ----------------------------------------------------------------------------- To build RPMs, you'll need the following: * The source tarball of PostGIS. * PostGIS spec (see extras/rpm/spec for the file) * Some patches/sources from CVS (see extras/rpm/patches for the files) Please note that you'll need some development tools for building PostGIS. You'll be prompted for this prerequisites. Here is a basic guide for building RPMs: 1. Move the patches/sources and source tarball into /usr/src/redhat/SOURCES 2. Next, move the spec file under /usr/src/redhat/SPECS 3. Run the following command: rpmbuild -bb postgis.spec This will build RPMs for you. The RPMs will be placed under /usr/src/redhat/RPMS/i386/ If you specify an explicit target while rpmbuild, then the directory may change: Command: rpmbuild -bb --target i686 postgis.spec Resulting directory: /usr/src/redhat/RPMS/i686/ RPM FILE LOCATIONS. ----------------------------------------------------------------------------- To be in compliance with the Linux FHS, the PostGIS RPMs install files in a manner not consistent with most of the PostGIS documentation. According to the standard PostGIS documentation, PostGIS is installed under the directory /usr/local, with executables, source, and data existing in various subdirectories. Different distributions have different ideas of some of these file locations. In particular, the documentation directory can be /usr/doc, /usr/doc/packages, /usr/share/doc, /usr/share/doc/packages, or some other similar path. The current Red Hat / Fedora Core locations are listed below. However, the RPM's install the files like this: Executables: /usr/bin Libraries: /usr/lib Documentation: /usr/share/doc/postgis-x.y.z JDBC2 related: /usr/shara/java Perl utils: /usr/bin Use of 'rpm -ql' for each package is recommended as the 'Official' location source. While it may seem gratuitous to place these files in different locations, the FHS requires it -- distributions should not ever touch /usr/local. It may also seem like more work to keep track of where everything is -- but, that's the beauty of RPM -- you don't have to keep track of the files, RPM does it for you. These RPMs are designed to be LSB-compliant -- if you find this not to be the case, please let me know by way of the postgis-devel@PostGIS.org mailing list. REBUILDING FROM SOURCE RPM ------------------------------------------------------------------------------- If your distribution is not supported by the binary RPM's from PostGIS.org, you will need to rebuild from the source RPM. Download the .src.rpm for this release. You will need to be root to rebuild, unless you have already set up a non-root build environment. Install the source RPM with rpm -i, then CD to the rpm building area (on RedHat or Fedora Core, this is /usr/src/redhat by default). You will have to have a full development environment to rebuild the RPM. This release of the RPM includes the ability to conditionally build sets of packages. The parameters, their defaults, and the meanings are: jdbc2: Build the RPM with jdbc2 support (default value is 1) utils: Build the RPM with perl utils (default value is 1) To use these defines, invoke a rebuild like this: rpm --rebuild --define 'jdbc2 0 ' --define 'utils' postgis-1.0.4-1.src.rpm This line would disable the jdbc2 and utils, if requested. Please note that the spec file needs some patches to PostGIS source tree to build, so you may need to download them via CVS before rebuilding the package. MORE INFORMATION ------------------------------------------------------------------------------- You can get more information at http://www.PostGIS.org Please help make this packaging better -- let me know if you find problems, or better ways of doing things. You can reach us by e-mail at postgis-devel@PostGIS.org . ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020052� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/README������������������������������������������������0000644�0000000�0000000�00000004532�12167154260�020737� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Id: README 11651 2013-07-10 03:44:48Z robe $ TIGER Geocoder 2013/07/09 A plpgsql based geocoder written for TIGER census data. Design: There are two components to the geocoder, the address normalizer and the address geocoder. These two components are described separately. The goal of this project is to build a fully functional geocoder that can process an arbitrary address string and, using normalized TIGER census data, produce a point geometry reflecting the location of the given address. - The geocoder should be simple for anyone familiar with PostGIS to install and use. - It should be robust enough to function properly despite formatting and spelling errors. - It should be extensible enough to be used with future data updates, or alternate data sources with a minimum of coding changes. Installation: Refer to the README in the respective year tiger folder for installation and example usage. The latest scripts as of this writing are for tiger_2012. Usage: SELECT g.rating, g.geomout, (addy).* FROM geocode('address string') As g; e.g: SELECT g.rating, ST_X(geomout) As lon, ST_Y(geomout) As lat, (addy).* FROM geocode('1731 New Hampshire Avenue Northwest, Washington, DC 20010') As g; Notes: - The assumed format for the address is the US Postal Service standard: () indicates a field required by the geocoder, [] indicates an optional field. (address) [dirPrefix] (streetName) [streetType] [dirSuffix] [internalAddress] [location] [state] [zipCode] Address Normalizer: The goal of the address normalizer is to provide a robust function to break a given address string down into the components of an address. While the normalizer is built specifically for the normalized US TIGER Census data, it has been designed to be reasonably extensible to other data sets and localities. Usage: normalize_address('address string'); e.g.: SELECT naddy.* FROM normalize_address('29645 7th Street SW Federal Way 98023') AS naddy; address | predirabbrev | streetname | streettypeabbrev | postdirabbrev | internal | location | stateabbrev | zip | parsed ---------+-------------+-----------------------+------------------+---------------+----------+----------+-------------+-------+-------- 29645 | | 7th Street SW Federal | Way | | | | | 98023 | ����������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/�������������������������������������������0000755�0000000�0000000�00000000000�12315456222�021626� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/pagc_normalize/����������������������������0000755�0000000�0000000�00000000000�12317530606�024621� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_normalize_address.sql��0000644�0000000�0000000�00000004203�12140121214�032021� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: pagc_normalize_address.sql 11332 2013-05-01 05:05:16Z robe $- -- pagc_normalize_address(addressString) -- This takes an address string and parses it into address (internal/street) -- street name, type, direction prefix and suffix, location, state and -- zip code, depending on what can be found in the string. -- This is a drop in replacement for packaged normalize_address -- that uses the pagc address standardizer C library instead -- USAGE: SELECT * FROM tiger.pagc_normalize_address('One Devonshire Place, PH 301, Boston, MA 02109'); SELECT tiger.SetSearchPathForInstall('tiger'); CREATE OR REPLACE FUNCTION pagc_normalize_address(in_rawinput character varying) RETURNS norm_addy AS $$ DECLARE result norm_addy; var_rec RECORD; var_parse_rec RECORD; rawInput VARCHAR; BEGIN --$Id: pagc_normalize_address.sql 11332 2013-05-01 05:05:16Z robe $- result.parsed := FALSE; rawInput := trim(in_rawinput); var_parse_rec := parse_address(rawInput); result.location := var_parse_rec.city; result.stateAbbrev := trim(var_parse_rec.state); result.zip := var_parse_rec.zip; var_rec := standardize_address('pagc_lex' , 'pagc_gaz' , 'pagc_rules' , COALESCE(var_parse_rec.address1,''), COALESCE(', ' || var_parse_rec.city,'') || COALESCE(', ' || var_parse_rec.state, '') || COALESCE(' ' || var_parse_rec.zip,'') ) ; -- For address number only put numbers and stop if reach a non-number e.g. 123-456 will return 123 result.address := to_number(substring(var_rec.house_num, '[0-9]+'), '99999999999'); --get rid of extraneous spaces before we return result.zip := COALESCE(var_rec.postcode,result.zip); result.streetName := trim(var_rec.name); result.location := trim(var_rec.city); result.stateAbbrev := trim(var_rec.state); --this should be broken out separately like pagc, but normalizer doesn't have a slot for it result.streettypeAbbrev := trim(COALESCE(var_rec.suftype, var_rec.pretype)); result.preDirAbbrev := trim(var_rec.predir); result.postDirAbbrev := trim(var_rec.sufdir); result.internal := trim(var_rec.unit); result.parsed := TRUE; RETURN result; END $$ LANGUAGE plpgsql IMMUTABLE COST 100;���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql�������������0000644�0000000�0000000�00003030040�12201355112�027573� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Lookup tables used by pagc to standardize in format expected by tiger geocoder --$Id: pagc_tables.sql 11758 2013-08-10 06:14:34Z robe $- SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT tiger.SetSearchPathForInstall('tiger'); CREATE OR REPLACE FUNCTION install_pagc_tables() RETURNS void AS $$ DECLARE var_temp text; BEGIN var_temp := tiger.SetSearchPathForInstall('tiger'); /** set set search path to have tiger in front **/ IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND table_name = 'pagc_gaz') THEN CREATE TABLE pagc_gaz (id serial NOT NULL primary key ,seq integer ,word text, stdword text, token integer,is_custom boolean NOT NULL default true); GRANT SELECT ON pagc_gaz TO public; END IF; IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND table_name = 'pagc_lex') THEN CREATE TABLE pagc_lex (id serial NOT NULL primary key,seq integer,word text,stdword text,token integer,is_custom boolean NOT NULL default true); GRANT SELECT ON pagc_lex TO public; END IF; IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND table_name = 'pagc_rules') THEN CREATE TABLE pagc_rules (id serial NOT NULL primary key,rule text, is_custom boolean DEFAULT true); GRANT SELECT ON pagc_rules TO public; END IF; IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND table_name = 'pagc_gaz' AND data_type='text') THEN -- its probably old table structure change type of lex and gaz columns ALTER TABLE tiger.pagc_lex ALTER COLUMN word TYPE text; ALTER TABLE tiger.pagc_lex ALTER COLUMN stdword TYPE text; ALTER TABLE tiger.pagc_gaz ALTER COLUMN word TYPE text; ALTER TABLE tiger.pagc_gaz ALTER COLUMN stdword TYPE text; END IF; IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND table_name = 'pagc_rules' AND column_name = 'is_custom' ) THEN -- its probably old table structure add column ALTER TABLE tiger.pagc_rules ADD COLUMN is_custom boolean NOT NULL DEFAULT false; END IF; END; $$ language plpgsql; SELECT install_pagc_tables(); DELETE FROM pagc_gaz WHERE is_custom = false; DELETE FROM pagc_lex WHERE is_custom = false; DELETE FROM pagc_rules WHERE is_custom = false OR id < 10000; INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (1, 1, 'AB', 'ALBERTA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (2, 2, 'AB', 'ALBERTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (3, 3, 'AB', 'ALBERTA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (4, 1, 'AFB', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (5, 1, 'A F B', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (6, 1, 'AIR FORCE BASE', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (8, 2, 'AK', 'ALASKA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (11, 2, 'AL', 'ALABAMA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (14, 2, 'ALA', 'ALABAMA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (17, 2, 'ALABAMA', 'ALABAMA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (19, 2, 'ALASKA', 'ALASKA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (20, 1, 'ALBERTA', 'ALBERTA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (21, 2, 'ALBERTA', 'ALBERTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (23, 2, 'AR', 'ARKANSAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (26, 2, 'ARIZ', 'ARIZONA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (29, 2, 'ARIZONA', 'ARIZONA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (31, 2, 'ARK', 'ARKANSAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (34, 2, 'ARKANSAS', 'ARKANSAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (36, 2, 'AZ', 'ARIZONA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (38, 1, 'B C', 'BRITISH COLUMBIA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (39, 2, 'B C', 'BRITISH COLUMBIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (40, 3, 'B C', 'BRITISH COLUMBIA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (41, 1, 'BC', 'BRITISH COLUMBIA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (42, 2, 'BC', 'BRITISH COLUMBIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (43, 3, 'BC', 'BRITISH COLUMBIA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (44, 1, 'BRITISH COLUMBIA', 'BRITISH COLUMBIA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (45, 2, 'BRITISH COLUMBIA', 'BRITISH COLUMBIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (47, 2, 'CA', 'CALIFORNIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (49, 4, 'CA', 'CANADA', 12, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (50, 5, 'CA', 'CARRE', 2, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (52, 2, 'CALIF', 'CALIFORNIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (55, 2, 'CALIFORNIA', 'CALIFORNIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (56, 1, 'CANADA', 'CANADA', 12, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (57, 2, 'CANADA', 'CANADA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (59, 2, 'CO', 'COLORADO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (61, 1, 'COLOMBIE BRITANNIQUE', 'BRITISH COLUMBIA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (62, 2, 'COLOMBIE BRITANNIQUE', 'BRITISH COLUMBIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (64, 2, 'COLORADO', 'COLORADO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (66, 2, 'CONN', 'CONNECTICUT', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (69, 2, 'CONNECTICUT', 'CONNECTICUT', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (71, 2, 'CT', 'CONNECTICUT', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (74, 2, 'DC', 'DC', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (77, 3, 'DE', 'DELAWARE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (79, 2, 'DEL', 'DELAWARE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (82, 2, 'DELAWARE', 'DELAWARE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (84, 2, 'DC', 'DISTRICT OF COLUMBIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (85, 2, 'EL PASO', 'EL PASO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (87, 2, 'FL', 'FLORIDA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (90, 2, 'FLA', 'FLORIDA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (93, 2, 'FLORIDA', 'FLORIDA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (94, 1, 'FRKS', 'FORKS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (96, 2, 'GA', 'GEORGIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (99, 2, 'GEORGIA', 'GEORGIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (101, 2, 'HAWAII', 'HAWAII', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (103, 2, 'HI', 'HAWAII', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (106, 2, 'IA', 'IOWA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (109, 2, 'ID', 'IDAHO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (112, 2, 'IDAHO', 'IDAHO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (114, 2, 'IL', 'ILLINOIS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (116, 1, 'ILE DU PRINCE EDOUARD', 'PRINCE EDWARD ISLAND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (117, 2, 'ILE DU PRINCE EDOUARD', 'PRINCE EDWARD ISLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (119, 2, 'ILL', 'ILLINOIS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (122, 2, 'ILLINOIS', 'ILLINOIS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (124, 2, 'IN', 'INDIANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (127, 2, 'IND', 'INDIANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (130, 2, 'INDIANA', 'INDIANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (132, 2, 'IOWA', 'IOWA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (134, 2, 'KANSAS', 'KANSAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (136, 2, 'KENT', 'KENTUCKY', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (139, 2, 'KENTUCKY', 'KENTUCKY', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (141, 2, 'KS', 'KANSAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (144, 2, 'KY', 'KENTUCKY', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (147, 2, 'LA', 'LOUISIANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (149, 1, 'LABRADOR', 'NEWFOUNDLAND AND LABRADOR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (150, 2, 'LABRADOR', 'NEWFOUNDLAND AND LABRADOR', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (152, 2, 'LOUISIANA', 'LOUISIANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (154, 2, 'MA', 'MASSACHUSETTS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (156, 4, 'MA', 'MANOR', 2, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (158, 2, 'MAINE', 'MAINE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (159, 1, 'MANITOBA', 'MANITOBA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (160, 2, 'MANITOBA', 'MANITOBA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (162, 2, 'MARYLAND', 'MARYLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (164, 2, 'MASS', 'MASSACHUSETTS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (167, 2, 'MASSACHUSETTS', 'MASSACHUSETTS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (168, 1, 'MB', 'MANITOBA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (169, 2, 'MB', 'MANITOBA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (170, 3, 'MB', 'MANITOBA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (172, 2, 'MD', 'MARYLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (175, 2, 'ME', 'MAINE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (178, 2, 'MI', 'MICHIGAN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (181, 2, 'MICH', 'MICHIGAN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (184, 2, 'MICHIGAN', 'MICHIGAN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (186, 2, 'MINN', 'MINNESOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (189, 2, 'MINNESOTA', 'MINNESOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (191, 2, 'MISSISSIPPI', 'MISSISSIPPI', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (193, 2, 'MISSOURI', 'MISSOURI', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (195, 2, 'MN', 'MINNESOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (198, 2, 'MO', 'MISSOURI', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (201, 2, 'MONT', 'MONTANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (204, 2, 'MONTANA', 'MONTANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (206, 2, 'MT', 'MONTANA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (209, 2, 'MS', 'MISSISSIPPI', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (212, 2, 'N CAROLINA', 'NORTH CAROLINA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (214, 2, 'N DAKOTA', 'NORTH DAKOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (215, 1, 'NB', 'NEW BRUNSWICK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (216, 2, 'NB', 'NEW BRUNSWICK', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (217, 3, 'NB', 'NEW BRUNSWICK', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (219, 2, 'NC', 'NORTH CAROLINA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (222, 2, 'ND', 'NORTH DAKOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (225, 2, 'NE', 'NEBRASKA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (228, 2, 'NEB', 'NEBRASKA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (231, 2, 'NEBRASKA', 'NEBRASKA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (233, 2, 'NEV', 'NEVADA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (236, 2, 'NEVADA', 'NEVADA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (237, 1, 'NEW BRUNSWICK', 'NEW BRUNSWICK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (238, 2, 'NEW BRUNSWICK', 'NEW BRUNSWICK', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (240, 2, 'NEW HAMPSHIRE', 'NEW HAMPSHIRE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (242, 2, 'NEW JERSEY', 'NEW JERSEY', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (244, 2, 'NEW MEXICO', 'NEW MEXICO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (246, 2, 'NEW YORK', 'NEW YORK', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (247, 1, 'NEWFOUNDLAND', 'NEWFOUNDLAND AND LABRADOR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (248, 2, 'NEWFOUNDLAND', 'NEWFOUNDLAND AND LABRADOR', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (249, 1, 'NF', 'NEWFOUNDLAND AND LABRADOR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (250, 2, 'NF', 'NEWFOUNDLAND AND LABRADOR', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (251, 3, 'NF', 'NEWFOUNDLAND AND LABRADOR', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (253, 2, 'NH', 'NEW HAMPSHIRE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (256, 2, 'NJ', 'NEW JERSEY', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (258, 1, 'NL', 'NEWFOUNDLAND AND LABRADOR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (259, 2, 'NL', 'NEWFOUNDLAND AND LABRADOR', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (260, 3, 'NL', 'NEWFOUNDLAND AND LABRADOR', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (262, 2, 'NM', 'NEW MEXICO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (265, 2, 'NORTH CAROLINA', 'NORTH CAROLINA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (267, 2, 'NORTH DAKOTA', 'NORTH DAKOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (268, 1, 'NORTHWEST', 'NORTHWEST', 22, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (269, 1, 'NORTHWEST TERRITORIES', 'NORTHWEST TERRITORIES', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (270, 2, 'NORTHWEST TERRITORIES', 'NORTHWEST TERRITORIES', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (271, 1, 'NOUVEAU BRUNSWICK', 'NEW BRUNSWICK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (272, 2, 'NOUVEAU BRUNSWICK', 'NEW BRUNSWICK', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (273, 1, 'NOUVELLE ECOSSE', 'NOVA SCOTIA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (274, 2, 'NOUVELLE ECOSSE', 'NOVA SCOTIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (275, 1, 'NOVA SCOTIA', 'NOVA SCOTIA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (276, 2, 'NOVA SCOTIA', 'NOVA SCOTIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (277, 1, 'NS', 'NOVA SCOTIA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (278, 2, 'NS', 'NOVA SCOTIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (279, 3, 'NS', 'NOVA SCOTIA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (280, 1, 'NT', 'NORTHWEST TERRITORIES', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (281, 2, 'NT', 'NORTHWEST TERRITORIES', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (282, 3, 'NT', 'NORTHWEST TERRITORIES', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (283, 1, 'NU', 'NUNAVUT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (284, 2, 'NU', 'NUNAVUT', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (285, 3, 'NU', 'NUNAVUT', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (286, 1, 'NUNAVUT', 'NUNAVUT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (287, 2, 'NUNAVUT', 'NUNAVUT', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (289, 2, 'NV', 'NEVADA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (292, 2, 'NY', 'NEW YORK', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (295, 2, 'OH', 'OHIO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (298, 2, 'OHIO', 'OHIO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (300, 2, 'OK', 'OKLAHOMA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (303, 2, 'OKLA', 'OKLAHOMA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (306, 2, 'OKLAHOMA', 'OKLAHOMA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (307, 1, 'ON', 'ONTARIO', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (308, 2, 'ON', 'ONTARIO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (309, 3, 'ON', 'ONTARIO', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (310, 1, 'ONT', 'ONTARIO', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (311, 2, 'ONT', 'ONTARIO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (312, 3, 'ONT', 'ONTARIO', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (313, 1, 'ONTARIO', 'ONTARIO', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (314, 2, 'ONTARIO', 'ONTARIO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (316, 2, 'OR', 'OREGON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (319, 2, 'ORE', 'OREGON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (322, 2, 'OREGON', 'OREGON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (324, 2, 'PA', 'PENNSYLVANIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (326, 1, 'PE', 'PRINCE EDWARD ISLAND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (327, 2, 'PE', 'PRINCE EDWARD ISLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (328, 3, 'PE', 'PRINCE EDWARD ISLAND', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (329, 1, 'PEI', 'PRINCE EDWARD ISLAND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (330, 2, 'PEI', 'PRINCE EDWARD ISLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (331, 3, 'PEI', 'PRINCE EDWARD ISLAND', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (333, 2, 'PENN', 'PENNSYLVANIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (336, 2, 'PENNA', 'PENNSYLVANIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (339, 2, 'PENNSYLVANIA', 'PENNSYLVANIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (340, 1, 'PQ', 'QUEBEC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (341, 2, 'PQ', 'QUEBEC', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (342, 3, 'PQ', 'QUEBEC', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (344, 2, 'PR', 'PUERTO RICO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (346, 1, 'PRINCE EDWARD ISLAND', 'PRINCE EDWARD ISLAND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (347, 2, 'PRINCE EDWARD ISLAND', 'PRINCE EDWARD ISLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (349, 2, 'PUERTO RICO', 'PUERTO RICO', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (350, 1, 'QC', 'QUEBEC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (351, 2, 'QC', 'QUEBEC', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (352, 3, 'QC', 'QUEBEC', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (353, 1, 'QUEBEC', 'QUEBEC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (354, 2, 'QUEBEC', 'QUEBEC', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (356, 2, 'RHODE ISLAND', 'RHODE ISLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (358, 2, 'RI', 'RHODE ISLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (361, 2, 'S CAROLINA', 'SOUTH CAROLINA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (363, 2, 'S DAKOTA', 'SOUTH DAKOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (364, 1, 'SASK', 'SASKATCHEWAN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (365, 2, 'SASK', 'SASKATCHEWAN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (366, 1, 'SASKATCHEWAN', 'SASKATCHEWAN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (367, 2, 'SASKATCHEWAN', 'SASKATCHEWAN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (369, 2, 'SC', 'SOUTH CAROLINA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (372, 2, 'SD', 'SOUTH DAKOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (374, 1, 'SK', 'SASKATCHEWAN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (375, 2, 'SK', 'SASKATCHEWAN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (376, 3, 'SK', 'SASKATCHEWAN', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (378, 2, 'SOUTH CAROLINA', 'SOUTH CAROLINA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (380, 2, 'SOUTH DAKOTA', 'SOUTH DAKOTA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (382, 2, 'TENN', 'TENNESSEE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (385, 2, 'TENNESSEE', 'TENNESSEE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (386, 1, 'TERRE NEUVE', 'NEWFOUNDLAND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (387, 2, 'TERRE NEUVE', 'NEWFOUNDLAND', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (388, 1, 'TERRITOIRES DU NORD OUES', 'NORTHWEST TERRITORIES', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (389, 2, 'TERRITOIRES DU NORD OUES', 'NORTHWEST TERRITORIES', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (391, 2, 'TEX', 'TEXAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (394, 2, 'TEXAS', 'TEXAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (396, 2, 'TN', 'TENNESSEE', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (399, 2, 'TX', 'TEXAS', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (401, 2, 'U S', 'US', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (402, 3, 'U S', 'USA', 12, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (403, 1, 'U S A', 'USA', 12, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (404, 1, 'UNITED STATES OF AMERICA', 'USA', 12, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (405, 2, 'US', 'US', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (406, 3, 'US', 'USA', 12, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (407, 1, 'USA', 'USA', 12, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (409, 2, 'UT', 'UTAH', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (412, 2, 'UTAH', 'UTAH', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (414, 2, 'VA', 'VIRGINIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (417, 2, 'VERMONT', 'VERMONT', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (419, 2, 'VIRGINIA', 'VIRGINIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (421, 2, 'VT', 'VERMONT', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (424, 2, 'W VIRGINIA', 'WEST VIRGINIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (426, 2, 'WA', 'WASHINGTON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (429, 2, 'WASH', 'WASHINGTON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (432, 2, 'WASHINGTON', 'WASHINGTON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (434, 2, 'WEST VIRGINIA', 'WEST VIRGINIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (436, 2, 'WI', 'WISCONSIN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (439, 2, 'WISC', 'WISCONSIN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (442, 2, 'WISCONSIN', 'WISCONSIN', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (444, 2, 'WV', 'WEST VIRGINIA', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (447, 2, 'WY', 'WYOMING', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (450, 2, 'WYOMING', 'WYOMING', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (451, 1, 'YK', 'YUKON', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (452, 2, 'YK', 'YUKON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (453, 3, 'YK', 'YUKON', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (454, 1, 'YT', 'YUKON', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (455, 2, 'YT', 'YUKON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (456, 3, 'YT', 'YUKON', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (457, 1, 'YUKON', 'YUKON', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (458, 2, 'YUKON', 'YUKON', 1, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (459, 1, 'BOIS D ARC', 'BOIS D ARC', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (460, 1, 'BOIS D''ARC', 'BOIS D ARC', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (461, 1, 'CAMP H M SMITH', 'CAMP H M SMITH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (462, 1, 'CAMP HM SMITH', 'CAMP H M SMITH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (463, 1, 'COEUR D ALENE', 'COEUR D ALENE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (464, 1, 'COEUR D''ALENE', 'COEUR D ALENE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (465, 1, 'D HANIS', 'D HANIS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (466, 1, 'D''HANIS', 'D HANIS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (467, 1, 'EL PASO', 'EL PASO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (468, 1, 'FORT GEORGE G MEADE', 'FORT GEORGE G MEADE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (469, 1, 'FORT GEORGE MEADE', 'FORT GEORGE G MEADE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (470, 1, 'FORT MEADE', 'FORT GEORGE G MEADE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (471, 1, 'LAND O LAKES', 'LAND O LAKES', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (472, 1, 'LAND O''LAKES', 'LAND O LAKES', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (473, 1, 'M C B H KANEOHE BAY', 'M C B H KANEOHE BAY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (474, 1, 'MCBH KANEOHE BAY', 'M C B H KANEOHE BAY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (475, 1, 'N VAN', 'NORTH VANCOUVER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (476, 1, 'N VANCOUVER', 'NORTH VANCOUVER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (477, 1, 'NO VANCOUVER', 'NORTH VANCOUVER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (478, 1, 'NORTH VANCOUVER', 'NORTH VANCOUVER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (479, 1, 'O BRIEN', 'O BRIEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (480, 1, 'O''BRIEN', 'O BRIEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (481, 1, 'O FALLON', 'O FALLON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (482, 1, 'O''FALLON', 'O FALLON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (483, 1, 'O NEALS', 'O NEALS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (484, 1, 'O''NEALS', 'O NEALS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (485, 1, 'ROUND O', 'ROUND O', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (486, 1, 'S COFFEYVILLE', 'SOUTH COFFEYVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (487, 1, 'SOUTH COFFEYVILLE', 'SOUTH COFFEYVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (488, 1, 'U S A F ACADEMY', 'U S A F ACADEMY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (489, 1, 'USAF ACADEMY', 'U S A F ACADEMY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (490, 1, 'W VAN', 'WEST VANCOUVER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (491, 1, 'W VANCOUVER', 'WEST VANCOUVER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (492, 1, 'WEST VANCOUVER', 'WEST VANCOUVER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (493, 1, 'AU GRES', 'AU GRES', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (494, 1, 'AU SABLE FORKS', 'AU SABLE FORKS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (495, 1, 'AU SABLE FRKS', 'AU SABLE FORKS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (496, 1, 'AU TRAIN', 'AU TRAIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (497, 1, 'AVON BY THE SEA', 'AVON BY THE SEA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (498, 1, 'AVON BY SEA', 'AVON BY THE SEA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (499, 1, 'BAYOU LA BATRE', 'BAYOU LA BATRE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (500, 1, 'BIRD IN HAND', 'BIRD IN HAND', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (501, 1, 'CAMDEN ON GAULEY', 'CAMDEN ON GAULEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (502, 1, 'CARDIFF BY THE SEA', 'CARDIFF BY THE SEA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (503, 1, 'CARDIFF BY SEA', 'CARDIFF BY THE SEA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (504, 1, 'CASTLETON ON HUDSON', 'CASTLETON ON HUDSON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (505, 1, 'CAVE IN ROCK', 'CAVE IN ROCK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (506, 1, 'CORNWALL ON HUDSON', 'CORNWALL ON HUDSON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (507, 1, 'CROTON ON HUDSON', 'CROTON ON HUDSON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (508, 1, 'DE BEQUE', 'DE BEQUE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (509, 1, 'DE BERRY', 'DE BERRY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (510, 1, 'DE FOREST', 'DE FOREST', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (511, 1, 'DE GRAFF', 'DE GRAFF', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (512, 1, 'DE KALB', 'DE KALB', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (513, 1, 'DE KALB JUNCTION', 'DE KALB JUNCTION', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (514, 1, 'DE LAND', 'DE LAND', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (515, 1, 'DE LEON', 'DE LEON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (516, 1, 'DE LEON SPRINGS', 'DE LEON SPRINGS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (517, 1, 'DE MOSSVILLE', 'DE MOSSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (518, 1, 'DE PERE', 'DE PERE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (519, 1, 'DE PEYSTER', 'DE PEYSTER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (520, 1, 'DE QUEEN', 'DE QUEEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (521, 1, 'DE RUYTER', 'DE RUYTER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (522, 1, 'DE SMET', 'DE SMET', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (523, 1, 'DE SOTO', 'DE SOTO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (524, 1, 'DE TOUR VILLAGE', 'DE TOUR VILLAGE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (525, 1, 'DE VALLS BLUFF', 'DE VALLS BLUFF', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (526, 1, 'VALLS BLUFF', 'DE VALLS BLUFF', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (527, 1, 'DE WITT', 'DE WITT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (528, 1, 'DE YOUNG', 'DE YOUNG', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (529, 1, 'DU BOIS', 'DU BOIS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (530, 1, 'DU PONT', 'DU PONT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (531, 1, 'DU QUOIN', 'DU QUOIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (532, 1, 'E MC KEESPORT', 'EAST MC KEESPORT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (533, 1, 'E MCKEESPORT', 'EAST MC KEESPORT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (534, 1, 'EAST MC KEESPORT', 'EAST MC KEESPORT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (535, 1, 'EAST MCKEESPORT', 'EAST MC KEESPORT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (536, 1, 'EL CAJON', 'EL CAJON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (537, 1, 'EL CAMPO', 'EL CAMPO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (538, 1, 'EL CENTRO', 'EL CENTRO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (539, 1, 'EL CERRITO', 'EL CERRITO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (540, 1, 'EL DORADO', 'EL DORADO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (541, 1, 'EL DORADO HILLS', 'EL DORADO HILLS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (542, 1, 'EL DORADO SPRINGS', 'EL DORADO SPRINGS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (543, 1, 'EL MIRAGE', 'EL MIRAGE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (544, 1, 'EL MONTE', 'EL MONTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (545, 1, 'EL NIDO', 'EL NIDO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (546, 1, 'EL PASO', 'EL PASO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (547, 1, 'EL PRADO', 'EL PRADO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (548, 1, 'EL RENO', 'EL RENO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (549, 1, 'EL RITO', 'EL RITO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (550, 1, 'EL SEGUNDO', 'EL SEGUNDO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (551, 1, 'EL SOBRANTE', 'EL SOBRANTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (552, 1, 'FALLS OF ROUGH', 'FALLS OF ROUGH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (553, 1, 'FOND DU LAC', 'FOND DU LAC', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (554, 1, 'FORKS OF SALMON', 'FORKS OF SALMON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (555, 1, 'FORT MC COY', 'FORT MC COY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (556, 1, 'FORT MCCOY', 'FORT MC COY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (557, 1, 'FORT MC KAVETT', 'FORT MC KAVETT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (558, 1, 'FORT MCKAVETT', 'FORT MC KAVETT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (559, 1, 'FT MITCHELL', 'FORT MITCHELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (560, 1, 'FORT MITCHELL', 'FORT MITCHELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (561, 1, 'FT MYER', 'FORT MYER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (562, 1, 'FORT MYER', 'FORT MYER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (563, 1, 'FT WARREN AFB', 'FORT WARREN AFB', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (564, 1, 'FORT WARREN AFB', 'FORT WARREN AFB', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (565, 1, 'HASTINGS ON HUDSON', 'HASTINGS ON HUDSON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (566, 1, 'HAVRE DE GRACE', 'HAVRE DE GRACE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (567, 1, 'HI HAT', 'HI HAT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (568, 1, 'HO HO KUS', 'HO HO KUS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (569, 1, 'HOWEY IN THE HILLS', 'HOWEY IN THE HILLS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (570, 1, 'HOWEY IN HILLS', 'HOWEY IN THE HILLS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (571, 1, 'ISLE LA MOTTE', 'ISLE LA MOTTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (572, 1, 'ISLE OF PALMS', 'ISLE OF PALMS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (573, 1, 'ISLE OF SPRINGS', 'ISLE OF SPRINGS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (574, 1, 'JAY EM', 'JAY EM', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (575, 1, 'KING OF PRUSSIA', 'KING OF PRUSSIA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (576, 1, 'LA BARGE', 'LA BARGE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (577, 1, 'LA BELLE', 'LA BELLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (578, 1, 'LA CANADA FLINTRIDGE', 'LA CANADA FLINTRIDGE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (579, 1, 'LA CENTER', 'LA CENTER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (580, 1, 'LA CONNER', 'LA CONNER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (581, 1, 'LA COSTE', 'LA COSTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (582, 1, 'LA CRESCENT', 'LA CRESCENT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (583, 1, 'LA CRESCENTA', 'LA CRESCENTA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (584, 1, 'LA CROSSE', 'LA CROSSE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (585, 1, 'LA FARGE', 'LA FARGE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (586, 1, 'LA FARGEVILLE', 'LA FARGEVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (587, 1, 'LA FAYETTE', 'LA FAYETTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (588, 1, 'LA FERIA', 'LA FERIA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (589, 1, 'LA FOLLETTE', 'LA FOLLETTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (590, 1, 'LA FONTAINE', 'LA FONTAINE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (591, 1, 'LA GRANDE', 'LA GRANDE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (592, 1, 'LA GRANGE', 'LA GRANGE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (593, 1, 'LA GRANGE PARK', 'LA GRANGE PARK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (594, 1, 'LA HABRA', 'LA HABRA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (595, 1, 'LA HARPE', 'LA HARPE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (596, 1, 'LA HONDA', 'LA HONDA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (597, 1, 'LA JARA', 'LA JARA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (598, 1, 'LA JOLLA', 'LA JOLLA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (599, 1, 'LA JOSE', 'LA JOSE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (600, 1, 'LA JOYA', 'LA JOYA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (601, 1, 'LA JUNTA', 'LA JUNTA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (602, 1, 'LA LOMA', 'LA LOMA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (603, 1, 'LA LUZ', 'LA LUZ', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (604, 1, 'LA MADERA', 'LA MADERA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (605, 1, 'LA MARQUE', 'LA MARQUE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (606, 1, 'LA MESA', 'LA MESA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (607, 1, 'LA MIRADA', 'LA MIRADA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (608, 1, 'LA MOILLE', 'LA MOILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (609, 1, 'LA MONTE', 'LA MONTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (610, 1, 'LA MOTTE', 'LA MOTTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (611, 1, 'LA PALMA', 'LA PALMA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (612, 1, 'LA PINE', 'LA PINE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (613, 1, 'LA PLACE', 'LA PLACE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (614, 1, 'LA PLATA', 'LA PLATA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (615, 1, 'LA PORTE', 'LA PORTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (616, 1, 'LA PORTE CITY', 'LA PORTE CITY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (617, 1, 'LA PRAIRIE', 'LA PRAIRIE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (618, 1, 'LA PUENTE', 'LA PUENTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (619, 1, 'LA QUINTA', 'LA QUINTA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (620, 1, 'LA RUE', 'LA RUE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (621, 1, 'LA RUSSELL', 'LA RUSSELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (622, 1, 'LA SALLE', 'LA SALLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (623, 1, 'LA VALLE', 'LA VALLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (624, 1, 'LA VERGNE', 'LA VERGNE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (625, 1, 'LA VERKIN', 'LA VERKIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (626, 1, 'LA VERNE', 'LA VERNE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (627, 1, 'LA VERNIA', 'LA VERNIA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (628, 1, 'LA VETA', 'LA VETA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (629, 1, 'LA VISTA', 'LA VISTA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (630, 1, 'LAC DU FLAMBEAU', 'LAC DU FLAMBEAU', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (631, 1, 'LAKE IN THE HILLS', 'LAKE IN THE HILLS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (632, 1, 'LAKE IN HILLS', 'LAKE IN THE HILLS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (633, 1, 'LE CENTER', 'LE CENTER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (634, 1, 'LE CLAIRE', 'LE CLAIRE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (635, 1, 'LE GRAND', 'LE GRAND', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (636, 1, 'LE MARS', 'LE MARS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (637, 1, 'LE RAYSVILLE', 'LE RAYSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (638, 1, 'LE ROY', 'LE ROY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (639, 1, 'LE SUEUR', 'LE SUEUR', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (640, 1, 'LE VERNE', 'LU VERNE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (641, 1, 'LU VERNE', 'LU VERNE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (642, 1, 'MARINE ON SAINT CROIX', 'MARINE ON SAINT CROIX', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (643, 1, 'MC ADENVILLE', 'MC ADENVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (644, 1, 'MCADENVILLE', 'MC ADENVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (645, 1, 'MC ALISTER', 'MC ALISTER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (646, 1, 'MCALISTER', 'MC ALISTER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (647, 1, 'MC ALISTERVILLE', 'MC ALISTERVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (648, 1, 'MCALISTERVILLE', 'MC ALISTERVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (649, 1, 'MC ALPIN', 'MC ALPIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (650, 1, 'MCALPIN', 'MC ALPIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (651, 1, 'MC ANDREWS', 'MC ANDREWS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (652, 1, 'MCANDREWS', 'MC ANDREWS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (653, 1, 'MC ARTHUR', 'MC ARTHUR', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (654, 1, 'MCARTHUR', 'MC ARTHUR', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (655, 1, 'MC BAIN', 'MC BAIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (656, 1, 'MCBAIN', 'MC BAIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (657, 1, 'MC BEE', 'MC BEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (658, 1, 'MCBEE', 'MC BEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (659, 1, 'MC CALL CREEK', 'MC CALL CREEK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (660, 1, 'MCCALL CREEK', 'MC CALL CREEK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (661, 1, 'MC CALLA', 'MC CALLA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (662, 1, 'MCCALLA', 'MC CALLA', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (663, 1, 'MC CALLSBURG', 'MC CALLSBURG', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (664, 1, 'MCCALLSBURG', 'MC CALLSBURG', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (665, 1, 'MC CAMEY', 'MC CAMEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (666, 1, 'MCCAMEY', 'MC CAMEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (667, 1, 'MC CARLEY', 'MC CARLEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (668, 1, 'MCCARLEY', 'MC CARLEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (669, 1, 'MC CARR', 'MC CARR', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (670, 1, 'MCCARR', 'MC CARR', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (671, 1, 'MC CASKILL', 'MC CASKILL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (672, 1, 'MCCASKILL', 'MC CASKILL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (673, 1, 'MC CAULLEY', 'MC CAULLEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (674, 1, 'MCCAULLEY', 'MC CAULLEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (675, 1, 'MC CAYSVILLE', 'MC CAYSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (676, 1, 'MCCAYSVILLE', 'MC CAYSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (677, 1, 'MC CLAVE', 'MC CLAVE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (678, 1, 'MCCLAVE', 'MC CLAVE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (679, 1, 'MC CLELLAND', 'MC CLELLAND', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (680, 1, 'MCCLELLAND', 'MC CLELLAND', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (681, 1, 'MC CLELLANDTOWN', 'MC CLELLANDTOWN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (682, 1, 'MCCLELLANDTOWN', 'MC CLELLANDTOWN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (683, 1, 'MC CLELLANVILLE', 'MC CLELLANVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (684, 1, 'MCCLELLANVILLE', 'MC CLELLANVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (685, 1, 'MC CLURE', 'MC CLURE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (686, 1, 'MCCLURE', 'MC CLURE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (687, 1, 'MC CLURG', 'MC CLURG', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (688, 1, 'MCCLURG', 'MC CLURG', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (689, 1, 'MC COLL', 'MC COLL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (690, 1, 'MCCOLL', 'MC COLL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (691, 1, 'MC COMB', 'MC COMB', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (692, 1, 'MCCOMB', 'MC COMB', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (693, 1, 'MC CONNELL', 'MC CONNELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (694, 1, 'MCCONNELL', 'MC CONNELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (695, 1, 'MC CONNELLS', 'MC CONNELLS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (696, 1, 'MCCONNELLS', 'MC CONNELLS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (697, 1, 'MC CONNELLSBURG', 'MC CONNELLSBURG', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (698, 1, 'MCCONNELLSBURG', 'MC CONNELLSBURG', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (699, 1, 'MC COOK', 'MC COOK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (700, 1, 'MCCOOK', 'MC COOK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (701, 1, 'MC COOL', 'MC COOL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (702, 1, 'MCCOOL', 'MC COOL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (703, 1, 'MC COOL JUNCTION', 'MC COOL JUNCTION', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (704, 1, 'MCCOOL JUNCTION', 'MC COOL JUNCTION', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (705, 1, 'MC CORDSVILLE', 'MC CORDSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (706, 1, 'MCCORDSVILLE', 'MC CORDSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (707, 1, 'MC CORMICK', 'MC CORMICK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (708, 1, 'MCCORMICK', 'MC CORMICK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (709, 1, 'MC COY', 'MC COY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (710, 1, 'MCCOY', 'MC COY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (711, 1, 'MC CRACKEN', 'MC CRACKEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (712, 1, 'MCCRACKEN', 'MC CRACKEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (713, 1, 'MC CRORY', 'MC CRORY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (714, 1, 'MCCRORY', 'MC CRORY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (715, 1, 'MC CUNE', 'MC CUNE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (716, 1, 'MCCUNE', 'MC CUNE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (717, 1, 'MC CUTCHENVILLE', 'MC CUTCHENVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (718, 1, 'MCCUTCHENVILLE', 'MC CUTCHENVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (719, 1, 'MC DADE', 'MC DADE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (720, 1, 'MCDADE', 'MC DADE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (721, 1, 'MC DANIELS', 'MC DANIELS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (722, 1, 'MCDANIELS', 'MC DANIELS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (723, 1, 'MC DAVID', 'MC DAVID', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (724, 1, 'MCDAVID', 'MC DAVID', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (725, 1, 'MC DERMOTT', 'MC DERMOTT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (726, 1, 'MCDERMOTT', 'MC DERMOTT', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (727, 1, 'MC DONALD', 'MC DONALD', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (728, 1, 'MCDONALD', 'MC DONALD', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (729, 1, 'MC DONOUGH', 'MC DONOUGH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (730, 1, 'MCDONOUGH', 'MC DONOUGH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (731, 1, 'MC DOWELL', 'MC DOWELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (732, 1, 'MCDOWELL', 'MC DOWELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (733, 1, 'MC EWEN', 'MC EWEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (734, 1, 'MCEWEN', 'MC EWEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (735, 1, 'MC FALL', 'MC FALL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (736, 1, 'MCFALL', 'MC FALL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (737, 1, 'MC FARLAND', 'MC FARLAND', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (738, 1, 'MCFARLAND', 'MC FARLAND', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (739, 1, 'MC GAHEYSVILLE', 'MC GAHEYSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (740, 1, 'MCGAHEYSVILLE', 'MC GAHEYSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (741, 1, 'MC GEE', 'MC GEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (742, 1, 'MCGEE', 'MC GEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (743, 1, 'MC GEHEE', 'MC GEHEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (744, 1, 'MCGEHEE', 'MC GEHEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (745, 1, 'MC GRADY', 'MC GRADY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (746, 1, 'MCGRADY', 'MC GRADY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (747, 1, 'MC GRATH', 'MC GRATH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (748, 1, 'MCGRATH', 'MC GRATH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (749, 1, 'MC GRAW', 'MC GRAW', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (750, 1, 'MCGRAW', 'MC GRAW', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (751, 1, 'MC GREGOR', 'MC GREGOR', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (752, 1, 'MCGREGOR', 'MC GREGOR', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (753, 1, 'MC HENRY', 'MC HENRY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (754, 1, 'MCHENRY', 'MC HENRY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (755, 1, 'MC INTIRE', 'MC INTIRE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (756, 1, 'MCINTIRE', 'MC INTIRE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (757, 1, 'MC INTOSH', 'MC INTOSH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (758, 1, 'MCINTOSH', 'MC INTOSH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (759, 1, 'MC INTYRE', 'MC INTYRE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (760, 1, 'MCINTYRE', 'MC INTYRE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (761, 1, 'MC KEAN', 'MC KEAN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (762, 1, 'MCKEAN', 'MC KEAN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (763, 1, 'MC KEE', 'MC KEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (764, 1, 'MCKEE', 'MC KEE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (765, 1, 'MC KEES ROCKS', 'MC KEES ROCKS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (766, 1, 'MCKEES ROCKS', 'MC KEES ROCKS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (767, 1, 'MC KENNEY', 'MC KENNEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (768, 1, 'MCKENNEY', 'MC KENNEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (769, 1, 'MC KENZIE', 'MC KENZIE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (770, 1, 'MCKENZIE', 'MC KENZIE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (771, 1, 'MC KITTRICK', 'MC KITTRICK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (772, 1, 'MCKITTRICK', 'MC KITTRICK', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (773, 1, 'MC LAIN', 'MC LAIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (774, 1, 'MCLAIN', 'MC LAIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (775, 1, 'MC LAUGHLIN', 'MC LAUGHLIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (776, 1, 'MCLAUGHLIN', 'MC LAUGHLIN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (777, 1, 'MC LEAN', 'MC LEAN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (778, 1, 'MCLEAN', 'MC LEAN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (779, 1, 'MC LEANSBORO', 'MC LEANSBORO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (780, 1, 'MCLEANSBORO', 'MC LEANSBORO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (781, 1, 'MC LEANSVILLE', 'MC LEANSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (782, 1, 'MCLEANSVILLE', 'MC LEANSVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (783, 1, 'MC LEOD', 'MC LEOD', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (784, 1, 'MCLEOD', 'MC LEOD', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (785, 1, 'MC LOUTH', 'MC LOUTH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (786, 1, 'MCLOUTH', 'MC LOUTH', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (787, 1, 'MC MILLAN', 'MC MILLAN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (788, 1, 'MCMILLAN', 'MC MILLAN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (789, 1, 'MC MINNVILLE', 'MC MINNVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (790, 1, 'MCMINNVILLE', 'MC MINNVILLE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (791, 1, 'MC NABB', 'MC NABB', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (792, 1, 'MCNABB', 'MC NABB', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (793, 1, 'MC NEAL', 'MC NEAL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (794, 1, 'MCNEAL', 'MC NEAL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (795, 1, 'MC NEIL', 'MC NEIL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (796, 1, 'MCNEIL', 'MC NEIL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (797, 1, 'MC QUEENEY', 'MC QUEENEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (798, 1, 'MCQUEENEY', 'MC QUEENEY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (799, 1, 'MC RAE', 'MC RAE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (800, 1, 'MCRAE', 'MC RAE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (801, 1, 'MC ROBERTS', 'MC ROBERTS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (802, 1, 'MCROBERTS', 'MC ROBERTS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (803, 1, 'MC SHERRYSTOWN', 'MC SHERRYSTOWN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (804, 1, 'MCSHERRYSTOWN', 'MC SHERRYSTOWN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (805, 1, 'MC VEYTOWN', 'MC VEYTOWN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (806, 1, 'MCVEYTOWN', 'MC VEYTOWN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (807, 1, 'MEADOWS OF DAN', 'MEADOWS OF DAN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (808, 1, 'MI WUK VILLAGE', 'MI WUK VILLAGE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (809, 1, 'MOUTH OF WILSON', 'MOUTH OF WILSON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (810, 1, 'MT ZION', 'MOUNT ZION', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (811, 1, 'MOUNT ZION', 'MOUNT ZION', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (812, 1, 'PE ELL', 'PE ELL', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (813, 1, 'POINT OF ROCKS', 'POINT OF ROCKS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (814, 1, 'PONCE DE LEON', 'PONCE DE LEON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (815, 1, 'PRAIRIE DU CHIEN', 'PRAIRIE DU CHIEN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (816, 1, 'PRAIRIE DU ROCHER', 'PRAIRIE DU ROCHER', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (817, 1, 'PRAIRIE DU SAC', 'PRAIRIE DU SAC', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (818, 1, 'RANCHO SANTA FE', 'RANCHO SANTA FE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (819, 1, 'RANCHOS DE TAOS', 'RANCHOS DE TAOS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (820, 1, 'SAINT JO', 'SAINT JO', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (821, 1, 'SANTA FE', 'SANTA FE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (822, 1, 'SANTA FE SPRINGS', 'SANTA FE SPRINGS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (823, 1, 'S EL MONTE', 'SOUTH EL MONTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (824, 1, 'SOUTH EL MONTE', 'SOUTH EL MONTE', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (825, 1, 'SAINT COLUMBANS', 'SAINT COLUMBANS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (826, 1, 'ST COLUMBANS', 'SAINT COLUMBANS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (827, 1, 'SAINT JOHN', 'SAINT JOHN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (828, 1, 'ST JOHN', 'SAINT JOHN', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (829, 1, 'SAINT THOMAS', 'SAINT THOMAS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (830, 1, 'ST THOMAS', 'SAINT THOMAS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (831, 1, 'TOWNSHIP OF WASHINGTON', 'TOWNSHIP OF WASHINGTON', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (832, 1, 'TRUTH OR CONSEQUENCES', 'TRUTH OR CONSEQUENCES', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (833, 1, 'TY TY', 'TY TY', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (834, 1, 'VILLAGE OF NAGOG WOODS', 'VILLAGE OF NAGOG WOODS', 10, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (7, 1, 'AK', 'AK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (9, 3, 'AK', 'AK', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (10, 1, 'AL', 'AL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (12, 3, 'AL', 'AL', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (13, 1, 'ALA', 'AL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (15, 3, 'ALA', 'AL', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (16, 1, 'ALABAMA', 'AL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (18, 1, 'ALASKA', 'AK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (22, 1, 'AR', 'AR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (24, 3, 'AR', 'AR', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (25, 1, 'ARIZ', 'AZ', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (27, 3, 'ARIZ', 'AZ', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (28, 1, 'ARIZONA', 'AZ', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (30, 1, 'ARK', 'AR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (32, 3, 'ARK', 'AR', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (33, 1, 'ARKANSAS', 'AR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (35, 1, 'AZ', 'AZ', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (37, 3, 'AZ', 'AZ', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (46, 1, 'CA', 'CA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (48, 3, 'CA', 'CA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (51, 1, 'CALIF', 'CA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (53, 3, 'CALIF', 'CA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (54, 1, 'CALIFORNIA', 'CA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (58, 1, 'CO', 'CO', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (60, 3, 'CO', 'CO', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (63, 1, 'COLORADO', 'CO', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (65, 1, 'CONN', 'CT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (67, 3, 'CONN', 'CT', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (68, 1, 'CONNECTICUT', 'CT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (70, 1, 'CT', 'CT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (72, 3, 'CT', 'CT', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (73, 1, 'DC', 'DC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (75, 3, 'DC', 'DC', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (76, 1, 'DE', 'DE', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (78, 1, 'DEL', 'DE', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (80, 3, 'DEL', 'DE', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (81, 1, 'DELAWARE', 'DE', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (83, 1, 'DC', 'DC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (86, 1, 'FL', 'FL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (88, 3, 'FL', 'FL', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (89, 1, 'FLA', 'FL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (91, 3, 'FLA', 'FL', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (92, 1, 'FLORIDA', 'FL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (95, 1, 'GA', 'GA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (97, 3, 'GA', 'GA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (98, 1, 'GEORGIA', 'GA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (100, 1, 'HAWAII', 'HI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (102, 1, 'HI', 'HI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (104, 3, 'HI', 'HI', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (105, 1, 'IA', 'IA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (107, 3, 'IA', 'IA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (108, 1, 'ID', 'ID', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (110, 3, 'ID', 'ID', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (111, 1, 'IDAHO', 'ID', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (113, 1, 'IL', 'IL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (115, 3, 'IL', 'IL', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (118, 1, 'ILL', 'IL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (120, 3, 'ILL', 'IL', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (121, 1, 'ILLINOIS', 'IL', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (123, 1, 'IN', 'IN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (125, 3, 'IN', 'IN', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (126, 1, 'IND', 'IN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (128, 2, 'IND', 'IN', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (129, 1, 'INDIANA', 'IN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (131, 1, 'IOWA', 'IA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (133, 1, 'KANSAS', 'KS', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (135, 1, 'KENT', 'KY', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (137, 3, 'KENT', 'KY', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (138, 1, 'KENTUCKY', 'KY', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (140, 1, 'KS', 'KS', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (142, 3, 'KS', 'KS', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (143, 1, 'KY', 'KY', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (145, 3, 'KY', 'KY', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (146, 1, 'LA', 'LA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (148, 3, 'LA', 'LA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (151, 1, 'LOUISIANA', 'LA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (153, 1, 'MA', 'MA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (155, 3, 'MA', 'MA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (157, 1, 'MAINE', 'ME', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (161, 1, 'MARYLAND', 'MD', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (163, 1, 'MASS', 'MA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (165, 3, 'MASS', 'MA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (166, 1, 'MASSACHUSETTS', 'MA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (171, 1, 'MD', 'MD', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (173, 3, 'MD', 'MD', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (174, 1, 'ME', 'ME', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (176, 3, 'ME', 'ME', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (177, 1, 'MI', 'MI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (179, 3, 'MI', 'MI', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (180, 1, 'MICH', 'MI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (182, 3, 'MICH', 'MI', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (183, 1, 'MICHIGAN', 'MI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (185, 1, 'MINN', 'MN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (187, 3, 'MINN', 'MN', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (188, 1, 'MINNESOTA', 'MN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (190, 1, 'MISSISSIPPI', 'MS', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (192, 1, 'MISSOURI', 'MO', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (194, 1, 'MN', 'MN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (196, 3, 'MN', 'MN', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (197, 1, 'MO', 'MO', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (199, 3, 'MO', 'MO', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (200, 1, 'MONT', 'MT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (202, 3, 'MONT', 'MT', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (203, 1, 'MONTANA', 'MT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (205, 1, 'MT', 'MT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (207, 3, 'MT', 'MT', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (208, 1, 'MS', 'MS', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (210, 3, 'MS', 'MS', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (211, 1, 'N CAROLINA', 'NC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (213, 1, 'N DAKOTA', 'ND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (218, 1, 'NC', 'NC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (220, 3, 'NC', 'NC', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (221, 1, 'ND', 'ND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (223, 3, 'ND', 'ND', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (224, 1, 'NE', 'NE', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (226, 3, 'NE', 'NE', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (227, 1, 'NEB', 'NE', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (229, 3, 'NEB', 'NE', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (230, 1, 'NEBRASKA', 'NE', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (232, 1, 'NEV', 'NV', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (234, 3, 'NEV', 'NV', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (235, 1, 'NEVADA', 'NV', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (239, 1, 'NEW HAMPSHIRE', 'NH', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (241, 1, 'NEW JERSEY', 'NJ', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (243, 1, 'NEW MEXICO', 'NM', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (245, 1, 'NEW YORK', 'NY', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (252, 1, 'NH', 'NH', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (254, 3, 'NH', 'NH', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (255, 1, 'NJ', 'NJ', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (257, 3, 'NJ', 'NJ', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (261, 1, 'NM', 'NM', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (263, 3, 'NM', 'NM', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (264, 1, 'NORTH CAROLINA', 'NC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (266, 1, 'NORTH DAKOTA', 'ND', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (288, 1, 'NV', 'NV', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (290, 3, 'NV', 'NV', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (291, 1, 'NY', 'NY', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (293, 3, 'NY', 'NY', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (294, 1, 'OH', 'OH', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (296, 3, 'OH', 'OH', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (297, 1, 'OHIO', 'OH', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (299, 1, 'OK', 'OK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (301, 3, 'OK', 'OK', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (302, 1, 'OKLA', 'OK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (304, 3, 'OKLA', 'OK', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (305, 1, 'OKLAHOMA', 'OK', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (315, 1, 'OR', 'OR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (317, 3, 'OR', 'OR', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (318, 1, 'ORE', 'OR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (320, 3, 'ORE', 'OR', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (321, 1, 'OREGON', 'OR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (323, 1, 'PA', 'PA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (325, 3, 'PA', 'PA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (332, 1, 'PENN', 'PA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (334, 3, 'PENN', 'PA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (335, 1, 'PENNA', 'PA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (337, 3, 'PENNA', 'PA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (338, 1, 'PENNSYLVANIA', 'PA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (343, 1, 'PR', 'PR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (345, 3, 'PR', 'PR', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (348, 1, 'PUERTO RICO', 'PR', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (355, 1, 'RHODE ISLAND', 'RI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (357, 1, 'RI', 'RI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (359, 3, 'RI', 'RI', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (360, 1, 'S CAROLINA', 'SC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (362, 1, 'S DAKOTA', 'SD', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (368, 1, 'SC', 'SC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (370, 3, 'SC', 'SC', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (371, 1, 'SD', 'SD', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (373, 3, 'SD', 'SD', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (377, 1, 'SOUTH CAROLINA', 'SC', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (379, 1, 'SOUTH DAKOTA', 'SD', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (381, 1, 'TENN', 'TN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (383, 3, 'TENN', 'TN', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (384, 1, 'TENNESSEE', 'TN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (390, 1, 'TEX', 'TX', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (392, 3, 'TEX', 'TX', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (393, 1, 'TEXAS', 'TX', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (395, 1, 'TN', 'TN', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (397, 3, 'TN', 'TN', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (398, 1, 'TX', 'TX', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (400, 3, 'TX', 'TX', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (408, 1, 'UT', 'UT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (410, 3, 'UT', 'UT', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (411, 1, 'UTAH', 'UT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (413, 1, 'VA', 'VA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (415, 3, 'VA', 'VA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (416, 1, 'VERMONT', 'VT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (418, 1, 'VIRGINIA', 'VA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (420, 1, 'VT', 'VT', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (422, 3, 'VT', 'VT', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (423, 1, 'W VIRGINIA', 'WV', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (425, 1, 'WA', 'WA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (427, 3, 'WA', 'WA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (428, 1, 'WASH', 'WA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (430, 3, 'WASH', 'WA', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (431, 1, 'WASHINGTON', 'WA', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (433, 1, 'WEST VIRGINIA', 'WV', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (435, 1, 'WI', 'WI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (437, 3, 'WI', 'WI', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (438, 1, 'WISC', 'WI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (440, 3, 'WISC', 'WI', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (441, 1, 'WISCONSIN', 'WI', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (443, 1, 'WV', 'WV', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (445, 3, 'WV', 'WV', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (446, 1, 'WY', 'WY', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (448, 3, 'WY', 'WY', 6, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (449, 1, 'WYOMING', 'WY', 11, false); INSERT INTO pagc_gaz (id, seq, word, stdword, token, is_custom) VALUES (835, 1, 'ST LOUIS', 'SAINT LOUIS', 7, false); SELECT pg_catalog.setval('pagc_gaz_id_seq', (SELECT greatest((SELECT MAX(id) FROM pagc_gaz),50000)), true); -- start pagc_lex -- INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2934, 1, 'BAY STATE', 'BAY STATE', 5, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2389, 2, 'STAT', 'STA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2382, 2, 'STA', 'STA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2403, 2, 'STATION', 'STA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2407, 2, 'STATN', 'STA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2394, 1, 'STATE HIGHWAY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2368, 1, 'ST HIGHWAY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2393, 1, 'STATE HI', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2369, 1, 'ST HWY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2414, 1, 'STHWY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2415, 1, 'STHY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2367, 1, 'ST HI', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2413, 1, 'STHW', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2370, 1, 'ST HY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2396, 1, 'STATE HY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2373, 1, 'ST RD', 'STATE RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (212, 2, 'AND', 'AND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2395, 1, 'STATE HWY', 'STATE HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (413, 2, 'BYP', 'BYP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2397, 1, 'STATE RD', 'STATE RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2374, 1, 'ST ROAD', 'STATE RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1561, 2, 'MANORS', 'MANOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2398, 1, 'STATE ROAD', 'STATE RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2377, 1, 'ST RT', 'STATE RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1937, 1, 'PR ROUTE', 'STATE RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2399, 1, 'STATE ROUTE', 'STATE RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2375, 1, 'ST ROUTE', 'STATE RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2401, 1, 'STATE RTE', 'STATE RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2400, 1, 'STATE RT', 'STATE RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2379, 1, 'ST RTE', 'STATE RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2493, 1, 'TERR', 'TER', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2488, 1, 'TER', 'TER', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2555, 1, 'THRUWAY', 'TRWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2556, 1, 'THWY', 'TRWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2554, 1, 'THROUGHWAY', 'TRWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2599, 2, 'TPK', 'TPKE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2683, 2, 'TURNPK', 'TPKE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2681, 2, 'TURNPIKE', 'TPKE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2601, 2, 'TPKE', 'TPKE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2679, 2, 'TURN', 'TPKE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2496, 1, 'TFWY', 'TRFY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2616, 1, 'TRAIL', 'TRL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2631, 1, 'TRAILS', 'TRL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2559, 1, 'TL', 'TRL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2674, 1, 'TUNEL', 'TUNL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2675, 1, 'TUNL', 'TUNL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2673, 1, 'TUN', 'TUNL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2676, 1, 'TUNNEL', 'TUNL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2569, 1, 'TNPKE', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2568, 1, 'TNPK', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2682, 1, 'TURNPK', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2680, 1, 'TURNPIKE', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2678, 1, 'TURN', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2665, 1, 'TRNPK', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2600, 1, 'TPKE', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2598, 1, 'TPK', 'TPKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2768, 1, 'U S HY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2782, 1, 'UNITED STATES HWY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2764, 1, 'U S HGWY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2765, 1, 'U S HIGHWAY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2781, 1, 'UNITED STATES HIGHWAY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2807, 1, 'US HGWY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2808, 1, 'US HIGHWAY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2809, 1, 'US HIWAY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2810, 1, 'US HWY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2811, 1, 'US HY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2819, 1, 'USHW', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2820, 1, 'USHWY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2821, 1, 'USHY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2824, 1, 'USRT', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2825, 1, 'USRTE', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2816, 1, 'US RTE', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2814, 1, 'US ROUTE', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2770, 1, 'U S RT', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2805, 1, 'US', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2815, 1, 'US RT', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2763, 1, 'U S', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2769, 1, 'U S ROUTE', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2771, 1, 'U S RTE', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2823, 1, 'USROUTE', 'US RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2878, 2, 'VW', 'VW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2869, 1, 'VLGE', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2866, 1, 'VLG', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2865, 2, 'VL', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2855, 1, 'VILLIAGE', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2854, 1, 'VILLGE', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2851, 1, 'VILLG', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2846, 1, 'VILLAGE', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2843, 1, 'VILLAG', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2861, 2, 'VISTA', 'VIS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2859, 2, 'VIS', 'VIS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2856, 2, 'VILLIAGE', 'VLG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2838, 2, 'VILL', 'VLG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2847, 2, 'VILLAGE', 'VLG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2844, 2, 'VILLAG', 'VLG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2870, 2, 'VLGE', 'VLG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2852, 2, 'VILLG', 'VLG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2867, 2, 'VLG', 'VLG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2881, 1, 'WALK', 'WALK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2903, 1, 'WK', 'WALK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2884, 1, 'WALL', 'WALL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2914, 1, 'WY', 'WAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2915, 4, 'WY', 'WAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2888, 1, 'WAY', 'WAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (691, 2, 'CROSSING', 'XING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2918, 2, 'XING', 'XING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (692, 1, 'CROSSINGS', 'XING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (701, 1, 'CRSGS', 'XING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (704, 2, 'CRSSNG', 'XING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (700, 2, 'CRSG', 'XING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (688, 1, 'CROSS ROAD', 'XRD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1762, 1, 'NORTH', 'N', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1764, 1, 'NORTH EAST', 'NE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1766, 1, 'NORTH WEST', 'NW', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1769, 1, 'NORTHEAST', 'NE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1771, 1, 'NTH', 'N', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1774, 1, 'NW', 'NW', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2931, 1, 'SERVICE DR', 'SVC DR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2932, 1, 'SERVICE DRIVE', 'SVC DR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2933, 1, 'SVC DR', 'SVC DR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2392, 2, 'STATE', 'STATE RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (59, 1, '20MI', 'TWENTY MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (60, 1, '21ST', '21', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (61, 2, '21ST', '21', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (62, 1, '22ND', '22', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (63, 2, '22ND', '22', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (64, 1, '23 MI', 'TWENTY THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (65, 1, '23 MILE', 'TWENTY THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (66, 1, '23MI', 'TWENTY THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (67, 1, '23RD', '23', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (68, 2, '23RD', '23', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (69, 1, '2MI', 'TWO MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2767, 1, 'U S HWY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (70, 1, '3 / 4', '3/4', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (71, 1, '3 / 8', '3/8', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (72, 1, '3 MI', 'THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (73, 1, '3 MILE', 'THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (75, 1, '3/8', '3/8', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (76, 1, '31ST', '31', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (77, 2, '31ST', '31', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (78, 1, '33RD', '33', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (79, 2, '33RD', '33', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (80, 1, '3MI', 'THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (81, 1, '3RD', '3', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (82, 2, '3RD', '3', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (83, 1, '4 CO', 'FOUR CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (84, 1, '4 CORNERS', 'FOUR CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (85, 1, '4 FG', 'FOUR FLAGS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (86, 1, '4 FLAGS', 'FOUR FLAGS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (87, 1, '4 MI', 'FOUR MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (88, 1, '4 MILE', 'FOUR MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (89, 1, '4 SEASONS', 'FOUR SEASONS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (90, 1, '4 SN', 'FOUR SEASONS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (91, 1, '41ST', '41', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (92, 2, '41ST', '41', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (93, 1, '43RD', '43', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (94, 2, '43RD', '43', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (95, 1, '4MI', 'FOUR MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (96, 1, '4WD', 'FOUR WHEEL DRIVE TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (97, 1, '4WD TRAIL', 'FOUR WHEEL DRIVE TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (98, 1, '4WD TRL', 'FOUR WHEEL DRIVE TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (99, 1, '5 CEDARS', 'FIVE CEDARS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (100, 1, '5 CO', 'FIVE CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (101, 1, '5 CORNERS', 'FIVE CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (102, 1, '5 MI', 'FIVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (103, 1, '5 MILE', 'FIVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (104, 1, '5 POINTS', 'FIVE POINTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (105, 1, '5 PT', 'FIVE POINTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (106, 1, '5 TO', 'FIVE TOWN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (107, 1, '51ST', '51', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (108, 2, '51ST', '51', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (109, 1, '53RD', '53', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (110, 2, '53RD', '53', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (111, 1, '5MI', 'FIVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (112, 1, '6 FG', 'SIX FLAGS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (113, 1, '6 FLAGS', 'SIX FLAGS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (114, 1, '6 MI', 'SIX MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (115, 1, '6 MILE', 'SIX MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (116, 1, '61ST', '61', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (117, 2, '61ST', '61', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (118, 1, '63RD', '63', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (119, 2, '63RD', '63', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (120, 1, '6MI', 'SIX MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (121, 1, '7 CO', 'SEVEN CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (122, 2, '7 CO', 'SEVEN CORNERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (123, 1, '7 CORNERS', 'SEVEN CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (124, 2, '7 CORNERS', 'SEVEN CORNERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (125, 1, '7 MI', 'SEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (126, 1, '7 MILE', 'SEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (127, 1, '71ST', '71', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (128, 2, '71ST', '71', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (129, 1, '73RD', '73', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (130, 2, '73RD', '73', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (131, 1, '7MI', 'SEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (132, 1, '8 MI', 'EIGHT MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (133, 1, '8 MILE', 'EIGHT MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (134, 1, '81ST', '81', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (135, 2, '81ST', '81', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (136, 1, '83RD', '83', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (137, 2, '83RD', '83', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (138, 1, '8MI', 'EIGHT MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (139, 1, '9 MI', 'NINE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (140, 1, '9 MILE', 'NINE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (141, 1, '91ST', '91', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (142, 2, '91ST', '91', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (143, 1, '93RD', '93', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (144, 2, '93RD', '93', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (145, 1, '9MI', 'NINE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (146, 1, 'A', 'A', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (147, 2, 'A', 'A', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (148, 1, 'A F B', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (149, 2, 'A F B', 'AIR FORCE BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (150, 1, 'A F S', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (151, 2, 'A F S', 'AIR FORCE BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (152, 1, 'A LA DERECHA', 'A LA DERECHA', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (153, 4, 'AB', 'ABBEY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (154, 1, 'ABBEY', 'ABBEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (155, 2, 'ABBEY', 'ABBEY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (156, 1, 'AC', 'ACRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (157, 1, 'ACAD', 'ACADEMY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (158, 1, 'ACADE', 'ACADEMIA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (159, 1, 'ACADEMIA', 'ACADEMIA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (160, 1, 'ACADEMY', 'ACADEMY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (161, 1, 'ACCESS', 'ACCESS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (162, 1, 'ACR', 'ACRES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (163, 2, 'ACR', 'ACRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (164, 3, 'ACR', 'ACRES', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (165, 1, 'ACRES', 'ACRES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (166, 2, 'ACRES', 'ACRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (74, 1, '3/4', '3/4', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (167, 3, 'ACRES', 'ACRES', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (168, 1, 'ACRS', 'ACRES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (169, 2, 'ACRS', 'ACRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (170, 3, 'ACRS', 'ACRES', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (171, 1, 'ACUE', 'ACUEDUCTO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (172, 1, 'ACUED', 'ACUEDUCTO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (173, 1, 'ACUEDUCTO', 'ACUEDUCTO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (174, 1, 'AEROPUERTO', 'AEROPUERTO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (175, 2, 'AEROPUERTO', 'AEROPUERTO', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (176, 1, 'AFB', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (177, 2, 'AFB', 'AIR FORCE BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (178, 1, 'AFLD', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (179, 1, 'AFS', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (180, 2, 'AFS', 'AIR FORCE BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (181, 1, 'AIR FORCE BASE', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (182, 2, 'AIR FORCE BASE', 'AIR FORCE BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (183, 1, 'AIR FORCE STATION', 'AIR FORCE BASE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (184, 2, 'AIR FORCE STATION', 'AIR FORCE BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (185, 1, 'AIRFIELD', 'AIRPORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (186, 2, 'AIRFIELD', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (187, 1, 'AIRPARK', 'AIRPORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (188, 2, 'AIRPARK', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (189, 1, 'AIRPORT', 'AIRPORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (190, 2, 'AIRPORT', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (191, 1, 'AIRSTRIP', 'AIRPORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (192, 2, 'AIRSTRIP', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (193, 1, 'AIRSTRP', 'AIRPORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (194, 2, 'AIRSTRP', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (198, 1, 'ALC', 'ALCOVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (199, 1, 'ALD', 'A LA DERECHA', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (202, 2, 'ALLEY', 'ALLEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (204, 1, 'ALT', 'ALTERNATE', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (205, 1, 'ALTERNATE', 'ALTERNATE', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (206, 1, 'ALTO', 'ALTO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (207, 2, 'ALTO', 'ALTOS', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (208, 1, 'ALTOS', 'ALTOS', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (209, 2, 'ALTOS', 'ALTOS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (213, 1, 'ANEX', 'ANNEX', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (215, 1, 'ANNEX', 'ANNEX', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (217, 1, 'ANNX', 'ANNEX', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (219, 1, 'ANX', 'ANNEX', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (221, 1, 'AP', 'APARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (222, 1, 'APART', 'APARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (223, 1, 'APARTEMENT', 'APARTEMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (224, 1, 'APARTMENT', 'APARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (225, 1, 'APARTMENTS', 'APARTMENTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (226, 1, 'APARTADO', 'BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (227, 1, 'APO', 'APO', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (228, 1, 'APP', 'APARTEMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (229, 1, 'APPART', 'APARTEMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (230, 1, 'APPT', 'APARTEMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (231, 1, 'APRK', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (232, 1, 'APS', 'APARTMENTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (233, 1, 'APT', 'APARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (234, 1, 'APT NO', 'APARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (235, 1, 'APTMT', 'APARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (236, 1, 'APTS', 'APARTMENTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (237, 1, 'AR', 'ARRIERE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (242, 1, 'ARPT', 'AIRPORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (243, 2, 'ARPT', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (244, 1, 'ARPTO', 'AIRPORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (245, 2, 'ARPTO', 'AIRPORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (246, 1, 'ARRIERE', 'ARRIERE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (247, 1, 'ARROYO', 'ARROYO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (248, 1, 'ARRYO', 'ARROYO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (249, 1, 'AT', 'AT', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (250, 1, 'ATPS', 'AUTOPISTA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (251, 1, 'ATPTA', 'AUTOPISTA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (252, 1, 'ATTN', 'ATTENTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (253, 1, 'AU', 'AUTOROUTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (254, 2, 'AU', 'AU', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (255, 1, 'AUT', 'AUTOROUTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (256, 1, 'AUTO', 'AUTOPISTA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (257, 2, 'AUTO', 'AUTO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (258, 1, 'AUTOPISTA', 'AUTOPISTA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (259, 1, 'AUTOROUTE', 'AUTOROUTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (261, 2, 'AV', 'AVANT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (262, 1, 'AVA', 'AVENIDA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (263, 1, 'AVANT', 'AVANT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (266, 1, 'AVENIDA', 'AVENIDA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (200, 1, 'ALLEE', 'ALY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (203, 1, 'ALLY', 'ALY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (195, 1, 'AL', 'ALY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (201, 1, 'ALLEY', 'ALY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (210, 1, 'ALY', 'ALY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (238, 1, 'ARC', 'ARC', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (240, 1, 'ARCADE', 'ARC', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (260, 1, 'AV', 'AVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (269, 1, 'AVENUES', 'AVENUES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (270, 1, 'AVES', 'AVENUES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (273, 1, 'AVS', 'AVENUES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (274, 1, 'BA', 'BAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (275, 1, 'BAJO', 'BAJOS', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (276, 1, 'BAJOS', 'BAJOS', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (277, 1, 'BANK', 'BANK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (278, 1, 'BARRIO', 'BOROUGH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (279, 1, 'BASEMENT', 'BASEMENT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (280, 1, 'BASIN', 'BASIN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (281, 1, 'BASN', 'BASIN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (282, 1, 'BAY', 'BAY', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (283, 2, 'BAY', 'BAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (284, 3, 'BAY', 'BAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (285, 1, 'BAYOU', 'BAYOU', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (286, 1, 'BAZAAR', 'BAZAAR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (287, 1, 'BAZR', 'BAZAAR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (288, 1, 'BCH', 'BEACH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (291, 1, 'BDG', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (292, 2, 'BDG', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (293, 1, 'BDNG', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (294, 2, 'BDNG', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (295, 1, 'BDWY', 'BROADWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (297, 1, 'BEACH', 'BEACH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (299, 1, 'BEND', 'BEND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (301, 1, 'BETWEEN', 'BETWEEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (302, 1, 'BG', 'BURG', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (305, 1, 'BLD', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (306, 2, 'BLD', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (307, 1, 'BLDG', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (308, 2, 'BLDG', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (309, 1, 'BLDING', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (310, 2, 'BLDING', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (311, 1, 'BLDNG', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (312, 2, 'BLDNG', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (313, 1, 'BLF', 'BLUFF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (315, 1, 'BLG', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (316, 2, 'BLG', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (317, 1, 'BLUF', 'BLUFF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (318, 1, 'BLUFF', 'BLUFF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (322, 1, 'BLVR', 'BULEVAR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (323, 1, 'BND', 'BEND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (325, 1, 'BNK', 'BANK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (326, 1, 'BO', 'BOROUGH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (327, 2, 'BO', 'BOURG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (328, 1, 'BOITE', 'BOITE', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (329, 1, 'BOITE POSTALE', 'BOITE POSTALE', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (330, 1, 'BORO', 'BOROUGH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (331, 1, 'BOROUGH', 'BOROUGH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (333, 2, 'BOT', 'BOTTOM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (335, 2, 'BOTTM', 'BOTTOM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (337, 2, 'BOTTOM', 'BOTTOM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (341, 1, 'BOURG', 'BOURG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (342, 1, 'BOX', 'BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (343, 1, 'BOX NO', 'BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (346, 3, 'BP', 'BOITE POSTALE', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (347, 1, 'BR', 'BRANCH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (348, 1, 'BRANCH', 'BRANCH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (349, 1, 'BRDG', 'BRIDGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (350, 1, 'BRDGE', 'BRIDGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (351, 1, 'BRDWY', 'BROADWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (352, 1, 'BRG', 'BRIDGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (354, 1, 'BRIDGE', 'BRIDGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (355, 1, 'BRIDGES', 'BRIDGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (356, 1, 'BRK', 'BROOK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (357, 1, 'BROADWAY', 'BROADWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (358, 1, 'BROOK', 'BROOK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (359, 1, 'BRWY', 'BROADWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (360, 1, 'BSMNT', 'BASEMENT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (361, 1, 'BSMT', 'BASEMENT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (362, 1, 'BSPK', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (405, 1, 'BV', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (363, 1, 'BSRT', 'BUSINESS ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (364, 1, 'BSRTE', 'BUSINESS ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (365, 1, 'BST', 'BASEMENT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (366, 1, 'BTM', 'BOTTOM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (367, 1, 'BTWN', 'BETWEEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (368, 1, 'BUENA VISTA', 'BUENA VISTA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (369, 1, 'BUILD', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (370, 2, 'BUILD', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (371, 1, 'BUILDING', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (372, 2, 'BUILDING', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (373, 1, 'BUILDING NUMBER', '#', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (374, 1, 'BUILDNG', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (375, 2, 'BUILDNG', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (376, 1, 'BULDNG', 'BUILDING', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (377, 2, 'BULDNG', 'BUILDING', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (378, 1, 'BULEVAR', 'BULEVAR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (379, 1, 'BUR', 'BUREAU', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (380, 1, 'BUREAU', 'BUREAU', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (381, 2, 'BUREAU', 'BUREAU', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (382, 3, 'BUREAU', 'BUREAU', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (383, 1, 'BURG', 'BURG', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (384, 1, 'BUS', 'BUSINESS', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (385, 1, 'BUS CENTER', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (386, 1, 'BUS CENTR', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (387, 1, 'BUS CTR', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (388, 1, 'BUS PARK', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (389, 1, 'BUS PK', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (390, 1, 'BUSCENTER', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (391, 1, 'BUSCENTR', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (392, 1, 'BUSCTR', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (393, 1, 'BUSINESS', 'BUSINESS', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (394, 2, 'BUSINESS', 'BUSINESS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (395, 1, 'BUSINESS CENTER', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (396, 1, 'BUSINESS CENTR', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (397, 1, 'BUSINESS CTR', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (398, 1, 'BUSINESS PARK', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (271, 1, 'AVN', 'AVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (272, 1, 'AVNUE', 'AVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (267, 1, 'AVENU', 'AVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (268, 1, 'AVENUE', 'AVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (399, 1, 'BUSINESS PK', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (400, 1, 'BUSPARK', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (401, 1, 'BUSPK', 'BUSINESS PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (402, 1, 'BUSROUTE', 'BUSINESS ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (403, 1, 'BUSRT', 'BUSINESS ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (404, 1, 'BUSRTE', 'BUSINESS ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (406, 1, 'BX', 'BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (407, 1, 'BY', 'BYWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (408, 2, 'BY', 'BY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (411, 1, 'BY WAY', 'BYWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (422, 1, 'BYU', 'BAYOU', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (423, 1, 'BYWAY', 'BYWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (424, 1, 'C', 'C', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (425, 1, 'C / O', 'CARE OF', 9, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (426, 1, 'C D O', 'COMMERCIAL DEALERSHIP', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (427, 1, 'C F B', 'CANADIAN FORCES BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (428, 1, 'C M C', 'COMMUNITY MAIL CENTRE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (431, 1, 'C/O', 'CARE OF', 9, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (432, 1, 'CALLE', 'CALLE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (433, 1, 'CALLEJ', 'CALLEJON', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (434, 1, 'CALLEJA', 'CALLEJA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (435, 1, 'CALLEJO', 'CALLEJON', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (436, 1, 'CALLEJON', 'CALLEJON', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (437, 1, 'CALLER', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (439, 1, 'CAMINITO', 'CAMINITO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (441, 1, 'CAMP', 'CAMP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (442, 1, 'CAMPER PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (443, 1, 'CAMPER PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (444, 1, 'CAMPUS', 'CAMPUS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (445, 1, 'CAMPUS', 'CAMPUS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (446, 1, 'CANADIAN FORCES BASE', 'CANADIAN FORCES BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (447, 1, 'CANYON', 'CANYON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (448, 1, 'CANYN', 'CANYON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (449, 1, 'CAPE', 'CAPE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (451, 1, 'CARE OF', 'CARE OF', 9, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (452, 1, 'CARR', 'CARRETERA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (453, 1, 'CARRE', 'CARRE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (454, 2, 'CARRE', 'CARRE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (455, 1, 'CARREF', 'CARREFOUR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (456, 1, 'CARREFOUR', 'CARREFOUR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (457, 1, 'CARRETERA', 'CARRETERA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (458, 1, 'CARRT', 'CARRETERA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (460, 1, 'CC', 'CIRCUIT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (461, 1, 'CDN', 'CANADIAN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (462, 1, 'CDO', 'COMMERCIAL DEALERSHIP', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (463, 1, 'CDS', 'CUL DE SAC', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (473, 3, 'CENTER', 'CENTER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (477, 1, 'CENTRAL', 'CENTRAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (480, 3, 'CENTRE', 'CENTER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (484, 1, 'CERCLE', 'CERCLE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (485, 2, 'CERCLE', 'CERCLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (486, 1, 'CFB', 'CANADIAN FORCES BASE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (488, 1, 'CH', 'CHEMIN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (489, 2, 'CH', 'CHURCH', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (490, 1, 'CHASE', 'CHASE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (491, 2, 'CHASE', 'CHASE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (492, 1, 'CHEMIN', 'CHEMIN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (493, 1, 'CHURCH', 'CHURCH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (494, 2, 'CHURCH', 'CHURCH', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (496, 1, 'CIRC', 'CIRCULO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (499, 2, 'CIRCLE', 'CIRCLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (500, 1, 'CIRCT', 'CIRCUIT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (501, 2, 'CIRCT', 'CIRCUIT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (502, 1, 'CIRCUIT', 'CIRCUIT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (503, 2, 'CIRCUIT', 'CIRCUIT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (504, 1, 'CIRCULO', 'CIRCULO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (505, 1, 'CJA', 'CALLEJA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (506, 1, 'CJON', 'CALLEJON', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (507, 1, 'CK', 'CREEK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (509, 2, 'CL', 'CIRCLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (512, 3, 'CLB', 'CLUB', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (513, 1, 'CLF', 'CLIFF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (514, 1, 'CLFS', 'CLIFFS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (515, 1, 'CLG', 'COLLEGE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (516, 1, 'CLIFF', 'CLIFF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (517, 1, 'CLIFFS', 'CLIFFS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (518, 1, 'CLLE', 'CALLE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (519, 1, 'CLLJ', 'CALLEJON', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (520, 1, 'CLOS', 'CLOSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (521, 2, 'CLOS', 'CLOSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (522, 1, 'CLOSE', 'CLOSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (523, 2, 'CLOSE', 'CLOSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (524, 1, 'CLTN', 'COLLECTION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (527, 3, 'CLUB', 'CLUB', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (528, 1, 'CMC', 'COMMUNITY MAIL CENTRE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (529, 1, 'CMNS', 'COMMONS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (530, 2, 'CMNS', 'COMMONS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (417, 2, 'BYPAS', 'BYP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (421, 2, 'BYPS', 'BYP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (419, 2, 'BYPASS', 'BYP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (415, 2, 'BYPA', 'BYP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (410, 2, 'BY PASS', 'BYP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (438, 1, 'CAM', 'CAM', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (440, 1, 'CAMINO', 'CAM', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (450, 2, 'CAPE', 'CPE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (459, 1, 'CAUSEWAY', 'CSWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (483, 2, 'CENTRO', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (479, 2, 'CENTRE', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (476, 2, 'CENTR', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (472, 2, 'CENTER', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (470, 2, 'CENTE', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (468, 2, 'CENT', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (531, 1, 'CMP', 'CAMP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (532, 1, 'CN', 'CONCESSION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (533, 2, 'CN', 'CONCESSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (534, 1, 'CNCN', 'CONNECTION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (545, 1, 'CNTRL', 'CENTRAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (556, 1, 'CNYN', 'CANYON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (557, 4, 'CO', 'COTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (569, 1, 'COL', 'COLONEL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (570, 1, 'COLL', 'COLLEGE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (571, 2, 'COLL', 'COLLEGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (572, 1, 'COLLECTION', 'COLLECTION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (573, 1, 'COLLEGE', 'COLLEGE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (574, 2, 'COLLEGE', 'COLLEGE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (575, 3, 'COLLEGE', 'COLLEGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (576, 1, 'COLONEL', 'COLONEL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (577, 1, 'COLONIA', 'COLONIA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (578, 2, 'COLONIA', 'COLONIA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (579, 1, 'COMMERCIAL DEALERSHIP OU', 'COMMERCIAL DEALERSHIP', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (581, 2, 'COMMON', 'COMMONS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (582, 1, 'COMMONS', 'COMMONS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (583, 2, 'COMMONS', 'COMMONS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (584, 1, 'COMMUNITY MAIL CENTRE', 'COMMUNITY MAIL CENTRE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (586, 2, 'COMN', 'COMMONS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (587, 1, 'COMP', 'COMPLEX', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (588, 1, 'COMPLEX', 'COMPLEX', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (589, 1, 'CONC', 'CONCESSION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (590, 2, 'CONC', 'CONCESSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (591, 1, 'CONCESSION', 'CONCESSION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (592, 2, 'CONCESSION', 'CONCESSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (593, 1, 'COND', 'CONDOMINIUMS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (594, 1, 'CONDO', 'CONDOMINIUMS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (595, 1, 'CONDOMINIO', 'CONDOMINIUMS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (596, 1, 'CONDOMINIUM', 'CONDOMINIUMS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (597, 1, 'CONDOMINIUMS', 'CONDOMINIUMS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (598, 1, 'CONDOS', 'CONDOMINIUMS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (599, 3, 'CONN', 'CONNECTOR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (600, 4, 'CONN', 'CONNECTOR', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (601, 1, 'CONNECTION', 'CONNECTION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (602, 1, 'CONNECTOR', 'CONNECTOR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (603, 2, 'CONNECTOR', 'CONNECTOR', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (604, 3, 'CONNECTOR', 'CONNECTOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (605, 1, 'CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (606, 2, 'CONTRACT', 'CONTRACT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (607, 1, 'COOP', 'COOPERATIVE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (608, 2, 'COOP', 'COOPERATIVE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (609, 1, 'COOPERATIVE', 'COOPERATIVE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (610, 2, 'COOPERATIVE', 'COOPERATIVE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (612, 2, 'COR', 'CORNER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (616, 2, 'CORNER', 'CORNER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (620, 3, 'CORNERS', 'CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (623, 3, 'CORS', 'CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (624, 1, 'CORSO', 'CORSO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (625, 2, 'CORSO', 'CORSO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (629, 1, 'COTE', 'COTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (630, 2, 'COTE', 'COTE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (631, 1, 'COTTAGE', 'COTTAGE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (632, 2, 'COTTAGE', 'COTTAGE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (633, 3, 'COTTAGE', 'COTTAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (634, 1, 'COUNTY', 'COUNTY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (635, 2, 'COUNTY', 'COUNY ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (647, 1, 'COUR', 'COUR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (648, 1, 'COURSE', 'COURSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (650, 2, 'COURT', 'COURT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (651, 1, 'COURT HOUSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (652, 1, 'COURT HSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (653, 1, 'COURT YARD', 'COURTYARD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (654, 1, 'COURTHOUSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (655, 2, 'COURTHOUSE', 'COURTHOUSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (542, 2, 'CNTR', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (538, 2, 'CNT', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (540, 2, 'CNTER', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (544, 2, 'CNTRE', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (580, 1, 'COMMON', 'CMN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (585, 1, 'COMN', 'CMN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (536, 2, 'CNR', 'COR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (617, 3, 'CORNER', 'COR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (618, 1, 'CORNERS', 'CORS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (621, 1, 'CORS', 'CORS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (562, 2, 'CO RD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (550, 2, 'CNTY RD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (552, 2, 'CNTY ROAD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (642, 2, 'COUNTY ROAD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (640, 2, 'COUNTY RD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (614, 2, 'CORD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (564, 2, 'CO ROAD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (649, 1, 'COURT', 'CT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (628, 2, 'CORTE', 'CT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (656, 1, 'COURTHSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (659, 3, 'COURTS', 'COURTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (660, 1, 'COURTYARD', 'COURTYARD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (661, 1, 'COURTYARDS', 'COURTYARD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (664, 1, 'CP', 'CAMP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (665, 1, 'CPE', 'CAPE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (666, 1, 'CPLX', 'COMPLEX', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (667, 1, 'CPO', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (668, 1, 'CPO BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (673, 1, 'CRDS', 'CROSSROADS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (674, 1, 'CREEK', 'CREEK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (677, 2, 'CRESCENT', 'CRESCENT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (679, 1, 'CRK', 'CREEK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (684, 1, 'CROISSANT', 'CROISSANT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (685, 2, 'CROISSANT', 'CROISSANT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (686, 1, 'CROSS', 'CROSS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (687, 2, 'CROSS', 'CROSS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (689, 1, 'CROSS ROADS', 'CROSSROADS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (694, 2, 'CROSSROAD', 'CROSSROAD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (695, 1, 'CROSSROADS', 'CROSSROADS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (697, 1, 'CRSE', 'COURSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (707, 1, 'CRT HSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (708, 1, 'CRTHSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (709, 1, 'CRU', 'CRUCE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (710, 1, 'CRUC', 'CRUCE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (711, 1, 'CRUCE', 'CRUCE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (713, 1, 'CS', 'CLOSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (716, 2, 'CT', 'CONNECTICUT', 11, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (717, 1, 'CT HSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (718, 1, 'CT YARD', 'COURTYARD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (719, 1, 'CT YD', 'COURTYARD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (722, 1, 'CTHS', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (723, 1, 'CTHSE', 'COURTHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (729, 3, 'CTS', 'COURTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (740, 1, 'CTYD', 'COURTYARD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (741, 1, 'CU', 'COUR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (742, 1, 'CUL DE SAC', 'CUL DE SAC', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (743, 1, 'CULDESAC', 'CUL DE SAC', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (744, 1, 'CURRY RD', 'CURRY ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (745, 1, 'CURRY ROAD', 'CURRY ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (746, 1, 'CURVE', 'CURVE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (749, 1, 'CX', 'CHASE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (750, 1, 'CYN', 'CANYON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (752, 1, 'D', 'D', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (753, 2, 'D', 'D', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (754, 1, 'D B A', 'DBA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (755, 1, 'DALE', 'DALE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (757, 1, 'DAM', 'DAM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (758, 1, 'DBA', 'DBA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (759, 2, 'DE', 'DE', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (760, 4, 'DE', 'DE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (761, 1, 'DE LA', 'DE LA', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (762, 1, 'DE LAS', 'DE LAS', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (763, 1, 'DE LOS', 'DE LOS', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (764, 2, 'DEL', 'DE', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (765, 1, 'DELL', 'DELL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (766, 2, 'DELL', 'DELL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (767, 1, 'DEPARTMENT', 'DEPARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (768, 2, 'DEPARTMENT', 'DEPARTMENT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (769, 1, 'DEPT', 'DEPARTMENT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (770, 2, 'DEPT', 'DEPARTMENT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (771, 1, 'DERE', 'DERECHO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (772, 1, 'DERECHO', 'DERECHO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (773, 1, 'DES', 'DES', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (774, 1, 'DEUX', '2', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (775, 2, 'DEUX', '2', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (776, 1, 'DEUXIEME', 'DEUXIEME', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (777, 1, 'DI', 'DIVERSION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (778, 2, 'DI', 'DIVERSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (779, 3, 'DI', 'DI', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (780, 1, 'DIV', 'DIVIDE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (781, 1, 'DIVERS', 'DIVERSION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (782, 2, 'DIVERS', 'DIVERSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (783, 1, 'DIVERSION', 'DIVERSION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (784, 2, 'DIVERSION', 'DIVERSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (785, 1, 'DIVIDE', 'DIVIDE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (786, 1, 'DL', 'DALE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (787, 2, 'DL', 'DELL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (714, 1, 'CSWY', 'CSWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (721, 2, 'CTER', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (725, 2, 'CTR', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (671, 1, 'CRCL', 'CIR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (672, 1, 'CRCLE', 'CIR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (682, 2, 'CRNR', 'COR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (683, 1, 'CRNRS', 'CORS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (751, 1, 'CZ', 'CORS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (736, 2, 'CTY ROAD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (734, 2, 'CTY RD', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (706, 1, 'CRT', 'CT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (715, 1, 'CT', 'CT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (727, 1, 'CTS', 'CTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (657, 1, 'COURTS', 'CTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (663, 1, 'COVE', 'CV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (748, 1, 'CV', 'CV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (662, 1, 'COV', 'CV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (680, 2, 'CRK', 'CRK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (676, 1, 'CRESCENT', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (696, 1, 'CRSCNT', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (698, 1, 'CRSENT', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (702, 1, 'CRSNT', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (788, 1, 'DM', 'DAM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (789, 1, 'DNS', 'DOWNS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (790, 2, 'DNS', 'DOWNS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (791, 1, 'DO', 'DOWNS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (792, 1, 'DORM', 'DORMITORY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (793, 2, 'DORMITORY', 'DORMITORY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (794, 1, 'DOWN', 'DOWN', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (795, 2, 'DOWN', 'DOWN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (796, 1, 'DOWNS', 'DOWNS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (797, 2, 'DOWNS', 'DOWNS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (798, 1, 'DOWNSTAIRS', 'DOWNSTAIRS', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (800, 1, 'DRAW', 'DRAW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (801, 2, 'DRAW', 'DRAW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (802, 1, 'DRAWER', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (805, 1, 'DRIVEWAY', 'DRIVEWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (807, 1, 'DRWY', 'DRIVEWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (808, 1, 'DU', 'DU', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (809, 1, 'DV', 'DIVIDE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (813, 1, 'EAST & WEST', 'EAST & WEST', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (814, 1, 'EAST WEST', 'EAST WEST', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (815, 1, 'EASTBOUND', 'EASTBOUND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (816, 2, 'EASTBOUND', 'EASTBOUND', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (817, 1, 'ECH', 'ECHANGEUR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (818, 1, 'ECHO', 'ECHO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (819, 2, 'ECHO', 'ECHO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (820, 1, 'ECHANGEUR', 'ECHANGEUR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (821, 1, 'EDF', 'EDIFICIO', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (822, 1, 'EDIF', 'EDIFICIO', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (823, 1, 'EDIFICIO', 'EDIFICIO', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (824, 1, 'EIGHT', '8', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (825, 2, 'EIGHT', '8', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (826, 1, 'EIGHT MILE', 'EIGHT MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (827, 1, 'EIGHTEEN', '18', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (828, 2, 'EIGHTEEN', '18', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (829, 1, 'EIGHTEEEN MILE', 'EIGHTEEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (830, 1, 'EIGHTEENTH', '18', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (831, 2, 'EIGHTEENTH', '18', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (832, 1, 'EIGHTH', '8', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (833, 2, 'EIGHTH', '8', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (834, 1, 'EIGHTIETH', '80', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (835, 2, 'EIGHTIETH', '80', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (836, 1, 'EIGHTY', '80', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (837, 2, 'EIGHTY', '80', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (838, 1, 'EIGHTY EIGHT', '88', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (839, 2, 'EIGHTY EIGHT', '88', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (840, 1, 'EIGHTY EIGHTH', '88', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (841, 2, 'EIGHTY EIGHTH', '88', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (842, 1, 'EIGHTY FIFTH', '85', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (843, 2, 'EIGHTY FIFTH', '85', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (844, 1, 'EIGHTY FIRST', '81', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (845, 2, 'EIGHTY FIRST', '81', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (846, 1, 'EIGHTY FIVE', '85', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (847, 2, 'EIGHTY FIVE', '85', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (848, 1, 'EIGHTY FOUR', '84', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (849, 2, 'EIGHTY FOUR', '84', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (850, 1, 'EIGHTY FOURTH', '84', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (851, 2, 'EIGHTY FOURTH', '84', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (852, 1, 'EIGHTY NINE', '89', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (853, 2, 'EIGHTY NINE', '89', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (854, 1, 'EIGHTY NINTH', '89', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (855, 2, 'EIGHTY NINTH', '89', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (856, 1, 'EIGHTY ONE', '81', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (857, 2, 'EIGHTY ONE', '81', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (858, 1, 'EIGHTY SECOND', '82', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (859, 2, 'EIGHTY SECOND', '82', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (860, 1, 'EIGHTY SEVEN', '87', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (861, 2, 'EIGHTY SEVEN', '87', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (862, 1, 'EIGHTY SEVENTH', '87', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (863, 2, 'EIGHTY SEVENTH', '87', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (864, 1, 'EIGHTY SIX', '86', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (865, 2, 'EIGHTY SIX', '86', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (866, 1, 'EIGHTY SIXTH', '86', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (867, 2, 'EIGHTY SIXTH', '86', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (868, 1, 'EIGHTY THIRD', '83', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (869, 2, 'EIGHTY THIRD', '83', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (870, 1, 'EIGHTY THREE', '83', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (871, 2, 'EIGHTY THREE', '83', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (872, 1, 'EIGHTY TWO', '82', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (873, 2, 'EIGHTY TWO', '82', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (874, 1, 'EL', 'EL', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (876, 1, 'ELEVEN', '11', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (877, 2, 'ELEVEN', '11', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (878, 1, 'ELEVEN MILE', 'ELEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (879, 1, 'ELEVENTH', '11', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (880, 2, 'ELEVENTH', '11', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (881, 1, 'EMS', 'EMS', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (882, 1, 'EN', 'END', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (883, 1, 'END', 'END', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (884, 1, 'END', 'END', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (885, 1, 'ENT', 'ENTRY', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (886, 1, 'ENT', 'ENTRY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (887, 1, 'ENTRY', 'ENTRY', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (888, 2, 'ENTRY', 'ENTRY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (889, 1, 'ENTREE', 'ENTREE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (890, 2, 'ENTREE', 'ENTREE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (891, 1, 'ES', 'ESPLANADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (892, 1, 'ESP', 'ESPLANADE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (893, 1, 'ESPL', 'ESPLANADE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (894, 2, 'ESPL', 'ESPLANADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (895, 3, 'ESPL', 'ESPLANADE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (896, 1, 'ESPLANADE', 'ESPLANADE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (897, 2, 'ESPLANADE', 'ESPLANADE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (898, 3, 'ESPLANADE', 'ESPLANADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (899, 1, 'EST', 'ESTATES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (903, 1, 'ESTATE', 'ESTATES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (906, 1, 'ESTATES', 'ESTATES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (909, 1, 'ESTE', 'ESTE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (910, 2, 'ESTE', 'ESTE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (911, 1, 'ESTS', 'ESTATES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (915, 2, 'ET', 'ETAGE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (916, 3, 'ET', 'ET', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (917, 1, 'ETAGE', 'ETAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (918, 2, 'ETAGE', 'ETAGE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (919, 1, 'EX', 'EXTENDED', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (921, 1, 'EXCH', 'EXCHANGE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (875, 1, 'EL CAMINO', 'CAM', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (806, 1, 'DRV', 'DR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (799, 1, 'DR', 'DR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (803, 1, 'DRI', 'DR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (804, 1, 'DRIVE', 'DR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (810, 1, 'E', 'E', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (811, 2, 'E', 'E', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (812, 1, 'EAST', 'E', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (922, 2, 'EXCH', 'EXCHANGE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (923, 1, 'EXCHANGE', 'EXCHANGE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (924, 2, 'EXCHANGE', 'EXCHANGE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (925, 3, 'EXCHANGE', 'EXCHANGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (926, 1, 'EXEC', 'EXECUTIVE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (927, 1, 'EXECUTIVE', 'EXECUTIVE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (930, 1, 'EXPRESO', 'EXPRESO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (939, 1, 'EXTD', 'EXTENDED', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (942, 1, 'EXTENDED', 'EXTENDED', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (950, 1, 'F M', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (951, 1, 'F M RD', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (952, 2, 'F M RD', 'FARM TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (953, 1, 'F M ROAD', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (954, 2, 'F M ROAD', 'FARM TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (955, 1, 'FACTORY OUTLET', 'OUTLET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (956, 1, 'FALL', 'FALL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (957, 1, 'FALLS', 'FALLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (958, 1, 'FARM', 'FARM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (959, 2, 'FARM', 'FARM', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (960, 1, 'FARM MAINTENANCE RD', 'FARM MAINTENANCE ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (961, 2, 'FARM MAINTENANCE RD', 'FARM MAINTENANCE ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (962, 1, 'FARM MARKET ROAD', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (963, 2, 'FARM MARKET ROAD', 'FARM TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (964, 1, 'FARM TO MARKET ROAD', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (965, 2, 'FARM TO MARKET ROAD', 'FARM TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (966, 1, 'FERRY', 'FERRY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (967, 1, 'FERRY CROSSING', 'FERRY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (968, 1, 'FEST', 'FESTIVAL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (969, 1, 'FESTIVAL', 'FESTIVAL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (970, 1, 'FIELD', 'FIELD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (972, 1, 'FIELDS', 'FIELDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (973, 1, 'FIFTEEN', '15', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (974, 2, 'FIFTEEN', '15', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (975, 1, 'FIFTEEN MILE', 'FIFTEEN MI', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (976, 1, 'FIFTEENTH', '15', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (977, 2, 'FIFTEENTH', '15', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (978, 1, 'FIFTH', '5', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (979, 2, 'FIFTH', '5', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (980, 1, 'FIFTIETH', '50', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (981, 2, 'FIFTIETH', '50', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (982, 1, 'FIFTY', '50', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (983, 2, 'FIFTY', '50', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (984, 1, 'FIFTY EIGHT', '58', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (985, 2, 'FIFTY EIGHT', '58', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (986, 1, 'FIFTY EIGHTH', '58', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (987, 2, 'FIFTY EIGHTH', '58', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (988, 1, 'FIFTY FIFTH', '55', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (989, 2, 'FIFTY FIFTH', '55', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (990, 1, 'FIFTY FIRST', '51', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (991, 2, 'FIFTY FIRST', '51', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (992, 1, 'FIFTY FIVE', '55', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (993, 2, 'FIFTY FIVE', '55', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (994, 1, 'FIFTY FOUR', '54', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (995, 2, 'FIFTY FOUR', '54', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (996, 1, 'FIFTY FOURTH', '54', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (997, 2, 'FIFTY FOURTH', '54', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (998, 1, 'FIFTY NINE', '59', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (999, 2, 'FIFTY NINE', '59', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1000, 1, 'FIFTY NINTH', '59', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1001, 2, 'FIFTY NINTH', '59', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1002, 1, 'FIFTY ONE', '51', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1003, 2, 'FIFTY ONE', '51', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1004, 1, 'FIFTY SECOND', '52', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1005, 2, 'FIFTY SECOND', '52', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1006, 1, 'FIFTY SEVEN', '57', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1007, 2, 'FIFTY SEVEN', '57', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1008, 1, 'FIFTY SEVENTH', '57', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1009, 2, 'FIFTY SEVENTH', '57', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1094, 1, 'FOUR', '4', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1010, 1, 'FIFTY SIX', '56', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1011, 2, 'FIFTY SIX', '56', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1012, 1, 'FIFTY SIXTH', '56', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1013, 2, 'FIFTY SIXTH', '56', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1014, 1, 'FIFTY THIRD', '53', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1015, 2, 'FIFTY THIRD', '53', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1016, 1, 'FIFTY THREE', '53', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1017, 2, 'FIFTY THREE', '53', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1018, 1, 'FIFTY TWO', '52', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1019, 2, 'FIFTY TWO', '52', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1020, 1, 'FIRST', '1', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1021, 2, 'FIRST', '1', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1022, 1, 'FIVE', '5', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1023, 2, 'FIVE', '5', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1024, 1, 'FIVE CEDARS', 'FIVE CEDARS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1025, 1, 'FIVE CORNERS', 'FIVE CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1026, 1, 'FIVE MILE', 'FIVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1027, 1, 'FIVE POINTS', 'FIVE POINTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1028, 1, 'FIVE TOWN', 'FIVE TOWN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1029, 1, 'FL', 'FLOOR', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1030, 1, 'FLAT', 'FLAT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1031, 1, 'FLD', 'FIELD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1032, 1, 'FLDS', 'FIELDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1033, 1, 'FLLS', 'FALLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1034, 1, 'FLOOR', 'FLOOR', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1035, 2, 'FLOOR', 'FLOOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1036, 1, 'FLR', 'FLOOR', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1037, 1, 'FLS', 'FALLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1038, 1, 'FLT', 'FLAT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1039, 1, 'FLTS', 'FLATS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1040, 1, 'FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1041, 1, 'FM RD', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1042, 2, 'FM RD', 'FARM TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1043, 1, 'FM ROAD', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1044, 2, 'FM ROAD', 'FARM TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1045, 1, 'FMRD', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1046, 2, 'FMRD', 'FARM TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1047, 1, 'FORD', 'FORD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1048, 1, 'FOREST', 'FOREST', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1049, 1, 'FORGE', 'FORGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (936, 1, 'EXPY', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (935, 1, 'EXPWY', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (934, 1, 'EXPWAY', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (932, 1, 'EXPRESSWAY', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (949, 1, 'EXWY', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1050, 1, 'FORK', 'FORK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1051, 1, 'FORKS', 'FORKS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1052, 1, 'FORT', 'FORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1053, 1, 'FORTIETH', '40', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1054, 2, 'FORTIETH', '40', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1055, 1, 'FORTS', 'FORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1056, 1, 'FORTY', '40', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1057, 2, 'FORTY', '40', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1058, 1, 'FORTY EIGHT', '48', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1059, 2, 'FORTY EIGHT', '48', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1060, 1, 'FORTY EIGHTH', '48', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1061, 2, 'FORTY EIGHTH', '48', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1062, 1, 'FORTY FIFTH', '45', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1063, 2, 'FORTY FIFTH', '45', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1064, 1, 'FORTY FIRST', '41', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1065, 2, 'FORTY FIRST', '41', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1066, 1, 'FORTY FIVE', '45', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1067, 2, 'FORTY FIVE', '45', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1068, 1, 'FORTY FOUR', '44', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1069, 2, 'FORTY FOUR', '44', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1070, 1, 'FORTY FOURTH', '44', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1071, 2, 'FORTY FOURTH', '44', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1072, 1, 'FORTY NINE', '49', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1073, 2, 'FORTY NINE', '49', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1074, 1, 'FORTY NINTH', '49', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1075, 2, 'FORTY NINTH', '49', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1076, 1, 'FORTY ONE', '41', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1077, 2, 'FORTY ONE', '41', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1078, 1, 'FORTY SECOND', '42', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1079, 2, 'FORTY SECOND', '42', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1080, 1, 'FORTY SEVEN', '47', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1081, 2, 'FORTY SEVEN', '47', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1082, 1, 'FORTY SEVENTH', '47', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1083, 2, 'FORTY SEVENTH', '47', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1084, 1, 'FORTY SIX', '46', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1085, 2, 'FORTY SIX', '46', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1086, 1, 'FORTY SIXTH', '46', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1087, 2, 'FORTY SIXTH', '46', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1088, 1, 'FORTY THIRD', '43', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1089, 2, 'FORTY THIRD', '43', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1090, 1, 'FORTY THREE', '43', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1091, 2, 'FORTY THREE', '43', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1092, 1, 'FORTY TWO', '42', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1093, 2, 'FORTY TWO', '42', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1095, 2, 'FOUR', '4', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1096, 1, 'FOUR CORNERS', 'FOUR CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1097, 1, 'FOUR FLAGS', 'FOUR FLAGS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1098, 1, 'FOUR MILE', 'FOUR MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1099, 1, 'FOURTEEN', '14', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1100, 2, 'FOURTEEN', '14', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1101, 1, 'FOURTEEN MILE', 'FOURTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1102, 1, 'FOURTEENTH', '14', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1103, 2, 'FOURTEENTH', '14', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1104, 1, 'FOURTH', '4', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1105, 2, 'FOURTH', '4', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1106, 1, 'FPO', 'FPO', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1107, 1, 'FRD', 'FORD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1110, 1, 'FRG', 'FORGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1111, 1, 'FRK', 'FORK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1112, 1, 'FRKS', 'FORKS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1113, 1, 'FRNT', 'FRONT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1114, 2, 'FRNT', 'FRONT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1115, 1, 'FROM', 'FROM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1116, 1, 'FRONT', 'FRONT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1117, 2, 'FRONT', 'FRONT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1118, 3, 'FRONT', 'FRONT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1119, 1, 'FRONTAGE', 'FRONT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1120, 1, 'FRST', 'FOREST', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1121, 2, 'FRST', 'FOREST', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1122, 1, 'FRT', 'FORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1125, 1, 'FRY', 'FERRY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1126, 1, 'FS RD', 'FOREST SERVICE ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1127, 1, 'FT', 'FORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1128, 1, 'FWD', 'FOUR WHEEL DRIVE TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1130, 1, 'FX', 'FOX', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1131, 1, 'G DEL', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1132, 1, 'G DELIVERY', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1134, 1, 'GALLERIA', 'GALLERIA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1135, 2, 'GALLERIA', 'GALLERIA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1136, 1, 'GALLERIE', 'GALLERIA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1137, 2, 'GALLERIE', 'GALLERIA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1138, 1, 'GALR', 'GALLERIA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1139, 1, 'GARDEN', 'GARDEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1140, 1, 'GARDENS', 'GARDENS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1143, 1, 'GATE', 'GATE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1267, 1, 'HL', 'HILL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1144, 2, 'GATE', 'GATE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1145, 1, 'GATEWAY', 'GATEWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1147, 1, 'GD', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1148, 2, 'GD', 'GROUNDS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1149, 1, 'GDN', 'GARDEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1151, 1, 'GDNS', 'GARDEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1154, 1, 'GDS', 'GARDEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1156, 1, 'GEN D', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1157, 1, 'GEN DEL', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1158, 1, 'GEN DELIVERY', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1159, 1, 'GENDEL', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1160, 1, 'GENERAL D', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1161, 1, 'GENERAL DEL', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1162, 1, 'GENERAL DELIVERY', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1164, 1, 'GLADE', 'GLADE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1165, 2, 'GLADE', 'GLADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1166, 1, 'GLEN', 'GLEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1168, 1, 'GLN', 'GLEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1170, 1, 'GNDL', 'GENERAL DELIVERY', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1171, 1, 'GOV', 'GOVERNOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1172, 1, 'GOVERNOR', 'GOVERNOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1173, 1, 'GPO', 'GPO', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1174, 1, 'GR', 'GROUND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1176, 1, 'GREEN', 'GREEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1178, 1, 'GREENE RD', 'GREENE ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1179, 1, 'GREENE ROAD', 'GREENE ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1180, 1, 'GRN', 'GREEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1123, 1, 'FRWAY', 'FWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1124, 1, 'FRWY', 'FWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1129, 1, 'FWY', 'FWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1108, 1, 'FREEWAY', 'FWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1182, 1, 'GRNDS', 'GROUNDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1183, 2, 'GRNDS', 'GROUNDS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1184, 1, 'GROUND', 'GROUND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1185, 1, 'GROUNDS', 'GROUNDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1186, 2, 'GROUNDS', 'GROUNDS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1187, 1, 'GROVE', 'GROVE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1189, 1, 'GRV', 'GROVE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1191, 1, 'GT', 'GATE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1192, 1, 'GTWAY', 'GATEWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1194, 1, 'GTWY', 'GATEWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1197, 1, 'H C', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1198, 1, 'H C R', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1199, 1, 'H CONT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1200, 1, 'H CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1201, 1, 'HALF', 'HALF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1202, 1, 'HALL', 'HALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1203, 2, 'HALL', 'HALL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1204, 1, 'HANGER', 'HANGER', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1205, 2, 'HANGER', 'HANGER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1206, 1, 'HARBOR', 'HARBOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1207, 1, 'HARBOUR', 'HARBOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1210, 1, 'HARBR', 'HARBOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1213, 1, 'HAVEN', 'HAVEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1214, 1, 'HBR', 'HARBOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1217, 1, 'HC', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1218, 1, 'HC RT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1219, 1, 'HC RTE', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1220, 1, 'HCO', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1221, 1, 'HCR', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1222, 1, 'HCRT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1223, 1, 'HEIGHT', 'HEIGHTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1224, 1, 'HEIGHTS', 'HEIGHTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1227, 1, 'HGHLDS', 'HIGHLANDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1228, 2, 'HGHLDS', 'HIGHLANDS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1229, 1, 'HGT', 'HEIGHTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1232, 1, 'HGTS', 'HEIGHTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1237, 1, 'HGWY CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1238, 1, 'HGWY FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1241, 1, 'HGY FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1244, 1, 'HIGH CONT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1245, 1, 'HIGH CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1246, 1, 'HIGHLANDS', 'HIGHLANDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1247, 2, 'HIGHLANDS', 'HIGHLANDS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1250, 1, 'HIGHWAY CONT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1251, 1, 'HIGHWAY CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1252, 1, 'HIGHWAY CONTRACT ROUTE', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1253, 1, 'HIGHWAY FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1256, 1, 'HIGHWY FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1257, 1, 'HILL', 'HILL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1259, 1, 'HILLS', 'HILLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1262, 1, 'HIWAY CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1263, 1, 'HIWAY FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1266, 1, 'HIWY FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1269, 1, 'HLLW', 'HOLLOW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1271, 1, 'HLS', 'HILLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1272, 1, 'HNGR', 'HANGER', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1273, 2, 'HNGR', 'HANGER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1275, 2, 'H0', 'HOLLOW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1276, 1, 'HOL', 'HOLLOW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1278, 1, 'HOLLOW', 'HOLLOW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1280, 1, 'HOLW', 'HOLLOW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1282, 1, 'HOME', 'HOME', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1283, 2, 'HOME', 'HOME', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1284, 1, 'HOMES', 'HOME', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1285, 1, 'HOSP', 'HOSPITAL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1286, 1, 'HOSPITAL', 'HOSPITAL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1287, 1, 'HOTEL', 'HOTEL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1288, 2, 'HOTEL', 'HOTEL', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1289, 1, 'HOUS', 'HOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1290, 2, 'HOUS', 'HOUSE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1291, 1, 'HOUSE', 'HOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1292, 2, 'HOUSE', 'HOUSE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1293, 3, 'HOUSE', 'HOUSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1294, 1, 'HOUSING PROJ', 'PROJECTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1295, 1, 'HOUSING PROJECTS', 'PROJECTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1296, 1, 'HRBR', 'HARBOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1299, 1, 'HRBOR', 'HARBOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1302, 1, 'HSE', 'HOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1303, 2, 'HSE', 'HOUSE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1304, 1, 'HSE PROJ', 'PROJECTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1305, 1, 'HSE PROJECTS', 'PROJECTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1306, 1, 'HT', 'HEIGHTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1190, 2, 'GRV', 'GRV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1196, 1, 'GV', 'GRV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1188, 2, 'GROVE', 'GRV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1211, 2, 'HARBR', 'HBR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1297, 2, 'HRBR', 'HBR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1300, 2, 'HRBOR', 'HBR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1208, 2, 'HARBOUR', 'HBR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1215, 2, 'HBR', 'HBR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1216, 3, 'HBR', 'HBR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1233, 2, 'HGTS', 'HTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1307, 2, 'HT', 'HTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1225, 2, 'HEIGHTS', 'HTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1230, 2, 'HGT', 'HTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1236, 2, 'HGWY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1243, 2, 'HI', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1255, 2, 'HIGHWY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1265, 2, 'HIWY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1309, 1, 'HTL', 'HOTEL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1310, 2, 'HTL', 'HOTEL', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1311, 1, 'HTS', 'HEIGHTS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1314, 1, 'HUI RD', 'HUI ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1315, 1, 'HUI ROAD', 'HUI ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1316, 1, 'HVN', 'HAVEN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1321, 1, 'HWC', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1324, 1, 'HWY CONT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1325, 1, 'HWY CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1326, 1, 'HWY FM', 'FARM TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1327, 1, 'HWYS', 'HIGHWAYS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1330, 1, 'HY CONT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1331, 1, 'HY CONTRACT', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1334, 1, 'I', 'INTERSTATE HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1336, 1, 'I H', 'INTERSTATE HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1337, 1, 'IC', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1338, 1, 'ICHG', 'INTERCHANGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1339, 1, 'IH', 'INTERSTATE HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1340, 1, 'ILE', 'ILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1341, 2, 'ILE', 'ILE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1342, 1, 'IM', 'IMPASSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1343, 1, 'IMM', 'IMMEUBLE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1344, 2, 'IMM', 'IMMEUBLE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1345, 1, 'IMMEUBLE', 'IMMEUBLE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1346, 2, 'IMMEUBLE', 'IMMEUBLE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1347, 1, 'IMP', 'IMPASSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1348, 1, 'IMPASSE', 'IMPASSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1349, 1, 'IN CARE OF', 'CARE OF', 9, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1350, 1, 'INCTR', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1351, 1, 'IND PARK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1352, 1, 'IND PK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1353, 1, 'INDC', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1354, 1, 'INDL', 'INDUSTRIAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1355, 1, 'INDL CTR', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1356, 1, 'INDL PARK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1357, 1, 'INDL PK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1358, 1, 'INDUSTRIAL', 'INDUSTRIAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1359, 1, 'INDUSTRIAL CENTER', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1360, 1, 'INDUSTRIAL CTR', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1361, 1, 'INDUSTRIAL PARK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1362, 1, 'INDUSTRIAL PK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1363, 1, 'INLET', 'INLET', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1364, 1, 'INLT', 'INLET', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1365, 1, 'INN', 'INN', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1366, 2, 'INN', 'INN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1367, 1, 'INPK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1368, 1, 'INT L', 'INTERNATIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1369, 1, 'INTE', 'INTERIOR', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1370, 1, 'INTERCHANGE', 'INTERCHANGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1371, 1, 'INTERIOR', 'INTERIOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1372, 1, 'INTERIOR', 'INTERIOR', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1373, 1, 'INTERNATIONAL', 'INTERNATIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1374, 1, 'INTERSECTION', 'INTERSECTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1375, 1, 'INTERSTATE', 'INTERSTATE HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1376, 2, 'INTERSTATE', 'INTERSTATE HIGHWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1377, 1, 'INTERSTATE HIGHWAY', 'INTERSTATE HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1378, 2, 'INTERSTATE HIGHWAY', 'INTERSTATE HIGHWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1379, 1, 'INTERSTATE HWY', 'INTERSTATE HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1380, 2, 'INTERSTATE HWY', 'INTERSTATE HIGHWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1381, 1, 'INSTITUTE', 'INSTITUTE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1382, 2, 'INSTITUTE', 'INSTITUTE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1383, 3, 'INSTITUTE', 'INSTITUTE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1384, 1, 'INTL', 'INTERNATIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1385, 1, 'INTR', 'INTERSECTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1386, 1, 'IP', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1387, 1, 'IPRK', 'INDUSTRIAL PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1388, 1, 'IS', 'INTERSTATE HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1389, 2, 'IS', 'ISLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1391, 1, 'ISLAND', 'ISLAND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1393, 1, 'ISLANDS', 'ISLANDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1394, 1, 'ISLE', 'ISLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1395, 1, 'ISLES', 'ISLES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1396, 1, 'IZQU', 'IZQUIERDO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1397, 1, 'IZQUIERDO', 'IZQUIERDO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1398, 1, 'J F K', 'JOHN F KENNEDY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1399, 1, 'J F KENNEDY', 'JOHN F KENNEDY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1400, 1, 'JA', 'JARDIN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1401, 1, 'JAF', 'JAF', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1402, 1, 'JAF BOX', 'JAF BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1403, 1, 'JAF STATION', 'JAF STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1404, 1, 'JARDIN', 'JARDIN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1405, 2, 'JARDIN', 'JARDIN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1408, 3, 'JCT', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1411, 3, 'JCTION', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1414, 3, 'JCTN', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1415, 1, 'JEEP TRAIL', 'JEEP TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1416, 1, 'JEEP TRL', 'JEEP TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1417, 1, 'JFK', 'JOHN F KENNEDY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1420, 3, 'JNCT', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1421, 1, 'JOHN F KENNEDY', 'JOHN F KENNEDY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1424, 3, 'JUNC', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1427, 3, 'JUNCT', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1430, 3, 'JUNCTION', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1433, 3, 'JUNCTN', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1312, 2, 'HTS', 'HTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1318, 2, 'HW', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1333, 2, 'HYWY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1329, 2, 'HY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1323, 2, 'HWY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1320, 2, 'HWAY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1390, 3, 'IS', 'IS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1392, 2, 'ISLAND', 'IS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1406, 1, 'JCT', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1409, 1, 'JCTION', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1412, 1, 'JCTN', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1425, 1, 'JUNCT', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1431, 1, 'JUNCTN', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1422, 1, 'JUNC', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1428, 1, 'JUNCTION', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1436, 3, 'JUNCTON', 'JUNCTION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1437, 1, 'K MART', 'K MART', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1438, 1, 'KEY', 'KEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1440, 1, 'KEYSTONE ROUTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1441, 1, 'KEYSTONE RT', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1442, 1, 'KEYSTONE RTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1443, 1, 'KMART', 'K MART', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1444, 1, 'KNL', 'KNOLL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1446, 1, 'KNLS', 'KNOLLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1449, 1, 'KNOLLS', 'KNOLLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1451, 1, 'L B J', 'LYNDON B JOHNSON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1452, 1, 'L B JOHNSON', 'LYNDON B JOHNSON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1453, 1, 'L C D', 'LETTER CARRIER DEPOT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1456, 1, 'LAKE', 'LAKE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1457, 1, 'LAKES', 'LAKE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1460, 3, 'LAND', 'LANDING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1463, 3, 'LANDING', 'LANDING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1466, 3, 'LANDINGS', 'LANDING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1469, 1, 'LAS', 'LAS', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1470, 1, 'LBBY', 'LOBBY', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1471, 1, 'LBJ', 'LYNDON B JOHNSON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1472, 1, 'LCD', 'LETTER CARRIER DEPOT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1473, 1, 'LCKS', 'LOCKS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1476, 3, 'LDG', 'LODGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1479, 3, 'LDGE', 'LODGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1481, 2, 'LE', 'LE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1482, 3, 'LE', 'LE', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1483, 1, 'LEFT', 'LEFT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1484, 2, 'LEFT', 'LEFT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1485, 1, 'LES', 'LES', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1486, 1, 'LETTER CARRIER DEPOT', 'LETTER CARRIER DEPOT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1487, 1, 'LEVEL', 'LEVEL', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1488, 2, 'LEVEL', 'LEVEL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1489, 1, 'LF', 'LOAF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1490, 1, 'LGT', 'LIGHT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1491, 1, 'LI', 'LINE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1492, 1, 'LIGHT', 'LIGHT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1493, 1, 'LIMITS', 'LIMITS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1494, 2, 'LIMITS', 'LIMITS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1495, 1, 'LINE', 'LINE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1496, 2, 'LINE', 'LINE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1497, 1, 'LINK', 'LINK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1498, 2, 'LINK', 'LINK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1499, 1, 'LK', 'LAKE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1500, 2, 'LK', 'LINK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1501, 1, 'LKOUT', 'LOOKOUT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1502, 1, 'LKS', 'LAKE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1503, 1, 'LMTS', 'LIMITS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1504, 2, 'LMTS', 'LIMITS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1508, 3, 'LNDG', 'LANDING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1511, 3, 'LNDNG', 'LANDING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1513, 1, 'LOAF', 'LOAF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1514, 1, 'LOBBY', 'LOBBY', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1515, 1, 'LOBBY', 'LOBBY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1516, 1, 'LOCAL', 'BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1517, 1, 'LOCAL BOX', 'BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1518, 1, 'LOCAL HCR', 'HIGHWAY CONTRACT ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1519, 1, 'LOCAL PO BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1520, 1, 'LOCKBOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1521, 1, 'LOCKS', 'LOCKS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1524, 3, 'LODGE', 'LODGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1525, 1, 'LOOKOUT', 'LOOKOUT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1526, 2, 'LOOKOUT', 'LOOKOUT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1529, 1, 'LOS', 'LOS', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1530, 1, 'LOT', 'LOT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1531, 2, 'LOT', 'LOT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1532, 3, 'LOT', 'LOT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1533, 1, 'LOWER', 'LOWER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1534, 2, 'LOWER', 'LOWER', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1535, 1, 'LOWR', 'LOWER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1536, 2, 'LOWR', 'LOWER', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1539, 1, 'LT', 'LOT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1540, 2, 'LT', 'LOT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1541, 3, 'LT', 'LOOKOUT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1542, 1, 'LVL', 'LEVEL', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1543, 1, 'LWR', 'LOWER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1544, 2, 'LWR', 'LOWER', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1545, 1, 'LYNDON B JOHNSON', 'LYNDON B JOHNSON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1546, 1, 'M H P', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1547, 1, 'M L K', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1548, 1, 'M L KING', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1549, 1, 'MAISON', 'MAISON', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1550, 2, 'MAISON', 'MAISON', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1551, 3, 'MAISON', 'MAISON', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1555, 3, 'MALL', 'MALL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1559, 3, 'MANOR', 'MANOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1562, 1, 'MARG', 'MARGINAL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1563, 1, 'MARGINAL', 'MARGINAL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1564, 1, 'MARKET', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1565, 2, 'MARKET', 'MARKET', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1566, 1, 'MARKET PL', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1567, 1, 'MARKET PLACE', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1434, 1, 'JUNCTON', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1450, 4, 'KY', 'KY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1439, 2, 'KEY', 'KY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1445, 2, 'KNL', 'KNL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1448, 1, 'KNOLL', 'KNL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1447, 2, 'KNLS', 'KNLS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1506, 1, 'LNDG', 'LNDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1464, 1, 'LANDINGS', 'LNDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1461, 1, 'LANDING', 'LNDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1458, 1, 'LAND', 'LNDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1467, 1, 'LANDNG', 'LNDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1509, 1, 'LNDNG', 'LNDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1454, 1, 'LA', 'LN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1468, 1, 'LANE', 'LN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1480, 1, 'LE', 'LN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1568, 1, 'MARKETPLACE', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1569, 1, 'MART', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1570, 1, 'MARTIN KING', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1571, 1, 'MARTIN L KING', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1572, 1, 'MARTIN LUTHER', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1573, 1, 'MARTIN LUTHER KING', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1574, 1, 'MARTIN LUTHER KING JR', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1575, 1, 'MAZE', 'MAZE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1576, 1, 'MC', 'MC', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1577, 1, 'MDWS', 'MEADOWS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1580, 1, 'MEADOW', 'MEADOW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1582, 1, 'MEADOWS', 'MEADOWS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1584, 1, 'MED', 'MEDICAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1585, 1, 'MEDICAL', 'MEDICAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1586, 1, 'MEM', 'MEMORIAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1587, 1, 'MEMORIAL', 'MEMORIAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1588, 1, 'MERC', 'MERCADO', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1589, 1, 'MERCADO', 'MERCADO', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1591, 2, 'MEWS', 'MEWS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1593, 1, 'MH', 'MOBILE HOME', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1594, 1, 'MH CT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1595, 1, 'MH PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1596, 1, 'MHP', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1597, 1, 'MI', 'MILE POST', 20, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1598, 1, 'MI POST', 'MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1599, 1, 'MIDDLE', 'MIDDLE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1600, 2, 'MIDDLE', 'MIDDLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1601, 1, 'MILE', 'MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1602, 2, 'MILE', 'MILE POST', 20, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1603, 1, 'MILE POST', 'MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1604, 2, 'MILE POST', 'MILE POST', 20, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1605, 1, 'MILES', 'MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1606, 1, 'MILL', 'MILL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1607, 1, 'MILLS', 'MILLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1608, 1, 'MISSION', 'MISSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1609, 1, 'MKT', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1610, 1, 'MKT PL', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1611, 1, 'MKT PLACE', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1612, 1, 'MKTPL', 'MARKET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1615, 3, 'ML', 'MALL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1616, 1, 'ML KING', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1617, 1, 'MLK', 'MARTIN LUTHER KING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1618, 1, 'MLS', 'MILLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1621, 3, 'MNR', 'MANOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1623, 2, 'MNRS', 'MANOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1624, 1, 'MNT', 'MOUNT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1625, 4, 'MO', 'MONTEE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1626, 1, 'MOB HM PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1627, 1, 'MOB HOME PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1628, 1, 'MOBIL HOME PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1629, 1, 'MOBIL HOME TRPK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1630, 1, 'MOBILE COURT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1631, 1, 'MOBILE CT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1632, 1, 'MOBILE EST', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1633, 1, 'MOBILE ESTATE', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1634, 1, 'MOBILE HM PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1635, 1, 'MOBILE HOME', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1636, 2, 'MOBILE HOME', 'MOBILE HOME', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1637, 1, 'MOBILE HOME PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1638, 1, 'MOBILE HOME PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1639, 1, 'MOBILE HOME TRPK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1640, 1, 'MOBILE HOMES', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1641, 1, 'MOBILE PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1642, 1, 'MOBILE ROUTE', 'MOBILE ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1643, 1, 'MONTEE', 'MONTEE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1644, 2, 'MONTEE', 'MONTEE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1645, 1, 'MOOR', 'MOOR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1646, 2, 'MOOR', 'MOOR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1647, 1, 'MOTEL', 'MOTEL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1649, 1, 'MOUNT', 'MOUNT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1651, 1, 'MOUNTAIN', 'MOUNTAIN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1653, 1, 'MOUNTAINS', 'MOUNTAIN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1654, 1, 'MP', 'MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1655, 2, 'MP', 'MILE POST', 20, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1656, 1, 'MR', 'MOBILE ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1657, 1, 'MS', 'MS', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1658, 1, 'MSN', 'MISSION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1659, 1, 'MT', 'MOUNT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1660, 1, 'MTD ROUTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1661, 1, 'MTD RT', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1662, 1, 'MTD RTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1663, 1, 'MTL', 'MOTEL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1664, 1, 'MTN', 'MOUNTAIN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1665, 1, 'MTNS', 'MOUNTAIN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1668, 1, 'MURO', 'MURO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1672, 1, 'N A B', 'NAVAL AIR STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1673, 2, 'N A B', 'NAVAL AIR STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1674, 1, 'N A S', 'NAVAL AIR STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1675, 2, 'N A S', 'NAVAL AIR STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1677, 1, 'N F D', 'NATL FOREST DEVELOP ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1679, 1, 'NAB', 'NAVAL AIR STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1680, 2, 'NAB', 'NAVAL AIR STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1681, 1, 'NAS', 'NAVAL AIR STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1682, 2, 'NAS', 'NAVAL AIR STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1683, 1, 'NATIONAL', 'NATIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1684, 1, 'NATL', 'NATIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1685, 1, 'NATL FOREST', 'NATL FOREST', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1686, 1, 'NATL FOREST DEVELOP ROAD', 'NATL FOREST DEVELOP ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1687, 1, 'NATL FOREST HIGHWAY', 'NATL FOREST HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1688, 1, 'NAVAL AIR BASE', 'NAVAL AIR STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1689, 2, 'NAVAL AIR BASE', 'NAVAL AIR STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1690, 1, 'NAVAL AIR STATION', 'NAVAL AIR STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1691, 2, 'NAVAL AIR STATION', 'NAVAL AIR STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1613, 1, 'ML', 'MALL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1619, 1, 'MNR', 'MNR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1669, 1, 'MW', 'MDW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1581, 2, 'MEADOW', 'MDW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1579, 4, 'ME', 'MEWS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1590, 1, 'MEWS', 'MEWS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1670, 1, 'N', 'N', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1671, 2, 'N', 'N', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1676, 1, 'N E', 'NE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1678, 1, 'N W', 'NW', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1692, 1, 'NAVAL BASE', 'NAVAL AIR STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1693, 2, 'NAVAL BASE', 'NAVAL AIR STATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1694, 1, 'NCK', 'NECK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1696, 1, 'NEAR', 'NEAR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1697, 1, 'NECK', 'NECK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1698, 1, 'NF HWY', 'NATL FOREST HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1699, 1, 'NFD', 'NATL FOREST DEVELOP ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1700, 1, 'NFD', 'NATL FOREST DEVELOP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1701, 1, 'NFHWY', 'NATL FOREST HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1702, 1, 'NINE', '9', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1703, 2, 'NINE', '9', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1704, 1, 'NINE MILE', 'NINE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1705, 1, 'NINETEEN', '19', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1706, 2, 'NINETEEN', '19', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1707, 1, 'NINETEEN MILE', 'NINETEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1708, 1, 'NINETEENTH', '19', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1709, 2, 'NINETEENTH', '19', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1710, 1, 'NINETIETH', '90', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1711, 2, 'NINETIETH', '90', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1712, 1, 'NINETY', '90', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1713, 2, 'NINETY', '90', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1714, 1, 'NINETY EIGHT', '98', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1715, 2, 'NINETY EIGHT', '98', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1716, 1, 'NINETY EIGHTH', '98', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1717, 2, 'NINETY EIGHTH', '98', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1718, 1, 'NINETY FIFTH', '95', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1719, 2, 'NINETY FIFTH', '95', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1720, 1, 'NINETY FIRST', '91', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1721, 2, 'NINETY FIRST', '91', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1722, 1, 'NINETY FIVE', '95', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1723, 2, 'NINETY FIVE', '95', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1724, 1, 'NINETY FOUR', '94', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1725, 2, 'NINETY FOUR', '94', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1726, 1, 'NINETY FOURTH', '94', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1727, 2, 'NINETY FOURTH', '94', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1728, 1, 'NINETY NINE', '99', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1729, 2, 'NINETY NINE', '99', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1730, 1, 'NINETY NINTH', '99', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1731, 2, 'NINETY NINTH', '99', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1732, 1, 'NINETY ONE', '91', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1733, 2, 'NINETY ONE', '91', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1734, 1, 'NINETY SECOND', '92', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1735, 2, 'NINETY SECOND', '92', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1736, 1, 'NINETY SEVEN', '97', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1737, 2, 'NINETY SEVEN', '97', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1868, 1, 'PD', 'POND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1738, 1, 'NINETY SEVENTH', '97', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1739, 2, 'NINETY SEVENTH', '97', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1740, 1, 'NINETY SIX', '96', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1741, 2, 'NINETY SIX', '96', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1742, 1, 'NINETY SIXTH', '96', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1743, 2, 'NINETY SIXTH', '96', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1744, 1, 'NINETY THIRD', '93', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1745, 2, 'NINETY THIRD', '93', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1746, 1, 'NINETY THREE', '93', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1747, 2, 'NINETY THREE', '93', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1748, 1, 'NINETY TWO', '92', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1749, 2, 'NINETY TWO', '92', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1750, 1, 'NINTH', '9', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1751, 2, 'NINTH', '9', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1752, 1, 'NO', '#', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1754, 3, 'NO', '#', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1756, 1, 'NORD', 'NORD', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1757, 1, 'NORD EST', 'NORD EST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1758, 1, 'NORD OUEST', 'NORD OUEST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1759, 1, 'NORDEST', 'NORD EST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1760, 1, 'NORDOUEST', 'NORD OUEST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1763, 1, 'NORTH & SOUTH', 'NORTH & SOUTH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1765, 1, 'NORTH SOUTH', 'NORTH SOUTH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1767, 1, 'NORTHBOUND', 'NORTHBOUND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1768, 2, 'NORTHBOUND', 'NORTHBOUND', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1770, 1, 'NR', 'NEAR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1772, 1, 'NUMBER', '#', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1773, 2, 'NUMBER', '#', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1775, 1, 'O', '0', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1776, 2, 'O', 'O', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1777, 1, 'OESTE', 'OESTE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1778, 1, 'OF', 'OF', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1779, 1, 'OF PK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1780, 1, 'OF PRK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1781, 1, 'OFC', 'OFFICE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1782, 1, 'OFC CENTER', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1783, 1, 'OFC COMPLEX', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1784, 1, 'OFC CTR', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1785, 1, 'OFC PARK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1786, 1, 'OFC PRK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1787, 1, 'OFFICE', 'OFFICE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1788, 2, 'OFFICE', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1789, 1, 'OFFICE CENTER', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1790, 1, 'OFFICE COMPLEX', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1791, 1, 'OFFICE CTR', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1792, 1, 'OFFICE PARK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1793, 1, 'OFFICE PRK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1794, 1, 'OFFICES', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1795, 1, 'OFPK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1796, 1, 'OFPRK', 'OFFICE PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1797, 1, 'OLD', 'OLD', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1798, 2, 'OLD', 'OLD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1799, 4, 'ON', 'ON', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1800, 1, 'ONE', '1', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1801, 2, 'ONE', '1', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1802, 1, 'ONE HUNDRED', 'ONE HUNDRED', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1803, 2, 'ONE HUNDRED', '100', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1804, 1, 'ONE MILE', 'ONE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1805, 1, 'ORCH', 'ORCHARD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1806, 1, 'ORCHARD', 'ORCHARD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1808, 1, 'OTLT', 'OUTLET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1809, 1, 'OUEST', 'OUEST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1810, 1, 'OUTLET', 'OUTLET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1811, 1, 'OUTLETS', 'OUTLET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1812, 1, 'OUTS', 'OUTSIDE OF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1813, 1, 'OUTSIDE', 'OUTSIDE OF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1817, 1, 'P BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1818, 1, 'P BX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1819, 1, 'P H', 'PENTHOUSE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1820, 1, 'P O', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1821, 1, 'P O B', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1695, 1, 'NE', 'NE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1753, 2, 'NO', 'N', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1755, 1, 'NOR', 'N', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1761, 1, 'NORTE', 'N', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1822, 1, 'P O B X', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1823, 1, 'P O BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1824, 1, 'P O BX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1825, 1, 'P O DRAWER', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1826, 4, 'PA', 'PARADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1827, 1, 'PAR', 'PARCELAS', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1828, 2, 'PAR', 'PARCELAS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1829, 3, 'PAR', 'PARCELAS', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1830, 1, 'PAR RD', 'PARISH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1831, 1, 'PAR ROAD', 'PARISH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1832, 1, 'PARADE', 'PARADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1833, 2, 'PARADE', 'PARADE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1834, 1, 'PARADERO', 'PARADERO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1835, 1, 'PARC', 'PARC', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1836, 2, 'PARC', 'PARC', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1837, 3, 'PARC', 'PARC', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1838, 1, 'PARCELAS', 'PARCELAS', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1839, 1, 'PARISH RD', 'PARISH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1840, 1, 'PARISH ROAD', 'PARISH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1841, 1, 'PARK', 'PARK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1844, 1, 'PARK & SHOP', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1845, 1, 'PARK N SHOP', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1848, 1, 'PARQUE', 'PARQUE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1849, 1, 'PARRD', 'PARISH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1850, 1, 'PASAJE', 'PASAJE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1851, 1, 'PASEO', 'PASEO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1852, 1, 'PASO', 'PASO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1853, 2, 'PASO', 'PASO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1857, 1, 'PATHWAY', 'PATHWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1858, 1, 'PAVILION', 'PAVILLION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1859, 2, 'PAVILION', 'PAVILLION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1860, 1, 'PAVILIONS', 'PAVILLION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1861, 2, 'PAVILIONS', 'PAVILLION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1862, 1, 'PAVILLION', 'PAVILLION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1863, 2, 'PAVILLION', 'PAVILLION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1864, 1, 'PAVILLIONS', 'PAVILLION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1865, 2, 'PAVILLIONS', 'PAVILLION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1866, 1, 'PAVL', 'PAVILLION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1867, 2, 'PAVL', 'PAVILLION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1869, 1, 'PDA', 'PARADERO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1870, 1, 'PENTHOUSE', 'PENTHOUSE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1871, 1, 'PH', 'PENTHOUSE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1873, 1, 'PIECE', 'PIECE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1874, 2, 'PIECE', 'PIECE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1875, 1, 'PIER', 'PIER', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1876, 2, 'PIER', 'PIER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1877, 3, 'PIER', 'PIER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1879, 1, 'PINES', 'PINES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1881, 1, 'PISO', 'PISO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1882, 1, 'PISTA', 'PISTA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1883, 1, 'PK', 'PARK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1893, 1, 'PLAIN', 'PLAINS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1894, 1, 'PLAINS', 'PLAINS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1895, 1, 'PLANTATION', 'PLANTATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1896, 2, 'PLANTATION', 'PLANTATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1897, 1, 'PLATEAU', 'PLATEAU', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1898, 2, 'PLATEAU', 'PLATEAU', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1902, 1, 'PLN', 'PLAINS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1903, 1, 'PLNS', 'PLAINS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1904, 1, 'PLNT', 'PLANTATION', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1909, 1, 'PM', 'PROMENADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1910, 1, 'PNES', 'PINES', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1911, 1, 'PO', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1912, 1, 'PO B', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1913, 1, 'PO B OX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1914, 1, 'PO B X', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1915, 1, 'PO BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1916, 1, 'PO BX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1917, 1, 'PO DRAWER', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1918, 1, 'POB', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1919, 1, 'POBOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1920, 1, 'POINT', 'POINT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1921, 1, 'PORT', 'PORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1923, 1, 'POST BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1924, 1, 'POST BX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1925, 1, 'POST OFFICE BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1926, 1, 'POSTAL BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1927, 1, 'POSTAL BX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1928, 1, 'POSTAL OUTLET', 'POSTAL OUTLET', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1929, 2, 'POSTAL OUTLET', 'POSTAL OUTLET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1930, 1, 'POSTOFFICE BOX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1931, 1, 'POSTOFFICE BX', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1932, 1, 'POUCH', 'POST OFFICE BOX', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1934, 1, 'PR HI', 'PROVINCIAL HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1935, 1, 'PR HIGHWAY', 'PROVINCIAL HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1936, 1, 'PR HWY', 'PROVINCIAL HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1938, 1, 'PR RT', 'PROVINCIAL ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1939, 1, 'PR RTE', 'PROVINCIAL ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1940, 1, 'PRAIRIE', 'PRAIRIE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1941, 1, 'PREMIERE', '1', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1942, 2, 'PREMIERE', '1', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1943, 1, 'PRIVATE', 'PRIVATE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1944, 2, 'PRIVATE', 'PRIVATE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1945, 1, 'PRK', 'PARK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1948, 1, 'PRO', 'PROFESSIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1949, 1, 'PROF', 'PROFESSIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1947, 3, 'PRK', 'PARK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1843, 3, 'PARK', 'PARK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1933, 4, 'PR', 'PARK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1885, 3, 'PK', 'PARK', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1888, 1, 'PKWAY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1889, 1, 'PKWY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1872, 2, 'PH', 'PATH', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1950, 1, 'PROFESSIONAL', 'PROFESSIONAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1951, 1, 'PROJ', 'PROJECTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1952, 1, 'PROJECTS', 'PROJECTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1953, 1, 'PROM', 'PROMENADE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1954, 2, 'PROM', 'PROMENADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1955, 1, 'PROMENADE', 'PROMENADE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1956, 2, 'PROMENADE', 'PROMENADE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1957, 1, 'PROVINCIAL HI', 'PROVINCIAL HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1958, 1, 'PROVINCIAL HIGHWAY', 'PROVINCIAL HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1959, 1, 'PROVINCIAL HWY', 'PROVINCIAL HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1960, 1, 'PROVINCIAL HY', 'PROVINCIAL HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1961, 1, 'PROVINCIAL ROUTE', 'PROVINCIAL ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1962, 1, 'PROVINCIAL RT', 'PROVINCIAL ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1963, 1, 'PROVINCIAL RTE', 'PROVINCIAL ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1964, 1, 'PRQE', 'PARQUE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1965, 1, 'PRRD', 'PARISH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1966, 1, 'PRT', 'PORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1968, 1, 'PSC', 'PSC', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1969, 1, 'PSO', 'PASEO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1970, 1, 'PSTA', 'PISTA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1971, 1, 'PT', 'POINT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1973, 1, 'PTE', 'PUENTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1974, 1, 'PU', 'PLATEAU', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1975, 1, 'PUENTE', 'PUENTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1976, 1, 'PV', 'PRIVATE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1977, 1, 'PVT', 'PRIVATE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1978, 2, 'PVT', 'PRIVATE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1979, 1, 'PW', 'PATHWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1983, 1, 'QTRS', 'QUARTERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1984, 1, 'QU', 'QUAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1985, 1, 'QUAI', 'QUAI', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1986, 2, 'QUAI', 'QUAI', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1987, 1, 'QUARTERS', 'QUARTERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1988, 1, 'QUATRE', '4', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1989, 2, 'QUATRE', '3', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1990, 1, 'QUATRIEME', 'QUATRIEME', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1991, 1, 'QUAY', 'QUAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1992, 2, 'QUAY', 'QUAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1993, 1, 'QUAY RD', 'QUAY ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1994, 1, 'QUAY ROAD', 'QUAY ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1995, 1, 'R', 'R', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1996, 2, 'R', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1997, 1, 'R D', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1998, 1, 'R D NO', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1999, 1, 'R F D', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2000, 1, 'R NO', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2001, 1, 'R P O', 'POSTAL OUTLET', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2002, 2, 'R P O', 'POSTAL OUTLET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2003, 1, 'R R', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2004, 1, 'R R NO', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2005, 1, 'R RT', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2006, 1, 'R RTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2009, 1, 'RA', 'RANGE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2010, 1, 'RADIAL', 'RADIAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2011, 1, 'RADL', 'RADIAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2012, 1, 'RAMAL', 'RAMAL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2014, 1, 'RAMPA', 'RAMPA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2015, 1, 'RANCH', 'RANCH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2016, 1, 'RANCH TO MARKET ROAD', 'RANCH TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2017, 1, 'RANCH TO MARKET ROAD', 'RANCH TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2018, 1, 'RANCH RD', 'RANCH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2019, 1, 'RANCH RD', 'RANCH ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2020, 1, 'RANCH ROAD', 'RANCH ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2021, 1, 'RANCH ROAD', 'RANCH ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2022, 1, 'RANG', 'RANG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2023, 2, 'RANG', 'RANG', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2024, 1, 'RANGE', 'RANGE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2025, 2, 'RANGE', 'RANGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2026, 1, 'RANGE ROAD', 'RANGE ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2027, 1, 'RANGE ROAD', 'RANGE ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2028, 1, 'RAPIDS', 'RAPIDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2030, 1, 'RDG', 'RIDGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2032, 1, 'RDPT', 'ROND POINT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2033, 1, 'RDS', 'ROADS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2034, 1, 'RDWY', 'ROADWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2036, 1, 'REAR', 'REAR', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2037, 1, 'REAR', 'REAR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2038, 1, 'RES', 'RESIDENCIA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2039, 1, 'RES HWY', 'RESERVATION HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2040, 1, 'RESERVATION HIGHWAY', 'RESERVATION HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2041, 1, 'RESHY', 'RESERVATION HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2042, 1, 'RESIDENCIA', 'RESIDENCIA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2043, 1, 'RESORT', 'RESORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2044, 2, 'RESORT', 'RESORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2045, 1, 'REST', 'REST', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2046, 1, 'REZ DE CHAUSEE', 'REZ DE CHAUSEE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2047, 1, 'RFD', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2048, 1, 'RFD ROUTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2049, 1, 'RG', 'RANGE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2050, 2, 'RG', 'RANGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2051, 1, 'RGHT', 'RIGHT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2052, 4, 'RI', 'RISE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2053, 1, 'RIDGE', 'RIDGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2055, 1, 'RIGHT', 'RIGHT', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2056, 1, 'RISE', 'RISE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2057, 1, 'RIV', 'RIVER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2058, 1, 'RIVER', 'RIVER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2059, 1, 'RL', 'RUELLE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2060, 1, 'RLE', 'RUELLE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2061, 1, 'RM', 'ROOM', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2062, 2, 'RM', 'ROOM', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2063, 3, 'RM', 'RANCH TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2064, 4, 'RM', 'RANCH TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2065, 1, 'RM RD', 'RANCH TO MARKET ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2066, 1, 'RM RD', 'RANCH TO MARKET ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2067, 1, 'RML', 'RAMAL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2070, 1, 'RNCH', 'RANCH', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2071, 1, 'RNG ROAD', 'RANGE ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2072, 1, 'RNG ROAD', 'RANGE ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2075, 1, 'ROADS', 'ROADS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2076, 1, 'ROADWAY', 'ROADWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1980, 1, 'PWY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1982, 1, 'PY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2077, 1, 'ROND POINT', 'ROND POINT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2078, 1, 'ROOM', 'ROOM', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2086, 1, 'ROUTES', 'ROUTES', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2089, 1, 'RPDS', 'RAPIDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2090, 1, 'RPO', 'POSTAL OUTLET', 14, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2091, 2, 'RPO', 'POSTAL OUTLET', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2092, 1, 'RR', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2093, 1, 'RR NO', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2094, 1, 'RRT', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2095, 1, 'RRTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2096, 1, 'RSRT', 'RESORT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2097, 2, 'RSRT', 'RESORT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2107, 1, 'RUELLE', 'RUELLE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2109, 2, 'RUN', 'RUN', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2110, 1, 'RURAL', 'RURAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2111, 1, 'RURAL', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2112, 1, 'RURAL ROUTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2113, 1, 'RURAL ROUTE NO', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2114, 1, 'RURAL RT', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2115, 1, 'RUTA', 'RUTA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2119, 1, 'S / C', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2120, 1, 'S C', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2122, 1, 'S R', 'STAR ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2123, 2, 'S R', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2124, 1, 'S RT', 'STAR ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2125, 2, 'S RT', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2127, 1, 'S/C', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2128, 1, 'SAINT', 'SAINT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2129, 1, 'SAINTE', 'SAINTE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2130, 1, 'SANTA FE', 'SANTA FE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2131, 1, 'SC', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2132, 1, 'SCH', 'SCHOOL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2133, 1, 'SCHOOL', 'SCHOOL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2134, 2, 'SCHOOL', 'SCHOOL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2136, 1, 'SEARING ROUTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2137, 1, 'SEARING RT', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2138, 1, 'SEARING RTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2139, 1, 'SECOND', '2', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2140, 2, 'SECOND', '2', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2141, 1, 'SEM', 'SEMINARY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2142, 1, 'SEMINARY', 'SEMINARY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2143, 2, 'SEMINARY', 'SEMINARY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2144, 1, 'SENDERO', 'SENDERO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2145, 1, 'SENT', 'SENTIER', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2146, 1, 'SENTIER', 'SENTIER', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2150, 1, 'SERVICE', 'SERVICE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2154, 1, 'SEVEN', '7', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2155, 2, 'SEVEN', '7', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2156, 1, 'SEVEN CORNERS', 'SEVEN CORNERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2157, 2, 'SEVEN CORNERS', 'SEVEN CORNERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2158, 1, 'SEVEN MILE', 'SEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2159, 1, 'SEVENTEEN', '17', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2160, 2, 'SEVENTEEN', '17', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2161, 1, 'SEVENTEEN MILE', 'SEVENTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2162, 1, 'SEVENTEENTH', '17', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2163, 2, 'SEVENTEENTH', '17', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2164, 1, 'SEVENTH', '7', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2165, 2, 'SEVENTH', '7', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2166, 1, 'SEVENTIETH', '70', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2167, 2, 'SEVENTIETH', '70', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2168, 1, 'SEVENTY', '70', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2169, 2, 'SEVENTY', '70', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2170, 1, 'SEVENTY EIGHT', '78', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2171, 2, 'SEVENTY EIGHT', '78', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2172, 1, 'SEVENTY EIGHTH', '78', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2173, 2, 'SEVENTY EIGHTH', '78', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2174, 1, 'SEVENTY FIFTH', '75', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2175, 2, 'SEVENTY FIFTH', '75', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2176, 1, 'SEVENTY FIRST', '71', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2177, 2, 'SEVENTY FIRST', '71', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2178, 1, 'SEVENTY FIVE', '75', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2179, 2, 'SEVENTY FIVE', '75', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2180, 1, 'SEVENTY FOUR', '74', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2181, 2, 'SEVENTY FOUR', '74', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2182, 1, 'SEVENTY FOURTH', '74', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2183, 2, 'SEVENTY FOURTH', '74', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2184, 1, 'SEVENTY NINE', '79', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2185, 2, 'SEVENTY NINE', '79', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2186, 1, 'SEVENTY NINTH', '79', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2187, 2, 'SEVENTY NINTH', '79', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2188, 1, 'SEVENTY ONE', '71', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2189, 2, 'SEVENTY ONE', '71', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2190, 1, 'SEVENTY SECOND', '72', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2191, 2, 'SEVENTY SECOND', '72', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2192, 1, 'SEVENTY SEVEN', '77', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2193, 2, 'SEVENTY SEVEN', '77', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2194, 1, 'SEVENTY SEVENTH', '77', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2195, 2, 'SEVENTY SEVENTH', '77', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2196, 1, 'SEVENTY SIX', '76', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2197, 2, 'SEVENTY SIX', '76', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2198, 1, 'SEVENTY SIXTH', '76', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2199, 2, 'SEVENTY SIXTH', '76', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2200, 1, 'SEVENTY THIRD', '73', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2201, 2, 'SEVENTY THIRD', '73', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2202, 1, 'SEVENTY THREE', '73', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2203, 2, 'SEVENTY THREE', '73', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2204, 1, 'SEVENTY TWO', '72', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2205, 2, 'SEVENTY TWO', '72', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2088, 1, 'RP', 'RAMP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2081, 3, 'ROUTE', 'RTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2104, 3, 'RTE', 'RTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2087, 1, 'ROW', 'ROW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2116, 1, 'RW', 'ROW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2106, 1, 'RUE', 'RUE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2105, 1, 'RU', 'RUE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2108, 1, 'RUN', 'RUN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2147, 1, 'SER RD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2148, 1, 'SERV RD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2149, 1, 'SERV ROAD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2151, 2, 'SERVICE', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2117, 1, 'S', 'S', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2118, 2, 'S', 'S', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2121, 1, 'S E', 'SE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2126, 1, 'S W', 'SW', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2135, 1, 'SE', 'SE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2206, 1, 'SH', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2207, 1, 'SH CTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2208, 1, 'SHC', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2209, 1, 'SHL', 'SHOAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2210, 1, 'SHLS', 'SHOALS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2211, 1, 'SHOAL', 'SHOAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2212, 1, 'SHOALS', 'SHOALS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2213, 1, 'SHOP', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2214, 1, 'SHOP CEN', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2215, 1, 'SHOP CENTER', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2216, 1, 'SHOP CTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2218, 1, 'SHOP MART', 'SHOPPING MART', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2219, 1, 'SHOP N SAVE', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2221, 1, 'SHOP SQ', 'SHOPPING SQUARE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2222, 1, 'SHOPETTE', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2223, 1, 'SHOPPERS', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2224, 1, 'SHOPPES', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2225, 1, 'SHOPPETTE', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2226, 1, 'SHOPPING', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2227, 1, 'SHOPPING CENT', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2228, 1, 'SHOPPING CENTE', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2229, 1, 'SHOPPING CENTER', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2230, 1, 'SHOPPING CNTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2231, 1, 'SHOPPING CTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2233, 1, 'SHOPPING PARK', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2235, 1, 'SHOPS', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2236, 1, 'SHORE', 'SHORE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2237, 1, 'SHP', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2238, 1, 'SHP CENTER', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2239, 1, 'SHP CT', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2240, 1, 'SHP CTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2243, 1, 'SHPCT', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2244, 1, 'SHPG', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2245, 1, 'SHPG CENTER', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2246, 1, 'SHPG CNTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2247, 1, 'SHPG CTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2250, 1, 'SHR', 'SHORE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2251, 1, 'SIDE', 'SIDE', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2252, 2, 'SIDE', 'SIDE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2253, 1, 'SIDE ROAD', 'SIDE ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2254, 1, 'SITE', 'SITE', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2255, 2, 'SITE', 'SITE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2256, 1, 'SIX', '6', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2257, 2, 'SIX', '6', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2258, 1, 'SIX MILE', 'SIX MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2259, 1, 'SIXTEEN', '16', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2260, 2, 'SIXTEEN', '16', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2261, 1, 'SIXTEEN MILE', 'SIXTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2262, 1, 'SIXTEENTH', '16', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2263, 2, 'SIXTEENTH', '16', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2264, 1, 'SIXTH', '6', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2265, 2, 'SIXTH', '6', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2266, 1, 'SIXTIETH', '60', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2267, 2, 'SIXTIETH', '60', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2268, 1, 'SIXTY', '60', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2269, 2, 'SIXTY', '60', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2270, 1, 'SIXTY EIGHT', '68', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2271, 2, 'SIXTY EIGHT', '68', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2272, 1, 'SIXTY EIGHTH', '68', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2273, 2, 'SIXTY EIGHTH', '68', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2274, 1, 'SIXTY FIFTH', '65', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2275, 2, 'SIXTY FIFTH', '65', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2276, 1, 'SIXTY FIRST', '61', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2277, 2, 'SIXTY FIRST', '61', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2278, 1, 'SIXTY FIVE', '65', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2279, 2, 'SIXTY FIVE', '65', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2280, 1, 'SIXTY FOUR', '64', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2281, 2, 'SIXTY FOUR', '64', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2282, 1, 'SIXTY FOURTH', '64', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2283, 2, 'SIXTY FOURTH', '64', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2284, 1, 'SIXTY NINE', '69', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2285, 2, 'SIXTY NINE', '69', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2286, 1, 'SIXTY NINTH', '69', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2287, 2, 'SIXTY NINTH', '69', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2288, 1, 'SIXTY ONE', '61', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2289, 2, 'SIXTY ONE', '61', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2290, 1, 'SIXTY SECOND', '62', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2291, 2, 'SIXTY SECOND', '62', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2292, 1, 'SIXTY SEVEN', '67', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2293, 2, 'SIXTY SEVEN', '67', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2294, 1, 'SIXTY SEVENTH', '67', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2295, 2, 'SIXTY SEVENTH', '67', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2296, 1, 'SIXTY SIX', '66', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2297, 2, 'SIXTY SIX', '66', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2298, 1, 'SIXTY SIXTH', '66', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2299, 2, 'SIXTY SIXTH', '66', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2300, 1, 'SIXTY THIRD', '63', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2301, 2, 'SIXTY THIRD', '63', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2302, 1, 'SIXTY THREE', '63', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2303, 2, 'SIXTY THREE', '63', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2304, 1, 'SIXTY TWO', '62', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2305, 2, 'SIXTY TWO', '62', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2308, 1, 'SLIP', 'SLIP', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2309, 2, 'SLIP', 'SLIP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2311, 1, 'SMT', 'SUMMIT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2312, 2, 'SMT', 'SHOPPING MART', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2313, 1, 'SNDR', 'SENDERO', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2315, 1, 'SOTA', 'SOTANO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2316, 2, 'SOTA', 'SOTA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2317, 1, 'SOTAN', 'SOTANO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2318, 1, 'SOTANO', 'SOTANO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2319, 1, 'SOUS SOL', 'SOUS SOL', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2323, 1, 'SOUTHBOUND', 'SOUTHBOUND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2324, 2, 'SOUTHBOUND', 'SOUTHBOUND', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2327, 1, 'SP', 'SPACE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2328, 2, 'SP', 'SHOPPING PLAZA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2329, 1, 'SPACE', 'SPACE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2330, 2, 'SPACE', 'SPACE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2331, 1, 'SPC', 'SPACE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2332, 1, 'SPDWY', 'SPEEDWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2314, 1, 'SO', 'S', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2310, 1, 'SM', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2307, 1, 'SKYWAY', 'SKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2306, 1, 'SKWY', 'SKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2320, 1, 'SOUTH', 'S', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2321, 1, 'SOUTH EAST', 'SE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2322, 1, 'SOUTH WEST', 'SW', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2325, 1, 'SOUTHEAST', 'SE', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2326, 1, 'SOUTHWEST', 'SW', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2333, 1, 'SPEEDWAY', 'SPEEDWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2334, 1, 'SPG', 'SPRING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2335, 1, 'SPGS', 'SPRING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2336, 1, 'SPR', 'SPRING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2337, 1, 'SPRG', 'SPRING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2338, 1, 'SPRING', 'SPRING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2339, 1, 'SPRINGS', 'SPRING', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2342, 3, 'SPUR', 'SPUR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2343, 1, 'SPURNGS', 'SPUR', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2354, 1, 'SR', 'STAR ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2355, 2, 'SR', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2356, 3, 'SR', 'STAR ROUTE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2357, 4, 'SR', 'SIDE ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2358, 1, 'SRA', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2360, 1, 'SRV RTE', 'SERVICE ROUTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2364, 1, 'SS', 'SUBURBAN SERVICE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2366, 2, 'ST', 'SAINT', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2371, 1, 'ST R', 'STAR ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2372, 2, 'ST R', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2376, 2, 'ST ROUTE', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2378, 2, 'ST RT', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2380, 2, 'ST RTE', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2383, 3, 'STA', 'STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2384, 1, 'STALL', 'STALL', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2385, 2, 'STALL', 'STALL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2386, 1, 'STAR ROUTE', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2387, 1, 'STAR RT', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2390, 3, 'STAT', 'STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2391, 1, 'STATE', 'STATE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2404, 3, 'STATION', 'STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2405, 1, 'STATION FORCES', 'STATION FORCES', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2408, 3, 'STATN', 'STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2409, 1, 'STE', 'SUITE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2410, 2, 'STE', 'SAINTE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2411, 1, 'STES', 'SUITES', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2416, 1, 'STLL', 'STALL', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2419, 3, 'STN', 'STATION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2420, 1, 'STN FORCES', 'STATION FORCES', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2421, 1, 'STOP', 'STOP', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2422, 2, 'STOP', 'STOP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2423, 1, 'STOP & SHOP', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2424, 1, 'STOP & SHOP CTR', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2425, 1, 'STOR', 'STORE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2426, 2, 'STOR', 'STORE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2427, 1, 'STORE', 'STORE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2428, 2, 'STORE', 'STORE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2429, 3, 'STORE', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2430, 1, 'STORES', 'SHOPPING CENTER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2439, 1, 'STREAM', 'STREAM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2441, 1, 'STREETS', 'STREETS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2442, 1, 'STRIP', 'STRIP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2443, 2, 'STRIP', 'STRIP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2444, 1, 'STRM', 'STREAM', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2445, 1, 'STRP', 'STRIP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2446, 2, 'STRP', 'STRIP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2447, 1, 'STRT', 'STAR ROUTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2448, 2, 'STRT', 'STAR ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2451, 1, 'STS', 'STREETS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2452, 1, 'STUDIO', 'STUDIO', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2453, 2, 'STUDIO', 'STUDIO', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2454, 1, 'SU', 'SUITE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2455, 1, 'SUBD', 'SUBDIVISION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2456, 2, 'SUBD', 'SUBDIVISION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2457, 1, 'SUBDIV', 'SUBDIVISION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2458, 2, 'SUBDIV', 'SUBDIVISION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2459, 1, 'SUBDIVISION', 'SUBDIVISION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2460, 2, 'SUBDIVISION', 'SUBDIVISION', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2361, 1, 'SRVC', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2359, 1, 'SRV RD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2363, 1, 'SRVRTE', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2362, 1, 'SRVRD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2341, 2, 'SPUR', 'SPUR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2350, 1, 'SQUARE', 'SQ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2344, 1, 'SQ', 'SQ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2346, 1, 'SQR', 'SQ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2348, 1, 'SQU', 'SQ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2352, 1, 'SQURE', 'SQ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2438, 1, 'STRD', 'STATE RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2381, 1, 'STA', 'STA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2417, 1, 'STN', 'STA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2406, 1, 'STATN', 'STA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2402, 1, 'STATION', 'STA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2388, 1, 'STAT', 'STA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2437, 1, 'STRAVN', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2450, 1, 'STRVNUE', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2449, 1, 'STRVN', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2433, 1, 'STRAV', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2434, 1, 'STRAVE', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2435, 1, 'STRAVEN', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2436, 1, 'STRAVENUE', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2432, 1, 'STRA', 'STRA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2365, 1, 'ST', 'ST', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2431, 1, 'STR', 'ST', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2440, 1, 'STREET', 'ST', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2412, 1, 'STH', 'S', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2461, 1, 'SUBURBAN ROUTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2462, 1, 'SUBURBAN RT', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2463, 1, 'SUBURBAN RTE', 'RURAL ROUTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2464, 1, 'SUBURBAN SERVICE', 'SUBURBAN SERVICE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2465, 1, 'SUD', 'SUD', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2466, 1, 'SUD EST', 'SUD EST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2467, 1, 'SUD OUEST', 'SUD OUEST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2468, 1, 'SUDEST', 'SUD EST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2469, 1, 'SUDOUEST', 'SUD OUEST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2470, 1, 'SUIT', 'SUITE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2471, 2, 'SUIT', 'SUITE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2472, 1, 'SUITE', 'SUITE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2473, 1, 'SUITES', 'SUITES', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2474, 2, 'SUITES', 'SUITES', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2475, 1, 'SUMMIT', 'SUMMIT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2477, 1, 'SV RTE', 'SERVICE ROUTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2481, 1, 'SWP', 'SWAMP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2482, 1, 'TANK TRAIL', 'TANK TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2483, 1, 'TEN', '10', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2484, 2, 'TEN', '10', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2485, 1, 'TEN MILE', 'TEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2486, 1, 'TENTH', '10', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2487, 2, 'TENTH', '10', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2489, 1, 'TERM', 'TERMINAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2490, 2, 'TERM', 'TERMINAL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2491, 1, 'TERMINAL', 'TERMINAL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2492, 2, 'TERMINAL', 'TERMINAL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2494, 1, 'TERRASSE', 'TERRASSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2495, 2, 'TERRASSE', 'TERRASSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2497, 1, 'THE', 'THE', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2498, 1, 'THFR', 'THOROUGHFARE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2499, 1, 'THICKET', 'THICKET', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2500, 2, 'THICKET', 'THICKET', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2501, 1, 'THIRD', '3', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2502, 2, 'THIRD', '3', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2503, 1, 'THIRTEEN', '13', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2504, 2, 'THIRTEEN', '13', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2505, 1, 'THIRTEEN MILE', 'THIRTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2506, 1, 'THIRTEENTH', '13', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2507, 2, 'THIRTEENTH', '13', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2508, 1, 'THIRTIETH', '30', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2509, 2, 'THIRTIETH', '30', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2510, 1, 'THIRTY', '30', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2511, 2, 'THIRTY', '30', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2512, 1, 'THIRTY EIGHT', '38', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2513, 2, 'THIRTY EIGHT', '38', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2514, 1, 'THIRTY EIGHTH', '38', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2515, 2, 'THIRTY EIGHTH', '38', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2516, 1, 'THIRTY FIFTH', '35', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2517, 2, 'THIRTY FIFTH', '35', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2518, 1, 'THIRTY FIRST', '31', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2519, 2, 'THIRTY FIRST', '31', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2520, 1, 'THIRTY FIVE', '35', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2521, 2, 'THIRTY FIVE', '35', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2522, 1, 'THIRTY FOURTH', '34', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2523, 2, 'THIRTY FOURTH', '34', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2524, 1, 'THIRTY FOUR', '34', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2525, 2, 'THIRTY FOUR', '34', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2526, 1, 'THIRTY NINE', '39', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2527, 2, 'THIRTY NINE', '39', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2528, 1, 'THIRTY NINTH', '39', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2529, 2, 'THIRTY NINTH', '39', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2530, 1, 'THIRTY ONE', '31', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2531, 2, 'THIRTY ONE', '31', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2532, 1, 'THIRTY SECOND', '32', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2533, 2, 'THIRTY SECOND', '32', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2534, 1, 'THIRTY SEVEN', '37', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2535, 2, 'THIRTY SEVEN', '37', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2536, 1, 'THIRTY SEVENTH', '37', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2537, 2, 'THIRTY SEVENTH', '37', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2538, 1, 'THIRTY SIX', '36', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2539, 2, 'THIRTY SIX', '36', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2540, 1, 'THIRTY SIXTH', '36', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2541, 2, 'THIRTY SIXTH', '36', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2542, 1, 'THIRTY THIRD', '33', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2543, 2, 'THIRTY THIRD', '33', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2544, 1, 'THIRTY THREE', '33', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2545, 2, 'THIRTY THREE', '33', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2546, 1, 'THIRTY TWO', '32', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2547, 2, 'THIRTY TWO', '32', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2548, 1, 'THORO', 'THOROUGHFARE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2549, 1, 'THOROFARE', 'THOROUGHFARE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2550, 1, 'THOROUGHFARE', 'THOROUGHFARE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2551, 1, 'THREE', '3', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2552, 2, 'THREE', '3', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2553, 1, 'THREE MILE', 'THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2557, 1, 'TK TRL', 'TANK TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2558, 1, 'TKTRL', 'TANK TRAIL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2560, 1, 'TLINE', 'TOWNLINE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2561, 1, 'TLR', 'TRAILER', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2562, 1, 'TLR COURT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2563, 1, 'TLR CRT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2564, 1, 'TLR CT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2565, 1, 'TLR PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2566, 1, 'TLR PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2567, 1, 'TLR PRK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2570, 1, 'TOP', 'TOP', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2571, 2, 'TOP', 'TOP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2572, 1, 'TOWER', 'TOWERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2573, 2, 'TOWER', 'TOWER', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2574, 3, 'TOWER', 'TOWER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2575, 1, 'TOWERS', 'TOWERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2576, 2, 'TOWERS', 'TOWERS', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2577, 3, 'TOWERS', 'TOWERS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2578, 4, 'TOWERS', 'TOWERS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2579, 1, 'TOWN HIGHWAY', 'TOWN HIGHWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2580, 2, 'TOWN HIGHWAY', 'TOWN HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2581, 1, 'TOWN HWY', 'TOWN HIGHWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2582, 2, 'TOWN HWY', 'TOWN HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2583, 1, 'TOWN RD', 'TOWN ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2584, 2, 'TOWN RD', 'TOWN ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2585, 1, 'TOWN ROAD', 'TOWN ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2586, 2, 'TOWN ROAD', 'TOWN ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2587, 1, 'TOWNHOME', 'TOWNHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2588, 1, 'TOWNHOMES', 'TOWNHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2589, 1, 'TOWNHOUSE', 'TOWNHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2476, 1, 'SUR', 'S', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2480, 1, 'SW', 'SW', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2590, 1, 'TOWNHOUSES', 'TOWNHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2591, 1, 'TOWNLINE', 'TOWNLINE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2592, 1, 'TOWNSHIP HIGHWAY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2593, 1, 'TOWNSHIP HIWAY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2594, 1, 'TOWNSHIP HWY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2595, 1, 'TOWNSHIP RD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2596, 1, 'TOWNSHIP ROAD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2597, 1, 'TP', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2602, 1, 'TR', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2604, 1, 'TR COURT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2605, 1, 'TR CRT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2606, 1, 'TR CT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2607, 1, 'TR PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2608, 1, 'TR PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2609, 1, 'TR PRK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2610, 1, 'TR VILLAGE', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2611, 1, 'TR VLG', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2612, 1, 'TRACE', 'TRACE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2614, 1, 'TRACK', 'TRACK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2617, 2, 'TRAIL', 'TRAIL', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2618, 1, 'TRAILER', 'TRAILER', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2619, 2, 'TRAILER', 'TRAILER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2620, 1, 'TRAILER COURT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2621, 1, 'TRAILER CRT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2622, 1, 'TRAILER CT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2623, 1, 'TRAILER PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2624, 1, 'TRAILER PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2625, 1, 'TRAILER PRK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2626, 1, 'TRAILER VILLAGE', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2627, 1, 'TRAILER VLG', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2641, 1, 'TRL', 'TRL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2628, 1, 'TRAILERCOURT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2629, 1, 'TRAILERPARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2630, 1, 'TRAILERS', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2632, 1, 'TRAK', 'TRACK', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2633, 1, 'TRANS CANADA', 'TRANS CANADA', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2634, 2, 'TRANS CANADA', 'TRANS CANADA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2635, 1, 'TRANSCANADA', 'TRANS CANADA', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2636, 2, 'TRANSCANADA', 'TRANS CANADA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2637, 1, 'TRCE', 'TRACE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2639, 1, 'TRCRT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2640, 1, 'TRCT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2642, 1, 'TRL COURT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2643, 1, 'TRL CRT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2644, 1, 'TRL CT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2645, 1, 'TRL PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2646, 1, 'TRL PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2647, 1, 'TRL PRK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2648, 1, 'TRL VILLAGE', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2649, 1, 'TRL VLG', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2650, 1, 'TRLCRT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2651, 1, 'TRLCT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2652, 1, 'TRLPK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2653, 1, 'TRLPRK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2654, 1, 'TRLR', 'TRAILER', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2655, 2, 'TRLR', 'TRAILER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2656, 1, 'TRLR COURT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2657, 1, 'TRLR CRT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2658, 1, 'TRLR CT', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2659, 1, 'TRLR PARK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2660, 1, 'TRLR PK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2661, 1, 'TRLR PRK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2662, 1, 'TRLR VILLAGE', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2663, 1, 'TRLR VLG', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2664, 1, 'TRNABT', 'TURNABOUT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2666, 1, 'TROIS', '3', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2667, 2, 'TROIS', '3', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2668, 1, 'TROISIEME', 'TROISIEME', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2669, 1, 'TRPK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2670, 1, 'TRPRK', 'TRAILER PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2671, 1, 'TSSE', 'TERRASSE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2672, 2, 'TSSE', 'TERRASEE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2677, 1, 'TURNABOUT', 'TURNABOUT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2684, 1, 'TW HY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2685, 1, 'TW RD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2686, 1, 'TWELFTH', '12', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2687, 2, 'TWELFTH', '12', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2688, 1, 'TWELVE', '12', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2689, 2, 'TWELVE', '12', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2690, 1, 'TWELVE MILE', 'TWELVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2691, 1, 'TWENTIETH', '20', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2692, 2, 'TWENTIETH', '20', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2693, 1, 'TWENTY', '20', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2694, 2, 'TWENTY', '20', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2695, 1, 'TWENTY EIGHT', '28', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2696, 2, 'TWENTY EIGHT', '28', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2697, 1, 'TWENTY EIGHTH', '28', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2698, 2, 'TWENTY EIGHTH', '28', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2699, 1, 'TWENTY FIRST', '21', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2700, 2, 'TWENTY FIRST', '21', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2701, 1, 'TWENTY FIFTH', '25', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2702, 2, 'TWENTY FIFTH', '25', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2703, 1, 'TWENTY FIVE', '25', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2704, 2, 'TWENTY FIVE', '25', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2705, 1, 'TWENTY FOURTH', '24', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2706, 2, 'TWENTY FOURTH', '24', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2707, 1, 'TWENTY FOUR', '24', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2708, 2, 'TWENTY FOUR', '24', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2709, 1, 'TWENTY MILE', 'TWENTY MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2710, 1, 'TWENTY NINE', '29', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2711, 2, 'TWENTY NINE', '29', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2712, 1, 'TWENTY NINTH', '29', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2713, 2, 'TWENTY NINTH', '29', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2613, 2, 'TRACE', 'TRCE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2638, 2, 'TRCE', 'TRCE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2615, 1, 'TRAFFICWAY', 'TRFY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2603, 2, 'TR', 'TRL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2714, 1, 'TWENTY ONE', '21', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2715, 2, 'TWENTY ONE', '21', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2716, 1, 'TWENTY SECOND', '22', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2717, 2, 'TWENTY SECOND', '22', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2718, 1, 'TWENTY SEVEN', '27', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2719, 2, 'TWENTY SEVEN', '27', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2720, 1, 'TWENTY SEVENTH', '27', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2721, 2, 'TWENTY SEVENTH', '27', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2722, 1, 'TWENTY SIX', '26', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2723, 2, 'TWENTY SIX', '26', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2724, 1, 'TWENTY SIXTH', '26', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2725, 2, 'TWENTY SIXTH', '26', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2726, 1, 'TWENTY THIRD', '23', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2727, 2, 'TWENTY THIRD', '23', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2728, 1, 'TWENTY THREE', '23', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2729, 2, 'TWENTY THREE', '23', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2730, 1, 'TWENTY THREE MILE', 'TWENTY THREE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2731, 1, 'TWENTY TWO', '22', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2732, 2, 'TWENTY TWO', '22', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2733, 1, 'TWHY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2734, 1, 'TWNH', 'TOWNHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2735, 1, 'TWNHS', 'TOWNHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2736, 1, 'TWNHWY', 'TOWN HIGHWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2737, 2, 'TWNHWY', 'TOWN HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2738, 1, 'TWNRD', 'TOWN ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2739, 2, 'TWNRD', 'TOWN ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2740, 1, 'TWO', '2', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2741, 2, 'TWO', '2', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2742, 1, 'TWO MILE', 'TWO MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2743, 1, 'TWP', 'TOWNSHIP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2744, 2, 'TWP', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2745, 1, 'TWP HIGHWAY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2746, 1, 'TWP HIWAY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2747, 1, 'TWP HWY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2748, 1, 'TWP HY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2749, 1, 'TWP RD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2750, 1, 'TWP ROAD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2751, 1, 'TWPHWY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2752, 1, 'TWPHY', 'TOWNSHIP HIGHWAY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2753, 1, 'TWPRD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2754, 1, 'TWPROAD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2755, 1, 'TWR', 'TOWER', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2756, 2, 'TWR', 'TOWER', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2757, 1, 'TWRD', 'TOWNSHIP ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2758, 1, 'TWRS', 'TOWERS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2759, 2, 'TWRS', 'TOWERS', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2760, 3, 'TWRS', 'TOWERS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2761, 1, 'U', 'UNIVERSITY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2762, 2, 'U', 'U', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2772, 1, 'UN', 'UNION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2773, 2, 'UN', '1', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2774, 3, 'UN', '1', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2775, 1, 'UN RD', 'UNNAMED ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2777, 1, 'UNI', 'UNIVERSITY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2778, 1, 'UNION', 'UNION', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2779, 1, 'UNIT', 'UNIT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2780, 1, 'UNITE', 'UNITE', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2783, 1, 'UNITED STATES LOOP', 'US LOOP', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2784, 1, 'UNIV', 'UNIVERSITY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2785, 2, 'UNIV', 'UNIVERSITY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2786, 1, 'UNIVD', 'UNIVERSITY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2787, 2, 'UNIVD', 'UNIVERSITY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2788, 1, 'UNIVERSIDAD', 'UNIVERSIDAD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2789, 2, 'UNIVERSIDAD', 'UNIVERSIDAD', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2790, 1, 'UNIVERSITY', 'UNIVERSITY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2791, 2, 'UNIVERSITY', 'UNIVERSITY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2792, 3, 'UNIVERSITY', 'UNIVERSITY', 19, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2793, 1, 'UNNAMED ROAD', 'UNNAMED ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2796, 1, 'UNRD', 'UNNAMED ROAD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2797, 1, 'UNT', 'UNIT', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2798, 1, 'UP', 'UP', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2799, 2, 'UP', 'UP', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2800, 1, 'UPPER', 'UPPER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2801, 2, 'UPPER', 'UPPER', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2802, 1, 'UPPR', 'UPPER', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2803, 2, 'UPPR', 'UPPER', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2804, 1, 'UPSTAIRS', 'UPSTAIRS', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2806, 1, 'US FOREST SERVICE ROAD', 'US FOREST SERVICE ROAD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2812, 1, 'US LOOP', 'US LOOP', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2813, 1, 'US LP', 'US LOOP', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2817, 1, 'USFS RD', 'US FOREST SERVICE RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2818, 1, 'USFSR', 'US FOREST SERVICE RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2822, 1, 'USLP', 'US LOOP', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2826, 1, 'VAL', 'VALLEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2827, 1, 'VALL', 'VALLEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2828, 1, 'VALLEY', 'VALLEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2829, 1, 'VALLY', 'VALLEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2830, 1, 'VER', 'VEREDA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2831, 1, 'VEREDA', 'VEREDA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2834, 1, 'VIADUCT', 'VIADUCT', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2835, 1, 'VIEW', 'VIEW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2839, 3, 'VILL', 'VILLAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2840, 1, 'VILLA', 'VILLA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2841, 2, 'VILLA', 'VILLA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2794, 1, 'UNP', 'UPAS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2776, 1, 'UNDERPASS', 'UPAS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2795, 1, 'UNPS', 'UPAS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2832, 2, 'VI', 'VIA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2833, 1, 'VIA', 'VIA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2836, 2, 'VIEW', 'VW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2837, 1, 'VILL', 'VLG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2842, 3, 'VILLA', 'VILLA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2845, 3, 'VILLAG', 'VILLAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2848, 3, 'VILLAGE', 'VILLAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2849, 1, 'VILLAS', 'VILLA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2850, 1, 'VILLE', 'VILLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2853, 3, 'VILLG', 'VILLAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2857, 3, 'VILLIAGE', 'VILLAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2858, 1, 'VIS', 'VISTA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2860, 1, 'VISTA', 'VISTA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2862, 1, 'VIVI', 'VIVIENDA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2863, 1, 'VIVIENDA', 'VIVIENDA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2864, 1, 'VL', 'VILLE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2868, 3, 'VLG', 'VILLAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2871, 3, 'VLGE', 'VILLAGE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2872, 1, 'VLLA', 'VILLA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2873, 2, 'VLLA', 'VILLA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2874, 1, 'VLY', 'VALLEY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2875, 1, 'VOIE', 'VOIE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2876, 1, 'VRDA', 'VEREDA', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2877, 1, 'VW', 'VIEW', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2882, 1, 'WALKWAY', 'WALKWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2883, 1, 'WALKWY', 'WALKWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2885, 1, 'WAREHOUSE', 'WAREHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2886, 2, 'WAREHOUSE', 'WAREHOUSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2887, 1, 'WATERWAY', 'WATERWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2889, 1, 'WD', 'WYND', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2890, 1, 'WDS', 'WOODS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2892, 1, 'WELLS', 'WELLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2894, 1, 'WESTBOUND', 'WESTBOUND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2895, 2, 'WESTBOUND', 'WESTBOUND', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2896, 1, 'WHARF', 'WHARF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2897, 2, 'WHARF', 'WHARF', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2898, 1, 'WHF', 'WHARF', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2899, 2, 'WHF', 'WHARF', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2900, 1, 'WHS', 'WAREHOUSE', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2901, 2, 'WHS', 'WAREHOUSE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2902, 1, 'WILDLIFE MGMT AREA', 'WILDLIFE AREA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2904, 1, 'WKWY', 'WALKWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2905, 1, 'WLKWY', 'WALKWAY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2906, 1, 'WLS', 'WELLS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2907, 1, 'WMA', 'WILDLIFE AREA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2908, 1, 'WO', 'WOOD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2909, 1, 'WOOD', 'WOOD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2910, 2, 'WOOD', 'WOOD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2911, 1, 'WOODS', 'WOODS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2912, 1, 'WTRWY', 'WATERWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2913, 1, 'WWY', 'WATERWAY', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2916, 1, 'WYND', 'WYND', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2920, 1, 'XRDS', 'CROSSROADS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2923, 1, 'YARD', 'YARD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2924, 1, 'YARDS', 'YARDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2925, 1, 'YD', 'YARD', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2926, 1, 'YDS', 'YARDS', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2927, 1, 'ZANJA', 'ZANJA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2928, 1, 'ZERO', '0', 0, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2929, 1, 'ZERO', '0', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2930, 1, 'ZNJA', 'ZANJA', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (197, 4, 'AL', 'ALY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (196, 2, 'AL', 'ALY', 11, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (216, 2, 'ANNEX', 'ANX', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (214, 2, 'ANEX', 'ANX', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (218, 2, 'ANNX', 'ANX', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (220, 2, 'ANX', 'ANX', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (239, 2, 'ARC', 'ARC', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (241, 2, 'ARCADE', 'ARC', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2879, 1, 'W', 'W', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2880, 2, 'W', 'W', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2891, 1, 'WE', 'W', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2893, 1, 'WEST', 'W', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (264, 1, 'AVE', 'AVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (265, 1, 'AVEN', 'AVE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (298, 2, 'BEACH', 'BCH', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (289, 2, 'BCH', 'BCH', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (303, 1, 'BH', 'BCH', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (324, 2, 'BND', 'BND', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (296, 1, 'BE', 'BND', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (300, 2, 'BEND', 'BND', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (314, 2, 'BLF', 'BLF', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (319, 2, 'BLUFF', 'BLF', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (321, 1, 'BLVD', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (320, 1, 'BLV', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (304, 1, 'BL', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (290, 1, 'BD', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (338, 1, 'BOUL', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (339, 1, 'BOULEVARD', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (340, 1, 'BOULV', 'BLVD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (353, 1, 'BRG', 'BRG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (332, 1, 'BOT', 'BTM', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (334, 1, 'BOTTM', 'BTM', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (336, 1, 'BOTTOM', 'BTM', 17, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (412, 1, 'BYP', 'BYP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (420, 1, 'BYPS', 'BYP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (409, 1, 'BY PASS', 'BYP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (418, 1, 'BYPASS', 'BYP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (345, 2, 'BP', 'BYP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (416, 1, 'BYPAS', 'BYP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (414, 1, 'BYPA', 'BYP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (344, 1, 'BP', 'BYP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (466, 2, 'CEN', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (464, 1, 'CE', 'CTR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (495, 1, 'CIR', 'CIR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (498, 1, 'CIRCLE', 'CIR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (497, 1, 'CIRCL', 'CIR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (508, 1, 'CL', 'CIR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (526, 2, 'CLUB', 'CLB', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (511, 2, 'CLB', 'CLB', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (525, 1, 'CLUB', 'CLB', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (510, 1, 'CLB', 'CLB', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (730, 1, 'CTY HIGHWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (548, 1, 'CNTY HWY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (547, 1, 'CNTY HIWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (546, 1, 'CNTY HIGHWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (568, 1, 'COHWY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (638, 1, 'COUNTY HWY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (560, 1, 'CO HWY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (559, 1, 'CO HIWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (732, 1, 'CTY HWY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (637, 1, 'COUNTY HIWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (558, 1, 'CO HIGHWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (636, 1, 'COUNTY HIGHWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (731, 1, 'CTY HIWAY', 'CO HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (561, 1, 'CO RD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (563, 1, 'CO ROAD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (733, 1, 'CTY RD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (429, 1, 'C R', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (639, 1, 'COUNTY RD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (641, 1, 'COUNTY ROAD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (646, 1, 'COUNTY TRUNK', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (735, 1, 'CTY ROAD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (670, 2, 'CR', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (549, 1, 'CNTY RD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (551, 1, 'CNTY ROAD', 'CO RD', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (613, 1, 'CORD', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (738, 1, 'CTY RT', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (566, 1, 'CO RT', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (567, 1, 'CO RTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (645, 1, 'COUNTY RTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (644, 1, 'COUNTY RT', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (739, 1, 'CTY RTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (626, 1, 'CORT', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (627, 1, 'CORTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (565, 1, 'CO ROUTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (555, 1, 'CNTY RTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (643, 1, 'COUNTY ROUTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (554, 1, 'CNTY RT', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (553, 1, 'CNTY ROUTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (737, 1, 'CTY ROUTE', 'CO RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (681, 1, 'CRNR', 'COR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (615, 1, 'CORNER', 'COR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (535, 1, 'CNR', 'COR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (619, 2, 'CORNERS', 'CORS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (611, 1, 'COR', 'CORS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (622, 2, 'CORS', 'CORS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (430, 2, 'C R', 'CO RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (705, 1, 'CRST', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (675, 1, 'CRES', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (669, 1, 'CR', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (678, 1, 'CRESENT', 'CRES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (487, 1, 'CG', 'XING', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (690, 1, 'CROSSING', 'XING', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (699, 1, 'CRSG', 'XING', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (703, 1, 'CRSSNG', 'XING', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2917, 1, 'XING', 'XING', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2919, 1, 'XRD', 'XRD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (693, 1, 'CROSSROAD', 'XRD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (724, 1, 'CTR', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (541, 1, 'CNTR', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (720, 1, 'CTER', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (543, 1, 'CNTRE', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (726, 1, 'CTRO', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (475, 1, 'CENTR', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (482, 1, 'CENTRO', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (481, 1, 'CENTRES', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (478, 1, 'CENTRE', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (465, 1, 'CEN', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (467, 1, 'CENT', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (469, 1, 'CENTE', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (471, 1, 'CENTER', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (474, 1, 'CENTERS', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (537, 1, 'CNT', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (539, 1, 'CNTER', 'CTR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (658, 2, 'COURTS', 'CTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (728, 2, 'CTS', 'CTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (712, 1, 'CRV', 'CURV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (747, 2, 'CURVE', 'CURV', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (756, 2, 'DALE', 'DL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (902, 4, 'EST', 'EST', 22, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (905, 3, 'ESTATE', 'ESTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (901, 3, 'EST', 'ESTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (908, 3, 'ESTATES', 'ESTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (913, 3, 'ESTS', 'ESTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (914, 1, 'ET', 'ESTS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (912, 2, 'ESTS', 'ESTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (907, 2, 'ESTATES', 'ESTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (904, 2, 'ESTATE', 'ESTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (900, 2, 'EST', 'ESTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2922, 1, 'XWY', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2921, 1, 'XWAY', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (933, 1, 'EXPW', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (928, 1, 'EXP', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (929, 1, 'EXPR', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (931, 1, 'EXPRESS', 'EXPY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (943, 1, 'EXTENSION', 'EXT', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (945, 1, 'EXTN', 'EXT', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (940, 1, 'EXTEN', 'EXT', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (947, 1, 'EXTSN', 'EXT', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (937, 1, 'EXT', 'EXT', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (920, 2, 'EX', 'EXT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (941, 2, 'EXTEN', 'EXT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (946, 2, 'EXTN', 'EXT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (948, 2, 'EXTSN', 'EXT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (938, 2, 'EXT', 'EXT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (944, 2, 'EXTENSION', 'EXT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (971, 2, 'FIELD', 'FLD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1109, 1, 'FREEWY', 'FWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1141, 2, 'GARDENS', 'GDNS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1133, 4, 'GA', 'GDNS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1155, 2, 'GDS', 'GDNS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1152, 2, 'GDNS', 'GDNS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1578, 2, 'MDWS', 'MDWS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1150, 1, 'GDN', 'GDN', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1153, 3, 'GDNS', 'GDNS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1142, 3, 'GARDENS', 'GDNS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1167, 2, 'GLEN', 'GLN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1169, 2, 'GLN', 'GLN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1163, 1, 'GL', 'GLN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1177, 2, 'GREEN', 'GRN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1175, 2, 'GR', 'GRN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1181, 2, 'GRN', 'GRN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1146, 2, 'GATEWAY', 'GTWY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1195, 2, 'GTWY', 'GTWY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1193, 2, 'GTWAY', 'GTWY', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1212, 3, 'HARBR', 'HBR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1209, 3, 'HARBOUR', 'HBR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1298, 3, 'HRBR', 'HBR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1301, 3, 'HRBOR', 'HBR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1261, 2, 'HIWAY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1240, 2, 'HGY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1249, 2, 'HIGHWAY', 'HWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1258, 2, 'HILL', 'HL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1268, 2, 'HL', 'HL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1274, 1, 'HO', 'HOLW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1281, 2, 'HOLW', 'HOLW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1277, 2, 'HOL', 'HOLW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1279, 2, 'H0LL0W', 'HOLW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1270, 2, 'HLLW', 'HOLW', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1231, 3, 'HGT', 'HTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1313, 3, 'HTS', 'HTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1234, 3, 'HGTS', 'HTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1226, 3, 'HEIGHTS', 'HTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1308, 3, 'HT', 'HTS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1242, 1, 'HI', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1332, 1, 'HYWY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1319, 1, 'HWAY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1322, 1, 'HWY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1248, 1, 'HIGHWAY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1260, 1, 'HIWAY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1254, 1, 'HIGHWY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1328, 1, 'HY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1235, 1, 'HGWY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1239, 1, 'HGY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1264, 1, 'HIWY', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1317, 1, 'HW', 'HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1335, 2, 'I', 'I-', 18, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1423, 2, 'JUNC', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1429, 2, 'JUNCTION', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1432, 2, 'JUNCTN', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1410, 2, 'JCTION', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1413, 2, 'JCTN', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1419, 2, 'JNCT', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1407, 2, 'JCT', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1426, 2, 'JUNCT', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1435, 2, 'JUNCTON', 'JCT', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1418, 1, 'JNCT', 'JCT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1505, 1, 'LN', 'LN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1523, 2, 'LODGE', 'LDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1475, 2, 'LDG', 'LDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1478, 2, 'LDGE', 'LDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1455, 2, 'LA', 'LN', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1507, 2, 'LNDG', 'LNDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1459, 2, 'LAND', 'LNDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1510, 2, 'LNDNG', 'LNDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1465, 2, 'LANDINGS', 'LNDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1462, 2, 'LANDING', 'LNDG', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1477, 1, 'LDGE', 'LDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1522, 1, 'LODGE', 'LDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1474, 1, 'LDG', 'LDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1527, 1, 'LOOP', 'LOOP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1528, 2, 'LOOP', 'LOOP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1538, 2, 'LP', 'LOOP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1512, 1, 'LO', 'LOOP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1537, 1, 'LP', 'LOOP', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1556, 1, 'MALL IN', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2232, 1, 'SHOPPING MALL', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2217, 1, 'SHOP MALL', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1552, 1, 'MAL', 'MALL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2241, 1, 'SHP ML', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1554, 2, 'MALL', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2248, 1, 'SHPML', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1614, 2, 'ML', 'MALL', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1553, 1, 'MALL', 'MALL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1557, 1, 'MANOR', 'MNR', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1583, 2, 'MEADOWS', 'MDWS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1592, 3, 'MEWS', 'MEWS', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1620, 2, 'MNR', 'MNR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1560, 1, 'MANORS', 'MNR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1558, 2, 'MANOR', 'MNR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1622, 1, 'MNRS', 'MNR', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1648, 1, 'MOTORWAY', 'MTWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1666, 1, 'MTWY', 'MTWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1667, 1, 'MU', 'MT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1650, 2, 'MOUNT', 'MT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1652, 2, 'MOUNTAIN', 'MTN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1807, 2, 'ORCHARD', 'ORCH', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1814, 1, 'OVAL', 'OVAL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1815, 1, 'OVERPASS', 'OPAS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1816, 1, 'OVPS', 'OPAS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1884, 2, 'PK', 'PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1946, 2, 'PRK', 'PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1842, 2, 'PARK', 'PARK', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1981, 1, 'PWKY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1846, 1, 'PARKWAY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1890, 1, 'PKY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1847, 1, 'PARKWY', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1887, 1, 'PKW', 'PKWY', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1854, 1, 'PASS', 'PASS', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1855, 1, 'PASSAGE', 'PSGE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1856, 1, 'PATH', 'PATH', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1878, 1, 'PIKE', 'PIKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1886, 1, 'PKE', 'PIKE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1880, 2, 'PINES', 'PNES', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1892, 1, 'PLACE', 'PL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1901, 1, 'PLC', 'PL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1891, 1, 'PL', 'PL', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1899, 1, 'PLAZA', 'PLZ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1907, 1, 'PLZA', 'PLZ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1905, 1, 'PLZ', 'PLZ', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1906, 2, 'PLZ', 'PLZ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1908, 2, 'PLZA', 'PLZ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2242, 1, 'SHP PL', 'PLZ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2249, 1, 'SHPPL', 'PLZ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1900, 2, 'PLAZA', 'PLZ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2220, 1, 'SHOP PLZ', 'PLZ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2234, 1, 'SHOPPING PLAZA', 'PLZ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1972, 2, 'PT', 'PT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1922, 2, 'PORT', 'PRT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1967, 2, 'PRT', 'PRT', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2068, 1, 'RMP', 'RAMP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2013, 1, 'RAMP', 'RAMP', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2031, 2, 'RDG', 'RDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2054, 2, 'RIDGE', 'RDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2035, 1, 'RE', 'RDG', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2074, 1, 'ROAD', 'RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2029, 1, 'RD', 'RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2073, 1, 'RO', 'RTE', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2103, 2, 'RTE', 'RTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2007, 1, 'R T', 'RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2008, 2, 'R T', 'RTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2079, 1, 'ROUTE', 'RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2766, 1, 'U S HIWAY', 'US HWY', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (1, 1, '#', '#', 16, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2, 2, '#', '#', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (3, 1, '&', 'AND', 13, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (4, 2, '&', 'AND', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (5, 3, '&', 'AND', 7, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (6, 1, '-', '-', 9, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (7, 1, '1 / 2', '1/2', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (8, 1, '1 / 2 MILE', '1/2 MI', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (9, 1, '1 / 3', '1/3', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (10, 1, '1 / 4', '1/4', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (11, 1, '1 MI', 'ONE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (12, 1, '1 MILE', 'ONE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (13, 1, '1/2', '1/2', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (14, 1, '1/2 MILE', '1/2 MI', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (15, 1, '1/3', '1/3', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (16, 1, '1/4', '1/4', 25, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (17, 1, '10 MI', 'TEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (18, 1, '10 MILE', 'TEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (19, 1, '10MI', 'TEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (20, 1, '100 MILE', 'ONE HUNDRED MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (21, 1, '11 MI', 'ELEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (22, 1, '11 MILE', 'ELEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (23, 1, '11MI', 'ELEVEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (24, 1, '12 MI', 'TWELVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (25, 1, '12 MILE', 'TWELVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (26, 1, '12MI', 'TWELVE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (27, 1, '13 MI', 'THIRTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (28, 1, '13 MILE', 'THIRTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (29, 1, '13MI', 'THIRTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (30, 1, '14 MI', 'FOURTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (31, 1, '14 MILE', 'FOURTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (32, 1, '14MI', 'FOURTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (33, 1, '15 MI', 'FIFTEEN MI', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (34, 1, '15 MILE', 'FIFTEEN MI', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (35, 1, '15MI', 'FIFTEEN MI', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (36, 1, '16 MI', 'SIXTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (37, 1, '16 MILE', 'SIXTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (38, 1, '16MI', 'SIXTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (39, 1, '17 MI', 'SEVENTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (40, 1, '17 MILE', 'SEVENTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (41, 1, '17MI', 'SEVENTEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (42, 1, '18 MI', 'EIGHTEEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (43, 1, '18 MILE', 'EIGHTEEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (44, 1, '18MI', 'EIGHTEEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (45, 1, '19 MI', 'NINETEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (46, 1, '19 MILE', 'NINETEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (47, 1, '19MI', 'NINETEEN MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (48, 1, '1ER', 'PREMIERE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (49, 1, '1ER', '1', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (50, 1, '1MI', 'ONE MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (51, 1, '1RE', 'PREMIERE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (52, 1, '1RE', '1', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (53, 1, '1ST', '1', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (54, 2, '1ST', '1', 15, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (55, 1, '2 MI', 'TWO MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (56, 1, '2 MILE', 'TWO MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (57, 1, '20 MI', 'TWENTY MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (58, 1, '20 MILE', 'TWENTY MILE', 1, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (211, 1, 'AND', 'AND', 13, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2080, 2, 'ROUTE', 'RTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2082, 1, 'ROUTE NO', 'RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2083, 2, 'ROUTE NO', 'RTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2085, 2, 'ROUTE NUMBER', 'RTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2098, 1, 'RT', 'RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2099, 2, 'RT', 'RTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2100, 1, 'RT NO', 'RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2101, 2, 'RT NO', 'RTE', 8, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2102, 1, 'RTE', 'RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2084, 1, 'ROUTE NUMBER', 'RTE', 6, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2069, 1, 'RN', 'RUN', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2479, 1, 'SVRD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2152, 1, 'SERVICE RD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2153, 1, 'SERVICE ROAD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2478, 1, 'SVC RD', 'SVC RD', 2, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2340, 1, 'SPUR', 'SPUR', 3, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2349, 2, 'SQU', 'SQ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2347, 2, 'SQR', 'SQ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2345, 2, 'SQ', 'SQ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2353, 2, 'SQURE', 'SQ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2351, 2, 'SQUARE', 'SQ', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2418, 2, 'STN', 'STA', 24, false); INSERT INTO pagc_lex (id, seq, word, stdword, token, is_custom) VALUES (2935, 2, 'NORTHWEST', 'NW', 22, false); SELECT pg_catalog.setval('pagc_lex_id_seq', (SELECT greatest((SELECT MAX(id) FROM pagc_lex),50000)), true); -- set default to false so all we input will be treated as no custom -- ALTER TABLE tiger.pagc_rules ALTER COLUMN is_custom SET DEFAULT false; INSERT INTO pagc_rules (id, rule) VALUES (1, '1 -1 5 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (2, '1 3 -1 5 3 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (3, '1 22 -1 5 7 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (4, '1 22 3 -1 5 7 3 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (5, '1 2 -1 5 6 -1 2 13'); INSERT INTO pagc_rules (id, rule) VALUES (6, '1 2 3 -1 5 6 3 -1 2 13'); INSERT INTO pagc_rules (id, rule) VALUES (7, '1 2 22 -1 5 6 7 -1 2 13'); INSERT INTO pagc_rules (id, rule) VALUES (8, '1 2 22 3 -1 5 6 7 3 -1 2 13'); INSERT INTO pagc_rules (id, rule) VALUES (9, '18 -1 5 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (10, '18 3 -1 5 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (11, '18 22 -1 5 7 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (12, '18 22 3 -1 5 7 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (13, '18 2 -1 5 6 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (14, '18 2 3 -1 5 6 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (15, '18 2 22 -1 5 6 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (16, '18 2 22 3 -1 5 6 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (17, '2 -1 5 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (18, '2 3 -1 5 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (19, '2 22 -1 5 7 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (20, '2 22 3 -1 5 7 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (21, '2 2 -1 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (22, '2 2 3 -1 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (23, '2 2 22 -1 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (24, '2 2 22 3 -1 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (25, '22 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (26, '22 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (27, '22 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (28, '22 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (29, '22 2 -1 5 6 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (30, '22 2 3 -1 5 6 3 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (31, '22 2 22 -1 5 6 7 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (32, '22 2 22 3 -1 5 6 7 3 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (33, '22 1 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (34, '22 1 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (35, '22 1 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (36, '22 1 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (37, '22 1 2 -1 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (38, '22 1 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (39, '22 1 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (40, '22 1 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (41, '1 22 -1 5 5 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (42, '1 22 3 -1 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (43, '1 22 22 -1 5 5 7 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (44, '1 22 22 3 -1 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (45, '1 22 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (46, '1 22 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (47, '1 22 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (48, '1 22 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (49, '1 2 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (50, '1 2 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (51, '1 2 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (52, '1 2 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (53, '1 2 2 -1 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (54, '1 2 2 3 -1 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (55, '1 2 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (56, '1 2 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (57, '2 1 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (58, '2 1 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (59, '2 1 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (60, '2 1 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (61, '2 1 2 -1 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (62, '2 1 2 3 -1 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (63, '2 1 2 22 -1 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (64, '2 1 2 22 3 -1 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (65, '15 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (66, '15 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (67, '15 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (68, '15 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (69, '16 0 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (70, '16 0 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (71, '24 2 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (72, '24 2 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (73, '24 2 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (74, '24 2 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (75, '24 2 2 -1 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (76, '24 2 2 3 -1 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (77, '24 2 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (78, '24 2 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (79, '0 22 -1 5 5 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (80, '0 22 3 -1 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (81, '0 22 22 -1 5 5 7 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (82, '0 22 22 3 -1 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (83, '0 22 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (84, '0 22 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (85, '0 22 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (86, '0 22 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (87, '2 24 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (88, '2 24 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (89, '2 24 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (90, '2 24 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (91, '2 24 2 -1 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (92, '2 24 2 3 -1 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (93, '2 24 2 22 -1 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (94, '2 24 2 22 3 -1 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (95, '2 22 -1 5 5 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (96, '2 22 3 -1 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (97, '2 22 22 -1 5 5 7 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (98, '2 22 22 3 -1 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (99, '2 22 2 -1 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (100, '2 22 2 3 -1 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (101, '2 22 2 22 -1 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (102, '2 22 2 22 3 -1 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (103, '2 0 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (104, '2 0 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (105, '2 0 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (106, '2 0 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (107, '2 0 2 -1 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (108, '2 0 2 3 -1 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (109, '2 0 2 22 -1 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (110, '2 0 2 22 3 -1 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (111, '2 18 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (112, '2 18 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (113, '2 18 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (114, '2 18 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (115, '2 18 2 -1 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (116, '2 18 2 3 -1 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (117, '2 18 2 22 -1 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (118, '2 18 2 22 3 -1 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (119, '2 2 -1 5 5 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (120, '2 2 3 -1 5 5 3 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (121, '2 2 22 -1 5 5 7 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (122, '2 2 22 3 -1 5 5 7 3 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (123, '2 2 2 -1 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (124, '2 2 2 3 -1 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (125, '2 2 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (126, '2 2 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (127, '18 2 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (128, '18 2 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (129, '18 2 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (130, '18 2 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (131, '18 2 2 -1 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (132, '18 2 2 3 -1 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (133, '18 2 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (134, '18 2 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (135, '1 18 2 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (136, '1 18 2 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (137, '1 18 2 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (138, '1 18 2 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (139, '1 18 2 2 -1 5 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (140, '1 18 2 2 3 -1 5 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (141, '1 18 2 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (142, '1 18 2 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (143, '0 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (144, '0 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (145, '0 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (146, '0 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (147, '0 2 -1 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (148, '0 2 3 -1 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (149, '0 2 22 -1 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (150, '0 2 22 3 -1 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (151, '0 18 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (152, '0 18 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (153, '0 18 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (154, '0 18 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (155, '0 18 2 -1 5 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (156, '0 18 2 3 -1 5 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (157, '0 18 2 22 -1 5 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (158, '0 18 2 22 3 -1 5 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (159, '0 1 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (160, '0 1 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (161, '0 1 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (162, '0 1 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (163, '0 1 2 -1 5 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (164, '0 1 2 3 -1 5 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (165, '0 1 2 22 -1 5 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (166, '0 1 2 22 3 -1 5 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (167, '1 2 2 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (168, '1 2 2 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (169, '1 2 2 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (170, '1 2 2 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (171, '1 2 2 2 -1 5 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (172, '1 2 2 2 3 -1 5 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (173, '1 2 2 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (174, '1 2 2 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (175, '22 2 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (176, '22 2 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (177, '22 2 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (178, '22 2 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (179, '22 2 2 -1 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (180, '22 2 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (181, '22 2 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (182, '22 2 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (183, '14 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (184, '14 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (185, '14 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (186, '14 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (187, '14 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (188, '14 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (189, '14 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (190, '14 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (191, '15 1 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (192, '15 1 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (193, '15 1 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (194, '15 1 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (195, '15 1 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (196, '15 1 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (197, '15 1 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (198, '15 1 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (199, '24 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (200, '24 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (201, '24 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (202, '24 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (203, '24 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (204, '24 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (205, '24 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (206, '24 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (207, '24 24 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (208, '24 24 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (209, '24 24 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (210, '24 24 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (211, '24 24 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (212, '24 24 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (213, '24 24 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (214, '24 24 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (215, '24 1 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (216, '24 1 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (217, '24 1 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (218, '24 1 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (219, '24 1 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (220, '24 1 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (221, '24 1 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (222, '24 1 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (223, '25 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (224, '25 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (225, '25 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (226, '25 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (227, '25 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (228, '25 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (229, '25 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (230, '25 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (231, '23 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (232, '23 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (233, '23 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (234, '23 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (235, '23 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (236, '23 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (237, '23 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (238, '23 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (239, '0 13 0 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (240, '0 13 0 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (241, '0 13 0 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (242, '0 13 0 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (243, '0 13 0 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (244, '0 13 0 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (245, '0 13 0 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (246, '0 13 0 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (247, '0 25 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (248, '0 25 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (249, '0 25 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (250, '0 25 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (251, '0 25 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (252, '0 25 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (253, '0 25 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (254, '0 25 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (255, '11 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (256, '11 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (257, '11 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (258, '11 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (259, '11 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (260, '11 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (261, '11 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (262, '11 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (263, '3 0 -1 3 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (264, '3 0 3 -1 3 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (265, '3 0 22 -1 3 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (266, '3 0 22 3 -1 3 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (267, '3 0 2 -1 3 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (268, '3 0 2 3 -1 3 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (269, '3 0 2 22 -1 3 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (270, '3 0 2 22 3 -1 3 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (271, '3 1 -1 3 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (272, '3 1 3 -1 3 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (273, '3 1 22 -1 3 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (274, '3 1 22 3 -1 3 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (275, '3 1 2 -1 3 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (276, '3 1 2 3 -1 3 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (277, '3 1 2 22 -1 3 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (278, '3 1 2 22 3 -1 3 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (279, '18 13 18 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (280, '18 13 18 3 -1 5 5 3 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (281, '18 13 18 22 -1 5 5 3 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (282, '18 13 18 22 3 -1 5 5 3 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (283, '18 13 18 2 -1 5 5 3 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (284, '18 13 18 2 3 -1 5 5 3 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (285, '18 13 18 2 22 -1 5 5 3 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (286, '18 13 18 2 22 3 -1 5 5 3 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (287, '18 0 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (288, '18 0 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (289, '18 0 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (290, '18 0 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (291, '18 0 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (292, '18 0 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (293, '18 0 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (294, '18 0 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (295, '18 18 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (296, '18 18 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (297, '18 18 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (298, '18 18 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (299, '18 18 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (300, '18 18 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (301, '18 18 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (302, '18 18 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (303, '18 18 18 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (304, '18 18 18 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (305, '18 18 18 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (306, '18 18 18 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (307, '18 18 18 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (308, '18 18 18 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (309, '18 18 18 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (310, '18 18 18 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (311, '18 18 1 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (312, '18 18 1 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (313, '18 18 1 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (314, '18 18 1 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (315, '18 18 1 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (316, '18 18 1 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (317, '18 18 1 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (318, '18 18 1 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (319, '18 1 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (320, '18 1 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (321, '18 1 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (322, '18 1 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (323, '18 1 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (324, '18 1 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (325, '18 1 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (326, '18 1 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (327, '5 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (328, '5 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (329, '5 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (330, '5 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (331, '5 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (332, '5 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (333, '5 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (334, '5 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (335, '21 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (336, '21 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (337, '21 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (338, '21 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (339, '21 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (340, '21 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (341, '21 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (342, '21 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (343, '1 13 1 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (344, '1 13 1 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (345, '1 13 1 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (346, '1 13 1 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (347, '1 13 1 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (348, '1 13 1 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (349, '1 13 1 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (350, '1 13 1 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (351, '1 24 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (352, '1 24 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (353, '1 24 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (354, '1 24 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (355, '1 24 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (356, '1 24 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (357, '1 24 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (358, '1 24 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (359, '1 24 24 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (360, '1 24 24 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (361, '1 24 24 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (362, '1 24 24 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (363, '1 24 24 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (364, '1 24 24 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (365, '1 24 24 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (366, '1 24 24 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (367, '1 24 1 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (368, '1 24 1 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (369, '1 24 1 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (370, '1 24 1 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (371, '1 24 1 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (372, '1 24 1 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (373, '1 24 1 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (374, '1 24 1 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (375, '1 15 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (376, '1 15 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (377, '1 15 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (378, '1 15 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (379, '1 15 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (380, '1 15 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (381, '1 15 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (382, '1 15 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (383, '1 22 1 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (384, '1 22 1 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (385, '1 22 1 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (386, '1 22 1 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (387, '1 22 1 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (388, '1 22 1 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (389, '1 22 1 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (390, '1 22 1 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (391, '1 25 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (392, '1 25 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (393, '1 25 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (394, '1 25 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (395, '1 25 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (396, '1 25 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (397, '1 25 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (398, '1 25 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (399, '1 0 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (400, '1 0 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (401, '1 0 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (402, '1 0 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (403, '1 0 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (404, '1 0 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (405, '1 0 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (406, '1 0 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (407, '1 3 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (408, '1 3 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (409, '1 3 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (410, '1 3 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (411, '1 3 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (412, '1 3 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (413, '1 3 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (414, '1 3 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (415, '1 18 -1 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (416, '1 18 3 -1 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (417, '1 18 22 -1 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (418, '1 18 22 3 -1 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (419, '1 18 2 -1 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (420, '1 18 2 3 -1 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (421, '1 18 2 22 -1 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (422, '1 18 2 22 3 -1 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (423, '1 18 18 1 -1 5 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (424, '1 18 18 1 3 -1 5 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (425, '1 18 18 1 22 -1 5 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (426, '1 18 18 1 22 3 -1 5 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (427, '1 18 18 1 2 -1 5 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (428, '1 18 18 1 2 3 -1 5 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (429, '1 18 18 1 2 22 -1 5 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (430, '1 18 18 1 2 22 3 -1 5 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (431, '1 18 1 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (432, '1 18 1 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (433, '1 18 1 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (434, '1 18 1 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (435, '1 18 1 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (436, '1 18 1 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (437, '1 18 1 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (438, '1 18 1 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (439, '1 2 0 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (440, '1 2 0 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (441, '1 2 0 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (442, '1 2 0 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (443, '1 2 0 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (444, '1 2 0 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (445, '1 2 0 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (446, '1 2 0 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (447, '1 2 1 -1 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (448, '1 2 1 3 -1 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (449, '1 2 1 22 -1 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (450, '1 2 1 22 3 -1 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (451, '1 2 1 2 -1 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (452, '1 2 1 2 3 -1 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (453, '1 2 1 2 22 -1 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (454, '1 2 1 2 22 3 -1 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (455, '16 -1 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (456, '16 3 -1 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (457, '16 22 -1 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (458, '16 22 3 -1 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (459, '16 2 -1 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (460, '16 2 3 -1 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (461, '16 2 22 -1 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (462, '16 2 22 3 -1 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (463, '2 1 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (464, '2 1 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (465, '2 1 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (466, '2 1 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (467, '2 18 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (468, '2 18 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (469, '2 18 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (470, '2 18 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (471, '2 2 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (472, '2 2 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (473, '2 2 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (474, '2 2 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (475, '2 22 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (476, '2 22 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (477, '2 22 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (478, '2 22 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (479, '2 22 1 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (480, '2 22 1 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (481, '2 22 1 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (482, '2 22 1 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (483, '2 1 22 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (484, '2 1 22 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (485, '2 1 22 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (486, '2 1 22 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (487, '2 1 2 -1 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (488, '2 1 2 3 -1 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (489, '2 1 2 22 -1 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (490, '2 1 2 22 3 -1 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (491, '2 2 1 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (492, '2 2 1 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (493, '2 2 1 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (494, '2 2 1 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (495, '2 24 2 -1 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (496, '2 24 2 3 -1 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (497, '2 24 2 22 -1 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (498, '2 24 2 22 3 -1 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (499, '2 0 22 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (500, '2 0 22 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (501, '2 0 22 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (502, '2 0 22 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (503, '2 2 24 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (504, '2 2 24 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (505, '2 2 24 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (506, '2 2 24 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (507, '2 2 22 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (508, '2 2 22 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (509, '2 2 22 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (510, '2 2 22 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (511, '2 2 0 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (512, '2 2 0 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (513, '2 2 0 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (514, '2 2 0 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (515, '2 2 18 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (516, '2 2 18 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (517, '2 2 18 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (518, '2 2 18 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (519, '2 2 2 -1 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (520, '2 2 2 3 -1 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (521, '2 2 2 22 -1 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (522, '2 2 2 22 3 -1 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (523, '2 18 2 -1 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (524, '2 18 2 3 -1 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (525, '2 18 2 22 -1 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (526, '2 18 2 22 3 -1 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (527, '2 1 18 2 -1 4 5 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (528, '2 1 18 2 3 -1 4 5 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (529, '2 1 18 2 22 -1 4 5 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (530, '2 1 18 2 22 3 -1 4 5 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (531, '2 0 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (532, '2 0 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (533, '2 0 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (534, '2 0 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (535, '2 0 18 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (536, '2 0 18 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (537, '2 0 18 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (538, '2 0 18 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (539, '2 0 1 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (540, '2 0 1 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (541, '2 0 1 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (542, '2 0 1 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (543, '2 1 2 2 -1 4 5 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (544, '2 1 2 2 3 -1 4 5 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (545, '2 1 2 2 22 -1 4 5 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (546, '2 1 2 2 22 3 -1 4 5 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (547, '2 22 2 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (548, '2 22 2 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (549, '2 22 2 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (550, '2 22 2 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (551, '2 14 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (552, '2 14 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (553, '2 14 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (554, '2 14 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (555, '2 15 1 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (556, '2 15 1 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (557, '2 15 1 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (558, '2 15 1 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (559, '2 24 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (560, '2 24 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (561, '2 24 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (562, '2 24 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (563, '2 24 24 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (564, '2 24 24 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (565, '2 24 24 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (566, '2 24 24 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (567, '2 24 1 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (568, '2 24 1 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (569, '2 24 1 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (570, '2 24 1 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (571, '2 25 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (572, '2 25 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (573, '2 25 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (574, '2 25 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (575, '2 23 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (576, '2 23 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (577, '2 23 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (578, '2 23 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (579, '2 0 13 0 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (580, '2 0 13 0 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (581, '2 0 13 0 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (582, '2 0 13 0 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (583, '2 0 25 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (584, '2 0 25 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (585, '2 0 25 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (586, '2 0 25 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (587, '2 11 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (588, '2 11 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (589, '2 11 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (590, '2 11 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (591, '2 3 0 -1 4 3 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (592, '2 3 0 3 -1 4 3 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (593, '2 3 0 22 -1 4 3 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (594, '2 3 0 22 3 -1 4 3 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (595, '2 3 1 -1 4 3 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (596, '2 3 1 3 -1 4 3 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (597, '2 3 1 22 -1 4 3 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (598, '2 3 1 22 3 -1 4 3 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (599, '2 18 13 18 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (600, '2 18 13 18 3 -1 4 5 5 3 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (601, '2 18 13 18 22 -1 4 5 5 3 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (602, '2 18 13 18 22 3 -1 4 5 5 3 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (603, '2 18 0 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (604, '2 18 0 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (605, '2 18 0 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (606, '2 18 0 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (607, '2 18 18 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (608, '2 18 18 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (609, '2 18 18 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (610, '2 18 18 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (611, '2 18 18 18 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (612, '2 18 18 18 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (613, '2 18 18 18 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (614, '2 18 18 18 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (615, '2 18 18 1 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (616, '2 18 18 1 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (617, '2 18 18 1 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (618, '2 18 18 1 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (619, '2 18 1 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (620, '2 18 1 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (621, '2 18 1 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (622, '2 18 1 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (623, '2 5 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (624, '2 5 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (625, '2 5 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (626, '2 5 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (627, '2 21 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (628, '2 21 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (629, '2 21 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (630, '2 21 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (631, '2 1 13 1 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (632, '2 1 13 1 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (633, '2 1 13 1 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (634, '2 1 13 1 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (635, '2 1 24 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (636, '2 1 24 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (637, '2 1 24 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (638, '2 1 24 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (639, '2 1 24 24 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (640, '2 1 24 24 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (641, '2 1 24 24 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (642, '2 1 24 24 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (643, '2 1 24 1 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (644, '2 1 24 1 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (645, '2 1 24 1 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (646, '2 1 24 1 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (647, '2 1 15 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (648, '2 1 15 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (649, '2 1 15 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (650, '2 1 15 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (651, '2 1 22 1 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (652, '2 1 22 1 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (653, '2 1 22 1 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (654, '2 1 22 1 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (655, '2 1 25 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (656, '2 1 25 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (657, '2 1 25 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (658, '2 1 25 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (659, '2 1 0 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (660, '2 1 0 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (661, '2 1 0 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (662, '2 1 0 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (663, '2 1 3 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (664, '2 1 3 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (665, '2 1 3 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (666, '2 1 3 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (667, '2 1 18 -1 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (668, '2 1 18 3 -1 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (669, '2 1 18 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (670, '2 1 18 22 3 -1 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (671, '2 1 18 18 1 -1 4 5 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (672, '2 1 18 18 1 3 -1 4 5 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (673, '2 1 18 18 1 22 -1 4 5 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (674, '2 1 18 18 1 22 3 -1 4 5 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (675, '2 1 18 1 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (676, '2 1 18 1 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (677, '2 1 18 1 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (678, '2 1 18 1 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (679, '2 1 2 0 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (680, '2 1 2 0 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (681, '2 1 2 0 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (682, '2 1 2 0 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (683, '2 1 2 1 -1 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (684, '2 1 2 1 3 -1 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (685, '2 1 2 1 22 -1 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (686, '2 1 2 1 22 3 -1 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (687, '2 16 -1 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (688, '2 16 3 -1 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (689, '2 16 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (690, '2 16 22 3 -1 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (691, '22 1 -1 2 5 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (692, '22 1 3 -1 2 5 3 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (693, '22 1 22 -1 2 5 7 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (694, '22 1 22 3 -1 2 5 7 3 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (695, '22 1 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (696, '22 1 2 3 -1 2 5 6 3 -1 2 13'); INSERT INTO pagc_rules (id, rule) VALUES (697, '22 1 2 22 -1 2 5 6 7 -1 2 13'); INSERT INTO pagc_rules (id, rule) VALUES (698, '22 1 2 22 3 -1 2 5 6 7 3 -1 2 13'); INSERT INTO pagc_rules (id, rule) VALUES (699, '22 18 -1 2 5 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (700, '22 18 3 -1 2 5 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (701, '22 18 22 -1 2 5 7 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (702, '22 18 22 3 -1 2 5 7 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (703, '22 18 2 -1 2 5 6 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (704, '22 18 2 3 -1 2 5 6 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (705, '22 18 2 22 -1 2 5 6 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (706, '22 18 2 22 3 -1 2 5 6 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (707, '22 2 -1 2 5 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (708, '22 2 3 -1 2 5 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (709, '22 2 22 -1 2 5 7 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (710, '22 2 22 3 -1 2 5 7 3 -1 2 2'); INSERT INTO pagc_rules (id, rule) VALUES (711, '22 2 2 -1 2 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (712, '22 2 2 3 -1 2 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (713, '22 2 2 22 -1 2 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (714, '22 2 2 22 3 -1 2 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (715, '22 22 -1 2 5 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (716, '22 22 3 -1 2 5 3 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (717, '22 22 22 -1 2 5 7 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (718, '22 22 22 3 -1 2 5 7 3 -1 2 7'); INSERT INTO pagc_rules (id, rule) VALUES (719, '22 22 2 -1 2 5 6 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (720, '22 22 2 3 -1 2 5 6 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (721, '22 22 2 22 -1 2 5 6 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (722, '22 22 2 22 3 -1 2 5 6 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (723, '22 22 1 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (724, '22 22 1 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (725, '22 22 1 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (726, '22 22 1 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (727, '22 22 1 2 -1 2 5 5 6 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (728, '22 22 1 2 3 -1 2 5 5 6 3 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (729, '22 22 1 2 22 -1 2 5 5 6 7 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (730, '22 22 1 2 22 3 -1 2 5 5 6 7 3 -1 2 8'); INSERT INTO pagc_rules (id, rule) VALUES (731, '22 1 22 -1 2 5 5 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (732, '22 1 22 3 -1 2 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (733, '22 1 22 22 -1 2 5 5 7 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (734, '22 1 22 22 3 -1 2 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (735, '22 1 22 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (736, '22 1 22 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (737, '22 1 22 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (738, '22 1 22 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (739, '22 1 2 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (740, '22 1 2 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (741, '22 1 2 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (742, '22 1 2 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (743, '22 1 2 2 -1 2 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (744, '22 1 2 2 3 -1 2 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (745, '22 1 2 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (746, '22 1 2 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (747, '22 2 1 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (748, '22 2 1 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (749, '22 2 1 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (750, '22 2 1 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (751, '22 2 1 2 -1 2 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (752, '22 2 1 2 3 -1 2 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (753, '22 2 1 2 22 -1 2 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (754, '22 2 1 2 22 3 -1 2 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (755, '22 15 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (756, '22 15 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (757, '22 15 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (758, '22 15 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (759, '22 16 0 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (760, '22 16 0 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (761, '22 24 2 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (762, '22 24 2 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (763, '22 24 2 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (764, '22 24 2 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (765, '22 24 2 2 -1 2 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (766, '22 24 2 2 3 -1 2 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (767, '22 24 2 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (768, '22 24 2 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (769, '22 0 22 -1 2 5 5 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (770, '22 0 22 3 -1 2 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (771, '22 0 22 22 -1 2 5 5 7 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (772, '22 0 22 22 3 -1 2 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (773, '22 0 22 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (774, '22 0 22 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (775, '22 0 22 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (776, '22 0 22 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (777, '22 2 24 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (778, '22 2 24 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (779, '22 2 24 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (780, '22 2 24 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (781, '22 2 24 2 -1 2 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (782, '22 2 24 2 3 -1 2 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (783, '22 2 24 2 22 -1 2 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (784, '22 2 24 2 22 3 -1 2 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (785, '22 2 22 -1 2 5 5 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (786, '22 2 22 3 -1 2 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (787, '22 2 22 22 -1 2 5 5 7 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (788, '22 2 22 22 3 -1 2 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (789, '22 2 22 2 -1 2 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (790, '22 2 22 2 3 -1 2 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (791, '22 2 22 2 22 -1 2 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (792, '22 2 22 2 22 3 -1 2 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (793, '22 2 0 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (794, '22 2 0 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (795, '22 2 0 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (796, '22 2 0 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (797, '22 2 0 2 -1 2 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (798, '22 2 0 2 3 -1 2 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (799, '22 2 0 2 22 -1 2 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (800, '22 2 0 2 22 3 -1 2 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (801, '22 2 18 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (802, '22 2 18 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (803, '22 2 18 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (804, '22 2 18 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (805, '22 2 18 2 -1 2 5 5 6 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (806, '22 2 18 2 3 -1 2 5 5 6 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (807, '22 2 18 2 22 -1 2 5 5 6 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (808, '22 2 18 2 22 3 -1 2 5 5 6 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (809, '22 2 2 -1 2 5 5 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (810, '22 2 2 3 -1 2 5 5 3 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (811, '22 2 2 22 -1 2 5 5 7 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (812, '22 2 2 22 3 -1 2 5 5 7 3 -1 2 3'); INSERT INTO pagc_rules (id, rule) VALUES (813, '22 2 2 2 -1 2 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (814, '22 2 2 2 3 -1 2 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (815, '22 2 2 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (816, '22 2 2 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (817, '22 18 2 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (818, '22 18 2 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (819, '22 18 2 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (820, '22 18 2 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (821, '22 18 2 2 -1 2 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (822, '22 18 2 2 3 -1 2 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (823, '22 18 2 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (824, '22 18 2 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (825, '22 1 18 2 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (826, '22 1 18 2 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (827, '22 1 18 2 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (828, '22 1 18 2 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (829, '22 1 18 2 2 -1 2 5 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (830, '22 1 18 2 2 3 -1 2 5 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (831, '22 1 18 2 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (832, '22 1 18 2 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (833, '22 0 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (834, '22 0 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (835, '22 0 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (836, '22 0 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (837, '22 0 2 -1 2 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (838, '22 0 2 3 -1 2 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (839, '22 0 2 22 -1 2 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (840, '22 0 2 22 3 -1 2 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (841, '22 0 18 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (842, '22 0 18 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (843, '22 0 18 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (844, '22 0 18 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (845, '22 0 18 2 -1 2 5 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (846, '22 0 18 2 3 -1 2 5 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (847, '22 0 18 2 22 -1 2 5 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (848, '22 0 18 2 22 3 -1 2 5 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (849, '22 0 1 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (850, '22 0 1 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (851, '22 0 1 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (852, '22 0 1 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (853, '22 0 1 2 -1 2 5 5 6 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (854, '22 0 1 2 3 -1 2 5 5 6 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (855, '22 0 1 2 22 -1 2 5 5 6 7 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (856, '22 0 1 2 22 3 -1 2 5 5 6 7 3 -1 2 10'); INSERT INTO pagc_rules (id, rule) VALUES (857, '22 1 2 2 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (858, '22 1 2 2 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (859, '22 1 2 2 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (860, '22 1 2 2 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (861, '22 1 2 2 2 -1 2 5 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (862, '22 1 2 2 2 3 -1 2 5 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (863, '22 1 2 2 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (864, '22 1 2 2 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (865, '22 22 2 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (866, '22 22 2 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (867, '22 22 2 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (868, '22 22 2 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (869, '22 22 2 2 -1 2 5 5 6 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (870, '22 22 2 2 3 -1 2 5 5 6 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (871, '22 22 2 2 22 -1 2 5 5 6 7 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (872, '22 22 2 2 22 3 -1 2 5 5 6 7 3 -1 2 5'); INSERT INTO pagc_rules (id, rule) VALUES (873, '22 14 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (874, '22 14 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (875, '22 14 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (876, '22 14 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (877, '22 14 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (878, '22 14 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (879, '22 14 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (880, '22 14 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (881, '22 15 1 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (882, '22 15 1 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (883, '22 15 1 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (884, '22 15 1 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (885, '22 15 1 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (886, '22 15 1 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (887, '22 15 1 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (888, '22 15 1 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (889, '22 24 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (890, '22 24 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (891, '22 24 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (892, '22 24 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (893, '22 24 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (894, '22 24 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (895, '22 24 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (896, '22 24 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (897, '22 24 24 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (898, '22 24 24 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (899, '22 24 24 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (900, '22 24 24 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (901, '22 24 24 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (902, '22 24 24 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (903, '22 24 24 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (904, '22 24 24 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (905, '22 24 1 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (906, '22 24 1 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (907, '22 24 1 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (908, '22 24 1 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (909, '22 24 1 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (910, '22 24 1 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (911, '22 24 1 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (912, '22 24 1 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (913, '22 25 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (914, '22 25 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (915, '22 25 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (916, '22 25 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (917, '22 25 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (918, '22 25 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (919, '22 25 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (920, '22 25 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (921, '22 23 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (922, '22 23 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (923, '22 23 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (924, '22 23 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (925, '22 23 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (926, '22 23 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (927, '22 23 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (928, '22 23 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (929, '22 0 13 0 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (930, '22 0 13 0 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (931, '22 0 13 0 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (932, '22 0 13 0 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (933, '22 0 13 0 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (934, '22 0 13 0 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (935, '22 0 13 0 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (936, '22 0 13 0 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (937, '22 0 25 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (938, '22 0 25 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (939, '22 0 25 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (940, '22 0 25 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (941, '22 0 25 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (942, '22 0 25 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (943, '22 0 25 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (944, '22 0 25 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (945, '22 11 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (946, '22 11 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (947, '22 11 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (948, '22 11 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (949, '22 11 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (950, '22 11 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (951, '22 11 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (952, '22 11 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (953, '22 3 0 -1 2 3 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (954, '22 3 0 3 -1 2 3 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (955, '22 3 0 22 -1 2 3 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (956, '22 3 0 22 3 -1 2 3 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (957, '22 3 0 2 -1 2 3 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (958, '22 3 0 2 3 -1 2 3 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (959, '22 3 0 2 22 -1 2 3 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (960, '22 3 0 2 22 3 -1 2 3 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (961, '22 3 1 -1 2 3 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (962, '22 3 1 3 -1 2 3 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (963, '22 3 1 22 -1 2 3 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (964, '22 3 1 22 3 -1 2 3 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (965, '22 3 1 2 -1 2 3 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (966, '22 3 1 2 3 -1 2 3 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (967, '22 3 1 2 22 -1 2 3 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (968, '22 3 1 2 22 3 -1 2 3 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (969, '22 18 13 18 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (970, '22 18 13 18 3 -1 2 5 5 3 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (971, '22 18 13 18 22 -1 2 5 5 3 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (972, '22 18 13 18 22 3 -1 2 5 5 3 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (973, '22 18 13 18 2 -1 2 5 5 3 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (974, '22 18 13 18 2 3 -1 2 5 5 3 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (975, '22 18 13 18 2 22 -1 2 5 5 3 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (976, '22 18 13 18 2 22 3 -1 2 5 5 3 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (977, '22 18 0 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (978, '22 18 0 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (979, '22 18 0 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (980, '22 18 0 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (981, '22 18 0 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (982, '22 18 0 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (983, '22 18 0 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (984, '22 18 0 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (985, '22 18 18 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (986, '22 18 18 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (987, '22 18 18 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (988, '22 18 18 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (989, '22 18 18 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (990, '22 18 18 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (991, '22 18 18 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (992, '22 18 18 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (993, '22 18 18 18 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (994, '22 18 18 18 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (995, '22 18 18 18 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (996, '22 18 18 18 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (997, '22 18 18 18 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (998, '22 18 18 18 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (999, '22 18 18 18 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1000, '22 18 18 18 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1001, '22 18 18 1 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1002, '22 18 18 1 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1003, '22 18 18 1 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1004, '22 18 18 1 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1005, '22 18 18 1 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1006, '22 18 18 1 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1007, '22 18 18 1 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1008, '22 18 18 1 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1009, '22 18 1 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1010, '22 18 1 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1011, '22 18 1 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1012, '22 18 1 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1013, '22 18 1 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1014, '22 18 1 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1015, '22 18 1 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1016, '22 18 1 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1017, '22 5 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1018, '22 5 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1019, '22 5 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1020, '22 5 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1021, '22 5 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1022, '22 5 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1023, '22 5 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1024, '22 5 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1025, '22 21 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1026, '22 21 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1027, '22 21 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1028, '22 21 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1029, '22 21 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1030, '22 21 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1031, '22 21 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1032, '22 21 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1033, '22 1 13 1 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1034, '22 1 13 1 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1035, '22 1 13 1 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1036, '22 1 13 1 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1037, '22 1 13 1 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1038, '22 1 13 1 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1039, '22 1 13 1 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1040, '22 1 13 1 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1041, '22 1 24 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1042, '22 1 24 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1043, '22 1 24 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1044, '22 1 24 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1045, '22 1 24 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1046, '22 1 24 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1047, '22 1 24 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1048, '22 1 24 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1049, '22 1 24 24 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1050, '22 1 24 24 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1051, '22 1 24 24 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1052, '22 1 24 24 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1053, '22 1 24 24 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1054, '22 1 24 24 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1055, '22 1 24 24 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1056, '22 1 24 24 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1057, '22 1 24 1 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1058, '22 1 24 1 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1059, '22 1 24 1 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1060, '22 1 24 1 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1061, '22 1 24 1 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1062, '22 1 24 1 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1063, '22 1 24 1 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1064, '22 1 24 1 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1065, '22 1 15 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1066, '22 1 15 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1067, '22 1 15 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1068, '22 1 15 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1069, '22 1 15 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1070, '22 1 15 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1071, '22 1 15 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1072, '22 1 15 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1073, '22 1 22 1 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1074, '22 1 22 1 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1075, '22 1 22 1 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1076, '22 1 22 1 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1077, '22 1 22 1 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1078, '22 1 22 1 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1079, '22 1 22 1 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1080, '22 1 22 1 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1081, '22 1 25 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1082, '22 1 25 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1083, '22 1 25 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1084, '22 1 25 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1085, '22 1 25 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1086, '22 1 25 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1087, '22 1 25 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1088, '22 1 25 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1089, '22 1 0 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1090, '22 1 0 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1091, '22 1 0 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1092, '22 1 0 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1093, '22 1 0 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1094, '22 1 0 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1095, '22 1 0 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1096, '22 1 0 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1097, '22 1 3 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1098, '22 1 3 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1099, '22 1 3 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1100, '22 1 3 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1101, '22 1 3 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1102, '22 1 3 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1103, '22 1 3 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1104, '22 1 3 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1105, '22 1 18 -1 2 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1106, '22 1 18 3 -1 2 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1107, '22 1 18 22 -1 2 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1108, '22 1 18 22 3 -1 2 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1109, '22 1 18 2 -1 2 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1110, '22 1 18 2 3 -1 2 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1111, '22 1 18 2 22 -1 2 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1112, '22 1 18 2 22 3 -1 2 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1113, '22 1 18 18 1 -1 2 5 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1114, '22 1 18 18 1 3 -1 2 5 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1115, '22 1 18 18 1 22 -1 2 5 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1116, '22 1 18 18 1 22 3 -1 2 5 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1117, '22 1 18 18 1 2 -1 2 5 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1118, '22 1 18 18 1 2 3 -1 2 5 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1119, '22 1 18 18 1 2 22 -1 2 5 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1120, '22 1 18 18 1 2 22 3 -1 2 5 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1121, '22 1 18 1 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1122, '22 1 18 1 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1123, '22 1 18 1 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1124, '22 1 18 1 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1125, '22 1 18 1 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1126, '22 1 18 1 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1127, '22 1 18 1 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1128, '22 1 18 1 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1129, '22 1 2 0 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1130, '22 1 2 0 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1131, '22 1 2 0 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1132, '22 1 2 0 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1133, '22 1 2 0 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1134, '22 1 2 0 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1135, '22 1 2 0 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1136, '22 1 2 0 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1137, '22 1 2 1 -1 2 5 5 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1138, '22 1 2 1 3 -1 2 5 5 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1139, '22 1 2 1 22 -1 2 5 5 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1140, '22 1 2 1 22 3 -1 2 5 5 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1141, '22 1 2 1 2 -1 2 5 5 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1142, '22 1 2 1 2 3 -1 2 5 5 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1143, '22 1 2 1 2 22 -1 2 5 5 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1144, '22 1 2 1 2 22 3 -1 2 5 5 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1145, '22 16 -1 2 5 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1146, '22 16 3 -1 2 5 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1147, '22 16 22 -1 2 5 7 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1148, '22 16 22 3 -1 2 5 7 3 -1 2 6'); INSERT INTO pagc_rules (id, rule) VALUES (1149, '22 16 2 -1 2 5 6 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1150, '22 16 2 3 -1 2 5 6 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1151, '22 16 2 22 -1 2 5 6 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1152, '22 16 2 22 3 -1 2 5 6 7 3 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1153, '22 2 1 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1154, '22 2 1 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1155, '22 2 1 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1156, '22 2 1 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1157, '22 2 18 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1158, '22 2 18 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1159, '22 2 18 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1160, '22 2 18 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1161, '22 2 2 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1162, '22 2 2 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1163, '22 2 2 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1164, '22 2 2 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1165, '22 2 22 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1166, '22 2 22 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1167, '22 2 22 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1168, '22 2 22 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1169, '22 2 22 1 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1170, '22 2 22 1 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1171, '22 2 22 1 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1172, '22 2 22 1 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1173, '22 2 1 22 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1174, '22 2 1 22 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1175, '22 2 1 22 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1176, '22 2 1 22 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1177, '22 2 1 2 -1 2 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1178, '22 2 1 2 3 -1 2 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1179, '22 2 1 2 22 -1 2 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1180, '22 2 1 2 22 3 -1 2 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1181, '22 2 2 1 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1182, '22 2 2 1 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1183, '22 2 2 1 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1184, '22 2 2 1 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1185, '22 2 24 2 -1 2 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1186, '22 2 24 2 3 -1 2 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1187, '22 2 24 2 22 -1 2 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1188, '22 2 24 2 22 3 -1 2 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1189, '22 2 0 22 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1190, '22 2 0 22 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1191, '22 2 0 22 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1192, '22 2 0 22 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1193, '22 2 2 24 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1194, '22 2 2 24 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1195, '22 2 2 24 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1196, '22 2 2 24 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1197, '22 2 2 22 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1198, '22 2 2 22 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1199, '22 2 2 22 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1200, '22 2 2 22 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1201, '22 2 2 0 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1202, '22 2 2 0 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1203, '22 2 2 0 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1204, '22 2 2 0 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1205, '22 2 2 18 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1206, '22 2 2 18 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1207, '22 2 2 18 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1208, '22 2 2 18 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1209, '22 2 2 2 -1 2 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1210, '22 2 2 2 3 -1 2 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1211, '22 2 2 2 22 -1 2 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1212, '22 2 2 2 22 3 -1 2 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1213, '22 2 18 2 -1 2 4 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1214, '22 2 18 2 3 -1 2 4 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1215, '22 2 18 2 22 -1 2 4 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1216, '22 2 18 2 22 3 -1 2 4 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1217, '22 2 1 18 2 -1 2 4 5 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1218, '22 2 1 18 2 3 -1 2 4 5 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1219, '22 2 1 18 2 22 -1 2 4 5 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1220, '22 2 1 18 2 22 3 -1 2 4 5 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1221, '22 2 0 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1222, '22 2 0 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1223, '22 2 0 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1224, '22 2 0 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1225, '22 2 0 18 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1226, '22 2 0 18 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1227, '22 2 0 18 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1228, '22 2 0 18 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1229, '22 2 0 1 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1230, '22 2 0 1 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1231, '22 2 0 1 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1232, '22 2 0 1 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1233, '22 2 1 2 2 -1 2 4 5 5 5 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1234, '22 2 1 2 2 3 -1 2 4 5 5 5 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1235, '22 2 1 2 2 22 -1 2 4 5 5 5 7 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1236, '22 2 1 2 2 22 3 -1 2 4 5 5 5 7 3 -1 2 4'); INSERT INTO pagc_rules (id, rule) VALUES (1237, '22 2 22 2 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1238, '22 2 22 2 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1239, '22 2 22 2 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1240, '22 2 22 2 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1241, '22 2 14 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1242, '22 2 14 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1243, '22 2 14 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1244, '22 2 14 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1245, '22 2 15 1 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1246, '22 2 15 1 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1247, '22 2 15 1 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1248, '22 2 15 1 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1249, '22 2 24 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1250, '22 2 24 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1251, '22 2 24 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1252, '22 2 24 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1253, '22 2 24 24 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1254, '22 2 24 24 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1255, '22 2 24 24 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1256, '22 2 24 24 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1257, '22 2 24 1 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1258, '22 2 24 1 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1259, '22 2 24 1 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1260, '22 2 24 1 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1261, '22 2 25 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1262, '22 2 25 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1263, '22 2 25 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1264, '22 2 25 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1265, '22 2 23 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1266, '22 2 23 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1267, '22 2 23 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1268, '22 2 23 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1269, '22 2 0 13 0 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1270, '22 2 0 13 0 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1271, '22 2 0 13 0 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1272, '22 2 0 13 0 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1273, '22 2 0 25 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1274, '22 2 0 25 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1275, '22 2 0 25 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1276, '22 2 0 25 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1277, '22 2 11 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1278, '22 2 11 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1279, '22 2 11 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1280, '22 2 11 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1281, '22 2 3 0 -1 2 4 3 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1282, '22 2 3 0 3 -1 2 4 3 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1283, '22 2 3 0 22 -1 2 4 3 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1284, '22 2 3 0 22 3 -1 2 4 3 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1285, '22 2 3 1 -1 2 4 3 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1286, '22 2 3 1 3 -1 2 4 3 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1287, '22 2 3 1 22 -1 2 4 3 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1288, '22 2 3 1 22 3 -1 2 4 3 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1289, '22 2 18 13 18 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1290, '22 2 18 13 18 3 -1 2 4 5 5 3 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1291, '22 2 18 13 18 22 -1 2 4 5 5 3 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1292, '22 2 18 13 18 22 3 -1 2 4 5 5 3 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1293, '22 2 18 0 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1294, '22 2 18 0 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1295, '22 2 18 0 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1296, '22 2 18 0 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1297, '22 2 18 18 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1298, '22 2 18 18 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1299, '22 2 18 18 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1300, '22 2 18 18 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1301, '22 2 18 18 18 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1302, '22 2 18 18 18 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1303, '22 2 18 18 18 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1304, '22 2 18 18 18 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1305, '22 2 18 18 1 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1306, '22 2 18 18 1 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1307, '22 2 18 18 1 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1308, '22 2 18 18 1 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1309, '22 2 18 1 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1310, '22 2 18 1 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1311, '22 2 18 1 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1312, '22 2 18 1 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1313, '22 2 5 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1314, '22 2 5 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1315, '22 2 5 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1316, '22 2 5 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1317, '22 2 21 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1318, '22 2 21 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1319, '22 2 21 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1320, '22 2 21 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1321, '22 2 1 13 1 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1322, '22 2 1 13 1 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1323, '22 2 1 13 1 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1324, '22 2 1 13 1 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1325, '22 2 1 24 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1326, '22 2 1 24 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1327, '22 2 1 24 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1328, '22 2 1 24 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1329, '22 2 1 24 24 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1330, '22 2 1 24 24 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1331, '22 2 1 24 24 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1332, '22 2 1 24 24 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1333, '22 2 1 24 1 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1334, '22 2 1 24 1 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1335, '22 2 1 24 1 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1336, '22 2 1 24 1 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1337, '22 2 1 15 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1338, '22 2 1 15 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1339, '22 2 1 15 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1340, '22 2 1 15 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1341, '22 2 1 22 1 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1342, '22 2 1 22 1 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1343, '22 2 1 22 1 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1344, '22 2 1 22 1 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1345, '22 2 1 25 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1346, '22 2 1 25 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1347, '22 2 1 25 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1348, '22 2 1 25 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1349, '22 2 1 0 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1350, '22 2 1 0 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1351, '22 2 1 0 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1352, '22 2 1 0 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1353, '22 2 1 3 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1354, '22 2 1 3 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1355, '22 2 1 3 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1356, '22 2 1 3 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1357, '22 2 1 18 -1 2 4 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1358, '22 2 1 18 3 -1 2 4 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1359, '22 2 1 18 22 -1 2 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1360, '22 2 1 18 22 3 -1 2 4 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1361, '22 2 1 18 18 1 -1 2 4 5 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1362, '22 2 1 18 18 1 3 -1 2 4 5 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1363, '22 2 1 18 18 1 22 -1 2 4 5 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1364, '22 2 1 18 18 1 22 3 -1 2 4 5 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1365, '22 2 1 18 1 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1366, '22 2 1 18 1 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1367, '22 2 1 18 1 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1368, '22 2 1 18 1 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1369, '22 2 1 2 0 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1370, '22 2 1 2 0 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1371, '22 2 1 2 0 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1372, '22 2 1 2 0 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1373, '22 2 1 2 1 -1 2 4 5 5 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1374, '22 2 1 2 1 3 -1 2 4 5 5 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1375, '22 2 1 2 1 22 -1 2 4 5 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1376, '22 2 1 2 1 22 3 -1 2 4 5 5 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1377, '22 2 16 -1 2 4 5 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1378, '22 2 16 3 -1 2 4 5 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1379, '22 2 16 22 -1 2 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1380, '22 2 16 22 3 -1 2 4 5 7 3 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1381, '6 0 -1 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1382, '6 0 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1383, '6 21 -1 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1384, '6 21 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1385, '6 21 0 -1 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1386, '6 21 0 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1387, '6 23 -1 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1388, '6 23 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1389, '6 0 18 -1 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1390, '6 0 18 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1391, '6 0 0 -1 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1392, '6 0 0 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1393, '6 18 -1 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1394, '6 18 22 -1 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1395, '6 18 0 -1 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1396, '6 18 0 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1397, '6 18 18 -1 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1398, '6 18 18 22 -1 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1399, '6 6 0 -1 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1400, '6 6 0 22 -1 3 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1401, '6 6 21 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1402, '6 6 21 22 -1 3 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1403, '6 6 21 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1404, '6 6 21 0 22 -1 3 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1405, '6 6 23 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1406, '6 6 23 22 -1 3 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1407, '6 6 0 18 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1408, '6 6 0 18 22 -1 3 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1409, '6 6 0 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1410, '6 6 0 0 22 -1 3 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1411, '6 6 18 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1412, '6 6 18 22 -1 3 4 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1413, '6 6 18 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1414, '6 6 18 0 22 -1 3 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1415, '6 6 18 18 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1416, '6 6 18 18 22 -1 3 4 5 5 7 -1 2 9'); INSERT INTO pagc_rules (id, rule) VALUES (1417, '3 6 0 -1 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1418, '3 6 0 22 -1 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1419, '3 6 21 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1420, '3 6 21 22 -1 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1421, '3 6 21 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1422, '3 6 21 0 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1423, '3 6 23 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1424, '3 6 23 22 -1 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1425, '3 6 0 18 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1426, '3 6 0 18 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1427, '3 6 0 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1428, '3 6 0 0 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1429, '3 6 18 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1430, '3 6 18 22 -1 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1431, '3 6 18 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1432, '3 6 18 0 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1433, '3 6 18 18 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1434, '3 6 18 18 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1435, '3 6 6 0 -1 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1436, '3 6 6 0 22 -1 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1437, '3 6 6 21 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1438, '3 6 6 21 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1439, '3 6 6 21 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1440, '3 6 6 21 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1441, '3 6 6 23 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1442, '3 6 6 23 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1443, '3 6 6 0 18 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1444, '3 6 6 0 18 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1445, '3 6 6 0 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1446, '3 6 6 0 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1447, '3 6 6 18 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1448, '3 6 6 18 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1449, '3 6 6 18 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1450, '3 6 6 18 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1451, '3 6 6 18 18 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1452, '3 6 6 18 18 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1453, '11 6 0 -1 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1454, '11 6 0 22 -1 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1455, '11 6 21 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1456, '11 6 21 22 -1 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1457, '11 6 21 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1458, '11 6 21 0 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1459, '11 6 23 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1460, '11 6 23 22 -1 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1461, '11 6 0 18 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1462, '11 6 0 18 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1463, '11 6 0 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1464, '11 6 0 0 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1465, '11 6 18 -1 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1466, '11 6 18 22 -1 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1467, '11 6 18 0 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1468, '11 6 18 0 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1469, '11 6 18 18 -1 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1470, '11 6 18 18 22 -1 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1471, '11 6 6 0 -1 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1472, '11 6 6 0 22 -1 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1473, '11 6 6 21 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1474, '11 6 6 21 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1475, '11 6 6 21 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1476, '11 6 6 21 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1477, '11 6 6 23 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1478, '11 6 6 23 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1479, '11 6 6 0 18 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1480, '11 6 6 0 18 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1481, '11 6 6 0 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1482, '11 6 6 0 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1483, '11 6 6 18 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1484, '11 6 6 18 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1485, '11 6 6 18 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1486, '11 6 6 18 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1487, '11 6 6 18 18 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1488, '11 6 6 18 18 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1489, '3 11 6 0 -1 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1490, '3 11 6 0 22 -1 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1491, '3 11 6 21 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1492, '3 11 6 21 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1493, '3 11 6 21 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1494, '3 11 6 21 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1495, '3 11 6 23 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1496, '3 11 6 23 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1497, '3 11 6 0 18 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1498, '3 11 6 0 18 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1499, '3 11 6 0 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1500, '3 11 6 0 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1501, '3 11 6 18 -1 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1502, '3 11 6 18 22 -1 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1503, '3 11 6 18 0 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1504, '3 11 6 18 0 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1505, '3 11 6 18 18 -1 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1506, '3 11 6 18 18 22 -1 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1507, '3 11 6 6 0 -1 3 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1508, '3 11 6 6 0 22 -1 3 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1509, '3 11 6 6 21 -1 3 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1510, '3 11 6 6 21 22 -1 3 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1511, '3 11 6 6 21 0 -1 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1512, '3 11 6 6 21 0 22 -1 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1513, '3 11 6 6 23 -1 3 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1514, '3 11 6 6 23 22 -1 3 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1515, '3 11 6 6 0 18 -1 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1516, '3 11 6 6 0 18 22 -1 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1517, '3 11 6 6 0 0 -1 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1518, '3 11 6 6 0 0 22 -1 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1519, '3 11 6 6 18 -1 3 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1520, '3 11 6 6 18 22 -1 3 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1521, '3 11 6 6 18 0 -1 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1522, '3 11 6 6 18 0 22 -1 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1523, '3 11 6 6 18 18 -1 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1524, '3 11 6 6 18 18 22 -1 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1525, '22 6 0 -1 2 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1526, '22 6 0 22 -1 2 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1527, '22 6 21 -1 2 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1528, '22 6 21 22 -1 2 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1529, '22 6 21 0 -1 2 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1530, '22 6 21 0 22 -1 2 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1531, '22 6 23 -1 2 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1532, '22 6 23 22 -1 2 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1533, '22 6 0 18 -1 2 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1534, '22 6 0 18 22 -1 2 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1535, '22 6 0 0 -1 2 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1536, '22 6 0 0 22 -1 2 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1537, '22 6 18 -1 2 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1538, '22 6 18 22 -1 2 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1539, '22 6 18 0 -1 2 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1540, '22 6 18 0 22 -1 2 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1541, '22 6 18 18 -1 2 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1542, '22 6 18 18 22 -1 2 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1543, '22 6 6 0 -1 2 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1544, '22 6 6 0 22 -1 2 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1545, '22 6 6 21 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1546, '22 6 6 21 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1547, '22 6 6 21 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1548, '22 6 6 21 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1549, '22 6 6 23 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1550, '22 6 6 23 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1551, '22 6 6 0 18 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1552, '22 6 6 0 18 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1553, '22 6 6 0 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1554, '22 6 6 0 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1555, '22 6 6 18 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1556, '22 6 6 18 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1557, '22 6 6 18 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1558, '22 6 6 18 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1559, '22 6 6 18 18 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1560, '22 6 6 18 18 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1561, '22 3 6 0 -1 2 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1562, '22 3 6 0 22 -1 2 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1563, '22 3 6 21 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1564, '22 3 6 21 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1565, '22 3 6 21 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1566, '22 3 6 21 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1567, '22 3 6 23 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1568, '22 3 6 23 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1569, '22 3 6 0 18 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1570, '22 3 6 0 18 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1571, '22 3 6 0 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1572, '22 3 6 0 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1573, '22 3 6 18 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1574, '22 3 6 18 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1575, '22 3 6 18 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1576, '22 3 6 18 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1577, '22 3 6 18 18 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1578, '22 3 6 18 18 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1579, '22 3 6 6 0 -1 2 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1580, '22 3 6 6 0 22 -1 2 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1581, '22 3 6 6 21 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1582, '22 3 6 6 21 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1583, '22 3 6 6 21 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1584, '22 3 6 6 21 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1585, '22 3 6 6 23 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1586, '22 3 6 6 23 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1587, '22 3 6 6 0 18 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1588, '22 3 6 6 0 18 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1589, '22 3 6 6 0 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1590, '22 3 6 6 0 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1591, '22 3 6 6 18 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1592, '22 3 6 6 18 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1593, '22 3 6 6 18 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1594, '22 3 6 6 18 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1595, '22 3 6 6 18 18 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1596, '22 3 6 6 18 18 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1597, '22 11 6 0 -1 2 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1598, '22 11 6 0 22 -1 2 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1599, '22 11 6 21 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1600, '22 11 6 21 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1601, '22 11 6 21 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1602, '22 11 6 21 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1603, '22 11 6 23 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1604, '22 11 6 23 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1605, '22 11 6 0 18 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1606, '22 11 6 0 18 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1607, '22 11 6 0 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1608, '22 11 6 0 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1609, '22 11 6 18 -1 2 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1610, '22 11 6 18 22 -1 2 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1611, '22 11 6 18 0 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1612, '22 11 6 18 0 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1613, '22 11 6 18 18 -1 2 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1614, '22 11 6 18 18 22 -1 2 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1615, '22 11 6 6 0 -1 2 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1616, '22 11 6 6 0 22 -1 2 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1617, '22 11 6 6 21 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1618, '22 11 6 6 21 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1619, '22 11 6 6 21 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1620, '22 11 6 6 21 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1621, '22 11 6 6 23 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1622, '22 11 6 6 23 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1623, '22 11 6 6 0 18 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1624, '22 11 6 6 0 18 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1625, '22 11 6 6 0 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1626, '22 11 6 6 0 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1627, '22 11 6 6 18 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1628, '22 11 6 6 18 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1629, '22 11 6 6 18 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1630, '22 11 6 6 18 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1631, '22 11 6 6 18 18 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1632, '22 11 6 6 18 18 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1633, '22 3 11 6 0 -1 2 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1634, '22 3 11 6 0 22 -1 2 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1635, '22 3 11 6 21 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1636, '22 3 11 6 21 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1637, '22 3 11 6 21 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1638, '22 3 11 6 21 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1639, '22 3 11 6 23 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1640, '22 3 11 6 23 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1641, '22 3 11 6 0 18 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1642, '22 3 11 6 0 18 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1643, '22 3 11 6 0 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1644, '22 3 11 6 0 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1645, '22 3 11 6 18 -1 2 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1646, '22 3 11 6 18 22 -1 2 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1647, '22 3 11 6 18 0 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1648, '22 3 11 6 18 0 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1649, '22 3 11 6 18 18 -1 2 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1650, '22 3 11 6 18 18 22 -1 2 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1651, '22 3 11 6 6 0 -1 2 3 3 3 4 5 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1652, '22 3 11 6 6 0 22 -1 2 3 3 3 4 5 7 -1 2 16'); INSERT INTO pagc_rules (id, rule) VALUES (1653, '22 3 11 6 6 21 -1 2 3 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1654, '22 3 11 6 6 21 22 -1 2 3 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1655, '22 3 11 6 6 21 0 -1 2 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1656, '22 3 11 6 6 21 0 22 -1 2 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1657, '22 3 11 6 6 23 -1 2 3 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1658, '22 3 11 6 6 23 22 -1 2 3 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1659, '22 3 11 6 6 0 18 -1 2 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1660, '22 3 11 6 6 0 18 22 -1 2 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1661, '22 3 11 6 6 0 0 -1 2 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1662, '22 3 11 6 6 0 0 22 -1 2 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1663, '22 3 11 6 6 18 -1 2 3 3 3 4 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1664, '22 3 11 6 6 18 22 -1 2 3 3 3 4 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1665, '22 3 11 6 6 18 0 -1 2 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1666, '22 3 11 6 6 18 0 22 -1 2 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1667, '22 3 11 6 6 18 18 -1 2 3 3 3 4 5 5 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1668, '22 3 11 6 6 18 18 22 -1 2 3 3 3 4 5 5 7 -1 2 12'); INSERT INTO pagc_rules (id, rule) VALUES (1669, '0 1 -1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1670, '0 1 22 -1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1671, '0 1 2 -1 1 5 6 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1672, '0 1 2 22 -1 1 5 6 7 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1673, '0 5 -1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1674, '0 5 22 -1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1675, '0 5 2 -1 1 5 6 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1676, '0 5 2 22 -1 1 5 6 7 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1677, '0 2 1 -1 1 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1678, '0 2 1 22 -1 1 4 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1679, '0 2 5 -1 1 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1680, '0 2 5 22 -1 1 4 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1681, '0 22 1 -1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1682, '0 22 1 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1683, '0 22 5 -1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1684, '0 22 5 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1685, '0 22 2 1 -1 1 2 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1686, '0 22 2 5 -1 1 2 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1687, '0 18 1 -1 1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1688, '0 18 1 22 -1 1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1689, '0 18 1 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1690, '0 18 1 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1691, '0 18 5 -1 1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1692, '0 18 5 22 -1 1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1693, '0 18 5 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1694, '0 18 5 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1695, '0 18 2 1 -1 1 1 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1696, '0 18 2 1 22 -1 1 1 4 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1697, '0 18 2 5 -1 1 1 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1698, '0 18 2 5 22 -1 1 1 4 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1699, '0 18 22 1 -1 1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1700, '0 18 22 1 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1701, '0 18 22 5 -1 1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1702, '0 18 22 5 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1703, '0 18 22 2 1 -1 1 1 2 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1704, '0 18 22 2 5 -1 1 1 2 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1705, '0 25 1 -1 1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1706, '0 25 1 22 -1 1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1707, '0 25 1 2 -1 1 1 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1708, '0 25 1 2 22 -1 1 1 5 6 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1709, '0 25 5 -1 1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1710, '0 25 5 22 -1 1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1711, '0 25 5 2 -1 1 1 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1712, '0 25 5 2 22 -1 1 1 5 6 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1713, '0 25 2 1 -1 1 1 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1714, '0 25 2 1 22 -1 1 1 4 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1715, '0 25 2 5 -1 1 1 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1716, '0 25 2 5 22 -1 1 1 4 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1717, '0 25 22 1 -1 1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1718, '0 25 22 1 2 -1 1 1 2 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1719, '0 25 22 5 -1 1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1720, '0 25 22 5 2 -1 1 1 2 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1721, '0 25 22 2 1 -1 1 1 2 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1722, '0 25 22 2 5 -1 1 1 2 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1723, '25 1 -1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1724, '25 1 22 -1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1725, '25 1 2 -1 1 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1726, '25 1 2 22 -1 1 5 6 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1727, '25 5 -1 1 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1728, '25 5 22 -1 1 5 7 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1729, '25 5 2 -1 1 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1730, '25 5 2 22 -1 1 5 6 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1731, '25 2 1 -1 1 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1732, '25 2 1 22 -1 1 4 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1733, '25 2 5 -1 1 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1734, '25 2 5 22 -1 1 4 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1735, '25 22 1 -1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1736, '25 22 1 2 -1 1 2 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1737, '25 22 5 -1 1 2 5 -1 1 7'); INSERT INTO pagc_rules (id, rule) VALUES (1738, '25 22 5 2 -1 1 2 5 6 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1739, '25 22 2 1 -1 1 2 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1740, '25 22 2 5 -1 1 2 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1741, '0 0 -1 1 5 -1 1 4'); INSERT INTO pagc_rules (id, rule) VALUES (1742, '0 0 22 -1 1 5 7 -1 1 4'); INSERT INTO pagc_rules (id, rule) VALUES (1743, '0 0 2 -1 1 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1744, '0 0 2 22 -1 1 5 6 7 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1745, '0 18 -1 1 5 -1 1 6'); INSERT INTO pagc_rules (id, rule) VALUES (1746, '0 18 22 -1 1 5 7 -1 1 6'); INSERT INTO pagc_rules (id, rule) VALUES (1747, '0 18 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1748, '0 18 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1749, '0 2 0 -1 1 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1750, '0 2 0 22 -1 1 4 5 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1751, '0 2 18 -1 1 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1752, '0 2 18 22 -1 1 4 5 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1753, '0 22 0 -1 1 2 5 -1 1 6'); INSERT INTO pagc_rules (id, rule) VALUES (1754, '0 22 0 22 -1 1 2 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1755, '0 22 0 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1756, '0 22 0 2 22 -1 1 2 5 6 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1757, '0 22 18 -1 1 2 5 -1 1 6'); INSERT INTO pagc_rules (id, rule) VALUES (1758, '0 22 18 22 -1 1 2 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1759, '0 22 18 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1760, '0 22 18 2 22 -1 1 2 5 6 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1761, '0 22 2 0 -1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1762, '0 22 2 0 22 -1 1 2 4 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1763, '0 22 2 18 -1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1764, '0 22 2 18 22 -1 1 2 4 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1765, '0 18 0 -1 1 1 5 -1 1 3'); INSERT INTO pagc_rules (id, rule) VALUES (1766, '0 18 0 22 -1 1 1 5 7 -1 1 3'); INSERT INTO pagc_rules (id, rule) VALUES (1767, '0 18 0 2 -1 1 1 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1768, '0 18 0 2 22 -1 1 1 5 6 7 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1769, '0 18 18 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1770, '0 18 18 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1771, '0 18 18 2 -1 1 1 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1772, '0 18 18 2 22 -1 1 1 5 6 7 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1773, '0 18 2 0 -1 1 1 4 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1774, '0 18 2 0 22 -1 1 1 4 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (1775, '0 18 2 18 -1 1 1 4 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1776, '0 18 2 18 22 -1 1 1 4 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (1777, '0 18 22 0 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1778, '0 18 22 0 2 -1 1 1 2 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1779, '0 18 22 18 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1780, '0 18 22 18 2 -1 1 1 2 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1781, '0 18 22 2 0 -1 1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1782, '0 18 22 2 18 -1 1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1783, '0 25 0 -1 1 1 5 -1 1 3'); INSERT INTO pagc_rules (id, rule) VALUES (1784, '0 25 0 22 -1 1 1 5 7 -1 1 3'); INSERT INTO pagc_rules (id, rule) VALUES (1785, '0 25 0 2 -1 1 1 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1786, '0 25 0 2 22 -1 1 1 5 6 7 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1787, '0 25 18 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1788, '0 25 18 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1789, '0 25 18 2 -1 1 1 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1790, '0 25 18 2 22 -1 1 1 5 6 7 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1791, '0 25 2 0 -1 1 1 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1792, '0 25 2 0 22 -1 1 1 4 5 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1793, '0 25 2 18 -1 1 1 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1794, '0 25 2 18 22 -1 1 1 4 5 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1795, '0 25 22 0 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1796, '0 25 22 0 2 -1 1 1 2 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1797, '0 25 22 18 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1798, '0 25 22 18 2 -1 1 1 2 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1799, '0 25 22 2 0 -1 1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1800, '0 25 22 2 18 -1 1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1801, '25 0 -1 1 5 -1 1 3'); INSERT INTO pagc_rules (id, rule) VALUES (1802, '25 0 22 -1 1 5 7 -1 1 3'); INSERT INTO pagc_rules (id, rule) VALUES (1803, '25 0 2 -1 1 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1804, '25 0 2 22 -1 1 5 6 7 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1805, '25 18 -1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1806, '25 18 22 -1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1807, '25 18 2 -1 1 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1808, '25 18 2 22 -1 1 5 6 7 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1809, '25 2 0 -1 1 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1810, '25 2 0 22 -1 1 4 5 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1811, '25 2 18 -1 1 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1812, '25 2 18 22 -1 1 4 5 7 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1813, '25 22 0 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1814, '25 22 0 2 -1 1 2 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1815, '25 22 18 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (1816, '25 22 18 2 -1 1 2 5 6 -1 1 15'); INSERT INTO pagc_rules (id, rule) VALUES (1817, '25 22 2 0 -1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1818, '25 22 2 18 -1 1 2 4 5 -1 1 14'); INSERT INTO pagc_rules (id, rule) VALUES (1819, '0 6 0 -1 1 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1820, '0 6 0 22 -1 1 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1821, '0 6 21 -1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1822, '0 6 21 22 -1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1823, '0 6 21 0 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1824, '0 6 21 0 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1825, '0 6 23 -1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1826, '0 6 23 22 -1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1827, '0 6 0 18 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1828, '0 6 0 18 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1829, '0 6 0 0 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1830, '0 6 0 0 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1831, '0 6 18 -1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1832, '0 6 18 22 -1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1833, '0 6 18 0 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1834, '0 6 18 0 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1835, '0 6 18 18 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1836, '0 6 18 18 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1837, '0 6 6 0 -1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1838, '0 6 6 0 22 -1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1839, '0 6 6 21 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1840, '0 6 6 21 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1841, '0 6 6 21 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1842, '0 6 6 21 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1843, '0 6 6 23 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1844, '0 6 6 23 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1845, '0 6 6 0 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1846, '0 6 6 0 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1847, '0 6 6 0 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1848, '0 6 6 0 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1849, '0 6 6 18 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1850, '0 6 6 18 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1851, '0 6 6 18 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1852, '0 6 6 18 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1853, '0 6 6 18 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1854, '0 6 6 18 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1855, '0 3 6 0 -1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1856, '0 3 6 0 22 -1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1857, '0 3 6 21 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1858, '0 3 6 21 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1859, '0 3 6 21 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1860, '0 3 6 21 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1861, '0 3 6 23 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1862, '0 3 6 23 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1863, '0 3 6 0 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1864, '0 3 6 0 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1865, '0 3 6 0 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1866, '0 3 6 0 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1867, '0 3 6 18 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1868, '0 3 6 18 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1869, '0 3 6 18 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1870, '0 3 6 18 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1871, '0 3 6 18 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1872, '0 3 6 18 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1873, '0 3 6 6 0 -1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1874, '0 3 6 6 0 22 -1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1875, '0 3 6 6 21 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1876, '0 3 6 6 21 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1877, '0 3 6 6 21 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1878, '0 3 6 6 21 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1879, '0 3 6 6 23 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1880, '0 3 6 6 23 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1881, '0 3 6 6 0 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1882, '0 3 6 6 0 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1883, '0 3 6 6 0 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1884, '0 3 6 6 0 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1885, '0 3 6 6 18 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1886, '0 3 6 6 18 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1887, '0 3 6 6 18 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1888, '0 3 6 6 18 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1889, '0 3 6 6 18 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1890, '0 3 6 6 18 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1891, '0 11 6 0 -1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1892, '0 11 6 0 22 -1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1893, '0 11 6 21 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1894, '0 11 6 21 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1895, '0 11 6 21 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1896, '0 11 6 21 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1897, '0 11 6 23 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1898, '0 11 6 23 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1899, '0 11 6 0 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1900, '0 11 6 0 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1901, '0 11 6 0 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1902, '0 11 6 0 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1903, '0 11 6 18 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1904, '0 11 6 18 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1905, '0 11 6 18 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1906, '0 11 6 18 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1907, '0 11 6 18 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1908, '0 11 6 18 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1909, '0 11 6 6 0 -1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1910, '0 11 6 6 0 22 -1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1911, '0 11 6 6 21 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1912, '0 11 6 6 21 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1913, '0 11 6 6 21 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1914, '0 11 6 6 21 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1915, '0 11 6 6 23 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1916, '0 11 6 6 23 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1917, '0 11 6 6 0 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1918, '0 11 6 6 0 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1919, '0 11 6 6 0 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1920, '0 11 6 6 0 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1921, '0 11 6 6 18 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1922, '0 11 6 6 18 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1923, '0 11 6 6 18 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1924, '0 11 6 6 18 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1925, '0 11 6 6 18 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1926, '0 11 6 6 18 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1927, '0 3 11 6 0 -1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1928, '0 3 11 6 0 22 -1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1929, '0 3 11 6 21 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1930, '0 3 11 6 21 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1931, '0 3 11 6 21 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1932, '0 3 11 6 21 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1933, '0 3 11 6 23 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1934, '0 3 11 6 23 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1935, '0 3 11 6 0 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1936, '0 3 11 6 0 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1937, '0 3 11 6 0 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1938, '0 3 11 6 0 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1939, '0 3 11 6 18 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1940, '0 3 11 6 18 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1941, '0 3 11 6 18 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1942, '0 3 11 6 18 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1943, '0 3 11 6 18 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1944, '0 3 11 6 18 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1945, '0 3 11 6 6 0 -1 1 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1946, '0 3 11 6 6 0 22 -1 1 3 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (1947, '0 3 11 6 6 21 -1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1948, '0 3 11 6 6 21 22 -1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1949, '0 3 11 6 6 21 0 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1950, '0 3 11 6 6 21 0 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1951, '0 3 11 6 6 23 -1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1952, '0 3 11 6 6 23 22 -1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1953, '0 3 11 6 6 0 18 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1954, '0 3 11 6 6 0 18 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1955, '0 3 11 6 6 0 0 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1956, '0 3 11 6 6 0 0 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1957, '0 3 11 6 6 18 -1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1958, '0 3 11 6 6 18 22 -1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1959, '0 3 11 6 6 18 0 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1960, '0 3 11 6 6 18 0 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1961, '0 3 11 6 6 18 18 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1962, '0 3 11 6 6 18 18 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1963, '0 22 6 0 -1 1 2 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1964, '0 22 6 21 -1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1965, '0 22 6 21 0 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1966, '0 22 6 23 -1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1967, '0 22 6 0 18 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1968, '0 22 6 0 0 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1969, '0 22 6 18 -1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1970, '0 22 6 18 0 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1971, '0 22 6 18 18 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1972, '0 22 6 6 0 -1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1973, '0 22 6 6 21 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1974, '0 22 6 6 21 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1975, '0 22 6 6 23 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1976, '0 22 6 6 0 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1977, '0 22 6 6 0 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1978, '0 22 6 6 18 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1979, '0 22 6 6 18 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1980, '0 22 6 6 18 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1981, '0 22 3 6 0 -1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1982, '0 22 3 6 21 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1983, '0 22 3 6 21 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1984, '0 22 3 6 23 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1985, '0 22 3 6 0 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1986, '0 22 3 6 0 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1987, '0 22 3 6 18 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1988, '0 22 3 6 18 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1989, '0 22 3 6 18 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1990, '0 22 3 6 6 0 -1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (1991, '0 22 3 6 6 21 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1992, '0 22 3 6 6 21 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1993, '0 22 3 6 6 23 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1994, '0 22 3 6 6 0 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1995, '0 22 3 6 6 0 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1996, '0 22 3 6 6 18 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1997, '0 22 3 6 6 18 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1998, '0 22 3 6 6 18 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (1999, '0 22 11 6 0 -1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2000, '0 22 11 6 21 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2001, '0 22 11 6 21 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2002, '0 22 11 6 23 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2003, '0 22 11 6 0 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2004, '0 22 11 6 0 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2005, '0 22 11 6 18 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2006, '0 22 11 6 18 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2007, '0 22 11 6 18 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2008, '0 22 11 6 6 0 -1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2009, '0 22 11 6 6 21 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2010, '0 22 11 6 6 21 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2011, '0 22 11 6 6 23 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2012, '0 22 11 6 6 0 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2013, '0 22 11 6 6 0 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2014, '0 22 11 6 6 18 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2015, '0 22 11 6 6 18 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2016, '0 22 11 6 6 18 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2017, '0 22 3 11 6 0 -1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2018, '0 22 3 11 6 21 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2019, '0 22 3 11 6 21 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2020, '0 22 3 11 6 23 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2021, '0 22 3 11 6 0 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2022, '0 22 3 11 6 0 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2023, '0 22 3 11 6 18 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2024, '0 22 3 11 6 18 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2025, '0 22 3 11 6 18 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2026, '0 22 3 11 6 6 0 -1 1 2 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2027, '0 22 3 11 6 6 21 -1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2028, '0 22 3 11 6 6 21 0 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2029, '0 22 3 11 6 6 23 -1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2030, '0 22 3 11 6 6 0 18 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2031, '0 22 3 11 6 6 0 0 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2032, '0 22 3 11 6 6 18 -1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2033, '0 22 3 11 6 6 18 0 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2034, '0 22 3 11 6 6 18 18 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2035, '0 18 6 0 -1 1 1 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2036, '0 18 6 0 22 -1 1 1 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2037, '0 18 6 21 -1 1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2038, '0 18 6 21 22 -1 1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2039, '0 18 6 21 0 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2040, '0 18 6 21 0 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2041, '0 18 6 23 -1 1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2042, '0 18 6 23 22 -1 1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2043, '0 18 6 0 18 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2044, '0 18 6 0 18 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2045, '0 18 6 0 0 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2046, '0 18 6 0 0 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2047, '0 18 6 18 -1 1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2048, '0 18 6 18 22 -1 1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2049, '0 18 6 18 0 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2050, '0 18 6 18 0 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2051, '0 18 6 18 18 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2052, '0 18 6 18 18 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2053, '0 18 6 6 0 -1 1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2054, '0 18 6 6 0 22 -1 1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2055, '0 18 6 6 21 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2056, '0 18 6 6 21 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2057, '0 18 6 6 21 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2058, '0 18 6 6 21 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2059, '0 18 6 6 23 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2060, '0 18 6 6 23 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2061, '0 18 6 6 0 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2062, '0 18 6 6 0 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2063, '0 18 6 6 0 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2064, '0 18 6 6 0 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2065, '0 18 6 6 18 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2066, '0 18 6 6 18 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2067, '0 18 6 6 18 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2068, '0 18 6 6 18 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2069, '0 18 6 6 18 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2070, '0 18 6 6 18 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2071, '0 18 3 6 0 -1 1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2072, '0 18 3 6 0 22 -1 1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2073, '0 18 3 6 21 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2074, '0 18 3 6 21 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2075, '0 18 3 6 21 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2076, '0 18 3 6 21 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2077, '0 18 3 6 23 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2078, '0 18 3 6 23 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2079, '0 18 3 6 0 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2080, '0 18 3 6 0 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2081, '0 18 3 6 0 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2082, '0 18 3 6 0 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2083, '0 18 3 6 18 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2084, '0 18 3 6 18 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2085, '0 18 3 6 18 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2086, '0 18 3 6 18 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2087, '0 18 3 6 18 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2088, '0 18 3 6 18 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2089, '0 18 3 6 6 0 -1 1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2090, '0 18 3 6 6 0 22 -1 1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2091, '0 18 3 6 6 21 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2092, '0 18 3 6 6 21 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2093, '0 18 3 6 6 21 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2094, '0 18 3 6 6 21 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2095, '0 18 3 6 6 23 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2096, '0 18 3 6 6 23 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2097, '0 18 3 6 6 0 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2098, '0 18 3 6 6 0 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2099, '0 18 3 6 6 0 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2100, '0 18 3 6 6 0 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2101, '0 18 3 6 6 18 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2102, '0 18 3 6 6 18 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2103, '0 18 3 6 6 18 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2104, '0 18 3 6 6 18 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2105, '0 18 3 6 6 18 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2106, '0 18 3 6 6 18 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2107, '0 18 11 6 0 -1 1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2108, '0 18 11 6 0 22 -1 1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2109, '0 18 11 6 21 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2110, '0 18 11 6 21 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2111, '0 18 11 6 21 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2112, '0 18 11 6 21 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2113, '0 18 11 6 23 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2114, '0 18 11 6 23 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2115, '0 18 11 6 0 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2116, '0 18 11 6 0 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2117, '0 18 11 6 0 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2118, '0 18 11 6 0 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2119, '0 18 11 6 18 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2120, '0 18 11 6 18 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2121, '0 18 11 6 18 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2122, '0 18 11 6 18 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2123, '0 18 11 6 18 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2124, '0 18 11 6 18 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2125, '0 18 11 6 6 0 -1 1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2126, '0 18 11 6 6 0 22 -1 1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2127, '0 18 11 6 6 21 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2128, '0 18 11 6 6 21 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2129, '0 18 11 6 6 21 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2130, '0 18 11 6 6 21 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2131, '0 18 11 6 6 23 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2132, '0 18 11 6 6 23 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2133, '0 18 11 6 6 0 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2134, '0 18 11 6 6 0 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2135, '0 18 11 6 6 0 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2136, '0 18 11 6 6 0 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2137, '0 18 11 6 6 18 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2138, '0 18 11 6 6 18 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2139, '0 18 11 6 6 18 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2140, '0 18 11 6 6 18 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2141, '0 18 11 6 6 18 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2142, '0 18 11 6 6 18 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2143, '0 18 3 11 6 0 -1 1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2144, '0 18 3 11 6 0 22 -1 1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2145, '0 18 3 11 6 21 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2146, '0 18 3 11 6 21 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2147, '0 18 3 11 6 21 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2148, '0 18 3 11 6 21 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2149, '0 18 3 11 6 23 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2150, '0 18 3 11 6 23 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2151, '0 18 3 11 6 0 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2152, '0 18 3 11 6 0 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2153, '0 18 3 11 6 0 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2154, '0 18 3 11 6 0 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2155, '0 18 3 11 6 18 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2156, '0 18 3 11 6 18 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2157, '0 18 3 11 6 18 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2158, '0 18 3 11 6 18 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2159, '0 18 3 11 6 18 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2160, '0 18 3 11 6 18 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2161, '0 18 3 11 6 6 0 -1 1 1 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2162, '0 18 3 11 6 6 0 22 -1 1 1 3 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2163, '0 18 3 11 6 6 21 -1 1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2164, '0 18 3 11 6 6 21 22 -1 1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2165, '0 18 3 11 6 6 21 0 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2166, '0 18 3 11 6 6 21 0 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2167, '0 18 3 11 6 6 23 -1 1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2168, '0 18 3 11 6 6 23 22 -1 1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2169, '0 18 3 11 6 6 0 18 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2170, '0 18 3 11 6 6 0 18 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2171, '0 18 3 11 6 6 0 0 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2172, '0 18 3 11 6 6 0 0 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2173, '0 18 3 11 6 6 18 -1 1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2174, '0 18 3 11 6 6 18 22 -1 1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2175, '0 18 3 11 6 6 18 0 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2176, '0 18 3 11 6 6 18 0 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2177, '0 18 3 11 6 6 18 18 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2178, '0 18 3 11 6 6 18 18 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2179, '0 18 22 6 0 -1 1 1 2 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2180, '0 18 22 6 21 -1 1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2181, '0 18 22 6 21 0 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2182, '0 18 22 6 23 -1 1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2183, '0 18 22 6 0 18 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2184, '0 18 22 6 0 0 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2185, '0 18 22 6 18 -1 1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2186, '0 18 22 6 18 0 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2187, '0 18 22 6 18 18 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2188, '0 18 22 6 6 0 -1 1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2189, '0 18 22 6 6 21 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2190, '0 18 22 6 6 21 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2191, '0 18 22 6 6 23 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2192, '0 18 22 6 6 0 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2193, '0 18 22 6 6 0 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2194, '0 18 22 6 6 18 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2195, '0 18 22 6 6 18 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2196, '0 18 22 6 6 18 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2197, '0 18 22 3 6 0 -1 1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2198, '0 18 22 3 6 21 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2199, '0 18 22 3 6 21 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2200, '0 18 22 3 6 23 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2201, '0 18 22 3 6 0 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2202, '0 18 22 3 6 0 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2203, '0 18 22 3 6 18 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2204, '0 18 22 3 6 18 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2205, '0 18 22 3 6 18 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2206, '0 18 22 3 6 6 0 -1 1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2207, '0 18 22 3 6 6 21 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2208, '0 18 22 3 6 6 21 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2209, '0 18 22 3 6 6 23 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2210, '0 18 22 3 6 6 0 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2211, '0 18 22 3 6 6 0 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2212, '0 18 22 3 6 6 18 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2213, '0 18 22 3 6 6 18 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2214, '0 18 22 3 6 6 18 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2215, '0 18 22 11 6 0 -1 1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2216, '0 18 22 11 6 21 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2217, '0 18 22 11 6 21 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2218, '0 18 22 11 6 23 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2219, '0 18 22 11 6 0 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2220, '0 18 22 11 6 0 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2221, '0 18 22 11 6 18 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2222, '0 18 22 11 6 18 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2223, '0 18 22 11 6 18 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2224, '0 18 22 11 6 6 0 -1 1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2225, '0 18 22 11 6 6 21 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2226, '0 18 22 11 6 6 21 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2227, '0 18 22 11 6 6 23 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2228, '0 18 22 11 6 6 0 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2229, '0 18 22 11 6 6 0 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2230, '0 18 22 11 6 6 18 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2231, '0 18 22 11 6 6 18 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2232, '0 18 22 11 6 6 18 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2233, '0 18 22 3 11 6 0 -1 1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2234, '0 18 22 3 11 6 21 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2235, '0 18 22 3 11 6 21 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2236, '0 18 22 3 11 6 23 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2237, '0 18 22 3 11 6 0 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2238, '0 18 22 3 11 6 0 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2239, '0 18 22 3 11 6 18 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2240, '0 18 22 3 11 6 18 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2241, '0 18 22 3 11 6 18 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2242, '0 18 22 3 11 6 6 0 -1 1 1 2 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2243, '0 18 22 3 11 6 6 21 -1 1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2244, '0 18 22 3 11 6 6 21 0 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2245, '0 18 22 3 11 6 6 23 -1 1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2246, '0 18 22 3 11 6 6 0 18 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2247, '0 18 22 3 11 6 6 0 0 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2248, '0 18 22 3 11 6 6 18 -1 1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2249, '0 18 22 3 11 6 6 18 0 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2250, '0 18 22 3 11 6 6 18 18 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2251, '0 25 6 0 -1 1 1 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2252, '0 25 6 0 22 -1 1 1 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2253, '0 25 6 21 -1 1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2254, '0 25 6 21 22 -1 1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2255, '0 25 6 21 0 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2256, '0 25 6 21 0 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2257, '0 25 6 23 -1 1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2258, '0 25 6 23 22 -1 1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2259, '0 25 6 0 18 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2260, '0 25 6 0 18 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2261, '0 25 6 0 0 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2262, '0 25 6 0 0 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2263, '0 25 6 18 -1 1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2264, '0 25 6 18 22 -1 1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2265, '0 25 6 18 0 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2266, '0 25 6 18 0 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2267, '0 25 6 18 18 -1 1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2268, '0 25 6 18 18 22 -1 1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2269, '0 25 6 6 0 -1 1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2270, '0 25 6 6 0 22 -1 1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2271, '0 25 6 6 21 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2272, '0 25 6 6 21 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2273, '0 25 6 6 21 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2274, '0 25 6 6 21 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2275, '0 25 6 6 23 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2276, '0 25 6 6 23 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2277, '0 25 6 6 0 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2278, '0 25 6 6 0 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2279, '0 25 6 6 0 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2280, '0 25 6 6 0 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2281, '0 25 6 6 18 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2282, '0 25 6 6 18 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2283, '0 25 6 6 18 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2284, '0 25 6 6 18 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2285, '0 25 6 6 18 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2286, '0 25 6 6 18 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2287, '0 25 3 6 0 -1 1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2288, '0 25 3 6 0 22 -1 1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2289, '0 25 3 6 21 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2290, '0 25 3 6 21 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2291, '0 25 3 6 21 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2292, '0 25 3 6 21 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2293, '0 25 3 6 23 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2294, '0 25 3 6 23 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2295, '0 25 3 6 0 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2296, '0 25 3 6 0 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2297, '0 25 3 6 0 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2298, '0 25 3 6 0 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2299, '0 25 3 6 18 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2300, '0 25 3 6 18 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2301, '0 25 3 6 18 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2302, '0 25 3 6 18 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2303, '0 25 3 6 18 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2304, '0 25 3 6 18 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2305, '0 25 3 6 6 0 -1 1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2306, '0 25 3 6 6 0 22 -1 1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2307, '0 25 3 6 6 21 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2308, '0 25 3 6 6 21 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2309, '0 25 3 6 6 21 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2310, '0 25 3 6 6 21 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2311, '0 25 3 6 6 23 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2312, '0 25 3 6 6 23 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2313, '0 25 3 6 6 0 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2314, '0 25 3 6 6 0 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2315, '0 25 3 6 6 0 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2316, '0 25 3 6 6 0 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2317, '0 25 3 6 6 18 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2318, '0 25 3 6 6 18 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2319, '0 25 3 6 6 18 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2320, '0 25 3 6 6 18 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2321, '0 25 3 6 6 18 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2322, '0 25 3 6 6 18 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2323, '0 25 11 6 0 -1 1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2324, '0 25 11 6 0 22 -1 1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2325, '0 25 11 6 21 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2326, '0 25 11 6 21 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2327, '0 25 11 6 21 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2328, '0 25 11 6 21 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2329, '0 25 11 6 23 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2330, '0 25 11 6 23 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2331, '0 25 11 6 0 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2332, '0 25 11 6 0 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2333, '0 25 11 6 0 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2334, '0 25 11 6 0 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2335, '0 25 11 6 18 -1 1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2336, '0 25 11 6 18 22 -1 1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2337, '0 25 11 6 18 0 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2338, '0 25 11 6 18 0 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2339, '0 25 11 6 18 18 -1 1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2340, '0 25 11 6 18 18 22 -1 1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2341, '0 25 11 6 6 0 -1 1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2342, '0 25 11 6 6 0 22 -1 1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2343, '0 25 11 6 6 21 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2344, '0 25 11 6 6 21 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2345, '0 25 11 6 6 21 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2346, '0 25 11 6 6 21 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2347, '0 25 11 6 6 23 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2348, '0 25 11 6 6 23 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2349, '0 25 11 6 6 0 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2350, '0 25 11 6 6 0 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2351, '0 25 11 6 6 0 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2352, '0 25 11 6 6 0 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2353, '0 25 11 6 6 18 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2354, '0 25 11 6 6 18 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2355, '0 25 11 6 6 18 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2356, '0 25 11 6 6 18 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2357, '0 25 11 6 6 18 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2358, '0 25 11 6 6 18 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2359, '0 25 3 11 6 0 -1 1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2360, '0 25 3 11 6 0 22 -1 1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2361, '0 25 3 11 6 21 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2362, '0 25 3 11 6 21 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2363, '0 25 3 11 6 21 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2364, '0 25 3 11 6 21 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2365, '0 25 3 11 6 23 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2366, '0 25 3 11 6 23 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2367, '0 25 3 11 6 0 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2368, '0 25 3 11 6 0 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2369, '0 25 3 11 6 0 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2370, '0 25 3 11 6 0 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2371, '0 25 3 11 6 18 -1 1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2372, '0 25 3 11 6 18 22 -1 1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2373, '0 25 3 11 6 18 0 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2374, '0 25 3 11 6 18 0 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2375, '0 25 3 11 6 18 18 -1 1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2376, '0 25 3 11 6 18 18 22 -1 1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2377, '0 25 3 11 6 6 0 -1 1 1 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2378, '0 25 3 11 6 6 0 22 -1 1 1 3 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2379, '0 25 3 11 6 6 21 -1 1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2380, '0 25 3 11 6 6 21 22 -1 1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2381, '0 25 3 11 6 6 21 0 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2382, '0 25 3 11 6 6 21 0 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2383, '0 25 3 11 6 6 23 -1 1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2384, '0 25 3 11 6 6 23 22 -1 1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2385, '0 25 3 11 6 6 0 18 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2386, '0 25 3 11 6 6 0 18 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2387, '0 25 3 11 6 6 0 0 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2388, '0 25 3 11 6 6 0 0 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2389, '0 25 3 11 6 6 18 -1 1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2390, '0 25 3 11 6 6 18 22 -1 1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2391, '0 25 3 11 6 6 18 0 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2392, '0 25 3 11 6 6 18 0 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2393, '0 25 3 11 6 6 18 18 -1 1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2394, '0 25 3 11 6 6 18 18 22 -1 1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2395, '0 25 22 6 0 -1 1 1 2 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2396, '0 25 22 6 21 -1 1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2397, '0 25 22 6 21 0 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2398, '0 25 22 6 23 -1 1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2399, '0 25 22 6 0 18 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2400, '0 25 22 6 0 0 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2401, '0 25 22 6 18 -1 1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2402, '0 25 22 6 18 0 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2403, '0 25 22 6 18 18 -1 1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2404, '0 25 22 6 6 0 -1 1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2405, '0 25 22 6 6 21 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2406, '0 25 22 6 6 21 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2407, '0 25 22 6 6 23 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2408, '0 25 22 6 6 0 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2409, '0 25 22 6 6 0 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2410, '0 25 22 6 6 18 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2411, '0 25 22 6 6 18 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2412, '0 25 22 6 6 18 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2413, '0 25 22 3 6 0 -1 1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2414, '0 25 22 3 6 21 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2415, '0 25 22 3 6 21 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2416, '0 25 22 3 6 23 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2417, '0 25 22 3 6 0 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2418, '0 25 22 3 6 0 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2419, '0 25 22 3 6 18 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2420, '0 25 22 3 6 18 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2421, '0 25 22 3 6 18 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2422, '0 25 22 3 6 6 0 -1 1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2423, '0 25 22 3 6 6 21 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2424, '0 25 22 3 6 6 21 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2425, '0 25 22 3 6 6 23 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2426, '0 25 22 3 6 6 0 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2427, '0 25 22 3 6 6 0 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2428, '0 25 22 3 6 6 18 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2429, '0 25 22 3 6 6 18 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2430, '0 25 22 3 6 6 18 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2431, '0 25 22 11 6 0 -1 1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2432, '0 25 22 11 6 21 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2433, '0 25 22 11 6 21 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2434, '0 25 22 11 6 23 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2435, '0 25 22 11 6 0 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2436, '0 25 22 11 6 0 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2437, '0 25 22 11 6 18 -1 1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2438, '0 25 22 11 6 18 0 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2439, '0 25 22 11 6 18 18 -1 1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2440, '0 25 22 11 6 6 0 -1 1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2441, '0 25 22 11 6 6 21 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2442, '0 25 22 11 6 6 21 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2443, '0 25 22 11 6 6 23 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2444, '0 25 22 11 6 6 0 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2445, '0 25 22 11 6 6 0 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2446, '0 25 22 11 6 6 18 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2447, '0 25 22 11 6 6 18 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2448, '0 25 22 11 6 6 18 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2449, '0 25 22 3 11 6 0 -1 1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2450, '0 25 22 3 11 6 21 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2451, '0 25 22 3 11 6 21 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2452, '0 25 22 3 11 6 23 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2453, '0 25 22 3 11 6 0 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2454, '0 25 22 3 11 6 0 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2455, '0 25 22 3 11 6 18 -1 1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2456, '0 25 22 3 11 6 18 0 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2457, '0 25 22 3 11 6 18 18 -1 1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2458, '0 25 22 3 11 6 6 0 -1 1 1 2 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2459, '0 25 22 3 11 6 6 21 -1 1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2460, '0 25 22 3 11 6 6 21 0 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2461, '0 25 22 3 11 6 6 23 -1 1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2462, '0 25 22 3 11 6 6 0 18 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2463, '0 25 22 3 11 6 6 0 0 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2464, '0 25 22 3 11 6 6 18 -1 1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2465, '0 25 22 3 11 6 6 18 0 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2466, '0 25 22 3 11 6 6 18 18 -1 1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2467, '25 6 0 -1 1 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2468, '25 6 0 22 -1 1 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2469, '25 6 21 -1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2470, '25 6 21 22 -1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2471, '25 6 21 0 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2472, '25 6 21 0 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2473, '25 6 23 -1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2474, '25 6 23 22 -1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2475, '25 6 0 18 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2476, '25 6 0 18 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2477, '25 6 0 0 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2478, '25 6 0 0 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2479, '25 6 18 -1 1 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2480, '25 6 18 22 -1 1 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2481, '25 6 18 0 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2482, '25 6 18 0 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2483, '25 6 18 18 -1 1 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2484, '25 6 18 18 22 -1 1 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2485, '25 6 6 0 -1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2486, '25 6 6 0 22 -1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2487, '25 6 6 21 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2488, '25 6 6 21 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2489, '25 6 6 21 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2490, '25 6 6 21 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2491, '25 6 6 23 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2492, '25 6 6 23 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2493, '25 6 6 0 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2494, '25 6 6 0 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2495, '25 6 6 0 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2496, '25 6 6 0 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2497, '25 6 6 18 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2498, '25 6 6 18 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2499, '25 6 6 18 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2500, '25 6 6 18 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2501, '25 6 6 18 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2502, '25 6 6 18 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2503, '25 3 6 0 -1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2504, '25 3 6 0 22 -1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2505, '25 3 6 21 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2506, '25 3 6 21 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2507, '25 3 6 21 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2508, '25 3 6 21 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2509, '25 3 6 23 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2510, '25 3 6 23 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2511, '25 3 6 0 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2512, '25 3 6 0 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2513, '25 3 6 0 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2514, '25 3 6 0 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2515, '25 3 6 18 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2516, '25 3 6 18 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2517, '25 3 6 18 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2518, '25 3 6 18 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2519, '25 3 6 18 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2520, '25 3 6 18 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2521, '25 3 6 6 0 -1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2522, '25 3 6 6 0 22 -1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2523, '25 3 6 6 21 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2524, '25 3 6 6 21 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2525, '25 3 6 6 21 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2526, '25 3 6 6 21 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2527, '25 3 6 6 23 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2528, '25 3 6 6 23 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2529, '25 3 6 6 0 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2530, '25 3 6 6 0 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2531, '25 3 6 6 0 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2532, '25 3 6 6 0 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2533, '25 3 6 6 18 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2534, '25 3 6 6 18 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2535, '25 3 6 6 18 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2536, '25 3 6 6 18 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2537, '25 3 6 6 18 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2538, '25 3 6 6 18 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2539, '25 11 6 0 -1 1 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2540, '25 11 6 0 22 -1 1 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2541, '25 11 6 21 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2542, '25 11 6 21 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2543, '25 11 6 21 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2544, '25 11 6 21 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2545, '25 11 6 23 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2546, '25 11 6 23 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2547, '25 11 6 0 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2548, '25 11 6 0 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2549, '25 11 6 0 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2550, '25 11 6 0 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2551, '25 11 6 18 -1 1 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2552, '25 11 6 18 22 -1 1 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2553, '25 11 6 18 0 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2554, '25 11 6 18 0 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2555, '25 11 6 18 18 -1 1 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2556, '25 11 6 18 18 22 -1 1 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2557, '25 11 6 6 0 -1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2558, '25 11 6 6 0 22 -1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2559, '25 11 6 6 21 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2560, '25 11 6 6 21 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2561, '25 11 6 6 21 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2562, '25 11 6 6 21 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2563, '25 11 6 6 23 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2564, '25 11 6 6 23 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2565, '25 11 6 6 0 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2566, '25 11 6 6 0 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2567, '25 11 6 6 0 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2568, '25 11 6 6 0 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2569, '25 11 6 6 18 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2570, '25 11 6 6 18 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2571, '25 11 6 6 18 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2572, '25 11 6 6 18 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2573, '25 11 6 6 18 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2574, '25 11 6 6 18 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2575, '25 3 11 6 0 -1 1 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2576, '25 3 11 6 0 22 -1 1 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2577, '25 3 11 6 21 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2578, '25 3 11 6 21 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2579, '25 3 11 6 21 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2580, '25 3 11 6 21 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2581, '25 3 11 6 23 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2582, '25 3 11 6 23 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2583, '25 3 11 6 0 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2584, '25 3 11 6 0 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2585, '25 3 11 6 0 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2586, '25 3 11 6 0 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2587, '25 3 11 6 18 -1 1 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2588, '25 3 11 6 18 22 -1 1 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2589, '25 3 11 6 18 0 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2590, '25 3 11 6 18 0 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2591, '25 3 11 6 18 18 -1 1 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2592, '25 3 11 6 18 18 22 -1 1 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2593, '25 3 11 6 6 0 -1 1 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2594, '25 3 11 6 6 0 22 -1 1 3 3 3 4 5 7 -1 1 12'); INSERT INTO pagc_rules (id, rule) VALUES (2595, '25 3 11 6 6 21 -1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2596, '25 3 11 6 6 21 22 -1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2597, '25 3 11 6 6 21 0 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2598, '25 3 11 6 6 21 0 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2599, '25 3 11 6 6 23 -1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2600, '25 3 11 6 6 23 22 -1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2601, '25 3 11 6 6 0 18 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2602, '25 3 11 6 6 0 18 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2603, '25 3 11 6 6 0 0 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2604, '25 3 11 6 6 0 0 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2605, '25 3 11 6 6 18 -1 1 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2606, '25 3 11 6 6 18 22 -1 1 3 3 3 4 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2607, '25 3 11 6 6 18 0 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2608, '25 3 11 6 6 18 0 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2609, '25 3 11 6 6 18 18 -1 1 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2610, '25 3 11 6 6 18 18 22 -1 1 3 3 3 4 5 5 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2611, '25 22 6 0 -1 1 2 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2612, '25 22 6 21 -1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2613, '25 22 6 21 0 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2614, '25 22 6 23 -1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2615, '25 22 6 0 18 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2616, '25 22 6 0 0 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2617, '25 22 6 18 -1 1 2 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2618, '25 22 6 18 0 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2619, '25 22 6 18 18 -1 1 2 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2620, '25 22 6 6 0 -1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2621, '25 22 6 6 21 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2622, '25 22 6 6 21 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2623, '25 22 6 6 23 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2624, '25 22 6 6 0 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2625, '25 22 6 6 0 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2626, '25 22 6 6 18 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2627, '25 22 6 6 18 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2628, '25 22 6 6 18 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2629, '25 22 3 6 0 -1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2630, '25 22 3 6 21 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2631, '25 22 3 6 21 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2632, '25 22 3 6 23 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2633, '25 22 3 6 0 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2634, '25 22 3 6 0 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2635, '25 22 3 6 18 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2636, '25 22 3 6 18 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2637, '25 22 3 6 18 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2638, '25 22 3 6 6 0 -1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2639, '25 22 3 6 6 21 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2640, '25 22 3 6 6 21 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2641, '25 22 3 6 6 23 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2642, '25 22 3 6 6 0 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2643, '25 22 3 6 6 0 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2644, '25 22 3 6 6 18 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2645, '25 22 3 6 6 18 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2646, '25 22 3 6 6 18 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2647, '25 22 11 6 0 -1 1 2 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2648, '25 22 11 6 21 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2649, '25 22 11 6 21 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2650, '25 22 11 6 23 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2651, '25 22 11 6 0 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2652, '25 22 11 6 0 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2653, '25 22 11 6 18 -1 1 2 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2654, '25 22 11 6 18 0 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2655, '25 22 11 6 18 18 -1 1 2 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2656, '25 22 11 6 6 0 -1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2657, '25 22 11 6 6 21 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2658, '25 22 11 6 6 21 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2659, '25 22 11 6 6 23 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2660, '25 22 11 6 6 0 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2661, '25 22 11 6 6 0 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2662, '25 22 11 6 6 18 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2663, '25 22 11 6 6 18 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2664, '25 22 11 6 6 18 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2665, '25 22 3 11 6 0 -1 1 2 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2666, '25 22 3 11 6 21 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2667, '25 22 3 11 6 21 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2668, '25 22 3 11 6 23 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2669, '25 22 3 11 6 0 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2670, '25 22 3 11 6 0 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2671, '25 22 3 11 6 18 -1 1 2 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2672, '25 22 3 11 6 18 0 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2673, '25 22 3 11 6 18 18 -1 1 2 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2674, '25 22 3 11 6 6 0 -1 1 2 3 3 3 4 5 -1 1 17'); INSERT INTO pagc_rules (id, rule) VALUES (2675, '25 22 3 11 6 6 21 -1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2676, '25 22 3 11 6 6 21 0 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2677, '25 22 3 11 6 6 23 -1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2678, '25 22 3 11 6 6 0 18 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2679, '25 22 3 11 6 6 0 0 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2680, '25 22 3 11 6 6 18 -1 1 2 3 3 3 4 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2681, '25 22 3 11 6 6 18 0 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2682, '25 22 3 11 6 6 18 18 -1 1 2 3 3 3 4 5 5 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2683, '0 22 -1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2684, '0 22 22 -1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2685, '0 22 1 -1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2686, '0 22 1 22 -1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2687, '0 15 -1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2688, '0 15 22 -1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2689, '0 18 18 1 -1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2690, '0 18 18 1 22 -1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2691, '0 18 1 -1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2692, '0 18 1 22 -1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2693, '0 2 -1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2694, '0 2 22 -1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2695, '0 1 13 1 -1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2696, '0 1 13 1 22 -1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2697, '0 1 18 -1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2698, '0 1 18 22 -1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2699, '0 1 18 1 -1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2700, '0 1 18 1 22 -1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2701, '0 22 22 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2702, '0 22 22 22 -1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2703, '0 22 22 1 -1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2704, '0 22 22 1 22 -1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2705, '0 22 15 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2706, '0 22 15 22 -1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2707, '0 22 18 18 1 -1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2708, '0 22 18 18 1 22 -1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2709, '0 22 18 1 -1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2710, '0 22 18 1 22 -1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2711, '0 22 2 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2712, '0 22 2 22 -1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2713, '0 22 1 13 1 -1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2714, '0 22 1 13 1 22 -1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2715, '0 22 1 18 -1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2716, '0 22 1 18 22 -1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2717, '0 22 1 18 1 -1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2718, '0 22 1 18 1 22 -1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2719, '0 18 22 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2720, '0 18 22 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2721, '0 18 22 1 -1 1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2722, '0 18 22 1 22 -1 1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2723, '0 18 15 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2724, '0 18 15 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2725, '0 18 18 18 1 -1 1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2726, '0 18 18 18 1 22 -1 1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2727, '0 18 18 1 -1 1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2728, '0 18 18 1 22 -1 1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2729, '0 18 2 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2730, '0 18 2 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2731, '0 18 1 13 1 -1 1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2732, '0 18 1 13 1 22 -1 1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2733, '0 18 1 18 -1 1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2734, '0 18 1 18 22 -1 1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2735, '0 18 1 18 1 -1 1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2736, '0 18 1 18 1 22 -1 1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2737, '0 18 22 22 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2738, '0 18 22 22 22 -1 1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2739, '0 18 22 22 1 -1 1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2740, '0 18 22 22 1 22 -1 1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2741, '0 18 22 15 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2742, '0 18 22 15 22 -1 1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2743, '0 18 22 18 18 1 -1 1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2744, '0 18 22 18 18 1 22 -1 1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2745, '0 18 22 18 1 -1 1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2746, '0 18 22 18 1 22 -1 1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2747, '0 18 22 2 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2748, '0 18 22 2 22 -1 1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2749, '0 18 22 1 13 1 -1 1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2750, '0 18 22 1 13 1 22 -1 1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2751, '0 18 22 1 18 -1 1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2752, '0 18 22 1 18 22 -1 1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2753, '0 18 22 1 18 1 -1 1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2754, '0 18 22 1 18 1 22 -1 1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2755, '0 25 22 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2756, '0 25 22 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2757, '0 25 22 1 -1 1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2758, '0 25 22 1 22 -1 1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2759, '0 25 15 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2760, '0 25 15 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2761, '0 25 18 18 1 -1 1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2762, '0 25 18 18 1 22 -1 1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2763, '0 25 18 1 -1 1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2764, '0 25 18 1 22 -1 1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2765, '0 25 2 -1 1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2766, '0 25 2 22 -1 1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2767, '0 25 1 13 1 -1 1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2768, '0 25 1 13 1 22 -1 1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2769, '0 25 1 18 -1 1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2770, '0 25 1 18 22 -1 1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2771, '0 25 1 18 1 -1 1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2772, '0 25 1 18 1 22 -1 1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2773, '0 25 22 22 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2774, '0 25 22 22 22 -1 1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2775, '0 25 22 22 1 -1 1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2776, '0 25 22 22 1 22 -1 1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2777, '0 25 22 15 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2778, '0 25 22 15 22 -1 1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2779, '0 25 22 18 18 1 -1 1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2780, '0 25 22 18 18 1 22 -1 1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2781, '0 25 22 18 1 -1 1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2782, '0 25 22 18 1 22 -1 1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2783, '0 25 22 2 -1 1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2784, '0 25 22 2 22 -1 1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2785, '0 25 22 1 13 1 -1 1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2786, '0 25 22 1 13 1 22 -1 1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2787, '0 25 22 1 18 -1 1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2788, '0 25 22 1 18 22 -1 1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2789, '0 25 22 1 18 1 -1 1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2790, '0 25 22 1 18 1 22 -1 1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2791, '25 22 -1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2792, '25 22 22 -1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2793, '25 22 1 -1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2794, '25 22 1 22 -1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2795, '25 15 -1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2796, '25 15 22 -1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2797, '25 18 18 1 -1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2798, '25 18 18 1 22 -1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2799, '25 18 1 -1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2800, '25 18 1 22 -1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2801, '25 2 -1 1 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2802, '25 2 22 -1 1 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2803, '25 1 13 1 -1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2804, '25 1 13 1 22 -1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2805, '25 1 18 -1 1 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2806, '25 1 18 22 -1 1 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2807, '25 1 18 1 -1 1 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2808, '25 1 18 1 22 -1 1 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2809, '25 22 22 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2810, '25 22 22 22 -1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2811, '25 22 22 1 -1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2812, '25 22 22 1 22 -1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2813, '25 22 15 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2814, '25 22 15 22 -1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2815, '25 22 18 18 1 -1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2816, '25 22 18 18 1 22 -1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2817, '25 22 18 1 -1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2818, '25 22 18 1 22 -1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2819, '25 22 2 -1 1 2 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2820, '25 22 2 22 -1 1 2 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2821, '25 22 1 13 1 -1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2822, '25 22 1 13 1 22 -1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2823, '25 22 1 18 -1 1 2 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2824, '25 22 1 18 22 -1 1 2 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2825, '25 22 1 18 1 -1 1 2 5 5 5 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2826, '25 22 1 18 1 22 -1 1 2 5 5 5 7 -1 1 5'); INSERT INTO pagc_rules (id, rule) VALUES (2827, '0 2 1 18 -1 1 4 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2828, '0 2 1 18 22 -1 1 4 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2829, '0 2 1 18 1 -1 1 4 5 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2830, '0 2 1 18 1 22 -1 1 4 5 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2831, '0 2 0 18 -1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2832, '0 2 0 18 22 -1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2833, '0 2 0 1 -1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2834, '0 2 0 1 22 -1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2835, '0 2 18 1 -1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2836, '0 2 18 1 22 -1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2837, '0 2 18 18 1 -1 1 4 5 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2838, '0 2 18 18 1 22 -1 1 4 5 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2839, '0 18 2 1 18 -1 1 1 4 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2840, '0 18 2 1 18 22 -1 1 1 4 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2841, '0 18 2 1 18 1 -1 1 1 4 5 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2842, '0 18 2 1 18 1 22 -1 1 1 4 5 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2843, '0 18 2 0 18 -1 1 1 4 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2844, '0 18 2 0 18 22 -1 1 1 4 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2845, '0 18 2 0 1 -1 1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2846, '0 18 2 0 1 22 -1 1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2847, '0 18 2 18 1 -1 1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2848, '0 18 2 18 1 22 -1 1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2849, '0 18 2 18 18 1 -1 1 1 4 5 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2850, '0 18 2 18 18 1 22 -1 1 1 4 5 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2851, '0 25 2 1 18 -1 1 1 4 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2852, '0 25 2 1 18 22 -1 1 1 4 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2853, '0 25 2 1 18 1 -1 1 1 4 5 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2854, '0 25 2 1 18 1 22 -1 1 1 4 5 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2855, '0 25 2 0 18 -1 1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2856, '0 25 2 0 18 22 -1 1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2857, '0 25 2 0 1 -1 1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2858, '0 25 2 0 1 22 -1 1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2859, '0 25 2 18 1 -1 1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2860, '0 25 2 18 1 22 -1 1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2861, '0 25 2 18 18 1 -1 1 1 4 5 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2862, '0 25 2 18 18 1 22 -1 1 1 4 5 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2863, '25 2 1 18 -1 1 4 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2864, '25 2 1 18 22 -1 1 4 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2865, '25 2 1 18 1 -1 1 4 5 5 5 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2866, '25 2 1 18 1 22 -1 1 4 5 5 5 7 -1 1 11'); INSERT INTO pagc_rules (id, rule) VALUES (2867, '25 2 0 18 -1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2868, '25 2 0 18 22 -1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2869, '25 2 0 1 -1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2870, '25 2 0 1 22 -1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2871, '25 2 18 1 -1 1 4 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2872, '25 2 18 1 22 -1 1 4 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2873, '25 2 18 18 1 -1 1 4 5 5 5 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2874, '25 2 18 18 1 22 -1 1 4 5 5 5 7 -1 1 8'); INSERT INTO pagc_rules (id, rule) VALUES (2875, '0 14 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2876, '0 14 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2877, '0 15 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2878, '0 15 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2879, '0 24 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2880, '0 24 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2881, '0 24 24 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2882, '0 24 24 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2883, '0 24 2 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2884, '0 24 2 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2885, '0 24 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2886, '0 24 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2887, '0 22 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2888, '0 22 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2889, '0 22 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2890, '0 22 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2891, '0 25 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2892, '0 25 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2893, '0 0 25 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2894, '0 0 25 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2895, '0 15 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2896, '0 15 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2897, '0 18 18 18 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2898, '0 18 18 18 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2899, '0 18 18 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2900, '0 18 18 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2901, '0 18 2 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2902, '0 18 2 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2903, '0 18 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2904, '0 18 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2905, '0 2 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2906, '0 2 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2907, '0 2 0 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2908, '0 2 0 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2909, '0 2 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2910, '0 2 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2911, '0 16 0 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2912, '0 16 0 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2913, '0 1 13 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2914, '0 1 13 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2915, '0 1 15 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2916, '0 1 15 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2917, '0 1 24 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2918, '0 1 24 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2919, '0 1 24 24 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2920, '0 1 24 24 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2921, '0 1 24 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2922, '0 1 24 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2923, '0 1 22 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2924, '0 1 22 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2925, '0 1 22 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2926, '0 1 22 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2927, '0 1 25 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2928, '0 1 25 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2929, '0 1 0 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2930, '0 1 0 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2931, '0 1 18 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2932, '0 1 18 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2933, '0 1 18 2 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2934, '0 1 18 2 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2935, '0 1 18 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2936, '0 1 18 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2937, '0 1 2 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2938, '0 1 2 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2939, '0 1 2 2 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2940, '0 1 2 2 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2941, '0 21 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2942, '0 21 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2943, '0 22 14 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2944, '0 22 14 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2945, '0 22 15 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2946, '0 22 15 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2947, '0 22 24 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2948, '0 22 24 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2949, '0 22 24 24 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2950, '0 22 24 24 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2951, '0 22 24 2 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2952, '0 22 24 2 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2953, '0 22 24 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2954, '0 22 24 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2955, '0 22 22 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2956, '0 22 22 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2957, '0 22 22 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2958, '0 22 22 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2959, '0 22 25 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2960, '0 22 25 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2961, '0 22 0 25 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2962, '0 22 0 25 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2963, '0 22 15 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2964, '0 22 15 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2965, '0 22 18 18 18 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2966, '0 22 18 18 18 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2967, '0 22 18 18 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2968, '0 22 18 18 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2969, '0 22 18 2 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2970, '0 22 18 2 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2971, '0 22 18 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2972, '0 22 18 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2973, '0 22 2 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2974, '0 22 2 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2975, '0 22 2 0 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2976, '0 22 2 0 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2977, '0 22 2 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2978, '0 22 2 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2979, '0 22 16 0 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2980, '0 22 16 0 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2981, '0 22 1 13 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2982, '0 22 1 13 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2983, '0 22 1 15 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2984, '0 22 1 15 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2985, '0 22 1 24 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2986, '0 22 1 24 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2987, '0 22 1 24 24 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2988, '0 22 1 24 24 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2989, '0 22 1 24 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2990, '0 22 1 24 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2991, '0 22 1 22 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2992, '0 22 1 22 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2993, '0 22 1 22 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2994, '0 22 1 22 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2995, '0 22 1 25 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2996, '0 22 1 25 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2997, '0 22 1 0 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2998, '0 22 1 0 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (2999, '0 22 1 18 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3000, '0 22 1 18 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3001, '0 22 1 18 2 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3002, '0 22 1 18 2 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3003, '0 22 1 18 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3004, '0 22 1 18 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3005, '0 22 1 2 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3006, '0 22 1 2 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3007, '0 22 1 2 2 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3008, '0 22 1 2 2 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3009, '0 22 21 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3010, '0 22 21 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3011, '0 18 14 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3012, '0 18 14 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3013, '0 18 15 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3014, '0 18 15 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3015, '0 18 24 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3016, '0 18 24 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3017, '0 18 24 24 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3018, '0 18 24 24 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3019, '0 18 24 2 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3020, '0 18 24 2 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3021, '0 18 24 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3022, '0 18 24 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3023, '0 18 22 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3024, '0 18 22 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3025, '0 18 22 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3026, '0 18 22 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3027, '0 18 25 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3028, '0 18 25 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3029, '0 18 0 25 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3030, '0 18 0 25 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3031, '0 18 15 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3032, '0 18 15 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3033, '0 18 18 18 18 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3034, '0 18 18 18 18 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3035, '0 18 18 18 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3036, '0 18 18 18 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3037, '0 18 18 2 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3038, '0 18 18 2 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3039, '0 18 18 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3040, '0 18 18 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3041, '0 18 2 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3042, '0 18 2 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3043, '0 18 2 0 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3044, '0 18 2 0 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3045, '0 18 2 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3046, '0 18 2 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3047, '0 18 16 0 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3048, '0 18 16 0 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3049, '0 18 1 13 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3050, '0 18 1 13 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3051, '0 18 1 15 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3052, '0 18 1 15 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3053, '0 18 1 24 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3054, '0 18 1 24 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3055, '0 18 1 24 24 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3056, '0 18 1 24 24 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3057, '0 18 1 24 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3058, '0 18 1 24 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3059, '0 18 1 22 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3060, '0 18 1 22 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3061, '0 18 1 22 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3062, '0 18 1 22 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3063, '0 18 1 25 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3064, '0 18 1 25 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3065, '0 18 1 0 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3066, '0 18 1 0 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3067, '0 18 1 18 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3068, '0 18 1 18 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3069, '0 18 1 18 2 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3070, '0 18 1 18 2 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3071, '0 18 1 18 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3072, '0 18 1 18 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3073, '0 18 1 2 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3074, '0 18 1 2 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3075, '0 18 1 2 2 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3076, '0 18 1 2 2 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3077, '0 18 21 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3078, '0 18 21 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3079, '0 18 22 14 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3080, '0 18 22 14 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3081, '0 18 22 15 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3082, '0 18 22 15 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3083, '0 18 22 24 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3084, '0 18 22 24 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3085, '0 18 22 24 24 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3086, '0 18 22 24 24 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3087, '0 18 22 24 2 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3088, '0 18 22 24 2 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3089, '0 18 22 24 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3090, '0 18 22 24 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3091, '0 18 22 22 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3092, '0 18 22 22 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3093, '0 18 22 22 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3094, '0 18 22 22 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3095, '0 18 22 25 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3096, '0 18 22 25 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3097, '0 18 22 0 25 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3098, '0 18 22 0 25 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3099, '0 18 22 15 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3100, '0 18 22 15 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3101, '0 18 22 18 18 18 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3102, '0 18 22 18 18 18 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3103, '0 18 22 18 18 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3104, '0 18 22 18 18 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3105, '0 18 22 18 2 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3106, '0 18 22 18 2 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3107, '0 18 22 18 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3108, '0 18 22 18 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3109, '0 18 22 2 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3110, '0 18 22 2 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3111, '0 18 22 2 0 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3112, '0 18 22 2 0 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3113, '0 18 22 2 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3114, '0 18 22 2 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3115, '0 18 22 16 0 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3116, '0 18 22 16 0 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3117, '0 18 22 1 13 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3118, '0 18 22 1 13 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3119, '0 18 22 1 15 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3120, '0 18 22 1 15 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3121, '0 18 22 1 24 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3122, '0 18 22 1 24 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3123, '0 18 22 1 24 24 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3124, '0 18 22 1 24 24 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3125, '0 18 22 1 24 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3126, '0 18 22 1 24 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3127, '0 18 22 1 22 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3128, '0 18 22 1 22 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3129, '0 18 22 1 22 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3130, '0 18 22 1 22 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3131, '0 18 22 1 25 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3132, '0 18 22 1 25 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3133, '0 18 22 1 0 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3134, '0 18 22 1 0 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3135, '0 18 22 1 18 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3136, '0 18 22 1 18 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3137, '0 18 22 1 18 2 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3138, '0 18 22 1 18 2 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3139, '0 18 22 1 18 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3140, '0 18 22 1 18 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3141, '0 18 22 1 2 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3142, '0 18 22 1 2 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3143, '0 18 22 1 2 2 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3144, '0 18 22 1 2 2 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3145, '0 18 22 21 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3146, '0 18 22 21 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3147, '0 25 14 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3148, '0 25 14 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3149, '0 25 15 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3150, '0 25 15 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3151, '0 25 24 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3152, '0 25 24 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3153, '0 25 24 24 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3154, '0 25 24 24 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3155, '0 25 24 2 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3156, '0 25 24 2 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3157, '0 25 24 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3158, '0 25 24 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3159, '0 25 22 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3160, '0 25 22 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3161, '0 25 22 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3162, '0 25 22 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3163, '0 25 25 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3164, '0 25 25 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3165, '0 25 0 25 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3166, '0 25 0 25 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3167, '0 25 15 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3168, '0 25 15 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3169, '0 25 18 18 18 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3170, '0 25 18 18 18 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3171, '0 25 18 18 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3172, '0 25 18 18 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3173, '0 25 18 2 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3174, '0 25 18 2 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3175, '0 25 18 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3176, '0 25 18 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3177, '0 25 2 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3178, '0 25 2 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3179, '0 25 2 0 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3180, '0 25 2 0 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3181, '0 25 2 1 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3182, '0 25 2 1 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3183, '0 25 16 0 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3184, '0 25 16 0 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3185, '0 25 1 13 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3186, '0 25 1 13 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3187, '0 25 1 15 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3188, '0 25 1 15 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3189, '0 25 1 24 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3190, '0 25 1 24 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3191, '0 25 1 24 24 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3192, '0 25 1 24 24 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3193, '0 25 1 24 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3194, '0 25 1 24 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3195, '0 25 1 22 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3196, '0 25 1 22 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3197, '0 25 1 22 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3198, '0 25 1 22 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3199, '0 25 1 25 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3200, '0 25 1 25 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3201, '0 25 1 0 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3202, '0 25 1 0 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3203, '0 25 1 18 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3204, '0 25 1 18 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3205, '0 25 1 18 2 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3206, '0 25 1 18 2 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3207, '0 25 1 18 1 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3208, '0 25 1 18 1 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3209, '0 25 1 2 2 -1 1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3210, '0 25 1 2 2 22 -1 1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3211, '0 25 1 2 2 2 -1 1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3212, '0 25 1 2 2 2 22 -1 1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3213, '0 25 21 2 -1 1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3214, '0 25 21 2 22 -1 1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3215, '0 25 22 14 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3216, '0 25 22 14 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3217, '0 25 22 15 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3218, '0 25 22 15 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3219, '0 25 22 24 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3220, '0 25 22 24 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3221, '0 25 22 24 24 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3222, '0 25 22 24 24 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3223, '0 25 22 24 2 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3224, '0 25 22 24 2 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3225, '0 25 22 24 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3226, '0 25 22 24 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3227, '0 25 22 22 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3228, '0 25 22 22 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3229, '0 25 22 22 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3230, '0 25 22 22 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3231, '0 25 22 25 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3232, '0 25 22 25 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3233, '0 25 22 0 25 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3234, '0 25 22 0 25 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3235, '0 25 22 15 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3236, '0 25 22 15 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3237, '0 25 22 18 18 18 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3238, '0 25 22 18 18 18 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3239, '0 25 22 18 18 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3240, '0 25 22 18 18 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3241, '0 25 22 18 2 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3242, '0 25 22 18 2 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3243, '0 25 22 18 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3244, '0 25 22 18 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3245, '0 25 22 2 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3246, '0 25 22 2 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3247, '0 25 22 2 0 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3248, '0 25 22 2 0 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3249, '0 25 22 2 1 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3250, '0 25 22 2 1 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3251, '0 25 22 16 0 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3252, '0 25 22 16 0 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3253, '0 25 22 1 13 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3254, '0 25 22 1 13 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3255, '0 25 22 1 15 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3256, '0 25 22 1 15 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3257, '0 25 22 1 24 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3258, '0 25 22 1 24 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3259, '0 25 22 1 24 24 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3260, '0 25 22 1 24 24 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3261, '0 25 22 1 24 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3262, '0 25 22 1 24 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3263, '0 25 22 1 22 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3264, '0 25 22 1 22 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3265, '0 25 22 1 22 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3266, '0 25 22 1 22 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3267, '0 25 22 1 25 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3268, '0 25 22 1 25 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3269, '0 25 22 1 0 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3270, '0 25 22 1 0 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3271, '0 25 22 1 18 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3272, '0 25 22 1 18 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3273, '0 25 22 1 18 2 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3274, '0 25 22 1 18 2 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3275, '0 25 22 1 18 1 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3276, '0 25 22 1 18 1 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3277, '0 25 22 1 2 2 -1 1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3278, '0 25 22 1 2 2 22 -1 1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3279, '0 25 22 1 2 2 2 -1 1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3280, '0 25 22 1 2 2 2 22 -1 1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3281, '0 25 22 21 2 -1 1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3282, '0 25 22 21 2 22 -1 1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3283, '25 14 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3284, '25 14 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3285, '25 15 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3286, '25 15 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3287, '25 24 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3288, '25 24 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3289, '25 24 24 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3290, '25 24 24 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3291, '25 24 2 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3292, '25 24 2 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3293, '25 24 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3294, '25 24 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3295, '25 22 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3296, '25 22 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3297, '25 22 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3298, '25 22 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3299, '25 25 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3300, '25 25 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3301, '25 0 25 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3302, '25 0 25 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3303, '25 15 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3304, '25 15 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3305, '25 18 18 18 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3306, '25 18 18 18 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3307, '25 18 18 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3308, '25 18 18 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3309, '25 18 2 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3310, '25 18 2 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3311, '25 18 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3312, '25 18 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3313, '25 2 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3314, '25 2 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3315, '25 2 0 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3316, '25 2 0 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3317, '25 2 1 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3318, '25 2 1 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3319, '25 16 0 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3320, '25 16 0 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3321, '25 1 13 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3322, '25 1 13 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3323, '25 1 15 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3324, '25 1 15 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3325, '25 1 24 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3326, '25 1 24 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3327, '25 1 24 24 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3328, '25 1 24 24 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3329, '25 1 24 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3330, '25 1 24 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3331, '25 1 22 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3332, '25 1 22 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3333, '25 1 22 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3334, '25 1 22 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3335, '25 1 25 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3336, '25 1 25 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3337, '25 1 0 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3338, '25 1 0 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3339, '25 1 18 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3340, '25 1 18 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3341, '25 1 18 2 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3342, '25 1 18 2 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3343, '25 1 18 1 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3344, '25 1 18 1 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3345, '25 1 2 2 -1 1 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3346, '25 1 2 2 22 -1 1 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3347, '25 1 2 2 2 -1 1 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3348, '25 1 2 2 2 22 -1 1 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3349, '25 21 2 -1 1 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3350, '25 21 2 22 -1 1 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3351, '25 22 14 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3352, '25 22 14 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3353, '25 22 15 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3354, '25 22 15 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3355, '25 22 24 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3356, '25 22 24 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3357, '25 22 24 24 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3358, '25 22 24 24 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3359, '25 22 24 2 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3360, '25 22 24 2 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3361, '25 22 24 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3362, '25 22 24 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3363, '25 22 22 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3364, '25 22 22 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3365, '25 22 22 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3366, '25 22 22 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3367, '25 22 25 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3368, '25 22 25 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3369, '25 22 0 25 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3370, '25 22 0 25 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3371, '25 22 15 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3372, '25 22 15 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3373, '25 22 18 18 18 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3374, '25 22 18 18 18 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3375, '25 22 18 18 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3376, '25 22 18 18 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3377, '25 22 18 2 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3378, '25 22 18 2 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3379, '25 22 18 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3380, '25 22 18 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3381, '25 22 2 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3382, '25 22 2 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3383, '25 22 2 0 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3384, '25 22 2 0 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3385, '25 22 2 1 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3386, '25 22 2 1 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3387, '25 22 16 0 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3388, '25 22 16 0 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3389, '25 22 1 13 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3390, '25 22 1 13 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3391, '25 22 1 15 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3392, '25 22 1 15 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3393, '25 22 1 24 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3394, '25 22 1 24 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3395, '25 22 1 24 24 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3396, '25 22 1 24 24 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3397, '25 22 1 24 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3398, '25 22 1 24 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3399, '25 22 1 22 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3400, '25 22 1 22 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3401, '25 22 1 22 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3402, '25 22 1 22 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3403, '25 22 1 25 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3404, '25 22 1 25 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3405, '25 22 1 0 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3406, '25 22 1 0 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3407, '25 22 1 18 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3408, '25 22 1 18 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3409, '25 22 1 18 2 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3410, '25 22 1 18 2 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3411, '25 22 1 18 1 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3412, '25 22 1 18 1 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3413, '25 22 1 2 2 -1 1 2 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3414, '25 22 1 2 2 22 -1 1 2 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3415, '25 22 1 2 2 2 -1 1 2 5 5 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3416, '25 22 1 2 2 2 22 -1 1 2 5 5 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3417, '25 22 21 2 -1 1 2 5 6 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3418, '25 22 21 2 22 -1 1 2 5 6 7 -1 1 16'); INSERT INTO pagc_rules (id, rule) VALUES (3419, '0 -1 1 -1 3 17'); INSERT INTO pagc_rules (id, rule) VALUES (3420, '0 18 -1 1 1 -1 3 16'); INSERT INTO pagc_rules (id, rule) VALUES (3421, '0 25 -1 1 1 -1 3 16'); INSERT INTO pagc_rules (id, rule) VALUES (3422, '0 22 -1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3423, '22 0 -1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3424, '1 0 -1 1 1 -1 3 6'); INSERT INTO pagc_rules (id, rule) VALUES (3425, '18 0 -1 1 1 -1 3 12'); INSERT INTO pagc_rules (id, rule) VALUES (3426, '25 -1 1 -1 3 12'); INSERT INTO pagc_rules (id, rule) VALUES (3427, '21 0 -1 1 1 -1 3 12'); INSERT INTO pagc_rules (id, rule) VALUES (3428, '0 21 -1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3429, '0 0 -1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3430, '21 0 0 -1 1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3431, '0 0 21 -1 1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3432, '0 0 18 -1 1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3433, '18 0 -1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3434, '18 0 0 -1 1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3435, '0 0 18 -1 1 1 1 -1 3 9'); INSERT INTO pagc_rules (id, rule) VALUES (3436, '8 -1 8 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3437, '8 23 -1 8 8 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3438, '8 0 -1 8 8 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3439, '8 0 18 -1 8 8 8 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3440, '8 18 -1 8 8 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3441, '8 18 0 -1 8 8 8 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3442, '8 1 -1 8 8 -1 4 2'); INSERT INTO pagc_rules (id, rule) VALUES (3443, '14 -1 14 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3444, '14 21 -1 14 15 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3445, '14 23 -1 14 15 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3446, '14 0 -1 14 15 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3447, '14 0 18 -1 14 15 15 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3448, '14 0 18 0 -1 14 15 15 15 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3449, '14 18 -1 14 15 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3450, '14 18 0 -1 14 15 15 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3451, '14 1 -1 14 15 -1 4 2'); INSERT INTO pagc_rules (id, rule) VALUES (3452, '1 24 -1 0 0 -1 4 15'); INSERT INTO pagc_rules (id, rule) VALUES (3453, '14 24 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3454, '24 24 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3455, '24 24 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3456, '24 22 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3457, '24 18 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3458, '24 2 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3459, '24 1 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3460, '22 24 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3461, '22 24 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3462, '22 24 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3463, '22 24 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3464, '22 22 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3465, '22 2 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3466, '22 1 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3467, '18 24 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3468, '18 13 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3469, '18 24 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3470, '18 18 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3471, '18 18 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3472, '18 18 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3473, '18 18 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3474, '18 2 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3475, '18 1 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3476, '18 1 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3477, '2 24 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3478, '2 22 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3479, '2 0 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3480, '2 18 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3481, '2 2 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3482, '2 1 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3483, '1 13 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3484, '1 24 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3485, '1 24 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3486, '1 24 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3487, '1 24 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3488, '1 22 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3489, '1 22 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3490, '1 0 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3491, '1 0 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3492, '1 0 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3493, '1 18 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3494, '1 18 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3495, '1 2 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3496, '1 2 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3497, '0 1 24 -1 0 0 0 -1 4 15'); INSERT INTO pagc_rules (id, rule) VALUES (3498, '0 14 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3499, '0 24 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3500, '0 24 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3501, '0 24 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3502, '0 24 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3503, '0 24 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3504, '0 24 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3505, '0 22 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3506, '0 22 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3507, '0 22 24 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3508, '0 22 24 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3509, '0 22 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3510, '0 22 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3511, '0 22 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3512, '0 18 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3513, '0 18 13 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3514, '0 18 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3515, '0 18 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3516, '0 18 18 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3517, '0 18 18 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3518, '0 18 18 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3519, '0 18 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3520, '0 18 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3521, '0 18 1 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3522, '0 2 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3523, '0 2 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3524, '0 2 0 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3525, '0 2 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3526, '0 2 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3527, '0 2 1 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3528, '0 1 13 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3529, '0 1 24 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3530, '0 1 24 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3531, '0 1 24 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3532, '0 1 24 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3533, '0 1 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3534, '0 1 22 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3535, '0 1 0 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3536, '0 1 0 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3537, '0 1 0 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3538, '0 1 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3539, '0 1 18 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3540, '0 1 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3541, '0 1 2 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3542, '0 18 1 24 -1 0 0 0 0 -1 4 15'); INSERT INTO pagc_rules (id, rule) VALUES (3543, '0 18 14 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3544, '0 18 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3545, '0 18 24 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3546, '0 18 24 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3547, '0 18 24 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3548, '0 18 24 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3549, '0 18 24 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3550, '0 18 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3551, '0 18 22 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3552, '0 18 22 24 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3553, '0 18 22 24 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3554, '0 18 22 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3555, '0 18 22 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3556, '0 18 22 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3557, '0 18 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3558, '0 18 18 13 18 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3559, '0 18 18 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3560, '0 18 18 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3561, '0 18 18 18 18 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3562, '0 18 18 18 2 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3563, '0 18 18 18 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3564, '0 18 18 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3565, '0 18 18 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3566, '0 18 18 1 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3567, '0 18 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3568, '0 18 2 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3569, '0 18 2 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3570, '0 18 2 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3571, '0 18 2 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3572, '0 18 2 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3573, '0 18 1 13 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3574, '0 18 1 24 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3575, '0 18 1 24 22 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3576, '0 18 1 24 2 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3577, '0 18 1 24 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3578, '0 18 1 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3579, '0 18 1 22 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3580, '0 18 1 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3581, '0 18 1 0 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3582, '0 18 1 0 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3583, '0 18 1 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3584, '0 18 1 18 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3585, '0 18 1 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3586, '0 18 1 2 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3587, '0 25 1 24 -1 0 0 0 0 -1 4 15'); INSERT INTO pagc_rules (id, rule) VALUES (3588, '0 25 14 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3589, '0 25 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3590, '0 25 24 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3591, '0 25 24 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3592, '0 25 24 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3593, '0 25 24 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3594, '0 25 24 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3595, '0 25 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3596, '0 25 22 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3597, '0 25 22 24 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3598, '0 25 22 24 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3599, '0 25 22 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3600, '0 25 22 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3601, '0 25 22 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3602, '0 25 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3603, '0 25 18 13 18 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3604, '0 25 18 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3605, '0 25 18 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3606, '0 25 18 18 18 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3607, '0 25 18 18 2 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3608, '0 25 18 18 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3609, '0 25 18 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3610, '0 25 18 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3611, '0 25 18 1 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3612, '0 25 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3613, '0 25 2 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3614, '0 25 2 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3615, '0 25 2 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3616, '0 25 2 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3617, '0 25 2 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3618, '0 25 1 13 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3619, '0 25 1 24 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3620, '0 25 1 24 22 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3621, '0 25 1 24 2 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3622, '0 25 1 24 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3623, '0 25 1 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3624, '0 25 1 22 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3625, '0 25 1 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3626, '0 25 1 0 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3627, '0 25 1 0 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3628, '0 25 1 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3629, '0 25 1 18 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3630, '0 25 1 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3631, '0 25 1 2 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3632, '18 0 1 24 -1 0 0 0 0 -1 4 15'); INSERT INTO pagc_rules (id, rule) VALUES (3633, '18 0 14 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3634, '18 0 24 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3635, '18 0 24 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3636, '18 0 24 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3637, '18 0 24 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3638, '18 0 24 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3639, '18 0 24 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3640, '18 0 22 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3641, '18 0 22 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3642, '18 0 22 24 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3643, '18 0 22 24 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3644, '18 0 22 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3645, '18 0 22 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3646, '18 0 22 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3647, '18 0 18 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3648, '18 0 18 13 18 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3649, '18 0 18 24 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3650, '18 0 18 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3651, '18 0 18 18 18 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3652, '18 0 18 18 2 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3653, '18 0 18 18 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3654, '18 0 18 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3655, '18 0 18 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3656, '18 0 18 1 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3657, '18 0 2 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3658, '18 0 2 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3659, '18 0 2 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3660, '18 0 2 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3661, '18 0 2 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3662, '18 0 2 1 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3663, '18 0 1 13 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3664, '18 0 1 24 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3665, '18 0 1 24 22 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3666, '18 0 1 24 2 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3667, '18 0 1 24 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3668, '18 0 1 22 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3669, '18 0 1 22 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3670, '18 0 1 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3671, '18 0 1 0 24 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3672, '18 0 1 0 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3673, '18 0 1 18 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3674, '18 0 1 18 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3675, '18 0 1 2 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3676, '18 0 1 2 1 24 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3677, '19 -1 0 -1 4 2'); INSERT INTO pagc_rules (id, rule) VALUES (3678, '19 1 -1 0 0 -1 4 6'); INSERT INTO pagc_rules (id, rule) VALUES (3679, '19 24 1 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3680, '19 24 1 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3681, '19 23 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3682, '19 0 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3683, '19 0 24 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3684, '19 0 1 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3685, '19 18 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3686, '19 2 0 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3687, '19 1 0 -1 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3688, '0 19 -1 0 0 -1 4 2'); INSERT INTO pagc_rules (id, rule) VALUES (3689, '0 19 1 -1 0 0 0 -1 4 6'); INSERT INTO pagc_rules (id, rule) VALUES (3690, '0 19 24 1 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3691, '0 19 24 1 0 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3692, '0 19 23 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3693, '0 19 0 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3694, '0 19 0 24 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3695, '0 19 0 1 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3696, '0 19 18 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3697, '0 19 2 0 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3698, '0 19 1 0 -1 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3699, '0 18 19 -1 0 0 0 -1 4 2'); INSERT INTO pagc_rules (id, rule) VALUES (3700, '0 18 19 1 -1 0 0 0 0 -1 4 6'); INSERT INTO pagc_rules (id, rule) VALUES (3701, '0 18 19 24 1 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3702, '0 18 19 24 1 0 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3703, '0 18 19 23 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3704, '0 18 19 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3705, '0 18 19 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3706, '0 18 19 0 1 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3707, '0 18 19 18 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3708, '0 18 19 2 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3709, '0 18 19 1 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3710, '0 25 19 -1 0 0 0 -1 4 2'); INSERT INTO pagc_rules (id, rule) VALUES (3711, '0 25 19 1 -1 0 0 0 0 -1 4 6'); INSERT INTO pagc_rules (id, rule) VALUES (3712, '0 25 19 24 1 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3713, '0 25 19 24 1 0 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3714, '0 25 19 23 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3715, '0 25 19 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3716, '0 25 19 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3717, '0 25 19 0 1 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3718, '0 25 19 18 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3719, '0 25 19 2 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3720, '0 25 19 1 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3721, '18 0 19 -1 0 0 0 -1 4 2'); INSERT INTO pagc_rules (id, rule) VALUES (3722, '18 0 19 1 -1 0 0 0 0 -1 4 6'); INSERT INTO pagc_rules (id, rule) VALUES (3723, '18 0 19 24 1 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3724, '18 0 19 24 1 0 -1 0 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3725, '18 0 19 23 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3726, '18 0 19 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3727, '18 0 19 0 24 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3728, '18 0 19 0 1 -1 0 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3729, '18 0 19 18 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3730, '18 0 19 2 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3731, '18 0 19 1 0 -1 0 0 0 0 -1 4 10'); INSERT INTO pagc_rules (id, rule) VALUES (3732, '23 -1 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3733, '0 -1 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3734, '18 -1 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3735, '18 0 -1 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3736, '18 18 -1 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3737, '18 0 18 -1 17 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3738, '21 -1 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3739, '21 0 -1 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3740, '25 -1 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3741, '0 21 -1 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3742, '0 0 -1 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3743, '0 18 -1 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3744, '0 1 -1 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3745, '1 -1 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3746, '16 -1 16 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3747, '16 23 -1 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3748, '16 0 -1 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3749, '16 18 -1 16 17 -1 4 11'); INSERT INTO pagc_rules (id, rule) VALUES (3750, '16 18 0 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3751, '16 18 18 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3752, '16 18 0 18 -1 16 17 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3753, '16 21 -1 16 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3754, '16 21 0 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3755, '16 25 -1 16 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3756, '16 0 21 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3757, '16 0 0 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3758, '16 0 18 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3759, '16 0 1 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3760, '16 1 -1 16 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3761, '16 16 -1 16 16 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3762, '16 16 23 -1 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3763, '16 16 0 -1 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3764, '16 16 18 -1 16 16 17 -1 4 11'); INSERT INTO pagc_rules (id, rule) VALUES (3765, '16 16 18 0 -1 16 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3766, '16 16 18 18 -1 16 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3767, '16 16 18 0 18 -1 16 16 17 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3768, '16 16 21 -1 16 16 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3769, '16 16 21 0 -1 16 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3770, '16 16 25 -1 16 16 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3771, '16 16 0 21 -1 16 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3772, '16 16 0 0 -1 16 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3773, '16 16 0 18 -1 16 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3774, '16 16 0 1 -1 16 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3775, '16 16 1 -1 16 16 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (3776, '17 -1 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3777, '17 23 -1 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3778, '17 0 -1 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3779, '17 18 -1 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3780, '17 18 0 -1 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3781, '17 18 18 -1 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3782, '17 18 0 18 -1 17 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3783, '17 21 -1 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3784, '17 21 0 -1 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3785, '17 25 -1 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3786, '17 0 21 -1 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3787, '17 0 0 -1 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3788, '17 0 18 -1 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3789, '17 0 1 -1 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3790, '17 1 -1 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3791, '17 16 -1 17 16 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3792, '17 16 23 -1 17 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3793, '17 16 0 -1 17 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3794, '17 16 18 -1 17 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3795, '17 16 18 0 -1 17 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3796, '17 16 18 18 -1 17 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3797, '17 16 18 0 18 -1 17 16 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3798, '17 16 21 -1 17 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3799, '17 16 21 0 -1 17 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3800, '17 16 25 -1 17 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3801, '17 16 0 21 -1 17 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3802, '17 16 0 0 -1 17 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3803, '17 16 0 18 -1 17 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3804, '17 16 0 1 -1 17 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3805, '17 16 1 -1 17 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3806, '17 16 16 -1 17 16 16 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3807, '17 16 16 23 -1 17 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3808, '17 16 16 0 -1 17 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3809, '17 16 16 18 -1 17 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3810, '17 16 16 18 0 -1 17 16 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3811, '17 16 16 18 18 -1 17 16 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3812, '17 16 16 18 0 18 -1 17 16 16 17 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3813, '17 16 16 21 -1 17 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3814, '17 16 16 21 0 -1 17 16 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3815, '17 16 16 25 -1 17 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3816, '17 16 16 0 21 -1 17 16 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3817, '17 16 16 0 0 -1 17 16 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3818, '17 16 16 0 18 -1 17 16 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3819, '17 16 16 0 1 -1 17 16 16 17 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3820, '17 16 16 1 -1 17 16 16 17 -1 4 17'); INSERT INTO pagc_rules (id, rule) VALUES (3821, '15 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3822, '15 17 23 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3823, '15 17 0 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3824, '15 17 18 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3825, '15 17 18 0 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3826, '15 17 18 18 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3827, '15 17 18 0 18 -1 17 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3828, '15 17 21 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3829, '15 17 21 0 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3830, '15 17 25 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3831, '15 17 0 21 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3832, '15 17 0 0 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3833, '15 17 0 18 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3834, '15 17 0 1 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3835, '15 17 1 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3836, '15 17 16 -1 17 17 16 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3837, '15 17 16 23 -1 17 17 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3838, '15 17 16 0 -1 17 17 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3839, '15 17 16 18 -1 17 17 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3840, '15 17 16 18 0 -1 17 17 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3841, '15 17 16 18 18 -1 17 17 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3842, '15 17 16 18 0 18 -1 17 17 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3843, '15 17 16 21 -1 17 17 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3844, '15 17 16 21 0 -1 17 17 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3845, '15 17 16 25 -1 17 17 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3846, '15 17 16 0 21 -1 17 17 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3847, '15 17 16 0 0 -1 17 17 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3848, '15 17 16 0 18 -1 17 17 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3849, '15 17 16 0 1 -1 17 17 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3850, '15 17 16 1 -1 17 17 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3851, '15 17 16 16 -1 17 17 16 16 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3852, '15 17 16 16 23 -1 17 17 16 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3853, '15 17 16 16 0 -1 17 17 16 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3854, '15 17 16 16 18 -1 17 17 16 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3855, '15 17 16 16 18 0 -1 17 17 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3856, '15 17 16 16 18 18 -1 17 17 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3857, '15 17 16 16 18 0 18 -1 17 17 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3858, '15 17 16 16 21 -1 17 17 16 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3859, '15 17 16 16 21 0 -1 17 17 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3860, '15 17 16 16 25 -1 17 17 16 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3861, '15 17 16 16 0 21 -1 17 17 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3862, '15 17 16 16 0 0 -1 17 17 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3863, '15 17 16 16 0 18 -1 17 17 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3864, '15 17 16 16 0 1 -1 17 17 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3865, '15 17 16 16 1 -1 17 17 16 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3866, '17 17 -1 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3867, '17 17 23 -1 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3868, '17 17 0 -1 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3869, '17 17 18 -1 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3870, '17 17 18 0 -1 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3871, '17 17 18 18 -1 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3872, '17 17 18 0 18 -1 17 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3873, '17 17 21 -1 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3874, '17 17 21 0 -1 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3875, '17 17 25 -1 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3876, '17 17 0 21 -1 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3877, '17 17 0 0 -1 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3878, '17 17 0 18 -1 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3879, '17 17 0 1 -1 17 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3880, '17 17 1 -1 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3881, '17 17 16 -1 17 17 16 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3882, '17 17 16 23 -1 17 17 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3883, '17 17 16 0 -1 17 17 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3884, '17 17 16 18 -1 17 17 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3885, '17 17 16 18 0 -1 17 17 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3886, '17 17 16 18 18 -1 17 17 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3887, '17 17 16 18 0 18 -1 17 17 16 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3888, '17 17 16 21 -1 17 17 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3889, '17 17 16 21 0 -1 17 17 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3890, '17 17 16 25 -1 17 17 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3891, '17 17 16 0 21 -1 17 17 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3892, '17 17 16 0 0 -1 17 17 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3893, '17 17 16 0 18 -1 17 17 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3894, '17 17 16 0 1 -1 17 17 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3895, '17 17 16 1 -1 17 17 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3896, '17 17 16 16 -1 17 17 16 16 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3897, '17 17 16 16 23 -1 17 17 16 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3898, '17 17 16 16 0 -1 17 17 16 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3899, '17 17 16 16 18 -1 17 17 16 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3900, '17 17 16 16 18 0 -1 17 17 16 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3901, '17 17 16 16 18 18 -1 17 17 16 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3902, '17 17 16 16 18 0 18 -1 17 17 16 16 17 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3903, '17 17 16 16 21 -1 17 17 16 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3904, '17 17 16 16 21 0 -1 17 17 16 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3905, '17 17 16 16 25 -1 17 17 16 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3906, '17 17 16 16 0 21 -1 17 17 16 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3907, '17 17 16 16 0 0 -1 17 17 16 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3908, '17 17 16 16 0 18 -1 17 17 16 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3909, '17 17 16 16 0 1 -1 17 17 16 16 17 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3910, '17 17 16 16 1 -1 17 17 16 16 17 -1 4 16'); INSERT INTO pagc_rules (id, rule) VALUES (3911, '17 -1 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3912, '15 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3913, '17 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3914, '23 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3915, '23 15 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3916, '23 17 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3917, '0 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3918, '0 15 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3919, '0 17 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3920, '18 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3921, '18 15 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3922, '18 17 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3923, '18 0 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3924, '18 0 15 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3925, '18 0 17 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3926, '18 18 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3927, '18 18 15 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3928, '18 18 17 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3929, '18 0 18 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3930, '18 0 18 15 17 -1 17 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3931, '18 0 18 17 17 -1 17 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3932, '21 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3933, '21 15 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3934, '21 17 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3935, '21 0 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3936, '21 0 15 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3937, '21 0 17 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3938, '25 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3939, '25 15 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3940, '25 17 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3941, '0 21 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3942, '0 21 15 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3943, '0 21 17 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3944, '0 0 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3945, '0 0 15 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3946, '0 0 17 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3947, '0 18 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3948, '0 18 15 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3949, '0 18 17 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3950, '0 1 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3951, '0 1 15 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3952, '0 1 17 17 -1 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3953, '1 17 -1 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3954, '1 15 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3955, '1 17 17 -1 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3956, '16 17 -1 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3957, '16 15 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3958, '16 17 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3959, '16 23 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3960, '16 23 15 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3961, '16 23 17 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3962, '16 0 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3963, '16 0 15 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3964, '16 0 17 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3965, '16 18 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3966, '16 18 15 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3967, '16 18 17 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3968, '16 18 0 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3969, '16 18 0 15 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3970, '16 18 0 17 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3971, '16 18 18 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3972, '16 18 18 15 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3973, '16 18 18 17 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3974, '16 18 0 18 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3975, '16 18 0 18 15 17 -1 16 17 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3976, '16 18 0 18 17 17 -1 16 17 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3977, '16 21 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3978, '16 21 15 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3979, '16 21 17 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3980, '16 21 0 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3981, '16 21 0 15 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3982, '16 21 0 17 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3983, '16 25 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3984, '16 25 15 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3985, '16 25 17 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3986, '16 0 21 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3987, '16 0 21 15 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3988, '16 0 21 17 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3989, '16 0 0 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3990, '16 0 0 15 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3991, '16 0 0 17 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3992, '16 0 18 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3993, '16 0 18 15 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3994, '16 0 18 17 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3995, '16 0 1 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3996, '16 0 1 15 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3997, '16 0 1 17 17 -1 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3998, '16 1 17 -1 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (3999, '16 1 15 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4000, '16 1 17 17 -1 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4001, '16 16 17 -1 16 16 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4002, '16 16 15 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4003, '16 16 17 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4004, '16 16 23 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4005, '16 16 23 15 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4006, '16 16 23 17 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4007, '16 16 0 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4008, '16 16 0 15 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4009, '16 16 0 17 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4010, '16 16 18 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4011, '16 16 18 15 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4012, '16 16 18 17 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4013, '16 16 18 0 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4014, '16 16 18 0 15 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4015, '16 16 18 0 17 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4016, '16 16 18 18 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4017, '16 16 18 18 15 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4018, '16 16 18 18 17 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4019, '16 16 18 0 18 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4020, '16 16 18 0 18 15 17 -1 16 16 17 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4021, '16 16 18 0 18 17 17 -1 16 16 17 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4022, '16 16 21 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4023, '16 16 21 15 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4024, '16 16 21 17 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4025, '16 16 21 0 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4026, '16 16 21 0 15 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4027, '16 16 21 0 17 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4028, '16 16 25 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4029, '16 16 25 15 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4030, '16 16 25 17 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4031, '16 16 0 21 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4032, '16 16 0 21 15 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4033, '16 16 0 21 17 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4034, '16 16 0 0 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4035, '16 16 0 0 15 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4036, '16 16 0 0 17 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4037, '16 16 0 18 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4038, '16 16 0 18 15 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4039, '16 16 0 18 17 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4040, '16 16 0 1 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4041, '16 16 0 1 15 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4042, '16 16 0 1 17 17 -1 16 16 17 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4043, '16 16 1 17 -1 16 16 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4044, '16 16 1 15 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4045, '16 16 1 17 17 -1 16 16 17 17 17 -1 4 8'); INSERT INTO pagc_rules (id, rule) VALUES (4046, '12 -1 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4047, '12 23 23 13 13 -1 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4048, '12 0 -1 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4049, '12 0 0 -1 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4050, '12 27 -1 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4051, '12 27 26 -1 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4052, '12 28 -1 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4053, '12 28 29 -1 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4054, '23 23 13 13 -1 -1 0 14'); INSERT INTO pagc_rules (id, rule) VALUES (4055, '23 23 13 13 12 -1 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4056, '0 -1 13 -1 0 14'); INSERT INTO pagc_rules (id, rule) VALUES (4057, '0 12 -1 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4058, '0 0 -1 13 13 -1 0 14'); INSERT INTO pagc_rules (id, rule) VALUES (4059, '0 0 12 -1 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4060, '27 -1 13 -1 0 14'); INSERT INTO pagc_rules (id, rule) VALUES (4061, '27 12 -1 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4062, '27 26 -1 13 13 -1 0 14'); INSERT INTO pagc_rules (id, rule) VALUES (4063, '27 26 12 -1 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4064, '28 -1 13 -1 0 14'); INSERT INTO pagc_rules (id, rule) VALUES (4065, '28 12 -1 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4066, '28 29 -1 13 13 -1 0 14'); INSERT INTO pagc_rules (id, rule) VALUES (4067, '28 29 12 -1 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4068, '11 -1 11 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4069, '11 23 23 13 13 -1 11 -1 0 7'); INSERT INTO pagc_rules (id, rule) VALUES (4070, '11 0 -1 11 13 -1 0 7'); INSERT INTO pagc_rules (id, rule) VALUES (4071, '11 0 0 -1 11 13 13 -1 0 7'); INSERT INTO pagc_rules (id, rule) VALUES (4072, '11 27 -1 11 13 -1 0 7'); INSERT INTO pagc_rules (id, rule) VALUES (4073, '11 27 26 -1 11 13 13 -1 0 7'); INSERT INTO pagc_rules (id, rule) VALUES (4074, '11 28 -1 11 13 -1 0 7'); INSERT INTO pagc_rules (id, rule) VALUES (4075, '11 28 29 -1 11 13 13 -1 0 7'); INSERT INTO pagc_rules (id, rule) VALUES (4076, '10 -1 10 -1 0 5'); INSERT INTO pagc_rules (id, rule) VALUES (4077, '10 12 -1 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4078, '10 12 23 23 13 13 -1 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4079, '10 12 0 -1 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4080, '10 12 0 0 -1 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4081, '10 12 27 -1 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4082, '10 12 27 26 -1 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4083, '10 12 28 -1 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4084, '10 12 28 29 -1 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4085, '10 23 23 13 13 -1 10 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4086, '10 23 23 13 13 12 -1 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4087, '10 0 -1 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4088, '10 0 12 -1 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4089, '10 0 0 -1 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4090, '10 0 0 12 -1 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4091, '10 27 -1 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4092, '10 27 12 -1 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4093, '10 27 26 -1 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4094, '10 27 26 12 -1 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4095, '10 28 -1 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4096, '10 28 12 -1 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4097, '10 28 29 -1 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4098, '10 28 29 12 -1 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4099, '10 11 -1 10 11 -1 0 13'); INSERT INTO pagc_rules (id, rule) VALUES (4100, '10 11 12 -1 10 11 12 -1 0 15'); INSERT INTO pagc_rules (id, rule) VALUES (4101, '10 11 12 23 23 13 13 -1 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4102, '10 11 12 0 -1 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4103, '10 11 12 0 0 -1 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4104, '10 11 12 27 -1 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4105, '10 11 12 27 26 -1 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4106, '10 11 12 28 -1 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4107, '10 11 12 28 29 -1 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4108, '10 11 23 23 13 13 -1 10 11 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4109, '10 11 23 23 13 13 12 -1 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4110, '10 11 0 -1 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4111, '10 11 0 12 -1 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4112, '10 11 0 0 -1 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4113, '10 11 0 0 12 -1 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4114, '10 11 27 -1 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4115, '10 11 27 12 -1 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4116, '10 11 27 26 -1 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4117, '10 11 27 26 12 -1 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4118, '10 11 28 -1 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4119, '10 11 28 12 -1 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4120, '10 11 28 29 -1 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4121, '10 11 28 29 12 -1 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4122, '1 -1 10 -1 0 5'); INSERT INTO pagc_rules (id, rule) VALUES (4123, '1 12 -1 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4124, '1 12 23 23 13 13 -1 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4125, '1 12 0 -1 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4126, '1 12 0 0 -1 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4127, '1 12 27 -1 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4128, '1 12 27 26 -1 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4129, '1 12 28 -1 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4130, '1 12 28 29 -1 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4131, '1 23 23 13 13 -1 10 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4132, '1 23 23 13 13 12 -1 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4133, '1 0 -1 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4134, '1 0 12 -1 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4135, '1 0 0 -1 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4136, '1 0 0 12 -1 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4137, '1 27 -1 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4138, '1 27 12 -1 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4139, '1 27 26 -1 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4140, '1 27 26 12 -1 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4141, '1 28 -1 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4142, '1 28 12 -1 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4143, '1 28 29 -1 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4144, '1 28 29 12 -1 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4145, '1 11 -1 10 11 -1 0 13'); INSERT INTO pagc_rules (id, rule) VALUES (4146, '1 11 12 -1 10 11 12 -1 0 15'); INSERT INTO pagc_rules (id, rule) VALUES (4147, '1 11 12 23 23 13 13 -1 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4148, '1 11 12 0 -1 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4149, '1 11 12 0 0 -1 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4150, '1 11 12 27 -1 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4151, '1 11 12 27 26 -1 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4152, '1 11 12 28 -1 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4153, '1 11 12 28 29 -1 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4154, '1 11 23 23 13 13 -1 10 11 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4155, '1 11 23 23 13 13 12 -1 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4156, '1 11 0 -1 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4157, '1 11 0 12 -1 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4158, '1 11 0 0 -1 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4159, '1 11 0 0 12 -1 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4160, '1 11 27 -1 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4161, '1 11 27 12 -1 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4162, '1 11 27 26 -1 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4163, '1 11 27 26 12 -1 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4164, '1 11 28 -1 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4165, '1 11 28 12 -1 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4166, '1 11 28 29 -1 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4167, '1 11 28 29 12 -1 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4168, '22 1 -1 10 10 -1 0 5'); INSERT INTO pagc_rules (id, rule) VALUES (4169, '22 1 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4170, '22 1 12 23 23 13 13 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4171, '22 1 12 0 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4172, '22 1 12 0 0 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4173, '22 1 12 27 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4174, '22 1 12 27 26 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4175, '22 1 12 28 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4176, '22 1 12 28 29 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4177, '22 1 23 23 13 13 -1 10 10 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4178, '22 1 23 23 13 13 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4179, '22 1 0 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4180, '22 1 0 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4181, '22 1 0 0 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4182, '22 1 0 0 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4183, '22 1 27 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4184, '22 1 27 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4185, '22 1 27 26 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4186, '22 1 27 26 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4187, '22 1 28 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4188, '22 1 28 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4189, '22 1 28 29 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4190, '22 1 28 29 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4191, '22 1 11 -1 10 10 11 -1 0 13'); INSERT INTO pagc_rules (id, rule) VALUES (4192, '22 1 11 12 -1 10 10 11 12 -1 0 15'); INSERT INTO pagc_rules (id, rule) VALUES (4193, '22 1 11 12 23 23 13 13 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4194, '22 1 11 12 0 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4195, '22 1 11 12 0 0 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4196, '22 1 11 12 27 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4197, '22 1 11 12 27 26 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4198, '22 1 11 12 28 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4199, '22 1 11 12 28 29 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4200, '22 1 11 23 23 13 13 -1 10 10 11 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4201, '22 1 11 23 23 13 13 12 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4202, '22 1 11 0 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4203, '22 1 11 0 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4204, '22 1 11 0 0 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4205, '22 1 11 0 0 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4206, '22 1 11 27 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4207, '22 1 11 27 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4208, '22 1 11 27 26 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4209, '22 1 11 27 26 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4210, '22 1 11 28 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4211, '22 1 11 28 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4212, '22 1 11 28 29 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4213, '22 1 11 28 29 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4214, '1 22 -1 10 10 -1 0 5'); INSERT INTO pagc_rules (id, rule) VALUES (4215, '1 22 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4216, '1 22 12 23 23 13 13 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4217, '1 22 12 0 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4218, '1 22 12 0 0 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4219, '1 22 12 27 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4220, '1 22 12 27 26 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4221, '1 22 12 28 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4222, '1 22 12 28 29 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4223, '1 22 23 23 13 13 -1 10 10 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4224, '1 22 23 23 13 13 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4225, '1 22 0 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4226, '1 22 0 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4227, '1 22 0 0 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4228, '1 22 0 0 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4229, '1 22 27 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4230, '1 22 27 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4231, '1 22 27 26 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4232, '1 22 27 26 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4233, '1 22 28 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4234, '1 22 28 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4235, '1 22 28 29 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4236, '1 22 28 29 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4237, '1 22 11 -1 10 10 11 -1 0 13'); INSERT INTO pagc_rules (id, rule) VALUES (4238, '1 22 11 12 -1 10 10 11 12 -1 0 15'); INSERT INTO pagc_rules (id, rule) VALUES (4239, '1 22 11 12 23 23 13 13 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4240, '1 22 11 12 0 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4241, '1 22 11 12 0 0 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4242, '1 22 11 12 27 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4243, '1 22 11 12 27 26 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4244, '1 22 11 12 28 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4245, '1 22 11 12 28 29 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4246, '1 22 11 23 23 13 13 -1 10 10 11 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4247, '1 22 11 23 23 13 13 12 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4248, '1 22 11 0 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4249, '1 22 11 0 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4250, '1 22 11 0 0 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4251, '1 22 11 0 0 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4252, '1 22 11 27 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4253, '1 22 11 27 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4254, '1 22 11 27 26 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4255, '1 22 11 27 26 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4256, '1 22 11 28 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4257, '1 22 11 28 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4258, '1 22 11 28 29 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4259, '1 22 11 28 29 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4260, '2 1 -1 10 10 -1 0 5'); INSERT INTO pagc_rules (id, rule) VALUES (4261, '2 1 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4262, '2 1 12 23 23 13 13 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4263, '2 1 12 0 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4264, '2 1 12 0 0 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4265, '2 1 12 27 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4266, '2 1 12 27 26 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4267, '2 1 12 28 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4268, '2 1 12 28 29 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4269, '2 1 23 23 13 13 -1 10 10 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4270, '2 1 23 23 13 13 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4271, '2 1 0 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4272, '2 1 0 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4273, '2 1 0 0 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4274, '2 1 0 0 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4275, '2 1 27 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4276, '2 1 27 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4277, '2 1 27 26 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4278, '2 1 27 26 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4279, '2 1 28 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4280, '2 1 28 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4281, '2 1 28 29 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4282, '2 1 28 29 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4283, '2 1 11 -1 10 10 11 -1 0 13'); INSERT INTO pagc_rules (id, rule) VALUES (4284, '2 1 11 12 -1 10 10 11 12 -1 0 15'); INSERT INTO pagc_rules (id, rule) VALUES (4285, '2 1 11 12 23 23 13 13 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4286, '2 1 11 12 0 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4287, '2 1 11 12 0 0 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4288, '2 1 11 12 27 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4289, '2 1 11 12 27 26 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4290, '2 1 11 12 28 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4291, '2 1 11 12 28 29 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4292, '2 1 11 23 23 13 13 -1 10 10 11 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4293, '2 1 11 23 23 13 13 12 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4294, '2 1 11 0 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4295, '2 1 11 0 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4296, '2 1 11 0 0 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4297, '2 1 11 0 0 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4298, '2 1 11 27 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4299, '2 1 11 27 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4300, '2 1 11 27 26 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4301, '2 1 11 27 26 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4302, '2 1 11 28 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4303, '2 1 11 28 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4304, '2 1 11 28 29 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4305, '2 1 11 28 29 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4306, '1 2 -1 10 10 -1 0 5'); INSERT INTO pagc_rules (id, rule) VALUES (4307, '1 2 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4308, '1 2 12 23 23 13 13 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4309, '1 2 12 0 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4310, '1 2 12 0 0 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4311, '1 2 12 27 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4312, '1 2 12 27 26 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4313, '1 2 12 28 -1 10 10 12 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4314, '1 2 12 28 29 -1 10 10 12 13 13 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4315, '1 2 23 23 13 13 -1 10 10 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4316, '1 2 23 23 13 13 12 -1 10 10 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4317, '1 2 0 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4318, '1 2 0 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4319, '1 2 0 0 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4320, '1 2 0 0 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4321, '1 2 27 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4322, '1 2 27 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4323, '1 2 27 26 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4324, '1 2 27 26 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4325, '1 2 28 -1 10 10 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4326, '1 2 28 12 -1 10 10 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4327, '1 2 28 29 -1 10 10 13 13 -1 0 9'); INSERT INTO pagc_rules (id, rule) VALUES (4328, '1 2 28 29 12 -1 10 10 13 13 12 -1 0 3'); INSERT INTO pagc_rules (id, rule) VALUES (4329, '1 2 11 -1 10 10 11 -1 0 13'); INSERT INTO pagc_rules (id, rule) VALUES (4330, '1 2 11 12 -1 10 10 11 12 -1 0 15'); INSERT INTO pagc_rules (id, rule) VALUES (4331, '1 2 11 12 23 23 13 13 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4332, '1 2 11 12 0 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4333, '1 2 11 12 0 0 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4334, '1 2 11 12 27 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4335, '1 2 11 12 27 26 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4336, '1 2 11 12 28 -1 10 10 11 12 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4337, '1 2 11 12 28 29 -1 10 10 11 12 13 13 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4338, '1 2 11 23 23 13 13 -1 10 10 11 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4339, '1 2 11 23 23 13 13 12 -1 10 10 11 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4340, '1 2 11 0 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4341, '1 2 11 0 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4342, '1 2 11 0 0 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4343, '1 2 11 0 0 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4344, '1 2 11 27 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4345, '1 2 11 27 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4346, '1 2 11 27 26 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4347, '1 2 11 27 26 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4348, '1 2 11 28 -1 10 10 11 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4349, '1 2 11 28 12 -1 10 10 11 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) VALUES (4350, '1 2 11 28 29 -1 10 10 11 13 13 -1 0 16'); INSERT INTO pagc_rules (id, rule) VALUES (4351, '1 2 11 28 29 12 -1 10 10 11 13 13 12 -1 0 17'); INSERT INTO pagc_rules (id, rule) values (4352, '16 0 22 -1 16 17 17 -1 4 7'); INSERT INTO pagc_rules (id, rule) VALUES (4355, '-1'); -- for some reason all rules are coming in as custom. just force by id UPDATE tiger.pagc_rules SET is_custom = false where id < 10000; -- after insert we need to set back to true so all -- user inputs are treated as custom ALTER TABLE tiger.pagc_rules ALTER COLUMN is_custom SET DEFAULT true; SELECT pg_catalog.setval('pagc_rules_id_seq', 10000, true);������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/upgrade_geocode.sql������������������������0000644�0000000�0000000�00000027205�12126642330�025466� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: upgrade_geocode.sql 11245 2013-04-02 20:51:36Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2010, 2011 Regina Obe and Leo Hsu -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe and Leo Hsu <lr@pcorp.us> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- \i utility/set_search_path.sql; -- Tiger is where we're going to create the functions, but we need -- the PostGIS functions/types which may be anywhere -- we'll assume user has postgis functions and other contribs as part of search path -- the below call will put tiger schema in front so all objects in this script -- will get created in search path SELECT tiger.SetSearchPathForInstall('tiger'); --this is used currently for debugging \i geocode_settings.sql --this will fail if the column already exists which is fine ALTER TABLE state_lookup ADD COLUMN statefp char(2); UPDATE state_lookup SET statefp = lpad(st_code::text,2,'0') WHERE statefp IS NULL; ALTER TABLE state_lookup ADD CONSTRAINT state_lookup_statefp_key UNIQUE(statefp); CREATE INDEX idx_tiger_edges_countyfp ON edges USING btree(countyfp); CREATE INDEX idx_tiger_faces_countyfp ON faces USING btree(countyfp); CREATE INDEX tiger_place_the_geom_gist ON place USING gist(the_geom); CREATE INDEX tiger_edges_the_geom_gist ON edges USING gist(the_geom); CREATE INDEX tiger_state_the_geom_gist ON faces USING gist(the_geom); DROP FUNCTION IF EXISTS reverse_geocode(geometry); /** changed to use default parameters **/ DROP FUNCTION IF EXISTS geocode_location(norm_addy); /** changed to include default parameter for restrict_geom**/ DROP FUNCTION IF EXISTS geocode(varchar); /** changed to include default parameter for max_results and restrict_geom**/ DROP FUNCTION IF EXISTS geocode(norm_addy); /** changed to include default parameter for max_results and restrict_geom **/ DROP FUNCTION IF EXISTS geocode(varchar, integer); /** changed to include default parameter for max_results and restrict_geom **/ DROP FUNCTION IF EXISTS geocode(norm_addy,integer); /** changed to include default parameter for max_results and restrict_geom **/ DROP FUNCTION IF EXISTS geocode_address(norm_addy); /** changed to include default parameter for max_results **/ DROP FUNCTION IF EXISTS geocode_address(norm_addy,integer); /** changed to include default parameter for max_results and restrict_geom **/ DROP FUNCTION IF EXISTS interpolate_from_address(integer, character varying, character varying, geometry); /** changed to use default args and added offset and side **/ DROP FUNCTION IF EXISTS interpolate_from_address(integer, integer, integer, geometry); /**don't need this since got collapes into varchar version **/ -- this will fail if already exists, that is fine. can't use IF NOT EXISTS until 9.1 SELECT tiger.SetSearchPathForInstall('tiger'); CREATE TABLE addrfeat ( gid serial not null primary key, tlid bigint, statefp character varying(2), aridl character varying(22), aridr character varying(22), linearid character varying(22), fullname character varying(100), lfromhn character varying(12), ltohn character varying(12), rfromhn character varying(12), rtohn character varying(12), zipl character varying(5), zipr character varying(5), edge_mtfcc character varying(5), parityl character varying(1), parityr character varying(1), plus4l character varying(4), plus4r character varying(4), lfromtyp character varying(1), ltotyp character varying(1), rfromtyp character varying(1), rtotyp character varying(1), offsetl character varying(1), offsetr character varying(1), the_geom geometry, CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX idx_addrfeat_geom_gist ON addrfeat USING gist(geom ); CREATE INDEX idx_addrfeat_tlid ON addrfeat USING btree(tlid); CREATE INDEX idx_addrfeat_zipl ON addrfeat USING btree(zipl); CREATE INDEX idx_addrfeat_zipr ON addrfeat USING btree(zipr); -- TODO: Put in logic to update lookup tables as they change. street_type_lookup has changed since initial release -- CREATE TABLE zcta5 ( gid serial NOT NULL, statefp character varying(2), zcta5ce character varying(5), classfp character varying(2), mtfcc character varying(5), funcstat character varying(1), aland double precision, awater double precision, intptlat character varying(11), intptlon character varying(12), partflg character varying(1), the_geom geometry, CONSTRAINT uidx_tiger_zcta5_gid UNIQUE (gid), CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269), CONSTRAINT pk_tiger_zcta5_zcta5ce PRIMARY KEY (zcta5ce,statefp) ); ALTER TABLE street_type_lookup ALTER COLUMN abbrev TYPE varchar(50); ALTER TABLE street_type_lookup ALTER COLUMN name TYPE varchar(50); ALTER TABLE street_type_lookup ADD COLUMN is_hw boolean NOT NULL DEFAULT false; DROP FUNCTION IF EXISTS rate_attributes(character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying); DROP FUNCTION IF EXISTS rate_attributes(character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying); --ALTER TABLE tiger.addr ALTER tlid TYPE bigint; ALTER TABLE featnames ALTER COLUMN tlid SET NOT NULL; ALTER TABLE county ALTER COLUMN statefp SET NOT NULL; ALTER TABLE edges ALTER COLUMN tlid SET NOT NULL; ALTER TABLE addr ALTER COLUMN tlid SET NOT NULL; BEGIN; -- Type used to pass around a normalized address between functions -- This is s bit dangerous since it could potentially drop peoples tables -- TODO: put in logic to check if any tables have norm_addy and don't drop if they do -- Remarking this out for now since we aren't changing norm_addy anyway /*DROP TYPE IF EXISTS norm_addy CASCADE; CREATE TYPE norm_addy AS ( address INTEGER, preDirAbbrev VARCHAR, streetName VARCHAR, streetTypeAbbrev VARCHAR, postDirAbbrev VARCHAR, internal VARCHAR, location VARCHAR, stateAbbrev VARCHAR, zip VARCHAR, parsed BOOLEAN); */ -- prefix and suffix street names for numbered highways CREATE TEMPORARY TABLE temp_types AS SELECT name, abbrev, true FROM (VALUES ('CAM', 'Cam'), ('CAM.', 'Cam'), ('CAMINO', 'Cam'), ('CO HWY', 'Co Hwy'), ('COUNTY HWY', 'Co Hwy'), ('COUNTY HIGHWAY', 'Co Hwy'), ('COUNTY HIGH WAY', 'Co Hwy'), ('COUNTY ROAD', 'Co Rd'), ('COUNTY RD', 'Co Rd'), ('CO RD', 'Co Rd'), ('CORD', 'Co Rd'), ('CO RTE', 'Co Rte'), ('COUNTY ROUTE', 'Co Rte'), ('CO ST AID HWY', 'Co St Aid Hwy'), ('EXP', 'Expy'), ('EXPR', 'Expy'), ('EXPRESS', 'Expy'), ('EXPRESSWAY', 'Expy'), ('EXPW', 'Expy'), ('EXPY', 'Expy'), ('FARM RD', 'Farm Rd'), ('FIRE RD', 'Fire Rd'), ('FOREST RD', 'Forest Rd'), ('FOREST ROAD', 'Forest Rd'), ('FOREST RTE', 'Forest Rte'), ('FOREST ROUTE', 'Forest Rte'), ('FREEWAY', 'Fwy'), ('FREEWY', 'Fwy'), ('FRWAY', 'Fwy'), ('FRWY', 'Fwy'), ('FWY', 'Fwy'), ('HIGHWAY', 'Hwy'), ('HIGHWY', 'Hwy'), ('HIWAY', 'Hwy'), ('HIWY', 'Hwy'), ('HWAY', 'Hwy'), ('HWY', 'Hwy'), ('I', 'I-'), ('I-', 'I-'), ('INTERSTATE', 'I-'), ('INTERSTATE ROUTE', 'I-'), ('INTERSTATE RTE', 'I-'), ('INTERSTATE RTE.', 'I-'), ('INTERSTATE RT', 'I-'), ('LOOP', 'Loop'), ('ROUTE', 'Rte'), ('RTE', 'Rte'), ('RT', 'Rte'), ('STATE HWY', 'State Hwy'), ('STATE HIGHWAY', 'State Hwy'), ('STATE HIGH WAY', 'State Hwy'), ('STATE RD', 'State Rd'), ('STATE ROAD', 'State Rd'), ('STATE ROUTE', 'State Rte'), ('STATE RTE', 'State Rte'), ('TPK', 'Tpke'), ('TPKE', 'Tpke'), ('TRNPK', 'Tpke'), ('TRPK', 'Tpke'), ('TURNPIKE', 'Tpke'), ('TURNPK', 'Tpke'), ('US HWY', 'US Hwy'), ('US HIGHWAY', 'US Hwy'), ('US HIGH WAY', 'US Hwy'), ('U.S.', 'US Hwy'), ('US RTE', 'US Rte'), ('US ROUTE', 'US Rte'), ('US RT', 'US Rte'), ('USFS HWY', 'USFS Hwy'), ('USFS HIGHWAY', 'USFS Hwy'), ('USFS HIGH WAY', 'USFS Hwy'), ('USFS RD', 'USFS Rd'), ('USFS ROAD', 'USFS Rd') ) t(name, abbrev) WHERE t.name NOT IN(SELECT name FROM street_type_lookup); DELETE FROM street_type_lookup WHERE name IN(SELECT name FROM temp_types); INSERT INTO street_type_lookup (name, abbrev, is_hw) SELECT name, abbrev, true FROM temp_types As t WHERE t.name NOT IN(SELECT name FROM street_type_lookup); DROP TABLE temp_types; DELETE FROM street_type_lookup WHERE name = 'FOREST'; UPDATE street_type_lookup SET is_hw = false WHERE abbrev = 'Loop'; CREATE TEMPORARY TABLE temp_types AS SELECT name, abbrev FROM (VALUES ('LOOP', 'Loop'), ('SERVICE DRIVE', 'Svc Dr'), ('SERVICE DR', 'Svc Dr'), ('SERVICE ROAD', 'Svc Rd'), ('SERVICE RD', 'Svc Rd') ) t(name, abbrev); DELETE FROM street_type_lookup WHERE name IN(SELECT name FROM temp_types); INSERT INTO street_type_lookup (name, abbrev, is_hw) SELECT name, abbrev, false FROM temp_types As t WHERE t.name NOT IN(SELECT name FROM street_type_lookup); SELECT tiger.SetSearchPathForInstall('tiger'); -- new census loader \i census_loader.sql --create parent tables for census -- if they do not exist SELECT create_census_base_tables(); -- System/General helper functions \i utility/utmzone.sql \i utility/cull_null.sql \i utility/nullable_levenshtein.sql \i utility/levenshtein_ignore_case.sql ---- Address normalizer -- General helpers \i normalize/end_soundex.sql \i normalize/count_words.sql \i normalize/state_extract.sql \i normalize/get_last_words.sql -- Location extraction/normalization helpers \i normalize/location_extract_countysub_exact.sql \i normalize/location_extract_countysub_fuzzy.sql \i normalize/location_extract_place_exact.sql \i normalize/location_extract_place_fuzzy.sql \i normalize/location_extract.sql -- Normalization API, called by geocode mainly. \i normalize/normalize_address.sql \i normalize/pprint_addy.sql \i pagc_normalize/pagc_tables.sql \i pagc_normalize/pagc_normalize_address.sql ---- Geocoder functions -- General helpers \i geocode/other_helper_functions.sql \i geocode/rate_attributes.sql \i geocode/includes_address.sql \i geocode/interpolate_from_address.sql -- Actual lookups/geocoder helpers \i geocode/geocode_address.sql \i geocode/geocode_location.sql -- Geocode API, called by user \i geocode/geocode.sql -- Reverse Geocode API, called by user \i geocode/geocode_intersection.sql \i geocode/reverse_geocode.sql \i geocode/census_tracts_functions.sql COMMIT; -- Tiger to PostGIS Topology -- only useable if you have topology installed \i topology/tiger_topology_loader.sql -- install missing indexes \echo 'Installing missing indexes - this might take a while so be patient ..' SELECT install_missing_indexes(); \a --\o 'drop_dup_feat_create_index.sql' --\i generate_drop_dupe_featnames.sql \o --\i drop_dup_feat_create_index.sql \echo 'Missing index Install completed'�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/tables/������������������������������������0000755�0000000�0000000�00000000000�12317530606�023101� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/tables/lookup_tables_2011.sql��������������0000644�0000000�0000000�00000207660�12035373437�027147� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: lookup_tables_2011.sql 10394 2012-10-10 22:30:55Z robe $ --SET search_path TO tiger, public; SELECT tiger.SetSearchPathForInstall('tiger'); -- Create direction lookup table DROP TABLE IF EXISTS tiger.direction_lookup; CREATE TABLE direction_lookup (name VARCHAR(20) PRIMARY KEY, abbrev VARCHAR(3)); INSERT INTO direction_lookup (name, abbrev) VALUES('WEST', 'W'); INSERT INTO direction_lookup (name, abbrev) VALUES('W', 'W'); INSERT INTO direction_lookup (name, abbrev) VALUES('SW', 'SW'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTH-WEST', 'SW'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTHWEST', 'SW'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTH-EAST', 'SE'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTHEAST', 'SE'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTH_WEST', 'SW'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTH_EAST', 'SE'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTH', 'S'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTH WEST', 'SW'); INSERT INTO direction_lookup (name, abbrev) VALUES('SOUTH EAST', 'SE'); INSERT INTO direction_lookup (name, abbrev) VALUES('SE', 'SE'); INSERT INTO direction_lookup (name, abbrev) VALUES('S', 'S'); INSERT INTO direction_lookup (name, abbrev) VALUES('NW', 'NW'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTH-WEST', 'NW'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTHWEST', 'NW'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTH-EAST', 'NE'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTHEAST', 'NE'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTH_WEST', 'NW'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTH_EAST', 'NE'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTH', 'N'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTH WEST', 'NW'); INSERT INTO direction_lookup (name, abbrev) VALUES('NORTH EAST', 'NE'); INSERT INTO direction_lookup (name, abbrev) VALUES('NE', 'NE'); INSERT INTO direction_lookup (name, abbrev) VALUES('N', 'N'); INSERT INTO direction_lookup (name, abbrev) VALUES('EAST', 'E'); INSERT INTO direction_lookup (name, abbrev) VALUES('E', 'E'); CREATE INDEX direction_lookup_abbrev_idx ON direction_lookup (abbrev); -- Create secondary unit lookup table DROP TABLE IF EXISTS tiger.secondary_unit_lookup; CREATE TABLE secondary_unit_lookup (name VARCHAR(20) PRIMARY KEY, abbrev VARCHAR(5)); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('APARTMENT', 'APT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('APT', 'APT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('BASEMENT', 'BSMT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('BSMT', 'BSMT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('BUILDING', 'BLDG'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('BLDG', 'BLDG'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('DEPARTMENT', 'DEPT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('DEPT', 'DEPT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('FLOOR', 'FL'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('FL', 'FL'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('FRONT', 'FRNT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('FRNT', 'FRNT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('HANGAR', 'HNGR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('HNGR', 'HNGR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('LOBBY', 'LBBY'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('LBBY', 'LBBY'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('LOT', 'LOT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('LOWER', 'LOWR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('LOWR', 'LOWR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('OFFICE', 'OFC'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('OFC', 'OFC'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('PENTHOUSE', 'PH'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('PH', 'PH'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('PIER', 'PIER'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('REAR', 'REAR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('ROOM', 'RM'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('RM', 'RM'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('SIDE', 'SIDE'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('SLIP', 'SLIP'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('SPACE', 'SPC'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('SPC', 'SPC'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('STOP', 'STOP'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('SUITE', 'STE'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('STE', 'STE'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('TRAILER', 'TRLR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('TRLR', 'TRLR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('UNIT', 'UNIT'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('UPPER', 'UPPR'); INSERT INTO secondary_unit_lookup (name, abbrev) VALUES ('UPPR', 'UPPR'); CREATE INDEX secondary_unit_lookup_abbrev_idx ON secondary_unit_lookup (abbrev); -- Create state lookup table DROP TABLE IF EXISTS tiger.state_lookup; CREATE TABLE state_lookup (st_code INTEGER PRIMARY KEY, name VARCHAR(40) UNIQUE, abbrev VARCHAR(3) UNIQUE, statefp char(2) UNIQUE); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Alabama', 'AL', '01'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Alaska', 'AK', '02'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('American Samoa', 'AS', '60'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Arizona', 'AZ', '04'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Arkansas', 'AR', '05'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('California', 'CA', '06'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Colorado', 'CO', '08'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Connecticut', 'CT', '09'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Delaware', 'DE', '10'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('District of Columbia', 'DC', '11'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Federated States of Micronesia', 'FM', '64'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Florida', 'FL', '12'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Georgia', 'GA', '13'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Guam', 'GU', '66'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Hawaii', 'HI', '15'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Idaho', 'ID', '16'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Illinois', 'IL', '17'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Indiana', 'IN', '18'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Iowa', 'IA', '19'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Kansas', 'KS', '20'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Kentucky', 'KY', '21'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Louisiana', 'LA', '22'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Maine', 'ME', '23'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Marshall Islands', 'MH', '68'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Maryland', 'MD', '24'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Massachusetts', 'MA', '25'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Michigan', 'MI', '26'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Minnesota', 'MN', '27'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Mississippi', 'MS', '28'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Missouri', 'MO', '29'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Montana', 'MT', '30'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Nebraska', 'NE', '31'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Nevada', 'NV', '32'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('New Hampshire', 'NH', '33'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('New Jersey', 'NJ', '34'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('New Mexico', 'NM', '35'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('New York', 'NY', '36'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('North Carolina', 'NC', '37'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('North Dakota', 'ND', '38'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Northern Mariana Islands', 'MP', '69'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Ohio', 'OH', '39'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Oklahoma', 'OK', '40'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Oregon', 'OR', '41'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Palau', 'PW', '70'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Pennsylvania', 'PA', '42'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Puerto Rico', 'PR', '72'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Rhode Island', 'RI', '44'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('South Carolina', 'SC', '45'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('South Dakota', 'SD', '46'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Tennessee', 'TN', '47'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Texas', 'TX', '48'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Utah', 'UT', '49'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Vermont', 'VT', '50'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Virgin Islands', 'VI', '78'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Virginia', 'VA', '51'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Washington', 'WA', '53'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('West Virginia', 'WV', '54'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Wisconsin', 'WI', '55'); INSERT INTO state_lookup (name, abbrev, st_code) VALUES ('Wyoming', 'WY', '56'); -- NOTE: fix later -- this is wrong for those - state code ones UPDATE state_lookup SET statefp = lpad(st_code::text,2,'0'); -- Create street type lookup table DROP TABLE IF EXISTS tiger.street_type_lookup; CREATE TABLE street_type_lookup (name VARCHAR(50) PRIMARY KEY, abbrev VARCHAR(50), is_hw boolean NOT NULL DEFAULT false); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ALLEE', 'Aly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ALLEY', 'Aly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ALLY', 'Aly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ALY', 'Aly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ANEX', 'Anx'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ANNEX', 'Anx'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ANNX', 'Anx'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ANX', 'Anx'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ARC', 'Arc'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ARCADE', 'Arc'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('AV', 'Ave'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('AVE', 'Ave'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('AVEN', 'Ave'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('AVENU', 'Ave'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('AVENUE', 'Ave'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('AVN', 'Ave'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('AVNUE', 'Ave'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BAYOO', 'Byu'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BAYOU', 'Byu'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BCH', 'Bch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BEACH', 'Bch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BEND', 'Bnd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BND', 'Bnd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BLF', 'Blf'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BLUF', 'Blf'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BLUFF', 'Blf'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BLUFFS', 'Blfs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BOT', 'Btm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BOTTM', 'Btm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BOTTOM', 'Btm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BTM', 'Btm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BLVD', 'Blvd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BOUL', 'Blvd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BOULEVARD', 'Blvd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BOULV', 'Blvd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BR', 'Br'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BRANCH', 'Br'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BRNCH', 'Br'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BRDGE', 'Brg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BRG', 'Brg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BRIDGE', 'Brg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BRK', 'Brk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BROOK', 'Brk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BROOKS', 'Brks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BURG', 'Bg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BURGS', 'Bgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BYP', 'Byp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BYPA', 'Byp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BYPAS', 'Byp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BYPASS', 'ByP'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BYPS', 'Byp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CAMP', 'Cp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CMP', 'Cp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CP', 'Cp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CANYN', 'Cyn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CANYON', 'Cyn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CNYN', 'Cyn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CYN', 'Cyn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CAPE', 'Cpe'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CPE', 'Cpe'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CAUSEWAY', 'Cswy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CAUSWAY', 'Cswy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CSWY', 'Cswy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CEN', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CENT', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CENTER', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CENTR', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CENTRE', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CNTER', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CNTR', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CTR', 'Ctr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CENTERS', 'Ctrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CIR', 'Cir'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CIRC', 'Cir'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CIRCL', 'Cir'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CIRCLE', 'Cir'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRCL', 'Cir'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRCLE', 'Cir'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CIRCLES', 'Cirs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CLF', 'Clf'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CLIFF', 'Clf'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CLFS', 'Clfs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CLIFFS', 'Clfs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CLB', 'Clb'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CLUB', 'Clb'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('COMMON', 'Cmn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('COR', 'Cor'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CORNER', 'Cor'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CORNERS', 'Cors'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CORS', 'Cors'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('COURSE', 'Crse'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRSE', 'Crse'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('COURT', 'Ct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRT', 'Ct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CT', 'Ct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('COURTS', 'Cts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('COVE', 'Cv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CV', 'Cv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('COVES', 'Cvs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CK', 'Crk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CR', 'Crk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CREEK', 'Crk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRK', 'Crk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRECENT', 'Cres'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRES', 'Cres'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRESCENT', 'Cres'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRESENT', 'Cres'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRSCNT', 'Cres'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRSENT', 'Cres'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRSNT', 'Cres'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CREST', 'Crst'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CROSSING', 'Xing'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRSSING', 'Xing'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRSSNG', 'Xing'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('XING', 'Xing'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CROSSROAD', 'Xrd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CURVE', 'Curv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DALE', 'Dl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DL', 'Dl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DAM', 'Dm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DM', 'Dm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DIV', 'Dv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DIVIDE', 'Dv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DV', 'Dv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DVD', 'Dv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DR', 'Dr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DRIV', 'Dr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DRIVE', 'Dr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DRV', 'Dr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DRIVES', 'Drs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('EST', 'Est'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ESTATE', 'Est'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ESTATES', 'Ests'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ESTS', 'Ests'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXP', 'Expy'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXPR', 'Expy'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXPRESS', 'Expy'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXPRESSWAY', 'Expy'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXPW', 'Expy'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXPY', 'Expy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXT', 'Ext'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXTENSION', 'Ext'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXTN', 'Ext'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXTNSN', 'Ext'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXTENSIONS', 'Exts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('EXTS', 'Exts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FALL', 'Fall'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FALLS', 'Fls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FLS', 'Fls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FERRY', 'Fry'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRRY', 'Fry'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRY', 'Fry'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FIELD', 'Fld'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FLD', 'Fld'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FIELDS', 'Flds'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FLDS', 'Flds'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FLAT', 'Flt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FLT', 'Flt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FLATS', 'Flts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FLTS', 'Flts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORD', 'Frd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRD', 'Frd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORDS', 'Frds'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('FOREST', 'Frst'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORESTS', 'Frst'); --INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRST', 'Frst'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORG', 'Frg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORGE', 'Frg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRG', 'Frg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORGES', 'Frgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORK', 'Frk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRK', 'Frk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORKS', 'Frks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRKS', 'Frks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FORT', 'Ft'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRT', 'Ft'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FT', 'Ft'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GARDEN', 'Gdn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GARDN', 'Gdn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GDN', 'Gdn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GRDEN', 'Gdn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GRDN', 'Gdn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GARDENS', 'Gdns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GDNS', 'Gdns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GRDNS', 'Gdns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GATEWAY', 'Gtwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GATEWY', 'Gtwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GATWAY', 'Gtwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GTWAY', 'Gtwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GTWY', 'Gtwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GLEN', 'Gln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GLN', 'Gln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GLENS', 'Glns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GREEN', 'Grn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GRN', 'Grn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GREENS', 'Grns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GROV', 'Grv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GROVE', 'Grv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GRV', 'Grv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GROVES', 'Grvs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HARB', 'Hbr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HARBOR', 'Hbr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HARBR', 'Hbr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HBR', 'Hbr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HRBOR', 'Hbr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HARBORS', 'Hbrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HAVEN', 'Hvn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HAVN', 'Hvn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HVN', 'Hvn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HEIGHT', 'Hts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HEIGHTS', 'Hts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HGTS', 'Hts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HT', 'Hts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HTS', 'Hts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HILL', 'Hl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HL', 'Hl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HILLS', 'Hls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HLS', 'Hls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HLLW', 'Holw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HOLLOW', 'Holw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HOLLOWS', 'Holw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HOLW', 'Holw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HOLWS', 'Holw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('INLET', 'Inlt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('INLT', 'Inlt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('IS', 'Is'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ISLAND', 'Is'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ISLND', 'Is'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ISLANDS', 'Iss'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ISLNDS', 'Iss'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ISS', 'Iss'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ISLE', 'Isle'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ISLES', 'Isle'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JCT', 'Jct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JCTION', 'Jct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JCTN', 'Jct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JUNCTION', 'Jct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JUNCTN', 'Jct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JUNCTON', 'Jct'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JCTNS', 'Jcts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JCTS', 'Jcts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('JUNCTIONS', 'Jcts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KEY', 'Ky'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KY', 'Ky'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KEYS', 'Kys'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KYS', 'Kys'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KNL', 'Knl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KNOL', 'Knl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KNOLL', 'Knl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KNLS', 'Knls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('KNOLLS', 'Knls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LAKE', 'Lk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LK', 'Lk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LAKES', 'Lks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LKS', 'Lks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LAND', 'Land'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LANDING', 'Lndg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LNDG', 'Lndg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LNDNG', 'Lndg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LA', 'Ln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LANE', 'Ln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LANES', 'Ln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LN', 'Ln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LGT', 'Lgt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LIGHT', 'Lgt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LIGHTS', 'Lgts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LF', 'Lf'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LOAF', 'Lf'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LCK', 'Lck'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LOCK', 'Lck'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LCKS', 'Lcks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LOCKS', 'Lcks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LDG', 'Ldg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LDGE', 'Ldg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LODG', 'Ldg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LODGE', 'Ldg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LOOP', 'Loop'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LOOPS', 'Loop'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MALL', 'Mall'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MANOR', 'Mnr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MNR', 'Mnr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MANORS', 'Mnrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MNRS', 'Mnrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MDW', 'Mdw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MEADOW', 'Mdw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MDWS', 'Mdws'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MEADOWS', 'Mdws'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MEDOWS', 'Mdws'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MEWS', 'Mews'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MILL', 'Ml'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ML', 'Ml'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MILLS', 'Mls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MLS', 'Mls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MISSION', 'Msn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MISSN', 'Msn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MSN', 'Msn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MSSN', 'Msn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MOTORWAY', 'Mtwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MNT', 'Mt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MOUNT', 'Mt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MT', 'Mt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MNTAIN', 'Mtn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MNTN', 'Mtn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MOUNTAIN', 'Mtn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MOUNTIN', 'Mtn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MTIN', 'Mtn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MTN', 'Mtn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MNTNS', 'Mtns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MOUNTAINS', 'Mtns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('NCK', 'Nck'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('NECK', 'Nck'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ORCH', 'Orch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ORCHARD', 'Orch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ORCHRD', 'Orch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('OVAL', 'Oval'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('OVL', 'Oval'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('OVERPASS', 'Opas'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PARK', 'Park'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PK', 'Park'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PRK', 'Park'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PARKS', 'Park'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PARKWAY', 'Pkwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PARKWY', 'Pkwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PKWAY', 'Pkwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PKWY', 'Pkwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PKY', 'Pkwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PARKWAYS', 'Pkwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PKWYS', 'Pkwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PASS', 'Pass'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PASSAGE', 'Psge'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PATH', 'Path'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PATHS', 'Path'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PIKE', 'Pike'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PIKES', 'Pike'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PINE', 'Pne'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PINES', 'Pnes'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PNES', 'Pnes'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PL', 'Pl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLACE', 'Pl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLAIN', 'Pln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLN', 'Pln'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLAINES', 'Plns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLAINS', 'Plns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLNS', 'Plns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLAZA', 'Plz'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLZ', 'Plz'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PLZA', 'Plz'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('POINT', 'Pt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PT', 'Pt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('POINTS', 'Pts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PTS', 'Pts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PORT', 'Prt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PRT', 'Prt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PORTS', 'Prts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PRTS', 'Prts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PR', 'Pr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PRAIRIE', 'Pr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PRARIE', 'Pr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PRR', 'Pr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RAD', 'Radl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RADIAL', 'Radl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RADIEL', 'Radl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RADL', 'Radl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RAMP', 'Ramp'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RANCH', 'Rnch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RANCHES', 'Rnch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RNCH', 'Rnch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RNCHS', 'Rnch'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RAPID', 'Rpd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RPD', 'Rpd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RAPIDS', 'Rpds'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RPDS', 'Rpds'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('REST', 'Rst'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RST', 'Rst'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RDG', 'Rdg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RDGE', 'Rdg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RIDGE', 'Rdg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RDGS', 'Rdgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RIDGES', 'Rdgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RIV', 'Riv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RIVER', 'Riv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RIVR', 'Riv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RVR', 'Riv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RD', 'Rd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ROAD', 'Rd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RDS', 'Rds'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ROADS', 'Rds'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ROW', 'Row'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RUE', 'Rue'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RUN', 'Run'); -- Start newly added 2011-7-12 -- INSERT INTO street_type_lookup (name, abbrev) VALUES ('SERVICE DRIVE', 'Svc Dr'), ('SERVICE DR', 'Svc Dr'), ('SERVICE ROAD', 'Svc Rd'), ('SERVICE RD', 'Svc Rd') ; -- end newly added 2011-07-12 -- INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHL', 'Shl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHOAL', 'Shl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHLS', 'Shls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHOALS', 'Shls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHOAR', 'Shr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHORE', 'Shr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHR', 'Shr'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHOARS', 'Shrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHORES', 'Shrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SHRS', 'Shrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SKYWAY', 'Skwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPG', 'Spg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPNG', 'Spg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPRING', 'Spg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPRNG', 'Spg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPGS', 'Spgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPNGS', 'Spgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPRINGS', 'Spgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPRNGS', 'Spgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPUR', 'Spur'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SPURS', 'Spur'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQ', 'Sq'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQR', 'Sq'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQRE', 'Sq'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQU', 'Sq'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQUARE', 'Sq'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQRS', 'Sqs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQUARES', 'Sqs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STA', 'Sta'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STATION', 'Sta'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STATN', 'Sta'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STN', 'Sta'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRA', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRAV', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRAVE', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRAVEN', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRAVENUE', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRAVN', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRVN', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRVNUE', 'Stra'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STREAM', 'Strm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STREME', 'Strm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRM', 'Strm'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('ST', 'St'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STR', 'St'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STREET', 'St'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STRT', 'St'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STREETS', 'Sts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SMT', 'Smt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SUMIT', 'Smt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SUMITT', 'Smt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SUMMIT', 'Smt'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TER', 'Ter'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TERR', 'Ter'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TERRACE', 'Ter'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('THROUGHWAY', 'Trwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRACE', 'Trce'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRACES', 'Trce'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRCE', 'Trce'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRACK', 'Trak'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRACKS', 'Trak'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRAK', 'Trak'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRK', 'Trak'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRKS', 'Trak'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRAFFICWAY', 'Trfy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRFY', 'Trfy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TR', 'Trl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRAIL', 'Trl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRAILS', 'Trl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRL', 'Trl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRLS', 'Trl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TUNEL', 'Tunl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TUNL', 'Tunl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TUNLS', 'Tunl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TUNNEL', 'Tunl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TUNNELS', 'Tunl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TUNNL', 'Tunl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('UNDERPASS', 'Upas'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('UN', 'Un'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('UNION', 'Un'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('UNIONS', 'Uns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VALLEY', 'Vly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VALLY', 'Vly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VLLY', 'Vly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VLY', 'Vly'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VALLEYS', 'Vlys'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VLYS', 'Vlys'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VDCT', 'Via'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VIA', 'Via'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VIADCT', 'Via'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VIADUCT', 'Via'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VIEW', 'Vw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VW', 'Vw'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VIEWS', 'Vws'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VWS', 'Vws'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VILL', 'Vlg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VILLAG', 'Vlg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VILLAGE', 'Vlg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VILLG', 'Vlg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VILLIAGE', 'Vlg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VLG', 'Vlg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VILLAGES', 'Vlgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VLGS', 'Vlgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VILLE', 'Vl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VL', 'Vl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VIS', 'Vis'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VIST', 'Vis'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VISTA', 'Vis'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VST', 'Vis'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('VSTA', 'Vis'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WALK', 'Walk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WALKS', 'Walk'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WALL', 'Wall'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WAY', 'Way'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WY', 'Way'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WAYS', 'Ways'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WELL', 'Wl'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WELLS', 'Wls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WLS', 'Wls'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BYU', 'Byu'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BLFS', 'Blfs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BRKS', 'Brks'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BG', 'Bg'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('BGS', 'Bgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CTRS', 'Ctrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CIRS', 'Cirs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CMN', 'Cmn'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CTS', 'Cts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CVS', 'Cvs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CRST', 'Crst'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('XRD', 'Xrd'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('CURV', 'Curv'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('DRS', 'Drs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRDS', 'Frds'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('FRGS', 'Frgs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GLNS', 'Glns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GRNS', 'Grns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('GRVS', 'Grvs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('HBRS', 'Hbrs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('LGTS', 'Lgts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MTWY', 'Mtwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('MTNS', 'Mtns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('OPAS', 'Opas'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PSGE', 'Psge'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('PNE', 'Pne'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('RTE', 'Rte'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SKWY', 'Skwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('SQS', 'Sqs'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('STS', 'Sts'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('TRWY', 'Trwy'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('UPAS', 'Upas'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('UNS', 'Uns'); INSERT INTO street_type_lookup (name, abbrev) VALUES ('WL', 'Wl'); -- prefix and suffix street names for highways and foreign named roads -- where street type is at front of streetname instead of after -- these usually have numbers for street names and often have spaces in type INSERT INTO street_type_lookup (name, abbrev, is_hw) SELECT name, abbrev, true FROM (VALUES ('CAM', 'Cam'), ('CAM.', 'Cam'), ('CAMINO', 'Cam'), ('CO HWY', 'Co Hwy'), ('COUNTY HWY', 'Co Hwy'), ('COUNTY HIGHWAY', 'Co Hwy'), ('COUNTY HIGH WAY', 'Co Hwy'), ('COUNTY ROAD', 'Co Rd'), ('COUNTY RD', 'Co Rd'), ('CO RD', 'Co Rd'), ('CORD', 'Co Rd'), ('CO RTE', 'Co Rte'), ('COUNTY ROUTE', 'Co Rte'), ('CO ST AID HWY', 'Co St Aid Hwy'), ('EXP', 'Expy'), ('EXPR', 'Expy'), ('EXPRESS', 'Expy'), ('EXPRESSWAY', 'Expy'), ('EXPW', 'Expy'), ('EXPY', 'Expy'), ('FARM RD', 'Farm Rd'), ('FIRE RD', 'Fire Rd'), ('FOREST RD', 'Forest Rd'), ('FOREST ROAD', 'Forest Rd'), ('FOREST RTE', 'Forest Rte'), ('FOREST ROUTE', 'Forest Rte'), ('FREEWAY', 'Fwy'), ('FREEWY', 'Fwy'), ('FRWAY', 'Fwy'), ('FRWY', 'Fwy'), ('FWY', 'Fwy'), ('HIGHWAY', 'Hwy'), ('HIGHWY', 'Hwy'), ('HIWAY', 'Hwy'), ('HIWY', 'Hwy'), ('HWAY', 'Hwy'), ('HWY', 'Hwy'), ('I', 'I-'), ('I-', 'I-'), ('INTERSTATE', 'I-'), ('INTERSTATE ROUTE', 'I-'), ('INTERSTATE RTE', 'I-'), ('INTERSTATE RTE.', 'I-'), ('INTERSTATE RT', 'I-'), ('LOOP', 'Loop'), ('ROUTE', 'Rte'), ('RTE', 'Rte'), ('RT', 'Rte'), ('STATE HWY', 'State Hwy'), ('STATE HIGHWAY', 'State Hwy'), ('STATE HIGH WAY', 'State Hwy'), ('STATE RD', 'State Rd'), ('STATE ROAD', 'State Rd'), ('STATE ROUTE', 'State Rte'), ('STATE RTE', 'State Rte'), ('TPK', 'Tpke'), ('TPKE', 'Tpke'), ('TRNPK', 'Tpke'), ('TRPK', 'Tpke'), ('TURNPIKE', 'Tpke'), ('TURNPK', 'Tpke'), ('US HWY', 'US Hwy'), ('US HIGHWAY', 'US Hwy'), ('US HIGH WAY', 'US Hwy'), ('U.S.', 'US Hwy'), ('US RTE', 'US Rte'), ('US ROUTE', 'US Rte'), ('US RT', 'US Rte'), ('USFS HWY', 'USFS Hwy'), ('USFS HIGHWAY', 'USFS Hwy'), ('USFS HIGH WAY', 'USFS Hwy'), ('USFS RD', 'USFS Rd'), ('USFS ROAD', 'USFS Rd') ) t(name, abbrev) WHERE t.name NOT IN(SELECT name FROM street_type_lookup); CREATE INDEX street_type_lookup_abbrev_idx ON street_type_lookup (abbrev); -- Create place and countysub lookup tables DROP TABLE IF EXISTS tiger.place_lookup; CREATE TABLE place_lookup ( st_code INTEGER, state VARCHAR(2), pl_code INTEGER, name VARCHAR(90), PRIMARY KEY (st_code,pl_code) ); /** INSERT INTO place_lookup SELECT pl.state::integer as st_code, sl.abbrev as state, pl.placefp::integer as pl_code, pl.name as name FROM pl99_d00 pl JOIN state_lookup sl ON (pl.state = lpad(sl.st_code,2,'0')) GROUP BY pl.state, sl.abbrev, pl.placefp, pl.name; **/ CREATE INDEX place_lookup_name_idx ON place_lookup (soundex(name)); CREATE INDEX place_lookup_state_idx ON place_lookup (state); DROP TABLE IF EXISTS tiger.county_lookup; CREATE TABLE county_lookup ( st_code INTEGER, state VARCHAR(2), co_code INTEGER, name VARCHAR(90), PRIMARY KEY (st_code, co_code) ); /** INSERT INTO county_lookup SELECT co.state::integer as st_code, sl.abbrev as state, co.county::integer as co_code, co.name as name FROM co99_d00 co JOIN state_lookup sl ON (co.state = lpad(sl.st_code,2,'0')) GROUP BY co.state, sl.abbrev, co.county, co.name; **/ CREATE INDEX county_lookup_name_idx ON county_lookup (soundex(name)); CREATE INDEX county_lookup_state_idx ON county_lookup (state); DROP TABLE IF EXISTS tiger.countysub_lookup; CREATE TABLE countysub_lookup ( st_code INTEGER, state VARCHAR(2), co_code INTEGER, county VARCHAR(90), cs_code INTEGER, name VARCHAR(90), PRIMARY KEY (st_code, co_code, cs_code) ); /** INSERT INTO countysub_lookup SELECT cs.state::integer as st_code, sl.abbrev as state, cs.county::integer as co_code, cl.name as county, cs.cousubfp::integer as cs_code, cs.name as name FROM cs99_d00 cs JOIN state_lookup sl ON (cs.state = lpad(sl.st_code,2,'0')) JOIN county_lookup cl ON (cs.state = lpad(cl.st_code,2,'0') AND cs.county = cl.co_code) GROUP BY cs.state, sl.abbrev, cs.county, cl.name, cs.cousubfp, cs.name; **/ CREATE INDEX countysub_lookup_name_idx ON countysub_lookup (soundex(name)); CREATE INDEX countysub_lookup_state_idx ON countysub_lookup (state); DROP TABLE IF EXISTS tiger.zip_lookup_all; CREATE TABLE zip_lookup_all ( zip INTEGER, st_code INTEGER, state VARCHAR(2), co_code INTEGER, county VARCHAR(90), cs_code INTEGER, cousub VARCHAR(90), pl_code INTEGER, place VARCHAR(90), cnt INTEGER ); /** SET work_mem = '2GB'; INSERT INTO zip_lookup_all SELECT *,count(*) as cnt FROM (SELECT zipl as zip, rl.statel as st_code, sl.abbrev as state, rl.countyl as co_code, cl.name as county, rl.cousubl as cs_code, cs.name as countysub, rl.placel as pl_code, pl.name as place FROM roads_local rl JOIN state_lookup sl ON (rl.statel = lpad(sl.st_code,2,'0')) LEFT JOIN county_lookup cl ON (rl.statel = lpad(cl.st_code,2,'0') AND rl.countyl = cl.co_code) LEFT JOIN countysub_lookup cs ON (rl.statel = lpad(cs.st_code,2,'0') AND rl.countyl = cs.co_code AND rl.cousubl = cs.cs_code) LEFT JOIN place_lookup pl ON (rl.statel = lpad(pl.st_code,2,'0') AND rl.placel = pl.pl_code) WHERE zipl IS NOT NULL UNION ALL SELECT zipr as zip, rl.stater as st_code, sl.abbrev as state, rl.countyr as co_code, cl.name as county, rl.cousubr as cs_code, cs.name as countysub, rl.placer as pl_code, pl.name as place FROM roads_local rl JOIN state_lookup sl ON (rl.stater = lpad(sl.st_code,2,'0')) LEFT JOIN county_lookup cl ON (rl.stater = lpad(cl.st_code,2,'0') AND rl.countyr = cl.co_code) LEFT JOIN countysub_lookup cs ON (rl.stater = lpad(cs.st_code,2,'0') AND rl.countyr = cs.co_code AND rl.cousubr = cs.cs_code) LEFT JOIN place_lookup pl ON (rl.stater = lpad(pl.st_code,2,'0') AND rl.placer = pl.pl_code) WHERE zipr IS NOT NULL ) as subquery GROUP BY zip, st_code, state, co_code, county, cs_code, countysub, pl_code, place; **/ DROP TABLE IF EXISTS tiger.zip_lookup_base; CREATE TABLE zip_lookup_base ( zip varchar(5), state VARCHAR(40), county VARCHAR(90), city VARCHAR(90), statefp varchar(2), PRIMARY KEY (zip) ); -- INSERT INTO zip_lookup_base -- Populate through magic -- If anyone knows of a good, public, free, place to pull this information from, that'd be awesome to have... DROP TABLE IF EXISTS tiger.zip_lookup; CREATE TABLE zip_lookup ( zip INTEGER, st_code INTEGER, state VARCHAR(2), co_code INTEGER, county VARCHAR(90), cs_code INTEGER, cousub VARCHAR(90), pl_code INTEGER, place VARCHAR(90), cnt INTEGER, PRIMARY KEY (zip) ); DROP TABLE IF EXISTS tiger.zcta500; /** INSERT INTO zip_lookup SELECT DISTINCT ON (zip) zip, st_code, state, co_code, county, cs_code, cousub, pl_code, place, cnt FROM zip_lookup_all ORDER BY zip,cnt desc; **/ DROP TABLE IF EXISTS tiger.county; CREATE TABLE county ( gid SERIAL NOT NULL, statefp character varying(2), countyfp character varying(3), countyns character varying(8), cntyidfp character varying(5) NOT NULL, "name" character varying(100), namelsad character varying(100), lsad character varying(2), classfp character varying(2), mtfcc character varying(5), csafp character varying(3), cbsafp character varying(5), metdivfp character varying(5), funcstat character varying(1), aland bigint, awater double precision, intptlat character varying(11), intptlon character varying(12), the_geom geometry, CONSTRAINT uidx_county_gid UNIQUE (gid), CONSTRAINT pk_tiger_county PRIMARY KEY (cntyidfp), CONSTRAINT enforce_dims_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX idx_tiger_county ON county USING btree (countyfp); DROP TABLE IF EXISTS tiger.state; CREATE TABLE state ( gid serial NOT NULL, region character varying(2), division character varying(2), statefp character varying(2), statens character varying(8), stusps character varying(2) NOT NULL, "name" character varying(100), lsad character varying(2), mtfcc character varying(5), funcstat character varying(1), aland bigint, awater bigint, intptlat character varying(11), intptlon character varying(12), the_geom geometry, CONSTRAINT uidx_tiger_state_stusps UNIQUE (stusps), CONSTRAINT uidx_tiger_state_gid UNIQUE (gid), CONSTRAINT pk_tiger_state PRIMARY KEY (statefp), CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX idx_tiger_state_the_geom_gist ON state USING gist(the_geom); DROP TABLE IF EXISTS tiger.place; CREATE TABLE place ( gid serial NOT NULL, statefp character varying(2), placefp character varying(5), placens character varying(8), plcidfp character varying(7) PRIMARY KEY, "name" character varying(100), namelsad character varying(100), lsad character varying(2), classfp character varying(2), cpi character varying(1), pcicbsa character varying(1), pcinecta character varying(1), mtfcc character varying(5), funcstat character varying(1), aland bigint, awater bigint, intptlat character varying(11), intptlon character varying(12), the_geom geometry, CONSTRAINT uidx_tiger_place_gid UNIQUE (gid), CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX tiger_place_the_geom_gist ON place USING gist(the_geom); DROP TABLE IF EXISTS tiger.zip_state; CREATE TABLE zip_state ( zip character varying(5) NOT NULL, stusps character varying(2) NOT NULL, statefp character varying(2), CONSTRAINT zip_state_pkey PRIMARY KEY (zip, stusps) ); DROP TABLE IF EXISTS tiger.zip_state_loc; CREATE TABLE zip_state_loc ( zip character varying(5) NOT NULL, stusps character varying(2) NOT NULL, statefp character varying(2), place varchar(100), CONSTRAINT zip_state_loc_pkey PRIMARY KEY (zip, stusps, place) ); DROP TABLE IF EXISTS tiger.cousub; CREATE TABLE cousub ( gid serial NOT NULL, statefp character varying(2), countyfp character varying(3), cousubfp character varying(5), cousubns character varying(8), cosbidfp character varying(10) NOT NULL PRIMARY KEY, "name" character varying(100), namelsad character varying(100), lsad character varying(2), classfp character varying(2), mtfcc character varying(5), cnectafp character varying(3), nectafp character varying(5), nctadvfp character varying(5), funcstat character varying(1), aland numeric(14), awater numeric(14), intptlat character varying(11), intptlon character varying(12), the_geom geometry, CONSTRAINT uidx_cousub_gid UNIQUE (gid), CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX tige_cousub_the_geom_gist ON cousub USING gist(the_geom); DROP TABLE IF EXISTS tiger.edges; CREATE TABLE edges ( gid SERIAL NOT NULL PRIMARY KEY, statefp character varying(2), countyfp character varying(3), tlid bigint, tfidl numeric(10), tfidr numeric(10), mtfcc character varying(5), fullname character varying(100), smid character varying(22), lfromadd character varying(12), ltoadd character varying(12), rfromadd character varying(12), rtoadd character varying(12), zipl character varying(5), zipr character varying(5), featcat character varying(1), hydroflg character varying(1), railflg character varying(1), roadflg character varying(1), olfflg character varying(1), passflg character varying(1), divroad character varying(1), exttyp character varying(1), ttyp character varying(1), deckedroad character varying(1), artpath character varying(1), persist character varying(1), gcseflg character varying(1), offsetl character varying(1), offsetr character varying(1), tnidf numeric(10), tnidt numeric(10), the_geom geometry, CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTILINESTRING'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX idx_edges_tlid ON edges USING btree(tlid); CREATE INDEX idx_tiger_edges_countyfp ON edges USING btree(countyfp); CREATE INDEX idx_tiger_edges_the_geom_gist ON edges USING gist(the_geom); DROP TABLE IF EXISTS tiger.addrfeat; CREATE TABLE addrfeat ( gid serial not null primary key, tlid bigint, statefp character varying(2) NOT NULL, aridl character varying(22), aridr character varying(22), linearid character varying(22), fullname character varying(100), lfromhn character varying(12), ltohn character varying(12), rfromhn character varying(12), rtohn character varying(12), zipl character varying(5), zipr character varying(5), edge_mtfcc character varying(5), parityl character varying(1), parityr character varying(1), plus4l character varying(4), plus4r character varying(4), lfromtyp character varying(1), ltotyp character varying(1), rfromtyp character varying(1), rtotyp character varying(1), offsetl character varying(1), offsetr character varying(1), the_geom geometry, CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX idx_addrfeat_geom_gist ON addrfeat USING gist(the_geom ); CREATE INDEX idx_addrfeat_tlid ON addrfeat USING btree(tlid); CREATE INDEX idx_addrfeat_zipl ON addrfeat USING btree(zipl); CREATE INDEX idx_addrfeat_zipr ON addrfeat USING btree(zipr); DROP TABLE IF EXISTS tiger.faces; CREATE TABLE faces ( gid serial NOT NULL PRIMARY KEY, tfid numeric(10,0), statefp00 varchar(2), countyfp00 varchar(3), tractce00 varchar(6), blkgrpce00 varchar(1), blockce00 varchar(4), cousubfp00 varchar(5), submcdfp00 varchar(5), conctyfp00 varchar(5), placefp00 varchar(5), aiannhfp00 varchar(5), aiannhce00 varchar(4), comptyp00 varchar(1), trsubfp00 varchar(5), trsubce00 varchar(3), anrcfp00 varchar(5), elsdlea00 varchar(5), scsdlea00 varchar(5), unsdlea00 varchar(5), uace00 varchar(5), cd108fp varchar(2), sldust00 varchar(3), sldlst00 varchar(3), vtdst00 varchar(6), zcta5ce00 varchar(5), tazce00 varchar(6), ugace00 varchar(5), puma5ce00 varchar(5), statefp varchar(2), countyfp varchar(3), tractce varchar(6), blkgrpce varchar(1), blockce varchar(4), cousubfp varchar(5), submcdfp varchar(5), conctyfp varchar(5), placefp varchar(5), aiannhfp varchar(5), aiannhce varchar(4), comptyp varchar(1), trsubfp varchar(5), trsubce varchar(3), anrcfp varchar(5), ttractce varchar(6), tblkgpce varchar(1), elsdlea varchar(5), scsdlea varchar(5), unsdlea varchar(5), uace varchar(5), cd111fp varchar(2), sldust varchar(3), sldlst varchar(3), vtdst varchar(6), zcta5ce varchar(5), tazce varchar(6), ugace varchar(5), puma5ce varchar(5), csafp varchar(3), cbsafp varchar(5), metdivfp varchar(5), cnectafp varchar(3), nectafp varchar(5), nctadvfp varchar(5), lwflag varchar(1), "offset" varchar(1), atotal double precision, intptlat varchar(11), intptlon varchar(12), the_geom geometry, CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269) ); CREATE INDEX idx_tiger_faces_tfid ON faces USING btree (tfid); CREATE INDEX idx_tiger_faces_countyfp ON faces USING btree(countyfp); CREATE INDEX tiger_faces_the_geom_gist ON faces USING gist(the_geom); DROP TABLE IF EXISTS tiger.featnames; CREATE TABLE featnames ( gid SERIAL NOT NULL, tlid bigint, fullname character varying(100), "name" character varying(100), predirabrv character varying(15), pretypabrv character varying(50), prequalabr character varying(15), sufdirabrv character varying(15), suftypabrv character varying(50), sufqualabr character varying(15), predir character varying(2), pretyp character varying(3), prequal character varying(2), sufdir character varying(2), suftyp character varying(3), sufqual character varying(2), linearid character varying(22), mtfcc character varying(5), paflag character varying(1), CONSTRAINT featnames_pkey PRIMARY KEY (gid) ); ALTER TABLE featnames ADD COLUMN statefp character varying(2); CREATE INDEX idx_tiger_featnames_snd_name ON featnames USING btree (soundex(name)); CREATE INDEX idx_tiger_featnames_lname ON featnames USING btree (lower(name)); CREATE INDEX idx_tiger_featnames_tlid_statefp ON featnames USING btree (tlid,statefp); CREATE TABLE addr ( gid SERIAL NOT NULL, tlid bigint, fromhn character varying(12), tohn character varying(12), side character varying(1), zip character varying(5), plus4 character varying(4), fromtyp character varying(1), totyp character varying(1), fromarmid integer, toarmid integer, arid character varying(22), mtfcc character varying(5), CONSTRAINT addr_pkey PRIMARY KEY (gid) ); ALTER TABLE addr ADD COLUMN statefp character varying(2); CREATE INDEX idx_tiger_addr_tlid_statefp ON addr USING btree(tlid,statefp); CREATE INDEX idx_tiger_addr_zip ON addr USING btree (zip); --DROP TABLE IF EXISTS tiger.zcta5; CREATE TABLE zcta5 ( gid serial NOT NULL, statefp character varying(2), zcta5ce character varying(5), classfp character varying(2), mtfcc character varying(5), funcstat character varying(1), aland double precision, awater double precision, intptlat character varying(11), intptlon character varying(12), partflg character varying(1), the_geom geometry, CONSTRAINT uidx_tiger_zcta5_gid UNIQUE (gid), CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4269), CONSTRAINT pk_tiger_zcta5_zcta5ce PRIMARY KEY (zcta5ce,statefp) ); ��������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/tiger_loader_2011.sql����������������������0000644�0000000�0000000�00000072550�12222357134�025462� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: tiger_loader_2011.sql 11993 2013-09-30 20:26:04Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2010, 2011, 2012 Regina Obe and Leo Hsu -- Paragon Corporation -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe and Leo Hsu <lr@pcorp.us> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --SET search_path TO tiger,public; --ALTER TABLE tiger.faces RENAME cd111fp TO cdfp; SELECT tiger.SetSearchPathForInstall('tiger'); BEGIN; CREATE OR REPLACE FUNCTION loader_macro_replace(param_input text, param_keys text[],param_values text[]) RETURNS text AS $$ DECLARE var_result text = param_input; DECLARE var_count integer = array_upper(param_keys,1); BEGIN FOR i IN 1..var_count LOOP var_result := replace(var_result, '${' || param_keys[i] || '}', param_values[i]); END LOOP; return var_result; END; $$ LANGUAGE 'plpgsql' IMMUTABLE COST 100; -- Helper function that generates script to drop all tables in a particular schema for a particular table -- This is useful in case you need to reload a state CREATE OR REPLACE FUNCTION drop_state_tables_generate_script(param_state text, param_schema text DEFAULT 'tiger_data') RETURNS text AS $$ SELECT array_to_string(array_agg('DROP TABLE ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ';'),E'\n') FROM (SELECT * FROM information_schema.tables WHERE table_schema = $2 AND table_name like lower($1) || '_%' ORDER BY table_name) AS foo; ; $$ LANGUAGE sql VOLATILE; -- Helper function that generates script to drop all nation tables (county, state) in a particular schema -- This is useful for loading 2011 because state and county tables aren't broken out into separate state files DROP FUNCTION IF EXISTS drop_national_tables_generate_script(text); CREATE OR REPLACE FUNCTION drop_nation_tables_generate_script(param_schema text DEFAULT 'tiger_data') RETURNS text AS $$ SELECT array_to_string(array_agg('DROP TABLE ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ';'),E'\n') FROM (SELECT * FROM information_schema.tables WHERE table_schema = $1 AND (table_name ~ E'^[a-z]{2}\_county' or table_name ~ E'^[a-z]{2}\_state' or table_name = 'state_all' or table_name LIKE 'county_all%') ORDER BY table_name) AS foo; ; $$ LANGUAGE sql VOLATILE; DROP TABLE IF EXISTS loader_platform; CREATE TABLE loader_platform(os varchar(50) PRIMARY KEY, declare_sect text, pgbin text, wget text, unzip_command text, psql text, path_sep text, loader text, environ_set_command text, county_process_command text); GRANT SELECT ON TABLE loader_platform TO public; INSERT INTO loader_platform(os, wget, pgbin, declare_sect, unzip_command, psql,path_sep,loader, environ_set_command, county_process_command) VALUES('windows', '%WGETTOOL%', '%PGBIN%', E'set TMPDIR=${staging_fold}\\temp\\ set UNZIPTOOL="C:\\Program Files\\7-Zip\\7z.exe" set WGETTOOL="C:\\wget\\wget.exe" set PGBIN=C:\\Program Files\\PostgreSQL\\8.4\\bin\\ set PGPORT=5432 set PGHOST=localhost set PGUSER=postgres set PGPASSWORD=yourpasswordhere set PGDATABASE=geocoder set PSQL="%PGBIN%psql" set SHP2PGSQL="%PGBIN%shp2pgsql" cd ${staging_fold} ', E'del %TMPDIR%\\*.* /Q %PSQL% -c "DROP SCHEMA ${staging_schema} CASCADE;" %PSQL% -c "CREATE SCHEMA ${staging_schema};" for /r %%z in (*.zip) do %UNZIPTOOL% e %%z -o%TMPDIR% cd %TMPDIR%', E'%PSQL%', E'\\', E'%SHP2PGSQL%', 'set ', 'for /r %%z in (*${table_name}.dbf) do (${loader} -D -s 4269 -g the_geom -W "latin1" %%z tiger_staging.${state_abbrev}_${table_name} | ${psql} & ${psql} -c "SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}''));")' ); INSERT INTO loader_platform(os, wget, pgbin, declare_sect, unzip_command, psql, path_sep, loader, environ_set_command, county_process_command) VALUES('sh', 'wget', '', E'TMPDIR="${staging_fold}/temp/" UNZIPTOOL=unzip WGETTOOL="/usr/bin/wget" export PGBIN=/usr/pgsql-9.0/bin export PGPORT=5432 export PGHOST=localhost export PGUSER=postgres export PGPASSWORD=yourpasswordhere export PGDATABASE=geocoder PSQL=${PGBIN}/psql SHP2PGSQL=${PGBIN}/shp2pgsql cd ${staging_fold} ', E'rm -f ${TMPDIR}/*.* ${PSQL} -c "DROP SCHEMA tiger_staging CASCADE;" ${PSQL} -c "CREATE SCHEMA tiger_staging;" for z in *.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done for z in */*.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done cd $TMPDIR;\n', '${PSQL}', '/', '${SHP2PGSQL}', 'export ', 'for z in *${table_name}.dbf; do ${loader} -D -s 4269 -g the_geom -W "latin1" $z ${staging_schema}.${state_abbrev}_${table_name} | ${psql} ${PSQL} -c "SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}''));" done'); -- variables table DROP TABLE IF EXISTS loader_variables; CREATE TABLE loader_variables(tiger_year varchar(4) PRIMARY KEY, website_root text, staging_fold text, data_schema text, staging_schema text); INSERT INTO loader_variables(tiger_year, website_root , staging_fold, data_schema, staging_schema) VALUES('2011', 'ftp://ftp2.census.gov/geo/tiger/TIGER2011', '/gisdata', 'tiger_data', 'tiger_staging'); GRANT SELECT ON TABLE loader_variables TO public; DROP TABLE IF EXISTS loader_lookuptables; CREATE TABLE loader_lookuptables(process_order integer NOT NULL DEFAULT 1000, lookup_name text primary key, table_name text, single_mode boolean NOT NULL DEFAULT true, load boolean NOT NULL DEFAULT true, level_county boolean NOT NULL DEFAULT false, level_state boolean NOT NULL DEFAULT false, level_nation boolean NOT NULL DEFAULT false, post_load_process text, single_geom_mode boolean DEFAULT false, insert_mode char(1) NOT NULL DEFAULT 'c', pre_load_process text,columns_exclude text[], website_root_override text); GRANT SELECT ON TABLE loader_lookuptables TO public; -- put in explanatory comments of what each column is for COMMENT ON COLUMN loader_lookuptables.lookup_name IS 'This is the table name to inherit from and suffix of resulting output table -- how the table will be named -- edges here would mean -- ma_edges , pa_edges etc. except in the case of national tables. national level tables have no prefix'; COMMENT ON COLUMN loader_lookuptables.level_nation IS 'These are tables that contain all data for the whole US so there is just a single file'; COMMENT ON COLUMN loader_lookuptables.table_name IS 'suffix of the tables to load e.g. edges would load all tables like *edges.dbf(shp) -- so tl_2010_42129_edges.dbf . '; COMMENT ON COLUMN loader_lookuptables.load IS 'Whether or not to load the table. For states and zcta5 (you may just want to download states10, zcta510 nationwide file manually) load your own into a single table that inherits from tiger.states, tiger.zcta5. You''ll get improved performance for some geocoding cases.'; COMMENT ON COLUMN loader_lookuptables.columns_exclude IS 'List of columns to exclude as an array. This is excluded from both input table and output table and rest of columns remaining are assumed to be in same order in both tables. gid, geoid,cpi,suffix1ce are excluded if no columns are specified.'; COMMENT ON COLUMN loader_lookuptables.website_root_override IS 'Path to use for wget instead of that specified in year table. Needed currently for zcta where they release that only for 2000 and 2010'; INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, pre_load_process, post_load_process) VALUES(2, 'county_all', 'county', true, false, false, true, false, '${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}(CONSTRAINT pk_${data_schema}_${lookup_name} PRIMARY KEY (cntyidfp),CONSTRAINT uidx_${data_schema}_${lookup_name}_gid UNIQUE (gid) ) INHERITS(county); " ', '${psql} -c "ALTER TABLE ${staging_schema}.${table_name} RENAME geoid TO cntyidfp; SELECT loader_load_staged_data(lower(''${table_name}''), lower(''${lookup_name}''));" ${psql} -c "CREATE INDEX ${data_schema}_${table_name}_the_geom_gist ON ${data_schema}.${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE UNIQUE INDEX uidx_${data_schema}_${lookup_name}_statefp_countyfp ON ${data_schema}.${lookup_name} USING btree(statefp,countyfp);" ${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}_lookup ( CONSTRAINT pk_${lookup_name}_lookup PRIMARY KEY (st_code, co_code)) INHERITS (county_lookup);" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name};" ${psql} -c "INSERT INTO ${data_schema}.${lookup_name}_lookup(st_code, state, co_code, name) SELECT CAST(s.statefp as integer), s.abbrev, CAST(c.countyfp as integer), c.name FROM ${data_schema}.${lookup_name} As c INNER JOIN state_lookup As s ON s.statefp = c.statefp;" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name}_lookup;" '); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(1, 'state_all', 'state', true, false, false,true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}(CONSTRAINT pk_${lookup_name} PRIMARY KEY (statefp),CONSTRAINT uidx_${lookup_name}_stusps UNIQUE (stusps), CONSTRAINT uidx_${lookup_name}_gid UNIQUE (gid) ) INHERITS(state); "', '${psql} -c "SELECT loader_load_staged_data(lower(''${table_name}''), lower(''${lookup_name}'')); " ${psql} -c "CREATE INDEX ${data_schema}_${lookup_name}_the_geom_gist ON ${data_schema}.${lookup_name} USING gist(the_geom);" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name}"' ); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(3, 'place', 'place', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (plcidfp) ) INHERITS(place);" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO plcidfp;SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid);" ${psql} -c "CREATE INDEX idx_${state_abbrev}_${lookup_name}_soundex_name ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (soundex(name));" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');"' ); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(4, 'cousub', 'cousub', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (cosbidfp), CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid)) INHERITS(${lookup_name});" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO cosbidfp;SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_countyfp ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree(countyfp);"'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude, website_root_override ) -- this is a bit of a lie that its county. It's really state but works better with column routine VALUES(4, 'zcta5', 'zcta510', true,true, false,false, false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (zcta5ce,statefp), CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid)) INHERITS(${lookup_name});" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);"' , ARRAY['gid','geoid','geoid10'], 'ftp://ftp2.census.gov/geo/tiger/TIGER2010/ZCTA5/2010'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(6, 'faces', 'faces', true, true, false,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (gid)) INHERITS(${lookup_name});" ', '${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${table_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tfid ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (tfid);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_countyfp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (countyfp);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude ) VALUES(7, 'featnames', 'featnames', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${table_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_snd_name ON ${data_schema}.${state_abbrev}_${table_name} USING btree (soundex(name));" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_lname ON ${data_schema}.${state_abbrev}_${table_name} USING btree (lower(name));" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tlid_statefp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid,statefp);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(8, 'edges', 'edges', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${table_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tlid ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}tfidr ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tfidr);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tfidl ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tfidl);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_countyfp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (countyfp);" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${table_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${table_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_zipl ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (zipl);" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_state_loc(CONSTRAINT pk_${state_abbrev}_zip_state_loc PRIMARY KEY(zip,stusps,place)) INHERITS(zip_state_loc);" ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_state_loc(zip,stusps,statefp,place) SELECT DISTINCT e.zipl, ''${state_abbrev}'', ''${state_fips}'', p.name FROM ${data_schema}.${state_abbrev}_edges AS e INNER JOIN ${data_schema}.${state_abbrev}_faces AS f ON (e.tfidl = f.tfid OR e.tfidr = f.tfid) INNER JOIN ${data_schema}.${state_abbrev}_place As p ON(f.statefp = p.statefp AND f.placefp = p.placefp ) WHERE e.zipl IS NOT NULL;" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_zip_state_loc_place ON ${data_schema}.${state_abbrev}_zip_state_loc USING btree(soundex(place));" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_state_loc ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_zip_state_loc;" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_lookup_base(CONSTRAINT pk_${state_abbrev}_zip_state_loc_city PRIMARY KEY(zip,state, county, city, statefp)) INHERITS(zip_lookup_base);" ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_lookup_base(zip,state,county,city, statefp) SELECT DISTINCT e.zipl, ''${state_abbrev}'', c.name,p.name,''${state_fips}'' FROM ${data_schema}.${state_abbrev}_edges AS e INNER JOIN tiger.county As c ON (e.countyfp = c.countyfp AND e.statefp = c.statefp AND e.statefp = ''${state_fips}'') INNER JOIN ${data_schema}.${state_abbrev}_faces AS f ON (e.tfidl = f.tfid OR e.tfidr = f.tfid) INNER JOIN ${data_schema}.${state_abbrev}_place As p ON(f.statefp = p.statefp AND f.placefp = p.placefp ) WHERE e.zipl IS NOT NULL;" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_lookup_base ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_zip_lookup_base_citysnd ON ${data_schema}.${state_abbrev}_zip_lookup_base USING btree(soundex(city));" '); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process,columns_exclude ) VALUES(9, 'addr', 'addr', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_least_address ON tiger_data.${state_abbrev}_addr USING btree (least_hn(fromhn,tohn) );" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_tlid_statefp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid, statefp);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_zip ON ${data_schema}.${state_abbrev}_${table_name} USING btree (zip);" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_state(CONSTRAINT pk_${state_abbrev}_zip_state PRIMARY KEY(zip,stusps)) INHERITS(zip_state); " ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_state(zip,stusps,statefp) SELECT DISTINCT zip, ''${state_abbrev}'', ''${state_fips}'' FROM ${data_schema}.${state_abbrev}_${lookup_name} WHERE zip is not null;" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_state ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp','fromarmid', 'toarmid']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process,columns_exclude ) VALUES(9, 'addrfeat', 'addrfeat', false, true, false,true, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp','fromarmid', 'toarmid']); CREATE OR REPLACE FUNCTION loader_generate_nation_script(os text) RETURNS SETOF text AS $BODY$ WITH lu AS (SELECT lookup_name, table_name, pre_load_process,post_load_process, process_order, insert_mode, single_geom_mode, level_nation, level_county, level_state FROM loader_lookuptables WHERE level_nation = true AND load = true) SELECT loader_macro_replace( replace( loader_macro_replace(declare_sect , ARRAY['staging_fold', 'website_root', 'psql', 'data_schema', 'staging_schema'], ARRAY[variables.staging_fold, variables.website_root, platform.psql, variables.data_schema, variables.staging_schema] ), '/', platform.path_sep) || ' ' || -- Nation level files array_to_string( ARRAY(SELECT loader_macro_replace('cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || variables.website_root || '/' || upper(table_name) || '/ --no-parent --relative --recursive --level=1 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(variables.website_root, 'http://', ''),'ftp://','') || '/' || upper(table_name) || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*' || table_name || '.zip ') || ' ' || COALESCE(lu.pre_load_process || E'\n', '') || platform.loader || ' -' || lu.insert_mode || ' -s 4269 -g the_geom ' || CASE WHEN lu.single_geom_mode THEN ' -S ' ELSE ' ' END::text || ' -W "latin1" tl_' || variables.tiger_year || '_us_' || lu.table_name || '.dbf tiger_staging.' || lu.table_name || ' | '::text || platform.psql || COALESCE(E'\n' || lu.post_load_process , '') , ARRAY['loader','table_name', 'lookup_name'], ARRAY[platform.loader, lu.table_name, lu.lookup_name ] ) FROM lu ORDER BY process_order, lookup_name), E'\n') ::text , ARRAY['psql', 'data_schema','staging_schema', 'staging_fold', 'website_root'], ARRAY[platform.psql, variables.data_schema, variables.staging_schema, variables.staging_fold, variables.website_root]) AS shell_code FROM loader_variables As variables CROSS JOIN loader_platform As platform WHERE platform.os = $1 -- generate script for selected platform ; $BODY$ LANGUAGE sql VOLATILE; CREATE OR REPLACE FUNCTION loader_generate_script(param_states text[], os text) RETURNS SETOF text AS $BODY$ SELECT loader_macro_replace( replace( loader_macro_replace(declare_sect , ARRAY['staging_fold', 'state_fold','website_root', 'psql', 'state_abbrev', 'data_schema', 'staging_schema', 'state_fips'], ARRAY[variables.staging_fold, s.state_fold, variables.website_root, platform.psql, s.state_abbrev, variables.data_schema, variables.staging_schema, s.state_fips::text] ), '/', platform.path_sep) || ' ' || -- State level files - if an override website is specified we use that instead of variable one array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/*_' || s.state_fips || '* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' ||loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || platform.loader || ' -' || lu.insert_mode || ' -s 4269 -g the_geom ' || CASE WHEN lu.single_geom_mode THEN ' -S ' ELSE ' ' END::text || ' -W "latin1" tl_' || variables.tiger_year || '_' || s.state_fips || '_' || lu.table_name || '.dbf tiger_staging.' || lower(s.state_abbrev) || '_' || lu.table_name || ' | '::text || platform.psql || COALESCE(E'\n' || lu.post_load_process , '') , ARRAY['loader','table_name', 'lookup_name'], ARRAY[platform.loader, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_state = true AND load = true ORDER BY process_order, lookup_name), E'\n') ::text -- County Level files || E'\n' || array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/*_' || s.state_fips || '* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) || '/'), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' || loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || COALESCE(county_process_command || E'\n','') || COALESCE(E'\n' ||lu.post_load_process , '') , ARRAY['loader','table_name','lookup_name'], ARRAY[platform.loader || CASE WHEN lu.single_geom_mode THEN ' -S' ELSE ' ' END::text, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_county = true AND load = true ORDER BY process_order, lookup_name), E'\n') ::text , ARRAY['psql', 'data_schema','staging_schema', 'staging_fold', 'state_fold', 'website_root', 'state_abbrev','state_fips'], ARRAY[platform.psql, variables.data_schema, variables.staging_schema, variables.staging_fold, s.state_fold,variables.website_root, s.state_abbrev, s.state_fips::text]) AS shell_code FROM loader_variables As variables CROSS JOIN (SELECT name As state, abbrev As state_abbrev, lpad(st_code::text,2,'0') As state_fips, lpad(st_code::text,2,'0') || '_' || replace(name, ' ', '_') As state_fold FROM state_lookup) As s CROSS JOIN loader_platform As platform WHERE $1 @> ARRAY[state_abbrev::text] -- If state is contained in list of states input generate script for it AND platform.os = $2 -- generate script for selected platform ; $BODY$ LANGUAGE sql VOLATILE; CREATE OR REPLACE FUNCTION loader_load_staged_data(param_staging_table text, param_target_table text, param_columns_exclude text[]) RETURNS integer AS $$ DECLARE var_sql text; var_staging_schema text; var_data_schema text; var_temp text; var_num_records bigint; BEGIN -- Add all the fields except geoid and gid -- Assume all the columns are in same order as target SELECT staging_schema, data_schema INTO var_staging_schema, var_data_schema FROM loader_variables; var_sql := 'INSERT INTO ' || var_data_schema || '.' || quote_ident(param_target_table) || '(' || array_to_string(ARRAY(SELECT quote_ident(column_name::text) FROM information_schema.columns WHERE table_name = param_target_table AND table_schema = var_data_schema AND column_name <> ALL(param_columns_exclude) ), ',') || ') SELECT ' || array_to_string(ARRAY(SELECT quote_ident(column_name::text) FROM information_schema.columns WHERE table_name = param_staging_table AND table_schema = var_staging_schema AND column_name <> ALL( param_columns_exclude) ), ',') ||' FROM ' || var_staging_schema || '.' || param_staging_table || ';'; RAISE NOTICE '%', var_sql; EXECUTE (var_sql); GET DIAGNOSTICS var_num_records = ROW_COUNT; SELECT DropGeometryTable(var_staging_schema,param_staging_table) INTO var_temp; RETURN var_num_records; END; $$ LANGUAGE 'plpgsql' VOLATILE; CREATE OR REPLACE FUNCTION loader_load_staged_data(param_staging_table text, param_target_table text) RETURNS integer AS $$ -- exclude this set list of columns if no exclusion list is specified SELECT loader_load_staged_data($1, $2,(SELECT COALESCE(columns_exclude,ARRAY['gid', 'geoid','cpi','suffix1ce', 'statefp00', 'statefp10', 'countyfp00','countyfp10' ,'tractce00','tractce10', 'blkgrpce00', 'blkgrpce10', 'blockce00', 'blockce10' , 'cousubfp00', 'submcdfp00', 'conctyfp00', 'placefp00', 'aiannhfp00', 'aiannhce00', 'comptyp00', 'trsubfp00', 'trsubce00', 'anrcfp00', 'elsdlea00', 'scsdlea00', 'unsdlea00', 'uace00', 'cd108fp', 'sldust00', 'sldlst00', 'vtdst00', 'zcta5ce00', 'tazce00', 'ugace00', 'puma5ce00','vtdst10','tazce10','uace10','puma5ce10','tazce', 'uace', 'vtdst', 'zcta5ce', 'zcta5ce10', 'puma5ce']) FROM loader_lookuptables WHERE $2 LIKE '%' || lookup_name)) $$ language 'sql' VOLATILE; COMMIT;��������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/tiger_loader_2012.sql����������������������0000644�0000000�0000000�00000074560�12222357134�025466� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: tiger_loader_2012.sql 11993 2013-09-30 20:26:04Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2010, 2011, 2012 Regina Obe and Leo Hsu -- Paragon Corporation -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe and Leo Hsu <lr@pcorp.us> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SELECT tiger.SetSearchPathForInstall('tiger'); BEGIN; CREATE OR REPLACE FUNCTION loader_macro_replace(param_input text, param_keys text[],param_values text[]) RETURNS text AS $$ DECLARE var_result text = param_input; DECLARE var_count integer = array_upper(param_keys,1); BEGIN FOR i IN 1..var_count LOOP var_result := replace(var_result, '${' || param_keys[i] || '}', param_values[i]); END LOOP; return var_result; END; $$ LANGUAGE 'plpgsql' IMMUTABLE COST 100; -- Helper function that generates script to drop all tables in a particular schema for a particular table -- This is useful in case you need to reload a state CREATE OR REPLACE FUNCTION drop_state_tables_generate_script(param_state text, param_schema text DEFAULT 'tiger_data') RETURNS text AS $$ SELECT array_to_string(array_agg('DROP TABLE ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ';'),E'\n') FROM (SELECT * FROM information_schema.tables WHERE table_schema = $2 AND table_name like lower($1) || '_%' ORDER BY table_name) AS foo; ; $$ LANGUAGE sql VOLATILE; -- Helper function that generates script to drop all nation tables (county, state) in a particular schema -- This is useful for loading 2011 because state and county tables aren't broken out into separate state files DROP FUNCTION IF EXISTS drop_national_tables_generate_script(text); CREATE OR REPLACE FUNCTION drop_nation_tables_generate_script(param_schema text DEFAULT 'tiger_data') RETURNS text AS $$ SELECT array_to_string(array_agg('DROP TABLE ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ';'),E'\n') FROM (SELECT * FROM information_schema.tables WHERE table_schema = $1 AND (table_name ~ E'^[a-z]{2}\_county' or table_name ~ E'^[a-z]{2}\_state' or table_name = 'state_all' or table_name LIKE 'county_all%') ORDER BY table_name) AS foo; ; $$ LANGUAGE sql VOLATILE; DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'loader_platform' AND table_schema = 'tiger') THEN CREATE TABLE loader_platform(os varchar(50) PRIMARY KEY, declare_sect text, pgbin text, wget text, unzip_command text, psql text, path_sep text, loader text, environ_set_command text, county_process_command text); END IF; END $$ LANGUAGE 'plpgsql'; DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = 'tiger_data') THEN CREATE SCHEMA tiger_data; END IF; END $$ LANGUAGE 'plpgsql'; DELETE FROM loader_platform WHERE os IN ('sh', 'windows'); GRANT SELECT ON TABLE loader_platform TO public; INSERT INTO loader_platform(os, wget, pgbin, declare_sect, unzip_command, psql,path_sep,loader, environ_set_command, county_process_command) VALUES('windows', '%WGETTOOL%', '%PGBIN%', E'set TMPDIR=${staging_fold}\\temp\\ set UNZIPTOOL="C:\\Program Files\\7-Zip\\7z.exe" set WGETTOOL="C:\\wget\\wget.exe" set PGBIN=C:\\Program Files\\PostgreSQL\\9.2\\bin\\ set PGPORT=5432 set PGHOST=localhost set PGUSER=postgres set PGPASSWORD=yourpasswordhere set PGDATABASE=geocoder set PSQL="%PGBIN%psql" set SHP2PGSQL="%PGBIN%shp2pgsql" cd ${staging_fold} ', E'del %TMPDIR%\\*.* /Q %PSQL% -c "DROP SCHEMA IF EXISTS ${staging_schema} CASCADE;" %PSQL% -c "CREATE SCHEMA ${staging_schema};" %PSQL% -c "DO language ''plpgsql'' $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = ''${data_schema}'' ) THEN CREATE SCHEMA ${data_schema}; END IF; END $$" for /r %%z in (*.zip) do %UNZIPTOOL% e %%z -o%TMPDIR% cd %TMPDIR%', E'%PSQL%', E'\\', E'%SHP2PGSQL%', 'set ', 'for /r %%z in (*${table_name}.dbf) do (${loader} -D -s 4269 -g the_geom -W "latin1" %%z tiger_staging.${state_abbrev}_${table_name} | ${psql} & ${psql} -c "SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}''));")' ); INSERT INTO loader_platform(os, wget, pgbin, declare_sect, unzip_command, psql, path_sep, loader, environ_set_command, county_process_command) VALUES('sh', 'wget', '', E'TMPDIR="${staging_fold}/temp/" UNZIPTOOL=unzip WGETTOOL="/usr/bin/wget" export PGBIN=/usr/pgsql-9.0/bin export PGPORT=5432 export PGHOST=localhost export PGUSER=postgres export PGPASSWORD=yourpasswordhere export PGDATABASE=geocoder PSQL=${PGBIN}/psql SHP2PGSQL=${PGBIN}/shp2pgsql cd ${staging_fold} ', E'rm -f ${TMPDIR}/*.* ${PSQL} -c "DROP SCHEMA IF EXISTS ${staging_schema} CASCADE;" ${PSQL} -c "CREATE SCHEMA ${staging_schema};" for z in *.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done for z in */*.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done cd $TMPDIR;\n', '${PSQL}', '/', '${SHP2PGSQL}', 'export ', 'for z in *${table_name}.dbf; do ${loader} -D -s 4269 -g the_geom -W "latin1" $z ${staging_schema}.${state_abbrev}_${table_name} | ${psql} ${PSQL} -c "SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}''));" done'); -- variables table DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'loader_variables' AND table_schema = 'tiger') THEN CREATE TABLE loader_variables(tiger_year varchar(4) PRIMARY KEY, website_root text, staging_fold text, data_schema text, staging_schema text); END IF; END $$ LANGUAGE 'plpgsql'; TRUNCATE TABLE loader_variables; INSERT INTO loader_variables(tiger_year, website_root , staging_fold, data_schema, staging_schema) VALUES('2012', 'ftp://ftp2.census.gov/geo/tiger/TIGER2012', '/gisdata', 'tiger_data', 'tiger_staging'); GRANT SELECT ON TABLE loader_variables TO public; DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'loader_lookuptables' AND table_schema = 'tiger') THEN CREATE TABLE loader_lookuptables(process_order integer NOT NULL DEFAULT 1000, lookup_name text primary key, table_name text, single_mode boolean NOT NULL DEFAULT true, load boolean NOT NULL DEFAULT true, level_county boolean NOT NULL DEFAULT false, level_state boolean NOT NULL DEFAULT false, level_nation boolean NOT NULL DEFAULT false, post_load_process text, single_geom_mode boolean DEFAULT false, insert_mode char(1) NOT NULL DEFAULT 'c', pre_load_process text,columns_exclude text[], website_root_override text); END IF; END $$ LANGUAGE 'plpgsql'; TRUNCATE TABLE loader_lookuptables; GRANT SELECT ON TABLE loader_lookuptables TO public; -- put in explanatory comments of what each column is for COMMENT ON COLUMN loader_lookuptables.lookup_name IS 'This is the table name to inherit from and suffix of resulting output table -- how the table will be named -- edges here would mean -- ma_edges , pa_edges etc. except in the case of national tables. national level tables have no prefix'; COMMENT ON COLUMN loader_lookuptables.level_nation IS 'These are tables that contain all data for the whole US so there is just a single file'; COMMENT ON COLUMN loader_lookuptables.table_name IS 'suffix of the tables to load e.g. edges would load all tables like *edges.dbf(shp) -- so tl_2010_42129_edges.dbf . '; COMMENT ON COLUMN loader_lookuptables.load IS 'Whether or not to load the table. For states and zcta5 (you may just want to download states10, zcta510 nationwide file manually) load your own into a single table that inherits from tiger.states, tiger.zcta5. You''ll get improved performance for some geocoding cases.'; COMMENT ON COLUMN loader_lookuptables.columns_exclude IS 'List of columns to exclude as an array. This is excluded from both input table and output table and rest of columns remaining are assumed to be in same order in both tables. gid, geoid,cpi,suffix1ce are excluded if no columns are specified.'; COMMENT ON COLUMN loader_lookuptables.website_root_override IS 'Path to use for wget instead of that specified in year table. Needed currently for zcta where they release that only for 2000 and 2010'; INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, pre_load_process, post_load_process) VALUES(2, 'county_all', 'county', true, false, false, true, false, '${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}(CONSTRAINT pk_${data_schema}_${lookup_name} PRIMARY KEY (cntyidfp),CONSTRAINT uidx_${data_schema}_${lookup_name}_gid UNIQUE (gid) ) INHERITS(county); " ', '${psql} -c "ALTER TABLE ${staging_schema}.${table_name} RENAME geoid TO cntyidfp; SELECT loader_load_staged_data(lower(''${table_name}''), lower(''${lookup_name}''));" ${psql} -c "CREATE INDEX ${data_schema}_${table_name}_the_geom_gist ON ${data_schema}.${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE UNIQUE INDEX uidx_${data_schema}_${lookup_name}_statefp_countyfp ON ${data_schema}.${lookup_name} USING btree(statefp,countyfp);" ${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}_lookup ( CONSTRAINT pk_${lookup_name}_lookup PRIMARY KEY (st_code, co_code)) INHERITS (county_lookup);" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name};" ${psql} -c "INSERT INTO ${data_schema}.${lookup_name}_lookup(st_code, state, co_code, name) SELECT CAST(s.statefp as integer), s.abbrev, CAST(c.countyfp as integer), c.name FROM ${data_schema}.${lookup_name} As c INNER JOIN state_lookup As s ON s.statefp = c.statefp;" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name}_lookup;" '); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(1, 'state_all', 'state', true, false, false,true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}(CONSTRAINT pk_${lookup_name} PRIMARY KEY (statefp),CONSTRAINT uidx_${lookup_name}_stusps UNIQUE (stusps), CONSTRAINT uidx_${lookup_name}_gid UNIQUE (gid) ) INHERITS(state); "', '${psql} -c "SELECT loader_load_staged_data(lower(''${table_name}''), lower(''${lookup_name}'')); " ${psql} -c "CREATE INDEX ${data_schema}_${lookup_name}_the_geom_gist ON ${data_schema}.${lookup_name} USING gist(the_geom);" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name}"' ); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(3, 'place', 'place', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (plcidfp) ) INHERITS(place);" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO plcidfp;SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid);" ${psql} -c "CREATE INDEX idx_${state_abbrev}_${lookup_name}_soundex_name ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (soundex(name));" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');"' ); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(4, 'cousub', 'cousub', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (cosbidfp), CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid)) INHERITS(${lookup_name});" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO cosbidfp;SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_countyfp ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree(countyfp);"'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude, website_root_override ) -- this is a bit of a lie that its county. It's really state but works better with column routine VALUES(4, 'zcta5', 'zcta510', true,true, false,false, false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (zcta5ce,statefp), CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid)) INHERITS(${lookup_name});" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);"' , ARRAY['gid','geoid','geoid10'], 'ftp://ftp2.census.gov/geo/tiger/TIGER2010/ZCTA5/2010'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(6, 'faces', 'faces', true, true, false,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (gid)) INHERITS(${lookup_name});" ', '${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${table_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tfid ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (tfid);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_countyfp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (countyfp);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude ) VALUES(7, 'featnames', 'featnames', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${table_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_snd_name ON ${data_schema}.${state_abbrev}_${table_name} USING btree (soundex(name));" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_lname ON ${data_schema}.${state_abbrev}_${table_name} USING btree (lower(name));" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tlid_statefp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid,statefp);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(8, 'edges', 'edges', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${table_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tlid ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}tfidr ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tfidr);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tfidl ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tfidl);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_countyfp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (countyfp);" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${table_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${table_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_zipl ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (zipl);" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_state_loc(CONSTRAINT pk_${state_abbrev}_zip_state_loc PRIMARY KEY(zip,stusps,place)) INHERITS(zip_state_loc);" ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_state_loc(zip,stusps,statefp,place) SELECT DISTINCT e.zipl, ''${state_abbrev}'', ''${state_fips}'', p.name FROM ${data_schema}.${state_abbrev}_edges AS e INNER JOIN ${data_schema}.${state_abbrev}_faces AS f ON (e.tfidl = f.tfid OR e.tfidr = f.tfid) INNER JOIN ${data_schema}.${state_abbrev}_place As p ON(f.statefp = p.statefp AND f.placefp = p.placefp ) WHERE e.zipl IS NOT NULL;" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_zip_state_loc_place ON ${data_schema}.${state_abbrev}_zip_state_loc USING btree(soundex(place));" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_state_loc ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_zip_state_loc;" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_lookup_base(CONSTRAINT pk_${state_abbrev}_zip_state_loc_city PRIMARY KEY(zip,state, county, city, statefp)) INHERITS(zip_lookup_base);" ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_lookup_base(zip,state,county,city, statefp) SELECT DISTINCT e.zipl, ''${state_abbrev}'', c.name,p.name,''${state_fips}'' FROM ${data_schema}.${state_abbrev}_edges AS e INNER JOIN tiger.county As c ON (e.countyfp = c.countyfp AND e.statefp = c.statefp AND e.statefp = ''${state_fips}'') INNER JOIN ${data_schema}.${state_abbrev}_faces AS f ON (e.tfidl = f.tfid OR e.tfidr = f.tfid) INNER JOIN ${data_schema}.${state_abbrev}_place As p ON(f.statefp = p.statefp AND f.placefp = p.placefp ) WHERE e.zipl IS NOT NULL;" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_lookup_base ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_zip_lookup_base_citysnd ON ${data_schema}.${state_abbrev}_zip_lookup_base USING btree(soundex(city));" '); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process,columns_exclude ) VALUES(9, 'addr', 'addr', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_least_address ON tiger_data.${state_abbrev}_addr USING btree (least_hn(fromhn,tohn) );" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_tlid_statefp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid, statefp);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_zip ON ${data_schema}.${state_abbrev}_${table_name} USING btree (zip);" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_state(CONSTRAINT pk_${state_abbrev}_zip_state PRIMARY KEY(zip,stusps)) INHERITS(zip_state); " ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_state(zip,stusps,statefp) SELECT DISTINCT zip, ''${state_abbrev}'', ''${state_fips}'' FROM ${data_schema}.${state_abbrev}_${lookup_name} WHERE zip is not null;" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_state ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp','fromarmid', 'toarmid']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process,columns_exclude ) VALUES(9, 'addrfeat', 'addrfeat', false, true, false,true, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp','fromarmid', 'toarmid']); CREATE OR REPLACE FUNCTION loader_generate_nation_script(os text) RETURNS SETOF text AS $BODY$ WITH lu AS (SELECT lookup_name, table_name, pre_load_process,post_load_process, process_order, insert_mode, single_geom_mode, level_nation, level_county, level_state FROM loader_lookuptables WHERE level_nation = true AND load = true) SELECT loader_macro_replace( replace( loader_macro_replace(declare_sect , ARRAY['staging_fold', 'website_root', 'psql', 'data_schema', 'staging_schema'], ARRAY[variables.staging_fold, variables.website_root, platform.psql, variables.data_schema, variables.staging_schema] ), '/', platform.path_sep) || ' ' || -- Nation level files array_to_string( ARRAY(SELECT loader_macro_replace('cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || variables.website_root || '/' || upper(table_name) || '/ --no-parent --relative --recursive --level=1 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(variables.website_root, 'http://', ''),'ftp://','') || '/' || upper(table_name) || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*' || table_name || '.zip ') || ' ' || COALESCE(lu.pre_load_process || E'\n', '') || platform.loader || ' -' || lu.insert_mode || ' -s 4269 -g the_geom ' || CASE WHEN lu.single_geom_mode THEN ' -S ' ELSE ' ' END::text || ' -W "latin1" tl_' || variables.tiger_year || '_us_' || lu.table_name || '.dbf tiger_staging.' || lu.table_name || ' | '::text || platform.psql || COALESCE(E'\n' || lu.post_load_process , '') , ARRAY['loader','table_name', 'lookup_name'], ARRAY[platform.loader, lu.table_name, lu.lookup_name ] ) FROM lu ORDER BY process_order, lookup_name), E'\n') ::text , ARRAY['psql', 'data_schema','staging_schema', 'staging_fold', 'website_root'], ARRAY[platform.psql, variables.data_schema, variables.staging_schema, variables.staging_fold, variables.website_root]) AS shell_code FROM loader_variables As variables CROSS JOIN loader_platform As platform WHERE platform.os = $1 -- generate script for selected platform ; $BODY$ LANGUAGE sql VOLATILE; CREATE OR REPLACE FUNCTION loader_generate_script(param_states text[], os text) RETURNS SETOF text AS $BODY$ SELECT loader_macro_replace( replace( loader_macro_replace(declare_sect , ARRAY['staging_fold', 'state_fold','website_root', 'psql', 'state_abbrev', 'data_schema', 'staging_schema', 'state_fips'], ARRAY[variables.staging_fold, s.state_fold, variables.website_root, platform.psql, s.state_abbrev, variables.data_schema, variables.staging_schema, s.state_fips::text] ), '/', platform.path_sep) || ' ' || -- State level files - if an override website is specified we use that instead of variable one array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/tl_*_' || s.state_fips || '_* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' ||loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || platform.loader || ' -' || lu.insert_mode || ' -s 4269 -g the_geom ' || CASE WHEN lu.single_geom_mode THEN ' -S ' ELSE ' ' END::text || ' -W "latin1" tl_' || variables.tiger_year || '_' || s.state_fips || '_' || lu.table_name || '.dbf tiger_staging.' || lower(s.state_abbrev) || '_' || lu.table_name || ' | '::text || platform.psql || COALESCE(E'\n' || lu.post_load_process , '') , ARRAY['loader','table_name', 'lookup_name'], ARRAY[platform.loader, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_state = true AND load = true ORDER BY process_order, lookup_name), E'\n') ::text -- County Level files || E'\n' || array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/*_' || s.state_fips || '* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) || '/'), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' || loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || COALESCE(county_process_command || E'\n','') || COALESCE(E'\n' ||lu.post_load_process , '') , ARRAY['loader','table_name','lookup_name'], ARRAY[platform.loader || CASE WHEN lu.single_geom_mode THEN ' -S' ELSE ' ' END::text, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_county = true AND load = true ORDER BY process_order, lookup_name), E'\n') ::text , ARRAY['psql', 'data_schema','staging_schema', 'staging_fold', 'state_fold', 'website_root', 'state_abbrev','state_fips'], ARRAY[platform.psql, variables.data_schema, variables.staging_schema, variables.staging_fold, s.state_fold,variables.website_root, s.state_abbrev, s.state_fips::text]) AS shell_code FROM loader_variables As variables CROSS JOIN (SELECT name As state, abbrev As state_abbrev, lpad(st_code::text,2,'0') As state_fips, lpad(st_code::text,2,'0') || '_' || replace(name, ' ', '_') As state_fold FROM state_lookup) As s CROSS JOIN loader_platform As platform WHERE $1 @> ARRAY[state_abbrev::text] -- If state is contained in list of states input generate script for it AND platform.os = $2 -- generate script for selected platform ; $BODY$ LANGUAGE sql VOLATILE; CREATE OR REPLACE FUNCTION loader_load_staged_data(param_staging_table text, param_target_table text, param_columns_exclude text[]) RETURNS integer AS $$ DECLARE var_sql text; var_staging_schema text; var_data_schema text; var_temp text; var_num_records bigint; BEGIN -- Add all the fields except geoid and gid -- Assume all the columns are in same order as target SELECT staging_schema, data_schema INTO var_staging_schema, var_data_schema FROM loader_variables; var_sql := 'INSERT INTO ' || var_data_schema || '.' || quote_ident(param_target_table) || '(' || array_to_string(ARRAY(SELECT quote_ident(column_name::text) FROM information_schema.columns WHERE table_name = param_target_table AND table_schema = var_data_schema AND column_name <> ALL(param_columns_exclude) ), ',') || ') SELECT ' || array_to_string(ARRAY(SELECT quote_ident(column_name::text) FROM information_schema.columns WHERE table_name = param_staging_table AND table_schema = var_staging_schema AND column_name <> ALL( param_columns_exclude) ), ',') ||' FROM ' || var_staging_schema || '.' || param_staging_table || ';'; RAISE NOTICE '%', var_sql; EXECUTE (var_sql); GET DIAGNOSTICS var_num_records = ROW_COUNT; SELECT DropGeometryTable(var_staging_schema,param_staging_table) INTO var_temp; RETURN var_num_records; END; $$ LANGUAGE 'plpgsql' VOLATILE; CREATE OR REPLACE FUNCTION loader_load_staged_data(param_staging_table text, param_target_table text) RETURNS integer AS $$ -- exclude this set list of columns if no exclusion list is specified SELECT loader_load_staged_data($1, $2,(SELECT COALESCE(columns_exclude,ARRAY['gid', 'geoid','cpi','suffix1ce', 'statefp00', 'statefp10', 'countyfp00','countyfp10' ,'tractce00','tractce10', 'blkgrpce00', 'blkgrpce10', 'blockce00', 'blockce10' , 'cousubfp00', 'submcdfp00', 'conctyfp00', 'placefp00', 'aiannhfp00', 'aiannhce00', 'comptyp00', 'trsubfp00', 'trsubce00', 'anrcfp00', 'elsdlea00', 'scsdlea00', 'unsdlea00', 'uace00', 'cd108fp', 'sldust00', 'sldlst00', 'vtdst00', 'zcta5ce00', 'tazce00', 'ugace00', 'puma5ce00','vtdst10','tazce10','uace10','puma5ce10','tazce', 'uace', 'vtdst', 'zcta5ce', 'zcta5ce10', 'puma5ce', 'ugace10','pumace10', 'estatefp', 'ugace']) FROM loader_lookuptables WHERE $2 LIKE '%' || lookup_name)) $$ language 'sql' VOLATILE; COMMIT;������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/create_geocode.sql�������������������������0000644�0000000�0000000�00000005444�12126641624�025310� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: create_geocode.sql 11244 2013-04-02 20:46:12Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2010, 2011 Regina Obe and Leo Hsu -- Copyright (C) 2008 Stephen Frost (et al) -- reintegrated back into PostGIS code base from Steven's git (http://www.snowman.net/git/tiger_geocoder/) -- Copyright Refractions Research -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- Tiger is where we're going to create the functions, but we need -- the PostGIS functions/types which are in public. \i utility/set_search_path.sql; SELECT tiger.SetSearchPathForInstall('tiger'); \i tables/lookup_tables_2011.sql \i geocode_settings.sql --SET search_path TO tiger,public; BEGIN; -- Type used to pass around a normalized address between functions -- This is s bit dangerous since it could potentially drop peoples tables -- TODO: put in logic to check if any tables have norm_addy and don't drop if they do DROP TYPE IF EXISTS norm_addy CASCADE; CREATE TYPE norm_addy AS ( address INTEGER, preDirAbbrev VARCHAR, streetName VARCHAR, streetTypeAbbrev VARCHAR, postDirAbbrev VARCHAR, internal VARCHAR, location VARCHAR, stateAbbrev VARCHAR, zip VARCHAR, parsed BOOLEAN); -- System/General helper functions \i utility/utmzone.sql \i utility/cull_null.sql \i utility/nullable_levenshtein.sql \i utility/levenshtein_ignore_case.sql ---- Address normalizer -- General helpers \i normalize/end_soundex.sql \i normalize/count_words.sql \i normalize/state_extract.sql \i normalize/get_last_words.sql -- Location extraction/normalization helpers \i normalize/location_extract_countysub_exact.sql \i normalize/location_extract_countysub_fuzzy.sql \i normalize/location_extract_place_exact.sql \i normalize/location_extract_place_fuzzy.sql \i normalize/location_extract.sql -- Normalization API, called by geocode mainly. \i normalize/normalize_address.sql \i normalize/pprint_addy.sql -- PAGC normalizer drop in replacement. \i pagc_normalize/pagc_tables.sql \i pagc_normalize/pagc_normalize_address.sql ---- Geocoder functions -- General helpers \i geocode/other_helper_functions.sql \i geocode/rate_attributes.sql \i geocode/includes_address.sql \i geocode/interpolate_from_address.sql -- Actual lookups/geocoder helpers \i geocode/geocode_address.sql \i geocode/geocode_location.sql -- Geocode API, called by user \i geocode/geocode_intersection.sql \i geocode/geocode.sql -- Reverse Geocode API, called by user \i geocode/reverse_geocode.sql \i geocode/census_tracts_functions.sql COMMIT; -- Tiger to PostGIS Topology -- only useable if you have topology installed \i topology/tiger_topology_loader.sql����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/census_loader.sql��������������������������0000644�0000000�0000000�00000026230�12201356363�025177� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: census_loader.sql 11760 2013-08-10 06:25:55Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2010, 2011 Regina Obe and Leo Hsu -- Paragon Corporation -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe and Leo Hsu <lr@pcorp.us> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --SET search_path TO tiger,public; SELECT tiger.SetSearchPathForInstall('tiger'); CREATE OR REPLACE FUNCTION create_census_base_tables() RETURNS text AS $$ DECLARE var_temp text; BEGIN var_temp := tiger.SetSearchPathForInstall('tiger'); IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND column_name = 'tract_id' AND table_name = 'tract') THEN -- census block group/tracts parent tables not created yet or an older version -- drop old if not in use, create new structure DROP TABLE IF EXISTS tiger.tract; CREATE TABLE tract ( gid serial NOT NULL, statefp varchar(2), countyfp varchar(3), tractce varchar(6), tract_id varchar(11) PRIMARY KEY, name varchar(7), namelsad varchar(20), mtfcc varchar(5), funcstat varchar(1), aland double precision, awater double precision, intptlat varchar(11), intptlon varchar(12), the_geom geometry, CONSTRAINT enforce_dims_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_geom CHECK (st_srid(the_geom) = 4269) ); COMMENT ON TABLE tiger.tract IS 'census tracts - $Id: census_loader.sql 11760 2013-08-10 06:25:55Z robe $'; DROP TABLE IF EXISTS tiger.tabblock; CREATE TABLE tabblock ( gid serial NOT NULL, statefp varchar(2), countyfp varchar(3), tractce varchar(6), blockce varchar(4), tabblock_id varchar(16) PRIMARY KEY, name varchar(20), mtfcc varchar(5), ur varchar(1), uace varchar(5), funcstat varchar(1), aland double precision, awater double precision, intptlat varchar(11), intptlon varchar(12), the_geom geometry, CONSTRAINT enforce_dims_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_geom CHECK (st_srid(the_geom) = 4269) ); COMMENT ON TABLE tiger.tabblock IS 'census blocks - $Id: census_loader.sql 11760 2013-08-10 06:25:55Z robe $'; DROP TABLE IF EXISTS tiger.bg; CREATE TABLE bg ( gid serial NOT NULL, statefp varchar(2), countyfp varchar(3), tractce varchar(6), blkgrpce varchar(1), bg_id varchar(12) PRIMARY KEY, namelsad varchar(13), mtfcc varchar(5), funcstat varchar(1), aland double precision, awater double precision, intptlat varchar(11), intptlon varchar(12), the_geom geometry, CONSTRAINT enforce_dims_geom CHECK (st_ndims(the_geom) = 2), CONSTRAINT enforce_geotype_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL), CONSTRAINT enforce_srid_geom CHECK (st_srid(the_geom) = 4269) ); COMMENT ON TABLE tiger.bg IS 'block groups'; RETURN 'Done creating census tract base tables - $Id: census_loader.sql 11760 2013-08-10 06:25:55Z robe $'; END IF; IF EXISTS(SELECT * FROM information_schema.columns WHERE table_schema = 'tiger' AND column_name = 'tabblock_id' AND table_name = 'tabblock' AND character_maximum_length < 16) THEN -- size of name and tabblock_id fields need to be increased ALTER TABLE tiger.tabblock ALTER COLUMN name TYPE varchar(20); ALTER TABLE tiger.tabblock ALTER COLUMN tabblock_id TYPE varchar(16); RAISE NOTICE 'Size of tabblock_id and name are being incrreased'; END IF; RETURN 'Tables already present'; END $$ language 'plpgsql'; DROP FUNCTION IF EXISTS loader_generate_census(text[], text); CREATE OR REPLACE FUNCTION loader_generate_census_script(param_states text[], os text) RETURNS SETOF text AS $$ SELECT create_census_base_tables(); SELECT loader_macro_replace( replace( loader_macro_replace(declare_sect , ARRAY['staging_fold', 'state_fold','website_root', 'psql', 'state_abbrev', 'data_schema', 'staging_schema', 'state_fips'], ARRAY[variables.staging_fold, s.state_fold, variables.website_root, platform.psql, s.state_abbrev, variables.data_schema, variables.staging_schema, s.state_fips::text] ), '/', platform.path_sep) || ' ' || -- State level files - if an override website is specified we use that instead of variable one array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/*_' || s.state_fips || '* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' ||loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || platform.loader || ' -' || lu.insert_mode || ' -s 4269 -g the_geom ' || CASE WHEN lu.single_geom_mode THEN ' -S ' ELSE ' ' END::text || ' -W "latin1" tl_' || variables.tiger_year || '_' || s.state_fips || '_' || lu.table_name || '.dbf tiger_staging.' || lower(s.state_abbrev) || '_' || lu.table_name || ' | '::text || platform.psql || COALESCE(E'\n' || lu.post_load_process , '') , ARRAY['loader','table_name', 'lookup_name'], ARRAY[platform.loader, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_state = true AND load = true AND lookup_name IN('tract','bg','tabblock') ORDER BY process_order, lookup_name), E'\n') ::text -- County Level files || E'\n' || array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/*_' || s.state_fips || '* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) || '/'), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' || loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || COALESCE(county_process_command || E'\n','') || COALESCE(E'\n' ||lu.post_load_process , '') , ARRAY['loader','table_name','lookup_name'], ARRAY[platform.loader || CASE WHEN lu.single_geom_mode THEN ' -S' ELSE ' ' END::text, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_county = true AND load = true AND lookup_name IN('tract','bg','tabblock') ORDER BY process_order, lookup_name), E'\n') ::text , ARRAY['psql', 'data_schema','staging_schema', 'staging_fold', 'state_fold', 'website_root', 'state_abbrev','state_fips'], ARRAY[platform.psql, variables.data_schema, variables.staging_schema, variables.staging_fold, s.state_fold,variables.website_root, s.state_abbrev, s.state_fips::text]) AS shell_code FROM loader_variables As variables CROSS JOIN (SELECT name As state, abbrev As state_abbrev, lpad(st_code::text,2,'0') As state_fips, lpad(st_code::text,2,'0') || '_' || replace(name, ' ', '_') As state_fold FROM state_lookup) As s CROSS JOIN loader_platform As platform WHERE $1 @> ARRAY[state_abbrev::text] -- If state is contained in list of states input generate script for it AND platform.os = $2 -- generate script for selected platform ; $$ LANGUAGE sql VOLATILE; --update with census tract loading logic DELETE FROM loader_lookuptables WHERE lookup_name IN('tract','tabblock','bg'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude ) VALUES(10, 'tract', 'tract', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (tract_id) ) INHERITS(tiger.${lookup_name}); " ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO tract_id; SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); " ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "VACUUM ANALYZE ${data_schema}.${state_abbrev}_${lookup_name};" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');"', ARRAY['gid']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude ) VALUES(11, 'tabblock', 'tabblock', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (tabblock_id)) INHERITS(tiger.${lookup_name});" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO tabblock_id; SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}''), ''{gid, statefp10, countyfp10, tractce10, blockce10,suffix1ce,blockce,tractce}''::text[]); " ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude ) VALUES(12, 'bg', 'bg', true,false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (bg_id)) INHERITS(tiger.${lookup_name});" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO bg_id; SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); " ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid']); SELECT create_census_base_tables(); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/upgrade_geocoder.sh������������������������0000755�0000000�0000000�00000000732�12217742511�025465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # $Id: upgrade_geocoder.sh 11969 2013-09-23 04:36:25Z robe $ export PGPORT=5432 export PGHOST=localhost export PGUSER=postgres export PGPASSWORD=yourpasswordhere THEDB=geocoder PSQL_CMD=/usr/bin/psql PGCONTRIB=/usr/share/postgresql/contrib ${PSQL_CMD} -d "${THEDB}" -f "upgrade_geocode.sql" #unremark the loader line to update your loader scripts #note this wipes out your custom settings in loader_* tables #${PSQL_CMD} -d "${THEDB}" -f "tiger_loader_2013.sql"��������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/tiger_loader_2013.sql����������������������0000644�0000000�0000000�00000074447�12222357134�025473� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: tiger_loader_2012.sql 11850 2013-08-22 04:36:09Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2010, 2011, 2012 Regina Obe and Leo Hsu -- Paragon Corporation -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe and Leo Hsu <lr@pcorp.us> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SELECT tiger.SetSearchPathForInstall('tiger'); BEGIN; CREATE OR REPLACE FUNCTION loader_macro_replace(param_input text, param_keys text[],param_values text[]) RETURNS text AS $$ DECLARE var_result text = param_input; DECLARE var_count integer = array_upper(param_keys,1); BEGIN FOR i IN 1..var_count LOOP var_result := replace(var_result, '${' || param_keys[i] || '}', param_values[i]); END LOOP; return var_result; END; $$ LANGUAGE 'plpgsql' IMMUTABLE COST 100; -- Helper function that generates script to drop all tables in a particular schema for a particular table -- This is useful in case you need to reload a state CREATE OR REPLACE FUNCTION drop_state_tables_generate_script(param_state text, param_schema text DEFAULT 'tiger_data') RETURNS text AS $$ SELECT array_to_string(array_agg('DROP TABLE ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ';'),E'\n') FROM (SELECT * FROM information_schema.tables WHERE table_schema = $2 AND table_name like lower($1) || '_%' ORDER BY table_name) AS foo; ; $$ LANGUAGE sql VOLATILE; -- Helper function that generates script to drop all nation tables (county, state) in a particular schema -- This is useful for loading 2011 because state and county tables aren't broken out into separate state files DROP FUNCTION IF EXISTS drop_national_tables_generate_script(text); CREATE OR REPLACE FUNCTION drop_nation_tables_generate_script(param_schema text DEFAULT 'tiger_data') RETURNS text AS $$ SELECT array_to_string(array_agg('DROP TABLE ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ';'),E'\n') FROM (SELECT * FROM information_schema.tables WHERE table_schema = $1 AND (table_name ~ E'^[a-z]{2}\_county' or table_name ~ E'^[a-z]{2}\_state' or table_name = 'state_all' or table_name LIKE 'county_all%') ORDER BY table_name) AS foo; ; $$ LANGUAGE sql VOLATILE; DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'loader_platform' AND table_schema = 'tiger') THEN CREATE TABLE loader_platform(os varchar(50) PRIMARY KEY, declare_sect text, pgbin text, wget text, unzip_command text, psql text, path_sep text, loader text, environ_set_command text, county_process_command text); END IF; END $$ LANGUAGE 'plpgsql'; DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = 'tiger_data') THEN CREATE SCHEMA tiger_data; END IF; END $$ LANGUAGE 'plpgsql'; DELETE FROM loader_platform WHERE os IN ('sh', 'windows'); GRANT SELECT ON TABLE loader_platform TO public; INSERT INTO loader_platform(os, wget, pgbin, declare_sect, unzip_command, psql,path_sep,loader, environ_set_command, county_process_command) VALUES('windows', '%WGETTOOL%', '%PGBIN%', E'set TMPDIR=${staging_fold}\\temp\\ set UNZIPTOOL="C:\\Program Files\\7-Zip\\7z.exe" set WGETTOOL="C:\\wget\\wget.exe" set PGBIN=C:\\Program Files\\PostgreSQL\\9.2\\bin\\ set PGPORT=5432 set PGHOST=localhost set PGUSER=postgres set PGPASSWORD=yourpasswordhere set PGDATABASE=geocoder set PSQL="%PGBIN%psql" set SHP2PGSQL="%PGBIN%shp2pgsql" cd ${staging_fold} ', E'del %TMPDIR%\\*.* /Q %PSQL% -c "DROP SCHEMA IF EXISTS ${staging_schema} CASCADE;" %PSQL% -c "CREATE SCHEMA ${staging_schema};" %PSQL% -c "DO language ''plpgsql'' $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.schemata WHERE schema_name = ''${data_schema}'' ) THEN CREATE SCHEMA ${data_schema}; END IF; END $$" for /r %%z in (*.zip) do %UNZIPTOOL% e %%z -o%TMPDIR% cd %TMPDIR%', E'%PSQL%', E'\\', E'%SHP2PGSQL%', 'set ', 'for /r %%z in (*${table_name}.dbf) do (${loader} -D -s 4269 -g the_geom -W "latin1" %%z tiger_staging.${state_abbrev}_${table_name} | ${psql} & ${psql} -c "SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}''));")' ); INSERT INTO loader_platform(os, wget, pgbin, declare_sect, unzip_command, psql, path_sep, loader, environ_set_command, county_process_command) VALUES('sh', 'wget', '', E'TMPDIR="${staging_fold}/temp/" UNZIPTOOL=unzip WGETTOOL="/usr/bin/wget" export PGBIN=/usr/pgsql-9.0/bin export PGPORT=5432 export PGHOST=localhost export PGUSER=postgres export PGPASSWORD=yourpasswordhere export PGDATABASE=geocoder PSQL=${PGBIN}/psql SHP2PGSQL=${PGBIN}/shp2pgsql cd ${staging_fold} ', E'rm -f ${TMPDIR}/*.* ${PSQL} -c "DROP SCHEMA IF EXISTS ${staging_schema} CASCADE;" ${PSQL} -c "CREATE SCHEMA ${staging_schema};" for z in *.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done for z in */*.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done cd $TMPDIR;\n', '${PSQL}', '/', '${SHP2PGSQL}', 'export ', 'for z in *${table_name}.dbf; do ${loader} -D -s 4269 -g the_geom -W "latin1" $z ${staging_schema}.${state_abbrev}_${table_name} | ${psql} ${PSQL} -c "SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}''));" done'); -- variables table DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'loader_variables' AND table_schema = 'tiger') THEN CREATE TABLE loader_variables(tiger_year varchar(4) PRIMARY KEY, website_root text, staging_fold text, data_schema text, staging_schema text); END IF; END $$ LANGUAGE 'plpgsql'; TRUNCATE TABLE loader_variables; INSERT INTO loader_variables(tiger_year, website_root , staging_fold, data_schema, staging_schema) VALUES('2013', 'ftp://ftp2.census.gov/geo/tiger/TIGER2013', '/gisdata', 'tiger_data', 'tiger_staging'); GRANT SELECT ON TABLE loader_variables TO public; DO $$ BEGIN IF NOT EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'loader_lookuptables' AND table_schema = 'tiger') THEN CREATE TABLE loader_lookuptables(process_order integer NOT NULL DEFAULT 1000, lookup_name text primary key, table_name text, single_mode boolean NOT NULL DEFAULT true, load boolean NOT NULL DEFAULT true, level_county boolean NOT NULL DEFAULT false, level_state boolean NOT NULL DEFAULT false, level_nation boolean NOT NULL DEFAULT false, post_load_process text, single_geom_mode boolean DEFAULT false, insert_mode char(1) NOT NULL DEFAULT 'c', pre_load_process text,columns_exclude text[], website_root_override text); END IF; END $$ LANGUAGE 'plpgsql'; TRUNCATE TABLE loader_lookuptables; GRANT SELECT ON TABLE loader_lookuptables TO public; -- put in explanatory comments of what each column is for COMMENT ON COLUMN loader_lookuptables.lookup_name IS 'This is the table name to inherit from and suffix of resulting output table -- how the table will be named -- edges here would mean -- ma_edges , pa_edges etc. except in the case of national tables. national level tables have no prefix'; COMMENT ON COLUMN loader_lookuptables.level_nation IS 'These are tables that contain all data for the whole US so there is just a single file'; COMMENT ON COLUMN loader_lookuptables.table_name IS 'suffix of the tables to load e.g. edges would load all tables like *edges.dbf(shp) -- so tl_2010_42129_edges.dbf . '; COMMENT ON COLUMN loader_lookuptables.load IS 'Whether or not to load the table. For states and zcta5 (you may just want to download states10, zcta510 nationwide file manually) load your own into a single table that inherits from tiger.states, tiger.zcta5. You''ll get improved performance for some geocoding cases.'; COMMENT ON COLUMN loader_lookuptables.columns_exclude IS 'List of columns to exclude as an array. This is excluded from both input table and output table and rest of columns remaining are assumed to be in same order in both tables. gid, geoid,cpi,suffix1ce are excluded if no columns are specified.'; COMMENT ON COLUMN loader_lookuptables.website_root_override IS 'Path to use for wget instead of that specified in year table. Needed currently for zcta where they release that only for 2000 and 2010'; INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, pre_load_process, post_load_process) VALUES(2, 'county_all', 'county', true, false, false, true, false, '${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}(CONSTRAINT pk_${data_schema}_${lookup_name} PRIMARY KEY (cntyidfp),CONSTRAINT uidx_${data_schema}_${lookup_name}_gid UNIQUE (gid) ) INHERITS(county); " ', '${psql} -c "ALTER TABLE ${staging_schema}.${table_name} RENAME geoid TO cntyidfp; SELECT loader_load_staged_data(lower(''${table_name}''), lower(''${lookup_name}''));" ${psql} -c "CREATE INDEX ${data_schema}_${table_name}_the_geom_gist ON ${data_schema}.${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE UNIQUE INDEX uidx_${data_schema}_${lookup_name}_statefp_countyfp ON ${data_schema}.${lookup_name} USING btree(statefp,countyfp);" ${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}_lookup ( CONSTRAINT pk_${lookup_name}_lookup PRIMARY KEY (st_code, co_code)) INHERITS (county_lookup);" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name};" ${psql} -c "INSERT INTO ${data_schema}.${lookup_name}_lookup(st_code, state, co_code, name) SELECT CAST(s.statefp as integer), s.abbrev, CAST(c.countyfp as integer), c.name FROM ${data_schema}.${lookup_name} As c INNER JOIN state_lookup As s ON s.statefp = c.statefp;" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name}_lookup;" '); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(1, 'state_all', 'state', true, false, false,true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${lookup_name}(CONSTRAINT pk_${lookup_name} PRIMARY KEY (statefp),CONSTRAINT uidx_${lookup_name}_stusps UNIQUE (stusps), CONSTRAINT uidx_${lookup_name}_gid UNIQUE (gid) ) INHERITS(state); "', '${psql} -c "SELECT loader_load_staged_data(lower(''${table_name}''), lower(''${lookup_name}'')); " ${psql} -c "CREATE INDEX ${data_schema}_${lookup_name}_the_geom_gist ON ${data_schema}.${lookup_name} USING gist(the_geom);" ${psql} -c "VACUUM ANALYZE ${data_schema}.${lookup_name}"' ); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(3, 'place', 'place', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (plcidfp) ) INHERITS(place);" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO plcidfp;SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid);" ${psql} -c "CREATE INDEX idx_${state_abbrev}_${lookup_name}_soundex_name ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (soundex(name));" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');"' ); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(4, 'cousub', 'cousub', true, false, true,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (cosbidfp), CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid)) INHERITS(${lookup_name});" ', '${psql} -c "ALTER TABLE ${staging_schema}.${state_abbrev}_${table_name} RENAME geoid TO cosbidfp;SELECT loader_load_staged_data(lower(''${state_abbrev}_${table_name}''), lower(''${state_abbrev}_${lookup_name}'')); ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_countyfp ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree(countyfp);"'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, level_nation, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude, website_root_override ) -- this is a bit of a lie that its county. It's really state but works better with column routine VALUES(4, 'zcta5', 'zcta510', true,true, false,false, false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (zcta5ce,statefp), CONSTRAINT uidx_${state_abbrev}_${lookup_name}_gid UNIQUE (gid)) INHERITS(${lookup_name});" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${lookup_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);"' , ARRAY['gid','geoid','geoid10'], 'ftp://ftp2.census.gov/geo/tiger/TIGER2010/ZCTA5/2010'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(6, 'faces', 'faces', true, true, false,false, 'c', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${lookup_name} PRIMARY KEY (gid)) INHERITS(${lookup_name});" ', '${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${table_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${lookup_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tfid ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (tfid);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_countyfp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (countyfp);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"'); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process, columns_exclude ) VALUES(7, 'featnames', 'featnames', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${table_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_snd_name ON ${data_schema}.${state_abbrev}_${table_name} USING btree (soundex(name));" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_lname ON ${data_schema}.${state_abbrev}_${table_name} USING btree (lower(name));" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tlid_statefp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid,statefp);" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process ) VALUES(8, 'edges', 'edges', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${table_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${table_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tlid ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}tfidr ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tfidr);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_tfidl ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tfidl);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_countyfp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (countyfp);" ${psql} -c "CREATE INDEX ${data_schema}_${state_abbrev}_${table_name}_the_geom_gist ON ${data_schema}.${state_abbrev}_${table_name} USING gist(the_geom);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_zipl ON ${data_schema}.${state_abbrev}_${lookup_name} USING btree (zipl);" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_state_loc(CONSTRAINT pk_${state_abbrev}_zip_state_loc PRIMARY KEY(zip,stusps,place)) INHERITS(zip_state_loc);" ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_state_loc(zip,stusps,statefp,place) SELECT DISTINCT e.zipl, ''${state_abbrev}'', ''${state_fips}'', p.name FROM ${data_schema}.${state_abbrev}_edges AS e INNER JOIN ${data_schema}.${state_abbrev}_faces AS f ON (e.tfidl = f.tfid OR e.tfidr = f.tfid) INNER JOIN ${data_schema}.${state_abbrev}_place As p ON(f.statefp = p.statefp AND f.placefp = p.placefp ) WHERE e.zipl IS NOT NULL;" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_zip_state_loc_place ON ${data_schema}.${state_abbrev}_zip_state_loc USING btree(soundex(place));" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_state_loc ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_zip_state_loc;" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_lookup_base(CONSTRAINT pk_${state_abbrev}_zip_state_loc_city PRIMARY KEY(zip,state, county, city, statefp)) INHERITS(zip_lookup_base);" ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_lookup_base(zip,state,county,city, statefp) SELECT DISTINCT e.zipl, ''${state_abbrev}'', c.name,p.name,''${state_fips}'' FROM ${data_schema}.${state_abbrev}_edges AS e INNER JOIN tiger.county As c ON (e.countyfp = c.countyfp AND e.statefp = c.statefp AND e.statefp = ''${state_fips}'') INNER JOIN ${data_schema}.${state_abbrev}_faces AS f ON (e.tfidl = f.tfid OR e.tfidr = f.tfid) INNER JOIN ${data_schema}.${state_abbrev}_place As p ON(f.statefp = p.statefp AND f.placefp = p.placefp ) WHERE e.zipl IS NOT NULL;" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_lookup_base ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_zip_lookup_base_citysnd ON ${data_schema}.${state_abbrev}_zip_lookup_base USING btree(soundex(city));" '); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process,columns_exclude ) VALUES(9, 'addr', 'addr', true, true, false,false, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${lookup_name}_least_address ON tiger_data.${state_abbrev}_addr USING btree (least_hn(fromhn,tohn) );" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_tlid_statefp ON ${data_schema}.${state_abbrev}_${table_name} USING btree (tlid, statefp);" ${psql} -c "CREATE INDEX idx_${data_schema}_${state_abbrev}_${table_name}_zip ON ${data_schema}.${state_abbrev}_${table_name} USING btree (zip);" ${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_zip_state(CONSTRAINT pk_${state_abbrev}_zip_state PRIMARY KEY(zip,stusps)) INHERITS(zip_state); " ${psql} -c "INSERT INTO ${data_schema}.${state_abbrev}_zip_state(zip,stusps,statefp) SELECT DISTINCT zip, ''${state_abbrev}'', ''${state_fips}'' FROM ${data_schema}.${state_abbrev}_${lookup_name} WHERE zip is not null;" ${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_zip_state ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp','fromarmid', 'toarmid']); INSERT INTO loader_lookuptables(process_order, lookup_name, table_name, load, level_county, level_state, single_geom_mode, insert_mode, pre_load_process, post_load_process,columns_exclude ) VALUES(9, 'addrfeat', 'addrfeat', false, true, false,true, 'a', '${psql} -c "CREATE TABLE ${data_schema}.${state_abbrev}_${lookup_name}(CONSTRAINT pk_${state_abbrev}_${table_name} PRIMARY KEY (gid)) INHERITS(${table_name});ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ALTER COLUMN statefp SET DEFAULT ''${state_fips}'';" ', '${psql} -c "ALTER TABLE ${data_schema}.${state_abbrev}_${lookup_name} ADD CONSTRAINT chk_statefp CHECK (statefp = ''${state_fips}'');" ${psql} -c "vacuum analyze ${data_schema}.${state_abbrev}_${lookup_name};"', ARRAY['gid','statefp','fromarmid', 'toarmid']); CREATE OR REPLACE FUNCTION loader_generate_nation_script(os text) RETURNS SETOF text AS $BODY$ WITH lu AS (SELECT lookup_name, table_name, pre_load_process,post_load_process, process_order, insert_mode, single_geom_mode, level_nation, level_county, level_state FROM loader_lookuptables WHERE level_nation = true AND load = true) SELECT loader_macro_replace( replace( loader_macro_replace(declare_sect , ARRAY['staging_fold', 'website_root', 'psql', 'data_schema', 'staging_schema'], ARRAY[variables.staging_fold, variables.website_root, platform.psql, variables.data_schema, variables.staging_schema] ), '/', platform.path_sep) || ' ' || -- Nation level files array_to_string( ARRAY(SELECT loader_macro_replace('cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || variables.website_root || '/' || upper(table_name) || '/ --no-parent --relative --recursive --level=1 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(variables.website_root, 'http://', ''),'ftp://','') || '/' || upper(table_name) || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*' || table_name || '.zip ') || ' ' || COALESCE(lu.pre_load_process || E'\n', '') || platform.loader || ' -' || lu.insert_mode || ' -s 4269 -g the_geom ' || CASE WHEN lu.single_geom_mode THEN ' -S ' ELSE ' ' END::text || ' -W "latin1" tl_' || variables.tiger_year || '_us_' || lu.table_name || '.dbf tiger_staging.' || lu.table_name || ' | '::text || platform.psql || COALESCE(E'\n' || lu.post_load_process , '') , ARRAY['loader','table_name', 'lookup_name'], ARRAY[platform.loader, lu.table_name, lu.lookup_name ] ) FROM lu ORDER BY process_order, lookup_name), E'\n') ::text , ARRAY['psql', 'data_schema','staging_schema', 'staging_fold', 'website_root'], ARRAY[platform.psql, variables.data_schema, variables.staging_schema, variables.staging_fold, variables.website_root]) AS shell_code FROM loader_variables As variables CROSS JOIN loader_platform As platform WHERE platform.os = $1 -- generate script for selected platform ; $BODY$ LANGUAGE sql VOLATILE; CREATE OR REPLACE FUNCTION loader_generate_script(param_states text[], os text) RETURNS SETOF text AS $BODY$ SELECT loader_macro_replace( replace( loader_macro_replace(declare_sect , ARRAY['staging_fold', 'state_fold','website_root', 'psql', 'state_abbrev', 'data_schema', 'staging_schema', 'state_fips'], ARRAY[variables.staging_fold, s.state_fold, variables.website_root, platform.psql, s.state_abbrev, variables.data_schema, variables.staging_schema, s.state_fips::text] ), '/', platform.path_sep) || ' ' || -- State level files - if an override website is specified we use that instead of variable one array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/tl_*_' || s.state_fips || '_* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' ||loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || platform.loader || ' -' || lu.insert_mode || ' -s 4269 -g the_geom ' || CASE WHEN lu.single_geom_mode THEN ' -S ' ELSE ' ' END::text || ' -W "latin1" tl_' || variables.tiger_year || '_' || s.state_fips || '_' || lu.table_name || '.dbf tiger_staging.' || lower(s.state_abbrev) || '_' || lu.table_name || ' | '::text || platform.psql || COALESCE(E'\n' || lu.post_load_process , '') , ARRAY['loader','table_name', 'lookup_name'], ARRAY[platform.loader, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_state = true AND load = true ORDER BY process_order, lookup_name), E'\n') ::text -- County Level files || E'\n' || array_to_string( ARRAY(SELECT 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || ' ' || platform.wget || ' ' || COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) ) || '/*_' || s.state_fips || '* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html ' || 'cd ' || replace(variables.staging_fold,'/', platform.path_sep) || '/' || replace(replace(COALESCE(lu.website_root_override,variables.website_root || '/' || upper(table_name) || '/'), 'http://', ''),'ftp://','') || ' ' || replace(platform.unzip_command, '*.zip', 'tl_*_' || s.state_fips || '*_' || table_name || '.zip ') || ' ' || loader_macro_replace(COALESCE(lu.pre_load_process || E'\n', '') || COALESCE(county_process_command || E'\n','') || COALESCE(E'\n' ||lu.post_load_process , '') , ARRAY['loader','table_name','lookup_name'], ARRAY[platform.loader || CASE WHEN lu.single_geom_mode THEN ' -S' ELSE ' ' END::text, lu.table_name, lu.lookup_name ]) FROM loader_lookuptables AS lu WHERE level_county = true AND load = true ORDER BY process_order, lookup_name), E'\n') ::text , ARRAY['psql', 'data_schema','staging_schema', 'staging_fold', 'state_fold', 'website_root', 'state_abbrev','state_fips'], ARRAY[platform.psql, variables.data_schema, variables.staging_schema, variables.staging_fold, s.state_fold,variables.website_root, s.state_abbrev, s.state_fips::text]) AS shell_code FROM loader_variables As variables CROSS JOIN (SELECT name As state, abbrev As state_abbrev, lpad(st_code::text,2,'0') As state_fips, lpad(st_code::text,2,'0') || '_' || replace(name, ' ', '_') As state_fold FROM state_lookup) As s CROSS JOIN loader_platform As platform WHERE $1 @> ARRAY[state_abbrev::text] -- If state is contained in list of states input generate script for it AND platform.os = $2 -- generate script for selected platform ; $BODY$ LANGUAGE sql VOLATILE; CREATE OR REPLACE FUNCTION loader_load_staged_data(param_staging_table text, param_target_table text, param_columns_exclude text[]) RETURNS integer AS $$ DECLARE var_sql text; var_staging_schema text; var_data_schema text; var_temp text; var_num_records bigint; BEGIN -- Add all the fields except geoid and gid -- Assume all the columns are in same order as target SELECT staging_schema, data_schema INTO var_staging_schema, var_data_schema FROM loader_variables; var_sql := 'INSERT INTO ' || var_data_schema || '.' || quote_ident(param_target_table) || '(' || array_to_string(ARRAY(SELECT quote_ident(column_name::text) FROM information_schema.columns WHERE table_name = param_target_table AND table_schema = var_data_schema AND column_name <> ALL(param_columns_exclude) ), ',') || ') SELECT ' || array_to_string(ARRAY(SELECT quote_ident(column_name::text) FROM information_schema.columns WHERE table_name = param_staging_table AND table_schema = var_staging_schema AND column_name <> ALL( param_columns_exclude) ), ',') ||' FROM ' || var_staging_schema || '.' || param_staging_table || ';'; RAISE NOTICE '%', var_sql; EXECUTE (var_sql); GET DIAGNOSTICS var_num_records = ROW_COUNT; SELECT DropGeometryTable(var_staging_schema,param_staging_table) INTO var_temp; RETURN var_num_records; END; $$ LANGUAGE 'plpgsql' VOLATILE; CREATE OR REPLACE FUNCTION loader_load_staged_data(param_staging_table text, param_target_table text) RETURNS integer AS $$ -- exclude this set list of columns if no exclusion list is specified SELECT loader_load_staged_data($1, $2,(SELECT COALESCE(columns_exclude,ARRAY['gid', 'geoid','cpi','suffix1ce', 'statefp00', 'statefp10', 'countyfp00','countyfp10' ,'tractce00','tractce10', 'blkgrpce00', 'blkgrpce10', 'blockce00', 'blockce10' , 'cousubfp00', 'submcdfp00', 'conctyfp00', 'placefp00', 'aiannhfp00', 'aiannhce00', 'comptyp00', 'trsubfp00', 'trsubce00', 'anrcfp00', 'elsdlea00', 'scsdlea00', 'unsdlea00', 'uace00', 'cd108fp', 'sldust00', 'sldlst00', 'vtdst00', 'zcta5ce00', 'tazce00', 'ugace00', 'puma5ce00','vtdst10','tazce10','uace10','puma5ce10','tazce', 'uace', 'vtdst', 'zcta5ce', 'zcta5ce10', 'puma5ce', 'ugace10','pumace10', 'estatefp', 'ugace']) FROM loader_lookuptables WHERE $2 LIKE '%' || lookup_name)) $$ language 'sql' VOLATILE; COMMIT;�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/legacy_import/�����������������������������0000755�0000000�0000000�00000000000�12317530606�024465� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/legacy_import/tiger2008/�������������������0000755�0000000�0000000�00000000000�12315456222�026110� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������././@LongLink���������������������������������������������������������������������������������������0000000�0000000�0000000�00000000146�00000000000�011566� L����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/legacy_import/tiger2008/import_tiger_shps.sh���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/legacy_import/tiger2008/import_tiger_shps.s0000755�0000000�0000000�00000032065�11722777314�032057� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash shopt -s nullglob # This is the root directory of the TIGER data. BASE="TIGER2008" # This is the set base specified by Census SETBASE="tl_2008" # This is the schema prefix, all schemas will be created using this prefix. SCHEMA_PREFIX="tiger" # Skip Census 2000 data if there is current data? SKIP00="false" # First, handle the national data TMPDIR=`mktemp -d tiger_tmpXXXX` # SRID to load the data with SRID=4269 DEFAULT_SRID=4269 # Host to connect to if [ -z "${PGHOST}" ]; then HOST="localhost" else HOST=${PGHOST} fi # Database to use if [ -z "${PGDATABASE}" ];then DB="tiger" else DB=${PGDATABASE} fi # postgres username if [ -z ${PGUSER} ]; then DBUSER=`whoami` else DBUSER=${PGUSER} fi # postgres port if [ -z ${PGPORT} ]; then DBPORT=5432 else DBPORT=${PGPORT} fi # rm command RM="/bin/rm" # PSQL location PSQL="psql" # Encoding to use ENCODING="LATIN1" # If we are processing national-level data NATIONAL="false" # If we are processing state-level data STATELVL="true" # If we are processing a specific state STATES='' # If we are processing county-level data COUNTYLVL="true" # If we are processing a specific county COUNTIES='*' # If we are dropping tables before loading them DROP="false" # If we are dropping the schema before loading DROP_SCHEMA="false" # how verbose DEBUG='false' QUIET='false' function table_from_filename () { local FILE="$1" TBL=`basename $FILE .shp` TBL=`basename ${TBL} .dbf` TBL=`echo ${TBL} | cut -d_ -f4` } function error () { echo '' >&2 echo "$1" >&2 echo '' >&2 } function debug () { if [ ${DEBUG} = "true" ]; then echo "\* $@" >&2 fi } function note () { if [ ! ${QUIET} = 'true' ]; then echo "$@" fi } function unzip_files_matching () { local PAT=$1 local ZIPFILES="${PAT}*.zip" if [ -z "${ZIPFILES}" ]; then error "$BASE/${FILEBASE}_${NATLAYERS}.zip did not match anything!" else for zipfile in ${ZIPFILES}; do local BASENAME=`basename $zipfile .zip` if [ ${SKIP00} = 'true' ]; then echo ${BASENAME}| egrep -q '00$' if [ $? -eq 0 ]; then continue fi fi note "Unzipping $BASENAME..." unzip -q -d $TMPDIR $zipfile done fi } function reproject () { FILE="$1" local DIRNAME=`dirname ${FILE}` local BASE=`basename ${FILE}` SRID="$2" which ogr2ogr > /dev/null 2>&1 if [ $? -ne 0 ]; then error "ogr2ogr not found. You may not specify -r" exit 1 fi NEWFILE="${DIRNAME}/${SRID}_${BASE}" ogr2ogr \ -overwrite -t_srs "EPSG:${SRID}" \ -f 'ESRI Shapefile' \ "${NEWFILE}" "${FILE}" if [ $? -ne 0 ]; then error "error reprojecting file ${FILE} into ${NEWFILE}" exit 1; fi } function addcols () { local SCHEMA=$1 local TABLE=$2 local FIPS=`echo ${SCHEMA} | awk -F_ '/_[0-9][0-9]$/ {print $NF}'` if [ -z "${FIPS}" ]; then error "cannot find fips code for ${SCHEMA} - that is probably not good" return 1 fi echo ${TABLE}| egrep -q '00$' if [ $? -eq 0 ]; then STATEFP='statefp00' else STATEFP='statefp' fi # add statefp where needed ${PSQL_CMD} -t -c "\d ${SCHEMA}.${TABLE}"| egrep -q "^ +${STATEFP} " if [ $? -eq 1 ]; then ${PSQL_CMD_NULL} -c "ALTER TABLE ${SCHEMA}.${TABLE} ADD COLUMN ${STATEFP} varchar(2) not null DEFAULT ('${FIPS}');" fi # add statefp check everywhere ${PSQL_CMD_NULL} -c "ALTER TABLE ${SCHEMA}.${TABLE} ADD CHECK (${STATEFP} = '${FIPS}');" #${PSQL_CMD_NULL} -c "CREATE INDEX ${TABLE}_${STATEFP}_idx ON ${SCHEMA}.${TABLE} USING btree($STATEFP);" } function loadshp () { local FILE="$1" local TABLE="$2" local BASESHP=`basename $FILE .shp` local DROPTBL="" local CMD_EXTRAS='' local NEWFILE='' if [ "$DROP" = "true" ]; then DROPTBL="-d" fi note Loading ${FILE} into ${SCHEMA}.${TABLE} if [ "${DEBUG}" = 'true' ]; then : else CMD_EXTRAS='' fi if [ ${DEFAULT_SRID} = ${SRID} ]; then NEWFILE=${FILE} else reproject "${FILE}" ${SRID} note "using reprojected file: ${NEWFILE}" fi shp2pgsql \ $DROPTBL \ -I \ -s $SRID \ -W ${ENCODING} \ "${NEWFILE}" \ "${SCHEMA}.${TABLE}"\ ${CMD_EXTRAS} \ | (echo set client_min_messages=fatal\; ;cat -) \ | ${PSQL_CMD_NULL} \ | egrep -v '^(INSERT INTO|BEGIN;|END;)' # you really don't want to see a zillion insert statements addcols "$SCHEMA" "$TABLE" } function loaddbf () { local FILE="$1" local TABLE="$2" local BASESHP=`basename $FILE .dbf` local DROPTBL="" if [ "$DROP" = "true" ]; then DROPTBL="-d" fi note Loading ${FILE} into ${SCHEMA}.${TABLE} shp2pgsql \ $DROPTBL \ -W ${ENCODING} \ -n \ "${FILE}" \ "${SCHEMA}.${TABLE}" \ | (echo set client_min_messages=fatal\; ;cat -) \ | ${PSQL_CMD_NULL} \ | egrep -v '^(INSERT INTO|BEGIN;|END;)' # you really don't want to see a zillion insert statements addcols "$SCHEMA" "$TABLE" } function create_schema () { local SCHEMA="$1" local EXT='' if [ "${DROP_SCHEMA}" = "true" ]; then EXT="drop schema if exists $SCHEMA cascade;" fi cat<<EOT | (echo 'set client_min_messages=fatal;';cat -) | ${PSQL_CMD_NULL} $EXT create schema $SCHEMA; EOT } function usage () { cat >&2 <<EOT -q Be quieter (shp2pgsql does not always cooperate here) -n glob Load national-level data matching pattern (use 'all' to match, well all) (default: skip national data) -s statecode Load data for specific state code (default: all state level files) setting this to 'none' skips loading of state files. -c countycode Load data for specific county code within state given) (default: all state and county-level files) setting this to 'none' skips loading of county level files. -X Drop schemas before loading the data. Tables will not be dropped individually, since they will be dropped with the schema. -S prefix Created schemas will be prefixed with this (default: tiger) -D Drop tables before creating/loading the data (default is to not drop) -h hostname Database host (default: \$PGHOST if defined, else 'localhost') -u username Database username (default: \$PGUSER if defined else your username) -d dbname Database name (default: \$PGDATABASE if defined else 'tiger') -p dbport Database port (default: \$PGPORT if defined else 5432) -B directory Specify base directory of Tiger Files (default: ./TIGER2008) -r SRID If given, and is different from the default SRID (see: -R), then reproject to this SRID before import. (requires ogr2ogr be installed) -i Ignore files matching *00.shp,i.e. from 2000. (default false) Uncommon options: -b file_prefix String that matches the beginning of individual tiger files (default: tl_2008) -R SRID SRID of datafiles. There is probably no reason to change this (default: 4269 aka NAD83) -E encoding Character encoding of files (default: LATIN1) -v Enable some extra verbosity. (implies no -q) EOT exit 1; } while getopts "n:s:c:H:u:d:DB:b:E:S:hvXr:R:qp:iM" flag; do case "$flag" in n) NATIONAL="true"; NATLAYERS="$OPTARG";; s) STATELVL="true"; STATES="$OPTARG";; c) COUNTYLVL="true"; COUNTIES="$OPTARG";; H) HOST="$OPTARG";; u) DBUSER="$OPTARG";; d) DB="$OPTARG";; D) DROP="true";; p) DBPORT="$OPTARGS";; X) DROP_SCHEMA="true";; B) BASE="$OPTARG";; b) SETBASE="$OPTARG";; E) ENCODING="$OPTARG";; S) SCHEMA_PREFIX="$OPTARG";; h) usage ;; r) SRID="$OPTARG";; R) DEFAULT_SRID="$OPTARG";; v) DEBUG="true";; q) QUIET="true";; i) SKIP00="true";; M) DO_MERGE="true";; [?]) usage ;; esac done if [ "${DO_MERGE}" = 'true' ]; then NATIONAL='false' STATELVL='false' COUNTYLVL='false' fi # # # do some initial setup # # if [ "${NATLAYERS}" = "all" ]; then NATLAYERS='*' fi if [ "${DROP_SCHEMA}" = 'true' ]; then # handled by cascading schema drop DROP='false' fi if [ -z "${STATES}" -o "${STATES}" = 'all' ]; then STATES="[0-9][0-9]" fi if [ "${STATES}" = 'none' ]; then STATELVL='false' fi if [ "${COUNTIES}" = 'none' ]; then COUNTYLVL='false' fi # how do we call psql PSQL_CMD_ARGS="-U ${DBUSER} -d ${DB} -h ${HOST} -p ${DBPORT} -q -1 --set VERBOSITY=terse" if [ "${DEBUG}" = 'true' ]; then PSQL_CMD_EXTRAS='-e' else PSQL_CMD_EXTRAS='' fi PSQL_CMD="${PSQL} ${PSQL_CMD_EXTRAS} ${PSQL_CMD_ARGS}" PSQL_CMD_NULL="${PSQL} -o /dev/null ${PSQL_CMD_EXTRAS} ${PSQL_CMD_ARGS}|| (error 'psql failed';exit 1)" # Handle case where we were given a 5-digit county echo $COUNTIES | grep -qE '[0-9]{5}' if [ $? -eq 0 ]; then STATES=`echo $COUNTIES | cut -c1,2` COUNTIES=`echo $COUNTIES | cut -c3,4,5` fi if [ ! "${COUNTIES}" = '*' -a \( "${STATES}" = '[0-9][0-9]' -o \! "${STATELVL}" = 'true' \) ]; then error "You must specify a state if you want to specify a county" usage fi # # # Now start your imports # # if [ "$NATIONAL" = "true" ]; then note "National level..." # Create the national schema SCHEMA="${SCHEMA_PREFIX}_us" create_schema ${SCHEMA} # Loop through the national files, they're in the base directory with a # file glob of $SETBASE_us_*.zip FILEBASE="${SETBASE}_us" unzip_files_matching "${BASE}/${FILEBASE}_${NATLAYERS}" for file in ${TMPDIR}/*.shp; do table_from_filename $file loadshp "$file" "$TBL" done fi # Loop through the state directories if [ "$STATELVL" = "true" -o "${COUNTLVL}" = 'true' ]; then note "" note "State level..." DIRS="${BASE}/${STATES}_*" if [ -z "${DIRS}" ]; then error "$BASE/${STATES}_\* did not match anything!" fi for statedir in ${DIRS}; do STATE=`basename $statedir | cut -f1 -d_` SCHEMA="${SCHEMA_PREFIX}_${STATE}" FILEBASE="${SETBASE}_${STATE}" note "Processing state-level for $STATE..." create_schema $SCHEMA if [ "$STATELVL" = "true" ]; then unzip_files_matching "$statedir/${FILEBASE}" for file in $TMPDIR/${FILEBASE}_*.shp; do table_from_filename "$file" loadshp "$file" "$TBL" done fi if [ "$COUNTYLVL" = "true" ]; then note "" note "Processing county-level for $STATE..." CODIRS="$statedir/${STATE}${COUNTIES}_*" if [ -z ${CODIRS} ]; then error "$statedir/${STATE}${COUNTIES}_\* did not match anything!" fi for codir in ${CODIRS}; do COUNTY=`basename $codir | cut -c3- | cut -f1 -d_` FILEBASE="${SETBASE}_${STATE}${COUNTY}" unzip_files_matching "$codir/${FILEBASE}" for shpfile in $TMPDIR/${FILEBASE}_*.shp; do table_from_filename "$shpfile" loadshp "$shpfile" "$TBL" done # If there is no .shp file, then look for just a .dbf file to load. for dbffile in ${TMPDIR}/${FILEBASE}_*.dbf; do DIR=`dirname $dbffile` SHP=`basename $dbffile .dbf`.shp if [ ! -e "$DIR/$SHP" ]; then table_from_filename "$dbffile" loaddbf "$dbffile" "$TBL" else note "Skipping dbffile ${dbffile} because it is part of a shapefile" fi done done fi done fi # Remove temp dir rm -rf ${TMPDIR} if [ "${DO_MERGE}" = 'true' ]; then MYSCHEMAS=`${PSQL_CMD} -t -c '\\dn' | egrep "^ +${SCHEMA_PREFIX}" | sed -e 's/|.*//'` TABLES=`(for schema in $MYSCHEMAS; do ${PSQL_CMD} -t -c "\\dt ${schema}." done) | cut -d\| -f 2 | sort -u` for table in $TABLES; do VIEW='' for schema in ${MYSCHEMAS}; do ${PSQL_CMD} -t -c "\dt ${schema}.${table}" | egrep -q "${schema}.*${table}" if [ $? -eq 0 ]; then # it's OK if we hit this a bunch, right? COLS=`${PSQL_CMD} -c "\\copy (select * from ${table} limit 1) TO STDOUT CSV HEADER" | head -1 | sed -e 's/^gid,//' -e 's/,/","/g'` COLS="\"$COLS\"" VIEW="${VIEW} SELECT ${COLS} from $schema.$table UNION ALL " cat<<EOT | ${PSQL_CMD_NULL} DROP TABLE IF EXISTS ${table} cascade; CREATE TABLE ${table} (like $schema.$table including indexes including constraints); EOT fi done VIEW=`echo $VIEW| sed -e 's/UNION ALL *$/;/'` cat<<EOT | ${PSQL_CMD_NULL} drop sequence if exists ${table}_gid_seq; create sequence ${table}_gid_seq; alter table ${table} drop constraint ${table}_statefp_check; alter table ${table} alter column gid set default nextval('${table}_gid_seq'::regclass); insert into ${table} (${COLS}) ${VIEW}; EOT TYPE=`${PSQL_CMD} -t -c "select type from geometry_columns where f_table_name='${table}' limit 1" | egrep '(POLY|LINE)'| sed 's/ //g'` if [ -z "${TYPE}" ]; then continue else echo ${TYPE} > /dev/null cat<<EOT | ${PSQL_CMD_NULL} --create index ${table}_the_geom_idx on public.${table} using gist(the_geom gist_geometry_ops); delete from geometry_columns where f_table_name='${table}' and f_table_schema='public'; insert into geometry_columns values ('','public','${table}','the_geom',2,${SRID},'${TYPE}'); EOT fi done fi ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/�����������������������������������0000755�0000000�0000000�00000000000�12317530606�023234� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/census_tracts_functions.sql��������0000644�0000000�0000000�00000003702�11722777314�030737� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: census_tracts_functions.sql 7996 2011-10-21 12:01:12Z robe $ /*** * * Copyright (C) 2012 Regina Obe and Leo Hsu (Paragon Corporation) **/ -- This function given a geometry try will try to determine the tract. -- It defaults to returning the tract name but can be changed to return track geoid id. -- pass in 'tract_id' to get the full geoid, 'name' to get the short decimal name CREATE OR REPLACE FUNCTION get_tract(IN loc_geom geometry, output_field text DEFAULT 'name') RETURNS text AS $$ DECLARE var_state text := NULL; var_stusps text := NULL; var_result text := NULL; var_loc_geom geometry; var_stmt text; var_debug boolean = false; BEGIN --$Id: census_tracts_functions.sql 7996 2011-10-21 12:01:12Z robe $ IF loc_geom IS NULL THEN RETURN null; ELSE IF ST_SRID(loc_geom) = 4269 THEN var_loc_geom := loc_geom; ELSIF ST_SRID(loc_geom) > 0 THEN var_loc_geom := ST_Transform(loc_geom, 4269); ELSE --If srid is unknown, assume its 4269 var_loc_geom := ST_SetSRID(loc_geom, 4269); END IF; IF GeometryType(var_loc_geom) != 'POINT' THEN var_loc_geom := ST_Centroid(var_loc_geom); END IF; END IF; -- Determine state tables to check -- this is needed to take advantage of constraint exclusion IF var_debug THEN RAISE NOTICE 'Get matching states start: %', clock_timestamp(); END IF; SELECT statefp, stusps INTO var_state, var_stusps FROM state WHERE ST_Intersects(the_geom, var_loc_geom) LIMIT 1; IF var_debug THEN RAISE NOTICE 'Get matching states end: % - %', var_state, clock_timestamp(); END IF; IF var_state IS NULL THEN -- We don't have any data for this state RAISE NOTICE 'No data for this state'; RETURN NULL; END IF; -- locate county var_stmt := 'SELECT ' || quote_ident(output_field) || ' FROM tract WHERE statefp = $1 AND ST_Intersects(the_geom, $2) LIMIT 1;'; EXECUTE var_stmt INTO var_result USING var_state, var_loc_geom ; RETURN var_result; END; $$ LANGUAGE plpgsql IMMUTABLE COST 500; ��������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/geocode_location.sql���������������0000644�0000000�0000000�00000006410�11722777314�027263� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: geocode_location.sql 9324 2012-02-27 22:08:12Z pramsey $ CREATE OR REPLACE FUNCTION geocode_location( parsed NORM_ADDY, restrict_geom geometry DEFAULT null, OUT ADDY NORM_ADDY, OUT GEOMOUT GEOMETRY, OUT RATING INTEGER ) RETURNS SETOF RECORD AS $_$ DECLARE result RECORD; in_statefp VARCHAR; stmt VARCHAR; var_debug boolean := false; BEGIN in_statefp := statefp FROM state WHERE state.stusps = parsed.stateAbbrev; IF var_debug THEN RAISE NOTICE 'geocode_location starting: %', clock_timestamp(); END IF; FOR result IN SELECT coalesce(zip.city)::varchar as place, zip.zip as zip, ST_Centroid(zcta5.the_geom) as address_geom, stusps as state, 100::integer + coalesce(levenshtein_ignore_case(coalesce(zip.city), parsed.location),0) as in_rating FROM zip_lookup_base zip JOIN zcta5 ON (zip.zip = zcta5.zcta5ce AND zip.statefp = zcta5.statefp) JOIN state ON (state.statefp=zip.statefp) WHERE parsed.zip = zip.zip OR (soundex(zip.city) = soundex(parsed.location) and zip.statefp = in_statefp) ORDER BY levenshtein_ignore_case(coalesce(zip.city), parsed.location), zip.zip LOOP ADDY.location := result.place; ADDY.stateAbbrev := result.state; ADDY.zip := result.zip; ADDY.parsed := true; GEOMOUT := result.address_geom; RATING := result.in_rating; RETURN NEXT; IF RATING = 100 THEN RETURN; END IF; END LOOP; IF parsed.location IS NULL THEN parsed.location := city FROM zip_lookup_base WHERE zip_lookup_base.zip = parsed.zip ORDER BY zip_lookup_base.zip LIMIT 1; in_statefp := statefp FROM zip_lookup_base WHERE zip_lookup_base.zip = parsed.zip ORDER BY zip_lookup_base.zip LIMIT 1; END IF; stmt := 'SELECT ' || ' pl.name as place, ' || ' state.stusps as stateAbbrev, ' || ' ST_Centroid(pl.the_geom) as address_geom, ' || ' 100::integer + levenshtein_ignore_case(coalesce(pl.name), ' || quote_literal(coalesce(parsed.location,'')) || ') as in_rating ' || ' FROM (SELECT * FROM place WHERE statefp = ' || quote_literal(coalesce(in_statefp,'')) || ' ' || COALESCE(' AND ST_Intersects(' || quote_literal(restrict_geom::text) || '::geometry, the_geom)', '') || ') AS pl ' || ' INNER JOIN state ON(pl.statefp = state.statefp)' || ' WHERE soundex(pl.name) = soundex(' || quote_literal(coalesce(parsed.location,'')) || ') and pl.statefp = ' || quote_literal(COALESCE(in_statefp,'')) || ' ORDER BY levenshtein_ignore_case(coalesce(pl.name), ' || quote_literal(coalesce(parsed.location,'')) || ');' ; IF var_debug THEN RAISE NOTICE 'geocode_location stmt: %', stmt; END IF; FOR result IN EXECUTE stmt LOOP ADDY.location := result.place; ADDY.stateAbbrev := result.stateAbbrev; ADDY.zip = parsed.zip; ADDY.parsed := true; GEOMOUT := result.address_geom; RATING := result.in_rating; RETURN NEXT; IF RATING = 100 THEN RETURN; IF var_debug THEN RAISE NOTICE 'geocode_location ending hit 100 rating result: %', clock_timestamp(); END IF; END IF; END LOOP; IF var_debug THEN RAISE NOTICE 'geocode_location ending: %', clock_timestamp(); END IF; RETURN; END; $_$ LANGUAGE plpgsql STABLE COST 100; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/rate_attributes.sql����������������0000644�0000000�0000000�00000010313�11722777314�027164� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: rate_attributes.sql 9324 2012-02-27 22:08:12Z pramsey $ -- rate_attributes(dirpA, dirpB, streetNameA, streetNameB, streetTypeA, -- streetTypeB, dirsA, dirsB, locationA, locationB) -- Rates the street based on the given attributes. The locations must be -- non-null. The other eight values are handled by the other rate_attributes -- function, so it's requirements must also be met. -- changed: 2010-10-18 Regina Obe - all references to verbose to var_verbose since causes compile errors in 9.0 -- changed: 2011-06-25 revise to use real named args and fix direction rating typo CREATE OR REPLACE FUNCTION rate_attributes(dirpA VARCHAR, dirpB VARCHAR, streetNameA VARCHAR, streetNameB VARCHAR, streetTypeA VARCHAR, streetTypeB VARCHAR, dirsA VARCHAR, dirsB VARCHAR, locationA VARCHAR, locationB VARCHAR, prequalabr VARCHAR) RETURNS INTEGER AS $_$ DECLARE --$Id: rate_attributes.sql 9324 2012-02-27 22:08:12Z pramsey $ result INTEGER := 0; locationWeight INTEGER := 14; var_verbose BOOLEAN := FALSE; BEGIN IF locationA IS NOT NULL AND locationB IS NOT NULL THEN result := levenshtein_ignore_case(locationA, locationB); ELSE IF var_verbose THEN RAISE NOTICE 'rate_attributes() - Location names cannot be null!'; END IF; RETURN NULL; END IF; result := result + rate_attributes($1, $2, streetNameA, streetNameB, $5, $6, $7, $8,prequalabr); RETURN result; END; $_$ LANGUAGE plpgsql IMMUTABLE; -- rate_attributes(dirpA, dirpB, streetNameA, streetNameB, streetTypeA, -- streetTypeB, dirsA, dirsB) -- Rates the street based on the given attributes. Only streetNames are -- required. If any others are null (either A or B) they are treated as -- empty strings. CREATE OR REPLACE FUNCTION rate_attributes(dirpA VARCHAR, dirpB VARCHAR, streetNameA VARCHAR, streetNameB VARCHAR, streetTypeA VARCHAR, streetTypeB VARCHAR, dirsA VARCHAR, dirsB VARCHAR, prequalabr VARCHAR) RETURNS INTEGER AS $_$ DECLARE result INTEGER := 0; directionWeight INTEGER := 2; nameWeight INTEGER := 10; typeWeight INTEGER := 5; var_verbose BOOLEAN := false; BEGIN result := result + levenshtein_ignore_case(cull_null($1), cull_null($2)) * directionWeight; IF var_verbose THEN RAISE NOTICE 'streetNameA: %, streetNameB: %', streetNameA, streetNameB; END IF; IF streetNameA IS NOT NULL AND streetNameB IS NOT NULL THEN -- We want to treat numeric streets that have numerics as equal -- and not penalize if they are spelled different e.g. have ND instead of TH IF NOT numeric_streets_equal(streetNameA, streetNameB) THEN IF prequalabr IS NOT NULL THEN -- If the reference address (streetNameB) has a prequalabr streetNameA (prequalabr) - note: streetNameB usually comes thru without prequalabr -- and the input street (streetNameA) is lacking the prequal -- only penalize a little result := (result + levenshtein_ignore_case( trim( trim( lower(streetNameA),lower(prequalabr) ) ), trim( trim( lower(streetNameB),lower(prequalabr) ) ) )*nameWeight*0.75 + levenshtein_ignore_case(trim(streetNameA),prequalabr || ' ' || streetNameB) * nameWeight*0.25)::integer; ELSE result := result + levenshtein_ignore_case(streetNameA, streetNameB) * nameWeight; END IF; ELSE -- Penalize for numeric streets if one is completely numeric and the other is not -- This is to minimize on highways like 3A being matched with numbered streets since streets are usually number followed by 2 characters e.g nth ave and highways are just number with optional letter for name IF (streetNameB ~ E'[a-zA-Z]{2,10}' AND NOT (streetNameA ~ E'[a-zA-Z]{2,10}') ) OR (streetNameA ~ E'[a-zA-Z]{2,10}' AND NOT (streetNameB ~ E'[a-zA-Z]{2,10}') ) THEN result := result + levenshtein_ignore_case(streetNameA, streetNameB) * nameWeight; END IF; END IF; ELSE IF var_verbose THEN RAISE NOTICE 'rate_attributes() - Street names cannot be null!'; END IF; RETURN NULL; END IF; result := result + levenshtein_ignore_case(cull_null(streetTypeA), cull_null(streetTypeB)) * typeWeight; result := result + levenshtein_ignore_case(cull_null(dirsA), cull_null(dirsB)) * directionWeight; return result; END; $_$ LANGUAGE plpgsql IMMUTABLE; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/other_helper_functions.sql���������0000644�0000000�0000000�00000036414�11722777314�030545� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: other_helper_functions.sql 9324 2012-02-27 22:08:12Z pramsey $ /*** * * Copyright (C) 2011 Regina Obe and Leo Hsu (Paragon Corporation) **/ -- Note we are wrapping this in a function so we can make it immutable and thus useable in an index -- It also allows us to shorten and possibly better cache the repetitive pattern in the code -- greatest(to_number(b.fromhn,''99999999''),to_number(b.tohn,''99999999'')) -- and least(to_number(b.fromhn,''99999999''),to_number(b.tohn,''99999999'')) CREATE OR REPLACE FUNCTION least_hn(fromhn varchar, tohn varchar) RETURNS integer AS $$ SELECT least(to_number( CASE WHEN trim($1) ~ '^[0-9]+$' THEN $1 ELSE '0' END,'9999999'),to_number(CASE WHEN trim($2) ~ '^[0-9]+$' THEN $2 ELSE '0' END,'9999999') )::integer; $$ LANGUAGE sql IMMUTABLE COST 200; -- Note we are wrapping this in a function so we can make it immutable (for some reason least and greatest aren't considered immutable) -- and thu useable in an index or cacheable for multiple calls CREATE OR REPLACE FUNCTION greatest_hn(fromhn varchar, tohn varchar) RETURNS integer AS $$ SELECT greatest(to_number( CASE WHEN trim($1) ~ '^[0-9]+$' THEN $1 ELSE '0' END,'99999999'),to_number(CASE WHEN trim($2) ~ '^[0-9]+$' THEN $2 ELSE '0' END,'99999999') )::integer; $$ LANGUAGE sql IMMUTABLE COST 200; -- Returns an absolute difference between two zips -- This is generally more efficient than doing levenshtein -- Since when people get the wrong zip, its usually off by one or 2 numeric distance -- We only consider the first 5 digits CREATE OR REPLACE FUNCTION diff_zip(zip1 varchar, zip2 varchar) RETURNS integer AS $$ SELECT abs(to_number( CASE WHEN trim(substring($1,1,5)) ~ '^[0-9]+$' THEN $1 ELSE '0' END,'99999')::integer - to_number( CASE WHEN trim(substring($2,1,5)) ~ '^[0-9]+$' THEN $2 ELSE '0' END,'99999')::integer )::integer; $$ LANGUAGE sql IMMUTABLE STRICT COST 200; -- function return true or false if 2 numeric streets are equal such as 15th St, 23rd st -- it compares just the numeric part of the street for equality -- PURPOSE: handle bad formats such as 23th St so 23th St = 23rd St -- as described in: http://trac.osgeo.org/postgis/ticket/1068 -- This will always return false if one of the streets is not a numeric street -- By numeric it must start with numbers (allow fractions such as 1/2 and spaces such as 12 1/2th) and be less than 10 characters CREATE OR REPLACE FUNCTION numeric_streets_equal(input_street varchar, output_street varchar) RETURNS boolean AS $$ SELECT COALESCE(length($1) < 10 AND length($2) < 10 AND $1 ~ E'^[0-9\/\s]+' AND $2 ~ E'^[0-9\/\s]+' AND trim(substring($1, E'^[0-9\/\s]+')) = trim(substring($2, E'^[0-9\/\s]+')), false); $$ LANGUAGE sql IMMUTABLE COST 5; -- Generate script to drop all non-primary unique indexes on tiger and tiger_data tables CREATE OR REPLACE FUNCTION drop_indexes_generate_script(tiger_data_schema text DEFAULT 'tiger_data') RETURNS text AS $$ SELECT array_to_string(ARRAY(SELECT 'DROP INDEX ' || schemaname || '.' || indexname || ';' FROM pg_catalog.pg_indexes where schemaname IN('tiger',$1) AND indexname NOT LIKE 'uidx%' AND indexname NOT LIKE 'pk_%' AND indexname NOT LIKE '%key'), E'\n'); $$ LANGUAGE sql STABLE; -- Generate script to create missing indexes in tiger tables. -- This will generate sql you can run to index commonly used join columns in geocoder for tiger and tiger_data schemas -- CREATE OR REPLACE FUNCTION missing_indexes_generate_script() RETURNS text AS $$ SELECT array_to_string(ARRAY( -- create unique index on faces for tfid seems to perform better -- SELECT 'CREATE UNIQUE INDEX uidx_' || c.table_schema || '_' || c.table_name || '_' || c.column_name || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(' || c.column_name || ');' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE') As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('tfid') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexname LIKE 'uidx%' || c.column_name || '%' ) WHERE i.tablename IS NULL AND c.table_schema IN('tiger','tiger_data') AND c.table_name LIKE '%faces' UNION ALL -- basic btree regular indexes SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_' || c.column_name || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(' || c.column_name || ');' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE') As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('countyfp', 'tlid', 'tfidl', 'tfidr', 'tfid', 'zip', 'placefp', 'cousubfp') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%' || c.column_name || '%' ) WHERE i.tablename IS NULL AND c.table_schema IN('tiger','tiger_data') AND (NOT c.table_name LIKE '%faces') -- Gist spatial indexes -- UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_' || c.column_name || '_gist ON ' || c.table_schema || '.' || c.table_name || ' USING gist(' || c.column_name || ');' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE') As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('the_geom', 'geom') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%' || c.column_name || '%') WHERE i.tablename IS NULL AND c.table_schema IN('tiger','tiger_data') -- Soundex indexes -- UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_snd_' || c.column_name || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(soundex(' || c.column_name || '));' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE') As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('name', 'place', 'city') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%soundex(%' || c.column_name || '%' AND indexdef LIKE '%_snd_' || c.column_name || '%' ) WHERE i.tablename IS NULL AND c.table_schema IN('tiger','tiger_data') AND (c.table_name LIKE '%county%' OR c.table_name LIKE '%featnames' OR c.table_name LIKE '%place' or c.table_name LIKE '%zip%' or c.table_name LIKE '%cousub') -- Lower indexes -- UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_lower_' || c.column_name || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(lower(' || c.column_name || '));' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE') As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('name', 'place', 'city') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%btree%(%lower(%' || c.column_name || '%') WHERE i.tablename IS NULL AND c.table_schema IN('tiger','tiger_data') AND (c.table_name LIKE '%county%' OR c.table_name LIKE '%featnames' OR c.table_name LIKE '%place' or c.table_name LIKE '%zip%' or c.table_name LIKE '%cousub') -- Least address index btree least_hn(fromhn, tohn) UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_least_address' || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(least_hn(fromhn, tohn));' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_name LIKE '%addr' AND table_schema IN('tiger','tiger_data')) As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('fromhn') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%least_hn(%' || c.column_name || '%') WHERE i.tablename IS NULL -- var_ops lower -- UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_l' || c.column_name || '_var_ops' || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(lower(' || c.column_name || ') varchar_pattern_ops);' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND (table_name LIKE '%featnames' or table_name LIKE '%place' or table_name LIKE '%zip_lookup_base' or table_name LIKE '%zip_state_loc') AND table_schema IN('tiger','tiger_data')) As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('name', 'city', 'place', 'fullname') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%btree%(%lower%' || c.column_name || ')%varchar_pattern_ops%') WHERE i.tablename IS NULL -- var_ops mtfcc -- /** UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_' || c.column_name || '_var_ops' || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(' || c.column_name || ' varchar_pattern_ops);' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND (table_name LIKE '%featnames' or table_name LIKE '%edges') AND table_schema IN('tiger','tiger_data')) As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('mtfcc') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%btree%(' || c.column_name || '%varchar_pattern_ops%') WHERE i.tablename IS NULL **/ -- zipl zipr on edges -- UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_' || c.column_name || ' ON ' || c.table_schema || '.' || c.table_name || ' USING btree(' || c.column_name || ' );' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_name LIKE '%edges' AND table_schema IN('tiger','tiger_data')) As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('zipl', 'zipr') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%btree%(' || c.column_name || '%)%') WHERE i.tablename IS NULL -- unique index on tlid state county -- /*UNION ALL SELECT 'CREATE UNIQUE INDEX uidx_' || t.table_schema || '_' || t.table_name || '_tlid_statefp_countyfp ON ' || t.table_schema || '.' || t.table_name || ' USING btree(tlid,statefp,countyfp);' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_name LIKE '%edges' AND table_schema IN('tiger','tiger_data')) As t LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = t.table_name AND i.schemaname = t.table_schema AND indexdef LIKE '%btree%(%tlid,%statefp%countyfp%)%') WHERE i.tablename IS NULL*/ --full text indexes on name field-- /**UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_fullname_ft_gist' || ' ON ' || c.table_schema || '.' || c.table_name || ' USING gist(to_tsvector(''english'',fullname))' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_name LIKE '%featnames' AND table_schema IN('tiger','tiger_data')) As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('fullname') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%to_tsvector(%' || c.column_name || '%') WHERE i.tablename IS NULL **/ -- trigram index -- /**UNION ALL SELECT 'CREATE INDEX idx_' || c.table_schema || '_' || c.table_name || '_' || c.column_name || '_trgm_gist' || ' ON ' || c.table_schema || '.' || c.table_name || ' USING gist(' || c.column_name || ' gist_trgm_ops);' As index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_name LIKE '%featnames' AND table_schema IN('tiger','tiger_data')) As t INNER JOIN (SELECT * FROM information_schema.columns WHERE column_name IN('fullname', 'name') ) AS c ON (t.table_name = c.table_name AND t.table_schema = c.table_schema) LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = c.table_name AND i.schemaname = c.table_schema AND indexdef LIKE '%gist%(' || c.column_name || '%gist_trgm_ops%') WHERE i.tablename IS NULL **/ ORDER BY 1), E'\r'); $$ LANGUAGE sql VOLATILE; CREATE OR REPLACE FUNCTION install_missing_indexes() RETURNS boolean AS $$ DECLARE var_sql text = missing_indexes_generate_script(); BEGIN EXECUTE(var_sql); RETURN true; END $$ language plpgsql; CREATE OR REPLACE FUNCTION drop_dupe_featnames_generate_script() RETURNS text AS $$ SELECT array_to_string(ARRAY(SELECT 'CREATE TEMPORARY TABLE dup AS SELECT min(f.gid) As min_gid, f.tlid, lower(f.fullname) As fname FROM ONLY ' || t.table_schema || '.' || t.table_name || ' As f GROUP BY f.tlid, lower(f.fullname) HAVING count(*) > 1; DELETE FROM ' || t.table_schema || '.' || t.table_name || ' AS feat WHERE EXISTS (SELECT tlid FROM dup WHERE feat.tlid = dup.tlid AND lower(feat.fullname) = dup.fname AND feat.gid > dup.min_gid); DROP TABLE dup; CREATE INDEX idx_' || t.table_schema || '_' || t.table_name || '_tlid ' || ' ON ' || t.table_schema || '.' || t.table_name || ' USING btree(tlid); ' As drop_sql_create_index FROM (SELECT table_name, table_schema FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND (table_name LIKE '%featnames' ) AND table_schema IN('tiger','tiger_data')) As t LEFT JOIN pg_catalog.pg_indexes i ON (i.tablename = t.table_name AND i.schemaname = t.table_schema AND indexdef LIKE '%btree%(%tlid%') WHERE i.tablename IS NULL) ,E'\r'); $$ LANGUAGE sql VOLATILE; --DROP FUNCTION IF EXISTS zip_range(text,integer,integer); -- Helper function that useful for catch slight mistakes in zip position given a 5 digit zip code -- will return a range of zip codes that are between zip - num_before and zip - num_after -- e.g. usage -> zip_range('02109', -1,+1) -> {'02108', '02109', '02110'} CREATE OR REPLACE FUNCTION zip_range(zip text, range_start integer, range_end integer) RETURNS varchar[] AS $$ SELECT ARRAY( SELECT lpad((to_number( CASE WHEN trim(substring($1,1,5)) ~ '^[0-9]+$' THEN $1 ELSE '0' END,'99999')::integer + i)::text, 5, '0')::varchar FROM generate_series($2, $3) As i ); $$ LANGUAGE sql IMMUTABLE STRICT;����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/geocode_intersection.sql�����������0000644�0000000�0000000�00000020506�12026615336�030154� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: geocode_intersection.sql 10310 2012-09-20 13:32:14Z robe $ /*** * * Copyright (C) 2011 Regina Obe and Leo Hsu (Paragon Corporation) **/ -- This function given two roadways, state and optional city, zip -- Will return addresses that are at the intersecton of those roadways -- The address returned will be the address on the first road way -- Use case example an address at the intersection of 2 streets: -- SELECT pprint_addy(addy), st_astext(geomout),rating FROM geocode_intersection('School St', 'Washington St', 'MA', 'Boston','02117'); --DROP FUNCTION tiger.geocode_intersection(text,text,text,text,text,integer); CREATE OR REPLACE FUNCTION geocode_intersection(IN roadway1 text, IN roadway2 text, IN in_state text, IN in_city text DEFAULT '', IN in_zip text DEFAULT '', IN num_results integer DEFAULT 10, OUT ADDY NORM_ADDY, OUT GEOMOUT GEOMETRY, OUT RATING INTEGER) RETURNS SETOF record AS $$ DECLARE var_na_road norm_addy; var_na_inter1 norm_addy; var_sql text := ''; var_zip varchar(5)[]; in_statefp varchar(2) ; var_debug boolean := get_geocode_setting('debug_geocode_intersection')::boolean; results record; BEGIN IF COALESCE(roadway1,'') = '' OR COALESCE(roadway2,'') = '' THEN -- not enough to give a result just return RETURN ; ELSE var_na_road := normalize_address('0 ' || roadway1 || ', ' || COALESCE(in_city,'') || ', ' || in_state || ' ' || in_zip); var_na_inter1 := normalize_address('0 ' || roadway2 || ', ' || COALESCE(in_city,'') || ', ' || in_state || ' ' || in_zip); END IF; in_statefp := statefp FROM state_lookup As s WHERE s.abbrev = upper(in_state); IF COALESCE(in_zip,'') > '' THEN -- limit search to 2 plus or minus the input zip var_zip := zip_range(in_zip, -2,2); END IF; IF var_zip IS NULL AND in_city > '' THEN var_zip := array_agg(zip) FROM zip_lookup_base WHERE statefp = in_statefp AND lower(city) = lower(in_city); END IF; -- if we don't have a city or zip, don't bother doing the zip check, just keep as null IF var_zip IS NULL AND in_city > '' THEN var_zip := array_agg(zip) FROM zip_lookup_base WHERE statefp = in_statefp AND lower(city) LIKE lower(in_city) || '%' ; END IF; IF var_debug THEN RAISE NOTICE 'var_zip: %, city: %', quote_nullable(var_zip), quote_nullable(in_city); END IF; var_sql := ' WITH a1 AS (SELECT f.*, addr.fromhn, addr.tohn, addr.side , addr.zip FROM (SELECT * FROM featnames WHERE statefp = $1 AND ( lower(name) = $2 ' || CASE WHEN length(var_na_road.streetName) > 5 THEN ' or lower(fullname) LIKE $6 || ''%'' ' ELSE '' END || ')' || ') AS f LEFT JOIN (SELECT * FROM addr WHERE addr.statefp = $1) As addr ON (addr.tlid = f.tlid AND addr.statefp = f.statefp) WHERE $5::text[] IS NULL OR addr.zip = ANY($5::text[]) OR addr.zip IS NULL ORDER BY CASE WHEN lower(f.fullname) = $6 THEN 0 ELSE 1 END LIMIT 5000 ), a2 AS (SELECT f.*, addr.fromhn, addr.tohn, addr.side , addr.zip FROM (SELECT * FROM featnames WHERE statefp = $1 AND ( lower(name) = $4 ' || CASE WHEN length(var_na_inter1.streetName) > 5 THEN ' or lower(fullname) LIKE $7 || ''%'' ' ELSE '' END || ')' || ' ) AS f LEFT JOIN (SELECT * FROM addr WHERE addr.statefp = $1) AS addr ON (addr.tlid = f.tlid AND addr.statefp = f.statefp) WHERE $5::text[] IS NULL OR addr.zip = ANY($5::text[]) or addr.zip IS NULL ORDER BY CASE WHEN lower(f.fullname) = $7 THEN 0 ELSE 1 END LIMIT 5000 ), e1 AS (SELECT e.the_geom, e.tnidf, e.tnidt, a.*, CASE WHEN a.side = ''L'' THEN e.tfidl ELSE e.tfidr END AS tfid FROM a1 As a INNER JOIN edges AS e ON (e.statefp = a.statefp AND a.tlid = e.tlid) WHERE e.statefp = $1 ORDER BY CASE WHEN lower(a.name) = $4 THEN 0 ELSE 1 END + CASE WHEN lower(e.fullname) = $7 THEN 0 ELSE 1 END LIMIT 1000) , e2 AS (SELECT e.the_geom, e.tnidf, e.tnidt, a.*, CASE WHEN a.side = ''L'' THEN e.tfidl ELSE e.tfidr END AS tfid FROM (SELECT * FROM edges WHERE statefp = $1) AS e INNER JOIN a2 AS a ON (e.statefp = a.statefp AND a.tlid = e.tlid) INNER JOIN e1 ON (e.statefp = e1.statefp AND ST_Intersects(e.the_geom, e1.the_geom) AND ARRAY[e.tnidf, e.tnidt] && ARRAY[e1.tnidf, e1.tnidt] ) WHERE (lower(e.fullname) = $7 or lower(a.name) LIKE $4 || ''%'') ORDER BY CASE WHEN lower(a.name) = $4 THEN 0 ELSE 1 END + CASE WHEN lower(e.fullname) = $7 THEN 0 ELSE 1 END LIMIT 100 ), segs AS (SELECT DISTINCT ON(e1.tlid, e1.side) CASE WHEN e1.tnidf = e2.tnidf OR e1.tnidf = e2.tnidt THEN e1.fromhn ELSE e1.tohn END As address, e1.predirabrv As fedirp, COALESCE(e1.prequalabr || '' '','''' ) || e1.name As fename, COALESCE(e1.suftypabrv,e1.pretypabrv) As fetype, e1.sufdirabrv AS fedirs, p.name As place, e1.zip, CASE WHEN e1.tnidf = e2.tnidf OR e1.tnidf = e2.tnidt THEN ST_StartPoint(ST_GeometryN(ST_Multi(e1.the_geom),1)) ELSE ST_EndPoint(ST_GeometryN(ST_Multi(e1.the_geom),1)) END AS geom , CASE WHEN lower(p.name) = $3 THEN 0 ELSE 1 END + levenshtein_ignore_case(p.name, $3) + levenshtein_ignore_case(e1.name || COALESCE('' '' || e1.sufqualabr, ''''),$2) + CASE WHEN e1.fullname = $6 THEN 0 ELSE levenshtein_ignore_case(e1.fullname, $6) END + + levenshtein_ignore_case(e2.name || COALESCE('' '' || e2.sufqualabr, ''''),$4) AS a_rating FROM e1 INNER JOIN e2 ON ( ST_Intersects(e1.the_geom, e2.the_geom) ) INNER JOIN (SELECT * FROM faces WHERE statefp = $1) As fa1 ON (e1.tfid = fa1.tfid ) LEFT JOIN place AS p ON (fa1.placefp = p.placefp AND p.statefp = $1 ) ORDER BY e1.tlid, e1.side, a_rating LIMIT $9*4 ) SELECT address, fedirp , fename, fetype,fedirs,place, zip , geom, a_rating FROM segs ORDER BY a_rating LIMIT $9'; IF var_debug THEN RAISE NOTICE 'sql: %', replace(replace(replace( replace(replace(replace( replace( replace( replace(var_sql, '$1', quote_nullable(in_statefp)), '$2', quote_nullable(lower(var_na_road.streetName) ) ), '$3', quote_nullable(lower(in_city)) ), '$4', quote_nullable(lower(var_na_inter1.streetName) ) ), '$5', quote_nullable(var_zip) ), '$6', quote_nullable(lower(var_na_road.streetName || ' ' || COALESCE(var_na_road.streetTypeAbbrev,'') )) ) , '$7', quote_nullable(trim(lower(var_na_inter1.streetName || ' ' || COALESCE(var_na_inter1.streetTypeAbbrev,'') )) ) ) , '$8', quote_nullable(in_state ) ), '$9', num_results::text ); END IF; FOR results IN EXECUTE var_sql USING in_statefp, trim(lower(var_na_road.streetName)), lower(in_city), lower(var_na_inter1.streetName), var_zip, trim(lower(var_na_road.streetName || ' ' || COALESCE(var_na_road.streetTypeAbbrev,''))), trim(lower(var_na_inter1.streetName || ' ' || COALESCE(var_na_inter1.streetTypeAbbrev,''))), in_state, num_results LOOP ADDY.preDirAbbrev := results.fedirp; ADDY.streetName := results.fename; ADDY.streetTypeAbbrev := results.fetype; ADDY.postDirAbbrev := results.fedirs; ADDY.location := results.place; ADDY.stateAbbrev := in_state; ADDY.zip := results.zip; ADDY.parsed := TRUE; ADDY.address := results.address; GEOMOUT := results.geom; RATING := results.a_rating; RETURN NEXT; END LOOP; RETURN; END; $$ LANGUAGE plpgsql IMMUTABLE COST 1000 ROWS 10; ALTER FUNCTION geocode_intersection(IN text, IN text, IN text, IN text, IN text, IN integer) SET join_collapse_limit='2'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/geocode.sql������������������������0000644�0000000�0000000�00000005733�11722777314�025402� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: geocode.sql 9324 2012-02-27 22:08:12Z pramsey $ CREATE OR REPLACE FUNCTION geocode( input VARCHAR, max_results integer DEFAULT 10, restrict_geom geometry DEFAULT NULL, OUT ADDY NORM_ADDY, OUT GEOMOUT GEOMETRY, OUT RATING INTEGER ) RETURNS SETOF RECORD AS $_$ DECLARE rec RECORD; BEGIN IF input IS NULL THEN RETURN; END IF; -- Pass the input string into the address normalizer ADDY := normalize_address(input); IF NOT ADDY.parsed THEN RETURN; END IF; /* FOR rec IN SELECT * FROM geocode(ADDY) LOOP ADDY := rec.addy; GEOMOUT := rec.geomout; RATING := rec.rating; RETURN NEXT; END LOOP;*/ RETURN QUERY SELECT g.addy, g.geomout, g.rating FROM geocode(ADDY, max_results, restrict_geom) As g ORDER BY g.rating; END; $_$ LANGUAGE plpgsql STABLE; CREATE OR REPLACE FUNCTION geocode( IN_ADDY NORM_ADDY, max_results integer DEFAULT 10, restrict_geom geometry DEFAULT null, OUT ADDY NORM_ADDY, OUT GEOMOUT GEOMETRY, OUT RATING INTEGER ) RETURNS SETOF RECORD AS $_$ DECLARE rec RECORD; BEGIN IF NOT IN_ADDY.parsed THEN RETURN; END IF; -- Go for the full monty if we've got enough info IF IN_ADDY.streetName IS NOT NULL AND (IN_ADDY.zip IS NOT NULL OR IN_ADDY.stateAbbrev IS NOT NULL) THEN FOR rec IN SELECT * FROM (SELECT DISTINCT ON ( (a.addy).address, (a.addy).predirabbrev, (a.addy).streetname, (a.addy).streettypeabbrev, (a.addy).postdirabbrev, (a.addy).internal, (a.addy).location, (a.addy).stateabbrev, (a.addy).zip ) * FROM geocode_address(IN_ADDY, max_results, restrict_geom) a ORDER BY (a.addy).address, (a.addy).predirabbrev, (a.addy).streetname, (a.addy).streettypeabbrev, (a.addy).postdirabbrev, (a.addy).internal, (a.addy).location, (a.addy).stateabbrev, (a.addy).zip, a.rating ) as b ORDER BY b.rating LIMIT max_results LOOP ADDY := rec.addy; GEOMOUT := rec.geomout; RATING := rec.rating; RETURN NEXT; IF RATING = 0 THEN RETURN; END IF; END LOOP; IF RATING IS NOT NULL THEN RETURN; END IF; END IF; -- No zip code, try state/location, need both or we'll get too much stuffs. IF IN_ADDY.zip IS NOT NULL OR (IN_ADDY.stateAbbrev IS NOT NULL AND IN_ADDY.location IS NOT NULL) THEN FOR rec in SELECT * FROM geocode_location(IN_ADDY, restrict_geom) As b ORDER BY b.rating LIMIT max_results LOOP ADDY := rec.addy; GEOMOUT := rec.geomout; RATING := rec.rating; RETURN NEXT; IF RATING = 100 THEN RETURN; END IF; END LOOP; END IF; RETURN; END; $_$ LANGUAGE plpgsql STABLE COST 1000; �������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/interpolate_from_address.sql�������0000644�0000000�0000000�00000010216�12140216471�031026� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: interpolate_from_address.sql 11334 2013-05-01 13:48:41Z robe $ -- interpolate_from_address(local_address, from_address_l, to_address_l, from_address_r, to_address_r, local_road) -- This function returns a point along the given geometry (must be linestring) -- corresponding to the given address. If the given address is not within -- the address range of the road, null is returned. -- This function requires that the address be grouped, such that the second and -- third arguments are from one side of the street, while the fourth and -- fifth are from the other. -- in_side Side of street -- either 'L', 'R' or if blank ignores side of road -- in_offset_m -- number of meters offset to the side CREATE OR REPLACE FUNCTION interpolate_from_address(given_address INTEGER, in_addr1 VARCHAR, in_addr2 VARCHAR, in_road GEOMETRY, in_side VARCHAR DEFAULT '',in_offset_m float DEFAULT 10) RETURNS GEOMETRY AS $_$ DECLARE addrwidth INTEGER; part DOUBLE PRECISION; road GEOMETRY; result GEOMETRY; var_addr1 INTEGER; var_addr2 INTEGER; center_pt GEOMETRY; cl_pt GEOMETRY; npos integer; delx float; dely float; x0 float; y0 float; x1 float; y1 float; az float; var_dist float; dir integer; BEGIN IF in_road IS NULL THEN RETURN NULL; END IF; var_addr1 := to_number(in_addr1, '999999'); var_addr2 := to_number(in_addr2, '999999'); IF geometrytype(in_road) = 'LINESTRING' THEN road := ST_Transform(in_road, utmzone(ST_StartPoint(in_road)) ); ELSIF geometrytype(in_road) = 'MULTILINESTRING' THEN road := ST_GeometryN(in_road,1); road := ST_Transform(road, utmzone(ST_StartPoint(road)) ); ELSE RETURN NULL; END IF; addrwidth := greatest(var_addr1,var_addr2) - least(var_addr1,var_addr2); IF addrwidth = 0 or addrwidth IS NULL THEN addrwidth = 1; END IF; part := (given_address - least(var_addr1,var_addr2)) / trunc(addrwidth, 1); IF var_addr1 > var_addr2 THEN part := 1 - part; END IF; IF part < 0 OR part > 1 OR part IS NULL THEN part := 0.5; END IF; center_pt = ST_Line_Interpolate_Point(road, part); IF in_side > '' AND in_offset_m > 0 THEN /** Compute point the point to the in_side of the geometry **/ /**Take into consideration non-straight so we consider azimuth of the 2 points that straddle the center location**/ IF part = 0 THEN az := ST_Azimuth (ST_StartPoint(road), ST_PointN(road,2)); ELSIF part = 1 THEN az := ST_Azimuth (ST_PointN(road,ST_NPoints(road) - 1), ST_EndPoint(road)); ELSE /** Find the largest nth point position that is before the center point This will be the start of our azimuth calc **/ SELECT i INTO npos FROM generate_series(1,ST_NPoints(road)) As i WHERE part > ST_Line_Locate_Point(road,ST_PointN(road,i)) ORDER BY i DESC; IF npos < ST_NPoints(road) THEN az := ST_Azimuth (ST_PointN(road,npos), ST_PointN(road, npos + 1)); ELSE az := ST_Azimuth (center_pt, ST_PointN(road, npos)); END IF; END IF; dir := CASE WHEN az < pi() THEN -1 ELSE 1 END; --dir := 1; var_dist := in_offset_m*CASE WHEN in_side = 'L' THEN -1 ELSE 1 END; delx := ABS(COS(az)) * var_dist * dir; dely := ABS(SIN(az)) * var_dist * dir; IF az > pi()/2 AND az < pi() OR az > 3 * pi()/2 THEN result := ST_Translate(center_pt, delx, dely) ; ELSE result := ST_Translate(center_pt, -delx, dely); END IF; ELSE result := center_pt; END IF; result := ST_Transform(result, ST_SRID(in_road)); --RAISE NOTICE 'start: %, center: %, new: %, side: %, offset: %, az: %', ST_AsText(ST_Transform(ST_StartPoint(road),ST_SRID(in_road))), ST_AsText(ST_Transform(center_pt,ST_SRID(in_road))),ST_AsText(result), in_side, in_offset_m, az; RETURN result; END; $_$ LANGUAGE plpgsql IMMUTABLE COST 10; -- needed to ban stupid warning about how we are using deprecated functions -- yada yada yada need this to work in 2.0 too bah ALTER FUNCTION interpolate_from_address(integer, character varying, character varying, geometry, character varying, double precision) SET client_min_messages='ERROR'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/reverse_geocode.sql����������������0000644�0000000�0000000�00000027300�12006123306�027105� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: reverse_geocode.sql 10149 2012-08-01 03:47:18Z robe $ /*** * * Copyright (C) 2011-2012 Regina Obe and Leo Hsu (Paragon Corporation) **/ -- This function given a point try to determine the approximate street address (norm_addy form) -- and array of cross streets, as well as interpolated points along the streets -- Use case example an address at the intersection of 3 streets: SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, pprint_addy(r.addy[3]) As st3, array_to_string(r.street, ',') FROM reverse_geocode(ST_GeomFromText('POINT(-71.057811 42.358274)',4269)) As r; --set search_path=tiger,public; CREATE OR REPLACE FUNCTION reverse_geocode(IN pt geometry, IN include_strnum_range boolean DEFAULT false, OUT intpt geometry[], OUT addy norm_addy[], OUT street character varying[]) RETURNS record AS $BODY$ DECLARE var_redge RECORD; var_state text := NULL; var_stusps text := NULL; var_countyfp text := NULL; var_addy NORM_ADDY; var_addy_alt NORM_ADDY; var_nstrnum numeric(10); var_primary_line geometry := NULL; var_primary_dist numeric(10,2) ; var_pt geometry; var_place varchar; var_county varchar; var_stmt text; var_debug boolean = get_geocode_setting('debug_reverse_geocode')::boolean; var_rating_highway integer = COALESCE(get_geocode_setting('reverse_geocode_numbered_roads')::integer,0);/**0 no preference, 1 prefer highway number, 2 prefer local name **/ var_zip varchar := NULL; var_primary_fullname varchar := ''; BEGIN --$Id: reverse_geocode.sql 10149 2012-08-01 03:47:18Z robe $ IF pt IS NULL THEN RETURN; ELSE IF ST_SRID(pt) = 4269 THEN var_pt := pt; ELSIF ST_SRID(pt) > 0 THEN var_pt := ST_Transform(pt, 4269); ELSE --If srid is unknown, assume its 4269 var_pt := ST_SetSRID(pt, 4269); END IF; var_pt := ST_SnapToGrid(var_pt, 0.00005); /** Get rid of floating point junk that would prevent intersections **/ END IF; -- Determine state tables to check -- this is needed to take advantage of constraint exclusion IF var_debug THEN RAISE NOTICE 'Get matching states start: %', clock_timestamp(); END IF; SELECT statefp, stusps INTO var_state, var_stusps FROM state WHERE ST_Intersects(the_geom, var_pt) LIMIT 1; IF var_debug THEN RAISE NOTICE 'Get matching states end: % - %', var_state, clock_timestamp(); END IF; IF var_state IS NULL THEN -- We don't have any data for this state RETURN; END IF; IF var_debug THEN RAISE NOTICE 'Get matching counties start: %', clock_timestamp(); END IF; -- locate county var_stmt := 'SELECT countyfp, name FROM county WHERE statefp = $1 AND ST_Intersects(the_geom, $2) LIMIT 1;'; EXECUTE var_stmt INTO var_countyfp, var_county USING var_state, var_pt ; --locate zip var_stmt := 'SELECT zcta5ce FROM zcta5 WHERE statefp = $1 AND ST_Intersects(the_geom, $2) LIMIT 1;'; EXECUTE var_stmt INTO var_zip USING var_state, var_pt; -- locate city IF var_zip > '' THEN var_addy.zip := var_zip ; END IF; var_stmt := 'SELECT z.name FROM place As z WHERE z.statefp = $1 AND ST_Intersects(the_geom, $2) LIMIT 1;'; EXECUTE var_stmt INTO var_place USING var_state, var_pt ; IF var_place > '' THEN var_addy.location := var_place; ELSE var_stmt := 'SELECT z.name FROM cousub As z WHERE z.statefp = $1 AND ST_Intersects(the_geom, $2) LIMIT 1;'; EXECUTE var_stmt INTO var_place USING var_state, var_pt ; IF var_place > '' THEN var_addy.location := var_place; -- ELSIF var_zip > '' THEN -- SELECT z.city INTO var_place FROM zip_lookup_base As z WHERE z.statefp = var_state AND z.county = var_county AND z.zip = var_zip LIMIT 1; -- var_addy.location := var_place; END IF; END IF; IF var_debug THEN RAISE NOTICE 'Get matching counties end: % - %',var_countyfp, clock_timestamp(); END IF; IF var_countyfp IS NULL THEN -- We don't have any data for this county RETURN; END IF; var_addy.stateAbbrev = var_stusps; -- Find the street edges that this point is closest to with tolerance of 0.005 but only consider the edge if the point is contained in the right or left face -- Then order addresses by proximity to road IF var_debug THEN RAISE NOTICE 'Get matching edges start: %', clock_timestamp(); END IF; var_stmt := ' WITH ref AS ( SELECT ' || quote_literal(var_pt::text) || '::geometry As ref_geom ) , f AS ( SELECT faces.* FROM faces CROSS JOIN ref WHERE faces.statefp = ' || quote_literal(var_state) || ' AND faces.countyfp = ' || quote_literal(var_countyfp) || ' AND ST_Intersects(faces.the_geom, ref_geom) ), e AS ( SELECT edges.tlid , edges.statefp, edges.the_geom, CASE WHEN edges.tfidr = f.tfid THEN ''R'' WHEN edges.tfidl = f.tfid THEN ''L'' ELSE NULL END::varchar As eside, ST_ClosestPoint(edges.the_geom,ref_geom) As center_pt, ref_geom FROM edges INNER JOIN f ON (f.statefp = edges.statefp AND (edges.tfidr = f.tfid OR edges.tfidl = f.tfid)) CROSS JOIN ref WHERE edges.statefp = ' || quote_literal(var_state) || ' AND edges.countyfp = ' || quote_literal(var_countyfp) || ' AND ST_DWithin(edges.the_geom, ref.ref_geom, 0.01) AND (edges.mtfcc LIKE ''S%'') --only consider streets and roads ) , ea AS (SELECT e.statefp, e.tlid, a.fromhn, a.tohn, e.center_pt, ref_geom, a.zip, a.side, e.the_geom FROM e LEFT JOIN addr As a ON (a.statefp = ' || quote_literal(var_state) || ' AND e.tlid = a.tlid and e.eside = a.side) ) SELECT * FROM (SELECT DISTINCT ON(tlid,side) foo.fullname, foo.streetname, foo.streettypeabbrev, foo.zip, foo.center_pt, side, to_number(fromhn, ''999999'') As fromhn, to_number(tohn, ''999999'') As tohn, ST_GeometryN(ST_Multi(line),1) As line, dist FROM (SELECT e.tlid, e.the_geom As line, n.fullname, COALESCE(n.prequalabr || '' '','''') || n.name AS streetname, n.predirabrv, COALESCE(suftypabrv, pretypabrv) As streettypeabbrev, n.sufdirabrv, e.zip, e.side, e.fromhn, e.tohn , e.center_pt, ST_Distance_Sphere(ST_SetSRID(e.center_pt,4326),ST_SetSRID(ref_geom,4326)) As dist FROM ea AS e LEFT JOIN (SELECT featnames.* FROM featnames WHERE featnames.statefp = ' || quote_literal(var_state) ||' ) AS n ON (n.statefp = e.statefp AND n.tlid = e.tlid) ORDER BY dist LIMIT 50 ) As foo ORDER BY foo.tlid, foo.side, '; -- for numbered street/road use var_rating_highway to determine whether to prefer numbered or not (0 no pref, 1 prefer numbered, 2 prefer named) var_stmt := var_stmt || ' CASE $1 WHEN 0 THEN 0 WHEN 1 THEN CASE WHEN foo.fullname ~ ''[0-9]+'' THEN 0 ELSE 1 END ELSE CASE WHEN foo.fullname > '''' AND NOT (foo.fullname ~ ''[0-9]+'') THEN 0 ELSE 1 END END '; var_stmt := var_stmt || ', foo.fullname ASC NULLS LAST, dist LIMIT 50) As f ORDER BY f.dist, CASE WHEN fullname > '''' THEN 0 ELSE 1 END '; --don't bother penalizing for distance if less than 20 meters IF var_debug = true THEN RAISE NOTICE 'Statement 1: %', replace(var_stmt, '$1', var_rating_highway::text); END IF; FOR var_redge IN EXECUTE var_stmt USING var_rating_highway LOOP IF var_debug THEN RAISE NOTICE 'Start Get matching edges loop: %,%', var_primary_line, clock_timestamp(); END IF; IF var_primary_line IS NULL THEN --this is the first time in the loop and our primary guess var_primary_line := var_redge.line; var_primary_dist := var_redge.dist; END IF; IF var_redge.fullname IS NOT NULL AND COALESCE(var_primary_fullname,'') = '' THEN -- this is the first non-blank name we are hitting grab info var_primary_fullname := var_redge.fullname; var_addy.streetname = var_redge.streetname; var_addy.streettypeabbrev := var_redge.streettypeabbrev; END IF; IF ST_Intersects(var_redge.line, var_primary_line) THEN var_addy.streetname := var_redge.streetname; var_addy.streettypeabbrev := var_redge.streettypeabbrev; var_addy.address := var_nstrnum; IF var_redge.fromhn IS NOT NULL THEN --interpolate the number -- note that if fromhn > tohn we will be subtracting which is what we want var_nstrnum := (var_redge.fromhn + ST_Line_Locate_Point(var_redge.line, var_pt)*(var_redge.tohn - var_redge.fromhn))::numeric(10); -- The odd even street number side of street rule IF (var_nstrnum % 2) != (var_redge.tohn % 2) THEN var_nstrnum := CASE WHEN var_nstrnum + 1 NOT BETWEEN var_redge.fromhn AND var_redge.tohn THEN var_nstrnum - 1 ELSE var_nstrnum + 1 END; END IF; var_addy.address := var_nstrnum; END IF; IF var_redge.zip > '' THEN var_addy.zip := var_redge.zip; ELSE var_addy.zip := var_zip; END IF; -- IF var_redge.location > '' THEN -- var_addy.location := var_redge.location; -- ELSE -- var_addy.location := var_place; -- END IF; -- This is a cross streets - only add if not the primary adress street IF var_redge.fullname > '' AND var_redge.fullname <> var_primary_fullname THEN street := array_append(street, (CASE WHEN include_strnum_range THEN COALESCE(var_redge.fromhn::varchar, '')::varchar || COALESCE(' - ' || var_redge.tohn::varchar,'')::varchar || ' '::varchar ELSE '' END::varchar || COALESCE(var_redge.fullname::varchar,''))::varchar); END IF; -- consider this a potential address IF (var_redge.dist < var_primary_dist*1.1 OR var_redge.dist < 20) THEN -- We only consider this a possible address if it is really close to our point intpt := array_append(intpt,var_redge.center_pt); -- note that ramps don't have names or addresses but they connect at the edge of a range -- so for ramps the address of connecting is still useful IF var_debug THEN RAISE NOTICE 'Current addresses: %, last added, %, street: %, %', addy, var_addy, var_addy.streetname, clock_timestamp(); END IF; addy := array_append(addy, var_addy); -- Use current values streetname for previous value if previous value has no streetname IF var_addy.streetname > '' AND array_upper(addy,1) > 1 AND COALESCE(addy[array_upper(addy,1) - 1].streetname, '') = '' THEN -- the match is probably an offshoot of some sort -- replace prior entry with streetname of new if prior had no streetname var_addy_alt := addy[array_upper(addy,1)- 1]; IF var_debug THEN RAISE NOTICE 'Replacing answer : %, %', addy[array_upper(addy,1) - 1], clock_timestamp(); END IF; var_addy_alt.streetname := var_addy.streetname; var_addy_alt.streettypeabbrev := var_addy.streettypeabbrev; addy[array_upper(addy,1) - 1 ] := var_addy_alt; IF var_debug THEN RAISE NOTICE 'Replaced with : %, %', var_addy_alt, clock_timestamp(); END IF; END IF; IF var_debug THEN RAISE NOTICE 'End Get matching edges loop: %', clock_timestamp(); RAISE NOTICE 'Final addresses: %, %', addy, clock_timestamp(); END IF; END IF; END IF; END LOOP; -- not matching roads or streets, just return basic info IF NOT FOUND THEN addy := array_append(addy,var_addy); IF var_debug THEN RAISE NOTICE 'No address found: adding: % street: %, %', var_addy, var_addy.streetname, clock_timestamp(); END IF; END IF; IF var_debug THEN RAISE NOTICE 'current array count : %, %', array_upper(addy,1), clock_timestamp(); END IF; RETURN; END; $BODY$ LANGUAGE plpgsql STABLE COST 1000; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/includes_address.sql���������������0000644�0000000�0000000�00000005123�11722777314�027301� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: includes_address.sql 9324 2012-02-27 22:08:12Z pramsey $ -- This function requires the addresses to be grouped, such that the second and -- third arguments are from one side of the street, and the fourth and fifth -- from the other. CREATE OR REPLACE FUNCTION includes_address( given_address INTEGER, addr1 INTEGER, addr2 INTEGER, addr3 INTEGER, addr4 INTEGER ) RETURNS BOOLEAN AS $_$ DECLARE lmaxaddr INTEGER := -1; rmaxaddr INTEGER := -1; lminaddr INTEGER := -1; rminaddr INTEGER := -1; maxaddr INTEGER := -1; minaddr INTEGER := -1; verbose BOOLEAN := false; BEGIN IF addr1 IS NOT NULL THEN maxaddr := addr1; minaddr := addr1; lmaxaddr := addr1; lminaddr := addr1; END IF; IF addr2 IS NOT NULL THEN IF addr2 < minaddr OR minaddr = -1 THEN minaddr := addr2; END IF; IF addr2 > maxaddr OR maxaddr = -1 THEN maxaddr := addr2; END IF; IF addr2 > lmaxaddr OR lmaxaddr = -1 THEN lmaxaddr := addr2; END IF; IF addr2 < lminaddr OR lminaddr = -1 THEN lminaddr := addr2; END IF; END IF; IF addr3 IS NOT NULL THEN IF addr3 < minaddr OR minaddr = -1 THEN minaddr := addr3; END IF; IF addr3 > maxaddr OR maxaddr = -1 THEN maxaddr := addr3; END IF; rmaxaddr := addr3; rminaddr := addr3; END IF; IF addr4 IS NOT NULL THEN IF addr4 < minaddr OR minaddr = -1 THEN minaddr := addr4; END IF; IF addr4 > maxaddr OR maxaddr = -1 THEN maxaddr := addr4; END IF; IF addr4 > rmaxaddr OR rmaxaddr = -1 THEN rmaxaddr := addr4; END IF; IF addr4 < rminaddr OR rminaddr = -1 THEN rminaddr := addr4; END IF; END IF; IF minaddr = -1 OR maxaddr = -1 THEN -- No addresses were non-null, return FALSE (arbitrary) RETURN FALSE; ELSIF given_address >= minaddr AND given_address <= maxaddr THEN -- The address is within the given range IF given_address >= lminaddr AND given_address <= lmaxaddr THEN -- This checks to see if the address is on this side of the -- road, ie if the address is even, the street range must be even IF (given_address % 2) = (lminaddr % 2) OR (given_address % 2) = (lmaxaddr % 2) THEN RETURN TRUE; END IF; END IF; IF given_address >= rminaddr AND given_address <= rmaxaddr THEN -- See above IF (given_address % 2) = (rminaddr % 2) OR (given_address % 2) = (rmaxaddr % 2) THEN RETURN TRUE; END IF; END IF; END IF; -- The address is not within the range RETURN FALSE; END; $_$ LANGUAGE plpgsql IMMUTABLE COST 100; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode/geocode_address.sql����������������0000644�0000000�0000000�00000060345�12026615336�027100� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: geocode_address.sql 10310 2012-09-20 13:32:14Z robe $ --DROP FUNCTION IF EXISTS geocode_address(norm_addy, integer , geometry); CREATE OR REPLACE FUNCTION geocode_address(IN parsed norm_addy, max_results integer DEFAULT 10, restrict_geom geometry DEFAULT NULL, OUT addy norm_addy, OUT geomout geometry, OUT rating integer) RETURNS SETOF record AS $$ DECLARE results RECORD; zip_info RECORD; stmt VARCHAR; in_statefp VARCHAR; exact_street boolean := false; var_debug boolean := get_geocode_setting('debug_geocode_address')::boolean; var_sql text := ''; var_n integer := 0; var_restrict_geom geometry := NULL; var_bfilter text := null; var_bestrating integer := NULL; BEGIN IF parsed.streetName IS NULL THEN -- A street name must be given. Think about it. RETURN; END IF; ADDY.internal := parsed.internal; IF parsed.stateAbbrev IS NOT NULL THEN in_statefp := statefp FROM state_lookup As s WHERE s.abbrev = parsed.stateAbbrev; END IF; IF in_statefp IS NULL THEN --if state is not provided or was bogus, just pick the first where the zip is present in_statefp := statefp FROM zip_lookup_base WHERE zip = substring(parsed.zip,1,5) LIMIT 1; END IF; IF restrict_geom IS NOT NULL THEN IF ST_SRID(restrict_geom) < 1 OR ST_SRID(restrict_geom) = 4236 THEN -- basically has no srid or if wgs84 close enough to NAD 83 -- assume same as data var_restrict_geom = ST_SetSRID(restrict_geom,4269); ELSE --transform and snap var_restrict_geom = ST_SnapToGrid(ST_Transform(restrict_geom, 4269), 0.000001); END IF; END IF; var_bfilter := ' SELECT zcta5ce FROM zcta5 AS zc WHERE zc.statefp = ' || quote_nullable(in_statefp) || ' AND ST_Intersects(zc.the_geom, ' || quote_literal(var_restrict_geom::text) || '::geometry) ' ; SELECT NULL::varchar[] As zip INTO zip_info; IF parsed.zip IS NOT NULL THEN -- Create an array of 5 zips containing 2 before and 2 after our target if our streetName is longer IF length(parsed.streetName) > 7 THEN SELECT zip_range(parsed.zip, -2, 2) As zip INTO zip_info; ELSE -- If our street name is short, we'll run into many false positives so reduce our zip window a bit SELECT zip_range(parsed.zip, -1, 1) As zip INTO zip_info; END IF; --This signals bad zip input, only use the range if it falls in the place zip range IF length(parsed.zip) != 5 AND parsed.location IS NOT NULL THEN stmt := 'SELECT ARRAY(SELECT DISTINCT zip FROM zip_lookup_base AS z WHERE z.statefp = $1 AND z.zip = ANY($3) AND lower(z.city) LIKE lower($2) || ''%''::text ' || COALESCE(' AND z.zip IN(' || var_bfilter || ')', '') || ')::varchar[] AS zip ORDER BY zip' ; EXECUTE stmt INTO zip_info USING in_statefp, parsed.location, zip_info.zip; IF var_debug THEN RAISE NOTICE 'Bad zip newzip range: %', quote_nullable(zip_info.zip); END IF; IF array_upper(zip_info.zip,1) = 0 OR array_upper(zip_info.zip,1) IS NULL THEN -- zips do not fall in city ignore them IF var_debug THEN RAISE NOTICE 'Ignore new zip range that is bad too: %', quote_nullable(zip_info.zip); END IF; zip_info.zip = NULL::varchar[]; END IF; END IF; END IF; IF zip_info.zip IS NULL THEN -- If no good zips just include all for the location -- We do a like instead of absolute check since tiger sometimes tacks things like Town at end of places stmt := 'SELECT ARRAY(SELECT DISTINCT zip FROM zip_lookup_base AS z WHERE z.statefp = $1 AND lower(z.city) LIKE lower($2) || ''%''::text ' || COALESCE(' AND z.zip IN(' || var_bfilter || ')', '') || ')::varchar[] AS zip ORDER BY zip' ; EXECUTE stmt INTO zip_info USING in_statefp, parsed.location; IF var_debug THEN RAISE NOTICE 'Zip range based on only considering city: %', quote_nullable(zip_info.zip); END IF; END IF; -- Brute force -- try to find perfect matches and exit if we have one -- we first pull all the names in zip and rank by if zip matches input zip and streetname matches street stmt := 'WITH a AS ( SELECT * FROM (SELECT f.*, ad.side, ad.zip, ad.fromhn, ad.tohn, RANK() OVER(ORDER BY ' || CASE WHEN parsed.zip > '' THEN ' diff_zip(ad.zip,$7) + ' ELSE '' END ||' CASE WHEN lower(f.name) = lower($2) THEN 0 ELSE levenshtein_ignore_case(f.name, lower($2) ) END + levenshtein_ignore_case(f.fullname, lower($2 || '' '' || COALESCE($4,'''')) ) + CASE WHEN (greatest_hn(ad.fromhn,ad.tohn) % 2)::integer = ($1 % 2)::integer THEN 0 ELSE 1 END + CASE WHEN $1::integer BETWEEN least_hn(ad.fromhn,ad.tohn) AND greatest_hn(ad.fromhn, ad.tohn) THEN 0 ELSE 4 END + CASE WHEN lower($4) = lower(f.suftypabrv) OR lower($4) = lower(f.pretypabrv) THEN 0 ELSE 1 END + rate_attributes($5, f.predirabrv,' || ' $2, f.name , $4,' || ' suftypabrv , $6,' || ' sufdirabrv, prequalabr) ) As rank FROM featnames As f INNER JOIN addr As ad ON (f.tlid = ad.tlid) WHERE $10 = f.statefp AND $10 = ad.statefp ' || CASE WHEN length(parsed.streetName) > 5 THEN ' AND (lower(f.fullname) LIKE (COALESCE($5 || '' '','''') || lower($2) || ''%'')::text OR lower(f.name) = lower($2) OR soundex(f.name) = soundex($2) ) ' ELSE ' AND lower(f.name) = lower($2) ' END || CASE WHEN zip_info.zip IS NOT NULL THEN ' AND ( ad.zip = ANY($9::varchar[]) ) ' ELSE '' END || ' ) AS foo ORDER BY rank LIMIT ' || max_results*3 || ' ) SELECT * FROM ( SELECT DISTINCT ON (sub.predirabrv,sub.fename,COALESCE(sub.suftypabrv, sub.pretypabrv) ,sub.sufdirabrv,sub.place,s.stusps,sub.zip)' || ' sub.predirabrv as fedirp,' || ' sub.fename,' || ' COALESCE(sub.suftypabrv, sub.pretypabrv) as fetype,' || ' sub.sufdirabrv as fedirs,' || ' sub.place ,' || ' s.stusps as state,' || ' sub.zip as zip,' || ' interpolate_from_address($1, sub.fromhn,' || ' sub.tohn, sub.the_geom, sub.side) as address_geom,' || ' sub.sub_rating + ' || CASE WHEN parsed.zip > '' THEN ' least(coalesce(diff_zip($7 , sub.zip),0), 10)::integer ' ELSE '1' END::text || ' + coalesce(levenshtein_ignore_case($3, sub.place),5)' || ' as sub_rating,' || ' sub.exact_address as exact_address, sub.tohn, sub.fromhn ' || ' FROM (' || ' SELECT tlid, predirabrv, COALESCE(b.prequalabr || '' '','''' ) || b.name As fename, suftypabrv, sufdirabrv, fromhn, tohn, side, zip, rate_attributes($5, predirabrv,' || ' $2, b.name , $4,' || ' suftypabrv , $6,' || ' sufdirabrv, prequalabr) + ' || ' CASE ' || ' WHEN $1::integer IS NULL OR b.fromhn IS NULL THEN 20' || ' WHEN $1::integer >= least_hn(b.fromhn, b.tohn) ' || ' AND $1::integer <= greatest_hn(b.fromhn,b.tohn)' || ' AND ($1::integer % 2) = (to_number(b.fromhn,''99999999'') % 2)::integer' || ' THEN 0' || ' WHEN $1::integer >= least_hn(b.fromhn,b.tohn)' || ' AND $1::integer <= greatest_hn(b.fromhn,b.tohn)' || ' THEN 2' || ' ELSE' || ' ((1.0 - ' || '(least_hn($1::text,least_hn(b.fromhn,b.tohn)::text)::numeric /' || ' (greatest(1,greatest_hn($1::text,greatest_hn(b.fromhn,b.tohn)::text))) )' || ') * 5)::integer + 5' || ' END' || ' as sub_rating,$1::integer >= least_hn(b.fromhn,b.tohn) ' || ' AND $1::integer <= greatest_hn(b.fromhn,b.tohn) ' || ' AND ($1 % 2)::numeric::integer = (to_number(b.fromhn,''99999999'') % 2)' || ' as exact_address, b.name, b.prequalabr, b.pretypabrv, b.tfidr, b.tfidl, b.the_geom, b.place ' || ' FROM (SELECT a.tlid, a.fullname, a.name, a.predirabrv, a.suftypabrv, a.sufdirabrv, a.prequalabr, a.pretypabrv, b.the_geom, tfidr, tfidl, a.side , a.fromhn, a.tohn, a.zip, p.name as place FROM a INNER JOIN edges As b ON (a.statefp = b.statefp AND a.tlid = b.tlid ' || ') INNER JOIN faces AS f ON ($10 = f.statefp AND ( (b.tfidl = f.tfid AND a.side = ''L'') OR (b.tfidr = f.tfid AND a.side = ''R'' ) )) INNER JOIN place p ON ($10 = p.statefp AND f.placefp = p.placefp ' || CASE WHEN parsed.location > '' AND zip_info.zip IS NULL THEN ' AND ( lower(p.name) LIKE (lower($3::text) || ''%'') ) ' ELSE '' END || ') WHERE a.statefp = $10 AND b.statefp = $10 ' || CASE WHEN var_restrict_geom IS NOT NULL THEN ' AND ST_Intersects(b.the_geom, $8::geometry) ' ELSE '' END || ' ) As b ORDER BY 10 , 11 DESC LIMIT 20 ) AS sub JOIN state s ON ($10 = s.statefp) ORDER BY 1,2,3,4,5,6,7,9 LIMIT 20) As foo ORDER BY sub_rating, exact_address DESC LIMIT ' || max_results ; IF var_debug THEN RAISE NOTICE 'stmt: %', replace(replace( replace( replace( replace(replace( replace(replace(replace(replace(stmt, '$10', quote_nullable(in_statefp) ), '$2',quote_nullable(parsed.streetName)),'$3', quote_nullable(parsed.location)), '$4', quote_nullable(parsed.streetTypeAbbrev) ), '$5', quote_nullable(parsed.preDirAbbrev) ), '$6', quote_nullable(parsed.postDirAbbrev) ), '$7', quote_nullable(parsed.zip) ), '$8', quote_nullable(var_restrict_geom::text) ), '$9', quote_nullable(zip_info.zip) ), '$1', quote_nullable(parsed.address) ); --RAISE NOTICE 'PREPARE query_base_geo(integer, varchar,varchar,varchar,varchar,varchar,varchar,geometry,varchar[]) As %', stmt; --RAISE NOTICE 'EXECUTE query_base_geo(%,%,%,%,%,%,%,%,%); ', parsed.address,quote_nullable(parsed.streetName), quote_nullable(parsed.location), quote_nullable(parsed.streetTypeAbbrev), quote_nullable(parsed.preDirAbbrev), quote_nullable(parsed.postDirAbbrev), quote_nullable(parsed.zip), quote_nullable(var_restrict_geom::text), quote_nullable(zip_info.zip); --RAISE NOTICE 'DEALLOCATE query_base_geo;'; END IF; FOR results IN EXECUTE stmt USING parsed.address,parsed.streetName, parsed.location, parsed.streetTypeAbbrev, parsed.preDirAbbrev, parsed.postDirAbbrev, parsed.zip, var_restrict_geom, zip_info.zip, in_statefp LOOP -- If we found a match with an exact street, then don't bother -- trying to do non-exact matches exact_street := true; IF results.exact_address THEN ADDY.address := parsed.address; ELSE ADDY.address := CASE WHEN parsed.address > to_number(results.tohn,'99999999') AND parsed.address > to_number(results.fromhn, '99999999') THEN greatest_hn(results.fromhn, results.tohn)::integer ELSE least_hn(results.fromhn, results.tohn)::integer END ; END IF; ADDY.preDirAbbrev := results.fedirp; ADDY.streetName := results.fename; ADDY.streetTypeAbbrev := results.fetype; ADDY.postDirAbbrev := results.fedirs; ADDY.location := results.place; ADDY.stateAbbrev := results.state; ADDY.zip := results.zip; ADDY.parsed := TRUE; GEOMOUT := results.address_geom; RATING := results.sub_rating; var_n := var_n + 1; IF var_bestrating IS NULL THEN var_bestrating := RATING; /** the first record to come is our best rating we will ever get **/ END IF; -- Only consider matches with decent ratings IF RATING < 90 THEN RETURN NEXT; END IF; -- If we get an exact match, then just return that IF RATING = 0 THEN RETURN; END IF; IF var_n >= max_results THEN --we have exceeded our desired limit RETURN; END IF; END LOOP; IF var_bestrating < 30 THEN --if we already have a match with a rating of 30 or less, its unlikely we can do any better RETURN; END IF; -- There are a couple of different things to try, from the highest preference and falling back -- to lower-preference options. -- We start out with zip-code matching, where the zip code could possibly be in more than one -- state. We loop through each state its in. -- Next, we try to find the location in our side-table, which is based off of the 'place' data exact first then sounds like -- Next, we look up the location/city and use the zip code which is returned from that -- Finally, if we didn't get a zip code or a city match, we fall back to just a location/street -- lookup to try and find *something* useful. -- In the end, we *have* to find a statefp, one way or another. var_sql := ' SELECT statefp,location,a.zip,exact,min(pref) FROM (SELECT zip_state.statefp as statefp,$1 as location, true As exact, ARRAY[zip_state.zip] as zip,1 as pref FROM zip_state WHERE zip_state.zip = $2 AND (' || quote_nullable(in_statefp) || ' IS NULL OR zip_state.statefp = ' || quote_nullable(in_statefp) || ') ' || COALESCE(' AND zip_state.zip IN(' || var_bfilter || ')', '') || ' UNION SELECT zip_state_loc.statefp,zip_state_loc.place As location,false As exact, array_agg(zip_state_loc.zip) AS zip,1 + abs(COALESCE(diff_zip(max(zip), $2),0) - COALESCE(diff_zip(min(zip), $2),0)) As pref FROM zip_state_loc WHERE zip_state_loc.statefp = ' || quote_nullable(in_statefp) || ' AND lower($1) = lower(zip_state_loc.place) ' || COALESCE(' AND zip_state_loc.zip IN(' || var_bfilter || ')', '') || ' GROUP BY zip_state_loc.statefp,zip_state_loc.place UNION SELECT zip_state_loc.statefp,zip_state_loc.place As location,false As exact, array_agg(zip_state_loc.zip),3 FROM zip_state_loc WHERE zip_state_loc.statefp = ' || quote_nullable(in_statefp) || ' AND soundex($1) = soundex(zip_state_loc.place) GROUP BY zip_state_loc.statefp,zip_state_loc.place UNION SELECT zip_lookup_base.statefp,zip_lookup_base.city As location,false As exact, array_agg(zip_lookup_base.zip),4 FROM zip_lookup_base WHERE zip_lookup_base.statefp = ' || quote_nullable(in_statefp) || ' AND (soundex($1) = soundex(zip_lookup_base.city) OR soundex($1) = soundex(zip_lookup_base.county)) GROUP BY zip_lookup_base.statefp,zip_lookup_base.city UNION SELECT ' || quote_nullable(in_statefp) || ' As statefp,$1 As location,false As exact,NULL, 5) as a ' ' WHERE a.statefp IS NOT NULL GROUP BY statefp,location,a.zip,exact, pref ORDER BY exact desc, pref, zip'; /** FOR zip_info IN SELECT statefp,location,zip,exact,min(pref) FROM (SELECT zip_state.statefp as statefp,parsed.location as location, true As exact, ARRAY[zip_state.zip] as zip,1 as pref FROM zip_state WHERE zip_state.zip = parsed.zip AND (in_statefp IS NULL OR zip_state.statefp = in_statefp) UNION SELECT zip_state_loc.statefp,parsed.location,false As exact, array_agg(zip_state_loc.zip),2 + diff_zip(zip[1], parsed.zip) FROM zip_state_loc WHERE zip_state_loc.statefp = in_statefp AND lower(parsed.location) = lower(zip_state_loc.place) GROUP BY zip_state_loc.statefp,parsed.location UNION SELECT zip_state_loc.statefp,parsed.location,false As exact, array_agg(zip_state_loc.zip),3 FROM zip_state_loc WHERE zip_state_loc.statefp = in_statefp AND soundex(parsed.location) = soundex(zip_state_loc.place) GROUP BY zip_state_loc.statefp,parsed.location UNION SELECT zip_lookup_base.statefp,parsed.location,false As exact, array_agg(zip_lookup_base.zip),4 FROM zip_lookup_base WHERE zip_lookup_base.statefp = in_statefp AND (soundex(parsed.location) = soundex(zip_lookup_base.city) OR soundex(parsed.location) = soundex(zip_lookup_base.county)) GROUP BY zip_lookup_base.statefp,parsed.location UNION SELECT in_statefp,parsed.location,false As exact,NULL, 5) as a --JOIN (VALUES (true),(false)) as b(exact) on TRUE WHERE statefp IS NOT NULL GROUP BY statefp,location,zip,exact, pref ORDER BY exact desc, pref, zip **/ FOR zip_info IN EXECUTE var_sql USING parsed.location, parsed.zip LOOP -- For zip distance metric we consider both the distance of zip based on numeric as well aa levenshtein -- We use the prequalabr (these are like Old, that may or may not appear in front of the street name) -- We also treat pretypabr as fetype since in normalize we treat these as streetypes and highways usually have the type here -- In pprint_addy we changed to put it in front if it is a is_hw type stmt := 'SELECT DISTINCT ON (sub.predirabrv,sub.fename,COALESCE(sub.suftypabrv, sub.pretypabrv) ,sub.sufdirabrv,coalesce(p.name,zip.city,cs.name,co.name),s.stusps,sub.zip)' || ' sub.predirabrv as fedirp,' || ' sub.fename,' || ' COALESCE(sub.suftypabrv, sub.pretypabrv) as fetype,' || ' sub.sufdirabrv as fedirs,' || ' coalesce(p.name,zip.city,cs.name,co.name)::varchar as place,' || ' s.stusps as state,' || ' sub.zip as zip,' || ' interpolate_from_address($1, sub.fromhn,' || ' sub.tohn, e.the_geom, sub.side) as address_geom,' || ' sub.sub_rating + ' || CASE WHEN parsed.zip > '' THEN ' least((coalesce(diff_zip($7 , sub.zip),0) *1.00/2)::integer, coalesce(levenshtein_ignore_case($7, sub.zip),0) ) ' ELSE '3' END::text || ' + coalesce(least(levenshtein_ignore_case($3, coalesce(p.name,zip.city,cs.name,co.name)), levenshtein_ignore_case($3, coalesce(cs.name,co.name))),5)' || ' as sub_rating,' || ' sub.exact_address as exact_address ' || ' FROM (' || ' SELECT a.tlid, predirabrv, COALESCE(a.prequalabr || '' '','''' ) || a.name As fename, suftypabrv, sufdirabrv, fromhn, tohn, side, a.statefp, zip, rate_attributes($5, a.predirabrv,' || ' $2, a.name , $4,' || ' a.suftypabrv , $6,' || ' a.sufdirabrv, a.prequalabr) + ' || ' CASE ' || ' WHEN $1::integer IS NULL OR b.fromhn IS NULL THEN 20' || ' WHEN $1::integer >= least_hn(b.fromhn, b.tohn) ' || ' AND $1::integer <= greatest_hn(b.fromhn,b.tohn)' || ' AND ($1::integer % 2) = (to_number(b.fromhn,''99999999'') % 2)::integer' || ' THEN 0' || ' WHEN $1::integer >= least_hn(b.fromhn,b.tohn)' || ' AND $1::integer <= greatest_hn(b.fromhn,b.tohn)' || ' THEN 2' || ' ELSE' || ' ((1.0 - ' || '(least_hn($1::text,least_hn(b.fromhn,b.tohn)::text)::numeric /' || ' greatest(1,greatest_hn($1::text,greatest_hn(b.fromhn,b.tohn)::text)))' || ') * 5)::integer + 5' || ' END' || ' as sub_rating,$1::integer >= least_hn(b.fromhn,b.tohn) ' || ' AND $1::integer <= greatest_hn(b.fromhn,b.tohn) ' || ' AND ($1 % 2)::numeric::integer = (to_number(b.fromhn,''99999999'') % 2)' || ' as exact_address, a.name, a.prequalabr, a.pretypabrv ' || ' FROM featnames a join addr b ON (a.tlid = b.tlid AND a.statefp = b.statefp )' || ' WHERE' || ' a.statefp = ' || quote_literal(zip_info.statefp) || ' AND a.mtfcc LIKE ''S%'' ' || coalesce(' AND b.zip IN (''' || array_to_string(zip_info.zip,''',''') || ''') ','') || CASE WHEN zip_info.exact THEN ' AND ( lower($2) = lower(a.name) OR ( a.prequalabr > '''' AND trim(lower($2), lower(a.prequalabr) || '' '') = lower(a.name) ) OR numeric_streets_equal($2, a.name) ) ' ELSE ' AND ( soundex($2) = soundex(a.name) OR ( (length($2) > 15 or (length($2) > 7 AND a.prequalabr > '''') ) AND lower(a.fullname) LIKE lower(substring($2,1,15)) || ''%'' ) OR numeric_streets_equal($2, a.name) ) ' END || ' ORDER BY 11' || ' LIMIT 20' || ' ) AS sub' || ' JOIN edges e ON (' || quote_literal(zip_info.statefp) || ' = e.statefp AND sub.tlid = e.tlid AND e.mtfcc LIKE ''S%'' ' || CASE WHEN var_restrict_geom IS NOT NULL THEN ' AND ST_Intersects(e.the_geom, $8) ' ELSE '' END || ') ' || ' JOIN state s ON (' || quote_literal(zip_info.statefp) || ' = s.statefp)' || ' JOIN faces f ON (' || quote_literal(zip_info.statefp) || ' = f.statefp AND (e.tfidl = f.tfid OR e.tfidr = f.tfid))' || ' LEFT JOIN zip_lookup_base zip ON (sub.zip = zip.zip AND zip.statefp=' || quote_literal(zip_info.statefp) || ')' || ' LEFT JOIN place p ON (' || quote_literal(zip_info.statefp) || ' = p.statefp AND f.placefp = p.placefp)' || ' LEFT JOIN county co ON (' || quote_literal(zip_info.statefp) || ' = co.statefp AND f.countyfp = co.countyfp)' || ' LEFT JOIN cousub cs ON (' || quote_literal(zip_info.statefp) || ' = cs.statefp AND cs.cosbidfp = sub.statefp || co.countyfp || f.cousubfp)' || ' WHERE' || ' ( (sub.side = ''L'' and e.tfidl = f.tfid) OR (sub.side = ''R'' and e.tfidr = f.tfid) ) ' || ' ORDER BY 1,2,3,4,5,6,7,9' || ' LIMIT 10' ; IF var_debug THEN RAISE NOTICE '%', stmt; RAISE NOTICE 'PREPARE query_base_geo(integer, varchar,varchar,varchar,varchar,varchar,varchar,geometry) As %', stmt; RAISE NOTICE 'EXECUTE query_base_geo(%,%,%,%,%,%,%,%); ', parsed.address,quote_nullable(parsed.streetName), quote_nullable(parsed.location), quote_nullable(parsed.streetTypeAbbrev), quote_nullable(parsed.preDirAbbrev), quote_nullable(parsed.postDirAbbrev), quote_nullable(parsed.zip), quote_nullable(var_restrict_geom::text); RAISE NOTICE 'DEALLOCATE query_base_geo;'; END IF; -- If we got an exact street match then when we hit the non-exact -- set of tests, just drop out. IF NOT zip_info.exact AND exact_street THEN RETURN; END IF; FOR results IN EXECUTE stmt USING parsed.address,parsed.streetName, parsed.location, parsed.streetTypeAbbrev, parsed.preDirAbbrev, parsed.postDirAbbrev, parsed.zip, var_restrict_geom LOOP -- If we found a match with an exact street, then don't bother -- trying to do non-exact matches IF zip_info.exact THEN exact_street := true; END IF; IF results.exact_address THEN ADDY.address := parsed.address; ELSE ADDY.address := NULL; END IF; ADDY.preDirAbbrev := results.fedirp; ADDY.streetName := results.fename; ADDY.streetTypeAbbrev := results.fetype; ADDY.postDirAbbrev := results.fedirs; ADDY.location := results.place; ADDY.stateAbbrev := results.state; ADDY.zip := results.zip; ADDY.parsed := TRUE; GEOMOUT := results.address_geom; RATING := results.sub_rating; var_n := var_n + 1; -- If our ratings go above 99 exit because its a really bad match IF RATING > 99 THEN RETURN; END IF; RETURN NEXT; -- If we get an exact match, then just return that IF RATING = 0 THEN RETURN; END IF; END LOOP; IF var_n > max_results THEN --we have exceeded our desired limit RETURN; END IF; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' STABLE COST 1000 ROWS 50; ALTER FUNCTION geocode_address(IN norm_addy, IN integer, IN geometry) SET join_collapse_limit='2'; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/create_geocode.sh��������������������������0000755�0000000�0000000�00000002112�12217742511�025111� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # $Id: create_geocode.sh 11969 2013-09-23 04:36:25Z robe $ PGPORT=5432 PGHOST=localhost PGUSER=postgres PGPASSWORD=yourpasswordhere THEDB=geocoder PSQL_CMD=/usr/bin/psql PGCONTRIB=/usr/share/postgresql/contrib #if you are on 9.1+ use the CREATE EXTENSION syntax instead ${PSQL_CMD} -d "${THEDB}" -f "${PGCONTRIB}/fuzzystrmatch.sql" #${PSQL_CMD} -d "${THEDB}" -c "CREATE EXTENSION fuzzystrmatch" ${PSQL_CMD} -d "${THEDB}" -c "CREATE SCHEMA tiger" #unremark this next line and edit if you want the search paths set as part of the install #${PSQL_CMD} -d "${THEDB}" -c "ALTER DATABASE ${THEDB} SET search_path=public, tiger;" #${PSQL_CMD} -d "${THEDB}" -f "tables/lookup_tables_2010.sql" ${PSQL_CMD} -d "${THEDB}" -c "CREATE SCHEMA tiger_data" ${PSQL_CMD} -d "${THEDB}" -f "create_geocode.sql" ${PSQL_CMD} -d "${THEDB}" -f "tiger_loader_2013.sql" ${PSQL_CMD} -d "${THEDB}" -f "census_loader.sql" ${PSQL_CMD} -d "${THEDB}" -c "SELECT tiger.create_census_base_tables();" ${PSQL_CMD} -d "${THEDB}" -c "CREATE INDEX idx_tiger_addr_least_address ON addr USING btree (least_hn(fromhn,tohn));"������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/topology/����������������������������������0000755�0000000�0000000�00000000000�12317530606�023503� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/topology/tiger_topology_loader.sql���������0000644�0000000�0000000�00000022275�11722777314�030640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/******************************************************************* * $Id: tiger_topology_loader.sql 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2011 Leo Hsu and Regina Obe <lr@pcorp.us> * Paragon Corporation * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * * This file contains helper functions for loading tiger data * into postgis topology structure **********************************************************************/ /** topology_load_tiger: Will load all edges, faces, nodes into * topology named toponame * that intersect the specified region * region_type: 'place', 'county' * region_id: the respective fully qualified geoid * place - plcidfp * county - cntyidfp * USE CASE: * The following will create a topology called topo_boston * in Mass State Plane feet and load Boston, MA tiger data * with tolerance of 1 foot * SELECT topology.DropTopology('topo_boston'); * SELECT topology.CreateTopology('topo_boston', 2249,0.25); * SELECT tiger.topology_load_tiger('topo_boston', 'place', '2507000'); * SELECT topology.TopologySummary('topo_boston'); * SELECT topology.ValidateTopology('topo_boston'); ****/ CREATE OR REPLACE FUNCTION tiger.topology_load_tiger(IN toponame varchar, region_type varchar, region_id varchar) RETURNS text AS $$ DECLARE var_sql text; var_rgeom geometry; var_statefp text; var_rcnt bigint; var_result text := ''; var_srid int := 4269; var_precision double precision := 0; BEGIN --$Id: tiger_topology_loader.sql 9324 2012-02-27 22:08:12Z pramsey $ CASE region_type WHEN 'place' THEN SELECT the_geom , statefp FROM place INTO var_rgeom, var_statefp WHERE plcidfp = region_id; WHEN 'county' THEN SELECT the_geom, statefp FROM county INTO var_rgeom, var_statefp WHERE cntyidfp = region_id; ELSE RAISE EXCEPTION 'Region type % IS NOT SUPPORTED', region_type; END CASE; SELECT srid, precision FROM topology.topology into var_srid, var_precision WHERE name = toponame; var_sql := ' CREATE TEMPORARY TABLE tmp_edge AS WITH te AS (SELECT tlid, ST_GeometryN(ST_SnapToGrid(ST_Transform(ST_LineMerge(the_geom),$3),$4),1) As geom, tnidf, tnidt, tfidl, tfidr , the_geom As orig_geom FROM tiger.edges WHERE statefp = $1 AND ST_Covers($2, the_geom) ) SELECT DISTINCT ON (t.tlid) t.tlid As edge_id,t.geom , t.tnidf As start_node, t.tnidt As end_node, COALESCE(t.tfidl,0) As left_face , COALESCE(t.tfidr,0) As right_face, COALESCE(tl.tlid, t.tlid) AS next_left_edge, COALESCE(tr.tlid, t.tlid) As next_right_edge, t.orig_geom FROM te AS t LEFT JOIN te As tl ON (t.tnidf = tl.tnidt AND t.tfidl = tl.tfidl) LEFT JOIN te As tr ON (t.tnidt = tr.tnidf AND t.tfidr = tr.tfidr) '; EXECUTE var_sql USING var_statefp, var_rgeom, var_srid, var_precision; GET DIAGNOSTICS var_rcnt = ROW_COUNT; var_result := var_rcnt::text || ' edges holding in temporary. '; var_sql := 'ALTER TABLE tmp_edge ADD CONSTRAINT pk_tmp_edge PRIMARY KEY(edge_id );'; EXECUTE var_sql; -- CREATE node indexes on temporary edges var_sql := 'CREATE INDEX idx_tmp_edge_start_node ON tmp_edge USING btree (start_node ); CREATE INDEX idx_tmp_edge_end_node ON tmp_edge USING btree (end_node );'; EXECUTE var_sql; -- CREATE face indexes on temporary edges var_sql := 'CREATE INDEX idx_tmp_edge_left_face ON tmp_edge USING btree (left_face ); CREATE INDEX idx_tmp_edge_right_face ON tmp_edge USING btree (right_face );'; EXECUTE var_sql; -- CREATE edge indexes on temporary edges var_sql := 'CREATE INDEX idx_tmp_edge_next_left_edge ON tmp_edge USING btree (next_left_edge ); CREATE INDEX idx_tmp_edge_next_right_edge ON tmp_edge USING btree (next_right_edge);'; EXECUTE var_sql; -- start load in faces var_sql := 'INSERT INTO ' || quote_ident(toponame) || '.face(face_id, mbr) SELECT f.tfid, ST_Envelope(ST_Transform(f.the_geom,$3)) As mbr FROM tiger.faces AS f WHERE statefp = $1 AND ( tfid IN(SELECT left_face FROM tmp_edge) OR tfid IN(SELECT right_face FROM tmp_edge) OR ST_Covers($2, the_geom) ) AND tfid NOT IN(SELECT face_id FROM ' || quote_ident(toponame) || '.face) '; EXECUTE var_sql USING var_statefp, var_rgeom, var_srid; GET DIAGNOSTICS var_rcnt = ROW_COUNT; var_result := var_result || var_rcnt::text || ' faces added. '; -- end load in faces -- add remaining missing edges of present faces -- var_sql := 'INSERT INTO tmp_edge(edge_id, geom, start_node, end_node, left_face, right_face, next_left_edge, next_right_edge, orig_geom) WITH te AS (SELECT tlid, ST_GeometryN(ST_SnapToGrid(ST_Transform(ST_LineMerge(the_geom),$2),$3),1) As geom, tnidf, tnidt, tfidl, tfidr, the_geom As orig_geom FROM tiger.edges WHERE statefp = $1 AND (tfidl IN(SELECT face_id FROM ' || quote_ident(toponame) || '.face) OR tfidr IN(SELECT face_id FROM ' || quote_ident(toponame) || '.face) ) AND tlid NOT IN(SELECT edge_id FROM tmp_edge) ) SELECT DISTINCT ON (t.tlid) t.tlid As edge_id,t.geom , t.tnidf As start_node, t.tnidt As end_node, t.tfidl As left_face , t.tfidr As right_face, tl.tlid AS next_left_edge, tr.tlid As next_right_edge, t.orig_geom FROM te AS t LEFT JOIN te As tl ON (t.tnidf = tl.tnidt AND t.tfidl = tl.tfidl) LEFT JOIN te As tr ON (t.tnidt = tr.tnidf AND t.tfidr = tr.tfidr) '; EXECUTE var_sql USING var_statefp, var_srid, var_precision; GET DIAGNOSTICS var_rcnt = ROW_COUNT; var_result := var_result || var_rcnt::text || ' edges of faces added. '; -- start load in nodes var_sql := 'INSERT INTO ' || quote_ident(toponame) || '.node(node_id, geom) SELECT DISTINCT ON(tnid) tnid, geom FROM ( SELECT start_node AS tnid, ST_StartPoint(e.geom) As geom FROM tmp_edge As e LEFT JOIN ' || quote_ident(toponame) || '.node AS n ON e.start_node = n.node_id UNION ALL SELECT end_node AS tnid, ST_EndPoint(e.geom) As geom FROM tmp_edge As e LEFT JOIN ' || quote_ident(toponame) || '.node AS n ON e.end_node = n.node_id WHERE n.node_id IS NULL) As f WHERE tnid NOT IN(SELECT node_id FROM ' || quote_ident(toponame) || '.node) '; EXECUTE var_sql USING var_statefp, var_rgeom; GET DIAGNOSTICS var_rcnt = ROW_COUNT; var_result := var_result || ' ' || var_rcnt::text || ' nodes added. '; -- end load in nodes -- start Mark which nodes are contained in faces var_sql := 'UPDATE ' || quote_ident(toponame) || '.node AS n SET containing_face = f.tfid FROM (SELECT tfid, the_geom FROM tiger.faces WHERE statefp = $1 AND tfid IN(SELECT face_id FROM ' || quote_ident(toponame) || '.face) ) As f WHERE ST_ContainsProperly(f.the_geom, ST_Transform(n.geom,4269)) '; EXECUTE var_sql USING var_statefp, var_rgeom; GET DIAGNOSTICS var_rcnt = ROW_COUNT; var_result := var_result || ' ' || var_rcnt::text || ' nodes contained in a face. '; -- end Mark nodes contained in faces -- Set orphan left right to itself and set edges with missing faces to world face var_sql := 'UPDATE tmp_edge SET next_left_edge = -1*edge_id WHERE next_left_edge IS NULL OR next_left_edge NOT IN(SELECT edge_id FROM tmp_edge); UPDATE tmp_edge SET next_right_edge = -1*edge_id WHERE next_right_edge IS NULL OR next_right_edge NOT IN(SELECT edge_id FROM tmp_edge); UPDATE tmp_edge SET left_face = 0 WHERE left_face NOT IN(SELECT face_id FROM ' || quote_ident(toponame) || '.face); UPDATE tmp_edge SET right_face = 0 WHERE right_face NOT IN(SELECT face_id FROM ' || quote_ident(toponame) || '.face);'; EXECUTE var_sql; -- force edges start and end points to match the start and end nodes -- var_sql := 'UPDATE tmp_edge SET geom = ST_SetPoint(ST_SetPoint(tmp_edge.geom, 0, s.geom), ST_NPoints(tmp_edge.geom) - 1,e.geom) FROM ' || quote_ident(toponame) || '.node AS s, ' || quote_ident(toponame) || '.node As e WHERE s.node_id = tmp_edge.start_node AND e.node_id = tmp_edge.end_node AND ( NOT ST_Equals(s.geom, ST_StartPoint(tmp_edge.geom) ) OR NOT ST_Equals(e.geom, ST_EndPoint(tmp_edge.geom) ) ) ' ; EXECUTE var_sql; GET DIAGNOSTICS var_rcnt = ROW_COUNT; var_result := var_result || ' ' || var_rcnt::text || ' edge start end corrected. '; -- TODO: Load in edges -- var_sql := ' INSERT INTO ' || quote_ident(toponame) || '.edge(edge_id, geom, start_node, end_node, left_face, right_face, next_left_edge, next_right_edge) SELECT t.edge_id, t.geom, t.start_node, t.end_node, COALESCE(t.left_face,0) As left_face, COALESCE(t.right_face,0) As right_face, t.next_left_edge, t.next_right_edge FROM tmp_edge AS t WHERE t.edge_id NOT IN(SELECT edge_id FROM ' || quote_ident(toponame) || '.edge) '; EXECUTE var_sql USING var_statefp, var_rgeom; GET DIAGNOSTICS var_rcnt = ROW_COUNT; var_result := var_result || ' ' || var_rcnt::text || ' edges added. '; var_sql = 'DROP TABLE tmp_edge;'; EXECUTE var_sql; RETURN var_result; END $$ LANGUAGE plpgsql VOLATILE COST 1000;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/topology/README����������������������������0000644�0000000�0000000�00000000317�11722777314�024374� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Id: README 9324 2012-02-27 22:08:12Z pramsey $ This folder will contain functions for converting tiger data to PostGIS topology format. It assumes tiger data has already been loaded using the tiger loader.�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/geocode_settings.sql�����������������������0000644�0000000�0000000�00000005323�12126567250�025703� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: geocode_settings.sql 11241 2013-04-02 14:43:52Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2010, 2011 Regina Obe and Leo Hsu -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe and Leo Hsu <lr@pcorp.us> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- SELECT tiger.SetSearchPathForInstall('tiger'); CREATE OR REPLACE FUNCTION install_geocode_settings() RETURNS void AS $$ DECLARE var_temp text; BEGIN var_temp := tiger.SetSearchPathForInstall('tiger'); /** set set search path to have tiger in front **/ IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND table_name = 'geocode_settings') THEN CREATE TABLE geocode_settings(name text primary key, setting text, unit text, category text, short_desc text); GRANT SELECT ON geocode_settings TO public; END IF; --add missing settings INSERT INTO geocode_settings(name,setting,unit,category,short_desc) SELECT f.* FROM (VALUES ('debug_geocode_address', 'false', 'boolean','debug', 'outputs debug information in notice log such as queries when geocode_addresss is called if true') , ('debug_geocode_intersection', 'false', 'boolean','debug', 'outputs debug information in notice log such as queries when geocode_intersection is called if true') , ('debug_normalize_address', 'false', 'boolean','debug', 'outputs debug information in notice log such as queries and intermediate expressions when normalize_address is called if true') , ('debug_reverse_geocode', 'false', 'boolean','debug', 'if true, outputs debug information in notice log such as queries and intermediate expressions when reverse_geocode') , ('reverse_geocode_numbered_roads', '0', 'integer','rating', 'For state and county highways, 0 - no preference in name, 1 - prefer the numbered highway name, 2 - prefer local state/county name') , ('use_pagc_address_parser', 'false', 'boolean','normalize', 'If set to true, will try to use the pagc_address normalizer instead of tiger built one') ) f(name,setting,unit,category,short_desc) WHERE f.name NOT IN(SELECT name FROM geocode_settings); END; $$ language plpgsql; SELECT install_geocode_settings(); /** create the table if it doesn't exist **/ CREATE OR REPLACE FUNCTION get_geocode_setting(setting_name text) RETURNS text AS $$ SELECT setting FROM geocode_settings WHERE name = $1; $$ language sql STABLE; CREATE OR REPLACE FUNCTION set_geocode_setting(setting_name text, setting_value text) RETURNS text AS $$ UPDATE geocode_settings SET setting = $2 WHERE name = $1 RETURNING setting; $$ language sql VOLATILE; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/���������������������������������0000755�0000000�0000000�00000000000�12317530606�023627� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/count_words.sql������������������0000644�0000000�0000000�00000001362�11722777314�026730� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Determine the number of words in a string. Words are allowed to -- be seperated only by spaces, but multiple spaces between -- words are allowed. CREATE OR REPLACE FUNCTION count_words(VARCHAR) RETURNS INTEGER AS $_$ DECLARE tempString VARCHAR; tempInt INTEGER; count INTEGER := 1; lastSpace BOOLEAN := FALSE; BEGIN IF $1 IS NULL THEN return -1; END IF; tempInt := length($1); IF tempInt = 0 THEN return 0; END IF; FOR i IN 1..tempInt LOOP tempString := substring($1 from i for 1); IF tempString = ' ' THEN IF NOT lastSpace THEN count := count + 1; END IF; lastSpace := TRUE; ELSE lastSpace := FALSE; END IF; END LOOP; return count; END; $_$ LANGUAGE plpgsql IMMUTABLE; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������././@LongLink���������������������������������������������������������������������������������������0000000�0000000�0000000�00000000150�00000000000�011561� L����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_exact.sql�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_exact.0000644�0000000�0000000�00000003461�11722777314�032505� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- location_extract_countysub_exact(string, stateAbbrev) -- This function checks the place_lookup table to find a potential match to -- the location described at the end of the given string. If an exact match -- fails, a fuzzy match is performed. The location as found in the given -- string is returned. CREATE OR REPLACE FUNCTION location_extract_countysub_exact( fullStreet VARCHAR, stateAbbrev VARCHAR ) RETURNS VARCHAR AS $_$ DECLARE ws VARCHAR; location VARCHAR; tempInt INTEGER; lstate VARCHAR; rec RECORD; BEGIN ws := E'[ ,.\n\f\t]'; -- No hope of determining the location from place. Try countysub. IF stateAbbrev IS NOT NULL THEN lstate := statefp FROM state WHERE stusps = stateAbbrev; SELECT INTO tempInt count(*) FROM cousub WHERE cousub.statefp = lstate AND texticregexeq(fullStreet, '(?i)' || name || '$'); ELSE SELECT INTO tempInt count(*) FROM cousub WHERE texticregexeq(fullStreet, '(?i)' || name || '$'); END IF; IF tempInt > 0 THEN IF stateAbbrev IS NOT NULL THEN FOR rec IN SELECT substring(fullStreet, '(?i)(' || name || ')$') AS value, name FROM cousub WHERE cousub.statefp = lstate AND texticregexeq(fullStreet, '(?i)' || ws || name || '$') ORDER BY length(name) DESC LOOP -- Only the first result is needed. location := rec.value; EXIT; END LOOP; ELSE FOR rec IN SELECT substring(fullStreet, '(?i)(' || name || ')$') AS value, name FROM cousub WHERE texticregexeq(fullStreet, '(?i)' || ws || name || '$') ORDER BY length(name) DESC LOOP -- again, only the first is needed. location := rec.value; EXIT; END LOOP; END IF; END IF; RETURN location; END; $_$ LANGUAGE plpgsql STABLE COST 10; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/get_last_words.sql���������������0000644�0000000�0000000�00000001402�11722777314�027375� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Returns a string consisting of the last N words. Words are allowed -- to be seperated only by spaces, but multiple spaces between -- words are allowed. Words must be alphanumberic. -- If more words are requested than exist, the full input string is -- returned. CREATE OR REPLACE FUNCTION get_last_words( inputString VARCHAR, count INTEGER ) RETURNS VARCHAR AS $_$ DECLARE tempString VARCHAR; result VARCHAR := ''; BEGIN FOR i IN 1..count LOOP tempString := substring(inputString from '((?: )+[a-zA-Z0-9_]*)' || result || '$'); IF tempString IS NULL THEN RETURN inputString; END IF; result := tempString || result; END LOOP; result := trim(both from result); RETURN result; END; $_$ LANGUAGE plpgsql IMMUTABLE COST 10; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������././@LongLink���������������������������������������������������������������������������������������0000000�0000000�0000000�00000000150�00000000000�011561� L����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_fuzzy.sql�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_fuzzy.0000644�0000000�0000000�00000005663�11722777314�032576� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- location_extract_countysub_fuzzy(string, stateAbbrev) -- This function checks the place_lookup table to find a potential match to -- the location described at the end of the given string. If an exact match -- fails, a fuzzy match is performed. The location as found in the given -- string is returned. CREATE OR REPLACE FUNCTION location_extract_countysub_fuzzy( fullStreet VARCHAR, stateAbbrev VARCHAR ) RETURNS VARCHAR AS $_$ DECLARE ws VARCHAR; tempString VARCHAR; location VARCHAR; tempInt INTEGER; word_count INTEGER; rec RECORD; test BOOLEAN; lstate VARCHAR; BEGIN ws := E'[ ,.\n\f\t]'; -- Fuzzy matching. tempString := substring(fullStreet, '(?i)' || ws || '([a-zA-Z0-9]+)$'); IF tempString IS NULL THEN tempString := fullStreet; END IF; IF stateAbbrev IS NOT NULL THEN lstate := statefp FROM state WHERE stusps = stateAbbrev; SELECT INTO tempInt count(*) FROM cousub WHERE cousub.statefp = lstate AND soundex(tempString) = end_soundex(name); ELSE SELECT INTO tempInt count(*) FROM cousub WHERE soundex(tempString) = end_soundex(name); END IF; IF tempInt > 0 THEN tempInt := 50; -- Some potentials were found. Begin a word-by-word soundex on each. IF stateAbbrev IS NOT NULL THEN FOR rec IN SELECT name FROM cousub WHERE cousub.statefp = lstate AND soundex(tempString) = end_soundex(name) LOOP word_count := count_words(rec.name); test := TRUE; tempString := get_last_words(fullStreet, word_count); FOR i IN 1..word_count LOOP IF soundex(split_part(tempString, ' ', i)) != soundex(split_part(rec.name, ' ', i)) THEN test := FALSE; END IF; END LOOP; IF test THEN -- The soundex matched, determine if the distance is better. IF levenshtein_ignore_case(rec.name, tempString) < tempInt THEN location := tempString; tempInt := levenshtein_ignore_case(rec.name, tempString); END IF; END IF; END LOOP; ELSE FOR rec IN SELECT name FROM cousub WHERE soundex(tempString) = end_soundex(name) LOOP word_count := count_words(rec.name); test := TRUE; tempString := get_last_words(fullStreet, word_count); FOR i IN 1..word_count LOOP IF soundex(split_part(tempString, ' ', i)) != soundex(split_part(rec.name, ' ', i)) THEN test := FALSE; END IF; END LOOP; IF test THEN -- The soundex matched, determine if the distance is better. IF levenshtein_ignore_case(rec.name, tempString) < tempInt THEN location := tempString; tempInt := levenshtein_ignore_case(rec.name, tempString); END IF; END IF; END LOOP; END IF; END IF; -- If no fuzzys were found, leave location null. RETURN location; END; $_$ LANGUAGE plpgsql; �����������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/location_extract_place_fuzzy.sql�0000644�0000000�0000000�00000006020�11722777314�032333� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: location_extract_place_fuzzy.sql 9324 2012-02-27 22:08:12Z pramsey $- -- location_extract_place_fuzzy(string, stateAbbrev) -- This function checks the place_lookup table to find a potential match to -- the location described at the end of the given string. If an exact match -- fails, a fuzzy match is performed. The location as found in the given -- string is returned. CREATE OR REPLACE FUNCTION location_extract_place_fuzzy( fullStreet VARCHAR, stateAbbrev VARCHAR ) RETURNS VARCHAR AS $_$ DECLARE ws VARCHAR; tempString VARCHAR; location VARCHAR; tempInt INTEGER; word_count INTEGER; rec RECORD; test BOOLEAN; lstate VARCHAR; BEGIN --$Id: location_extract_place_fuzzy.sql 9324 2012-02-27 22:08:12Z pramsey $- ws := E'[ ,.\n\f\t]'; tempString := substring(fullStreet, '(?i)' || ws || '([a-zA-Z0-9]+)$'); IF tempString IS NULL THEN tempString := fullStreet; END IF; IF stateAbbrev IS NOT NULL THEN lstate := statefp FROM state WHERE stusps = stateAbbrev; SELECT into tempInt count(*) FROM place WHERE place.statefp = lstate AND soundex(tempString) = end_soundex(name); ELSE SELECT into tempInt count(*) FROM place WHERE soundex(tempString) = end_soundex(name); END IF; IF tempInt > 0 THEN -- Some potentials were found. Begin a word-by-word soundex on each. tempInt := 50; IF stateAbbrev IS NOT NULL THEN FOR rec IN SELECT name FROM place WHERE place.statefp = lstate AND soundex(tempString) = end_soundex(name) LOOP word_count := count_words(rec.name); test := TRUE; tempString := get_last_words(fullStreet, word_count); FOR i IN 1..word_count LOOP IF soundex(split_part(tempString, ' ', i)) != soundex(split_part(rec.name, ' ', i)) THEN test := FALSE; END IF; END LOOP; IF test THEN -- The soundex matched, determine if the distance is better. IF levenshtein_ignore_case(rec.name, tempString) < tempInt THEN location := tempString; tempInt := levenshtein_ignore_case(rec.name, tempString); END IF; END IF; END LOOP; ELSE FOR rec IN SELECT name FROM place WHERE soundex(tempString) = end_soundex(name) LOOP word_count := count_words(rec.name); test := TRUE; tempString := get_last_words(fullStreet, word_count); FOR i IN 1..word_count LOOP IF soundex(split_part(tempString, ' ', i)) != soundex(split_part(rec.name, ' ', i)) THEN test := FALSE; END IF; END LOOP; IF test THEN -- The soundex matched, determine if the distance is better. IF levenshtein_ignore_case(rec.name, tempString) < tempInt THEN location := tempString; tempInt := levenshtein_ignore_case(rec.name, tempString); END IF; END IF; END LOOP; END IF; END IF; RETURN location; END; $_$ LANGUAGE plpgsql STABLE; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/location_extract.sql�������������0000644�0000000�0000000�00000006153�11722777314�027727� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- location_extract(streetAddressString, stateAbbreviation) -- This function extracts a location name from the end of the given string. -- The first attempt is to find an exact match against the place_lookup -- table. If this fails, a word-by-word soundex match is tryed against the -- same table. If multiple candidates are found, the one with the smallest -- levenshtein distance from the given string is assumed the correct one. -- If no match is found against the place_lookup table, the same tests are -- run against the countysub_lookup table. -- -- The section of the given string corresponding to the location found is -- returned, rather than the string found from the tables. All the searching -- is done largely to determine the length (words) of the location, to allow -- the intended street name to be correctly identified. CREATE OR REPLACE FUNCTION location_extract(fullStreet VARCHAR, stateAbbrev VARCHAR) RETURNS VARCHAR AS $_$ DECLARE ws VARCHAR; location VARCHAR; lstate VARCHAR; stmt VARCHAR; street_array text[]; word_count INTEGER; rec RECORD; best INTEGER := 0; tempString VARCHAR; BEGIN IF fullStreet IS NULL THEN RETURN NULL; END IF; ws := E'[ ,.\n\f\t]'; IF stateAbbrev IS NOT NULL THEN lstate := statefp FROM state_lookup WHERE abbrev = stateAbbrev; END IF; lstate := COALESCE(lstate,''); street_array := regexp_split_to_array(fullStreet,ws); word_count := array_upper(street_array,1); tempString := ''; FOR i IN 1..word_count LOOP CONTINUE WHEN street_array[word_count-i+1] IS NULL OR street_array[word_count-i+1] = ''; tempString := COALESCE(street_array[word_count-i+1],'') || tempString; stmt := ' SELECT' || ' 1,' || ' name,' || ' levenshtein_ignore_case(' || quote_literal(tempString) || ',name) as rating,' || ' length(name) as len' || ' FROM place' || ' WHERE ' || CASE WHEN stateAbbrev IS NOT NULL THEN 'statefp = ' || quote_literal(lstate) || ' AND ' ELSE '' END || ' soundex(' || quote_literal(tempString) || ') = soundex(name)' || ' AND levenshtein_ignore_case(' || quote_literal(tempString) || ',name) <= 2 ' || ' UNION ALL SELECT' || ' 2,' || ' name,' || ' levenshtein_ignore_case(' || quote_literal(tempString) || ',name) as rating,' || ' length(name) as len' || ' FROM cousub' || ' WHERE ' || CASE WHEN stateAbbrev IS NOT NULL THEN 'statefp = ' || quote_literal(lstate) || ' AND ' ELSE '' END || ' soundex(' || quote_literal(tempString) || ') = soundex(name)' || ' AND levenshtein_ignore_case(' || quote_literal(tempString) || ',name) <= 2 ' || ' ORDER BY ' || ' 3 ASC, 1 ASC, 4 DESC' || ' LIMIT 1;' ; EXECUTE stmt INTO rec; IF rec.rating >= best THEN location := tempString; best := rec.rating; END IF; tempString := ' ' || tempString; END LOOP; location := replace(location,' ',ws || '+'); location := substring(fullStreet,'(?i)' || location || '$'); RETURN location; END; $_$ LANGUAGE plpgsql STABLE COST 100; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/location_extract_place_exact.sql�0000644�0000000�0000000�00000004366�11722777314�032263� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: location_extract_place_exact.sql 9324 2012-02-27 22:08:12Z pramsey $- -- location_extract_place_exact(string, stateAbbrev) -- This function checks the place_lookup table to find a potential match to -- the location described at the end of the given string. If an exact match -- fails, a fuzzy match is performed. The location as found in the given -- string is returned. CREATE OR REPLACE FUNCTION location_extract_place_exact( fullStreet VARCHAR, stateAbbrev VARCHAR ) RETURNS VARCHAR AS $_$ DECLARE ws VARCHAR; location VARCHAR; tempInt INTEGER; lstate VARCHAR; rec RECORD; BEGIN --$Id: location_extract_place_exact.sql 9324 2012-02-27 22:08:12Z pramsey $- ws := E'[ ,.\n\f\t]'; -- Try for an exact match against places IF stateAbbrev IS NOT NULL THEN lstate := statefp FROM state WHERE stusps = stateAbbrev; SELECT INTO tempInt count(*) FROM place WHERE place.statefp = lstate AND fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || name || '$'); ELSE SELECT INTO tempInt count(*) FROM place WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || name || '$'); END IF; IF tempInt > 0 THEN -- Some matches were found. Look for the last one in the string. IF stateAbbrev IS NOT NULL THEN FOR rec IN SELECT substring(fullStreet, '(?i)(' || name || ')$') AS value, name FROM place WHERE place.statefp = lstate AND fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || name || '$') ORDER BY length(name) DESC LOOP -- Since the regex is end of string, only the longest (first) result -- is useful. location := rec.value; EXIT; END LOOP; ELSE FOR rec IN SELECT substring(fullStreet, '(?i)(' || name || ')$') AS value, name FROM place WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || name || '$') ORDER BY length(name) DESC LOOP -- Since the regex is end of string, only the longest (first) result -- is useful. location := rec.value; EXIT; END LOOP; END IF; END IF; RETURN location; END; $_$ LANGUAGE plpgsql STABLE COST 100; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/end_soundex.sql������������������0000644�0000000�0000000�00000000775�11722777314�026704� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Runs the soundex function on the last word in the string provided. -- Words are allowed to be seperated by space, comma, period, new-line -- tab or form feed. CREATE OR REPLACE FUNCTION end_soundex(VARCHAR) RETURNS VARCHAR AS $_$ DECLARE tempString VARCHAR; BEGIN tempString := substring($1, E'[ ,.\n\t\f]([a-zA-Z0-9]*)$'); IF tempString IS NOT NULL THEN tempString := soundex(tempString); ELSE tempString := soundex($1); END IF; return tempString; END; $_$ LANGUAGE plpgsql IMMUTABLE; ���postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/state_extract.sql����������������0000644�0000000�0000000�00000006567�11722777314�027250� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- state_extract(addressStringLessZipCode) -- Extracts the state from end of the given string. -- -- This function uses the state_lookup table to determine which state -- the input string is indicating. First, an exact match is pursued, -- and in the event of failure, a word-by-word fuzzy match is attempted. -- -- The result is the state as given in the input string, and the approved -- state abbreviation, seperated by a colon. CREATE OR REPLACE FUNCTION state_extract(rawInput VARCHAR) RETURNS VARCHAR AS $_$ DECLARE tempInt INTEGER; tempString VARCHAR; state VARCHAR; stateAbbrev VARCHAR; result VARCHAR; rec RECORD; test BOOLEAN; ws VARCHAR; var_verbose boolean := false; BEGIN ws := E'[ ,.\t\n\f\r]'; -- If there is a trailing space or , get rid of it -- this is to handle case where people use , instead of space to separate state and zip -- such as '2450 N COLORADO ST, PHILADELPHIA, PA, 19132' instead of '2450 N COLORADO ST, PHILADELPHIA, PA 19132' --tempString := regexp_replace(rawInput, E'(.*)' || ws || '+', E'\\1'); tempString := btrim(rawInput, ', '); -- Separate out the last word of the state, and use it to compare to -- the state lookup table to determine the entire name, as well as the -- abbreviation associated with it. The zip code may or may not have -- been found. tempString := substring(tempString from ws || E'+([^ ,.\t\n\f\r0-9]*?)$'); IF var_verbose THEN RAISE NOTICE 'state_extract rawInput: % tempString: %', rawInput, tempString; END IF; SELECT INTO tempInt count(*) FROM (select distinct abbrev from state_lookup WHERE upper(abbrev) = upper(tempString)) as blah; IF tempInt = 1 THEN state := tempString; SELECT INTO stateAbbrev abbrev FROM (select distinct abbrev from state_lookup WHERE upper(abbrev) = upper(tempString)) as blah; ELSE SELECT INTO tempInt count(*) FROM state_lookup WHERE upper(name) like upper('%' || tempString); IF tempInt >= 1 THEN FOR rec IN SELECT name from state_lookup WHERE upper(name) like upper('%' || tempString) LOOP SELECT INTO test texticregexeq(rawInput, name) FROM state_lookup WHERE rec.name = name; IF test THEN SELECT INTO stateAbbrev abbrev FROM state_lookup WHERE rec.name = name; state := substring(rawInput, '(?i)' || rec.name); EXIT; END IF; END LOOP; ELSE -- No direct match for state, so perform fuzzy match. SELECT INTO tempInt count(*) FROM state_lookup WHERE soundex(tempString) = end_soundex(name); IF tempInt >= 1 THEN FOR rec IN SELECT name, abbrev FROM state_lookup WHERE soundex(tempString) = end_soundex(name) LOOP tempInt := count_words(rec.name); tempString := get_last_words(rawInput, tempInt); test := TRUE; FOR i IN 1..tempInt LOOP IF soundex(split_part(tempString, ' ', i)) != soundex(split_part(rec.name, ' ', i)) THEN test := FALSE; END IF; END LOOP; IF test THEN state := tempString; stateAbbrev := rec.abbrev; EXIT; END IF; END LOOP; END IF; END IF; END IF; IF state IS NOT NULL AND stateAbbrev IS NOT NULL THEN result := state || ':' || stateAbbrev; END IF; RETURN result; END; $_$ LANGUAGE plpgsql STABLE; �����������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/normalize_address.sql������������0000644�0000000�0000000�00000076534�12126655103�030072� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: normalize_address.sql 11246 2013-04-02 22:22:59Z robe $- -- normalize_address(addressString) -- This takes an address string and parses it into address (internal/street) -- street name, type, direction prefix and suffix, location, state and -- zip code, depending on what can be found in the string. -- -- The US postal address standard is used: -- <Street Number> <Direction Prefix> <Street Name> <Street Type> -- <Direction Suffix> <Internal Address> <Location> <State> <Zip Code> -- -- State is assumed to be included in the string, and MUST be matchable to -- something in the state_lookup table. Fuzzy matching is used if no direct -- match is found. -- -- Two formats of zip code are acceptable: five digit, and five + 4. -- -- The internal addressing indicators are looked up from the -- secondary_unit_lookup table. A following identifier is accepted -- but it must start with a digit. -- -- The location is parsed from the string using other indicators, such -- as street type, direction suffix or internal address, if available. -- If these are not, the location is extracted using comparisons against -- the places_lookup table, then the countysub_lookup table to determine -- what, in the original string, is intended to be the location. In both -- cases, an exact match is first pursued, then a word-by-word fuzzy match. -- The result is not the name of the location from the tables, but the -- section of the given string that corresponds to the name from the tables. -- -- Zip codes and street names are not validated. -- -- Direction indicators are extracted by comparison with the direction_lookup -- table. -- -- Street addresses are assumed to be a single word, starting with a number. -- Address is manditory; if no address is given, and the street is numbered, -- the resulting address will be the street name, and the street name -- will be an empty string. -- -- In some cases, the street type is part of the street name. -- eg State Hwy 22a. As long as the word following the type starts with a -- number (this is usually the case) this will be caught. Some street names -- include a type name, and have a street type that differs. This will be -- handled properly, so long as both are given. If the street type is -- omitted, the street names included type will be parsed as the street type. -- -- The output is currently a colon seperated list of values: -- InternalAddress:StreetAddress:DirectionPrefix:StreetName:StreetType: -- DirectionSuffix:Location:State:ZipCode -- This returns each element as entered. It's mainly meant for debugging. -- There is also another option that returns: -- StreetAddress:DirectionPrefixAbbreviation:StreetName:StreetTypeAbbreviation: -- DirectionSuffixAbbreviation:Location:StateAbbreviation:ZipCode -- This is more standardized and better for use with a geocoder. CREATE OR REPLACE FUNCTION normalize_address(in_rawinput character varying) RETURNS norm_addy AS $$ DECLARE debug_flag boolean := get_geocode_setting('debug_normalize_address')::boolean; use_pagc boolean := COALESCE(get_geocode_setting('use_pagc_address_parser')::boolean, false); result norm_addy; addressString VARCHAR; zipString VARCHAR; preDir VARCHAR; postDir VARCHAR; fullStreet VARCHAR; reducedStreet VARCHAR; streetType VARCHAR; state VARCHAR; tempString VARCHAR; tempInt INTEGER; rec RECORD; ws VARCHAR; rawInput VARCHAR; -- is this a highway -- (we treat these differently since the road name often comes after the streetType) isHighway boolean := false; BEGIN --$Id: normalize_address.sql 11246 2013-04-02 22:22:59Z robe $- result.parsed := FALSE; IF use_pagc THEN result := pagc_normalize_address(in_rawinput); RETURN result; END IF; rawInput := trim(in_rawInput); IF rawInput IS NULL THEN RETURN result; END IF; ws := E'[ ,.\t\n\f\r]'; IF debug_flag THEN raise notice '% input: %', clock_timestamp(), rawInput; END IF; -- Assume that the address begins with a digit, and extract it from -- the input string. addressString := substring(rawInput from E'^([0-9].*?)[ ,/.]'); IF debug_flag THEN raise notice '% addressString: %', clock_timestamp(), addressString; END IF; -- There are two formats for zip code, the normal 5 digit , and -- the nine digit zip-4. It may also not exist. zipString := substring(rawInput from ws || E'([0-9]{5})$'); IF zipString IS NULL THEN -- Check if the zip is just a partial or a one with -s -- or one that just has more than 5 digits zipString := COALESCE(substring(rawInput from ws || '([0-9]{5})-[0-9]{0,4}$'), substring(rawInput from ws || '([0-9]{2,5})$'), substring(rawInput from ws || '([0-9]{6,14})$')); -- Check if all we got was a zipcode, of either form IF zipString IS NULL THEN zipString := substring(rawInput from '^([0-9]{5})$'); IF zipString IS NULL THEN zipString := substring(rawInput from '^([0-9]{5})-[0-9]{4}$'); END IF; -- If it was only a zipcode, then just return it. IF zipString IS NOT NULL THEN result.zip := zipString; result.parsed := TRUE; RETURN result; END IF; END IF; END IF; IF debug_flag THEN raise notice '% zipString: %', clock_timestamp(), zipString; END IF; IF zipString IS NOT NULL THEN fullStreet := substring(rawInput from '(.*)' || ws || '+' || cull_null(zipString) || '[- ]?([0-9]{4})?$'); /** strip off any trailing spaces or ,**/ fullStreet := btrim(fullStreet, ' ,'); ELSE fullStreet := rawInput; END IF; IF debug_flag THEN raise notice '% fullStreet: %', clock_timestamp(), fullStreet; END IF; -- FIXME: state_extract should probably be returning a record so we can -- avoid having to parse the result from it. tempString := state_extract(fullStreet); IF tempString IS NOT NULL THEN state := split_part(tempString, ':', 1); result.stateAbbrev := split_part(tempString, ':', 2); END IF; IF debug_flag THEN raise notice '% stateAbbrev: %', clock_timestamp(), result.stateAbbrev; END IF; -- The easiest case is if the address is comma delimited. There are some -- likely cases: -- street level, location, state -- street level, location state -- street level, location -- street level, internal address, location, state -- street level, internal address, location state -- street level, internal address location state -- street level, internal address, location -- street level, internal address location -- The first three are useful. tempString := substring(fullStreet, '(?i),' || ws || '+(.*?)(,?' || ws || '*' || cull_null(state) || '$)'); IF tempString = '' THEN tempString := NULL; END IF; IF tempString IS NOT NULL THEN IF tempString LIKE '%,%' THEN -- if it has a comma probably has suite, strip it from location result.location := trim(split_part(tempString,',',2)); ELSE result.location := tempString; END IF; IF addressString IS NOT NULL THEN fullStreet := substring(fullStreet, '(?i)' || addressString || ws || '+(.*),' || ws || '+' || result.location); ELSE fullStreet := substring(fullStreet, '(?i)(.*),' || ws || '+' || result.location); END IF; END IF; IF debug_flag THEN raise notice '% fullStreet: %', clock_timestamp(), fullStreet; raise notice '% location: %', clock_timestamp(), result.location; END IF; -- Pull out the full street information, defined as everything between the -- address and the state. This includes the location. -- This doesnt need to be done if location has already been found. IF result.location IS NULL THEN IF addressString IS NOT NULL THEN IF state IS NOT NULL THEN fullStreet := substring(fullStreet, '(?i)' || addressString || ws || '+(.*?)' || ws || '+' || state); ELSE fullStreet := substring(fullStreet, '(?i)' || addressString || ws || '+(.*?)'); END IF; ELSE IF state IS NOT NULL THEN fullStreet := substring(fullStreet, '(?i)(.*?)' || ws || '+' || state); ELSE fullStreet := substring(fullStreet, '(?i)(.*?)'); END IF; END IF; IF debug_flag THEN raise notice '% fullStreet: %', clock_timestamp(),fullStreet; END IF; IF debug_flag THEN raise notice '% start location extract', clock_timestamp(); END IF; result.location := location_extract(fullStreet, result.stateAbbrev); IF debug_flag THEN raise notice '% end location extract', clock_timestamp(); END IF; -- A location can't be a street type, sorry. IF lower(result.location) IN (SELECT lower(name) FROM street_type_lookup) THEN result.location := NULL; END IF; -- If the location was found, remove it from fullStreet IF result.location IS NOT NULL THEN fullStreet := substring(fullStreet, '(?i)(.*)' || ws || '+' || result.location); END IF; END IF; IF debug_flag THEN raise notice 'fullStreet: %', fullStreet; raise notice 'location: %', result.location; END IF; -- Determine if any internal address is included, such as apartment -- or suite number. -- this count is surprisingly slow by itself but much faster if you add an ILIKE AND clause SELECT INTO tempInt count(*) FROM secondary_unit_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || '(' || ws || '|$)'); IF tempInt = 1 THEN result.internal := substring(fullStreet, '(?i)' || ws || '(' || name || ws || '*#?' || ws || '*(?:[0-9][-0-9a-zA-Z]*)?' || ')(?:' || ws || '|$)') FROM secondary_unit_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || '(' || ws || '|$)'); ELSIF tempInt > 1 THEN -- In the event of multiple matches to a secondary unit designation, we -- will assume that the last one is the true one. tempInt := 0; FOR rec in SELECT trim(substring(fullStreet, '(?i)' || ws || '(' || name || '(?:' || ws || '*#?' || ws || '*(?:[0-9][-0-9a-zA-Z]*)?)' || ws || '?|$)')) as value FROM secondary_unit_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || '(' || ws || '|$)') LOOP IF tempInt < position(rec.value in fullStreet) THEN tempInt := position(rec.value in fullStreet); result.internal := rec.value; END IF; END LOOP; END IF; IF debug_flag THEN raise notice 'internal: %', result.internal; END IF; IF result.location IS NULL THEN -- If the internal address is given, the location is everything after it. result.location := trim(substring(fullStreet, result.internal || ws || '+(.*)$')); END IF; IF debug_flag THEN raise notice 'location: %', result.location; END IF; -- Pull potential street types from the full street information -- this count is surprisingly slow by itself but much faster if you add an ILIKE AND clause -- difference of 98ms vs 16 ms for example -- Put a space in front to make regex easier can always count on it starting with space -- Reject all street types where the fullstreet name is equal to the name fullStreet := ' ' || trim(fullStreet); tempInt := count(*) FROM street_type_lookup WHERE fullStreet ILIKE '%' || name || '%' AND trim(upper(fullStreet)) != name AND texticregexeq(fullStreet, '(?i)' || ws || '(' || name || ')(?:' || ws || '|$)'); IF tempInt = 1 THEN SELECT INTO rec abbrev, substring(fullStreet, '(?i)' || ws || '(' || name || ')(?:' || ws || '|$)') AS given, is_hw FROM street_type_lookup WHERE fullStreet ILIKE '%' || name || '%' AND trim(upper(fullStreet)) != name AND texticregexeq(fullStreet, '(?i)' || ws || '(' || name || ')(?:' || ws || '|$)') ; streetType := rec.given; result.streetTypeAbbrev := rec.abbrev; isHighway := rec.is_hw; IF debug_flag THEN RAISE NOTICE 'street Type: %, street Type abbrev: %', rec.given, rec.abbrev; END IF; ELSIF tempInt > 1 THEN tempInt := 0; -- the last matching abbrev in the string is the most likely one FOR rec IN SELECT * FROM (SELECT abbrev, name, substring(fullStreet, '(?i)' || ws || '?(' || name || ')(?:' || ws || '|$)') AS given, is_hw , RANK() OVER( ORDER BY position(name IN upper(trim(fullStreet))) ) As n_start, RANK() OVER( ORDER BY position(name IN upper(trim(fullStreet))) + length(name) ) As n_end, COUNT(*) OVER() As nrecs, position(name IN upper(trim(fullStreet))) FROM street_type_lookup WHERE fullStreet ILIKE '%' || name || '%' AND trim(upper(fullStreet)) != name AND (texticregexeq(fullStreet, '(?i)' || ws || '(' || name -- we only consider street types that are regular and not at beginning of name or are highways (since those can be at beg or end) -- we take the one that is the longest e.g Country Road would be more correct than Road || ')(?:' || ws || '|$)') OR (is_hw AND fullstreet ILIKE name || ' %') ) AND ((NOT is_hw AND position(name IN upper(trim(fullStreet))) > 1 OR is_hw) ) ) As foo -- N_start - N_end - ensure we first get the one with the most overlapping sub types -- Then of those get the one that ends last and then starts first ORDER BY n_start - n_end, n_end DESC, n_start LIMIT 1 LOOP -- If we have found an internal address, make sure the type -- precedes it. /** TODO: I don't think we need a loop anymore since we are just returning one and the one in the last position * I'll leave for now though **/ IF result.internal IS NOT NULL THEN IF position(rec.given IN fullStreet) < position(result.internal IN fullStreet) THEN IF tempInt < position(rec.given IN fullStreet) THEN streetType := rec.given; result.streetTypeAbbrev := rec.abbrev; isHighway := rec.is_hw; tempInt := position(rec.given IN fullStreet); END IF; END IF; ELSIF tempInt < position(rec.given IN fullStreet) THEN streetType := rec.given; result.streetTypeAbbrev := rec.abbrev; isHighway := rec.is_hw; tempInt := position(rec.given IN fullStreet); IF debug_flag THEN RAISE NOTICE 'street Type: %, street Type abbrev: %', rec.given, rec.abbrev; END IF; END IF; END LOOP; END IF; IF debug_flag THEN raise notice '% streetTypeAbbrev: %', clock_timestamp(), result.streetTypeAbbrev; END IF; -- There is a little more processing required now. If the word after the -- street type begins with a number, then its most likely a highway like State Route 225a. If -- In Tiger 2010+ the reduced Street name just has the number -- the next word starts with a char, then everything after the street type -- will be considered location. If there is no street type, then I'm sad. IF streetType IS NOT NULL THEN -- Check if the fullStreet contains the streetType and ends in just numbers -- If it does its a road number like a country road or state route or other highway -- Just set the number to be the name of street tempString := NULL; IF isHighway THEN tempString := substring(fullStreet, streetType || ws || '+' || E'([0-9a-zA-Z]+)' || ws || '*'); END IF; IF tempString > '' AND result.location IS NOT NULL THEN reducedStreet := tempString; result.streetName := reducedStreet; IF debug_flag THEN RAISE NOTICE 'reduced Street: %', result.streetName; END IF; -- the post direction might be portion of fullStreet after reducedStreet and type -- reducedStreet: 24 fullStreet: Country Road 24, N or fullStreet: Country Road 24 N tempString := regexp_replace(fullStreet, streetType || ws || '+' || reducedStreet,''); IF tempString > '' THEN IF debug_flag THEN RAISE NOTICE 'remove reduced street: % + streetType: % from fullstreet: %', reducedStreet, streetType, fullStreet; END IF; tempString := abbrev FROM direction_lookup WHERE tempString ILIKE '%' || name || '%' AND texticregexeq(reducedStreet || ws || '+' || streetType, '(?i)(' || name || ')' || ws || '+|$') ORDER BY length(name) DESC LIMIT 1; IF tempString IS NOT NULL THEN result.postDirAbbrev = trim(tempString); IF debug_flag THEN RAISE NOTICE 'postDirAbbre of highway: %', result.postDirAbbrev; END IF; END IF; END IF; ELSE tempString := substring(fullStreet, streetType || ws || E'+([0-9][^ ,.\t\r\n\f]*?)' || ws); IF tempString IS NOT NULL THEN IF result.location IS NULL THEN result.location := substring(fullStreet, streetType || ws || '+' || tempString || ws || '+(.*)$'); END IF; reducedStreet := substring(fullStreet, '(.*)' || ws || '+' || result.location || '$'); streetType := NULL; result.streetTypeAbbrev := NULL; ELSE IF result.location IS NULL THEN result.location := substring(fullStreet, streetType || ws || '+(.*)$'); END IF; reducedStreet := substring(fullStreet, '^(.*)' || ws || '+' || streetType); IF COALESCE(trim(reducedStreet),'') = '' THEN --reduced street can't be blank reducedStreet := fullStreet; streetType := NULL; result.streetTypeAbbrev := NULL; END IF; END IF; -- the post direction might be portion of fullStreet after reducedStreet -- reducedStreet: Main fullStreet: Main St, N or fullStreet: Main St N tempString := trim(regexp_replace(fullStreet, reducedStreet || ws || '+' || streetType,'')); IF tempString > '' THEN tempString := abbrev FROM direction_lookup WHERE tempString ILIKE '%' || name || '%' AND texticregexeq(fullStreet || ' ', '(?i)' || reducedStreet || ws || '+' || streetType || ws || '+(' || name || ')' || ws || '+') ORDER BY length(name) DESC LIMIT 1; IF tempString IS NOT NULL THEN result.postDirAbbrev = trim(tempString); END IF; END IF; IF debug_flag THEN raise notice '% reduced street: %', clock_timestamp(), reducedStreet; END IF; -- The pre direction should be at the beginning of the fullStreet string. -- The post direction should be at the beginning of the location string -- if there is no internal address reducedStreet := trim(reducedStreet); tempString := trim(regexp_replace(fullStreet, ws || '+' || reducedStreet || ws || '+','')); IF tempString > '' THEN tempString := substring(reducedStreet, '(?i)(^' || name || ')' || ws) FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC LIMIT 1; END IF; IF tempString > '' THEN preDir := tempString; result.preDirAbbrev := abbrev FROM direction_lookup where reducedStreet ILIKE '%' || name '%' AND texticregexeq(reducedStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC LIMIT 1; result.streetName := trim(substring(reducedStreet, '^' || preDir || ws || '(.*)')); ELSE result.streetName := trim(reducedStreet); END IF; END IF; IF texticregexeq(result.location, '(?i)' || result.internal || '$') THEN -- If the internal address is at the end of the location, then no -- location was given. We still need to look for post direction. SELECT INTO rec abbrev, substring(result.location, '(?i)^(' || name || ')' || ws) as value FROM direction_lookup WHERE result.location ILIKE '%' || name || '%' AND texticregexeq(result.location, '(?i)^' || name || ws) ORDER BY length(name) desc LIMIT 1; IF rec.value IS NOT NULL THEN postDir := rec.value; result.postDirAbbrev := rec.abbrev; END IF; result.location := null; ELSIF result.internal IS NULL THEN -- If no location is given, the location string will be the post direction SELECT INTO tempInt count(*) FROM direction_lookup WHERE upper(result.location) = upper(name); IF tempInt != 0 THEN postDir := result.location; SELECT INTO result.postDirAbbrev abbrev FROM direction_lookup WHERE upper(postDir) = upper(name); result.location := NULL; IF debug_flag THEN RAISE NOTICE '% postDir exact match: %', clock_timestamp(), result.postDirAbbrev; END IF; ELSE -- postDirection is not equal location, but may be contained in it -- It is only considered a postDirection if it is not preceded by a , SELECT INTO tempString substring(result.location, '(?i)(^' || name || ')' || ws) FROM direction_lookup WHERE result.location ILIKE '%' || name || '%' AND texticregexeq(result.location, '(?i)(^' || name || ')' || ws) AND NOT texticregexeq(rawInput, '(?i)(,' || ws || '+' || result.location || ')' || ws) ORDER BY length(name) desc LIMIT 1; IF debug_flag THEN RAISE NOTICE '% location trying to extract postdir: %, tempstring: %, rawInput: %', clock_timestamp(), result.location, tempString, rawInput; END IF; IF tempString IS NOT NULL THEN postDir := tempString; SELECT INTO result.postDirAbbrev abbrev FROM direction_lookup WHERE result.location ILIKE '%' || name || '%' AND texticregexeq(result.location, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC LIMIT 1; result.location := substring(result.location, '^' || postDir || ws || '+(.*)'); IF debug_flag THEN RAISE NOTICE '% postDir: %', clock_timestamp(), result.postDirAbbrev; END IF; END IF; END IF; ELSE -- internal is not null, but is not at the end of the location string -- look for post direction before the internal address IF debug_flag THEN RAISE NOTICE '%fullstreet before extract postdir: %', clock_timestamp(), fullStreet; END IF; SELECT INTO tempString substring(fullStreet, '(?i)' || streetType || ws || '+(' || name || ')' || ws || '+' || result.internal) FROM direction_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || ws || '+' || result.internal) ORDER BY length(name) desc LIMIT 1; IF tempString IS NOT NULL THEN postDir := tempString; SELECT INTO result.postDirAbbrev abbrev FROM direction_lookup WHERE texticregexeq(fullStreet, '(?i)' || ws || name || ws); END IF; END IF; ELSE -- No street type was found -- If an internal address was given, then the split becomes easy, and the -- street name is everything before it, without directions. IF result.internal IS NOT NULL THEN reducedStreet := substring(fullStreet, '(?i)^(.*?)' || ws || '+' || result.internal); tempInt := count(*) FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)' || ws || name || '$'); IF tempInt > 0 THEN postDir := substring(reducedStreet, '(?i)' || ws || '(' || name || ')' || '$') FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)' || ws || name || '$'); result.postDirAbbrev := abbrev FROM direction_lookup WHERE texticregexeq(reducedStreet, '(?i)' || ws || name || '$'); END IF; tempString := substring(reducedStreet, '(?i)^(' || name || ')' || ws) FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)^(' || name || ')' || ws) ORDER BY length(name) DESC; IF tempString IS NOT NULL THEN preDir := tempString; result.preDirAbbrev := abbrev FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC; result.streetName := substring(reducedStreet, '(?i)^' || preDir || ws || '+(.*?)(?:' || ws || '+' || cull_null(postDir) || '|$)'); ELSE result.streetName := substring(reducedStreet, '(?i)^(.*?)(?:' || ws || '+' || cull_null(postDir) || '|$)'); END IF; ELSE -- If a post direction is given, then the location is everything after, -- the street name is everything before, less any pre direction. fullStreet := trim(fullStreet); tempInt := count(*) FROM direction_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || '(?:' || ws || '|$)'); IF tempInt = 1 THEN -- A single postDir candidate was found. This makes it easier. postDir := substring(fullStreet, '(?i)' || ws || '(' || name || ')(?:' || ws || '|$)') FROM direction_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || '(?:' || ws || '|$)'); result.postDirAbbrev := abbrev FROM direction_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || '(?:' || ws || '|$)'); IF result.location IS NULL THEN result.location := substring(fullStreet, '(?i)' || ws || postDir || ws || '+(.*?)$'); END IF; reducedStreet := substring(fullStreet, '^(.*?)' || ws || '+' || postDir); tempString := substring(reducedStreet, '(?i)(^' || name || ')' || ws) FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC; IF tempString IS NOT NULL THEN preDir := tempString; result.preDirAbbrev := abbrev FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC; result.streetName := trim(substring(reducedStreet, '^' || preDir || ws || '+(.*)')); ELSE result.streetName := trim(reducedStreet); END IF; ELSIF tempInt > 1 THEN -- Multiple postDir candidates were found. We need to find the last -- incident of a direction, but avoid getting the last word from -- a two word direction. eg extracting "East" from "North East" -- We do this by sorting by length, and taking the last direction -- in the results that is not included in an earlier one. -- This wont be a problem it preDir is North East and postDir is -- East as the regex requires a space before the direction. Only -- the East will return from the preDir. tempInt := 0; FOR rec IN SELECT abbrev, substring(fullStreet, '(?i)' || ws || '(' || name || ')(?:' || ws || '|$)') AS value FROM direction_lookup WHERE fullStreet ILIKE '%' || name || '%' AND texticregexeq(fullStreet, '(?i)' || ws || name || '(?:' || ws || '|$)') ORDER BY length(name) desc LOOP tempInt := 0; IF tempInt < position(rec.value in fullStreet) THEN IF postDir IS NULL THEN tempInt := position(rec.value in fullStreet); postDir := rec.value; result.postDirAbbrev := rec.abbrev; ELSIF NOT texticregexeq(postDir, '(?i)' || rec.value) THEN tempInt := position(rec.value in fullStreet); postDir := rec.value; result.postDirAbbrev := rec.abbrev; END IF; END IF; END LOOP; IF result.location IS NULL THEN result.location := substring(fullStreet, '(?i)' || ws || postDir || ws || '+(.*?)$'); END IF; reducedStreet := substring(fullStreet, '(?i)^(.*?)' || ws || '+' || postDir); SELECT INTO tempString substring(reducedStreet, '(?i)(^' || name || ')' || ws) FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC; IF tempString IS NOT NULL THEN preDir := tempString; SELECT INTO result.preDirAbbrev abbrev FROM direction_lookup WHERE reducedStreet ILIKE '%' || name || '%' AND texticregexeq(reducedStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC; result.streetName := substring(reducedStreet, '^' || preDir || ws || '+(.*)'); ELSE result.streetName := reducedStreet; END IF; ELSE -- There is no street type, directional suffix or internal address -- to allow distinction between street name and location. IF result.location IS NULL THEN IF debug_flag THEN raise notice 'fullStreet: %', fullStreet; END IF; result.location := location_extract(fullStreet, result.stateAbbrev); -- If the location was found, remove it from fullStreet IF result.location IS NOT NULL THEN fullStreet := substring(fullStreet, '(?i)(.*),' || ws || '+' || result.location); END IF; END IF; -- Check for a direction prefix. SELECT INTO tempString substring(fullStreet, '(?i)(^' || name || ')' || ws) FROM direction_lookup WHERE texticregexeq(fullStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name); IF tempString IS NOT NULL THEN preDir := tempString; SELECT INTO result.preDirAbbrev abbrev FROM direction_lookup WHERE texticregexeq(fullStreet, '(?i)(^' || name || ')' || ws) ORDER BY length(name) DESC; IF result.location IS NOT NULL THEN -- The location may still be in the fullStreet, or may -- have been removed already result.streetName := substring(fullStreet, '^' || preDir || ws || '+(.*?)(' || ws || '+' || result.location || '|$)'); ELSE result.streetName := substring(fullStreet, '^' || preDir || ws || '+(.*?)' || ws || '*'); END IF; ELSE IF result.location IS NOT NULL THEN -- The location may still be in the fullStreet, or may -- have been removed already result.streetName := substring(fullStreet, '^(.*?)(' || ws || '+' || result.location || '|$)'); ELSE result.streetName := fullStreet; END IF; END IF; END IF; END IF; END IF; -- For address number only put numbers and stop if reach a non-number e.g. 123-456 will return 123 result.address := to_number(substring(addressString, '[0-9]+'), '99999999999'); --get rid of extraneous spaces before we return result.zip := trim(zipString); result.streetName := trim(result.streetName); result.location := trim(result.location); result.postDirAbbrev := trim(result.postDirAbbrev); result.parsed := TRUE; RETURN result; END $$ LANGUAGE plpgsql STABLE COST 100;��������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/normalize/pprint_addy.sql������������������0000644�0000000�0000000�00000003145�11722777314�026700� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- helper function to determine if street type -- should be put before or after the street name -- note in streettype lookup this is misnamed as is_hw -- because I originally thought only highways had that behavior -- it applies to foreign influenced roads like Camino (for road) CREATE OR REPLACE FUNCTION is_pretype(text) RETURNS boolean AS $$ SELECT EXISTS(SELECT name FROM street_type_lookup WHERE name = upper($1) AND is_hw ); $$ LANGUAGE sql IMMUTABLE STRICT; /** I know this should be stable but it's practically immutable :) **/ CREATE OR REPLACE FUNCTION pprint_addy( input NORM_ADDY ) RETURNS VARCHAR AS $_$ DECLARE result VARCHAR; BEGIN IF NOT input.parsed THEN RETURN NULL; END IF; result := cull_null(input.address::text) || COALESCE(' ' || input.preDirAbbrev, '') || CASE WHEN is_pretype(input.streetTypeAbbrev) THEN ' ' || input.streetTypeAbbrev ELSE '' END || COALESCE(' ' || input.streetName, '') || CASE WHEN NOT is_pretype(input.streetTypeAbbrev) THEN ' ' || input.streetTypeAbbrev ELSE '' END || COALESCE(' ' || input.postDirAbbrev, '') || CASE WHEN input.address IS NOT NULL OR input.streetName IS NOT NULL THEN ', ' ELSE '' END || cull_null(input.internal) || CASE WHEN input.internal IS NOT NULL THEN ', ' ELSE '' END || cull_null(input.location) || CASE WHEN input.location IS NOT NULL THEN ', ' ELSE '' END || COALESCE(input.stateAbbrev || ' ' , '') || cull_null(input.zip); RETURN trim(result); END; $_$ LANGUAGE plpgsql IMMUTABLE; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/create_geocode.bat�������������������������0000755�0000000�0000000�00000002355�12217742511�025256� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������REM $Id: create_geocode.bat 11969 2013-09-23 04:36:25Z robe $ set PGPORT=5432 set PGHOST=localhost set PGUSER=postgres set PGPASSWORD=yourpasswordhere set THEDB=geocoder set PGBIN=C:\Program Files\PostgreSQL\9.1\bin set PGCONTRIB=C:\Program Files\PostgreSQL\9.1\share\contrib REM "%PGBIN%\psql" -d "%THEDB%" -f "%PGCONTRIB%\fuzzystrmatch.sql" REM If you are using PostgreSQL 9.1 or above, use the extension syntax instead as shown below "%PGBIN%\psql" -d "%THEDB%" -c "CREATE EXTENSION fuzzystrmatch;" "%PGBIN%\psql" -d "%THEDB%" -c "CREATE SCHEMA tiger;" REM unremark this next line and edit if you want the search paths set as part of the install REM "%PGBIN%\psql" -d "%THEDB%" -c "ALTER DATABASE %THEDB% SET search_path=public, tiger;" "%PGBIN%\psql" -d "%THEDB%" -f "create_geocode.sql" REM "%PGBIN%\psql" -d "%THEDB%" -f "tables\lookup_tables_2011.sql" "%PGBIN%\psql" -d "%THEDB%" -c "CREATE SCHEMA tiger_data;" "%PGBIN%\psql" -d "%THEDB%" -f "tiger_loader_2013.sql;" "%PGBIN%\psql" -d "%THEDB%" -f "census_loader.sql;" "%PGBIN%\psql" -d "%THEDB%" -c "SELECT tiger.create_census_base_tables();" "%PGBIN%\psql" -d "%THEDB%" -c "CREATE INDEX idx_tiger_addr_least_address ON addr USING btree (least_hn(fromhn,tohn));" pause �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/�����������������������������������0000755�0000000�0000000�00000000000�12317530606�023301� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/normalize_address_regress����������0000644�0000000�0000000�00000004073�12026602004�030454� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#887|2450|N|COLORADO|St|||PHILADELPHIA|PA|19132|t #1051a|212||3rd|Ave|N|Suite 560|Minneapolis|MN|55401|t #1051b|3937||43RD|Ave|S||MINNEAPOLIS|MN|55406|t #1051c|212|N|3rd|Ave|||Minneapolis|MN|55401|t #1051d|212||3rd|Ave|N||Minneapolis|MN|55401|t 529||Main|St|||Boston|MA|02129|t 529||Main|St|||Boston|MA|02129|t 529||Main|St|||Boston|MA||t 529||Main|St||Apt 201|Boston|MA|02129|t 529||Main|St||Apt 201|Boston|MA|02129|t 529||Main|St||Apt 201|Boston|MA||t #1108a|529||Main|St||Suite 201|Boston|MA|02129|t #1073a|212||3rd|Ave|N||MINNEAPOLIS|MN|553404|t #1073b|212||3rd|Ave|N||MINNEAPOLIS|MN|55401|t #1073c|529||Main|St|||Boston|MA|021|t #1086a|949|N|3rd|St|||New Hyde Park|NY|11040|t #1086b|949|N|3rd|St|||New Hyde Park|NY|11040|t #1076a|16725||24|Co Rd|||Plymouth|MN|55447|t #1076b|16725||24|Co Rd|||Plymouth|MN|55447|t #1076c|13800||9|Co Hwy|||Andover|MN|55304|t #1076d|13800||9||||Andover|MN|55304|t #1076e|14||Forest|Rd|||Acton|MA||t #1076f|1940||C|Co Rd|W||Roseville|MN|55113|t #1076g|3900||6|Rte|||Eastham|MA|02642|t #1076h|4533||PARK|Ave|S||MINNEAPOLIS|MN|55407|t #1076i|4533||33|Co Rd|||MINNEAPOLIS|MN|55407|t #1109a|4373||LAKE|Dr|||ROBBINSDALE|MN|55422|t #1109b|4373||LAKE|Dr|||ROBBINSDALE|MN|55422|t #1074a|3420||RHODE ISLAND|Ave|S||ST. LOUIS PARK|MN|55426|t #1074b|26||Court|St|||Boston|MA|02109|t #1112a|8401|W|35W|Svc Dr|NE||Blaine|MN|55449|t #1112b|8401||35W||||Blaine|MN|55449|t #1112c|8401||35W||W||Blaine|MN|55449|t #1112d|8401|W|35W||||Blaine|MN|55449|t #1112e|8401|W|35W||||Blaine|MN|55449|t #1125a|19596 Co Rd 480, COLCORD, OK 74338 #1125b|4345 Rte 353, SALAMANCA, NY 14779|4345||353|Rte|||SALAMANCA|NY|14779|t #1125c|19799 State Rte O, COSBY, MO 64436|19799||O|State Rte|||COSBY|MO|64436|t #1125d|I- 90, Boston, MA|||90|I-|||Boston|MA||t #1125e|I-90, Boston, MA|||I-90||||Boston|MA||t #1125f|I- 90, Boston, MA|||90|I-|||Boston|MA||t #1310a|1110 W CAPITOL Ave, WEST SACRAMENTO, CA|1110|W|CAPITOL|Ave|||WEST SACRAMENTO|CA||t #1614a|8435 Co Rd 20 SE, ROCHESTER, MN 55904|8435||20|Co Rd|SE||ROCHESTER|MN|55904|t #1614b|3208 US Hwy 52, Rochester, MN 55901|3208||52|US Hwy|||Rochester|MN|55901|t���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/reverse_geocode_regress.sql��������0000644�0000000�0000000�00000001373�12000703147�030707� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\timing SELECT pprint_addy(addy[1]), addy FROM reverse_geocode(ST_Point(-71.27593,42.33891)); -- I 90 Exit 14, Weston MA SELECT pprint_addy(addy[1]), addy FROM reverse_geocode(ST_Point(-71.85335,42.19262)); -- I 90 Exit 10, Auburn, MA 01501 SELECT pprint_addy(addy[1]), addy FROM reverse_geocode(ST_Point(-71.057811,42.358274)); -- 1 Devonshire Place (washington st area) SELECT pprint_addy(addy[1]), addy FROM reverse_geocode(ST_Point(-71.123848,42.41115)); -- 30 capen, Medford, MA 02155 SELECT pprint_addy(addy[1]), addy FROM reverse_geocode(ST_Point(-71.09436,42.35981)); -- 77 Massachusetts Ave, Cambridge, MA 02139 SELECT '#1913' As ticket, pprint_addy(addy[1]) FROM reverse_geocode(ST_Point(-71.2248416, 42.30344833)); -- I- 95, Needham, MA 02494 \timing���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/pagc_normalize_address_regress.sql�0000644�0000000�0000000�00000013406�12127557621�032264� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: normalize_address_regress.sql 10309 2012-09-20 11:54:44Z robe $ SELECT set_geocode_setting('use_pagc_address_parser', 'true'); \timing SELECT '#887' As ticket, * FROM normalize_address('2450 N COLORADO ST, PHILADELPHIA, PA, 19132'); SELECT '#1051a' As ticket, * FROM normalize_address('212 3rd Ave N Suite 560, Minneapolis, MN 55401'); SELECT '#1051b' As ticket, * FROM normalize_address('3937 43RD AVE S, MINNEAPOLIS, MN 55406'); SELECT '#1051c' As ticket, * FROM normalize_address('212 N 3rd Ave, Minneapolis, MN 55401'); -- City missing , -- NOTE this one won't normalize right if you don't have MN data loaded SELECT '#1051d' As ticket, * FROM normalize_address('212 3rd Ave N Minneapolis, MN 55401'); -- comma in wrong spot SELECT * FROM normalize_address('529 Main Street, Boston MA, 02129'); -- comma in right spot SELECT * FROM normalize_address('529 Main Street, Boston,MA 02129'); -- partial address SELECT * FROM normalize_address('529 Main Street, Boston, MA'); -- Full address with suite using , SELECT * FROM normalize_address('529 Main Street, Apt 201, Boston, MA 02129'); -- Full address with apart using space SELECT * FROM normalize_address('529 Main Street Apt 201, Boston, MA 02129'); -- Partial address with apartment SELECT * FROM normalize_address('529 Main Street, Apt 201, Boston, MA'); --This one fails so lead out for now SELECT '#1108a' As ticket, * FROM normalize_address('529 Main Street, Suite 201, Boston, MA 02129'); -- Partial and Mangled zipcodes SELECT '#1073a' As ticket, * FROM normalize_address('212 3rd Ave N, MINNEAPOLIS, MN 553404'); SELECT '#1073b' As ticket, * FROM normalize_address('212 3rd Ave N, MINNEAPOLIS, MN 55401-'); SELECT '#1073c' As ticket, * FROM normalize_address('529 Main Street, Boston, MA 021'); -- comma in wrong position SELECT '#1086a' As ticket, * FROM normalize_address('949 N 3rd St, New Hyde Park, NY, 11040'); -- comma in right position -- SELECT '#1086b' As ticket, * FROM normalize_address('949 N 3rd St, New Hyde Park, NY 11040'); -- country roads and highways with spaces in street type SELECT '#1076a' As ticket, * FROM normalize_address('16725 Co Rd 24, Plymouth, MN 55447'); SELECT '#1076b' As ticket, * FROM normalize_address('16725 County Road 24, Plymouth, MN 55447'); SELECT '#1076c' As ticket, * FROM normalize_address('13800 County Hwy 9, Andover, MN 55304'); SELECT '#1076d' As ticket, * FROM normalize_address('13800 9, Andover, MN 55304'); -- this one is a regular street that happens to have a street type as the name SELECT '#1076e' As ticket, * FROM normalize_address('14 Forest Road, Acton, MA'); -- A country road with a letter name and direction -- NOTE this doesn't completely normalize right since the direction W is being cut off -- SELECT '#1076f' As ticket, * FROM normalize_address('1940 County Road C W, Roseville, MN 55113'); -- Route with a name that sounds like a direction -- SELECT '#1076g' As ticket, * FROM normalize_address('3900 Route 6, Eastham, Massachusetts 02642'); -- Street that has same name as type -- SELECT '#1076h' As ticket, * FROM normalize_address('4533 PARK AVE S, MINNEAPOLIS, MN 55407'); -- same street with alternate county name SELECT '#1076i' As ticket, * FROM normalize_address('4533 County Road 33, MINNEAPOLIS, MN 55407'); -- Same case of street type that has name as a type -- -- this matches - SELECT '#1109a' As ticket, * from normalize_address('4373 LAKE DRIVE, ROBBINSDALE, MN 55422'); -- this failed -- SELECT '#1109b' As ticket, * from normalize_address('4373 LAKE DR, ROBBINSDALE, MN 55422'); -- another type (Is) that is part of street name but a compound street name SELECT '#1074a' As ticket, * FROM normalize_address('3420 RHODE ISLAND AVE S, ST. LOUIS PARK, MN 55426'); -- another type that is part of street name -- SELECT '#1074b' As ticket, * FROM normalize_address('26 Court Street, Boston,MA 02109'); -- service roads and interstates SELECT '#1112a' As ticket, * FROM normalize_address('8401 W 35W Service Dr NE, Blaine, MN 55449'); SELECT '#1112b' As ticket, * FROM normalize_address('8401 35W, Blaine, MN 55449'); SELECT '#1112c' As ticket, * FROM normalize_address('8401 35W West, Blaine, MN 55449'); SELECT '#1112d' As ticket, * FROM normalize_address('8401 West 35W, Blaine, MN 55449'); SELECT '#1112e' As ticket, * FROM normalize_address('8401 W 35W, Blaine, MN 55449'); -- Testing pretty print of highway addresses -- These tests excerpted from Brian Hamlin's CASS failures -- in #1077 SELECT '#1125a' As ticket, pprint_addy(normalize_address('19596 COUNTY ROAD 480, COLCORD, OK 74338')); SELECT '#1125b' As ticket, pprint_addy(addy), addy.* FROM normalize_address('4345 353 Rte, SALAMANCA, NY 14779') AS addy; SELECT '#1125c' As ticket, pprint_addy(addy), addy.* FROM normalize_address('19799 STATE ROUTE O, COSBY, MO 64436') AS addy; -- some more to test interstate permutations SELECT '#1125d' As ticket, pprint_addy(addy), addy.* FROM normalize_address('Interstate 90,Boston, MA') As addy; -- this one is wrong (because the lack of space trips it up) but will fix later SELECT '#1125e' As ticket, pprint_addy(addy), addy.* FROM normalize_address('I-90,Boston, MA') As addy; SELECT '#1125f' As ticket, pprint_addy(addy), addy.* FROM normalize_address('I 90,Boston, MA') As addy; -- location with prefixes getting caught in post prefix SELECT '#1310a' As ticket, pprint_addy(addy), addy.* FROM normalize_address('1110 W CAPITOL AVE, WEST SACRAMENTO, CA') As addy; -- #1614 County Rd SELECT '#1614a' As ticket, pprint_addy(addy), addy.* FROM normalize_address('8435 COUNTY RD 20 SE, ROCHESTER, MN 55904') As addy; SELECT '#1614b' As ticket, pprint_addy(addy), addy.* FROM normalize_address('3208 U.S. 52, Rochester, MN 55901') As addy; \timing SELECT set_geocode_setting('use_pagc_address_parser', 'false'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/regress.sql������������������������0000644�0000000�0000000�00000001172�12127557621�025502� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\a --SET seq_page_cost='1000'; SELECT set_geocode_setting('debug_reverse_geocode', 'false'); SELECT set_geocode_setting('debug_geocode_address', 'false'); SELECT set_geocode_setting('debug_normalize_address', 'false'); SELECT set_geocode_setting('debug_geocode_intersection', 'false'); SELECT set_geocode_setting('reverse_geocode_numbered_roads', '1'); -- prefer numbered highway name \o normalize_address_regress.out \i normalize_address_regress.sql \o pagc_normalize_address_regress.out \i pagc_normalize_address_regress.sql \o geocode_regress.out \i geocode_regress.sql \o reverse_geocode_regress.out \i reverse_geocode_regress.sql������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/reverse_geocode_regress������������0000644�0000000�0000000�00000001002�12000703147�030076� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������I- 90, Weston, MA 02493|{"(,,90,I-,,,Weston,MA,02493,)"} I- 90, Auburn, MA 01501|{"(,,90,I-,,,Auburn,MA,01501,)"} 158 Washington St, Boston, MA 02108|{"(158,,Washington,St,,,Boston,MA,02108,)"} 32 Capen St, Medford, MA 02155|{"(32,,Capen,St,,,Medford,MA,02155,)","(3,,Edison,Ave,,,Medford,MA,02155,)"} 58 Massachusetts Ave, Cambridge, MA 02139|{"(58,,Massachusetts,Ave,,,Cambridge,MA,02139,)","(7,,Wellesley,St,,,Cambridge,MA,02139,)","(7,,Massachusetts,Ave,,,Cambridge,MA,02139,)"} #1913|I- 95, Needham, MA 02494 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/geocode_regress.sql����������������0000644�0000000�0000000�00000031363�11722777314�027177� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: geocode_regress.sql 9324 2012-02-27 22:08:12Z pramsey $ \timing -- Limit 1 SELECT 'T1', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('529 Main Street, Boston, MA 02129',1); SELECT 'T2', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('75 State Street, Boston, MA 02109',1); SELECT 'T3', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('100 Federal Street, Boston, MA 02109',1); -- default SELECT 'T4', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('529 Main Street, Boston, MA 02129'); SELECT 'T5', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('75 State Street, Boston, MA 02109'); SELECT 'T6', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('100 Federal Street, Boston,MA 02109'); -- 20 SELECT 'T7', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('529 Main Street, Boston, MA 02129',20); SELECT 'T8', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('75 State Street, Boston, MA 02109',20); SELECT 'T9', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('100 Federal Street, Boston, MA 02109',20); -- Limit 1 - Test caching effects SELECT 'T10', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('530 Main Street, Boston MA, 02129',1); SELECT 'T11', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('76 State Street, Boston MA, 02109',1); SELECT 'T12', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('101 Federal Street, Boston, MA',20); -- Test batch geocoding along a street SELECT '#TB1' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target::text,1) As g, target FROM (VALUES ('24 School Street, Boston, MA 02108'), ('20 School Street, Boston, MA 02109')) As f(target) ) As foo; -- Partial address SELECT 'T13', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('101 Federal Street, Boston MA',20); SELECT 'T14', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('101 Federal Street, Boston MA',1); --Test misspellings and missing zip -- SELECT 'T15', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('101 Fedaral Street, Boston, MA',1); SELECT 'T16', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('101 Fedaral Street, Boston, MA',50); -- needs addr these ones have more than 2 sides -- my alma mater doesn't geocode right without addr check -- SELECT 'T17', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('77 Massachusetts Avenue, Cambridge, MA 02139',1); -- zip provided but no state - should still be fast under 250ms SELECT 'T18a', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('26 Court Street, 02109',1); SELECT 'T18b', pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('26 Court Street,Boston,02109',1); -- Ratings wrong for missing or wrong local zips SELECT '#1087a' As ticket, pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('75 State Street, Boston, MA 02110',3); SELECT '#1087b' As ticket, pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('75 State Street, Boston, MA',3); --right zip SELECT '#1087c' As ticket, pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('75 State Street, Boston, MA 02109',1); --Geocoding mangled zipcodes SELECT '#1073a' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '212 3rd Ave N, MINNEAPOLIS, MN 553404'::text As target) AS f) As foo; SELECT '#1073b' As ticket, pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('212 3rd Ave N, MINNEAPOLIS, MN 55401-',2); -- country roads and highways with spaces in street type SELECT '#1076a' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target) As g, target FROM (SELECT '16725 Co Rd 24, Plymouth, MN 55447'::text As target) As f) As foo; SELECT '#1076b' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,1) As g, target FROM (SELECT '16725 County Road 24, Plymouth, MN 55447'::text As target) As f) As foo; SELECT '#1076c' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,1) As g, target FROM (SELECT '13800 County Hwy 9, Andover, MN 55304'::text As target) AS f) As foo; SELECT '#1076d' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,1) As g, target FROM (SELECT '13800 9, Andover, MN 55304'::text As target) AS f) As foo; SELECT '#1076e' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,4) As g, target FROM (SELECT '3900 Route 6, Eastham, Massachusetts 02642'::text As target) AS f) As foo; -- country road that starts with a letter SELECT '#1076f' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,3) As g, target FROM (SELECT '1940 County Road C W, Roseville, MN 55113'::text As target) AS f) As foo; -- ad road that in some sections no street range recorded -- SELECT '#1076g' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target) As g, target FROM (SELECT '15709 Rockford Road, Plymouth, MN 55447'::text As target) As f) AS foo; -- testing RT common abbreviation for route, ensure asking for 1 gives most probable -- SELECT '#1076h' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,3) As g, target FROM (SELECT '300 Rt 3A, Hingham, MA'::text As target) As f) As foo; -- alternate spellings SELECT '#1074a' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target) As g, target FROM (SELECT '8525 COTTAGE WOOD TERR, Blaine, MN 55434'::text As target) As f) AS foo; SELECT '#1074b' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target) As g, target FROM (SELECT '8525 COTTAGEWOOD TERR, Blaine, MN 55434'::text As target) As f) AS foo; -- testing region -- SELECT '#1070a' As ticket, pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('100 Federal Street, Boston, MA 02109',3, (SELECT ST_Union(the_geom) FROM place WHERE statefp = '25' AND name = 'Lynn')::geometry); SELECT '#1070b' As ticket, pprint_addy(addy) As address, ST_AsText(ST_SnapToGrid(geomout,0.00001)) As pt, rating FROM geocode('100 Federal Street, MA',3, (SELECT ST_Union(the_geom) FROM place WHERE statefp = '25' AND name = 'Lynn')::geometry); -- service roads and interstates SELECT '#1112a' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '8401 W 35W Service Dr NE, Blaine, MN 55449'::text As target) As f) As foo; SELECT '#1112b' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,1) As g, target FROM (SELECT '8401 35W, Blaine, MN 55449'::text As target) As f) As foo; SELECT '#1112c' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,1) As g, target FROM (SELECT '8401 35W West, Blaine, MN 55449'::text As target) As f) As foo; SELECT '#1112d' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,1) As g, target FROM (SELECT '8401 West 35W, Blaine, MN 55449'::text As target) As f) As foo; SELECT '#1112e' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,1) As g, target FROM (SELECT '8401 W 35W, Blaine, MN 55449'::text As target) As f) As foo; -- working with prequalabrv such as Old .. something or other SELECT '#1113a' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '8040 OLD CEDAR AVE S, BLOOMINGTON, MN 55425'::text As target) As f) As foo; SELECT '#1113b' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '8040 CEDAR AVE S, BLOOMINGTON, MN 55425'::text As target) As f) As foo; SELECT '#1113c' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '17405 Old Rockford Rd, Plymouth, MN 55446'::text As target) As f) As foo; SELECT '#1113d' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '17405 Rockford Rd, Plymouth, MN 55446'::text As target) As f) As foo; SELECT '#1113e' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '198 OLD CONSTANCE BLVD, ANDOVER, MN 55304'::text As target) As f) As foo; SELECT '#1113f' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '198 CONSTANCE BLVD, ANDOVER, MN 55304'::text As target) As f) As foo; -- #1145 addresses used to be slow to geocode took minutes SELECT '#1145a' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '4051 27th Ave S Minneapolis MN 55405'::text As target) As f) As foo; SELECT '#1145b' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '3625 18th Ave S Minneapolis MN 55406'::text As target) As f) As foo; SELECT '#1145c' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '4057 10th Ave S Minneapolis MN 55406'::text As target) As f) As foo; SELECT '#1145d' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target,2) As g, target FROM (SELECT '8512 141 St Ct Apple Valley MN 55124'::text As target) As f) As foo; SELECT '#1145e' As ticket, pprint_addy((g).addy) As address, target, ST_AsText(ST_SnapToGrid((g).geomout, 0.00001)) As pt, (g).rating FROM (SELECT geocode(target) As g, target FROM (SELECT '103 36th St W Minneapolis MN 55409'::text As target) As f) As foo; -- cross street intersection SELECT '#1333a' AS ticket, pprint_addy(addy), st_astext(geomout),rating FROM geocode_intersection('Weld', 'School', 'MA', 'Boston'); SELECT '#1333b' AS ticket, pprint_addy(addy), st_astext(geomout),rating FROM geocode_intersection('Haverford St','Germania St', 'MA', 'Boston', '02130',1); -- crossing highways fails -- zip check SELECT '#1392a' AS ticket, pprint_addy(addy), st_astext(geomout),rating FROM geocode_intersection('State Hwy 121', 'N Denton Tap Rd', 'TX', 'Coppell', '', 2); SELECT '#1392b' AS ticket, pprint_addy(addy), st_astext(geomout),rating FROM geocode_intersection('State Hwy 121', 'N Denton Tap Rd', 'TX','', '', 2); -- \timing �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/geocode_regress��������������������0000644�0000000�0000000�00000015774�11702600011�026362� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T1|529 Main St, Boston, MA 02129|POINT(-71.07187 42.38351)|0 T2|75 State St, Boston, MA 02109|POINT(-71.0557 42.35908)|0 T3|100 Federal St, Boston, MA 02110|POINT(-71.05631 42.35477)|1 T4|529 Main St, Boston, MA 02129|POINT(-71.07187 42.38351)|0 T5|75 State St, Boston, MA 02109|POINT(-71.0557 42.35908)|0 T6|100 Federal St, Boston, MA 02110|POINT(-71.05631 42.35477)|1 T6|98 Federal Ct, Boston, MA 02110|POINT(-71.05672 42.35413)|14 T7|529 Main St, Boston, MA 02129|POINT(-71.07187 42.38351)|0 T8|75 State St, Boston, MA 02109|POINT(-71.0557 42.35908)|0 T9|100 Federal St, Boston, MA 02110|POINT(-71.05631 42.35477)|1 T9|98 Federal Ct, Boston, MA 02110|POINT(-71.05672 42.35413)|14 T10|530 Main St, Boston, MA 02129|POINT(-71.07173 42.38345)|0 T11|76 State St, Boston, MA 02109|POINT(-71.05615 42.359)|0 T12|101 Federal St, Boston, MA 02110|POINT(-71.0563 42.35469)|1 T12|99 Federal Ct, Boston, MA 02110|POINT(-71.05672 42.35413)|14 T12|98 Federal Ln, Dedham, MA 02026|POINT(-71.18356 42.2383)|27 #TB1|24 School St, Boston, MA 02108|24 School Street, Boston, MA 02108|POINT(-71.05888 42.35762)|0 #TB1|20 School St, Boston, MA 02108|20 School Street, Boston, MA 02109|POINT(-71.05876 42.35758)|1 T13|101 Federal St, Boston, MA 02110|POINT(-71.0563 42.35469)|1 T13|99 Federal Ct, Boston, MA 02110|POINT(-71.05672 42.35413)|14 T13|98 Federal Ln, Dedham, MA 02026|POINT(-71.18356 42.2383)|27 T14|101 Federal St, Boston, MA 02110|POINT(-71.0563 42.35469)|1 T15|101 Federal St, Boston, MA 02110|POINT(-71.0563 42.35469)|11 T16|101 Federal St, Boston, MA 02110|POINT(-71.0563 42.35469)|11 T16|99 Federal Ct, Boston, MA 02110|POINT(-71.05672 42.35413)|24 T16|98 Federal Ln, Dedham, MA 02026|POINT(-71.18356 42.2383)|37 T17|77 Massachusetts Ave, Cambridge, MA 02139|POINT(-71.09436 42.35981)|0 T18a|26 Court St, Boston, MA 02108|POINT(-71.05885 42.35911)|6 T18b|26 Court St, Boston, MA 02108|POINT(-71.05885 42.35911)|1 #1087a|75 State St, Boston, MA 02109|POINT(-71.0557 42.35908)|1 #1087b|75 State St, Boston, MA 02109|POINT(-71.0557 42.35908)|1 #1087b|75 State St, Milton, MA 02186|POINT(-71.04091 42.25635)|4 #1087c|75 State St, Boston, MA 02109|POINT(-71.0557 42.35908)|0 #1073a|212 3rd Ave N, Minneapolis, MN 55401|212 3rd Ave N, MINNEAPOLIS, MN 553404|POINT(-93.27181 44.98502)|10 #1073a|212 3rd Ave S, Minneapolis, MN 55401|212 3rd Ave N, MINNEAPOLIS, MN 553404|POINT(-93.26334 44.98087)|12 #1073b|212 3rd Ave N, Minneapolis, MN 55401|POINT(-93.27181 44.98502)|0 #1076a|16725 Co Rd 24, Plymouth, MN 55447|16725 Co Rd 24, Plymouth, MN 55447|POINT(-93.49328 45.02184)|25 #1076a|15898 Co Rd 24, Plymouth, MN 55446|16725 Co Rd 24, Plymouth, MN 55447|POINT(-93.48125 45.02691)|31 #1076b|16725 Co Rd 24, Plymouth, MN 55447|16725 County Road 24, Plymouth, MN 55447|POINT(-93.49328 45.02184)|25 #1076c|13800 Co Hwy 9, Andover, MN 55304|13800 County Hwy 9, Andover, MN 55304|POINT(-93.35733 45.22052)|30 #1076d|13800 Co Hwy 9, Andover, MN 55304|13800 9, Andover, MN 55304|POINT(-93.35733 45.22052)|0 #1076e|3877 US Hwy 6, North Eastham, MA 02642|3900 Route 6, Eastham, Massachusetts 02642|POINT(-69.98698 41.84775)|23 #1076f|1940 Co Rd C W, Roseville, MN 55113|1940 County Road C W, Roseville, MN 55113|POINT(-93.18492 45.02058)|25 #1076f|1940 W Co Rd C, Roseville, MN 55113|1940 County Road C W, Roseville, MN 55113|POINT(-93.18492 45.02058)|29 #1076f|138 Co Rd C W, Little Canada, MN 55113|1940 County Road C W, Roseville, MN 55113|POINT(-93.10518 45.02074)|47 #1076g|15709 Rockford Rd, Plymouth, MN 55447|15709 Rockford Road, Plymouth, MN 55447|POINT(-93.47897 45.02726)|0 #1076h|300 State Hwy 3, Hingham, MA 02043|300 Rt 3A, Hingham, MA|POINT(-70.91448 42.24915)|18 #1076h|300 State Hwy 3, Burlington, MA 01803|300 Rt 3A, Hingham, MA|POINT(-71.20674 42.51586)|25 #1076h|300 State Hwy 3, Boston, MA 02114|300 Rt 3A, Hingham, MA|POINT(-71.07011 42.36428)|25 #1074a|8525 Cottagewood Ter NE, Blaine, MN 55434|8525 COTTAGE WOOD TERR, Blaine, MN 55434|POINT(-93.24462 45.1248)|14 #1074a|8499 Cottagewood Ter NE, Spring Lake Park, MN 55432|8525 COTTAGE WOOD TERR, Blaine, MN 55434|POINT(-93.24464 45.1237)|34 #1074b|8525 Cottagewood Ter NE, Blaine, MN 55434|8525 COTTAGEWOOD TERR, Blaine, MN 55434|POINT(-93.24462 45.1248)|4 #1074b|8499 Cottagewood Ter NE, Spring Lake Park, MN 55432|8525 COTTAGEWOOD TERR, Blaine, MN 55434|POINT(-93.24464 45.1237)|24 #1070a|100 Federal St, Lynn, MA 01905|POINT(-70.96783 42.4659)|8 #1070b|100 Federal St, Lynn, MA 01905|POINT(-70.96783 42.4659)|8 #1112a|8401 W 35W Svc Rd NE, Blaine, MN 55449|8401 W 35W Service Dr NE, Blaine, MN 55449|POINT(-93.19083 45.12389)|10 #1112b|8401 W 35W Svc Rd NE, Blaine, MN 55449|8401 35W, Blaine, MN 55449|POINT(-93.19083 45.12389)|36 #1112c|8401 W 35W Svc Rd NE, Blaine, MN 55449|8401 35W West, Blaine, MN 55449|POINT(-93.19083 45.12389)|36 #1112d|8401 W 35W Svc Rd NE, Blaine, MN 55449|8401 West 35W, Blaine, MN 55449|POINT(-93.19083 45.12389)|34 #1112e|8401 W 35W Svc Rd NE, Blaine, MN 55449|8401 W 35W, Blaine, MN 55449|POINT(-93.19083 45.12389)|34 #1113a|8040 Old Cedar Ave S, Bloomington, MN 55425|8040 OLD CEDAR AVE S, BLOOMINGTON, MN 55425|POINT(-93.24792 44.85708)|0 #1113b|8040 Old Cedar Ave S, Bloomington, MN 55425|8040 CEDAR AVE S, BLOOMINGTON, MN 55425|POINT(-93.24792 44.85708)|10 #1113c|17405 Old Rockford Rd, Plymouth, MN 55446|17405 Old Rockford Rd, Plymouth, MN 55446|POINT(-93.50121 45.0345)|0 #1113d|12898 Rockford Rd, Plymouth, MN 55446|17405 Rockford Rd, Plymouth, MN 55446|POINT(-93.4401 45.0308)|6 #1113d|15801 Rockford Rd, Plymouth, MN 55447|17405 Rockford Rd, Plymouth, MN 55446|POINT(-93.47975 45.02701)|6 #1113e|198 Old Constance Blvd NW, Andover, MN 55304|198 OLD CONSTANCE BLVD, ANDOVER, MN 55304|POINT(-93.27027 45.26203)|4 #1113f|198 Constance Blvd NW, Andover, MN 55304|198 CONSTANCE BLVD, ANDOVER, MN 55304|POINT(-93.26833 45.26231)|4 #1113f|198 Constance Blvd NE, Ham Lake, MN 55304|198 CONSTANCE BLVD, ANDOVER, MN 55304|POINT(-93.26114 45.2657)|11 #1145a|4051 27th Ave S, Minneapolis, MN 55406|4051 27th Ave S Minneapolis MN 55405|POINT(-93.23339 44.92959)|1 #1145b|3625 18th Ave S, Minneapolis, MN 55407|3625 18th Ave S Minneapolis MN 55406|POINT(-93.24863 44.9373)|1 #1145c|4057 10th Ave S, Minneapolis, MN 55407|4057 10th Ave S Minneapolis MN 55406|POINT(-93.25997 44.92951)|1 #1145d|8498 141st Ct, Apple Valley, MN 55124|8512 141 St Ct Apple Valley MN 55124|POINT(-93.23693 44.74478)|15 #1145d|4898 141st St W, Apple Valley, MN 55124|8512 141 St Ct Apple Valley MN 55124|POINT(-93.1625 44.74471)|24 #1145e|103 E 36th St, Minneapolis, MN 55408|103 36th St W Minneapolis MN 55409|POINT(-93.2766 44.93774)|5 #1145e|103 W 36th St, Minneapolis, MN 55408|103 36th St W Minneapolis MN 55409|POINT(-93.27979 44.93773)|5 #1333a|98 Weld Ave, Boston, MA 02119|POINT(-71.099 42.314234)|3 #1333a|99 Weld Ave, Boston, MA 02119|POINT(-71.099 42.314234)|3 #1333b|98 Haverford St, Boston, MA 02130|POINT(-71.101375 42.31376)|0 #1392a|State Hwy 121, Coppell, TX|POINT(-96.993416 32.987025)|8 #1392a|State Hwy 121, Coppell, TX|POINT(-96.993397 32.985954)|8 #1392b|State Hwy 121, Coppell, TX|POINT(-96.993416 32.987025)|18 #1392b|State Hwy 121, Coppell, TX|POINT(-96.993397 32.985954)|18 ����postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/regress/normalize_address_regress.sql������0000644�0000000�0000000�00000013046�12026602004�031252� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: normalize_address_regress.sql 10309 2012-09-20 11:54:44Z robe $ \timing SELECT '#887' As ticket, * FROM normalize_address('2450 N COLORADO ST, PHILADELPHIA, PA, 19132'); SELECT '#1051a' As ticket, * FROM normalize_address('212 3rd Ave N Suite 560, Minneapolis, MN 55401'); SELECT '#1051b' As ticket, * FROM normalize_address('3937 43RD AVE S, MINNEAPOLIS, MN 55406'); SELECT '#1051c' As ticket, * FROM normalize_address('212 N 3rd Ave, Minneapolis, MN 55401'); -- City missing , -- NOTE this one won't normalize right if you don't have MN data loaded SELECT '#1051d' As ticket, * FROM normalize_address('212 3rd Ave N Minneapolis, MN 55401'); -- comma in wrong spot SELECT * FROM normalize_address('529 Main Street, Boston MA, 02129'); -- comma in right spot SELECT * FROM normalize_address('529 Main Street, Boston,MA 02129'); -- partial address SELECT * FROM normalize_address('529 Main Street, Boston, MA'); -- Full address with suite using , SELECT * FROM normalize_address('529 Main Street, Apt 201, Boston, MA 02129'); -- Full address with apart using space SELECT * FROM normalize_address('529 Main Street Apt 201, Boston, MA 02129'); -- Partial address with apartment SELECT * FROM normalize_address('529 Main Street, Apt 201, Boston, MA'); --This one fails so lead out for now SELECT '#1108a' As ticket, * FROM normalize_address('529 Main Street, Suite 201, Boston, MA 02129'); -- Partial and Mangled zipcodes SELECT '#1073a' As ticket, * FROM normalize_address('212 3rd Ave N, MINNEAPOLIS, MN 553404'); SELECT '#1073b' As ticket, * FROM normalize_address('212 3rd Ave N, MINNEAPOLIS, MN 55401-'); SELECT '#1073c' As ticket, * FROM normalize_address('529 Main Street, Boston, MA 021'); -- comma in wrong position SELECT '#1086a' As ticket, * FROM normalize_address('949 N 3rd St, New Hyde Park, NY, 11040'); -- comma in right position -- SELECT '#1086b' As ticket, * FROM normalize_address('949 N 3rd St, New Hyde Park, NY 11040'); -- country roads and highways with spaces in street type SELECT '#1076a' As ticket, * FROM normalize_address('16725 Co Rd 24, Plymouth, MN 55447'); SELECT '#1076b' As ticket, * FROM normalize_address('16725 County Road 24, Plymouth, MN 55447'); SELECT '#1076c' As ticket, * FROM normalize_address('13800 County Hwy 9, Andover, MN 55304'); SELECT '#1076d' As ticket, * FROM normalize_address('13800 9, Andover, MN 55304'); -- this one is a regular street that happens to have a street type as the name SELECT '#1076e' As ticket, * FROM normalize_address('14 Forest Road, Acton, MA'); -- A country road with a letter name and direction -- NOTE this doesn't completely normalize right since the direction W is being cut off -- SELECT '#1076f' As ticket, * FROM normalize_address('1940 County Road C W, Roseville, MN 55113'); -- Route with a name that sounds like a direction -- SELECT '#1076g' As ticket, * FROM normalize_address('3900 Route 6, Eastham, Massachusetts 02642'); -- Street that has same name as type -- SELECT '#1076h' As ticket, * FROM normalize_address('4533 PARK AVE S, MINNEAPOLIS, MN 55407'); -- same street with alternate county name SELECT '#1076i' As ticket, * FROM normalize_address('4533 County Road 33, MINNEAPOLIS, MN 55407'); -- Same case of street type that has name as a type -- -- this matches - SELECT '#1109a' As ticket, * from normalize_address('4373 LAKE DRIVE, ROBBINSDALE, MN 55422'); -- this failed -- SELECT '#1109b' As ticket, * from normalize_address('4373 LAKE DR, ROBBINSDALE, MN 55422'); -- another type (Is) that is part of street name but a compound street name SELECT '#1074a' As ticket, * FROM normalize_address('3420 RHODE ISLAND AVE S, ST. LOUIS PARK, MN 55426'); -- another type that is part of street name -- SELECT '#1074b' As ticket, * FROM normalize_address('26 Court Street, Boston,MA 02109'); -- service roads and interstates SELECT '#1112a' As ticket, * FROM normalize_address('8401 W 35W Service Dr NE, Blaine, MN 55449'); SELECT '#1112b' As ticket, * FROM normalize_address('8401 35W, Blaine, MN 55449'); SELECT '#1112c' As ticket, * FROM normalize_address('8401 35W West, Blaine, MN 55449'); SELECT '#1112d' As ticket, * FROM normalize_address('8401 West 35W, Blaine, MN 55449'); SELECT '#1112e' As ticket, * FROM normalize_address('8401 W 35W, Blaine, MN 55449'); -- Testing pretty print of highway addresses -- These tests excerpted from Brian Hamlin's CASS failures -- in #1077 SELECT '#1125a' As ticket, pprint_addy(normalize_address('19596 COUNTY ROAD 480, COLCORD, OK 74338')); SELECT '#1125b' As ticket, pprint_addy(addy), addy.* FROM normalize_address('4345 353 Rte, SALAMANCA, NY 14779') AS addy; SELECT '#1125c' As ticket, pprint_addy(addy), addy.* FROM normalize_address('19799 STATE ROUTE O, COSBY, MO 64436') AS addy; -- some more to test interstate permutations SELECT '#1125d' As ticket, pprint_addy(addy), addy.* FROM normalize_address('Interstate 90,Boston, MA') As addy; -- this one is wrong (because the lack of space trips it up) but will fix later SELECT '#1125e' As ticket, pprint_addy(addy), addy.* FROM normalize_address('I-90,Boston, MA') As addy; SELECT '#1125f' As ticket, pprint_addy(addy), addy.* FROM normalize_address('I 90,Boston, MA') As addy; -- location with prefixes getting caught in post prefix SELECT '#1310a' As ticket, pprint_addy(addy), addy.* FROM normalize_address('1110 W CAPITOL AVE, WEST SACRAMENTO, CA') As addy; -- #1614 County Rd SELECT '#1614a' As ticket, pprint_addy(addy), addy.* FROM normalize_address('8435 COUNTY RD 20 SE, ROCHESTER, MN 55904') As addy; SELECT '#1614b' As ticket, pprint_addy(addy), addy.* FROM normalize_address('3208 U.S. 52, Rochester, MN 55901') As addy; \timing ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/README�������������������������������������0000644�0000000�0000000�00000013067�12167154260�022517� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Id: README 11651 2013-07-10 03:44:48Z robe $ Installing The Tiger Geocoder This is a customized version of Steve Frost's tiger geocoder revisions (http://www.snowman.net/git/tiger_geocoder/). This version includes a loader that is portable between Linux and Windows but loads a full state of data at a time. The loader helper tables and functions are prefixed with loader and stored in the tiger schema. If you only want to load a county, revise the wget call that is generated for the state to just download the statewide and specific counties or just download them by hand. The loader will only process files that exist. If you are on windows, you will need 7zip and wget. 7zip you can get from http://www.7-zip.org/ and wget you can get from http://gnuwin32.sourceforge.net/packages/wget.htm Tiger Geocoder is now part of the PostGIS documentation for further details about function use, refer to: http://www.postgis.net/docs/manual-dev/Extras.html#Tiger_Geocoder Steps to install and load (without using extensions) 1. Create a PostGIS enabled db if you don't have one already 2. From command line, cd into the tiger_geocoder_2011 folder 3. Edit the tiger_loader.sql to the paths of your executables server etc. 4. Edit the create_geocode.bat or create_geocode.sh and run 5. Now add tiger schema to your database search path by doing something like: ALTER DATABASE geocoder SET search_path=public, tiger; Steps using extensions: 1. Create a PostGIS enabled db make sure you installed postgis with: CREATE EXTENSION postgis; 2) Next: CREATE EXTENSION postgis_tiger_geocoder; Loading up data: 1. Create a folder called gisdata on root of server or your local pc if you have a fast network connection to the server. This folder is where the tiger files will be downloaded to. 2. Create a folder called temp in the gisdata folder. This will be the folder where we extract the downloaded tiger data. 3. Run the following commands at psql or pgAdmin III query window to generate the script, replacing 'DC', 'RI' with list of states you want and save contents to a .bat or sh file in YOUR CURRENT DIRECTORY. This will generate CODE for each state and append it to the script. (IF YOU ARE AT A PSQL PROMPT, FIRST RUN "\a", "\t", AND "\o script.xxx". THIS WILL MAKE YOUR OUTPUT UNALIGNED AND REDIRECT IT TO script.xxx. WITHOUT "\a" and "\t", THE SCRIPT WILL HAVE EXTRA WHITESPACE AND POSSIBLY NON-SCRIPT CHARACTERS THAT CAUSE IT TO BREAK.) -- UNIX /LINUX USERS -- -- Note even if you want just specific states you need to -- do this step since 2011 county, state tables are available only at national level SELECT loader_generate_nation_script('sh'); -- After the nation load, generate a bash script suitable for Unix command lines -- for your desired states. SELECT loader_generate_script(ARRAY['DC','RI'], 'sh'); ONCE YOU GENERATE THIS SCRIPT, EDIT IT TO ADD "set -e -u" AT THE TOP; THIS SETTING WILL MAKE IT STOP ON ERROR OR UNITIALIZED VARIABLE AND MAKE IT EASIER TO DEBUG ANY PROBLEMS. THEN RUN THE SCRIPT AT THE COMMAND LINE, REDIRECTING STANDARD OUTPUT AND STANDARD ERROR TO USEFUL FILES. YOU MAY WANT TO RUN "tail -f " TO SEE THE STANDARD ERROR AS IT GETS WRITTEN. FOR EXAMPLE: $ sh foo.sh 1>out 2>err; tail -f err -- WINDOWS USERS -- --To generate a WINDOWS DOS script -- this will generate the script to download the national layers -- Note even if you want just specific states you need to -- do this step since 2011 county, state tables are available only at national level SELECT loader_generate_nation_script('windows'); -- this you do after the nation load and for states you want SELECT loader_generate_script(ARRAY['DC','RI'], 'windows'); If your script disappears without loading anything, most likely one of your path settings is wrong. To troubleshoot run the batch script by first opening up a commandline and executing the file. That will keep the window open for you to see the error. -- Next run the script to install any missing indexes -- SELECT install_missing_indexes(); Alternatively if you want to see what indexes will be created before you create them run the below and manually run the steps generated: SELECT missing_indexes_generate_script(); 9. Copy and paste the generated script into a .bat or .sh file and put in gisdata folder you created and then run it, OR IF YOU REDIRECTED THE OUTPUT TO A FILE WITH "\o" MOVE THAT FILE TO GISDATA. 10. Test out the geocoder run these queries -- To get the best rated answer -- -- this is generally faster SELECT g.rating, ST_X(geomout) As lon, ST_Y(geomout) As lat, (addy).* FROM geocode('1731 New Hampshire Avenue Northwest, Washington, DC 20010', 1) As g; --To get multiple answers if there is more than 1 SELECT g.rating, ST_X(geomout) As lon, ST_Y(geomout) As lat, (addy).* FROM geocode('1731 New Hampshire Avenue Northwest, Washington, DC 20010') As g; STEPS TO UPGRADE YOUR INSTALL: If you need to upgrade the geocoder/tiger loader from a pre-release 2.0.0 install -- run the upgrade_geocoder.sh or upgrade_geocoder.bat script. CAUTION: The upgrade script will drop any table columns that have a norm_addy type for a column type. This is rare if ever done so you should be fine. We plan to fix this later. It will also drop any customizations you have made to the tiger_loader configuration tables. To prevent this, you can remark out the install loader part. This we plan to remedy in the future. It will also install any missing indexes that are deemed needed by queries. It will fail on some steps such as addition of new columns to lookup tables if they already exist in your intall. These errors can be safely ignored. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/upgrade_geocoder.bat�����������������������0000755�0000000�0000000�00000001132�12217742511�025614� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������REM $Id: upgrade_geocoder.bat 11969 2013-09-23 04:36:25Z robe $ set PGPORT=5432 set PGHOST=localhost set PGUSER=postgres set PGPASSWORD=yourpasswordhere set THEDB=geocoder set PGBIN=C:\Program Files\PostgreSQL\8.4\bin set PGCONTRIB=C:\Program Files\PostgreSQL\8.4\share\contrib "%PGBIN%\psql" -d "%THEDB%" -f "upgrade_geocode.sql" REM unremark the loader line to update your loader scripts REM note this wipes out your custom settings in loader_* tables REM "%PGBIN%\psql" -d "%THEDB%" -f "tiger_loader_2013.sql" cd regress REM "%PGBIN%\psql" -d "%THEDB%" -t -f regress.sql pause ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/utility/�����������������������������������0000755�0000000�0000000�00000000000�12315456222�023331� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/utility/set_search_path.sql����������������0000644�0000000�0000000�00000001607�11747111776�027224� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--$Id: set_search_path.sql 9690 2012-04-29 01:06:06Z robe $ /*** * * Copyright (C) 2012 Regina Obe and Leo Hsu (Paragon Corporation) **/ -- Adds a schema to the front of search path so that functions, tables etc get installed by default in set schema -- but if people have postgis and other things installed in non-public, it will still keep those in path -- Example usage: SELECT tiger.SetSearchPathForInstall('tiger'); CREATE OR REPLACE FUNCTION tiger.SetSearchPathForInstall(a_schema_name varchar) RETURNS text AS $$ DECLARE var_result text; var_cur_search_path text; BEGIN SELECT reset_val INTO var_cur_search_path FROM pg_settings WHERE name = 'search_path'; EXECUTE 'SET search_path = ' || quote_ident(a_schema_name) || ', ' || var_cur_search_path; var_result := a_schema_name || ' has been made primary for install '; RETURN var_result; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; �������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/utility/cull_null.sql����������������������0000644�0000000�0000000�00000000356�11722777314�026060� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Returns the value passed, or an empty string if null. -- This is used to concatinate values that may be null. CREATE OR REPLACE FUNCTION cull_null(VARCHAR) RETURNS VARCHAR AS $_$ SELECT coalesce($1,''); $_$ LANGUAGE sql IMMUTABLE; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/utility/utmzone.sql������������������������0000644�0000000�0000000�00000000566�11722777314�025573� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE OR REPLACE FUNCTION utmzone(geometry) RETURNS integer AS $BODY$ DECLARE geomgeog geometry; zone int; pref int; BEGIN geomgeog:=ST_Transform($1,4326); IF (ST_Y(geomgeog))>0 THEN pref:=32600; ELSE pref:=32700; END IF; zone:=floor((ST_X(geomgeog)+180)/6)+1; RETURN zone+pref; END; $BODY$ LANGUAGE 'plpgsql' immutable; ������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/utility/nullable_levenshtein.sql�����������0000644�0000000�0000000�00000001775�11722777314�030277� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- This function take two arguements. The first is the "given string" and -- must not be null. The second arguement is the "compare string" and may -- or may not be null. If the second string is null, the value returned is -- 3, otherwise it is the levenshtein difference between the two. -- Change 2010-10-18 Regina Obe - name verbose to var_verbose since get compile error in PostgreSQL 9.0 CREATE OR REPLACE FUNCTION nullable_levenshtein(VARCHAR, VARCHAR) RETURNS INTEGER AS $_$ DECLARE given_string VARCHAR; result INTEGER := 3; var_verbose BOOLEAN := FALSE; /**change from verbose to param_verbose since its a keyword and get compile error in 9.0 **/ BEGIN IF $1 IS NULL THEN IF var_verbose THEN RAISE NOTICE 'nullable_levenshtein - given string is NULL!'; END IF; RETURN NULL; ELSE given_string := $1; END IF; IF $2 IS NOT NULL AND $2 != '' THEN result := levenshtein_ignore_case(given_string, $2); END IF; RETURN result; END $_$ LANGUAGE plpgsql IMMUTABLE COST 10; ���postgis-2.1.2+dfsg.orig/extras/tiger_geocoder/tiger_2011/utility/levenshtein_ignore_case.sql��������0000644�0000000�0000000�00000000356�11722777314�030751� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- This function determines the levenshtein distance irespective of case. CREATE OR REPLACE FUNCTION levenshtein_ignore_case(VARCHAR, VARCHAR) RETURNS INTEGER AS $_$ SELECT levenshtein(upper($1), upper($2)); $_$ LANGUAGE sql IMMUTABLE; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/��������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017546� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/createdb.postgis.1��������������������������������������0000644�0000000�0000000�00000004310�10437235400�023061� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH "createdb.postgis" "1" "" "Roberto Boati" "Postgis utilities" .SH "NAME" .LP createdb.postgis \- Create Postgis database in a PostgreSQL server. .SH "SYNTAX" .LP createdb.postgis [\fIoptions\fP] \fIdatabase_name\fP .SH "DESCRIPTION" .LP This program create a database for working with Postgis geometries. .br Using this program any user with createdb permissions can create a spatial enabled database. .SH "OPTIONS" .LP .TP <\fIdatabase_name\fP> Database to be created. .TP <\fIoptions\fP> All options from createdb(1), except choice of template database, can be used here. Specifying an owner here will not be able to set ownership to the tables originating from the template database used, unless the template owner, that is calling this script, is dba. Otherwise, you could only build databases owned by the template owner. .TP The most significant option would be \fI\-\-template\fP below. .TP \fB\-\-template=\fR<\fItemplatedb\fP> Set template name to be <\fItemplatedb\fP> .TP Environment variable: \fITEMPLATEDB\fR. .TP .TP \fB\-\-help\fR Output help information and exit. .SH "ENVIRONMENT" .TP .B TEMPLATEDB If .RB $ TEMPLATEDB is set, its value is used as the default template name. .SH "FILES" .LP The environment variables for template_gis creation, removal and usage may be stored in files, as follows: .TP .B /etc/default/postgis will designate default values for the whole system. .TP .B $HOME/.postgis/profile will designate the values used by the current user by default. Beware, this is the current SYSTEM user, not the dba or the database owner to become. As those values are more user specific, they supersede the ones in the system default file for the current user. .SH "NOTES" .LP The order of precedence of the variables definition: .TP .B 1. Command line options. .TP .B 2. Environment variables. .TP .B 3. The user specific profile file. .TP .B 4. The system wide default file. .TP .B The builtin (hardwired) values are not a good choice. .SH "EXAMPLES" .LP To run this program you can simply type: .LP # \fBcreatedb.postgis mypostgis\fR .SH "AUTHORS" .LP Alex Bodnaru <alexbodn@012.net.il> .br Roberto Boati <roberto.boati@gmail.com> .SH "SEE ALSO" .LP createdb.postgis(1), createdb(1), dropdb(1) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/profile�������������������������������������������������0000644�0000000�0000000�00000001756�11133700732�021134� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� #those are the default variables for postgresql-postgis. #this file will be scanned from /etc/default/postgis, #and then from $HOME/postgis/profile #values should NOT be in quotes #the name of the template database to create TEMPLATEDB=template_gis #the user/group to be granted maximum rights to the template. #public/groups are ok, but cannot be owners, so cannot grant #privileges on databases created from this template. GRUSER=postgres #name of the user the template script will be created/removed as. #should be either dba, or the database cluster owner. #defaults to the cluster owner, and if none, to postgres. DBAUSER=postgres #this is the postgis functionality loader script. #as it contains the name of the postgresql-postgis library, this #file will designate which postgis version to use. PGISSCRIPT=postgis.sql #set this to true not to load huge spatial_ref_sys table in the template. #NO_SRS=true #set this to true not to load topology functionality in the template. #NO_TOPO=true ������������������postgis-2.1.2+dfsg.orig/extras/template_gis/rmtemplate_gis.1����������������������������������������0000644�0000000�0000000�00000004223�10437235400�022640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH "rmtemplate_gis" "1" "" "Roberto Boati" "Postgis utilities" .SH "NAME" .LP rmtemplate_gis \- Delete Postgis template in a PostgreSQL server. .SH "SYNTAX" .LP rmtemplate_gis [\fIoption\fP] .SH "DESCRIPTION" .LP This program deletes a template database Postgis. .br It requires to be run by root, or by PostgreSQL superuser (postgres), or by a dba, or by the cluster owner, or by the database owner. .br PostgreSQL should be running. .SH "OPTIONS" .LP .TP For default values see below. .TP \fB\-\-template=\fR<\fItemplatedb\fP> Set template name to be <\fItemplatedb\fP> .TP Envirunment variable: \fITEMPLATEDB\fR. .TP \fB\-\-dba=\fR<\fIdba_name\fP> DBA is required to perform template database building. .TP Envirunment variable: \fIDBAUSER\fR. .TP \fB\-\-help\fR Output help information and exit. .SH "ENVIRONMENT" .TP .B TEMPLATEDB If .RB $ TEMPLATEDB is set, its value is used as the default template name. .TP .B DBAUSER If .RB $ DBAUSER is set, its value is used as the default DBA for removing the template. .SH "FILES" .LP The environment variables for template_gis creation, removal and usage may be stored in files, as follows: .TP .B /etc/default/postgis will designate default values for the whole system. .TP .B $HOME/.postgis/profile will designate the values used by the current user by default. Beware, this is the current SYSTEM user, not the dba or the database owner to become. As those values are more user specific, they supersede the ones in the system default file for the current user. .SH "NOTES" .LP The order of precedence of the variables definition: .TP .B 1. Command line options. .TP .B 2. Environment variables. .TP .B 3. The user specific profile file. .TP .B 4. The system wide default file. .TP .B The builtin (hardwired) values are not a good choice. .SH "EXAMPLES" .LP To run this program the standard way, you can simply type: .LP # \fBrmtemplate\_gis\fR .LP Alternatively you can specify also a template name to delete: .LP # \fBrmtemplate\_gis \-\-template=template\_postgis\fR .SH "AUTHORS" .LP Alex Bodnaru <alexbodn@012.net.il> .br Roberto Boati <roberto.boati@gmail.com> .SH "SEE ALSO" .LP createdb.postgis(1), mktemplate_gis(1) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/rmtemplate_gis.in���������������������������������������0000644�0000000�0000000�00000001522�11722777314�023122� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #drop template_gis #it may be used to drop any postgresql template, by supplying argument source @bindir@/postgis_env.sh for ARGVN in $1 $2 $3 $4 ; do if [ `expr substr $ARGVN 1 11` = "--template=" ]; then TDB=`echo $ARGVN | sed -e s/^--template=//` elif [ `expr substr $ARGVN 1 6` = "--dba=" ]; then DBAUSER=`echo $ARGVN | sed -e s/^--dba=//` elif [ -n $ARGVN ]; then echo "Usage of `basename $0`" echo "Supply arguments as follows" echo "--template=templatename of the template to remove" echo "--dba=dbaname of the dba to run administrational programs as" echo "You must usually be either root, or a postgresql dba in order" echo "to use `basename $0`" exit 1 fi done source @bindir@/postgres_lib.sh sudo_dba $DBAUSER export DBAUSER TDB $SUDO -c "@bindir@/rmtemplate_gis.sh" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/mktemplate_gis.sh.in������������������������������������0000644�0000000�0000000�00000000260�11722777314�023522� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #this script should be run as $DBAUSER PWD1=`pwd` cd /tmp source @bindir@/postgres_lib.sh check_dba $DBAUSER template_rm $TDB template_mk $TDB $GRUSER cd $PWD1 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/mktemplate_gis.1����������������������������������������0000644�0000000�0000000�00000007746�10437235400�022646� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH "mktemplate_gis" "1" "" "Roberto Boati" "Postgis utilities" .SH "NAME" .LP mktemplate_gis \- Create Postgis template in a PostgreSQL server. .SH "SYNTAX" .LP mktemplate_gis [\fIoptions\fP] .SH "DESCRIPTION" .LP This program create a template database for working with Postgis geometries. .br It requires to be run by root, or by PostgreSQL superuser (DBA), or by the cluster owner, but once the template created, any user with createdb permissions can create a spatial enabled database with \fBcreatedb.postgis\fR. The privileges on the initial objects in the created databases will be granted to the user defined here (see \fIGRUSER\fR below). .br PostgreSQL should be running. .SH "OPTIONS" .LP .TP For default values see below. .TP \fB\-\-user=\fR<\fIdbowner\fP> Creates a database template owned by <\fIdbowner\fP>. If normal user, \fIdbowner\fR will own the template database, else if it's a group or public, \fIdbowner\fR will have full rights to the objects in the template database. The rights granted here will also hols for new databases created from this template, even by non-dba and non-cluster owning users. .TP Environment variable: \fIGRUSER\fR. .TP \fB\-\-template=\fR<\fItemplatedb\fP> Set template name to be <\fItemplatedb\fP> .TP Environment variable: \fITEMPLATEDB\fR. .TP \fB\-\-dba=\fR<\fIdba_name\fP> DBA is required to perform template database building. .TP Environment variable: \fIDBAUSER\fR. .TP \fB\-\-script=\fR<\fIpgis_script\fP> pgis_script is the sql script containing the postgis functions for the template database. If no directory name will be given, the script will be taken from /usr/share/postgresql/\fI$CLUSTERVER\fP/contrib. .TP Environment variable: \fIPGISSCRIPT\fR. .TP \fB\-\-no\-srs\fP this argument will suppress loading of the huge spatial_ref_sys in the database template. the table will be created anyway. .TP Environment variable: \fINO_SRS=true\fR. .TP \fB\-\-no\-topo\fP this argument will suppress loading of the topology functionality in the database template. .TP Environment variable: \fINO_TOPO=true\fR. .TP \fB\-\-help\fR Output help information and exit. .SH "ENVIRONMENT" .TP .B TEMPLATEDB If .RB $ TEMPLATEDB is set, its value is used as the default template name. .TP .B GRUSER If .RB $ GRUSER is set, its value is used as the default user to own the template. This user will naturally have default rights to databases created with this template. .TP .B DBAUSER If .RB $ DBAUSER is set, its value is used as the default DBA for building the template. Else, the cluster owner and postgres are the next candidates. .TP .B PGISSCRIPT If .RB $ PGISSCRIPT is set, its value is used as the default postgis sql script for the template. If a directory will not be specified, the file will be taken from the default scripts/contrib directory for this postgresql version. .SH "FILES" .LP The environment variables for template_gis creation, removal and usage may be stored in files, as follows: .TP .B /etc/default/postgis will designate default values for the whole system. .TP .B $HOME/.postgis/profile will designate the values used by the current user by default. Beware, this is the current SYSTEM user, not the dba or the database owner to become. As those values are more user specific, they supersede the ones in the system default file for the current user. .SH "NOTES" .LP The order of precedence of the variables definition: .TP .B 1. Command line options. .TP .B 2. Environment variables. .TP .B 3. The user specific profile file. .TP .B 4. The system wide default file. .TP .B The builtin (hardwired) values are not a good choice. .SH "EXAMPLES" .LP To run this program the standard way, you can simply type: .LP # \fBmktemplate\_gis\fR .LP Alternatively you can specify also a template name to create and the database superuser: .LP # \fBmktemplate\_gis \-\-user=postgres \-\-template=template\_postgis\fR .SH "AUTHORS" .LP Alex Bodnaru <alexbodn@012.net.il> .br Roberto Boati <roberto.boati@gmail.com> .SH "SEE ALSO" .LP createdb.postgis(1), rmtemplate_gis(1) ��������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/Makefile������������������������������������������������0000644�0000000�0000000�00000003672�11722777314�021226� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������include ../../Makefile.config # # PostGIS template_gis Makefile # SCRIPTS_IN:=$(wildcard *.in) SCRIPTS:=$(SCRIPTS_IN:.in=) PUBLIC_SCRIPTS:=mktemplate_gis rmtemplate_gis createdb.postgis SONAME:=$(shell grep "^REL_MAJOR_VERSION" ../../Version.config | cut -d= -f2) SUBSTITUTE=-e s!@bindir@!$(SUBBINDIR)!g \ -e s!@datadir@!$(datadir)!g \ -e s!@prefix@!$(prefix)!g \ -e s!@SONAME@!$(SONAME)!g SCRIPT_PREPARE=cat $(SCRIPT).in | sed $(SUBSTITUTE) > $(SCRIPT) SCRIPT_TARGETDIR=$(DESTDIR)$(bindir) SCRIPT_TARGET=$(SCRIPT_TARGETDIR)/$(SCRIPT) SCRIPT_INSTALL=$(INSTALL_BIN) $(SCRIPT) $(SCRIPT_TARGET) SCRIPT_LINKDIR=$(DESTDIR)$(prefix)/bin SCRIPT_LINK=$(SCRIPT_LINKDIR)/$(SCRIPT) SCRIPT_DOLINK=rm -f $(SCRIPT_LINK); \ $(LN_S) $(SCRIPT_TARGET) $(SCRIPT_LINKDIR) SCRIPT_UNINSTALL=rm -f $(SCRIPT_TARGET) SCRIPT_UNLINK=rm -f $(SCRIPT_LINK) # would probably be nice to link these somewhere as well MANPAGES1:=$(wildcard *.1) MAN1_TARGETDIR=$(DESTDIR)$(mandir)/man1 MAN1_TARGET=$(MAN1_TARGETDIR)/$(MAN1) MAN1_INSTALL=$(INSTALL_DATA) $(MAN1) $(MAN1_TARGET) MAN1_UNINSTALL=rm -f $(MAN1_TARGET) #DEFAULTS_DIR=$(DESTDIR)/etc/default DEFAULTS_DIR=$(DESTDIR)$(datadir)/default SCRIPT_DEFAULTS=$(DEFAULTS_DIR)/postgis all: $(SCRIPTS_IN) $(foreach SCRIPT, $(SCRIPTS), $(SCRIPT_PREPARE);) install: all @mkdir -p $(SCRIPT_TARGETDIR) @mkdir -p $(SCRIPT_LINKDIR) $(foreach SCRIPT, $(SCRIPTS), $(SCRIPT_INSTALL);) $(foreach SCRIPT, $(PUBLIC_SCRIPTS), $(SCRIPT_DOLINK);) @mkdir -p $(DEFAULTS_DIR) cp profile $(SCRIPT_DEFAULTS) rm -f $(SCRIPT_TARGETDIR)/profile @mkdir -p $(MAN1_TARGETDIR) $(foreach MAN1, $(MANPAGES1), $(MAN1_INSTALL);) uninstall: $(foreach SCRIPT, $(PUBLIC_SCRIPTS), $(SCRIPT_UNLINK);) $(foreach SCRIPT, $(SCRIPTS), $(SCRIPT_UNINSTALL);) $(foreach MAN1, $(MANPAGES1), $(MAN1_UNINSTALL);) purge: uninstall rm -f $(SCRIPT_DEFAULTS) clean distclean: rm -f $(SCRIPTS) .PHONY: all install uninstall purge clean distclean ����������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/postgres_lib.sh.in��������������������������������������0000644�0000000�0000000�00000011047�11722777314�023216� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh SUDO_OTHERUSER="su $DBAUSER" SUDO_SAMEUSER="$SHELL" function sudo_dba() { if [ "$USER" != "$DBAUSER" ]; then ISDBASYSUSER=`cat /etc/passwd | awk -F : '{print $1}' | grep ^$DBAUSER$` if [ ! "$ISDBASYSUSER" = "$DBAUSER" ]; then echo "$DBAUSER is not a system user on `hostname`." echo "support for remote servers not implemented yet." exit 1 fi SUDO=$SUDO_OTHERUSER if [ ! "$USER" = "root" ]; then echo "you will be prompted for the system password for $DBAUSER," echo "even more than once." fi else SUDO=$SUDO_SAMEUSER fi } function wrong_cluster() { if [ -n "`dpkg-query -W postgresql-common`" ]; then echo "in case you meant another cluster, please specify it explicitly." echo "see pwrapper(1)." fi } #for the following functions, $USER is expected to be $DBAUSER, as set before function check_dba() { DBAUSER=$1 if [ ! "$DBAUSER" = "$USER" ]; then echo "you are not working as $DBAUSER". echo "you may be not allowed to do so (maybe wrong password)." exit 1 fi ISDBAPGUSER=`psql -At -d template1 -c "select usename from pg_user where usesuper = true and usename = '$DBAUSER';" 2>&1` if [ ! "$ISDBAPGUSER" = "$DBAUSER" ]; then MAYPOSTGRES=`psql -l` if [ -z "$MAYPOSTGRES" ]; then echo "either postgresql $PGCLUSTER is not running," echo "or $DBAUSER doesn't have privileges on cluster $PGCLUSTER." wrong_cluster exit 1 fi echo "dba or cluster $PGCLUSTER owner privileges are needed for this operation." echo "$DBAUSER doesn't have dba or cluster $PGCLUSTER owner privileges." echo "you may specify a dba that you are allowed to use his/her name (try --help)." wrong_cluster exit 1 fi } function template_rm() { TDB=$1 db_update=`psql -d template1 -c "UPDATE pg_database SET datistemplate = FALSE WHERE datname = '$TDB';" 2>&1` if [ "$db_update" = "UPDATE 1" ]; then dropdb $TDB 2>&1 | cat > /dev/null else echo "$TDB could not be accessed. it may not exist" fi } #environment variables used: #$SCRIPTS=spaces separated list of sql scripts to load into new template db #$GRTABLES=spaces separated list of tables to be granted access to $GRUSER function template_mk() { TDB=$1 GRUSER=$2 #of course it could be better to create as the $GRUSER where system user db_create=`createdb $TDB 2>&1` if [ "$db_create" = "CREATE DATABASE" ]; then GRID=`psql -d template1 -At -c "select usesysid from pg_user where usename='$GRUSER';"` if [ -n "$GRID" ]; then psql -d $TDB -c "UPDATE pg_database SET datdba = $GRID WHERE datname = '$TDB';" 2>&1 | cat > /dev/null fi if [ -x @bindir@/createlang ]; then @bindir@/createlang plpgsql $TDB 2>&1 | cat > /dev/null fi for script in $SCRIPTS ; do psql -d $TDB -f $script 2>&1 | cat > /dev/null done #pseudo tables for postgresql 7.2 and 7.4. feel free to add more, for other postgresql versions PSEUDO_TABLES="'pg_xactlock', 'sql_features', 'sql_implementation_info', 'sql_languages', 'sql_packages', 'sql_sizing', 'sql_sizing_profiles'" TABLES=`psql -d $TDB -At -c "select tablename from pg_tables where tablename not in ($PSEUDO_TABLES);"` if [ -n "$GRID" ]; then for table in $TABLES ; do psql -d $TDB -c "alter table $table owner to $GRUSER;" 2>&1 | cat > /dev/null done psql -d $TDB -c "update pg_class set relowner=$GRID where relkind = 'S';" 2>&1 | cat > /dev/null else #maybe public, or group for grtable in $GRTABLES ; do psql -d $TDB -c "grant all privileges on table $grtable to $GRUSER;" 2>&1 | cat > /dev/null done fi for grschema in $GRSCHEMAS ; do psql -d $TDB -c "alter schema $grschema owner to $GRUSER;" 2>&1 | cat > /dev/null psql -d $TDB -c "grant all privileges on schema $grschema to $GRUSER;" 2>&1 | cat > /dev/null STABLES=`psql -d $TDB -At -c "select tablename from pg_tables where schemaname = '$grschema';"` if [ -n "$GRID" ]; then for table in $STABLES ; do psql -d $TDB -c "alter table $grschema.$table owner to $GRUSER;" 2>&1 | cat > /dev/null done else #maybe public, or group for grtable in $GRTABLES ; do #contain specific schema psql -d $TDB -c "grant all privileges on table $grtable to $GRUSER;" 2>&1 | cat > /dev/null done fi done psql -d $TDB -c "VACUUM FULL;" 2>&1 | cat > /dev/null psql -d $TDB -c "VACUUM FREEZE;" 2>&1 | cat > /dev/null psql -d $TDB -c "UPDATE pg_database SET datistemplate = TRUE WHERE datname = '$TDB';" 2>&1 | cat > /dev/null psql -d $TDB -c "UPDATE pg_database SET datallowconn = FALSE WHERE datname = '$TDB';" 2>&1 | cat > /dev/null else echo "$db_create" fi } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/rmtemplate_gis.sh.in������������������������������������0000644�0000000�0000000�00000000227�11722777314�023534� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #this script should be run as $DBAUSER PWD1=`pwd` cd /tmp source @bindir@/postgres_lib.sh check_dba $DBAUSER template_rm $TDB cd $PWD1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/README��������������������������������������������������0000644�0000000�0000000�00000001112�11722777314�020431� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� This program suite create a template database for working with Postgis geometries. It requires to be run by root, or by PostgreSQL superuser (DBA), or by the cluster owner, but once created, any user with createdb permissions can create spatial enabled databases with createdb.postgis. The privileges on the initial objects in the created databases will be granted to the user defined upon the template creation. For usage, see manual pages mktemplate_gis, rmtemplate_gis, and createdb.postgis AUTHORS: Alex Bodnaru <alexbodn@012.net.il>, Roberto Boati <roberto.boati@gmail.com> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/postgis_env.sh.in���������������������������������������0000644�0000000�0000000�00000002617�11722777314�023065� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # environment variables for postgis #read optional configuration files. last prevails for file in "/etc/default/postgis" "$HOME/.postgis/profile" ; do if [ -f "$file" ]; then tmpval=`grep "^TEMPLATEDB=" $file | cut -d= -f2` if [ -n "$tmpval" ]; then TEMPLATEDB1=$tmpval fi tmpval=`grep "^GRUSER=" $file | cut -d= -f2` if [ -n "$tmpval" ]; then GRUSER1=$tmpval fi tmpval=`grep "^DBAUSER=" $file | cut -d= -f2` if [ -n "$tmpval" ]; then DBAUSER1=$tmpval fi tmpval=`grep "^PGISSCRIPT=" $file | cut -d= -f2` if [ -n "$tmpval" ]; then PGISSCRIPT1=$tmpval fi fi done #cluster information should be set separately if [ -x @prefix@/bin/pg_lsclusters ]; then # PGCLUSTER=`pg_lsclusters | awk '{if ($3 == ENVIRON["PGPORT"]) {print $1"/"$2;}}'` # export PGCLUSTER # if [ -z $DBAUSER ]; then DBAUSER=`pg_lsclusters | awk '{if ($3 == ENVIRON["PGPORT"]) {print $5;}}'` fi fi if [ -z "$TEMPLATEDB" ]; then if [ -n "$TEMPLATEDB1" ]; then TEMPLATEDB="$TEMPLATEDB1" else TEMPLATEDB="template_gis" fi fi if [ -z "$GRUSER" ]; then if [ -n "$GRUSER1" ]; then GRUSER="$GRUSER1" else GRUSER="postgres" fi fi if [ -z "$DBAUSER" ]; then if [ -n "$DBAUSER1" ]; then DBAUSER="$DBAUSER1" else DBAUSER="postgres" fi fi if [ -z "$PGISSCRIPT" ]; then if [ -n "$PGISSCRIPT1" ]; then PGISSCRIPT="$PGISSCRIPT1" else PGISSCRIPT="postgis.sql" fi fi TDB=$TEMPLATEDB �����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/createdb.postgis.in�������������������������������������0000644�0000000�0000000�00000001533�11722777314�023350� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # create a database using the given template # other parameters are passed to createdb, # but the specified owner will not have # extra privileges on objects in the template. see createdb.postgis(1) source @bindir@/postgis_env.sh for ARGVN in $1 $2 ; do if [ `expr substr $ARGVN 1 11` = "--template=" ]; then TDB=`echo $ARGVN | sed -e s/^--template=//` elif [ `expr substr $ARGVN 1 6` = "--help" ]; then echo "Usage of `basename $0`" echo "Supply arguments as follows" echo "--template=templatename of the template to use" echo "Other arguments will be passed verbatim to createdb," echo "and it may return additional messages." echo "You must usually have createdb privileges" echo "in order to use `basename $0`" exit 1 fi done PWD1=`pwd` cd /tmp exec createdb -T $TDB "$@" cd $PWD1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/template_gis/mktemplate_gis.in���������������������������������������0000644�0000000�0000000�00000004572�11722777314�023123� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #create a template database, named template_gis by default, #and grant ownership or full privileges to the postgis tables to a user, postgres by default source @bindir@/postgis_env.sh for ARGVN in $1 $2 $3 $4 $5 $6 ; do if [ `expr substr $ARGVN 1 7` = "--user=" ]; then GRUSER=`echo $ARGVN | sed -e s/^--user=//` elif [ `expr substr $ARGVN 1 11` = "--template=" ]; then TDB=`echo $ARGVN | sed -e s/^--template=//` elif [ `expr substr $ARGVN 1 6` = "--dba=" ]; then DBAUSER=`echo $ARGVN | sed -e s/^--dba=//` elif [ `expr substr $ARGVN 1 9` = "--script=" ]; then PGISSCRIPT=`echo $ARGVN | sed -e s/^--script=//` elif [ "$ARGVN" = "--no-srs" ]; then NO_SRS="true" elif [ "$ARGVN" = "--no-topo" ]; then NO_TOPO="true" elif [ -n $ARGVN ]; then echo "Usage of `basename $0`" echo "Supply arguments as follows" echo "--user=username to own or be grant privileges on databases" echo " created from template" echo "--template=templatename of the template to create" echo "--dba=dbaname of the dba to run administrational programs as" echo "--script=script to load postgis functions in the database" echo " if no directory given, default is @datadir@/" echo "--no-srs: use this option to not load the huge spatial_ref_sys.sql" echo "--no-topo: use this option to not load the topology functionality" echo "You must usually be either root, or a postgresql dba or the" echo "cluster owner in order to use `basename $0`" exit 1 fi done if [ -z "`echo $PGISSCRIPT | grep /`" ]; then PGISSCRIPT="@datadir@/${PGISSCRIPT}" fi GRTABLES="geometry_columns" GRSCHEMAS="" SCRIPTS=$PGISSCRIPT if [ ! "$NO_SRS" = "true" ]; then GRTABLES="${GRTABLES} spatial_ref_sys" SCRIPTS="${SCRIPTS} @datadir@/spatial_ref_sys.sql" fi if [ ! "$NO_TOPO" = "true" ]; then GRTABLES="${GRTABLES} topology.topology topology.layer topology.topology_id_seq" GRSCHEMAS="${GRSCHEMAS} topology" TMPTOPO=/tmp/topology_$$.sql cat @datadir@/topology.sql | awk -v GRUSER=$GRUSER \ '{ \ if (tolower($1)=="create" && tolower($2)=="schema" && match(tolower($3),"topology;?")) \ {print "create schema topology authorization "GRUSER";"}else print; \ }' > ${TMPTOPO} SCRIPTS="${SCRIPTS} ${TMPTOPO}" fi source @bindir@/postgres_lib.sh sudo_dba DBAUSER export SCRIPTS GRTABLES GRSCHEMAS GRUSER DBAUSER TDB $SUDO -c "@bindir@/mktemplate_gis.sh" ��������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/WFS_locks/�����������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016723� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/WFS_locks/test.sql���������������������������������������������������0000644�0000000�0000000�00000002476�11722777314�020444� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� CREATE TABLE test_locks (id serial, b char(16), c char(16) ); INSERT INTO test_locks(b) VALUES ('one'); INSERT INTO test_locks(b) VALUES ('two'); INSERT INTO test_locks(b) VALUES ('three'); -- Enable locks checking on the table SELECT CheckAuth('test_locks', 'id'); -- this has no lock UPDATE test_locks SET c = 'nolocks'; -- place the lock SELECT LockRow('test_locks', '1', 'auth1', now()::timestamp+'00:01'); SELECT LockRow('test_locks', '2', 'auth2', now()::timestamp+'00:01'); -- this should fail due to missing auth UPDATE test_locks SET c = 'unauthorized' where id = 1; BEGIN; -- Add authorization for row 1 SELECT AddAuth('auth1'); -- we're authorized for row 1 UPDATE test_locks SET c = 'authorized' where id = 1; END; -- Out of transaction we're no more authorized for row 1 UPDATE test_locks SET c = 'unauthorized' where id = 1; BEGIN; -- Add authorization for row 2 SELECT AddAuth('auth2'); -- we're authorized for row 2 UPDATE test_locks SET c = 'authorized' where id = 2; END; BEGIN; -- Add authorization for row 2 SELECT AddAuth('auth2'); -- we're *not* authorized for row 1 UPDATE test_locks SET c = 'unauthorized' where id = 1; END; UPDATE test_locks SET c = 'unauthorized' where id = 2; UPDATE test_locks SET c = 'unauthorized' where id = 1; SELECT * from test_locks; DROP TABLE test_locks; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/WFS_locks/WFS_locks.c������������������������������������������������0000644�0000000�0000000�00000010264�11722777314�020734� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "postgres.h" #include "executor/spi.h" /* this is what you need to work with SPI */ #include "commands/trigger.h" /* ... and triggers */ #include "utils/lsyscache.h" /* for get_namespace_name() */ /*#define PGIS_DEBUG 1*/ #define ABORT_ON_AUTH_FAILURE 1 Datum check_authorization(PG_FUNCTION_ARGS); /* * This trigger will check for authorization before * allowing UPDATE or DELETE of specific rows. * Rows are identified by the provided column. * Authorization info is extracted by the * "authorization_table" * */ PG_FUNCTION_INFO_V1(check_authorization); Datum check_authorization(PG_FUNCTION_ARGS) { TriggerData *trigdata = (TriggerData *) fcinfo->context; char *colname; HeapTuple rettuple_ok; HeapTuple rettuple_fail; TupleDesc tupdesc; int SPIcode; char query[1024]; const char *pk_id = NULL; SPITupleTable *tuptable; HeapTuple tuple; char *lockcode; char *authtable = "authorization_table"; const char *op; #define ERRMSGLEN 256 char errmsg[ERRMSGLEN]; /* Make sure trigdata is pointing at what I expect */ if ( ! CALLED_AS_TRIGGER(fcinfo) ) { elog(ERROR,"check_authorization: not fired by trigger manager"); } if ( ! TRIGGER_FIRED_BEFORE(trigdata->tg_event) ) { elog(ERROR,"check_authorization: not fired *before* event"); } if ( TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event) ) { rettuple_ok = trigdata->tg_newtuple; rettuple_fail = NULL; op = "UPDATE"; } else if ( TRIGGER_FIRED_BY_DELETE(trigdata->tg_event) ) { rettuple_ok = trigdata->tg_trigtuple; rettuple_fail = NULL; op = "DELETE"; } else { elog(ERROR,"check_authorization: not fired by update or delete"); PG_RETURN_NULL(); } tupdesc = trigdata->tg_relation->rd_att; /* Connect to SPI manager */ SPIcode = SPI_connect(); if (SPIcode != SPI_OK_CONNECT) { elog(ERROR,"check_authorization: could not connect to SPI"); PG_RETURN_NULL() ; } colname = trigdata->tg_trigger->tgargs[0]; pk_id = SPI_getvalue(trigdata->tg_trigtuple, tupdesc, SPI_fnumber(tupdesc, colname)); #if PGIS_DEBUG elog(NOTICE,"check_authorization called"); #endif sprintf(query,"SELECT authid FROM \"%s\" WHERE expires >= now() AND toid = '%d' AND rid = '%s'", authtable, trigdata->tg_relation->rd_id, pk_id); #if PGIS_DEBUG > 1 elog(NOTICE,"about to execute :%s", query); #endif SPIcode = SPI_exec(query,0); if (SPIcode !=SPI_OK_SELECT ) elog(ERROR,"couldnt execute to test for lock :%s",query); if (!SPI_processed ) { #if PGIS_DEBUG elog(NOTICE,"there is NO lock on row '%s'", pk_id); #endif SPI_finish(); return PointerGetDatum(rettuple_ok); } /* there is a lock - check to see if I have rights to it! */ tuptable = SPI_tuptable; tupdesc = tuptable->tupdesc; tuple = tuptable->vals[0]; lockcode = SPI_getvalue(tuple, tupdesc, 1); #if PGIS_DEBUG elog(NOTICE, "there is a lock on row '%s' (auth: '%s').", pk_id, lockcode); #endif /* * check to see if temp_lock_have_table table exists * (it might not exist if they own no locks) */ sprintf(query,"SELECT * FROM pg_class WHERE relname = 'temp_lock_have_table'"); SPIcode = SPI_exec(query,0); if (SPIcode != SPI_OK_SELECT ) elog(ERROR,"couldnt execute to test for lockkey temp table :%s",query); if (SPI_processed==0) { goto fail; } sprintf(query, "SELECT * FROM temp_lock_have_table WHERE xideq( transid, getTransactionID() ) AND lockcode ='%s'", lockcode); #if PGIS_DEBUG elog(NOTICE,"about to execute :%s", query); #endif SPIcode = SPI_exec(query,0); if (SPIcode != SPI_OK_SELECT ) elog(ERROR, "couldnt execute to test for lock aquire: %s", query); if (SPI_processed >0) { #if PGIS_DEBUG elog(NOTICE,"I own the lock - I can modify the row"); #endif SPI_finish(); return PointerGetDatum(rettuple_ok); } fail: snprintf(errmsg, ERRMSGLEN, "%s where \"%s\" = '%s' requires authorization '%s'", op, colname, pk_id, lockcode); errmsg[ERRMSGLEN-1] = '\0'; #ifdef ABORT_ON_AUTH_FAILURE elog(ERROR, "%s", errmsg); #else elog(NOTICE, "%s", errmsg); #endif SPI_finish(); return PointerGetDatum(rettuple_fail); } PG_FUNCTION_INFO_V1(getTransactionID); Datum getTransactionID(PG_FUNCTION_ARGS) { TransactionId xid = GetCurrentTransactionId(); PG_RETURN_DATUM( TransactionIdGetDatum(xid) ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/WFS_locks/Makefile���������������������������������������������������0000644�0000000�0000000�00000001414�11722777314�020373� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CFLAGS += -g -Wall -O2 -pedantic -Wno-long-long -I$(shell pg_config --includedir-server) CC = gcc MODULE_FILENAME = $(PWD)/libWFS_locks.so ifneq ($(findstring 7.1,$(shell pg_config --version)),) USE_VERSION=71 else ifneq ($(findstring 7.2,$(VERSION)),) USE_VERSION=72 else ifneq ($(findstring 7.3,$(VERSION)),) USE_VERSION=73 else ifneq ($(findstring 7.4,$(VERSION)),) USE_VERSION=74 else USE_VERSION=80 endif endif endif endif all: libWFS_locks.so WFS_locks.sql libWFS_locks.so: WFS_locks.c $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $< WFS_locks.sql: WFS_locks.sql.in cpp -P -traditional-cpp -DUSE_VERSION=$(USE_VERSION) $< | sed -e 's:@MODULE_FILENAME@:$(MODULE_FILENAME):g' | grep -v '^#' > $@ clean: rm -f libWFS_locks.so WFS_locks.sql ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/WFS_locks/README�����������������������������������������������������0000644�0000000�0000000�00000002651�11722777314�017617� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Thu Mar 24 17:25:48 CET 2005 ---------------------------- This module and associated pl/pgsql functions have been implemented to provide long locking support required by Web Feature Service specification (https://portal.opengeospatial.org/files/?artifact_id=7176) It is based on original work by David Blasby <dblasby@openplans.org> and has been modified and packaged by Sandro Santilli <strk@refractions.net>. Usage: -- Enable long transaction support SELECT EnableLongTransactions(); -- Disable long transaction support SELECT DisableLongTransactions(); -- Check updates and deletes of rows in -- given table for being authorized. -- Identify rows using <column> value. SELECT CheckAuth([<schema>], <table>, <column>) -- Set lock/authorization for specific row in table -- <authid> is a text value, <expires> is a timestamp -- defaulting to now()+1hour. -- Returns 1 if lock has been assigned, 0 otherwise -- (already locked by other auth) SELECT LockRow([<schema>], <table>, <rowid>, <authid>, [<expires>]) -- Remove all locks held by specified authorization id. -- Returns the number of locks released. SELECT UnlockRows(<authid>) -- Add an authorization token to be used in current -- transaction. SELECT AddAuth(<authid>) WARNING! users must use serializable transaction level (see http://www.postgresql.org/docs/7.4/static/transaction-iso.html) otherwise locking mechanism would break --strk; ���������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/WFS_locks/WFS_locks.sql.in�������������������������������������������0000644�0000000�0000000�00000020670�11722777314�021720� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: WFS_locks.sql.in 9324 2012-02-27 22:08:12Z pramsey $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- Copyright 2001-2003 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #define CREATEFUNCTION CREATE OR REPLACE FUNCTION #if USE_VERSION > 72 # define _IMMUTABLE_STRICT IMMUTABLE STRICT # define _IMMUTABLE IMMUTABLE # define _STABLE_STRICT STABLE STRICT # define _STABLE STABLE # define _VOLATILE_STRICT VOLATILE STRICT # define _VOLATILE VOLATILE # define _STRICT STRICT #else # define _IMMUTABLE_STRICT with(iscachable,isstrict) # define _IMMUTABLE with(iscachable) # define _STABLE_STRICT with(isstrict) # define _STABLE # define _VOLATILE_STRICT with(isstrict) # define _VOLATILE # define _STRICT with(isstrict) #endif #if USE_VERSION >= 73 # define HAS_SCHEMAS 1 #endif ----------------------------------------------------------------------- -- LONG TERM LOCKING ----------------------------------------------------------------------- -- UnlockRows(authid) -- removes all locks held by the given auth -- returns the number of locks released CREATEFUNCTION UnlockRows(text) RETURNS int AS ' DECLARE ret int; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION ''Long transaction support disabled, use EnableLongTransaction() to enable.''; END IF; EXECUTE ''DELETE FROM authorization_table where authid = '' || quote_literal($1); GET DIAGNOSTICS ret = ROW_COUNT; RETURN ret; END; ' LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- LockRow([schema], table, rowid, auth, [expires]) -- Returns 1 if successfully obtained the lock, 0 otherwise CREATEFUNCTION LockRow(text, text, text, text, timestamp) RETURNS int AS ' DECLARE myschema alias for $1; mytable alias for $2; myrid alias for $3; authid alias for $4; expires alias for $5; ret int; mytoid oid; myrec RECORD; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION ''Long transaction support disabled, use EnableLongTransaction() to enable.''; END IF; EXECUTE ''DELETE FROM authorization_table WHERE expires < now()''; #ifdef HAS_SCHEMAS SELECT c.oid INTO mytoid FROM pg_class c, pg_namespace n WHERE c.relname = mytable AND c.relnamespace = n.oid AND n.nspname = myschema; #else SELECT c.oid INTO mytoid FROM pg_class c WHERE c.relname = mytable; #endif -- RAISE NOTICE ''toid: %'', mytoid; FOR myrec IN SELECT * FROM authorization_table WHERE toid = mytoid AND rid = myrid LOOP IF myrec.authid != authid THEN RETURN 0; ELSE RETURN 1; END IF; END LOOP; EXECUTE ''INSERT INTO authorization_table VALUES (''|| quote_literal(mytoid)||'',''||quote_literal(myrid)|| '',''||quote_literal(expires)|| '',''||quote_literal(authid) ||'')''; GET DIAGNOSTICS ret = ROW_COUNT; RETURN ret; END;' LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- LockRow(schema, table, rid, authid); CREATEFUNCTION LockRow(text, text, text, text) RETURNS int AS 'SELECT LockRow($1, $2, $3, $4, now()::timestamp+''1:00'');' LANGUAGE 'sql' _VOLATILE_STRICT; -- LockRow(table, rid, authid); CREATEFUNCTION LockRow(text, text, text) RETURNS int AS #ifdef HAS_SCHEMAS 'SELECT LockRow(current_schema(), $1, $2, $3, now()::timestamp+''1:00'');' #else 'SELECT LockRow('''', $1, $2, $3, now()::timestamp+''1:00'');' #endif LANGUAGE 'sql' _VOLATILE_STRICT; -- LockRow(schema, table, rid, expires); CREATEFUNCTION LockRow(text, text, text, timestamp) RETURNS int AS #ifdef HAS_SCHEMAS 'SELECT LockRow(current_schema(), $1, $2, $3, $4);' #else 'SELECT LockRow('''', $1, $2, $3, $4);' #endif LANGUAGE 'sql' _VOLATILE_STRICT; CREATEFUNCTION AddAuth(text) RETURNS BOOLEAN AS ' DECLARE lockid alias for $1; okay boolean; myrec record; BEGIN -- check to see if table exists -- if not, CREATE TEMP TABLE mylock (transid xid, lockcode text) okay := ''f''; FOR myrec IN SELECT * FROM pg_class WHERE relname = ''temp_lock_have_table'' LOOP okay := ''t''; END LOOP; IF (okay <> ''t'') THEN CREATE TEMP TABLE temp_lock_have_table (transid xid, lockcode text); -- this will only work from pgsql7.4 up -- ON COMMIT DELETE ROWS; END IF; -- INSERT INTO mylock VALUES ( $1) -- EXECUTE ''INSERT INTO temp_lock_have_table VALUES ( ''|| -- quote_literal(getTransactionID()) || '','' || -- quote_literal(lockid) ||'')''; INSERT INTO temp_lock_have_table VALUES (getTransactionID(), lockid); RETURN true::boolean; END; ' LANGUAGE PLPGSQL; -- CheckAuth( <schema>, <table>, <ridcolumn> ) -- -- Returns 0 -- CREATEFUNCTION CheckAuth(text, text, text) RETURNS INT AS ' DECLARE #ifdef HAS_SCHEMAS schema text; #endif BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION ''Long transaction support disabled, use EnableLongTransaction() to enable.''; END IF; #ifdef HAS_SCHEMAS if ( $1 != '''' ) THEN schema = $1; ELSE SELECT current_schema() into schema; END IF; #endif -- TODO: check for an already existing trigger ? EXECUTE ''CREATE TRIGGER check_auth BEFORE UPDATE OR DELETE ON '' #ifdef HAS_SCHEMAS || quote_ident(schema) || ''.'' || quote_ident($2) #else || quote_ident($2) #endif ||'' FOR EACH ROW EXECUTE PROCEDURE CheckAuthTrigger('' || quote_literal($3) || '')''; RETURN 0; END; ' LANGUAGE 'plpgsql'; -- CheckAuth(<table>, <ridcolumn>) CREATEFUNCTION CheckAuth(text, text) RETURNS INT AS 'SELECT CheckAuth('''', $1, $2)' LANGUAGE 'SQL'; CREATEFUNCTION CheckAuthTrigger() RETURNS trigger AS '@MODULE_FILENAME@', 'check_authorization' LANGUAGE C; CREATEFUNCTION GetTransactionID() RETURNS xid AS '@MODULE_FILENAME@', 'getTransactionID' LANGUAGE C; -- -- Enable Long transactions support -- -- Creates the authorization_table if not already existing -- CREATEFUNCTION EnableLongTransactions() RETURNS TEXT AS ' DECLARE query text; exists bool; rec RECORD; BEGIN exists = ''f''; FOR rec IN SELECT * FROM pg_class WHERE relname = ''authorization_table'' LOOP exists = ''t''; END LOOP; IF NOT exists THEN query = ''CREATE TABLE authorization_table ( toid oid, -- table oid rid text, -- row id expires timestamp, authid text )''; EXECUTE query; END IF; exists = ''f''; FOR rec IN SELECT * FROM pg_class WHERE relname = ''authorized_tables'' LOOP exists = ''t''; END LOOP; IF NOT exists THEN query = ''CREATE VIEW authorized_tables AS '' || ''SELECT '' || #ifdef HAS_SCHEMAS ''n.nspname as schema, '' || #endif ''c.relname as table, trim('' || quote_literal(''\\\\000'') || '' from t.tgargs) as id_column '' || ''FROM pg_trigger t, pg_class c, pg_proc p '' || #ifdef HAS_SCHEMAS '', pg_namespace n '' || #endif ''WHERE p.proname = '' || quote_literal(''checkauthtrigger'') || #ifdef HAS_SCHEMAS '' AND c.relnamespace = n.oid'' || #endif '' AND t.tgfoid = p.oid and t.tgrelid = c.oid''; EXECUTE query; END IF; RETURN ''Long transactions support enabled''; END; ' LANGUAGE 'plpgsql'; -- -- Check if Long transactions support is enabled -- CREATEFUNCTION LongTransactionsEnabled() RETURNS bool AS ' DECLARE rec RECORD; BEGIN FOR rec IN SELECT oid FROM pg_class WHERE relname = ''authorized_tables'' LOOP return ''t''; END LOOP; return ''f''; END; ' LANGUAGE 'plpgsql'; -- -- Disable Long transactions support -- -- (1) Drop any long_xact trigger -- (2) Drop the authorization_table -- (3) KEEP the authorized_tables view -- CREATEFUNCTION DisableLongTransactions() RETURNS TEXT AS ' DECLARE query text; exists bool; rec RECORD; BEGIN -- -- Drop all triggers applied by CheckAuth() -- FOR rec IN SELECT c.relname, t.tgname, t.tgargs FROM pg_trigger t, pg_class c, pg_proc p WHERE p.proname = ''checkauthtrigger'' and t.tgfoid = p.oid and t.tgrelid = c.oid LOOP EXECUTE ''DROP TRIGGER '' || quote_ident(rec.tgname) || '' ON '' || quote_ident(rec.relname); END LOOP; -- -- Drop the authorization_table table -- FOR rec IN SELECT * FROM pg_class WHERE relname = ''authorization_table'' LOOP DROP TABLE authorization_table; END LOOP; -- -- Drop the authorized_tables view -- FOR rec IN SELECT * FROM pg_class WHERE relname = ''authorized_tables'' LOOP DROP VIEW authorized_tables; END LOOP; RETURN ''Long transactions support disabled''; END; ' LANGUAGE 'plpgsql'; --------------------------------------------------------------- -- END --------------------------------------------------------------- ������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/history_table/�������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017741� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/history_table/history_table.sql��������������������������������������0000644�0000000�0000000�00000017060�11722777314�023346� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- PUBLIC FUNCTIONS -- create or replace function postgis_install_history() returns void as $$ --this function creates a table that will hold some interesting values for managing history tables --later functions will be added BEGIN IF exists(select 1 FROM information_schema.tables WHERE table_name = 'historic_information') = true THEN raise notice 'The table historic_information already exists. Could not create it.'; ELSE execute 'create table historic_information(table_id serial not null,table_name varchar(100) not null,primary_field varchar(100) not null, geometry_field varchar(100) not null, constraint history_tables_pk primary key(table_id,table_name));'; END IF; END $$ language 'plpgsql'; --end build_history_table --im open to suggestions for the names of the functions. --just realized that one is build_history_table and the other create_... CREATE OR REPLACE FUNCTION postgis_enable_history(p_schema text,p_table text,p_geometry_field text) returns boolean as $$ DECLARE v_current_table text; v_history_table text; v_geometry_type text; --checks for the type of p_geometry_field v_dimensions integer; --checks for the ndims in p_geometry_field v_srid integer; --checks for the srid in p_geometry_field v_gid text; --checks the name of the pk column in p_table --SQL statement that will create the historic table v_table_sql text; --SQL statement that will perform an update on geometry_columns v_update_geometry_sql text; --SQL statement that will perform an update on historic_tables v_update_history_sql text; BEGIN --determines the name of current table v_current_table:= p_schema || '.' || p_table; --determines the name of historic table v_history_table:= p_schema || '.' || p_table || '_history'; --sql to determine the values of geometry type, srid and ndims v_geometry_type:= (SELECT "type" FROM public.geometry_columns WHERE f_table_schema = p_schema AND f_table_name = p_table AND f_geometry_column = p_geometry_field); v_dimensions:= (SELECT coord_dimension FROM public.geometry_columns WHERE f_table_schema = p_schema AND f_table_name = p_table AND f_geometry_column = p_geometry_field); v_srid:= (SELECT srid FROM public.geometry_columns WHERE f_table_schema = p_schema AND f_table_name = p_table AND f_geometry_column = p_geometry_field); v_gid:= (SELECT column_name FROM information_schema.key_column_usage WHERE table_schema = p_schema AND table_name = p_table); --end sql --generate sql for creating the historic table v_table_sql:= 'CREATE TABLE ' || v_history_table || '(' || 'history_id serial not null,' || 'date_added timestamp not null default now(),' || 'date_deleted timestamp default null,' || 'last_operation varchar(30) not null,' || 'active_user varchar(90) not null default CURRENT_USER,' || 'current_version text not null,' || 'like ' || v_current_table || ',' || 'CONSTRAINT ' || p_table || '_history_pk primary key(history_id));'; --end sql --update geometry columns v_update_geometry_sql:='INSERT INTO public.geometry_columns(f_table_catalog,f_table_schema,f_table_name,f_geometry_column,coord_dimension,srid,type) values (' || quote_literal('') || ',' || quote_literal(p_schema) || ',' || quote_literal(p_table || '_history') || ',' || quote_literal(p_geometry_field) || ',' || v_dimensions::text || ',' || v_srid::text || ',' || quote_literal(v_geometry_type) || ');'; --end update geometry_columns --insert into historic_tables v_update_history_sql:='INSERT INTO public.historic_information(table_id,table_name,primary_field,geometry_field) VALUES (' || 'DEFAULT,' || quote_literal(v_history_table) || ',' || quote_literal(v_gid) || ',' || quote_literal(p_geometry_field) || ');'; --end update historic tables execute v_table_sql; execute v_update_geometry_sql; execute v_update_history_sql; execute _postgis_add_insert_rule(p_schema,p_table,v_gid); execute _postgis_add_delete_rule(p_schema,p_table,v_gid); execute _postgis_add_update_rule(p_schema,p_table,v_gid); execute _postgis_create_history_indexes(p_schema,p_table,p_geometry_field); return true; END $$ language 'plpgsql'; --end create_history_table -- PRIVATE FUNCTIONS -- --add_insert_rule CREATE OR REPLACE FUNCTION _postgis_add_insert_rule(p_schema text,p_table text,p_gid_field text) returns void as $$ DECLARE v_sql text; BEGIN v_sql:= 'CREATE OR REPLACE RULE ' || p_table || '_history_insert as ON INSERT TO ' || p_schema || '.' || p_table || ' DO (' || 'INSERT INTO ' || p_schema || '.' || p_table || '_history VALUES(' || 'DEFAULT,' || --history_id nextval() 'DEFAULT,' || --date_added now() 'NULL,' || --date_deleted quote_literal('INSERT') || ',' || --operation 'DEFAULT,' || 'NEW.' || p_gid_field || ',' || 'NEW.*));'; execute v_sql; END $$ language 'plpgsql'; --end add_insert_rule --add_update_rule CREATE OR REPLACE FUNCTION _postgis_add_update_rule(p_schema text,p_table text,p_gid_field text) returns void as $$ DECLARE v_sql text; BEGIN v_sql:= 'CREATE OR REPLACE RULE ' || p_table || '_history_update as ON UPDATE TO ' || p_schema || '.' || p_table || ' DO (' || 'UPDATE ' || p_schema || '.' || p_table || '_history SET ' || 'date_deleted = now(),' || 'active_user = CURRENT_USER,' || 'current_version = ' || 'NEW.' || p_gid_field || ',' || 'last_operation = ' || quote_literal('UPDATE') || 'WHERE ' || p_gid_field || ' = OLD.' || p_gid_field || ';' || -- end of the update statement 'INSERT INTO ' || p_schema || '.' || p_table || '_history VALUES (' || 'DEFAULT,' || --history_id nextval() 'DEFAULT,' || --date_added now() 'NULL,' || --date_deleted quote_literal('INSERT') || ',' || --operation 'DEFAULT,' || 'NEW.' || p_gid_field || ',' || 'NEW.*););'; execute v_sql; END $$ language 'plpgsql'; --end add_update_rule --add_delete_rule CREATE OR REPLACE FUNCTION _postgis_add_delete_rule(p_schema text,p_table text,p_gid_field text) returns void as $$ DECLARE v_sql text; BEGIN v_sql:= 'CREATE OR REPLACE RULE ' || p_table || '_history_delete as ON DELETE TO ' || p_schema || '.' || p_table || ' DO (' || 'UPDATE ' || p_schema || '.' || p_table || '_history SET ' || 'date_deleted = now(),' || 'active_user = CURRENT_USER,' || 'current_version = ' || quote_literal('-9999') || ',' || 'last_operation = ' || quote_literal('DELETED') || 'WHERE ' || p_gid_field || ' = OLD.' || p_gid_field || ');'; execute v_sql; END $$ language 'plpgsql'; --end ad__delete_rule --create indexes function CREATE OR REPLACE FUNCTION _postgis_create_history_indexes(p_schema text, p_table text, p_geometry_field text) returns void as $$ DECLARE v_geomindex_sql text; v_dateindex_sql text; v_userindex_sql text; v_operindex_sql text; BEGIN v_geomindex_sql:= 'CREATE INDEX ' || 'idx_' || p_table || '_geometry_history' || ' ON ' || p_schema || '.' || p_table || '_history USING GIST(' || p_geometry_field || ');'; v_dateindex_sql:= 'CREATE INDEX ' || 'idx_' || p_table || '_date_history' || ' ON ' || p_schema || '.' || p_table || '_history (date_added,date_deleted);'; v_userindex_sql:= 'CREATE INDEX ' || 'idx_' || p_table || '_user_history' || ' ON ' || p_schema || '.' || p_table || '_history(active_user);'; v_operindex_sql:= 'CREATE INDEX ' || 'idx_' || p_table || '_oper_history' || ' ON ' || p_schema || '.' || p_table || '_history (last_operation);'; execute v_geomindex_sql; execute v_dateindex_sql; execute v_userindex_sql; execute v_operindex_sql; END $$ language 'plpgsql' --end create indexes /*TODO LIST: CREATE A FUNCTION THAT WILL DROP A CERTAIN HISTORIC TABLE AND REMOVE ITS ITENS FROM GEOMERTY_COLUMNS AND HISTORIC_INFORMATION CREATE A FUNCTION TO POPULATE ALL THE EXISTING RECORDS TO THE HISTORIC TABLE, AS A INSERT */��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/history_table/README�������������������������������������������������0000644�0000000�0000000�00000007561�11722777314�020642� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������= HISTORY TRACKING = Suppose you have a table of data that represents the "current state" of a particular geographic feature. A parcels table, or a roads table, or a fruit trees table, whatever. Generally, GIS tools understand a table as a single entity into which they can update, insert and delete rows from. How you do allow common GIS tools to work against your data, while maintaining and audit trail of what changes have been made, by whom, and what the past state of the data is? This extra module provides some utility functions for creating and maintaining history. If you have a table 'roads', this module will maintain a 'roads_history' side table, which contains all the columns of the parent table, and the following additional columns: history_id | integer | not null default date_added | timestamp without time zone | not null default now() date_deleted | timestamp without time zone | last_operation | character varying(30) | not null active_user | character varying(90) | not null default "current_user"() current_version | text | not null When you insert a new record into 'roads' a record is automatically inserted into 'roads_history', with the 'date_added' filled in the 'date_deleted' set to NULL, a unique 'history_id', a 'last_operation' of 'INSERT' and 'active_user' set. When you delete a record in 'roads', the record in the history table is *not* deleted, but the 'date_deleted' is set to the current date. When you update a record in 'roads', the current record has 'date_deleted' filled in and a new record is created with the 'date_added' set and 'date_deleted' NULL. With this information maintained, it is possible to retrieve the history of any record in the roads table: SELECT * FROM roads_history WHERE roads_pk = 111; Or, to retrieve a view of the roads table at any point in the past: SELECT * FROM roads_history WHERE date_added < 'January 1, 2001' AND ( date_deleted >= 'January 1, 2001' OR date_deleted IS NULL ); == USING THE CONVENIENCE FUNCTIONS == To history-enable a table using this module * Load the history_table.sql file. * Run the initalization routine: SELECT postgis_install_history(); * Enable history on a table: SELECT postgis_enable_history('public', 'roads', 'the_geom'); With the example above, you'll now have a 'roads_history' table, and a 'historic_information' metadata table. == USING YOUR OWN FUNCTIONS == To enable history from scratch, you need to make the history table and update rules from scratch. Here's an example using a simple table of points. CREATE TABLE my_points ( id SERIAL PRIMARY KEY, name VARCHAR(32) ); SELECT AddGeometryColumn('my_points', 'geom', 4326, 'POINT', 2); CREATE TABLE my_points_history ( history_id SERIAL PRIMARY KEY, id INTEGER, name VARCHAR(32), added TIMESTAMP NOT NULL DEFAULT now(), deleted TIMESTAMP, added_by VARCHAR(64) NOT NULL DEFAULT CURRENT_USER, deleted_by VARCHAR(64) ); SELECT AddGeometryColumn('my_points_history', 'geom', 4326, 'POINT', 2); CREATE INDEX my_points_history_deleted ON my_points_history (deleted); CREATE INDEX my_points_history_added ON my_points_history (added); CREATE INDEX my_points_history_id ON my_points_history (id); CREATE OR REPLACE RULE my_points_insert_rule AS ON INSERT TO my_points DO ( INSERT INTO my_points_history ( id, name, geom ) VALUES ( NEW.id, NEW.name, NEW.geom ); ); CREATE OR REPLACE RULE my_points_update AS ON UPDATE TO my_points DO ( UPDATE my_points_history SET deleted = now(), deleted_by = CURRENT_USER WHERE id = OLD.id AND OLD.deleted IS NULL; INSERT INTO my_points_history ( id, name, geom ) VALUES ( NEW.id, NEW.name, NEW.geom ); ); CREATE OR REPLACE RULE my_points_delete AS ON DELETE TO my_points DO ( UPDATE my_points_history SET deleted = now(), deleted_by = CURRENT_USER WHERE id = OLD.id AND deleted IS NULL; ); �����������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/wkb_reader/����������������������������������������������������������0000755�0000000�0000000�00000000000�12315456222�017175� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/wkb_reader/printwkb.c������������������������������������������������0000644�0000000�0000000�00000023650�11722777314�021220� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <math.h> #include <float.h> #include "wkbtest.h" #define WKBZOFFSET 0x80000000 #define WKBMOFFSET 0x40000000 // DO NOT USE THESE decoding function (except for debugging purposes) // The code is NOT maintained and is thrown together // unsupported debugging function. // given a wkb input thats a geometrycollection, returns its size and prints out // its contents // // Its really messy - dont even think about using this for anything // // you shouldnt call this function; just call decode_wkb() and it will // call this function //#define DEBUG 1 void decode_wkb_collection(char *wkb,int *size); void swap_char(char *a,char *b) { char c; c = *a; *a=*b; *b=c; } void flip_endian_double(char *d) { swap_char(d+7, d); swap_char(d+6, d+1); swap_char(d+5, d+2); swap_char(d+4, d+3); } void flip_endian_int32(char *i) { swap_char (i+3,i); swap_char (i+2,i+1); } void decode_wkb_collection(char *wkb,int *size) { int offset =0; bool flipbytes; int total_size=0,sub_size; int numb_sub,t; bool first_one = TRUE; if (wkb[0] ==0 ) //big endian { if (BYTE_ORDER == LITTLE_ENDIAN) flipbytes= 1; else flipbytes= 0; } else //little { if (BYTE_ORDER == LITTLE_ENDIAN) flipbytes= 0; else flipbytes= 1; } memcpy(&numb_sub, wkb+5,4); if (flipbytes) flip_endian_int32( (char *) & numb_sub) ; printf("GEOMETRYCOLLECTION(\n"); offset = 9; for (t=0; t<numb_sub; t++) { if (first_one) { first_one = FALSE; } else { printf(","); } printf(" "); decode_wkb( wkb + offset, &sub_size); total_size += sub_size; offset += sub_size; } *size = total_size +9 ; printf(")\n"); return; } //dump wkb to screen (for debugging) // assume endian is constant though out structure void decode_wkb(char *wkb, int *size) { bool flipbytes; uint32 type; uint32 n1,n2,n3,t,u,v; bool is3d; bool first_one,first_one2,first_one3; int offset,offset1; double x,y,z; int total_points; #if DEBUG printf("decoding wkb\n"); #endif if (wkb[0] ==0 ) //big endian { if (BYTE_ORDER == LITTLE_ENDIAN) flipbytes= 1; else flipbytes= 0; } else //little { if (BYTE_ORDER == LITTLE_ENDIAN) flipbytes= 0; else flipbytes= 1; } #if DEBUG printf(" + flipbytes = %i\n", flipbytes); #endif #if DEBUG printf("info about wkb:\n"); #endif memcpy(&type, wkb+1,4); if (flipbytes) flip_endian_int32( (char *) & type) ; is3d = 0; if (type&WKBZOFFSET) { is3d = 1; type = type&(~WKBZOFFSET); } #if DEBUG printf(" Type = %i (is3d = %i)\n", type, is3d); #endif if (type == 1) //POINT() { printf("POINT("); if (is3d) { memcpy(&x, &wkb[5], 8); memcpy(&y, &wkb[5+8], 8); memcpy(&z, &wkb[5+16], 8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; flip_endian_double( (char *) & z) ; } printf("%g %g %g)",x,y,z ); } else { memcpy(&x, &wkb[5], 8); memcpy(&y, &wkb[5+8], 8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; } printf("%g %g)", x,y); } printf("\n"); if (is3d) *size = 29; else *size = 21; return; } if (type == 2) { printf("LINESTRING("); memcpy(&n1, &wkb[5],4); if (flipbytes) flip_endian_int32( (char *) & n1) ; // printf(" --- has %i sub points\n",n1); first_one = TRUE; for (t=0; t<n1; t++) { if (first_one) { first_one = FALSE; } else { printf(","); } if (is3d) { memcpy(&x, &wkb[9+t*24],8); memcpy(&y, &wkb[9+t*24+8],8); memcpy(&z, &wkb[9+t*24+16],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; flip_endian_double( (char *) & z) ; } printf("%g %g %g",x,y,z); } else { memcpy(&x, &wkb[9+t*16],8); memcpy(&y, &wkb[9+t*16+8],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; } printf("%g %g",x,y); } } printf(")\n"); if (is3d) *size = 9 + n1*24; else *size = 9 + n1*16; return; } if (type == 3) { *size = 9; printf("POLYGON("); memcpy(&n1, &wkb[5],4); if (flipbytes) flip_endian_int32( (char *) & n1) ; //printf(" --- has %i rings\n",n1); *size += 4*n1; offset= 9; first_one = TRUE; for (u=0; u<n1; u++) { memcpy(&n2, &wkb[offset],4); if (flipbytes) flip_endian_int32( (char *) & n2) ; // printf(" ring %i: has %i points\n",u,n2); if (first_one) { first_one = FALSE; } else { printf(","); } printf("("); first_one2 = TRUE; for (v=0; v< n2; v++) { if (first_one2) { first_one2 = FALSE; } else { printf(","); } if (is3d) { memcpy(&x, &wkb[offset + 4+ v*24],8); memcpy(&y, &wkb[offset + 4+ v*24 + 8],8); memcpy(&z, &wkb[offset + 4+ v*24 + 16],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; flip_endian_double( (char *) & z) ; } printf("%g %g %g",x,y,z); } else { memcpy(&x, &wkb[offset +4 +v*16],8); memcpy(&y, &wkb[offset +4 +v*16 + 8],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; } printf("%g %g",x,y); } } if (is3d) { offset +=4 +24*n2; *size += n2*24; } else { offset += 4+ 16*n2; *size += n2*16; } printf(")"); } printf(")\n"); return; } if (type == 4) { printf("MULTIPOINT("); memcpy(&n1,&wkb[5],4); if (flipbytes) flip_endian_int32( (char *) & n1) ; // printf(" -- has %i points\n",n1); if (is3d) *size = 9 + n1*29; else *size = 9 + n1*21; first_one = TRUE; for (t=0; t<n1; t++) { if (first_one) { first_one= FALSE; } else { printf(","); } if (is3d) { memcpy(&x, &wkb[9+t*29+5],8); memcpy(&y, &wkb[9+t*29+8+5],8); memcpy(&z, &wkb[9+t*29+16+5],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; flip_endian_double( (char *) & z) ; } printf("%g %g %g",x,y,z); } else { memcpy(&x, &wkb[9+t*21+5],8); memcpy(&y, &wkb[9+t*21+8+5],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; } printf("%g %g",x,y); } } printf (")\n"); return; } if (type == 5) { *size = 9; printf("MULTILINESTRING("); memcpy(&n2,&wkb[5],4); if (flipbytes) flip_endian_int32( (char *) & n2) ; // printf(" -- has %i sub-lines\n",n2); *size += 9 *n2; offset =9; first_one2 = TRUE; for (u=0; u<n2; u++) { if (first_one2) { first_one2= FALSE; } else { printf(","); } printf("("); memcpy(&n1, &wkb[5 +offset],4); if (flipbytes) flip_endian_int32( (char *) & n1) ; // printf(" --- has %i sub points\n",n1); first_one = TRUE; for (t=0; t<n1; t++) { if (first_one) { first_one= FALSE; } else { printf(","); } if (is3d) { memcpy(&x, &wkb[offset+9+t*24],8); memcpy(&y, &wkb[offset+9+t*24+8],8); memcpy(&z, &wkb[offset+9+t*24+16],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; flip_endian_double( (char *) & z) ; } printf("%g %g %g",x,y,z); } else { memcpy(&x, &wkb[offset+9+t*16],8); memcpy(&y, &wkb[offset+9+t*16+8],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; } printf("%g %g",x,y); } } printf(")"); if (is3d) { *size += (24*n1); offset += 9 + (24*n1); } else { *size += (16*n1); offset += 9 + (16*n1); } } printf(")\n"); return; } if (type == 6) { *size = 9; printf("MULTIPOLYGON("); memcpy(&n3,&wkb[5],4); if (flipbytes) flip_endian_int32( (char *) & n3) ; //printf(" -- has %i sub-poly\n",n3); *size += 9*n3; offset1 =9;//where polygon starts first_one3= TRUE; for (t=0; t<n3; t++) //for each polygon { if (first_one3) { first_one3= FALSE; } else { printf(","); } printf("("); //printf("polygon #%i\n",t); total_points = 0; memcpy(&n1,&wkb[offset1+5],4); //# rings *size += 4*n1; if (flipbytes) flip_endian_int32( (char *) & n1) ; //printf("This polygon has %i rings\n",n1); offset = offset1+9; //where linear rings are first_one = TRUE; for (u=0; u<n1; u++) //for each ring { if (first_one) { first_one= FALSE; } else { printf(","); } printf("("); memcpy(&n2, &wkb[offset],4); if (flipbytes) flip_endian_int32( (char *) & n2) ; //pts in linear ring // printf(" ring %i: has %i points\n",u,n2); total_points += n2; first_one2 = TRUE; for (v=0; v< n2; v++) //for each point { if (first_one2) { first_one2= FALSE; } else { printf(","); } if (is3d) { memcpy(&x, &wkb[offset + 4+ v*24],8); memcpy(&y, &wkb[offset + 4+ v*24 + 8],8); memcpy(&z, &wkb[offset + 4+ v*24 + 16],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; flip_endian_double( (char *) & z) ; } printf("%g %g %g",x,y,z); } else { memcpy(&x, &wkb[offset +4 +v*16],8); memcpy(&y, &wkb[offset +4 +v*16 + 8],8); if (flipbytes) { flip_endian_double( (char *) & x) ; flip_endian_double( (char *) & y) ; } printf("%g %g",x,y); } } if (is3d) { *size += 24*n2; offset += 4+ 24*n2; } else { *size += 16*n2; offset += 4+ 16*n2; } printf(")"); } printf(")"); if (is3d) offset1 +=9 +24*total_points +4*n1; else offset1 += 9+ 16*total_points +4*n1; } printf(")\n"); return; } if (type == 7) { return decode_wkb_collection(wkb, size); } } ����������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/wkb_reader/readwkb.c�������������������������������������������������0000644�0000000�0000000�00000012076�11722777314�020777� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "wkbtest.h" /* example set-up create table wkbreader_test (interesting bool,comments varchar(100), the_geom geometry); insert into wkbreader_test values ( false, 'simple point', 'POINT( 10 10)' ); insert into wkbreader_test values ( false, 'simple line' , 'LINESTRING(0 0, 10 0, 10 10, 0 10, 0 0)'); insert into wkbreader_test values( true, 'polygon w/ hole','POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0), (5 5, 7 5, 7 7 , 5 7 , 5 5))'); dont forget to set the port, dbname, host, and user in the environment so the postgres connection will work Also, change the "declare cursor" command so it returns the columns you want, and converts the geometry into wkb. */ void exit_nicely(PGconn *conn) { PQfinish(conn); exit(1); } void dump_bytes( char *a, int numb) { int t; for (t=0; t<numb; t++) { printf(" + Byte #%i has value %i (%x)\n",t,a[t],a[t]); } } // need to find the OID coresponding to the GEOMETRY type // // select OID from pg_type where typname = 'wkb'; int find_WKB_typeid(PGconn *conn) { PGresult *dbresult; char *num; if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "no connection to db\n"); exit_nicely(conn); } dbresult = PQexec(conn, "select OID from pg_type where typname = 'bytea';"); if (PQresultStatus(dbresult) != PGRES_TUPLES_OK) { fprintf(stderr, "couldnt execute query to find oid of geometry type"); exit_nicely(conn); //command failed } if ( PQntuples(dbresult) != 1) { fprintf(stderr, "query to find oid of geometry didnt return 1 row!"); exit_nicely(conn); } num = PQgetvalue(dbresult, 0, 0); // first row, first field PQclear(dbresult); return ( atoi(num) ); } main() { char *pghost, *pgport, *pgoptions, *pgtty; char *dbName; int nFields; int row, field; PGconn *conn; PGresult *res; int junk; char *field_name; int field_type; int WKB_OID; char conn_string[255]; bool *bool_val; int *int_val; float *float_val; double *double_val; char *char_val; char *wkb_val; char *table_name = "wkbreader_test"; char query_str[1000]; /* make a connection to the database */ conn = PQconnectdb(""); /* * check to see that the backend connection was successfully made */ if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "%s", PQerrorMessage(conn)); exit_nicely(conn); } //what is the geometry type's OID #? WKB_OID = find_WKB_typeid(conn); /* start a transaction block */ res = PQexec(conn, "BEGIN"); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "%s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } /* * should PQclear PGresult whenever it is no longer needed to avoid * memory leaks */ PQclear(res); /* * fetch rows from the pg_database, the system catalog of * databases */ sprintf(query_str, "DECLARE mycursor BINARY CURSOR FOR select text(num), asbinary(the_geom,'ndr') as wkb from %s", table_name); printf(query_str); printf("\n"); res = PQexec(conn, query_str); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "DECLARE CURSOR command failed\n"); fprintf(stderr, "%s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } PQclear(res); res = PQexec(conn, "FETCH ALL in mycursor"); if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "FETCH ALL command didn't return tuples properly\n"); fprintf(stderr, "%s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } for (row=0; row< PQntuples(res); row++) { printf("------------------------------row %i --------------------------\n",row); //not so efficient, but... for (field =0 ; field< PQnfields(res); field++) { field_type =PQftype(res,field); field_name = PQfname(res, field); //we just handle a few of the popular type since this is just an example if (field_type ==16)// bool { bool_val = (bool *) PQgetvalue(res, row, field); if (*bool_val) printf("%s: TRUE\n",field_name); else printf("%s: FALSE\n",field_name); } else if (field_type ==23 )//int4 (int) { int_val = (int *) PQgetvalue(res, row, field); printf("%s: %i\n",field_name,*int_val); } else if (field_type ==700 )//float4 (float) { float_val = (float *) PQgetvalue(res, row, field); printf("%s: %g\n",field_name,*float_val); } else if (field_type ==701 )//float8 (double) { double_val = (double *) PQgetvalue(res, row, field); printf("%s: %g\n",field_name,*double_val); } else if ( (field_type ==1043 ) || (field_type==25) )//varchar { char_val = (char *) PQgetvalue(res, row, field); printf("%s: %s\n",field_name,char_val); } else if (field_type == WKB_OID ) //wkb { char_val = (char *) PQgetvalue(res, row, field); printf("%s: ", field_name); // skip 4 bytes varlena size decode_wkb(char_val, &junk); printf("\n"); } } } PQclear(res); /* close the cursor */ res = PQexec(conn, "CLOSE mycursor"); PQclear(res); /* commit the transaction */ res = PQexec(conn, "COMMIT"); PQclear(res); /* close the connection to the database and cleanup */ PQfinish(conn); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/wkb_reader/Makefile��������������������������������������������������0000644�0000000�0000000�00000000301�11722777314�020640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Have pg_config in your PATH # # # Below should be fine # CFLAGS=-I`pg_config --includedir` -L`pg_config --libdir` -lpq all: readwkb readwkb: readwkb.c printwkb.c clean: @rm -f readwkb �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/wkb_reader/README����������������������������������������������������0000644�0000000�0000000�00000001742�11722777314�020072� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is a very simple example of using binary cursors to move binary data from the server to the client. We convert the GEOMETRY to the OpenGIS Well Known Binary (WKB) format before sending it to the client. The WKB format contains information about the endian of the data, so it can be used for transfer between servers and clients that are not the same endian (ie. between i386 and sparc) See http://www.opengis.org/techno/specs/99-049.rtf page 3-24 for the WKB specification. Z and M coordinates presence is encoded by or'ing WKBZOFFSET (0x80000000) and WKBMOFFSET (0x40000000) to the type. Points can then be 24 bytes (XYZ,XYM) or 32 bytes (XYZM) You can force geometries to be returned as 2d using the force_2d() function. For example: select asBinary(force_2d(geom)) from mytable; If the client is running on a i386, you should use asBinary(geom, 'NDR') and on a sparc you should use asBinary(geom, 'XDR') so you do not causes an endian shift on both the server and client. ������������������������������postgis-2.1.2+dfsg.orig/extras/wkb_reader/wkbtest.h�������������������������������������������������0000644�0000000�0000000�00000002030�11722777314�021035� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <endian.h> #include <libpq-fe.h> typedef signed int int32; /* == 32 bits */ typedef unsigned int uint32; /* == 32 bits */ typedef char bool; #define TRUE 1 #define FALSE 0 // This is modified from the postgres documentation for client programs (example programs) void decode_wkb(char *wkb, int *size); /* //we need to know the endian of the client machine. This is // taken from postgres's os.h file #if defined(__i386) && !defined(__i386__) #define __i386__ #endif #if defined(__sparc) && !defined(__sparc__) #define __sparc__ #endif #ifndef BIG_ENDIAN #define BIG_ENDIAN 4321 #endif #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN 1234 #endif #ifndef BYTE_ORDER #ifdef __sparc__ #define BYTE_ORDER BIG_ENDIAN #endif #ifdef __i386__ #define BYTE_ORDER LITTLE_ENDIAN #endif #endif */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extras/ogc_test_suite/������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020111� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/Makefile��������������������������������������������������������������������0000644�0000000�0000000�00000001403�11722777314�015231� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� # this file copied and adapted from PostgreSQL source # to allow easy build on BSD systems all install uninstall clean distclean maintainer-clean test check docs docs-install docs-uninstall utils: GNUmakefile @IFS=':' ; \ for dir in $$PATH; do \ for prog in gmake gnumake make; do \ if [ -f $$dir/$$prog ] && ( $$dir/$$prog -f /dev/null --version 2>/dev/null | grep GNU >/dev/null 2>&1 ) ; then \ GMAKE=$$dir/$$prog; \ break 2; \ fi; \ done; \ done; \ \ if [ x"$${GMAKE+set}" = xset ]; then \ echo "Using GNU make found at $${GMAKE}"; \ $${GMAKE} $@ ; \ else \ echo "You must use GNU make to build PostGIS." ; \ false; \ fi configure: configure.in ./autogen.sh GNUmakefile: GNUmakefile.in ./configure �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/�������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015437� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/topology_drop_after.sql.in�����������������������������������������0000644�0000000�0000000�00000001570�12122032615�022640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id: topology_drop_after.sql.in 11180 2013-03-19 09:53:17Z strk $ -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2012 Regina Obe <lr@pcorp.us> -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- These are reserved for functions where the they are changed to use default args -- This is installed after the new functions are installed -- We don't have any of these yet for topology -- The reason we put these after install is -- you can't drop a function that is used by sql functions -- without forcing a drop on those as well which may cause issues with user functions. -- This allows us to CREATE OR REPLACE those in general topology.sql -- without dropping them. ����������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/��������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016416� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/load_features.sql���������������������������������������������0000644�0000000�0000000�00000013623�11722777314�021771� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- From examples in chapter 1.12.1 of -- "Spatial Topology and Network Data Models" (Oracle manual) -- -- Modified to use postgis-based topology model. -- Loads the whole topology represented in Figure 1-1 of the -- manual, creates TopoGeometry objects and associations. -- --ORA-------------------------------- --ORA---- Main steps for using the topology data model with a topology --ORA---- built from edge, node, and face data --ORA-------------------------------- --ORA---- ... --ORA---- 3. Create feature tables. --ORA---- 4. Associate feature tables with the topology. --ORA---- 5. Initialize topology --ORA---- 6. Load feature tables using the SDO_TOPO_GEOMETRY constructor. BEGIN; -- 3. Create feature tables CREATE SCHEMA features; CREATE TABLE features.land_parcels ( -- Land parcels (selected faces) feature_name VARCHAR PRIMARY KEY) with oids; CREATE TABLE features.city_streets ( -- City streets (selected edges) feature_name VARCHAR PRIMARY KEY) with oids; CREATE TABLE features.traffic_signs ( -- Traffic signs (selected nodes) feature_name VARCHAR PRIMARY KEY) with oids; -- 4. Associate feature tables with the topology. -- Add the three topology geometry layers to the CITY_DATA topology. -- Any order is OK. SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'land_parcels', 'feature', 'POLYGON'); SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'traffic_signs','feature', 'POINT'); SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'city_streets','feature', 'LINE'); -- As a result, Spatial generates a unique TG_LAYER_ID for each layer in -- the topology metadata (USER/ALL_SDO_TOPO_METADATA). --NOTYET---- 5. Initialize topology metadata. --NOTYET--EXECUTE topology.INITIALIZE_METADATA('CITY_DATA'); -- 6. Load feature tables using the CreateTopoGeom constructor. -- Each topology feature can consist of one or more objects (face, edge, node) -- of an appropriate type. For example, a land parcel can consist of one face, -- or two or more faces, as specified in the SDO_TOPO_OBJECT_ARRAY. -- There are typically fewer features than there are faces, nodes, and edges. -- In this example, the only features are these: -- Area features (land parcels): P1, P2, P3, P4, P5 -- Point features (traffic signs): S1, S2, S3, S4 -- Linear features (roads/streets): R1, R2, R3, R4 -- 6A. Load LAND_PARCELS table. -- P1 INSERT INTO features.land_parcels VALUES ('P1', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{3,3},{6,3}}') -- face_id:3 face_id:6 ); -- P2 INSERT INTO features.land_parcels VALUES ('P2', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA) '{{4,3},{7,3}}')); -- P3 INSERT INTO features.land_parcels VALUES ('P3', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{5,3},{8,3}}')); -- P4 INSERT INTO features.land_parcels VALUES ('P4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{2,3}}')); -- P5 (Includes F1, but not F9.) INSERT INTO features.land_parcels VALUES ('P5', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{1,3}}')); -- 6B. Load TRAFFIC_SIGNS table. -- S1 INSERT INTO features.traffic_signs VALUES ('S1', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{14,1}}')); -- S2 INSERT INTO features.traffic_signs VALUES ('S2', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{13,1}}')); -- S3 INSERT INTO features.traffic_signs VALUES ('S3', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{6,1}}')); -- S4 INSERT INTO features.traffic_signs VALUES ('S4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{4,1}}')); -- 6C. Load CITY_STREETS table. -- (Note: "R" in feature names is for "Road", because "S" is used for signs.) -- R1 INSERT INTO features.city_streets VALUES ('R1', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{9,2},{-10,2}}')); -- E9, E10 -- R2 INSERT INTO features.city_streets VALUES ('R2', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{4,2},{-5,2}}')); -- E4, E5 -- R3 INSERT INTO features.city_streets VALUES ('R3', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{25,2}}')); -- R4 INSERT INTO features.city_streets VALUES ('R4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{3,2}}')); END; �������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/validate_topology.sql�����������������������������������������0000644�0000000�0000000�00000000245�11722777314�022675� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Validate topology SELECT 'Topology validation errors follow:'; SELECT * from topology.validatetopology('city_data'); SELECT 'End of topology validation errors'; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/invalid_topology.sql������������������������������������������0000644�0000000�0000000�00000016066�11722777314�022542� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN; -- Create the topology. -- NOTE: -- Returns topology id... which depend on how many -- topologies where created in the regress database -- so we just check it's a number greater than 0 SELECT topology.CreateTopology('invalid_topology') > 0; -- Insert faces INSERT INTO invalid_topology.face(face_id) VALUES(1); -- F1 INSERT INTO invalid_topology.face(face_id) VALUES(2); -- F2 INSERT INTO invalid_topology.face(face_id) VALUES(3); -- F3 INSERT INTO invalid_topology.face(face_id) VALUES(4); -- F4 INSERT INTO invalid_topology.face(face_id) VALUES(5); -- F5 INSERT INTO invalid_topology.face(face_id) VALUES(6); -- F6 INSERT INTO invalid_topology.face(face_id) VALUES(7); -- F7 INSERT INTO invalid_topology.face(face_id) VALUES(8); -- F8 INSERT INTO invalid_topology.face(face_id) VALUES(9); -- F9 -- Next face has no edges INSERT INTO invalid_topology.face(face_id) VALUES(10); -- F10 -- Next face is within F2 INSERT INTO invalid_topology.face(face_id) VALUES(11); -- F11 -- Next face overlaps F2 INSERT INTO invalid_topology.face(face_id) VALUES(12); -- F12 -- Next face is here only to serve as a placeholder for broken edges INSERT INTO invalid_topology.face(face_id) VALUES(13); -- F13 -- Insert nodes INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(1, 'POINT(8 30)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(2, 'POINT(25 30)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(3, 'POINT(25 35)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(4, 'POINT(20 37)', 2); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(5, 'POINT(36 38)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(6, 'POINT(57 33)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(7, 'POINT(41 40)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(8, 'POINT(9 6)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(9, 'POINT(21 6)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(10, 'POINT(35 6)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(11, 'POINT(47 6)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(12, 'POINT(47 14)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(13, 'POINT(35 14)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(14, 'POINT(21 14)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(15, 'POINT(9 14)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(16, 'POINT(9 22)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(17, 'POINT(21 22)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(18, 'POINT(35 22)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(19, 'POINT(47 22)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(20, 'POINT(4 31)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(21, 'POINT(9 35)', NULL); INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(22, 'POINT(13 35)', NULL); -- Next node(node_id,geom,containing_face) is coincident with N1 INSERT INTO invalid_topology.node(node_id,geom,containing_face) VALUES(23, 'POINT(8 30)', NULL); -- Insert edges INSERT INTO invalid_topology.edge VALUES(1, 1, 1, 1, -1, 1, 0, 'LINESTRING(8 30, 16 30, 16 38, 3 38, 3 30, 8 30)'); INSERT INTO invalid_topology.edge VALUES(2, 2, 2, -3, -2, 2, 0, 'LINESTRING(25 30, 31 30, 31 40, 17 40, 17 30, 25 30)'); INSERT INTO invalid_topology.edge VALUES(3, 2, 3, -3, 2, 2, 2, 'LINESTRING(25 30, 25 35)'); INSERT INTO invalid_topology.edge VALUES(4, 5, 6, -5, 4, 0, 0, 'LINESTRING(36 38, 38 35, 41 34, 42 33, 45 32, 47 28, 50 28, 52 32, 57 33)'); INSERT INTO invalid_topology.edge VALUES(5, 7, 6, -4, 5, 0, 0, 'LINESTRING(41 40, 45 40, 47 42, 62 41, 61 38, 59 39, 57 36, 57 33)'); INSERT INTO invalid_topology.edge VALUES(6, 16, 17, 7, -21, 0, 3, 'LINESTRING(9 22, 21 22)'); INSERT INTO invalid_topology.edge VALUES(7, 17, 18, 8, -19, 0, 4, 'LINESTRING(21 22, 35 22)'); INSERT INTO invalid_topology.edge VALUES(8, 18, 19, -15, -17, 0, 5, 'LINESTRING(35 22, 47 22)'); INSERT INTO invalid_topology.edge VALUES(9, 15, 14, 19, -22, 3, 6, 'LINESTRING(9 14, 21 14)'); INSERT INTO invalid_topology.edge VALUES(10, 13, 14, -20, 17, 7, 4, 'LINESTRING(35 14, 21 14)'); INSERT INTO invalid_topology.edge VALUES(11, 13, 12, 15, -18, 5, 8, 'LINESTRING(35 14, 47 14)'); INSERT INTO invalid_topology.edge VALUES(12, 8, 9, 20, 22, 6, 0, 'LINESTRING(9 6, 21 6)'); INSERT INTO invalid_topology.edge VALUES(13, 9, 10, 18, -12, 7, 0, 'LINESTRING(21 6, 35 6)'); INSERT INTO invalid_topology.edge VALUES(14, 10, 11, 16, -13, 8, 0, 'LINESTRING(35 6, 47 6)'); INSERT INTO invalid_topology.edge VALUES(15, 12, 19, -8, -16, 5, 0, 'LINESTRING(47 14, 47 22)'); INSERT INTO invalid_topology.edge VALUES(16, 11, 12, -11, -14, 8, 0, 'LINESTRING(47 6, 47 14)'); INSERT INTO invalid_topology.edge VALUES(17, 13, 18, -7, 11, 4, 5, 'LINESTRING(35 14, 35 22)'); INSERT INTO invalid_topology.edge VALUES(18, 10, 13, 10, 14, 7, 8, 'LINESTRING(35 6, 35 14)'); INSERT INTO invalid_topology.edge VALUES(19, 14, 17, -6, -10, 3, 4, 'LINESTRING(21 14, 21 22)'); INSERT INTO invalid_topology.edge VALUES(20, 9, 14, -9, 13, 6, 7, 'LINESTRING(21 6, 21 14)'); INSERT INTO invalid_topology.edge VALUES(21, 15, 16, 6, 9, 0, 3, 'LINESTRING(9 14, 9 22)'); INSERT INTO invalid_topology.edge VALUES(22, 8, 15, 21, 12, 0, 6, 'LINESTRING(9 6, 9 14)'); INSERT INTO invalid_topology.edge VALUES(25, 21, 22, -25, 25, 1, 1, 'LINESTRING(9 35, 13 35)'); INSERT INTO invalid_topology.edge VALUES(26, 20, 20, 26, -26, 9, 1, 'LINESTRING(4 31, 7 31, 7 34, 4 34, 4 31)'); -- Next edge crosses node N14 INSERT INTO invalid_topology.edge VALUES(27, 15, 13, 27, -27, 6, 3, 'LINESTRING(9 14, 21 14, 35 14)'); -- Next edge is not simple INSERT INTO invalid_topology.edge VALUES(28, 3, 3, 28, 28, 2, 2, 'LINESTRING(25 35, 28 30, 27 27, 27 32, 25 35)'); -- Next edge crosses E2 INSERT INTO invalid_topology.edge VALUES(29, 17, 3, 3, 3, 0, 0, 'LINESTRING(21 22, 25 35)'); -- Next edge's start and end points do not match Nodes geometries INSERT INTO invalid_topology.edge VALUES(30, 4, 3, 30, 30, 4, 4, 'LINESTRING(21 37, 20 37, 20 38)'); -- Next edge bounds face F11 as within face F2 INSERT INTO invalid_topology.edge VALUES(31, 3, 3, 31, -31, 11, 11, 'LINESTRING(25 35, 25 36, 26 36, 26 35, 25 35)'); -- Next edge bounds face F12 as overlapping face F2 INSERT INTO invalid_topology.edge VALUES(32, 4, 4, 31, -31, 12, 12, 'LINESTRING(20 37, 20 42, 21 42, 21 37, 20 37)'); -- Next edge is not valid INSERT INTO invalid_topology.edge VALUES(33, 3, 3, 28, 28, 13, 13, '01020000000100000000000000000039400000000000804140'); -- Validate topology SELECT * from topology.validatetopology('invalid_topology'); END; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/more_features.sql���������������������������������������������0000644�0000000�0000000�00000006322�11722777314�022012� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--BEGIN; -- More parcels INSERT INTO features.land_parcels VALUES ('F3', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{3,3}}') -- face_id:3 ); INSERT INTO features.land_parcels VALUES ('F6', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{6,3}}') -- face_id:3 ); INSERT INTO features.land_parcels VALUES ('F3F4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{3,3},{4,3}}') -- face_id:3 face_id:4 ); INSERT INTO features.land_parcels VALUES ('F1', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{1,3}}') -- face_id:1 ); -- More TRAFFIC_SIGNS INSERT INTO features.traffic_signs VALUES ('N1N2N3', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{1,1},{2,1},{3,1}}')); INSERT INTO features.traffic_signs VALUES ('N1N6N14', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{1,1},{6,1},{14,1}}')); INSERT INTO features.traffic_signs VALUES ('N3N4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{3,1},{4,1}}')); INSERT INTO features.traffic_signs VALUES ('N4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{4,1}}')); -- More STREETS INSERT INTO features.city_streets VALUES ('E7E8', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{7,2},{8,2}}')); INSERT INTO features.city_streets VALUES ('E20E19', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{20,2},{19,2}}')); INSERT INTO features.city_streets VALUES ('E25', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{-25,2}}')); INSERT INTO features.city_streets VALUES ('R1a', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (line string) 3, -- TG_LAYER_ID for this topology (from topology.layer) '{{10,2},{-9,2}}')); --END; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/Makefile������������������������������������������������������0000644�0000000�0000000�00000005413�12315456245�020065� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DATABASE=postgis_topo_regress PSQL=psql PERL=/opt/local/bin/perl GEOS_NUMERIC_VERSION=30402 all: @echo "Use 'make check' to run all tests" # TODO: make edit_topology.sql into a proper test edit: $(PSQL) -X -f edit_topology.sql $(DATABASE) topo_predicates.sql: predicates.sql.in cpp -P -traditional-cpp predicates.sql.in | sed -e 's:@COLUMN@:feature:g;s:@SCHEMA@:topology.:g' > topo_predicates.sql load_topology.sql: load_topology.sql.in @cpp -P -traditional-cpp load_topology.sql.in | sed -e 's:@SRID@:-1:g' > load_topology.sql load_topology-4326.sql: load_topology.sql.in @cpp -P -traditional-cpp load_topology.sql.in | sed -e 's:@SRID@:4326:g' > load_topology-4326.sql clean distclean: rm -f topo_predicates.sql load_topology.sql load_topology-4326.sql regress/topogeo_addlinestring_expected TESTS = regress/legacy_validate.sql regress/legacy_predicate.sql \ regress/legacy_invalid.sql regress/sqlmm.sql \ regress/legacy_query.sql regress/addnode.sql \ regress/addedge.sql regress/addface.sql \ regress/addface2.5d.sql \ regress/addtopogeometrycolumn.sql \ regress/polygonize.sql \ regress/st_addisoedge.sql \ regress/st_addisonode.sql \ regress/st_addedgemodface.sql \ regress/st_addedgenewfaces.sql \ regress/st_changeedgegeom.sql \ regress/st_createtopogeo.sql \ regress/st_getfacegeometry.sql \ regress/st_getfaceedges.sql \ regress/st_modedgeheal.sql \ regress/st_modedgesplit.sql \ regress/st_newedgeheal.sql \ regress/st_newedgessplit.sql \ regress/st_remedgenewface.sql \ regress/st_remedgemodface.sql \ regress/st_simplify.sql \ regress/topoelement.sql \ regress/topoelementarray_agg.sql \ regress/topogeo_addlinestring.sql \ regress/topogeo_addpoint.sql \ regress/topogeo_addpolygon.sql \ regress/topogeometry_type.sql \ regress/topojson.sql \ regress/topo2.5d.sql \ regress/totopogeom.sql \ regress/droptopology.sql \ regress/copytopology.sql \ regress/createtopogeom.sql \ regress/createtopology.sql \ regress/gml.sql \ regress/getnodebypoint.sql \ regress/getedgebypoint.sql \ regress/getfacebypoint.sql \ regress/getringedges.sql \ regress/gettopogeomelements.sql \ regress/layertrigger.sql \ regress/validatetopology.sql TESTS_EXPECTED = $(TESTS:.sql=_expected) regress/topogeo_addlinestring_expected: Makefile ifeq ($(shell expr $(GEOS_NUMERIC_VERSION) ">" 30308),1) cp regress/topogeo_addlinestring_expected_newsnap regress/topogeo_addlinestring_expected else cp regress/topogeo_addlinestring_expected_oldsnap regress/topogeo_addlinestring_expected endif check: topo_predicates.sql load_topology.sql load_topology-4326.sql $(TESTS) $(TESTS_EXPECTED) $(MAKE) -C ../../regress staged-install $(PERL) ../../regress/run_test.pl --topology $(RUNTESTFLAGS) $(TESTS) $(PERL) ../../regress/run_test.pl --upgrade --topology $(RUNTESTFLAGS) $(TESTS) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/edit_topology.sql���������������������������������������������0000644�0000000�0000000�00000000304�11722777314�022025� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select topology.ST_NewEdgesSplit('city_data',25,'POINT(10 35)'); select topology.ST_ModEdgesSplit('city_data',27,'POINT(9.5 35)'); select topology.ST_ModEdgesSplit('city_data',28,'POINT(11 35)'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/cache_geometries.sql������������������������������������������0000644�0000000�0000000�00000001640�11722777314�022436� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- This script adds a the_geom column to the feature tables -- created by load_topology.sql and stores there the SFS Geometry -- derived by the TopoGeometry column -- Add geometry columns, for caching Geometries from TopoGeometries SELECT AddGeometryColumn('features','land_parcels','the_geom',-1,'MULTIPOLYGON',2); SELECT AddGeometryColumn('features','city_streets','the_geom',-1,'MULTILINESTRING',2); SELECT AddGeometryColumn('features','traffic_signs','the_geom',-1,'MULTIPOINT',2); --ALTER TABLE features.city_streets ADD the_geom geometry; UPDATE features.city_streets set the_geom = st_multi(topology.Geometry(feature)); --ALTER TABLE features.traffic_signs ADD the_geom geometry; UPDATE features.traffic_signs set the_geom = st_multi(topology.Geometry(feature)); --ALTER TABLE features.land_parcels ADD the_geom geometry; UPDATE features.land_parcels set the_geom = st_multi(topology.Geometry(feature)); ������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/load_topology.sql.in������������������������������������������0000644�0000000�0000000�00000016314�11722777314�022434� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- From examples in chapter 1.12.1 of -- "Spatial Topology and Network Data Models" (Oracle manual) -- -- Modified to use postgis-based topology model. -- Loads the whole topology represented in Figure 1-1 of the -- manual -- --ORA--------------------------------------------------------------------- --ORA---- Main steps for using the topology data model with a topology --ORA---- built from edge, node, and face data --ORA--------------------------------------------------------------------- --ORA---- 1. Create a topology. --ORA---- 2. Load (normally bulk-load) topology data --ORA---- (node, edge, and face tables). BEGIN; -- 1. Create the topology. -- -- NOTE: -- Returns topology id... which depend on how many -- topologies where created in the regress database -- so we just check it's a number greater than 0 -- SELECT topology.CreateTopology('city_data', @SRID@) > 0; -- 2. Load topology data (node, edge, and face tables). -- Use INSERT statements here instead of a bulk-load utility. -- 2A. Insert data into <topology_name>.FACE table. INSERT INTO city_data.face(face_id) VALUES(1); -- F1 INSERT INTO city_data.face(face_id) VALUES(2); -- F2 INSERT INTO city_data.face(face_id) VALUES(3); -- F3 INSERT INTO city_data.face(face_id) VALUES(4); -- F4 INSERT INTO city_data.face(face_id) VALUES(5); -- F5 INSERT INTO city_data.face(face_id) VALUES(6); -- F6 INSERT INTO city_data.face(face_id) VALUES(7); -- F7 INSERT INTO city_data.face(face_id) VALUES(8); -- F8 INSERT INTO city_data.face(face_id) VALUES(9); -- F9 -- UPDATE Face id sequence SELECT setval('city_data.face_face_id_seq', 9); -- 2B. Insert data into <topology_name>.NODE table. -- N1 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(1, 'SRID=@SRID@;POINT(8 30)', NULL); -- N2 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(2, 'SRID=@SRID@;POINT(25 30)', NULL); -- N3 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(3, 'SRID=@SRID@;POINT(25 35)', NULL); -- N4 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(4, 'SRID=@SRID@;POINT(20 37)', 2); -- N5 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(5, 'SRID=@SRID@;POINT(36 38)', NULL); -- N6 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(6, 'SRID=@SRID@;POINT(57 33)', NULL); -- N7 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(7, 'SRID=@SRID@;POINT(41 40)', NULL); -- N8 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(8, 'SRID=@SRID@;POINT(9 6)', NULL); -- N9 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(9, 'SRID=@SRID@;POINT(21 6)', NULL); -- N10 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(10, 'SRID=@SRID@;POINT(35 6)', NULL); -- N11 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(11, 'SRID=@SRID@;POINT(47 6)', NULL); -- N12 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(12, 'SRID=@SRID@;POINT(47 14)', NULL); -- N13 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(13, 'SRID=@SRID@;POINT(35 14)', NULL); -- N14 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(14, 'SRID=@SRID@;POINT(21 14)', NULL); -- N15 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(15, 'SRID=@SRID@;POINT(9 14)', NULL); -- N16 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(16, 'SRID=@SRID@;POINT(9 22)', NULL); -- N17 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(17, 'SRID=@SRID@;POINT(21 22)', NULL); -- N18 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(18, 'SRID=@SRID@;POINT(35 22)', NULL); -- N19 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(19, 'SRID=@SRID@;POINT(47 22)', NULL); -- N20 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(20, 'SRID=@SRID@;POINT(4 31)', NULL); -- N21 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(21, 'SRID=@SRID@;POINT(9 35)', NULL); -- N22 INSERT INTO city_data.node(node_id, geom, containing_face) VALUES(22, 'SRID=@SRID@;POINT(13 35)', NULL); -- UPDATE Node id sequence SELECT setval('city_data.node_node_id_seq', 22); -- 2C. Insert data into <topology_name>.EDGE table. -- E1 INSERT INTO city_data.edge VALUES(1, 1, 1, 1, -1, 1, 0, 'SRID=@SRID@;LINESTRING(8 30, 16 30, 16 38, 3 38, 3 30, 8 30)'); -- E2 INSERT INTO city_data.edge VALUES(2, 2, 2, 3, -2, 2, 0, 'SRID=@SRID@;LINESTRING(25 30, 31 30, 31 40, 17 40, 17 30, 25 30)'); -- E3 INSERT INTO city_data.edge VALUES(3, 2, 3, -3, 2, 2, 2, 'SRID=@SRID@;LINESTRING(25 30, 25 35)'); -- E4 INSERT INTO city_data.edge VALUES(4, 5, 6, -5, 4, 0, 0, 'SRID=@SRID@;LINESTRING(36 38, 38 35, 41 34, 42 33, 45 32, 47 28, 50 28, 52 32, 57 33)'); -- E5 INSERT INTO city_data.edge VALUES(5, 7, 6, -4, 5, 0, 0, 'SRID=@SRID@;LINESTRING(41 40, 45 40, 47 42, 62 41, 61 38, 59 39, 57 36, 57 33)'); -- E6 INSERT INTO city_data.edge VALUES(6, 16, 17, 7, -21, 0, 3, 'SRID=@SRID@;LINESTRING(9 22, 21 22)'); -- E7 INSERT INTO city_data.edge VALUES(7, 17, 18, 8, -19, 0, 4, 'SRID=@SRID@;LINESTRING(21 22, 35 22)'); -- E8 INSERT INTO city_data.edge VALUES(8, 18, 19, -15, -17, 0, 5, 'SRID=@SRID@;LINESTRING(35 22, 47 22)'); -- E9 INSERT INTO city_data.edge VALUES(9, 15, 14, 19, -22, 3, 6, 'SRID=@SRID@;LINESTRING(9 14, 21 14)'); -- E10 INSERT INTO city_data.edge VALUES(10, 13, 14, -20, 17, 7, 4, 'SRID=@SRID@;LINESTRING(35 14, 21 14)'); -- E11 INSERT INTO city_data.edge VALUES(11, 13, 12, 15, -18, 5, 8, 'SRID=@SRID@;LINESTRING(35 14, 47 14)'); -- E12 INSERT INTO city_data.edge VALUES(12, 8, 9, 20, 22, 6, 0, 'SRID=@SRID@;LINESTRING(9 6, 21 6)'); -- E13 INSERT INTO city_data.edge VALUES(13, 9, 10, 18, -12, 7, 0, 'SRID=@SRID@;LINESTRING(21 6, 35 6)'); -- E14 INSERT INTO city_data.edge VALUES(14, 10, 11, 16, -13, 8, 0, 'SRID=@SRID@;LINESTRING(35 6, 47 6)'); -- E15 INSERT INTO city_data.edge VALUES(15, 12, 19, -8, -16, 5, 0, 'SRID=@SRID@;LINESTRING(47 14, 47 22)'); -- E16 INSERT INTO city_data.edge VALUES(16, 11, 12, -11, -14, 8, 0, 'SRID=@SRID@;LINESTRING(47 6, 47 14)'); -- E17 INSERT INTO city_data.edge VALUES(17, 13, 18, -7, 11, 4, 5, 'SRID=@SRID@;LINESTRING(35 14, 35 22)'); -- E18 INSERT INTO city_data.edge VALUES(18, 10, 13, 10, 14, 7, 8, 'SRID=@SRID@;LINESTRING(35 6, 35 14)'); -- E19 INSERT INTO city_data.edge VALUES(19, 14, 17, -6, -10, 3, 4, 'SRID=@SRID@;LINESTRING(21 14, 21 22)'); -- E20 INSERT INTO city_data.edge VALUES(20, 9, 14, -9, 13, 6, 7, 'SRID=@SRID@;LINESTRING(21 6, 21 14)'); -- E21 INSERT INTO city_data.edge VALUES(21, 15, 16, 6, 9, 0, 3, 'SRID=@SRID@;LINESTRING(9 14, 9 22)'); -- E22 INSERT INTO city_data.edge VALUES(22, 8, 15, 21, 12, 0, 6, 'SRID=@SRID@;LINESTRING(9 6, 9 14)'); -- E25 INSERT INTO city_data.edge VALUES(25, 21, 22, -25, 25, 1, 1, 'SRID=@SRID@;LINESTRING(9 35, 13 35)'); -- E26 INSERT INTO city_data.edge VALUES(26, 20, 20, 26, -26, 9, 1, 'SRID=@SRID@;LINESTRING(4 31, 7 31, 7 34, 4 34, 4 31)'); -- UPDATE Edge id sequence SELECT setval('city_data.edge_data_edge_id_seq', 26); -- Set face minimum bounding rectangle UPDATE city_data.face set mbr = ST_SetSRID( ( select st_extent(geom) from city_data.edge where left_face = face_id or right_face = face_id ), @SRID@ ) where face_id != 0; END; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020070� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_getfacegeometry.sql��������������������������������0000644�0000000�0000000�00000002527�11722777314�024507� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT topology.CreateTopology('tt') > 0; COPY tt.face(face_id, mbr) FROM STDIN; 1 POLYGON((0 0,0 10,10 10,10 0,0 0)) 2 POLYGON((2 2,2 8,8 8,8 2,2 2)) 3 POLYGON((12 2,12 8,18 8,18 2,12 2)) \. COPY tt.node(node_id, geom) FROM STDIN; 1 POINT(2 2) 2 POINT(0 0) 3 POINT(12 2) \. COPY tt.edge_data( edge_id, start_node, end_node, abs_next_left_edge, abs_next_right_edge, next_left_edge, next_right_edge, left_face, right_face, geom) FROM STDIN; 1 1 1 1 1 1 -1 1 2 LINESTRING(2 2, 2 8, 8 8, 8 2, 2 2) 2 2 2 2 2 2 -2 0 1 LINESTRING(0 0, 0 10, 10 10, 10 0, 0 0) 3 3 3 3 3 3 -3 0 3 LINESTRING(12 2, 12 8, 18 8, 18 2, 12 2) \. -- F1 should have an hole ! -- See http://trac.osgeo.org/postgis/ticket/726 SELECT 'f1 (with hole)', ST_asText(topology.st_getfacegeometry('tt', 1)); SELECT 'f2 (fill hole)', ST_asText(topology.st_getfacegeometry('tt', 2)); -- Universal face has no geometry -- See http://trac.osgeo.org/postgis/ticket/973 SELECT topology.st_getfacegeometry('tt', 0); -- Null arguments SELECT topology.st_getfacegeometry(null, 1); SELECT topology.st_getfacegeometry('tt', null); -- Invalid topology names SELECT topology.st_getfacegeometry('NonExistent', 1); SELECT topology.st_getfacegeometry('', 1); -- Non-existent face SELECT topology.st_getfacegeometry('tt', 666); SELECT topology.DropTopology('tt'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_createtopogeo_expected�����������������������������0000644�0000000�0000000�00000006362�11722777314�025261� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: Geometry SRID (0) does not match topology SRID (4326) T1|POINT(0 0) T1|1 nodes|0 edges|0 faces T2|SRID=4326;LINESTRING(0 0,8 -40) T2|2 nodes|1 edges|0 faces T3|SRID=4326;POLYGON((0 0,8 -40,70 34,0 0)) T3|1 nodes|1 edges|1 faces T4|SRID=4326;POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,8 9,4 2,5 5)) T4|2 nodes|2 edges|2 faces T5|MULTIPOINT(0 0,5 5,0 0,10 -2,5 5,0 0) T5|3 nodes|0 edges|0 faces T6|MULTILINESTRING((0 0,10 0),(10 0,0 0)) T6|2 nodes|1 edges|0 faces T7|MULTILINESTRING((0 0,10 0),(5 -5,6 5)) T7|5 nodes|4 edges|0 faces T8|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((0 0,0 10,10 10,10 0,0 0))) T8|1 nodes|1 edges|1 faces T9|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,5 15,15 15,15 5,5 5))) T9|2 nodes|4 edges|3 faces T10|MULTIPOLYGON(((0 0,5 10,10 0,0 0)),((0 20,5 10,10 20,0 20))) T10|1 nodes|2 edges|2 faces T11|GEOMETRYCOLLECTION(LINESTRING(0 0,10 0),POINT(5 0)) T11|3 nodes|2 edges|0 faces T12|GEOMETRYCOLLECTION(LINESTRING(0 0,10 0),POINT(0 0),POINT(10 0)) T12|2 nodes|1 edges|0 faces T13|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,5 15,15 15,15 5,5 5),(10 10,12 10,10 12,10 10))),LINESTRING(0 0,20 0),MULTIPOINT(0 0,10 0,5 0),MULTILINESTRING((0 0,10 0),(10 0,15 5)),POINT(5 0),POINT(10.5 10.5),POINT(100 500)) T13|10 nodes|12 edges|5 faces T13|1 isolated nodes in face 0 T13|1 isolated nodes in face 5 T14|GEOMETRYCOLLECTION(LINESTRING(8 30,16 30,16 38,3 38,3 30,8 30),POINT(4 31),LINESTRING(4 31,7 31,7 34,4 34,4 31),POINT(8 30),POINT(9 6),LINESTRING(9 6,9 14),LINESTRING(9 6,21 6),POLYGON((9 14,21 14,21 6,9 6,9 14)),POINT(9 14),LINESTRING(9 14,9 22),LINESTRING(9 14,21 14),POLYGON((9 22,21 22,21 14,9 14,9 22)),POINT(9 22),LINESTRING(9 22,21 22),POINT(9 35),LINESTRING(9 35,13 35),POINT(13 35),POLYGON((25 30,17 30,17 40,31 40,31 30,25 30)),POINT(20 37),POINT(21 6),LINESTRING(21 6,21 14),LINESTRING(21 6,35 6),POLYGON((21 14,35 14,35 6,21 6,21 14)),POINT(21 14),LINESTRING(21 14,21 22),LINESTRING(35 14,21 14),POLYGON((21 22,35 22,35 14,21 14,21 22)),POINT(21 22),LINESTRING(21 22,35 22),POINT(25 30),LINESTRING(25 30,25 35),POINT(25 35),POINT(35 6),LINESTRING(35 6,35 14),LINESTRING(35 6,47 6),POLYGON((35 14,47 14,47 6,35 6,35 14)),POINT(35 14),LINESTRING(35 14,35 22),LINESTRING(35 14,47 14),POLYGON((35 22,47 22,47 14,35 14,35 22)),POINT(35 22),LINESTRING(35 22,47 22),LINESTRING(36 38,38 35,41 34,42 33,45 32,47 28,50 28,52 32,57 33),POINT(36 38),LINESTRING(41 40,45 40,47 42,62 41,61 38,59 39,57 36,57 33),POINT(41 40),POINT(47 6),LINESTRING(47 6,47 14),POINT(47 14),LINESTRING(47 14,47 22),POINT(47 22),POINT(57 33)) T14|22 nodes|24 edges|9 faces T14|1 isolated nodes in face 3 T15|GEOMETRYCOLLECTION(LINESTRING(-5 -2,0 0),LINESTRING(0 0,10 10),LINESTRING(0 0,5 2,10 10),LINESTRING(10 10,12 10)) T15|4 nodes|4 edges|1 faces T16|GEOMETRYCOLLECTION(LINESTRING(0 0,10 0),LINESTRING(0 3,20 4),LINESTRING(10 0,20 4)) T16|4 nodes|3 edges|0 faces T17|MULTILINESTRING((832709.937 816560.25,832705.813 816470.25,832661.937 816561.875),(832705.812 816470.25,832709.937 816560.25),(832661.938 816561.875,832705.813 816470.25)) T17|7 nodes|8 edges|2 faces ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_newedgessplit_expected�����������������������������0000644�0000000�0000000�00000002074�12103322675�025260� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT max|node|22 max|edge|26 ERROR: geometry has too many points at character 54 ERROR: SQL/MM Spatial exception - point not on edge ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name noniso|23 N|23||POINT(28 14) E|27|sn13|en23|nl28|nr17|lf7|rf4 E|28|sn23|en14|nl-20|nr-27|lf7|rf4 iso|24 N|24||POINT(11 35) E|29|sn21|en24|nl30|nr29|lf1|rf1 E|30|sn24|en22|nl-30|nr-29|lf1|rf1 dangling_end|25 N|25||POINT(25 32) E|31|sn2|en25|nl32|nr2|lf2|rf2 E|32|sn25|en3|nl-32|nr-31|lf2|rf2 dangling_start|26 N|26||POINT(45 32) E|33|sn5|en26|nl34|nr33|lf0|rf0 E|34|sn26|en6|nl-5|nr-33|lf0|rf0 closed|27 N|27||POINT(3 38) E|35|sn1|en27|nl36|nr-36|lf1|rf0 E|36|sn27|en1|nl35|nr-35|lf1|rf0 robust.1|E37|N30 N|28||POINT(20 10) N|29||POINT(10 20) N|30||POINT(9 12) E|38|sn28|en30|nl39|nr38|lf0|rf0 E|39|sn30|en29|nl-39|nr-38|lf0|rf0 robust.2|t|t Topology 'city_data' dropped ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/sqlmm.sql���������������������������������������������0000644�0000000�0000000�00000012420�11722777314�021751� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; -- -- ST_InitTopoGeo -- SELECT regexp_replace(ST_InitTopoGeo('sqlmm_topology'), 'id:[0-9]*', 'id:x'); ------------------------------------------------------------- -- ST_AddIsoNode (1) ------------------------------------------------------------- SELECT '-- ST_AddIsoNode ------------------------'; -- null input SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, NULL); SELECT topology.ST_AddIsoNode(NULL, NULL, 'POINT(0 0)'); SELECT topology.ST_AddIsoNode(NULL, 1, NULL); -- good nodes on the 'world' face SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(0 0)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 0)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(5 0)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(5 10)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 10)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(20 10)'); -- existing nodes SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(0 0)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 0)'); -- other good ones (add another 0 to be detected as coincident) SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10.000000000000001 0)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(7 10)'); -- non-existent face specification SELECT topology.ST_AddIsoNode('sqlmm_topology', 1, 'POINT(20 0)'); -- using other then point SELECT topology.ST_AddIsoNode('sqlmm_topology', 1, 'MULTIPOINT(20 0)'); -- coincident nodes SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10.000000000000001 0)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(0 0)'); SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(10 0)'); -- ST_AddIsoNode not within face (TODO when ST_GetFaceGeometry is done) ------------------------------------------ -- ST_AddIsoEdge (1) ------------------------------------------ SELECT '-- ST_AddIsoEdge ------------------------'; -- null input SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, NULL); SELECT topology.ST_AddIsoEdge(NULL, 1, 2, 'LINESTRING(0 0, 1 1)'); SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, NULL, 'LINESTRING(0 0, 1 1)'); SELECT topology.ST_AddIsoEdge('sqlmm_topology', NULL, 2, 'LINESTRING(0 0, 1 1)'); -- invalid curve SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'POINT(0 0)'); -- non-simple curve SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 10 0, 5 5, 5 -5)'); -- non-existing nodes SELECT topology.ST_AddIsoEdge('sqlmm_topology', 10000, 2, 'LINESTRING(0 0, 1 1)'); -- Curve endpoints mismatch SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 1 1)'); SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 1, 10 0)'); -- Node crossing SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 10 0)'); -- Good ones SELECT topology.ST_AddIsoEdge('sqlmm_topology', 4, 5, 'LINESTRING(5 10, 5 9, 10 10)'); SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 2 1, 10 5, 10 0)'); -- Not isolated edge (shares endpoint with previous) SELECT topology.ST_AddIsoEdge('sqlmm_topology', 4, 6, 'LINESTRING(5 10, 10 9, 20 10)'); SELECT topology.ST_AddIsoEdge('sqlmm_topology', 5, 6, 'LINESTRING(10 10, 20 10)'); -- Edge intersection (geometry intersects an edge) SELECT topology.ST_AddIsoEdge('sqlmm_topology', 1, 2, 'LINESTRING(0 0, 2 20, 10 0)'); -- on different faces (TODO req. nodes contained in face) ------------------------------------------------------------- -- ST_AddIsoNode (2) ------------------------------------------------------------- SELECT '-- ST_AddIsoNode(2) ------------------------'; -- ST_AddIsoNode edge-crossing node SELECT topology.ST_AddIsoNode('sqlmm_topology', NULL, 'POINT(5 9.5)'); ------------------------------------------------------------- -- ST_RemoveIsoNode ------------------------------------------------------------- SELECT '-- ST_RemoveIsoNode ------------------------'; -- Isolated node SELECT topology.ST_RemoveIsoNode('sqlmm_topology', 1); -- Non isolated node (is used by an edge); SELECT topology.ST_RemoveIsoNode('sqlmm_topology', 4); ------------------------------------------------------------- -- ST_MoveIsoNode ------------------------------------------------------------- SELECT '-- ST_MoveIsoNode ------------------------'; -- Isolated node to invalid location (coincident) SELECT topology.ST_MoveIsoNode('sqlmm_topology', 2, 'POINT(5 10)'); SELECT topology.ST_MoveIsoNode('sqlmm_topology', 2, 'POINT(4 4)'); -- Non isolated node (is used by an edge); SELECT topology.ST_MoveIsoNode('sqlmm_topology', 4, 'POINT(5 4)'); -- Invalid point SELECT topology.ST_MoveIsoNode('sqlmm_topology', 2, 'MULTIPOINT(5 4)'); ------------------------------------------------------------- -- ST_RemoveIsoEdge ------------------------------------------------------------- SELECT '-- ST_RemoveIsoEdge ---------------------'; SELECT topology.ST_RemoveIsoEdge('sqlmm_topology', 1); ------------------------------------------------------------- -- ST_NewEdgesSplit ------------------------------------------------------------- SELECT '-- ST_NewEdgesSplit ---------------------'; SELECT topology.ST_NewEdgesSplit('sqlmm_topology', 2, 'POINT(10 2)'); SELECT topology.DropTopology('sqlmm_topology'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_simplify.sql���������������������������������������0000644�0000000�0000000�00000004067�12243440745�023164� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT CreateTopology('tt') > 0; CREATE TABLE tt.areas(id serial, g geometry); INSERT INTO tt.areas(g) VALUES ('POLYGON((0 0,1 1,1 3,0 4,-2 3,-1 1,0 0))'), ('POLYGON((0 0,1 1,1 3,2 3,2 0,0 0))'); CREATE TEMP TABLE _test_layers AS SELECT 1 as id, AddTopoGeometryColumn('tt', 'tt', 'areas', 'tg', 'polygon') as layer_id; SELECT 'L' || layer_id FROM _test_layers WHERE id = 1; UPDATE tt.areas SET tg = toTopoGeom(g, 'tt', 1); -- ensures this point won't be removed SELECT 'N' || TopoGeo_addPoint('tt', 'POINT(1 3)'); SELECT 'S1', -- Point 1 3 is removed when simplifying the simple (unconstrained) geometry ST_Equals(ST_Simplify( g, 1), 'POLYGON((0 0,1 3,-2 3,0 0))'), ST_Equals(ST_Simplify(tg, 1), 'POLYGON((0 0,1 3,-2 3,0 0))') FROM tt.areas WHERE id = 1; SELECT 'S2', ST_Equals(ST_Simplify( g, 1), 'POLYGON((0 0,1 3,2 0,0 0))'), ST_Equals(ST_Simplify(tg, 1), 'POLYGON((0 0,1 3,2 0,0 0))') FROM tt.areas WHERE id = 2; -- Test hierarchical -- see http://trac.osgeo.org/postgis/ticket/2547 CREATE TABLE tt.bigareas(id serial, g geometry); INSERT INTO _test_layers SELECT 2, AddTopoGeometryColumn('tt', 'tt', 'bigareas', 'tg', 'polygon', layer_id) FROM _test_layers WHERE id = 1; SELECT 'L' || layer_id FROM _test_layers WHERE id = 2; INSERT INTO tt.bigareas (tg) SELECT topology.CreateTopoGeom( 'tt', 3, (select layer_id from _test_layers where id = 2), TopoElementArray_agg(ARRAY[r.topogeo_id, r.layer_id])) FROM tt.relation r, _test_layers l1 WHERE r.layer_id = l1.layer_id AND l1.id = 1 GROUP BY r.topogeo_id; UPDATE tt.bigareas SET g = tg; SELECT 'HS1', -- Point 1 3 is removed when simplifying the simple (unconstrained) geometry ST_Equals(ST_Simplify( g, 1), 'POLYGON((0 0,1 3,-2 3,0 0))'), ST_Equals(ST_Simplify(tg, 1), 'POLYGON((0 0,1 3,-2 3,0 0))') FROM tt.bigareas WHERE id = 1; SELECT 'HS2', ST_Equals(ST_Simplify( g, 1), 'POLYGON((0 0,1 3,2 0,0 0))'), ST_Equals(ST_Simplify(tg, 1), 'POLYGON((0 0,1 3,2 0,0 0))') FROM tt.bigareas WHERE id = 2; SELECT DropTopology('tt') IS NULL; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/createtopology.sql������������������������������������0000644�0000000�0000000�00000001514�11722777314�023662� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to WARNING; SELECT topology.CreateTopology('2d') > 0; SELECT topology.CreateTopology('2dAgain', -1, 0, false) > 0; SELECT topology.CreateTopology('3d', -1, 0, true) > 0; SELECT topology.CreateTopology('3d'); -- already exists SELECT name,srid,precision,hasz from topology.topology WHERE name in ('2d', '2dAgain', '3d' ) ORDER by name; -- Only 3dZ accepted in 3d topo SELECT topology.AddNode('3d', 'POINT(0 0)'); SELECT topology.AddNode('3d', 'POINTM(1 1 1)'); SELECT topology.AddNode('3d', 'POINT(2 2 2)'); -- Only 2d accepted in 2d topo SELECT topology.AddNode('2d', 'POINTM(0 0 0)'); SELECT topology.AddNode('2d', 'POINT(1 1 1)'); SELECT topology.AddNode('2d', 'POINT(2 2)'); SELECT topology.DropTopology('2d'); SELECT topology.DropTopology('2dAgain'); SELECT topology.DropTopology('3d'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topojson_expected�������������������������������������0000644�0000000�0000000�00000004014�12123047732�023544� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT 4 features.big_parcels.the_geom SRID:0 TYPE:MULTIPOLYGON DIMS:2 5 6 features.big_signs.the_geom SRID:0 TYPE:MULTIPOINT DIMS:2 E27 E28 E29 E30 L1-vanilla|R1|{ "type": "MultiLineString", "arcs": [[9,-11]]} L1-vanilla|R2|{ "type": "MultiLineString", "arcs": [[4,-6]]} L1-vanilla|R3|{ "type": "MultiLineString", "arcs": [[25]]} L1-vanilla|R4|{ "type": "MultiLineString", "arcs": [[3]]} L2-vanilla|R1R2|{ "type": "MultiLineString", "arcs": [[9,-11],[4,-6]]} L2-vanilla|R4|{ "type": "MultiLineString", "arcs": [[3]]} A1-vanilla|P1|{ "type": "MultiPolygon", "arcs": [[[20,5,-19,-20,-12,21]]]} A1-vanilla|P2|{ "type": "MultiPolygon", "arcs": [[[18,6,-17,-18,-13,19]]]} A1-vanilla|P3|{ "type": "MultiPolygon", "arcs": [[[16,7,-15,-16,-14,17]]]} A1-vanilla|P4|{ "type": "MultiPolygon", "arcs": [[[-2]]]} A1-vanilla|P5|{ "type": "MultiPolygon", "arcs": [[[-1],[25]]]} A2-vanilla|P1P2|{ "type": "MultiPolygon", "arcs": [[[20,5,6,-17,-18,-13,-12,21]]]} A2-vanilla|P3P4|{ "type": "MultiPolygon", "arcs": [[[-2]],[[16,7,-15,-16,-14,17]]]} L1-edgemap|R1|{ "type": "MultiLineString", "arcs": [[0,-2]]} L1-edgemap|R2|{ "type": "MultiLineString", "arcs": [[2,-4]]} L1-edgemap|R3|{ "type": "MultiLineString", "arcs": [[4]]} L1-edgemap|R4|{ "type": "MultiLineString", "arcs": [[5]]} L2-edgemap|R1R2|{ "type": "MultiLineString", "arcs": [[0,-2],[2,-4]]} L2-edgemap|R4|{ "type": "MultiLineString", "arcs": [[4]]} A1-edgemap|P1|{ "type": "MultiPolygon", "arcs": [[[5,4,-4,-3,-2,0]]]} A1-edgemap|P2|{ "type": "MultiPolygon", "arcs": [[[3,9,-9,-8,-7,2]]]} A1-edgemap|P3|{ "type": "MultiPolygon", "arcs": [[[8,13,-13,-12,-11,7]]]} A1-edgemap|P4|{ "type": "MultiPolygon", "arcs": [[[-15]]]} A1-edgemap|P5|{ "type": "MultiPolygon", "arcs": [[[-16],[16]]]} A2-edgemap|P1P2|{ "type": "MultiPolygon", "arcs": [[[7,6,5,-5,-4,-3,-2,0]]]} A2-edgemap|P3P4|{ "type": "MultiPolygon", "arcs": [[[-9]],[[4,12,-12,-11,-10,3]]]} E32 E33 E34 E35 A3-vanilla|P6|{ "type": "MultiPolygon", "arcs": [[[-33],[30,25],[1]],[[-34],[34]]]} Topology 'city_data' dropped ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topoelement.sql���������������������������������������0000644�0000000�0000000�00000000625�11722777314�023157� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Good SELECT '1','{101,1}'::topology.TopoElement; SELECT '2','{101,2}'::topology.TopoElement; SELECT '3','{101,3}'::topology.TopoElement; SELECT '4','{1,104}'::topology.TopoElement; -- layer id has no higher limit -- Invalid: has 3 elements SELECT '[0:2]={1,2,3}'::topology.TopoElement; -- Invalid: 0 is both an invalid primitive element id and an invalid layer id SELECT '{1,0}'::topology.TopoElement; �����������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_newedgessplit.sql����������������������������������0000644�0000000�0000000�00000007651�11733173711�024206� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� \set VERBOSITY terse set client_min_messages to ERROR; -- Import city_data \i load_topology.sql -- Save max node id select 'node'::text as what, max(node_id) INTO city_data.limits FROM city_data.node; INSERT INTO city_data.limits select 'edge'::text as what, max(edge_id) FROM city_data.edge; SELECT 'max',* from city_data.limits; -- Check changes since last saving, save more -- { CREATE OR REPLACE FUNCTION check_changes() RETURNS TABLE (o text) AS $$ DECLARE rec RECORD; sql text; BEGIN -- Check effect on nodes sql := 'SELECT n.node_id, ''N|'' || n.node_id || ''|'' || COALESCE(n.containing_face::text,'''') || ''|'' || ST_AsText(ST_SnapToGrid(n.geom, 0.2))::text as xx FROM city_data.node n WHERE n.node_id > ( SELECT max FROM city_data.limits WHERE what = ''node''::text ) ORDER BY n.node_id'; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; -- Check effect on edges (there should be one split) sql := ' WITH node_limits AS ( SELECT max FROM city_data.limits WHERE what = ''node''::text ), edge_limits AS ( SELECT max FROM city_data.limits WHERE what = ''edge''::text ) SELECT ''E|'' || e.edge_id || ''|sn'' || e.start_node || ''|en'' || e.end_node || ''|nl'' || e.next_left_edge || ''|nr'' || e.next_right_edge || ''|lf'' || e.left_face || ''|rf'' || e.right_face :: text as xx FROM city_data.edge e, node_limits nl, edge_limits el WHERE e.start_node > nl.max OR e.end_node > nl.max OR e.edge_id > el.max ORDER BY e.edge_id; '; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; UPDATE city_data.limits SET max = (SELECT max(n.node_id) FROM city_data.node n) WHERE what = 'node'; UPDATE city_data.limits SET max = (SELECT max(e.edge_id) FROM city_data.edge e) WHERE what = 'edge'; END; $$ LANGUAGE 'plpgsql'; -- } -- Invalid calls SELECT 'invalid', ST_NewEdgesSplit('city_data', 999, 'POINT(36 26, 38 30)'); SELECT 'invalid', ST_NewEdgesSplit('city_data', 10, 'POINT(28 15)'); SELECT 'invalid', ST_NewEdgesSplit('', 10, 'POINT(28 14)'); SELECT 'invalid', ST_NewEdgesSplit(NULL, 10, 'POINT(28 14)'); SELECT 'invalid', ST_NewEdgesSplit('city_data', NULL, 'POINT(28 14)'); SELECT 'invalid', ST_NewEdgesSplit('city_data', 10, NULL); SELECT 'invalid', ST_NewEdgesSplit('fake', 10, 'POINT(28 14)'); -- Non-isolated edge SELECT 'noniso', ST_NewEdgesSplit('city_data', 10, 'POINT(28 14)'); SELECT check_changes(); -- Isolated edge SELECT 'iso', ST_NewEdgesSplit('city_data', 25, 'POINT(11 35)'); SELECT check_changes(); -- Dangling on end point SELECT 'dangling_end', ST_NewEdgesSplit('city_data', 3, 'POINT(25 32)'); SELECT check_changes(); -- Dangling on start point SELECT 'dangling_start', ST_NewEdgesSplit('city_data', 4, 'POINT(45 32)'); SELECT check_changes(); -- Splitting closed edge SELECT 'closed', ST_NewEdgesSplit('city_data', 1, 'POINT(3 38)'); SELECT check_changes(); -- Robustness of edge splitting (#1711) -- clean all up first DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; CREATE TEMP TABLE t AS SELECT '01020000000400000000000000000034400000000000002440000000000000244000000000000024400000000000002240000000000000284000000000000024400000000000003440' ::geometry as line, '010100000000000000000022400000000000002840' ::geometry as point, null::int as edge_id, null::int as node_id ; UPDATE t SET edge_id = AddEdge('city_data', line); UPDATE t SET node_id = ST_NewEdgesSplit('city_data', t.edge_id, t.point); SELECT 'robust.1', 'E'||edge_id, 'N'||node_id FROM t; SELECT check_changes(); SELECT 'robust.2', ST_Equals(t.point, ST_EndPoint(e1.geom)), ST_Equals(t.point, ST_StartPoint(e2.geom)) FROM t, city_data.edge e1, city_data.edge e2, city_data.node n WHERE n.node_id = t.node_id AND e1.end_node = n.node_id AND e2.start_node = n.node_id; DROP TABLE t; DROP FUNCTION check_changes(); SELECT DropTopology('city_data'); ���������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/createtopology_expected�������������������������������0000644�0000000�0000000�00000000552�11722777314�024746� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t t t ERROR: schema "3d" already exists 2d|0|0|f 2dAgain|-1|0|f 3d|-1|0|t ERROR: Column has Z dimension but geometry does not ERROR: Column has Z dimension but geometry does not 3 ERROR: Geometry has M dimension but column does not ERROR: Geometry has Z dimension but column does not 3 Topology '2d' dropped Topology '2dAgain' dropped Topology '3d' dropped ������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeometry_type.sql���������������������������������0000644�0000000�0000000�00000002545�11722777314�024425� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \i load_topology.sql \i load_features.sql \i more_features.sql \i hierarchy.sql SELECT DISTINCT 'GeometryType(traffic_signs)', geometrytype(feature) FROM features.traffic_signs; SELECT DISTINCT 'ST_GeometryType(traffic_signs)', st_geometrytype(feature) FROM features.traffic_signs; SELECT DISTINCT 'GeometryType(city_streets)', geometrytype(feature) FROM features.city_streets; SELECT DISTINCT 'ST_GeometryType(city_streets)', st_geometrytype(feature) FROM features.city_streets; SELECT DISTINCT 'GeometryType(land_parcels)', geometrytype(feature) FROM features.land_parcels; SELECT DISTINCT 'ST_GeometryType(land_parcels)', st_geometrytype(feature) FROM features.land_parcels; SELECT DISTINCT 'GeometryType(big_signs)', geometrytype(feature) FROM features.big_signs; SELECT DISTINCT 'ST_GeometryType(big_signs)', st_geometrytype(feature) FROM features.big_signs; SELECT DISTINCT 'GeometryType(big_streets)', geometrytype(feature) FROM features.big_streets; SELECT DISTINCT 'ST_GeometryType(big_streets)', st_geometrytype(feature) FROM features.big_streets; SELECT DISTINCT 'GeometryType(big_parcels)', geometrytype(feature) FROM features.big_parcels; SELECT DISTINCT 'ST_GeometryType(big_parcels)', st_geometrytype(feature) FROM features.big_parcels; SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; �����������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_remedgemodface_expected����������������������������0000644�0000000�0000000�00000014644�11741354335�025345� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - non-existent edge 0 ERROR: SQL/MM Spatial exception - non-existent edge 143 RM(25)|1 RM(25)/nodes|+|21|1 RM(25)/nodes|-|21| RM(25)/nodes|+|22|1 RM(25)/nodes|-|22| RM(25)/edges|-|25|-25|25|1|1 RM(4)|0 RM(4)/nodes|+|5|0 RM(4)/nodes|-|5| RM(4)/edges|-|4|-5|4|0|0 RM(4)/edges|+|5|-5|5|0|0 RM(4)/edges|-|5|-4|5|0|0 RM(26)|1 RM(26)/nodes|+|20|1 RM(26)/nodes|-|20| RM(26)/edges|-|26|26|-26|9|1 RM(26)/faces|-|9|SRID=4326;POLYGON((4 31,4 34,7 34,7 31,4 31)) RM(9)|6 RM(9)/edges|+|6|7|-21|0|6 RM(9)/edges|-|6|7|-21|0|3 RM(9)/edges|-|9|19|-22|3|6 RM(9)/edges|+|19|-6|-10|6|4 RM(9)/edges|-|19|-6|-10|3|4 RM(9)/edges|+|20|19|13|6|7 RM(9)/edges|-|20|-9|13|6|7 RM(9)/edges|+|21|6|-22|0|6 RM(9)/edges|-|21|6|9|0|3 RM(9)/faces|-|3|SRID=4326;POLYGON((9 14,9 22,21 22,21 14,9 14)) RM(9)/faces|+|6|SRID=4326;POLYGON((9 6,9 22,21 22,21 6,9 6)) RM(9)/faces|-|6|SRID=4326;POLYGON((9 6,9 14,21 14,21 6,9 6)) RM(19)|4 RM(19)/edges|+|6|7|-21|0|4 RM(19)/edges|-|6|7|-21|0|6 RM(19)/edges|+|7|8|-6|0|4 RM(19)/edges|-|7|8|-19|0|4 RM(19)/edges|+|12|20|22|4|0 RM(19)/edges|-|12|20|22|6|0 RM(19)/edges|-|19|-6|-10|6|4 RM(19)/edges|+|20|-10|13|4|7 RM(19)/edges|-|20|19|13|6|7 RM(19)/edges|+|21|6|-22|0|4 RM(19)/edges|-|21|6|-22|0|6 RM(19)/edges|+|22|21|12|0|4 RM(19)/edges|-|22|21|12|0|6 RM(19)/faces|+|4|SRID=4326;POLYGON((9 6,9 22,35 22,35 6,9 6)) RM(19)/faces|-|4|SRID=4326;POLYGON((21 14,21 22,35 22,35 14,21 14)) RM(19)/faces|-|6|SRID=4326;POLYGON((9 6,9 22,21 22,21 6,9 6)) RM(10)|4 RM(10)/edges|-|10|-20|17|7|4 RM(10)/edges|+|13|18|-12|4|0 RM(10)/edges|-|13|18|-12|7|0 RM(10)/edges|+|18|17|14|4|8 RM(10)/edges|-|18|10|14|7|8 RM(10)/edges|+|20|-20|13|4|4 RM(10)/edges|-|20|-10|13|4|7 RM(10)/faces|-|7|SRID=4326;POLYGON((21 6,21 14,35 14,35 6,21 6)) RM(20)|4 RM(20)/nodes|+|14|4 RM(20)/nodes|-|14| RM(20)/edges|+|12|13|22|4|0 RM(20)/edges|-|12|20|22|4|0 RM(20)/edges|-|20|-20|13|4|4 RM(15)|0 RM(15)/edges|+|8|-8|-17|0|0 RM(15)/edges|-|8|-15|-17|0|5 RM(15)/edges|+|11|-16|-18|0|8 RM(15)/edges|-|11|15|-18|5|8 RM(15)/edges|-|15|-8|-16|5|0 RM(15)/edges|+|17|-7|11|4|0 RM(15)/edges|-|17|-7|11|4|5 RM(15)/faces|-|5|SRID=4326;POLYGON((35 14,35 22,47 22,47 14,35 14)) RM(2)|0 RM(2)/nodes|+|4|0 RM(2)/nodes|-|4|2 RM(2)/edges|-|2|3|-2|2|0 RM(2)/edges|+|3|-3|3|0|0 RM(2)/edges|-|3|-3|2|2|2 RM(2)/faces|-|2|SRID=4326;POLYGON((17 30,17 40,31 40,31 30,17 30)) NE(27)|27 NE(27)/edges|+|3|-27|3|10|10 NE(27)/edges|-|3|-3|3|0|0 NE(27)/edges|+|27|27|-3|0|10 NE(27)/faces|+|10|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) RM(27)|0 RM(27)/edges|+|3|-3|3|0|0 RM(27)/edges|-|3|-27|3|10|10 RM(27)/edges|-|27|27|-3|0|10 RM(27)/faces|-|10|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) NE(28)|28 NE(28)/edges|+|3|28|3|11|11 NE(28)/edges|-|3|-3|3|0|0 NE(28)/edges|+|28|-3|-28|11|0 NE(28)/faces|+|11|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) RM(28)|0 RM(28)/edges|+|3|-3|3|0|0 RM(28)/edges|-|3|28|3|11|11 RM(28)/edges|-|28|-3|-28|11|0 RM(28)/faces|-|11|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) NE(29)|29 NE(29)/edges|+|3|-3|29|12|12 NE(29)/edges|-|3|-3|3|0|0 NE(29)/edges|+|29|3|-29|12|0 NE(29)/faces|+|12|SRID=4326;POLYGON((22 30,22 37,28 37,28 30,22 30)) RM(29)|0 RM(29)/edges|+|3|-3|3|0|0 RM(29)/edges|-|3|-3|29|12|12 RM(29)/edges|-|29|3|-29|12|0 RM(29)/faces|-|12|SRID=4326;POLYGON((22 30,22 37,28 37,28 30,22 30)) NE(30)|30 NE(31)|31 NE(30,31)/nodes|+|4| NE(30,31)/nodes|-|4|0 NE(30,31)/edges|+|3|31|3|0|0 NE(30,31)/edges|-|3|-3|3|0|0 NE(30,31)/edges|+|30|-31|30|13|13 NE(30,31)/edges|+|31|-3|-30|0|13 NE(30,31)/faces|+|13|SRID=4326;POLYGON((18 35,18 40,25 40,25 35,18 35)) RM(31)|0 RM(31)/edges|+|3|-30|3|0|0 RM(31)/edges|-|3|31|3|0|0 RM(31)/edges|+|30|-3|30|0|0 RM(31)/edges|-|30|-31|30|13|13 RM(31)/edges|-|31|-3|-30|0|13 RM(31)/faces|-|13|SRID=4326;POLYGON((18 35,18 40,25 40,25 35,18 35)) NE(32)|32 NE(32)/edges|+|3|-32|3|14|14 NE(32)/edges|-|3|-30|3|0|0 NE(32)/edges|+|30|-3|30|14|14 NE(32)/edges|-|30|-3|30|0|0 NE(32)/edges|+|32|32|-30|0|14 NE(32)/faces|+|14|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) RM(32)|0 RM(32)/edges|+|3|-30|3|0|0 RM(32)/edges|-|3|-32|3|14|14 RM(32)/edges|+|30|-3|30|0|0 RM(32)/edges|-|30|-3|30|14|14 RM(32)/edges|-|32|32|-30|0|14 RM(32)/faces|-|14|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) NE(33)|33 NE(33)/edges|+|3|33|3|15|15 NE(33)/edges|-|3|-30|3|0|0 NE(33)/edges|+|30|-3|30|15|15 NE(33)/edges|-|30|-3|30|0|0 NE(33)/edges|+|33|-30|-33|15|0 NE(33)/faces|+|15|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) RM(33)|0 RM(33)/edges|+|3|-30|3|0|0 RM(33)/edges|-|3|33|3|15|15 RM(33)/edges|+|30|-3|30|0|0 RM(33)/edges|-|30|-3|30|15|15 RM(33)/edges|-|33|-30|-33|15|0 RM(33)/faces|-|15|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) NE(34)|34 NE(34)/edges|+|3|-30|34|0|0 NE(34)/edges|-|3|-30|3|0|0 NE(34)/edges|+|34|3|-34|0|16 NE(34)/faces|+|16|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) RM(34)|0 RM(34)/edges|+|3|-30|3|0|0 RM(34)/edges|-|3|-30|34|0|0 RM(34)/edges|-|34|3|-34|0|16 RM(34)/faces|-|16|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) NE(35)|35 NE(35)/edges|+|3|-30|-35|0|0 NE(35)/edges|-|3|-30|3|0|0 NE(35)/edges|+|35|35|3|17|0 NE(35)/faces|+|17|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) RM(35)|0 RM(35)/edges|+|3|-30|3|0|0 RM(35)/edges|-|3|-30|-35|0|0 RM(35)/edges|-|35|35|3|17|0 RM(35)/faces|-|17|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) Topology 'city_data' dropped BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT features.land_parcels.the_geom SRID:0 TYPE:MULTIPOLYGON DIMS:2 features.city_streets.the_geom SRID:0 TYPE:MULTILINESTRING DIMS:2 features.traffic_signs.the_geom SRID:0 TYPE:MULTIPOINT DIMS:2 ERROR: TopoGeom 4 in layer 3 (features.city_streets.feature) cannot be represented dropping edge 3 ERROR: TopoGeom 2 in layer 3 (features.city_streets.feature) cannot be represented dropping edge 4 ERROR: TopoGeom 2 in layer 3 (features.city_streets.feature) cannot be represented dropping edge 5 ERROR: TopoGeom 2 in layer 1 (features.land_parcels.feature) cannot be represented healing faces 5 and 4 RM(11)|relations_before:|18 RM(11)|8 RM(11)|relations_after:|17 ERROR: TopoGeom 3 in layer 1 (features.land_parcels.feature) cannot be represented healing faces 8 and 0 ERROR: TopoGeom 3 in layer 1 (features.land_parcels.feature) cannot be represented healing faces 0 and 8 RM(11)|P1|t RM(11)|P2|t RM(11)|P3|t RM(11)|P4|t RM(11)|P5|t Topology 'city_data' dropped ��������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topo2.5d.sql������������������������������������������0000644�0000000�0000000�00000002752�11722777314�022201� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to WARNING; SELECT topology.CreateTopology('tt3d', -1, 0, true) > 0; COPY tt3d.face(face_id) FROM STDIN; 1 \. COPY tt3d.node(node_id, geom) FROM STDIN; 1 POINT(0 0 30) 2 POINT(10 10 20) \. COPY tt3d.edge_data( edge_id, start_node, end_node, abs_next_left_edge, abs_next_right_edge, next_left_edge, next_right_edge, left_face, right_face, geom) FROM STDIN; 1 1 2 2 2 2 2 0 1 LINESTRING(0 0 30, 0 10 25, 10 10 20) 2 2 1 1 1 1 1 0 1 LINESTRING(10 10 20, 10 0 18, 0 0 30) \. -- 2.5d face geometries CREATE TABLE public.faces (id serial); SELECT topology.AddTopoGeometryColumn('tt3d', 'public', 'faces', 'g', 'POLYGON'); INSERT INTO public.faces (g) VALUES ( topology.CreateTopoGeom( 'tt3d', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{1,3}}') -- face_id:1 ); -- 2.5d line geometries CREATE TABLE lines (id serial); SELECT topology.AddTopoGeometryColumn('tt3d', 'public', 'lines', 'g', 'LINE'); INSERT INTO public.lines (g) VALUES ( topology.CreateTopoGeom( 'tt3d', -- Topology name 2, -- Topology geometry type (lineal) 2, -- TG_LAYER_ID for this topology (from topology.layer) '{{1,2},{2,2}}') -- edge_id:1 edge_id:2 ); SELECT 'f'||id, ST_AsEWKT(topology.geometry(g)) from faces; SELECT 'l'||id, ST_AsEWKT(topology.geometry(g)) from public.lines; SELECT topology.DropTopology('tt3d'); DROP TABLE lines; DROP TABLE faces; ����������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_newedgeheal.sql������������������������������������0000644�0000000�0000000�00000016157�12053772612�023603� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; -- Import city_data \i load_topology.sql SELECT topology.ST_NewEdgeHeal('city_data', 1, null); SELECT topology.ST_NewEdgeHeal('city_data', null, 1); SELECT topology.ST_NewEdgeHeal(null, 1, 2); SELECT topology.ST_NewEdgeHeal('', 1, 2); -- Not connected edges SELECT topology.ST_NewEdgeHeal('city_data', 25, 3); -- Other connected edges SELECT topology.ST_NewEdgeHeal('city_data', 9, 10); -- Closed edge SELECT topology.ST_NewEdgeHeal('city_data', 2, 3); SELECT topology.ST_NewEdgeHeal('city_data', 3, 2); -- Heal to self SELECT topology.ST_NewEdgeHeal('city_data', 25, 25); -- Good ones { -- check state before SELECT 'E'||edge_id, ST_AsText(ST_StartPoint(geom)), ST_AsText(ST_EndPoint(geom)), next_left_edge, next_right_edge, start_node, end_node FROM city_data.edge_data ORDER BY edge_id; SELECT 'N'||node_id FROM city_data.node; -- No other edges involved, SQL/MM caseno 2, drops node 6 SELECT 'MH(4,5)', topology.ST_NewEdgeHeal('city_data', 4, 5); -- Face and other edges involved, SQL/MM caseno 1, drops node 16 SELECT 'MH(21,6)', topology.ST_NewEdgeHeal('city_data', 21, 6); -- Face and other edges involved, SQL/MM caseno 2, drops node 19 SELECT 'MH(8,15)', topology.ST_NewEdgeHeal('city_data', 8, 15); -- Face and other edges involved, SQL/MM caseno 3, drops node 8 SELECT 'MH(12,22)', topology.ST_NewEdgeHeal('city_data', 12, 22); -- Face and other edges involved, SQL/MM caseno 4, drops node 11 SELECT 'MH(16,14)', topology.ST_NewEdgeHeal('city_data', 16, 14); -- check state after SELECT 'E'||edge_id, ST_AsText(ST_StartPoint(geom)), ST_AsText(ST_EndPoint(geom)), next_left_edge, next_right_edge, start_node, end_node FROM city_data.edge_data ORDER BY edge_id; SELECT 'N'||node_id FROM city_data.node; -- } -- clean up SELECT topology.DropTopology('city_data'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Now test in presence of features SELECT topology.CreateTopology('t') > 1; CREATE TABLE t.f(id varchar); SELECT topology.AddTopoGeometryColumn('t', 't', 'f','g', 'LINE'); SELECT 'E'||topology.AddEdge('t', 'LINESTRING(2 2, 2 8)'); -- 1 SELECT 'E'||topology.AddEdge('t', 'LINESTRING(2 8, 8 8)'); -- 2 INSERT INTO t.f VALUES ('F+E1', topology.CreateTopoGeom('t', 2, 1, '{{1,2}}')); -- This should be forbidden, as F+E1 above could not be -- defined w/out one of the edges SELECT topology.ST_NewEdgeHeal('t', 1, 2); SELECT topology.ST_NewEdgeHeal('t', 2, 1); -- This is for ticket #941 SELECT topology.ST_NewEdgeHeal('t', 1, 200); SELECT topology.ST_NewEdgeHeal('t', 100, 2); -- Now see how signed edges are updated SELECT 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 5 0)'); -- 3 SELECT 'E'||topology.AddEdge('t', 'LINESTRING(10 0, 5 0)'); -- 4 INSERT INTO t.f VALUES ('F+E3-E4', topology.CreateTopoGeom('t', 2, 1, '{{3,2},{-4,2}}')); INSERT INTO t.f VALUES ('F-E3+E4', topology.CreateTopoGeom('t', 2, 1, '{{-3,2},{4,2}}')); SELECT r.topogeo_id, r.element_id FROM t.relation r, t.f f WHERE r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g) AND r.topogeo_id in (2,3) ORDER BY r.layer_id, r.topogeo_id; -- This is fine, but will have to tweak definition of -- 'F+E3-E4' and 'F-E3+E4' SELECT 'MH(3,4)', topology.ST_NewEdgeHeal('t', 3, 4); -- This is for ticket #942 SELECT topology.ST_NewEdgeHeal('t', 1, 5); SELECT r.topogeo_id, r.element_id FROM t.relation r, t.f f WHERE r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g) AND r.topogeo_id in (2,3) ORDER BY r.layer_id, r.topogeo_id; SELECT topology.DropTopology('t'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- SELECT '#1955', topology.CreateTopology('t') > 1; SELECT '#1955.1', 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 10 0, 10 10)'); -- 1 SELECT '#1955.1', 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 0 10, 10 10)'); ; -- 2 SELECT '#1955.1', count(node_id), 'start nodes' as label FROM t.node GROUP BY label; -- Deletes second node. Not very predictable which one is removed SELECT '#1955.1', 'H:1,2', 'E' || topology.ST_NewEdgeHeal('t', 1, 2), 'created'; SELECT '#1955.1', count(node_id), 'nodes left' as label FROM t.node GROUP BY label; SELECT '#1955.2', 'E'||topology.AddEdge('t', 'LINESTRING(50 0, 60 0, 60 10)'); -- 4 SELECT '#1955.2', 'E'||topology.AddEdge('t', 'LINESTRING(50 0, 50 10, 60 10)'); ; -- 5 SELECT '#1955.2', 'E'||topology.AddEdge('t', 'LINESTRING(60 10, 70 10)'); ; -- 6 SELECT '#1955.2', count(node_id), 'start nodes' as label FROM t.node GROUP BY label; -- Only the start node can be deleted (50 0) because the other is shared by -- another edge SELECT '#1955.2', 'H:4,5', 'E' || topology.ST_NewEdgeHeal('t', 4, 5), 'created'; SELECT '#1955.2', count(node_id), 'nodes left' as label FROM t.node GROUP BY label; SELECT '#1955.3', 'E'||topology.AddEdge('t', 'LINESTRING(80 0, 90 0, 90 10)'); -- 8 SELECT '#1955.3', 'E'||topology.AddEdge('t', 'LINESTRING(80 0, 80 10, 90 10)'); ; -- 9 SELECT '#1955.3', 'E'||topology.AddEdge('t', 'LINESTRING(70 10, 80 0)'); ; -- 10 SELECT '#1955.3', count(node_id), 'start nodes' as label FROM t.node GROUP BY label; -- Only the end node can be deleted (90 10) because the other is shared by -- another edge SELECT '#1955.3', 'H:8,9', 'E' || topology.ST_NewEdgeHeal('t', 8, 9), 'created'; SELECT '#1955.3', count(node_id), 'nodes left' as label FROM t.node GROUP BY label; SELECT '#1955', topology.DropTopology('t'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Another case of merging edges sharing both endpoints -- See http://trac.osgeo.org/postgis/ticket/1998 SELECT '#1998.+', CreateTopology('t1998') > 1; SELECT '#1998.N1', ST_AddIsoNode('t1998', 0, 'POINT(1 1)'); SELECT '#1998.N2', ST_AddIsoNode('t1998', 0, 'POINT(0 0)'); SELECT '#1998.E1', ST_AddEdgeModFace('t1998', 1, 1, 'LINESTRING(1 1,1 2,2 2,2 1,1 1)'); SELECT '#1998.E2', ST_AddEdgeModFace('t1998', 2, 1, 'LINESTRING(0 0,0 1,1 1)'); SELECT '#1998.E3', ST_AddEdgeModFace('t1998', 1, 2, 'LINESTRING(1 1,1 0,0 0)'); SELECT '#1998.X0' as lbl, count(*) FROM ValidateTopology('t1998') GROUP BY lbl; SELECT '#1998.NE', ST_NewEdgeHeal('t1998', 2, 3); SELECT '#1998.NE4', ST_AsText(geom) FROM t1998.edge WHERE edge_id = 4; SELECT '#1998.X1' as lbl, count(*) FROM ValidateTopology('t1998') GROUP BY lbl; SELECT '#1998.-', topology.DropTopology('t1998'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- TODO: test registered but unexistent topology -- TODO: test registered but corrupted topology -- (missing node, edge, relation...) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getfacebypoint.sql������������������������������������0000644�0000000�0000000�00000006470�11722777314�023633� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; SELECT topology.CreateTopology('schema_topo') > 0; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(1 2, 1 5)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(1 5, 10 5)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(10 5, 10 2)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(10 2, 1 2)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(10 5, 10 12)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(10 12, 10 14)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(10 14, 10 15)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(10 15, 15 15)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(15 15, 15 2)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(15 2, 10 2)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(1 5, 1 12)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(1 12, 7 12)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(7 12, 8 12)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(8 12, 10 12)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(7 12, 7 15, 10 15)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(8 12, 8 14, 10 14)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(4 7, 4 10)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(4 10, 6 10)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(6 10, 6 7)')); select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(6 7, 4 7)')); select topology.addFace('schema_topo', 'POLYGON((1 2, 1 5, 10 5, 10 2, 1 2 ))'); select topology.addFace('schema_topo', 'POLYGON((10 2, 10 5, 10 12, 10 14, 10 15, 15 15, 15 2, 10 2))'); select topology.addFace('schema_topo', 'POLYGON((7 12, 7 15, 10 15, 10 14, 8 14, 8 12, 7 12))'); select topology.addFace('schema_topo', 'POLYGON((1 5, 1 12, 7 12, 8 12, 10 12, 10 5, 1 5),(4 7, 4 10, 6 10, 6 7, 4 7))'); -- ask for a Point with tolerance zero select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(7 7)'), 0::float8)::int; select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(6 7)'), 0::float8)::int; select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(5 7)'), 0::float8)::int; -- ask for a Point where there isn't a Face select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(9 13)'), 0::float8)::int; select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(5 8)'), 0::float8)::int; -- Ask for a point outside from an face but with a tolerance sufficient to include one face select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(8.5 13)'), 0.5::float8)::int; select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(5 8)'), 1::float8)::int; -- Failing cases (should all raise exceptions) ------- -- Ask for Point in a Node (2 or more faces) select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(1 5)'), 0::float8)::int; -- Ask for a Point with a tollerance too high (2 or more faces) select topology.GetFaceByPoint('schema_topo',ST_GeomFromText('POINT(9 13)'), 1::float8)::int; SELECT topology.DropTopology('schema_topo'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addedge.sql�������������������������������������������0000644�0000000�0000000�00000005624�11722777314�022205� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT topology.CreateTopology('tt') > 0; SELECT 'e1', topology.addEdge('tt', 'LINESTRING(0 0, 8 0)'); -- Equal edge SELECT 'e*1', topology.addEdge('tt', 'LINESTRING(0 0, 8 0)'); -- Failing cases (should all raise exceptions) ------- -- Contained with endpoint contact SELECT 'e*2', topology.addEdge('tt', 'LINESTRING(1 0, 8 0)'); -- Contained with no endpoint contact SELECT 'e*3', topology.addEdge('tt', 'LINESTRING(1 0, 7 0)'); -- Overlapping SELECT 'e*4', topology.addEdge('tt', 'LINESTRING(1 0, 9 0)'); -- Contains with endpoint contact SELECT 'e*5', topology.addEdge('tt', 'LINESTRING(0 0, 9 0)'); -- Contains with no endpoint contact SELECT 'e*6', topology.addEdge('tt', 'LINESTRING(-1 0, 9 0)'); -- Touches middle with endpoint SELECT 'e*7', topology.addEdge('tt', 'LINESTRING(5 0, 5 10)'); -- Crosses SELECT 'e*8', topology.addEdge('tt', 'LINESTRING(5 -10, 5 10)'); -- Is touched on the middle by endpoint SELECT 'e*9', topology.addEdge('tt', 'LINESTRING(0 -10, 0 10)'); -- Touches middle with internal vertex SELECT 'e*10', topology.addEdge('tt', 'LINESTRING(0 10, 5 0, 5 10)'); -- Endpoint touching cases (should succeed) ------ SELECT 'e2', topology.addEdge('tt', 'LINESTRING(8 0, 8 10)'); SELECT 'e3', topology.addEdge('tt', 'LINESTRING(0 0, 0 10)'); -- this one connects e2-e3 SELECT 'e4', topology.addEdge('tt', 'LINESTRING(8 10, 0 10)'); -- Disjoint case (should succeed) ------ SELECT 'e5', topology.addEdge('tt', 'LINESTRING(8 -10, 0 -10)'); -- this one touches the same edge (e5) at both endpoints SELECT 'e6', topology.addEdge('tt', 'LINESTRING(8 -10, 4 -20, 0 -10)'); -- -- See http://trac.osgeo.org/postgis/ticket/770 -- -- Closed edge shares endpoint with existing open edge SELECT '#770-1', topology.addEdge('tt', 'LINESTRING(8 10, 10 10, 10 12, 8 10)'); -- Closed edge shares endpoint with existing closed edge (and open one) SELECT '#770-2', topology.addEdge('tt', 'LINESTRING(8 10, 9 8, 10 9, 8 10)'); -- boundary has puntual intersection with "interior" of closed edge 770-1, -- but not _only_ on endpoint ! SELECT '#770-*', topology.addEdge('tt', 'LINESTRING(8 10, 8 12, 10 12)'); -- same as above, but this time the new edge is closed too SELECT '#770-*', topology.addEdge('tt', 'LINESTRING(8 10, 7 13, 10 12, 8 12, 10 12)'); -- once again, but the intersection is now at the new edge endpoint -- (not the existing edge endpoint) SELECT '#770-*', topology.addEdge('tt', 'LINESTRING(10 12, 11 12, 10 13, 10 12)'); -- Another equals case, this time a closed edge SELECT '#770-1*', topology.addEdge('tt', 'LINESTRING(8 10, 10 10, 10 12, 8 10)'); SELECT edge_id, left_face, right_face, next_left_edge, next_right_edge, st_astext(geom) from tt.edge ORDER by edge_id; SELECT topology.DropTopology('tt'); -- Test topology with MixedCase SELECT topology.CreateTopology('Ul') > 0; SELECT 'MiX', topology.addEdge('Ul', 'LINESTRING(0 0, 8 0)'); SELECT topology.DropTopology('Ul'); ������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addnode.sql�������������������������������������������0000644�0000000�0000000�00000003375�11722777314�022227� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; -- Test with zero tolerance SELECT topology.CreateTopology('nodes') > 0; -- Check that the same point geometry return the same node id SELECT 'p1', topology.addNode('nodes', 'POINT(0 0)'); SELECT 'p1b', topology.addNode('nodes', 'POINT(0 0)'); SELECT 'p2', topology.addNode('nodes', 'POINT(1 0)'); SELECT 'p2b', topology.addNode('nodes', 'POINT(1 0)'); -- Check that adding a node in the middle of an existing edge is refused -- While adding one on the endpoint is fine INSERT INTO nodes.edge VALUES(nextval('nodes.edge_data_edge_id_seq'),1,1,1,-1,0,0, 'LINESTRING(0 10,10 10)'); SELECT 'p3*1', topology.addNode('nodes', 'POINT(5 10)'); -- refused SELECT 'p3', topology.addNode('nodes', 'POINT(0 10)'); -- good SELECT 'p4', topology.addNode('nodes', 'POINT(10 10)'); -- good -- Now allow edge splitting: SELECT 'p5', topology.addNode('nodes', 'POINT(5 10)', true); -- ... and verify the edge was split SELECT 'post-p5', edge_id, ST_AsText(geom) FROM nodes.edge ORDER BY edge_id; -- And same against a closed edge INSERT INTO nodes.face VALUES(nextval('nodes.face_face_id_seq'), 'POLYGON((0 20, 10 20, 10 30, 0 30, 0 20))'); INSERT INTO nodes.edge VALUES(nextval('nodes.edge_data_edge_id_seq'),2,2,2,-2,1,0, 'LINESTRING(0 20,10 20,10 30, 0 30, 0 20)'); SELECT 'p6', topology.addNode('nodes', 'POINT(0 20)'); -- good -- Now allow computing containing face: SELECT 'p7', topology.addNode('nodes', 'POINT(5 25)', false, true); -- Check all nodes SELECT node_id, containing_face, st_astext(geom) from nodes.node ORDER by node_id; SELECT topology.DropTopology('nodes'); -- Test topology with MixedCase SELECT topology.CreateTopology('Ul') > 0; SELECT 'MiX', topology.addNode('Ul', 'POINT(0 0)'); SELECT topology.DropTopology('Ul'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getnodebypoint.sql������������������������������������0000644�0000000�0000000�00000002464�11722777314�023661� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT topology.CreateTopology('schema_topo') > 0; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(1 4, 4 7)')) = 1; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(4 7, 6 9)')) = 2; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(2 2, 4 4)')) = 3; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(4 4, 5 5, 6 6)')) = 4; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(6 6, 6 9)')) = 5; -- ask on a Point with tolerance zero select topology.GetNodeByPoint('schema_topo',ST_GeomFromText('POINT(5 5)'), 0::float8); -- ask on a Point on a node with tolerance select topology.GetNodeByPoint('schema_topo',ST_GeomFromText('POINT(4 4)'), 0::float8); -- Ask for a point outside from an edge with a tolerance sufficient to include one node select topology.GetNodeByPoint('schema_topo',ST_GeomFromText('POINT(4.1 4)'), 0.3::float8); -- Ask for a point where there isn't a node select topology.GetNodeByPoint('schema_topo',ST_GeomFromText('POINT(5 5.5)'), 0::float8) = 0; -- Failing cases (should all raise exceptions) ------- -- Ask for a Point with a tollerance too high select topology.GetNodeByPoint('schema_topo',ST_GeomFromText('POINT(4 7)'), 5::float8); SELECT topology.DropTopology('schema_topo'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeo_addlinestring.sql�����������������������������0000644�0000000�0000000�00000020507�12151747731�025205� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; \i load_topology.sql -- Save max node id select 'node'::text as what, max(node_id) INTO city_data.limits FROM city_data.node; INSERT INTO city_data.limits select 'edge'::text as what, max(edge_id) FROM city_data.edge; SELECT 'max',* from city_data.limits; -- Check changes since last saving, save more -- { CREATE OR REPLACE FUNCTION check_changes() RETURNS TABLE (o text) AS $$ DECLARE rec RECORD; sql text; BEGIN -- Check effect on nodes sql := 'SELECT n.node_id, ''N|'' || n.node_id || ''|'' || COALESCE(n.containing_face::text,'''') || ''|'' || ST_AsText(ST_SnapToGrid(n.geom, 0.2))::text as xx FROM city_data.node n WHERE n.node_id > ( SELECT max FROM city_data.limits WHERE what = ''node''::text ) ORDER BY n.node_id'; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; -- Check effect on edges (there should be one split) sql := ' WITH node_limits AS ( SELECT max FROM city_data.limits WHERE what = ''node''::text ), edge_limits AS ( SELECT max FROM city_data.limits WHERE what = ''edge''::text ) SELECT ''E|'' || e.edge_id || ''|sn'' || e.start_node || ''|en'' || e.end_node :: text as xx FROM city_data.edge e, node_limits nl, edge_limits el WHERE e.start_node > nl.max OR e.end_node > nl.max OR e.edge_id > el.max ORDER BY e.edge_id; '; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; UPDATE city_data.limits SET max = (SELECT max(n.node_id) FROM city_data.node n) WHERE what = 'node'; UPDATE city_data.limits SET max = (SELECT max(e.edge_id) FROM city_data.edge e) WHERE what = 'edge'; END; $$ LANGUAGE 'plpgsql'; -- } -- Invalid calls SELECT 'invalid', TopoGeo_addLineString('city_data', 'MULTILINESTRING((36 26, 38 30))'); SELECT 'invalid', TopoGeo_addLineString('city_data', 'POINT(36 26)'); SELECT 'invalid', TopoGeo_addLineString('invalid', 'LINESTRING(36 26, 0 0)'); -- Isolated edge in universal face SELECT 'iso_uni', TopoGeo_addLineString('city_data', 'LINESTRING(36 26, 38 30)'); SELECT check_changes(); -- Isolated edge in face 5 SELECT 'iso_f5', TopoGeo_addLineString('city_data', 'LINESTRING(37 20, 43 19, 41 16)'); SELECT check_changes(); -- Existing isolated edge SELECT 'iso_ex', TopoGeo_addLineString('city_data', 'LINESTRING(36 26, 38 30)'); SELECT check_changes(); -- Existing isolated edge within tolerance SELECT 'iso_ex_tol', TopoGeo_addLineString('city_data', 'LINESTRING(36 27, 38 31)', 2); SELECT check_changes(); -- Existing non-isolated edge SELECT 'noniso_ex', TopoGeo_addLineString('city_data', 'LINESTRING(35 6, 35 14)'); SELECT check_changes(); -- Existing non-isolated edge within tolerance SELECT 'noniso_ex_tol', TopoGeo_addLineString('city_data', 'LINESTRING(35 7, 35 13)', 2); SELECT check_changes(); -- Fully contained SELECT 'contained', TopoGeo_addLineString('city_data', 'LINESTRING(35 8, 35 12)'); SELECT check_changes(); -- Overlapping SELECT 'overlap', TopoGeo_addLineString('city_data', 'LINESTRING(45 22, 49 22)') ORDER BY 2; SELECT check_changes(); -- Crossing SELECT 'cross', TopoGeo_addLineString('city_data', 'LINESTRING(49 18, 44 17)') ORDER BY 2; SELECT check_changes(); -- Snapping (and splitting a face) SELECT 'snap', TopoGeo_addLineString('city_data', 'LINESTRING(18 22.2, 22.5 22.2, 21.2 20.5)', 1) ORDER BY 2; SELECT check_changes(); SELECT 'snap_again', TopoGeo_addLineString('city_data', 'LINESTRING(18 22.2, 22.5 22.2, 21.2 20.5)', 1) ORDER BY 2; SELECT check_changes(); -- A mix of crossing and overlapping, splitting another face SELECT 'crossover', TopoGeo_addLineString('city_data', 'LINESTRING(9 18, 9 20, 21 10, 21 7)') ORDER BY 2; SELECT check_changes(); SELECT 'crossover_again', TopoGeo_addLineString('city_data', 'LINESTRING(9 18, 9 20, 21 10, 21 7)') ORDER BY 2; SELECT check_changes(); -- Fully containing SELECT 'contains', TopoGeo_addLineString('city_data', 'LINESTRING(14 34, 13 35, 10 35, 9 35, 7 36)') ORDER BY 2; SELECT check_changes(); -- Crossing a node SELECT 'nodecross', TopoGeo_addLineString('city_data', 'LINESTRING(18 37, 22 37)') ORDER BY 2; SELECT check_changes(); -- Existing isolated edge with 2 segments SELECT 'iso_ex_2segs', TopoGeo_addLineString('city_data', 'LINESTRING(37 20, 43 19, 41 16)'); SELECT check_changes(); -- See http://trac.osgeo.org/postgis/attachment/ticket/1613 SELECT '#1613.1', TopoGeo_addLineString('city_data', 'LINESTRING(556267.562954 144887.066638, 556267 144887.4)') ORDER BY 2; SELECT check_changes(); SELECT '#1613.2', TopoGeo_addLineString('city_data', 'LINESTRING(556250 144887, 556267 144887.07, 556310.04 144887)') ORDER BY 2; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- See http://trac.osgeo.org/postgis/ticket/1631 -- clean all up first DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; SELECT '#1631.1', TopoGeo_addLineString('city_data', 'LINESTRING(556267.56295432 144887.06663814,556267.566 144888)' ) ORDER BY 2; SELECT check_changes(); SELECT '#1631.2', TopoGeo_addLineString('city_data', 'LINESTRING(556254.67 144886.62, 556267.66 144887.07)' ) ORDER BY 2; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- See http://trac.osgeo.org/postgis/ticket/1641 -- clean all up first DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; SELECT '#1641.1', TopoGeo_addLineString('city_data', 'LINESTRING(-0.223586 0.474301, 0.142550 0.406124)' ) ORDER BY 2; SELECT check_changes(); -- Use a tolerance SELECT '#1641.2', TopoGeo_addLineString('city_data', 'LINESTRING(0.095989 0.113619, -0.064646 0.470149)' , 1e-16 ) ORDER BY 2; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- Now w/out explicit tolerance (will use local min) -- clean all up first DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; SELECT '#1641.3', TopoGeo_addLineString('city_data', 'LINESTRING(-0.223586 0.474301, 0.142550 0.406124)' ) ORDER BY 2; SELECT check_changes(); SELECT '#1641.4', TopoGeo_addLineString('city_data', 'LINESTRING(0.095989 0.113619, -0.064646 0.470149)' ) ORDER BY 2; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- See http://trac.osgeo.org/postgis/ticket/1650 DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; SELECT '#1650.1' UNION ALL SELECT '#1650.2' || TopoGeo_addLineString('city_data', 'LINESTRING(0 0, 0 1)' , 2)::text; SELECT check_changes(); SELECT '#1650.3', TopoGeo_addLineString('city_data', 'LINESTRING(-1 0, 10 0)' , 2) ORDER BY 2; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- Test snapping of line over a node -- See http://trac.osgeo.org/postgis/ticket/1654 DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; SELECT '#1654.1', 'N', ST_AddIsoNode('city_data', 0, 'POINT(0 0)'); SELECT check_changes(); SELECT '#1654.2', TopoGeo_addLineString('city_data', 'LINESTRING(-10 1, 10 1)' , 2) ORDER BY 2; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- Test snapping of new edge endpoints -- See http://trac.osgeo.org/postgis/ticket/1706 DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; SELECT '#1706.1', 'E', TopoGeo_AddLineString('city_data', 'LINESTRING(20 10, 10 10, 9 12, 10 20)'); SELECT check_changes(); SELECT '#1706.2', 'E*', TopoGeo_addLineString('city_data', 'LINESTRING(10 0, 10 10, 15 10, 20 10)' , 4) ORDER BY 3; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- Test noding after snap -- See http://trac.osgeo.org/postgis/ticket/1714 DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; SELECT '#1714.1', 'N', AddNode('city_data', 'POINT(10 0)', false, true); SELECT check_changes(); SELECT '#1714.2', 'E*', TopoGeo_addLineString('city_data', 'LINESTRING(10 0, 0 20, 0 0, 10 0)' , 12) ORDER BY 3; SELECT check_changes(); -- Consistency check SELECT * FROM ValidateTopology('city_data'); -- Cleanups DROP FUNCTION check_changes(); SELECT DropTopology('city_data'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/gettopogeomelements.sql�������������������������������0000644�0000000�0000000�00000001244�12041034316�024667� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \i load_topology.sql \i load_features.sql SELECT lid, tid, GetTopoGeomElements('city_data', lid, tid) FROM ( SELECT DISTINCT layer_id as lid, topogeo_id as tid FROM city_data.relation ) as f order by 1, 2, 3; SELECT lid, tid, 'ARY', GetTopoGeomElementArray('city_data', lid, tid) FROM ( SELECT DISTINCT layer_id as lid, topogeo_id as tid FROM city_data.relation ) as f order by 1, 2; -- See http://trac.osgeo.org/postgis/ticket/2060 SELECT 't2060', feature_name, GetTopoGeomElementArray(feature) FROM features.land_parcels ORDER BY feature_name; -- clean up SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_validate.sql�����������������������������������0000644�0000000�0000000�00000000440�11722777314�023734� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \i load_topology.sql \i validate_topology.sql -- clean up SELECT topology.DropTopology('city_data'); -- Test for #1612 SELECT CreateTopology('tt') > 0; SELECT 'Empty topology errors', count(*) FROM ValidateTopology('tt'); SELECT DropTopology('tt'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/totopogeom_expected�����������������������������������0000644�0000000�0000000�00000004335�12116041146�024066� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������create|t ERROR: No topology with name "unexistent" in topology.topology ERROR: No layer with id "1" in topology "tt" ERROR: No topology with name "" in topology.topology simple_puntual_layer|1 hierarchical_layer|2 simple_lineal_layer|3 simple_areal_layer|4 simple_collection_layer|5 ERROR: No layer with id "30" in topology "tt" ERROR: Layer "2" of topology "tt" is hierarchical, cannot convert to it. ERROR: Layer "1" of topology "tt" is puntal, cannot hold a lineal feature. ERROR: Layer "4" of topology "tt" is areal, cannot hold a lineal feature. ERROR: Layer "3" of topology "tt" is lineal, cannot hold a puntal feature. ERROR: Layer "4" of topology "tt" is areal, cannot hold a puntal feature. ERROR: Layer "1" of topology "tt" is puntal, cannot hold an areal feature. ERROR: Layer "3" of topology "tt" is lineal, cannot hold an areal feature. ERROR: Unsupported feature type TIN ERROR: Unsupported feature type TRIANGLE ERROR: Unsupported feature type CIRCULARSTRING POINT(0 0)|t LINESTRING(0 10,10 10)|t POLYGON((0 20,10 20,5 30,0 20),(2 22,8 22,5 28,2 22))|t MULTIPOINT(0 -10,5 -10)|t MULTILINESTRING((-1 10,-10 10),(-10 8,-2 9))|t MULTIPOLYGON(((100 20,110 20,105 30,100 20),(102 22,108 22,105 28,102 22)),((80 20,90 20,90 60,80 20)))|t GEOMETRYCOLLECTION(POINT(-100 -100),LINESTRING(-100 -90,-90 -90),POLYGON((-100 -80,-90 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72,-98 -78)),MULTIPOINT(-100 -110,-95 -110),LINESTRING EMPTY,MULTILINESTRING((-101 -90,-110 -90),(-110 -92,-102 -91)),MULTIPOLYGON(((0 -80,10 -80,5 -70,0 -80),(2 -78,8 -78,5 -72,2 -78)),((-20 -80,-10 -80,-10 -40,-20 -80))))|GEOMETRYCOLLECTION(MULTIPOLYGON(((-100 -80,-95 -70,-90 -80,-100 -80),(-98 -78,-92 -78,-95 -72,-98 -78)),((0 -80,5 -70,10 -80,0 -80),(2 -78,8 -78,5 -72,2 -78)),((-20 -80,-10 -40,-10 -80,-20 -80))),MULTILINESTRING((-110 -92,-102 -91),(-101 -90,-110 -90),(-100 -90,-90 -90)),MULTIPOINT(-100 -110,-100 -100,-95 -110)) MULTIPOINT EMPTY MULTIPOINT EMPTY MULTILINESTRING EMPTY MULTILINESTRING EMPTY MULTIPOLYGON EMPTY MULTIPOLYGON EMPTY GEOMETRYCOLLECTION EMPTY tolerance_1|0.5 tolerance_topo_1|0.5 tolerance_0|0 custom_search_path|0 #1790.1|0|0 #1790.2|0|0 #1790.3|0|0 #1968.1|0 #1968.2|0 tgup1.1|5|100|1 tgup1.2|5|200|2 tgup1.3|5|200|4 Topology 'tt' dropped ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_query.sql��������������������������������������0000644�0000000�0000000�00000000434�11722777314�023313� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; -- Tests TopoGeometry->Geometry cast and id(TopoGeometry) \i load_topology.sql \i load_features.sql \i more_features.sql \i hierarchy.sql \i query_features.sql -- clean up SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/createtopogeom.sql������������������������������������0000644�0000000�0000000�00000005664�11722777314�023651� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; SELECT topology.CreateTopology('MiX') > 0; -- Fails due to missing layer 1 SELECT topology.CreateTopoGeom( 'MiX', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{3,3},{6,3}}'); -- face_id:3 face_id:6 CREATE TABLE "MiX".poi (id int); SELECT 'l1', topology.AddTopoGeometryColumn('MiX', 'MiX', 'poi', 'feat', 'POINT'); -- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 2 (LINE) SELECT topology.CreateTopoGeom( 'MiX', 2, 1, '{{12,2}}'); -- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 3 (POLY) SELECT topology.CreateTopoGeom( 'MiX', 3, 1, '{{13,3}}'); -- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 4 (COLL.) SELECT topology.CreateTopoGeom( 'MiX', 4, 1, '{{12,2}}'); -- Node 78 does not exist in topology MiX (trigger on "relation" table) SELECT topology.CreateTopoGeom( 'MiX', 1, 1, '{{78,1}}'); SELECT 'n1', topology.addNode('MiX', 'POINT(0 0)'); -- Success ! SELECT layer_id(tg), id(tg), type(tg) FROM ( SELECT topology.CreateTopoGeom( 'MiX', 1, 1, '{{1,1}}') as tg ) foo; -- Invalid TopoGeometry type (out of range) SELECT CreateTopoGeom( 'MiX', 5, 1, '{{1,1}}'); SELECT CreateTopoGeom( 'MiX', 0, 1, '{{1,1}}'); CREATE TABLE "MiX".f_lineal (id int); SELECT 'l2', AddTopoGeometryColumn('MiX', 'MiX', 'f_lineal', 'feat', 'LINE'); SELECT 'n2', addNode('MiX', 'POINT(10 0)'); SELECT 'e1', addEdge('MiX', 'LINESTRING(0 0, 10 0)'); SELECT CreateTopoGeom( 'MiX', 2, 2, '{{1,1}}'); -- wrong prim. type SELECT 'L1', ST_AsText(CreateTopoGeom( 'MiX', 2, 2, '{{1,2}}')); -- fine CREATE TABLE "MiX".f_areal (id int); SELECT 'l3', AddTopoGeometryColumn('MiX', 'MiX', 'f_areal', 'feat', 'POLYGON'); SELECT 'e2', addEdge('MiX', 'LINESTRING(10 0, 5 5, 0 0)'); SELECT 'f1', addFace('MiX', 'POLYGON((0 0, 10 0, 5 5, 0 0))'); SELECT 'A1', CreateTopoGeom( 'MiX', 2, 3, '{{1,3}}'); -- wrong tg type SELECT 'A1', CreateTopoGeom( 'MiX', 3, 3, '{{1,2}}'); -- wrong prim. type SELECT 'A1', ST_AsText(CreateTopoGeom( 'MiX', 3, 3, '{{1,3}}')); -- fine CREATE TABLE "MiX".f_mix (id int); SELECT 'l4', AddTopoGeometryColumn('MiX', 'MiX', 'f_mix', 'feat', 'COLLECTION'); SELECT 'MP', ST_AsText(CreateTopoGeom( 'MiX', 1, 4, '{{1,1}}')); -- fine point SELECT 'ML', ST_AsText(CreateTopoGeom( 'MiX', 2, 4, '{{1,2}}')); -- fine line SELECT 'MA', ST_AsText(CreateTopoGeom( 'MiX', 3, 4, '{{1,3}}')); -- fine area SELECT 'MM', ST_AsText(CreateTopoGeom( 'MiX', 4, 4, '{{1,3},{1,2},{1,1}}')); -- fine mix -- Test emptyness { SELECT 'POINT EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 1, 4, '{{0,0}}' ) ); SELECT 'LINESTRING EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 2, 4, '{{0,0}}' ) ); SELECT 'POLYGON EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 3, 4, '{{0,0}}' ) ); SELECT 'GEOMETRYCOLLECTION EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 4, 4, '{{0,0}}' ) ); -- } Test emptyness SELECT DropTopology('MiX'); ����������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_modedgeheal.sql������������������������������������0000644�0000000�0000000�00000016303�12053772612�023562� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; -- Import city_data \i load_topology.sql SELECT topology.ST_ModEdgeHeal('city_data', 1, null); SELECT topology.ST_ModEdgeHeal('city_data', null, 1); SELECT topology.ST_ModEdgeHeal(null, 1, 2); SELECT topology.ST_ModEdgeHeal('', 1, 2); -- Not connected edges SELECT topology.ST_ModEdgeHeal('city_data', 25, 3); -- Other connected edges SELECT topology.ST_ModEdgeHeal('city_data', 9, 10); -- Closed edge SELECT topology.ST_ModEdgeHeal('city_data', 2, 3); SELECT topology.ST_ModEdgeHeal('city_data', 3, 2); -- Heal to self SELECT topology.ST_ModEdgeHeal('city_data', 25, 25); -- Good ones { -- check state before SELECT 'E'||edge_id, ST_AsText(ST_StartPoint(geom)), ST_AsText(ST_EndPoint(geom)), next_left_edge, next_right_edge, start_node, end_node FROM city_data.edge_data ORDER BY edge_id; SELECT 'N'||node_id FROM city_data.node; -- No other edges involved, SQL/MM caseno 2, drops node 6 SELECT 'MH(4,5)', topology.ST_ModEdgeHeal('city_data', 4, 5); -- Face and other edges involved, SQL/MM caseno 1, drops node 16 SELECT 'MH(21,6)', topology.ST_ModEdgeHeal('city_data', 21, 6); -- Face and other edges involved, SQL/MM caseno 2, drops node 19 SELECT 'MH(8,15)', topology.ST_ModEdgeHeal('city_data', 8, 15); -- Face and other edges involved, SQL/MM caseno 3, drops node 8 SELECT 'MH(12,22)', topology.ST_ModEdgeHeal('city_data', 12, 22); -- Face and other edges involved, SQL/MM caseno 4, drops node 11 SELECT 'MH(16,14)', topology.ST_ModEdgeHeal('city_data', 16, 14); -- check state after SELECT 'E'||edge_id, ST_AsText(ST_StartPoint(geom)), ST_AsText(ST_EndPoint(geom)), next_left_edge, next_right_edge, start_node, end_node FROM city_data.edge_data ORDER BY edge_id; SELECT 'N'||node_id FROM city_data.node; -- } -- clean up SELECT topology.DropTopology('city_data'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Now test in presence of features SELECT topology.CreateTopology('t') > 1; CREATE TABLE t.f(id varchar); SELECT topology.AddTopoGeometryColumn('t', 't', 'f','g', 'LINE'); SELECT 'E'||topology.AddEdge('t', 'LINESTRING(2 2, 2 8)'); -- 1 SELECT 'E'||topology.AddEdge('t', 'LINESTRING(2 8, 8 8)'); -- 2 INSERT INTO t.f VALUES ('F+E1', topology.CreateTopoGeom('t', 2, 1, '{{1,2}}')); -- This should be forbidden, as F+E1 above could not be -- defined w/out one of the edges SELECT topology.ST_ModEdgeHeal('t', 1, 2); SELECT topology.ST_ModEdgeHeal('t', 2, 1); -- This is for ticket #941 SELECT topology.ST_ModEdgeHeal('t', 1, 200); SELECT topology.ST_ModEdgeHeal('t', 100, 2); -- Now see how signed edges are updated SELECT 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 5 0)'); -- 3 SELECT 'E'||topology.AddEdge('t', 'LINESTRING(10 0, 5 0)'); -- 4 INSERT INTO t.f VALUES ('F+E3-E4', topology.CreateTopoGeom('t', 2, 1, '{{3,2},{-4,2}}')); INSERT INTO t.f VALUES ('F-E3+E4', topology.CreateTopoGeom('t', 2, 1, '{{-3,2},{4,2}}')); SELECT r.topogeo_id, r.element_id FROM t.relation r, t.f f WHERE r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g) AND r.topogeo_id in (2,3) ORDER BY r.layer_id, r.topogeo_id; -- This is fine, but will have to tweak definition of -- 'F+E3-E4' and 'F-E3+E4' SELECT 'MH(3,4)', topology.ST_ModEdgeHeal('t', 3, 4); -- This is for ticket #942 SELECT topology.ST_ModEdgeHeal('t', 1, 3); SELECT r.topogeo_id, r.element_id FROM t.relation r, t.f f WHERE r.layer_id = layer_id(f.g) AND r.topogeo_id = id(f.g) AND r.topogeo_id in (2,3) ORDER BY r.layer_id, r.topogeo_id; SELECT topology.DropTopology('t'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Test edges sharing both endpoints -- See http://trac.osgeo.org/postgis/ticket/1955 SELECT '#1955', topology.CreateTopology('t') > 1; SELECT '#1955.1', 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 10 0, 10 10)'); -- 1 SELECT '#1955.1', 'E'||topology.AddEdge('t', 'LINESTRING(0 0, 0 10, 10 10)'); ; -- 2 SELECT '#1955.1', count(node_id), 'start nodes' as label FROM t.node GROUP BY label; -- Deletes second node. Not very predictable which one is removed SELECT '#1955.1', 'H:1,2', 'N' || topology.ST_ModEdgeHeal('t', 1, 2), 'deleted'; SELECT '#1955.1', count(node_id), 'nodes left' as label FROM t.node GROUP BY label; SELECT '#1955.2', 'E'||topology.AddEdge('t', 'LINESTRING(50 0, 60 0, 60 10)'); -- 3 SELECT '#1955.2', 'E'||topology.AddEdge('t', 'LINESTRING(50 0, 50 10, 60 10)'); ; -- 4 SELECT '#1955.2', 'E'||topology.AddEdge('t', 'LINESTRING(60 10, 70 10)'); ; -- 5 SELECT '#1955.2', count(node_id), 'start nodes' as label FROM t.node GROUP BY label; -- Only the start node can be deleted (50 0) because the other is shared by -- another edge SELECT '#1955.2', 'H:3,4', 'N' || topology.ST_ModEdgeHeal('t', 3, 4), 'deleted'; SELECT '#1955.2', count(node_id), 'nodes left' as label FROM t.node GROUP BY label; SELECT '#1955.3', 'E'||topology.AddEdge('t', 'LINESTRING(80 0, 90 0, 90 10)'); -- 6 SELECT '#1955.3', 'E'||topology.AddEdge('t', 'LINESTRING(80 0, 80 10, 90 10)'); ; -- 7 SELECT '#1955.3', 'E'||topology.AddEdge('t', 'LINESTRING(70 10, 80 0)'); ; -- 8 SELECT '#1955.3', count(node_id), 'start nodes' as label FROM t.node GROUP BY label; -- Only the end node can be deleted (90 10) because the other is shared by -- another edge SELECT '#1955.3', 'H:6,7', 'N' || topology.ST_ModEdgeHeal('t', 6, 7), 'deleted'; SELECT '#1955.3', count(node_id), 'nodes left' as label FROM t.node GROUP BY label; SELECT '#1955', topology.DropTopology('t'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Another case of merging edges sharing both endpoints -- See http://trac.osgeo.org/postgis/ticket/1998 SELECT '#1998.+', CreateTopology('t1998') > 1; SELECT '#1998.N1', ST_AddIsoNode('t1998', 0, 'POINT(1 1)'); SELECT '#1998.N2', ST_AddIsoNode('t1998', 0, 'POINT(0 0)'); SELECT '#1998.E1', ST_AddEdgeModFace('t1998', 1, 1, 'LINESTRING(1 1,1 2,2 2,2 1,1 1)'); SELECT '#1998.E2', ST_AddEdgeModFace('t1998', 2, 1, 'LINESTRING(0 0,0 1,1 1)'); SELECT '#1998.E3', ST_AddEdgeModFace('t1998', 1, 2, 'LINESTRING(1 1,1 0,0 0)'); SELECT '#1998.X0' as lbl, count(*) FROM ValidateTopology('t1998') GROUP BY lbl; SELECT '#1998.N-', ST_ModEdgeHeal('t1998', 2, 3); SELECT '#1998.M2', ST_AsText(geom) FROM t1998.edge WHERE edge_id = 2; SELECT '#1998.X1' as lbl, count(*) FROM ValidateTopology('t1998') GROUP BY lbl; SELECT '#1998.-', topology.DropTopology('t1998'); ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- TODO: test registered but unexistent topology -- TODO: test registered but corrupted topology -- (missing node, edge, relation...) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/validatetopology.sql����������������������������������0000644�0000000�0000000�00000002007�11765617042�024204� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; -- TODO: merge legacy_validate.sql here -- See ticket #1789 select null from ( select topology.CreateTopology('t') > 0 ) as ct; COPY t.node (node_id, containing_face, geom) FROM stdin; 1 \N 01010000000000000000E065C002000000008056C0 2 \N 01010000000000000000E065C000000000008056C0 3 \N 010100000000000000009865C04FE5D4AD958655C0 \. COPY t.edge_data (edge_id, start_node, end_node, next_left_edge, abs_next_left_edge, next_right_edge, abs_next_right_edge, left_face, right_face, geom) FROM stdin; 1 1 3 2 2 1 1 0 0 0102000000020000000000000000E065C002000000008056C000000000009865C04FE5D4AD958655C0 2 3 2 -2 2 -1 1 0 0 01020000000200000000000000009865C04FE5D4AD958655C00000000000E065C000000000008056C0 \. SELECT '#1789', * FROM ValidateTopology('t') UNION SELECT '#1789', '---', null, null ORDER BY 1,2,3,4; SELECT '#1797', (ValidateTopology('t')).* UNION SELECT '#1797', '---', null, null ORDER BY 1,2,3,4; select null from ( select topology.DropTopology('t') ) as dt; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getnodeedges_expected���������������������������������0000644�0000000�0000000�00000000733�11722777314�024344� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT N1|1|1 N1|2|-1 N2|1|3 N2|2|2 N2|3|-2 N3|1|-3 N5|1|4 N6|1|-5 N6|2|-4 N7|1|5 N8|1|22 N8|2|12 N9|1|20 N9|2|13 N9|3|-12 N10|1|18 N10|2|14 N10|3|-13 N11|1|16 N11|2|-14 N12|1|15 N12|2|-16 N12|3|-11 N13|1|17 N13|2|11 N13|3|-18 N13|4|10 N14|1|19 N14|2|-10 N14|3|-20 N14|4|-9 N15|1|21 N15|2|9 N15|3|-22 N16|1|6 N16|2|-21 N17|1|7 N17|2|-19 N17|3|-6 N18|1|8 N18|2|-17 N18|3|-7 N19|1|-15 N19|2|-8 N20|1|-26 N20|2|26 N21|1|25 N22|1|-25 Topology 'city_data' dropped �������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topoelementarray_agg.sql������������������������������0000644�0000000�0000000�00000000352�11722777314�025031� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT 1,topology.TopoElementArray_agg('{1,3}'::topology.TopoElement); SELECT 2, topology.TopoElementArray_agg(e) from ( select '{4,1}'::topology.TopoElement as e union select '{5,2}' ) as foo; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addedgemodface.sql���������������������������������0000644�0000000�0000000�00000041574�12032754123�024222� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; \i load_topology.sql -- Endpoint / node mismatch SELECT topology.ST_AddEdgeModFace('city_data', 7, 6, 'LINESTRING(36 38,57 33)'); SELECT topology.ST_AddEdgeModFace('city_data', 5, 7, 'LINESTRING(36 38,57 33)'); -- See http://trac.osgeo.org/postgis/ticket/1857 SELECT topology.ST_AddEdgeModFace('city_data', 5, 5, 'LINESTRING(36 38,57 33)'); -- Crosses a node SELECT topology.ST_AddEdgeModFace('city_data', 5, 6, 'LINESTRING(36 38, 41 40, 57 33)'); -- Non-existent node SELECT topology.ST_AddEdgeModFace('city_data', 5, 60000, 'LINESTRING(36 38,57 33)'); SELECT topology.ST_AddEdgeModFace('city_data', 60000, 6, 'LINESTRING(36 38,57 33)'); -- Non-simple curve SELECT topology.ST_AddEdgeModFace('city_data', 5, 5, 'LINESTRING(36 38, 40 50, 36 38)'); -- Collapsed curve SELECT topology.ST_AddEdgeModFace('city_data', 5, 5, 'LINESTRING(36 38, 36 38, 36 38)'); -- Empty curve SELECT topology.ST_AddEdgeModFace('city_data', 5, 5, 'LINESTRING EMPTY'); -- Coincident edge SELECT topology.ST_AddEdgeModFace('city_data', 18, 19, 'LINESTRING(35 22,47 22)'); -- Crosses an edge SELECT topology.ST_AddEdgeModFace('city_data', 5, 6, 'LINESTRING(36 38, 40 50, 57 33)'); -- Touches an existing edge SELECT 'O', topology.ST_AddEdgeModFace('city_data', 5, 6, 'LINESTRING(36 38,45 32,57 33)'); -- Shares a portion of an existing edge SELECT 'O', topology.ST_AddEdgeModFace('city_data', 5, 6, 'LINESTRING(36 38,38 35,57 33)'); --------------------------------------------------------------------- -- Define some features --------------------------------------------------------------------- CREATE TABLE city_data.fp(id varchar); SELECT 'L' || topology.AddTopoGeometryColumn('city_data', 'city_data', 'fp', 'g', 'POLYGON'); -- Feature composed by face 3 and face 4 INSERT INTO city_data.fp VALUES ('F3,F4', topology.CreateTopoGeom('city_data', 3, 1, '{{3,3},{4,3}}')); CREATE TABLE city_data.fc(id varchar); SELECT 'L' || topology.AddTopoGeometryColumn('city_data', 'city_data', 'fc', 'g', 'COLLECTION'); -- Feature composed by face 5 and node 4 INSERT INTO city_data.fc VALUES ('F5,N4', topology.CreateTopoGeom('city_data', 4, 2, '{{5,3},{4,1}}')); --------------------------------------------------------------------- -- Now add some edges splitting faces... --------------------------------------------------------------------- -- -- start node has: -- outward edge on the left face -- inward edge on the right face -- end node has: -- inward edge on the left face -- inward edge on the right face -- SELECT 1 as id, topology.st_addedgemodface('city_data', 14, 18, 'LINESTRING(21 14, 35 22)') as edge_id INTO newedge; SELECT 'T1', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (19, 7, 17, 10, ( SELECT edge_id FROM newedge WHERE id = 1 ) ) ORDER BY edge_id; -- -- start node has: -- inward edge on the left face -- outward edge on the right face -- end node has: -- inward edge on the left face -- outward edge on the right face -- INSERT INTO newedge SELECT 2, topology.st_addedgemodface('city_data', 12, 18, 'LINESTRING(47 14, 35 22)'); SELECT 'T2', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (17, 8, 15, 11, ( SELECT edge_id FROM newedge WHERE id = 2 ) ) ORDER BY edge_id; -- -- start node has: -- inward edge on the left face -- inward edge on the right face -- end node has: -- outward edge on the left face -- outward edge on the right face -- INSERT INTO newedge SELECT 3, topology.st_addedgemodface('city_data', 12, 10, 'LINESTRING(47 14, 35 6)'); SELECT 'T3', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (11, 16, 14, 18, ( SELECT edge_id FROM newedge WHERE id = 3 ) ) ORDER BY edge_id; -- -- start node has: -- outward edge on the left face -- outward edge on the right face -- end node has: -- outward edge on the left face -- inward edge on the right face -- INSERT INTO newedge SELECT 4, topology.st_addedgemodface('city_data', 9, 13, 'LINESTRING(21 6, 35 14)'); SELECT 'T4', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (20, 10, 18, 13, ( SELECT edge_id FROM newedge WHERE id = 4 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for left face, swapped direction -- INSERT INTO newedge SELECT 5, topology.st_addedgemodface('city_data', 14, 9, 'LINESTRING(21 14, 19 10, 21 6)'); SELECT 'T5', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (9, 12, 20, ( SELECT edge_id FROM newedge WHERE id = 5 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for left face, same direction -- INSERT INTO newedge SELECT 6, topology.st_addedgemodface('city_data', 8, 15, 'LINESTRING(9 6, 11 10, 9 14)'); SELECT 'T6', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (9, 12, 22, ( SELECT edge_id FROM newedge WHERE id = 6 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for right face, swapped direction -- INSERT INTO newedge SELECT 7, topology.st_addedgemodface('city_data', 17, 16, 'LINESTRING(21 22, 15 20, 9 22)'); SELECT 'T7', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (21, 6, 19, ( SELECT edge_id FROM newedge WHERE id = 7 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for right face, same direction -- INSERT INTO newedge SELECT 8, topology.st_addedgemodface('city_data', 15, 14, 'LINESTRING(9 14, 15 16, 21 14)'); SELECT 'T8', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (9, 21, 19, ( SELECT edge_id FROM newedge WHERE id = 8 ) ) ORDER BY edge_id; -- -- Closed edge, counterclockwise, in universe face, next right -- INSERT INTO newedge SELECT 9, topology.st_addedgemodface('city_data', 9, 9, 'LINESTRING(21 6, 18 0, 24 0, 21 6)'); SELECT 'T9', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (12, 13, ( SELECT edge_id FROM newedge WHERE id = 9 ) ) ORDER BY edge_id; -- -- Closed edge, clockwise, in universe face, next right -- INSERT INTO newedge SELECT 10, topology.st_addedgemodface('city_data', 10, 10, 'LINESTRING(35 6, 38 0, 32 0, 35 6)'); SELECT 'T10', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (13, 14, ( SELECT edge_id FROM newedge WHERE id = 10 ) ) ORDER BY edge_id; -- -- Closed edge, clockwise, in universe face, next left -- INSERT INTO newedge SELECT 11, topology.st_addedgemodface('city_data', 15, 15, 'LINESTRING(9 14, 3 11, 3 17, 9 14)'); SELECT 'T11', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (21, 22, ( SELECT edge_id FROM newedge WHERE id = 11 ) ) ORDER BY edge_id; -- -- Closed edge, clockwise, in universe face, against closed edge -- INSERT INTO newedge SELECT 12, topology.st_addedgemodface('city_data', 1, 1, 'LINESTRING(8 30, 5 27, 11 27, 8 30)'); SELECT 'T12', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (1, ( SELECT edge_id FROM newedge WHERE id = 12 ) ) ORDER BY edge_id; -- -- Closed edge, counterclockwise, in universe face, against closed edge -- INSERT INTO newedge SELECT 13, topology.st_addedgemodface('city_data', 2, 2, 'LINESTRING(25 30, 28 27, 22 27, 25 30)'); SELECT 'T13', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (2, ( SELECT edge_id FROM newedge WHERE id = 13 ) ) ORDER BY edge_id; -- -- Dangling edge, ending into closed edge endpoint -- INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(9 33)', 1); -- N23 INSERT INTO newedge SELECT 14, topology.st_addedgemodface('city_data', 23, 1, 'LINESTRING(9 33, 8 30)'); SELECT 'T14', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (1, ( SELECT edge_id FROM newedge WHERE id = 14 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id = 23; -- -- Dangling edge, originating from closed edge endpoint -- INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(12 28)', 0); -- N24 INSERT INTO newedge SELECT 15, topology.st_addedgemodface('city_data', 1, 24, 'LINESTRING(8 30, 12 28)'); SELECT 'T15', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (38, 1, ( SELECT edge_id FROM newedge WHERE id = 15 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id = 24; -- -- Closed edge on isolated node -- INSERT INTO newedge SELECT 16, topology.st_addedgemodface('city_data', 4, 4, 'LINESTRING(20 37, 23 37, 20 34, 20 37)'); SELECT 'T16', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (2, 3, ( SELECT edge_id FROM newedge WHERE id = 16 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id = 4; -- -- Isolated edge -- INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(35 28)', 0); -- N25 INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(39 28)', 0); -- N26 INSERT INTO newedge SELECT 17, topology.st_addedgemodface('city_data', 25, 26, 'LINESTRING(35 28, 39 28)'); SELECT 'T17', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( ( SELECT edge_id FROM newedge WHERE id = 17 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 25, 26 ); -- -- New face in universal face, enclosing isolated edge chain -- INSERT INTO newedge SELECT 18, topology.st_addedgemodface('city_data', 25, 26, 'LINESTRING(35 28, 35 45, 63 45, 63 25, 39 25, 39 28)'); SELECT 'T18', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( 4, 5, 43, ( SELECT edge_id FROM newedge WHERE id = 18 ) ) ORDER BY edge_id; -- -- New face in universal face, with both endpoints on same existing edge -- INSERT INTO newedge SELECT 19, topology.st_addedgemodface('city_data', 9, 8, 'LINESTRING(21 6, 12 0, 9 6)'); SELECT 'T19', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( 12, 35, 22, ( SELECT edge_id FROM newedge WHERE id = 19 ) ) ORDER BY edge_id; -- -- New face in universal face, with both endpoints on same existing edge -- and endpoints duplicated -- INSERT INTO newedge SELECT 20, topology.st_addedgemodface('city_data', 10, 11, 'LINESTRING(35 6, 35 6, 44 0, 47 6, 47 6)'); SELECT 'T20', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( 36, 14, 16, ( SELECT edge_id FROM newedge WHERE id = 20 ) ) ORDER BY edge_id; -- -- Another face in universal face, with both endpoints on same existing edge -- and both edges' endpoints duplicated -- INSERT INTO newedge SELECT 21, topology.st_addedgemodface('city_data', 10, 11, 'LINESTRING(35 6, 35 6, 44 -4, 47 6, 47 6)'); SELECT 'T21', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (20, 21) UNION VALUES (36),(16) ) ORDER BY edge_id; -- -- Split a face containing an hole -- Faces on both sides contain isolated nodes. -- SELECT 'T22-', 'N' || topology.st_addisonode('city_data', 23, 'POINT(26 36)'), 23; SELECT 'T22-', 'N' || topology.st_addisonode('city_data', 23, 'POINT(26 34.5)'), 23; SELECT 'T22-', 'N' || topology.st_addisonode('city_data', 23, 'POINT(26 33)'), 23; INSERT INTO newedge SELECT 22, topology.st_addedgemodface('city_data', 3, 3, 'LINESTRING(25 35, 27 35, 26 34, 25 35)'); SELECT 'T22', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (22, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T22', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 28, 29 ) ORDER BY node_id; -- -- Split a face containing an holes in both sides of the split -- Faces on both sides contain isolated nodes. -- INSERT INTO newedge SELECT 23, topology.st_addedgemodface('city_data', 2, 3, 'LINESTRING(25 30, 29 32, 29 37, 25 35)'); SELECT 'T23', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (13, 23, 22, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T23', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 28, 29 ) ORDER BY node_id; -- -- Split a face containing an hole, this time with no ring continuity -- This version goes clockwise -- All involved faces contain isolated nodes -- SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(19.5 37.5)'), 28; SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(19 38)'), 28; SELECT 'T24-', 'N' || st_addisonode('city_data', 2, 'POINT(20.5 35)'), 2; SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(20.5 34)'), 28; SELECT 'T24-', 'N' || st_addisonode('city_data', 28, 'POINT(20.5 33)'), 28; INSERT INTO newedge SELECT 24, topology.st_addedgemodface('city_data', 30, 30, 'LINESTRING(19.5 37.5, 24.5 37.5, 19.5 32.5, 19.5 37.5)'); SELECT 'T24', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (24, 23, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T24', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 30, 31, 32, 33, 34 ) ORDER BY node_id; -- -- Split a face containing an hole, this time with no ring continuity -- This version goes counterclockwise -- All involved faces contain isolated nodes -- INSERT INTO newedge SELECT 25, topology.st_addedgemodface('city_data', 31, 31, 'LINESTRING(19 38, 19 31, 26 38, 19 38)'); SELECT 'T25', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (25, 24, 23, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T25', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 31, 32, 33, 34 ) ORDER BY node_id; -- -- Split a face closing a ring inside a face -- INSERT INTO newedge SELECT 26, topology.st_addedgemodface('city_data', 5, 6, 'LINESTRING(36 38, 57 33)'); SELECT 'T26', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (26, 17, 18) UNION VALUES (4),(5) ) ORDER BY edge_id; -- -- Split a face closing a ring inside a face -- and with the ring containing another edge -- INSERT INTO newedge SELECT 27, topology.st_addedgemodface('city_data', 5, 6, 'LINESTRING(36 38, 50 38, 57 33)'); SELECT 'T27', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (27, 17, 18, 26) UNION VALUES (4),(5) ) ORDER BY edge_id; -- -- Split a face closing a ring inside a face -- and with the left ring containing another edge -- and forming an invalid polygon of this shape: <>---<> -- -- See http://trac.osgeo.org/postgis/ticket/2025 -- INSERT INTO newedge SELECT 28, topology.st_addedgemodface('city_data', 7, 7, 'LINESTRING(41 40, 38 40, 41 43, 41 40)'); SELECT 'T28', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (26, 27, 28, 17, 18) UNION VALUES (4),(5) ) ORDER BY edge_id; --------------------------------------------------------------------- -- Check new relations and faces status --------------------------------------------------------------------- SELECT id, array_agg(comp) FROM ( SELECT f.id, r.element_type||':'||r.element_id as comp FROM city_data.fp f, city_data.relation r WHERE r.topogeo_id = id(f.g) AND r.layer_id = layer_id(f.g) ORDER BY f.id, element_type, element_id ) f GROUP BY id; SELECT id, array_agg(comp) FROM ( SELECT f.id, r.element_type||':'||r.element_id as comp FROM city_data.fc f, city_data.relation r WHERE r.topogeo_id = id(f.g) AND r.layer_id = layer_id(f.g) ORDER BY f.id, element_type, element_id ) f GROUP BY id; SELECT 'F'||face_id, st_astext(mbr) FROM city_data.face ORDER BY face_id; --------------------------------------------------------------------- -- Cleanups --------------------------------------------------------------------- DROP TABLE newedge; SELECT topology.DropTopology('city_data'); ������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_modedgesplit.sql�����������������������������������0000644�0000000�0000000�00000007637�11733173711�024015� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� \set VERBOSITY terse set client_min_messages to WARNING; -- Import city_data \i load_topology.sql -- Save max node id select 'node'::text as what, max(node_id) INTO city_data.limits FROM city_data.node; INSERT INTO city_data.limits select 'edge'::text as what, max(edge_id) FROM city_data.edge; SELECT 'max',* from city_data.limits; -- Check changes since last saving, save more -- { CREATE OR REPLACE FUNCTION check_changes() RETURNS TABLE (o text) AS $$ DECLARE rec RECORD; sql text; BEGIN -- Check effect on nodes sql := 'SELECT n.node_id, ''N|'' || n.node_id || ''|'' || COALESCE(n.containing_face::text,'''') || ''|'' || ST_AsText(ST_SnapToGrid(n.geom, 0.2))::text as xx FROM city_data.node n WHERE n.node_id > ( SELECT max FROM city_data.limits WHERE what = ''node''::text ) ORDER BY n.node_id'; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; -- Check effect on edges (there should be one split) sql := ' WITH node_limits AS ( SELECT max FROM city_data.limits WHERE what = ''node''::text ), edge_limits AS ( SELECT max FROM city_data.limits WHERE what = ''edge''::text ) SELECT ''E|'' || e.edge_id || ''|sn'' || e.start_node || ''|en'' || e.end_node || ''|nl'' || e.next_left_edge || ''|nr'' || e.next_right_edge || ''|lf'' || e.left_face || ''|rf'' || e.right_face :: text as xx FROM city_data.edge e, node_limits nl, edge_limits el WHERE e.start_node > nl.max OR e.end_node > nl.max OR e.edge_id > el.max ORDER BY e.edge_id; '; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; UPDATE city_data.limits SET max = (SELECT max(n.node_id) FROM city_data.node n) WHERE what = 'node'; UPDATE city_data.limits SET max = (SELECT max(e.edge_id) FROM city_data.edge e) WHERE what = 'edge'; END; $$ LANGUAGE 'plpgsql'; -- } -- Invalid calls SELECT 'invalid', ST_ModEdgeSplit('city_data', 999, 'POINT(36 26, 38 30)'); SELECT 'invalid', ST_ModEdgeSplit('city_data', 10, 'POINT(28 15)'); SELECT 'invalid', ST_ModEdgeSplit('', 10, 'POINT(28 14)'); SELECT 'invalid', ST_ModEdgeSplit(NULL, 10, 'POINT(28 14)'); SELECT 'invalid', ST_ModEdgeSplit('city_data', NULL, 'POINT(28 14)'); SELECT 'invalid', ST_ModEdgeSplit('city_data', 10, NULL); SELECT 'invalid', ST_ModEdgeSplit('fake', 10, 'POINT(28 14)'); -- Non-isolated edge SELECT 'noniso', ST_ModEdgeSplit('city_data', 10, 'POINT(28 14)'); SELECT check_changes(); -- Isolated edge SELECT 'iso', ST_ModEdgeSplit('city_data', 25, 'POINT(11 35)'); SELECT check_changes(); -- Dangling on end point SELECT 'dangling_end', ST_ModEdgeSplit('city_data', 3, 'POINT(25 32)'); SELECT check_changes(); -- Dangling on start point SELECT 'dangling_start', ST_ModEdgeSplit('city_data', 4, 'POINT(45 32)'); SELECT check_changes(); -- Splitting closed edge SELECT 'closed', ST_ModEdgeSplit('city_data', 1, 'POINT(3 38)'); SELECT check_changes(); -- Robustness of edge splitting (#1711) -- clean all up first DELETE FROM city_data.edge_data; DELETE FROM city_data.node; DELETE FROM city_data.face where face_id > 0; CREATE TEMP TABLE t AS SELECT '01020000000400000000000000000034400000000000002440000000000000244000000000000024400000000000002240000000000000284000000000000024400000000000003440' ::geometry as line, '010100000000000000000022400000000000002840' ::geometry as point, null::int as edge_id, null::int as node_id ; UPDATE t SET edge_id = AddEdge('city_data', line); UPDATE t SET node_id = ST_ModEdgeSplit('city_data', t.edge_id, t.point); SELECT 'robust.1', 'E'||edge_id, 'N'||node_id FROM t; SELECT check_changes(); SELECT 'robust.2', ST_Equals(t.point, ST_EndPoint(e1.geom)), ST_Equals(t.point, ST_StartPoint(e2.geom)) FROM t, city_data.edge e1, city_data.edge e2, city_data.node n WHERE n.node_id = t.node_id AND e1.end_node = n.node_id AND e2.start_node = n.node_id; DROP TABLE t; DROP FUNCTION check_changes(); SELECT DropTopology('city_data'); �������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/polygonize_expected�����������������������������������0000644�0000000�0000000�00000000617�11722777314�024107� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t e1|1 e2|2 e3|3 e4|4 e5|5 e6|6 e7|7 e8|8 e9|9 e10|10 e11|11 4 faces registered 0| 1|BOX(0 -10,10 0) 2|BOX(0 0,10 10) 3|BOX(10 0,20 10) 4|BOX(2 2,5 5) 1|2|1 2|2|3 3|0|2 4|0|2 5|1|0 6|0|3 7|0|3 8|0|3 9|0|1 10|4|2 11|2|4 4 faces registered 0| 1|BOX(0 -10,10 0) 2|BOX(0 0,10 10) 3|BOX(10 0,20 10) 4|BOX(2 2,5 5) 1|2|1 2|2|3 3|0|2 4|0|2 5|1|0 6|0|3 7|0|3 8|0|3 9|0|1 10|4|2 11|2|4 Topology 'tt' dropped �����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/gml.sql�����������������������������������������������0000644�0000000�0000000�00000015124�11722777314�021403� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' ); \i load_topology-4326.sql \i load_features.sql \i more_features.sql --- Puntual single element { -- Output simple puntual features (composed by single topo-element) SELECT feature_name||'-vanilla', topology.AsGML(feature) FROM features.traffic_signs WHERE feature_name IN ('S1', 'S2', 'S3', 'S4' ) ORDER BY feature_name; -- Output again but with no prefix SELECT feature_name||'-noprefix', topology.AsGML(feature, '') FROM features.traffic_signs WHERE feature_name IN ('S1', 'S2', 'S3', 'S4' ) ORDER BY feature_name; -- Output again with custom prefix SELECT feature_name||'-customprefix', topology.AsGML(feature, 'cstm') FROM features.traffic_signs WHERE feature_name IN ('S1', 'S2', 'S3', 'S4' ) ORDER BY feature_name; -- Again with no prefix, no srsDimension (opt+=2) -- and swapped lat/lon (opt+=16) and short CRS SELECT feature_name||'-latlon', topology.AsGML(feature, '', 15, 18) FROM features.traffic_signs WHERE feature_name IN ('S4'); --- } Puntual single-element --- Puntual multi element { SELECT feature_name||'-noprefix', topology.AsGML(feature, '') FROM features.traffic_signs WHERE feature_name IN ('N1N2N3'); --- } Puntual multi-element --- Lineal single element { -- Output simple lineal features (composed by single topo element) SELECT feature_name||'-vanilla', topology.AsGML(feature) FROM features.city_streets WHERE feature_name IN ('R3', 'R4' ) ORDER BY feature_name; -- Output again but with no prefix SELECT feature_name||'-noprefix', topology.AsGML(feature, '') FROM features.city_streets WHERE feature_name IN ('R3', 'R4' ) ORDER BY feature_name; -- Output again with custom prefix SELECT feature_name||'-customprefix', topology.AsGML(feature, 'cstm') FROM features.city_streets WHERE feature_name IN ('R3', 'R4' ) ORDER BY feature_name; --- } Lineal single-element --- Lineal multi-element { -- Output simple lineal features (composed by single topo element) SELECT feature_name||'-vanilla', topology.AsGML(feature) FROM features.city_streets WHERE feature_name IN ('R1', 'R2' ) ORDER BY feature_name; -- Output again but with no prefix SELECT feature_name||'-noprefix', topology.AsGML(feature, '') FROM features.city_streets WHERE feature_name IN ('R1', 'R2' ) ORDER BY feature_name; -- Output again with custom prefix SELECT feature_name||'-customprefix', topology.AsGML(feature, 'cstm') FROM features.city_streets WHERE feature_name IN ('R1', 'R2' ) ORDER BY feature_name; --- } Lineal multi-element --- Areal single-element { -- Output simple lineal features (composed by single topo element) SELECT feature_name||'-vanilla', topology.AsGML(feature) FROM features.land_parcels WHERE feature_name IN ('P4', 'P5' ) ORDER BY feature_name; -- Output again but with no prefix SELECT feature_name||'-noprefix', topology.AsGML(feature, '') FROM features.land_parcels WHERE feature_name IN ('P4', 'P5') ORDER BY feature_name; -- Output again with custom prefix SELECT feature_name||'-customprefix', topology.AsGML(feature, 'cstm') FROM features.land_parcels WHERE feature_name IN ('P4', 'P5') ORDER BY feature_name; --- } Areal single-element --- Areal multi-element { -- Output simple lineal features (composed by single topo element) SELECT feature_name||'-vanilla', topology.AsGML(feature) FROM features.land_parcels WHERE feature_name IN ('P1', 'P2', 'P3' ) ORDER BY feature_name; -- Output again but with no prefix SELECT feature_name||'-noprefix', topology.AsGML(feature, '') FROM features.land_parcels WHERE feature_name IN ('P1', 'P2', 'P3' ) ORDER BY feature_name; -- Output again with custom prefix SELECT feature_name||'-customprefix', topology.AsGML(feature, 'cstm') FROM features.land_parcels WHERE feature_name IN ('P1', 'P2', 'P3' ) ORDER BY feature_name; --- } Areal multi-element --- { Visited table bookkeeping CREATE TABLE visited (element_type int, element_id int); -- R2 visits E4,E5 -- N5,N6,N7 SELECT feature_name||'-visited', topology.AsGML(feature, '', 15, 2, 'visited'::regclass) FROM features.city_streets WHERE feature_name IN ('R2'); -- S1 visits N14 -- S3 visits (N6) SELECT feature_name||'-visited', topology.AsGML(feature, '', 15, 2, 'visited'::regclass) FROM features.traffic_signs WHERE feature_name IN ('S1', 'S3') ORDER BY feature_name; -- R1 visits E9,E10, -- N13,(N14),N15 SELECT feature_name||'-visited', topology.AsGML(feature, '', 15, 2, 'visited'::regclass) FROM features.city_streets WHERE feature_name IN ('R1'); -- N1N6N14 visits N1,(N6),(N14) SELECT feature_name||'-visited', topology.AsGML(feature, '', 15, 2, 'visited'::regclass) FROM features.traffic_signs WHERE feature_name IN ('N1N6N14') ORDER BY feature_name; -- P2 visits F4,F7 -- E7,E17,E18,E13,E20,E19 -- N17,N18,(N13),N10,N9,(N14),N17 -- P1 visits F3,F6 -- F3-> E6,(E19),(E9),(E21) -- F4-> E22,(E9),(E20),E12 -- E6-> N16,(N17) -- E22-> N8,(N15) -- E12-> (N8),(N9) SELECT feature_name||'-visited', topology.AsGML(feature, '', 15, 2, 'visited'::regclass) FROM features.land_parcels WHERE feature_name IN ('P1', 'P2') ORDER BY feature_name DESC; -- F3F4 visits (F3),(F4) SELECT feature_name||'-visited', topology.AsGML(feature, '', 15, 2, 'visited'::regclass) FROM features.land_parcels WHERE feature_name IN ('F3F4') ORDER BY feature_name DESC; -- E7E8 visits: (E7),E8 -- (N17),(N18),N19 SELECT feature_name||'-visited', topology.AsGML(feature, '', 15, 2, 'visited'::regclass) FROM features.city_streets WHERE feature_name IN ('E7E8'); -- Test custom identifier prefix -- P3 visits (E18),(E17),(E8),E15,E16,E14 -- (N10),(N13),(N18),N19,N12,N11 SELECT feature_name||'-visited-idprefix', topology.AsGML(feature, '', 15, 2, 'visited'::regclass, 'cd-') FROM features.land_parcels WHERE feature_name IN ('P3'); --- } Visited table bookkeeping --- { GML2 output -- Output in GML2 SELECT feature_name||'-gml2' as name, topology.AsGML(feature,'',0,2,NULL,'',2) FROM features.city_streets WHERE feature_name IN ('R1', 'R2', 'R3', 'R4' ) UNION SELECT feature_name||'-gml2', topology.AsGML(feature,'',0,2,NULL,'',2) FROM features.traffic_signs WHERE feature_name IN ('S1', 'S2', 'S3', 'S4' ) ORDER BY name; --- } GML2 output SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; DELETE FROM spatial_ref_sys where srid = 4326; DROP TABLE visited; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_query_expected���������������������������������0000644�0000000�0000000�00000003460�11722777314�024400� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT 4 features.big_parcels.the_geom SRID:0 TYPE:MULTIPOLYGON DIMS:2 5 6 features.big_signs.the_geom SRID:0 TYPE:MULTIPOINT DIMS:2 BEGIN P1|1|MULTIPOLYGON(((21 14,21 6,9 6,9 14,9 22,21 22,21 14))) P2|2|MULTIPOLYGON(((35 14,35 6,21 6,21 14,21 22,35 22,35 14))) P3|3|MULTIPOLYGON(((47 14,47 6,35 6,35 14,35 22,47 22,47 14))) P4|4|MULTIPOLYGON(((25 30,17 30,17 40,31 40,31 30,25 30))) P5|5|MULTIPOLYGON(((8 30,3 30,3 38,16 38,16 30,8 30),(4 31,7 31,7 34,4 34,4 31))) F3|6|MULTIPOLYGON(((9 22,21 22,21 14,9 14,9 22))) F6|7|MULTIPOLYGON(((9 14,21 14,21 6,9 6,9 14))) F3F4|8|MULTIPOLYGON(((9 22,21 22,35 22,35 14,21 14,9 14,9 22))) F1|9|MULTIPOLYGON(((8 30,3 30,3 38,16 38,16 30,8 30),(4 31,7 31,7 34,4 34,4 31))) S1|1|MULTIPOINT(21 14) S2|2|MULTIPOINT(35 14) S3|3|MULTIPOINT(57 33) S4|4|MULTIPOINT(20 37) N1N2N3|5|MULTIPOINT(8 30,25 30,25 35) N1N6N14|6|MULTIPOINT(8 30,21 14,57 33) N3N4|7|MULTIPOINT(20 37,25 35) N4|8|MULTIPOINT(20 37) R1|1|MULTILINESTRING((9 14,21 14,35 14)) R2|2|MULTILINESTRING((36 38,38 35,41 34,42 33,45 32,47 28,50 28,52 32,57 33,57 36,59 39,61 38,62 41,47 42,45 40,41 40)) R3|3|MULTILINESTRING((9 35,13 35)) R4|4|MULTILINESTRING((25 30,25 35)) E7E8|5|MULTILINESTRING((21 22,35 22,47 22)) E20E19|6|MULTILINESTRING((21 6,21 14,21 22)) E25|7|MULTILINESTRING((9 35,13 35)) R1a|8|MULTILINESTRING((9 14,21 14,35 14)) S1S2|MULTIPOINT(21 14,35 14) R1R2|MULTILINESTRING((9 14,21 14,35 14),(36 38,38 35,41 34,42 33,45 32,47 28,50 28,52 32,57 33,57 36,59 39,61 38,62 41,47 42,45 40,41 40)) R4|MULTILINESTRING((25 30,25 35)) P1P2|MULTIPOLYGON(((21 6,9 6,9 14,9 22,21 22,35 22,35 14,35 6,21 6))) P3P4|MULTIPOLYGON(((47 14,47 6,35 6,35 14,35 22,47 22,47 14)),((25 30,17 30,17 40,31 40,31 30,25 30))) F3F6|MULTIPOLYGON(((21 14,21 6,9 6,9 14,9 22,21 22,21 14))) COMMIT Topology 'city_data' dropped ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_invalid_expected�������������������������������0000644�0000000�0000000�00000001002�11722777314�024647� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t coincident nodes|1|23 edge crosses node|23|1 edge crosses node|14|27 edge not simple|28| invalid edge|33| edge crosses edge|2|28 edge crosses edge|2|29 edge crosses edge|2|32 edge crosses edge|9|27 edge crosses edge|10|27 edge crosses edge|19|27 edge crosses edge|20|27 edge crosses edge|30|32 edge start node geometry mis-match|30|4 edge end node geometry mis-match|30|3 face without edges|10| face has no rings|10| face within face|11|2 face overlaps face|2|12 COMMIT Topology 'invalid_topology' dropped ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getringedges_expected���������������������������������0000644�0000000�0000000�00000004234�11722777314�024356� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT R1|1|1 R2|1|2 R2|2|3 R2|3|-3 R3|1|3 R3|2|-3 R3|3|2 R4|1|4 R4|2|-5 R4|3|5 R4|4|-4 R5|1|5 R5|2|-4 R5|3|4 R5|4|-5 R6|1|6 R6|2|7 R6|3|8 R6|4|-15 R6|5|-16 R6|6|-14 R6|7|-13 R6|8|-12 R6|9|22 R6|10|21 R7|1|7 R7|2|8 R7|3|-15 R7|4|-16 R7|5|-14 R7|6|-13 R7|7|-12 R7|8|22 R7|9|21 R7|10|6 R8|1|8 R8|2|-15 R8|3|-16 R8|4|-14 R8|5|-13 R8|6|-12 R8|7|22 R8|8|21 R8|9|6 R8|10|7 R9|1|9 R9|2|19 R9|3|-6 R9|4|-21 R10|1|10 R10|2|-20 R10|3|13 R10|4|18 R11|1|11 R11|2|15 R11|3|-8 R11|4|-17 R12|1|12 R12|2|20 R12|3|-9 R12|4|-22 R13|1|13 R13|2|18 R13|3|10 R13|4|-20 R14|1|14 R14|2|16 R14|3|-11 R14|4|-18 R15|1|15 R15|2|-8 R15|3|-17 R15|4|11 R16|1|16 R16|2|-11 R16|3|-18 R16|4|14 R17|1|17 R17|2|-7 R17|3|-19 R17|4|-10 R18|1|18 R18|2|10 R18|3|-20 R18|4|13 R19|1|19 R19|2|-6 R19|3|-21 R19|4|9 R20|1|20 R20|2|-9 R20|3|-22 R20|4|12 R21|1|21 R21|2|6 R21|3|7 R21|4|8 R21|5|-15 R21|6|-16 R21|7|-14 R21|8|-13 R21|9|-12 R21|10|22 R22|1|22 R22|2|21 R22|3|6 R22|4|7 R22|5|8 R22|6|-15 R22|7|-16 R22|8|-14 R22|9|-13 R22|10|-12 R25|1|25 R25|2|-25 R26|1|26 R-1|1|-1 R-2|1|-2 R-3|1|-3 R-3|2|2 R-3|3|3 R-4|1|-4 R-4|2|4 R-4|3|-5 R-4|4|5 R-5|1|-5 R-5|2|5 R-5|3|-4 R-5|4|4 R-6|1|-6 R-6|2|-21 R-6|3|9 R-6|4|19 R-7|1|-7 R-7|2|-19 R-7|3|-10 R-7|4|17 R-8|1|-8 R-8|2|-17 R-8|3|11 R-8|4|15 R-9|1|-9 R-9|2|-22 R-9|3|12 R-9|4|20 R-10|1|-10 R-10|2|17 R-10|3|-7 R-10|4|-19 R-11|1|-11 R-11|2|-18 R-11|3|14 R-11|4|16 R-12|1|-12 R-12|2|22 R-12|3|21 R-12|4|6 R-12|5|7 R-12|6|8 R-12|7|-15 R-12|8|-16 R-12|9|-14 R-12|10|-13 R-13|1|-13 R-13|2|-12 R-13|3|22 R-13|4|21 R-13|5|6 R-13|6|7 R-13|7|8 R-13|8|-15 R-13|9|-16 R-13|10|-14 R-14|1|-14 R-14|2|-13 R-14|3|-12 R-14|4|22 R-14|5|21 R-14|6|6 R-14|7|7 R-14|8|8 R-14|9|-15 R-14|10|-16 R-15|1|-15 R-15|2|-16 R-15|3|-14 R-15|4|-13 R-15|5|-12 R-15|6|22 R-15|7|21 R-15|8|6 R-15|9|7 R-15|10|8 R-16|1|-16 R-16|2|-14 R-16|3|-13 R-16|4|-12 R-16|5|22 R-16|6|21 R-16|7|6 R-16|8|7 R-16|9|8 R-16|10|-15 R-17|1|-17 R-17|2|11 R-17|3|15 R-17|4|-8 R-18|1|-18 R-18|2|14 R-18|3|16 R-18|4|-11 R-19|1|-19 R-19|2|-10 R-19|3|17 R-19|4|-7 R-20|1|-20 R-20|2|13 R-20|3|18 R-20|4|10 R-21|1|-21 R-21|2|9 R-21|3|19 R-21|4|-6 R-22|1|-22 R-22|2|12 R-22|3|20 R-22|4|-9 R-25|1|-25 R-25|2|25 R-26|1|-26 Topology 'city_data' dropped ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_changeedgegeom.sql���������������������������������0000644�0000000�0000000�00000016220�12075541676�024254� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; \i load_topology.sql -- good one SELECT 'T1', topology.ST_ChangeEdgeGeom('city_data', 25, 'LINESTRING(9 35, 11 33, 13 35)'); -- start/end points mismatch SELECT topology.ST_ChangeEdgeGeom('city_data', 25, 'LINESTRING(10 35, 13 35)'); SELECT topology.ST_ChangeEdgeGeom('city_data', 25, 'LINESTRING(9 35, 13 36)'); -- Node crossing SELECT topology.ST_ChangeEdgeGeom('city_data', 3, 'LINESTRING(25 30, 20 36, 20 38, 25 35)'); -- Non-simple edge SELECT topology.ST_ChangeEdgeGeom('city_data', 1, 'LINESTRING(8 30, 9 30, 8 30)'); -- Dimensionally collapsed edge (#1774) SELECT topology.ST_ChangeEdgeGeom('city_data', 1, 'LINESTRING(8 30, 8 30, 8 30)'); -- Non-existent edge (#979) SELECT topology.ST_ChangeEdgeGeom('city_data', 666, 'LINESTRING(25 30, 20 36, 20 38, 25 35)'); -- Test edge crossing SELECT topology.ST_ChangeEdgeGeom('city_data', 25, 'LINESTRING(9 35, 11 40, 13 35)'); -- Test change in presence of edges sharing node (#1428) SELECT 'T2', topology.ST_ChangeEdgeGeom('city_data', 5, 'LINESTRING(41 40, 57 33)'); -- Change to edge crossing old self SELECT 'T3', topology.ST_ChangeEdgeGeom('city_data', 5, 'LINESTRING(41 40, 49 40, 49 34, 57 33)'); -- Change a closed edge (counterclockwise) SELECT 'T4', topology.ST_ChangeEdgeGeom('city_data', 26, 'LINESTRING(4 31, 7 31, 4 33, 4 31)'); -- Check face update SELECT 'T4F', ST_Equals(f.mbr, ST_Envelope(e.geom)) FROM city_data.face f, city_data.edge e WHERE e.edge_id = 26 AND f.face_id = e.left_face; -- Collisions on edge motion path is forbidden: -- get to include a whole isolated edge SELECT topology.ST_ChangeEdgeGeom('city_data', 26, 'LINESTRING(4 31, 7 31, 15 34, 12 37.5, 4 34, 4 31)'); -- This movement doesn't collide: SELECT 'T5', topology.ST_ChangeEdgeGeom('city_data', 3, 'LINESTRING(25 30, 18 35, 18 39, 23 39, 23 36, 20 38, 19 37, 20 35, 25 35)'); -- This movement doesn't collide either: SELECT 'T6', topology.ST_ChangeEdgeGeom('city_data', 3, 'LINESTRING(25 30, 22 38, 25 35)'); -- This movement gets to include an isolated node: SELECT topology.ST_ChangeEdgeGeom('city_data', 3, 'LINESTRING(25 30, 18 35, 18 39, 23 39, 23 36, 20 35, 25 35)'); -- This movement is legit (counterclockwise closed edge) SELECT 'T7', topology.ST_ChangeEdgeGeom('city_data', 2, 'LINESTRING(25 30, 28 39, 16 39, 25 30)'); -- Check face update SELECT 'T7F', ST_Equals(f.mbr, ST_Envelope(e.geom)) FROM city_data.face f, city_data.edge e WHERE e.edge_id = 2 AND f.face_id = e.left_face; -- This movement gets to exclude an isolated node: SELECT topology.ST_ChangeEdgeGeom('city_data', 2, 'LINESTRING(25 30, 28 39, 20 39, 25 30)'); -- This movement should be fine SELECT 'T7.1', topology.ST_ChangeEdgeGeom('city_data', 2, 'LINESTRING(25 30, 28 39, 17 39, 25 30)'); -- Check face update SELECT 'T7F.1', ST_Equals(f.mbr, ST_Envelope(ST_GetFaceGeometry('city_data', f.face_id))) FROM city_data.face f, city_data.edge e WHERE e.edge_id = 2 AND f.face_id = e.left_face; -- Test changing winding direction of closed edge SELECT topology.ST_ChangeEdgeGeom('city_data', 26, ST_Reverse('LINESTRING(4 31, 7 31, 4 34, 4 31)')); -- Maintain winding of closed edge (counterclockwise) SELECT 'T8', topology.ST_ChangeEdgeGeom('city_data', 26, 'LINESTRING(4 31, 4 30.4, 5 30.4, 4 31)'); -- Check face update SELECT 'T8F', ST_Equals(f.mbr, ST_Envelope(ST_GetFaceGeometry('city_data', f.face_id))) FROM city_data.face f, city_data.edge e WHERE e.edge_id = 26 AND f.face_id = e.left_face; -- test changing winding of non-closed edge ring SELECT topology.ST_ChangeEdgeGeom('city_data', 13, 'LINESTRING(21 6, 21 2, 6 2, 6 25, 50 25, 50 2, 35 2, 35 6)'); -- test moving closed edge into another face SELECT 'T9', ST_AddEdgeModFace('city_data', 20, 20, 'LINESTRING(4 31, 7 31, 4 34, 4 31)'); SELECT ST_ChangeEdgeGeom('city_data', 26, -- should fail! 'LINESTRING(4 31,5 31.5,4.6 32,4 31)'); -- test moving non-closed edge into another face SELECT 'T10', ST_AddEdgeModFace('city_data', 17, 18, 'LINESTRING(21 22, 28 27, 35 22)'); SELECT ST_ChangeEdgeGeom('city_data', 28, -- should fail! 'LINESTRING(21 22, 28 18, 35 22)'); -- test enlarging a face MBR by moving an edge SELECT 'T11', ST_ChangeEdgeGeom('city_data', 16, 'LINESTRING(47 6, 51 10, 47 14)'); -- Check face update SELECT 'T11F', ST_Equals(f.mbr, ST_Envelope(ST_GetFaceGeometry('city_data', f.face_id))) FROM city_data.face f, city_data.edge e WHERE e.edge_id = 16 AND f.face_id = e.left_face; -- See http://trac.osgeo.org/postgis/ticket/1775 SELECT 'T12.1', ST_AddIsoNode('city_data', 8, 'POINT(49 10)'); SELECT 'T12', ST_ChangeEdgeGeom('city_data', 16, 'LINESTRING(47 6, 47 14)'); -- See http://trac.osgeo.org/postgis/ticket/2176 SELECT 'T13.1', TopoGeo_AddLineString('city_data', '01020000001D000000E42CEC69873FF2BF9E98F56228E347400EDB16653648F2BF4985B18520E34740E92B4833164DF2BF3A1E335019E34740A94D9CDCEF50F2BF33F9669B1BE347407DAEB6627F59F2BF2CF180B229E34740758E01D9EB5DF2BFD0D556EC2FE34740533F6F2A5261F2BFD717096D39E34740F4893C49BA66F2BFC8073D9B55E34740B8239C16BC68F2BF33A7CB6262E34740AA2B9FE57970F2BF4165FCFB8CE347406DC5FEB27B72F2BFBA4E232D95E34740978BF84ECC7AF2BF24EEB1F4A1E34740E527D53E1D8FF2BF8F8D40BCAEE3474036CD3B4ED191F2BF649291B3B0E34740841266DAFE95F2BF1DE6CB0BB0E34740E3361AC05BA0F2BFB2632310AFE347405C5A0D897BACF2BF72F90FE9B7E3474031D3F6AFACB4F2BF4F232D95B7E347402B137EA99FB7F2BFD656EC2FBBE347402D431CEBE2B6F2BF551344DD07E4474011E4A08499B6F2BF15E3FC4D28E447406519E25817B7F2BF63EE5A423EE447409DD7D825AAB7F2BFE3FC4D2844E447405969520ABABDF2BF2384471B47E44740A31EA2D11DC4F2BFB1F9B83654E447400473F4F8BDCDF2BFEA5BE67459E447405070B1A206D3F2BFF19D98F562E4474062670A9DD7D8F2BF0E4FAF9465E447407FF6234564D8F2BFF1BA7EC16EE44740' ); SELECT 'T13.2', ST_ChangeEdgeGeom('city_data', 29, '010200000008000000E42CEC69873FF2BF9E98F56228E34740E92B4833164DF2BF3B1E335019E34740768E01D9EB5DF2BFD0D556EC2FE347406EC5FEB27B72F2BFBA4E232D95E34740988BF84ECC7AF2BF25EEB1F4A1E347402C137EA99FB7F2BFD656EC2FBBE347409DD7D825AAB7F2BFE4FC4D2844E447407FF6234564D8F2BFF1BA7EC16EE44740' ); -- Now add an obstacle and try to change back (should fail) SELECT 'T13.3', TopoGeo_AddPoint('city_data', 'POINT(-1.1697 47.7825)'::geometry); SELECT 'T13.4', ST_ChangeEdgeGeom('city_data', 29, '01020000001D000000E42CEC69873FF2BF9E98F56228E347400EDB16653648F2BF4985B18520E34740E92B4833164DF2BF3A1E335019E34740A94D9CDCEF50F2BF33F9669B1BE347407DAEB6627F59F2BF2CF180B229E34740758E01D9EB5DF2BFD0D556EC2FE34740533F6F2A5261F2BFD717096D39E34740F4893C49BA66F2BFC8073D9B55E34740B8239C16BC68F2BF33A7CB6262E34740AA2B9FE57970F2BF4165FCFB8CE347406DC5FEB27B72F2BFBA4E232D95E34740978BF84ECC7AF2BF24EEB1F4A1E34740E527D53E1D8FF2BF8F8D40BCAEE3474036CD3B4ED191F2BF649291B3B0E34740841266DAFE95F2BF1DE6CB0BB0E34740E3361AC05BA0F2BFB2632310AFE347405C5A0D897BACF2BF72F90FE9B7E3474031D3F6AFACB4F2BF4F232D95B7E347402B137EA99FB7F2BFD656EC2FBBE347402D431CEBE2B6F2BF551344DD07E4474011E4A08499B6F2BF15E3FC4D28E447406519E25817B7F2BF63EE5A423EE447409DD7D825AAB7F2BFE3FC4D2844E447405969520ABABDF2BF2384471B47E44740A31EA2D11DC4F2BFB1F9B83654E447400473F4F8BDCDF2BFEA5BE67459E447405070B1A206D3F2BFF19D98F562E4474062670A9DD7D8F2BF0E4FAF9465E447407FF6234564D8F2BFF1BA7EC16EE44740' ); -- TODO: test changing some clockwise closed edges.. SELECT topology.DropTopology('city_data'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addtopogeometrycolumn_expected������������������������0000644�0000000�0000000�00000001076�11722777314�026334� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t ERROR: relation "public.feature" does not exist ERROR: Layer type must be one of POINT,LINE,POLYGON,COLLECTION ERROR: Child layer 0 does not exist in topology "tt" T1|1 T2|2 T3|3 T4|4 T5|5 T6|6 T7|7 T8|8 T9|9 T10|10 T11|11 T12|12 1|public|feature|tg|1|0| 2|public|feature|tg2|2|0| 3|public|feature|tg3|3|0| 4|public|feature|tg4|4|0| 5|public|feature|tg5|1|0| 6|public|feature|tg6|2|0| 7|public|feature|tg7|3|0| 8|public|feature|tg8|4|0| 9|public|feature|tg9|1|0| 10|public|feature|tg10|2|0| 11|public|feature|tg11|3|0| 12|public|feature|tg12|4|0| Topology 'tt' dropped ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getringedges.sql��������������������������������������0000644�0000000�0000000�00000000440�11722777314�023266� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; \i load_topology.sql SELECT 'R'||edge_id, (topology.GetRingEdges('city_data', edge_id)).* FROM city_data.edge; SELECT 'R-'||edge_id, (topology.GetRingEdges('city_data', -edge_id)).* FROM city_data.edge; SELECT topology.DropTopology('city_data'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_createtopogeo.sql����������������������������������0000644�0000000�0000000�00000024727�12315345724�024176� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; TRUNCATE spatial_ref_sys; INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' ); -- Invalid topologies select topology.st_createtopogeo('', 'GEOMETRYCOLLECTION(POINT(0 0))'); select topology.st_createtopogeo('t', 'GEOMETRYCOLLECTION(POINT(0 0))'); select topology.st_createtopogeo(null, 'GEOMETRYCOLLECTION(POINT(0 0))'); CREATE function print_isolated_nodes(lbl text) RETURNS table(olbl text, msg text) AS $$ DECLARE sql text; BEGIN sql := 'SELECT ' || quote_literal(lbl) || '::text, count(node_id) || '' isolated nodes in face '' || containing_face FROM t.node WHERE containing_face IS NOT NULL GROUP by containing_face ORDER BY count(node_id), containing_face'; RETURN QUERY EXECUTE sql; END; $$ LANGUAGE 'plpgsql'; CREATE function print_elements_count(lbl text) RETURNS table(olbl text, nodes text, edges text, faces text) AS $$ DECLARE sql text; BEGIN sql := 'select ' || quote_literal(lbl) || '::text, ( select count(node_id) || '' nodes'' from t.node ) as nodes, ( select count(edge_id) || '' edges'' from t.edge ) as edges, ( select count(face_id) || '' faces'' from t.face where face_id <> 0 ) as faces'; RETURN QUERY EXECUTE sql; END; $$ LANGUAGE 'plpgsql'; -- Invalid geometries select null from ( select topology.CreateTopology('t', 4326) > 0 ) as ct; select topology.st_createtopogeo('t', null); -- Invalid geometry select 'invalid_srid', topology.st_createtopogeo('t', 'POINT(0 0)'); select null from ( select topology.DropTopology('t') ) as dt; -- Single point select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T1', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'POINT(0 0)' ::geometry as g ) as i ) as j; select * from print_elements_count('T1'); select null from ( select topology.DropTopology('t') ) as dt; -- Single line select null from ( select topology.CreateTopology('t', 4326) > 0 ) as ct; select 'T2', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'SRID=4326;LINESTRING(0 0, 8 -40)' ::geometry as g ) as i ) as j; select * from print_elements_count('T2'); select null from ( select topology.DropTopology('t') ) as dt; -- Single polygon with no holes select null from ( select topology.CreateTopology('t', 4326) > 0 ) as ct; select 'T3', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'SRID=4326;POLYGON((0 0, 8 -40, 70 34, 0 0))' ::geometry as g ) as i ) as j; select * from print_elements_count('T3'); select null from ( select topology.DropTopology('t') ) as dt; -- Single polygon with an hole select null from ( select topology.CreateTopology('t', 4326) > 0 ) as ct; select 'T4', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'SRID=4326;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 8 9, 4 2, 5 5))' ::geometry as g ) as i ) as j; select * from print_elements_count('T4'); select null from ( select topology.DropTopology('t') ) as dt; -- Multi point with duplicated points select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T5', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'MULTIPOINT(0 0, 5 5, 0 0, 10 -2, 5 5, 0 0)' ::geometry as g ) as i ) as j; select * from print_elements_count('T5'); select null from ( select topology.DropTopology('t') ) as dt; -- Multi line with duplicated lines select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T6', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'MULTILINESTRING((0 0, 10 0),(10 0, 0 0))' ::geometry as g ) as i ) as j; select * from print_elements_count('T6'); select * from print_isolated_nodes('T6'); select null from ( select topology.DropTopology('t') ) as dt; -- Multi line with crossing lines select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T7', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'MULTILINESTRING((0 0, 10 0),(5 -5, 6 5))' ::geometry as g ) as i ) as j; select * from print_elements_count('T7'); select * from print_isolated_nodes('T7'); select null from ( select topology.DropTopology('t') ) as dt; -- Multi polygon with duplicated polygons select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T8', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'MULTIPOLYGON( ((0 0,10 0,10 10,0 10,0 0)), ((0 0,0 10,10 10,10 0,0 0)) )' ::geometry as g ) as i ) as j; select * from print_elements_count('T8'); select * from print_isolated_nodes('T8'); select null from ( select topology.DropTopology('t') ) as dt; -- Multi polygon with overlapping polygons select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T9', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'MULTIPOLYGON( ((0 0,10 0,10 10,0 10,0 0)), ((5 5,5 15,15 15,15 5,5 5)) )' ::geometry as g ) as i ) as j; select * from print_elements_count('T9'); select * from print_isolated_nodes('T9'); select null from ( select topology.DropTopology('t') ) as dt; -- Multi polygon with touching polygons select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T10', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'MULTIPOLYGON( ((0 0,5 10,10 0,0 0)), ((0 20,5 10,10 20,0 20)) )' ::geometry as g ) as i ) as j; select * from print_elements_count('T10'); select * from print_isolated_nodes('T10'); select null from ( select topology.DropTopology('t') ) as dt; -- Collection of line and point within it select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T11', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'GEOMETRYCOLLECTION(LINESTRING(0 0, 10 0),POINT(5 0))' ::geometry as g ) as i ) as j; select * from print_elements_count('T11'); select * from print_isolated_nodes('T11'); select null from ( select topology.DropTopology('t') ) as dt; -- Collection of line and points on line's endpoint select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T12', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'GEOMETRYCOLLECTION(LINESTRING(0 0, 10 0),POINT(0 0),POINT(10 0))' ::geometry as g ) as i ) as j; select * from print_elements_count('T12'); select * from print_isolated_nodes('T12'); select null from ( select topology.DropTopology('t') ) as dt; -- Collection of line, points and polygons with various crossing and -- overlaps select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T13', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'GEOMETRYCOLLECTION( MULTIPOLYGON( ((0 0,10 0,10 10,0 10,0 0)), ((5 5,5 15,15 15,15 5,5 5), (10 10, 12 10, 10 12, 10 10)) ), LINESTRING(0 0, 20 0), MULTIPOINT(0 0,10 0,5 0), MULTILINESTRING((0 0, 10 0),(10 0, 15 5)), POINT(5 0), POINT(10.5 10.5), POINT(100 500) )' ::geometry as g ) as i ) as j; select * from print_elements_count('T13'); select * from print_isolated_nodes('T13'); select null from ( select topology.DropTopology('t') ) as dt; -- Collection of all geometries which can be derivated by the -- well-known city_data topology select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T14', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'GEOMETRYCOLLECTION(LINESTRING(8 30,16 30,16 38,3 38,3 30,8 30),POINT(4 31),LINESTRING(4 31,7 31,7 34,4 34,4 31),POINT(8 30),POINT(9 6),LINESTRING(9 6,9 14),LINESTRING(9 6,21 6),POLYGON((9 14,21 14,21 6,9 6,9 14)),POINT(9 14),LINESTRING(9 14,9 22),LINESTRING(9 14,21 14),POLYGON((9 22,21 22,21 14,9 14,9 22)),POINT(9 22),LINESTRING(9 22,21 22),POINT(9 35),LINESTRING(9 35,13 35),POINT(13 35),POLYGON((25 30,17 30,17 40,31 40,31 30,25 30)),POINT(20 37),POINT(21 6),LINESTRING(21 6,21 14),LINESTRING(21 6,35 6),POLYGON((21 14,35 14,35 6,21 6,21 14)),POINT(21 14),LINESTRING(21 14,21 22),LINESTRING(35 14,21 14),POLYGON((21 22,35 22,35 14,21 14,21 22)),POINT(21 22),LINESTRING(21 22,35 22),POINT(25 30),LINESTRING(25 30,25 35),POINT(25 35),POINT(35 6),LINESTRING(35 6,35 14),LINESTRING(35 6,47 6),POLYGON((35 14,47 14,47 6,35 6,35 14)),POINT(35 14),LINESTRING(35 14,35 22),LINESTRING(35 14,47 14),POLYGON((35 22,47 22,47 14,35 14,35 22)),POINT(35 22),LINESTRING(35 22,47 22),LINESTRING(36 38,38 35,41 34,42 33,45 32,47 28,50 28,52 32,57 33),POINT(36 38),LINESTRING(41 40,45 40,47 42,62 41,61 38,59 39,57 36,57 33),POINT(41 40),POINT(47 6),LINESTRING(47 6,47 14),POINT(47 14),LINESTRING(47 14,47 22),POINT(47 22),POINT(57 33))' ::geometry as g ) as i ) as j; select * from print_elements_count('T14'); select * from print_isolated_nodes('T14'); select null from ( select topology.DropTopology('t') ) as dt; -- See ticket #1261 select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T15', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'GEOMETRYCOLLECTION(LINESTRING(-5 -2,0 0), LINESTRING(0 0,10 10),LINESTRING(0 0,5 2,10 10), LINESTRING(10 10,12 10)) '::geometry as g ) as i ) as j; select * from print_elements_count('T15'); select * from print_isolated_nodes('T15'); select null from ( select topology.DropTopology('t') ) as dt; -- Three mergeable lines select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T16', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT 'GEOMETRYCOLLECTION(LINESTRING(0 0, 10 0),LINESTRING(0 3, 20 4),LINESTRING(10 0, 20 4))' ::geometry as g ) as i ) as j; select * from print_elements_count('T16'); select * from print_isolated_nodes('T16'); select null from ( select topology.DropTopology('t') ) as dt; -- Very close-by nodes created by intersection -- See ticket #1284 select null from ( select topology.CreateTopology('t') > 0 ) as ct; select 'T17', st_asewkt(g) FROM ( SELECT g, topology.st_createtopogeo('t', g) FROM ( SELECT ' MULTILINESTRING( ( 832709.937 816560.25, 832705.813 816470.25, 832661.937 816561.875 ), ( 832705.812 816470.25, 832709.937 816560.25 ), ( 832661.938 816561.875, 832705.813 816470.25 )) '::geometry as g ) as i ) as j; select * from print_elements_count('T17'); select * from print_isolated_nodes('T17'); select null from ( select topology.DropTopology('t') ) as dt; -- clean up DELETE FROM spatial_ref_sys where srid = 4326; DROP FUNCTION print_isolated_nodes(text); DROP FUNCTION print_elements_count(text); �����������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeometry_type_expected����������������������������0000644�0000000�0000000�00000001307�11722777314�025503� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT 4 features.big_parcels.the_geom SRID:0 TYPE:MULTIPOLYGON DIMS:2 5 6 features.big_signs.the_geom SRID:0 TYPE:MULTIPOINT DIMS:2 GeometryType(traffic_signs)|MULTIPOINT ST_GeometryType(traffic_signs)|ST_MultiPoint GeometryType(city_streets)|MULTILINESTRING ST_GeometryType(city_streets)|ST_MultiLinestring GeometryType(land_parcels)|MULTIPOLYGON ST_GeometryType(land_parcels)|ST_MultiPolygon GeometryType(big_signs)|MULTIPOINT ST_GeometryType(big_signs)|ST_MultiPoint GeometryType(big_streets)|MULTILINESTRING ST_GeometryType(big_streets)|ST_MultiLinestring GeometryType(big_parcels)|MULTIPOLYGON ST_GeometryType(big_parcels)|ST_MultiPolygon Topology 'city_data' dropped �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addface_expected��������������������������������������0000644�0000000�0000000�00000002347�11722777314�023261� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t ERROR: Found no edges on the polygon boundary e1|1 e2|2 e3|3 e4|4 e5|5 e6|6 e7|7 e8|8 f1|1 f1*|1 f2|2 0| 1|BOX(0 0,10 10) 2|BOX(10 0,20 10) 1|1|0 2|1|2 3|0|1 4|0|1 5|0|0 6|0|2 7|0|2 8|0|2 f1-force|3 0| 1|BOX(0 0,10 10) 2|BOX(10 0,20 10) 3|BOX(0 0,10 10) 1|3|0 2|3|2 3|0|3 4|0|3 5|0|0 6|0|2 7|0|2 8|0|2 Topology 'tt' dropped t MiX-e1|1 MiX-e2|2 MiX-e3|3 MiX-e4|4 MiX-f1|1 Topology 'Ul' dropped t t2.e1|1 t2.e2|2 t2.e3|3 t2.e4|4 t2.e5|5 t2.e6|6 t2.e7|7 t2.e8|8 t2.e9|9 t2.e10|10 t2.e11|11 t2.f1|1 t2.f2|2 t2.f3|3 t2.f4|4 t2.f5|5 ERROR: Polygon boundary is not fully defined by existing edges at or near point POINT(12 5) 0| 1|BOX(0 0,10 10) 2|BOX(10 0,20 10) 3|BOX(1 1,2 2) 4|BOX(3 1,4 2) 5|BOX(12 2,14 4) 1|1|0 2|1|2 3|0|1 4|0|1 5|0|2 6|0|2 7|0|2 8|1|3 9|4|1 10|5|2 11|2|5 Topology 't2' dropped t t3.e1|1 t3.e2|2 t3.e3|3 t3.f1|1 t3.f2|2 0| 1|BOX(0 0,10 10) 2|BOX(0 0,5 10) 1|0|2 2|1|2 3|0|1 Topology 't3' dropped t N1 E1 E2 E3 E4 E5 E6 E7 F1 E1|1|0 E2|1|0 E3|1|0 E4|0|1 E5|1|1 E6|1|1 E7|1|1 N1|1 N2| N3| N4| N5| N6| N7| Topology 't4' dropped #1302|t #1302|E1 #1302|E2 #1302|F1 #1302|E1|L0|R1 #1302|E2|L0|R1 #1302|Topology 'tt' dropped #1383|t #1383|E1 #1383|E2 #1383|E3 #1383|F1 #1383|E1|L0|R1 #1383|E2|L0|R1 #1383|E3|L0|R1 #1383|Topology 'tt' dropped �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_changeedgegeom_expected����������������������������0000644�0000000�0000000�00000002241�12075541676�025335� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT T1|Edge 25 changed ERROR: SQL/MM Spatial exception - start node not geometry start point. ERROR: SQL/MM Spatial exception - end node not geometry end point. ERROR: SQL/MM Spatial exception - geometry crosses a node ERROR: SQL/MM Spatial exception - curve not simple ERROR: Invalid edge (no two distinct vertices exist) ERROR: SQL/MM Spatial exception - non-existent edge 666 ERROR: SQL/MM Spatial exception - geometry crosses edge 1 T2|Edge 5 changed T3|Edge 5 changed T4|Edge 26 changed T4F|t ERROR: Edge motion collision at POINT(9 35) T5|Edge 3 changed T6|Edge 3 changed ERROR: Edge motion collision at POINT(20 37) T7|Edge 2 changed T7F|t ERROR: Edge motion collision at POINT(20 37) T7.1|Edge 2 changed T7F.1|t ERROR: Edge twist at node POINT(4 31) T8|Edge 26 changed T8F|t ERROR: Edge motion collision at POINT(9 6) T9|27 ERROR: Edge changed disposition around start node 20 T10|28 ERROR: Edge changed disposition around start node 17 T11|Edge 16 changed T11F|t T12.1|23 ERROR: Edge motion collision at POINT(49 10) T13.1|29 T13.2|Edge 29 changed T13.3|26 ERROR: Edge motion collision at POINT(-1.1697 47.7825) Topology 'city_data' dropped ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addedge_expected��������������������������������������0000644�0000000�0000000�00000002755�11722777314�023272� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t e1|1 e*1|1 ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(1 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(1 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(1 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(0 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(0 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(5 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(5 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(0 0) ERROR: Edge intersects (not on endpoints) with existing edge 1 at or near point POINT(5 0) e2|2 e3|3 e4|4 e5|5 e6|6 #770-1|7 #770-2|8 ERROR: Edge intersects (not on endpoints) with existing edge 7 at or near point POINT(8 10) ERROR: Edge intersects (not on endpoints) with existing edge 7 at or near point POINT(8 10) ERROR: Edge intersects (not on endpoints) with existing edge 7 at or near point POINT(10 12) #770-1*|7 1|0|0|-1|1|LINESTRING(0 0,8 0) 2|0|0|-2|2|LINESTRING(8 0,8 10) 3|0|0|-3|3|LINESTRING(0 0,0 10) 4|0|0|-4|4|LINESTRING(8 10,0 10) 5|0|0|-5|5|LINESTRING(8 -10,0 -10) 6|0|0|-6|6|LINESTRING(8 -10,4 -20,0 -10) 7|0|0|-7|7|LINESTRING(8 10,10 10,10 12,8 10) 8|0|0|-8|8|LINESTRING(8 10,9 8,10 9,8 10) Topology 'tt' dropped t MiX|1 Topology 'Ul' dropped �������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addisoedge_expected��������������������������������0000644�0000000�0000000�00000001627�11722777314�024510� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t N1 N2 N3 N4 N5 N6 N7 ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid curve ERROR: SQL/MM Spatial exception - curve not simple ERROR: SQL/MM Spatial exception - non-existent node ERROR: SQL/MM Spatial exception - end node not geometry end point. ERROR: SQL/MM Spatial exception - start node not geometry start point. ERROR: SQL/MM Spatial exception - geometry crosses a node E1 E2 N1| N2| N3|0 N4| N5| N6|0 N7| ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - not isolated node ERROR: Closed edges would not be isolated, try ST_AddEdgeNewFaces ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - geometry intersects an edge Topology 'tt' dropped ���������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addedgenewfaces_expected���������������������������0000644�0000000�0000000�00000011335�12032754123�025472� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: SQL/MM Spatial exception - start node not geometry start point. ERROR: SQL/MM Spatial exception - end node not geometry end point. ERROR: SQL/MM Spatial exception - end node not geometry end point. ERROR: SQL/MM Spatial exception - geometry crosses a node ERROR: SQL/MM Spatial exception - non-existent node ERROR: SQL/MM Spatial exception - non-existent node ERROR: SQL/MM Spatial exception - curve not simple ERROR: Invalid edge (no two distinct vertices exist) ERROR: Invalid edge (no two distinct vertices exist) ERROR: SQL/MM Spatial exception - coincident edge 8 ERROR: SQL/MM Spatial exception - geometry crosses edge 5 ERROR: SQL/MM Spatial exception - geometry crosses edge 4 ERROR: Spatial exception - geometry intersects edge 4 L1 L2 T1|E7|8|-19|0|11 T1|E10|-20|17|7|10 T1|E17|-27|11|10|5 T1|E19|-6|27|3|11 T1|E27|-7|-10|11|10 T2|E8|-15|-28|0|12 T2|E11|28|-18|13|8 T2|E15|-8|-16|12|0 T2|E17|-27|11|10|13 T2|E28|-17|15|13|12 T3|E11|28|-18|13|14 T3|E14|16|-13|15|0 T3|E16|29|-14|15|0 T3|E18|10|-29|7|14 T3|E29|14|-11|15|14 T4|E10|-20|17|17|10 T4|E13|18|-12|16|0 T4|E18|-30|-29|16|14 T4|E20|-9|30|6|17 T4|E30|10|13|17|16 T5|E9|19|-22|3|18 T5|E12|-31|22|18|0 T5|E20|31|30|19|17 T5|E31|20|-9|19|18 T6|E9|19|-32|3|20 T6|E12|-31|22|20|0 T6|E22|21|32|0|21 T6|E32|-22|12|21|20 T7|E6|7|-33|0|22 T7|E19|33|27|23|11 T7|E21|6|9|0|23 T7|E33|-21|-6|23|22 T8|E9|-34|-32|24|20 T8|E19|33|27|25|11 T8|E21|6|34|0|25 T8|E34|19|9|25|24 T9|E12|-31|22|20|0 T9|E13|18|-35|16|0 T9|E35|35|-12|26|0 T10|E13|18|-35|16|0 T10|E14|16|36|15|0 T10|E36|-13|-36|0|27 T11|E21|6|34|0|25 T11|E22|37|32|0|21 T11|E37|21|-37|0|28 T12|E1|1|-38|1|0 T12|E38|38|-1|29|0 T13|E2|3|39|2|0 T13|E39|-2|-39|0|30 T14|E1|-40|-38|1|0 T14|E40|1|40|1|1 N23| T15|E1|-40|41|1|0 T15|E38|38|-1|29|0 T15|E41|-41|-38|0|0 N24| T16|E2|3|39|32|0 T16|E3|-3|2|32|32 T16|E42|42|-42|32|31 N4| T17|E43|-43|43|0|0 N25| N26| T18|E4|-5|4|33|33 T18|E5|-4|5|33|33 T18|E43|-44|44|33|0 T18|E44|-43|43|0|33 T19|E12|-31|-45|20|34 T19|E22|37|32|0|21 T19|E35|35|45|26|0 T19|E45|22|-12|0|34 T20|E14|16|46|15|35 T20|E16|29|-46|15|0 T20|E36|-13|-36|0|27 T20|E46|-14|36|35|0 T21|E16|29|-47|15|0 T21|E36|-13|-36|0|27 T21|E46|-14|47|35|36 T21|E47|-46|36|36|0 T22-|N27|32 T22-|N28|32 T22-|N29|32 T22|E2|3|39|38|0 T22|E3|48|2|38|38 T22|E42|42|-42|38|31 T22|E48|-3|-48|38|37 T22|N27|38 T22|N28|37 T22|N29|38 T23|E2|3|39|39|0 T23|E3|-49|49|39|40 T23|E39|-2|-39|0|30 T23|E42|42|-42|39|31 T23|E48|-3|-48|40|37 T23|E49|48|2|40|39 T23|N27|39 T23|N28|37 T23|N29|40 T24-|N30|39 T24-|N31|39 T24-|N32|31 T24-|N33|39 T24-|N34|39 T24|E2|3|39|42|0 T24|E3|-49|49|42|40 T24|E42|42|-42|41|31 T24|E49|48|2|40|42 T24|E50|50|-50|42|41 T24|N27|42 T24|N30| T24|N31|42 T24|N32|31 T24|N33|41 T24|N34|42 T25|E2|3|39|43|0 T25|E3|-49|49|43|40 T25|E42|42|-42|41|31 T25|E49|48|2|40|43 T25|E50|50|-50|44|41 T25|E51|51|-51|44|43 T25|N27|43 T25|N31| T25|N32|31 T25|N33|41 T25|N34|44 T26|E4|-52|52|45|46 T26|E5|-4|5|46|46 T26|E43|-44|44|46|0 T26|E44|-43|43|0|46 T26|E52|-5|4|46|45 T27|E4|-52|53|45|48 T27|E5|-4|5|48|48 T27|E43|-44|44|48|0 T27|E44|-43|43|0|48 T27|E52|-53|4|47|45 T27|E53|-5|52|48|47 T28|E4|-52|53|45|50 T28|E5|-4|54|50|50 T28|E43|-44|44|50|0 T28|E44|-43|43|0|50 T28|E52|-53|4|47|45 T28|E53|-5|52|50|47 T28|E54|5|-54|50|49 F3,F4|{3:10,3:11,3:22,3:24,3:25} F5,N4|{1:4,3:12,3:13} F0| F1|POLYGON((3 30,3 38,16 38,16 30,3 30)) F9|POLYGON((4 31,4 34,7 34,7 31,4 31)) F10|POLYGON((21 14,21 22,35 22,35 14,21 14)) F11|POLYGON((21 14,21 22,35 22,35 14,21 14)) F12|POLYGON((35 14,35 22,47 22,47 14,35 14)) F13|POLYGON((35 14,35 22,47 22,47 14,35 14)) F14|POLYGON((35 6,35 14,47 14,47 6,35 6)) F15|POLYGON((35 6,35 14,47 14,47 6,35 6)) F16|POLYGON((21 6,21 14,35 14,35 6,21 6)) F17|POLYGON((21 6,21 14,35 14,35 6,21 6)) F19|POLYGON((19 6,19 14,21 14,21 6,19 6)) F20|POLYGON((9 6,9 14,21 14,21 6,9 6)) F21|POLYGON((9 6,9 14,11 14,11 6,9 6)) F22|POLYGON((9 20,9 22,21 22,21 20,9 20)) F24|POLYGON((9 14,9 16,21 16,21 14,9 14)) F25|POLYGON((9 14,9 22,21 22,21 14,9 14)) F26|POLYGON((18 0,18 6,24 6,24 0,18 0)) F27|POLYGON((32 0,32 6,38 6,38 0,32 0)) F28|POLYGON((3 11,3 17,9 17,9 11,3 11)) F29|POLYGON((5 27,5 30,11 30,11 27,5 27)) F30|POLYGON((22 27,22 30,28 30,28 27,22 27)) F31|POLYGON((20 34,20 37,23 37,23 34,20 34)) F34|POLYGON((9 0,9 6,21 6,21 0,9 0)) F35|POLYGON((35 0,35 6,47 6,47 0,35 0)) F36|POLYGON((35 -4,35 6,47 6,47 -4,35 -4)) F37|POLYGON((25 34,25 35,27 35,27 34,25 34)) F40|POLYGON((25 30,25 37,29 37,29 30,25 30)) F41|POLYGON((19.5 32.5,19.5 37.5,24.5 37.5,24.5 32.5,19.5 32.5)) F43|POLYGON((17 30,17 40,31 40,31 30,17 30)) F44|POLYGON((19 31,19 38,26 38,26 31,19 31)) F45|POLYGON((36 28,36 38,57 38,57 28,36 28)) F47|POLYGON((36 33,36 38,57 38,57 33,36 33)) F49|POLYGON((38 40,38 43,41 43,41 40,38 40)) F50|POLYGON((35 25,35 45,63 45,63 25,35 25)) Topology 'city_data' dropped ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getnodebypoint_expected�������������������������������0000644�0000000�0000000�00000000123�11722777314�024732� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t t t t t t 0 5 5 t ERROR: Two or more nodes found Topology 'schema_topo' dropped ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_invalid.sql������������������������������������0000644�0000000�0000000�00000000174�11722777314�023575� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \i invalid_topology.sql -- clean up SELECT topology.DropTopology('invalid_topology'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_remedgenewface.sql���������������������������������0000644�0000000�0000000�00000036717�12057075162�024300� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' ); -- Import city_data \i load_topology-4326.sql -- Utility functions for the test { CREATE TEMP TABLE orig_node_summary(node_id integer, containing_face integer); CREATE OR REPLACE FUNCTION save_nodes() RETURNS VOID AS $$ TRUNCATE TABLE orig_node_summary; INSERT INTO orig_node_summary SELECT node_id, containing_face FROM city_data.node; $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION check_nodes(lbl text) RETURNS TABLE (l text, o text, node_id int, containing_face int) AS $$ DECLARE sql1 text; sql2 text; q text; BEGIN sql1 := 'node_id, containing_face FROM city_data.node'; sql2 := 'node_id, containing_face FROM orig_node_summary'; q := '(' || 'SELECT ' || quote_literal(lbl) || ',''+'' as op,' || sql1 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''+'',' || sql2 || ') UNION ( ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql2 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql1 || ') ORDER BY node_id, op'; RAISE DEBUG '%', q; RETURN QUERY EXECUTE q; END $$ LANGUAGE 'plpgsql'; CREATE TEMP TABLE orig_edge_summary (edge_id integer, next_left_edge integer, next_right_edge integer, left_face integer, right_face integer); CREATE OR REPLACE FUNCTION save_edges() RETURNS VOID AS $$ TRUNCATE orig_edge_summary; INSERT INTO orig_edge_summary SELECT edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge_data; $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION check_edges(lbl text) RETURNS TABLE (l text, o text, edge_id int, next_left_edge int, next_right_edge int, left_face int, right_face int) AS $$ DECLARE rec RECORD; sql1 text; sql2 text; q text; BEGIN sql1 := 'edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge_data'; sql2 := 'edge_id, next_left_edge, next_right_edge, left_face, right_face FROM orig_edge_summary'; q := '(' || 'SELECT ' || quote_literal(lbl) || ',''+'' as op,' || sql1 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''+'',' || sql2 || ') UNION ( ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql2 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql1 || ') order by edge_id, op'; RAISE DEBUG '%', q; RETURN QUERY EXECUTE q; END $$ LANGUAGE 'plpgsql'; CREATE TEMP TABLE orig_face_summary(face_id integer, mbr geometry); CREATE OR REPLACE FUNCTION save_faces() RETURNS VOID AS $$ TRUNCATE orig_face_summary; INSERT INTO orig_face_summary SELECT face_id, mbr FROM city_data.face; $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION check_faces(lbl text) RETURNS TABLE (l text, o text, face_id int, mbr text) AS $$ DECLARE sql1 text; sql2 text; q text; BEGIN sql1 := 'face_id, ST_AsEWKT(mbr) FROM city_data.face'; sql2 := 'face_id, ST_AsEWKT(mbr) FROM orig_face_summary'; q := '(' || 'SELECT ' || quote_literal(lbl) || ',''+'' as op,' || sql1 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''+'',' || sql2 || ') UNION ( ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql2 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql1 || ') ORDER BY face_id, op'; RAISE DEBUG '%', q; RETURN QUERY EXECUTE q; END $$ language 'plpgsql'; -- } -- Save current state SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Bogus calls -- { SELECT topology.ST_RemEdgeNewFace('city_data', null); SELECT topology.ST_RemEdgeNewFace(null, 1); SELECT topology.ST_RemEdgeNewFace('', 1); SELECT topology.ST_RemEdgeNewFace('city_data', 0); -- non-existent SELECT topology.ST_RemEdgeNewFace('city_data', 143); -- non-existent SELECT * FROM check_nodes('bogus'); SELECT * FROM check_edges('bogus'); SELECT * FROM check_faces('bogus'); -- } -- Remove isolated edge SELECT 'RN(25)', topology.ST_RemEdgeNewFace('city_data', 25); SELECT * FROM check_nodes('RN(25)/nodes'); SELECT * FROM check_edges('RN(25)/edges'); SELECT * FROM check_faces('RN(25)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Remove edge not forming a ring SELECT 'RN(4)', topology.ST_RemEdgeNewFace('city_data', 4); SELECT * FROM check_nodes('RN(4)/nodes'); SELECT * FROM check_edges('RN(4)/edges'); SELECT * FROM check_faces('RN(4)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 1 and 9 -- should drop them and create a new face -- New face has the same mbr as old one SELECT 'RN(26)', topology.ST_RemEdgeNewFace('city_data', 26); SELECT * FROM check_nodes('RN(26)/nodes'); SELECT * FROM check_edges('RN(26)/edges'); SELECT * FROM check_faces('RN(26)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 3 and 6 -- should drop them and create a new face -- New face has a mbr being the union of the dropped faces SELECT 'RN(9)', topology.ST_RemEdgeNewFace('city_data', 9); SELECT * FROM check_nodes('RN(9)/nodes'); SELECT * FROM check_edges('RN(9)/edges'); SELECT * FROM check_faces('RN(9)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 4 and 11 -- should drop them and create a new face -- New face has a mbr being the union of the dropped faces SELECT 'RN(19)', topology.ST_RemEdgeNewFace('city_data', 19); SELECT * FROM check_nodes('RN(19)/nodes'); SELECT * FROM check_edges('RN(19)/edges'); SELECT * FROM check_faces('RN(19)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 7 and 12 -- should drop them and create a new face -- New face has a mbr equal to previous face 12. -- This healing leaves edge 20 dangling SELECT 'RN(10)', topology.ST_RemEdgeNewFace('city_data', 10); SELECT * FROM check_nodes('RN(10)/nodes'); SELECT * FROM check_edges('RN(10)/edges'); SELECT * FROM check_faces('RN(10)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Drop dangling edge, no faces change SELECT 'RN(20)', topology.ST_RemEdgeNewFace('city_data', 20); SELECT * FROM check_nodes('RN(20)/nodes'); SELECT * FROM check_edges('RN(20)/edges'); SELECT * FROM check_faces('RN(20)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing face SELECT 'RN(15)', topology.ST_RemEdgeNewFace('city_data', 15); SELECT * FROM check_nodes('RN(15)/nodes'); SELECT * FROM check_edges('RN(15)/edges'); SELECT * FROM check_faces('RN(15)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from the closing node and -- going inside. -- Closed edge is in CW order. SELECT 'RN(2)', topology.ST_RemEdgeNewFace('city_data', 2); SELECT * FROM check_nodes('RN(2)/nodes'); SELECT * FROM check_edges('RN(2)/edges'); SELECT * FROM check_faces('RN(2)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge coming from inside and ending to the closing node -- Closed edge is in CW order. -- Requires reconstructing the outer ring SELECT 'NE(27)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 30 27, 20 27, 25 35)'); SELECT * FROM check_nodes('NE(27)/nodes'); SELECT * FROM check_edges('NE(27)/edges'); SELECT * FROM check_faces('NE(27)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(27)', topology.ST_RemEdgeNewFace('city_data', 27); SELECT * FROM check_nodes('RN(27)/nodes'); SELECT * FROM check_edges('RN(27)/edges'); SELECT * FROM check_faces('RN(27)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge coming from inside and ending to the closing node -- Closed edge is in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(28)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 20 27, 30 27, 25 35)'); SELECT * FROM check_nodes('NE(28)/nodes'); SELECT * FROM check_edges('NE(28)/edges'); SELECT * FROM check_faces('NE(28)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(28)', topology.ST_RemEdgeNewFace('city_data', 28); SELECT * FROM check_nodes('RN(28)/nodes'); SELECT * FROM check_edges('RN(28)/edges'); SELECT * FROM check_faces('RN(28)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from closing node and going inside. -- Closed edge is in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(29)', topology.ST_AddEdgeNewFaces('city_data', 2, 2, 'SRID=4326;LINESTRING(25 30, 28 37, 22 37, 25 30)'); SELECT * FROM check_nodes('NE(29)/nodes'); SELECT * FROM check_edges('NE(29)/edges'); SELECT * FROM check_faces('NE(29)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(29)', topology.ST_RemEdgeNewFace('city_data', 29); SELECT * FROM check_nodes('RN(29)/nodes'); SELECT * FROM check_edges('RN(29)/edges'); SELECT * FROM check_faces('RN(29)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edges both inside and outside -- Closed edge in CW order. -- Requires adding an edge and reconstructing the outer ring SELECT 'NE(30)', topology.ST_AddEdgeNewFaces('city_data', 4, 3, 'SRID=4326;LINESTRING(20 37, 25 35)'); SELECT 'NE(31)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 18 35, 18 40, 25 35)'); SELECT * FROM check_nodes('NE(30,31)/nodes'); SELECT * FROM check_edges('NE(30,31)/edges'); SELECT * FROM check_faces('NE(30,31)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(31)', topology.ST_RemEdgeNewFace('city_data', 31); SELECT * FROM check_nodes('RN(31)/nodes'); SELECT * FROM check_edges('RN(31)/edges'); SELECT * FROM check_faces('RN(31)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edges both inside -- Closed edge in CW order. -- Requires reconstructing the outer ring SELECT 'NE(32)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 18 35, 18 40, 28 40, 28 27, 18 27, 25 35)'); SELECT * FROM check_nodes('NE(32)/nodes'); SELECT * FROM check_edges('NE(32)/edges'); SELECT * FROM check_faces('NE(32)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(32)', topology.ST_RemEdgeNewFace('city_data', 32); SELECT * FROM check_nodes('RN(32)/nodes'); SELECT * FROM check_edges('RN(32)/edges'); SELECT * FROM check_faces('RN(32)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edges both inside -- Closed edge in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(33)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35,18 27,28 27,28 40,18 40,18 35,25 35)'); SELECT * FROM check_nodes('NE(33)/nodes'); SELECT * FROM check_edges('NE(33)/edges'); SELECT * FROM check_faces('NE(33)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(33)', topology.ST_RemEdgeNewFace('city_data', 33); SELECT * FROM check_nodes('RN(33)/nodes'); SELECT * FROM check_edges('RN(33)/edges'); SELECT * FROM check_faces('RN(33)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from closing node and going outside. -- Closed edge is in CW order. -- Requires reconstructing the outer ring SELECT 'NE(34)', topology.ST_AddEdgeNewFaces('city_data', 2, 2, 'SRID=4326;LINESTRING(25 30, 28 27, 22 27, 25 30)'); SELECT * FROM check_nodes('NE(34)/nodes'); SELECT * FROM check_edges('NE(34)/edges'); SELECT * FROM check_faces('NE(34)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(34)', topology.ST_RemEdgeNewFace('city_data', 34); SELECT * FROM check_nodes('RN(34)/nodes'); SELECT * FROM check_edges('RN(34)/edges'); SELECT * FROM check_faces('RN(34)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from closing node and going outside. -- Closed edge is in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(35)', topology.ST_AddEdgeNewFaces('city_data', 2, 2, 'SRID=4326;LINESTRING(25 30,22 27,28 27,25 30)' ); SELECT * FROM check_nodes('NE(35)/nodes'); SELECT * FROM check_edges('NE(35)/edges'); SELECT * FROM check_faces('NE(35)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RN(35)', topology.ST_RemEdgeNewFace('city_data', 35); SELECT * FROM check_nodes('RN(35)/nodes'); SELECT * FROM check_edges('RN(35)/edges'); SELECT * FROM check_faces('RN(35)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); SELECT topology.DropTopology('city_data'); ------------------------------------------------------------------------- -- Now test in presence of features ------------------------------------------------------------------------- -- { -- Import city_data \i load_topology.sql \i load_features.sql \i cache_geometries.sql -- A city_street is defined by edge 3, can't drop SELECT '*RN(3)', topology.ST_RemEdgeNewFace('city_data', 3); -- A city_street is defined by edge 4 and 5, can't drop any of the two SELECT '*RN(4)', topology.ST_RemEdgeNewFace('city_data', 4); SELECT '*RN(5)', topology.ST_RemEdgeNewFace('city_data', 5); -- Two land_parcels (P2 and P3) are defined by either face -- 5 but not face 4 or by face 4 but not face 5, so we can't heal -- the faces by dropping edge 17 SELECT '*RN(17)', topology.ST_RemEdgeNewFace('city_data', 17); -- Dropping edge 11 is fine as it heals faces 5 and 8, which -- only serve definition of land_parcel P3 which contains both SELECT 'RN(11)', 'relations_before:', count(*) FROM city_data.relation; SELECT 'RN(11)', topology.ST_RemEdgeNewFace('city_data', 11); SELECT 'RN(11)', 'relations_after:', count(*) FROM city_data.relation; -- Land parcel P3 is now defined by face 10, so we can't drop -- any edge which would destroy that face. SELECT '*RM(8)', topology.ST_RemEdgeModFace('city_data', 8); -- face_right=10 SELECT '*RM(15)', topology.ST_RemEdgeModFace('city_data', 15); -- face_left=10 -- Check that no land_parcel objects had topology changed SELECT 'RN(11)', feature_name, ST_Equals( ST_Multi(feature::geometry), ST_Multi(the_geom) ) as unchanged FROM features.land_parcels; SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; -- } ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- clean up DROP FUNCTION save_edges(); DROP FUNCTION check_edges(text); DROP FUNCTION save_faces(); DROP FUNCTION check_faces(text); DROP FUNCTION save_nodes(); DROP FUNCTION check_nodes(text); DELETE FROM spatial_ref_sys where srid = 4326; �������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getnodeedges.sql��������������������������������������0000644�0000000�0000000�00000000334�11722777314�023256� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; \i load_topology.sql SELECT 'N'||node_id, (topology.GetNodeEdges('city_data', node_id)).* FROM city_data.node ORDER BY node_id, sequence; SELECT topology.DropTopology('city_data'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_predicate.sql����������������������������������0000644�0000000�0000000�00000000342�11722777314�024104� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \i load_topology.sql \i load_features.sql \i more_features.sql \i hierarchy.sql \i topo_predicates.sql -- clean up SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addedgemodface_expected����������������������������0000644�0000000�0000000�00000011257�12032754123�025300� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: SQL/MM Spatial exception - start node not geometry start point. ERROR: SQL/MM Spatial exception - end node not geometry end point. ERROR: SQL/MM Spatial exception - end node not geometry end point. ERROR: SQL/MM Spatial exception - geometry crosses a node ERROR: SQL/MM Spatial exception - non-existent node ERROR: SQL/MM Spatial exception - non-existent node ERROR: SQL/MM Spatial exception - curve not simple ERROR: Invalid edge (no two distinct vertices exist) ERROR: Invalid edge (no two distinct vertices exist) ERROR: SQL/MM Spatial exception - coincident edge 8 ERROR: SQL/MM Spatial exception - geometry crosses edge 5 ERROR: SQL/MM Spatial exception - geometry crosses edge 4 ERROR: Spatial exception - geometry intersects edge 4 L1 L2 T1|E7|8|-19|0|10 T1|E10|-20|17|7|4 T1|E17|-27|11|4|5 T1|E19|-6|27|3|10 T1|E27|-7|-10|10|4 T2|E8|-15|-28|0|5 T2|E11|28|-18|11|8 T2|E15|-8|-16|5|0 T2|E17|-27|11|4|11 T2|E28|-17|15|11|5 T3|E11|28|-18|11|8 T3|E14|16|-13|12|0 T3|E16|29|-14|12|0 T3|E18|10|-29|7|8 T3|E29|14|-11|12|8 T4|E10|-20|17|13|4 T4|E13|18|-12|7|0 T4|E18|-30|-29|7|8 T4|E20|-9|30|6|13 T4|E30|10|13|13|7 T5|E9|19|-22|3|6 T5|E12|-31|22|6|0 T5|E20|31|30|14|13 T5|E31|20|-9|14|6 T6|E9|19|-32|3|6 T6|E12|-31|22|6|0 T6|E22|21|32|0|15 T6|E32|-22|12|15|6 T7|E6|7|-33|0|3 T7|E19|33|27|16|10 T7|E21|6|9|0|16 T7|E33|-21|-6|16|3 T8|E9|-34|-32|16|6 T8|E19|33|27|17|10 T8|E21|6|34|0|17 T8|E34|19|9|17|16 T9|E12|-31|22|6|0 T9|E13|18|-35|7|0 T9|E35|35|-12|18|0 T10|E13|18|-35|7|0 T10|E14|16|36|12|0 T10|E36|-13|-36|0|19 T11|E21|6|34|0|17 T11|E22|37|32|0|15 T11|E37|21|-37|0|20 T12|E1|1|-38|1|0 T12|E38|38|-1|21|0 T13|E2|3|39|2|0 T13|E39|-2|-39|0|22 T14|E1|-40|-38|1|0 T14|E40|1|40|1|1 N23| T15|E1|-40|41|1|0 T15|E38|38|-1|21|0 T15|E41|-41|-38|0|0 N24| T16|E2|3|39|23|0 T16|E3|-3|2|23|23 T16|E42|42|-42|23|2 N4| T17|E43|-43|43|0|0 N25| N26| T18|E4|-5|4|24|24 T18|E5|-4|5|24|24 T18|E43|-44|44|24|0 T18|E44|-43|43|0|24 T19|E12|-31|-45|6|25 T19|E22|37|32|0|15 T19|E35|35|45|18|0 T19|E45|22|-12|0|25 T20|E14|16|46|12|26 T20|E16|29|-46|12|0 T20|E36|-13|-36|0|19 T20|E46|-14|36|26|0 T21|E16|29|-47|12|0 T21|E36|-13|-36|0|19 T21|E46|-14|47|26|27 T21|E47|-46|36|27|0 T22-|N27|23 T22-|N28|23 T22-|N29|23 T22|E2|3|39|28|0 T22|E3|48|2|28|28 T22|E42|42|-42|28|2 T22|E48|-3|-48|28|23 T22|N27|28 T22|N28|23 T22|N29|28 T23|E2|3|39|28|0 T23|E3|-49|49|28|29 T23|E39|-2|-39|0|22 T23|E42|42|-42|28|2 T23|E48|-3|-48|29|23 T23|E49|48|2|29|28 T23|N27|28 T23|N28|23 T23|N29|29 T24-|N30|28 T24-|N31|28 T24-|N32|2 T24-|N33|28 T24-|N34|28 T24|E2|3|39|30|0 T24|E3|-49|49|30|29 T24|E42|42|-42|28|2 T24|E49|48|2|29|30 T24|E50|50|-50|30|28 T24|N27|30 T24|N30| T24|N31|30 T24|N32|2 T24|N33|28 T24|N34|30 T25|E2|3|39|30|0 T25|E3|-49|49|30|29 T25|E42|42|-42|28|2 T25|E49|48|2|29|30 T25|E50|50|-50|31|28 T25|E51|51|-51|31|30 T25|N27|30 T25|N31| T25|N32|2 T25|N33|28 T25|N34|31 T26|E4|-52|52|24|32 T26|E5|-4|5|32|32 T26|E43|-44|44|32|0 T26|E44|-43|43|0|32 T26|E52|-5|4|32|24 T27|E4|-52|53|24|33 T27|E5|-4|5|33|33 T27|E43|-44|44|33|0 T27|E44|-43|43|0|33 T27|E52|-53|4|32|24 T27|E53|-5|52|33|32 T28|E4|-52|53|24|34 T28|E5|-4|54|34|34 T28|E43|-44|44|34|0 T28|E44|-43|43|0|34 T28|E52|-53|4|32|24 T28|E53|-5|52|34|32 T28|E54|5|-54|34|33 F3,F4|{3:3,3:4,3:10,3:16,3:17} F5,N4|{1:4,3:5,3:11} F0| F1|POLYGON((3 30,3 38,16 38,16 30,3 30)) F2|POLYGON((20 34,20 37,23 37,23 34,20 34)) F3|POLYGON((9 20,9 22,21 22,21 20,9 20)) F4|POLYGON((21 14,21 22,35 22,35 14,21 14)) F5|POLYGON((35 14,35 22,47 22,47 14,35 14)) F6|POLYGON((9 6,9 14,21 14,21 6,9 6)) F7|POLYGON((21 6,21 14,35 14,35 6,21 6)) F8|POLYGON((35 6,35 14,47 14,47 6,35 6)) F9|POLYGON((4 31,4 34,7 34,7 31,4 31)) F10|POLYGON((21 14,21 22,35 22,35 14,21 14)) F11|POLYGON((35 14,35 22,47 22,47 14,35 14)) F12|POLYGON((35 6,35 14,47 14,47 6,35 6)) F13|POLYGON((21 6,21 14,35 14,35 6,21 6)) F14|POLYGON((19 6,19 14,21 14,21 6,19 6)) F15|POLYGON((9 6,9 14,11 14,11 6,9 6)) F16|POLYGON((9 14,9 16,21 16,21 14,9 14)) F17|POLYGON((9 14,9 22,21 22,21 14,9 14)) F18|POLYGON((18 0,18 6,24 6,24 0,18 0)) F19|POLYGON((32 0,32 6,38 6,38 0,32 0)) F20|POLYGON((3 11,3 17,9 17,9 11,3 11)) F21|POLYGON((5 27,5 30,11 30,11 27,5 27)) F22|POLYGON((22 27,22 30,28 30,28 27,22 27)) F23|POLYGON((25 34,25 35,27 35,27 34,25 34)) F24|POLYGON((36 28,36 38,57 38,57 28,36 28)) F25|POLYGON((9 0,9 6,21 6,21 0,9 0)) F26|POLYGON((35 0,35 6,47 6,47 0,35 0)) F27|POLYGON((35 -4,35 6,47 6,47 -4,35 -4)) F28|POLYGON((19.5 32.5,19.5 37.5,24.5 37.5,24.5 32.5,19.5 32.5)) F29|POLYGON((25 30,25 37,29 37,29 30,25 30)) F30|POLYGON((17 30,17 40,31 40,31 30,17 30)) F31|POLYGON((19 31,19 38,26 38,26 31,19 31)) F32|POLYGON((36 33,36 38,57 38,57 33,36 33)) F33|POLYGON((38 40,38 43,41 43,41 40,38 40)) F34|POLYGON((35 25,35 45,63 45,63 25,35 25)) Topology 'city_data' dropped �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_modedgeheal_expected�������������������������������0000644�0000000�0000000�00000006430�12053772612�024645� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - non-connected edges ERROR: SQL/MM Spatial exception - other edges connected (19,20) ERROR: Edge 2 is closed, cannot heal to edge 3 ERROR: Edge 2 is closed, cannot heal to edge 3 ERROR: Cannot heal edge 25 with itself, try with another E1|POINT(8 30)|POINT(8 30)|1|-1|1|1 E2|POINT(25 30)|POINT(25 30)|3|-2|2|2 E3|POINT(25 30)|POINT(25 35)|-3|2|2|3 E4|POINT(36 38)|POINT(57 33)|-5|4|5|6 E5|POINT(41 40)|POINT(57 33)|-4|5|7|6 E6|POINT(9 22)|POINT(21 22)|7|-21|16|17 E7|POINT(21 22)|POINT(35 22)|8|-19|17|18 E8|POINT(35 22)|POINT(47 22)|-15|-17|18|19 E9|POINT(9 14)|POINT(21 14)|19|-22|15|14 E10|POINT(35 14)|POINT(21 14)|-20|17|13|14 E11|POINT(35 14)|POINT(47 14)|15|-18|13|12 E12|POINT(9 6)|POINT(21 6)|20|22|8|9 E13|POINT(21 6)|POINT(35 6)|18|-12|9|10 E14|POINT(35 6)|POINT(47 6)|16|-13|10|11 E15|POINT(47 14)|POINT(47 22)|-8|-16|12|19 E16|POINT(47 6)|POINT(47 14)|-11|-14|11|12 E17|POINT(35 14)|POINT(35 22)|-7|11|13|18 E18|POINT(35 6)|POINT(35 14)|10|14|10|13 E19|POINT(21 14)|POINT(21 22)|-6|-10|14|17 E20|POINT(21 6)|POINT(21 14)|-9|13|9|14 E21|POINT(9 14)|POINT(9 22)|6|9|15|16 E22|POINT(9 6)|POINT(9 14)|21|12|8|15 E25|POINT(9 35)|POINT(13 35)|-25|25|21|22 E26|POINT(4 31)|POINT(4 31)|26|-26|20|20 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15 N16 N17 N18 N19 N20 N21 N22 MH(4,5)|6 MH(21,6)|16 MH(8,15)|19 MH(12,22)|8 MH(16,14)|11 E1|POINT(8 30)|POINT(8 30)|1|-1|1|1 E2|POINT(25 30)|POINT(25 30)|3|-2|2|2 E3|POINT(25 30)|POINT(25 35)|-3|2|2|3 E4|POINT(36 38)|POINT(41 40)|-4|4|5|7 E7|POINT(21 22)|POINT(35 22)|8|-19|17|18 E8|POINT(35 22)|POINT(47 14)|-16|-17|18|12 E9|POINT(9 14)|POINT(21 14)|19|12|15|14 E10|POINT(35 14)|POINT(21 14)|-20|17|13|14 E11|POINT(35 14)|POINT(47 14)|-8|-18|13|12 E12|POINT(9 14)|POINT(21 6)|20|21|15|9 E13|POINT(21 6)|POINT(35 6)|18|-12|9|10 E16|POINT(35 6)|POINT(47 14)|-11|-13|10|12 E17|POINT(35 14)|POINT(35 22)|-7|11|13|18 E18|POINT(35 6)|POINT(35 14)|10|16|10|13 E19|POINT(21 14)|POINT(21 22)|-21|-10|14|17 E20|POINT(21 6)|POINT(21 14)|-9|13|9|14 E21|POINT(9 14)|POINT(21 22)|7|9|15|17 E25|POINT(9 35)|POINT(13 35)|-25|25|21|22 E26|POINT(4 31)|POINT(4 31)|26|-26|20|20 N1 N2 N3 N4 N5 N7 N9 N10 N12 N13 N14 N15 N17 N18 N20 N21 N22 Topology 'city_data' dropped t 1 E1 E2 ERROR: TopoGeom 1 in layer 1 (t.f.g) cannot be represented healing edges 1 and 2 ERROR: TopoGeom 1 in layer 1 (t.f.g) cannot be represented healing edges 2 and 1 ERROR: SQL/MM Spatial exception - non-existent edge 200 ERROR: SQL/MM Spatial exception - non-existent edge 100 E3 E4 2|-4 2|3 3|4 3|-3 MH(3,4)|5 ERROR: SQL/MM Spatial exception - non-connected edges 2|3 3|-3 Topology 't' dropped #1955|t #1955.1|E1 #1955.1|E2 #1955.1|2|start nodes #1955.1|H:1,2|N2|deleted #1955.1|1|nodes left #1955.2|E3 #1955.2|E4 #1955.2|E5 #1955.2|4|start nodes #1955.2|H:3,4|N3|deleted #1955.2|3|nodes left #1955.3|E6 #1955.3|E7 #1955.3|E8 #1955.3|5|start nodes #1955.3|H:6,7|N7|deleted #1955.3|4|nodes left #1955|Topology 't' dropped #1998.+|t #1998.N1|1 #1998.N2|2 #1998.E1|1 #1998.E2|2 #1998.E3|3 #1998.N-|2 #1998.M2|LINESTRING(1 1,1 0,0 0,0 1,1 1) #1998.-|Topology 't1998' dropped ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/droptopology_expected���������������������������������0000644�0000000�0000000�00000000064�11722777314�024445� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t t t t Topology 't1' dropped Topology 't2' dropped ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addisoedge.sql�������������������������������������0000644�0000000�0000000�00000005362�11722777314�023425� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT topology.CreateTopology('tt') > 0; -- Put some points in INSERT INTO tt.node (containing_face, geom) VALUES (0, 'POINT(0 0)') RETURNING 'N' || node_id; -- 1 INSERT INTO tt.node (containing_face, geom) VALUES (0, 'POINT(10 0)') RETURNING 'N' || node_id; -- 2 INSERT INTO tt.node (containing_face, geom) VALUES (0, 'POINT(5 0)') RETURNING 'N' || node_id; -- 3 INSERT INTO tt.node (containing_face, geom) VALUES (0, 'POINT(5 10)') RETURNING 'N' || node_id; -- 4 INSERT INTO tt.node (containing_face, geom) VALUES (0, 'POINT(10 10)') RETURNING 'N' || node_id; -- 5 INSERT INTO tt.node (containing_face, geom) VALUES (0, 'POINT(20 10)') RETURNING 'N' || node_id; -- 6 INSERT INTO tt.node (containing_face, geom) VALUES (null, 'POINT(30 10)') RETURNING 'N' || node_id; -- 7 -- null input SELECT topology.ST_AddIsoEdge('tt', 1, 2, NULL); SELECT topology.ST_AddIsoEdge(NULL, 1, 2, 'LINESTRING(0 0, 1 1)'); SELECT topology.ST_AddIsoEdge('tt', 1, NULL, 'LINESTRING(0 0, 1 1)'); SELECT topology.ST_AddIsoEdge('tt', NULL, 2, 'LINESTRING(0 0, 1 1)'); -- invalid curve SELECT topology.ST_AddIsoEdge('tt', 1, 2, 'POINT(0 0)'); -- non-simple curve SELECT topology.ST_AddIsoEdge('tt', 1, 2, 'LINESTRING(0 0, 10 0, 5 5, 5 -5)'); -- non-existing nodes SELECT topology.ST_AddIsoEdge('tt', 10000, 2, 'LINESTRING(0 0, 1 1)'); -- Curve endpoints mismatch SELECT topology.ST_AddIsoEdge('tt', 1, 2, 'LINESTRING(0 0, 1 1)'); SELECT topology.ST_AddIsoEdge('tt', 1, 2, 'LINESTRING(0 1, 10 0)'); -- Node crossing SELECT topology.ST_AddIsoEdge('tt', 1, 2, 'LINESTRING(0 0, 10 0)'); -- Good one SELECT 'E' || topology.ST_AddIsoEdge('tt', 4, 5, 'LINESTRING(5 10, 5 9, 10 10)'); -- Another good one SELECT 'E' || topology.ST_AddIsoEdge('tt', 1, 2, 'LINESTRING(0 0, 2 1, 10 5, 10 0)'); -- Check that containing_face became NULL for the nodes which are -- not isolated anymore (#976) SELECT 'N' || node_id, containing_face FROM tt.node ORDER BY node_id; -- Not isolated edge (shares endpoint with previous) SELECT topology.ST_AddIsoEdge('tt', 4, 6, 'LINESTRING(5 10, 10 9, 20 10)'); SELECT topology.ST_AddIsoEdge('tt', 5, 6, 'LINESTRING(10 10, 20 10)'); -- Not isolated edge (shares endpoint with self) SELECT topology.ST_AddIsoEdge('tt', 3, 3, 'LINESTRING(5 0, 4 -2, 6 -2, 5 0)'); -- Not isolated edge (one of the endpoints has [bogusly] containin_face=null) -- See http://trac.osgeo.org/postgis/ticket/978 SELECT topology.ST_AddIsoEdge('tt', 6, 7, 'LINESTRING(20 10, 30 10)'); -- Edge intersection (geometry intersects an edge) SELECT topology.ST_AddIsoEdge('tt', 3, 6, 'LINESTRING(5 0, 20 10)'); -- TODO: check closed edge (not-isolated I guess...) -- on different faces (TODO req. nodes contained in face) SELECT topology.DropTopology('tt'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_predicate_expected�����������������������������0000644�0000000�0000000�00000002311�11722777314�025165� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT 4 features.big_parcels.the_geom SRID:0 TYPE:MULTIPOLYGON DIMS:2 5 6 features.big_signs.the_geom SRID:0 TYPE:MULTIPOINT DIMS:2 BEGIN POINT/POINT INTERSECTS S1|N1N6N14 S3|N1N6N14 S4|N3N4 S4|N4 N1N2N3|N1N6N14 N1N2N3|N3N4 N3N4|N4 POINT/LINE INTERSECTS S1|R1 S1|E20E19 S1|R1a S2|R1 S2|R1a S3|R2 N1N2N3|R4 N1N6N14|R1 N1N6N14|R2 N1N6N14|E20E19 N1N6N14|R1a N3N4|R4 LINE/LINE INTERSECTS R1|E20E19 R1|R1a R3|E25 E7E8|E20E19 E20E19|R1a POINT/POLY INTERSECTS S1|P1 S1|P2 S1|F3 S1|F6 S1|F3F4 S2|P2 S2|P3 S2|F3F4 S4|P4 N1N2N3|P4 N1N2N3|P5 N1N2N3|F1 N1N6N14|P1 N1N6N14|P2 N1N6N14|P5 N1N6N14|F3 N1N6N14|F6 N1N6N14|F3F4 N1N6N14|F1 N3N4|P4 N4|P4 LINE/POLY INTERSECTS R1|P1 R1|P2 R1|P3 R1|F3 R1|F6 R1|F3F4 R3|P5 R3|F1 R4|P4 E7E8|P1 E7E8|P2 E7E8|P3 E7E8|F3 E7E8|F3F4 E20E19|P1 E20E19|P2 E20E19|F3 E20E19|F6 E20E19|F3F4 E25|P5 E25|F1 R1a|P1 R1a|P2 R1a|P3 R1a|F3 R1a|F6 R1a|F3F4 POLY/POLY INTERSECTS P1|P2 P1|F3 P1|F6 P1|F3F4 P2|P3 P2|F3 P2|F6 P2|F3F4 P3|F3F4 P5|F1 F3|F6 F3|F3F4 F6|F3F4 POINT/POINT EQUALS S4|N4 LINE/LINE EQUALS R1|R1a R3|E25 POLYGON/POLYGON EQUALS P5|F1 POINT/POINT EQUALS (simple/hierarchical) POLYGON/POLYGON EQUALS (simple/hierarchical) P1|F3F6 COMMIT Topology 'city_data' dropped �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeo_addlinestring_expected_oldsnap����������������0000644�0000000�0000000�00000005640�12162320076�030000� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT max|node|22 max|edge|26 ERROR: Invalid geometry type (MULTILINESTRING) passed to TopoGeo_AddLinestring, expected LINESTRING ERROR: Invalid geometry type (POINT) passed to TopoGeo_AddLinestring, expected LINESTRING ERROR: No topology with name "invalid" in topology.topology iso_uni|27 N|23||POINT(36 26) N|24||POINT(38 30) E|27|sn23|en24 iso_f5|28 N|25||POINT(37 20) N|26||POINT(41 16) E|28|sn25|en26 iso_ex|27 iso_ex_tol|27 noniso_ex|18 noniso_ex_tol|18 contained|29 N|27||POINT(35 8) N|28||POINT(35 12) E|18|sn10|en27 E|29|sn27|en28 E|30|sn28|en13 overlap|31 overlap|32 N|29||POINT(49 22) N|30||POINT(45 22) E|8|sn18|en30 E|31|sn19|en29 E|32|sn30|en19 cross|34 cross|35 N|31||POINT(49 18) N|32||POINT(47 17.6) N|33||POINT(44 17) E|15|sn12|en32 E|33|sn32|en19 E|34|sn31|en32 E|35|sn32|en33 snap|36 snap|39 snap|40 N|34||POINT(18 22) N|35||POINT(22.4 22) N|36||POINT(21 20.4) E|6|sn16|en34 E|7|sn17|en35 E|19|sn14|en36 E|36|sn34|en17 E|37|sn35|en18 E|38|sn36|en17 E|39|sn35|en36 E|40|sn17|en35 snap_again|7 snap_again|36 snap_again|39 crossover|43 crossover|45 crossover|46 crossover|47 N|37||POINT(9 20) N|38||POINT(16.2 14) N|39||POINT(21 10) N|40||POINT(9 18) N|41||POINT(21 7) E|9|sn15|en38 E|20|sn9|en41 E|21|sn15|en40 E|41|sn37|en16 E|42|sn38|en14 E|43|sn37|en38 E|44|sn39|en14 E|45|sn38|en39 E|46|sn40|en37 E|47|sn41|en39 crossover_again|43 crossover_again|45 crossover_again|46 crossover_again|47 contains|25 contains|48 contains|49 N|42||POINT(7 36) N|43||POINT(14 34) E|48|sn21|en42 E|49|sn43|en22 nodecross|50 nodecross|51 N|44||POINT(18 37) N|45||POINT(22 37) E|50|sn44|en4 E|51|sn4|en45 iso_ex_2segs|28 #1613.1|52 N|46||POINT(556267.6 144887) N|47||POINT(556267 144887.4) E|52|sn46|en47 #1613.2|54 #1613.2|55 N|48||POINT(556250 144887) N|49||POINT(556267.6 144887) N|50||POINT(556310 144887) E|52|sn46|en49 E|53|sn49|en47 E|54|sn48|en49 E|55|sn49|en50 #1631.1|56 N|51||POINT(556267.6 144887) N|52||POINT(556267.6 144888) E|56|sn51|en52 #1631.2|57 #1631.2|58 N|53||POINT(556254.6 144886.6) N|54||POINT(556267.6 144887) E|57|sn53|en51 E|58|sn51|en54 #1641.1|59 N|55||POINT(-0.2 0.4) N|56||POINT(0.2 0.4) E|59|sn55|en56 #1641.2|61 #1641.2|62 N|57||POINT(0 0.2) N|58||POINT(0 0.4) N|59||POINT(0 0.4) E|59|sn55|en58 E|60|sn58|en56 E|61|sn57|en58 E|62|sn58|en59 #1641.3|63 N|60||POINT(-0.2 0.4) N|61||POINT(0.2 0.4) E|63|sn60|en61 #1641.4|65 #1641.4|66 N|62||POINT(0 0.2) N|63||POINT(0 0.4) N|64||POINT(0 0.4) E|63|sn60|en63 E|64|sn63|en61 E|65|sn62|en63 E|66|sn63|en64 #1650.1 N|65|0|POINT(0 0) #1650.3|67 N|66||POINT(10 0) E|67|sn65|en66 #1654.1|N|67 N|67|0|POINT(0 0) #1654.2|68 #1654.2|69 N|68||POINT(-10 1) N|69||POINT(10 1) E|68|sn68|en67 E|69|sn67|en69 #1706.1|E|70 N|70||POINT(20 10) N|71||POINT(10 20) E|70|sn70|en71 #1706.2|E*|70 #1706.2|E*|72 N|72||POINT(10 0) N|73||POINT(9 12) E|70|sn70|en73 E|71|sn73|en71 E|72|sn72|en73 #1714.1|N|74 N|74|0|POINT(10 0) #1714.2|E*|73 N|75||POINT(0 20) E|73|sn74|en75 Topology 'city_data' dropped ������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_newedgeheal_expected�������������������������������0000644�0000000�0000000�00000006443�12053772612�024663� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - non-connected edges ERROR: SQL/MM Spatial exception - other edges connected (19,20) ERROR: Edge 2 is closed, cannot heal to edge 3 ERROR: Edge 2 is closed, cannot heal to edge 3 ERROR: Cannot heal edge 25 with itself, try with another E1|POINT(8 30)|POINT(8 30)|1|-1|1|1 E2|POINT(25 30)|POINT(25 30)|3|-2|2|2 E3|POINT(25 30)|POINT(25 35)|-3|2|2|3 E4|POINT(36 38)|POINT(57 33)|-5|4|5|6 E5|POINT(41 40)|POINT(57 33)|-4|5|7|6 E6|POINT(9 22)|POINT(21 22)|7|-21|16|17 E7|POINT(21 22)|POINT(35 22)|8|-19|17|18 E8|POINT(35 22)|POINT(47 22)|-15|-17|18|19 E9|POINT(9 14)|POINT(21 14)|19|-22|15|14 E10|POINT(35 14)|POINT(21 14)|-20|17|13|14 E11|POINT(35 14)|POINT(47 14)|15|-18|13|12 E12|POINT(9 6)|POINT(21 6)|20|22|8|9 E13|POINT(21 6)|POINT(35 6)|18|-12|9|10 E14|POINT(35 6)|POINT(47 6)|16|-13|10|11 E15|POINT(47 14)|POINT(47 22)|-8|-16|12|19 E16|POINT(47 6)|POINT(47 14)|-11|-14|11|12 E17|POINT(35 14)|POINT(35 22)|-7|11|13|18 E18|POINT(35 6)|POINT(35 14)|10|14|10|13 E19|POINT(21 14)|POINT(21 22)|-6|-10|14|17 E20|POINT(21 6)|POINT(21 14)|-9|13|9|14 E21|POINT(9 14)|POINT(9 22)|6|9|15|16 E22|POINT(9 6)|POINT(9 14)|21|12|8|15 E25|POINT(9 35)|POINT(13 35)|-25|25|21|22 E26|POINT(4 31)|POINT(4 31)|26|-26|20|20 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15 N16 N17 N18 N19 N20 N21 N22 MH(4,5)|27 MH(21,6)|28 MH(8,15)|29 MH(12,22)|30 MH(16,14)|31 E1|POINT(8 30)|POINT(8 30)|1|-1|1|1 E2|POINT(25 30)|POINT(25 30)|3|-2|2|2 E3|POINT(25 30)|POINT(25 35)|-3|2|2|3 E7|POINT(21 22)|POINT(35 22)|29|-19|17|18 E9|POINT(9 14)|POINT(21 14)|19|30|15|14 E10|POINT(35 14)|POINT(21 14)|-20|17|13|14 E11|POINT(35 14)|POINT(47 14)|-29|-18|13|12 E13|POINT(21 6)|POINT(35 6)|18|-30|9|10 E17|POINT(35 14)|POINT(35 22)|-7|11|13|18 E18|POINT(35 6)|POINT(35 14)|10|31|10|13 E19|POINT(21 14)|POINT(21 22)|-28|-10|14|17 E20|POINT(21 6)|POINT(21 14)|-9|13|9|14 E25|POINT(9 35)|POINT(13 35)|-25|25|21|22 E26|POINT(4 31)|POINT(4 31)|26|-26|20|20 E27|POINT(36 38)|POINT(41 40)|-27|27|5|7 E28|POINT(9 14)|POINT(21 22)|7|9|15|17 E29|POINT(35 22)|POINT(47 14)|-31|-17|18|12 E30|POINT(9 14)|POINT(21 6)|20|28|15|9 E31|POINT(35 6)|POINT(47 14)|-11|-13|10|12 N1 N2 N3 N4 N5 N7 N9 N10 N12 N13 N14 N15 N17 N18 N20 N21 N22 Topology 'city_data' dropped t 1 E1 E2 ERROR: TopoGeom 1 in layer 1 (t.f.g) cannot be represented healing edges 1 and 2 ERROR: TopoGeom 1 in layer 1 (t.f.g) cannot be represented healing edges 2 and 1 ERROR: SQL/MM Spatial exception - non-existent edge 200 ERROR: SQL/MM Spatial exception - non-existent edge 100 E3 E4 2|-4 2|3 3|4 3|-3 MH(3,4)|5 ERROR: SQL/MM Spatial exception - non-connected edges 2|5 3|-5 Topology 't' dropped #1955|t #1955.1|E1 #1955.1|E2 #1955.1|2|start nodes #1955.1|H:1,2|E3|created #1955.1|1|nodes left #1955.2|E4 #1955.2|E5 #1955.2|E6 #1955.2|4|start nodes #1955.2|H:4,5|E7|created #1955.2|3|nodes left #1955.3|E8 #1955.3|E9 #1955.3|E10 #1955.3|5|start nodes #1955.3|H:8,9|E11|created #1955.3|4|nodes left #1955|Topology 't' dropped #1998.+|t #1998.N1|1 #1998.N2|2 #1998.E1|1 #1998.E2|2 #1998.E3|3 #1998.NE|4 #1998.NE4|LINESTRING(1 1,1 0,0 0,0 1,1 1) #1998.-|Topology 't1998' dropped �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeo_addlinestring_expected_newsnap����������������0000644�0000000�0000000�00000005661�12162320076�030016� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT max|node|22 max|edge|26 ERROR: Invalid geometry type (MULTILINESTRING) passed to TopoGeo_AddLinestring, expected LINESTRING ERROR: Invalid geometry type (POINT) passed to TopoGeo_AddLinestring, expected LINESTRING ERROR: No topology with name "invalid" in topology.topology iso_uni|27 N|23||POINT(36 26) N|24||POINT(38 30) E|27|sn23|en24 iso_f5|28 N|25||POINT(37 20) N|26||POINT(41 16) E|28|sn25|en26 iso_ex|27 iso_ex_tol|27 noniso_ex|18 noniso_ex_tol|18 contained|29 N|27||POINT(35 8) N|28||POINT(35 12) E|18|sn10|en27 E|29|sn27|en28 E|30|sn28|en13 overlap|31 overlap|32 N|29||POINT(49 22) N|30||POINT(45 22) E|8|sn18|en30 E|31|sn19|en29 E|32|sn30|en19 cross|34 cross|35 N|31||POINT(49 18) N|32||POINT(47 17.6) N|33||POINT(44 17) E|15|sn12|en32 E|33|sn32|en19 E|34|sn31|en32 E|35|sn32|en33 snap|36 snap|39 snap|40 N|34||POINT(18 22) N|35||POINT(22.4 22) N|36||POINT(21 20.4) E|6|sn16|en34 E|7|sn17|en35 E|19|sn14|en36 E|36|sn34|en17 E|37|sn35|en18 E|38|sn36|en17 E|39|sn35|en36 E|40|sn17|en35 snap_again|36 snap_again|39 snap_again|40 crossover|43 crossover|45 crossover|46 crossover|47 N|37||POINT(9 20) N|38||POINT(16.2 14) N|39||POINT(21 10) N|40||POINT(9 18) N|41||POINT(21 7) E|9|sn15|en38 E|20|sn9|en41 E|21|sn15|en40 E|41|sn37|en16 E|42|sn38|en14 E|43|sn37|en38 E|44|sn39|en14 E|45|sn38|en39 E|46|sn40|en37 E|47|sn41|en39 crossover_again|43 crossover_again|45 crossover_again|46 crossover_again|47 contains|25 contains|48 contains|49 N|42||POINT(7 36) N|43||POINT(14 34) E|48|sn21|en42 E|49|sn43|en22 nodecross|50 nodecross|51 N|44||POINT(18 37) N|45||POINT(22 37) E|50|sn44|en4 E|51|sn4|en45 iso_ex_2segs|28 #1613.1|52 N|46||POINT(556267.6 144887) N|47||POINT(556267 144887.4) E|52|sn46|en47 #1613.2|54 #1613.2|55 N|48||POINT(556250 144887) N|49||POINT(556267.6 144887) N|50||POINT(556310 144887) E|52|sn46|en49 E|53|sn49|en47 E|54|sn48|en49 E|55|sn49|en50 #1631.1|56 N|51||POINT(556267.6 144887) N|52||POINT(556267.6 144888) E|56|sn51|en52 #1631.2|57 #1631.2|58 N|53||POINT(556254.6 144886.6) N|54||POINT(556267.6 144887) E|57|sn53|en51 E|58|sn51|en54 #1641.1|59 N|55||POINT(-0.2 0.4) N|56||POINT(0.2 0.4) E|59|sn55|en56 #1641.2|61 #1641.2|62 N|57||POINT(0 0.2) N|58||POINT(0 0.4) N|59||POINT(0 0.4) E|59|sn55|en58 E|60|sn58|en56 E|61|sn57|en58 E|62|sn58|en59 #1641.3|63 N|60||POINT(-0.2 0.4) N|61||POINT(0.2 0.4) E|63|sn60|en61 #1641.4|65 #1641.4|66 N|62||POINT(0 0.2) N|63||POINT(0 0.4) N|64||POINT(0 0.4) E|63|sn60|en63 E|64|sn63|en61 E|65|sn62|en63 E|66|sn63|en64 #1650.1 N|65|0|POINT(0 0) #1650.3|67 N|66||POINT(10 0) E|67|sn65|en66 #1654.1|N|67 N|67|0|POINT(0 0) #1654.2|68 #1654.2|69 N|68||POINT(-10 1) N|69||POINT(10 1) E|68|sn68|en67 E|69|sn67|en69 #1706.1|E|70 N|70||POINT(20 10) N|71||POINT(10 20) E|70|sn70|en71 #1706.2|E*|70 #1706.2|E*|72 #1706.2|E*|73 N|72||POINT(10 0) N|73||POINT(10 10) N|74||POINT(15 10) E|70|sn70|en74 E|71|sn73|en71 E|72|sn72|en73 E|73|sn74|en73 #1714.1|N|75 N|75|0|POINT(10 0) #1714.2|E*|74 Topology 'city_data' dropped �������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/layertrigger_expected���������������������������������0000644�0000000�0000000�00000000550�11722777314�024404� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������seq_reset|1 t1|topology_id:1 t2|topology_id:2 t2.l1|1 t2.rel|1|1|1|1 ERROR: The topology.layer table cannot be updated after update: topology.layer |2|1|t2|l1|g|1|0| BEGIN after delete n.1: topology.layer count|1 COMMIT BEGIN after delete n.2: topology.layer count|1 COMMIT after delete n.3: topology.layer count|0 Topology 't2' dropped Topology 't1' dropped ��������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_getfacegeometry_expected���������������������������0000644�0000000�0000000�00000000732�11722777314�025566� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t f1 (with hole)|POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,8 2,8 8,2 8,2 2)) f2 (fill hole)|POLYGON((2 2,2 8,8 8,8 2,2 2)) ERROR: SQL/MM Spatial exception - universal face has no geometry ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - non-existent face. Topology 'tt' dropped ��������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/sqlmm_expected����������������������������������������0000644�0000000�0000000�00000003735�11722777314�023045� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Topology-Geometry 'sqlmm_topology' (id:x) created. -- ST_AddIsoNode ------------------------ ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument 1 2 3 4 5 6 ERROR: SQL/MM Spatial exception - coincident node ERROR: SQL/MM Spatial exception - coincident node 7 8 ERROR: SQL/MM Spatial exception - not within face ERROR: SQL/MM Spatial exception - invalid point ERROR: SQL/MM Spatial exception - coincident node ERROR: SQL/MM Spatial exception - coincident node ERROR: SQL/MM Spatial exception - coincident node -- ST_AddIsoEdge ------------------------ ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid curve ERROR: SQL/MM Spatial exception - curve not simple ERROR: SQL/MM Spatial exception - non-existent node ERROR: SQL/MM Spatial exception - end node not geometry end point. ERROR: SQL/MM Spatial exception - start node not geometry start point. ERROR: SQL/MM Spatial exception - geometry crosses a node 1 2 ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - not isolated node -- ST_AddIsoNode(2) ------------------------ ERROR: SQL/MM Spatial exception - edge crosses node. -- ST_RemoveIsoNode ------------------------ ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - not isolated node -- ST_MoveIsoNode ------------------------ ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - not isolated node ERROR: SQL/MM Spatial exception - invalid point -- ST_RemoveIsoEdge --------------------- Isolated edge 1 removed -- ST_NewEdgesSplit --------------------- 9 Topology 'sqlmm_topology' dropped �����������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/cleartopogeom_expected��������������������������������0000644�0000000�0000000�00000000245�12060221777�024536� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT relation before|5 feature before|P1|f feature during|P1|t feature after|P1|t relation after|4 Topology 'city_data' dropped �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/legacy_validate_expected������������������������������0000644�0000000�0000000�00000000251�11722777314�025017� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT Topology validation errors follow: End of topology validation errors Topology 'city_data' dropped t Empty topology errors|0 Topology 'tt' dropped �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getedgebypoint_expected�������������������������������0000644�0000000�0000000�00000000163�11722777314�024715� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t t t t t t t t t t ERROR: Two or more edges found ERROR: Two or more edges found Topology 'schema_topo' dropped �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topoelementarray_agg_expected�������������������������0000644�0000000�0000000�00000000032�11722777314�026107� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|{{1,3}} 2|{{4,1},{5,2}} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/copytopology_expected���������������������������������0000644�0000000�0000000�00000001211�12100322174�024423� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT t 4326|0 nodes|22 edges|24 faces|10 relations|39 layers|3 1|CITY_data_UP_down|LAYER1| 2|CITY_data_UP_down|LAYER2| 3|CITY_data_UP_down|LAYER3| node_node_id_seq|22|1|1|9223372036854775807|1|1|0|f|t edge_data_edge_id_seq|26|1|1|9223372036854775807|1|1|0|f|t face_face_id_seq|9|1|1|9223372036854775807|1|1|0|f|t layer_id_seq|1|1|1|9223372036854775807|1|1|f|f topogeo_s_1|9|1|1|9223372036854775807|1|1|0|f|t topogeo_s_2|8|1|1|9223372036854775807|1|1|0|f|t topogeo_s_3|8|1|1|9223372036854775807|1|1|0|f|t Topology 'CITY_data_UP_down' dropped Topology 'city_data' dropped #2184.1|t #2184.2|1 #2184.3|t #2184.4|t|t ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeo_addpolygon.sql��������������������������������0000644�0000000�0000000�00000007546�11766406036�024527� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; \i load_topology.sql -- Save max node,edge and face ids select 'node'::text as what, max(node_id) INTO city_data.limits FROM city_data.node; INSERT INTO city_data.limits select 'edge'::text as what, max(edge_id) FROM city_data.edge; INSERT INTO city_data.limits select 'face'::text as what, max(face_id) FROM city_data.face; SELECT 'max',* from city_data.limits; -- Check changes since last saving, save more -- { CREATE OR REPLACE FUNCTION check_changes() RETURNS TABLE (o text) AS $$ DECLARE rec RECORD; sql text; BEGIN -- Check effect on nodes sql := 'SELECT n.node_id, ''N|'' || n.node_id || ''|'' || COALESCE(n.containing_face::text,'''') || ''|'' || ST_AsText(ST_SnapToGrid(n.geom, 0.2))::text as xx FROM city_data.node n WHERE n.node_id > ( SELECT max FROM city_data.limits WHERE what = ''node''::text ) ORDER BY n.node_id'; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; -- Check effect on edges sql := ' WITH node_limits AS ( SELECT max FROM city_data.limits WHERE what = ''node''::text ), edge_limits AS ( SELECT max FROM city_data.limits WHERE what = ''edge''::text ) SELECT ''E|'' || e.edge_id || ''|sn'' || e.start_node || ''|en'' || e.end_node :: text as xx FROM city_data.edge e, node_limits nl, edge_limits el WHERE e.start_node > nl.max OR e.end_node > nl.max OR e.edge_id > el.max ORDER BY e.edge_id; '; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; -- Check effect on faces sql := ' WITH face_limits AS ( SELECT max FROM city_data.limits WHERE what = ''face''::text ) SELECT ''F|'' || f.face_id ::text as xx FROM city_data.face f, face_limits fl WHERE f.face_id > fl.max ORDER BY f.face_id; '; FOR rec IN EXECUTE sql LOOP o := rec.xx; RETURN NEXT; END LOOP; UPDATE city_data.limits SET max = (SELECT max(n.node_id) FROM city_data.node n) WHERE what = 'node'; UPDATE city_data.limits SET max = (SELECT max(e.edge_id) FROM city_data.edge e) WHERE what = 'edge'; UPDATE city_data.limits SET max = (SELECT max(f.face_id) FROM city_data.face f) WHERE what = 'face'; END; $$ LANGUAGE 'plpgsql'; -- } -- Invalid calls SELECT 'invalid', TopoGeo_addPolygon('city_data', 'MULTILINESTRING((36 26, 38 30))'); SELECT 'invalid', TopoGeo_addPolygon('city_data', 'POINT(36 26)'); SELECT 'invalid', TopoGeo_addPolygon('invalid', 'POLYGON((36 26, 40 24, 40 30, 36 26))'); -- Isolated face in universal face SELECT 'iso_uni', TopoGeo_addPolygon('city_data', 'POLYGON((36 26, 38 30, 43 26, 36 26))'); SELECT check_changes(); -- Isolated face in universal face with hole SELECT 'iso_uni_hole', TopoGeo_addPolygon('city_data', 'POLYGON((9 28, 16 29, 16 23, 10 23, 9 28),(15 25, 13 27, 11 24, 15 25))'); SELECT check_changes(); -- Existing single face SELECT 'ex', TopoGeo_addPolygon('city_data', 'POLYGON((21 22,35 22,35 14,21 14,21 22))'); SELECT check_changes(); -- Union of existing faces SELECT 'ex_union', TopoGeo_addPolygon('city_data', 'POLYGON((9 14,21 14,35 14,35 6,21 6,9 6,9 14))') ORDER BY 2; SELECT check_changes(); -- Half an existing face SELECT 'half', TopoGeo_addPolygon('city_data', 'POLYGON((21 14, 35 22, 35 14, 21 14))'); SELECT check_changes(); -- Split two existing faces SELECT 'split', TopoGeo_addPolygon('city_data', 'POLYGON((21 14, 21 22, 35 14, 21 14))') ORDER BY 2; SELECT check_changes(); -- Union of existing face, with hole SELECT 'ex_hole', TopoGeo_addPolygon('city_data', 'POLYGON((9 22,47 22,47 6,9 6,9 22),(21 14,28 18,35 14,21 14))') ORDER BY 2; SELECT check_changes(); -- Union of existing face, with hole and a tolerance SELECT 'ex_hole_snap', TopoGeo_addPolygon('city_data', 'POLYGON((9 22,35 22.5, 47 22,47 6,9 6,9 22),(21 14,28 17.5,35 14,21 14))', 1) ORDER BY 2; SELECT check_changes(); DROP FUNCTION check_changes(); SELECT DropTopology('city_data'); ����������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getfacebypoint_expected�������������������������������0000644�0000000�0000000�00000000252�11722777314�024706� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 4 4 4 0 0 3 4 ERROR: Two or more faces found ERROR: Two or more faces found Topology 'schema_topo' dropped ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/getedgebypoint.sql������������������������������������0000644�0000000�0000000�00000002672�11722777314�023641� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT topology.CreateTopology('schema_topo') > 0; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(1 4, 4 7)')) = 1; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(4 7, 6 9)')) = 2; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(2 2, 4 4)')) = 3; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(4 4, 5 5, 6 6)')) = 4; select topology.AddEdge('schema_topo',ST_GeomFromText('LINESTRING(6 6, 6 9)')) = 5; -- ask for a Point with tolerance zero select topology.GetEdgeByPoint('schema_topo',ST_GeomFromText('POINT(5 5)'), 0::float8)::int = 4; -- ask for a point on an edge select topology.GetEdgeByPoint('schema_topo',ST_GeomFromText('POINT(5 5)'), 0.1::float8)::int = 4; -- Ask for a point outside from an edge with a tolerance sufficient to include one edge select topology.GetEdgeByPoint('schema_topo',ST_GeomFromText('POINT(5 5.5)'), 0.7::float8)::int = 4; -- Ask for a point where there isn't an edge select topology.GetEdgeByPoint('schema_topo',ST_GeomFromText('POINT(5 5.5)'), 0::float8) = 0; -- Failing cases (should all raise exceptions) ------- -- Ask for Point in a Node select topology.GetEdgeByPoint('schema_topo',ST_GeomFromText('POINT(4 7)'), 1::float8); -- Ask for a Point with a tollerance too high select topology.GetEdgeByPoint('schema_topo',ST_GeomFromText('POINT(5 5)'), 2::float8); SELECT topology.DropTopology('schema_topo'); ����������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addtopogeometrycolumn.sql�����������������������������0000644�0000000�0000000�00000003356�11722777314�025254� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \set VERBOSITY terse select createtopology('tt') > 0; select addtopogeometrycolumn('tt','public','feature','tg','POINT'); -- fail create table feature(id integer); select addtopogeometrycolumn('tt','public','feature','tg','BOGUS'); -- fail select addtopogeometrycolumn('tt','public','feature','tg','POINT', 0); -- fail -- Expect first good call returning 1 select 'T1', addtopogeometrycolumn('tt','public','feature','tg','POINT'); -- Check that you can add a second topogeometry column to the same table select 'T2', addtopogeometrycolumn('tt','public','feature','tg2','LINE'); -- Check polygonal select 'T3', addtopogeometrycolumn('tt','public','feature','tg3','POLYGON'); -- Check collection select 'T4', addtopogeometrycolumn('tt','public','feature','tg4','COLLECTION'); -- Check alternate names select 'T5', addtopogeometrycolumn('tt','public','feature', 'tg5','ST_MultiPoint'); select 'T6', addtopogeometrycolumn('tt','public','feature', 'tg6','ST_MultiLineString'); select 'T7', addtopogeometrycolumn('tt','public','feature', 'tg7','ST_MultiPolygon'); select 'T8', addtopogeometrycolumn('tt','public','feature', 'tg8','GEOMETRYCOLLECTION'); select 'T9', addtopogeometrycolumn('tt','public','feature', 'tg9','PUNtal'); select 'T10', addtopogeometrycolumn('tt','public','feature', 'tg10','Lineal'); select 'T11', addtopogeometrycolumn('tt','public','feature', 'tg11','Areal'); select 'T12', addtopogeometrycolumn('tt','public','feature', 'tg12','GEOMETRY'); select l.layer_id, l.schema_name, l.table_name, l.feature_column, l.feature_type, l.level, l.child_id from topology.layer l, topology.topology t where l.topology_id = t.id and t.name = 'tt' order by l.layer_id; drop table feature; select droptopology('tt'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_simplify_expected����������������������������������0000644�0000000�0000000�00000000053�12243440745�024236� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t L1 N2 S1|f|t S2|f|t L2 HS1|f|t HS2|f|t f �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addedgenewfaces.sql��������������������������������0000644�0000000�0000000�00000041643�12032754123�024414� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; \i load_topology.sql -- Endpoint / node mismatch SELECT topology.ST_AddEdgeNewFaces('city_data', 7, 6, 'LINESTRING(36 38,57 33)'); SELECT topology.ST_AddEdgeNewFaces('city_data', 5, 7, 'LINESTRING(36 38,57 33)'); -- See http://trac.osgeo.org/postgis/ticket/1857 SELECT topology.ST_AddEdgeModFace('city_data', 5, 5, 'LINESTRING(36 38,57 33)'); -- Crosses a node SELECT topology.ST_AddEdgeNewFaces('city_data', 5, 6, 'LINESTRING(36 38, 41 40, 57 33)'); -- Non-existent node SELECT topology.ST_AddEdgeNewFaces('city_data', 5, 60000, 'LINESTRING(36 38,57 33)'); SELECT topology.ST_AddEdgeNewFaces('city_data', 60000, 6, 'LINESTRING(36 38,57 33)'); -- Non-simple curve SELECT topology.ST_AddEdgeNewFaces('city_data', 5, 5, 'LINESTRING(36 38, 40 50, 36 38)'); -- Collapsed curve SELECT topology.ST_AddEdgeNewFaces('city_data', 5, 5, 'LINESTRING(36 38, 36 38, 36 38)'); -- Empty curve SELECT topology.ST_AddEdgeNewFaces('city_data', 5, 5, 'LINESTRING EMPTY'); -- Coincident edge SELECT topology.ST_AddEdgeNewFaces('city_data', 18, 19, 'LINESTRING(35 22,47 22)'); -- Crosses an edge SELECT topology.ST_AddEdgeNewFaces('city_data', 5, 6, 'LINESTRING(36 38, 40 50, 57 33)'); -- Touches an existing edge SELECT 'O', topology.ST_AddEdgeNewFaces('city_data', 5, 6, 'LINESTRING(36 38,45 32,57 33)'); -- Shares a portion of an existing edge SELECT 'O', topology.ST_AddEdgeNewFaces('city_data', 5, 6, 'LINESTRING(36 38,38 35,57 33)'); --------------------------------------------------------------------- -- Define some features --------------------------------------------------------------------- CREATE TABLE city_data.fp(id varchar); SELECT 'L' || topology.AddTopoGeometryColumn('city_data', 'city_data', 'fp', 'g', 'POLYGON'); -- Feature composed by face 3 and face 4 INSERT INTO city_data.fp VALUES ('F3,F4', topology.CreateTopoGeom('city_data', 3, 1, '{{3,3},{4,3}}')); CREATE TABLE city_data.fc(id varchar); SELECT 'L' || topology.AddTopoGeometryColumn('city_data', 'city_data', 'fc', 'g', 'COLLECTION'); -- Feature composed by face 5 and node 4 INSERT INTO city_data.fc VALUES ('F5,N4', topology.CreateTopoGeom('city_data', 4, 2, '{{5,3},{4,1}}')); --------------------------------------------------------------------- -- Now add some edges splitting faces... --------------------------------------------------------------------- -- -- start node has: -- outward edge on the left face -- inward edge on the right face -- end node has: -- inward edge on the left face -- inward edge on the right face -- SELECT 1 as id, topology.st_addedgenewfaces('city_data', 14, 18, 'LINESTRING(21 14, 35 22)') as edge_id INTO newedge; SELECT 'T1', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (19, 7, 17, 10, ( SELECT edge_id FROM newedge WHERE id = 1 ) ) ORDER BY edge_id; -- -- start node has: -- inward edge on the left face -- outward edge on the right face -- end node has: -- inward edge on the left face -- outward edge on the right face -- INSERT INTO newedge SELECT 2, topology.st_addedgenewfaces('city_data', 12, 18, 'LINESTRING(47 14, 35 22)'); SELECT 'T2', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (17, 8, 15, 11, ( SELECT edge_id FROM newedge WHERE id = 2 ) ) ORDER BY edge_id; -- -- start node has: -- inward edge on the left face -- inward edge on the right face -- end node has: -- outward edge on the left face -- outward edge on the right face -- INSERT INTO newedge SELECT 3, topology.st_addedgenewfaces('city_data', 12, 10, 'LINESTRING(47 14, 35 6)'); SELECT 'T3', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (11, 16, 14, 18, ( SELECT edge_id FROM newedge WHERE id = 3 ) ) ORDER BY edge_id; -- -- start node has: -- outward edge on the left face -- outward edge on the right face -- end node has: -- outward edge on the left face -- inward edge on the right face -- INSERT INTO newedge SELECT 4, topology.st_addedgenewfaces('city_data', 9, 13, 'LINESTRING(21 6, 35 14)'); SELECT 'T4', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (20, 10, 18, 13, ( SELECT edge_id FROM newedge WHERE id = 4 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for left face, swapped direction -- INSERT INTO newedge SELECT 5, topology.st_addedgenewfaces('city_data', 14, 9, 'LINESTRING(21 14, 19 10, 21 6)'); SELECT 'T5', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (9, 12, 20, ( SELECT edge_id FROM newedge WHERE id = 5 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for left face, same direction -- INSERT INTO newedge SELECT 6, topology.st_addedgenewfaces('city_data', 8, 15, 'LINESTRING(9 6, 11 10, 9 14)'); SELECT 'T6', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (9, 12, 22, ( SELECT edge_id FROM newedge WHERE id = 6 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for right face, swapped direction -- INSERT INTO newedge SELECT 7, topology.st_addedgenewfaces('city_data', 17, 16, 'LINESTRING(21 22, 15 20, 9 22)'); SELECT 'T7', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (21, 6, 19, ( SELECT edge_id FROM newedge WHERE id = 7 ) ) ORDER BY edge_id; -- -- Same edge on start and end node, for right face, same direction -- INSERT INTO newedge SELECT 8, topology.st_addedgenewfaces('city_data', 15, 14, 'LINESTRING(9 14, 15 16, 21 14)'); SELECT 'T8', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (9, 21, 19, ( SELECT edge_id FROM newedge WHERE id = 8 ) ) ORDER BY edge_id; -- -- Closed edge, counterclockwise, in universe face, next right -- INSERT INTO newedge SELECT 9, topology.st_addedgenewfaces('city_data', 9, 9, 'LINESTRING(21 6, 18 0, 24 0, 21 6)'); SELECT 'T9', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (12, 13, ( SELECT edge_id FROM newedge WHERE id = 9 ) ) ORDER BY edge_id; -- -- Closed edge, clockwise, in universe face, next right -- INSERT INTO newedge SELECT 10, topology.st_addedgenewfaces('city_data', 10, 10, 'LINESTRING(35 6, 38 0, 32 0, 35 6)'); SELECT 'T10', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (13, 14, ( SELECT edge_id FROM newedge WHERE id = 10 ) ) ORDER BY edge_id; -- -- Closed edge, clockwise, in universe face, next left -- INSERT INTO newedge SELECT 11, topology.st_addedgenewfaces('city_data', 15, 15, 'LINESTRING(9 14, 3 11, 3 17, 9 14)'); SELECT 'T11', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (21, 22, ( SELECT edge_id FROM newedge WHERE id = 11 ) ) ORDER BY edge_id; -- -- Closed edge, clockwise, in universe face, against closed edge -- INSERT INTO newedge SELECT 12, topology.st_addedgenewfaces('city_data', 1, 1, 'LINESTRING(8 30, 5 27, 11 27, 8 30)'); SELECT 'T12', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (1, ( SELECT edge_id FROM newedge WHERE id = 12 ) ) ORDER BY edge_id; -- -- Closed edge, counterclockwise, in universe face, against closed edge -- INSERT INTO newedge SELECT 13, topology.st_addedgenewfaces('city_data', 2, 2, 'LINESTRING(25 30, 28 27, 22 27, 25 30)'); SELECT 'T13', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (2, ( SELECT edge_id FROM newedge WHERE id = 13 ) ) ORDER BY edge_id; -- -- Dangling edge, ending into closed edge endpoint -- INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(9 33)', 1); -- N23 INSERT INTO newedge SELECT 14, topology.st_addedgenewfaces('city_data', 23, 1, 'LINESTRING(9 33, 8 30)'); SELECT 'T14', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (1, ( SELECT edge_id FROM newedge WHERE id = 14 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id = 23; -- -- Dangling edge, originating from closed edge endpoint -- INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(12 28)', 0); -- N24 INSERT INTO newedge SELECT 15, topology.st_addedgenewfaces('city_data', 1, 24, 'LINESTRING(8 30, 12 28)'); SELECT 'T15', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (38, 1, ( SELECT edge_id FROM newedge WHERE id = 15 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id = 24; -- -- Closed edge on isolated node -- INSERT INTO newedge SELECT 16, topology.st_addedgenewfaces('city_data', 4, 4, 'LINESTRING(20 37, 23 37, 20 34, 20 37)'); SELECT 'T16', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN (2, 3, ( SELECT edge_id FROM newedge WHERE id = 16 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id = 4; -- -- Isolated edge -- INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(35 28)', 0); -- N25 INSERT INTO city_data.node(geom, containing_face) VALUES ('POINT(39 28)', 0); -- N26 INSERT INTO newedge SELECT 17, topology.st_addedgenewfaces('city_data', 25, 26, 'LINESTRING(35 28, 39 28)'); SELECT 'T17', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( ( SELECT edge_id FROM newedge WHERE id = 17 ) ) ORDER BY edge_id; SELECT 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 25, 26 ); -- -- New face in universal face, enclosing isolated edge chain -- INSERT INTO newedge SELECT 18, topology.st_addedgenewfaces('city_data', 25, 26, 'LINESTRING(35 28, 35 45, 63 45, 63 25, 39 25, 39 28)'); SELECT 'T18', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( 4, 5, 43, ( SELECT edge_id FROM newedge WHERE id = 18 ) ) ORDER BY edge_id; -- -- New face in universal face, with both endpoints on same existing edge -- INSERT INTO newedge SELECT 19, topology.st_addedgenewfaces('city_data', 9, 8, 'LINESTRING(21 6, 12 0, 9 6)'); SELECT 'T19', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( 12, 35, 22, ( SELECT edge_id FROM newedge WHERE id = 19 ) ) ORDER BY edge_id; -- -- New face in universal face, with both endpoints on same existing edge -- and endpoints duplicated -- INSERT INTO newedge SELECT 20, topology.st_addedgenewfaces('city_data', 10, 11, 'LINESTRING(35 6, 35 6, 44 0, 47 6, 47 6)'); SELECT 'T20', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( 36, 14, 16, ( SELECT edge_id FROM newedge WHERE id = 20 ) ) ORDER BY edge_id; -- -- Another face in universal face, with both endpoints on same existing edge -- and both edges' endpoints duplicated -- INSERT INTO newedge SELECT 21, topology.st_addedgenewfaces('city_data', 10, 11, 'LINESTRING(35 6, 35 6, 44 -4, 47 6, 47 6)'); SELECT 'T21', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (20, 21) UNION VALUES (36),(16) ) ORDER BY edge_id; -- -- Split a face containing an hole -- Faces on both sides contain isolated nodes. -- SELECT 'T22-', 'N' || topology.st_addisonode('city_data', 32, 'POINT(26 36)'), 32; SELECT 'T22-', 'N' || topology.st_addisonode('city_data', 32, 'POINT(26 34.5)'), 32; SELECT 'T22-', 'N' || topology.st_addisonode('city_data', 32, 'POINT(26 33)'), 32; INSERT INTO newedge SELECT 22, topology.st_addedgenewfaces('city_data', 3, 3, 'LINESTRING(25 35, 27 35, 26 34, 25 35)'); SELECT 'T22', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (22, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T22', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 28, 29 ) ORDER BY node_id; -- -- Split a face containing an holes in both sides of the split -- Faces on both sides contain isolated nodes. -- INSERT INTO newedge SELECT 23, topology.st_addedgenewfaces('city_data', 2, 3, 'LINESTRING(25 30, 29 32, 29 37, 25 35)'); SELECT 'T23', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (13, 23, 22, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T23', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 28, 29 ) ORDER BY node_id; -- -- Split a face containing an hole, this time with no ring continuity -- This version goes clockwise -- All involved faces contain isolated nodes -- SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(19.5 37.5)'), 39; SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(19 38)'), 39; SELECT 'T24-', 'N' || st_addisonode('city_data', 31, 'POINT(20.5 35)'), 31; SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(20.5 34)'), 39; SELECT 'T24-', 'N' || st_addisonode('city_data', 39, 'POINT(20.5 33)'), 39; INSERT INTO newedge SELECT 24, topology.st_addedgenewfaces('city_data', 30, 30, 'LINESTRING(19.5 37.5, 24.5 37.5, 19.5 32.5, 19.5 37.5)'); SELECT 'T24', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (24, 23, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T24', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 30, 31, 32, 33, 34 ) ORDER BY node_id; -- -- Split a face containing an hole, this time with no ring continuity -- This version goes counterclockwise -- All involved faces contain isolated nodes -- INSERT INTO newedge SELECT 25, topology.st_addedgenewfaces('city_data', 31, 31, 'LINESTRING(19 38, 19 31, 26 38, 19 38)'); SELECT 'T25', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (25, 24, 23, 16) UNION VALUES (2),(3) ) ORDER BY edge_id; SELECT 'T25', 'N' || node_id, containing_face FROM city_data.node WHERE node_id IN ( 27, 31, 32, 33, 34 ) ORDER BY node_id; -- -- Split a face closing a ring inside a face -- INSERT INTO newedge SELECT 26, topology.st_addedgenewfaces('city_data', 5, 6, 'LINESTRING(36 38, 57 33)'); SELECT 'T26', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (26, 17, 18) UNION VALUES (4),(5) ) ORDER BY edge_id; -- -- Split a face closing a ring inside a face -- and with the ring containing another edge -- INSERT INTO newedge SELECT 27, topology.st_addedgenewfaces('city_data', 5, 6, 'LINESTRING(36 38, 50 38, 57 33)'); SELECT 'T27', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (27, 17, 18, 26) UNION VALUES (4),(5) ) ORDER BY edge_id; -- -- Split a face closing a ring inside a face -- and with the left ring containing another edge -- and forming an invalid polygon of this shape: <>---<> -- -- See http://trac.osgeo.org/postgis/ticket/2025 -- INSERT INTO newedge SELECT 28, topology.st_addedgenewfaces('city_data', 7, 7, 'LINESTRING(41 40, 38 40, 41 43, 41 40)'); SELECT 'T28', 'E'||edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge WHERE edge_id IN ( SELECT edge_id FROM newedge WHERE id IN (26, 27, 28, 17, 18) UNION VALUES (4),(5) ) ORDER BY edge_id; --------------------------------------------------------------------- -- Check new relations and faces status --------------------------------------------------------------------- SELECT id, array_agg(comp) FROM ( SELECT f.id, r.element_type||':'||r.element_id as comp FROM city_data.fp f, city_data.relation r WHERE r.topogeo_id = id(f.g) AND r.layer_id = layer_id(f.g) ORDER BY f.id, element_type, element_id ) f GROUP BY id; SELECT id, array_agg(comp) FROM ( SELECT f.id, r.element_type||':'||r.element_id as comp FROM city_data.fc f, city_data.relation r WHERE r.topogeo_id = id(f.g) AND r.layer_id = layer_id(f.g) ORDER BY f.id, element_type, element_id ) f GROUP BY id; SELECT 'F'||face_id, st_astext(mbr) FROM city_data.face ORDER BY face_id; --------------------------------------------------------------------- -- Cleanups --------------------------------------------------------------------- DROP TABLE newedge; SELECT topology.DropTopology('city_data'); ���������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topoelement_expected����������������������������������0000644�0000000�0000000�00000000305�11722777314�024235� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|{101,1} 2|{101,2} 3|{101,3} 4|{1,104} ERROR: value for domain topoelement violates check constraint "lower_dimension" ERROR: value for domain topoelement violates check constraint "type_range" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topojson.sql������������������������������������������0000644�0000000�0000000�00000007022�12122631067�022462� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \i load_topology.sql \i load_features.sql \i hierarchy.sql -- This edges perturbate the topology so that walking around the boundaries -- of P1 and P2 may require walking on some of them SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(9 14, 15 10)'); SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(21 14, 15 18)'); SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(21 14, 28 10)'); SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(35 14, 28 18)'); --- Lineal non-hierarchical SELECT 'L1-vanilla', feature_name, topology.AsTopoJSON(feature, NULL) FROM features.city_streets WHERE feature_name IN ('R3', 'R4', 'R1', 'R2' ) ORDER BY feature_name; --- Lineal hierarchical SELECT 'L2-vanilla', feature_name, topology.AsTopoJSON(feature, NULL) FROM features.big_streets WHERE feature_name IN ('R4', 'R1R2' ) ORDER BY feature_name; --- Areal non-hierarchical SELECT 'A1-vanilla', feature_name, topology.AsTopoJSON(feature, NULL) FROM features.land_parcels WHERE feature_name IN ('P1', 'P2', 'P3', 'P4', 'P5' ) ORDER BY feature_name; --- Areal hierarchical SELECT 'A2-vanilla', feature_name, topology.AsTopoJSON(feature, NULL) FROM features.big_parcels WHERE feature_name IN ('P1P2', 'P3P4') ORDER BY feature_name; -- Now again with edge mapping { CREATE TEMP TABLE edgemap (arc_id serial, edge_id int unique); --- Lineal non-hierarchical SELECT 'L1-edgemap', feature_name, topology.AsTopoJSON(feature, 'edgemap') FROM features.city_streets WHERE feature_name IN ('R3', 'R4', 'R1', 'R2' ) ORDER BY feature_name; --- Lineal hierarchical TRUNCATE edgemap; SELECT NULLIF(setval('edgemap_arc_id_seq', 1, false), 1); SELECT 'L2-edgemap', feature_name, topology.AsTopoJSON(feature, 'edgemap') FROM features.big_streets WHERE feature_name IN ('R4', 'R1R2' ) ORDER BY feature_name; --- Areal non-hierarchical TRUNCATE edgemap; SELECT NULLIF(setval('edgemap_arc_id_seq', 1, false), 1); SELECT 'A1-edgemap', feature_name, topology.AsTopoJSON(feature, 'edgemap') FROM features.land_parcels WHERE feature_name IN ('P1', 'P2', 'P3', 'P4', 'P5' ) ORDER BY feature_name; --- Areal hierarchical TRUNCATE edgemap; SELECT NULLIF(setval('edgemap_arc_id_seq', 1, false), 1); SELECT 'A2-edgemap', feature_name, topology.AsTopoJSON(feature, 'edgemap') FROM features.big_parcels WHERE feature_name IN ('P1P2', 'P3P4') ORDER BY feature_name; DROP TABLE edgemap; -- End edge mapping } -- This edge splits an hole in two faces SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(4 31, 7 34)'); -- This edge wraps a couple of faces, to test holes at 2 level distance from parent SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(0 25, 33 25, 33 44, 0 44, 0 25)'); -- Now add a new polygon SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(3 47, 33 47, 33 52, 3 52, 3 47)'); SELECT 'E' || TopoGeo_addLinestring('city_data', 'LINESTRING(10 48, 16 48, 16 50, 10 50, 10 48)'); -- And this defines a new feature including both face 1and the new -- wrapping face 11 plus the new (holed) face 12 INSERT INTO features.land_parcels VALUES ('P6', topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) 1, -- TG_LAYER_ID for this topology (from topology.layer) '{{1,3},{11,3},{12,3}}')); SELECT 'A3-vanilla', feature_name, topology.AsTopoJSON(feature, null) FROM features.land_parcels WHERE feature_name IN ('P6') ORDER BY feature_name; SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addface2.5d_expected����������������������������������0000644�0000000�0000000�00000000163�11722777314�023644� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t e1|1 e2|2 e3|3 e4|4 f1|1 0| 1|POLYGON((0 0,0 10,10 10,10 0,0 0)) 1|1|0 2|1|0 3|0|1 4|0|1 Topology 'tt3d' dropped �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/cleartopogeom.sql�������������������������������������0000644�0000000�0000000�00000001434�12060221777�023454� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; \i load_topology.sql \i load_features.sql SELECT 'relation before', count(distinct topogeo_id) FROM city_data.relation WHERE layer_id = 1; SELECT 'feature before', feature_name, ST_IsEmpty(feature) FROM features.land_parcels WHERE feature_name = 'P1' ORDER BY feature_name; SELECT 'feature during', feature_name, ST_IsEmpty(clearTopoGeom(feature)) FROM features.land_parcels WHERE feature_name = 'P1' ORDER BY feature_name; SELECT 'feature after', feature_name, ST_IsEmpty(feature) FROM features.land_parcels WHERE feature_name = 'P1' ORDER BY feature_name; SELECT 'relation after', count(distinct topogeo_id) FROM city_data.relation WHERE layer_id = 1; select droptopology('city_data'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/copytopology.sql��������������������������������������0000644�0000000�0000000�00000005047�12100322174�023353� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' ); \i load_topology-4326.sql \i load_features.sql \i more_features.sql SELECT topology.CopyTopology('city_data', 'CITY_data_UP_down') > 0; SELECT srid,precision FROM topology.topology WHERE name = 'CITY_data_UP_down'; SELECT 'nodes', count(node_id) FROM "CITY_data_UP_down".node; SELECT * FROM "CITY_data_UP_down".node EXCEPT SELECT * FROM "city_data".node; SELECT 'edges', count(edge_id) FROM "CITY_data_UP_down".edge_data; SELECT * FROM "CITY_data_UP_down".edge EXCEPT SELECT * FROM "city_data".edge; SELECT 'faces', count(face_id) FROM "CITY_data_UP_down".face; SELECT * FROM "CITY_data_UP_down".face EXCEPT SELECT * FROM "city_data".face; SELECT 'relations', count(*) FROM "CITY_data_UP_down".relation; SELECT * FROM "CITY_data_UP_down".relation EXCEPT SELECT * FROM "city_data".relation; SELECT 'layers', count(l.*) FROM topology.layer l, topology.topology t WHERE l.topology_id = t.id and t.name = 'CITY_data_UP_down'; SELECT l.layer_id, l.feature_type, l.level FROM topology.layer l, topology.topology t where l.topology_id = t.id and t.name = 'CITY_data_UP_down' EXCEPT SELECT l.layer_id, l.feature_type, l.level FROM topology.layer l, topology.topology t where l.topology_id = t.id and t.name = 'city_data'; SELECT l.layer_id, l.schema_name, l.table_name, l.feature_column FROM topology.layer l, topology.topology t WHERE l.topology_id = t.id and t.name = 'CITY_data_UP_down' ORDER BY l.layer_id; -- Check sequences SELECT * from "CITY_data_UP_down".node_node_id_seq; SELECT * from "CITY_data_UP_down".edge_data_edge_id_seq; SELECT * from "CITY_data_UP_down".face_face_id_seq; SELECT sequence_name, last_value, start_value, increment_by, max_value, min_value, cache_value, is_cycled, is_called from "CITY_data_UP_down".layer_id_seq; SELECT * from "CITY_data_UP_down".topogeo_s_1; SELECT * from "CITY_data_UP_down".topogeo_s_2; SELECT * from "CITY_data_UP_down".topogeo_s_3; SELECT topology.DropTopology('CITY_data_UP_down'); SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; -- See http://trac.osgeo.org/postgis/ticket/2184 select '#2184.1', topology.createTopology('t3d', 0, 0, true) > 0; select '#2184.2', st_addisonode('t3d', NULL, 'POINT(1 2 3)'); select '#2184.3', topology.copyTopology('t3d', 't3d-bis') > 0; select '#2184.4', length(topology.dropTopology('t3d')) > 0, length(topology.dropTopology('t3d-bis')) > 0; DELETE FROM spatial_ref_sys where srid = 4326; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/droptopology.sql��������������������������������������0000644�0000000�0000000�00000000704�11722777314�023363� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; SELECT topology.CreateTopology('t1') > 0; SELECT topology.CreateTopology('t2') > 0; CREATE TABLE t1f (id int); SELECT topology.AddTopoGeometryColumn('t1', 'public', 't1f', 'geom_t1', 'LINE') > 0; CREATE TABLE t2f (id int); SELECT topology.AddTopoGeometryColumn('t2', 'public', 't2f', 'geom_t2', 'LINE') > 0; SELECT topology.DropTopology('t1'); SELECT topology.DropTopology('t2'); DROP TABLE t2f; DROP TABLE t1f; ������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topo2.5d_expected�������������������������������������0000644�0000000�0000000�00000000227�11722777314�023257� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t 1 2 f1|MULTIPOLYGON(((0 0 30,0 10 25,10 10 20,10 0 18,0 0 30))) l1|MULTILINESTRING((0 0 30,0 10 25,10 10 20,10 0 18,0 0 30)) Topology 'tt3d' dropped �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_modedgesplit_expected������������������������������0000644�0000000�0000000�00000002064�12103322675�025062� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT max|node|22 max|edge|26 ERROR: geometry has too many points at character 53 ERROR: SQL/MM Spatial exception - point not on edge ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name noniso|23 N|23||POINT(28 14) E|10|sn13|en23|nl27|nr17|lf7|rf4 E|27|sn23|en14|nl-20|nr-10|lf7|rf4 iso|24 N|24||POINT(11 35) E|25|sn21|en24|nl28|nr25|lf1|rf1 E|28|sn24|en22|nl-28|nr-25|lf1|rf1 dangling_end|25 N|25||POINT(25 32) E|3|sn2|en25|nl29|nr2|lf2|rf2 E|29|sn25|en3|nl-29|nr-3|lf2|rf2 dangling_start|26 N|26||POINT(45 32) E|4|sn5|en26|nl30|nr4|lf0|rf0 E|30|sn26|en6|nl-5|nr-4|lf0|rf0 closed|27 N|27||POINT(3 38) E|1|sn1|en27|nl31|nr-31|lf1|rf0 E|31|sn27|en1|nl1|nr-1|lf1|rf0 robust.1|E32|N30 N|28||POINT(20 10) N|29||POINT(10 20) N|30||POINT(9 12) E|32|sn28|en30|nl33|nr32|lf0|rf0 E|33|sn30|en29|nl-33|nr-32|lf0|rf0 robust.2|t|t Topology 'city_data' dropped ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addisonode.sql�������������������������������������0000644�0000000�0000000�00000003242�11722777314�023441� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to WARNING; \set VERBOSITY terse -- Usual city_data input \i load_topology.sql -- NULL exceptions select ST_AddIsoNode(NULL, 0, 'POINT(1 4)'); select ST_AddIsoNode('tt', 0, NULL); select ST_AddIsoNode('tt', NULL, NULL); select ST_AddIsoNode(NULL, NULL, NULL); -- Wrong topology name select ST_AddIsoNode('wrong_name', 0, 'POINT(1 4)'); select ST_AddIsoNode('', 0, 'POINT(1 4)'); -- Negative idface'; select ST_AddIsoNode('city_data', -1, 'POINT(1 4)'); -- Wrong idface select ST_AddIsoNode('city_data', 5, 'POINT(5 33)'); -- in face 9 select ST_AddIsoNode('city_data', 9, 'POINT(39 18)'); -- in face 5 -- Coincident nodes'; select ST_AddIsoNode('city_data', 0, 'POINT(21 22)'); select ST_AddIsoNode('city_data', NULL, 'POINT(21 22)'); select ST_AddIsoNode('city_data', 1, 'POINT(21 22)'); -- Smart creation ISO Node (without know idface)'; -- in face 5 select 1 as id, ST_AddIsoNode('city_data', NULL, 'POINT(39 18)') as n into nn; insert into nn -- in universe select '2', ST_AddIsoNode('city_data', NULL, 'POINT(50 18)'); insert into nn -- in face 9 select '3', ST_AddIsoNode('city_data', NULL, 'POINT(5 33)'); -- Explicit face insert into nn -- in face 5 select '4', ST_AddIsoNode('city_data', 5, 'POINT(42 18)'); insert into nn -- in universe select '5', ST_AddIsoNode('city_data', 0, 'POINT(50 17)'); insert into nn -- in face 9 select '6', ST_AddIsoNode('city_data', 9, 'POINT(5 32)'); SELECT 'T'||t.id, n.node_id, n.containing_face FROM nn t, city_data.node n WHERE t.n = n.node_id ORDER BY t.id; -- TODO: test for bug #1503 --SELECT 'T5', st_addisonode('city_data', 22, 'POINT(28.5 32.5)'); DROP TABLE nn; select topology.DropTopology('city_data'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_remedgenewface_expected����������������������������0000644�0000000�0000000�00000016577�11741354335�025366� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - non-existent edge 0 ERROR: SQL/MM Spatial exception - non-existent edge 143 RN(25)| RN(25)/nodes|+|21|1 RN(25)/nodes|-|21| RN(25)/nodes|+|22|1 RN(25)/nodes|-|22| RN(25)/edges|-|25|-25|25|1|1 RN(4)| RN(4)/nodes|+|5|0 RN(4)/nodes|-|5| RN(4)/edges|-|4|-5|4|0|0 RN(4)/edges|+|5|-5|5|0|0 RN(4)/edges|-|5|-4|5|0|0 RN(26)|10 RN(26)/nodes|+|20|10 RN(26)/nodes|-|20| RN(26)/nodes|+|21|10 RN(26)/nodes|-|21|1 RN(26)/nodes|+|22|10 RN(26)/nodes|-|22|1 RN(26)/edges|+|1|1|-1|10|0 RN(26)/edges|-|1|1|-1|1|0 RN(26)/edges|-|26|26|-26|9|1 RN(26)/faces|-|1|SRID=4326;POLYGON((3 30,3 38,16 38,16 30,3 30)) RN(26)/faces|-|9|SRID=4326;POLYGON((4 31,4 34,7 34,7 31,4 31)) RN(26)/faces|+|10|SRID=4326;POLYGON((3 30,3 38,16 38,16 30,3 30)) RN(9)|11 RN(9)/edges|+|6|7|-21|0|11 RN(9)/edges|-|6|7|-21|0|3 RN(9)/edges|-|9|19|-22|3|6 RN(9)/edges|+|12|20|22|11|0 RN(9)/edges|-|12|20|22|6|0 RN(9)/edges|+|19|-6|-10|11|4 RN(9)/edges|-|19|-6|-10|3|4 RN(9)/edges|+|20|19|13|11|7 RN(9)/edges|-|20|-9|13|6|7 RN(9)/edges|+|21|6|-22|0|11 RN(9)/edges|-|21|6|9|0|3 RN(9)/edges|+|22|21|12|0|11 RN(9)/edges|-|22|21|12|0|6 RN(9)/faces|-|3|SRID=4326;POLYGON((9 14,9 22,21 22,21 14,9 14)) RN(9)/faces|-|6|SRID=4326;POLYGON((9 6,9 14,21 14,21 6,9 6)) RN(9)/faces|+|11|SRID=4326;POLYGON((9 6,9 22,21 22,21 6,9 6)) RN(19)|12 RN(19)/edges|+|6|7|-21|0|12 RN(19)/edges|-|6|7|-21|0|11 RN(19)/edges|+|7|8|-6|0|12 RN(19)/edges|-|7|8|-19|0|4 RN(19)/edges|+|10|-20|17|7|12 RN(19)/edges|-|10|-20|17|7|4 RN(19)/edges|+|12|20|22|12|0 RN(19)/edges|-|12|20|22|11|0 RN(19)/edges|+|17|-7|11|12|5 RN(19)/edges|-|17|-7|11|4|5 RN(19)/edges|-|19|-6|-10|11|4 RN(19)/edges|+|20|-10|13|12|7 RN(19)/edges|-|20|19|13|11|7 RN(19)/edges|+|21|6|-22|0|12 RN(19)/edges|-|21|6|-22|0|11 RN(19)/edges|+|22|21|12|0|12 RN(19)/edges|-|22|21|12|0|11 RN(19)/faces|-|4|SRID=4326;POLYGON((21 14,21 22,35 22,35 14,21 14)) RN(19)/faces|-|11|SRID=4326;POLYGON((9 6,9 22,21 22,21 6,9 6)) RN(19)/faces|+|12|SRID=4326;POLYGON((9 6,9 22,35 22,35 6,9 6)) RN(10)|13 RN(10)/edges|+|6|7|-21|0|13 RN(10)/edges|-|6|7|-21|0|12 RN(10)/edges|+|7|8|-6|0|13 RN(10)/edges|-|7|8|-6|0|12 RN(10)/edges|-|10|-20|17|7|12 RN(10)/edges|+|12|20|22|13|0 RN(10)/edges|-|12|20|22|12|0 RN(10)/edges|+|13|18|-12|13|0 RN(10)/edges|-|13|18|-12|7|0 RN(10)/edges|+|17|-7|11|13|5 RN(10)/edges|-|17|-7|11|12|5 RN(10)/edges|+|18|17|14|13|8 RN(10)/edges|-|18|10|14|7|8 RN(10)/edges|+|20|-20|13|13|13 RN(10)/edges|-|20|-10|13|12|7 RN(10)/edges|+|21|6|-22|0|13 RN(10)/edges|-|21|6|-22|0|12 RN(10)/edges|+|22|21|12|0|13 RN(10)/edges|-|22|21|12|0|12 RN(10)/faces|-|7|SRID=4326;POLYGON((21 6,21 14,35 14,35 6,21 6)) RN(10)/faces|-|12|SRID=4326;POLYGON((9 6,9 22,35 22,35 6,9 6)) RN(10)/faces|+|13|SRID=4326;POLYGON((9 6,9 22,35 22,35 6,9 6)) RN(20)| RN(20)/nodes|+|14|13 RN(20)/nodes|-|14| RN(20)/edges|+|12|13|22|13|0 RN(20)/edges|-|12|20|22|13|0 RN(20)/edges|-|20|-20|13|13|13 RN(15)| RN(15)/edges|+|8|-8|-17|0|0 RN(15)/edges|-|8|-15|-17|0|5 RN(15)/edges|+|11|-16|-18|0|8 RN(15)/edges|-|11|15|-18|5|8 RN(15)/edges|-|15|-8|-16|5|0 RN(15)/edges|+|17|-7|11|13|0 RN(15)/edges|-|17|-7|11|13|5 RN(15)/faces|-|5|SRID=4326;POLYGON((35 14,35 22,47 22,47 14,35 14)) RN(2)| RN(2)/nodes|+|4|0 RN(2)/nodes|-|4|2 RN(2)/edges|-|2|3|-2|2|0 RN(2)/edges|+|3|-3|3|0|0 RN(2)/edges|-|3|-3|2|2|2 RN(2)/faces|-|2|SRID=4326;POLYGON((17 30,17 40,31 40,31 30,17 30)) NE(27)|27 NE(27)/edges|+|3|-27|3|14|14 NE(27)/edges|-|3|-3|3|0|0 NE(27)/edges|+|27|27|-3|0|14 NE(27)/faces|+|14|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) RN(27)| RN(27)/edges|+|3|-3|3|0|0 RN(27)/edges|-|3|-27|3|14|14 RN(27)/edges|-|27|27|-3|0|14 RN(27)/faces|-|14|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) NE(28)|28 NE(28)/edges|+|3|28|3|15|15 NE(28)/edges|-|3|-3|3|0|0 NE(28)/edges|+|28|-3|-28|15|0 NE(28)/faces|+|15|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) RN(28)| RN(28)/edges|+|3|-3|3|0|0 RN(28)/edges|-|3|28|3|15|15 RN(28)/edges|-|28|-3|-28|15|0 RN(28)/faces|-|15|SRID=4326;POLYGON((20 27,20 35,30 35,30 27,20 27)) NE(29)|29 NE(29)/edges|+|3|-3|29|16|16 NE(29)/edges|-|3|-3|3|0|0 NE(29)/edges|+|29|3|-29|16|0 NE(29)/faces|+|16|SRID=4326;POLYGON((22 30,22 37,28 37,28 30,22 30)) RN(29)| RN(29)/edges|+|3|-3|3|0|0 RN(29)/edges|-|3|-3|29|16|16 RN(29)/edges|-|29|3|-29|16|0 RN(29)/faces|-|16|SRID=4326;POLYGON((22 30,22 37,28 37,28 30,22 30)) NE(30)|30 NE(31)|31 NE(30,31)/nodes|+|4| NE(30,31)/nodes|-|4|0 NE(30,31)/edges|+|3|31|3|0|0 NE(30,31)/edges|-|3|-3|3|0|0 NE(30,31)/edges|+|30|-31|30|17|17 NE(30,31)/edges|+|31|-3|-30|0|17 NE(30,31)/faces|+|17|SRID=4326;POLYGON((18 35,18 40,25 40,25 35,18 35)) RN(31)| RN(31)/edges|+|3|-30|3|0|0 RN(31)/edges|-|3|31|3|0|0 RN(31)/edges|+|30|-3|30|0|0 RN(31)/edges|-|30|-31|30|17|17 RN(31)/edges|-|31|-3|-30|0|17 RN(31)/faces|-|17|SRID=4326;POLYGON((18 35,18 40,25 40,25 35,18 35)) NE(32)|32 NE(32)/edges|+|3|-32|3|18|18 NE(32)/edges|-|3|-30|3|0|0 NE(32)/edges|+|30|-3|30|18|18 NE(32)/edges|-|30|-3|30|0|0 NE(32)/edges|+|32|32|-30|0|18 NE(32)/faces|+|18|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) RN(32)| RN(32)/edges|+|3|-30|3|0|0 RN(32)/edges|-|3|-32|3|18|18 RN(32)/edges|+|30|-3|30|0|0 RN(32)/edges|-|30|-3|30|18|18 RN(32)/edges|-|32|32|-30|0|18 RN(32)/faces|-|18|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) NE(33)|33 NE(33)/edges|+|3|33|3|19|19 NE(33)/edges|-|3|-30|3|0|0 NE(33)/edges|+|30|-3|30|19|19 NE(33)/edges|-|30|-3|30|0|0 NE(33)/edges|+|33|-30|-33|19|0 NE(33)/faces|+|19|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) RN(33)| RN(33)/edges|+|3|-30|3|0|0 RN(33)/edges|-|3|33|3|19|19 RN(33)/edges|+|30|-3|30|0|0 RN(33)/edges|-|30|-3|30|19|19 RN(33)/edges|-|33|-30|-33|19|0 RN(33)/faces|-|19|SRID=4326;POLYGON((18 27,18 40,28 40,28 27,18 27)) NE(34)|34 NE(34)/edges|+|3|-30|34|0|0 NE(34)/edges|-|3|-30|3|0|0 NE(34)/edges|+|34|3|-34|0|20 NE(34)/faces|+|20|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) RN(34)| RN(34)/edges|+|3|-30|3|0|0 RN(34)/edges|-|3|-30|34|0|0 RN(34)/edges|-|34|3|-34|0|20 RN(34)/faces|-|20|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) NE(35)|35 NE(35)/edges|+|3|-30|-35|0|0 NE(35)/edges|-|3|-30|3|0|0 NE(35)/edges|+|35|35|3|21|0 NE(35)/faces|+|21|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) RN(35)| RN(35)/edges|+|3|-30|3|0|0 RN(35)/edges|-|3|-30|-35|0|0 RN(35)/edges|-|35|35|3|21|0 RN(35)/faces|-|21|SRID=4326;POLYGON((22 27,22 30,28 30,28 27,22 27)) Topology 'city_data' dropped BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT features.land_parcels.the_geom SRID:0 TYPE:MULTIPOLYGON DIMS:2 features.city_streets.the_geom SRID:0 TYPE:MULTILINESTRING DIMS:2 features.traffic_signs.the_geom SRID:0 TYPE:MULTIPOINT DIMS:2 ERROR: TopoGeom 4 in layer 3 (features.city_streets.feature) cannot be represented dropping edge 3 ERROR: TopoGeom 2 in layer 3 (features.city_streets.feature) cannot be represented dropping edge 4 ERROR: TopoGeom 2 in layer 3 (features.city_streets.feature) cannot be represented dropping edge 5 ERROR: TopoGeom 2 in layer 1 (features.land_parcels.feature) cannot be represented healing faces 5 and 4 RN(11)|relations_before:|18 RN(11)|10 RN(11)|relations_after:|17 ERROR: TopoGeom 3 in layer 1 (features.land_parcels.feature) cannot be represented healing faces 10 and 0 ERROR: TopoGeom 3 in layer 1 (features.land_parcels.feature) cannot be represented healing faces 0 and 10 RN(11)|P1|t RN(11)|P2|t RN(11)|P3|t RN(11)|P4|t RN(11)|P5|t Topology 'city_data' dropped ���������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeo_addpoint.sql����������������������������������0000644�0000000�0000000�00000004372�12115657320�024154� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; \i load_topology.sql -- Invalid calls SELECT 'invalid', TopoGeo_addPoint('city_data', 'LINESTRING(36 26, 38 30)'); SELECT 'invalid', TopoGeo_addPoint('city_data', 'MULTIPOINT((36 26))'); SELECT 'invalid', TopoGeo_addPoint('invalid', 'POINT(36 26)'); -- Save max node id select 'node'::text as what, max(node_id) INTO city_data.limits FROM city_data.node; -- Isolated point in universal face SELECT 'iso_uni', TopoGeo_addPoint('city_data', 'POINT(38 26)'); -- Isolated point in face 3 SELECT 'iso_f3', TopoGeo_addPoint('city_data', 'POINT(16 18)'); -- Existing isolated node SELECT 'iso_ex', TopoGeo_addPoint('city_data', 'POINT(38 26)'); -- Existing isolated node within tolerance SELECT 'iso_ex_tol', TopoGeo_addPoint('city_data', 'POINT(38 27)', 1.5); -- Existing non-isolated node SELECT 'noniso_ex', TopoGeo_addPoint('city_data', 'POINT(25 30)'); -- Existing non-isolated node within tolerance (closer to edge) SELECT 'noniso_ex_tol', TopoGeo_addPoint('city_data', 'POINT(26 30.2)', 3); -- Splitting edge SELECT 'split', TopoGeo_addPoint('city_data', 'POINT(26 30.2)', 1); -- Check effect on nodes SELECT 'N', n.node_id, n.containing_face, ST_AsText(n.geom) FROM city_data.node n WHERE n.node_id > ( SELECT max FROM city_data.limits WHERE what = 'node'::text ) ORDER BY n.node_id; -- Check effect on edges (there should be one split) WITH limits AS ( SELECT max FROM city_data.limits WHERE what = 'node'::text ) SELECT 'E', n.edge_id, n.start_node, n.end_node FROM city_data.edge n, limits m WHERE n.start_node > m.max OR n.end_node > m.max ORDER BY n.edge_id; -- Test precision SELECT 'prec1', 'N' || topogeo_addpoint('city_data', 'POINT(39 26)', 2); SELECT 'prec2', 'N' || topogeo_addpoint('city_data', 'POINT(39 26)', 1); SELECT 'prec3', 'N' || topogeo_addpoint('city_data', 'POINT(36 26)', 1); SELECT DropTopology('city_data'); -- See http://trac.osgeo.org/postgis/ticket/2033 SELECT 'tt2033.start', CreateTopology('t',0,0,true) > 0; SELECT 'tt2033', 'E' || topogeo_addlinestring('t', 'LINESTRING(0 0 0,0 1 0,0 2 1)'); SELECT 'tt2033', 'N' || topogeo_addpoint('t', 'POINT(0.2 1 1)', 0.5); SELECT 'tt2033', 'NC', node_id, ST_AsText(geom) FROM t.node ORDER BY node_id; SELECT 'tt2033.end' || DropTopology('t'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_getfaceedges.sql�����������������������������������0000644�0000000�0000000�00000002264�11722777314�023741� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; SELECT topology.CreateTopology('tt') > 0; SELECT topology.ST_GetFaceEdges(null, null); SELECT topology.ST_GetFaceEdges('tt', null); SELECT topology.ST_GetFaceEdges(null, 1); SELECT topology.ST_GetFaceEdges('', 1); SELECT topology.ST_GetFaceEdges('NonExistent', 1); SELECT 'E'||topology.AddEdge('tt', 'LINESTRING(2 2, 2 8)'); -- 1 SELECT 'E'||topology.AddEdge('tt', 'LINESTRING(2 8, 8 8)'); -- 2 SELECT 'E'||topology.AddEdge('tt', 'LINESTRING(8 8, 8 2, 2 2)'); -- 3 SELECT 'E'||topology.AddEdge('tt', 'LINESTRING(0 0, 0 10, 10 10)'); -- 4 SELECT 'E'||topology.AddEdge('tt', 'LINESTRING(0 0, 10 0)'); -- 5 SELECT 'E'||topology.AddEdge('tt', 'LINESTRING(10 10, 10 5)'); -- 6 SELECT 'E'||topology.AddEdge('tt', 'LINESTRING(10 0, 10 5)'); -- 7 SELECT 'F' || topology.AddFace('tt', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 8, 8 8, 8 2, 2 2))'); SELECT 'F' || topology.AddFace('tt', 'POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))'); SELECT 'F1', (topology.ST_GetFaceEdges('tt', 1)).*; SELECT 'F2', (topology.ST_GetFaceEdges('tt', 2)).*; SELECT 'F0', (topology.ST_GetFaceEdges('tt', 0)).*; SELECT topology.DropTopology('tt'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeo_addpoint_expected�����������������������������0000644�0000000�0000000�00000001161�12115657320�025230� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: Invalid geometry type (LINESTRING) passed to TopoGeo_AddPoint, expected POINT ERROR: Invalid geometry type (MULTIPOINT) passed to TopoGeo_AddPoint, expected POINT ERROR: No topology with name "invalid" in topology.topology iso_uni|23 iso_f3|24 iso_ex|23 iso_ex_tol|23 noniso_ex|2 noniso_ex_tol|2 split|25 N|23|0|POINT(38 26) N|24|3|POINT(16 18) N|25||POINT(26 30) E|2|2|25 E|27|25|2 prec1|N23 prec2|N26 prec3|N27 Topology 'city_data' dropped tt2033.start|t tt2033|E1 tt2033|N3 tt2033|NC|1|POINT Z (0 0 0) tt2033|NC|2|POINT Z (0 2 1) tt2033|NC|3|POINT Z (0 1 1) tt2033.endTopology 't' dropped ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/createtopogeom_expected�������������������������������0000644�0000000�0000000�00000002140�11722777314�024716� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t ERROR: No layer with id 1 is registered with topology MiX l1|1 ERROR: A Layer of type 1 cannot contain a TopoGeometry of type 2 ERROR: A Layer of type 1 cannot contain a TopoGeometry of type 3 ERROR: A Layer of type 1 cannot contain a TopoGeometry of type 4 ERROR: Node 78 does not exist in topology MiX n1|1 1|2|1 ERROR: Invalid TopoGeometry type 5 (must be in the range 1..4) ERROR: Invalid TopoGeometry type 0 (must be in the range 1..4) l2|2 n2|2 e1|1 ERROR: A TopoGeometry of type 2 cannot contain topology elements of type 1 L1|MULTILINESTRING((0 0,10 0)) l3|3 e2|2 f1|1 ERROR: A Layer of type 3 cannot contain a TopoGeometry of type 2 ERROR: A TopoGeometry of type 3 cannot contain topology elements of type 2 A1|MULTIPOLYGON(((10 0,0 0,5 5,10 0))) l4|4 MP|MULTIPOINT(0 0) ML|MULTILINESTRING((0 0,10 0)) MA|MULTIPOLYGON(((10 0,0 0,5 5,10 0))) MM|GEOMETRYCOLLECTION(POLYGON((10 0,0 0,5 5,10 0)),LINESTRING(0 0,10 0),POINT(0 0)) POINT EMPTY|MULTIPOINT EMPTY LINESTRING EMPTY|MULTILINESTRING EMPTY POLYGON EMPTY|MULTIPOLYGON EMPTY GEOMETRYCOLLECTION EMPTY|GEOMETRYCOLLECTION EMPTY Topology 'MiX' dropped ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_getfaceedges_expected������������������������������0000644�0000000�0000000�00000000641�11722777314�025021� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - invalid topology name E1 E2 E3 E4 E5 E6 E7 F1 F2 F1|1|-4 F1|2|5 F1|3|7 F1|4|-6 F1|5|1 F1|6|2 F1|7|3 F2|1|-1 F2|2|-3 F2|3|-2 F0|1|4 F0|2|6 F0|3|-7 F0|4|-5 Topology 'tt' dropped �����������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/layertrigger.sql��������������������������������������0000644�0000000�0000000�00000004047�11722777314�023326� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; select 'seq_reset', setval('topology.topology_id_seq', 1, false); select 't1', 'topology_id:' || topology.CreateTopology('t1'); --insert into t1.node(geom, containing_face) values ('POINT( 0 0)', 0); --create table t1.l1 (id serial); --select 't1.l1',topology.AddTopoGeometryColumn('t1', 't1', 'l1', 'g', 'POINT'); --insert INTO t1.l1(g) VALUES (topology.CreateTopoGeom('t1', 1, 1, '{{1,1}}')); --select 't1.rel',* from t1.relation; select 't2', 'topology_id:' || topology.CreateTopology('t2'); insert into t2.node(geom, containing_face) values ('POINT( 0 0)', 0); insert into t2.node(geom, containing_face) values ('POINT( 1 1)', 0); create table t2.l1 (id serial); select 't2.l1', topology.AddTopoGeometryColumn('t2', 't2', 'l1', 'g', 'POINT'); insert into t2.l1(g) VALUES (topology.CreateTopoGeom('t2', 1, 1, '{{1,1}}')); --insert into t2.l1(g) VALUES (topology.CreateTopoGeom('t2', 1, 1, '{{2,1}}')); select 't2.rel',* from t2.relation; --always the trigger must reject an update update topology.layer set topology_id = 123; select 'after update: topology.layer ',* from topology.layer; -- the trigger must reject the delete because some referenced features still exists BEGIN; delete from t1.relation; delete from t2.relation; select 't2.rel',* from t2.relation; delete from topology.layer; select 'after delete n.1: topology.layer count', count(*) from topology.layer; ROLLBACK; -- the trigger must reject because the t2.relation is not empty. -- This test failed due to #950 -- (there's no row in t2.relation where topogeo_id matches the topology id) BEGIN; delete from t2.l1; delete from topology.layer where topology_id=2; select 'after delete n.2: topology.layer count', count(*) from topology.layer; ROLLBACK; -- the trigger must accept the delete delete from t2.l1; delete from t2.relation; delete from topology.layer where topology_id=2; select 'after delete n.3: topology.layer count', count(*) from topology.layer; select topology.DropTopology('t2'); select topology.DropTopology('t1'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/totopogeom.sql����������������������������������������0000644�0000000�0000000�00000021111�12116041146�022772� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; select 'create', createtopology('tt') > 0; -- Invalid calls select totopogeom('POINT(0 0)'::geometry, 'unexistent', 1); select totopogeom('POINT(0 0)'::geometry, 'tt', 1); select totopogeom(null, 'tt', 1); select totopogeom('POINT(0 0)'::geometry, '', 1); select totopogeom('POINT(0 0)'::geometry, null, 1); select totopogeom('POINT(0 0)'::geometry, 'tt', null::integer); -- Create simple puntual layer (will be layer 1) CREATE TABLE tt.f_puntal(id serial); SELECT 'simple_puntual_layer', AddTopoGeometryColumn('tt', 'tt', 'f_puntal','g','POINT'); -- Create a hierarchical layer (will be layer 2) CREATE TABLE tt.f_hier(id serial); SELECT 'hierarchical_layer', AddTopoGeometryColumn('tt', 'tt', 'f_hier','g','COLLECTION', 1); -- Create a lineal layer (will be layer 3) CREATE TABLE tt.f_lineal(id serial); SELECT 'simple_lineal_layer', AddTopoGeometryColumn('tt', 'tt', 'f_lineal','g','LINE'); -- Create an areal layer (will be layer 4) CREATE TABLE tt.f_areal(id serial); SELECT 'simple_areal_layer', AddTopoGeometryColumn('tt', 'tt', 'f_areal','g','POLYGON'); -- Create a collection layer (will be layer 5) CREATE TABLE tt.f_coll(id serial); SELECT 'simple_collection_layer', AddTopoGeometryColumn('tt', 'tt', 'f_coll','g','COLLECTION'); -- A couple more invalid calls select totopogeom('POINT(0 0)'::geometry, 'tt', 30); -- non existent layer select totopogeom('POINT(0 0)'::geometry, 'tt', 2); -- invalid (hierarchical) layer select totopogeom('LINESTRING(0 0, 10 10)'::geometry, 'tt', 1); -- invalid (puntual) layer select totopogeom('LINESTRING(0 0, 10 10)'::geometry, 'tt', 4); -- invalid (areal) layer select totopogeom('MULTIPOINT(0 0, 10 10)'::geometry, 'tt', 3); -- invalid (lineal) layer select totopogeom('MULTIPOINT(0 0, 10 10)'::geometry, 'tt', 4); -- invalid (areal) layer select totopogeom('POLYGON((0 0, 10 10, 10 0, 0 0))'::geometry, 'tt', 1); -- invalid (puntal) layer select totopogeom('POLYGON((0 0, 10 10, 10 0, 0 0))'::geometry, 'tt', 3); -- invalid (lineal) layer -- Unsupported feature types select totopogeom('TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )'::geometry, 'tt', 4); -- TODO: support ! select totopogeom('TRIANGLE ((0 0, 0 9, 9 0, 0 0))'::geometry, 'tt', 4); -- TODO: support ! select totopogeom('CIRCULARSTRING(0 0, 1 1, 1 0)'::geometry, 'tt', 3); -- Unsupported feature type -- Convert a point with inp as ( select 'POINT(0 0)' ::geometry as g) select St_AsText(g), ST_Equals(totopogeom(g, 'tt', 1)::geometry, g) from inp; -- Convert a line with inp as ( select 'LINESTRING(0 10, 10 10)' ::geometry as g) select St_AsText(g), ST_Equals(totopogeom(g, 'tt', 3)::geometry, g) from inp; -- Convert a polygon with inp as ( select 'POLYGON((0 20, 10 20, 5 30, 0 20),(2 22, 8 22, 5 28, 2 22))' ::geometry as g) select St_AsText(g), ST_Equals(totopogeom(g, 'tt', 4)::geometry, g) from inp; -- Convert a multipoint with inp as ( select 'MULTIPOINT((0 -10),(5 -10))' ::geometry as g) select St_AsText(g), ST_Equals(totopogeom(g, 'tt', 1)::geometry, g) from inp; -- Convert a multiline with inp as ( select 'MULTILINESTRING((-1 10, -10 10),(-10 8, -2 9))' ::geometry as g) select St_AsText(g), ST_Equals(totopogeom(g, 'tt', 3)::geometry, g) from inp; -- Convert a multipolygon with inp as ( select 'MULTIPOLYGON(((100 20, 110 20, 105 30, 100 20),(102 22, 108 22, 105 28, 102 22)),((80 20, 90 20, 90 60, 80 20)))' ::geometry as g) select St_AsText(g), ST_Equals(totopogeom(g, 'tt', 4)::geometry, g) from inp; -- Convert a collection with inp as ( select 'GEOMETRYCOLLECTION( POINT(-100 -100), LINESTRING(-100 -90,-90 -90), POLYGON((-100 -80,-90 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72,-98 -78)), MULTIPOINT(-100 -110,-95 -110), LINESTRING EMPTY, MULTILINESTRING((-101 -90,-110 -90),(-110 -92,-102 -91)), MULTIPOLYGON(((0 -80,10 -80,5 -70,0 -80),(2 -78,8 -78,5 -72,2 -78)),((-20 -80,-10 -80,-10 -40,-20 -80))) )' ::geometry as g), tg as ( select totopogeom(g, 'tt', 5) as g from inp ) select St_AsText(inp.g), st_astext(tg.g::geometry) from inp, tg; -- Convert some empties SELECT ST_AsText(toTopoGeom('POINT EMPTY', 'tt', 1)::geometry); SELECT ST_AsText(toTopoGeom('MULTIPOINT EMPTY', 'tt', 1)::geometry); SELECT ST_AsText(toTopoGeom('LINESTRING EMPTY', 'tt', 3)::geometry); SELECT ST_AsText(toTopoGeom('MULTILINESTRING EMPTY', 'tt', 3)::geometry); SELECT ST_AsText(toTopoGeom('POLYGON EMPTY', 'tt', 4)::geometry); SELECT ST_AsText(toTopoGeom('MULTIPOLYGON EMPTY', 'tt', 4)::geometry); SELECT ST_AsText(toTopoGeom('GEOMETRYCOLLECTION EMPTY', 'tt', 5)::geometry); -- Test with tolerance (expect to snap to POINT(-100 -100) with inp as ( select 'GEOMETRYCOLLECTION( POINT(-100 -100.5), LINESTRING(-100 -90,-90 -90.5), POLYGON((-100 -80,-89.5 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72.5,-98 -78)) )' ::geometry as g), tg as ( select totopogeom(g, 'tt', 5, 1) as g from inp ) select 'tolerance_1', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; -- Test with tolerance specified in topology record UPDATE topology.topology SET precision=1 WHERE name = 'tt'; with inp as ( select 'GEOMETRYCOLLECTION( POINT(-100 -100.5), LINESTRING(-100 -90,-90 -90.5), POLYGON((-100 -80,-89.5 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72.5,-98 -78)) )' ::geometry as g), tg as ( select totopogeom(g, 'tt', 5) as g from inp ) select 'tolerance_topo_1', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; -- Test without tolerance (expect to remain POINT(-100 -100.5) UPDATE topology.topology SET precision=0 WHERE name = 'tt'; with inp as ( select 'GEOMETRYCOLLECTION( POINT(-100 -100.5), LINESTRING(-100 -90,-90 -90.5), POLYGON((-100 -80,-89.5 -80,-95 -70,-100 -80),(-98 -78,-92 -78,-95 -72.5,-98 -78)) )' ::geometry as g), tg as ( select totopogeom(g, 'tt', 5) as g from inp ) select 'tolerance_0', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; -- Test usage with custom search_path (#1763) set search_path to "public"; with inp as ( select 'POINT(-100 -100.5)'::geometry as g), tg as ( select topology.totopogeom(g, 'tt', 1) as g from inp ) select 'custom_search_path', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; reset search_path; -- http://trac.osgeo.org/postgis/ticket/1790 UPDATE topology.topology SET precision=0 WHERE name = 'tt'; with inp as ( select 'GEOMETRYCOLLECTION( POINT(200 200), POINT(200 200) )' ::geometry as g), tg as ( select totopogeom(g, 'tt', 5) as g from inp ) select '#1790.1', ST_HausdorffDistance(inp.g, tg.g::geometry), ST_HausdorffDistance(tg.g::geometry, inp.g) FROM inp, tg; with inp as ( select 'GEOMETRYCOLLECTION( LINESTRING(300 300, 310 300), LINESTRING(300 300, 310 300) )' ::geometry as g), tg as ( select totopogeom(g, 'tt', 5) as g from inp ) select '#1790.2', ST_HausdorffDistance(inp.g, tg.g::geometry), ST_HausdorffDistance(tg.g::geometry, inp.g) FROM inp, tg; with inp as ( select 'GEOMETRYCOLLECTION( POLYGON((400 400, 450 450, 500 400, 400 400)), POLYGON((400 400, 450 450, 500 400, 400 400)) )' ::geometry as g), tg as ( select totopogeom(g, 'tt', 5) as g from inp ) select '#1790.3', ST_HausdorffDistance(inp.g, tg.g::geometry), ST_HausdorffDistance(tg.g::geometry, inp.g) FROM inp, tg; -- http://trac.osgeo.org/postgis/ticket/1968 with inp as ( select 'MULTILINESTRING ((0 0, 10 0),(5 0, 5 5))' ::geometry as g ), tg as ( select totopogeom(g, 'tt', 3) as g from inp ) SELECT '#1968.1', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; with inp as ( select ST_Translate( 'MULTILINESTRING ((0 0, 10 0),(5 0, 5 5),(0 0, 5 0),(5 0, 10 0))' ::geometry, 20, 0) as g ), tg as ( select totopogeom(g, 'tt', 3) as g from inp ) SELECT '#1968.2', ST_HausdorffDistance(inp.g, tg.g::geometry) FROM inp, tg; -- Test adding portions to an existing TopoGeometry INSERT INTO tt.f_areal (id, g) SELECT -1, toTopoGeom('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 'tt', 4); SELECT 'tgup1.1', id(t.g), st_area(t.g), count(r.*) FROM tt.f_areal t, tt.relation r WHERE t.id = -1 AND r.layer_id = 4 AND r.topogeo_id = id(t.g) GROUP BY id(t.g), st_area(t.g); UPDATE tt.f_areal SET g = toTopoGeom(st_translate(g, st_xmax(g::geometry)+1, 0), g); SELECT 'tgup1.2', id(t.g), st_area(t.g), count(r.*) FROM tt.f_areal t, tt.relation r WHERE t.id = -1 AND r.layer_id = 4 AND r.topogeo_id = id(t.g) GROUP BY id(t.g), st_area(t.g); -- now add a smaller area UPDATE tt.f_areal SET g = toTopoGeom(st_buffer(g, -1), g); SELECT 'tgup1.3', id(t.g), st_area(t.g), count(r.*) FROM tt.f_areal t, tt.relation r WHERE t.id = -1 AND r.layer_id = 4 AND r.topogeo_id = id(t.g) GROUP BY id(t.g), st_area(t.g); DROP TABLE tt.f_coll; DROP TABLE tt.f_areal; DROP TABLE tt.f_lineal; DROP TABLE tt.f_hier; DROP TABLE tt.f_puntal; select droptopology('tt'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addnode_expected��������������������������������������0000644�0000000�0000000�00000000472�11722777314�023305� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t p1|1 p1b|1 p2|2 p2b|2 ERROR: An edge crosses the given node. p3|3 p4|4 p5|5 post-p5|1|LINESTRING(0 10,5 10) post-p5|2|LINESTRING(5 10,10 10) p6|6 p7|7 1||POINT(0 0) 2||POINT(1 0) 3||POINT(0 10) 4||POINT(10 10) 5||POINT(5 10) 6||POINT(0 20) 7|1|POINT(5 25) Topology 'nodes' dropped t MiX|1 Topology 'Ul' dropped ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/validatetopology_expected�����������������������������0000644�0000000�0000000�00000000030�11765617042�025261� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#1789|---|| #1797|---|| ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/polygonize.sql����������������������������������������0000644�0000000�0000000�00000002324�11722777314�023021� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; SELECT topology.CreateTopology('tt') > 0; SELECT 'e1', topology.addEdge('tt', 'LINESTRING(0 0, 10 0)'); SELECT 'e2', topology.addEdge('tt', 'LINESTRING(10 0, 10 10)'); SELECT 'e3', topology.addEdge('tt', 'LINESTRING(0 10, 10 10)'); SELECT 'e4', topology.addEdge('tt', 'LINESTRING(0 0, 0 10)'); SELECT 'e5', topology.addEdge('tt', 'LINESTRING(0 0, 0 -10)'); SELECT 'e6', topology.addEdge('tt', 'LINESTRING(10 10, 20 10)'); SELECT 'e7', topology.addEdge('tt', 'LINESTRING(20 10, 20 0)'); SELECT 'e8', topology.addEdge('tt', 'LINESTRING(20 0, 10 0)'); SELECT 'e9', topology.addEdge('tt', 'LINESTRING(10 0, 0 -10)'); SELECT 'e10', topology.addEdge('tt', 'LINESTRING(2 2, 5 2, 2 5)'); SELECT 'e11', topology.addEdge('tt', 'LINESTRING(2 2, 2 5)'); -- Call, check linking SELECT topology.polygonize('tt'); SELECT face_id, Box2d(mbr) from tt.face ORDER by face_id; SELECT edge_id, left_face, right_face from tt.edge ORDER by edge_id; -- Call again and recheck linking (shouldn't change anything) SELECT topology.polygonize('tt'); SELECT face_id, Box2d(mbr) from tt.face ORDER by face_id; SELECT edge_id, left_face, right_face from tt.edge ORDER by edge_id; SELECT topology.DropTopology('tt'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/gettopogeomelements_expected��������������������������0000644�0000000�0000000�00000001130�12041034316�025744� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT 1|1|{3,3} 1|1|{6,3} 1|2|{4,3} 1|2|{7,3} 1|3|{5,3} 1|3|{8,3} 1|4|{2,3} 1|5|{1,3} 2|1|{14,1} 2|2|{13,1} 2|3|{6,1} 2|4|{4,1} 3|1|{9,2} 3|1|{10,2} 3|2|{4,2} 3|2|{5,2} 3|3|{25,2} 3|4|{3,2} 1|1|ARY|{{3,3},{6,3}} 1|2|ARY|{{4,3},{7,3}} 1|3|ARY|{{5,3},{8,3}} 1|4|ARY|{{2,3}} 1|5|ARY|{{1,3}} 2|1|ARY|{{14,1}} 2|2|ARY|{{13,1}} 2|3|ARY|{{6,1}} 2|4|ARY|{{4,1}} 3|1|ARY|{{9,2},{10,2}} 3|2|ARY|{{4,2},{5,2}} 3|3|ARY|{{25,2}} 3|4|ARY|{{3,2}} t2060|P1|{{3,3},{6,3}} t2060|P2|{{4,3},{7,3}} t2060|P3|{{5,3},{8,3}} t2060|P4|{{2,3}} t2060|P5|{{1,3}} Topology 'city_data' dropped ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addface2.5d.sql���������������������������������������0000644�0000000�0000000�00000001370�11722777314�022562� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; -- Test with zero tolerance SELECT topology.CreateTopology('tt3d', -1, 0, true) > 0; -- Create 4 edges SELECT 'e1', topology.addEdge('tt3d', 'LINESTRING(0 0 10, 10 0 20)'); SELECT 'e2', topology.addEdge('tt3d', 'LINESTRING(10 0 20, 10 10 30)'); SELECT 'e3', topology.addEdge('tt3d', 'LINESTRING(0 10 20, 10 10 30)'); SELECT 'e4', topology.addEdge('tt3d', 'LINESTRING(0 0 10, 0 10 20)'); -- Register a face with no holes SELECT 'f1', topology.addFace('tt3d', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- Check added faces SELECT face_id, st_asewkt(mbr) from tt3d.face ORDER by face_id; -- Check linking SELECT edge_id, left_face, right_face from tt3d.edge ORDER by edge_id; SELECT topology.DropTopology('tt3d'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_addisonode_expected��������������������������������0000644�0000000�0000000�00000001314�12103307514�024503� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - null argument ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - invalid topology name ERROR: SQL/MM Spatial exception - not within face ERROR: SQL/MM Spatial exception - not within face ERROR: SQL/MM Spatial exception - not within face ERROR: SQL/MM Spatial exception - coincident node ERROR: SQL/MM Spatial exception - coincident node ERROR: SQL/MM Spatial exception - coincident node T1|23|5 T2|24|0 T3|25|9 T4|26|5 T5|27|0 T6|28|9 Topology 'city_data' dropped ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/gml_expected������������������������������������������0000644�0000000�0000000�00000162504�11722777314�022473� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT BEGIN 1 2 3 COMMIT S1-vanilla|<gml:TopoPoint><gml:directedNode><gml:Node gml:id="N14"><gml:pointProperty><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">21 14</gml:pos></gml:Point></gml:pointProperty></gml:Node></gml:directedNode></gml:TopoPoint> S2-vanilla|<gml:TopoPoint><gml:directedNode><gml:Node gml:id="N13"><gml:pointProperty><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">35 14</gml:pos></gml:Point></gml:pointProperty></gml:Node></gml:directedNode></gml:TopoPoint> S3-vanilla|<gml:TopoPoint><gml:directedNode><gml:Node gml:id="N6"><gml:pointProperty><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">57 33</gml:pos></gml:Point></gml:pointProperty></gml:Node></gml:directedNode></gml:TopoPoint> S4-vanilla|<gml:TopoPoint><gml:directedNode><gml:Node gml:id="N4"><gml:pointProperty><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">20 37</gml:pos></gml:Point></gml:pointProperty></gml:Node></gml:directedNode></gml:TopoPoint> S1-noprefix|<TopoPoint><directedNode><Node id="N14"><pointProperty><Point srsName="urn:ogc:def:crs:EPSG::4326"><pos srsDimension="2">21 14</pos></Point></pointProperty></Node></directedNode></TopoPoint> S2-noprefix|<TopoPoint><directedNode><Node id="N13"><pointProperty><Point srsName="urn:ogc:def:crs:EPSG::4326"><pos srsDimension="2">35 14</pos></Point></pointProperty></Node></directedNode></TopoPoint> S3-noprefix|<TopoPoint><directedNode><Node id="N6"><pointProperty><Point srsName="urn:ogc:def:crs:EPSG::4326"><pos srsDimension="2">57 33</pos></Point></pointProperty></Node></directedNode></TopoPoint> S4-noprefix|<TopoPoint><directedNode><Node id="N4"><pointProperty><Point srsName="urn:ogc:def:crs:EPSG::4326"><pos srsDimension="2">20 37</pos></Point></pointProperty></Node></directedNode></TopoPoint> S1-customprefix|<cstm:TopoPoint><cstm:directedNode><cstm:Node cstm:id="N14"><cstm:pointProperty><cstm:Point srsName="urn:ogc:def:crs:EPSG::4326"><cstm:pos srsDimension="2">21 14</cstm:pos></cstm:Point></cstm:pointProperty></cstm:Node></cstm:directedNode></cstm:TopoPoint> S2-customprefix|<cstm:TopoPoint><cstm:directedNode><cstm:Node cstm:id="N13"><cstm:pointProperty><cstm:Point srsName="urn:ogc:def:crs:EPSG::4326"><cstm:pos srsDimension="2">35 14</cstm:pos></cstm:Point></cstm:pointProperty></cstm:Node></cstm:directedNode></cstm:TopoPoint> S3-customprefix|<cstm:TopoPoint><cstm:directedNode><cstm:Node cstm:id="N6"><cstm:pointProperty><cstm:Point srsName="urn:ogc:def:crs:EPSG::4326"><cstm:pos srsDimension="2">57 33</cstm:pos></cstm:Point></cstm:pointProperty></cstm:Node></cstm:directedNode></cstm:TopoPoint> S4-customprefix|<cstm:TopoPoint><cstm:directedNode><cstm:Node cstm:id="N4"><cstm:pointProperty><cstm:Point srsName="urn:ogc:def:crs:EPSG::4326"><cstm:pos srsDimension="2">20 37</cstm:pos></cstm:Point></cstm:pointProperty></cstm:Node></cstm:directedNode></cstm:TopoPoint> S4-latlon|<TopoPoint><directedNode><Node id="N4"><pointProperty><Point srsName="EPSG:4326"><pos>37 20</pos></Point></pointProperty></Node></directedNode></TopoPoint> N1N2N3-noprefix|<TopoPoint><directedNode><Node id="N1"><pointProperty><Point srsName="urn:ogc:def:crs:EPSG::4326"><pos srsDimension="2">8 30</pos></Point></pointProperty></Node></directedNode><directedNode><Node id="N2"><pointProperty><Point srsName="urn:ogc:def:crs:EPSG::4326"><pos srsDimension="2">25 30</pos></Point></pointProperty></Node></directedNode><directedNode><Node id="N3"><pointProperty><Point srsName="urn:ogc:def:crs:EPSG::4326"><pos srsDimension="2">25 35</pos></Point></pointProperty></Node></directedNode></TopoPoint> R3-vanilla|<gml:TopoCurve><gml:directedEdge><gml:Edge gml:id="E25"><gml:directedNode orientation="-"><gml:Node gml:id="N21"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N22"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 35 13 35</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:TopoCurve> R4-vanilla|<gml:TopoCurve><gml:directedEdge><gml:Edge gml:id="E3"><gml:directedNode orientation="-"><gml:Node gml:id="N2"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N3"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">25 30 25 35</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:TopoCurve> R3-noprefix|<TopoCurve><directedEdge><Edge id="E25"><directedNode orientation="-"><Node id="N21"/></directedNode><directedNode><Node id="N22"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 35 13 35</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></TopoCurve> R4-noprefix|<TopoCurve><directedEdge><Edge id="E3"><directedNode orientation="-"><Node id="N2"/></directedNode><directedNode><Node id="N3"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">25 30 25 35</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></TopoCurve> R3-customprefix|<cstm:TopoCurve><cstm:directedEdge><cstm:Edge cstm:id="E25"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N21"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N22"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 35 13 35</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:TopoCurve> R4-customprefix|<cstm:TopoCurve><cstm:directedEdge><cstm:Edge cstm:id="E3"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N2"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N3"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">25 30 25 35</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:TopoCurve> R1-vanilla|<gml:TopoCurve><gml:directedEdge><gml:Edge gml:id="E9"><gml:directedNode orientation="-"><gml:Node gml:id="N15"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 14 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E10"><gml:directedNode orientation="-"><gml:Node gml:id="N13"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 14 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:TopoCurve> R2-vanilla|<gml:TopoCurve><gml:directedEdge><gml:Edge gml:id="E4"><gml:directedNode orientation="-"><gml:Node gml:id="N5"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N6"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">36 38 38 35 41 34 42 33 45 32 47 28 50 28 52 32 57 33</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E5"><gml:directedNode orientation="-"><gml:Node gml:id="N7"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N6"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">41 40 45 40 47 42 62 41 61 38 59 39 57 36 57 33</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:TopoCurve> R1-noprefix|<TopoCurve><directedEdge><Edge id="E9"><directedNode orientation="-"><Node id="N15"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E10"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></TopoCurve> R2-noprefix|<TopoCurve><directedEdge><Edge id="E4"><directedNode orientation="-"><Node id="N5"/></directedNode><directedNode><Node id="N6"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">36 38 38 35 41 34 42 33 45 32 47 28 50 28 52 32 57 33</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E5"><directedNode orientation="-"><Node id="N7"/></directedNode><directedNode><Node id="N6"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">41 40 45 40 47 42 62 41 61 38 59 39 57 36 57 33</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></TopoCurve> R1-customprefix|<cstm:TopoCurve><cstm:directedEdge><cstm:Edge cstm:id="E9"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N15"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 14 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E10"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 14 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:TopoCurve> R2-customprefix|<cstm:TopoCurve><cstm:directedEdge><cstm:Edge cstm:id="E4"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N5"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N6"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">36 38 38 35 41 34 42 33 45 32 47 28 50 28 52 32 57 33</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E5"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N7"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N6"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">41 40 45 40 47 42 62 41 61 38 59 39 57 36 57 33</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:TopoCurve> P4-vanilla|<gml:TopoSurface><gml:directedFace><gml:Face gml:id="F2"><gml:directedEdge><gml:Edge gml:id="E2"><gml:directedNode orientation="-"><gml:Node gml:id="N2"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N2"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">25 30 31 30 31 40 17 40 17 30 25 30</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace></gml:TopoSurface> P5-vanilla|<gml:TopoSurface><gml:directedFace><gml:Face gml:id="F1"><gml:directedEdge><gml:Edge gml:id="E1"><gml:directedNode orientation="-"><gml:Node gml:id="N1"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N1"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">8 30 16 30 16 38 3 38 3 30 8 30</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E26"><gml:directedNode orientation="-"><gml:Node gml:id="N20"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N20"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">4 31 7 31 7 34 4 34 4 31</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace></gml:TopoSurface> P4-noprefix|<TopoSurface><directedFace><Face id="F2"><directedEdge><Edge id="E2"><directedNode orientation="-"><Node id="N2"/></directedNode><directedNode><Node id="N2"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">25 30 31 30 31 40 17 40 17 30 25 30</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace></TopoSurface> P5-noprefix|<TopoSurface><directedFace><Face id="F1"><directedEdge><Edge id="E1"><directedNode orientation="-"><Node id="N1"/></directedNode><directedNode><Node id="N1"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">8 30 16 30 16 38 3 38 3 30 8 30</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E26"><directedNode orientation="-"><Node id="N20"/></directedNode><directedNode><Node id="N20"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">4 31 7 31 7 34 4 34 4 31</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace></TopoSurface> P4-customprefix|<cstm:TopoSurface><cstm:directedFace><cstm:Face cstm:id="F2"><cstm:directedEdge><cstm:Edge cstm:id="E2"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N2"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N2"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">25 30 31 30 31 40 17 40 17 30 25 30</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace></cstm:TopoSurface> P5-customprefix|<cstm:TopoSurface><cstm:directedFace><cstm:Face cstm:id="F1"><cstm:directedEdge><cstm:Edge cstm:id="E1"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N1"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N1"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">8 30 16 30 16 38 3 38 3 30 8 30</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E26"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N20"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N20"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">4 31 7 31 7 34 4 34 4 31</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace></cstm:TopoSurface> P1-vanilla|<gml:TopoSurface><gml:directedFace><gml:Face gml:id="F3"><gml:directedEdge orientation="-"><gml:Edge gml:id="E6"><gml:directedNode orientation="-"><gml:Node gml:id="N16"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N17"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 22 21 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E19"><gml:directedNode orientation="-"><gml:Node gml:id="N14"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N17"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">21 14 21 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E9"><gml:directedNode orientation="-"><gml:Node gml:id="N15"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 14 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E21"><gml:directedNode orientation="-"><gml:Node gml:id="N15"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N16"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 14 9 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace><gml:directedFace><gml:Face gml:id="F6"><gml:directedEdge orientation="-"><gml:Edge gml:id="E9"><gml:directedNode orientation="-"><gml:Node gml:id="N15"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 14 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E20"><gml:directedNode orientation="-"><gml:Node gml:id="N9"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">21 6 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E12"><gml:directedNode orientation="-"><gml:Node gml:id="N8"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N9"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 6 21 6</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E22"><gml:directedNode orientation="-"><gml:Node gml:id="N8"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N15"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">9 6 9 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace></gml:TopoSurface> P2-vanilla|<gml:TopoSurface><gml:directedFace><gml:Face gml:id="F4"><gml:directedEdge orientation="-"><gml:Edge gml:id="E7"><gml:directedNode orientation="-"><gml:Node gml:id="N17"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N18"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">21 22 35 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E17"><gml:directedNode orientation="-"><gml:Node gml:id="N13"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N18"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 14 35 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E10"><gml:directedNode orientation="-"><gml:Node gml:id="N13"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 14 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E19"><gml:directedNode orientation="-"><gml:Node gml:id="N14"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N17"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">21 14 21 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace><gml:directedFace><gml:Face gml:id="F7"><gml:directedEdge><gml:Edge gml:id="E10"><gml:directedNode orientation="-"><gml:Node gml:id="N13"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 14 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E18"><gml:directedNode orientation="-"><gml:Node gml:id="N10"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N13"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 6 35 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E13"><gml:directedNode orientation="-"><gml:Node gml:id="N9"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N10"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">21 6 35 6</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E20"><gml:directedNode orientation="-"><gml:Node gml:id="N9"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N14"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">21 6 21 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace></gml:TopoSurface> P3-vanilla|<gml:TopoSurface><gml:directedFace><gml:Face gml:id="F5"><gml:directedEdge orientation="-"><gml:Edge gml:id="E8"><gml:directedNode orientation="-"><gml:Node gml:id="N18"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N19"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 22 47 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E15"><gml:directedNode orientation="-"><gml:Node gml:id="N12"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N19"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">47 14 47 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E11"><gml:directedNode orientation="-"><gml:Node gml:id="N13"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N12"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 14 47 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E17"><gml:directedNode orientation="-"><gml:Node gml:id="N13"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N18"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 14 35 22</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace><gml:directedFace><gml:Face gml:id="F8"><gml:directedEdge orientation="-"><gml:Edge gml:id="E11"><gml:directedNode orientation="-"><gml:Node gml:id="N13"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N12"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 14 47 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E16"><gml:directedNode orientation="-"><gml:Node gml:id="N11"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N12"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">47 6 47 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge><gml:Edge gml:id="E14"><gml:directedNode orientation="-"><gml:Node gml:id="N10"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N11"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 6 47 6</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge><gml:directedEdge orientation="-"><gml:Edge gml:id="E18"><gml:directedNode orientation="-"><gml:Node gml:id="N10"/></gml:directedNode><gml:directedNode><gml:Node gml:id="N13"/></gml:directedNode><gml:curveProperty><gml:Curve srsName="urn:ogc:def:crs:EPSG::4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">35 6 35 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveProperty></gml:Edge></gml:directedEdge></gml:Face></gml:directedFace></gml:TopoSurface> P1-noprefix|<TopoSurface><directedFace><Face id="F3"><directedEdge orientation="-"><Edge id="E6"><directedNode orientation="-"><Node id="N16"/></directedNode><directedNode><Node id="N17"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 22 21 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E19"><directedNode orientation="-"><Node id="N14"/></directedNode><directedNode><Node id="N17"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">21 14 21 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E9"><directedNode orientation="-"><Node id="N15"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E21"><directedNode orientation="-"><Node id="N15"/></directedNode><directedNode><Node id="N16"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 14 9 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace><directedFace><Face id="F6"><directedEdge orientation="-"><Edge id="E9"><directedNode orientation="-"><Node id="N15"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E20"><directedNode orientation="-"><Node id="N9"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">21 6 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E12"><directedNode orientation="-"><Node id="N8"/></directedNode><directedNode><Node id="N9"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 6 21 6</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E22"><directedNode orientation="-"><Node id="N8"/></directedNode><directedNode><Node id="N15"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">9 6 9 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace></TopoSurface> P2-noprefix|<TopoSurface><directedFace><Face id="F4"><directedEdge orientation="-"><Edge id="E7"><directedNode orientation="-"><Node id="N17"/></directedNode><directedNode><Node id="N18"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">21 22 35 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E17"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N18"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 14 35 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E10"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E19"><directedNode orientation="-"><Node id="N14"/></directedNode><directedNode><Node id="N17"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">21 14 21 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace><directedFace><Face id="F7"><directedEdge><Edge id="E10"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E18"><directedNode orientation="-"><Node id="N10"/></directedNode><directedNode><Node id="N13"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 6 35 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E13"><directedNode orientation="-"><Node id="N9"/></directedNode><directedNode><Node id="N10"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">21 6 35 6</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E20"><directedNode orientation="-"><Node id="N9"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">21 6 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace></TopoSurface> P3-noprefix|<TopoSurface><directedFace><Face id="F5"><directedEdge orientation="-"><Edge id="E8"><directedNode orientation="-"><Node id="N18"/></directedNode><directedNode><Node id="N19"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 22 47 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E15"><directedNode orientation="-"><Node id="N12"/></directedNode><directedNode><Node id="N19"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">47 14 47 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E11"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N12"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 14 47 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E17"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N18"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 14 35 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace><directedFace><Face id="F8"><directedEdge orientation="-"><Edge id="E11"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N12"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 14 47 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E16"><directedNode orientation="-"><Node id="N11"/></directedNode><directedNode><Node id="N12"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">47 6 47 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E14"><directedNode orientation="-"><Node id="N10"/></directedNode><directedNode><Node id="N11"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 6 47 6</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E18"><directedNode orientation="-"><Node id="N10"/></directedNode><directedNode><Node id="N13"/></directedNode><curveProperty><Curve srsName="urn:ogc:def:crs:EPSG::4326"><segments><LineStringSegment><posList srsDimension="2">35 6 35 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace></TopoSurface> P1-customprefix|<cstm:TopoSurface><cstm:directedFace><cstm:Face cstm:id="F3"><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E6"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N16"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N17"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 22 21 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E19"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N17"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">21 14 21 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E9"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N15"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 14 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E21"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N15"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N16"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 14 9 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace><cstm:directedFace><cstm:Face cstm:id="F6"><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E9"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N15"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 14 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E20"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N9"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">21 6 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E12"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N8"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N9"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 6 21 6</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E22"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N8"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N15"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">9 6 9 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace></cstm:TopoSurface> P2-customprefix|<cstm:TopoSurface><cstm:directedFace><cstm:Face cstm:id="F4"><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E7"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N17"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N18"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">21 22 35 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E17"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N18"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 14 35 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E10"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 14 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E19"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N17"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">21 14 21 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace><cstm:directedFace><cstm:Face cstm:id="F7"><cstm:directedEdge><cstm:Edge cstm:id="E10"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 14 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E18"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N10"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 6 35 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E13"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N9"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N10"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">21 6 35 6</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E20"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N9"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N14"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">21 6 21 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace></cstm:TopoSurface> P3-customprefix|<cstm:TopoSurface><cstm:directedFace><cstm:Face cstm:id="F5"><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E8"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N18"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N19"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 22 47 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E15"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N12"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N19"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">47 14 47 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E11"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N12"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 14 47 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E17"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N18"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 14 35 22</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace><cstm:directedFace><cstm:Face cstm:id="F8"><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E11"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N12"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 14 47 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E16"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N11"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N12"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">47 6 47 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge><cstm:Edge cstm:id="E14"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N10"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N11"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 6 47 6</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge><cstm:directedEdge orientation="-"><cstm:Edge cstm:id="E18"><cstm:directedNode orientation="-"><cstm:Node cstm:id="N10"/></cstm:directedNode><cstm:directedNode><cstm:Node cstm:id="N13"/></cstm:directedNode><cstm:curveProperty><cstm:Curve srsName="urn:ogc:def:crs:EPSG::4326"><cstm:segments><cstm:LineStringSegment><cstm:posList srsDimension="2">35 6 35 14</cstm:posList></cstm:LineStringSegment></cstm:segments></cstm:Curve></cstm:curveProperty></cstm:Edge></cstm:directedEdge></cstm:Face></cstm:directedFace></cstm:TopoSurface> R2-visited|<TopoCurve><directedEdge><Edge id="E4"><directedNode orientation="-"><Node id="N5"/></directedNode><directedNode><Node id="N6"/></directedNode><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>36 38 38 35 41 34 42 33 45 32 47 28 50 28 52 32 57 33</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E5"><directedNode orientation="-"><Node id="N7"/></directedNode><directedNode xlink:href="#N6" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>41 40 45 40 47 42 62 41 61 38 59 39 57 36 57 33</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></TopoCurve> S1-visited|<TopoPoint><directedNode><Node id="N14"><pointProperty><Point srsName="EPSG:4326"><pos>21 14</pos></Point></pointProperty></Node></directedNode></TopoPoint> S3-visited|<TopoPoint><directedNode xlink:href="#N6" /></TopoPoint> R1-visited|<TopoCurve><directedEdge><Edge id="E9"><directedNode orientation="-"><Node id="N15"/></directedNode><directedNode xlink:href="#N14" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>9 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E10"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode xlink:href="#N14" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>35 14 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></TopoCurve> N1N6N14-visited|<TopoPoint><directedNode><Node id="N1"><pointProperty><Point srsName="EPSG:4326"><pos>8 30</pos></Point></pointProperty></Node></directedNode><directedNode xlink:href="#N6" /><directedNode xlink:href="#N14" /></TopoPoint> P2-visited|<TopoSurface><directedFace><Face id="F4"><directedEdge orientation="-"><Edge id="E7"><directedNode orientation="-" xlink:href="#N17" /><directedNode><Node id="N18"/></directedNode><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>21 22 35 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E17"><directedNode orientation="-" xlink:href="#N13" /><directedNode xlink:href="#N18" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>35 14 35 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-" xlink:href="#E10" /><directedEdge orientation="-" xlink:href="#E19" /></Face></directedFace><directedFace><Face id="F7"><directedEdge xlink:href="#E10" /><directedEdge><Edge id="E18"><directedNode orientation="-"><Node id="N10"/></directedNode><directedNode xlink:href="#N13" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>35 6 35 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E13"><directedNode orientation="-" xlink:href="#N9" /><directedNode xlink:href="#N10" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>21 6 35 6</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-" xlink:href="#E20" /></Face></directedFace></TopoSurface> P1-visited|<TopoSurface><directedFace><Face id="F3"><directedEdge orientation="-"><Edge id="E6"><directedNode orientation="-"><Node id="N16"/></directedNode><directedNode><Node id="N17"/></directedNode><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>9 22 21 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E19"><directedNode orientation="-" xlink:href="#N14" /><directedNode xlink:href="#N17" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>21 14 21 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge xlink:href="#E9" /><directedEdge orientation="-"><Edge id="E21"><directedNode orientation="-" xlink:href="#N15" /><directedNode xlink:href="#N16" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>9 14 9 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace><directedFace><Face id="F6"><directedEdge orientation="-" xlink:href="#E9" /><directedEdge><Edge id="E20"><directedNode orientation="-"><Node id="N9"/></directedNode><directedNode xlink:href="#N14" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>21 6 21 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="E12"><directedNode orientation="-"><Node id="N8"/></directedNode><directedNode xlink:href="#N9" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>9 6 21 6</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E22"><directedNode orientation="-" xlink:href="#N8" /><directedNode xlink:href="#N15" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>9 6 9 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></Face></directedFace></TopoSurface> F3F4-visited|<TopoSurface><directedFace xlink:href="#F3" /><directedFace xlink:href="#F4" /></TopoSurface> E7E8-visited|<TopoCurve><directedEdge xlink:href="#E7" /><directedEdge><Edge id="E8"><directedNode orientation="-" xlink:href="#N18" /><directedNode><Node id="N19"/></directedNode><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>35 22 47 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge></TopoCurve> P3-visited-idprefix|<TopoSurface><directedFace><Face id="cd-F5"><directedEdge orientation="-" xlink:href="#cd-E8" /><directedEdge><Edge id="cd-E15"><directedNode orientation="-"><Node id="cd-N12"/></directedNode><directedNode xlink:href="#cd-N19" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>47 14 47 22</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="cd-E11"><directedNode orientation="-" xlink:href="#cd-N13" /><directedNode xlink:href="#cd-N12" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>35 14 47 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-" xlink:href="#cd-E17" /></Face></directedFace><directedFace><Face id="cd-F8"><directedEdge orientation="-" xlink:href="#cd-E11" /><directedEdge><Edge id="cd-E16"><directedNode orientation="-"><Node id="cd-N11"/></directedNode><directedNode xlink:href="#cd-N12" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>47 6 47 14</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge><Edge id="cd-E14"><directedNode orientation="-" xlink:href="#cd-N10" /><directedNode xlink:href="#cd-N11" /><curveProperty><Curve srsName="EPSG:4326"><segments><LineStringSegment><posList>35 6 47 6</posList></LineStringSegment></segments></Curve></curveProperty></Edge></directedEdge><directedEdge orientation="-" xlink:href="#cd-E18" /></Face></directedFace></TopoSurface> R1-gml2|<TopoCurve><directedEdge><Edge id="E9"><directedNode orientation="-"><Node id="N15"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><LineString srsName="EPSG:4326"><coordinates>9,14 21,14</coordinates></LineString></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E10"><directedNode orientation="-"><Node id="N13"/></directedNode><directedNode><Node id="N14"/></directedNode><curveProperty><LineString srsName="EPSG:4326"><coordinates>35,14 21,14</coordinates></LineString></curveProperty></Edge></directedEdge></TopoCurve> R2-gml2|<TopoCurve><directedEdge><Edge id="E4"><directedNode orientation="-"><Node id="N5"/></directedNode><directedNode><Node id="N6"/></directedNode><curveProperty><LineString srsName="EPSG:4326"><coordinates>36,38 38,35 41,34 42,33 45,32 47,28 50,28 52,32 57,33</coordinates></LineString></curveProperty></Edge></directedEdge><directedEdge orientation="-"><Edge id="E5"><directedNode orientation="-"><Node id="N7"/></directedNode><directedNode><Node id="N6"/></directedNode><curveProperty><LineString srsName="EPSG:4326"><coordinates>41,40 45,40 47,42 62,41 61,38 59,39 57,36 57,33</coordinates></LineString></curveProperty></Edge></directedEdge></TopoCurve> R3-gml2|<TopoCurve><directedEdge><Edge id="E25"><directedNode orientation="-"><Node id="N21"/></directedNode><directedNode><Node id="N22"/></directedNode><curveProperty><LineString srsName="EPSG:4326"><coordinates>9,35 13,35</coordinates></LineString></curveProperty></Edge></directedEdge></TopoCurve> R4-gml2|<TopoCurve><directedEdge><Edge id="E3"><directedNode orientation="-"><Node id="N2"/></directedNode><directedNode><Node id="N3"/></directedNode><curveProperty><LineString srsName="EPSG:4326"><coordinates>25,30 25,35</coordinates></LineString></curveProperty></Edge></directedEdge></TopoCurve> S1-gml2|<TopoPoint><directedNode><Node id="N14"><pointProperty><Point srsName="EPSG:4326"><coordinates>21,14</coordinates></Point></pointProperty></Node></directedNode></TopoPoint> S2-gml2|<TopoPoint><directedNode><Node id="N13"><pointProperty><Point srsName="EPSG:4326"><coordinates>35,14</coordinates></Point></pointProperty></Node></directedNode></TopoPoint> S3-gml2|<TopoPoint><directedNode><Node id="N6"><pointProperty><Point srsName="EPSG:4326"><coordinates>57,33</coordinates></Point></pointProperty></Node></directedNode></TopoPoint> S4-gml2|<TopoPoint><directedNode><Node id="N4"><pointProperty><Point srsName="EPSG:4326"><coordinates>20,37</coordinates></Point></pointProperty></Node></directedNode></TopoPoint> Topology 'city_data' dropped ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/addface.sql�������������������������������������������0000644�0000000�0000000�00000016717�11722777314�022204� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������set client_min_messages to ERROR; -- Test with zero tolerance SELECT topology.CreateTopology('tt') > 0; -- Register a face in absence of edges (exception expected) SELECT 'f*', topology.addFace('tt', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- Create 4 edges SELECT 'e1', topology.addEdge('tt', 'LINESTRING(0 0, 10 0)'); SELECT 'e2', topology.addEdge('tt', 'LINESTRING(10 0, 10 10)'); SELECT 'e3', topology.addEdge('tt', 'LINESTRING(0 10, 10 10)'); SELECT 'e4', topology.addEdge('tt', 'LINESTRING(0 0, 0 10)'); -- Add one edge only incident on a vertex SELECT 'e5', topology.addEdge('tt', 'LINESTRING(0 0, 0 -10)'); -- Add 3 more edges closing a square to the right, -- all edges with same direction SELECT 'e6', topology.addEdge('tt', 'LINESTRING(10 10, 20 10)'); SELECT 'e7', topology.addEdge('tt', 'LINESTRING(20 10, 20 0)'); SELECT 'e8', topology.addEdge('tt', 'LINESTRING(20 0, 10 0)'); -- Register a face with no holes SELECT 'f1', topology.addFace('tt', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- Register the _same_ face again SELECT 'f1*', topology.addFace('tt', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- Register a face with no holes matching all edges in the same direction SELECT 'f2', topology.addFace('tt', 'POLYGON((10 10, 20 10, 20 0, 10 0, 10 10))'); -- Check added faces SELECT face_id, Box2d(mbr) from tt.face ORDER by face_id; -- Check linking SELECT edge_id, left_face, right_face from tt.edge ORDER by edge_id; -- Force re-registration of an existing face SELECT 'f1-force', topology.addFace('tt', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', true); -- re-check added faces and linking SELECT face_id, Box2d(mbr) from tt.face ORDER by face_id; SELECT edge_id, left_face, right_face from tt.edge ORDER by edge_id; SELECT topology.DropTopology('tt'); -- Test topology with MixedCase SELECT topology.CreateTopology('Ul') > 0; SELECT 'MiX-e1', topology.addEdge('Ul', 'LINESTRING(0 0, 10 0)'); SELECT 'MiX-e2', topology.addEdge('Ul', 'LINESTRING(10 0, 10 10)'); SELECT 'MiX-e3', topology.addEdge('Ul', 'LINESTRING(0 10, 10 10)'); SELECT 'MiX-e4', topology.addEdge('Ul', 'LINESTRING(0 0, 0 10)'); SELECT 'MiX-f1', topology.addFace('Ul', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); SELECT topology.DropTopology('Ul'); -- Test polygons with holes SELECT topology.CreateTopology('t2') > 0; -- Edges forming two squares SELECT 't2.e1', topology.addEdge('t2', 'LINESTRING(0 0, 10 0)'); SELECT 't2.e2', topology.addEdge('t2', 'LINESTRING(10 0, 10 10)'); SELECT 't2.e3', topology.addEdge('t2', 'LINESTRING(0 10, 10 10)'); SELECT 't2.e4', topology.addEdge('t2', 'LINESTRING(0 0, 0 10)'); SELECT 't2.e5', topology.addEdge('t2', 'LINESTRING(10 10, 20 10)'); SELECT 't2.e6', topology.addEdge('t2', 'LINESTRING(20 10, 20 0)'); SELECT 't2.e7', topology.addEdge('t2', 'LINESTRING(20 0, 10 0)'); -- Clockwise hole within the square on the left SELECT 't2.e8', topology.addEdge('t2', 'LINESTRING(1 1, 1 2, 2 2, 2 1, 1 1)'); -- Counter-clockwise hole within the square on the left SELECT 't2.e9', topology.addEdge('t2', 'LINESTRING(3 1,4 1,4 2,3 2,3 1)'); -- Multi-edge hole within the square on the right SELECT 't2.e10', topology.addEdge('t2', 'LINESTRING(12 2, 14 2, 14 4)'); SELECT 't2.e11', topology.addEdge('t2', 'LINESTRING(12 2, 12 4, 14 4)'); -- Register left face with two holes SELECT 't2.f1', topology.addFace('t2', 'POLYGON((10 5, 10 10,0 10, 0 0,10 0,10 5), (1 1,2 1,2 2,1 2,1 1), (3 1,3 2,4 2,4 1,3 1))' ); -- Register right face with one hole SELECT 't2.f2', topology.addFace('t2', 'POLYGON((20 0,10 0,10 10,20 10,20 0), (12 2,14 2,14 4,12 4, 12 2))' ); -- Register left hole in left square SELECT 't2.f3', topology.addFace('t2', 'POLYGON((1 1,2 1,2 2,1 2,1 1))' ); -- Register right hole in left square SELECT 't2.f4', topology.addFace('t2', 'POLYGON((3 1,4 1,4 2,3 2,3 1))' ); -- Register hole in right face SELECT 't2.f5', topology.addFace('t2', 'POLYGON((12 2,12 4,14 4,14 2,12 2))' ); -- Attempt to register a not-fully-defined face SELECT topology.addFace('t2', 'POLYGON((12 2,12 5,14 5,14 2,12 2))' ); -- Check added faces SELECT face_id, Box2d(mbr) from t2.face ORDER by face_id; -- Check linking SELECT edge_id, left_face, right_face from t2.edge ORDER by edge_id; SELECT topology.DropTopology('t2'); -- -- Test edge touching face ring on both endpoints but not covered -- (E1 with F1) -- -- -- N2 +-------. -- |\ F1 | -- E1 | \ | E3 -- |F2\ | -- | / | -- | /E2 | -- |/ | -- N1 +-------' -- SELECT topology.CreateTopology('t3') > 0; SELECT 't3.e1', topology.addEdge('t3', 'LINESTRING(0 0, 0 10)'); SELECT 't3.e2', topology.addEdge('t3', 'LINESTRING(0 10, 5 5, 0 0)'); SELECT 't3.e3', topology.addEdge('t3', 'LINESTRING(0 10, 10 10, 10 0, 0 0)'); -- Register F1 SELECT 't3.f1', topology.addFace('t3', 'POLYGON((5 5, 0 10, 10 10, 10 0, 0 0, 5 5))'); -- Register F2 SELECT 't3.f2', topology.addFace('t3', 'POLYGON((0 0, 5 5, 0 10, 0 0))'); -- Check added faces SELECT face_id, Box2d(mbr) from t3.face ORDER by face_id; -- Check linking SELECT edge_id, left_face, right_face from t3.edge ORDER by edge_id; SELECT topology.DropTopology('t3'); -- -- Test proper updating of left/right face for contained edges -- and nodes -- SELECT topology.CreateTopology('t4') > 0; SELECT 'N' || topology.addNode('t4', 'POINT(2 6)'); UPDATE t4.node set containing_face = 0 WHERE node_id = 1; SELECT 'E' || topology.addEdge('t4', 'LINESTRING(0 0,10 0)'); SELECT 'E' || topology.addEdge('t4', 'LINESTRING(10 0,10 10)'); SELECT 'E' || topology.addEdge('t4', 'LINESTRING(10 10,0 10)'); SELECT 'E' || topology.addEdge('t4', 'LINESTRING(0 0,0 10)'); SELECT 'E' || topology.addEdge('t4', 'LINESTRING(0 0,5 5)'); SELECT 'E' || topology.addEdge('t4', 'LINESTRING(5 5,6 5)'); SELECT 'E' || topology.addEdge('t4', 'LINESTRING(0 10,8 8,10 0)'); select 'F' || topology.addface('t4','POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- Check edges and nodes SELECT 'E'||edge_id, left_face, right_face from t4.edge ORDER by edge_id; SELECT 'N'||node_id, containing_face from t4.node ORDER by node_id; SELECT topology.DropTopology('t4'); -- -- Test narrow face. See ticket #1302. -- { -- SELECT '#1302', topology.CreateTopology('tt') > 0; SELECT '#1302', 'E' || topology.addEdge('tt', '01020000000300000000917E9BA468294100917E9B8AEA2841C976BE1FA4682941C976BE9F8AEA2841B39ABE1FA46829415ACCC29F8AEA2841'); SELECT '#1302', 'E' || topology.addEdge('tt', '010200000003000000B39ABE1FA46829415ACCC29F8AEA284137894120A4682941C976BE9F8AEA284100917E9BA468294100917E9B8AEA2841'); SELECT '#1302', 'F' || topology.addFace('tt', '0103000000010000000500000000917E9BA468294100917E9B8AEA2841C976BE1FA4682941C976BE9F8AEA2841B39ABE1FA46829415ACCC29F8AEA284137894120A4682941C976BE9F8AEA284100917E9BA468294100917E9B8AEA2841'); SELECT '#1302', 'E' || edge_id, 'L' || left_face, 'R' || right_face FROM tt.edge_data ORDER BY edge_id; SELECT '#1302', topology.DropTopology('tt'); -- } -- -- Test face ring with endpoint matching edge endpoint -- and tricky numbers (see #1383) -- { -- SELECT '#1383', CreateTopology('tt') > 0; SELECT '#1383', 'E' || addEdge('tt', 'LINESTRING(-0.1 -10, -0.2 0)'); SELECT '#1383', 'E' || addEdge('tt', 'LINESTRING(-0.2 0, -1e-8 0)'); SELECT '#1383', 'E' || addEdge('tt', 'LINESTRING(-1e-8 0, 1 0, -0.1 -10)'); SELECT '#1383', 'F' || addFace('tt', 'POLYGON((-1e-8 0, 1 0, -0.1 -10, -0.2 0, -0.2 0, -1e-8 0))'); SELECT '#1383', 'E' || edge_id, 'L' || left_face, 'R' || right_face FROM tt.edge_data ORDER BY edge_id; SELECT '#1383', DropTopology('tt'); -- } �������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/topogeo_addpolygon_expected���������������������������0000644�0000000�0000000�00000001505�11766406036�025577� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN t 9 22 26 COMMIT max|node|22 max|edge|26 max|face|9 ERROR: Invalid geometry type (MULTILINESTRING) passed to TopoGeo_AddPolygon, expected POLYGON ERROR: Invalid geometry type (POINT) passed to TopoGeo_AddPolygon, expected POLYGON ERROR: No topology with name "invalid" in topology.topology iso_uni|10 N|23||POINT(36 26) E|27|sn23|en23 F|10 iso_uni_hole|11 N|24||POINT(9 28) N|25||POINT(15 25) E|28|sn24|en24 E|29|sn25|en25 F|11 F|12 ex|4 ex_union|6 ex_union|7 half|4 E|30|sn14|en18 F|13 split|4 split|13 N|26||POINT(28 18) E|30|sn14|en26 E|31|sn26|en18 E|32|sn26|en13 E|33|sn17|en26 F|14 F|15 ex_hole|3 ex_hole|5 ex_hole|6 ex_hole|7 ex_hole|8 ex_hole|13 ex_hole|14 ex_hole|15 ex_hole_snap|3 ex_hole_snap|5 ex_hole_snap|6 ex_hole_snap|7 ex_hole_snap|8 ex_hole_snap|13 ex_hole_snap|14 ex_hole_snap|15 Topology 'city_data' dropped �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/regress/st_remedgemodface.sql���������������������������������0000644�0000000�0000000�00000036713�12057075162�024262� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to ERROR; INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' ); -- Import city_data \i load_topology-4326.sql -- Utility functions for the test { CREATE TEMP TABLE orig_node_summary(node_id integer, containing_face integer); CREATE OR REPLACE FUNCTION save_nodes() RETURNS VOID AS $$ TRUNCATE TABLE orig_node_summary; INSERT INTO orig_node_summary SELECT node_id, containing_face FROM city_data.node; $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION check_nodes(lbl text) RETURNS TABLE (l text, o text, node_id int, containing_face int) AS $$ DECLARE sql1 text; sql2 text; q text; BEGIN sql1 := 'node_id, containing_face FROM city_data.node'; sql2 := 'node_id, containing_face FROM orig_node_summary'; q := '(' || 'SELECT ' || quote_literal(lbl) || ',''+'' as op,' || sql1 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''+'',' || sql2 || ') UNION ( ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql2 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql1 || ') ORDER BY node_id, op'; RAISE DEBUG '%', q; RETURN QUERY EXECUTE q; END $$ LANGUAGE 'plpgsql'; CREATE TEMP TABLE orig_edge_summary (edge_id integer, next_left_edge integer, next_right_edge integer, left_face integer, right_face integer); CREATE OR REPLACE FUNCTION save_edges() RETURNS VOID AS $$ TRUNCATE orig_edge_summary; INSERT INTO orig_edge_summary SELECT edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge_data; $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION check_edges(lbl text) RETURNS TABLE (l text, o text, edge_id int, next_left_edge int, next_right_edge int, left_face int, right_face int) AS $$ DECLARE rec RECORD; sql1 text; sql2 text; q text; BEGIN sql1 := 'edge_id, next_left_edge, next_right_edge, left_face, right_face FROM city_data.edge_data'; sql2 := 'edge_id, next_left_edge, next_right_edge, left_face, right_face FROM orig_edge_summary'; q := '(' || 'SELECT ' || quote_literal(lbl) || ',''+'' as op,' || sql1 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''+'',' || sql2 || ') UNION ( ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql2 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql1 || ') order by edge_id, op'; RAISE DEBUG '%', q; RETURN QUERY EXECUTE q; END $$ LANGUAGE 'plpgsql'; CREATE TEMP TABLE orig_face_summary(face_id integer, mbr geometry); CREATE OR REPLACE FUNCTION save_faces() RETURNS VOID AS $$ TRUNCATE orig_face_summary; INSERT INTO orig_face_summary SELECT face_id, mbr FROM city_data.face; $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION check_faces(lbl text) RETURNS TABLE (l text, o text, face_id int, mbr text) AS $$ DECLARE sql1 text; sql2 text; q text; BEGIN sql1 := 'face_id, ST_AsEWKT(mbr) FROM city_data.face'; sql2 := 'face_id, ST_AsEWKT(mbr) FROM orig_face_summary'; q := '(' || 'SELECT ' || quote_literal(lbl) || ',''+'' as op,' || sql1 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''+'',' || sql2 || ') UNION ( ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql2 || ' EXCEPT ' || 'SELECT ' || quote_literal(lbl) || ',''-'',' || sql1 || ') ORDER BY face_id, op'; RAISE DEBUG '%', q; RETURN QUERY EXECUTE q; END $$ language 'plpgsql'; -- } -- Save current state SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Bogus calls -- { SELECT topology.ST_RemEdgeModFace('city_data', null); SELECT topology.ST_RemEdgeModFace(null, 1); SELECT topology.ST_RemEdgeModFace('', 1); SELECT topology.ST_RemEdgeModFace('city_data', 0); -- non-existent SELECT topology.ST_RemEdgeModFace('city_data', 143); -- non-existent SELECT * FROM check_nodes('bogus'); SELECT * FROM check_edges('bogus'); SELECT * FROM check_faces('bogus'); -- } -- Remove isolated edge SELECT 'RM(25)', topology.ST_RemEdgeModFace('city_data', 25); SELECT * FROM check_nodes('RM(25)/nodes'); SELECT * FROM check_edges('RM(25)/edges'); SELECT * FROM check_faces('RM(25)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Remove edge not forming a ring SELECT 'RM(4)', topology.ST_RemEdgeModFace('city_data', 4); SELECT * FROM check_nodes('RM(4)/nodes'); SELECT * FROM check_edges('RM(4)/edges'); SELECT * FROM check_faces('RM(4)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 1 and 9 -- should drop them and create a new face -- New face has the same mbr as old one SELECT 'RM(26)', topology.ST_RemEdgeModFace('city_data', 26); SELECT * FROM check_nodes('RM(26)/nodes'); SELECT * FROM check_edges('RM(26)/edges'); SELECT * FROM check_faces('RM(26)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 3 and 6 -- should drop them and create a new face -- New face has a mbr being the union of the dropped faces SELECT 'RM(9)', topology.ST_RemEdgeModFace('city_data', 9); SELECT * FROM check_nodes('RM(9)/nodes'); SELECT * FROM check_edges('RM(9)/edges'); SELECT * FROM check_faces('RM(9)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 4 and 11 -- should drop them and create a new face -- New face has a mbr being the union of the dropped faces SELECT 'RM(19)', topology.ST_RemEdgeModFace('city_data', 19); SELECT * FROM check_nodes('RM(19)/nodes'); SELECT * FROM check_edges('RM(19)/edges'); SELECT * FROM check_faces('RM(19)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Heal faces 7 and 12 -- should drop them and create a new face -- New face has a mbr equal to previous face 12. -- This healing leaves edge 20 dangling SELECT 'RM(10)', topology.ST_RemEdgeModFace('city_data', 10); SELECT * FROM check_nodes('RM(10)/nodes'); SELECT * FROM check_edges('RM(10)/edges'); SELECT * FROM check_faces('RM(10)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Drop dangling edge, no faces change SELECT 'RM(20)', topology.ST_RemEdgeModFace('city_data', 20); SELECT * FROM check_nodes('RM(20)/nodes'); SELECT * FROM check_edges('RM(20)/edges'); SELECT * FROM check_faces('RM(20)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing face SELECT 'RM(15)', topology.ST_RemEdgeModFace('city_data', 15); SELECT * FROM check_nodes('RM(15)/nodes'); SELECT * FROM check_edges('RM(15)/edges'); SELECT * FROM check_faces('RM(15)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from the closing node and -- going inside. -- Closed edge is in CW order. SELECT 'RM(2)', topology.ST_RemEdgeModFace('city_data', 2); SELECT * FROM check_nodes('RM(2)/nodes'); SELECT * FROM check_edges('RM(2)/edges'); SELECT * FROM check_faces('RM(2)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge coming from inside and ending to the closing node -- Closed edge is in CW order. -- Requires reconstructing the outer ring SELECT 'NE(27)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 30 27, 20 27, 25 35)'); SELECT * FROM check_nodes('NE(27)/nodes'); SELECT * FROM check_edges('NE(27)/edges'); SELECT * FROM check_faces('NE(27)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(27)', topology.ST_RemEdgeModFace('city_data', 27); SELECT * FROM check_nodes('RM(27)/nodes'); SELECT * FROM check_edges('RM(27)/edges'); SELECT * FROM check_faces('RM(27)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge coming from inside and ending to the closing node -- Closed edge is in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(28)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 20 27, 30 27, 25 35)'); SELECT * FROM check_nodes('NE(28)/nodes'); SELECT * FROM check_edges('NE(28)/edges'); SELECT * FROM check_faces('NE(28)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(28)', topology.ST_RemEdgeModFace('city_data', 28); SELECT * FROM check_nodes('RM(28)/nodes'); SELECT * FROM check_edges('RM(28)/edges'); SELECT * FROM check_faces('RM(28)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from closing node and going inside. -- Closed edge is in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(29)', topology.ST_AddEdgeNewFaces('city_data', 2, 2, 'SRID=4326;LINESTRING(25 30, 28 37, 22 37, 25 30)'); SELECT * FROM check_nodes('NE(29)/nodes'); SELECT * FROM check_edges('NE(29)/edges'); SELECT * FROM check_faces('NE(29)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(29)', topology.ST_RemEdgeModFace('city_data', 29); SELECT * FROM check_nodes('RM(29)/nodes'); SELECT * FROM check_edges('RM(29)/edges'); SELECT * FROM check_faces('RM(29)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edges both inside and outside -- Closed edge in CW order. -- Requires adding an edge and reconstructing the outer ring SELECT 'NE(30)', topology.ST_AddEdgeNewFaces('city_data', 4, 3, 'SRID=4326;LINESTRING(20 37, 25 35)'); SELECT 'NE(31)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 18 35, 18 40, 25 35)'); SELECT * FROM check_nodes('NE(30,31)/nodes'); SELECT * FROM check_edges('NE(30,31)/edges'); SELECT * FROM check_faces('NE(30,31)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(31)', topology.ST_RemEdgeModFace('city_data', 31); SELECT * FROM check_nodes('RM(31)/nodes'); SELECT * FROM check_edges('RM(31)/edges'); SELECT * FROM check_faces('RM(31)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edges both inside -- Closed edge in CW order. -- Requires reconstructing the outer ring SELECT 'NE(32)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35, 18 35, 18 40, 28 40, 28 27, 18 27, 25 35)'); SELECT * FROM check_nodes('NE(32)/nodes'); SELECT * FROM check_edges('NE(32)/edges'); SELECT * FROM check_faces('NE(32)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(32)', topology.ST_RemEdgeModFace('city_data', 32); SELECT * FROM check_nodes('RM(32)/nodes'); SELECT * FROM check_edges('RM(32)/edges'); SELECT * FROM check_faces('RM(32)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edges both inside -- Closed edge in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(33)', topology.ST_AddEdgeNewFaces('city_data', 3, 3, 'SRID=4326;LINESTRING(25 35,18 27,28 27,28 40,18 40,18 35,25 35)'); SELECT * FROM check_nodes('NE(33)/nodes'); SELECT * FROM check_edges('NE(33)/edges'); SELECT * FROM check_faces('NE(33)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(33)', topology.ST_RemEdgeModFace('city_data', 33); SELECT * FROM check_nodes('RM(33)/nodes'); SELECT * FROM check_edges('RM(33)/edges'); SELECT * FROM check_faces('RM(33)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from closing node and going outside. -- Closed edge is in CW order. -- Requires reconstructing the outer ring SELECT 'NE(34)', topology.ST_AddEdgeNewFaces('city_data', 2, 2, 'SRID=4326;LINESTRING(25 30, 28 27, 22 27, 25 30)'); SELECT * FROM check_nodes('NE(34)/nodes'); SELECT * FROM check_edges('NE(34)/edges'); SELECT * FROM check_faces('NE(34)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(34)', topology.ST_RemEdgeModFace('city_data', 34); SELECT * FROM check_nodes('RM(34)/nodes'); SELECT * FROM check_edges('RM(34)/edges'); SELECT * FROM check_faces('RM(34)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Universe flooding existing single-edge (closed) face -- with dangling edge starting from closing node and going outside. -- Closed edge is in CCW order. -- Requires reconstructing the outer ring SELECT 'NE(35)', topology.ST_AddEdgeNewFaces('city_data', 2, 2, 'SRID=4326;LINESTRING(25 30,22 27,28 27,25 30)' ); SELECT * FROM check_nodes('NE(35)/nodes'); SELECT * FROM check_edges('NE(35)/edges'); SELECT * FROM check_faces('NE(35)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); -- Here's the removal SELECT 'RM(35)', topology.ST_RemEdgeModFace('city_data', 35); SELECT * FROM check_nodes('RM(35)/nodes'); SELECT * FROM check_edges('RM(35)/edges'); SELECT * FROM check_faces('RM(35)/faces'); SELECT save_edges(); SELECT save_faces(); SELECT save_nodes(); SELECT topology.DropTopology('city_data'); ------------------------------------------------------------------------- -- Now test in presence of features ------------------------------------------------------------------------- -- { -- Import city_data \i load_topology.sql \i load_features.sql \i cache_geometries.sql -- A city_street is defined by edge 3, can't drop SELECT '*RM(3)', topology.ST_RemEdgeModFace('city_data', 3); -- A city_street is defined by edge 4 and 5, can't drop any of the two SELECT '*RM(4)', topology.ST_RemEdgeModFace('city_data', 4); SELECT '*RM(5)', topology.ST_RemEdgeModFace('city_data', 5); -- Two land_parcels (P2 and P3) are defined by either face -- 5 but not face 4 or by face 4 but not face 5, so we can't heal -- the faces by dropping edge 17 SELECT '*RM(17)', topology.ST_RemEdgeModFace('city_data', 17); -- Dropping edge 11 is fine as it heals faces 5 and 8, which -- only serve definition of land_parcel P3 which contains both SELECT 'RM(11)', 'relations_before:', count(*) FROM city_data.relation; SELECT 'RM(11)', topology.ST_RemEdgeModFace('city_data', 11); SELECT 'RM(11)', 'relations_after:', count(*) FROM city_data.relation; -- Land parcel P3 is now defined by face 8, so we can't drop -- any edge which would destroy that face. SELECT '*RM(8)', topology.ST_RemEdgeModFace('city_data', 8); -- face_right=8 SELECT '*RM(15)', topology.ST_RemEdgeModFace('city_data', 15); -- face_left=8 -- Check that no land_parcel objects had topology changed SELECT 'RM(11)', feature_name, ST_Equals( ST_Multi(feature::geometry), ST_Multi(the_geom) ) as unchanged FROM features.land_parcels; SELECT topology.DropTopology('city_data'); DROP SCHEMA features CASCADE; -- } ------------------------------------------------------------------------- ------------------------------------------------------------------------- ------------------------------------------------------------------------- -- clean up DROP FUNCTION save_edges(); DROP FUNCTION check_edges(text); DROP FUNCTION save_faces(); DROP FUNCTION check_faces(text); DROP FUNCTION save_nodes(); DROP FUNCTION check_nodes(text); DELETE FROM spatial_ref_sys where srid = 4326; �����������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/Makefile.in���������������������������������������������������0000644�0000000�0000000�00000005417�12170570036�020470� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DATABASE=postgis_topo_regress PSQL=psql PERL=@PERL@ GEOS_NUMERIC_VERSION=@GEOS_NUMERIC_VERSION@ all: @echo "Use 'make check' to run all tests" # TODO: make edit_topology.sql into a proper test edit: $(PSQL) -X -f edit_topology.sql $(DATABASE) topo_predicates.sql: predicates.sql.in cpp -P -traditional-cpp predicates.sql.in | sed -e 's:@COLUMN@:feature:g;s:@SCHEMA@:topology.:g' > topo_predicates.sql load_topology.sql: load_topology.sql.in @cpp -P -traditional-cpp load_topology.sql.in | sed -e 's:@SRID@:-1:g' > load_topology.sql load_topology-4326.sql: load_topology.sql.in @cpp -P -traditional-cpp load_topology.sql.in | sed -e 's:@SRID@:4326:g' > load_topology-4326.sql clean distclean: rm -f topo_predicates.sql load_topology.sql load_topology-4326.sql regress/topogeo_addlinestring_expected TESTS = regress/legacy_validate.sql regress/legacy_predicate.sql \ regress/legacy_invalid.sql regress/sqlmm.sql \ regress/legacy_query.sql regress/addnode.sql \ regress/addedge.sql regress/addface.sql \ regress/addface2.5d.sql \ regress/addtopogeometrycolumn.sql \ regress/polygonize.sql \ regress/st_addisoedge.sql \ regress/st_addisonode.sql \ regress/st_addedgemodface.sql \ regress/st_addedgenewfaces.sql \ regress/st_changeedgegeom.sql \ regress/st_createtopogeo.sql \ regress/st_getfacegeometry.sql \ regress/st_getfaceedges.sql \ regress/st_modedgeheal.sql \ regress/st_modedgesplit.sql \ regress/st_newedgeheal.sql \ regress/st_newedgessplit.sql \ regress/st_remedgenewface.sql \ regress/st_remedgemodface.sql \ regress/st_simplify.sql \ regress/topoelement.sql \ regress/topoelementarray_agg.sql \ regress/topogeo_addlinestring.sql \ regress/topogeo_addpoint.sql \ regress/topogeo_addpolygon.sql \ regress/topogeometry_type.sql \ regress/topojson.sql \ regress/topo2.5d.sql \ regress/totopogeom.sql \ regress/droptopology.sql \ regress/copytopology.sql \ regress/createtopogeom.sql \ regress/createtopology.sql \ regress/gml.sql \ regress/getnodebypoint.sql \ regress/getedgebypoint.sql \ regress/getfacebypoint.sql \ regress/getringedges.sql \ regress/gettopogeomelements.sql \ regress/layertrigger.sql \ regress/validatetopology.sql TESTS_EXPECTED = $(TESTS:.sql=_expected) regress/topogeo_addlinestring_expected: Makefile ifeq ($(shell expr $(GEOS_NUMERIC_VERSION) ">" 30308),1) cp regress/topogeo_addlinestring_expected_newsnap regress/topogeo_addlinestring_expected else cp regress/topogeo_addlinestring_expected_oldsnap regress/topogeo_addlinestring_expected endif check: topo_predicates.sql load_topology.sql load_topology-4326.sql $(TESTS) $(TESTS_EXPECTED) $(MAKE) -C ../../regress staged-install $(PERL) ../../regress/run_test.pl --topology $(RUNTESTFLAGS) $(TESTS) $(PERL) ../../regress/run_test.pl --upgrade --topology $(RUNTESTFLAGS) $(TESTS) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/predicates.sql.in���������������������������������������������0000644�0000000�0000000�00000006572�11722777314�021711� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- This scripts add some features to the ones defined by load_topology.sql -- and then runs some binary predicates on them. -- #define DO_POINT_POINT_INTERSECTS 1 #define DO_POINT_LINE_INTERSECTS 1 #define DO_LINE_LINE_INTERSECTS 1 #define DO_POINT_POLYGON_INTERSECTS 1 #define DO_LINE_POLYGON_INTERSECTS 1 #define DO_POLYGON_POLYGON_INTERSECTS 1 #define DO_POINT_POINT_EQUALS 1 #define DO_LINE_LINE_EQUALS 1 #define DO_POLYGON_POLYGON_EQUALS 1 BEGIN; #if DO_POINT_POINT_INTERSECTS -- Detect intersections between traffic_signs SELECT 'POINT/POINT INTERSECTS' as operation; SELECT a.feature_name, b.feature_name FROM features.traffic_signs a, features.traffic_signs b WHERE a.oid < b.oid AND @SCHEMA@intersects(a.@COLUMN@, b.@COLUMN@); #endif #if DO_POINT_LINE_INTERSECTS -- Detect intersections between city_streets and traffic_signs SELECT 'POINT/LINE INTERSECTS' as operation; SELECT a.feature_name, b.feature_name FROM features.traffic_signs a, features.city_streets b WHERE @SCHEMA@intersects(a.@COLUMN@, b.@COLUMN@); #endif #if DO_LINE_LINE_INTERSECTS -- Detect intersections between city_streets SELECT 'LINE/LINE INTERSECTS' as operation; SELECT a.feature_name, b.feature_name FROM features.city_streets a, features.city_streets b WHERE a.oid < b.oid AND @SCHEMA@intersects(a.@COLUMN@, b.@COLUMN@); #endif #if DO_POINT_POLYGON_INTERSECTS -- Detect intersections between traffic_signs and land_parcels SELECT 'POINT/POLY INTERSECTS' as operation; SELECT a.feature_name, b.feature_name FROM features.traffic_signs a, features.land_parcels b WHERE @SCHEMA@intersects(a.@COLUMN@, b.@COLUMN@); #endif #if DO_LINE_POLYGON_INTERSECTS -- Detect intersections between city_streets and land_parcels SELECT 'LINE/POLY INTERSECTS' as operation; SELECT a.feature_name, b.feature_name FROM features.city_streets a, features.land_parcels b WHERE @SCHEMA@intersects(a.@COLUMN@, b.@COLUMN@); #endif #if DO_POLYGON_POLYGON_INTERSECTS -- Detect intersections between land_parcels and land_parcels SELECT 'POLY/POLY INTERSECTS' as operation; SELECT a.feature_name, b.feature_name FROM features.land_parcels a, features.land_parcels b WHERE a.oid < b.oid AND @SCHEMA@intersects(a.@COLUMN@, b.@COLUMN@); #endif #if DO_POINT_POINT_EQUALS SELECT 'POINT/POINT EQUALS' as operation; SELECT a.feature_name, b.feature_name FROM features.traffic_signs a, features.traffic_signs b WHERE a.oid < b.oid AND @SCHEMA@equals(a.@COLUMN@, b.@COLUMN@); #endif #if DO_LINE_LINE_EQUALS SELECT 'LINE/LINE EQUALS' as operation; SELECT a.feature_name, b.feature_name FROM features.city_streets a, features.city_streets b WHERE a.oid < b.oid AND @SCHEMA@equals(a.@COLUMN@, b.@COLUMN@); #endif #if DO_POLYGON_POLYGON_EQUALS SELECT 'POLYGON/POLYGON EQUALS' as operation; SELECT a.feature_name, b.feature_name FROM features.land_parcels a, features.land_parcels b WHERE a.oid < b.oid AND @SCHEMA@equals(a.@COLUMN@, b.@COLUMN@); #endif SELECT 'POINT/POINT EQUALS (simple/hierarchical)' as operation; SELECT a.feature_name, b.feature_name FROM features.traffic_signs a, features.big_signs b WHERE a.oid < b.oid AND @SCHEMA@equals(a.feature, b.feature) ORDER BY a.oid; SELECT 'POLYGON/POLYGON EQUALS (simple/hierarchical)' as operation; SELECT a.feature_name, b.feature_name FROM features.land_parcels a, features.big_parcels b WHERE a.oid < b.oid AND @SCHEMA@equals(a.feature, b.feature) ORDER BY a.oid; END; ��������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/hierarchy.sql�������������������������������������������������0000644�0000000�0000000�00000005564�11722777314�021137� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- Define some hierarchical layers -- -- -- Parcels -- CREATE TABLE features.big_parcels ( feature_name varchar primary key ) WITH OIDS; SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'big_parcels', 'feature', 'POLYGON', 1 -- the land_parcles ); SELECT AddGeometryColumn('features','big_parcels','the_geom',-1,'MULTIPOLYGON',2); INSERT INTO features.big_parcels VALUES ('P1P2', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) (SELECT layer_id FROM topology.layer WHERE table_name = 'big_parcels'), '{{1,1},{2,1}}')); -- P1 and P2 INSERT INTO features.big_parcels VALUES ('P3P4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) (SELECT layer_id FROM topology.layer WHERE table_name = 'big_parcels'), '{{3,1},{4,1}}')); -- P3 and P4 INSERT INTO features.big_parcels VALUES ('F3F6', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 3, -- Topology geometry type (polygon/multipolygon) (SELECT layer_id FROM topology.layer WHERE table_name = 'big_parcels'), (SELECT topoelementarray_agg(ARRAY[id(feature), 1]) FROM features.land_parcels WHERE feature_name in ('F3','F6')) )); -- -- Streets -- CREATE TABLE features.big_streets ( feature_name varchar primary key ) WITH OIDS; SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'big_streets', 'feature', 'LINE', 3 -- the city_streets layer id ); INSERT INTO features.big_streets VALUES ('R1R2', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (lineal) (SELECT layer_id FROM topology.layer WHERE table_name = 'big_streets'), (SELECT topoelementarray_agg(ARRAY[id(feature), 3]) FROM features.city_streets WHERE feature_name in ('R1','R2')) -- R1 and R2 )); INSERT INTO features.big_streets VALUES ('R4', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 2, -- Topology geometry type (lineal) (SELECT layer_id FROM topology.layer WHERE table_name = 'big_streets'), (SELECT topoelementarray_agg(ARRAY[id(feature), 3]) FROM features.city_streets WHERE feature_name in ('R4')) )); -- -- Signs -- CREATE TABLE features.big_signs ( feature_name varchar primary key ) WITH OIDS; SELECT topology.AddTopoGeometryColumn('city_data', 'features', 'big_signs', 'feature', 'POINT', 2 -- the traffic_signs ); SELECT AddGeometryColumn('features','big_signs','the_geom',-1,'MULTIPOINT',2); INSERT INTO features.big_signs VALUES ('S1S2', -- Feature name topology.CreateTopoGeom( 'city_data', -- Topology name 1, -- Topology geometry type (point/multipoint) (SELECT layer_id FROM topology.layer WHERE table_name = 'big_signs'), '{{1,2},{2,2}}')); -- S1 and S2 ��������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/test/query_features.sql��������������������������������������������0000644�0000000�0000000�00000005472�11722777314�022222� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- From examples in chapter 1.12.1 of -- "Spatial Topology and Network Data Models" (Oracle manual) -- -- Modified to use postgis-based topology model. -- Loads the whole topology represented in Figure 1-1 of the -- manual, creates TopoGeometry objects and associations. -- --ORA-------------------------------- --ORA---- Main steps for using the topology data model with a topology --ORA---- built from edge, node, and face data --ORA-------------------------------- --ORA---- ... --ORA---- 7. Query the data. --ORA---- 8. Optionally, edit data using the PL/SQL or Java API. BEGIN; -- 7. Query the data. SELECT a.feature_name, id(a.feature) as tg_id, ST_AsText(topology.Geometry(a.feature)) as geom FROM features.land_parcels a; -- Query not in original example --strk; SELECT a.feature_name, id(a.feature) as tg_id, ST_AsText(topology.Geometry(a.feature)) as geom FROM features.traffic_signs a; -- Query not in original example --strk; SELECT a.feature_name, id(a.feature) as tg_id, ST_AsText(topology.Geometry(a.feature)) as geom FROM features.city_streets a; -- Query hierarchical feautures SELECT feature_name, ST_AsText(topology.geometry(feature)) FROM features.big_signs; SELECT feature_name,ST_AsText(topology.geometry(feature)) FROM features.big_streets; SELECT feature_name,ST_AsText(topology.geometry(feature)) FROM features.big_parcels; --NOTYET-- --NOTYET--/* Window is city_streets */ --NOTYET--SELECT a.feature_name, b.feature_name --NOTYET-- FROM city_streets b, --NOTYET-- land_parcels a --NOTYET-- WHERE b.feature_name like 'R%' AND --NOTYET-- sdo_anyinteract(a.feature, b.feature) = 'TRUE' --NOTYET-- ORDER BY b.feature_name, a.feature_name; --NOTYET-- --NOTYET---- Find all streets that have any interaction with land parcel P3. --NOTYET---- (Should return only R1.) --NOTYET--SELECT c.feature_name FROM city_streets c, land_parcels l --NOTYET-- WHERE l.feature_name = 'P3' AND --NOTYET-- SDO_ANYINTERACT (c.feature, l.feature) = 'TRUE'; --NOTYET-- --NOTYET---- Find all land parcels that have any interaction with traffic sign S1. --NOTYET---- (Should return P1 and P2.) --NOTYET--SELECT l.feature_name FROM land_parcels l, traffic_signs t --NOTYET-- WHERE t.feature_name = 'S1' AND --NOTYET-- SDO_ANYINTERACT (l.feature, t.feature) = 'TRUE'; --NOTYET-- --NOTYET---- Get the geometry for land parcel P1. --NOTYET--SELECT l.feature_name, l.feature.get_geometry() --NOTYET-- FROM land_parcels l WHERE l.feature_name = 'P1'; --NOTYET-- --NOTYET---- Get the boundary of face with face_id 3. --NOTYET--SELECT topology.GET_FACE_BOUNDARY('CITY_DATA', 3) FROM DUAL; --NOTYET-- --NOTYET---- Get the topological elements for land parcel P2. --NOTYET---- CITY_DATA layer, land parcels (tg_ layer_id = 1), parcel P2 (tg_id = 2) --NOTYET--SELECT topology.GET_TOPO_OBJECTS('CITY_DATA', 1, 2) FROM DUAL; --NOTYET-- --NOTYET-- END; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/ER/����������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015745� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/ER/topology.fig����������������������������������������������������0000644�0000000�0000000�00000027136�11722777314�020331� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#FIG 3.2 Produced by xfig version 3.2.5 Landscape Center Metric A4 100.00 Single -2 1200 2 6 2666 18215 5951 20066 6 2764 18215 2989 19205 1 4 0 1 0 0 50 -1 41 0.000 1 0.0000 2840 18688 68 68 2773 18688 2908 18688 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 2844 18743 2844 19193 4 1 0 50 -1 17 12 0.0000 4 150 150 2889 18383 id\001 -6 6 3244 18305 3619 19205 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 3380 18724 68 68 3313 18724 3448 18724 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3386 18800 3386 19205 4 1 0 50 -1 17 12 0.0000 4 180 375 3431 18440 type\001 -6 6 2666 19211 5951 20066 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 2666 19211 5951 19211 5951 20066 2666 20066 2666 19211 4 1 0 50 -1 18 22 0.0000 4 285 1245 4260 19736 LAYER\001 -6 -6 6 7726 18396 11011 19251 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 7726 18396 11011 18396 11011 19251 7726 19251 7726 18396 4 1 0 50 -1 18 22 0.0000 4 285 2370 9320 18921 BASE LAYER\001 -6 6 7708 19980 10993 20835 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 7708 19980 10993 19980 10993 20835 7708 20835 7708 19980 4 1 0 50 -1 18 22 0.0000 4 285 2220 9302 20505 HIER LAYER\001 -6 6 11699 18168 15876 19518 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 12240 18843 13815 18168 15390 18843 13815 19518 12240 18843 4 1 0 50 -1 17 12 0.0000 4 195 390 15681 18646 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 11909 18645 {0,N}\001 -6 6 11733 19718 15910 21068 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 12274 20393 13849 19718 15424 20393 13849 21068 12274 20393 4 1 0 50 -1 17 12 0.0000 4 195 390 15715 20196 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 11943 20195 {0,N}\001 -6 6 16515 18405 19845 19305 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 16516 18415 19801 18415 19801 19270 16516 19270 16516 18415 4 1 0 50 -1 18 22 0.0000 4 285 2985 18131 18949 BASE TOPOGEO\001 -6 6 16520 19915 19805 20770 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 16520 19915 19805 19915 19805 20770 16520 20770 16520 19915 4 1 0 50 -1 18 22 0.0000 4 285 2835 18135 20449 HIER TOPOGEO\001 -6 6 18950 22340 22145 23735 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 18965 23046 20540 22371 22115 23046 20540 23721 18965 23046 4 1 0 50 -1 19 22 0.0000 4 360 2130 20525 23150 composition\001 -6 6 5947 18734 7734 20405 6 5947 19325 6937 19883 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 6937 19470 6442 19470 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 6937 19695 6442 19695 2 3 0 1 0 0 50 -1 20 0.000 0 0 0 0 0 4 6430 19883 5947 19605 6429 19325 6430 19883 -6 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 7734 18734 6967 18734 6967 20405 7716 20405 -6 6 6642 13384 10844 14734 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 7167 14059 8742 13384 10317 14059 8742 14734 7167 14059 4 1 0 50 -1 17 12 0.0000 4 195 420 6852 13954 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 10649 13918 {1,1}\001 -6 6 2692 12718 6022 14518 6 2713 13629 5998 14484 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 2713 13629 5998 13629 5998 14484 2713 14484 2713 13629 4 1 0 50 -1 18 22 0.0000 4 285 2100 4383 14212 TOPOLOGY\001 -6 6 3522 12760 3792 13630 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 3606 13149 68 68 3539 13149 3674 13149 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3612 13225 3612 13630 4 1 0 50 -1 17 12 0.0000 4 105 270 3657 12865 srs\001 -6 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 4882 13148 68 68 4815 13148 4950 13148 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 1 6019 13948 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4888 13224 4888 13629 4 1 0 50 -1 17 12 0.0000 4 195 780 4933 12864 precision\001 -6 6 16642 13213 19837 14608 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 16686 13926 18261 13251 19836 13926 18261 14601 16686 13926 4 1 0 50 -1 19 22 0.0000 4 360 2130 18261 14016 composition\001 -6 6 2790 15623 5940 17822 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 2790 16685 4365 16010 5940 16685 4365 17360 2790 16685 4 1 0 50 -1 17 12 0.0000 4 195 390 4737 17762 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 4693 15758 {0,N}\001 -6 6 23030 18172 23405 19072 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 23166 18591 68 68 23099 18591 23234 18591 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 23172 18667 23172 19072 4 1 0 50 -1 17 12 0.0000 4 180 375 23217 18307 type\001 -6 6 21922 18118 22147 19108 1 4 0 1 0 0 50 -1 41 0.000 1 0.0000 21998 18591 68 68 21931 18591 22066 18591 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 22002 18646 22002 19096 4 1 0 50 -1 17 12 0.0000 4 150 150 22047 18286 id\001 -6 6 20482 19291 21472 19849 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 20482 19436 20977 19436 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 20482 19661 20977 19661 2 3 0 1 0 0 50 -1 20 0.000 0 0 0 0 0 4 20989 19849 21472 19571 20990 19291 20989 19849 -6 6 17144 5464 20294 6814 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 17144 6139 18719 5464 20294 6139 18719 6814 17144 6139 4 1 0 50 -1 19 22 0.0000 4 360 1815 18674 6229 start point\001 -6 6 11759 3259 14909 4609 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 11759 3934 13334 3259 14909 3934 13334 4609 11759 3934 4 1 0 50 -1 19 22 0.0000 4 360 1860 13289 4024 containing\001 -6 6 6854 5479 10004 6829 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 6854 6154 8429 5479 10004 6154 8429 6829 6854 6154 4 1 0 50 -1 19 22 0.0000 4 360 840 8384 6244 right\001 -6 6 6824 7294 9974 8644 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 6824 7969 8399 7294 9974 7969 8399 8644 6824 7969 4 1 0 50 -1 19 22 0.0000 4 285 585 8354 8059 left\001 -6 6 13634 5809 14414 6709 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 13973 6228 68 68 13906 6228 14041 6228 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 13979 6304 13979 6709 4 1 0 50 -1 17 12 0.0000 4 195 780 14024 5944 linestring\001 -6 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 12396 13065 68 68 12328 13065 12464 13065 1 4 0 1 0 0 50 -1 41 0.000 1 0.0000 12729 13313 68 68 12662 13313 12797 13313 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 6531 3064 68 68 6464 3064 6599 3064 1 4 0 1 0 7 50 -1 20 0.000 1 0.0000 21344 3019 68 68 21277 3019 21412 3019 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 13439 7519 13439 12154 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 22259 3919 22844 3919 22844 12154 13394 12154 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 4889 3919 4169 3919 4169 12154 13394 12154 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 13338 12158 13338 13026 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 13563 12158 13563 13035 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 18259 14597 18259 18434 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 1 15670 22871 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 1 15670 22871 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 15431 20397 16512 20399 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 15380 18847 16496 18847 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 18972 23063 18039 23063 18039 20763 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 22122 23046 23072 23046 23072 19946 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 5180 23060 6755 22385 8330 23060 6755 23735 5180 23060 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 5171 23060 4136 23060 4136 20075 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 9401 20900 9401 23060 8321 23060 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4355 17383 4355 19207 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 7178 14058 5998 14058 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 16707 13941 15268 13941 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 4396 16022 4396 14484 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 10319 14057 11965 14057 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 12284 20396 10996 20396 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 12245 18843 11013 18843 2 3 0 1 0 0 50 -1 20 0.000 0 0 0 0 0 4 13746 13029 13468 13512 13188 13030 13746 13029 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 11971 13579 15256 13579 15256 14434 11971 14434 11971 13579 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 12396 13110 12396 13560 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 21513 19075 24798 19075 24798 19930 21513 19930 21513 19075 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 19788 18700 20452 18700 20452 20371 19809 20371 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 17129 6124 16634 6124 16634 6934 14564 6934 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 17144 8029 16649 8029 16649 7249 14564 7249 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 20279 6139 20864 6124 20864 4369 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 20309 8014 21494 8014 21509 4369 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 12794 10159 13124 10159 13124 7549 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 1 14069 10144 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 14069 10144 13754 10144 13754 7549 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 12134 6889 10694 6889 10694 6169 9974 6169 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 14204 7549 14204 8869 15644 8869 15644 9469 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 11219 9499 11219 8824 12554 8824 12554 7549 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 9659 10174 11234 9499 12809 10174 11234 10849 9659 10174 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 14069 10159 15644 9484 17219 10159 15644 10834 14069 10159 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 12149 6694 14579 6694 14579 7549 12149 7549 12149 6694 2 1 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 17144 8029 18719 7354 20294 8029 18719 8704 17144 8029 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 12134 7339 10694 7339 10694 7969 9974 7969 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 6824 7969 5699 7969 5699 4369 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 6869 6169 6464 6169 6464 4369 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 11729 3919 7319 3919 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 14879 3919 19829 3919 2 1 0 1 0 0 50 -1 41 0.000 0 0 -1 0 0 2 6524 3124 6524 3529 2 1 0 1 0 0 50 -1 41 0.000 0 0 -1 0 0 2 21329 3094 21329 3514 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 19829 3514 22259 3514 22259 4369 19829 4369 19829 3514 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 4889 3514 7319 3514 7319 4369 4889 4369 4889 3514 3 0 0 1 0 7 50 -1 -1 0.000 0 0 0 4 11558 14265 11558 13515 11858 13300 12672 13300 0.000 1.000 1.000 0.000 4 1 0 50 -1 17 12 0.0000 4 195 420 22496 22826 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 18558 22798 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 8621 22863 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 4849 22862 {0,1}\001 4 0 0 50 -1 0 12 0.0000 4 165 510 8366 22561 parent\001 4 0 0 50 -1 0 12 0.0000 4 135 420 4541 22561 child\001 4 1 0 50 -1 17 12 0.0000 4 195 420 16179 13798 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 18634 14999 {0,N}\001 4 1 0 50 -1 18 22 0.0000 4 285 2640 13608 14143 TOPO OBJECT\001 4 1 0 50 -1 17 12 0.0000 4 150 150 12441 12750 id\001 4 1 0 50 -1 18 22 0.0000 4 285 2295 23128 19609 TOPO GEOM\001 4 1 0 50 -1 17 12 0.0000 4 195 420 21344 2779 point\001 4 1 0 50 -1 17 12 0.0000 4 195 390 16904 5839 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 16919 7849 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 11579 9349 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 15989 9334 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 20579 7819 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 20519 5989 {0,N}\001 4 1 0 50 -1 19 18 0.0000 4 285 1890 11250 10170 next edge for\001 4 1 0 50 -1 19 18 0.0000 4 225 1155 11250 10530 left face\001 4 1 0 50 -1 19 18 0.0000 4 285 1890 15660 10125 next edge for\001 4 1 0 50 -1 19 18 0.0000 4 285 1365 15660 10485 right face\001 4 1 0 50 -1 18 22 0.0000 4 285 1050 13364 7279 EDGE\001 4 1 0 50 -1 19 22 0.0000 4 360 1650 18674 8119 end point\001 4 1 0 50 -1 17 12 0.0000 4 195 420 11414 3724 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 15284 3694 {0,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 10289 7834 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 10289 6034 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 6779 5989 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 420 6554 7834 {0,N}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 12899 9949 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 195 390 13979 9949 {1,1}\001 4 1 0 50 -1 17 12 0.0000 4 150 330 6569 2839 mbr\001 4 1 0 50 -1 17 12 0.0000 4 195 390 6824 3274 {0,1}\001 4 1 0 50 -1 18 22 0.0000 4 285 1095 21044 4054 NODE\001 4 1 0 50 -1 18 22 0.0000 4 285 1005 6104 4054 FACE\001 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/ER/Makefile��������������������������������������������������������0000644�0000000�0000000�00000000114�11722777314�017411� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� topology.png: topology.fig fig2dev -L png $< $@ clean: rm topology.png ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/���������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016236� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/sqlmm.sql.in���������������������������������������������������0000644�0000000�0000000�00000402057�12302567730�020527� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2010, 2011, 2012, 2013 Sandro Santilli <strk@keybit.net> -- Copyright (C) 2005 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Sandro Santilli <strk@keybit.net> -- -- /* #define POSTGIS_TOPOLOGY_DEBUG 1 */ --={ ---------------------------------------------------------------- -- SQL/MM block -- -- This part contains function in the SQL/MM specification -- --------------------------------------------------------------------- -- -- Type returned by ST_GetFaceEdges -- CREATE TYPE topology.GetFaceEdges_ReturnType AS ( sequence integer, edge integer ); --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.5 -- -- ST_GetFaceEdges(atopology, aface) -- -- -- CREATE OR REPLACE FUNCTION topology.ST_GetFaceEdges(toponame varchar, face_id integer) RETURNS SETOF topology.GetFaceEdges_ReturnType AS $$ DECLARE rec RECORD; bounds geometry; retrec topology.GetFaceEdges_ReturnType; n int; sql TEXT; BEGIN -- -- toponame and face_id are required -- IF toponame IS NULL OR face_id IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; IF NOT EXISTS(SELECT name FROM topology.topology WHERE name = toponame) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END IF; n := 1; -- Construct the face geometry, then for each ring of each polygon: sql := 'SELECT (ST_DumpRings((ST_Dump(ST_ForceRHR(' || 'ST_BuildArea(ST_Collect(geom))))).geom)).geom FROM ' || quote_ident(toponame) || '.edge_data WHERE left_face = ' || face_id || ' OR right_face = ' || face_id; FOR rec IN EXECUTE sql LOOP -- { -- Find the edges constituting its boundary bounds = ST_Boundary(rec.geom); sql := 'WITH er2 AS ( ' || 'WITH er AS ( SELECT ' || 'min(e.edge_id) over (), count(*) over () as cnt, e.edge_id, ' || 'ST_LineLocatePoint(' || quote_literal(bounds::text) || ', ST_LineInterpolatePoint(e.geom, 0.2)) as pos' || ', ST_LineLocatePoint(' || quote_literal(bounds::text) || ', ST_LineInterpolatePoint(e.geom, 0.8)) as pos2 FROM ' || quote_ident(toponame) || '.edge e WHERE ( e.left_face = ' || face_id || ' OR e.right_face = ' || face_id || ') AND ST_Covers(' || quote_literal(bounds::text) || ', e.geom)'; IF face_id = 0 THEN sql := sql || ' ORDER BY POS ASC) '; ELSE sql := sql || ' ORDER BY POS DESC) '; END IF; -- Reorder rows so to start with the one with smaller edge_id sql := sql || 'SELECT row_number() over () - 1 as rn, * FROM er ) ' || 'SELECT *, ( rn + cnt - ( select rn FROM er2 WHERE edge_id = min ) ) % cnt AS reord FROM er2 ORDER BY reord'; --RAISE DEBUG 'SQL: %', sql; FOR rec IN EXECUTE sql LOOP #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'rn:%, n:%, edg:%, cnt:%, min:%, reord:%', rec.rn, n, rec.edge_id, rec.cnt, rec.min, rec.reord; #endif retrec.sequence = n; retrec.edge = rec.edge_id; IF face_id = 0 THEN -- if this edge goes in opposite direction to the -- ring bounds, make it with negative orientation IF rec.pos2 < rec.pos THEN -- edge goes in opposite direction retrec.edge = -retrec.edge; END IF; ELSE -- if this edge goes in same direction to the -- ring bounds, make it with negative orientation IF rec.pos2 > rec.pos THEN -- edge goes in same direction retrec.edge = -retrec.edge; END IF; END IF; RETURN NEXT retrec; n = n+1; END LOOP; END LOOP; -- } RETURN; EXCEPTION WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END $$ LANGUAGE 'plpgsql' STABLE; --} ST_GetFaceEdges --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.10 -- -- ST_NewEdgeHeal(atopology, anedge, anotheredge) -- -- Not in the specs: -- * Refuses to heal two edges if any of the two is closed -- * Raise an exception when trying to heal an edge with itself -- * Raise an exception if any TopoGeometry is defined by only one -- of the two edges -- * Update references in the Relation table. -- CREATE OR REPLACE FUNCTION topology.ST_NewEdgeHeal(toponame varchar, e1id integer, e2id integer) RETURNS int AS $$ DECLARE e1rec RECORD; e2rec RECORD; rec RECORD; newedgeid int; connectededges int[]; commonnode int; caseno int; topoid int; sql text; e2sign int; eidary int[]; BEGIN -- -- toponame and face_id are required -- IF toponame IS NULL OR e1id IS NULL OR e2id IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- NOT IN THE SPECS: see if the same edge is given twice.. IF e1id = e2id THEN RAISE EXCEPTION 'Cannot heal edge % with itself, try with another', e1id; END IF; -- Get topology id BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = toponame; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; BEGIN EXECUTE 'SELECT * FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e1id INTO STRICT e1rec; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge %', e1id; WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'corrupted topology "%" (missing edge_data table)', toponame; END; BEGIN EXECUTE 'SELECT * FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e2id INTO STRICT e2rec; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge %', e2id; -- NOTE: checks for INVALID_SCHEMA_NAME or UNDEFINED_TABLE done before END; -- NOT IN THE SPECS: See if any of the two edges are closed. IF e1rec.start_node = e1rec.end_node THEN RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e1id, e2id; END IF; IF e2rec.start_node = e2rec.end_node THEN RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e2id, e1id; END IF; -- Find common node IF e1rec.end_node = e2rec.start_node THEN commonnode = e1rec.end_node; caseno = 1; ELSIF e1rec.end_node = e2rec.end_node THEN commonnode = e1rec.end_node; caseno = 2; END IF; -- Check if any other edge is connected to the common node IF commonnode IS NOT NULL THEN FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(toponame) || '.edge_data WHERE ( edge_id != ' || e1id || ' AND edge_id != ' || e2id || ') AND ( start_node = ' || commonnode || ' OR end_node = ' || commonnode || ' )' LOOP commonnode := NULL; connectededges = connectededges || rec.edge_id; END LOOP; END IF; IF commonnode IS NULL THEN IF e1rec.start_node = e2rec.start_node THEN commonnode = e1rec.start_node; caseno = 3; ELSIF e1rec.start_node = e2rec.end_node THEN commonnode = e1rec.start_node; caseno = 4; END IF; -- Check if any other edge is connected to the common node IF commonnode IS NOT NULL THEN FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(toponame) || '.edge_data WHERE ( edge_id != ' || e1id || ' AND edge_id != ' || e2id || ') AND ( start_node = ' || commonnode || ' OR end_node = ' || commonnode || ' )' LOOP commonnode := NULL; connectededges = connectededges || rec.edge_id; END LOOP; END IF; END IF; IF commonnode IS NULL THEN IF connectededges IS NOT NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - other edges connected (%)', array_to_string(connectededges, ','); ELSE RAISE EXCEPTION 'SQL/MM Spatial exception - non-connected edges'; END IF; END IF; -- NOT IN THE SPECS: -- check if any topo_geom is defined only by one of the -- input edges. In such case there would be no way to adapt -- the definition in case of healing, so we'd have to bail out eidary = ARRAY[e1id, e2id]; sql := 'SELECT t.* from (' || 'SELECT r.topogeo_id, r.layer_id' || ', l.schema_name, l.table_name, l.feature_column' || ', array_agg(abs(r.element_id)) as elems ' || 'FROM topology.layer l INNER JOIN ' || quote_ident(toponame) || '.relation r ON (l.layer_id = r.layer_id) ' || 'WHERE l.level = 0 AND l.feature_type = 2 ' || ' AND l.topology_id = ' || topoid || ' AND abs(r.element_id) IN (' || e1id || ',' || e2id || ') ' || 'group by r.topogeo_id, r.layer_id, l.schema_name, l.table_name, ' || ' l.feature_column ) t WHERE NOT t.elems @> ' || quote_literal(eidary); --RAISE DEBUG 'SQL: %', sql; FOR rec IN EXECUTE sql LOOP RAISE EXCEPTION 'TopoGeom % in layer % (%.%.%) cannot be represented healing edges % and %', rec.topogeo_id, rec.layer_id, rec.schema_name, rec.table_name, rec.feature_column, e1id, e2id; END LOOP; -- Create new edge { rec := e1rec; IF caseno = 1 THEN -- e1.end = e2.start rec.geom = ST_MakeLine(e1rec.geom, e2rec.geom); rec.end_node = e2rec.end_node; rec.next_left_edge = e2rec.next_left_edge; e2sign = 1; ELSIF caseno = 2 THEN -- e1.end = e2.end rec.geom = ST_MakeLine(e1rec.geom, st_reverse(e2rec.geom)); rec.end_node = e2rec.start_node; rec.next_left_edge = e2rec.next_right_edge; e2sign = -1; ELSIF caseno = 3 THEN -- e1.start = e2.start rec.geom = ST_MakeLine(st_reverse(e2rec.geom), e1rec.geom); rec.start_node = e2rec.end_node; rec.next_right_edge = e2rec.next_left_edge; e2sign = -1; ELSIF caseno = 4 THEN -- e1.start = e2.end rec.geom = ST_MakeLine(e2rec.geom, e1rec.geom); rec.start_node = e2rec.start_node; rec.next_right_edge = e2rec.next_right_edge; e2sign = 1; END IF; -- } -- Insert new edge { EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(toponame) || '.edge_data_edge_id_seq' ) || ')' INTO STRICT newedgeid; EXECUTE 'INSERT INTO ' || quote_ident(toponame) || '.edge VALUES(' || newedgeid || ',' || rec.start_node || ',' || rec.end_node || ',' || rec.next_left_edge || ',' || rec.next_right_edge || ',' || rec.left_face || ',' || rec.right_face || ',' || quote_literal(rec.geom::text) || ')'; -- End of new edge insertion } -- Update next_left_edge/next_right_edge for -- any edge having them still pointing at the edges being removed -- (e2id) -- -- NOTE: -- *(next_XXX_edge/e2id) serves the purpose of extracting existing -- sign from the value, while *e2sign changes that sign again if we -- reverted edge2 direction -- sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET abs_next_left_edge = ' || newedgeid || ', next_left_edge = ' || e2sign*newedgeid || '*(next_left_edge/' || e2id || ') WHERE abs_next_left_edge = ' || e2id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET abs_next_right_edge = ' || newedgeid || ', next_right_edge = ' || e2sign*newedgeid || '*(next_right_edge/' || e2id || ') WHERE abs_next_right_edge = ' || e2id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; -- New edge has the same direction as old edge 1 sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET abs_next_left_edge = ' || newedgeid || ', next_left_edge = ' || newedgeid || '*(next_left_edge/' || e1id || ') WHERE abs_next_left_edge = ' || e1id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET abs_next_right_edge = ' || newedgeid || ', next_right_edge = ' || newedgeid || '*(next_right_edge/' || e1id || ') WHERE abs_next_right_edge = ' || e1id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; -- -- NOT IN THE SPECS: -- Replace composition rows involving the two -- edges as one involving the new edge. -- It takes a DELETE and an UPDATE to do all sql := 'DELETE FROM ' || quote_ident(toponame) || '.relation r USING topology.layer l ' || 'WHERE l.level = 0 AND l.feature_type = 2' || ' AND l.topology_id = ' || topoid || ' AND l.layer_id = r.layer_id AND abs(r.element_id) = ' || e2id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; sql := 'UPDATE ' || quote_ident(toponame) || '.relation r ' || ' SET element_id = ' || newedgeid || '*(element_id/' || e1id || ') FROM topology.layer l WHERE l.level = 0 AND l.feature_type = 2' || ' AND l.topology_id = ' || topoid || ' AND l.layer_id = r.layer_id AND abs(r.element_id) = ' || e1id ; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'SQL: %', sql; #endif EXECUTE sql; -- Delete both edges EXECUTE 'DELETE FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e2id; EXECUTE 'DELETE FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e1id; -- Delete the common node BEGIN EXECUTE 'DELETE FROM ' || quote_ident(toponame) || '.node WHERE node_id = ' || commonnode; EXCEPTION WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'corrupted topology "%" (missing node table)', toponame; END; RETURN newedgeid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_NewEdgeHeal --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.11 -- -- ST_ModEdgeHeal(atopology, anedge, anotheredge) -- -- Not in the specs: -- * Returns the id of the node being removed -- * Refuses to heal two edges if any of the two is closed -- * Raise an exception when trying to heal an edge with itself -- * Raise an exception if any TopoGeometry is defined by only one -- of the two edges -- * Update references in the Relation table. -- CREATE OR REPLACE FUNCTION topology.ST_ModEdgeHeal(toponame varchar, e1id integer, e2id integer) RETURNS int AS $$ DECLARE e1rec RECORD; e2rec RECORD; rec RECORD; connectededges int[]; commonnode int; caseno int; topoid int; sql text; e2sign int; eidary int[]; BEGIN -- -- toponame and face_id are required -- IF toponame IS NULL OR e1id IS NULL OR e2id IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- NOT IN THE SPECS: see if the same edge is given twice.. IF e1id = e2id THEN RAISE EXCEPTION 'Cannot heal edge % with itself, try with another', e1id; END IF; -- Get topology id BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = toponame; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; BEGIN EXECUTE 'SELECT * FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e1id INTO STRICT e1rec; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge %', e1id; WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'corrupted topology "%" (missing edge_data table)', toponame; END; BEGIN EXECUTE 'SELECT * FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e2id INTO STRICT e2rec; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge %', e2id; -- NOTE: checks for INVALID_SCHEMA_NAME or UNDEFINED_TABLE done before END; -- NOT IN THE SPECS: See if any of the two edges are closed. IF e1rec.start_node = e1rec.end_node THEN RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e1id, e2id; END IF; IF e2rec.start_node = e2rec.end_node THEN RAISE EXCEPTION 'Edge % is closed, cannot heal to edge %', e2id, e1id; END IF; -- Find common node IF e1rec.end_node = e2rec.start_node THEN commonnode = e1rec.end_node; caseno = 1; ELSIF e1rec.end_node = e2rec.end_node THEN commonnode = e1rec.end_node; caseno = 2; END IF; -- Check if any other edge is connected to the common node IF commonnode IS NOT NULL THEN FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(toponame) || '.edge_data WHERE ( edge_id != ' || e1id || ' AND edge_id != ' || e2id || ') AND ( start_node = ' || commonnode || ' OR end_node = ' || commonnode || ' )' LOOP commonnode := NULL; connectededges = connectededges || rec.edge_id; END LOOP; END IF; IF commonnode IS NULL THEN IF e1rec.start_node = e2rec.start_node THEN commonnode = e1rec.start_node; caseno = 3; ELSIF e1rec.start_node = e2rec.end_node THEN commonnode = e1rec.start_node; caseno = 4; END IF; -- Check if any other edge is connected to the common node IF commonnode IS NOT NULL THEN FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(toponame) || '.edge_data WHERE ( edge_id != ' || e1id || ' AND edge_id != ' || e2id || ') AND ( start_node = ' || commonnode || ' OR end_node = ' || commonnode || ' )' LOOP commonnode := NULL; connectededges = connectededges || rec.edge_id; END LOOP; END IF; END IF; IF commonnode IS NULL THEN IF connectededges IS NOT NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - other edges connected (%)', array_to_string(connectededges, ','); ELSE RAISE EXCEPTION 'SQL/MM Spatial exception - non-connected edges'; END IF; END IF; -- NOT IN THE SPECS: -- check if any topo_geom is defined only by one of the -- input edges. In such case there would be no way to adapt -- the definition in case of healing, so we'd have to bail out eidary = ARRAY[e1id, e2id]; sql := 'SELECT t.* from (' || 'SELECT r.topogeo_id, r.layer_id' || ', l.schema_name, l.table_name, l.feature_column' || ', array_agg(abs(r.element_id)) as elems ' || 'FROM topology.layer l INNER JOIN ' || quote_ident(toponame) || '.relation r ON (l.layer_id = r.layer_id) ' || 'WHERE l.level = 0 AND l.feature_type = 2 ' || ' AND l.topology_id = ' || topoid || ' AND abs(r.element_id) IN (' || e1id || ',' || e2id || ') ' || 'group by r.topogeo_id, r.layer_id, l.schema_name, l.table_name, ' || ' l.feature_column ) t WHERE NOT t.elems @> ' || quote_literal(eidary); --RAISE DEBUG 'SQL: %', sql; FOR rec IN EXECUTE sql LOOP RAISE EXCEPTION 'TopoGeom % in layer % (%.%.%) cannot be represented healing edges % and %', rec.topogeo_id, rec.layer_id, rec.schema_name, rec.table_name, rec.feature_column, e1id, e2id; END LOOP; -- Update data of the first edge { rec := e1rec; IF caseno = 1 THEN -- e1.end = e2.start rec.geom = ST_MakeLine(e1rec.geom, e2rec.geom); rec.end_node = e2rec.end_node; rec.next_left_edge = e2rec.next_left_edge; e2sign = 1; ELSIF caseno = 2 THEN -- e1.end = e2.end rec.geom = ST_MakeLine(e1rec.geom, st_reverse(e2rec.geom)); rec.end_node = e2rec.start_node; rec.next_left_edge = e2rec.next_right_edge; e2sign = -1; ELSIF caseno = 3 THEN -- e1.start = e2.start rec.geom = ST_MakeLine(st_reverse(e2rec.geom), e1rec.geom); rec.start_node = e2rec.end_node; rec.next_right_edge = e2rec.next_left_edge; e2sign = -1; ELSIF caseno = 4 THEN -- e1.start = e2.end rec.geom = ST_MakeLine(e2rec.geom, e1rec.geom); rec.start_node = e2rec.start_node; rec.next_right_edge = e2rec.next_right_edge; e2sign = 1; END IF; EXECUTE 'UPDATE ' || quote_ident(toponame) || '.edge_data SET geom = ' || quote_literal(rec.geom::text) || ', start_node = ' || rec.start_node || ', end_node = ' || rec.end_node || ', next_left_edge = ' || rec.next_left_edge || ', abs_next_left_edge = ' || abs(rec.next_left_edge) || ', next_right_edge = ' || rec.next_right_edge || ', abs_next_right_edge = ' || abs(rec.next_right_edge) || ' WHERE edge_id = ' || e1id; -- End of first edge update } -- Update next_left_edge/next_right_edge for -- any edge having them still pointing at the edge being removed (e2id) -- -- NOTE: -- *(next_XXX_edge/e2id) serves the purpose of extracting existing -- sign from the value, while *e2sign changes that sign again if we -- reverted edge2 direction -- sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET abs_next_left_edge = ' || e1id || ', next_left_edge = ' || e2sign*e1id || '*(next_left_edge/' || e2id || ') WHERE abs_next_left_edge = ' || e2id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET abs_next_right_edge = ' || e1id || ', next_right_edge = ' || e2sign*e1id || '*(next_right_edge/' || e2id || ') WHERE abs_next_right_edge = ' || e2id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; -- Delete the second edge EXECUTE 'DELETE FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e2id; -- Delete the common node BEGIN EXECUTE 'DELETE FROM ' || quote_ident(toponame) || '.node WHERE node_id = ' || commonnode; EXCEPTION WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'corrupted topology "%" (missing node table)', toponame; END; -- -- NOT IN THE SPECS: -- Drop composition rows involving second -- edge, as the first edge took its space, -- and all affected TopoGeom have been previously checked -- for being composed by both edges. sql := 'DELETE FROM ' || quote_ident(toponame) || '.relation r USING topology.layer l ' || 'WHERE l.level = 0 AND l.feature_type = 2' || ' AND l.topology_id = ' || topoid || ' AND l.layer_id = r.layer_id AND abs(r.element_id) = ' || e2id; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; RETURN commonnode; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_ModEdgeHeal -- { -- _ST_RemEdgeCheck - check that the given edge is not needed -- by the definition of any TopoGeometry -- CREATE OR REPLACE FUNCTION topology._ST_RemEdgeCheck(tname varchar, tid integer, eid integer, lf integer, rf integer) RETURNS VOID AS $$ DECLARE sql text; fidary int[]; rec RECORD; BEGIN -- Check that no TopoGeometry references the edge being removed sql := 'SELECT r.topogeo_id, r.layer_id' || ', l.schema_name, l.table_name, l.feature_column ' || 'FROM topology.layer l INNER JOIN ' || quote_ident(tname) || '.relation r ON (l.layer_id = r.layer_id) ' || 'WHERE l.level = 0 AND l.feature_type = 2 ' || ' AND l.topology_id = ' || tid || ' AND abs(r.element_id) = ' || eid ; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Checking TopoGeometry definitions: %', sql; #endif FOR rec IN EXECUTE sql LOOP RAISE EXCEPTION 'TopoGeom % in layer % (%.%.%) cannot be represented dropping edge %', rec.topogeo_id, rec.layer_id, rec.schema_name, rec.table_name, rec.feature_column, eid; END LOOP; IF lf != rf THEN -- { RAISE NOTICE 'Deletion of edge % joins faces % and %', eid, lf, rf; -- check if any topo_geom is defined only by one of the -- joined faces. In such case there would be no way to adapt -- the definition in case of healing, so we'd have to bail out -- fidary = ARRAY[lf, rf]; sql := 'SELECT t.* from (' || 'SELECT r.topogeo_id, r.layer_id' || ', l.schema_name, l.table_name, l.feature_column' || ', array_agg(r.element_id) as elems ' || 'FROM topology.layer l INNER JOIN ' || quote_ident(tname) || '.relation r ON (l.layer_id = r.layer_id) ' || 'WHERE l.level = 0 AND l.feature_type = 3 ' || ' AND l.topology_id = ' || tid || ' AND r.element_id = ANY (' || quote_literal(fidary) || ') group by r.topogeo_id, r.layer_id, l.schema_name, l.table_name, ' || ' l.feature_column ) t'; -- No surface can be defined by universal face IF lf != 0 AND rf != 0 THEN -- { sql := sql || ' WHERE NOT t.elems @> ' || quote_literal(fidary); END IF; -- } #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'SQL: %', sql; #endif FOR rec IN EXECUTE sql LOOP RAISE EXCEPTION 'TopoGeom % in layer % (%.%.%) cannot be represented healing faces % and %', rec.topogeo_id, rec.layer_id, rec.schema_name, rec.table_name, rec.feature_column, rf, lf; END LOOP; END IF; -- } two faces healed... END $$ LANGUAGE 'plpgsql' VOLATILE; --} _ST_RemEdgeCheck --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.14 -- -- ST_RemEdgeNewFace(atopology, anedge) -- -- Not in the specs: -- * Raise an exception if any TopoGeometry is defined by only one -- of the two faces that will dissolve. -- * Raise an exception if any TopoGeometry is defined by -- the edge being removed. -- * Properly set containg_face on nodes that remains isolated by the drop -- * Update containg_face for isolated nodes in the dissolved faces -- * Update references in the Relation table -- -- }{ CREATE OR REPLACE FUNCTION topology.ST_RemEdgeNewFace(toponame varchar, e1id integer) RETURNS int AS $$ DECLARE e1rec RECORD; rec RECORD; fidary int[]; topoid int; sql text; newfaceid int; newfacecreated bool; elink int; BEGIN -- -- toponame and face_id are required -- IF toponame IS NULL OR e1id IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- Get topology id BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = toponame; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; BEGIN EXECUTE 'SELECT * FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e1id INTO STRICT e1rec; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge %', e1id; WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'corrupted topology "%" (missing edge_data table)', toponame; END; -- NOT IN THE SPECS: -- Check that no TopoGeometry references the edge being removed PERFORM topology._ST_RemEdgeCheck(toponame, topoid, e1id, e1rec.left_face, e1rec.right_face); -- Update next_left_edge and next_right_edge face -- for all edges bounding the new face RAISE NOTICE 'Updating next_{right,left}_face of ring edges...'; -- TODO: reduce the following to 2 UPDATE rather than 4 -- Update next_left_edge of previous edges in left face -- { elink := e1rec.next_left_edge; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_left_edge = ' || elink || ', abs_next_left_edge = ' || abs(elink) || ' WHERE next_left_edge < 0 AND abs(next_left_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_left_edge update: %', sql; #endif EXECUTE sql; -- If the edge being removed links to self, -- we use the other face IF e1rec.abs_next_right_edge = e1rec.edge_id THEN elink := e1rec.next_left_edge; ELSE elink := e1rec.next_right_edge; END IF; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_left_edge = ' || elink || ', abs_next_left_edge = ' || abs(elink) || ' WHERE next_left_edge > 0 AND abs(next_left_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_left_edge update: %', sql; #endif EXECUTE sql; -- } -- Update next_right_edge of previous edges in right face -- { elink := e1rec.next_left_edge; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_right_edge = ' || elink || ', abs_next_right_edge = ' || abs(elink) || ' WHERE next_right_edge < 0 AND abs(next_right_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_right_edge update: %', sql; #endif EXECUTE sql; -- If the edge being removed links to self, -- we use the other face IF e1rec.abs_next_right_edge = e1rec.edge_id THEN elink := e1rec.next_left_edge; ELSE elink := e1rec.next_right_edge; END IF; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_right_edge = ' || elink || ', abs_next_right_edge = ' || abs(elink) || ' WHERE next_right_edge > 0 AND abs(next_right_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_right_edge update: %', sql; #endif EXECUTE sql; -- } IF e1rec.left_face = e1rec.right_face THEN -- { newfaceid := e1rec.left_face; -- TODO: or what should we return ? newfacecreated := false; ELSE -- }{ IF e1rec.left_face = 0 OR e1rec.right_face = 0 THEN -- { -- -- We won't add any new face, but rather let the universe -- flood the removed face. -- newfaceid := 0; newfacecreated := false; ELSE -- }{ -- -- Insert the new face -- sql := 'SELECT nextval(' || quote_literal( quote_ident(toponame) || '.face_face_id_seq' ) || ')'; EXECUTE sql INTO STRICT newfaceid; newfacecreated := true; sql := 'INSERT INTO ' || quote_ident(toponame) || '.face(face_id, mbr) SELECT ' -- face_id || newfaceid || ', ' -- minimum bounding rectangle is the union of the old faces mbr -- (doing this without GEOS would be faster) || 'ST_Envelope(ST_Union(mbr)) FROM ' || quote_ident(toponame) || '.face WHERE face_id IN (' || e1rec.left_face || ',' || e1rec.right_face || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'SQL: %', sql; #endif EXECUTE sql; END IF; -- } -- Update left_face for all edges still referencing old faces sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET left_face = ' || newfaceid || ' WHERE left_face IN (' || e1rec.left_face || ',' || e1rec.right_face || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'left_face update: %', sql; #endif EXECUTE sql; -- Update right_face for all edges still referencing old faces sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET right_face = ' || newfaceid || ' WHERE right_face IN (' || e1rec.left_face || ',' || e1rec.right_face || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'right_face update: %', sql; #endif EXECUTE sql; -- Update containing_face for all nodes still referencing old faces sql := 'UPDATE ' || quote_ident(toponame) || '.node SET containing_face = ' || newfaceid || ' WHERE containing_face IN (' || e1rec.left_face || ',' || e1rec.right_face || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Isolated nodes update: %', sql; #endif EXECUTE sql; -- NOT IN THE SPECS: -- Replace composition rows involving the two -- faces as one involving the new face. -- It takes a DELETE and an UPDATE to do all sql := 'DELETE FROM ' || quote_ident(toponame) || '.relation r USING topology.layer l ' || 'WHERE l.level = 0 AND l.feature_type = 3' || ' AND l.topology_id = ' || topoid || ' AND l.layer_id = r.layer_id AND abs(r.element_id) = ' || e1rec.left_face; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'SQL: %', sql; #endif EXECUTE sql; sql := 'UPDATE ' || quote_ident(toponame) || '.relation r ' || ' SET element_id = ' || newfaceid || ' FROM topology.layer l WHERE l.level = 0 AND l.feature_type = 3' || ' AND l.topology_id = ' || topoid || ' AND l.layer_id = r.layer_id AND r.element_id = ' || e1rec.right_face; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'SQL: %', sql; #endif EXECUTE sql; END IF; -- } two faces healed... -- Delete the edge sql := 'DELETE FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge deletion: %', sql; #endif EXECUTE sql; -- Check if any of the edge nodes remains isolated, -- set containing_face = newfaceid in that case sql := 'UPDATE ' || quote_ident(toponame) || '.node n SET containing_face = ' || newfaceid || ' WHERE node_id IN (' || e1rec.start_node || ',' || e1rec.end_node || ') AND NOT EXISTS (SELECT edge_id FROM ' || quote_ident(toponame) || '.edge_data WHERE start_node = n.node_id OR end_node = n.node_id)'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Checking for nodes left isolated: %', sql; #endif EXECUTE sql; IF e1rec.right_face != e1rec.left_face THEN -- { -- Delete left face, if not universe IF e1rec.left_face != 0 THEN sql := 'DELETE FROM ' || quote_ident(toponame) || '.face WHERE face_id = ' || e1rec.left_face; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Left face deletion: %', sql; #endif EXECUTE sql; END IF; -- Delete right face, if not universe IF e1rec.right_face != 0 THEN sql := 'DELETE FROM ' || quote_ident(toponame) || '.face WHERE face_id = ' || e1rec.right_face; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Right face deletion: %', sql; #endif EXECUTE sql; END IF; END IF; -- } IF newfacecreated THEN RETURN newfaceid; ELSE RETURN NULL; -- -newfaceid; END IF; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_RemEdgeNewFace --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.15 -- -- ST_RemEdgeModFace(atopology, anedge) -- -- Not in the specs: -- * Raise an exception if any TopoGeometry is defined by only one -- of the two faces that will dissolve. -- * Raise an exception if any TopoGeometry is defined by -- the edge being removed. -- * Properly set containg_face on nodes that remains isolated by the drop -- * Update containg_face for isolated nodes in the dissolved faces -- * Update references in the Relation table -- * Return id of the face taking up the removed edge space -- -- }{ CREATE OR REPLACE FUNCTION topology.ST_RemEdgeModFace(toponame varchar, e1id integer) RETURNS int AS $$ DECLARE e1rec RECORD; rec RECORD; fidary int[]; topoid int; sql text; floodfaceid int; elink int; BEGIN -- -- toponame and face_id are required -- IF toponame IS NULL OR e1id IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- Get topology id BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = toponame; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; BEGIN EXECUTE 'SELECT * FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e1id INTO STRICT e1rec; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge %', e1id; WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'corrupted topology "%" (missing edge_data table)', toponame; END; -- NOT IN THE SPECS: -- Check that no TopoGeometry references the edge being removed PERFORM topology._ST_RemEdgeCheck(toponame, topoid, e1id, e1rec.left_face, e1rec.right_face); -- Update next_left_edge and next_right_edge face -- for all edges bounding the new face RAISE NOTICE 'Updating next_{right,left}_face of ring edges...'; -- TODO: reduce the following to 2 UPDATE rather than 4 -- Update next_left_edge of previous edges in left face -- { elink := e1rec.next_left_edge; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_left_edge = ' || elink || ', abs_next_left_edge = ' || abs(elink) || ' WHERE next_left_edge < 0 AND abs(next_left_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_left_edge update: %', sql; #endif EXECUTE sql; -- If the edge being removed links to self, -- we use the other face IF e1rec.abs_next_right_edge = e1rec.edge_id THEN elink := e1rec.next_left_edge; ELSE elink := e1rec.next_right_edge; END IF; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_left_edge = ' || elink || ', abs_next_left_edge = ' || abs(elink) || ' WHERE next_left_edge > 0 AND abs(next_left_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_left_edge update: %', sql; #endif EXECUTE sql; -- } -- Update next_right_edge of previous edges in right face -- { elink := e1rec.next_left_edge; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_right_edge = ' || elink || ', abs_next_right_edge = ' || abs(elink) || ' WHERE next_right_edge < 0 AND abs(next_right_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_right_edge update: %', sql; #endif EXECUTE sql; -- If the edge being removed links to self, -- we use the other face IF e1rec.abs_next_right_edge = e1rec.edge_id THEN elink := e1rec.next_left_edge; ELSE elink := e1rec.next_right_edge; END IF; sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET next_right_edge = ' || elink || ', abs_next_right_edge = ' || abs(elink) || ' WHERE next_right_edge > 0 AND abs(next_right_edge) = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'next_right_edge update: %', sql; #endif EXECUTE sql; -- } IF e1rec.left_face = e1rec.right_face THEN -- { floodfaceid = e1rec.left_face; ELSE -- }{ IF e1rec.left_face = 0 OR e1rec.right_face = 0 THEN -- { -- -- We won't add any new face, but rather let the universe -- flood the removed face. -- floodfaceid = 0; ELSE -- }{ -- we choose right face as the face that will remain -- to be symmetric with ST_AddEdgeModFace floodfaceid = e1rec.right_face; sql := 'UPDATE ' || quote_ident(toponame) || '.face SET mbr = (SELECT ' -- minimum bounding rectangle is the union of the old faces mbr -- (doing this without GEOS would be faster) || 'ST_Envelope(ST_Union(mbr)) FROM ' || quote_ident(toponame) || '.face WHERE face_id IN (' || e1rec.left_face || ',' || e1rec.right_face || ') ) WHERE face_id = ' || floodfaceid ; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'SQL: %', sql; #endif EXECUTE sql; END IF; -- } -- Update left_face for all edges still referencing old faces sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET left_face = ' || floodfaceid || ' WHERE left_face IN (' || e1rec.left_face || ',' || e1rec.right_face || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'left_face update: %', sql; #endif EXECUTE sql; -- Update right_face for all edges still referencing old faces sql := 'UPDATE ' || quote_ident(toponame) || '.edge_data SET right_face = ' || floodfaceid || ' WHERE right_face IN (' || e1rec.left_face || ',' || e1rec.right_face || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'right_face update: %', sql; #endif EXECUTE sql; -- Update containing_face for all nodes still referencing old faces sql := 'UPDATE ' || quote_ident(toponame) || '.node SET containing_face = ' || floodfaceid || ' WHERE containing_face IN (' || e1rec.left_face || ',' || e1rec.right_face || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Isolated nodes update: %', sql; #endif EXECUTE sql; -- NOT IN THE SPECS: -- Replace composition rows involving the two -- faces as one involving the new face. -- It takes a single DELETE to do that. sql := 'DELETE FROM ' || quote_ident(toponame) || '.relation r USING topology.layer l ' || 'WHERE l.level = 0 AND l.feature_type = 3' || ' AND l.topology_id = ' || topoid || ' AND l.layer_id = r.layer_id AND abs(r.element_id) IN (' || e1rec.left_face || ',' || e1rec.right_face || ') AND abs(r.element_id) != ' || floodfaceid; -- could be optimized.. #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'SQL: %', sql; #endif EXECUTE sql; END IF; -- } two faces healed... -- Delete the edge sql := 'DELETE FROM ' || quote_ident(toponame) || '.edge_data WHERE edge_id = ' || e1id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge deletion: %', sql; #endif EXECUTE sql; -- Check if any of the edge nodes remains isolated, -- set containing_face = floodfaceid in that case sql := 'UPDATE ' || quote_ident(toponame) || '.node n SET containing_face = ' || floodfaceid || ' WHERE node_id IN (' || e1rec.start_node || ',' || e1rec.end_node || ') AND NOT EXISTS (SELECT edge_id FROM ' || quote_ident(toponame) || '.edge_data WHERE start_node = n.node_id OR end_node = n.node_id)'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Checking for nodes left isolated: %', sql; #endif EXECUTE sql; IF e1rec.right_face != e1rec.left_face THEN -- { -- Delete left face, if not universe and not "flood" face IF e1rec.left_face != 0 AND e1rec.left_face != floodfaceid THEN sql := 'DELETE FROM ' || quote_ident(toponame) || '.face WHERE face_id = ' || e1rec.left_face; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Left face deletion: %', sql; #endif EXECUTE sql; END IF; -- Delete right face, if not universe and not "flood" face IF e1rec.right_face != 0 AND e1rec.right_face != floodfaceid THEN sql := 'DELETE FROM ' || quote_ident(toponame) || '.face WHERE face_id = ' || e1rec.right_face; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Right face deletion: %', sql; #endif EXECUTE sql; END IF; END IF; -- } RETURN floodfaceid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_RemEdgeModFace --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.16 -- -- ST_GetFaceGeometry(atopology, aface) -- CREATE OR REPLACE FUNCTION topology.ST_GetFaceGeometry(toponame varchar, aface integer) RETURNS GEOMETRY AS $$ DECLARE rec RECORD; sql TEXT; BEGIN -- -- toponame and aface are required -- IF toponame IS NULL OR aface IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; IF NOT EXISTS(SELECT name FROM topology.topology WHERE name = toponame) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END IF; IF aface = 0 THEN RAISE EXCEPTION 'SQL/MM Spatial exception - universal face has no geometry'; END IF; BEGIN -- No such face sql := 'SELECT NOT EXISTS (SELECT * from ' || quote_ident(toponame) || '.face WHERE face_id = ' || aface || ') as none'; EXECUTE sql INTO rec; IF rec.none THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent face.'; END IF; -- -- Construct face -- sql := 'SELECT ST_BuildArea(ST_Collect(geom)) as geom FROM ' || quote_ident(toponame) || '.edge_data WHERE left_face = ' || aface || ' OR right_face = ' || aface; FOR rec IN EXECUTE sql LOOP RETURN rec.geom; END LOOP; EXCEPTION WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'corrupted topology "%"', toponame; END; RETURN NULL; END $$ LANGUAGE 'plpgsql' STABLE; --} ST_GetFaceGeometry --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.1 -- -- ST_AddIsoNode(atopology, aface, apoint) -- CREATE OR REPLACE FUNCTION topology.ST_AddIsoNode(atopology varchar, aface integer, apoint geometry) RETURNS INTEGER AS $$ DECLARE rec RECORD; nodeid integer; sql text; containingface integer; BEGIN -- -- Atopology and apoint are required -- IF atopology IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- -- Atopology must be registered -- IF NOT EXISTS(SELECT name FROM topology.topology WHERE topology.name = atopology) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END IF; -- -- Apoint must be a point -- IF substring(geometrytype(apoint), 1, 5) != 'POINT' THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid point'; END IF; -- -- Check if a coincident node already exists -- -- We use index AND x/y equality -- FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(atopology) || '.node ' || 'WHERE ST_Equals(geom, ' || quote_literal(apoint::text) || '::geometry)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - coincident node'; END LOOP; -- -- Check if any edge crosses (intersects) this node -- I used _intersects_ here to include boundaries (endpoints) -- FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(atopology) || '.edge ' || 'WHERE ST_Intersects(geom, ' || quote_literal(apoint::text) || '::geometry)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - edge crosses node.'; END LOOP; -- retrieve the face that contains (eventually) the point -- -- first test is to check if there is inside an mbr (more fast) -- sql := 'SELECT f.face_id FROM ' || quote_ident(atopology) || '.face f WHERE f.face_id > 0 AND f.mbr && ' || quote_literal(apoint::text) || '::geometry AND ST_Contains(topology.ST_GetFaceGeometry(' || quote_literal(atopology) || ', f.face_id), ' || quote_literal(apoint::text) || '::geometry)'; IF aface IS NOT NULL AND aface != 0 THEN sql := sql || ' AND f.face_id = ' || aface; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO containingface; -- If aface was specified, check that it was correct IF aface IS NOT NULL THEN -- { IF aface = 0 THEN -- { IF containingface IS NOT NULL THEN -- { RAISE EXCEPTION 'SQL/MM Spatial exception - within face % (not universe)', containingface; ELSE -- }{ containingface := 0; END IF; -- } ELSE -- }{ -- aface != 0 IF containingface IS NULL OR containingface != aface THEN -- { RAISE EXCEPTION 'SQL/MM Spatial exception - not within face'; END IF; -- } END IF; -- } ELSE -- }{ -- aface is null containingface := COALESCE(containingface, 0); END IF; -- } -- -- Insert the new row -- sql := 'INSERT INTO ' || quote_ident(atopology) || '.node(node_id, geom, containing_face) SELECT nextval(' || quote_literal( quote_ident(atopology) || '.node_node_id_seq' ) || '),' ||quote_literal(apoint::text) || '::geometry,' || containingface || ' RETURNING node_id'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO nodeid; RETURN nodeid; EXCEPTION -- TODO: avoid the EXCEPTION handling here ? WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_AddIsoNode --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.2 -- -- ST_MoveIsoNode(atopology, anode, apoint) -- CREATE OR REPLACE FUNCTION topology.ST_MoveIsoNode(atopology character varying, anode integer, apoint geometry) RETURNS text AS $$ DECLARE rec RECORD; BEGIN -- -- All arguments are required -- IF atopology IS NULL OR anode IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- -- Apoint must be a point -- IF substring(geometrytype(apoint), 1, 5) != 'POINT' THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid point'; END IF; -- -- Check node isolation. -- FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(atopology) || '.edge ' || ' WHERE start_node = ' || anode || ' OR end_node = ' || anode LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - not isolated node'; END LOOP; -- -- Check if a coincident node already exists -- -- We use index AND x/y equality -- FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(atopology) || '.node ' || 'WHERE geom && ' || quote_literal(apoint::text) || '::geometry' ||' AND ST_X(geom) = ST_X('||quote_literal(apoint::text)||'::geometry)' ||' AND ST_Y(geom) = ST_Y('||quote_literal(apoint::text)||'::geometry)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - coincident node'; END LOOP; -- -- Check if any edge crosses (intersects) this node -- I used _intersects_ here to include boundaries (endpoints) -- FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(atopology) || '.edge ' || 'WHERE geom && ' || quote_literal(apoint::text) || ' AND ST_Intersects(geom, ' || quote_literal(apoint::text) || '::geometry)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - edge crosses node.'; END LOOP; -- -- Update node point -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.node ' || ' SET geom = ' || quote_literal(apoint::text) || ' WHERE node_id = ' || anode; RETURN 'Isolated Node ' || anode || ' moved to location ' || ST_X(apoint) || ',' || ST_Y(apoint); END $$ LANGUAGE plpgsql VOLATILE; --} ST_MoveIsoNode --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.3 -- -- ST_RemoveIsoNode(atopology, anode) -- CREATE OR REPLACE FUNCTION topology.ST_RemoveIsoNode(atopology varchar, anode integer) RETURNS TEXT AS $$ DECLARE rec RECORD; BEGIN -- -- Atopology and apoint are required -- IF atopology IS NULL OR anode IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- -- Check node isolation. -- FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE start_node = ' || anode || ' OR end_node = ' || anode LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - not isolated node'; END LOOP; EXECUTE 'DELETE FROM ' || quote_ident(atopology) || '.node ' || ' WHERE node_id = ' || anode; RETURN 'Isolated node ' || anode || ' removed'; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_RemoveIsoNode --{ -- According to http://trac.osgeo.org/postgis/ticket/798 -- ST_RemoveIsoNode was renamed to ST_RemIsoNode in the final ISO -- document -- CREATE OR REPLACE FUNCTION topology.ST_RemIsoNode(varchar, integer) RETURNS TEXT AS $$ SELECT topology.ST_RemoveIsoNode($1, $2) $$ LANGUAGE 'sql' VOLATILE; --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.7 -- -- ST_RemoveIsoEdge(atopology, anedge) -- CREATE OR REPLACE FUNCTION topology.ST_RemoveIsoEdge(atopology varchar, anedge integer) RETURNS TEXT AS $$ DECLARE edge RECORD; rec RECORD; ok BOOL; BEGIN -- -- Atopology and anedge are required -- IF atopology IS NULL OR anedge IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- -- Check node existance -- ok = false; FOR edge IN EXECUTE 'SELECT * FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE edge_id = ' || anedge LOOP ok = true; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge'; END IF; -- -- Check node isolation -- IF edge.left_face != edge.right_face THEN RAISE EXCEPTION 'SQL/MM Spatial exception - not isolated edge'; END IF; FOR rec IN EXECUTE 'SELECT * FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE edge_id != ' || anedge || ' AND ( start_node = ' || edge.start_node || ' OR start_node = ' || edge.end_node || ' OR end_node = ' || edge.start_node || ' OR end_node = ' || edge.end_node || ' ) ' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - not isolated edge'; END LOOP; -- -- Delete the edge -- EXECUTE 'DELETE FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE edge_id = ' || anedge; RETURN 'Isolated edge ' || anedge || ' removed'; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_RemoveIsoEdge --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.8 -- -- ST_NewEdgesSplit(atopology, anedge, apoint) -- -- Not in the specs: -- * Update references in the Relation table. -- CREATE OR REPLACE FUNCTION topology.ST_NewEdgesSplit(atopology varchar, anedge integer, apoint geometry) RETURNS INTEGER AS $$ DECLARE oldedge RECORD; rec RECORD; tmp integer; topoid integer; nodeid integer; nodepos float8; edgeid1 integer; edgeid2 integer; edge1 geometry; edge2 geometry; ok BOOL; BEGIN -- -- All args required -- IF atopology IS NULL OR anedge IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- Get topology id BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = atopology; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; -- -- Check node existance -- ok = false; FOR oldedge IN EXECUTE 'SELECT * FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE edge_id = ' || anedge LOOP ok = true; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge'; END IF; -- -- Check that given point is Within(anedge.geom) -- IF NOT ST_Within(apoint, oldedge.geom) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - point not on edge'; END IF; -- -- Check if a coincident node already exists -- FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(atopology) || '.node ' || 'WHERE geom && ' || quote_literal(apoint::text) || '::geometry' || ' AND ST_X(geom) = ST_X(' || quote_literal(apoint::text) || '::geometry)' || ' AND ST_Y(geom) = ST_Y(' || quote_literal(apoint::text) || '::geometry)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - coincident node'; END LOOP; -- -- Get new node id -- FOR rec IN EXECUTE 'SELECT nextval(''' || atopology || '.node_node_id_seq'')' LOOP nodeid = rec.nextval; END LOOP; --RAISE NOTICE 'Next node id = % ', nodeid; -- -- Add the new node -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.node(node_id, geom) VALUES(' || nodeid || ',' || quote_literal(apoint::text) || ')'; -- -- Delete the old edge -- EXECUTE 'DELETE FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE edge_id = ' || anedge; -- -- Compute new edges -- edge2 := ST_Split(oldedge.geom, apoint); edge1 := ST_GeometryN(edge2, 1); edge2 := ST_GeometryN(edge2, 2); -- -- Get ids for the new edges -- FOR rec IN EXECUTE 'SELECT nextval(''' || atopology || '.edge_data_edge_id_seq'')' LOOP edgeid1 = rec.nextval; END LOOP; FOR rec IN EXECUTE 'SELECT nextval(''' || atopology || '.edge_data_edge_id_seq'')' LOOP edgeid2 = rec.nextval; END LOOP; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' inserting new edges % and % split from %', edgeid1, edgeid2, anedge; #endif --RAISE NOTICE 'EdgeId1 % EdgeId2 %', edgeid1, edgeid2; --RAISE DEBUG 'oldedge.next_left_edge: %', oldedge.next_left_edge; --RAISE DEBUG 'oldedge.next_right_edge: %', oldedge.next_right_edge; -- -- Insert the two new edges -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.edge VALUES(' || edgeid1 -- edge_id || ',' || oldedge.start_node -- start_node || ',' || nodeid -- end_node || ',' || edgeid2 -- next_left_edge || ',' || CASE -- next_right_edge WHEN oldedge.next_right_edge = anedge THEN edgeid1 WHEN oldedge.next_right_edge = -anedge THEN -edgeid2 ELSE oldedge.next_right_edge END || ',' || oldedge.left_face -- left_face || ',' || oldedge.right_face -- right_face || ',' || quote_literal(edge1::text) -- geom ||')'; EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.edge VALUES(' || edgeid2 -- edge_id || ',' || nodeid -- start_node || ',' || oldedge.end_node -- end_node || ',' || CASE -- next_left_edge WHEN oldedge.next_left_edge = -anedge THEN -edgeid2 WHEN oldedge.next_left_edge = anedge THEN edgeid1 ELSE oldedge.next_left_edge END || ',' || -edgeid1 -- next_right_edge || ',' || oldedge.left_face -- left_face || ',' || oldedge.right_face -- right_face || ',' || quote_literal(edge2::text) -- geom ||')'; -- -- Update all next edge references to match new layout -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_right_edge = ' || edgeid2 || ',' || ' abs_next_right_edge = ' || edgeid2 || ' WHERE next_right_edge = ' || anedge || ' AND edge_id NOT IN (' || edgeid1 || ',' || edgeid2 || ')' ; EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_right_edge = ' || -edgeid1 || ',' || ' abs_next_right_edge = ' || edgeid1 || ' WHERE next_right_edge = ' || -anedge || ' AND edge_id NOT IN (' || edgeid1 || ',' || edgeid2 || ')' ; EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_left_edge = ' || edgeid1 || ',' || ' abs_next_left_edge = ' || edgeid1 || ' WHERE next_left_edge = ' || anedge || ' AND edge_id NOT IN (' || edgeid1 || ',' || edgeid2 || ')' ; EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET ' || ' next_left_edge = ' || -edgeid2 || ',' || ' abs_next_left_edge = ' || edgeid2 || ' WHERE next_left_edge = ' || -anedge || ' AND edge_id NOT IN (' || edgeid1 || ',' || edgeid2 || ')' ; -- -- Update references in the Relation table. -- We only take into considerations non-hierarchical -- TopoGeometry here, for obvious reasons. -- FOR rec IN EXECUTE 'SELECT r.* FROM ' || quote_ident(atopology) || '.relation r, topology.layer l ' || ' WHERE ' || ' l.topology_id = ' || topoid || ' AND l.level = 0 ' || ' AND l.layer_id = r.layer_id ' || ' AND abs(r.element_id) = ' || anedge || ' AND r.element_type = 2' LOOP --RAISE NOTICE 'TopoGeometry % in layer % contains the edge being split', rec.topogeo_id, rec.layer_id; -- Delete old reference EXECUTE 'DELETE FROM ' || quote_ident(atopology) || '.relation ' || ' WHERE ' || 'layer_id = ' || rec.layer_id || ' AND ' || 'topogeo_id = ' || rec.topogeo_id || ' AND ' || 'element_type = ' || rec.element_type || ' AND ' || 'abs(element_id) = ' || anedge; -- Add new reference to edge1 IF rec.element_id < 0 THEN tmp = -edgeid1; ELSE tmp = edgeid1; END IF; EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.relation ' || ' VALUES( ' || rec.topogeo_id || ',' || rec.layer_id || ',' || tmp || ',' || rec.element_type || ')'; -- Add new reference to edge2 IF rec.element_id < 0 THEN tmp = -edgeid2; ELSE tmp = edgeid2; END IF; EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.relation ' || ' VALUES( ' || rec.topogeo_id || ',' || rec.layer_id || ',' || tmp || ',' || rec.element_type || ')'; END LOOP; --RAISE NOTICE 'Edge % split in edges % and % by node %', -- anedge, edgeid1, edgeid2, nodeid; RETURN nodeid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_NewEdgesSplit --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.9 -- -- ST_ModEdgeSplit(atopology, anedge, apoint) -- -- Not in the specs: -- * Update references in the Relation table. -- CREATE OR REPLACE FUNCTION topology.ST_ModEdgeSplit(atopology varchar, anedge integer, apoint geometry) RETURNS INTEGER AS $$ DECLARE oldedge RECORD; rec RECORD; tmp integer; topoid integer; nodeid integer; nodepos float8; newedgeid integer; newedge1 geometry; newedge2 geometry; query text; ok BOOL; BEGIN -- -- All args required -- IF atopology IS NULL OR anedge IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- Get topology id BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = atopology; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; -- -- Check node existance -- ok = false; FOR oldedge IN EXECUTE 'SELECT * FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE edge_id = ' || anedge LOOP ok = true; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge'; END IF; -- -- Check that given point is Within(anedge.geom) -- IF NOT ST_Within(apoint, oldedge.geom) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - point not on edge'; END IF; -- -- Check if a coincident node already exists -- FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(atopology) || '.node ' || 'WHERE geom && ' || quote_literal(apoint::text) || '::geometry' ||' AND ST_X(geom) = ST_X(' || quote_literal(apoint::text) || '::geometry)' ||' AND ST_Y(geom) = ST_Y(' ||quote_literal(apoint::text)||'::geometry)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - coincident node'; END LOOP; -- -- Get new node id -- FOR rec IN EXECUTE 'SELECT nextval(''' || atopology || '.node_node_id_seq'')' LOOP nodeid = rec.nextval; END LOOP; --RAISE NOTICE 'Next node id = % ', nodeid; -- -- Add the new node -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.node(node_id, geom) VALUES('||nodeid||','||quote_literal(apoint::text)|| ')'; -- -- Compute new edge -- newedge2 := ST_Split(oldedge.geom, apoint); newedge1 := ST_GeometryN(newedge2, 1); newedge2 := ST_GeometryN(newedge2, 2); -- -- Get ids for the new edge -- FOR rec IN EXECUTE 'SELECT nextval(''' || atopology || '.edge_data_edge_id_seq'')' LOOP newedgeid = rec.nextval; END LOOP; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' inserting new edge % split from %', newedgeid, anedge; #endif -- -- Insert the new edge -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.edge ' || '(edge_id, start_node, end_node,' || 'next_left_edge, next_right_edge,' || 'left_face, right_face, geom) ' || 'VALUES(' || newedgeid || ',' || nodeid || ',' || oldedge.end_node || ',' || COALESCE( -- next_left_edge NULLIF( oldedge.next_left_edge, -anedge ), -newedgeid ) || ',' || -anedge -- next_right_edge || ',' || oldedge.left_face -- left_face || ',' || oldedge.right_face -- right_face || ',' || quote_literal(newedge2::text) -- geom ||')'; -- -- Update the old edge -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data ' || ' SET geom = ' || quote_literal(newedge1::text) || ',' || ' next_left_edge = ' || newedgeid || ', abs_next_left_edge = ' || newedgeid || ',' || ' end_node = ' || nodeid || ' WHERE edge_id = ' || anedge; -- -- Update all next edge references to match new layout -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_right_edge = ' || -newedgeid || ',' || ' abs_next_right_edge = ' || newedgeid || ' WHERE edge_id != ' || newedgeid || ' AND next_right_edge = ' || -anedge; EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET ' || ' next_left_edge = ' || -newedgeid || ',' || ' abs_next_left_edge = ' || newedgeid || ' WHERE edge_id != ' || newedgeid || ' AND next_left_edge = ' || -anedge; -- -- Update references in the Relation table. -- We only take into considerations non-hierarchical -- TopoGeometry here, for obvious reasons. -- FOR rec IN EXECUTE 'SELECT r.* FROM ' || quote_ident(atopology) || '.relation r, topology.layer l ' || ' WHERE ' || ' l.topology_id = ' || topoid || ' AND l.level = 0 ' || ' AND l.layer_id = r.layer_id ' || ' AND abs(r.element_id) = ' || anedge || ' AND r.element_type = 2' LOOP --RAISE NOTICE 'TopoGeometry % in layer % contains the edge being split (%) - updating to add new edge %', rec.topogeo_id, rec.layer_id, anedge, newedgeid; -- Add new reference to edge1 IF rec.element_id < 0 THEN tmp = -newedgeid; ELSE tmp = newedgeid; END IF; query = 'INSERT INTO ' || quote_ident(atopology) || '.relation ' || ' VALUES( ' || rec.topogeo_id || ',' || rec.layer_id || ',' || tmp || ',' || rec.element_type || ')'; --RAISE NOTICE '%', query; EXECUTE query; END LOOP; --RAISE NOTICE 'Edge % split in edges % and % by node %', -- anedge, anedge, newedgeid, nodeid; RETURN nodeid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_ModEdgesSplit --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.4 -- -- ST_AddIsoEdge(atopology, anode, anothernode, acurve) -- -- Not in the specs: -- * Reset containing_face for starting and ending point, -- as they stop being isolated nodes -- * Refuse to add a closed edge, as it would not be isolated -- (ie: would create a ring) -- -- }{ -- CREATE OR REPLACE FUNCTION topology.ST_AddIsoEdge(atopology varchar, anode integer, anothernode integer, acurve geometry) RETURNS INTEGER AS $$ DECLARE aface INTEGER; face GEOMETRY; snodegeom GEOMETRY; enodegeom GEOMETRY; count INTEGER; rec RECORD; edgeid INTEGER; BEGIN -- -- All arguments required -- IF atopology IS NULL OR anode IS NULL OR anothernode IS NULL OR acurve IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- NOT IN THE SPECS: -- A closed edge is never isolated (as it forms a face) IF anode = anothernode THEN RAISE EXCEPTION 'Closed edges would not be isolated, try ST_AddEdgeNewFaces'; END IF; -- -- Acurve must be a LINESTRING -- IF substring(geometrytype(acurve), 1, 4) != 'LINE' THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid curve'; END IF; -- -- Acurve must be simple -- IF NOT ST_IsSimple(acurve) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - curve not simple'; END IF; -- -- Check for: -- existence of nodes -- nodes faces match -- Extract: -- nodes face id -- nodes geoms -- aface := NULL; count := 0; FOR rec IN EXECUTE 'SELECT geom, containing_face, node_id FROM ' || quote_ident(atopology) || '.node WHERE node_id = ' || anode || ' OR node_id = ' || anothernode LOOP IF rec.containing_face IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - not isolated node'; END IF; IF aface IS NULL THEN aface := rec.containing_face; ELSE IF aface != rec.containing_face THEN RAISE EXCEPTION 'SQL/MM Spatial exception - nodes in different faces'; END IF; END IF; -- Get nodes geom IF rec.node_id = anode THEN snodegeom = rec.geom; ELSE enodegeom = rec.geom; END IF; count = count+1; END LOOP; -- TODO: don't need count, can do with snodegeom/enodegeom instead.. IF count < 2 THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent node'; END IF; -- -- l) Check that start point of acurve match start node -- geoms. -- IF ST_X(snodegeom) != ST_X(ST_StartPoint(acurve)) OR ST_Y(snodegeom) != ST_Y(ST_StartPoint(acurve)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - start node not geometry start point.'; END IF; -- -- m) Check that end point of acurve match end node -- geoms. -- IF ST_X(enodegeom) != ST_X(ST_EndPoint(acurve)) OR ST_Y(enodegeom) != ST_Y(ST_EndPoint(acurve)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - end node not geometry end point.'; END IF; -- -- n) Check if curve crosses (contains) any node -- I used _contains_ here to leave endpoints out -- FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(atopology) || '.node ' || ' WHERE geom && ' || quote_literal(acurve::text) || ' AND ST_Contains(' || quote_literal(acurve::text) || ',geom)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses a node'; END LOOP; -- -- o) Check if curve intersects any other edge -- FOR rec IN EXECUTE 'SELECT * FROM ' || quote_ident(atopology) || '.edge_data WHERE ST_Intersects(geom, ' || quote_literal(acurve::text) || '::geometry)' LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - geometry intersects an edge'; END LOOP; -- -- Get new edge id from sequence -- FOR rec IN EXECUTE 'SELECT nextval(''' || atopology || '.edge_data_edge_id_seq'')' LOOP edgeid = rec.nextval; END LOOP; -- TODO: this should likely be an exception instead ! IF aface IS NULL THEN aface := 0; END IF; -- -- Insert the new row -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.edge VALUES(' || edgeid || ',' || anode || ',' || anothernode || ',' || (-edgeid) || ',' || edgeid || ',' || aface || ',' || aface || ',' || quote_literal(acurve::text) || ')'; -- -- Update Node containing_face values -- -- the nodes anode and anothernode are no more isolated -- because now there is an edge connecting them -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.node SET containing_face = NULL where (node_id =' || anode || ' OR node_id=' || anothernode || ')'; RETURN edgeid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_AddIsoEdge -- Internal function used by ST_ChangeEdgeGeom to compare -- adjacent edges of an edge endpoint -- -- @param anode the node to use edge end star of -- @param anedge the directed edge to get adjacents from -- if positive `anode' is assumed to be its start node -- if negative `anode' is assumed to be its end node -- -- { CREATE OR REPLACE FUNCTION topology._ST_AdjacentEdges(atopology varchar, anode integer, anedge integer) RETURNS integer[] AS $$ DECLARE ret integer[]; BEGIN WITH edgestar AS ( SELECT *, count(*) over () AS cnt FROM topology.GetNodeEdges(atopology, anode) ) SELECT ARRAY[ ( SELECT p.edge AS prev FROM edgestar p WHERE p.sequence = CASE WHEN m.sequence-1 < 1 THEN cnt ELSE m.sequence-1 END ), ( SELECT p.edge AS prev FROM edgestar p WHERE p.sequence = ((m.sequence)%cnt)+1 ) ] FROM edgestar m WHERE edge = anedge INTO ret; RETURN ret; END $$ LANGUAGE 'plpgsql' STABLE; --} --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.6 -- -- ST_ChangeEdgeGeom(atopology, anedge, acurve) -- -- Not in the specs: -- * Raise an exception if given a non-existent edge -- * Raise an exception if movement is not topologically isomorphic -- -- }{ CREATE OR REPLACE FUNCTION topology.ST_ChangeEdgeGeom(atopology varchar, anedge integer, acurve geometry) RETURNS TEXT AS $$ DECLARE rec RECORD; rng_info RECORD; -- movement range info oldedge RECORD; range GEOMETRY; -- movement range tmp1 GEOMETRY; snode_info RECORD; enode_info RECORD; sql TEXT; iscw BOOLEAN; BEGIN -- -- All arguments required -- IF atopology IS NULL OR anedge IS NULL OR acurve IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- -- Acurve must be a LINESTRING -- IF substring(geometrytype(acurve), 1, 4) != 'LINE' THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid curve'; END IF; -- -- Acurve must be a simple -- IF NOT ST_IsSimple(acurve) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - curve not simple'; END IF; -- -- Get data about existing edge -- BEGIN EXECUTE 'SELECT * FROM ' || quote_ident(atopology) || '.edge_data ' || ' WHERE edge_id = ' || anedge INTO STRICT oldedge; EXCEPTION -- NOT IN THE SPECS: check given edge existance WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent edge %', anedge; END; -- -- e) Check StartPoint consistency -- IF NOT ST_Equals(ST_StartPoint(acurve), ST_StartPoint(oldedge.geom)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - start node not geometry start point.'; END IF; IF oldedge.start_node = oldedge.end_node THEN -- { -- Not in the specs: -- if the edge is closed, check we didn't change winding ! -- (should be part of isomorphism checking) range := ST_MakePolygon(oldedge.geom); iscw := ST_OrderingEquals(range, ST_ForceRHR(range)); IF ST_NumPoints(ST_RemoveRepeatedPoints(acurve)) < 3 THEN RAISE EXCEPTION 'Invalid edge (no two distinct vertices exist)'; END IF; range := ST_MakePolygon(acurve); IF iscw != ST_OrderingEquals(range, ST_ForceRHR(range)) THEN RAISE EXCEPTION 'Edge twist at node %', ST_AsText(ST_StartPoint(oldedge.geom)); END IF; ELSE -- }{ -- -- f) Check EndPoint consistency -- IF NOT ST_Equals(ST_EndPoint(acurve), ST_EndPoint(oldedge.geom)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - end node not geometry end point.'; END IF; END IF; -- } -- -- g) Check if curve crosses any node -- FOR rec IN EXECUTE 'SELECT node_id, ST_Relate(geom, ' || quote_literal(acurve::text) || '::geometry, 2) as relate FROM ' || quote_ident(atopology) || '.node WHERE geom && ' || quote_literal(acurve::text) || '::geometry AND node_id NOT IN (' || oldedge.start_node || ',' || oldedge.end_node || ')' LOOP IF ST_RelateMatch(rec.relate, 'T********') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses a node'; END IF; END LOOP; -- -- h) Check if this geometry has any interaction with any existing edge -- sql := 'SELECT edge_id, ST_Relate(geom,' || quote_literal(acurve::text) || '::geometry, 2) as im FROM ' || quote_ident(atopology) || '.edge_data WHERE edge_id != ' || anedge || ' AND geom && ' || quote_literal(acurve::text) || '::geometry'; FOR rec IN EXECUTE sql LOOP -- { --RAISE DEBUG 'IM=%',rec.im; IF ST_RelateMatch(rec.im, 'F********') THEN CONTINUE; -- no interior-interior intersection END IF; IF ST_RelateMatch(rec.im, '1FFF*FFF2') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - coincident edge %', rec.edge_id; END IF; -- NOT IN THE SPECS: geometry touches an edge IF ST_RelateMatch(rec.im, '1********') THEN RAISE EXCEPTION 'Spatial exception - geometry intersects edge %', rec.edge_id; END IF; IF ST_RelateMatch(rec.im, 'T********') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses edge %', rec.edge_id; END IF; END LOOP; -- } -- -- Not in the specs: -- Check topological isomorphism -- -- Check that the "motion range" doesn't include any node --{ sql := 'SELECT ST_Collect(geom) as nodes, ' || 'null::geometry as r1, null::geometry as r2 FROM ' || quote_ident(atopology) || '.node WHERE geom && ' || quote_literal(ST_Collect(ST_Envelope(oldedge.geom), ST_Envelope(acurve))::text) || '::geometry AND node_id NOT IN ( ' || oldedge.start_node || ',' || oldedge.end_node || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO rng_info; -- There's no collision if there's no nodes in the combined -- bbox of old and new edges. -- IF NOT ST_IsEmpty(rng_info.nodes) THEN -- { #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '% nodes in the edge movement range bbox: %', ST_NumGeometries(rng_info.nodes), ST_AsText(rng_info.nodes) ; #endif tmp1 := ST_MakeLine(ST_EndPoint(oldedge.geom), ST_StartPoint(oldedge.geom)); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'end-to-start: %', ST_AsText(tmp1); #endif rng_info.r1 := ST_MakeLine(oldedge.geom, tmp1); IF ST_NumPoints(rng_info.r1) < 4 THEN rng_info.r1 := ST_AddPoint(rng_info.r1, ST_StartPoint(oldedge.geom)); END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Old-ring: %', ST_AsText(rng_info.r1); #endif rng_info.r1 := ST_CollectionExtract( ST_MakeValid(ST_MakePolygon(rng_info.r1)), 3); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Old-ring (poly): %', ST_AsText(rng_info.r1); #endif rng_info.r2 := ST_MakeLine(acurve, tmp1); IF ST_NumPoints(rng_info.r2) < 4 THEN rng_info.r2 := ST_AddPoint(rng_info.r2, ST_StartPoint(oldedge.geom)); END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'New-ring: %', ST_AsText(rng_info.r2); #endif rng_info.r2 := ST_CollectionExtract( ST_MakeValid(ST_MakePolygon(rng_info.r2)), 3); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'New-ring (poly): %', ST_AsText(rng_info.r2); #endif FOR rec IN WITH nodes AS ( SELECT * FROM ST_Dump(rng_info.nodes) ), inr1 AS ( SELECT path[1] FROM nodes WHERE ST_Contains(rng_info.r1, geom) ), inr2 AS ( SELECT path[1] FROM nodes WHERE ST_Contains(rng_info.r2, geom) ) ( SELECT * FROM inr1 EXCEPT SELECT * FROM inr2 ) UNION ( SELECT * FROM inr2 EXCEPT SELECT * FROM inr1 ) LOOP RAISE EXCEPTION 'Edge motion collision at %', ST_AsText(ST_GeometryN(rng_info.nodes, rec.path)); END LOOP; END IF; -- } --} motion range checking end -- -- Check edge adjacency before --{ SELECT topology._ST_AdjacentEdges( atopology, oldedge.start_node, anedge ) as pre, NULL::integer[] as post INTO STRICT snode_info; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Bs:%', snode_info.pre; #endif SELECT topology._ST_AdjacentEdges( atopology, oldedge.end_node, -anedge ) as pre, NULL::integer[] as post INTO STRICT enode_info; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Be:%', enode_info.pre; #endif --} -- -- Update edge geometry -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data ' || ' SET geom = ' || quote_literal(acurve::text) || ' WHERE edge_id = ' || anedge; -- -- Check edge adjacency after --{ snode_info.post := topology._ST_AdjacentEdges( atopology, oldedge.start_node, anedge ); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'As:%', snode_info.post; #endif enode_info.post := topology._ST_AdjacentEdges( atopology, oldedge.end_node, -anedge ); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Ae:%', enode_info.post; #endif IF snode_info.pre != snode_info.post THEN RAISE EXCEPTION 'Edge changed disposition around start node %', oldedge.start_node; END IF; IF enode_info.pre != enode_info.post THEN RAISE EXCEPTION 'Edge changed disposition around end node %', oldedge.end_node; END IF; --} -- Update faces MBR of left and right faces -- TODO: think about ways to optimize this part, like see if -- the old edge geometry partecipated in the definition -- of the current MBR (for shrinking) or the new edge MBR -- would be larger than the old face MBR... -- IF oldedge.left_face != 0 THEN sql := 'UPDATE ' || quote_ident(atopology) || '.face ' || ' SET mbr = ' || quote_literal( ST_Envelope(topology.ST_GetFaceGeometry(atopology, oldedge.left_face))::text ) || '::geometry WHERE face_id = ' || oldedge.left_face; EXECUTE sql; END IF; IF oldedge.right_face != 0 AND oldedge.right_face != oldedge.left_face THEN sql := 'UPDATE ' || quote_ident(atopology) || '.face ' || ' SET mbr = ' || quote_literal( ST_Envelope(topology.ST_GetFaceGeometry(atopology, oldedge.right_face))::text ) || '::geometry WHERE face_id = ' || oldedge.right_face; EXECUTE sql; END IF; RETURN 'Edge ' || anedge || ' changed'; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_ChangeEdgeGeom -- -- _ST_AddFaceSplit -- -- Add a split face by walking on the edge side. -- -- @param atopology topology name -- @param anedge edge id and walking side (left:positive right:negative) -- @param oface the face in which the edge identifier is known to be -- @param mbr_only do not create a new face but update MBR of the current -- -- The created face, if any, will be at the left hand of the walking path -- -- Return: -- NULL: if mbr_only was requested -- 0: if the edge does not form a ring -- NULL: if it is impossible to create a face on the requested side -- ( new face on the side is the universe ) -- >0 : id of newly added face -- -- { CREATE OR REPLACE FUNCTION topology._ST_AddFaceSplit(atopology varchar, anedge integer, oface integer, mbr_only bool) RETURNS INTEGER AS $$ DECLARE fan RECORD; newface INTEGER; sql TEXT; isccw BOOLEAN; ishole BOOLEAN; BEGIN IF oface = 0 AND mbr_only THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Universal face has no MBR, doing nothing'; #endif RETURN NULL; END IF; SELECT null::int[] as newring_edges, null::geometry as shell INTO fan; SELECT array_agg(edge) FROM topology.getringedges(atopology, anedge) INTO STRICT fan.newring_edges; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'ring: %', fan.newring_edges; #endif -- You can't get to the other side of an edge forming a ring IF fan.newring_edges @> ARRAY[-anedge] THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'not a ring'; #endif RETURN 0; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge % splitted face %', anedge, oface; #endif sql := 'WITH ids as ( select row_number() over () as seq, edge from unnest(' || quote_literal(fan.newring_edges::text) || '::int[] ) u(edge) ), edges AS ( select CASE WHEN i.edge < 0 THEN ST_Reverse(e.geom) ELSE e.geom END as g FROM ids i left join ' || quote_ident(atopology) || '.edge_data e ON(e.edge_id = abs(i.edge)) ORDER BY seq) SELECT ST_MakePolygon(ST_MakeLine(g.g)) FROM edges g;'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO fan.shell; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'got shell'; #endif isccw := NOT ST_OrderingEquals(fan.shell, ST_ForceRHR(fan.shell)); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'winding: %', CASE WHEN isccw THEN 'CCW' ELSE 'CW' END; #endif IF oface = 0 THEN IF NOT isccw THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Not considering CW ring in universe face'; #endif RETURN NULL; END IF; END IF; IF mbr_only AND oface != 0 THEN -- Update old face mbr (nothing to do if we're opening an hole) IF isccw THEN -- { sql := 'UPDATE ' || quote_ident(atopology) || '.face SET mbr = ' || quote_literal(ST_Envelope(fan.shell)::text) || '::geometry WHERE face_id = ' || oface; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating old face mbr'; #endif EXECUTE sql; END IF; -- } RETURN NULL; END IF; IF oface != 0 AND NOT isccw THEN -- { -- Face created an hole in an outer face sql := 'INSERT INTO ' || quote_ident(atopology) || '.face(mbr) SELECT mbr FROM ' || quote_ident(atopology) || '.face WHERE face_id = ' || oface || ' RETURNING face_id'; ELSE sql := 'INSERT INTO ' || quote_ident(atopology) || '.face(mbr) VALUES (' || quote_literal(ST_Envelope(fan.shell)::text) || '::geometry) RETURNING face_id'; END IF; -- } -- Insert new face #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Inserting new face'; #endif EXECUTE sql INTO STRICT newface; -- Update forward edges sql := 'UPDATE ' || quote_ident(atopology) || '.edge_data SET left_face = ' || newface || ' WHERE left_face = ' || oface || ' AND edge_id = ANY (' || quote_literal(array( select +(x) from unnest(fan.newring_edges) u(x) )::text) || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating forward edges in new ring'; #endif EXECUTE sql; -- Update backward edges sql := 'UPDATE ' || quote_ident(atopology) || '.edge_data SET right_face = ' || newface || ' WHERE right_face = ' || oface || ' AND edge_id = ANY (' || quote_literal(array( select -(x) from unnest(fan.newring_edges) u(x) )::text) || ')'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating backward edges in new ring'; #endif EXECUTE sql; IF oface != 0 AND NOT isccw THEN -- { -- face shrinked, must update all non-contained edges and nodes #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating rings in former shell'; #endif ishole := true; ELSE #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating contained edges'; #endif ishole := false; END IF; -- } -- Update edges bounding the old face sql := 'UPDATE ' || quote_ident(atopology) || '.edge_data SET left_face = CASE WHEN left_face = ' || oface || ' THEN ' || newface || ' ELSE left_face END, right_face = CASE WHEN right_face = ' || oface || ' THEN ' || newface || ' ELSE right_face END WHERE ( left_face = ' || oface || ' OR right_face = ' || oface || ') AND NOT edge_id = ANY (' || quote_literal( array( select abs(x) from unnest(fan.newring_edges) u(x) )::text ) || ') AND '; IF ishole THEN sql := sql || 'NOT '; END IF; sql := sql || '( ' || quote_literal(fan.shell::text) || ' && geom AND _ST_Contains(' || quote_literal(fan.shell::text) -- We only need to check a single point, but must not be an endpoint || '::geometry, ST_LineInterpolatePoint(geom, 0.2)) )'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating edges bounding the old face: %', sql; #endif EXECUTE sql; -- Update isolated nodes in new new face sql := 'UPDATE ' || quote_ident(atopology) || '.node SET containing_face = ' || newface || ' WHERE containing_face = ' || oface || ' AND '; IF ishole THEN sql := sql || 'NOT '; END IF; sql := sql || 'ST_Contains(' || quote_literal(fan.shell::text) || '::geometry, geom)'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating isolated nodes in old face'; #endif EXECUTE sql; RETURN newface; END $$ LANGUAGE 'plpgsql' VOLATILE; --} --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.12 -- -- ST_AddEdgeNewFaces(atopology, anode, anothernode, acurve) -- -- Not in the specs: -- * Reset containing_face for starting and ending point, -- as they stop being isolated nodes -- * Update references in the Relation table. -- CREATE OR REPLACE FUNCTION topology.ST_AddEdgeNewFaces(atopology varchar, anode integer, anothernode integer, acurve geometry) RETURNS INTEGER AS $$ DECLARE rec RECORD; i INTEGER; topoid INTEGER; az FLOAT8; span RECORD; -- start point analysis data epan RECORD; -- end point analysis data fan RECORD; -- face analisys newedge RECORD; -- informations about new edge sql TEXT; newfaces INTEGER[]; newface INTEGER; BEGIN -- -- All args required -- IF atopology IS NULL OR anode IS NULL OR anothernode IS NULL OR acurve IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- -- Acurve must be a LINESTRING -- IF substring(geometrytype(acurve), 1, 4) != 'LINE' THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid curve'; END IF; -- -- Curve must be simple -- IF NOT ST_IsSimple(acurve) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - curve not simple'; END IF; -- -- Get topology id -- BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = atopology; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; -- Initialize new edge info (will be filled up more later) SELECT anode as start_node, anothernode as end_node, acurve as geom, NULL::int as next_left_edge, NULL::int as next_right_edge, NULL::int as left_face, NULL::int as right_face, NULL::int as edge_id, NULL::int as prev_left_edge, NULL::int as prev_right_edge, -- convenience anode = anothernode as isclosed, -- convenience false as start_node_isolated, -- convenience false as end_node_isolated, -- convenience NULL::geometry as start_node_geom, -- convenience NULL::geometry as end_node_geom, -- convenience ST_RemoveRepeatedPoints(acurve) as cleangeom -- convenience INTO newedge; -- Compute azimuth of first edge end on start node SELECT null::int AS nextCW, null::int AS nextCCW, null::float8 AS minaz, null::float8 AS maxaz, false AS was_isolated, ST_Azimuth(ST_StartPoint(newedge.cleangeom), ST_PointN(newedge.cleangeom, 2)) AS myaz INTO span; IF span.myaz IS NULL THEN RAISE EXCEPTION 'Invalid edge (no two distinct vertices exist)'; END IF; -- Compute azimuth of last edge end on end node SELECT null::int AS nextCW, null::int AS nextCCW, null::float8 AS minaz, null::float8 AS maxaz, false AS was_isolated, ST_Azimuth(ST_EndPoint(newedge.cleangeom), ST_PointN(newedge.cleangeom, ST_NumPoints(newedge.cleangeom)-1)) AS myaz INTO epan; IF epan.myaz IS NULL THEN RAISE EXCEPTION 'Invalid edge (no two distinct vertices exist)'; END IF; -- -- Check endpoints existance, match with Curve geometry -- and get face information (if any) -- i := 0; FOR rec IN EXECUTE 'SELECT node_id, containing_face, geom FROM ' || quote_ident(atopology) || '.node WHERE node_id IN ( ' || anode || ',' || anothernode || ')' LOOP IF rec.containing_face IS NOT NULL THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'containing_face for node %:%', rec.node_id, rec.containing_face; #endif IF newedge.left_face IS NULL THEN newedge.left_face := rec.containing_face; newedge.right_face := rec.containing_face; ELSE IF newedge.left_face != rec.containing_face THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses an edge (endnodes in faces % and %)', newedge.left_face, rec.containing_face; END IF; END IF; END IF; IF rec.node_id = anode THEN newedge.start_node_geom = rec.geom; END IF; IF rec.node_id = anothernode THEN newedge.end_node_geom = rec.geom; END IF; i := i + 1; END LOOP; IF newedge.start_node_geom IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent node'; ELSIF NOT ST_Equals(newedge.start_node_geom, ST_StartPoint(acurve)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - start node not geometry start point.'; END IF; IF newedge.end_node_geom IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent node'; ELSIF NOT ST_Equals(newedge.end_node_geom, ST_EndPoint(acurve)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - end node not geometry end point.'; END IF; RAISE DEBUG 'All Checked !'; -- -- Check if this geometry crosses any node -- FOR rec IN EXECUTE 'SELECT node_id, ST_Relate(geom, ' || quote_literal(acurve::text) || '::geometry, 2) as relate FROM ' || quote_ident(atopology) || '.node WHERE geom && ' || quote_literal(acurve::text) || '::geometry' LOOP IF ST_RelateMatch(rec.relate, 'T********') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses a node'; END IF; END LOOP; -- -- Check if this geometry has any interaction with any existing edge -- FOR rec IN EXECUTE 'SELECT edge_id, ST_Relate(geom,' || quote_literal(acurve::text) || '::geometry, 2) as im FROM ' || quote_ident(atopology) || '.edge_data WHERE geom && ' || quote_literal(acurve::text) || '::geometry' LOOP --RAISE DEBUG 'IM=%',rec.im; IF ST_RelateMatch(rec.im, 'F********') THEN CONTINUE; -- no interior intersection END IF; IF ST_RelateMatch(rec.im, '1FFF*FFF2') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - coincident edge %', rec.edge_id; END IF; -- NOT IN THE SPECS: geometry touches an edge IF ST_RelateMatch(rec.im, '1********') THEN RAISE EXCEPTION 'Spatial exception - geometry intersects edge %', rec.edge_id; END IF; IF ST_RelateMatch(rec.im, 'T********') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses edge %', rec.edge_id; END IF; END LOOP; --------------------------------------------------------------- -- -- All checks passed, time to prepare the new edge -- --------------------------------------------------------------- EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(atopology) || '.edge_data_edge_id_seq') || ')' INTO STRICT newedge.edge_id; -- Find links on start node -- { #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'My start-segment azimuth: %', span.myaz; #endif sql := 'SELECT edge_id, -1 AS end_node, start_node, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) as geom FROM ' || quote_ident(atopology) || '.edge_data WHERE start_node = ' || anode || ' UNION SELECT edge_id, end_node, -1, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) FROM ' || quote_ident(atopology) || '.edge_data WHERE end_node = ' || anode; IF newedge.isclosed THEN sql := sql || ' UNION SELECT ' || newedge.edge_id || ',' || newedge.end_node || ',-1,0,0,' -- pretend we start elsewhere || quote_literal(newedge.cleangeom::text); END IF; i := 0; FOR rec IN EXECUTE sql LOOP -- incident edges { i := i + 1; IF rec.start_node = anode THEN -- -- Edge starts at our node, we compute -- azimuth from node to its second point -- az := ST_Azimuth(ST_StartPoint(rec.geom), ST_PointN(rec.geom, 2)); ELSE -- -- Edge ends at our node, we compute -- azimuth from node to its second-last point -- az := ST_Azimuth(ST_EndPoint(rec.geom), ST_PointN(rec.geom, ST_NumPoints(rec.geom)-1)); rec.edge_id := -rec.edge_id; END IF; IF az IS NULL THEN RAISE EXCEPTION 'Invalid edge % found (no two distinct nodes exist)', rec.edge_id; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge % - az % (%) - fl:% fr:%', rec.edge_id, az, az - span.myaz, rec.left_face, rec.right_face; #endif az = az - span.myaz; IF az < 0 THEN az := az + 2*PI(); END IF; -- RAISE DEBUG ' normalized az %', az; IF span.maxaz IS NULL OR az > span.maxaz THEN span.maxaz := az; span.nextCCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.left_face := rec.left_face; ELSE -- TODO: check for mismatch ? newedge.left_face := rec.right_face; END IF; END IF; END IF; IF span.minaz IS NULL OR az < span.minaz THEN span.minaz := az; span.nextCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.right_face := rec.right_face; ELSE -- TODO: check for mismatch ? newedge.right_face := rec.left_face; END IF; END IF; END IF; --RAISE DEBUG 'Closest edges: CW:%(%) CCW:%(%)', span.nextCW, span.minaz, span.nextCCW, span.maxaz; END LOOP; -- incident edges } #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'span ROW_COUNT: %', i; #endif IF newedge.isclosed THEN IF i < 2 THEN span.was_isolated = true; END IF; ELSE IF i < 1 THEN span.was_isolated = true; END IF; END IF; IF span.nextCW IS NULL THEN -- This happens if the destination node is isolated newedge.next_right_edge := newedge.edge_id; newedge.prev_left_edge := -newedge.edge_id; ELSE newedge.next_right_edge := span.nextCW; newedge.prev_left_edge := -span.nextCCW; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'edge:%', newedge.edge_id; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' left:%, next:%, prev:%', newedge.left_face, newedge.next_left_edge, newedge.prev_left_edge; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' right:%, next:%, prev:%', newedge.right_face, newedge.next_right_edge, newedge.prev_right_edge; #endif -- } start_node analysis -- Find links on end_node { #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'My end-segment azimuth: %', epan.myaz; #endif sql := 'SELECT edge_id, -1 as end_node, start_node, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) as geom FROM ' || quote_ident(atopology) || '.edge_data WHERE start_node = ' || anothernode || 'UNION SELECT edge_id, end_node, -1, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) FROM ' || quote_ident(atopology) || '.edge_data WHERE end_node = ' || anothernode; IF newedge.isclosed THEN sql := sql || ' UNION SELECT ' || newedge.edge_id || ',' || -1 -- pretend we end elsewhere || ',' || newedge.start_node || ',0,0,' || quote_literal(newedge.cleangeom::text); END IF; i := 0; FOR rec IN EXECUTE sql LOOP -- incident edges { i := i + 1; IF rec.start_node = anothernode THEN -- -- Edge starts at our node, we compute -- azimuth from node to its second point -- az := ST_Azimuth(ST_StartPoint(rec.geom), ST_PointN(rec.geom, 2)); ELSE -- -- Edge ends at our node, we compute -- azimuth from node to its second-last point -- az := ST_Azimuth(ST_EndPoint(rec.geom), ST_PointN(rec.geom, ST_NumPoints(rec.geom)-1)); rec.edge_id := -rec.edge_id; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge % - az % (%)', rec.edge_id, az, az - epan.myaz; #endif az := az - epan.myaz; IF az < 0 THEN az := az + 2*PI(); END IF; -- RAISE DEBUG ' normalized az %', az; IF epan.maxaz IS NULL OR az > epan.maxaz THEN epan.maxaz := az; epan.nextCCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.right_face := rec.left_face; ELSE -- TODO: check for mismatch ? newedge.right_face := rec.right_face; END IF; END IF; END IF; IF epan.minaz IS NULL OR az < epan.minaz THEN epan.minaz := az; epan.nextCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.left_face := rec.right_face; ELSE -- TODO: check for mismatch ? newedge.left_face := rec.left_face; END IF; END IF; END IF; --RAISE DEBUG 'Closest edges: CW:%(%) CCW:%(%)', epan.nextCW, epan.minaz, epan.nextCCW, epan.maxaz; END LOOP; -- incident edges } #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'epan ROW_COUNT: %', i; #endif IF newedge.isclosed THEN IF i < 2 THEN epan.was_isolated = true; END IF; ELSE IF i < 1 THEN epan.was_isolated = true; END IF; END IF; IF epan.nextCW IS NULL THEN -- This happens if the destination node is isolated newedge.next_left_edge := -newedge.edge_id; newedge.prev_right_edge := newedge.edge_id; ELSE newedge.next_left_edge := epan.nextCW; newedge.prev_right_edge := -epan.nextCCW; END IF; -- } end_node analysis #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'edge:%', newedge.edge_id; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' left:%, next:%, prev:%', newedge.left_face, newedge.next_left_edge, newedge.prev_left_edge; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' right:%, next:%, prev:%', newedge.right_face, newedge.next_right_edge, newedge.prev_right_edge; #endif ---------------------------------------------------------------------- -- -- If we don't have faces setup by now we must have encountered -- a malformed topology (no containing_face on isolated nodes, no -- left/right faces on adjacent edges or mismatching values) -- ---------------------------------------------------------------------- IF newedge.left_face != newedge.right_face THEN RAISE EXCEPTION 'Left(%)/right(%) faces mismatch: invalid topology ?', newedge.left_face, newedge.right_face; END IF; IF newedge.left_face IS NULL THEN RAISE EXCEPTION 'Could not derive edge face from linked primitives: invalid topology ?'; END IF; ---------------------------------------------------------------------- -- -- Insert the new edge, and update all linking -- ---------------------------------------------------------------------- -- Insert the new edge with what we have so far EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.edge VALUES(' || newedge.edge_id || ',' || newedge.start_node || ',' || newedge.end_node || ',' || newedge.next_left_edge || ',' || newedge.next_right_edge || ',' || newedge.left_face || ',' || newedge.right_face || ',' || quote_literal(newedge.geom::geometry::text) || ')'; -- Link prev_left_edge to us -- (if it's not us already) IF abs(newedge.prev_left_edge) != newedge.edge_id THEN IF newedge.prev_left_edge > 0 THEN -- its next_left_edge is us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_left_edge = ' || newedge.edge_id || ', abs_next_left_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || newedge.prev_left_edge; ELSE -- its next_right_edge is us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_right_edge = ' || newedge.edge_id || ', abs_next_right_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || -newedge.prev_left_edge; END IF; END IF; -- Link prev_right_edge to us -- (if it's not us already) IF abs(newedge.prev_right_edge) != newedge.edge_id THEN IF newedge.prev_right_edge > 0 THEN -- its next_left_edge is -us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_left_edge = ' || -newedge.edge_id || ', abs_next_left_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || newedge.prev_right_edge; ELSE -- its next_right_edge is -us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_right_edge = ' || -newedge.edge_id || ', abs_next_right_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || -newedge.prev_right_edge; END IF; END IF; -- NOT IN THE SPECS... -- set containing_face = null for start_node and end_node -- if they where isolated IF span.was_isolated OR epan.was_isolated THEN EXECUTE 'UPDATE ' || quote_ident(atopology) || '.node SET containing_face = null WHERE node_id IN (' || anode || ',' || anothernode || ')'; END IF; -------------------------------------------- -- Check face splitting -------------------------------------------- #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Checking right face'; #endif SELECT topology._ST_AddFaceSplit(atopology, -newedge.edge_id, newedge.left_face, false) INTO newface; IF newface = 0 THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' No split'; #endif RETURN newedge.edge_id; END IF; newfaces[1] := newface; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Checking left face'; #endif SELECT topology._ST_AddFaceSplit(atopology, newedge.edge_id, newedge.left_face, false) INTO newface; newfaces[2] := newface; IF newedge.left_face != 0 THEN -- { -- NOT IN THE SPECS: -- update TopoGeometry compositions to substitute oldface with newfaces sql := 'UPDATE ' || quote_ident(atopology) || '.relation r set element_id = ' || newfaces[1] || ' FROM topology.layer l ' || ' WHERE l.topology_id = ' || topoid || ' AND l.level = 0 ' || ' AND l.layer_id = r.layer_id ' || ' AND r.element_id = ' || newedge.left_face || ' AND r.element_type = 3 RETURNING r.topogeo_id, r.layer_id'; --RAISE DEBUG 'SQL: %', sql; FOR rec IN EXECUTE sql LOOP #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'TopoGeometry % in layer % contained the face being split (%) - updating to contain both new faces %', rec.topogeo_id, rec.layer_id, newedge.left_face, newfaces; #endif -- Add reference to the other face sql := 'INSERT INTO ' || quote_ident(atopology) || '.relation VALUES( ' || rec.topogeo_id || ',' || rec.layer_id || ',' || newfaces[2] || ', 3)'; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; END LOOP; -- drop old face from faces table sql := 'DELETE FROM ' || quote_ident(atopology) || '.face WHERE face_id = ' || newedge.left_face; EXECUTE sql; END IF; -- } RETURN newedge.edge_id; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_AddEdgeNewFaces --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.13 -- -- ST_AddEdgeModFace(atopology, anode, anothernode, acurve) -- -- Not in the specs: -- * Reset containing_face for starting and ending point, -- as they stop being isolated nodes -- * Update references in the Relation table. -- CREATE OR REPLACE FUNCTION topology.ST_AddEdgeModFace(atopology varchar, anode integer, anothernode integer, acurve geometry) RETURNS INTEGER AS $$ DECLARE rec RECORD; rrec RECORD; i INTEGER; topoid INTEGER; az FLOAT8; span RECORD; -- start point analysis data epan RECORD; -- end point analysis data fan RECORD; -- face analisys newedge RECORD; -- informations about new edge sql TEXT; newfaces INTEGER[]; newface INTEGER; BEGIN -- -- All args required -- IF atopology IS NULL OR anode IS NULL OR anothernode IS NULL OR acurve IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- -- Acurve must be a LINESTRING -- IF substring(geometrytype(acurve), 1, 4) != 'LINE' THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid curve'; END IF; -- -- Curve must be simple -- IF NOT ST_IsSimple(acurve) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - curve not simple'; END IF; -- -- Get topology id -- BEGIN SELECT id FROM topology.topology INTO STRICT topoid WHERE name = atopology; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; -- Initialize new edge info (will be filled up more later) SELECT anode as start_node, anothernode as end_node, acurve as geom, NULL::int as next_left_edge, NULL::int as next_right_edge, NULL::int as left_face, NULL::int as right_face, NULL::int as edge_id, NULL::int as prev_left_edge, NULL::int as prev_right_edge, -- convenience anode = anothernode as isclosed, -- convenience false as start_node_isolated, -- convenience false as end_node_isolated, -- convenience NULL::geometry as start_node_geom, -- convenience NULL::geometry as end_node_geom, -- convenience ST_RemoveRepeatedPoints(acurve) as cleangeom -- convenience INTO newedge; -- Compute azimut of first edge end on start node SELECT null::int AS nextCW, null::int AS nextCCW, null::float8 AS minaz, null::float8 AS maxaz, false AS was_isolated, ST_Azimuth(ST_StartPoint(newedge.cleangeom), ST_PointN(newedge.cleangeom, 2)) AS myaz INTO span; IF span.myaz IS NULL THEN RAISE EXCEPTION 'Invalid edge (no two distinct vertices exist)'; END IF; -- Compute azimuth of last edge end on end node SELECT null::int AS nextCW, null::int AS nextCCW, null::float8 AS minaz, null::float8 AS maxaz, false AS was_isolated, ST_Azimuth(ST_EndPoint(newedge.cleangeom), ST_PointN(newedge.cleangeom, ST_NumPoints(newedge.cleangeom)-1)) AS myaz INTO epan; IF epan.myaz IS NULL THEN RAISE EXCEPTION 'Invalid edge (no two distinct vertices exist)'; END IF; -- -- Check endpoints existance, match with Curve geometry -- and get face information (if any) -- i := 0; FOR rec IN EXECUTE 'SELECT node_id, containing_face, geom FROM ' || quote_ident(atopology) || '.node WHERE node_id IN ( ' || anode || ',' || anothernode || ')' LOOP IF rec.containing_face IS NOT NULL THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'containing_face for node %:%', rec.node_id, rec.containing_face; #endif IF newedge.left_face IS NULL THEN newedge.left_face := rec.containing_face; newedge.right_face := rec.containing_face; ELSE IF newedge.left_face != rec.containing_face THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses an edge (endnodes in faces % and %)', newedge.left_face, rec.containing_face; END IF; END IF; END IF; IF rec.node_id = anode THEN newedge.start_node_geom = rec.geom; END IF; IF rec.node_id = anothernode THEN newedge.end_node_geom = rec.geom; END IF; i := i + 1; END LOOP; IF newedge.start_node_geom IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent node'; ELSIF NOT ST_Equals(newedge.start_node_geom, ST_StartPoint(acurve)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - start node not geometry start point.'; END IF; IF newedge.end_node_geom IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent node'; ELSIF NOT ST_Equals(newedge.end_node_geom, ST_EndPoint(acurve)) THEN RAISE EXCEPTION 'SQL/MM Spatial exception - end node not geometry end point.'; END IF; -- -- Check if this geometry crosses any node -- FOR rec IN EXECUTE 'SELECT node_id, ST_Relate(geom, ' || quote_literal(acurve::text) || '::geometry, 2) as relate FROM ' || quote_ident(atopology) || '.node WHERE geom && ' || quote_literal(acurve::text) || '::geometry' LOOP IF ST_RelateMatch(rec.relate, 'T********') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses a node'; END IF; END LOOP; -- -- Check if this geometry has any interaction with any existing edge -- FOR rec IN EXECUTE 'SELECT edge_id, ST_Relate(geom,' || quote_literal(acurve::text) || '::geometry, 2) as im FROM ' || quote_ident(atopology) || '.edge_data WHERE geom && ' || quote_literal(acurve::text) || '::geometry' LOOP --RAISE DEBUG 'IM=%',rec.im; IF ST_RelateMatch(rec.im, 'F********') THEN CONTINUE; -- no interior intersection END IF; IF ST_RelateMatch(rec.im, '1FFF*FFF2') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - coincident edge %', rec.edge_id; END IF; -- NOT IN THE SPECS: geometry touches an edge IF ST_RelateMatch(rec.im, '1********') THEN RAISE EXCEPTION 'Spatial exception - geometry intersects edge %', rec.edge_id; END IF; IF ST_RelateMatch(rec.im, 'T********') THEN RAISE EXCEPTION 'SQL/MM Spatial exception - geometry crosses edge %', rec.edge_id; END IF; END LOOP; --------------------------------------------------------------- -- -- All checks passed, time to prepare the new edge -- --------------------------------------------------------------- EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(atopology) || '.edge_data_edge_id_seq') || ')' INTO STRICT newedge.edge_id; -- Find links on start node -- { #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'My start-segment azimuth: %', span.myaz; #endif sql := 'SELECT edge_id, -1 AS end_node, start_node, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) as geom FROM ' || quote_ident(atopology) || '.edge_data WHERE start_node = ' || anode || ' UNION SELECT edge_id, end_node, -1, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) FROM ' || quote_ident(atopology) || '.edge_data WHERE end_node = ' || anode; IF newedge.isclosed THEN sql := sql || ' UNION SELECT ' || newedge.edge_id || ',' || newedge.end_node || ',-1,0,0,' -- pretend we start elsewhere || quote_literal(newedge.cleangeom::text); END IF; i := 0; FOR rec IN EXECUTE sql LOOP -- incident edges { i := i + 1; IF rec.start_node = anode THEN -- -- Edge starts at our node, we compute -- azimuth from node to its second point -- az := ST_Azimuth(ST_StartPoint(rec.geom), ST_PointN(rec.geom, 2)); ELSE -- -- Edge ends at our node, we compute -- azimuth from node to its second-last point -- az := ST_Azimuth(ST_EndPoint(rec.geom), ST_PointN(rec.geom, ST_NumPoints(rec.geom)-1)); rec.edge_id := -rec.edge_id; END IF; IF az IS NULL THEN RAISE EXCEPTION 'Invalid edge % found (no two distinct nodes exist)', rec.edge_id; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge % - az % (%) - fl:% fr:%', rec.edge_id, az, az - span.myaz, rec.left_face, rec.right_face; #endif az = az - span.myaz; IF az < 0 THEN az := az + 2*PI(); END IF; -- RAISE DEBUG ' normalized az %', az; IF span.maxaz IS NULL OR az > span.maxaz THEN span.maxaz := az; span.nextCCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.left_face := rec.left_face; ELSE -- TODO: check for mismatch ? newedge.left_face := rec.right_face; END IF; END IF; END IF; IF span.minaz IS NULL OR az < span.minaz THEN span.minaz := az; span.nextCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.right_face := rec.right_face; ELSE -- TODO: check for mismatch ? newedge.right_face := rec.left_face; END IF; END IF; END IF; --RAISE DEBUG 'Closest edges: CW:%(%) CCW:%(%)', span.nextCW, span.minaz, span.nextCCW, span.maxaz; END LOOP; -- incident edges } #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'span ROW_COUNT: %', i; #endif IF newedge.isclosed THEN IF i < 2 THEN span.was_isolated = true; END IF; ELSE IF i < 1 THEN span.was_isolated = true; END IF; END IF; IF span.nextCW IS NULL THEN -- This happens if the destination node is isolated newedge.next_right_edge := newedge.edge_id; newedge.prev_left_edge := -newedge.edge_id; ELSE newedge.next_right_edge := span.nextCW; newedge.prev_left_edge := -span.nextCCW; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'edge:%', newedge.edge_id; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' left:%, next:%, prev:%', newedge.left_face, newedge.next_left_edge, newedge.prev_left_edge; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' right:%, next:%, prev:%', newedge.right_face, newedge.next_right_edge, newedge.prev_right_edge; #endif -- } start_node analysis -- Find links on end_node { #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'My end-segment azimuth: %', epan.myaz; #endif sql := 'SELECT edge_id, -1 as end_node, start_node, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) as geom FROM ' || quote_ident(atopology) || '.edge_data WHERE start_node = ' || anothernode || 'UNION SELECT edge_id, end_node, -1, left_face, right_face, ' || 'ST_RemoveRepeatedPoints(geom) FROM ' || quote_ident(atopology) || '.edge_data WHERE end_node = ' || anothernode; IF newedge.isclosed THEN sql := sql || ' UNION SELECT ' || newedge.edge_id || ',' || -1 -- pretend we end elsewhere || ',' || newedge.start_node || ',0,0,' || quote_literal(newedge.cleangeom::text); END IF; i := 0; FOR rec IN EXECUTE sql LOOP -- incident edges { i := i + 1; IF rec.start_node = anothernode THEN -- -- Edge starts at our node, we compute -- azimuth from node to its second point -- az := ST_Azimuth(ST_StartPoint(rec.geom), ST_PointN(rec.geom, 2)); ELSE -- -- Edge ends at our node, we compute -- azimuth from node to its second-last point -- az := ST_Azimuth(ST_EndPoint(rec.geom), ST_PointN(rec.geom, ST_NumPoints(rec.geom)-1)); rec.edge_id := -rec.edge_id; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge % - az % (%)', rec.edge_id, az, az - epan.myaz; #endif az := az - epan.myaz; IF az < 0 THEN az := az + 2*PI(); END IF; -- RAISE DEBUG ' normalized az %', az; IF epan.maxaz IS NULL OR az > epan.maxaz THEN epan.maxaz := az; epan.nextCCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.right_face := rec.left_face; ELSE -- TODO: check for mismatch ? newedge.right_face := rec.right_face; END IF; END IF; END IF; IF epan.minaz IS NULL OR az < epan.minaz THEN epan.minaz := az; epan.nextCW := rec.edge_id; IF abs(rec.edge_id) != newedge.edge_id THEN IF rec.edge_id < 0 THEN -- TODO: check for mismatch ? newedge.left_face := rec.right_face; ELSE -- TODO: check for mismatch ? newedge.left_face := rec.left_face; END IF; END IF; END IF; --RAISE DEBUG 'Closest edges: CW:%(%) CCW:%(%)', epan.nextCW, epan.minaz, epan.nextCCW, epan.maxaz; END LOOP; -- incident edges } #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'epan ROW_COUNT: %', i; #endif IF newedge.isclosed THEN IF i < 2 THEN epan.was_isolated = true; END IF; ELSE IF i < 1 THEN epan.was_isolated = true; END IF; END IF; IF epan.nextCW IS NULL THEN -- This happens if the destination node is isolated newedge.next_left_edge := -newedge.edge_id; newedge.prev_right_edge := newedge.edge_id; ELSE newedge.next_left_edge := epan.nextCW; newedge.prev_right_edge := -epan.nextCCW; END IF; -- } end_node analysis #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'edge:%', newedge.edge_id; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' left:%, next:%, prev:%', newedge.left_face, newedge.next_left_edge, newedge.prev_left_edge; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' right:%, next:%, prev:%', newedge.right_face, newedge.next_right_edge, newedge.prev_right_edge; #endif ---------------------------------------------------------------------- -- -- If we don't have faces setup by now we must have encountered -- a malformed topology (no containing_face on isolated nodes, no -- left/right faces on adjacent edges or mismatching values) -- ---------------------------------------------------------------------- IF newedge.left_face != newedge.right_face THEN RAISE EXCEPTION 'Left(%)/right(%) faces mismatch: invalid topology ?', newedge.left_face, newedge.right_face; END IF; IF newedge.left_face IS NULL THEN RAISE EXCEPTION 'Could not derive edge face from linked primitives: invalid topology ?'; END IF; ---------------------------------------------------------------------- -- -- Insert the new edge, and update all linking -- ---------------------------------------------------------------------- -- Insert the new edge with what we have so far EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.edge VALUES(' || newedge.edge_id || ',' || newedge.start_node || ',' || newedge.end_node || ',' || newedge.next_left_edge || ',' || newedge.next_right_edge || ',' || newedge.left_face || ',' || newedge.right_face || ',' || quote_literal(newedge.geom::geometry::text) || ')'; -- Link prev_left_edge to us -- (if it's not us already) IF abs(newedge.prev_left_edge) != newedge.edge_id THEN IF newedge.prev_left_edge > 0 THEN -- its next_left_edge is us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_left_edge = ' || newedge.edge_id || ', abs_next_left_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || newedge.prev_left_edge; ELSE -- its next_right_edge is us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_right_edge = ' || newedge.edge_id || ', abs_next_right_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || -newedge.prev_left_edge; END IF; END IF; -- Link prev_right_edge to us -- (if it's not us already) IF abs(newedge.prev_right_edge) != newedge.edge_id THEN IF newedge.prev_right_edge > 0 THEN -- its next_left_edge is -us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_left_edge = ' || -newedge.edge_id || ', abs_next_left_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || newedge.prev_right_edge; ELSE -- its next_right_edge is -us EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET next_right_edge = ' || -newedge.edge_id || ', abs_next_right_edge = ' || newedge.edge_id || ' WHERE edge_id = ' || -newedge.prev_right_edge; END IF; END IF; -- NOT IN THE SPECS... -- set containing_face = null for start_node and end_node -- if they where isolated IF span.was_isolated OR epan.was_isolated THEN EXECUTE 'UPDATE ' || quote_ident(atopology) || '.node SET containing_face = null WHERE node_id IN (' || anode || ',' || anothernode || ')'; END IF; -------------------------------------------- -- Check face splitting -------------------------------------------- #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Checking left face for a split'; #endif SELECT topology._ST_AddFaceSplit(atopology, newedge.edge_id, newedge.left_face, false) INTO newface; IF newface = 0 THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' No split'; #endif RETURN newedge.edge_id; END IF; IF newface IS NULL THEN -- must be forming a maximal ring in universal face #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Checking right face'; #endif SELECT topology._ST_AddFaceSplit(atopology, -newedge.edge_id, newedge.left_face, false) INTO newface; ELSE #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Updating right face mbr'; #endif PERFORM topology._ST_AddFaceSplit(atopology, -newedge.edge_id, newedge.left_face, true); END IF; IF newface IS NULL THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' No split'; #endif RETURN newedge.edge_id; END IF; -------------------------------------------- -- Update topogeometries, if needed -------------------------------------------- IF newedge.left_face != 0 THEN -- { -- NOT IN THE SPECS: -- update TopoGeometry compositions to add newface sql := 'SELECT r.topogeo_id, r.layer_id FROM ' || quote_ident(atopology) || '.relation r, topology.layer l ' || ' WHERE l.topology_id = ' || topoid || ' AND l.level = 0 ' || ' AND l.layer_id = r.layer_id ' || ' AND r.element_id = ' || newedge.left_face || ' AND r.element_type = 3 '; --RAISE DEBUG 'SQL: %', sql; FOR rec IN EXECUTE sql LOOP #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'TopoGeometry % in layer % contained the face being split (%) - updating to contain also new face %', rec.topogeo_id, rec.layer_id, newedge.left_face, newface; #endif -- Add reference to the other face sql := 'INSERT INTO ' || quote_ident(atopology) || '.relation VALUES( ' || rec.topogeo_id || ',' || rec.layer_id || ',' || newface || ', 3)'; --RAISE DEBUG 'SQL: %', sql; EXECUTE sql; END LOOP; END IF; -- } RETURN newedge.edge_id; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_AddEdgeModFace --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.17 -- -- ST_InitTopoGeo(atopology) -- CREATE OR REPLACE FUNCTION topology.ST_InitTopoGeo(atopology varchar) RETURNS text AS $$ DECLARE rec RECORD; topology_id numeric; BEGIN IF atopology IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; FOR rec IN SELECT * FROM pg_namespace WHERE text(nspname) = atopology LOOP RAISE EXCEPTION 'SQL/MM Spatial exception - schema already exists'; END LOOP; FOR rec IN EXECUTE 'SELECT topology.CreateTopology(' ||quote_literal(atopology)|| ') as id' LOOP topology_id := rec.id; END LOOP; RETURN 'Topology-Geometry ' || quote_literal(atopology) || ' (id:' || topology_id || ') created.'; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_InitTopoGeo --{ -- Topo-Geo and Topo-Net 3: Routine Details -- X.3.18 -- -- ST_CreateTopoGeo(atopology, acollection) --}{ CREATE OR REPLACE FUNCTION topology.ST_CreateTopoGeo(atopology varchar, acollection geometry) RETURNS text AS $$ DECLARE typ char(4); rec RECORD; ret int; nodededges GEOMETRY; points GEOMETRY; snode_id int; enode_id int; tolerance FLOAT8; topoinfo RECORD; BEGIN IF atopology IS NULL OR acollection IS NULL THEN RAISE EXCEPTION 'SQL/MM Spatial exception - null argument'; END IF; -- Get topology information BEGIN SELECT * FROM topology.topology INTO STRICT topoinfo WHERE name = atopology; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; END; -- Check SRID compatibility IF ST_SRID(acollection) != topoinfo.SRID THEN RAISE EXCEPTION 'Geometry SRID (%) does not match topology SRID (%)', ST_SRID(acollection), topoinfo.SRID; END IF; -- Verify pre-conditions (valid, empty topology schema exists) BEGIN -- { -- Verify the topology views in the topology schema to be empty FOR rec in EXECUTE 'SELECT count(*) FROM ' || quote_ident(atopology) || '.edge_data ' || ' UNION ' || 'SELECT count(*) FROM ' || quote_ident(atopology) || '.node ' LOOP IF rec.count > 0 THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-empty view'; END IF; END LOOP; -- face check is separated as it will contain a single (world) -- face record FOR rec in EXECUTE 'SELECT count(*) FROM ' || quote_ident(atopology) || '.face ' LOOP IF rec.count != 1 THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-empty face view'; END IF; END LOOP; EXCEPTION WHEN INVALID_SCHEMA_NAME THEN RAISE EXCEPTION 'SQL/MM Spatial exception - invalid topology name'; WHEN UNDEFINED_TABLE THEN RAISE EXCEPTION 'SQL/MM Spatial exception - non-existent view'; END; -- } #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Noding input linework'; #endif -- -- Node input linework with itself -- WITH components AS ( SELECT geom FROM ST_Dump(acollection) ) SELECT ST_UnaryUnion(ST_Collect(geom)) FROM ( SELECT geom FROM components WHERE ST_Dimension(geom) = 1 UNION ALL SELECT ST_Boundary(geom) FROM components WHERE ST_Dimension(geom) = 2 ) as linework INTO STRICT nodededges; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Computed % noded edges', ST_NumGeometries(nodededges); #endif -- -- Linemerge the resulting edges, to reduce the working set -- NOTE: this is more of a workaround for GEOS splitting overlapping -- lines to each of the segments. -- SELECT ST_LineMerge(nodededges) INTO STRICT nodededges; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Merged edges: %', ST_NumGeometries(nodededges); #endif -- -- Collect input points and input lines endpoints -- WITH components AS ( SELECT geom FROM ST_Dump(acollection) ) SELECT ST_Union(geom) FROM ( SELECT geom FROM components WHERE ST_Dimension(geom) = 0 UNION ALL SELECT ST_Boundary(geom) FROM components WHERE ST_Dimension(geom) = 1 ) as nodes INTO STRICT points; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Collected % input points', ST_NumGeometries(points); #endif -- -- Further split edges by points -- TODO: optimize this adding ST_Split support for multiline/multipoint -- FOR rec IN SELECT geom FROM ST_Dump(points) LOOP -- Use the node to split edges SELECT ST_Collect(geom) FROM ST_Dump(ST_Split(nodededges, rec.geom)) INTO STRICT nodededges; END LOOP; SELECT ST_UnaryUnion(nodededges) INTO STRICT nodededges; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Noded edges became % after point-split', ST_NumGeometries(nodededges); #endif -- -- Collect all nodes (from points and noded linework endpoints) -- WITH edges AS ( SELECT geom FROM ST_Dump(nodededges) ) SELECT ST_Union( -- TODO: ST_UnaryUnion ? COALESCE(ST_UnaryUnion(ST_Collect(geom)), ST_SetSRID('POINT EMPTY'::geometry, topoinfo.SRID)), COALESCE(points, ST_SetSRID('POINT EMPTY'::geometry, topoinfo.SRID)) ) FROM ( SELECT ST_StartPoint(geom) as geom FROM edges UNION ALL SELECT ST_EndPoint(geom) FROM edges ) as endpoints INTO points; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Total nodes count: %', ST_NumGeometries(points); #endif -- -- Add all nodes as isolated so that -- later calls to AddEdgeModFace will tweak their being -- isolated or not... -- FOR rec IN SELECT geom FROM ST_Dump(points) LOOP PERFORM topology.ST_AddIsoNode(atopology, 0, rec.geom); END LOOP; FOR rec IN SELECT geom FROM ST_Dump(nodededges) LOOP SELECT topology.GetNodeByPoint(atopology, st_startpoint(rec.geom), 0) INTO STRICT snode_id; SELECT topology.GetNodeByPoint(atopology, st_endpoint(rec.geom), 0) INTO STRICT enode_id; PERFORM topology.ST_AddEdgeModFace(atopology, snode_id, enode_id, rec.geom); END LOOP; RETURN 'Topology ' || atopology || ' populated'; END $$ LANGUAGE 'plpgsql' VOLATILE; --} ST_CreateTopoGeo --=} SQL/MM block ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/topoelement/���������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020571� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/topoelement/topoelement_agg.sql.in�����������������������������0000644�0000000�0000000�00000003552�12302065100�025057� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2010, 2011 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- TopoElement management functions -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Developed by Sandro Santilli <strk@keybit.net> -- for Faunalia (http://www.faunalia.it) with funding from -- Regione Toscana - Sistema Informativo per la Gestione del Territorio -- e dell' Ambiente [RT-SIGTA]. -- For the project: "Sviluppo strumenti software per il trattamento di dati -- geografici basati su QuantumGIS e Postgis (CIG 0494241492)" -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- -- TopoElementArray TopoElementArray_append(<TopoElement>) -- -- Append a TopoElement to a TopoElementArray -- CREATE OR REPLACE FUNCTION topology.TopoElementArray_append(topology.TopoElementArray, topology.TopoElement) RETURNS topology.TopoElementArray AS $$ SELECT CASE WHEN $1 IS NULL THEN topology.TopoElementArray('{' || $2::text || '}') ELSE topology.TopoElementArray($1::int[][]||$2::int[]) END; $$ LANGUAGE 'sql' IMMUTABLE; --} TopoElementArray_append --{ -- -- TopoElementArray TopoElementArray_agg(<setof TopoElement>) -- -- Aggregates a set of TopoElement values into a TopoElementArray -- -- Availability: 2.0.0 DROP AGGREGATE IF EXISTS topology.TopoElementArray_agg(topology.TopoElement); CREATE AGGREGATE topology.TopoElementArray_agg( sfunc = topology.TopoElementArray_append, basetype = topology.TopoElement, stype = topology.TopoElementArray ); --} TopoElementArray_agg ������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/export/��������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017557� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/export/TopoJSON.sql.in�����������������������������������������0000644�0000000�0000000�00000020220�12302564607�022316� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2013 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Functions used for TopoJSON export -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* #define POSTGIS_TOPOLOGY_DEBUG 1 */ --{ -- -- API FUNCTION -- -- text AsTopoJSON(TopoGeometry, edgeMapTable) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsTopoJSON(tg topology.TopoGeometry, edgeMapTable regclass) RETURNS text AS $$ DECLARE toponame text; json text; sql text; bounds GEOMETRY; rec RECORD; rec2 RECORD; side int; arcid int; arcs int[]; ringtxt TEXT[]; comptxt TEXT[]; edges_found BOOLEAN; old_search_path TEXT; all_faces int[]; faces int[]; visited_face int; shell_faces int[]; visited_edges int[]; looking_for_holes BOOLEAN; BEGIN IF tg IS NULL THEN RETURN NULL; END IF; -- Get topology name (for subsequent queries) SELECT name FROM topology.topology into toponame WHERE id = tg.topology_id; -- Puntual TopoGeometry IF tg.type = 1 THEN -- TODO: implement scale ? --json := ST_AsGeoJSON(topology.Geometry(tg)); --return json; RAISE EXCEPTION 'TopoJSON export does not support puntual objects'; ELSIF tg.type = 2 THEN -- lineal FOR rec IN SELECT (ST_Dump(topology.Geometry(tg))).geom LOOP -- { sql := 'SELECT e.*, ST_LineLocatePoint(' || quote_literal(rec.geom::text) || ', ST_LineInterpolatePoint(e.geom, 0.2)) as pos' || ', ST_LineLocatePoint(' || quote_literal(rec.geom::text) || ', ST_LineInterpolatePoint(e.geom, 0.8)) as pos2 FROM ' || quote_ident(toponame) || '.edge e WHERE ST_Covers(' || quote_literal(rec.geom::text) || ', e.geom) ORDER BY pos'; -- TODO: add relation to the conditional, to reduce load ? FOR rec2 IN EXECUTE sql LOOP -- { IF edgeMapTable IS NOT NULL THEN sql := 'SELECT arc_id-1 FROM ' || edgeMapTable::text || ' WHERE edge_id = ' || rec2.edge_id; EXECUTE sql INTO arcid; IF arcid IS NULL THEN EXECUTE 'INSERT INTO ' || edgeMapTable::text || '(edge_id) VALUES (' || rec2.edge_id || ') RETURNING arc_id-1' INTO arcid; END IF; ELSE arcid := rec2.edge_id; END IF; -- edge goes in opposite direction IF rec2.pos2 < rec2.pos THEN arcid := -(arcid+1); END IF; arcs := arcs || arcid; END LOOP; -- } comptxt := comptxt || ( '[' || array_to_string(arcs, ',') || ']' ); arcs := NULL; END LOOP; -- } json := '{ "type": "MultiLineString", "arcs": [' || array_to_string(comptxt,',') || ']}'; return json; ELSIF tg.type = 3 THEN -- areal json := '{ "type": "MultiPolygon", "arcs": ['; EXECUTE 'SHOW search_path' INTO old_search_path; EXECUTE 'SET search_path TO ' || quote_ident(toponame) || ',' || old_search_path; SELECT array_agg(id) as f FROM ( SELECT (topology.GetTopoGeomElements(tg))[1] as id ) as f INTO all_faces; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Faces: %', all_faces; #endif visited_edges := ARRAY[]::int[]; faces := all_faces; looking_for_holes := false; shell_faces := ARRAY[]::int[]; LOOP -- { arcs := NULL; edges_found := false; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'LOOP START - looking for next % binding faces %', CASE WHEN looking_for_holes THEN 'hole' ELSE 'shell' END, faces; #endif FOR rec in -- { WITH RECURSIVE _edges AS ( SELECT e.*, e.left_face = ANY ( faces ) as lf, e.right_face = ANY ( faces ) as rf FROM edge e WHERE ( e.left_face = ANY ( faces ) OR e.right_face = ANY ( faces ) ) ), _leftmost_non_dangling_edge AS ( SELECT * FROM _edges e WHERE ( e.lf or e.rf ) AND ( e.lf != e.rf ) AND NOT e.edge_id = ANY ( visited_edges ) -- TODO: and not in visited ? ORDER BY geom LIMIT 1 ), _edgepath AS ( SELECT CASE WHEN e.lf THEN lme.edge_id ELSE -lme.edge_id END as signed_edge_id, false as back, e.lf = e.rf as dangling, e.left_face, e.right_face, e.lf, e.rf, e.next_right_edge, e.next_left_edge FROM _edges e, _leftmost_non_dangling_edge lme WHERE e.edge_id = abs(lme.edge_id) UNION SELECT CASE WHEN p.dangling AND NOT p.back THEN -p.signed_edge_id WHEN p.signed_edge_id < 0 THEN p.next_right_edge ELSE p.next_left_edge END, -- signed_edge_id CASE WHEN p.dangling AND NOT p.back THEN true ELSE false END, -- back e.lf = e.rf, -- dangling e.left_face, e.right_face, e.lf, e.rf, e.next_right_edge, e.next_left_edge FROM _edges e, _edgepath p WHERE e.edge_id = CASE WHEN p.dangling AND NOT p.back THEN abs(p.signed_edge_id) WHEN p.signed_edge_id < 0 THEN abs(p.next_right_edge) ELSE abs(p.next_left_edge) END ) SELECT abs(signed_edge_id) as edge_id, signed_edge_id, dangling, lf, rf, left_face, right_face FROM _edgepath LOOP -- }{ #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' edge % lf:%(%) rf:%(%)' , rec.signed_edge_id, rec.lf, rec.left_face, rec.rf, rec.right_face; #endif IF rec.left_face = ANY (all_faces) AND NOT rec.left_face = ANY (shell_faces) THEN shell_faces := shell_faces || rec.left_face; END IF; IF rec.right_face = ANY (all_faces) AND NOT rec.right_face = ANY (shell_faces) THEN shell_faces := shell_faces || rec.right_face; END IF; visited_edges := visited_edges || rec.edge_id; edges_found := true; -- TODO: drop ? IF rec.dangling THEN CONTINUE; END IF; IF rec.left_face = ANY (all_faces) AND rec.right_face = ANY (all_faces) THEN CONTINUE; END IF; IF edgeMapTable IS NOT NULL THEN sql := 'SELECT arc_id-1 FROM ' || edgeMapTable::text || ' WHERE edge_id = ' || rec.edge_id; EXECUTE sql INTO arcid; IF arcid IS NULL THEN EXECUTE 'INSERT INTO ' || edgeMapTable::text || '(edge_id) VALUES (' || rec.edge_id || ') RETURNING arc_id-1' INTO arcid; END IF; ELSE arcid := rec.edge_id-1; END IF; -- Swap sign, use two's complement for negative edges IF rec.signed_edge_id >= 0 THEN arcid := - ( arcid + 1 ); END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'ARC id: %' , arcid; #endif arcs := arcid || arcs; END LOOP; -- } #ifdef POSTGIS_TOPOLOGY_DEBUG --RAISE DEBUG 'Edges found:%, visited faces: %, ARCS: %' , edges_found, shell_faces, arcs; #endif IF NOT edges_found THEN IF looking_for_holes THEN looking_for_holes := false; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'NO MORE holes, rings:%', ringtxt; #endif comptxt := comptxt || ( '[' || array_to_string(ringtxt, ',') || ']' ); ringtxt := NULL; faces := all_faces; shell_faces := ARRAY[]::int[]; ELSE EXIT; -- end of loop END IF; ELSE faces := shell_faces; IF arcs IS NOT NULL THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' % arcs: %', CASE WHEN looking_for_holes THEN 'hole' ELSE 'shell' END, arcs; #endif ringtxt := ringtxt || ( '[' || array_to_string(arcs,',') || ']' ); END IF; looking_for_holes := true; END IF; END LOOP; -- } json := json || array_to_string(comptxt, ',') || ']}'; EXECUTE 'SET search_path TO ' || old_search_path; ELSIF tg.type = 4 THEN -- collection RAISE EXCEPTION 'Collection TopoGeometries are not supported by AsTopoJSON'; END IF; RETURN json; END $$ LANGUAGE 'plpgsql' VOLATILE; -- writes into visited table -- } AsTopoJSON(TopoGeometry, visited_table) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/export/gml.sql.in����������������������������������������������0000644�0000000�0000000�00000041602�12122372062�021461� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2010, 2011 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Functions used for topology GML output -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Developed by Sandro Santilli <strk@keybit.net> -- for Faunalia (http://www.faunalia.it) with funding from -- Regione Toscana - Sistema Informativo per la Gestione del Territorio -- e dell' Ambiente [RT-SIGTA]. -- For the project: "Sviluppo strumenti software per il trattamento di dati -- geografici basati su QuantumGIS e Postgis (CIG 0494241492)" -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- -- INTERNAL FUNCTION -- text _AsGMLNode(id, point, nsprefix, precision, options, idprefix, gmlver) -- -- }{ CREATE OR REPLACE FUNCTION topology._AsGMLNode(id int, point geometry, nsprefix_in text, prec int, options int, idprefix text, gmlver int) RETURNS text AS $$ DECLARE nsprefix text; gml text; BEGIN nsprefix := 'gml:'; IF NOT nsprefix_in IS NULL THEN IF nsprefix_in = '' THEN nsprefix = nsprefix_in; ELSE nsprefix = nsprefix_in || ':'; END IF; END IF; gml := '<' || nsprefix || 'Node ' || nsprefix || 'id="' || idprefix || 'N' || id || '"'; IF point IS NOT NULL THEN gml = gml || '>' || '<' || nsprefix || 'pointProperty>' || ST_AsGML(gmlver, point, prec, options, nsprefix_in) || '</' || nsprefix || 'pointProperty>' || '</' || nsprefix || 'Node>'; ELSE gml = gml || '/>'; END IF; RETURN gml; END $$ LANGUAGE 'plpgsql' IMMUTABLE; --} _AsGMLNode(id, point, nsprefix, precision, options, idprefix, gmlVersion) --{ -- -- INTERNAL FUNCTION -- text _AsGMLEdge(edge_id, start_node, end_node, line, visitedTable, -- nsprefix, precision, options, idprefix, gmlVersion) -- -- }{ CREATE OR REPLACE FUNCTION topology._AsGMLEdge(edge_id int, start_node int,end_node int, line geometry, visitedTable regclass, nsprefix_in text, prec int, options int, idprefix text, gmlver int) RETURNS text AS $$ DECLARE visited bool; nsprefix text; gml text; BEGIN nsprefix := 'gml:'; IF nsprefix_in IS NOT NULL THEN IF nsprefix_in = '' THEN nsprefix = nsprefix_in; ELSE nsprefix = nsprefix_in || ':'; END IF; END IF; gml := '<' || nsprefix || 'Edge ' || nsprefix || 'id="' || idprefix || 'E' || edge_id || '">'; -- Start node gml = gml || '<' || nsprefix || 'directedNode orientation="-"'; -- Do visited bookkeeping if visitedTable was given visited = NULL; IF visitedTable IS NOT NULL THEN EXECUTE 'SELECT true FROM ' || visitedTable::text || ' WHERE element_type = 1 AND element_id = ' || start_node LIMIT 1 INTO visited; IF visited IS NOT NULL THEN gml = gml || ' xlink:href="#' || idprefix || 'N' || start_node || '" />'; ELSE -- Mark as visited EXECUTE 'INSERT INTO ' || visitedTable::text || '(element_type, element_id) VALUES (1, ' || start_node || ')'; END IF; END IF; IF visited IS NULL THEN gml = gml || '>'; gml = gml || topology._AsGMLNode(start_node, NULL, nsprefix_in, prec, options, idprefix, gmlver); gml = gml || '</' || nsprefix || 'directedNode>'; END IF; -- End node gml = gml || '<' || nsprefix || 'directedNode'; -- Do visited bookkeeping if visitedTable was given visited = NULL; IF visitedTable IS NOT NULL THEN EXECUTE 'SELECT true FROM ' || visitedTable::text || ' WHERE element_type = 1 AND element_id = ' || end_node LIMIT 1 INTO visited; IF visited IS NOT NULL THEN gml = gml || ' xlink:href="#' || idprefix || 'N' || end_node || '" />'; ELSE -- Mark as visited EXECUTE 'INSERT INTO ' || visitedTable::text || '(element_type, element_id) VALUES (1, ' || end_node || ')'; END IF; END IF; IF visited IS NULL THEN gml = gml || '>'; gml = gml || topology._AsGMLNode(end_node, NULL, nsprefix_in, prec, options, idprefix, gmlver); gml = gml || '</' || nsprefix || 'directedNode>'; END IF; IF line IS NOT NULL THEN gml = gml || '<' || nsprefix || 'curveProperty>' || ST_AsGML(gmlver, line, prec, options, nsprefix_in) || '</' || nsprefix || 'curveProperty>'; END IF; gml = gml || '</' || nsprefix || 'Edge>'; RETURN gml; END $$ LANGUAGE 'plpgsql' VOLATILE; -- writes into visitedTable --} _AsGMLEdge(id, start_node, end_node, line, visitedTable, nsprefix, precision, options, idprefix, gmlver) --{ -- -- INTERNAL FUNCTION -- text _AsGMLFace(toponame, face_id, visitedTable, -- nsprefix, precision, options, idprefix, gmlVersion) -- -- }{ CREATE OR REPLACE FUNCTION topology._AsGMLFace(toponame text, face_id int, visitedTable regclass, nsprefix_in text, prec int, options int, idprefix text, gmlver int) RETURNS text AS $$ DECLARE visited bool; nsprefix text; gml text; rec RECORD; rec2 RECORD; bounds geometry; BEGIN nsprefix := 'gml:'; IF nsprefix_in IS NOT NULL THEN IF nsprefix_in = '' THEN nsprefix = nsprefix_in; ELSE nsprefix = nsprefix_in || ':'; END IF; END IF; gml := '<' || nsprefix || 'Face ' || nsprefix || 'id="' || idprefix || 'F' || face_id || '">'; -- Construct the face geometry, then for each polygon: FOR rec IN SELECT (ST_DumpRings((ST_Dump(ST_ForceRHR( topology.ST_GetFaceGeometry(toponame, face_id)))).geom)).geom LOOP -- Contents of a directed face are the list of edges -- that cover the specific ring bounds = ST_Boundary(rec.geom); FOR rec2 IN EXECUTE 'SELECT e.*, ST_LineLocatePoint(' || quote_literal(bounds::text) || ', ST_LineInterpolatePoint(e.geom, 0.2)) as pos' || ', ST_LineLocatePoint(' || quote_literal(bounds::text) || ', ST_LineInterpolatePoint(e.geom, 0.8)) as pos2 FROM ' || quote_ident(toponame) || '.edge e WHERE ( e.left_face = ' || face_id || ' OR e.right_face = ' || face_id || ') AND ST_Covers(' || quote_literal(bounds::text) || ', e.geom) ORDER BY pos' LOOP gml = gml || '<' || nsprefix || 'directedEdge'; -- if this edge goes in same direction to the -- ring bounds, make it with negative orientation IF rec2.pos2 > rec2.pos THEN -- edge goes in same direction gml = gml || ' orientation="-"'; END IF; -- Do visited bookkeeping if visitedTable was given IF visitedTable IS NOT NULL THEN EXECUTE 'SELECT true FROM ' || visitedTable::text || ' WHERE element_type = 2 AND element_id = ' || rec2.edge_id LIMIT 1 INTO visited; IF visited THEN -- Use xlink:href if visited gml = gml || ' xlink:href="#' || idprefix || 'E' || rec2.edge_id || '" />'; CONTINUE; ELSE -- Mark as visited otherwise EXECUTE 'INSERT INTO ' || visitedTable::text || '(element_type, element_id) VALUES (2, ' || rec2.edge_id || ')'; END IF; END IF; gml = gml || '>'; gml = gml || topology._AsGMLEdge(rec2.edge_id, rec2.start_node, rec2.end_node, rec2.geom, visitedTable, nsprefix_in, prec, options, idprefix, gmlver); gml = gml || '</' || nsprefix || 'directedEdge>'; END LOOP; END LOOP; gml = gml || '</' || nsprefix || 'Face>'; RETURN gml; END $$ LANGUAGE 'plpgsql' VOLATILE; -- writes into visited table --} _AsGMLFace(toponame, id, visitedTable, nsprefix, precision, options, idprefix, gmlver) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry, nsprefix, precision, options, visitedTable, idprefix, gmlver) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry, nsprefix_in text, precision_in int, options_in int, visitedTable regclass, idprefix text, gmlver int) RETURNS text AS $$ DECLARE nsprefix text; precision int; options int; visited bool; toponame text; gml text; sql text; rec RECORD; rec2 RECORD; BEGIN nsprefix := 'gml:'; IF nsprefix_in IS NOT NULL THEN IF nsprefix_in = '' THEN nsprefix = nsprefix_in; ELSE nsprefix = nsprefix_in || ':'; END IF; END IF; precision := 15; IF precision_in IS NOT NULL THEN precision = precision_in; END IF; options := 1; IF options_in IS NOT NULL THEN options = options_in; END IF; -- Get topology name (for subsequent queries) SELECT name FROM topology.topology into toponame WHERE id = tg.topology_id; -- Puntual TopoGeometry IF tg.type = 1 THEN gml = '<' || nsprefix || 'TopoPoint>'; -- For each defining node, print a directedNode FOR rec IN EXECUTE 'SELECT r.element_id, n.geom from ' || quote_ident(toponame) || '.relation r LEFT JOIN ' || quote_ident(toponame) || '.node n ON (r.element_id = n.node_id)' || ' WHERE r.layer_id = ' || tg.layer_id || ' AND r.topogeo_id = ' || tg.id LOOP gml = gml || '<' || nsprefix || 'directedNode'; -- Do visited bookkeeping if visitedTable was given IF visitedTable IS NOT NULL THEN EXECUTE 'SELECT true FROM ' || visitedTable::text || ' WHERE element_type = 1 AND element_id = ' || rec.element_id LIMIT 1 INTO visited; IF visited IS NOT NULL THEN gml = gml || ' xlink:href="#' || idprefix || 'N' || rec.element_id || '" />'; CONTINUE; ELSE -- Mark as visited EXECUTE 'INSERT INTO ' || visitedTable::text || '(element_type, element_id) VALUES (1, ' || rec.element_id || ')'; END IF; END IF; gml = gml || '>'; gml = gml || topology._AsGMLNode(rec.element_id, rec.geom, nsprefix_in, precision, options, idprefix, gmlver); gml = gml || '</' || nsprefix || 'directedNode>'; END LOOP; gml = gml || '</' || nsprefix || 'TopoPoint>'; RETURN gml; ELSIF tg.type = 2 THEN -- lineal gml = '<' || nsprefix || 'TopoCurve>'; FOR rec IN SELECT (ST_Dump(topology.Geometry(tg))).geom LOOP FOR rec2 IN EXECUTE 'SELECT e.*, ST_LineLocatePoint(' || quote_literal(rec.geom::text) || ', ST_LineInterpolatePoint(e.geom, 0.2)) as pos' || ', ST_LineLocatePoint(' || quote_literal(rec.geom::text) || ', ST_LineInterpolatePoint(e.geom, 0.8)) as pos2 FROM ' || quote_ident(toponame) || '.edge e WHERE ST_Covers(' || quote_literal(rec.geom::text) || ', e.geom) ORDER BY pos' -- TODO: add relation to the conditional, to reduce load ? LOOP gml = gml || '<' || nsprefix || 'directedEdge'; -- if this edge goes in opposite direction to the -- line, make it with negative orientation IF rec2.pos2 < rec2.pos THEN -- edge goes in opposite direction gml = gml || ' orientation="-"'; END IF; -- Do visited bookkeeping if visitedTable was given IF visitedTable IS NOT NULL THEN EXECUTE 'SELECT true FROM ' || visitedTable::text || ' WHERE element_type = 2 AND element_id = ' || rec2.edge_id LIMIT 1 INTO visited; IF visited THEN -- Use xlink:href if visited gml = gml || ' xlink:href="#' || idprefix || 'E' || rec2.edge_id || '" />'; CONTINUE; ELSE -- Mark as visited otherwise EXECUTE 'INSERT INTO ' || visitedTable::text || '(element_type, element_id) VALUES (2, ' || rec2.edge_id || ')'; END IF; END IF; gml = gml || '>'; gml = gml || topology._AsGMLEdge(rec2.edge_id, rec2.start_node, rec2.end_node, rec2.geom, visitedTable, nsprefix_in, precision, options, idprefix, gmlver); gml = gml || '</' || nsprefix || 'directedEdge>'; END LOOP; END LOOP; gml = gml || '</' || nsprefix || 'TopoCurve>'; return gml; ELSIF tg.type = 3 THEN -- areal gml = '<' || nsprefix || 'TopoSurface>'; -- For each defining face, print a directedFace FOR rec IN EXECUTE 'SELECT f.face_id from ' || quote_ident(toponame) || '.relation r LEFT JOIN ' || quote_ident(toponame) || '.face f ON (r.element_id = f.face_id)' || ' WHERE r.layer_id = ' || tg.layer_id || ' AND r.topogeo_id = ' || tg.id LOOP gml = gml || '<' || nsprefix || 'directedFace'; -- Do visited bookkeeping if visitedTable was given IF visitedTable IS NOT NULL THEN EXECUTE 'SELECT true FROM ' || visitedTable::text || ' WHERE element_type = 3 AND element_id = ' || rec.face_id LIMIT 1 INTO visited; IF visited IS NOT NULL THEN gml = gml || ' xlink:href="#' || idprefix || 'F' || rec.face_id || '" />'; CONTINUE; ELSE -- Mark as visited EXECUTE 'INSERT INTO ' || visitedTable::text || '(element_type, element_id) VALUES (3, ' || rec.face_id || ')'; END IF; END IF; gml = gml || '>'; gml = gml || topology._AsGMLFace(toponame, rec.face_id, visitedTable, nsprefix_in, precision, options, idprefix, gmlver); gml = gml || '</' || nsprefix || 'directedFace>'; END LOOP; gml = gml || '</' || nsprefix || 'TopoSurface>'; RETURN gml; ELSIF tg.type = 4 THEN -- collection RAISE EXCEPTION 'Collection TopoGeometries are not supported by AsGML'; END IF; RETURN gml; END $$ LANGUAGE 'plpgsql' VOLATILE; -- writes into visited table --} AsGML(TopoGeometry, nsprefix, precision, options, visitedTable, idprefix, gmlver) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry, nsprefix, precision, options, visitedTable, -- idprefix) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry,nsprefix text, prec int, options int, visitedTable regclass, idprefix text) RETURNS text AS $$ SELECT topology.AsGML($1, $2, $3, $4, $5, $6, 3); $$ LANGUAGE 'sql' VOLATILE; -- writes into visited table --} AsGML(TopoGeometry, nsprefix, precision, options, visitedTable, idprefix) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry, nsprefix, precision, options, visitedTable) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry, nsprefix text, prec int, options int, vis regclass) RETURNS text AS $$ SELECT topology.AsGML($1, $2, $3, $4, $5, ''); $$ LANGUAGE 'sql' VOLATILE; -- writes into visited table -- } AsGML(TopoGeometry, nsprefix, precision, options) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry, nsprefix, precision, options) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry, nsprefix text, prec int, opts int) RETURNS text AS $$ SELECT topology.AsGML($1, $2, $3, $4, NULL); $$ LANGUAGE 'sql' STABLE; -- does NOT write into visited table -- } AsGML(TopoGeometry, nsprefix, precision, options) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry, nsprefix) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry, nsprefix text) RETURNS text AS $$ SELECT topology.AsGML($1, $2, 15, 1, NULL); $$ LANGUAGE 'sql' STABLE; -- does NOT write into visited table -- } AsGML(TopoGeometry, nsprefix) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry, visited_table) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry, visitedTable regclass) RETURNS text AS $$ SELECT topology.AsGML($1, 'gml', 15, 1, $2); $$ LANGUAGE 'sql' VOLATILE; -- writes into visited table -- } AsGML(TopoGeometry, visited_table) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry, visited_table, nsprefix) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry, visitedTable regclass, nsprefix text) RETURNS text AS $$ SELECT topology.AsGML($1, $3, 15, 1, $2); $$ LANGUAGE 'sql' VOLATILE; -- writes into visited table -- } AsGML(TopoGeometry, visited_table, nsprefix) --{ -- -- API FUNCTION -- -- text AsGML(TopoGeometry) -- -- }{ CREATE OR REPLACE FUNCTION topology.AsGML(tg topology.TopoGeometry) RETURNS text AS $$ SELECT topology.AsGML($1, 'gml'); $$ LANGUAGE 'sql' STABLE; -- does NOT write into visited table -- } AsGML(TopoGeometry) ������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/query/���������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017403� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/query/getfacebypoint.sql.in������������������������������������0000644�0000000�0000000�00000011671�12122032615�023531� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 Andrea Peri <aperi2007@gmail.com> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- -- Andrea Peri (27 Feb 2011) creation -- -- GetFaceByPoint(atopology, point, tol) -- -- Retrieve a Face ID given a POINT and a tolerance -- tolerance = 0 mean exactly intersection -- -- Returns return the integer ID if there is a face on the Point. -- -- When the Point is even a Node it raise an exception. -- This case is testable with the GetNodeByPoint(atopology, apoint, tol) -- -- If there isn't any face in the Point, GetFaceByPoint return 0. -- -- if near the point there are two or more faces it throw an exception. -- CREATE OR REPLACE FUNCTION topology.GetFaceByPoint(atopology varchar, apoint geometry, tol1 float8) RETURNS int AS $$ DECLARE sql text; idface int; BEGIN idface := -1; -- -- Atopology and apoint are required -- IF atopology IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'Invalid null argument'; END IF; -- -- Apoint must be a point -- IF substring(geometrytype(apoint), 1, 5) != 'POINT' THEN RAISE EXCEPTION 'Node geometry must be a point'; END IF; -- -- Tolerance must be >= 0 -- IF tol1 < 0 THEN RAISE EXCEPTION 'Tolerance must be >=0'; END IF; -- -- first test is to check if there is inside an mbr -- if tol1 = 0 then sql := 'SELECT a.face_id FROM ' || quote_ident(atopology) || '.face as a WHERE ' || '(a.mbr && ' || quote_literal(apoint::text)||'::geometry) ' || 'LIMIT 1;'; else sql := 'SELECT a.face_id FROM ' || quote_ident(atopology) || '.face as a WHERE ' || '(ST_DWithin(a.mbr,' || quote_literal(apoint::text)||'::geometry,' || tol1::text || ') ) ' || 'LIMIT 1;'; end if; BEGIN EXECUTE sql INTO STRICT idface; EXCEPTION WHEN NO_DATA_FOUND THEN idface = 0; END; if idface > 0 then -- -- probably there is something so now check the exact test -- if tol1 = 0 then sql := 'SELECT e.face_id FROM (' || 'SELECT d.face_id,ST_BuildArea(ST_Union(geom)) as geom FROM (' || 'SELECT b.edge_id as edge_id,b.left_face as face_id,b.geom as geom FROM ' || quote_ident(atopology) || '.edge_data as b,' || '(SELECT a.face_id FROM ' || quote_ident(atopology) || '.face as a ' || 'WHERE ST_Intersects(a.mbr,' || quote_literal(apoint::text)||'::geometry)=true' || ') as c ' || 'WHERE (b.left_face = c.face_id) ' || ' UNION ALL ' || 'SELECT b.edge_id as edge_id, b.right_face as face_id, b.geom as geom FROM ' || quote_ident(atopology) || '.edge_data as b,' || '(SELECT a.face_id FROM ' || quote_ident(atopology) || '.face as a ' || 'WHERE ST_Intersects(a.mbr,' || quote_literal(apoint::text)||'::geometry)=true' || ') as c ' || 'WHERE (b.right_face = c.face_id) ' || ') as d ' || 'GROUP BY face_id ' || ') as e ' || 'WHERE ST_Intersects(e.geom, ' || quote_literal(apoint::text)||'::geometry)=true;'; else sql := 'SELECT e.face_id FROM (' || 'SELECT d.face_id,ST_BuildArea(ST_Union(geom)) as geom FROM (' || 'SELECT b.edge_id as edge_id,b.left_face as face_id,b.geom as geom FROM ' || quote_ident(atopology) || '.edge_data as b,' || '(SELECT a.face_id FROM ' || quote_ident(atopology) || '.face as a ' || 'WHERE ST_DWithin(a.mbr,' || quote_literal(apoint::text)||'::geometry,' || tol1::text || ')=true' || ') as c ' || 'WHERE (b.left_face = c.face_id) ' || ' UNION ALL ' || 'SELECT b.edge_id as edge_id, b.right_face as face_id, b.geom as geom FROM ' || quote_ident(atopology) || '.edge_data as b,' || '(SELECT a.face_id FROM ' || quote_ident(atopology) || '.face as a ' || 'WHERE ST_DWithin(a.mbr,' || quote_literal(apoint::text)||'::geometry,' || tol1::text || ')=true' || ') as c ' || 'WHERE (b.right_face = c.face_id) ' || ') as d ' || 'GROUP BY face_id ' || ') as e ' || 'WHERE ST_DWithin(e.geom, ' || quote_literal(apoint::text)||'::geometry,' || tol1::text || ')=true;'; end if; RAISE DEBUG ' ==> %',sql; BEGIN EXECUTE sql INTO STRICT idface; EXCEPTION WHEN NO_DATA_FOUND THEN idface = 0; WHEN TOO_MANY_ROWS THEN RAISE EXCEPTION 'Two or more faces found'; END; end if; RETURN idface; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} GetFaceByPoint �����������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/query/GetNodeEdges.sql.in��������������������������������������0000644�0000000�0000000�00000003554�12122032615�023024� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2012 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- -- Return a list of edges (sequence, id) incident to the given node. -- -- Edge ids are signed, they are negative if the node is their endpoint. -- Sequence numbers start with 1 ordering edges by azimuth (clockwise). -- -- GetNodeEdges(atopology, anode) -- CREATE OR REPLACE FUNCTION topology.GetNodeEdges(atopology varchar, anode int) RETURNS SETOF topology.GetFaceEdges_ReturnType AS $$ DECLARE curedge int; nextedge int; rec RECORD; retrec topology.GetFaceEdges_ReturnType; n int; sql text; BEGIN n := 0; sql := 'WITH incident_edges AS ( SELECT edge_id, start_node, end_node, ST_RemoveRepeatedPoints(geom) as geom FROM ' || quote_ident(atopology) || '.edge_data WHERE start_node = ' || anode || ' or end_node = ' || anode || ') SELECT edge_id, ST_Azimuth(ST_StartPoint(geom), ST_PointN(geom, 2)) as az FROM incident_edges WHERE start_node = ' || anode || ' UNION ALL SELECT -edge_id, ST_Azimuth(ST_EndPoint(geom), ST_PointN(geom, ST_NumPoints(geom)-1)) FROM incident_edges WHERE end_node = ' || anode || ' ORDER BY az'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'sql: %', sql; #endif FOR rec IN EXECUTE sql LOOP -- incident edges { #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge:% az:%', rec.edge_id, rec.az; #endif n := n + 1; retrec.sequence := n; retrec.edge := rec.edge_id; RETURN NEXT retrec; END LOOP; -- incident edges } END $$ LANGUAGE 'plpgsql' STABLE; --} GetRingEdges ����������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/query/getedgebypoint.sql.in������������������������������������0000644�0000000�0000000�00000004534�12122032615�023537� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 Andrea Peri <aperi2007@gmail.com> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- -- Andrea Peri (19 Jan 2011) creation -- Andrea Peri (14 Feb 2011) minor issues -- -- GetEdgeByPoint(atopology, point, tol) -- -- Retrieve an Edge ID given a POINT and a tolerance -- tolerance = 0 mean exactly intersection -- -- Returns return the integer ID if there is an edge on the Point. -- -- When the Point is even a Node it raise an exception. -- This case is testable with the GetNodeByPoint(atopology, apoint, tol) -- -- If there isn't any edge in the Point, GetEdgeByPoint return 0. -- -- if near the point there are two or more edges it throw an exception. -- CREATE OR REPLACE FUNCTION topology.GetEdgeByPoint(atopology varchar, apoint geometry, tol1 float8) RETURNS int AS $$ DECLARE sql text; idedge int; BEGIN -- -- Atopology and apoint are required -- IF atopology IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'Invalid null argument'; END IF; -- -- Apoint must be a point -- IF substring(geometrytype(apoint), 1, 5) != 'POINT' THEN RAISE EXCEPTION 'Node geometry must be a point'; END IF; -- -- Tolerance must be >= 0 -- IF tol1 < 0 THEN RAISE EXCEPTION 'Tolerance must be >=0'; END IF; if tol1 = 0 then sql := 'SELECT a.edge_id FROM ' || quote_ident(atopology) || '.edge_data as a WHERE ' || '(a.geom && ' || quote_literal(apoint::text)||'::geometry) ' || ' AND (ST_Intersects(a.geom,' || quote_literal(apoint::text)||'::geometry) );'; else sql := 'SELECT a.edge_id FROM ' || quote_ident(atopology) || '.edge_data as a WHERE ' || '(ST_DWithin(a.geom,' || quote_literal(apoint::text)||'::geometry,' || tol1::text || ') );'; end if; BEGIN EXECUTE sql INTO STRICT idedge; EXCEPTION WHEN NO_DATA_FOUND THEN idedge = 0; WHEN TOO_MANY_ROWS THEN RAISE EXCEPTION 'Two or more edges found'; END; RETURN idedge; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} GetEdgeByPoint ��������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/query/getnodebypoint.sql.in������������������������������������0000644�0000000�0000000�00000004314�12122032615�023554� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 Andrea Peri <aperi2007@gmail.com> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- { -- -- Andrea Peri (19 Jan 2011) creation -- Andrea Peri (14 Feb 2011) minor issues -- -- getnodebypoint(atopology, point, tolerance) -- -- Retrieve a Node ID given a POINT and a tolerance -- tolerance = 0 mean exactly intersection -- -- Returns the integer ID if there is a Node on the Point. -- -- If there isn't any node in the Point, GetNodeByPoint return 0. -- -- if near the point there are two or more nodes it throw an exception. -- CREATE OR REPLACE FUNCTION topology.GetNodeByPoint(atopology varchar, apoint geometry, tol1 float8) RETURNS int AS $$ DECLARE sql text; idnode int; BEGIN -- -- Atopology and apoint are required -- IF atopology IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'Invalid null argument'; END IF; -- -- Apoint must be a point -- IF substring(geometrytype(apoint), 1, 5) != 'POINT' THEN RAISE EXCEPTION 'Node geometry must be a point'; END IF; -- -- Tolerance must be >= 0 -- IF tol1 < 0 THEN RAISE EXCEPTION 'Tolerance must be >=0'; END IF; if tol1 = 0 then sql := 'SELECT a.node_id FROM ' || quote_ident(atopology) || '.node as a WHERE ' || '(a.geom && ' || quote_literal(apoint::text)||'::geometry) ' || ' AND (ST_Intersects(a.geom,' || quote_literal(apoint::text)||'::geometry) );'; else sql := 'SELECT a.node_id FROM ' || quote_ident(atopology) || '.node as a WHERE ' || '(ST_DWithin(a.geom,' || quote_literal(apoint::text)||'::geometry,' || tol1::text || ') );'; end if; BEGIN EXECUTE sql INTO STRICT idnode; EXCEPTION WHEN NO_DATA_FOUND THEN idnode = 0; WHEN TOO_MANY_ROWS THEN RAISE EXCEPTION 'Two or more nodes found'; END; RETURN idnode; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} GetNodeByPoint ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/query/GetRingEdges.sql.in��������������������������������������0000644�0000000�0000000�00000005303�12122032615�023030� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 2012 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Developed by Sandro Santilli <strk@keybit.net> -- for Faunalia (http://www.faunalia.it) with funding from -- Regione Toscana - Sistema Informativo per la Gestione del Territorio -- e dell' Ambiente [RT-SIGTA]. -- For the project: "Sviluppo strumenti software per il trattamento di dati -- geografici basati su QuantumGIS e Postgis (CIG 0494241492)" -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- -- Return a list of edges (sequence, id) resulting by starting from the -- given edge and following the leftmost turn at each encountered node. -- -- Edge ids are signed, they are negative if traversed backward. -- Sequence numbers start with 1. -- -- Use a negative starting_edge to follow its rigth face rather than -- left face (to start traversing it in reverse). -- -- Optionally pass a limit on the number of edges to traverse. This is a -- safety measure against not-properly linked topologies, where you may -- end up looping forever (single edge loops edge are detected but longer -- ones are not). Default is no limit (good luck!) -- -- GetRingEdges(atopology, anedge, [maxedges]) -- CREATE OR REPLACE FUNCTION topology.GetRingEdges(atopology varchar, anedge int, maxedges int DEFAULT null) RETURNS SETOF topology.GetFaceEdges_ReturnType AS $$ DECLARE rec RECORD; retrec topology.GetFaceEdges_ReturnType; n int; sql text; BEGIN sql := 'WITH RECURSIVE edgering AS ( SELECT ' || anedge || ' as signed_edge_id, edge_id, next_left_edge, next_right_edge FROM ' || quote_ident(atopology) || '.edge_data WHERE edge_id = ' || abs(anedge) || ' UNION ' || ' SELECT CASE WHEN p.signed_edge_id < 0 THEN p.next_right_edge ' || ' ELSE p.next_left_edge END, e.edge_id, e.next_left_edge, e.next_right_edge ' || ' FROM ' || quote_ident(atopology) || '.edge_data e, edgering p WHERE e.edge_id = CASE WHEN p.signed_edge_id < 0 ' || 'THEN abs(p.next_right_edge) ELSE abs(p.next_left_edge) END ) SELECT * FROM edgering'; n := 1; FOR rec IN EXECUTE sql LOOP retrec.sequence := n; retrec.edge := rec.signed_edge_id; RETURN NEXT retrec; n := n + 1; IF n > maxedges THEN RAISE EXCEPTION 'Max traversing limit hit: %', maxedges; END IF; END LOOP; END $$ LANGUAGE 'plpgsql' STABLE; --} GetRingEdges �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/polygonize.sql.in����������������������������������������������0000644�0000000�0000000�00000002365�12122032615�021560� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Functions used to polygonize topology edges -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- -- int Polygonize(toponame) -- -- TODO: allow restricting polygonization to a bounding box -- -- }{ CREATE OR REPLACE FUNCTION topology.polygonize(toponame varchar) RETURNS text AS $$ DECLARE sql text; rec RECORD; faces int; BEGIN sql := 'SELECT (st_dump(st_polygonize(geom))).geom from ' || quote_ident(toponame) || '.edge_data'; faces = 0; FOR rec in EXECUTE sql LOOP BEGIN PERFORM topology.AddFace(toponame, rec.geom); faces = faces + 1; EXCEPTION WHEN OTHERS THEN RAISE WARNING 'Error registering face % (%)', rec.geom, SQLERRM; END; END LOOP; RETURN faces || ' faces registered'; END $$ LANGUAGE 'plpgsql'; --} Polygonize(toponame) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/populate.sql.in������������������������������������������������0000644�0000000�0000000�00000074605�12307404232�021223� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2010-2012 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Functions used to populate a topology -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* #define POSTGIS_TOPOLOGY_DEBUG 1 */ -- { -- Compute the max size of the double-precision floating point grid -- cell required to cover the given geometry -- -- -- A pragmatic test conducted using algoritm shown here: -- http://stackoverflow.com/questions/7408407/generate-next-largest-or-smallest-representable-floating-point-number-without-bi -- showed the "tolerance" growing by an order of magnitude proportionally -- with the order of magnitude of the input, starting with something like -- 3.5527136788005009294e-15 for the starting value of 9.0 -- -- }{ CREATE OR REPLACE FUNCTION topology._st_mintolerance(ageom Geometry) RETURNS float8 AS $$ SELECT 3.6 * power(10, - ( 15 - log(coalesce( nullif( greatest(abs(ST_xmin($1)), abs(ST_ymin($1)), abs(ST_xmax($1)), abs(ST_ymax($1))), 0), 1)) )); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- } -- { -- Get tolerance for a given topology -- and if zero the minimum for the given geometry -- -- }{ CREATE OR REPLACE FUNCTION topology._st_mintolerance(atopology varchar, ageom Geometry) RETURNS float8 AS $$ DECLARE ret FLOAT8; BEGIN SELECT COALESCE( NULLIF(precision, 0), topology._st_mintolerance($2)) FROM topology.topology WHERE name = $1 INTO ret; IF NOT FOUND THEN RAISE EXCEPTION 'No topology with name "%" in topology.topology', atopology; END IF; return ret; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; -- } --{ -- -- AddNode(atopology, point, allowEdgeSplitting, setContainingFace) -- -- Add a node primitive to a topology and get its identifier. -- Returns an existing node at the same location, if any. -- -- When adding a _new_ node it checks for the existance of any -- edge crossing the given point, raising an exception if found. -- -- The newly added nodes have no containing face. -- -- Developed by Sandro Santilli <strk@keybit.net> -- for Faunalia (http://www.faunalia.it) with funding from -- Regione Toscana - Sistema Informativo per la Gestione del Territorio -- e dell' Ambiente [RT-SIGTA]. -- For the project: "Sviluppo strumenti software per il trattamento di dati -- geografici basati su QuantumGIS e Postgis (CIG 0494241492)" -- -- }{ CREATE OR REPLACE FUNCTION topology.AddNode(atopology varchar, apoint geometry, allowEdgeSplitting boolean, setContainingFace boolean DEFAULT false) RETURNS int AS $$ DECLARE nodeid int; rec RECORD; containing_face int; BEGIN -- -- Atopology and apoint are required -- IF atopology IS NULL OR apoint IS NULL THEN RAISE EXCEPTION 'Invalid null argument'; END IF; -- -- Apoint must be a point -- IF substring(geometrytype(apoint), 1, 5) != 'POINT' THEN RAISE EXCEPTION 'Node geometry must be a point'; END IF; -- -- Check if a coincident node already exists -- -- We use index AND x/y equality -- FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(atopology) || '.node ' || 'WHERE geom && ' || quote_literal(apoint::text) || '::geometry' ||' AND ST_X(geom) = ST_X('||quote_literal(apoint::text)||'::geometry)' ||' AND ST_Y(geom) = ST_Y('||quote_literal(apoint::text)||'::geometry)' LOOP RETURN rec.node_id; END LOOP; -- -- Check if any edge crosses this node -- (endpoints are fine) -- FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(atopology) || '.edge ' || 'WHERE ST_DWithin(' || quote_literal(apoint::text) || ', geom, 0) AND NOT ST_Equals(' || quote_literal(apoint::text) || ', ST_StartPoint(geom)) AND NOT ST_Equals(' || quote_literal(apoint::text) || ', ST_EndPoint(geom))' LOOP IF allowEdgeSplitting THEN RETURN topology.ST_ModEdgeSplit(atopology, rec.edge_id, apoint); ELSE RAISE EXCEPTION 'An edge crosses the given node.'; END IF; END LOOP; IF setContainingFace THEN containing_face := topology.GetFaceByPoint(atopology, apoint, 0); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'containing face: %', containing_face; #endif ELSE containing_face := NULL; END IF; -- -- Get new node id from sequence -- FOR rec IN EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(atopology) || '.node_node_id_seq' ) || ')' LOOP nodeid = rec.nextval; END LOOP; -- -- Insert the new row -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.node(node_id, containing_face, geom) VALUES(' || nodeid || ',' || coalesce(containing_face::text, 'NULL') || ',' || quote_literal(apoint::text) || ')'; RETURN nodeid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} AddNode --{ -- -- AddNode(atopology, point) -- CREATE OR REPLACE FUNCTION topology.AddNode(atopology varchar, apoint geometry) RETURNS int AS $$ SELECT topology.AddNode($1, $2, false, false); $$ LANGUAGE 'sql' VOLATILE; --} AddNode --{ -- -- AddEdge(atopology, line) -- -- Add an edge primitive to a topology and get its identifier. -- Edge endpoints will be added as nodes if missing. -- Returns an existing edge at the same location, if any. -- -- An exception is raised if the given line crosses an existing -- node or interects with an existing edge on anything but endnodes. -- -- The newly added edge has "universe" face on both sides -- and links to itself as per next left/right edge. -- Calling code is expected to do further linking. -- -- Developed by Sandro Santilli <strk@keybit.net> -- for Faunalia (http://www.faunalia.it) with funding from -- Regione Toscana - Sistema Informativo per la Gestione del Territorio -- e dell' Ambiente [RT-SIGTA]. -- For the project: "Sviluppo strumenti software per il trattamento di dati -- geografici basati su QuantumGIS e Postgis (CIG 0494241492)" -- CREATE OR REPLACE FUNCTION topology.AddEdge(atopology varchar, aline geometry) RETURNS int AS $$ DECLARE edgeid int; rec RECORD; ix geometry; BEGIN -- -- Atopology and apoint are required -- IF atopology IS NULL OR aline IS NULL THEN RAISE EXCEPTION 'Invalid null argument'; END IF; -- -- Aline must be a linestring -- IF substring(geometrytype(aline), 1, 4) != 'LINE' THEN RAISE EXCEPTION 'Edge geometry must be a linestring'; END IF; -- -- Check there's no face registered in the topology -- FOR rec IN EXECUTE 'SELECT count(face_id) FROM ' || quote_ident(atopology) || '.face ' || ' WHERE face_id != 0 LIMIT 1' LOOP IF rec.count > 0 THEN RAISE EXCEPTION 'AddEdge can only be used against topologies with no faces defined'; END IF; END LOOP; -- -- Check if the edge crosses an existing node -- FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(atopology) || '.node ' || 'WHERE ST_Crosses(' || quote_literal(aline::text) || '::geometry, geom' || ')' LOOP RAISE EXCEPTION 'Edge crosses node %', rec.node_id; END LOOP; -- -- Check if the edge intersects an existing edge -- on anything but endpoints -- -- Following DE-9 Intersection Matrix represent -- the only relation we accept. -- -- F F 1 -- F * * -- 1 * 2 -- -- Example1: linestrings touching at one endpoint -- FF1 F00 102 -- FF1 F** 1*2 <-- our match -- -- Example2: linestrings touching at both endpoints -- FF1 F0F 1F2 -- FF1 F** 1*2 <-- our match -- FOR rec IN EXECUTE 'SELECT edge_id, geom, ST_Relate(' || quote_literal(aline::text) || '::geometry, geom, 2) as im' || ' FROM ' || quote_ident(atopology) || '.edge ' || 'WHERE ' || quote_literal(aline::text) || '::geometry && geom' LOOP IF ST_RelateMatch(rec.im, 'FF1F**1*2') THEN CONTINUE; -- no interior intersection END IF; -- Reuse an EQUAL edge (be it closed or not) IF ST_RelateMatch(rec.im, '1FFF*FFF2') THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge already known as %', rec.edge_id; #endif RETURN rec.edge_id; END IF; -- WARNING: the constructive operation might throw an exception BEGIN ix = ST_Intersection(rec.geom, aline); EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Could not compute intersection between input edge (%) and edge % (%)', aline::text, rec.edge_id, rec.geom::text; END; RAISE EXCEPTION 'Edge intersects (not on endpoints) with existing edge % at or near point %', rec.edge_id, ST_AsText(ST_PointOnSurface(ix)); END LOOP; -- -- Get new edge id from sequence -- FOR rec IN EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(atopology) || '.edge_data_edge_id_seq' ) || ')' LOOP edgeid = rec.nextval; END LOOP; -- -- Insert the new row -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.edge(edge_id, start_node, end_node, ' || 'next_left_edge, next_right_edge, ' || 'left_face, right_face, ' || 'geom) ' || ' VALUES(' -- edge_id || edgeid ||',' -- start_node || 'topology.addNode(' || quote_literal(atopology) || ', ST_StartPoint(' || quote_literal(aline::text) || ')) ,' -- end_node || 'topology.addNode(' || quote_literal(atopology) || ', ST_EndPoint(' || quote_literal(aline::text) || ')) ,' -- next_left_edge || -edgeid ||',' -- next_right_edge || edgeid ||',' -- left_face || '0,' -- right_face || '0,' -- geom ||quote_literal(aline::text) || ')'; RETURN edgeid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} AddEdge --{ -- -- AddFace(atopology, poly, [<force_new>=true]) -- -- Add a face primitive to a topology and get its identifier. -- Returns an existing face at the same location, if any, unless -- true is passed as the force_new argument -- -- For a newly added face, its edges will be appropriately -- linked (marked as left-face or right-face), and any contained -- edges and nodes would also be marked as such. -- -- When forcing re-registration of an existing face, no action will be -- taken to deal with the face being substituted. Which means -- a record about the old face and any record in the relation table -- referencing the existing face will remain untouched, effectively -- leaving the topology in a possibly invalid state. -- It is up to the caller to deal with that. -- -- The target topology is assumed to be valid (containing no -- self-intersecting edges). -- -- An exception is raised if: -- o The polygon boundary is not fully defined by existing edges. -- o The polygon overlaps an existing face. -- -- Developed by Sandro Santilli <strk@keybit.net> -- for Faunalia (http://www.faunalia.it) with funding from -- Regione Toscana - Sistema Informativo per la Gestione del Territorio -- e dell' Ambiente [RT-SIGTA]. -- For the project: "Sviluppo strumenti software per il trattamento di dati -- geografici basati su QuantumGIS e Postgis (CIG 0494241492)" -- CREATE OR REPLACE FUNCTION topology.AddFace(atopology varchar, apoly geometry, force_new boolean DEFAULT FALSE) RETURNS int AS $$ DECLARE bounds geometry; symdif geometry; faceid int; rec RECORD; rrec RECORD; relate text; right_edges int[]; left_edges int[]; all_edges geometry; old_faceid int; old_edgeid int; sql text; right_side bool; edgeseg geometry; p1 geometry; p2 geometry; p3 geometry; loc float8; segnum int; numsegs int; BEGIN -- -- Atopology and apoly are required -- IF atopology IS NULL OR apoly IS NULL THEN RAISE EXCEPTION 'Invalid null argument'; END IF; -- -- Aline must be a polygon -- IF substring(geometrytype(apoly), 1, 4) != 'POLY' THEN RAISE EXCEPTION 'Face geometry must be a polygon'; END IF; for rrec IN SELECT (ST_DumpRings(ST_ForceRHR(apoly))).geom LOOP -- { -- -- Find all bounds edges, forcing right-hand-rule -- to know what's left and what's right... -- bounds = ST_Boundary(rrec.geom); sql := 'SELECT e.geom, e.edge_id, ' || 'e.left_face, e.right_face FROM ' || quote_ident(atopology) || '.edge e, (SELECT ' || quote_literal(bounds::text) || '::geometry as geom) r WHERE ' || 'r.geom && e.geom' ; -- RAISE DEBUG 'SQL: %', sql; FOR rec IN EXECUTE sql LOOP -- { --RAISE DEBUG 'Edge % has bounding box intersection', rec.edge_id; -- Find first non-empty segment of the edge numsegs = ST_NumPoints(rec.geom); segnum = 1; WHILE segnum < numsegs LOOP p1 = ST_PointN(rec.geom, segnum); p2 = ST_PointN(rec.geom, segnum+1); IF ST_Distance(p1, p2) > 0 THEN EXIT; END IF; segnum = segnum + 1; END LOOP; IF segnum = numsegs THEN RAISE WARNING 'Edge % is collapsed', rec.edge_id; CONTINUE; -- we don't want to spend time on it END IF; edgeseg = ST_MakeLine(p1, p2); -- Skip non-covered edges IF NOT ST_Equals(p2, ST_EndPoint(rec.geom)) THEN IF NOT ( _ST_Intersects(bounds, p1) AND _ST_Intersects(bounds, p2) ) THEN --RAISE DEBUG 'Edge % has points % and % not intersecting with ring bounds', rec.edge_id, st_astext(p1), st_astext(p2); CONTINUE; END IF; ELSE -- must be a 2-points only edge, let's use Covers (more expensive) IF NOT _ST_Covers(bounds, edgeseg) THEN --RAISE DEBUG 'Edge % is not covered by ring', rec.edge_id; CONTINUE; END IF; END IF; p3 = ST_StartPoint(bounds); IF ST_DWithin(edgeseg, p3, 0) THEN -- Edge segment covers ring endpoint, See bug #874 loc = ST_LineLocatePoint(edgeseg, p3); -- WARNING: this is as robust as length of edgeseg allows... IF loc > 0.9 THEN -- shift last point down p2 = ST_LineInterpolatePoint(edgeseg, loc - 0.1); ELSIF loc < 0.1 THEN -- shift first point up p1 = ST_LineInterpolatePoint(edgeseg, loc + 0.1); ELSE -- when ring start point is in between, we swap the points p3 = p1; p1 = p2; p2 = p3; END IF; END IF; right_side = ST_LineLocatePoint(bounds, p1) < ST_LineLocatePoint(bounds, p2); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge % (left:%, right:%) - ring : % - right_side : %', rec.edge_id, rec.left_face, rec.right_face, rrec.path, right_side; #endif IF right_side THEN right_edges := array_append(right_edges, rec.edge_id); old_faceid = rec.right_face; ELSE left_edges := array_append(left_edges, rec.edge_id); old_faceid = rec.left_face; END IF; IF faceid IS NULL OR faceid = 0 THEN faceid = old_faceid; old_edgeid = rec.edge_id; ELSIF faceid != old_faceid THEN RAISE EXCEPTION 'Edge % has face % registered on the side of this face, while edge % has face % on the same side', rec.edge_id, old_faceid, old_edgeid, faceid; END IF; -- Collect all edges for final full coverage check all_edges = ST_Collect(all_edges, rec.geom); END LOOP; -- } END LOOP; -- } IF all_edges IS NULL THEN RAISE EXCEPTION 'Found no edges on the polygon boundary'; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Left edges: %', left_edges; #endif #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Right edges: %', right_edges; #endif -- -- Check that all edges found, taken togheter, -- fully match the ring boundary and nothing more -- -- If the test fail either we need to add more edges -- from the polygon ring or we need to split -- some of the existing ones. -- bounds = ST_Boundary(apoly); IF NOT ST_isEmpty(ST_SymDifference(bounds, all_edges)) THEN IF NOT ST_isEmpty(ST_Difference(bounds, all_edges)) THEN RAISE EXCEPTION 'Polygon boundary is not fully defined by existing edges at or near point %', ST_AsText(ST_PointOnSurface(ST_Difference(bounds, all_edges))); ELSE RAISE EXCEPTION 'Existing edges cover polygon boundary and more at or near point % (invalid topology?)', ST_AsText(ST_PointOnSurface(ST_Difference(all_edges, bounds))); END IF; END IF; IF faceid IS NOT NULL AND faceid != 0 THEN IF NOT force_new THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Face already known as %, not forcing a new face', faceid; #endif RETURN faceid; ELSE #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Face already known as %, forcing a new face', faceid; #endif END IF; END IF; -- -- Get new face id from sequence -- FOR rec IN EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(atopology) || '.face_face_id_seq' ) || ')' LOOP faceid = rec.nextval; END LOOP; -- -- Insert new face -- EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.face(face_id, mbr) VALUES(' -- face_id || faceid || ',' -- minimum bounding rectangle || quote_literal(ST_Envelope(apoly)::text) || ')'; -- -- Update all edges having this face on the left -- IF left_edges IS NOT NULL THEN EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET left_face = ' || quote_literal(faceid) || ' WHERE edge_id = ANY(' || quote_literal(left_edges) || ') '; END IF; -- -- Update all edges having this face on the right -- IF right_edges IS NOT NULL THEN EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET right_face = ' || quote_literal(faceid) || ' WHERE edge_id = ANY(' || quote_literal(right_edges) || ') '; END IF; -- -- Set left_face/right_face of any contained edge -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.edge_data SET right_face = ' || quote_literal(faceid) || ', left_face = ' || quote_literal(faceid) || ' WHERE ST_Contains(' || quote_literal(apoly::text) || ', geom)'; -- -- Set containing_face of any contained node -- EXECUTE 'UPDATE ' || quote_ident(atopology) || '.node SET containing_face = ' || quote_literal(faceid) || ' WHERE containing_face IS NOT NULL AND ST_Contains(' || quote_literal(apoly::text) || ', geom)'; RETURN faceid; END $$ LANGUAGE 'plpgsql' VOLATILE; --} AddFace -- ---------------------------------------------------------------------------- -- -- Functions to incrementally populate a topology -- -- ---------------------------------------------------------------------------- --{ -- TopoGeo_AddPoint(toponame, pointgeom, tolerance) -- -- Add a Point into a topology, with an optional tolerance -- CREATE OR REPLACE FUNCTION topology.TopoGeo_AddPoint(atopology varchar, apoint geometry, tolerance float8 DEFAULT 0) RETURNS int AS $$ DECLARE id integer; rec RECORD; sql text; prj GEOMETRY; snapedge GEOMETRY; snaptol FLOAT8; tol FLOAT8; z FLOAT8; BEGIN -- 0. Check arguments IF geometrytype(apoint) != 'POINT' THEN RAISE EXCEPTION 'Invalid geometry type (%) passed to TopoGeo_AddPoint, expected POINT', geometrytype(apoint); END IF; -- Get tolerance, if 0 was given tol := COALESCE( NULLIF(tolerance, 0), topology._st_mintolerance(atopology, apoint) ); -- 1. Check if any existing node is closer than the given precision -- and if so pick the closest sql := 'SELECT a.node_id FROM ' || quote_ident(atopology) || '.node as a WHERE ST_DWithin(a.geom,' || quote_literal(apoint::text) || '::geometry,' || tol || ') AND ST_Distance(' || quote_literal(apoint::text) || '::geometry, a.geom) < ' || tol || ' ORDER BY ST_Distance(' || quote_literal(apoint::text) || '::geometry, a.geom) LIMIT 1;'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO id; IF id IS NOT NULL THEN RETURN id; END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'No existing node within tolerance distance'; #endif -- 2. Check if any existing edge falls within tolerance -- and if so split it by a point projected on it sql := 'SELECT a.edge_id, a.geom FROM ' || quote_ident(atopology) || '.edge as a WHERE ST_DWithin(a.geom,' || quote_literal(apoint::text) || '::geometry,' || tol || ') ORDER BY ST_Distance(' || quote_literal(apoint::text) || '::geometry, a.geom) LIMIT 1;'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO rec; IF rec IS NOT NULL THEN -- project point to line, split edge by point prj := ST_ClosestPoint(rec.geom, apoint); -- This is a workaround for ClosestPoint lack of Z support: -- http://trac.osgeo.org/postgis/ticket/2033 z := ST_Z(apoint); IF z IS NOT NULL THEN prj := ST_Translate(ST_Force_3DZ(prj), 0, 0, z); -- no ST_SetZ ... END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Splitting edge % with closest point %', rec.edge_id, ST_AsText(prj); #endif IF NOT ST_Contains(rec.geom, prj) THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' Snapping edge to contain closest point'; #endif -- The tolerance must be big enough for snapping to happen -- and small enough to snap only to the projected point. -- Unfortunately ST_Distance returns 0 because it also uses -- a projected point internally, so we need another way. snaptol := topology._st_mintolerance(prj); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Tolerance for snapping to point % = %', ST_AsText(prj), snaptol; #endif snapedge := ST_Snap(rec.geom, prj, snaptol); -- Snapping currently snaps the first point below tolerance -- so may possibly move first point. See ticket #1631 IF NOT ST_Equals(ST_StartPoint(rec.geom), ST_StartPoint(snapedge)) THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE WARNING 'Snapping moved first edge vertex, fixing'; #endif snapedge := ST_MakeLine(ST_StartPoint(rec.geom), snapedge); END IF; #ifdef POSTGIS_TOPOLOGY_DEBUG IF NOT ST_Contains(snapedge, prj) THEN -- or if equal ? RAISE WARNING 'Edge within % distance from node still does not contain the node after snapping to it with tolerance %', tol, snaptol; END IF; #endif PERFORM topology.ST_ChangeEdgeGeom(atopology, rec.edge_id, snapedge); END IF; id := topology.ST_ModEdgeSplit(atopology, rec.edge_id, prj); ELSE #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'No existing edge within tolerance distance'; #endif id := topology.ST_AddIsoNode(atopology, NULL, apoint); END IF; RETURN id; END $$ LANGUAGE 'plpgsql' VOLATILE; --} TopoGeo_AddPoint --{ -- TopoGeo_addLinestring(toponame, linegeom, tolerance) -- -- Add a LineString into a topology -- -- }{ CREATE OR REPLACE FUNCTION topology.TopoGeo_addLinestring(atopology varchar, aline geometry, tolerance float8 DEFAULT 0) RETURNS SETOF int AS $$ DECLARE rec RECORD; rec2 RECORD; sql TEXT; set1 GEOMETRY; set2 GEOMETRY; snapped GEOMETRY; noded GEOMETRY; start_node INTEGER; end_node INTEGER; id INTEGER; inodes GEOMETRY; iedges GEOMETRY; tol float8; BEGIN -- 0. Check arguments IF geometrytype(aline) != 'LINESTRING' THEN RAISE EXCEPTION 'Invalid geometry type (%) passed to TopoGeo_AddLinestring, expected LINESTRING', geometrytype(aline); END IF; -- Get tolerance, if 0 was given tol := COALESCE( NULLIF(tolerance, 0), topology._st_mintolerance(atopology, aline) ); -- 1. Self-node noded := ST_UnaryUnion(aline); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Self-noded: %', ST_AsText(noded); #endif -- 2. Node to edges falling within tol distance sql := 'WITH nearby AS ( SELECT e.geom FROM ' || quote_ident(atopology) || '.edge e WHERE ST_DWithin(e.geom, ' || quote_literal(noded::text) || '::geometry, ' || tol || ') ) SELECT st_collect(geom) FROM nearby;'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO iedges; IF iedges IS NOT NULL THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Intersecting edges: %', ST_AsText(iedges); #endif snapped := ST_Snap(noded, iedges, tol); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Snapped to edges: %', ST_AsText(snapped); #endif noded := ST_Difference(snapped, iedges); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Difference: %', ST_AsText(noded); #endif set1 := ST_Intersection(snapped, iedges); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Intersection: %', ST_AsText(set1); #endif set2 := ST_LineMerge(set1); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'LineMerged intersection: %', ST_AsText(set2); #endif noded := ST_Union(noded, set2); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Unioned: %', ST_AsText(noded); #endif END IF; -- 2.1. Node with existing nodes within tol -- TODO: check if we should be only considering _isolated_ nodes! sql := 'WITH nearby AS ( SELECT n.geom FROM ' || quote_ident(atopology) || '.node n WHERE ST_DWithin(n.geom, ' || quote_literal(noded::text) || '::geometry, ' || tol || ') ) SELECT st_collect(geom) FROM nearby;'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO inodes; IF inodes IS NOT NULL THEN -- { #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Intersecting nodes: %', ST_AsText(inodes); #endif -- TODO: consider snapping once against all elements --- (rather than once with edges and once with nodes) noded := ST_Snap(noded, inodes, tol); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Snapped to nodes: %', ST_AsText(noded); #endif FOR rec IN SELECT (ST_Dump(inodes)).geom LOOP -- Use the node to split edges SELECT ST_Collect(geom) FROM ST_Dump(ST_Split(noded, rec.geom)) INTO STRICT noded; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Split by %: %', ST_AsText(rec.geom), ST_AsText(noded); #endif END LOOP; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Split: %', ST_AsText(noded); #endif -- re-node to account for ST_Snap introduced self-intersections -- See http://trac.osgeo.org/postgis/ticket/1714 -- TODO: consider running UnaryUnion once after all noding noded := ST_UnaryUnion(noded); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Self-unioned again: %', ST_AsText(noded); #endif END IF; -- } -- 3. For each (now-noded) segment, insert an edge FOR rec IN SELECT (ST_Dump(noded)).geom LOOP -- TODO: skip point elements ? #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Adding edge %', ST_AsText(rec.geom); #endif start_node := topology.TopoGeo_AddPoint(atopology, ST_StartPoint(rec.geom), tol); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' Start Node: %', start_node; #endif end_node := topology.TopoGeo_AddPoint(atopology, ST_EndPoint(rec.geom), tol); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG ' End Node: %', end_node; #endif -- Added endpoints may have drifted due to tolerance, so -- we need to re-snap the edge to the new nodes before adding it sql := 'SELECT n1.geom as sn, n2.geom as en FROM ' || quote_ident(atopology) || '.node n1, ' || quote_ident(atopology) || '.node n2 WHERE n1.node_id = ' || start_node || ' AND n2.node_id = ' || end_node; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO STRICT rec2; snapped := ST_SetPoint( ST_SetPoint(rec.geom, ST_NPoints(rec.geom)-1, rec2.en), 0, rec2.sn); /* We might have introduced an invalidity (TODO: check this out) */ snapped := ST_CollectionExtract(ST_MakeValid(snapped), 2); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Cleaned edge: %', ST_AsText(snapped); #endif -- Check if the so-snapped edge collapsed (see #1650) IF ST_IsEmpty(snapped) THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Edge collapsed'; #endif CONTINUE; END IF; -- Check if the so-snapped edge _now_ exists sql := 'SELECT edge_id FROM ' || quote_ident(atopology) || '.edge_data WHERE ST_Equals(geom, ' || quote_literal(snapped::text) || '::geometry)'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql INTO id; IF id IS NULL THEN id := topology.ST_AddEdgeModFace(atopology, start_node, end_node, snapped); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'New edge id: %', id; #endif ELSE #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Old edge id: %', id; #endif END IF; RETURN NEXT id; END LOOP; RETURN; END $$ LANGUAGE 'plpgsql'; --} TopoGeo_addLinestring --{ -- TopoGeo_AddPolygon(toponame, polygeom, tolerance) -- -- Add a Polygon into a topology -- -- }{ CREATE OR REPLACE FUNCTION topology.TopoGeo_AddPolygon(atopology varchar, apoly geometry, tolerance float8 DEFAULT 0) RETURNS SETOF int AS $$ DECLARE boundary GEOMETRY; fgeom GEOMETRY; rec RECORD; edges INTEGER[]; sql TEXT; tol FLOAT8; BEGIN -- 0. Check arguments IF geometrytype(apoly) != 'POLYGON' THEN RAISE EXCEPTION 'Invalid geometry type (%) passed to TopoGeo_AddPolygon, expected POLYGON', geometrytype(apoly); END IF; -- Get tolerance, if 0 was given tol := COALESCE( NULLIF(tolerance, 0), topology._st_mintolerance(atopology, apoly) ); -- 1. Extract boundary boundary := ST_Boundary(apoly); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Boundary: %', ST_AsText(boundary); #endif -- 2. Add boundaries as edges FOR rec IN SELECT (ST_Dump(boundary)).geom LOOP edges := array_cat(edges, array_agg(x)) FROM ( select topology.TopoGeo_addLinestring(atopology, rec.geom, tol) as x ) as foo; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'New edges: %', edges; #endif END LOOP; -- 3. Find faces covered by input polygon -- NOTE: potential snapping changed polygon edges sql := 'SELECT f.face_id FROM ' || quote_ident(atopology) || '.face f WHERE f.mbr && ' || quote_literal(apoly::text) || '::geometry'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif FOR rec IN EXECUTE sql LOOP -- check for actual containment fgeom := ST_PointOnSurface(topology.ST_GetFaceGeometry(atopology, rec.face_id)); IF NOT ST_Covers(apoly, fgeom) THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Face % not covered by input polygon', rec.face_id; #endif CONTINUE; END IF; RETURN NEXT rec.face_id; END LOOP; END $$ LANGUAGE 'plpgsql'; --} TopoGeo_AddPolygon --{ -- TopoGeo_AddGeometry(toponame, geom, tolerance) -- -- Add a Geometry into a topology -- CREATE OR REPLACE FUNCTION topology.TopoGeo_AddGeometry(atopology varchar, ageom geometry, tolerance float8 DEFAULT 0) RETURNS void AS $$ DECLARE BEGIN RAISE EXCEPTION 'TopoGeo_AddGeometry not implemented yet'; END $$ LANGUAGE 'plpgsql'; --} TopoGeo_AddGeometry ���������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/predicates.sql.in����������������������������������������������0000644�0000000�0000000�00000036124�12122032615�021504� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011-2012 Sandro Santilli <strk@keybit.net> -- Copyright (C) 2005 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Sandro Santilli <strk@keybit.net> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Overloaded spatial predicates for TopoGeometry inputs -- -- FUNCTION intersects(TopoGeometry, TopoGeometry) -- FUNCTION equals(TopoGeometry, TopoGeometry) -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- intersects(TopoGeometry, TopoGeometry) -- CREATE OR REPLACE FUNCTION topology.intersects(tg1 topology.TopoGeometry, tg2 topology.TopoGeometry) RETURNS bool AS $$ DECLARE tgbuf topology.TopoGeometry; rec RECORD; toponame varchar; query text; BEGIN IF tg1.topology_id != tg2.topology_id THEN -- TODO: revert to ::geometry instead ? RAISE EXCEPTION 'Cannot compute intersection between TopoGeometries from different topologies'; END IF; -- Order TopoGeometries so that tg1 has less-or-same -- dimensionality of tg1 (point,line,polygon,collection) IF tg1.type > tg2.type THEN tgbuf := tg2; tg2 := tg1; tg1 := tgbuf; END IF; --RAISE NOTICE 'tg1.id:% tg2.id:%', tg1.id, tg2.id; -- Geometry collection are not currently supported IF tg2.type = 4 THEN RAISE EXCEPTION 'GeometryCollection are not supported by intersects()'; END IF; -- Get topology name SELECT name FROM topology.topology into toponame WHERE id = tg1.topology_id; -- Hierarchical TopoGeometries are not currently supported query = 'SELECT level FROM topology.layer' || ' WHERE ' || ' topology_id = ' || tg1.topology_id || ' AND ' || '( layer_id = ' || tg1.layer_id || ' OR layer_id = ' || tg2.layer_id || ' ) ' || ' AND level > 0 '; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP -- TODO: revert to ::geometry instead ? RAISE EXCEPTION 'Hierarchical TopoGeometries are not currently supported by intersects()'; END LOOP; IF tg1.type = 1 THEN -- [multi]point IF tg2.type = 1 THEN -- point/point --------------------------------------------------------- -- -- Two [multi]point features intersect if they share -- any Node -- -- -- query = 'SELECT a.topogeo_id FROM ' || quote_ident(toponame) || '.relation a, ' || quote_ident(toponame) || '.relation b ' || 'WHERE a.layer_id = ' || tg1.layer_id || ' AND b.layer_id = ' || tg2.layer_id || ' AND a.topogeo_id = ' || tg1.id || ' AND b.topogeo_id = ' || tg2.id || ' AND a.element_id = b.element_id ' || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP RETURN TRUE; -- they share an element END LOOP; RETURN FALSE; -- no elements shared -- --------------------------------------------------------- ELSIF tg2.type = 2 THEN -- point/line --------------------------------------------------------- -- -- A [multi]point intersects a [multi]line if they share -- any Node. -- -- -- query = 'SELECT a.topogeo_id FROM ' || quote_ident(toponame) || '.relation a, ' || quote_ident(toponame) || '.relation b, ' || quote_ident(toponame) || '.edge_data e ' || 'WHERE a.layer_id = ' || tg1.layer_id || ' AND b.layer_id = ' || tg2.layer_id || ' AND a.topogeo_id = ' || tg1.id || ' AND b.topogeo_id = ' || tg2.id || ' AND abs(b.element_id) = e.edge_id ' || ' AND ( ' || ' e.start_node = a.element_id ' || ' OR ' || ' e.end_node = a.element_id ' || ' )' || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP RETURN TRUE; -- they share an element END LOOP; RETURN FALSE; -- no elements shared -- --------------------------------------------------------- ELSIF tg2.type = 3 THEN -- point/polygon --------------------------------------------------------- -- -- A [multi]point intersects a [multi]polygon if any -- Node of the point is contained in any face of the -- polygon OR ( is end_node or start_node of any edge -- of any polygon face ). -- -- We assume the Node-in-Face check is faster becasue -- there will be less Faces then Edges in any polygon. -- -- -- -- -- Check if any node is contained in a face query = 'SELECT n.node_id as id FROM ' || quote_ident(toponame) || '.relation r1, ' || quote_ident(toponame) || '.relation r2, ' || quote_ident(toponame) || '.node n ' || 'WHERE r1.layer_id = ' || tg1.layer_id || ' AND r2.layer_id = ' || tg2.layer_id || ' AND r1.topogeo_id = ' || tg1.id || ' AND r2.topogeo_id = ' || tg2.id || ' AND n.node_id = r1.element_id ' || ' AND r2.element_id = n.containing_face ' || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP --RAISE NOTICE 'Node % in polygon face', rec.id; RETURN TRUE; -- one (or more) nodes are -- contained in a polygon face END LOOP; -- Check if any node is start or end of any polygon -- face edge query = 'SELECT n.node_id as nid, e.edge_id as eid ' || ' FROM ' || quote_ident(toponame) || '.relation r1, ' || quote_ident(toponame) || '.relation r2, ' || quote_ident(toponame) || '.edge_data e, ' || quote_ident(toponame) || '.node n ' || 'WHERE r1.layer_id = ' || tg1.layer_id || ' AND r2.layer_id = ' || tg2.layer_id || ' AND r1.topogeo_id = ' || tg1.id || ' AND r2.topogeo_id = ' || tg2.id || ' AND n.node_id = r1.element_id ' || ' AND ( ' || ' e.left_face = r2.element_id ' || ' OR ' || ' e.right_face = r2.element_id ' || ' ) ' || ' AND ( ' || ' e.start_node = r1.element_id ' || ' OR ' || ' e.end_node = r1.element_id ' || ' ) ' || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP --RAISE NOTICE 'Node % on edge % bound', rec.nid, rec.eid; RETURN TRUE; -- one node is start or end -- of a face edge END LOOP; RETURN FALSE; -- no intersection -- --------------------------------------------------------- ELSIF tg2.type = 4 THEN -- point/collection RAISE EXCEPTION 'Intersection point/collection not implemented yet'; ELSE RAISE EXCEPTION 'Invalid TopoGeometry type', tg2.type; END IF; ELSIF tg1.type = 2 THEN -- [multi]line IF tg2.type = 2 THEN -- line/line --------------------------------------------------------- -- -- A [multi]line intersects a [multi]line if they share -- any Node. -- -- -- query = 'SELECT e1.start_node FROM ' || quote_ident(toponame) || '.relation r1, ' || quote_ident(toponame) || '.relation r2, ' || quote_ident(toponame) || '.edge_data e1, ' || quote_ident(toponame) || '.edge_data e2 ' || 'WHERE r1.layer_id = ' || tg1.layer_id || ' AND r2.layer_id = ' || tg2.layer_id || ' AND r1.topogeo_id = ' || tg1.id || ' AND r2.topogeo_id = ' || tg2.id || ' AND abs(r1.element_id) = e1.edge_id ' || ' AND abs(r2.element_id) = e2.edge_id ' || ' AND ( ' || ' e1.start_node = e2.start_node ' || ' OR ' || ' e1.start_node = e2.end_node ' || ' OR ' || ' e1.end_node = e2.start_node ' || ' OR ' || ' e1.end_node = e2.end_node ' || ' )' || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP RETURN TRUE; -- they share an element END LOOP; RETURN FALSE; -- no elements shared -- --------------------------------------------------------- ELSIF tg2.type = 3 THEN -- line/polygon --------------------------------------------------------- -- -- A [multi]line intersects a [multi]polygon if they share -- any Node (touch-only case), or if any line edge has any -- polygon face on the left or right (full-containment case -- + edge crossing case). -- -- -- E1 are line edges, E2 are polygon edges -- R1 are line relations. -- R2 are polygon relations. -- R2.element_id are FACE ids query = 'SELECT e1.edge_id' || ' FROM ' || quote_ident(toponame) || '.relation r1, ' || quote_ident(toponame) || '.relation r2, ' || quote_ident(toponame) || '.edge_data e1, ' || quote_ident(toponame) || '.edge_data e2 ' || 'WHERE r1.layer_id = ' || tg1.layer_id || ' AND r2.layer_id = ' || tg2.layer_id || ' AND r1.topogeo_id = ' || tg1.id || ' AND r2.topogeo_id = ' || tg2.id -- E1 are line edges || ' AND e1.edge_id = abs(r1.element_id) ' -- E2 are face edges || ' AND ( e2.left_face = r2.element_id ' || ' OR e2.right_face = r2.element_id ) ' || ' AND ( ' -- Check if E1 have left-or-right face -- being part of R2.element_id || ' e1.left_face = r2.element_id ' || ' OR ' || ' e1.right_face = r2.element_id ' -- Check if E1 share start-or-end node -- with any E2. || ' OR ' || ' e1.start_node = e2.start_node ' || ' OR ' || ' e1.start_node = e2.end_node ' || ' OR ' || ' e1.end_node = e2.start_node ' || ' OR ' || ' e1.end_node = e2.end_node ' || ' ) ' || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP RETURN TRUE; -- either common node -- or edge-in-face END LOOP; RETURN FALSE; -- no intersection -- --------------------------------------------------------- ELSIF tg2.type = 4 THEN -- line/collection RAISE EXCEPTION 'Intersection line/collection not implemented yet', tg1.type, tg2.type; ELSE RAISE EXCEPTION 'Invalid TopoGeometry type', tg2.type; END IF; ELSIF tg1.type = 3 THEN -- [multi]polygon IF tg2.type = 3 THEN -- polygon/polygon --------------------------------------------------------- -- -- A [multi]polygon intersects a [multi]polygon if they share -- any Node (touch-only case), or if any face edge has any of the -- other polygon face on the left or right (full-containment case -- + edge crossing case). -- -- -- E1 are poly1 edges. -- E2 are poly2 edges -- R1 are poly1 relations. -- R2 are poly2 relations. -- R1.element_id are poly1 FACE ids -- R2.element_id are poly2 FACE ids query = 'SELECT e1.edge_id' || ' FROM ' || quote_ident(toponame) || '.relation r1, ' || quote_ident(toponame) || '.relation r2, ' || quote_ident(toponame) || '.edge_data e1, ' || quote_ident(toponame) || '.edge_data e2 ' || 'WHERE r1.layer_id = ' || tg1.layer_id || ' AND r2.layer_id = ' || tg2.layer_id || ' AND r1.topogeo_id = ' || tg1.id || ' AND r2.topogeo_id = ' || tg2.id -- E1 are poly1 edges || ' AND ( e1.left_face = r1.element_id ' || ' OR e1.right_face = r1.element_id ) ' -- E2 are poly2 edges || ' AND ( e2.left_face = r2.element_id ' || ' OR e2.right_face = r2.element_id ) ' || ' AND ( ' -- Check if any edge from a polygon face -- has any of the other polygon face -- on the left or right || ' e1.left_face = r2.element_id ' || ' OR ' || ' e1.right_face = r2.element_id ' || ' OR ' || ' e2.left_face = r1.element_id ' || ' OR ' || ' e2.right_face = r1.element_id ' -- Check if E1 share start-or-end node -- with any E2. || ' OR ' || ' e1.start_node = e2.start_node ' || ' OR ' || ' e1.start_node = e2.end_node ' || ' OR ' || ' e1.end_node = e2.start_node ' || ' OR ' || ' e1.end_node = e2.end_node ' || ' ) ' || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP RETURN TRUE; -- either common node -- or edge-in-face END LOOP; RETURN FALSE; -- no intersection -- --------------------------------------------------------- ELSIF tg2.type = 4 THEN -- polygon/collection RAISE EXCEPTION 'Intersection poly/collection not implemented yet', tg1.type, tg2.type; ELSE RAISE EXCEPTION 'Invalid TopoGeometry type', tg2.type; END IF; ELSIF tg1.type = 4 THEN -- collection IF tg2.type = 4 THEN -- collection/collection RAISE EXCEPTION 'Intersection collection/collection not implemented yet', tg1.type, tg2.type; ELSE RAISE EXCEPTION 'Invalid TopoGeometry type', tg2.type; END IF; ELSE RAISE EXCEPTION 'Invalid TopoGeometry type %', tg1.type; END IF; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} intersects(TopoGeometry, TopoGeometry) --{ -- equals(TopoGeometry, TopoGeometry) -- CREATE OR REPLACE FUNCTION topology.equals(tg1 topology.TopoGeometry, tg2 topology.TopoGeometry) RETURNS bool AS $$ DECLARE rec RECORD; toponame varchar; query text; BEGIN IF tg1.topology_id != tg2.topology_id THEN -- TODO: revert to ::geometry instead ? RAISE EXCEPTION 'Cannot compare TopoGeometries from different topologies'; END IF; -- Not the same type, not equal IF tg1.type != tg2.type THEN RETURN FALSE; END IF; -- Geometry collection are not currently supported IF tg2.type = 4 THEN RAISE EXCEPTION 'GeometryCollection are not supported by equals()'; END IF; -- Get topology name SELECT name FROM topology.topology into toponame WHERE id = tg1.topology_id; -- Two geometries are equal if they are composed by -- the same TopoElements FOR rec IN EXECUTE 'SELECT * FROM ' || ' topology.GetTopoGeomElements(' || quote_literal(toponame) || ', ' || tg1.layer_id || ',' || tg1.id || ') ' || ' EXCEPT SELECT * FROM ' || ' topology.GetTopogeomElements(' || quote_literal(toponame) || ', ' || tg2.layer_id || ',' || tg2.id || ');' LOOP RETURN FALSE; END LOOP; FOR rec IN EXECUTE 'SELECT * FROM ' || ' topology.GetTopoGeomElements(' || quote_literal(toponame) || ', ' || tg2.layer_id || ',' || tg2.id || ')' || ' EXCEPT SELECT * FROM ' || ' topology.GetTopogeomElements(' || quote_literal(toponame) || ', ' || tg1.layer_id || ',' || tg1.id || '); ' LOOP RETURN FALSE; END LOOP; RETURN TRUE; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} equals(TopoGeometry, TopoGeometry) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/manage/��������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017466� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/manage/ManageHelper.sql.in�������������������������������������0000644�0000000�0000000�00000002561�12122032615�023137� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2011 Regina Obe <lr@pcorp.us> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- AddToSearchPath(schema_name) -- -- Adds the specified schema to the database search path -- if it is not already in the database search path -- This is a helper function for upgrade/install -- We may want to move this function as a generic helper CREATE OR REPLACE FUNCTION topology.AddToSearchPath(a_schema_name varchar) RETURNS text AS $$ DECLARE var_result text; var_cur_search_path text; BEGIN SELECT reset_val INTO var_cur_search_path FROM pg_settings WHERE name = 'search_path'; IF var_cur_search_path LIKE '%' || quote_ident(a_schema_name) || '%' THEN var_result := a_schema_name || ' already in database search_path'; ELSE EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) || ' SET search_path = ' || var_cur_search_path || ', ' || quote_ident(a_schema_name); var_result := a_schema_name || ' has been added to end of database search_path '; END IF; RETURN var_result; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} AddToSearchPath �����������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/manage/TopologySummary.sql.in����������������������������������0000644�0000000�0000000�00000012600�12122032615�023774� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- TopologySummary(name) -- -- Print an overview about a topology -- CREATE OR REPLACE FUNCTION topology.TopologySummary(atopology varchar) RETURNS text AS $$ DECLARE rec RECORD; rec2 RECORD; var_topology_id integer; n int4; missing int4; sql text; ret text; BEGIN ret := 'Topology ' || quote_ident(atopology) ; BEGIN SELECT * FROM topology.topology WHERE name = atopology INTO STRICT rec; -- TODO: catch <no_rows> to give a nice error message var_topology_id := rec.id; ret := ret || ' (' || rec.id || '), '; ret := ret || 'SRID ' || rec.srid || ', ' || 'precision ' || rec.precision; IF rec.hasz THEN ret := ret || ', has Z'; END IF; ret := ret || E'\n'; EXCEPTION WHEN NO_DATA_FOUND THEN ret := ret || E' (X)\n'; END; BEGIN BEGIN EXECUTE 'SELECT count(node_id) FROM ' || quote_ident(atopology) || '.node ' INTO STRICT n; ret = ret || n || ' nodes, '; EXCEPTION WHEN UNDEFINED_TABLE OR INVALID_SCHEMA_NAME THEN ret = ret || 'X nodes, '; END; BEGIN EXECUTE 'SELECT count(edge_id) FROM ' || quote_ident(atopology) || '.edge_data ' INTO STRICT n; ret = ret || n || ' edges, '; EXCEPTION WHEN UNDEFINED_TABLE OR INVALID_SCHEMA_NAME THEN ret = ret || 'X edges, '; END; BEGIN EXECUTE 'SELECT count(face_id) FROM ' || quote_ident(atopology) || '.face WHERE face_id != 0' INTO STRICT n; ret = ret || n || ' faces, '; EXCEPTION WHEN UNDEFINED_TABLE OR INVALID_SCHEMA_NAME THEN ret = ret || 'X faces, '; END; BEGIN EXECUTE 'SELECT count(*) FROM (SELECT DISTINCT layer_id,topogeo_id FROM ' || quote_ident(atopology) || '.relation ) foo ' INTO STRICT n; ret = ret || n || ' topogeoms in '; EXECUTE 'SELECT count(*) FROM (SELECT DISTINCT layer_id FROM ' || quote_ident(atopology) || '.relation ) foo ' INTO STRICT n; ret = ret || n || ' layers' || E'\n'; EXCEPTION WHEN UNDEFINED_TABLE OR INVALID_SCHEMA_NAME THEN ret = ret || 'X topogeoms in X layers' || E'\n'; END; -- print information about registered layers FOR rec IN SELECT * FROM topology.layer l WHERE l.topology_id = var_topology_id ORDER by layer_id LOOP -- { ret = ret || 'Layer ' || rec.layer_id || ', type '; CASE WHEN rec.feature_type = 1 THEN ret = ret || 'Puntal'; WHEN rec.feature_type = 2 THEN ret = ret || 'Lineal'; WHEN rec.feature_type = 3 THEN ret = ret || 'Polygonal'; WHEN rec.feature_type = 4 THEN ret = ret || 'Mixed'; ELSE ret = ret || '???'; END CASE; ret = ret || ' (' || rec.feature_type || '), '; BEGIN EXECUTE 'SELECT count(*) FROM ( SELECT DISTINCT topogeo_id FROM ' || quote_ident(atopology) || '.relation r WHERE r.layer_id = ' || rec.layer_id || ' ) foo ' INTO STRICT n; ret = ret || n || ' topogeoms' || E'\n'; EXCEPTION WHEN UNDEFINED_TABLE THEN ret = ret || 'X topogeoms' || E'\n'; END; IF rec.level > 0 THEN ret = ret || ' Hierarchy level ' || rec.level || ', child layer ' || rec.child_id || E'\n'; END IF; ret = ret || ' Deploy: '; IF rec.feature_column != '' THEN ret = ret || quote_ident(rec.schema_name) || '.' || quote_ident(rec.table_name) || '.' || quote_ident(rec.feature_column); IF n > 0 THEN sql := 'SELECT count(*) FROM ( SELECT topogeo_id FROM ' || quote_ident(atopology) || '.relation r WHERE r.layer_id = ' || rec.layer_id || ' EXCEPT SELECT DISTINCT id(' || quote_ident(rec.feature_column) || ') FROM ' || quote_ident(rec.schema_name) || '.' || quote_ident(rec.table_name) || ') as foo'; EXECUTE sql INTO STRICT missing; IF missing > 0 THEN ret = ret || ' (' || missing || ' missing topogeoms)'; END IF; END IF; ret = ret || E'\n'; ELSE ret = ret || E'NONE (detached)\n'; END IF; END LOOP; -- } -- print information about unregistered layers containing topogeoms sql := 'SELECT layer_id FROM ' || quote_ident(atopology) || '.relation EXCEPT SELECT layer_id' || ' FROM topology.layer WHERE topology_id = ' || var_topology_id || 'ORDER BY layer_id'; --RAISE DEBUG '%', sql; FOR rec IN EXECUTE sql LOOP -- { ret = ret || 'Layer ' || rec.layer_id::text || ', UNREGISTERED, '; EXECUTE 'SELECT count(*) FROM ( SELECT DISTINCT topogeo_id FROM ' || quote_ident(atopology) || '.relation r WHERE r.layer_id = ' || rec.layer_id || ' ) foo ' INTO STRICT n; ret = ret || n || ' topogeoms' || E'\n'; END LOOP; -- } EXCEPTION WHEN INVALID_SCHEMA_NAME THEN ret = ret || E'\n- missing schema - '; WHEN OTHERS THEN RAISE EXCEPTION 'Got % (%)', SQLERRM, SQLSTATE; END; RETURN ret; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} TopologySummary ��������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/manage/CopyTopology.sql.in�������������������������������������0000644�0000000�0000000�00000006252�12122032615�023257� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --{ -- CopyTopology(name_source, name_target) -- -- Makes a copy of a topology (primitives + topogeometry collections) . -- Returns the new topology id. -- CREATE OR REPLACE FUNCTION topology.CopyTopology(atopology varchar, newtopo varchar) RETURNS int AS $$ DECLARE rec RECORD; rec2 RECORD; oldtopo_id integer; newtopo_id integer; n int4; ret text; BEGIN SELECT * FROM topology.topology where name = atopology INTO strict rec; oldtopo_id = rec.id; -- TODO: more gracefully handle unexistent topology SELECT topology.CreateTopology(newtopo, rec.SRID, rec.precision, rec.hasZ) INTO strict newtopo_id; -- Copy faces EXECUTE 'INSERT INTO ' || quote_ident(newtopo) || '.face SELECT * FROM ' || quote_ident(atopology) || '.face WHERE face_id != 0'; -- Update faces sequence EXECUTE 'SELECT setval(' || quote_literal( quote_ident(newtopo) || '.face_face_id_seq' ) || ', (SELECT last_value FROM ' || quote_ident(atopology) || '.face_face_id_seq))'; -- Copy nodes EXECUTE 'INSERT INTO ' || quote_ident(newtopo) || '.node SELECT * FROM ' || quote_ident(atopology) || '.node'; -- Update node sequence EXECUTE 'SELECT setval(' || quote_literal( quote_ident(newtopo) || '.node_node_id_seq' ) || ', (SELECT last_value FROM ' || quote_ident(atopology) || '.node_node_id_seq))'; -- Copy edges EXECUTE 'INSERT INTO ' || quote_ident(newtopo) || '.edge_data SELECT * FROM ' || quote_ident(atopology) || '.edge_data'; -- Update edge sequence EXECUTE 'SELECT setval(' || quote_literal( quote_ident(newtopo) || '.edge_data_edge_id_seq' ) || ', (SELECT last_value FROM ' || quote_ident(atopology) || '.edge_data_edge_id_seq))'; -- Copy layers and their TopoGeometry sequences FOR rec IN SELECT * FROM topology.layer WHERE topology_id = oldtopo_id LOOP INSERT INTO topology.layer (topology_id, layer_id, feature_type, level, child_id, schema_name, table_name, feature_column) VALUES (newtopo_id, rec.layer_id, rec.feature_type, rec.level, rec.child_id, newtopo, 'LAYER' || rec.layer_id, ''); -- Create layer's TopoGeometry sequences EXECUTE 'SELECT last_value FROM ' || quote_ident(atopology) || '.topogeo_s_' || rec.layer_id INTO STRICT n; EXECUTE 'CREATE SEQUENCE ' || quote_ident(newtopo) || '.topogeo_s_' || rec.layer_id; EXECUTE 'SELECT setval(' || quote_literal( quote_ident(newtopo) || '.topogeo_s_' || rec.layer_id ) || ', ' || n || ')'; END LOOP; -- Copy TopoGeometry definitions EXECUTE 'INSERT INTO ' || quote_ident(newtopo) || '.relation SELECT * FROM ' || quote_ident(atopology) || '.relation'; RETURN newtopo_id; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} TopologySummary ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/topogeometry/��������������������������������������������������0000755�0000000�0000000�00000000000�12315456222�020772� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/topogeometry/simplify.sql.in�����������������������������������0000644�0000000�0000000�00000012653�12243440745�023766� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2012 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- { -- Get a simplified geometry version from a TopoGeometry -- -- Performs Douglas Peucker algorithm on each edge composing -- the given TopoGeometry -- -- }{ CREATE OR REPLACE FUNCTION topology.ST_Simplify(tg topology.TopoGeometry, tolerance float8) RETURNS geometry AS $$ DECLARE topology_info RECORD; layer_info RECORD; child_layer_info RECORD; geom geometry; sql TEXT; BEGIN -- Get topology information SELECT id, name FROM topology.topology INTO topology_info WHERE id = tg.topology_id; IF NOT FOUND THEN RAISE EXCEPTION 'No topology with id "%" in topology.topology', tg.topology_id; END IF; -- Get layer info SELECT * FROM topology.layer WHERE topology_id = tg.topology_id AND layer_id = tg.layer_id INTO layer_info; IF NOT FOUND THEN RAISE EXCEPTION 'Could not find TopoGeometry layer % in topology %', tg.layer_id, tg.topology_id; END IF; -- -- If this feature layer is on any level > 0 we will -- compute the topological union of all simplified child -- features in fact recursing. -- IF layer_info.level > 0 THEN -- { -- Get child layer info SELECT * FROM topology.layer WHERE layer_id = layer_info.child_id AND topology_id = tg.topology_id INTO child_layer_info; IF NOT FOUND THEN RAISE EXCEPTION 'Invalid layer % in topology % (unexistent child layer %)', tg.layer_id, tg.topology_id, layer_info.child_id; END IF; sql := 'SELECT st_multi(st_union(topology.ST_Simplify(' || quote_ident(child_layer_info.feature_column) || ',' || tolerance || '))) as geom FROM ' || quote_ident(child_layer_info.schema_name) || '.' || quote_ident(child_layer_info.table_name) || ', ' || quote_ident(topology_info.name) || '.relation pr' || ' WHERE ' || ' pr.topogeo_id = ' || tg.id || ' AND ' || ' pr.layer_id = ' || tg.layer_id || ' AND ' || ' id('||quote_ident(child_layer_info.feature_column) || ') = pr.element_id ' || ' AND ' || 'layer_id('||quote_ident(child_layer_info.feature_column) || ') = pr.element_type '; RAISE DEBUG '%', sql; EXECUTE sql INTO geom; ELSIF tg.type = 3 THEN -- [multi]polygon -- }{ -- TODO: use ST_GetFaceEdges -- TODO: is st_unaryunion needed? sql := 'SELECT st_multi(st_unaryunion(ST_BuildArea(ST_Node(ST_Collect(ST_Simplify(geom, ' || tolerance || ')))))) as geom FROM ' || quote_ident(topology_info.name) || '.edge_data e, ' || quote_ident(topology_info.name) || '.relation r WHERE ( e.left_face = r.element_id' || ' OR e.right_face = r.element_id )' || ' AND r.topogeo_id = ' || tg.id || ' AND r.layer_id = ' || tg.layer_id || ' AND element_type = 3 '; RAISE DEBUG '%', sql; EXECUTE sql INTO geom; ELSIF tg.type = 2 THEN -- [multi]line -- }{ sql := 'SELECT st_multi(ST_LineMerge(ST_Node(ST_Collect(ST_Simplify(e.geom,' || tolerance || '))))) as g FROM ' || quote_ident(topology_info.name) || '.edge e, ' || quote_ident(topology_info.name) || '.relation r ' || ' WHERE r.topogeo_id = ' || tg.id || ' AND r.layer_id = ' || tg.layer_id || ' AND r.element_type = 2 ' || ' AND abs(r.element_id) = e.edge_id'; EXECUTE sql INTO geom; ELSIF tg.type = 1 THEN -- [multi]point -- }{ -- Can't simplify points... geom := topology.Geometry(tg); ELSIF tg.type = 4 THEN -- mixed collection -- }{ sql := 'WITH areas AS ( ' || 'SELECT st_multi(st_union(ST_BuildArea(ST_Node(ST_Collect(ST_Simplify(geom, ' || tolerance || ')))) as geom FROM ' || quote_ident(topology_info.name) || '.edge_data e, ' || quote_ident(topology_info.name) || '.relation r WHERE ( e.left_face = r.element_id' || ' OR e.right_face = r.element_id )' || ' AND r.topogeo_id = ' || tg.id || ' AND r.layer_id = ' || tg.layer_id || ' AND element_type = 3 ), ' || 'lines AS ( ' || 'SELECT st_multi(ST_LineMerge(ST_Collect(ST_Simplify(e.geom,' || tolerance || ')))) as g FROM ' || quote_ident(topology_info.name) || '.edge e, ' || quote_ident(topology_info.name) || '.relation r ' || ' WHERE r.topogeo_id = ' || tg.id || ' AND r.layer_id = ' || tg.layer_id || ' AND r.element_type = 2 ' || ' AND abs(r.element_id) = e.edge_id ), ' || ' points as ( SELECT st_union(n.geom) as g FROM ' || quote_ident(topology_info.name) || '.node n, ' || quote_ident(topology_info.name) || '.relation r ' || ' WHERE r.topogeo_id = ' || tg.id || ' AND r.layer_id = ' || tg.layer_id || ' AND r.element_type = 1 ' || ' AND r.element_id = n.node_id ), ' || ' un as ( SELECT g FROM areas UNION ALL SELECT g FROM lines ' || ' UNION ALL SELECT g FROM points ) ' || 'SELECT ST_Multi(ST_Collect(g)) FROM un'; EXECUTE sql INTO geom; ELSE -- }{ RAISE EXCEPTION 'Invalid TopoGeometries (unknown type %)', tg.type; END IF; -- } RETURN geom; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- } �������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/topogeometry/type.sql.in���������������������������������������0000644�0000000�0000000�00000003254�12122032615�023075� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- { -- Override geometrytype() for topogeometry objects -- -- Note: For performance reasons, this function always assumes -- TopoGeometry are of the MULTI type. This may not always -- be the case if you convert the TopoGeometry to an actual -- Geometry. -- -- }{ CREATE OR REPLACE FUNCTION topology.GeometryType(tg topology.TopoGeometry) RETURNS text AS $$ SELECT CASE WHEN type($1) = 1 THEN 'MULTIPOINT' WHEN type($1) = 2 THEN 'MULTILINESTRING' WHEN type($1) = 3 THEN 'MULTIPOLYGON' WHEN type($1) = 4 THEN 'GEOMETRYCOLLECTION' ELSE 'UNEXPECTED' END; $$ LANGUAGE 'sql' STABLE STRICT; -- } -- { -- Override st_geometrytype() for topogeometry objects -- -- Note: For performance reasons, this function always assumes -- TopoGeometry are of the MULTI type. This may not always -- be the case if you convert the TopoGeometry to an actual -- Geometry. -- -- }{ CREATE OR REPLACE FUNCTION topology.ST_GeometryType(tg topology.TopoGeometry) RETURNS text AS $$ SELECT CASE WHEN type($1) = 1 THEN 'ST_MultiPoint' WHEN type($1) = 2 THEN 'ST_MultiLinestring' WHEN type($1) = 3 THEN 'ST_MultiPolygon' WHEN type($1) = 4 THEN 'ST_GeometryCollection' ELSE 'ST_Unexpected' END; $$ LANGUAGE 'sql' STABLE STRICT; -- } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/topogeometry/cleartopogeom.sql.in������������������������������0000644�0000000�0000000�00000002344�12122032615�024753� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2012 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- { -- Clear the contents of a TopoGeometry -- -- }{ CREATE OR REPLACE FUNCTION topology.clearTopoGeom(tg topology.TopoGeometry) RETURNS topology.TopoGeometry AS $$ DECLARE topology_info RECORD; sql TEXT; BEGIN -- Get topology information SELECT id, name FROM topology.topology INTO topology_info WHERE id = topology_id(tg); IF NOT FOUND THEN RAISE EXCEPTION 'No topology with id "%" in topology.topology', topology_id(tg); END IF; -- Clear the TopoGeometry contents sql := 'DELETE FROM ' || quote_ident(topology_info.name) || '.relation WHERE layer_id = ' || layer_id(tg) || ' AND topogeo_id = ' || id(tg); #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql; RETURN tg; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/sql/topogeometry/totopogeom.sql.in���������������������������������0000644�0000000�0000000�00000022261�12122032615�024307� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011-2012 Sandro Santilli <strk@keybit.net> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- { -- Convert a simple geometry to a topologically-defined one -- -- See http://trac.osgeo.org/postgis/ticket/1017 -- -- }{ CREATE OR REPLACE FUNCTION topology.toTopoGeom(ageom Geometry, atopology varchar, alayer int, atolerance float8 DEFAULT 0) RETURNS topology.TopoGeometry AS $$ DECLARE layer_info RECORD; topology_info RECORD; rec RECORD; rec2 RECORD; tg topology.TopoGeometry; elems INT[][]; elem INT[]; sql TEXT; typ TEXT; BEGIN -- Get topology information BEGIN SELECT * FROM topology.topology INTO STRICT topology_info WHERE name = atopology; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'No topology with name "%" in topology.topology', atopology; END; -- Get layer information BEGIN SELECT *, CASE WHEN feature_type = 1 THEN 'puntal' WHEN feature_type = 2 THEN 'lineal' WHEN feature_type = 3 THEN 'areal' WHEN feature_type = 4 THEN 'mixed' ELSE 'unexpected_'||feature_type END as typename FROM topology.layer l INTO STRICT layer_info WHERE l.layer_id = alayer AND l.topology_id = topology_info.id; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'No layer with id "%" in topology "%"', alayer, atopology; END; -- Can't convert to a hierarchical topogeometry IF layer_info.level > 0 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is hierarchical, cannot convert to it.', alayer, atopology; END IF; -- -- Check type compatibility and create empty TopoGeometry -- 1:puntal, 2:lineal, 3:areal, 4:collection -- typ = geometrytype(ageom); IF typ = 'GEOMETRYCOLLECTION' THEN -- A collection can only go collection layer IF layer_info.feature_type != 4 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold a collection feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg := topology.CreateTopoGeom(atopology, 4, alayer); ELSIF typ = 'POINT' OR typ = 'MULTIPOINT' THEN -- puntal -- A point can go in puntal or collection layer IF layer_info.feature_type != 4 and layer_info.feature_type != 1 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold a puntal feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg := topology.CreateTopoGeom(atopology, 1, alayer); ELSIF typ = 'LINESTRING' or typ = 'MULTILINESTRING' THEN -- lineal -- A line can go in lineal or collection layer IF layer_info.feature_type != 4 and layer_info.feature_type != 2 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold a lineal feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg := topology.CreateTopoGeom(atopology, 2, alayer); ELSIF typ = 'POLYGON' OR typ = 'MULTIPOLYGON' THEN -- areal -- An area can go in areal or collection layer IF layer_info.feature_type != 4 and layer_info.feature_type != 3 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold an areal feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg := topology.CreateTopoGeom(atopology, 3, alayer); ELSE -- Should never happen RAISE EXCEPTION 'Unsupported feature type %', typ; END IF; tg := topology.toTopoGeom(ageom, tg, atolerance); RETURN tg; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- } -- { -- Convert a simple geometry to a topologically-defined one -- adding its components to a pre-existing TopoGeometry -- -- }{ CREATE OR REPLACE FUNCTION topology.toTopoGeom(ageom Geometry, tg topology.TopoGeometry, atolerance float8 DEFAULT 0) RETURNS topology.TopoGeometry AS $$ DECLARE layer_info RECORD; topology_info RECORD; rec RECORD; rec2 RECORD; elem INT[]; elems INT[][]; sql TEXT; typ TEXT; tolerance FLOAT8; alayer INT; atopology TEXT; BEGIN RAISE NOTICE 'TopoGeometry is "%", its topology_id is "%"', tg, topology_id(tg); -- Get topology information SELECT id, name FROM topology.topology INTO topology_info WHERE id = topology_id(tg); IF NOT FOUND THEN RAISE EXCEPTION 'No topology with id "%" in topology.topology', topology_id(tg); END IF; alayer := layer_id(tg); atopology := topology_info.name; -- Get tolerance, if 0 was given tolerance := COALESCE( NULLIF(atolerance, 0), topology._st_mintolerance(topology_info.name, ageom) ); -- Get layer information BEGIN SELECT *, CASE WHEN feature_type = 1 THEN 'puntal' WHEN feature_type = 2 THEN 'lineal' WHEN feature_type = 3 THEN 'areal' WHEN feature_type = 4 THEN 'mixed' ELSE 'unexpected_'||feature_type END as typename FROM topology.layer l INTO STRICT layer_info WHERE l.layer_id = layer_id(tg) AND l.topology_id = topology_info.id; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'No layer with id "%" in topology "%"', alayer, atopology; END; -- Can't convert to a hierarchical topogeometry IF layer_info.level > 0 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is hierarchical, cannot convert a simple geometry to it.', alayer, atopology; END IF; -- -- Check type compatibility and set TopoGeometry type -- 1:puntal, 2:lineal, 3:areal, 4:collection -- typ = geometrytype(ageom); IF typ = 'GEOMETRYCOLLECTION' THEN -- A collection can only go to collection layer IF layer_info.feature_type != 4 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold a collection feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg.type := 4; ELSIF typ = 'POINT' OR typ = 'MULTIPOINT' THEN -- puntal -- A point can go in puntal or collection layer IF layer_info.feature_type != 4 and layer_info.feature_type != 1 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold a puntal feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg.type := 1; ELSIF typ = 'LINESTRING' or typ = 'MULTILINESTRING' THEN -- lineal -- A line can go in lineal or collection layer IF layer_info.feature_type != 4 and layer_info.feature_type != 2 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold a lineal feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg.type := 2; ELSIF typ = 'POLYGON' OR typ = 'MULTIPOLYGON' THEN -- areal -- An area can go in areal or collection layer IF layer_info.feature_type != 4 and layer_info.feature_type != 3 THEN RAISE EXCEPTION 'Layer "%" of topology "%" is %, cannot hold an areal feature.', layer_info.layer_id, topology_info.name, layer_info.typename; END IF; tg.type := 3; ELSE -- Should never happen RAISE EXCEPTION 'Unexpected feature dimension %', ST_Dimension(ageom); END IF; -- Now that we have an empty topogeometry, we loop over distinct components -- and add them to the definition of it. We add them as soon -- as possible so that each element can further edit the -- definition by splitting FOR rec IN SELECT id(tg), alayer as lyr, geom, ST_Dimension(geom) as dims FROM (SELECT (ST_Dump(ageom)).geom) as f WHERE NOT ST_IsEmpty(geom) LOOP FOR rec2 IN SELECT CASE WHEN rec.dims = 0 THEN topology.topogeo_addPoint(atopology, rec.geom, tolerance) WHEN rec.dims = 1 THEN topology.topogeo_addLineString(atopology, rec.geom, tolerance) WHEN rec.dims = 2 THEN topology.topogeo_addPolygon(atopology, rec.geom, tolerance) END as primitive LOOP elem := ARRAY[rec.dims+1, rec2.primitive]; IF elems @> ARRAY[elem] THEN #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Elem % already in %', elem, elems; #endif ELSE #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Elem % NOT in %', elem, elems; #endif elems := elems || elem; -- TODO: consider use a single INSERT statement for the whole thing sql := 'INSERT INTO ' || quote_ident(atopology) || '.relation(topogeo_id, layer_id, element_type, element_id) VALUES (' || rec.id || ',' || rec.lyr || ',' || rec.dims+1 || ',' || rec2.primitive || ')' -- NOTE: we're avoiding duplicated rows here || ' EXCEPT SELECT ' || rec.id || ', ' || rec.lyr || ', element_type, element_id FROM ' || quote_ident(topology_info.name) || '.relation WHERE layer_id = ' || rec.lyr || ' AND topogeo_id = ' || rec.id; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG '%', sql; #endif EXECUTE sql; END IF; END LOOP; END LOOP; RETURN tg; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/topology.sql.in����������������������������������������������������0000644�0000000�0000000�00000157672�12225175606�020466� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: topology.sql.in 12013 2013-10-09 06:45:26Z strk $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2010, 2011 Sandro Santilli <strk@keybit.net> -- Copyright (C) 2005 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Sandro Santilli <strk@keybit.net> -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- STATUS: -- -- All objects are created in the 'topology' schema. -- -- We have PostGIS-specific objects and SQL/MM objects. -- PostGIS-specific objects have no prefix, SQL/MM ones -- have the ``ST_' prefix. -- -- [PostGIS-specific] -- -- TABLE topology -- Table storing topology info (name, srid, precision) -- -- TYPE TopoGeometry -- Complex type storing topology_id, layer_id, geometry type -- and topogeometry id. -- -- DOMAIN TopoElement -- An array of two elements: element_id and element_type. -- In fact, an array of integers. -- -- DOMAIN TopoElementArray -- An array of element_id,element_type values. -- In fact, a bidimensional array of integers: -- '{{id,type}, {id,type}, ...}' -- -- FUNCTION CreateTopology(name, [srid], [precision]) -- Initialize a new topology (creating schema with -- edge,face,node,relation) and add a record into -- the topology.topology table. -- TODO: add triggers (or rules, or whatever) enforcing -- precision to the edge and node tables. -- -- FUNCTION DropTopology(name) -- Delete a topology removing reference from the -- topology.topology table -- -- FUNCTION GetTopologyId(name) -- FUNCTION GetTopologySRID(name) -- FUNCTION GetTopologyName(id) -- Return info about a Topology -- -- FUNCTION AddTopoGeometryColumn(toponame, schema, table, column, geomtype) -- Add a TopoGeometry column to a table, making it a topology layer. -- Returns created layer id. -- -- FUNCTION DropTopoGeometryColumn(schema, table, column) -- Drop a TopoGeometry column, unregister the associated layer, -- cleanup the relation table. -- -- FUNCTION CreateTopoGeom(toponame, geomtype, layer_id, topo_objects) -- Create a TopoGeometry object from existing Topology elements. -- The "topo_objects" parameter is of TopoElementArray type. -- -- FUNCTION GetTopoGeomElementArray(toponame, layer_id, topogeom_id) -- FUNCTION GetTopoGeomElementArray(TopoGeometry) -- Returns a TopoElementArray object containing the topological -- elements of the given TopoGeometry. -- -- FUNCTION GetTopoGeomElements(toponame, layer_id, topogeom_id) -- FUNCTION GetTopoGeomElements(TopoGeometry) -- Returns a set of TopoElement objects containing the -- topological elements of the given TopoGeometry (primitive -- elements) -- -- FUNCTION ValidateTopology(toponame) -- Run validity checks on the topology, returning, for each -- detected error, a 3-columns row containing error string -- and references to involved topo elements: error, id1, id2 -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- Overloaded functions for TopoGeometry inputs -- -- FUNCTION intersects(TopoGeometry, TopoGeometry) -- FUNCTION equals(TopoGeometry, TopoGeometry) -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- FUNCTION TopoGeo_AddPoint(toponame, point) -- Add a Point geometry to the topology -- TODO: accept a topology/layer id -- rework to use existing node if existent -- -- FUNCTION TopoGeo_AddLinestring(toponame, line) -- Add a LineString geometry to the topology -- TODO: accept a topology/layer id -- rework to use existing nodes/edges -- splitting them if required -- -- FUNCTION TopoGeo_AddPolygon(toponame, polygon) -- Add a Polygon geometry to the topology -- TODO: implement -- -- TYPE GetFaceEdges_ReturnType -- Complex type used to return tuples from ST_GetFaceEdges -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- [SQL/MM] -- -- ST_InitTopoGeo -- Done, can be modified to include explicit sequences or -- more constraints. Very noisy due to implicit index creations -- for primary keys and sequences for serial fields... -- -- ST_CreateTopoGeo -- Complete -- -- ST_AddIsoNode -- Complete -- -- ST_RemoveIsoNode -- Complete -- -- ST_MoveIsoNode -- Complete -- -- ST_AddIsoEdge -- Complete -- -- ST_RemoveIsoEdge -- Complete, exceptions untested -- -- ST_ChangeEdgeGeom -- Complete -- -- ST_NewEdgesSplit -- Complete -- Also updates the Relation table -- -- ST_ModEdgeSplit -- Complete -- Also updates the Relation table -- -- ST_AddEdgeNewFaces -- Complete -- Also updates the Relation table -- -- ST_AddEdgeModFace -- Complete -- Also updates the Relation table -- -- ST_GetFaceEdges -- Complete -- -- ST_ModEdgeHeal -- Complete -- Also updates the Relation table -- -- ST_NewEdgeHeal -- Complete -- Also updates the Relation table -- -- ST_GetFaceGeometry -- Implemented using ST_BuildArea() -- -- ST_RemEdgeNewFace -- Complete -- Also updates the Relation table -- -- ST_RemEdgeModFace -- Complete -- Also updates the Relation table -- -- ST_ValidateTopoGeo -- Unimplemented (probably a wrapper around ValidateTopology) -- -- -- Uninstalling previous installation isn't really a good habit ... -- Let people decide about that -- DROP SCHEMA topology CASCADE; #include "../postgis/sqldefines.h" CREATE SCHEMA topology; -- Doing everything outside of a transaction helps -- upgrading in the best case. BEGIN; --={ ---------------------------------------------------------------- -- POSTGIS-SPECIFIC block -- -- This part contains function NOT in the SQL/MM specification -- --------------------------------------------------------------------- -- -- Topology table. -- Stores id,name,precision and SRID of topologies. -- CREATE TABLE topology.topology ( id SERIAL NOT NULL PRIMARY KEY, name VARCHAR NOT NULL UNIQUE, SRID INTEGER NOT NULL, precision FLOAT8 NOT NULL, hasz BOOLEAN NOT NULL DEFAULT false ); --{ LayerTrigger() -- -- Layer integrity trigger -- CREATE OR REPLACE FUNCTION topology.LayerTrigger() RETURNS trigger AS $$ DECLARE rec RECORD; ok BOOL; toponame varchar; query TEXT; BEGIN --RAISE NOTICE 'LayerTrigger called % % at % level', TG_WHEN, TG_OP, TG_LEVEL; IF TG_OP = 'INSERT' THEN RAISE EXCEPTION 'LayerTrigger not meant to be called on INSERT'; ELSIF TG_OP = 'UPDATE' THEN RAISE EXCEPTION 'The topology.layer table cannot be updated'; END IF; -- Check for existance of any feature column referencing -- this layer FOR rec IN SELECT * FROM pg_namespace n, pg_class c, pg_attribute a WHERE text(n.nspname) = OLD.schema_name AND c.relnamespace = n.oid AND text(c.relname) = OLD.table_name AND a.attrelid = c.oid AND text(a.attname) = OLD.feature_column LOOP query = 'SELECT * ' || ' FROM ' || quote_ident(OLD.schema_name) || '.' || quote_ident(OLD.table_name) || ' WHERE layer_id(' || quote_ident(OLD.feature_column)||') ' || '=' || OLD.layer_id || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP RAISE NOTICE 'A feature referencing layer % of topology % still exists in %.%.%', OLD.layer_id, OLD.topology_id, OLD.schema_name, OLD.table_name, OLD.feature_column; RETURN NULL; END LOOP; END LOOP; -- Get topology name SELECT name FROM topology.topology INTO toponame WHERE id = OLD.topology_id; IF toponame IS NULL THEN RAISE NOTICE 'Could not find name of topology with id %', OLD.layer_id; END IF; -- Check if any record in the relation table references this layer FOR rec IN SELECT * FROM pg_namespace WHERE text(nspname) = toponame LOOP query = 'SELECT * ' || ' FROM ' || quote_ident(toponame) || '.relation ' || ' WHERE layer_id = '|| OLD.layer_id || ' LIMIT 1'; --RAISE NOTICE '%', query; FOR rec IN EXECUTE query LOOP RAISE NOTICE 'A record in %.relation still references layer %', toponame, OLD.layer_id; RETURN NULL; END LOOP; END LOOP; RETURN OLD; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} LayerTrigger() --{ -- Layer table. -- Stores topology layer informations -- CREATE TABLE topology.layer ( topology_id INTEGER NOT NULL REFERENCES topology.topology(id), layer_id integer NOT NULL, schema_name VARCHAR NOT NULL, table_name VARCHAR NOT NULL, feature_column VARCHAR NOT NULL, feature_type integer NOT NULL, level INTEGER NOT NULL DEFAULT 0, child_id INTEGER DEFAULT NULL, UNIQUE(schema_name, table_name, feature_column), PRIMARY KEY(topology_id, layer_id) ); CREATE TRIGGER layer_integrity_checks BEFORE UPDATE OR DELETE ON topology.layer FOR EACH ROW EXECUTE PROCEDURE topology.LayerTrigger(); --} Layer table. -- -- Type returned by ValidateTopology -- CREATE TYPE topology.ValidateTopology_ReturnType AS ( error varchar, id1 integer, id2 integer ); -- -- TopoGeometry type -- CREATE TYPE topology.TopoGeometry AS ( topology_id integer, layer_id integer, id integer, type integer -- 1: [multi]point, 2: [multi]line, -- 3: [multi]polygon, 4: collection ); -- -- TopoElement domain -- -- This is an array of two elements: element_id and element_type. -- -- When used to define _simple_ TopoGeometries, -- element_type can be: -- 0: a node -- 1: an edge -- 2: a face -- and element_id will be the node, edge or face identifier -- -- When used to define _hierarchical_ TopoGeometries, -- element_type will be the child layer identifier and -- element_id will be composing TopoGoemetry identifier -- CREATE DOMAIN topology.TopoElement AS integer[] CONSTRAINT DIMENSIONS CHECK ( array_upper(VALUE, 2) IS NULL AND array_upper(VALUE, 1) = 2 ); ALTER DOMAIN topology.TopoElement ADD CONSTRAINT lower_dimension CHECK ( array_lower(VALUE, 1) = 1 ); ALTER DOMAIN topology.TopoElement DROP CONSTRAINT #if POSTGIS_PGSQL_VERSION >= 92 IF EXISTS #endif type_range; ALTER DOMAIN topology.TopoElement ADD CONSTRAINT type_range CHECK ( VALUE[2] > 0 ); -- -- TopoElementArray domain -- CREATE DOMAIN topology.TopoElementArray AS integer[][] CONSTRAINT DIMENSIONS CHECK ( array_upper(VALUE, 2) IS NOT NULL AND array_upper(VALUE, 2) = 2 AND array_upper(VALUE, 3) IS NULL ); --{ RelationTrigger() -- -- Relation integrity trigger -- CREATE OR REPLACE FUNCTION topology.RelationTrigger() RETURNS trigger AS $$ DECLARE toponame varchar; topoid integer; plyr RECORD; -- parent layer rec RECORD; ok BOOL; BEGIN IF TG_NARGS != 2 THEN RAISE EXCEPTION 'RelationTrigger called with wrong number of arguments'; END IF; topoid = TG_ARGV[0]; toponame = TG_ARGV[1]; --RAISE NOTICE 'RelationTrigger called % % on %.relation for a %', TG_WHEN, TG_OP, toponame, TG_LEVEL; IF TG_OP = 'DELETE' THEN RAISE EXCEPTION 'RelationTrigger not meant to be called on DELETE'; END IF; -- Get layer info (and verify it exists) ok = false; FOR plyr IN EXECUTE 'SELECT * FROM topology.layer ' || 'WHERE ' || ' topology_id = ' || topoid || ' AND' || ' layer_id = ' || NEW.layer_id LOOP ok = true; EXIT; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'Layer % does not exist in topology %', NEW.layer_id, topoid; RETURN NULL; END IF; IF plyr.level > 0 THEN -- this is hierarchical layer -- ElementType must be the layer child id IF NEW.element_type != plyr.child_id THEN RAISE EXCEPTION 'Type of elements in layer % must be set to its child layer id %', plyr.layer_id, plyr.child_id; RETURN NULL; END IF; -- ElementId must be an existent TopoGeometry in child layer ok = false; FOR rec IN EXECUTE 'SELECT topogeo_id FROM ' || quote_ident(toponame) || '.relation ' || ' WHERE layer_id = ' || plyr.child_id || ' AND topogeo_id = ' || NEW.element_id LOOP ok = true; EXIT; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'TopoGeometry % does not exist in the child layer %', NEW.element_id, plyr.child_id; RETURN NULL; END IF; ELSE -- this is a basic layer -- ElementType must be compatible with layer type IF plyr.feature_type != 4 AND plyr.feature_type != NEW.element_type THEN RAISE EXCEPTION 'Element of type % is not compatible with layer of type %', NEW.element_type, plyr.feature_type; RETURN NULL; END IF; -- -- Now lets see if the element is consistent, which -- is it exists in the topology tables. -- -- -- Element is a Node -- IF NEW.element_type = 1 THEN ok = false; FOR rec IN EXECUTE 'SELECT node_id FROM ' || quote_ident(toponame) || '.node ' || ' WHERE node_id = ' || NEW.element_id LOOP ok = true; EXIT; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'Node % does not exist in topology %', NEW.element_id, toponame; RETURN NULL; END IF; -- -- Element is an Edge -- ELSIF NEW.element_type = 2 THEN ok = false; FOR rec IN EXECUTE 'SELECT edge_id FROM ' || quote_ident(toponame) || '.edge_data ' || ' WHERE edge_id = ' || abs(NEW.element_id) LOOP ok = true; EXIT; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'Edge % does not exist in topology %', NEW.element_id, toponame; RETURN NULL; END IF; -- -- Element is a Face -- ELSIF NEW.element_type = 3 THEN IF NEW.element_id = 0 THEN RAISE EXCEPTION 'Face % cannot be associated with any feature', NEW.element_id; RETURN NULL; END IF; ok = false; FOR rec IN EXECUTE 'SELECT face_id FROM ' || quote_ident(toponame) || '.face ' || ' WHERE face_id = ' || NEW.element_id LOOP ok = true; EXIT; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'Face % does not exist in topology %', NEW.element_id, toponame; RETURN NULL; END IF; END IF; END IF; RETURN NEW; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} RelationTrigger() --{ -- AddTopoGeometryColumn(toponame, schema, table, colum, type, [child]) -- -- Add a TopoGeometry column to a table, making it a topology layer. -- Returns created layer id. -- -- CREATE OR REPLACE FUNCTION topology.AddTopoGeometryColumn(toponame varchar, schema varchar, tbl varchar, col varchar, ltype varchar, child integer) RETURNS integer AS $$ DECLARE intltype integer; newlevel integer; topoid integer; rec RECORD; newlayer_id integer; query text; BEGIN -- Get topology id SELECT id FROM topology.topology into topoid WHERE name = toponame; IF topoid IS NULL THEN RAISE EXCEPTION 'Topology % does not exist', toponame; END IF; IF ltype ILIKE '%POINT%' OR ltype ILIKE 'PUNTAL' THEN intltype = 1; ELSIF ltype ILIKE '%LINE%' OR ltype ILIKE 'LINEAL' THEN intltype = 2; ELSIF ltype ILIKE '%POLYGON%' OR ltype ILIKE 'AREAL' THEN intltype = 3; ELSIF ltype ILIKE '%COLLECTION%' OR ltype ILIKE 'GEOMETRY' THEN intltype = 4; ELSE RAISE EXCEPTION 'Layer type must be one of POINT,LINE,POLYGON,COLLECTION'; END IF; -- -- Add new TopoGeometry column in schema.table -- EXECUTE 'ALTER TABLE ' || quote_ident(schema) || '.' || quote_ident(tbl) || ' ADD COLUMN ' || quote_ident(col) || ' topology.TopoGeometry;'; -- -- See if child id exists and extract its level -- IF child IS NOT NULL THEN SELECT level + 1 FROM topology.layer WHERE layer_id = child INTO newlevel; IF newlevel IS NULL THEN RAISE EXCEPTION 'Child layer % does not exist in topology "%"', child, toponame; END IF; END IF; -- -- Get new layer id from sequence -- EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(toponame) || '.layer_id_seq' ) || ')' INTO STRICT newlayer_id; EXECUTE 'INSERT INTO ' || 'topology.layer(topology_id, ' || 'layer_id, level, child_id, schema_name, ' || 'table_name, feature_column, feature_type) ' || 'VALUES (' || topoid || ',' || newlayer_id || ',' || COALESCE(newlevel, 0) || ',' || COALESCE(child::text, 'NULL') || ',' || quote_literal(schema) || ',' || quote_literal(tbl) || ',' || quote_literal(col) || ',' || intltype || ');'; -- -- Create a sequence for TopoGeometries in this new layer -- EXECUTE 'CREATE SEQUENCE ' || quote_ident(toponame) || '.topogeo_s_' || newlayer_id; -- -- Add constraints on TopoGeom column -- EXECUTE 'ALTER TABLE ' || quote_ident(schema) || '.' || quote_ident(tbl) || ' ADD CONSTRAINT "check_topogeom_' || col || '" CHECK (' || 'topology_id(' || quote_ident(col) || ') = ' || topoid || ' AND ' || 'layer_id(' || quote_ident(col) || ') = ' || newlayer_id || ' AND ' || 'type(' || quote_ident(col) || ') = ' || intltype || ');'; -- -- Add dependency of the feature column on the topology schema -- query = 'INSERT INTO pg_catalog.pg_depend SELECT ' || 'fcat.oid, fobj.oid, fsub.attnum, tcat.oid, ' || 'tobj.oid, 0, ''n'' ' || 'FROM pg_class fcat, pg_namespace fnsp, ' || ' pg_class fobj, pg_attribute fsub, ' || ' pg_class tcat, pg_namespace tobj ' || ' WHERE fcat.relname = ''pg_class'' ' || ' AND fnsp.nspname = ' || quote_literal(schema) || ' AND fobj.relnamespace = fnsp.oid ' || ' AND fobj.relname = ' || quote_literal(tbl) || ' AND fsub.attrelid = fobj.oid ' || ' AND fsub.attname = ' || quote_literal(col) || ' AND tcat.relname = ''pg_namespace'' ' || ' AND tobj.nspname = ' || quote_literal(toponame); -- -- The only reason to add this dependency is to avoid -- simple drop of a feature column. Still, drop cascade -- will remove both the feature column and the sequence -- corrupting the topology anyway ... -- #if 0 -- -- Add dependency of the topogeom sequence on the feature column -- This is a dirty hack ... -- query = 'INSERT INTO pg_catalog.pg_depend SELECT ' || 'scat.oid, sobj.oid, 0, fcat.oid, ' || 'fobj.oid, fsub.attnum, ''n'' ' || 'FROM pg_class fcat, pg_namespace fnsp, ' || ' pg_class fobj, pg_attribute fsub, ' || ' pg_class scat, pg_class sobj, ' || ' pg_namespace snsp ' || ' WHERE fcat.relname = ''pg_class'' ' || ' AND fnsp.nspname = ' || quote_literal(schema) || ' AND fobj.relnamespace = fnsp.oid ' || ' AND fobj.relname = ' || quote_literal(tbl) || ' AND fsub.attrelid = fobj.oid ' || ' AND fsub.attname = ' || quote_literal(col) || ' AND scat.relname = ''pg_class'' ' || ' AND snsp.nspname = ' || quote_literal(toponame) || ' AND sobj.relnamespace = snsp.oid ' || ' AND sobj.relname = ' || ' ''topogeo_s_' || newlayer_id || ''' '; RAISE NOTICE '%', query; EXECUTE query; #endif RETURN newlayer_id; END; $$ LANGUAGE 'plpgsql' VOLATILE; --}{ AddTopoGeometryColumn CREATE OR REPLACE FUNCTION topology.AddTopoGeometryColumn(varchar, varchar, varchar, varchar, varchar) RETURNS integer AS $$ SELECT topology.AddTopoGeometryColumn($1, $2, $3, $4, $5, NULL); $$ LANGUAGE 'sql' VOLATILE; -- --} AddTopoGeometryColumn --{ -- DropTopoGeometryColumn(schema, table, colum) -- -- Drop a TopoGeometry column, unregister the associated layer, -- cleanup the relation table. -- -- CREATE OR REPLACE FUNCTION topology.DropTopoGeometryColumn(schema varchar, tbl varchar, col varchar) RETURNS text AS $$ DECLARE rec RECORD; lyrinfo RECORD; ok BOOL; result text; BEGIN -- Get layer and topology info ok = false; FOR rec IN EXECUTE 'SELECT t.name as toponame, l.* FROM ' || 'topology.topology t, topology.layer l ' || ' WHERE l.topology_id = t.id' || ' AND l.schema_name = ' || quote_literal(schema) || ' AND l.table_name = ' || quote_literal(tbl) || ' AND l.feature_column = ' || quote_literal(col) LOOP ok = true; lyrinfo = rec; END LOOP; -- Layer not found IF NOT ok THEN RAISE EXCEPTION 'No layer registered on %.%.%', schema,tbl,col; END IF; -- Clean up the topology schema FOR rec IN SELECT * FROM pg_namespace WHERE text(nspname) = lyrinfo.toponame LOOP -- Cleanup the relation table EXECUTE 'DELETE FROM ' || quote_ident(lyrinfo.toponame) || '.relation ' || ' WHERE ' || 'layer_id = ' || lyrinfo.layer_id; -- Drop the sequence for topogeoms in this layer EXECUTE 'DROP SEQUENCE ' || quote_ident(lyrinfo.toponame) || '.topogeo_s_' || lyrinfo.layer_id; END LOOP; ok = false; FOR rec IN SELECT * FROM pg_namespace n, pg_class c, pg_attribute a WHERE text(n.nspname) = schema AND c.relnamespace = n.oid AND text(c.relname) = tbl AND a.attrelid = c.oid AND text(a.attname) = col LOOP ok = true; EXIT; END LOOP; IF ok THEN -- Set feature column to NULL to bypass referential integrity -- checks EXECUTE 'UPDATE ' || quote_ident(schema) || '.' || quote_ident(tbl) || ' SET ' || quote_ident(col) || ' = NULL'; END IF; -- Delete the layer record EXECUTE 'DELETE FROM topology.layer ' || ' WHERE topology_id = ' || lyrinfo.topology_id || ' AND layer_id = ' || lyrinfo.layer_id; IF ok THEN -- Drop the layer column EXECUTE 'ALTER TABLE ' || quote_ident(schema) || '.' || quote_ident(tbl) || ' DROP ' || quote_ident(col) || ' cascade'; END IF; result = 'Layer ' || lyrinfo.layer_id || ' (' || schema || '.' || tbl || '.' || col || ') dropped'; RETURN result; END; $$ LANGUAGE 'plpgsql' VOLATILE; -- --} DropTopoGeometryColumn --{ -- CreateTopoGeom(topology_name, topogeom_type, layer_id, elements) -- -- Create a TopoGeometry object from Topology elements. -- The elements parameter is a two-dimensional array. -- Every element of the array is either a Topology element represented by -- (id, type) or a TopoGeometry element represented by (id, layer). -- The actual semantic depends on the TopoGeometry layer, either at -- level 0 (elements are topological primitives) or higer (elements -- are TopoGeoms from child layer). -- -- @param toponame Topology name -- -- @param tg_type Spatial type of geometry -- 1:[multi]point (puntal) -- 2:[multi]line (lineal) -- 3:[multi]poly (areal) -- 4:collection (mixed) -- -- @param layer_id Layer identifier -- -- @param tg_objs Array of components -- -- Return a topology.TopoGeometry object. -- CREATE OR REPLACE FUNCTION topology.CreateTopoGeom(toponame varchar, tg_type integer, layer_id integer, tg_objs topology.TopoElementArray) RETURNS topology.TopoGeometry AS $$ DECLARE i integer; dims varchar; outerdims varchar; innerdims varchar; obj_type integer; obj_id integer; ret topology.TopoGeometry; rec RECORD; layertype integer; layerlevel integer; layerchild integer; BEGIN IF tg_type < 1 OR tg_type > 4 THEN RAISE EXCEPTION 'Invalid TopoGeometry type % (must be in the range 1..4)', tg_type; END IF; -- Get topology id into return TopoGeometry SELECT id FROM topology.topology into ret.topology_id WHERE name = toponame; -- -- Get layer info -- layertype := NULL; FOR rec IN EXECUTE 'SELECT * FROM topology.layer' || ' WHERE topology_id = ' || ret.topology_id || ' AND layer_id = ' || layer_id LOOP layertype = rec.feature_type; layerlevel = rec.level; layerchild = rec.child_id; END LOOP; -- Check for existence of given layer id IF layertype IS NULL THEN RAISE EXCEPTION 'No layer with id % is registered with topology %', layer_id, toponame; END IF; -- Verify compatibility between layer geometry type and -- TopoGeom requested geometry type IF layertype != 4 and layertype != tg_type THEN RAISE EXCEPTION 'A Layer of type % cannot contain a TopoGeometry of type %', layertype, tg_type; END IF; -- Set layer id and type in return object ret.layer_id = layer_id; ret.type = tg_type; -- -- Get new TopoGeo id from sequence -- FOR rec IN EXECUTE 'SELECT nextval(' || quote_literal( quote_ident(toponame) || '.topogeo_s_' || layer_id ) || ')' LOOP ret.id = rec.nextval; END LOOP; -- Loop over outer dimension i = array_lower(tg_objs, 1); LOOP obj_id = tg_objs[i][1]; obj_type = tg_objs[i][2]; -- Elements of type 0 represent emptiness, just skip them IF obj_type = 0 THEN IF obj_id != 0 THEN RAISE EXCEPTION 'Malformed empty topo element {0,%} -- id must be 0 as well', obj_id; END IF; ELSE IF layerlevel = 0 THEN -- array specifies lower-level objects IF tg_type != 4 and tg_type != obj_type THEN RAISE EXCEPTION 'A TopoGeometry of type % cannot contain topology elements of type %', tg_type, obj_type; END IF; ELSE -- array specifies lower-level topogeometries IF obj_type != layerchild THEN RAISE EXCEPTION 'TopoGeom element layer do not match TopoGeom child layer'; END IF; -- TODO: verify that the referred TopoGeometry really -- exists in the relation table ? END IF; --RAISE NOTICE 'obj:% type:% id:%', i, obj_type, obj_id; -- -- Insert record into the Relation table -- EXECUTE 'INSERT INTO '||quote_ident(toponame) || '.relation(topogeo_id, layer_id, ' || 'element_id,element_type) ' || ' VALUES ('||ret.id ||','||ret.layer_id || ',' || obj_id || ',' || obj_type || ');'; END IF; i = i+1; IF i > array_upper(tg_objs, 1) THEN EXIT; END IF; END LOOP; RETURN ret; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} CreateTopoGeom(toponame,topogeom_type, layer_id, TopoElementArray) --{ -- CreateTopoGeom(topology_name, topogeom_type, layer_id) - creates the empty topogeom CREATE OR REPLACE FUNCTION topology.CreateTopoGeom(toponame varchar, tg_type integer, layer_id integer) RETURNS topology.TopoGeometry AS $$ SELECT topology.CreateTopoGeom($1,$2,$3,'{{0,0}}'); $$ LANGUAGE 'sql' VOLATILE STRICT; --} CreateTopoGeom(toponame, topogeom_type, layer_id) --{ -- GetTopologyName(topology_id) -- -- TODO: rewrite in SQL ? -- CREATE OR REPLACE FUNCTION topology.GetTopologyName(topoid integer) RETURNS varchar AS $$ DECLARE ret varchar; BEGIN SELECT name FROM topology.topology into ret WHERE id = topoid; RETURN ret; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} GetTopologyName(topoid) --{ -- GetTopologyId(toponame) -- -- TODO: rewrite in SQL ? -- CREATE OR REPLACE FUNCTION topology.GetTopologyId(toponame varchar) RETURNS integer AS $$ DECLARE ret integer; BEGIN SELECT id FROM topology.topology into ret WHERE name = toponame; RETURN ret; END $$ LANGUAGE 'plpgsql' STABLE STRICT; --} GetTopologyId(toponame) --{ -- GetTopologySRID(toponame) -- CREATE OR REPLACE FUNCTION topology.GetTopologySRID(toponame varchar) RETURNS integer AS $$ SELECT SRID FROM topology.topology WHERE name = $1; $$ LANGUAGE 'sql' STABLE STRICT; --} GetTopologySRID(toponame) --{ -- GetTopoGeomElementArray(toponame, layer_id, topogeom_id) -- GetTopoGeomElementArray(TopoGeometry) -- -- Returns a set of element_id,element_type -- CREATE OR REPLACE FUNCTION topology.GetTopoGeomElementArray(toponame varchar, layer_id integer, tgid integer) RETURNS topology.TopoElementArray AS $$ DECLARE rec RECORD; tg_objs varchar := '{'; i integer; query text; BEGIN query = 'SELECT * FROM topology.GetTopoGeomElements(' || quote_literal(toponame) || ',' || quote_literal(layer_id) || ',' || quote_literal(tgid) || ') as obj ORDER BY obj'; #ifdef POSTGIS_TOPOLOGY_DEBUG RAISE DEBUG 'Query: %', query; #endif -- TODO: why not using array_agg here ? i = 1; FOR rec IN EXECUTE query LOOP IF i > 1 THEN tg_objs = tg_objs || ','; END IF; tg_objs = tg_objs || '{' || rec.obj[1] || ',' || rec.obj[2] || '}'; i = i+1; END LOOP; tg_objs = tg_objs || '}'; RETURN tg_objs; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; CREATE OR REPLACE FUNCTION topology.GetTopoGeomElementArray(tg topology.TopoGeometry) RETURNS topology.TopoElementArray AS $$ DECLARE toponame varchar; BEGIN toponame = topology.GetTopologyName(tg.topology_id); RETURN topology.GetTopoGeomElementArray(toponame, tg.layer_id, tg.id); END; $$ LANGUAGE 'plpgsql' STABLE STRICT; --} GetTopoGeomElementArray() --{ -- GetTopoGeomElements(toponame, layer_id, topogeom_id) -- GetTopoGeomElements(TopoGeometry) -- -- Returns a set of element_id,element_type -- CREATE OR REPLACE FUNCTION topology.GetTopoGeomElements(toponame varchar, layerid integer, tgid integer) RETURNS SETOF topology.TopoElement AS $$ DECLARE ret topology.TopoElement; rec RECORD; rec2 RECORD; query text; query2 text; lyr RECORD; ok bool; BEGIN -- Get layer info ok = false; FOR rec IN EXECUTE 'SELECT * FROM ' || ' topology.layer ' || ' WHERE layer_id = ' || layerid LOOP lyr = rec; ok = true; END LOOP; IF NOT ok THEN RAISE EXCEPTION 'Layer % does not exist', layerid; END IF; query = 'SELECT abs(element_id) as element_id, element_type FROM ' || quote_ident(toponame) || '.relation WHERE ' || ' layer_id = ' || layerid || ' AND topogeo_id = ' || quote_literal(tgid) || ' ORDER BY element_type, element_id'; --RAISE NOTICE 'Query: %', query; FOR rec IN EXECUTE query LOOP IF lyr.level > 0 THEN query2 = 'SELECT * from topology.GetTopoGeomElements(' || quote_literal(toponame) || ',' || rec.element_type || ',' || rec.element_id || ') as ret;'; --RAISE NOTICE 'Query2: %', query2; FOR rec2 IN EXECUTE query2 LOOP RETURN NEXT rec2.ret; END LOOP; ELSE ret = '{' || rec.element_id || ',' || rec.element_type || '}'; RETURN NEXT ret; END IF; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; CREATE OR REPLACE FUNCTION topology.GetTopoGeomElements(tg topology.TopoGeometry) RETURNS SETOF topology.TopoElement AS $$ DECLARE toponame varchar; rec RECORD; BEGIN toponame = topology.GetTopologyName(tg.topology_id); FOR rec IN SELECT * FROM topology.GetTopoGeomElements(toponame, tg.layer_id,tg.id) as ret LOOP RETURN NEXT rec.ret; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; --} GetTopoGeomElements() --{ -- Geometry(TopoGeometry) -- -- Construct a Geometry from a TopoGeometry. -- -- }{ CREATE OR REPLACE FUNCTION topology.Geometry(topogeom topology.TopoGeometry) RETURNS Geometry AS $$ DECLARE toponame varchar; geom geometry; rec RECORD; plyr RECORD; clyr RECORD; sql TEXT; BEGIN -- Get topology name SELECT name FROM topology.topology WHERE id = topogeom.topology_id INTO toponame; IF toponame IS NULL THEN RAISE EXCEPTION 'Invalid TopoGeometry (unexistent topology id %)', topogeom.topology_id; END IF; -- Get layer info SELECT * FROM topology.layer WHERE topology_id = topogeom.topology_id AND layer_id = topogeom.layer_id INTO plyr; IF plyr IS NULL THEN RAISE EXCEPTION 'Could not find TopoGeometry layer % in topology %', topogeom.layer_id, topogeom.topology_id; END IF; -- -- If this feature layer is on any level > 0 we will -- compute the topological union of all child features -- in fact recursing. -- IF plyr.level > 0 THEN -- { -- Get child layer info SELECT * FROM topology.layer WHERE layer_id = plyr.child_id AND topology_id = topogeom.topology_id INTO clyr; IF clyr IS NULL THEN RAISE EXCEPTION 'Invalid layer % in topology % (unexistent child layer %)', topogeom.layer_id, topogeom.topology_id, plyr.child_id; END IF; sql := 'SELECT st_multi(st_union(topology.Geometry(' || quote_ident(clyr.feature_column) || '))) as geom FROM ' || quote_ident(clyr.schema_name) || '.' || quote_ident(clyr.table_name) || ', ' || quote_ident(toponame) || '.relation pr' || ' WHERE ' || ' pr.topogeo_id = ' || topogeom.id || ' AND ' || ' pr.layer_id = ' || topogeom.layer_id || ' AND ' || ' id('||quote_ident(clyr.feature_column) || ') = pr.element_id ' || ' AND ' || 'layer_id('||quote_ident(clyr.feature_column) || ') = pr.element_type '; --RAISE DEBUG '%', query; EXECUTE sql INTO geom; ELSIF topogeom.type = 3 THEN -- [multi]polygon -- }{ sql := 'SELECT st_multi(st_union(' || 'topology.ST_GetFaceGeometry(' || quote_literal(toponame) || ',' || 'element_id))) as g FROM ' || quote_ident(toponame) || '.relation WHERE topogeo_id = ' || topogeom.id || ' AND layer_id = ' || topogeom.layer_id || ' AND element_type = 3 '; EXECUTE sql INTO geom; ELSIF topogeom.type = 2 THEN -- [multi]line -- }{ sql := 'SELECT st_multi(ST_LineMerge(ST_Collect(e.geom))) as g FROM ' || quote_ident(toponame) || '.edge e, ' || quote_ident(toponame) || '.relation r ' || ' WHERE r.topogeo_id = ' || topogeom.id || ' AND r.layer_id = ' || topogeom.layer_id || ' AND r.element_type = 2 ' || ' AND abs(r.element_id) = e.edge_id'; EXECUTE sql INTO geom; ELSIF topogeom.type = 1 THEN -- [multi]point -- }{ sql := 'SELECT st_multi(st_union(n.geom)) as g FROM ' || quote_ident(toponame) || '.node n, ' || quote_ident(toponame) || '.relation r ' || ' WHERE r.topogeo_id = ' || topogeom.id || ' AND r.layer_id = ' || topogeom.layer_id || ' AND r.element_type = 1 ' || ' AND r.element_id = n.node_id'; EXECUTE sql INTO geom; ELSIF topogeom.type = 4 THEN -- mixed collection -- }{ sql := 'WITH areas AS ( SELECT ST_Union(' || 'topology.ST_GetFaceGeometry(' || quote_literal(toponame) || ',' || 'element_id)) as g FROM ' || quote_ident(toponame) || '.relation WHERE topogeo_id = ' || topogeom.id || ' AND layer_id = ' || topogeom.layer_id || ' AND element_type = 3), ' || 'lines AS ( SELECT ST_LineMerge(ST_Collect(e.geom)) as g FROM ' || quote_ident(toponame) || '.edge e, ' || quote_ident(toponame) || '.relation r ' || ' WHERE r.topogeo_id = ' || topogeom.id || ' AND r.layer_id = ' || topogeom.layer_id || ' AND r.element_type = 2 ' || ' AND abs(r.element_id) = e.edge_id ), ' || ' points as ( SELECT st_union(n.geom) as g FROM ' || quote_ident(toponame) || '.node n, ' || quote_ident(toponame) || '.relation r ' || ' WHERE r.topogeo_id = ' || topogeom.id || ' AND r.layer_id = ' || topogeom.layer_id || ' AND r.element_type = 1 ' || ' AND r.element_id = n.node_id ), ' || ' un as ( SELECT g FROM areas UNION ALL SELECT g FROM lines ' || ' UNION ALL SELECT g FROM points ) ' || 'SELECT ST_Multi(ST_Collect(g)) FROM un'; EXECUTE sql INTO geom; ELSE -- }{ RAISE EXCEPTION 'Invalid TopoGeometries (unknown type %)', topogeom.type; END IF; -- } IF geom IS NULL THEN IF topogeom.type = 3 THEN -- [multi]polygon geom := 'MULTIPOLYGON EMPTY'; ELSIF topogeom.type = 2 THEN -- [multi]line geom := 'MULTILINESTRING EMPTY'; ELSIF topogeom.type = 1 THEN -- [multi]point geom := 'MULTIPOINT EMPTY'; ELSE geom := 'GEOMETRYCOLLECTION EMPTY'; END IF; END IF; RETURN geom; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} Geometry(TopoGeometry) -- 7.3+ explicit cast CREATE CAST (topology.TopoGeometry AS Geometry) WITH FUNCTION topology.Geometry(topology.TopoGeometry) AS IMPLICIT; --{ -- ValidateTopology(toponame) -- -- Return a Set of ValidateTopology_ReturnType containing -- informations on all topology inconsistencies -- CREATE OR REPLACE FUNCTION topology.ValidateTopology(toponame varchar) RETURNS setof topology.ValidateTopology_ReturnType AS $$ DECLARE retrec topology.ValidateTopology_ReturnType; rec RECORD; rec2 RECORD; i integer; invalid_edges integer[]; invalid_faces integer[]; sql text; BEGIN -- Check for coincident nodes FOR rec IN EXECUTE 'SELECT a.node_id as id1, b.node_id as id2 FROM ' || quote_ident(toponame) || '.node a, ' || quote_ident(toponame) || '.node b ' || 'WHERE a.node_id < b.node_id ' || ' AND ST_DWithin(a.geom, b.geom, 0)' -- NOTE: see #1625 and #1789 LOOP retrec.error = 'coincident nodes'; retrec.id1 = rec.id1; retrec.id2 = rec.id2; RETURN NEXT retrec; END LOOP; -- Check for edge crossed nodes -- TODO: do this in the single edge loop FOR rec IN EXECUTE 'SELECT n.node_id as id1, e.edge_id as id2 FROM ' || quote_ident(toponame) || '.node n, ' || quote_ident(toponame) || '.edge e ' || 'WHERE e.start_node != n.node_id ' || 'AND e.end_node != n.node_id ' || 'AND ST_Within(n.geom, e.geom)' LOOP retrec.error = 'edge crosses node'; retrec.id1 = rec.id1; retrec.id2 = rec.id2; RETURN NEXT retrec; END LOOP; -- Scan all edges FOR rec IN EXECUTE 'SELECT e.geom, e.edge_id as id1, e.left_face, e.right_face FROM ' || quote_ident(toponame) || '.edge e ORDER BY edge_id' LOOP -- Any invalid edge becomes a cancer for higher level complexes IF NOT ST_IsValid(rec.geom) THEN retrec.error = 'invalid edge'; retrec.id1 = rec.id1; retrec.id2 = NULL; RETURN NEXT retrec; invalid_edges := array_append(invalid_edges, rec.id1); IF invalid_faces IS NULL OR NOT rec.left_face = ANY ( invalid_faces ) THEN invalid_faces := array_append(invalid_faces, rec.left_face); END IF; IF rec.right_face != rec.left_face AND ( invalid_faces IS NULL OR NOT rec.right_face = ANY ( invalid_faces ) ) THEN invalid_faces := array_append(invalid_faces, rec.right_face); END IF; CONTINUE; END IF; IF NOT ST_IsSimple(rec.geom) THEN retrec.error = 'edge not simple'; retrec.id1 = rec.id1; retrec.id2 = NULL; RETURN NEXT retrec; END IF; END LOOP; -- Check for edge crossing sql := 'SELECT e1.edge_id as id1, e2.edge_id as id2, ' || ' e1.geom as g1, e2.geom as g2, ' || 'ST_Relate(e1.geom, e2.geom) as im FROM ' || quote_ident(toponame) || '.edge e1, ' || quote_ident(toponame) || '.edge e2 ' || 'WHERE e1.edge_id < e2.edge_id ' || ' AND e1.geom && e2.geom '; IF invalid_edges IS NOT NULL THEN sql := sql || ' AND NOT e1.edge_id = ANY (' || quote_literal(invalid_edges) || ')' || ' AND NOT e2.edge_id = ANY (' || quote_literal(invalid_edges) || ')'; END IF; FOR rec IN EXECUTE sql LOOP IF ST_RelateMatch(rec.im, 'FF1F**1*2') THEN CONTINUE; -- no interior intersection END IF; -- -- Closed lines have no boundary, so endpoint -- intersection would be considered interior -- See http://trac.osgeo.org/postgis/ticket/770 -- See also full explanation in topology.AddEdge -- IF ST_RelateMatch(rec.im, 'FF10F01F2') THEN -- first line (g1) is open, second (g2) is closed -- first boundary has puntual intersection with second interior -- -- compute intersection, check it equals second endpoint IF ST_Equals(ST_Intersection(rec.g2, rec.g1), ST_StartPoint(rec.g2)) THEN CONTINUE; END IF; END IF; IF ST_RelateMatch(rec.im, 'F01FFF102') THEN -- second line (g2) is open, first (g1) is closed -- second boundary has puntual intersection with first interior -- -- compute intersection, check it equals first endpoint IF ST_Equals(ST_Intersection(rec.g2, rec.g1), ST_StartPoint(rec.g1)) THEN CONTINUE; END IF; END IF; IF ST_RelateMatch(rec.im, '0F1FFF1F2') THEN -- both lines are closed (boundary intersects nothing) -- they have puntual intersection between interiors -- -- compute intersection, check it's a single point -- and equals first StartPoint _and_ second StartPoint IF ST_Equals(ST_Intersection(rec.g1, rec.g2), ST_StartPoint(rec.g1)) AND ST_Equals(ST_StartPoint(rec.g1), ST_StartPoint(rec.g2)) THEN CONTINUE; END IF; END IF; retrec.error = 'edge crosses edge'; retrec.id1 = rec.id1; retrec.id2 = rec.id2; RETURN NEXT retrec; END LOOP; -- Check for edge start_node geometry mis-match -- TODO: move this in the first edge table scan FOR rec IN EXECUTE 'SELECT e.edge_id as id1, n.node_id as id2 FROM ' || quote_ident(toponame) || '.edge e, ' || quote_ident(toponame) || '.node n ' || 'WHERE e.start_node = n.node_id ' || 'AND NOT ST_Equals(ST_StartPoint(e.geom), n.geom)' LOOP retrec.error = 'edge start node geometry mis-match'; retrec.id1 = rec.id1; retrec.id2 = rec.id2; RETURN NEXT retrec; END LOOP; -- Check for edge end_node geometry mis-match -- TODO: move this in the first edge table scan FOR rec IN EXECUTE 'SELECT e.edge_id as id1, n.node_id as id2 FROM ' || quote_ident(toponame) || '.edge e, ' || quote_ident(toponame) || '.node n ' || 'WHERE e.end_node = n.node_id ' || 'AND NOT ST_Equals(ST_EndPoint(e.geom), n.geom)' LOOP retrec.error = 'edge end node geometry mis-match'; retrec.id1 = rec.id1; retrec.id2 = rec.id2; RETURN NEXT retrec; END LOOP; -- Check for faces w/out edges FOR rec IN EXECUTE 'SELECT face_id as id1 FROM ' || quote_ident(toponame) || '.face ' || 'WHERE face_id > 0 EXCEPT ( SELECT left_face FROM ' || quote_ident(toponame) || '.edge ' || ' UNION SELECT right_face FROM ' || quote_ident(toponame) || '.edge ' || ')' LOOP retrec.error = 'face without edges'; retrec.id1 = rec.id1; retrec.id2 = NULL; RETURN NEXT retrec; END LOOP; -- Now create a temporary table to construct all face geometries -- for checking their consistency sql := 'CREATE TEMP TABLE face_check ON COMMIT DROP AS ' || 'SELECT face_id, topology.ST_GetFaceGeometry(' || quote_literal(toponame) || ', face_id) as geom, mbr FROM ' || quote_ident(toponame) || '.face WHERE face_id > 0'; IF invalid_faces IS NOT NULL THEN sql := sql || ' AND NOT face_id = ANY (' || quote_literal(invalid_faces) || ')'; END IF; EXECUTE sql; -- Build a gist index on geom EXECUTE 'CREATE INDEX "face_check_gist" ON ' || 'face_check USING gist (geom);'; -- Build a btree index on id EXECUTE 'CREATE INDEX "face_check_bt" ON ' || 'face_check (face_id);'; -- Scan the table looking for NULL geometries FOR rec IN EXECUTE 'SELECT f1.face_id FROM ' || 'face_check f1 WHERE f1.geom IS NULL' LOOP -- Face missing ! retrec.error := 'face has no rings'; retrec.id1 := rec.face_id; retrec.id2 := NULL; RETURN NEXT retrec; END LOOP; -- Scan the table looking for overlap or containment -- TODO: also check for MBR consistency FOR rec IN EXECUTE 'SELECT f1.geom, f1.face_id as id1, f2.face_id as id2, ' || ' ST_Relate(f1.geom, f2.geom) as im' || ' FROM ' || 'face_check f1, ' || 'face_check f2 ' || 'WHERE f1.face_id < f2.face_id' || ' AND f1.geom && f2.geom' LOOP -- Face overlap IF ST_RelateMatch(rec.im, 'T*T***T**') THEN retrec.error = 'face overlaps face'; retrec.id1 = rec.id1; retrec.id2 = rec.id2; RETURN NEXT retrec; END IF; -- Face 1 is within face 2 IF ST_RelateMatch(rec.im, 'T*F**F***') THEN retrec.error = 'face within face'; retrec.id1 = rec.id1; retrec.id2 = rec.id2; RETURN NEXT retrec; END IF; -- Face 1 contains face 2 IF ST_RelateMatch(rec.im, 'T*****FF*') THEN retrec.error = 'face within face'; retrec.id1 = rec.id2; retrec.id2 = rec.id1; RETURN NEXT retrec; END IF; END LOOP; #if 0 -- Check SRID consistency FOR rec in EXECUTE 'SELECT count(*) FROM ( getSRID(geom) FROM ' || quote_ident(toponame) || '.edge ' || ' UNION ' 'SELECT getSRID(geom) FROM ' || quote_ident(toponame) || '.node )' LOOP IF rec.count > 1 THEN retrec.error = 'mixed SRIDs'; retrec.id1 = NULL; retrec.id2 = NULL; RETURN NEXT retrec; END IF; END LOOP; #endif DROP TABLE face_check; RETURN; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- } ValidateTopology(toponame) --{ -- CreateTopology(name, SRID, precision, hasZ) -- -- Create a topology schema, add a topology info record -- in the topology.topology relation, return it's numeric -- id. -- CREATE OR REPLACE FUNCTION topology.CreateTopology(atopology varchar, srid integer, prec float8, hasZ boolean) RETURNS integer AS $$ DECLARE rec RECORD; topology_id integer; ndims integer; BEGIN -- FOR rec IN SELECT * FROM pg_namespace WHERE text(nspname) = atopology -- LOOP -- RAISE EXCEPTION 'SQL/MM Spatial exception - schema already exists'; -- END LOOP; ndims = 2; IF hasZ THEN ndims = 3; END IF; ------ Fetch next id for the new topology FOR rec IN SELECT nextval('topology.topology_id_seq') LOOP topology_id = rec.nextval; END LOOP; EXECUTE 'CREATE SCHEMA ' || quote_ident(atopology); -------------{ face CREATION EXECUTE 'CREATE TABLE ' || quote_ident(atopology) || '.face (' || 'face_id SERIAL,' || ' CONSTRAINT face_primary_key PRIMARY KEY(face_id)' || ');'; -- Add mbr column to the face table EXECUTE 'SELECT AddGeometryColumn('||quote_literal(atopology) ||',''face'',''mbr'','||quote_literal(srid) ||',''POLYGON'',2)'; -- 2d only mbr is good enough -------------} END OF face CREATION --------------{ node CREATION EXECUTE 'CREATE TABLE ' || quote_ident(atopology) || '.node (' || 'node_id SERIAL,' --|| 'geom GEOMETRY,' || 'containing_face INTEGER,' || 'CONSTRAINT node_primary_key PRIMARY KEY(node_id),' --|| 'CONSTRAINT node_geometry_type CHECK ' --|| '( GeometryType(geom) = ''POINT'' ),' || 'CONSTRAINT face_exists FOREIGN KEY(containing_face) ' || 'REFERENCES ' || quote_ident(atopology) || '.face(face_id)' || ');'; -- Add geometry column to the node table EXECUTE 'SELECT AddGeometryColumn('||quote_literal(atopology) ||',''node'',''geom'','||quote_literal(srid) ||',''POINT'',' || ndims || ')'; --------------} END OF node CREATION --------------{ edge CREATION -- edge_data table EXECUTE 'CREATE TABLE ' || quote_ident(atopology) || '.edge_data (' || 'edge_id SERIAL NOT NULL PRIMARY KEY,' || 'start_node INTEGER NOT NULL,' || 'end_node INTEGER NOT NULL,' || 'next_left_edge INTEGER NOT NULL,' || 'abs_next_left_edge INTEGER NOT NULL,' || 'next_right_edge INTEGER NOT NULL,' || 'abs_next_right_edge INTEGER NOT NULL,' || 'left_face INTEGER NOT NULL,' || 'right_face INTEGER NOT NULL,' --|| 'geom GEOMETRY NOT NULL,' --|| 'CONSTRAINT edge_geometry_type CHECK ' --|| '( GeometryType(geom) = ''LINESTRING'' ),' || 'CONSTRAINT start_node_exists FOREIGN KEY(start_node)' || ' REFERENCES ' || quote_ident(atopology) || '.node(node_id),' || 'CONSTRAINT end_node_exists FOREIGN KEY(end_node) ' || ' REFERENCES ' || quote_ident(atopology) || '.node(node_id),' || 'CONSTRAINT left_face_exists FOREIGN KEY(left_face) ' || 'REFERENCES ' || quote_ident(atopology) || '.face(face_id),' || 'CONSTRAINT right_face_exists FOREIGN KEY(right_face) ' || 'REFERENCES ' || quote_ident(atopology) || '.face(face_id),' || 'CONSTRAINT next_left_edge_exists FOREIGN KEY(abs_next_left_edge)' || ' REFERENCES ' || quote_ident(atopology) || '.edge_data(edge_id)' || ' DEFERRABLE INITIALLY DEFERRED,' || 'CONSTRAINT next_right_edge_exists ' || 'FOREIGN KEY(abs_next_right_edge)' || ' REFERENCES ' || quote_ident(atopology) || '.edge_data(edge_id) ' || ' DEFERRABLE INITIALLY DEFERRED' || ');'; -- Add geometry column to the edge_data table EXECUTE 'SELECT AddGeometryColumn('||quote_literal(atopology) ||',''edge_data'',''geom'','||quote_literal(srid) ||',''LINESTRING'',' || ndims || ')'; -- edge standard view (select rule) EXECUTE 'CREATE VIEW ' || quote_ident(atopology) || '.edge AS SELECT ' || ' edge_id, start_node, end_node, next_left_edge, ' || ' next_right_edge, ' || ' left_face, right_face, geom FROM ' || quote_ident(atopology) || '.edge_data'; -- edge standard view description EXECUTE 'COMMENT ON VIEW ' || quote_ident(atopology) || '.edge IS ' || '''Contains edge topology primitives'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.edge_id IS ' || '''Unique identifier of the edge'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.start_node IS ' || '''Unique identifier of the node at the start of the edge'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.end_node IS ' || '''Unique identifier of the node at the end of the edge'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.next_left_edge IS ' || '''Unique identifier of the next edge of the face on the left (when looking in the direction from START_NODE to END_NODE), moving counterclockwise around the face boundary'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.next_right_edge IS ' || '''Unique identifier of the next edge of the face on the right (when looking in the direction from START_NODE to END_NODE), moving counterclockwise around the face boundary'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.left_face IS ' || '''Unique identifier of the face on the left side of the edge when looking in the direction from START_NODE to END_NODE'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.right_face IS ' || '''Unique identifier of the face on the right side of the edge when looking in the direction from START_NODE to END_NODE'''; EXECUTE 'COMMENT ON COLUMN ' || quote_ident(atopology) || '.edge.geom IS ' || '''The geometry of the edge'''; -- edge standard view (insert rule) EXECUTE 'CREATE RULE edge_insert_rule AS ON INSERT ' || 'TO ' || quote_ident(atopology) || '.edge DO INSTEAD ' || ' INSERT into ' || quote_ident(atopology) || '.edge_data ' || ' VALUES (NEW.edge_id, NEW.start_node, NEW.end_node, ' || ' NEW.next_left_edge, abs(NEW.next_left_edge), ' || ' NEW.next_right_edge, abs(NEW.next_right_edge), ' || ' NEW.left_face, NEW.right_face, NEW.geom);'; --------------} END OF edge CREATION --------------{ layer sequence EXECUTE 'CREATE SEQUENCE ' || quote_ident(atopology) || '.layer_id_seq;'; --------------} layer sequence --------------{ relation CREATION -- EXECUTE 'CREATE TABLE ' || quote_ident(atopology) || '.relation (' || ' topogeo_id integer NOT NULL, ' || ' layer_id integer NOT NULL, ' || ' element_id integer NOT NULL, ' || ' element_type integer NOT NULL, ' || ' UNIQUE(layer_id,topogeo_id,element_id,element_type));'; EXECUTE 'CREATE TRIGGER relation_integrity_checks ' ||'BEFORE UPDATE OR INSERT ON ' || quote_ident(atopology) || '.relation FOR EACH ROW ' || ' EXECUTE PROCEDURE topology.RelationTrigger(' ||topology_id||','||quote_literal(atopology)||')'; --------------} END OF relation CREATION ------- Default (world) face EXECUTE 'INSERT INTO ' || quote_ident(atopology) || '.face(face_id) VALUES(0);'; ------- GiST index on face EXECUTE 'CREATE INDEX face_gist ON ' || quote_ident(atopology) || '.face using gist (mbr);'; ------- GiST index on node EXECUTE 'CREATE INDEX node_gist ON ' || quote_ident(atopology) || '.node using gist (geom);'; ------- GiST index on edge EXECUTE 'CREATE INDEX edge_gist ON ' || quote_ident(atopology) || '.edge_data using gist (geom);'; ------- Indexes on left_face and right_face of edge_data ------- NOTE: these indexes speed up GetFaceGeometry (and thus ------- TopoGeometry::Geometry) by a factor of 10 ! ------- See http://trac.osgeo.org/postgis/ticket/806 EXECUTE 'CREATE INDEX edge_left_face_idx ON ' || quote_ident(atopology) || '.edge_data (left_face);'; EXECUTE 'CREATE INDEX edge_right_face_idx ON ' || quote_ident(atopology) || '.edge_data (right_face);'; ------- Indexes on start_node and end_node of edge_data ------- NOTE: this indexes speed up node deletion ------- by a factor of 1000 ! ------- See http://trac.osgeo.org/postgis/ticket/2082 EXECUTE 'CREATE INDEX edge_start_node_idx ON ' || quote_ident(atopology) || '.edge_data (start_node);'; EXECUTE 'CREATE INDEX edge_end_node_idx ON ' || quote_ident(atopology) || '.edge_data (end_node);'; -- TODO: consider also adding an index on node.containing_face ------- Add record to the "topology" metadata table EXECUTE 'INSERT INTO topology.topology ' || '(id, name, srid, precision, hasZ) VALUES (' || quote_literal(topology_id) || ',' || quote_literal(atopology) || ',' || quote_literal(srid) || ',' || quote_literal(prec) || ',' || hasZ || ')'; RETURN topology_id; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} CreateTopology --{ CreateTopology wrappers for unspecified srid or precision or hasZ -- CreateTopology(name, SRID, precision) -- hasZ = false CREATE OR REPLACE FUNCTION topology.CreateTopology(toponame varchar, srid integer, prec float8) RETURNS integer AS ' SELECT topology.CreateTopology($1, $2, $3, false);' LANGUAGE 'sql' VOLATILE STRICT; -- CreateTopology(name, SRID) -- precision = 0 CREATE OR REPLACE FUNCTION topology.CreateTopology(varchar, integer) RETURNS integer AS ' SELECT topology.CreateTopology($1, $2, 0); ' LANGUAGE 'sql' VOLATILE STRICT; -- CreateTopology(name) -- srid = unknown, precision = 0 CREATE OR REPLACE FUNCTION topology.CreateTopology(varchar) RETURNS integer AS $$ SELECT topology.CreateTopology($1, ST_SRID('POINT EMPTY'::geometry), 0); $$ LANGUAGE 'sql' VOLATILE STRICT; --} CreateTopology --{ -- DropTopology(name) -- -- Drops a topology schema getting rid of every dependent object. -- CREATE OR REPLACE FUNCTION topology.DropTopology(atopology varchar) RETURNS text AS $$ DECLARE topoid integer; rec RECORD; BEGIN -- Get topology id SELECT id FROM topology.topology into topoid WHERE name = atopology; IF topoid IS NOT NULL THEN RAISE NOTICE 'Dropping all layers from topology % (%)', atopology, topoid; -- Drop all layers in the topology FOR rec IN EXECUTE 'SELECT * FROM topology.layer WHERE ' || ' topology_id = ' || topoid LOOP EXECUTE 'SELECT topology.DropTopoGeometryColumn(' || quote_literal(rec.schema_name) || ',' || quote_literal(rec.table_name) || ',' || quote_literal(rec.feature_column) || ')'; END LOOP; -- Delete record from topology.topology EXECUTE 'DELETE FROM topology.topology WHERE id = ' || topoid; END IF; -- Drop the schema (if it exists) FOR rec IN SELECT * FROM pg_namespace WHERE text(nspname) = atopology LOOP EXECUTE 'DROP SCHEMA '||quote_ident(atopology)||' CASCADE'; END LOOP; RETURN 'Topology ' || quote_literal(atopology) || ' dropped'; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} DropTopology #include "sql/manage/TopologySummary.sql.in" #include "sql/manage/CopyTopology.sql.in" -- Spatial predicates #include "sql/predicates.sql.in" -- Querying #include "sql/query/getnodebypoint.sql.in" #include "sql/query/getedgebypoint.sql.in" #include "sql/query/getfacebypoint.sql.in" -- Populating #include "sql/populate.sql.in" #include "sql/polygonize.sql.in" -- TopoElement #include "sql/topoelement/topoelement_agg.sql.in" -- TopoGeometry #include "sql/topogeometry/type.sql.in" #include "sql/topogeometry/cleartopogeom.sql.in" #include "sql/topogeometry/simplify.sql.in" #include "sql/topogeometry/totopogeom.sql.in" -- Exports #include "sql/export/gml.sql.in" #include "sql/export/TopoJSON.sql.in" --=} POSTGIS-SPECIFIC block -- SQL/MM block #include "sql/sqlmm.sql.in" -- The following files needs getfaceedges_returntype, defined in sqlmm.sql #include "sql/query/GetRingEdges.sql.in" #include "sql/query/GetNodeEdges.sql.in" --general management -- #include "sql/manage/ManageHelper.sql.in" CREATE OR REPLACE FUNCTION topology.postgis_topology_scripts_installed() RETURNS text AS _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION LANGUAGE 'sql' IMMUTABLE; -- Make sure topology is in database search path -- SELECT topology.AddToSearchPath('topology'); COMMIT; ����������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/README�������������������������������������������������������������0000644�0000000�0000000�00000016610�11727610314�016322� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=Introduction This module contains support for topological geometry modelling. Functions exist to satisfy the ISO/SQLMM topology-geometry model and more are provided to add an additional abstraction level for topological features and layers, both simple and hierarchical. You can see an ER diagram of the full conceptual model in the ER dir. You need xfig (http://epb.lbl.gov/xfig/). All routines, types and other management objects are stored in the "topology" SCHEMA. Comments welcome --strk(2012-03-13); =Requirements Many ISO/SQLMM functions use GEOS-3.3.0+ signatures. The script is still buildable with previous GEOS versions but you'll need 3.3.0+ at runtime for most uses. =Building To build the topology support: $ make =Testing To run regression tests: $ make check =Install, upgrade, uninstall To enable topology support: $ psql -f topology.sql <your_postgis_enabled_db> It will create a 'topology' schema in <your_postgis_enabled_db> hosting all the topology functions. To be run with db-owner perms. Remember to grant execute to users. To uninstall: $ psql -c 'drop schema topology cascade' To upgrade between minor releases: $ psql -f topology_upgrade_<version>_minor.sql <your_postgis_enabled_db> Major releases upgrades should follow the "HARD UPGRADE" procedure described in main postgis manual. =Usage Topology data are stored in named SCHEMAs, where the topology name is the name of the SCHEMA containing its data. A catalogue of avalable topologies is kept under the "topology"."topology" table. ==Creating a topology To create a topology: SELECT topology.CreateTopology(<name>, [srid], [tolerance]); Example: SELECT topology.CreateTopology('test_schema', 4326 , 0.0001); or -- unknown srid, 0 tolerance SELECT topology.CreateTopology('test_schema'); NOTE: the new schema ('test_schema' in example) will be create so it must not exist before. ==Destroying a topology To destroy a topology: SELECT topology.DropTopology(<name>); ==Loading topology data To load topology data in a topology you can use INSERT statements filling up the Edge, Node and Face relations under you topology schema: * Edge * edge_id integer PRIMARY KEY * start_node integer REFERENCES Node.node_id) * end_node integer REFERENCES Node.node_id) * next_left_edge integer REFERENCES abs(Edge.edge_id) * next_right_edge integer REFERENCES abs(Edge.edge_id) * left_face integer REFERENCES Face.face_id * right_face integer REFERENCES Face.face_id * geom geometry ( a linestring ) * Node * node_id integer PRIMARY KEY * containing_face integer REFERENCES Face.face_id * geom geometry ( a point ) * Face * face_id integer PRIMARY KEY * mbr box2d ( can be NULL ) The next_*_edge of an edge is the edge you encounter next while going around the specified face (right or left) in counterclockwise order (so that the face is on your left). Note that due to this definition the edge being considered is traversed in reverse order when traversing its "right" face. The values are signed to indicate wheter the next edge will be traversed in its original or reversed orientation. More details on semantic are contained in the SQL/MM specification, which this implementation follows as for these views structure. ==Validating topology data To verify validity of a topology: SELECT * FROM topology.ValidateTopology(name); ==Defining TopoGeometry objects Currently, TopoGeometry objects can only be defined by specifying their component topology elements. We do support both basic TopoGeometry and hierarchical TopoGeometry. Basic TopoGeometry objects are those composed by base topolocal elements (faces, edges, nodes). Hierarchical TopoGeometry objects are composed by other TopoGeometry objects. Each TopoGeometry object belongs to a specific Layer of a specific Topology. Before creating a TopoGeometry object you need to create its Layer in the Topology. A Topology Layer is an association of a feature-table with the topology. It also contain type and hierarchy information. We create a layer using the AddTopoGeometryColumn() function: topology.AddTopoGeometryColumn(topology_name, schema_name, table_name, column_name, feature_type, [child_layer]) The function will both add the requested column to the table and add a record to the topology.layer table with all the given info. If you don't specify [child_layer] (or set it to NULL) this layer would contain Basic TopoGeometries (composed by primitive topology elements). Otherwise this layer will contain hierarchical TopoGeometries (composed by TopoGeometries from the child_layer). Once the layer is created (it's id is returned by the AddTopoGeometryColumn function) you're ready to construct TopoGeometry objects in it: topology.CreateTopoGeom( topology_name, feature_type, -- 1:[multi]point, 2:[multi]line, -- 3:[multi]poly, 4:collection layer_id, -- as returned by AddTopoGeometryColumn TopoElementArray); The TopoElementArray type is a bidimensional array of integers. Value semantics depend on the type of the layer associated with the TopoGeometry object. For Basic TopoGeometry objects this would be: {{element_type, element_id}, ...} For Hierarchical TopoGeometry objects this would be: {{child_layer_id, topogeoemtry_id}, ...} ==Converting Geometry to TopoGeometry while populating the topology You can import a Geometry into an existing topology and at the same time get its topological definition (its TopoGeometry equivalent) using the toTopoGeom function: topology.toTopoGeom( geometry, -- the simple geometry topology_name, layer_id -- as returned by AddTopoGeometryColumn ); ==Getting simple Geometry values from TopoGeometry objects TopoGeometry to Geometry casting is implicit, so any function accepting a Geometry would transparently also accept a TopoGeometry. Some functions may be optimized for TopoGeometry. =Issues ==Topology tolerance GEOS (and JTS) often fail due to input precision. The CreateTopogeo() function currently accept a precision specification, we might use this to enforce a precision to the topology element geometries, by mean of SnapToGrid calls, or alternatively, force use of a specific PrecisionModel when using GEOS function. The former seems cleaner, but would require a trigger to run on all inserts, even when the geometry being input has already been snapped by caller. ==ST_GetFaceGeometry() implementation The ST_GetFaceGeometry() function is currently implemented as a call to polygonize() receiving all edges with the given Face on the left or right side. This reduces the number of SQL queries to 1, but makes it hard to detect any inconsistency in the underlying topology. Also, the polygonize() function does not use *any* of the metadata informations in the Edge table, so replacing it with a more topology-aware function could speed it up. ==ValidateTopology() performance The ValidateTopology() function, as for SQL/MM specification uses ST_GetFaceGeometry() to check for Within() and Overlap() conditions. This is an expensive task, and might be replaced by topology-aware replacement of the two predicates. The Face geometries might also be cached, but that might still be slower then overloading the predicates. ==Topology table constraints In addition to the constraints defined in SQL/MM specification, this implementation adds constraints to enforce Node and Edge geometry types to be 'POINT' and 'LINESTRING' respectively. ������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/Makefile.in��������������������������������������������������������0000644�0000000�0000000�00000006756�12133266206�017520� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * $Id$ # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * # * Copyright (C) 2010-2011 Sandro Santilli <strk@keybit.net> # * Copyright (C) 2008 Mark Cave-Ayland # * Copyright (C) 2005 Refractions Research Inc. # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** # # PostGIS PGXS build system # POSTGIS_PGSQL_VERSION=@POSTGIS_PGSQL_VERSION@ # NOTE: we can't use MODULE_big or PGXS insists in building a library... PGIS_MODULE_big=postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ MODULEDIR=contrib/$(PGIS_MODULE_big) PGIS_MAJ_MIN=@POSTGIS_MAJOR_VERSION@@POSTGIS_MINOR_VERSION@ # Files to be copied to the contrib/ directory DATA_built=topology.sql topology_upgrade_$(PGIS_MAJ_MIN)_minor.sql uninstall_topology.sql # SQL preprocessor SQLPP = @SQLPP@ # SQL objects (files requiring pre-processing) SQL_OBJS = \ topology.sql \ topology_upgrade.sql \ topology_drop_before.sql \ topology_drop_after.sql # Extra files to remove during 'make clean' EXTRA_CLEAN=$(SQL_OBJS) # PGXS information PG_CONFIG = @PG_CONFIG@ PGXS := @PGXS@ include $(PGXS) # Set PERL _after_ the include of PGXS PERL=@PERL@ # PGXS override feature. The ability to allow PostGIS to install itself # in a versioned directory is only available in PostgreSQL >= 8.5. To # do this by default on older PostgreSQL versions, we need to override # the existing PGXS targets. # # Once PostgreSQL 8.5 becomes the minimum supported version, this entire # section and its associated Makefile.pgxs should be removed. PGXSOVERRIDE = @PGXSOVERRIDE@ ifeq ($(PGXSOVERRIDE),1) include ../postgis/Makefile.pgxs endif # If REGRESS=1 passed as a parameter, change the default install paths # so that no prefix is included. This allows us to relocate to a temporary # directory for regression testing. ifeq ($(REGRESS),1) bindir=/bin pkglibdir=/lib datadir=/share datamoduledir=contrib/postgis endif # Generate any .sql file from .sql.in.c files by running them through the SQL pre-processor %.sql: %.sql.in $(SQLPP) $< | grep -v '^#' > $@ #Generate upgrade script by stripping things that can't be reinstalled #e.g. don't bother with tables, types, triggers, and domains topology_upgrade.sql: topology.sql $(PERL) -0777 -ne 's/^(CREATE|ALTER) (CAST|OPERATOR|TYPE|TABLE|SCHEMA|DOMAIN|TRIGGER).*?;//msg;print;' $< > $@ topology_upgrade_$(PGIS_MAJ_MIN)_minor.sql: topology_drop_before.sql topology_upgrade.sql topology_drop_after.sql cat $^ > $@ topology.sql: sql/sqlmm.sql.in sql/populate.sql.in sql/polygonize.sql.in sql/export/gml.sql.in sql/export/TopoJSON.sql.in sql/query/getnodebypoint.sql.in sql/query/getedgebypoint.sql.in sql/query/getfacebypoint.sql.in sql/query/GetRingEdges.sql.in sql/query/GetNodeEdges.sql.in sql/manage/TopologySummary.sql.in sql/manage/CopyTopology.sql.in sql/manage/ManageHelper.sql.in sql/topoelement/topoelement_agg.sql.in sql/topogeometry/type.sql.in sql/topogeometry/totopogeom.sql.in sql/topogeometry/cleartopogeom.sql.in sql/topogeometry/simplify.sql.in sql/predicates.sql.in ../postgis/sqldefines.h ../postgis_svn_revision.h uninstall_topology.sql: topology.sql ../utils/create_undef.pl $(PERL) ../utils/create_undef.pl $< $(POSTGIS_PGSQL_VERSION) > $@ check: topology.sql $(MAKE) -C test $@ distclean: clean rm -f Makefile ������������������postgis-2.1.2+dfsg.orig/topology/TODO���������������������������������������������������������������0000644�0000000�0000000�00000000415�11722777314�016137� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # - todo # + being working on # * done # # # 2.1.13.3 - Named Spatial Relationship predicates based on the DE-9IM + intersects -- support Hierarchical geometries * equals - disjoint - touches - crosses - within - overlaps - contains - relate # Geomery editing ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/topology/topology_drop_before.sql.in����������������������������������������0000644�0000000�0000000�00000001567�12225175606�023023� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id: topology_drop_before.sql.in 12013 2013-10-09 06:45:26Z strk $ -- PostGIS - Spatial Types for PostgreSQL -- http://www.postgis.org -- -- Copyright (C) 2012 Regina Obe <lr@pcorp.us> -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- These are functions where the argument names may have changed -- -- so have to be dropped before upgrade can happen for 9.0+ -- -- argument names changed -- -- we might want to take toTopoGeom one out before release since -- I don't think too many people installed the bad name DROP FUNCTION IF EXISTS topology.toTopoGeom(Geometry, varchar, int, float8); -- used to be in public, will now be moved to topology DROP FUNCTION IF EXISTS postgis_topology_scripts_installed(); �����������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/���������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015047� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/ltversion.m4���������������������������������������������������������0000644�0000000�0000000�00000001262�12315456230�017335� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/lt~obsolete.m4�������������������������������������������������������0000644�0000000�0000000�00000013756�12315456230�017675� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ������������������postgis-2.1.2+dfsg.orig/macros/gtk-2.0.m4�����������������������������������������������������������0000644�0000000�0000000�00000020052�11722777314�016402� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure paths for GTK+ # Owen Taylor 1997-2001 dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, dnl pass to pkg-config dnl AC_DEFUN([AM_PATH_GTK_2_0], [dnl dnl Get the cflags and libraries from pkg-config dnl AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program], , enable_gtktest=yes) pkg_config_args=gtk+-2.0 for module in . $4 do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo "*** pkg-config too old; version 0.7 or better required." no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=ifelse([$1], ,2.0.0,$1) AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK+ is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.gtktest AC_TRY_RUN([ #include <gtk/gtk.h> #include <stdio.h> #include <stdlib.h> int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include <gtk/gtk.h> #include <stdio.h> ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) dnl dnl test for OS/X GTK installation dnl _gdk_tgt=`$PKG_CONFIG --variable=target gdk-2.0` if test "x$_gdk_tgt" = xquartz; then AC_MSG_CHECKING([for ige-mac-integration]) if $PKG_CONFIG --exists "ige-mac-integration" ; then AC_MSG_RESULT([yes]) AC_MSG_CHECKING([for IGE_MAC_CFLAGS]) IGE_MAC_CFLAGS=`$PKG_CONFIG --cflags "ige-mac-integration"` AC_MSG_RESULT($IGE_MAC_CFLAGS) AC_MSG_CHECKING([for IGE_MAC_LIBS]) IGE_MAC_LIBS=`$PKG_CONFIG --libs "ige-mac-integration"` AC_MSG_RESULT($IGE_MAC_LIBS) else IGE_MAC_CFLAGS="" IGE_MAC_LIBS="" AC_MSG_RESULT([no]) fi fi AC_SUBST(IGE_MAC_CFLAGS) AC_SUBST(IGE_MAC_LIBS) rm -f conf.gtktest ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/nls.m4���������������������������������������������������������������0000644�0000000�0000000�00000002266�11722777314�016123� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nls.m4 serial 3 (gettext-0.15) dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ(2.50) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/codeset.m4�����������������������������������������������������������0000644�0000000�0000000�00000001366�11722777314�016755� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# codeset.m4 serial 2 (gettext-0.16) dnl Copyright (C) 2000-2002, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include <langinfo.h>], [char* cs = nl_langinfo(CODESET); return !cs;], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/gettext.m4�����������������������������������������������������������0000644�0000000�0000000�00000034737�11722777314�017023� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 60 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006. dnl Modified 20120114 to not insist on _nl_expand_alias, so that it dnl will find and accept gettext 0.14, because postgis does not dnl actually require any 0.17 features. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_TRY_LINK([#include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) ���������������������������������postgis-2.1.2+dfsg.orig/macros/intltool.m4����������������������������������������������������������0000644�0000000�0000000�00000024215�11722777314�017171� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## intltool.m4 - Configure intltool for the target system. -*-Shell-script-*- ## Copyright (C) 2001 Eazel, Inc. ## Author: Maciej Stachowiak <mjs@noisehavoc.org> ## Kenneth Christiansen <kenneth@gnu.org> ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 40 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` ] AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be exetuted at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/intldir.m4�����������������������������������������������������������0000644�0000000�0000000�00000001616�11722777314�016772� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intldir.m4 serial 1 (gettext-0.16) dnl Copyright (C) 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. AC_PREREQ(2.52) dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory. AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], []) ������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/libtool.m4�����������������������������������������������������������0000644�0000000�0000000�00001057216�12315456230�016767� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$lt_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) _LT_PATH_LD_GNU AC_SUBST([LD]) _LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) ])# LT_PATH_LD # Old names: AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_LD], []) dnl AC_DEFUN([AC_PROG_LD], []) # _LT_PATH_LD_GNU #- -------------- m4_defun([_LT_PATH_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$lt_cv_prog_gnu_ld ])# _LT_PATH_LD_GNU # _LT_CMD_RELOAD # -------------- # find reload flag for linker # -- PORTME Some linkers may need a different reload flag. m4_defun([_LT_CMD_RELOAD], [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, [lt_cv_ld_reload_flag='-r']) reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac _LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl _LT_TAGDECL([], [reload_cmds], [2])dnl ])# _LT_CMD_RELOAD # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/ac_proj4_version.m4��������������������������������������������������0000644�0000000�0000000�00000002075�11722777314�020573� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl ********************************************************************** dnl * $Id: ac_proj4_version.m4 2797 2008-05-31 09:56:44Z mcayland $ dnl * dnl * PostGIS - Spatial Types for PostgreSQL dnl * http://postgis.refractions.net dnl * Copyright 2008 Mark Cave-Ayland dnl * dnl * This is free software; you can redistribute and/or modify it under dnl * the terms of the GNU General Public Licence. See the COPYING file. dnl * dnl ********************************************************************** dnl dnl Return the PROJ.4 version number dnl AC_DEFUN([AC_PROJ_VERSION], [ AC_RUN_IFELSE( [AC_LANG_PROGRAM([ #ifdef HAVE_STDINT_H #include <stdio.h> #endif #include "proj_api.h" ], [ FILE *fp; fp = fopen("conftest.out", "w"); fprintf(fp, "%d\n", PJ_VERSION); fclose(fp)]) ], [ dnl The program ran successfully, so return the version number in the form MAJORMINOR $1=`cat conftest.out | sed 's/\([[0-9]]\)\([[0-9]]\)\([[0-9]]\)/\1\2/'` ], [ dnl The program failed so return an empty variable $1="" ] ) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/iconv.m4�������������������������������������������������������������0000644�0000000�0000000�00000013753�11722777314�016450� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial AM6 (gettext-0.17) dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include <stdlib.h> #include <iconv.h>], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include <stdlib.h> #include <iconv.h>], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [ dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include <iconv.h> #include <string.h> int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) ���������������������postgis-2.1.2+dfsg.orig/macros/lib-ld.m4������������������������������������������������������������0000644�0000000�0000000�00000006531�11722777314�016471� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 3 (gettext-0.13) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/progtest.m4����������������������������������������������������������0000644�0000000�0000000�00000005550�11722777314�017175� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1996. AC_PREREQ(2.50) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/ltsugar.m4�����������������������������������������������������������0000644�0000000�0000000�00000010424�12315456230�016771� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/intl.m4��������������������������������������������������������������0000644�0000000�0000000�00000025250�11722777314�016273� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intl.m4 serial 8 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006. AC_PREREQ(2.52) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([gt_GLIBC2])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([gl_VISIBILITY])dnl AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl AC_REQUIRE([gt_TYPE_WCHAR_T])dnl AC_REQUIRE([gt_TYPE_WINT_T])dnl AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gt_TYPE_INTMAX_T]) AC_REQUIRE([gt_PRINTF_POSIX]) AC_REQUIRE([gl_GLIBC21])dnl AC_REQUIRE([gl_XSIZE])dnl AC_REQUIRE([gt_INTL_MACOSX])dnl AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_CHECK_HEADERS([stddef.h stdlib.h string.h]) AC_CHECK_FUNCS([asprintf fwprintf putenv setenv setlocale snprintf wcslen]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). gt_CHECK_DECL(_snprintf, [#include <stdio.h>]) gt_CHECK_DECL(_snwprintf, [#include <stdio.h>]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>]) case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac AC_SUBST([HAVE_POSIX_PRINTF]) if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi AC_SUBST([HAVE_ASPRINTF]) if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi AC_SUBST([HAVE_SNPRINTF]) if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi AC_SUBST([HAVE_WPRINTF]) AM_LANGINFO_CODESET gt_LC_MESSAGES dnl Compilation on mingw and Cygwin needs special Makefile rules, because dnl 1. when we install a shared library, we must arrange to export dnl auxiliary pointer variables for every exported variable, dnl 2. when we install a shared library and a static library simultaneously, dnl the include file specifies __declspec(dllimport) and therefore we dnl must arrange to define the auxiliary pointer variables for the dnl exported variables _also_ in the static library. if test "$enable_shared" = yes; then case "$host_os" in mingw* | cygwin*) is_woe32dll=yes ;; *) is_woe32dll=no ;; esac else is_woe32dll=no fi WOE32DLL=$is_woe32dll AC_SUBST([WOE32DLL]) dnl On mingw and Cygwin, we can activate special Makefile rules which add dnl version information to the shared libraries and executables. case "$host_os" in mingw* | cygwin*) is_woe32=yes ;; *) is_woe32=no ;; esac WOE32=$is_woe32 AC_SUBST([WOE32]) if test $WOE32 = yes; then dnl Check for a program that compiles Windows resource files. AC_CHECK_TOOL([WINDRES], [windres]) fi dnl Determine whether when creating a library, "-lc" should be passed to dnl libtool or not. On many platforms, it is required for the libtool option dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool dnl in the *.la files - makes it impossible to create multithreaded programs, dnl because libtool also reorders the -lc to come before the -pthread, and dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>. case "$host_os" in hpux*) LTLIBC="" ;; *) LTLIBC="-lc" ;; esac AC_SUBST([LTLIBC]) dnl Rename some macros and functions used for locking. AH_BOTTOM([ #define __libc_lock_t gl_lock_t #define __libc_lock_define gl_lock_define #define __libc_lock_define_initialized gl_lock_define_initialized #define __libc_lock_init gl_lock_init #define __libc_lock_lock gl_lock_lock #define __libc_lock_unlock gl_lock_unlock #define __libc_lock_recursive_t gl_recursive_lock_t #define __libc_lock_define_recursive gl_recursive_lock_define #define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized #define __libc_lock_init_recursive gl_recursive_lock_init #define __libc_lock_lock_recursive gl_recursive_lock_lock #define __libc_lock_unlock_recursive gl_recursive_lock_unlock #define glthread_in_use libintl_thread_in_use #define glthread_lock_init libintl_lock_init #define glthread_lock_lock libintl_lock_lock #define glthread_lock_unlock libintl_lock_unlock #define glthread_lock_destroy libintl_lock_destroy #define glthread_rwlock_init libintl_rwlock_init #define glthread_rwlock_rdlock libintl_rwlock_rdlock #define glthread_rwlock_wrlock libintl_rwlock_wrlock #define glthread_rwlock_unlock libintl_rwlock_unlock #define glthread_rwlock_destroy libintl_rwlock_destroy #define glthread_recursive_lock_init libintl_recursive_lock_init #define glthread_recursive_lock_lock libintl_recursive_lock_lock #define glthread_recursive_lock_unlock libintl_recursive_lock_unlock #define glthread_recursive_lock_destroy libintl_recursive_lock_destroy #define glthread_once libintl_once #define glthread_once_call libintl_once_call #define glthread_once_singlethreaded libintl_once_singlethreaded ]) ]) dnl Checks for the core files of the intl subdirectory: dnl dcigettext.c dnl eval-plural.h dnl explodename.c dnl finddomain.c dnl gettextP.h dnl gmo.h dnl hash-string.h hash-string.c dnl l10nflist.c dnl libgnuintl.h.in (except the *printf stuff) dnl loadinfo.h dnl loadmsgcat.c dnl localealias.c dnl log.c dnl plural-exp.h plural-exp.c dnl plural.y dnl Used by libglocale. AC_DEFUN([gt_INTL_SUBDIR_CORE], [ AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_REQUIRE([gl_LOCK])dnl AC_TRY_LINK( [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }], [], [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1, [Define to 1 if the compiler understands __builtin_expect.])]) AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h]) AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \ argz_next __fsetlocking]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>]) gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>]) AM_ICONV dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined, dnl and a _NL_LOCALE_NAME macro always. AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name, [AC_TRY_LINK([#include <langinfo.h> #include <locale.h>], [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES)); return !cs; ], gt_cv_nl_locale_name=yes, gt_cv_nl_locale_name=no) ]) if test $gt_cv_nl_locale_name = yes; then AC_DEFINE(HAVE_NL_LOCALE_NAME, 1, [Define if you have <langinfo.h> and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.]) fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl gt_CHECK_DECL(FUNC, INCLUDES) dnl Check whether a function is declared. AC_DEFUN([gt_CHECK_DECL], [ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, [AC_TRY_COMPILE([$2], [ #ifndef $1 char *p = (char *) $1; #endif ], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) if test $ac_cv_have_decl_$1 = yes; then gt_value=1 else gt_value=0 fi AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/ltoptions.m4���������������������������������������������������������0000644�0000000�0000000�00000030073�12315456230�017345� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/lib-prefix.m4��������������������������������������������������������0000644�0000000�0000000�00000015036�11722777314�017367� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 5 (gettext-0.15) dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing dnl the basename of the libdir, either "lib" or "lib64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. The current dnl practice is that on a system supporting 32-bit and 64-bit instruction dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit dnl libraries go under $prefix/lib. We determine the compiler's default dnl mode by looking at the compiler's library search path. If at least dnl of its elements ends in /lib64 or points to a directory whose absolute dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the dnl default, namely "lib". acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/lib-link.m4����������������������������������������������������������0000644�0000000�0000000�00000072055�11722777314�017033� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 13 (gettext-0.17) dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ(2.54) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Autoconf >= 2.61 supports dots in --with options. define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix], [ --with-lib]N_A_M_E[-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib]N_A_M_E[-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIB[]NAME[]_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/intlmacosx.m4��������������������������������������������������������0000644�0000000�0000000�00000004565�11722777314�017514� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 1 (gettext-0.17) dnl Copyright (C) 2004-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], gt_cv_func_CFPreferencesCopyAppValue, [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>], [CFPreferencesCopyAppValue(NULL, NULL)], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) �������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/macros/po.m4����������������������������������������������������������������0000644�0000000�0000000�00000044606�11722777314�015751� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 15 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ(2.50) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat <<EOT $* EOT } gt_echo='echo_func' fi fi # A sed script that extracts the value of VARIABLE from a Makefile. sed_x_variable=' # Test if the hold space is empty. x s/P/P/ x ta # Yes it was empty. Look if we have the expected variable definition. /^[ ]*VARIABLE[ ]*=/{ # Seen the first line of the variable definition. s/^[ ]*VARIABLE[ ]*=// ba } bd :a # Here we are processing a line from the variable definition. # Remove comment, more precisely replace it with a space. s/#.*$/ / # See if the line ends in a backslash. tb :b s/\\$// # Print the line, without the trailing backslash. p tc # There was no trailing backslash. The end of the variable definition is # reached. Clear the hold space. s/^.*$// x bd :c # A trailing backslash means that the variable definition continues in the # next line. Put a nonempty string into the hold space to indicate this. s/^.*$/P/ x :d ' changequote([,])dnl # Set POTFILES to the value of the Makefile variable POTFILES. sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` # Compute POTFILES_DEPS as # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) POTFILES_DEPS= for file in $POTFILES; do POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" done POMAKEFILEDEPS="" if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` fi # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) # Compute PROPERTIESFILES # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) # Compute QMFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) # Compute MSGFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) # Compute RESOURCESDLLFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= PROPERTIESFILES= CLASSFILES= QMFILES= MSGFILES= RESOURCESDLLFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" QMFILES="$QMFILES $srcdirpre$lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= JAVACATALOGS= QTCATALOGS= TCLCATALOGS= CSHARPCATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" QTCATALOGS="$QTCATALOGS $lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" done fi sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang.msg: $lang.po @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang/\$(DOMAIN).resources.dll: $lang.po @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if test -n "$POMAKEFILEDEPS"; then cat >> "$ac_file.tmp" <<EOF Makefile: $POMAKEFILEDEPS EOF fi mv "$ac_file.tmp" "$ac_file" ]) dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. AC_DEFUN([AM_XGETTEXT_OPTION_INIT], [ XGETTEXT_EXTRA_OPTIONS= ]) dnl Registers an option to be passed to xgettext in the po subdirectory. AC_DEFUN([AM_XGETTEXT_OPTION], [ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" ]) ��������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/config.sub������������������������������������������������������������������0000755�0000000�0000000�00000105052�12315456230�015547� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011 Free Software Foundation, Inc. timestamp='2011-10-08' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to <config-patches@gnu.org>. Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/��������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015235� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sharedpaths.sql�����������������������������������������������������0000644�0000000�0000000�00000004157�11722777314�020303� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- SRIDs are checked! select 't1', st_asewkt(st_sharedpaths( 'SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;LINESTRING(0 0, 100 0)' )); -- SRIDs are retained select 't2', st_asewkt(st_sharedpaths( 'SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(0 0, 10 0)' )); -- Opposite direction select 't3', st_asewkt(st_sharedpaths( 'LINESTRING(0 0, 10 0)', 'LINESTRING(10 0, 0 0)' )); -- Disjoint select 't4', st_asewkt(st_sharedpaths( 'LINESTRING(0 0, 10 0)', 'LINESTRING(20 0, 30 0)' )); -- Mixed select 't5', st_asewkt(st_sharedpaths( 'LINESTRING(0 0, 100 0)', 'LINESTRING(20 0, 30 0, 30 50, 80 0, 70 0)' )); -- bug #670 select 't6', st_sharedpaths( '0101000020E6100000F771D98DE33826C00000000000004440'::geometry, '0103000020E61000000100000021000000F771D98DE33820C00000000000004E409610DB16675620C00EC34AD715B54D407AF7FF56CFAD20C008E817B00C6D4D40A8B32666C03B21C017D34B39A92A4D40C096A1DAC5FA21C03309329378F04C4050BE087388E322C06D501336B7C04C401412394E16ED23C061A149F23A9D4C402C7E04EB3A0D25C0A86740E260874C40F471D98DE33826C00000000000804C40BC65AE308C6427C0A86740E260874C40D5D179CDB08428C060A149F23A9D4C409A25AAA83E8E29C06C501336B7C04C402A4D114101772AC03209329378F04C4043308CB506362BC016D34B39A92A4D4072ECB2C4F7C32BC007E817B00C6D4D4057D3D704601B2CC00DC34AD715B54D40F771D98DE3382CC0FFFFFFFFFFFF4D4059D3D704601B2CC0F13CB528EA4A4E4076ECB2C4F7C32BC0F717E84FF3924E4049308CB506362BC0E82CB4C656D54E40324D114101772AC0CCF6CD6C870F4F40A325AAA83E8E29C093AFECC9483F4F40DFD179CDB08428C09F5EB60DC5624F40C665AE308C6427C05898BF1D9F784F40FD71D98DE33826C00000000000804F40347E04EB3A0D25C05898BF1D9F784F401B12394E16ED23C0A05EB60DC5624F4056BE087388E322C094AFECC9483F4F40C496A1DAC5FA21C0CEF6CD6C870F4F40ABB32666C03B21C0EA2CB4C656D54E407CF7FF56CFAD20C0F917E84FF3924E409710DB16675620C0F33CB528EA4A4E40F771D98DE33820C00000000000004E40'::geometry ); -- RT 1 select 't7', st_asewkt(st_sharedpaths( 'MULTILINESTRING((1 3,4 2,7 2,7 5),(13 10,14 7,11 6,15 5))', 'LINESTRING(2 1,4 2,7 2,8 3,10 6,11 6,14 7,16 9)' )); -- RT 2 select 't8', st_asewkt(st_sharedpaths( 'MULTILINESTRING((1 3,4 2,7 2,7 5,13 10,14 7,11 6,15 5))', 'LINESTRING(2 1,4 2,7 2,8 3,10 6,11 6,14 7,16 9)' )); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/affine_expected�����������������������������������������������������0000644�0000000�0000000�00000001707�11722777314�020306� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ST_Translate|POINT(5 12) ST_Translate|POINT(-3 -7 3) ST_Scale|POINT(5 5) ST_Scale|POINT(3 2) ST_Scale|POINT(40 40 40) ST_Rotate|POINT(29 11) ST_Rotate|POINT(-2 0) ST_Rotate|POINT(19 1) ST_Rotate|POINT(-0.5 0.5) ST_RotateZ|POINT(-1 -1) ST_RotateZ|POINT(-1 1) ST_RotateZ|POINT(1 -1) ST_RotateZ|POINT(1 1) ST_RotateY|POINT(-1 1 -1) ST_RotateY|POINT(1 1 -1) ST_RotateY|POINT(-1 1 1) ST_RotateY|POINT(1 1 1) ST_RotateX|POINT(1 -1 -1) ST_RotateX|POINT(1 -1 1) ST_RotateX|POINT(1 1 -1) ST_RotateX|POINT(1 1 1) ST_TransScale|POINT(2 2) ST_TransScale|POINT(3 3) ST_TransScale|POINT(0 0) ST_TransScale|POINT(1 2) ST_TransScale|POINT(2 1) ST_TransScale|POINT(0 2) ST_TransScale|POINT(2 0) ST_TransScale|POINT(3 2) ST_TransScale|POINT(2 3) ST_TransScale|POINT(4 2) ST_TransScale|POINT(2 4) ST_TransScale|POINT(15 28) ST_TransScale|POINT(15 28 1) transl_bbox|BOX(1 0,2 1) ST_Scale_bbox|BOX(2 0,4 0) ST_Scale_bbox|BOX(3 1,4 2) ST_RotZ_bbox|BOX(-1 0,0 0) ST_RotY_bbox|BOX(-1 0,0 0) ���������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/typmod.sql����������������������������������������������������������0000644�0000000�0000000�00000053206�12143205626�017276� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; \set VERBOSITY terse CREATE SCHEMA tm; -- Test construction of typed tables CREATE TABLE tm.circularstring (id serial, g geometry(circularstring) ); CREATE TABLE tm.circularstring0 (id serial, g geometry(circularstring, 0) ); CREATE TABLE tm.circularstring4326 (id serial, g geometry(circularstring, 4326) ); CREATE TABLE tm.circularstringm (id serial, g geometry(circularstringm) ); CREATE TABLE tm.circularstringm0 (id serial, g geometry(circularstringm, 0) ); CREATE TABLE tm.circularstringm4326 (id serial, g geometry(circularstringm, 4326) ); CREATE TABLE tm.circularstringz (id serial, g geometry(circularstringz) ); CREATE TABLE tm.circularstringz0 (id serial, g geometry(circularstringz, 0) ); CREATE TABLE tm.circularstringz4326 (id serial, g geometry(circularstringz, 4326) ); CREATE TABLE tm.circularstringzm (id serial, g geometry(circularstringzm) ); CREATE TABLE tm.circularstringzm0 (id serial, g geometry(circularstringzm, 0) ); CREATE TABLE tm.circularstringzm4326 (id serial, g geometry(circularstringzm, 4326) ); CREATE TABLE tm.compoundcurve (id serial, g geometry(compoundcurve) ); CREATE TABLE tm.compoundcurve0 (id serial, g geometry(compoundcurve, 0) ); CREATE TABLE tm.compoundcurve4326 (id serial, g geometry(compoundcurve, 4326) ); CREATE TABLE tm.compoundcurvem (id serial, g geometry(compoundcurvem) ); CREATE TABLE tm.compoundcurvem0 (id serial, g geometry(compoundcurvem, 0) ); CREATE TABLE tm.compoundcurvem4326 (id serial, g geometry(compoundcurvem, 4326) ); CREATE TABLE tm.compoundcurvez (id serial, g geometry(compoundcurvez) ); CREATE TABLE tm.compoundcurvez0 (id serial, g geometry(compoundcurvez, 0) ); CREATE TABLE tm.compoundcurvez4326 (id serial, g geometry(compoundcurvez, 4326) ); CREATE TABLE tm.compoundcurvezm (id serial, g geometry(compoundcurvezm) ); CREATE TABLE tm.compoundcurvezm0 (id serial, g geometry(compoundcurvezm, 0) ); CREATE TABLE tm.compoundcurvezm4326 (id serial, g geometry(compoundcurvezm, 4326) ); CREATE TABLE tm.curvepolygon (id serial, g geometry(curvepolygon) ); CREATE TABLE tm.curvepolygon0 (id serial, g geometry(curvepolygon, 0) ); CREATE TABLE tm.curvepolygon4326 (id serial, g geometry(curvepolygon, 4326) ); CREATE TABLE tm.curvepolygonm (id serial, g geometry(curvepolygonm) ); CREATE TABLE tm.curvepolygonm0 (id serial, g geometry(curvepolygonm, 0) ); CREATE TABLE tm.curvepolygonm4326 (id serial, g geometry(curvepolygonm, 4326) ); CREATE TABLE tm.curvepolygonz (id serial, g geometry(curvepolygonz) ); CREATE TABLE tm.curvepolygonz0 (id serial, g geometry(curvepolygonz, 0) ); CREATE TABLE tm.curvepolygonz4326 (id serial, g geometry(curvepolygonz, 4326) ); CREATE TABLE tm.curvepolygonzm (id serial, g geometry(curvepolygonzm) ); CREATE TABLE tm.curvepolygonzm0 (id serial, g geometry(curvepolygonzm, 0) ); CREATE TABLE tm.curvepolygonzm4326 (id serial, g geometry(curvepolygonzm, 4326) ); CREATE TABLE tm.geometry (id serial, g geometry(geometry), gg geography(geometry) ); CREATE TABLE tm.geometry0 (id serial, g geometry(geometry, 0), gg geography(geometry, 0) ); CREATE TABLE tm.geometry4326 (id serial, g geometry(geometry, 4326), gg geography(geometry, 4326) ); CREATE TABLE tm.geometrym (id serial, g geometry(geometrym), gg geography(geometrym) ); CREATE TABLE tm.geometrym0 (id serial, g geometry(geometrym, 0), gg geography(geometrym, 0) ); CREATE TABLE tm.geometrym4326 (id serial, g geometry(geometrym, 4326), gg geography(geometrym, 4326) ); CREATE TABLE tm.geometryz (id serial, g geometry(geometryz), gg geography(geometryz) ); CREATE TABLE tm.geometryz0 (id serial, g geometry(geometryz, 0), gg geography(geometryz, 0) ); CREATE TABLE tm.geometryz4326 (id serial, g geometry(geometryz, 4326), gg geography(geometryz, 4326) ); CREATE TABLE tm.geometryzm (id serial, g geometry(geometryzm), gg geography(geometryzm) ); CREATE TABLE tm.geometryzm0 (id serial, g geometry(geometryzm, 0), gg geography(geometryzm, 0) ); CREATE TABLE tm.geometryzm4326 (id serial, g geometry(geometryzm, 4326), gg geography(geometryzm, 4326) ); CREATE TABLE tm.geometrycollection (id serial, g geometry(geometrycollection), gg geography(geometrycollection) ); CREATE TABLE tm.geometrycollection0 (id serial, g geometry(geometrycollection, 0), gg geography(geometrycollection, 0) ); CREATE TABLE tm.geometrycollection4326 (id serial, g geometry(geometrycollection, 4326), gg geography(geometrycollection, 4326) ); CREATE TABLE tm.geometrycollectionm (id serial, g geometry(geometrycollectionm), gg geography(geometrycollectionm) ); CREATE TABLE tm.geometrycollectionm0 (id serial, g geometry(geometrycollectionm, 0), gg geography(geometrycollectionm, 0) ); CREATE TABLE tm.geometrycollectionm4326 (id serial, g geometry(geometrycollectionm, 4326), gg geography(geometrycollectionm, 4326) ); CREATE TABLE tm.geometrycollectionz (id serial, g geometry(geometrycollectionz), gg geography(geometrycollectionz) ); CREATE TABLE tm.geometrycollectionz0 (id serial, g geometry(geometrycollectionz, 0), gg geography(geometrycollectionz, 0) ); CREATE TABLE tm.geometrycollectionz4326 (id serial, g geometry(geometrycollectionz, 4326), gg geography(geometrycollectionz, 4326) ); CREATE TABLE tm.geometrycollectionzm (id serial, g geometry(geometrycollectionzm), gg geography(geometrycollectionzm) ); CREATE TABLE tm.geometrycollectionzm0 (id serial, g geometry(geometrycollectionzm, 0), gg geography(geometrycollectionzm, 0) ); CREATE TABLE tm.geometrycollectionzm4326 (id serial, g geometry(geometrycollectionzm, 4326), gg geography(geometrycollectionzm, 4326) ); CREATE TABLE tm.linestring (id serial, g geometry(linestring), gg geography(linestring) ); CREATE TABLE tm.linestring0 (id serial, g geometry(linestring, 0), gg geography(linestring, 0) ); CREATE TABLE tm.linestring4326 (id serial, g geometry(linestring, 4326), gg geography(linestring, 4326) ); CREATE TABLE tm.linestringm (id serial, g geometry(linestringm), gg geography(linestringm) ); CREATE TABLE tm.linestringm0 (id serial, g geometry(linestringm, 0), gg geography(linestringm, 0) ); CREATE TABLE tm.linestringm4326 (id serial, g geometry(linestringm, 4326), gg geography(linestringm, 4326) ); CREATE TABLE tm.linestringz (id serial, g geometry(linestringz), gg geography(linestringz) ); CREATE TABLE tm.linestringz0 (id serial, g geometry(linestringz, 0), gg geography(linestringz, 0) ); CREATE TABLE tm.linestringz4326 (id serial, g geometry(linestringz, 4326), gg geography(linestringz, 4326) ); CREATE TABLE tm.linestringzm (id serial, g geometry(linestringzm), gg geography(linestringzm) ); CREATE TABLE tm.linestringzm0 (id serial, g geometry(linestringzm, 0), gg geography(linestringzm, 0) ); CREATE TABLE tm.linestringzm4326 (id serial, g geometry(linestringzm, 4326), gg geography(linestringzm, 4326) ); CREATE TABLE tm.multicurve (id serial, g geometry(multicurve) ); CREATE TABLE tm.multicurve0 (id serial, g geometry(multicurve, 0) ); CREATE TABLE tm.multicurve4326 (id serial, g geometry(multicurve, 4326) ); CREATE TABLE tm.multicurvem (id serial, g geometry(multicurvem) ); CREATE TABLE tm.multicurvem0 (id serial, g geometry(multicurvem, 0) ); CREATE TABLE tm.multicurvem4326 (id serial, g geometry(multicurvem, 4326) ); CREATE TABLE tm.multicurvez (id serial, g geometry(multicurvez) ); CREATE TABLE tm.multicurvez0 (id serial, g geometry(multicurvez, 0) ); CREATE TABLE tm.multicurvez4326 (id serial, g geometry(multicurvez, 4326) ); CREATE TABLE tm.multicurvezm (id serial, g geometry(multicurvezm) ); CREATE TABLE tm.multicurvezm0 (id serial, g geometry(multicurvezm, 0) ); CREATE TABLE tm.multicurvezm4326 (id serial, g geometry(multicurvezm, 4326) ); CREATE TABLE tm.multilinestring (id serial, g geometry(multilinestring), gg geography(multilinestring) ); CREATE TABLE tm.multilinestring0 (id serial, g geometry(multilinestring, 0), gg geography(multilinestring, 0) ); CREATE TABLE tm.multilinestring4326 (id serial, g geometry(multilinestring, 4326), gg geography(multilinestring, 4326) ); CREATE TABLE tm.multilinestringm (id serial, g geometry(multilinestringm), gg geography(multilinestringm) ); CREATE TABLE tm.multilinestringm0 (id serial, g geometry(multilinestringm, 0), gg geography(multilinestringm, 0) ); CREATE TABLE tm.multilinestringm4326 (id serial, g geometry(multilinestringm, 4326), gg geography(multilinestringm, 4326) ); CREATE TABLE tm.multilinestringz (id serial, g geometry(multilinestringz), gg geography(multilinestringz) ); CREATE TABLE tm.multilinestringz0 (id serial, g geometry(multilinestringz, 0), gg geography(multilinestringz, 0) ); CREATE TABLE tm.multilinestringz4326 (id serial, g geometry(multilinestringz, 4326), gg geography(multilinestringz, 4326) ); CREATE TABLE tm.multilinestringzm (id serial, g geometry(multilinestringzm), gg geography(multilinestringzm) ); CREATE TABLE tm.multilinestringzm0 (id serial, g geometry(multilinestringzm, 0), gg geography(multilinestringzm, 0) ); CREATE TABLE tm.multilinestringzm4326 (id serial, g geometry(multilinestringzm, 4326), gg geography(multilinestringzm, 4326) ); CREATE TABLE tm.multipolygon (id serial, g geometry(multipolygon), gg geography(multipolygon) ); CREATE TABLE tm.multipolygon0 (id serial, g geometry(multipolygon, 0), gg geography(multipolygon, 0) ); CREATE TABLE tm.multipolygon4326 (id serial, g geometry(multipolygon, 4326), gg geography(multipolygon, 4326) ); CREATE TABLE tm.multipolygonm (id serial, g geometry(multipolygonm), gg geography(multipolygonm) ); CREATE TABLE tm.multipolygonm0 (id serial, g geometry(multipolygonm, 0), gg geography(multipolygonm, 0) ); CREATE TABLE tm.multipolygonm4326 (id serial, g geometry(multipolygonm, 4326), gg geography(multipolygonm, 4326) ); CREATE TABLE tm.multipolygonz (id serial, g geometry(multipolygonz), gg geography(multipolygonz) ); CREATE TABLE tm.multipolygonz0 (id serial, g geometry(multipolygonz, 0), gg geography(multipolygonz, 0) ); CREATE TABLE tm.multipolygonz4326 (id serial, g geometry(multipolygonz, 4326), gg geography(multipolygonz, 4326) ); CREATE TABLE tm.multipolygonzm (id serial, g geometry(multipolygonzm), gg geography(multipolygonzm) ); CREATE TABLE tm.multipolygonzm0 (id serial, g geometry(multipolygonzm, 0), gg geography(multipolygonzm, 0) ); CREATE TABLE tm.multipolygonzm4326 (id serial, g geometry(multipolygonzm, 4326), gg geography(multipolygonzm, 4326) ); CREATE TABLE tm.multipoint (id serial, g geometry(multipoint), gg geography(multipoint) ); CREATE TABLE tm.multipoint0 (id serial, g geometry(multipoint, 0), gg geography(multipoint, 0) ); CREATE TABLE tm.multipoint4326 (id serial, g geometry(multipoint, 4326), gg geography(multipoint, 4326) ); CREATE TABLE tm.multipointm (id serial, g geometry(multipointm), gg geography(multipointm) ); CREATE TABLE tm.multipointm0 (id serial, g geometry(multipointm, 0), gg geography(multipointm, 0) ); CREATE TABLE tm.multipointm4326 (id serial, g geometry(multipointm, 4326), gg geography(multipointm, 4326) ); CREATE TABLE tm.multipointz (id serial, g geometry(multipointz), gg geography(multipointz) ); CREATE TABLE tm.multipointz0 (id serial, g geometry(multipointz, 0), gg geography(multipointz, 0) ); CREATE TABLE tm.multipointz4326 (id serial, g geometry(multipointz, 4326), gg geography(multipointz, 4326) ); CREATE TABLE tm.multipointzm (id serial, g geometry(multipointzm), gg geography(multipointzm) ); CREATE TABLE tm.multipointzm0 (id serial, g geometry(multipointzm, 0), gg geography(multipointzm, 0) ); CREATE TABLE tm.multipointzm4326 (id serial, g geometry(multipointzm, 4326), gg geography(multipointzm, 4326) ); CREATE TABLE tm.multisurface (id serial, g geometry(multisurface) ); CREATE TABLE tm.multisurface0 (id serial, g geometry(multisurface, 0) ); CREATE TABLE tm.multisurface4326 (id serial, g geometry(multisurface, 4326) ); CREATE TABLE tm.multisurfacem (id serial, g geometry(multisurfacem) ); CREATE TABLE tm.multisurfacem0 (id serial, g geometry(multisurfacem, 0) ); CREATE TABLE tm.multisurfacem4326 (id serial, g geometry(multisurfacem, 4326) ); CREATE TABLE tm.multisurfacez (id serial, g geometry(multisurfacez) ); CREATE TABLE tm.multisurfacez0 (id serial, g geometry(multisurfacez, 0) ); CREATE TABLE tm.multisurfacez4326 (id serial, g geometry(multisurfacez, 4326) ); CREATE TABLE tm.multisurfacezm (id serial, g geometry(multisurfacezm) ); CREATE TABLE tm.multisurfacezm0 (id serial, g geometry(multisurfacezm, 0) ); CREATE TABLE tm.multisurfacezm4326 (id serial, g geometry(multisurfacezm, 4326) ); CREATE TABLE tm.point (id serial, g geometry(point), gg geography(point) ); CREATE TABLE tm.point0 (id serial, g geometry(point, 0), gg geography(point, 0) ); CREATE TABLE tm.point4326 (id serial, g geometry(point, 4326), gg geography(point, 4326) ); CREATE TABLE tm.pointm (id serial, g geometry(pointm), gg geography(pointm) ); CREATE TABLE tm.pointm0 (id serial, g geometry(pointm, 0), gg geography(pointm, 0) ); CREATE TABLE tm.pointm4326 (id serial, g geometry(pointm, 4326), gg geography(pointm, 4326) ); CREATE TABLE tm.pointz (id serial, g geometry(pointz), gg geography(pointz) ); CREATE TABLE tm.pointz0 (id serial, g geometry(pointz, 0), gg geography(pointz, 0) ); CREATE TABLE tm.pointz4326 (id serial, g geometry(pointz, 4326), gg geography(pointz, 4326) ); CREATE TABLE tm.pointzm (id serial, g geometry(pointzm), gg geography(pointzm) ); CREATE TABLE tm.pointzm0 (id serial, g geometry(pointzm, 0), gg geography(pointzm, 0) ); CREATE TABLE tm.pointzm4326 (id serial, g geometry(pointzm, 4326), gg geography(pointzm, 4326) ); CREATE TABLE tm.polygon (id serial, g geometry(polygon), gg geography(polygon) ); CREATE TABLE tm.polygon0 (id serial, g geometry(polygon, 0), gg geography(polygon, 0) ); CREATE TABLE tm.polygon4326 (id serial, g geometry(polygon, 4326), gg geography(polygon, 4326) ); CREATE TABLE tm.polygonm (id serial, g geometry(polygonm), gg geography(polygonm) ); CREATE TABLE tm.polygonm0 (id serial, g geometry(polygonm, 0), gg geography(polygonm, 0) ); CREATE TABLE tm.polygonm4326 (id serial, g geometry(polygonm, 4326), gg geography(polygonm, 4326) ); CREATE TABLE tm.polygonz (id serial, g geometry(polygonz), gg geography(polygonz) ); CREATE TABLE tm.polygonz0 (id serial, g geometry(polygonz, 0), gg geography(polygonz, 0) ); CREATE TABLE tm.polygonz4326 (id serial, g geometry(polygonz, 4326), gg geography(polygonz, 4326) ); CREATE TABLE tm.polygonzm (id serial, g geometry(polygonzm), gg geography(polygonzm) ); CREATE TABLE tm.polygonzm0 (id serial, g geometry(polygonzm, 0), gg geography(polygonzm, 0) ); CREATE TABLE tm.polygonzm4326 (id serial, g geometry(polygonzm, 4326), gg geography(polygonzm, 4326) ); CREATE TABLE tm.polyhedralsurface (id serial, g geometry(polyhedralsurface) ); CREATE TABLE tm.polyhedralsurface0 (id serial, g geometry(polyhedralsurface, 0) ); CREATE TABLE tm.polyhedralsurface4326 (id serial, g geometry(polyhedralsurface, 4326) ); CREATE TABLE tm.polyhedralsurfacem (id serial, g geometry(polyhedralsurfacem) ); CREATE TABLE tm.polyhedralsurfacem0 (id serial, g geometry(polyhedralsurfacem, 0) ); CREATE TABLE tm.polyhedralsurfacem4326 (id serial, g geometry(polyhedralsurfacem, 4326) ); CREATE TABLE tm.polyhedralsurfacez (id serial, g geometry(polyhedralsurfacez) ); CREATE TABLE tm.polyhedralsurfacez0 (id serial, g geometry(polyhedralsurfacez, 0) ); CREATE TABLE tm.polyhedralsurfacez4326 (id serial, g geometry(polyhedralsurfacez, 4326) ); CREATE TABLE tm.polyhedralsurfacezm (id serial, g geometry(polyhedralsurfacezm) ); CREATE TABLE tm.polyhedralsurfacezm0 (id serial, g geometry(polyhedralsurfacezm, 0) ); CREATE TABLE tm.polyhedralsurfacezm4326 (id serial, g geometry(polyhedralsurfacezm, 4326) ); CREATE TABLE tm.tin (id serial, g geometry(tin) ); CREATE TABLE tm.tin0 (id serial, g geometry(tin, 0) ); CREATE TABLE tm.tin4326 (id serial, g geometry(tin, 4326) ); CREATE TABLE tm.tinm (id serial, g geometry(tinm) ); CREATE TABLE tm.tinm0 (id serial, g geometry(tinm, 0) ); CREATE TABLE tm.tinm4326 (id serial, g geometry(tinm, 4326) ); CREATE TABLE tm.tinz (id serial, g geometry(tinz) ); CREATE TABLE tm.tinz0 (id serial, g geometry(tinz, 0) ); CREATE TABLE tm.tinz4326 (id serial, g geometry(tinz, 4326) ); CREATE TABLE tm.tinzm (id serial, g geometry(tinzm) ); CREATE TABLE tm.tinzm0 (id serial, g geometry(tinzm, 0) ); CREATE TABLE tm.tinzm4326 (id serial, g geometry(tinzm, 4326) ); CREATE TABLE tm.triangle (id serial, g geometry(triangle) ); CREATE TABLE tm.triangle0 (id serial, g geometry(triangle, 0) ); CREATE TABLE tm.triangle4326 (id serial, g geometry(triangle, 4326) ); CREATE TABLE tm.trianglem (id serial, g geometry(trianglem) ); CREATE TABLE tm.trianglem0 (id serial, g geometry(trianglem, 0) ); CREATE TABLE tm.trianglem4326 (id serial, g geometry(trianglem, 4326) ); CREATE TABLE tm.trianglez (id serial, g geometry(trianglez) ); CREATE TABLE tm.trianglez0 (id serial, g geometry(trianglez, 0) ); CREATE TABLE tm.trianglez4326 (id serial, g geometry(trianglez, 4326) ); CREATE TABLE tm.trianglezm (id serial, g geometry(trianglezm) ); CREATE TABLE tm.trianglezm0 (id serial, g geometry(trianglezm, 0) ); CREATE TABLE tm.trianglezm4326 (id serial, g geometry(trianglezm, 4326) ); SELECT 'g', f_table_name, f_geometry_column, coord_dimension, srid, type from geometry_columns ORDER BY f_table_name; SELECT 'gg', f_table_name, f_geography_column, coord_dimension, srid, type from geography_columns ORDER BY f_table_name; SELECT distinct 'catalog-schema', f_table_catalog,f_table_schema FROM geometry_columns UNION SELECT distinct 'catalog-schema', f_table_catalog,f_table_schema FROM geography_columns ; CREATE TABLE tm.types (id serial, g geometry); INSERT INTO tm.types(g) values ('POINT EMPTY'); INSERT INTO tm.types(g) values ('LINESTRING EMPTY'); INSERT INTO tm.types(g) values ('POLYGON EMPTY'); INSERT INTO tm.types(g) values ('MULTIPOINT EMPTY'); INSERT INTO tm.types(g) values ('MULTILINESTRING EMPTY'); INSERT INTO tm.types(g) values ('MULTIPOLYGON EMPTY'); INSERT INTO tm.types(g) values ('GEOMETRYCOLLECTION EMPTY'); INSERT INTO tm.types(g) values ('CIRCULARSTRING EMPTY'); INSERT INTO tm.types(g) values ('COMPOUNDCURVE EMPTY'); INSERT INTO tm.types(g) values ('CURVEPOLYGON EMPTY'); INSERT INTO tm.types(g) values ('MULTICURVE EMPTY'); INSERT INTO tm.types(g) values ('MULTISURFACE EMPTY'); INSERT INTO tm.types(g) values ('POLYHEDRALSURFACE EMPTY'); INSERT INTO tm.types(g) values ('TRIANGLE EMPTY'); INSERT INTO tm.types(g) values ('TIN EMPTY'); -- all zm flags INSERT INTO tm.types(g) SELECT st_force3dz(g) FROM tm.types WHERE id < 15 ORDER BY id; INSERT INTO tm.types(g) SELECT st_force3dm(g) FROM tm.types WHERE id < 15 ORDER BY id; INSERT INTO tm.types(g) SELECT st_force4d(g) FROM tm.types WHERE id < 15 ORDER BY id; -- known srid INSERT INTO tm.types(g) SELECT st_setsrid(g,4326) FROM tm.types ORDER BY id; -- Now try to insert each type into each table CREATE FUNCTION tm.insert_all(tmpfile_prefix text) RETURNS TABLE(out_where varchar, out_srid int, out_type varchar, out_flags varchar, out_status text) AS $$ DECLARE sql text; rec RECORD; rec2 RECORD; tmpfile text; cnt INT; hasgeog BOOL; BEGIN tmpfile := tmpfile_prefix; FOR rec2 IN SELECT * from tm.types ORDER BY id LOOP tmpfile := tmpfile_prefix || rec2.id; sql := 'COPY ( SELECT g FROM tm.types WHERE id = ' || rec2.id || ') TO ' || quote_literal(tmpfile) || ' WITH BINARY '; EXECUTE sql; END LOOP; FOR rec IN SELECT * from geometry_columns WHERE f_table_name != 'types' ORDER BY 3 LOOP out_where := rec.f_table_name; hasgeog := rec.type NOT LIKE '%CURVE%' AND rec.type NOT LIKE '%CIRCULAR%' AND rec.type NOT LIKE '%SURFACE%' AND rec.type NOT LIKE 'TRIANGLE%' AND rec.type NOT LIKE 'TIN%'; FOR rec2 IN SELECT * from tm.types ORDER BY id LOOP out_srid := ST_Srid(rec2.g); out_type := substr(ST_GeometryType(rec2.g), 4); out_flags := ST_zmflag(rec2.g); BEGIN sql := 'INSERT INTO ' || quote_ident(rec.f_table_schema) || '.' || quote_ident(rec.f_table_name) || '(g) VALUES (' || quote_literal(rec2.g::text) || ');'; EXECUTE sql; out_status := 'OK'; EXCEPTION WHEN OTHERS THEN out_status := 'KO'; -- || SQLERRM; END; -- binary insertion { tmpfile := tmpfile_prefix || rec2.id; sql := 'COPY ' || quote_ident(rec.f_table_schema) || '.' || quote_ident(rec.f_table_name) || '(g) FROM ' || quote_literal(tmpfile) || ' WITH BINARY '; BEGIN EXECUTE sql; out_status := out_status || '-BOK'; EXCEPTION WHEN OTHERS THEN out_status := out_status || '-BKO'; END; -- } IF NOT hasgeog THEN RETURN NEXT; CONTINUE; END IF; BEGIN sql := 'INSERT INTO ' || quote_ident(rec.f_table_schema) || '.' || quote_ident(rec.f_table_name) || '(gg) VALUES (' || quote_literal(rec2.g::text) || ');'; EXECUTE sql; out_status := out_status || '-GOK'; EXCEPTION WHEN OTHERS THEN out_status := out_status || '-GKO:'; END; -- binary insertion (geography) { sql := 'COPY ' || quote_ident(rec.f_table_schema) || '.' || quote_ident(rec.f_table_name) || '(gg) FROM ' || quote_literal(tmpfile) || ' WITH BINARY '; BEGIN EXECUTE sql; out_status := out_status || '-BGOK'; EXCEPTION WHEN OTHERS THEN out_status := out_status || '-BGKO'; -- || SQLERRM; END; -- } RETURN NEXT; END LOOP; -- Count number of geometries in the table sql := 'SELECT count(g) FROM ' || quote_ident(rec.f_table_schema) || '.' || quote_ident(rec.f_table_name); EXECUTE sql INTO STRICT cnt; out_srid := NULL; out_type := 'COUNT'; out_flags := cnt; out_status := NULL; RETURN NEXT; IF hasgeog THEN -- Count number of geographies in the table sql := 'SELECT count(gg) FROM ' || quote_ident(rec.f_table_schema) || '.' || quote_ident(rec.f_table_name); EXECUTE sql INTO STRICT cnt; out_srid := NULL; out_type := 'GCOUNT'; out_flags := cnt; out_status := NULL; RETURN NEXT; END IF; END LOOP; END; $$ LANGUAGE 'plpgsql'; SELECT * FROM tm.insert_all(:tmpfile); DROP SCHEMA tm CASCADE; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/empty_expected������������������������������������������������������0000644�0000000�0000000�00000003333�11722777314�020211� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T1.1|POINT EMPTY T1.2|LINESTRING EMPTY T1.3|SRID=4326;POLYGON EMPTY T2.1|SRID=4326;POLYGON EMPTY T2.2|SRID=4326;POLYGON EMPTY T2.3|SRID=4326;POLYGON EMPTY T2.4|4326|POLYGON T3.1| T3.2| T3.3| T3.4| T3.5| T3.6| T3.7| T3.8| T3.9| T3.10| T3.11| T3.12| T3.13| T3.14| T3.15| T3.16| T3.17| T3.18| ST_Buffer(empty, tolerance) == empty|010300000000000000 ST_Union(geometry, empty) == geometry|0103000000010000000400000000000000000000000000000000000000000000000000244000000000000000000000000000001440000000000000144000000000000000000000000000000000 ST_Union(empty, empty) == empty|010300000000000000 ST_Intersection(geometry, empty) == geometry|010300000000000000 ST_Intersection(empty, empty) == empty|010300000000000000 ST_Difference(geometry, empty) == geometry|0103000000010000000400000000000000000000000000000000000000000000000000244000000000000000000000000000001440000000000000144000000000000000000000000000000000 ST_Difference(empty, geometry) == empty|010300000000000000 ST_Distance(geometry, empty) == NULL| ST_DWithin(geometry, empty, tolerance) == FALSE|f ST_Within(geometry, empty) == FALSE|f ST_Contains(empty, geometry) == FALSE|f ST_Within(empty, geometry) == FALSE|f ST_Contains(empty, empty) == FALSE|f ST_Intersects(geometry, empty) == FALSE|f ST_Intersects(empty, empty) == FALSE|f ST_Disjoint(empty, empty) == TRUE|t ST_Disjoint(geometry, empty) == TRUE|t ST_Equals(empty1, empty2) == TRUE|t ST_IsSimple(empty) == TRUE|t ST_IsValid(empty) == TRUE|t ST_NumGeometries(empty) == 0|0 ST_NRings(empty) == 0|0 ST_NumPoints(empty) == 0|0 ST_NPoints(empty) == 0|0 ST_GeometryN(empty, n) == empty|010300000000000000 ST_ExteriorRing(empty) == empty|010200000000000000 ST_InteriorRingN(empty, n) == NULL| ST_Area(empty) == 0|0 ST_Length(empty) == 0|0 ~=|t �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/snaptogrid_expected�������������������������������������������������0000644�0000000�0000000�00000000012�11722777314�021214� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t t t t t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-general_expected���������������������������������������������0000644�0000000�0000000�00000000473�11722777314�021676� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������f f t t f t f f f t f f t LINESTRING(-13151357.927248 3913656.64539871,-13151419.0845266 3913664.12016378,-13151441.323537 3913666.61175286,-13151456.8908442 3913666.61175286,-13151476.9059536 3913666.61175286,-13151496.921063 3913666.61175287,-13151521.3839744 3913666.61175287,-13151591.4368571 3913665.36595828) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_proj_expected�����������������������������������������������0000644�0000000�0000000�00000000530�11722777314�021553� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|EMPTY 1|SRID=100001;POINT(574600 5316780) 2|SRID=100001;POINT(574600 5316780 171) 3|SRID=100001;POINT(574600 5316780 171 -500) 4|SRID=100001;LINESTRING(574600 5316780,573140 5427940) 5|SRID=100001;LINESTRING(574600 5316780 0 0,573140 5427940 0 0) 6|16.00000000|48.00000000 ERROR: Input geometry has unknown (0) SRID 8|SRID=100002;POINT(0 0) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-serialize.sql������������������������������������������������0000644�0000000�0000000�00000044065�11722777314�021172� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� CREATE TABLE serialize_test ( id INTEGER, description VARCHAR, ewkt VARCHAR, serialized TEXT); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 1, 'Circular String', 'CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)', '01080000000500000000000000000000C0000000000000000000000000000000000000000000000040000000000000004000000000000000000000000000000000000000000000004000000000000000400000000000001040'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 2, 'Circular String, SRID=4326', 'SRID=4326;CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)', '0108000020E61000000500000000000000000000C0000000000000000000000000000000000000000000000040000000000000004000000000000000000000000000000000000000000000004000000000000000400000000000001040'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 3, 'Circular String 3dz, SRID=4326', 'SRID=4326;CIRCULARSTRING(-2 0 1,0 2 1,2 0 1,0 2 1,2 4 1)', '01080000A0E61000000500000000000000000000C00000000000000000000000000000F03F00000000000000000000000000000040000000000000F03F00000000000000400000000000000000000000000000F03F00000000000000000000000000000040000000000000F03F00000000000000400000000000001040000000000000F03F'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 4, 'Circular String 3dm, SRID=4326', 'SRID=4326;CIRCULARSTRINGM(-2 0 1,0 2 1,2 0 1,0 2 1,2 4 1)', '0108000060E61000000500000000000000000000C00000000000000000000000000000F03F00000000000000000000000000000040000000000000F03F00000000000000400000000000000000000000000000F03F00000000000000000000000000000040000000000000F03F00000000000000400000000000001040000000000000F03F'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 5, 'Circular String 4d, SRID=4326', 'SRID=4326;CIRCULARSTRING(-2 0 1 0,0 2 1 0,2 0 1 0,0 2 1 0,2 4 1 0)', '01080000E0E61000000500000000000000000000C00000000000000000000000000000F03F000000000000000000000000000000000000000000000040000000000000F03F000000000000000000000000000000400000000000000000000000000000F03F000000000000000000000000000000000000000000000040000000000000F03F000000000000000000000000000000400000000000001040000000000000F03F0000000000000000'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 6, 'Compound Curve', 'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))', '01090000000200000001080000000300000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000000010200000002000000000000000000F03F00000000000000000000000000000000000000000000F03F'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 7, 'Compound Curve, SRID=4326', 'SRID=4326;COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))', '0109000020E61000000200000001080000000300000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000000010200000002000000000000000000F03F00000000000000000000000000000000000000000000F03F'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 8, 'Compound Curve 3dz, SRID=4326', 'SRID=4326;COMPOUNDCURVE(CIRCULARSTRING(0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))', '01090000A0E610000002000000010800008003000000000000000000000000000000000000000000000000000040000000000000F03F000000000000F03F0000000000000040000000000000F03F00000000000000000000000000000040010200008002000000000000000000F03F000000000000000000000000000000400000000000000000000000000000F03F0000000000000040'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 9, 'Compound Curve 3dm, SRID=4326', 'SRID=4326;COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))', '0109000060E610000002000000010800004003000000000000000000000000000000000000000000000000000040000000000000F03F000000000000F03F0000000000000040000000000000F03F00000000000000000000000000000040010200004002000000000000000000F03F000000000000000000000000000000400000000000000000000000000000F03F0000000000000040'); INSERT INTO serialize_test ( id, description, ewkt, serialized ) VALUES ( 10, 'Compound Curve 4d, SRID=4326', 'SRID=4326;COMPOUNDCURVE(CIRCULARSTRING(0 0 2 5,1 1 2 5,1 0 2 5),(1 0 2 5,0 1 2 2))', '01090000E0E61000000200000001080000C0030000000000000000000000000000000000000000000000000000400000000000001440000000000000F03F000000000000F03F00000000000000400000000000001440000000000000F03F00000000000000000000000000000040000000000000144001020000C002000000000000000000F03F0000000000000000000000000000004000000000000014400000000000000000000000000000F03F00000000000000400000000000000040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 11, 'Curve Polygon', 'CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))', '010A0000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 12, 'Curve Polygon, SRID=4326', 'SRID=4326;CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))', '010A000020E61000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 13, 'Curve Polygon 3dz, SRID=4326', 'SRID=4326;CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1))', '010A0000A0E61000000200000001080000800700000000000000000000C000000000000000000000000000000000000000000000F0BF000000000000F0BF000000000000F03F000000000000000000000000000000000000000000000040000000000000F03F000000000000F0BF000000000000084000000000000000400000000000000000000000000000104000000000000000000000000000000040000000000000004000000000000000C000000000000000000000000000000000010200008005000000000000000000F0BF0000000000000000000000000000F03F0000000000000000000000000000E03F0000000000000040000000000000F03F000000000000000000000000000008400000000000000000000000000000F03F0000000000000840000000000000F0BF0000000000000000000000000000F03F'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 14, 'Curve Polygon 3dm, SRID=4326', 'SRID=4326;CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2))', '010A000060E61000000200000001080000400700000000000000000000C000000000000000000000000000000000000000000000F0BF000000000000F0BF0000000000000040000000000000000000000000000000000000000000001040000000000000F03F000000000000F0BF000000000000184000000000000000400000000000000000000000000000204000000000000000000000000000000040000000000000104000000000000000C000000000000000000000000000000000010200004005000000000000000000F0BF000000000000000000000000000000400000000000000000000000000000E03F0000000000001040000000000000F03F000000000000000000000000000018400000000000000000000000000000F03F0000000000001040000000000000F0BF00000000000000000000000000000040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 15, 'Curve Polygon 4d, SRID=4326', 'SRID=4326;CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2))', '010A0000E0E61000000200000001080000C00700000000000000000000C0000000000000000000000000000000000000000000000000000000000000F0BF000000000000F0BF000000000000F03F00000000000000400000000000000000000000000000000000000000000000400000000000001040000000000000F03F000000000000F0BF000000000000084000000000000018400000000000000040000000000000000000000000000010400000000000002040000000000000000000000000000000400000000000000040000000000000104000000000000000C000000000000000000000000000000000000000000000000001020000C005000000000000000000F0BF0000000000000000000000000000F03F00000000000000400000000000000000000000000000E03F00000000000000400000000000001040000000000000F03F0000000000000000000000000000084000000000000018400000000000000000000000000000F03F00000000000008400000000000001040000000000000F0BF0000000000000000000000000000F03F0000000000000040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 16, 'Multi Curve', 'MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))', '010B0000000200000001020000000400000000000000000014400000000000001440000000000000084000000000000014400000000000000840000000000000084000000000000000000000000000000840010800000003000000000000000000000000000000000000000000000000000040000000000000F03F00000000000000400000000000000040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 17, 'Multi Curve, SRID=4326', 'SRID=4326;MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))', '010B000020E61000000200000001020000000400000000000000000014400000000000001440000000000000084000000000000014400000000000000840000000000000084000000000000000000000000000000840010800000003000000000000000000000000000000000000000000000000000040000000000000F03F00000000000000400000000000000040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 18, 'Multi Curve 3dz, SRID=4326', 'SRID=4326;MULTICURVE((5 5 1,3 5 2,3 3 3,0 3 1),CIRCULARSTRING(0 0 0,2 1 3,2 2 1))', '010B0000A0E61000000200000001020000800400000000000000000014400000000000001440000000000000F03F00000000000008400000000000001440000000000000004000000000000008400000000000000840000000000000084000000000000000000000000000000840000000000000F03F0108000080030000000000000000000000000000000000000000000000000000000000000000000040000000000000F03F000000000000084000000000000000400000000000000040000000000000F03F'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 19, 'Multi Curve 3dm, SRID=4326', 'SRID=4326;MULTICURVEM((5 5 3,3 5 2,3 3 1,0 3 1),CIRCULARSTRINGM(0 0 0,2 1 -2,2 2 2))', '010B000060E61000000200000001020000400400000000000000000014400000000000001440000000000000084000000000000008400000000000001440000000000000004000000000000008400000000000000840000000000000F03F00000000000000000000000000000840000000000000F03F0108000040030000000000000000000000000000000000000000000000000000000000000000000040000000000000F03F00000000000000C0000000000000004000000000000000400000000000000040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 20, 'Multi Curve 4d, SRID=4326', 'SRID=4326;MULTICURVE((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),CIRCULARSTRING(0 0 0 0,2 1 3 -2,2 2 1 2))', '010B0000E0E61000000200000001020000C00400000000000000000014400000000000001440000000000000F03F00000000000008400000000000000840000000000000144000000000000000400000000000000040000000000000084000000000000008400000000000000840000000000000F03F00000000000000000000000000000840000000000000F03F000000000000F03F01080000C00300000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000F03F000000000000084000000000000000C000000000000000400000000000000040000000000000F03F0000000000000040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 21, 'Multi Surface', 'MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))', '010C00000002000000010A0000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000010300000001000000050000000000000000001C4000000000000020400000000000002440000000000000244000000000000018400000000000002C40000000000000104000000000000026400000000000001C400000000000002040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 22, 'Multi Surface, SRID=4326', 'SRID=4326;MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))', '010C000020E610000002000000010A0000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000010300000001000000050000000000000000001C4000000000000020400000000000002440000000000000244000000000000018400000000000002C40000000000000104000000000000026400000000000001C400000000000002040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 23, 'Multi Surface 3dz, SRID=4326', 'SRID=4326;MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7)))', '010C0000A0E610000002000000010A0000800200000001080000800700000000000000000000C000000000000000000000000000000000000000000000F0BF000000000000F0BF000000000000F03F000000000000000000000000000000000000000000000040000000000000F03F000000000000F0BF000000000000084000000000000000400000000000000000000000000000104000000000000000000000000000000040000000000000004000000000000000C000000000000000000000000000000000010200008005000000000000000000F0BF0000000000000000000000000000F03F0000000000000000000000000000E03F0000000000000040000000000000F03F000000000000000000000000000008400000000000000000000000000000F03F0000000000000840000000000000F0BF0000000000000000000000000000F03F010300008001000000050000000000000000001C4000000000000020400000000000001C4000000000000024400000000000002440000000000000144000000000000018400000000000002C4000000000000008400000000000001040000000000000264000000000000010400000000000001C4000000000000020400000000000001C40'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 24, 'Multi Surface 3dm, SRID=4326', 'SRID=4326;MULTISURFACEM(CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8)))', '010C000060E610000002000000010A0000400200000001080000400700000000000000000000C000000000000000000000000000000000000000000000F0BF000000000000F0BF0000000000000040000000000000000000000000000000000000000000001040000000000000F03F000000000000F0BF000000000000184000000000000000400000000000000000000000000000204000000000000000000000000000000040000000000000104000000000000000C000000000000000000000000000000000010200004005000000000000000000F0BF000000000000000000000000000000400000000000000000000000000000E03F0000000000001040000000000000F03F000000000000000000000000000018400000000000000000000000000000F03F0000000000001040000000000000F0BF00000000000000000000000000000040010300004001000000050000000000000000001C400000000000002040000000000000204000000000000024400000000000002440000000000000144000000000000018400000000000002C40000000000000F03F0000000000001040000000000000264000000000000018400000000000001C4000000000000020400000000000002040'); INSERT INTO serialize_test( id, description, ewkt, serialized ) VALUES ( 25, 'Multi Surface 4d, SRID=4326', 'SRID=4326;MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8)))', '010C0000E0E610000002000000010A0000C00200000001080000C00700000000000000000000C0000000000000000000000000000000000000000000000000000000000000F0BF000000000000F0BF000000000000F03F00000000000000400000000000000000000000000000000000000000000000400000000000001040000000000000F03F000000000000F0BF000000000000084000000000000018400000000000000040000000000000000000000000000010400000000000002040000000000000000000000000000000400000000000000040000000000000104000000000000000C000000000000000000000000000000000000000000000000001020000C005000000000000000000F0BF0000000000000000000000000000F03F00000000000000400000000000000000000000000000E03F00000000000000400000000000001040000000000000F03F0000000000000000000000000000084000000000000018400000000000000000000000000000F03F00000000000008400000000000001040000000000000F0BF0000000000000000000000000000F03F000000000000004001030000C001000000050000000000000000001C4000000000000020400000000000001C400000000000002040000000000000244000000000000024400000000000001440000000000000144000000000000018400000000000002C400000000000000840000000000000F03F00000000000010400000000000002640000000000000104000000000000018400000000000001C4000000000000020400000000000001C400000000000002040'); SELECT id, CASE WHEN ewkt = ST_asEWKT(serialized::geometry) THEN 'pass' ELSE 'fail' END AS result FROM serialize_test ORDER BY id; SELECT id, CASE WHEN ST_asEWKB(geomFromEWKT(ewkt)) = serialized THEN 'pass' ELSE 'fail' END AS result FROM serialize_test ORDER BY id; DROP TABLE serialize_test; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/simplify.sql��������������������������������������������������������0000644�0000000�0000000�00000003036�12052403731�017606� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat all tests with the new function names. SELECT '1', ST_astext(ST_Simplify('LINESTRING(0 0, 0 10, 0 51, 50 20, 30 20, 7 32)', 2)); SELECT '2', ST_astext(ST_Simplify('LINESTRING(0 0 3, 0 10 6, 0 51 1, 50 20 6, 30 20 9, 7 32 10)', 2)); SELECT '3', ST_astext(ST_Simplify('LINESTRINGM(0 0 3, 0 10 6, 0 51 1, 50 20 6, 30 20 9, 7 32 10)', 2)); SELECT '4', ST_astext(ST_Simplify('LINESTRING(0 0 3 2, 0 10 6 1, 0 51 1 6, 50 20 6 7, 30 20 9 9, 7 32 10 5)', 2)); SELECT '5', ST_astext(ST_Simplify('MULTIPOINT(0 0 3 2, 0 10 6 1, 0 51 1 6, 50 20 6 7, 30 20 9 9, 7 32 10 5)', 20)); SELECT '6', ST_astext(ST_Simplify('MULTILINESTRING((0 0 3 2, 0 10 6 1, 0 51 1 6, 50 20 6 7, 30 20 9 9, 7 32 10 5), (0 0 4 3, 1 1 2 3, 20 20 5 30))', 20)); SELECT '7', ST_astext(ST_Simplify('POLYGON((0 0 3 2, 0 10 6 1, 0 51 1 6, 50 20 6 7, 30 20 9 9, 7 32 10 5, 0 0 3 2), (1 1 4 3, 1 3 2 3, 18 18 5 30, 1 1 4 3))', 20)); SELECT '8', ST_astext(ST_Simplify('POLYGON((0 0 3 2, 0 10 6 1, 0 51 1 6, 50 20 6 7, 30 20 9 9, 7 32 10 5, 0 0 3 2), (1 1 4 3, 1 3 2 3, 18 18 5 30, 1 1 4 3))', 1)); SELECT '9', ST_astext(ST_Simplify('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 8 5, 5 5))', 20)); SELECT '10', ST_astext(ST_Simplify('LINESTRING(0 0, 0 10)', 20)); SELECT '11', ST_astext(ST_Simplify('MULTIPOLYGON(((100 100, 100 130, 130 130, 130 100, 100 100)), ((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 8 5, 5 5)) )', 20)); SELECT '12', ST_astext(ST_Simplify('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 8 5, 5 5)),((100 100, 100 130, 130 130, 130 100, 100 100)))', 20)); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_bdpoly.sql��������������������������������������������������0000644�0000000�0000000�00000006763�11761546422�021022� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat all tests with the new function names. -- Single 3dz polygon w/out holes select 'BuildArea', ST_Equals(ST_buildarea('SRID=2;LINESTRING(0 0 2, 10 0 4, 10 10 6, 0 10 8, 0 0 10)'::geometry), 'SRID=2;POLYGON((0 0 10,0 10 8,10 10 6,10 0 4,0 0 2))'::geometry ); -- Single 3dz polygon with holes select 'BuildArea', ST_Equals(ST_buildarea('SRID=3;MULTILINESTRING((0 0 2, 10 0 4, 10 10 6, 0 10 8, 0 0 10),(2 2 1, 2 4 2, 4 4 3, 4 2 4, 2 2 5),(5 5 10, 5 7 9, 7 7 8, 7 5 7, 5 5 6))'::geometry), 'SRID=3;POLYGON((0 0 10,0 10 8,10 10 6,10 0 4,0 0 2),(2 2 5,4 2 4,4 4 3,2 4 2,2 2 1),(5 5 6,7 5 7,7 7 8,5 7 9,5 5 10))'::geometry); -- Single 3dm polygon with holes (M is currently discarded) select 'BuildArea', ST_Equals(ST_buildarea('SRID=3;MULTILINESTRINGM((0 0 2, 10 0 4, 10 10 6, 0 10 8, 0 0 10),(2 2 1, 2 4 2, 4 4 3, 4 2 4, 2 2 5),(5 5 10, 5 7 9, 7 7 8, 7 5 7, 5 5 6))'::geometry), 'SRID=3;POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,4 4,2 4,2 2),(5 5,7 5,7 7,5 7,5 5))'::geometry); -- Single 4d polygon with holes (M is currently discarded) select 'BuildArea', ST_Equals(ST_buildarea('SRID=3;MULTILINESTRING((0 0 2 9, 10 0 4 9, 10 10 6 9, 0 10 8 9, 0 0 10 9),(2 2 1 9, 2 4 2 9, 4 4 3 9, 4 2 4 9, 2 2 5 9),(5 5 10 9, 5 7 9 9, 7 7 8 9, 7 5 7 9, 5 5 6 9))'::geometry),'SRID=3;POLYGON((0 0 10,0 10 8,10 10 6,10 0 4,0 0 2),(2 2 5,4 2 4,4 4 3,2 4 2,2 2 1),(5 5 6,7 5 7,7 7 8,5 7 9,5 5 10))'::geometry); -- Multi 4d polygon with holes (M is currently discarded) select 'BuildArea', ST_Equals(ST_buildarea('SRID=3;MULTILINESTRING( (0 0 2 9, 10 0 4 9, 10 10 6 9, 0 10 8 9, 0 0 10 9), (2 2 1 9, 2 4 2 9, 4 4 3 9, 4 2 4 9, 2 2 5 9), (5 5 10 9, 5 7 9 9, 7 7 8 9, 7 5 7 9, 5 5 6 9), (20 0 2 9,30 0 4 9,30 10 6 9,20 10 8 9,20 0 10 9), (22 2 1 9,22 4 2 9,24 4 3 9,24 2 4 9,22 2 5 9), (25 5 10 9,25 7 9 9,27 7 8 9,27 5 7 9,25 5 6 9))'::geometry), 'SRID=3;MULTIPOLYGON(((0 0 10,0 10 8,10 10 6,10 0 4,0 0 2),(2 2 5,4 2 4,4 4 3,2 4 2,2 2 1),(5 5 6,7 5 7,7 7 8,5 7 9,5 5 10)),((20 0 10,20 10 8,30 10 6,30 0 4,20 0 2),(22 2 5,24 2 4,24 4 3,22 4 2,22 2 1),(25 5 6,27 5 7,27 7 8,25 7 9,25 5 10)))'::geometry); -- Multi 2d polygon with holes (OGC doesn't support higher dims) select 'BdMPolyFromText', ST_Equals(ST_BdMPolyFromText('MULTILINESTRING( (0 0, 10 0, 10 10, 0 10, 0 0), (2 2, 2 4, 4 4, 4 2, 2 2), (5 5, 5 7, 7 7, 7 5, 5 5), (20 0,30 0,30 10,20 10,20 0), (22 2,22 4,24 4,24 2,22 2), (25 5,25 7,27 7,27 5,25 5))', 3), 'SRID=3;MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,4 4,2 4,2 2),(5 5,7 5,7 7,5 7,5 5)),((20 0,20 10,30 10,30 0,20 0),(22 2,24 2,24 4,22 4,22 2),(25 5,27 5,27 7,25 7,25 5)))'::geometry); -- Single 2d polygon with holes (OGC doesn't support higher dims) select 'BdPolyFromText', ST_Equals(ST_BdPolyFromText('MULTILINESTRING((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2),(5 5, 5 7, 7 7, 7 5, 5 5))', 3), 'SRID=3;POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,4 4,2 4,2 2),(5 5,7 5,7 7,5 7,5 5))'::geometry); -- Invalid input (not a linestring) to BdPolyFromText and BdMPolyFromText select ST_BdPolyFromText('POINT(0 0)', 3); select ST_BdMPolyFromText('POINT(0 0)', 3); -- MultiPolygon forming input to BdPolyFromText select ST_BdPolyFromText('MULTILINESTRING( (0 0, 10 0, 10 10, 0 10, 0 0), (2 2, 2 4, 4 4, 4 2, 2 2), (5 5, 5 7, 7 7, 7 5, 5 5), (20 0,30 0,30 10,20 10,20 0), (22 2,22 4,24 4,24 2,22 2), (25 5,25 7,27 7,27 5,25 5))', 3); -- SinglePolygon forming input to BdMPolyFromText select 'BdMPolyFromText', ST_asewkt(ST_BdMPolyFromText('MULTILINESTRING((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2),(5 5, 5 7, 7 7, 7 5, 5 5))', 3)); �������������postgis-2.1.2+dfsg.orig/regress/node_expected�������������������������������������������������������0000644�0000000�0000000�00000000215�11722777314�017774� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t1|SRID=10;MULTILINESTRING((0 0,5 0),(5 -5,5 0),(5 0,10 0),(5 0,5 5)) t2|SRID=10;MULTILINESTRING((0 0,8 0),(8 0,10 0,15 0,20 0),(20 0,25 0)) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-multisurface.sql���������������������������������������������0000644�0000000�0000000�00000033633�11722777314�021705� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat these tests with the new function names. SELECT 'ndims01', ST_ndims(ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2)), ((7 8 7 8, 10 10 5 5, 6 14 3 1, 4 11 4 6, 7 8 7 8)))')); SELECT 'geometrytype01', geometrytype(ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2)), ((7 8 7 8, 10 10 5 5, 6 14 3 1, 4 11 4 6, 7 8 7 8), (9 9 7 8, 8 12 7 8, 7 10 7 8, 9 9 7 8)))')); SELECT 'ndims02', ST_ndims(ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7), (9 9 7, 8 12 7, 7 10 7, 9 9 7)))')); SELECT 'geometrytype02', geometrytype(ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7), (9 9 7, 8 12 7, 7 10 7, 9 9 7)))')); SELECT 'ndims03', ST_ndims(ST_geomfromewkt('MULTISURFACEM(CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 2, 0 0 4, 1 -1 6, 2 0 8, 0 2 4, -2 0 0), (-1 0 2, 0 0.5 4, 1 0 6, 0 1 4, -1 0 2)), ((7 8 8, 10 10 5, 6 14 1, 4 11 6, 7 8 8), (9 9 8, 8 12 8, 7 10 8, 9 9 8)))')); SELECT 'geometrytype03', geometrytype(ST_geomfromewkt('MULTISURFACEM(CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 2, 0 0 4, 1 -1 6, 2 0 8, 0 2 4, -2 0 0), (-1 0 2, 0 0.5 4, 1 0 6, 0 1 4, -1 0 2)), ((7 8 8, 10 10 5, 6 14 1, 4 11 6, 7 8 8)))')); SELECT 'ndims04', ST_ndims(ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0)), ((7 8, 10 10, 6 14, 4 11, 7 8)))')); SELECT 'geometrytype04', geometrytype(ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0)), ((7 8, 10 10, 6 14, 4 11, 7 8)))')); CREATE TABLE public.multisurface (id INTEGER, description VARCHAR, the_geom_2d GEOMETRY(MULTISURFACE), the_geom_3dm GEOMETRY(MULTISURFACEM), the_geom_3dz GEOMETRY(MULTISURFACEZ), the_geom_4d GEOMETRY(MULTISURFACEZM)); INSERT INTO public.multisurface ( id, description ) VALUES ( 1, 'multisurface'); UPDATE public.multisurface SET the_geom_4d = ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2)), ((7 8 7 8, 10 10 5 5, 6 14 3 1, 4 11 4 6, 7 8 7 8)))') WHERE id = 1; UPDATE public.multisurface SET the_geom_3dz = ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7)))') WHERE id = 1; UPDATE public.multisurface SET the_geom_3dm = ST_geomfromewkt('MULTISURFACEM(CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 2, 0 0 4, 1 -1 6, 2 0 8, 0 2 4, -2 0 0), (-1 0 2, 0 0.5 4, 1 0 6, 0 1 4, -1 0 2)), ((7 8 8, 10 10 5, 6 14 1, 4 11 6, 7 8 8)))') WHERE id = 1; UPDATE public.multisurface SET the_geom_2d = ST_geomfromewkt('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0)), ((7 8, 10 10, 6 14, 4 11, 7 8)))') WHERE id = 1; -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(asbinary(the_geom_2d), 'hex') FROM public.multisurface; --SELECT 'asbinary02', encode(asbinary(the_geom_3dm), 'hex') FROM public.multisurface; --SELECT 'asbinary03', encode(asbinary(the_geom_3dz), 'hex') FROM public.multisurface; --SELECT 'asbinary04', encode(asbinary(the_geom_4d), 'hex') FROM public.multisurface; -- --SELECT 'asewkb01', encode(asewkb(the_geom_2d), 'hex') FROM public.multisurface; --SELECT 'asewkb02', encode(asewkb(the_geom_3dm), 'hex') FROM public.multisurface; --SELECT 'asewkb03', encode(asewkb(the_geom_3dz), 'hex') FROM public.multisurface; --SELECT 'asewkb04', encode(asewkb(the_geom_4d), 'hex') FROM public.multisurface; SELECT 'ST_CurveToLine-201', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine-202', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine-203', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine-204', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine-401', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine-402', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine-403', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine-404', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine01', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine02', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine03', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; SELECT 'ST_CurveToLine04', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multisurface; -- TODO: ST_SnapToGrid is required to remove platform dependent precision -- issues. Until ST_SnapToGrid is updated to work against curves, these -- tests cannot be run. --SELECT 'ST_LineToCurve01', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_2d))) FROM public.multisurface; --SELECT 'ST_LineToCurve02', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dm))) FROM public.multisurface; --SELECT 'ST_LineToCurve03', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dz))) FROM public.multisurface; --SELECT 'ST_LineToCurve04', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_4d))) FROM public.multisurface; -- Repeat tests with new function names. SELECT 'astext01', ST_astext(the_geom_2d) FROM public.multisurface; SELECT 'astext02', ST_astext(the_geom_3dm) FROM public.multisurface; SELECT 'astext03', ST_astext(the_geom_3dz) FROM public.multisurface; SELECT 'astext04', ST_astext(the_geom_4d) FROM public.multisurface; SELECT 'asewkt01', ST_asewkt(the_geom_2d) FROM public.multisurface; SELECT 'asewkt02', ST_asewkt(the_geom_3dm) FROM public.multisurface; SELECT 'asewkt03', ST_asewkt(the_geom_3dz) FROM public.multisurface; SELECT 'asewkt04', ST_asewkt(the_geom_4d) FROM public.multisurface; -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(ST_asbinary(the_geom_2d), 'hex') FROM public.multisurface; --SELECT 'asbinary02', encode(ST_asbinary(the_geom_3dm), 'hex') FROM public.multisurface; --SELECT 'asbinary03', encode(ST_asbinary(the_geom_3dz), 'hex') FROM public.multisurface; --SELECT 'asbinary04', encode(ST_asbinary(the_geom_4d), 'hex') FROM public.multisurface; -- --SELECT 'asewkb01', encode(ST_asewkb(the_geom_2d), 'hex') FROM public.multisurface; --SELECT 'asewkb02', encode(ST_asewkb(the_geom_3dm), 'hex') FROM public.multisurface; --SELECT 'asewkb03', encode(ST_asewkb(the_geom_3dz), 'hex') FROM public.multisurface; --SELECT 'asewkb04', encode(ST_asewkb(the_geom_4d), 'hex') FROM public.multisurface; SELECT 'box2d01', box2d(the_geom_2d) FROM public.multisurface; SELECT 'box2d02', box2d(the_geom_3dm) FROM public.multisurface; SELECT 'box2d03', box2d(the_geom_3dz) FROM public.multisurface; SELECT 'box2d04', box2d(the_geom_4d) FROM public.multisurface; SELECT 'box3d01', box3d(the_geom_2d) FROM public.multisurface; SELECT 'box3d02', box3d(the_geom_3dm) FROM public.multisurface; SELECT 'box3d03', box3d(the_geom_3dz) FROM public.multisurface; SELECT 'box3d04', box3d(the_geom_4d) FROM public.multisurface; SELECT 'isValid01', ST_IsValid(the_geom_2d) FROM public.multisurface; SELECT 'isValid02', ST_IsValid(the_geom_3dm) FROM public.multisurface; SELECT 'isValid03', ST_IsValid(the_geom_3dz) FROM public.multisurface; SELECT 'isValid04', ST_IsValid(the_geom_4d) FROM public.multisurface; SELECT 'dimension01', ST_dimension(the_geom_2d) FROM public.multisurface; SELECT 'dimension02', ST_dimension(the_geom_3dm) FROM public.multisurface; SELECT 'dimension03', ST_dimension(the_geom_3dz) FROM public.multisurface; SELECT 'dimension04', ST_dimension(the_geom_4d) FROM public.multisurface; SELECT 'numGeometries01', ST_numGeometries(the_geom_2d) FROM public.multisurface; SELECT 'numGeometries02', ST_numGeometries(the_geom_3dm) FROM public.multisurface; SELECT 'numGeometries03', ST_numGeometries(the_geom_3dz) FROM public.multisurface; SELECT 'numGeometries04', ST_numGeometries(the_geom_4d) FROM public.multisurface; SELECT 'geometryN-201', ST_asEWKT(ST_geometryN(the_geom_2d, 2)) FROM public.multisurface; SELECT 'geometryN-202', ST_asEWKT(ST_geometryN(the_geom_3dm, 2)) FROM public.multisurface; SELECT 'geometryN-203', ST_asEWKT(ST_geometryN(the_geom_3dz, 2)) FROM public.multisurface; SELECT 'geometryN-204', ST_asEWKT(ST_geometryN(the_geom_4d, 2)) FROM public.multisurface; SELECT 'geometryN-301', (ST_geometryN(the_geom_2d, 3) is null) FROM public.multisurface; SELECT 'geometryN-302', (ST_geometryN(the_geom_3dm, 3) is null) FROM public.multisurface; SELECT 'geometryN-303', (ST_geometryN(the_geom_3dz, 3) is null) FROM public.multisurface; SELECT 'geometryN-304', (ST_geometryN(the_geom_4d, 3) is null) FROM public.multisurface; SELECT DropGeometryColumn('public', 'multisurface', 'the_geom_2d'); SELECT DropGeometryColumn('public', 'multisurface', 'the_geom_3dm'); SELECT DropGeometryColumn('public', 'multisurface', 'the_geom_3dz'); SELECT DropGeometryColumn('public', 'multisurface', 'the_geom_4d'); DROP TABLE public.multisurface; �����������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/delaunaytriangles.sql�����������������������������������������������0000644�0000000�0000000�00000001224�12141651064�021465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- TODO: normalize ! SELECT 1, ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9)'::geometry)); SELECT 2, ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry)); SELECT 3, ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry, 2)); SELECT 4, ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry, 2, 1)); SELECT 5, ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9)'::geometry, 0.0, 2)); SELECT 6, ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry, 0.0, 2)); SELECT 7, ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry, 2.0, 2)); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/node.sql������������������������������������������������������������0000644�0000000�0000000�00000000723�11722777314�016715� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Node two crossing lines select 't1', st_asewkt(st_node( 'SRID=10;MULTILINESTRING((0 0, 10 0),(5 -5, 5 5))' )); -- Node two overlapping lines select 't2', st_asewkt(st_node( 'SRID=10;MULTILINESTRING((0 0, 10 0, 20 0),(25 0, 15 0, 8 0))' )); -- Node a self-intersecting line -- NOTE: requires GEOS 3.3.2 which is still unreleased at time of writing -- see http://trac.osgeo.org/geos/ticket/482 --select st_node('SRID=10;LINESTRING(0 0, 10 10, 0 10, 10 0)'); ���������������������������������������������postgis-2.1.2+dfsg.orig/regress/removepoint_expected������������������������������������������������0000644�0000000�0000000�00000000721�11722777314�021420� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: Can't remove points from a single segment line ERROR: Point index out of range (0..2) ERROR: Point index out of range (0..2) LINESTRING(1 1,2 2) LINESTRING(0 0,1 1) LINESTRING(1 1 1,2 2 2) LINESTRING(0 0 0,1 1 1) LINESTRINGM(1 1 1,2 2 2) LINESTRINGM(0 0 0,1 1 1) LINESTRING(1 1 1 1,2 2 2 2) LINESTRING(0 0 0 0,1 1 1 1) LINESTRING(0 0 0 0,1 1 1 1,3 3 3 3,4 4 4 4,5 5 5 5,6 6 6 6,7 7 7 7) LINESTRING(0 0 0 0,1 1 1 1,2 2 2 2,3 3 3 3,5 5 5 5,6 6 6 6,7 7 7 7) �����������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_management_expected�����������������������������������������0000644�0000000�0000000�00000000115�12030215310�022664� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1 The result: public.test_pt dropped. Unexistant: public.unexistent dropped. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_index.sql���������������������������������������������������0000644�0000000�0000000�00000000662�11722777314�020633� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- build a larger database \i regress_lots_of_points.sql --- test some of the searching capabilities -- GiST index CREATE INDEX quick_gist on test using gist (the_geom); select num,ST_astext(the_geom) from test where the_geom && 'BOX3D(125 125,135 135)'::box3d order by num; set enable_seqscan = off; select num,ST_astext(the_geom) from test where the_geom && 'BOX3D(125 125,135 135)'::box3d order by num; DROP TABLE test; ������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_ogc.sql�����������������������������������������������������0000644�0000000�0000000�00000032040�12315271514�020255� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- Tests for GEOS/JTS implemented functions --- --- -- Repeat all tests with new function names. SET client_min_messages TO NOTICE; SELECT 'buffer', ST_astext(ST_SnapToGrid(ST_buffer('POINT(0 0)'::geometry, 1, 2), 1.0e-6)); SELECT 'geomunion', ST_astext(ST_union('POINT(0 0)'::geometry, 'POINT(1 1)'::geometry)); SELECT 'convexhull', ST_asewkt(ST_convexhull('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry)); SELECT 'relate', ST_relate('POINT(0 0)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry); SELECT 'relate', ST_relate('POINT(0 0)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry, 'F0FFFF*02'); SELECT 'relate', ST_relate('POINT(0 0)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry, 'F0FFF0*02'); SELECT 'disjoint', ST_disjoint('POINT(0 0)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry); SELECT 'touches', ST_touches('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry); SELECT 'intersects', ST_intersects('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry); SELECT 'crosses', ST_crosses('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry); SELECT 'crosses', ST_crosses('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(-4 0, 1 1)'::geometry); -- PIP - point within polygon SELECT 'within100', ST_within('POINT(5 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on vertex of polygon SELECT 'within101', ST_within('POINT(0 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point outside polygon SELECT 'within102', ST_within('POINT(-1 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on edge of polygon SELECT 'within103', ST_within('POINT(0 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point in line with polygon edge SELECT 'within104', ST_within('POINT(0 12)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point vertically aligned with polygon vertex SELECT 'within105', ST_within(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'within106', ST_within(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'disjoint100', ST_disjoint('POINT(5 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon vertex SELECT 'disjoint101', ST_disjoint('POINT(0 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point outside polygon SELECT 'disjoint102', ST_disjoint('POINT(-1 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon edge SELECT 'disjoint103', ST_disjoint('POINT(0 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point in line with polygon edge SELECT 'disjoint104', ST_disjoint('POINT(0 12)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point vertically aligned with polygon vertex SELECT 'disjoint105', ST_disjoint(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'disjoint106', ST_disjoint(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'disjoint150', ST_disjoint('POINT(5 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon vertex SELECT 'disjoint151', ST_disjoint('POINT(0 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point outside polygon SELECT 'disjoint152', ST_disjoint('POINT(-1 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon edge SELECT 'disjoint153', ST_disjoint('POINT(0 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point in line with polygon edge SELECT 'disjoint154', ST_disjoint('POINT(0 12)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point vertically aligned with polygon vertex SELECT 'disjoint155', ST_disjoint(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'disjoint156', ST_disjoint(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'intersects100', ST_intersects('POINT(5 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon vertex SELECT 'intersects101', ST_intersects('POINT(0 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point outside polygon SELECT 'intersects102', ST_intersects('POINT(-1 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon edge SELECT 'intersects103', ST_intersects('POINT(0 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point in line with polygon edge SELECT 'intersects104', ST_intersects('POINT(0 12)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point vertically aligned with polygon vertex SELECT 'intersects105', ST_intersects(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'intersects106', ST_intersects(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'intersects150', ST_intersects('POINT(5 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon vertex SELECT 'intersects151', ST_intersects('POINT(0 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point outside polygon SELECT 'intersects152', ST_intersects('POINT(-1 0)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point on polygon edge SELECT 'intersects153', ST_intersects('POINT(0 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point in line with polygon edge SELECT 'intersects154', ST_intersects('POINT(0 12)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); -- PIP - point vertically aligned with polygon vertex SELECT 'intersects155', ST_intersects(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'intersects156', ST_intersects(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'contains100', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(5 5)'::geometry); -- PIP - point on vertex of polygon SELECT 'contains101', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(0 0)'::geometry); -- PIP - point outside polygon SELECT 'contains102', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(-1 0)'::geometry); -- PIP - point on edge of polygon SELECT 'contains103', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(0 5)'::geometry); -- PIP - point in line with polygon edge SELECT 'contains104', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(0 12)'::geometry); -- PIP - point vertically aligned with polygon vertex SELECT 'contains105', ST_contains(ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631), ST_GeomFromText('POINT(521513 5377804)', 32631)); -- PIP - repeated vertex SELECT 'contains106', ST_contains(ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631), ST_GeomFromText('POINT(521513 5377804)', 32631)); -- moved here from regress.sql select 'within119', ST_within('LINESTRING(-1 -1, -1 101, 101 101, 101 -1)'::GEOMETRY,'BOX3D(0 0, 100 100)'::BOX3D); select 'within120', ST_within('LINESTRING(-1 -1, -1 100, 101 100, 101 -1)'::GEOMETRY,'BOX3D(0 0, 100 100)'::BOX3D); SELECT 'contains110', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'LINESTRING(1 10, 9 10, 9 8)'::geometry); SELECT 'contains111', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'LINESTRING(1 10, 10 10, 10 8)'::geometry); SELECT 'within130', ST_Within('LINESTRING(1 10, 9 10, 9 8)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); SELECT 'within131', ST_Within('LINESTRING(1 10, 10 10, 10 8)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); SELECT 'overlaps', ST_overlaps('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry,'POINT(5 5)'::geometry); SELECT 'isvalid', ST_isvalid('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry); SELECT 'isvalid', ST_isvalid('POLYGON((0 0, 0 10, 10 10, -5 10, 10 0, 0 0))'::geometry); SELECT 'isvalid', ST_isvalid('GEOMETRYCOLLECTION EMPTY'::geometry); SELECT 'intersection', ST_astext(ST_intersection('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry)); SELECT 'difference', ST_astext(ST_difference('LINESTRING(0 10, 0 -10)'::GEOMETRY, 'LINESTRING(0 2, 0 -2)'::GEOMETRY)); SELECT 'boundary', ST_astext(ST_boundary('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry)); SELECT 'symdifference', ST_astext(ST_symdifference('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry, 'LINESTRING(0 0, 20 20)'::geometry)); SELECT 'issimple', ST_issimple('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry); SELECT 'equals', ST_equals('LINESTRING(0 0, 1 1)'::geometry, 'LINESTRING(1 1, 0 0)'::geometry); WITH inp AS ( SELECT 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))' ::geometry as g ) SELECT 'pointonsurface', ST_Contains(g, ST_pointonsurface(g)) from inp; SELECT 'centroid', ST_astext(ST_centroid('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry)); SELECT 'exteriorring', ST_astext(ST_exteriorring(ST_PolygonFromText('POLYGON((52 18,66 23,73 9,48 6,52 18),(59 18,67 18,67 13,59 13,59 18))'))); SELECT 'polygonize_garray', ST_astext(ST_polygonize('{0102000000020000000000000000000000000000000000000000000000000024400000000000000000:0102000000020000000000000000002440000000000000000000000000000000000000000000000000:0102000000020000000000000000002440000000000000244000000000000000000000000000000000:0102000000020000000000000000002440000000000000244000000000000024400000000000000000:0102000000020000000000000000002440000000000000244000000000000000000000000000002440:0102000000020000000000000000000000000000000000244000000000000000000000000000002440:0102000000020000000000000000000000000000000000244000000000000024400000000000002440:0102000000020000000000000000000000000000000000244000000000000000000000000000000000:0102000000020000000000000000000000000000000000244000000000000024400000000000000000}'::geometry[])); SELECT 'polygonize_garray', ST_astext(ST_geometryn(ST_polygonize('{LINESTRING(0 0, 10 0):LINESTRING(10 0, 10 10):LINESTRING(10 10, 0 10):LINESTRING(0 10, 0 0)}'::geometry[]), 1)); select 'linemerge149', ST_asewkt(ST_linemerge('GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), LINESTRING(4 4, 1 1), LINESTRING(-5 -5, 0 0))'::geometry)); --- postgis-devel/2005-December/001784.html select 'intersects', ST_intersects( ST_polygonfromtext('POLYGON((0.0 0.0,1.0 0.0,1.0 1.0,1.0 0.0,0.0 0.0))'), ST_polygonfromtext('POLYGON((0.0 2.0,1.0 2.0,1.0 3.0,0.0 3.0,0.0 2.0))') ); select 'ST_GeometryN', ST_asewkt(ST_GeometryN('LINESTRING(0 0, 1 1)'::geometry, 1)); select 'ST_NumGeometries', ST_NumGeometries('LINESTRING(0 0, 1 1)'::geometry); select 'ST_Union1', ST_AsText(ST_Union(ARRAY['POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::geometry, 'POLYGON((0.5 0.5, 1.5 0.5, 1.5 1.5, 0.5 1.5, 0.5 0.5))'::geometry])); select 'ST_StartPoint1',ST_AsText(ST_StartPoint('LINESTRING(0 0, 1 1, 2 2)'::geometry)); select 'ST_EndPoint1', ST_AsText(ST_Endpoint('LINESTRING(0 0, 1 1, 2 2)'::geometry)); select 'ST_PointN1', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)'::geometry,2)); select 'ST_PointN2', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)'::geometry,3)); select 'ST_PointN3', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)'::geometry,4)); select 'ST_PointN4', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)'::geometry,0)); select 'ST_PointN5', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)'::geometry,1)); select 'ST_PointN6', ST_AsText(ST_PointN('POLYGON((0 0, 1 1, 0 1, 0 0))'::geometry,1)); -- issues with EMPTY -- select 'ST_Buffer(empty)', ST_AsText(ST_Buffer('POLYGON EMPTY'::geometry, 0.5)); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/unaryunion_expected�������������������������������������������������0000644�0000000�0000000�00000000406�11722777314�021260� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|MULTILINESTRING((0 0,5 0),(5 0,10 0),(5 -5,5 0),(5 0,5 5)) 2|POLYGON((10 5,10 0,0 0,0 10,5 10,5 15,15 15,15 5,10 5)) 3|GEOMETRYCOLLECTION(POINT(-5 4),LINESTRING(2 -10,2 0),LINESTRING(2 10,2 20),POLYGON((10 5,10 0,2 0,0 0,0 10,2 10,5 10,5 15,15 15,15 5,10 5))) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/hausdorff.sql�������������������������������������������������������0000644�0000000�0000000�00000002172�11722777314�017751� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- tests for Hausdorff distances -- polygon and polygon SELECT 'hausdorff_poly_poly', st_hausdorffdistance( 'POLYGON((0 0, 0 2, 1 2, 2 2, 2 0, 0 0))'::geometry, 'POLYGON((0.5 0.5, 0.5 2.5, 1.5 2.5, 2.5 2.5, 2.5 0.5, 0.5 0.5))'::geometry); -- 0.707106781186548 -- linestring and linestring SELECT 'hausdorff_ls_ls', st_hausdorffdistance( 'LINESTRING (0 0, 2 1)'::geometry , 'LINESTRING (0 0, 2 0)'::geometry); -- 1.0 -- other linestrings SELECT 'hausdorff_ls_ls_2', st_hausdorffdistance( 'LINESTRING (0 0, 2 0)'::geometry, 'LINESTRING (0 1, 1 2, 2 1)'::geometry); -- 2.0 -- linestring and multipoint SELECT 'hausdorff_ls_mp', st_hausdorffdistance( 'LINESTRING (0 0, 2 0)'::geometry, 'MULTIPOINT (0 1, 1 0, 2 1)'::geometry); -- 1.0 -- another linestring and linestring SELECT 'hausdorff_ls_ls_3', st_hausdorffdistance( 'LINESTRING (130 0, 0 0, 0 150)'::geometry, 'LINESTRING (10 10, 10 150, 130 10)'::geometry); -- 14.142135623730951 -- hausdorf with densification SELECT 'hausdorffdensify_ls_ls', st_hausdorffdistance( 'LINESTRING (130 0, 0 0, 0 150)'::geometry , 'LINESTRING (10 10, 10 150, 130 10)'::geometry, 0.5); -- 70.0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/clean.sql�����������������������������������������������������������0000644�0000000�0000000�00000044474�11765606072�017064� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE TABLE clean_cases (origin varchar, caseno numeric, orig geometry, valid geometry); COPY clean_cases FROM stdin; RT 1 0103000000010000000700000000000000000000400000000000000040000000000000184000000000000000C000000000000024400000000000000040000000000000244000000000000000C000000000000018400000000000000040000000000000004000000000000000C000000000000000400000000000000040 010600000003000000010300000001000000040000000000000000000040000000000000004000000000000010400000000000000000000000000000004000000000000000C0000000000000004000000000000000400103000000010000000500000000000000000020400000000000000000000000000000184000000000000000C0000000000000104000000000000000000000000000001840000000000000004000000000000020400000000000000000010300000001000000040000000000000000002040000000000000000000000000000024400000000000000040000000000000244000000000000000C000000000000020400000000000000000 RT 2 01030000000100000007000000000000000000284000000000000000C000000000000028400000000000000040000000000000304000000000000000000000000000002C40000000000000000000000000000032400000000000000040000000000000324000000000000000C0000000000000284000000000000000C0 01030000000200000006000000000000000000284000000000000000C0000000000000284000000000000000400000000000002E40000000000000E03F00000000000032400000000000000040000000000000324000000000000000C0000000000000284000000000000000C0040000000000000000002E40000000000000E03F0000000000002C400000000000000000000000000000304000000000000000000000000000002E40000000000000E03F RT 3 01030000000100000006000000000000000000004000000000000010400000000000000040000000000000184000000000000010400000000000001040000000000000184000000000000018400000000000001840000000000000104000000000000000400000000000001040 01060000000200000001030000000100000004000000000000000000004000000000000010400000000000000040000000000000184000000000000010400000000000001040000000000000004000000000000010400103000000010000000400000000000000000010400000000000001040000000000000184000000000000018400000000000001840000000000000104000000000000010400000000000001040 RT 4 01060000000200000001030000000100000007000000000000000000344000000000000000C00000000000003440000000000000004000000000000038400000000000000000000000000000364000000000000000000000000000003A4000000000000000400000000000003A4000000000000000C0000000000000344000000000000000C001030000000100000005000000000000000000344000000000000010C00000000000003A4000000000000010C00000000000003A4000000000000018C0000000000000344000000000000018C0000000000000344000000000000010C0 01060000000200000001030000000200000006000000000000000000344000000000000000C0000000000000344000000000000000400000000000003740000000000000E03F0000000000003A4000000000000000400000000000003A4000000000000000C0000000000000344000000000000000C0040000000000000000003740000000000000E03F00000000000036400000000000000000000000000000384000000000000000000000000000003740000000000000E03F01030000000100000005000000000000000000344000000000000010C00000000000003A4000000000000010C00000000000003A4000000000000018C0000000000000344000000000000018C0000000000000344000000000000010C0 RT 5 010600000001000000010300000001000000070000000000000000001C4000000000000008400000000000001C400000000000001840000000000000224000000000000014400000000000002640000000000000184000000000000026400000000000000840000000000000224000000000000014400000000000001C400000000000000840 010600000002000000010300000001000000040000000000000000001C4000000000000008400000000000001C400000000000001840000000000000224000000000000014400000000000001C4000000000000008400103000000010000000400000000000000000022400000000000001440000000000000264000000000000018400000000000002640000000000000084000000000000022400000000000001440 RT 6 010300000001000000090000000000000000002840000000000000104000000000000028400000000000001C40000000000000304000000000000018400000000000002C400000000000001440000000000000304000000000000014400000000000002C40000000000000184000000000000032400000000000001C400000000000003240000000000000104000000000000028400000000000001040 010300000003000000060000000000000000002840000000000000104000000000000028400000000000001C400000000000002E40000000000000194000000000000032400000000000001C400000000000003240000000000000104000000000000028400000000000001040050000000000000000002E4000000000000019400000000000002C4000000000000018400000000000002E400000000000001640000000000000304000000000000018400000000000002E400000000000001940040000000000000000002E4000000000000016400000000000002C400000000000001440000000000000304000000000000014400000000000002E400000000000001640 RT 7 01060000000100000001030000000100000009000000000000000000244000000000000024400000000000002440000000000000344000000000000034400000000000003440000000000000344000000000000024400000000000003E4000000000000024400000000000003E400000000000003440000000000000344000000000000034400000000000003440000000000000244000000000000024400000000000002440 010700000002000000010300000001000000070000000000000000002440000000000000244000000000000024400000000000003440000000000000344000000000000034400000000000003E4000000000000034400000000000003E40000000000000244000000000000034400000000000002440000000000000244000000000000024400102000000020000000000000000003440000000000000344000000000000034400000000000002440 RT 7.1 0103000000010000000900000000000000000028C0000000000000244000000000000028C0000000000000344000000000000000C0000000000000344000000000000000C00000000000002440000000000000204000000000000024400000000000002040000000000000344000000000000000C0000000000000344000000000000000C0000000000000244000000000000028C00000000000002440 0107000000020000000103000000010000000700000000000000000028C0000000000000244000000000000028C0000000000000344000000000000000C00000000000003440000000000000204000000000000034400000000000002040000000000000244000000000000000C0000000000000244000000000000028C0000000000000244001020000000200000000000000000000C0000000000000344000000000000000C00000000000002440 RT 8 0103000000010000000C00000000000000000034C000000000000028C000000000000034C000000000000000C0000000000000000000000000000000C0000000000000000000000000000028C000000000000024C000000000000028C000000000000024C0000000000000204000000000000000000000000000002040000000000000000000000000000000C000000000000039C000000000000000C000000000000039C0000000000000084000000000000034C0000000000000084000000000000034C000000000000028C0 01070000000200000001060000000200000001030000000100000007000000000000000000000000000000000000C0000000000000000000000000000028C000000000000024C000000000000028C000000000000024C000000000000000C000000000000024C0000000000000204000000000000000000000000000002040000000000000000000000000000000C00103000000010000000500000000000000000034C000000000000000C000000000000039C000000000000000C000000000000039C0000000000000084000000000000034C0000000000000084000000000000034C000000000000000C001050000000300000001020000000200000000000000000034C000000000000028C000000000000034C000000000000000C001020000000200000000000000000034C000000000000000C000000000000024C000000000000000C001020000000200000000000000000024C000000000000000C0000000000000000000000000000000C0 RT 9 0103000000010000000400000000000000000024400000000000003640000000000000244000000000000040400000000000003440000000000000404000000000000034400000000000003640 010300000001000000050000000000000000002440000000000000364000000000000024400000000000004040000000000000344000000000000040400000000000003440000000000000364000000000000024400000000000003640 RT 9.1 0103000000010000000600000000000000000028C0000000000000364000000000000028C00000000000004040000000000000204000000000000040400000000000002040000000000000364000000000000000C0000000000000364000000000000000C00000000000004540 0106000000030000000103000000010000000400000000000000000028C0000000000000364000000000000028C000000000000040400000000000001CC0000000000000404000000000000028C000000000000036400103000000010000000400000000000000000000C000000000000040400000000000001CC0000000000000404000000000000000C0000000000000454000000000000000C000000000000040400103000000010000000500000000000000000000C00000000000004040000000000000204000000000000040400000000000002040000000000000364000000000000000C0000000000000364000000000000000C00000000000004040 RT 10 0103000000010000000500000000000000000039C000000000000024400000000000002EC000000000000024400000000000002EC0000000000000344000000000000039C0000000000000344000000000000039C00000000000002440 0103000000010000000500000000000000000039C000000000000024400000000000002EC000000000000024400000000000002EC0000000000000344000000000000039C0000000000000344000000000000039C00000000000002440 RT 11 0103000000010000000300000000000000008042C00000000000002E4000000000000042C0000000000000304000000000008042C00000000000002E40 LINESTRING(-37 15,-36 16) RT 12 0103000000020000000500000000000000008040C00000000000002C4000000000008040C000000000000031400000000000003EC000000000000031400000000000003EC00000000000002C4000000000008040C00000000000002C400300000000000000000040C00000000000002E400000000000003FC0000000000000304000000000000040C00000000000002E40 0107000000020000000103000000010000000500000000000000008040C00000000000002C4000000000008040C000000000000031400000000000003EC000000000000031400000000000003EC00000000000002C4000000000008040C00000000000002C4001020000000200000000000000000040C00000000000002E400000000000003FC00000000000003040 RT 13.1 0103000000010000000900000000000000000039C000000000000039400000000000002EC000000000000039400000000000002EC000000000008041400000000000002EC000000000008041400000000000002EC0000000000080414000000000000039C0000000000080414000000000000039C0000000000080414000000000000039C0000000000000394000000000000039C00000000000003940 0103000000010000000900000000000000000039C000000000000039400000000000002EC000000000000039400000000000002EC000000000008041400000000000002EC000000000008041400000000000002EC0000000000080414000000000000039C0000000000080414000000000000039C0000000000080414000000000000039C0000000000000394000000000000039C00000000000003940 RT 13.2 0103000000010000000700000000000000000044C000000000000039400000000000003EC000000000000039400000000000003EC000000000008041400000000000003EC000000000008046400000000000003EC0000000000080414000000000000044C0000000000080414000000000000044C00000000000003940 010700000002000000010300000001000000050000000000000000003EC000000000008041400000000000003EC0000000000000394000000000000044C0000000000000394000000000000044C000000000008041400000000000003EC000000000008041400102000000020000000000000000003EC000000000008041400000000000003EC00000000000804640 RT 14 01030000000100000009000000000000000000004000000000000018C0000000000000004000000000000010C0000000000000104000000000000010C0000000000000204000000000000018C0000000000000244000000000000018C0000000000000244000000000000010C0000000000000204000000000000010C0000000000000104000000000000018C0000000000000004000000000000018C0 01060000000200000001030000000100000006000000000000000000004000000000000018C0000000000000004000000000000010C0000000000000104000000000000010C0000000000000184000000000000014C0000000000000104000000000000018C0000000000000004000000000000018C001030000000100000006000000000000000000184000000000000014C0000000000000204000000000000010C0000000000000244000000000000010C0000000000000244000000000000018C0000000000000204000000000000018C0000000000000184000000000000014C0 RT 15 0103000000010000000B00000000000000000040400000000000002440000000000000404000000000000034400000000000004540000000000000344000000000000045400000000000002E40000000000000454000000000000024400000000000004A4000000000000024400000000000004A4000000000000034400000000000004540000000000000344000000000000045400000000000002E400000000000004540000000000000244000000000000040400000000000002440 010700000002000000010300000001000000070000000000000000004040000000000000244000000000000040400000000000003440000000000000454000000000000034400000000000004A4000000000000034400000000000004A40000000000000244000000000000045400000000000002440000000000000404000000000000024400105000000020000000102000000020000000000000000004540000000000000344000000000000045400000000000002E4001020000000200000000000000000045400000000000002E4000000000000045400000000000002440 RT 16.1 010600000002000000010300000001000000050000000000000000003640000000000000364000000000000040400000000000003640000000000000404000000000000040400000000000003640000000000000404000000000000036400000000000003640010300000001000000050000000000000000003B400000000000003B4000000000008042400000000000003B40000000000080424000000000008042400000000000003B4000000000008042400000000000003B400000000000003B40 0106000000020000000103000000010000000700000000000000000040400000000000003B400000000000004040000000000000364000000000000036400000000000003640000000000000364000000000000040400000000000003B4000000000000040400000000000003B400000000000003B4000000000000040400000000000003B40010300000001000000070000000000000000003B4000000000000040400000000000003B4000000000008042400000000000804240000000000080424000000000008042400000000000003B4000000000000040400000000000003B40000000000000404000000000000040400000000000003B400000000000004040 RT 16.2 0106000000020000000103000000010000000500000000000000008043400000000000003640000000000080484000000000000036400000000000804840000000000000404000000000008043400000000000004040000000000080434000000000000036400103000000010000000500000000000000008047400000000000003A4000000000008049400000000000003A4000000000008049400000000000003E4000000000008047400000000000003E4000000000008047400000000000003A40 0106000000020000000103000000010000000900000000000000008048400000000000003A400000000000804840000000000000364000000000008043400000000000003640000000000080434000000000000040400000000000804840000000000000404000000000008048400000000000003E4000000000008047400000000000003E4000000000008047400000000000003A4000000000008048400000000000003A400103000000010000000500000000000000008048400000000000003E4000000000008049400000000000003E4000000000008049400000000000003A4000000000008048400000000000003A4000000000008048400000000000003E40 RT 16.3 010600000002000000010300000001000000050000000000000000804A4000000000000036400000000000804F4000000000000036400000000000804F4000000000000040400000000000804A4000000000000040400000000000804A400000000000003640010300000001000000050000000000000000804E400000000000003A400000000000804F400000000000003A400000000000804F400000000000003E400000000000804E400000000000003E400000000000804E400000000000003A40 010700000002000000010300000001000000070000000000000000804F400000000000003A400000000000804F4000000000000036400000000000804A4000000000000036400000000000804A4000000000000040400000000000804F4000000000000040400000000000804F400000000000003E400000000000804F400000000000003A400105000000020000000102000000020000000000000000804E400000000000003A400000000000804F400000000000003A400102000000030000000000000000804F400000000000003E400000000000804E400000000000003E400000000000804E400000000000003A40 RT 16.4 010600000002000000010300000001000000080000000000000000C0504000000000000036400000000000405340000000000000364000000000004053400000000000003A400000000000C053400000000000003C4000000000004053400000000000003E40000000000040534000000000000040400000000000C0504000000000000040400000000000C050400000000000003640010300000001000000060000000000000000C052400000000000003A4000000000004053400000000000003A400000000000C053400000000000003C4000000000004053400000000000003E400000000000C052400000000000003E400000000000C052400000000000003A40 0107000000020000000103000000010000000800000000000000004053400000000000003A40000000000040534000000000000036400000000000C0504000000000000036400000000000C0504000000000000040400000000000405340000000000000404000000000004053400000000000003E400000000000C053400000000000003C4000000000004053400000000000003A400105000000020000000102000000020000000000000000C052400000000000003A4000000000004053400000000000003A4001020000000300000000000000004053400000000000003E400000000000C052400000000000003E400000000000C052400000000000003A40 RT 17.1 SRID=12;010300000003000000050000000000000000004E4000000000000014C0000000000000544000000000000014C0000000000000544000000000000034400000000000004E4000000000000034400000000000004E4000000000000014C0050000000000000000804B4000000000000000000000000000805140000000000000000000000000008051400000000000002E400000000000804B400000000000002E400000000000804B40000000000000000005000000000000000040504000000000000014400000000000C0524000000000000014400000000000C0524000000000000024400000000000405040000000000000244000000000004050400000000000001440 SRID=12;0106000000030000000103000000010000000D0000000000000000004E400000000000002E400000000000004E40000000000000344000000000000054400000000000003440000000000000544000000000000014C00000000000004E4000000000000014C00000000000004E40000000000000000000000000008051400000000000000000000000000080514000000000000014400000000000C0524000000000000014400000000000C0524000000000000024400000000000805140000000000000244000000000008051400000000000002E400000000000004E400000000000002E40010300000001000000050000000000000000004E4000000000000000000000000000804B4000000000000000000000000000804B400000000000002E400000000000004E400000000000002E400000000000004E400000000000000000010300000001000000050000000000000000805140000000000000244000000000008051400000000000001440000000000040504000000000000014400000000000405040000000000000244000000000008051400000000000002440 PG 1 SRID=1;0103000000010000000100000000000000000000000000000000000000 SRID=1;POINT(0 0) PG 2 SRID=3;LINESTRING(0 0, 0 0) SRID=3;POINT(0 0) PG 3 SRID=43;MULTILINESTRING((0 0, 10 0),(20 20, 20 20)) SRID=43;GEOMETRYCOLLECTION(LINESTRING(0 0, 10 0),POINT(20 20)) PG 4 SRID=2;MULTIPOLYGON(((5 3, 7 4, 9 5, 11 6, 13 7, 5 3)),((14 14, 14 14, 14 14, 14 14))) SRID=2;GEOMETRYCOLLECTION(MULTILINESTRING((5 3,7 4),(7 4,9 5),(9 5,11 6),(11 6,13 7)),POINT(14 14)) PG 5 SRID=4;MULTILINESTRING((5 3 0, 7 4 5, 9 5 3, 11 6 4, 13 7 9, 5 3 0),(14 14 2, 14 14 3, 14 14 4, 14 14 5)) SRID=4;GEOMETRYCOLLECTION(MULTILINESTRING((5 3 0,7 4 3.625),(7 4 3.625,9 5 3.75),(9 5 3.75,11 6 5.375),(11 6 5.375,13 7 9)),POINT(14 14 2)) \. -- PG.1 : polygon with single ring with single point in it -- to be converted to a POINT -- SELECT origin,caseno, st_equals(st_collectionextract(st_makevalid(orig),1), st_collectionextract(valid,1)) AND st_equals(st_collectionextract(st_makevalid(orig),2), st_collectionextract(valid,2)) AND st_equals(st_collectionextract(st_makevalid(orig),3), st_collectionextract(valid,3)), st_isvalid(st_makevalid(orig)), -- paranoia (st_isvaliddetail(orig)).valid FROM clean_cases; SELECT '#1719.1', ST_AsEWKT(ST_MakeValid('POINT(0 0)')); SELECT '#1719.2', ST_AsEWKT(ST_MakeValid('GEOMETRYCOLLECTION(POINT(0 0),MULTIPOINT(3 4,5 2),LINESTRING(4 4, 4 4),POLYGON((0 0,10 10,0 10,10 0,0 0)))')); SELECT '#1719.3', ST_AsEWKT(ST_MakeValid('MULTIPOINT(3 4,5 2)')); DROP TABLE clean_cases; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_geohash.sql������������������������������������������������������0000644�0000000�0000000�00000002036�12140633611�020055� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- FromGeoHash SELECT 'box2dfromgeohash_01', ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'); SELECT 'box2dfromgeohash_02', ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0); SELECT 'box2dfromgeohash_03', ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', -1); SELECT 'box2dfromgeohash_04', ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 30); SELECT 'geomfromgeohash_01', ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0')); SELECT 'geomfromgeohash_02', ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0)); SELECT 'geomfromgeohash_03', ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', -1)); SELECT 'geomfromgeohash_04', ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 30)); SELECT 'pointfromgeohash_01', ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0')); SELECT 'pointfromgeohash_02', ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0)); SELECT 'pointfromgeohash_03', ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', -1)); SELECT 'pointfromgeohash_04', ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 30)); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_ogc_prep_expected�������������������������������������������0000644�0000000�0000000�00000005107�11722777314�022404� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������intersects099|t intersects100|t intersects101|t intersects102|f intersects103|t intersects104|f contains099|t contains100|t contains101|f contains102|f contains103|f contains104|f covers099|t covers100|t covers101|t covers102|f covers103|t covers104|f containsproperly099|t containsproperly100|t containsproperly101|f containsproperly102|f containsproperly103|f containsproperly104|f intersects105|t intersects105|t intersects105|t intersects106|t intersects106|t intersects106|t intersects107|f intersects107|f intersects107|f intersects108|f intersects108|f intersects108|f contains105|t contains105|t contains105|t contains106|f contains106|f contains106|f contains107|f contains107|f contains107|f contains108|f contains108|f contains108|f containsproperly105|t containsproperly105|t containsproperly105|t containsproperly106|f containsproperly106|f containsproperly106|f containsproperly107|f containsproperly107|f containsproperly107|f containsproperly108|f containsproperly108|f containsproperly108|f covers105|t covers105|t covers105|t covers106|f covers106|f covers106|f covers107|f covers107|f covers107|f covers108|f covers108|f covers108|f intersects200|t|t intersects201|t|t intersects202|t|t intersects203|t|t intersects204|f|f intersects205|t|t intersects206|t|t intersects207|t|t intersects208|t|t intersects209|f|f contains200|t|f contains201|t|f contains202|t|f contains203|f|f contains204|f|f contains205|t|f contains206|t|f contains207|t|f contains208|f|f contains209|f|f containsproperly200|t|f containsproperly201|t|f containsproperly202|f|f containsproperly203|f|f containsproperly204|f|f containsproperly205|t|f containsproperly206|t|f containsproperly207|f|f containsproperly208|f|f containsproperly209|f|f covers200|t|f covers201|t|f covers202|t|f covers203|f|f covers204|f|f covers205|t|f covers206|t|f covers207|t|f covers208|f|f covers209|f|f types100|t|f|t|f|t|t|t|f types101|t|f|t|f|t|t|t|f types102|t|f|t|f|t|t|t|f types103|f|f|f|f|f|f|f|f types104|f|f|f|f|f|f|f|f types105|f|f|f|f|f|f|f|f types106|t|t|t|t|t|t|t|t types107|t|t|t|t|t|t|t|t types108|t|t|t|t|t|t|t|t types109|t|t|t|t|t|t|f|f types110|t|t|t|t|t|t|f|f types111|t|t|t|t|t|t|f|f types112|f|f|t|f|t|t|f|f types113|f|f|t|f|t|t|f|f types114|f|f|t|f|t|t|f|f intersects310|t intersects310|t intersects310|t intersects311|t intersects311|t intersects311|t contains310|t contains310|t contains310|t contains311|f contains311|f contains311|f containsproperly310|f containsproperly310|f containsproperly310|f containsproperly311|f containsproperly311|f containsproperly311|f covers310|t covers310|t covers310|t covers311|t covers311|t covers311|t ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sharedpaths_expected������������������������������������������������0000644�0000000�0000000�00000001101�11722777314�021350� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: Operation on mixed SRID geometries t2|SRID=10;GEOMETRYCOLLECTION(MULTILINESTRING((0 0,10 0)),MULTILINESTRING EMPTY) t3|GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,MULTILINESTRING((0 0,10 0))) t4|GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,MULTILINESTRING EMPTY) t5|GEOMETRYCOLLECTION(MULTILINESTRING((20 0,30 0)),MULTILINESTRING((70 0,80 0))) ERROR: GEOSSharedPaths: IllegalArgumentException: Geometry is not lineal t7|GEOMETRYCOLLECTION(MULTILINESTRING((4 2,7 2)),MULTILINESTRING((14 7,11 6))) t8|GEOMETRYCOLLECTION(MULTILINESTRING((4 2,7 2)),MULTILINESTRING((14 7,11 6))) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/bestsrid_expected���������������������������������������������������0000644�0000000�0000000�00000003436�11775674711�020703� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|-70|999161 0|70|999061 -177|60|999001 -171|60|999002 -165|60|999003 -159|60|999004 -153|60|999005 -147|60|999006 -141|60|999007 -135|60|999008 -129|60|999009 -123|60|999010 -117|60|999011 -111|60|999012 -105|60|999013 -99|60|999014 -93|60|999015 -87|60|999016 -81|60|999017 -75|60|999018 -69|60|999019 -63|60|999020 -57|60|999021 -51|60|999022 -45|60|999023 -39|60|999024 -33|60|999025 -27|60|999026 -21|60|999027 -15|60|999028 -9|60|999029 -3|60|999030 3|60|999031 9|60|999032 15|60|999033 21|60|999034 27|60|999035 33|60|999036 39|60|999037 45|60|999038 51|60|999039 57|60|999040 63|60|999041 69|60|999042 75|60|999043 81|60|999044 87|60|999045 93|60|999046 99|60|999047 105|60|999048 111|60|999049 117|60|999050 123|60|999051 129|60|999052 135|60|999053 141|60|999054 147|60|999055 153|60|999056 159|60|999057 165|60|999058 171|60|999059 177|60|999060 -180|60|999060 180|60|999060 -177|-60|999101 -171|-60|999102 -165|-60|999103 -159|-60|999104 -153|-60|999105 -147|-60|999106 -141|-60|999107 -135|-60|999108 -129|-60|999109 -123|-60|999110 -117|-60|999111 -111|-60|999112 -105|-60|999113 -99|-60|999114 -93|-60|999115 -87|-60|999116 -81|-60|999117 -75|-60|999118 -69|-60|999119 -63|-60|999120 -57|-60|999121 -51|-60|999122 -45|-60|999123 -39|-60|999124 -33|-60|999125 -27|-60|999126 -21|-60|999127 -15|-60|999128 -9|-60|999129 -3|-60|999130 3|-60|999131 9|-60|999132 15|-60|999133 21|-60|999134 27|-60|999135 33|-60|999136 39|-60|999137 45|-60|999138 51|-60|999139 57|-60|999140 63|-60|999141 69|-60|999142 75|-60|999143 81|-60|999144 87|-60|999145 93|-60|999146 99|-60|999147 105|-60|999148 111|-60|999149 117|-60|999150 123|-60|999151 129|-60|999152 135|-60|999153 141|-60|999154 147|-60|999155 153|-60|999156 159|-60|999157 165|-60|999158 171|-60|999159 177|-60|999160 -180|-60|999160 180|-60|999160 world|999000 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-multicurve_expected������������������������������������������0000644�0000000�0000000�00000012055�11722777314�022457� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ndims01|4 geometrytype01|MULTICURVE ndims02|3 geometrytype02|MULTICURVE ndims03|3 geometrytype03|MULTICURVEM ndims04|2 geometrytype04|MULTICURVE ST_CurveToLine-201|MULTILINESTRING((5 5,3 5,3 3,0 3),(0 0,0.58578644 1.41421356)) ST_CurveToLine-202|MULTILINESTRINGM((5 5 3,3 5 2,3 3 1,0 3 1),(0 0 0,0.58578644 1.41421356 2)) ST_CurveToLine-203|MULTILINESTRING((5 5 1,3 5 2,3 3 3,0 3 1),(0 0 0,0.58578644 1.41421356 1)) ST_CurveToLine-204|MULTILINESTRING((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),(0 0 0 0,0.58578644 1.41421356 1 2)) ST_CurveToLine-401|MULTILINESTRING((5 5,3 5,3 3,0 3),(0 0,0.15224093 0.76536686,0.58578644 1.41421356)) ST_CurveToLine-402|MULTILINESTRINGM((5 5 3,3 5 2,3 3 1,0 3 1),(0 0 0,0.15224093 0.76536686 -1.5,0.58578644 1.41421356 2)) ST_CurveToLine-403|MULTILINESTRING((5 5 1,3 5 2,3 3 3,0 3 1),(0 0 0,0.15224093 0.76536686 2.25,0.58578644 1.41421356 1)) ST_CurveToLine-404|MULTILINESTRING((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),(0 0 0 0,0.15224093 0.76536686 2.25 -1.5,0.58578644 1.41421356 1 2)) ST_CurveToLine01|MULTILINESTRING((5 5,3 5,3 3,0 3),(0 0,0.00240909 0.09813535,0.00963055 0.19603428,0.02164698 0.29346095,0.03842944 0.39018064,0.05993749 0.48596036,0.08611933 0.58056935,0.11691187 0.67377971,0.15224093 0.76536686,0.19202141 0.85511019,0.23615747 0.94279347,0.28454278 1.02820549,0.33706078 1.11114047,0.39358494 1.19139861,0.45397909 1.26878657,0.51809775 1.34311791,0.58578644 1.41421356)) ST_CurveToLine02|MULTILINESTRINGM((5 5 3,3 5 2,3 3 1,0 3 1),(0 0 0,0.00240909 0.09813535 -0.1875,0.00963055 0.19603428 -0.375,0.02164698 0.29346095 -0.5625,0.03842944 0.39018064 -0.75,0.05993749 0.48596036 -0.9375,0.08611933 0.58056935 -1.125,0.11691187 0.67377971 -1.3125,0.15224093 0.76536686 -1.5,0.19202141 0.85511019 -1.6875,0.23615747 0.94279347 -1.875,0.28454278 1.02820549 -1.75,0.33706078 1.11114047 -1,0.39358494 1.19139861 -0.25,0.45397909 1.26878657 0.5,0.51809775 1.34311791 1.25,0.58578644 1.41421356 2)) ST_CurveToLine03|MULTILINESTRING((5 5 1,3 5 2,3 3 3,0 3 1),(0 0 0,0.00240909 0.09813535 0.28125,0.00963055 0.19603428 0.5625,0.02164698 0.29346095 0.84375,0.03842944 0.39018064 1.125,0.05993749 0.48596036 1.40625,0.08611933 0.58056935 1.6875,0.11691187 0.67377971 1.96875,0.15224093 0.76536686 2.25,0.19202141 0.85511019 2.53125,0.23615747 0.94279347 2.8125,0.28454278 1.02820549 2.875,0.33706078 1.11114047 2.5,0.39358494 1.19139861 2.125,0.45397909 1.26878657 1.75,0.51809775 1.34311791 1.375,0.58578644 1.41421356 1)) ST_CurveToLine04|MULTILINESTRING((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),(0 0 0 0,0.00240909 0.09813535 0.28125 -0.1875,0.00963055 0.19603428 0.5625 -0.375,0.02164698 0.29346095 0.84375 -0.5625,0.03842944 0.39018064 1.125 -0.75,0.05993749 0.48596036 1.40625 -0.9375,0.08611933 0.58056935 1.6875 -1.125,0.11691187 0.67377971 1.96875 -1.3125,0.15224093 0.76536686 2.25 -1.5,0.19202141 0.85511019 2.53125 -1.6875,0.23615747 0.94279347 2.8125 -1.875,0.28454278 1.02820549 2.875 -1.75,0.33706078 1.11114047 2.5 -1,0.39358494 1.19139861 2.125 -0.25,0.45397909 1.26878657 1.75 0.5,0.51809775 1.34311791 1.375 1.25,0.58578644 1.41421356 1 2)) astext01|MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731)) astext02|MULTICURVE M ((5 5 3,3 5 2,3 3 1,0 3 1),CIRCULARSTRING M (0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2)) astext03|MULTICURVE Z ((5 5 1,3 5 2,3 3 3,0 3 1),CIRCULARSTRING Z (0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1)) astext04|MULTICURVE ZM ((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),CIRCULARSTRING ZM (0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2)) asewkt01|MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731)) asewkt02|MULTICURVEM((5 5 3,3 5 2,3 3 1,0 3 1),CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2)) asewkt03|MULTICURVE((5 5 1,3 5 2,3 3 3,0 3 1),CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1)) asewkt04|MULTICURVE((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2)) ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. dimension01|1 dimension02|1 dimension03|1 dimension04|1 numGeometries01|2 numGeometries02|2 numGeometries03|2 numGeometries04|2 geometryN-201|CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731) geometryN-202|CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2) geometryN-203|CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1) geometryN-204|CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2) geometryN-301|t geometryN-302|t geometryN-303|t geometryN-304|t public.multicurve.the_geom_2d effectively removed. public.multicurve.the_geom_3dm effectively removed. public.multicurve.the_geom_3dz effectively removed. public.multicurve.the_geom_4d effectively removed. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/geography.sql�������������������������������������������������������0000644�0000000�0000000�00000065305�11777341326�017764� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) VALUES ( '4326', 'EPSG', '4326', 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]', '+proj=longlat +datum=WGS84 +no_defs' ); -- Do cached and uncached distance agree? SELECT c, abs(ST_Distance(ply::geography, pt::geography) - _ST_DistanceUnCached(ply::geography, pt::geography)) < 0.01 FROM ( VALUES ('geog_distance_cached_1a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1b', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1c', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1e', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1f', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1g', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1h', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)') ) AS u(c,ply,pt); -- Does tolerance based distance work cached? Inside tolerance SELECT c, ST_DWithin(ply::geography, pt::geography, 3000) from ( VALUES ('geog_dithin_cached_1a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_1b', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_1c', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)') ) as p(c, ply, pt); -- Does tolerance based distance work cached? Outside tolerance SELECT c, ST_DWithin(ply::geography, pt::geography, 1000) from ( VALUES ('geog_dithin_cached_2a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_2b', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_2c', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)') ) as p(c, ply, pt); -- Do things work when there's cache coherence on the point side but not the poly side? SELECT c, ST_DWithin(ply::geography, pt::geography, 3000) from ( VALUES ('geog_dithin_cached_3a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_dithin_cached_3b', 'POLYGON((1 1, 1 10, 10 10, 10 1, 1 1))', 'POINT(5 5)'), ('geog_dithin_cached_3c', 'POLYGON((2 2, 2 10, 10 10, 10 2, 2 2))', 'POINT(5 5)') ) as p(c, ply, pt); -- Test a precision case near the south pole that came up during development. WITH pt AS ( SELECT point::geography FROM ( VALUES ('0101000020E61000006C5B94D920EB4CC0A0FD481119B24FC0'), ('0101000020E610000097A8DE1AD8524CC09C8A54185B1050C0'), ('0101000020E61000008FC2F5285C4F4CC0E5ED08A7050F50C0'), ('0101000020E61000008FC2F5285C4F4CC0E5ED08A7050F50C0') ) AS p(point) ), ply AS ( SELECT polygon::geography FROM ( VALUES ('0106000020E610000001000000010300000001000000A10100005036E50AEF8E4FC0E3FC4D2844A443C000000000008046C000000000000047C033333333335346C000000000000047C066666666662646C000000000000047C09999999999F945C000000000000047C0CDCCCCCCCCCC45C000000000000047C00000000000A045C000000000000047C033333333337345C000000000000047C066666666664645C000000000000047C099999999991945C000000000000047C0CDCCCCCCCCEC44C000000000000047C00000000000C044C000000000000047C033333333339344C000000000000047C066666666666644C000000000000047C099999999993944C000000000000047C0CDCCCCCCCC0C44C000000000000047C00000000000E043C000000000000047C03333333333B343C000000000000047C066666666668643C000000000000047C099999999995943C000000000000047C0CDCCCCCCCC2C43C000000000000047C000000000000043C000000000000047C03333333333D342C000000000000047C06666666666A642C000000000000047C099999999997942C000000000000047C0CDCCCCCCCC4C42C000000000000047C000000000002042C000000000000047C03333333333F341C000000000000047C06666666666C641C000000000000047C099999999999941C000000000000047C0CDCCCCCCCC6C41C000000000000047C000000000004041C000000000000047C033333333331341C000000000000047C06666666666E640C000000000000047C09999999999B940C000000000000047C0CDCCCCCCCC8C40C000000000000047C000000000006040C000000000000047C033333333333340C000000000000047C066666666660640C000000000000047C03333333333B33FC000000000000047C09999999999593FC000000000000047C00000000000003FC000000000000047C06666666666A63EC000000000000047C0CCCCCCCCCC4C3EC000000000000047C03333333333F33DC000000000000047C09999999999993DC000000000000047C00000000000403DC000000000000047C06666666666E63CC000000000000047C0CCCCCCCCCC8C3CC000000000000047C03333333333333CC000000000000047C09999999999D93BC000000000000047C00000000000803BC000000000000047C06666666666263BC000000000000047C0CCCCCCCCCCCC3AC000000000000047C03333333333733AC000000000000047C09999999999193AC000000000000047C00000000000C039C000000000000047C066666666666639C000000000000047C0CCCCCCCCCC0C39C000000000000047C03333333333B338C000000000000047C099999999995938C000000000000047C000000000000038C000000000000047C06666666666A637C000000000000047C0CDCCCCCCCC4C37C000000000000047C03333333333F336C000000000000047C099999999999936C000000000000047C000000000004036C000000000000047C06666666666E635C000000000000047C0CDCCCCCCCC8C35C000000000000047C033333333333335C000000000000047C09999999999D934C000000000000047C000000000008034C000000000000047C066666666662634C000000000000047C0CDCCCCCCCCCC33C000000000000047C033333333337333C000000000000047C099999999991933C000000000000047C00000000000C032C000000000000047C066666666666632C000000000000047C0CDCCCCCCCC0C32C000000000000047C03333333333B331C000000000000047C099999999995931C000000000000047C000000000000031C000000000000047C06666666666A630C000000000000047C0CDCCCCCCCC4C30C000000000000047C06666666666E62FC000000000000047C03333333333332FC000000000000047C00000000000802EC000000000000047C0CCCCCCCCCCCC2DC000000000000047C09999999999192DC000000000000047C06666666666662CC000000000000047C03333333333B32BC000000000000047C00000000000002BC000000000000047C0CCCCCCCCCC4C2AC000000000000047C099999999999929C000000000000047C06666666666E628C000000000000047C033333333333328C000000000000047C000000000008027C000000000000047C0CDCCCCCCCCCC26C000000000000047C099999999991926C000000000000047C066666666666625C000000000000047C03333333333B324C000000000000047C000000000000024C000000000000047C000000000000024C03943F5FFFF7F56C000000000008052C03943F5FFFF7F56C000000000008052C00000000000004EC068774831407A52C00000000000004EC0B8ACC266807452C00000000000004EC020240B98C06E52C00000000000004EC0705985CD006952C00000000000004EC0D9D0CDFE406352C00000000000004EC029064834815D52C00000000000004EC0917D9065C15752C00000000000004EC0E1B20A9B015252C00000000000004EC0492A53CC414C52C00000000000004EC09A5FCD01824652C00000000000004EC002D71533C24052C00000000000004EC0520C9068023B52C00000000000004EC0BA83D899423552C00000000000004EC00AB952CF822F52C00000000000004EC072309B00C32952C00000000000004EC0C3651536032452C00000000000004EC02BDD5D67431E52C00000000000004EC09354A698831852C00000000000004EC0E38920CEC31252C00000000000004EC04B0169FF030D52C00000000000004EC09B36E334440752C00000000000004EC003AE2B66840152C00000000000004EC054E3A59BC4FB51C00000000000004EC0BC5AEECC04F651C00000000000004EC00C90680245F051C00000000000004EC07407B13385EA51C00000000000004EC0C43C2B69C5E451C00000000000004EC02DB4739A05DF51C00000000000004EC07DE9EDCF45D951C00000000000004EC0E560360186D351C00000000000004EC03596B036C6CD51C00000000000004EC09D0DF96706C851C00000000000004EC0EE42739D46C251C00000000000004EC056BABBCE86BC51C00000000000004EC0A6EF3504C7B651C00000000000004EC00E677E3507B151C00000000000004EC076DEC66647AB51C00000000000004EC0C613419C87A551C00000000000004EC02E8B89CDC79F51C00000000000004EC07FC00303089A51C00000000000004EC0E7374C34489451C00000000000004EC0376DC669888E51C00000000000004EC09FE40E9BC88851C00000000000004EC0EF1989D0088351C00000000000004EC05791D101497D51C00000000000004EC0A8C64B37897751C00000000000004EC0103E9468C97151C00000000000004EC060730E9E096C51C00000000000004EC0C8EA56CF496651C00000000000004EC01820D1048A6051C00000000000004EC081971936CA5A51C00000000000004EC0D1CC936B0A5551C00000000000004EC03944DC9C4A4F51C00000000000004EC0A1BB24CE8A4951C00000000000004EC0F1F09E03CB4351C00000000000004EC05968E7340B3E51C00000000000004EC0AA9D616A4B3851C00000000000004EC01215AA9B8B3251C00000000000004EC0624A24D1CB2C51C00000000000004EC0CAC16C020C2751C00000000000004EC01AF7E6374C2151C00000000000004EC0826E2F698C1B51C00000000000004EC0D3A3A99ECC1551C00000000000004EC03B1BF2CF0C1051C00000000000004EC08B506C054D0A51C00000000000004EC0F3C7B4368D0451C00000000000004EC043FD2E6CCDFE50C00000000000004EC0AB74779D0DF950C00000000000004EC0FCA9F1D24DF350C00000000000004EC064213A048EED50C00000000000004EC0CC988235CEE750C00000000000004EC01CCEFC6A0EE250C00000000000004EC08445459C4EDC50C00000000000004EC0D47ABFD18ED650C00000000000004EC0C2340C1F11D150C00000000000004EC0C2340C1F11D150C0FE7DC685032D4DC0C2340C1F11D150C0FE7DC685033D4CC0C2340C1F11D150C0713D0AD7A3304CC02AAC545051CB50C0703D0AD7A3304CC07AE1CE8591C550C0703D0AD7A3304CC0E25817B7D1BF50C0703D0AD7A3304CC0328E91EC11BA50C0703D0AD7A3304CC09A05DA1D52B450C0703D0AD7A3304CC0EB3A545392AE50C0703D0AD7A3304CC053B29C84D2A850C0703D0AD7A3304CC0A3E716BA12A350C0703D0AD7A3304CC00B5F5FEB529D50C0703D0AD7A3304CC05B94D920939750C0703D0AD7A3304CC0C30B2252D39150C0703D0AD7A3304CC014419C87138C50C0703D0AD7A3304CC07CB8E4B8538650C0703D0AD7A3304CC0CCED5EEE938050C0703D0AD7A3304CC03465A71FD47A50C0703D0AD7A3304CC0849A2155147550C0703D0AD7A3304CC0EC116A86546F50C0703D0AD7A3304CC03ECBF3E0EE6E50C0713D0AD7A3304CC0FF3EE3C2816E50C0A2EE0390DAB04BC0EC12D55B038550C01630815B77974BC05BCEA5B8AA9A50C0C173EFE1928F4BC0A5315A4755B550C00000000000804BC0014D840D4FD150C01899DB1896744BC05D05E7421B2A51C0B38EF4B3A2754BC0BB0F406A132751C068E89FE062C94AC03D6B1217DB2851C0413F9D3C76564AC09F268E97491D51C01E55A8C9E72D4AC014AE47E17A5051C05E770481DF154AC0DA531795F95E51C0ADA81CEE7E154AC033333333337351C0EACF7EA488084AC0DA835A1DCA8251C019479B994F014AC00473F4F8BDA551C0CB4A9352D0014AC0AD927EB12DFD51C0848FD2B6AB014AC07F11D9AC1FFF51C0D21D1F8887F249C01D4762388D1B52C06AE27899BCCA49C00AD7A3703D1252C08BAF2C87CCA049C0A323B9FC871A52C0ADCE20F4229449C056760B6E351352C0F866E5A8ED8449C024F83A04E91352C0DCDB8882745249C0F1F44A59863252C0DBCD42F1195049C01A97BBE09D4452C0EEEBC039236449C09A31BBDD014C52C0454B79083E6349C0A59421D8826352C004824AA6542849C04BABC6B71C6252C046216EF36B1449C0A4F55C4BED5D52C01CE7DB27EC0549C0D9BBF550916452C058CE39D3DFF648C0DD0E6844445C52C0937D46D8A6E648C098B4F347E26652C0F6FC1F1620C748C0AB37B412845D52C0D9A2BBDA40A948C048E17A14AE5F52C0D52137C30D9448C04B1A48BCE14B52C0BF901F3BB99848C0B26DAC1FF63552C0E4709CCA587B48C0287E8CB96B2652C0912CBBBB296948C0A59421D8822852C0D49AE61DA74048C0C009E0C1AA1452C0106734A8EC2E48C0A8D94D3ADB1452C004560E2DB21948C0687B4F40EE2452C06ECF3D35A8F047C089022269DC1552C0ADAC23FDACCD47C019B2158FE61652C07BC26DC89AB747C009B3BFA2910A52C095E70B6B74B447C01DF2857F47FF51C01D8AA7C3AF9A47C0F1248EE156F651C0E9482EFF219B47C07A45A6327BFE51C0711706D1FF8747C0A5315A4755FD51C000000000008047C0395BE5AE4AFB51C0CD6152D7356547C0182DF64DD0F451C00CC3EC0A226447C0B6CA5D95D5EA51C098E19A96B34A47C06ABC749318FA51C0E51E5C4B121247C0C1920612EFEE51C0780F2B37AC0847C09D2743FA12EA51C0653FE65EBBF546C01563AAAA61F351C0FA8271CBA2CB46C00775368966E151C08208CC9E5FC346C05DEF4806CAD651C03ECB98277C9C46C03760A12042E551C0FFF1B96EA57B46C073A7CF69710152C090A4FF40147346C03D5C1723B70152C0F46C567DAE6646C03505D78198E051C023DF008E985E46C08351499D80D451C037853A51B76646C09C46A4B789C751C0B515FBCBEE4546C09C33A2B437CF51C0BE82D9A95E3446C066E1462550F651C042CB5FC6B93046C09B6B3DE8FEF551C056212FB5EF0D46C075FBF6BFEDEB51C04E36D4DE96FF45C020578FA01DF251C0C967C3ABF6E845C05CA2C4F87AE651C0E5F21FD26FD745C0FD0978E3EEFB51C06CE3F49AC3BE45C09D11A5BDC1F951C00C11267B3AAB45C08A9DDFE643F051C037EE83E27DA645C0A922CB38FCEF51C0CCBE863B729645C008D5BC99070852C0865EDACB118745C088635DDC460952C01B09D91E624E45C01F85EB51B80652C07D96E7C1DD4D45C0A8188CB6CF0152C018135102513E45C00C7D0B46000852C0166646E4602945C06E2585C31C0352C039B0C167901345C0A499DD497AEF51C0BD1358A5991245C023DBF97E6AF251C0BEF15AAE230045C0EE7C3F355EF151C0F6FC1F1620E944C040529F3FC8F851C0BBF7CB82E4D344C0D27E5AFBF1F751C0F6D61B107CB444C0CA9C23938AF751C0B498EEF4A2B544C0624775BC1FF751C035958D13C7B644C0EA8B637FB1F651C040BEE654E8B744C0AADC49E43FF651C0298B1FA206B944C0AD7CCAF3CAF551C043D796E421BA44C0D6E6CDB652F551C0ECBDE6053ABB44C0532E8236D7F451C06B72E6EF4EBC44C07E585A7C58F451C08F13AC8C60BD44C01EB00D92D6F351C0DE7A8EC66EBE44C02712978151F351C01507278879BF44C0F9333455C9F251C0D96153BC80C044C015E364173EF251C08540374E84C144C0703EEAD2AFF151C0B21F3E2984C244C062E9C5921EF151C088F91C3980C344C0313839628AF051C083F6D36978C444C05856C44CF3EF51C0A018B0A76CC544C09366255E59EF51C0A5E04CDF5CC644C0AE9C57A2BCEE51C08AED95FD48C744C0495192251DEE51C09C95C8EF30C844C0760F48F47AED51C0747975A314C944C0739C251BD6EC51C060108206F4C944C061F910A72EEC51C0372E2A07CFCA44C0385F28A584EB51C066820194A5CB44C0E834C122D8EA51C01010F59B77CC44C0DDFF662D29EA51C0149F4C0E45CD44C0DA4EDAD277E951C0E725ACDA0DCE44C0669F0F21C4E851C0FB2B15F1D1CE44C0C53D2E260EE851C0B124E84191CF44C0A41F8FF055E751C09CC2E5BD4BD044C098B9BB8E9BE651C0F042305601D144C076CF6C0FDFE551C017B14CFCB1D144C0B73F898120E551C0192224A25DD244C0F9C924F45FE451C0E5E7043A04D344C0B2D07E769DE351C03EBCA3B6A5D344C047160118D9E251C039E31C0B42D444C095753EE812E251C01B45F52AD9D444C01596F1F64AE151C09D7F1B0A6BD544C0B79BFB5381E051C048EEE89CF7D544C096D2620FB6DF51C0F7A922D87ED644C0AA565139E9DE51C0497FFAB000D744C097B713E21ADE51C0FBDB0F1D7DD744C0BB98171A4BDD51C0FBB27012F4D744C0AC4DEAF179DC51C02D579A8765D844C03173377AA7DB51C0BC4C7A73D1D844C0FB84C7C3D3DA51C0FD106FCD37D944C027707EDFFED951C095D8488D98D944C0C8225ADE28D951C013444AABF3D944C08B1871D151D851C0B40A292049DA44C0ADE4F0C979D751C0529B0EE598DA44C061B91CD9A0D651C07AB398F3E2DA44C0D4EC4B10C7D551C076ECD94527DB44C0F97BE880ECD451C0633E5AD665DB44C0398B6D3C11D451C01F7917A09EDB44C04CE5655435D351C01FB3859ED1DB44C048786ADA58D251C018AE8FCDFEDB44C022D120E07BD151C05831972926DC44C0C89539779ED051C0F25975AF47DC44C0FEFD6EB1C0CF51C091E07A5C63DC44C02B4B83A0E2CE51C0EE54702E79DC44C03D3F3F5604CE51C0F24E962389DC44C0D69270E425CD51C07E95A53A93DC44C0EE6AE85C47CC51C0A93ACF7297DC44C00BCE79D168CB51C0C6ADBCCB95DC44C04F19F8538ACA51C0D7C28F458EDC44C06D7535F6ABC951C09FAFE2E080DC44C0CD4B01CACDC851C04CFEC79E6DDC44C000BC26E1EFC751C0B675CA8054DC44C09F116B4D12C751C029F7EC8835DC44C0DF3A8C2035C651C0DC51AAB910DC44C0F53F3F6C58C551C0FC0BF515E6DB44C073BB2E427CC451C0632137A1B5DB44C0D153F9B3A0C351C0F7B7515F7FDB44C04D3630D3C5C251C0CDC99C5443DB44C0459355B1EBC151C0F8C4E68501DB44C0451CDB5F12C151C0342174F8B9DA44C0DB8320F039C051C062EBFEB16CDA44C079FF717362BF51C0E546B6B819DA44C078CB06FB8BBE51C0F2E43D13C1D944C06DB1FF97B6BD51C0DC71ADC862D944C0F890655BE2BC51C088F88FE0FED844C03BEB27560FBC51C0E13BE36295D844C014711B993DBB51C09706175826D844C04F94F8346DBA51C02E710CC9B1D744C0F31B5A3A9EB951C04B1E15BF37D744C0C6BBBBB9D0B851C0976DF243B8D644C03FAF78C304B851C014A5D46133D644C0F757CA673AB751C01A115A23A9D544C0DADFC6B671B651C0141B8E9319D544C014DF5FC0AAB551C0FE56E8BD84D444C005066194E5B451C0E6874BAEEAD344C049CB6E4222B451C0629B04714BD344C0E91D05DA60B351C03E9CC912A7D244C0051C766AA1B251C04D9CB8A0FDD144C0D3CDE802E4B151C0CD9556284FD144C058E557B228B151C00E448EB79BD044C0C48290876FB051C0DCF3AE5CE3CF44C0ABFD3091B8AF51C0A54B6B2626CF44C034B3A7DD03AF51C06F0BD82364CE44C048D9317B51AE51C0DEC46A649DCD44C0FC56DA77A1AD51C05A8BF8F7D1CC44C032A278E1F3AC51C0709CB4EE01CC44C0A0A2AFC548AC51C0B9002F592DCB44C03F9AEC31A0AB51C03225534854CA44C05A136633FAAA51C0646D66CD76C944C02DD41AD756AA51C050BE06FA94C844C04CD8D029B6A951C0720229E0AEC744C0D34F143818A951C0DEA61792C4C644C075A4360E7DA851C0AF117122D6C544C082844DB8E4A751C0EE1126A4E3C444C0FDF331424FA751C02849782AEDC344C0B6637FB7BCA651C0B58EF8C8F2C244C0A5CE92232DA651C0FE4C8593F4C144C067DD8991A0A551C0EBD8489EF2C044C01010420C17A551C084C3B7FDECBF44C046EE579E90A451C006268FC6E3BE44C0C53D26520DA451C0AAE8D20DD7BD44C0473FC5318DA351C01B04CCE8C6BC44C0E1F1094710A351C0E0BD066DB3BB44C0E85C859B96A251C000E050B09CBA44C05AE0833820A251C0CAEBB7C882B944C0CF8B0C27ADA151C02F4887CC65B844C00B7CE06F3DA151C0B66B46D245B744C02E3F7A1BD1A051C03B02B7F022B644C0813F0D3268A051C0BA0ED33EFDB444C0E43485BB02A051C02C09CBD3D4B344C0FB9C85BFA09F51C0CBF803C7A9B244C0EB396945429F51C0D58A15307CB144C0E1974154E79E51C0FC25C8264CB044C03299D6F28F9E51C0ADFA12C319AF44C03D09A6273C9E51C076101A1DE5AD44C0EF35E3F8EB9D51C084502C4DAEAC44C0F98F766C9F9D51C0A08DC16B75AB44C09EB70C93849D51C08100BE8003AB44C05036E50AEF8E4FC0E3FC4D2844A443C0') ) as q(polygon) ) SELECT 'geog_precision_savffir', _ST_DistanceUnCached(pt.point, ply.polygon), ST_Distance(pt.point, ply.polygon) FROM pt, ply; -- Test another precision case near the north poly and over the dateline WITH pt AS ( SELECT point::geography FROM ( VALUES ('0101000020E610000000000000004065400000000000804840'), ('0101000020E610000075C8CD70033965C02176A6D079315040') ) AS p(point) ), ply AS ( SELECT polygon::geography FROM ( VALUES ('0103000020E6100000010000004101000078A1B94E231F65C000000000000051400000000000C063C000000000000052400000000000C063C0000000000000524078A1B94E231F65C0000000000000514078A1B94E231F65C000000000008056400000000000A061C000000000008056400000000000A061C0EF940ED6FF7F56400000000000A061C0DD291DACFF7F56400000000000A061C0CBBE2B82FF7F56400000000000A061C0B9533A58FF7F56400000000000A061C0A8E8482EFF7F56400000000000A061C0967D5704FF7F56400000000000A061C072A774B0FE7F56400000000000A061C04FD1915CFE7F56400000000000A061C02BFBAE08FE7F56400000000000A061C0F6B9DA8AFD7F56400000000000A061C0C178060DFD7F56400000000000A061C079CC4065FC7F56400000000000A061C00F4A9869FB7F56400000000000A061C0A4C7EF6DFA7F56400000000000A061C0040473F4F87F56400000000000A061C052D50451F77F56400000000000A061C07DD0B359F57F56400000000000A061C0611F9DBAF27F56400000000000A061C00F2DB29DEF7F56400000000000A061C0642310AFEB7F56400000000000A061C06102B7EEE67F56400000000000A061C0E1F3C308E17F56400000000000A061C0AFB6627FD97F56400000000000A061C0DDB5847CD07F56400000000000A061C013DA722EC57F56400000000000A061C02C4D4A41B77F56400000000000A061C0CFF753E3A57F56400000000000A061C0B72DCA6C907F56400000000000A061C0776C04E2757F56400000000000A061C093C6681D557F56400000000000A061C05B0D897B2C7F56400000000000A061C01B12F758FA7E56400000000000A061C0B8239C16BC7E56400000000000A061C027FC523F6F7E56400000000000A061C0BD9179E40F7E56400000000000A061C0CFDA6D179A7D56400000000000A061C0F0332E1C087D56400000000000A061C07CB8E4B8537C56400000000000A061C0C53D963E747B56400000000000A061C08E40BCAE5F7A56400000000000A061C07F8CB96B097956400000000000A061C0FE65F7E4617756400000000000A061C0C9073D9B557556400000000000A061C0CDCCCCCCCC7256400000000000A061C07A01F6D1A96F56400000000000A061C053616C21C86B56400000000000A061C009A7052FFA6656400000000000A061C0F0332E1C086156400000000000A061C085471B47AC5956400000000000A061C0752497FF905056400000000000A061C08C84B69C4B4556400000000000A061C02C6519E2583756400000000000A061C02B357BA0152656400000000000A061C055C6BFCFB81056400000000000A061C0F988981249F655400000000000A061C08C321B6492D555400000000000A061C0ADC5A70018AD55400000000000A061C02254A9D9037B55400000000000A061C009E1D1C6113D55400000000000A061C0A0E5797077F054400000000000A061C0FA49B54FC79154400000000000A061C043959A3DD01C54400000000000A061C075EACA67798C53400000000000A061C00EE02D90A0DA52400000000000A061C000000000000052400000000000A061C000000000000052400000000000A061C00100000000004F400000000000A061C01730815B77274E408C45D3D9C99D61C04CAB21718F254E40C0120F289B9861C03EB324404D214E40745E6397A89061C0B9AAECBB221C4E406C3997E2AA8E61C09E465A2A6F274E4068666666667F61C0C9EA56CF49174E40F8D005F52D7661C01FF98381E72A4E408499B67F656261C01B69A9BC1D2D4E40C04351A04F6261C01CD82AC1E2284E40EC7C3F355E6661C0097250C24C0B4E40E8525C55F66161C001E31934F4FF4D406431B1F9B86161C0EDDD1FEF55FF4D407C4963B48E5961C06749809A5AF64D40703D0AD7A35661C0D60451F701F44D4080608E1EBF5561C0F22900C633EC4D40008750A5665561C048C49448A2E74D40205036E50A5461C0C481902C60E24D40283108AC1C4161C0C1E78711C2BB4D40B08009DCBA4061C0CA1F0C3CF7BA4D4010751F80D43E61C0029F1F4608B74D40A47EDE54A43E61C03CFC3559A3B64D405C3D27BD6F3361C00938842A359F4D40E85BE674593161C0F7D1A92B9F8D4D409820EA3E003061C019E76F42217E4D402883A3E4D53061C08833BF9A03744D40605E807D742E61C04E7FF62345744D40182B6A300D2961C06B82A8FB00804D40D0FBC6D79E2561C0C8F484251E844D4044DD0720B52261C0E46BCF2C09884D40DC9DB5DB2E2161C0AF47E17A148A4D40303D6189071F61C02A5C8FC2F58C4D40F8F719170E1C61C02259C0046E914D405031CEDF841A61C0AB2B9FE579944D401C649291B31261C077DB85E63A954D40A07A6B60AB0F61C03E963E7441A14D40247F30F0DC0F61C026E99AC937A34D402054A9D9030F61C04EB9C2BB5CA44D40C051F2EA1C0F61C0CE920035B5A84D409CF9D51C200F61C05B2A6F4738A94D40C86C9049460F61C05D8FC2F528B04D4008D3307C440F61C073BF4351A0BB4D40285C8FC2F50B61C03E61890794B94D40080C59DDEA0B61C030FA0AD28CB94D40D8166536C80B61C04C7155D977B94D400079AF5A990B61C005392861A6B94D40F836FDD98F0B61C0E8A4F78DAFB94D40D03FC1C58A0B61C0DA5A5F24B4B94D4058087250C20961C0650113B875BB4D401C5A643BDF0861C0C32FF5F3A6BE4D407862D68BA10761C0E627D53E1DC34D4020680586AC0761C03A5D16139BC74D40D02C0950530B61C07194BC3AC7CC4D4030EBC5504E0961C0988BF84ECCCE4D40CCAFE600C10861C07411DF8959CF4D40B81457957D0861C0EC8B84B69CCF4D400825CCB4FD0761C0F2EF332E1CD04D40703D0AD7A30761C023F8DF4A76D04D403837A6272C0661C0BD3AC780ECD14D40602D3E05C00261C05F2EE23B31D34D4018601F9DBA0161C057F146E691D34D409820EA3E000161C03AEE940ED6D34D406CB2463D440061C041C1C58A1AD44D4010FC6F253B0061C0C8F484251ED44D402CBCCB457CFE60C038328FFCC1D44D40C0BC00FBE8FB60C065AF777FBCD74D4080BC57AD4CFB60C0C7BFCFB870D84D40102DB29DEFF860C0BB490C022BDB4D40242D95B723F760C0E25D2EE23BDD4D402CE7525C55EF60C00B9DD7D825E64D40CC1E680586EB60C0EE9925016ADE4D400C022B8716E860C0B7B9313D61D94D40CC0182397AE760C0FFB7921D1BD94D40C095ECD808E760C0B1389CF9D5D44D40E47E87A240E560C0079E7B0F97D04D401C5036E50AE560C0013ACC9717D04D40C01C3D7E6FE460C03A2861A6EDCF4D40988F6B43C5E360C05665DF15C1CF4D40148733BF9AE360C0252367614FCF4D40D0A5B8AAECE060C040DEAB5626C84D40D4CA845FEAE060C09AB67F65A5C54D40901EBFB7E9E060C01B2FDD2406C54D40B05582C5E1E060C055E3A59BC4BC4D405014E81379E260C0537E52EDD3B94D40483D44A33BE360C08A07944DB9B64D40E8263108ACDF60C09A7CB3CD8DB14D4080F10C1AFAE060C04052448655AC4D40D8D825AAB7DE60C06B65C22FF5A34D40E874594C6CD660C01D5A643BDF9F4D40F82CCF83BBD560C063D68BA19C984D40B0683A3B19D260C046990D32C9904D407047382D78CF60C0CDE9B298D8904D4078978BF84ECE60C017139B8F6B8B4D4008B64AB038CC60C094DE37BEF6844D40303D618907CD60C069CBB914577D4D40140A117008CA60C0E644BB0A297B4D4054E3A59BC4CA60C0763C66A032764D40044CE0D6DDC960C025404D2D5B734D40A818E76F42C860C0FD6F253B366E4D40A41EA2D11DBF60C067F2CD3637624D40D0A92B9FE5BA60C07732384A5E5D4D4030B610E4A0B660C059FFE7305F4E4D40A0BE654E97B560C02CC1E270E64B4D4044813E9127B560C08A5E46B1DC4A4D40C09F1A2FDDB460C044FF04172B4A4D40DCD26A48DCB460C0284EEE77284A4D4028E3DF675CB360C04A29E8F692464D4048D74CBED9B160C05F9D6340F6424D4098395D1613AC60C09F7B0F971C374D40F00390DAC4AE60C0A80018CFA0314D40F8F719170EAB60C0AC730CC85E234D400C5EF415A4A860C01B4CC3F0111D4D4008E1D1C611A760C03208AC1C5A184D40E422BE13B3A660C08221AB5B3D174D404833164D67A660C0FCC6D79E59164D4070641EF983A560C073DC291DAC134D4020E527D53EA260C06B9F8EC70C004D40B0BAD573D29B60C0DEEA39E97DEB4C40F4D6C056099860C07884D38217D94C4064B48EAA269560C0D869A4A5F2CE4C4054C6BFCFB89160C081ECF5EE8FBF4C405CC47762D68B60C02AE8F692C6AC4C40446E861BF08760C0ADA8C1340C9B4C4060C8EA56CF8B60C096CFF23CB88B4C40D005F52D738160C07E5C1B2AC6854C40AC6EF59CF48360C088BF266BD46F4C40D8EBDD1FEF7B60C026CCB4FD2B674C402883A3E4D57C60C040A9F6E978604C40D03FC1C58A7B60C0448B6CE7FB594C40747632384A7B60C07D96E7C1DD554C40D0747632387B60C03815A930B6544C40F8B31F29227B60C074F4F8BD4D534C40D8868A71FE7A60C0FF7DC68503514C40600CE544BB7A60C0F88DAF3DB34C4C40C8D2872EA87960C046F0BF95EC4C4C40E04F8D976E7860C0A2B94E232D4D4C4054910A630B7860C08642041C424D4C40540E2DB29D7760C03ED00A0C594D4C40808B1535987660C005FF5BC98E4D4C40D09B8A54187560C036EA211ADD4D4C406891ED7C3F7460C019ADA3AA094E4C4050EDD3F1987260C059FFE7305F4E4C40446458C51B6F60C02EEC6987BF464C40280AF4893C6A60C0E46BCF2C09404C40E0AFC91AF56960C03A7AFCDEA63F4C408872A25D856960C0ADA8C1340C3F4C4018B2BAD5736960C043EC4CA1F33E4C4044088F368E6560C0C57762D68B394C40CCCCCCCCCC6260C0A4C7EF6DFA334C4058DDEA39E95E60C0613C8386FE314C4034164D67275E60C0709EEA909B314C40C8F99B50885D60C0FE2B2B4D4A314C40E07A14AE475D60C0D4D9C9E028314C4098F56228275C60C0EAEC647094304C40C0D84290835B60C0F246E6913F304C40981C774A075960C0CA1F0C3CF72E4C40900A630B415860C0B1AC3429052D4C40205ED72FD85760C0E44EE960FD2B4C40DC240681955760C0ECDD1FEF552B4C407C74EACA675760C0E6965643E22A4C40B04B546F0D5760C0CBBE2B82FF294C4034936FB6B95660C05B0D897B2C294C40285C8FC2F55560C0C9CD70033E274C40342905DD5E5560C08CA6B393C1254C4098728577B95460C07923F3C81F244C4044C02154A95460C01D9430D3F6234C40A82688BA0F5460C067834C3272224C4030815B77F35360C044FF04172B224C40E422BE13B35360C0DAEBDD1FEF214C40A47EDE54A45260C038A6272CF1204C403C1405FA445260C0079E7B0F97204C40C8681D554D5160C0B3632310AF1F4C4080F10C1AFA4E60C050AA7D3A1E1F4C405C33F9669B4E60C0DE0720B5891B4C409CC420B0724E60C03641D47D001A4C40C0FF56B2634E60C0B7D617096D194C40B46CAD2F124E60C092442FA358164C402891442FA34D60C0AF64C74620124C4090ED7C3F354B60C023F8DF4A76104C405CE15D2EE24760C0C7850321590C4C400CB08F4E5D4760C07177D66EBB0C4C40E097FA79534360C048FE60E0B90F4C40C8D2872EA84260C0EA263108AC0C4C4098395D16134260C052F2EA1C030A4C40902232ACE24160C029D027F224094C40B87EC16ED84160C094DE37BEF6084C40F00703CFBD4160C0EAB298D87C084C40DC9DB5DB2E4160C0DAEBDD1FEF054C40200C3CF71E4160C09AB67F65A5054C40686AD95A5F4060C067F2CD3637024C40A41EA2D11D4060C0A2629CBF09014C40C4724BAB214060C05D8FC2F528004C40F8B31F29224060C00FA14ACD1E004C409C16BCE82B4060C034F9669B1BFF4B40CC457C27664060C04DC3F01131F94B405C5A0D897B4060C0E6ED08A705F74B40DC0720B5894060C0B72DCA6C90F54B40BCD05CA7914060C0EA60FD9FC3F44B4054F146E6914060C07177D66EBBF44B40601A868F884060C07177D66EBBF44B409CF9D51C204060C07177D66EBBF44B409CF9D51C204060C0F20C1AFA27F44B406414CB2DAD4260C077BE9F1A2FE94B40B8533A58FF4360C06D5B94D920E74B40B05582C5E14460C0CBF8F71917E24B40F82CCF83BB4460C0174D672783DB4B40188BA6B3934360C0AC90F2936AD74B4004DD5ED2184460C00B2E56D460CA4B4044D3D9C9E04260C03AB4C876BEBF4B40EC5F5969524160C0E8FBA9F1D2B94B406414CB2DAD4060C05001309E41AB4B40900A630B413F60C0D205F52D73A64B40E4C281902C3F60C096B7239C16A44B4020020EA14A4360C0F870C971A7984B400035B56CAD4460C00BF4893C49924B40E0F3C308E14460C001E31934F48F4B402866BD18CA4560C0B3632310AF8B4B4048ACC5A7004660C0011DE6CB0B884B401881785DBF4860C07FA4880CAB7C4B40B46CAD2F124B60C0B7F3FDD478754B40480C022B874D60C0A553573ECB6F4B40C0D4CF9B8A4E60C0FF60E0B9F76C4B40889D29745E4F60C0F4716DA8186B4B40DC9DB5DB2E5260C0A96F99D365654B4000D9EBDD1F5460C0D678E92631644B4054AEF02E175560C0A81DFE9AAC614B40182FDD24065460C0E06C73637A5E4B403C3F8C101E5460C055E3A59BC45C4B408043A852B35360C0597380608E5A4B40044CE0D6DD9560C0CDCCCCCCCC544B406866666666DE60C01E03B2D7BB1B4B4000000000000061C00100000000004B400000000000E060C01E03B2D7BB5B4A400000000000F862C0132C0E677E614C4000000000002063C00100000000004C4000000000000064C00100000000C04A40F8B31F2922FA64C03433333333B34940F8B31F29221266C0B0C91AF51011494034333333332366401D03B2D7BB1B49402EE7525C555D64409A99999999D946400000000000E063404A63B48EAA0A494000000000002065400100000000004B40000000000040654003F1BA7EC1564B406766666666466540EACF7EA488684B4000000000008066400100000000004E4068666666668665C03433333333035040E8C6F484251F65C00000000000405040E8C6F484251F65C00000000000C0504078A1B94E231F65C00000000000005140') ) as q(polygon) ) SELECT 'geog_precision_pazafir', _ST_DistanceUnCached(pt.point, ply.polygon), ST_Distance(pt.point, ply.polygon) FROM pt, ply; -- Clean up spatial_ref_sys DELETE FROM spatial_ref_sys WHERE srid = 4326; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_expected����������������������������������������������������0000644�0000000�0000000�00000015473�12220405345�020517� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|POINT(1 2) 2|POINT(1 2 3) 3|LINESTRING(0 0,1 1,2 2,3 3,4 4) 4|LINESTRING(0 0 0,1 1 1,2 2 2,3 3 3,4 4 4) 5|LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15) 6|POLYGON((0 0,10 0,10 10,0 10,0 0)) 7|POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1)) 8|POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5)) 9|POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5),(1 1,2 1,2 2,1 2,1 1)) 10|POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1)) 11|POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)) 12|GEOMETRYCOLLECTION(POINT(1 2)) 13|GEOMETRYCOLLECTION(POINT(1 2 3)) 14|GEOMETRYCOLLECTION(LINESTRING(0 0,1 1,2 2,3 3,4 4)) 15|GEOMETRYCOLLECTION(LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)) 16|GEOMETRYCOLLECTION(POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1))) 17|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3)) 18|GEOMETRYCOLLECTION(LINESTRING(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),POINT(1 2 3)) 19|GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,1 1,2 2,3 3,4 4)) 20|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3),LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)) 21|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3),LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),POLYGON((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0))) 22|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3),POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))) 23|MULTIPOINT(1 2) 24|MULTIPOINT(1 2 3) 25|MULTIPOINT(1 2,3 4,5 6) 26|MULTIPOINT(1 2 3,5 6 7,8 9 10,11 12 13) 27|MULTIPOINT(1 2 0,1 2 3,4 5 0,6 7 8) 28|MULTIPOINT(1 2 3,4 5 0) 29|MULTILINESTRING((0 0,1 1,2 2,3 3,4 4)) 30|MULTILINESTRING((0 0,1 1,2 2,3 3,4 4),(0 0,1 1,2 2,3 3,4 4)) 31|MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)) 32|MULTILINESTRING((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)) 33|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0))) 34|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))) 35|MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))) 36|GEOMETRYCOLLECTION(MULTIPOINT(1 2)) 37|GEOMETRYCOLLECTION(MULTIPOINT(1 2 3)) 38|GEOMETRYCOLLECTION(MULTIPOINT(1 2 3,5 6 7,8 9 10,11 12 13)) 39|GEOMETRYCOLLECTION(MULTILINESTRING((0 0,1 1,2 2,3 3,4 4))) 40|GEOMETRYCOLLECTION(MULTILINESTRING((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0))) 41|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))) 42|GEOMETRYCOLLECTION(POINT(1 2 0),MULTIPOINT(1 2 3)) 43|GEOMETRYCOLLECTION(MULTIPOINT(1 2 0,3 4 0,5 6 0),POINT(1 2 3)) 44|GEOMETRYCOLLECTION(POINT(1 2 3),MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0))) 45|GEOMETRYCOLLECTION(MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)),POINT(1 2 3)) 46|GEOMETRYCOLLECTION(POINT(1 2 3),MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))) 47|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))),MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)),MULTIPOINT(1 2 3,5 6 7,8 9 10,11 12 13)) 48|MULTIPOINT(-1 -2 -3,5.4 6.6 7.77,-5.4 -6.6 -7.77,1000000 1e-6 -1000000,-1.3e-6 -1.4e-5 0) 49|GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 1))) ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: geometry contains non-closed rings at character 24 ERROR: geometry contains non-closed rings at character 24 ERROR: parse error - invalid geometry at character 24 ERROR: geometry has too many points at character 23 ERROR: parse error - invalid geometry at character 23 ERROR: geometry requires more points at character 23 62|POINT(inf 0) 63|POINT(-inf 0) ERROR: parse error - invalid geometry at character 23 65|t 65a|t 66|t 66a|f 67|t 67a|t 68|t 68a|t 69|t 69a|f 70|t 70a|f 71|t 71a|f 72|t 72a|f 73|t 73a|f 74|f 74a|f 75|t 75a|f 76|f 76a|f 77|t 78|t 79|f 80|f 81|t 82|f 83|t 84|f 85|t 86|f 87|f 88|t 89|t 90|f 91|t 92|f 93|f 94|t 95|f 96|t 97|f 98|t 99|f 100|f 101|f 102|f 103|t 104|t 105|f 106|BOX3D(0 0 0,7 7 0) 107|POLYGON((0 0,0 7,7 7,7 0,0 0)) 108|2 109|4 110|6 111|552 112|3 121|BOX3D(1.19894826 1.20265412 0,999.932129 999.692932 0)|BOX3D(1.40486765 1.3484304 0,999.857666 999.936401 0) 122|f 123|f 124|f 125|f 126|f 127|f 128|f 129|48016|48016 131|1 132|2 133| 133a|3 133b| 133c| 133d|4 133e| 137| 138|BOX3D(0 0 0,0 0 0) 139|SRID=2;GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY,POINT(0 0)) 140|SRID=3;MULTIPOINT(2 2) 141|SRID=4;MULTILINESTRING((2 2,3 3)) 142|SRID=5;MULTILINESTRING((2 2,3 3)) 143|SRID=6;MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0))) 143c1|MULTICURVE(CIRCULARSTRING(0 0,1 1,2 2)) 144|POINTM(1 2 0) 145|POINT(1 2 0) 146|POINT(1 2 0 3) 147|POINT(1 2 3 0) 148|LINESTRING(0 0,5 0,10 0) 149|GEOMETRYCOLLECTION EMPTY 150|SRID=6;GEOMETRYCOLLECTION(POLYGON((0 0,1 0,1 1,0 1,0 0))) 151|01030000000100000005000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000000000000000000000000000000000000000 152|4326 152.1|t 152.2|4326 153|MULTIPOINT(0 0) 154|MULTIPOINT(0 0) 155|MULTIPOINT(0 0,1 1) 156|MULTIPOINT(1 1) 157|MULTILINESTRING((0 0,1 1)) 158|MULTILINESTRING((0 0,1 1),(2 2,3 3)) 159|MULTIPOLYGON EMPTY 160|MULTIPOINT(1 1) 161|MULTILINESTRING((0 0,1 1),(2 2,3 3)) 162|010200000003000000f771d98de33826c00000000000004440f771d98de33826c000000000008051400000000000805140f771d98de33826c0 163|POLYGON((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0)) 164|POLYGON((0 0 0,1 0 0,1 1 0,0 1 0,0 0 1)) ERROR: geometry contains non-closed rings 166|POINT EMPTY 167|LINESTRING EMPTY 168|POLYGON EMPTY 169|CIRCULARSTRING EMPTY 170|COMPOUNDCURVE EMPTY 171|CURVEPOLYGON EMPTY 172|MULTIPOINT EMPTY 173|MULTILINESTRING EMPTY 174|MULTIPOLYGON EMPTY 175|TRIANGLE EMPTY 176|TIN EMPTY 177|POLYHEDRALSURFACE EMPTY 178|MULTISURFACE EMPTY 179|MULTICURVE EMPTY 180|GEOMETRYCOLLECTION EMPTY 181|GEOMETRYCOLLECTION(TRIANGLE EMPTY,TIN EMPTY) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/relatematch_expected������������������������������������������������0000644�0000000�0000000�00000000204�11722777314�021336� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������101202FFF|TTTTTTFFF|t 101202FFF|T0T2TTFFF|t 101202FFF|101202FFF|t 101202FFF|101102FFF|f FFFFFFFFF|1FFFFFFFF|f FFFFFFFFF|*FFFFFFFF|t ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/dumppoints.sql������������������������������������������������������0000644�0000000�0000000�00000007165�12141060565�020166� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'POINT (0 9)'::geometry AS geom ) AS g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'LINESTRING ( 0 0, 0 9, 9 9, 9 0, 0 0 )'::geometry AS geom ) AS g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'POLYGON (( 0 0, 0 9, 9 9, 9 0, 0 0 ))'::geometry AS geom ) AS g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'TRIANGLE (( 0 0, 0 9, 9 0, 0 0 ))'::geometry AS geom ) AS g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'POLYGON (( 0 0, 0 9, 9 9, 9 0, 0 0 ), ( 1 1, 1 3, 3 2, 1 1 ), ( 7 6, 6 8, 8 8, 7 6 ))'::geometry AS geom ) AS g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'MULTIPOLYGON ((( 0 0, 0 3, 4 3, 4 0, 0 0 )), (( 2 4, 1 6, 4 5, 2 4 ), ( 7 6, 6 8, 8 8, 7 6 )))'::geometry AS geom ) AS g ) j; SELECT path, ST_AsEWKT(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'POLYHEDRALSURFACE ((( 0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0 )) )'::geometry AS geom ) AS g ) j; SELECT path, ST_AsEWKT(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )'::geometry AS geom ) AS g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'GEOMETRYCOLLECTION( POINT(99 98), LINESTRING(1 1, 3 3), POLYGON((0 0, 0 1, 1 1, 0 0)), POLYGON((0 0, 0 9, 9 9, 9 0, 0 0), (5 5, 5 6, 6 6, 5 5)), MULTIPOLYGON(((0 0, 0 9, 9 9, 9 0, 0 0), (5 5, 5 6, 6 6, 5 5))) )'::geometry AS geom ) AS g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM (SELECT 'SRID=4326;CURVEPOLYGON( CIRCULARSTRING(-71.0821 42.3036, -71.4821 42.3036, -71.7821 42.7036, -71.0821 42.7036, -71.0821 42.3036), (-71.1821 42.4036, -71.3821 42.6036, -71.3821 42.4036, -71.1821 42.4036) )'::geometry as geom ) as g ) j; SELECT path, ST_AsText(geom) FROM ( SELECT (ST_DumpPoints(g.geom)).* FROM ( SELECT 'CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1))'::geometry as geom ) as g ) j; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/concave_hull_expected�����������������������������������������������0000644�0000000�0000000�00000000147�11722777314�021515� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ST_ConcaveHull MultiPolygon 0.95|t|t ST_ConcaveHull Lines 0.80|t|t ST_ConcaveHull Lines 0.80 holes|t|t �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/split_expected������������������������������������������������������0000644�0000000�0000000�00000005050�12075241565�020200� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: Operation on mixed SRID geometries 1|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0)) 1.1|SRID=10;GEOMETRYCOLLECTION(LINESTRING(10 0,5 0),LINESTRING(5 0,0 0)) 2|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0)) 3|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0)) ERROR: Operation on mixed SRID geometries 4|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0)) 5|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0)) 6|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0)) 7|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0,10 10,5 10),LINESTRING(5 10,0 10,0 20,5 20),LINESTRING(5 20,10 20)) ERROR: Splitter line has linear intersection with input ERROR: Splitter line has linear intersection with input 20|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 10))) 21|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 8,5 8,5 10))) 22|SRID=12;GEOMETRYCOLLECTION(POLYGON((2 0,0 0,0 10,2 10,2 0)),POLYGON((2 10,10 10,10 0,2 0,2 10),(5 2,8 2,8 8,5 8,5 2))) 23|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10))) 30|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,5 5),LINESTRING(5 5,10 5)) 31|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,10 5)) 32|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0),LINESTRING(0 5,10 5)) 40|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,10 5)) 50|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10)),POLYGON((20 0,20 10,30 10,30 0,20 0),(25 5,28 5,25 8,25 5))) 60|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10)),POLYGON((20 0,20 10,30 10,30 0,20 0),(25 5,28 5,25 8,25 5)),LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,5 5),LINESTRING(5 5,10 5)) 70|SRID=11;GEOMETRYCOLLECTION(LINESTRING(1691983.26 4874594.81 312.24,1691984.86 4874593.69 312.24,1691982 4874589.60428571 312.24),LINESTRING(1691982 4874589.60428571 312.24,1691981.30515131 4874588.61164472 312.24),LINESTRING(1691981.30515131 4874588.61164472 312.24,1691979.54 4874586.09 312.24,1691978.03 4874587.16 298.36)) 80|GEOMETRYCOLLECTION(LINESTRING(0 1,0 1,0 1)) 81|GEOMETRYCOLLECTION(LINESTRING(0 1,0 1)) 82|t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/test_index_concurrency����������������������������������������������0000755�0000000�0000000�00000001634�10364371611�021746� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh if [ -z "$TMPDIR" ]; then TMPDIR=/tmp fi OUTFILE="${TMPDIR}/regress_index_out_$$" echo "Running GiST concurrency Regression." DB=postgis_reg PGDATABASE=$DB export PGDATABASE if [ "$1" = "prepare" ]; then echo "" echo "Index Creation will take some time..." echo "" createdb > /dev/null createlang plpgsql > /dev/null psql -f ../lwpostgis.sql > /dev/null 2>&1 psql -f regress_lots_of_points.sql psql -c "CREATE INDEX quick_gist on test using gist (the_geom)" else if [ "$1" = "run" ]; then # Concurrent clients: psql -c "update test set num=-num WHERE the_geom && 'BOX3D(125 125,135 135)'::box3d" & psql -c "update test set num=-num WHERE the_geom && 'BOX3D(125 125,135 135)'::box3d" & psql -c "update test set num=-num WHERE the_geom && 'BOX3D(125 125,135 135)'::box3d" & wait else if [ "$1" = "drop" ]; then dropdb $DB > /dev/null else echo "Usage: $0 [prepare|run|drop]" fi fi fi ����������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/wmsservers.sql������������������������������������������������������0000644�0000000�0000000�00000007762�12144132553�020207� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO error; SELECT 'Starting up MapServer/Geoserver tests...'; -- Set up the data table SELECT 'Setting up the data table...'; CREATE TABLE wmstest ( id INTEGER, pt GEOMETRY(Polygon,4326) ); INSERT INTO wmstest SELECT lon * 100 + lat AS id, st_setsrid(st_buffer(st_makepoint(lon, lat),1.0),4326) AS pt FROM (select lon, generate_series(-80,80, 5) AS lat FROM (SELECT generate_series(-175, 175, 5) AS lon) AS sq1) AS sq2; --INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES ('', 'public','wmstest','pt',2,4326,'POLYGON'); ALTER TABLE wmstest add PRIMARY KEY ( id ); CREATE INDEX wmstest_geomidx ON wmstest using gist ( pt ); -- Geoserver 2.0 NG tests SELECT 'Running Geoserver 2.0 NG tests...'; -- Run a Geoserver 2.0 NG metadata query SELECT 'Geoserver1', upper(TYPE) As TYPE FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; SELECT 'Geoserver2', SRID FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; -- Run a Geoserver 2.0 NG WMS query SELECT 'Geoserver3', "id",substr(encode(ST_AsBinary(ST_Force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-6.58216065979069 -0.7685569763184591, -6.58216065979069 0.911225433349509, -3.050569931030911 0.911225433349509, -3.050569931030911 -0.7685569763184591, -6.58216065979069 -0.7685569763184591))', 4326); -- Run a Geoserver 2.0 NG KML query SELECT 'Geoserver4', count(*) FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver5', "id",substr(encode(ST_AsBinary(ST_Force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver6', "id",substr(encode(ST_AsBinary(ST_Force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-1.507182836191598 24.031312785172446, -1.507182836191598 25.995557016429064, 1.7399982474034008 25.995557016429064, 1.7399982474034008 24.031312785172446, -1.507182836191598 24.031312785172446))', 4326); -- MapServer 5.4 tests select 'MapServer1', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer2', "id",substr(encode(ST_AsBinary(ST_Force_collection(ST_Force_2d("pt")),'NDR'),'base64'),0,16) as geom,"id" from wmstest where pt && ST_GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- MapServer 5.6 tests select * from wmstest where false limit 0; select 'MapServer3', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer4', "id",substr(encode(ST_AsBinary(ST_Force_collection(ST_Force_2d("pt")),'NDR'),'hex'),0,16) as geom,"id" from wmstest where pt && ST_GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- Drop the data table SELECT 'Removing the data table...'; DROP TABLE wmstest; --DELETE FROM geometry_columns WHERE f_table_name = 'wmstest' AND f_table_schema = 'public'; SELECT 'Done.'; ��������������postgis-2.1.2+dfsg.orig/regress/offsetcurve.sql�����������������������������������������������������0000644�0000000�0000000�00000003667�11722777314�020335� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\set VERBOSITY terse set client_min_messages to NOTICE; SELECT 't0', ST_OffsetCurve('POINT(0 0)', 10); SELECT 't0', ST_AsEWKT(ST_OffsetCurve('SRID=42;LINESTRING(0 0, 10 0)', 0)); SELECT 't1', ST_AsEWKT(ST_OffsetCurve('SRID=42;LINESTRING(0 0, 10 0)', 10)); SELECT 't2', ST_AsEWKT(ST_OffsetCurve('SRID=42;LINESTRING(0 0, 10 0)', -10)); SELECT 't3', ST_AsEWKT(ST_OffsetCurve('SRID=42;LINESTRING(10 0, 0 0)', 10)); SELECT 't4', ST_AsEWKT(ST_OffsetCurve('SRID=42;LINESTRING(10 0, 0 0)', -10)); SELECT 't5', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 10 10)', -10), 1)); SELECT 't5b', ST_AsEWKT(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 10 10)', 10)); SELECT 't6', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 10 10)', -10, 'quad_segs=2'), 1)); SELECT 't7', ST_AsEWKT(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 10 10)', -10, 'join=bevel') ); SELECT 't8', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 10 10)', -10, 'quad_segs=2 join=mitre'), 1)); SELECT 't9', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 5 10)', -10, 'quad_segs=2 join=mitre mitre_limit=1'), 1)); SELECT 't10', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 5 10)', 2, 'quad_segs=2 join=mitre mitre_limit=1'), 1)); SELECT 't10b', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'SRID=42;LINESTRING(0 0, 10 0, 5 10)', 2, 'quad_segs=2 join=miter miter_limit=1'), 1)); SELECT 't11', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'LINESTRING(36 38,38 35,41 34,42 33,45 32,47 28,50 28,52 32,57 33)', 2, 'join=mitre'), 0.2)); SELECT 't12', ST_AsEWKT(ST_SnapToGrid(ST_OffsetCurve( 'LINESTRING(36 38,38 35,41 34,42 33,45 32,47 28,50 28,52 32,57 33)', -2, 'join=mitre'), 0.2)); SELECT 't13', ST_AsEWKT(ST_OffsetCurve( 'LINESTRING(0 0,0 20, 10 20, 10 10, 0 10)', 2, 'join=mitre' )); SELECT 't14', ST_AsEWKT(ST_OffsetCurve( 'LINESTRING(0 0,0 20, 10 20, 10 10, 0 10)', -2, '' )); �������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/tickets_expected����������������������������������������������������0000644�0000000�0000000�00000026260�12274240036�020512� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#2|POLYGON((1 1,1 2,2 2,3 2,3 1,2 1,1 1)) #11|0 NOTICE: ST_Locate_Between_Measures and ST_Locate_Along_Measure are deprecated. Use ST_LocateAlong and ST_LocateBetween. #21|SRID=31293;POINTM(6220.13 5337367.145 4566) t ERROR: AddGeometryColumn() - invalid SRID #44|t|t #58|220187|150406|220289|150507 ERROR: lwgeom_to_gml2: 'CurvePolygon' geometry type not supported #66|CIRCULARSTRING(0 0,1 1,2 2) #68a|MULTIPOINT(1 3,4 5) ERROR: lwgeom_longitude_shift: unsupported geom type: CircularString #69|CIRCULARSTRING(220269 150417,220228 150507,220228 150408) #70|3 #73|GEOMETRYCOLLECTION(CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)) #80|MULTILINESTRING((0 0,1 1)) #83|MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406)) #85|0 #112|GEOMETRYCOLLECTION(POINT(-10 50)) NOTICE: ST_Locate_Between_Measures and ST_Locate_Along_Measure are deprecated. Use ST_LocateAlong and ST_LocateBetween. ERROR: Geometry argument does not have an 'M' ordinate #116|POLYGON EMPTY #122|CIRCULARSTRING(220268 150415,220227 150505,220227 150406) #124a|COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,30 5),CIRCULARSTRING(30 5,34 56,67 89)) ERROR: incontinuous compound curve #145a|0103000020e610000000000000 #145b|0 #146|0|t|GEOMETRYCOLLECTION(LINESTRING(0 0,-1 -1),MULTIPOINT(1 2,2 3)) ERROR: Invalid hex string, length (267) has to be a multiple of two! #157|ST_Polygon|POLYGON #157|ST_Point|POINT #157|ST_Polygon|POLYGON #157|ST_CurvePolygon|CURVEPOLYGON #157|ST_CircularString|CIRCULARSTRING #168|3|MULTIPOLYGON ZM (((4275341.96977851 259186.966993061 1323.76295828331 -1.79769313486232e+308,4275341.96977851 259186.966993061 1323.76295828331 -1.79769313486232e+308,4275341.96977851 259186.966993061 1323.76295828331 -1.79769313486232e+308)))|IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4 #175|SRID=26915;POINT(482020 4984378) #178a|0 #178b|5 NOTICE: No points or linestrings in input array #179a| NOTICE: No points or linestrings in input array #179b| #183|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.5 1.2071067812,1 0),(1 0,0 1)) #210a| NOTICE: No points or linestrings in input array #210b| #213|17 #234|COMPOUNDCURVE((0 0,1 1)) #241|0 #254|010700000000000000 #259| #260|1667701 #261|0 #262|POINT(-119.5434 34.9438)|t|t|t #262|POINT(-119.5452 34.9442)|t|t|t #262|POINT(-119.5434 34.9438)|t|t|t #262|POINT(-119.5438 34.9443)|t|t|t #263|SRID=4326;POINT(-119.5434 34.9438)|t|t|t #263|SRID=4326;POINT(-119.5452 34.9442)|t|t|t #263|SRID=4326;POINT(-119.5434 34.9438)|t|t|t #263|SRID=4326;POINT(-119.5438 34.9443)|t|t|t #271|t #272|-2|2 #277|<gml:Point><gml:coordinates>1,1e+308</gml:coordinates></gml:Point> #299|2 #304 #304.a|21 #304.b|1 #408|Too few points in geometry component[ NOTICE: Too few points in geometry component at or near point 0 0 #408.1|f #408.2|Too few points in geometry component[0 0] NOTICE: IllegalArgumentException: Invalid number of points in LinearRing found 2 - must be 0 or >= 4 #408.3|f #408.4|IllegalArgumentException: Invalid number of points in LinearRing found 2 - must be 0 or >= 4 #457.1|POINT(0 0) #457.2|LINESTRING EMPTY #457.3|POLYGON EMPTY #457.4|POINT EMPTY #457.5|LINESTRING(0 0,1 1) #457.6|POLYGON EMPTY #457.7|POINT EMPTY #457.8|LINESTRING EMPTY #457.9|POLYGON((0 0,1 0,1 1,0 1,0 0)) #835.1|POINT EMPTY #835.2|LINESTRING EMPTY #835.3|POLYGON EMPTY #835.4|POINT EMPTY #835.5|LINESTRING EMPTY #835.6|POLYGON EMPTY #835.7|POINT EMPTY #835.8|LINESTRING EMPTY #835.9|POLYGON EMPTY #835.10|MULTIPOINT EMPTY #835.11|MULTILINESTRING EMPTY #835.12|MULTIPOLYGON EMPTY #650|MULTIPOINT(0 0,1 1,2 2) #667|SRID=4326;CURVEPOLYGON(CIRCULARSTRING(30 40,-50 39.9999999999999,30 40)) #677|1121395 #680|01d107000000000000000024c000000000000049400000000000000040 #681a| #681b| #681c| #681d| #681e| #681f| #681g| #682|0103000020e610000000000000 #683|0103000020e610000000000000 #684,#2109|SRID=4326;POINT EMPTY #2109|SRID=3395;POINT EMPTY #685|0103000020e610000000000000 #686|0107000020e610000000000000 #687|f #689|f #690 010200000003000000f771d98de33826c00000000000004440f771d98de33826c000000000008051400000000000805140f771d98de33826c0 #693a|0103000060e61000000100000005000000ea95b20c71c851c02b1895d409204540000000000000f03f9cc420b072c851c0c7bab88d062045400000000000000840b1506b9a77c851c08e75711b0d20454000000000000000c0ff21fdf675c851c0f2d24d6210204540000000000000f03fea95b20c71c851c02b1895d4092045400000000000000000 #693b|0103000060e61000000100000007000000ea95b20c71c851c0aa605452272045400000000000000000386744696fc851c04703780b2420454000000000000034408638d6c56dc851c04703780b2420454000000000000034c08638d6c56dc851c0e3a59bc42020454000000000000014408638d6c56dc851c08048bf7d1d20454000000000000010409cc420b072c851c04703780b242045400000000000001840ea95b20c71c851c0aa605452272045400000000000003e40 #694 ERROR: Shell is not a line #695 ERROR: First argument must be a LINESTRING #696|010f000080060000000103000080010000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f03f0000000000000000000000000000f03f000000000000f03f0000000000000000000000000000f03f0000000000000000000000000000000000000000000000000000000000000000010300008001000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000f03f0000000000000000000000000000f03f000000000000f03f0000000000000000000000000000f03f0000000000000000000000000000000000000000000000000000000000000000000000000000000001030000800100000005000000000000000000000000000000000000000000000000000000000000000000f03f00000000000000000000000000000000000000000000f03f0000000000000000000000000000f03f00000000000000000000000000000000000000000000f03f00000000000000000000000000000000000000000000000001030000800100000005000000000000000000f03f000000000000f03f0000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f0000000000000000000000000000f03f000000000000f03f00000000000000000000000000000000000000000000f03f000000000000f03f0000000000000000010300008001000000050000000000000000000000000000000000f03f00000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000000000000000000000000000000000f03f00000000000000000103000080010000000500000000000000000000000000000000000000000000000000f03f000000000000f03f0000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f0000000000000000000000000000f03f000000000000f03f00000000000000000000000000000000000000000000f03f #720|MULTIPOINT(-1113194.91 4838471.4,-1113194.91 7326837.72,-1113194.91 11028513.63,556597.45 4838471.4,556597.45 7326837.72,556597.45 11028513.63,2226389.82 4838471.4,2226389.82 7326837.72,2226389.82 11028513.63,3896182.18 4838471.4,3896182.18 7326837.72,3896182.18 11028513.63,5565974.54 4838471.4,5565974.54 7326837.72,5565974.54 11028513.63) #723|0101000020e61000006284f068e33826c00000000000004440 #723|0107000020e610000000000000 #723|0107000020e610000000000000 #723|0101000020e61000006284f068e33826c00100000000804b40 #804|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">0 0</gml:pos></gml:Point> #845|t #834|GEOMETRYCOLLECTION(POINT(0 0 5),LINESTRING(10 10 5,10 0 5)) #884|1|f #884|2|t #938| #668|BOX(10 2,14 2) #711| #712|t #756.1|t|t #1023|t #1023.a|f #1023.b|t #1060|FFFFFFFF2 #1273|t #1273.1|t ERROR: stats for "t.g" do not exist ERROR: stats for "t.g" do not exist DEBUG: ST_Estimated_Extent signature was deprecated in 2.1.0. Please use ST_EstimatedExtent ERROR: stats for "t.g" do not exist ERROR: stats for "t.g" do not exist #877.4|-10.15000|20.15000|-50.40000|30.40000 #877.5|-10.15000|20.15000|-50.40000|30.40000 #1292|GEOMETRYCOLLECTION(POINT(180 90),POLYGON((140 50,150 50,180 50,140 50),(140 60,150 60,180 60,140 60))) NOTICE: Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY NOTICE: Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY #1292.1|POINT(180 85)|POINT(-175 90) <#1320> #1320.geog.1|MULTIPOLYGON|4326 #1320.geom.1|MULTIPOLYGON|4326 ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) #1320.geog.2|MULTIPOLYGON|4326 #1320.geom.2|MULTIPOLYGON|4326 ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) #1320.geog.3|MULTIPOLYGON|4326 #1320.geom.3|MULTIPOLYGON|4326 </#1320> #1344|25 #1385| #657.1|-166.78 #657.2|10.00 #657.3|t #1305.1|POINT(10 10) #1305.2|t #1305.3|t ERROR: MultiPolygon cannot contain MultiPoint element at character 8 ERROR: MultiLineString cannot contain MultiPoint element at character 8 ERROR: MultiPoint cannot contain MultiPoint element at character 8 ERROR: CompoundCurve cannot contain MultiPoint element at character 8 ERROR: MultiCurve cannot contain MultiPoint element at character 8 ERROR: MultiSurface cannot contain MultiPoint element at character 8 #1453.1|t #1453.2|f #1454|t #1414|CURVEPOLYGON Z EMPTY #1478|01040000200100000000000000 #745|GEOMETRYCOLLECTION(POLYGON((-72 42 1,-70 43 1,-71 41 1,-72 42 1))) #1450|POINT|POLYGON #1482|4326 #852.1|1|f|f #852.1|2|f|f #852.2|1|t|t #852.2|2|t|t #1489|MULTIPOINT EMPTY|0|MULTILINESTRING EMPTY|0|MULTIPOLYGON EMPTY|0|GEOMETRYCOLLECTION EMPTY|0 ERROR: AddToPROJ4SRSCache: could not parse proj4 string '' #1038| #1042|2 #1170|90 #1264|t #1398a|POINT(-119.093153 45.632669) #1398b|POINT(-160.137654 77.091608) #1543|MULTILINESTRING((0 0,10 0,10 10,0 0),(0 0))|POLYGON((0 0,10 10,10 0,0 0)) #1578|f|f #1580.1|Point[BS] ERROR: transform: couldn't project point (180 90 0): tolerance condition error (-20) #1580.3|Point[BS] #1596.1|public.road_pg.roads_geom SRID:3395 TYPE:POINT DIMS:2 ERROR: invalid SRID: 330000 not found in spatial_ref_sys #1596.3|3395 ERROR: invalid SRID: 999000 not found in spatial_ref_sys #1596.5|3395 NOTICE: SRID value -1 converted to the officially unknown SRID value 0 #1596.6|public.road_pg.roads_geom SRID changed to 0 #1596.7|0 #1596|Point[BGS] #1695|MULTIPOLYGON EMPTY #1697.1|0 #1697.2|0 #1697.3|1024 #1734.1|1026 #1755|01e9030000000000000040554000000000008041400000000000000000 #1776|POLYGON((0 0,10 0,10 10,0 0))|POLYGON((0 0,10 0,10 10,0 0)) #1780|t #1791|4.7 ERROR: ST_Segmentize: invalid max_distance 0 (must be >= 0) ERROR: invalid GML representation #1957|1 #1978|3.1416 #1996|{"type":"Point","coordinates":[]} #2001|POLYGON((0 0,0 1,1 1,0 0)) #2028|TIN(((0 0,0 1,1 1,0 0))) #2035a|6 #2035b|6 #2084|1|f|f #2084|2|t|t #2084|3|f|f #2112a|0|LINESTRING(2.5 2.5 1,2.5 2.5 1) #2112b|1|LINESTRING(1 1 1,1 0 1) #2108|SRID=3395;POINTM EMPTY #2117|SRID=3395;POINTM EMPTY #2110.1|f #2110.2|t #2110.3|t #2145|6792004 #2307|MULTIPOLYGON(((-41.1932 -7.3257,-41.1616 -7.3257,-41.1569 -7.3257,-41.1569 -7.3483,-41.1932 -7.3483,-41.1932 -7.3257),(-41.1616 -7.3257,-41.1879 -7.3257,-41.1879 -7.3425,-41.1616 -7.3425,-41.1616 -7.3257))) #2415.1|MULTICURVE(COMPOUNDCURVE((0 0,10 0),CIRCULARSTRING(10 0,15 1,20 10))) #2415.2|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(10 0,15 1,20 0,18 5,20 10,10 10,10 0))) #2412|LINESTRING(0 0,10 0,20 0) #2420.1|LINESTRING(0 0,10 0,10 10,0 10,0 0) #2420.2|LINESTRING(0 0,10 0,10 10,0 10) #2423|POLYGON((-10 0,-9.2388 3.82683,-7.07107 7.07107,-3.82683 9.2388,0 10,3.82683 9.2388,7.07107 7.07107,9.2388 3.82683,10 0,-10 0)) #2424|MULTILINESTRING((0 0,10 0,24 3,30 10)) #2427|POINT(-1 0) #2168|5340.76237395|5340.76237395|0 #2556|47409|20623 #2556|1|0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/setpoint_expected���������������������������������������������������0000644�0000000�0000000�00000000745�11722777314�020724� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: Point index out of range (0..2) ERROR: Point index out of range (0..2) ERROR: First argument must be a LINESTRING ERROR: Third argument must be a POINT LINESTRING(90 91 92,1 1 1,2 2 2) LINESTRINGM(0 0 0,90 91 92,2 2 2) LINESTRINGM(0 0 0,1 1 1,90 91 93) LINESTRING(0 0 0,90 91 92,2 2 2) LINESTRING(0 0 0 0,1 1 1 1,2 2 2 2,90 91 0 0) LINESTRING(0 0 0 0,1 1 1 1,90 91 92 0,4 4 4 4) LINESTRING(0 0 0 0,90 91 0 92,2 2 2 2,4 4 4 4) LINESTRING(90 91 92 93,1 1 1 1,2 2 2 2,4 4 4 4) ���������������������������postgis-2.1.2+dfsg.orig/regress/relatematch.sql�����������������������������������������������������0000644�0000000�0000000�00000001144�11722777314�020257� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT a, b, ST_RelateMatch(a,b) FROM ( SELECT '101202FFF'::text as a, 'TTTTTTFFF'::text as b) as f; SELECT a, b, ST_RelateMatch(a,b) FROM ( SELECT '101202FFF'::text as a, 'T0T2TTFFF'::text as b) as f; SELECT a, b, ST_RelateMatch(a,b) FROM ( SELECT '101202FFF'::text as a, '101202FFF'::text as b) as f; SELECT a, b, ST_RelateMatch(a,b) FROM ( SELECT '101202FFF'::text as a, '101102FFF'::text as b) as f; SELECT a, b, ST_RelateMatch(a,b) FROM ( SELECT 'FFFFFFFFF'::text as a, '1FFFFFFFF'::text as b) as f; SELECT a, b, ST_RelateMatch(a,b) FROM ( SELECT 'FFFFFFFFF'::text as a, '*FFFFFFFF'::text as b) as f; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/offsetcurve_expected������������������������������������������������0000644�0000000�0000000�00000001600�11722777314�021401� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: ST_OffsetCurve only works with LineStrings t0|SRID=42;LINESTRING(0 0,10 0) t1|SRID=42;LINESTRING(0 10,10 10) t2|SRID=42;LINESTRING(10 -10,0 -10) t3|SRID=42;LINESTRING(10 -10,0 -10) t4|SRID=42;LINESTRING(0 10,10 10) t5|SRID=42;LINESTRING(20 10,20 0,20 -2,19 -4,18 -6,17 -7,16 -8,14 -9,12 -10,10 -10,0 -10) t5b|SRID=42;LINESTRING EMPTY t6|SRID=42;LINESTRING(20 10,20 0,17 -7,10 -10,0 -10) t7|SRID=42;LINESTRING(20 10,20 0,10 -10,0 -10) t8|SRID=42;LINESTRING(20 10,20 -10,0 -10) t9|SRID=42;LINESTRING(14 14,21 -1,16 -9,0 -10) t10|SRID=42;LINESTRING(0 2,7 2,3 9) t10b|SRID=42;LINESTRING(0 2,7 2,3 9) t11|LINESTRING(37.6 39.2,39.2 36.6,42 35.8,43 34.8,46.4 33.6,48.2 30,48.8 30,50.6 33.8,56.6 35) t12|LINESTRING(57.4 31,53.4 30.2,51.2 26,45.8 26,43.6 30.4,41 31.2,40 32.2,36.8 33.4,34.4 36.8) t13|LINESTRING(-2 0,-2 22,12 22,12 8,2 8) t14|MULTILINESTRING((2 12,8 12,8 18,2 18,2 12),(2 8,2 0)) ��������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_selectivity_expected����������������������������������������0000644�0000000�0000000�00000001031�12057713602�023132� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: stats for "no_stats.g" do not exist ERROR: stats for "no_stats.g" do not exist ERROR: stats for "no_stats.g" do not exist ERROR: stats for "no_stats_join.g" do not exist selectivity_00|2127 selectivity_01|1068 selectivity_02|actual|0.502 selectivity_03|estimated|0.502 selectivity_04|161 selectivity_05|actual|0.076 selectivity_06|estimated|0.076 selectivity_07|81 selectivity_08|actual|0.038 selectivity_09|estimated|0.038 selectivity_10|actual|0 selectivity_09|estimated|0 selectivity_10|actual|1 selectivity_09|estimated|1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/summary.sql���������������������������������������������������������0000644�0000000�0000000�00000001527�11722777314�017470� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT 'T1', ST_Summary('POINT(0 0)'::geometry); SELECT 'T1B', ST_Summary(postgis_addbbox('POINT(0 0)'::geometry)); SELECT 'T1S', ST_Summary('SRID=4326;POINT(0 0)'::geometry); SELECT 'T1M', ST_Summary('POINTM(0 0 0)'::geometry); SELECT 'T1Z', ST_Summary('POINT(0 0 0)'::geometry); SELECT 'T1ZM', ST_Summary('POINT(0 0 0 0)'::geometry); SELECT 'T1ZMB', ST_Summary(postgis_addbbox('POINT(0 0 0 0)'::geometry)); SELECT 'T1ZMBS', ST_Summary(postgis_addbbox( 'SRID=4326;POINT(0 0 0 0)'::geometry)); SELECT 'T3', ST_Summary('MULTIPOINT(0 0)'::geometry); SELECT 'T4', ST_Summary('SRID=4326;MULTIPOINT(0 0)'::geometry); SELECT 'T5', ST_Summary('GEOMETRYCOLLECTION( MULTILINESTRING((0 0, 1 0),(2 0, 4 4)),MULTIPOINT(0 0) )'::geometry); SELECT 'T6', ST_Summary('SRID=4326;GEOMETRYCOLLECTION( MULTILINESTRING((0 0, 1 0),(2 0, 4 4)),MULTIPOINT(0 0) )'::geometry); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-general.sql��������������������������������������������������0000644�0000000�0000000�00000006401�11722777314�020610� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_HasArc(ST_GeomFromText('POINT(0 0)')); SELECT ST_HasArc(ST_GeomFromText('LINESTRING(0 0, 1 1, 1 0)')); SELECT ST_HasArc(ST_GeomFromEWKT('CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2)')); SELECT ST_HasArc(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2, 2 0 0 0, 0 0 0 0))')); SELECT ST_HasArc(ST_GeomFromEWKT('POLYGON( (-10 -10, 10 -10, 10 10, -10 10, -10 -10), (5 0, 0 5, -5 0, 0 -5, 5 0))')); SELECT ST_HasArc(ST_GeomFromEWKT('CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2))')); SELECT ST_HasArc(ST_GeomFromEWKT('MULTIPOINT((0 0), (3 2))')); SELECT ST_HasArc(ST_GeomFromEWKT('MULTILINESTRING( (0 0, 3 2), (4 8, 9 8), (2 9, 4 8))')); SELECT ST_HasArc(ST_GeomFromEWKT('MULTICURVE( (0 0, 3 2), (4 8, 9 8), (2 9, 4 8))')); SELECT ST_HasArc(ST_GeomFromEWKT('MULTICURVE(( 5 5 1 3, 3 5 2 2, 3 3 3 1, 0 3 1 1) ,CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2))')); SELECT ST_HasArc(ST_GeomFromEWKT('MULTIPOLYGON( ((-10 -10, 10 -10, 10 10, -10 10, -10 -10), (5 0, 0 5, -5 0, 0 -5, 5 0)), ((9 2, 3 8, 9 4, 9 2)))')); SELECT ST_HasArc(ST_GeomFromEWKT('MULTISURFACE( ((-10 -10, 10 -10, 10 10, -10 10, -10 -10), (5 0, 0 5, -5 0, 0 -5, 5 0)), ((9 2, 3 8, 9 4, 9 2)))')); SELECT ST_HasArc(ST_GeomFromEWKT('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2)), ((7 8 7 8, 10 10 5 5, 6 14 3 1, 4 11 4 6, 7 8 7 8), (9 9 7 8, 8 12 7 8, 7 10 7 8, 9 9 7 8)))')); SELECT ST_AsEWKT(ST_LineToCurve('LINESTRING( -13151357.927248 3913656.64539871, -13151419.0845266 3913664.12016378, -13151441.323537 3913666.61175286, -13151456.8908442 3913666.61175286, -13151476.9059536 3913666.61175286, -13151496.921063 3913666.61175287, -13151521.3839744 3913666.61175287, -13151591.4368571 3913665.36595828)')); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/lwgeom_regress.sql��������������������������������������������������0000644�0000000�0000000�00000210244�12143205626�021003� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE TABLE test_data ( id integer, wkt text, wkb_xdr text, wkb_ndr text ); INSERT INTO test_data VALUES (1, 'MULTIPOINT(1 2)', '00000000040000000100000000013FF00000000000004000000000000000', '0104000000010000000101000000000000000000F03F0000000000000040'); INSERT INTO test_data VALUES (-5, 'LINESTRING(1 2,3 4)', '0000000002000000023FF0000000000000400000000000000040080000000000004010000000000000', '010200000002000000000000000000F03F000000000000004000000000000008400000000000001040'); INSERT INTO test_data VALUES (-4, 'LINESTRING(1 2 3,4 5 6)', '0080000002000000023FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000', '010200008002000000000000000000F03F00000000000000400000000000000840000000000000104000000000000014400000000000001840'); INSERT INTO test_data VALUES (110, 'GEOMETRYCOLLECTION(LINESTRING(1 2,3 4))', '0000000007000000010000000002000000023FF0000000000000400000000000000040080000000000004010000000000000', '010700000001000000010200000002000000000000000000F03F000000000000004000000000000008400000000000001040'); INSERT INTO test_data VALUES (114, 'GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),LINESTRING(5 6,7 8))', '0000000007000000020000000002000000023FF000000000000040000000000000004008000000000000401000000000000000000000020000000240140000000000004018000000000000401C0000000000004020000000000000', '010700000002000000010200000002000000000000000000F03F000000000000004000000000000008400000000000001040010200000002000000000000000000144000000000000018400000000000001C400000000000002040'); INSERT INTO test_data VALUES (14, 'MULTILINESTRING((1 2,3 4),(5 6,7 8))', '0000000005000000020000000002000000023FF000000000000040000000000000004008000000000000401000000000000000000000020000000240140000000000004018000000000000401C0000000000004020000000000000', '010500000002000000010200000002000000000000000000F03F000000000000004000000000000008400000000000001040010200000002000000000000000000144000000000000018400000000000001C400000000000002040'); INSERT INTO test_data VALUES (0, 'POINT(1 2)', '00000000013FF00000000000004000000000000000', '0101000000000000000000F03F0000000000000040'); INSERT INTO test_data VALUES (101, 'GEOMETRYCOLLECTION(POINT(1 2))', '00000000070000000100000000013FF00000000000004000000000000000', '0107000000010000000101000000000000000000F03F0000000000000040'); INSERT INTO test_data VALUES (-1, 'POINT(1 2 3)', '00800000013FF000000000000040000000000000004008000000000000', '0101000080000000000000F03F00000000000000400000000000000840'); INSERT INTO test_data VALUES (118, 'GEOMETRYCOLLECTION(LINESTRING(1 2 -1,3 4 -2,5 6 -3),LINESTRING(7 8 -1,9 10 -2,11 12 -3))', '0080000007000000020080000002000000033FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C00000000000000040140000000000004018000000000000C008000000000000008000000200000003401C0000000000004020000000000000BFF000000000000040220000000000004024000000000000C00000000000000040260000000000004028000000000000C008000000000000', '010700008002000000010200008003000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C00000000000001440000000000000184000000000000008C00102000080030000000000000000001C400000000000002040000000000000F0BF0000000000002240000000000000244000000000000000C00000000000002640000000000000284000000000000008C0'); INSERT INTO test_data VALUES (-8, 'LINESTRING(1 2,3 4,5 6,7 8,9 10)', '0000000002000000053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402000000000000040220000000000004024000000000000', '010200000005000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400000000000001C40000000000000204000000000000022400000000000002440'); INSERT INTO test_data VALUES (115, 'GEOMETRYCOLLECTION(LINESTRING(1 2,3 4,5 6),LINESTRING(7 8,9 10))', '0000000007000000020000000002000000033FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000000000000200000002401C000000000000402000000000000040220000000000004024000000000000', '010700000002000000010200000003000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400102000000020000000000000000001C40000000000000204000000000000022400000000000002440'); INSERT INTO test_data VALUES (117, 'GEOMETRYCOLLECTION(LINESTRING(5 6 -55,7 8 -22),LINESTRING(1 2 -1,3 4 -2))', '00800000070000000200800000020000000240140000000000004018000000000000C04B800000000000401C0000000000004020000000000000C0360000000000000080000002000000023FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C000000000000000', '010700008002000000010200008002000000000000000000144000000000000018400000000000804BC00000000000001C40000000000000204000000000000036C0010200008002000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C0'); INSERT INTO test_data VALUES (-7, 'LINESTRING(1 2,3 4,5 6,7 8)', '0000000002000000043FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C0000000000004020000000000000', '010200000004000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400000000000001C400000000000002040'); INSERT INTO test_data VALUES (105, 'GEOMETRYCOLLECTION(POINT(1 2 -1))', '00800000070000000100800000013FF00000000000004000000000000000BFF0000000000000', '0107000080010000000101000080000000000000F03F0000000000000040000000000000F0BF'); INSERT INTO test_data VALUES (112, 'GEOMETRYCOLLECTION(LINESTRING(1 2 -1,3 4 -2))', '0080000007000000010080000002000000023FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C000000000000000', '010700008001000000010200008002000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C0'); INSERT INTO test_data VALUES (-6, 'LINESTRING(1 2,3 4,5 6)', '0000000002000000033FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000', '010200000003000000000000000000F03F00000000000000400000000000000840000000000000104000000000000014400000000000001840'); INSERT INTO test_data VALUES (111, 'GEOMETRYCOLLECTION(LINESTRING(1 2,3 4,5 6))', '0000000007000000010000000002000000033FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000', '010700000001000000010200000003000000000000000000F03F00000000000000400000000000000840000000000000104000000000000014400000000000001840'); INSERT INTO test_data VALUES (18, 'MULTILINESTRING((1 2 -1,3 4 -2,5 6 -3),(7 8 -1,9 10 -2,11 12 -3))', '0080000005000000020080000002000000033FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C00000000000000040140000000000004018000000000000C008000000000000008000000200000003401C0000000000004020000000000000BFF000000000000040220000000000004024000000000000C00000000000000040260000000000004028000000000000C008000000000000', '010500008002000000010200008003000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C00000000000001440000000000000184000000000000008C00102000080030000000000000000001C400000000000002040000000000000F0BF0000000000002240000000000000244000000000000000C00000000000002640000000000000284000000000000008C0'); INSERT INTO test_data VALUES (127, 'GEOMETRYCOLLECTION(POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)),POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1),(2 2,2 3,3 3,3 2,2 2)))', '0000000007000000020000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A0000000003000000020000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A000000054000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400000000000000040000000000000004000000000000000', '0107000000020000000103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F0103000000020000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F050000000000000000000040000000000000004000000000000000400000000000000840000000000000084000000000000008400000000000000840000000000000004000000000000000400000000000000040'); INSERT INTO test_data VALUES (120, 'GEOMETRYCOLLECTION(POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)))', '0000000007000000010000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A', '0107000000010000000103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F'); INSERT INTO test_data VALUES (100, 'GEOMETRYCOLLECTION(POINT(1 2),POINT(3 4))', '00000000070000000200000000013FF00000000000004000000000000000000000000140080000000000004010000000000000', '0107000000020000000101000000000000000000F03F0000000000000040010100000000000000000008400000000000001040'); INSERT INTO test_data VALUES (122, 'GEOMETRYCOLLECTION(POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1),(2 2,2 3,3 3,3 2,2 2)))', '0000000007000000010000000003000000020000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A000000054000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400000000000000040000000000000004000000000000000', '0107000000010000000103000000020000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F050000000000000000000040000000000000004000000000000000400000000000000840000000000000084000000000000008400000000000000840000000000000004000000000000000400000000000000040'); INSERT INTO test_data VALUES (27, 'MULTIPOLYGON(((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)),((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1),(2 2,2 3,3 3,3 2,2 2)))', '0000000006000000020000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A0000000003000000020000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A000000054000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400000000000000040000000000000004000000000000000', '0106000000020000000103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F0103000000020000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F050000000000000000000040000000000000004000000000000000400000000000000840000000000000084000000000000008400000000000000840000000000000004000000000000000400000000000000040'); INSERT INTO test_data VALUES (106, 'GEOMETRYCOLLECTION(POINT(1 2 -2),POINT(3 4 -2),POINT(5 6 -3))', '00800000070000000300800000013FF00000000000004000000000000000C000000000000000008000000140080000000000004010000000000000C000000000000000008000000140140000000000004018000000000000C008000000000000', '0107000080030000000101000080000000000000F03F000000000000004000000000000000C001010000800000000000000840000000000000104000000000000000C001010000800000000000001440000000000000184000000000000008C0'); INSERT INTO test_data VALUES (11, 'MULTILINESTRING((1 2,3 4,5 6))', '0000000005000000010000000002000000033FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000', '010500000001000000010200000003000000000000000000F03F00000000000000400000000000000840000000000000104000000000000014400000000000001840'); INSERT INTO test_data VALUES (12, 'MULTILINESTRING((1 2 -1,3 4 -2))', '0080000005000000010080000002000000023FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C000000000000000', '010500008001000000010200008002000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C0'); INSERT INTO test_data VALUES (13, 'MULTILINESTRING((1 2 -1,3 4 -2,5 6 -3))', '0080000005000000010080000002000000033FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C00000000000000040140000000000004018000000000000C008000000000000', '010500008001000000010200008003000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C00000000000001440000000000000184000000000000008C0'); INSERT INTO test_data VALUES (102, 'GEOMETRYCOLLECTION(POINT(1 2),POINT(3 4),POINT(5 6))', '00000000070000000300000000013FF00000000000004000000000000000000000000140080000000000004010000000000000000000000140140000000000004018000000000000', '0107000000030000000101000000000000000000F03F0000000000000040010100000000000000000008400000000000001040010100000000000000000014400000000000001840'); INSERT INTO test_data VALUES (104, 'GEOMETRYCOLLECTION(POINT(1 2 -1),POINT(3 4 -2))', '00800000070000000200800000013FF00000000000004000000000000000BFF0000000000000008000000140080000000000004010000000000000C000000000000000', '0107000080020000000101000080000000000000F03F0000000000000040000000000000F0BF01010000800000000000000840000000000000104000000000000000C0'); INSERT INTO test_data VALUES (17, 'MULTILINESTRING((5 6 -55,7 8 -22),(1 2 -1,3 4 -2))', '00800000050000000200800000020000000240140000000000004018000000000000C04B800000000000401C0000000000004020000000000000C0360000000000000080000002000000023FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C000000000000000', '010500008002000000010200008002000000000000000000144000000000000018400000000000804BC00000000000001C40000000000000204000000000000036C0010200008002000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C0'); INSERT INTO test_data VALUES (113, 'GEOMETRYCOLLECTION(LINESTRING(1 2 -1,3 4 -2,5 6 -3))', '0080000007000000010080000002000000033FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C00000000000000040140000000000004018000000000000C008000000000000', '010700008001000000010200008003000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C00000000000001440000000000000184000000000000008C0'); INSERT INTO test_data VALUES (-3, 'LINESTRING(1 2 3,4 5 6,7 8 9)', '0080000002000000033FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000', '010200008003000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400000000000001C4000000000000020400000000000002240'); INSERT INTO test_data VALUES (21, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01)))', '0080000006000000010080000003000000010000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B', '0106000080010000000103000080010000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF'); INSERT INTO test_data VALUES (116, 'GEOMETRYCOLLECTION(LINESTRING(1 2 -1,3 4 -2),LINESTRING(5 6 -55,7 8 -22))', '0080000007000000020080000002000000023FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C00000000000000000800000020000000240140000000000004018000000000000C04B800000000000401C0000000000004020000000000000C036000000000000', '010700008002000000010200008002000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C0010200008002000000000000000000144000000000000018400000000000804BC00000000000001C40000000000000204000000000000036C0'); INSERT INTO test_data VALUES (-2, 'LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12)', '0080000002000000043FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000', '010200008004000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400000000000001C4000000000000020400000000000002240000000000000244000000000000026400000000000002840'); INSERT INTO test_data VALUES (2, 'MULTIPOINT(1 2,3 4)', '00000000040000000200000000013FF00000000000004000000000000000000000000140080000000000004010000000000000', '0104000000020000000101000000000000000000F03F0000000000000040010100000000000000000008400000000000001040'); INSERT INTO test_data VALUES (3, 'MULTIPOINT(1 2 3,4 5 6)', '00800000040000000200800000013FF0000000000000400000000000000040080000000000000080000001401000000000000040140000000000004018000000000000', '0104000080020000000101000080000000000000F03F000000000000004000000000000008400101000080000000000000104000000000000014400000000000001840'); INSERT INTO test_data VALUES (4, 'MULTIPOINT(1 2 3,4 5 6,7 8 9)', '00800000040000000300800000013FF00000000000004000000000000000400800000000000000800000014010000000000000401400000000000040180000000000000080000001401C00000000000040200000000000004022000000000000', '0104000080030000000101000080000000000000F03F00000000000000400000000000000840010100008000000000000010400000000000001440000000000000184001010000800000000000001C4000000000000020400000000000002240'); INSERT INTO test_data VALUES (5, 'MULTIPOINT(1 2,4 5,7 8)', '00000000040000000300000000013FF000000000000040000000000000000000000001401000000000000040140000000000000000000001401C0000000000004020000000000000', '0104000000030000000101000000000000000000F03F000000000000004001010000000000000000001040000000000000144001010000000000000000001C400000000000002040'); INSERT INTO test_data VALUES (10, 'MULTILINESTRING((1 2,3 4))', '0000000005000000010000000002000000023FF0000000000000400000000000000040080000000000004010000000000000', '010500000001000000010200000002000000000000000000F03F000000000000004000000000000008400000000000001040'); INSERT INTO test_data VALUES (121, 'GEOMETRYCOLLECTION(POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01)))', '0080000007000000010080000003000000010000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B', '0107000080010000000103000080010000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF'); INSERT INTO test_data VALUES (123, 'GEOMETRYCOLLECTION(POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)))', '0080000007000000010080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B', '0107000080010000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF'); INSERT INTO test_data VALUES (125, 'GEOMETRYCOLLECTION(POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)),POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)))', '0000000007000000020000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A0000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A', '0107000000020000000103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F0103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F'); INSERT INTO test_data VALUES (15, 'MULTILINESTRING((1 2,3 4,5 6),(7 8,9 10))', '0000000005000000020000000002000000033FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000000000000200000002401C000000000000402000000000000040220000000000004024000000000000', '010500000002000000010200000003000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400102000000020000000000000000001C40000000000000204000000000000022400000000000002440'); INSERT INTO test_data VALUES (16, 'MULTILINESTRING((1 2 -1,3 4 -2),(5 6 -55,7 8 -22))', '0080000005000000020080000002000000023FF00000000000004000000000000000BFF000000000000040080000000000004010000000000000C00000000000000000800000020000000240140000000000004018000000000000C04B800000000000401C0000000000004020000000000000C036000000000000', '010500008002000000010200008002000000000000000000F03F0000000000000040000000000000F0BF0000000000000840000000000000104000000000000000C0010200008002000000000000000000144000000000000018400000000000804BC00000000000001C40000000000000204000000000000036C0'); INSERT INTO test_data VALUES (20, 'MULTIPOLYGON(((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)))', '0000000006000000010000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A', '0106000000010000000103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F'); INSERT INTO test_data VALUES (22, 'MULTIPOLYGON(((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1),(2 2,2 3,3 3,3 2,2 2)))', '0000000006000000010000000003000000020000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A000000054000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400000000000000040000000000000004000000000000000', '0106000000010000000103000000020000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F050000000000000000000040000000000000004000000000000000400000000000000840000000000000084000000000000008400000000000000840000000000000004000000000000000400000000000000040'); INSERT INTO test_data VALUES (23, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)))', '0080000006000000010080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B', '0106000080010000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF'); INSERT INTO test_data VALUES (24, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01),(4 2 0,4 3 0,5 3 0,5 2 0,4 2 0)))', '0080000006000000010080000003000000030000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B00000005401000000000000040000000000000000000000000000000401000000000000040080000000000000000000000000000401400000000000040080000000000000000000000000000401400000000000040000000000000000000000000000000401000000000000040000000000000000000000000000000', '0106000080010000000103000080030000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF05000000000000000000104000000000000000400000000000000000000000000000104000000000000008400000000000000000000000000000144000000000000008400000000000000000000000000000144000000000000000400000000000000000000000000000104000000000000000400000000000000000'); INSERT INTO test_data VALUES (25, 'MULTIPOLYGON(((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)),((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1)))', '0000000006000000020000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A0000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A', '0106000000020000000103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F0103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F'); INSERT INTO test_data VALUES (26, 'MULTIPOLYGON(((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01)))', '0080000006000000020080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A00000000000000000080000003000000010000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B', '0106000080020000000103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F00000000000000000103000080010000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF'); INSERT INTO test_data VALUES (28, 'MULTIPOLYGON(((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)))', '0080000006000000020080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A00000000000000000080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B', '0106000080020000000103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F00000000000000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF'); INSERT INTO test_data VALUES (29, 'MULTIPOLYGON(((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01),(4 2 0,4 3 0,5 3 0,5 2 0,4 2 0)))', '0080000006000000020080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A00000000000000000080000003000000030000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B00000005401000000000000040000000000000000000000000000000401000000000000040080000000000000000000000000000401400000000000040080000000000000000000000000000401400000000000040000000000000000000000000000000401000000000000040000000000000000000000000000000', '0106000080020000000103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F00000000000000000103000080030000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF05000000000000000000104000000000000000400000000000000000000000000000104000000000000008400000000000000000000000000000144000000000000008400000000000000000000000000000144000000000000000400000000000000000000000000000104000000000000000400000000000000000'); INSERT INTO test_data VALUES (30, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A0000000000000000', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F0000000000000000'); INSERT INTO test_data VALUES (31, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000010000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080010000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF'); INSERT INTO test_data VALUES (32, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0),(2 2 0,2 3 0,3 3 0,3 2 0,2 2 0)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000020000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A000000000000000000000005400000000000000040000000000000000000000000000000400000000000000040080000000000000000000000000000400800000000000040080000000000000000000000000000400800000000000040000000000000000000000000000000400000000000000040000000000000000000000000000000', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080020000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F000000000000000005000000000000000000004000000000000000400000000000000000000000000000004000000000000008400000000000000000000000000000084000000000000008400000000000000000000000000000084000000000000000400000000000000000000000000000004000000000000000400000000000000000'); INSERT INTO test_data VALUES (33, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF'); INSERT INTO test_data VALUES (34, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01),(4 2 0,4 3 0,5 3 0,5 2 0,4 2 0)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000030000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B00000005401000000000000040000000000000000000000000000000401000000000000040080000000000000000000000000000401400000000000040080000000000000000000000000000401400000000000040000000000000000000000000000000401000000000000040000000000000000000000000000000', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080030000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF05000000000000000000104000000000000000400000000000000000000000000000104000000000000008400000000000000000000000000000144000000000000008400000000000000000000000000000144000000000000000400000000000000000000000000000104000000000000000400000000000000000'); INSERT INTO test_data VALUES (124, 'GEOMETRYCOLLECTION(POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01),(4 2 0,4 3 0,5 3 0,5 2 0,4 2 0)))', '0080000007000000010080000003000000030000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B00000005401000000000000040000000000000000000000000000000401000000000000040080000000000000000000000000000401400000000000040080000000000000000000000000000401400000000000040000000000000000000000000000000401000000000000040000000000000000000000000000000', '0107000080010000000103000080030000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF05000000000000000000104000000000000000400000000000000000000000000000104000000000000008400000000000000000000000000000144000000000000008400000000000000000000000000000144000000000000000400000000000000000000000000000104000000000000000400000000000000000'); INSERT INTO test_data VALUES (126, 'GEOMETRYCOLLECTION(POLYGON((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)),POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01)))', '0080000007000000020080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A00000000000000000080000003000000010000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B', '0107000080020000000103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F00000000000000000103000080010000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF'); INSERT INTO test_data VALUES (128, 'GEOMETRYCOLLECTION(POLYGON((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)),POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)))', '0080000007000000020080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A00000000000000000080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B', '0107000080020000000103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F00000000000000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF'); INSERT INTO test_data VALUES (129, 'GEOMETRYCOLLECTION(POLYGON((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)),POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01),(4 2 0,4 3 0,5 3 0,5 2 0,4 2 0)))', '0080000007000000020080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A00000000000000000080000003000000030000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B00000005401000000000000040000000000000000000000000000000401000000000000040080000000000000000000000000000401400000000000040080000000000000000000000000000401400000000000040000000000000000000000000000000401000000000000040000000000000000000000000000000', '0107000080020000000103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F00000000000000000103000080030000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF05000000000000000000104000000000000000400000000000000000000000000000104000000000000008400000000000000000000000000000144000000000000008400000000000000000000000000000144000000000000000400000000000000000000000000000104000000000000000400000000000000000'); INSERT INTO test_data VALUES (130, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000010000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A0000000000000000', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080010000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F0000000000000000'); INSERT INTO test_data VALUES (131, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000010000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080010000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF'); INSERT INTO test_data VALUES (132, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 0,0.2 10.3 0,10.4 10.5 0,10.7 0.6 0,0 0.1 0),(2 2 0,2 3 0,3 3 0,3 2 0,2 2 0)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000020000000500000000000000003FB999999999999A00000000000000003FC999999999999A402499999999999A00000000000000004024CCCCCCCCCCCD4025000000000000000000000000000040256666666666663FE3333333333333000000000000000000000000000000003FB999999999999A000000000000000000000005400000000000000040000000000000000000000000000000400000000000000040080000000000000000000000000000400800000000000040080000000000000000000000000000400800000000000040000000000000000000000000000000400000000000000040000000000000000000000000000000', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080020000000500000000000000000000009A9999999999B93F00000000000000009A9999999999C93F9A999999999924400000000000000000CDCCCCCCCCCC2440000000000000254000000000000000006666666666662540333333333333E33F000000000000000000000000000000009A9999999999B93F000000000000000005000000000000000000004000000000000000400000000000000000000000000000004000000000000008400000000000000000000000000000084000000000000008400000000000000000000000000000084000000000000000400000000000000000000000000000004000000000000000400000000000000000'); INSERT INTO test_data VALUES (133, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF'); INSERT INTO test_data VALUES (134, 'MULTIPOLYGON(((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01)),((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01),(4 2 0,4 3 0,5 3 0,5 2 0,4 2 0)))', '0080000006000000020080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B0080000003000000030000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B00000005401000000000000040000000000000000000000000000000401000000000000040080000000000000000000000000000401400000000000040080000000000000000000000000000401400000000000040000000000000000000000000000000401000000000000040000000000000000000000000000000', '0106000080020000000103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF0103000080030000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF05000000000000000000104000000000000000400000000000000000000000000000104000000000000008400000000000000000000000000000144000000000000008400000000000000000000000000000144000000000000000400000000000000000000000000000104000000000000000400000000000000000'); INSERT INTO test_data VALUES (-9, 'POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1))', '0000000003000000010000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A', '0103000000010000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F'); INSERT INTO test_data VALUES (-10, 'POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01))', '0080000003000000010000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B', '0103000080010000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF'); INSERT INTO test_data VALUES (-11, 'POLYGON((0 0.1,0.2 10.3,10.4 10.5,10.7 0.6,0 0.1),(2 2,2 3,3 3,3 2,2 2))', '0000000003000000020000000500000000000000003FB999999999999A3FC999999999999A402499999999999A4024CCCCCCCCCCCD402500000000000040256666666666663FE333333333333300000000000000003FB999999999999A000000054000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400000000000000040000000000000004000000000000000', '0103000000020000000500000000000000000000009A9999999999B93F9A9999999999C93F9A99999999992440CDCCCCCCCCCC244000000000000025406666666666662540333333333333E33F00000000000000009A9999999999B93F050000000000000000000040000000000000004000000000000000400000000000000840000000000000084000000000000008400000000000000840000000000000004000000000000000400000000000000040'); INSERT INTO test_data VALUES (-12, 'POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01))', '0080000003000000020000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B', '0103000080020000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF'); INSERT INTO test_data VALUES (-13, 'POLYGON((0 0.1 -0.01,0.2 10.3 -0.02,10.4 10.5 -0.03,10.7 0.6 -0.04,0 0.1 -0.01),(2 2 -0.01,2 3 -0.01,3 3 -0.01,3 2 -0.01,2 2 -0.01),(4 2 0,4 3 0,5 3 0,5 2 0,4 2 0))', '0080000003000000030000000500000000000000003FB999999999999ABF847AE147AE147B3FC999999999999A402499999999999ABF947AE147AE147B4024CCCCCCCCCCCD4025000000000000BF9EB851EB851EB840256666666666663FE3333333333333BFA47AE147AE147B00000000000000003FB999999999999ABF847AE147AE147B0000000540000000000000004000000000000000BF847AE147AE147B40000000000000004008000000000000BF847AE147AE147B40080000000000004008000000000000BF847AE147AE147B40080000000000004000000000000000BF847AE147AE147B40000000000000004000000000000000BF847AE147AE147B00000005401000000000000040000000000000000000000000000000401000000000000040080000000000000000000000000000401400000000000040080000000000000000000000000000401400000000000040000000000000000000000000000000401000000000000040000000000000000000000000000000', '0103000080030000000500000000000000000000009A9999999999B93F7B14AE47E17A84BF9A9999999999C93F9A999999999924407B14AE47E17A94BFCDCCCCCCCCCC24400000000000002540B81E85EB51B89EBF6666666666662540333333333333E33F7B14AE47E17AA4BF00000000000000009A9999999999B93F7B14AE47E17A84BF05000000000000000000004000000000000000407B14AE47E17A84BF000000000000004000000000000008407B14AE47E17A84BF000000000000084000000000000008407B14AE47E17A84BF000000000000084000000000000000407B14AE47E17A84BF000000000000004000000000000000407B14AE47E17A84BF05000000000000000000104000000000000000400000000000000000000000000000104000000000000008400000000000000000000000000000144000000000000008400000000000000000000000000000144000000000000000400000000000000000000000000000104000000000000000400000000000000000'); -- SELECT id,wkt FROM test_data WHERE ST_asEWKT(geometry(wkt)) != wkt OR ST_asEWKT(geometry(wkb_xdr)) != wkt OR ST_asEWKT(geometry(wkb_ndr)) != wkt OR ST_asBinary(geometry(wkb_ndr)) != ST_asBinary(geometry(wkb_xdr)) OR ST_asBinary(geometry(wkt)) != ST_asBinary(geometry(wkb_xdr)); SELECT ST_extent(geometry(wkb_ndr)) from test_data; SELECT ST_3DExtent(geometry(wkb_ndr)) from test_data WHERE ST_NDims(wkb_ndr) > 2; SELECT ST_mem_size(ST_collect(ST_Force2d(geometry(wkb_ndr)))) from test_data; SELECT ST_mem_size(ST_collect(ST_Force3dz(geometry(wkb_ndr)))) from test_data; SELECT ST_mem_size(ST_collect(ST_Force4d(ST_force2d(geometry(wkb_ndr))))) from test_data; SELECT ST_mem_size(ST_collect(ST_Force3dm(geometry(wkb_ndr)))) from test_data; SELECT ST_mem_size(ST_collect(ST_Force2d(ST_force4d(ST_force3dm(ST_force3dz(ST_force2d(geometry(wkb_ndr)))))))) from test_data; DROP TABLE test_data; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/polygonize_expected�������������������������������������������������0000644�0000000�0000000�00000000322�11722777314�021245� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|GEOMETRYCOLLECTION(POLYGON((1656318.45 4833344.45,1656321.79 4833339.62,1656312.54 4833333.49,1656309.68 4833337.07,1656318.45 4833344.45))) 2|GEOMETRYCOLLECTION(POLYGON((0 0 0,0 10 0,10 10 0,10 0 5,0 0 0))) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_geohash_expected�������������������������������������������������0000644�0000000�0000000�00000001625�12140633611�021143� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������box2dfromgeohash_01|BOX(-115.172816 36.114646,-115.172816 36.114646) box2dfromgeohash_02|BOX(-180 -90,180 90) box2dfromgeohash_03|BOX(-115.172816 36.114646,-115.172816 36.114646) box2dfromgeohash_04|BOX(-115.172816 36.114646,-115.172816 36.114646) geomfromgeohash_01|POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646)) geomfromgeohash_02|POLYGON((-180 -90,-180 90,180 90,180 -90,-180 -90)) geomfromgeohash_03|POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646)) geomfromgeohash_04|POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646)) pointfromgeohash_01|POINT(-115.172816 36.114646) pointfromgeohash_02|POINT(0 0) pointfromgeohash_03|POINT(-115.172816 36.114646) pointfromgeohash_04|POINT(-115.172816 36.114646) �����������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/dump_expected�������������������������������������������������������0000644�0000000�0000000�00000001246�11722777314�020021� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t1|{}|POINT(0 9) t2|{}|LINESTRING(0 0,0 9,9 9,9 0,0 0) t3|{}|POLYGON((0 0,0 9,9 9,9 0,0 0)) t4|{}|TRIANGLE((0 0,0 9,9 0,0 0)) t5|{}|POLYGON((0 0,0 9,9 9,9 0,0 0),(1 1,1 3,3 2,1 1),(7 6,6 8,8 8,7 6)) t6|{1}|POLYGON((0 0,0 3,4 3,4 0,0 0)) t6|{2}|POLYGON((2 4,1 6,4 5,2 4),(7 6,6 8,8 8,7 6)) t7|{1}|POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)) t7|{2}|POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)) t8|{1}|TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0)) t8|{2}|TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0)) t9|{1}|POINT(99 98) t9|{2}|LINESTRING(1 1,3 3) t9|{3}|POLYGON((0 0,0 1,1 1,0 0)) t9|{4}|POLYGON((0 0,0 9,9 9,9 0,0 0),(5 5,5 6,6 6,5 5)) t9|{5,1}|POLYGON((0 0,0 9,9 9,9 0,0 0),(5 5,5 6,6 6,5 5)) t10|0 t11|0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/typmod_expected�����������������������������������������������������0000644�0000000�0000000�00003622022�11722777314�020374� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g|circularstring|g|2|0|CIRCULARSTRING g|circularstring0|g|2|0|CIRCULARSTRING g|circularstring4326|g|2|4326|CIRCULARSTRING g|circularstringm|g|3|0|CIRCULARSTRINGM g|circularstringm0|g|3|0|CIRCULARSTRINGM g|circularstringm4326|g|3|4326|CIRCULARSTRINGM g|circularstringz|g|3|0|CIRCULARSTRING g|circularstringz0|g|3|0|CIRCULARSTRING g|circularstringz4326|g|3|4326|CIRCULARSTRING g|circularstringzm|g|4|0|CIRCULARSTRING g|circularstringzm0|g|4|0|CIRCULARSTRING g|circularstringzm4326|g|4|4326|CIRCULARSTRING g|compoundcurve|g|2|0|COMPOUNDCURVE g|compoundcurve0|g|2|0|COMPOUNDCURVE g|compoundcurve4326|g|2|4326|COMPOUNDCURVE g|compoundcurvem|g|3|0|COMPOUNDCURVEM g|compoundcurvem0|g|3|0|COMPOUNDCURVEM g|compoundcurvem4326|g|3|4326|COMPOUNDCURVEM g|compoundcurvez|g|3|0|COMPOUNDCURVE g|compoundcurvez0|g|3|0|COMPOUNDCURVE g|compoundcurvez4326|g|3|4326|COMPOUNDCURVE g|compoundcurvezm|g|4|0|COMPOUNDCURVE g|compoundcurvezm0|g|4|0|COMPOUNDCURVE g|compoundcurvezm4326|g|4|4326|COMPOUNDCURVE g|curvepolygon|g|2|0|CURVEPOLYGON g|curvepolygon0|g|2|0|CURVEPOLYGON g|curvepolygon4326|g|2|4326|CURVEPOLYGON g|curvepolygonm|g|3|0|CURVEPOLYGONM g|curvepolygonm0|g|3|0|CURVEPOLYGONM g|curvepolygonm4326|g|3|4326|CURVEPOLYGONM g|curvepolygonz|g|3|0|CURVEPOLYGON g|curvepolygonz0|g|3|0|CURVEPOLYGON g|curvepolygonz4326|g|3|4326|CURVEPOLYGON g|curvepolygonzm|g|4|0|CURVEPOLYGON g|curvepolygonzm0|g|4|0|CURVEPOLYGON g|curvepolygonzm4326|g|4|4326|CURVEPOLYGON g|geometry|g|2|0|GEOMETRY g|geometry0|g|2|0|GEOMETRY g|geometry4326|g|2|4326|GEOMETRY g|geometrycollection|g|2|0|GEOMETRYCOLLECTION g|geometrycollection0|g|2|0|GEOMETRYCOLLECTION g|geometrycollection4326|g|2|4326|GEOMETRYCOLLECTION g|geometrycollectionm|g|3|0|GEOMETRYCOLLECTIONM g|geometrycollectionm0|g|3|0|GEOMETRYCOLLECTIONM g|geometrycollectionm4326|g|3|4326|GEOMETRYCOLLECTIONM g|geometrycollectionz|g|3|0|GEOMETRYCOLLECTION g|geometrycollectionz0|g|3|0|GEOMETRYCOLLECTION g|geometrycollectionz4326|g|3|4326|GEOMETRYCOLLECTION g|geometrycollectionzm|g|4|0|GEOMETRYCOLLECTION g|geometrycollectionzm0|g|4|0|GEOMETRYCOLLECTION g|geometrycollectionzm4326|g|4|4326|GEOMETRYCOLLECTION g|geometrym|g|3|0|GEOMETRYM g|geometrym0|g|3|0|GEOMETRYM g|geometrym4326|g|3|4326|GEOMETRYM g|geometryz|g|3|0|GEOMETRY g|geometryz0|g|3|0|GEOMETRY g|geometryz4326|g|3|4326|GEOMETRY g|geometryzm|g|4|0|GEOMETRY g|geometryzm0|g|4|0|GEOMETRY g|geometryzm4326|g|4|4326|GEOMETRY g|linestring|g|2|0|LINESTRING g|linestring0|g|2|0|LINESTRING g|linestring4326|g|2|4326|LINESTRING g|linestringm|g|3|0|LINESTRINGM g|linestringm0|g|3|0|LINESTRINGM g|linestringm4326|g|3|4326|LINESTRINGM g|linestringz|g|3|0|LINESTRING g|linestringz0|g|3|0|LINESTRING g|linestringz4326|g|3|4326|LINESTRING g|linestringzm|g|4|0|LINESTRING g|linestringzm0|g|4|0|LINESTRING g|linestringzm4326|g|4|4326|LINESTRING g|multicurve|g|2|0|MULTICURVE g|multicurve0|g|2|0|MULTICURVE g|multicurve4326|g|2|4326|MULTICURVE g|multicurvem|g|3|0|MULTICURVEM g|multicurvem0|g|3|0|MULTICURVEM g|multicurvem4326|g|3|4326|MULTICURVEM g|multicurvez|g|3|0|MULTICURVE g|multicurvez0|g|3|0|MULTICURVE g|multicurvez4326|g|3|4326|MULTICURVE g|multicurvezm|g|4|0|MULTICURVE g|multicurvezm0|g|4|0|MULTICURVE g|multicurvezm4326|g|4|4326|MULTICURVE g|multilinestring|g|2|0|MULTILINESTRING g|multilinestring0|g|2|0|MULTILINESTRING g|multilinestring4326|g|2|4326|MULTILINESTRING g|multilinestringm|g|3|0|MULTILINESTRINGM g|multilinestringm0|g|3|0|MULTILINESTRINGM g|multilinestringm4326|g|3|4326|MULTILINESTRINGM g|multilinestringz|g|3|0|MULTILINESTRING g|multilinestringz0|g|3|0|MULTILINESTRING g|multilinestringz4326|g|3|4326|MULTILINESTRING g|multilinestringzm|g|4|0|MULTILINESTRING g|multilinestringzm0|g|4|0|MULTILINESTRING g|multilinestringzm4326|g|4|4326|MULTILINESTRING g|multipoint|g|2|0|MULTIPOINT g|multipoint0|g|2|0|MULTIPOINT g|multipoint4326|g|2|4326|MULTIPOINT g|multipointm|g|3|0|MULTIPOINTM g|multipointm0|g|3|0|MULTIPOINTM g|multipointm4326|g|3|4326|MULTIPOINTM g|multipointz|g|3|0|MULTIPOINT g|multipointz0|g|3|0|MULTIPOINT g|multipointz4326|g|3|4326|MULTIPOINT g|multipointzm|g|4|0|MULTIPOINT g|multipointzm0|g|4|0|MULTIPOINT g|multipointzm4326|g|4|4326|MULTIPOINT g|multipolygon|g|2|0|MULTIPOLYGON g|multipolygon0|g|2|0|MULTIPOLYGON g|multipolygon4326|g|2|4326|MULTIPOLYGON g|multipolygonm|g|3|0|MULTIPOLYGONM g|multipolygonm0|g|3|0|MULTIPOLYGONM g|multipolygonm4326|g|3|4326|MULTIPOLYGONM g|multipolygonz|g|3|0|MULTIPOLYGON g|multipolygonz0|g|3|0|MULTIPOLYGON g|multipolygonz4326|g|3|4326|MULTIPOLYGON g|multipolygonzm|g|4|0|MULTIPOLYGON g|multipolygonzm0|g|4|0|MULTIPOLYGON g|multipolygonzm4326|g|4|4326|MULTIPOLYGON g|multisurface|g|2|0|MULTISURFACE g|multisurface0|g|2|0|MULTISURFACE g|multisurface4326|g|2|4326|MULTISURFACE g|multisurfacem|g|3|0|MULTISURFACEM g|multisurfacem0|g|3|0|MULTISURFACEM g|multisurfacem4326|g|3|4326|MULTISURFACEM g|multisurfacez|g|3|0|MULTISURFACE g|multisurfacez0|g|3|0|MULTISURFACE g|multisurfacez4326|g|3|4326|MULTISURFACE g|multisurfacezm|g|4|0|MULTISURFACE g|multisurfacezm0|g|4|0|MULTISURFACE g|multisurfacezm4326|g|4|4326|MULTISURFACE g|point|g|2|0|POINT g|point0|g|2|0|POINT g|point4326|g|2|4326|POINT g|pointm|g|3|0|POINTM g|pointm0|g|3|0|POINTM g|pointm4326|g|3|4326|POINTM g|pointz|g|3|0|POINT g|pointz0|g|3|0|POINT g|pointz4326|g|3|4326|POINT g|pointzm|g|4|0|POINT g|pointzm0|g|4|0|POINT g|pointzm4326|g|4|4326|POINT g|polygon|g|2|0|POLYGON g|polygon0|g|2|0|POLYGON g|polygon4326|g|2|4326|POLYGON g|polygonm|g|3|0|POLYGONM g|polygonm0|g|3|0|POLYGONM g|polygonm4326|g|3|4326|POLYGONM g|polygonz|g|3|0|POLYGON g|polygonz0|g|3|0|POLYGON g|polygonz4326|g|3|4326|POLYGON g|polygonzm|g|4|0|POLYGON g|polygonzm0|g|4|0|POLYGON g|polygonzm4326|g|4|4326|POLYGON g|polyhedralsurface|g|2|0|POLYHEDRALSURFACE g|polyhedralsurface0|g|2|0|POLYHEDRALSURFACE g|polyhedralsurface4326|g|2|4326|POLYHEDRALSURFACE g|polyhedralsurfacem|g|3|0|POLYHEDRALSURFACEM g|polyhedralsurfacem0|g|3|0|POLYHEDRALSURFACEM g|polyhedralsurfacem4326|g|3|4326|POLYHEDRALSURFACEM g|polyhedralsurfacez|g|3|0|POLYHEDRALSURFACE g|polyhedralsurfacez0|g|3|0|POLYHEDRALSURFACE g|polyhedralsurfacez4326|g|3|4326|POLYHEDRALSURFACE g|polyhedralsurfacezm|g|4|0|POLYHEDRALSURFACE g|polyhedralsurfacezm0|g|4|0|POLYHEDRALSURFACE g|polyhedralsurfacezm4326|g|4|4326|POLYHEDRALSURFACE g|tin|g|2|0|TIN g|tin0|g|2|0|TIN g|tin4326|g|2|4326|TIN g|tinm|g|3|0|TINM g|tinm0|g|3|0|TINM g|tinm4326|g|3|4326|TINM g|tinz|g|3|0|TIN g|tinz0|g|3|0|TIN g|tinz4326|g|3|4326|TIN g|tinzm|g|4|0|TIN g|tinzm0|g|4|0|TIN g|tinzm4326|g|4|4326|TIN g|triangle|g|2|0|TRIANGLE g|triangle0|g|2|0|TRIANGLE g|triangle4326|g|2|4326|TRIANGLE g|trianglem|g|3|0|TRIANGLEM g|trianglem0|g|3|0|TRIANGLEM g|trianglem4326|g|3|4326|TRIANGLEM g|trianglez|g|3|0|TRIANGLE g|trianglez0|g|3|0|TRIANGLE g|trianglez4326|g|3|4326|TRIANGLE g|trianglezm|g|4|0|TRIANGLE g|trianglezm0|g|4|0|TRIANGLE g|trianglezm4326|g|4|4326|TRIANGLE gg|geometry|gg|2|4326|Geometry gg|geometry0|gg|2|4326|Geometry gg|geometry4326|gg|2|4326|Geometry gg|geometrycollection|gg|2|4326|GeometryCollection gg|geometrycollection0|gg|2|4326|GeometryCollection gg|geometrycollection4326|gg|2|4326|GeometryCollection gg|geometrycollectionm|gg|3|4326|GeometryCollectionM gg|geometrycollectionm0|gg|3|4326|GeometryCollectionM gg|geometrycollectionm4326|gg|3|4326|GeometryCollectionM gg|geometrycollectionz|gg|3|4326|GeometryCollectionZ gg|geometrycollectionz0|gg|3|4326|GeometryCollectionZ gg|geometrycollectionz4326|gg|3|4326|GeometryCollectionZ gg|geometrycollectionzm|gg|4|4326|GeometryCollectionZM gg|geometrycollectionzm0|gg|4|4326|GeometryCollectionZM gg|geometrycollectionzm4326|gg|4|4326|GeometryCollectionZM gg|geometrym|gg|3|4326|GeometryM gg|geometrym0|gg|3|4326|GeometryM gg|geometrym4326|gg|3|4326|GeometryM gg|geometryz|gg|3|4326|GeometryZ gg|geometryz0|gg|3|4326|GeometryZ gg|geometryz4326|gg|3|4326|GeometryZ gg|geometryzm|gg|4|4326|GeometryZM gg|geometryzm0|gg|4|4326|GeometryZM gg|geometryzm4326|gg|4|4326|GeometryZM gg|linestring|gg|2|4326|LineString gg|linestring0|gg|2|4326|LineString gg|linestring4326|gg|2|4326|LineString gg|linestringm|gg|3|4326|LineStringM gg|linestringm0|gg|3|4326|LineStringM gg|linestringm4326|gg|3|4326|LineStringM gg|linestringz|gg|3|4326|LineStringZ gg|linestringz0|gg|3|4326|LineStringZ gg|linestringz4326|gg|3|4326|LineStringZ gg|linestringzm|gg|4|4326|LineStringZM gg|linestringzm0|gg|4|4326|LineStringZM gg|linestringzm4326|gg|4|4326|LineStringZM gg|multilinestring|gg|2|4326|MultiLineString gg|multilinestring0|gg|2|4326|MultiLineString gg|multilinestring4326|gg|2|4326|MultiLineString gg|multilinestringm|gg|3|4326|MultiLineStringM gg|multilinestringm0|gg|3|4326|MultiLineStringM gg|multilinestringm4326|gg|3|4326|MultiLineStringM gg|multilinestringz|gg|3|4326|MultiLineStringZ gg|multilinestringz0|gg|3|4326|MultiLineStringZ gg|multilinestringz4326|gg|3|4326|MultiLineStringZ gg|multilinestringzm|gg|4|4326|MultiLineStringZM gg|multilinestringzm0|gg|4|4326|MultiLineStringZM gg|multilinestringzm4326|gg|4|4326|MultiLineStringZM gg|multipoint|gg|2|4326|MultiPoint gg|multipoint0|gg|2|4326|MultiPoint gg|multipoint4326|gg|2|4326|MultiPoint gg|multipointm|gg|3|4326|MultiPointM gg|multipointm0|gg|3|4326|MultiPointM gg|multipointm4326|gg|3|4326|MultiPointM gg|multipointz|gg|3|4326|MultiPointZ gg|multipointz0|gg|3|4326|MultiPointZ gg|multipointz4326|gg|3|4326|MultiPointZ gg|multipointzm|gg|4|4326|MultiPointZM gg|multipointzm0|gg|4|4326|MultiPointZM gg|multipointzm4326|gg|4|4326|MultiPointZM gg|multipolygon|gg|2|4326|MultiPolygon gg|multipolygon0|gg|2|4326|MultiPolygon gg|multipolygon4326|gg|2|4326|MultiPolygon gg|multipolygonm|gg|3|4326|MultiPolygonM gg|multipolygonm0|gg|3|4326|MultiPolygonM gg|multipolygonm4326|gg|3|4326|MultiPolygonM gg|multipolygonz|gg|3|4326|MultiPolygonZ gg|multipolygonz0|gg|3|4326|MultiPolygonZ gg|multipolygonz4326|gg|3|4326|MultiPolygonZ gg|multipolygonzm|gg|4|4326|MultiPolygonZM gg|multipolygonzm0|gg|4|4326|MultiPolygonZM gg|multipolygonzm4326|gg|4|4326|MultiPolygonZM gg|point|gg|2|4326|Point gg|point0|gg|2|4326|Point gg|point4326|gg|2|4326|Point gg|pointm|gg|3|4326|PointM gg|pointm0|gg|3|4326|PointM gg|pointm4326|gg|3|4326|PointM gg|pointz|gg|3|4326|PointZ gg|pointz0|gg|3|4326|PointZ gg|pointz4326|gg|3|4326|PointZ gg|pointzm|gg|4|4326|PointZM gg|pointzm0|gg|4|4326|PointZM gg|pointzm4326|gg|4|4326|PointZM gg|polygon|gg|2|4326|Polygon gg|polygon0|gg|2|4326|Polygon gg|polygon4326|gg|2|4326|Polygon gg|polygonm|gg|3|4326|PolygonM gg|polygonm0|gg|3|4326|PolygonM gg|polygonm4326|gg|3|4326|PolygonM gg|polygonz|gg|3|4326|PolygonZ gg|polygonz0|gg|3|4326|PolygonZ gg|polygonz4326|gg|3|4326|PolygonZ gg|polygonzm|gg|4|4326|PolygonZM gg|polygonzm0|gg|4|4326|PolygonZM gg|polygonzm4326|gg|4|4326|PolygonZM catalog-schema|postgis_reg|tm circularstring|0|Point|0|KO-BKO circularstring|0|LineString|0|KO-BKO circularstring|0|Polygon|0|KO-BKO circularstring|0|MultiPoint|0|KO-BKO circularstring|0|MultiLineString|0|KO-BKO circularstring|0|MultiPolygon|0|KO-BKO circularstring|0|GeometryCollection|0|KO-BKO circularstring|0|CircularString|0|OK-BOK circularstring|0|CompoundCurve|0|KO-BKO circularstring|0|CurvePolygon|0|KO-BKO circularstring|0|MultiCurve|0|KO-BKO circularstring|0|MultiSurface|0|KO-BKO circularstring|0|PolyhedralSurface|0|KO-BKO circularstring|0|Triangle|0|KO-BKO circularstring|0|Tin|0|KO-BKO circularstring|0|Point|2|KO-BKO circularstring|0|LineString|2|KO-BKO circularstring|0|Polygon|2|KO-BKO circularstring|0|MultiPoint|2|KO-BKO circularstring|0|MultiLineString|2|KO-BKO circularstring|0|MultiPolygon|2|KO-BKO circularstring|0|GeometryCollection|2|KO-BKO circularstring|0|CircularString|2|KO-BKO circularstring|0|CompoundCurve|2|KO-BKO circularstring|0|CurvePolygon|2|KO-BKO circularstring|0|MultiCurve|2|KO-BKO circularstring|0|MultiSurface|2|KO-BKO circularstring|0|PolyhedralSurface|2|KO-BKO circularstring|0|Triangle|2|KO-BKO circularstring|0|Point|1|KO-BKO circularstring|0|LineString|1|KO-BKO circularstring|0|Polygon|1|KO-BKO circularstring|0|MultiPoint|1|KO-BKO circularstring|0|MultiLineString|1|KO-BKO circularstring|0|MultiPolygon|1|KO-BKO circularstring|0|GeometryCollection|1|KO-BKO circularstring|0|CircularString|1|KO-BKO circularstring|0|CompoundCurve|1|KO-BKO circularstring|0|CurvePolygon|1|KO-BKO circularstring|0|MultiCurve|1|KO-BKO circularstring|0|MultiSurface|1|KO-BKO circularstring|0|PolyhedralSurface|1|KO-BKO circularstring|0|Triangle|1|KO-BKO circularstring|0|Point|3|KO-BKO circularstring|0|LineString|3|KO-BKO circularstring|0|Polygon|3|KO-BKO circularstring|0|MultiPoint|3|KO-BKO circularstring|0|MultiLineString|3|KO-BKO circularstring|0|MultiPolygon|3|KO-BKO circularstring|0|GeometryCollection|3|KO-BKO circularstring|0|CircularString|3|KO-BKO circularstring|0|CompoundCurve|3|KO-BKO circularstring|0|CurvePolygon|3|KO-BKO circularstring|0|MultiCurve|3|KO-BKO circularstring|0|MultiSurface|3|KO-BKO circularstring|0|PolyhedralSurface|3|KO-BKO circularstring|0|Triangle|3|KO-BKO circularstring|4326|Point|0|KO-BKO circularstring|4326|LineString|0|KO-BKO circularstring|4326|Polygon|0|KO-BKO circularstring|4326|MultiPoint|0|KO-BKO circularstring|4326|MultiLineString|0|KO-BKO circularstring|4326|MultiPolygon|0|KO-BKO circularstring|4326|GeometryCollection|0|KO-BKO circularstring|4326|CircularString|0|OK-BOK circularstring|4326|CompoundCurve|0|KO-BKO circularstring|4326|CurvePolygon|0|KO-BKO circularstring|4326|MultiCurve|0|KO-BKO circularstring|4326|MultiSurface|0|KO-BKO circularstring|4326|PolyhedralSurface|0|KO-BKO circularstring|4326|Triangle|0|KO-BKO circularstring|4326|Tin|0|KO-BKO circularstring|4326|Point|2|KO-BKO circularstring|4326|LineString|2|KO-BKO circularstring|4326|Polygon|2|KO-BKO circularstring|4326|MultiPoint|2|KO-BKO circularstring|4326|MultiLineString|2|KO-BKO circularstring|4326|MultiPolygon|2|KO-BKO circularstring|4326|GeometryCollection|2|KO-BKO circularstring|4326|CircularString|2|KO-BKO circularstring|4326|CompoundCurve|2|KO-BKO circularstring|4326|CurvePolygon|2|KO-BKO circularstring|4326|MultiCurve|2|KO-BKO circularstring|4326|MultiSurface|2|KO-BKO circularstring|4326|PolyhedralSurface|2|KO-BKO circularstring|4326|Triangle|2|KO-BKO circularstring|4326|Point|1|KO-BKO circularstring|4326|LineString|1|KO-BKO circularstring|4326|Polygon|1|KO-BKO circularstring|4326|MultiPoint|1|KO-BKO circularstring|4326|MultiLineString|1|KO-BKO circularstring|4326|MultiPolygon|1|KO-BKO circularstring|4326|GeometryCollection|1|KO-BKO circularstring|4326|CircularString|1|KO-BKO circularstring|4326|CompoundCurve|1|KO-BKO circularstring|4326|CurvePolygon|1|KO-BKO circularstring|4326|MultiCurve|1|KO-BKO circularstring|4326|MultiSurface|1|KO-BKO circularstring|4326|PolyhedralSurface|1|KO-BKO circularstring|4326|Triangle|1|KO-BKO circularstring|4326|Point|3|KO-BKO circularstring|4326|LineString|3|KO-BKO circularstring|4326|Polygon|3|KO-BKO circularstring|4326|MultiPoint|3|KO-BKO circularstring|4326|MultiLineString|3|KO-BKO circularstring|4326|MultiPolygon|3|KO-BKO circularstring|4326|GeometryCollection|3|KO-BKO circularstring|4326|CircularString|3|KO-BKO circularstring|4326|CompoundCurve|3|KO-BKO circularstring|4326|CurvePolygon|3|KO-BKO circularstring|4326|MultiCurve|3|KO-BKO circularstring|4326|MultiSurface|3|KO-BKO circularstring|4326|PolyhedralSurface|3|KO-BKO circularstring|4326|Triangle|3|KO-BKO circularstring||COUNT|4| circularstring0|0|Point|0|KO-BKO circularstring0|0|LineString|0|KO-BKO circularstring0|0|Polygon|0|KO-BKO circularstring0|0|MultiPoint|0|KO-BKO circularstring0|0|MultiLineString|0|KO-BKO circularstring0|0|MultiPolygon|0|KO-BKO circularstring0|0|GeometryCollection|0|KO-BKO circularstring0|0|CircularString|0|OK-BOK circularstring0|0|CompoundCurve|0|KO-BKO circularstring0|0|CurvePolygon|0|KO-BKO circularstring0|0|MultiCurve|0|KO-BKO circularstring0|0|MultiSurface|0|KO-BKO circularstring0|0|PolyhedralSurface|0|KO-BKO circularstring0|0|Triangle|0|KO-BKO circularstring0|0|Tin|0|KO-BKO circularstring0|0|Point|2|KO-BKO circularstring0|0|LineString|2|KO-BKO circularstring0|0|Polygon|2|KO-BKO circularstring0|0|MultiPoint|2|KO-BKO circularstring0|0|MultiLineString|2|KO-BKO circularstring0|0|MultiPolygon|2|KO-BKO circularstring0|0|GeometryCollection|2|KO-BKO circularstring0|0|CircularString|2|KO-BKO circularstring0|0|CompoundCurve|2|KO-BKO circularstring0|0|CurvePolygon|2|KO-BKO circularstring0|0|MultiCurve|2|KO-BKO circularstring0|0|MultiSurface|2|KO-BKO circularstring0|0|PolyhedralSurface|2|KO-BKO circularstring0|0|Triangle|2|KO-BKO circularstring0|0|Point|1|KO-BKO circularstring0|0|LineString|1|KO-BKO circularstring0|0|Polygon|1|KO-BKO circularstring0|0|MultiPoint|1|KO-BKO circularstring0|0|MultiLineString|1|KO-BKO circularstring0|0|MultiPolygon|1|KO-BKO circularstring0|0|GeometryCollection|1|KO-BKO circularstring0|0|CircularString|1|KO-BKO circularstring0|0|CompoundCurve|1|KO-BKO circularstring0|0|CurvePolygon|1|KO-BKO circularstring0|0|MultiCurve|1|KO-BKO circularstring0|0|MultiSurface|1|KO-BKO circularstring0|0|PolyhedralSurface|1|KO-BKO circularstring0|0|Triangle|1|KO-BKO circularstring0|0|Point|3|KO-BKO circularstring0|0|LineString|3|KO-BKO circularstring0|0|Polygon|3|KO-BKO circularstring0|0|MultiPoint|3|KO-BKO circularstring0|0|MultiLineString|3|KO-BKO circularstring0|0|MultiPolygon|3|KO-BKO circularstring0|0|GeometryCollection|3|KO-BKO circularstring0|0|CircularString|3|KO-BKO circularstring0|0|CompoundCurve|3|KO-BKO circularstring0|0|CurvePolygon|3|KO-BKO circularstring0|0|MultiCurve|3|KO-BKO circularstring0|0|MultiSurface|3|KO-BKO circularstring0|0|PolyhedralSurface|3|KO-BKO circularstring0|0|Triangle|3|KO-BKO circularstring0|4326|Point|0|KO-BKO circularstring0|4326|LineString|0|KO-BKO circularstring0|4326|Polygon|0|KO-BKO circularstring0|4326|MultiPoint|0|KO-BKO circularstring0|4326|MultiLineString|0|KO-BKO circularstring0|4326|MultiPolygon|0|KO-BKO circularstring0|4326|GeometryCollection|0|KO-BKO circularstring0|4326|CircularString|0|OK-BOK circularstring0|4326|CompoundCurve|0|KO-BKO circularstring0|4326|CurvePolygon|0|KO-BKO circularstring0|4326|MultiCurve|0|KO-BKO circularstring0|4326|MultiSurface|0|KO-BKO circularstring0|4326|PolyhedralSurface|0|KO-BKO circularstring0|4326|Triangle|0|KO-BKO circularstring0|4326|Tin|0|KO-BKO circularstring0|4326|Point|2|KO-BKO circularstring0|4326|LineString|2|KO-BKO circularstring0|4326|Polygon|2|KO-BKO circularstring0|4326|MultiPoint|2|KO-BKO circularstring0|4326|MultiLineString|2|KO-BKO circularstring0|4326|MultiPolygon|2|KO-BKO circularstring0|4326|GeometryCollection|2|KO-BKO circularstring0|4326|CircularString|2|KO-BKO circularstring0|4326|CompoundCurve|2|KO-BKO circularstring0|4326|CurvePolygon|2|KO-BKO circularstring0|4326|MultiCurve|2|KO-BKO circularstring0|4326|MultiSurface|2|KO-BKO circularstring0|4326|PolyhedralSurface|2|KO-BKO circularstring0|4326|Triangle|2|KO-BKO circularstring0|4326|Point|1|KO-BKO circularstring0|4326|LineString|1|KO-BKO circularstring0|4326|Polygon|1|KO-BKO circularstring0|4326|MultiPoint|1|KO-BKO circularstring0|4326|MultiLineString|1|KO-BKO circularstring0|4326|MultiPolygon|1|KO-BKO circularstring0|4326|GeometryCollection|1|KO-BKO circularstring0|4326|CircularString|1|KO-BKO circularstring0|4326|CompoundCurve|1|KO-BKO circularstring0|4326|CurvePolygon|1|KO-BKO circularstring0|4326|MultiCurve|1|KO-BKO circularstring0|4326|MultiSurface|1|KO-BKO circularstring0|4326|PolyhedralSurface|1|KO-BKO circularstring0|4326|Triangle|1|KO-BKO circularstring0|4326|Point|3|KO-BKO circularstring0|4326|LineString|3|KO-BKO circularstring0|4326|Polygon|3|KO-BKO circularstring0|4326|MultiPoint|3|KO-BKO circularstring0|4326|MultiLineString|3|KO-BKO circularstring0|4326|MultiPolygon|3|KO-BKO circularstring0|4326|GeometryCollection|3|KO-BKO circularstring0|4326|CircularString|3|KO-BKO circularstring0|4326|CompoundCurve|3|KO-BKO circularstring0|4326|CurvePolygon|3|KO-BKO circularstring0|4326|MultiCurve|3|KO-BKO circularstring0|4326|MultiSurface|3|KO-BKO circularstring0|4326|PolyhedralSurface|3|KO-BKO circularstring0|4326|Triangle|3|KO-BKO circularstring0||COUNT|4| circularstring4326|0|Point|0|KO-BKO circularstring4326|0|LineString|0|KO-BKO circularstring4326|0|Polygon|0|KO-BKO circularstring4326|0|MultiPoint|0|KO-BKO circularstring4326|0|MultiLineString|0|KO-BKO circularstring4326|0|MultiPolygon|0|KO-BKO circularstring4326|0|GeometryCollection|0|KO-BKO circularstring4326|0|CircularString|0|KO-BKO circularstring4326|0|CompoundCurve|0|KO-BKO circularstring4326|0|CurvePolygon|0|KO-BKO circularstring4326|0|MultiCurve|0|KO-BKO circularstring4326|0|MultiSurface|0|KO-BKO circularstring4326|0|PolyhedralSurface|0|KO-BKO circularstring4326|0|Triangle|0|KO-BKO circularstring4326|0|Tin|0|KO-BKO circularstring4326|0|Point|2|KO-BKO circularstring4326|0|LineString|2|KO-BKO circularstring4326|0|Polygon|2|KO-BKO circularstring4326|0|MultiPoint|2|KO-BKO circularstring4326|0|MultiLineString|2|KO-BKO circularstring4326|0|MultiPolygon|2|KO-BKO circularstring4326|0|GeometryCollection|2|KO-BKO circularstring4326|0|CircularString|2|KO-BKO circularstring4326|0|CompoundCurve|2|KO-BKO circularstring4326|0|CurvePolygon|2|KO-BKO circularstring4326|0|MultiCurve|2|KO-BKO circularstring4326|0|MultiSurface|2|KO-BKO circularstring4326|0|PolyhedralSurface|2|KO-BKO circularstring4326|0|Triangle|2|KO-BKO circularstring4326|0|Point|1|KO-BKO circularstring4326|0|LineString|1|KO-BKO circularstring4326|0|Polygon|1|KO-BKO circularstring4326|0|MultiPoint|1|KO-BKO circularstring4326|0|MultiLineString|1|KO-BKO circularstring4326|0|MultiPolygon|1|KO-BKO circularstring4326|0|GeometryCollection|1|KO-BKO circularstring4326|0|CircularString|1|KO-BKO circularstring4326|0|CompoundCurve|1|KO-BKO circularstring4326|0|CurvePolygon|1|KO-BKO circularstring4326|0|MultiCurve|1|KO-BKO circularstring4326|0|MultiSurface|1|KO-BKO circularstring4326|0|PolyhedralSurface|1|KO-BKO circularstring4326|0|Triangle|1|KO-BKO circularstring4326|0|Point|3|KO-BKO circularstring4326|0|LineString|3|KO-BKO circularstring4326|0|Polygon|3|KO-BKO circularstring4326|0|MultiPoint|3|KO-BKO circularstring4326|0|MultiLineString|3|KO-BKO circularstring4326|0|MultiPolygon|3|KO-BKO circularstring4326|0|GeometryCollection|3|KO-BKO circularstring4326|0|CircularString|3|KO-BKO circularstring4326|0|CompoundCurve|3|KO-BKO circularstring4326|0|CurvePolygon|3|KO-BKO circularstring4326|0|MultiCurve|3|KO-BKO circularstring4326|0|MultiSurface|3|KO-BKO circularstring4326|0|PolyhedralSurface|3|KO-BKO circularstring4326|0|Triangle|3|KO-BKO circularstring4326|4326|Point|0|KO-BKO circularstring4326|4326|LineString|0|KO-BKO circularstring4326|4326|Polygon|0|KO-BKO circularstring4326|4326|MultiPoint|0|KO-BKO circularstring4326|4326|MultiLineString|0|KO-BKO circularstring4326|4326|MultiPolygon|0|KO-BKO circularstring4326|4326|GeometryCollection|0|KO-BKO circularstring4326|4326|CircularString|0|OK-BOK circularstring4326|4326|CompoundCurve|0|KO-BKO circularstring4326|4326|CurvePolygon|0|KO-BKO circularstring4326|4326|MultiCurve|0|KO-BKO circularstring4326|4326|MultiSurface|0|KO-BKO circularstring4326|4326|PolyhedralSurface|0|KO-BKO circularstring4326|4326|Triangle|0|KO-BKO circularstring4326|4326|Tin|0|KO-BKO circularstring4326|4326|Point|2|KO-BKO circularstring4326|4326|LineString|2|KO-BKO circularstring4326|4326|Polygon|2|KO-BKO circularstring4326|4326|MultiPoint|2|KO-BKO circularstring4326|4326|MultiLineString|2|KO-BKO circularstring4326|4326|MultiPolygon|2|KO-BKO circularstring4326|4326|GeometryCollection|2|KO-BKO circularstring4326|4326|CircularString|2|KO-BKO circularstring4326|4326|CompoundCurve|2|KO-BKO circularstring4326|4326|CurvePolygon|2|KO-BKO circularstring4326|4326|MultiCurve|2|KO-BKO circularstring4326|4326|MultiSurface|2|KO-BKO circularstring4326|4326|PolyhedralSurface|2|KO-BKO circularstring4326|4326|Triangle|2|KO-BKO circularstring4326|4326|Point|1|KO-BKO circularstring4326|4326|LineString|1|KO-BKO circularstring4326|4326|Polygon|1|KO-BKO circularstring4326|4326|MultiPoint|1|KO-BKO circularstring4326|4326|MultiLineString|1|KO-BKO circularstring4326|4326|MultiPolygon|1|KO-BKO circularstring4326|4326|GeometryCollection|1|KO-BKO circularstring4326|4326|CircularString|1|KO-BKO circularstring4326|4326|CompoundCurve|1|KO-BKO circularstring4326|4326|CurvePolygon|1|KO-BKO circularstring4326|4326|MultiCurve|1|KO-BKO circularstring4326|4326|MultiSurface|1|KO-BKO circularstring4326|4326|PolyhedralSurface|1|KO-BKO circularstring4326|4326|Triangle|1|KO-BKO circularstring4326|4326|Point|3|KO-BKO circularstring4326|4326|LineString|3|KO-BKO circularstring4326|4326|Polygon|3|KO-BKO circularstring4326|4326|MultiPoint|3|KO-BKO circularstring4326|4326|MultiLineString|3|KO-BKO circularstring4326|4326|MultiPolygon|3|KO-BKO circularstring4326|4326|GeometryCollection|3|KO-BKO circularstring4326|4326|CircularString|3|KO-BKO circularstring4326|4326|CompoundCurve|3|KO-BKO circularstring4326|4326|CurvePolygon|3|KO-BKO circularstring4326|4326|MultiCurve|3|KO-BKO circularstring4326|4326|MultiSurface|3|KO-BKO circularstring4326|4326|PolyhedralSurface|3|KO-BKO circularstring4326|4326|Triangle|3|KO-BKO circularstring4326||COUNT|2| circularstringm|0|Point|0|KO-BKO circularstringm|0|LineString|0|KO-BKO circularstringm|0|Polygon|0|KO-BKO circularstringm|0|MultiPoint|0|KO-BKO circularstringm|0|MultiLineString|0|KO-BKO circularstringm|0|MultiPolygon|0|KO-BKO circularstringm|0|GeometryCollection|0|KO-BKO circularstringm|0|CircularString|0|KO-BKO circularstringm|0|CompoundCurve|0|KO-BKO circularstringm|0|CurvePolygon|0|KO-BKO circularstringm|0|MultiCurve|0|KO-BKO circularstringm|0|MultiSurface|0|KO-BKO circularstringm|0|PolyhedralSurface|0|KO-BKO circularstringm|0|Triangle|0|KO-BKO circularstringm|0|Tin|0|KO-BKO circularstringm|0|Point|2|KO-BKO circularstringm|0|LineString|2|KO-BKO circularstringm|0|Polygon|2|KO-BKO circularstringm|0|MultiPoint|2|KO-BKO circularstringm|0|MultiLineString|2|KO-BKO circularstringm|0|MultiPolygon|2|KO-BKO circularstringm|0|GeometryCollection|2|KO-BKO circularstringm|0|CircularString|2|KO-BKO circularstringm|0|CompoundCurve|2|KO-BKO circularstringm|0|CurvePolygon|2|KO-BKO circularstringm|0|MultiCurve|2|KO-BKO circularstringm|0|MultiSurface|2|KO-BKO circularstringm|0|PolyhedralSurface|2|KO-BKO circularstringm|0|Triangle|2|KO-BKO circularstringm|0|Point|1|KO-BKO circularstringm|0|LineString|1|KO-BKO circularstringm|0|Polygon|1|KO-BKO circularstringm|0|MultiPoint|1|KO-BKO circularstringm|0|MultiLineString|1|KO-BKO circularstringm|0|MultiPolygon|1|KO-BKO circularstringm|0|GeometryCollection|1|KO-BKO circularstringm|0|CircularString|1|OK-BOK circularstringm|0|CompoundCurve|1|KO-BKO circularstringm|0|CurvePolygon|1|KO-BKO circularstringm|0|MultiCurve|1|KO-BKO circularstringm|0|MultiSurface|1|KO-BKO circularstringm|0|PolyhedralSurface|1|KO-BKO circularstringm|0|Triangle|1|KO-BKO circularstringm|0|Point|3|KO-BKO circularstringm|0|LineString|3|KO-BKO circularstringm|0|Polygon|3|KO-BKO circularstringm|0|MultiPoint|3|KO-BKO circularstringm|0|MultiLineString|3|KO-BKO circularstringm|0|MultiPolygon|3|KO-BKO circularstringm|0|GeometryCollection|3|KO-BKO circularstringm|0|CircularString|3|KO-BKO circularstringm|0|CompoundCurve|3|KO-BKO circularstringm|0|CurvePolygon|3|KO-BKO circularstringm|0|MultiCurve|3|KO-BKO circularstringm|0|MultiSurface|3|KO-BKO circularstringm|0|PolyhedralSurface|3|KO-BKO circularstringm|0|Triangle|3|KO-BKO circularstringm|4326|Point|0|KO-BKO circularstringm|4326|LineString|0|KO-BKO circularstringm|4326|Polygon|0|KO-BKO circularstringm|4326|MultiPoint|0|KO-BKO circularstringm|4326|MultiLineString|0|KO-BKO circularstringm|4326|MultiPolygon|0|KO-BKO circularstringm|4326|GeometryCollection|0|KO-BKO circularstringm|4326|CircularString|0|KO-BKO circularstringm|4326|CompoundCurve|0|KO-BKO circularstringm|4326|CurvePolygon|0|KO-BKO circularstringm|4326|MultiCurve|0|KO-BKO circularstringm|4326|MultiSurface|0|KO-BKO circularstringm|4326|PolyhedralSurface|0|KO-BKO circularstringm|4326|Triangle|0|KO-BKO circularstringm|4326|Tin|0|KO-BKO circularstringm|4326|Point|2|KO-BKO circularstringm|4326|LineString|2|KO-BKO circularstringm|4326|Polygon|2|KO-BKO circularstringm|4326|MultiPoint|2|KO-BKO circularstringm|4326|MultiLineString|2|KO-BKO circularstringm|4326|MultiPolygon|2|KO-BKO circularstringm|4326|GeometryCollection|2|KO-BKO circularstringm|4326|CircularString|2|KO-BKO circularstringm|4326|CompoundCurve|2|KO-BKO circularstringm|4326|CurvePolygon|2|KO-BKO circularstringm|4326|MultiCurve|2|KO-BKO circularstringm|4326|MultiSurface|2|KO-BKO circularstringm|4326|PolyhedralSurface|2|KO-BKO circularstringm|4326|Triangle|2|KO-BKO circularstringm|4326|Point|1|KO-BKO circularstringm|4326|LineString|1|KO-BKO circularstringm|4326|Polygon|1|KO-BKO circularstringm|4326|MultiPoint|1|KO-BKO circularstringm|4326|MultiLineString|1|KO-BKO circularstringm|4326|MultiPolygon|1|KO-BKO circularstringm|4326|GeometryCollection|1|KO-BKO circularstringm|4326|CircularString|1|OK-BOK circularstringm|4326|CompoundCurve|1|KO-BKO circularstringm|4326|CurvePolygon|1|KO-BKO circularstringm|4326|MultiCurve|1|KO-BKO circularstringm|4326|MultiSurface|1|KO-BKO circularstringm|4326|PolyhedralSurface|1|KO-BKO circularstringm|4326|Triangle|1|KO-BKO circularstringm|4326|Point|3|KO-BKO circularstringm|4326|LineString|3|KO-BKO circularstringm|4326|Polygon|3|KO-BKO circularstringm|4326|MultiPoint|3|KO-BKO circularstringm|4326|MultiLineString|3|KO-BKO circularstringm|4326|MultiPolygon|3|KO-BKO circularstringm|4326|GeometryCollection|3|KO-BKO circularstringm|4326|CircularString|3|KO-BKO circularstringm|4326|CompoundCurve|3|KO-BKO circularstringm|4326|CurvePolygon|3|KO-BKO circularstringm|4326|MultiCurve|3|KO-BKO circularstringm|4326|MultiSurface|3|KO-BKO circularstringm|4326|PolyhedralSurface|3|KO-BKO circularstringm|4326|Triangle|3|KO-BKO circularstringm||COUNT|4| circularstringm0|0|Point|0|KO-BKO circularstringm0|0|LineString|0|KO-BKO circularstringm0|0|Polygon|0|KO-BKO circularstringm0|0|MultiPoint|0|KO-BKO circularstringm0|0|MultiLineString|0|KO-BKO circularstringm0|0|MultiPolygon|0|KO-BKO circularstringm0|0|GeometryCollection|0|KO-BKO circularstringm0|0|CircularString|0|KO-BKO circularstringm0|0|CompoundCurve|0|KO-BKO circularstringm0|0|CurvePolygon|0|KO-BKO circularstringm0|0|MultiCurve|0|KO-BKO circularstringm0|0|MultiSurface|0|KO-BKO circularstringm0|0|PolyhedralSurface|0|KO-BKO circularstringm0|0|Triangle|0|KO-BKO circularstringm0|0|Tin|0|KO-BKO circularstringm0|0|Point|2|KO-BKO circularstringm0|0|LineString|2|KO-BKO circularstringm0|0|Polygon|2|KO-BKO circularstringm0|0|MultiPoint|2|KO-BKO circularstringm0|0|MultiLineString|2|KO-BKO circularstringm0|0|MultiPolygon|2|KO-BKO circularstringm0|0|GeometryCollection|2|KO-BKO circularstringm0|0|CircularString|2|KO-BKO circularstringm0|0|CompoundCurve|2|KO-BKO circularstringm0|0|CurvePolygon|2|KO-BKO circularstringm0|0|MultiCurve|2|KO-BKO circularstringm0|0|MultiSurface|2|KO-BKO circularstringm0|0|PolyhedralSurface|2|KO-BKO circularstringm0|0|Triangle|2|KO-BKO circularstringm0|0|Point|1|KO-BKO circularstringm0|0|LineString|1|KO-BKO circularstringm0|0|Polygon|1|KO-BKO circularstringm0|0|MultiPoint|1|KO-BKO circularstringm0|0|MultiLineString|1|KO-BKO circularstringm0|0|MultiPolygon|1|KO-BKO circularstringm0|0|GeometryCollection|1|KO-BKO circularstringm0|0|CircularString|1|OK-BOK circularstringm0|0|CompoundCurve|1|KO-BKO circularstringm0|0|CurvePolygon|1|KO-BKO circularstringm0|0|MultiCurve|1|KO-BKO circularstringm0|0|MultiSurface|1|KO-BKO circularstringm0|0|PolyhedralSurface|1|KO-BKO circularstringm0|0|Triangle|1|KO-BKO circularstringm0|0|Point|3|KO-BKO circularstringm0|0|LineString|3|KO-BKO circularstringm0|0|Polygon|3|KO-BKO circularstringm0|0|MultiPoint|3|KO-BKO circularstringm0|0|MultiLineString|3|KO-BKO circularstringm0|0|MultiPolygon|3|KO-BKO circularstringm0|0|GeometryCollection|3|KO-BKO circularstringm0|0|CircularString|3|KO-BKO circularstringm0|0|CompoundCurve|3|KO-BKO circularstringm0|0|CurvePolygon|3|KO-BKO circularstringm0|0|MultiCurve|3|KO-BKO circularstringm0|0|MultiSurface|3|KO-BKO circularstringm0|0|PolyhedralSurface|3|KO-BKO circularstringm0|0|Triangle|3|KO-BKO circularstringm0|4326|Point|0|KO-BKO circularstringm0|4326|LineString|0|KO-BKO circularstringm0|4326|Polygon|0|KO-BKO circularstringm0|4326|MultiPoint|0|KO-BKO circularstringm0|4326|MultiLineString|0|KO-BKO circularstringm0|4326|MultiPolygon|0|KO-BKO circularstringm0|4326|GeometryCollection|0|KO-BKO circularstringm0|4326|CircularString|0|KO-BKO circularstringm0|4326|CompoundCurve|0|KO-BKO circularstringm0|4326|CurvePolygon|0|KO-BKO circularstringm0|4326|MultiCurve|0|KO-BKO circularstringm0|4326|MultiSurface|0|KO-BKO circularstringm0|4326|PolyhedralSurface|0|KO-BKO circularstringm0|4326|Triangle|0|KO-BKO circularstringm0|4326|Tin|0|KO-BKO circularstringm0|4326|Point|2|KO-BKO circularstringm0|4326|LineString|2|KO-BKO circularstringm0|4326|Polygon|2|KO-BKO circularstringm0|4326|MultiPoint|2|KO-BKO circularstringm0|4326|MultiLineString|2|KO-BKO circularstringm0|4326|MultiPolygon|2|KO-BKO circularstringm0|4326|GeometryCollection|2|KO-BKO circularstringm0|4326|CircularString|2|KO-BKO circularstringm0|4326|CompoundCurve|2|KO-BKO circularstringm0|4326|CurvePolygon|2|KO-BKO circularstringm0|4326|MultiCurve|2|KO-BKO circularstringm0|4326|MultiSurface|2|KO-BKO circularstringm0|4326|PolyhedralSurface|2|KO-BKO circularstringm0|4326|Triangle|2|KO-BKO circularstringm0|4326|Point|1|KO-BKO circularstringm0|4326|LineString|1|KO-BKO circularstringm0|4326|Polygon|1|KO-BKO circularstringm0|4326|MultiPoint|1|KO-BKO circularstringm0|4326|MultiLineString|1|KO-BKO circularstringm0|4326|MultiPolygon|1|KO-BKO circularstringm0|4326|GeometryCollection|1|KO-BKO circularstringm0|4326|CircularString|1|OK-BOK circularstringm0|4326|CompoundCurve|1|KO-BKO circularstringm0|4326|CurvePolygon|1|KO-BKO circularstringm0|4326|MultiCurve|1|KO-BKO circularstringm0|4326|MultiSurface|1|KO-BKO circularstringm0|4326|PolyhedralSurface|1|KO-BKO circularstringm0|4326|Triangle|1|KO-BKO circularstringm0|4326|Point|3|KO-BKO circularstringm0|4326|LineString|3|KO-BKO circularstringm0|4326|Polygon|3|KO-BKO circularstringm0|4326|MultiPoint|3|KO-BKO circularstringm0|4326|MultiLineString|3|KO-BKO circularstringm0|4326|MultiPolygon|3|KO-BKO circularstringm0|4326|GeometryCollection|3|KO-BKO circularstringm0|4326|CircularString|3|KO-BKO circularstringm0|4326|CompoundCurve|3|KO-BKO circularstringm0|4326|CurvePolygon|3|KO-BKO circularstringm0|4326|MultiCurve|3|KO-BKO circularstringm0|4326|MultiSurface|3|KO-BKO circularstringm0|4326|PolyhedralSurface|3|KO-BKO circularstringm0|4326|Triangle|3|KO-BKO circularstringm0||COUNT|4| circularstringm4326|0|Point|0|KO-BKO circularstringm4326|0|LineString|0|KO-BKO circularstringm4326|0|Polygon|0|KO-BKO circularstringm4326|0|MultiPoint|0|KO-BKO circularstringm4326|0|MultiLineString|0|KO-BKO circularstringm4326|0|MultiPolygon|0|KO-BKO circularstringm4326|0|GeometryCollection|0|KO-BKO circularstringm4326|0|CircularString|0|KO-BKO circularstringm4326|0|CompoundCurve|0|KO-BKO circularstringm4326|0|CurvePolygon|0|KO-BKO circularstringm4326|0|MultiCurve|0|KO-BKO circularstringm4326|0|MultiSurface|0|KO-BKO circularstringm4326|0|PolyhedralSurface|0|KO-BKO circularstringm4326|0|Triangle|0|KO-BKO circularstringm4326|0|Tin|0|KO-BKO circularstringm4326|0|Point|2|KO-BKO circularstringm4326|0|LineString|2|KO-BKO circularstringm4326|0|Polygon|2|KO-BKO circularstringm4326|0|MultiPoint|2|KO-BKO circularstringm4326|0|MultiLineString|2|KO-BKO circularstringm4326|0|MultiPolygon|2|KO-BKO circularstringm4326|0|GeometryCollection|2|KO-BKO circularstringm4326|0|CircularString|2|KO-BKO circularstringm4326|0|CompoundCurve|2|KO-BKO circularstringm4326|0|CurvePolygon|2|KO-BKO circularstringm4326|0|MultiCurve|2|KO-BKO circularstringm4326|0|MultiSurface|2|KO-BKO circularstringm4326|0|PolyhedralSurface|2|KO-BKO circularstringm4326|0|Triangle|2|KO-BKO circularstringm4326|0|Point|1|KO-BKO circularstringm4326|0|LineString|1|KO-BKO circularstringm4326|0|Polygon|1|KO-BKO circularstringm4326|0|MultiPoint|1|KO-BKO circularstringm4326|0|MultiLineString|1|KO-BKO circularstringm4326|0|MultiPolygon|1|KO-BKO circularstringm4326|0|GeometryCollection|1|KO-BKO circularstringm4326|0|CircularString|1|KO-BKO circularstringm4326|0|CompoundCurve|1|KO-BKO circularstringm4326|0|CurvePolygon|1|KO-BKO circularstringm4326|0|MultiCurve|1|KO-BKO circularstringm4326|0|MultiSurface|1|KO-BKO circularstringm4326|0|PolyhedralSurface|1|KO-BKO circularstringm4326|0|Triangle|1|KO-BKO circularstringm4326|0|Point|3|KO-BKO circularstringm4326|0|LineString|3|KO-BKO circularstringm4326|0|Polygon|3|KO-BKO circularstringm4326|0|MultiPoint|3|KO-BKO circularstringm4326|0|MultiLineString|3|KO-BKO circularstringm4326|0|MultiPolygon|3|KO-BKO circularstringm4326|0|GeometryCollection|3|KO-BKO circularstringm4326|0|CircularString|3|KO-BKO circularstringm4326|0|CompoundCurve|3|KO-BKO circularstringm4326|0|CurvePolygon|3|KO-BKO circularstringm4326|0|MultiCurve|3|KO-BKO circularstringm4326|0|MultiSurface|3|KO-BKO circularstringm4326|0|PolyhedralSurface|3|KO-BKO circularstringm4326|0|Triangle|3|KO-BKO circularstringm4326|4326|Point|0|KO-BKO circularstringm4326|4326|LineString|0|KO-BKO circularstringm4326|4326|Polygon|0|KO-BKO circularstringm4326|4326|MultiPoint|0|KO-BKO circularstringm4326|4326|MultiLineString|0|KO-BKO circularstringm4326|4326|MultiPolygon|0|KO-BKO circularstringm4326|4326|GeometryCollection|0|KO-BKO circularstringm4326|4326|CircularString|0|KO-BKO circularstringm4326|4326|CompoundCurve|0|KO-BKO circularstringm4326|4326|CurvePolygon|0|KO-BKO circularstringm4326|4326|MultiCurve|0|KO-BKO circularstringm4326|4326|MultiSurface|0|KO-BKO circularstringm4326|4326|PolyhedralSurface|0|KO-BKO circularstringm4326|4326|Triangle|0|KO-BKO circularstringm4326|4326|Tin|0|KO-BKO circularstringm4326|4326|Point|2|KO-BKO circularstringm4326|4326|LineString|2|KO-BKO circularstringm4326|4326|Polygon|2|KO-BKO circularstringm4326|4326|MultiPoint|2|KO-BKO circularstringm4326|4326|MultiLineString|2|KO-BKO circularstringm4326|4326|MultiPolygon|2|KO-BKO circularstringm4326|4326|GeometryCollection|2|KO-BKO circularstringm4326|4326|CircularString|2|KO-BKO circularstringm4326|4326|CompoundCurve|2|KO-BKO circularstringm4326|4326|CurvePolygon|2|KO-BKO circularstringm4326|4326|MultiCurve|2|KO-BKO circularstringm4326|4326|MultiSurface|2|KO-BKO circularstringm4326|4326|PolyhedralSurface|2|KO-BKO circularstringm4326|4326|Triangle|2|KO-BKO circularstringm4326|4326|Point|1|KO-BKO circularstringm4326|4326|LineString|1|KO-BKO circularstringm4326|4326|Polygon|1|KO-BKO circularstringm4326|4326|MultiPoint|1|KO-BKO circularstringm4326|4326|MultiLineString|1|KO-BKO circularstringm4326|4326|MultiPolygon|1|KO-BKO circularstringm4326|4326|GeometryCollection|1|KO-BKO circularstringm4326|4326|CircularString|1|OK-BOK circularstringm4326|4326|CompoundCurve|1|KO-BKO circularstringm4326|4326|CurvePolygon|1|KO-BKO circularstringm4326|4326|MultiCurve|1|KO-BKO circularstringm4326|4326|MultiSurface|1|KO-BKO circularstringm4326|4326|PolyhedralSurface|1|KO-BKO circularstringm4326|4326|Triangle|1|KO-BKO circularstringm4326|4326|Point|3|KO-BKO circularstringm4326|4326|LineString|3|KO-BKO circularstringm4326|4326|Polygon|3|KO-BKO circularstringm4326|4326|MultiPoint|3|KO-BKO circularstringm4326|4326|MultiLineString|3|KO-BKO circularstringm4326|4326|MultiPolygon|3|KO-BKO circularstringm4326|4326|GeometryCollection|3|KO-BKO circularstringm4326|4326|CircularString|3|KO-BKO circularstringm4326|4326|CompoundCurve|3|KO-BKO circularstringm4326|4326|CurvePolygon|3|KO-BKO circularstringm4326|4326|MultiCurve|3|KO-BKO circularstringm4326|4326|MultiSurface|3|KO-BKO circularstringm4326|4326|PolyhedralSurface|3|KO-BKO circularstringm4326|4326|Triangle|3|KO-BKO circularstringm4326||COUNT|2| circularstringz|0|Point|0|KO-BKO circularstringz|0|LineString|0|KO-BKO circularstringz|0|Polygon|0|KO-BKO circularstringz|0|MultiPoint|0|KO-BKO circularstringz|0|MultiLineString|0|KO-BKO circularstringz|0|MultiPolygon|0|KO-BKO circularstringz|0|GeometryCollection|0|KO-BKO circularstringz|0|CircularString|0|KO-BKO circularstringz|0|CompoundCurve|0|KO-BKO circularstringz|0|CurvePolygon|0|KO-BKO circularstringz|0|MultiCurve|0|KO-BKO circularstringz|0|MultiSurface|0|KO-BKO circularstringz|0|PolyhedralSurface|0|KO-BKO circularstringz|0|Triangle|0|KO-BKO circularstringz|0|Tin|0|KO-BKO circularstringz|0|Point|2|KO-BKO circularstringz|0|LineString|2|KO-BKO circularstringz|0|Polygon|2|KO-BKO circularstringz|0|MultiPoint|2|KO-BKO circularstringz|0|MultiLineString|2|KO-BKO circularstringz|0|MultiPolygon|2|KO-BKO circularstringz|0|GeometryCollection|2|KO-BKO circularstringz|0|CircularString|2|OK-BOK circularstringz|0|CompoundCurve|2|KO-BKO circularstringz|0|CurvePolygon|2|KO-BKO circularstringz|0|MultiCurve|2|KO-BKO circularstringz|0|MultiSurface|2|KO-BKO circularstringz|0|PolyhedralSurface|2|KO-BKO circularstringz|0|Triangle|2|KO-BKO circularstringz|0|Point|1|KO-BKO circularstringz|0|LineString|1|KO-BKO circularstringz|0|Polygon|1|KO-BKO circularstringz|0|MultiPoint|1|KO-BKO circularstringz|0|MultiLineString|1|KO-BKO circularstringz|0|MultiPolygon|1|KO-BKO circularstringz|0|GeometryCollection|1|KO-BKO circularstringz|0|CircularString|1|KO-BKO circularstringz|0|CompoundCurve|1|KO-BKO circularstringz|0|CurvePolygon|1|KO-BKO circularstringz|0|MultiCurve|1|KO-BKO circularstringz|0|MultiSurface|1|KO-BKO circularstringz|0|PolyhedralSurface|1|KO-BKO circularstringz|0|Triangle|1|KO-BKO circularstringz|0|Point|3|KO-BKO circularstringz|0|LineString|3|KO-BKO circularstringz|0|Polygon|3|KO-BKO circularstringz|0|MultiPoint|3|KO-BKO circularstringz|0|MultiLineString|3|KO-BKO circularstringz|0|MultiPolygon|3|KO-BKO circularstringz|0|GeometryCollection|3|KO-BKO circularstringz|0|CircularString|3|KO-BKO circularstringz|0|CompoundCurve|3|KO-BKO circularstringz|0|CurvePolygon|3|KO-BKO circularstringz|0|MultiCurve|3|KO-BKO circularstringz|0|MultiSurface|3|KO-BKO circularstringz|0|PolyhedralSurface|3|KO-BKO circularstringz|0|Triangle|3|KO-BKO circularstringz|4326|Point|0|KO-BKO circularstringz|4326|LineString|0|KO-BKO circularstringz|4326|Polygon|0|KO-BKO circularstringz|4326|MultiPoint|0|KO-BKO circularstringz|4326|MultiLineString|0|KO-BKO circularstringz|4326|MultiPolygon|0|KO-BKO circularstringz|4326|GeometryCollection|0|KO-BKO circularstringz|4326|CircularString|0|KO-BKO circularstringz|4326|CompoundCurve|0|KO-BKO circularstringz|4326|CurvePolygon|0|KO-BKO circularstringz|4326|MultiCurve|0|KO-BKO circularstringz|4326|MultiSurface|0|KO-BKO circularstringz|4326|PolyhedralSurface|0|KO-BKO circularstringz|4326|Triangle|0|KO-BKO circularstringz|4326|Tin|0|KO-BKO circularstringz|4326|Point|2|KO-BKO circularstringz|4326|LineString|2|KO-BKO circularstringz|4326|Polygon|2|KO-BKO circularstringz|4326|MultiPoint|2|KO-BKO circularstringz|4326|MultiLineString|2|KO-BKO circularstringz|4326|MultiPolygon|2|KO-BKO circularstringz|4326|GeometryCollection|2|KO-BKO circularstringz|4326|CircularString|2|OK-BOK circularstringz|4326|CompoundCurve|2|KO-BKO circularstringz|4326|CurvePolygon|2|KO-BKO circularstringz|4326|MultiCurve|2|KO-BKO circularstringz|4326|MultiSurface|2|KO-BKO circularstringz|4326|PolyhedralSurface|2|KO-BKO circularstringz|4326|Triangle|2|KO-BKO circularstringz|4326|Point|1|KO-BKO circularstringz|4326|LineString|1|KO-BKO circularstringz|4326|Polygon|1|KO-BKO circularstringz|4326|MultiPoint|1|KO-BKO circularstringz|4326|MultiLineString|1|KO-BKO circularstringz|4326|MultiPolygon|1|KO-BKO circularstringz|4326|GeometryCollection|1|KO-BKO circularstringz|4326|CircularString|1|KO-BKO circularstringz|4326|CompoundCurve|1|KO-BKO circularstringz|4326|CurvePolygon|1|KO-BKO circularstringz|4326|MultiCurve|1|KO-BKO circularstringz|4326|MultiSurface|1|KO-BKO circularstringz|4326|PolyhedralSurface|1|KO-BKO circularstringz|4326|Triangle|1|KO-BKO circularstringz|4326|Point|3|KO-BKO circularstringz|4326|LineString|3|KO-BKO circularstringz|4326|Polygon|3|KO-BKO circularstringz|4326|MultiPoint|3|KO-BKO circularstringz|4326|MultiLineString|3|KO-BKO circularstringz|4326|MultiPolygon|3|KO-BKO circularstringz|4326|GeometryCollection|3|KO-BKO circularstringz|4326|CircularString|3|KO-BKO circularstringz|4326|CompoundCurve|3|KO-BKO circularstringz|4326|CurvePolygon|3|KO-BKO circularstringz|4326|MultiCurve|3|KO-BKO circularstringz|4326|MultiSurface|3|KO-BKO circularstringz|4326|PolyhedralSurface|3|KO-BKO circularstringz|4326|Triangle|3|KO-BKO circularstringz||COUNT|4| circularstringz0|0|Point|0|KO-BKO circularstringz0|0|LineString|0|KO-BKO circularstringz0|0|Polygon|0|KO-BKO circularstringz0|0|MultiPoint|0|KO-BKO circularstringz0|0|MultiLineString|0|KO-BKO circularstringz0|0|MultiPolygon|0|KO-BKO circularstringz0|0|GeometryCollection|0|KO-BKO circularstringz0|0|CircularString|0|KO-BKO circularstringz0|0|CompoundCurve|0|KO-BKO circularstringz0|0|CurvePolygon|0|KO-BKO circularstringz0|0|MultiCurve|0|KO-BKO circularstringz0|0|MultiSurface|0|KO-BKO circularstringz0|0|PolyhedralSurface|0|KO-BKO circularstringz0|0|Triangle|0|KO-BKO circularstringz0|0|Tin|0|KO-BKO circularstringz0|0|Point|2|KO-BKO circularstringz0|0|LineString|2|KO-BKO circularstringz0|0|Polygon|2|KO-BKO circularstringz0|0|MultiPoint|2|KO-BKO circularstringz0|0|MultiLineString|2|KO-BKO circularstringz0|0|MultiPolygon|2|KO-BKO circularstringz0|0|GeometryCollection|2|KO-BKO circularstringz0|0|CircularString|2|OK-BOK circularstringz0|0|CompoundCurve|2|KO-BKO circularstringz0|0|CurvePolygon|2|KO-BKO circularstringz0|0|MultiCurve|2|KO-BKO circularstringz0|0|MultiSurface|2|KO-BKO circularstringz0|0|PolyhedralSurface|2|KO-BKO circularstringz0|0|Triangle|2|KO-BKO circularstringz0|0|Point|1|KO-BKO circularstringz0|0|LineString|1|KO-BKO circularstringz0|0|Polygon|1|KO-BKO circularstringz0|0|MultiPoint|1|KO-BKO circularstringz0|0|MultiLineString|1|KO-BKO circularstringz0|0|MultiPolygon|1|KO-BKO circularstringz0|0|GeometryCollection|1|KO-BKO circularstringz0|0|CircularString|1|KO-BKO circularstringz0|0|CompoundCurve|1|KO-BKO circularstringz0|0|CurvePolygon|1|KO-BKO circularstringz0|0|MultiCurve|1|KO-BKO circularstringz0|0|MultiSurface|1|KO-BKO circularstringz0|0|PolyhedralSurface|1|KO-BKO circularstringz0|0|Triangle|1|KO-BKO circularstringz0|0|Point|3|KO-BKO circularstringz0|0|LineString|3|KO-BKO circularstringz0|0|Polygon|3|KO-BKO circularstringz0|0|MultiPoint|3|KO-BKO circularstringz0|0|MultiLineString|3|KO-BKO circularstringz0|0|MultiPolygon|3|KO-BKO circularstringz0|0|GeometryCollection|3|KO-BKO circularstringz0|0|CircularString|3|KO-BKO circularstringz0|0|CompoundCurve|3|KO-BKO circularstringz0|0|CurvePolygon|3|KO-BKO circularstringz0|0|MultiCurve|3|KO-BKO circularstringz0|0|MultiSurface|3|KO-BKO circularstringz0|0|PolyhedralSurface|3|KO-BKO circularstringz0|0|Triangle|3|KO-BKO circularstringz0|4326|Point|0|KO-BKO circularstringz0|4326|LineString|0|KO-BKO circularstringz0|4326|Polygon|0|KO-BKO circularstringz0|4326|MultiPoint|0|KO-BKO circularstringz0|4326|MultiLineString|0|KO-BKO circularstringz0|4326|MultiPolygon|0|KO-BKO circularstringz0|4326|GeometryCollection|0|KO-BKO circularstringz0|4326|CircularString|0|KO-BKO circularstringz0|4326|CompoundCurve|0|KO-BKO circularstringz0|4326|CurvePolygon|0|KO-BKO circularstringz0|4326|MultiCurve|0|KO-BKO circularstringz0|4326|MultiSurface|0|KO-BKO circularstringz0|4326|PolyhedralSurface|0|KO-BKO circularstringz0|4326|Triangle|0|KO-BKO circularstringz0|4326|Tin|0|KO-BKO circularstringz0|4326|Point|2|KO-BKO circularstringz0|4326|LineString|2|KO-BKO circularstringz0|4326|Polygon|2|KO-BKO circularstringz0|4326|MultiPoint|2|KO-BKO circularstringz0|4326|MultiLineString|2|KO-BKO circularstringz0|4326|MultiPolygon|2|KO-BKO circularstringz0|4326|GeometryCollection|2|KO-BKO circularstringz0|4326|CircularString|2|OK-BOK circularstringz0|4326|CompoundCurve|2|KO-BKO circularstringz0|4326|CurvePolygon|2|KO-BKO circularstringz0|4326|MultiCurve|2|KO-BKO circularstringz0|4326|MultiSurface|2|KO-BKO circularstringz0|4326|PolyhedralSurface|2|KO-BKO circularstringz0|4326|Triangle|2|KO-BKO circularstringz0|4326|Point|1|KO-BKO circularstringz0|4326|LineString|1|KO-BKO circularstringz0|4326|Polygon|1|KO-BKO circularstringz0|4326|MultiPoint|1|KO-BKO circularstringz0|4326|MultiLineString|1|KO-BKO circularstringz0|4326|MultiPolygon|1|KO-BKO circularstringz0|4326|GeometryCollection|1|KO-BKO circularstringz0|4326|CircularString|1|KO-BKO circularstringz0|4326|CompoundCurve|1|KO-BKO circularstringz0|4326|CurvePolygon|1|KO-BKO circularstringz0|4326|MultiCurve|1|KO-BKO circularstringz0|4326|MultiSurface|1|KO-BKO circularstringz0|4326|PolyhedralSurface|1|KO-BKO circularstringz0|4326|Triangle|1|KO-BKO circularstringz0|4326|Point|3|KO-BKO circularstringz0|4326|LineString|3|KO-BKO circularstringz0|4326|Polygon|3|KO-BKO circularstringz0|4326|MultiPoint|3|KO-BKO circularstringz0|4326|MultiLineString|3|KO-BKO circularstringz0|4326|MultiPolygon|3|KO-BKO circularstringz0|4326|GeometryCollection|3|KO-BKO circularstringz0|4326|CircularString|3|KO-BKO circularstringz0|4326|CompoundCurve|3|KO-BKO circularstringz0|4326|CurvePolygon|3|KO-BKO circularstringz0|4326|MultiCurve|3|KO-BKO circularstringz0|4326|MultiSurface|3|KO-BKO circularstringz0|4326|PolyhedralSurface|3|KO-BKO circularstringz0|4326|Triangle|3|KO-BKO circularstringz0||COUNT|4| circularstringz4326|0|Point|0|KO-BKO circularstringz4326|0|LineString|0|KO-BKO circularstringz4326|0|Polygon|0|KO-BKO circularstringz4326|0|MultiPoint|0|KO-BKO circularstringz4326|0|MultiLineString|0|KO-BKO circularstringz4326|0|MultiPolygon|0|KO-BKO circularstringz4326|0|GeometryCollection|0|KO-BKO circularstringz4326|0|CircularString|0|KO-BKO circularstringz4326|0|CompoundCurve|0|KO-BKO circularstringz4326|0|CurvePolygon|0|KO-BKO circularstringz4326|0|MultiCurve|0|KO-BKO circularstringz4326|0|MultiSurface|0|KO-BKO circularstringz4326|0|PolyhedralSurface|0|KO-BKO circularstringz4326|0|Triangle|0|KO-BKO circularstringz4326|0|Tin|0|KO-BKO circularstringz4326|0|Point|2|KO-BKO circularstringz4326|0|LineString|2|KO-BKO circularstringz4326|0|Polygon|2|KO-BKO circularstringz4326|0|MultiPoint|2|KO-BKO circularstringz4326|0|MultiLineString|2|KO-BKO circularstringz4326|0|MultiPolygon|2|KO-BKO circularstringz4326|0|GeometryCollection|2|KO-BKO circularstringz4326|0|CircularString|2|KO-BKO circularstringz4326|0|CompoundCurve|2|KO-BKO circularstringz4326|0|CurvePolygon|2|KO-BKO circularstringz4326|0|MultiCurve|2|KO-BKO circularstringz4326|0|MultiSurface|2|KO-BKO circularstringz4326|0|PolyhedralSurface|2|KO-BKO circularstringz4326|0|Triangle|2|KO-BKO circularstringz4326|0|Point|1|KO-BKO circularstringz4326|0|LineString|1|KO-BKO circularstringz4326|0|Polygon|1|KO-BKO circularstringz4326|0|MultiPoint|1|KO-BKO circularstringz4326|0|MultiLineString|1|KO-BKO circularstringz4326|0|MultiPolygon|1|KO-BKO circularstringz4326|0|GeometryCollection|1|KO-BKO circularstringz4326|0|CircularString|1|KO-BKO circularstringz4326|0|CompoundCurve|1|KO-BKO circularstringz4326|0|CurvePolygon|1|KO-BKO circularstringz4326|0|MultiCurve|1|KO-BKO circularstringz4326|0|MultiSurface|1|KO-BKO circularstringz4326|0|PolyhedralSurface|1|KO-BKO circularstringz4326|0|Triangle|1|KO-BKO circularstringz4326|0|Point|3|KO-BKO circularstringz4326|0|LineString|3|KO-BKO circularstringz4326|0|Polygon|3|KO-BKO circularstringz4326|0|MultiPoint|3|KO-BKO circularstringz4326|0|MultiLineString|3|KO-BKO circularstringz4326|0|MultiPolygon|3|KO-BKO circularstringz4326|0|GeometryCollection|3|KO-BKO circularstringz4326|0|CircularString|3|KO-BKO circularstringz4326|0|CompoundCurve|3|KO-BKO circularstringz4326|0|CurvePolygon|3|KO-BKO circularstringz4326|0|MultiCurve|3|KO-BKO circularstringz4326|0|MultiSurface|3|KO-BKO circularstringz4326|0|PolyhedralSurface|3|KO-BKO circularstringz4326|0|Triangle|3|KO-BKO circularstringz4326|4326|Point|0|KO-BKO circularstringz4326|4326|LineString|0|KO-BKO circularstringz4326|4326|Polygon|0|KO-BKO circularstringz4326|4326|MultiPoint|0|KO-BKO circularstringz4326|4326|MultiLineString|0|KO-BKO circularstringz4326|4326|MultiPolygon|0|KO-BKO circularstringz4326|4326|GeometryCollection|0|KO-BKO circularstringz4326|4326|CircularString|0|KO-BKO circularstringz4326|4326|CompoundCurve|0|KO-BKO circularstringz4326|4326|CurvePolygon|0|KO-BKO circularstringz4326|4326|MultiCurve|0|KO-BKO circularstringz4326|4326|MultiSurface|0|KO-BKO circularstringz4326|4326|PolyhedralSurface|0|KO-BKO circularstringz4326|4326|Triangle|0|KO-BKO circularstringz4326|4326|Tin|0|KO-BKO circularstringz4326|4326|Point|2|KO-BKO circularstringz4326|4326|LineString|2|KO-BKO circularstringz4326|4326|Polygon|2|KO-BKO circularstringz4326|4326|MultiPoint|2|KO-BKO circularstringz4326|4326|MultiLineString|2|KO-BKO circularstringz4326|4326|MultiPolygon|2|KO-BKO circularstringz4326|4326|GeometryCollection|2|KO-BKO circularstringz4326|4326|CircularString|2|OK-BOK circularstringz4326|4326|CompoundCurve|2|KO-BKO circularstringz4326|4326|CurvePolygon|2|KO-BKO circularstringz4326|4326|MultiCurve|2|KO-BKO circularstringz4326|4326|MultiSurface|2|KO-BKO circularstringz4326|4326|PolyhedralSurface|2|KO-BKO circularstringz4326|4326|Triangle|2|KO-BKO circularstringz4326|4326|Point|1|KO-BKO circularstringz4326|4326|LineString|1|KO-BKO circularstringz4326|4326|Polygon|1|KO-BKO circularstringz4326|4326|MultiPoint|1|KO-BKO circularstringz4326|4326|MultiLineString|1|KO-BKO circularstringz4326|4326|MultiPolygon|1|KO-BKO circularstringz4326|4326|GeometryCollection|1|KO-BKO circularstringz4326|4326|CircularString|1|KO-BKO circularstringz4326|4326|CompoundCurve|1|KO-BKO circularstringz4326|4326|CurvePolygon|1|KO-BKO circularstringz4326|4326|MultiCurve|1|KO-BKO circularstringz4326|4326|MultiSurface|1|KO-BKO circularstringz4326|4326|PolyhedralSurface|1|KO-BKO circularstringz4326|4326|Triangle|1|KO-BKO circularstringz4326|4326|Point|3|KO-BKO circularstringz4326|4326|LineString|3|KO-BKO circularstringz4326|4326|Polygon|3|KO-BKO circularstringz4326|4326|MultiPoint|3|KO-BKO circularstringz4326|4326|MultiLineString|3|KO-BKO circularstringz4326|4326|MultiPolygon|3|KO-BKO circularstringz4326|4326|GeometryCollection|3|KO-BKO circularstringz4326|4326|CircularString|3|KO-BKO circularstringz4326|4326|CompoundCurve|3|KO-BKO circularstringz4326|4326|CurvePolygon|3|KO-BKO circularstringz4326|4326|MultiCurve|3|KO-BKO circularstringz4326|4326|MultiSurface|3|KO-BKO circularstringz4326|4326|PolyhedralSurface|3|KO-BKO circularstringz4326|4326|Triangle|3|KO-BKO circularstringz4326||COUNT|2| circularstringzm|0|Point|0|KO-BKO circularstringzm|0|LineString|0|KO-BKO circularstringzm|0|Polygon|0|KO-BKO circularstringzm|0|MultiPoint|0|KO-BKO circularstringzm|0|MultiLineString|0|KO-BKO circularstringzm|0|MultiPolygon|0|KO-BKO circularstringzm|0|GeometryCollection|0|KO-BKO circularstringzm|0|CircularString|0|KO-BKO circularstringzm|0|CompoundCurve|0|KO-BKO circularstringzm|0|CurvePolygon|0|KO-BKO circularstringzm|0|MultiCurve|0|KO-BKO circularstringzm|0|MultiSurface|0|KO-BKO circularstringzm|0|PolyhedralSurface|0|KO-BKO circularstringzm|0|Triangle|0|KO-BKO circularstringzm|0|Tin|0|KO-BKO circularstringzm|0|Point|2|KO-BKO circularstringzm|0|LineString|2|KO-BKO circularstringzm|0|Polygon|2|KO-BKO circularstringzm|0|MultiPoint|2|KO-BKO circularstringzm|0|MultiLineString|2|KO-BKO circularstringzm|0|MultiPolygon|2|KO-BKO circularstringzm|0|GeometryCollection|2|KO-BKO circularstringzm|0|CircularString|2|KO-BKO circularstringzm|0|CompoundCurve|2|KO-BKO circularstringzm|0|CurvePolygon|2|KO-BKO circularstringzm|0|MultiCurve|2|KO-BKO circularstringzm|0|MultiSurface|2|KO-BKO circularstringzm|0|PolyhedralSurface|2|KO-BKO circularstringzm|0|Triangle|2|KO-BKO circularstringzm|0|Point|1|KO-BKO circularstringzm|0|LineString|1|KO-BKO circularstringzm|0|Polygon|1|KO-BKO circularstringzm|0|MultiPoint|1|KO-BKO circularstringzm|0|MultiLineString|1|KO-BKO circularstringzm|0|MultiPolygon|1|KO-BKO circularstringzm|0|GeometryCollection|1|KO-BKO circularstringzm|0|CircularString|1|KO-BKO circularstringzm|0|CompoundCurve|1|KO-BKO circularstringzm|0|CurvePolygon|1|KO-BKO circularstringzm|0|MultiCurve|1|KO-BKO circularstringzm|0|MultiSurface|1|KO-BKO circularstringzm|0|PolyhedralSurface|1|KO-BKO circularstringzm|0|Triangle|1|KO-BKO circularstringzm|0|Point|3|KO-BKO circularstringzm|0|LineString|3|KO-BKO circularstringzm|0|Polygon|3|KO-BKO circularstringzm|0|MultiPoint|3|KO-BKO circularstringzm|0|MultiLineString|3|KO-BKO circularstringzm|0|MultiPolygon|3|KO-BKO circularstringzm|0|GeometryCollection|3|KO-BKO circularstringzm|0|CircularString|3|OK-BOK circularstringzm|0|CompoundCurve|3|KO-BKO circularstringzm|0|CurvePolygon|3|KO-BKO circularstringzm|0|MultiCurve|3|KO-BKO circularstringzm|0|MultiSurface|3|KO-BKO circularstringzm|0|PolyhedralSurface|3|KO-BKO circularstringzm|0|Triangle|3|KO-BKO circularstringzm|4326|Point|0|KO-BKO circularstringzm|4326|LineString|0|KO-BKO circularstringzm|4326|Polygon|0|KO-BKO circularstringzm|4326|MultiPoint|0|KO-BKO circularstringzm|4326|MultiLineString|0|KO-BKO circularstringzm|4326|MultiPolygon|0|KO-BKO circularstringzm|4326|GeometryCollection|0|KO-BKO circularstringzm|4326|CircularString|0|KO-BKO circularstringzm|4326|CompoundCurve|0|KO-BKO circularstringzm|4326|CurvePolygon|0|KO-BKO circularstringzm|4326|MultiCurve|0|KO-BKO circularstringzm|4326|MultiSurface|0|KO-BKO circularstringzm|4326|PolyhedralSurface|0|KO-BKO circularstringzm|4326|Triangle|0|KO-BKO circularstringzm|4326|Tin|0|KO-BKO circularstringzm|4326|Point|2|KO-BKO circularstringzm|4326|LineString|2|KO-BKO circularstringzm|4326|Polygon|2|KO-BKO circularstringzm|4326|MultiPoint|2|KO-BKO circularstringzm|4326|MultiLineString|2|KO-BKO circularstringzm|4326|MultiPolygon|2|KO-BKO circularstringzm|4326|GeometryCollection|2|KO-BKO circularstringzm|4326|CircularString|2|KO-BKO circularstringzm|4326|CompoundCurve|2|KO-BKO circularstringzm|4326|CurvePolygon|2|KO-BKO circularstringzm|4326|MultiCurve|2|KO-BKO circularstringzm|4326|MultiSurface|2|KO-BKO circularstringzm|4326|PolyhedralSurface|2|KO-BKO circularstringzm|4326|Triangle|2|KO-BKO circularstringzm|4326|Point|1|KO-BKO circularstringzm|4326|LineString|1|KO-BKO circularstringzm|4326|Polygon|1|KO-BKO circularstringzm|4326|MultiPoint|1|KO-BKO circularstringzm|4326|MultiLineString|1|KO-BKO circularstringzm|4326|MultiPolygon|1|KO-BKO circularstringzm|4326|GeometryCollection|1|KO-BKO circularstringzm|4326|CircularString|1|KO-BKO circularstringzm|4326|CompoundCurve|1|KO-BKO circularstringzm|4326|CurvePolygon|1|KO-BKO circularstringzm|4326|MultiCurve|1|KO-BKO circularstringzm|4326|MultiSurface|1|KO-BKO circularstringzm|4326|PolyhedralSurface|1|KO-BKO circularstringzm|4326|Triangle|1|KO-BKO circularstringzm|4326|Point|3|KO-BKO circularstringzm|4326|LineString|3|KO-BKO circularstringzm|4326|Polygon|3|KO-BKO circularstringzm|4326|MultiPoint|3|KO-BKO circularstringzm|4326|MultiLineString|3|KO-BKO circularstringzm|4326|MultiPolygon|3|KO-BKO circularstringzm|4326|GeometryCollection|3|KO-BKO circularstringzm|4326|CircularString|3|OK-BOK circularstringzm|4326|CompoundCurve|3|KO-BKO circularstringzm|4326|CurvePolygon|3|KO-BKO circularstringzm|4326|MultiCurve|3|KO-BKO circularstringzm|4326|MultiSurface|3|KO-BKO circularstringzm|4326|PolyhedralSurface|3|KO-BKO circularstringzm|4326|Triangle|3|KO-BKO circularstringzm||COUNT|4| circularstringzm0|0|Point|0|KO-BKO circularstringzm0|0|LineString|0|KO-BKO circularstringzm0|0|Polygon|0|KO-BKO circularstringzm0|0|MultiPoint|0|KO-BKO circularstringzm0|0|MultiLineString|0|KO-BKO circularstringzm0|0|MultiPolygon|0|KO-BKO circularstringzm0|0|GeometryCollection|0|KO-BKO circularstringzm0|0|CircularString|0|KO-BKO circularstringzm0|0|CompoundCurve|0|KO-BKO circularstringzm0|0|CurvePolygon|0|KO-BKO circularstringzm0|0|MultiCurve|0|KO-BKO circularstringzm0|0|MultiSurface|0|KO-BKO circularstringzm0|0|PolyhedralSurface|0|KO-BKO circularstringzm0|0|Triangle|0|KO-BKO circularstringzm0|0|Tin|0|KO-BKO circularstringzm0|0|Point|2|KO-BKO circularstringzm0|0|LineString|2|KO-BKO circularstringzm0|0|Polygon|2|KO-BKO circularstringzm0|0|MultiPoint|2|KO-BKO circularstringzm0|0|MultiLineString|2|KO-BKO circularstringzm0|0|MultiPolygon|2|KO-BKO circularstringzm0|0|GeometryCollection|2|KO-BKO circularstringzm0|0|CircularString|2|KO-BKO circularstringzm0|0|CompoundCurve|2|KO-BKO circularstringzm0|0|CurvePolygon|2|KO-BKO circularstringzm0|0|MultiCurve|2|KO-BKO circularstringzm0|0|MultiSurface|2|KO-BKO circularstringzm0|0|PolyhedralSurface|2|KO-BKO circularstringzm0|0|Triangle|2|KO-BKO circularstringzm0|0|Point|1|KO-BKO circularstringzm0|0|LineString|1|KO-BKO circularstringzm0|0|Polygon|1|KO-BKO circularstringzm0|0|MultiPoint|1|KO-BKO circularstringzm0|0|MultiLineString|1|KO-BKO circularstringzm0|0|MultiPolygon|1|KO-BKO circularstringzm0|0|GeometryCollection|1|KO-BKO circularstringzm0|0|CircularString|1|KO-BKO circularstringzm0|0|CompoundCurve|1|KO-BKO circularstringzm0|0|CurvePolygon|1|KO-BKO circularstringzm0|0|MultiCurve|1|KO-BKO circularstringzm0|0|MultiSurface|1|KO-BKO circularstringzm0|0|PolyhedralSurface|1|KO-BKO circularstringzm0|0|Triangle|1|KO-BKO circularstringzm0|0|Point|3|KO-BKO circularstringzm0|0|LineString|3|KO-BKO circularstringzm0|0|Polygon|3|KO-BKO circularstringzm0|0|MultiPoint|3|KO-BKO circularstringzm0|0|MultiLineString|3|KO-BKO circularstringzm0|0|MultiPolygon|3|KO-BKO circularstringzm0|0|GeometryCollection|3|KO-BKO circularstringzm0|0|CircularString|3|OK-BOK circularstringzm0|0|CompoundCurve|3|KO-BKO circularstringzm0|0|CurvePolygon|3|KO-BKO circularstringzm0|0|MultiCurve|3|KO-BKO circularstringzm0|0|MultiSurface|3|KO-BKO circularstringzm0|0|PolyhedralSurface|3|KO-BKO circularstringzm0|0|Triangle|3|KO-BKO circularstringzm0|4326|Point|0|KO-BKO circularstringzm0|4326|LineString|0|KO-BKO circularstringzm0|4326|Polygon|0|KO-BKO circularstringzm0|4326|MultiPoint|0|KO-BKO circularstringzm0|4326|MultiLineString|0|KO-BKO circularstringzm0|4326|MultiPolygon|0|KO-BKO circularstringzm0|4326|GeometryCollection|0|KO-BKO circularstringzm0|4326|CircularString|0|KO-BKO circularstringzm0|4326|CompoundCurve|0|KO-BKO circularstringzm0|4326|CurvePolygon|0|KO-BKO circularstringzm0|4326|MultiCurve|0|KO-BKO circularstringzm0|4326|MultiSurface|0|KO-BKO circularstringzm0|4326|PolyhedralSurface|0|KO-BKO circularstringzm0|4326|Triangle|0|KO-BKO circularstringzm0|4326|Tin|0|KO-BKO circularstringzm0|4326|Point|2|KO-BKO circularstringzm0|4326|LineString|2|KO-BKO circularstringzm0|4326|Polygon|2|KO-BKO circularstringzm0|4326|MultiPoint|2|KO-BKO circularstringzm0|4326|MultiLineString|2|KO-BKO circularstringzm0|4326|MultiPolygon|2|KO-BKO circularstringzm0|4326|GeometryCollection|2|KO-BKO circularstringzm0|4326|CircularString|2|KO-BKO circularstringzm0|4326|CompoundCurve|2|KO-BKO circularstringzm0|4326|CurvePolygon|2|KO-BKO circularstringzm0|4326|MultiCurve|2|KO-BKO circularstringzm0|4326|MultiSurface|2|KO-BKO circularstringzm0|4326|PolyhedralSurface|2|KO-BKO circularstringzm0|4326|Triangle|2|KO-BKO circularstringzm0|4326|Point|1|KO-BKO circularstringzm0|4326|LineString|1|KO-BKO circularstringzm0|4326|Polygon|1|KO-BKO circularstringzm0|4326|MultiPoint|1|KO-BKO circularstringzm0|4326|MultiLineString|1|KO-BKO circularstringzm0|4326|MultiPolygon|1|KO-BKO circularstringzm0|4326|GeometryCollection|1|KO-BKO circularstringzm0|4326|CircularString|1|KO-BKO circularstringzm0|4326|CompoundCurve|1|KO-BKO circularstringzm0|4326|CurvePolygon|1|KO-BKO circularstringzm0|4326|MultiCurve|1|KO-BKO circularstringzm0|4326|MultiSurface|1|KO-BKO circularstringzm0|4326|PolyhedralSurface|1|KO-BKO circularstringzm0|4326|Triangle|1|KO-BKO circularstringzm0|4326|Point|3|KO-BKO circularstringzm0|4326|LineString|3|KO-BKO circularstringzm0|4326|Polygon|3|KO-BKO circularstringzm0|4326|MultiPoint|3|KO-BKO circularstringzm0|4326|MultiLineString|3|KO-BKO circularstringzm0|4326|MultiPolygon|3|KO-BKO circularstringzm0|4326|GeometryCollection|3|KO-BKO circularstringzm0|4326|CircularString|3|OK-BOK circularstringzm0|4326|CompoundCurve|3|KO-BKO circularstringzm0|4326|CurvePolygon|3|KO-BKO circularstringzm0|4326|MultiCurve|3|KO-BKO circularstringzm0|4326|MultiSurface|3|KO-BKO circularstringzm0|4326|PolyhedralSurface|3|KO-BKO circularstringzm0|4326|Triangle|3|KO-BKO circularstringzm0||COUNT|4| circularstringzm4326|0|Point|0|KO-BKO circularstringzm4326|0|LineString|0|KO-BKO circularstringzm4326|0|Polygon|0|KO-BKO circularstringzm4326|0|MultiPoint|0|KO-BKO circularstringzm4326|0|MultiLineString|0|KO-BKO circularstringzm4326|0|MultiPolygon|0|KO-BKO circularstringzm4326|0|GeometryCollection|0|KO-BKO circularstringzm4326|0|CircularString|0|KO-BKO circularstringzm4326|0|CompoundCurve|0|KO-BKO circularstringzm4326|0|CurvePolygon|0|KO-BKO circularstringzm4326|0|MultiCurve|0|KO-BKO circularstringzm4326|0|MultiSurface|0|KO-BKO circularstringzm4326|0|PolyhedralSurface|0|KO-BKO circularstringzm4326|0|Triangle|0|KO-BKO circularstringzm4326|0|Tin|0|KO-BKO circularstringzm4326|0|Point|2|KO-BKO circularstringzm4326|0|LineString|2|KO-BKO circularstringzm4326|0|Polygon|2|KO-BKO circularstringzm4326|0|MultiPoint|2|KO-BKO circularstringzm4326|0|MultiLineString|2|KO-BKO circularstringzm4326|0|MultiPolygon|2|KO-BKO circularstringzm4326|0|GeometryCollection|2|KO-BKO circularstringzm4326|0|CircularString|2|KO-BKO circularstringzm4326|0|CompoundCurve|2|KO-BKO circularstringzm4326|0|CurvePolygon|2|KO-BKO circularstringzm4326|0|MultiCurve|2|KO-BKO circularstringzm4326|0|MultiSurface|2|KO-BKO circularstringzm4326|0|PolyhedralSurface|2|KO-BKO circularstringzm4326|0|Triangle|2|KO-BKO circularstringzm4326|0|Point|1|KO-BKO circularstringzm4326|0|LineString|1|KO-BKO circularstringzm4326|0|Polygon|1|KO-BKO circularstringzm4326|0|MultiPoint|1|KO-BKO circularstringzm4326|0|MultiLineString|1|KO-BKO circularstringzm4326|0|MultiPolygon|1|KO-BKO circularstringzm4326|0|GeometryCollection|1|KO-BKO circularstringzm4326|0|CircularString|1|KO-BKO circularstringzm4326|0|CompoundCurve|1|KO-BKO circularstringzm4326|0|CurvePolygon|1|KO-BKO circularstringzm4326|0|MultiCurve|1|KO-BKO circularstringzm4326|0|MultiSurface|1|KO-BKO circularstringzm4326|0|PolyhedralSurface|1|KO-BKO circularstringzm4326|0|Triangle|1|KO-BKO circularstringzm4326|0|Point|3|KO-BKO circularstringzm4326|0|LineString|3|KO-BKO circularstringzm4326|0|Polygon|3|KO-BKO circularstringzm4326|0|MultiPoint|3|KO-BKO circularstringzm4326|0|MultiLineString|3|KO-BKO circularstringzm4326|0|MultiPolygon|3|KO-BKO circularstringzm4326|0|GeometryCollection|3|KO-BKO circularstringzm4326|0|CircularString|3|KO-BKO circularstringzm4326|0|CompoundCurve|3|KO-BKO circularstringzm4326|0|CurvePolygon|3|KO-BKO circularstringzm4326|0|MultiCurve|3|KO-BKO circularstringzm4326|0|MultiSurface|3|KO-BKO circularstringzm4326|0|PolyhedralSurface|3|KO-BKO circularstringzm4326|0|Triangle|3|KO-BKO circularstringzm4326|4326|Point|0|KO-BKO circularstringzm4326|4326|LineString|0|KO-BKO circularstringzm4326|4326|Polygon|0|KO-BKO circularstringzm4326|4326|MultiPoint|0|KO-BKO circularstringzm4326|4326|MultiLineString|0|KO-BKO circularstringzm4326|4326|MultiPolygon|0|KO-BKO circularstringzm4326|4326|GeometryCollection|0|KO-BKO circularstringzm4326|4326|CircularString|0|KO-BKO circularstringzm4326|4326|CompoundCurve|0|KO-BKO circularstringzm4326|4326|CurvePolygon|0|KO-BKO circularstringzm4326|4326|MultiCurve|0|KO-BKO circularstringzm4326|4326|MultiSurface|0|KO-BKO circularstringzm4326|4326|PolyhedralSurface|0|KO-BKO circularstringzm4326|4326|Triangle|0|KO-BKO circularstringzm4326|4326|Tin|0|KO-BKO circularstringzm4326|4326|Point|2|KO-BKO circularstringzm4326|4326|LineString|2|KO-BKO circularstringzm4326|4326|Polygon|2|KO-BKO circularstringzm4326|4326|MultiPoint|2|KO-BKO circularstringzm4326|4326|MultiLineString|2|KO-BKO circularstringzm4326|4326|MultiPolygon|2|KO-BKO circularstringzm4326|4326|GeometryCollection|2|KO-BKO circularstringzm4326|4326|CircularString|2|KO-BKO circularstringzm4326|4326|CompoundCurve|2|KO-BKO circularstringzm4326|4326|CurvePolygon|2|KO-BKO circularstringzm4326|4326|MultiCurve|2|KO-BKO circularstringzm4326|4326|MultiSurface|2|KO-BKO circularstringzm4326|4326|PolyhedralSurface|2|KO-BKO circularstringzm4326|4326|Triangle|2|KO-BKO circularstringzm4326|4326|Point|1|KO-BKO circularstringzm4326|4326|LineString|1|KO-BKO circularstringzm4326|4326|Polygon|1|KO-BKO circularstringzm4326|4326|MultiPoint|1|KO-BKO circularstringzm4326|4326|MultiLineString|1|KO-BKO circularstringzm4326|4326|MultiPolygon|1|KO-BKO circularstringzm4326|4326|GeometryCollection|1|KO-BKO circularstringzm4326|4326|CircularString|1|KO-BKO circularstringzm4326|4326|CompoundCurve|1|KO-BKO circularstringzm4326|4326|CurvePolygon|1|KO-BKO circularstringzm4326|4326|MultiCurve|1|KO-BKO circularstringzm4326|4326|MultiSurface|1|KO-BKO circularstringzm4326|4326|PolyhedralSurface|1|KO-BKO circularstringzm4326|4326|Triangle|1|KO-BKO circularstringzm4326|4326|Point|3|KO-BKO circularstringzm4326|4326|LineString|3|KO-BKO circularstringzm4326|4326|Polygon|3|KO-BKO circularstringzm4326|4326|MultiPoint|3|KO-BKO circularstringzm4326|4326|MultiLineString|3|KO-BKO circularstringzm4326|4326|MultiPolygon|3|KO-BKO circularstringzm4326|4326|GeometryCollection|3|KO-BKO circularstringzm4326|4326|CircularString|3|OK-BOK circularstringzm4326|4326|CompoundCurve|3|KO-BKO circularstringzm4326|4326|CurvePolygon|3|KO-BKO circularstringzm4326|4326|MultiCurve|3|KO-BKO circularstringzm4326|4326|MultiSurface|3|KO-BKO circularstringzm4326|4326|PolyhedralSurface|3|KO-BKO circularstringzm4326|4326|Triangle|3|KO-BKO circularstringzm4326||COUNT|2| compoundcurve|0|Point|0|KO-BKO compoundcurve|0|LineString|0|KO-BKO compoundcurve|0|Polygon|0|KO-BKO compoundcurve|0|MultiPoint|0|KO-BKO compoundcurve|0|MultiLineString|0|KO-BKO compoundcurve|0|MultiPolygon|0|KO-BKO compoundcurve|0|GeometryCollection|0|KO-BKO compoundcurve|0|CircularString|0|KO-BKO compoundcurve|0|CompoundCurve|0|OK-BOK compoundcurve|0|CurvePolygon|0|KO-BKO compoundcurve|0|MultiCurve|0|KO-BKO compoundcurve|0|MultiSurface|0|KO-BKO compoundcurve|0|PolyhedralSurface|0|KO-BKO compoundcurve|0|Triangle|0|KO-BKO compoundcurve|0|Tin|0|KO-BKO compoundcurve|0|Point|2|KO-BKO compoundcurve|0|LineString|2|KO-BKO compoundcurve|0|Polygon|2|KO-BKO compoundcurve|0|MultiPoint|2|KO-BKO compoundcurve|0|MultiLineString|2|KO-BKO compoundcurve|0|MultiPolygon|2|KO-BKO compoundcurve|0|GeometryCollection|2|KO-BKO compoundcurve|0|CircularString|2|KO-BKO compoundcurve|0|CompoundCurve|2|KO-BKO compoundcurve|0|CurvePolygon|2|KO-BKO compoundcurve|0|MultiCurve|2|KO-BKO compoundcurve|0|MultiSurface|2|KO-BKO compoundcurve|0|PolyhedralSurface|2|KO-BKO compoundcurve|0|Triangle|2|KO-BKO compoundcurve|0|Point|1|KO-BKO compoundcurve|0|LineString|1|KO-BKO compoundcurve|0|Polygon|1|KO-BKO compoundcurve|0|MultiPoint|1|KO-BKO compoundcurve|0|MultiLineString|1|KO-BKO compoundcurve|0|MultiPolygon|1|KO-BKO compoundcurve|0|GeometryCollection|1|KO-BKO compoundcurve|0|CircularString|1|KO-BKO compoundcurve|0|CompoundCurve|1|KO-BKO compoundcurve|0|CurvePolygon|1|KO-BKO compoundcurve|0|MultiCurve|1|KO-BKO compoundcurve|0|MultiSurface|1|KO-BKO compoundcurve|0|PolyhedralSurface|1|KO-BKO compoundcurve|0|Triangle|1|KO-BKO compoundcurve|0|Point|3|KO-BKO compoundcurve|0|LineString|3|KO-BKO compoundcurve|0|Polygon|3|KO-BKO compoundcurve|0|MultiPoint|3|KO-BKO compoundcurve|0|MultiLineString|3|KO-BKO compoundcurve|0|MultiPolygon|3|KO-BKO compoundcurve|0|GeometryCollection|3|KO-BKO compoundcurve|0|CircularString|3|KO-BKO compoundcurve|0|CompoundCurve|3|KO-BKO compoundcurve|0|CurvePolygon|3|KO-BKO compoundcurve|0|MultiCurve|3|KO-BKO compoundcurve|0|MultiSurface|3|KO-BKO compoundcurve|0|PolyhedralSurface|3|KO-BKO compoundcurve|0|Triangle|3|KO-BKO compoundcurve|4326|Point|0|KO-BKO compoundcurve|4326|LineString|0|KO-BKO compoundcurve|4326|Polygon|0|KO-BKO compoundcurve|4326|MultiPoint|0|KO-BKO compoundcurve|4326|MultiLineString|0|KO-BKO compoundcurve|4326|MultiPolygon|0|KO-BKO compoundcurve|4326|GeometryCollection|0|KO-BKO compoundcurve|4326|CircularString|0|KO-BKO compoundcurve|4326|CompoundCurve|0|OK-BOK compoundcurve|4326|CurvePolygon|0|KO-BKO compoundcurve|4326|MultiCurve|0|KO-BKO compoundcurve|4326|MultiSurface|0|KO-BKO compoundcurve|4326|PolyhedralSurface|0|KO-BKO compoundcurve|4326|Triangle|0|KO-BKO compoundcurve|4326|Tin|0|KO-BKO compoundcurve|4326|Point|2|KO-BKO compoundcurve|4326|LineString|2|KO-BKO compoundcurve|4326|Polygon|2|KO-BKO compoundcurve|4326|MultiPoint|2|KO-BKO compoundcurve|4326|MultiLineString|2|KO-BKO compoundcurve|4326|MultiPolygon|2|KO-BKO compoundcurve|4326|GeometryCollection|2|KO-BKO compoundcurve|4326|CircularString|2|KO-BKO compoundcurve|4326|CompoundCurve|2|KO-BKO compoundcurve|4326|CurvePolygon|2|KO-BKO compoundcurve|4326|MultiCurve|2|KO-BKO compoundcurve|4326|MultiSurface|2|KO-BKO compoundcurve|4326|PolyhedralSurface|2|KO-BKO compoundcurve|4326|Triangle|2|KO-BKO compoundcurve|4326|Point|1|KO-BKO compoundcurve|4326|LineString|1|KO-BKO compoundcurve|4326|Polygon|1|KO-BKO compoundcurve|4326|MultiPoint|1|KO-BKO compoundcurve|4326|MultiLineString|1|KO-BKO compoundcurve|4326|MultiPolygon|1|KO-BKO compoundcurve|4326|GeometryCollection|1|KO-BKO compoundcurve|4326|CircularString|1|KO-BKO compoundcurve|4326|CompoundCurve|1|KO-BKO compoundcurve|4326|CurvePolygon|1|KO-BKO compoundcurve|4326|MultiCurve|1|KO-BKO compoundcurve|4326|MultiSurface|1|KO-BKO compoundcurve|4326|PolyhedralSurface|1|KO-BKO compoundcurve|4326|Triangle|1|KO-BKO compoundcurve|4326|Point|3|KO-BKO compoundcurve|4326|LineString|3|KO-BKO compoundcurve|4326|Polygon|3|KO-BKO compoundcurve|4326|MultiPoint|3|KO-BKO compoundcurve|4326|MultiLineString|3|KO-BKO compoundcurve|4326|MultiPolygon|3|KO-BKO compoundcurve|4326|GeometryCollection|3|KO-BKO compoundcurve|4326|CircularString|3|KO-BKO compoundcurve|4326|CompoundCurve|3|KO-BKO compoundcurve|4326|CurvePolygon|3|KO-BKO compoundcurve|4326|MultiCurve|3|KO-BKO compoundcurve|4326|MultiSurface|3|KO-BKO compoundcurve|4326|PolyhedralSurface|3|KO-BKO compoundcurve|4326|Triangle|3|KO-BKO compoundcurve||COUNT|4| compoundcurve0|0|Point|0|KO-BKO compoundcurve0|0|LineString|0|KO-BKO compoundcurve0|0|Polygon|0|KO-BKO compoundcurve0|0|MultiPoint|0|KO-BKO compoundcurve0|0|MultiLineString|0|KO-BKO compoundcurve0|0|MultiPolygon|0|KO-BKO compoundcurve0|0|GeometryCollection|0|KO-BKO compoundcurve0|0|CircularString|0|KO-BKO compoundcurve0|0|CompoundCurve|0|OK-BOK compoundcurve0|0|CurvePolygon|0|KO-BKO compoundcurve0|0|MultiCurve|0|KO-BKO compoundcurve0|0|MultiSurface|0|KO-BKO compoundcurve0|0|PolyhedralSurface|0|KO-BKO compoundcurve0|0|Triangle|0|KO-BKO compoundcurve0|0|Tin|0|KO-BKO compoundcurve0|0|Point|2|KO-BKO compoundcurve0|0|LineString|2|KO-BKO compoundcurve0|0|Polygon|2|KO-BKO compoundcurve0|0|MultiPoint|2|KO-BKO compoundcurve0|0|MultiLineString|2|KO-BKO compoundcurve0|0|MultiPolygon|2|KO-BKO compoundcurve0|0|GeometryCollection|2|KO-BKO compoundcurve0|0|CircularString|2|KO-BKO compoundcurve0|0|CompoundCurve|2|KO-BKO compoundcurve0|0|CurvePolygon|2|KO-BKO compoundcurve0|0|MultiCurve|2|KO-BKO compoundcurve0|0|MultiSurface|2|KO-BKO compoundcurve0|0|PolyhedralSurface|2|KO-BKO compoundcurve0|0|Triangle|2|KO-BKO compoundcurve0|0|Point|1|KO-BKO compoundcurve0|0|LineString|1|KO-BKO compoundcurve0|0|Polygon|1|KO-BKO compoundcurve0|0|MultiPoint|1|KO-BKO compoundcurve0|0|MultiLineString|1|KO-BKO compoundcurve0|0|MultiPolygon|1|KO-BKO compoundcurve0|0|GeometryCollection|1|KO-BKO compoundcurve0|0|CircularString|1|KO-BKO compoundcurve0|0|CompoundCurve|1|KO-BKO compoundcurve0|0|CurvePolygon|1|KO-BKO compoundcurve0|0|MultiCurve|1|KO-BKO compoundcurve0|0|MultiSurface|1|KO-BKO compoundcurve0|0|PolyhedralSurface|1|KO-BKO compoundcurve0|0|Triangle|1|KO-BKO compoundcurve0|0|Point|3|KO-BKO compoundcurve0|0|LineString|3|KO-BKO compoundcurve0|0|Polygon|3|KO-BKO compoundcurve0|0|MultiPoint|3|KO-BKO compoundcurve0|0|MultiLineString|3|KO-BKO compoundcurve0|0|MultiPolygon|3|KO-BKO compoundcurve0|0|GeometryCollection|3|KO-BKO compoundcurve0|0|CircularString|3|KO-BKO compoundcurve0|0|CompoundCurve|3|KO-BKO compoundcurve0|0|CurvePolygon|3|KO-BKO compoundcurve0|0|MultiCurve|3|KO-BKO compoundcurve0|0|MultiSurface|3|KO-BKO compoundcurve0|0|PolyhedralSurface|3|KO-BKO compoundcurve0|0|Triangle|3|KO-BKO compoundcurve0|4326|Point|0|KO-BKO compoundcurve0|4326|LineString|0|KO-BKO compoundcurve0|4326|Polygon|0|KO-BKO compoundcurve0|4326|MultiPoint|0|KO-BKO compoundcurve0|4326|MultiLineString|0|KO-BKO compoundcurve0|4326|MultiPolygon|0|KO-BKO compoundcurve0|4326|GeometryCollection|0|KO-BKO compoundcurve0|4326|CircularString|0|KO-BKO compoundcurve0|4326|CompoundCurve|0|OK-BOK compoundcurve0|4326|CurvePolygon|0|KO-BKO compoundcurve0|4326|MultiCurve|0|KO-BKO compoundcurve0|4326|MultiSurface|0|KO-BKO compoundcurve0|4326|PolyhedralSurface|0|KO-BKO compoundcurve0|4326|Triangle|0|KO-BKO compoundcurve0|4326|Tin|0|KO-BKO compoundcurve0|4326|Point|2|KO-BKO compoundcurve0|4326|LineString|2|KO-BKO compoundcurve0|4326|Polygon|2|KO-BKO compoundcurve0|4326|MultiPoint|2|KO-BKO compoundcurve0|4326|MultiLineString|2|KO-BKO compoundcurve0|4326|MultiPolygon|2|KO-BKO compoundcurve0|4326|GeometryCollection|2|KO-BKO compoundcurve0|4326|CircularString|2|KO-BKO compoundcurve0|4326|CompoundCurve|2|KO-BKO compoundcurve0|4326|CurvePolygon|2|KO-BKO compoundcurve0|4326|MultiCurve|2|KO-BKO compoundcurve0|4326|MultiSurface|2|KO-BKO compoundcurve0|4326|PolyhedralSurface|2|KO-BKO compoundcurve0|4326|Triangle|2|KO-BKO compoundcurve0|4326|Point|1|KO-BKO compoundcurve0|4326|LineString|1|KO-BKO compoundcurve0|4326|Polygon|1|KO-BKO compoundcurve0|4326|MultiPoint|1|KO-BKO compoundcurve0|4326|MultiLineString|1|KO-BKO compoundcurve0|4326|MultiPolygon|1|KO-BKO compoundcurve0|4326|GeometryCollection|1|KO-BKO compoundcurve0|4326|CircularString|1|KO-BKO compoundcurve0|4326|CompoundCurve|1|KO-BKO compoundcurve0|4326|CurvePolygon|1|KO-BKO compoundcurve0|4326|MultiCurve|1|KO-BKO compoundcurve0|4326|MultiSurface|1|KO-BKO compoundcurve0|4326|PolyhedralSurface|1|KO-BKO compoundcurve0|4326|Triangle|1|KO-BKO compoundcurve0|4326|Point|3|KO-BKO compoundcurve0|4326|LineString|3|KO-BKO compoundcurve0|4326|Polygon|3|KO-BKO compoundcurve0|4326|MultiPoint|3|KO-BKO compoundcurve0|4326|MultiLineString|3|KO-BKO compoundcurve0|4326|MultiPolygon|3|KO-BKO compoundcurve0|4326|GeometryCollection|3|KO-BKO compoundcurve0|4326|CircularString|3|KO-BKO compoundcurve0|4326|CompoundCurve|3|KO-BKO compoundcurve0|4326|CurvePolygon|3|KO-BKO compoundcurve0|4326|MultiCurve|3|KO-BKO compoundcurve0|4326|MultiSurface|3|KO-BKO compoundcurve0|4326|PolyhedralSurface|3|KO-BKO compoundcurve0|4326|Triangle|3|KO-BKO compoundcurve0||COUNT|4| compoundcurve4326|0|Point|0|KO-BKO compoundcurve4326|0|LineString|0|KO-BKO compoundcurve4326|0|Polygon|0|KO-BKO compoundcurve4326|0|MultiPoint|0|KO-BKO compoundcurve4326|0|MultiLineString|0|KO-BKO compoundcurve4326|0|MultiPolygon|0|KO-BKO compoundcurve4326|0|GeometryCollection|0|KO-BKO compoundcurve4326|0|CircularString|0|KO-BKO compoundcurve4326|0|CompoundCurve|0|KO-BKO compoundcurve4326|0|CurvePolygon|0|KO-BKO compoundcurve4326|0|MultiCurve|0|KO-BKO compoundcurve4326|0|MultiSurface|0|KO-BKO compoundcurve4326|0|PolyhedralSurface|0|KO-BKO compoundcurve4326|0|Triangle|0|KO-BKO compoundcurve4326|0|Tin|0|KO-BKO compoundcurve4326|0|Point|2|KO-BKO compoundcurve4326|0|LineString|2|KO-BKO compoundcurve4326|0|Polygon|2|KO-BKO compoundcurve4326|0|MultiPoint|2|KO-BKO compoundcurve4326|0|MultiLineString|2|KO-BKO compoundcurve4326|0|MultiPolygon|2|KO-BKO compoundcurve4326|0|GeometryCollection|2|KO-BKO compoundcurve4326|0|CircularString|2|KO-BKO compoundcurve4326|0|CompoundCurve|2|KO-BKO compoundcurve4326|0|CurvePolygon|2|KO-BKO compoundcurve4326|0|MultiCurve|2|KO-BKO compoundcurve4326|0|MultiSurface|2|KO-BKO compoundcurve4326|0|PolyhedralSurface|2|KO-BKO compoundcurve4326|0|Triangle|2|KO-BKO compoundcurve4326|0|Point|1|KO-BKO compoundcurve4326|0|LineString|1|KO-BKO compoundcurve4326|0|Polygon|1|KO-BKO compoundcurve4326|0|MultiPoint|1|KO-BKO compoundcurve4326|0|MultiLineString|1|KO-BKO compoundcurve4326|0|MultiPolygon|1|KO-BKO compoundcurve4326|0|GeometryCollection|1|KO-BKO compoundcurve4326|0|CircularString|1|KO-BKO compoundcurve4326|0|CompoundCurve|1|KO-BKO compoundcurve4326|0|CurvePolygon|1|KO-BKO compoundcurve4326|0|MultiCurve|1|KO-BKO compoundcurve4326|0|MultiSurface|1|KO-BKO compoundcurve4326|0|PolyhedralSurface|1|KO-BKO compoundcurve4326|0|Triangle|1|KO-BKO compoundcurve4326|0|Point|3|KO-BKO compoundcurve4326|0|LineString|3|KO-BKO compoundcurve4326|0|Polygon|3|KO-BKO compoundcurve4326|0|MultiPoint|3|KO-BKO compoundcurve4326|0|MultiLineString|3|KO-BKO compoundcurve4326|0|MultiPolygon|3|KO-BKO compoundcurve4326|0|GeometryCollection|3|KO-BKO compoundcurve4326|0|CircularString|3|KO-BKO compoundcurve4326|0|CompoundCurve|3|KO-BKO compoundcurve4326|0|CurvePolygon|3|KO-BKO compoundcurve4326|0|MultiCurve|3|KO-BKO compoundcurve4326|0|MultiSurface|3|KO-BKO compoundcurve4326|0|PolyhedralSurface|3|KO-BKO compoundcurve4326|0|Triangle|3|KO-BKO compoundcurve4326|4326|Point|0|KO-BKO compoundcurve4326|4326|LineString|0|KO-BKO compoundcurve4326|4326|Polygon|0|KO-BKO compoundcurve4326|4326|MultiPoint|0|KO-BKO compoundcurve4326|4326|MultiLineString|0|KO-BKO compoundcurve4326|4326|MultiPolygon|0|KO-BKO compoundcurve4326|4326|GeometryCollection|0|KO-BKO compoundcurve4326|4326|CircularString|0|KO-BKO compoundcurve4326|4326|CompoundCurve|0|OK-BOK compoundcurve4326|4326|CurvePolygon|0|KO-BKO compoundcurve4326|4326|MultiCurve|0|KO-BKO compoundcurve4326|4326|MultiSurface|0|KO-BKO compoundcurve4326|4326|PolyhedralSurface|0|KO-BKO compoundcurve4326|4326|Triangle|0|KO-BKO compoundcurve4326|4326|Tin|0|KO-BKO compoundcurve4326|4326|Point|2|KO-BKO compoundcurve4326|4326|LineString|2|KO-BKO compoundcurve4326|4326|Polygon|2|KO-BKO compoundcurve4326|4326|MultiPoint|2|KO-BKO compoundcurve4326|4326|MultiLineString|2|KO-BKO compoundcurve4326|4326|MultiPolygon|2|KO-BKO compoundcurve4326|4326|GeometryCollection|2|KO-BKO compoundcurve4326|4326|CircularString|2|KO-BKO compoundcurve4326|4326|CompoundCurve|2|KO-BKO compoundcurve4326|4326|CurvePolygon|2|KO-BKO compoundcurve4326|4326|MultiCurve|2|KO-BKO compoundcurve4326|4326|MultiSurface|2|KO-BKO compoundcurve4326|4326|PolyhedralSurface|2|KO-BKO compoundcurve4326|4326|Triangle|2|KO-BKO compoundcurve4326|4326|Point|1|KO-BKO compoundcurve4326|4326|LineString|1|KO-BKO compoundcurve4326|4326|Polygon|1|KO-BKO compoundcurve4326|4326|MultiPoint|1|KO-BKO compoundcurve4326|4326|MultiLineString|1|KO-BKO compoundcurve4326|4326|MultiPolygon|1|KO-BKO compoundcurve4326|4326|GeometryCollection|1|KO-BKO compoundcurve4326|4326|CircularString|1|KO-BKO compoundcurve4326|4326|CompoundCurve|1|KO-BKO compoundcurve4326|4326|CurvePolygon|1|KO-BKO compoundcurve4326|4326|MultiCurve|1|KO-BKO compoundcurve4326|4326|MultiSurface|1|KO-BKO compoundcurve4326|4326|PolyhedralSurface|1|KO-BKO compoundcurve4326|4326|Triangle|1|KO-BKO compoundcurve4326|4326|Point|3|KO-BKO compoundcurve4326|4326|LineString|3|KO-BKO compoundcurve4326|4326|Polygon|3|KO-BKO compoundcurve4326|4326|MultiPoint|3|KO-BKO compoundcurve4326|4326|MultiLineString|3|KO-BKO compoundcurve4326|4326|MultiPolygon|3|KO-BKO compoundcurve4326|4326|GeometryCollection|3|KO-BKO compoundcurve4326|4326|CircularString|3|KO-BKO compoundcurve4326|4326|CompoundCurve|3|KO-BKO compoundcurve4326|4326|CurvePolygon|3|KO-BKO compoundcurve4326|4326|MultiCurve|3|KO-BKO compoundcurve4326|4326|MultiSurface|3|KO-BKO compoundcurve4326|4326|PolyhedralSurface|3|KO-BKO compoundcurve4326|4326|Triangle|3|KO-BKO compoundcurve4326||COUNT|2| compoundcurvem|0|Point|0|KO-BKO compoundcurvem|0|LineString|0|KO-BKO compoundcurvem|0|Polygon|0|KO-BKO compoundcurvem|0|MultiPoint|0|KO-BKO compoundcurvem|0|MultiLineString|0|KO-BKO compoundcurvem|0|MultiPolygon|0|KO-BKO compoundcurvem|0|GeometryCollection|0|KO-BKO compoundcurvem|0|CircularString|0|KO-BKO compoundcurvem|0|CompoundCurve|0|KO-BKO compoundcurvem|0|CurvePolygon|0|KO-BKO compoundcurvem|0|MultiCurve|0|KO-BKO compoundcurvem|0|MultiSurface|0|KO-BKO compoundcurvem|0|PolyhedralSurface|0|KO-BKO compoundcurvem|0|Triangle|0|KO-BKO compoundcurvem|0|Tin|0|KO-BKO compoundcurvem|0|Point|2|KO-BKO compoundcurvem|0|LineString|2|KO-BKO compoundcurvem|0|Polygon|2|KO-BKO compoundcurvem|0|MultiPoint|2|KO-BKO compoundcurvem|0|MultiLineString|2|KO-BKO compoundcurvem|0|MultiPolygon|2|KO-BKO compoundcurvem|0|GeometryCollection|2|KO-BKO compoundcurvem|0|CircularString|2|KO-BKO compoundcurvem|0|CompoundCurve|2|KO-BKO compoundcurvem|0|CurvePolygon|2|KO-BKO compoundcurvem|0|MultiCurve|2|KO-BKO compoundcurvem|0|MultiSurface|2|KO-BKO compoundcurvem|0|PolyhedralSurface|2|KO-BKO compoundcurvem|0|Triangle|2|KO-BKO compoundcurvem|0|Point|1|KO-BKO compoundcurvem|0|LineString|1|KO-BKO compoundcurvem|0|Polygon|1|KO-BKO compoundcurvem|0|MultiPoint|1|KO-BKO compoundcurvem|0|MultiLineString|1|KO-BKO compoundcurvem|0|MultiPolygon|1|KO-BKO compoundcurvem|0|GeometryCollection|1|KO-BKO compoundcurvem|0|CircularString|1|KO-BKO compoundcurvem|0|CompoundCurve|1|OK-BOK compoundcurvem|0|CurvePolygon|1|KO-BKO compoundcurvem|0|MultiCurve|1|KO-BKO compoundcurvem|0|MultiSurface|1|KO-BKO compoundcurvem|0|PolyhedralSurface|1|KO-BKO compoundcurvem|0|Triangle|1|KO-BKO compoundcurvem|0|Point|3|KO-BKO compoundcurvem|0|LineString|3|KO-BKO compoundcurvem|0|Polygon|3|KO-BKO compoundcurvem|0|MultiPoint|3|KO-BKO compoundcurvem|0|MultiLineString|3|KO-BKO compoundcurvem|0|MultiPolygon|3|KO-BKO compoundcurvem|0|GeometryCollection|3|KO-BKO compoundcurvem|0|CircularString|3|KO-BKO compoundcurvem|0|CompoundCurve|3|KO-BKO compoundcurvem|0|CurvePolygon|3|KO-BKO compoundcurvem|0|MultiCurve|3|KO-BKO compoundcurvem|0|MultiSurface|3|KO-BKO compoundcurvem|0|PolyhedralSurface|3|KO-BKO compoundcurvem|0|Triangle|3|KO-BKO compoundcurvem|4326|Point|0|KO-BKO compoundcurvem|4326|LineString|0|KO-BKO compoundcurvem|4326|Polygon|0|KO-BKO compoundcurvem|4326|MultiPoint|0|KO-BKO compoundcurvem|4326|MultiLineString|0|KO-BKO compoundcurvem|4326|MultiPolygon|0|KO-BKO compoundcurvem|4326|GeometryCollection|0|KO-BKO compoundcurvem|4326|CircularString|0|KO-BKO compoundcurvem|4326|CompoundCurve|0|KO-BKO compoundcurvem|4326|CurvePolygon|0|KO-BKO compoundcurvem|4326|MultiCurve|0|KO-BKO compoundcurvem|4326|MultiSurface|0|KO-BKO compoundcurvem|4326|PolyhedralSurface|0|KO-BKO compoundcurvem|4326|Triangle|0|KO-BKO compoundcurvem|4326|Tin|0|KO-BKO compoundcurvem|4326|Point|2|KO-BKO compoundcurvem|4326|LineString|2|KO-BKO compoundcurvem|4326|Polygon|2|KO-BKO compoundcurvem|4326|MultiPoint|2|KO-BKO compoundcurvem|4326|MultiLineString|2|KO-BKO compoundcurvem|4326|MultiPolygon|2|KO-BKO compoundcurvem|4326|GeometryCollection|2|KO-BKO compoundcurvem|4326|CircularString|2|KO-BKO compoundcurvem|4326|CompoundCurve|2|KO-BKO compoundcurvem|4326|CurvePolygon|2|KO-BKO compoundcurvem|4326|MultiCurve|2|KO-BKO compoundcurvem|4326|MultiSurface|2|KO-BKO compoundcurvem|4326|PolyhedralSurface|2|KO-BKO compoundcurvem|4326|Triangle|2|KO-BKO compoundcurvem|4326|Point|1|KO-BKO compoundcurvem|4326|LineString|1|KO-BKO compoundcurvem|4326|Polygon|1|KO-BKO compoundcurvem|4326|MultiPoint|1|KO-BKO compoundcurvem|4326|MultiLineString|1|KO-BKO compoundcurvem|4326|MultiPolygon|1|KO-BKO compoundcurvem|4326|GeometryCollection|1|KO-BKO compoundcurvem|4326|CircularString|1|KO-BKO compoundcurvem|4326|CompoundCurve|1|OK-BOK compoundcurvem|4326|CurvePolygon|1|KO-BKO compoundcurvem|4326|MultiCurve|1|KO-BKO compoundcurvem|4326|MultiSurface|1|KO-BKO compoundcurvem|4326|PolyhedralSurface|1|KO-BKO compoundcurvem|4326|Triangle|1|KO-BKO compoundcurvem|4326|Point|3|KO-BKO compoundcurvem|4326|LineString|3|KO-BKO compoundcurvem|4326|Polygon|3|KO-BKO compoundcurvem|4326|MultiPoint|3|KO-BKO compoundcurvem|4326|MultiLineString|3|KO-BKO compoundcurvem|4326|MultiPolygon|3|KO-BKO compoundcurvem|4326|GeometryCollection|3|KO-BKO compoundcurvem|4326|CircularString|3|KO-BKO compoundcurvem|4326|CompoundCurve|3|KO-BKO compoundcurvem|4326|CurvePolygon|3|KO-BKO compoundcurvem|4326|MultiCurve|3|KO-BKO compoundcurvem|4326|MultiSurface|3|KO-BKO compoundcurvem|4326|PolyhedralSurface|3|KO-BKO compoundcurvem|4326|Triangle|3|KO-BKO compoundcurvem||COUNT|4| compoundcurvem0|0|Point|0|KO-BKO compoundcurvem0|0|LineString|0|KO-BKO compoundcurvem0|0|Polygon|0|KO-BKO compoundcurvem0|0|MultiPoint|0|KO-BKO compoundcurvem0|0|MultiLineString|0|KO-BKO compoundcurvem0|0|MultiPolygon|0|KO-BKO compoundcurvem0|0|GeometryCollection|0|KO-BKO compoundcurvem0|0|CircularString|0|KO-BKO compoundcurvem0|0|CompoundCurve|0|KO-BKO compoundcurvem0|0|CurvePolygon|0|KO-BKO compoundcurvem0|0|MultiCurve|0|KO-BKO compoundcurvem0|0|MultiSurface|0|KO-BKO compoundcurvem0|0|PolyhedralSurface|0|KO-BKO compoundcurvem0|0|Triangle|0|KO-BKO compoundcurvem0|0|Tin|0|KO-BKO compoundcurvem0|0|Point|2|KO-BKO compoundcurvem0|0|LineString|2|KO-BKO compoundcurvem0|0|Polygon|2|KO-BKO compoundcurvem0|0|MultiPoint|2|KO-BKO compoundcurvem0|0|MultiLineString|2|KO-BKO compoundcurvem0|0|MultiPolygon|2|KO-BKO compoundcurvem0|0|GeometryCollection|2|KO-BKO compoundcurvem0|0|CircularString|2|KO-BKO compoundcurvem0|0|CompoundCurve|2|KO-BKO compoundcurvem0|0|CurvePolygon|2|KO-BKO compoundcurvem0|0|MultiCurve|2|KO-BKO compoundcurvem0|0|MultiSurface|2|KO-BKO compoundcurvem0|0|PolyhedralSurface|2|KO-BKO compoundcurvem0|0|Triangle|2|KO-BKO compoundcurvem0|0|Point|1|KO-BKO compoundcurvem0|0|LineString|1|KO-BKO compoundcurvem0|0|Polygon|1|KO-BKO compoundcurvem0|0|MultiPoint|1|KO-BKO compoundcurvem0|0|MultiLineString|1|KO-BKO compoundcurvem0|0|MultiPolygon|1|KO-BKO compoundcurvem0|0|GeometryCollection|1|KO-BKO compoundcurvem0|0|CircularString|1|KO-BKO compoundcurvem0|0|CompoundCurve|1|OK-BOK compoundcurvem0|0|CurvePolygon|1|KO-BKO compoundcurvem0|0|MultiCurve|1|KO-BKO compoundcurvem0|0|MultiSurface|1|KO-BKO compoundcurvem0|0|PolyhedralSurface|1|KO-BKO compoundcurvem0|0|Triangle|1|KO-BKO compoundcurvem0|0|Point|3|KO-BKO compoundcurvem0|0|LineString|3|KO-BKO compoundcurvem0|0|Polygon|3|KO-BKO compoundcurvem0|0|MultiPoint|3|KO-BKO compoundcurvem0|0|MultiLineString|3|KO-BKO compoundcurvem0|0|MultiPolygon|3|KO-BKO compoundcurvem0|0|GeometryCollection|3|KO-BKO compoundcurvem0|0|CircularString|3|KO-BKO compoundcurvem0|0|CompoundCurve|3|KO-BKO compoundcurvem0|0|CurvePolygon|3|KO-BKO compoundcurvem0|0|MultiCurve|3|KO-BKO compoundcurvem0|0|MultiSurface|3|KO-BKO compoundcurvem0|0|PolyhedralSurface|3|KO-BKO compoundcurvem0|0|Triangle|3|KO-BKO compoundcurvem0|4326|Point|0|KO-BKO compoundcurvem0|4326|LineString|0|KO-BKO compoundcurvem0|4326|Polygon|0|KO-BKO compoundcurvem0|4326|MultiPoint|0|KO-BKO compoundcurvem0|4326|MultiLineString|0|KO-BKO compoundcurvem0|4326|MultiPolygon|0|KO-BKO compoundcurvem0|4326|GeometryCollection|0|KO-BKO compoundcurvem0|4326|CircularString|0|KO-BKO compoundcurvem0|4326|CompoundCurve|0|KO-BKO compoundcurvem0|4326|CurvePolygon|0|KO-BKO compoundcurvem0|4326|MultiCurve|0|KO-BKO compoundcurvem0|4326|MultiSurface|0|KO-BKO compoundcurvem0|4326|PolyhedralSurface|0|KO-BKO compoundcurvem0|4326|Triangle|0|KO-BKO compoundcurvem0|4326|Tin|0|KO-BKO compoundcurvem0|4326|Point|2|KO-BKO compoundcurvem0|4326|LineString|2|KO-BKO compoundcurvem0|4326|Polygon|2|KO-BKO compoundcurvem0|4326|MultiPoint|2|KO-BKO compoundcurvem0|4326|MultiLineString|2|KO-BKO compoundcurvem0|4326|MultiPolygon|2|KO-BKO compoundcurvem0|4326|GeometryCollection|2|KO-BKO compoundcurvem0|4326|CircularString|2|KO-BKO compoundcurvem0|4326|CompoundCurve|2|KO-BKO compoundcurvem0|4326|CurvePolygon|2|KO-BKO compoundcurvem0|4326|MultiCurve|2|KO-BKO compoundcurvem0|4326|MultiSurface|2|KO-BKO compoundcurvem0|4326|PolyhedralSurface|2|KO-BKO compoundcurvem0|4326|Triangle|2|KO-BKO compoundcurvem0|4326|Point|1|KO-BKO compoundcurvem0|4326|LineString|1|KO-BKO compoundcurvem0|4326|Polygon|1|KO-BKO compoundcurvem0|4326|MultiPoint|1|KO-BKO compoundcurvem0|4326|MultiLineString|1|KO-BKO compoundcurvem0|4326|MultiPolygon|1|KO-BKO compoundcurvem0|4326|GeometryCollection|1|KO-BKO compoundcurvem0|4326|CircularString|1|KO-BKO compoundcurvem0|4326|CompoundCurve|1|OK-BOK compoundcurvem0|4326|CurvePolygon|1|KO-BKO compoundcurvem0|4326|MultiCurve|1|KO-BKO compoundcurvem0|4326|MultiSurface|1|KO-BKO compoundcurvem0|4326|PolyhedralSurface|1|KO-BKO compoundcurvem0|4326|Triangle|1|KO-BKO compoundcurvem0|4326|Point|3|KO-BKO compoundcurvem0|4326|LineString|3|KO-BKO compoundcurvem0|4326|Polygon|3|KO-BKO compoundcurvem0|4326|MultiPoint|3|KO-BKO compoundcurvem0|4326|MultiLineString|3|KO-BKO compoundcurvem0|4326|MultiPolygon|3|KO-BKO compoundcurvem0|4326|GeometryCollection|3|KO-BKO compoundcurvem0|4326|CircularString|3|KO-BKO compoundcurvem0|4326|CompoundCurve|3|KO-BKO compoundcurvem0|4326|CurvePolygon|3|KO-BKO compoundcurvem0|4326|MultiCurve|3|KO-BKO compoundcurvem0|4326|MultiSurface|3|KO-BKO compoundcurvem0|4326|PolyhedralSurface|3|KO-BKO compoundcurvem0|4326|Triangle|3|KO-BKO compoundcurvem0||COUNT|4| compoundcurvem4326|0|Point|0|KO-BKO compoundcurvem4326|0|LineString|0|KO-BKO compoundcurvem4326|0|Polygon|0|KO-BKO compoundcurvem4326|0|MultiPoint|0|KO-BKO compoundcurvem4326|0|MultiLineString|0|KO-BKO compoundcurvem4326|0|MultiPolygon|0|KO-BKO compoundcurvem4326|0|GeometryCollection|0|KO-BKO compoundcurvem4326|0|CircularString|0|KO-BKO compoundcurvem4326|0|CompoundCurve|0|KO-BKO compoundcurvem4326|0|CurvePolygon|0|KO-BKO compoundcurvem4326|0|MultiCurve|0|KO-BKO compoundcurvem4326|0|MultiSurface|0|KO-BKO compoundcurvem4326|0|PolyhedralSurface|0|KO-BKO compoundcurvem4326|0|Triangle|0|KO-BKO compoundcurvem4326|0|Tin|0|KO-BKO compoundcurvem4326|0|Point|2|KO-BKO compoundcurvem4326|0|LineString|2|KO-BKO compoundcurvem4326|0|Polygon|2|KO-BKO compoundcurvem4326|0|MultiPoint|2|KO-BKO compoundcurvem4326|0|MultiLineString|2|KO-BKO compoundcurvem4326|0|MultiPolygon|2|KO-BKO compoundcurvem4326|0|GeometryCollection|2|KO-BKO compoundcurvem4326|0|CircularString|2|KO-BKO compoundcurvem4326|0|CompoundCurve|2|KO-BKO compoundcurvem4326|0|CurvePolygon|2|KO-BKO compoundcurvem4326|0|MultiCurve|2|KO-BKO compoundcurvem4326|0|MultiSurface|2|KO-BKO compoundcurvem4326|0|PolyhedralSurface|2|KO-BKO compoundcurvem4326|0|Triangle|2|KO-BKO compoundcurvem4326|0|Point|1|KO-BKO compoundcurvem4326|0|LineString|1|KO-BKO compoundcurvem4326|0|Polygon|1|KO-BKO compoundcurvem4326|0|MultiPoint|1|KO-BKO compoundcurvem4326|0|MultiLineString|1|KO-BKO compoundcurvem4326|0|MultiPolygon|1|KO-BKO compoundcurvem4326|0|GeometryCollection|1|KO-BKO compoundcurvem4326|0|CircularString|1|KO-BKO compoundcurvem4326|0|CompoundCurve|1|KO-BKO compoundcurvem4326|0|CurvePolygon|1|KO-BKO compoundcurvem4326|0|MultiCurve|1|KO-BKO compoundcurvem4326|0|MultiSurface|1|KO-BKO compoundcurvem4326|0|PolyhedralSurface|1|KO-BKO compoundcurvem4326|0|Triangle|1|KO-BKO compoundcurvem4326|0|Point|3|KO-BKO compoundcurvem4326|0|LineString|3|KO-BKO compoundcurvem4326|0|Polygon|3|KO-BKO compoundcurvem4326|0|MultiPoint|3|KO-BKO compoundcurvem4326|0|MultiLineString|3|KO-BKO compoundcurvem4326|0|MultiPolygon|3|KO-BKO compoundcurvem4326|0|GeometryCollection|3|KO-BKO compoundcurvem4326|0|CircularString|3|KO-BKO compoundcurvem4326|0|CompoundCurve|3|KO-BKO compoundcurvem4326|0|CurvePolygon|3|KO-BKO compoundcurvem4326|0|MultiCurve|3|KO-BKO compoundcurvem4326|0|MultiSurface|3|KO-BKO compoundcurvem4326|0|PolyhedralSurface|3|KO-BKO compoundcurvem4326|0|Triangle|3|KO-BKO compoundcurvem4326|4326|Point|0|KO-BKO compoundcurvem4326|4326|LineString|0|KO-BKO compoundcurvem4326|4326|Polygon|0|KO-BKO compoundcurvem4326|4326|MultiPoint|0|KO-BKO compoundcurvem4326|4326|MultiLineString|0|KO-BKO compoundcurvem4326|4326|MultiPolygon|0|KO-BKO compoundcurvem4326|4326|GeometryCollection|0|KO-BKO compoundcurvem4326|4326|CircularString|0|KO-BKO compoundcurvem4326|4326|CompoundCurve|0|KO-BKO compoundcurvem4326|4326|CurvePolygon|0|KO-BKO compoundcurvem4326|4326|MultiCurve|0|KO-BKO compoundcurvem4326|4326|MultiSurface|0|KO-BKO compoundcurvem4326|4326|PolyhedralSurface|0|KO-BKO compoundcurvem4326|4326|Triangle|0|KO-BKO compoundcurvem4326|4326|Tin|0|KO-BKO compoundcurvem4326|4326|Point|2|KO-BKO compoundcurvem4326|4326|LineString|2|KO-BKO compoundcurvem4326|4326|Polygon|2|KO-BKO compoundcurvem4326|4326|MultiPoint|2|KO-BKO compoundcurvem4326|4326|MultiLineString|2|KO-BKO compoundcurvem4326|4326|MultiPolygon|2|KO-BKO compoundcurvem4326|4326|GeometryCollection|2|KO-BKO compoundcurvem4326|4326|CircularString|2|KO-BKO compoundcurvem4326|4326|CompoundCurve|2|KO-BKO compoundcurvem4326|4326|CurvePolygon|2|KO-BKO compoundcurvem4326|4326|MultiCurve|2|KO-BKO compoundcurvem4326|4326|MultiSurface|2|KO-BKO compoundcurvem4326|4326|PolyhedralSurface|2|KO-BKO compoundcurvem4326|4326|Triangle|2|KO-BKO compoundcurvem4326|4326|Point|1|KO-BKO compoundcurvem4326|4326|LineString|1|KO-BKO compoundcurvem4326|4326|Polygon|1|KO-BKO compoundcurvem4326|4326|MultiPoint|1|KO-BKO compoundcurvem4326|4326|MultiLineString|1|KO-BKO compoundcurvem4326|4326|MultiPolygon|1|KO-BKO compoundcurvem4326|4326|GeometryCollection|1|KO-BKO compoundcurvem4326|4326|CircularString|1|KO-BKO compoundcurvem4326|4326|CompoundCurve|1|OK-BOK compoundcurvem4326|4326|CurvePolygon|1|KO-BKO compoundcurvem4326|4326|MultiCurve|1|KO-BKO compoundcurvem4326|4326|MultiSurface|1|KO-BKO compoundcurvem4326|4326|PolyhedralSurface|1|KO-BKO compoundcurvem4326|4326|Triangle|1|KO-BKO compoundcurvem4326|4326|Point|3|KO-BKO compoundcurvem4326|4326|LineString|3|KO-BKO compoundcurvem4326|4326|Polygon|3|KO-BKO compoundcurvem4326|4326|MultiPoint|3|KO-BKO compoundcurvem4326|4326|MultiLineString|3|KO-BKO compoundcurvem4326|4326|MultiPolygon|3|KO-BKO compoundcurvem4326|4326|GeometryCollection|3|KO-BKO compoundcurvem4326|4326|CircularString|3|KO-BKO compoundcurvem4326|4326|CompoundCurve|3|KO-BKO compoundcurvem4326|4326|CurvePolygon|3|KO-BKO compoundcurvem4326|4326|MultiCurve|3|KO-BKO compoundcurvem4326|4326|MultiSurface|3|KO-BKO compoundcurvem4326|4326|PolyhedralSurface|3|KO-BKO compoundcurvem4326|4326|Triangle|3|KO-BKO compoundcurvem4326||COUNT|2| compoundcurvez|0|Point|0|KO-BKO compoundcurvez|0|LineString|0|KO-BKO compoundcurvez|0|Polygon|0|KO-BKO compoundcurvez|0|MultiPoint|0|KO-BKO compoundcurvez|0|MultiLineString|0|KO-BKO compoundcurvez|0|MultiPolygon|0|KO-BKO compoundcurvez|0|GeometryCollection|0|KO-BKO compoundcurvez|0|CircularString|0|KO-BKO compoundcurvez|0|CompoundCurve|0|KO-BKO compoundcurvez|0|CurvePolygon|0|KO-BKO compoundcurvez|0|MultiCurve|0|KO-BKO compoundcurvez|0|MultiSurface|0|KO-BKO compoundcurvez|0|PolyhedralSurface|0|KO-BKO compoundcurvez|0|Triangle|0|KO-BKO compoundcurvez|0|Tin|0|KO-BKO compoundcurvez|0|Point|2|KO-BKO compoundcurvez|0|LineString|2|KO-BKO compoundcurvez|0|Polygon|2|KO-BKO compoundcurvez|0|MultiPoint|2|KO-BKO compoundcurvez|0|MultiLineString|2|KO-BKO compoundcurvez|0|MultiPolygon|2|KO-BKO compoundcurvez|0|GeometryCollection|2|KO-BKO compoundcurvez|0|CircularString|2|KO-BKO compoundcurvez|0|CompoundCurve|2|OK-BOK compoundcurvez|0|CurvePolygon|2|KO-BKO compoundcurvez|0|MultiCurve|2|KO-BKO compoundcurvez|0|MultiSurface|2|KO-BKO compoundcurvez|0|PolyhedralSurface|2|KO-BKO compoundcurvez|0|Triangle|2|KO-BKO compoundcurvez|0|Point|1|KO-BKO compoundcurvez|0|LineString|1|KO-BKO compoundcurvez|0|Polygon|1|KO-BKO compoundcurvez|0|MultiPoint|1|KO-BKO compoundcurvez|0|MultiLineString|1|KO-BKO compoundcurvez|0|MultiPolygon|1|KO-BKO compoundcurvez|0|GeometryCollection|1|KO-BKO compoundcurvez|0|CircularString|1|KO-BKO compoundcurvez|0|CompoundCurve|1|KO-BKO compoundcurvez|0|CurvePolygon|1|KO-BKO compoundcurvez|0|MultiCurve|1|KO-BKO compoundcurvez|0|MultiSurface|1|KO-BKO compoundcurvez|0|PolyhedralSurface|1|KO-BKO compoundcurvez|0|Triangle|1|KO-BKO compoundcurvez|0|Point|3|KO-BKO compoundcurvez|0|LineString|3|KO-BKO compoundcurvez|0|Polygon|3|KO-BKO compoundcurvez|0|MultiPoint|3|KO-BKO compoundcurvez|0|MultiLineString|3|KO-BKO compoundcurvez|0|MultiPolygon|3|KO-BKO compoundcurvez|0|GeometryCollection|3|KO-BKO compoundcurvez|0|CircularString|3|KO-BKO compoundcurvez|0|CompoundCurve|3|KO-BKO compoundcurvez|0|CurvePolygon|3|KO-BKO compoundcurvez|0|MultiCurve|3|KO-BKO compoundcurvez|0|MultiSurface|3|KO-BKO compoundcurvez|0|PolyhedralSurface|3|KO-BKO compoundcurvez|0|Triangle|3|KO-BKO compoundcurvez|4326|Point|0|KO-BKO compoundcurvez|4326|LineString|0|KO-BKO compoundcurvez|4326|Polygon|0|KO-BKO compoundcurvez|4326|MultiPoint|0|KO-BKO compoundcurvez|4326|MultiLineString|0|KO-BKO compoundcurvez|4326|MultiPolygon|0|KO-BKO compoundcurvez|4326|GeometryCollection|0|KO-BKO compoundcurvez|4326|CircularString|0|KO-BKO compoundcurvez|4326|CompoundCurve|0|KO-BKO compoundcurvez|4326|CurvePolygon|0|KO-BKO compoundcurvez|4326|MultiCurve|0|KO-BKO compoundcurvez|4326|MultiSurface|0|KO-BKO compoundcurvez|4326|PolyhedralSurface|0|KO-BKO compoundcurvez|4326|Triangle|0|KO-BKO compoundcurvez|4326|Tin|0|KO-BKO compoundcurvez|4326|Point|2|KO-BKO compoundcurvez|4326|LineString|2|KO-BKO compoundcurvez|4326|Polygon|2|KO-BKO compoundcurvez|4326|MultiPoint|2|KO-BKO compoundcurvez|4326|MultiLineString|2|KO-BKO compoundcurvez|4326|MultiPolygon|2|KO-BKO compoundcurvez|4326|GeometryCollection|2|KO-BKO compoundcurvez|4326|CircularString|2|KO-BKO compoundcurvez|4326|CompoundCurve|2|OK-BOK compoundcurvez|4326|CurvePolygon|2|KO-BKO compoundcurvez|4326|MultiCurve|2|KO-BKO compoundcurvez|4326|MultiSurface|2|KO-BKO compoundcurvez|4326|PolyhedralSurface|2|KO-BKO compoundcurvez|4326|Triangle|2|KO-BKO compoundcurvez|4326|Point|1|KO-BKO compoundcurvez|4326|LineString|1|KO-BKO compoundcurvez|4326|Polygon|1|KO-BKO compoundcurvez|4326|MultiPoint|1|KO-BKO compoundcurvez|4326|MultiLineString|1|KO-BKO compoundcurvez|4326|MultiPolygon|1|KO-BKO compoundcurvez|4326|GeometryCollection|1|KO-BKO compoundcurvez|4326|CircularString|1|KO-BKO compoundcurvez|4326|CompoundCurve|1|KO-BKO compoundcurvez|4326|CurvePolygon|1|KO-BKO compoundcurvez|4326|MultiCurve|1|KO-BKO compoundcurvez|4326|MultiSurface|1|KO-BKO compoundcurvez|4326|PolyhedralSurface|1|KO-BKO compoundcurvez|4326|Triangle|1|KO-BKO compoundcurvez|4326|Point|3|KO-BKO compoundcurvez|4326|LineString|3|KO-BKO compoundcurvez|4326|Polygon|3|KO-BKO compoundcurvez|4326|MultiPoint|3|KO-BKO compoundcurvez|4326|MultiLineString|3|KO-BKO compoundcurvez|4326|MultiPolygon|3|KO-BKO compoundcurvez|4326|GeometryCollection|3|KO-BKO compoundcurvez|4326|CircularString|3|KO-BKO compoundcurvez|4326|CompoundCurve|3|KO-BKO compoundcurvez|4326|CurvePolygon|3|KO-BKO compoundcurvez|4326|MultiCurve|3|KO-BKO compoundcurvez|4326|MultiSurface|3|KO-BKO compoundcurvez|4326|PolyhedralSurface|3|KO-BKO compoundcurvez|4326|Triangle|3|KO-BKO compoundcurvez||COUNT|4| compoundcurvez0|0|Point|0|KO-BKO compoundcurvez0|0|LineString|0|KO-BKO compoundcurvez0|0|Polygon|0|KO-BKO compoundcurvez0|0|MultiPoint|0|KO-BKO compoundcurvez0|0|MultiLineString|0|KO-BKO compoundcurvez0|0|MultiPolygon|0|KO-BKO compoundcurvez0|0|GeometryCollection|0|KO-BKO compoundcurvez0|0|CircularString|0|KO-BKO compoundcurvez0|0|CompoundCurve|0|KO-BKO compoundcurvez0|0|CurvePolygon|0|KO-BKO compoundcurvez0|0|MultiCurve|0|KO-BKO compoundcurvez0|0|MultiSurface|0|KO-BKO compoundcurvez0|0|PolyhedralSurface|0|KO-BKO compoundcurvez0|0|Triangle|0|KO-BKO compoundcurvez0|0|Tin|0|KO-BKO compoundcurvez0|0|Point|2|KO-BKO compoundcurvez0|0|LineString|2|KO-BKO compoundcurvez0|0|Polygon|2|KO-BKO compoundcurvez0|0|MultiPoint|2|KO-BKO compoundcurvez0|0|MultiLineString|2|KO-BKO compoundcurvez0|0|MultiPolygon|2|KO-BKO compoundcurvez0|0|GeometryCollection|2|KO-BKO compoundcurvez0|0|CircularString|2|KO-BKO compoundcurvez0|0|CompoundCurve|2|OK-BOK compoundcurvez0|0|CurvePolygon|2|KO-BKO compoundcurvez0|0|MultiCurve|2|KO-BKO compoundcurvez0|0|MultiSurface|2|KO-BKO compoundcurvez0|0|PolyhedralSurface|2|KO-BKO compoundcurvez0|0|Triangle|2|KO-BKO compoundcurvez0|0|Point|1|KO-BKO compoundcurvez0|0|LineString|1|KO-BKO compoundcurvez0|0|Polygon|1|KO-BKO compoundcurvez0|0|MultiPoint|1|KO-BKO compoundcurvez0|0|MultiLineString|1|KO-BKO compoundcurvez0|0|MultiPolygon|1|KO-BKO compoundcurvez0|0|GeometryCollection|1|KO-BKO compoundcurvez0|0|CircularString|1|KO-BKO compoundcurvez0|0|CompoundCurve|1|KO-BKO compoundcurvez0|0|CurvePolygon|1|KO-BKO compoundcurvez0|0|MultiCurve|1|KO-BKO compoundcurvez0|0|MultiSurface|1|KO-BKO compoundcurvez0|0|PolyhedralSurface|1|KO-BKO compoundcurvez0|0|Triangle|1|KO-BKO compoundcurvez0|0|Point|3|KO-BKO compoundcurvez0|0|LineString|3|KO-BKO compoundcurvez0|0|Polygon|3|KO-BKO compoundcurvez0|0|MultiPoint|3|KO-BKO compoundcurvez0|0|MultiLineString|3|KO-BKO compoundcurvez0|0|MultiPolygon|3|KO-BKO compoundcurvez0|0|GeometryCollection|3|KO-BKO compoundcurvez0|0|CircularString|3|KO-BKO compoundcurvez0|0|CompoundCurve|3|KO-BKO compoundcurvez0|0|CurvePolygon|3|KO-BKO compoundcurvez0|0|MultiCurve|3|KO-BKO compoundcurvez0|0|MultiSurface|3|KO-BKO compoundcurvez0|0|PolyhedralSurface|3|KO-BKO compoundcurvez0|0|Triangle|3|KO-BKO compoundcurvez0|4326|Point|0|KO-BKO compoundcurvez0|4326|LineString|0|KO-BKO compoundcurvez0|4326|Polygon|0|KO-BKO compoundcurvez0|4326|MultiPoint|0|KO-BKO compoundcurvez0|4326|MultiLineString|0|KO-BKO compoundcurvez0|4326|MultiPolygon|0|KO-BKO compoundcurvez0|4326|GeometryCollection|0|KO-BKO compoundcurvez0|4326|CircularString|0|KO-BKO compoundcurvez0|4326|CompoundCurve|0|KO-BKO compoundcurvez0|4326|CurvePolygon|0|KO-BKO compoundcurvez0|4326|MultiCurve|0|KO-BKO compoundcurvez0|4326|MultiSurface|0|KO-BKO compoundcurvez0|4326|PolyhedralSurface|0|KO-BKO compoundcurvez0|4326|Triangle|0|KO-BKO compoundcurvez0|4326|Tin|0|KO-BKO compoundcurvez0|4326|Point|2|KO-BKO compoundcurvez0|4326|LineString|2|KO-BKO compoundcurvez0|4326|Polygon|2|KO-BKO compoundcurvez0|4326|MultiPoint|2|KO-BKO compoundcurvez0|4326|MultiLineString|2|KO-BKO compoundcurvez0|4326|MultiPolygon|2|KO-BKO compoundcurvez0|4326|GeometryCollection|2|KO-BKO compoundcurvez0|4326|CircularString|2|KO-BKO compoundcurvez0|4326|CompoundCurve|2|OK-BOK compoundcurvez0|4326|CurvePolygon|2|KO-BKO compoundcurvez0|4326|MultiCurve|2|KO-BKO compoundcurvez0|4326|MultiSurface|2|KO-BKO compoundcurvez0|4326|PolyhedralSurface|2|KO-BKO compoundcurvez0|4326|Triangle|2|KO-BKO compoundcurvez0|4326|Point|1|KO-BKO compoundcurvez0|4326|LineString|1|KO-BKO compoundcurvez0|4326|Polygon|1|KO-BKO compoundcurvez0|4326|MultiPoint|1|KO-BKO compoundcurvez0|4326|MultiLineString|1|KO-BKO compoundcurvez0|4326|MultiPolygon|1|KO-BKO compoundcurvez0|4326|GeometryCollection|1|KO-BKO compoundcurvez0|4326|CircularString|1|KO-BKO compoundcurvez0|4326|CompoundCurve|1|KO-BKO compoundcurvez0|4326|CurvePolygon|1|KO-BKO compoundcurvez0|4326|MultiCurve|1|KO-BKO compoundcurvez0|4326|MultiSurface|1|KO-BKO compoundcurvez0|4326|PolyhedralSurface|1|KO-BKO compoundcurvez0|4326|Triangle|1|KO-BKO compoundcurvez0|4326|Point|3|KO-BKO compoundcurvez0|4326|LineString|3|KO-BKO compoundcurvez0|4326|Polygon|3|KO-BKO compoundcurvez0|4326|MultiPoint|3|KO-BKO compoundcurvez0|4326|MultiLineString|3|KO-BKO compoundcurvez0|4326|MultiPolygon|3|KO-BKO compoundcurvez0|4326|GeometryCollection|3|KO-BKO compoundcurvez0|4326|CircularString|3|KO-BKO compoundcurvez0|4326|CompoundCurve|3|KO-BKO compoundcurvez0|4326|CurvePolygon|3|KO-BKO compoundcurvez0|4326|MultiCurve|3|KO-BKO compoundcurvez0|4326|MultiSurface|3|KO-BKO compoundcurvez0|4326|PolyhedralSurface|3|KO-BKO compoundcurvez0|4326|Triangle|3|KO-BKO compoundcurvez0||COUNT|4| compoundcurvez4326|0|Point|0|KO-BKO compoundcurvez4326|0|LineString|0|KO-BKO compoundcurvez4326|0|Polygon|0|KO-BKO compoundcurvez4326|0|MultiPoint|0|KO-BKO compoundcurvez4326|0|MultiLineString|0|KO-BKO compoundcurvez4326|0|MultiPolygon|0|KO-BKO compoundcurvez4326|0|GeometryCollection|0|KO-BKO compoundcurvez4326|0|CircularString|0|KO-BKO compoundcurvez4326|0|CompoundCurve|0|KO-BKO compoundcurvez4326|0|CurvePolygon|0|KO-BKO compoundcurvez4326|0|MultiCurve|0|KO-BKO compoundcurvez4326|0|MultiSurface|0|KO-BKO compoundcurvez4326|0|PolyhedralSurface|0|KO-BKO compoundcurvez4326|0|Triangle|0|KO-BKO compoundcurvez4326|0|Tin|0|KO-BKO compoundcurvez4326|0|Point|2|KO-BKO compoundcurvez4326|0|LineString|2|KO-BKO compoundcurvez4326|0|Polygon|2|KO-BKO compoundcurvez4326|0|MultiPoint|2|KO-BKO compoundcurvez4326|0|MultiLineString|2|KO-BKO compoundcurvez4326|0|MultiPolygon|2|KO-BKO compoundcurvez4326|0|GeometryCollection|2|KO-BKO compoundcurvez4326|0|CircularString|2|KO-BKO compoundcurvez4326|0|CompoundCurve|2|KO-BKO compoundcurvez4326|0|CurvePolygon|2|KO-BKO compoundcurvez4326|0|MultiCurve|2|KO-BKO compoundcurvez4326|0|MultiSurface|2|KO-BKO compoundcurvez4326|0|PolyhedralSurface|2|KO-BKO compoundcurvez4326|0|Triangle|2|KO-BKO compoundcurvez4326|0|Point|1|KO-BKO compoundcurvez4326|0|LineString|1|KO-BKO compoundcurvez4326|0|Polygon|1|KO-BKO compoundcurvez4326|0|MultiPoint|1|KO-BKO compoundcurvez4326|0|MultiLineString|1|KO-BKO compoundcurvez4326|0|MultiPolygon|1|KO-BKO compoundcurvez4326|0|GeometryCollection|1|KO-BKO compoundcurvez4326|0|CircularString|1|KO-BKO compoundcurvez4326|0|CompoundCurve|1|KO-BKO compoundcurvez4326|0|CurvePolygon|1|KO-BKO compoundcurvez4326|0|MultiCurve|1|KO-BKO compoundcurvez4326|0|MultiSurface|1|KO-BKO compoundcurvez4326|0|PolyhedralSurface|1|KO-BKO compoundcurvez4326|0|Triangle|1|KO-BKO compoundcurvez4326|0|Point|3|KO-BKO compoundcurvez4326|0|LineString|3|KO-BKO compoundcurvez4326|0|Polygon|3|KO-BKO compoundcurvez4326|0|MultiPoint|3|KO-BKO compoundcurvez4326|0|MultiLineString|3|KO-BKO compoundcurvez4326|0|MultiPolygon|3|KO-BKO compoundcurvez4326|0|GeometryCollection|3|KO-BKO compoundcurvez4326|0|CircularString|3|KO-BKO compoundcurvez4326|0|CompoundCurve|3|KO-BKO compoundcurvez4326|0|CurvePolygon|3|KO-BKO compoundcurvez4326|0|MultiCurve|3|KO-BKO compoundcurvez4326|0|MultiSurface|3|KO-BKO compoundcurvez4326|0|PolyhedralSurface|3|KO-BKO compoundcurvez4326|0|Triangle|3|KO-BKO compoundcurvez4326|4326|Point|0|KO-BKO compoundcurvez4326|4326|LineString|0|KO-BKO compoundcurvez4326|4326|Polygon|0|KO-BKO compoundcurvez4326|4326|MultiPoint|0|KO-BKO compoundcurvez4326|4326|MultiLineString|0|KO-BKO compoundcurvez4326|4326|MultiPolygon|0|KO-BKO compoundcurvez4326|4326|GeometryCollection|0|KO-BKO compoundcurvez4326|4326|CircularString|0|KO-BKO compoundcurvez4326|4326|CompoundCurve|0|KO-BKO compoundcurvez4326|4326|CurvePolygon|0|KO-BKO compoundcurvez4326|4326|MultiCurve|0|KO-BKO compoundcurvez4326|4326|MultiSurface|0|KO-BKO compoundcurvez4326|4326|PolyhedralSurface|0|KO-BKO compoundcurvez4326|4326|Triangle|0|KO-BKO compoundcurvez4326|4326|Tin|0|KO-BKO compoundcurvez4326|4326|Point|2|KO-BKO compoundcurvez4326|4326|LineString|2|KO-BKO compoundcurvez4326|4326|Polygon|2|KO-BKO compoundcurvez4326|4326|MultiPoint|2|KO-BKO compoundcurvez4326|4326|MultiLineString|2|KO-BKO compoundcurvez4326|4326|MultiPolygon|2|KO-BKO compoundcurvez4326|4326|GeometryCollection|2|KO-BKO compoundcurvez4326|4326|CircularString|2|KO-BKO compoundcurvez4326|4326|CompoundCurve|2|OK-BOK compoundcurvez4326|4326|CurvePolygon|2|KO-BKO compoundcurvez4326|4326|MultiCurve|2|KO-BKO compoundcurvez4326|4326|MultiSurface|2|KO-BKO compoundcurvez4326|4326|PolyhedralSurface|2|KO-BKO compoundcurvez4326|4326|Triangle|2|KO-BKO compoundcurvez4326|4326|Point|1|KO-BKO compoundcurvez4326|4326|LineString|1|KO-BKO compoundcurvez4326|4326|Polygon|1|KO-BKO compoundcurvez4326|4326|MultiPoint|1|KO-BKO compoundcurvez4326|4326|MultiLineString|1|KO-BKO compoundcurvez4326|4326|MultiPolygon|1|KO-BKO compoundcurvez4326|4326|GeometryCollection|1|KO-BKO compoundcurvez4326|4326|CircularString|1|KO-BKO compoundcurvez4326|4326|CompoundCurve|1|KO-BKO compoundcurvez4326|4326|CurvePolygon|1|KO-BKO compoundcurvez4326|4326|MultiCurve|1|KO-BKO compoundcurvez4326|4326|MultiSurface|1|KO-BKO compoundcurvez4326|4326|PolyhedralSurface|1|KO-BKO compoundcurvez4326|4326|Triangle|1|KO-BKO compoundcurvez4326|4326|Point|3|KO-BKO compoundcurvez4326|4326|LineString|3|KO-BKO compoundcurvez4326|4326|Polygon|3|KO-BKO compoundcurvez4326|4326|MultiPoint|3|KO-BKO compoundcurvez4326|4326|MultiLineString|3|KO-BKO compoundcurvez4326|4326|MultiPolygon|3|KO-BKO compoundcurvez4326|4326|GeometryCollection|3|KO-BKO compoundcurvez4326|4326|CircularString|3|KO-BKO compoundcurvez4326|4326|CompoundCurve|3|KO-BKO compoundcurvez4326|4326|CurvePolygon|3|KO-BKO compoundcurvez4326|4326|MultiCurve|3|KO-BKO compoundcurvez4326|4326|MultiSurface|3|KO-BKO compoundcurvez4326|4326|PolyhedralSurface|3|KO-BKO compoundcurvez4326|4326|Triangle|3|KO-BKO compoundcurvez4326||COUNT|2| compoundcurvezm|0|Point|0|KO-BKO compoundcurvezm|0|LineString|0|KO-BKO compoundcurvezm|0|Polygon|0|KO-BKO compoundcurvezm|0|MultiPoint|0|KO-BKO compoundcurvezm|0|MultiLineString|0|KO-BKO compoundcurvezm|0|MultiPolygon|0|KO-BKO compoundcurvezm|0|GeometryCollection|0|KO-BKO compoundcurvezm|0|CircularString|0|KO-BKO compoundcurvezm|0|CompoundCurve|0|KO-BKO compoundcurvezm|0|CurvePolygon|0|KO-BKO compoundcurvezm|0|MultiCurve|0|KO-BKO compoundcurvezm|0|MultiSurface|0|KO-BKO compoundcurvezm|0|PolyhedralSurface|0|KO-BKO compoundcurvezm|0|Triangle|0|KO-BKO compoundcurvezm|0|Tin|0|KO-BKO compoundcurvezm|0|Point|2|KO-BKO compoundcurvezm|0|LineString|2|KO-BKO compoundcurvezm|0|Polygon|2|KO-BKO compoundcurvezm|0|MultiPoint|2|KO-BKO compoundcurvezm|0|MultiLineString|2|KO-BKO compoundcurvezm|0|MultiPolygon|2|KO-BKO compoundcurvezm|0|GeometryCollection|2|KO-BKO compoundcurvezm|0|CircularString|2|KO-BKO compoundcurvezm|0|CompoundCurve|2|KO-BKO compoundcurvezm|0|CurvePolygon|2|KO-BKO compoundcurvezm|0|MultiCurve|2|KO-BKO compoundcurvezm|0|MultiSurface|2|KO-BKO compoundcurvezm|0|PolyhedralSurface|2|KO-BKO compoundcurvezm|0|Triangle|2|KO-BKO compoundcurvezm|0|Point|1|KO-BKO compoundcurvezm|0|LineString|1|KO-BKO compoundcurvezm|0|Polygon|1|KO-BKO compoundcurvezm|0|MultiPoint|1|KO-BKO compoundcurvezm|0|MultiLineString|1|KO-BKO compoundcurvezm|0|MultiPolygon|1|KO-BKO compoundcurvezm|0|GeometryCollection|1|KO-BKO compoundcurvezm|0|CircularString|1|KO-BKO compoundcurvezm|0|CompoundCurve|1|KO-BKO compoundcurvezm|0|CurvePolygon|1|KO-BKO compoundcurvezm|0|MultiCurve|1|KO-BKO compoundcurvezm|0|MultiSurface|1|KO-BKO compoundcurvezm|0|PolyhedralSurface|1|KO-BKO compoundcurvezm|0|Triangle|1|KO-BKO compoundcurvezm|0|Point|3|KO-BKO compoundcurvezm|0|LineString|3|KO-BKO compoundcurvezm|0|Polygon|3|KO-BKO compoundcurvezm|0|MultiPoint|3|KO-BKO compoundcurvezm|0|MultiLineString|3|KO-BKO compoundcurvezm|0|MultiPolygon|3|KO-BKO compoundcurvezm|0|GeometryCollection|3|KO-BKO compoundcurvezm|0|CircularString|3|KO-BKO compoundcurvezm|0|CompoundCurve|3|OK-BOK compoundcurvezm|0|CurvePolygon|3|KO-BKO compoundcurvezm|0|MultiCurve|3|KO-BKO compoundcurvezm|0|MultiSurface|3|KO-BKO compoundcurvezm|0|PolyhedralSurface|3|KO-BKO compoundcurvezm|0|Triangle|3|KO-BKO compoundcurvezm|4326|Point|0|KO-BKO compoundcurvezm|4326|LineString|0|KO-BKO compoundcurvezm|4326|Polygon|0|KO-BKO compoundcurvezm|4326|MultiPoint|0|KO-BKO compoundcurvezm|4326|MultiLineString|0|KO-BKO compoundcurvezm|4326|MultiPolygon|0|KO-BKO compoundcurvezm|4326|GeometryCollection|0|KO-BKO compoundcurvezm|4326|CircularString|0|KO-BKO compoundcurvezm|4326|CompoundCurve|0|KO-BKO compoundcurvezm|4326|CurvePolygon|0|KO-BKO compoundcurvezm|4326|MultiCurve|0|KO-BKO compoundcurvezm|4326|MultiSurface|0|KO-BKO compoundcurvezm|4326|PolyhedralSurface|0|KO-BKO compoundcurvezm|4326|Triangle|0|KO-BKO compoundcurvezm|4326|Tin|0|KO-BKO compoundcurvezm|4326|Point|2|KO-BKO compoundcurvezm|4326|LineString|2|KO-BKO compoundcurvezm|4326|Polygon|2|KO-BKO compoundcurvezm|4326|MultiPoint|2|KO-BKO compoundcurvezm|4326|MultiLineString|2|KO-BKO compoundcurvezm|4326|MultiPolygon|2|KO-BKO compoundcurvezm|4326|GeometryCollection|2|KO-BKO compoundcurvezm|4326|CircularString|2|KO-BKO compoundcurvezm|4326|CompoundCurve|2|KO-BKO compoundcurvezm|4326|CurvePolygon|2|KO-BKO compoundcurvezm|4326|MultiCurve|2|KO-BKO compoundcurvezm|4326|MultiSurface|2|KO-BKO compoundcurvezm|4326|PolyhedralSurface|2|KO-BKO compoundcurvezm|4326|Triangle|2|KO-BKO compoundcurvezm|4326|Point|1|KO-BKO compoundcurvezm|4326|LineString|1|KO-BKO compoundcurvezm|4326|Polygon|1|KO-BKO compoundcurvezm|4326|MultiPoint|1|KO-BKO compoundcurvezm|4326|MultiLineString|1|KO-BKO compoundcurvezm|4326|MultiPolygon|1|KO-BKO compoundcurvezm|4326|GeometryCollection|1|KO-BKO compoundcurvezm|4326|CircularString|1|KO-BKO compoundcurvezm|4326|CompoundCurve|1|KO-BKO compoundcurvezm|4326|CurvePolygon|1|KO-BKO compoundcurvezm|4326|MultiCurve|1|KO-BKO compoundcurvezm|4326|MultiSurface|1|KO-BKO compoundcurvezm|4326|PolyhedralSurface|1|KO-BKO compoundcurvezm|4326|Triangle|1|KO-BKO compoundcurvezm|4326|Point|3|KO-BKO compoundcurvezm|4326|LineString|3|KO-BKO compoundcurvezm|4326|Polygon|3|KO-BKO compoundcurvezm|4326|MultiPoint|3|KO-BKO compoundcurvezm|4326|MultiLineString|3|KO-BKO compoundcurvezm|4326|MultiPolygon|3|KO-BKO compoundcurvezm|4326|GeometryCollection|3|KO-BKO compoundcurvezm|4326|CircularString|3|KO-BKO compoundcurvezm|4326|CompoundCurve|3|OK-BOK compoundcurvezm|4326|CurvePolygon|3|KO-BKO compoundcurvezm|4326|MultiCurve|3|KO-BKO compoundcurvezm|4326|MultiSurface|3|KO-BKO compoundcurvezm|4326|PolyhedralSurface|3|KO-BKO compoundcurvezm|4326|Triangle|3|KO-BKO compoundcurvezm||COUNT|4| compoundcurvezm0|0|Point|0|KO-BKO compoundcurvezm0|0|LineString|0|KO-BKO compoundcurvezm0|0|Polygon|0|KO-BKO compoundcurvezm0|0|MultiPoint|0|KO-BKO compoundcurvezm0|0|MultiLineString|0|KO-BKO compoundcurvezm0|0|MultiPolygon|0|KO-BKO compoundcurvezm0|0|GeometryCollection|0|KO-BKO compoundcurvezm0|0|CircularString|0|KO-BKO compoundcurvezm0|0|CompoundCurve|0|KO-BKO compoundcurvezm0|0|CurvePolygon|0|KO-BKO compoundcurvezm0|0|MultiCurve|0|KO-BKO compoundcurvezm0|0|MultiSurface|0|KO-BKO compoundcurvezm0|0|PolyhedralSurface|0|KO-BKO compoundcurvezm0|0|Triangle|0|KO-BKO compoundcurvezm0|0|Tin|0|KO-BKO compoundcurvezm0|0|Point|2|KO-BKO compoundcurvezm0|0|LineString|2|KO-BKO compoundcurvezm0|0|Polygon|2|KO-BKO compoundcurvezm0|0|MultiPoint|2|KO-BKO compoundcurvezm0|0|MultiLineString|2|KO-BKO compoundcurvezm0|0|MultiPolygon|2|KO-BKO compoundcurvezm0|0|GeometryCollection|2|KO-BKO compoundcurvezm0|0|CircularString|2|KO-BKO compoundcurvezm0|0|CompoundCurve|2|KO-BKO compoundcurvezm0|0|CurvePolygon|2|KO-BKO compoundcurvezm0|0|MultiCurve|2|KO-BKO compoundcurvezm0|0|MultiSurface|2|KO-BKO compoundcurvezm0|0|PolyhedralSurface|2|KO-BKO compoundcurvezm0|0|Triangle|2|KO-BKO compoundcurvezm0|0|Point|1|KO-BKO compoundcurvezm0|0|LineString|1|KO-BKO compoundcurvezm0|0|Polygon|1|KO-BKO compoundcurvezm0|0|MultiPoint|1|KO-BKO compoundcurvezm0|0|MultiLineString|1|KO-BKO compoundcurvezm0|0|MultiPolygon|1|KO-BKO compoundcurvezm0|0|GeometryCollection|1|KO-BKO compoundcurvezm0|0|CircularString|1|KO-BKO compoundcurvezm0|0|CompoundCurve|1|KO-BKO compoundcurvezm0|0|CurvePolygon|1|KO-BKO compoundcurvezm0|0|MultiCurve|1|KO-BKO compoundcurvezm0|0|MultiSurface|1|KO-BKO compoundcurvezm0|0|PolyhedralSurface|1|KO-BKO compoundcurvezm0|0|Triangle|1|KO-BKO compoundcurvezm0|0|Point|3|KO-BKO compoundcurvezm0|0|LineString|3|KO-BKO compoundcurvezm0|0|Polygon|3|KO-BKO compoundcurvezm0|0|MultiPoint|3|KO-BKO compoundcurvezm0|0|MultiLineString|3|KO-BKO compoundcurvezm0|0|MultiPolygon|3|KO-BKO compoundcurvezm0|0|GeometryCollection|3|KO-BKO compoundcurvezm0|0|CircularString|3|KO-BKO compoundcurvezm0|0|CompoundCurve|3|OK-BOK compoundcurvezm0|0|CurvePolygon|3|KO-BKO compoundcurvezm0|0|MultiCurve|3|KO-BKO compoundcurvezm0|0|MultiSurface|3|KO-BKO compoundcurvezm0|0|PolyhedralSurface|3|KO-BKO compoundcurvezm0|0|Triangle|3|KO-BKO compoundcurvezm0|4326|Point|0|KO-BKO compoundcurvezm0|4326|LineString|0|KO-BKO compoundcurvezm0|4326|Polygon|0|KO-BKO compoundcurvezm0|4326|MultiPoint|0|KO-BKO compoundcurvezm0|4326|MultiLineString|0|KO-BKO compoundcurvezm0|4326|MultiPolygon|0|KO-BKO compoundcurvezm0|4326|GeometryCollection|0|KO-BKO compoundcurvezm0|4326|CircularString|0|KO-BKO compoundcurvezm0|4326|CompoundCurve|0|KO-BKO compoundcurvezm0|4326|CurvePolygon|0|KO-BKO compoundcurvezm0|4326|MultiCurve|0|KO-BKO compoundcurvezm0|4326|MultiSurface|0|KO-BKO compoundcurvezm0|4326|PolyhedralSurface|0|KO-BKO compoundcurvezm0|4326|Triangle|0|KO-BKO compoundcurvezm0|4326|Tin|0|KO-BKO compoundcurvezm0|4326|Point|2|KO-BKO compoundcurvezm0|4326|LineString|2|KO-BKO compoundcurvezm0|4326|Polygon|2|KO-BKO compoundcurvezm0|4326|MultiPoint|2|KO-BKO compoundcurvezm0|4326|MultiLineString|2|KO-BKO compoundcurvezm0|4326|MultiPolygon|2|KO-BKO compoundcurvezm0|4326|GeometryCollection|2|KO-BKO compoundcurvezm0|4326|CircularString|2|KO-BKO compoundcurvezm0|4326|CompoundCurve|2|KO-BKO compoundcurvezm0|4326|CurvePolygon|2|KO-BKO compoundcurvezm0|4326|MultiCurve|2|KO-BKO compoundcurvezm0|4326|MultiSurface|2|KO-BKO compoundcurvezm0|4326|PolyhedralSurface|2|KO-BKO compoundcurvezm0|4326|Triangle|2|KO-BKO compoundcurvezm0|4326|Point|1|KO-BKO compoundcurvezm0|4326|LineString|1|KO-BKO compoundcurvezm0|4326|Polygon|1|KO-BKO compoundcurvezm0|4326|MultiPoint|1|KO-BKO compoundcurvezm0|4326|MultiLineString|1|KO-BKO compoundcurvezm0|4326|MultiPolygon|1|KO-BKO compoundcurvezm0|4326|GeometryCollection|1|KO-BKO compoundcurvezm0|4326|CircularString|1|KO-BKO compoundcurvezm0|4326|CompoundCurve|1|KO-BKO compoundcurvezm0|4326|CurvePolygon|1|KO-BKO compoundcurvezm0|4326|MultiCurve|1|KO-BKO compoundcurvezm0|4326|MultiSurface|1|KO-BKO compoundcurvezm0|4326|PolyhedralSurface|1|KO-BKO compoundcurvezm0|4326|Triangle|1|KO-BKO compoundcurvezm0|4326|Point|3|KO-BKO compoundcurvezm0|4326|LineString|3|KO-BKO compoundcurvezm0|4326|Polygon|3|KO-BKO compoundcurvezm0|4326|MultiPoint|3|KO-BKO compoundcurvezm0|4326|MultiLineString|3|KO-BKO compoundcurvezm0|4326|MultiPolygon|3|KO-BKO compoundcurvezm0|4326|GeometryCollection|3|KO-BKO compoundcurvezm0|4326|CircularString|3|KO-BKO compoundcurvezm0|4326|CompoundCurve|3|OK-BOK compoundcurvezm0|4326|CurvePolygon|3|KO-BKO compoundcurvezm0|4326|MultiCurve|3|KO-BKO compoundcurvezm0|4326|MultiSurface|3|KO-BKO compoundcurvezm0|4326|PolyhedralSurface|3|KO-BKO compoundcurvezm0|4326|Triangle|3|KO-BKO compoundcurvezm0||COUNT|4| compoundcurvezm4326|0|Point|0|KO-BKO compoundcurvezm4326|0|LineString|0|KO-BKO compoundcurvezm4326|0|Polygon|0|KO-BKO compoundcurvezm4326|0|MultiPoint|0|KO-BKO compoundcurvezm4326|0|MultiLineString|0|KO-BKO compoundcurvezm4326|0|MultiPolygon|0|KO-BKO compoundcurvezm4326|0|GeometryCollection|0|KO-BKO compoundcurvezm4326|0|CircularString|0|KO-BKO compoundcurvezm4326|0|CompoundCurve|0|KO-BKO compoundcurvezm4326|0|CurvePolygon|0|KO-BKO compoundcurvezm4326|0|MultiCurve|0|KO-BKO compoundcurvezm4326|0|MultiSurface|0|KO-BKO compoundcurvezm4326|0|PolyhedralSurface|0|KO-BKO compoundcurvezm4326|0|Triangle|0|KO-BKO compoundcurvezm4326|0|Tin|0|KO-BKO compoundcurvezm4326|0|Point|2|KO-BKO compoundcurvezm4326|0|LineString|2|KO-BKO compoundcurvezm4326|0|Polygon|2|KO-BKO compoundcurvezm4326|0|MultiPoint|2|KO-BKO compoundcurvezm4326|0|MultiLineString|2|KO-BKO compoundcurvezm4326|0|MultiPolygon|2|KO-BKO compoundcurvezm4326|0|GeometryCollection|2|KO-BKO compoundcurvezm4326|0|CircularString|2|KO-BKO compoundcurvezm4326|0|CompoundCurve|2|KO-BKO compoundcurvezm4326|0|CurvePolygon|2|KO-BKO compoundcurvezm4326|0|MultiCurve|2|KO-BKO compoundcurvezm4326|0|MultiSurface|2|KO-BKO compoundcurvezm4326|0|PolyhedralSurface|2|KO-BKO compoundcurvezm4326|0|Triangle|2|KO-BKO compoundcurvezm4326|0|Point|1|KO-BKO compoundcurvezm4326|0|LineString|1|KO-BKO compoundcurvezm4326|0|Polygon|1|KO-BKO compoundcurvezm4326|0|MultiPoint|1|KO-BKO compoundcurvezm4326|0|MultiLineString|1|KO-BKO compoundcurvezm4326|0|MultiPolygon|1|KO-BKO compoundcurvezm4326|0|GeometryCollection|1|KO-BKO compoundcurvezm4326|0|CircularString|1|KO-BKO compoundcurvezm4326|0|CompoundCurve|1|KO-BKO compoundcurvezm4326|0|CurvePolygon|1|KO-BKO compoundcurvezm4326|0|MultiCurve|1|KO-BKO compoundcurvezm4326|0|MultiSurface|1|KO-BKO compoundcurvezm4326|0|PolyhedralSurface|1|KO-BKO compoundcurvezm4326|0|Triangle|1|KO-BKO compoundcurvezm4326|0|Point|3|KO-BKO compoundcurvezm4326|0|LineString|3|KO-BKO compoundcurvezm4326|0|Polygon|3|KO-BKO compoundcurvezm4326|0|MultiPoint|3|KO-BKO compoundcurvezm4326|0|MultiLineString|3|KO-BKO compoundcurvezm4326|0|MultiPolygon|3|KO-BKO compoundcurvezm4326|0|GeometryCollection|3|KO-BKO compoundcurvezm4326|0|CircularString|3|KO-BKO compoundcurvezm4326|0|CompoundCurve|3|KO-BKO compoundcurvezm4326|0|CurvePolygon|3|KO-BKO compoundcurvezm4326|0|MultiCurve|3|KO-BKO compoundcurvezm4326|0|MultiSurface|3|KO-BKO compoundcurvezm4326|0|PolyhedralSurface|3|KO-BKO compoundcurvezm4326|0|Triangle|3|KO-BKO compoundcurvezm4326|4326|Point|0|KO-BKO compoundcurvezm4326|4326|LineString|0|KO-BKO compoundcurvezm4326|4326|Polygon|0|KO-BKO compoundcurvezm4326|4326|MultiPoint|0|KO-BKO compoundcurvezm4326|4326|MultiLineString|0|KO-BKO compoundcurvezm4326|4326|MultiPolygon|0|KO-BKO compoundcurvezm4326|4326|GeometryCollection|0|KO-BKO compoundcurvezm4326|4326|CircularString|0|KO-BKO compoundcurvezm4326|4326|CompoundCurve|0|KO-BKO compoundcurvezm4326|4326|CurvePolygon|0|KO-BKO compoundcurvezm4326|4326|MultiCurve|0|KO-BKO compoundcurvezm4326|4326|MultiSurface|0|KO-BKO compoundcurvezm4326|4326|PolyhedralSurface|0|KO-BKO compoundcurvezm4326|4326|Triangle|0|KO-BKO compoundcurvezm4326|4326|Tin|0|KO-BKO compoundcurvezm4326|4326|Point|2|KO-BKO compoundcurvezm4326|4326|LineString|2|KO-BKO compoundcurvezm4326|4326|Polygon|2|KO-BKO compoundcurvezm4326|4326|MultiPoint|2|KO-BKO compoundcurvezm4326|4326|MultiLineString|2|KO-BKO compoundcurvezm4326|4326|MultiPolygon|2|KO-BKO compoundcurvezm4326|4326|GeometryCollection|2|KO-BKO compoundcurvezm4326|4326|CircularString|2|KO-BKO compoundcurvezm4326|4326|CompoundCurve|2|KO-BKO compoundcurvezm4326|4326|CurvePolygon|2|KO-BKO compoundcurvezm4326|4326|MultiCurve|2|KO-BKO compoundcurvezm4326|4326|MultiSurface|2|KO-BKO compoundcurvezm4326|4326|PolyhedralSurface|2|KO-BKO compoundcurvezm4326|4326|Triangle|2|KO-BKO compoundcurvezm4326|4326|Point|1|KO-BKO compoundcurvezm4326|4326|LineString|1|KO-BKO compoundcurvezm4326|4326|Polygon|1|KO-BKO compoundcurvezm4326|4326|MultiPoint|1|KO-BKO compoundcurvezm4326|4326|MultiLineString|1|KO-BKO compoundcurvezm4326|4326|MultiPolygon|1|KO-BKO compoundcurvezm4326|4326|GeometryCollection|1|KO-BKO compoundcurvezm4326|4326|CircularString|1|KO-BKO compoundcurvezm4326|4326|CompoundCurve|1|KO-BKO compoundcurvezm4326|4326|CurvePolygon|1|KO-BKO compoundcurvezm4326|4326|MultiCurve|1|KO-BKO compoundcurvezm4326|4326|MultiSurface|1|KO-BKO compoundcurvezm4326|4326|PolyhedralSurface|1|KO-BKO compoundcurvezm4326|4326|Triangle|1|KO-BKO compoundcurvezm4326|4326|Point|3|KO-BKO compoundcurvezm4326|4326|LineString|3|KO-BKO compoundcurvezm4326|4326|Polygon|3|KO-BKO compoundcurvezm4326|4326|MultiPoint|3|KO-BKO compoundcurvezm4326|4326|MultiLineString|3|KO-BKO compoundcurvezm4326|4326|MultiPolygon|3|KO-BKO compoundcurvezm4326|4326|GeometryCollection|3|KO-BKO compoundcurvezm4326|4326|CircularString|3|KO-BKO compoundcurvezm4326|4326|CompoundCurve|3|OK-BOK compoundcurvezm4326|4326|CurvePolygon|3|KO-BKO compoundcurvezm4326|4326|MultiCurve|3|KO-BKO compoundcurvezm4326|4326|MultiSurface|3|KO-BKO compoundcurvezm4326|4326|PolyhedralSurface|3|KO-BKO compoundcurvezm4326|4326|Triangle|3|KO-BKO compoundcurvezm4326||COUNT|2| curvepolygon|0|Point|0|KO-BKO curvepolygon|0|LineString|0|KO-BKO curvepolygon|0|Polygon|0|KO-BKO curvepolygon|0|MultiPoint|0|KO-BKO curvepolygon|0|MultiLineString|0|KO-BKO curvepolygon|0|MultiPolygon|0|KO-BKO curvepolygon|0|GeometryCollection|0|KO-BKO curvepolygon|0|CircularString|0|KO-BKO curvepolygon|0|CompoundCurve|0|KO-BKO curvepolygon|0|CurvePolygon|0|OK-BOK curvepolygon|0|MultiCurve|0|KO-BKO curvepolygon|0|MultiSurface|0|KO-BKO curvepolygon|0|PolyhedralSurface|0|KO-BKO curvepolygon|0|Triangle|0|KO-BKO curvepolygon|0|Tin|0|KO-BKO curvepolygon|0|Point|2|KO-BKO curvepolygon|0|LineString|2|KO-BKO curvepolygon|0|Polygon|2|KO-BKO curvepolygon|0|MultiPoint|2|KO-BKO curvepolygon|0|MultiLineString|2|KO-BKO curvepolygon|0|MultiPolygon|2|KO-BKO curvepolygon|0|GeometryCollection|2|KO-BKO curvepolygon|0|CircularString|2|KO-BKO curvepolygon|0|CompoundCurve|2|KO-BKO curvepolygon|0|CurvePolygon|2|KO-BKO curvepolygon|0|MultiCurve|2|KO-BKO curvepolygon|0|MultiSurface|2|KO-BKO curvepolygon|0|PolyhedralSurface|2|KO-BKO curvepolygon|0|Triangle|2|KO-BKO curvepolygon|0|Point|1|KO-BKO curvepolygon|0|LineString|1|KO-BKO curvepolygon|0|Polygon|1|KO-BKO curvepolygon|0|MultiPoint|1|KO-BKO curvepolygon|0|MultiLineString|1|KO-BKO curvepolygon|0|MultiPolygon|1|KO-BKO curvepolygon|0|GeometryCollection|1|KO-BKO curvepolygon|0|CircularString|1|KO-BKO curvepolygon|0|CompoundCurve|1|KO-BKO curvepolygon|0|CurvePolygon|1|KO-BKO curvepolygon|0|MultiCurve|1|KO-BKO curvepolygon|0|MultiSurface|1|KO-BKO curvepolygon|0|PolyhedralSurface|1|KO-BKO curvepolygon|0|Triangle|1|KO-BKO curvepolygon|0|Point|3|KO-BKO curvepolygon|0|LineString|3|KO-BKO curvepolygon|0|Polygon|3|KO-BKO curvepolygon|0|MultiPoint|3|KO-BKO curvepolygon|0|MultiLineString|3|KO-BKO curvepolygon|0|MultiPolygon|3|KO-BKO curvepolygon|0|GeometryCollection|3|KO-BKO curvepolygon|0|CircularString|3|KO-BKO curvepolygon|0|CompoundCurve|3|KO-BKO curvepolygon|0|CurvePolygon|3|KO-BKO curvepolygon|0|MultiCurve|3|KO-BKO curvepolygon|0|MultiSurface|3|KO-BKO curvepolygon|0|PolyhedralSurface|3|KO-BKO curvepolygon|0|Triangle|3|KO-BKO curvepolygon|4326|Point|0|KO-BKO curvepolygon|4326|LineString|0|KO-BKO curvepolygon|4326|Polygon|0|KO-BKO curvepolygon|4326|MultiPoint|0|KO-BKO curvepolygon|4326|MultiLineString|0|KO-BKO curvepolygon|4326|MultiPolygon|0|KO-BKO curvepolygon|4326|GeometryCollection|0|KO-BKO curvepolygon|4326|CircularString|0|KO-BKO curvepolygon|4326|CompoundCurve|0|KO-BKO curvepolygon|4326|CurvePolygon|0|OK-BOK curvepolygon|4326|MultiCurve|0|KO-BKO curvepolygon|4326|MultiSurface|0|KO-BKO curvepolygon|4326|PolyhedralSurface|0|KO-BKO curvepolygon|4326|Triangle|0|KO-BKO curvepolygon|4326|Tin|0|KO-BKO curvepolygon|4326|Point|2|KO-BKO curvepolygon|4326|LineString|2|KO-BKO curvepolygon|4326|Polygon|2|KO-BKO curvepolygon|4326|MultiPoint|2|KO-BKO curvepolygon|4326|MultiLineString|2|KO-BKO curvepolygon|4326|MultiPolygon|2|KO-BKO curvepolygon|4326|GeometryCollection|2|KO-BKO curvepolygon|4326|CircularString|2|KO-BKO curvepolygon|4326|CompoundCurve|2|KO-BKO curvepolygon|4326|CurvePolygon|2|KO-BKO curvepolygon|4326|MultiCurve|2|KO-BKO curvepolygon|4326|MultiSurface|2|KO-BKO curvepolygon|4326|PolyhedralSurface|2|KO-BKO curvepolygon|4326|Triangle|2|KO-BKO curvepolygon|4326|Point|1|KO-BKO curvepolygon|4326|LineString|1|KO-BKO curvepolygon|4326|Polygon|1|KO-BKO curvepolygon|4326|MultiPoint|1|KO-BKO curvepolygon|4326|MultiLineString|1|KO-BKO curvepolygon|4326|MultiPolygon|1|KO-BKO curvepolygon|4326|GeometryCollection|1|KO-BKO curvepolygon|4326|CircularString|1|KO-BKO curvepolygon|4326|CompoundCurve|1|KO-BKO curvepolygon|4326|CurvePolygon|1|KO-BKO curvepolygon|4326|MultiCurve|1|KO-BKO curvepolygon|4326|MultiSurface|1|KO-BKO curvepolygon|4326|PolyhedralSurface|1|KO-BKO curvepolygon|4326|Triangle|1|KO-BKO curvepolygon|4326|Point|3|KO-BKO curvepolygon|4326|LineString|3|KO-BKO curvepolygon|4326|Polygon|3|KO-BKO curvepolygon|4326|MultiPoint|3|KO-BKO curvepolygon|4326|MultiLineString|3|KO-BKO curvepolygon|4326|MultiPolygon|3|KO-BKO curvepolygon|4326|GeometryCollection|3|KO-BKO curvepolygon|4326|CircularString|3|KO-BKO curvepolygon|4326|CompoundCurve|3|KO-BKO curvepolygon|4326|CurvePolygon|3|KO-BKO curvepolygon|4326|MultiCurve|3|KO-BKO curvepolygon|4326|MultiSurface|3|KO-BKO curvepolygon|4326|PolyhedralSurface|3|KO-BKO curvepolygon|4326|Triangle|3|KO-BKO curvepolygon||COUNT|4| curvepolygon0|0|Point|0|KO-BKO curvepolygon0|0|LineString|0|KO-BKO curvepolygon0|0|Polygon|0|KO-BKO curvepolygon0|0|MultiPoint|0|KO-BKO curvepolygon0|0|MultiLineString|0|KO-BKO curvepolygon0|0|MultiPolygon|0|KO-BKO curvepolygon0|0|GeometryCollection|0|KO-BKO curvepolygon0|0|CircularString|0|KO-BKO curvepolygon0|0|CompoundCurve|0|KO-BKO curvepolygon0|0|CurvePolygon|0|OK-BOK curvepolygon0|0|MultiCurve|0|KO-BKO curvepolygon0|0|MultiSurface|0|KO-BKO curvepolygon0|0|PolyhedralSurface|0|KO-BKO curvepolygon0|0|Triangle|0|KO-BKO curvepolygon0|0|Tin|0|KO-BKO curvepolygon0|0|Point|2|KO-BKO curvepolygon0|0|LineString|2|KO-BKO curvepolygon0|0|Polygon|2|KO-BKO curvepolygon0|0|MultiPoint|2|KO-BKO curvepolygon0|0|MultiLineString|2|KO-BKO curvepolygon0|0|MultiPolygon|2|KO-BKO curvepolygon0|0|GeometryCollection|2|KO-BKO curvepolygon0|0|CircularString|2|KO-BKO curvepolygon0|0|CompoundCurve|2|KO-BKO curvepolygon0|0|CurvePolygon|2|KO-BKO curvepolygon0|0|MultiCurve|2|KO-BKO curvepolygon0|0|MultiSurface|2|KO-BKO curvepolygon0|0|PolyhedralSurface|2|KO-BKO curvepolygon0|0|Triangle|2|KO-BKO curvepolygon0|0|Point|1|KO-BKO curvepolygon0|0|LineString|1|KO-BKO curvepolygon0|0|Polygon|1|KO-BKO curvepolygon0|0|MultiPoint|1|KO-BKO curvepolygon0|0|MultiLineString|1|KO-BKO curvepolygon0|0|MultiPolygon|1|KO-BKO curvepolygon0|0|GeometryCollection|1|KO-BKO curvepolygon0|0|CircularString|1|KO-BKO curvepolygon0|0|CompoundCurve|1|KO-BKO curvepolygon0|0|CurvePolygon|1|KO-BKO curvepolygon0|0|MultiCurve|1|KO-BKO curvepolygon0|0|MultiSurface|1|KO-BKO curvepolygon0|0|PolyhedralSurface|1|KO-BKO curvepolygon0|0|Triangle|1|KO-BKO curvepolygon0|0|Point|3|KO-BKO curvepolygon0|0|LineString|3|KO-BKO curvepolygon0|0|Polygon|3|KO-BKO curvepolygon0|0|MultiPoint|3|KO-BKO curvepolygon0|0|MultiLineString|3|KO-BKO curvepolygon0|0|MultiPolygon|3|KO-BKO curvepolygon0|0|GeometryCollection|3|KO-BKO curvepolygon0|0|CircularString|3|KO-BKO curvepolygon0|0|CompoundCurve|3|KO-BKO curvepolygon0|0|CurvePolygon|3|KO-BKO curvepolygon0|0|MultiCurve|3|KO-BKO curvepolygon0|0|MultiSurface|3|KO-BKO curvepolygon0|0|PolyhedralSurface|3|KO-BKO curvepolygon0|0|Triangle|3|KO-BKO curvepolygon0|4326|Point|0|KO-BKO curvepolygon0|4326|LineString|0|KO-BKO curvepolygon0|4326|Polygon|0|KO-BKO curvepolygon0|4326|MultiPoint|0|KO-BKO curvepolygon0|4326|MultiLineString|0|KO-BKO curvepolygon0|4326|MultiPolygon|0|KO-BKO curvepolygon0|4326|GeometryCollection|0|KO-BKO curvepolygon0|4326|CircularString|0|KO-BKO curvepolygon0|4326|CompoundCurve|0|KO-BKO curvepolygon0|4326|CurvePolygon|0|OK-BOK curvepolygon0|4326|MultiCurve|0|KO-BKO curvepolygon0|4326|MultiSurface|0|KO-BKO curvepolygon0|4326|PolyhedralSurface|0|KO-BKO curvepolygon0|4326|Triangle|0|KO-BKO curvepolygon0|4326|Tin|0|KO-BKO curvepolygon0|4326|Point|2|KO-BKO curvepolygon0|4326|LineString|2|KO-BKO curvepolygon0|4326|Polygon|2|KO-BKO curvepolygon0|4326|MultiPoint|2|KO-BKO curvepolygon0|4326|MultiLineString|2|KO-BKO curvepolygon0|4326|MultiPolygon|2|KO-BKO curvepolygon0|4326|GeometryCollection|2|KO-BKO curvepolygon0|4326|CircularString|2|KO-BKO curvepolygon0|4326|CompoundCurve|2|KO-BKO curvepolygon0|4326|CurvePolygon|2|KO-BKO curvepolygon0|4326|MultiCurve|2|KO-BKO curvepolygon0|4326|MultiSurface|2|KO-BKO curvepolygon0|4326|PolyhedralSurface|2|KO-BKO curvepolygon0|4326|Triangle|2|KO-BKO curvepolygon0|4326|Point|1|KO-BKO curvepolygon0|4326|LineString|1|KO-BKO curvepolygon0|4326|Polygon|1|KO-BKO curvepolygon0|4326|MultiPoint|1|KO-BKO curvepolygon0|4326|MultiLineString|1|KO-BKO curvepolygon0|4326|MultiPolygon|1|KO-BKO curvepolygon0|4326|GeometryCollection|1|KO-BKO curvepolygon0|4326|CircularString|1|KO-BKO curvepolygon0|4326|CompoundCurve|1|KO-BKO curvepolygon0|4326|CurvePolygon|1|KO-BKO curvepolygon0|4326|MultiCurve|1|KO-BKO curvepolygon0|4326|MultiSurface|1|KO-BKO curvepolygon0|4326|PolyhedralSurface|1|KO-BKO curvepolygon0|4326|Triangle|1|KO-BKO curvepolygon0|4326|Point|3|KO-BKO curvepolygon0|4326|LineString|3|KO-BKO curvepolygon0|4326|Polygon|3|KO-BKO curvepolygon0|4326|MultiPoint|3|KO-BKO curvepolygon0|4326|MultiLineString|3|KO-BKO curvepolygon0|4326|MultiPolygon|3|KO-BKO curvepolygon0|4326|GeometryCollection|3|KO-BKO curvepolygon0|4326|CircularString|3|KO-BKO curvepolygon0|4326|CompoundCurve|3|KO-BKO curvepolygon0|4326|CurvePolygon|3|KO-BKO curvepolygon0|4326|MultiCurve|3|KO-BKO curvepolygon0|4326|MultiSurface|3|KO-BKO curvepolygon0|4326|PolyhedralSurface|3|KO-BKO curvepolygon0|4326|Triangle|3|KO-BKO curvepolygon0||COUNT|4| curvepolygon4326|0|Point|0|KO-BKO curvepolygon4326|0|LineString|0|KO-BKO curvepolygon4326|0|Polygon|0|KO-BKO curvepolygon4326|0|MultiPoint|0|KO-BKO curvepolygon4326|0|MultiLineString|0|KO-BKO curvepolygon4326|0|MultiPolygon|0|KO-BKO curvepolygon4326|0|GeometryCollection|0|KO-BKO curvepolygon4326|0|CircularString|0|KO-BKO curvepolygon4326|0|CompoundCurve|0|KO-BKO curvepolygon4326|0|CurvePolygon|0|KO-BKO curvepolygon4326|0|MultiCurve|0|KO-BKO curvepolygon4326|0|MultiSurface|0|KO-BKO curvepolygon4326|0|PolyhedralSurface|0|KO-BKO curvepolygon4326|0|Triangle|0|KO-BKO curvepolygon4326|0|Tin|0|KO-BKO curvepolygon4326|0|Point|2|KO-BKO curvepolygon4326|0|LineString|2|KO-BKO curvepolygon4326|0|Polygon|2|KO-BKO curvepolygon4326|0|MultiPoint|2|KO-BKO curvepolygon4326|0|MultiLineString|2|KO-BKO curvepolygon4326|0|MultiPolygon|2|KO-BKO curvepolygon4326|0|GeometryCollection|2|KO-BKO curvepolygon4326|0|CircularString|2|KO-BKO curvepolygon4326|0|CompoundCurve|2|KO-BKO curvepolygon4326|0|CurvePolygon|2|KO-BKO curvepolygon4326|0|MultiCurve|2|KO-BKO curvepolygon4326|0|MultiSurface|2|KO-BKO curvepolygon4326|0|PolyhedralSurface|2|KO-BKO curvepolygon4326|0|Triangle|2|KO-BKO curvepolygon4326|0|Point|1|KO-BKO curvepolygon4326|0|LineString|1|KO-BKO curvepolygon4326|0|Polygon|1|KO-BKO curvepolygon4326|0|MultiPoint|1|KO-BKO curvepolygon4326|0|MultiLineString|1|KO-BKO curvepolygon4326|0|MultiPolygon|1|KO-BKO curvepolygon4326|0|GeometryCollection|1|KO-BKO curvepolygon4326|0|CircularString|1|KO-BKO curvepolygon4326|0|CompoundCurve|1|KO-BKO curvepolygon4326|0|CurvePolygon|1|KO-BKO curvepolygon4326|0|MultiCurve|1|KO-BKO curvepolygon4326|0|MultiSurface|1|KO-BKO curvepolygon4326|0|PolyhedralSurface|1|KO-BKO curvepolygon4326|0|Triangle|1|KO-BKO curvepolygon4326|0|Point|3|KO-BKO curvepolygon4326|0|LineString|3|KO-BKO curvepolygon4326|0|Polygon|3|KO-BKO curvepolygon4326|0|MultiPoint|3|KO-BKO curvepolygon4326|0|MultiLineString|3|KO-BKO curvepolygon4326|0|MultiPolygon|3|KO-BKO curvepolygon4326|0|GeometryCollection|3|KO-BKO curvepolygon4326|0|CircularString|3|KO-BKO curvepolygon4326|0|CompoundCurve|3|KO-BKO curvepolygon4326|0|CurvePolygon|3|KO-BKO curvepolygon4326|0|MultiCurve|3|KO-BKO curvepolygon4326|0|MultiSurface|3|KO-BKO curvepolygon4326|0|PolyhedralSurface|3|KO-BKO curvepolygon4326|0|Triangle|3|KO-BKO curvepolygon4326|4326|Point|0|KO-BKO curvepolygon4326|4326|LineString|0|KO-BKO curvepolygon4326|4326|Polygon|0|KO-BKO curvepolygon4326|4326|MultiPoint|0|KO-BKO curvepolygon4326|4326|MultiLineString|0|KO-BKO curvepolygon4326|4326|MultiPolygon|0|KO-BKO curvepolygon4326|4326|GeometryCollection|0|KO-BKO curvepolygon4326|4326|CircularString|0|KO-BKO curvepolygon4326|4326|CompoundCurve|0|KO-BKO curvepolygon4326|4326|CurvePolygon|0|OK-BOK curvepolygon4326|4326|MultiCurve|0|KO-BKO curvepolygon4326|4326|MultiSurface|0|KO-BKO curvepolygon4326|4326|PolyhedralSurface|0|KO-BKO curvepolygon4326|4326|Triangle|0|KO-BKO curvepolygon4326|4326|Tin|0|KO-BKO curvepolygon4326|4326|Point|2|KO-BKO curvepolygon4326|4326|LineString|2|KO-BKO curvepolygon4326|4326|Polygon|2|KO-BKO curvepolygon4326|4326|MultiPoint|2|KO-BKO curvepolygon4326|4326|MultiLineString|2|KO-BKO curvepolygon4326|4326|MultiPolygon|2|KO-BKO curvepolygon4326|4326|GeometryCollection|2|KO-BKO curvepolygon4326|4326|CircularString|2|KO-BKO curvepolygon4326|4326|CompoundCurve|2|KO-BKO curvepolygon4326|4326|CurvePolygon|2|KO-BKO curvepolygon4326|4326|MultiCurve|2|KO-BKO curvepolygon4326|4326|MultiSurface|2|KO-BKO curvepolygon4326|4326|PolyhedralSurface|2|KO-BKO curvepolygon4326|4326|Triangle|2|KO-BKO curvepolygon4326|4326|Point|1|KO-BKO curvepolygon4326|4326|LineString|1|KO-BKO curvepolygon4326|4326|Polygon|1|KO-BKO curvepolygon4326|4326|MultiPoint|1|KO-BKO curvepolygon4326|4326|MultiLineString|1|KO-BKO curvepolygon4326|4326|MultiPolygon|1|KO-BKO curvepolygon4326|4326|GeometryCollection|1|KO-BKO curvepolygon4326|4326|CircularString|1|KO-BKO curvepolygon4326|4326|CompoundCurve|1|KO-BKO curvepolygon4326|4326|CurvePolygon|1|KO-BKO curvepolygon4326|4326|MultiCurve|1|KO-BKO curvepolygon4326|4326|MultiSurface|1|KO-BKO curvepolygon4326|4326|PolyhedralSurface|1|KO-BKO curvepolygon4326|4326|Triangle|1|KO-BKO curvepolygon4326|4326|Point|3|KO-BKO curvepolygon4326|4326|LineString|3|KO-BKO curvepolygon4326|4326|Polygon|3|KO-BKO curvepolygon4326|4326|MultiPoint|3|KO-BKO curvepolygon4326|4326|MultiLineString|3|KO-BKO curvepolygon4326|4326|MultiPolygon|3|KO-BKO curvepolygon4326|4326|GeometryCollection|3|KO-BKO curvepolygon4326|4326|CircularString|3|KO-BKO curvepolygon4326|4326|CompoundCurve|3|KO-BKO curvepolygon4326|4326|CurvePolygon|3|KO-BKO curvepolygon4326|4326|MultiCurve|3|KO-BKO curvepolygon4326|4326|MultiSurface|3|KO-BKO curvepolygon4326|4326|PolyhedralSurface|3|KO-BKO curvepolygon4326|4326|Triangle|3|KO-BKO curvepolygon4326||COUNT|2| curvepolygonm|0|Point|0|KO-BKO curvepolygonm|0|LineString|0|KO-BKO curvepolygonm|0|Polygon|0|KO-BKO curvepolygonm|0|MultiPoint|0|KO-BKO curvepolygonm|0|MultiLineString|0|KO-BKO curvepolygonm|0|MultiPolygon|0|KO-BKO curvepolygonm|0|GeometryCollection|0|KO-BKO curvepolygonm|0|CircularString|0|KO-BKO curvepolygonm|0|CompoundCurve|0|KO-BKO curvepolygonm|0|CurvePolygon|0|KO-BKO curvepolygonm|0|MultiCurve|0|KO-BKO curvepolygonm|0|MultiSurface|0|KO-BKO curvepolygonm|0|PolyhedralSurface|0|KO-BKO curvepolygonm|0|Triangle|0|KO-BKO curvepolygonm|0|Tin|0|KO-BKO curvepolygonm|0|Point|2|KO-BKO curvepolygonm|0|LineString|2|KO-BKO curvepolygonm|0|Polygon|2|KO-BKO curvepolygonm|0|MultiPoint|2|KO-BKO curvepolygonm|0|MultiLineString|2|KO-BKO curvepolygonm|0|MultiPolygon|2|KO-BKO curvepolygonm|0|GeometryCollection|2|KO-BKO curvepolygonm|0|CircularString|2|KO-BKO curvepolygonm|0|CompoundCurve|2|KO-BKO curvepolygonm|0|CurvePolygon|2|KO-BKO curvepolygonm|0|MultiCurve|2|KO-BKO curvepolygonm|0|MultiSurface|2|KO-BKO curvepolygonm|0|PolyhedralSurface|2|KO-BKO curvepolygonm|0|Triangle|2|KO-BKO curvepolygonm|0|Point|1|KO-BKO curvepolygonm|0|LineString|1|KO-BKO curvepolygonm|0|Polygon|1|KO-BKO curvepolygonm|0|MultiPoint|1|KO-BKO curvepolygonm|0|MultiLineString|1|KO-BKO curvepolygonm|0|MultiPolygon|1|KO-BKO curvepolygonm|0|GeometryCollection|1|KO-BKO curvepolygonm|0|CircularString|1|KO-BKO curvepolygonm|0|CompoundCurve|1|KO-BKO curvepolygonm|0|CurvePolygon|1|OK-BOK curvepolygonm|0|MultiCurve|1|KO-BKO curvepolygonm|0|MultiSurface|1|KO-BKO curvepolygonm|0|PolyhedralSurface|1|KO-BKO curvepolygonm|0|Triangle|1|KO-BKO curvepolygonm|0|Point|3|KO-BKO curvepolygonm|0|LineString|3|KO-BKO curvepolygonm|0|Polygon|3|KO-BKO curvepolygonm|0|MultiPoint|3|KO-BKO curvepolygonm|0|MultiLineString|3|KO-BKO curvepolygonm|0|MultiPolygon|3|KO-BKO curvepolygonm|0|GeometryCollection|3|KO-BKO curvepolygonm|0|CircularString|3|KO-BKO curvepolygonm|0|CompoundCurve|3|KO-BKO curvepolygonm|0|CurvePolygon|3|KO-BKO curvepolygonm|0|MultiCurve|3|KO-BKO curvepolygonm|0|MultiSurface|3|KO-BKO curvepolygonm|0|PolyhedralSurface|3|KO-BKO curvepolygonm|0|Triangle|3|KO-BKO curvepolygonm|4326|Point|0|KO-BKO curvepolygonm|4326|LineString|0|KO-BKO curvepolygonm|4326|Polygon|0|KO-BKO curvepolygonm|4326|MultiPoint|0|KO-BKO curvepolygonm|4326|MultiLineString|0|KO-BKO curvepolygonm|4326|MultiPolygon|0|KO-BKO curvepolygonm|4326|GeometryCollection|0|KO-BKO curvepolygonm|4326|CircularString|0|KO-BKO curvepolygonm|4326|CompoundCurve|0|KO-BKO curvepolygonm|4326|CurvePolygon|0|KO-BKO curvepolygonm|4326|MultiCurve|0|KO-BKO curvepolygonm|4326|MultiSurface|0|KO-BKO curvepolygonm|4326|PolyhedralSurface|0|KO-BKO curvepolygonm|4326|Triangle|0|KO-BKO curvepolygonm|4326|Tin|0|KO-BKO curvepolygonm|4326|Point|2|KO-BKO curvepolygonm|4326|LineString|2|KO-BKO curvepolygonm|4326|Polygon|2|KO-BKO curvepolygonm|4326|MultiPoint|2|KO-BKO curvepolygonm|4326|MultiLineString|2|KO-BKO curvepolygonm|4326|MultiPolygon|2|KO-BKO curvepolygonm|4326|GeometryCollection|2|KO-BKO curvepolygonm|4326|CircularString|2|KO-BKO curvepolygonm|4326|CompoundCurve|2|KO-BKO curvepolygonm|4326|CurvePolygon|2|KO-BKO curvepolygonm|4326|MultiCurve|2|KO-BKO curvepolygonm|4326|MultiSurface|2|KO-BKO curvepolygonm|4326|PolyhedralSurface|2|KO-BKO curvepolygonm|4326|Triangle|2|KO-BKO curvepolygonm|4326|Point|1|KO-BKO curvepolygonm|4326|LineString|1|KO-BKO curvepolygonm|4326|Polygon|1|KO-BKO curvepolygonm|4326|MultiPoint|1|KO-BKO curvepolygonm|4326|MultiLineString|1|KO-BKO curvepolygonm|4326|MultiPolygon|1|KO-BKO curvepolygonm|4326|GeometryCollection|1|KO-BKO curvepolygonm|4326|CircularString|1|KO-BKO curvepolygonm|4326|CompoundCurve|1|KO-BKO curvepolygonm|4326|CurvePolygon|1|OK-BOK curvepolygonm|4326|MultiCurve|1|KO-BKO curvepolygonm|4326|MultiSurface|1|KO-BKO curvepolygonm|4326|PolyhedralSurface|1|KO-BKO curvepolygonm|4326|Triangle|1|KO-BKO curvepolygonm|4326|Point|3|KO-BKO curvepolygonm|4326|LineString|3|KO-BKO curvepolygonm|4326|Polygon|3|KO-BKO curvepolygonm|4326|MultiPoint|3|KO-BKO curvepolygonm|4326|MultiLineString|3|KO-BKO curvepolygonm|4326|MultiPolygon|3|KO-BKO curvepolygonm|4326|GeometryCollection|3|KO-BKO curvepolygonm|4326|CircularString|3|KO-BKO curvepolygonm|4326|CompoundCurve|3|KO-BKO curvepolygonm|4326|CurvePolygon|3|KO-BKO curvepolygonm|4326|MultiCurve|3|KO-BKO curvepolygonm|4326|MultiSurface|3|KO-BKO curvepolygonm|4326|PolyhedralSurface|3|KO-BKO curvepolygonm|4326|Triangle|3|KO-BKO curvepolygonm||COUNT|4| curvepolygonm0|0|Point|0|KO-BKO curvepolygonm0|0|LineString|0|KO-BKO curvepolygonm0|0|Polygon|0|KO-BKO curvepolygonm0|0|MultiPoint|0|KO-BKO curvepolygonm0|0|MultiLineString|0|KO-BKO curvepolygonm0|0|MultiPolygon|0|KO-BKO curvepolygonm0|0|GeometryCollection|0|KO-BKO curvepolygonm0|0|CircularString|0|KO-BKO curvepolygonm0|0|CompoundCurve|0|KO-BKO curvepolygonm0|0|CurvePolygon|0|KO-BKO curvepolygonm0|0|MultiCurve|0|KO-BKO curvepolygonm0|0|MultiSurface|0|KO-BKO curvepolygonm0|0|PolyhedralSurface|0|KO-BKO curvepolygonm0|0|Triangle|0|KO-BKO curvepolygonm0|0|Tin|0|KO-BKO curvepolygonm0|0|Point|2|KO-BKO curvepolygonm0|0|LineString|2|KO-BKO curvepolygonm0|0|Polygon|2|KO-BKO curvepolygonm0|0|MultiPoint|2|KO-BKO curvepolygonm0|0|MultiLineString|2|KO-BKO curvepolygonm0|0|MultiPolygon|2|KO-BKO curvepolygonm0|0|GeometryCollection|2|KO-BKO curvepolygonm0|0|CircularString|2|KO-BKO curvepolygonm0|0|CompoundCurve|2|KO-BKO curvepolygonm0|0|CurvePolygon|2|KO-BKO curvepolygonm0|0|MultiCurve|2|KO-BKO curvepolygonm0|0|MultiSurface|2|KO-BKO curvepolygonm0|0|PolyhedralSurface|2|KO-BKO curvepolygonm0|0|Triangle|2|KO-BKO curvepolygonm0|0|Point|1|KO-BKO curvepolygonm0|0|LineString|1|KO-BKO curvepolygonm0|0|Polygon|1|KO-BKO curvepolygonm0|0|MultiPoint|1|KO-BKO curvepolygonm0|0|MultiLineString|1|KO-BKO curvepolygonm0|0|MultiPolygon|1|KO-BKO curvepolygonm0|0|GeometryCollection|1|KO-BKO curvepolygonm0|0|CircularString|1|KO-BKO curvepolygonm0|0|CompoundCurve|1|KO-BKO curvepolygonm0|0|CurvePolygon|1|OK-BOK curvepolygonm0|0|MultiCurve|1|KO-BKO curvepolygonm0|0|MultiSurface|1|KO-BKO curvepolygonm0|0|PolyhedralSurface|1|KO-BKO curvepolygonm0|0|Triangle|1|KO-BKO curvepolygonm0|0|Point|3|KO-BKO curvepolygonm0|0|LineString|3|KO-BKO curvepolygonm0|0|Polygon|3|KO-BKO curvepolygonm0|0|MultiPoint|3|KO-BKO curvepolygonm0|0|MultiLineString|3|KO-BKO curvepolygonm0|0|MultiPolygon|3|KO-BKO curvepolygonm0|0|GeometryCollection|3|KO-BKO curvepolygonm0|0|CircularString|3|KO-BKO curvepolygonm0|0|CompoundCurve|3|KO-BKO curvepolygonm0|0|CurvePolygon|3|KO-BKO curvepolygonm0|0|MultiCurve|3|KO-BKO curvepolygonm0|0|MultiSurface|3|KO-BKO curvepolygonm0|0|PolyhedralSurface|3|KO-BKO curvepolygonm0|0|Triangle|3|KO-BKO curvepolygonm0|4326|Point|0|KO-BKO curvepolygonm0|4326|LineString|0|KO-BKO curvepolygonm0|4326|Polygon|0|KO-BKO curvepolygonm0|4326|MultiPoint|0|KO-BKO curvepolygonm0|4326|MultiLineString|0|KO-BKO curvepolygonm0|4326|MultiPolygon|0|KO-BKO curvepolygonm0|4326|GeometryCollection|0|KO-BKO curvepolygonm0|4326|CircularString|0|KO-BKO curvepolygonm0|4326|CompoundCurve|0|KO-BKO curvepolygonm0|4326|CurvePolygon|0|KO-BKO curvepolygonm0|4326|MultiCurve|0|KO-BKO curvepolygonm0|4326|MultiSurface|0|KO-BKO curvepolygonm0|4326|PolyhedralSurface|0|KO-BKO curvepolygonm0|4326|Triangle|0|KO-BKO curvepolygonm0|4326|Tin|0|KO-BKO curvepolygonm0|4326|Point|2|KO-BKO curvepolygonm0|4326|LineString|2|KO-BKO curvepolygonm0|4326|Polygon|2|KO-BKO curvepolygonm0|4326|MultiPoint|2|KO-BKO curvepolygonm0|4326|MultiLineString|2|KO-BKO curvepolygonm0|4326|MultiPolygon|2|KO-BKO curvepolygonm0|4326|GeometryCollection|2|KO-BKO curvepolygonm0|4326|CircularString|2|KO-BKO curvepolygonm0|4326|CompoundCurve|2|KO-BKO curvepolygonm0|4326|CurvePolygon|2|KO-BKO curvepolygonm0|4326|MultiCurve|2|KO-BKO curvepolygonm0|4326|MultiSurface|2|KO-BKO curvepolygonm0|4326|PolyhedralSurface|2|KO-BKO curvepolygonm0|4326|Triangle|2|KO-BKO curvepolygonm0|4326|Point|1|KO-BKO curvepolygonm0|4326|LineString|1|KO-BKO curvepolygonm0|4326|Polygon|1|KO-BKO curvepolygonm0|4326|MultiPoint|1|KO-BKO curvepolygonm0|4326|MultiLineString|1|KO-BKO curvepolygonm0|4326|MultiPolygon|1|KO-BKO curvepolygonm0|4326|GeometryCollection|1|KO-BKO curvepolygonm0|4326|CircularString|1|KO-BKO curvepolygonm0|4326|CompoundCurve|1|KO-BKO curvepolygonm0|4326|CurvePolygon|1|OK-BOK curvepolygonm0|4326|MultiCurve|1|KO-BKO curvepolygonm0|4326|MultiSurface|1|KO-BKO curvepolygonm0|4326|PolyhedralSurface|1|KO-BKO curvepolygonm0|4326|Triangle|1|KO-BKO curvepolygonm0|4326|Point|3|KO-BKO curvepolygonm0|4326|LineString|3|KO-BKO curvepolygonm0|4326|Polygon|3|KO-BKO curvepolygonm0|4326|MultiPoint|3|KO-BKO curvepolygonm0|4326|MultiLineString|3|KO-BKO curvepolygonm0|4326|MultiPolygon|3|KO-BKO curvepolygonm0|4326|GeometryCollection|3|KO-BKO curvepolygonm0|4326|CircularString|3|KO-BKO curvepolygonm0|4326|CompoundCurve|3|KO-BKO curvepolygonm0|4326|CurvePolygon|3|KO-BKO curvepolygonm0|4326|MultiCurve|3|KO-BKO curvepolygonm0|4326|MultiSurface|3|KO-BKO curvepolygonm0|4326|PolyhedralSurface|3|KO-BKO curvepolygonm0|4326|Triangle|3|KO-BKO curvepolygonm0||COUNT|4| curvepolygonm4326|0|Point|0|KO-BKO curvepolygonm4326|0|LineString|0|KO-BKO curvepolygonm4326|0|Polygon|0|KO-BKO curvepolygonm4326|0|MultiPoint|0|KO-BKO curvepolygonm4326|0|MultiLineString|0|KO-BKO curvepolygonm4326|0|MultiPolygon|0|KO-BKO curvepolygonm4326|0|GeometryCollection|0|KO-BKO curvepolygonm4326|0|CircularString|0|KO-BKO curvepolygonm4326|0|CompoundCurve|0|KO-BKO curvepolygonm4326|0|CurvePolygon|0|KO-BKO curvepolygonm4326|0|MultiCurve|0|KO-BKO curvepolygonm4326|0|MultiSurface|0|KO-BKO curvepolygonm4326|0|PolyhedralSurface|0|KO-BKO curvepolygonm4326|0|Triangle|0|KO-BKO curvepolygonm4326|0|Tin|0|KO-BKO curvepolygonm4326|0|Point|2|KO-BKO curvepolygonm4326|0|LineString|2|KO-BKO curvepolygonm4326|0|Polygon|2|KO-BKO curvepolygonm4326|0|MultiPoint|2|KO-BKO curvepolygonm4326|0|MultiLineString|2|KO-BKO curvepolygonm4326|0|MultiPolygon|2|KO-BKO curvepolygonm4326|0|GeometryCollection|2|KO-BKO curvepolygonm4326|0|CircularString|2|KO-BKO curvepolygonm4326|0|CompoundCurve|2|KO-BKO curvepolygonm4326|0|CurvePolygon|2|KO-BKO curvepolygonm4326|0|MultiCurve|2|KO-BKO curvepolygonm4326|0|MultiSurface|2|KO-BKO curvepolygonm4326|0|PolyhedralSurface|2|KO-BKO curvepolygonm4326|0|Triangle|2|KO-BKO curvepolygonm4326|0|Point|1|KO-BKO curvepolygonm4326|0|LineString|1|KO-BKO curvepolygonm4326|0|Polygon|1|KO-BKO curvepolygonm4326|0|MultiPoint|1|KO-BKO curvepolygonm4326|0|MultiLineString|1|KO-BKO curvepolygonm4326|0|MultiPolygon|1|KO-BKO curvepolygonm4326|0|GeometryCollection|1|KO-BKO curvepolygonm4326|0|CircularString|1|KO-BKO curvepolygonm4326|0|CompoundCurve|1|KO-BKO curvepolygonm4326|0|CurvePolygon|1|KO-BKO curvepolygonm4326|0|MultiCurve|1|KO-BKO curvepolygonm4326|0|MultiSurface|1|KO-BKO curvepolygonm4326|0|PolyhedralSurface|1|KO-BKO curvepolygonm4326|0|Triangle|1|KO-BKO curvepolygonm4326|0|Point|3|KO-BKO curvepolygonm4326|0|LineString|3|KO-BKO curvepolygonm4326|0|Polygon|3|KO-BKO curvepolygonm4326|0|MultiPoint|3|KO-BKO curvepolygonm4326|0|MultiLineString|3|KO-BKO curvepolygonm4326|0|MultiPolygon|3|KO-BKO curvepolygonm4326|0|GeometryCollection|3|KO-BKO curvepolygonm4326|0|CircularString|3|KO-BKO curvepolygonm4326|0|CompoundCurve|3|KO-BKO curvepolygonm4326|0|CurvePolygon|3|KO-BKO curvepolygonm4326|0|MultiCurve|3|KO-BKO curvepolygonm4326|0|MultiSurface|3|KO-BKO curvepolygonm4326|0|PolyhedralSurface|3|KO-BKO curvepolygonm4326|0|Triangle|3|KO-BKO curvepolygonm4326|4326|Point|0|KO-BKO curvepolygonm4326|4326|LineString|0|KO-BKO curvepolygonm4326|4326|Polygon|0|KO-BKO curvepolygonm4326|4326|MultiPoint|0|KO-BKO curvepolygonm4326|4326|MultiLineString|0|KO-BKO curvepolygonm4326|4326|MultiPolygon|0|KO-BKO curvepolygonm4326|4326|GeometryCollection|0|KO-BKO curvepolygonm4326|4326|CircularString|0|KO-BKO curvepolygonm4326|4326|CompoundCurve|0|KO-BKO curvepolygonm4326|4326|CurvePolygon|0|KO-BKO curvepolygonm4326|4326|MultiCurve|0|KO-BKO curvepolygonm4326|4326|MultiSurface|0|KO-BKO curvepolygonm4326|4326|PolyhedralSurface|0|KO-BKO curvepolygonm4326|4326|Triangle|0|KO-BKO curvepolygonm4326|4326|Tin|0|KO-BKO curvepolygonm4326|4326|Point|2|KO-BKO curvepolygonm4326|4326|LineString|2|KO-BKO curvepolygonm4326|4326|Polygon|2|KO-BKO curvepolygonm4326|4326|MultiPoint|2|KO-BKO curvepolygonm4326|4326|MultiLineString|2|KO-BKO curvepolygonm4326|4326|MultiPolygon|2|KO-BKO curvepolygonm4326|4326|GeometryCollection|2|KO-BKO curvepolygonm4326|4326|CircularString|2|KO-BKO curvepolygonm4326|4326|CompoundCurve|2|KO-BKO curvepolygonm4326|4326|CurvePolygon|2|KO-BKO curvepolygonm4326|4326|MultiCurve|2|KO-BKO curvepolygonm4326|4326|MultiSurface|2|KO-BKO curvepolygonm4326|4326|PolyhedralSurface|2|KO-BKO curvepolygonm4326|4326|Triangle|2|KO-BKO curvepolygonm4326|4326|Point|1|KO-BKO curvepolygonm4326|4326|LineString|1|KO-BKO curvepolygonm4326|4326|Polygon|1|KO-BKO curvepolygonm4326|4326|MultiPoint|1|KO-BKO curvepolygonm4326|4326|MultiLineString|1|KO-BKO curvepolygonm4326|4326|MultiPolygon|1|KO-BKO curvepolygonm4326|4326|GeometryCollection|1|KO-BKO curvepolygonm4326|4326|CircularString|1|KO-BKO curvepolygonm4326|4326|CompoundCurve|1|KO-BKO curvepolygonm4326|4326|CurvePolygon|1|OK-BOK curvepolygonm4326|4326|MultiCurve|1|KO-BKO curvepolygonm4326|4326|MultiSurface|1|KO-BKO curvepolygonm4326|4326|PolyhedralSurface|1|KO-BKO curvepolygonm4326|4326|Triangle|1|KO-BKO curvepolygonm4326|4326|Point|3|KO-BKO curvepolygonm4326|4326|LineString|3|KO-BKO curvepolygonm4326|4326|Polygon|3|KO-BKO curvepolygonm4326|4326|MultiPoint|3|KO-BKO curvepolygonm4326|4326|MultiLineString|3|KO-BKO curvepolygonm4326|4326|MultiPolygon|3|KO-BKO curvepolygonm4326|4326|GeometryCollection|3|KO-BKO curvepolygonm4326|4326|CircularString|3|KO-BKO curvepolygonm4326|4326|CompoundCurve|3|KO-BKO curvepolygonm4326|4326|CurvePolygon|3|KO-BKO curvepolygonm4326|4326|MultiCurve|3|KO-BKO curvepolygonm4326|4326|MultiSurface|3|KO-BKO curvepolygonm4326|4326|PolyhedralSurface|3|KO-BKO curvepolygonm4326|4326|Triangle|3|KO-BKO curvepolygonm4326||COUNT|2| curvepolygonz|0|Point|0|KO-BKO curvepolygonz|0|LineString|0|KO-BKO curvepolygonz|0|Polygon|0|KO-BKO curvepolygonz|0|MultiPoint|0|KO-BKO curvepolygonz|0|MultiLineString|0|KO-BKO curvepolygonz|0|MultiPolygon|0|KO-BKO curvepolygonz|0|GeometryCollection|0|KO-BKO curvepolygonz|0|CircularString|0|KO-BKO curvepolygonz|0|CompoundCurve|0|KO-BKO curvepolygonz|0|CurvePolygon|0|KO-BKO curvepolygonz|0|MultiCurve|0|KO-BKO curvepolygonz|0|MultiSurface|0|KO-BKO curvepolygonz|0|PolyhedralSurface|0|KO-BKO curvepolygonz|0|Triangle|0|KO-BKO curvepolygonz|0|Tin|0|KO-BKO curvepolygonz|0|Point|2|KO-BKO curvepolygonz|0|LineString|2|KO-BKO curvepolygonz|0|Polygon|2|KO-BKO curvepolygonz|0|MultiPoint|2|KO-BKO curvepolygonz|0|MultiLineString|2|KO-BKO curvepolygonz|0|MultiPolygon|2|KO-BKO curvepolygonz|0|GeometryCollection|2|KO-BKO curvepolygonz|0|CircularString|2|KO-BKO curvepolygonz|0|CompoundCurve|2|KO-BKO curvepolygonz|0|CurvePolygon|2|OK-BOK curvepolygonz|0|MultiCurve|2|KO-BKO curvepolygonz|0|MultiSurface|2|KO-BKO curvepolygonz|0|PolyhedralSurface|2|KO-BKO curvepolygonz|0|Triangle|2|KO-BKO curvepolygonz|0|Point|1|KO-BKO curvepolygonz|0|LineString|1|KO-BKO curvepolygonz|0|Polygon|1|KO-BKO curvepolygonz|0|MultiPoint|1|KO-BKO curvepolygonz|0|MultiLineString|1|KO-BKO curvepolygonz|0|MultiPolygon|1|KO-BKO curvepolygonz|0|GeometryCollection|1|KO-BKO curvepolygonz|0|CircularString|1|KO-BKO curvepolygonz|0|CompoundCurve|1|KO-BKO curvepolygonz|0|CurvePolygon|1|KO-BKO curvepolygonz|0|MultiCurve|1|KO-BKO curvepolygonz|0|MultiSurface|1|KO-BKO curvepolygonz|0|PolyhedralSurface|1|KO-BKO curvepolygonz|0|Triangle|1|KO-BKO curvepolygonz|0|Point|3|KO-BKO curvepolygonz|0|LineString|3|KO-BKO curvepolygonz|0|Polygon|3|KO-BKO curvepolygonz|0|MultiPoint|3|KO-BKO curvepolygonz|0|MultiLineString|3|KO-BKO curvepolygonz|0|MultiPolygon|3|KO-BKO curvepolygonz|0|GeometryCollection|3|KO-BKO curvepolygonz|0|CircularString|3|KO-BKO curvepolygonz|0|CompoundCurve|3|KO-BKO curvepolygonz|0|CurvePolygon|3|KO-BKO curvepolygonz|0|MultiCurve|3|KO-BKO curvepolygonz|0|MultiSurface|3|KO-BKO curvepolygonz|0|PolyhedralSurface|3|KO-BKO curvepolygonz|0|Triangle|3|KO-BKO curvepolygonz|4326|Point|0|KO-BKO curvepolygonz|4326|LineString|0|KO-BKO curvepolygonz|4326|Polygon|0|KO-BKO curvepolygonz|4326|MultiPoint|0|KO-BKO curvepolygonz|4326|MultiLineString|0|KO-BKO curvepolygonz|4326|MultiPolygon|0|KO-BKO curvepolygonz|4326|GeometryCollection|0|KO-BKO curvepolygonz|4326|CircularString|0|KO-BKO curvepolygonz|4326|CompoundCurve|0|KO-BKO curvepolygonz|4326|CurvePolygon|0|KO-BKO curvepolygonz|4326|MultiCurve|0|KO-BKO curvepolygonz|4326|MultiSurface|0|KO-BKO curvepolygonz|4326|PolyhedralSurface|0|KO-BKO curvepolygonz|4326|Triangle|0|KO-BKO curvepolygonz|4326|Tin|0|KO-BKO curvepolygonz|4326|Point|2|KO-BKO curvepolygonz|4326|LineString|2|KO-BKO curvepolygonz|4326|Polygon|2|KO-BKO curvepolygonz|4326|MultiPoint|2|KO-BKO curvepolygonz|4326|MultiLineString|2|KO-BKO curvepolygonz|4326|MultiPolygon|2|KO-BKO curvepolygonz|4326|GeometryCollection|2|KO-BKO curvepolygonz|4326|CircularString|2|KO-BKO curvepolygonz|4326|CompoundCurve|2|KO-BKO curvepolygonz|4326|CurvePolygon|2|OK-BOK curvepolygonz|4326|MultiCurve|2|KO-BKO curvepolygonz|4326|MultiSurface|2|KO-BKO curvepolygonz|4326|PolyhedralSurface|2|KO-BKO curvepolygonz|4326|Triangle|2|KO-BKO curvepolygonz|4326|Point|1|KO-BKO curvepolygonz|4326|LineString|1|KO-BKO curvepolygonz|4326|Polygon|1|KO-BKO curvepolygonz|4326|MultiPoint|1|KO-BKO curvepolygonz|4326|MultiLineString|1|KO-BKO curvepolygonz|4326|MultiPolygon|1|KO-BKO curvepolygonz|4326|GeometryCollection|1|KO-BKO curvepolygonz|4326|CircularString|1|KO-BKO curvepolygonz|4326|CompoundCurve|1|KO-BKO curvepolygonz|4326|CurvePolygon|1|KO-BKO curvepolygonz|4326|MultiCurve|1|KO-BKO curvepolygonz|4326|MultiSurface|1|KO-BKO curvepolygonz|4326|PolyhedralSurface|1|KO-BKO curvepolygonz|4326|Triangle|1|KO-BKO curvepolygonz|4326|Point|3|KO-BKO curvepolygonz|4326|LineString|3|KO-BKO curvepolygonz|4326|Polygon|3|KO-BKO curvepolygonz|4326|MultiPoint|3|KO-BKO curvepolygonz|4326|MultiLineString|3|KO-BKO curvepolygonz|4326|MultiPolygon|3|KO-BKO curvepolygonz|4326|GeometryCollection|3|KO-BKO curvepolygonz|4326|CircularString|3|KO-BKO curvepolygonz|4326|CompoundCurve|3|KO-BKO curvepolygonz|4326|CurvePolygon|3|KO-BKO curvepolygonz|4326|MultiCurve|3|KO-BKO curvepolygonz|4326|MultiSurface|3|KO-BKO curvepolygonz|4326|PolyhedralSurface|3|KO-BKO curvepolygonz|4326|Triangle|3|KO-BKO curvepolygonz||COUNT|4| curvepolygonz0|0|Point|0|KO-BKO curvepolygonz0|0|LineString|0|KO-BKO curvepolygonz0|0|Polygon|0|KO-BKO curvepolygonz0|0|MultiPoint|0|KO-BKO curvepolygonz0|0|MultiLineString|0|KO-BKO curvepolygonz0|0|MultiPolygon|0|KO-BKO curvepolygonz0|0|GeometryCollection|0|KO-BKO curvepolygonz0|0|CircularString|0|KO-BKO curvepolygonz0|0|CompoundCurve|0|KO-BKO curvepolygonz0|0|CurvePolygon|0|KO-BKO curvepolygonz0|0|MultiCurve|0|KO-BKO curvepolygonz0|0|MultiSurface|0|KO-BKO curvepolygonz0|0|PolyhedralSurface|0|KO-BKO curvepolygonz0|0|Triangle|0|KO-BKO curvepolygonz0|0|Tin|0|KO-BKO curvepolygonz0|0|Point|2|KO-BKO curvepolygonz0|0|LineString|2|KO-BKO curvepolygonz0|0|Polygon|2|KO-BKO curvepolygonz0|0|MultiPoint|2|KO-BKO curvepolygonz0|0|MultiLineString|2|KO-BKO curvepolygonz0|0|MultiPolygon|2|KO-BKO curvepolygonz0|0|GeometryCollection|2|KO-BKO curvepolygonz0|0|CircularString|2|KO-BKO curvepolygonz0|0|CompoundCurve|2|KO-BKO curvepolygonz0|0|CurvePolygon|2|OK-BOK curvepolygonz0|0|MultiCurve|2|KO-BKO curvepolygonz0|0|MultiSurface|2|KO-BKO curvepolygonz0|0|PolyhedralSurface|2|KO-BKO curvepolygonz0|0|Triangle|2|KO-BKO curvepolygonz0|0|Point|1|KO-BKO curvepolygonz0|0|LineString|1|KO-BKO curvepolygonz0|0|Polygon|1|KO-BKO curvepolygonz0|0|MultiPoint|1|KO-BKO curvepolygonz0|0|MultiLineString|1|KO-BKO curvepolygonz0|0|MultiPolygon|1|KO-BKO curvepolygonz0|0|GeometryCollection|1|KO-BKO curvepolygonz0|0|CircularString|1|KO-BKO curvepolygonz0|0|CompoundCurve|1|KO-BKO curvepolygonz0|0|CurvePolygon|1|KO-BKO curvepolygonz0|0|MultiCurve|1|KO-BKO curvepolygonz0|0|MultiSurface|1|KO-BKO curvepolygonz0|0|PolyhedralSurface|1|KO-BKO curvepolygonz0|0|Triangle|1|KO-BKO curvepolygonz0|0|Point|3|KO-BKO curvepolygonz0|0|LineString|3|KO-BKO curvepolygonz0|0|Polygon|3|KO-BKO curvepolygonz0|0|MultiPoint|3|KO-BKO curvepolygonz0|0|MultiLineString|3|KO-BKO curvepolygonz0|0|MultiPolygon|3|KO-BKO curvepolygonz0|0|GeometryCollection|3|KO-BKO curvepolygonz0|0|CircularString|3|KO-BKO curvepolygonz0|0|CompoundCurve|3|KO-BKO curvepolygonz0|0|CurvePolygon|3|KO-BKO curvepolygonz0|0|MultiCurve|3|KO-BKO curvepolygonz0|0|MultiSurface|3|KO-BKO curvepolygonz0|0|PolyhedralSurface|3|KO-BKO curvepolygonz0|0|Triangle|3|KO-BKO curvepolygonz0|4326|Point|0|KO-BKO curvepolygonz0|4326|LineString|0|KO-BKO curvepolygonz0|4326|Polygon|0|KO-BKO curvepolygonz0|4326|MultiPoint|0|KO-BKO curvepolygonz0|4326|MultiLineString|0|KO-BKO curvepolygonz0|4326|MultiPolygon|0|KO-BKO curvepolygonz0|4326|GeometryCollection|0|KO-BKO curvepolygonz0|4326|CircularString|0|KO-BKO curvepolygonz0|4326|CompoundCurve|0|KO-BKO curvepolygonz0|4326|CurvePolygon|0|KO-BKO curvepolygonz0|4326|MultiCurve|0|KO-BKO curvepolygonz0|4326|MultiSurface|0|KO-BKO curvepolygonz0|4326|PolyhedralSurface|0|KO-BKO curvepolygonz0|4326|Triangle|0|KO-BKO curvepolygonz0|4326|Tin|0|KO-BKO curvepolygonz0|4326|Point|2|KO-BKO curvepolygonz0|4326|LineString|2|KO-BKO curvepolygonz0|4326|Polygon|2|KO-BKO curvepolygonz0|4326|MultiPoint|2|KO-BKO curvepolygonz0|4326|MultiLineString|2|KO-BKO curvepolygonz0|4326|MultiPolygon|2|KO-BKO curvepolygonz0|4326|GeometryCollection|2|KO-BKO curvepolygonz0|4326|CircularString|2|KO-BKO curvepolygonz0|4326|CompoundCurve|2|KO-BKO curvepolygonz0|4326|CurvePolygon|2|OK-BOK curvepolygonz0|4326|MultiCurve|2|KO-BKO curvepolygonz0|4326|MultiSurface|2|KO-BKO curvepolygonz0|4326|PolyhedralSurface|2|KO-BKO curvepolygonz0|4326|Triangle|2|KO-BKO curvepolygonz0|4326|Point|1|KO-BKO curvepolygonz0|4326|LineString|1|KO-BKO curvepolygonz0|4326|Polygon|1|KO-BKO curvepolygonz0|4326|MultiPoint|1|KO-BKO curvepolygonz0|4326|MultiLineString|1|KO-BKO curvepolygonz0|4326|MultiPolygon|1|KO-BKO curvepolygonz0|4326|GeometryCollection|1|KO-BKO curvepolygonz0|4326|CircularString|1|KO-BKO curvepolygonz0|4326|CompoundCurve|1|KO-BKO curvepolygonz0|4326|CurvePolygon|1|KO-BKO curvepolygonz0|4326|MultiCurve|1|KO-BKO curvepolygonz0|4326|MultiSurface|1|KO-BKO curvepolygonz0|4326|PolyhedralSurface|1|KO-BKO curvepolygonz0|4326|Triangle|1|KO-BKO curvepolygonz0|4326|Point|3|KO-BKO curvepolygonz0|4326|LineString|3|KO-BKO curvepolygonz0|4326|Polygon|3|KO-BKO curvepolygonz0|4326|MultiPoint|3|KO-BKO curvepolygonz0|4326|MultiLineString|3|KO-BKO curvepolygonz0|4326|MultiPolygon|3|KO-BKO curvepolygonz0|4326|GeometryCollection|3|KO-BKO curvepolygonz0|4326|CircularString|3|KO-BKO curvepolygonz0|4326|CompoundCurve|3|KO-BKO curvepolygonz0|4326|CurvePolygon|3|KO-BKO curvepolygonz0|4326|MultiCurve|3|KO-BKO curvepolygonz0|4326|MultiSurface|3|KO-BKO curvepolygonz0|4326|PolyhedralSurface|3|KO-BKO curvepolygonz0|4326|Triangle|3|KO-BKO curvepolygonz0||COUNT|4| curvepolygonz4326|0|Point|0|KO-BKO curvepolygonz4326|0|LineString|0|KO-BKO curvepolygonz4326|0|Polygon|0|KO-BKO curvepolygonz4326|0|MultiPoint|0|KO-BKO curvepolygonz4326|0|MultiLineString|0|KO-BKO curvepolygonz4326|0|MultiPolygon|0|KO-BKO curvepolygonz4326|0|GeometryCollection|0|KO-BKO curvepolygonz4326|0|CircularString|0|KO-BKO curvepolygonz4326|0|CompoundCurve|0|KO-BKO curvepolygonz4326|0|CurvePolygon|0|KO-BKO curvepolygonz4326|0|MultiCurve|0|KO-BKO curvepolygonz4326|0|MultiSurface|0|KO-BKO curvepolygonz4326|0|PolyhedralSurface|0|KO-BKO curvepolygonz4326|0|Triangle|0|KO-BKO curvepolygonz4326|0|Tin|0|KO-BKO curvepolygonz4326|0|Point|2|KO-BKO curvepolygonz4326|0|LineString|2|KO-BKO curvepolygonz4326|0|Polygon|2|KO-BKO curvepolygonz4326|0|MultiPoint|2|KO-BKO curvepolygonz4326|0|MultiLineString|2|KO-BKO curvepolygonz4326|0|MultiPolygon|2|KO-BKO curvepolygonz4326|0|GeometryCollection|2|KO-BKO curvepolygonz4326|0|CircularString|2|KO-BKO curvepolygonz4326|0|CompoundCurve|2|KO-BKO curvepolygonz4326|0|CurvePolygon|2|KO-BKO curvepolygonz4326|0|MultiCurve|2|KO-BKO curvepolygonz4326|0|MultiSurface|2|KO-BKO curvepolygonz4326|0|PolyhedralSurface|2|KO-BKO curvepolygonz4326|0|Triangle|2|KO-BKO curvepolygonz4326|0|Point|1|KO-BKO curvepolygonz4326|0|LineString|1|KO-BKO curvepolygonz4326|0|Polygon|1|KO-BKO curvepolygonz4326|0|MultiPoint|1|KO-BKO curvepolygonz4326|0|MultiLineString|1|KO-BKO curvepolygonz4326|0|MultiPolygon|1|KO-BKO curvepolygonz4326|0|GeometryCollection|1|KO-BKO curvepolygonz4326|0|CircularString|1|KO-BKO curvepolygonz4326|0|CompoundCurve|1|KO-BKO curvepolygonz4326|0|CurvePolygon|1|KO-BKO curvepolygonz4326|0|MultiCurve|1|KO-BKO curvepolygonz4326|0|MultiSurface|1|KO-BKO curvepolygonz4326|0|PolyhedralSurface|1|KO-BKO curvepolygonz4326|0|Triangle|1|KO-BKO curvepolygonz4326|0|Point|3|KO-BKO curvepolygonz4326|0|LineString|3|KO-BKO curvepolygonz4326|0|Polygon|3|KO-BKO curvepolygonz4326|0|MultiPoint|3|KO-BKO curvepolygonz4326|0|MultiLineString|3|KO-BKO curvepolygonz4326|0|MultiPolygon|3|KO-BKO curvepolygonz4326|0|GeometryCollection|3|KO-BKO curvepolygonz4326|0|CircularString|3|KO-BKO curvepolygonz4326|0|CompoundCurve|3|KO-BKO curvepolygonz4326|0|CurvePolygon|3|KO-BKO curvepolygonz4326|0|MultiCurve|3|KO-BKO curvepolygonz4326|0|MultiSurface|3|KO-BKO curvepolygonz4326|0|PolyhedralSurface|3|KO-BKO curvepolygonz4326|0|Triangle|3|KO-BKO curvepolygonz4326|4326|Point|0|KO-BKO curvepolygonz4326|4326|LineString|0|KO-BKO curvepolygonz4326|4326|Polygon|0|KO-BKO curvepolygonz4326|4326|MultiPoint|0|KO-BKO curvepolygonz4326|4326|MultiLineString|0|KO-BKO curvepolygonz4326|4326|MultiPolygon|0|KO-BKO curvepolygonz4326|4326|GeometryCollection|0|KO-BKO curvepolygonz4326|4326|CircularString|0|KO-BKO curvepolygonz4326|4326|CompoundCurve|0|KO-BKO curvepolygonz4326|4326|CurvePolygon|0|KO-BKO curvepolygonz4326|4326|MultiCurve|0|KO-BKO curvepolygonz4326|4326|MultiSurface|0|KO-BKO curvepolygonz4326|4326|PolyhedralSurface|0|KO-BKO curvepolygonz4326|4326|Triangle|0|KO-BKO curvepolygonz4326|4326|Tin|0|KO-BKO curvepolygonz4326|4326|Point|2|KO-BKO curvepolygonz4326|4326|LineString|2|KO-BKO curvepolygonz4326|4326|Polygon|2|KO-BKO curvepolygonz4326|4326|MultiPoint|2|KO-BKO curvepolygonz4326|4326|MultiLineString|2|KO-BKO curvepolygonz4326|4326|MultiPolygon|2|KO-BKO curvepolygonz4326|4326|GeometryCollection|2|KO-BKO curvepolygonz4326|4326|CircularString|2|KO-BKO curvepolygonz4326|4326|CompoundCurve|2|KO-BKO curvepolygonz4326|4326|CurvePolygon|2|OK-BOK curvepolygonz4326|4326|MultiCurve|2|KO-BKO curvepolygonz4326|4326|MultiSurface|2|KO-BKO curvepolygonz4326|4326|PolyhedralSurface|2|KO-BKO curvepolygonz4326|4326|Triangle|2|KO-BKO curvepolygonz4326|4326|Point|1|KO-BKO curvepolygonz4326|4326|LineString|1|KO-BKO curvepolygonz4326|4326|Polygon|1|KO-BKO curvepolygonz4326|4326|MultiPoint|1|KO-BKO curvepolygonz4326|4326|MultiLineString|1|KO-BKO curvepolygonz4326|4326|MultiPolygon|1|KO-BKO curvepolygonz4326|4326|GeometryCollection|1|KO-BKO curvepolygonz4326|4326|CircularString|1|KO-BKO curvepolygonz4326|4326|CompoundCurve|1|KO-BKO curvepolygonz4326|4326|CurvePolygon|1|KO-BKO curvepolygonz4326|4326|MultiCurve|1|KO-BKO curvepolygonz4326|4326|MultiSurface|1|KO-BKO curvepolygonz4326|4326|PolyhedralSurface|1|KO-BKO curvepolygonz4326|4326|Triangle|1|KO-BKO curvepolygonz4326|4326|Point|3|KO-BKO curvepolygonz4326|4326|LineString|3|KO-BKO curvepolygonz4326|4326|Polygon|3|KO-BKO curvepolygonz4326|4326|MultiPoint|3|KO-BKO curvepolygonz4326|4326|MultiLineString|3|KO-BKO curvepolygonz4326|4326|MultiPolygon|3|KO-BKO curvepolygonz4326|4326|GeometryCollection|3|KO-BKO curvepolygonz4326|4326|CircularString|3|KO-BKO curvepolygonz4326|4326|CompoundCurve|3|KO-BKO curvepolygonz4326|4326|CurvePolygon|3|KO-BKO curvepolygonz4326|4326|MultiCurve|3|KO-BKO curvepolygonz4326|4326|MultiSurface|3|KO-BKO curvepolygonz4326|4326|PolyhedralSurface|3|KO-BKO curvepolygonz4326|4326|Triangle|3|KO-BKO curvepolygonz4326||COUNT|2| curvepolygonzm|0|Point|0|KO-BKO curvepolygonzm|0|LineString|0|KO-BKO curvepolygonzm|0|Polygon|0|KO-BKO curvepolygonzm|0|MultiPoint|0|KO-BKO curvepolygonzm|0|MultiLineString|0|KO-BKO curvepolygonzm|0|MultiPolygon|0|KO-BKO curvepolygonzm|0|GeometryCollection|0|KO-BKO curvepolygonzm|0|CircularString|0|KO-BKO curvepolygonzm|0|CompoundCurve|0|KO-BKO curvepolygonzm|0|CurvePolygon|0|KO-BKO curvepolygonzm|0|MultiCurve|0|KO-BKO curvepolygonzm|0|MultiSurface|0|KO-BKO curvepolygonzm|0|PolyhedralSurface|0|KO-BKO curvepolygonzm|0|Triangle|0|KO-BKO curvepolygonzm|0|Tin|0|KO-BKO curvepolygonzm|0|Point|2|KO-BKO curvepolygonzm|0|LineString|2|KO-BKO curvepolygonzm|0|Polygon|2|KO-BKO curvepolygonzm|0|MultiPoint|2|KO-BKO curvepolygonzm|0|MultiLineString|2|KO-BKO curvepolygonzm|0|MultiPolygon|2|KO-BKO curvepolygonzm|0|GeometryCollection|2|KO-BKO curvepolygonzm|0|CircularString|2|KO-BKO curvepolygonzm|0|CompoundCurve|2|KO-BKO curvepolygonzm|0|CurvePolygon|2|KO-BKO curvepolygonzm|0|MultiCurve|2|KO-BKO curvepolygonzm|0|MultiSurface|2|KO-BKO curvepolygonzm|0|PolyhedralSurface|2|KO-BKO curvepolygonzm|0|Triangle|2|KO-BKO curvepolygonzm|0|Point|1|KO-BKO curvepolygonzm|0|LineString|1|KO-BKO curvepolygonzm|0|Polygon|1|KO-BKO curvepolygonzm|0|MultiPoint|1|KO-BKO curvepolygonzm|0|MultiLineString|1|KO-BKO curvepolygonzm|0|MultiPolygon|1|KO-BKO curvepolygonzm|0|GeometryCollection|1|KO-BKO curvepolygonzm|0|CircularString|1|KO-BKO curvepolygonzm|0|CompoundCurve|1|KO-BKO curvepolygonzm|0|CurvePolygon|1|KO-BKO curvepolygonzm|0|MultiCurve|1|KO-BKO curvepolygonzm|0|MultiSurface|1|KO-BKO curvepolygonzm|0|PolyhedralSurface|1|KO-BKO curvepolygonzm|0|Triangle|1|KO-BKO curvepolygonzm|0|Point|3|KO-BKO curvepolygonzm|0|LineString|3|KO-BKO curvepolygonzm|0|Polygon|3|KO-BKO curvepolygonzm|0|MultiPoint|3|KO-BKO curvepolygonzm|0|MultiLineString|3|KO-BKO curvepolygonzm|0|MultiPolygon|3|KO-BKO curvepolygonzm|0|GeometryCollection|3|KO-BKO curvepolygonzm|0|CircularString|3|KO-BKO curvepolygonzm|0|CompoundCurve|3|KO-BKO curvepolygonzm|0|CurvePolygon|3|OK-BOK curvepolygonzm|0|MultiCurve|3|KO-BKO curvepolygonzm|0|MultiSurface|3|KO-BKO curvepolygonzm|0|PolyhedralSurface|3|KO-BKO curvepolygonzm|0|Triangle|3|KO-BKO curvepolygonzm|4326|Point|0|KO-BKO curvepolygonzm|4326|LineString|0|KO-BKO curvepolygonzm|4326|Polygon|0|KO-BKO curvepolygonzm|4326|MultiPoint|0|KO-BKO curvepolygonzm|4326|MultiLineString|0|KO-BKO curvepolygonzm|4326|MultiPolygon|0|KO-BKO curvepolygonzm|4326|GeometryCollection|0|KO-BKO curvepolygonzm|4326|CircularString|0|KO-BKO curvepolygonzm|4326|CompoundCurve|0|KO-BKO curvepolygonzm|4326|CurvePolygon|0|KO-BKO curvepolygonzm|4326|MultiCurve|0|KO-BKO curvepolygonzm|4326|MultiSurface|0|KO-BKO curvepolygonzm|4326|PolyhedralSurface|0|KO-BKO curvepolygonzm|4326|Triangle|0|KO-BKO curvepolygonzm|4326|Tin|0|KO-BKO curvepolygonzm|4326|Point|2|KO-BKO curvepolygonzm|4326|LineString|2|KO-BKO curvepolygonzm|4326|Polygon|2|KO-BKO curvepolygonzm|4326|MultiPoint|2|KO-BKO curvepolygonzm|4326|MultiLineString|2|KO-BKO curvepolygonzm|4326|MultiPolygon|2|KO-BKO curvepolygonzm|4326|GeometryCollection|2|KO-BKO curvepolygonzm|4326|CircularString|2|KO-BKO curvepolygonzm|4326|CompoundCurve|2|KO-BKO curvepolygonzm|4326|CurvePolygon|2|KO-BKO curvepolygonzm|4326|MultiCurve|2|KO-BKO curvepolygonzm|4326|MultiSurface|2|KO-BKO curvepolygonzm|4326|PolyhedralSurface|2|KO-BKO curvepolygonzm|4326|Triangle|2|KO-BKO curvepolygonzm|4326|Point|1|KO-BKO curvepolygonzm|4326|LineString|1|KO-BKO curvepolygonzm|4326|Polygon|1|KO-BKO curvepolygonzm|4326|MultiPoint|1|KO-BKO curvepolygonzm|4326|MultiLineString|1|KO-BKO curvepolygonzm|4326|MultiPolygon|1|KO-BKO curvepolygonzm|4326|GeometryCollection|1|KO-BKO curvepolygonzm|4326|CircularString|1|KO-BKO curvepolygonzm|4326|CompoundCurve|1|KO-BKO curvepolygonzm|4326|CurvePolygon|1|KO-BKO curvepolygonzm|4326|MultiCurve|1|KO-BKO curvepolygonzm|4326|MultiSurface|1|KO-BKO curvepolygonzm|4326|PolyhedralSurface|1|KO-BKO curvepolygonzm|4326|Triangle|1|KO-BKO curvepolygonzm|4326|Point|3|KO-BKO curvepolygonzm|4326|LineString|3|KO-BKO curvepolygonzm|4326|Polygon|3|KO-BKO curvepolygonzm|4326|MultiPoint|3|KO-BKO curvepolygonzm|4326|MultiLineString|3|KO-BKO curvepolygonzm|4326|MultiPolygon|3|KO-BKO curvepolygonzm|4326|GeometryCollection|3|KO-BKO curvepolygonzm|4326|CircularString|3|KO-BKO curvepolygonzm|4326|CompoundCurve|3|KO-BKO curvepolygonzm|4326|CurvePolygon|3|OK-BOK curvepolygonzm|4326|MultiCurve|3|KO-BKO curvepolygonzm|4326|MultiSurface|3|KO-BKO curvepolygonzm|4326|PolyhedralSurface|3|KO-BKO curvepolygonzm|4326|Triangle|3|KO-BKO curvepolygonzm||COUNT|4| curvepolygonzm0|0|Point|0|KO-BKO curvepolygonzm0|0|LineString|0|KO-BKO curvepolygonzm0|0|Polygon|0|KO-BKO curvepolygonzm0|0|MultiPoint|0|KO-BKO curvepolygonzm0|0|MultiLineString|0|KO-BKO curvepolygonzm0|0|MultiPolygon|0|KO-BKO curvepolygonzm0|0|GeometryCollection|0|KO-BKO curvepolygonzm0|0|CircularString|0|KO-BKO curvepolygonzm0|0|CompoundCurve|0|KO-BKO curvepolygonzm0|0|CurvePolygon|0|KO-BKO curvepolygonzm0|0|MultiCurve|0|KO-BKO curvepolygonzm0|0|MultiSurface|0|KO-BKO curvepolygonzm0|0|PolyhedralSurface|0|KO-BKO curvepolygonzm0|0|Triangle|0|KO-BKO curvepolygonzm0|0|Tin|0|KO-BKO curvepolygonzm0|0|Point|2|KO-BKO curvepolygonzm0|0|LineString|2|KO-BKO curvepolygonzm0|0|Polygon|2|KO-BKO curvepolygonzm0|0|MultiPoint|2|KO-BKO curvepolygonzm0|0|MultiLineString|2|KO-BKO curvepolygonzm0|0|MultiPolygon|2|KO-BKO curvepolygonzm0|0|GeometryCollection|2|KO-BKO curvepolygonzm0|0|CircularString|2|KO-BKO curvepolygonzm0|0|CompoundCurve|2|KO-BKO curvepolygonzm0|0|CurvePolygon|2|KO-BKO curvepolygonzm0|0|MultiCurve|2|KO-BKO curvepolygonzm0|0|MultiSurface|2|KO-BKO curvepolygonzm0|0|PolyhedralSurface|2|KO-BKO curvepolygonzm0|0|Triangle|2|KO-BKO curvepolygonzm0|0|Point|1|KO-BKO curvepolygonzm0|0|LineString|1|KO-BKO curvepolygonzm0|0|Polygon|1|KO-BKO curvepolygonzm0|0|MultiPoint|1|KO-BKO curvepolygonzm0|0|MultiLineString|1|KO-BKO curvepolygonzm0|0|MultiPolygon|1|KO-BKO curvepolygonzm0|0|GeometryCollection|1|KO-BKO curvepolygonzm0|0|CircularString|1|KO-BKO curvepolygonzm0|0|CompoundCurve|1|KO-BKO curvepolygonzm0|0|CurvePolygon|1|KO-BKO curvepolygonzm0|0|MultiCurve|1|KO-BKO curvepolygonzm0|0|MultiSurface|1|KO-BKO curvepolygonzm0|0|PolyhedralSurface|1|KO-BKO curvepolygonzm0|0|Triangle|1|KO-BKO curvepolygonzm0|0|Point|3|KO-BKO curvepolygonzm0|0|LineString|3|KO-BKO curvepolygonzm0|0|Polygon|3|KO-BKO curvepolygonzm0|0|MultiPoint|3|KO-BKO curvepolygonzm0|0|MultiLineString|3|KO-BKO curvepolygonzm0|0|MultiPolygon|3|KO-BKO curvepolygonzm0|0|GeometryCollection|3|KO-BKO curvepolygonzm0|0|CircularString|3|KO-BKO curvepolygonzm0|0|CompoundCurve|3|KO-BKO curvepolygonzm0|0|CurvePolygon|3|OK-BOK curvepolygonzm0|0|MultiCurve|3|KO-BKO curvepolygonzm0|0|MultiSurface|3|KO-BKO curvepolygonzm0|0|PolyhedralSurface|3|KO-BKO curvepolygonzm0|0|Triangle|3|KO-BKO curvepolygonzm0|4326|Point|0|KO-BKO curvepolygonzm0|4326|LineString|0|KO-BKO curvepolygonzm0|4326|Polygon|0|KO-BKO curvepolygonzm0|4326|MultiPoint|0|KO-BKO curvepolygonzm0|4326|MultiLineString|0|KO-BKO curvepolygonzm0|4326|MultiPolygon|0|KO-BKO curvepolygonzm0|4326|GeometryCollection|0|KO-BKO curvepolygonzm0|4326|CircularString|0|KO-BKO curvepolygonzm0|4326|CompoundCurve|0|KO-BKO curvepolygonzm0|4326|CurvePolygon|0|KO-BKO curvepolygonzm0|4326|MultiCurve|0|KO-BKO curvepolygonzm0|4326|MultiSurface|0|KO-BKO curvepolygonzm0|4326|PolyhedralSurface|0|KO-BKO curvepolygonzm0|4326|Triangle|0|KO-BKO curvepolygonzm0|4326|Tin|0|KO-BKO curvepolygonzm0|4326|Point|2|KO-BKO curvepolygonzm0|4326|LineString|2|KO-BKO curvepolygonzm0|4326|Polygon|2|KO-BKO curvepolygonzm0|4326|MultiPoint|2|KO-BKO curvepolygonzm0|4326|MultiLineString|2|KO-BKO curvepolygonzm0|4326|MultiPolygon|2|KO-BKO curvepolygonzm0|4326|GeometryCollection|2|KO-BKO curvepolygonzm0|4326|CircularString|2|KO-BKO curvepolygonzm0|4326|CompoundCurve|2|KO-BKO curvepolygonzm0|4326|CurvePolygon|2|KO-BKO curvepolygonzm0|4326|MultiCurve|2|KO-BKO curvepolygonzm0|4326|MultiSurface|2|KO-BKO curvepolygonzm0|4326|PolyhedralSurface|2|KO-BKO curvepolygonzm0|4326|Triangle|2|KO-BKO curvepolygonzm0|4326|Point|1|KO-BKO curvepolygonzm0|4326|LineString|1|KO-BKO curvepolygonzm0|4326|Polygon|1|KO-BKO curvepolygonzm0|4326|MultiPoint|1|KO-BKO curvepolygonzm0|4326|MultiLineString|1|KO-BKO curvepolygonzm0|4326|MultiPolygon|1|KO-BKO curvepolygonzm0|4326|GeometryCollection|1|KO-BKO curvepolygonzm0|4326|CircularString|1|KO-BKO curvepolygonzm0|4326|CompoundCurve|1|KO-BKO curvepolygonzm0|4326|CurvePolygon|1|KO-BKO curvepolygonzm0|4326|MultiCurve|1|KO-BKO curvepolygonzm0|4326|MultiSurface|1|KO-BKO curvepolygonzm0|4326|PolyhedralSurface|1|KO-BKO curvepolygonzm0|4326|Triangle|1|KO-BKO curvepolygonzm0|4326|Point|3|KO-BKO curvepolygonzm0|4326|LineString|3|KO-BKO curvepolygonzm0|4326|Polygon|3|KO-BKO curvepolygonzm0|4326|MultiPoint|3|KO-BKO curvepolygonzm0|4326|MultiLineString|3|KO-BKO curvepolygonzm0|4326|MultiPolygon|3|KO-BKO curvepolygonzm0|4326|GeometryCollection|3|KO-BKO curvepolygonzm0|4326|CircularString|3|KO-BKO curvepolygonzm0|4326|CompoundCurve|3|KO-BKO curvepolygonzm0|4326|CurvePolygon|3|OK-BOK curvepolygonzm0|4326|MultiCurve|3|KO-BKO curvepolygonzm0|4326|MultiSurface|3|KO-BKO curvepolygonzm0|4326|PolyhedralSurface|3|KO-BKO curvepolygonzm0|4326|Triangle|3|KO-BKO curvepolygonzm0||COUNT|4| curvepolygonzm4326|0|Point|0|KO-BKO curvepolygonzm4326|0|LineString|0|KO-BKO curvepolygonzm4326|0|Polygon|0|KO-BKO curvepolygonzm4326|0|MultiPoint|0|KO-BKO curvepolygonzm4326|0|MultiLineString|0|KO-BKO curvepolygonzm4326|0|MultiPolygon|0|KO-BKO curvepolygonzm4326|0|GeometryCollection|0|KO-BKO curvepolygonzm4326|0|CircularString|0|KO-BKO curvepolygonzm4326|0|CompoundCurve|0|KO-BKO curvepolygonzm4326|0|CurvePolygon|0|KO-BKO curvepolygonzm4326|0|MultiCurve|0|KO-BKO curvepolygonzm4326|0|MultiSurface|0|KO-BKO curvepolygonzm4326|0|PolyhedralSurface|0|KO-BKO curvepolygonzm4326|0|Triangle|0|KO-BKO curvepolygonzm4326|0|Tin|0|KO-BKO curvepolygonzm4326|0|Point|2|KO-BKO curvepolygonzm4326|0|LineString|2|KO-BKO curvepolygonzm4326|0|Polygon|2|KO-BKO curvepolygonzm4326|0|MultiPoint|2|KO-BKO curvepolygonzm4326|0|MultiLineString|2|KO-BKO curvepolygonzm4326|0|MultiPolygon|2|KO-BKO curvepolygonzm4326|0|GeometryCollection|2|KO-BKO curvepolygonzm4326|0|CircularString|2|KO-BKO curvepolygonzm4326|0|CompoundCurve|2|KO-BKO curvepolygonzm4326|0|CurvePolygon|2|KO-BKO curvepolygonzm4326|0|MultiCurve|2|KO-BKO curvepolygonzm4326|0|MultiSurface|2|KO-BKO curvepolygonzm4326|0|PolyhedralSurface|2|KO-BKO curvepolygonzm4326|0|Triangle|2|KO-BKO curvepolygonzm4326|0|Point|1|KO-BKO curvepolygonzm4326|0|LineString|1|KO-BKO curvepolygonzm4326|0|Polygon|1|KO-BKO curvepolygonzm4326|0|MultiPoint|1|KO-BKO curvepolygonzm4326|0|MultiLineString|1|KO-BKO curvepolygonzm4326|0|MultiPolygon|1|KO-BKO curvepolygonzm4326|0|GeometryCollection|1|KO-BKO curvepolygonzm4326|0|CircularString|1|KO-BKO curvepolygonzm4326|0|CompoundCurve|1|KO-BKO curvepolygonzm4326|0|CurvePolygon|1|KO-BKO curvepolygonzm4326|0|MultiCurve|1|KO-BKO curvepolygonzm4326|0|MultiSurface|1|KO-BKO curvepolygonzm4326|0|PolyhedralSurface|1|KO-BKO curvepolygonzm4326|0|Triangle|1|KO-BKO curvepolygonzm4326|0|Point|3|KO-BKO curvepolygonzm4326|0|LineString|3|KO-BKO curvepolygonzm4326|0|Polygon|3|KO-BKO curvepolygonzm4326|0|MultiPoint|3|KO-BKO curvepolygonzm4326|0|MultiLineString|3|KO-BKO curvepolygonzm4326|0|MultiPolygon|3|KO-BKO curvepolygonzm4326|0|GeometryCollection|3|KO-BKO curvepolygonzm4326|0|CircularString|3|KO-BKO curvepolygonzm4326|0|CompoundCurve|3|KO-BKO curvepolygonzm4326|0|CurvePolygon|3|KO-BKO curvepolygonzm4326|0|MultiCurve|3|KO-BKO curvepolygonzm4326|0|MultiSurface|3|KO-BKO curvepolygonzm4326|0|PolyhedralSurface|3|KO-BKO curvepolygonzm4326|0|Triangle|3|KO-BKO curvepolygonzm4326|4326|Point|0|KO-BKO curvepolygonzm4326|4326|LineString|0|KO-BKO curvepolygonzm4326|4326|Polygon|0|KO-BKO curvepolygonzm4326|4326|MultiPoint|0|KO-BKO curvepolygonzm4326|4326|MultiLineString|0|KO-BKO curvepolygonzm4326|4326|MultiPolygon|0|KO-BKO curvepolygonzm4326|4326|GeometryCollection|0|KO-BKO curvepolygonzm4326|4326|CircularString|0|KO-BKO curvepolygonzm4326|4326|CompoundCurve|0|KO-BKO curvepolygonzm4326|4326|CurvePolygon|0|KO-BKO curvepolygonzm4326|4326|MultiCurve|0|KO-BKO curvepolygonzm4326|4326|MultiSurface|0|KO-BKO curvepolygonzm4326|4326|PolyhedralSurface|0|KO-BKO curvepolygonzm4326|4326|Triangle|0|KO-BKO curvepolygonzm4326|4326|Tin|0|KO-BKO curvepolygonzm4326|4326|Point|2|KO-BKO curvepolygonzm4326|4326|LineString|2|KO-BKO curvepolygonzm4326|4326|Polygon|2|KO-BKO curvepolygonzm4326|4326|MultiPoint|2|KO-BKO curvepolygonzm4326|4326|MultiLineString|2|KO-BKO curvepolygonzm4326|4326|MultiPolygon|2|KO-BKO curvepolygonzm4326|4326|GeometryCollection|2|KO-BKO curvepolygonzm4326|4326|CircularString|2|KO-BKO curvepolygonzm4326|4326|CompoundCurve|2|KO-BKO curvepolygonzm4326|4326|CurvePolygon|2|KO-BKO curvepolygonzm4326|4326|MultiCurve|2|KO-BKO curvepolygonzm4326|4326|MultiSurface|2|KO-BKO curvepolygonzm4326|4326|PolyhedralSurface|2|KO-BKO curvepolygonzm4326|4326|Triangle|2|KO-BKO curvepolygonzm4326|4326|Point|1|KO-BKO curvepolygonzm4326|4326|LineString|1|KO-BKO curvepolygonzm4326|4326|Polygon|1|KO-BKO curvepolygonzm4326|4326|MultiPoint|1|KO-BKO curvepolygonzm4326|4326|MultiLineString|1|KO-BKO curvepolygonzm4326|4326|MultiPolygon|1|KO-BKO curvepolygonzm4326|4326|GeometryCollection|1|KO-BKO curvepolygonzm4326|4326|CircularString|1|KO-BKO curvepolygonzm4326|4326|CompoundCurve|1|KO-BKO curvepolygonzm4326|4326|CurvePolygon|1|KO-BKO curvepolygonzm4326|4326|MultiCurve|1|KO-BKO curvepolygonzm4326|4326|MultiSurface|1|KO-BKO curvepolygonzm4326|4326|PolyhedralSurface|1|KO-BKO curvepolygonzm4326|4326|Triangle|1|KO-BKO curvepolygonzm4326|4326|Point|3|KO-BKO curvepolygonzm4326|4326|LineString|3|KO-BKO curvepolygonzm4326|4326|Polygon|3|KO-BKO curvepolygonzm4326|4326|MultiPoint|3|KO-BKO curvepolygonzm4326|4326|MultiLineString|3|KO-BKO curvepolygonzm4326|4326|MultiPolygon|3|KO-BKO curvepolygonzm4326|4326|GeometryCollection|3|KO-BKO curvepolygonzm4326|4326|CircularString|3|KO-BKO curvepolygonzm4326|4326|CompoundCurve|3|KO-BKO curvepolygonzm4326|4326|CurvePolygon|3|OK-BOK curvepolygonzm4326|4326|MultiCurve|3|KO-BKO curvepolygonzm4326|4326|MultiSurface|3|KO-BKO curvepolygonzm4326|4326|PolyhedralSurface|3|KO-BKO curvepolygonzm4326|4326|Triangle|3|KO-BKO curvepolygonzm4326||COUNT|2| geometry|0|Point|0|OK-BOK-GOK-BGOK geometry|0|LineString|0|OK-BOK-GOK-BGOK geometry|0|Polygon|0|OK-BOK-GOK-BGOK geometry|0|MultiPoint|0|OK-BOK-GOK-BGOK geometry|0|MultiLineString|0|OK-BOK-GOK-BGOK geometry|0|MultiPolygon|0|OK-BOK-GOK-BGOK geometry|0|GeometryCollection|0|OK-BOK-GOK-BGOK geometry|0|CircularString|0|OK-BOK-GKO:-BGKO geometry|0|CompoundCurve|0|OK-BOK-GKO:-BGKO geometry|0|CurvePolygon|0|OK-BOK-GKO:-BGKO geometry|0|MultiCurve|0|OK-BOK-GKO:-BGKO geometry|0|MultiSurface|0|OK-BOK-GKO:-BGKO geometry|0|PolyhedralSurface|0|OK-BOK-GKO:-BGKO geometry|0|Triangle|0|OK-BOK-GKO:-BGKO geometry|0|Tin|0|OK-BOK-GKO:-BGKO geometry|0|Point|2|KO-BKO-GKO:-BGKO geometry|0|LineString|2|KO-BKO-GKO:-BGKO geometry|0|Polygon|2|KO-BKO-GKO:-BGKO geometry|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometry|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometry|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometry|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometry|0|CircularString|2|KO-BKO-GKO:-BGKO geometry|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometry|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometry|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometry|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometry|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometry|0|Triangle|2|KO-BKO-GKO:-BGKO geometry|0|Point|1|KO-BKO-GKO:-BGKO geometry|0|LineString|1|KO-BKO-GKO:-BGKO geometry|0|Polygon|1|KO-BKO-GKO:-BGKO geometry|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometry|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometry|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometry|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometry|0|CircularString|1|KO-BKO-GKO:-BGKO geometry|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometry|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometry|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometry|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometry|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometry|0|Triangle|1|KO-BKO-GKO:-BGKO geometry|0|Point|3|KO-BKO-GKO:-BGKO geometry|0|LineString|3|KO-BKO-GKO:-BGKO geometry|0|Polygon|3|KO-BKO-GKO:-BGKO geometry|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometry|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometry|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometry|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometry|0|CircularString|3|KO-BKO-GKO:-BGKO geometry|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometry|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometry|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometry|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometry|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometry|0|Triangle|3|KO-BKO-GKO:-BGKO geometry|4326|Point|0|OK-BOK-GOK-BGOK geometry|4326|LineString|0|OK-BOK-GOK-BGOK geometry|4326|Polygon|0|OK-BOK-GOK-BGOK geometry|4326|MultiPoint|0|OK-BOK-GOK-BGOK geometry|4326|MultiLineString|0|OK-BOK-GOK-BGOK geometry|4326|MultiPolygon|0|OK-BOK-GOK-BGOK geometry|4326|GeometryCollection|0|OK-BOK-GOK-BGOK geometry|4326|CircularString|0|OK-BOK-GKO:-BGKO geometry|4326|CompoundCurve|0|OK-BOK-GKO:-BGKO geometry|4326|CurvePolygon|0|OK-BOK-GKO:-BGKO geometry|4326|MultiCurve|0|OK-BOK-GKO:-BGKO geometry|4326|MultiSurface|0|OK-BOK-GKO:-BGKO geometry|4326|PolyhedralSurface|0|OK-BOK-GKO:-BGKO geometry|4326|Triangle|0|OK-BOK-GKO:-BGKO geometry|4326|Tin|0|OK-BOK-GKO:-BGKO geometry|4326|Point|2|KO-BKO-GKO:-BGKO geometry|4326|LineString|2|KO-BKO-GKO:-BGKO geometry|4326|Polygon|2|KO-BKO-GKO:-BGKO geometry|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometry|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometry|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometry|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometry|4326|CircularString|2|KO-BKO-GKO:-BGKO geometry|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometry|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometry|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometry|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometry|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometry|4326|Triangle|2|KO-BKO-GKO:-BGKO geometry|4326|Point|1|KO-BKO-GKO:-BGKO geometry|4326|LineString|1|KO-BKO-GKO:-BGKO geometry|4326|Polygon|1|KO-BKO-GKO:-BGKO geometry|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometry|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometry|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometry|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometry|4326|CircularString|1|KO-BKO-GKO:-BGKO geometry|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometry|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometry|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometry|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometry|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometry|4326|Triangle|1|KO-BKO-GKO:-BGKO geometry|4326|Point|3|KO-BKO-GKO:-BGKO geometry|4326|LineString|3|KO-BKO-GKO:-BGKO geometry|4326|Polygon|3|KO-BKO-GKO:-BGKO geometry|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometry|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometry|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometry|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometry|4326|CircularString|3|KO-BKO-GKO:-BGKO geometry|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometry|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometry|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometry|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometry|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometry|4326|Triangle|3|KO-BKO-GKO:-BGKO geometry||COUNT|60| geometry||GCOUNT|28| geometry0|0|Point|0|OK-BOK-GOK-BGOK geometry0|0|LineString|0|OK-BOK-GOK-BGOK geometry0|0|Polygon|0|OK-BOK-GOK-BGOK geometry0|0|MultiPoint|0|OK-BOK-GOK-BGOK geometry0|0|MultiLineString|0|OK-BOK-GOK-BGOK geometry0|0|MultiPolygon|0|OK-BOK-GOK-BGOK geometry0|0|GeometryCollection|0|OK-BOK-GOK-BGOK geometry0|0|CircularString|0|OK-BOK-GKO:-BGKO geometry0|0|CompoundCurve|0|OK-BOK-GKO:-BGKO geometry0|0|CurvePolygon|0|OK-BOK-GKO:-BGKO geometry0|0|MultiCurve|0|OK-BOK-GKO:-BGKO geometry0|0|MultiSurface|0|OK-BOK-GKO:-BGKO geometry0|0|PolyhedralSurface|0|OK-BOK-GKO:-BGKO geometry0|0|Triangle|0|OK-BOK-GKO:-BGKO geometry0|0|Tin|0|OK-BOK-GKO:-BGKO geometry0|0|Point|2|KO-BKO-GKO:-BGKO geometry0|0|LineString|2|KO-BKO-GKO:-BGKO geometry0|0|Polygon|2|KO-BKO-GKO:-BGKO geometry0|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometry0|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometry0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometry0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometry0|0|CircularString|2|KO-BKO-GKO:-BGKO geometry0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometry0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometry0|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometry0|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometry0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometry0|0|Triangle|2|KO-BKO-GKO:-BGKO geometry0|0|Point|1|KO-BKO-GKO:-BGKO geometry0|0|LineString|1|KO-BKO-GKO:-BGKO geometry0|0|Polygon|1|KO-BKO-GKO:-BGKO geometry0|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometry0|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometry0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometry0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometry0|0|CircularString|1|KO-BKO-GKO:-BGKO geometry0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometry0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometry0|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometry0|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometry0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometry0|0|Triangle|1|KO-BKO-GKO:-BGKO geometry0|0|Point|3|KO-BKO-GKO:-BGKO geometry0|0|LineString|3|KO-BKO-GKO:-BGKO geometry0|0|Polygon|3|KO-BKO-GKO:-BGKO geometry0|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometry0|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometry0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometry0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometry0|0|CircularString|3|KO-BKO-GKO:-BGKO geometry0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometry0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometry0|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometry0|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometry0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometry0|0|Triangle|3|KO-BKO-GKO:-BGKO geometry0|4326|Point|0|OK-BOK-GOK-BGOK geometry0|4326|LineString|0|OK-BOK-GOK-BGOK geometry0|4326|Polygon|0|OK-BOK-GOK-BGOK geometry0|4326|MultiPoint|0|OK-BOK-GOK-BGOK geometry0|4326|MultiLineString|0|OK-BOK-GOK-BGOK geometry0|4326|MultiPolygon|0|OK-BOK-GOK-BGOK geometry0|4326|GeometryCollection|0|OK-BOK-GOK-BGOK geometry0|4326|CircularString|0|OK-BOK-GKO:-BGKO geometry0|4326|CompoundCurve|0|OK-BOK-GKO:-BGKO geometry0|4326|CurvePolygon|0|OK-BOK-GKO:-BGKO geometry0|4326|MultiCurve|0|OK-BOK-GKO:-BGKO geometry0|4326|MultiSurface|0|OK-BOK-GKO:-BGKO geometry0|4326|PolyhedralSurface|0|OK-BOK-GKO:-BGKO geometry0|4326|Triangle|0|OK-BOK-GKO:-BGKO geometry0|4326|Tin|0|OK-BOK-GKO:-BGKO geometry0|4326|Point|2|KO-BKO-GKO:-BGKO geometry0|4326|LineString|2|KO-BKO-GKO:-BGKO geometry0|4326|Polygon|2|KO-BKO-GKO:-BGKO geometry0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometry0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometry0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometry0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometry0|4326|CircularString|2|KO-BKO-GKO:-BGKO geometry0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometry0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometry0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometry0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometry0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometry0|4326|Triangle|2|KO-BKO-GKO:-BGKO geometry0|4326|Point|1|KO-BKO-GKO:-BGKO geometry0|4326|LineString|1|KO-BKO-GKO:-BGKO geometry0|4326|Polygon|1|KO-BKO-GKO:-BGKO geometry0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometry0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometry0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometry0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometry0|4326|CircularString|1|KO-BKO-GKO:-BGKO geometry0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometry0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometry0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometry0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometry0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometry0|4326|Triangle|1|KO-BKO-GKO:-BGKO geometry0|4326|Point|3|KO-BKO-GKO:-BGKO geometry0|4326|LineString|3|KO-BKO-GKO:-BGKO geometry0|4326|Polygon|3|KO-BKO-GKO:-BGKO geometry0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometry0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometry0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometry0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometry0|4326|CircularString|3|KO-BKO-GKO:-BGKO geometry0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometry0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometry0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometry0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometry0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometry0|4326|Triangle|3|KO-BKO-GKO:-BGKO geometry0||COUNT|60| geometry0||GCOUNT|28| geometry4326|0|Point|0|KO-BKO-GOK-BGOK geometry4326|0|LineString|0|KO-BKO-GOK-BGOK geometry4326|0|Polygon|0|KO-BKO-GOK-BGOK geometry4326|0|MultiPoint|0|KO-BKO-GOK-BGOK geometry4326|0|MultiLineString|0|KO-BKO-GOK-BGOK geometry4326|0|MultiPolygon|0|KO-BKO-GOK-BGOK geometry4326|0|GeometryCollection|0|KO-BKO-GOK-BGOK geometry4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometry4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometry4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometry4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometry4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometry4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometry4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometry4326|0|Tin|0|KO-BKO-GKO:-BGKO geometry4326|0|Point|2|KO-BKO-GKO:-BGKO geometry4326|0|LineString|2|KO-BKO-GKO:-BGKO geometry4326|0|Polygon|2|KO-BKO-GKO:-BGKO geometry4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometry4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometry4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometry4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometry4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometry4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometry4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometry4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometry4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometry4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometry4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometry4326|0|Point|1|KO-BKO-GKO:-BGKO geometry4326|0|LineString|1|KO-BKO-GKO:-BGKO geometry4326|0|Polygon|1|KO-BKO-GKO:-BGKO geometry4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometry4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometry4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometry4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometry4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometry4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometry4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometry4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometry4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometry4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometry4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometry4326|0|Point|3|KO-BKO-GKO:-BGKO geometry4326|0|LineString|3|KO-BKO-GKO:-BGKO geometry4326|0|Polygon|3|KO-BKO-GKO:-BGKO geometry4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometry4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometry4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometry4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometry4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometry4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometry4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometry4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometry4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometry4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometry4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometry4326|4326|Point|0|OK-BOK-GOK-BGOK geometry4326|4326|LineString|0|OK-BOK-GOK-BGOK geometry4326|4326|Polygon|0|OK-BOK-GOK-BGOK geometry4326|4326|MultiPoint|0|OK-BOK-GOK-BGOK geometry4326|4326|MultiLineString|0|OK-BOK-GOK-BGOK geometry4326|4326|MultiPolygon|0|OK-BOK-GOK-BGOK geometry4326|4326|GeometryCollection|0|OK-BOK-GOK-BGOK geometry4326|4326|CircularString|0|OK-BOK-GKO:-BGKO geometry4326|4326|CompoundCurve|0|OK-BOK-GKO:-BGKO geometry4326|4326|CurvePolygon|0|OK-BOK-GKO:-BGKO geometry4326|4326|MultiCurve|0|OK-BOK-GKO:-BGKO geometry4326|4326|MultiSurface|0|OK-BOK-GKO:-BGKO geometry4326|4326|PolyhedralSurface|0|OK-BOK-GKO:-BGKO geometry4326|4326|Triangle|0|OK-BOK-GKO:-BGKO geometry4326|4326|Tin|0|OK-BOK-GKO:-BGKO geometry4326|4326|Point|2|KO-BKO-GKO:-BGKO geometry4326|4326|LineString|2|KO-BKO-GKO:-BGKO geometry4326|4326|Polygon|2|KO-BKO-GKO:-BGKO geometry4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometry4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometry4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometry4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometry4326|4326|CircularString|2|KO-BKO-GKO:-BGKO geometry4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometry4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometry4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometry4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometry4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometry4326|4326|Triangle|2|KO-BKO-GKO:-BGKO geometry4326|4326|Point|1|KO-BKO-GKO:-BGKO geometry4326|4326|LineString|1|KO-BKO-GKO:-BGKO geometry4326|4326|Polygon|1|KO-BKO-GKO:-BGKO geometry4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometry4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometry4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometry4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometry4326|4326|CircularString|1|KO-BKO-GKO:-BGKO geometry4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometry4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometry4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometry4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometry4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometry4326|4326|Triangle|1|KO-BKO-GKO:-BGKO geometry4326|4326|Point|3|KO-BKO-GKO:-BGKO geometry4326|4326|LineString|3|KO-BKO-GKO:-BGKO geometry4326|4326|Polygon|3|KO-BKO-GKO:-BGKO geometry4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometry4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometry4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometry4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometry4326|4326|CircularString|3|KO-BKO-GKO:-BGKO geometry4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometry4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometry4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometry4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometry4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometry4326|4326|Triangle|3|KO-BKO-GKO:-BGKO geometry4326||COUNT|30| geometry4326||GCOUNT|28| geometrycollection|0|Point|0|KO-BKO-GKO:-BGKO geometrycollection|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollection|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollection|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollection|0|GeometryCollection|0|OK-BOK-GOK-BGOK geometrycollection|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollection|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollection|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollection|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollection|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollection|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollection|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollection|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollection|0|Point|2|KO-BKO-GKO:-BGKO geometrycollection|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollection|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollection|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollection|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollection|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollection|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollection|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollection|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollection|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollection|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollection|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollection|0|Point|1|KO-BKO-GKO:-BGKO geometrycollection|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollection|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollection|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollection|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollection|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollection|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollection|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollection|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollection|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollection|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollection|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollection|0|Point|3|KO-BKO-GKO:-BGKO geometrycollection|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollection|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollection|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollection|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollection|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollection|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollection|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollection|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollection|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollection|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollection|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollection|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollection|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollection|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollection|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollection|4326|GeometryCollection|0|OK-BOK-GOK-BGOK geometrycollection|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollection|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollection|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollection|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollection|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollection|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollection|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollection|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollection|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollection|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollection|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollection|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollection|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollection|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollection|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollection|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollection|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollection|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollection|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollection|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollection|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollection|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollection|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollection|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollection|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollection|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollection|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollection|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollection|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollection|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollection|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollection|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollection|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollection|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollection||COUNT|4| geometrycollection||GCOUNT|4| geometrycollection0|0|Point|0|KO-BKO-GKO:-BGKO geometrycollection0|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollection0|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollection0|0|GeometryCollection|0|OK-BOK-GOK-BGOK geometrycollection0|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollection0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollection0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollection0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollection0|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollection0|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollection0|0|Point|2|KO-BKO-GKO:-BGKO geometrycollection0|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollection0|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollection0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollection0|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollection0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollection0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollection0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollection0|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollection0|0|Point|1|KO-BKO-GKO:-BGKO geometrycollection0|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollection0|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollection0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollection0|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollection0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollection0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollection0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollection0|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollection0|0|Point|3|KO-BKO-GKO:-BGKO geometrycollection0|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollection0|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollection0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollection0|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollection0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollection0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollection0|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollection0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollection0|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|GeometryCollection|0|OK-BOK-GOK-BGOK geometrycollection0|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollection0|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollection0|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollection0|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollection0|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollection0||COUNT|4| geometrycollection0||GCOUNT|4| geometrycollection4326|0|Point|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|GeometryCollection|0|KO-BKO-GOK-BGOK geometrycollection4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollection4326|0|Point|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollection4326|0|Point|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollection4326|0|Point|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollection4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|GeometryCollection|0|OK-BOK-GOK-BGOK geometrycollection4326|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollection4326|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollection4326||COUNT|2| geometrycollection4326||GCOUNT|4| geometrycollectionm|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionm|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionm|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|GeometryCollection|1|OK-BOK-GOK-BGOK geometrycollectionm|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionm|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|GeometryCollection|1|OK-BOK-GOK-BGOK geometrycollectionm|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionm||COUNT|4| geometrycollectionm||GCOUNT|4| geometrycollectionm0|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|GeometryCollection|1|OK-BOK-GOK-BGOK geometrycollectionm0|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm0|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|GeometryCollection|1|OK-BOK-GOK-BGOK geometrycollectionm0|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm0|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionm0||COUNT|4| geometrycollectionm0||GCOUNT|4| geometrycollectionm4326|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|GeometryCollection|1|KO-BKO-GOK-BGOK geometrycollectionm4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|GeometryCollection|1|OK-BOK-GOK-BGOK geometrycollectionm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionm4326||COUNT|2| geometrycollectionm4326||GCOUNT|4| geometrycollectionz|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionz|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|GeometryCollection|2|OK-BOK-GOK-BGOK geometrycollectionz|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionz|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionz|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|GeometryCollection|2|OK-BOK-GOK-BGOK geometrycollectionz|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionz||COUNT|4| geometrycollectionz||GCOUNT|4| geometrycollectionz0|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|GeometryCollection|2|OK-BOK-GOK-BGOK geometrycollectionz0|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz0|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|GeometryCollection|2|OK-BOK-GOK-BGOK geometrycollectionz0|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz0|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionz0||COUNT|4| geometrycollectionz0||GCOUNT|4| geometrycollectionz4326|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|GeometryCollection|2|KO-BKO-GOK-BGOK geometrycollectionz4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|GeometryCollection|2|OK-BOK-GOK-BGOK geometrycollectionz4326|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionz4326||COUNT|2| geometrycollectionz4326||GCOUNT|4| geometrycollectionzm|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|GeometryCollection|3|OK-BOK-GOK-BGOK geometrycollectionzm|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|GeometryCollection|3|OK-BOK-GOK-BGOK geometrycollectionzm|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionzm||COUNT|4| geometrycollectionzm||GCOUNT|4| geometrycollectionzm0|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|GeometryCollection|3|OK-BOK-GOK-BGOK geometrycollectionzm0|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|GeometryCollection|3|OK-BOK-GOK-BGOK geometrycollectionzm0|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm0|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionzm0||COUNT|4| geometrycollectionzm0||GCOUNT|4| geometrycollectionzm4326|0|Point|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Point|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Point|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Point|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|GeometryCollection|3|KO-BKO-GOK-BGOK geometrycollectionzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Point|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Point|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Point|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Point|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|LineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|GeometryCollection|3|OK-BOK-GOK-BGOK geometrycollectionzm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrycollectionzm4326||COUNT|2| geometrycollectionzm4326||GCOUNT|4| geometrym|0|Point|0|KO-BKO-GKO:-BGKO geometrym|0|LineString|0|KO-BKO-GKO:-BGKO geometrym|0|Polygon|0|KO-BKO-GKO:-BGKO geometrym|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrym|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrym|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrym|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrym|0|CircularString|0|KO-BKO-GKO:-BGKO geometrym|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrym|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrym|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrym|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrym|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrym|0|Triangle|0|KO-BKO-GKO:-BGKO geometrym|0|Tin|0|KO-BKO-GKO:-BGKO geometrym|0|Point|2|KO-BKO-GKO:-BGKO geometrym|0|LineString|2|KO-BKO-GKO:-BGKO geometrym|0|Polygon|2|KO-BKO-GKO:-BGKO geometrym|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrym|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrym|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrym|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrym|0|CircularString|2|KO-BKO-GKO:-BGKO geometrym|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrym|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrym|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrym|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrym|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrym|0|Triangle|2|KO-BKO-GKO:-BGKO geometrym|0|Point|1|OK-BOK-GOK-BGOK geometrym|0|LineString|1|OK-BOK-GOK-BGOK geometrym|0|Polygon|1|OK-BOK-GOK-BGOK geometrym|0|MultiPoint|1|OK-BOK-GOK-BGOK geometrym|0|MultiLineString|1|OK-BOK-GOK-BGOK geometrym|0|MultiPolygon|1|OK-BOK-GOK-BGOK geometrym|0|GeometryCollection|1|OK-BOK-GOK-BGOK geometrym|0|CircularString|1|OK-BOK-GKO:-BGKO geometrym|0|CompoundCurve|1|OK-BOK-GKO:-BGKO geometrym|0|CurvePolygon|1|OK-BOK-GKO:-BGKO geometrym|0|MultiCurve|1|OK-BOK-GKO:-BGKO geometrym|0|MultiSurface|1|OK-BOK-GKO:-BGKO geometrym|0|PolyhedralSurface|1|OK-BOK-GKO:-BGKO geometrym|0|Triangle|1|OK-BOK-GKO:-BGKO geometrym|0|Point|3|KO-BKO-GKO:-BGKO geometrym|0|LineString|3|KO-BKO-GKO:-BGKO geometrym|0|Polygon|3|KO-BKO-GKO:-BGKO geometrym|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrym|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrym|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrym|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrym|0|CircularString|3|KO-BKO-GKO:-BGKO geometrym|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrym|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrym|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrym|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrym|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrym|0|Triangle|3|KO-BKO-GKO:-BGKO geometrym|4326|Point|0|KO-BKO-GKO:-BGKO geometrym|4326|LineString|0|KO-BKO-GKO:-BGKO geometrym|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrym|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrym|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrym|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrym|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrym|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrym|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrym|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrym|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrym|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrym|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrym|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrym|4326|Tin|0|KO-BKO-GKO:-BGKO geometrym|4326|Point|2|KO-BKO-GKO:-BGKO geometrym|4326|LineString|2|KO-BKO-GKO:-BGKO geometrym|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrym|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrym|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrym|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrym|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrym|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrym|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrym|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrym|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrym|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrym|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrym|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrym|4326|Point|1|OK-BOK-GOK-BGOK geometrym|4326|LineString|1|OK-BOK-GOK-BGOK geometrym|4326|Polygon|1|OK-BOK-GOK-BGOK geometrym|4326|MultiPoint|1|OK-BOK-GOK-BGOK geometrym|4326|MultiLineString|1|OK-BOK-GOK-BGOK geometrym|4326|MultiPolygon|1|OK-BOK-GOK-BGOK geometrym|4326|GeometryCollection|1|OK-BOK-GOK-BGOK geometrym|4326|CircularString|1|OK-BOK-GKO:-BGKO geometrym|4326|CompoundCurve|1|OK-BOK-GKO:-BGKO geometrym|4326|CurvePolygon|1|OK-BOK-GKO:-BGKO geometrym|4326|MultiCurve|1|OK-BOK-GKO:-BGKO geometrym|4326|MultiSurface|1|OK-BOK-GKO:-BGKO geometrym|4326|PolyhedralSurface|1|OK-BOK-GKO:-BGKO geometrym|4326|Triangle|1|OK-BOK-GKO:-BGKO geometrym|4326|Point|3|KO-BKO-GKO:-BGKO geometrym|4326|LineString|3|KO-BKO-GKO:-BGKO geometrym|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrym|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrym|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrym|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrym|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrym|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrym|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrym|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrym|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrym|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrym|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrym|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrym||COUNT|56| geometrym||GCOUNT|28| geometrym0|0|Point|0|KO-BKO-GKO:-BGKO geometrym0|0|LineString|0|KO-BKO-GKO:-BGKO geometrym0|0|Polygon|0|KO-BKO-GKO:-BGKO geometrym0|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrym0|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrym0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrym0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrym0|0|CircularString|0|KO-BKO-GKO:-BGKO geometrym0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrym0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrym0|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrym0|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrym0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrym0|0|Triangle|0|KO-BKO-GKO:-BGKO geometrym0|0|Tin|0|KO-BKO-GKO:-BGKO geometrym0|0|Point|2|KO-BKO-GKO:-BGKO geometrym0|0|LineString|2|KO-BKO-GKO:-BGKO geometrym0|0|Polygon|2|KO-BKO-GKO:-BGKO geometrym0|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrym0|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrym0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrym0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrym0|0|CircularString|2|KO-BKO-GKO:-BGKO geometrym0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrym0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrym0|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrym0|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrym0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrym0|0|Triangle|2|KO-BKO-GKO:-BGKO geometrym0|0|Point|1|OK-BOK-GOK-BGOK geometrym0|0|LineString|1|OK-BOK-GOK-BGOK geometrym0|0|Polygon|1|OK-BOK-GOK-BGOK geometrym0|0|MultiPoint|1|OK-BOK-GOK-BGOK geometrym0|0|MultiLineString|1|OK-BOK-GOK-BGOK geometrym0|0|MultiPolygon|1|OK-BOK-GOK-BGOK geometrym0|0|GeometryCollection|1|OK-BOK-GOK-BGOK geometrym0|0|CircularString|1|OK-BOK-GKO:-BGKO geometrym0|0|CompoundCurve|1|OK-BOK-GKO:-BGKO geometrym0|0|CurvePolygon|1|OK-BOK-GKO:-BGKO geometrym0|0|MultiCurve|1|OK-BOK-GKO:-BGKO geometrym0|0|MultiSurface|1|OK-BOK-GKO:-BGKO geometrym0|0|PolyhedralSurface|1|OK-BOK-GKO:-BGKO geometrym0|0|Triangle|1|OK-BOK-GKO:-BGKO geometrym0|0|Point|3|KO-BKO-GKO:-BGKO geometrym0|0|LineString|3|KO-BKO-GKO:-BGKO geometrym0|0|Polygon|3|KO-BKO-GKO:-BGKO geometrym0|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrym0|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrym0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrym0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrym0|0|CircularString|3|KO-BKO-GKO:-BGKO geometrym0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrym0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrym0|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrym0|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrym0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrym0|0|Triangle|3|KO-BKO-GKO:-BGKO geometrym0|4326|Point|0|KO-BKO-GKO:-BGKO geometrym0|4326|LineString|0|KO-BKO-GKO:-BGKO geometrym0|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrym0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrym0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrym0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrym0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrym0|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrym0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrym0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrym0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrym0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrym0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrym0|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrym0|4326|Tin|0|KO-BKO-GKO:-BGKO geometrym0|4326|Point|2|KO-BKO-GKO:-BGKO geometrym0|4326|LineString|2|KO-BKO-GKO:-BGKO geometrym0|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrym0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrym0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrym0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrym0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrym0|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrym0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrym0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrym0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrym0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrym0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrym0|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrym0|4326|Point|1|OK-BOK-GOK-BGOK geometrym0|4326|LineString|1|OK-BOK-GOK-BGOK geometrym0|4326|Polygon|1|OK-BOK-GOK-BGOK geometrym0|4326|MultiPoint|1|OK-BOK-GOK-BGOK geometrym0|4326|MultiLineString|1|OK-BOK-GOK-BGOK geometrym0|4326|MultiPolygon|1|OK-BOK-GOK-BGOK geometrym0|4326|GeometryCollection|1|OK-BOK-GOK-BGOK geometrym0|4326|CircularString|1|OK-BOK-GKO:-BGKO geometrym0|4326|CompoundCurve|1|OK-BOK-GKO:-BGKO geometrym0|4326|CurvePolygon|1|OK-BOK-GKO:-BGKO geometrym0|4326|MultiCurve|1|OK-BOK-GKO:-BGKO geometrym0|4326|MultiSurface|1|OK-BOK-GKO:-BGKO geometrym0|4326|PolyhedralSurface|1|OK-BOK-GKO:-BGKO geometrym0|4326|Triangle|1|OK-BOK-GKO:-BGKO geometrym0|4326|Point|3|KO-BKO-GKO:-BGKO geometrym0|4326|LineString|3|KO-BKO-GKO:-BGKO geometrym0|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrym0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrym0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrym0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrym0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrym0|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrym0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrym0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrym0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrym0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrym0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrym0|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrym0||COUNT|56| geometrym0||GCOUNT|28| geometrym4326|0|Point|0|KO-BKO-GKO:-BGKO geometrym4326|0|LineString|0|KO-BKO-GKO:-BGKO geometrym4326|0|Polygon|0|KO-BKO-GKO:-BGKO geometrym4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometrym4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometrym4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrym4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrym4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometrym4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrym4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrym4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometrym4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometrym4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrym4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometrym4326|0|Tin|0|KO-BKO-GKO:-BGKO geometrym4326|0|Point|2|KO-BKO-GKO:-BGKO geometrym4326|0|LineString|2|KO-BKO-GKO:-BGKO geometrym4326|0|Polygon|2|KO-BKO-GKO:-BGKO geometrym4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometrym4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometrym4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrym4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrym4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometrym4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrym4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrym4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometrym4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometrym4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrym4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometrym4326|0|Point|1|KO-BKO-GOK-BGOK geometrym4326|0|LineString|1|KO-BKO-GOK-BGOK geometrym4326|0|Polygon|1|KO-BKO-GOK-BGOK geometrym4326|0|MultiPoint|1|KO-BKO-GOK-BGOK geometrym4326|0|MultiLineString|1|KO-BKO-GOK-BGOK geometrym4326|0|MultiPolygon|1|KO-BKO-GOK-BGOK geometrym4326|0|GeometryCollection|1|KO-BKO-GOK-BGOK geometrym4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometrym4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometrym4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometrym4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometrym4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometrym4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometrym4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometrym4326|0|Point|3|KO-BKO-GKO:-BGKO geometrym4326|0|LineString|3|KO-BKO-GKO:-BGKO geometrym4326|0|Polygon|3|KO-BKO-GKO:-BGKO geometrym4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometrym4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometrym4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrym4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrym4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometrym4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrym4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrym4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometrym4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometrym4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrym4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometrym4326|4326|Point|0|KO-BKO-GKO:-BGKO geometrym4326|4326|LineString|0|KO-BKO-GKO:-BGKO geometrym4326|4326|Polygon|0|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometrym4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometrym4326|4326|CircularString|0|KO-BKO-GKO:-BGKO geometrym4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometrym4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometrym4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometrym4326|4326|Triangle|0|KO-BKO-GKO:-BGKO geometrym4326|4326|Tin|0|KO-BKO-GKO:-BGKO geometrym4326|4326|Point|2|KO-BKO-GKO:-BGKO geometrym4326|4326|LineString|2|KO-BKO-GKO:-BGKO geometrym4326|4326|Polygon|2|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometrym4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometrym4326|4326|CircularString|2|KO-BKO-GKO:-BGKO geometrym4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometrym4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometrym4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometrym4326|4326|Triangle|2|KO-BKO-GKO:-BGKO geometrym4326|4326|Point|1|OK-BOK-GOK-BGOK geometrym4326|4326|LineString|1|OK-BOK-GOK-BGOK geometrym4326|4326|Polygon|1|OK-BOK-GOK-BGOK geometrym4326|4326|MultiPoint|1|OK-BOK-GOK-BGOK geometrym4326|4326|MultiLineString|1|OK-BOK-GOK-BGOK geometrym4326|4326|MultiPolygon|1|OK-BOK-GOK-BGOK geometrym4326|4326|GeometryCollection|1|OK-BOK-GOK-BGOK geometrym4326|4326|CircularString|1|OK-BOK-GKO:-BGKO geometrym4326|4326|CompoundCurve|1|OK-BOK-GKO:-BGKO geometrym4326|4326|CurvePolygon|1|OK-BOK-GKO:-BGKO geometrym4326|4326|MultiCurve|1|OK-BOK-GKO:-BGKO geometrym4326|4326|MultiSurface|1|OK-BOK-GKO:-BGKO geometrym4326|4326|PolyhedralSurface|1|OK-BOK-GKO:-BGKO geometrym4326|4326|Triangle|1|OK-BOK-GKO:-BGKO geometrym4326|4326|Point|3|KO-BKO-GKO:-BGKO geometrym4326|4326|LineString|3|KO-BKO-GKO:-BGKO geometrym4326|4326|Polygon|3|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometrym4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometrym4326|4326|CircularString|3|KO-BKO-GKO:-BGKO geometrym4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometrym4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometrym4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometrym4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometrym4326|4326|Triangle|3|KO-BKO-GKO:-BGKO geometrym4326||COUNT|28| geometrym4326||GCOUNT|28| geometryz|0|Point|0|KO-BKO-GKO:-BGKO geometryz|0|LineString|0|KO-BKO-GKO:-BGKO geometryz|0|Polygon|0|KO-BKO-GKO:-BGKO geometryz|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometryz|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometryz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryz|0|CircularString|0|KO-BKO-GKO:-BGKO geometryz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryz|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometryz|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometryz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryz|0|Triangle|0|KO-BKO-GKO:-BGKO geometryz|0|Tin|0|KO-BKO-GKO:-BGKO geometryz|0|Point|2|OK-BOK-GOK-BGOK geometryz|0|LineString|2|OK-BOK-GOK-BGOK geometryz|0|Polygon|2|OK-BOK-GOK-BGOK geometryz|0|MultiPoint|2|OK-BOK-GOK-BGOK geometryz|0|MultiLineString|2|OK-BOK-GOK-BGOK geometryz|0|MultiPolygon|2|OK-BOK-GOK-BGOK geometryz|0|GeometryCollection|2|OK-BOK-GOK-BGOK geometryz|0|CircularString|2|OK-BOK-GKO:-BGKO geometryz|0|CompoundCurve|2|OK-BOK-GKO:-BGKO geometryz|0|CurvePolygon|2|OK-BOK-GKO:-BGKO geometryz|0|MultiCurve|2|OK-BOK-GKO:-BGKO geometryz|0|MultiSurface|2|OK-BOK-GKO:-BGKO geometryz|0|PolyhedralSurface|2|OK-BOK-GKO:-BGKO geometryz|0|Triangle|2|OK-BOK-GKO:-BGKO geometryz|0|Point|1|KO-BKO-GKO:-BGKO geometryz|0|LineString|1|KO-BKO-GKO:-BGKO geometryz|0|Polygon|1|KO-BKO-GKO:-BGKO geometryz|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometryz|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometryz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryz|0|CircularString|1|KO-BKO-GKO:-BGKO geometryz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryz|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometryz|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometryz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryz|0|Triangle|1|KO-BKO-GKO:-BGKO geometryz|0|Point|3|KO-BKO-GKO:-BGKO geometryz|0|LineString|3|KO-BKO-GKO:-BGKO geometryz|0|Polygon|3|KO-BKO-GKO:-BGKO geometryz|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometryz|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometryz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometryz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometryz|0|CircularString|3|KO-BKO-GKO:-BGKO geometryz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometryz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometryz|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometryz|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometryz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometryz|0|Triangle|3|KO-BKO-GKO:-BGKO geometryz|4326|Point|0|KO-BKO-GKO:-BGKO geometryz|4326|LineString|0|KO-BKO-GKO:-BGKO geometryz|4326|Polygon|0|KO-BKO-GKO:-BGKO geometryz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometryz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometryz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryz|4326|CircularString|0|KO-BKO-GKO:-BGKO geometryz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometryz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometryz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryz|4326|Triangle|0|KO-BKO-GKO:-BGKO geometryz|4326|Tin|0|KO-BKO-GKO:-BGKO geometryz|4326|Point|2|OK-BOK-GOK-BGOK geometryz|4326|LineString|2|OK-BOK-GOK-BGOK geometryz|4326|Polygon|2|OK-BOK-GOK-BGOK geometryz|4326|MultiPoint|2|OK-BOK-GOK-BGOK geometryz|4326|MultiLineString|2|OK-BOK-GOK-BGOK geometryz|4326|MultiPolygon|2|OK-BOK-GOK-BGOK geometryz|4326|GeometryCollection|2|OK-BOK-GOK-BGOK geometryz|4326|CircularString|2|OK-BOK-GKO:-BGKO geometryz|4326|CompoundCurve|2|OK-BOK-GKO:-BGKO geometryz|4326|CurvePolygon|2|OK-BOK-GKO:-BGKO geometryz|4326|MultiCurve|2|OK-BOK-GKO:-BGKO geometryz|4326|MultiSurface|2|OK-BOK-GKO:-BGKO geometryz|4326|PolyhedralSurface|2|OK-BOK-GKO:-BGKO geometryz|4326|Triangle|2|OK-BOK-GKO:-BGKO geometryz|4326|Point|1|KO-BKO-GKO:-BGKO geometryz|4326|LineString|1|KO-BKO-GKO:-BGKO geometryz|4326|Polygon|1|KO-BKO-GKO:-BGKO geometryz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometryz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometryz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryz|4326|CircularString|1|KO-BKO-GKO:-BGKO geometryz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometryz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometryz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryz|4326|Triangle|1|KO-BKO-GKO:-BGKO geometryz|4326|Point|3|KO-BKO-GKO:-BGKO geometryz|4326|LineString|3|KO-BKO-GKO:-BGKO geometryz|4326|Polygon|3|KO-BKO-GKO:-BGKO geometryz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometryz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometryz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometryz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometryz|4326|CircularString|3|KO-BKO-GKO:-BGKO geometryz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometryz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometryz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometryz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometryz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometryz|4326|Triangle|3|KO-BKO-GKO:-BGKO geometryz||COUNT|56| geometryz||GCOUNT|28| geometryz0|0|Point|0|KO-BKO-GKO:-BGKO geometryz0|0|LineString|0|KO-BKO-GKO:-BGKO geometryz0|0|Polygon|0|KO-BKO-GKO:-BGKO geometryz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometryz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometryz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryz0|0|CircularString|0|KO-BKO-GKO:-BGKO geometryz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometryz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometryz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryz0|0|Triangle|0|KO-BKO-GKO:-BGKO geometryz0|0|Tin|0|KO-BKO-GKO:-BGKO geometryz0|0|Point|2|OK-BOK-GOK-BGOK geometryz0|0|LineString|2|OK-BOK-GOK-BGOK geometryz0|0|Polygon|2|OK-BOK-GOK-BGOK geometryz0|0|MultiPoint|2|OK-BOK-GOK-BGOK geometryz0|0|MultiLineString|2|OK-BOK-GOK-BGOK geometryz0|0|MultiPolygon|2|OK-BOK-GOK-BGOK geometryz0|0|GeometryCollection|2|OK-BOK-GOK-BGOK geometryz0|0|CircularString|2|OK-BOK-GKO:-BGKO geometryz0|0|CompoundCurve|2|OK-BOK-GKO:-BGKO geometryz0|0|CurvePolygon|2|OK-BOK-GKO:-BGKO geometryz0|0|MultiCurve|2|OK-BOK-GKO:-BGKO geometryz0|0|MultiSurface|2|OK-BOK-GKO:-BGKO geometryz0|0|PolyhedralSurface|2|OK-BOK-GKO:-BGKO geometryz0|0|Triangle|2|OK-BOK-GKO:-BGKO geometryz0|0|Point|1|KO-BKO-GKO:-BGKO geometryz0|0|LineString|1|KO-BKO-GKO:-BGKO geometryz0|0|Polygon|1|KO-BKO-GKO:-BGKO geometryz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometryz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometryz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryz0|0|CircularString|1|KO-BKO-GKO:-BGKO geometryz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometryz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometryz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryz0|0|Triangle|1|KO-BKO-GKO:-BGKO geometryz0|0|Point|3|KO-BKO-GKO:-BGKO geometryz0|0|LineString|3|KO-BKO-GKO:-BGKO geometryz0|0|Polygon|3|KO-BKO-GKO:-BGKO geometryz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometryz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometryz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometryz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometryz0|0|CircularString|3|KO-BKO-GKO:-BGKO geometryz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometryz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometryz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometryz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometryz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometryz0|0|Triangle|3|KO-BKO-GKO:-BGKO geometryz0|4326|Point|0|KO-BKO-GKO:-BGKO geometryz0|4326|LineString|0|KO-BKO-GKO:-BGKO geometryz0|4326|Polygon|0|KO-BKO-GKO:-BGKO geometryz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometryz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometryz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryz0|4326|CircularString|0|KO-BKO-GKO:-BGKO geometryz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometryz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometryz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryz0|4326|Triangle|0|KO-BKO-GKO:-BGKO geometryz0|4326|Tin|0|KO-BKO-GKO:-BGKO geometryz0|4326|Point|2|OK-BOK-GOK-BGOK geometryz0|4326|LineString|2|OK-BOK-GOK-BGOK geometryz0|4326|Polygon|2|OK-BOK-GOK-BGOK geometryz0|4326|MultiPoint|2|OK-BOK-GOK-BGOK geometryz0|4326|MultiLineString|2|OK-BOK-GOK-BGOK geometryz0|4326|MultiPolygon|2|OK-BOK-GOK-BGOK geometryz0|4326|GeometryCollection|2|OK-BOK-GOK-BGOK geometryz0|4326|CircularString|2|OK-BOK-GKO:-BGKO geometryz0|4326|CompoundCurve|2|OK-BOK-GKO:-BGKO geometryz0|4326|CurvePolygon|2|OK-BOK-GKO:-BGKO geometryz0|4326|MultiCurve|2|OK-BOK-GKO:-BGKO geometryz0|4326|MultiSurface|2|OK-BOK-GKO:-BGKO geometryz0|4326|PolyhedralSurface|2|OK-BOK-GKO:-BGKO geometryz0|4326|Triangle|2|OK-BOK-GKO:-BGKO geometryz0|4326|Point|1|KO-BKO-GKO:-BGKO geometryz0|4326|LineString|1|KO-BKO-GKO:-BGKO geometryz0|4326|Polygon|1|KO-BKO-GKO:-BGKO geometryz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometryz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometryz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryz0|4326|CircularString|1|KO-BKO-GKO:-BGKO geometryz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometryz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometryz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryz0|4326|Triangle|1|KO-BKO-GKO:-BGKO geometryz0|4326|Point|3|KO-BKO-GKO:-BGKO geometryz0|4326|LineString|3|KO-BKO-GKO:-BGKO geometryz0|4326|Polygon|3|KO-BKO-GKO:-BGKO geometryz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometryz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometryz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometryz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometryz0|4326|CircularString|3|KO-BKO-GKO:-BGKO geometryz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometryz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometryz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometryz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometryz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometryz0|4326|Triangle|3|KO-BKO-GKO:-BGKO geometryz0||COUNT|56| geometryz0||GCOUNT|28| geometryz4326|0|Point|0|KO-BKO-GKO:-BGKO geometryz4326|0|LineString|0|KO-BKO-GKO:-BGKO geometryz4326|0|Polygon|0|KO-BKO-GKO:-BGKO geometryz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometryz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometryz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryz4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometryz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometryz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometryz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryz4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometryz4326|0|Tin|0|KO-BKO-GKO:-BGKO geometryz4326|0|Point|2|KO-BKO-GOK-BGOK geometryz4326|0|LineString|2|KO-BKO-GOK-BGOK geometryz4326|0|Polygon|2|KO-BKO-GOK-BGOK geometryz4326|0|MultiPoint|2|KO-BKO-GOK-BGOK geometryz4326|0|MultiLineString|2|KO-BKO-GOK-BGOK geometryz4326|0|MultiPolygon|2|KO-BKO-GOK-BGOK geometryz4326|0|GeometryCollection|2|KO-BKO-GOK-BGOK geometryz4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometryz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometryz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometryz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometryz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometryz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometryz4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometryz4326|0|Point|1|KO-BKO-GKO:-BGKO geometryz4326|0|LineString|1|KO-BKO-GKO:-BGKO geometryz4326|0|Polygon|1|KO-BKO-GKO:-BGKO geometryz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometryz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometryz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryz4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometryz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometryz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometryz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryz4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometryz4326|0|Point|3|KO-BKO-GKO:-BGKO geometryz4326|0|LineString|3|KO-BKO-GKO:-BGKO geometryz4326|0|Polygon|3|KO-BKO-GKO:-BGKO geometryz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO geometryz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO geometryz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO geometryz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO geometryz4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometryz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometryz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometryz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometryz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometryz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometryz4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometryz4326|4326|Point|0|KO-BKO-GKO:-BGKO geometryz4326|4326|LineString|0|KO-BKO-GKO:-BGKO geometryz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO geometryz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometryz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO geometryz4326|4326|Tin|0|KO-BKO-GKO:-BGKO geometryz4326|4326|Point|2|OK-BOK-GOK-BGOK geometryz4326|4326|LineString|2|OK-BOK-GOK-BGOK geometryz4326|4326|Polygon|2|OK-BOK-GOK-BGOK geometryz4326|4326|MultiPoint|2|OK-BOK-GOK-BGOK geometryz4326|4326|MultiLineString|2|OK-BOK-GOK-BGOK geometryz4326|4326|MultiPolygon|2|OK-BOK-GOK-BGOK geometryz4326|4326|GeometryCollection|2|OK-BOK-GOK-BGOK geometryz4326|4326|CircularString|2|OK-BOK-GKO:-BGKO geometryz4326|4326|CompoundCurve|2|OK-BOK-GKO:-BGKO geometryz4326|4326|CurvePolygon|2|OK-BOK-GKO:-BGKO geometryz4326|4326|MultiCurve|2|OK-BOK-GKO:-BGKO geometryz4326|4326|MultiSurface|2|OK-BOK-GKO:-BGKO geometryz4326|4326|PolyhedralSurface|2|OK-BOK-GKO:-BGKO geometryz4326|4326|Triangle|2|OK-BOK-GKO:-BGKO geometryz4326|4326|Point|1|KO-BKO-GKO:-BGKO geometryz4326|4326|LineString|1|KO-BKO-GKO:-BGKO geometryz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO geometryz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometryz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO geometryz4326|4326|Point|3|KO-BKO-GKO:-BGKO geometryz4326|4326|LineString|3|KO-BKO-GKO:-BGKO geometryz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO geometryz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO geometryz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO geometryz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO geometryz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO geometryz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO geometryz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometryz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO geometryz4326||COUNT|28| geometryz4326||GCOUNT|28| geometryzm|0|Point|0|KO-BKO-GKO:-BGKO geometryzm|0|LineString|0|KO-BKO-GKO:-BGKO geometryzm|0|Polygon|0|KO-BKO-GKO:-BGKO geometryzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometryzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometryzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryzm|0|CircularString|0|KO-BKO-GKO:-BGKO geometryzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometryzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometryzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryzm|0|Triangle|0|KO-BKO-GKO:-BGKO geometryzm|0|Tin|0|KO-BKO-GKO:-BGKO geometryzm|0|Point|2|KO-BKO-GKO:-BGKO geometryzm|0|LineString|2|KO-BKO-GKO:-BGKO geometryzm|0|Polygon|2|KO-BKO-GKO:-BGKO geometryzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometryzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometryzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometryzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometryzm|0|CircularString|2|KO-BKO-GKO:-BGKO geometryzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometryzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometryzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometryzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometryzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometryzm|0|Triangle|2|KO-BKO-GKO:-BGKO geometryzm|0|Point|1|KO-BKO-GKO:-BGKO geometryzm|0|LineString|1|KO-BKO-GKO:-BGKO geometryzm|0|Polygon|1|KO-BKO-GKO:-BGKO geometryzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometryzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometryzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryzm|0|CircularString|1|KO-BKO-GKO:-BGKO geometryzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometryzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometryzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryzm|0|Triangle|1|KO-BKO-GKO:-BGKO geometryzm|0|Point|3|OK-BOK-GOK-BGOK geometryzm|0|LineString|3|OK-BOK-GOK-BGOK geometryzm|0|Polygon|3|OK-BOK-GOK-BGOK geometryzm|0|MultiPoint|3|OK-BOK-GOK-BGOK geometryzm|0|MultiLineString|3|OK-BOK-GOK-BGOK geometryzm|0|MultiPolygon|3|OK-BOK-GOK-BGOK geometryzm|0|GeometryCollection|3|OK-BOK-GOK-BGOK geometryzm|0|CircularString|3|OK-BOK-GKO:-BGKO geometryzm|0|CompoundCurve|3|OK-BOK-GKO:-BGKO geometryzm|0|CurvePolygon|3|OK-BOK-GKO:-BGKO geometryzm|0|MultiCurve|3|OK-BOK-GKO:-BGKO geometryzm|0|MultiSurface|3|OK-BOK-GKO:-BGKO geometryzm|0|PolyhedralSurface|3|OK-BOK-GKO:-BGKO geometryzm|0|Triangle|3|OK-BOK-GKO:-BGKO geometryzm|4326|Point|0|KO-BKO-GKO:-BGKO geometryzm|4326|LineString|0|KO-BKO-GKO:-BGKO geometryzm|4326|Polygon|0|KO-BKO-GKO:-BGKO geometryzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometryzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometryzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryzm|4326|CircularString|0|KO-BKO-GKO:-BGKO geometryzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometryzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometryzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryzm|4326|Triangle|0|KO-BKO-GKO:-BGKO geometryzm|4326|Tin|0|KO-BKO-GKO:-BGKO geometryzm|4326|Point|2|KO-BKO-GKO:-BGKO geometryzm|4326|LineString|2|KO-BKO-GKO:-BGKO geometryzm|4326|Polygon|2|KO-BKO-GKO:-BGKO geometryzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometryzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometryzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometryzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometryzm|4326|CircularString|2|KO-BKO-GKO:-BGKO geometryzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometryzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometryzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometryzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometryzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometryzm|4326|Triangle|2|KO-BKO-GKO:-BGKO geometryzm|4326|Point|1|KO-BKO-GKO:-BGKO geometryzm|4326|LineString|1|KO-BKO-GKO:-BGKO geometryzm|4326|Polygon|1|KO-BKO-GKO:-BGKO geometryzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometryzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometryzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryzm|4326|CircularString|1|KO-BKO-GKO:-BGKO geometryzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometryzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometryzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryzm|4326|Triangle|1|KO-BKO-GKO:-BGKO geometryzm|4326|Point|3|OK-BOK-GOK-BGOK geometryzm|4326|LineString|3|OK-BOK-GOK-BGOK geometryzm|4326|Polygon|3|OK-BOK-GOK-BGOK geometryzm|4326|MultiPoint|3|OK-BOK-GOK-BGOK geometryzm|4326|MultiLineString|3|OK-BOK-GOK-BGOK geometryzm|4326|MultiPolygon|3|OK-BOK-GOK-BGOK geometryzm|4326|GeometryCollection|3|OK-BOK-GOK-BGOK geometryzm|4326|CircularString|3|OK-BOK-GKO:-BGKO geometryzm|4326|CompoundCurve|3|OK-BOK-GKO:-BGKO geometryzm|4326|CurvePolygon|3|OK-BOK-GKO:-BGKO geometryzm|4326|MultiCurve|3|OK-BOK-GKO:-BGKO geometryzm|4326|MultiSurface|3|OK-BOK-GKO:-BGKO geometryzm|4326|PolyhedralSurface|3|OK-BOK-GKO:-BGKO geometryzm|4326|Triangle|3|OK-BOK-GKO:-BGKO geometryzm||COUNT|56| geometryzm||GCOUNT|28| geometryzm0|0|Point|0|KO-BKO-GKO:-BGKO geometryzm0|0|LineString|0|KO-BKO-GKO:-BGKO geometryzm0|0|Polygon|0|KO-BKO-GKO:-BGKO geometryzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometryzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometryzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryzm0|0|CircularString|0|KO-BKO-GKO:-BGKO geometryzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometryzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometryzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryzm0|0|Triangle|0|KO-BKO-GKO:-BGKO geometryzm0|0|Tin|0|KO-BKO-GKO:-BGKO geometryzm0|0|Point|2|KO-BKO-GKO:-BGKO geometryzm0|0|LineString|2|KO-BKO-GKO:-BGKO geometryzm0|0|Polygon|2|KO-BKO-GKO:-BGKO geometryzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometryzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometryzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometryzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometryzm0|0|CircularString|2|KO-BKO-GKO:-BGKO geometryzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometryzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometryzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometryzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometryzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometryzm0|0|Triangle|2|KO-BKO-GKO:-BGKO geometryzm0|0|Point|1|KO-BKO-GKO:-BGKO geometryzm0|0|LineString|1|KO-BKO-GKO:-BGKO geometryzm0|0|Polygon|1|KO-BKO-GKO:-BGKO geometryzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometryzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometryzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryzm0|0|CircularString|1|KO-BKO-GKO:-BGKO geometryzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometryzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometryzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryzm0|0|Triangle|1|KO-BKO-GKO:-BGKO geometryzm0|0|Point|3|OK-BOK-GOK-BGOK geometryzm0|0|LineString|3|OK-BOK-GOK-BGOK geometryzm0|0|Polygon|3|OK-BOK-GOK-BGOK geometryzm0|0|MultiPoint|3|OK-BOK-GOK-BGOK geometryzm0|0|MultiLineString|3|OK-BOK-GOK-BGOK geometryzm0|0|MultiPolygon|3|OK-BOK-GOK-BGOK geometryzm0|0|GeometryCollection|3|OK-BOK-GOK-BGOK geometryzm0|0|CircularString|3|OK-BOK-GKO:-BGKO geometryzm0|0|CompoundCurve|3|OK-BOK-GKO:-BGKO geometryzm0|0|CurvePolygon|3|OK-BOK-GKO:-BGKO geometryzm0|0|MultiCurve|3|OK-BOK-GKO:-BGKO geometryzm0|0|MultiSurface|3|OK-BOK-GKO:-BGKO geometryzm0|0|PolyhedralSurface|3|OK-BOK-GKO:-BGKO geometryzm0|0|Triangle|3|OK-BOK-GKO:-BGKO geometryzm0|4326|Point|0|KO-BKO-GKO:-BGKO geometryzm0|4326|LineString|0|KO-BKO-GKO:-BGKO geometryzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO geometryzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometryzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO geometryzm0|4326|Tin|0|KO-BKO-GKO:-BGKO geometryzm0|4326|Point|2|KO-BKO-GKO:-BGKO geometryzm0|4326|LineString|2|KO-BKO-GKO:-BGKO geometryzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometryzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometryzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO geometryzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometryzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometryzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometryzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO geometryzm0|4326|Point|1|KO-BKO-GKO:-BGKO geometryzm0|4326|LineString|1|KO-BKO-GKO:-BGKO geometryzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO geometryzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometryzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometryzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO geometryzm0|4326|Point|3|OK-BOK-GOK-BGOK geometryzm0|4326|LineString|3|OK-BOK-GOK-BGOK geometryzm0|4326|Polygon|3|OK-BOK-GOK-BGOK geometryzm0|4326|MultiPoint|3|OK-BOK-GOK-BGOK geometryzm0|4326|MultiLineString|3|OK-BOK-GOK-BGOK geometryzm0|4326|MultiPolygon|3|OK-BOK-GOK-BGOK geometryzm0|4326|GeometryCollection|3|OK-BOK-GOK-BGOK geometryzm0|4326|CircularString|3|OK-BOK-GKO:-BGKO geometryzm0|4326|CompoundCurve|3|OK-BOK-GKO:-BGKO geometryzm0|4326|CurvePolygon|3|OK-BOK-GKO:-BGKO geometryzm0|4326|MultiCurve|3|OK-BOK-GKO:-BGKO geometryzm0|4326|MultiSurface|3|OK-BOK-GKO:-BGKO geometryzm0|4326|PolyhedralSurface|3|OK-BOK-GKO:-BGKO geometryzm0|4326|Triangle|3|OK-BOK-GKO:-BGKO geometryzm0||COUNT|56| geometryzm0||GCOUNT|28| geometryzm4326|0|Point|0|KO-BKO-GKO:-BGKO geometryzm4326|0|LineString|0|KO-BKO-GKO:-BGKO geometryzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO geometryzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO geometryzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO geometryzm4326|0|Tin|0|KO-BKO-GKO:-BGKO geometryzm4326|0|Point|2|KO-BKO-GKO:-BGKO geometryzm4326|0|LineString|2|KO-BKO-GKO:-BGKO geometryzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO geometryzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO geometryzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO geometryzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO geometryzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO geometryzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometryzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO geometryzm4326|0|Point|1|KO-BKO-GKO:-BGKO geometryzm4326|0|LineString|1|KO-BKO-GKO:-BGKO geometryzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO geometryzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO geometryzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO geometryzm4326|0|Point|3|KO-BKO-GOK-BGOK geometryzm4326|0|LineString|3|KO-BKO-GOK-BGOK geometryzm4326|0|Polygon|3|KO-BKO-GOK-BGOK geometryzm4326|0|MultiPoint|3|KO-BKO-GOK-BGOK geometryzm4326|0|MultiLineString|3|KO-BKO-GOK-BGOK geometryzm4326|0|MultiPolygon|3|KO-BKO-GOK-BGOK geometryzm4326|0|GeometryCollection|3|KO-BKO-GOK-BGOK geometryzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO geometryzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO geometryzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO geometryzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO geometryzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO geometryzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO geometryzm4326|4326|Point|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO geometryzm4326|4326|Point|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO geometryzm4326|4326|Point|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO geometryzm4326|4326|Point|3|OK-BOK-GOK-BGOK geometryzm4326|4326|LineString|3|OK-BOK-GOK-BGOK geometryzm4326|4326|Polygon|3|OK-BOK-GOK-BGOK geometryzm4326|4326|MultiPoint|3|OK-BOK-GOK-BGOK geometryzm4326|4326|MultiLineString|3|OK-BOK-GOK-BGOK geometryzm4326|4326|MultiPolygon|3|OK-BOK-GOK-BGOK geometryzm4326|4326|GeometryCollection|3|OK-BOK-GOK-BGOK geometryzm4326|4326|CircularString|3|OK-BOK-GKO:-BGKO geometryzm4326|4326|CompoundCurve|3|OK-BOK-GKO:-BGKO geometryzm4326|4326|CurvePolygon|3|OK-BOK-GKO:-BGKO geometryzm4326|4326|MultiCurve|3|OK-BOK-GKO:-BGKO geometryzm4326|4326|MultiSurface|3|OK-BOK-GKO:-BGKO geometryzm4326|4326|PolyhedralSurface|3|OK-BOK-GKO:-BGKO geometryzm4326|4326|Triangle|3|OK-BOK-GKO:-BGKO geometryzm4326||COUNT|28| geometryzm4326||GCOUNT|28| linestring|0|Point|0|KO-BKO-GKO:-BGKO linestring|0|LineString|0|OK-BOK-GOK-BGOK linestring|0|Polygon|0|KO-BKO-GKO:-BGKO linestring|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestring|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestring|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestring|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestring|0|CircularString|0|KO-BKO-GKO:-BGKO linestring|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestring|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestring|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestring|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestring|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestring|0|Triangle|0|KO-BKO-GKO:-BGKO linestring|0|Tin|0|KO-BKO-GKO:-BGKO linestring|0|Point|2|KO-BKO-GKO:-BGKO linestring|0|LineString|2|KO-BKO-GKO:-BGKO linestring|0|Polygon|2|KO-BKO-GKO:-BGKO linestring|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestring|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestring|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestring|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestring|0|CircularString|2|KO-BKO-GKO:-BGKO linestring|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestring|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestring|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestring|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestring|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestring|0|Triangle|2|KO-BKO-GKO:-BGKO linestring|0|Point|1|KO-BKO-GKO:-BGKO linestring|0|LineString|1|KO-BKO-GKO:-BGKO linestring|0|Polygon|1|KO-BKO-GKO:-BGKO linestring|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestring|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestring|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestring|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestring|0|CircularString|1|KO-BKO-GKO:-BGKO linestring|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestring|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestring|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestring|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestring|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestring|0|Triangle|1|KO-BKO-GKO:-BGKO linestring|0|Point|3|KO-BKO-GKO:-BGKO linestring|0|LineString|3|KO-BKO-GKO:-BGKO linestring|0|Polygon|3|KO-BKO-GKO:-BGKO linestring|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestring|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestring|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestring|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestring|0|CircularString|3|KO-BKO-GKO:-BGKO linestring|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestring|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestring|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestring|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestring|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestring|0|Triangle|3|KO-BKO-GKO:-BGKO linestring|4326|Point|0|KO-BKO-GKO:-BGKO linestring|4326|LineString|0|OK-BOK-GOK-BGOK linestring|4326|Polygon|0|KO-BKO-GKO:-BGKO linestring|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestring|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestring|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestring|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestring|4326|CircularString|0|KO-BKO-GKO:-BGKO linestring|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestring|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestring|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestring|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestring|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestring|4326|Triangle|0|KO-BKO-GKO:-BGKO linestring|4326|Tin|0|KO-BKO-GKO:-BGKO linestring|4326|Point|2|KO-BKO-GKO:-BGKO linestring|4326|LineString|2|KO-BKO-GKO:-BGKO linestring|4326|Polygon|2|KO-BKO-GKO:-BGKO linestring|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestring|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestring|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestring|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestring|4326|CircularString|2|KO-BKO-GKO:-BGKO linestring|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestring|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestring|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestring|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestring|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestring|4326|Triangle|2|KO-BKO-GKO:-BGKO linestring|4326|Point|1|KO-BKO-GKO:-BGKO linestring|4326|LineString|1|KO-BKO-GKO:-BGKO linestring|4326|Polygon|1|KO-BKO-GKO:-BGKO linestring|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestring|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestring|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestring|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestring|4326|CircularString|1|KO-BKO-GKO:-BGKO linestring|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestring|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestring|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestring|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestring|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestring|4326|Triangle|1|KO-BKO-GKO:-BGKO linestring|4326|Point|3|KO-BKO-GKO:-BGKO linestring|4326|LineString|3|KO-BKO-GKO:-BGKO linestring|4326|Polygon|3|KO-BKO-GKO:-BGKO linestring|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestring|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestring|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestring|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestring|4326|CircularString|3|KO-BKO-GKO:-BGKO linestring|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestring|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestring|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestring|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestring|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestring|4326|Triangle|3|KO-BKO-GKO:-BGKO linestring||COUNT|4| linestring||GCOUNT|4| linestring0|0|Point|0|KO-BKO-GKO:-BGKO linestring0|0|LineString|0|OK-BOK-GOK-BGOK linestring0|0|Polygon|0|KO-BKO-GKO:-BGKO linestring0|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestring0|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestring0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestring0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestring0|0|CircularString|0|KO-BKO-GKO:-BGKO linestring0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestring0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestring0|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestring0|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestring0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestring0|0|Triangle|0|KO-BKO-GKO:-BGKO linestring0|0|Tin|0|KO-BKO-GKO:-BGKO linestring0|0|Point|2|KO-BKO-GKO:-BGKO linestring0|0|LineString|2|KO-BKO-GKO:-BGKO linestring0|0|Polygon|2|KO-BKO-GKO:-BGKO linestring0|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestring0|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestring0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestring0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestring0|0|CircularString|2|KO-BKO-GKO:-BGKO linestring0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestring0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestring0|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestring0|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestring0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestring0|0|Triangle|2|KO-BKO-GKO:-BGKO linestring0|0|Point|1|KO-BKO-GKO:-BGKO linestring0|0|LineString|1|KO-BKO-GKO:-BGKO linestring0|0|Polygon|1|KO-BKO-GKO:-BGKO linestring0|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestring0|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestring0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestring0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestring0|0|CircularString|1|KO-BKO-GKO:-BGKO linestring0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestring0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestring0|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestring0|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestring0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestring0|0|Triangle|1|KO-BKO-GKO:-BGKO linestring0|0|Point|3|KO-BKO-GKO:-BGKO linestring0|0|LineString|3|KO-BKO-GKO:-BGKO linestring0|0|Polygon|3|KO-BKO-GKO:-BGKO linestring0|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestring0|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestring0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestring0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestring0|0|CircularString|3|KO-BKO-GKO:-BGKO linestring0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestring0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestring0|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestring0|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestring0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestring0|0|Triangle|3|KO-BKO-GKO:-BGKO linestring0|4326|Point|0|KO-BKO-GKO:-BGKO linestring0|4326|LineString|0|OK-BOK-GOK-BGOK linestring0|4326|Polygon|0|KO-BKO-GKO:-BGKO linestring0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestring0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestring0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestring0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestring0|4326|CircularString|0|KO-BKO-GKO:-BGKO linestring0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestring0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestring0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestring0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestring0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestring0|4326|Triangle|0|KO-BKO-GKO:-BGKO linestring0|4326|Tin|0|KO-BKO-GKO:-BGKO linestring0|4326|Point|2|KO-BKO-GKO:-BGKO linestring0|4326|LineString|2|KO-BKO-GKO:-BGKO linestring0|4326|Polygon|2|KO-BKO-GKO:-BGKO linestring0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestring0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestring0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestring0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestring0|4326|CircularString|2|KO-BKO-GKO:-BGKO linestring0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestring0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestring0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestring0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestring0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestring0|4326|Triangle|2|KO-BKO-GKO:-BGKO linestring0|4326|Point|1|KO-BKO-GKO:-BGKO linestring0|4326|LineString|1|KO-BKO-GKO:-BGKO linestring0|4326|Polygon|1|KO-BKO-GKO:-BGKO linestring0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestring0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestring0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestring0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestring0|4326|CircularString|1|KO-BKO-GKO:-BGKO linestring0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestring0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestring0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestring0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestring0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestring0|4326|Triangle|1|KO-BKO-GKO:-BGKO linestring0|4326|Point|3|KO-BKO-GKO:-BGKO linestring0|4326|LineString|3|KO-BKO-GKO:-BGKO linestring0|4326|Polygon|3|KO-BKO-GKO:-BGKO linestring0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestring0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestring0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestring0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestring0|4326|CircularString|3|KO-BKO-GKO:-BGKO linestring0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestring0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestring0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestring0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestring0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestring0|4326|Triangle|3|KO-BKO-GKO:-BGKO linestring0||COUNT|4| linestring0||GCOUNT|4| linestring4326|0|Point|0|KO-BKO-GKO:-BGKO linestring4326|0|LineString|0|KO-BKO-GOK-BGOK linestring4326|0|Polygon|0|KO-BKO-GKO:-BGKO linestring4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestring4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestring4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestring4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestring4326|0|CircularString|0|KO-BKO-GKO:-BGKO linestring4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestring4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestring4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestring4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestring4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestring4326|0|Triangle|0|KO-BKO-GKO:-BGKO linestring4326|0|Tin|0|KO-BKO-GKO:-BGKO linestring4326|0|Point|2|KO-BKO-GKO:-BGKO linestring4326|0|LineString|2|KO-BKO-GKO:-BGKO linestring4326|0|Polygon|2|KO-BKO-GKO:-BGKO linestring4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestring4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestring4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestring4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestring4326|0|CircularString|2|KO-BKO-GKO:-BGKO linestring4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestring4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestring4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestring4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestring4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestring4326|0|Triangle|2|KO-BKO-GKO:-BGKO linestring4326|0|Point|1|KO-BKO-GKO:-BGKO linestring4326|0|LineString|1|KO-BKO-GKO:-BGKO linestring4326|0|Polygon|1|KO-BKO-GKO:-BGKO linestring4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestring4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestring4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestring4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestring4326|0|CircularString|1|KO-BKO-GKO:-BGKO linestring4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestring4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestring4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestring4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestring4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestring4326|0|Triangle|1|KO-BKO-GKO:-BGKO linestring4326|0|Point|3|KO-BKO-GKO:-BGKO linestring4326|0|LineString|3|KO-BKO-GKO:-BGKO linestring4326|0|Polygon|3|KO-BKO-GKO:-BGKO linestring4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestring4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestring4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestring4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestring4326|0|CircularString|3|KO-BKO-GKO:-BGKO linestring4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestring4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestring4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestring4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestring4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestring4326|0|Triangle|3|KO-BKO-GKO:-BGKO linestring4326|4326|Point|0|KO-BKO-GKO:-BGKO linestring4326|4326|LineString|0|OK-BOK-GOK-BGOK linestring4326|4326|Polygon|0|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestring4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestring4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestring4326|4326|CircularString|0|KO-BKO-GKO:-BGKO linestring4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestring4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestring4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestring4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestring4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestring4326|4326|Triangle|0|KO-BKO-GKO:-BGKO linestring4326|4326|Tin|0|KO-BKO-GKO:-BGKO linestring4326|4326|Point|2|KO-BKO-GKO:-BGKO linestring4326|4326|LineString|2|KO-BKO-GKO:-BGKO linestring4326|4326|Polygon|2|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestring4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestring4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestring4326|4326|CircularString|2|KO-BKO-GKO:-BGKO linestring4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestring4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestring4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestring4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestring4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestring4326|4326|Triangle|2|KO-BKO-GKO:-BGKO linestring4326|4326|Point|1|KO-BKO-GKO:-BGKO linestring4326|4326|LineString|1|KO-BKO-GKO:-BGKO linestring4326|4326|Polygon|1|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestring4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestring4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestring4326|4326|CircularString|1|KO-BKO-GKO:-BGKO linestring4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestring4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestring4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestring4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestring4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestring4326|4326|Triangle|1|KO-BKO-GKO:-BGKO linestring4326|4326|Point|3|KO-BKO-GKO:-BGKO linestring4326|4326|LineString|3|KO-BKO-GKO:-BGKO linestring4326|4326|Polygon|3|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestring4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestring4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestring4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestring4326|4326|CircularString|3|KO-BKO-GKO:-BGKO linestring4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestring4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestring4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestring4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestring4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestring4326|4326|Triangle|3|KO-BKO-GKO:-BGKO linestring4326||COUNT|2| linestring4326||GCOUNT|4| linestringm|0|Point|0|KO-BKO-GKO:-BGKO linestringm|0|LineString|0|KO-BKO-GKO:-BGKO linestringm|0|Polygon|0|KO-BKO-GKO:-BGKO linestringm|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringm|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringm|0|CircularString|0|KO-BKO-GKO:-BGKO linestringm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringm|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringm|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringm|0|Triangle|0|KO-BKO-GKO:-BGKO linestringm|0|Tin|0|KO-BKO-GKO:-BGKO linestringm|0|Point|2|KO-BKO-GKO:-BGKO linestringm|0|LineString|2|KO-BKO-GKO:-BGKO linestringm|0|Polygon|2|KO-BKO-GKO:-BGKO linestringm|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringm|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringm|0|CircularString|2|KO-BKO-GKO:-BGKO linestringm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringm|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringm|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringm|0|Triangle|2|KO-BKO-GKO:-BGKO linestringm|0|Point|1|KO-BKO-GKO:-BGKO linestringm|0|LineString|1|OK-BOK-GOK-BGOK linestringm|0|Polygon|1|KO-BKO-GKO:-BGKO linestringm|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringm|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringm|0|CircularString|1|KO-BKO-GKO:-BGKO linestringm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringm|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringm|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringm|0|Triangle|1|KO-BKO-GKO:-BGKO linestringm|0|Point|3|KO-BKO-GKO:-BGKO linestringm|0|LineString|3|KO-BKO-GKO:-BGKO linestringm|0|Polygon|3|KO-BKO-GKO:-BGKO linestringm|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringm|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringm|0|CircularString|3|KO-BKO-GKO:-BGKO linestringm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringm|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringm|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringm|0|Triangle|3|KO-BKO-GKO:-BGKO linestringm|4326|Point|0|KO-BKO-GKO:-BGKO linestringm|4326|LineString|0|KO-BKO-GKO:-BGKO linestringm|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringm|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringm|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringm|4326|Tin|0|KO-BKO-GKO:-BGKO linestringm|4326|Point|2|KO-BKO-GKO:-BGKO linestringm|4326|LineString|2|KO-BKO-GKO:-BGKO linestringm|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringm|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringm|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringm|4326|Point|1|KO-BKO-GKO:-BGKO linestringm|4326|LineString|1|OK-BOK-GOK-BGOK linestringm|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringm|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringm|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringm|4326|Point|3|KO-BKO-GKO:-BGKO linestringm|4326|LineString|3|KO-BKO-GKO:-BGKO linestringm|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringm|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringm|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringm||COUNT|4| linestringm||GCOUNT|4| linestringm0|0|Point|0|KO-BKO-GKO:-BGKO linestringm0|0|LineString|0|KO-BKO-GKO:-BGKO linestringm0|0|Polygon|0|KO-BKO-GKO:-BGKO linestringm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringm0|0|CircularString|0|KO-BKO-GKO:-BGKO linestringm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringm0|0|Triangle|0|KO-BKO-GKO:-BGKO linestringm0|0|Tin|0|KO-BKO-GKO:-BGKO linestringm0|0|Point|2|KO-BKO-GKO:-BGKO linestringm0|0|LineString|2|KO-BKO-GKO:-BGKO linestringm0|0|Polygon|2|KO-BKO-GKO:-BGKO linestringm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringm0|0|CircularString|2|KO-BKO-GKO:-BGKO linestringm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringm0|0|Triangle|2|KO-BKO-GKO:-BGKO linestringm0|0|Point|1|KO-BKO-GKO:-BGKO linestringm0|0|LineString|1|OK-BOK-GOK-BGOK linestringm0|0|Polygon|1|KO-BKO-GKO:-BGKO linestringm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringm0|0|CircularString|1|KO-BKO-GKO:-BGKO linestringm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringm0|0|Triangle|1|KO-BKO-GKO:-BGKO linestringm0|0|Point|3|KO-BKO-GKO:-BGKO linestringm0|0|LineString|3|KO-BKO-GKO:-BGKO linestringm0|0|Polygon|3|KO-BKO-GKO:-BGKO linestringm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringm0|0|CircularString|3|KO-BKO-GKO:-BGKO linestringm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringm0|0|Triangle|3|KO-BKO-GKO:-BGKO linestringm0|4326|Point|0|KO-BKO-GKO:-BGKO linestringm0|4326|LineString|0|KO-BKO-GKO:-BGKO linestringm0|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringm0|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringm0|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringm0|4326|Tin|0|KO-BKO-GKO:-BGKO linestringm0|4326|Point|2|KO-BKO-GKO:-BGKO linestringm0|4326|LineString|2|KO-BKO-GKO:-BGKO linestringm0|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringm0|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringm0|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringm0|4326|Point|1|KO-BKO-GKO:-BGKO linestringm0|4326|LineString|1|OK-BOK-GOK-BGOK linestringm0|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringm0|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringm0|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringm0|4326|Point|3|KO-BKO-GKO:-BGKO linestringm0|4326|LineString|3|KO-BKO-GKO:-BGKO linestringm0|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringm0|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringm0|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringm0||COUNT|4| linestringm0||GCOUNT|4| linestringm4326|0|Point|0|KO-BKO-GKO:-BGKO linestringm4326|0|LineString|0|KO-BKO-GKO:-BGKO linestringm4326|0|Polygon|0|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringm4326|0|CircularString|0|KO-BKO-GKO:-BGKO linestringm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringm4326|0|Triangle|0|KO-BKO-GKO:-BGKO linestringm4326|0|Tin|0|KO-BKO-GKO:-BGKO linestringm4326|0|Point|2|KO-BKO-GKO:-BGKO linestringm4326|0|LineString|2|KO-BKO-GKO:-BGKO linestringm4326|0|Polygon|2|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringm4326|0|CircularString|2|KO-BKO-GKO:-BGKO linestringm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringm4326|0|Triangle|2|KO-BKO-GKO:-BGKO linestringm4326|0|Point|1|KO-BKO-GKO:-BGKO linestringm4326|0|LineString|1|KO-BKO-GOK-BGOK linestringm4326|0|Polygon|1|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringm4326|0|CircularString|1|KO-BKO-GKO:-BGKO linestringm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringm4326|0|Triangle|1|KO-BKO-GKO:-BGKO linestringm4326|0|Point|3|KO-BKO-GKO:-BGKO linestringm4326|0|LineString|3|KO-BKO-GKO:-BGKO linestringm4326|0|Polygon|3|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringm4326|0|CircularString|3|KO-BKO-GKO:-BGKO linestringm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringm4326|0|Triangle|3|KO-BKO-GKO:-BGKO linestringm4326|4326|Point|0|KO-BKO-GKO:-BGKO linestringm4326|4326|LineString|0|KO-BKO-GKO:-BGKO linestringm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringm4326|4326|Tin|0|KO-BKO-GKO:-BGKO linestringm4326|4326|Point|2|KO-BKO-GKO:-BGKO linestringm4326|4326|LineString|2|KO-BKO-GKO:-BGKO linestringm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringm4326|4326|Point|1|KO-BKO-GKO:-BGKO linestringm4326|4326|LineString|1|OK-BOK-GOK-BGOK linestringm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringm4326|4326|Point|3|KO-BKO-GKO:-BGKO linestringm4326|4326|LineString|3|KO-BKO-GKO:-BGKO linestringm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringm4326||COUNT|2| linestringm4326||GCOUNT|4| linestringz|0|Point|0|KO-BKO-GKO:-BGKO linestringz|0|LineString|0|KO-BKO-GKO:-BGKO linestringz|0|Polygon|0|KO-BKO-GKO:-BGKO linestringz|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringz|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringz|0|CircularString|0|KO-BKO-GKO:-BGKO linestringz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringz|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringz|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringz|0|Triangle|0|KO-BKO-GKO:-BGKO linestringz|0|Tin|0|KO-BKO-GKO:-BGKO linestringz|0|Point|2|KO-BKO-GKO:-BGKO linestringz|0|LineString|2|OK-BOK-GOK-BGOK linestringz|0|Polygon|2|KO-BKO-GKO:-BGKO linestringz|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringz|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringz|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringz|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringz|0|CircularString|2|KO-BKO-GKO:-BGKO linestringz|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringz|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringz|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringz|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringz|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringz|0|Triangle|2|KO-BKO-GKO:-BGKO linestringz|0|Point|1|KO-BKO-GKO:-BGKO linestringz|0|LineString|1|KO-BKO-GKO:-BGKO linestringz|0|Polygon|1|KO-BKO-GKO:-BGKO linestringz|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringz|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringz|0|CircularString|1|KO-BKO-GKO:-BGKO linestringz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringz|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringz|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringz|0|Triangle|1|KO-BKO-GKO:-BGKO linestringz|0|Point|3|KO-BKO-GKO:-BGKO linestringz|0|LineString|3|KO-BKO-GKO:-BGKO linestringz|0|Polygon|3|KO-BKO-GKO:-BGKO linestringz|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringz|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringz|0|CircularString|3|KO-BKO-GKO:-BGKO linestringz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringz|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringz|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringz|0|Triangle|3|KO-BKO-GKO:-BGKO linestringz|4326|Point|0|KO-BKO-GKO:-BGKO linestringz|4326|LineString|0|KO-BKO-GKO:-BGKO linestringz|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringz|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringz|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringz|4326|Tin|0|KO-BKO-GKO:-BGKO linestringz|4326|Point|2|KO-BKO-GKO:-BGKO linestringz|4326|LineString|2|OK-BOK-GOK-BGOK linestringz|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringz|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringz|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringz|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringz|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringz|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringz|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringz|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringz|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringz|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringz|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringz|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringz|4326|Point|1|KO-BKO-GKO:-BGKO linestringz|4326|LineString|1|KO-BKO-GKO:-BGKO linestringz|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringz|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringz|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringz|4326|Point|3|KO-BKO-GKO:-BGKO linestringz|4326|LineString|3|KO-BKO-GKO:-BGKO linestringz|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringz|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringz|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringz||COUNT|4| linestringz||GCOUNT|4| linestringz0|0|Point|0|KO-BKO-GKO:-BGKO linestringz0|0|LineString|0|KO-BKO-GKO:-BGKO linestringz0|0|Polygon|0|KO-BKO-GKO:-BGKO linestringz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringz0|0|CircularString|0|KO-BKO-GKO:-BGKO linestringz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringz0|0|Triangle|0|KO-BKO-GKO:-BGKO linestringz0|0|Tin|0|KO-BKO-GKO:-BGKO linestringz0|0|Point|2|KO-BKO-GKO:-BGKO linestringz0|0|LineString|2|OK-BOK-GOK-BGOK linestringz0|0|Polygon|2|KO-BKO-GKO:-BGKO linestringz0|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringz0|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringz0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringz0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringz0|0|CircularString|2|KO-BKO-GKO:-BGKO linestringz0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringz0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringz0|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringz0|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringz0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringz0|0|Triangle|2|KO-BKO-GKO:-BGKO linestringz0|0|Point|1|KO-BKO-GKO:-BGKO linestringz0|0|LineString|1|KO-BKO-GKO:-BGKO linestringz0|0|Polygon|1|KO-BKO-GKO:-BGKO linestringz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringz0|0|CircularString|1|KO-BKO-GKO:-BGKO linestringz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringz0|0|Triangle|1|KO-BKO-GKO:-BGKO linestringz0|0|Point|3|KO-BKO-GKO:-BGKO linestringz0|0|LineString|3|KO-BKO-GKO:-BGKO linestringz0|0|Polygon|3|KO-BKO-GKO:-BGKO linestringz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringz0|0|CircularString|3|KO-BKO-GKO:-BGKO linestringz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringz0|0|Triangle|3|KO-BKO-GKO:-BGKO linestringz0|4326|Point|0|KO-BKO-GKO:-BGKO linestringz0|4326|LineString|0|KO-BKO-GKO:-BGKO linestringz0|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringz0|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringz0|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringz0|4326|Tin|0|KO-BKO-GKO:-BGKO linestringz0|4326|Point|2|KO-BKO-GKO:-BGKO linestringz0|4326|LineString|2|OK-BOK-GOK-BGOK linestringz0|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringz0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringz0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringz0|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringz0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringz0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringz0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringz0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringz0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringz0|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringz0|4326|Point|1|KO-BKO-GKO:-BGKO linestringz0|4326|LineString|1|KO-BKO-GKO:-BGKO linestringz0|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringz0|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringz0|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringz0|4326|Point|3|KO-BKO-GKO:-BGKO linestringz0|4326|LineString|3|KO-BKO-GKO:-BGKO linestringz0|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringz0|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringz0|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringz0||COUNT|4| linestringz0||GCOUNT|4| linestringz4326|0|Point|0|KO-BKO-GKO:-BGKO linestringz4326|0|LineString|0|KO-BKO-GKO:-BGKO linestringz4326|0|Polygon|0|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringz4326|0|CircularString|0|KO-BKO-GKO:-BGKO linestringz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringz4326|0|Triangle|0|KO-BKO-GKO:-BGKO linestringz4326|0|Tin|0|KO-BKO-GKO:-BGKO linestringz4326|0|Point|2|KO-BKO-GKO:-BGKO linestringz4326|0|LineString|2|KO-BKO-GOK-BGOK linestringz4326|0|Polygon|2|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringz4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringz4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringz4326|0|CircularString|2|KO-BKO-GKO:-BGKO linestringz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringz4326|0|Triangle|2|KO-BKO-GKO:-BGKO linestringz4326|0|Point|1|KO-BKO-GKO:-BGKO linestringz4326|0|LineString|1|KO-BKO-GKO:-BGKO linestringz4326|0|Polygon|1|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringz4326|0|CircularString|1|KO-BKO-GKO:-BGKO linestringz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringz4326|0|Triangle|1|KO-BKO-GKO:-BGKO linestringz4326|0|Point|3|KO-BKO-GKO:-BGKO linestringz4326|0|LineString|3|KO-BKO-GKO:-BGKO linestringz4326|0|Polygon|3|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringz4326|0|CircularString|3|KO-BKO-GKO:-BGKO linestringz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringz4326|0|Triangle|3|KO-BKO-GKO:-BGKO linestringz4326|4326|Point|0|KO-BKO-GKO:-BGKO linestringz4326|4326|LineString|0|KO-BKO-GKO:-BGKO linestringz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringz4326|4326|Tin|0|KO-BKO-GKO:-BGKO linestringz4326|4326|Point|2|KO-BKO-GKO:-BGKO linestringz4326|4326|LineString|2|OK-BOK-GOK-BGOK linestringz4326|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringz4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringz4326|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringz4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringz4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringz4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringz4326|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringz4326|4326|Point|1|KO-BKO-GKO:-BGKO linestringz4326|4326|LineString|1|KO-BKO-GKO:-BGKO linestringz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringz4326|4326|Point|3|KO-BKO-GKO:-BGKO linestringz4326|4326|LineString|3|KO-BKO-GKO:-BGKO linestringz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringz4326||COUNT|2| linestringz4326||GCOUNT|4| linestringzm|0|Point|0|KO-BKO-GKO:-BGKO linestringzm|0|LineString|0|KO-BKO-GKO:-BGKO linestringzm|0|Polygon|0|KO-BKO-GKO:-BGKO linestringzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringzm|0|CircularString|0|KO-BKO-GKO:-BGKO linestringzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringzm|0|Triangle|0|KO-BKO-GKO:-BGKO linestringzm|0|Tin|0|KO-BKO-GKO:-BGKO linestringzm|0|Point|2|KO-BKO-GKO:-BGKO linestringzm|0|LineString|2|KO-BKO-GKO:-BGKO linestringzm|0|Polygon|2|KO-BKO-GKO:-BGKO linestringzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringzm|0|CircularString|2|KO-BKO-GKO:-BGKO linestringzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringzm|0|Triangle|2|KO-BKO-GKO:-BGKO linestringzm|0|Point|1|KO-BKO-GKO:-BGKO linestringzm|0|LineString|1|KO-BKO-GKO:-BGKO linestringzm|0|Polygon|1|KO-BKO-GKO:-BGKO linestringzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringzm|0|CircularString|1|KO-BKO-GKO:-BGKO linestringzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringzm|0|Triangle|1|KO-BKO-GKO:-BGKO linestringzm|0|Point|3|KO-BKO-GKO:-BGKO linestringzm|0|LineString|3|OK-BOK-GOK-BGOK linestringzm|0|Polygon|3|KO-BKO-GKO:-BGKO linestringzm|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringzm|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringzm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringzm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringzm|0|CircularString|3|KO-BKO-GKO:-BGKO linestringzm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringzm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringzm|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringzm|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringzm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringzm|0|Triangle|3|KO-BKO-GKO:-BGKO linestringzm|4326|Point|0|KO-BKO-GKO:-BGKO linestringzm|4326|LineString|0|KO-BKO-GKO:-BGKO linestringzm|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringzm|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringzm|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringzm|4326|Tin|0|KO-BKO-GKO:-BGKO linestringzm|4326|Point|2|KO-BKO-GKO:-BGKO linestringzm|4326|LineString|2|KO-BKO-GKO:-BGKO linestringzm|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringzm|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringzm|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringzm|4326|Point|1|KO-BKO-GKO:-BGKO linestringzm|4326|LineString|1|KO-BKO-GKO:-BGKO linestringzm|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringzm|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringzm|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringzm|4326|Point|3|KO-BKO-GKO:-BGKO linestringzm|4326|LineString|3|OK-BOK-GOK-BGOK linestringzm|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringzm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringzm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringzm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringzm|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringzm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringzm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringzm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringzm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringzm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringzm|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringzm||COUNT|4| linestringzm||GCOUNT|4| linestringzm0|0|Point|0|KO-BKO-GKO:-BGKO linestringzm0|0|LineString|0|KO-BKO-GKO:-BGKO linestringzm0|0|Polygon|0|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringzm0|0|CircularString|0|KO-BKO-GKO:-BGKO linestringzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringzm0|0|Triangle|0|KO-BKO-GKO:-BGKO linestringzm0|0|Tin|0|KO-BKO-GKO:-BGKO linestringzm0|0|Point|2|KO-BKO-GKO:-BGKO linestringzm0|0|LineString|2|KO-BKO-GKO:-BGKO linestringzm0|0|Polygon|2|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringzm0|0|CircularString|2|KO-BKO-GKO:-BGKO linestringzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringzm0|0|Triangle|2|KO-BKO-GKO:-BGKO linestringzm0|0|Point|1|KO-BKO-GKO:-BGKO linestringzm0|0|LineString|1|KO-BKO-GKO:-BGKO linestringzm0|0|Polygon|1|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringzm0|0|CircularString|1|KO-BKO-GKO:-BGKO linestringzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringzm0|0|Triangle|1|KO-BKO-GKO:-BGKO linestringzm0|0|Point|3|KO-BKO-GKO:-BGKO linestringzm0|0|LineString|3|OK-BOK-GOK-BGOK linestringzm0|0|Polygon|3|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringzm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringzm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringzm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringzm0|0|CircularString|3|KO-BKO-GKO:-BGKO linestringzm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringzm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringzm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringzm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringzm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringzm0|0|Triangle|3|KO-BKO-GKO:-BGKO linestringzm0|4326|Point|0|KO-BKO-GKO:-BGKO linestringzm0|4326|LineString|0|KO-BKO-GKO:-BGKO linestringzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringzm0|4326|Tin|0|KO-BKO-GKO:-BGKO linestringzm0|4326|Point|2|KO-BKO-GKO:-BGKO linestringzm0|4326|LineString|2|KO-BKO-GKO:-BGKO linestringzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringzm0|4326|Point|1|KO-BKO-GKO:-BGKO linestringzm0|4326|LineString|1|KO-BKO-GKO:-BGKO linestringzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringzm0|4326|Point|3|KO-BKO-GKO:-BGKO linestringzm0|4326|LineString|3|OK-BOK-GOK-BGOK linestringzm0|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringzm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringzm0|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringzm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringzm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringzm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringzm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringzm0|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringzm0||COUNT|4| linestringzm0||GCOUNT|4| linestringzm4326|0|Point|0|KO-BKO-GKO:-BGKO linestringzm4326|0|LineString|0|KO-BKO-GKO:-BGKO linestringzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO linestringzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO linestringzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO linestringzm4326|0|Tin|0|KO-BKO-GKO:-BGKO linestringzm4326|0|Point|2|KO-BKO-GKO:-BGKO linestringzm4326|0|LineString|2|KO-BKO-GKO:-BGKO linestringzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO linestringzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO linestringzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO linestringzm4326|0|Point|1|KO-BKO-GKO:-BGKO linestringzm4326|0|LineString|1|KO-BKO-GKO:-BGKO linestringzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO linestringzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO linestringzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO linestringzm4326|0|Point|3|KO-BKO-GKO:-BGKO linestringzm4326|0|LineString|3|KO-BKO-GOK-BGOK linestringzm4326|0|Polygon|3|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringzm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO linestringzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO linestringzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO linestringzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|Point|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO linestringzm4326|4326|Point|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO linestringzm4326|4326|Point|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO linestringzm4326|4326|Point|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|LineString|3|OK-BOK-GOK-BGOK linestringzm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO linestringzm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO linestringzm4326||COUNT|2| linestringzm4326||GCOUNT|4| multicurve|0|Point|0|KO-BKO multicurve|0|LineString|0|KO-BKO multicurve|0|Polygon|0|KO-BKO multicurve|0|MultiPoint|0|KO-BKO multicurve|0|MultiLineString|0|KO-BKO multicurve|0|MultiPolygon|0|KO-BKO multicurve|0|GeometryCollection|0|KO-BKO multicurve|0|CircularString|0|KO-BKO multicurve|0|CompoundCurve|0|KO-BKO multicurve|0|CurvePolygon|0|KO-BKO multicurve|0|MultiCurve|0|OK-BOK multicurve|0|MultiSurface|0|KO-BKO multicurve|0|PolyhedralSurface|0|KO-BKO multicurve|0|Triangle|0|KO-BKO multicurve|0|Tin|0|KO-BKO multicurve|0|Point|2|KO-BKO multicurve|0|LineString|2|KO-BKO multicurve|0|Polygon|2|KO-BKO multicurve|0|MultiPoint|2|KO-BKO multicurve|0|MultiLineString|2|KO-BKO multicurve|0|MultiPolygon|2|KO-BKO multicurve|0|GeometryCollection|2|KO-BKO multicurve|0|CircularString|2|KO-BKO multicurve|0|CompoundCurve|2|KO-BKO multicurve|0|CurvePolygon|2|KO-BKO multicurve|0|MultiCurve|2|KO-BKO multicurve|0|MultiSurface|2|KO-BKO multicurve|0|PolyhedralSurface|2|KO-BKO multicurve|0|Triangle|2|KO-BKO multicurve|0|Point|1|KO-BKO multicurve|0|LineString|1|KO-BKO multicurve|0|Polygon|1|KO-BKO multicurve|0|MultiPoint|1|KO-BKO multicurve|0|MultiLineString|1|KO-BKO multicurve|0|MultiPolygon|1|KO-BKO multicurve|0|GeometryCollection|1|KO-BKO multicurve|0|CircularString|1|KO-BKO multicurve|0|CompoundCurve|1|KO-BKO multicurve|0|CurvePolygon|1|KO-BKO multicurve|0|MultiCurve|1|KO-BKO multicurve|0|MultiSurface|1|KO-BKO multicurve|0|PolyhedralSurface|1|KO-BKO multicurve|0|Triangle|1|KO-BKO multicurve|0|Point|3|KO-BKO multicurve|0|LineString|3|KO-BKO multicurve|0|Polygon|3|KO-BKO multicurve|0|MultiPoint|3|KO-BKO multicurve|0|MultiLineString|3|KO-BKO multicurve|0|MultiPolygon|3|KO-BKO multicurve|0|GeometryCollection|3|KO-BKO multicurve|0|CircularString|3|KO-BKO multicurve|0|CompoundCurve|3|KO-BKO multicurve|0|CurvePolygon|3|KO-BKO multicurve|0|MultiCurve|3|KO-BKO multicurve|0|MultiSurface|3|KO-BKO multicurve|0|PolyhedralSurface|3|KO-BKO multicurve|0|Triangle|3|KO-BKO multicurve|4326|Point|0|KO-BKO multicurve|4326|LineString|0|KO-BKO multicurve|4326|Polygon|0|KO-BKO multicurve|4326|MultiPoint|0|KO-BKO multicurve|4326|MultiLineString|0|KO-BKO multicurve|4326|MultiPolygon|0|KO-BKO multicurve|4326|GeometryCollection|0|KO-BKO multicurve|4326|CircularString|0|KO-BKO multicurve|4326|CompoundCurve|0|KO-BKO multicurve|4326|CurvePolygon|0|KO-BKO multicurve|4326|MultiCurve|0|OK-BOK multicurve|4326|MultiSurface|0|KO-BKO multicurve|4326|PolyhedralSurface|0|KO-BKO multicurve|4326|Triangle|0|KO-BKO multicurve|4326|Tin|0|KO-BKO multicurve|4326|Point|2|KO-BKO multicurve|4326|LineString|2|KO-BKO multicurve|4326|Polygon|2|KO-BKO multicurve|4326|MultiPoint|2|KO-BKO multicurve|4326|MultiLineString|2|KO-BKO multicurve|4326|MultiPolygon|2|KO-BKO multicurve|4326|GeometryCollection|2|KO-BKO multicurve|4326|CircularString|2|KO-BKO multicurve|4326|CompoundCurve|2|KO-BKO multicurve|4326|CurvePolygon|2|KO-BKO multicurve|4326|MultiCurve|2|KO-BKO multicurve|4326|MultiSurface|2|KO-BKO multicurve|4326|PolyhedralSurface|2|KO-BKO multicurve|4326|Triangle|2|KO-BKO multicurve|4326|Point|1|KO-BKO multicurve|4326|LineString|1|KO-BKO multicurve|4326|Polygon|1|KO-BKO multicurve|4326|MultiPoint|1|KO-BKO multicurve|4326|MultiLineString|1|KO-BKO multicurve|4326|MultiPolygon|1|KO-BKO multicurve|4326|GeometryCollection|1|KO-BKO multicurve|4326|CircularString|1|KO-BKO multicurve|4326|CompoundCurve|1|KO-BKO multicurve|4326|CurvePolygon|1|KO-BKO multicurve|4326|MultiCurve|1|KO-BKO multicurve|4326|MultiSurface|1|KO-BKO multicurve|4326|PolyhedralSurface|1|KO-BKO multicurve|4326|Triangle|1|KO-BKO multicurve|4326|Point|3|KO-BKO multicurve|4326|LineString|3|KO-BKO multicurve|4326|Polygon|3|KO-BKO multicurve|4326|MultiPoint|3|KO-BKO multicurve|4326|MultiLineString|3|KO-BKO multicurve|4326|MultiPolygon|3|KO-BKO multicurve|4326|GeometryCollection|3|KO-BKO multicurve|4326|CircularString|3|KO-BKO multicurve|4326|CompoundCurve|3|KO-BKO multicurve|4326|CurvePolygon|3|KO-BKO multicurve|4326|MultiCurve|3|KO-BKO multicurve|4326|MultiSurface|3|KO-BKO multicurve|4326|PolyhedralSurface|3|KO-BKO multicurve|4326|Triangle|3|KO-BKO multicurve||COUNT|4| multicurve0|0|Point|0|KO-BKO multicurve0|0|LineString|0|KO-BKO multicurve0|0|Polygon|0|KO-BKO multicurve0|0|MultiPoint|0|KO-BKO multicurve0|0|MultiLineString|0|KO-BKO multicurve0|0|MultiPolygon|0|KO-BKO multicurve0|0|GeometryCollection|0|KO-BKO multicurve0|0|CircularString|0|KO-BKO multicurve0|0|CompoundCurve|0|KO-BKO multicurve0|0|CurvePolygon|0|KO-BKO multicurve0|0|MultiCurve|0|OK-BOK multicurve0|0|MultiSurface|0|KO-BKO multicurve0|0|PolyhedralSurface|0|KO-BKO multicurve0|0|Triangle|0|KO-BKO multicurve0|0|Tin|0|KO-BKO multicurve0|0|Point|2|KO-BKO multicurve0|0|LineString|2|KO-BKO multicurve0|0|Polygon|2|KO-BKO multicurve0|0|MultiPoint|2|KO-BKO multicurve0|0|MultiLineString|2|KO-BKO multicurve0|0|MultiPolygon|2|KO-BKO multicurve0|0|GeometryCollection|2|KO-BKO multicurve0|0|CircularString|2|KO-BKO multicurve0|0|CompoundCurve|2|KO-BKO multicurve0|0|CurvePolygon|2|KO-BKO multicurve0|0|MultiCurve|2|KO-BKO multicurve0|0|MultiSurface|2|KO-BKO multicurve0|0|PolyhedralSurface|2|KO-BKO multicurve0|0|Triangle|2|KO-BKO multicurve0|0|Point|1|KO-BKO multicurve0|0|LineString|1|KO-BKO multicurve0|0|Polygon|1|KO-BKO multicurve0|0|MultiPoint|1|KO-BKO multicurve0|0|MultiLineString|1|KO-BKO multicurve0|0|MultiPolygon|1|KO-BKO multicurve0|0|GeometryCollection|1|KO-BKO multicurve0|0|CircularString|1|KO-BKO multicurve0|0|CompoundCurve|1|KO-BKO multicurve0|0|CurvePolygon|1|KO-BKO multicurve0|0|MultiCurve|1|KO-BKO multicurve0|0|MultiSurface|1|KO-BKO multicurve0|0|PolyhedralSurface|1|KO-BKO multicurve0|0|Triangle|1|KO-BKO multicurve0|0|Point|3|KO-BKO multicurve0|0|LineString|3|KO-BKO multicurve0|0|Polygon|3|KO-BKO multicurve0|0|MultiPoint|3|KO-BKO multicurve0|0|MultiLineString|3|KO-BKO multicurve0|0|MultiPolygon|3|KO-BKO multicurve0|0|GeometryCollection|3|KO-BKO multicurve0|0|CircularString|3|KO-BKO multicurve0|0|CompoundCurve|3|KO-BKO multicurve0|0|CurvePolygon|3|KO-BKO multicurve0|0|MultiCurve|3|KO-BKO multicurve0|0|MultiSurface|3|KO-BKO multicurve0|0|PolyhedralSurface|3|KO-BKO multicurve0|0|Triangle|3|KO-BKO multicurve0|4326|Point|0|KO-BKO multicurve0|4326|LineString|0|KO-BKO multicurve0|4326|Polygon|0|KO-BKO multicurve0|4326|MultiPoint|0|KO-BKO multicurve0|4326|MultiLineString|0|KO-BKO multicurve0|4326|MultiPolygon|0|KO-BKO multicurve0|4326|GeometryCollection|0|KO-BKO multicurve0|4326|CircularString|0|KO-BKO multicurve0|4326|CompoundCurve|0|KO-BKO multicurve0|4326|CurvePolygon|0|KO-BKO multicurve0|4326|MultiCurve|0|OK-BOK multicurve0|4326|MultiSurface|0|KO-BKO multicurve0|4326|PolyhedralSurface|0|KO-BKO multicurve0|4326|Triangle|0|KO-BKO multicurve0|4326|Tin|0|KO-BKO multicurve0|4326|Point|2|KO-BKO multicurve0|4326|LineString|2|KO-BKO multicurve0|4326|Polygon|2|KO-BKO multicurve0|4326|MultiPoint|2|KO-BKO multicurve0|4326|MultiLineString|2|KO-BKO multicurve0|4326|MultiPolygon|2|KO-BKO multicurve0|4326|GeometryCollection|2|KO-BKO multicurve0|4326|CircularString|2|KO-BKO multicurve0|4326|CompoundCurve|2|KO-BKO multicurve0|4326|CurvePolygon|2|KO-BKO multicurve0|4326|MultiCurve|2|KO-BKO multicurve0|4326|MultiSurface|2|KO-BKO multicurve0|4326|PolyhedralSurface|2|KO-BKO multicurve0|4326|Triangle|2|KO-BKO multicurve0|4326|Point|1|KO-BKO multicurve0|4326|LineString|1|KO-BKO multicurve0|4326|Polygon|1|KO-BKO multicurve0|4326|MultiPoint|1|KO-BKO multicurve0|4326|MultiLineString|1|KO-BKO multicurve0|4326|MultiPolygon|1|KO-BKO multicurve0|4326|GeometryCollection|1|KO-BKO multicurve0|4326|CircularString|1|KO-BKO multicurve0|4326|CompoundCurve|1|KO-BKO multicurve0|4326|CurvePolygon|1|KO-BKO multicurve0|4326|MultiCurve|1|KO-BKO multicurve0|4326|MultiSurface|1|KO-BKO multicurve0|4326|PolyhedralSurface|1|KO-BKO multicurve0|4326|Triangle|1|KO-BKO multicurve0|4326|Point|3|KO-BKO multicurve0|4326|LineString|3|KO-BKO multicurve0|4326|Polygon|3|KO-BKO multicurve0|4326|MultiPoint|3|KO-BKO multicurve0|4326|MultiLineString|3|KO-BKO multicurve0|4326|MultiPolygon|3|KO-BKO multicurve0|4326|GeometryCollection|3|KO-BKO multicurve0|4326|CircularString|3|KO-BKO multicurve0|4326|CompoundCurve|3|KO-BKO multicurve0|4326|CurvePolygon|3|KO-BKO multicurve0|4326|MultiCurve|3|KO-BKO multicurve0|4326|MultiSurface|3|KO-BKO multicurve0|4326|PolyhedralSurface|3|KO-BKO multicurve0|4326|Triangle|3|KO-BKO multicurve0||COUNT|4| multicurve4326|0|Point|0|KO-BKO multicurve4326|0|LineString|0|KO-BKO multicurve4326|0|Polygon|0|KO-BKO multicurve4326|0|MultiPoint|0|KO-BKO multicurve4326|0|MultiLineString|0|KO-BKO multicurve4326|0|MultiPolygon|0|KO-BKO multicurve4326|0|GeometryCollection|0|KO-BKO multicurve4326|0|CircularString|0|KO-BKO multicurve4326|0|CompoundCurve|0|KO-BKO multicurve4326|0|CurvePolygon|0|KO-BKO multicurve4326|0|MultiCurve|0|KO-BKO multicurve4326|0|MultiSurface|0|KO-BKO multicurve4326|0|PolyhedralSurface|0|KO-BKO multicurve4326|0|Triangle|0|KO-BKO multicurve4326|0|Tin|0|KO-BKO multicurve4326|0|Point|2|KO-BKO multicurve4326|0|LineString|2|KO-BKO multicurve4326|0|Polygon|2|KO-BKO multicurve4326|0|MultiPoint|2|KO-BKO multicurve4326|0|MultiLineString|2|KO-BKO multicurve4326|0|MultiPolygon|2|KO-BKO multicurve4326|0|GeometryCollection|2|KO-BKO multicurve4326|0|CircularString|2|KO-BKO multicurve4326|0|CompoundCurve|2|KO-BKO multicurve4326|0|CurvePolygon|2|KO-BKO multicurve4326|0|MultiCurve|2|KO-BKO multicurve4326|0|MultiSurface|2|KO-BKO multicurve4326|0|PolyhedralSurface|2|KO-BKO multicurve4326|0|Triangle|2|KO-BKO multicurve4326|0|Point|1|KO-BKO multicurve4326|0|LineString|1|KO-BKO multicurve4326|0|Polygon|1|KO-BKO multicurve4326|0|MultiPoint|1|KO-BKO multicurve4326|0|MultiLineString|1|KO-BKO multicurve4326|0|MultiPolygon|1|KO-BKO multicurve4326|0|GeometryCollection|1|KO-BKO multicurve4326|0|CircularString|1|KO-BKO multicurve4326|0|CompoundCurve|1|KO-BKO multicurve4326|0|CurvePolygon|1|KO-BKO multicurve4326|0|MultiCurve|1|KO-BKO multicurve4326|0|MultiSurface|1|KO-BKO multicurve4326|0|PolyhedralSurface|1|KO-BKO multicurve4326|0|Triangle|1|KO-BKO multicurve4326|0|Point|3|KO-BKO multicurve4326|0|LineString|3|KO-BKO multicurve4326|0|Polygon|3|KO-BKO multicurve4326|0|MultiPoint|3|KO-BKO multicurve4326|0|MultiLineString|3|KO-BKO multicurve4326|0|MultiPolygon|3|KO-BKO multicurve4326|0|GeometryCollection|3|KO-BKO multicurve4326|0|CircularString|3|KO-BKO multicurve4326|0|CompoundCurve|3|KO-BKO multicurve4326|0|CurvePolygon|3|KO-BKO multicurve4326|0|MultiCurve|3|KO-BKO multicurve4326|0|MultiSurface|3|KO-BKO multicurve4326|0|PolyhedralSurface|3|KO-BKO multicurve4326|0|Triangle|3|KO-BKO multicurve4326|4326|Point|0|KO-BKO multicurve4326|4326|LineString|0|KO-BKO multicurve4326|4326|Polygon|0|KO-BKO multicurve4326|4326|MultiPoint|0|KO-BKO multicurve4326|4326|MultiLineString|0|KO-BKO multicurve4326|4326|MultiPolygon|0|KO-BKO multicurve4326|4326|GeometryCollection|0|KO-BKO multicurve4326|4326|CircularString|0|KO-BKO multicurve4326|4326|CompoundCurve|0|KO-BKO multicurve4326|4326|CurvePolygon|0|KO-BKO multicurve4326|4326|MultiCurve|0|OK-BOK multicurve4326|4326|MultiSurface|0|KO-BKO multicurve4326|4326|PolyhedralSurface|0|KO-BKO multicurve4326|4326|Triangle|0|KO-BKO multicurve4326|4326|Tin|0|KO-BKO multicurve4326|4326|Point|2|KO-BKO multicurve4326|4326|LineString|2|KO-BKO multicurve4326|4326|Polygon|2|KO-BKO multicurve4326|4326|MultiPoint|2|KO-BKO multicurve4326|4326|MultiLineString|2|KO-BKO multicurve4326|4326|MultiPolygon|2|KO-BKO multicurve4326|4326|GeometryCollection|2|KO-BKO multicurve4326|4326|CircularString|2|KO-BKO multicurve4326|4326|CompoundCurve|2|KO-BKO multicurve4326|4326|CurvePolygon|2|KO-BKO multicurve4326|4326|MultiCurve|2|KO-BKO multicurve4326|4326|MultiSurface|2|KO-BKO multicurve4326|4326|PolyhedralSurface|2|KO-BKO multicurve4326|4326|Triangle|2|KO-BKO multicurve4326|4326|Point|1|KO-BKO multicurve4326|4326|LineString|1|KO-BKO multicurve4326|4326|Polygon|1|KO-BKO multicurve4326|4326|MultiPoint|1|KO-BKO multicurve4326|4326|MultiLineString|1|KO-BKO multicurve4326|4326|MultiPolygon|1|KO-BKO multicurve4326|4326|GeometryCollection|1|KO-BKO multicurve4326|4326|CircularString|1|KO-BKO multicurve4326|4326|CompoundCurve|1|KO-BKO multicurve4326|4326|CurvePolygon|1|KO-BKO multicurve4326|4326|MultiCurve|1|KO-BKO multicurve4326|4326|MultiSurface|1|KO-BKO multicurve4326|4326|PolyhedralSurface|1|KO-BKO multicurve4326|4326|Triangle|1|KO-BKO multicurve4326|4326|Point|3|KO-BKO multicurve4326|4326|LineString|3|KO-BKO multicurve4326|4326|Polygon|3|KO-BKO multicurve4326|4326|MultiPoint|3|KO-BKO multicurve4326|4326|MultiLineString|3|KO-BKO multicurve4326|4326|MultiPolygon|3|KO-BKO multicurve4326|4326|GeometryCollection|3|KO-BKO multicurve4326|4326|CircularString|3|KO-BKO multicurve4326|4326|CompoundCurve|3|KO-BKO multicurve4326|4326|CurvePolygon|3|KO-BKO multicurve4326|4326|MultiCurve|3|KO-BKO multicurve4326|4326|MultiSurface|3|KO-BKO multicurve4326|4326|PolyhedralSurface|3|KO-BKO multicurve4326|4326|Triangle|3|KO-BKO multicurve4326||COUNT|2| multicurvem|0|Point|0|KO-BKO multicurvem|0|LineString|0|KO-BKO multicurvem|0|Polygon|0|KO-BKO multicurvem|0|MultiPoint|0|KO-BKO multicurvem|0|MultiLineString|0|KO-BKO multicurvem|0|MultiPolygon|0|KO-BKO multicurvem|0|GeometryCollection|0|KO-BKO multicurvem|0|CircularString|0|KO-BKO multicurvem|0|CompoundCurve|0|KO-BKO multicurvem|0|CurvePolygon|0|KO-BKO multicurvem|0|MultiCurve|0|KO-BKO multicurvem|0|MultiSurface|0|KO-BKO multicurvem|0|PolyhedralSurface|0|KO-BKO multicurvem|0|Triangle|0|KO-BKO multicurvem|0|Tin|0|KO-BKO multicurvem|0|Point|2|KO-BKO multicurvem|0|LineString|2|KO-BKO multicurvem|0|Polygon|2|KO-BKO multicurvem|0|MultiPoint|2|KO-BKO multicurvem|0|MultiLineString|2|KO-BKO multicurvem|0|MultiPolygon|2|KO-BKO multicurvem|0|GeometryCollection|2|KO-BKO multicurvem|0|CircularString|2|KO-BKO multicurvem|0|CompoundCurve|2|KO-BKO multicurvem|0|CurvePolygon|2|KO-BKO multicurvem|0|MultiCurve|2|KO-BKO multicurvem|0|MultiSurface|2|KO-BKO multicurvem|0|PolyhedralSurface|2|KO-BKO multicurvem|0|Triangle|2|KO-BKO multicurvem|0|Point|1|KO-BKO multicurvem|0|LineString|1|KO-BKO multicurvem|0|Polygon|1|KO-BKO multicurvem|0|MultiPoint|1|KO-BKO multicurvem|0|MultiLineString|1|KO-BKO multicurvem|0|MultiPolygon|1|KO-BKO multicurvem|0|GeometryCollection|1|KO-BKO multicurvem|0|CircularString|1|KO-BKO multicurvem|0|CompoundCurve|1|KO-BKO multicurvem|0|CurvePolygon|1|KO-BKO multicurvem|0|MultiCurve|1|OK-BOK multicurvem|0|MultiSurface|1|KO-BKO multicurvem|0|PolyhedralSurface|1|KO-BKO multicurvem|0|Triangle|1|KO-BKO multicurvem|0|Point|3|KO-BKO multicurvem|0|LineString|3|KO-BKO multicurvem|0|Polygon|3|KO-BKO multicurvem|0|MultiPoint|3|KO-BKO multicurvem|0|MultiLineString|3|KO-BKO multicurvem|0|MultiPolygon|3|KO-BKO multicurvem|0|GeometryCollection|3|KO-BKO multicurvem|0|CircularString|3|KO-BKO multicurvem|0|CompoundCurve|3|KO-BKO multicurvem|0|CurvePolygon|3|KO-BKO multicurvem|0|MultiCurve|3|KO-BKO multicurvem|0|MultiSurface|3|KO-BKO multicurvem|0|PolyhedralSurface|3|KO-BKO multicurvem|0|Triangle|3|KO-BKO multicurvem|4326|Point|0|KO-BKO multicurvem|4326|LineString|0|KO-BKO multicurvem|4326|Polygon|0|KO-BKO multicurvem|4326|MultiPoint|0|KO-BKO multicurvem|4326|MultiLineString|0|KO-BKO multicurvem|4326|MultiPolygon|0|KO-BKO multicurvem|4326|GeometryCollection|0|KO-BKO multicurvem|4326|CircularString|0|KO-BKO multicurvem|4326|CompoundCurve|0|KO-BKO multicurvem|4326|CurvePolygon|0|KO-BKO multicurvem|4326|MultiCurve|0|KO-BKO multicurvem|4326|MultiSurface|0|KO-BKO multicurvem|4326|PolyhedralSurface|0|KO-BKO multicurvem|4326|Triangle|0|KO-BKO multicurvem|4326|Tin|0|KO-BKO multicurvem|4326|Point|2|KO-BKO multicurvem|4326|LineString|2|KO-BKO multicurvem|4326|Polygon|2|KO-BKO multicurvem|4326|MultiPoint|2|KO-BKO multicurvem|4326|MultiLineString|2|KO-BKO multicurvem|4326|MultiPolygon|2|KO-BKO multicurvem|4326|GeometryCollection|2|KO-BKO multicurvem|4326|CircularString|2|KO-BKO multicurvem|4326|CompoundCurve|2|KO-BKO multicurvem|4326|CurvePolygon|2|KO-BKO multicurvem|4326|MultiCurve|2|KO-BKO multicurvem|4326|MultiSurface|2|KO-BKO multicurvem|4326|PolyhedralSurface|2|KO-BKO multicurvem|4326|Triangle|2|KO-BKO multicurvem|4326|Point|1|KO-BKO multicurvem|4326|LineString|1|KO-BKO multicurvem|4326|Polygon|1|KO-BKO multicurvem|4326|MultiPoint|1|KO-BKO multicurvem|4326|MultiLineString|1|KO-BKO multicurvem|4326|MultiPolygon|1|KO-BKO multicurvem|4326|GeometryCollection|1|KO-BKO multicurvem|4326|CircularString|1|KO-BKO multicurvem|4326|CompoundCurve|1|KO-BKO multicurvem|4326|CurvePolygon|1|KO-BKO multicurvem|4326|MultiCurve|1|OK-BOK multicurvem|4326|MultiSurface|1|KO-BKO multicurvem|4326|PolyhedralSurface|1|KO-BKO multicurvem|4326|Triangle|1|KO-BKO multicurvem|4326|Point|3|KO-BKO multicurvem|4326|LineString|3|KO-BKO multicurvem|4326|Polygon|3|KO-BKO multicurvem|4326|MultiPoint|3|KO-BKO multicurvem|4326|MultiLineString|3|KO-BKO multicurvem|4326|MultiPolygon|3|KO-BKO multicurvem|4326|GeometryCollection|3|KO-BKO multicurvem|4326|CircularString|3|KO-BKO multicurvem|4326|CompoundCurve|3|KO-BKO multicurvem|4326|CurvePolygon|3|KO-BKO multicurvem|4326|MultiCurve|3|KO-BKO multicurvem|4326|MultiSurface|3|KO-BKO multicurvem|4326|PolyhedralSurface|3|KO-BKO multicurvem|4326|Triangle|3|KO-BKO multicurvem||COUNT|4| multicurvem0|0|Point|0|KO-BKO multicurvem0|0|LineString|0|KO-BKO multicurvem0|0|Polygon|0|KO-BKO multicurvem0|0|MultiPoint|0|KO-BKO multicurvem0|0|MultiLineString|0|KO-BKO multicurvem0|0|MultiPolygon|0|KO-BKO multicurvem0|0|GeometryCollection|0|KO-BKO multicurvem0|0|CircularString|0|KO-BKO multicurvem0|0|CompoundCurve|0|KO-BKO multicurvem0|0|CurvePolygon|0|KO-BKO multicurvem0|0|MultiCurve|0|KO-BKO multicurvem0|0|MultiSurface|0|KO-BKO multicurvem0|0|PolyhedralSurface|0|KO-BKO multicurvem0|0|Triangle|0|KO-BKO multicurvem0|0|Tin|0|KO-BKO multicurvem0|0|Point|2|KO-BKO multicurvem0|0|LineString|2|KO-BKO multicurvem0|0|Polygon|2|KO-BKO multicurvem0|0|MultiPoint|2|KO-BKO multicurvem0|0|MultiLineString|2|KO-BKO multicurvem0|0|MultiPolygon|2|KO-BKO multicurvem0|0|GeometryCollection|2|KO-BKO multicurvem0|0|CircularString|2|KO-BKO multicurvem0|0|CompoundCurve|2|KO-BKO multicurvem0|0|CurvePolygon|2|KO-BKO multicurvem0|0|MultiCurve|2|KO-BKO multicurvem0|0|MultiSurface|2|KO-BKO multicurvem0|0|PolyhedralSurface|2|KO-BKO multicurvem0|0|Triangle|2|KO-BKO multicurvem0|0|Point|1|KO-BKO multicurvem0|0|LineString|1|KO-BKO multicurvem0|0|Polygon|1|KO-BKO multicurvem0|0|MultiPoint|1|KO-BKO multicurvem0|0|MultiLineString|1|KO-BKO multicurvem0|0|MultiPolygon|1|KO-BKO multicurvem0|0|GeometryCollection|1|KO-BKO multicurvem0|0|CircularString|1|KO-BKO multicurvem0|0|CompoundCurve|1|KO-BKO multicurvem0|0|CurvePolygon|1|KO-BKO multicurvem0|0|MultiCurve|1|OK-BOK multicurvem0|0|MultiSurface|1|KO-BKO multicurvem0|0|PolyhedralSurface|1|KO-BKO multicurvem0|0|Triangle|1|KO-BKO multicurvem0|0|Point|3|KO-BKO multicurvem0|0|LineString|3|KO-BKO multicurvem0|0|Polygon|3|KO-BKO multicurvem0|0|MultiPoint|3|KO-BKO multicurvem0|0|MultiLineString|3|KO-BKO multicurvem0|0|MultiPolygon|3|KO-BKO multicurvem0|0|GeometryCollection|3|KO-BKO multicurvem0|0|CircularString|3|KO-BKO multicurvem0|0|CompoundCurve|3|KO-BKO multicurvem0|0|CurvePolygon|3|KO-BKO multicurvem0|0|MultiCurve|3|KO-BKO multicurvem0|0|MultiSurface|3|KO-BKO multicurvem0|0|PolyhedralSurface|3|KO-BKO multicurvem0|0|Triangle|3|KO-BKO multicurvem0|4326|Point|0|KO-BKO multicurvem0|4326|LineString|0|KO-BKO multicurvem0|4326|Polygon|0|KO-BKO multicurvem0|4326|MultiPoint|0|KO-BKO multicurvem0|4326|MultiLineString|0|KO-BKO multicurvem0|4326|MultiPolygon|0|KO-BKO multicurvem0|4326|GeometryCollection|0|KO-BKO multicurvem0|4326|CircularString|0|KO-BKO multicurvem0|4326|CompoundCurve|0|KO-BKO multicurvem0|4326|CurvePolygon|0|KO-BKO multicurvem0|4326|MultiCurve|0|KO-BKO multicurvem0|4326|MultiSurface|0|KO-BKO multicurvem0|4326|PolyhedralSurface|0|KO-BKO multicurvem0|4326|Triangle|0|KO-BKO multicurvem0|4326|Tin|0|KO-BKO multicurvem0|4326|Point|2|KO-BKO multicurvem0|4326|LineString|2|KO-BKO multicurvem0|4326|Polygon|2|KO-BKO multicurvem0|4326|MultiPoint|2|KO-BKO multicurvem0|4326|MultiLineString|2|KO-BKO multicurvem0|4326|MultiPolygon|2|KO-BKO multicurvem0|4326|GeometryCollection|2|KO-BKO multicurvem0|4326|CircularString|2|KO-BKO multicurvem0|4326|CompoundCurve|2|KO-BKO multicurvem0|4326|CurvePolygon|2|KO-BKO multicurvem0|4326|MultiCurve|2|KO-BKO multicurvem0|4326|MultiSurface|2|KO-BKO multicurvem0|4326|PolyhedralSurface|2|KO-BKO multicurvem0|4326|Triangle|2|KO-BKO multicurvem0|4326|Point|1|KO-BKO multicurvem0|4326|LineString|1|KO-BKO multicurvem0|4326|Polygon|1|KO-BKO multicurvem0|4326|MultiPoint|1|KO-BKO multicurvem0|4326|MultiLineString|1|KO-BKO multicurvem0|4326|MultiPolygon|1|KO-BKO multicurvem0|4326|GeometryCollection|1|KO-BKO multicurvem0|4326|CircularString|1|KO-BKO multicurvem0|4326|CompoundCurve|1|KO-BKO multicurvem0|4326|CurvePolygon|1|KO-BKO multicurvem0|4326|MultiCurve|1|OK-BOK multicurvem0|4326|MultiSurface|1|KO-BKO multicurvem0|4326|PolyhedralSurface|1|KO-BKO multicurvem0|4326|Triangle|1|KO-BKO multicurvem0|4326|Point|3|KO-BKO multicurvem0|4326|LineString|3|KO-BKO multicurvem0|4326|Polygon|3|KO-BKO multicurvem0|4326|MultiPoint|3|KO-BKO multicurvem0|4326|MultiLineString|3|KO-BKO multicurvem0|4326|MultiPolygon|3|KO-BKO multicurvem0|4326|GeometryCollection|3|KO-BKO multicurvem0|4326|CircularString|3|KO-BKO multicurvem0|4326|CompoundCurve|3|KO-BKO multicurvem0|4326|CurvePolygon|3|KO-BKO multicurvem0|4326|MultiCurve|3|KO-BKO multicurvem0|4326|MultiSurface|3|KO-BKO multicurvem0|4326|PolyhedralSurface|3|KO-BKO multicurvem0|4326|Triangle|3|KO-BKO multicurvem0||COUNT|4| multicurvem4326|0|Point|0|KO-BKO multicurvem4326|0|LineString|0|KO-BKO multicurvem4326|0|Polygon|0|KO-BKO multicurvem4326|0|MultiPoint|0|KO-BKO multicurvem4326|0|MultiLineString|0|KO-BKO multicurvem4326|0|MultiPolygon|0|KO-BKO multicurvem4326|0|GeometryCollection|0|KO-BKO multicurvem4326|0|CircularString|0|KO-BKO multicurvem4326|0|CompoundCurve|0|KO-BKO multicurvem4326|0|CurvePolygon|0|KO-BKO multicurvem4326|0|MultiCurve|0|KO-BKO multicurvem4326|0|MultiSurface|0|KO-BKO multicurvem4326|0|PolyhedralSurface|0|KO-BKO multicurvem4326|0|Triangle|0|KO-BKO multicurvem4326|0|Tin|0|KO-BKO multicurvem4326|0|Point|2|KO-BKO multicurvem4326|0|LineString|2|KO-BKO multicurvem4326|0|Polygon|2|KO-BKO multicurvem4326|0|MultiPoint|2|KO-BKO multicurvem4326|0|MultiLineString|2|KO-BKO multicurvem4326|0|MultiPolygon|2|KO-BKO multicurvem4326|0|GeometryCollection|2|KO-BKO multicurvem4326|0|CircularString|2|KO-BKO multicurvem4326|0|CompoundCurve|2|KO-BKO multicurvem4326|0|CurvePolygon|2|KO-BKO multicurvem4326|0|MultiCurve|2|KO-BKO multicurvem4326|0|MultiSurface|2|KO-BKO multicurvem4326|0|PolyhedralSurface|2|KO-BKO multicurvem4326|0|Triangle|2|KO-BKO multicurvem4326|0|Point|1|KO-BKO multicurvem4326|0|LineString|1|KO-BKO multicurvem4326|0|Polygon|1|KO-BKO multicurvem4326|0|MultiPoint|1|KO-BKO multicurvem4326|0|MultiLineString|1|KO-BKO multicurvem4326|0|MultiPolygon|1|KO-BKO multicurvem4326|0|GeometryCollection|1|KO-BKO multicurvem4326|0|CircularString|1|KO-BKO multicurvem4326|0|CompoundCurve|1|KO-BKO multicurvem4326|0|CurvePolygon|1|KO-BKO multicurvem4326|0|MultiCurve|1|KO-BKO multicurvem4326|0|MultiSurface|1|KO-BKO multicurvem4326|0|PolyhedralSurface|1|KO-BKO multicurvem4326|0|Triangle|1|KO-BKO multicurvem4326|0|Point|3|KO-BKO multicurvem4326|0|LineString|3|KO-BKO multicurvem4326|0|Polygon|3|KO-BKO multicurvem4326|0|MultiPoint|3|KO-BKO multicurvem4326|0|MultiLineString|3|KO-BKO multicurvem4326|0|MultiPolygon|3|KO-BKO multicurvem4326|0|GeometryCollection|3|KO-BKO multicurvem4326|0|CircularString|3|KO-BKO multicurvem4326|0|CompoundCurve|3|KO-BKO multicurvem4326|0|CurvePolygon|3|KO-BKO multicurvem4326|0|MultiCurve|3|KO-BKO multicurvem4326|0|MultiSurface|3|KO-BKO multicurvem4326|0|PolyhedralSurface|3|KO-BKO multicurvem4326|0|Triangle|3|KO-BKO multicurvem4326|4326|Point|0|KO-BKO multicurvem4326|4326|LineString|0|KO-BKO multicurvem4326|4326|Polygon|0|KO-BKO multicurvem4326|4326|MultiPoint|0|KO-BKO multicurvem4326|4326|MultiLineString|0|KO-BKO multicurvem4326|4326|MultiPolygon|0|KO-BKO multicurvem4326|4326|GeometryCollection|0|KO-BKO multicurvem4326|4326|CircularString|0|KO-BKO multicurvem4326|4326|CompoundCurve|0|KO-BKO multicurvem4326|4326|CurvePolygon|0|KO-BKO multicurvem4326|4326|MultiCurve|0|KO-BKO multicurvem4326|4326|MultiSurface|0|KO-BKO multicurvem4326|4326|PolyhedralSurface|0|KO-BKO multicurvem4326|4326|Triangle|0|KO-BKO multicurvem4326|4326|Tin|0|KO-BKO multicurvem4326|4326|Point|2|KO-BKO multicurvem4326|4326|LineString|2|KO-BKO multicurvem4326|4326|Polygon|2|KO-BKO multicurvem4326|4326|MultiPoint|2|KO-BKO multicurvem4326|4326|MultiLineString|2|KO-BKO multicurvem4326|4326|MultiPolygon|2|KO-BKO multicurvem4326|4326|GeometryCollection|2|KO-BKO multicurvem4326|4326|CircularString|2|KO-BKO multicurvem4326|4326|CompoundCurve|2|KO-BKO multicurvem4326|4326|CurvePolygon|2|KO-BKO multicurvem4326|4326|MultiCurve|2|KO-BKO multicurvem4326|4326|MultiSurface|2|KO-BKO multicurvem4326|4326|PolyhedralSurface|2|KO-BKO multicurvem4326|4326|Triangle|2|KO-BKO multicurvem4326|4326|Point|1|KO-BKO multicurvem4326|4326|LineString|1|KO-BKO multicurvem4326|4326|Polygon|1|KO-BKO multicurvem4326|4326|MultiPoint|1|KO-BKO multicurvem4326|4326|MultiLineString|1|KO-BKO multicurvem4326|4326|MultiPolygon|1|KO-BKO multicurvem4326|4326|GeometryCollection|1|KO-BKO multicurvem4326|4326|CircularString|1|KO-BKO multicurvem4326|4326|CompoundCurve|1|KO-BKO multicurvem4326|4326|CurvePolygon|1|KO-BKO multicurvem4326|4326|MultiCurve|1|OK-BOK multicurvem4326|4326|MultiSurface|1|KO-BKO multicurvem4326|4326|PolyhedralSurface|1|KO-BKO multicurvem4326|4326|Triangle|1|KO-BKO multicurvem4326|4326|Point|3|KO-BKO multicurvem4326|4326|LineString|3|KO-BKO multicurvem4326|4326|Polygon|3|KO-BKO multicurvem4326|4326|MultiPoint|3|KO-BKO multicurvem4326|4326|MultiLineString|3|KO-BKO multicurvem4326|4326|MultiPolygon|3|KO-BKO multicurvem4326|4326|GeometryCollection|3|KO-BKO multicurvem4326|4326|CircularString|3|KO-BKO multicurvem4326|4326|CompoundCurve|3|KO-BKO multicurvem4326|4326|CurvePolygon|3|KO-BKO multicurvem4326|4326|MultiCurve|3|KO-BKO multicurvem4326|4326|MultiSurface|3|KO-BKO multicurvem4326|4326|PolyhedralSurface|3|KO-BKO multicurvem4326|4326|Triangle|3|KO-BKO multicurvem4326||COUNT|2| multicurvez|0|Point|0|KO-BKO multicurvez|0|LineString|0|KO-BKO multicurvez|0|Polygon|0|KO-BKO multicurvez|0|MultiPoint|0|KO-BKO multicurvez|0|MultiLineString|0|KO-BKO multicurvez|0|MultiPolygon|0|KO-BKO multicurvez|0|GeometryCollection|0|KO-BKO multicurvez|0|CircularString|0|KO-BKO multicurvez|0|CompoundCurve|0|KO-BKO multicurvez|0|CurvePolygon|0|KO-BKO multicurvez|0|MultiCurve|0|KO-BKO multicurvez|0|MultiSurface|0|KO-BKO multicurvez|0|PolyhedralSurface|0|KO-BKO multicurvez|0|Triangle|0|KO-BKO multicurvez|0|Tin|0|KO-BKO multicurvez|0|Point|2|KO-BKO multicurvez|0|LineString|2|KO-BKO multicurvez|0|Polygon|2|KO-BKO multicurvez|0|MultiPoint|2|KO-BKO multicurvez|0|MultiLineString|2|KO-BKO multicurvez|0|MultiPolygon|2|KO-BKO multicurvez|0|GeometryCollection|2|KO-BKO multicurvez|0|CircularString|2|KO-BKO multicurvez|0|CompoundCurve|2|KO-BKO multicurvez|0|CurvePolygon|2|KO-BKO multicurvez|0|MultiCurve|2|OK-BOK multicurvez|0|MultiSurface|2|KO-BKO multicurvez|0|PolyhedralSurface|2|KO-BKO multicurvez|0|Triangle|2|KO-BKO multicurvez|0|Point|1|KO-BKO multicurvez|0|LineString|1|KO-BKO multicurvez|0|Polygon|1|KO-BKO multicurvez|0|MultiPoint|1|KO-BKO multicurvez|0|MultiLineString|1|KO-BKO multicurvez|0|MultiPolygon|1|KO-BKO multicurvez|0|GeometryCollection|1|KO-BKO multicurvez|0|CircularString|1|KO-BKO multicurvez|0|CompoundCurve|1|KO-BKO multicurvez|0|CurvePolygon|1|KO-BKO multicurvez|0|MultiCurve|1|KO-BKO multicurvez|0|MultiSurface|1|KO-BKO multicurvez|0|PolyhedralSurface|1|KO-BKO multicurvez|0|Triangle|1|KO-BKO multicurvez|0|Point|3|KO-BKO multicurvez|0|LineString|3|KO-BKO multicurvez|0|Polygon|3|KO-BKO multicurvez|0|MultiPoint|3|KO-BKO multicurvez|0|MultiLineString|3|KO-BKO multicurvez|0|MultiPolygon|3|KO-BKO multicurvez|0|GeometryCollection|3|KO-BKO multicurvez|0|CircularString|3|KO-BKO multicurvez|0|CompoundCurve|3|KO-BKO multicurvez|0|CurvePolygon|3|KO-BKO multicurvez|0|MultiCurve|3|KO-BKO multicurvez|0|MultiSurface|3|KO-BKO multicurvez|0|PolyhedralSurface|3|KO-BKO multicurvez|0|Triangle|3|KO-BKO multicurvez|4326|Point|0|KO-BKO multicurvez|4326|LineString|0|KO-BKO multicurvez|4326|Polygon|0|KO-BKO multicurvez|4326|MultiPoint|0|KO-BKO multicurvez|4326|MultiLineString|0|KO-BKO multicurvez|4326|MultiPolygon|0|KO-BKO multicurvez|4326|GeometryCollection|0|KO-BKO multicurvez|4326|CircularString|0|KO-BKO multicurvez|4326|CompoundCurve|0|KO-BKO multicurvez|4326|CurvePolygon|0|KO-BKO multicurvez|4326|MultiCurve|0|KO-BKO multicurvez|4326|MultiSurface|0|KO-BKO multicurvez|4326|PolyhedralSurface|0|KO-BKO multicurvez|4326|Triangle|0|KO-BKO multicurvez|4326|Tin|0|KO-BKO multicurvez|4326|Point|2|KO-BKO multicurvez|4326|LineString|2|KO-BKO multicurvez|4326|Polygon|2|KO-BKO multicurvez|4326|MultiPoint|2|KO-BKO multicurvez|4326|MultiLineString|2|KO-BKO multicurvez|4326|MultiPolygon|2|KO-BKO multicurvez|4326|GeometryCollection|2|KO-BKO multicurvez|4326|CircularString|2|KO-BKO multicurvez|4326|CompoundCurve|2|KO-BKO multicurvez|4326|CurvePolygon|2|KO-BKO multicurvez|4326|MultiCurve|2|OK-BOK multicurvez|4326|MultiSurface|2|KO-BKO multicurvez|4326|PolyhedralSurface|2|KO-BKO multicurvez|4326|Triangle|2|KO-BKO multicurvez|4326|Point|1|KO-BKO multicurvez|4326|LineString|1|KO-BKO multicurvez|4326|Polygon|1|KO-BKO multicurvez|4326|MultiPoint|1|KO-BKO multicurvez|4326|MultiLineString|1|KO-BKO multicurvez|4326|MultiPolygon|1|KO-BKO multicurvez|4326|GeometryCollection|1|KO-BKO multicurvez|4326|CircularString|1|KO-BKO multicurvez|4326|CompoundCurve|1|KO-BKO multicurvez|4326|CurvePolygon|1|KO-BKO multicurvez|4326|MultiCurve|1|KO-BKO multicurvez|4326|MultiSurface|1|KO-BKO multicurvez|4326|PolyhedralSurface|1|KO-BKO multicurvez|4326|Triangle|1|KO-BKO multicurvez|4326|Point|3|KO-BKO multicurvez|4326|LineString|3|KO-BKO multicurvez|4326|Polygon|3|KO-BKO multicurvez|4326|MultiPoint|3|KO-BKO multicurvez|4326|MultiLineString|3|KO-BKO multicurvez|4326|MultiPolygon|3|KO-BKO multicurvez|4326|GeometryCollection|3|KO-BKO multicurvez|4326|CircularString|3|KO-BKO multicurvez|4326|CompoundCurve|3|KO-BKO multicurvez|4326|CurvePolygon|3|KO-BKO multicurvez|4326|MultiCurve|3|KO-BKO multicurvez|4326|MultiSurface|3|KO-BKO multicurvez|4326|PolyhedralSurface|3|KO-BKO multicurvez|4326|Triangle|3|KO-BKO multicurvez||COUNT|4| multicurvez0|0|Point|0|KO-BKO multicurvez0|0|LineString|0|KO-BKO multicurvez0|0|Polygon|0|KO-BKO multicurvez0|0|MultiPoint|0|KO-BKO multicurvez0|0|MultiLineString|0|KO-BKO multicurvez0|0|MultiPolygon|0|KO-BKO multicurvez0|0|GeometryCollection|0|KO-BKO multicurvez0|0|CircularString|0|KO-BKO multicurvez0|0|CompoundCurve|0|KO-BKO multicurvez0|0|CurvePolygon|0|KO-BKO multicurvez0|0|MultiCurve|0|KO-BKO multicurvez0|0|MultiSurface|0|KO-BKO multicurvez0|0|PolyhedralSurface|0|KO-BKO multicurvez0|0|Triangle|0|KO-BKO multicurvez0|0|Tin|0|KO-BKO multicurvez0|0|Point|2|KO-BKO multicurvez0|0|LineString|2|KO-BKO multicurvez0|0|Polygon|2|KO-BKO multicurvez0|0|MultiPoint|2|KO-BKO multicurvez0|0|MultiLineString|2|KO-BKO multicurvez0|0|MultiPolygon|2|KO-BKO multicurvez0|0|GeometryCollection|2|KO-BKO multicurvez0|0|CircularString|2|KO-BKO multicurvez0|0|CompoundCurve|2|KO-BKO multicurvez0|0|CurvePolygon|2|KO-BKO multicurvez0|0|MultiCurve|2|OK-BOK multicurvez0|0|MultiSurface|2|KO-BKO multicurvez0|0|PolyhedralSurface|2|KO-BKO multicurvez0|0|Triangle|2|KO-BKO multicurvez0|0|Point|1|KO-BKO multicurvez0|0|LineString|1|KO-BKO multicurvez0|0|Polygon|1|KO-BKO multicurvez0|0|MultiPoint|1|KO-BKO multicurvez0|0|MultiLineString|1|KO-BKO multicurvez0|0|MultiPolygon|1|KO-BKO multicurvez0|0|GeometryCollection|1|KO-BKO multicurvez0|0|CircularString|1|KO-BKO multicurvez0|0|CompoundCurve|1|KO-BKO multicurvez0|0|CurvePolygon|1|KO-BKO multicurvez0|0|MultiCurve|1|KO-BKO multicurvez0|0|MultiSurface|1|KO-BKO multicurvez0|0|PolyhedralSurface|1|KO-BKO multicurvez0|0|Triangle|1|KO-BKO multicurvez0|0|Point|3|KO-BKO multicurvez0|0|LineString|3|KO-BKO multicurvez0|0|Polygon|3|KO-BKO multicurvez0|0|MultiPoint|3|KO-BKO multicurvez0|0|MultiLineString|3|KO-BKO multicurvez0|0|MultiPolygon|3|KO-BKO multicurvez0|0|GeometryCollection|3|KO-BKO multicurvez0|0|CircularString|3|KO-BKO multicurvez0|0|CompoundCurve|3|KO-BKO multicurvez0|0|CurvePolygon|3|KO-BKO multicurvez0|0|MultiCurve|3|KO-BKO multicurvez0|0|MultiSurface|3|KO-BKO multicurvez0|0|PolyhedralSurface|3|KO-BKO multicurvez0|0|Triangle|3|KO-BKO multicurvez0|4326|Point|0|KO-BKO multicurvez0|4326|LineString|0|KO-BKO multicurvez0|4326|Polygon|0|KO-BKO multicurvez0|4326|MultiPoint|0|KO-BKO multicurvez0|4326|MultiLineString|0|KO-BKO multicurvez0|4326|MultiPolygon|0|KO-BKO multicurvez0|4326|GeometryCollection|0|KO-BKO multicurvez0|4326|CircularString|0|KO-BKO multicurvez0|4326|CompoundCurve|0|KO-BKO multicurvez0|4326|CurvePolygon|0|KO-BKO multicurvez0|4326|MultiCurve|0|KO-BKO multicurvez0|4326|MultiSurface|0|KO-BKO multicurvez0|4326|PolyhedralSurface|0|KO-BKO multicurvez0|4326|Triangle|0|KO-BKO multicurvez0|4326|Tin|0|KO-BKO multicurvez0|4326|Point|2|KO-BKO multicurvez0|4326|LineString|2|KO-BKO multicurvez0|4326|Polygon|2|KO-BKO multicurvez0|4326|MultiPoint|2|KO-BKO multicurvez0|4326|MultiLineString|2|KO-BKO multicurvez0|4326|MultiPolygon|2|KO-BKO multicurvez0|4326|GeometryCollection|2|KO-BKO multicurvez0|4326|CircularString|2|KO-BKO multicurvez0|4326|CompoundCurve|2|KO-BKO multicurvez0|4326|CurvePolygon|2|KO-BKO multicurvez0|4326|MultiCurve|2|OK-BOK multicurvez0|4326|MultiSurface|2|KO-BKO multicurvez0|4326|PolyhedralSurface|2|KO-BKO multicurvez0|4326|Triangle|2|KO-BKO multicurvez0|4326|Point|1|KO-BKO multicurvez0|4326|LineString|1|KO-BKO multicurvez0|4326|Polygon|1|KO-BKO multicurvez0|4326|MultiPoint|1|KO-BKO multicurvez0|4326|MultiLineString|1|KO-BKO multicurvez0|4326|MultiPolygon|1|KO-BKO multicurvez0|4326|GeometryCollection|1|KO-BKO multicurvez0|4326|CircularString|1|KO-BKO multicurvez0|4326|CompoundCurve|1|KO-BKO multicurvez0|4326|CurvePolygon|1|KO-BKO multicurvez0|4326|MultiCurve|1|KO-BKO multicurvez0|4326|MultiSurface|1|KO-BKO multicurvez0|4326|PolyhedralSurface|1|KO-BKO multicurvez0|4326|Triangle|1|KO-BKO multicurvez0|4326|Point|3|KO-BKO multicurvez0|4326|LineString|3|KO-BKO multicurvez0|4326|Polygon|3|KO-BKO multicurvez0|4326|MultiPoint|3|KO-BKO multicurvez0|4326|MultiLineString|3|KO-BKO multicurvez0|4326|MultiPolygon|3|KO-BKO multicurvez0|4326|GeometryCollection|3|KO-BKO multicurvez0|4326|CircularString|3|KO-BKO multicurvez0|4326|CompoundCurve|3|KO-BKO multicurvez0|4326|CurvePolygon|3|KO-BKO multicurvez0|4326|MultiCurve|3|KO-BKO multicurvez0|4326|MultiSurface|3|KO-BKO multicurvez0|4326|PolyhedralSurface|3|KO-BKO multicurvez0|4326|Triangle|3|KO-BKO multicurvez0||COUNT|4| multicurvez4326|0|Point|0|KO-BKO multicurvez4326|0|LineString|0|KO-BKO multicurvez4326|0|Polygon|0|KO-BKO multicurvez4326|0|MultiPoint|0|KO-BKO multicurvez4326|0|MultiLineString|0|KO-BKO multicurvez4326|0|MultiPolygon|0|KO-BKO multicurvez4326|0|GeometryCollection|0|KO-BKO multicurvez4326|0|CircularString|0|KO-BKO multicurvez4326|0|CompoundCurve|0|KO-BKO multicurvez4326|0|CurvePolygon|0|KO-BKO multicurvez4326|0|MultiCurve|0|KO-BKO multicurvez4326|0|MultiSurface|0|KO-BKO multicurvez4326|0|PolyhedralSurface|0|KO-BKO multicurvez4326|0|Triangle|0|KO-BKO multicurvez4326|0|Tin|0|KO-BKO multicurvez4326|0|Point|2|KO-BKO multicurvez4326|0|LineString|2|KO-BKO multicurvez4326|0|Polygon|2|KO-BKO multicurvez4326|0|MultiPoint|2|KO-BKO multicurvez4326|0|MultiLineString|2|KO-BKO multicurvez4326|0|MultiPolygon|2|KO-BKO multicurvez4326|0|GeometryCollection|2|KO-BKO multicurvez4326|0|CircularString|2|KO-BKO multicurvez4326|0|CompoundCurve|2|KO-BKO multicurvez4326|0|CurvePolygon|2|KO-BKO multicurvez4326|0|MultiCurve|2|KO-BKO multicurvez4326|0|MultiSurface|2|KO-BKO multicurvez4326|0|PolyhedralSurface|2|KO-BKO multicurvez4326|0|Triangle|2|KO-BKO multicurvez4326|0|Point|1|KO-BKO multicurvez4326|0|LineString|1|KO-BKO multicurvez4326|0|Polygon|1|KO-BKO multicurvez4326|0|MultiPoint|1|KO-BKO multicurvez4326|0|MultiLineString|1|KO-BKO multicurvez4326|0|MultiPolygon|1|KO-BKO multicurvez4326|0|GeometryCollection|1|KO-BKO multicurvez4326|0|CircularString|1|KO-BKO multicurvez4326|0|CompoundCurve|1|KO-BKO multicurvez4326|0|CurvePolygon|1|KO-BKO multicurvez4326|0|MultiCurve|1|KO-BKO multicurvez4326|0|MultiSurface|1|KO-BKO multicurvez4326|0|PolyhedralSurface|1|KO-BKO multicurvez4326|0|Triangle|1|KO-BKO multicurvez4326|0|Point|3|KO-BKO multicurvez4326|0|LineString|3|KO-BKO multicurvez4326|0|Polygon|3|KO-BKO multicurvez4326|0|MultiPoint|3|KO-BKO multicurvez4326|0|MultiLineString|3|KO-BKO multicurvez4326|0|MultiPolygon|3|KO-BKO multicurvez4326|0|GeometryCollection|3|KO-BKO multicurvez4326|0|CircularString|3|KO-BKO multicurvez4326|0|CompoundCurve|3|KO-BKO multicurvez4326|0|CurvePolygon|3|KO-BKO multicurvez4326|0|MultiCurve|3|KO-BKO multicurvez4326|0|MultiSurface|3|KO-BKO multicurvez4326|0|PolyhedralSurface|3|KO-BKO multicurvez4326|0|Triangle|3|KO-BKO multicurvez4326|4326|Point|0|KO-BKO multicurvez4326|4326|LineString|0|KO-BKO multicurvez4326|4326|Polygon|0|KO-BKO multicurvez4326|4326|MultiPoint|0|KO-BKO multicurvez4326|4326|MultiLineString|0|KO-BKO multicurvez4326|4326|MultiPolygon|0|KO-BKO multicurvez4326|4326|GeometryCollection|0|KO-BKO multicurvez4326|4326|CircularString|0|KO-BKO multicurvez4326|4326|CompoundCurve|0|KO-BKO multicurvez4326|4326|CurvePolygon|0|KO-BKO multicurvez4326|4326|MultiCurve|0|KO-BKO multicurvez4326|4326|MultiSurface|0|KO-BKO multicurvez4326|4326|PolyhedralSurface|0|KO-BKO multicurvez4326|4326|Triangle|0|KO-BKO multicurvez4326|4326|Tin|0|KO-BKO multicurvez4326|4326|Point|2|KO-BKO multicurvez4326|4326|LineString|2|KO-BKO multicurvez4326|4326|Polygon|2|KO-BKO multicurvez4326|4326|MultiPoint|2|KO-BKO multicurvez4326|4326|MultiLineString|2|KO-BKO multicurvez4326|4326|MultiPolygon|2|KO-BKO multicurvez4326|4326|GeometryCollection|2|KO-BKO multicurvez4326|4326|CircularString|2|KO-BKO multicurvez4326|4326|CompoundCurve|2|KO-BKO multicurvez4326|4326|CurvePolygon|2|KO-BKO multicurvez4326|4326|MultiCurve|2|OK-BOK multicurvez4326|4326|MultiSurface|2|KO-BKO multicurvez4326|4326|PolyhedralSurface|2|KO-BKO multicurvez4326|4326|Triangle|2|KO-BKO multicurvez4326|4326|Point|1|KO-BKO multicurvez4326|4326|LineString|1|KO-BKO multicurvez4326|4326|Polygon|1|KO-BKO multicurvez4326|4326|MultiPoint|1|KO-BKO multicurvez4326|4326|MultiLineString|1|KO-BKO multicurvez4326|4326|MultiPolygon|1|KO-BKO multicurvez4326|4326|GeometryCollection|1|KO-BKO multicurvez4326|4326|CircularString|1|KO-BKO multicurvez4326|4326|CompoundCurve|1|KO-BKO multicurvez4326|4326|CurvePolygon|1|KO-BKO multicurvez4326|4326|MultiCurve|1|KO-BKO multicurvez4326|4326|MultiSurface|1|KO-BKO multicurvez4326|4326|PolyhedralSurface|1|KO-BKO multicurvez4326|4326|Triangle|1|KO-BKO multicurvez4326|4326|Point|3|KO-BKO multicurvez4326|4326|LineString|3|KO-BKO multicurvez4326|4326|Polygon|3|KO-BKO multicurvez4326|4326|MultiPoint|3|KO-BKO multicurvez4326|4326|MultiLineString|3|KO-BKO multicurvez4326|4326|MultiPolygon|3|KO-BKO multicurvez4326|4326|GeometryCollection|3|KO-BKO multicurvez4326|4326|CircularString|3|KO-BKO multicurvez4326|4326|CompoundCurve|3|KO-BKO multicurvez4326|4326|CurvePolygon|3|KO-BKO multicurvez4326|4326|MultiCurve|3|KO-BKO multicurvez4326|4326|MultiSurface|3|KO-BKO multicurvez4326|4326|PolyhedralSurface|3|KO-BKO multicurvez4326|4326|Triangle|3|KO-BKO multicurvez4326||COUNT|2| multicurvezm|0|Point|0|KO-BKO multicurvezm|0|LineString|0|KO-BKO multicurvezm|0|Polygon|0|KO-BKO multicurvezm|0|MultiPoint|0|KO-BKO multicurvezm|0|MultiLineString|0|KO-BKO multicurvezm|0|MultiPolygon|0|KO-BKO multicurvezm|0|GeometryCollection|0|KO-BKO multicurvezm|0|CircularString|0|KO-BKO multicurvezm|0|CompoundCurve|0|KO-BKO multicurvezm|0|CurvePolygon|0|KO-BKO multicurvezm|0|MultiCurve|0|KO-BKO multicurvezm|0|MultiSurface|0|KO-BKO multicurvezm|0|PolyhedralSurface|0|KO-BKO multicurvezm|0|Triangle|0|KO-BKO multicurvezm|0|Tin|0|KO-BKO multicurvezm|0|Point|2|KO-BKO multicurvezm|0|LineString|2|KO-BKO multicurvezm|0|Polygon|2|KO-BKO multicurvezm|0|MultiPoint|2|KO-BKO multicurvezm|0|MultiLineString|2|KO-BKO multicurvezm|0|MultiPolygon|2|KO-BKO multicurvezm|0|GeometryCollection|2|KO-BKO multicurvezm|0|CircularString|2|KO-BKO multicurvezm|0|CompoundCurve|2|KO-BKO multicurvezm|0|CurvePolygon|2|KO-BKO multicurvezm|0|MultiCurve|2|KO-BKO multicurvezm|0|MultiSurface|2|KO-BKO multicurvezm|0|PolyhedralSurface|2|KO-BKO multicurvezm|0|Triangle|2|KO-BKO multicurvezm|0|Point|1|KO-BKO multicurvezm|0|LineString|1|KO-BKO multicurvezm|0|Polygon|1|KO-BKO multicurvezm|0|MultiPoint|1|KO-BKO multicurvezm|0|MultiLineString|1|KO-BKO multicurvezm|0|MultiPolygon|1|KO-BKO multicurvezm|0|GeometryCollection|1|KO-BKO multicurvezm|0|CircularString|1|KO-BKO multicurvezm|0|CompoundCurve|1|KO-BKO multicurvezm|0|CurvePolygon|1|KO-BKO multicurvezm|0|MultiCurve|1|KO-BKO multicurvezm|0|MultiSurface|1|KO-BKO multicurvezm|0|PolyhedralSurface|1|KO-BKO multicurvezm|0|Triangle|1|KO-BKO multicurvezm|0|Point|3|KO-BKO multicurvezm|0|LineString|3|KO-BKO multicurvezm|0|Polygon|3|KO-BKO multicurvezm|0|MultiPoint|3|KO-BKO multicurvezm|0|MultiLineString|3|KO-BKO multicurvezm|0|MultiPolygon|3|KO-BKO multicurvezm|0|GeometryCollection|3|KO-BKO multicurvezm|0|CircularString|3|KO-BKO multicurvezm|0|CompoundCurve|3|KO-BKO multicurvezm|0|CurvePolygon|3|KO-BKO multicurvezm|0|MultiCurve|3|OK-BOK multicurvezm|0|MultiSurface|3|KO-BKO multicurvezm|0|PolyhedralSurface|3|KO-BKO multicurvezm|0|Triangle|3|KO-BKO multicurvezm|4326|Point|0|KO-BKO multicurvezm|4326|LineString|0|KO-BKO multicurvezm|4326|Polygon|0|KO-BKO multicurvezm|4326|MultiPoint|0|KO-BKO multicurvezm|4326|MultiLineString|0|KO-BKO multicurvezm|4326|MultiPolygon|0|KO-BKO multicurvezm|4326|GeometryCollection|0|KO-BKO multicurvezm|4326|CircularString|0|KO-BKO multicurvezm|4326|CompoundCurve|0|KO-BKO multicurvezm|4326|CurvePolygon|0|KO-BKO multicurvezm|4326|MultiCurve|0|KO-BKO multicurvezm|4326|MultiSurface|0|KO-BKO multicurvezm|4326|PolyhedralSurface|0|KO-BKO multicurvezm|4326|Triangle|0|KO-BKO multicurvezm|4326|Tin|0|KO-BKO multicurvezm|4326|Point|2|KO-BKO multicurvezm|4326|LineString|2|KO-BKO multicurvezm|4326|Polygon|2|KO-BKO multicurvezm|4326|MultiPoint|2|KO-BKO multicurvezm|4326|MultiLineString|2|KO-BKO multicurvezm|4326|MultiPolygon|2|KO-BKO multicurvezm|4326|GeometryCollection|2|KO-BKO multicurvezm|4326|CircularString|2|KO-BKO multicurvezm|4326|CompoundCurve|2|KO-BKO multicurvezm|4326|CurvePolygon|2|KO-BKO multicurvezm|4326|MultiCurve|2|KO-BKO multicurvezm|4326|MultiSurface|2|KO-BKO multicurvezm|4326|PolyhedralSurface|2|KO-BKO multicurvezm|4326|Triangle|2|KO-BKO multicurvezm|4326|Point|1|KO-BKO multicurvezm|4326|LineString|1|KO-BKO multicurvezm|4326|Polygon|1|KO-BKO multicurvezm|4326|MultiPoint|1|KO-BKO multicurvezm|4326|MultiLineString|1|KO-BKO multicurvezm|4326|MultiPolygon|1|KO-BKO multicurvezm|4326|GeometryCollection|1|KO-BKO multicurvezm|4326|CircularString|1|KO-BKO multicurvezm|4326|CompoundCurve|1|KO-BKO multicurvezm|4326|CurvePolygon|1|KO-BKO multicurvezm|4326|MultiCurve|1|KO-BKO multicurvezm|4326|MultiSurface|1|KO-BKO multicurvezm|4326|PolyhedralSurface|1|KO-BKO multicurvezm|4326|Triangle|1|KO-BKO multicurvezm|4326|Point|3|KO-BKO multicurvezm|4326|LineString|3|KO-BKO multicurvezm|4326|Polygon|3|KO-BKO multicurvezm|4326|MultiPoint|3|KO-BKO multicurvezm|4326|MultiLineString|3|KO-BKO multicurvezm|4326|MultiPolygon|3|KO-BKO multicurvezm|4326|GeometryCollection|3|KO-BKO multicurvezm|4326|CircularString|3|KO-BKO multicurvezm|4326|CompoundCurve|3|KO-BKO multicurvezm|4326|CurvePolygon|3|KO-BKO multicurvezm|4326|MultiCurve|3|OK-BOK multicurvezm|4326|MultiSurface|3|KO-BKO multicurvezm|4326|PolyhedralSurface|3|KO-BKO multicurvezm|4326|Triangle|3|KO-BKO multicurvezm||COUNT|4| multicurvezm0|0|Point|0|KO-BKO multicurvezm0|0|LineString|0|KO-BKO multicurvezm0|0|Polygon|0|KO-BKO multicurvezm0|0|MultiPoint|0|KO-BKO multicurvezm0|0|MultiLineString|0|KO-BKO multicurvezm0|0|MultiPolygon|0|KO-BKO multicurvezm0|0|GeometryCollection|0|KO-BKO multicurvezm0|0|CircularString|0|KO-BKO multicurvezm0|0|CompoundCurve|0|KO-BKO multicurvezm0|0|CurvePolygon|0|KO-BKO multicurvezm0|0|MultiCurve|0|KO-BKO multicurvezm0|0|MultiSurface|0|KO-BKO multicurvezm0|0|PolyhedralSurface|0|KO-BKO multicurvezm0|0|Triangle|0|KO-BKO multicurvezm0|0|Tin|0|KO-BKO multicurvezm0|0|Point|2|KO-BKO multicurvezm0|0|LineString|2|KO-BKO multicurvezm0|0|Polygon|2|KO-BKO multicurvezm0|0|MultiPoint|2|KO-BKO multicurvezm0|0|MultiLineString|2|KO-BKO multicurvezm0|0|MultiPolygon|2|KO-BKO multicurvezm0|0|GeometryCollection|2|KO-BKO multicurvezm0|0|CircularString|2|KO-BKO multicurvezm0|0|CompoundCurve|2|KO-BKO multicurvezm0|0|CurvePolygon|2|KO-BKO multicurvezm0|0|MultiCurve|2|KO-BKO multicurvezm0|0|MultiSurface|2|KO-BKO multicurvezm0|0|PolyhedralSurface|2|KO-BKO multicurvezm0|0|Triangle|2|KO-BKO multicurvezm0|0|Point|1|KO-BKO multicurvezm0|0|LineString|1|KO-BKO multicurvezm0|0|Polygon|1|KO-BKO multicurvezm0|0|MultiPoint|1|KO-BKO multicurvezm0|0|MultiLineString|1|KO-BKO multicurvezm0|0|MultiPolygon|1|KO-BKO multicurvezm0|0|GeometryCollection|1|KO-BKO multicurvezm0|0|CircularString|1|KO-BKO multicurvezm0|0|CompoundCurve|1|KO-BKO multicurvezm0|0|CurvePolygon|1|KO-BKO multicurvezm0|0|MultiCurve|1|KO-BKO multicurvezm0|0|MultiSurface|1|KO-BKO multicurvezm0|0|PolyhedralSurface|1|KO-BKO multicurvezm0|0|Triangle|1|KO-BKO multicurvezm0|0|Point|3|KO-BKO multicurvezm0|0|LineString|3|KO-BKO multicurvezm0|0|Polygon|3|KO-BKO multicurvezm0|0|MultiPoint|3|KO-BKO multicurvezm0|0|MultiLineString|3|KO-BKO multicurvezm0|0|MultiPolygon|3|KO-BKO multicurvezm0|0|GeometryCollection|3|KO-BKO multicurvezm0|0|CircularString|3|KO-BKO multicurvezm0|0|CompoundCurve|3|KO-BKO multicurvezm0|0|CurvePolygon|3|KO-BKO multicurvezm0|0|MultiCurve|3|OK-BOK multicurvezm0|0|MultiSurface|3|KO-BKO multicurvezm0|0|PolyhedralSurface|3|KO-BKO multicurvezm0|0|Triangle|3|KO-BKO multicurvezm0|4326|Point|0|KO-BKO multicurvezm0|4326|LineString|0|KO-BKO multicurvezm0|4326|Polygon|0|KO-BKO multicurvezm0|4326|MultiPoint|0|KO-BKO multicurvezm0|4326|MultiLineString|0|KO-BKO multicurvezm0|4326|MultiPolygon|0|KO-BKO multicurvezm0|4326|GeometryCollection|0|KO-BKO multicurvezm0|4326|CircularString|0|KO-BKO multicurvezm0|4326|CompoundCurve|0|KO-BKO multicurvezm0|4326|CurvePolygon|0|KO-BKO multicurvezm0|4326|MultiCurve|0|KO-BKO multicurvezm0|4326|MultiSurface|0|KO-BKO multicurvezm0|4326|PolyhedralSurface|0|KO-BKO multicurvezm0|4326|Triangle|0|KO-BKO multicurvezm0|4326|Tin|0|KO-BKO multicurvezm0|4326|Point|2|KO-BKO multicurvezm0|4326|LineString|2|KO-BKO multicurvezm0|4326|Polygon|2|KO-BKO multicurvezm0|4326|MultiPoint|2|KO-BKO multicurvezm0|4326|MultiLineString|2|KO-BKO multicurvezm0|4326|MultiPolygon|2|KO-BKO multicurvezm0|4326|GeometryCollection|2|KO-BKO multicurvezm0|4326|CircularString|2|KO-BKO multicurvezm0|4326|CompoundCurve|2|KO-BKO multicurvezm0|4326|CurvePolygon|2|KO-BKO multicurvezm0|4326|MultiCurve|2|KO-BKO multicurvezm0|4326|MultiSurface|2|KO-BKO multicurvezm0|4326|PolyhedralSurface|2|KO-BKO multicurvezm0|4326|Triangle|2|KO-BKO multicurvezm0|4326|Point|1|KO-BKO multicurvezm0|4326|LineString|1|KO-BKO multicurvezm0|4326|Polygon|1|KO-BKO multicurvezm0|4326|MultiPoint|1|KO-BKO multicurvezm0|4326|MultiLineString|1|KO-BKO multicurvezm0|4326|MultiPolygon|1|KO-BKO multicurvezm0|4326|GeometryCollection|1|KO-BKO multicurvezm0|4326|CircularString|1|KO-BKO multicurvezm0|4326|CompoundCurve|1|KO-BKO multicurvezm0|4326|CurvePolygon|1|KO-BKO multicurvezm0|4326|MultiCurve|1|KO-BKO multicurvezm0|4326|MultiSurface|1|KO-BKO multicurvezm0|4326|PolyhedralSurface|1|KO-BKO multicurvezm0|4326|Triangle|1|KO-BKO multicurvezm0|4326|Point|3|KO-BKO multicurvezm0|4326|LineString|3|KO-BKO multicurvezm0|4326|Polygon|3|KO-BKO multicurvezm0|4326|MultiPoint|3|KO-BKO multicurvezm0|4326|MultiLineString|3|KO-BKO multicurvezm0|4326|MultiPolygon|3|KO-BKO multicurvezm0|4326|GeometryCollection|3|KO-BKO multicurvezm0|4326|CircularString|3|KO-BKO multicurvezm0|4326|CompoundCurve|3|KO-BKO multicurvezm0|4326|CurvePolygon|3|KO-BKO multicurvezm0|4326|MultiCurve|3|OK-BOK multicurvezm0|4326|MultiSurface|3|KO-BKO multicurvezm0|4326|PolyhedralSurface|3|KO-BKO multicurvezm0|4326|Triangle|3|KO-BKO multicurvezm0||COUNT|4| multicurvezm4326|0|Point|0|KO-BKO multicurvezm4326|0|LineString|0|KO-BKO multicurvezm4326|0|Polygon|0|KO-BKO multicurvezm4326|0|MultiPoint|0|KO-BKO multicurvezm4326|0|MultiLineString|0|KO-BKO multicurvezm4326|0|MultiPolygon|0|KO-BKO multicurvezm4326|0|GeometryCollection|0|KO-BKO multicurvezm4326|0|CircularString|0|KO-BKO multicurvezm4326|0|CompoundCurve|0|KO-BKO multicurvezm4326|0|CurvePolygon|0|KO-BKO multicurvezm4326|0|MultiCurve|0|KO-BKO multicurvezm4326|0|MultiSurface|0|KO-BKO multicurvezm4326|0|PolyhedralSurface|0|KO-BKO multicurvezm4326|0|Triangle|0|KO-BKO multicurvezm4326|0|Tin|0|KO-BKO multicurvezm4326|0|Point|2|KO-BKO multicurvezm4326|0|LineString|2|KO-BKO multicurvezm4326|0|Polygon|2|KO-BKO multicurvezm4326|0|MultiPoint|2|KO-BKO multicurvezm4326|0|MultiLineString|2|KO-BKO multicurvezm4326|0|MultiPolygon|2|KO-BKO multicurvezm4326|0|GeometryCollection|2|KO-BKO multicurvezm4326|0|CircularString|2|KO-BKO multicurvezm4326|0|CompoundCurve|2|KO-BKO multicurvezm4326|0|CurvePolygon|2|KO-BKO multicurvezm4326|0|MultiCurve|2|KO-BKO multicurvezm4326|0|MultiSurface|2|KO-BKO multicurvezm4326|0|PolyhedralSurface|2|KO-BKO multicurvezm4326|0|Triangle|2|KO-BKO multicurvezm4326|0|Point|1|KO-BKO multicurvezm4326|0|LineString|1|KO-BKO multicurvezm4326|0|Polygon|1|KO-BKO multicurvezm4326|0|MultiPoint|1|KO-BKO multicurvezm4326|0|MultiLineString|1|KO-BKO multicurvezm4326|0|MultiPolygon|1|KO-BKO multicurvezm4326|0|GeometryCollection|1|KO-BKO multicurvezm4326|0|CircularString|1|KO-BKO multicurvezm4326|0|CompoundCurve|1|KO-BKO multicurvezm4326|0|CurvePolygon|1|KO-BKO multicurvezm4326|0|MultiCurve|1|KO-BKO multicurvezm4326|0|MultiSurface|1|KO-BKO multicurvezm4326|0|PolyhedralSurface|1|KO-BKO multicurvezm4326|0|Triangle|1|KO-BKO multicurvezm4326|0|Point|3|KO-BKO multicurvezm4326|0|LineString|3|KO-BKO multicurvezm4326|0|Polygon|3|KO-BKO multicurvezm4326|0|MultiPoint|3|KO-BKO multicurvezm4326|0|MultiLineString|3|KO-BKO multicurvezm4326|0|MultiPolygon|3|KO-BKO multicurvezm4326|0|GeometryCollection|3|KO-BKO multicurvezm4326|0|CircularString|3|KO-BKO multicurvezm4326|0|CompoundCurve|3|KO-BKO multicurvezm4326|0|CurvePolygon|3|KO-BKO multicurvezm4326|0|MultiCurve|3|KO-BKO multicurvezm4326|0|MultiSurface|3|KO-BKO multicurvezm4326|0|PolyhedralSurface|3|KO-BKO multicurvezm4326|0|Triangle|3|KO-BKO multicurvezm4326|4326|Point|0|KO-BKO multicurvezm4326|4326|LineString|0|KO-BKO multicurvezm4326|4326|Polygon|0|KO-BKO multicurvezm4326|4326|MultiPoint|0|KO-BKO multicurvezm4326|4326|MultiLineString|0|KO-BKO multicurvezm4326|4326|MultiPolygon|0|KO-BKO multicurvezm4326|4326|GeometryCollection|0|KO-BKO multicurvezm4326|4326|CircularString|0|KO-BKO multicurvezm4326|4326|CompoundCurve|0|KO-BKO multicurvezm4326|4326|CurvePolygon|0|KO-BKO multicurvezm4326|4326|MultiCurve|0|KO-BKO multicurvezm4326|4326|MultiSurface|0|KO-BKO multicurvezm4326|4326|PolyhedralSurface|0|KO-BKO multicurvezm4326|4326|Triangle|0|KO-BKO multicurvezm4326|4326|Tin|0|KO-BKO multicurvezm4326|4326|Point|2|KO-BKO multicurvezm4326|4326|LineString|2|KO-BKO multicurvezm4326|4326|Polygon|2|KO-BKO multicurvezm4326|4326|MultiPoint|2|KO-BKO multicurvezm4326|4326|MultiLineString|2|KO-BKO multicurvezm4326|4326|MultiPolygon|2|KO-BKO multicurvezm4326|4326|GeometryCollection|2|KO-BKO multicurvezm4326|4326|CircularString|2|KO-BKO multicurvezm4326|4326|CompoundCurve|2|KO-BKO multicurvezm4326|4326|CurvePolygon|2|KO-BKO multicurvezm4326|4326|MultiCurve|2|KO-BKO multicurvezm4326|4326|MultiSurface|2|KO-BKO multicurvezm4326|4326|PolyhedralSurface|2|KO-BKO multicurvezm4326|4326|Triangle|2|KO-BKO multicurvezm4326|4326|Point|1|KO-BKO multicurvezm4326|4326|LineString|1|KO-BKO multicurvezm4326|4326|Polygon|1|KO-BKO multicurvezm4326|4326|MultiPoint|1|KO-BKO multicurvezm4326|4326|MultiLineString|1|KO-BKO multicurvezm4326|4326|MultiPolygon|1|KO-BKO multicurvezm4326|4326|GeometryCollection|1|KO-BKO multicurvezm4326|4326|CircularString|1|KO-BKO multicurvezm4326|4326|CompoundCurve|1|KO-BKO multicurvezm4326|4326|CurvePolygon|1|KO-BKO multicurvezm4326|4326|MultiCurve|1|KO-BKO multicurvezm4326|4326|MultiSurface|1|KO-BKO multicurvezm4326|4326|PolyhedralSurface|1|KO-BKO multicurvezm4326|4326|Triangle|1|KO-BKO multicurvezm4326|4326|Point|3|KO-BKO multicurvezm4326|4326|LineString|3|KO-BKO multicurvezm4326|4326|Polygon|3|KO-BKO multicurvezm4326|4326|MultiPoint|3|KO-BKO multicurvezm4326|4326|MultiLineString|3|KO-BKO multicurvezm4326|4326|MultiPolygon|3|KO-BKO multicurvezm4326|4326|GeometryCollection|3|KO-BKO multicurvezm4326|4326|CircularString|3|KO-BKO multicurvezm4326|4326|CompoundCurve|3|KO-BKO multicurvezm4326|4326|CurvePolygon|3|KO-BKO multicurvezm4326|4326|MultiCurve|3|OK-BOK multicurvezm4326|4326|MultiSurface|3|KO-BKO multicurvezm4326|4326|PolyhedralSurface|3|KO-BKO multicurvezm4326|4326|Triangle|3|KO-BKO multicurvezm4326||COUNT|2| multilinestring|0|Point|0|KO-BKO-GKO:-BGKO multilinestring|0|LineString|0|KO-BKO-GKO:-BGKO multilinestring|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestring|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestring|0|MultiLineString|0|OK-BOK-GOK-BGOK multilinestring|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestring|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestring|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestring|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestring|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestring|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestring|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestring|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestring|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestring|0|Tin|0|KO-BKO-GKO:-BGKO multilinestring|0|Point|2|KO-BKO-GKO:-BGKO multilinestring|0|LineString|2|KO-BKO-GKO:-BGKO multilinestring|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestring|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestring|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestring|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestring|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestring|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestring|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestring|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestring|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestring|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestring|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestring|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestring|0|Point|1|KO-BKO-GKO:-BGKO multilinestring|0|LineString|1|KO-BKO-GKO:-BGKO multilinestring|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestring|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestring|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestring|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestring|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestring|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestring|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestring|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestring|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestring|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestring|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestring|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestring|0|Point|3|KO-BKO-GKO:-BGKO multilinestring|0|LineString|3|KO-BKO-GKO:-BGKO multilinestring|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestring|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestring|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestring|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestring|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestring|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestring|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestring|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestring|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestring|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestring|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestring|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestring|4326|Point|0|KO-BKO-GKO:-BGKO multilinestring|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestring|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestring|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestring|4326|MultiLineString|0|OK-BOK-GOK-BGOK multilinestring|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestring|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestring|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestring|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestring|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestring|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestring|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestring|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestring|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestring|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestring|4326|Point|2|KO-BKO-GKO:-BGKO multilinestring|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestring|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestring|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestring|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestring|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestring|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestring|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestring|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestring|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestring|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestring|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestring|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestring|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestring|4326|Point|1|KO-BKO-GKO:-BGKO multilinestring|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestring|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestring|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestring|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestring|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestring|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestring|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestring|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestring|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestring|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestring|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestring|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestring|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestring|4326|Point|3|KO-BKO-GKO:-BGKO multilinestring|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestring|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestring|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestring|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestring|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestring|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestring|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestring|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestring|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestring|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestring|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestring|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestring|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestring||COUNT|4| multilinestring||GCOUNT|4| multilinestring0|0|Point|0|KO-BKO-GKO:-BGKO multilinestring0|0|LineString|0|KO-BKO-GKO:-BGKO multilinestring0|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestring0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestring0|0|MultiLineString|0|OK-BOK-GOK-BGOK multilinestring0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestring0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestring0|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestring0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestring0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestring0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestring0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestring0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestring0|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestring0|0|Tin|0|KO-BKO-GKO:-BGKO multilinestring0|0|Point|2|KO-BKO-GKO:-BGKO multilinestring0|0|LineString|2|KO-BKO-GKO:-BGKO multilinestring0|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestring0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestring0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestring0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestring0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestring0|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestring0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestring0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestring0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestring0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestring0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestring0|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestring0|0|Point|1|KO-BKO-GKO:-BGKO multilinestring0|0|LineString|1|KO-BKO-GKO:-BGKO multilinestring0|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestring0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestring0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestring0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestring0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestring0|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestring0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestring0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestring0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestring0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestring0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestring0|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestring0|0|Point|3|KO-BKO-GKO:-BGKO multilinestring0|0|LineString|3|KO-BKO-GKO:-BGKO multilinestring0|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestring0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestring0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestring0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestring0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestring0|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestring0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestring0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestring0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestring0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestring0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestring0|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestring0|4326|Point|0|KO-BKO-GKO:-BGKO multilinestring0|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestring0|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiLineString|0|OK-BOK-GOK-BGOK multilinestring0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestring0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestring0|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestring0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestring0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestring0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestring0|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestring0|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestring0|4326|Point|2|KO-BKO-GKO:-BGKO multilinestring0|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestring0|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestring0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestring0|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestring0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestring0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestring0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestring0|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestring0|4326|Point|1|KO-BKO-GKO:-BGKO multilinestring0|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestring0|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestring0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestring0|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestring0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestring0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestring0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestring0|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestring0|4326|Point|3|KO-BKO-GKO:-BGKO multilinestring0|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestring0|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestring0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestring0|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestring0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestring0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestring0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestring0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestring0|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestring0||COUNT|4| multilinestring0||GCOUNT|4| multilinestring4326|0|Point|0|KO-BKO-GKO:-BGKO multilinestring4326|0|LineString|0|KO-BKO-GKO:-BGKO multilinestring4326|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiLineString|0|KO-BKO-GOK-BGOK multilinestring4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestring4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestring4326|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestring4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestring4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestring4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestring4326|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestring4326|0|Tin|0|KO-BKO-GKO:-BGKO multilinestring4326|0|Point|2|KO-BKO-GKO:-BGKO multilinestring4326|0|LineString|2|KO-BKO-GKO:-BGKO multilinestring4326|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestring4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestring4326|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestring4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestring4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestring4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestring4326|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestring4326|0|Point|1|KO-BKO-GKO:-BGKO multilinestring4326|0|LineString|1|KO-BKO-GKO:-BGKO multilinestring4326|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestring4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestring4326|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestring4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestring4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestring4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestring4326|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestring4326|0|Point|3|KO-BKO-GKO:-BGKO multilinestring4326|0|LineString|3|KO-BKO-GKO:-BGKO multilinestring4326|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestring4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestring4326|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestring4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestring4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestring4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestring4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestring4326|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|Point|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiLineString|0|OK-BOK-GOK-BGOK multilinestring4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestring4326|4326|Point|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestring4326|4326|Point|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestring4326|4326|Point|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestring4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestring4326||COUNT|2| multilinestring4326||GCOUNT|4| multilinestringm|0|Point|0|KO-BKO-GKO:-BGKO multilinestringm|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringm|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringm|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringm|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringm|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringm|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringm|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringm|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringm|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringm|0|Point|2|KO-BKO-GKO:-BGKO multilinestringm|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringm|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringm|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringm|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringm|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringm|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringm|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringm|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringm|0|Point|1|KO-BKO-GKO:-BGKO multilinestringm|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringm|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringm|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringm|0|MultiLineString|1|OK-BOK-GOK-BGOK multilinestringm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringm|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringm|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringm|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringm|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringm|0|Point|3|KO-BKO-GKO:-BGKO multilinestringm|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringm|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringm|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringm|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringm|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringm|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringm|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringm|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringm|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringm|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringm|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringm|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringm|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringm|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringm|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringm|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringm|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringm|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringm|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringm|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringm|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringm|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiLineString|1|OK-BOK-GOK-BGOK multilinestringm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringm|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringm|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringm|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringm|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringm|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringm|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringm|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringm||COUNT|4| multilinestringm||GCOUNT|4| multilinestringm0|0|Point|0|KO-BKO-GKO:-BGKO multilinestringm0|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringm0|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringm0|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringm0|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringm0|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringm0|0|Point|2|KO-BKO-GKO:-BGKO multilinestringm0|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringm0|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringm0|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringm0|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringm0|0|Point|1|KO-BKO-GKO:-BGKO multilinestringm0|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringm0|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiLineString|1|OK-BOK-GOK-BGOK multilinestringm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringm0|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringm0|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringm0|0|Point|3|KO-BKO-GKO:-BGKO multilinestringm0|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringm0|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringm0|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringm0|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringm0|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringm0|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiLineString|1|OK-BOK-GOK-BGOK multilinestringm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringm0|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringm0|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringm0||COUNT|4| multilinestringm0||GCOUNT|4| multilinestringm4326|0|Point|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringm4326|0|Point|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringm4326|0|Point|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiLineString|1|KO-BKO-GOK-BGOK multilinestringm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringm4326|0|Point|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringm4326|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiLineString|1|OK-BOK-GOK-BGOK multilinestringm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringm4326||COUNT|2| multilinestringm4326||GCOUNT|4| multilinestringz|0|Point|0|KO-BKO-GKO:-BGKO multilinestringz|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringz|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringz|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringz|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringz|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringz|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringz|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringz|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringz|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringz|0|Point|2|KO-BKO-GKO:-BGKO multilinestringz|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringz|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringz|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringz|0|MultiLineString|2|OK-BOK-GOK-BGOK multilinestringz|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringz|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringz|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringz|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringz|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringz|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringz|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringz|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringz|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringz|0|Point|1|KO-BKO-GKO:-BGKO multilinestringz|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringz|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringz|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringz|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringz|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringz|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringz|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringz|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringz|0|Point|3|KO-BKO-GKO:-BGKO multilinestringz|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringz|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringz|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringz|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringz|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringz|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringz|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringz|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringz|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringz|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringz|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringz|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringz|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringz|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringz|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringz|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringz|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiLineString|2|OK-BOK-GOK-BGOK multilinestringz|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringz|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringz|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringz|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringz|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringz|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringz|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringz|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringz|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringz|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringz|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringz|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringz|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringz|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringz|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringz|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringz|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringz||COUNT|4| multilinestringz||GCOUNT|4| multilinestringz0|0|Point|0|KO-BKO-GKO:-BGKO multilinestringz0|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringz0|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringz0|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringz0|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringz0|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringz0|0|Point|2|KO-BKO-GKO:-BGKO multilinestringz0|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringz0|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiLineString|2|OK-BOK-GOK-BGOK multilinestringz0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringz0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringz0|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringz0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringz0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringz0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringz0|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringz0|0|Point|1|KO-BKO-GKO:-BGKO multilinestringz0|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringz0|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringz0|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringz0|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringz0|0|Point|3|KO-BKO-GKO:-BGKO multilinestringz0|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringz0|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringz0|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringz0|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringz0|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiLineString|2|OK-BOK-GOK-BGOK multilinestringz0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringz0|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringz0|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringz0|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringz0||COUNT|4| multilinestringz0||GCOUNT|4| multilinestringz4326|0|Point|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringz4326|0|Point|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiLineString|2|KO-BKO-GOK-BGOK multilinestringz4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringz4326|0|Point|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringz4326|0|Point|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringz4326|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiLineString|2|OK-BOK-GOK-BGOK multilinestringz4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringz4326||COUNT|2| multilinestringz4326||GCOUNT|4| multilinestringzm|0|Point|0|KO-BKO-GKO:-BGKO multilinestringzm|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringzm|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringzm|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringzm|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringzm|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringzm|0|Point|2|KO-BKO-GKO:-BGKO multilinestringzm|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringzm|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringzm|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringzm|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringzm|0|Point|1|KO-BKO-GKO:-BGKO multilinestringzm|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringzm|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringzm|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringzm|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringzm|0|Point|3|KO-BKO-GKO:-BGKO multilinestringzm|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringzm|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiLineString|3|OK-BOK-GOK-BGOK multilinestringzm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringzm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringzm|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringzm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringzm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringzm|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringzm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringzm|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringzm|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringzm|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringzm|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiLineString|3|OK-BOK-GOK-BGOK multilinestringzm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringzm|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringzm||COUNT|4| multilinestringzm||GCOUNT|4| multilinestringzm0|0|Point|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringzm0|0|Point|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringzm0|0|Point|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringzm0|0|Point|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiLineString|3|OK-BOK-GOK-BGOK multilinestringzm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringzm0|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiLineString|3|OK-BOK-GOK-BGOK multilinestringzm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringzm0|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringzm0||COUNT|4| multilinestringzm0||GCOUNT|4| multilinestringzm4326|0|Point|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|LineString|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Tin|0|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Point|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|LineString|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Point|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|LineString|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Point|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|LineString|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Polygon|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiLineString|3|KO-BKO-GOK-BGOK multilinestringzm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Point|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Point|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Point|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Point|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|LineString|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiLineString|3|OK-BOK-GOK-BGOK multilinestringzm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multilinestringzm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multilinestringzm4326||COUNT|2| multilinestringzm4326||GCOUNT|4| multipoint|0|Point|0|OK-BOK-GOK-BGOK multipoint|0|LineString|0|KO-BKO-GKO:-BGKO multipoint|0|Polygon|0|KO-BKO-GKO:-BGKO multipoint|0|MultiPoint|0|OK-BOK-GOK-BGOK multipoint|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipoint|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipoint|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipoint|0|CircularString|0|KO-BKO-GKO:-BGKO multipoint|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipoint|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipoint|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipoint|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipoint|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipoint|0|Triangle|0|KO-BKO-GKO:-BGKO multipoint|0|Tin|0|KO-BKO-GKO:-BGKO multipoint|0|Point|2|KO-BKO-GKO:-BGKO multipoint|0|LineString|2|KO-BKO-GKO:-BGKO multipoint|0|Polygon|2|KO-BKO-GKO:-BGKO multipoint|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipoint|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipoint|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipoint|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipoint|0|CircularString|2|KO-BKO-GKO:-BGKO multipoint|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipoint|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipoint|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipoint|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipoint|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipoint|0|Triangle|2|KO-BKO-GKO:-BGKO multipoint|0|Point|1|KO-BKO-GKO:-BGKO multipoint|0|LineString|1|KO-BKO-GKO:-BGKO multipoint|0|Polygon|1|KO-BKO-GKO:-BGKO multipoint|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipoint|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipoint|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipoint|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipoint|0|CircularString|1|KO-BKO-GKO:-BGKO multipoint|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipoint|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipoint|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipoint|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipoint|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipoint|0|Triangle|1|KO-BKO-GKO:-BGKO multipoint|0|Point|3|KO-BKO-GKO:-BGKO multipoint|0|LineString|3|KO-BKO-GKO:-BGKO multipoint|0|Polygon|3|KO-BKO-GKO:-BGKO multipoint|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipoint|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipoint|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipoint|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipoint|0|CircularString|3|KO-BKO-GKO:-BGKO multipoint|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipoint|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipoint|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipoint|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipoint|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipoint|0|Triangle|3|KO-BKO-GKO:-BGKO multipoint|4326|Point|0|OK-BOK-GOK-BGOK multipoint|4326|LineString|0|KO-BKO-GKO:-BGKO multipoint|4326|Polygon|0|KO-BKO-GKO:-BGKO multipoint|4326|MultiPoint|0|OK-BOK-GOK-BGOK multipoint|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipoint|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipoint|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipoint|4326|CircularString|0|KO-BKO-GKO:-BGKO multipoint|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipoint|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipoint|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipoint|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipoint|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipoint|4326|Triangle|0|KO-BKO-GKO:-BGKO multipoint|4326|Tin|0|KO-BKO-GKO:-BGKO multipoint|4326|Point|2|KO-BKO-GKO:-BGKO multipoint|4326|LineString|2|KO-BKO-GKO:-BGKO multipoint|4326|Polygon|2|KO-BKO-GKO:-BGKO multipoint|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipoint|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipoint|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipoint|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipoint|4326|CircularString|2|KO-BKO-GKO:-BGKO multipoint|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipoint|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipoint|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipoint|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipoint|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipoint|4326|Triangle|2|KO-BKO-GKO:-BGKO multipoint|4326|Point|1|KO-BKO-GKO:-BGKO multipoint|4326|LineString|1|KO-BKO-GKO:-BGKO multipoint|4326|Polygon|1|KO-BKO-GKO:-BGKO multipoint|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipoint|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipoint|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipoint|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipoint|4326|CircularString|1|KO-BKO-GKO:-BGKO multipoint|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipoint|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipoint|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipoint|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipoint|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipoint|4326|Triangle|1|KO-BKO-GKO:-BGKO multipoint|4326|Point|3|KO-BKO-GKO:-BGKO multipoint|4326|LineString|3|KO-BKO-GKO:-BGKO multipoint|4326|Polygon|3|KO-BKO-GKO:-BGKO multipoint|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipoint|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipoint|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipoint|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipoint|4326|CircularString|3|KO-BKO-GKO:-BGKO multipoint|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipoint|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipoint|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipoint|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipoint|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipoint|4326|Triangle|3|KO-BKO-GKO:-BGKO multipoint||COUNT|8| multipoint||GCOUNT|8| multipoint0|0|Point|0|OK-BOK-GOK-BGOK multipoint0|0|LineString|0|KO-BKO-GKO:-BGKO multipoint0|0|Polygon|0|KO-BKO-GKO:-BGKO multipoint0|0|MultiPoint|0|OK-BOK-GOK-BGOK multipoint0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipoint0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipoint0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipoint0|0|CircularString|0|KO-BKO-GKO:-BGKO multipoint0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipoint0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipoint0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipoint0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipoint0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipoint0|0|Triangle|0|KO-BKO-GKO:-BGKO multipoint0|0|Tin|0|KO-BKO-GKO:-BGKO multipoint0|0|Point|2|KO-BKO-GKO:-BGKO multipoint0|0|LineString|2|KO-BKO-GKO:-BGKO multipoint0|0|Polygon|2|KO-BKO-GKO:-BGKO multipoint0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipoint0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipoint0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipoint0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipoint0|0|CircularString|2|KO-BKO-GKO:-BGKO multipoint0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipoint0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipoint0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipoint0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipoint0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipoint0|0|Triangle|2|KO-BKO-GKO:-BGKO multipoint0|0|Point|1|KO-BKO-GKO:-BGKO multipoint0|0|LineString|1|KO-BKO-GKO:-BGKO multipoint0|0|Polygon|1|KO-BKO-GKO:-BGKO multipoint0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipoint0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipoint0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipoint0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipoint0|0|CircularString|1|KO-BKO-GKO:-BGKO multipoint0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipoint0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipoint0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipoint0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipoint0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipoint0|0|Triangle|1|KO-BKO-GKO:-BGKO multipoint0|0|Point|3|KO-BKO-GKO:-BGKO multipoint0|0|LineString|3|KO-BKO-GKO:-BGKO multipoint0|0|Polygon|3|KO-BKO-GKO:-BGKO multipoint0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipoint0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipoint0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipoint0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipoint0|0|CircularString|3|KO-BKO-GKO:-BGKO multipoint0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipoint0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipoint0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipoint0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipoint0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipoint0|0|Triangle|3|KO-BKO-GKO:-BGKO multipoint0|4326|Point|0|OK-BOK-GOK-BGOK multipoint0|4326|LineString|0|KO-BKO-GKO:-BGKO multipoint0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPoint|0|OK-BOK-GOK-BGOK multipoint0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipoint0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipoint0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipoint0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipoint0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipoint0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipoint0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipoint0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipoint0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipoint0|4326|Tin|0|KO-BKO-GKO:-BGKO multipoint0|4326|Point|2|KO-BKO-GKO:-BGKO multipoint0|4326|LineString|2|KO-BKO-GKO:-BGKO multipoint0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipoint0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipoint0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipoint0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipoint0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipoint0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipoint0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipoint0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipoint0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipoint0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipoint0|4326|Point|1|KO-BKO-GKO:-BGKO multipoint0|4326|LineString|1|KO-BKO-GKO:-BGKO multipoint0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipoint0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipoint0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipoint0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipoint0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipoint0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipoint0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipoint0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipoint0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipoint0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipoint0|4326|Point|3|KO-BKO-GKO:-BGKO multipoint0|4326|LineString|3|KO-BKO-GKO:-BGKO multipoint0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipoint0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipoint0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipoint0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipoint0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipoint0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipoint0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipoint0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipoint0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipoint0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipoint0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipoint0||COUNT|8| multipoint0||GCOUNT|8| multipoint4326|0|Point|0|KO-BKO-GOK-BGOK multipoint4326|0|LineString|0|KO-BKO-GKO:-BGKO multipoint4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPoint|0|KO-BKO-GOK-BGOK multipoint4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipoint4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipoint4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipoint4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipoint4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipoint4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipoint4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipoint4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipoint4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipoint4326|0|Tin|0|KO-BKO-GKO:-BGKO multipoint4326|0|Point|2|KO-BKO-GKO:-BGKO multipoint4326|0|LineString|2|KO-BKO-GKO:-BGKO multipoint4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipoint4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipoint4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipoint4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipoint4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipoint4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipoint4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipoint4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipoint4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipoint4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipoint4326|0|Point|1|KO-BKO-GKO:-BGKO multipoint4326|0|LineString|1|KO-BKO-GKO:-BGKO multipoint4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipoint4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipoint4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipoint4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipoint4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipoint4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipoint4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipoint4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipoint4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipoint4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipoint4326|0|Point|3|KO-BKO-GKO:-BGKO multipoint4326|0|LineString|3|KO-BKO-GKO:-BGKO multipoint4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipoint4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipoint4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipoint4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipoint4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipoint4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipoint4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipoint4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipoint4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipoint4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipoint4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipoint4326|4326|Point|0|OK-BOK-GOK-BGOK multipoint4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipoint4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPoint|0|OK-BOK-GOK-BGOK multipoint4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipoint4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipoint4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipoint4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipoint4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipoint4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipoint4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipoint4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipoint4326|4326|Point|2|KO-BKO-GKO:-BGKO multipoint4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipoint4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipoint4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipoint4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipoint4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipoint4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipoint4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipoint4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipoint4326|4326|Point|1|KO-BKO-GKO:-BGKO multipoint4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipoint4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipoint4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipoint4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipoint4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipoint4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipoint4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipoint4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipoint4326|4326|Point|3|KO-BKO-GKO:-BGKO multipoint4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipoint4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipoint4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipoint4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipoint4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipoint4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipoint4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipoint4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipoint4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipoint4326||COUNT|4| multipoint4326||GCOUNT|8| multipointm|0|Point|0|KO-BKO-GKO:-BGKO multipointm|0|LineString|0|KO-BKO-GKO:-BGKO multipointm|0|Polygon|0|KO-BKO-GKO:-BGKO multipointm|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointm|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointm|0|CircularString|0|KO-BKO-GKO:-BGKO multipointm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointm|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointm|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointm|0|Triangle|0|KO-BKO-GKO:-BGKO multipointm|0|Tin|0|KO-BKO-GKO:-BGKO multipointm|0|Point|2|KO-BKO-GKO:-BGKO multipointm|0|LineString|2|KO-BKO-GKO:-BGKO multipointm|0|Polygon|2|KO-BKO-GKO:-BGKO multipointm|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipointm|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointm|0|CircularString|2|KO-BKO-GKO:-BGKO multipointm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointm|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointm|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointm|0|Triangle|2|KO-BKO-GKO:-BGKO multipointm|0|Point|1|OK-BOK-GOK-BGOK multipointm|0|LineString|1|KO-BKO-GKO:-BGKO multipointm|0|Polygon|1|KO-BKO-GKO:-BGKO multipointm|0|MultiPoint|1|OK-BOK-GOK-BGOK multipointm|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointm|0|CircularString|1|KO-BKO-GKO:-BGKO multipointm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointm|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointm|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointm|0|Triangle|1|KO-BKO-GKO:-BGKO multipointm|0|Point|3|KO-BKO-GKO:-BGKO multipointm|0|LineString|3|KO-BKO-GKO:-BGKO multipointm|0|Polygon|3|KO-BKO-GKO:-BGKO multipointm|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipointm|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointm|0|CircularString|3|KO-BKO-GKO:-BGKO multipointm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointm|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointm|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointm|0|Triangle|3|KO-BKO-GKO:-BGKO multipointm|4326|Point|0|KO-BKO-GKO:-BGKO multipointm|4326|LineString|0|KO-BKO-GKO:-BGKO multipointm|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointm|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointm|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointm|4326|Tin|0|KO-BKO-GKO:-BGKO multipointm|4326|Point|2|KO-BKO-GKO:-BGKO multipointm|4326|LineString|2|KO-BKO-GKO:-BGKO multipointm|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipointm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointm|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointm|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointm|4326|Point|1|OK-BOK-GOK-BGOK multipointm|4326|LineString|1|KO-BKO-GKO:-BGKO multipointm|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointm|4326|MultiPoint|1|OK-BOK-GOK-BGOK multipointm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointm|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointm|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointm|4326|Point|3|KO-BKO-GKO:-BGKO multipointm|4326|LineString|3|KO-BKO-GKO:-BGKO multipointm|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipointm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointm|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointm|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointm||COUNT|8| multipointm||GCOUNT|8| multipointm0|0|Point|0|KO-BKO-GKO:-BGKO multipointm0|0|LineString|0|KO-BKO-GKO:-BGKO multipointm0|0|Polygon|0|KO-BKO-GKO:-BGKO multipointm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointm0|0|CircularString|0|KO-BKO-GKO:-BGKO multipointm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointm0|0|Triangle|0|KO-BKO-GKO:-BGKO multipointm0|0|Tin|0|KO-BKO-GKO:-BGKO multipointm0|0|Point|2|KO-BKO-GKO:-BGKO multipointm0|0|LineString|2|KO-BKO-GKO:-BGKO multipointm0|0|Polygon|2|KO-BKO-GKO:-BGKO multipointm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipointm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointm0|0|CircularString|2|KO-BKO-GKO:-BGKO multipointm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointm0|0|Triangle|2|KO-BKO-GKO:-BGKO multipointm0|0|Point|1|OK-BOK-GOK-BGOK multipointm0|0|LineString|1|KO-BKO-GKO:-BGKO multipointm0|0|Polygon|1|KO-BKO-GKO:-BGKO multipointm0|0|MultiPoint|1|OK-BOK-GOK-BGOK multipointm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointm0|0|CircularString|1|KO-BKO-GKO:-BGKO multipointm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointm0|0|Triangle|1|KO-BKO-GKO:-BGKO multipointm0|0|Point|3|KO-BKO-GKO:-BGKO multipointm0|0|LineString|3|KO-BKO-GKO:-BGKO multipointm0|0|Polygon|3|KO-BKO-GKO:-BGKO multipointm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipointm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointm0|0|CircularString|3|KO-BKO-GKO:-BGKO multipointm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointm0|0|Triangle|3|KO-BKO-GKO:-BGKO multipointm0|4326|Point|0|KO-BKO-GKO:-BGKO multipointm0|4326|LineString|0|KO-BKO-GKO:-BGKO multipointm0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointm0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointm0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointm0|4326|Tin|0|KO-BKO-GKO:-BGKO multipointm0|4326|Point|2|KO-BKO-GKO:-BGKO multipointm0|4326|LineString|2|KO-BKO-GKO:-BGKO multipointm0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipointm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointm0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointm0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointm0|4326|Point|1|OK-BOK-GOK-BGOK multipointm0|4326|LineString|1|KO-BKO-GKO:-BGKO multipointm0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPoint|1|OK-BOK-GOK-BGOK multipointm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointm0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointm0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointm0|4326|Point|3|KO-BKO-GKO:-BGKO multipointm0|4326|LineString|3|KO-BKO-GKO:-BGKO multipointm0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipointm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointm0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointm0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointm0||COUNT|8| multipointm0||GCOUNT|8| multipointm4326|0|Point|0|KO-BKO-GKO:-BGKO multipointm4326|0|LineString|0|KO-BKO-GKO:-BGKO multipointm4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointm4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipointm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointm4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipointm4326|0|Tin|0|KO-BKO-GKO:-BGKO multipointm4326|0|Point|2|KO-BKO-GKO:-BGKO multipointm4326|0|LineString|2|KO-BKO-GKO:-BGKO multipointm4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipointm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointm4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipointm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointm4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipointm4326|0|Point|1|KO-BKO-GOK-BGOK multipointm4326|0|LineString|1|KO-BKO-GKO:-BGKO multipointm4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPoint|1|KO-BKO-GOK-BGOK multipointm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointm4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipointm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointm4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipointm4326|0|Point|3|KO-BKO-GKO:-BGKO multipointm4326|0|LineString|3|KO-BKO-GKO:-BGKO multipointm4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipointm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointm4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipointm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointm4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipointm4326|4326|Point|0|KO-BKO-GKO:-BGKO multipointm4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipointm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointm4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipointm4326|4326|Point|2|KO-BKO-GKO:-BGKO multipointm4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipointm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointm4326|4326|Point|1|OK-BOK-GOK-BGOK multipointm4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipointm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPoint|1|OK-BOK-GOK-BGOK multipointm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointm4326|4326|Point|3|KO-BKO-GKO:-BGKO multipointm4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipointm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointm4326||COUNT|4| multipointm4326||GCOUNT|8| multipointz|0|Point|0|KO-BKO-GKO:-BGKO multipointz|0|LineString|0|KO-BKO-GKO:-BGKO multipointz|0|Polygon|0|KO-BKO-GKO:-BGKO multipointz|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointz|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointz|0|CircularString|0|KO-BKO-GKO:-BGKO multipointz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointz|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointz|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointz|0|Triangle|0|KO-BKO-GKO:-BGKO multipointz|0|Tin|0|KO-BKO-GKO:-BGKO multipointz|0|Point|2|OK-BOK-GOK-BGOK multipointz|0|LineString|2|KO-BKO-GKO:-BGKO multipointz|0|Polygon|2|KO-BKO-GKO:-BGKO multipointz|0|MultiPoint|2|OK-BOK-GOK-BGOK multipointz|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointz|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointz|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointz|0|CircularString|2|KO-BKO-GKO:-BGKO multipointz|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointz|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointz|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointz|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointz|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointz|0|Triangle|2|KO-BKO-GKO:-BGKO multipointz|0|Point|1|KO-BKO-GKO:-BGKO multipointz|0|LineString|1|KO-BKO-GKO:-BGKO multipointz|0|Polygon|1|KO-BKO-GKO:-BGKO multipointz|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipointz|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointz|0|CircularString|1|KO-BKO-GKO:-BGKO multipointz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointz|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointz|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointz|0|Triangle|1|KO-BKO-GKO:-BGKO multipointz|0|Point|3|KO-BKO-GKO:-BGKO multipointz|0|LineString|3|KO-BKO-GKO:-BGKO multipointz|0|Polygon|3|KO-BKO-GKO:-BGKO multipointz|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipointz|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointz|0|CircularString|3|KO-BKO-GKO:-BGKO multipointz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointz|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointz|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointz|0|Triangle|3|KO-BKO-GKO:-BGKO multipointz|4326|Point|0|KO-BKO-GKO:-BGKO multipointz|4326|LineString|0|KO-BKO-GKO:-BGKO multipointz|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointz|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointz|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointz|4326|Tin|0|KO-BKO-GKO:-BGKO multipointz|4326|Point|2|OK-BOK-GOK-BGOK multipointz|4326|LineString|2|KO-BKO-GKO:-BGKO multipointz|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointz|4326|MultiPoint|2|OK-BOK-GOK-BGOK multipointz|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointz|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointz|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointz|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointz|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointz|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointz|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointz|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointz|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointz|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointz|4326|Point|1|KO-BKO-GKO:-BGKO multipointz|4326|LineString|1|KO-BKO-GKO:-BGKO multipointz|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipointz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointz|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointz|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointz|4326|Point|3|KO-BKO-GKO:-BGKO multipointz|4326|LineString|3|KO-BKO-GKO:-BGKO multipointz|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipointz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointz|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointz|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointz||COUNT|8| multipointz||GCOUNT|8| multipointz0|0|Point|0|KO-BKO-GKO:-BGKO multipointz0|0|LineString|0|KO-BKO-GKO:-BGKO multipointz0|0|Polygon|0|KO-BKO-GKO:-BGKO multipointz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointz0|0|CircularString|0|KO-BKO-GKO:-BGKO multipointz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointz0|0|Triangle|0|KO-BKO-GKO:-BGKO multipointz0|0|Tin|0|KO-BKO-GKO:-BGKO multipointz0|0|Point|2|OK-BOK-GOK-BGOK multipointz0|0|LineString|2|KO-BKO-GKO:-BGKO multipointz0|0|Polygon|2|KO-BKO-GKO:-BGKO multipointz0|0|MultiPoint|2|OK-BOK-GOK-BGOK multipointz0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointz0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointz0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointz0|0|CircularString|2|KO-BKO-GKO:-BGKO multipointz0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointz0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointz0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointz0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointz0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointz0|0|Triangle|2|KO-BKO-GKO:-BGKO multipointz0|0|Point|1|KO-BKO-GKO:-BGKO multipointz0|0|LineString|1|KO-BKO-GKO:-BGKO multipointz0|0|Polygon|1|KO-BKO-GKO:-BGKO multipointz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipointz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointz0|0|CircularString|1|KO-BKO-GKO:-BGKO multipointz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointz0|0|Triangle|1|KO-BKO-GKO:-BGKO multipointz0|0|Point|3|KO-BKO-GKO:-BGKO multipointz0|0|LineString|3|KO-BKO-GKO:-BGKO multipointz0|0|Polygon|3|KO-BKO-GKO:-BGKO multipointz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipointz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointz0|0|CircularString|3|KO-BKO-GKO:-BGKO multipointz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointz0|0|Triangle|3|KO-BKO-GKO:-BGKO multipointz0|4326|Point|0|KO-BKO-GKO:-BGKO multipointz0|4326|LineString|0|KO-BKO-GKO:-BGKO multipointz0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointz0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointz0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointz0|4326|Tin|0|KO-BKO-GKO:-BGKO multipointz0|4326|Point|2|OK-BOK-GOK-BGOK multipointz0|4326|LineString|2|KO-BKO-GKO:-BGKO multipointz0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPoint|2|OK-BOK-GOK-BGOK multipointz0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointz0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointz0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointz0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointz0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointz0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointz0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointz0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointz0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointz0|4326|Point|1|KO-BKO-GKO:-BGKO multipointz0|4326|LineString|1|KO-BKO-GKO:-BGKO multipointz0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipointz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointz0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointz0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointz0|4326|Point|3|KO-BKO-GKO:-BGKO multipointz0|4326|LineString|3|KO-BKO-GKO:-BGKO multipointz0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipointz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointz0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointz0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointz0||COUNT|8| multipointz0||GCOUNT|8| multipointz4326|0|Point|0|KO-BKO-GKO:-BGKO multipointz4326|0|LineString|0|KO-BKO-GKO:-BGKO multipointz4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointz4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipointz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointz4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipointz4326|0|Tin|0|KO-BKO-GKO:-BGKO multipointz4326|0|Point|2|KO-BKO-GOK-BGOK multipointz4326|0|LineString|2|KO-BKO-GKO:-BGKO multipointz4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPoint|2|KO-BKO-GOK-BGOK multipointz4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointz4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointz4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipointz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointz4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipointz4326|0|Point|1|KO-BKO-GKO:-BGKO multipointz4326|0|LineString|1|KO-BKO-GKO:-BGKO multipointz4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipointz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointz4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipointz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointz4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipointz4326|0|Point|3|KO-BKO-GKO:-BGKO multipointz4326|0|LineString|3|KO-BKO-GKO:-BGKO multipointz4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipointz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointz4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipointz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointz4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipointz4326|4326|Point|0|KO-BKO-GKO:-BGKO multipointz4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipointz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointz4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipointz4326|4326|Point|2|OK-BOK-GOK-BGOK multipointz4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipointz4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPoint|2|OK-BOK-GOK-BGOK multipointz4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointz4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointz4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointz4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointz4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointz4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointz4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointz4326|4326|Point|1|KO-BKO-GKO:-BGKO multipointz4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipointz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointz4326|4326|Point|3|KO-BKO-GKO:-BGKO multipointz4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipointz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointz4326||COUNT|4| multipointz4326||GCOUNT|8| multipointzm|0|Point|0|KO-BKO-GKO:-BGKO multipointzm|0|LineString|0|KO-BKO-GKO:-BGKO multipointzm|0|Polygon|0|KO-BKO-GKO:-BGKO multipointzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointzm|0|CircularString|0|KO-BKO-GKO:-BGKO multipointzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointzm|0|Triangle|0|KO-BKO-GKO:-BGKO multipointzm|0|Tin|0|KO-BKO-GKO:-BGKO multipointzm|0|Point|2|KO-BKO-GKO:-BGKO multipointzm|0|LineString|2|KO-BKO-GKO:-BGKO multipointzm|0|Polygon|2|KO-BKO-GKO:-BGKO multipointzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipointzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointzm|0|CircularString|2|KO-BKO-GKO:-BGKO multipointzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointzm|0|Triangle|2|KO-BKO-GKO:-BGKO multipointzm|0|Point|1|KO-BKO-GKO:-BGKO multipointzm|0|LineString|1|KO-BKO-GKO:-BGKO multipointzm|0|Polygon|1|KO-BKO-GKO:-BGKO multipointzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipointzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointzm|0|CircularString|1|KO-BKO-GKO:-BGKO multipointzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointzm|0|Triangle|1|KO-BKO-GKO:-BGKO multipointzm|0|Point|3|OK-BOK-GOK-BGOK multipointzm|0|LineString|3|KO-BKO-GKO:-BGKO multipointzm|0|Polygon|3|KO-BKO-GKO:-BGKO multipointzm|0|MultiPoint|3|OK-BOK-GOK-BGOK multipointzm|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointzm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointzm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointzm|0|CircularString|3|KO-BKO-GKO:-BGKO multipointzm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointzm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointzm|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointzm|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointzm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointzm|0|Triangle|3|KO-BKO-GKO:-BGKO multipointzm|4326|Point|0|KO-BKO-GKO:-BGKO multipointzm|4326|LineString|0|KO-BKO-GKO:-BGKO multipointzm|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointzm|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointzm|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointzm|4326|Tin|0|KO-BKO-GKO:-BGKO multipointzm|4326|Point|2|KO-BKO-GKO:-BGKO multipointzm|4326|LineString|2|KO-BKO-GKO:-BGKO multipointzm|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipointzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointzm|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointzm|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointzm|4326|Point|1|KO-BKO-GKO:-BGKO multipointzm|4326|LineString|1|KO-BKO-GKO:-BGKO multipointzm|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipointzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointzm|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointzm|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointzm|4326|Point|3|OK-BOK-GOK-BGOK multipointzm|4326|LineString|3|KO-BKO-GKO:-BGKO multipointzm|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPoint|3|OK-BOK-GOK-BGOK multipointzm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointzm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointzm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointzm|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointzm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointzm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointzm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointzm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointzm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointzm|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointzm||COUNT|8| multipointzm||GCOUNT|8| multipointzm0|0|Point|0|KO-BKO-GKO:-BGKO multipointzm0|0|LineString|0|KO-BKO-GKO:-BGKO multipointzm0|0|Polygon|0|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointzm0|0|CircularString|0|KO-BKO-GKO:-BGKO multipointzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointzm0|0|Triangle|0|KO-BKO-GKO:-BGKO multipointzm0|0|Tin|0|KO-BKO-GKO:-BGKO multipointzm0|0|Point|2|KO-BKO-GKO:-BGKO multipointzm0|0|LineString|2|KO-BKO-GKO:-BGKO multipointzm0|0|Polygon|2|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipointzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointzm0|0|CircularString|2|KO-BKO-GKO:-BGKO multipointzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointzm0|0|Triangle|2|KO-BKO-GKO:-BGKO multipointzm0|0|Point|1|KO-BKO-GKO:-BGKO multipointzm0|0|LineString|1|KO-BKO-GKO:-BGKO multipointzm0|0|Polygon|1|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipointzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointzm0|0|CircularString|1|KO-BKO-GKO:-BGKO multipointzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointzm0|0|Triangle|1|KO-BKO-GKO:-BGKO multipointzm0|0|Point|3|OK-BOK-GOK-BGOK multipointzm0|0|LineString|3|KO-BKO-GKO:-BGKO multipointzm0|0|Polygon|3|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPoint|3|OK-BOK-GOK-BGOK multipointzm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointzm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointzm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointzm0|0|CircularString|3|KO-BKO-GKO:-BGKO multipointzm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointzm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointzm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointzm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointzm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointzm0|0|Triangle|3|KO-BKO-GKO:-BGKO multipointzm0|4326|Point|0|KO-BKO-GKO:-BGKO multipointzm0|4326|LineString|0|KO-BKO-GKO:-BGKO multipointzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointzm0|4326|Tin|0|KO-BKO-GKO:-BGKO multipointzm0|4326|Point|2|KO-BKO-GKO:-BGKO multipointzm0|4326|LineString|2|KO-BKO-GKO:-BGKO multipointzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointzm0|4326|Point|1|KO-BKO-GKO:-BGKO multipointzm0|4326|LineString|1|KO-BKO-GKO:-BGKO multipointzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointzm0|4326|Point|3|OK-BOK-GOK-BGOK multipointzm0|4326|LineString|3|KO-BKO-GKO:-BGKO multipointzm0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPoint|3|OK-BOK-GOK-BGOK multipointzm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointzm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointzm0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointzm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointzm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointzm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointzm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointzm0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointzm0||COUNT|8| multipointzm0||GCOUNT|8| multipointzm4326|0|Point|0|KO-BKO-GKO:-BGKO multipointzm4326|0|LineString|0|KO-BKO-GKO:-BGKO multipointzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipointzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipointzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipointzm4326|0|Tin|0|KO-BKO-GKO:-BGKO multipointzm4326|0|Point|2|KO-BKO-GKO:-BGKO multipointzm4326|0|LineString|2|KO-BKO-GKO:-BGKO multipointzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipointzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipointzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipointzm4326|0|Point|1|KO-BKO-GKO:-BGKO multipointzm4326|0|LineString|1|KO-BKO-GKO:-BGKO multipointzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipointzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipointzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipointzm4326|0|Point|3|KO-BKO-GOK-BGOK multipointzm4326|0|LineString|3|KO-BKO-GKO:-BGKO multipointzm4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPoint|3|KO-BKO-GOK-BGOK multipointzm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointzm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipointzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipointzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipointzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|Point|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipointzm4326|4326|Point|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipointzm4326|4326|Point|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipointzm4326|4326|Point|3|OK-BOK-GOK-BGOK multipointzm4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPoint|3|OK-BOK-GOK-BGOK multipointzm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipointzm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipointzm4326||COUNT|4| multipointzm4326||GCOUNT|8| multipolygon|0|Point|0|KO-BKO-GKO:-BGKO multipolygon|0|LineString|0|KO-BKO-GKO:-BGKO multipolygon|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygon|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygon|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygon|0|MultiPolygon|0|OK-BOK-GOK-BGOK multipolygon|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygon|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygon|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygon|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygon|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygon|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygon|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygon|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygon|0|Tin|0|KO-BKO-GKO:-BGKO multipolygon|0|Point|2|KO-BKO-GKO:-BGKO multipolygon|0|LineString|2|KO-BKO-GKO:-BGKO multipolygon|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygon|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygon|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygon|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygon|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygon|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygon|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygon|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygon|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygon|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygon|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygon|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygon|0|Point|1|KO-BKO-GKO:-BGKO multipolygon|0|LineString|1|KO-BKO-GKO:-BGKO multipolygon|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygon|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygon|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygon|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygon|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygon|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygon|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygon|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygon|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygon|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygon|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygon|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygon|0|Point|3|KO-BKO-GKO:-BGKO multipolygon|0|LineString|3|KO-BKO-GKO:-BGKO multipolygon|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygon|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygon|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygon|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygon|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygon|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygon|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygon|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygon|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygon|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygon|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygon|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygon|4326|Point|0|KO-BKO-GKO:-BGKO multipolygon|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygon|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygon|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPolygon|0|OK-BOK-GOK-BGOK multipolygon|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygon|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygon|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygon|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygon|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygon|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygon|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygon|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygon|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygon|4326|Point|2|KO-BKO-GKO:-BGKO multipolygon|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygon|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygon|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygon|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygon|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygon|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygon|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygon|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygon|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygon|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygon|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygon|4326|Point|1|KO-BKO-GKO:-BGKO multipolygon|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygon|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygon|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygon|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygon|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygon|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygon|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygon|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygon|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygon|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygon|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygon|4326|Point|3|KO-BKO-GKO:-BGKO multipolygon|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygon|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygon|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygon|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygon|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygon|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygon|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygon|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygon|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygon|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygon|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygon|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygon||COUNT|4| multipolygon||GCOUNT|4| multipolygon0|0|Point|0|KO-BKO-GKO:-BGKO multipolygon0|0|LineString|0|KO-BKO-GKO:-BGKO multipolygon0|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygon0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPolygon|0|OK-BOK-GOK-BGOK multipolygon0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygon0|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygon0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygon0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygon0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygon0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygon0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygon0|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygon0|0|Tin|0|KO-BKO-GKO:-BGKO multipolygon0|0|Point|2|KO-BKO-GKO:-BGKO multipolygon0|0|LineString|2|KO-BKO-GKO:-BGKO multipolygon0|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygon0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygon0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygon0|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygon0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygon0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygon0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygon0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygon0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygon0|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygon0|0|Point|1|KO-BKO-GKO:-BGKO multipolygon0|0|LineString|1|KO-BKO-GKO:-BGKO multipolygon0|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygon0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygon0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygon0|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygon0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygon0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygon0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygon0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygon0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygon0|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygon0|0|Point|3|KO-BKO-GKO:-BGKO multipolygon0|0|LineString|3|KO-BKO-GKO:-BGKO multipolygon0|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygon0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygon0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygon0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygon0|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygon0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygon0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygon0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygon0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygon0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygon0|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygon0|4326|Point|0|KO-BKO-GKO:-BGKO multipolygon0|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygon0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPolygon|0|OK-BOK-GOK-BGOK multipolygon0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygon0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygon0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygon0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygon0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygon0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygon0|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygon0|4326|Point|2|KO-BKO-GKO:-BGKO multipolygon0|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygon0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygon0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygon0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygon0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygon0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygon0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygon0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygon0|4326|Point|1|KO-BKO-GKO:-BGKO multipolygon0|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygon0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygon0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygon0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygon0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygon0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygon0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygon0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygon0|4326|Point|3|KO-BKO-GKO:-BGKO multipolygon0|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygon0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygon0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygon0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygon0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygon0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygon0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygon0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygon0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygon0||COUNT|4| multipolygon0||GCOUNT|4| multipolygon4326|0|Point|0|KO-BKO-GKO:-BGKO multipolygon4326|0|LineString|0|KO-BKO-GKO:-BGKO multipolygon4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPolygon|0|KO-BKO-GOK-BGOK multipolygon4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygon4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygon4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygon4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygon4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygon4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygon4326|0|Tin|0|KO-BKO-GKO:-BGKO multipolygon4326|0|Point|2|KO-BKO-GKO:-BGKO multipolygon4326|0|LineString|2|KO-BKO-GKO:-BGKO multipolygon4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygon4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygon4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygon4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygon4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygon4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygon4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygon4326|0|Point|1|KO-BKO-GKO:-BGKO multipolygon4326|0|LineString|1|KO-BKO-GKO:-BGKO multipolygon4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygon4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygon4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygon4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygon4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygon4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygon4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygon4326|0|Point|3|KO-BKO-GKO:-BGKO multipolygon4326|0|LineString|3|KO-BKO-GKO:-BGKO multipolygon4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygon4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygon4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygon4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygon4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygon4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygon4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygon4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|Point|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPolygon|0|OK-BOK-GOK-BGOK multipolygon4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygon4326|4326|Point|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygon4326|4326|Point|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygon4326|4326|Point|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygon4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygon4326||COUNT|2| multipolygon4326||GCOUNT|4| multipolygonm|0|Point|0|KO-BKO-GKO:-BGKO multipolygonm|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonm|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonm|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonm|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonm|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonm|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonm|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonm|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonm|0|Point|2|KO-BKO-GKO:-BGKO multipolygonm|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonm|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonm|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonm|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonm|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonm|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonm|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonm|0|Point|1|KO-BKO-GKO:-BGKO multipolygonm|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonm|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonm|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPolygon|1|OK-BOK-GOK-BGOK multipolygonm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonm|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonm|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonm|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonm|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonm|0|Point|3|KO-BKO-GKO:-BGKO multipolygonm|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonm|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonm|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonm|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonm|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonm|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonm|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonm|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonm|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonm|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonm|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonm|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonm|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonm|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonm|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonm|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonm|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonm|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonm|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonm|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonm|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPolygon|1|OK-BOK-GOK-BGOK multipolygonm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonm|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonm|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonm|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonm|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonm|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonm|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonm|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonm||COUNT|4| multipolygonm||GCOUNT|4| multipolygonm0|0|Point|0|KO-BKO-GKO:-BGKO multipolygonm0|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonm0|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonm0|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonm0|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonm0|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonm0|0|Point|2|KO-BKO-GKO:-BGKO multipolygonm0|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonm0|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonm0|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonm0|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonm0|0|Point|1|KO-BKO-GKO:-BGKO multipolygonm0|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonm0|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPolygon|1|OK-BOK-GOK-BGOK multipolygonm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonm0|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonm0|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonm0|0|Point|3|KO-BKO-GKO:-BGKO multipolygonm0|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonm0|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonm0|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonm0|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonm0|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonm0|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPolygon|1|OK-BOK-GOK-BGOK multipolygonm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonm0|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonm0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonm0||COUNT|4| multipolygonm0||GCOUNT|4| multipolygonm4326|0|Point|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonm4326|0|Point|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonm4326|0|Point|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPolygon|1|KO-BKO-GOK-BGOK multipolygonm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonm4326|0|Point|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonm4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPolygon|1|OK-BOK-GOK-BGOK multipolygonm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonm4326||COUNT|2| multipolygonm4326||GCOUNT|4| multipolygonz|0|Point|0|KO-BKO-GKO:-BGKO multipolygonz|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonz|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonz|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonz|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonz|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonz|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonz|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonz|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonz|0|Point|2|KO-BKO-GKO:-BGKO multipolygonz|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonz|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonz|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPolygon|2|OK-BOK-GOK-BGOK multipolygonz|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonz|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonz|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonz|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonz|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonz|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonz|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonz|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonz|0|Point|1|KO-BKO-GKO:-BGKO multipolygonz|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonz|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonz|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonz|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonz|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonz|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonz|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonz|0|Point|3|KO-BKO-GKO:-BGKO multipolygonz|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonz|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonz|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonz|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonz|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonz|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonz|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonz|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonz|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonz|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonz|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonz|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonz|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonz|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonz|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonz|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPolygon|2|OK-BOK-GOK-BGOK multipolygonz|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonz|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonz|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonz|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonz|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonz|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonz|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonz|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonz|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonz|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonz|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonz|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonz|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonz|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonz|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonz|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonz||COUNT|4| multipolygonz||GCOUNT|4| multipolygonz0|0|Point|0|KO-BKO-GKO:-BGKO multipolygonz0|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonz0|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonz0|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonz0|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonz0|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonz0|0|Point|2|KO-BKO-GKO:-BGKO multipolygonz0|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonz0|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPolygon|2|OK-BOK-GOK-BGOK multipolygonz0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonz0|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonz0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonz0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonz0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonz0|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonz0|0|Point|1|KO-BKO-GKO:-BGKO multipolygonz0|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonz0|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonz0|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonz0|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonz0|0|Point|3|KO-BKO-GKO:-BGKO multipolygonz0|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonz0|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonz0|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonz0|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonz0|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPolygon|2|OK-BOK-GOK-BGOK multipolygonz0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonz0|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonz0|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonz0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonz0||COUNT|4| multipolygonz0||GCOUNT|4| multipolygonz4326|0|Point|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonz4326|0|Point|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPolygon|2|KO-BKO-GOK-BGOK multipolygonz4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonz4326|0|Point|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonz4326|0|Point|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonz4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPolygon|2|OK-BOK-GOK-BGOK multipolygonz4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonz4326||COUNT|2| multipolygonz4326||GCOUNT|4| multipolygonzm|0|Point|0|KO-BKO-GKO:-BGKO multipolygonzm|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonzm|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonzm|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonzm|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonzm|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonzm|0|Point|2|KO-BKO-GKO:-BGKO multipolygonzm|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonzm|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonzm|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonzm|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonzm|0|Point|1|KO-BKO-GKO:-BGKO multipolygonzm|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonzm|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonzm|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonzm|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonzm|0|Point|3|KO-BKO-GKO:-BGKO multipolygonzm|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonzm|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiPolygon|3|OK-BOK-GOK-BGOK multipolygonzm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonzm|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonzm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonzm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonzm|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonzm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonzm|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonzm|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonzm|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonzm|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiPolygon|3|OK-BOK-GOK-BGOK multipolygonzm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonzm|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonzm||COUNT|4| multipolygonzm||GCOUNT|4| multipolygonzm0|0|Point|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonzm0|0|Point|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonzm0|0|Point|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonzm0|0|Point|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiPolygon|3|OK-BOK-GOK-BGOK multipolygonzm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonzm0|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiPolygon|3|OK-BOK-GOK-BGOK multipolygonzm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonzm0|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonzm0||COUNT|4| multipolygonzm0||GCOUNT|4| multipolygonzm4326|0|Point|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|LineString|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Tin|0|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Point|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|LineString|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Point|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|LineString|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Point|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|LineString|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Polygon|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiPolygon|3|KO-BKO-GOK-BGOK multipolygonzm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Point|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Point|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Point|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Point|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|LineString|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiPolygon|3|OK-BOK-GOK-BGOK multipolygonzm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO multipolygonzm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO multipolygonzm4326||COUNT|2| multipolygonzm4326||GCOUNT|4| multisurface|0|Point|0|KO-BKO multisurface|0|LineString|0|KO-BKO multisurface|0|Polygon|0|KO-BKO multisurface|0|MultiPoint|0|KO-BKO multisurface|0|MultiLineString|0|KO-BKO multisurface|0|MultiPolygon|0|KO-BKO multisurface|0|GeometryCollection|0|KO-BKO multisurface|0|CircularString|0|KO-BKO multisurface|0|CompoundCurve|0|KO-BKO multisurface|0|CurvePolygon|0|KO-BKO multisurface|0|MultiCurve|0|KO-BKO multisurface|0|MultiSurface|0|OK-BOK multisurface|0|PolyhedralSurface|0|KO-BKO multisurface|0|Triangle|0|KO-BKO multisurface|0|Tin|0|KO-BKO multisurface|0|Point|2|KO-BKO multisurface|0|LineString|2|KO-BKO multisurface|0|Polygon|2|KO-BKO multisurface|0|MultiPoint|2|KO-BKO multisurface|0|MultiLineString|2|KO-BKO multisurface|0|MultiPolygon|2|KO-BKO multisurface|0|GeometryCollection|2|KO-BKO multisurface|0|CircularString|2|KO-BKO multisurface|0|CompoundCurve|2|KO-BKO multisurface|0|CurvePolygon|2|KO-BKO multisurface|0|MultiCurve|2|KO-BKO multisurface|0|MultiSurface|2|KO-BKO multisurface|0|PolyhedralSurface|2|KO-BKO multisurface|0|Triangle|2|KO-BKO multisurface|0|Point|1|KO-BKO multisurface|0|LineString|1|KO-BKO multisurface|0|Polygon|1|KO-BKO multisurface|0|MultiPoint|1|KO-BKO multisurface|0|MultiLineString|1|KO-BKO multisurface|0|MultiPolygon|1|KO-BKO multisurface|0|GeometryCollection|1|KO-BKO multisurface|0|CircularString|1|KO-BKO multisurface|0|CompoundCurve|1|KO-BKO multisurface|0|CurvePolygon|1|KO-BKO multisurface|0|MultiCurve|1|KO-BKO multisurface|0|MultiSurface|1|KO-BKO multisurface|0|PolyhedralSurface|1|KO-BKO multisurface|0|Triangle|1|KO-BKO multisurface|0|Point|3|KO-BKO multisurface|0|LineString|3|KO-BKO multisurface|0|Polygon|3|KO-BKO multisurface|0|MultiPoint|3|KO-BKO multisurface|0|MultiLineString|3|KO-BKO multisurface|0|MultiPolygon|3|KO-BKO multisurface|0|GeometryCollection|3|KO-BKO multisurface|0|CircularString|3|KO-BKO multisurface|0|CompoundCurve|3|KO-BKO multisurface|0|CurvePolygon|3|KO-BKO multisurface|0|MultiCurve|3|KO-BKO multisurface|0|MultiSurface|3|KO-BKO multisurface|0|PolyhedralSurface|3|KO-BKO multisurface|0|Triangle|3|KO-BKO multisurface|4326|Point|0|KO-BKO multisurface|4326|LineString|0|KO-BKO multisurface|4326|Polygon|0|KO-BKO multisurface|4326|MultiPoint|0|KO-BKO multisurface|4326|MultiLineString|0|KO-BKO multisurface|4326|MultiPolygon|0|KO-BKO multisurface|4326|GeometryCollection|0|KO-BKO multisurface|4326|CircularString|0|KO-BKO multisurface|4326|CompoundCurve|0|KO-BKO multisurface|4326|CurvePolygon|0|KO-BKO multisurface|4326|MultiCurve|0|KO-BKO multisurface|4326|MultiSurface|0|OK-BOK multisurface|4326|PolyhedralSurface|0|KO-BKO multisurface|4326|Triangle|0|KO-BKO multisurface|4326|Tin|0|KO-BKO multisurface|4326|Point|2|KO-BKO multisurface|4326|LineString|2|KO-BKO multisurface|4326|Polygon|2|KO-BKO multisurface|4326|MultiPoint|2|KO-BKO multisurface|4326|MultiLineString|2|KO-BKO multisurface|4326|MultiPolygon|2|KO-BKO multisurface|4326|GeometryCollection|2|KO-BKO multisurface|4326|CircularString|2|KO-BKO multisurface|4326|CompoundCurve|2|KO-BKO multisurface|4326|CurvePolygon|2|KO-BKO multisurface|4326|MultiCurve|2|KO-BKO multisurface|4326|MultiSurface|2|KO-BKO multisurface|4326|PolyhedralSurface|2|KO-BKO multisurface|4326|Triangle|2|KO-BKO multisurface|4326|Point|1|KO-BKO multisurface|4326|LineString|1|KO-BKO multisurface|4326|Polygon|1|KO-BKO multisurface|4326|MultiPoint|1|KO-BKO multisurface|4326|MultiLineString|1|KO-BKO multisurface|4326|MultiPolygon|1|KO-BKO multisurface|4326|GeometryCollection|1|KO-BKO multisurface|4326|CircularString|1|KO-BKO multisurface|4326|CompoundCurve|1|KO-BKO multisurface|4326|CurvePolygon|1|KO-BKO multisurface|4326|MultiCurve|1|KO-BKO multisurface|4326|MultiSurface|1|KO-BKO multisurface|4326|PolyhedralSurface|1|KO-BKO multisurface|4326|Triangle|1|KO-BKO multisurface|4326|Point|3|KO-BKO multisurface|4326|LineString|3|KO-BKO multisurface|4326|Polygon|3|KO-BKO multisurface|4326|MultiPoint|3|KO-BKO multisurface|4326|MultiLineString|3|KO-BKO multisurface|4326|MultiPolygon|3|KO-BKO multisurface|4326|GeometryCollection|3|KO-BKO multisurface|4326|CircularString|3|KO-BKO multisurface|4326|CompoundCurve|3|KO-BKO multisurface|4326|CurvePolygon|3|KO-BKO multisurface|4326|MultiCurve|3|KO-BKO multisurface|4326|MultiSurface|3|KO-BKO multisurface|4326|PolyhedralSurface|3|KO-BKO multisurface|4326|Triangle|3|KO-BKO multisurface||COUNT|4| multisurface0|0|Point|0|KO-BKO multisurface0|0|LineString|0|KO-BKO multisurface0|0|Polygon|0|KO-BKO multisurface0|0|MultiPoint|0|KO-BKO multisurface0|0|MultiLineString|0|KO-BKO multisurface0|0|MultiPolygon|0|KO-BKO multisurface0|0|GeometryCollection|0|KO-BKO multisurface0|0|CircularString|0|KO-BKO multisurface0|0|CompoundCurve|0|KO-BKO multisurface0|0|CurvePolygon|0|KO-BKO multisurface0|0|MultiCurve|0|KO-BKO multisurface0|0|MultiSurface|0|OK-BOK multisurface0|0|PolyhedralSurface|0|KO-BKO multisurface0|0|Triangle|0|KO-BKO multisurface0|0|Tin|0|KO-BKO multisurface0|0|Point|2|KO-BKO multisurface0|0|LineString|2|KO-BKO multisurface0|0|Polygon|2|KO-BKO multisurface0|0|MultiPoint|2|KO-BKO multisurface0|0|MultiLineString|2|KO-BKO multisurface0|0|MultiPolygon|2|KO-BKO multisurface0|0|GeometryCollection|2|KO-BKO multisurface0|0|CircularString|2|KO-BKO multisurface0|0|CompoundCurve|2|KO-BKO multisurface0|0|CurvePolygon|2|KO-BKO multisurface0|0|MultiCurve|2|KO-BKO multisurface0|0|MultiSurface|2|KO-BKO multisurface0|0|PolyhedralSurface|2|KO-BKO multisurface0|0|Triangle|2|KO-BKO multisurface0|0|Point|1|KO-BKO multisurface0|0|LineString|1|KO-BKO multisurface0|0|Polygon|1|KO-BKO multisurface0|0|MultiPoint|1|KO-BKO multisurface0|0|MultiLineString|1|KO-BKO multisurface0|0|MultiPolygon|1|KO-BKO multisurface0|0|GeometryCollection|1|KO-BKO multisurface0|0|CircularString|1|KO-BKO multisurface0|0|CompoundCurve|1|KO-BKO multisurface0|0|CurvePolygon|1|KO-BKO multisurface0|0|MultiCurve|1|KO-BKO multisurface0|0|MultiSurface|1|KO-BKO multisurface0|0|PolyhedralSurface|1|KO-BKO multisurface0|0|Triangle|1|KO-BKO multisurface0|0|Point|3|KO-BKO multisurface0|0|LineString|3|KO-BKO multisurface0|0|Polygon|3|KO-BKO multisurface0|0|MultiPoint|3|KO-BKO multisurface0|0|MultiLineString|3|KO-BKO multisurface0|0|MultiPolygon|3|KO-BKO multisurface0|0|GeometryCollection|3|KO-BKO multisurface0|0|CircularString|3|KO-BKO multisurface0|0|CompoundCurve|3|KO-BKO multisurface0|0|CurvePolygon|3|KO-BKO multisurface0|0|MultiCurve|3|KO-BKO multisurface0|0|MultiSurface|3|KO-BKO multisurface0|0|PolyhedralSurface|3|KO-BKO multisurface0|0|Triangle|3|KO-BKO multisurface0|4326|Point|0|KO-BKO multisurface0|4326|LineString|0|KO-BKO multisurface0|4326|Polygon|0|KO-BKO multisurface0|4326|MultiPoint|0|KO-BKO multisurface0|4326|MultiLineString|0|KO-BKO multisurface0|4326|MultiPolygon|0|KO-BKO multisurface0|4326|GeometryCollection|0|KO-BKO multisurface0|4326|CircularString|0|KO-BKO multisurface0|4326|CompoundCurve|0|KO-BKO multisurface0|4326|CurvePolygon|0|KO-BKO multisurface0|4326|MultiCurve|0|KO-BKO multisurface0|4326|MultiSurface|0|OK-BOK multisurface0|4326|PolyhedralSurface|0|KO-BKO multisurface0|4326|Triangle|0|KO-BKO multisurface0|4326|Tin|0|KO-BKO multisurface0|4326|Point|2|KO-BKO multisurface0|4326|LineString|2|KO-BKO multisurface0|4326|Polygon|2|KO-BKO multisurface0|4326|MultiPoint|2|KO-BKO multisurface0|4326|MultiLineString|2|KO-BKO multisurface0|4326|MultiPolygon|2|KO-BKO multisurface0|4326|GeometryCollection|2|KO-BKO multisurface0|4326|CircularString|2|KO-BKO multisurface0|4326|CompoundCurve|2|KO-BKO multisurface0|4326|CurvePolygon|2|KO-BKO multisurface0|4326|MultiCurve|2|KO-BKO multisurface0|4326|MultiSurface|2|KO-BKO multisurface0|4326|PolyhedralSurface|2|KO-BKO multisurface0|4326|Triangle|2|KO-BKO multisurface0|4326|Point|1|KO-BKO multisurface0|4326|LineString|1|KO-BKO multisurface0|4326|Polygon|1|KO-BKO multisurface0|4326|MultiPoint|1|KO-BKO multisurface0|4326|MultiLineString|1|KO-BKO multisurface0|4326|MultiPolygon|1|KO-BKO multisurface0|4326|GeometryCollection|1|KO-BKO multisurface0|4326|CircularString|1|KO-BKO multisurface0|4326|CompoundCurve|1|KO-BKO multisurface0|4326|CurvePolygon|1|KO-BKO multisurface0|4326|MultiCurve|1|KO-BKO multisurface0|4326|MultiSurface|1|KO-BKO multisurface0|4326|PolyhedralSurface|1|KO-BKO multisurface0|4326|Triangle|1|KO-BKO multisurface0|4326|Point|3|KO-BKO multisurface0|4326|LineString|3|KO-BKO multisurface0|4326|Polygon|3|KO-BKO multisurface0|4326|MultiPoint|3|KO-BKO multisurface0|4326|MultiLineString|3|KO-BKO multisurface0|4326|MultiPolygon|3|KO-BKO multisurface0|4326|GeometryCollection|3|KO-BKO multisurface0|4326|CircularString|3|KO-BKO multisurface0|4326|CompoundCurve|3|KO-BKO multisurface0|4326|CurvePolygon|3|KO-BKO multisurface0|4326|MultiCurve|3|KO-BKO multisurface0|4326|MultiSurface|3|KO-BKO multisurface0|4326|PolyhedralSurface|3|KO-BKO multisurface0|4326|Triangle|3|KO-BKO multisurface0||COUNT|4| multisurface4326|0|Point|0|KO-BKO multisurface4326|0|LineString|0|KO-BKO multisurface4326|0|Polygon|0|KO-BKO multisurface4326|0|MultiPoint|0|KO-BKO multisurface4326|0|MultiLineString|0|KO-BKO multisurface4326|0|MultiPolygon|0|KO-BKO multisurface4326|0|GeometryCollection|0|KO-BKO multisurface4326|0|CircularString|0|KO-BKO multisurface4326|0|CompoundCurve|0|KO-BKO multisurface4326|0|CurvePolygon|0|KO-BKO multisurface4326|0|MultiCurve|0|KO-BKO multisurface4326|0|MultiSurface|0|KO-BKO multisurface4326|0|PolyhedralSurface|0|KO-BKO multisurface4326|0|Triangle|0|KO-BKO multisurface4326|0|Tin|0|KO-BKO multisurface4326|0|Point|2|KO-BKO multisurface4326|0|LineString|2|KO-BKO multisurface4326|0|Polygon|2|KO-BKO multisurface4326|0|MultiPoint|2|KO-BKO multisurface4326|0|MultiLineString|2|KO-BKO multisurface4326|0|MultiPolygon|2|KO-BKO multisurface4326|0|GeometryCollection|2|KO-BKO multisurface4326|0|CircularString|2|KO-BKO multisurface4326|0|CompoundCurve|2|KO-BKO multisurface4326|0|CurvePolygon|2|KO-BKO multisurface4326|0|MultiCurve|2|KO-BKO multisurface4326|0|MultiSurface|2|KO-BKO multisurface4326|0|PolyhedralSurface|2|KO-BKO multisurface4326|0|Triangle|2|KO-BKO multisurface4326|0|Point|1|KO-BKO multisurface4326|0|LineString|1|KO-BKO multisurface4326|0|Polygon|1|KO-BKO multisurface4326|0|MultiPoint|1|KO-BKO multisurface4326|0|MultiLineString|1|KO-BKO multisurface4326|0|MultiPolygon|1|KO-BKO multisurface4326|0|GeometryCollection|1|KO-BKO multisurface4326|0|CircularString|1|KO-BKO multisurface4326|0|CompoundCurve|1|KO-BKO multisurface4326|0|CurvePolygon|1|KO-BKO multisurface4326|0|MultiCurve|1|KO-BKO multisurface4326|0|MultiSurface|1|KO-BKO multisurface4326|0|PolyhedralSurface|1|KO-BKO multisurface4326|0|Triangle|1|KO-BKO multisurface4326|0|Point|3|KO-BKO multisurface4326|0|LineString|3|KO-BKO multisurface4326|0|Polygon|3|KO-BKO multisurface4326|0|MultiPoint|3|KO-BKO multisurface4326|0|MultiLineString|3|KO-BKO multisurface4326|0|MultiPolygon|3|KO-BKO multisurface4326|0|GeometryCollection|3|KO-BKO multisurface4326|0|CircularString|3|KO-BKO multisurface4326|0|CompoundCurve|3|KO-BKO multisurface4326|0|CurvePolygon|3|KO-BKO multisurface4326|0|MultiCurve|3|KO-BKO multisurface4326|0|MultiSurface|3|KO-BKO multisurface4326|0|PolyhedralSurface|3|KO-BKO multisurface4326|0|Triangle|3|KO-BKO multisurface4326|4326|Point|0|KO-BKO multisurface4326|4326|LineString|0|KO-BKO multisurface4326|4326|Polygon|0|KO-BKO multisurface4326|4326|MultiPoint|0|KO-BKO multisurface4326|4326|MultiLineString|0|KO-BKO multisurface4326|4326|MultiPolygon|0|KO-BKO multisurface4326|4326|GeometryCollection|0|KO-BKO multisurface4326|4326|CircularString|0|KO-BKO multisurface4326|4326|CompoundCurve|0|KO-BKO multisurface4326|4326|CurvePolygon|0|KO-BKO multisurface4326|4326|MultiCurve|0|KO-BKO multisurface4326|4326|MultiSurface|0|OK-BOK multisurface4326|4326|PolyhedralSurface|0|KO-BKO multisurface4326|4326|Triangle|0|KO-BKO multisurface4326|4326|Tin|0|KO-BKO multisurface4326|4326|Point|2|KO-BKO multisurface4326|4326|LineString|2|KO-BKO multisurface4326|4326|Polygon|2|KO-BKO multisurface4326|4326|MultiPoint|2|KO-BKO multisurface4326|4326|MultiLineString|2|KO-BKO multisurface4326|4326|MultiPolygon|2|KO-BKO multisurface4326|4326|GeometryCollection|2|KO-BKO multisurface4326|4326|CircularString|2|KO-BKO multisurface4326|4326|CompoundCurve|2|KO-BKO multisurface4326|4326|CurvePolygon|2|KO-BKO multisurface4326|4326|MultiCurve|2|KO-BKO multisurface4326|4326|MultiSurface|2|KO-BKO multisurface4326|4326|PolyhedralSurface|2|KO-BKO multisurface4326|4326|Triangle|2|KO-BKO multisurface4326|4326|Point|1|KO-BKO multisurface4326|4326|LineString|1|KO-BKO multisurface4326|4326|Polygon|1|KO-BKO multisurface4326|4326|MultiPoint|1|KO-BKO multisurface4326|4326|MultiLineString|1|KO-BKO multisurface4326|4326|MultiPolygon|1|KO-BKO multisurface4326|4326|GeometryCollection|1|KO-BKO multisurface4326|4326|CircularString|1|KO-BKO multisurface4326|4326|CompoundCurve|1|KO-BKO multisurface4326|4326|CurvePolygon|1|KO-BKO multisurface4326|4326|MultiCurve|1|KO-BKO multisurface4326|4326|MultiSurface|1|KO-BKO multisurface4326|4326|PolyhedralSurface|1|KO-BKO multisurface4326|4326|Triangle|1|KO-BKO multisurface4326|4326|Point|3|KO-BKO multisurface4326|4326|LineString|3|KO-BKO multisurface4326|4326|Polygon|3|KO-BKO multisurface4326|4326|MultiPoint|3|KO-BKO multisurface4326|4326|MultiLineString|3|KO-BKO multisurface4326|4326|MultiPolygon|3|KO-BKO multisurface4326|4326|GeometryCollection|3|KO-BKO multisurface4326|4326|CircularString|3|KO-BKO multisurface4326|4326|CompoundCurve|3|KO-BKO multisurface4326|4326|CurvePolygon|3|KO-BKO multisurface4326|4326|MultiCurve|3|KO-BKO multisurface4326|4326|MultiSurface|3|KO-BKO multisurface4326|4326|PolyhedralSurface|3|KO-BKO multisurface4326|4326|Triangle|3|KO-BKO multisurface4326||COUNT|2| multisurfacem|0|Point|0|KO-BKO multisurfacem|0|LineString|0|KO-BKO multisurfacem|0|Polygon|0|KO-BKO multisurfacem|0|MultiPoint|0|KO-BKO multisurfacem|0|MultiLineString|0|KO-BKO multisurfacem|0|MultiPolygon|0|KO-BKO multisurfacem|0|GeometryCollection|0|KO-BKO multisurfacem|0|CircularString|0|KO-BKO multisurfacem|0|CompoundCurve|0|KO-BKO multisurfacem|0|CurvePolygon|0|KO-BKO multisurfacem|0|MultiCurve|0|KO-BKO multisurfacem|0|MultiSurface|0|KO-BKO multisurfacem|0|PolyhedralSurface|0|KO-BKO multisurfacem|0|Triangle|0|KO-BKO multisurfacem|0|Tin|0|KO-BKO multisurfacem|0|Point|2|KO-BKO multisurfacem|0|LineString|2|KO-BKO multisurfacem|0|Polygon|2|KO-BKO multisurfacem|0|MultiPoint|2|KO-BKO multisurfacem|0|MultiLineString|2|KO-BKO multisurfacem|0|MultiPolygon|2|KO-BKO multisurfacem|0|GeometryCollection|2|KO-BKO multisurfacem|0|CircularString|2|KO-BKO multisurfacem|0|CompoundCurve|2|KO-BKO multisurfacem|0|CurvePolygon|2|KO-BKO multisurfacem|0|MultiCurve|2|KO-BKO multisurfacem|0|MultiSurface|2|KO-BKO multisurfacem|0|PolyhedralSurface|2|KO-BKO multisurfacem|0|Triangle|2|KO-BKO multisurfacem|0|Point|1|KO-BKO multisurfacem|0|LineString|1|KO-BKO multisurfacem|0|Polygon|1|KO-BKO multisurfacem|0|MultiPoint|1|KO-BKO multisurfacem|0|MultiLineString|1|KO-BKO multisurfacem|0|MultiPolygon|1|KO-BKO multisurfacem|0|GeometryCollection|1|KO-BKO multisurfacem|0|CircularString|1|KO-BKO multisurfacem|0|CompoundCurve|1|KO-BKO multisurfacem|0|CurvePolygon|1|KO-BKO multisurfacem|0|MultiCurve|1|KO-BKO multisurfacem|0|MultiSurface|1|OK-BOK multisurfacem|0|PolyhedralSurface|1|KO-BKO multisurfacem|0|Triangle|1|KO-BKO multisurfacem|0|Point|3|KO-BKO multisurfacem|0|LineString|3|KO-BKO multisurfacem|0|Polygon|3|KO-BKO multisurfacem|0|MultiPoint|3|KO-BKO multisurfacem|0|MultiLineString|3|KO-BKO multisurfacem|0|MultiPolygon|3|KO-BKO multisurfacem|0|GeometryCollection|3|KO-BKO multisurfacem|0|CircularString|3|KO-BKO multisurfacem|0|CompoundCurve|3|KO-BKO multisurfacem|0|CurvePolygon|3|KO-BKO multisurfacem|0|MultiCurve|3|KO-BKO multisurfacem|0|MultiSurface|3|KO-BKO multisurfacem|0|PolyhedralSurface|3|KO-BKO multisurfacem|0|Triangle|3|KO-BKO multisurfacem|4326|Point|0|KO-BKO multisurfacem|4326|LineString|0|KO-BKO multisurfacem|4326|Polygon|0|KO-BKO multisurfacem|4326|MultiPoint|0|KO-BKO multisurfacem|4326|MultiLineString|0|KO-BKO multisurfacem|4326|MultiPolygon|0|KO-BKO multisurfacem|4326|GeometryCollection|0|KO-BKO multisurfacem|4326|CircularString|0|KO-BKO multisurfacem|4326|CompoundCurve|0|KO-BKO multisurfacem|4326|CurvePolygon|0|KO-BKO multisurfacem|4326|MultiCurve|0|KO-BKO multisurfacem|4326|MultiSurface|0|KO-BKO multisurfacem|4326|PolyhedralSurface|0|KO-BKO multisurfacem|4326|Triangle|0|KO-BKO multisurfacem|4326|Tin|0|KO-BKO multisurfacem|4326|Point|2|KO-BKO multisurfacem|4326|LineString|2|KO-BKO multisurfacem|4326|Polygon|2|KO-BKO multisurfacem|4326|MultiPoint|2|KO-BKO multisurfacem|4326|MultiLineString|2|KO-BKO multisurfacem|4326|MultiPolygon|2|KO-BKO multisurfacem|4326|GeometryCollection|2|KO-BKO multisurfacem|4326|CircularString|2|KO-BKO multisurfacem|4326|CompoundCurve|2|KO-BKO multisurfacem|4326|CurvePolygon|2|KO-BKO multisurfacem|4326|MultiCurve|2|KO-BKO multisurfacem|4326|MultiSurface|2|KO-BKO multisurfacem|4326|PolyhedralSurface|2|KO-BKO multisurfacem|4326|Triangle|2|KO-BKO multisurfacem|4326|Point|1|KO-BKO multisurfacem|4326|LineString|1|KO-BKO multisurfacem|4326|Polygon|1|KO-BKO multisurfacem|4326|MultiPoint|1|KO-BKO multisurfacem|4326|MultiLineString|1|KO-BKO multisurfacem|4326|MultiPolygon|1|KO-BKO multisurfacem|4326|GeometryCollection|1|KO-BKO multisurfacem|4326|CircularString|1|KO-BKO multisurfacem|4326|CompoundCurve|1|KO-BKO multisurfacem|4326|CurvePolygon|1|KO-BKO multisurfacem|4326|MultiCurve|1|KO-BKO multisurfacem|4326|MultiSurface|1|OK-BOK multisurfacem|4326|PolyhedralSurface|1|KO-BKO multisurfacem|4326|Triangle|1|KO-BKO multisurfacem|4326|Point|3|KO-BKO multisurfacem|4326|LineString|3|KO-BKO multisurfacem|4326|Polygon|3|KO-BKO multisurfacem|4326|MultiPoint|3|KO-BKO multisurfacem|4326|MultiLineString|3|KO-BKO multisurfacem|4326|MultiPolygon|3|KO-BKO multisurfacem|4326|GeometryCollection|3|KO-BKO multisurfacem|4326|CircularString|3|KO-BKO multisurfacem|4326|CompoundCurve|3|KO-BKO multisurfacem|4326|CurvePolygon|3|KO-BKO multisurfacem|4326|MultiCurve|3|KO-BKO multisurfacem|4326|MultiSurface|3|KO-BKO multisurfacem|4326|PolyhedralSurface|3|KO-BKO multisurfacem|4326|Triangle|3|KO-BKO multisurfacem||COUNT|4| multisurfacem0|0|Point|0|KO-BKO multisurfacem0|0|LineString|0|KO-BKO multisurfacem0|0|Polygon|0|KO-BKO multisurfacem0|0|MultiPoint|0|KO-BKO multisurfacem0|0|MultiLineString|0|KO-BKO multisurfacem0|0|MultiPolygon|0|KO-BKO multisurfacem0|0|GeometryCollection|0|KO-BKO multisurfacem0|0|CircularString|0|KO-BKO multisurfacem0|0|CompoundCurve|0|KO-BKO multisurfacem0|0|CurvePolygon|0|KO-BKO multisurfacem0|0|MultiCurve|0|KO-BKO multisurfacem0|0|MultiSurface|0|KO-BKO multisurfacem0|0|PolyhedralSurface|0|KO-BKO multisurfacem0|0|Triangle|0|KO-BKO multisurfacem0|0|Tin|0|KO-BKO multisurfacem0|0|Point|2|KO-BKO multisurfacem0|0|LineString|2|KO-BKO multisurfacem0|0|Polygon|2|KO-BKO multisurfacem0|0|MultiPoint|2|KO-BKO multisurfacem0|0|MultiLineString|2|KO-BKO multisurfacem0|0|MultiPolygon|2|KO-BKO multisurfacem0|0|GeometryCollection|2|KO-BKO multisurfacem0|0|CircularString|2|KO-BKO multisurfacem0|0|CompoundCurve|2|KO-BKO multisurfacem0|0|CurvePolygon|2|KO-BKO multisurfacem0|0|MultiCurve|2|KO-BKO multisurfacem0|0|MultiSurface|2|KO-BKO multisurfacem0|0|PolyhedralSurface|2|KO-BKO multisurfacem0|0|Triangle|2|KO-BKO multisurfacem0|0|Point|1|KO-BKO multisurfacem0|0|LineString|1|KO-BKO multisurfacem0|0|Polygon|1|KO-BKO multisurfacem0|0|MultiPoint|1|KO-BKO multisurfacem0|0|MultiLineString|1|KO-BKO multisurfacem0|0|MultiPolygon|1|KO-BKO multisurfacem0|0|GeometryCollection|1|KO-BKO multisurfacem0|0|CircularString|1|KO-BKO multisurfacem0|0|CompoundCurve|1|KO-BKO multisurfacem0|0|CurvePolygon|1|KO-BKO multisurfacem0|0|MultiCurve|1|KO-BKO multisurfacem0|0|MultiSurface|1|OK-BOK multisurfacem0|0|PolyhedralSurface|1|KO-BKO multisurfacem0|0|Triangle|1|KO-BKO multisurfacem0|0|Point|3|KO-BKO multisurfacem0|0|LineString|3|KO-BKO multisurfacem0|0|Polygon|3|KO-BKO multisurfacem0|0|MultiPoint|3|KO-BKO multisurfacem0|0|MultiLineString|3|KO-BKO multisurfacem0|0|MultiPolygon|3|KO-BKO multisurfacem0|0|GeometryCollection|3|KO-BKO multisurfacem0|0|CircularString|3|KO-BKO multisurfacem0|0|CompoundCurve|3|KO-BKO multisurfacem0|0|CurvePolygon|3|KO-BKO multisurfacem0|0|MultiCurve|3|KO-BKO multisurfacem0|0|MultiSurface|3|KO-BKO multisurfacem0|0|PolyhedralSurface|3|KO-BKO multisurfacem0|0|Triangle|3|KO-BKO multisurfacem0|4326|Point|0|KO-BKO multisurfacem0|4326|LineString|0|KO-BKO multisurfacem0|4326|Polygon|0|KO-BKO multisurfacem0|4326|MultiPoint|0|KO-BKO multisurfacem0|4326|MultiLineString|0|KO-BKO multisurfacem0|4326|MultiPolygon|0|KO-BKO multisurfacem0|4326|GeometryCollection|0|KO-BKO multisurfacem0|4326|CircularString|0|KO-BKO multisurfacem0|4326|CompoundCurve|0|KO-BKO multisurfacem0|4326|CurvePolygon|0|KO-BKO multisurfacem0|4326|MultiCurve|0|KO-BKO multisurfacem0|4326|MultiSurface|0|KO-BKO multisurfacem0|4326|PolyhedralSurface|0|KO-BKO multisurfacem0|4326|Triangle|0|KO-BKO multisurfacem0|4326|Tin|0|KO-BKO multisurfacem0|4326|Point|2|KO-BKO multisurfacem0|4326|LineString|2|KO-BKO multisurfacem0|4326|Polygon|2|KO-BKO multisurfacem0|4326|MultiPoint|2|KO-BKO multisurfacem0|4326|MultiLineString|2|KO-BKO multisurfacem0|4326|MultiPolygon|2|KO-BKO multisurfacem0|4326|GeometryCollection|2|KO-BKO multisurfacem0|4326|CircularString|2|KO-BKO multisurfacem0|4326|CompoundCurve|2|KO-BKO multisurfacem0|4326|CurvePolygon|2|KO-BKO multisurfacem0|4326|MultiCurve|2|KO-BKO multisurfacem0|4326|MultiSurface|2|KO-BKO multisurfacem0|4326|PolyhedralSurface|2|KO-BKO multisurfacem0|4326|Triangle|2|KO-BKO multisurfacem0|4326|Point|1|KO-BKO multisurfacem0|4326|LineString|1|KO-BKO multisurfacem0|4326|Polygon|1|KO-BKO multisurfacem0|4326|MultiPoint|1|KO-BKO multisurfacem0|4326|MultiLineString|1|KO-BKO multisurfacem0|4326|MultiPolygon|1|KO-BKO multisurfacem0|4326|GeometryCollection|1|KO-BKO multisurfacem0|4326|CircularString|1|KO-BKO multisurfacem0|4326|CompoundCurve|1|KO-BKO multisurfacem0|4326|CurvePolygon|1|KO-BKO multisurfacem0|4326|MultiCurve|1|KO-BKO multisurfacem0|4326|MultiSurface|1|OK-BOK multisurfacem0|4326|PolyhedralSurface|1|KO-BKO multisurfacem0|4326|Triangle|1|KO-BKO multisurfacem0|4326|Point|3|KO-BKO multisurfacem0|4326|LineString|3|KO-BKO multisurfacem0|4326|Polygon|3|KO-BKO multisurfacem0|4326|MultiPoint|3|KO-BKO multisurfacem0|4326|MultiLineString|3|KO-BKO multisurfacem0|4326|MultiPolygon|3|KO-BKO multisurfacem0|4326|GeometryCollection|3|KO-BKO multisurfacem0|4326|CircularString|3|KO-BKO multisurfacem0|4326|CompoundCurve|3|KO-BKO multisurfacem0|4326|CurvePolygon|3|KO-BKO multisurfacem0|4326|MultiCurve|3|KO-BKO multisurfacem0|4326|MultiSurface|3|KO-BKO multisurfacem0|4326|PolyhedralSurface|3|KO-BKO multisurfacem0|4326|Triangle|3|KO-BKO multisurfacem0||COUNT|4| multisurfacem4326|0|Point|0|KO-BKO multisurfacem4326|0|LineString|0|KO-BKO multisurfacem4326|0|Polygon|0|KO-BKO multisurfacem4326|0|MultiPoint|0|KO-BKO multisurfacem4326|0|MultiLineString|0|KO-BKO multisurfacem4326|0|MultiPolygon|0|KO-BKO multisurfacem4326|0|GeometryCollection|0|KO-BKO multisurfacem4326|0|CircularString|0|KO-BKO multisurfacem4326|0|CompoundCurve|0|KO-BKO multisurfacem4326|0|CurvePolygon|0|KO-BKO multisurfacem4326|0|MultiCurve|0|KO-BKO multisurfacem4326|0|MultiSurface|0|KO-BKO multisurfacem4326|0|PolyhedralSurface|0|KO-BKO multisurfacem4326|0|Triangle|0|KO-BKO multisurfacem4326|0|Tin|0|KO-BKO multisurfacem4326|0|Point|2|KO-BKO multisurfacem4326|0|LineString|2|KO-BKO multisurfacem4326|0|Polygon|2|KO-BKO multisurfacem4326|0|MultiPoint|2|KO-BKO multisurfacem4326|0|MultiLineString|2|KO-BKO multisurfacem4326|0|MultiPolygon|2|KO-BKO multisurfacem4326|0|GeometryCollection|2|KO-BKO multisurfacem4326|0|CircularString|2|KO-BKO multisurfacem4326|0|CompoundCurve|2|KO-BKO multisurfacem4326|0|CurvePolygon|2|KO-BKO multisurfacem4326|0|MultiCurve|2|KO-BKO multisurfacem4326|0|MultiSurface|2|KO-BKO multisurfacem4326|0|PolyhedralSurface|2|KO-BKO multisurfacem4326|0|Triangle|2|KO-BKO multisurfacem4326|0|Point|1|KO-BKO multisurfacem4326|0|LineString|1|KO-BKO multisurfacem4326|0|Polygon|1|KO-BKO multisurfacem4326|0|MultiPoint|1|KO-BKO multisurfacem4326|0|MultiLineString|1|KO-BKO multisurfacem4326|0|MultiPolygon|1|KO-BKO multisurfacem4326|0|GeometryCollection|1|KO-BKO multisurfacem4326|0|CircularString|1|KO-BKO multisurfacem4326|0|CompoundCurve|1|KO-BKO multisurfacem4326|0|CurvePolygon|1|KO-BKO multisurfacem4326|0|MultiCurve|1|KO-BKO multisurfacem4326|0|MultiSurface|1|KO-BKO multisurfacem4326|0|PolyhedralSurface|1|KO-BKO multisurfacem4326|0|Triangle|1|KO-BKO multisurfacem4326|0|Point|3|KO-BKO multisurfacem4326|0|LineString|3|KO-BKO multisurfacem4326|0|Polygon|3|KO-BKO multisurfacem4326|0|MultiPoint|3|KO-BKO multisurfacem4326|0|MultiLineString|3|KO-BKO multisurfacem4326|0|MultiPolygon|3|KO-BKO multisurfacem4326|0|GeometryCollection|3|KO-BKO multisurfacem4326|0|CircularString|3|KO-BKO multisurfacem4326|0|CompoundCurve|3|KO-BKO multisurfacem4326|0|CurvePolygon|3|KO-BKO multisurfacem4326|0|MultiCurve|3|KO-BKO multisurfacem4326|0|MultiSurface|3|KO-BKO multisurfacem4326|0|PolyhedralSurface|3|KO-BKO multisurfacem4326|0|Triangle|3|KO-BKO multisurfacem4326|4326|Point|0|KO-BKO multisurfacem4326|4326|LineString|0|KO-BKO multisurfacem4326|4326|Polygon|0|KO-BKO multisurfacem4326|4326|MultiPoint|0|KO-BKO multisurfacem4326|4326|MultiLineString|0|KO-BKO multisurfacem4326|4326|MultiPolygon|0|KO-BKO multisurfacem4326|4326|GeometryCollection|0|KO-BKO multisurfacem4326|4326|CircularString|0|KO-BKO multisurfacem4326|4326|CompoundCurve|0|KO-BKO multisurfacem4326|4326|CurvePolygon|0|KO-BKO multisurfacem4326|4326|MultiCurve|0|KO-BKO multisurfacem4326|4326|MultiSurface|0|KO-BKO multisurfacem4326|4326|PolyhedralSurface|0|KO-BKO multisurfacem4326|4326|Triangle|0|KO-BKO multisurfacem4326|4326|Tin|0|KO-BKO multisurfacem4326|4326|Point|2|KO-BKO multisurfacem4326|4326|LineString|2|KO-BKO multisurfacem4326|4326|Polygon|2|KO-BKO multisurfacem4326|4326|MultiPoint|2|KO-BKO multisurfacem4326|4326|MultiLineString|2|KO-BKO multisurfacem4326|4326|MultiPolygon|2|KO-BKO multisurfacem4326|4326|GeometryCollection|2|KO-BKO multisurfacem4326|4326|CircularString|2|KO-BKO multisurfacem4326|4326|CompoundCurve|2|KO-BKO multisurfacem4326|4326|CurvePolygon|2|KO-BKO multisurfacem4326|4326|MultiCurve|2|KO-BKO multisurfacem4326|4326|MultiSurface|2|KO-BKO multisurfacem4326|4326|PolyhedralSurface|2|KO-BKO multisurfacem4326|4326|Triangle|2|KO-BKO multisurfacem4326|4326|Point|1|KO-BKO multisurfacem4326|4326|LineString|1|KO-BKO multisurfacem4326|4326|Polygon|1|KO-BKO multisurfacem4326|4326|MultiPoint|1|KO-BKO multisurfacem4326|4326|MultiLineString|1|KO-BKO multisurfacem4326|4326|MultiPolygon|1|KO-BKO multisurfacem4326|4326|GeometryCollection|1|KO-BKO multisurfacem4326|4326|CircularString|1|KO-BKO multisurfacem4326|4326|CompoundCurve|1|KO-BKO multisurfacem4326|4326|CurvePolygon|1|KO-BKO multisurfacem4326|4326|MultiCurve|1|KO-BKO multisurfacem4326|4326|MultiSurface|1|OK-BOK multisurfacem4326|4326|PolyhedralSurface|1|KO-BKO multisurfacem4326|4326|Triangle|1|KO-BKO multisurfacem4326|4326|Point|3|KO-BKO multisurfacem4326|4326|LineString|3|KO-BKO multisurfacem4326|4326|Polygon|3|KO-BKO multisurfacem4326|4326|MultiPoint|3|KO-BKO multisurfacem4326|4326|MultiLineString|3|KO-BKO multisurfacem4326|4326|MultiPolygon|3|KO-BKO multisurfacem4326|4326|GeometryCollection|3|KO-BKO multisurfacem4326|4326|CircularString|3|KO-BKO multisurfacem4326|4326|CompoundCurve|3|KO-BKO multisurfacem4326|4326|CurvePolygon|3|KO-BKO multisurfacem4326|4326|MultiCurve|3|KO-BKO multisurfacem4326|4326|MultiSurface|3|KO-BKO multisurfacem4326|4326|PolyhedralSurface|3|KO-BKO multisurfacem4326|4326|Triangle|3|KO-BKO multisurfacem4326||COUNT|2| multisurfacez|0|Point|0|KO-BKO multisurfacez|0|LineString|0|KO-BKO multisurfacez|0|Polygon|0|KO-BKO multisurfacez|0|MultiPoint|0|KO-BKO multisurfacez|0|MultiLineString|0|KO-BKO multisurfacez|0|MultiPolygon|0|KO-BKO multisurfacez|0|GeometryCollection|0|KO-BKO multisurfacez|0|CircularString|0|KO-BKO multisurfacez|0|CompoundCurve|0|KO-BKO multisurfacez|0|CurvePolygon|0|KO-BKO multisurfacez|0|MultiCurve|0|KO-BKO multisurfacez|0|MultiSurface|0|KO-BKO multisurfacez|0|PolyhedralSurface|0|KO-BKO multisurfacez|0|Triangle|0|KO-BKO multisurfacez|0|Tin|0|KO-BKO multisurfacez|0|Point|2|KO-BKO multisurfacez|0|LineString|2|KO-BKO multisurfacez|0|Polygon|2|KO-BKO multisurfacez|0|MultiPoint|2|KO-BKO multisurfacez|0|MultiLineString|2|KO-BKO multisurfacez|0|MultiPolygon|2|KO-BKO multisurfacez|0|GeometryCollection|2|KO-BKO multisurfacez|0|CircularString|2|KO-BKO multisurfacez|0|CompoundCurve|2|KO-BKO multisurfacez|0|CurvePolygon|2|KO-BKO multisurfacez|0|MultiCurve|2|KO-BKO multisurfacez|0|MultiSurface|2|OK-BOK multisurfacez|0|PolyhedralSurface|2|KO-BKO multisurfacez|0|Triangle|2|KO-BKO multisurfacez|0|Point|1|KO-BKO multisurfacez|0|LineString|1|KO-BKO multisurfacez|0|Polygon|1|KO-BKO multisurfacez|0|MultiPoint|1|KO-BKO multisurfacez|0|MultiLineString|1|KO-BKO multisurfacez|0|MultiPolygon|1|KO-BKO multisurfacez|0|GeometryCollection|1|KO-BKO multisurfacez|0|CircularString|1|KO-BKO multisurfacez|0|CompoundCurve|1|KO-BKO multisurfacez|0|CurvePolygon|1|KO-BKO multisurfacez|0|MultiCurve|1|KO-BKO multisurfacez|0|MultiSurface|1|KO-BKO multisurfacez|0|PolyhedralSurface|1|KO-BKO multisurfacez|0|Triangle|1|KO-BKO multisurfacez|0|Point|3|KO-BKO multisurfacez|0|LineString|3|KO-BKO multisurfacez|0|Polygon|3|KO-BKO multisurfacez|0|MultiPoint|3|KO-BKO multisurfacez|0|MultiLineString|3|KO-BKO multisurfacez|0|MultiPolygon|3|KO-BKO multisurfacez|0|GeometryCollection|3|KO-BKO multisurfacez|0|CircularString|3|KO-BKO multisurfacez|0|CompoundCurve|3|KO-BKO multisurfacez|0|CurvePolygon|3|KO-BKO multisurfacez|0|MultiCurve|3|KO-BKO multisurfacez|0|MultiSurface|3|KO-BKO multisurfacez|0|PolyhedralSurface|3|KO-BKO multisurfacez|0|Triangle|3|KO-BKO multisurfacez|4326|Point|0|KO-BKO multisurfacez|4326|LineString|0|KO-BKO multisurfacez|4326|Polygon|0|KO-BKO multisurfacez|4326|MultiPoint|0|KO-BKO multisurfacez|4326|MultiLineString|0|KO-BKO multisurfacez|4326|MultiPolygon|0|KO-BKO multisurfacez|4326|GeometryCollection|0|KO-BKO multisurfacez|4326|CircularString|0|KO-BKO multisurfacez|4326|CompoundCurve|0|KO-BKO multisurfacez|4326|CurvePolygon|0|KO-BKO multisurfacez|4326|MultiCurve|0|KO-BKO multisurfacez|4326|MultiSurface|0|KO-BKO multisurfacez|4326|PolyhedralSurface|0|KO-BKO multisurfacez|4326|Triangle|0|KO-BKO multisurfacez|4326|Tin|0|KO-BKO multisurfacez|4326|Point|2|KO-BKO multisurfacez|4326|LineString|2|KO-BKO multisurfacez|4326|Polygon|2|KO-BKO multisurfacez|4326|MultiPoint|2|KO-BKO multisurfacez|4326|MultiLineString|2|KO-BKO multisurfacez|4326|MultiPolygon|2|KO-BKO multisurfacez|4326|GeometryCollection|2|KO-BKO multisurfacez|4326|CircularString|2|KO-BKO multisurfacez|4326|CompoundCurve|2|KO-BKO multisurfacez|4326|CurvePolygon|2|KO-BKO multisurfacez|4326|MultiCurve|2|KO-BKO multisurfacez|4326|MultiSurface|2|OK-BOK multisurfacez|4326|PolyhedralSurface|2|KO-BKO multisurfacez|4326|Triangle|2|KO-BKO multisurfacez|4326|Point|1|KO-BKO multisurfacez|4326|LineString|1|KO-BKO multisurfacez|4326|Polygon|1|KO-BKO multisurfacez|4326|MultiPoint|1|KO-BKO multisurfacez|4326|MultiLineString|1|KO-BKO multisurfacez|4326|MultiPolygon|1|KO-BKO multisurfacez|4326|GeometryCollection|1|KO-BKO multisurfacez|4326|CircularString|1|KO-BKO multisurfacez|4326|CompoundCurve|1|KO-BKO multisurfacez|4326|CurvePolygon|1|KO-BKO multisurfacez|4326|MultiCurve|1|KO-BKO multisurfacez|4326|MultiSurface|1|KO-BKO multisurfacez|4326|PolyhedralSurface|1|KO-BKO multisurfacez|4326|Triangle|1|KO-BKO multisurfacez|4326|Point|3|KO-BKO multisurfacez|4326|LineString|3|KO-BKO multisurfacez|4326|Polygon|3|KO-BKO multisurfacez|4326|MultiPoint|3|KO-BKO multisurfacez|4326|MultiLineString|3|KO-BKO multisurfacez|4326|MultiPolygon|3|KO-BKO multisurfacez|4326|GeometryCollection|3|KO-BKO multisurfacez|4326|CircularString|3|KO-BKO multisurfacez|4326|CompoundCurve|3|KO-BKO multisurfacez|4326|CurvePolygon|3|KO-BKO multisurfacez|4326|MultiCurve|3|KO-BKO multisurfacez|4326|MultiSurface|3|KO-BKO multisurfacez|4326|PolyhedralSurface|3|KO-BKO multisurfacez|4326|Triangle|3|KO-BKO multisurfacez||COUNT|4| multisurfacez0|0|Point|0|KO-BKO multisurfacez0|0|LineString|0|KO-BKO multisurfacez0|0|Polygon|0|KO-BKO multisurfacez0|0|MultiPoint|0|KO-BKO multisurfacez0|0|MultiLineString|0|KO-BKO multisurfacez0|0|MultiPolygon|0|KO-BKO multisurfacez0|0|GeometryCollection|0|KO-BKO multisurfacez0|0|CircularString|0|KO-BKO multisurfacez0|0|CompoundCurve|0|KO-BKO multisurfacez0|0|CurvePolygon|0|KO-BKO multisurfacez0|0|MultiCurve|0|KO-BKO multisurfacez0|0|MultiSurface|0|KO-BKO multisurfacez0|0|PolyhedralSurface|0|KO-BKO multisurfacez0|0|Triangle|0|KO-BKO multisurfacez0|0|Tin|0|KO-BKO multisurfacez0|0|Point|2|KO-BKO multisurfacez0|0|LineString|2|KO-BKO multisurfacez0|0|Polygon|2|KO-BKO multisurfacez0|0|MultiPoint|2|KO-BKO multisurfacez0|0|MultiLineString|2|KO-BKO multisurfacez0|0|MultiPolygon|2|KO-BKO multisurfacez0|0|GeometryCollection|2|KO-BKO multisurfacez0|0|CircularString|2|KO-BKO multisurfacez0|0|CompoundCurve|2|KO-BKO multisurfacez0|0|CurvePolygon|2|KO-BKO multisurfacez0|0|MultiCurve|2|KO-BKO multisurfacez0|0|MultiSurface|2|OK-BOK multisurfacez0|0|PolyhedralSurface|2|KO-BKO multisurfacez0|0|Triangle|2|KO-BKO multisurfacez0|0|Point|1|KO-BKO multisurfacez0|0|LineString|1|KO-BKO multisurfacez0|0|Polygon|1|KO-BKO multisurfacez0|0|MultiPoint|1|KO-BKO multisurfacez0|0|MultiLineString|1|KO-BKO multisurfacez0|0|MultiPolygon|1|KO-BKO multisurfacez0|0|GeometryCollection|1|KO-BKO multisurfacez0|0|CircularString|1|KO-BKO multisurfacez0|0|CompoundCurve|1|KO-BKO multisurfacez0|0|CurvePolygon|1|KO-BKO multisurfacez0|0|MultiCurve|1|KO-BKO multisurfacez0|0|MultiSurface|1|KO-BKO multisurfacez0|0|PolyhedralSurface|1|KO-BKO multisurfacez0|0|Triangle|1|KO-BKO multisurfacez0|0|Point|3|KO-BKO multisurfacez0|0|LineString|3|KO-BKO multisurfacez0|0|Polygon|3|KO-BKO multisurfacez0|0|MultiPoint|3|KO-BKO multisurfacez0|0|MultiLineString|3|KO-BKO multisurfacez0|0|MultiPolygon|3|KO-BKO multisurfacez0|0|GeometryCollection|3|KO-BKO multisurfacez0|0|CircularString|3|KO-BKO multisurfacez0|0|CompoundCurve|3|KO-BKO multisurfacez0|0|CurvePolygon|3|KO-BKO multisurfacez0|0|MultiCurve|3|KO-BKO multisurfacez0|0|MultiSurface|3|KO-BKO multisurfacez0|0|PolyhedralSurface|3|KO-BKO multisurfacez0|0|Triangle|3|KO-BKO multisurfacez0|4326|Point|0|KO-BKO multisurfacez0|4326|LineString|0|KO-BKO multisurfacez0|4326|Polygon|0|KO-BKO multisurfacez0|4326|MultiPoint|0|KO-BKO multisurfacez0|4326|MultiLineString|0|KO-BKO multisurfacez0|4326|MultiPolygon|0|KO-BKO multisurfacez0|4326|GeometryCollection|0|KO-BKO multisurfacez0|4326|CircularString|0|KO-BKO multisurfacez0|4326|CompoundCurve|0|KO-BKO multisurfacez0|4326|CurvePolygon|0|KO-BKO multisurfacez0|4326|MultiCurve|0|KO-BKO multisurfacez0|4326|MultiSurface|0|KO-BKO multisurfacez0|4326|PolyhedralSurface|0|KO-BKO multisurfacez0|4326|Triangle|0|KO-BKO multisurfacez0|4326|Tin|0|KO-BKO multisurfacez0|4326|Point|2|KO-BKO multisurfacez0|4326|LineString|2|KO-BKO multisurfacez0|4326|Polygon|2|KO-BKO multisurfacez0|4326|MultiPoint|2|KO-BKO multisurfacez0|4326|MultiLineString|2|KO-BKO multisurfacez0|4326|MultiPolygon|2|KO-BKO multisurfacez0|4326|GeometryCollection|2|KO-BKO multisurfacez0|4326|CircularString|2|KO-BKO multisurfacez0|4326|CompoundCurve|2|KO-BKO multisurfacez0|4326|CurvePolygon|2|KO-BKO multisurfacez0|4326|MultiCurve|2|KO-BKO multisurfacez0|4326|MultiSurface|2|OK-BOK multisurfacez0|4326|PolyhedralSurface|2|KO-BKO multisurfacez0|4326|Triangle|2|KO-BKO multisurfacez0|4326|Point|1|KO-BKO multisurfacez0|4326|LineString|1|KO-BKO multisurfacez0|4326|Polygon|1|KO-BKO multisurfacez0|4326|MultiPoint|1|KO-BKO multisurfacez0|4326|MultiLineString|1|KO-BKO multisurfacez0|4326|MultiPolygon|1|KO-BKO multisurfacez0|4326|GeometryCollection|1|KO-BKO multisurfacez0|4326|CircularString|1|KO-BKO multisurfacez0|4326|CompoundCurve|1|KO-BKO multisurfacez0|4326|CurvePolygon|1|KO-BKO multisurfacez0|4326|MultiCurve|1|KO-BKO multisurfacez0|4326|MultiSurface|1|KO-BKO multisurfacez0|4326|PolyhedralSurface|1|KO-BKO multisurfacez0|4326|Triangle|1|KO-BKO multisurfacez0|4326|Point|3|KO-BKO multisurfacez0|4326|LineString|3|KO-BKO multisurfacez0|4326|Polygon|3|KO-BKO multisurfacez0|4326|MultiPoint|3|KO-BKO multisurfacez0|4326|MultiLineString|3|KO-BKO multisurfacez0|4326|MultiPolygon|3|KO-BKO multisurfacez0|4326|GeometryCollection|3|KO-BKO multisurfacez0|4326|CircularString|3|KO-BKO multisurfacez0|4326|CompoundCurve|3|KO-BKO multisurfacez0|4326|CurvePolygon|3|KO-BKO multisurfacez0|4326|MultiCurve|3|KO-BKO multisurfacez0|4326|MultiSurface|3|KO-BKO multisurfacez0|4326|PolyhedralSurface|3|KO-BKO multisurfacez0|4326|Triangle|3|KO-BKO multisurfacez0||COUNT|4| multisurfacez4326|0|Point|0|KO-BKO multisurfacez4326|0|LineString|0|KO-BKO multisurfacez4326|0|Polygon|0|KO-BKO multisurfacez4326|0|MultiPoint|0|KO-BKO multisurfacez4326|0|MultiLineString|0|KO-BKO multisurfacez4326|0|MultiPolygon|0|KO-BKO multisurfacez4326|0|GeometryCollection|0|KO-BKO multisurfacez4326|0|CircularString|0|KO-BKO multisurfacez4326|0|CompoundCurve|0|KO-BKO multisurfacez4326|0|CurvePolygon|0|KO-BKO multisurfacez4326|0|MultiCurve|0|KO-BKO multisurfacez4326|0|MultiSurface|0|KO-BKO multisurfacez4326|0|PolyhedralSurface|0|KO-BKO multisurfacez4326|0|Triangle|0|KO-BKO multisurfacez4326|0|Tin|0|KO-BKO multisurfacez4326|0|Point|2|KO-BKO multisurfacez4326|0|LineString|2|KO-BKO multisurfacez4326|0|Polygon|2|KO-BKO multisurfacez4326|0|MultiPoint|2|KO-BKO multisurfacez4326|0|MultiLineString|2|KO-BKO multisurfacez4326|0|MultiPolygon|2|KO-BKO multisurfacez4326|0|GeometryCollection|2|KO-BKO multisurfacez4326|0|CircularString|2|KO-BKO multisurfacez4326|0|CompoundCurve|2|KO-BKO multisurfacez4326|0|CurvePolygon|2|KO-BKO multisurfacez4326|0|MultiCurve|2|KO-BKO multisurfacez4326|0|MultiSurface|2|KO-BKO multisurfacez4326|0|PolyhedralSurface|2|KO-BKO multisurfacez4326|0|Triangle|2|KO-BKO multisurfacez4326|0|Point|1|KO-BKO multisurfacez4326|0|LineString|1|KO-BKO multisurfacez4326|0|Polygon|1|KO-BKO multisurfacez4326|0|MultiPoint|1|KO-BKO multisurfacez4326|0|MultiLineString|1|KO-BKO multisurfacez4326|0|MultiPolygon|1|KO-BKO multisurfacez4326|0|GeometryCollection|1|KO-BKO multisurfacez4326|0|CircularString|1|KO-BKO multisurfacez4326|0|CompoundCurve|1|KO-BKO multisurfacez4326|0|CurvePolygon|1|KO-BKO multisurfacez4326|0|MultiCurve|1|KO-BKO multisurfacez4326|0|MultiSurface|1|KO-BKO multisurfacez4326|0|PolyhedralSurface|1|KO-BKO multisurfacez4326|0|Triangle|1|KO-BKO multisurfacez4326|0|Point|3|KO-BKO multisurfacez4326|0|LineString|3|KO-BKO multisurfacez4326|0|Polygon|3|KO-BKO multisurfacez4326|0|MultiPoint|3|KO-BKO multisurfacez4326|0|MultiLineString|3|KO-BKO multisurfacez4326|0|MultiPolygon|3|KO-BKO multisurfacez4326|0|GeometryCollection|3|KO-BKO multisurfacez4326|0|CircularString|3|KO-BKO multisurfacez4326|0|CompoundCurve|3|KO-BKO multisurfacez4326|0|CurvePolygon|3|KO-BKO multisurfacez4326|0|MultiCurve|3|KO-BKO multisurfacez4326|0|MultiSurface|3|KO-BKO multisurfacez4326|0|PolyhedralSurface|3|KO-BKO multisurfacez4326|0|Triangle|3|KO-BKO multisurfacez4326|4326|Point|0|KO-BKO multisurfacez4326|4326|LineString|0|KO-BKO multisurfacez4326|4326|Polygon|0|KO-BKO multisurfacez4326|4326|MultiPoint|0|KO-BKO multisurfacez4326|4326|MultiLineString|0|KO-BKO multisurfacez4326|4326|MultiPolygon|0|KO-BKO multisurfacez4326|4326|GeometryCollection|0|KO-BKO multisurfacez4326|4326|CircularString|0|KO-BKO multisurfacez4326|4326|CompoundCurve|0|KO-BKO multisurfacez4326|4326|CurvePolygon|0|KO-BKO multisurfacez4326|4326|MultiCurve|0|KO-BKO multisurfacez4326|4326|MultiSurface|0|KO-BKO multisurfacez4326|4326|PolyhedralSurface|0|KO-BKO multisurfacez4326|4326|Triangle|0|KO-BKO multisurfacez4326|4326|Tin|0|KO-BKO multisurfacez4326|4326|Point|2|KO-BKO multisurfacez4326|4326|LineString|2|KO-BKO multisurfacez4326|4326|Polygon|2|KO-BKO multisurfacez4326|4326|MultiPoint|2|KO-BKO multisurfacez4326|4326|MultiLineString|2|KO-BKO multisurfacez4326|4326|MultiPolygon|2|KO-BKO multisurfacez4326|4326|GeometryCollection|2|KO-BKO multisurfacez4326|4326|CircularString|2|KO-BKO multisurfacez4326|4326|CompoundCurve|2|KO-BKO multisurfacez4326|4326|CurvePolygon|2|KO-BKO multisurfacez4326|4326|MultiCurve|2|KO-BKO multisurfacez4326|4326|MultiSurface|2|OK-BOK multisurfacez4326|4326|PolyhedralSurface|2|KO-BKO multisurfacez4326|4326|Triangle|2|KO-BKO multisurfacez4326|4326|Point|1|KO-BKO multisurfacez4326|4326|LineString|1|KO-BKO multisurfacez4326|4326|Polygon|1|KO-BKO multisurfacez4326|4326|MultiPoint|1|KO-BKO multisurfacez4326|4326|MultiLineString|1|KO-BKO multisurfacez4326|4326|MultiPolygon|1|KO-BKO multisurfacez4326|4326|GeometryCollection|1|KO-BKO multisurfacez4326|4326|CircularString|1|KO-BKO multisurfacez4326|4326|CompoundCurve|1|KO-BKO multisurfacez4326|4326|CurvePolygon|1|KO-BKO multisurfacez4326|4326|MultiCurve|1|KO-BKO multisurfacez4326|4326|MultiSurface|1|KO-BKO multisurfacez4326|4326|PolyhedralSurface|1|KO-BKO multisurfacez4326|4326|Triangle|1|KO-BKO multisurfacez4326|4326|Point|3|KO-BKO multisurfacez4326|4326|LineString|3|KO-BKO multisurfacez4326|4326|Polygon|3|KO-BKO multisurfacez4326|4326|MultiPoint|3|KO-BKO multisurfacez4326|4326|MultiLineString|3|KO-BKO multisurfacez4326|4326|MultiPolygon|3|KO-BKO multisurfacez4326|4326|GeometryCollection|3|KO-BKO multisurfacez4326|4326|CircularString|3|KO-BKO multisurfacez4326|4326|CompoundCurve|3|KO-BKO multisurfacez4326|4326|CurvePolygon|3|KO-BKO multisurfacez4326|4326|MultiCurve|3|KO-BKO multisurfacez4326|4326|MultiSurface|3|KO-BKO multisurfacez4326|4326|PolyhedralSurface|3|KO-BKO multisurfacez4326|4326|Triangle|3|KO-BKO multisurfacez4326||COUNT|2| multisurfacezm|0|Point|0|KO-BKO multisurfacezm|0|LineString|0|KO-BKO multisurfacezm|0|Polygon|0|KO-BKO multisurfacezm|0|MultiPoint|0|KO-BKO multisurfacezm|0|MultiLineString|0|KO-BKO multisurfacezm|0|MultiPolygon|0|KO-BKO multisurfacezm|0|GeometryCollection|0|KO-BKO multisurfacezm|0|CircularString|0|KO-BKO multisurfacezm|0|CompoundCurve|0|KO-BKO multisurfacezm|0|CurvePolygon|0|KO-BKO multisurfacezm|0|MultiCurve|0|KO-BKO multisurfacezm|0|MultiSurface|0|KO-BKO multisurfacezm|0|PolyhedralSurface|0|KO-BKO multisurfacezm|0|Triangle|0|KO-BKO multisurfacezm|0|Tin|0|KO-BKO multisurfacezm|0|Point|2|KO-BKO multisurfacezm|0|LineString|2|KO-BKO multisurfacezm|0|Polygon|2|KO-BKO multisurfacezm|0|MultiPoint|2|KO-BKO multisurfacezm|0|MultiLineString|2|KO-BKO multisurfacezm|0|MultiPolygon|2|KO-BKO multisurfacezm|0|GeometryCollection|2|KO-BKO multisurfacezm|0|CircularString|2|KO-BKO multisurfacezm|0|CompoundCurve|2|KO-BKO multisurfacezm|0|CurvePolygon|2|KO-BKO multisurfacezm|0|MultiCurve|2|KO-BKO multisurfacezm|0|MultiSurface|2|KO-BKO multisurfacezm|0|PolyhedralSurface|2|KO-BKO multisurfacezm|0|Triangle|2|KO-BKO multisurfacezm|0|Point|1|KO-BKO multisurfacezm|0|LineString|1|KO-BKO multisurfacezm|0|Polygon|1|KO-BKO multisurfacezm|0|MultiPoint|1|KO-BKO multisurfacezm|0|MultiLineString|1|KO-BKO multisurfacezm|0|MultiPolygon|1|KO-BKO multisurfacezm|0|GeometryCollection|1|KO-BKO multisurfacezm|0|CircularString|1|KO-BKO multisurfacezm|0|CompoundCurve|1|KO-BKO multisurfacezm|0|CurvePolygon|1|KO-BKO multisurfacezm|0|MultiCurve|1|KO-BKO multisurfacezm|0|MultiSurface|1|KO-BKO multisurfacezm|0|PolyhedralSurface|1|KO-BKO multisurfacezm|0|Triangle|1|KO-BKO multisurfacezm|0|Point|3|KO-BKO multisurfacezm|0|LineString|3|KO-BKO multisurfacezm|0|Polygon|3|KO-BKO multisurfacezm|0|MultiPoint|3|KO-BKO multisurfacezm|0|MultiLineString|3|KO-BKO multisurfacezm|0|MultiPolygon|3|KO-BKO multisurfacezm|0|GeometryCollection|3|KO-BKO multisurfacezm|0|CircularString|3|KO-BKO multisurfacezm|0|CompoundCurve|3|KO-BKO multisurfacezm|0|CurvePolygon|3|KO-BKO multisurfacezm|0|MultiCurve|3|KO-BKO multisurfacezm|0|MultiSurface|3|OK-BOK multisurfacezm|0|PolyhedralSurface|3|KO-BKO multisurfacezm|0|Triangle|3|KO-BKO multisurfacezm|4326|Point|0|KO-BKO multisurfacezm|4326|LineString|0|KO-BKO multisurfacezm|4326|Polygon|0|KO-BKO multisurfacezm|4326|MultiPoint|0|KO-BKO multisurfacezm|4326|MultiLineString|0|KO-BKO multisurfacezm|4326|MultiPolygon|0|KO-BKO multisurfacezm|4326|GeometryCollection|0|KO-BKO multisurfacezm|4326|CircularString|0|KO-BKO multisurfacezm|4326|CompoundCurve|0|KO-BKO multisurfacezm|4326|CurvePolygon|0|KO-BKO multisurfacezm|4326|MultiCurve|0|KO-BKO multisurfacezm|4326|MultiSurface|0|KO-BKO multisurfacezm|4326|PolyhedralSurface|0|KO-BKO multisurfacezm|4326|Triangle|0|KO-BKO multisurfacezm|4326|Tin|0|KO-BKO multisurfacezm|4326|Point|2|KO-BKO multisurfacezm|4326|LineString|2|KO-BKO multisurfacezm|4326|Polygon|2|KO-BKO multisurfacezm|4326|MultiPoint|2|KO-BKO multisurfacezm|4326|MultiLineString|2|KO-BKO multisurfacezm|4326|MultiPolygon|2|KO-BKO multisurfacezm|4326|GeometryCollection|2|KO-BKO multisurfacezm|4326|CircularString|2|KO-BKO multisurfacezm|4326|CompoundCurve|2|KO-BKO multisurfacezm|4326|CurvePolygon|2|KO-BKO multisurfacezm|4326|MultiCurve|2|KO-BKO multisurfacezm|4326|MultiSurface|2|KO-BKO multisurfacezm|4326|PolyhedralSurface|2|KO-BKO multisurfacezm|4326|Triangle|2|KO-BKO multisurfacezm|4326|Point|1|KO-BKO multisurfacezm|4326|LineString|1|KO-BKO multisurfacezm|4326|Polygon|1|KO-BKO multisurfacezm|4326|MultiPoint|1|KO-BKO multisurfacezm|4326|MultiLineString|1|KO-BKO multisurfacezm|4326|MultiPolygon|1|KO-BKO multisurfacezm|4326|GeometryCollection|1|KO-BKO multisurfacezm|4326|CircularString|1|KO-BKO multisurfacezm|4326|CompoundCurve|1|KO-BKO multisurfacezm|4326|CurvePolygon|1|KO-BKO multisurfacezm|4326|MultiCurve|1|KO-BKO multisurfacezm|4326|MultiSurface|1|KO-BKO multisurfacezm|4326|PolyhedralSurface|1|KO-BKO multisurfacezm|4326|Triangle|1|KO-BKO multisurfacezm|4326|Point|3|KO-BKO multisurfacezm|4326|LineString|3|KO-BKO multisurfacezm|4326|Polygon|3|KO-BKO multisurfacezm|4326|MultiPoint|3|KO-BKO multisurfacezm|4326|MultiLineString|3|KO-BKO multisurfacezm|4326|MultiPolygon|3|KO-BKO multisurfacezm|4326|GeometryCollection|3|KO-BKO multisurfacezm|4326|CircularString|3|KO-BKO multisurfacezm|4326|CompoundCurve|3|KO-BKO multisurfacezm|4326|CurvePolygon|3|KO-BKO multisurfacezm|4326|MultiCurve|3|KO-BKO multisurfacezm|4326|MultiSurface|3|OK-BOK multisurfacezm|4326|PolyhedralSurface|3|KO-BKO multisurfacezm|4326|Triangle|3|KO-BKO multisurfacezm||COUNT|4| multisurfacezm0|0|Point|0|KO-BKO multisurfacezm0|0|LineString|0|KO-BKO multisurfacezm0|0|Polygon|0|KO-BKO multisurfacezm0|0|MultiPoint|0|KO-BKO multisurfacezm0|0|MultiLineString|0|KO-BKO multisurfacezm0|0|MultiPolygon|0|KO-BKO multisurfacezm0|0|GeometryCollection|0|KO-BKO multisurfacezm0|0|CircularString|0|KO-BKO multisurfacezm0|0|CompoundCurve|0|KO-BKO multisurfacezm0|0|CurvePolygon|0|KO-BKO multisurfacezm0|0|MultiCurve|0|KO-BKO multisurfacezm0|0|MultiSurface|0|KO-BKO multisurfacezm0|0|PolyhedralSurface|0|KO-BKO multisurfacezm0|0|Triangle|0|KO-BKO multisurfacezm0|0|Tin|0|KO-BKO multisurfacezm0|0|Point|2|KO-BKO multisurfacezm0|0|LineString|2|KO-BKO multisurfacezm0|0|Polygon|2|KO-BKO multisurfacezm0|0|MultiPoint|2|KO-BKO multisurfacezm0|0|MultiLineString|2|KO-BKO multisurfacezm0|0|MultiPolygon|2|KO-BKO multisurfacezm0|0|GeometryCollection|2|KO-BKO multisurfacezm0|0|CircularString|2|KO-BKO multisurfacezm0|0|CompoundCurve|2|KO-BKO multisurfacezm0|0|CurvePolygon|2|KO-BKO multisurfacezm0|0|MultiCurve|2|KO-BKO multisurfacezm0|0|MultiSurface|2|KO-BKO multisurfacezm0|0|PolyhedralSurface|2|KO-BKO multisurfacezm0|0|Triangle|2|KO-BKO multisurfacezm0|0|Point|1|KO-BKO multisurfacezm0|0|LineString|1|KO-BKO multisurfacezm0|0|Polygon|1|KO-BKO multisurfacezm0|0|MultiPoint|1|KO-BKO multisurfacezm0|0|MultiLineString|1|KO-BKO multisurfacezm0|0|MultiPolygon|1|KO-BKO multisurfacezm0|0|GeometryCollection|1|KO-BKO multisurfacezm0|0|CircularString|1|KO-BKO multisurfacezm0|0|CompoundCurve|1|KO-BKO multisurfacezm0|0|CurvePolygon|1|KO-BKO multisurfacezm0|0|MultiCurve|1|KO-BKO multisurfacezm0|0|MultiSurface|1|KO-BKO multisurfacezm0|0|PolyhedralSurface|1|KO-BKO multisurfacezm0|0|Triangle|1|KO-BKO multisurfacezm0|0|Point|3|KO-BKO multisurfacezm0|0|LineString|3|KO-BKO multisurfacezm0|0|Polygon|3|KO-BKO multisurfacezm0|0|MultiPoint|3|KO-BKO multisurfacezm0|0|MultiLineString|3|KO-BKO multisurfacezm0|0|MultiPolygon|3|KO-BKO multisurfacezm0|0|GeometryCollection|3|KO-BKO multisurfacezm0|0|CircularString|3|KO-BKO multisurfacezm0|0|CompoundCurve|3|KO-BKO multisurfacezm0|0|CurvePolygon|3|KO-BKO multisurfacezm0|0|MultiCurve|3|KO-BKO multisurfacezm0|0|MultiSurface|3|OK-BOK multisurfacezm0|0|PolyhedralSurface|3|KO-BKO multisurfacezm0|0|Triangle|3|KO-BKO multisurfacezm0|4326|Point|0|KO-BKO multisurfacezm0|4326|LineString|0|KO-BKO multisurfacezm0|4326|Polygon|0|KO-BKO multisurfacezm0|4326|MultiPoint|0|KO-BKO multisurfacezm0|4326|MultiLineString|0|KO-BKO multisurfacezm0|4326|MultiPolygon|0|KO-BKO multisurfacezm0|4326|GeometryCollection|0|KO-BKO multisurfacezm0|4326|CircularString|0|KO-BKO multisurfacezm0|4326|CompoundCurve|0|KO-BKO multisurfacezm0|4326|CurvePolygon|0|KO-BKO multisurfacezm0|4326|MultiCurve|0|KO-BKO multisurfacezm0|4326|MultiSurface|0|KO-BKO multisurfacezm0|4326|PolyhedralSurface|0|KO-BKO multisurfacezm0|4326|Triangle|0|KO-BKO multisurfacezm0|4326|Tin|0|KO-BKO multisurfacezm0|4326|Point|2|KO-BKO multisurfacezm0|4326|LineString|2|KO-BKO multisurfacezm0|4326|Polygon|2|KO-BKO multisurfacezm0|4326|MultiPoint|2|KO-BKO multisurfacezm0|4326|MultiLineString|2|KO-BKO multisurfacezm0|4326|MultiPolygon|2|KO-BKO multisurfacezm0|4326|GeometryCollection|2|KO-BKO multisurfacezm0|4326|CircularString|2|KO-BKO multisurfacezm0|4326|CompoundCurve|2|KO-BKO multisurfacezm0|4326|CurvePolygon|2|KO-BKO multisurfacezm0|4326|MultiCurve|2|KO-BKO multisurfacezm0|4326|MultiSurface|2|KO-BKO multisurfacezm0|4326|PolyhedralSurface|2|KO-BKO multisurfacezm0|4326|Triangle|2|KO-BKO multisurfacezm0|4326|Point|1|KO-BKO multisurfacezm0|4326|LineString|1|KO-BKO multisurfacezm0|4326|Polygon|1|KO-BKO multisurfacezm0|4326|MultiPoint|1|KO-BKO multisurfacezm0|4326|MultiLineString|1|KO-BKO multisurfacezm0|4326|MultiPolygon|1|KO-BKO multisurfacezm0|4326|GeometryCollection|1|KO-BKO multisurfacezm0|4326|CircularString|1|KO-BKO multisurfacezm0|4326|CompoundCurve|1|KO-BKO multisurfacezm0|4326|CurvePolygon|1|KO-BKO multisurfacezm0|4326|MultiCurve|1|KO-BKO multisurfacezm0|4326|MultiSurface|1|KO-BKO multisurfacezm0|4326|PolyhedralSurface|1|KO-BKO multisurfacezm0|4326|Triangle|1|KO-BKO multisurfacezm0|4326|Point|3|KO-BKO multisurfacezm0|4326|LineString|3|KO-BKO multisurfacezm0|4326|Polygon|3|KO-BKO multisurfacezm0|4326|MultiPoint|3|KO-BKO multisurfacezm0|4326|MultiLineString|3|KO-BKO multisurfacezm0|4326|MultiPolygon|3|KO-BKO multisurfacezm0|4326|GeometryCollection|3|KO-BKO multisurfacezm0|4326|CircularString|3|KO-BKO multisurfacezm0|4326|CompoundCurve|3|KO-BKO multisurfacezm0|4326|CurvePolygon|3|KO-BKO multisurfacezm0|4326|MultiCurve|3|KO-BKO multisurfacezm0|4326|MultiSurface|3|OK-BOK multisurfacezm0|4326|PolyhedralSurface|3|KO-BKO multisurfacezm0|4326|Triangle|3|KO-BKO multisurfacezm0||COUNT|4| multisurfacezm4326|0|Point|0|KO-BKO multisurfacezm4326|0|LineString|0|KO-BKO multisurfacezm4326|0|Polygon|0|KO-BKO multisurfacezm4326|0|MultiPoint|0|KO-BKO multisurfacezm4326|0|MultiLineString|0|KO-BKO multisurfacezm4326|0|MultiPolygon|0|KO-BKO multisurfacezm4326|0|GeometryCollection|0|KO-BKO multisurfacezm4326|0|CircularString|0|KO-BKO multisurfacezm4326|0|CompoundCurve|0|KO-BKO multisurfacezm4326|0|CurvePolygon|0|KO-BKO multisurfacezm4326|0|MultiCurve|0|KO-BKO multisurfacezm4326|0|MultiSurface|0|KO-BKO multisurfacezm4326|0|PolyhedralSurface|0|KO-BKO multisurfacezm4326|0|Triangle|0|KO-BKO multisurfacezm4326|0|Tin|0|KO-BKO multisurfacezm4326|0|Point|2|KO-BKO multisurfacezm4326|0|LineString|2|KO-BKO multisurfacezm4326|0|Polygon|2|KO-BKO multisurfacezm4326|0|MultiPoint|2|KO-BKO multisurfacezm4326|0|MultiLineString|2|KO-BKO multisurfacezm4326|0|MultiPolygon|2|KO-BKO multisurfacezm4326|0|GeometryCollection|2|KO-BKO multisurfacezm4326|0|CircularString|2|KO-BKO multisurfacezm4326|0|CompoundCurve|2|KO-BKO multisurfacezm4326|0|CurvePolygon|2|KO-BKO multisurfacezm4326|0|MultiCurve|2|KO-BKO multisurfacezm4326|0|MultiSurface|2|KO-BKO multisurfacezm4326|0|PolyhedralSurface|2|KO-BKO multisurfacezm4326|0|Triangle|2|KO-BKO multisurfacezm4326|0|Point|1|KO-BKO multisurfacezm4326|0|LineString|1|KO-BKO multisurfacezm4326|0|Polygon|1|KO-BKO multisurfacezm4326|0|MultiPoint|1|KO-BKO multisurfacezm4326|0|MultiLineString|1|KO-BKO multisurfacezm4326|0|MultiPolygon|1|KO-BKO multisurfacezm4326|0|GeometryCollection|1|KO-BKO multisurfacezm4326|0|CircularString|1|KO-BKO multisurfacezm4326|0|CompoundCurve|1|KO-BKO multisurfacezm4326|0|CurvePolygon|1|KO-BKO multisurfacezm4326|0|MultiCurve|1|KO-BKO multisurfacezm4326|0|MultiSurface|1|KO-BKO multisurfacezm4326|0|PolyhedralSurface|1|KO-BKO multisurfacezm4326|0|Triangle|1|KO-BKO multisurfacezm4326|0|Point|3|KO-BKO multisurfacezm4326|0|LineString|3|KO-BKO multisurfacezm4326|0|Polygon|3|KO-BKO multisurfacezm4326|0|MultiPoint|3|KO-BKO multisurfacezm4326|0|MultiLineString|3|KO-BKO multisurfacezm4326|0|MultiPolygon|3|KO-BKO multisurfacezm4326|0|GeometryCollection|3|KO-BKO multisurfacezm4326|0|CircularString|3|KO-BKO multisurfacezm4326|0|CompoundCurve|3|KO-BKO multisurfacezm4326|0|CurvePolygon|3|KO-BKO multisurfacezm4326|0|MultiCurve|3|KO-BKO multisurfacezm4326|0|MultiSurface|3|KO-BKO multisurfacezm4326|0|PolyhedralSurface|3|KO-BKO multisurfacezm4326|0|Triangle|3|KO-BKO multisurfacezm4326|4326|Point|0|KO-BKO multisurfacezm4326|4326|LineString|0|KO-BKO multisurfacezm4326|4326|Polygon|0|KO-BKO multisurfacezm4326|4326|MultiPoint|0|KO-BKO multisurfacezm4326|4326|MultiLineString|0|KO-BKO multisurfacezm4326|4326|MultiPolygon|0|KO-BKO multisurfacezm4326|4326|GeometryCollection|0|KO-BKO multisurfacezm4326|4326|CircularString|0|KO-BKO multisurfacezm4326|4326|CompoundCurve|0|KO-BKO multisurfacezm4326|4326|CurvePolygon|0|KO-BKO multisurfacezm4326|4326|MultiCurve|0|KO-BKO multisurfacezm4326|4326|MultiSurface|0|KO-BKO multisurfacezm4326|4326|PolyhedralSurface|0|KO-BKO multisurfacezm4326|4326|Triangle|0|KO-BKO multisurfacezm4326|4326|Tin|0|KO-BKO multisurfacezm4326|4326|Point|2|KO-BKO multisurfacezm4326|4326|LineString|2|KO-BKO multisurfacezm4326|4326|Polygon|2|KO-BKO multisurfacezm4326|4326|MultiPoint|2|KO-BKO multisurfacezm4326|4326|MultiLineString|2|KO-BKO multisurfacezm4326|4326|MultiPolygon|2|KO-BKO multisurfacezm4326|4326|GeometryCollection|2|KO-BKO multisurfacezm4326|4326|CircularString|2|KO-BKO multisurfacezm4326|4326|CompoundCurve|2|KO-BKO multisurfacezm4326|4326|CurvePolygon|2|KO-BKO multisurfacezm4326|4326|MultiCurve|2|KO-BKO multisurfacezm4326|4326|MultiSurface|2|KO-BKO multisurfacezm4326|4326|PolyhedralSurface|2|KO-BKO multisurfacezm4326|4326|Triangle|2|KO-BKO multisurfacezm4326|4326|Point|1|KO-BKO multisurfacezm4326|4326|LineString|1|KO-BKO multisurfacezm4326|4326|Polygon|1|KO-BKO multisurfacezm4326|4326|MultiPoint|1|KO-BKO multisurfacezm4326|4326|MultiLineString|1|KO-BKO multisurfacezm4326|4326|MultiPolygon|1|KO-BKO multisurfacezm4326|4326|GeometryCollection|1|KO-BKO multisurfacezm4326|4326|CircularString|1|KO-BKO multisurfacezm4326|4326|CompoundCurve|1|KO-BKO multisurfacezm4326|4326|CurvePolygon|1|KO-BKO multisurfacezm4326|4326|MultiCurve|1|KO-BKO multisurfacezm4326|4326|MultiSurface|1|KO-BKO multisurfacezm4326|4326|PolyhedralSurface|1|KO-BKO multisurfacezm4326|4326|Triangle|1|KO-BKO multisurfacezm4326|4326|Point|3|KO-BKO multisurfacezm4326|4326|LineString|3|KO-BKO multisurfacezm4326|4326|Polygon|3|KO-BKO multisurfacezm4326|4326|MultiPoint|3|KO-BKO multisurfacezm4326|4326|MultiLineString|3|KO-BKO multisurfacezm4326|4326|MultiPolygon|3|KO-BKO multisurfacezm4326|4326|GeometryCollection|3|KO-BKO multisurfacezm4326|4326|CircularString|3|KO-BKO multisurfacezm4326|4326|CompoundCurve|3|KO-BKO multisurfacezm4326|4326|CurvePolygon|3|KO-BKO multisurfacezm4326|4326|MultiCurve|3|KO-BKO multisurfacezm4326|4326|MultiSurface|3|OK-BOK multisurfacezm4326|4326|PolyhedralSurface|3|KO-BKO multisurfacezm4326|4326|Triangle|3|KO-BKO multisurfacezm4326||COUNT|2| point|0|Point|0|KO-BKO-GKO:-BGKO point|0|LineString|0|KO-BKO-GKO:-BGKO point|0|Polygon|0|KO-BKO-GKO:-BGKO point|0|MultiPoint|0|KO-BKO-GKO:-BGKO point|0|MultiLineString|0|KO-BKO-GKO:-BGKO point|0|MultiPolygon|0|KO-BKO-GKO:-BGKO point|0|GeometryCollection|0|KO-BKO-GKO:-BGKO point|0|CircularString|0|KO-BKO-GKO:-BGKO point|0|CompoundCurve|0|KO-BKO-GKO:-BGKO point|0|CurvePolygon|0|KO-BKO-GKO:-BGKO point|0|MultiCurve|0|KO-BKO-GKO:-BGKO point|0|MultiSurface|0|KO-BKO-GKO:-BGKO point|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO point|0|Triangle|0|KO-BKO-GKO:-BGKO point|0|Tin|0|KO-BKO-GKO:-BGKO point|0|Point|2|KO-BKO-GKO:-BGKO point|0|LineString|2|KO-BKO-GKO:-BGKO point|0|Polygon|2|KO-BKO-GKO:-BGKO point|0|MultiPoint|2|KO-BKO-GKO:-BGKO point|0|MultiLineString|2|KO-BKO-GKO:-BGKO point|0|MultiPolygon|2|KO-BKO-GKO:-BGKO point|0|GeometryCollection|2|KO-BKO-GKO:-BGKO point|0|CircularString|2|KO-BKO-GKO:-BGKO point|0|CompoundCurve|2|KO-BKO-GKO:-BGKO point|0|CurvePolygon|2|KO-BKO-GKO:-BGKO point|0|MultiCurve|2|KO-BKO-GKO:-BGKO point|0|MultiSurface|2|KO-BKO-GKO:-BGKO point|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO point|0|Triangle|2|KO-BKO-GKO:-BGKO point|0|Point|1|KO-BKO-GKO:-BGKO point|0|LineString|1|KO-BKO-GKO:-BGKO point|0|Polygon|1|KO-BKO-GKO:-BGKO point|0|MultiPoint|1|KO-BKO-GKO:-BGKO point|0|MultiLineString|1|KO-BKO-GKO:-BGKO point|0|MultiPolygon|1|KO-BKO-GKO:-BGKO point|0|GeometryCollection|1|KO-BKO-GKO:-BGKO point|0|CircularString|1|KO-BKO-GKO:-BGKO point|0|CompoundCurve|1|KO-BKO-GKO:-BGKO point|0|CurvePolygon|1|KO-BKO-GKO:-BGKO point|0|MultiCurve|1|KO-BKO-GKO:-BGKO point|0|MultiSurface|1|KO-BKO-GKO:-BGKO point|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO point|0|Triangle|1|KO-BKO-GKO:-BGKO point|0|Point|3|KO-BKO-GKO:-BGKO point|0|LineString|3|KO-BKO-GKO:-BGKO point|0|Polygon|3|KO-BKO-GKO:-BGKO point|0|MultiPoint|3|KO-BKO-GKO:-BGKO point|0|MultiLineString|3|KO-BKO-GKO:-BGKO point|0|MultiPolygon|3|KO-BKO-GKO:-BGKO point|0|GeometryCollection|3|KO-BKO-GKO:-BGKO point|0|CircularString|3|KO-BKO-GKO:-BGKO point|0|CompoundCurve|3|KO-BKO-GKO:-BGKO point|0|CurvePolygon|3|KO-BKO-GKO:-BGKO point|0|MultiCurve|3|KO-BKO-GKO:-BGKO point|0|MultiSurface|3|KO-BKO-GKO:-BGKO point|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO point|0|Triangle|3|KO-BKO-GKO:-BGKO point|4326|Point|0|KO-BKO-GKO:-BGKO point|4326|LineString|0|KO-BKO-GKO:-BGKO point|4326|Polygon|0|KO-BKO-GKO:-BGKO point|4326|MultiPoint|0|KO-BKO-GKO:-BGKO point|4326|MultiLineString|0|KO-BKO-GKO:-BGKO point|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO point|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO point|4326|CircularString|0|KO-BKO-GKO:-BGKO point|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO point|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO point|4326|MultiCurve|0|KO-BKO-GKO:-BGKO point|4326|MultiSurface|0|KO-BKO-GKO:-BGKO point|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO point|4326|Triangle|0|KO-BKO-GKO:-BGKO point|4326|Tin|0|KO-BKO-GKO:-BGKO point|4326|Point|2|KO-BKO-GKO:-BGKO point|4326|LineString|2|KO-BKO-GKO:-BGKO point|4326|Polygon|2|KO-BKO-GKO:-BGKO point|4326|MultiPoint|2|KO-BKO-GKO:-BGKO point|4326|MultiLineString|2|KO-BKO-GKO:-BGKO point|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO point|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO point|4326|CircularString|2|KO-BKO-GKO:-BGKO point|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO point|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO point|4326|MultiCurve|2|KO-BKO-GKO:-BGKO point|4326|MultiSurface|2|KO-BKO-GKO:-BGKO point|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO point|4326|Triangle|2|KO-BKO-GKO:-BGKO point|4326|Point|1|KO-BKO-GKO:-BGKO point|4326|LineString|1|KO-BKO-GKO:-BGKO point|4326|Polygon|1|KO-BKO-GKO:-BGKO point|4326|MultiPoint|1|KO-BKO-GKO:-BGKO point|4326|MultiLineString|1|KO-BKO-GKO:-BGKO point|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO point|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO point|4326|CircularString|1|KO-BKO-GKO:-BGKO point|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO point|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO point|4326|MultiCurve|1|KO-BKO-GKO:-BGKO point|4326|MultiSurface|1|KO-BKO-GKO:-BGKO point|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO point|4326|Triangle|1|KO-BKO-GKO:-BGKO point|4326|Point|3|KO-BKO-GKO:-BGKO point|4326|LineString|3|KO-BKO-GKO:-BGKO point|4326|Polygon|3|KO-BKO-GKO:-BGKO point|4326|MultiPoint|3|KO-BKO-GKO:-BGKO point|4326|MultiLineString|3|KO-BKO-GKO:-BGKO point|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO point|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO point|4326|CircularString|3|KO-BKO-GKO:-BGKO point|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO point|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO point|4326|MultiCurve|3|KO-BKO-GKO:-BGKO point|4326|MultiSurface|3|KO-BKO-GKO:-BGKO point|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO point|4326|Triangle|3|KO-BKO-GKO:-BGKO point||COUNT|0| point||GCOUNT|0| point0|0|Point|0|KO-BKO-GKO:-BGKO point0|0|LineString|0|KO-BKO-GKO:-BGKO point0|0|Polygon|0|KO-BKO-GKO:-BGKO point0|0|MultiPoint|0|KO-BKO-GKO:-BGKO point0|0|MultiLineString|0|KO-BKO-GKO:-BGKO point0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO point0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO point0|0|CircularString|0|KO-BKO-GKO:-BGKO point0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO point0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO point0|0|MultiCurve|0|KO-BKO-GKO:-BGKO point0|0|MultiSurface|0|KO-BKO-GKO:-BGKO point0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO point0|0|Triangle|0|KO-BKO-GKO:-BGKO point0|0|Tin|0|KO-BKO-GKO:-BGKO point0|0|Point|2|KO-BKO-GKO:-BGKO point0|0|LineString|2|KO-BKO-GKO:-BGKO point0|0|Polygon|2|KO-BKO-GKO:-BGKO point0|0|MultiPoint|2|KO-BKO-GKO:-BGKO point0|0|MultiLineString|2|KO-BKO-GKO:-BGKO point0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO point0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO point0|0|CircularString|2|KO-BKO-GKO:-BGKO point0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO point0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO point0|0|MultiCurve|2|KO-BKO-GKO:-BGKO point0|0|MultiSurface|2|KO-BKO-GKO:-BGKO point0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO point0|0|Triangle|2|KO-BKO-GKO:-BGKO point0|0|Point|1|KO-BKO-GKO:-BGKO point0|0|LineString|1|KO-BKO-GKO:-BGKO point0|0|Polygon|1|KO-BKO-GKO:-BGKO point0|0|MultiPoint|1|KO-BKO-GKO:-BGKO point0|0|MultiLineString|1|KO-BKO-GKO:-BGKO point0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO point0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO point0|0|CircularString|1|KO-BKO-GKO:-BGKO point0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO point0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO point0|0|MultiCurve|1|KO-BKO-GKO:-BGKO point0|0|MultiSurface|1|KO-BKO-GKO:-BGKO point0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO point0|0|Triangle|1|KO-BKO-GKO:-BGKO point0|0|Point|3|KO-BKO-GKO:-BGKO point0|0|LineString|3|KO-BKO-GKO:-BGKO point0|0|Polygon|3|KO-BKO-GKO:-BGKO point0|0|MultiPoint|3|KO-BKO-GKO:-BGKO point0|0|MultiLineString|3|KO-BKO-GKO:-BGKO point0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO point0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO point0|0|CircularString|3|KO-BKO-GKO:-BGKO point0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO point0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO point0|0|MultiCurve|3|KO-BKO-GKO:-BGKO point0|0|MultiSurface|3|KO-BKO-GKO:-BGKO point0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO point0|0|Triangle|3|KO-BKO-GKO:-BGKO point0|4326|Point|0|KO-BKO-GKO:-BGKO point0|4326|LineString|0|KO-BKO-GKO:-BGKO point0|4326|Polygon|0|KO-BKO-GKO:-BGKO point0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO point0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO point0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO point0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO point0|4326|CircularString|0|KO-BKO-GKO:-BGKO point0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO point0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO point0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO point0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO point0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO point0|4326|Triangle|0|KO-BKO-GKO:-BGKO point0|4326|Tin|0|KO-BKO-GKO:-BGKO point0|4326|Point|2|KO-BKO-GKO:-BGKO point0|4326|LineString|2|KO-BKO-GKO:-BGKO point0|4326|Polygon|2|KO-BKO-GKO:-BGKO point0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO point0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO point0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO point0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO point0|4326|CircularString|2|KO-BKO-GKO:-BGKO point0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO point0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO point0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO point0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO point0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO point0|4326|Triangle|2|KO-BKO-GKO:-BGKO point0|4326|Point|1|KO-BKO-GKO:-BGKO point0|4326|LineString|1|KO-BKO-GKO:-BGKO point0|4326|Polygon|1|KO-BKO-GKO:-BGKO point0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO point0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO point0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO point0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO point0|4326|CircularString|1|KO-BKO-GKO:-BGKO point0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO point0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO point0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO point0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO point0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO point0|4326|Triangle|1|KO-BKO-GKO:-BGKO point0|4326|Point|3|KO-BKO-GKO:-BGKO point0|4326|LineString|3|KO-BKO-GKO:-BGKO point0|4326|Polygon|3|KO-BKO-GKO:-BGKO point0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO point0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO point0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO point0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO point0|4326|CircularString|3|KO-BKO-GKO:-BGKO point0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO point0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO point0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO point0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO point0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO point0|4326|Triangle|3|KO-BKO-GKO:-BGKO point0||COUNT|0| point0||GCOUNT|0| point4326|0|Point|0|KO-BKO-GKO:-BGKO point4326|0|LineString|0|KO-BKO-GKO:-BGKO point4326|0|Polygon|0|KO-BKO-GKO:-BGKO point4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO point4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO point4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO point4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO point4326|0|CircularString|0|KO-BKO-GKO:-BGKO point4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO point4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO point4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO point4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO point4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO point4326|0|Triangle|0|KO-BKO-GKO:-BGKO point4326|0|Tin|0|KO-BKO-GKO:-BGKO point4326|0|Point|2|KO-BKO-GKO:-BGKO point4326|0|LineString|2|KO-BKO-GKO:-BGKO point4326|0|Polygon|2|KO-BKO-GKO:-BGKO point4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO point4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO point4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO point4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO point4326|0|CircularString|2|KO-BKO-GKO:-BGKO point4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO point4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO point4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO point4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO point4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO point4326|0|Triangle|2|KO-BKO-GKO:-BGKO point4326|0|Point|1|KO-BKO-GKO:-BGKO point4326|0|LineString|1|KO-BKO-GKO:-BGKO point4326|0|Polygon|1|KO-BKO-GKO:-BGKO point4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO point4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO point4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO point4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO point4326|0|CircularString|1|KO-BKO-GKO:-BGKO point4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO point4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO point4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO point4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO point4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO point4326|0|Triangle|1|KO-BKO-GKO:-BGKO point4326|0|Point|3|KO-BKO-GKO:-BGKO point4326|0|LineString|3|KO-BKO-GKO:-BGKO point4326|0|Polygon|3|KO-BKO-GKO:-BGKO point4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO point4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO point4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO point4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO point4326|0|CircularString|3|KO-BKO-GKO:-BGKO point4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO point4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO point4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO point4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO point4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO point4326|0|Triangle|3|KO-BKO-GKO:-BGKO point4326|4326|Point|0|KO-BKO-GKO:-BGKO point4326|4326|LineString|0|KO-BKO-GKO:-BGKO point4326|4326|Polygon|0|KO-BKO-GKO:-BGKO point4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO point4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO point4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO point4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO point4326|4326|CircularString|0|KO-BKO-GKO:-BGKO point4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO point4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO point4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO point4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO point4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO point4326|4326|Triangle|0|KO-BKO-GKO:-BGKO point4326|4326|Tin|0|KO-BKO-GKO:-BGKO point4326|4326|Point|2|KO-BKO-GKO:-BGKO point4326|4326|LineString|2|KO-BKO-GKO:-BGKO point4326|4326|Polygon|2|KO-BKO-GKO:-BGKO point4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO point4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO point4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO point4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO point4326|4326|CircularString|2|KO-BKO-GKO:-BGKO point4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO point4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO point4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO point4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO point4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO point4326|4326|Triangle|2|KO-BKO-GKO:-BGKO point4326|4326|Point|1|KO-BKO-GKO:-BGKO point4326|4326|LineString|1|KO-BKO-GKO:-BGKO point4326|4326|Polygon|1|KO-BKO-GKO:-BGKO point4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO point4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO point4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO point4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO point4326|4326|CircularString|1|KO-BKO-GKO:-BGKO point4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO point4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO point4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO point4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO point4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO point4326|4326|Triangle|1|KO-BKO-GKO:-BGKO point4326|4326|Point|3|KO-BKO-GKO:-BGKO point4326|4326|LineString|3|KO-BKO-GKO:-BGKO point4326|4326|Polygon|3|KO-BKO-GKO:-BGKO point4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO point4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO point4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO point4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO point4326|4326|CircularString|3|KO-BKO-GKO:-BGKO point4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO point4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO point4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO point4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO point4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO point4326|4326|Triangle|3|KO-BKO-GKO:-BGKO point4326||COUNT|0| point4326||GCOUNT|0| pointm|0|Point|0|KO-BKO-GKO:-BGKO pointm|0|LineString|0|KO-BKO-GKO:-BGKO pointm|0|Polygon|0|KO-BKO-GKO:-BGKO pointm|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointm|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointm|0|CircularString|0|KO-BKO-GKO:-BGKO pointm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointm|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointm|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointm|0|Triangle|0|KO-BKO-GKO:-BGKO pointm|0|Tin|0|KO-BKO-GKO:-BGKO pointm|0|Point|2|KO-BKO-GKO:-BGKO pointm|0|LineString|2|KO-BKO-GKO:-BGKO pointm|0|Polygon|2|KO-BKO-GKO:-BGKO pointm|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointm|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointm|0|CircularString|2|KO-BKO-GKO:-BGKO pointm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointm|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointm|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointm|0|Triangle|2|KO-BKO-GKO:-BGKO pointm|0|Point|1|KO-BKO-GKO:-BGKO pointm|0|LineString|1|KO-BKO-GKO:-BGKO pointm|0|Polygon|1|KO-BKO-GKO:-BGKO pointm|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointm|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointm|0|CircularString|1|KO-BKO-GKO:-BGKO pointm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointm|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointm|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointm|0|Triangle|1|KO-BKO-GKO:-BGKO pointm|0|Point|3|KO-BKO-GKO:-BGKO pointm|0|LineString|3|KO-BKO-GKO:-BGKO pointm|0|Polygon|3|KO-BKO-GKO:-BGKO pointm|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointm|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointm|0|CircularString|3|KO-BKO-GKO:-BGKO pointm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointm|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointm|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointm|0|Triangle|3|KO-BKO-GKO:-BGKO pointm|4326|Point|0|KO-BKO-GKO:-BGKO pointm|4326|LineString|0|KO-BKO-GKO:-BGKO pointm|4326|Polygon|0|KO-BKO-GKO:-BGKO pointm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointm|4326|CircularString|0|KO-BKO-GKO:-BGKO pointm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointm|4326|Triangle|0|KO-BKO-GKO:-BGKO pointm|4326|Tin|0|KO-BKO-GKO:-BGKO pointm|4326|Point|2|KO-BKO-GKO:-BGKO pointm|4326|LineString|2|KO-BKO-GKO:-BGKO pointm|4326|Polygon|2|KO-BKO-GKO:-BGKO pointm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointm|4326|CircularString|2|KO-BKO-GKO:-BGKO pointm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointm|4326|Triangle|2|KO-BKO-GKO:-BGKO pointm|4326|Point|1|KO-BKO-GKO:-BGKO pointm|4326|LineString|1|KO-BKO-GKO:-BGKO pointm|4326|Polygon|1|KO-BKO-GKO:-BGKO pointm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointm|4326|CircularString|1|KO-BKO-GKO:-BGKO pointm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointm|4326|Triangle|1|KO-BKO-GKO:-BGKO pointm|4326|Point|3|KO-BKO-GKO:-BGKO pointm|4326|LineString|3|KO-BKO-GKO:-BGKO pointm|4326|Polygon|3|KO-BKO-GKO:-BGKO pointm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointm|4326|CircularString|3|KO-BKO-GKO:-BGKO pointm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointm|4326|Triangle|3|KO-BKO-GKO:-BGKO pointm||COUNT|0| pointm||GCOUNT|0| pointm0|0|Point|0|KO-BKO-GKO:-BGKO pointm0|0|LineString|0|KO-BKO-GKO:-BGKO pointm0|0|Polygon|0|KO-BKO-GKO:-BGKO pointm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointm0|0|CircularString|0|KO-BKO-GKO:-BGKO pointm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointm0|0|Triangle|0|KO-BKO-GKO:-BGKO pointm0|0|Tin|0|KO-BKO-GKO:-BGKO pointm0|0|Point|2|KO-BKO-GKO:-BGKO pointm0|0|LineString|2|KO-BKO-GKO:-BGKO pointm0|0|Polygon|2|KO-BKO-GKO:-BGKO pointm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointm0|0|CircularString|2|KO-BKO-GKO:-BGKO pointm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointm0|0|Triangle|2|KO-BKO-GKO:-BGKO pointm0|0|Point|1|KO-BKO-GKO:-BGKO pointm0|0|LineString|1|KO-BKO-GKO:-BGKO pointm0|0|Polygon|1|KO-BKO-GKO:-BGKO pointm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointm0|0|CircularString|1|KO-BKO-GKO:-BGKO pointm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointm0|0|Triangle|1|KO-BKO-GKO:-BGKO pointm0|0|Point|3|KO-BKO-GKO:-BGKO pointm0|0|LineString|3|KO-BKO-GKO:-BGKO pointm0|0|Polygon|3|KO-BKO-GKO:-BGKO pointm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointm0|0|CircularString|3|KO-BKO-GKO:-BGKO pointm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointm0|0|Triangle|3|KO-BKO-GKO:-BGKO pointm0|4326|Point|0|KO-BKO-GKO:-BGKO pointm0|4326|LineString|0|KO-BKO-GKO:-BGKO pointm0|4326|Polygon|0|KO-BKO-GKO:-BGKO pointm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointm0|4326|CircularString|0|KO-BKO-GKO:-BGKO pointm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointm0|4326|Triangle|0|KO-BKO-GKO:-BGKO pointm0|4326|Tin|0|KO-BKO-GKO:-BGKO pointm0|4326|Point|2|KO-BKO-GKO:-BGKO pointm0|4326|LineString|2|KO-BKO-GKO:-BGKO pointm0|4326|Polygon|2|KO-BKO-GKO:-BGKO pointm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointm0|4326|CircularString|2|KO-BKO-GKO:-BGKO pointm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointm0|4326|Triangle|2|KO-BKO-GKO:-BGKO pointm0|4326|Point|1|KO-BKO-GKO:-BGKO pointm0|4326|LineString|1|KO-BKO-GKO:-BGKO pointm0|4326|Polygon|1|KO-BKO-GKO:-BGKO pointm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointm0|4326|CircularString|1|KO-BKO-GKO:-BGKO pointm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointm0|4326|Triangle|1|KO-BKO-GKO:-BGKO pointm0|4326|Point|3|KO-BKO-GKO:-BGKO pointm0|4326|LineString|3|KO-BKO-GKO:-BGKO pointm0|4326|Polygon|3|KO-BKO-GKO:-BGKO pointm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointm0|4326|CircularString|3|KO-BKO-GKO:-BGKO pointm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointm0|4326|Triangle|3|KO-BKO-GKO:-BGKO pointm0||COUNT|0| pointm0||GCOUNT|0| pointm4326|0|Point|0|KO-BKO-GKO:-BGKO pointm4326|0|LineString|0|KO-BKO-GKO:-BGKO pointm4326|0|Polygon|0|KO-BKO-GKO:-BGKO pointm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointm4326|0|CircularString|0|KO-BKO-GKO:-BGKO pointm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointm4326|0|Triangle|0|KO-BKO-GKO:-BGKO pointm4326|0|Tin|0|KO-BKO-GKO:-BGKO pointm4326|0|Point|2|KO-BKO-GKO:-BGKO pointm4326|0|LineString|2|KO-BKO-GKO:-BGKO pointm4326|0|Polygon|2|KO-BKO-GKO:-BGKO pointm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointm4326|0|CircularString|2|KO-BKO-GKO:-BGKO pointm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointm4326|0|Triangle|2|KO-BKO-GKO:-BGKO pointm4326|0|Point|1|KO-BKO-GKO:-BGKO pointm4326|0|LineString|1|KO-BKO-GKO:-BGKO pointm4326|0|Polygon|1|KO-BKO-GKO:-BGKO pointm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointm4326|0|CircularString|1|KO-BKO-GKO:-BGKO pointm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointm4326|0|Triangle|1|KO-BKO-GKO:-BGKO pointm4326|0|Point|3|KO-BKO-GKO:-BGKO pointm4326|0|LineString|3|KO-BKO-GKO:-BGKO pointm4326|0|Polygon|3|KO-BKO-GKO:-BGKO pointm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointm4326|0|CircularString|3|KO-BKO-GKO:-BGKO pointm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointm4326|0|Triangle|3|KO-BKO-GKO:-BGKO pointm4326|4326|Point|0|KO-BKO-GKO:-BGKO pointm4326|4326|LineString|0|KO-BKO-GKO:-BGKO pointm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO pointm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO pointm4326|4326|Tin|0|KO-BKO-GKO:-BGKO pointm4326|4326|Point|2|KO-BKO-GKO:-BGKO pointm4326|4326|LineString|2|KO-BKO-GKO:-BGKO pointm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO pointm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO pointm4326|4326|Point|1|KO-BKO-GKO:-BGKO pointm4326|4326|LineString|1|KO-BKO-GKO:-BGKO pointm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO pointm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO pointm4326|4326|Point|3|KO-BKO-GKO:-BGKO pointm4326|4326|LineString|3|KO-BKO-GKO:-BGKO pointm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO pointm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO pointm4326||COUNT|0| pointm4326||GCOUNT|0| pointz|0|Point|0|KO-BKO-GKO:-BGKO pointz|0|LineString|0|KO-BKO-GKO:-BGKO pointz|0|Polygon|0|KO-BKO-GKO:-BGKO pointz|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointz|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointz|0|CircularString|0|KO-BKO-GKO:-BGKO pointz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointz|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointz|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointz|0|Triangle|0|KO-BKO-GKO:-BGKO pointz|0|Tin|0|KO-BKO-GKO:-BGKO pointz|0|Point|2|KO-BKO-GKO:-BGKO pointz|0|LineString|2|KO-BKO-GKO:-BGKO pointz|0|Polygon|2|KO-BKO-GKO:-BGKO pointz|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointz|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointz|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointz|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointz|0|CircularString|2|KO-BKO-GKO:-BGKO pointz|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointz|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointz|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointz|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointz|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointz|0|Triangle|2|KO-BKO-GKO:-BGKO pointz|0|Point|1|KO-BKO-GKO:-BGKO pointz|0|LineString|1|KO-BKO-GKO:-BGKO pointz|0|Polygon|1|KO-BKO-GKO:-BGKO pointz|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointz|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointz|0|CircularString|1|KO-BKO-GKO:-BGKO pointz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointz|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointz|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointz|0|Triangle|1|KO-BKO-GKO:-BGKO pointz|0|Point|3|KO-BKO-GKO:-BGKO pointz|0|LineString|3|KO-BKO-GKO:-BGKO pointz|0|Polygon|3|KO-BKO-GKO:-BGKO pointz|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointz|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointz|0|CircularString|3|KO-BKO-GKO:-BGKO pointz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointz|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointz|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointz|0|Triangle|3|KO-BKO-GKO:-BGKO pointz|4326|Point|0|KO-BKO-GKO:-BGKO pointz|4326|LineString|0|KO-BKO-GKO:-BGKO pointz|4326|Polygon|0|KO-BKO-GKO:-BGKO pointz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointz|4326|CircularString|0|KO-BKO-GKO:-BGKO pointz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointz|4326|Triangle|0|KO-BKO-GKO:-BGKO pointz|4326|Tin|0|KO-BKO-GKO:-BGKO pointz|4326|Point|2|KO-BKO-GKO:-BGKO pointz|4326|LineString|2|KO-BKO-GKO:-BGKO pointz|4326|Polygon|2|KO-BKO-GKO:-BGKO pointz|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointz|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointz|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointz|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointz|4326|CircularString|2|KO-BKO-GKO:-BGKO pointz|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointz|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointz|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointz|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointz|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointz|4326|Triangle|2|KO-BKO-GKO:-BGKO pointz|4326|Point|1|KO-BKO-GKO:-BGKO pointz|4326|LineString|1|KO-BKO-GKO:-BGKO pointz|4326|Polygon|1|KO-BKO-GKO:-BGKO pointz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointz|4326|CircularString|1|KO-BKO-GKO:-BGKO pointz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointz|4326|Triangle|1|KO-BKO-GKO:-BGKO pointz|4326|Point|3|KO-BKO-GKO:-BGKO pointz|4326|LineString|3|KO-BKO-GKO:-BGKO pointz|4326|Polygon|3|KO-BKO-GKO:-BGKO pointz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointz|4326|CircularString|3|KO-BKO-GKO:-BGKO pointz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointz|4326|Triangle|3|KO-BKO-GKO:-BGKO pointz||COUNT|0| pointz||GCOUNT|0| pointz0|0|Point|0|KO-BKO-GKO:-BGKO pointz0|0|LineString|0|KO-BKO-GKO:-BGKO pointz0|0|Polygon|0|KO-BKO-GKO:-BGKO pointz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointz0|0|CircularString|0|KO-BKO-GKO:-BGKO pointz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointz0|0|Triangle|0|KO-BKO-GKO:-BGKO pointz0|0|Tin|0|KO-BKO-GKO:-BGKO pointz0|0|Point|2|KO-BKO-GKO:-BGKO pointz0|0|LineString|2|KO-BKO-GKO:-BGKO pointz0|0|Polygon|2|KO-BKO-GKO:-BGKO pointz0|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointz0|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointz0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointz0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointz0|0|CircularString|2|KO-BKO-GKO:-BGKO pointz0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointz0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointz0|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointz0|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointz0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointz0|0|Triangle|2|KO-BKO-GKO:-BGKO pointz0|0|Point|1|KO-BKO-GKO:-BGKO pointz0|0|LineString|1|KO-BKO-GKO:-BGKO pointz0|0|Polygon|1|KO-BKO-GKO:-BGKO pointz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointz0|0|CircularString|1|KO-BKO-GKO:-BGKO pointz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointz0|0|Triangle|1|KO-BKO-GKO:-BGKO pointz0|0|Point|3|KO-BKO-GKO:-BGKO pointz0|0|LineString|3|KO-BKO-GKO:-BGKO pointz0|0|Polygon|3|KO-BKO-GKO:-BGKO pointz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointz0|0|CircularString|3|KO-BKO-GKO:-BGKO pointz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointz0|0|Triangle|3|KO-BKO-GKO:-BGKO pointz0|4326|Point|0|KO-BKO-GKO:-BGKO pointz0|4326|LineString|0|KO-BKO-GKO:-BGKO pointz0|4326|Polygon|0|KO-BKO-GKO:-BGKO pointz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointz0|4326|CircularString|0|KO-BKO-GKO:-BGKO pointz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointz0|4326|Triangle|0|KO-BKO-GKO:-BGKO pointz0|4326|Tin|0|KO-BKO-GKO:-BGKO pointz0|4326|Point|2|KO-BKO-GKO:-BGKO pointz0|4326|LineString|2|KO-BKO-GKO:-BGKO pointz0|4326|Polygon|2|KO-BKO-GKO:-BGKO pointz0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointz0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointz0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointz0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointz0|4326|CircularString|2|KO-BKO-GKO:-BGKO pointz0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointz0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointz0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointz0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointz0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointz0|4326|Triangle|2|KO-BKO-GKO:-BGKO pointz0|4326|Point|1|KO-BKO-GKO:-BGKO pointz0|4326|LineString|1|KO-BKO-GKO:-BGKO pointz0|4326|Polygon|1|KO-BKO-GKO:-BGKO pointz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointz0|4326|CircularString|1|KO-BKO-GKO:-BGKO pointz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointz0|4326|Triangle|1|KO-BKO-GKO:-BGKO pointz0|4326|Point|3|KO-BKO-GKO:-BGKO pointz0|4326|LineString|3|KO-BKO-GKO:-BGKO pointz0|4326|Polygon|3|KO-BKO-GKO:-BGKO pointz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointz0|4326|CircularString|3|KO-BKO-GKO:-BGKO pointz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointz0|4326|Triangle|3|KO-BKO-GKO:-BGKO pointz0||COUNT|0| pointz0||GCOUNT|0| pointz4326|0|Point|0|KO-BKO-GKO:-BGKO pointz4326|0|LineString|0|KO-BKO-GKO:-BGKO pointz4326|0|Polygon|0|KO-BKO-GKO:-BGKO pointz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointz4326|0|CircularString|0|KO-BKO-GKO:-BGKO pointz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointz4326|0|Triangle|0|KO-BKO-GKO:-BGKO pointz4326|0|Tin|0|KO-BKO-GKO:-BGKO pointz4326|0|Point|2|KO-BKO-GKO:-BGKO pointz4326|0|LineString|2|KO-BKO-GKO:-BGKO pointz4326|0|Polygon|2|KO-BKO-GKO:-BGKO pointz4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointz4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointz4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointz4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointz4326|0|CircularString|2|KO-BKO-GKO:-BGKO pointz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointz4326|0|Triangle|2|KO-BKO-GKO:-BGKO pointz4326|0|Point|1|KO-BKO-GKO:-BGKO pointz4326|0|LineString|1|KO-BKO-GKO:-BGKO pointz4326|0|Polygon|1|KO-BKO-GKO:-BGKO pointz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointz4326|0|CircularString|1|KO-BKO-GKO:-BGKO pointz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointz4326|0|Triangle|1|KO-BKO-GKO:-BGKO pointz4326|0|Point|3|KO-BKO-GKO:-BGKO pointz4326|0|LineString|3|KO-BKO-GKO:-BGKO pointz4326|0|Polygon|3|KO-BKO-GKO:-BGKO pointz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointz4326|0|CircularString|3|KO-BKO-GKO:-BGKO pointz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointz4326|0|Triangle|3|KO-BKO-GKO:-BGKO pointz4326|4326|Point|0|KO-BKO-GKO:-BGKO pointz4326|4326|LineString|0|KO-BKO-GKO:-BGKO pointz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO pointz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO pointz4326|4326|Tin|0|KO-BKO-GKO:-BGKO pointz4326|4326|Point|2|KO-BKO-GKO:-BGKO pointz4326|4326|LineString|2|KO-BKO-GKO:-BGKO pointz4326|4326|Polygon|2|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointz4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointz4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointz4326|4326|CircularString|2|KO-BKO-GKO:-BGKO pointz4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointz4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointz4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointz4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointz4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointz4326|4326|Triangle|2|KO-BKO-GKO:-BGKO pointz4326|4326|Point|1|KO-BKO-GKO:-BGKO pointz4326|4326|LineString|1|KO-BKO-GKO:-BGKO pointz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO pointz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO pointz4326|4326|Point|3|KO-BKO-GKO:-BGKO pointz4326|4326|LineString|3|KO-BKO-GKO:-BGKO pointz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO pointz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO pointz4326||COUNT|0| pointz4326||GCOUNT|0| pointzm|0|Point|0|KO-BKO-GKO:-BGKO pointzm|0|LineString|0|KO-BKO-GKO:-BGKO pointzm|0|Polygon|0|KO-BKO-GKO:-BGKO pointzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointzm|0|CircularString|0|KO-BKO-GKO:-BGKO pointzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointzm|0|Triangle|0|KO-BKO-GKO:-BGKO pointzm|0|Tin|0|KO-BKO-GKO:-BGKO pointzm|0|Point|2|KO-BKO-GKO:-BGKO pointzm|0|LineString|2|KO-BKO-GKO:-BGKO pointzm|0|Polygon|2|KO-BKO-GKO:-BGKO pointzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointzm|0|CircularString|2|KO-BKO-GKO:-BGKO pointzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointzm|0|Triangle|2|KO-BKO-GKO:-BGKO pointzm|0|Point|1|KO-BKO-GKO:-BGKO pointzm|0|LineString|1|KO-BKO-GKO:-BGKO pointzm|0|Polygon|1|KO-BKO-GKO:-BGKO pointzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointzm|0|CircularString|1|KO-BKO-GKO:-BGKO pointzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointzm|0|Triangle|1|KO-BKO-GKO:-BGKO pointzm|0|Point|3|KO-BKO-GKO:-BGKO pointzm|0|LineString|3|KO-BKO-GKO:-BGKO pointzm|0|Polygon|3|KO-BKO-GKO:-BGKO pointzm|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointzm|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointzm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointzm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointzm|0|CircularString|3|KO-BKO-GKO:-BGKO pointzm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointzm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointzm|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointzm|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointzm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointzm|0|Triangle|3|KO-BKO-GKO:-BGKO pointzm|4326|Point|0|KO-BKO-GKO:-BGKO pointzm|4326|LineString|0|KO-BKO-GKO:-BGKO pointzm|4326|Polygon|0|KO-BKO-GKO:-BGKO pointzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointzm|4326|CircularString|0|KO-BKO-GKO:-BGKO pointzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointzm|4326|Triangle|0|KO-BKO-GKO:-BGKO pointzm|4326|Tin|0|KO-BKO-GKO:-BGKO pointzm|4326|Point|2|KO-BKO-GKO:-BGKO pointzm|4326|LineString|2|KO-BKO-GKO:-BGKO pointzm|4326|Polygon|2|KO-BKO-GKO:-BGKO pointzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointzm|4326|CircularString|2|KO-BKO-GKO:-BGKO pointzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointzm|4326|Triangle|2|KO-BKO-GKO:-BGKO pointzm|4326|Point|1|KO-BKO-GKO:-BGKO pointzm|4326|LineString|1|KO-BKO-GKO:-BGKO pointzm|4326|Polygon|1|KO-BKO-GKO:-BGKO pointzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointzm|4326|CircularString|1|KO-BKO-GKO:-BGKO pointzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointzm|4326|Triangle|1|KO-BKO-GKO:-BGKO pointzm|4326|Point|3|KO-BKO-GKO:-BGKO pointzm|4326|LineString|3|KO-BKO-GKO:-BGKO pointzm|4326|Polygon|3|KO-BKO-GKO:-BGKO pointzm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointzm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointzm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointzm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointzm|4326|CircularString|3|KO-BKO-GKO:-BGKO pointzm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointzm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointzm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointzm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointzm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointzm|4326|Triangle|3|KO-BKO-GKO:-BGKO pointzm||COUNT|0| pointzm||GCOUNT|0| pointzm0|0|Point|0|KO-BKO-GKO:-BGKO pointzm0|0|LineString|0|KO-BKO-GKO:-BGKO pointzm0|0|Polygon|0|KO-BKO-GKO:-BGKO pointzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointzm0|0|CircularString|0|KO-BKO-GKO:-BGKO pointzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointzm0|0|Triangle|0|KO-BKO-GKO:-BGKO pointzm0|0|Tin|0|KO-BKO-GKO:-BGKO pointzm0|0|Point|2|KO-BKO-GKO:-BGKO pointzm0|0|LineString|2|KO-BKO-GKO:-BGKO pointzm0|0|Polygon|2|KO-BKO-GKO:-BGKO pointzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointzm0|0|CircularString|2|KO-BKO-GKO:-BGKO pointzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointzm0|0|Triangle|2|KO-BKO-GKO:-BGKO pointzm0|0|Point|1|KO-BKO-GKO:-BGKO pointzm0|0|LineString|1|KO-BKO-GKO:-BGKO pointzm0|0|Polygon|1|KO-BKO-GKO:-BGKO pointzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointzm0|0|CircularString|1|KO-BKO-GKO:-BGKO pointzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointzm0|0|Triangle|1|KO-BKO-GKO:-BGKO pointzm0|0|Point|3|KO-BKO-GKO:-BGKO pointzm0|0|LineString|3|KO-BKO-GKO:-BGKO pointzm0|0|Polygon|3|KO-BKO-GKO:-BGKO pointzm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointzm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointzm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointzm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointzm0|0|CircularString|3|KO-BKO-GKO:-BGKO pointzm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointzm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointzm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointzm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointzm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointzm0|0|Triangle|3|KO-BKO-GKO:-BGKO pointzm0|4326|Point|0|KO-BKO-GKO:-BGKO pointzm0|4326|LineString|0|KO-BKO-GKO:-BGKO pointzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO pointzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO pointzm0|4326|Tin|0|KO-BKO-GKO:-BGKO pointzm0|4326|Point|2|KO-BKO-GKO:-BGKO pointzm0|4326|LineString|2|KO-BKO-GKO:-BGKO pointzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO pointzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO pointzm0|4326|Point|1|KO-BKO-GKO:-BGKO pointzm0|4326|LineString|1|KO-BKO-GKO:-BGKO pointzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO pointzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO pointzm0|4326|Point|3|KO-BKO-GKO:-BGKO pointzm0|4326|LineString|3|KO-BKO-GKO:-BGKO pointzm0|4326|Polygon|3|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointzm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointzm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointzm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointzm0|4326|CircularString|3|KO-BKO-GKO:-BGKO pointzm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointzm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointzm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointzm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointzm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointzm0|4326|Triangle|3|KO-BKO-GKO:-BGKO pointzm0||COUNT|0| pointzm0||GCOUNT|0| pointzm4326|0|Point|0|KO-BKO-GKO:-BGKO pointzm4326|0|LineString|0|KO-BKO-GKO:-BGKO pointzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO pointzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO pointzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO pointzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO pointzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO pointzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO pointzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO pointzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO pointzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO pointzm4326|0|Tin|0|KO-BKO-GKO:-BGKO pointzm4326|0|Point|2|KO-BKO-GKO:-BGKO pointzm4326|0|LineString|2|KO-BKO-GKO:-BGKO pointzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO pointzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO pointzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO pointzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO pointzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO pointzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO pointzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO pointzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO pointzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO pointzm4326|0|Point|1|KO-BKO-GKO:-BGKO pointzm4326|0|LineString|1|KO-BKO-GKO:-BGKO pointzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO pointzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO pointzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO pointzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO pointzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO pointzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO pointzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO pointzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO pointzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO pointzm4326|0|Point|3|KO-BKO-GKO:-BGKO pointzm4326|0|LineString|3|KO-BKO-GKO:-BGKO pointzm4326|0|Polygon|3|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO pointzm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO pointzm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO pointzm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO pointzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO pointzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO pointzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO pointzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO pointzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO pointzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO pointzm4326|4326|Point|0|KO-BKO-GKO:-BGKO pointzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO pointzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO pointzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO pointzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO pointzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO pointzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO pointzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO pointzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO pointzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO pointzm4326|4326|Point|2|KO-BKO-GKO:-BGKO pointzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO pointzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO pointzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO pointzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO pointzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO pointzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO pointzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO pointzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO pointzm4326|4326|Point|1|KO-BKO-GKO:-BGKO pointzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO pointzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO pointzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO pointzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO pointzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO pointzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO pointzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO pointzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO pointzm4326|4326|Point|3|KO-BKO-GKO:-BGKO pointzm4326|4326|LineString|3|KO-BKO-GKO:-BGKO pointzm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO pointzm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO pointzm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO pointzm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO pointzm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO pointzm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO pointzm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO pointzm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO pointzm4326||COUNT|0| pointzm4326||GCOUNT|0| polygon|0|Point|0|KO-BKO-GKO:-BGKO polygon|0|LineString|0|KO-BKO-GKO:-BGKO polygon|0|Polygon|0|OK-BOK-GOK-BGOK polygon|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygon|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygon|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygon|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygon|0|CircularString|0|KO-BKO-GKO:-BGKO polygon|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygon|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygon|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygon|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygon|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygon|0|Triangle|0|KO-BKO-GKO:-BGKO polygon|0|Tin|0|KO-BKO-GKO:-BGKO polygon|0|Point|2|KO-BKO-GKO:-BGKO polygon|0|LineString|2|KO-BKO-GKO:-BGKO polygon|0|Polygon|2|KO-BKO-GKO:-BGKO polygon|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygon|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygon|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygon|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygon|0|CircularString|2|KO-BKO-GKO:-BGKO polygon|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygon|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygon|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygon|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygon|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygon|0|Triangle|2|KO-BKO-GKO:-BGKO polygon|0|Point|1|KO-BKO-GKO:-BGKO polygon|0|LineString|1|KO-BKO-GKO:-BGKO polygon|0|Polygon|1|KO-BKO-GKO:-BGKO polygon|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygon|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygon|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygon|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygon|0|CircularString|1|KO-BKO-GKO:-BGKO polygon|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygon|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygon|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygon|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygon|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygon|0|Triangle|1|KO-BKO-GKO:-BGKO polygon|0|Point|3|KO-BKO-GKO:-BGKO polygon|0|LineString|3|KO-BKO-GKO:-BGKO polygon|0|Polygon|3|KO-BKO-GKO:-BGKO polygon|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygon|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygon|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygon|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygon|0|CircularString|3|KO-BKO-GKO:-BGKO polygon|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygon|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygon|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygon|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygon|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygon|0|Triangle|3|KO-BKO-GKO:-BGKO polygon|4326|Point|0|KO-BKO-GKO:-BGKO polygon|4326|LineString|0|KO-BKO-GKO:-BGKO polygon|4326|Polygon|0|OK-BOK-GOK-BGOK polygon|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygon|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygon|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygon|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygon|4326|CircularString|0|KO-BKO-GKO:-BGKO polygon|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygon|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygon|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygon|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygon|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygon|4326|Triangle|0|KO-BKO-GKO:-BGKO polygon|4326|Tin|0|KO-BKO-GKO:-BGKO polygon|4326|Point|2|KO-BKO-GKO:-BGKO polygon|4326|LineString|2|KO-BKO-GKO:-BGKO polygon|4326|Polygon|2|KO-BKO-GKO:-BGKO polygon|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygon|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygon|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygon|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygon|4326|CircularString|2|KO-BKO-GKO:-BGKO polygon|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygon|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygon|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygon|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygon|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygon|4326|Triangle|2|KO-BKO-GKO:-BGKO polygon|4326|Point|1|KO-BKO-GKO:-BGKO polygon|4326|LineString|1|KO-BKO-GKO:-BGKO polygon|4326|Polygon|1|KO-BKO-GKO:-BGKO polygon|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygon|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygon|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygon|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygon|4326|CircularString|1|KO-BKO-GKO:-BGKO polygon|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygon|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygon|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygon|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygon|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygon|4326|Triangle|1|KO-BKO-GKO:-BGKO polygon|4326|Point|3|KO-BKO-GKO:-BGKO polygon|4326|LineString|3|KO-BKO-GKO:-BGKO polygon|4326|Polygon|3|KO-BKO-GKO:-BGKO polygon|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygon|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygon|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygon|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygon|4326|CircularString|3|KO-BKO-GKO:-BGKO polygon|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygon|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygon|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygon|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygon|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygon|4326|Triangle|3|KO-BKO-GKO:-BGKO polygon||COUNT|4| polygon||GCOUNT|4| polygon0|0|Point|0|KO-BKO-GKO:-BGKO polygon0|0|LineString|0|KO-BKO-GKO:-BGKO polygon0|0|Polygon|0|OK-BOK-GOK-BGOK polygon0|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygon0|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygon0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygon0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygon0|0|CircularString|0|KO-BKO-GKO:-BGKO polygon0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygon0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygon0|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygon0|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygon0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygon0|0|Triangle|0|KO-BKO-GKO:-BGKO polygon0|0|Tin|0|KO-BKO-GKO:-BGKO polygon0|0|Point|2|KO-BKO-GKO:-BGKO polygon0|0|LineString|2|KO-BKO-GKO:-BGKO polygon0|0|Polygon|2|KO-BKO-GKO:-BGKO polygon0|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygon0|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygon0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygon0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygon0|0|CircularString|2|KO-BKO-GKO:-BGKO polygon0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygon0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygon0|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygon0|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygon0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygon0|0|Triangle|2|KO-BKO-GKO:-BGKO polygon0|0|Point|1|KO-BKO-GKO:-BGKO polygon0|0|LineString|1|KO-BKO-GKO:-BGKO polygon0|0|Polygon|1|KO-BKO-GKO:-BGKO polygon0|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygon0|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygon0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygon0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygon0|0|CircularString|1|KO-BKO-GKO:-BGKO polygon0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygon0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygon0|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygon0|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygon0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygon0|0|Triangle|1|KO-BKO-GKO:-BGKO polygon0|0|Point|3|KO-BKO-GKO:-BGKO polygon0|0|LineString|3|KO-BKO-GKO:-BGKO polygon0|0|Polygon|3|KO-BKO-GKO:-BGKO polygon0|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygon0|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygon0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygon0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygon0|0|CircularString|3|KO-BKO-GKO:-BGKO polygon0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygon0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygon0|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygon0|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygon0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygon0|0|Triangle|3|KO-BKO-GKO:-BGKO polygon0|4326|Point|0|KO-BKO-GKO:-BGKO polygon0|4326|LineString|0|KO-BKO-GKO:-BGKO polygon0|4326|Polygon|0|OK-BOK-GOK-BGOK polygon0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygon0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygon0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygon0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygon0|4326|CircularString|0|KO-BKO-GKO:-BGKO polygon0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygon0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygon0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygon0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygon0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygon0|4326|Triangle|0|KO-BKO-GKO:-BGKO polygon0|4326|Tin|0|KO-BKO-GKO:-BGKO polygon0|4326|Point|2|KO-BKO-GKO:-BGKO polygon0|4326|LineString|2|KO-BKO-GKO:-BGKO polygon0|4326|Polygon|2|KO-BKO-GKO:-BGKO polygon0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygon0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygon0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygon0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygon0|4326|CircularString|2|KO-BKO-GKO:-BGKO polygon0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygon0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygon0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygon0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygon0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygon0|4326|Triangle|2|KO-BKO-GKO:-BGKO polygon0|4326|Point|1|KO-BKO-GKO:-BGKO polygon0|4326|LineString|1|KO-BKO-GKO:-BGKO polygon0|4326|Polygon|1|KO-BKO-GKO:-BGKO polygon0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygon0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygon0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygon0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygon0|4326|CircularString|1|KO-BKO-GKO:-BGKO polygon0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygon0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygon0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygon0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygon0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygon0|4326|Triangle|1|KO-BKO-GKO:-BGKO polygon0|4326|Point|3|KO-BKO-GKO:-BGKO polygon0|4326|LineString|3|KO-BKO-GKO:-BGKO polygon0|4326|Polygon|3|KO-BKO-GKO:-BGKO polygon0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygon0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygon0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygon0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygon0|4326|CircularString|3|KO-BKO-GKO:-BGKO polygon0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygon0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygon0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygon0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygon0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygon0|4326|Triangle|3|KO-BKO-GKO:-BGKO polygon0||COUNT|4| polygon0||GCOUNT|4| polygon4326|0|Point|0|KO-BKO-GKO:-BGKO polygon4326|0|LineString|0|KO-BKO-GKO:-BGKO polygon4326|0|Polygon|0|KO-BKO-GOK-BGOK polygon4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygon4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygon4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygon4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygon4326|0|CircularString|0|KO-BKO-GKO:-BGKO polygon4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygon4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygon4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygon4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygon4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygon4326|0|Triangle|0|KO-BKO-GKO:-BGKO polygon4326|0|Tin|0|KO-BKO-GKO:-BGKO polygon4326|0|Point|2|KO-BKO-GKO:-BGKO polygon4326|0|LineString|2|KO-BKO-GKO:-BGKO polygon4326|0|Polygon|2|KO-BKO-GKO:-BGKO polygon4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygon4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygon4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygon4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygon4326|0|CircularString|2|KO-BKO-GKO:-BGKO polygon4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygon4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygon4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygon4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygon4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygon4326|0|Triangle|2|KO-BKO-GKO:-BGKO polygon4326|0|Point|1|KO-BKO-GKO:-BGKO polygon4326|0|LineString|1|KO-BKO-GKO:-BGKO polygon4326|0|Polygon|1|KO-BKO-GKO:-BGKO polygon4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygon4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygon4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygon4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygon4326|0|CircularString|1|KO-BKO-GKO:-BGKO polygon4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygon4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygon4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygon4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygon4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygon4326|0|Triangle|1|KO-BKO-GKO:-BGKO polygon4326|0|Point|3|KO-BKO-GKO:-BGKO polygon4326|0|LineString|3|KO-BKO-GKO:-BGKO polygon4326|0|Polygon|3|KO-BKO-GKO:-BGKO polygon4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygon4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygon4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygon4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygon4326|0|CircularString|3|KO-BKO-GKO:-BGKO polygon4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygon4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygon4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygon4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygon4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygon4326|0|Triangle|3|KO-BKO-GKO:-BGKO polygon4326|4326|Point|0|KO-BKO-GKO:-BGKO polygon4326|4326|LineString|0|KO-BKO-GKO:-BGKO polygon4326|4326|Polygon|0|OK-BOK-GOK-BGOK polygon4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygon4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygon4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygon4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygon4326|4326|CircularString|0|KO-BKO-GKO:-BGKO polygon4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygon4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygon4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygon4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygon4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygon4326|4326|Triangle|0|KO-BKO-GKO:-BGKO polygon4326|4326|Tin|0|KO-BKO-GKO:-BGKO polygon4326|4326|Point|2|KO-BKO-GKO:-BGKO polygon4326|4326|LineString|2|KO-BKO-GKO:-BGKO polygon4326|4326|Polygon|2|KO-BKO-GKO:-BGKO polygon4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygon4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygon4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygon4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygon4326|4326|CircularString|2|KO-BKO-GKO:-BGKO polygon4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygon4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygon4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygon4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygon4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygon4326|4326|Triangle|2|KO-BKO-GKO:-BGKO polygon4326|4326|Point|1|KO-BKO-GKO:-BGKO polygon4326|4326|LineString|1|KO-BKO-GKO:-BGKO polygon4326|4326|Polygon|1|KO-BKO-GKO:-BGKO polygon4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygon4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygon4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygon4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygon4326|4326|CircularString|1|KO-BKO-GKO:-BGKO polygon4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygon4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygon4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygon4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygon4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygon4326|4326|Triangle|1|KO-BKO-GKO:-BGKO polygon4326|4326|Point|3|KO-BKO-GKO:-BGKO polygon4326|4326|LineString|3|KO-BKO-GKO:-BGKO polygon4326|4326|Polygon|3|KO-BKO-GKO:-BGKO polygon4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygon4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygon4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygon4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygon4326|4326|CircularString|3|KO-BKO-GKO:-BGKO polygon4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygon4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygon4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygon4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygon4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygon4326|4326|Triangle|3|KO-BKO-GKO:-BGKO polygon4326||COUNT|2| polygon4326||GCOUNT|4| polygonm|0|Point|0|KO-BKO-GKO:-BGKO polygonm|0|LineString|0|KO-BKO-GKO:-BGKO polygonm|0|Polygon|0|KO-BKO-GKO:-BGKO polygonm|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonm|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonm|0|CircularString|0|KO-BKO-GKO:-BGKO polygonm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonm|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonm|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonm|0|Triangle|0|KO-BKO-GKO:-BGKO polygonm|0|Tin|0|KO-BKO-GKO:-BGKO polygonm|0|Point|2|KO-BKO-GKO:-BGKO polygonm|0|LineString|2|KO-BKO-GKO:-BGKO polygonm|0|Polygon|2|KO-BKO-GKO:-BGKO polygonm|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonm|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonm|0|CircularString|2|KO-BKO-GKO:-BGKO polygonm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonm|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonm|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonm|0|Triangle|2|KO-BKO-GKO:-BGKO polygonm|0|Point|1|KO-BKO-GKO:-BGKO polygonm|0|LineString|1|KO-BKO-GKO:-BGKO polygonm|0|Polygon|1|OK-BOK-GOK-BGOK polygonm|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonm|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonm|0|CircularString|1|KO-BKO-GKO:-BGKO polygonm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonm|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonm|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonm|0|Triangle|1|KO-BKO-GKO:-BGKO polygonm|0|Point|3|KO-BKO-GKO:-BGKO polygonm|0|LineString|3|KO-BKO-GKO:-BGKO polygonm|0|Polygon|3|KO-BKO-GKO:-BGKO polygonm|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonm|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonm|0|CircularString|3|KO-BKO-GKO:-BGKO polygonm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonm|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonm|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonm|0|Triangle|3|KO-BKO-GKO:-BGKO polygonm|4326|Point|0|KO-BKO-GKO:-BGKO polygonm|4326|LineString|0|KO-BKO-GKO:-BGKO polygonm|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonm|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonm|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonm|4326|Tin|0|KO-BKO-GKO:-BGKO polygonm|4326|Point|2|KO-BKO-GKO:-BGKO polygonm|4326|LineString|2|KO-BKO-GKO:-BGKO polygonm|4326|Polygon|2|KO-BKO-GKO:-BGKO polygonm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonm|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonm|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonm|4326|Point|1|KO-BKO-GKO:-BGKO polygonm|4326|LineString|1|KO-BKO-GKO:-BGKO polygonm|4326|Polygon|1|OK-BOK-GOK-BGOK polygonm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonm|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonm|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonm|4326|Point|3|KO-BKO-GKO:-BGKO polygonm|4326|LineString|3|KO-BKO-GKO:-BGKO polygonm|4326|Polygon|3|KO-BKO-GKO:-BGKO polygonm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonm|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonm|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonm||COUNT|4| polygonm||GCOUNT|4| polygonm0|0|Point|0|KO-BKO-GKO:-BGKO polygonm0|0|LineString|0|KO-BKO-GKO:-BGKO polygonm0|0|Polygon|0|KO-BKO-GKO:-BGKO polygonm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonm0|0|CircularString|0|KO-BKO-GKO:-BGKO polygonm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonm0|0|Triangle|0|KO-BKO-GKO:-BGKO polygonm0|0|Tin|0|KO-BKO-GKO:-BGKO polygonm0|0|Point|2|KO-BKO-GKO:-BGKO polygonm0|0|LineString|2|KO-BKO-GKO:-BGKO polygonm0|0|Polygon|2|KO-BKO-GKO:-BGKO polygonm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonm0|0|CircularString|2|KO-BKO-GKO:-BGKO polygonm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonm0|0|Triangle|2|KO-BKO-GKO:-BGKO polygonm0|0|Point|1|KO-BKO-GKO:-BGKO polygonm0|0|LineString|1|KO-BKO-GKO:-BGKO polygonm0|0|Polygon|1|OK-BOK-GOK-BGOK polygonm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonm0|0|CircularString|1|KO-BKO-GKO:-BGKO polygonm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonm0|0|Triangle|1|KO-BKO-GKO:-BGKO polygonm0|0|Point|3|KO-BKO-GKO:-BGKO polygonm0|0|LineString|3|KO-BKO-GKO:-BGKO polygonm0|0|Polygon|3|KO-BKO-GKO:-BGKO polygonm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonm0|0|CircularString|3|KO-BKO-GKO:-BGKO polygonm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonm0|0|Triangle|3|KO-BKO-GKO:-BGKO polygonm0|4326|Point|0|KO-BKO-GKO:-BGKO polygonm0|4326|LineString|0|KO-BKO-GKO:-BGKO polygonm0|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonm0|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonm0|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonm0|4326|Tin|0|KO-BKO-GKO:-BGKO polygonm0|4326|Point|2|KO-BKO-GKO:-BGKO polygonm0|4326|LineString|2|KO-BKO-GKO:-BGKO polygonm0|4326|Polygon|2|KO-BKO-GKO:-BGKO polygonm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonm0|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonm0|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonm0|4326|Point|1|KO-BKO-GKO:-BGKO polygonm0|4326|LineString|1|KO-BKO-GKO:-BGKO polygonm0|4326|Polygon|1|OK-BOK-GOK-BGOK polygonm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonm0|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonm0|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonm0|4326|Point|3|KO-BKO-GKO:-BGKO polygonm0|4326|LineString|3|KO-BKO-GKO:-BGKO polygonm0|4326|Polygon|3|KO-BKO-GKO:-BGKO polygonm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonm0|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonm0|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonm0||COUNT|4| polygonm0||GCOUNT|4| polygonm4326|0|Point|0|KO-BKO-GKO:-BGKO polygonm4326|0|LineString|0|KO-BKO-GKO:-BGKO polygonm4326|0|Polygon|0|KO-BKO-GKO:-BGKO polygonm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonm4326|0|CircularString|0|KO-BKO-GKO:-BGKO polygonm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonm4326|0|Triangle|0|KO-BKO-GKO:-BGKO polygonm4326|0|Tin|0|KO-BKO-GKO:-BGKO polygonm4326|0|Point|2|KO-BKO-GKO:-BGKO polygonm4326|0|LineString|2|KO-BKO-GKO:-BGKO polygonm4326|0|Polygon|2|KO-BKO-GKO:-BGKO polygonm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonm4326|0|CircularString|2|KO-BKO-GKO:-BGKO polygonm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonm4326|0|Triangle|2|KO-BKO-GKO:-BGKO polygonm4326|0|Point|1|KO-BKO-GKO:-BGKO polygonm4326|0|LineString|1|KO-BKO-GKO:-BGKO polygonm4326|0|Polygon|1|KO-BKO-GOK-BGOK polygonm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonm4326|0|CircularString|1|KO-BKO-GKO:-BGKO polygonm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonm4326|0|Triangle|1|KO-BKO-GKO:-BGKO polygonm4326|0|Point|3|KO-BKO-GKO:-BGKO polygonm4326|0|LineString|3|KO-BKO-GKO:-BGKO polygonm4326|0|Polygon|3|KO-BKO-GKO:-BGKO polygonm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonm4326|0|CircularString|3|KO-BKO-GKO:-BGKO polygonm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonm4326|0|Triangle|3|KO-BKO-GKO:-BGKO polygonm4326|4326|Point|0|KO-BKO-GKO:-BGKO polygonm4326|4326|LineString|0|KO-BKO-GKO:-BGKO polygonm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonm4326|4326|Tin|0|KO-BKO-GKO:-BGKO polygonm4326|4326|Point|2|KO-BKO-GKO:-BGKO polygonm4326|4326|LineString|2|KO-BKO-GKO:-BGKO polygonm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonm4326|4326|Point|1|KO-BKO-GKO:-BGKO polygonm4326|4326|LineString|1|KO-BKO-GKO:-BGKO polygonm4326|4326|Polygon|1|OK-BOK-GOK-BGOK polygonm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonm4326|4326|Point|3|KO-BKO-GKO:-BGKO polygonm4326|4326|LineString|3|KO-BKO-GKO:-BGKO polygonm4326|4326|Polygon|3|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonm4326||COUNT|2| polygonm4326||GCOUNT|4| polygonz|0|Point|0|KO-BKO-GKO:-BGKO polygonz|0|LineString|0|KO-BKO-GKO:-BGKO polygonz|0|Polygon|0|KO-BKO-GKO:-BGKO polygonz|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonz|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonz|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonz|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonz|0|CircularString|0|KO-BKO-GKO:-BGKO polygonz|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonz|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonz|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonz|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonz|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonz|0|Triangle|0|KO-BKO-GKO:-BGKO polygonz|0|Tin|0|KO-BKO-GKO:-BGKO polygonz|0|Point|2|KO-BKO-GKO:-BGKO polygonz|0|LineString|2|KO-BKO-GKO:-BGKO polygonz|0|Polygon|2|OK-BOK-GOK-BGOK polygonz|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonz|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonz|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonz|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonz|0|CircularString|2|KO-BKO-GKO:-BGKO polygonz|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonz|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonz|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonz|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonz|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonz|0|Triangle|2|KO-BKO-GKO:-BGKO polygonz|0|Point|1|KO-BKO-GKO:-BGKO polygonz|0|LineString|1|KO-BKO-GKO:-BGKO polygonz|0|Polygon|1|KO-BKO-GKO:-BGKO polygonz|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonz|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonz|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonz|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonz|0|CircularString|1|KO-BKO-GKO:-BGKO polygonz|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonz|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonz|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonz|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonz|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonz|0|Triangle|1|KO-BKO-GKO:-BGKO polygonz|0|Point|3|KO-BKO-GKO:-BGKO polygonz|0|LineString|3|KO-BKO-GKO:-BGKO polygonz|0|Polygon|3|KO-BKO-GKO:-BGKO polygonz|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonz|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonz|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonz|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonz|0|CircularString|3|KO-BKO-GKO:-BGKO polygonz|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonz|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonz|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonz|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonz|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonz|0|Triangle|3|KO-BKO-GKO:-BGKO polygonz|4326|Point|0|KO-BKO-GKO:-BGKO polygonz|4326|LineString|0|KO-BKO-GKO:-BGKO polygonz|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonz|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonz|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonz|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonz|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonz|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonz|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonz|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonz|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonz|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonz|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonz|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonz|4326|Tin|0|KO-BKO-GKO:-BGKO polygonz|4326|Point|2|KO-BKO-GKO:-BGKO polygonz|4326|LineString|2|KO-BKO-GKO:-BGKO polygonz|4326|Polygon|2|OK-BOK-GOK-BGOK polygonz|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonz|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonz|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonz|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonz|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonz|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonz|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonz|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonz|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonz|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonz|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonz|4326|Point|1|KO-BKO-GKO:-BGKO polygonz|4326|LineString|1|KO-BKO-GKO:-BGKO polygonz|4326|Polygon|1|KO-BKO-GKO:-BGKO polygonz|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonz|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonz|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonz|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonz|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonz|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonz|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonz|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonz|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonz|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonz|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonz|4326|Point|3|KO-BKO-GKO:-BGKO polygonz|4326|LineString|3|KO-BKO-GKO:-BGKO polygonz|4326|Polygon|3|KO-BKO-GKO:-BGKO polygonz|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonz|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonz|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonz|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonz|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonz|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonz|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonz|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonz|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonz|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonz|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonz||COUNT|4| polygonz||GCOUNT|4| polygonz0|0|Point|0|KO-BKO-GKO:-BGKO polygonz0|0|LineString|0|KO-BKO-GKO:-BGKO polygonz0|0|Polygon|0|KO-BKO-GKO:-BGKO polygonz0|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonz0|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonz0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonz0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonz0|0|CircularString|0|KO-BKO-GKO:-BGKO polygonz0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonz0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonz0|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonz0|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonz0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonz0|0|Triangle|0|KO-BKO-GKO:-BGKO polygonz0|0|Tin|0|KO-BKO-GKO:-BGKO polygonz0|0|Point|2|KO-BKO-GKO:-BGKO polygonz0|0|LineString|2|KO-BKO-GKO:-BGKO polygonz0|0|Polygon|2|OK-BOK-GOK-BGOK polygonz0|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonz0|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonz0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonz0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonz0|0|CircularString|2|KO-BKO-GKO:-BGKO polygonz0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonz0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonz0|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonz0|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonz0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonz0|0|Triangle|2|KO-BKO-GKO:-BGKO polygonz0|0|Point|1|KO-BKO-GKO:-BGKO polygonz0|0|LineString|1|KO-BKO-GKO:-BGKO polygonz0|0|Polygon|1|KO-BKO-GKO:-BGKO polygonz0|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonz0|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonz0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonz0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonz0|0|CircularString|1|KO-BKO-GKO:-BGKO polygonz0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonz0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonz0|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonz0|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonz0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonz0|0|Triangle|1|KO-BKO-GKO:-BGKO polygonz0|0|Point|3|KO-BKO-GKO:-BGKO polygonz0|0|LineString|3|KO-BKO-GKO:-BGKO polygonz0|0|Polygon|3|KO-BKO-GKO:-BGKO polygonz0|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonz0|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonz0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonz0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonz0|0|CircularString|3|KO-BKO-GKO:-BGKO polygonz0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonz0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonz0|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonz0|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonz0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonz0|0|Triangle|3|KO-BKO-GKO:-BGKO polygonz0|4326|Point|0|KO-BKO-GKO:-BGKO polygonz0|4326|LineString|0|KO-BKO-GKO:-BGKO polygonz0|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonz0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonz0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonz0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonz0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonz0|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonz0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonz0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonz0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonz0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonz0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonz0|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonz0|4326|Tin|0|KO-BKO-GKO:-BGKO polygonz0|4326|Point|2|KO-BKO-GKO:-BGKO polygonz0|4326|LineString|2|KO-BKO-GKO:-BGKO polygonz0|4326|Polygon|2|OK-BOK-GOK-BGOK polygonz0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonz0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonz0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonz0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonz0|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonz0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonz0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonz0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonz0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonz0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonz0|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonz0|4326|Point|1|KO-BKO-GKO:-BGKO polygonz0|4326|LineString|1|KO-BKO-GKO:-BGKO polygonz0|4326|Polygon|1|KO-BKO-GKO:-BGKO polygonz0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonz0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonz0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonz0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonz0|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonz0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonz0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonz0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonz0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonz0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonz0|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonz0|4326|Point|3|KO-BKO-GKO:-BGKO polygonz0|4326|LineString|3|KO-BKO-GKO:-BGKO polygonz0|4326|Polygon|3|KO-BKO-GKO:-BGKO polygonz0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonz0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonz0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonz0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonz0|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonz0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonz0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonz0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonz0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonz0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonz0|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonz0||COUNT|4| polygonz0||GCOUNT|4| polygonz4326|0|Point|0|KO-BKO-GKO:-BGKO polygonz4326|0|LineString|0|KO-BKO-GKO:-BGKO polygonz4326|0|Polygon|0|KO-BKO-GKO:-BGKO polygonz4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonz4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonz4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonz4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonz4326|0|CircularString|0|KO-BKO-GKO:-BGKO polygonz4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonz4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonz4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonz4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonz4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonz4326|0|Triangle|0|KO-BKO-GKO:-BGKO polygonz4326|0|Tin|0|KO-BKO-GKO:-BGKO polygonz4326|0|Point|2|KO-BKO-GKO:-BGKO polygonz4326|0|LineString|2|KO-BKO-GKO:-BGKO polygonz4326|0|Polygon|2|KO-BKO-GOK-BGOK polygonz4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonz4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonz4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonz4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonz4326|0|CircularString|2|KO-BKO-GKO:-BGKO polygonz4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonz4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonz4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonz4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonz4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonz4326|0|Triangle|2|KO-BKO-GKO:-BGKO polygonz4326|0|Point|1|KO-BKO-GKO:-BGKO polygonz4326|0|LineString|1|KO-BKO-GKO:-BGKO polygonz4326|0|Polygon|1|KO-BKO-GKO:-BGKO polygonz4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonz4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonz4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonz4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonz4326|0|CircularString|1|KO-BKO-GKO:-BGKO polygonz4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonz4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonz4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonz4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonz4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonz4326|0|Triangle|1|KO-BKO-GKO:-BGKO polygonz4326|0|Point|3|KO-BKO-GKO:-BGKO polygonz4326|0|LineString|3|KO-BKO-GKO:-BGKO polygonz4326|0|Polygon|3|KO-BKO-GKO:-BGKO polygonz4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonz4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonz4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonz4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonz4326|0|CircularString|3|KO-BKO-GKO:-BGKO polygonz4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonz4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonz4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonz4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonz4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonz4326|0|Triangle|3|KO-BKO-GKO:-BGKO polygonz4326|4326|Point|0|KO-BKO-GKO:-BGKO polygonz4326|4326|LineString|0|KO-BKO-GKO:-BGKO polygonz4326|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonz4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonz4326|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonz4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonz4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonz4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonz4326|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonz4326|4326|Tin|0|KO-BKO-GKO:-BGKO polygonz4326|4326|Point|2|KO-BKO-GKO:-BGKO polygonz4326|4326|LineString|2|KO-BKO-GKO:-BGKO polygonz4326|4326|Polygon|2|OK-BOK-GOK-BGOK polygonz4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonz4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonz4326|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonz4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonz4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonz4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonz4326|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonz4326|4326|Point|1|KO-BKO-GKO:-BGKO polygonz4326|4326|LineString|1|KO-BKO-GKO:-BGKO polygonz4326|4326|Polygon|1|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonz4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonz4326|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonz4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonz4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonz4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonz4326|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonz4326|4326|Point|3|KO-BKO-GKO:-BGKO polygonz4326|4326|LineString|3|KO-BKO-GKO:-BGKO polygonz4326|4326|Polygon|3|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonz4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonz4326|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonz4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonz4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonz4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonz4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonz4326|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonz4326||COUNT|2| polygonz4326||GCOUNT|4| polygonzm|0|Point|0|KO-BKO-GKO:-BGKO polygonzm|0|LineString|0|KO-BKO-GKO:-BGKO polygonzm|0|Polygon|0|KO-BKO-GKO:-BGKO polygonzm|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonzm|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonzm|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonzm|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonzm|0|CircularString|0|KO-BKO-GKO:-BGKO polygonzm|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonzm|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonzm|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonzm|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonzm|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonzm|0|Triangle|0|KO-BKO-GKO:-BGKO polygonzm|0|Tin|0|KO-BKO-GKO:-BGKO polygonzm|0|Point|2|KO-BKO-GKO:-BGKO polygonzm|0|LineString|2|KO-BKO-GKO:-BGKO polygonzm|0|Polygon|2|KO-BKO-GKO:-BGKO polygonzm|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonzm|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonzm|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonzm|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonzm|0|CircularString|2|KO-BKO-GKO:-BGKO polygonzm|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonzm|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonzm|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonzm|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonzm|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonzm|0|Triangle|2|KO-BKO-GKO:-BGKO polygonzm|0|Point|1|KO-BKO-GKO:-BGKO polygonzm|0|LineString|1|KO-BKO-GKO:-BGKO polygonzm|0|Polygon|1|KO-BKO-GKO:-BGKO polygonzm|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonzm|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonzm|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonzm|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonzm|0|CircularString|1|KO-BKO-GKO:-BGKO polygonzm|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonzm|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonzm|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonzm|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonzm|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonzm|0|Triangle|1|KO-BKO-GKO:-BGKO polygonzm|0|Point|3|KO-BKO-GKO:-BGKO polygonzm|0|LineString|3|KO-BKO-GKO:-BGKO polygonzm|0|Polygon|3|OK-BOK-GOK-BGOK polygonzm|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonzm|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonzm|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonzm|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonzm|0|CircularString|3|KO-BKO-GKO:-BGKO polygonzm|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonzm|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonzm|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonzm|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonzm|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonzm|0|Triangle|3|KO-BKO-GKO:-BGKO polygonzm|4326|Point|0|KO-BKO-GKO:-BGKO polygonzm|4326|LineString|0|KO-BKO-GKO:-BGKO polygonzm|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonzm|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonzm|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonzm|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonzm|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonzm|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonzm|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonzm|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonzm|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonzm|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonzm|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonzm|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonzm|4326|Tin|0|KO-BKO-GKO:-BGKO polygonzm|4326|Point|2|KO-BKO-GKO:-BGKO polygonzm|4326|LineString|2|KO-BKO-GKO:-BGKO polygonzm|4326|Polygon|2|KO-BKO-GKO:-BGKO polygonzm|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonzm|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonzm|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonzm|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonzm|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonzm|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonzm|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonzm|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonzm|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonzm|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonzm|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonzm|4326|Point|1|KO-BKO-GKO:-BGKO polygonzm|4326|LineString|1|KO-BKO-GKO:-BGKO polygonzm|4326|Polygon|1|KO-BKO-GKO:-BGKO polygonzm|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonzm|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonzm|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonzm|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonzm|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonzm|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonzm|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonzm|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonzm|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonzm|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonzm|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonzm|4326|Point|3|KO-BKO-GKO:-BGKO polygonzm|4326|LineString|3|KO-BKO-GKO:-BGKO polygonzm|4326|Polygon|3|OK-BOK-GOK-BGOK polygonzm|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonzm|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonzm|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonzm|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonzm|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonzm|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonzm|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonzm|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonzm|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonzm|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonzm|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonzm||COUNT|4| polygonzm||GCOUNT|4| polygonzm0|0|Point|0|KO-BKO-GKO:-BGKO polygonzm0|0|LineString|0|KO-BKO-GKO:-BGKO polygonzm0|0|Polygon|0|KO-BKO-GKO:-BGKO polygonzm0|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonzm0|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonzm0|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonzm0|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonzm0|0|CircularString|0|KO-BKO-GKO:-BGKO polygonzm0|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonzm0|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonzm0|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonzm0|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonzm0|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonzm0|0|Triangle|0|KO-BKO-GKO:-BGKO polygonzm0|0|Tin|0|KO-BKO-GKO:-BGKO polygonzm0|0|Point|2|KO-BKO-GKO:-BGKO polygonzm0|0|LineString|2|KO-BKO-GKO:-BGKO polygonzm0|0|Polygon|2|KO-BKO-GKO:-BGKO polygonzm0|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonzm0|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonzm0|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonzm0|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonzm0|0|CircularString|2|KO-BKO-GKO:-BGKO polygonzm0|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonzm0|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonzm0|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonzm0|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonzm0|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonzm0|0|Triangle|2|KO-BKO-GKO:-BGKO polygonzm0|0|Point|1|KO-BKO-GKO:-BGKO polygonzm0|0|LineString|1|KO-BKO-GKO:-BGKO polygonzm0|0|Polygon|1|KO-BKO-GKO:-BGKO polygonzm0|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonzm0|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonzm0|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonzm0|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonzm0|0|CircularString|1|KO-BKO-GKO:-BGKO polygonzm0|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonzm0|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonzm0|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonzm0|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonzm0|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonzm0|0|Triangle|1|KO-BKO-GKO:-BGKO polygonzm0|0|Point|3|KO-BKO-GKO:-BGKO polygonzm0|0|LineString|3|KO-BKO-GKO:-BGKO polygonzm0|0|Polygon|3|OK-BOK-GOK-BGOK polygonzm0|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonzm0|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonzm0|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonzm0|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonzm0|0|CircularString|3|KO-BKO-GKO:-BGKO polygonzm0|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonzm0|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonzm0|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonzm0|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonzm0|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonzm0|0|Triangle|3|KO-BKO-GKO:-BGKO polygonzm0|4326|Point|0|KO-BKO-GKO:-BGKO polygonzm0|4326|LineString|0|KO-BKO-GKO:-BGKO polygonzm0|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonzm0|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonzm0|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonzm0|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonzm0|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonzm0|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonzm0|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonzm0|4326|Tin|0|KO-BKO-GKO:-BGKO polygonzm0|4326|Point|2|KO-BKO-GKO:-BGKO polygonzm0|4326|LineString|2|KO-BKO-GKO:-BGKO polygonzm0|4326|Polygon|2|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonzm0|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonzm0|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonzm0|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonzm0|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonzm0|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonzm0|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonzm0|4326|Point|1|KO-BKO-GKO:-BGKO polygonzm0|4326|LineString|1|KO-BKO-GKO:-BGKO polygonzm0|4326|Polygon|1|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonzm0|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonzm0|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonzm0|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonzm0|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonzm0|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonzm0|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonzm0|4326|Point|3|KO-BKO-GKO:-BGKO polygonzm0|4326|LineString|3|KO-BKO-GKO:-BGKO polygonzm0|4326|Polygon|3|OK-BOK-GOK-BGOK polygonzm0|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonzm0|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonzm0|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonzm0|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonzm0|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonzm0|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonzm0|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonzm0|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonzm0||COUNT|4| polygonzm0||GCOUNT|4| polygonzm4326|0|Point|0|KO-BKO-GKO:-BGKO polygonzm4326|0|LineString|0|KO-BKO-GKO:-BGKO polygonzm4326|0|Polygon|0|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiPoint|0|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiLineString|0|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonzm4326|0|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonzm4326|0|CircularString|0|KO-BKO-GKO:-BGKO polygonzm4326|0|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonzm4326|0|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiCurve|0|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiSurface|0|KO-BKO-GKO:-BGKO polygonzm4326|0|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonzm4326|0|Triangle|0|KO-BKO-GKO:-BGKO polygonzm4326|0|Tin|0|KO-BKO-GKO:-BGKO polygonzm4326|0|Point|2|KO-BKO-GKO:-BGKO polygonzm4326|0|LineString|2|KO-BKO-GKO:-BGKO polygonzm4326|0|Polygon|2|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiPoint|2|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiLineString|2|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonzm4326|0|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonzm4326|0|CircularString|2|KO-BKO-GKO:-BGKO polygonzm4326|0|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonzm4326|0|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiCurve|2|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiSurface|2|KO-BKO-GKO:-BGKO polygonzm4326|0|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonzm4326|0|Triangle|2|KO-BKO-GKO:-BGKO polygonzm4326|0|Point|1|KO-BKO-GKO:-BGKO polygonzm4326|0|LineString|1|KO-BKO-GKO:-BGKO polygonzm4326|0|Polygon|1|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiPoint|1|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiLineString|1|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonzm4326|0|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonzm4326|0|CircularString|1|KO-BKO-GKO:-BGKO polygonzm4326|0|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonzm4326|0|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiCurve|1|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiSurface|1|KO-BKO-GKO:-BGKO polygonzm4326|0|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonzm4326|0|Triangle|1|KO-BKO-GKO:-BGKO polygonzm4326|0|Point|3|KO-BKO-GKO:-BGKO polygonzm4326|0|LineString|3|KO-BKO-GKO:-BGKO polygonzm4326|0|Polygon|3|KO-BKO-GOK-BGOK polygonzm4326|0|MultiPoint|3|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiLineString|3|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonzm4326|0|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonzm4326|0|CircularString|3|KO-BKO-GKO:-BGKO polygonzm4326|0|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonzm4326|0|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiCurve|3|KO-BKO-GKO:-BGKO polygonzm4326|0|MultiSurface|3|KO-BKO-GKO:-BGKO polygonzm4326|0|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonzm4326|0|Triangle|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|Point|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|LineString|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|Polygon|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiPoint|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiLineString|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiPolygon|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|GeometryCollection|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|CircularString|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|CompoundCurve|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|CurvePolygon|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiCurve|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiSurface|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|PolyhedralSurface|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|Triangle|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|Tin|0|KO-BKO-GKO:-BGKO polygonzm4326|4326|Point|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|LineString|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|Polygon|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiPoint|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiLineString|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiPolygon|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|GeometryCollection|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|CircularString|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|CompoundCurve|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|CurvePolygon|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiCurve|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiSurface|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|PolyhedralSurface|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|Triangle|2|KO-BKO-GKO:-BGKO polygonzm4326|4326|Point|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|LineString|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|Polygon|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiPoint|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiLineString|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiPolygon|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|GeometryCollection|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|CircularString|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|CompoundCurve|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|CurvePolygon|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiCurve|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiSurface|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|PolyhedralSurface|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|Triangle|1|KO-BKO-GKO:-BGKO polygonzm4326|4326|Point|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|LineString|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|Polygon|3|OK-BOK-GOK-BGOK polygonzm4326|4326|MultiPoint|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiLineString|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiPolygon|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|GeometryCollection|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|CircularString|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|CompoundCurve|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|CurvePolygon|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiCurve|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|MultiSurface|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|PolyhedralSurface|3|KO-BKO-GKO:-BGKO polygonzm4326|4326|Triangle|3|KO-BKO-GKO:-BGKO polygonzm4326||COUNT|2| polygonzm4326||GCOUNT|4| polyhedralsurface|0|Point|0|KO-BKO polyhedralsurface|0|LineString|0|KO-BKO polyhedralsurface|0|Polygon|0|KO-BKO polyhedralsurface|0|MultiPoint|0|KO-BKO polyhedralsurface|0|MultiLineString|0|KO-BKO polyhedralsurface|0|MultiPolygon|0|KO-BKO polyhedralsurface|0|GeometryCollection|0|KO-BKO polyhedralsurface|0|CircularString|0|KO-BKO polyhedralsurface|0|CompoundCurve|0|KO-BKO polyhedralsurface|0|CurvePolygon|0|KO-BKO polyhedralsurface|0|MultiCurve|0|KO-BKO polyhedralsurface|0|MultiSurface|0|KO-BKO polyhedralsurface|0|PolyhedralSurface|0|OK-BOK polyhedralsurface|0|Triangle|0|KO-BKO polyhedralsurface|0|Tin|0|KO-BKO polyhedralsurface|0|Point|2|KO-BKO polyhedralsurface|0|LineString|2|KO-BKO polyhedralsurface|0|Polygon|2|KO-BKO polyhedralsurface|0|MultiPoint|2|KO-BKO polyhedralsurface|0|MultiLineString|2|KO-BKO polyhedralsurface|0|MultiPolygon|2|KO-BKO polyhedralsurface|0|GeometryCollection|2|KO-BKO polyhedralsurface|0|CircularString|2|KO-BKO polyhedralsurface|0|CompoundCurve|2|KO-BKO polyhedralsurface|0|CurvePolygon|2|KO-BKO polyhedralsurface|0|MultiCurve|2|KO-BKO polyhedralsurface|0|MultiSurface|2|KO-BKO polyhedralsurface|0|PolyhedralSurface|2|KO-BKO polyhedralsurface|0|Triangle|2|KO-BKO polyhedralsurface|0|Point|1|KO-BKO polyhedralsurface|0|LineString|1|KO-BKO polyhedralsurface|0|Polygon|1|KO-BKO polyhedralsurface|0|MultiPoint|1|KO-BKO polyhedralsurface|0|MultiLineString|1|KO-BKO polyhedralsurface|0|MultiPolygon|1|KO-BKO polyhedralsurface|0|GeometryCollection|1|KO-BKO polyhedralsurface|0|CircularString|1|KO-BKO polyhedralsurface|0|CompoundCurve|1|KO-BKO polyhedralsurface|0|CurvePolygon|1|KO-BKO polyhedralsurface|0|MultiCurve|1|KO-BKO polyhedralsurface|0|MultiSurface|1|KO-BKO polyhedralsurface|0|PolyhedralSurface|1|KO-BKO polyhedralsurface|0|Triangle|1|KO-BKO polyhedralsurface|0|Point|3|KO-BKO polyhedralsurface|0|LineString|3|KO-BKO polyhedralsurface|0|Polygon|3|KO-BKO polyhedralsurface|0|MultiPoint|3|KO-BKO polyhedralsurface|0|MultiLineString|3|KO-BKO polyhedralsurface|0|MultiPolygon|3|KO-BKO polyhedralsurface|0|GeometryCollection|3|KO-BKO polyhedralsurface|0|CircularString|3|KO-BKO polyhedralsurface|0|CompoundCurve|3|KO-BKO polyhedralsurface|0|CurvePolygon|3|KO-BKO polyhedralsurface|0|MultiCurve|3|KO-BKO polyhedralsurface|0|MultiSurface|3|KO-BKO polyhedralsurface|0|PolyhedralSurface|3|KO-BKO polyhedralsurface|0|Triangle|3|KO-BKO polyhedralsurface|4326|Point|0|KO-BKO polyhedralsurface|4326|LineString|0|KO-BKO polyhedralsurface|4326|Polygon|0|KO-BKO polyhedralsurface|4326|MultiPoint|0|KO-BKO polyhedralsurface|4326|MultiLineString|0|KO-BKO polyhedralsurface|4326|MultiPolygon|0|KO-BKO polyhedralsurface|4326|GeometryCollection|0|KO-BKO polyhedralsurface|4326|CircularString|0|KO-BKO polyhedralsurface|4326|CompoundCurve|0|KO-BKO polyhedralsurface|4326|CurvePolygon|0|KO-BKO polyhedralsurface|4326|MultiCurve|0|KO-BKO polyhedralsurface|4326|MultiSurface|0|KO-BKO polyhedralsurface|4326|PolyhedralSurface|0|OK-BOK polyhedralsurface|4326|Triangle|0|KO-BKO polyhedralsurface|4326|Tin|0|KO-BKO polyhedralsurface|4326|Point|2|KO-BKO polyhedralsurface|4326|LineString|2|KO-BKO polyhedralsurface|4326|Polygon|2|KO-BKO polyhedralsurface|4326|MultiPoint|2|KO-BKO polyhedralsurface|4326|MultiLineString|2|KO-BKO polyhedralsurface|4326|MultiPolygon|2|KO-BKO polyhedralsurface|4326|GeometryCollection|2|KO-BKO polyhedralsurface|4326|CircularString|2|KO-BKO polyhedralsurface|4326|CompoundCurve|2|KO-BKO polyhedralsurface|4326|CurvePolygon|2|KO-BKO polyhedralsurface|4326|MultiCurve|2|KO-BKO polyhedralsurface|4326|MultiSurface|2|KO-BKO polyhedralsurface|4326|PolyhedralSurface|2|KO-BKO polyhedralsurface|4326|Triangle|2|KO-BKO polyhedralsurface|4326|Point|1|KO-BKO polyhedralsurface|4326|LineString|1|KO-BKO polyhedralsurface|4326|Polygon|1|KO-BKO polyhedralsurface|4326|MultiPoint|1|KO-BKO polyhedralsurface|4326|MultiLineString|1|KO-BKO polyhedralsurface|4326|MultiPolygon|1|KO-BKO polyhedralsurface|4326|GeometryCollection|1|KO-BKO polyhedralsurface|4326|CircularString|1|KO-BKO polyhedralsurface|4326|CompoundCurve|1|KO-BKO polyhedralsurface|4326|CurvePolygon|1|KO-BKO polyhedralsurface|4326|MultiCurve|1|KO-BKO polyhedralsurface|4326|MultiSurface|1|KO-BKO polyhedralsurface|4326|PolyhedralSurface|1|KO-BKO polyhedralsurface|4326|Triangle|1|KO-BKO polyhedralsurface|4326|Point|3|KO-BKO polyhedralsurface|4326|LineString|3|KO-BKO polyhedralsurface|4326|Polygon|3|KO-BKO polyhedralsurface|4326|MultiPoint|3|KO-BKO polyhedralsurface|4326|MultiLineString|3|KO-BKO polyhedralsurface|4326|MultiPolygon|3|KO-BKO polyhedralsurface|4326|GeometryCollection|3|KO-BKO polyhedralsurface|4326|CircularString|3|KO-BKO polyhedralsurface|4326|CompoundCurve|3|KO-BKO polyhedralsurface|4326|CurvePolygon|3|KO-BKO polyhedralsurface|4326|MultiCurve|3|KO-BKO polyhedralsurface|4326|MultiSurface|3|KO-BKO polyhedralsurface|4326|PolyhedralSurface|3|KO-BKO polyhedralsurface|4326|Triangle|3|KO-BKO polyhedralsurface||COUNT|4| polyhedralsurface0|0|Point|0|KO-BKO polyhedralsurface0|0|LineString|0|KO-BKO polyhedralsurface0|0|Polygon|0|KO-BKO polyhedralsurface0|0|MultiPoint|0|KO-BKO polyhedralsurface0|0|MultiLineString|0|KO-BKO polyhedralsurface0|0|MultiPolygon|0|KO-BKO polyhedralsurface0|0|GeometryCollection|0|KO-BKO polyhedralsurface0|0|CircularString|0|KO-BKO polyhedralsurface0|0|CompoundCurve|0|KO-BKO polyhedralsurface0|0|CurvePolygon|0|KO-BKO polyhedralsurface0|0|MultiCurve|0|KO-BKO polyhedralsurface0|0|MultiSurface|0|KO-BKO polyhedralsurface0|0|PolyhedralSurface|0|OK-BOK polyhedralsurface0|0|Triangle|0|KO-BKO polyhedralsurface0|0|Tin|0|KO-BKO polyhedralsurface0|0|Point|2|KO-BKO polyhedralsurface0|0|LineString|2|KO-BKO polyhedralsurface0|0|Polygon|2|KO-BKO polyhedralsurface0|0|MultiPoint|2|KO-BKO polyhedralsurface0|0|MultiLineString|2|KO-BKO polyhedralsurface0|0|MultiPolygon|2|KO-BKO polyhedralsurface0|0|GeometryCollection|2|KO-BKO polyhedralsurface0|0|CircularString|2|KO-BKO polyhedralsurface0|0|CompoundCurve|2|KO-BKO polyhedralsurface0|0|CurvePolygon|2|KO-BKO polyhedralsurface0|0|MultiCurve|2|KO-BKO polyhedralsurface0|0|MultiSurface|2|KO-BKO polyhedralsurface0|0|PolyhedralSurface|2|KO-BKO polyhedralsurface0|0|Triangle|2|KO-BKO polyhedralsurface0|0|Point|1|KO-BKO polyhedralsurface0|0|LineString|1|KO-BKO polyhedralsurface0|0|Polygon|1|KO-BKO polyhedralsurface0|0|MultiPoint|1|KO-BKO polyhedralsurface0|0|MultiLineString|1|KO-BKO polyhedralsurface0|0|MultiPolygon|1|KO-BKO polyhedralsurface0|0|GeometryCollection|1|KO-BKO polyhedralsurface0|0|CircularString|1|KO-BKO polyhedralsurface0|0|CompoundCurve|1|KO-BKO polyhedralsurface0|0|CurvePolygon|1|KO-BKO polyhedralsurface0|0|MultiCurve|1|KO-BKO polyhedralsurface0|0|MultiSurface|1|KO-BKO polyhedralsurface0|0|PolyhedralSurface|1|KO-BKO polyhedralsurface0|0|Triangle|1|KO-BKO polyhedralsurface0|0|Point|3|KO-BKO polyhedralsurface0|0|LineString|3|KO-BKO polyhedralsurface0|0|Polygon|3|KO-BKO polyhedralsurface0|0|MultiPoint|3|KO-BKO polyhedralsurface0|0|MultiLineString|3|KO-BKO polyhedralsurface0|0|MultiPolygon|3|KO-BKO polyhedralsurface0|0|GeometryCollection|3|KO-BKO polyhedralsurface0|0|CircularString|3|KO-BKO polyhedralsurface0|0|CompoundCurve|3|KO-BKO polyhedralsurface0|0|CurvePolygon|3|KO-BKO polyhedralsurface0|0|MultiCurve|3|KO-BKO polyhedralsurface0|0|MultiSurface|3|KO-BKO polyhedralsurface0|0|PolyhedralSurface|3|KO-BKO polyhedralsurface0|0|Triangle|3|KO-BKO polyhedralsurface0|4326|Point|0|KO-BKO polyhedralsurface0|4326|LineString|0|KO-BKO polyhedralsurface0|4326|Polygon|0|KO-BKO polyhedralsurface0|4326|MultiPoint|0|KO-BKO polyhedralsurface0|4326|MultiLineString|0|KO-BKO polyhedralsurface0|4326|MultiPolygon|0|KO-BKO polyhedralsurface0|4326|GeometryCollection|0|KO-BKO polyhedralsurface0|4326|CircularString|0|KO-BKO polyhedralsurface0|4326|CompoundCurve|0|KO-BKO polyhedralsurface0|4326|CurvePolygon|0|KO-BKO polyhedralsurface0|4326|MultiCurve|0|KO-BKO polyhedralsurface0|4326|MultiSurface|0|KO-BKO polyhedralsurface0|4326|PolyhedralSurface|0|OK-BOK polyhedralsurface0|4326|Triangle|0|KO-BKO polyhedralsurface0|4326|Tin|0|KO-BKO polyhedralsurface0|4326|Point|2|KO-BKO polyhedralsurface0|4326|LineString|2|KO-BKO polyhedralsurface0|4326|Polygon|2|KO-BKO polyhedralsurface0|4326|MultiPoint|2|KO-BKO polyhedralsurface0|4326|MultiLineString|2|KO-BKO polyhedralsurface0|4326|MultiPolygon|2|KO-BKO polyhedralsurface0|4326|GeometryCollection|2|KO-BKO polyhedralsurface0|4326|CircularString|2|KO-BKO polyhedralsurface0|4326|CompoundCurve|2|KO-BKO polyhedralsurface0|4326|CurvePolygon|2|KO-BKO polyhedralsurface0|4326|MultiCurve|2|KO-BKO polyhedralsurface0|4326|MultiSurface|2|KO-BKO polyhedralsurface0|4326|PolyhedralSurface|2|KO-BKO polyhedralsurface0|4326|Triangle|2|KO-BKO polyhedralsurface0|4326|Point|1|KO-BKO polyhedralsurface0|4326|LineString|1|KO-BKO polyhedralsurface0|4326|Polygon|1|KO-BKO polyhedralsurface0|4326|MultiPoint|1|KO-BKO polyhedralsurface0|4326|MultiLineString|1|KO-BKO polyhedralsurface0|4326|MultiPolygon|1|KO-BKO polyhedralsurface0|4326|GeometryCollection|1|KO-BKO polyhedralsurface0|4326|CircularString|1|KO-BKO polyhedralsurface0|4326|CompoundCurve|1|KO-BKO polyhedralsurface0|4326|CurvePolygon|1|KO-BKO polyhedralsurface0|4326|MultiCurve|1|KO-BKO polyhedralsurface0|4326|MultiSurface|1|KO-BKO polyhedralsurface0|4326|PolyhedralSurface|1|KO-BKO polyhedralsurface0|4326|Triangle|1|KO-BKO polyhedralsurface0|4326|Point|3|KO-BKO polyhedralsurface0|4326|LineString|3|KO-BKO polyhedralsurface0|4326|Polygon|3|KO-BKO polyhedralsurface0|4326|MultiPoint|3|KO-BKO polyhedralsurface0|4326|MultiLineString|3|KO-BKO polyhedralsurface0|4326|MultiPolygon|3|KO-BKO polyhedralsurface0|4326|GeometryCollection|3|KO-BKO polyhedralsurface0|4326|CircularString|3|KO-BKO polyhedralsurface0|4326|CompoundCurve|3|KO-BKO polyhedralsurface0|4326|CurvePolygon|3|KO-BKO polyhedralsurface0|4326|MultiCurve|3|KO-BKO polyhedralsurface0|4326|MultiSurface|3|KO-BKO polyhedralsurface0|4326|PolyhedralSurface|3|KO-BKO polyhedralsurface0|4326|Triangle|3|KO-BKO polyhedralsurface0||COUNT|4| polyhedralsurface4326|0|Point|0|KO-BKO polyhedralsurface4326|0|LineString|0|KO-BKO polyhedralsurface4326|0|Polygon|0|KO-BKO polyhedralsurface4326|0|MultiPoint|0|KO-BKO polyhedralsurface4326|0|MultiLineString|0|KO-BKO polyhedralsurface4326|0|MultiPolygon|0|KO-BKO polyhedralsurface4326|0|GeometryCollection|0|KO-BKO polyhedralsurface4326|0|CircularString|0|KO-BKO polyhedralsurface4326|0|CompoundCurve|0|KO-BKO polyhedralsurface4326|0|CurvePolygon|0|KO-BKO polyhedralsurface4326|0|MultiCurve|0|KO-BKO polyhedralsurface4326|0|MultiSurface|0|KO-BKO polyhedralsurface4326|0|PolyhedralSurface|0|KO-BKO polyhedralsurface4326|0|Triangle|0|KO-BKO polyhedralsurface4326|0|Tin|0|KO-BKO polyhedralsurface4326|0|Point|2|KO-BKO polyhedralsurface4326|0|LineString|2|KO-BKO polyhedralsurface4326|0|Polygon|2|KO-BKO polyhedralsurface4326|0|MultiPoint|2|KO-BKO polyhedralsurface4326|0|MultiLineString|2|KO-BKO polyhedralsurface4326|0|MultiPolygon|2|KO-BKO polyhedralsurface4326|0|GeometryCollection|2|KO-BKO polyhedralsurface4326|0|CircularString|2|KO-BKO polyhedralsurface4326|0|CompoundCurve|2|KO-BKO polyhedralsurface4326|0|CurvePolygon|2|KO-BKO polyhedralsurface4326|0|MultiCurve|2|KO-BKO polyhedralsurface4326|0|MultiSurface|2|KO-BKO polyhedralsurface4326|0|PolyhedralSurface|2|KO-BKO polyhedralsurface4326|0|Triangle|2|KO-BKO polyhedralsurface4326|0|Point|1|KO-BKO polyhedralsurface4326|0|LineString|1|KO-BKO polyhedralsurface4326|0|Polygon|1|KO-BKO polyhedralsurface4326|0|MultiPoint|1|KO-BKO polyhedralsurface4326|0|MultiLineString|1|KO-BKO polyhedralsurface4326|0|MultiPolygon|1|KO-BKO polyhedralsurface4326|0|GeometryCollection|1|KO-BKO polyhedralsurface4326|0|CircularString|1|KO-BKO polyhedralsurface4326|0|CompoundCurve|1|KO-BKO polyhedralsurface4326|0|CurvePolygon|1|KO-BKO polyhedralsurface4326|0|MultiCurve|1|KO-BKO polyhedralsurface4326|0|MultiSurface|1|KO-BKO polyhedralsurface4326|0|PolyhedralSurface|1|KO-BKO polyhedralsurface4326|0|Triangle|1|KO-BKO polyhedralsurface4326|0|Point|3|KO-BKO polyhedralsurface4326|0|LineString|3|KO-BKO polyhedralsurface4326|0|Polygon|3|KO-BKO polyhedralsurface4326|0|MultiPoint|3|KO-BKO polyhedralsurface4326|0|MultiLineString|3|KO-BKO polyhedralsurface4326|0|MultiPolygon|3|KO-BKO polyhedralsurface4326|0|GeometryCollection|3|KO-BKO polyhedralsurface4326|0|CircularString|3|KO-BKO polyhedralsurface4326|0|CompoundCurve|3|KO-BKO polyhedralsurface4326|0|CurvePolygon|3|KO-BKO polyhedralsurface4326|0|MultiCurve|3|KO-BKO polyhedralsurface4326|0|MultiSurface|3|KO-BKO polyhedralsurface4326|0|PolyhedralSurface|3|KO-BKO polyhedralsurface4326|0|Triangle|3|KO-BKO polyhedralsurface4326|4326|Point|0|KO-BKO polyhedralsurface4326|4326|LineString|0|KO-BKO polyhedralsurface4326|4326|Polygon|0|KO-BKO polyhedralsurface4326|4326|MultiPoint|0|KO-BKO polyhedralsurface4326|4326|MultiLineString|0|KO-BKO polyhedralsurface4326|4326|MultiPolygon|0|KO-BKO polyhedralsurface4326|4326|GeometryCollection|0|KO-BKO polyhedralsurface4326|4326|CircularString|0|KO-BKO polyhedralsurface4326|4326|CompoundCurve|0|KO-BKO polyhedralsurface4326|4326|CurvePolygon|0|KO-BKO polyhedralsurface4326|4326|MultiCurve|0|KO-BKO polyhedralsurface4326|4326|MultiSurface|0|KO-BKO polyhedralsurface4326|4326|PolyhedralSurface|0|OK-BOK polyhedralsurface4326|4326|Triangle|0|KO-BKO polyhedralsurface4326|4326|Tin|0|KO-BKO polyhedralsurface4326|4326|Point|2|KO-BKO polyhedralsurface4326|4326|LineString|2|KO-BKO polyhedralsurface4326|4326|Polygon|2|KO-BKO polyhedralsurface4326|4326|MultiPoint|2|KO-BKO polyhedralsurface4326|4326|MultiLineString|2|KO-BKO polyhedralsurface4326|4326|MultiPolygon|2|KO-BKO polyhedralsurface4326|4326|GeometryCollection|2|KO-BKO polyhedralsurface4326|4326|CircularString|2|KO-BKO polyhedralsurface4326|4326|CompoundCurve|2|KO-BKO polyhedralsurface4326|4326|CurvePolygon|2|KO-BKO polyhedralsurface4326|4326|MultiCurve|2|KO-BKO polyhedralsurface4326|4326|MultiSurface|2|KO-BKO polyhedralsurface4326|4326|PolyhedralSurface|2|KO-BKO polyhedralsurface4326|4326|Triangle|2|KO-BKO polyhedralsurface4326|4326|Point|1|KO-BKO polyhedralsurface4326|4326|LineString|1|KO-BKO polyhedralsurface4326|4326|Polygon|1|KO-BKO polyhedralsurface4326|4326|MultiPoint|1|KO-BKO polyhedralsurface4326|4326|MultiLineString|1|KO-BKO polyhedralsurface4326|4326|MultiPolygon|1|KO-BKO polyhedralsurface4326|4326|GeometryCollection|1|KO-BKO polyhedralsurface4326|4326|CircularString|1|KO-BKO polyhedralsurface4326|4326|CompoundCurve|1|KO-BKO polyhedralsurface4326|4326|CurvePolygon|1|KO-BKO polyhedralsurface4326|4326|MultiCurve|1|KO-BKO polyhedralsurface4326|4326|MultiSurface|1|KO-BKO polyhedralsurface4326|4326|PolyhedralSurface|1|KO-BKO polyhedralsurface4326|4326|Triangle|1|KO-BKO polyhedralsurface4326|4326|Point|3|KO-BKO polyhedralsurface4326|4326|LineString|3|KO-BKO polyhedralsurface4326|4326|Polygon|3|KO-BKO polyhedralsurface4326|4326|MultiPoint|3|KO-BKO polyhedralsurface4326|4326|MultiLineString|3|KO-BKO polyhedralsurface4326|4326|MultiPolygon|3|KO-BKO polyhedralsurface4326|4326|GeometryCollection|3|KO-BKO polyhedralsurface4326|4326|CircularString|3|KO-BKO polyhedralsurface4326|4326|CompoundCurve|3|KO-BKO polyhedralsurface4326|4326|CurvePolygon|3|KO-BKO polyhedralsurface4326|4326|MultiCurve|3|KO-BKO polyhedralsurface4326|4326|MultiSurface|3|KO-BKO polyhedralsurface4326|4326|PolyhedralSurface|3|KO-BKO polyhedralsurface4326|4326|Triangle|3|KO-BKO polyhedralsurface4326||COUNT|2| polyhedralsurfacem|0|Point|0|KO-BKO polyhedralsurfacem|0|LineString|0|KO-BKO polyhedralsurfacem|0|Polygon|0|KO-BKO polyhedralsurfacem|0|MultiPoint|0|KO-BKO polyhedralsurfacem|0|MultiLineString|0|KO-BKO polyhedralsurfacem|0|MultiPolygon|0|KO-BKO polyhedralsurfacem|0|GeometryCollection|0|KO-BKO polyhedralsurfacem|0|CircularString|0|KO-BKO polyhedralsurfacem|0|CompoundCurve|0|KO-BKO polyhedralsurfacem|0|CurvePolygon|0|KO-BKO polyhedralsurfacem|0|MultiCurve|0|KO-BKO polyhedralsurfacem|0|MultiSurface|0|KO-BKO polyhedralsurfacem|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacem|0|Triangle|0|KO-BKO polyhedralsurfacem|0|Tin|0|KO-BKO polyhedralsurfacem|0|Point|2|KO-BKO polyhedralsurfacem|0|LineString|2|KO-BKO polyhedralsurfacem|0|Polygon|2|KO-BKO polyhedralsurfacem|0|MultiPoint|2|KO-BKO polyhedralsurfacem|0|MultiLineString|2|KO-BKO polyhedralsurfacem|0|MultiPolygon|2|KO-BKO polyhedralsurfacem|0|GeometryCollection|2|KO-BKO polyhedralsurfacem|0|CircularString|2|KO-BKO polyhedralsurfacem|0|CompoundCurve|2|KO-BKO polyhedralsurfacem|0|CurvePolygon|2|KO-BKO polyhedralsurfacem|0|MultiCurve|2|KO-BKO polyhedralsurfacem|0|MultiSurface|2|KO-BKO polyhedralsurfacem|0|PolyhedralSurface|2|KO-BKO polyhedralsurfacem|0|Triangle|2|KO-BKO polyhedralsurfacem|0|Point|1|KO-BKO polyhedralsurfacem|0|LineString|1|KO-BKO polyhedralsurfacem|0|Polygon|1|KO-BKO polyhedralsurfacem|0|MultiPoint|1|KO-BKO polyhedralsurfacem|0|MultiLineString|1|KO-BKO polyhedralsurfacem|0|MultiPolygon|1|KO-BKO polyhedralsurfacem|0|GeometryCollection|1|KO-BKO polyhedralsurfacem|0|CircularString|1|KO-BKO polyhedralsurfacem|0|CompoundCurve|1|KO-BKO polyhedralsurfacem|0|CurvePolygon|1|KO-BKO polyhedralsurfacem|0|MultiCurve|1|KO-BKO polyhedralsurfacem|0|MultiSurface|1|KO-BKO polyhedralsurfacem|0|PolyhedralSurface|1|OK-BOK polyhedralsurfacem|0|Triangle|1|KO-BKO polyhedralsurfacem|0|Point|3|KO-BKO polyhedralsurfacem|0|LineString|3|KO-BKO polyhedralsurfacem|0|Polygon|3|KO-BKO polyhedralsurfacem|0|MultiPoint|3|KO-BKO polyhedralsurfacem|0|MultiLineString|3|KO-BKO polyhedralsurfacem|0|MultiPolygon|3|KO-BKO polyhedralsurfacem|0|GeometryCollection|3|KO-BKO polyhedralsurfacem|0|CircularString|3|KO-BKO polyhedralsurfacem|0|CompoundCurve|3|KO-BKO polyhedralsurfacem|0|CurvePolygon|3|KO-BKO polyhedralsurfacem|0|MultiCurve|3|KO-BKO polyhedralsurfacem|0|MultiSurface|3|KO-BKO polyhedralsurfacem|0|PolyhedralSurface|3|KO-BKO polyhedralsurfacem|0|Triangle|3|KO-BKO polyhedralsurfacem|4326|Point|0|KO-BKO polyhedralsurfacem|4326|LineString|0|KO-BKO polyhedralsurfacem|4326|Polygon|0|KO-BKO polyhedralsurfacem|4326|MultiPoint|0|KO-BKO polyhedralsurfacem|4326|MultiLineString|0|KO-BKO polyhedralsurfacem|4326|MultiPolygon|0|KO-BKO polyhedralsurfacem|4326|GeometryCollection|0|KO-BKO polyhedralsurfacem|4326|CircularString|0|KO-BKO polyhedralsurfacem|4326|CompoundCurve|0|KO-BKO polyhedralsurfacem|4326|CurvePolygon|0|KO-BKO polyhedralsurfacem|4326|MultiCurve|0|KO-BKO polyhedralsurfacem|4326|MultiSurface|0|KO-BKO polyhedralsurfacem|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacem|4326|Triangle|0|KO-BKO polyhedralsurfacem|4326|Tin|0|KO-BKO polyhedralsurfacem|4326|Point|2|KO-BKO polyhedralsurfacem|4326|LineString|2|KO-BKO polyhedralsurfacem|4326|Polygon|2|KO-BKO polyhedralsurfacem|4326|MultiPoint|2|KO-BKO polyhedralsurfacem|4326|MultiLineString|2|KO-BKO polyhedralsurfacem|4326|MultiPolygon|2|KO-BKO polyhedralsurfacem|4326|GeometryCollection|2|KO-BKO polyhedralsurfacem|4326|CircularString|2|KO-BKO polyhedralsurfacem|4326|CompoundCurve|2|KO-BKO polyhedralsurfacem|4326|CurvePolygon|2|KO-BKO polyhedralsurfacem|4326|MultiCurve|2|KO-BKO polyhedralsurfacem|4326|MultiSurface|2|KO-BKO polyhedralsurfacem|4326|PolyhedralSurface|2|KO-BKO polyhedralsurfacem|4326|Triangle|2|KO-BKO polyhedralsurfacem|4326|Point|1|KO-BKO polyhedralsurfacem|4326|LineString|1|KO-BKO polyhedralsurfacem|4326|Polygon|1|KO-BKO polyhedralsurfacem|4326|MultiPoint|1|KO-BKO polyhedralsurfacem|4326|MultiLineString|1|KO-BKO polyhedralsurfacem|4326|MultiPolygon|1|KO-BKO polyhedralsurfacem|4326|GeometryCollection|1|KO-BKO polyhedralsurfacem|4326|CircularString|1|KO-BKO polyhedralsurfacem|4326|CompoundCurve|1|KO-BKO polyhedralsurfacem|4326|CurvePolygon|1|KO-BKO polyhedralsurfacem|4326|MultiCurve|1|KO-BKO polyhedralsurfacem|4326|MultiSurface|1|KO-BKO polyhedralsurfacem|4326|PolyhedralSurface|1|OK-BOK polyhedralsurfacem|4326|Triangle|1|KO-BKO polyhedralsurfacem|4326|Point|3|KO-BKO polyhedralsurfacem|4326|LineString|3|KO-BKO polyhedralsurfacem|4326|Polygon|3|KO-BKO polyhedralsurfacem|4326|MultiPoint|3|KO-BKO polyhedralsurfacem|4326|MultiLineString|3|KO-BKO polyhedralsurfacem|4326|MultiPolygon|3|KO-BKO polyhedralsurfacem|4326|GeometryCollection|3|KO-BKO polyhedralsurfacem|4326|CircularString|3|KO-BKO polyhedralsurfacem|4326|CompoundCurve|3|KO-BKO polyhedralsurfacem|4326|CurvePolygon|3|KO-BKO polyhedralsurfacem|4326|MultiCurve|3|KO-BKO polyhedralsurfacem|4326|MultiSurface|3|KO-BKO polyhedralsurfacem|4326|PolyhedralSurface|3|KO-BKO polyhedralsurfacem|4326|Triangle|3|KO-BKO polyhedralsurfacem||COUNT|4| polyhedralsurfacem0|0|Point|0|KO-BKO polyhedralsurfacem0|0|LineString|0|KO-BKO polyhedralsurfacem0|0|Polygon|0|KO-BKO polyhedralsurfacem0|0|MultiPoint|0|KO-BKO polyhedralsurfacem0|0|MultiLineString|0|KO-BKO polyhedralsurfacem0|0|MultiPolygon|0|KO-BKO polyhedralsurfacem0|0|GeometryCollection|0|KO-BKO polyhedralsurfacem0|0|CircularString|0|KO-BKO polyhedralsurfacem0|0|CompoundCurve|0|KO-BKO polyhedralsurfacem0|0|CurvePolygon|0|KO-BKO polyhedralsurfacem0|0|MultiCurve|0|KO-BKO polyhedralsurfacem0|0|MultiSurface|0|KO-BKO polyhedralsurfacem0|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacem0|0|Triangle|0|KO-BKO polyhedralsurfacem0|0|Tin|0|KO-BKO polyhedralsurfacem0|0|Point|2|KO-BKO polyhedralsurfacem0|0|LineString|2|KO-BKO polyhedralsurfacem0|0|Polygon|2|KO-BKO polyhedralsurfacem0|0|MultiPoint|2|KO-BKO polyhedralsurfacem0|0|MultiLineString|2|KO-BKO polyhedralsurfacem0|0|MultiPolygon|2|KO-BKO polyhedralsurfacem0|0|GeometryCollection|2|KO-BKO polyhedralsurfacem0|0|CircularString|2|KO-BKO polyhedralsurfacem0|0|CompoundCurve|2|KO-BKO polyhedralsurfacem0|0|CurvePolygon|2|KO-BKO polyhedralsurfacem0|0|MultiCurve|2|KO-BKO polyhedralsurfacem0|0|MultiSurface|2|KO-BKO polyhedralsurfacem0|0|PolyhedralSurface|2|KO-BKO polyhedralsurfacem0|0|Triangle|2|KO-BKO polyhedralsurfacem0|0|Point|1|KO-BKO polyhedralsurfacem0|0|LineString|1|KO-BKO polyhedralsurfacem0|0|Polygon|1|KO-BKO polyhedralsurfacem0|0|MultiPoint|1|KO-BKO polyhedralsurfacem0|0|MultiLineString|1|KO-BKO polyhedralsurfacem0|0|MultiPolygon|1|KO-BKO polyhedralsurfacem0|0|GeometryCollection|1|KO-BKO polyhedralsurfacem0|0|CircularString|1|KO-BKO polyhedralsurfacem0|0|CompoundCurve|1|KO-BKO polyhedralsurfacem0|0|CurvePolygon|1|KO-BKO polyhedralsurfacem0|0|MultiCurve|1|KO-BKO polyhedralsurfacem0|0|MultiSurface|1|KO-BKO polyhedralsurfacem0|0|PolyhedralSurface|1|OK-BOK polyhedralsurfacem0|0|Triangle|1|KO-BKO polyhedralsurfacem0|0|Point|3|KO-BKO polyhedralsurfacem0|0|LineString|3|KO-BKO polyhedralsurfacem0|0|Polygon|3|KO-BKO polyhedralsurfacem0|0|MultiPoint|3|KO-BKO polyhedralsurfacem0|0|MultiLineString|3|KO-BKO polyhedralsurfacem0|0|MultiPolygon|3|KO-BKO polyhedralsurfacem0|0|GeometryCollection|3|KO-BKO polyhedralsurfacem0|0|CircularString|3|KO-BKO polyhedralsurfacem0|0|CompoundCurve|3|KO-BKO polyhedralsurfacem0|0|CurvePolygon|3|KO-BKO polyhedralsurfacem0|0|MultiCurve|3|KO-BKO polyhedralsurfacem0|0|MultiSurface|3|KO-BKO polyhedralsurfacem0|0|PolyhedralSurface|3|KO-BKO polyhedralsurfacem0|0|Triangle|3|KO-BKO polyhedralsurfacem0|4326|Point|0|KO-BKO polyhedralsurfacem0|4326|LineString|0|KO-BKO polyhedralsurfacem0|4326|Polygon|0|KO-BKO polyhedralsurfacem0|4326|MultiPoint|0|KO-BKO polyhedralsurfacem0|4326|MultiLineString|0|KO-BKO polyhedralsurfacem0|4326|MultiPolygon|0|KO-BKO polyhedralsurfacem0|4326|GeometryCollection|0|KO-BKO polyhedralsurfacem0|4326|CircularString|0|KO-BKO polyhedralsurfacem0|4326|CompoundCurve|0|KO-BKO polyhedralsurfacem0|4326|CurvePolygon|0|KO-BKO polyhedralsurfacem0|4326|MultiCurve|0|KO-BKO polyhedralsurfacem0|4326|MultiSurface|0|KO-BKO polyhedralsurfacem0|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacem0|4326|Triangle|0|KO-BKO polyhedralsurfacem0|4326|Tin|0|KO-BKO polyhedralsurfacem0|4326|Point|2|KO-BKO polyhedralsurfacem0|4326|LineString|2|KO-BKO polyhedralsurfacem0|4326|Polygon|2|KO-BKO polyhedralsurfacem0|4326|MultiPoint|2|KO-BKO polyhedralsurfacem0|4326|MultiLineString|2|KO-BKO polyhedralsurfacem0|4326|MultiPolygon|2|KO-BKO polyhedralsurfacem0|4326|GeometryCollection|2|KO-BKO polyhedralsurfacem0|4326|CircularString|2|KO-BKO polyhedralsurfacem0|4326|CompoundCurve|2|KO-BKO polyhedralsurfacem0|4326|CurvePolygon|2|KO-BKO polyhedralsurfacem0|4326|MultiCurve|2|KO-BKO polyhedralsurfacem0|4326|MultiSurface|2|KO-BKO polyhedralsurfacem0|4326|PolyhedralSurface|2|KO-BKO polyhedralsurfacem0|4326|Triangle|2|KO-BKO polyhedralsurfacem0|4326|Point|1|KO-BKO polyhedralsurfacem0|4326|LineString|1|KO-BKO polyhedralsurfacem0|4326|Polygon|1|KO-BKO polyhedralsurfacem0|4326|MultiPoint|1|KO-BKO polyhedralsurfacem0|4326|MultiLineString|1|KO-BKO polyhedralsurfacem0|4326|MultiPolygon|1|KO-BKO polyhedralsurfacem0|4326|GeometryCollection|1|KO-BKO polyhedralsurfacem0|4326|CircularString|1|KO-BKO polyhedralsurfacem0|4326|CompoundCurve|1|KO-BKO polyhedralsurfacem0|4326|CurvePolygon|1|KO-BKO polyhedralsurfacem0|4326|MultiCurve|1|KO-BKO polyhedralsurfacem0|4326|MultiSurface|1|KO-BKO polyhedralsurfacem0|4326|PolyhedralSurface|1|OK-BOK polyhedralsurfacem0|4326|Triangle|1|KO-BKO polyhedralsurfacem0|4326|Point|3|KO-BKO polyhedralsurfacem0|4326|LineString|3|KO-BKO polyhedralsurfacem0|4326|Polygon|3|KO-BKO polyhedralsurfacem0|4326|MultiPoint|3|KO-BKO polyhedralsurfacem0|4326|MultiLineString|3|KO-BKO polyhedralsurfacem0|4326|MultiPolygon|3|KO-BKO polyhedralsurfacem0|4326|GeometryCollection|3|KO-BKO polyhedralsurfacem0|4326|CircularString|3|KO-BKO polyhedralsurfacem0|4326|CompoundCurve|3|KO-BKO polyhedralsurfacem0|4326|CurvePolygon|3|KO-BKO polyhedralsurfacem0|4326|MultiCurve|3|KO-BKO polyhedralsurfacem0|4326|MultiSurface|3|KO-BKO polyhedralsurfacem0|4326|PolyhedralSurface|3|KO-BKO polyhedralsurfacem0|4326|Triangle|3|KO-BKO polyhedralsurfacem0||COUNT|4| polyhedralsurfacem4326|0|Point|0|KO-BKO polyhedralsurfacem4326|0|LineString|0|KO-BKO polyhedralsurfacem4326|0|Polygon|0|KO-BKO polyhedralsurfacem4326|0|MultiPoint|0|KO-BKO polyhedralsurfacem4326|0|MultiLineString|0|KO-BKO polyhedralsurfacem4326|0|MultiPolygon|0|KO-BKO polyhedralsurfacem4326|0|GeometryCollection|0|KO-BKO polyhedralsurfacem4326|0|CircularString|0|KO-BKO polyhedralsurfacem4326|0|CompoundCurve|0|KO-BKO polyhedralsurfacem4326|0|CurvePolygon|0|KO-BKO polyhedralsurfacem4326|0|MultiCurve|0|KO-BKO polyhedralsurfacem4326|0|MultiSurface|0|KO-BKO polyhedralsurfacem4326|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacem4326|0|Triangle|0|KO-BKO polyhedralsurfacem4326|0|Tin|0|KO-BKO polyhedralsurfacem4326|0|Point|2|KO-BKO polyhedralsurfacem4326|0|LineString|2|KO-BKO polyhedralsurfacem4326|0|Polygon|2|KO-BKO polyhedralsurfacem4326|0|MultiPoint|2|KO-BKO polyhedralsurfacem4326|0|MultiLineString|2|KO-BKO polyhedralsurfacem4326|0|MultiPolygon|2|KO-BKO polyhedralsurfacem4326|0|GeometryCollection|2|KO-BKO polyhedralsurfacem4326|0|CircularString|2|KO-BKO polyhedralsurfacem4326|0|CompoundCurve|2|KO-BKO polyhedralsurfacem4326|0|CurvePolygon|2|KO-BKO polyhedralsurfacem4326|0|MultiCurve|2|KO-BKO polyhedralsurfacem4326|0|MultiSurface|2|KO-BKO polyhedralsurfacem4326|0|PolyhedralSurface|2|KO-BKO polyhedralsurfacem4326|0|Triangle|2|KO-BKO polyhedralsurfacem4326|0|Point|1|KO-BKO polyhedralsurfacem4326|0|LineString|1|KO-BKO polyhedralsurfacem4326|0|Polygon|1|KO-BKO polyhedralsurfacem4326|0|MultiPoint|1|KO-BKO polyhedralsurfacem4326|0|MultiLineString|1|KO-BKO polyhedralsurfacem4326|0|MultiPolygon|1|KO-BKO polyhedralsurfacem4326|0|GeometryCollection|1|KO-BKO polyhedralsurfacem4326|0|CircularString|1|KO-BKO polyhedralsurfacem4326|0|CompoundCurve|1|KO-BKO polyhedralsurfacem4326|0|CurvePolygon|1|KO-BKO polyhedralsurfacem4326|0|MultiCurve|1|KO-BKO polyhedralsurfacem4326|0|MultiSurface|1|KO-BKO polyhedralsurfacem4326|0|PolyhedralSurface|1|KO-BKO polyhedralsurfacem4326|0|Triangle|1|KO-BKO polyhedralsurfacem4326|0|Point|3|KO-BKO polyhedralsurfacem4326|0|LineString|3|KO-BKO polyhedralsurfacem4326|0|Polygon|3|KO-BKO polyhedralsurfacem4326|0|MultiPoint|3|KO-BKO polyhedralsurfacem4326|0|MultiLineString|3|KO-BKO polyhedralsurfacem4326|0|MultiPolygon|3|KO-BKO polyhedralsurfacem4326|0|GeometryCollection|3|KO-BKO polyhedralsurfacem4326|0|CircularString|3|KO-BKO polyhedralsurfacem4326|0|CompoundCurve|3|KO-BKO polyhedralsurfacem4326|0|CurvePolygon|3|KO-BKO polyhedralsurfacem4326|0|MultiCurve|3|KO-BKO polyhedralsurfacem4326|0|MultiSurface|3|KO-BKO polyhedralsurfacem4326|0|PolyhedralSurface|3|KO-BKO polyhedralsurfacem4326|0|Triangle|3|KO-BKO polyhedralsurfacem4326|4326|Point|0|KO-BKO polyhedralsurfacem4326|4326|LineString|0|KO-BKO polyhedralsurfacem4326|4326|Polygon|0|KO-BKO polyhedralsurfacem4326|4326|MultiPoint|0|KO-BKO polyhedralsurfacem4326|4326|MultiLineString|0|KO-BKO polyhedralsurfacem4326|4326|MultiPolygon|0|KO-BKO polyhedralsurfacem4326|4326|GeometryCollection|0|KO-BKO polyhedralsurfacem4326|4326|CircularString|0|KO-BKO polyhedralsurfacem4326|4326|CompoundCurve|0|KO-BKO polyhedralsurfacem4326|4326|CurvePolygon|0|KO-BKO polyhedralsurfacem4326|4326|MultiCurve|0|KO-BKO polyhedralsurfacem4326|4326|MultiSurface|0|KO-BKO polyhedralsurfacem4326|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacem4326|4326|Triangle|0|KO-BKO polyhedralsurfacem4326|4326|Tin|0|KO-BKO polyhedralsurfacem4326|4326|Point|2|KO-BKO polyhedralsurfacem4326|4326|LineString|2|KO-BKO polyhedralsurfacem4326|4326|Polygon|2|KO-BKO polyhedralsurfacem4326|4326|MultiPoint|2|KO-BKO polyhedralsurfacem4326|4326|MultiLineString|2|KO-BKO polyhedralsurfacem4326|4326|MultiPolygon|2|KO-BKO polyhedralsurfacem4326|4326|GeometryCollection|2|KO-BKO polyhedralsurfacem4326|4326|CircularString|2|KO-BKO polyhedralsurfacem4326|4326|CompoundCurve|2|KO-BKO polyhedralsurfacem4326|4326|CurvePolygon|2|KO-BKO polyhedralsurfacem4326|4326|MultiCurve|2|KO-BKO polyhedralsurfacem4326|4326|MultiSurface|2|KO-BKO polyhedralsurfacem4326|4326|PolyhedralSurface|2|KO-BKO polyhedralsurfacem4326|4326|Triangle|2|KO-BKO polyhedralsurfacem4326|4326|Point|1|KO-BKO polyhedralsurfacem4326|4326|LineString|1|KO-BKO polyhedralsurfacem4326|4326|Polygon|1|KO-BKO polyhedralsurfacem4326|4326|MultiPoint|1|KO-BKO polyhedralsurfacem4326|4326|MultiLineString|1|KO-BKO polyhedralsurfacem4326|4326|MultiPolygon|1|KO-BKO polyhedralsurfacem4326|4326|GeometryCollection|1|KO-BKO polyhedralsurfacem4326|4326|CircularString|1|KO-BKO polyhedralsurfacem4326|4326|CompoundCurve|1|KO-BKO polyhedralsurfacem4326|4326|CurvePolygon|1|KO-BKO polyhedralsurfacem4326|4326|MultiCurve|1|KO-BKO polyhedralsurfacem4326|4326|MultiSurface|1|KO-BKO polyhedralsurfacem4326|4326|PolyhedralSurface|1|OK-BOK polyhedralsurfacem4326|4326|Triangle|1|KO-BKO polyhedralsurfacem4326|4326|Point|3|KO-BKO polyhedralsurfacem4326|4326|LineString|3|KO-BKO polyhedralsurfacem4326|4326|Polygon|3|KO-BKO polyhedralsurfacem4326|4326|MultiPoint|3|KO-BKO polyhedralsurfacem4326|4326|MultiLineString|3|KO-BKO polyhedralsurfacem4326|4326|MultiPolygon|3|KO-BKO polyhedralsurfacem4326|4326|GeometryCollection|3|KO-BKO polyhedralsurfacem4326|4326|CircularString|3|KO-BKO polyhedralsurfacem4326|4326|CompoundCurve|3|KO-BKO polyhedralsurfacem4326|4326|CurvePolygon|3|KO-BKO polyhedralsurfacem4326|4326|MultiCurve|3|KO-BKO polyhedralsurfacem4326|4326|MultiSurface|3|KO-BKO polyhedralsurfacem4326|4326|PolyhedralSurface|3|KO-BKO polyhedralsurfacem4326|4326|Triangle|3|KO-BKO polyhedralsurfacem4326||COUNT|2| polyhedralsurfacez|0|Point|0|KO-BKO polyhedralsurfacez|0|LineString|0|KO-BKO polyhedralsurfacez|0|Polygon|0|KO-BKO polyhedralsurfacez|0|MultiPoint|0|KO-BKO polyhedralsurfacez|0|MultiLineString|0|KO-BKO polyhedralsurfacez|0|MultiPolygon|0|KO-BKO polyhedralsurfacez|0|GeometryCollection|0|KO-BKO polyhedralsurfacez|0|CircularString|0|KO-BKO polyhedralsurfacez|0|CompoundCurve|0|KO-BKO polyhedralsurfacez|0|CurvePolygon|0|KO-BKO polyhedralsurfacez|0|MultiCurve|0|KO-BKO polyhedralsurfacez|0|MultiSurface|0|KO-BKO polyhedralsurfacez|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacez|0|Triangle|0|KO-BKO polyhedralsurfacez|0|Tin|0|KO-BKO polyhedralsurfacez|0|Point|2|KO-BKO polyhedralsurfacez|0|LineString|2|KO-BKO polyhedralsurfacez|0|Polygon|2|KO-BKO polyhedralsurfacez|0|MultiPoint|2|KO-BKO polyhedralsurfacez|0|MultiLineString|2|KO-BKO polyhedralsurfacez|0|MultiPolygon|2|KO-BKO polyhedralsurfacez|0|GeometryCollection|2|KO-BKO polyhedralsurfacez|0|CircularString|2|KO-BKO polyhedralsurfacez|0|CompoundCurve|2|KO-BKO polyhedralsurfacez|0|CurvePolygon|2|KO-BKO polyhedralsurfacez|0|MultiCurve|2|KO-BKO polyhedralsurfacez|0|MultiSurface|2|KO-BKO polyhedralsurfacez|0|PolyhedralSurface|2|OK-BOK polyhedralsurfacez|0|Triangle|2|KO-BKO polyhedralsurfacez|0|Point|1|KO-BKO polyhedralsurfacez|0|LineString|1|KO-BKO polyhedralsurfacez|0|Polygon|1|KO-BKO polyhedralsurfacez|0|MultiPoint|1|KO-BKO polyhedralsurfacez|0|MultiLineString|1|KO-BKO polyhedralsurfacez|0|MultiPolygon|1|KO-BKO polyhedralsurfacez|0|GeometryCollection|1|KO-BKO polyhedralsurfacez|0|CircularString|1|KO-BKO polyhedralsurfacez|0|CompoundCurve|1|KO-BKO polyhedralsurfacez|0|CurvePolygon|1|KO-BKO polyhedralsurfacez|0|MultiCurve|1|KO-BKO polyhedralsurfacez|0|MultiSurface|1|KO-BKO polyhedralsurfacez|0|PolyhedralSurface|1|KO-BKO polyhedralsurfacez|0|Triangle|1|KO-BKO polyhedralsurfacez|0|Point|3|KO-BKO polyhedralsurfacez|0|LineString|3|KO-BKO polyhedralsurfacez|0|Polygon|3|KO-BKO polyhedralsurfacez|0|MultiPoint|3|KO-BKO polyhedralsurfacez|0|MultiLineString|3|KO-BKO polyhedralsurfacez|0|MultiPolygon|3|KO-BKO polyhedralsurfacez|0|GeometryCollection|3|KO-BKO polyhedralsurfacez|0|CircularString|3|KO-BKO polyhedralsurfacez|0|CompoundCurve|3|KO-BKO polyhedralsurfacez|0|CurvePolygon|3|KO-BKO polyhedralsurfacez|0|MultiCurve|3|KO-BKO polyhedralsurfacez|0|MultiSurface|3|KO-BKO polyhedralsurfacez|0|PolyhedralSurface|3|KO-BKO polyhedralsurfacez|0|Triangle|3|KO-BKO polyhedralsurfacez|4326|Point|0|KO-BKO polyhedralsurfacez|4326|LineString|0|KO-BKO polyhedralsurfacez|4326|Polygon|0|KO-BKO polyhedralsurfacez|4326|MultiPoint|0|KO-BKO polyhedralsurfacez|4326|MultiLineString|0|KO-BKO polyhedralsurfacez|4326|MultiPolygon|0|KO-BKO polyhedralsurfacez|4326|GeometryCollection|0|KO-BKO polyhedralsurfacez|4326|CircularString|0|KO-BKO polyhedralsurfacez|4326|CompoundCurve|0|KO-BKO polyhedralsurfacez|4326|CurvePolygon|0|KO-BKO polyhedralsurfacez|4326|MultiCurve|0|KO-BKO polyhedralsurfacez|4326|MultiSurface|0|KO-BKO polyhedralsurfacez|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacez|4326|Triangle|0|KO-BKO polyhedralsurfacez|4326|Tin|0|KO-BKO polyhedralsurfacez|4326|Point|2|KO-BKO polyhedralsurfacez|4326|LineString|2|KO-BKO polyhedralsurfacez|4326|Polygon|2|KO-BKO polyhedralsurfacez|4326|MultiPoint|2|KO-BKO polyhedralsurfacez|4326|MultiLineString|2|KO-BKO polyhedralsurfacez|4326|MultiPolygon|2|KO-BKO polyhedralsurfacez|4326|GeometryCollection|2|KO-BKO polyhedralsurfacez|4326|CircularString|2|KO-BKO polyhedralsurfacez|4326|CompoundCurve|2|KO-BKO polyhedralsurfacez|4326|CurvePolygon|2|KO-BKO polyhedralsurfacez|4326|MultiCurve|2|KO-BKO polyhedralsurfacez|4326|MultiSurface|2|KO-BKO polyhedralsurfacez|4326|PolyhedralSurface|2|OK-BOK polyhedralsurfacez|4326|Triangle|2|KO-BKO polyhedralsurfacez|4326|Point|1|KO-BKO polyhedralsurfacez|4326|LineString|1|KO-BKO polyhedralsurfacez|4326|Polygon|1|KO-BKO polyhedralsurfacez|4326|MultiPoint|1|KO-BKO polyhedralsurfacez|4326|MultiLineString|1|KO-BKO polyhedralsurfacez|4326|MultiPolygon|1|KO-BKO polyhedralsurfacez|4326|GeometryCollection|1|KO-BKO polyhedralsurfacez|4326|CircularString|1|KO-BKO polyhedralsurfacez|4326|CompoundCurve|1|KO-BKO polyhedralsurfacez|4326|CurvePolygon|1|KO-BKO polyhedralsurfacez|4326|MultiCurve|1|KO-BKO polyhedralsurfacez|4326|MultiSurface|1|KO-BKO polyhedralsurfacez|4326|PolyhedralSurface|1|KO-BKO polyhedralsurfacez|4326|Triangle|1|KO-BKO polyhedralsurfacez|4326|Point|3|KO-BKO polyhedralsurfacez|4326|LineString|3|KO-BKO polyhedralsurfacez|4326|Polygon|3|KO-BKO polyhedralsurfacez|4326|MultiPoint|3|KO-BKO polyhedralsurfacez|4326|MultiLineString|3|KO-BKO polyhedralsurfacez|4326|MultiPolygon|3|KO-BKO polyhedralsurfacez|4326|GeometryCollection|3|KO-BKO polyhedralsurfacez|4326|CircularString|3|KO-BKO polyhedralsurfacez|4326|CompoundCurve|3|KO-BKO polyhedralsurfacez|4326|CurvePolygon|3|KO-BKO polyhedralsurfacez|4326|MultiCurve|3|KO-BKO polyhedralsurfacez|4326|MultiSurface|3|KO-BKO polyhedralsurfacez|4326|PolyhedralSurface|3|KO-BKO polyhedralsurfacez|4326|Triangle|3|KO-BKO polyhedralsurfacez||COUNT|4| polyhedralsurfacez0|0|Point|0|KO-BKO polyhedralsurfacez0|0|LineString|0|KO-BKO polyhedralsurfacez0|0|Polygon|0|KO-BKO polyhedralsurfacez0|0|MultiPoint|0|KO-BKO polyhedralsurfacez0|0|MultiLineString|0|KO-BKO polyhedralsurfacez0|0|MultiPolygon|0|KO-BKO polyhedralsurfacez0|0|GeometryCollection|0|KO-BKO polyhedralsurfacez0|0|CircularString|0|KO-BKO polyhedralsurfacez0|0|CompoundCurve|0|KO-BKO polyhedralsurfacez0|0|CurvePolygon|0|KO-BKO polyhedralsurfacez0|0|MultiCurve|0|KO-BKO polyhedralsurfacez0|0|MultiSurface|0|KO-BKO polyhedralsurfacez0|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacez0|0|Triangle|0|KO-BKO polyhedralsurfacez0|0|Tin|0|KO-BKO polyhedralsurfacez0|0|Point|2|KO-BKO polyhedralsurfacez0|0|LineString|2|KO-BKO polyhedralsurfacez0|0|Polygon|2|KO-BKO polyhedralsurfacez0|0|MultiPoint|2|KO-BKO polyhedralsurfacez0|0|MultiLineString|2|KO-BKO polyhedralsurfacez0|0|MultiPolygon|2|KO-BKO polyhedralsurfacez0|0|GeometryCollection|2|KO-BKO polyhedralsurfacez0|0|CircularString|2|KO-BKO polyhedralsurfacez0|0|CompoundCurve|2|KO-BKO polyhedralsurfacez0|0|CurvePolygon|2|KO-BKO polyhedralsurfacez0|0|MultiCurve|2|KO-BKO polyhedralsurfacez0|0|MultiSurface|2|KO-BKO polyhedralsurfacez0|0|PolyhedralSurface|2|OK-BOK polyhedralsurfacez0|0|Triangle|2|KO-BKO polyhedralsurfacez0|0|Point|1|KO-BKO polyhedralsurfacez0|0|LineString|1|KO-BKO polyhedralsurfacez0|0|Polygon|1|KO-BKO polyhedralsurfacez0|0|MultiPoint|1|KO-BKO polyhedralsurfacez0|0|MultiLineString|1|KO-BKO polyhedralsurfacez0|0|MultiPolygon|1|KO-BKO polyhedralsurfacez0|0|GeometryCollection|1|KO-BKO polyhedralsurfacez0|0|CircularString|1|KO-BKO polyhedralsurfacez0|0|CompoundCurve|1|KO-BKO polyhedralsurfacez0|0|CurvePolygon|1|KO-BKO polyhedralsurfacez0|0|MultiCurve|1|KO-BKO polyhedralsurfacez0|0|MultiSurface|1|KO-BKO polyhedralsurfacez0|0|PolyhedralSurface|1|KO-BKO polyhedralsurfacez0|0|Triangle|1|KO-BKO polyhedralsurfacez0|0|Point|3|KO-BKO polyhedralsurfacez0|0|LineString|3|KO-BKO polyhedralsurfacez0|0|Polygon|3|KO-BKO polyhedralsurfacez0|0|MultiPoint|3|KO-BKO polyhedralsurfacez0|0|MultiLineString|3|KO-BKO polyhedralsurfacez0|0|MultiPolygon|3|KO-BKO polyhedralsurfacez0|0|GeometryCollection|3|KO-BKO polyhedralsurfacez0|0|CircularString|3|KO-BKO polyhedralsurfacez0|0|CompoundCurve|3|KO-BKO polyhedralsurfacez0|0|CurvePolygon|3|KO-BKO polyhedralsurfacez0|0|MultiCurve|3|KO-BKO polyhedralsurfacez0|0|MultiSurface|3|KO-BKO polyhedralsurfacez0|0|PolyhedralSurface|3|KO-BKO polyhedralsurfacez0|0|Triangle|3|KO-BKO polyhedralsurfacez0|4326|Point|0|KO-BKO polyhedralsurfacez0|4326|LineString|0|KO-BKO polyhedralsurfacez0|4326|Polygon|0|KO-BKO polyhedralsurfacez0|4326|MultiPoint|0|KO-BKO polyhedralsurfacez0|4326|MultiLineString|0|KO-BKO polyhedralsurfacez0|4326|MultiPolygon|0|KO-BKO polyhedralsurfacez0|4326|GeometryCollection|0|KO-BKO polyhedralsurfacez0|4326|CircularString|0|KO-BKO polyhedralsurfacez0|4326|CompoundCurve|0|KO-BKO polyhedralsurfacez0|4326|CurvePolygon|0|KO-BKO polyhedralsurfacez0|4326|MultiCurve|0|KO-BKO polyhedralsurfacez0|4326|MultiSurface|0|KO-BKO polyhedralsurfacez0|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacez0|4326|Triangle|0|KO-BKO polyhedralsurfacez0|4326|Tin|0|KO-BKO polyhedralsurfacez0|4326|Point|2|KO-BKO polyhedralsurfacez0|4326|LineString|2|KO-BKO polyhedralsurfacez0|4326|Polygon|2|KO-BKO polyhedralsurfacez0|4326|MultiPoint|2|KO-BKO polyhedralsurfacez0|4326|MultiLineString|2|KO-BKO polyhedralsurfacez0|4326|MultiPolygon|2|KO-BKO polyhedralsurfacez0|4326|GeometryCollection|2|KO-BKO polyhedralsurfacez0|4326|CircularString|2|KO-BKO polyhedralsurfacez0|4326|CompoundCurve|2|KO-BKO polyhedralsurfacez0|4326|CurvePolygon|2|KO-BKO polyhedralsurfacez0|4326|MultiCurve|2|KO-BKO polyhedralsurfacez0|4326|MultiSurface|2|KO-BKO polyhedralsurfacez0|4326|PolyhedralSurface|2|OK-BOK polyhedralsurfacez0|4326|Triangle|2|KO-BKO polyhedralsurfacez0|4326|Point|1|KO-BKO polyhedralsurfacez0|4326|LineString|1|KO-BKO polyhedralsurfacez0|4326|Polygon|1|KO-BKO polyhedralsurfacez0|4326|MultiPoint|1|KO-BKO polyhedralsurfacez0|4326|MultiLineString|1|KO-BKO polyhedralsurfacez0|4326|MultiPolygon|1|KO-BKO polyhedralsurfacez0|4326|GeometryCollection|1|KO-BKO polyhedralsurfacez0|4326|CircularString|1|KO-BKO polyhedralsurfacez0|4326|CompoundCurve|1|KO-BKO polyhedralsurfacez0|4326|CurvePolygon|1|KO-BKO polyhedralsurfacez0|4326|MultiCurve|1|KO-BKO polyhedralsurfacez0|4326|MultiSurface|1|KO-BKO polyhedralsurfacez0|4326|PolyhedralSurface|1|KO-BKO polyhedralsurfacez0|4326|Triangle|1|KO-BKO polyhedralsurfacez0|4326|Point|3|KO-BKO polyhedralsurfacez0|4326|LineString|3|KO-BKO polyhedralsurfacez0|4326|Polygon|3|KO-BKO polyhedralsurfacez0|4326|MultiPoint|3|KO-BKO polyhedralsurfacez0|4326|MultiLineString|3|KO-BKO polyhedralsurfacez0|4326|MultiPolygon|3|KO-BKO polyhedralsurfacez0|4326|GeometryCollection|3|KO-BKO polyhedralsurfacez0|4326|CircularString|3|KO-BKO polyhedralsurfacez0|4326|CompoundCurve|3|KO-BKO polyhedralsurfacez0|4326|CurvePolygon|3|KO-BKO polyhedralsurfacez0|4326|MultiCurve|3|KO-BKO polyhedralsurfacez0|4326|MultiSurface|3|KO-BKO polyhedralsurfacez0|4326|PolyhedralSurface|3|KO-BKO polyhedralsurfacez0|4326|Triangle|3|KO-BKO polyhedralsurfacez0||COUNT|4| polyhedralsurfacez4326|0|Point|0|KO-BKO polyhedralsurfacez4326|0|LineString|0|KO-BKO polyhedralsurfacez4326|0|Polygon|0|KO-BKO polyhedralsurfacez4326|0|MultiPoint|0|KO-BKO polyhedralsurfacez4326|0|MultiLineString|0|KO-BKO polyhedralsurfacez4326|0|MultiPolygon|0|KO-BKO polyhedralsurfacez4326|0|GeometryCollection|0|KO-BKO polyhedralsurfacez4326|0|CircularString|0|KO-BKO polyhedralsurfacez4326|0|CompoundCurve|0|KO-BKO polyhedralsurfacez4326|0|CurvePolygon|0|KO-BKO polyhedralsurfacez4326|0|MultiCurve|0|KO-BKO polyhedralsurfacez4326|0|MultiSurface|0|KO-BKO polyhedralsurfacez4326|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacez4326|0|Triangle|0|KO-BKO polyhedralsurfacez4326|0|Tin|0|KO-BKO polyhedralsurfacez4326|0|Point|2|KO-BKO polyhedralsurfacez4326|0|LineString|2|KO-BKO polyhedralsurfacez4326|0|Polygon|2|KO-BKO polyhedralsurfacez4326|0|MultiPoint|2|KO-BKO polyhedralsurfacez4326|0|MultiLineString|2|KO-BKO polyhedralsurfacez4326|0|MultiPolygon|2|KO-BKO polyhedralsurfacez4326|0|GeometryCollection|2|KO-BKO polyhedralsurfacez4326|0|CircularString|2|KO-BKO polyhedralsurfacez4326|0|CompoundCurve|2|KO-BKO polyhedralsurfacez4326|0|CurvePolygon|2|KO-BKO polyhedralsurfacez4326|0|MultiCurve|2|KO-BKO polyhedralsurfacez4326|0|MultiSurface|2|KO-BKO polyhedralsurfacez4326|0|PolyhedralSurface|2|KO-BKO polyhedralsurfacez4326|0|Triangle|2|KO-BKO polyhedralsurfacez4326|0|Point|1|KO-BKO polyhedralsurfacez4326|0|LineString|1|KO-BKO polyhedralsurfacez4326|0|Polygon|1|KO-BKO polyhedralsurfacez4326|0|MultiPoint|1|KO-BKO polyhedralsurfacez4326|0|MultiLineString|1|KO-BKO polyhedralsurfacez4326|0|MultiPolygon|1|KO-BKO polyhedralsurfacez4326|0|GeometryCollection|1|KO-BKO polyhedralsurfacez4326|0|CircularString|1|KO-BKO polyhedralsurfacez4326|0|CompoundCurve|1|KO-BKO polyhedralsurfacez4326|0|CurvePolygon|1|KO-BKO polyhedralsurfacez4326|0|MultiCurve|1|KO-BKO polyhedralsurfacez4326|0|MultiSurface|1|KO-BKO polyhedralsurfacez4326|0|PolyhedralSurface|1|KO-BKO polyhedralsurfacez4326|0|Triangle|1|KO-BKO polyhedralsurfacez4326|0|Point|3|KO-BKO polyhedralsurfacez4326|0|LineString|3|KO-BKO polyhedralsurfacez4326|0|Polygon|3|KO-BKO polyhedralsurfacez4326|0|MultiPoint|3|KO-BKO polyhedralsurfacez4326|0|MultiLineString|3|KO-BKO polyhedralsurfacez4326|0|MultiPolygon|3|KO-BKO polyhedralsurfacez4326|0|GeometryCollection|3|KO-BKO polyhedralsurfacez4326|0|CircularString|3|KO-BKO polyhedralsurfacez4326|0|CompoundCurve|3|KO-BKO polyhedralsurfacez4326|0|CurvePolygon|3|KO-BKO polyhedralsurfacez4326|0|MultiCurve|3|KO-BKO polyhedralsurfacez4326|0|MultiSurface|3|KO-BKO polyhedralsurfacez4326|0|PolyhedralSurface|3|KO-BKO polyhedralsurfacez4326|0|Triangle|3|KO-BKO polyhedralsurfacez4326|4326|Point|0|KO-BKO polyhedralsurfacez4326|4326|LineString|0|KO-BKO polyhedralsurfacez4326|4326|Polygon|0|KO-BKO polyhedralsurfacez4326|4326|MultiPoint|0|KO-BKO polyhedralsurfacez4326|4326|MultiLineString|0|KO-BKO polyhedralsurfacez4326|4326|MultiPolygon|0|KO-BKO polyhedralsurfacez4326|4326|GeometryCollection|0|KO-BKO polyhedralsurfacez4326|4326|CircularString|0|KO-BKO polyhedralsurfacez4326|4326|CompoundCurve|0|KO-BKO polyhedralsurfacez4326|4326|CurvePolygon|0|KO-BKO polyhedralsurfacez4326|4326|MultiCurve|0|KO-BKO polyhedralsurfacez4326|4326|MultiSurface|0|KO-BKO polyhedralsurfacez4326|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacez4326|4326|Triangle|0|KO-BKO polyhedralsurfacez4326|4326|Tin|0|KO-BKO polyhedralsurfacez4326|4326|Point|2|KO-BKO polyhedralsurfacez4326|4326|LineString|2|KO-BKO polyhedralsurfacez4326|4326|Polygon|2|KO-BKO polyhedralsurfacez4326|4326|MultiPoint|2|KO-BKO polyhedralsurfacez4326|4326|MultiLineString|2|KO-BKO polyhedralsurfacez4326|4326|MultiPolygon|2|KO-BKO polyhedralsurfacez4326|4326|GeometryCollection|2|KO-BKO polyhedralsurfacez4326|4326|CircularString|2|KO-BKO polyhedralsurfacez4326|4326|CompoundCurve|2|KO-BKO polyhedralsurfacez4326|4326|CurvePolygon|2|KO-BKO polyhedralsurfacez4326|4326|MultiCurve|2|KO-BKO polyhedralsurfacez4326|4326|MultiSurface|2|KO-BKO polyhedralsurfacez4326|4326|PolyhedralSurface|2|OK-BOK polyhedralsurfacez4326|4326|Triangle|2|KO-BKO polyhedralsurfacez4326|4326|Point|1|KO-BKO polyhedralsurfacez4326|4326|LineString|1|KO-BKO polyhedralsurfacez4326|4326|Polygon|1|KO-BKO polyhedralsurfacez4326|4326|MultiPoint|1|KO-BKO polyhedralsurfacez4326|4326|MultiLineString|1|KO-BKO polyhedralsurfacez4326|4326|MultiPolygon|1|KO-BKO polyhedralsurfacez4326|4326|GeometryCollection|1|KO-BKO polyhedralsurfacez4326|4326|CircularString|1|KO-BKO polyhedralsurfacez4326|4326|CompoundCurve|1|KO-BKO polyhedralsurfacez4326|4326|CurvePolygon|1|KO-BKO polyhedralsurfacez4326|4326|MultiCurve|1|KO-BKO polyhedralsurfacez4326|4326|MultiSurface|1|KO-BKO polyhedralsurfacez4326|4326|PolyhedralSurface|1|KO-BKO polyhedralsurfacez4326|4326|Triangle|1|KO-BKO polyhedralsurfacez4326|4326|Point|3|KO-BKO polyhedralsurfacez4326|4326|LineString|3|KO-BKO polyhedralsurfacez4326|4326|Polygon|3|KO-BKO polyhedralsurfacez4326|4326|MultiPoint|3|KO-BKO polyhedralsurfacez4326|4326|MultiLineString|3|KO-BKO polyhedralsurfacez4326|4326|MultiPolygon|3|KO-BKO polyhedralsurfacez4326|4326|GeometryCollection|3|KO-BKO polyhedralsurfacez4326|4326|CircularString|3|KO-BKO polyhedralsurfacez4326|4326|CompoundCurve|3|KO-BKO polyhedralsurfacez4326|4326|CurvePolygon|3|KO-BKO polyhedralsurfacez4326|4326|MultiCurve|3|KO-BKO polyhedralsurfacez4326|4326|MultiSurface|3|KO-BKO polyhedralsurfacez4326|4326|PolyhedralSurface|3|KO-BKO polyhedralsurfacez4326|4326|Triangle|3|KO-BKO polyhedralsurfacez4326||COUNT|2| polyhedralsurfacezm|0|Point|0|KO-BKO polyhedralsurfacezm|0|LineString|0|KO-BKO polyhedralsurfacezm|0|Polygon|0|KO-BKO polyhedralsurfacezm|0|MultiPoint|0|KO-BKO polyhedralsurfacezm|0|MultiLineString|0|KO-BKO polyhedralsurfacezm|0|MultiPolygon|0|KO-BKO polyhedralsurfacezm|0|GeometryCollection|0|KO-BKO polyhedralsurfacezm|0|CircularString|0|KO-BKO polyhedralsurfacezm|0|CompoundCurve|0|KO-BKO polyhedralsurfacezm|0|CurvePolygon|0|KO-BKO polyhedralsurfacezm|0|MultiCurve|0|KO-BKO polyhedralsurfacezm|0|MultiSurface|0|KO-BKO polyhedralsurfacezm|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacezm|0|Triangle|0|KO-BKO polyhedralsurfacezm|0|Tin|0|KO-BKO polyhedralsurfacezm|0|Point|2|KO-BKO polyhedralsurfacezm|0|LineString|2|KO-BKO polyhedralsurfacezm|0|Polygon|2|KO-BKO polyhedralsurfacezm|0|MultiPoint|2|KO-BKO polyhedralsurfacezm|0|MultiLineString|2|KO-BKO polyhedralsurfacezm|0|MultiPolygon|2|KO-BKO polyhedralsurfacezm|0|GeometryCollection|2|KO-BKO polyhedralsurfacezm|0|CircularString|2|KO-BKO polyhedralsurfacezm|0|CompoundCurve|2|KO-BKO polyhedralsurfacezm|0|CurvePolygon|2|KO-BKO polyhedralsurfacezm|0|MultiCurve|2|KO-BKO polyhedralsurfacezm|0|MultiSurface|2|KO-BKO polyhedralsurfacezm|0|PolyhedralSurface|2|KO-BKO polyhedralsurfacezm|0|Triangle|2|KO-BKO polyhedralsurfacezm|0|Point|1|KO-BKO polyhedralsurfacezm|0|LineString|1|KO-BKO polyhedralsurfacezm|0|Polygon|1|KO-BKO polyhedralsurfacezm|0|MultiPoint|1|KO-BKO polyhedralsurfacezm|0|MultiLineString|1|KO-BKO polyhedralsurfacezm|0|MultiPolygon|1|KO-BKO polyhedralsurfacezm|0|GeometryCollection|1|KO-BKO polyhedralsurfacezm|0|CircularString|1|KO-BKO polyhedralsurfacezm|0|CompoundCurve|1|KO-BKO polyhedralsurfacezm|0|CurvePolygon|1|KO-BKO polyhedralsurfacezm|0|MultiCurve|1|KO-BKO polyhedralsurfacezm|0|MultiSurface|1|KO-BKO polyhedralsurfacezm|0|PolyhedralSurface|1|KO-BKO polyhedralsurfacezm|0|Triangle|1|KO-BKO polyhedralsurfacezm|0|Point|3|KO-BKO polyhedralsurfacezm|0|LineString|3|KO-BKO polyhedralsurfacezm|0|Polygon|3|KO-BKO polyhedralsurfacezm|0|MultiPoint|3|KO-BKO polyhedralsurfacezm|0|MultiLineString|3|KO-BKO polyhedralsurfacezm|0|MultiPolygon|3|KO-BKO polyhedralsurfacezm|0|GeometryCollection|3|KO-BKO polyhedralsurfacezm|0|CircularString|3|KO-BKO polyhedralsurfacezm|0|CompoundCurve|3|KO-BKO polyhedralsurfacezm|0|CurvePolygon|3|KO-BKO polyhedralsurfacezm|0|MultiCurve|3|KO-BKO polyhedralsurfacezm|0|MultiSurface|3|KO-BKO polyhedralsurfacezm|0|PolyhedralSurface|3|OK-BOK polyhedralsurfacezm|0|Triangle|3|KO-BKO polyhedralsurfacezm|4326|Point|0|KO-BKO polyhedralsurfacezm|4326|LineString|0|KO-BKO polyhedralsurfacezm|4326|Polygon|0|KO-BKO polyhedralsurfacezm|4326|MultiPoint|0|KO-BKO polyhedralsurfacezm|4326|MultiLineString|0|KO-BKO polyhedralsurfacezm|4326|MultiPolygon|0|KO-BKO polyhedralsurfacezm|4326|GeometryCollection|0|KO-BKO polyhedralsurfacezm|4326|CircularString|0|KO-BKO polyhedralsurfacezm|4326|CompoundCurve|0|KO-BKO polyhedralsurfacezm|4326|CurvePolygon|0|KO-BKO polyhedralsurfacezm|4326|MultiCurve|0|KO-BKO polyhedralsurfacezm|4326|MultiSurface|0|KO-BKO polyhedralsurfacezm|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacezm|4326|Triangle|0|KO-BKO polyhedralsurfacezm|4326|Tin|0|KO-BKO polyhedralsurfacezm|4326|Point|2|KO-BKO polyhedralsurfacezm|4326|LineString|2|KO-BKO polyhedralsurfacezm|4326|Polygon|2|KO-BKO polyhedralsurfacezm|4326|MultiPoint|2|KO-BKO polyhedralsurfacezm|4326|MultiLineString|2|KO-BKO polyhedralsurfacezm|4326|MultiPolygon|2|KO-BKO polyhedralsurfacezm|4326|GeometryCollection|2|KO-BKO polyhedralsurfacezm|4326|CircularString|2|KO-BKO polyhedralsurfacezm|4326|CompoundCurve|2|KO-BKO polyhedralsurfacezm|4326|CurvePolygon|2|KO-BKO polyhedralsurfacezm|4326|MultiCurve|2|KO-BKO polyhedralsurfacezm|4326|MultiSurface|2|KO-BKO polyhedralsurfacezm|4326|PolyhedralSurface|2|KO-BKO polyhedralsurfacezm|4326|Triangle|2|KO-BKO polyhedralsurfacezm|4326|Point|1|KO-BKO polyhedralsurfacezm|4326|LineString|1|KO-BKO polyhedralsurfacezm|4326|Polygon|1|KO-BKO polyhedralsurfacezm|4326|MultiPoint|1|KO-BKO polyhedralsurfacezm|4326|MultiLineString|1|KO-BKO polyhedralsurfacezm|4326|MultiPolygon|1|KO-BKO polyhedralsurfacezm|4326|GeometryCollection|1|KO-BKO polyhedralsurfacezm|4326|CircularString|1|KO-BKO polyhedralsurfacezm|4326|CompoundCurve|1|KO-BKO polyhedralsurfacezm|4326|CurvePolygon|1|KO-BKO polyhedralsurfacezm|4326|MultiCurve|1|KO-BKO polyhedralsurfacezm|4326|MultiSurface|1|KO-BKO polyhedralsurfacezm|4326|PolyhedralSurface|1|KO-BKO polyhedralsurfacezm|4326|Triangle|1|KO-BKO polyhedralsurfacezm|4326|Point|3|KO-BKO polyhedralsurfacezm|4326|LineString|3|KO-BKO polyhedralsurfacezm|4326|Polygon|3|KO-BKO polyhedralsurfacezm|4326|MultiPoint|3|KO-BKO polyhedralsurfacezm|4326|MultiLineString|3|KO-BKO polyhedralsurfacezm|4326|MultiPolygon|3|KO-BKO polyhedralsurfacezm|4326|GeometryCollection|3|KO-BKO polyhedralsurfacezm|4326|CircularString|3|KO-BKO polyhedralsurfacezm|4326|CompoundCurve|3|KO-BKO polyhedralsurfacezm|4326|CurvePolygon|3|KO-BKO polyhedralsurfacezm|4326|MultiCurve|3|KO-BKO polyhedralsurfacezm|4326|MultiSurface|3|KO-BKO polyhedralsurfacezm|4326|PolyhedralSurface|3|OK-BOK polyhedralsurfacezm|4326|Triangle|3|KO-BKO polyhedralsurfacezm||COUNT|4| polyhedralsurfacezm0|0|Point|0|KO-BKO polyhedralsurfacezm0|0|LineString|0|KO-BKO polyhedralsurfacezm0|0|Polygon|0|KO-BKO polyhedralsurfacezm0|0|MultiPoint|0|KO-BKO polyhedralsurfacezm0|0|MultiLineString|0|KO-BKO polyhedralsurfacezm0|0|MultiPolygon|0|KO-BKO polyhedralsurfacezm0|0|GeometryCollection|0|KO-BKO polyhedralsurfacezm0|0|CircularString|0|KO-BKO polyhedralsurfacezm0|0|CompoundCurve|0|KO-BKO polyhedralsurfacezm0|0|CurvePolygon|0|KO-BKO polyhedralsurfacezm0|0|MultiCurve|0|KO-BKO polyhedralsurfacezm0|0|MultiSurface|0|KO-BKO polyhedralsurfacezm0|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacezm0|0|Triangle|0|KO-BKO polyhedralsurfacezm0|0|Tin|0|KO-BKO polyhedralsurfacezm0|0|Point|2|KO-BKO polyhedralsurfacezm0|0|LineString|2|KO-BKO polyhedralsurfacezm0|0|Polygon|2|KO-BKO polyhedralsurfacezm0|0|MultiPoint|2|KO-BKO polyhedralsurfacezm0|0|MultiLineString|2|KO-BKO polyhedralsurfacezm0|0|MultiPolygon|2|KO-BKO polyhedralsurfacezm0|0|GeometryCollection|2|KO-BKO polyhedralsurfacezm0|0|CircularString|2|KO-BKO polyhedralsurfacezm0|0|CompoundCurve|2|KO-BKO polyhedralsurfacezm0|0|CurvePolygon|2|KO-BKO polyhedralsurfacezm0|0|MultiCurve|2|KO-BKO polyhedralsurfacezm0|0|MultiSurface|2|KO-BKO polyhedralsurfacezm0|0|PolyhedralSurface|2|KO-BKO polyhedralsurfacezm0|0|Triangle|2|KO-BKO polyhedralsurfacezm0|0|Point|1|KO-BKO polyhedralsurfacezm0|0|LineString|1|KO-BKO polyhedralsurfacezm0|0|Polygon|1|KO-BKO polyhedralsurfacezm0|0|MultiPoint|1|KO-BKO polyhedralsurfacezm0|0|MultiLineString|1|KO-BKO polyhedralsurfacezm0|0|MultiPolygon|1|KO-BKO polyhedralsurfacezm0|0|GeometryCollection|1|KO-BKO polyhedralsurfacezm0|0|CircularString|1|KO-BKO polyhedralsurfacezm0|0|CompoundCurve|1|KO-BKO polyhedralsurfacezm0|0|CurvePolygon|1|KO-BKO polyhedralsurfacezm0|0|MultiCurve|1|KO-BKO polyhedralsurfacezm0|0|MultiSurface|1|KO-BKO polyhedralsurfacezm0|0|PolyhedralSurface|1|KO-BKO polyhedralsurfacezm0|0|Triangle|1|KO-BKO polyhedralsurfacezm0|0|Point|3|KO-BKO polyhedralsurfacezm0|0|LineString|3|KO-BKO polyhedralsurfacezm0|0|Polygon|3|KO-BKO polyhedralsurfacezm0|0|MultiPoint|3|KO-BKO polyhedralsurfacezm0|0|MultiLineString|3|KO-BKO polyhedralsurfacezm0|0|MultiPolygon|3|KO-BKO polyhedralsurfacezm0|0|GeometryCollection|3|KO-BKO polyhedralsurfacezm0|0|CircularString|3|KO-BKO polyhedralsurfacezm0|0|CompoundCurve|3|KO-BKO polyhedralsurfacezm0|0|CurvePolygon|3|KO-BKO polyhedralsurfacezm0|0|MultiCurve|3|KO-BKO polyhedralsurfacezm0|0|MultiSurface|3|KO-BKO polyhedralsurfacezm0|0|PolyhedralSurface|3|OK-BOK polyhedralsurfacezm0|0|Triangle|3|KO-BKO polyhedralsurfacezm0|4326|Point|0|KO-BKO polyhedralsurfacezm0|4326|LineString|0|KO-BKO polyhedralsurfacezm0|4326|Polygon|0|KO-BKO polyhedralsurfacezm0|4326|MultiPoint|0|KO-BKO polyhedralsurfacezm0|4326|MultiLineString|0|KO-BKO polyhedralsurfacezm0|4326|MultiPolygon|0|KO-BKO polyhedralsurfacezm0|4326|GeometryCollection|0|KO-BKO polyhedralsurfacezm0|4326|CircularString|0|KO-BKO polyhedralsurfacezm0|4326|CompoundCurve|0|KO-BKO polyhedralsurfacezm0|4326|CurvePolygon|0|KO-BKO polyhedralsurfacezm0|4326|MultiCurve|0|KO-BKO polyhedralsurfacezm0|4326|MultiSurface|0|KO-BKO polyhedralsurfacezm0|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacezm0|4326|Triangle|0|KO-BKO polyhedralsurfacezm0|4326|Tin|0|KO-BKO polyhedralsurfacezm0|4326|Point|2|KO-BKO polyhedralsurfacezm0|4326|LineString|2|KO-BKO polyhedralsurfacezm0|4326|Polygon|2|KO-BKO polyhedralsurfacezm0|4326|MultiPoint|2|KO-BKO polyhedralsurfacezm0|4326|MultiLineString|2|KO-BKO polyhedralsurfacezm0|4326|MultiPolygon|2|KO-BKO polyhedralsurfacezm0|4326|GeometryCollection|2|KO-BKO polyhedralsurfacezm0|4326|CircularString|2|KO-BKO polyhedralsurfacezm0|4326|CompoundCurve|2|KO-BKO polyhedralsurfacezm0|4326|CurvePolygon|2|KO-BKO polyhedralsurfacezm0|4326|MultiCurve|2|KO-BKO polyhedralsurfacezm0|4326|MultiSurface|2|KO-BKO polyhedralsurfacezm0|4326|PolyhedralSurface|2|KO-BKO polyhedralsurfacezm0|4326|Triangle|2|KO-BKO polyhedralsurfacezm0|4326|Point|1|KO-BKO polyhedralsurfacezm0|4326|LineString|1|KO-BKO polyhedralsurfacezm0|4326|Polygon|1|KO-BKO polyhedralsurfacezm0|4326|MultiPoint|1|KO-BKO polyhedralsurfacezm0|4326|MultiLineString|1|KO-BKO polyhedralsurfacezm0|4326|MultiPolygon|1|KO-BKO polyhedralsurfacezm0|4326|GeometryCollection|1|KO-BKO polyhedralsurfacezm0|4326|CircularString|1|KO-BKO polyhedralsurfacezm0|4326|CompoundCurve|1|KO-BKO polyhedralsurfacezm0|4326|CurvePolygon|1|KO-BKO polyhedralsurfacezm0|4326|MultiCurve|1|KO-BKO polyhedralsurfacezm0|4326|MultiSurface|1|KO-BKO polyhedralsurfacezm0|4326|PolyhedralSurface|1|KO-BKO polyhedralsurfacezm0|4326|Triangle|1|KO-BKO polyhedralsurfacezm0|4326|Point|3|KO-BKO polyhedralsurfacezm0|4326|LineString|3|KO-BKO polyhedralsurfacezm0|4326|Polygon|3|KO-BKO polyhedralsurfacezm0|4326|MultiPoint|3|KO-BKO polyhedralsurfacezm0|4326|MultiLineString|3|KO-BKO polyhedralsurfacezm0|4326|MultiPolygon|3|KO-BKO polyhedralsurfacezm0|4326|GeometryCollection|3|KO-BKO polyhedralsurfacezm0|4326|CircularString|3|KO-BKO polyhedralsurfacezm0|4326|CompoundCurve|3|KO-BKO polyhedralsurfacezm0|4326|CurvePolygon|3|KO-BKO polyhedralsurfacezm0|4326|MultiCurve|3|KO-BKO polyhedralsurfacezm0|4326|MultiSurface|3|KO-BKO polyhedralsurfacezm0|4326|PolyhedralSurface|3|OK-BOK polyhedralsurfacezm0|4326|Triangle|3|KO-BKO polyhedralsurfacezm0||COUNT|4| polyhedralsurfacezm4326|0|Point|0|KO-BKO polyhedralsurfacezm4326|0|LineString|0|KO-BKO polyhedralsurfacezm4326|0|Polygon|0|KO-BKO polyhedralsurfacezm4326|0|MultiPoint|0|KO-BKO polyhedralsurfacezm4326|0|MultiLineString|0|KO-BKO polyhedralsurfacezm4326|0|MultiPolygon|0|KO-BKO polyhedralsurfacezm4326|0|GeometryCollection|0|KO-BKO polyhedralsurfacezm4326|0|CircularString|0|KO-BKO polyhedralsurfacezm4326|0|CompoundCurve|0|KO-BKO polyhedralsurfacezm4326|0|CurvePolygon|0|KO-BKO polyhedralsurfacezm4326|0|MultiCurve|0|KO-BKO polyhedralsurfacezm4326|0|MultiSurface|0|KO-BKO polyhedralsurfacezm4326|0|PolyhedralSurface|0|KO-BKO polyhedralsurfacezm4326|0|Triangle|0|KO-BKO polyhedralsurfacezm4326|0|Tin|0|KO-BKO polyhedralsurfacezm4326|0|Point|2|KO-BKO polyhedralsurfacezm4326|0|LineString|2|KO-BKO polyhedralsurfacezm4326|0|Polygon|2|KO-BKO polyhedralsurfacezm4326|0|MultiPoint|2|KO-BKO polyhedralsurfacezm4326|0|MultiLineString|2|KO-BKO polyhedralsurfacezm4326|0|MultiPolygon|2|KO-BKO polyhedralsurfacezm4326|0|GeometryCollection|2|KO-BKO polyhedralsurfacezm4326|0|CircularString|2|KO-BKO polyhedralsurfacezm4326|0|CompoundCurve|2|KO-BKO polyhedralsurfacezm4326|0|CurvePolygon|2|KO-BKO polyhedralsurfacezm4326|0|MultiCurve|2|KO-BKO polyhedralsurfacezm4326|0|MultiSurface|2|KO-BKO polyhedralsurfacezm4326|0|PolyhedralSurface|2|KO-BKO polyhedralsurfacezm4326|0|Triangle|2|KO-BKO polyhedralsurfacezm4326|0|Point|1|KO-BKO polyhedralsurfacezm4326|0|LineString|1|KO-BKO polyhedralsurfacezm4326|0|Polygon|1|KO-BKO polyhedralsurfacezm4326|0|MultiPoint|1|KO-BKO polyhedralsurfacezm4326|0|MultiLineString|1|KO-BKO polyhedralsurfacezm4326|0|MultiPolygon|1|KO-BKO polyhedralsurfacezm4326|0|GeometryCollection|1|KO-BKO polyhedralsurfacezm4326|0|CircularString|1|KO-BKO polyhedralsurfacezm4326|0|CompoundCurve|1|KO-BKO polyhedralsurfacezm4326|0|CurvePolygon|1|KO-BKO polyhedralsurfacezm4326|0|MultiCurve|1|KO-BKO polyhedralsurfacezm4326|0|MultiSurface|1|KO-BKO polyhedralsurfacezm4326|0|PolyhedralSurface|1|KO-BKO polyhedralsurfacezm4326|0|Triangle|1|KO-BKO polyhedralsurfacezm4326|0|Point|3|KO-BKO polyhedralsurfacezm4326|0|LineString|3|KO-BKO polyhedralsurfacezm4326|0|Polygon|3|KO-BKO polyhedralsurfacezm4326|0|MultiPoint|3|KO-BKO polyhedralsurfacezm4326|0|MultiLineString|3|KO-BKO polyhedralsurfacezm4326|0|MultiPolygon|3|KO-BKO polyhedralsurfacezm4326|0|GeometryCollection|3|KO-BKO polyhedralsurfacezm4326|0|CircularString|3|KO-BKO polyhedralsurfacezm4326|0|CompoundCurve|3|KO-BKO polyhedralsurfacezm4326|0|CurvePolygon|3|KO-BKO polyhedralsurfacezm4326|0|MultiCurve|3|KO-BKO polyhedralsurfacezm4326|0|MultiSurface|3|KO-BKO polyhedralsurfacezm4326|0|PolyhedralSurface|3|KO-BKO polyhedralsurfacezm4326|0|Triangle|3|KO-BKO polyhedralsurfacezm4326|4326|Point|0|KO-BKO polyhedralsurfacezm4326|4326|LineString|0|KO-BKO polyhedralsurfacezm4326|4326|Polygon|0|KO-BKO polyhedralsurfacezm4326|4326|MultiPoint|0|KO-BKO polyhedralsurfacezm4326|4326|MultiLineString|0|KO-BKO polyhedralsurfacezm4326|4326|MultiPolygon|0|KO-BKO polyhedralsurfacezm4326|4326|GeometryCollection|0|KO-BKO polyhedralsurfacezm4326|4326|CircularString|0|KO-BKO polyhedralsurfacezm4326|4326|CompoundCurve|0|KO-BKO polyhedralsurfacezm4326|4326|CurvePolygon|0|KO-BKO polyhedralsurfacezm4326|4326|MultiCurve|0|KO-BKO polyhedralsurfacezm4326|4326|MultiSurface|0|KO-BKO polyhedralsurfacezm4326|4326|PolyhedralSurface|0|KO-BKO polyhedralsurfacezm4326|4326|Triangle|0|KO-BKO polyhedralsurfacezm4326|4326|Tin|0|KO-BKO polyhedralsurfacezm4326|4326|Point|2|KO-BKO polyhedralsurfacezm4326|4326|LineString|2|KO-BKO polyhedralsurfacezm4326|4326|Polygon|2|KO-BKO polyhedralsurfacezm4326|4326|MultiPoint|2|KO-BKO polyhedralsurfacezm4326|4326|MultiLineString|2|KO-BKO polyhedralsurfacezm4326|4326|MultiPolygon|2|KO-BKO polyhedralsurfacezm4326|4326|GeometryCollection|2|KO-BKO polyhedralsurfacezm4326|4326|CircularString|2|KO-BKO polyhedralsurfacezm4326|4326|CompoundCurve|2|KO-BKO polyhedralsurfacezm4326|4326|CurvePolygon|2|KO-BKO polyhedralsurfacezm4326|4326|MultiCurve|2|KO-BKO polyhedralsurfacezm4326|4326|MultiSurface|2|KO-BKO polyhedralsurfacezm4326|4326|PolyhedralSurface|2|KO-BKO polyhedralsurfacezm4326|4326|Triangle|2|KO-BKO polyhedralsurfacezm4326|4326|Point|1|KO-BKO polyhedralsurfacezm4326|4326|LineString|1|KO-BKO polyhedralsurfacezm4326|4326|Polygon|1|KO-BKO polyhedralsurfacezm4326|4326|MultiPoint|1|KO-BKO polyhedralsurfacezm4326|4326|MultiLineString|1|KO-BKO polyhedralsurfacezm4326|4326|MultiPolygon|1|KO-BKO polyhedralsurfacezm4326|4326|GeometryCollection|1|KO-BKO polyhedralsurfacezm4326|4326|CircularString|1|KO-BKO polyhedralsurfacezm4326|4326|CompoundCurve|1|KO-BKO polyhedralsurfacezm4326|4326|CurvePolygon|1|KO-BKO polyhedralsurfacezm4326|4326|MultiCurve|1|KO-BKO polyhedralsurfacezm4326|4326|MultiSurface|1|KO-BKO polyhedralsurfacezm4326|4326|PolyhedralSurface|1|KO-BKO polyhedralsurfacezm4326|4326|Triangle|1|KO-BKO polyhedralsurfacezm4326|4326|Point|3|KO-BKO polyhedralsurfacezm4326|4326|LineString|3|KO-BKO polyhedralsurfacezm4326|4326|Polygon|3|KO-BKO polyhedralsurfacezm4326|4326|MultiPoint|3|KO-BKO polyhedralsurfacezm4326|4326|MultiLineString|3|KO-BKO polyhedralsurfacezm4326|4326|MultiPolygon|3|KO-BKO polyhedralsurfacezm4326|4326|GeometryCollection|3|KO-BKO polyhedralsurfacezm4326|4326|CircularString|3|KO-BKO polyhedralsurfacezm4326|4326|CompoundCurve|3|KO-BKO polyhedralsurfacezm4326|4326|CurvePolygon|3|KO-BKO polyhedralsurfacezm4326|4326|MultiCurve|3|KO-BKO polyhedralsurfacezm4326|4326|MultiSurface|3|KO-BKO polyhedralsurfacezm4326|4326|PolyhedralSurface|3|OK-BOK polyhedralsurfacezm4326|4326|Triangle|3|KO-BKO polyhedralsurfacezm4326||COUNT|2| tin|0|Point|0|KO-BKO tin|0|LineString|0|KO-BKO tin|0|Polygon|0|KO-BKO tin|0|MultiPoint|0|KO-BKO tin|0|MultiLineString|0|KO-BKO tin|0|MultiPolygon|0|KO-BKO tin|0|GeometryCollection|0|KO-BKO tin|0|CircularString|0|KO-BKO tin|0|CompoundCurve|0|KO-BKO tin|0|CurvePolygon|0|KO-BKO tin|0|MultiCurve|0|KO-BKO tin|0|MultiSurface|0|KO-BKO tin|0|PolyhedralSurface|0|KO-BKO tin|0|Triangle|0|KO-BKO tin|0|Tin|0|OK-BOK tin|0|Point|2|KO-BKO tin|0|LineString|2|KO-BKO tin|0|Polygon|2|KO-BKO tin|0|MultiPoint|2|KO-BKO tin|0|MultiLineString|2|KO-BKO tin|0|MultiPolygon|2|KO-BKO tin|0|GeometryCollection|2|KO-BKO tin|0|CircularString|2|KO-BKO tin|0|CompoundCurve|2|KO-BKO tin|0|CurvePolygon|2|KO-BKO tin|0|MultiCurve|2|KO-BKO tin|0|MultiSurface|2|KO-BKO tin|0|PolyhedralSurface|2|KO-BKO tin|0|Triangle|2|KO-BKO tin|0|Point|1|KO-BKO tin|0|LineString|1|KO-BKO tin|0|Polygon|1|KO-BKO tin|0|MultiPoint|1|KO-BKO tin|0|MultiLineString|1|KO-BKO tin|0|MultiPolygon|1|KO-BKO tin|0|GeometryCollection|1|KO-BKO tin|0|CircularString|1|KO-BKO tin|0|CompoundCurve|1|KO-BKO tin|0|CurvePolygon|1|KO-BKO tin|0|MultiCurve|1|KO-BKO tin|0|MultiSurface|1|KO-BKO tin|0|PolyhedralSurface|1|KO-BKO tin|0|Triangle|1|KO-BKO tin|0|Point|3|KO-BKO tin|0|LineString|3|KO-BKO tin|0|Polygon|3|KO-BKO tin|0|MultiPoint|3|KO-BKO tin|0|MultiLineString|3|KO-BKO tin|0|MultiPolygon|3|KO-BKO tin|0|GeometryCollection|3|KO-BKO tin|0|CircularString|3|KO-BKO tin|0|CompoundCurve|3|KO-BKO tin|0|CurvePolygon|3|KO-BKO tin|0|MultiCurve|3|KO-BKO tin|0|MultiSurface|3|KO-BKO tin|0|PolyhedralSurface|3|KO-BKO tin|0|Triangle|3|KO-BKO tin|4326|Point|0|KO-BKO tin|4326|LineString|0|KO-BKO tin|4326|Polygon|0|KO-BKO tin|4326|MultiPoint|0|KO-BKO tin|4326|MultiLineString|0|KO-BKO tin|4326|MultiPolygon|0|KO-BKO tin|4326|GeometryCollection|0|KO-BKO tin|4326|CircularString|0|KO-BKO tin|4326|CompoundCurve|0|KO-BKO tin|4326|CurvePolygon|0|KO-BKO tin|4326|MultiCurve|0|KO-BKO tin|4326|MultiSurface|0|KO-BKO tin|4326|PolyhedralSurface|0|KO-BKO tin|4326|Triangle|0|KO-BKO tin|4326|Tin|0|OK-BOK tin|4326|Point|2|KO-BKO tin|4326|LineString|2|KO-BKO tin|4326|Polygon|2|KO-BKO tin|4326|MultiPoint|2|KO-BKO tin|4326|MultiLineString|2|KO-BKO tin|4326|MultiPolygon|2|KO-BKO tin|4326|GeometryCollection|2|KO-BKO tin|4326|CircularString|2|KO-BKO tin|4326|CompoundCurve|2|KO-BKO tin|4326|CurvePolygon|2|KO-BKO tin|4326|MultiCurve|2|KO-BKO tin|4326|MultiSurface|2|KO-BKO tin|4326|PolyhedralSurface|2|KO-BKO tin|4326|Triangle|2|KO-BKO tin|4326|Point|1|KO-BKO tin|4326|LineString|1|KO-BKO tin|4326|Polygon|1|KO-BKO tin|4326|MultiPoint|1|KO-BKO tin|4326|MultiLineString|1|KO-BKO tin|4326|MultiPolygon|1|KO-BKO tin|4326|GeometryCollection|1|KO-BKO tin|4326|CircularString|1|KO-BKO tin|4326|CompoundCurve|1|KO-BKO tin|4326|CurvePolygon|1|KO-BKO tin|4326|MultiCurve|1|KO-BKO tin|4326|MultiSurface|1|KO-BKO tin|4326|PolyhedralSurface|1|KO-BKO tin|4326|Triangle|1|KO-BKO tin|4326|Point|3|KO-BKO tin|4326|LineString|3|KO-BKO tin|4326|Polygon|3|KO-BKO tin|4326|MultiPoint|3|KO-BKO tin|4326|MultiLineString|3|KO-BKO tin|4326|MultiPolygon|3|KO-BKO tin|4326|GeometryCollection|3|KO-BKO tin|4326|CircularString|3|KO-BKO tin|4326|CompoundCurve|3|KO-BKO tin|4326|CurvePolygon|3|KO-BKO tin|4326|MultiCurve|3|KO-BKO tin|4326|MultiSurface|3|KO-BKO tin|4326|PolyhedralSurface|3|KO-BKO tin|4326|Triangle|3|KO-BKO tin||COUNT|4| tin0|0|Point|0|KO-BKO tin0|0|LineString|0|KO-BKO tin0|0|Polygon|0|KO-BKO tin0|0|MultiPoint|0|KO-BKO tin0|0|MultiLineString|0|KO-BKO tin0|0|MultiPolygon|0|KO-BKO tin0|0|GeometryCollection|0|KO-BKO tin0|0|CircularString|0|KO-BKO tin0|0|CompoundCurve|0|KO-BKO tin0|0|CurvePolygon|0|KO-BKO tin0|0|MultiCurve|0|KO-BKO tin0|0|MultiSurface|0|KO-BKO tin0|0|PolyhedralSurface|0|KO-BKO tin0|0|Triangle|0|KO-BKO tin0|0|Tin|0|OK-BOK tin0|0|Point|2|KO-BKO tin0|0|LineString|2|KO-BKO tin0|0|Polygon|2|KO-BKO tin0|0|MultiPoint|2|KO-BKO tin0|0|MultiLineString|2|KO-BKO tin0|0|MultiPolygon|2|KO-BKO tin0|0|GeometryCollection|2|KO-BKO tin0|0|CircularString|2|KO-BKO tin0|0|CompoundCurve|2|KO-BKO tin0|0|CurvePolygon|2|KO-BKO tin0|0|MultiCurve|2|KO-BKO tin0|0|MultiSurface|2|KO-BKO tin0|0|PolyhedralSurface|2|KO-BKO tin0|0|Triangle|2|KO-BKO tin0|0|Point|1|KO-BKO tin0|0|LineString|1|KO-BKO tin0|0|Polygon|1|KO-BKO tin0|0|MultiPoint|1|KO-BKO tin0|0|MultiLineString|1|KO-BKO tin0|0|MultiPolygon|1|KO-BKO tin0|0|GeometryCollection|1|KO-BKO tin0|0|CircularString|1|KO-BKO tin0|0|CompoundCurve|1|KO-BKO tin0|0|CurvePolygon|1|KO-BKO tin0|0|MultiCurve|1|KO-BKO tin0|0|MultiSurface|1|KO-BKO tin0|0|PolyhedralSurface|1|KO-BKO tin0|0|Triangle|1|KO-BKO tin0|0|Point|3|KO-BKO tin0|0|LineString|3|KO-BKO tin0|0|Polygon|3|KO-BKO tin0|0|MultiPoint|3|KO-BKO tin0|0|MultiLineString|3|KO-BKO tin0|0|MultiPolygon|3|KO-BKO tin0|0|GeometryCollection|3|KO-BKO tin0|0|CircularString|3|KO-BKO tin0|0|CompoundCurve|3|KO-BKO tin0|0|CurvePolygon|3|KO-BKO tin0|0|MultiCurve|3|KO-BKO tin0|0|MultiSurface|3|KO-BKO tin0|0|PolyhedralSurface|3|KO-BKO tin0|0|Triangle|3|KO-BKO tin0|4326|Point|0|KO-BKO tin0|4326|LineString|0|KO-BKO tin0|4326|Polygon|0|KO-BKO tin0|4326|MultiPoint|0|KO-BKO tin0|4326|MultiLineString|0|KO-BKO tin0|4326|MultiPolygon|0|KO-BKO tin0|4326|GeometryCollection|0|KO-BKO tin0|4326|CircularString|0|KO-BKO tin0|4326|CompoundCurve|0|KO-BKO tin0|4326|CurvePolygon|0|KO-BKO tin0|4326|MultiCurve|0|KO-BKO tin0|4326|MultiSurface|0|KO-BKO tin0|4326|PolyhedralSurface|0|KO-BKO tin0|4326|Triangle|0|KO-BKO tin0|4326|Tin|0|OK-BOK tin0|4326|Point|2|KO-BKO tin0|4326|LineString|2|KO-BKO tin0|4326|Polygon|2|KO-BKO tin0|4326|MultiPoint|2|KO-BKO tin0|4326|MultiLineString|2|KO-BKO tin0|4326|MultiPolygon|2|KO-BKO tin0|4326|GeometryCollection|2|KO-BKO tin0|4326|CircularString|2|KO-BKO tin0|4326|CompoundCurve|2|KO-BKO tin0|4326|CurvePolygon|2|KO-BKO tin0|4326|MultiCurve|2|KO-BKO tin0|4326|MultiSurface|2|KO-BKO tin0|4326|PolyhedralSurface|2|KO-BKO tin0|4326|Triangle|2|KO-BKO tin0|4326|Point|1|KO-BKO tin0|4326|LineString|1|KO-BKO tin0|4326|Polygon|1|KO-BKO tin0|4326|MultiPoint|1|KO-BKO tin0|4326|MultiLineString|1|KO-BKO tin0|4326|MultiPolygon|1|KO-BKO tin0|4326|GeometryCollection|1|KO-BKO tin0|4326|CircularString|1|KO-BKO tin0|4326|CompoundCurve|1|KO-BKO tin0|4326|CurvePolygon|1|KO-BKO tin0|4326|MultiCurve|1|KO-BKO tin0|4326|MultiSurface|1|KO-BKO tin0|4326|PolyhedralSurface|1|KO-BKO tin0|4326|Triangle|1|KO-BKO tin0|4326|Point|3|KO-BKO tin0|4326|LineString|3|KO-BKO tin0|4326|Polygon|3|KO-BKO tin0|4326|MultiPoint|3|KO-BKO tin0|4326|MultiLineString|3|KO-BKO tin0|4326|MultiPolygon|3|KO-BKO tin0|4326|GeometryCollection|3|KO-BKO tin0|4326|CircularString|3|KO-BKO tin0|4326|CompoundCurve|3|KO-BKO tin0|4326|CurvePolygon|3|KO-BKO tin0|4326|MultiCurve|3|KO-BKO tin0|4326|MultiSurface|3|KO-BKO tin0|4326|PolyhedralSurface|3|KO-BKO tin0|4326|Triangle|3|KO-BKO tin0||COUNT|4| tin4326|0|Point|0|KO-BKO tin4326|0|LineString|0|KO-BKO tin4326|0|Polygon|0|KO-BKO tin4326|0|MultiPoint|0|KO-BKO tin4326|0|MultiLineString|0|KO-BKO tin4326|0|MultiPolygon|0|KO-BKO tin4326|0|GeometryCollection|0|KO-BKO tin4326|0|CircularString|0|KO-BKO tin4326|0|CompoundCurve|0|KO-BKO tin4326|0|CurvePolygon|0|KO-BKO tin4326|0|MultiCurve|0|KO-BKO tin4326|0|MultiSurface|0|KO-BKO tin4326|0|PolyhedralSurface|0|KO-BKO tin4326|0|Triangle|0|KO-BKO tin4326|0|Tin|0|KO-BKO tin4326|0|Point|2|KO-BKO tin4326|0|LineString|2|KO-BKO tin4326|0|Polygon|2|KO-BKO tin4326|0|MultiPoint|2|KO-BKO tin4326|0|MultiLineString|2|KO-BKO tin4326|0|MultiPolygon|2|KO-BKO tin4326|0|GeometryCollection|2|KO-BKO tin4326|0|CircularString|2|KO-BKO tin4326|0|CompoundCurve|2|KO-BKO tin4326|0|CurvePolygon|2|KO-BKO tin4326|0|MultiCurve|2|KO-BKO tin4326|0|MultiSurface|2|KO-BKO tin4326|0|PolyhedralSurface|2|KO-BKO tin4326|0|Triangle|2|KO-BKO tin4326|0|Point|1|KO-BKO tin4326|0|LineString|1|KO-BKO tin4326|0|Polygon|1|KO-BKO tin4326|0|MultiPoint|1|KO-BKO tin4326|0|MultiLineString|1|KO-BKO tin4326|0|MultiPolygon|1|KO-BKO tin4326|0|GeometryCollection|1|KO-BKO tin4326|0|CircularString|1|KO-BKO tin4326|0|CompoundCurve|1|KO-BKO tin4326|0|CurvePolygon|1|KO-BKO tin4326|0|MultiCurve|1|KO-BKO tin4326|0|MultiSurface|1|KO-BKO tin4326|0|PolyhedralSurface|1|KO-BKO tin4326|0|Triangle|1|KO-BKO tin4326|0|Point|3|KO-BKO tin4326|0|LineString|3|KO-BKO tin4326|0|Polygon|3|KO-BKO tin4326|0|MultiPoint|3|KO-BKO tin4326|0|MultiLineString|3|KO-BKO tin4326|0|MultiPolygon|3|KO-BKO tin4326|0|GeometryCollection|3|KO-BKO tin4326|0|CircularString|3|KO-BKO tin4326|0|CompoundCurve|3|KO-BKO tin4326|0|CurvePolygon|3|KO-BKO tin4326|0|MultiCurve|3|KO-BKO tin4326|0|MultiSurface|3|KO-BKO tin4326|0|PolyhedralSurface|3|KO-BKO tin4326|0|Triangle|3|KO-BKO tin4326|4326|Point|0|KO-BKO tin4326|4326|LineString|0|KO-BKO tin4326|4326|Polygon|0|KO-BKO tin4326|4326|MultiPoint|0|KO-BKO tin4326|4326|MultiLineString|0|KO-BKO tin4326|4326|MultiPolygon|0|KO-BKO tin4326|4326|GeometryCollection|0|KO-BKO tin4326|4326|CircularString|0|KO-BKO tin4326|4326|CompoundCurve|0|KO-BKO tin4326|4326|CurvePolygon|0|KO-BKO tin4326|4326|MultiCurve|0|KO-BKO tin4326|4326|MultiSurface|0|KO-BKO tin4326|4326|PolyhedralSurface|0|KO-BKO tin4326|4326|Triangle|0|KO-BKO tin4326|4326|Tin|0|OK-BOK tin4326|4326|Point|2|KO-BKO tin4326|4326|LineString|2|KO-BKO tin4326|4326|Polygon|2|KO-BKO tin4326|4326|MultiPoint|2|KO-BKO tin4326|4326|MultiLineString|2|KO-BKO tin4326|4326|MultiPolygon|2|KO-BKO tin4326|4326|GeometryCollection|2|KO-BKO tin4326|4326|CircularString|2|KO-BKO tin4326|4326|CompoundCurve|2|KO-BKO tin4326|4326|CurvePolygon|2|KO-BKO tin4326|4326|MultiCurve|2|KO-BKO tin4326|4326|MultiSurface|2|KO-BKO tin4326|4326|PolyhedralSurface|2|KO-BKO tin4326|4326|Triangle|2|KO-BKO tin4326|4326|Point|1|KO-BKO tin4326|4326|LineString|1|KO-BKO tin4326|4326|Polygon|1|KO-BKO tin4326|4326|MultiPoint|1|KO-BKO tin4326|4326|MultiLineString|1|KO-BKO tin4326|4326|MultiPolygon|1|KO-BKO tin4326|4326|GeometryCollection|1|KO-BKO tin4326|4326|CircularString|1|KO-BKO tin4326|4326|CompoundCurve|1|KO-BKO tin4326|4326|CurvePolygon|1|KO-BKO tin4326|4326|MultiCurve|1|KO-BKO tin4326|4326|MultiSurface|1|KO-BKO tin4326|4326|PolyhedralSurface|1|KO-BKO tin4326|4326|Triangle|1|KO-BKO tin4326|4326|Point|3|KO-BKO tin4326|4326|LineString|3|KO-BKO tin4326|4326|Polygon|3|KO-BKO tin4326|4326|MultiPoint|3|KO-BKO tin4326|4326|MultiLineString|3|KO-BKO tin4326|4326|MultiPolygon|3|KO-BKO tin4326|4326|GeometryCollection|3|KO-BKO tin4326|4326|CircularString|3|KO-BKO tin4326|4326|CompoundCurve|3|KO-BKO tin4326|4326|CurvePolygon|3|KO-BKO tin4326|4326|MultiCurve|3|KO-BKO tin4326|4326|MultiSurface|3|KO-BKO tin4326|4326|PolyhedralSurface|3|KO-BKO tin4326|4326|Triangle|3|KO-BKO tin4326||COUNT|2| tinm|0|Point|0|KO-BKO tinm|0|LineString|0|KO-BKO tinm|0|Polygon|0|KO-BKO tinm|0|MultiPoint|0|KO-BKO tinm|0|MultiLineString|0|KO-BKO tinm|0|MultiPolygon|0|KO-BKO tinm|0|GeometryCollection|0|KO-BKO tinm|0|CircularString|0|KO-BKO tinm|0|CompoundCurve|0|KO-BKO tinm|0|CurvePolygon|0|KO-BKO tinm|0|MultiCurve|0|KO-BKO tinm|0|MultiSurface|0|KO-BKO tinm|0|PolyhedralSurface|0|KO-BKO tinm|0|Triangle|0|KO-BKO tinm|0|Tin|0|KO-BKO tinm|0|Point|2|KO-BKO tinm|0|LineString|2|KO-BKO tinm|0|Polygon|2|KO-BKO tinm|0|MultiPoint|2|KO-BKO tinm|0|MultiLineString|2|KO-BKO tinm|0|MultiPolygon|2|KO-BKO tinm|0|GeometryCollection|2|KO-BKO tinm|0|CircularString|2|KO-BKO tinm|0|CompoundCurve|2|KO-BKO tinm|0|CurvePolygon|2|KO-BKO tinm|0|MultiCurve|2|KO-BKO tinm|0|MultiSurface|2|KO-BKO tinm|0|PolyhedralSurface|2|KO-BKO tinm|0|Triangle|2|KO-BKO tinm|0|Point|1|KO-BKO tinm|0|LineString|1|KO-BKO tinm|0|Polygon|1|KO-BKO tinm|0|MultiPoint|1|KO-BKO tinm|0|MultiLineString|1|KO-BKO tinm|0|MultiPolygon|1|KO-BKO tinm|0|GeometryCollection|1|KO-BKO tinm|0|CircularString|1|KO-BKO tinm|0|CompoundCurve|1|KO-BKO tinm|0|CurvePolygon|1|KO-BKO tinm|0|MultiCurve|1|KO-BKO tinm|0|MultiSurface|1|KO-BKO tinm|0|PolyhedralSurface|1|KO-BKO tinm|0|Triangle|1|KO-BKO tinm|0|Point|3|KO-BKO tinm|0|LineString|3|KO-BKO tinm|0|Polygon|3|KO-BKO tinm|0|MultiPoint|3|KO-BKO tinm|0|MultiLineString|3|KO-BKO tinm|0|MultiPolygon|3|KO-BKO tinm|0|GeometryCollection|3|KO-BKO tinm|0|CircularString|3|KO-BKO tinm|0|CompoundCurve|3|KO-BKO tinm|0|CurvePolygon|3|KO-BKO tinm|0|MultiCurve|3|KO-BKO tinm|0|MultiSurface|3|KO-BKO tinm|0|PolyhedralSurface|3|KO-BKO tinm|0|Triangle|3|KO-BKO tinm|4326|Point|0|KO-BKO tinm|4326|LineString|0|KO-BKO tinm|4326|Polygon|0|KO-BKO tinm|4326|MultiPoint|0|KO-BKO tinm|4326|MultiLineString|0|KO-BKO tinm|4326|MultiPolygon|0|KO-BKO tinm|4326|GeometryCollection|0|KO-BKO tinm|4326|CircularString|0|KO-BKO tinm|4326|CompoundCurve|0|KO-BKO tinm|4326|CurvePolygon|0|KO-BKO tinm|4326|MultiCurve|0|KO-BKO tinm|4326|MultiSurface|0|KO-BKO tinm|4326|PolyhedralSurface|0|KO-BKO tinm|4326|Triangle|0|KO-BKO tinm|4326|Tin|0|KO-BKO tinm|4326|Point|2|KO-BKO tinm|4326|LineString|2|KO-BKO tinm|4326|Polygon|2|KO-BKO tinm|4326|MultiPoint|2|KO-BKO tinm|4326|MultiLineString|2|KO-BKO tinm|4326|MultiPolygon|2|KO-BKO tinm|4326|GeometryCollection|2|KO-BKO tinm|4326|CircularString|2|KO-BKO tinm|4326|CompoundCurve|2|KO-BKO tinm|4326|CurvePolygon|2|KO-BKO tinm|4326|MultiCurve|2|KO-BKO tinm|4326|MultiSurface|2|KO-BKO tinm|4326|PolyhedralSurface|2|KO-BKO tinm|4326|Triangle|2|KO-BKO tinm|4326|Point|1|KO-BKO tinm|4326|LineString|1|KO-BKO tinm|4326|Polygon|1|KO-BKO tinm|4326|MultiPoint|1|KO-BKO tinm|4326|MultiLineString|1|KO-BKO tinm|4326|MultiPolygon|1|KO-BKO tinm|4326|GeometryCollection|1|KO-BKO tinm|4326|CircularString|1|KO-BKO tinm|4326|CompoundCurve|1|KO-BKO tinm|4326|CurvePolygon|1|KO-BKO tinm|4326|MultiCurve|1|KO-BKO tinm|4326|MultiSurface|1|KO-BKO tinm|4326|PolyhedralSurface|1|KO-BKO tinm|4326|Triangle|1|KO-BKO tinm|4326|Point|3|KO-BKO tinm|4326|LineString|3|KO-BKO tinm|4326|Polygon|3|KO-BKO tinm|4326|MultiPoint|3|KO-BKO tinm|4326|MultiLineString|3|KO-BKO tinm|4326|MultiPolygon|3|KO-BKO tinm|4326|GeometryCollection|3|KO-BKO tinm|4326|CircularString|3|KO-BKO tinm|4326|CompoundCurve|3|KO-BKO tinm|4326|CurvePolygon|3|KO-BKO tinm|4326|MultiCurve|3|KO-BKO tinm|4326|MultiSurface|3|KO-BKO tinm|4326|PolyhedralSurface|3|KO-BKO tinm|4326|Triangle|3|KO-BKO tinm||COUNT|0| tinm0|0|Point|0|KO-BKO tinm0|0|LineString|0|KO-BKO tinm0|0|Polygon|0|KO-BKO tinm0|0|MultiPoint|0|KO-BKO tinm0|0|MultiLineString|0|KO-BKO tinm0|0|MultiPolygon|0|KO-BKO tinm0|0|GeometryCollection|0|KO-BKO tinm0|0|CircularString|0|KO-BKO tinm0|0|CompoundCurve|0|KO-BKO tinm0|0|CurvePolygon|0|KO-BKO tinm0|0|MultiCurve|0|KO-BKO tinm0|0|MultiSurface|0|KO-BKO tinm0|0|PolyhedralSurface|0|KO-BKO tinm0|0|Triangle|0|KO-BKO tinm0|0|Tin|0|KO-BKO tinm0|0|Point|2|KO-BKO tinm0|0|LineString|2|KO-BKO tinm0|0|Polygon|2|KO-BKO tinm0|0|MultiPoint|2|KO-BKO tinm0|0|MultiLineString|2|KO-BKO tinm0|0|MultiPolygon|2|KO-BKO tinm0|0|GeometryCollection|2|KO-BKO tinm0|0|CircularString|2|KO-BKO tinm0|0|CompoundCurve|2|KO-BKO tinm0|0|CurvePolygon|2|KO-BKO tinm0|0|MultiCurve|2|KO-BKO tinm0|0|MultiSurface|2|KO-BKO tinm0|0|PolyhedralSurface|2|KO-BKO tinm0|0|Triangle|2|KO-BKO tinm0|0|Point|1|KO-BKO tinm0|0|LineString|1|KO-BKO tinm0|0|Polygon|1|KO-BKO tinm0|0|MultiPoint|1|KO-BKO tinm0|0|MultiLineString|1|KO-BKO tinm0|0|MultiPolygon|1|KO-BKO tinm0|0|GeometryCollection|1|KO-BKO tinm0|0|CircularString|1|KO-BKO tinm0|0|CompoundCurve|1|KO-BKO tinm0|0|CurvePolygon|1|KO-BKO tinm0|0|MultiCurve|1|KO-BKO tinm0|0|MultiSurface|1|KO-BKO tinm0|0|PolyhedralSurface|1|KO-BKO tinm0|0|Triangle|1|KO-BKO tinm0|0|Point|3|KO-BKO tinm0|0|LineString|3|KO-BKO tinm0|0|Polygon|3|KO-BKO tinm0|0|MultiPoint|3|KO-BKO tinm0|0|MultiLineString|3|KO-BKO tinm0|0|MultiPolygon|3|KO-BKO tinm0|0|GeometryCollection|3|KO-BKO tinm0|0|CircularString|3|KO-BKO tinm0|0|CompoundCurve|3|KO-BKO tinm0|0|CurvePolygon|3|KO-BKO tinm0|0|MultiCurve|3|KO-BKO tinm0|0|MultiSurface|3|KO-BKO tinm0|0|PolyhedralSurface|3|KO-BKO tinm0|0|Triangle|3|KO-BKO tinm0|4326|Point|0|KO-BKO tinm0|4326|LineString|0|KO-BKO tinm0|4326|Polygon|0|KO-BKO tinm0|4326|MultiPoint|0|KO-BKO tinm0|4326|MultiLineString|0|KO-BKO tinm0|4326|MultiPolygon|0|KO-BKO tinm0|4326|GeometryCollection|0|KO-BKO tinm0|4326|CircularString|0|KO-BKO tinm0|4326|CompoundCurve|0|KO-BKO tinm0|4326|CurvePolygon|0|KO-BKO tinm0|4326|MultiCurve|0|KO-BKO tinm0|4326|MultiSurface|0|KO-BKO tinm0|4326|PolyhedralSurface|0|KO-BKO tinm0|4326|Triangle|0|KO-BKO tinm0|4326|Tin|0|KO-BKO tinm0|4326|Point|2|KO-BKO tinm0|4326|LineString|2|KO-BKO tinm0|4326|Polygon|2|KO-BKO tinm0|4326|MultiPoint|2|KO-BKO tinm0|4326|MultiLineString|2|KO-BKO tinm0|4326|MultiPolygon|2|KO-BKO tinm0|4326|GeometryCollection|2|KO-BKO tinm0|4326|CircularString|2|KO-BKO tinm0|4326|CompoundCurve|2|KO-BKO tinm0|4326|CurvePolygon|2|KO-BKO tinm0|4326|MultiCurve|2|KO-BKO tinm0|4326|MultiSurface|2|KO-BKO tinm0|4326|PolyhedralSurface|2|KO-BKO tinm0|4326|Triangle|2|KO-BKO tinm0|4326|Point|1|KO-BKO tinm0|4326|LineString|1|KO-BKO tinm0|4326|Polygon|1|KO-BKO tinm0|4326|MultiPoint|1|KO-BKO tinm0|4326|MultiLineString|1|KO-BKO tinm0|4326|MultiPolygon|1|KO-BKO tinm0|4326|GeometryCollection|1|KO-BKO tinm0|4326|CircularString|1|KO-BKO tinm0|4326|CompoundCurve|1|KO-BKO tinm0|4326|CurvePolygon|1|KO-BKO tinm0|4326|MultiCurve|1|KO-BKO tinm0|4326|MultiSurface|1|KO-BKO tinm0|4326|PolyhedralSurface|1|KO-BKO tinm0|4326|Triangle|1|KO-BKO tinm0|4326|Point|3|KO-BKO tinm0|4326|LineString|3|KO-BKO tinm0|4326|Polygon|3|KO-BKO tinm0|4326|MultiPoint|3|KO-BKO tinm0|4326|MultiLineString|3|KO-BKO tinm0|4326|MultiPolygon|3|KO-BKO tinm0|4326|GeometryCollection|3|KO-BKO tinm0|4326|CircularString|3|KO-BKO tinm0|4326|CompoundCurve|3|KO-BKO tinm0|4326|CurvePolygon|3|KO-BKO tinm0|4326|MultiCurve|3|KO-BKO tinm0|4326|MultiSurface|3|KO-BKO tinm0|4326|PolyhedralSurface|3|KO-BKO tinm0|4326|Triangle|3|KO-BKO tinm0||COUNT|0| tinm4326|0|Point|0|KO-BKO tinm4326|0|LineString|0|KO-BKO tinm4326|0|Polygon|0|KO-BKO tinm4326|0|MultiPoint|0|KO-BKO tinm4326|0|MultiLineString|0|KO-BKO tinm4326|0|MultiPolygon|0|KO-BKO tinm4326|0|GeometryCollection|0|KO-BKO tinm4326|0|CircularString|0|KO-BKO tinm4326|0|CompoundCurve|0|KO-BKO tinm4326|0|CurvePolygon|0|KO-BKO tinm4326|0|MultiCurve|0|KO-BKO tinm4326|0|MultiSurface|0|KO-BKO tinm4326|0|PolyhedralSurface|0|KO-BKO tinm4326|0|Triangle|0|KO-BKO tinm4326|0|Tin|0|KO-BKO tinm4326|0|Point|2|KO-BKO tinm4326|0|LineString|2|KO-BKO tinm4326|0|Polygon|2|KO-BKO tinm4326|0|MultiPoint|2|KO-BKO tinm4326|0|MultiLineString|2|KO-BKO tinm4326|0|MultiPolygon|2|KO-BKO tinm4326|0|GeometryCollection|2|KO-BKO tinm4326|0|CircularString|2|KO-BKO tinm4326|0|CompoundCurve|2|KO-BKO tinm4326|0|CurvePolygon|2|KO-BKO tinm4326|0|MultiCurve|2|KO-BKO tinm4326|0|MultiSurface|2|KO-BKO tinm4326|0|PolyhedralSurface|2|KO-BKO tinm4326|0|Triangle|2|KO-BKO tinm4326|0|Point|1|KO-BKO tinm4326|0|LineString|1|KO-BKO tinm4326|0|Polygon|1|KO-BKO tinm4326|0|MultiPoint|1|KO-BKO tinm4326|0|MultiLineString|1|KO-BKO tinm4326|0|MultiPolygon|1|KO-BKO tinm4326|0|GeometryCollection|1|KO-BKO tinm4326|0|CircularString|1|KO-BKO tinm4326|0|CompoundCurve|1|KO-BKO tinm4326|0|CurvePolygon|1|KO-BKO tinm4326|0|MultiCurve|1|KO-BKO tinm4326|0|MultiSurface|1|KO-BKO tinm4326|0|PolyhedralSurface|1|KO-BKO tinm4326|0|Triangle|1|KO-BKO tinm4326|0|Point|3|KO-BKO tinm4326|0|LineString|3|KO-BKO tinm4326|0|Polygon|3|KO-BKO tinm4326|0|MultiPoint|3|KO-BKO tinm4326|0|MultiLineString|3|KO-BKO tinm4326|0|MultiPolygon|3|KO-BKO tinm4326|0|GeometryCollection|3|KO-BKO tinm4326|0|CircularString|3|KO-BKO tinm4326|0|CompoundCurve|3|KO-BKO tinm4326|0|CurvePolygon|3|KO-BKO tinm4326|0|MultiCurve|3|KO-BKO tinm4326|0|MultiSurface|3|KO-BKO tinm4326|0|PolyhedralSurface|3|KO-BKO tinm4326|0|Triangle|3|KO-BKO tinm4326|4326|Point|0|KO-BKO tinm4326|4326|LineString|0|KO-BKO tinm4326|4326|Polygon|0|KO-BKO tinm4326|4326|MultiPoint|0|KO-BKO tinm4326|4326|MultiLineString|0|KO-BKO tinm4326|4326|MultiPolygon|0|KO-BKO tinm4326|4326|GeometryCollection|0|KO-BKO tinm4326|4326|CircularString|0|KO-BKO tinm4326|4326|CompoundCurve|0|KO-BKO tinm4326|4326|CurvePolygon|0|KO-BKO tinm4326|4326|MultiCurve|0|KO-BKO tinm4326|4326|MultiSurface|0|KO-BKO tinm4326|4326|PolyhedralSurface|0|KO-BKO tinm4326|4326|Triangle|0|KO-BKO tinm4326|4326|Tin|0|KO-BKO tinm4326|4326|Point|2|KO-BKO tinm4326|4326|LineString|2|KO-BKO tinm4326|4326|Polygon|2|KO-BKO tinm4326|4326|MultiPoint|2|KO-BKO tinm4326|4326|MultiLineString|2|KO-BKO tinm4326|4326|MultiPolygon|2|KO-BKO tinm4326|4326|GeometryCollection|2|KO-BKO tinm4326|4326|CircularString|2|KO-BKO tinm4326|4326|CompoundCurve|2|KO-BKO tinm4326|4326|CurvePolygon|2|KO-BKO tinm4326|4326|MultiCurve|2|KO-BKO tinm4326|4326|MultiSurface|2|KO-BKO tinm4326|4326|PolyhedralSurface|2|KO-BKO tinm4326|4326|Triangle|2|KO-BKO tinm4326|4326|Point|1|KO-BKO tinm4326|4326|LineString|1|KO-BKO tinm4326|4326|Polygon|1|KO-BKO tinm4326|4326|MultiPoint|1|KO-BKO tinm4326|4326|MultiLineString|1|KO-BKO tinm4326|4326|MultiPolygon|1|KO-BKO tinm4326|4326|GeometryCollection|1|KO-BKO tinm4326|4326|CircularString|1|KO-BKO tinm4326|4326|CompoundCurve|1|KO-BKO tinm4326|4326|CurvePolygon|1|KO-BKO tinm4326|4326|MultiCurve|1|KO-BKO tinm4326|4326|MultiSurface|1|KO-BKO tinm4326|4326|PolyhedralSurface|1|KO-BKO tinm4326|4326|Triangle|1|KO-BKO tinm4326|4326|Point|3|KO-BKO tinm4326|4326|LineString|3|KO-BKO tinm4326|4326|Polygon|3|KO-BKO tinm4326|4326|MultiPoint|3|KO-BKO tinm4326|4326|MultiLineString|3|KO-BKO tinm4326|4326|MultiPolygon|3|KO-BKO tinm4326|4326|GeometryCollection|3|KO-BKO tinm4326|4326|CircularString|3|KO-BKO tinm4326|4326|CompoundCurve|3|KO-BKO tinm4326|4326|CurvePolygon|3|KO-BKO tinm4326|4326|MultiCurve|3|KO-BKO tinm4326|4326|MultiSurface|3|KO-BKO tinm4326|4326|PolyhedralSurface|3|KO-BKO tinm4326|4326|Triangle|3|KO-BKO tinm4326||COUNT|0| tinz|0|Point|0|KO-BKO tinz|0|LineString|0|KO-BKO tinz|0|Polygon|0|KO-BKO tinz|0|MultiPoint|0|KO-BKO tinz|0|MultiLineString|0|KO-BKO tinz|0|MultiPolygon|0|KO-BKO tinz|0|GeometryCollection|0|KO-BKO tinz|0|CircularString|0|KO-BKO tinz|0|CompoundCurve|0|KO-BKO tinz|0|CurvePolygon|0|KO-BKO tinz|0|MultiCurve|0|KO-BKO tinz|0|MultiSurface|0|KO-BKO tinz|0|PolyhedralSurface|0|KO-BKO tinz|0|Triangle|0|KO-BKO tinz|0|Tin|0|KO-BKO tinz|0|Point|2|KO-BKO tinz|0|LineString|2|KO-BKO tinz|0|Polygon|2|KO-BKO tinz|0|MultiPoint|2|KO-BKO tinz|0|MultiLineString|2|KO-BKO tinz|0|MultiPolygon|2|KO-BKO tinz|0|GeometryCollection|2|KO-BKO tinz|0|CircularString|2|KO-BKO tinz|0|CompoundCurve|2|KO-BKO tinz|0|CurvePolygon|2|KO-BKO tinz|0|MultiCurve|2|KO-BKO tinz|0|MultiSurface|2|KO-BKO tinz|0|PolyhedralSurface|2|KO-BKO tinz|0|Triangle|2|KO-BKO tinz|0|Point|1|KO-BKO tinz|0|LineString|1|KO-BKO tinz|0|Polygon|1|KO-BKO tinz|0|MultiPoint|1|KO-BKO tinz|0|MultiLineString|1|KO-BKO tinz|0|MultiPolygon|1|KO-BKO tinz|0|GeometryCollection|1|KO-BKO tinz|0|CircularString|1|KO-BKO tinz|0|CompoundCurve|1|KO-BKO tinz|0|CurvePolygon|1|KO-BKO tinz|0|MultiCurve|1|KO-BKO tinz|0|MultiSurface|1|KO-BKO tinz|0|PolyhedralSurface|1|KO-BKO tinz|0|Triangle|1|KO-BKO tinz|0|Point|3|KO-BKO tinz|0|LineString|3|KO-BKO tinz|0|Polygon|3|KO-BKO tinz|0|MultiPoint|3|KO-BKO tinz|0|MultiLineString|3|KO-BKO tinz|0|MultiPolygon|3|KO-BKO tinz|0|GeometryCollection|3|KO-BKO tinz|0|CircularString|3|KO-BKO tinz|0|CompoundCurve|3|KO-BKO tinz|0|CurvePolygon|3|KO-BKO tinz|0|MultiCurve|3|KO-BKO tinz|0|MultiSurface|3|KO-BKO tinz|0|PolyhedralSurface|3|KO-BKO tinz|0|Triangle|3|KO-BKO tinz|4326|Point|0|KO-BKO tinz|4326|LineString|0|KO-BKO tinz|4326|Polygon|0|KO-BKO tinz|4326|MultiPoint|0|KO-BKO tinz|4326|MultiLineString|0|KO-BKO tinz|4326|MultiPolygon|0|KO-BKO tinz|4326|GeometryCollection|0|KO-BKO tinz|4326|CircularString|0|KO-BKO tinz|4326|CompoundCurve|0|KO-BKO tinz|4326|CurvePolygon|0|KO-BKO tinz|4326|MultiCurve|0|KO-BKO tinz|4326|MultiSurface|0|KO-BKO tinz|4326|PolyhedralSurface|0|KO-BKO tinz|4326|Triangle|0|KO-BKO tinz|4326|Tin|0|KO-BKO tinz|4326|Point|2|KO-BKO tinz|4326|LineString|2|KO-BKO tinz|4326|Polygon|2|KO-BKO tinz|4326|MultiPoint|2|KO-BKO tinz|4326|MultiLineString|2|KO-BKO tinz|4326|MultiPolygon|2|KO-BKO tinz|4326|GeometryCollection|2|KO-BKO tinz|4326|CircularString|2|KO-BKO tinz|4326|CompoundCurve|2|KO-BKO tinz|4326|CurvePolygon|2|KO-BKO tinz|4326|MultiCurve|2|KO-BKO tinz|4326|MultiSurface|2|KO-BKO tinz|4326|PolyhedralSurface|2|KO-BKO tinz|4326|Triangle|2|KO-BKO tinz|4326|Point|1|KO-BKO tinz|4326|LineString|1|KO-BKO tinz|4326|Polygon|1|KO-BKO tinz|4326|MultiPoint|1|KO-BKO tinz|4326|MultiLineString|1|KO-BKO tinz|4326|MultiPolygon|1|KO-BKO tinz|4326|GeometryCollection|1|KO-BKO tinz|4326|CircularString|1|KO-BKO tinz|4326|CompoundCurve|1|KO-BKO tinz|4326|CurvePolygon|1|KO-BKO tinz|4326|MultiCurve|1|KO-BKO tinz|4326|MultiSurface|1|KO-BKO tinz|4326|PolyhedralSurface|1|KO-BKO tinz|4326|Triangle|1|KO-BKO tinz|4326|Point|3|KO-BKO tinz|4326|LineString|3|KO-BKO tinz|4326|Polygon|3|KO-BKO tinz|4326|MultiPoint|3|KO-BKO tinz|4326|MultiLineString|3|KO-BKO tinz|4326|MultiPolygon|3|KO-BKO tinz|4326|GeometryCollection|3|KO-BKO tinz|4326|CircularString|3|KO-BKO tinz|4326|CompoundCurve|3|KO-BKO tinz|4326|CurvePolygon|3|KO-BKO tinz|4326|MultiCurve|3|KO-BKO tinz|4326|MultiSurface|3|KO-BKO tinz|4326|PolyhedralSurface|3|KO-BKO tinz|4326|Triangle|3|KO-BKO tinz||COUNT|0| tinz0|0|Point|0|KO-BKO tinz0|0|LineString|0|KO-BKO tinz0|0|Polygon|0|KO-BKO tinz0|0|MultiPoint|0|KO-BKO tinz0|0|MultiLineString|0|KO-BKO tinz0|0|MultiPolygon|0|KO-BKO tinz0|0|GeometryCollection|0|KO-BKO tinz0|0|CircularString|0|KO-BKO tinz0|0|CompoundCurve|0|KO-BKO tinz0|0|CurvePolygon|0|KO-BKO tinz0|0|MultiCurve|0|KO-BKO tinz0|0|MultiSurface|0|KO-BKO tinz0|0|PolyhedralSurface|0|KO-BKO tinz0|0|Triangle|0|KO-BKO tinz0|0|Tin|0|KO-BKO tinz0|0|Point|2|KO-BKO tinz0|0|LineString|2|KO-BKO tinz0|0|Polygon|2|KO-BKO tinz0|0|MultiPoint|2|KO-BKO tinz0|0|MultiLineString|2|KO-BKO tinz0|0|MultiPolygon|2|KO-BKO tinz0|0|GeometryCollection|2|KO-BKO tinz0|0|CircularString|2|KO-BKO tinz0|0|CompoundCurve|2|KO-BKO tinz0|0|CurvePolygon|2|KO-BKO tinz0|0|MultiCurve|2|KO-BKO tinz0|0|MultiSurface|2|KO-BKO tinz0|0|PolyhedralSurface|2|KO-BKO tinz0|0|Triangle|2|KO-BKO tinz0|0|Point|1|KO-BKO tinz0|0|LineString|1|KO-BKO tinz0|0|Polygon|1|KO-BKO tinz0|0|MultiPoint|1|KO-BKO tinz0|0|MultiLineString|1|KO-BKO tinz0|0|MultiPolygon|1|KO-BKO tinz0|0|GeometryCollection|1|KO-BKO tinz0|0|CircularString|1|KO-BKO tinz0|0|CompoundCurve|1|KO-BKO tinz0|0|CurvePolygon|1|KO-BKO tinz0|0|MultiCurve|1|KO-BKO tinz0|0|MultiSurface|1|KO-BKO tinz0|0|PolyhedralSurface|1|KO-BKO tinz0|0|Triangle|1|KO-BKO tinz0|0|Point|3|KO-BKO tinz0|0|LineString|3|KO-BKO tinz0|0|Polygon|3|KO-BKO tinz0|0|MultiPoint|3|KO-BKO tinz0|0|MultiLineString|3|KO-BKO tinz0|0|MultiPolygon|3|KO-BKO tinz0|0|GeometryCollection|3|KO-BKO tinz0|0|CircularString|3|KO-BKO tinz0|0|CompoundCurve|3|KO-BKO tinz0|0|CurvePolygon|3|KO-BKO tinz0|0|MultiCurve|3|KO-BKO tinz0|0|MultiSurface|3|KO-BKO tinz0|0|PolyhedralSurface|3|KO-BKO tinz0|0|Triangle|3|KO-BKO tinz0|4326|Point|0|KO-BKO tinz0|4326|LineString|0|KO-BKO tinz0|4326|Polygon|0|KO-BKO tinz0|4326|MultiPoint|0|KO-BKO tinz0|4326|MultiLineString|0|KO-BKO tinz0|4326|MultiPolygon|0|KO-BKO tinz0|4326|GeometryCollection|0|KO-BKO tinz0|4326|CircularString|0|KO-BKO tinz0|4326|CompoundCurve|0|KO-BKO tinz0|4326|CurvePolygon|0|KO-BKO tinz0|4326|MultiCurve|0|KO-BKO tinz0|4326|MultiSurface|0|KO-BKO tinz0|4326|PolyhedralSurface|0|KO-BKO tinz0|4326|Triangle|0|KO-BKO tinz0|4326|Tin|0|KO-BKO tinz0|4326|Point|2|KO-BKO tinz0|4326|LineString|2|KO-BKO tinz0|4326|Polygon|2|KO-BKO tinz0|4326|MultiPoint|2|KO-BKO tinz0|4326|MultiLineString|2|KO-BKO tinz0|4326|MultiPolygon|2|KO-BKO tinz0|4326|GeometryCollection|2|KO-BKO tinz0|4326|CircularString|2|KO-BKO tinz0|4326|CompoundCurve|2|KO-BKO tinz0|4326|CurvePolygon|2|KO-BKO tinz0|4326|MultiCurve|2|KO-BKO tinz0|4326|MultiSurface|2|KO-BKO tinz0|4326|PolyhedralSurface|2|KO-BKO tinz0|4326|Triangle|2|KO-BKO tinz0|4326|Point|1|KO-BKO tinz0|4326|LineString|1|KO-BKO tinz0|4326|Polygon|1|KO-BKO tinz0|4326|MultiPoint|1|KO-BKO tinz0|4326|MultiLineString|1|KO-BKO tinz0|4326|MultiPolygon|1|KO-BKO tinz0|4326|GeometryCollection|1|KO-BKO tinz0|4326|CircularString|1|KO-BKO tinz0|4326|CompoundCurve|1|KO-BKO tinz0|4326|CurvePolygon|1|KO-BKO tinz0|4326|MultiCurve|1|KO-BKO tinz0|4326|MultiSurface|1|KO-BKO tinz0|4326|PolyhedralSurface|1|KO-BKO tinz0|4326|Triangle|1|KO-BKO tinz0|4326|Point|3|KO-BKO tinz0|4326|LineString|3|KO-BKO tinz0|4326|Polygon|3|KO-BKO tinz0|4326|MultiPoint|3|KO-BKO tinz0|4326|MultiLineString|3|KO-BKO tinz0|4326|MultiPolygon|3|KO-BKO tinz0|4326|GeometryCollection|3|KO-BKO tinz0|4326|CircularString|3|KO-BKO tinz0|4326|CompoundCurve|3|KO-BKO tinz0|4326|CurvePolygon|3|KO-BKO tinz0|4326|MultiCurve|3|KO-BKO tinz0|4326|MultiSurface|3|KO-BKO tinz0|4326|PolyhedralSurface|3|KO-BKO tinz0|4326|Triangle|3|KO-BKO tinz0||COUNT|0| tinz4326|0|Point|0|KO-BKO tinz4326|0|LineString|0|KO-BKO tinz4326|0|Polygon|0|KO-BKO tinz4326|0|MultiPoint|0|KO-BKO tinz4326|0|MultiLineString|0|KO-BKO tinz4326|0|MultiPolygon|0|KO-BKO tinz4326|0|GeometryCollection|0|KO-BKO tinz4326|0|CircularString|0|KO-BKO tinz4326|0|CompoundCurve|0|KO-BKO tinz4326|0|CurvePolygon|0|KO-BKO tinz4326|0|MultiCurve|0|KO-BKO tinz4326|0|MultiSurface|0|KO-BKO tinz4326|0|PolyhedralSurface|0|KO-BKO tinz4326|0|Triangle|0|KO-BKO tinz4326|0|Tin|0|KO-BKO tinz4326|0|Point|2|KO-BKO tinz4326|0|LineString|2|KO-BKO tinz4326|0|Polygon|2|KO-BKO tinz4326|0|MultiPoint|2|KO-BKO tinz4326|0|MultiLineString|2|KO-BKO tinz4326|0|MultiPolygon|2|KO-BKO tinz4326|0|GeometryCollection|2|KO-BKO tinz4326|0|CircularString|2|KO-BKO tinz4326|0|CompoundCurve|2|KO-BKO tinz4326|0|CurvePolygon|2|KO-BKO tinz4326|0|MultiCurve|2|KO-BKO tinz4326|0|MultiSurface|2|KO-BKO tinz4326|0|PolyhedralSurface|2|KO-BKO tinz4326|0|Triangle|2|KO-BKO tinz4326|0|Point|1|KO-BKO tinz4326|0|LineString|1|KO-BKO tinz4326|0|Polygon|1|KO-BKO tinz4326|0|MultiPoint|1|KO-BKO tinz4326|0|MultiLineString|1|KO-BKO tinz4326|0|MultiPolygon|1|KO-BKO tinz4326|0|GeometryCollection|1|KO-BKO tinz4326|0|CircularString|1|KO-BKO tinz4326|0|CompoundCurve|1|KO-BKO tinz4326|0|CurvePolygon|1|KO-BKO tinz4326|0|MultiCurve|1|KO-BKO tinz4326|0|MultiSurface|1|KO-BKO tinz4326|0|PolyhedralSurface|1|KO-BKO tinz4326|0|Triangle|1|KO-BKO tinz4326|0|Point|3|KO-BKO tinz4326|0|LineString|3|KO-BKO tinz4326|0|Polygon|3|KO-BKO tinz4326|0|MultiPoint|3|KO-BKO tinz4326|0|MultiLineString|3|KO-BKO tinz4326|0|MultiPolygon|3|KO-BKO tinz4326|0|GeometryCollection|3|KO-BKO tinz4326|0|CircularString|3|KO-BKO tinz4326|0|CompoundCurve|3|KO-BKO tinz4326|0|CurvePolygon|3|KO-BKO tinz4326|0|MultiCurve|3|KO-BKO tinz4326|0|MultiSurface|3|KO-BKO tinz4326|0|PolyhedralSurface|3|KO-BKO tinz4326|0|Triangle|3|KO-BKO tinz4326|4326|Point|0|KO-BKO tinz4326|4326|LineString|0|KO-BKO tinz4326|4326|Polygon|0|KO-BKO tinz4326|4326|MultiPoint|0|KO-BKO tinz4326|4326|MultiLineString|0|KO-BKO tinz4326|4326|MultiPolygon|0|KO-BKO tinz4326|4326|GeometryCollection|0|KO-BKO tinz4326|4326|CircularString|0|KO-BKO tinz4326|4326|CompoundCurve|0|KO-BKO tinz4326|4326|CurvePolygon|0|KO-BKO tinz4326|4326|MultiCurve|0|KO-BKO tinz4326|4326|MultiSurface|0|KO-BKO tinz4326|4326|PolyhedralSurface|0|KO-BKO tinz4326|4326|Triangle|0|KO-BKO tinz4326|4326|Tin|0|KO-BKO tinz4326|4326|Point|2|KO-BKO tinz4326|4326|LineString|2|KO-BKO tinz4326|4326|Polygon|2|KO-BKO tinz4326|4326|MultiPoint|2|KO-BKO tinz4326|4326|MultiLineString|2|KO-BKO tinz4326|4326|MultiPolygon|2|KO-BKO tinz4326|4326|GeometryCollection|2|KO-BKO tinz4326|4326|CircularString|2|KO-BKO tinz4326|4326|CompoundCurve|2|KO-BKO tinz4326|4326|CurvePolygon|2|KO-BKO tinz4326|4326|MultiCurve|2|KO-BKO tinz4326|4326|MultiSurface|2|KO-BKO tinz4326|4326|PolyhedralSurface|2|KO-BKO tinz4326|4326|Triangle|2|KO-BKO tinz4326|4326|Point|1|KO-BKO tinz4326|4326|LineString|1|KO-BKO tinz4326|4326|Polygon|1|KO-BKO tinz4326|4326|MultiPoint|1|KO-BKO tinz4326|4326|MultiLineString|1|KO-BKO tinz4326|4326|MultiPolygon|1|KO-BKO tinz4326|4326|GeometryCollection|1|KO-BKO tinz4326|4326|CircularString|1|KO-BKO tinz4326|4326|CompoundCurve|1|KO-BKO tinz4326|4326|CurvePolygon|1|KO-BKO tinz4326|4326|MultiCurve|1|KO-BKO tinz4326|4326|MultiSurface|1|KO-BKO tinz4326|4326|PolyhedralSurface|1|KO-BKO tinz4326|4326|Triangle|1|KO-BKO tinz4326|4326|Point|3|KO-BKO tinz4326|4326|LineString|3|KO-BKO tinz4326|4326|Polygon|3|KO-BKO tinz4326|4326|MultiPoint|3|KO-BKO tinz4326|4326|MultiLineString|3|KO-BKO tinz4326|4326|MultiPolygon|3|KO-BKO tinz4326|4326|GeometryCollection|3|KO-BKO tinz4326|4326|CircularString|3|KO-BKO tinz4326|4326|CompoundCurve|3|KO-BKO tinz4326|4326|CurvePolygon|3|KO-BKO tinz4326|4326|MultiCurve|3|KO-BKO tinz4326|4326|MultiSurface|3|KO-BKO tinz4326|4326|PolyhedralSurface|3|KO-BKO tinz4326|4326|Triangle|3|KO-BKO tinz4326||COUNT|0| tinzm|0|Point|0|KO-BKO tinzm|0|LineString|0|KO-BKO tinzm|0|Polygon|0|KO-BKO tinzm|0|MultiPoint|0|KO-BKO tinzm|0|MultiLineString|0|KO-BKO tinzm|0|MultiPolygon|0|KO-BKO tinzm|0|GeometryCollection|0|KO-BKO tinzm|0|CircularString|0|KO-BKO tinzm|0|CompoundCurve|0|KO-BKO tinzm|0|CurvePolygon|0|KO-BKO tinzm|0|MultiCurve|0|KO-BKO tinzm|0|MultiSurface|0|KO-BKO tinzm|0|PolyhedralSurface|0|KO-BKO tinzm|0|Triangle|0|KO-BKO tinzm|0|Tin|0|KO-BKO tinzm|0|Point|2|KO-BKO tinzm|0|LineString|2|KO-BKO tinzm|0|Polygon|2|KO-BKO tinzm|0|MultiPoint|2|KO-BKO tinzm|0|MultiLineString|2|KO-BKO tinzm|0|MultiPolygon|2|KO-BKO tinzm|0|GeometryCollection|2|KO-BKO tinzm|0|CircularString|2|KO-BKO tinzm|0|CompoundCurve|2|KO-BKO tinzm|0|CurvePolygon|2|KO-BKO tinzm|0|MultiCurve|2|KO-BKO tinzm|0|MultiSurface|2|KO-BKO tinzm|0|PolyhedralSurface|2|KO-BKO tinzm|0|Triangle|2|KO-BKO tinzm|0|Point|1|KO-BKO tinzm|0|LineString|1|KO-BKO tinzm|0|Polygon|1|KO-BKO tinzm|0|MultiPoint|1|KO-BKO tinzm|0|MultiLineString|1|KO-BKO tinzm|0|MultiPolygon|1|KO-BKO tinzm|0|GeometryCollection|1|KO-BKO tinzm|0|CircularString|1|KO-BKO tinzm|0|CompoundCurve|1|KO-BKO tinzm|0|CurvePolygon|1|KO-BKO tinzm|0|MultiCurve|1|KO-BKO tinzm|0|MultiSurface|1|KO-BKO tinzm|0|PolyhedralSurface|1|KO-BKO tinzm|0|Triangle|1|KO-BKO tinzm|0|Point|3|KO-BKO tinzm|0|LineString|3|KO-BKO tinzm|0|Polygon|3|KO-BKO tinzm|0|MultiPoint|3|KO-BKO tinzm|0|MultiLineString|3|KO-BKO tinzm|0|MultiPolygon|3|KO-BKO tinzm|0|GeometryCollection|3|KO-BKO tinzm|0|CircularString|3|KO-BKO tinzm|0|CompoundCurve|3|KO-BKO tinzm|0|CurvePolygon|3|KO-BKO tinzm|0|MultiCurve|3|KO-BKO tinzm|0|MultiSurface|3|KO-BKO tinzm|0|PolyhedralSurface|3|KO-BKO tinzm|0|Triangle|3|KO-BKO tinzm|4326|Point|0|KO-BKO tinzm|4326|LineString|0|KO-BKO tinzm|4326|Polygon|0|KO-BKO tinzm|4326|MultiPoint|0|KO-BKO tinzm|4326|MultiLineString|0|KO-BKO tinzm|4326|MultiPolygon|0|KO-BKO tinzm|4326|GeometryCollection|0|KO-BKO tinzm|4326|CircularString|0|KO-BKO tinzm|4326|CompoundCurve|0|KO-BKO tinzm|4326|CurvePolygon|0|KO-BKO tinzm|4326|MultiCurve|0|KO-BKO tinzm|4326|MultiSurface|0|KO-BKO tinzm|4326|PolyhedralSurface|0|KO-BKO tinzm|4326|Triangle|0|KO-BKO tinzm|4326|Tin|0|KO-BKO tinzm|4326|Point|2|KO-BKO tinzm|4326|LineString|2|KO-BKO tinzm|4326|Polygon|2|KO-BKO tinzm|4326|MultiPoint|2|KO-BKO tinzm|4326|MultiLineString|2|KO-BKO tinzm|4326|MultiPolygon|2|KO-BKO tinzm|4326|GeometryCollection|2|KO-BKO tinzm|4326|CircularString|2|KO-BKO tinzm|4326|CompoundCurve|2|KO-BKO tinzm|4326|CurvePolygon|2|KO-BKO tinzm|4326|MultiCurve|2|KO-BKO tinzm|4326|MultiSurface|2|KO-BKO tinzm|4326|PolyhedralSurface|2|KO-BKO tinzm|4326|Triangle|2|KO-BKO tinzm|4326|Point|1|KO-BKO tinzm|4326|LineString|1|KO-BKO tinzm|4326|Polygon|1|KO-BKO tinzm|4326|MultiPoint|1|KO-BKO tinzm|4326|MultiLineString|1|KO-BKO tinzm|4326|MultiPolygon|1|KO-BKO tinzm|4326|GeometryCollection|1|KO-BKO tinzm|4326|CircularString|1|KO-BKO tinzm|4326|CompoundCurve|1|KO-BKO tinzm|4326|CurvePolygon|1|KO-BKO tinzm|4326|MultiCurve|1|KO-BKO tinzm|4326|MultiSurface|1|KO-BKO tinzm|4326|PolyhedralSurface|1|KO-BKO tinzm|4326|Triangle|1|KO-BKO tinzm|4326|Point|3|KO-BKO tinzm|4326|LineString|3|KO-BKO tinzm|4326|Polygon|3|KO-BKO tinzm|4326|MultiPoint|3|KO-BKO tinzm|4326|MultiLineString|3|KO-BKO tinzm|4326|MultiPolygon|3|KO-BKO tinzm|4326|GeometryCollection|3|KO-BKO tinzm|4326|CircularString|3|KO-BKO tinzm|4326|CompoundCurve|3|KO-BKO tinzm|4326|CurvePolygon|3|KO-BKO tinzm|4326|MultiCurve|3|KO-BKO tinzm|4326|MultiSurface|3|KO-BKO tinzm|4326|PolyhedralSurface|3|KO-BKO tinzm|4326|Triangle|3|KO-BKO tinzm||COUNT|0| tinzm0|0|Point|0|KO-BKO tinzm0|0|LineString|0|KO-BKO tinzm0|0|Polygon|0|KO-BKO tinzm0|0|MultiPoint|0|KO-BKO tinzm0|0|MultiLineString|0|KO-BKO tinzm0|0|MultiPolygon|0|KO-BKO tinzm0|0|GeometryCollection|0|KO-BKO tinzm0|0|CircularString|0|KO-BKO tinzm0|0|CompoundCurve|0|KO-BKO tinzm0|0|CurvePolygon|0|KO-BKO tinzm0|0|MultiCurve|0|KO-BKO tinzm0|0|MultiSurface|0|KO-BKO tinzm0|0|PolyhedralSurface|0|KO-BKO tinzm0|0|Triangle|0|KO-BKO tinzm0|0|Tin|0|KO-BKO tinzm0|0|Point|2|KO-BKO tinzm0|0|LineString|2|KO-BKO tinzm0|0|Polygon|2|KO-BKO tinzm0|0|MultiPoint|2|KO-BKO tinzm0|0|MultiLineString|2|KO-BKO tinzm0|0|MultiPolygon|2|KO-BKO tinzm0|0|GeometryCollection|2|KO-BKO tinzm0|0|CircularString|2|KO-BKO tinzm0|0|CompoundCurve|2|KO-BKO tinzm0|0|CurvePolygon|2|KO-BKO tinzm0|0|MultiCurve|2|KO-BKO tinzm0|0|MultiSurface|2|KO-BKO tinzm0|0|PolyhedralSurface|2|KO-BKO tinzm0|0|Triangle|2|KO-BKO tinzm0|0|Point|1|KO-BKO tinzm0|0|LineString|1|KO-BKO tinzm0|0|Polygon|1|KO-BKO tinzm0|0|MultiPoint|1|KO-BKO tinzm0|0|MultiLineString|1|KO-BKO tinzm0|0|MultiPolygon|1|KO-BKO tinzm0|0|GeometryCollection|1|KO-BKO tinzm0|0|CircularString|1|KO-BKO tinzm0|0|CompoundCurve|1|KO-BKO tinzm0|0|CurvePolygon|1|KO-BKO tinzm0|0|MultiCurve|1|KO-BKO tinzm0|0|MultiSurface|1|KO-BKO tinzm0|0|PolyhedralSurface|1|KO-BKO tinzm0|0|Triangle|1|KO-BKO tinzm0|0|Point|3|KO-BKO tinzm0|0|LineString|3|KO-BKO tinzm0|0|Polygon|3|KO-BKO tinzm0|0|MultiPoint|3|KO-BKO tinzm0|0|MultiLineString|3|KO-BKO tinzm0|0|MultiPolygon|3|KO-BKO tinzm0|0|GeometryCollection|3|KO-BKO tinzm0|0|CircularString|3|KO-BKO tinzm0|0|CompoundCurve|3|KO-BKO tinzm0|0|CurvePolygon|3|KO-BKO tinzm0|0|MultiCurve|3|KO-BKO tinzm0|0|MultiSurface|3|KO-BKO tinzm0|0|PolyhedralSurface|3|KO-BKO tinzm0|0|Triangle|3|KO-BKO tinzm0|4326|Point|0|KO-BKO tinzm0|4326|LineString|0|KO-BKO tinzm0|4326|Polygon|0|KO-BKO tinzm0|4326|MultiPoint|0|KO-BKO tinzm0|4326|MultiLineString|0|KO-BKO tinzm0|4326|MultiPolygon|0|KO-BKO tinzm0|4326|GeometryCollection|0|KO-BKO tinzm0|4326|CircularString|0|KO-BKO tinzm0|4326|CompoundCurve|0|KO-BKO tinzm0|4326|CurvePolygon|0|KO-BKO tinzm0|4326|MultiCurve|0|KO-BKO tinzm0|4326|MultiSurface|0|KO-BKO tinzm0|4326|PolyhedralSurface|0|KO-BKO tinzm0|4326|Triangle|0|KO-BKO tinzm0|4326|Tin|0|KO-BKO tinzm0|4326|Point|2|KO-BKO tinzm0|4326|LineString|2|KO-BKO tinzm0|4326|Polygon|2|KO-BKO tinzm0|4326|MultiPoint|2|KO-BKO tinzm0|4326|MultiLineString|2|KO-BKO tinzm0|4326|MultiPolygon|2|KO-BKO tinzm0|4326|GeometryCollection|2|KO-BKO tinzm0|4326|CircularString|2|KO-BKO tinzm0|4326|CompoundCurve|2|KO-BKO tinzm0|4326|CurvePolygon|2|KO-BKO tinzm0|4326|MultiCurve|2|KO-BKO tinzm0|4326|MultiSurface|2|KO-BKO tinzm0|4326|PolyhedralSurface|2|KO-BKO tinzm0|4326|Triangle|2|KO-BKO tinzm0|4326|Point|1|KO-BKO tinzm0|4326|LineString|1|KO-BKO tinzm0|4326|Polygon|1|KO-BKO tinzm0|4326|MultiPoint|1|KO-BKO tinzm0|4326|MultiLineString|1|KO-BKO tinzm0|4326|MultiPolygon|1|KO-BKO tinzm0|4326|GeometryCollection|1|KO-BKO tinzm0|4326|CircularString|1|KO-BKO tinzm0|4326|CompoundCurve|1|KO-BKO tinzm0|4326|CurvePolygon|1|KO-BKO tinzm0|4326|MultiCurve|1|KO-BKO tinzm0|4326|MultiSurface|1|KO-BKO tinzm0|4326|PolyhedralSurface|1|KO-BKO tinzm0|4326|Triangle|1|KO-BKO tinzm0|4326|Point|3|KO-BKO tinzm0|4326|LineString|3|KO-BKO tinzm0|4326|Polygon|3|KO-BKO tinzm0|4326|MultiPoint|3|KO-BKO tinzm0|4326|MultiLineString|3|KO-BKO tinzm0|4326|MultiPolygon|3|KO-BKO tinzm0|4326|GeometryCollection|3|KO-BKO tinzm0|4326|CircularString|3|KO-BKO tinzm0|4326|CompoundCurve|3|KO-BKO tinzm0|4326|CurvePolygon|3|KO-BKO tinzm0|4326|MultiCurve|3|KO-BKO tinzm0|4326|MultiSurface|3|KO-BKO tinzm0|4326|PolyhedralSurface|3|KO-BKO tinzm0|4326|Triangle|3|KO-BKO tinzm0||COUNT|0| tinzm4326|0|Point|0|KO-BKO tinzm4326|0|LineString|0|KO-BKO tinzm4326|0|Polygon|0|KO-BKO tinzm4326|0|MultiPoint|0|KO-BKO tinzm4326|0|MultiLineString|0|KO-BKO tinzm4326|0|MultiPolygon|0|KO-BKO tinzm4326|0|GeometryCollection|0|KO-BKO tinzm4326|0|CircularString|0|KO-BKO tinzm4326|0|CompoundCurve|0|KO-BKO tinzm4326|0|CurvePolygon|0|KO-BKO tinzm4326|0|MultiCurve|0|KO-BKO tinzm4326|0|MultiSurface|0|KO-BKO tinzm4326|0|PolyhedralSurface|0|KO-BKO tinzm4326|0|Triangle|0|KO-BKO tinzm4326|0|Tin|0|KO-BKO tinzm4326|0|Point|2|KO-BKO tinzm4326|0|LineString|2|KO-BKO tinzm4326|0|Polygon|2|KO-BKO tinzm4326|0|MultiPoint|2|KO-BKO tinzm4326|0|MultiLineString|2|KO-BKO tinzm4326|0|MultiPolygon|2|KO-BKO tinzm4326|0|GeometryCollection|2|KO-BKO tinzm4326|0|CircularString|2|KO-BKO tinzm4326|0|CompoundCurve|2|KO-BKO tinzm4326|0|CurvePolygon|2|KO-BKO tinzm4326|0|MultiCurve|2|KO-BKO tinzm4326|0|MultiSurface|2|KO-BKO tinzm4326|0|PolyhedralSurface|2|KO-BKO tinzm4326|0|Triangle|2|KO-BKO tinzm4326|0|Point|1|KO-BKO tinzm4326|0|LineString|1|KO-BKO tinzm4326|0|Polygon|1|KO-BKO tinzm4326|0|MultiPoint|1|KO-BKO tinzm4326|0|MultiLineString|1|KO-BKO tinzm4326|0|MultiPolygon|1|KO-BKO tinzm4326|0|GeometryCollection|1|KO-BKO tinzm4326|0|CircularString|1|KO-BKO tinzm4326|0|CompoundCurve|1|KO-BKO tinzm4326|0|CurvePolygon|1|KO-BKO tinzm4326|0|MultiCurve|1|KO-BKO tinzm4326|0|MultiSurface|1|KO-BKO tinzm4326|0|PolyhedralSurface|1|KO-BKO tinzm4326|0|Triangle|1|KO-BKO tinzm4326|0|Point|3|KO-BKO tinzm4326|0|LineString|3|KO-BKO tinzm4326|0|Polygon|3|KO-BKO tinzm4326|0|MultiPoint|3|KO-BKO tinzm4326|0|MultiLineString|3|KO-BKO tinzm4326|0|MultiPolygon|3|KO-BKO tinzm4326|0|GeometryCollection|3|KO-BKO tinzm4326|0|CircularString|3|KO-BKO tinzm4326|0|CompoundCurve|3|KO-BKO tinzm4326|0|CurvePolygon|3|KO-BKO tinzm4326|0|MultiCurve|3|KO-BKO tinzm4326|0|MultiSurface|3|KO-BKO tinzm4326|0|PolyhedralSurface|3|KO-BKO tinzm4326|0|Triangle|3|KO-BKO tinzm4326|4326|Point|0|KO-BKO tinzm4326|4326|LineString|0|KO-BKO tinzm4326|4326|Polygon|0|KO-BKO tinzm4326|4326|MultiPoint|0|KO-BKO tinzm4326|4326|MultiLineString|0|KO-BKO tinzm4326|4326|MultiPolygon|0|KO-BKO tinzm4326|4326|GeometryCollection|0|KO-BKO tinzm4326|4326|CircularString|0|KO-BKO tinzm4326|4326|CompoundCurve|0|KO-BKO tinzm4326|4326|CurvePolygon|0|KO-BKO tinzm4326|4326|MultiCurve|0|KO-BKO tinzm4326|4326|MultiSurface|0|KO-BKO tinzm4326|4326|PolyhedralSurface|0|KO-BKO tinzm4326|4326|Triangle|0|KO-BKO tinzm4326|4326|Tin|0|KO-BKO tinzm4326|4326|Point|2|KO-BKO tinzm4326|4326|LineString|2|KO-BKO tinzm4326|4326|Polygon|2|KO-BKO tinzm4326|4326|MultiPoint|2|KO-BKO tinzm4326|4326|MultiLineString|2|KO-BKO tinzm4326|4326|MultiPolygon|2|KO-BKO tinzm4326|4326|GeometryCollection|2|KO-BKO tinzm4326|4326|CircularString|2|KO-BKO tinzm4326|4326|CompoundCurve|2|KO-BKO tinzm4326|4326|CurvePolygon|2|KO-BKO tinzm4326|4326|MultiCurve|2|KO-BKO tinzm4326|4326|MultiSurface|2|KO-BKO tinzm4326|4326|PolyhedralSurface|2|KO-BKO tinzm4326|4326|Triangle|2|KO-BKO tinzm4326|4326|Point|1|KO-BKO tinzm4326|4326|LineString|1|KO-BKO tinzm4326|4326|Polygon|1|KO-BKO tinzm4326|4326|MultiPoint|1|KO-BKO tinzm4326|4326|MultiLineString|1|KO-BKO tinzm4326|4326|MultiPolygon|1|KO-BKO tinzm4326|4326|GeometryCollection|1|KO-BKO tinzm4326|4326|CircularString|1|KO-BKO tinzm4326|4326|CompoundCurve|1|KO-BKO tinzm4326|4326|CurvePolygon|1|KO-BKO tinzm4326|4326|MultiCurve|1|KO-BKO tinzm4326|4326|MultiSurface|1|KO-BKO tinzm4326|4326|PolyhedralSurface|1|KO-BKO tinzm4326|4326|Triangle|1|KO-BKO tinzm4326|4326|Point|3|KO-BKO tinzm4326|4326|LineString|3|KO-BKO tinzm4326|4326|Polygon|3|KO-BKO tinzm4326|4326|MultiPoint|3|KO-BKO tinzm4326|4326|MultiLineString|3|KO-BKO tinzm4326|4326|MultiPolygon|3|KO-BKO tinzm4326|4326|GeometryCollection|3|KO-BKO tinzm4326|4326|CircularString|3|KO-BKO tinzm4326|4326|CompoundCurve|3|KO-BKO tinzm4326|4326|CurvePolygon|3|KO-BKO tinzm4326|4326|MultiCurve|3|KO-BKO tinzm4326|4326|MultiSurface|3|KO-BKO tinzm4326|4326|PolyhedralSurface|3|KO-BKO tinzm4326|4326|Triangle|3|KO-BKO tinzm4326||COUNT|0| triangle|0|Point|0|KO-BKO triangle|0|LineString|0|KO-BKO triangle|0|Polygon|0|KO-BKO triangle|0|MultiPoint|0|KO-BKO triangle|0|MultiLineString|0|KO-BKO triangle|0|MultiPolygon|0|KO-BKO triangle|0|GeometryCollection|0|KO-BKO triangle|0|CircularString|0|KO-BKO triangle|0|CompoundCurve|0|KO-BKO triangle|0|CurvePolygon|0|KO-BKO triangle|0|MultiCurve|0|KO-BKO triangle|0|MultiSurface|0|KO-BKO triangle|0|PolyhedralSurface|0|KO-BKO triangle|0|Triangle|0|OK-BOK triangle|0|Tin|0|KO-BKO triangle|0|Point|2|KO-BKO triangle|0|LineString|2|KO-BKO triangle|0|Polygon|2|KO-BKO triangle|0|MultiPoint|2|KO-BKO triangle|0|MultiLineString|2|KO-BKO triangle|0|MultiPolygon|2|KO-BKO triangle|0|GeometryCollection|2|KO-BKO triangle|0|CircularString|2|KO-BKO triangle|0|CompoundCurve|2|KO-BKO triangle|0|CurvePolygon|2|KO-BKO triangle|0|MultiCurve|2|KO-BKO triangle|0|MultiSurface|2|KO-BKO triangle|0|PolyhedralSurface|2|KO-BKO triangle|0|Triangle|2|KO-BKO triangle|0|Point|1|KO-BKO triangle|0|LineString|1|KO-BKO triangle|0|Polygon|1|KO-BKO triangle|0|MultiPoint|1|KO-BKO triangle|0|MultiLineString|1|KO-BKO triangle|0|MultiPolygon|1|KO-BKO triangle|0|GeometryCollection|1|KO-BKO triangle|0|CircularString|1|KO-BKO triangle|0|CompoundCurve|1|KO-BKO triangle|0|CurvePolygon|1|KO-BKO triangle|0|MultiCurve|1|KO-BKO triangle|0|MultiSurface|1|KO-BKO triangle|0|PolyhedralSurface|1|KO-BKO triangle|0|Triangle|1|KO-BKO triangle|0|Point|3|KO-BKO triangle|0|LineString|3|KO-BKO triangle|0|Polygon|3|KO-BKO triangle|0|MultiPoint|3|KO-BKO triangle|0|MultiLineString|3|KO-BKO triangle|0|MultiPolygon|3|KO-BKO triangle|0|GeometryCollection|3|KO-BKO triangle|0|CircularString|3|KO-BKO triangle|0|CompoundCurve|3|KO-BKO triangle|0|CurvePolygon|3|KO-BKO triangle|0|MultiCurve|3|KO-BKO triangle|0|MultiSurface|3|KO-BKO triangle|0|PolyhedralSurface|3|KO-BKO triangle|0|Triangle|3|KO-BKO triangle|4326|Point|0|KO-BKO triangle|4326|LineString|0|KO-BKO triangle|4326|Polygon|0|KO-BKO triangle|4326|MultiPoint|0|KO-BKO triangle|4326|MultiLineString|0|KO-BKO triangle|4326|MultiPolygon|0|KO-BKO triangle|4326|GeometryCollection|0|KO-BKO triangle|4326|CircularString|0|KO-BKO triangle|4326|CompoundCurve|0|KO-BKO triangle|4326|CurvePolygon|0|KO-BKO triangle|4326|MultiCurve|0|KO-BKO triangle|4326|MultiSurface|0|KO-BKO triangle|4326|PolyhedralSurface|0|KO-BKO triangle|4326|Triangle|0|OK-BOK triangle|4326|Tin|0|KO-BKO triangle|4326|Point|2|KO-BKO triangle|4326|LineString|2|KO-BKO triangle|4326|Polygon|2|KO-BKO triangle|4326|MultiPoint|2|KO-BKO triangle|4326|MultiLineString|2|KO-BKO triangle|4326|MultiPolygon|2|KO-BKO triangle|4326|GeometryCollection|2|KO-BKO triangle|4326|CircularString|2|KO-BKO triangle|4326|CompoundCurve|2|KO-BKO triangle|4326|CurvePolygon|2|KO-BKO triangle|4326|MultiCurve|2|KO-BKO triangle|4326|MultiSurface|2|KO-BKO triangle|4326|PolyhedralSurface|2|KO-BKO triangle|4326|Triangle|2|KO-BKO triangle|4326|Point|1|KO-BKO triangle|4326|LineString|1|KO-BKO triangle|4326|Polygon|1|KO-BKO triangle|4326|MultiPoint|1|KO-BKO triangle|4326|MultiLineString|1|KO-BKO triangle|4326|MultiPolygon|1|KO-BKO triangle|4326|GeometryCollection|1|KO-BKO triangle|4326|CircularString|1|KO-BKO triangle|4326|CompoundCurve|1|KO-BKO triangle|4326|CurvePolygon|1|KO-BKO triangle|4326|MultiCurve|1|KO-BKO triangle|4326|MultiSurface|1|KO-BKO triangle|4326|PolyhedralSurface|1|KO-BKO triangle|4326|Triangle|1|KO-BKO triangle|4326|Point|3|KO-BKO triangle|4326|LineString|3|KO-BKO triangle|4326|Polygon|3|KO-BKO triangle|4326|MultiPoint|3|KO-BKO triangle|4326|MultiLineString|3|KO-BKO triangle|4326|MultiPolygon|3|KO-BKO triangle|4326|GeometryCollection|3|KO-BKO triangle|4326|CircularString|3|KO-BKO triangle|4326|CompoundCurve|3|KO-BKO triangle|4326|CurvePolygon|3|KO-BKO triangle|4326|MultiCurve|3|KO-BKO triangle|4326|MultiSurface|3|KO-BKO triangle|4326|PolyhedralSurface|3|KO-BKO triangle|4326|Triangle|3|KO-BKO triangle||COUNT|4| triangle0|0|Point|0|KO-BKO triangle0|0|LineString|0|KO-BKO triangle0|0|Polygon|0|KO-BKO triangle0|0|MultiPoint|0|KO-BKO triangle0|0|MultiLineString|0|KO-BKO triangle0|0|MultiPolygon|0|KO-BKO triangle0|0|GeometryCollection|0|KO-BKO triangle0|0|CircularString|0|KO-BKO triangle0|0|CompoundCurve|0|KO-BKO triangle0|0|CurvePolygon|0|KO-BKO triangle0|0|MultiCurve|0|KO-BKO triangle0|0|MultiSurface|0|KO-BKO triangle0|0|PolyhedralSurface|0|KO-BKO triangle0|0|Triangle|0|OK-BOK triangle0|0|Tin|0|KO-BKO triangle0|0|Point|2|KO-BKO triangle0|0|LineString|2|KO-BKO triangle0|0|Polygon|2|KO-BKO triangle0|0|MultiPoint|2|KO-BKO triangle0|0|MultiLineString|2|KO-BKO triangle0|0|MultiPolygon|2|KO-BKO triangle0|0|GeometryCollection|2|KO-BKO triangle0|0|CircularString|2|KO-BKO triangle0|0|CompoundCurve|2|KO-BKO triangle0|0|CurvePolygon|2|KO-BKO triangle0|0|MultiCurve|2|KO-BKO triangle0|0|MultiSurface|2|KO-BKO triangle0|0|PolyhedralSurface|2|KO-BKO triangle0|0|Triangle|2|KO-BKO triangle0|0|Point|1|KO-BKO triangle0|0|LineString|1|KO-BKO triangle0|0|Polygon|1|KO-BKO triangle0|0|MultiPoint|1|KO-BKO triangle0|0|MultiLineString|1|KO-BKO triangle0|0|MultiPolygon|1|KO-BKO triangle0|0|GeometryCollection|1|KO-BKO triangle0|0|CircularString|1|KO-BKO triangle0|0|CompoundCurve|1|KO-BKO triangle0|0|CurvePolygon|1|KO-BKO triangle0|0|MultiCurve|1|KO-BKO triangle0|0|MultiSurface|1|KO-BKO triangle0|0|PolyhedralSurface|1|KO-BKO triangle0|0|Triangle|1|KO-BKO triangle0|0|Point|3|KO-BKO triangle0|0|LineString|3|KO-BKO triangle0|0|Polygon|3|KO-BKO triangle0|0|MultiPoint|3|KO-BKO triangle0|0|MultiLineString|3|KO-BKO triangle0|0|MultiPolygon|3|KO-BKO triangle0|0|GeometryCollection|3|KO-BKO triangle0|0|CircularString|3|KO-BKO triangle0|0|CompoundCurve|3|KO-BKO triangle0|0|CurvePolygon|3|KO-BKO triangle0|0|MultiCurve|3|KO-BKO triangle0|0|MultiSurface|3|KO-BKO triangle0|0|PolyhedralSurface|3|KO-BKO triangle0|0|Triangle|3|KO-BKO triangle0|4326|Point|0|KO-BKO triangle0|4326|LineString|0|KO-BKO triangle0|4326|Polygon|0|KO-BKO triangle0|4326|MultiPoint|0|KO-BKO triangle0|4326|MultiLineString|0|KO-BKO triangle0|4326|MultiPolygon|0|KO-BKO triangle0|4326|GeometryCollection|0|KO-BKO triangle0|4326|CircularString|0|KO-BKO triangle0|4326|CompoundCurve|0|KO-BKO triangle0|4326|CurvePolygon|0|KO-BKO triangle0|4326|MultiCurve|0|KO-BKO triangle0|4326|MultiSurface|0|KO-BKO triangle0|4326|PolyhedralSurface|0|KO-BKO triangle0|4326|Triangle|0|OK-BOK triangle0|4326|Tin|0|KO-BKO triangle0|4326|Point|2|KO-BKO triangle0|4326|LineString|2|KO-BKO triangle0|4326|Polygon|2|KO-BKO triangle0|4326|MultiPoint|2|KO-BKO triangle0|4326|MultiLineString|2|KO-BKO triangle0|4326|MultiPolygon|2|KO-BKO triangle0|4326|GeometryCollection|2|KO-BKO triangle0|4326|CircularString|2|KO-BKO triangle0|4326|CompoundCurve|2|KO-BKO triangle0|4326|CurvePolygon|2|KO-BKO triangle0|4326|MultiCurve|2|KO-BKO triangle0|4326|MultiSurface|2|KO-BKO triangle0|4326|PolyhedralSurface|2|KO-BKO triangle0|4326|Triangle|2|KO-BKO triangle0|4326|Point|1|KO-BKO triangle0|4326|LineString|1|KO-BKO triangle0|4326|Polygon|1|KO-BKO triangle0|4326|MultiPoint|1|KO-BKO triangle0|4326|MultiLineString|1|KO-BKO triangle0|4326|MultiPolygon|1|KO-BKO triangle0|4326|GeometryCollection|1|KO-BKO triangle0|4326|CircularString|1|KO-BKO triangle0|4326|CompoundCurve|1|KO-BKO triangle0|4326|CurvePolygon|1|KO-BKO triangle0|4326|MultiCurve|1|KO-BKO triangle0|4326|MultiSurface|1|KO-BKO triangle0|4326|PolyhedralSurface|1|KO-BKO triangle0|4326|Triangle|1|KO-BKO triangle0|4326|Point|3|KO-BKO triangle0|4326|LineString|3|KO-BKO triangle0|4326|Polygon|3|KO-BKO triangle0|4326|MultiPoint|3|KO-BKO triangle0|4326|MultiLineString|3|KO-BKO triangle0|4326|MultiPolygon|3|KO-BKO triangle0|4326|GeometryCollection|3|KO-BKO triangle0|4326|CircularString|3|KO-BKO triangle0|4326|CompoundCurve|3|KO-BKO triangle0|4326|CurvePolygon|3|KO-BKO triangle0|4326|MultiCurve|3|KO-BKO triangle0|4326|MultiSurface|3|KO-BKO triangle0|4326|PolyhedralSurface|3|KO-BKO triangle0|4326|Triangle|3|KO-BKO triangle0||COUNT|4| triangle4326|0|Point|0|KO-BKO triangle4326|0|LineString|0|KO-BKO triangle4326|0|Polygon|0|KO-BKO triangle4326|0|MultiPoint|0|KO-BKO triangle4326|0|MultiLineString|0|KO-BKO triangle4326|0|MultiPolygon|0|KO-BKO triangle4326|0|GeometryCollection|0|KO-BKO triangle4326|0|CircularString|0|KO-BKO triangle4326|0|CompoundCurve|0|KO-BKO triangle4326|0|CurvePolygon|0|KO-BKO triangle4326|0|MultiCurve|0|KO-BKO triangle4326|0|MultiSurface|0|KO-BKO triangle4326|0|PolyhedralSurface|0|KO-BKO triangle4326|0|Triangle|0|KO-BKO triangle4326|0|Tin|0|KO-BKO triangle4326|0|Point|2|KO-BKO triangle4326|0|LineString|2|KO-BKO triangle4326|0|Polygon|2|KO-BKO triangle4326|0|MultiPoint|2|KO-BKO triangle4326|0|MultiLineString|2|KO-BKO triangle4326|0|MultiPolygon|2|KO-BKO triangle4326|0|GeometryCollection|2|KO-BKO triangle4326|0|CircularString|2|KO-BKO triangle4326|0|CompoundCurve|2|KO-BKO triangle4326|0|CurvePolygon|2|KO-BKO triangle4326|0|MultiCurve|2|KO-BKO triangle4326|0|MultiSurface|2|KO-BKO triangle4326|0|PolyhedralSurface|2|KO-BKO triangle4326|0|Triangle|2|KO-BKO triangle4326|0|Point|1|KO-BKO triangle4326|0|LineString|1|KO-BKO triangle4326|0|Polygon|1|KO-BKO triangle4326|0|MultiPoint|1|KO-BKO triangle4326|0|MultiLineString|1|KO-BKO triangle4326|0|MultiPolygon|1|KO-BKO triangle4326|0|GeometryCollection|1|KO-BKO triangle4326|0|CircularString|1|KO-BKO triangle4326|0|CompoundCurve|1|KO-BKO triangle4326|0|CurvePolygon|1|KO-BKO triangle4326|0|MultiCurve|1|KO-BKO triangle4326|0|MultiSurface|1|KO-BKO triangle4326|0|PolyhedralSurface|1|KO-BKO triangle4326|0|Triangle|1|KO-BKO triangle4326|0|Point|3|KO-BKO triangle4326|0|LineString|3|KO-BKO triangle4326|0|Polygon|3|KO-BKO triangle4326|0|MultiPoint|3|KO-BKO triangle4326|0|MultiLineString|3|KO-BKO triangle4326|0|MultiPolygon|3|KO-BKO triangle4326|0|GeometryCollection|3|KO-BKO triangle4326|0|CircularString|3|KO-BKO triangle4326|0|CompoundCurve|3|KO-BKO triangle4326|0|CurvePolygon|3|KO-BKO triangle4326|0|MultiCurve|3|KO-BKO triangle4326|0|MultiSurface|3|KO-BKO triangle4326|0|PolyhedralSurface|3|KO-BKO triangle4326|0|Triangle|3|KO-BKO triangle4326|4326|Point|0|KO-BKO triangle4326|4326|LineString|0|KO-BKO triangle4326|4326|Polygon|0|KO-BKO triangle4326|4326|MultiPoint|0|KO-BKO triangle4326|4326|MultiLineString|0|KO-BKO triangle4326|4326|MultiPolygon|0|KO-BKO triangle4326|4326|GeometryCollection|0|KO-BKO triangle4326|4326|CircularString|0|KO-BKO triangle4326|4326|CompoundCurve|0|KO-BKO triangle4326|4326|CurvePolygon|0|KO-BKO triangle4326|4326|MultiCurve|0|KO-BKO triangle4326|4326|MultiSurface|0|KO-BKO triangle4326|4326|PolyhedralSurface|0|KO-BKO triangle4326|4326|Triangle|0|OK-BOK triangle4326|4326|Tin|0|KO-BKO triangle4326|4326|Point|2|KO-BKO triangle4326|4326|LineString|2|KO-BKO triangle4326|4326|Polygon|2|KO-BKO triangle4326|4326|MultiPoint|2|KO-BKO triangle4326|4326|MultiLineString|2|KO-BKO triangle4326|4326|MultiPolygon|2|KO-BKO triangle4326|4326|GeometryCollection|2|KO-BKO triangle4326|4326|CircularString|2|KO-BKO triangle4326|4326|CompoundCurve|2|KO-BKO triangle4326|4326|CurvePolygon|2|KO-BKO triangle4326|4326|MultiCurve|2|KO-BKO triangle4326|4326|MultiSurface|2|KO-BKO triangle4326|4326|PolyhedralSurface|2|KO-BKO triangle4326|4326|Triangle|2|KO-BKO triangle4326|4326|Point|1|KO-BKO triangle4326|4326|LineString|1|KO-BKO triangle4326|4326|Polygon|1|KO-BKO triangle4326|4326|MultiPoint|1|KO-BKO triangle4326|4326|MultiLineString|1|KO-BKO triangle4326|4326|MultiPolygon|1|KO-BKO triangle4326|4326|GeometryCollection|1|KO-BKO triangle4326|4326|CircularString|1|KO-BKO triangle4326|4326|CompoundCurve|1|KO-BKO triangle4326|4326|CurvePolygon|1|KO-BKO triangle4326|4326|MultiCurve|1|KO-BKO triangle4326|4326|MultiSurface|1|KO-BKO triangle4326|4326|PolyhedralSurface|1|KO-BKO triangle4326|4326|Triangle|1|KO-BKO triangle4326|4326|Point|3|KO-BKO triangle4326|4326|LineString|3|KO-BKO triangle4326|4326|Polygon|3|KO-BKO triangle4326|4326|MultiPoint|3|KO-BKO triangle4326|4326|MultiLineString|3|KO-BKO triangle4326|4326|MultiPolygon|3|KO-BKO triangle4326|4326|GeometryCollection|3|KO-BKO triangle4326|4326|CircularString|3|KO-BKO triangle4326|4326|CompoundCurve|3|KO-BKO triangle4326|4326|CurvePolygon|3|KO-BKO triangle4326|4326|MultiCurve|3|KO-BKO triangle4326|4326|MultiSurface|3|KO-BKO triangle4326|4326|PolyhedralSurface|3|KO-BKO triangle4326|4326|Triangle|3|KO-BKO triangle4326||COUNT|2| trianglem|0|Point|0|KO-BKO trianglem|0|LineString|0|KO-BKO trianglem|0|Polygon|0|KO-BKO trianglem|0|MultiPoint|0|KO-BKO trianglem|0|MultiLineString|0|KO-BKO trianglem|0|MultiPolygon|0|KO-BKO trianglem|0|GeometryCollection|0|KO-BKO trianglem|0|CircularString|0|KO-BKO trianglem|0|CompoundCurve|0|KO-BKO trianglem|0|CurvePolygon|0|KO-BKO trianglem|0|MultiCurve|0|KO-BKO trianglem|0|MultiSurface|0|KO-BKO trianglem|0|PolyhedralSurface|0|KO-BKO trianglem|0|Triangle|0|KO-BKO trianglem|0|Tin|0|KO-BKO trianglem|0|Point|2|KO-BKO trianglem|0|LineString|2|KO-BKO trianglem|0|Polygon|2|KO-BKO trianglem|0|MultiPoint|2|KO-BKO trianglem|0|MultiLineString|2|KO-BKO trianglem|0|MultiPolygon|2|KO-BKO trianglem|0|GeometryCollection|2|KO-BKO trianglem|0|CircularString|2|KO-BKO trianglem|0|CompoundCurve|2|KO-BKO trianglem|0|CurvePolygon|2|KO-BKO trianglem|0|MultiCurve|2|KO-BKO trianglem|0|MultiSurface|2|KO-BKO trianglem|0|PolyhedralSurface|2|KO-BKO trianglem|0|Triangle|2|KO-BKO trianglem|0|Point|1|KO-BKO trianglem|0|LineString|1|KO-BKO trianglem|0|Polygon|1|KO-BKO trianglem|0|MultiPoint|1|KO-BKO trianglem|0|MultiLineString|1|KO-BKO trianglem|0|MultiPolygon|1|KO-BKO trianglem|0|GeometryCollection|1|KO-BKO trianglem|0|CircularString|1|KO-BKO trianglem|0|CompoundCurve|1|KO-BKO trianglem|0|CurvePolygon|1|KO-BKO trianglem|0|MultiCurve|1|KO-BKO trianglem|0|MultiSurface|1|KO-BKO trianglem|0|PolyhedralSurface|1|KO-BKO trianglem|0|Triangle|1|OK-BOK trianglem|0|Point|3|KO-BKO trianglem|0|LineString|3|KO-BKO trianglem|0|Polygon|3|KO-BKO trianglem|0|MultiPoint|3|KO-BKO trianglem|0|MultiLineString|3|KO-BKO trianglem|0|MultiPolygon|3|KO-BKO trianglem|0|GeometryCollection|3|KO-BKO trianglem|0|CircularString|3|KO-BKO trianglem|0|CompoundCurve|3|KO-BKO trianglem|0|CurvePolygon|3|KO-BKO trianglem|0|MultiCurve|3|KO-BKO trianglem|0|MultiSurface|3|KO-BKO trianglem|0|PolyhedralSurface|3|KO-BKO trianglem|0|Triangle|3|KO-BKO trianglem|4326|Point|0|KO-BKO trianglem|4326|LineString|0|KO-BKO trianglem|4326|Polygon|0|KO-BKO trianglem|4326|MultiPoint|0|KO-BKO trianglem|4326|MultiLineString|0|KO-BKO trianglem|4326|MultiPolygon|0|KO-BKO trianglem|4326|GeometryCollection|0|KO-BKO trianglem|4326|CircularString|0|KO-BKO trianglem|4326|CompoundCurve|0|KO-BKO trianglem|4326|CurvePolygon|0|KO-BKO trianglem|4326|MultiCurve|0|KO-BKO trianglem|4326|MultiSurface|0|KO-BKO trianglem|4326|PolyhedralSurface|0|KO-BKO trianglem|4326|Triangle|0|KO-BKO trianglem|4326|Tin|0|KO-BKO trianglem|4326|Point|2|KO-BKO trianglem|4326|LineString|2|KO-BKO trianglem|4326|Polygon|2|KO-BKO trianglem|4326|MultiPoint|2|KO-BKO trianglem|4326|MultiLineString|2|KO-BKO trianglem|4326|MultiPolygon|2|KO-BKO trianglem|4326|GeometryCollection|2|KO-BKO trianglem|4326|CircularString|2|KO-BKO trianglem|4326|CompoundCurve|2|KO-BKO trianglem|4326|CurvePolygon|2|KO-BKO trianglem|4326|MultiCurve|2|KO-BKO trianglem|4326|MultiSurface|2|KO-BKO trianglem|4326|PolyhedralSurface|2|KO-BKO trianglem|4326|Triangle|2|KO-BKO trianglem|4326|Point|1|KO-BKO trianglem|4326|LineString|1|KO-BKO trianglem|4326|Polygon|1|KO-BKO trianglem|4326|MultiPoint|1|KO-BKO trianglem|4326|MultiLineString|1|KO-BKO trianglem|4326|MultiPolygon|1|KO-BKO trianglem|4326|GeometryCollection|1|KO-BKO trianglem|4326|CircularString|1|KO-BKO trianglem|4326|CompoundCurve|1|KO-BKO trianglem|4326|CurvePolygon|1|KO-BKO trianglem|4326|MultiCurve|1|KO-BKO trianglem|4326|MultiSurface|1|KO-BKO trianglem|4326|PolyhedralSurface|1|KO-BKO trianglem|4326|Triangle|1|OK-BOK trianglem|4326|Point|3|KO-BKO trianglem|4326|LineString|3|KO-BKO trianglem|4326|Polygon|3|KO-BKO trianglem|4326|MultiPoint|3|KO-BKO trianglem|4326|MultiLineString|3|KO-BKO trianglem|4326|MultiPolygon|3|KO-BKO trianglem|4326|GeometryCollection|3|KO-BKO trianglem|4326|CircularString|3|KO-BKO trianglem|4326|CompoundCurve|3|KO-BKO trianglem|4326|CurvePolygon|3|KO-BKO trianglem|4326|MultiCurve|3|KO-BKO trianglem|4326|MultiSurface|3|KO-BKO trianglem|4326|PolyhedralSurface|3|KO-BKO trianglem|4326|Triangle|3|KO-BKO trianglem||COUNT|4| trianglem0|0|Point|0|KO-BKO trianglem0|0|LineString|0|KO-BKO trianglem0|0|Polygon|0|KO-BKO trianglem0|0|MultiPoint|0|KO-BKO trianglem0|0|MultiLineString|0|KO-BKO trianglem0|0|MultiPolygon|0|KO-BKO trianglem0|0|GeometryCollection|0|KO-BKO trianglem0|0|CircularString|0|KO-BKO trianglem0|0|CompoundCurve|0|KO-BKO trianglem0|0|CurvePolygon|0|KO-BKO trianglem0|0|MultiCurve|0|KO-BKO trianglem0|0|MultiSurface|0|KO-BKO trianglem0|0|PolyhedralSurface|0|KO-BKO trianglem0|0|Triangle|0|KO-BKO trianglem0|0|Tin|0|KO-BKO trianglem0|0|Point|2|KO-BKO trianglem0|0|LineString|2|KO-BKO trianglem0|0|Polygon|2|KO-BKO trianglem0|0|MultiPoint|2|KO-BKO trianglem0|0|MultiLineString|2|KO-BKO trianglem0|0|MultiPolygon|2|KO-BKO trianglem0|0|GeometryCollection|2|KO-BKO trianglem0|0|CircularString|2|KO-BKO trianglem0|0|CompoundCurve|2|KO-BKO trianglem0|0|CurvePolygon|2|KO-BKO trianglem0|0|MultiCurve|2|KO-BKO trianglem0|0|MultiSurface|2|KO-BKO trianglem0|0|PolyhedralSurface|2|KO-BKO trianglem0|0|Triangle|2|KO-BKO trianglem0|0|Point|1|KO-BKO trianglem0|0|LineString|1|KO-BKO trianglem0|0|Polygon|1|KO-BKO trianglem0|0|MultiPoint|1|KO-BKO trianglem0|0|MultiLineString|1|KO-BKO trianglem0|0|MultiPolygon|1|KO-BKO trianglem0|0|GeometryCollection|1|KO-BKO trianglem0|0|CircularString|1|KO-BKO trianglem0|0|CompoundCurve|1|KO-BKO trianglem0|0|CurvePolygon|1|KO-BKO trianglem0|0|MultiCurve|1|KO-BKO trianglem0|0|MultiSurface|1|KO-BKO trianglem0|0|PolyhedralSurface|1|KO-BKO trianglem0|0|Triangle|1|OK-BOK trianglem0|0|Point|3|KO-BKO trianglem0|0|LineString|3|KO-BKO trianglem0|0|Polygon|3|KO-BKO trianglem0|0|MultiPoint|3|KO-BKO trianglem0|0|MultiLineString|3|KO-BKO trianglem0|0|MultiPolygon|3|KO-BKO trianglem0|0|GeometryCollection|3|KO-BKO trianglem0|0|CircularString|3|KO-BKO trianglem0|0|CompoundCurve|3|KO-BKO trianglem0|0|CurvePolygon|3|KO-BKO trianglem0|0|MultiCurve|3|KO-BKO trianglem0|0|MultiSurface|3|KO-BKO trianglem0|0|PolyhedralSurface|3|KO-BKO trianglem0|0|Triangle|3|KO-BKO trianglem0|4326|Point|0|KO-BKO trianglem0|4326|LineString|0|KO-BKO trianglem0|4326|Polygon|0|KO-BKO trianglem0|4326|MultiPoint|0|KO-BKO trianglem0|4326|MultiLineString|0|KO-BKO trianglem0|4326|MultiPolygon|0|KO-BKO trianglem0|4326|GeometryCollection|0|KO-BKO trianglem0|4326|CircularString|0|KO-BKO trianglem0|4326|CompoundCurve|0|KO-BKO trianglem0|4326|CurvePolygon|0|KO-BKO trianglem0|4326|MultiCurve|0|KO-BKO trianglem0|4326|MultiSurface|0|KO-BKO trianglem0|4326|PolyhedralSurface|0|KO-BKO trianglem0|4326|Triangle|0|KO-BKO trianglem0|4326|Tin|0|KO-BKO trianglem0|4326|Point|2|KO-BKO trianglem0|4326|LineString|2|KO-BKO trianglem0|4326|Polygon|2|KO-BKO trianglem0|4326|MultiPoint|2|KO-BKO trianglem0|4326|MultiLineString|2|KO-BKO trianglem0|4326|MultiPolygon|2|KO-BKO trianglem0|4326|GeometryCollection|2|KO-BKO trianglem0|4326|CircularString|2|KO-BKO trianglem0|4326|CompoundCurve|2|KO-BKO trianglem0|4326|CurvePolygon|2|KO-BKO trianglem0|4326|MultiCurve|2|KO-BKO trianglem0|4326|MultiSurface|2|KO-BKO trianglem0|4326|PolyhedralSurface|2|KO-BKO trianglem0|4326|Triangle|2|KO-BKO trianglem0|4326|Point|1|KO-BKO trianglem0|4326|LineString|1|KO-BKO trianglem0|4326|Polygon|1|KO-BKO trianglem0|4326|MultiPoint|1|KO-BKO trianglem0|4326|MultiLineString|1|KO-BKO trianglem0|4326|MultiPolygon|1|KO-BKO trianglem0|4326|GeometryCollection|1|KO-BKO trianglem0|4326|CircularString|1|KO-BKO trianglem0|4326|CompoundCurve|1|KO-BKO trianglem0|4326|CurvePolygon|1|KO-BKO trianglem0|4326|MultiCurve|1|KO-BKO trianglem0|4326|MultiSurface|1|KO-BKO trianglem0|4326|PolyhedralSurface|1|KO-BKO trianglem0|4326|Triangle|1|OK-BOK trianglem0|4326|Point|3|KO-BKO trianglem0|4326|LineString|3|KO-BKO trianglem0|4326|Polygon|3|KO-BKO trianglem0|4326|MultiPoint|3|KO-BKO trianglem0|4326|MultiLineString|3|KO-BKO trianglem0|4326|MultiPolygon|3|KO-BKO trianglem0|4326|GeometryCollection|3|KO-BKO trianglem0|4326|CircularString|3|KO-BKO trianglem0|4326|CompoundCurve|3|KO-BKO trianglem0|4326|CurvePolygon|3|KO-BKO trianglem0|4326|MultiCurve|3|KO-BKO trianglem0|4326|MultiSurface|3|KO-BKO trianglem0|4326|PolyhedralSurface|3|KO-BKO trianglem0|4326|Triangle|3|KO-BKO trianglem0||COUNT|4| trianglem4326|0|Point|0|KO-BKO trianglem4326|0|LineString|0|KO-BKO trianglem4326|0|Polygon|0|KO-BKO trianglem4326|0|MultiPoint|0|KO-BKO trianglem4326|0|MultiLineString|0|KO-BKO trianglem4326|0|MultiPolygon|0|KO-BKO trianglem4326|0|GeometryCollection|0|KO-BKO trianglem4326|0|CircularString|0|KO-BKO trianglem4326|0|CompoundCurve|0|KO-BKO trianglem4326|0|CurvePolygon|0|KO-BKO trianglem4326|0|MultiCurve|0|KO-BKO trianglem4326|0|MultiSurface|0|KO-BKO trianglem4326|0|PolyhedralSurface|0|KO-BKO trianglem4326|0|Triangle|0|KO-BKO trianglem4326|0|Tin|0|KO-BKO trianglem4326|0|Point|2|KO-BKO trianglem4326|0|LineString|2|KO-BKO trianglem4326|0|Polygon|2|KO-BKO trianglem4326|0|MultiPoint|2|KO-BKO trianglem4326|0|MultiLineString|2|KO-BKO trianglem4326|0|MultiPolygon|2|KO-BKO trianglem4326|0|GeometryCollection|2|KO-BKO trianglem4326|0|CircularString|2|KO-BKO trianglem4326|0|CompoundCurve|2|KO-BKO trianglem4326|0|CurvePolygon|2|KO-BKO trianglem4326|0|MultiCurve|2|KO-BKO trianglem4326|0|MultiSurface|2|KO-BKO trianglem4326|0|PolyhedralSurface|2|KO-BKO trianglem4326|0|Triangle|2|KO-BKO trianglem4326|0|Point|1|KO-BKO trianglem4326|0|LineString|1|KO-BKO trianglem4326|0|Polygon|1|KO-BKO trianglem4326|0|MultiPoint|1|KO-BKO trianglem4326|0|MultiLineString|1|KO-BKO trianglem4326|0|MultiPolygon|1|KO-BKO trianglem4326|0|GeometryCollection|1|KO-BKO trianglem4326|0|CircularString|1|KO-BKO trianglem4326|0|CompoundCurve|1|KO-BKO trianglem4326|0|CurvePolygon|1|KO-BKO trianglem4326|0|MultiCurve|1|KO-BKO trianglem4326|0|MultiSurface|1|KO-BKO trianglem4326|0|PolyhedralSurface|1|KO-BKO trianglem4326|0|Triangle|1|KO-BKO trianglem4326|0|Point|3|KO-BKO trianglem4326|0|LineString|3|KO-BKO trianglem4326|0|Polygon|3|KO-BKO trianglem4326|0|MultiPoint|3|KO-BKO trianglem4326|0|MultiLineString|3|KO-BKO trianglem4326|0|MultiPolygon|3|KO-BKO trianglem4326|0|GeometryCollection|3|KO-BKO trianglem4326|0|CircularString|3|KO-BKO trianglem4326|0|CompoundCurve|3|KO-BKO trianglem4326|0|CurvePolygon|3|KO-BKO trianglem4326|0|MultiCurve|3|KO-BKO trianglem4326|0|MultiSurface|3|KO-BKO trianglem4326|0|PolyhedralSurface|3|KO-BKO trianglem4326|0|Triangle|3|KO-BKO trianglem4326|4326|Point|0|KO-BKO trianglem4326|4326|LineString|0|KO-BKO trianglem4326|4326|Polygon|0|KO-BKO trianglem4326|4326|MultiPoint|0|KO-BKO trianglem4326|4326|MultiLineString|0|KO-BKO trianglem4326|4326|MultiPolygon|0|KO-BKO trianglem4326|4326|GeometryCollection|0|KO-BKO trianglem4326|4326|CircularString|0|KO-BKO trianglem4326|4326|CompoundCurve|0|KO-BKO trianglem4326|4326|CurvePolygon|0|KO-BKO trianglem4326|4326|MultiCurve|0|KO-BKO trianglem4326|4326|MultiSurface|0|KO-BKO trianglem4326|4326|PolyhedralSurface|0|KO-BKO trianglem4326|4326|Triangle|0|KO-BKO trianglem4326|4326|Tin|0|KO-BKO trianglem4326|4326|Point|2|KO-BKO trianglem4326|4326|LineString|2|KO-BKO trianglem4326|4326|Polygon|2|KO-BKO trianglem4326|4326|MultiPoint|2|KO-BKO trianglem4326|4326|MultiLineString|2|KO-BKO trianglem4326|4326|MultiPolygon|2|KO-BKO trianglem4326|4326|GeometryCollection|2|KO-BKO trianglem4326|4326|CircularString|2|KO-BKO trianglem4326|4326|CompoundCurve|2|KO-BKO trianglem4326|4326|CurvePolygon|2|KO-BKO trianglem4326|4326|MultiCurve|2|KO-BKO trianglem4326|4326|MultiSurface|2|KO-BKO trianglem4326|4326|PolyhedralSurface|2|KO-BKO trianglem4326|4326|Triangle|2|KO-BKO trianglem4326|4326|Point|1|KO-BKO trianglem4326|4326|LineString|1|KO-BKO trianglem4326|4326|Polygon|1|KO-BKO trianglem4326|4326|MultiPoint|1|KO-BKO trianglem4326|4326|MultiLineString|1|KO-BKO trianglem4326|4326|MultiPolygon|1|KO-BKO trianglem4326|4326|GeometryCollection|1|KO-BKO trianglem4326|4326|CircularString|1|KO-BKO trianglem4326|4326|CompoundCurve|1|KO-BKO trianglem4326|4326|CurvePolygon|1|KO-BKO trianglem4326|4326|MultiCurve|1|KO-BKO trianglem4326|4326|MultiSurface|1|KO-BKO trianglem4326|4326|PolyhedralSurface|1|KO-BKO trianglem4326|4326|Triangle|1|OK-BOK trianglem4326|4326|Point|3|KO-BKO trianglem4326|4326|LineString|3|KO-BKO trianglem4326|4326|Polygon|3|KO-BKO trianglem4326|4326|MultiPoint|3|KO-BKO trianglem4326|4326|MultiLineString|3|KO-BKO trianglem4326|4326|MultiPolygon|3|KO-BKO trianglem4326|4326|GeometryCollection|3|KO-BKO trianglem4326|4326|CircularString|3|KO-BKO trianglem4326|4326|CompoundCurve|3|KO-BKO trianglem4326|4326|CurvePolygon|3|KO-BKO trianglem4326|4326|MultiCurve|3|KO-BKO trianglem4326|4326|MultiSurface|3|KO-BKO trianglem4326|4326|PolyhedralSurface|3|KO-BKO trianglem4326|4326|Triangle|3|KO-BKO trianglem4326||COUNT|2| trianglez|0|Point|0|KO-BKO trianglez|0|LineString|0|KO-BKO trianglez|0|Polygon|0|KO-BKO trianglez|0|MultiPoint|0|KO-BKO trianglez|0|MultiLineString|0|KO-BKO trianglez|0|MultiPolygon|0|KO-BKO trianglez|0|GeometryCollection|0|KO-BKO trianglez|0|CircularString|0|KO-BKO trianglez|0|CompoundCurve|0|KO-BKO trianglez|0|CurvePolygon|0|KO-BKO trianglez|0|MultiCurve|0|KO-BKO trianglez|0|MultiSurface|0|KO-BKO trianglez|0|PolyhedralSurface|0|KO-BKO trianglez|0|Triangle|0|KO-BKO trianglez|0|Tin|0|KO-BKO trianglez|0|Point|2|KO-BKO trianglez|0|LineString|2|KO-BKO trianglez|0|Polygon|2|KO-BKO trianglez|0|MultiPoint|2|KO-BKO trianglez|0|MultiLineString|2|KO-BKO trianglez|0|MultiPolygon|2|KO-BKO trianglez|0|GeometryCollection|2|KO-BKO trianglez|0|CircularString|2|KO-BKO trianglez|0|CompoundCurve|2|KO-BKO trianglez|0|CurvePolygon|2|KO-BKO trianglez|0|MultiCurve|2|KO-BKO trianglez|0|MultiSurface|2|KO-BKO trianglez|0|PolyhedralSurface|2|KO-BKO trianglez|0|Triangle|2|OK-BOK trianglez|0|Point|1|KO-BKO trianglez|0|LineString|1|KO-BKO trianglez|0|Polygon|1|KO-BKO trianglez|0|MultiPoint|1|KO-BKO trianglez|0|MultiLineString|1|KO-BKO trianglez|0|MultiPolygon|1|KO-BKO trianglez|0|GeometryCollection|1|KO-BKO trianglez|0|CircularString|1|KO-BKO trianglez|0|CompoundCurve|1|KO-BKO trianglez|0|CurvePolygon|1|KO-BKO trianglez|0|MultiCurve|1|KO-BKO trianglez|0|MultiSurface|1|KO-BKO trianglez|0|PolyhedralSurface|1|KO-BKO trianglez|0|Triangle|1|KO-BKO trianglez|0|Point|3|KO-BKO trianglez|0|LineString|3|KO-BKO trianglez|0|Polygon|3|KO-BKO trianglez|0|MultiPoint|3|KO-BKO trianglez|0|MultiLineString|3|KO-BKO trianglez|0|MultiPolygon|3|KO-BKO trianglez|0|GeometryCollection|3|KO-BKO trianglez|0|CircularString|3|KO-BKO trianglez|0|CompoundCurve|3|KO-BKO trianglez|0|CurvePolygon|3|KO-BKO trianglez|0|MultiCurve|3|KO-BKO trianglez|0|MultiSurface|3|KO-BKO trianglez|0|PolyhedralSurface|3|KO-BKO trianglez|0|Triangle|3|KO-BKO trianglez|4326|Point|0|KO-BKO trianglez|4326|LineString|0|KO-BKO trianglez|4326|Polygon|0|KO-BKO trianglez|4326|MultiPoint|0|KO-BKO trianglez|4326|MultiLineString|0|KO-BKO trianglez|4326|MultiPolygon|0|KO-BKO trianglez|4326|GeometryCollection|0|KO-BKO trianglez|4326|CircularString|0|KO-BKO trianglez|4326|CompoundCurve|0|KO-BKO trianglez|4326|CurvePolygon|0|KO-BKO trianglez|4326|MultiCurve|0|KO-BKO trianglez|4326|MultiSurface|0|KO-BKO trianglez|4326|PolyhedralSurface|0|KO-BKO trianglez|4326|Triangle|0|KO-BKO trianglez|4326|Tin|0|KO-BKO trianglez|4326|Point|2|KO-BKO trianglez|4326|LineString|2|KO-BKO trianglez|4326|Polygon|2|KO-BKO trianglez|4326|MultiPoint|2|KO-BKO trianglez|4326|MultiLineString|2|KO-BKO trianglez|4326|MultiPolygon|2|KO-BKO trianglez|4326|GeometryCollection|2|KO-BKO trianglez|4326|CircularString|2|KO-BKO trianglez|4326|CompoundCurve|2|KO-BKO trianglez|4326|CurvePolygon|2|KO-BKO trianglez|4326|MultiCurve|2|KO-BKO trianglez|4326|MultiSurface|2|KO-BKO trianglez|4326|PolyhedralSurface|2|KO-BKO trianglez|4326|Triangle|2|OK-BOK trianglez|4326|Point|1|KO-BKO trianglez|4326|LineString|1|KO-BKO trianglez|4326|Polygon|1|KO-BKO trianglez|4326|MultiPoint|1|KO-BKO trianglez|4326|MultiLineString|1|KO-BKO trianglez|4326|MultiPolygon|1|KO-BKO trianglez|4326|GeometryCollection|1|KO-BKO trianglez|4326|CircularString|1|KO-BKO trianglez|4326|CompoundCurve|1|KO-BKO trianglez|4326|CurvePolygon|1|KO-BKO trianglez|4326|MultiCurve|1|KO-BKO trianglez|4326|MultiSurface|1|KO-BKO trianglez|4326|PolyhedralSurface|1|KO-BKO trianglez|4326|Triangle|1|KO-BKO trianglez|4326|Point|3|KO-BKO trianglez|4326|LineString|3|KO-BKO trianglez|4326|Polygon|3|KO-BKO trianglez|4326|MultiPoint|3|KO-BKO trianglez|4326|MultiLineString|3|KO-BKO trianglez|4326|MultiPolygon|3|KO-BKO trianglez|4326|GeometryCollection|3|KO-BKO trianglez|4326|CircularString|3|KO-BKO trianglez|4326|CompoundCurve|3|KO-BKO trianglez|4326|CurvePolygon|3|KO-BKO trianglez|4326|MultiCurve|3|KO-BKO trianglez|4326|MultiSurface|3|KO-BKO trianglez|4326|PolyhedralSurface|3|KO-BKO trianglez|4326|Triangle|3|KO-BKO trianglez||COUNT|4| trianglez0|0|Point|0|KO-BKO trianglez0|0|LineString|0|KO-BKO trianglez0|0|Polygon|0|KO-BKO trianglez0|0|MultiPoint|0|KO-BKO trianglez0|0|MultiLineString|0|KO-BKO trianglez0|0|MultiPolygon|0|KO-BKO trianglez0|0|GeometryCollection|0|KO-BKO trianglez0|0|CircularString|0|KO-BKO trianglez0|0|CompoundCurve|0|KO-BKO trianglez0|0|CurvePolygon|0|KO-BKO trianglez0|0|MultiCurve|0|KO-BKO trianglez0|0|MultiSurface|0|KO-BKO trianglez0|0|PolyhedralSurface|0|KO-BKO trianglez0|0|Triangle|0|KO-BKO trianglez0|0|Tin|0|KO-BKO trianglez0|0|Point|2|KO-BKO trianglez0|0|LineString|2|KO-BKO trianglez0|0|Polygon|2|KO-BKO trianglez0|0|MultiPoint|2|KO-BKO trianglez0|0|MultiLineString|2|KO-BKO trianglez0|0|MultiPolygon|2|KO-BKO trianglez0|0|GeometryCollection|2|KO-BKO trianglez0|0|CircularString|2|KO-BKO trianglez0|0|CompoundCurve|2|KO-BKO trianglez0|0|CurvePolygon|2|KO-BKO trianglez0|0|MultiCurve|2|KO-BKO trianglez0|0|MultiSurface|2|KO-BKO trianglez0|0|PolyhedralSurface|2|KO-BKO trianglez0|0|Triangle|2|OK-BOK trianglez0|0|Point|1|KO-BKO trianglez0|0|LineString|1|KO-BKO trianglez0|0|Polygon|1|KO-BKO trianglez0|0|MultiPoint|1|KO-BKO trianglez0|0|MultiLineString|1|KO-BKO trianglez0|0|MultiPolygon|1|KO-BKO trianglez0|0|GeometryCollection|1|KO-BKO trianglez0|0|CircularString|1|KO-BKO trianglez0|0|CompoundCurve|1|KO-BKO trianglez0|0|CurvePolygon|1|KO-BKO trianglez0|0|MultiCurve|1|KO-BKO trianglez0|0|MultiSurface|1|KO-BKO trianglez0|0|PolyhedralSurface|1|KO-BKO trianglez0|0|Triangle|1|KO-BKO trianglez0|0|Point|3|KO-BKO trianglez0|0|LineString|3|KO-BKO trianglez0|0|Polygon|3|KO-BKO trianglez0|0|MultiPoint|3|KO-BKO trianglez0|0|MultiLineString|3|KO-BKO trianglez0|0|MultiPolygon|3|KO-BKO trianglez0|0|GeometryCollection|3|KO-BKO trianglez0|0|CircularString|3|KO-BKO trianglez0|0|CompoundCurve|3|KO-BKO trianglez0|0|CurvePolygon|3|KO-BKO trianglez0|0|MultiCurve|3|KO-BKO trianglez0|0|MultiSurface|3|KO-BKO trianglez0|0|PolyhedralSurface|3|KO-BKO trianglez0|0|Triangle|3|KO-BKO trianglez0|4326|Point|0|KO-BKO trianglez0|4326|LineString|0|KO-BKO trianglez0|4326|Polygon|0|KO-BKO trianglez0|4326|MultiPoint|0|KO-BKO trianglez0|4326|MultiLineString|0|KO-BKO trianglez0|4326|MultiPolygon|0|KO-BKO trianglez0|4326|GeometryCollection|0|KO-BKO trianglez0|4326|CircularString|0|KO-BKO trianglez0|4326|CompoundCurve|0|KO-BKO trianglez0|4326|CurvePolygon|0|KO-BKO trianglez0|4326|MultiCurve|0|KO-BKO trianglez0|4326|MultiSurface|0|KO-BKO trianglez0|4326|PolyhedralSurface|0|KO-BKO trianglez0|4326|Triangle|0|KO-BKO trianglez0|4326|Tin|0|KO-BKO trianglez0|4326|Point|2|KO-BKO trianglez0|4326|LineString|2|KO-BKO trianglez0|4326|Polygon|2|KO-BKO trianglez0|4326|MultiPoint|2|KO-BKO trianglez0|4326|MultiLineString|2|KO-BKO trianglez0|4326|MultiPolygon|2|KO-BKO trianglez0|4326|GeometryCollection|2|KO-BKO trianglez0|4326|CircularString|2|KO-BKO trianglez0|4326|CompoundCurve|2|KO-BKO trianglez0|4326|CurvePolygon|2|KO-BKO trianglez0|4326|MultiCurve|2|KO-BKO trianglez0|4326|MultiSurface|2|KO-BKO trianglez0|4326|PolyhedralSurface|2|KO-BKO trianglez0|4326|Triangle|2|OK-BOK trianglez0|4326|Point|1|KO-BKO trianglez0|4326|LineString|1|KO-BKO trianglez0|4326|Polygon|1|KO-BKO trianglez0|4326|MultiPoint|1|KO-BKO trianglez0|4326|MultiLineString|1|KO-BKO trianglez0|4326|MultiPolygon|1|KO-BKO trianglez0|4326|GeometryCollection|1|KO-BKO trianglez0|4326|CircularString|1|KO-BKO trianglez0|4326|CompoundCurve|1|KO-BKO trianglez0|4326|CurvePolygon|1|KO-BKO trianglez0|4326|MultiCurve|1|KO-BKO trianglez0|4326|MultiSurface|1|KO-BKO trianglez0|4326|PolyhedralSurface|1|KO-BKO trianglez0|4326|Triangle|1|KO-BKO trianglez0|4326|Point|3|KO-BKO trianglez0|4326|LineString|3|KO-BKO trianglez0|4326|Polygon|3|KO-BKO trianglez0|4326|MultiPoint|3|KO-BKO trianglez0|4326|MultiLineString|3|KO-BKO trianglez0|4326|MultiPolygon|3|KO-BKO trianglez0|4326|GeometryCollection|3|KO-BKO trianglez0|4326|CircularString|3|KO-BKO trianglez0|4326|CompoundCurve|3|KO-BKO trianglez0|4326|CurvePolygon|3|KO-BKO trianglez0|4326|MultiCurve|3|KO-BKO trianglez0|4326|MultiSurface|3|KO-BKO trianglez0|4326|PolyhedralSurface|3|KO-BKO trianglez0|4326|Triangle|3|KO-BKO trianglez0||COUNT|4| trianglez4326|0|Point|0|KO-BKO trianglez4326|0|LineString|0|KO-BKO trianglez4326|0|Polygon|0|KO-BKO trianglez4326|0|MultiPoint|0|KO-BKO trianglez4326|0|MultiLineString|0|KO-BKO trianglez4326|0|MultiPolygon|0|KO-BKO trianglez4326|0|GeometryCollection|0|KO-BKO trianglez4326|0|CircularString|0|KO-BKO trianglez4326|0|CompoundCurve|0|KO-BKO trianglez4326|0|CurvePolygon|0|KO-BKO trianglez4326|0|MultiCurve|0|KO-BKO trianglez4326|0|MultiSurface|0|KO-BKO trianglez4326|0|PolyhedralSurface|0|KO-BKO trianglez4326|0|Triangle|0|KO-BKO trianglez4326|0|Tin|0|KO-BKO trianglez4326|0|Point|2|KO-BKO trianglez4326|0|LineString|2|KO-BKO trianglez4326|0|Polygon|2|KO-BKO trianglez4326|0|MultiPoint|2|KO-BKO trianglez4326|0|MultiLineString|2|KO-BKO trianglez4326|0|MultiPolygon|2|KO-BKO trianglez4326|0|GeometryCollection|2|KO-BKO trianglez4326|0|CircularString|2|KO-BKO trianglez4326|0|CompoundCurve|2|KO-BKO trianglez4326|0|CurvePolygon|2|KO-BKO trianglez4326|0|MultiCurve|2|KO-BKO trianglez4326|0|MultiSurface|2|KO-BKO trianglez4326|0|PolyhedralSurface|2|KO-BKO trianglez4326|0|Triangle|2|KO-BKO trianglez4326|0|Point|1|KO-BKO trianglez4326|0|LineString|1|KO-BKO trianglez4326|0|Polygon|1|KO-BKO trianglez4326|0|MultiPoint|1|KO-BKO trianglez4326|0|MultiLineString|1|KO-BKO trianglez4326|0|MultiPolygon|1|KO-BKO trianglez4326|0|GeometryCollection|1|KO-BKO trianglez4326|0|CircularString|1|KO-BKO trianglez4326|0|CompoundCurve|1|KO-BKO trianglez4326|0|CurvePolygon|1|KO-BKO trianglez4326|0|MultiCurve|1|KO-BKO trianglez4326|0|MultiSurface|1|KO-BKO trianglez4326|0|PolyhedralSurface|1|KO-BKO trianglez4326|0|Triangle|1|KO-BKO trianglez4326|0|Point|3|KO-BKO trianglez4326|0|LineString|3|KO-BKO trianglez4326|0|Polygon|3|KO-BKO trianglez4326|0|MultiPoint|3|KO-BKO trianglez4326|0|MultiLineString|3|KO-BKO trianglez4326|0|MultiPolygon|3|KO-BKO trianglez4326|0|GeometryCollection|3|KO-BKO trianglez4326|0|CircularString|3|KO-BKO trianglez4326|0|CompoundCurve|3|KO-BKO trianglez4326|0|CurvePolygon|3|KO-BKO trianglez4326|0|MultiCurve|3|KO-BKO trianglez4326|0|MultiSurface|3|KO-BKO trianglez4326|0|PolyhedralSurface|3|KO-BKO trianglez4326|0|Triangle|3|KO-BKO trianglez4326|4326|Point|0|KO-BKO trianglez4326|4326|LineString|0|KO-BKO trianglez4326|4326|Polygon|0|KO-BKO trianglez4326|4326|MultiPoint|0|KO-BKO trianglez4326|4326|MultiLineString|0|KO-BKO trianglez4326|4326|MultiPolygon|0|KO-BKO trianglez4326|4326|GeometryCollection|0|KO-BKO trianglez4326|4326|CircularString|0|KO-BKO trianglez4326|4326|CompoundCurve|0|KO-BKO trianglez4326|4326|CurvePolygon|0|KO-BKO trianglez4326|4326|MultiCurve|0|KO-BKO trianglez4326|4326|MultiSurface|0|KO-BKO trianglez4326|4326|PolyhedralSurface|0|KO-BKO trianglez4326|4326|Triangle|0|KO-BKO trianglez4326|4326|Tin|0|KO-BKO trianglez4326|4326|Point|2|KO-BKO trianglez4326|4326|LineString|2|KO-BKO trianglez4326|4326|Polygon|2|KO-BKO trianglez4326|4326|MultiPoint|2|KO-BKO trianglez4326|4326|MultiLineString|2|KO-BKO trianglez4326|4326|MultiPolygon|2|KO-BKO trianglez4326|4326|GeometryCollection|2|KO-BKO trianglez4326|4326|CircularString|2|KO-BKO trianglez4326|4326|CompoundCurve|2|KO-BKO trianglez4326|4326|CurvePolygon|2|KO-BKO trianglez4326|4326|MultiCurve|2|KO-BKO trianglez4326|4326|MultiSurface|2|KO-BKO trianglez4326|4326|PolyhedralSurface|2|KO-BKO trianglez4326|4326|Triangle|2|OK-BOK trianglez4326|4326|Point|1|KO-BKO trianglez4326|4326|LineString|1|KO-BKO trianglez4326|4326|Polygon|1|KO-BKO trianglez4326|4326|MultiPoint|1|KO-BKO trianglez4326|4326|MultiLineString|1|KO-BKO trianglez4326|4326|MultiPolygon|1|KO-BKO trianglez4326|4326|GeometryCollection|1|KO-BKO trianglez4326|4326|CircularString|1|KO-BKO trianglez4326|4326|CompoundCurve|1|KO-BKO trianglez4326|4326|CurvePolygon|1|KO-BKO trianglez4326|4326|MultiCurve|1|KO-BKO trianglez4326|4326|MultiSurface|1|KO-BKO trianglez4326|4326|PolyhedralSurface|1|KO-BKO trianglez4326|4326|Triangle|1|KO-BKO trianglez4326|4326|Point|3|KO-BKO trianglez4326|4326|LineString|3|KO-BKO trianglez4326|4326|Polygon|3|KO-BKO trianglez4326|4326|MultiPoint|3|KO-BKO trianglez4326|4326|MultiLineString|3|KO-BKO trianglez4326|4326|MultiPolygon|3|KO-BKO trianglez4326|4326|GeometryCollection|3|KO-BKO trianglez4326|4326|CircularString|3|KO-BKO trianglez4326|4326|CompoundCurve|3|KO-BKO trianglez4326|4326|CurvePolygon|3|KO-BKO trianglez4326|4326|MultiCurve|3|KO-BKO trianglez4326|4326|MultiSurface|3|KO-BKO trianglez4326|4326|PolyhedralSurface|3|KO-BKO trianglez4326|4326|Triangle|3|KO-BKO trianglez4326||COUNT|2| trianglezm|0|Point|0|KO-BKO trianglezm|0|LineString|0|KO-BKO trianglezm|0|Polygon|0|KO-BKO trianglezm|0|MultiPoint|0|KO-BKO trianglezm|0|MultiLineString|0|KO-BKO trianglezm|0|MultiPolygon|0|KO-BKO trianglezm|0|GeometryCollection|0|KO-BKO trianglezm|0|CircularString|0|KO-BKO trianglezm|0|CompoundCurve|0|KO-BKO trianglezm|0|CurvePolygon|0|KO-BKO trianglezm|0|MultiCurve|0|KO-BKO trianglezm|0|MultiSurface|0|KO-BKO trianglezm|0|PolyhedralSurface|0|KO-BKO trianglezm|0|Triangle|0|KO-BKO trianglezm|0|Tin|0|KO-BKO trianglezm|0|Point|2|KO-BKO trianglezm|0|LineString|2|KO-BKO trianglezm|0|Polygon|2|KO-BKO trianglezm|0|MultiPoint|2|KO-BKO trianglezm|0|MultiLineString|2|KO-BKO trianglezm|0|MultiPolygon|2|KO-BKO trianglezm|0|GeometryCollection|2|KO-BKO trianglezm|0|CircularString|2|KO-BKO trianglezm|0|CompoundCurve|2|KO-BKO trianglezm|0|CurvePolygon|2|KO-BKO trianglezm|0|MultiCurve|2|KO-BKO trianglezm|0|MultiSurface|2|KO-BKO trianglezm|0|PolyhedralSurface|2|KO-BKO trianglezm|0|Triangle|2|KO-BKO trianglezm|0|Point|1|KO-BKO trianglezm|0|LineString|1|KO-BKO trianglezm|0|Polygon|1|KO-BKO trianglezm|0|MultiPoint|1|KO-BKO trianglezm|0|MultiLineString|1|KO-BKO trianglezm|0|MultiPolygon|1|KO-BKO trianglezm|0|GeometryCollection|1|KO-BKO trianglezm|0|CircularString|1|KO-BKO trianglezm|0|CompoundCurve|1|KO-BKO trianglezm|0|CurvePolygon|1|KO-BKO trianglezm|0|MultiCurve|1|KO-BKO trianglezm|0|MultiSurface|1|KO-BKO trianglezm|0|PolyhedralSurface|1|KO-BKO trianglezm|0|Triangle|1|KO-BKO trianglezm|0|Point|3|KO-BKO trianglezm|0|LineString|3|KO-BKO trianglezm|0|Polygon|3|KO-BKO trianglezm|0|MultiPoint|3|KO-BKO trianglezm|0|MultiLineString|3|KO-BKO trianglezm|0|MultiPolygon|3|KO-BKO trianglezm|0|GeometryCollection|3|KO-BKO trianglezm|0|CircularString|3|KO-BKO trianglezm|0|CompoundCurve|3|KO-BKO trianglezm|0|CurvePolygon|3|KO-BKO trianglezm|0|MultiCurve|3|KO-BKO trianglezm|0|MultiSurface|3|KO-BKO trianglezm|0|PolyhedralSurface|3|KO-BKO trianglezm|0|Triangle|3|OK-BOK trianglezm|4326|Point|0|KO-BKO trianglezm|4326|LineString|0|KO-BKO trianglezm|4326|Polygon|0|KO-BKO trianglezm|4326|MultiPoint|0|KO-BKO trianglezm|4326|MultiLineString|0|KO-BKO trianglezm|4326|MultiPolygon|0|KO-BKO trianglezm|4326|GeometryCollection|0|KO-BKO trianglezm|4326|CircularString|0|KO-BKO trianglezm|4326|CompoundCurve|0|KO-BKO trianglezm|4326|CurvePolygon|0|KO-BKO trianglezm|4326|MultiCurve|0|KO-BKO trianglezm|4326|MultiSurface|0|KO-BKO trianglezm|4326|PolyhedralSurface|0|KO-BKO trianglezm|4326|Triangle|0|KO-BKO trianglezm|4326|Tin|0|KO-BKO trianglezm|4326|Point|2|KO-BKO trianglezm|4326|LineString|2|KO-BKO trianglezm|4326|Polygon|2|KO-BKO trianglezm|4326|MultiPoint|2|KO-BKO trianglezm|4326|MultiLineString|2|KO-BKO trianglezm|4326|MultiPolygon|2|KO-BKO trianglezm|4326|GeometryCollection|2|KO-BKO trianglezm|4326|CircularString|2|KO-BKO trianglezm|4326|CompoundCurve|2|KO-BKO trianglezm|4326|CurvePolygon|2|KO-BKO trianglezm|4326|MultiCurve|2|KO-BKO trianglezm|4326|MultiSurface|2|KO-BKO trianglezm|4326|PolyhedralSurface|2|KO-BKO trianglezm|4326|Triangle|2|KO-BKO trianglezm|4326|Point|1|KO-BKO trianglezm|4326|LineString|1|KO-BKO trianglezm|4326|Polygon|1|KO-BKO trianglezm|4326|MultiPoint|1|KO-BKO trianglezm|4326|MultiLineString|1|KO-BKO trianglezm|4326|MultiPolygon|1|KO-BKO trianglezm|4326|GeometryCollection|1|KO-BKO trianglezm|4326|CircularString|1|KO-BKO trianglezm|4326|CompoundCurve|1|KO-BKO trianglezm|4326|CurvePolygon|1|KO-BKO trianglezm|4326|MultiCurve|1|KO-BKO trianglezm|4326|MultiSurface|1|KO-BKO trianglezm|4326|PolyhedralSurface|1|KO-BKO trianglezm|4326|Triangle|1|KO-BKO trianglezm|4326|Point|3|KO-BKO trianglezm|4326|LineString|3|KO-BKO trianglezm|4326|Polygon|3|KO-BKO trianglezm|4326|MultiPoint|3|KO-BKO trianglezm|4326|MultiLineString|3|KO-BKO trianglezm|4326|MultiPolygon|3|KO-BKO trianglezm|4326|GeometryCollection|3|KO-BKO trianglezm|4326|CircularString|3|KO-BKO trianglezm|4326|CompoundCurve|3|KO-BKO trianglezm|4326|CurvePolygon|3|KO-BKO trianglezm|4326|MultiCurve|3|KO-BKO trianglezm|4326|MultiSurface|3|KO-BKO trianglezm|4326|PolyhedralSurface|3|KO-BKO trianglezm|4326|Triangle|3|OK-BOK trianglezm||COUNT|4| trianglezm0|0|Point|0|KO-BKO trianglezm0|0|LineString|0|KO-BKO trianglezm0|0|Polygon|0|KO-BKO trianglezm0|0|MultiPoint|0|KO-BKO trianglezm0|0|MultiLineString|0|KO-BKO trianglezm0|0|MultiPolygon|0|KO-BKO trianglezm0|0|GeometryCollection|0|KO-BKO trianglezm0|0|CircularString|0|KO-BKO trianglezm0|0|CompoundCurve|0|KO-BKO trianglezm0|0|CurvePolygon|0|KO-BKO trianglezm0|0|MultiCurve|0|KO-BKO trianglezm0|0|MultiSurface|0|KO-BKO trianglezm0|0|PolyhedralSurface|0|KO-BKO trianglezm0|0|Triangle|0|KO-BKO trianglezm0|0|Tin|0|KO-BKO trianglezm0|0|Point|2|KO-BKO trianglezm0|0|LineString|2|KO-BKO trianglezm0|0|Polygon|2|KO-BKO trianglezm0|0|MultiPoint|2|KO-BKO trianglezm0|0|MultiLineString|2|KO-BKO trianglezm0|0|MultiPolygon|2|KO-BKO trianglezm0|0|GeometryCollection|2|KO-BKO trianglezm0|0|CircularString|2|KO-BKO trianglezm0|0|CompoundCurve|2|KO-BKO trianglezm0|0|CurvePolygon|2|KO-BKO trianglezm0|0|MultiCurve|2|KO-BKO trianglezm0|0|MultiSurface|2|KO-BKO trianglezm0|0|PolyhedralSurface|2|KO-BKO trianglezm0|0|Triangle|2|KO-BKO trianglezm0|0|Point|1|KO-BKO trianglezm0|0|LineString|1|KO-BKO trianglezm0|0|Polygon|1|KO-BKO trianglezm0|0|MultiPoint|1|KO-BKO trianglezm0|0|MultiLineString|1|KO-BKO trianglezm0|0|MultiPolygon|1|KO-BKO trianglezm0|0|GeometryCollection|1|KO-BKO trianglezm0|0|CircularString|1|KO-BKO trianglezm0|0|CompoundCurve|1|KO-BKO trianglezm0|0|CurvePolygon|1|KO-BKO trianglezm0|0|MultiCurve|1|KO-BKO trianglezm0|0|MultiSurface|1|KO-BKO trianglezm0|0|PolyhedralSurface|1|KO-BKO trianglezm0|0|Triangle|1|KO-BKO trianglezm0|0|Point|3|KO-BKO trianglezm0|0|LineString|3|KO-BKO trianglezm0|0|Polygon|3|KO-BKO trianglezm0|0|MultiPoint|3|KO-BKO trianglezm0|0|MultiLineString|3|KO-BKO trianglezm0|0|MultiPolygon|3|KO-BKO trianglezm0|0|GeometryCollection|3|KO-BKO trianglezm0|0|CircularString|3|KO-BKO trianglezm0|0|CompoundCurve|3|KO-BKO trianglezm0|0|CurvePolygon|3|KO-BKO trianglezm0|0|MultiCurve|3|KO-BKO trianglezm0|0|MultiSurface|3|KO-BKO trianglezm0|0|PolyhedralSurface|3|KO-BKO trianglezm0|0|Triangle|3|OK-BOK trianglezm0|4326|Point|0|KO-BKO trianglezm0|4326|LineString|0|KO-BKO trianglezm0|4326|Polygon|0|KO-BKO trianglezm0|4326|MultiPoint|0|KO-BKO trianglezm0|4326|MultiLineString|0|KO-BKO trianglezm0|4326|MultiPolygon|0|KO-BKO trianglezm0|4326|GeometryCollection|0|KO-BKO trianglezm0|4326|CircularString|0|KO-BKO trianglezm0|4326|CompoundCurve|0|KO-BKO trianglezm0|4326|CurvePolygon|0|KO-BKO trianglezm0|4326|MultiCurve|0|KO-BKO trianglezm0|4326|MultiSurface|0|KO-BKO trianglezm0|4326|PolyhedralSurface|0|KO-BKO trianglezm0|4326|Triangle|0|KO-BKO trianglezm0|4326|Tin|0|KO-BKO trianglezm0|4326|Point|2|KO-BKO trianglezm0|4326|LineString|2|KO-BKO trianglezm0|4326|Polygon|2|KO-BKO trianglezm0|4326|MultiPoint|2|KO-BKO trianglezm0|4326|MultiLineString|2|KO-BKO trianglezm0|4326|MultiPolygon|2|KO-BKO trianglezm0|4326|GeometryCollection|2|KO-BKO trianglezm0|4326|CircularString|2|KO-BKO trianglezm0|4326|CompoundCurve|2|KO-BKO trianglezm0|4326|CurvePolygon|2|KO-BKO trianglezm0|4326|MultiCurve|2|KO-BKO trianglezm0|4326|MultiSurface|2|KO-BKO trianglezm0|4326|PolyhedralSurface|2|KO-BKO trianglezm0|4326|Triangle|2|KO-BKO trianglezm0|4326|Point|1|KO-BKO trianglezm0|4326|LineString|1|KO-BKO trianglezm0|4326|Polygon|1|KO-BKO trianglezm0|4326|MultiPoint|1|KO-BKO trianglezm0|4326|MultiLineString|1|KO-BKO trianglezm0|4326|MultiPolygon|1|KO-BKO trianglezm0|4326|GeometryCollection|1|KO-BKO trianglezm0|4326|CircularString|1|KO-BKO trianglezm0|4326|CompoundCurve|1|KO-BKO trianglezm0|4326|CurvePolygon|1|KO-BKO trianglezm0|4326|MultiCurve|1|KO-BKO trianglezm0|4326|MultiSurface|1|KO-BKO trianglezm0|4326|PolyhedralSurface|1|KO-BKO trianglezm0|4326|Triangle|1|KO-BKO trianglezm0|4326|Point|3|KO-BKO trianglezm0|4326|LineString|3|KO-BKO trianglezm0|4326|Polygon|3|KO-BKO trianglezm0|4326|MultiPoint|3|KO-BKO trianglezm0|4326|MultiLineString|3|KO-BKO trianglezm0|4326|MultiPolygon|3|KO-BKO trianglezm0|4326|GeometryCollection|3|KO-BKO trianglezm0|4326|CircularString|3|KO-BKO trianglezm0|4326|CompoundCurve|3|KO-BKO trianglezm0|4326|CurvePolygon|3|KO-BKO trianglezm0|4326|MultiCurve|3|KO-BKO trianglezm0|4326|MultiSurface|3|KO-BKO trianglezm0|4326|PolyhedralSurface|3|KO-BKO trianglezm0|4326|Triangle|3|OK-BOK trianglezm0||COUNT|4| trianglezm4326|0|Point|0|KO-BKO trianglezm4326|0|LineString|0|KO-BKO trianglezm4326|0|Polygon|0|KO-BKO trianglezm4326|0|MultiPoint|0|KO-BKO trianglezm4326|0|MultiLineString|0|KO-BKO trianglezm4326|0|MultiPolygon|0|KO-BKO trianglezm4326|0|GeometryCollection|0|KO-BKO trianglezm4326|0|CircularString|0|KO-BKO trianglezm4326|0|CompoundCurve|0|KO-BKO trianglezm4326|0|CurvePolygon|0|KO-BKO trianglezm4326|0|MultiCurve|0|KO-BKO trianglezm4326|0|MultiSurface|0|KO-BKO trianglezm4326|0|PolyhedralSurface|0|KO-BKO trianglezm4326|0|Triangle|0|KO-BKO trianglezm4326|0|Tin|0|KO-BKO trianglezm4326|0|Point|2|KO-BKO trianglezm4326|0|LineString|2|KO-BKO trianglezm4326|0|Polygon|2|KO-BKO trianglezm4326|0|MultiPoint|2|KO-BKO trianglezm4326|0|MultiLineString|2|KO-BKO trianglezm4326|0|MultiPolygon|2|KO-BKO trianglezm4326|0|GeometryCollection|2|KO-BKO trianglezm4326|0|CircularString|2|KO-BKO trianglezm4326|0|CompoundCurve|2|KO-BKO trianglezm4326|0|CurvePolygon|2|KO-BKO trianglezm4326|0|MultiCurve|2|KO-BKO trianglezm4326|0|MultiSurface|2|KO-BKO trianglezm4326|0|PolyhedralSurface|2|KO-BKO trianglezm4326|0|Triangle|2|KO-BKO trianglezm4326|0|Point|1|KO-BKO trianglezm4326|0|LineString|1|KO-BKO trianglezm4326|0|Polygon|1|KO-BKO trianglezm4326|0|MultiPoint|1|KO-BKO trianglezm4326|0|MultiLineString|1|KO-BKO trianglezm4326|0|MultiPolygon|1|KO-BKO trianglezm4326|0|GeometryCollection|1|KO-BKO trianglezm4326|0|CircularString|1|KO-BKO trianglezm4326|0|CompoundCurve|1|KO-BKO trianglezm4326|0|CurvePolygon|1|KO-BKO trianglezm4326|0|MultiCurve|1|KO-BKO trianglezm4326|0|MultiSurface|1|KO-BKO trianglezm4326|0|PolyhedralSurface|1|KO-BKO trianglezm4326|0|Triangle|1|KO-BKO trianglezm4326|0|Point|3|KO-BKO trianglezm4326|0|LineString|3|KO-BKO trianglezm4326|0|Polygon|3|KO-BKO trianglezm4326|0|MultiPoint|3|KO-BKO trianglezm4326|0|MultiLineString|3|KO-BKO trianglezm4326|0|MultiPolygon|3|KO-BKO trianglezm4326|0|GeometryCollection|3|KO-BKO trianglezm4326|0|CircularString|3|KO-BKO trianglezm4326|0|CompoundCurve|3|KO-BKO trianglezm4326|0|CurvePolygon|3|KO-BKO trianglezm4326|0|MultiCurve|3|KO-BKO trianglezm4326|0|MultiSurface|3|KO-BKO trianglezm4326|0|PolyhedralSurface|3|KO-BKO trianglezm4326|0|Triangle|3|KO-BKO trianglezm4326|4326|Point|0|KO-BKO trianglezm4326|4326|LineString|0|KO-BKO trianglezm4326|4326|Polygon|0|KO-BKO trianglezm4326|4326|MultiPoint|0|KO-BKO trianglezm4326|4326|MultiLineString|0|KO-BKO trianglezm4326|4326|MultiPolygon|0|KO-BKO trianglezm4326|4326|GeometryCollection|0|KO-BKO trianglezm4326|4326|CircularString|0|KO-BKO trianglezm4326|4326|CompoundCurve|0|KO-BKO trianglezm4326|4326|CurvePolygon|0|KO-BKO trianglezm4326|4326|MultiCurve|0|KO-BKO trianglezm4326|4326|MultiSurface|0|KO-BKO trianglezm4326|4326|PolyhedralSurface|0|KO-BKO trianglezm4326|4326|Triangle|0|KO-BKO trianglezm4326|4326|Tin|0|KO-BKO trianglezm4326|4326|Point|2|KO-BKO trianglezm4326|4326|LineString|2|KO-BKO trianglezm4326|4326|Polygon|2|KO-BKO trianglezm4326|4326|MultiPoint|2|KO-BKO trianglezm4326|4326|MultiLineString|2|KO-BKO trianglezm4326|4326|MultiPolygon|2|KO-BKO trianglezm4326|4326|GeometryCollection|2|KO-BKO trianglezm4326|4326|CircularString|2|KO-BKO trianglezm4326|4326|CompoundCurve|2|KO-BKO trianglezm4326|4326|CurvePolygon|2|KO-BKO trianglezm4326|4326|MultiCurve|2|KO-BKO trianglezm4326|4326|MultiSurface|2|KO-BKO trianglezm4326|4326|PolyhedralSurface|2|KO-BKO trianglezm4326|4326|Triangle|2|KO-BKO trianglezm4326|4326|Point|1|KO-BKO trianglezm4326|4326|LineString|1|KO-BKO trianglezm4326|4326|Polygon|1|KO-BKO trianglezm4326|4326|MultiPoint|1|KO-BKO trianglezm4326|4326|MultiLineString|1|KO-BKO trianglezm4326|4326|MultiPolygon|1|KO-BKO trianglezm4326|4326|GeometryCollection|1|KO-BKO trianglezm4326|4326|CircularString|1|KO-BKO trianglezm4326|4326|CompoundCurve|1|KO-BKO trianglezm4326|4326|CurvePolygon|1|KO-BKO trianglezm4326|4326|MultiCurve|1|KO-BKO trianglezm4326|4326|MultiSurface|1|KO-BKO trianglezm4326|4326|PolyhedralSurface|1|KO-BKO trianglezm4326|4326|Triangle|1|KO-BKO trianglezm4326|4326|Point|3|KO-BKO trianglezm4326|4326|LineString|3|KO-BKO trianglezm4326|4326|Polygon|3|KO-BKO trianglezm4326|4326|MultiPoint|3|KO-BKO trianglezm4326|4326|MultiLineString|3|KO-BKO trianglezm4326|4326|MultiPolygon|3|KO-BKO trianglezm4326|4326|GeometryCollection|3|KO-BKO trianglezm4326|4326|CircularString|3|KO-BKO trianglezm4326|4326|CompoundCurve|3|KO-BKO trianglezm4326|4326|CurvePolygon|3|KO-BKO trianglezm4326|4326|MultiCurve|3|KO-BKO trianglezm4326|4326|MultiSurface|3|KO-BKO trianglezm4326|4326|PolyhedralSurface|3|KO-BKO trianglezm4326|4326|Triangle|3|OK-BOK trianglezm4326||COUNT|2| ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_sfcgal_expected���������������������������������������������0000644�0000000�0000000�00000001613�12143217372�022032� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis_sfcgal_version|1 ST_Tesselate|GEOMETRYCOLLECTION(POINT(4 4),TIN(((0 1,1 0,1 1,0 1)),((0 1,0 0,1 0,0 1)))) ST_3DArea|1 ST_Extrude_point|LINESTRING Z (0 0 0,1 0 0) ST_Extrude_line|POLYHEDRALSURFACE Z (((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0))) ST_Extrude_surface|POLYHEDRALSURFACE Z (((1 1 0,1 0 0,0 1 0,1 1 0)),((0 1 1,1 0 1,1 1 1,0 1 1)),((1 0 0,0 0 0,0 1 0,1 0 0)),((0 1 1,0 0 1,1 0 1,0 1 1)),((1 0 0,1 1 0,1 1 1,1 0 1,1 0 0)),((1 1 0,0 1 0,0 1 1,1 1 1,1 1 0)),((0 1 0,0 0 0,0 0 1,0 1 1,0 1 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))) ST_ForceLHR|POLYGON((0 0,1 0,1 1,0 1,0 0)) ST_Orientation_1|-1 ST_Orientation_2|1 ST_MinkowskiSum|MULTIPOLYGON(((0 0,1 0,5 0,5 1,4 1,0 1,0 0))) ST_StraightSkeleton|MULTILINESTRING((0 0,0.5 0.5),(1 0,0.5 0.5),(1 1,0.5 0.5),(0 1,0.5 0.5)) intersection_geos|POINT(0 0) intersection_sfcgal|POINT(-0 -0) ERROR: Can't find foo geometry backend ERROR: Can't find geometry backend ���������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/relate_bnr.sql������������������������������������������������������0000644�0000000�0000000�00000437617�11722777314�020125� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT '1', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((0 0,80 0,80 80,0 80,0 0))'::geometry as a, 'POLYGON((100 200,100 140,180 140,180 200,100 200))'::geometry as b) as f; SELECT '2', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((0 0,140 0,140 140,0 140,0 0))'::geometry as a, 'POLYGON((140 0,0 0,0 140,140 140,140 0))'::geometry as b) as f; SELECT '3', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((40 60,360 60,360 300,40 300,40 60))'::geometry as a, 'POLYGON((120 100,280 100,280 240,120 240,120 100))'::geometry as b) as f; SELECT '4', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((40 60,420 60,420 320,40 320,40 60),(200 140,160 220,260 200,200 140))'::geometry as a, 'POLYGON((80 100,360 100,360 280,80 280,80 100))'::geometry as b) as f; SELECT '5', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((0 280,0 0,260 0,260 280,0 280),(220 240,40 240,40 40,220 40,220 240))'::geometry as a, 'POLYGON((20 260,240 260,240 20,20 20,20 260),(160 180,80 180,120 120,160 180))'::geometry as b) as f; SELECT '6', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((60 80,200 80,200 220,60 220,60 80))'::geometry as a, 'POLYGON((120 140,260 140,260 260,120 260,120 140))'::geometry as b) as f; SELECT '7', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((60 220,220 220,140 140,60 220))'::geometry as a, 'POLYGON((100 180,180 180,180 100,100 100,100 180))'::geometry as b) as f; SELECT '8', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((40 40,180 40,180 180,40 180,40 40))'::geometry as a, 'POLYGON((180 40,40 180,160 280,300 140,180 40))'::geometry as b) as f; SELECT '9', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 60,140 100,100 140,60 100,100 60))'::geometry as a, 'MULTIPOLYGON(((80 40,120 40,120 80,80 80,80 40)),((120 80,160 80,160 120,120 120,120 80)),((80 120,120 120,120 160,80 160,80 120)),((40 80,80 80,80 120,40 120,40 80)))'::geometry as b) as f; SELECT '10', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((40 280,200 280,200 100,40 100,40 280),(100 220,120 220,120 200,100 180,100 220))'::geometry as a, 'POLYGON((40 280,180 260,180 120,60 120,40 280))'::geometry as b) as f; SELECT '11', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((0 200,0 0,200 0,200 200,0 200),(20 180,130 180,130 30,20 30,20 180))'::geometry as a, 'POLYGON((60 90,130 90,130 30,60 30,60 90))'::geometry as b) as f; SELECT '12', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as a, 'POLYGON((270 90,200 50,150 80,210 120,270 90))'::geometry as b) as f; SELECT '13', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 60,140 100,100 140,60 100,100 60))'::geometry as a, 'MULTIPOLYGON(((80 40,120 40,120 80,80 80,80 40)),((120 80,160 80,160 120,120 120,120 80)),((80 120,120 120,120 160,80 160,80 120)),((40 80,80 80,80 120,40 120,40 80)))'::geometry as b) as f; SELECT '14', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 120,100 240)'::geometry as a, 'POLYGON((40 60,160 60,160 180,40 180,40 60))'::geometry as b) as f; SELECT '15', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 80,140 140,200 200)'::geometry as a, 'POLYGON((40 40,140 40,140 140,40 140,40 40))'::geometry as b) as f; SELECT '16', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(70 50,70 150)'::geometry as a, 'MULTIPOLYGON(((0 0,0 100,140 100,140 0,0 0)),((20 170,70 100,130 170,20 170)))'::geometry as b) as f; SELECT '17', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,150 70)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(110 110,250 100,140 30,110 110))'::geometry as b) as f; SELECT '18', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,150 70)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(111 110,250 100,140 30,111 110))'::geometry as b) as f; SELECT '19', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,170 110)'::geometry as a, 'POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'::geometry as b) as f; SELECT '20', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,170 110)'::geometry as a, 'POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,131 40,200 110,130 180))'::geometry as b) as f; SELECT '21', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(160 70,320 230)'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '22', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 140,100 40)'::geometry as a, 'MULTIPOLYGON(((20 80,180 79,100 0,20 80)),((20 160,180 160,100 80,20 160)))'::geometry as b) as f; SELECT '23', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 140,100 40)'::geometry as a, 'MULTIPOLYGON(((20 80,180 80,100 0,20 80)),((20 160,180 160,100 80,20 160)))'::geometry as b) as f; SELECT '24', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 60,20 150,200 150,110 60)'::geometry as a, 'POLYGON((20 20,200 20,110 110,20 20))'::geometry as b) as f; SELECT '25', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(0 0,0 50,50 50,50 0,0 0)'::geometry as a, 'MULTILINESTRING((0 0,0 50),(0 50,50 50),(50 50,50 0),(50 0,0 0))'::geometry as b) as f; SELECT '26', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 180,140 180)'::geometry as a, 'MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((20 180,20 80,180 80,180 180,20 180)))'::geometry as b) as f; SELECT '27', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 180,140 180)'::geometry as a, 'MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((60 180,60 80,180 80,180 180,60 180)))'::geometry as b) as f; SELECT '28', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(0 0,60 0,60 60,60 0,120 0)'::geometry as a, 'MULTILINESTRING((0 0,60 0),(60 0,120 0),(60 0,60 60))'::geometry as b) as f; SELECT '29', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 0,20 80,100 80,80 120,40 140)'::geometry as a, 'LINESTRING(140 300,220 160,260 200,240 260)'::geometry as b) as f; SELECT '30', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 0,20 80,100 80,80 120,40 140)'::geometry as a, 'LINESTRING(60 40,140 40,140 160,0 160)'::geometry as b) as f; SELECT '31', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 0,20 80,100 80,80 120,40 140)'::geometry as a, 'LINESTRING(140 280,240 280,240 180,140 180,140 280)'::geometry as b) as f; SELECT '32', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(140 0,0 0,40 60,0 120,60 200,220 160,220 40)'::geometry as a, 'LINESTRING(80 140,180 100,160 40,100 40,60 100,80 140)'::geometry as b) as f; SELECT '33', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,80 80)'::geometry as a, 'LINESTRING(20 20,80 80)'::geometry as b) as f; SELECT '34', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,160 160,200 60,60 140)'::geometry as a, 'LINESTRING(40 40,160 160,200 60,60 140)'::geometry as b) as f; SELECT '35', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,200 40)'::geometry as a, 'LINESTRING(200 40,140 40,40 40)'::geometry as b) as f; SELECT '36', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(0 0,110 0,60 0)'::geometry as a, 'LINESTRING(0 0,110 0)'::geometry as b) as f; SELECT '37', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(0 0,0 50,50 50,50 0,0 0)'::geometry as a, 'MULTILINESTRING((0 0,0 50),(0 50,50 50),(50 50,50 0),(50 0,0 0))'::geometry as b) as f; SELECT '38', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(0 0,80 0,80 60,80 0,170 0)'::geometry as a, 'MULTILINESTRING((0 0,170 0),(80 0,80 60))'::geometry as b) as f; SELECT '39', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 100,180 200)'::geometry as a, 'LINESTRING(80 180,180 120)'::geometry as b) as f; SELECT '40', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,160 160)'::geometry as a, 'LINESTRING(160 60,100 100,60 140)'::geometry as b) as f; SELECT '41', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,180 100,180 180,100 180,100 100)'::geometry as a, 'LINESTRING(140 60,60 140)'::geometry as b) as f; SELECT '42', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,180 180,100 180,100 100)'::geometry as a, 'LINESTRING(140 60,60 140)'::geometry as b) as f; SELECT '43', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 110,200 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'::geometry as b) as f; SELECT '44', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 90,50 50,0 0)'::geometry as a, 'LINESTRING(0 0,100 100)'::geometry as b) as f; SELECT '45', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 140,240 140)'::geometry as a, 'LINESTRING(40 140,100 140,80 80,120 60,100 140,160 140,160 100,200 100,160 140,240 140)'::geometry as b) as f; SELECT '46', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,100 20,20 20)'::geometry as a, 'LINESTRING(60 20,200 20)'::geometry as b) as f; SELECT '47', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 60,180 60,180 140,100 140,100 60,220 60,220 180,80 180,80 60,280 60)'::geometry as a, 'LINESTRING(140 60,180 60,220 60,260 60)'::geometry as b) as f; SELECT '48', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '49', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(0 20,40 20)'::geometry as a, 'POLYGON((20 40,20 0,60 0,60 40,20 40))'::geometry as b) as f; SELECT '50', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(0 20,20 20)'::geometry as a, 'POLYGON((20 40,20 0,60 0,60 40,20 40))'::geometry as b) as f; SELECT '51', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 20,40 20)'::geometry as a, 'POLYGON((20 40,20 0,60 0,60 40,20 40))'::geometry as b) as f; SELECT '52', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(80 260,140 260,180 260)'::geometry as a, 'POLYGON((40 320,140 320,140 200,40 200,40 320))'::geometry as b) as f; SELECT '53', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(40 40)'::geometry as a, 'MULTIPOLYGON(((0 40,0 0,40 0,40 40,0 40)),((40 80,40 40,80 40,80 80,40 80)))'::geometry as b) as f; SELECT '54', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(60 120)'::geometry as a, 'LINESTRING(40 40,120 120,200 120)'::geometry as b) as f; SELECT '55', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(40 40)'::geometry as a, 'LINESTRING(40 40,100 100,160 100)'::geometry as b) as f; SELECT '56', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(60 60)'::geometry as a, 'LINESTRING(40 40,100 100)'::geometry as b) as f; SELECT '57', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 40,100 40)'::geometry as a, 'LINESTRING(40 40,80 80)'::geometry as b) as f; SELECT '58', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 40,60 60)'::geometry as a, 'LINESTRING(40 40,80 80)'::geometry as b) as f; SELECT '59', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(60 60,100 100)'::geometry as a, 'LINESTRING(40 40,80 80)'::geometry as b) as f; SELECT '60', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(60 60,100 100)'::geometry as a, 'LINESTRING(40 40,80 80)'::geometry as b) as f; SELECT '61', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(60 60,100 100)'::geometry as a, 'LINESTRING(40 40,60 60,80 80)'::geometry as b) as f; SELECT '62', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'POINT(20 20)'::geometry as b) as f; SELECT '63', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'POINT(20 30)'::geometry as b) as f; SELECT '64', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 40,80 60,40 100)'::geometry as a, 'MULTIPOINT(40 40,80 60,120 100)'::geometry as b) as f; SELECT '65', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 40,80 60,120 100)'::geometry as a, 'MULTIPOINT(40 40,80 60,120 100)'::geometry as b) as f; SELECT '66', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 100,100 200,200 200,200 100,100 100))'::geometry as a, 'POLYGON((100 100,1e+15 110,1e+15 100,100 100))'::geometry as b) as f; SELECT '67', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 100,120 200,200 200,200 100,120 100))'::geometry as a, 'POLYGON((100 100,1e+15 110,1e+15 100,100 100))'::geometry as b) as f; SELECT '68', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 100,120 100,140 20,20 20))'::geometry as a, 'POLYGON((20 20,20 100,120 100,140 20,20 20))'::geometry as b) as f; SELECT '69', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 100,120 100,140 20,20 20))'::geometry as a, 'POLYGON((20 20,140 20,120 100,20 100,20 20))'::geometry as b) as f; SELECT '70', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 100,120 100,140 20,20 20))'::geometry as a, 'POLYGON((120 100,140 20,20 20,20 100,120 100))'::geometry as b) as f; SELECT '71', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 100,120 100,140 20,20 20))'::geometry as a, 'POLYGON((20 100,60 100,120 100,140 20,80 20,20 20,20 100))'::geometry as b) as f; SELECT '72', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((0 0,80 0,80 80,0 80,0 0))'::geometry as a, 'POLYGON((100 200,100 140,180 140,180 200,100 200))'::geometry as b) as f; SELECT '73', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((140 120,140 200,240 200,240 120,140 120))'::geometry as b) as f; SELECT '74', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((80 180,140 260,260 200,200 60,80 180))'::geometry as b) as f; SELECT '75', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((240 80,140 120,180 240,280 200,240 80))'::geometry as b) as f; SELECT '76', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 160,20 20,270 20,150 160,230 40,60 40,140 160))'::geometry as a, 'POLYGON((140 40,180 80,120 100,140 40))'::geometry as b) as f; SELECT '77', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 160,20 20,270 20,150 160,230 40,60 40,140 160))'::geometry as a, 'POLYGON((120 100,180 80,130 40,120 100))'::geometry as b) as f; SELECT '78', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,180 20,140 140,20 140,20 20))'::geometry as a, 'POLYGON((180 100,80 200,180 280,260 200,180 100))'::geometry as b) as f; SELECT '79', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((140 140,20 120,0 220,120 240,140 140))'::geometry as b) as f; SELECT '80', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((160 200,210 70,120 70,160 200))'::geometry as a, 'POLYGON((160 200,260 40,70 40,160 200,20 20,310 20,160 200))'::geometry as b) as f; SELECT '81', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((110 140,200 70,200 160,110 140))'::geometry as a, 'POLYGON((110 140,110 50,60 50,60 90,160 190,20 110,20 20,200 20,110 140))'::geometry as b) as f; SELECT '82', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 120,20 20,260 20,260 120,200 40,140 120,80 40,20 120))'::geometry as a, 'POLYGON((20 120,20 240,260 240,260 120,200 200,140 120,80 200,20 120))'::geometry as b) as f; SELECT '83', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 120,20 20,260 20,260 120,180 40,140 120,100 40,20 120))'::geometry as a, 'POLYGON((20 120,300 120,140 240,20 120))'::geometry as b) as f; SELECT '84', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 300,280 300,280 260,220 260,60 100,60 60,280 60,280 20,20 20))'::geometry as a, 'POLYGON((100 140,160 80,280 180,200 240,220 160,160 200,180 120,100 140))'::geometry as b) as f; SELECT '85', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 300,280 300,280 260,220 260,60 100,60 60,280 60,280 20,20 20))'::geometry as a, 'POLYGON((260 200,180 80,120 160,200 160,180 220,260 200))'::geometry as b) as f; SELECT '86', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,280 20,280 140,220 60,140 140,80 60,20 140,20 20))'::geometry as a, 'POLYGON((0 140,300 140,140 240,0 140))'::geometry as b) as f; SELECT '87', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,280 20,280 140,220 60,140 140,80 60,20 140,20 20))'::geometry as a, 'POLYGON((20 240,20 140,320 140,180 240,20 240))'::geometry as b) as f; SELECT '88', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,280 20,280 140,220 60,140 140,80 60,20 140,20 20))'::geometry as a, 'POLYGON((20 240,20 140,80 180,140 140,220 180,280 140,280 240,20 240))'::geometry as b) as f; SELECT '89', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 120,180 60,20 20,20 120,120 120))'::geometry as a, 'POLYGON((120 120,220 20,280 20,240 160,120 120))'::geometry as b) as f; SELECT '90', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((140 120,160 20,260 120,220 200,140 120))'::geometry as b) as f; SELECT '91', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 140,120 40,20 40,20 140))'::geometry as a, 'POLYGON((190 140,190 20,140 20,20 140,190 140))'::geometry as b) as f; SELECT '92', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 120,180 60,20 20,20 120,120 120))'::geometry as a, 'POLYGON((300 20,220 20,120 120,260 160,300 20))'::geometry as b) as f; SELECT '93', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((140 120,240 160,280 60,160 20,140 120))'::geometry as b) as f; SELECT '94', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 120,180 60,20 20,20 120,120 120))'::geometry as a, 'POLYGON((280 60,180 60,120 120,260 180,280 60))'::geometry as b) as f; SELECT '95', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((120 200,120 120,40 120,40 200,120 200))'::geometry as b) as f; SELECT '96', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((160 220,140 120,60 120,40 220,160 220))'::geometry as b) as f; SELECT '97', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 120,160 20,20 20,20 120,140 120))'::geometry as a, 'POLYGON((140 120,20 120,20 220,140 220,140 120))'::geometry as b) as f; SELECT '98', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 120,180 60,20 20,20 120,120 120))'::geometry as a, 'POLYGON((320 20,220 20,80 160,240 140,320 20))'::geometry as b) as f; SELECT '99', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((60 40,60 140,180 140,180 40,60 40))'::geometry as b) as f; SELECT '100', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,80 140,160 60,20 20))'::geometry as b) as f; SELECT '101', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((160 60,20 20,100 140,160 60))'::geometry as b) as f; SELECT '102', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 100,140 160,160 40,20 100))'::geometry as b) as f; SELECT '103', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((160 40,20 100,160 160,160 40))'::geometry as b) as f; SELECT '104', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 180,180 120,80 40,20 180))'::geometry as b) as f; SELECT '105', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((180 120,100 40,20 180,180 120))'::geometry as b) as f; SELECT '106', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,140 40,140 120,20 160,80 80,20 20))'::geometry as b) as f; SELECT '107', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,140 40,140 140,20 180,80 100,20 20))'::geometry as b) as f; SELECT '108', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((40 180,60 100,180 100,200 180,120 120,40 180))'::geometry as b) as f; SELECT '109', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 180,60 80,180 80,220 180,120 120,20 180))'::geometry as b) as f; SELECT '110', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((40 60,20 180,100 100,140 180,160 120,220 100,140 40,40 60))'::geometry as b) as f; SELECT '111', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((60 100,180 100,220 180,120 140,20 180,60 100))'::geometry as b) as f; SELECT '112', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,20 140,120 120,120 40,20 20))'::geometry as b) as f; SELECT '113', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,20 180,140 140,140 60,20 20))'::geometry as b) as f; SELECT '114', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,120 40,120 120,20 140,20 20))'::geometry as b) as f; SELECT '115', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((120 40,20 20,20 140,120 120,120 40))'::geometry as b) as f; SELECT '116', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,140 60,140 140,20 180,20 20))'::geometry as b) as f; SELECT '117', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((140 60,20 20,20 180,140 140,140 60))'::geometry as b) as f; SELECT '118', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,60 120,140 120,180 20,20 20))'::geometry as b) as f; SELECT '119', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 40,120 40,120 120,20 140,20 40))'::geometry as b) as f; SELECT '120', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,20 180,220 180,220 20,20 20))'::geometry as a, 'POLYGON((20 20,20 180,60 120,100 180,140 120,220 180,200 120,140 60,20 20))'::geometry as b) as f; SELECT '121', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((150 150,330 150,250 70,70 70,150 150))'::geometry as a, 'POLYGON((150 150,270 150,140 20,20 20,150 150))'::geometry as b) as f; SELECT '122', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((150 150,270 150,330 150,250 70,190 70,70 70,150 150))'::geometry as a, 'POLYGON((150 150,270 150,190 70,140 20,20 20,70 70,150 150))'::geometry as b) as f; SELECT '123', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((20 20,60 50,20 40,60 70,20 60,60 90,20 90,70 110,20 130,80 130,20 150,80 160,20 170,80 180,20 200,80 200,30 240,80 220,50 260,100 220,100 260,120 220,130 260,140 220,150 280,150 190,160 280,170 190,180 280,190 190,200 280,210 190,220 280,230 190,240 260,250 230,260 260,260 220,290 270,290 220,330 260,300 210,340 240,290 180,340 210,290 170,350 170,240 150,350 150,240 140,350 130,240 120,350 120,240 110,350 110,240 100,350 100,240 90,350 90,240 80,350 80,300 70,340 60,290 60,340 40,300 50,340 20,270 60,310 20,250 60,270 20,230 60,240 20,210 60,210 20,190 70,190 20,180 90,170 20,160 90,150 20,140 90,130 20,120 90,110 20,100 90,100 20,90 60,80 20,70 40,20 20))'::geometry as a, 'POLYGON((190 140,140 130,200 160,130 150,210 170,130 170,210 180,120 190,220 200,120 200,250 210,120 210,250 220,120 220,250 230,120 240,230 240,120 250,240 260,120 260,240 270,120 270,270 290,120 290,230 300,150 310,250 310,180 320,250 320,200 360,260 330,240 360,280 320,290 370,290 320,320 360,310 320,360 360,310 310,380 340,310 290,390 330,310 280,410 310,310 270,420 280,310 260,430 250,300 250,440 240,300 240,450 230,280 220,440 220,280 210,440 210,300 200,430 190,300 190,440 180,330 180,430 150,320 180,420 130,300 180,410 120,280 180,400 110,280 170,390 90,280 160,400 70,270 160,450 30,260 160,420 30,250 160,390 30,240 160,370 30,230 160,360 30,230 150,330 50,240 130,330 30,230 130,310 30,220 130,280 30,230 100,270 40,220 110,250 30,210 130,240 30,210 100,220 40,200 90,200 20,190 100,180 30,20 20,180 40,20 30,180 50,20 50,180 60,30 60,180 70,20 70,170 80,80 80,170 90,20 80,180 100,40 100,200 110,60 110,200 120,120 120,190 140))'::geometry as b) as f; SELECT '124', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((70 150,20 160,110 160,20 180,100 200,20 200,190 210,20 210,160 220,20 220,150 230,60 240,180 250,20 260,170 260,60 270,160 270,100 310,170 280,200 260,180 230,210 260,130 330,230 250,210 290,240 250,230 210,260 300,250 230,270 300,270 240,300 340,280 250,320 330,290 250,340 350,290 240,350 360,270 190,350 340,290 200,350 330,300 190,360 320,310 190,360 300,320 200,360 280,330 200,360 260,340 200,370 260,340 180,390 290,340 170,400 260,350 170,400 250,350 160,410 240,350 150,400 170,350 140,310 170,340 140,270 180,330 140,260 170,310 140,240 170,290 140,200 190,270 140,180 190,260 140,170 190,260 130,170 180,250 130,170 170,240 120,170 160,210 120,170 150,210 110,340 130,230 110,420 140,220 100,410 130,220 90,400 120,220 80,390 110,220 70,420 110,240 70,420 100,260 70,420 90,280 70,430 80,230 60,430 60,270 50,450 40,210 50,370 40,260 40,460 30,160 40,210 60,200 110,190 60,190 120,170 50,180 130,150 30,170 130,140 20,160 120,130 20,160 150,120 20,160 170,110 20,160 190,100 20,150 190,90 20,140 180,80 20,120 140,70 20,120 150,60 20,110 150,50 20,100 140,50 30,90 130,40 30,80 120,30 30,80 130,30 40,80 140,20 40,70 140,40 90,60 130,20 90,60 140,20 130,70 150))'::geometry as a, 'POLYGON((190 140,140 130,200 160,130 150,210 170,130 170,210 180,120 190,220 200,120 200,250 210,120 210,250 220,120 220,250 230,120 240,230 240,120 250,240 260,120 260,240 270,120 270,270 290,120 290,230 300,150 310,250 310,180 320,250 320,200 360,260 330,240 360,280 320,290 370,290 320,320 360,310 320,360 360,310 310,380 340,310 290,390 330,310 280,410 310,310 270,420 280,310 260,430 250,300 250,440 240,300 240,450 230,280 220,440 220,280 210,440 210,300 200,430 190,300 190,440 180,330 180,430 150,320 180,420 130,300 180,410 120,280 180,400 110,280 170,390 90,280 160,400 70,270 160,450 30,260 160,420 30,250 160,390 30,240 160,370 30,230 160,360 30,230 150,330 50,240 130,330 30,230 130,310 30,220 130,280 30,230 100,270 40,220 110,250 30,210 130,240 30,210 100,220 40,200 90,200 20,190 100,180 30,20 20,180 40,20 30,180 50,20 50,180 60,30 60,180 70,20 70,170 80,80 80,170 90,20 80,180 100,40 100,200 110,60 110,200 120,120 120,190 140))'::geometry as b) as f; SELECT '125', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((60 160,220 160,220 20,60 20,60 160))'::geometry as a, 'POLYGON((60 160,20 200,260 200,220 160,140 80,60 160))'::geometry as b) as f; SELECT '126', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((60 160,220 160,220 20,60 20,60 160))'::geometry as a, 'POLYGON((60 160,20 200,260 200,140 80,60 160))'::geometry as b) as f; SELECT '127', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((60 160,220 160,220 20,60 20,60 160))'::geometry as a, 'POLYGON((20 200,140 80,260 200,20 200))'::geometry as b) as f; SELECT '128', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((60 160,220 160,220 20,60 20,60 160))'::geometry as a, 'POLYGON((20 200,60 160,140 80,220 160,260 200,20 200))'::geometry as b) as f; SELECT '129', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((60 160,220 160,220 20,60 20,60 160))'::geometry as a, 'POLYGON((20 200,60 160,140 80,260 200,20 200))'::geometry as b) as f; SELECT '130', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((0 0,0 200,200 200,200 0,0 0))'::geometry as a, 'POLYGON((100 100,1000000 110,10000000 100,100 100))'::geometry as b) as f; SELECT '131', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 0,100 200,200 200,200 0,100 0))'::geometry as a, 'POLYGON((100 100,1000000 110,10000000 100,100 100))'::geometry as b) as f; SELECT '132', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 0,120 200,200 200,200 0,120 0))'::geometry as a, 'POLYGON((100 100,1000000 110,10000000 100,100 100))'::geometry as b) as f; SELECT '133', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((0 0,0 200,110 200,110 0,0 0))'::geometry as a, 'POLYGON((100 100,1000000 110,10000000 100,100 100))'::geometry as b) as f; SELECT '134', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 100,100 200,200 200,200 100,100 100))'::geometry as a, 'POLYGON((100 100,2100 110,2100 100,100 100))'::geometry as b) as f; SELECT '135', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 100,100 200,200 200,200 100,100 100))'::geometry as a, 'POLYGON((100 100,2101 110,2101 100,100 100))'::geometry as b) as f; SELECT '136', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 100,200 200,200 100,100 100))'::geometry as a, 'POLYGON((100 100,2101 110,2101 100,100 100))'::geometry as b) as f; SELECT '137', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 100,100 200,200 200,200 100,100 100))'::geometry as a, 'POLYGON((100 100,1000000 110,1000000 100,100 100))'::geometry as b) as f; SELECT '138', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 100,120 200,200 200,200 100,120 100))'::geometry as a, 'POLYGON((100 100,500 110,500 100,100 100))'::geometry as b) as f; SELECT '139', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 100,120 200,200 200,200 100,120 100))'::geometry as a, 'POLYGON((100 100,501 110,501 100,100 100))'::geometry as b) as f; SELECT '140', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 100,130 200,200 200,200 100,120 100))'::geometry as a, 'POLYGON((100 100,501 110,501 100,100 100))'::geometry as b) as f; SELECT '141', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 100,17 200,200 200,200 100,120 100))'::geometry as a, 'POLYGON((100 100,501 110,501 100,100 100))'::geometry as b) as f; SELECT '142', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((120 100,120 200,200 200,200 100,120 100))'::geometry as a, 'POLYGON((100 100,1000000 110,1000000 100,100 100))'::geometry as b) as f; SELECT '143', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((101 99,101 1000000,102 1000000,101 99))'::geometry as a, 'POLYGON((100 100,1000000 110,1000000 100,100 100))'::geometry as b) as f; SELECT '144', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 100,200 101,200 100,100 100))'::geometry as a, 'POLYGON((100 100,2101 110,2101 100,100 100))'::geometry as b) as f; SELECT '145', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((16 319,150 39,25 302,160 20,265 20,127 317,16 319))'::geometry as a, 'POLYGON((10 307,22 307,153 34,22 34,10 307))'::geometry as b) as f; SELECT '146', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((160 200,210 70,120 70,160 200))'::geometry as a, 'POLYGON((160 200,310 20,20 20,160 200),(160 200,260 40,70 40,160 200))'::geometry as b) as f; SELECT '147', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((170 120,240 100,260 50,190 70,170 120))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '148', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((270 90,200 50,150 80,210 120,270 90))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '149', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((170 120,260 100,240 60,150 80,170 120))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '150', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((220 120,270 80,200 60,160 100,220 120))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '151', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((260 50,180 70,180 110,260 90,260 50))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '152', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((230 110,290 80,190 60,140 90,230 110))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '153', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((170 120,330 120,260 50,100 50,170 120))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '154', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((170 120,330 120,280 70,120 70,170 120))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '155', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((170 120,300 120,250 70,120 70,170 120))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '156', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((190 100,310 100,260 50,140 50,190 100))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '157', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((280 130,360 130,270 40,190 40,280 130))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'::geometry as b) as f; SELECT '158', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((220 80,180 40,80 40,170 130,270 130,230 90,300 90,250 30,280 30,390 140,150 140,40 30,230 30,280 80,220 80))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'::geometry as b) as f; SELECT '159', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((260 130,360 130,280 40,170 40,260 130))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'::geometry as b) as f; SELECT '160', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((240 110,340 110,290 60,190 60,240 110))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'::geometry as b) as f; SELECT '161', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((250 120,350 120,280 50,180 50,250 120))'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'::geometry as b) as f; SELECT '162', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((230 210,230 20,20 20,20 210,230 210),(120 180,50 50,200 50,120 180))'::geometry as a, 'POLYGON((230 210,230 20,20 20,20 210,230 210),(120 180,50 50,200 50,120 180))'::geometry as b) as f; SELECT '163', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((230 210,230 20,20 20,20 210,230 210),(140 40,40 40,40 170,140 40),(110 190,210 190,210 50,110 190))'::geometry as a, 'POLYGON((230 210,230 20,20 20,20 210,230 210),(140 40,40 40,40 170,140 40),(110 190,210 190,210 50,110 190))'::geometry as b) as f; SELECT '164', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((280 190,330 150,200 110,150 150,280 190))'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '165', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((80 190,220 190,140 110,0 110,80 190))'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '166', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((330 150,200 110,150 150,280 190,330 150))'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '167', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((290 190,340 150,220 120,170 170,290 190))'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '168', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((220 190,340 190,260 110,140 110,220 190))'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '169', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 190,220 190,100 70,20 70,140 190))'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '170', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((140 220,60 140,140 60,220 140,140 220))'::geometry as a, 'MULTIPOLYGON(((100 20,180 20,180 100,100 100,100 20)),((20 100,100 100,100 180,20 180,20 100)),((100 180,180 180,180 260,100 260,100 180)),((180 100,260 100,260 180,180 180,180 100)))'::geometry as b) as f; SELECT '171', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOLYGON(((110 110,70 200,150 200,110 110)),((110 110,150 20,70 20,110 110)))'::geometry as a, 'MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110)),((110 110,60 60,10 110,60 160,110 110)))'::geometry as b) as f; SELECT '172', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOLYGON(((110 110,70 200,150 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,150 20,70 20,110 110),(110 110,120 40,100 40,110 110)))'::geometry as a, 'MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'::geometry as b) as f; SELECT '173', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOLYGON(((110 110,70 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,70 20,110 110),(110 110,120 40,100 40,110 110)))'::geometry as a, 'MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'::geometry as b) as f; SELECT '174', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOLYGON(((110 110,20 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,20 20,110 110),(110 110,120 40,100 40,110 110)))'::geometry as a, 'MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'::geometry as b) as f; SELECT '175', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOLYGON(((110 110,70 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,70 20,110 110),(110 110,120 40,100 40,110 110)))'::geometry as a, 'MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'::geometry as b) as f; SELECT '176', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOLYGON(((110 110,70 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,70 20,110 110),(110 110,120 40,100 40,110 110)))'::geometry as a, 'MULTIPOLYGON(((110 110,70 200,210 110,70 20,110 110),(110 110,110 140,150 110,110 80,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'::geometry as b) as f; SELECT '177', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POLYGON((100 60,140 100,100 140,60 100,100 60))'::geometry as a, 'MULTIPOLYGON(((80 40,120 40,120 80,80 80,80 40)),((120 80,160 80,160 120,120 120,120 80)),((80 120,120 120,120 160,80 160,80 120)),((40 80,80 80,80 120,40 120,40 80)))'::geometry as b) as f; SELECT '178', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(150 150,40 230)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '179', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,50 130,130 130)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '180', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 230,150 150)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '181', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(210 150,330 150)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '182', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(200 150,310 150,360 220)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '183', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(180 150,250 150,230 250,370 250,410 150)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '184', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(210 210,220 150,320 150,370 210)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '185', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 60,150 60)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '186', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 90,310 180)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '187', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(90 210,210 90)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '188', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(290 10,130 170)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '189', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(30 100,100 100,180 100)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '190', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 100,100 100,360 100,410 100)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '191', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(90 210,150 150,210 90)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '192', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(180 90,280 120)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '193', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(70 70,80 20)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '194', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 20,150 60)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '195', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(70 70,80 20,140 20,150 60)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '196', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(170 50,170 20,240 20,260 60)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150))'::geometry as b) as f; SELECT '197', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(50 100,140 190,280 190)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '198', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(140 60,180 100,290 100)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '199', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(170 120,210 80,270 80)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '200', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(170 120,260 50)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '201', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(190 90,190 270)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(190 190,280 50,100 50,190 190))'::geometry as b) as f; SELECT '202', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,150 70)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(110 110,250 100,140 30,110 110))'::geometry as b) as f; SELECT '203', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,150 70)'::geometry as a, 'POLYGON((190 190,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'::geometry as b) as f; SELECT '204', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,150 70)'::geometry as a, 'POLYGON((190 190,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'::geometry as b) as f; SELECT '205', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(190 90,190 190,190 270)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(190 190,280 50,100 50,190 190))'::geometry as b) as f; SELECT '206', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,110 110,150 70)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(110 110,250 100,140 30,110 110))'::geometry as b) as f; SELECT '207', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,110 110,150 70)'::geometry as a, 'POLYGON((190 190,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'::geometry as b) as f; SELECT '208', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 160,110 110,150 70)'::geometry as a, 'POLYGON((190 190,110 110,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'::geometry as b) as f; SELECT '209', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 110,180 110,190 60)'::geometry as a, 'POLYGON((20 200,240 200,240 20,20 20,20 200),(130 110,60 180,60 40,130 110),(130 110,200 40,200 180,130 110))'::geometry as b) as f; SELECT '210', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,180 110)'::geometry as a, 'POLYGON((20 200,240 200,240 20,20 20,20 200),(130 110,60 180,60 40,130 110),(130 110,200 40,200 180,130 110))'::geometry as b) as f; SELECT '211', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,180 110)'::geometry as a, 'POLYGON((20 200,20 20,240 20,240 200,20 200),(60 180,130 110,60 40,60 180),(130 110,200 40,200 180,130 110))'::geometry as b) as f; SELECT '212', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,170 110)'::geometry as a, 'POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'::geometry as b) as f; SELECT '213', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,130 110,170 110)'::geometry as a, 'POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'::geometry as b) as f; SELECT '214', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,130 110,180 110)'::geometry as a, 'POLYGON((20 200,240 200,240 20,20 20,20 200),(130 110,60 180,60 40,130 110),(130 110,200 40,200 180,130 110))'::geometry as b) as f; SELECT '215', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,130 110,180 110)'::geometry as a, 'POLYGON((20 200,20 20,240 20,240 200,20 200),(60 180,130 110,60 40,60 180),(130 110,200 40,200 180,130 110))'::geometry as b) as f; SELECT '216', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 110,130 110,170 110)'::geometry as a, 'POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'::geometry as b) as f; SELECT '217', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(160 70,320 230)'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '218', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(160 70,200 110,280 190,320 230)'::geometry as a, 'MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'::geometry as b) as f; SELECT '219', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(70 50,70 150)'::geometry as a, 'MULTIPOLYGON(((0 0,0 100,140 100,140 0,0 0)),((20 170,70 100,130 170,20 170)))'::geometry as b) as f; SELECT '220', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,20 200,200 200,110 110)'::geometry as a, 'POLYGON((20 20,200 20,110 110,20 20))'::geometry as b) as f; SELECT '221', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(150 70,160 110,200 60,150 70)'::geometry as a, 'POLYGON((20 20,200 20,110 110,20 20))'::geometry as b) as f; SELECT '222', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 60,120 40,120 70,80 60)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'::geometry as b) as f; SELECT '223', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,200 20,110 110,20 20)'::geometry as a, 'POLYGON((20 20,200 20,110 110,20 20))'::geometry as b) as f; SELECT '224', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 90,170 30,50 30,110 90)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'::geometry as b) as f; SELECT '225', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,170 50,170 110,110 110)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'::geometry as b) as f; SELECT '226', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 90,70 50,130 50,110 90)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'::geometry as b) as f; SELECT '227', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 60,20 150,200 150,110 60)'::geometry as a, 'POLYGON((20 20,200 20,110 110,20 20))'::geometry as b) as f; SELECT '228', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 130,110 70,200 100,110 130)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'::geometry as b) as f; SELECT '229', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 90,160 40,60 40,110 90)'::geometry as a, 'POLYGON((20 20,200 20,110 110,20 20))'::geometry as b) as f; SELECT '230', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 100,40 30,180 30,110 100)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'::geometry as b) as f; SELECT '231', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,180 30,40 30,110 110)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'::geometry as b) as f; SELECT '232', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 90,180 30,40 30,110 90)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'::geometry as b) as f; SELECT '233', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 90,50 30,180 30,110 90)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'::geometry as b) as f; SELECT '234', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 200,200 110,110 200)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '235', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 200,110 110,20 200,20 110,200 110)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '236', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,20 110,200 110,50 110,110 170)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '237', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,20 200,110 200,110 110,200 200)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '238', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,170 50,20 200,20 110,200 110)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '239', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,180 40,110 40,110 180)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '240', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 60,50 30,170 30,90 70)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '241', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,180 40,110 40,110 110,70 40)'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '242', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(230 70,170 120,190 60,140 60,170 120,270 90)'::geometry as a, 'POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'::geometry as b) as f; SELECT '243', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(200 200,110 110,20 210,110 110))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '244', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(60 180,60 110,160 110,110 110))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '245', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(200 200,110 110,20 200,110 200,110 110))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '246', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(110 50,110 170,110 70,110 150,200 150))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '247', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(50 110,170 110,110 170,110 50,110 170,110 50))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '248', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(110 60,110 160,200 160))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '249', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(110 60,110 160,200 160))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '250', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((110 100,40 30,180 30),(170 30,110 90,50 30))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '251', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((110 110,60 40,70 20,150 20,170 40),(180 30,40 30,110 80))'::geometry as a, 'POLYGON((110 110,200 20,20 20,110 110))'::geometry as b) as f; SELECT '252', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110,200 160),(110 110,200 110,200 70,20 150))'::geometry as a, 'MULTIPOLYGON(((110 110,20 20,200 20,110 110)),((110 110,20 200,200 200,110 110)))'::geometry as b) as f; SELECT '253', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 160,70 110,150 110,200 160),(110 110,20 110,50 80,70 110,200 110))'::geometry as a, 'MULTIPOLYGON(((110 110,20 20,200 20,110 110)),((110 110,20 200,200 200,110 110)))'::geometry as b) as f; SELECT '254', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 110,200 110),(110 110,20 170,20 130,200 90))'::geometry as a, 'MULTIPOLYGON(((110 110,20 20,200 20,110 110)),((110 110,20 200,200 200,110 110)))'::geometry as b) as f; SELECT '255', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(0 0,0 50,50 50,50 0,0 0)'::geometry as a, 'MULTILINESTRING((0 0,0 50),(0 50,50 50),(50 50,50 0),(50 0,0 0))'::geometry as b) as f; SELECT '256', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 180,140 180)'::geometry as a, 'MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((20 180,20 80,180 80,180 180,20 180)))'::geometry as b) as f; SELECT '257', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 180,140 180)'::geometry as a, 'MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((60 180,60 80,180 80,180 180,60 180)))'::geometry as b) as f; SELECT '258', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(0 0,60 0,60 60,60 0,120 0)'::geometry as a, 'MULTILINESTRING((0 0,60 0),(60 0,120 0),(60 0,60 60))'::geometry as b) as f; SELECT '259', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,120 120)'::geometry as a, 'LINESTRING(40 40,60 120)'::geometry as b) as f; SELECT '260', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,120 120)'::geometry as a, 'LINESTRING(60 240,40 40)'::geometry as b) as f; SELECT '261', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,180 180)'::geometry as a, 'LINESTRING(120 120,20 200)'::geometry as b) as f; SELECT '262', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,120 120)'::geometry as a, 'LINESTRING(60 240,120 120)'::geometry as b) as f; SELECT '263', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,180 180)'::geometry as a, 'LINESTRING(20 180,140 140)'::geometry as b) as f; SELECT '264', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,120 120)'::geometry as a, 'LINESTRING(40 120,120 40)'::geometry as b) as f; SELECT '265', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100)'::geometry as a, 'LINESTRING(40 40,100 100)'::geometry as b) as f; SELECT '266', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100)'::geometry as a, 'LINESTRING(100 100,40 40)'::geometry as b) as f; SELECT '267', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,120 120)'::geometry as a, 'LINESTRING(40 120,120 160)'::geometry as b) as f; SELECT '268', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,180 180)'::geometry as a, 'LINESTRING(20 20,180 180)'::geometry as b) as f; SELECT '269', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,180 180)'::geometry as a, 'LINESTRING(20 20,110 110)'::geometry as b) as f; SELECT '270', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,180 180)'::geometry as a, 'LINESTRING(50 50,140 140)'::geometry as b) as f; SELECT '271', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(180 180,40 40)'::geometry as a, 'LINESTRING(120 120,260 260)'::geometry as b) as f; SELECT '272', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,180 180)'::geometry as a, 'LINESTRING(260 260,120 120)'::geometry as b) as f; SELECT '273', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,180 180)'::geometry as a, 'LINESTRING(120 120,260 260)'::geometry as b) as f; SELECT '274', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(40 40,20 100,40 160,20 200)'::geometry as b) as f; SELECT '275', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(20 200,40 160,20 100,40 40)'::geometry as b) as f; SELECT '276', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 240,200 120,100 100,40 40)'::geometry as a, 'LINESTRING(20 200,40 160,20 100,40 40)'::geometry as b) as f; SELECT '277', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 60,60 230,140 230,250 160)'::geometry as a, 'LINESTRING(20 20,60 60,250 160,310 230)'::geometry as b) as f; SELECT '278', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 60,60 230,140 230,250 160)'::geometry as a, 'LINESTRING(20 20,110 110,200 110,320 230)'::geometry as b) as f; SELECT '279', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,60 250,360 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '280', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,60 250,360 210)'::geometry as a, 'LINESTRING(360 210,310 160,110 160,60 110)'::geometry as b) as f; SELECT '281', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(160 160,240 240)'::geometry as b) as f; SELECT '282', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(240 240,160 160)'::geometry as b) as f; SELECT '283', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 60,60 230,140 230,250 160)'::geometry as a, 'LINESTRING(60 150,110 100,170 100,110 230)'::geometry as b) as f; SELECT '284', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 60,60 230,140 230,250 160)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '285', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(200 120,200 190,150 240,200 240)'::geometry as b) as f; SELECT '286', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(200 240,150 240,200 200,200 120)'::geometry as b) as f; SELECT '287', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 60,60 230,140 230,250 160)'::geometry as a, 'LINESTRING(60 230,80 140,120 140,140 230)'::geometry as b) as f; SELECT '288', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,200 110,250 160,300 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '289', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,200 110,250 160,300 210,360 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '290', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,220 110,250 160,280 110)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '291', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,150 110,200 160,250 110,360 110,360 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '292', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 160,160 110,220 110,250 160,250 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '293', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 160,160 110,190 110,230 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '294', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 160,160 110,200 110,230 160,260 210,360 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '295', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 160,160 110,200 110,230 160,260 210,360 210,380 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '296', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 160,160 110,200 110,230 160,260 210,380 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '297', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 160,160 110,200 110,250 160,250 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '298', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 160,180 110,250 160,320 110)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '299', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(140 160,180 80,220 160,250 80)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '300', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,130 190)'::geometry as a, 'LINESTRING(20 130,70 130,160 40)'::geometry as b) as f; SELECT '301', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,130 190)'::geometry as a, 'LINESTRING(40 160,40 100,110 40,170 40)'::geometry as b) as f; SELECT '302', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 110,180 160,230 110,280 160,330 110)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '303', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,130 190)'::geometry as a, 'LINESTRING(30 140,80 140,100 100,200 30)'::geometry as b) as f; SELECT '304', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,110 160,180 110,250 160,250 110)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '305', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,80 80,160 80,240 80,300 140)'::geometry as a, 'LINESTRING(20 60,60 60,60 140,80 80,100 20,140 140,180 20,200 80,220 20,240 80,300 80,270 110,200 110)'::geometry as b) as f; SELECT '306', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,230 20,20 30,170 30,20 40,230 40,20 50,230 60,60 60,230 70,20 70,180 80,60 80,230 90,20 90,230 100,30 100,210 110,20 110,80 120,20 130,170 130,90 120,230 130,170 140,230 140,80 150,160 140,20 140,70 150,20 150,230 160,80 160,230 170,20 160,180 170,20 170,230 180,20 180,40 190,230 190,20 200,230 200)'::geometry as a, 'LINESTRING(30 210,30 60,40 210,40 30,50 190,50 20,60 160,60 50,70 220,70 50,80 20,80 210,90 50,90 150,100 30,100 210,110 20,110 190,120 50,120 180,130 210,120 20,140 210,130 50,150 210,130 20,160 210,140 30,170 210,150 20,180 210,160 20,190 210,180 80,170 50,170 20,180 70,180 20,190 190,190 30,200 210,200 30,210 210,210 20,220 150,220 20)'::geometry as b) as f; SELECT '307', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as b) as f; SELECT '308', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(80 240,200 120,100 100,40 40)'::geometry as b) as f; SELECT '309', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(80 240,120 200,200 120,100 100,80 80,40 40)'::geometry as b) as f; SELECT '310', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(260 210,240 130,280 120,260 40)'::geometry as b) as f; SELECT '311', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 20,20 20,20 160,210 160,210 20,110 20,50 120,120 150,200 150)'::geometry as a, 'LINESTRING(140 130,100 110,120 60,170 60)'::geometry as b) as f; SELECT '312', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '313', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,110 160,310 160,360 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as b) as f; SELECT '314', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as a, 'LINESTRING(60 110,110 160,250 160)'::geometry as b) as f; SELECT '315', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as a, 'LINESTRING(110 160,310 160,340 190)'::geometry as b) as f; SELECT '316', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as a, 'LINESTRING(140 160,250 160,310 160,340 190)'::geometry as b) as f; SELECT '317', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 110,110 160,250 160,310 160,360 210)'::geometry as a, 'LINESTRING(110 160,250 160,310 160)'::geometry as b) as f; SELECT '318', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(200 120,100 100,40 40,140 80,200 40)'::geometry as b) as f; SELECT '319', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(280 240,240 140,200 120,100 100,40 40)'::geometry as b) as f; SELECT '320', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(80 190,140 140,40 40)'::geometry as b) as f; SELECT '321', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(240 200,200 260,80 240,140 180)'::geometry as b) as f; SELECT '322', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(140 180,80 240,200 260,240 200)'::geometry as b) as f; SELECT '323', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(280 240,240 140,200 120,80 240)'::geometry as b) as f; SELECT '324', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,80 80,160 80,240 80,300 140)'::geometry as a, 'LINESTRING(20 80,120 80,200 80,260 20)'::geometry as b) as f; SELECT '325', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(100 100,200 120,240 140,280 240)'::geometry as b) as f; SELECT '326', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 40,100 100,200 120,80 240)'::geometry as a, 'LINESTRING(280 240,240 140,200 120,100 100)'::geometry as b) as f; SELECT '327', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,80 80,160 80,240 80,300 140)'::geometry as a, 'LINESTRING(80 20,80 80,240 80,300 20)'::geometry as b) as f; SELECT '328', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,80 80,160 80,240 80,300 140)'::geometry as a, 'LINESTRING(20 80,80 80,120 80,140 140,160 80,200 80,220 20,240 80,270 110,300 80)'::geometry as b) as f; SELECT '329', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,20 180,180 180)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '330', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 100,180 100,100 180)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '331', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 40,100 160,180 160)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '332', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 100,100 100,180 100,100 180)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '333', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,160 40)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '334', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,180 20)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '335', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 60,100 100,140 60)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '336', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,190 10,190 100)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '337', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,160 40,160 100)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '338', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(60 140,160 40,160 140)'::geometry as a, 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as b) as f; SELECT '339', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(80 80,20 80,140 80,80 20,80 140)'::geometry as b) as f; SELECT '340', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(80 80,20 80,140 80)'::geometry as b) as f; SELECT '341', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(80 80,140 80,80 20,80 140)'::geometry as b) as f; SELECT '342', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(80 80,20 80,140 80,80 20,80 80)'::geometry as b) as f; SELECT '343', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(80 80,20 80,140 80,80 80)'::geometry as b) as f; SELECT '344', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(80 80,20 80,20 140,140 20,80 20,80 80)'::geometry as b) as f; SELECT '345', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(20 140,140 20,100 20,100 80)'::geometry as b) as f; SELECT '346', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(140 80,20 80,120 80,80 20,80 140)'::geometry as b) as f; SELECT '347', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(140 80,20 80,140 80)'::geometry as b) as f; SELECT '348', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(140 80,20 80,80 140,80 20)'::geometry as b) as f; SELECT '349', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(140 80,80 80,20 80,50 140,50 60)'::geometry as b) as f; SELECT '350', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(140 80,20 80,120 80,80 20,80 80,80 140)'::geometry as b) as f; SELECT '351', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(140 80,20 80,80 80,140 80)'::geometry as b) as f; SELECT '352', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 20,140 140)'::geometry as a, 'LINESTRING(140 80,20 80,80 140,80 80,80 20)'::geometry as b) as f; SELECT '353', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(130 150,220 150,220 240)'::geometry as a, 'LINESTRING(130 240,130 150,220 20,50 20,130 150)'::geometry as b) as f; SELECT '354', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(30 150,130 150,250 150)'::geometry as a, 'LINESTRING(130 240,130 150,220 20,50 20,130 150)'::geometry as b) as f; SELECT '355', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(30 150,250 150)'::geometry as a, 'LINESTRING(130 240,130 150,220 20,50 20,130 150)'::geometry as b) as f; SELECT '356', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(30 150,130 150,250 150)'::geometry as a, 'LINESTRING(130 240,130 20,30 20,130 150)'::geometry as b) as f; SELECT '357', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(30 150,250 150)'::geometry as a, 'LINESTRING(120 240,120 20,20 20,120 170)'::geometry as b) as f; SELECT '358', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'::geometry as a, 'LINESTRING(110 110,200 110)'::geometry as b) as f; SELECT '359', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'::geometry as b) as f; SELECT '360', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 110,200 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'::geometry as b) as f; SELECT '361', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'::geometry as a, 'LINESTRING(20 110,200 110)'::geometry as b) as f; SELECT '362', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(90 200,90 130,110 110,150 200)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'::geometry as b) as f; SELECT '363', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(200 110,110 110,90 130,90 200)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'::geometry as b) as f; SELECT '364', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(80 80,150 80,210 80)'::geometry as a, 'MULTILINESTRING((20 20,140 140),(20 140,140 20))'::geometry as b) as f; SELECT '365', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 80,160 200,260 20,40 80)'::geometry as a, 'LINESTRING(40 80,160 200,260 20,40 80)'::geometry as b) as f; SELECT '366', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 80,160 200,260 20,40 80)'::geometry as a, 'LINESTRING(40 80,260 20,160 200,40 80)'::geometry as b) as f; SELECT '367', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 80,160 200,260 20,40 80)'::geometry as a, 'LINESTRING(260 20,40 80,160 200,260 20)'::geometry as b) as f; SELECT '368', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 80,160 200,260 20,40 80)'::geometry as a, 'LINESTRING(100 140,160 200,260 20,40 80,100 140)'::geometry as b) as f; SELECT '369', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as a, 'LINESTRING(100 100,180 180,20 180,100 100)'::geometry as b) as f; SELECT '370', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 150,40 40,150 40,150 150,40 150)'::geometry as a, 'LINESTRING(40 150,150 40,170 20,170 190,40 150)'::geometry as b) as f; SELECT '371', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as a, 'LINESTRING(180 100,20 100,100 180,180 100)'::geometry as b) as f; SELECT '372', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(100 100,180 20,20 20,100 100)'::geometry as a, 'LINESTRING(180 180,100 100,20 180,180 180)'::geometry as b) as f; SELECT '373', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 180,100 100,20 20,20 180)'::geometry as a, 'LINESTRING(100 20,100 180,180 100,100 20)'::geometry as b) as f; SELECT '374', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 150,40 40,150 40,150 150,40 150)'::geometry as a, 'LINESTRING(170 20,20 170,170 170,170 20)'::geometry as b) as f; SELECT '375', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 150,40 40,150 40,150 150,40 150)'::geometry as a, 'LINESTRING(40 150,150 150,90 210,40 150)'::geometry as b) as f; SELECT '376', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 150,40 40,150 40,150 150,40 150)'::geometry as a, 'LINESTRING(20 150,170 150,90 230,20 150)'::geometry as b) as f; SELECT '377', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(40 150,40 40,150 40,150 150,40 150)'::geometry as a, 'LINESTRING(40 150,150 150,150 40,20 40,20 150,40 150)'::geometry as b) as f; SELECT '378', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 20,20 20,110 110)'::geometry as a, 'LINESTRING(110 110,200 200,110 110,20 200,20 110,200 110)'::geometry as b) as f; SELECT '379', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 20,20 20,110 110)'::geometry as a, 'LINESTRING(110 110,20 110,200 110,50 110,110 170)'::geometry as b) as f; SELECT '380', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 20,20 20,110 110)'::geometry as a, 'LINESTRING(110 110,20 200,110 200,110 110,200 200)'::geometry as b) as f; SELECT '381', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 20,20 20,110 110)'::geometry as a, 'LINESTRING(200 20,20 200,200 200,110 110,110 40)'::geometry as b) as f; SELECT '382', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,200 20,20 20,110 110)'::geometry as a, 'LINESTRING(200 20,20 200,200 200,20 20)'::geometry as b) as f; SELECT '383', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(110 110,20 110,110 20,20 20,110 110)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,200 110,110 110)'::geometry as b) as f; SELECT '384', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 120,120 120,20 20,120 20,20 120)'::geometry as a, 'LINESTRING(170 100,70 100,170 170,70 170,170 100)'::geometry as b) as f; SELECT '385', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 110,110 110,20 20,110 20,20 110)'::geometry as a, 'LINESTRING(110 160,70 110,60 160,20 130,110 160)'::geometry as b) as f; SELECT '386', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 200,200 200,20 20,200 20,20 200)'::geometry as a, 'LINESTRING(20 110,200 110,200 160,20 60,20 110)'::geometry as b) as f; SELECT '387', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 110,110 110,20 20,110 20,20 110)'::geometry as a, 'LINESTRING(200 200,110 110,200 110,110 200,200 200)'::geometry as b) as f; SELECT '388', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'LINESTRING(20 120,120 120,20 20,120 20,20 120)'::geometry as a, 'LINESTRING(220 120,120 20,220 20,120 120,220 120)'::geometry as b) as f; SELECT '389', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((70 20,20 90,70 170),(70 170,120 90,70 20))'::geometry as a, 'MULTILINESTRING((70 20,20 90,70 170),(70 170,120 90,70 20))'::geometry as b) as f; SELECT '390', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as b) as f; SELECT '391', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 140,90 60,90 20),(170 20,130 20,20 20))'::geometry as b) as f; SELECT '392', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(130 100,130 60,90 20,50 90))'::geometry as b) as f; SELECT '393', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(130 140,130 60,90 20,20 90,90 20,130 60,170 60))'::geometry as b) as f; SELECT '394', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60))'::geometry as b) as f; SELECT '395', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(130 100,90 20))'::geometry as b) as f; SELECT '396', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(120 100,170 100,90 20))'::geometry as b) as f; SELECT '397', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(120 100,170 100,90 20))'::geometry as b) as f; SELECT '398', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(130 140,130 60,90 20,20 90,90 20))'::geometry as b) as f; SELECT '399', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'::geometry as a, 'MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60,20 140,90 20))'::geometry as b) as f; SELECT '400', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 90,20 160),(90 160,90 20))'::geometry as a, 'MULTILINESTRING((160 160,90 90,160 20),(160 120,120 120,90 90,160 60))'::geometry as b) as f; SELECT '401', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 90,20 160),(90 160,90 20))'::geometry as a, 'MULTILINESTRING((160 160,90 90,160 20),(160 120,120 120,90 90,120 60,160 60))'::geometry as b) as f; SELECT '402', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTILINESTRING((20 20,90 90,20 160),(90 160,90 20))'::geometry as a, 'MULTILINESTRING((160 160,90 90,160 20),(160 120,90 90,160 60))'::geometry as b) as f; SELECT '403', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '404', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(70 170)'::geometry as a, 'POLYGON((110 230,80 160,20 160,20 20,200 20,200 160,140 160,110 230))'::geometry as b) as f; SELECT '405', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 130)'::geometry as a, 'POLYGON((20 160,80 160,110 100,140 160,200 160,200 20,20 20,20 160))'::geometry as b) as f; SELECT '406', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(100 70)'::geometry as a, 'POLYGON((20 150,100 150,40 50,170 50,110 150,190 150,190 20,20 20,20 150))'::geometry as b) as f; SELECT '407', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(100 70)'::geometry as a, 'POLYGON((20 150,100 150,40 50,160 50,100 150,180 150,180 20,20 20,20 150))'::geometry as b) as f; SELECT '408', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(60 120)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '409', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 120)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '410', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(160 120)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '411', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(100 150)'::geometry as a, 'POLYGON((20 150,100 150,40 50,160 50,100 150,180 150,180 20,20 20,20 150))'::geometry as b) as f; SELECT '412', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(100 80)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '413', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(60 160)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '414', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(190 90)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '415', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(190 190)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '416', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(360 20)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '417', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(130 130)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '418', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(280 50)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '419', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(150 100)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '420', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(100 50)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '421', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(140 120)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '422', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(190 50)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(90 50,150 110,190 50,90 50),(190 50,230 110,290 50,190 50))'::geometry as b) as f; SELECT '423', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(180 90)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(180 140,180 40,80 40,180 140),(180 90,210 140,310 40,230 40,180 90))'::geometry as b) as f; SELECT '424', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 80,110 160,20 160)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '425', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 80,60 120,20 160)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '426', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(10 80,110 170,110 120)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '427', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(10 80,110 170,160 120)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '428', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 120,60 120,110 120,160 120,200 120)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '429', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(60 120,110 120,160 120)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '430', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(60 120,160 120,160 40,60 40)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '431', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 150,60 120,110 80)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '432', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(110 80,160 120,200 160)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '433', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(110 80,110 120,110 160)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '434', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(110 170,110 80)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '435', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(60 120,160 120,110 80,110 170)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '436', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(90 80,130 80)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '437', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(60 120,160 120,110 80)'::geometry as a, 'POLYGON((60 120,60 40,160 40,160 120,60 120))'::geometry as b) as f; SELECT '438', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 170,40 90,130 170)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '439', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(90 170,280 170,190 90)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '440', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(190 110,150 70,230 70)'::geometry as a, 'POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'::geometry as b) as f; SELECT '441', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(100 100)'::geometry as a, 'MULTIPOLYGON(((20 100,20 20,100 20,100 100,20 100)),((100 180,100 100,180 100,180 180,100 180)))'::geometry as b) as f; SELECT '442', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 100)'::geometry as a, 'MULTIPOLYGON(((20 100,20 20,100 20,100 100,20 100)),((100 180,100 100,180 100,180 180,100 180)))'::geometry as b) as f; SELECT '443', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(60 100)'::geometry as a, 'MULTIPOLYGON(((20 100,20 20,100 20,100 100,20 100)),((100 180,100 100,180 100,180 180,100 180)))'::geometry as b) as f; SELECT '444', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'MULTIPOLYGON(((110 110,20 200,200 200,110 110),(110 110,80 180,140 180,110 110)),((110 110,20 20,200 20,110 110),(110 110,80 40,140 40,110 110)))'::geometry as b) as f; SELECT '445', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 200)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '446', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 80)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '447', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(340 240)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '448', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(230 150)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '449', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(160 150)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '450', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 150)'::geometry as a, 'LINESTRING(150 150,20 20,280 20,150 150)'::geometry as b) as f; SELECT '451', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(150 80)'::geometry as a, 'LINESTRING(150 150,20 20,280 20,150 150)'::geometry as b) as f; SELECT '452', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(150 150)'::geometry as a, 'LINESTRING(150 150,20 20,280 20,150 150)'::geometry as b) as f; SELECT '453', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(100 20)'::geometry as a, 'LINESTRING(150 150,20 20,280 20,150 150)'::geometry as b) as f; SELECT '454', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'LINESTRING(150 150,20 20,280 20,150 150)'::geometry as b) as f; SELECT '455', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(220 220)'::geometry as a, 'LINESTRING(110 110,220 20,20 20,110 110,220 220)'::geometry as b) as f; SELECT '456', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,220 20,20 20,110 110,220 220)'::geometry as b) as f; SELECT '457', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,220 20,20 20,220 220)'::geometry as b) as f; SELECT '458', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 20)'::geometry as a, 'LINESTRING(110 110,220 20,20 20,220 220)'::geometry as b) as f; SELECT '459', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(220 20)'::geometry as a, 'LINESTRING(110 110,220 20,20 20,220 220)'::geometry as b) as f; SELECT '460', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 20)'::geometry as a, 'LINESTRING(220 220,20 20,220 20,110 110)'::geometry as b) as f; SELECT '461', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'LINESTRING(220 220,20 20,220 20,110 110)'::geometry as b) as f; SELECT '462', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 110)'::geometry as a, 'LINESTRING(20 200,20 20,110 20,20 110,110 200)'::geometry as b) as f; SELECT '463', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 200)'::geometry as a, 'LINESTRING(20 200,200 20,20 20,200 200)'::geometry as b) as f; SELECT '464', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,200 20,140 20,140 80,80 140,20 140)'::geometry as b) as f; SELECT '465', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,200 20,20 20,200 200)'::geometry as b) as f; SELECT '466', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(80 140)'::geometry as a, 'LINESTRING(20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)'::geometry as b) as f; SELECT '467', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)'::geometry as b) as f; SELECT '468', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,200 20,140 20,140 80,110 110,80 140,20 140)'::geometry as b) as f; SELECT '469', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,110 110,200 20,20 20,110 110,200 200)'::geometry as b) as f; SELECT '470', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,200 20,20 20,110 110,200 200)'::geometry as b) as f; SELECT '471', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,110 110,20 20,200 20,110 110,200 200)'::geometry as b) as f; SELECT '472', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)'::geometry as b) as f; SELECT '473', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,200 20,140 20,140 80,110 110,80 140,20 140)'::geometry as b) as f; SELECT '474', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,200 20,140 20,140 80,80 140,20 140)'::geometry as b) as f; SELECT '475', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,110 110,200 20,20 20,110 110,200 200)'::geometry as b) as f; SELECT '476', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,200 20,20 20,110 110,200 200)'::geometry as b) as f; SELECT '477', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,200 20,20 20,200 200)'::geometry as b) as f; SELECT '478', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,110 110,20 20,200 20,110 110,200 200)'::geometry as b) as f; SELECT '479', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,110 200,20 200,200 20,200 110,110 110,200 200)'::geometry as b) as f; SELECT '480', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,110 110,20 20,200 20,110 110,20 200,110 200,110 110)'::geometry as b) as f; SELECT '481', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'::geometry as b) as f; SELECT '482', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,20 200,110 200,110 110)'::geometry as b) as f; SELECT '483', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,110 110,200 20,20 20,110 110,20 200,110 200,110 110)'::geometry as b) as f; SELECT '484', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,20 20,20 110,110 110,20 200,110 200,110 110)'::geometry as b) as f; SELECT '485', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 160)'::geometry as a, 'LINESTRING(110 160,200 250,110 250,110 160,110 110,110 20,20 20,110 110)'::geometry as b) as f; SELECT '486', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 160)'::geometry as a, 'LINESTRING(110 160,200 250,110 250,110 110,110 20,20 20,110 110)'::geometry as b) as f; SELECT '487', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 160,200 250,110 250,110 160,110 110,110 20,20 20,110 110)'::geometry as b) as f; SELECT '488', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 160,200 250,110 250,110 160,110 20,20 20,110 110)'::geometry as b) as f; SELECT '489', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,110 110,110 20,20 20,110 110)'::geometry as b) as f; SELECT '490', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,110 20,20 20,110 110)'::geometry as b) as f; SELECT '491', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(140 200)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,110 110,110 20,20 20,110 110)'::geometry as b) as f; SELECT '492', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 200)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,110 110,110 20,20 20,110 110)'::geometry as b) as f; SELECT '493', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,110 110,110 20,200 20,110 110)'::geometry as b) as f; SELECT '494', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(140 200)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,110 110,110 20,200 20,110 110)'::geometry as b) as f; SELECT '495', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 200)'::geometry as a, 'LINESTRING(110 110,200 200,110 200,110 110,110 20,200 20,110 110)'::geometry as b) as f; SELECT '496', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,20 130,20 200,90 130,200 20,20 20,200 200)'::geometry as b) as f; SELECT '497', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(90 130,20 130,20 200,90 130,200 20,20 20,200 200)'::geometry as b) as f; SELECT '498', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,20 130,20 200,200 20,20 20,200 200)'::geometry as b) as f; SELECT '499', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(90 130,20 130,20 200,200 20,20 20,200 200)'::geometry as b) as f; SELECT '500', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,90 130,20 200,20 130,90 130)'::geometry as b) as f; SELECT '501', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,90 130,20 200,20 130,90 130)'::geometry as b) as f; SELECT '502', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'::geometry as b) as f; SELECT '503', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'::geometry as b) as f; SELECT '504', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,20 130,20 200,110 110,200 20,20 20,110 110,200 200,200 130,110 110)'::geometry as b) as f; SELECT '505', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,20 130,20 200,200 20,20 20,200 200,200 130,110 110)'::geometry as b) as f; SELECT '506', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,80 200,20 200,110 110,200 20,20 20,110 110,200 200,140 200,110 110)'::geometry as b) as f; SELECT '507', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 110,80 200,20 200,200 20,20 20,200 200,140 200,110 110)'::geometry as b) as f; SELECT '508', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,20 20,200 20,20 200,200 200)'::geometry as b) as f; SELECT '509', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,110 110,20 20,200 20,110 110,20 200,200 200)'::geometry as b) as f; SELECT '510', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(200 200,110 110,200 20,20 20,110 110,20 200,200 200)'::geometry as b) as f; SELECT '511', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,20 130,20 200,90 130,110 110,200 20,20 20,110 110,200 200,90 130)'::geometry as b) as f; SELECT '512', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,20 130,20 200,110 110,200 20,20 20,110 110,200 200,90 130)'::geometry as b) as f; SELECT '513', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,90 200,20 200,90 130,110 110,200 20,20 20,110 110,200 200,90 130)'::geometry as b) as f; SELECT '514', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,90 200,20 200,200 20,20 20,200 200,90 130)'::geometry as b) as f; SELECT '515', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,90 200,20 200,110 110,200 20,20 20,110 110,200 200,90 130)'::geometry as b) as f; SELECT '516', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(90 130)'::geometry as a, 'LINESTRING(90 130,90 200,20 200,200 20,20 20,200 200,90 130)'::geometry as b) as f; SELECT '517', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(90 130,90 200,20 200,200 20,20 20,200 200,90 130)'::geometry as b) as f; SELECT '518', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 200)'::geometry as a, 'LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200,200 200)'::geometry as b) as f; SELECT '519', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 150)'::geometry as a, 'LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200,200 200)'::geometry as b) as f; SELECT '520', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200,200 200)'::geometry as b) as f; SELECT '521', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 200)'::geometry as a, 'LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200)'::geometry as b) as f; SELECT '522', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 150)'::geometry as a, 'LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200)'::geometry as b) as f; SELECT '523', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200)'::geometry as b) as f; SELECT '524', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 150)'::geometry as a, 'LINESTRING(20 200,110 200,110 110,20 20,200 20,110 110,110 200,200 200)'::geometry as b) as f; SELECT '525', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 110)'::geometry as a, 'LINESTRING(20 200,110 200,110 110,20 20,200 20,110 110,110 200,200 200)'::geometry as b) as f; SELECT '526', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(110 200)'::geometry as a, 'LINESTRING(20 200,110 200,110 110,20 20,200 20,110 110,110 200,200 200)'::geometry as b) as f; SELECT '527', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(50 250,90 220,130 190)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '528', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(180 180,230 130,280 80)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '529', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(50 120,90 80,130 40)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '530', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(300 280,340 240,380 200)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '531', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(230 150,260 120,290 90)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '532', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(200 190,240 150,270 110)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '533', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(160 150,190 120,220 90)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '534', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(120 190,160 150,200 110)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '535', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(90 80,160 150,340 240)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '536', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(90 80,160 150,300 150)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '537', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(90 80,160 150,240 150)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '538', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(90 80,130 120,210 150)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '539', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(130 120,210 150,340 200)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '540', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(160 150,240 150,340 210)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '541', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(160 150,300 150,340 150)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '542', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(160 150,240 150,340 240)'::geometry as a, 'LINESTRING(90 80,160 150,300 150,340 150,340 240)'::geometry as b) as f; SELECT '543', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'POINT(20 20)'::geometry as b) as f; SELECT '544', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'POINT(40 60)'::geometry as b) as f; SELECT '545', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(40 40)'::geometry as a, 'MULTIPOINT(20 20,80 80,20 120)'::geometry as b) as f; SELECT '546', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'POINT(20 20)'::geometry as a, 'MULTIPOINT(20 20,80 80,20 120)'::geometry as b) as f; SELECT '547', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 40,80 60,120 100)'::geometry as a, 'MULTIPOINT(40 40,80 60,120 100)'::geometry as b) as f; SELECT '548', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 40,80 60,120 100)'::geometry as a, 'MULTIPOINT(40 40,120 100,80 60)'::geometry as b) as f; SELECT '549', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(40 40,60 100,100 60,120 120)'::geometry as a, 'MULTIPOINT(20 120,60 60,100 100,140 40)'::geometry as b) as f; SELECT '550', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 20,80 70,140 120,200 170)'::geometry as a, 'MULTIPOINT(20 20,80 70,140 120,200 170)'::geometry as b) as f; SELECT '551', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 20,140 120,80 70,200 170)'::geometry as a, 'MULTIPOINT(80 70,20 20,200 170,140 120)'::geometry as b) as f; SELECT '552', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(20 20,80 70,140 120,200 170)'::geometry as a, 'MULTIPOINT(80 70,140 120)'::geometry as b) as f; SELECT '553', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(80 70,20 20,200 170,140 120)'::geometry as a, 'MULTIPOINT(140 120,80 70)'::geometry as b) as f; SELECT '554', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(80 70,20 20,200 170,140 120)'::geometry as a, 'MULTIPOINT(80 170,140 120,200 80)'::geometry as b) as f; SELECT '555', st_relate(a,b,1) as r1, st_relate(a,b,2) as r2, st_relate(a,b,3) as r3, st_relate(a,b,4) as r4 FROM (select 'MULTIPOINT(80 70,20 20,200 170,140 120)'::geometry as a, 'MULTIPOINT(80 170,140 120,200 80,80 70)'::geometry as b) as f; SELECT st_relate('POINT(0 0)', 'POINT(1 0)', 5); �����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/relate.sql����������������������������������������������������������0000644�0000000�0000000�00000217406�11722777314�017254� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT '1', ST_Relate('POLYGON((0 0,80 0,80 80,0 80,0 0))','POLYGON((100 200,100 140,180 140,180 200,100 200))'); SELECT '2', ST_Relate('POLYGON((0 0,140 0,140 140,0 140,0 0))','POLYGON((140 0,0 0,0 140,140 140,140 0))'); SELECT '3', ST_Relate('POLYGON((40 60,360 60,360 300,40 300,40 60))','POLYGON((120 100,280 100,280 240,120 240,120 100))'); SELECT '4', ST_Relate('POLYGON((40 60,420 60,420 320,40 320,40 60),(200 140,160 220,260 200,200 140))','POLYGON((80 100,360 100,360 280,80 280,80 100))'); SELECT '5', ST_Relate('POLYGON((0 280,0 0,260 0,260 280,0 280),(220 240,40 240,40 40,220 40,220 240))','POLYGON((20 260,240 260,240 20,20 20,20 260),(160 180,80 180,120 120,160 180))'); SELECT '6', ST_Relate('POLYGON((60 80,200 80,200 220,60 220,60 80))','POLYGON((120 140,260 140,260 260,120 260,120 140))'); SELECT '7', ST_Relate('POLYGON((60 220,220 220,140 140,60 220))','POLYGON((100 180,180 180,180 100,100 100,100 180))'); SELECT '8', ST_Relate('POLYGON((40 40,180 40,180 180,40 180,40 40))','POLYGON((180 40,40 180,160 280,300 140,180 40))'); SELECT '9', ST_Relate('POLYGON((100 60,140 100,100 140,60 100,100 60))','MULTIPOLYGON(((80 40,120 40,120 80,80 80,80 40)),((120 80,160 80,160 120,120 120,120 80)),((80 120,120 120,120 160,80 160,80 120)),((40 80,80 80,80 120,40 120,40 80)))'); SELECT '10', ST_Relate('POLYGON((40 280,200 280,200 100,40 100,40 280),(100 220,120 220,120 200,100 180,100 220))','POLYGON((40 280,180 260,180 120,60 120,40 280))'); SELECT '11', ST_Relate('POLYGON((0 200,0 0,200 0,200 200,0 200),(20 180,130 180,130 30,20 30,20 180))','POLYGON((60 90,130 90,130 30,60 30,60 90))'); SELECT '12', ST_Relate('POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))','POLYGON((270 90,200 50,150 80,210 120,270 90))'); SELECT '13', ST_Relate('POLYGON((100 60,140 100,100 140,60 100,100 60))','MULTIPOLYGON(((80 40,120 40,120 80,80 80,80 40)),((120 80,160 80,160 120,120 120,120 80)),((80 120,120 120,120 160,80 160,80 120)),((40 80,80 80,80 120,40 120,40 80)))'); SELECT '14', ST_Relate('LINESTRING(100 120,100 240)','POLYGON((40 60,160 60,160 180,40 180,40 60))'); SELECT '15', ST_Relate('LINESTRING(80 80,140 140,200 200)','POLYGON((40 40,140 40,140 140,40 140,40 40))'); SELECT '16', ST_Relate('LINESTRING(70 50,70 150)','MULTIPOLYGON(((0 0,0 100,140 100,140 0,0 0)),((20 170,70 100,130 170,20 170)))'); SELECT '17', ST_Relate('LINESTRING(60 160,150 70)','POLYGON((190 190,360 20,20 20,190 190),(110 110,250 100,140 30,110 110))'); SELECT '18', ST_Relate('LINESTRING(60 160,150 70)','POLYGON((190 190,360 20,20 20,190 190),(111 110,250 100,140 30,111 110))'); SELECT '19', ST_Relate('LINESTRING(80 110,170 110)','POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'); SELECT '20', ST_Relate('LINESTRING(80 110,170 110)','POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,131 40,200 110,130 180))'); SELECT '21', ST_Relate('LINESTRING(160 70,320 230)','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '22', ST_Relate('LINESTRING(100 140,100 40)','MULTIPOLYGON(((20 80,180 79,100 0,20 80)),((20 160,180 160,100 80,20 160)))'); SELECT '23', ST_Relate('LINESTRING(100 140,100 40)','MULTIPOLYGON(((20 80,180 80,100 0,20 80)),((20 160,180 160,100 80,20 160)))'); SELECT '24', ST_Relate('LINESTRING(110 60,20 150,200 150,110 60)','POLYGON((20 20,200 20,110 110,20 20))'); SELECT '25', ST_Relate('LINESTRING(0 0,0 50,50 50,50 0,0 0)','MULTILINESTRING((0 0,0 50),(0 50,50 50),(50 50,50 0),(50 0,0 0))'); SELECT '26', ST_Relate('LINESTRING(40 180,140 180)','MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((20 180,20 80,180 80,180 180,20 180)))'); SELECT '27', ST_Relate('LINESTRING(40 180,140 180)','MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((60 180,60 80,180 80,180 180,60 180)))'); SELECT '28', ST_Relate('LINESTRING(0 0,60 0,60 60,60 0,120 0)','MULTILINESTRING((0 0,60 0),(60 0,120 0),(60 0,60 60))'); SELECT '29', ST_Relate('LINESTRING(60 0,20 80,100 80,80 120,40 140)','LINESTRING(140 300,220 160,260 200,240 260)'); SELECT '30', ST_Relate('LINESTRING(60 0,20 80,100 80,80 120,40 140)','LINESTRING(60 40,140 40,140 160,0 160)'); SELECT '31', ST_Relate('LINESTRING(60 0,20 80,100 80,80 120,40 140)','LINESTRING(140 280,240 280,240 180,140 180,140 280)'); SELECT '32', ST_Relate('LINESTRING(140 0,0 0,40 60,0 120,60 200,220 160,220 40)','LINESTRING(80 140,180 100,160 40,100 40,60 100,80 140)'); SELECT '33', ST_Relate('LINESTRING(20 20,80 80)','LINESTRING(20 20,80 80)'); SELECT '34', ST_Relate('LINESTRING(40 40,160 160,200 60,60 140)','LINESTRING(40 40,160 160,200 60,60 140)'); SELECT '35', ST_Relate('LINESTRING(40 40,200 40)','LINESTRING(200 40,140 40,40 40)'); SELECT '36', ST_Relate('LINESTRING(0 0,110 0,60 0)','LINESTRING(0 0,110 0)'); SELECT '37', ST_Relate('LINESTRING(0 0,0 50,50 50,50 0,0 0)','MULTILINESTRING((0 0,0 50),(0 50,50 50),(50 50,50 0),(50 0,0 0))'); SELECT '38', ST_Relate('LINESTRING(0 0,80 0,80 60,80 0,170 0)','MULTILINESTRING((0 0,170 0),(80 0,80 60))'); SELECT '39', ST_Relate('LINESTRING(80 100,180 200)','LINESTRING(80 180,180 120)'); SELECT '40', ST_Relate('LINESTRING(40 40,100 100,160 160)','LINESTRING(160 60,100 100,60 140)'); SELECT '41', ST_Relate('LINESTRING(40 40,100 100,180 100,180 180,100 180,100 100)','LINESTRING(140 60,60 140)'); SELECT '42', ST_Relate('LINESTRING(40 40,180 180,100 180,100 100)','LINESTRING(140 60,60 140)'); SELECT '43', ST_Relate('LINESTRING(20 110,200 110)','LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'); SELECT '44', ST_Relate('LINESTRING(80 90,50 50,0 0)','LINESTRING(0 0,100 100)'); SELECT '45', ST_Relate('LINESTRING(40 140,240 140)','LINESTRING(40 140,100 140,80 80,120 60,100 140,160 140,160 100,200 100,160 140,240 140)'); SELECT '46', ST_Relate('LINESTRING(20 20,100 20,20 20)','LINESTRING(60 20,200 20)'); SELECT '47', ST_Relate('LINESTRING(40 60,180 60,180 140,100 140,100 60,220 60,220 180,80 180,80 60,280 60)','LINESTRING(140 60,180 60,220 60,260 60)'); SELECT '48', ST_Relate('POINT(20 20)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '49', ST_Relate('MULTIPOINT(0 20,40 20)','POLYGON((20 40,20 0,60 0,60 40,20 40))'); SELECT '50', ST_Relate('MULTIPOINT(0 20,20 20)','POLYGON((20 40,20 0,60 0,60 40,20 40))'); SELECT '51', ST_Relate('MULTIPOINT(20 20,40 20)','POLYGON((20 40,20 0,60 0,60 40,20 40))'); SELECT '52', ST_Relate('MULTIPOINT(80 260,140 260,180 260)','POLYGON((40 320,140 320,140 200,40 200,40 320))'); SELECT '53', ST_Relate('POINT(40 40)','MULTIPOLYGON(((0 40,0 0,40 0,40 40,0 40)),((40 80,40 40,80 40,80 80,40 80)))'); SELECT '54', ST_Relate('POINT(60 120)','LINESTRING(40 40,120 120,200 120)'); SELECT '55', ST_Relate('POINT(40 40)','LINESTRING(40 40,100 100,160 100)'); SELECT '56', ST_Relate('POINT(60 60)','LINESTRING(40 40,100 100)'); SELECT '57', ST_Relate('MULTIPOINT(40 40,100 40)','LINESTRING(40 40,80 80)'); SELECT '58', ST_Relate('MULTIPOINT(40 40,60 60)','LINESTRING(40 40,80 80)'); SELECT '59', ST_Relate('MULTIPOINT(60 60,100 100)','LINESTRING(40 40,80 80)'); SELECT '60', ST_Relate('MULTIPOINT(60 60,100 100)','LINESTRING(40 40,80 80)'); SELECT '61', ST_Relate('MULTIPOINT(60 60,100 100)','LINESTRING(40 40,60 60,80 80)'); SELECT '62', ST_Relate('POINT(20 20)','POINT(20 20)'); SELECT '63', ST_Relate('POINT(20 20)','POINT(20 30)'); SELECT '64', ST_Relate('MULTIPOINT(40 40,80 60,40 100)','MULTIPOINT(40 40,80 60,120 100)'); SELECT '65', ST_Relate('MULTIPOINT(40 40,80 60,120 100)','MULTIPOINT(40 40,80 60,120 100)'); SELECT '66', ST_Relate('POLYGON((100 100,100 200,200 200,200 100,100 100))','POLYGON((100 100,1e+15 110,1e+15 100,100 100))'); SELECT '67', ST_Relate('POLYGON((120 100,120 200,200 200,200 100,120 100))','POLYGON((100 100,1e+15 110,1e+15 100,100 100))'); SELECT '68', ST_Relate('POLYGON((20 20,20 100,120 100,140 20,20 20))','POLYGON((20 20,20 100,120 100,140 20,20 20))'); SELECT '69', ST_Relate('POLYGON((20 20,20 100,120 100,140 20,20 20))','POLYGON((20 20,140 20,120 100,20 100,20 20))'); SELECT '70', ST_Relate('POLYGON((20 20,20 100,120 100,140 20,20 20))','POLYGON((120 100,140 20,20 20,20 100,120 100))'); SELECT '71', ST_Relate('POLYGON((20 20,20 100,120 100,140 20,20 20))','POLYGON((20 100,60 100,120 100,140 20,80 20,20 20,20 100))'); SELECT '72', ST_Relate('POLYGON((0 0,80 0,80 80,0 80,0 0))','POLYGON((100 200,100 140,180 140,180 200,100 200))'); SELECT '73', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((140 120,140 200,240 200,240 120,140 120))'); SELECT '74', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((80 180,140 260,260 200,200 60,80 180))'); SELECT '75', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((240 80,140 120,180 240,280 200,240 80))'); SELECT '76', ST_Relate('POLYGON((140 160,20 20,270 20,150 160,230 40,60 40,140 160))','POLYGON((140 40,180 80,120 100,140 40))'); SELECT '77', ST_Relate('POLYGON((140 160,20 20,270 20,150 160,230 40,60 40,140 160))','POLYGON((120 100,180 80,130 40,120 100))'); SELECT '78', ST_Relate('POLYGON((20 20,180 20,140 140,20 140,20 20))','POLYGON((180 100,80 200,180 280,260 200,180 100))'); SELECT '79', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((140 140,20 120,0 220,120 240,140 140))'); SELECT '80', ST_Relate('POLYGON((160 200,210 70,120 70,160 200))','POLYGON((160 200,260 40,70 40,160 200,20 20,310 20,160 200))'); SELECT '81', ST_Relate('POLYGON((110 140,200 70,200 160,110 140))','POLYGON((110 140,110 50,60 50,60 90,160 190,20 110,20 20,200 20,110 140))'); SELECT '82', ST_Relate('POLYGON((20 120,20 20,260 20,260 120,200 40,140 120,80 40,20 120))','POLYGON((20 120,20 240,260 240,260 120,200 200,140 120,80 200,20 120))'); SELECT '83', ST_Relate('POLYGON((20 120,20 20,260 20,260 120,180 40,140 120,100 40,20 120))','POLYGON((20 120,300 120,140 240,20 120))'); SELECT '84', ST_Relate('POLYGON((20 20,20 300,280 300,280 260,220 260,60 100,60 60,280 60,280 20,20 20))','POLYGON((100 140,160 80,280 180,200 240,220 160,160 200,180 120,100 140))'); SELECT '85', ST_Relate('POLYGON((20 20,20 300,280 300,280 260,220 260,60 100,60 60,280 60,280 20,20 20))','POLYGON((260 200,180 80,120 160,200 160,180 220,260 200))'); SELECT '86', ST_Relate('POLYGON((20 20,280 20,280 140,220 60,140 140,80 60,20 140,20 20))','POLYGON((0 140,300 140,140 240,0 140))'); SELECT '87', ST_Relate('POLYGON((20 20,280 20,280 140,220 60,140 140,80 60,20 140,20 20))','POLYGON((20 240,20 140,320 140,180 240,20 240))'); SELECT '88', ST_Relate('POLYGON((20 20,280 20,280 140,220 60,140 140,80 60,20 140,20 20))','POLYGON((20 240,20 140,80 180,140 140,220 180,280 140,280 240,20 240))'); SELECT '89', ST_Relate('POLYGON((120 120,180 60,20 20,20 120,120 120))','POLYGON((120 120,220 20,280 20,240 160,120 120))'); SELECT '90', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((140 120,160 20,260 120,220 200,140 120))'); SELECT '91', ST_Relate('POLYGON((20 140,120 40,20 40,20 140))','POLYGON((190 140,190 20,140 20,20 140,190 140))'); SELECT '92', ST_Relate('POLYGON((120 120,180 60,20 20,20 120,120 120))','POLYGON((300 20,220 20,120 120,260 160,300 20))'); SELECT '93', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((140 120,240 160,280 60,160 20,140 120))'); SELECT '94', ST_Relate('POLYGON((120 120,180 60,20 20,20 120,120 120))','POLYGON((280 60,180 60,120 120,260 180,280 60))'); SELECT '95', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((120 200,120 120,40 120,40 200,120 200))'); SELECT '96', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((160 220,140 120,60 120,40 220,160 220))'); SELECT '97', ST_Relate('POLYGON((140 120,160 20,20 20,20 120,140 120))','POLYGON((140 120,20 120,20 220,140 220,140 120))'); SELECT '98', ST_Relate('POLYGON((120 120,180 60,20 20,20 120,120 120))','POLYGON((320 20,220 20,80 160,240 140,320 20))'); SELECT '99', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((60 40,60 140,180 140,180 40,60 40))'); SELECT '100', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,80 140,160 60,20 20))'); SELECT '101', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((160 60,20 20,100 140,160 60))'); SELECT '102', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 100,140 160,160 40,20 100))'); SELECT '103', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((160 40,20 100,160 160,160 40))'); SELECT '104', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 180,180 120,80 40,20 180))'); SELECT '105', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((180 120,100 40,20 180,180 120))'); SELECT '106', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,140 40,140 120,20 160,80 80,20 20))'); SELECT '107', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,140 40,140 140,20 180,80 100,20 20))'); SELECT '108', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((40 180,60 100,180 100,200 180,120 120,40 180))'); SELECT '109', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 180,60 80,180 80,220 180,120 120,20 180))'); SELECT '110', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((40 60,20 180,100 100,140 180,160 120,220 100,140 40,40 60))'); SELECT '111', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((60 100,180 100,220 180,120 140,20 180,60 100))'); SELECT '112', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,20 140,120 120,120 40,20 20))'); SELECT '113', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,20 180,140 140,140 60,20 20))'); SELECT '114', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,120 40,120 120,20 140,20 20))'); SELECT '115', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((120 40,20 20,20 140,120 120,120 40))'); SELECT '116', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,140 60,140 140,20 180,20 20))'); SELECT '117', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((140 60,20 20,20 180,140 140,140 60))'); SELECT '118', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,60 120,140 120,180 20,20 20))'); SELECT '119', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 40,120 40,120 120,20 140,20 40))'); SELECT '120', ST_Relate('POLYGON((20 20,20 180,220 180,220 20,20 20))','POLYGON((20 20,20 180,60 120,100 180,140 120,220 180,200 120,140 60,20 20))'); SELECT '121', ST_Relate('POLYGON((150 150,330 150,250 70,70 70,150 150))','POLYGON((150 150,270 150,140 20,20 20,150 150))'); SELECT '122', ST_Relate('POLYGON((150 150,270 150,330 150,250 70,190 70,70 70,150 150))','POLYGON((150 150,270 150,190 70,140 20,20 20,70 70,150 150))'); SELECT '123', ST_Relate('POLYGON((20 20,60 50,20 40,60 70,20 60,60 90,20 90,70 110,20 130,80 130,20 150,80 160,20 170,80 180,20 200,80 200,30 240,80 220,50 260,100 220,100 260,120 220,130 260,140 220,150 280,150 190,160 280,170 190,180 280,190 190,200 280,210 190,220 280,230 190,240 260,250 230,260 260,260 220,290 270,290 220,330 260,300 210,340 240,290 180,340 210,290 170,350 170,240 150,350 150,240 140,350 130,240 120,350 120,240 110,350 110,240 100,350 100,240 90,350 90,240 80,350 80,300 70,340 60,290 60,340 40,300 50,340 20,270 60,310 20,250 60,270 20,230 60,240 20,210 60,210 20,190 70,190 20,180 90,170 20,160 90,150 20,140 90,130 20,120 90,110 20,100 90,100 20,90 60,80 20,70 40,20 20))','POLYGON((190 140,140 130,200 160,130 150,210 170,130 170,210 180,120 190,220 200,120 200,250 210,120 210,250 220,120 220,250 230,120 240,230 240,120 250,240 260,120 260,240 270,120 270,270 290,120 290,230 300,150 310,250 310,180 320,250 320,200 360,260 330,240 360,280 320,290 370,290 320,320 360,310 320,360 360,310 310,380 340,310 290,390 330,310 280,410 310,310 270,420 280,310 260,430 250,300 250,440 240,300 240,450 230,280 220,440 220,280 210,440 210,300 200,430 190,300 190,440 180,330 180,430 150,320 180,420 130,300 180,410 120,280 180,400 110,280 170,390 90,280 160,400 70,270 160,450 30,260 160,420 30,250 160,390 30,240 160,370 30,230 160,360 30,230 150,330 50,240 130,330 30,230 130,310 30,220 130,280 30,230 100,270 40,220 110,250 30,210 130,240 30,210 100,220 40,200 90,200 20,190 100,180 30,20 20,180 40,20 30,180 50,20 50,180 60,30 60,180 70,20 70,170 80,80 80,170 90,20 80,180 100,40 100,200 110,60 110,200 120,120 120,190 140))'); SELECT '124', ST_Relate('POLYGON((70 150,20 160,110 160,20 180,100 200,20 200,190 210,20 210,160 220,20 220,150 230,60 240,180 250,20 260,170 260,60 270,160 270,100 310,170 280,200 260,180 230,210 260,130 330,230 250,210 290,240 250,230 210,260 300,250 230,270 300,270 240,300 340,280 250,320 330,290 250,340 350,290 240,350 360,270 190,350 340,290 200,350 330,300 190,360 320,310 190,360 300,320 200,360 280,330 200,360 260,340 200,370 260,340 180,390 290,340 170,400 260,350 170,400 250,350 160,410 240,350 150,400 170,350 140,310 170,340 140,270 180,330 140,260 170,310 140,240 170,290 140,200 190,270 140,180 190,260 140,170 190,260 130,170 180,250 130,170 170,240 120,170 160,210 120,170 150,210 110,340 130,230 110,420 140,220 100,410 130,220 90,400 120,220 80,390 110,220 70,420 110,240 70,420 100,260 70,420 90,280 70,430 80,230 60,430 60,270 50,450 40,210 50,370 40,260 40,460 30,160 40,210 60,200 110,190 60,190 120,170 50,180 130,150 30,170 130,140 20,160 120,130 20,160 150,120 20,160 170,110 20,160 190,100 20,150 190,90 20,140 180,80 20,120 140,70 20,120 150,60 20,110 150,50 20,100 140,50 30,90 130,40 30,80 120,30 30,80 130,30 40,80 140,20 40,70 140,40 90,60 130,20 90,60 140,20 130,70 150))','POLYGON((190 140,140 130,200 160,130 150,210 170,130 170,210 180,120 190,220 200,120 200,250 210,120 210,250 220,120 220,250 230,120 240,230 240,120 250,240 260,120 260,240 270,120 270,270 290,120 290,230 300,150 310,250 310,180 320,250 320,200 360,260 330,240 360,280 320,290 370,290 320,320 360,310 320,360 360,310 310,380 340,310 290,390 330,310 280,410 310,310 270,420 280,310 260,430 250,300 250,440 240,300 240,450 230,280 220,440 220,280 210,440 210,300 200,430 190,300 190,440 180,330 180,430 150,320 180,420 130,300 180,410 120,280 180,400 110,280 170,390 90,280 160,400 70,270 160,450 30,260 160,420 30,250 160,390 30,240 160,370 30,230 160,360 30,230 150,330 50,240 130,330 30,230 130,310 30,220 130,280 30,230 100,270 40,220 110,250 30,210 130,240 30,210 100,220 40,200 90,200 20,190 100,180 30,20 20,180 40,20 30,180 50,20 50,180 60,30 60,180 70,20 70,170 80,80 80,170 90,20 80,180 100,40 100,200 110,60 110,200 120,120 120,190 140))'); SELECT '125', ST_Relate('POLYGON((60 160,220 160,220 20,60 20,60 160))','POLYGON((60 160,20 200,260 200,220 160,140 80,60 160))'); SELECT '126', ST_Relate('POLYGON((60 160,220 160,220 20,60 20,60 160))','POLYGON((60 160,20 200,260 200,140 80,60 160))'); SELECT '127', ST_Relate('POLYGON((60 160,220 160,220 20,60 20,60 160))','POLYGON((20 200,140 80,260 200,20 200))'); SELECT '128', ST_Relate('POLYGON((60 160,220 160,220 20,60 20,60 160))','POLYGON((20 200,60 160,140 80,220 160,260 200,20 200))'); SELECT '129', ST_Relate('POLYGON((60 160,220 160,220 20,60 20,60 160))','POLYGON((20 200,60 160,140 80,260 200,20 200))'); SELECT '130', ST_Relate('POLYGON((0 0,0 200,200 200,200 0,0 0))','POLYGON((100 100,1000000 110,10000000 100,100 100))'); SELECT '131', ST_Relate('POLYGON((100 0,100 200,200 200,200 0,100 0))','POLYGON((100 100,1000000 110,10000000 100,100 100))'); SELECT '132', ST_Relate('POLYGON((120 0,120 200,200 200,200 0,120 0))','POLYGON((100 100,1000000 110,10000000 100,100 100))'); SELECT '133', ST_Relate('POLYGON((0 0,0 200,110 200,110 0,0 0))','POLYGON((100 100,1000000 110,10000000 100,100 100))'); SELECT '134', ST_Relate('POLYGON((100 100,100 200,200 200,200 100,100 100))','POLYGON((100 100,2100 110,2100 100,100 100))'); SELECT '135', ST_Relate('POLYGON((100 100,100 200,200 200,200 100,100 100))','POLYGON((100 100,2101 110,2101 100,100 100))'); SELECT '136', ST_Relate('POLYGON((100 100,200 200,200 100,100 100))','POLYGON((100 100,2101 110,2101 100,100 100))'); SELECT '137', ST_Relate('POLYGON((100 100,100 200,200 200,200 100,100 100))','POLYGON((100 100,1000000 110,1000000 100,100 100))'); SELECT '138', ST_Relate('POLYGON((120 100,120 200,200 200,200 100,120 100))','POLYGON((100 100,500 110,500 100,100 100))'); SELECT '139', ST_Relate('POLYGON((120 100,120 200,200 200,200 100,120 100))','POLYGON((100 100,501 110,501 100,100 100))'); SELECT '140', ST_Relate('POLYGON((120 100,130 200,200 200,200 100,120 100))','POLYGON((100 100,501 110,501 100,100 100))'); SELECT '141', ST_Relate('POLYGON((120 100,17 200,200 200,200 100,120 100))','POLYGON((100 100,501 110,501 100,100 100))'); SELECT '142', ST_Relate('POLYGON((120 100,120 200,200 200,200 100,120 100))','POLYGON((100 100,1000000 110,1000000 100,100 100))'); SELECT '143', ST_Relate('POLYGON((101 99,101 1000000,102 1000000,101 99))','POLYGON((100 100,1000000 110,1000000 100,100 100))'); SELECT '144', ST_Relate('POLYGON((100 100,200 101,200 100,100 100))','POLYGON((100 100,2101 110,2101 100,100 100))'); SELECT '145', ST_Relate('POLYGON((16 319,150 39,25 302,160 20,265 20,127 317,16 319))','POLYGON((10 307,22 307,153 34,22 34,10 307))'); SELECT '146', ST_Relate('POLYGON((160 200,210 70,120 70,160 200))','POLYGON((160 200,310 20,20 20,160 200),(160 200,260 40,70 40,160 200))'); SELECT '147', ST_Relate('POLYGON((170 120,240 100,260 50,190 70,170 120))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '148', ST_Relate('POLYGON((270 90,200 50,150 80,210 120,270 90))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '149', ST_Relate('POLYGON((170 120,260 100,240 60,150 80,170 120))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '150', ST_Relate('POLYGON((220 120,270 80,200 60,160 100,220 120))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '151', ST_Relate('POLYGON((260 50,180 70,180 110,260 90,260 50))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '152', ST_Relate('POLYGON((230 110,290 80,190 60,140 90,230 110))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '153', ST_Relate('POLYGON((170 120,330 120,260 50,100 50,170 120))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '154', ST_Relate('POLYGON((170 120,330 120,280 70,120 70,170 120))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '155', ST_Relate('POLYGON((170 120,300 120,250 70,120 70,170 120))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '156', ST_Relate('POLYGON((190 100,310 100,260 50,140 50,190 100))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '157', ST_Relate('POLYGON((280 130,360 130,270 40,190 40,280 130))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'); SELECT '158', ST_Relate('POLYGON((220 80,180 40,80 40,170 130,270 130,230 90,300 90,250 30,280 30,390 140,150 140,40 30,230 30,280 80,220 80))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'); SELECT '159', ST_Relate('POLYGON((260 130,360 130,280 40,170 40,260 130))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'); SELECT '160', ST_Relate('POLYGON((240 110,340 110,290 60,190 60,240 110))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'); SELECT '161', ST_Relate('POLYGON((250 120,350 120,280 50,180 50,250 120))','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))'); SELECT '162', ST_Relate('POLYGON((230 210,230 20,20 20,20 210,230 210),(120 180,50 50,200 50,120 180))','POLYGON((230 210,230 20,20 20,20 210,230 210),(120 180,50 50,200 50,120 180))'); SELECT '163', ST_Relate('POLYGON((230 210,230 20,20 20,20 210,230 210),(140 40,40 40,40 170,140 40),(110 190,210 190,210 50,110 190))','POLYGON((230 210,230 20,20 20,20 210,230 210),(140 40,40 40,40 170,140 40),(110 190,210 190,210 50,110 190))'); SELECT '164', ST_Relate('POLYGON((280 190,330 150,200 110,150 150,280 190))','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '165', ST_Relate('POLYGON((80 190,220 190,140 110,0 110,80 190))','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '166', ST_Relate('POLYGON((330 150,200 110,150 150,280 190,330 150))','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '167', ST_Relate('POLYGON((290 190,340 150,220 120,170 170,290 190))','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '168', ST_Relate('POLYGON((220 190,340 190,260 110,140 110,220 190))','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '169', ST_Relate('POLYGON((140 190,220 190,100 70,20 70,140 190))','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '170', ST_Relate('POLYGON((140 220,60 140,140 60,220 140,140 220))','MULTIPOLYGON(((100 20,180 20,180 100,100 100,100 20)),((20 100,100 100,100 180,20 180,20 100)),((100 180,180 180,180 260,100 260,100 180)),((180 100,260 100,260 180,180 180,180 100)))'); SELECT '171', ST_Relate('MULTIPOLYGON(((110 110,70 200,150 200,110 110)),((110 110,150 20,70 20,110 110)))','MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110)),((110 110,60 60,10 110,60 160,110 110)))'); SELECT '172', ST_Relate('MULTIPOLYGON(((110 110,70 200,150 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,150 20,70 20,110 110),(110 110,120 40,100 40,110 110)))','MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'); SELECT '173', ST_Relate('MULTIPOLYGON(((110 110,70 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,70 20,110 110),(110 110,120 40,100 40,110 110)))','MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'); SELECT '174', ST_Relate('MULTIPOLYGON(((110 110,20 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,20 20,110 110),(110 110,120 40,100 40,110 110)))','MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'); SELECT '175', ST_Relate('MULTIPOLYGON(((110 110,70 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,70 20,110 110),(110 110,120 40,100 40,110 110)))','MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'); SELECT '176', ST_Relate('MULTIPOLYGON(((110 110,70 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,70 20,110 110),(110 110,120 40,100 40,110 110)))','MULTIPOLYGON(((110 110,70 200,210 110,70 20,110 110),(110 110,110 140,150 110,110 80,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))'); SELECT '177', ST_Relate('POLYGON((100 60,140 100,100 140,60 100,100 60))','MULTIPOLYGON(((80 40,120 40,120 80,80 80,80 40)),((120 80,160 80,160 120,120 120,120 80)),((80 120,120 120,120 160,80 160,80 120)),((40 80,80 80,80 120,40 120,40 80)))'); SELECT '178', ST_Relate('LINESTRING(150 150,40 230)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '179', ST_Relate('LINESTRING(40 40,50 130,130 130)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '180', ST_Relate('LINESTRING(40 230,150 150)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '181', ST_Relate('LINESTRING(210 150,330 150)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '182', ST_Relate('LINESTRING(200 150,310 150,360 220)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '183', ST_Relate('LINESTRING(180 150,250 150,230 250,370 250,410 150)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '184', ST_Relate('LINESTRING(210 210,220 150,320 150,370 210)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '185', ST_Relate('LINESTRING(20 60,150 60)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '186', ST_Relate('LINESTRING(60 90,310 180)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '187', ST_Relate('LINESTRING(90 210,210 90)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '188', ST_Relate('LINESTRING(290 10,130 170)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '189', ST_Relate('LINESTRING(30 100,100 100,180 100)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '190', ST_Relate('LINESTRING(20 100,100 100,360 100,410 100)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '191', ST_Relate('LINESTRING(90 210,150 150,210 90)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '192', ST_Relate('LINESTRING(180 90,280 120)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '193', ST_Relate('LINESTRING(70 70,80 20)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '194', ST_Relate('LINESTRING(130 20,150 60)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '195', ST_Relate('LINESTRING(70 70,80 20,140 20,150 60)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '196', ST_Relate('LINESTRING(170 50,170 20,240 20,260 60)','POLYGON((150 150,410 150,280 20,20 20,150 150))'); SELECT '197', ST_Relate('LINESTRING(50 100,140 190,280 190)','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '198', ST_Relate('LINESTRING(140 60,180 100,290 100)','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '199', ST_Relate('LINESTRING(170 120,210 80,270 80)','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '200', ST_Relate('LINESTRING(170 120,260 50)','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '201', ST_Relate('LINESTRING(190 90,190 270)','POLYGON((190 190,360 20,20 20,190 190),(190 190,280 50,100 50,190 190))'); SELECT '202', ST_Relate('LINESTRING(60 160,150 70)','POLYGON((190 190,360 20,20 20,190 190),(110 110,250 100,140 30,110 110))'); SELECT '203', ST_Relate('LINESTRING(60 160,150 70)','POLYGON((190 190,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'); SELECT '204', ST_Relate('LINESTRING(60 160,150 70)','POLYGON((190 190,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'); SELECT '205', ST_Relate('LINESTRING(190 90,190 190,190 270)','POLYGON((190 190,360 20,20 20,190 190),(190 190,280 50,100 50,190 190))'); SELECT '206', ST_Relate('LINESTRING(60 160,110 110,150 70)','POLYGON((190 190,360 20,20 20,190 190),(110 110,250 100,140 30,110 110))'); SELECT '207', ST_Relate('LINESTRING(60 160,110 110,150 70)','POLYGON((190 190,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'); SELECT '208', ST_Relate('LINESTRING(60 160,110 110,150 70)','POLYGON((190 190,110 110,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))'); SELECT '209', ST_Relate('LINESTRING(130 110,180 110,190 60)','POLYGON((20 200,240 200,240 20,20 20,20 200),(130 110,60 180,60 40,130 110),(130 110,200 40,200 180,130 110))'); SELECT '210', ST_Relate('LINESTRING(80 110,180 110)','POLYGON((20 200,240 200,240 20,20 20,20 200),(130 110,60 180,60 40,130 110),(130 110,200 40,200 180,130 110))'); SELECT '211', ST_Relate('LINESTRING(80 110,180 110)','POLYGON((20 200,20 20,240 20,240 200,20 200),(60 180,130 110,60 40,60 180),(130 110,200 40,200 180,130 110))'); SELECT '212', ST_Relate('LINESTRING(80 110,170 110)','POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'); SELECT '213', ST_Relate('LINESTRING(80 110,130 110,170 110)','POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'); SELECT '214', ST_Relate('LINESTRING(80 110,130 110,180 110)','POLYGON((20 200,240 200,240 20,20 20,20 200),(130 110,60 180,60 40,130 110),(130 110,200 40,200 180,130 110))'); SELECT '215', ST_Relate('LINESTRING(80 110,130 110,180 110)','POLYGON((20 200,20 20,240 20,240 200,20 200),(60 180,130 110,60 40,60 180),(130 110,200 40,200 180,130 110))'); SELECT '216', ST_Relate('LINESTRING(80 110,130 110,170 110)','POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))'); SELECT '217', ST_Relate('LINESTRING(160 70,320 230)','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '218', ST_Relate('LINESTRING(160 70,200 110,280 190,320 230)','MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))'); SELECT '219', ST_Relate('LINESTRING(70 50,70 150)','MULTIPOLYGON(((0 0,0 100,140 100,140 0,0 0)),((20 170,70 100,130 170,20 170)))'); SELECT '220', ST_Relate('LINESTRING(110 110,20 200,200 200,110 110)','POLYGON((20 20,200 20,110 110,20 20))'); SELECT '221', ST_Relate('LINESTRING(150 70,160 110,200 60,150 70)','POLYGON((20 20,200 20,110 110,20 20))'); SELECT '222', ST_Relate('LINESTRING(80 60,120 40,120 70,80 60)','POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'); SELECT '223', ST_Relate('LINESTRING(20 20,200 20,110 110,20 20)','POLYGON((20 20,200 20,110 110,20 20))'); SELECT '224', ST_Relate('LINESTRING(110 90,170 30,50 30,110 90)','POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'); SELECT '225', ST_Relate('LINESTRING(110 110,170 50,170 110,110 110)','POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'); SELECT '226', ST_Relate('LINESTRING(110 90,70 50,130 50,110 90)','POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'); SELECT '227', ST_Relate('LINESTRING(110 60,20 150,200 150,110 60)','POLYGON((20 20,200 20,110 110,20 20))'); SELECT '228', ST_Relate('LINESTRING(110 130,110 70,200 100,110 130)','POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))'); SELECT '229', ST_Relate('LINESTRING(110 90,160 40,60 40,110 90)','POLYGON((20 20,200 20,110 110,20 20))'); SELECT '230', ST_Relate('LINESTRING(110 100,40 30,180 30,110 100)','POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'); SELECT '231', ST_Relate('LINESTRING(110 110,180 30,40 30,110 110)','POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'); SELECT '232', ST_Relate('LINESTRING(110 90,180 30,40 30,110 90)','POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'); SELECT '233', ST_Relate('LINESTRING(110 90,50 30,180 30,110 90)','POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))'); SELECT '234', ST_Relate('LINESTRING(110 110,200 200,200 110,110 200)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '235', ST_Relate('LINESTRING(110 110,200 200,110 110,20 200,20 110,200 110)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '236', ST_Relate('LINESTRING(110 110,20 110,200 110,50 110,110 170)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '237', ST_Relate('LINESTRING(110 110,20 200,110 200,110 110,200 200)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '238', ST_Relate('LINESTRING(110 110,170 50,20 200,20 110,200 110)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '239', ST_Relate('LINESTRING(110 110,180 40,110 40,110 180)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '240', ST_Relate('LINESTRING(110 60,50 30,170 30,90 70)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '241', ST_Relate('LINESTRING(110 110,180 40,110 40,110 110,70 40)','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '242', ST_Relate('LINESTRING(230 70,170 120,190 60,140 60,170 120,270 90)','POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))'); SELECT '243', ST_Relate('MULTILINESTRING((20 110,200 110),(200 200,110 110,20 210,110 110))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '244', ST_Relate('MULTILINESTRING((20 110,200 110),(60 180,60 110,160 110,110 110))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '245', ST_Relate('MULTILINESTRING((20 110,200 110),(200 200,110 110,20 200,110 200,110 110))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '246', ST_Relate('MULTILINESTRING((20 110,200 110),(110 50,110 170,110 70,110 150,200 150))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '247', ST_Relate('MULTILINESTRING((20 110,200 110),(50 110,170 110,110 170,110 50,110 170,110 50))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '248', ST_Relate('MULTILINESTRING((20 110,200 110),(110 60,110 160,200 160))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '249', ST_Relate('MULTILINESTRING((20 110,200 110),(110 60,110 160,200 160))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '250', ST_Relate('MULTILINESTRING((110 100,40 30,180 30),(170 30,110 90,50 30))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '251', ST_Relate('MULTILINESTRING((110 110,60 40,70 20,150 20,170 40),(180 30,40 30,110 80))','POLYGON((110 110,200 20,20 20,110 110))'); SELECT '252', ST_Relate('MULTILINESTRING((20 110,200 110,200 160),(110 110,200 110,200 70,20 150))','MULTIPOLYGON(((110 110,20 20,200 20,110 110)),((110 110,20 200,200 200,110 110)))'); SELECT '253', ST_Relate('MULTILINESTRING((20 160,70 110,150 110,200 160),(110 110,20 110,50 80,70 110,200 110))','MULTIPOLYGON(((110 110,20 20,200 20,110 110)),((110 110,20 200,200 200,110 110)))'); SELECT '254', ST_Relate('MULTILINESTRING((20 110,200 110),(110 110,20 170,20 130,200 90))','MULTIPOLYGON(((110 110,20 20,200 20,110 110)),((110 110,20 200,200 200,110 110)))'); SELECT '255', ST_Relate('LINESTRING(0 0,0 50,50 50,50 0,0 0)','MULTILINESTRING((0 0,0 50),(0 50,50 50),(50 50,50 0),(50 0,0 0))'); SELECT '256', ST_Relate('LINESTRING(40 180,140 180)','MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((20 180,20 80,180 80,180 180,20 180)))'); SELECT '257', ST_Relate('LINESTRING(40 180,140 180)','MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((60 180,60 80,180 80,180 180,60 180)))'); SELECT '258', ST_Relate('LINESTRING(0 0,60 0,60 60,60 0,120 0)','MULTILINESTRING((0 0,60 0),(60 0,120 0),(60 0,60 60))'); SELECT '259', ST_Relate('LINESTRING(40 40,120 120)','LINESTRING(40 40,60 120)'); SELECT '260', ST_Relate('LINESTRING(40 40,120 120)','LINESTRING(60 240,40 40)'); SELECT '261', ST_Relate('LINESTRING(40 40,180 180)','LINESTRING(120 120,20 200)'); SELECT '262', ST_Relate('LINESTRING(40 40,120 120)','LINESTRING(60 240,120 120)'); SELECT '263', ST_Relate('LINESTRING(40 40,180 180)','LINESTRING(20 180,140 140)'); SELECT '264', ST_Relate('LINESTRING(40 40,120 120)','LINESTRING(40 120,120 40)'); SELECT '265', ST_Relate('LINESTRING(40 40,100 100)','LINESTRING(40 40,100 100)'); SELECT '266', ST_Relate('LINESTRING(40 40,100 100)','LINESTRING(100 100,40 40)'); SELECT '267', ST_Relate('LINESTRING(40 40,120 120)','LINESTRING(40 120,120 160)'); SELECT '268', ST_Relate('LINESTRING(20 20,180 180)','LINESTRING(20 20,180 180)'); SELECT '269', ST_Relate('LINESTRING(20 20,180 180)','LINESTRING(20 20,110 110)'); SELECT '270', ST_Relate('LINESTRING(20 20,180 180)','LINESTRING(50 50,140 140)'); SELECT '271', ST_Relate('LINESTRING(180 180,40 40)','LINESTRING(120 120,260 260)'); SELECT '272', ST_Relate('LINESTRING(40 40,180 180)','LINESTRING(260 260,120 120)'); SELECT '273', ST_Relate('LINESTRING(40 40,180 180)','LINESTRING(120 120,260 260)'); SELECT '274', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(40 40,20 100,40 160,20 200)'); SELECT '275', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(20 200,40 160,20 100,40 40)'); SELECT '276', ST_Relate('LINESTRING(80 240,200 120,100 100,40 40)','LINESTRING(20 200,40 160,20 100,40 40)'); SELECT '277', ST_Relate('LINESTRING(60 60,60 230,140 230,250 160)','LINESTRING(20 20,60 60,250 160,310 230)'); SELECT '278', ST_Relate('LINESTRING(60 60,60 230,140 230,250 160)','LINESTRING(20 20,110 110,200 110,320 230)'); SELECT '279', ST_Relate('LINESTRING(60 110,60 250,360 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '280', ST_Relate('LINESTRING(60 110,60 250,360 210)','LINESTRING(360 210,310 160,110 160,60 110)'); SELECT '281', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(160 160,240 240)'); SELECT '282', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(240 240,160 160)'); SELECT '283', ST_Relate('LINESTRING(60 60,60 230,140 230,250 160)','LINESTRING(60 150,110 100,170 100,110 230)'); SELECT '284', ST_Relate('LINESTRING(60 60,60 230,140 230,250 160)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '285', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(200 120,200 190,150 240,200 240)'); SELECT '286', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(200 240,150 240,200 200,200 120)'); SELECT '287', ST_Relate('LINESTRING(60 60,60 230,140 230,250 160)','LINESTRING(60 230,80 140,120 140,140 230)'); SELECT '288', ST_Relate('LINESTRING(60 110,200 110,250 160,300 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '289', ST_Relate('LINESTRING(60 110,200 110,250 160,300 210,360 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '290', ST_Relate('LINESTRING(60 110,220 110,250 160,280 110)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '291', ST_Relate('LINESTRING(60 110,150 110,200 160,250 110,360 110,360 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '292', ST_Relate('LINESTRING(130 160,160 110,220 110,250 160,250 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '293', ST_Relate('LINESTRING(130 160,160 110,190 110,230 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '294', ST_Relate('LINESTRING(130 160,160 110,200 110,230 160,260 210,360 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '295', ST_Relate('LINESTRING(130 160,160 110,200 110,230 160,260 210,360 210,380 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '296', ST_Relate('LINESTRING(130 160,160 110,200 110,230 160,260 210,380 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '297', ST_Relate('LINESTRING(110 160,160 110,200 110,250 160,250 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '298', ST_Relate('LINESTRING(110 160,180 110,250 160,320 110)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '299', ST_Relate('LINESTRING(140 160,180 80,220 160,250 80)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '300', ST_Relate('LINESTRING(40 40,100 100,200 120,130 190)','LINESTRING(20 130,70 130,160 40)'); SELECT '301', ST_Relate('LINESTRING(40 40,100 100,200 120,130 190)','LINESTRING(40 160,40 100,110 40,170 40)'); SELECT '302', ST_Relate('LINESTRING(130 110,180 160,230 110,280 160,330 110)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '303', ST_Relate('LINESTRING(40 40,100 100,200 120,130 190)','LINESTRING(30 140,80 140,100 100,200 30)'); SELECT '304', ST_Relate('LINESTRING(110 110,110 160,180 110,250 160,250 110)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '305', ST_Relate('LINESTRING(20 20,80 80,160 80,240 80,300 140)','LINESTRING(20 60,60 60,60 140,80 80,100 20,140 140,180 20,200 80,220 20,240 80,300 80,270 110,200 110)'); SELECT '306', ST_Relate('LINESTRING(20 20,230 20,20 30,170 30,20 40,230 40,20 50,230 60,60 60,230 70,20 70,180 80,60 80,230 90,20 90,230 100,30 100,210 110,20 110,80 120,20 130,170 130,90 120,230 130,170 140,230 140,80 150,160 140,20 140,70 150,20 150,230 160,80 160,230 170,20 160,180 170,20 170,230 180,20 180,40 190,230 190,20 200,230 200)','LINESTRING(30 210,30 60,40 210,40 30,50 190,50 20,60 160,60 50,70 220,70 50,80 20,80 210,90 50,90 150,100 30,100 210,110 20,110 190,120 50,120 180,130 210,120 20,140 210,130 50,150 210,130 20,160 210,140 30,170 210,150 20,180 210,160 20,190 210,180 80,170 50,170 20,180 70,180 20,190 190,190 30,200 210,200 30,210 210,210 20,220 150,220 20)'); SELECT '307', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(40 40,100 100,200 120,80 240)'); SELECT '308', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(80 240,200 120,100 100,40 40)'); SELECT '309', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(80 240,120 200,200 120,100 100,80 80,40 40)'); SELECT '310', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(260 210,240 130,280 120,260 40)'); SELECT '311', ST_Relate('LINESTRING(100 20,20 20,20 160,210 160,210 20,110 20,50 120,120 150,200 150)','LINESTRING(140 130,100 110,120 60,170 60)'); SELECT '312', ST_Relate('LINESTRING(60 110,110 160,250 160,310 160,360 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '313', ST_Relate('LINESTRING(60 110,110 160,310 160,360 210)','LINESTRING(60 110,110 160,250 160,310 160,360 210)'); SELECT '314', ST_Relate('LINESTRING(60 110,110 160,250 160,310 160,360 210)','LINESTRING(60 110,110 160,250 160)'); SELECT '315', ST_Relate('LINESTRING(60 110,110 160,250 160,310 160,360 210)','LINESTRING(110 160,310 160,340 190)'); SELECT '316', ST_Relate('LINESTRING(60 110,110 160,250 160,310 160,360 210)','LINESTRING(140 160,250 160,310 160,340 190)'); SELECT '317', ST_Relate('LINESTRING(60 110,110 160,250 160,310 160,360 210)','LINESTRING(110 160,250 160,310 160)'); SELECT '318', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(200 120,100 100,40 40,140 80,200 40)'); SELECT '319', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(280 240,240 140,200 120,100 100,40 40)'); SELECT '320', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(80 190,140 140,40 40)'); SELECT '321', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(240 200,200 260,80 240,140 180)'); SELECT '322', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(140 180,80 240,200 260,240 200)'); SELECT '323', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(280 240,240 140,200 120,80 240)'); SELECT '324', ST_Relate('LINESTRING(20 20,80 80,160 80,240 80,300 140)','LINESTRING(20 80,120 80,200 80,260 20)'); SELECT '325', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(100 100,200 120,240 140,280 240)'); SELECT '326', ST_Relate('LINESTRING(40 40,100 100,200 120,80 240)','LINESTRING(280 240,240 140,200 120,100 100)'); SELECT '327', ST_Relate('LINESTRING(20 20,80 80,160 80,240 80,300 140)','LINESTRING(80 20,80 80,240 80,300 20)'); SELECT '328', ST_Relate('LINESTRING(20 20,80 80,160 80,240 80,300 140)','LINESTRING(20 80,80 80,120 80,140 140,160 80,200 80,220 20,240 80,270 110,300 80)'); SELECT '329', ST_Relate('LINESTRING(100 100,20 180,180 180)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '330', ST_Relate('LINESTRING(20 100,180 100,100 180)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '331', ST_Relate('LINESTRING(100 40,100 160,180 160)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '332', ST_Relate('LINESTRING(20 100,100 100,180 100,100 180)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '333', ST_Relate('LINESTRING(100 100,160 40)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '334', ST_Relate('LINESTRING(100 100,180 20)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '335', ST_Relate('LINESTRING(60 60,100 100,140 60)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '336', ST_Relate('LINESTRING(100 100,190 10,190 100)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '337', ST_Relate('LINESTRING(100 100,160 40,160 100)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '338', ST_Relate('LINESTRING(60 140,160 40,160 140)','LINESTRING(100 100,180 20,20 20,100 100)'); SELECT '339', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(80 80,20 80,140 80,80 20,80 140)'); SELECT '340', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(80 80,20 80,140 80)'); SELECT '341', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(80 80,140 80,80 20,80 140)'); SELECT '342', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(80 80,20 80,140 80,80 20,80 80)'); SELECT '343', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(80 80,20 80,140 80,80 80)'); SELECT '344', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(80 80,20 80,20 140,140 20,80 20,80 80)'); SELECT '345', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(20 140,140 20,100 20,100 80)'); SELECT '346', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(140 80,20 80,120 80,80 20,80 140)'); SELECT '347', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(140 80,20 80,140 80)'); SELECT '348', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(140 80,20 80,80 140,80 20)'); SELECT '349', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(140 80,80 80,20 80,50 140,50 60)'); SELECT '350', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(140 80,20 80,120 80,80 20,80 80,80 140)'); SELECT '351', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(140 80,20 80,80 80,140 80)'); SELECT '352', ST_Relate('LINESTRING(20 20,140 140)','LINESTRING(140 80,20 80,80 140,80 80,80 20)'); SELECT '353', ST_Relate('LINESTRING(130 150,220 150,220 240)','LINESTRING(130 240,130 150,220 20,50 20,130 150)'); SELECT '354', ST_Relate('LINESTRING(30 150,130 150,250 150)','LINESTRING(130 240,130 150,220 20,50 20,130 150)'); SELECT '355', ST_Relate('LINESTRING(30 150,250 150)','LINESTRING(130 240,130 150,220 20,50 20,130 150)'); SELECT '356', ST_Relate('LINESTRING(30 150,130 150,250 150)','LINESTRING(130 240,130 20,30 20,130 150)'); SELECT '357', ST_Relate('LINESTRING(30 150,250 150)','LINESTRING(120 240,120 20,20 20,120 170)'); SELECT '358', ST_Relate('LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)','LINESTRING(110 110,200 110)'); SELECT '359', ST_Relate('LINESTRING(110 110,200 110)','LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'); SELECT '360', ST_Relate('LINESTRING(20 110,200 110)','LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'); SELECT '361', ST_Relate('LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)','LINESTRING(20 110,200 110)'); SELECT '362', ST_Relate('LINESTRING(90 200,90 130,110 110,150 200)','LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'); SELECT '363', ST_Relate('LINESTRING(200 110,110 110,90 130,90 200)','LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'); SELECT '364', ST_Relate('LINESTRING(80 80,150 80,210 80)','MULTILINESTRING((20 20,140 140),(20 140,140 20))'); SELECT '365', ST_Relate('LINESTRING(40 80,160 200,260 20,40 80)','LINESTRING(40 80,160 200,260 20,40 80)'); SELECT '366', ST_Relate('LINESTRING(40 80,160 200,260 20,40 80)','LINESTRING(40 80,260 20,160 200,40 80)'); SELECT '367', ST_Relate('LINESTRING(40 80,160 200,260 20,40 80)','LINESTRING(260 20,40 80,160 200,260 20)'); SELECT '368', ST_Relate('LINESTRING(40 80,160 200,260 20,40 80)','LINESTRING(100 140,160 200,260 20,40 80,100 140)'); SELECT '369', ST_Relate('LINESTRING(100 100,180 20,20 20,100 100)','LINESTRING(100 100,180 180,20 180,100 100)'); SELECT '370', ST_Relate('LINESTRING(40 150,40 40,150 40,150 150,40 150)','LINESTRING(40 150,150 40,170 20,170 190,40 150)'); SELECT '371', ST_Relate('LINESTRING(100 100,180 20,20 20,100 100)','LINESTRING(180 100,20 100,100 180,180 100)'); SELECT '372', ST_Relate('LINESTRING(100 100,180 20,20 20,100 100)','LINESTRING(180 180,100 100,20 180,180 180)'); SELECT '373', ST_Relate('LINESTRING(20 180,100 100,20 20,20 180)','LINESTRING(100 20,100 180,180 100,100 20)'); SELECT '374', ST_Relate('LINESTRING(40 150,40 40,150 40,150 150,40 150)','LINESTRING(170 20,20 170,170 170,170 20)'); SELECT '375', ST_Relate('LINESTRING(40 150,40 40,150 40,150 150,40 150)','LINESTRING(40 150,150 150,90 210,40 150)'); SELECT '376', ST_Relate('LINESTRING(40 150,40 40,150 40,150 150,40 150)','LINESTRING(20 150,170 150,90 230,20 150)'); SELECT '377', ST_Relate('LINESTRING(40 150,40 40,150 40,150 150,40 150)','LINESTRING(40 150,150 150,150 40,20 40,20 150,40 150)'); SELECT '378', ST_Relate('LINESTRING(110 110,200 20,20 20,110 110)','LINESTRING(110 110,200 200,110 110,20 200,20 110,200 110)'); SELECT '379', ST_Relate('LINESTRING(110 110,200 20,20 20,110 110)','LINESTRING(110 110,20 110,200 110,50 110,110 170)'); SELECT '380', ST_Relate('LINESTRING(110 110,200 20,20 20,110 110)','LINESTRING(110 110,20 200,110 200,110 110,200 200)'); SELECT '381', ST_Relate('LINESTRING(110 110,200 20,20 20,110 110)','LINESTRING(200 20,20 200,200 200,110 110,110 40)'); SELECT '382', ST_Relate('LINESTRING(110 110,200 20,20 20,110 110)','LINESTRING(200 20,20 200,200 200,20 20)'); SELECT '383', ST_Relate('LINESTRING(110 110,20 110,110 20,20 20,110 110)','LINESTRING(110 110,200 200,110 200,200 110,110 110)'); SELECT '384', ST_Relate('LINESTRING(20 120,120 120,20 20,120 20,20 120)','LINESTRING(170 100,70 100,170 170,70 170,170 100)'); SELECT '385', ST_Relate('LINESTRING(20 110,110 110,20 20,110 20,20 110)','LINESTRING(110 160,70 110,60 160,20 130,110 160)'); SELECT '386', ST_Relate('LINESTRING(20 200,200 200,20 20,200 20,20 200)','LINESTRING(20 110,200 110,200 160,20 60,20 110)'); SELECT '387', ST_Relate('LINESTRING(20 110,110 110,20 20,110 20,20 110)','LINESTRING(200 200,110 110,200 110,110 200,200 200)'); SELECT '388', ST_Relate('LINESTRING(20 120,120 120,20 20,120 20,20 120)','LINESTRING(220 120,120 20,220 20,120 120,220 120)'); SELECT '389', ST_Relate('MULTILINESTRING((70 20,20 90,70 170),(70 170,120 90,70 20))','MULTILINESTRING((70 20,20 90,70 170),(70 170,120 90,70 20))'); SELECT '390', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))'); SELECT '391', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 140,90 60,90 20),(170 20,130 20,20 20))'); SELECT '392', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(130 100,130 60,90 20,50 90))'); SELECT '393', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(130 140,130 60,90 20,20 90,90 20,130 60,170 60))'); SELECT '394', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60))'); SELECT '395', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(130 100,90 20))'); SELECT '396', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(120 100,170 100,90 20))'); SELECT '397', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(120 100,170 100,90 20))'); SELECT '398', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(130 140,130 60,90 20,20 90,90 20))'); SELECT '399', ST_Relate('MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60,20 140,90 20))'); SELECT '400', ST_Relate('MULTILINESTRING((20 20,90 90,20 160),(90 160,90 20))','MULTILINESTRING((160 160,90 90,160 20),(160 120,120 120,90 90,160 60))'); SELECT '401', ST_Relate('MULTILINESTRING((20 20,90 90,20 160),(90 160,90 20))','MULTILINESTRING((160 160,90 90,160 20),(160 120,120 120,90 90,120 60,160 60))'); SELECT '402', ST_Relate('MULTILINESTRING((20 20,90 90,20 160),(90 160,90 20))','MULTILINESTRING((160 160,90 90,160 20),(160 120,90 90,160 60))'); SELECT '403', ST_Relate('POINT(20 20)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '404', ST_Relate('POINT(70 170)','POLYGON((110 230,80 160,20 160,20 20,200 20,200 160,140 160,110 230))'); SELECT '405', ST_Relate('POINT(110 130)','POLYGON((20 160,80 160,110 100,140 160,200 160,200 20,20 20,20 160))'); SELECT '406', ST_Relate('POINT(100 70)','POLYGON((20 150,100 150,40 50,170 50,110 150,190 150,190 20,20 20,20 150))'); SELECT '407', ST_Relate('POINT(100 70)','POLYGON((20 150,100 150,40 50,160 50,100 150,180 150,180 20,20 20,20 150))'); SELECT '408', ST_Relate('POINT(60 120)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '409', ST_Relate('POINT(110 120)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '410', ST_Relate('POINT(160 120)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '411', ST_Relate('POINT(100 150)','POLYGON((20 150,100 150,40 50,160 50,100 150,180 150,180 20,20 20,20 150))'); SELECT '412', ST_Relate('POINT(100 80)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '413', ST_Relate('POINT(60 160)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '414', ST_Relate('POINT(190 90)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '415', ST_Relate('POINT(190 190)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '416', ST_Relate('POINT(360 20)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '417', ST_Relate('POINT(130 130)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '418', ST_Relate('POINT(280 50)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '419', ST_Relate('POINT(150 100)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '420', ST_Relate('POINT(100 50)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '421', ST_Relate('POINT(140 120)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '422', ST_Relate('POINT(190 50)','POLYGON((190 190,360 20,20 20,190 190),(90 50,150 110,190 50,90 50),(190 50,230 110,290 50,190 50))'); SELECT '423', ST_Relate('POINT(180 90)','POLYGON((190 190,360 20,20 20,190 190),(180 140,180 40,80 40,180 140),(180 90,210 140,310 40,230 40,180 90))'); SELECT '424', ST_Relate('MULTIPOINT(20 80,110 160,20 160)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '425', ST_Relate('MULTIPOINT(20 80,60 120,20 160)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '426', ST_Relate('MULTIPOINT(10 80,110 170,110 120)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '427', ST_Relate('MULTIPOINT(10 80,110 170,160 120)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '428', ST_Relate('MULTIPOINT(20 120,60 120,110 120,160 120,200 120)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '429', ST_Relate('MULTIPOINT(60 120,110 120,160 120)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '430', ST_Relate('MULTIPOINT(60 120,160 120,160 40,60 40)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '431', ST_Relate('MULTIPOINT(20 150,60 120,110 80)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '432', ST_Relate('MULTIPOINT(110 80,160 120,200 160)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '433', ST_Relate('MULTIPOINT(110 80,110 120,110 160)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '434', ST_Relate('MULTIPOINT(110 170,110 80)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '435', ST_Relate('MULTIPOINT(60 120,160 120,110 80,110 170)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '436', ST_Relate('MULTIPOINT(90 80,130 80)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '437', ST_Relate('MULTIPOINT(60 120,160 120,110 80)','POLYGON((60 120,60 40,160 40,160 120,60 120))'); SELECT '438', ST_Relate('MULTIPOINT(40 170,40 90,130 170)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '439', ST_Relate('MULTIPOINT(90 170,280 170,190 90)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '440', ST_Relate('MULTIPOINT(190 110,150 70,230 70)','POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))'); SELECT '441', ST_Relate('POINT(100 100)','MULTIPOLYGON(((20 100,20 20,100 20,100 100,20 100)),((100 180,100 100,180 100,180 180,100 180)))'); SELECT '442', ST_Relate('POINT(20 100)','MULTIPOLYGON(((20 100,20 20,100 20,100 100,20 100)),((100 180,100 100,180 100,180 180,100 180)))'); SELECT '443', ST_Relate('POINT(60 100)','MULTIPOLYGON(((20 100,20 20,100 20,100 100,20 100)),((100 180,100 100,180 100,180 180,100 180)))'); SELECT '444', ST_Relate('POINT(110 110)','MULTIPOLYGON(((110 110,20 200,200 200,110 110),(110 110,80 180,140 180,110 110)),((110 110,20 20,200 20,110 110),(110 110,80 40,140 40,110 110)))'); SELECT '445', ST_Relate('POINT(110 200)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '446', ST_Relate('POINT(90 80)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '447', ST_Relate('POINT(340 240)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '448', ST_Relate('POINT(230 150)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '449', ST_Relate('POINT(160 150)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '450', ST_Relate('POINT(90 150)','LINESTRING(150 150,20 20,280 20,150 150)'); SELECT '451', ST_Relate('POINT(150 80)','LINESTRING(150 150,20 20,280 20,150 150)'); SELECT '452', ST_Relate('POINT(150 150)','LINESTRING(150 150,20 20,280 20,150 150)'); SELECT '453', ST_Relate('POINT(100 20)','LINESTRING(150 150,20 20,280 20,150 150)'); SELECT '454', ST_Relate('POINT(20 20)','LINESTRING(150 150,20 20,280 20,150 150)'); SELECT '455', ST_Relate('POINT(220 220)','LINESTRING(110 110,220 20,20 20,110 110,220 220)'); SELECT '456', ST_Relate('POINT(110 110)','LINESTRING(110 110,220 20,20 20,110 110,220 220)'); SELECT '457', ST_Relate('POINT(110 110)','LINESTRING(110 110,220 20,20 20,220 220)'); SELECT '458', ST_Relate('POINT(110 20)','LINESTRING(110 110,220 20,20 20,220 220)'); SELECT '459', ST_Relate('POINT(220 20)','LINESTRING(110 110,220 20,20 20,220 220)'); SELECT '460', ST_Relate('POINT(110 20)','LINESTRING(220 220,20 20,220 20,110 110)'); SELECT '461', ST_Relate('POINT(20 20)','LINESTRING(220 220,20 20,220 20,110 110)'); SELECT '462', ST_Relate('POINT(20 110)','LINESTRING(20 200,20 20,110 20,20 110,110 200)'); SELECT '463', ST_Relate('POINT(20 200)','LINESTRING(20 200,200 20,20 20,200 200)'); SELECT '464', ST_Relate('POINT(110 110)','LINESTRING(20 200,200 20,140 20,140 80,80 140,20 140)'); SELECT '465', ST_Relate('POINT(110 110)','LINESTRING(20 200,200 20,20 20,200 200)'); SELECT '466', ST_Relate('POINT(80 140)','LINESTRING(20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)'); SELECT '467', ST_Relate('POINT(110 110)','LINESTRING(20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)'); SELECT '468', ST_Relate('POINT(110 110)','LINESTRING(20 200,200 20,140 20,140 80,110 110,80 140,20 140)'); SELECT '469', ST_Relate('POINT(110 110)','LINESTRING(20 200,110 110,200 20,20 20,110 110,200 200)'); SELECT '470', ST_Relate('POINT(110 110)','LINESTRING(20 200,200 20,20 20,110 110,200 200)'); SELECT '471', ST_Relate('POINT(110 110)','LINESTRING(20 200,110 110,20 20,200 20,110 110,200 200)'); SELECT '472', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)'); SELECT '473', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,200 20,140 20,140 80,110 110,80 140,20 140)'); SELECT '474', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,200 20,140 20,140 80,80 140,20 140)'); SELECT '475', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,110 110,200 20,20 20,110 110,200 200)'); SELECT '476', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,200 20,20 20,110 110,200 200)'); SELECT '477', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,200 20,20 20,200 200)'); SELECT '478', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,110 110,20 20,200 20,110 110,200 200)'); SELECT '479', ST_Relate('POINT(110 110)','LINESTRING(110 110,110 200,20 200,200 20,200 110,110 110,200 200)'); SELECT '480', ST_Relate('POINT(110 110)','LINESTRING(200 200,110 110,20 20,200 20,110 110,20 200,110 200,110 110)'); SELECT '481', ST_Relate('POINT(110 110)','LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)'); SELECT '482', ST_Relate('POINT(110 110)','LINESTRING(200 200,20 20,200 20,20 200,110 200,110 110)'); SELECT '483', ST_Relate('POINT(110 110)','LINESTRING(200 200,110 110,200 20,20 20,110 110,20 200,110 200,110 110)'); SELECT '484', ST_Relate('POINT(110 110)','LINESTRING(200 200,20 20,20 110,110 110,20 200,110 200,110 110)'); SELECT '485', ST_Relate('POINT(110 160)','LINESTRING(110 160,200 250,110 250,110 160,110 110,110 20,20 20,110 110)'); SELECT '486', ST_Relate('POINT(110 160)','LINESTRING(110 160,200 250,110 250,110 110,110 20,20 20,110 110)'); SELECT '487', ST_Relate('POINT(110 110)','LINESTRING(110 160,200 250,110 250,110 160,110 110,110 20,20 20,110 110)'); SELECT '488', ST_Relate('POINT(110 110)','LINESTRING(110 160,200 250,110 250,110 160,110 20,20 20,110 110)'); SELECT '489', ST_Relate('POINT(110 110)','LINESTRING(110 110,200 200,110 200,110 110,110 20,20 20,110 110)'); SELECT '490', ST_Relate('POINT(110 110)','LINESTRING(110 110,200 200,110 200,110 20,20 20,110 110)'); SELECT '491', ST_Relate('POINT(140 200)','LINESTRING(110 110,200 200,110 200,110 110,110 20,20 20,110 110)'); SELECT '492', ST_Relate('POINT(110 200)','LINESTRING(110 110,200 200,110 200,110 110,110 20,20 20,110 110)'); SELECT '493', ST_Relate('POINT(110 110)','LINESTRING(110 110,200 200,110 200,110 110,110 20,200 20,110 110)'); SELECT '494', ST_Relate('POINT(140 200)','LINESTRING(110 110,200 200,110 200,110 110,110 20,200 20,110 110)'); SELECT '495', ST_Relate('POINT(110 200)','LINESTRING(110 110,200 200,110 200,110 110,110 20,200 20,110 110)'); SELECT '496', ST_Relate('POINT(90 130)','LINESTRING(90 130,20 130,20 200,90 130,200 20,20 20,200 200)'); SELECT '497', ST_Relate('POINT(110 110)','LINESTRING(90 130,20 130,20 200,90 130,200 20,20 20,200 200)'); SELECT '498', ST_Relate('POINT(90 130)','LINESTRING(90 130,20 130,20 200,200 20,20 20,200 200)'); SELECT '499', ST_Relate('POINT(110 110)','LINESTRING(90 130,20 130,20 200,200 20,20 20,200 200)'); SELECT '500', ST_Relate('POINT(90 130)','LINESTRING(200 200,20 20,200 20,90 130,20 200,20 130,90 130)'); SELECT '501', ST_Relate('POINT(110 110)','LINESTRING(200 200,20 20,200 20,90 130,20 200,20 130,90 130)'); SELECT '502', ST_Relate('POINT(90 130)','LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'); SELECT '503', ST_Relate('POINT(110 110)','LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)'); SELECT '504', ST_Relate('POINT(110 110)','LINESTRING(110 110,20 130,20 200,110 110,200 20,20 20,110 110,200 200,200 130,110 110)'); SELECT '505', ST_Relate('POINT(110 110)','LINESTRING(110 110,20 130,20 200,200 20,20 20,200 200,200 130,110 110)'); SELECT '506', ST_Relate('POINT(110 110)','LINESTRING(110 110,80 200,20 200,110 110,200 20,20 20,110 110,200 200,140 200,110 110)'); SELECT '507', ST_Relate('POINT(110 110)','LINESTRING(110 110,80 200,20 200,200 20,20 20,200 200,140 200,110 110)'); SELECT '508', ST_Relate('POINT(110 110)','LINESTRING(200 200,20 20,200 20,20 200,200 200)'); SELECT '509', ST_Relate('POINT(110 110)','LINESTRING(200 200,110 110,20 20,200 20,110 110,20 200,200 200)'); SELECT '510', ST_Relate('POINT(110 110)','LINESTRING(200 200,110 110,200 20,20 20,110 110,20 200,200 200)'); SELECT '511', ST_Relate('POINT(90 130)','LINESTRING(90 130,20 130,20 200,90 130,110 110,200 20,20 20,110 110,200 200,90 130)'); SELECT '512', ST_Relate('POINT(90 130)','LINESTRING(90 130,20 130,20 200,110 110,200 20,20 20,110 110,200 200,90 130)'); SELECT '513', ST_Relate('POINT(90 130)','LINESTRING(90 130,90 200,20 200,90 130,110 110,200 20,20 20,110 110,200 200,90 130)'); SELECT '514', ST_Relate('POINT(90 130)','LINESTRING(90 130,90 200,20 200,200 20,20 20,200 200,90 130)'); SELECT '515', ST_Relate('POINT(90 130)','LINESTRING(90 130,90 200,20 200,110 110,200 20,20 20,110 110,200 200,90 130)'); SELECT '516', ST_Relate('POINT(90 130)','LINESTRING(90 130,90 200,20 200,200 20,20 20,200 200,90 130)'); SELECT '517', ST_Relate('POINT(110 110)','LINESTRING(90 130,90 200,20 200,200 20,20 20,200 200,90 130)'); SELECT '518', ST_Relate('POINT(110 200)','LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200,200 200)'); SELECT '519', ST_Relate('POINT(110 150)','LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200,200 200)'); SELECT '520', ST_Relate('POINT(110 110)','LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200,200 200)'); SELECT '521', ST_Relate('POINT(110 200)','LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200)'); SELECT '522', ST_Relate('POINT(110 150)','LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200)'); SELECT '523', ST_Relate('POINT(110 110)','LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200)'); SELECT '524', ST_Relate('POINT(110 150)','LINESTRING(20 200,110 200,110 110,20 20,200 20,110 110,110 200,200 200)'); SELECT '525', ST_Relate('POINT(110 110)','LINESTRING(20 200,110 200,110 110,20 20,200 20,110 110,110 200,200 200)'); SELECT '526', ST_Relate('POINT(110 200)','LINESTRING(20 200,110 200,110 110,20 20,200 20,110 110,110 200,200 200)'); SELECT '527', ST_Relate('MULTIPOINT(50 250,90 220,130 190)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '528', ST_Relate('MULTIPOINT(180 180,230 130,280 80)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '529', ST_Relate('MULTIPOINT(50 120,90 80,130 40)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '530', ST_Relate('MULTIPOINT(300 280,340 240,380 200)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '531', ST_Relate('MULTIPOINT(230 150,260 120,290 90)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '532', ST_Relate('MULTIPOINT(200 190,240 150,270 110)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '533', ST_Relate('MULTIPOINT(160 150,190 120,220 90)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '534', ST_Relate('MULTIPOINT(120 190,160 150,200 110)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '535', ST_Relate('MULTIPOINT(90 80,160 150,340 240)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '536', ST_Relate('MULTIPOINT(90 80,160 150,300 150)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '537', ST_Relate('MULTIPOINT(90 80,160 150,240 150)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '538', ST_Relate('MULTIPOINT(90 80,130 120,210 150)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '539', ST_Relate('MULTIPOINT(130 120,210 150,340 200)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '540', ST_Relate('MULTIPOINT(160 150,240 150,340 210)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '541', ST_Relate('MULTIPOINT(160 150,300 150,340 150)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '542', ST_Relate('MULTIPOINT(160 150,240 150,340 240)','LINESTRING(90 80,160 150,300 150,340 150,340 240)'); SELECT '543', ST_Relate('POINT(20 20)','POINT(20 20)'); SELECT '544', ST_Relate('POINT(20 20)','POINT(40 60)'); SELECT '545', ST_Relate('POINT(40 40)','MULTIPOINT(20 20,80 80,20 120)'); SELECT '546', ST_Relate('POINT(20 20)','MULTIPOINT(20 20,80 80,20 120)'); SELECT '547', ST_Relate('MULTIPOINT(40 40,80 60,120 100)','MULTIPOINT(40 40,80 60,120 100)'); SELECT '548', ST_Relate('MULTIPOINT(40 40,80 60,120 100)','MULTIPOINT(40 40,120 100,80 60)'); SELECT '549', ST_Relate('MULTIPOINT(40 40,60 100,100 60,120 120)','MULTIPOINT(20 120,60 60,100 100,140 40)'); SELECT '550', ST_Relate('MULTIPOINT(20 20,80 70,140 120,200 170)','MULTIPOINT(20 20,80 70,140 120,200 170)'); SELECT '551', ST_Relate('MULTIPOINT(20 20,140 120,80 70,200 170)','MULTIPOINT(80 70,20 20,200 170,140 120)'); SELECT '552', ST_Relate('MULTIPOINT(20 20,80 70,140 120,200 170)','MULTIPOINT(80 70,140 120)'); SELECT '553', ST_Relate('MULTIPOINT(80 70,20 20,200 170,140 120)','MULTIPOINT(140 120,80 70)'); SELECT '554', ST_Relate('MULTIPOINT(80 70,20 20,200 170,140 120)','MULTIPOINT(80 170,140 120,200 80)'); SELECT '555', ST_Relate('MULTIPOINT(80 70,20 20,200 170,140 120)','MULTIPOINT(80 170,140 120,200 80,80 70)'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/iscollection_expected�����������������������������������������������0000644�0000000�0000000�00000000310�11722777314�021532� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������point|f poly|f line|f empty multipoint|t multipoint|t multipoint+|t empty multiline|t multiline|t multiline+|t empty multipoly|t multipoly|t multipoly+|t empty collection|t collection|t collection+|t ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-circularstring_expected��������������������������������������0000644�0000000�0000000�00000057535�12200634326�023312� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ndims01|4 geometrytype01|CIRCULARSTRING ndims02|3 geometrytype02|CIRCULARSTRING ndims03|3 geometrytype03|CIRCULARSTRINGM ndims04|2 geometrytype04|CIRCULARSTRING isClosed01|t ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: isring() should only be called on a LINE isClosed02|t ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: isring() should only be called on a LINE astext01|CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731) astext01|CIRCULARSTRING(-5 0,0 5,5 0,10 -5,15 0) astext02|CIRCULARSTRING M (0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2) astext02|CIRCULARSTRING M (-5 0 4,0 5 3,5 0 2,10 -5 1,15 0 0) astext03|CIRCULARSTRING Z (0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1) astext03|CIRCULARSTRING Z (-5 0 0,0 5 1,5 0 2,10 -5 3,15 0 4) astext04|CIRCULARSTRING ZM (0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2) astext04|CIRCULARSTRING ZM (-5 0 0 4,0 5 1 3,5 0 2 2,10 -5 3 1,15 0 4 0) asewkt01|CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731) asewkt01|CIRCULARSTRING(-5 0,0 5,5 0,10 -5,15 0) asewkt02|CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2) asewkt02|CIRCULARSTRINGM(-5 0 4,0 5 3,5 0 2,10 -5 1,15 0 0) asewkt03|CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1) asewkt03|CIRCULARSTRING(-5 0 0,0 5 1,5 0 2,10 -5 3,15 0 4) asewkt04|CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2) asewkt04|CIRCULARSTRING(-5 0 0 4,0 5 1 3,5 0 2 2,10 -5 3 1,15 0 4 0) ST_CurveToLine-201|LINESTRING(0 0,0.58578644 1.41421356) ST_CurveToLine-201|LINESTRING(-5 0,-3.53553391 3.53553391,0 5,3.53553391 3.53553391,5 0,6.46446609 -3.53553391,10 -5,13.53553391 -3.53553391,15 0) ST_CurveToLine-202|LINESTRINGM(0 0 0,0.58578644 1.41421356 2) ST_CurveToLine-202|LINESTRINGM(-5 0 4,-3.53553391 3.53553391 3.5,0 5 3,3.53553391 3.53553391 2.5,5 0 2,6.46446609 -3.53553391 1.5,10 -5 1,13.53553391 -3.53553391 0.5,15 0 0) ST_CurveToLine-203|LINESTRING(0 0 0,0.58578644 1.41421356 1) ST_CurveToLine-203|LINESTRING(-5 0 0,-3.53553391 3.53553391 0.5,0 5 1,3.53553391 3.53553391 1.5,5 0 2,6.46446609 -3.53553391 2.5,10 -5 3,13.53553391 -3.53553391 3.5,15 0 4) ST_CurveToLine-204|LINESTRING(0 0 0 0,0.58578644 1.41421356 1 2) ST_CurveToLine-204|LINESTRING(-5 0 0 4,-3.53553391 3.53553391 0.5 3.5,0 5 1 3,3.53553391 3.53553391 1.5 2.5,5 0 2 2,6.46446609 -3.53553391 2.5 1.5,10 -5 3 1,13.53553391 -3.53553391 3.5 0.5,15 0 4 0) ST_CurveToLine-401|LINESTRING(0 0,0.15224093 0.76536686,0.58578644 1.41421356) ST_CurveToLine-401|LINESTRING(-5 0,-4.61939766 1.91341716,-3.53553391 3.53553391,-1.91341716 4.61939766,0 5,1.91341716 4.61939766,3.53553391 3.53553391,4.61939766 1.91341716,5 0,5.38060234 -1.91341716,6.46446609 -3.53553391,8.08658284 -4.61939766,10 -5,11.91341716 -4.61939766,13.53553391 -3.53553391,14.61939766 -1.91341716,15 0) ST_CurveToLine-402|LINESTRINGM(0 0 0,0.15224093 0.76536686 -1.5,0.58578644 1.41421356 2) ST_CurveToLine-402|LINESTRINGM(-5 0 4,-4.61939766 1.91341716 3.75,-3.53553391 3.53553391 3.5,-1.91341716 4.61939766 3.25,0 5 3,1.91341716 4.61939766 2.75,3.53553391 3.53553391 2.5,4.61939766 1.91341716 2.25,5 0 2,5.38060234 -1.91341716 1.75,6.46446609 -3.53553391 1.5,8.08658284 -4.61939766 1.25,10 -5 1,11.91341716 -4.61939766 0.75,13.53553391 -3.53553391 0.5,14.61939766 -1.91341716 0.25,15 0 0) ST_CurveToLine-403|LINESTRING(0 0 0,0.15224093 0.76536686 2.25,0.58578644 1.41421356 1) ST_CurveToLine-403|LINESTRING(-5 0 0,-4.61939766 1.91341716 0.25,-3.53553391 3.53553391 0.5,-1.91341716 4.61939766 0.75,0 5 1,1.91341716 4.61939766 1.25,3.53553391 3.53553391 1.5,4.61939766 1.91341716 1.75,5 0 2,5.38060234 -1.91341716 2.25,6.46446609 -3.53553391 2.5,8.08658284 -4.61939766 2.75,10 -5 3,11.91341716 -4.61939766 3.25,13.53553391 -3.53553391 3.5,14.61939766 -1.91341716 3.75,15 0 4) ST_CurveToLine-404|LINESTRING(0 0 0 0,0.15224093 0.76536686 2.25 -1.5,0.58578644 1.41421356 1 2) ST_CurveToLine-404|LINESTRING(-5 0 0 4,-4.61939766 1.91341716 0.25 3.75,-3.53553391 3.53553391 0.5 3.5,-1.91341716 4.61939766 0.75 3.25,0 5 1 3,1.91341716 4.61939766 1.25 2.75,3.53553391 3.53553391 1.5 2.5,4.61939766 1.91341716 1.75 2.25,5 0 2 2,5.38060234 -1.91341716 2.25 1.75,6.46446609 -3.53553391 2.5 1.5,8.08658284 -4.61939766 2.75 1.25,10 -5 3 1,11.91341716 -4.61939766 3.25 0.75,13.53553391 -3.53553391 3.5 0.5,14.61939766 -1.91341716 3.75 0.25,15 0 4 0) ST_CurveToLine01|LINESTRING(0 0,0.00240909 0.09813535,0.00963055 0.19603428,0.02164698 0.29346095,0.03842944 0.39018064,0.05993749 0.48596036,0.08611933 0.58056935,0.11691187 0.67377971,0.15224093 0.76536686,0.19202141 0.85511019,0.23615747 0.94279347,0.28454278 1.02820549,0.33706078 1.11114047,0.39358494 1.19139861,0.45397909 1.26878657,0.51809775 1.34311791,0.58578644 1.41421356) ST_CurveToLine01|LINESTRING(-5 0,-4.99397728 0.24533837,-4.97592363 0.4900857,-4.94588255 0.73365237,-4.9039264 0.97545161,-4.85015627 1.2149009,-4.78470168 1.45142339,-4.70772033 1.68444927,-4.61939766 1.91341716,-4.51994647 2.13777547,-4.40960632 2.35698368,-4.28864305 2.57051372,-4.15734806 2.77785117,-4.01603766 2.97849652,-3.86505227 3.17196642,-3.70475563 3.35779477,-3.53553391 3.53553391,-3.35779477 3.70475563,-3.17196642 3.86505227,-2.97849652 4.01603766,-2.77785117 4.15734806,-2.57051372 4.28864305,-2.35698368 4.40960632,-2.13777547 4.51994647,-1.91341716 4.61939766,-1.68444927 4.70772033,-1.45142339 4.78470168,-1.2149009 4.85015627,-0.97545161 4.9039264,-0.73365237 4.94588255,-0.4900857 4.97592363,-0.24533837 4.99397728,0 5,0.24533837 4.99397728,0.4900857 4.97592363,0.73365237 4.94588255,0.97545161 4.9039264,1.2149009 4.85015627,1.45142339 4.78470168,1.68444927 4.70772033,1.91341716 4.61939766,2.13777547 4.51994647,2.35698368 4.40960632,2.57051372 4.28864305,2.77785117 4.15734806,2.97849652 4.01603766,3.17196642 3.86505227,3.35779477 3.70475563,3.53553391 3.53553391,3.70475563 3.35779477,3.86505227 3.17196642,4.01603766 2.97849652,4.15734806 2.77785117,4.28864305 2.57051372,4.40960632 2.35698368,4.51994647 2.13777547,4.61939766 1.91341716,4.70772033 1.68444927,4.78470168 1.45142339,4.85015627 1.2149009,4.9039264 0.97545161,4.94588255 0.73365237,4.97592363 0.4900857,4.99397728 0.24533837,5 0,5.00602272 -0.24533837,5.02407637 -0.4900857,5.05411745 -0.73365237,5.0960736 -0.97545161,5.14984373 -1.2149009,5.21529832 -1.45142339,5.29227967 -1.68444927,5.38060234 -1.91341716,5.48005353 -2.13777547,5.59039368 -2.35698368,5.71135695 -2.57051372,5.84265194 -2.77785117,5.98396234 -2.97849652,6.13494773 -3.17196642,6.29524437 -3.35779477,6.46446609 -3.53553391,6.64220523 -3.70475563,6.82803358 -3.86505227,7.02150348 -4.01603766,7.22214883 -4.15734806,7.42948628 -4.28864305,7.64301632 -4.40960632,7.86222453 -4.51994647,8.08658284 -4.61939766,8.31555073 -4.70772033,8.54857661 -4.78470168,8.7850991 -4.85015627,9.02454839 -4.9039264,9.26634763 -4.94588255,9.5099143 -4.97592363,9.75466163 -4.99397728,10 -5,10.24533837 -4.99397728,10.4900857 -4.97592363,10.73365237 -4.94588255,10.97545161 -4.9039264,11.2149009 -4.85015627,11.45142339 -4.78470168,11.68444927 -4.70772033,11.91341716 -4.61939766,12.13777547 -4.51994647,12.35698368 -4.40960632,12.57051372 -4.28864305,12.77785117 -4.15734806,12.97849652 -4.01603766,13.17196642 -3.86505227,13.35779477 -3.70475563,13.53553391 -3.53553391,13.70475563 -3.35779477,13.86505227 -3.17196642,14.01603766 -2.97849652,14.15734806 -2.77785117,14.28864305 -2.57051372,14.40960632 -2.35698368,14.51994647 -2.13777547,14.61939766 -1.91341716,14.70772033 -1.68444927,14.78470168 -1.45142339,14.85015627 -1.2149009,14.9039264 -0.97545161,14.94588255 -0.73365237,14.97592363 -0.4900857,14.99397728 -0.24533837,15 0) ST_CurveToLine02|LINESTRINGM(0 0 0,0.00240909 0.09813535 -0.1875,0.00963055 0.19603428 -0.375,0.02164698 0.29346095 -0.5625,0.03842944 0.39018064 -0.75,0.05993749 0.48596036 -0.9375,0.08611933 0.58056935 -1.125,0.11691187 0.67377971 -1.3125,0.15224093 0.76536686 -1.5,0.19202141 0.85511019 -1.6875,0.23615747 0.94279347 -1.875,0.28454278 1.02820549 -1.75,0.33706078 1.11114047 -1,0.39358494 1.19139861 -0.25,0.45397909 1.26878657 0.5,0.51809775 1.34311791 1.25,0.58578644 1.41421356 2) ST_CurveToLine02|LINESTRINGM(-5 0 4,-4.99397728 0.24533837 3.96875,-4.97592363 0.4900857 3.9375,-4.94588255 0.73365237 3.90625,-4.9039264 0.97545161 3.875,-4.85015627 1.2149009 3.84375,-4.78470168 1.45142339 3.8125,-4.70772033 1.68444927 3.78125,-4.61939766 1.91341716 3.75,-4.51994647 2.13777547 3.71875,-4.40960632 2.35698368 3.6875,-4.28864305 2.57051372 3.65625,-4.15734806 2.77785117 3.625,-4.01603766 2.97849652 3.59375,-3.86505227 3.17196642 3.5625,-3.70475563 3.35779477 3.53125,-3.53553391 3.53553391 3.5,-3.35779477 3.70475563 3.46875,-3.17196642 3.86505227 3.4375,-2.97849652 4.01603766 3.40625,-2.77785117 4.15734806 3.375,-2.57051372 4.28864305 3.34375,-2.35698368 4.40960632 3.3125,-2.13777547 4.51994647 3.28125,-1.91341716 4.61939766 3.25,-1.68444927 4.70772033 3.21875,-1.45142339 4.78470168 3.1875,-1.2149009 4.85015627 3.15625,-0.97545161 4.9039264 3.125,-0.73365237 4.94588255 3.09375,-0.4900857 4.97592363 3.0625,-0.24533837 4.99397728 3.03125,0 5 3,0.24533837 4.99397728 2.96875,0.4900857 4.97592363 2.9375,0.73365237 4.94588255 2.90625,0.97545161 4.9039264 2.875,1.2149009 4.85015627 2.84375,1.45142339 4.78470168 2.8125,1.68444927 4.70772033 2.78125,1.91341716 4.61939766 2.75,2.13777547 4.51994647 2.71875,2.35698368 4.40960632 2.6875,2.57051372 4.28864305 2.65625,2.77785117 4.15734806 2.625,2.97849652 4.01603766 2.59375,3.17196642 3.86505227 2.5625,3.35779477 3.70475563 2.53125,3.53553391 3.53553391 2.5,3.70475563 3.35779477 2.46875,3.86505227 3.17196642 2.4375,4.01603766 2.97849652 2.40625,4.15734806 2.77785117 2.375,4.28864305 2.57051372 2.34375,4.40960632 2.35698368 2.3125,4.51994647 2.13777547 2.28125,4.61939766 1.91341716 2.25,4.70772033 1.68444927 2.21875,4.78470168 1.45142339 2.1875,4.85015627 1.2149009 2.15625,4.9039264 0.97545161 2.125,4.94588255 0.73365237 2.09375,4.97592363 0.4900857 2.0625,4.99397728 0.24533837 2.03125,5 0 2,5.00602272 -0.24533837 1.96875,5.02407637 -0.4900857 1.9375,5.05411745 -0.73365237 1.90625,5.0960736 -0.97545161 1.875,5.14984373 -1.2149009 1.84375,5.21529832 -1.45142339 1.8125,5.29227967 -1.68444927 1.78125,5.38060234 -1.91341716 1.75,5.48005353 -2.13777547 1.71875,5.59039368 -2.35698368 1.6875,5.71135695 -2.57051372 1.65625,5.84265194 -2.77785117 1.625,5.98396234 -2.97849652 1.59375,6.13494773 -3.17196642 1.5625,6.29524437 -3.35779477 1.53125,6.46446609 -3.53553391 1.5,6.64220523 -3.70475563 1.46875,6.82803358 -3.86505227 1.4375,7.02150348 -4.01603766 1.40625,7.22214883 -4.15734806 1.375,7.42948628 -4.28864305 1.34375,7.64301632 -4.40960632 1.3125,7.86222453 -4.51994647 1.28125,8.08658284 -4.61939766 1.25,8.31555073 -4.70772033 1.21875,8.54857661 -4.78470168 1.1875,8.7850991 -4.85015627 1.15625,9.02454839 -4.9039264 1.125,9.26634763 -4.94588255 1.09375,9.5099143 -4.97592363 1.0625,9.75466163 -4.99397728 1.03125,10 -5 1,10.24533837 -4.99397728 0.96875,10.4900857 -4.97592363 0.9375,10.73365237 -4.94588255 0.90625,10.97545161 -4.9039264 0.875,11.2149009 -4.85015627 0.84375,11.45142339 -4.78470168 0.8125,11.68444927 -4.70772033 0.78125,11.91341716 -4.61939766 0.75,12.13777547 -4.51994647 0.71875,12.35698368 -4.40960632 0.6875,12.57051372 -4.28864305 0.65625,12.77785117 -4.15734806 0.625,12.97849652 -4.01603766 0.59375,13.17196642 -3.86505227 0.5625,13.35779477 -3.70475563 0.53125,13.53553391 -3.53553391 0.5,13.70475563 -3.35779477 0.46875,13.86505227 -3.17196642 0.4375,14.01603766 -2.97849652 0.40625,14.15734806 -2.77785117 0.375,14.28864305 -2.57051372 0.34375,14.40960632 -2.35698368 0.3125,14.51994647 -2.13777547 0.28125,14.61939766 -1.91341716 0.25,14.70772033 -1.68444927 0.21875,14.78470168 -1.45142339 0.1875,14.85015627 -1.2149009 0.15625,14.9039264 -0.97545161 0.125,14.94588255 -0.73365237 0.09375,14.97592363 -0.4900857 0.0625,14.99397728 -0.24533837 0.03125,15 0 0) ST_CurveToLine03|LINESTRING(0 0 0,0.00240909 0.09813535 0.28125,0.00963055 0.19603428 0.5625,0.02164698 0.29346095 0.84375,0.03842944 0.39018064 1.125,0.05993749 0.48596036 1.40625,0.08611933 0.58056935 1.6875,0.11691187 0.67377971 1.96875,0.15224093 0.76536686 2.25,0.19202141 0.85511019 2.53125,0.23615747 0.94279347 2.8125,0.28454278 1.02820549 2.875,0.33706078 1.11114047 2.5,0.39358494 1.19139861 2.125,0.45397909 1.26878657 1.75,0.51809775 1.34311791 1.375,0.58578644 1.41421356 1) ST_CurveToLine03|LINESTRING(-5 0 0,-4.99397728 0.24533837 0.03125,-4.97592363 0.4900857 0.0625,-4.94588255 0.73365237 0.09375,-4.9039264 0.97545161 0.125,-4.85015627 1.2149009 0.15625,-4.78470168 1.45142339 0.1875,-4.70772033 1.68444927 0.21875,-4.61939766 1.91341716 0.25,-4.51994647 2.13777547 0.28125,-4.40960632 2.35698368 0.3125,-4.28864305 2.57051372 0.34375,-4.15734806 2.77785117 0.375,-4.01603766 2.97849652 0.40625,-3.86505227 3.17196642 0.4375,-3.70475563 3.35779477 0.46875,-3.53553391 3.53553391 0.5,-3.35779477 3.70475563 0.53125,-3.17196642 3.86505227 0.5625,-2.97849652 4.01603766 0.59375,-2.77785117 4.15734806 0.625,-2.57051372 4.28864305 0.65625,-2.35698368 4.40960632 0.6875,-2.13777547 4.51994647 0.71875,-1.91341716 4.61939766 0.75,-1.68444927 4.70772033 0.78125,-1.45142339 4.78470168 0.8125,-1.2149009 4.85015627 0.84375,-0.97545161 4.9039264 0.875,-0.73365237 4.94588255 0.90625,-0.4900857 4.97592363 0.9375,-0.24533837 4.99397728 0.96875,0 5 1,0.24533837 4.99397728 1.03125,0.4900857 4.97592363 1.0625,0.73365237 4.94588255 1.09375,0.97545161 4.9039264 1.125,1.2149009 4.85015627 1.15625,1.45142339 4.78470168 1.1875,1.68444927 4.70772033 1.21875,1.91341716 4.61939766 1.25,2.13777547 4.51994647 1.28125,2.35698368 4.40960632 1.3125,2.57051372 4.28864305 1.34375,2.77785117 4.15734806 1.375,2.97849652 4.01603766 1.40625,3.17196642 3.86505227 1.4375,3.35779477 3.70475563 1.46875,3.53553391 3.53553391 1.5,3.70475563 3.35779477 1.53125,3.86505227 3.17196642 1.5625,4.01603766 2.97849652 1.59375,4.15734806 2.77785117 1.625,4.28864305 2.57051372 1.65625,4.40960632 2.35698368 1.6875,4.51994647 2.13777547 1.71875,4.61939766 1.91341716 1.75,4.70772033 1.68444927 1.78125,4.78470168 1.45142339 1.8125,4.85015627 1.2149009 1.84375,4.9039264 0.97545161 1.875,4.94588255 0.73365237 1.90625,4.97592363 0.4900857 1.9375,4.99397728 0.24533837 1.96875,5 0 2,5.00602272 -0.24533837 2.03125,5.02407637 -0.4900857 2.0625,5.05411745 -0.73365237 2.09375,5.0960736 -0.97545161 2.125,5.14984373 -1.2149009 2.15625,5.21529832 -1.45142339 2.1875,5.29227967 -1.68444927 2.21875,5.38060234 -1.91341716 2.25,5.48005353 -2.13777547 2.28125,5.59039368 -2.35698368 2.3125,5.71135695 -2.57051372 2.34375,5.84265194 -2.77785117 2.375,5.98396234 -2.97849652 2.40625,6.13494773 -3.17196642 2.4375,6.29524437 -3.35779477 2.46875,6.46446609 -3.53553391 2.5,6.64220523 -3.70475563 2.53125,6.82803358 -3.86505227 2.5625,7.02150348 -4.01603766 2.59375,7.22214883 -4.15734806 2.625,7.42948628 -4.28864305 2.65625,7.64301632 -4.40960632 2.6875,7.86222453 -4.51994647 2.71875,8.08658284 -4.61939766 2.75,8.31555073 -4.70772033 2.78125,8.54857661 -4.78470168 2.8125,8.7850991 -4.85015627 2.84375,9.02454839 -4.9039264 2.875,9.26634763 -4.94588255 2.90625,9.5099143 -4.97592363 2.9375,9.75466163 -4.99397728 2.96875,10 -5 3,10.24533837 -4.99397728 3.03125,10.4900857 -4.97592363 3.0625,10.73365237 -4.94588255 3.09375,10.97545161 -4.9039264 3.125,11.2149009 -4.85015627 3.15625,11.45142339 -4.78470168 3.1875,11.68444927 -4.70772033 3.21875,11.91341716 -4.61939766 3.25,12.13777547 -4.51994647 3.28125,12.35698368 -4.40960632 3.3125,12.57051372 -4.28864305 3.34375,12.77785117 -4.15734806 3.375,12.97849652 -4.01603766 3.40625,13.17196642 -3.86505227 3.4375,13.35779477 -3.70475563 3.46875,13.53553391 -3.53553391 3.5,13.70475563 -3.35779477 3.53125,13.86505227 -3.17196642 3.5625,14.01603766 -2.97849652 3.59375,14.15734806 -2.77785117 3.625,14.28864305 -2.57051372 3.65625,14.40960632 -2.35698368 3.6875,14.51994647 -2.13777547 3.71875,14.61939766 -1.91341716 3.75,14.70772033 -1.68444927 3.78125,14.78470168 -1.45142339 3.8125,14.85015627 -1.2149009 3.84375,14.9039264 -0.97545161 3.875,14.94588255 -0.73365237 3.90625,14.97592363 -0.4900857 3.9375,14.99397728 -0.24533837 3.96875,15 0 4) ST_CurveToLine04|LINESTRING(0 0 0 0,0.00240909 0.09813535 0.28125 -0.1875,0.00963055 0.19603428 0.5625 -0.375,0.02164698 0.29346095 0.84375 -0.5625,0.03842944 0.39018064 1.125 -0.75,0.05993749 0.48596036 1.40625 -0.9375,0.08611933 0.58056935 1.6875 -1.125,0.11691187 0.67377971 1.96875 -1.3125,0.15224093 0.76536686 2.25 -1.5,0.19202141 0.85511019 2.53125 -1.6875,0.23615747 0.94279347 2.8125 -1.875,0.28454278 1.02820549 2.875 -1.75,0.33706078 1.11114047 2.5 -1,0.39358494 1.19139861 2.125 -0.25,0.45397909 1.26878657 1.75 0.5,0.51809775 1.34311791 1.375 1.25,0.58578644 1.41421356 1 2) ST_CurveToLine04|LINESTRING(-5 0 0 4,-4.99397728 0.24533837 0.03125 3.96875,-4.97592363 0.4900857 0.0625 3.9375,-4.94588255 0.73365237 0.09375 3.90625,-4.9039264 0.97545161 0.125 3.875,-4.85015627 1.2149009 0.15625 3.84375,-4.78470168 1.45142339 0.1875 3.8125,-4.70772033 1.68444927 0.21875 3.78125,-4.61939766 1.91341716 0.25 3.75,-4.51994647 2.13777547 0.28125 3.71875,-4.40960632 2.35698368 0.3125 3.6875,-4.28864305 2.57051372 0.34375 3.65625,-4.15734806 2.77785117 0.375 3.625,-4.01603766 2.97849652 0.40625 3.59375,-3.86505227 3.17196642 0.4375 3.5625,-3.70475563 3.35779477 0.46875 3.53125,-3.53553391 3.53553391 0.5 3.5,-3.35779477 3.70475563 0.53125 3.46875,-3.17196642 3.86505227 0.5625 3.4375,-2.97849652 4.01603766 0.59375 3.40625,-2.77785117 4.15734806 0.625 3.375,-2.57051372 4.28864305 0.65625 3.34375,-2.35698368 4.40960632 0.6875 3.3125,-2.13777547 4.51994647 0.71875 3.28125,-1.91341716 4.61939766 0.75 3.25,-1.68444927 4.70772033 0.78125 3.21875,-1.45142339 4.78470168 0.8125 3.1875,-1.2149009 4.85015627 0.84375 3.15625,-0.97545161 4.9039264 0.875 3.125,-0.73365237 4.94588255 0.90625 3.09375,-0.4900857 4.97592363 0.9375 3.0625,-0.24533837 4.99397728 0.96875 3.03125,0 5 1 3,0.24533837 4.99397728 1.03125 2.96875,0.4900857 4.97592363 1.0625 2.9375,0.73365237 4.94588255 1.09375 2.90625,0.97545161 4.9039264 1.125 2.875,1.2149009 4.85015627 1.15625 2.84375,1.45142339 4.78470168 1.1875 2.8125,1.68444927 4.70772033 1.21875 2.78125,1.91341716 4.61939766 1.25 2.75,2.13777547 4.51994647 1.28125 2.71875,2.35698368 4.40960632 1.3125 2.6875,2.57051372 4.28864305 1.34375 2.65625,2.77785117 4.15734806 1.375 2.625,2.97849652 4.01603766 1.40625 2.59375,3.17196642 3.86505227 1.4375 2.5625,3.35779477 3.70475563 1.46875 2.53125,3.53553391 3.53553391 1.5 2.5,3.70475563 3.35779477 1.53125 2.46875,3.86505227 3.17196642 1.5625 2.4375,4.01603766 2.97849652 1.59375 2.40625,4.15734806 2.77785117 1.625 2.375,4.28864305 2.57051372 1.65625 2.34375,4.40960632 2.35698368 1.6875 2.3125,4.51994647 2.13777547 1.71875 2.28125,4.61939766 1.91341716 1.75 2.25,4.70772033 1.68444927 1.78125 2.21875,4.78470168 1.45142339 1.8125 2.1875,4.85015627 1.2149009 1.84375 2.15625,4.9039264 0.97545161 1.875 2.125,4.94588255 0.73365237 1.90625 2.09375,4.97592363 0.4900857 1.9375 2.0625,4.99397728 0.24533837 1.96875 2.03125,5 0 2 2,5.00602272 -0.24533837 2.03125 1.96875,5.02407637 -0.4900857 2.0625 1.9375,5.05411745 -0.73365237 2.09375 1.90625,5.0960736 -0.97545161 2.125 1.875,5.14984373 -1.2149009 2.15625 1.84375,5.21529832 -1.45142339 2.1875 1.8125,5.29227967 -1.68444927 2.21875 1.78125,5.38060234 -1.91341716 2.25 1.75,5.48005353 -2.13777547 2.28125 1.71875,5.59039368 -2.35698368 2.3125 1.6875,5.71135695 -2.57051372 2.34375 1.65625,5.84265194 -2.77785117 2.375 1.625,5.98396234 -2.97849652 2.40625 1.59375,6.13494773 -3.17196642 2.4375 1.5625,6.29524437 -3.35779477 2.46875 1.53125,6.46446609 -3.53553391 2.5 1.5,6.64220523 -3.70475563 2.53125 1.46875,6.82803358 -3.86505227 2.5625 1.4375,7.02150348 -4.01603766 2.59375 1.40625,7.22214883 -4.15734806 2.625 1.375,7.42948628 -4.28864305 2.65625 1.34375,7.64301632 -4.40960632 2.6875 1.3125,7.86222453 -4.51994647 2.71875 1.28125,8.08658284 -4.61939766 2.75 1.25,8.31555073 -4.70772033 2.78125 1.21875,8.54857661 -4.78470168 2.8125 1.1875,8.7850991 -4.85015627 2.84375 1.15625,9.02454839 -4.9039264 2.875 1.125,9.26634763 -4.94588255 2.90625 1.09375,9.5099143 -4.97592363 2.9375 1.0625,9.75466163 -4.99397728 2.96875 1.03125,10 -5 3 1,10.24533837 -4.99397728 3.03125 0.96875,10.4900857 -4.97592363 3.0625 0.9375,10.73365237 -4.94588255 3.09375 0.90625,10.97545161 -4.9039264 3.125 0.875,11.2149009 -4.85015627 3.15625 0.84375,11.45142339 -4.78470168 3.1875 0.8125,11.68444927 -4.70772033 3.21875 0.78125,11.91341716 -4.61939766 3.25 0.75,12.13777547 -4.51994647 3.28125 0.71875,12.35698368 -4.40960632 3.3125 0.6875,12.57051372 -4.28864305 3.34375 0.65625,12.77785117 -4.15734806 3.375 0.625,12.97849652 -4.01603766 3.40625 0.59375,13.17196642 -3.86505227 3.4375 0.5625,13.35779477 -3.70475563 3.46875 0.53125,13.53553391 -3.53553391 3.5 0.5,13.70475563 -3.35779477 3.53125 0.46875,13.86505227 -3.17196642 3.5625 0.4375,14.01603766 -2.97849652 3.59375 0.40625,14.15734806 -2.77785117 3.625 0.375,14.28864305 -2.57051372 3.65625 0.34375,14.40960632 -2.35698368 3.6875 0.3125,14.51994647 -2.13777547 3.71875 0.28125,14.61939766 -1.91341716 3.75 0.25,14.70772033 -1.68444927 3.78125 0.21875,14.78470168 -1.45142339 3.8125 0.1875,14.85015627 -1.2149009 3.84375 0.15625,14.9039264 -0.97545161 3.875 0.125,14.94588255 -0.73365237 3.90625 0.09375,14.97592363 -0.4900857 3.9375 0.0625,14.99397728 -0.24533837 3.96875 0.03125,15 0 4 0) astext01|CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731) astext01|CIRCULARSTRING(-5 0,0 5,5 0,10 -5,15 0) astext02|CIRCULARSTRING M (0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2) astext02|CIRCULARSTRING M (-5 0 4,0 5 3,5 0 2,10 -5 1,15 0 0) astext03|CIRCULARSTRING Z (0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1) astext03|CIRCULARSTRING Z (-5 0 0,0 5 1,5 0 2,10 -5 3,15 0 4) astext04|CIRCULARSTRING ZM (0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2) astext04|CIRCULARSTRING ZM (-5 0 0 4,0 5 1 3,5 0 2 2,10 -5 3 1,15 0 4 0) asewkt01|CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731) asewkt01|CIRCULARSTRING(-5 0,0 5,5 0,10 -5,15 0) asewkt02|CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2) asewkt02|CIRCULARSTRINGM(-5 0 4,0 5 3,5 0 2,10 -5 1,15 0 0) asewkt03|CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1) asewkt03|CIRCULARSTRING(-5 0 0,0 5 1,5 0 2,10 -5 3,15 0 4) asewkt04|CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2) asewkt04|CIRCULARSTRING(-5 0 0 4,0 5 1 3,5 0 2 2,10 -5 3 1,15 0 4 0) ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. dimension01|1 dimension01|1 dimension02|1 dimension02|1 dimension03|1 dimension03|1 dimension04|1 dimension04|1 SRID01|0 SRID01|0 SRID02|0 SRID02|0 SRID03|0 SRID03|0 SRID04|0 SRID04|0 ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. envelope01|POLYGON((0 0,0 1.41421356,0.58578644 1.41421356,0.58578644 0,0 0)) envelope01|POLYGON((-5 -5,-5 5,15 5,15 -5,-5 -5)) envelope02|POLYGON((0 0,0 1.41421356,0.58578644 1.41421356,0.58578644 0,0 0)) envelope02|POLYGON((-5 -5,-5 5,15 5,15 -5,-5 -5)) envelope03|POLYGON((0 0,0 1.41421356,0.58578644 1.41421356,0.58578644 0,0 0)) envelope03|POLYGON((-5 -5,-5 5,15 5,15 -5,-5 -5)) envelope04|POLYGON((0 0,0 1.41421356,0.58578644 1.41421356,0.58578644 0,0 0)) envelope04|POLYGON((-5 -5,-5 5,15 5,15 -5,-5 -5)) public.circularstring.the_geom_4d effectively removed. public.circularstring.the_geom_3dz effectively removed. public.circularstring.the_geom_3dm effectively removed. public.circularstring.the_geom_2d effectively removed. POLYGON((220187.3821 150406.4347,220187.3821 150506.7171,220288.8159 150506.7171,220288.8159 150406.4347,220187.3821 150406.4347)) npoints_is_five|5 straight_curve|LINESTRING(0 0,1 0,2 0,3 0,4 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/long_xact.sql�������������������������������������������������������0000644�0000000�0000000�00000002615�11722777314�017750� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� SELECT EnableLongTransactions(); CREATE TABLE test_locks (id numeric, state varchar); INSERT INTO test_locks(id) VALUES (1); INSERT INTO test_locks(id) VALUES (2); INSERT INTO test_locks(id) VALUES (3); -- Enable locks checking on the table SELECT CheckAuth('test_locks', 'id'); -- this has no lock UPDATE test_locks SET state = 'nolocks'; -- place the lock SELECT LockRow('test_locks', '1', 'auth1', now()::timestamp+'00:01'); SELECT LockRow('test_locks', '2', 'auth2', now()::timestamp+'00:01'); -- this should fail due to missing auth UPDATE test_locks SET state = 'unauthorized' where id = 1; BEGIN; -- Add authorization for row 1 SELECT AddAuth('auth1'); -- we're authorized for row 1 UPDATE test_locks SET state = 'authorized' where id = 1; END; -- Out of transaction we're no more authorized for row 1 UPDATE test_locks SET state = 'unauthorized' where id = 1; BEGIN; -- Add authorization for row 2 SELECT AddAuth('auth2'); -- we're authorized for row 2 UPDATE test_locks SET state = 'authorized' where id = 2; END; BEGIN; -- Add authorization for row 2 SELECT AddAuth('auth2'); -- we're *not* authorized for row 1 UPDATE test_locks SET state = 'unauthorized' where id = 1; END; UPDATE test_locks SET state = 'unauthorized' where id = 2; UPDATE test_locks SET state = 'unauthorized' where id = 1; SELECT * from test_locks; DROP TABLE test_locks; SELECT DisableLongTransactions(); �������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/setpoint.sql��������������������������������������������������������0000644�0000000�0000000�00000002502�11722777314�017632� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat all tests with new function names. -- Out of range indexes SELECT ST_SetPoint('LINESTRING(0 0, 1 1, 2 2)', 3, 'POINT(9 9)'); SELECT ST_SetPoint('LINESTRING(0 0, 1 1, 2 2)', -1, 'POINT(9 9)'); -- Invalid inputs SELECT ST_SetPoint('MULTIPOINT(0 0, 1 1, 2 2)', 3, 'POINT(9 9)'); SELECT ST_SetPoint('LINESTRING(0 0, 1 1, 2 2)', -1, 'MULTIPOINT(9 9, 0 0)'); -- Replacing 3dz line with 3dm point SELECT ST_asewkt(ST_SetPoint('LINESTRING(-1 -1 -1, 1 1 1, 2 2 2)', 0, 'POINT(90 91 92)')); -- Replacing 3dm line with 3dz point SELECT ST_asewkt(ST_SetPoint('LINESTRINGM(0 0 0, 1 1 1, 2 2 2)', 1, 'POINTM(90 91 92)')); -- Replacing 3dm line with 4d point SELECT ST_asewkt(ST_SetPoint('LINESTRINGM(0 0 0, 1 1 1, 2 2 2)', 2, 'POINT(90 91 92 93)')); -- Replacing 3dz line with 4d point SELECT ST_asewkt(ST_SetPoint('LINESTRING(0 0 0, 1 1 1, 2 2 2)', 1, 'POINT(90 91 92 93)')); -- Replacing 4d line with 2d/3dm/3dz/4d point SELECT ST_asewkt(ST_SetPoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 4 4 4 4)', 3, 'POINT(90 91)')); SELECT ST_asewkt(ST_SetPoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 4 4 4 4)', 2, 'POINT(90 91 92)')); SELECT ST_asewkt(ST_SetPoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 4 4 4 4)', 1, 'POINTM(90 91 92)')); SELECT ST_asewkt(ST_SetPoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 4 4 4 4)', 0, 'POINT(90 91 92 93)')); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_ogc_cover.sql�����������������������������������������������0000755�0000000�0000000�00000005342�11722777314�021475� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- Tests for GEOS/JTS implemented functions --- supported by GEOS 3.0 and upwards --- SELECT 'covers100', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(1 10, 9 10, 9 8)'); SELECT 'covers101', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(1 10, 10 10, 10 8)'); -- PIP - point within polygon SELECT 'covers102', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'); -- PIP - point on vertex of polygon SELECT 'covers103', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'); -- PIP - point outside polygon SELECT 'covers104', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'); -- PIP - point on edge of polygon SELECT 'covers105', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'); -- PIP - point in line with polygon edge SELECT 'covers106', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)'); -- PIP - point vertically aligned with polygon vertex SELECT 'covers107', ST_Covers(ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631), ST_GeomFromText('POINT(521513 5377804)', 32631)); -- PIP - repeated vertex SELECT 'covers108', ST_Covers(ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631), ST_GeomFromText('POINT(521513 5377804)', 32631)); -- CoveredBy cases SELECT 'coveredby100', ST_CoveredBy('LINESTRING(1 10, 9 10, 9 8)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); SELECT 'coveredby101', ST_CoveredBy('LINESTRING(1 10, 10 10, 10 8)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point within polygon SELECT 'coveredby102', ST_CoveredBy('POINT(5 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on vertex of polygon SELECT 'coveredby103', ST_CoveredBy('POINT(0 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point outside polygon SELECT 'coveredby104', ST_CoveredBy('POINT(-1 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on edge of polygon SELECT 'coveredby105', ST_CoveredBy('POINT(0 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point in line with polygon edge SELECT 'coveredby106', ST_CoveredBy('POINT(0 12)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point vertically aligned with polygon vertex SELECT 'coveredby107', ST_CoveredBy(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'coveredby108', ST_CoveredBy(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/bestsrid.sql��������������������������������������������������������0000644�0000000�0000000�00000001331�11722777314�017603� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- South lambert select x, y, _ST_BestSRID(ST_Point(x, y)) from ( select 0 as x, -70 as y ) as foo ; -- North lambert select x, y, _ST_BestSRID(ST_Point(x, y)) from ( select 0 as x, 70 as y ) as foo ; -- UTM north select x, 60, _ST_BestSRID(ST_Point(x, 60)) from generate_series(-177, 177, 6) as x ; -- Corner cases select -180, 60, _ST_BestSRID(ST_Point(-180, 60)); select 180, 60, _ST_BestSRID(ST_Point(180, 60)); -- UTM south select x, -60, _ST_BestSRID(ST_Point(x, -60)) from generate_series(-177, 177, 6) as x; -- Corner cases select -180, -60, _ST_BestSRID(ST_Point(-180, -60)); select 180, -60, _ST_BestSRID(ST_Point(180, -60)); -- World mercator select 'world', _ST_BestSRID(ST_Point(-160, -40), ST_Point(160, 40)); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/ctors.sql�����������������������������������������������������������0000644�0000000�0000000�00000001665�11722777314�017130� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat all tests with the new function names. -- postgis-users/2006-July/012764.html SELECT ST_SRID(ST_Collect('SRID=32749;POINT(0 0)', 'SRID=32749;POINT(1 1)')); SELECT ST_Collect('SRID=32749;POINT(0 0)', 'SRID=32740;POINT(1 1)'); select ST_asewkt(ST_makeline('SRID=3;POINT(0 0)', 'SRID=3;POINT(1 1)')); select ST_makeline('POINT(0 0)', 'SRID=3;POINT(1 1)'); select 'ST_MakeLine1', ST_AsText(ST_MakeLine( 'POINT(0 0)'::geometry, 'LINESTRING(1 1, 10 0)'::geometry )); select 'ST_MakeLine_agg1', ST_AsText(ST_MakeLine(g)) from ( values ('POINT(0 0)'), ('LINESTRING(1 1, 10 0)'), ('LINESTRING(10 0, 20 20)'), ('POINT(40 4)') ) as foo(g); -- postgis-users/2006-July/012788.html select ST_makebox2d('SRID=3;POINT(0 0)', 'SRID=3;POINT(1 1)'); select ST_makebox2d('POINT(0 0)', 'SRID=3;POINT(1 1)'); select ST_3DMakeBox('SRID=3;POINT(0 0)', 'SRID=3;POINT(1 1)'); select ST_3DMakeBox('POINT(0 0)', 'SRID=3;POINT(1 1)'); ���������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_geojson_expected�������������������������������������������������0000644�0000000�0000000�00000000624�12314516156�021176� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������geomfromgeojson_01|MULTIPOINT(1 1,1 1) geomfromgeojson_02|MULTIPOINT(1 1,1 1) geomfromgeojson_03|POINT(1 1) geomfromgeojson_04|LINESTRING(0 0,1 1) geomfromgeojson_05|POLYGON((0 0,1 1,1 0,0 0)) geomfromgeojson_06|MULTIPOLYGON(((0 0,1 1,1 0,0 0))) #1434: Next two errors ERROR: Unable to find 'coordinates' in GeoJSON string ERROR: unexpected character (at offset 0) #2130|8 #2216|30 #2619|POLYGON EMPTY ������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/out_geometry.sql����������������������������������������������������0000644�0000000�0000000�00000020051�12031354162�020470� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- spatial_ref_sys data -- DELETE FROM "spatial_ref_sys"; INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","proj4text") VALUES (4326,'EPSG',4326,'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); --- EPSG 1021892 : Bogota 1975 / Colombia Bogota zone (deprecated) INSERT INTO "spatial_ref_sys" ("srid", "proj4text") VALUES (102189, '+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); -- -- GML -- -- Empty Geometry SELECT 'gml_empty_geom', ST_AsGML(GeomFromEWKT(NULL)); -- Precision SELECT 'gml_precision_01', ST_AsGML(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2); SELECT 'gml_precision_02', ST_AsGML(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19); -- Version SELECT 'gml_version_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 1)')); SELECT 'gml_version_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)')); SELECT 'gml_version_03', ST_AsGML(21, GeomFromEWKT('SRID=4326;POINT(1 1)')); SELECT 'gml_version_04', ST_AsGML(-4, GeomFromEWKT('SRID=4326;POINT(1 1)')); -- Option SELECT 'gml_option_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 0); SELECT 'gml_option_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 1); SELECT 'gml_option_03', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2); -- Deegree data SELECT 'gml_deegree_01', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0); SELECT 'gml_deegree_02', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16); SELECT 'gml_deegree_03', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16); SELECT 'gml_deegree_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0); SELECT 'gml_deegree_05', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16); SELECT 'gml_deegree_06', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16); -- Prefix SELECT 'gml_prefix_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, ''); SELECT 'gml_prefix_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, ''); SELECT 'gml_prefix_03', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo'); SELECT 'gml_prefix_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo'); -- LineString SELECT 'gml_shortline_01', ST_AsGML(3, GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 6, ''); SELECT 'gml_shortline_02', ST_AsGML(3, GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 2, ''); SELECT 'gml_shortline_03', ST_AsGML(3, GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 6, ''); SELECT 'gml_shortline_04', ST_AsGML(3, GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 2, ''); -- -- KML -- -- SRID SELECT 'kml_srid_01', ST_AsKML(GeomFromEWKT('SRID=10;POINT(0 1)')); SELECT 'kml_srid_02', ST_AsKML(GeomFromEWKT('POINT(0 1)')); -- Empty Geometry SELECT 'kml_empty_geom', ST_AsKML(GeomFromEWKT(NULL)); -- Precision SELECT 'kml_precision_01', ST_AsKML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2); SELECT 'kml_precision_02', ST_AsKML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19); -- Version SELECT 'kml_version_01', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 1)')); SELECT 'kml_version_02', ST_AsKML(3, GeomFromEWKT('SRID=4326;POINT(1 1)')); SELECT 'kml_version_03', ST_AsKML(-4, GeomFromEWKT('SRID=4326;POINT(1 1)')); -- Prefix SELECT 'kml_prefix_01', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, ''); SELECT 'kml_prefix_02', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 'kml'); -- Projected -- National Astronomical Observatory of Colombia - Bogota, Colombia (Placemark) SELECT 'kml_projection_01', ST_AsKML(ST_GeomFromEWKT('SRID=102189;POINT(1000000 1000000)'), 3); -- -- SVG -- -- Empty Geometry SELECT 'svg_empty_geom', ST_AsSVG(GeomFromEWKT(NULL)); -- Option SELECT 'svg_option_01', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0); SELECT 'svg_option_02', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1); SELECT 'svg_option_03', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0, 0); SELECT 'svg_option_04', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1, 0); -- Precision SELECT 'svg_precision_01', ST_AsSVG(GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, -2); SELECT 'svg_precision_02', ST_AsSVG(GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, 19); -- -- GeoJson -- -- Empty Geometry SELECT 'geojson_empty_geom', ST_AsGeoJson(GeomFromEWKT(NULL)); -- Precision SELECT 'geojson_precision_01', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2); SELECT 'geojson_precision_02', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19); -- Version SELECT 'geojson_version_01', ST_AsGeoJson(1, GeomFromEWKT('SRID=4326;POINT(1 1)')); SELECT 'geojson_version_02', ST_AsGeoJson(21, GeomFromEWKT('SRID=4326;POINT(1 1)')); SELECT 'geojson_version_03', ST_AsGeoJson(-4, GeomFromEWKT('SRID=4326;POINT(1 1)')); -- CRS SELECT 'geojson_crs_01', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2); SELECT 'geojson_crs_02', ST_AsGeoJson(GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 2); SELECT 'geojson_crs_03', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 4); SELECT 'geojson_crs_04', ST_AsGeoJson(GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 4); SELECT 'geojson_crs_05', ST_AsGeoJson(GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 2); SELECT 'geojson_crs_06', ST_AsGeoJson(GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 4); -- Bbox SELECT 'geojson_bbox_01', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0); SELECT 'geojson_bbox_02', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1); SELECT 'geojson_bbox_03', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3); SELECT 'geojson_bbox_04', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5); -- CRS and Bbox SELECT 'geojson_options_01', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 0); SELECT 'geojson_options_02', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0); SELECT 'geojson_options_03', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1); SELECT 'geojson_options_04', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1); SELECT 'geojson_options_05', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2); SELECT 'geojson_options_06', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2); SELECT 'geojson_options_07', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3); SELECT 'geojson_options_08', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3); SELECT 'geojson_options_09', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4); SELECT 'geojson_options_10', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4); SELECT 'geojson_options_11', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5); SELECT 'geojson_options_12', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5); SELECT 'geojson_options_13', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6); SELECT 'geojson_options_14', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6); SELECT 'geojson_options_15', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7); SELECT 'geojson_options_16', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7); -- Out and in to PostgreSQL native geometric types WITH p AS ( SELECT '((0,0),(0,1),(1,1),(1,0),(0,0))'::text AS p ) SELECT 'pgcast_01', p = p::polygon::geometry::polygon::text FROM p; WITH p AS ( SELECT '[(0,0),(1,1)]'::text AS p ) SELECT 'pgcast_02', p = p::path::geometry::path::text FROM p; WITH p AS ( SELECT '(1,1)'::text AS p ) SELECT 'pgcast_03', p = p::point::geometry::point::text FROM p; SELECT 'pgcast_03','POLYGON EMPTY'::geometry::polygon IS NULL; SELECT 'pgcast_04','LINESTRING EMPTY'::geometry::path IS NULL; SELECT 'pgcast_05','POINT EMPTY'::geometry::point IS NULL; SELECT 'pgcast_06',ST_AsText('((0,0),(0,1),(1,1),(1,0))'::polygon::geometry); -- -- Delete inserted spatial data -- DELETE FROM spatial_ref_sys; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/postgis_type_name_expected������������������������������������������0000644�0000000�0000000�00000007421�11722777314�022606� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0)| POINT(1)| POINT(2)|Point POINT(3)|PointZ POINT(4)|PointZM POINT(5)| POINTM(2)| POINTM(3)|PointM POINTZ(3)|PointZ POINTZM(3)| POINTZM(4)|PointZM LINESTRING(0)| LINESTRING(1)| LINESTRING(2)|LineString LINESTRING(3)|LineStringZ LINESTRING(4)|LineStringZM LINESTRING(5)| LINESTRINGM(2)| LINESTRINGM(3)|LineStringM LINESTRINGZ(3)|LineStringZ LINESTRINGZM(3)| LINESTRINGZM(4)|LineStringZM POLYGON(0)| POLYGON(1)| POLYGON(2)|Polygon POLYGON(3)|PolygonZ POLYGON(4)|PolygonZM POLYGON(5)| POLYGONM(2)| POLYGONM(3)|PolygonM POLYGONZ(3)|PolygonZ POLYGONZM(3)| POLYGONZM(4)|PolygonZM MULTIPOINT(0)| MULTIPOINT(1)| MULTIPOINT(2)|MultiPoint MULTIPOINT(3)|MultiPointZ MULTIPOINT(4)|MultiPointZM MULTIPOINT(5)| MULTIPOINTM(2)| MULTIPOINTM(3)|MultiPointM MULTIPOINTZ(3)|MultiPointZ MULTIPOINTZM(3)| MULTIPOINTZM(4)|MultiPointZM MULTILINESTRING(0)| MULTILINESTRING(1)| MULTILINESTRING(2)|MultiLineString MULTILINESTRING(3)|MultiLineStringZ MULTILINESTRING(4)|MultiLineStringZM MULTILINESTRING(5)| MULTILINESTRINGM(2)| MULTILINESTRINGM(3)|MultiLineStringM MULTILINESTRINGZ(3)|MultiLineStringZ MULTILINESTRINGZM(3)| MULTILINESTRINGZM(4)|MultiLineStringZM MULTIPOLYGON(0)| MULTIPOLYGON(1)| MULTIPOLYGON(2)|MultiPolygon MULTIPOLYGON(3)|MultiPolygonZ MULTIPOLYGON(4)|MultiPolygonZM MULTIPOLYGON(5)| MULTIPOLYGONM(2)| MULTIPOLYGONM(3)|MultiPolygonM MULTIPOLYGONZ(3)|MultiPolygonZ MULTIPOLYGONZM(3)| MULTIPOLYGONZM(4)|MultiPolygonZM GEOMETRYCOLLECTION(0)| GEOMETRYCOLLECTION(1)| GEOMETRYCOLLECTION(2)|GeometryCollection GEOMETRYCOLLECTION(3)|GeometryCollectionZ GEOMETRYCOLLECTION(4)|GeometryCollectionZM GEOMETRYCOLLECTION(5)| GEOMETRYCOLLECTIONM(2)| GEOMETRYCOLLECTIONM(3)|GeometryCollectionM GEOMETRYCOLLECTIONZ(3)|GeometryCollectionZ GEOMETRYCOLLECTIONZM(3)| GEOMETRYCOLLECTIONZM(4)|GeometryCollectionZM CIRCULARSTRING(0)| CIRCULARSTRING(1)| CIRCULARSTRING(2)|CircularString CIRCULARSTRING(3)|CircularStringZ CIRCULARSTRING(4)|CircularStringZM CIRCULARSTRING(5)| CIRCULARSTRINGM(2)| CIRCULARSTRINGM(3)|CircularStringM CIRCULARSTRINGZ(3)|CircularStringZ CIRCULARSTRINGZM(3)| CIRCULARSTRINGZM(4)|CircularStringZM COMPOUNDCURVE(0)| COMPOUNDCURVE(1)| COMPOUNDCURVE(2)|CompoundCurve COMPOUNDCURVE(3)|CompoundCurveZ COMPOUNDCURVE(4)|CompoundCurveZM COMPOUNDCURVE(5)| COMPOUNDCURVEM(2)| COMPOUNDCURVEM(3)|CompoundCurveM COMPOUNDCURVEZ(3)|CompoundCurveZ COMPOUNDCURVEZM(3)| COMPOUNDCURVEZM(4)|CompoundCurveZM CURVEPOLYGON(0)| CURVEPOLYGON(1)| CURVEPOLYGON(2)|CurvePolygon CURVEPOLYGON(3)|CurvePolygonZ CURVEPOLYGON(4)|CurvePolygonZM CURVEPOLYGON(5)| CURVEPOLYGONM(2)| CURVEPOLYGONM(3)|CurvePolygonM CURVEPOLYGONZ(3)|CurvePolygonZ CURVEPOLYGONZM(3)| CURVEPOLYGONZM(4)|CurvePolygonZM MULTICURVE(0)| MULTICURVE(1)| MULTICURVE(2)|MultiCurve MULTICURVE(3)|MultiCurveZ MULTICURVE(4)|MultiCurveZM MULTICURVE(5)| MULTICURVEM(2)| MULTICURVEM(3)|MultiCurveM MULTICURVEZ(3)|MultiCurveZ MULTICURVEZM(3)| MULTICURVEZM(4)|MultiCurveZM MULTISURFACE(0)| MULTISURFACE(1)| MULTISURFACE(2)|MultiSurface MULTISURFACE(3)|MultiSurfaceZ MULTISURFACE(4)|MultiSurfaceZM MULTISURFACE(5)| MULTISURFACEM(2)| MULTISURFACEM(3)|MultiSurfaceM MULTISURFACEZ(3)|MultiSurfaceZ MULTISURFACEZM(3)| MULTISURFACEZM(4)|MultiSurfaceZM POLYHEDRALSURFACE(0)| POLYHEDRALSURFACE(1)| POLYHEDRALSURFACE(2)|PolyhedralSurface POLYHEDRALSURFACE(3)|PolyhedralSurfaceZ POLYHEDRALSURFACE(4)|PolyhedralSurfaceZM POLYHEDRALSURFACE(5)| POLYHEDRALSURFACEM(2)| POLYHEDRALSURFACEM(3)|PolyhedralSurfaceM POLYHEDRALSURFACEZ(3)|PolyhedralSurfaceZ POLYHEDRALSURFACEZM(3)| POLYHEDRALSURFACEZM(4)|PolyhedralSurfaceZM TRIANGLE(0)| TRIANGLE(1)| TRIANGLE(2)|Triangle TRIANGLE(3)|TriangleZ TRIANGLE(4)|TriangleZM TRIANGLE(5)| TRIANGLEM(2)| TRIANGLEM(3)|TriangleM TRIANGLEZ(3)|TriangleZ TRIANGLEZM(3)| TRIANGLEZM(4)|TriangleZM TIN(0)| TIN(1)| TIN(2)|Tin TIN(3)|TinZ TIN(4)|TinZM TIN(5)| TINM(2)| TINM(3)|TinM TINZ(3)|TinZ TINZM(3)| TINZM(4)|TinZM �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/remove_repeated_points_expected�������������������������������������0000644�0000000�0000000�00000001562�11722777314�023617� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|GEOMETRYCOLLECTION EMPTY 1|LINESTRING(0 0,1 1,2 2) 2|LINESTRING(0 0,1 1,2 2,3 3) 3|MULTILINESTRING((0 0,1 1,2 2,3 3),(5 5,4 4,2 2)) 4|POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,5 8,8 8,8 5,5 5)) 5|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(5 5,5 8,8 8,8 5,5 5)),((50 50,50 60,60 60,60 50,50 50),(55 55,55 58,58 58,58 55,55 55))) 6|MULTIPOINT(0 0,10 0,10 10,0 10,5 5,5 8,8 8,8 5,50 50,50 60,60 60,60 50,55 55,55 58,58 58,58 55) 7|GEOMETRYCOLLECTION(MULTIPOINT(0 0,10 0,10 10,0 10,5 5,5 8,8 8,8 5,50 50,50 60,60 60,60 50,55 55,55 58,58 58,58 55),MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(5 5,5 8,8 8,8 5,5 5)),((50 50,50 60,60 60,60 50,50 50),(55 55,55 58,58 58,58 55,55 55)))) 8|POINT(0 0) 9|CURVEPOLYGON ZM (CIRCULARSTRING ZM (-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)) 10|LINESTRING(0 0,0 0) 11|LINESTRING(0 0,0 0) 12|3 ����������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_lots_of_points.sql������������������������������������������0000644�0000000�0000000�00006456726�11722777314�022613� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Selected TOC Entries: -- --\connect - postgres -- -- TOC Entry ID 2 (OID 2231457) -- -- Name: tp Type: TABLE Owner: postgres -- CREATE TABLE "test" ( "num" integer, "the_geom" geometry ); -- -- Data for TOC Entry ID 4 (OID 2231457) -- -- Name: test Type: TABLE DATA Owner: postgres -- COPY "test" FROM stdin; 1 POINT(529.522339 509.260284) 2 POINT(395.286469 439.218109) 3 POINT(256.897461 933.949463) 4 POINT(858.407227 376.056793) 5 POINT(874.127441 590.393066) 6 POINT(89.7492599 147.736084) 7 POINT(442.507019 203.160858) 8 POINT(869.419617 319.564026) 9 POINT(369.667938 854.579529) 10 POINT(625.970459 634.936584) 11 POINT(160.237854 572.313843) 12 POINT(533.778259 425.699402) 13 POINT(70.7681427 59.0499611) 14 POINT(456.203918 316.867035) 15 POINT(487.985504 227.854019) 16 POINT(15.6864548 151.627457) 17 POINT(805.557251 642.271484) 18 POINT(171.157104 642.490112) 19 POINT(27.0936012 471.952881) 20 POINT(685.52771 995.069519) 21 POINT(636.300171 366.650177) 22 POINT(518.584351 583.002197) 23 POINT(391.425781 943.545532) 24 POINT(933.597107 247.156967) 25 POINT(390.925262 860.404541) 26 POINT(362.658081 411.535095) 27 POINT(869.217346 710.966675) 28 POINT(442.631287 554.604431) 29 POINT(892.311035 995.895752) 30 POINT(170.208176 641.43573) 31 POINT(187.791443 974.74054) 32 POINT(593.605286 542.697266) 33 POINT(345.200806 339.55365) 34 POINT(575.739075 765.7323) 35 POINT(222.356308 932.557617) 36 POINT(848.211487 665.628845) 37 POINT(579.872559 487.636871) 38 POINT(199.206207 746.059814) 39 POINT(307.483887 953.196899) 40 POINT(276.630066 397.010101) 41 POINT(497.199127 962.419067) 42 POINT(168.852448 36.231514) 43 POINT(533.502136 582.129639) 44 POINT(880.64502 850.915039) 45 POINT(111.491386 484.993561) 46 POINT(735.975647 293.807495) 47 POINT(39.9166756 58.7662239) 48 POINT(999.857483 932.61261) 49 POINT(45.5253296 863.740234) 50 POINT(959.319519 832.424561) 51 POINT(854.110107 963.785278) 52 POINT(882.690552 158.176239) 53 POINT(196.411133 441.601105) 54 POINT(683.849121 298.317291) 55 POINT(265.94989 334.710205) 56 POINT(454.077301 353.451111) 57 POINT(561.470764 30.6613731) 58 POINT(941.993774 16.3724918) 59 POINT(77.5689087 88.8750763) 60 POINT(418.167786 545.397156) 61 POINT(890.048096 529.13501) 62 POINT(465.009918 944.22467) 63 POINT(322.465424 875.14801) 64 POINT(97.0867386 492.616272) 65 POINT(910.183289 963.7052) 66 POINT(207.936295 197.31337) 67 POINT(209.201889 539.257324) 68 POINT(825.718689 466.910248) 69 POINT(368.34137 529.272095) 70 POINT(663.685425 663.48761) 71 POINT(112.364845 232.291641) 72 POINT(297.692535 94.0059509) 73 POINT(15.8924809 308.510498) 74 POINT(270.134521 312.656891) 75 POINT(407.081543 817.922729) 76 POINT(989.183105 289.122101) 77 POINT(977.798828 745.243896) 78 POINT(398.649353 425.151855) 79 POINT(823.27063 641.124634) 80 POINT(674.842346 581.842346) 81 POINT(646.971802 618.490234) 82 POINT(253.296005 111.872078) 83 POINT(781.938171 909.641663) 84 POINT(94.1186676 414.797363) 85 POINT(362.020111 218.138672) 86 POINT(507.064301 179.96254) 87 POINT(868.212463 909.181519) 88 POINT(26.4167004 321.948883) 89 POINT(646.617737 658.566467) 90 POINT(654.747864 609.674194) 91 POINT(194.44397 24.2893448) 92 POINT(389.99762 244.805862) 93 POINT(715.478027 783.107971) 94 POINT(871.696228 651.228149) 95 POINT(911.579651 69.0827866) 96 POINT(492.212769 628.694275) 97 POINT(284.928619 910.137878) 98 POINT(633.473633 824.917297) 99 POINT(538.15387 745.505493) 100 POINT(227.610672 356.23938) 101 POINT(465.339355 750.634338) 102 POINT(473.531311 913.34314) 103 POINT(93.6205826 141.483429) 104 POINT(845.651611 21.5087605) 105 POINT(658.162903 187.436737) 106 POINT(34.3182144 371.598846) 107 POINT(246.384415 57.3447266) 108 POINT(891.209961 525.804382) 109 POINT(932.106506 248.016647) 110 POINT(1.82721663 449.375732) 111 POINT(816.771362 606.089478) 112 POINT(58.7394943 484.879517) 113 POINT(310.959473 525.43103) 114 POINT(604.393127 718.381714) 115 POINT(11.3119183 971.574158) 116 POINT(994.921875 477.39679) 117 POINT(769.861267 506.22818) 118 POINT(103.62957 629.126587) 119 POINT(707.093689 428.400116) 120 POINT(534.815002 735.731567) 121 POINT(507.30011 749.42865) 122 POINT(108.71212 183.041397) 123 POINT(953.570923 728.273743) 124 POINT(462.961151 482.765167) 125 POINT(236.891907 627.30542) 126 POINT(604.784973 799.065002) 127 POINT(614.10437 739.830933) 128 POINT(653.612915 752.099854) 129 POINT(825.996338 386.538757) 130 POINT(302.089417 978.24292) 131 POINT(730.634583 792.396606) 132 POINT(363.177429 194.168549) 133 POINT(597.484497 617.422119) 134 POINT(284.481995 425.549164) 135 POINT(762.276917 518.875) 136 POINT(523.176575 66.9992676) 137 POINT(6.48108578 829.148376) 138 POINT(964.331177 875.055359) 139 POINT(322.258026 118.944748) 140 POINT(113.46582 337.93515) 141 POINT(205.660645 720.806152) 142 POINT(35.3510551 982.735596) 143 POINT(417.496765 870.957458) 144 POINT(83.149025 581.398621) 145 POINT(220.687103 910.568237) 146 POINT(455.751678 300.608704) 147 POINT(481.265717 409.41687) 148 POINT(830.572266 147.828125) 149 POINT(71.6415787 339.654633) 150 POINT(491.154816 526.585571) 151 POINT(681.751404 754.640564) 152 POINT(953.975525 900.204773) 153 POINT(196.792725 303.006165) 154 POINT(500.045685 936.300659) 155 POINT(87.9647598 332.184357) 156 POINT(840.825256 667.124817) 157 POINT(961.821106 75.2038727) 158 POINT(454.100037 146.37355) 159 POINT(279.336639 251.834717) 160 POINT(676.547424 445.163666) 161 POINT(870.61676 398.02298) 162 POINT(151.547668 132.958466) 163 POINT(896.464417 929.451843) 164 POINT(622.324951 298.315643) 165 POINT(333.02771 675.110474) 166 POINT(703.802368 735.10437) 167 POINT(447.860291 729.672485) 168 POINT(236.819305 848.583374) 169 POINT(490.443542 579.627563) 170 POINT(153.909836 709.363037) 171 POINT(411.183929 683.458252) 172 POINT(698.121216 229.328644) 173 POINT(651.857849 922.299622) 174 POINT(19.9349766 770.245361) 175 POINT(297.32428 491.701111) 176 POINT(19.9306946 381.786987) 177 POINT(351.059387 50.1675148) 178 POINT(147.229568 950.540894) 179 POINT(881.829651 964.575256) 180 POINT(249.911774 615.186462) 181 POINT(899.86084 750.436829) 182 POINT(500.593018 46.1798172) 183 POINT(250.566772 766.050354) 184 POINT(588.363281 422.200104) 185 POINT(582.781555 619.171143) 186 POINT(430.65802 872.230225) 187 POINT(655.122498 833.958313) 188 POINT(471.791229 644.001465) 189 POINT(315.357513 121.179657) 190 POINT(508.403992 549.787598) 191 POINT(428.345428 128.231583) 192 POINT(928.664917 212.98024) 193 POINT(671.261597 115.297905) 194 POINT(237.520859 67.9280243) 195 POINT(371.556854 423.40802) 196 POINT(933.583069 866.215759) 197 POINT(672.672974 448.365417) 198 POINT(826.416626 920.559814) 199 POINT(92.3428497 706.224487) 200 POINT(61.2721634 419.093719) 201 POINT(633.843262 331.552307) 202 POINT(729.982422 704.923584) 203 POINT(745.473328 365.096222) 204 POINT(473.285065 415.991638) 205 POINT(649.565491 604.290955) 206 POINT(855.798279 186.653122) 207 POINT(509.375854 765.507568) 208 POINT(157.961594 233.746719) 209 POINT(28.2574139 663.918884) 210 POINT(170.284576 485.725342) 211 POINT(916.724731 993.81488) 212 POINT(388.160004 3.65970182) 213 POINT(83.6323547 793.241333) 214 POINT(937.372925 718.290283) 215 POINT(850.089478 521.689026) 216 POINT(561.462402 39.0765991) 217 POINT(219.434097 853.573425) 218 POINT(975.591736 641.286804) 219 POINT(612.218323 294.402802) 220 POINT(944.002502 808.129944) 221 POINT(168.47403 827.422913) 222 POINT(129.031021 589.913452) 223 POINT(985.417053 278.39328) 224 POINT(351.760437 875.009521) 225 POINT(580.21405 492.827148) 226 POINT(613.472778 272.438324) 227 POINT(605.614258 817.006897) 228 POINT(472.11322 648.172607) 229 POINT(890.397705 590.457764) 230 POINT(21.0414143 792.495605) 231 POINT(294.087982 238.061188) 232 POINT(353.625702 220.191162) 233 POINT(551.739868 204.960266) 234 POINT(545.051514 605.930298) 235 POINT(213.462387 32.8341904) 236 POINT(573.512268 61.4750023) 237 POINT(256.441864 723.595154) 238 POINT(421.298157 987.417419) 239 POINT(844.463501 583.317993) 240 POINT(729.893982 838.896057) 241 POINT(739.309082 658.100647) 242 POINT(672.857178 981.494995) 243 POINT(816.058228 853.050781) 244 POINT(199.922165 170.380341) 245 POINT(114.502861 819.796875) 246 POINT(992.532166 743.315247) 247 POINT(563.982849 676.567078) 248 POINT(555.03418 697.822388) 249 POINT(469.469574 823.304565) 250 POINT(0.405272961 636.332031) 251 POINT(641.299133 283.483917) 252 POINT(631.052368 463.214966) 253 POINT(616.344666 660.851868) 254 POINT(173.519653 447.306183) 255 POINT(259.500519 475.464935) 256 POINT(13.5329123 206.678436) 257 POINT(484.139069 136.994659) 258 POINT(460.541229 603.42511) 259 POINT(299.822662 437.783936) 260 POINT(617.716248 870.110229) 261 POINT(624.273193 282.677368) 262 POINT(966.318298 331.997162) 263 POINT(601.795471 511.93338) 264 POINT(117.62648 286.466492) 265 POINT(697.529724 477.912933) 266 POINT(119.577156 290.094757) 267 POINT(809.707458 381.701324) 268 POINT(210.31163 762.225281) 269 POINT(612.256836 903.962097) 270 POINT(421.562683 309.684082) 271 POINT(437.534393 32.3662109) 272 POINT(88.9130707 19.3708305) 273 POINT(191.659195 118.743431) 274 POINT(214.253326 553.195068) 275 POINT(99.0189209 531.13623) 276 POINT(42.1967659 753.276855) 277 POINT(862.273132 3.30790138) 278 POINT(903.849609 555.146729) 279 POINT(41.9694824 146.685394) 280 POINT(798.375061 884.156189) 281 POINT(876.22937 62.5619926) 282 POINT(728.555786 337.359039) 283 POINT(224.479675 576.616089) 284 POINT(87.4921875 432.282776) 285 POINT(6.66489649 80.026535) 286 POINT(469.245605 28.4463615) 287 POINT(175.652679 83.9040146) 288 POINT(909.343323 830.9823) 289 POINT(488.654022 424.268738) 290 POINT(467.421112 192.699738) 291 POINT(794.547485 156.857605) 292 POINT(162.840317 406.4245) 293 POINT(217.284836 883.747009) 294 POINT(936.946899 379.132233) 295 POINT(58.4469643 901.851562) 296 POINT(617.934937 699.541809) 297 POINT(860.016724 767.159729) 298 POINT(834.359375 238.37323) 299 POINT(335.180542 754.069458) 300 POINT(692.653748 282.936188) 301 POINT(592.211731 147.990555) 302 POINT(487.123444 923.262573) 303 POINT(624.116455 248.718109) 304 POINT(135.494965 734.426392) 305 POINT(622.73999 554.794189) 306 POINT(770.027344 388.40976) 307 POINT(586.572571 533.6521) 308 POINT(507.383484 468.925415) 309 POINT(540.818237 112.869041) 310 POINT(866.978516 634.647034) 311 POINT(668.776306 24.0738354) 312 POINT(307.573883 201.628906) 313 POINT(785.747192 128.313141) 314 POINT(558.782043 906.218994) 315 POINT(969.137878 100.950912) 316 POINT(694.338684 918.032532) 317 POINT(217.972168 372.063141) 318 POINT(537.054565 341.716583) 319 POINT(756.483643 37.0195084) 320 POINT(13.9722795 360.086639) 321 POINT(852.898621 869.36615) 322 POINT(460.246857 604.175842) 323 POINT(707.028564 397.718292) 324 POINT(770.588562 202.834686) 325 POINT(308.152344 829.236572) 326 POINT(339.817322 571.427063) 327 POINT(995.251038 9.12482452) 328 POINT(244.383209 292.17218) 329 POINT(410.482178 458.802094) 330 POINT(372.921265 254.693451) 331 POINT(347.464386 210.942123) 332 POINT(697.478577 541.900269) 333 POINT(710.26001 799.042603) 334 POINT(522.548523 731.602661) 335 POINT(46.7634506 519.810547) 336 POINT(994.164307 347.038727) 337 POINT(359.54129 391.280487) 338 POINT(986.864685 29.1887455) 339 POINT(664.157104 16.6956844) 340 POINT(506.290924 660.401245) 341 POINT(923.907654 537.879028) 342 POINT(196.57933 573.125549) 343 POINT(983.080017 741.830627) 344 POINT(374.770386 200.725281) 345 POINT(218.819595 155.959396) 346 POINT(132.486969 31.3476582) 347 POINT(183.110306 131.666199) 348 POINT(554.582031 613.188049) 349 POINT(187.965988 739.548035) 350 POINT(564.895142 123.377975) 351 POINT(853.602173 64.5109177) 352 POINT(583.37793 786.928528) 353 POINT(174.105316 743.416138) 354 POINT(282.475586 241.09581) 355 POINT(819.075745 395.017517) 356 POINT(682.727112 949.234985) 357 POINT(672.150146 780.977173) 358 POINT(500.143402 532.343201) 359 POINT(75.5888138 952.400269) 360 POINT(626.232788 602.34729) 361 POINT(799.75531 388.957336) 362 POINT(413.891479 435.681) 363 POINT(360.947998 853.243774) 364 POINT(790.203552 846.360474) 365 POINT(272.427338 753.157349) 366 POINT(305.075134 522.771057) 367 POINT(11.5003281 636.990417) 368 POINT(940.252197 140.506424) 369 POINT(628.180908 712.474365) 370 POINT(687.464722 904.273682) 371 POINT(794.37793 170.669846) 372 POINT(601.144592 95.1303635) 373 POINT(811.02594 562.454651) 374 POINT(737.452332 385.815094) 375 POINT(346.452393 489.161285) 376 POINT(307.412537 457.965271) 377 POINT(993.076111 665.000183) 378 POINT(651.12085 22.4920769) 379 POINT(699.887207 738.255127) 380 POINT(638.693787 60.8492317) 381 POINT(691.828308 637.45166) 382 POINT(631.451477 713.546814) 383 POINT(129.060837 170.007355) 384 POINT(706.453796 126.818237) 385 POINT(822.1698 942.124573) 386 POINT(924.769653 3.25730252) 387 POINT(214.763947 703.356812) 388 POINT(677.692566 2.54611349) 389 POINT(311.927826 26.4749794) 390 POINT(697.595154 309.753815) 391 POINT(588.958984 907.70166) 392 POINT(996.432617 77.3928833) 393 POINT(305.283539 774.423035) 394 POINT(573.38739 390.385864) 395 POINT(297.021881 393.108643) 396 POINT(195.231125 377.861481) 397 POINT(780.132019 920.96521) 398 POINT(333.242584 970.427734) 399 POINT(94.2686234 498.053772) 400 POINT(576.653992 85.0519333) 401 POINT(613.474915 255.056412) 402 POINT(625.423584 111.324959) 403 POINT(279.703339 854.072083) 404 POINT(588.59436 12.7411575) 405 POINT(743.192627 889.845154) 406 POINT(525.670593 75.3485336) 407 POINT(862.305481 876.417786) 408 POINT(417.514465 905.005676) 409 POINT(95.0495529 614.697083) 410 POINT(443.563751 155.436981) 411 POINT(953.808105 480.815338) 412 POINT(180.134384 264.843597) 413 POINT(370.543823 360.042725) 414 POINT(179.776199 182.171097) 415 POINT(286.801392 358.606567) 416 POINT(106.78653 309.040894) 417 POINT(624.221252 103.937904) 418 POINT(904.879639 194.239914) 419 POINT(668.12854 956.076843) 420 POINT(278.600311 559.566895) 421 POINT(798.330139 128.325516) 422 POINT(452.431854 64.4206085) 423 POINT(994.923401 898.468872) 424 POINT(805.876587 528.072266) 425 POINT(28.2027836 393.340759) 426 POINT(597.397705 710.009216) 427 POINT(184.273315 975.169922) 428 POINT(816.456787 927.601685) 429 POINT(583.505371 939.601807) 430 POINT(925.524963 884.802795) 431 POINT(997.371704 959.784912) 432 POINT(260.587067 854.423279) 433 POINT(768.507996 651.279968) 434 POINT(490.116943 449.14801) 435 POINT(275.159698 477.28363) 436 POINT(332.722748 422.915802) 437 POINT(968.782959 416.845825) 438 POINT(699.712708 445.235352) 439 POINT(544.837097 850.137512) 440 POINT(260.914398 407.741882) 441 POINT(302.246521 709.737732) 442 POINT(783.508606 266.731445) 443 POINT(305.256897 356.33783) 444 POINT(320.861206 550.078064) 445 POINT(9.22038651 877.802368) 446 POINT(740.923096 705.007019) 447 POINT(554.100159 614.414062) 448 POINT(194.413666 318.457855) 449 POINT(799.192322 978.207275) 450 POINT(897.527161 678.631653) 451 POINT(280.860748 874.046692) 452 POINT(211.25177 79.8258591) 453 POINT(861.217651 823.627563) 454 POINT(61.6346321 8.47005367) 455 POINT(717.052185 835.596558) 456 POINT(587.66156 832.68811) 457 POINT(140.407776 15.8603983) 458 POINT(804.165161 687.629639) 459 POINT(108.681725 247.848755) 460 POINT(507.776733 881.784302) 461 POINT(784.711731 134.622086) 462 POINT(568.964111 713.672729) 463 POINT(655.920044 940.4953) 464 POINT(780.348633 92.4956512) 465 POINT(374.203705 922.135132) 466 POINT(161.582993 699.920044) 467 POINT(51.0268402 136.35849) 468 POINT(848.052368 653.241882) 469 POINT(659.347717 258.212524) 470 POINT(661.595581 163.338226) 471 POINT(737.976013 858.082336) 472 POINT(126.532303 595.409058) 473 POINT(55.2175446 955.900208) 474 POINT(956.843994 598.415344) 475 POINT(615.8573 994.996216) 476 POINT(6.83629179 672.890198) 477 POINT(65.4091721 924.338013) 478 POINT(907.580139 189.595673) 479 POINT(413.013184 128.082077) 480 POINT(367.581573 587.108398) 481 POINT(142.390045 43.3526459) 482 POINT(614.287537 289.255646) 483 POINT(370.002869 524.452515) 484 POINT(112.14267 958.432617) 485 POINT(230.28685 173.397446) 486 POINT(385.039429 593.870117) 487 POINT(186.868988 807.473694) 488 POINT(71.3451462 891.183716) 489 POINT(381.622406 84.8040237) 490 POINT(776.569763 287.930084) 491 POINT(413.813965 684.643433) 492 POINT(593.595764 456.969238) 493 POINT(391.269135 731.914429) 494 POINT(517.802246 293.33728) 495 POINT(594.276733 772.562683) 496 POINT(282.073669 929.872803) 497 POINT(348.894806 220.512573) 498 POINT(215.404953 161.416672) 499 POINT(505.533386 996.812378) 500 POINT(632.553833 147.064056) 501 POINT(375.434143 21.0753708) 502 POINT(488.007324 75.349556) 503 POINT(784.327271 264.277771) 504 POINT(775.627808 939.684143) 505 POINT(579.62738 465.716736) 506 POINT(579.036743 892.746155) 507 POINT(73.6682053 106.435646) 508 POINT(133.534119 181.400101) 509 POINT(447.425079 333.297424) 510 POINT(557.702148 151.239471) 511 POINT(581.821716 774.348755) 512 POINT(564.503235 635.811279) 513 POINT(460.065552 375.026703) 514 POINT(933.472656 484.396423) 515 POINT(605.643616 829.586975) 516 POINT(486.470581 448.929565) 517 POINT(725.890442 961.982727) 518 POINT(881.469788 950.906799) 519 POINT(137.796616 620.022034) 520 POINT(547.203491 829.244751) 521 POINT(806.470032 646.330078) 522 POINT(304.511139 366.923981) 523 POINT(151.019623 155.41832) 524 POINT(639.335022 185.424591) 525 POINT(719.369507 319.614777) 526 POINT(642.114929 849.595764) 527 POINT(532.502502 804.970337) 528 POINT(446.492554 750.48877) 529 POINT(307.893585 824.368042) 530 POINT(677.594177 429.23819) 531 POINT(927.552002 927.412048) 532 POINT(250.653641 511.335449) 533 POINT(782.40564 329.353058) 534 POINT(591.440125 768.268066) 535 POINT(944.117615 14.0519781) 536 POINT(431.058044 83.787056) 537 POINT(258.325531 514.137939) 538 POINT(162.515045 736.925171) 539 POINT(268.378754 176.061951) 540 POINT(941.449524 25.8617458) 541 POINT(542.667053 625.28302) 542 POINT(328.143524 838.97876) 543 POINT(246.477448 839.577087) 544 POINT(65.1159668 965.766174) 545 POINT(253.984833 764.279114) 546 POINT(280.013916 255.02684) 547 POINT(398.613464 325.638092) 548 POINT(916.142883 836.143494) 549 POINT(599.857727 346.476654) 550 POINT(894.869568 576.660706) 551 POINT(149.102005 586.735779) 552 POINT(480.489014 452.40094) 553 POINT(781.54364 530.597473) 554 POINT(577.291504 141.68222) 555 POINT(779.626343 747.692932) 556 POINT(471.939941 650.478149) 557 POINT(47.1988564 560.020386) 558 POINT(526.443787 248.723755) 559 POINT(242.801193 255.845795) 560 POINT(915.689026 208.209396) 561 POINT(873.062134 379.886139) 562 POINT(29.4727306 429.036438) 563 POINT(9.29470444 383.964142) 564 POINT(166.241974 814.46936) 565 POINT(616.262512 598.166809) 566 POINT(631.322876 383.875336) 567 POINT(564.140564 549.074768) 568 POINT(16.535284 421.582428) 569 POINT(253.416229 844.19696) 570 POINT(934.050964 157.824341) 571 POINT(516.503845 411.330658) 572 POINT(661.605347 419.014618) 573 POINT(495.938293 844.765747) 574 POINT(338.291321 611.568481) 575 POINT(542.047791 999.294067) 576 POINT(542.839294 200.155411) 577 POINT(655.998779 85.7203369) 578 POINT(255.344925 282.034332) 579 POINT(538.179932 171.478302) 580 POINT(517.784424 859.03717) 581 POINT(126.314995 756.131958) 582 POINT(190.435913 273.483551) 583 POINT(439.841736 568.720215) 584 POINT(375.688385 950.127319) 585 POINT(232.47644 782.429443) 586 POINT(625.998657 910.059448) 587 POINT(117.135185 837.93103) 588 POINT(450.387878 471.868958) 589 POINT(518.25769 151.504333) 590 POINT(818.429321 498.449585) 591 POINT(655.965149 315.000244) 592 POINT(969.857971 493.433868) 593 POINT(232.382828 394.644409) 594 POINT(462.556427 698.741211) 595 POINT(109.008316 543.104187) 596 POINT(825.680481 134.190704) 597 POINT(899.461975 58.254406) 598 POINT(675.154053 682.212402) 599 POINT(496.702026 972.396729) 600 POINT(645.884949 926.681213) 601 POINT(378.329041 222.673233) 602 POINT(902.143555 466.712708) 603 POINT(436.579529 938.036072) 604 POINT(411.060516 946.435242) 605 POINT(737.766663 646.999146) 606 POINT(163.697815 563.45459) 607 POINT(284.161163 545.729736) 608 POINT(366.332886 475.745483) 609 POINT(612.613586 915.686035) 610 POINT(517.284302 343.447662) 611 POINT(79.7427826 407.453705) 612 POINT(650.745544 383.560577) 613 POINT(442.505737 41.7750282) 614 POINT(740.751953 337.474731) 615 POINT(912.807251 264.731079) 616 POINT(890.780212 849.945923) 617 POINT(141.011963 341.977875) 618 POINT(15.888464 20.420826) 619 POINT(539.415833 412.829773) 620 POINT(986.196106 541.098938) 621 POINT(294.681335 40.4291954) 622 POINT(827.443848 498.930969) 623 POINT(217.820358 496.467346) 624 POINT(454.063049 849.696289) 625 POINT(949.52832 980.777405) 626 POINT(383.437439 920.786804) 627 POINT(763.669617 686.085999) 628 POINT(990.809937 355.387695) 629 POINT(406.738892 30.3843746) 630 POINT(609.634644 355.056183) 631 POINT(768.565369 463.488281) 632 POINT(362.303284 231.542007) 633 POINT(219.889099 245.756973) 634 POINT(174.401382 353.983063) 635 POINT(774.358032 246.600327) 636 POINT(338.417542 926.888794) 637 POINT(762.725037 634.933411) 638 POINT(59.7134323 400.750671) 639 POINT(950.452454 865.356201) 640 POINT(151.254028 84.4884949) 641 POINT(319.561096 400.400787) 642 POINT(909.918518 971.663391) 643 POINT(482.529602 464.172943) 644 POINT(875.10968 325.50296) 645 POINT(639.610901 875.219971) 646 POINT(761.919678 996.958008) 647 POINT(448.470215 751.213257) 648 POINT(201.49292 221.527496) 649 POINT(292.074432 975.387085) 650 POINT(788.768005 91.3683243) 651 POINT(430.901947 640.608582) 652 POINT(313.929382 506.784454) 653 POINT(960.560242 883.06134) 654 POINT(373.224152 43.7315063) 655 POINT(495.671875 241.04245) 656 POINT(954.994812 340.267242) 657 POINT(23.4321442 848.140808) 658 POINT(168.667252 704.338745) 659 POINT(451.680603 832.570435) 660 POINT(321.958466 217.963303) 661 POINT(380.925476 449.769928) 662 POINT(801.800781 589.396362) 663 POINT(499.896851 943.278809) 664 POINT(127.615273 956.572998) 665 POINT(510.387299 394.71286) 666 POINT(524.925598 233.878387) 667 POINT(478.003265 888.362488) 668 POINT(19.3304977 22.680685) 669 POINT(157.751541 946.129578) 670 POINT(435.119537 567.214478) 671 POINT(912.008301 166.426743) 672 POINT(562.015808 365.123871) 673 POINT(906.36908 374.142395) 674 POINT(843.484741 360.672455) 675 POINT(997.290894 921.296326) 676 POINT(159.701279 823.343994) 677 POINT(103.569351 398.682678) 678 POINT(999.692627 100.957909) 679 POINT(448.927826 272.34021) 680 POINT(615.562439 130.792892) 681 POINT(270.83905 455.458221) 682 POINT(655.378113 481.46756) 683 POINT(884.786621 692.29834) 684 POINT(511.708069 510.007751) 685 POINT(175.260223 757.484863) 686 POINT(884.504333 70.7973251) 687 POINT(34.749054 768.821533) 688 POINT(227.728317 864.755371) 689 POINT(197.858902 547.475525) 690 POINT(169.639374 617.52002) 691 POINT(605.564087 624.414429) 692 POINT(210.948868 614.68689) 693 POINT(498.772217 640.483093) 694 POINT(10.1567287 880.91156) 695 POINT(73.2109299 989.195557) 696 POINT(61.532402 289.233093) 697 POINT(749.650757 341.544281) 698 POINT(211.69252 839.218445) 699 POINT(23.2861843 421.867554) 700 POINT(102.012886 100.008003) 701 POINT(880.469788 89.6733475) 702 POINT(575.761292 620.224548) 703 POINT(914.812195 456.514893) 704 POINT(363.5448 844.779846) 705 POINT(370.931549 727.405823) 706 POINT(924.253601 523.286804) 707 POINT(303.995392 516.324829) 708 POINT(340.093658 661.10553) 709 POINT(105.898079 124.194786) 710 POINT(265.608887 57.676384) 711 POINT(631.848083 280.052856) 712 POINT(436.990204 344.014648) 713 POINT(709.802368 992.312988) 714 POINT(437.776367 8.97419262) 715 POINT(653.217407 813.030457) 716 POINT(771.715759 169.668716) 717 POINT(576.742859 125.515785) 718 POINT(747.648743 163.433548) 719 POINT(464.65097 181.740372) 720 POINT(872.480957 425.708832) 721 POINT(520.974548 963.571594) 722 POINT(967.472229 469.638092) 723 POINT(874.658752 459.460358) 724 POINT(864.106812 139.045746) 725 POINT(86.767746 339.868713) 726 POINT(545.807556 97.4460983) 727 POINT(552.315491 0.202856973) 728 POINT(930.910461 813.13385) 729 POINT(77.1130524 504.65744) 730 POINT(43.9366302 66.1265182) 731 POINT(988.779968 609.155579) 732 POINT(202.745331 339.311218) 733 POINT(787.509399 33.0894432) 734 POINT(618.180298 856.756836) 735 POINT(811.189941 770.053406) 736 POINT(723.038696 630.575073) 737 POINT(764.079041 25.0672054) 738 POINT(834.411987 698.365845) 739 POINT(399.525543 403.389374) 740 POINT(826.616638 941.203186) 741 POINT(644.512573 83.0179138) 742 POINT(223.123779 22.9693508) 743 POINT(74.415123 724.098633) 744 POINT(80.3008728 281.91861) 745 POINT(785.8526 914.057983) 746 POINT(761.719849 921.560547) 747 POINT(347.491913 643.325867) 748 POINT(920.707031 817.836243) 749 POINT(934.885803 44.6159401) 750 POINT(905.284607 301.280914) 751 POINT(855.791687 816.113525) 752 POINT(261.370361 645.217102) 753 POINT(154.916855 58.4323997) 754 POINT(877.892029 843.411072) 755 POINT(637.814514 875.324829) 756 POINT(635.268372 883.096619) 757 POINT(586.959412 972.958618) 758 POINT(683.592041 792.486633) 759 POINT(351.257294 611.841064) 760 POINT(889.007324 587.140869) 761 POINT(393.884552 854.525208) 762 POINT(699.533264 68.7556458) 763 POINT(881.055359 862.050598) 764 POINT(51.3834381 595.62561) 765 POINT(412.82605 539.255432) 766 POINT(773.24762 189.361008) 767 POINT(541.255127 645.873413) 768 POINT(761.724365 51.2200737) 769 POINT(624.148987 374.548157) 770 POINT(461.945953 8.04309464) 771 POINT(735.37262 662.039612) 772 POINT(562.364624 7.29778147) 773 POINT(534.546997 225.057571) 774 POINT(423.742706 338.823242) 775 POINT(507.274597 592.070618) 776 POINT(434.800079 223.785461) 777 POINT(967.339905 597.448547) 778 POINT(999.047852 116.042259) 779 POINT(888.25293 790.384094) 780 POINT(190.515518 985.099976) 781 POINT(554.80304 629.80719) 782 POINT(704.934998 861.292297) 783 POINT(325.845398 845.173462) 784 POINT(715.172058 531.512329) 785 POINT(435.365479 864.43866) 786 POINT(706.115234 877.194458) 787 POINT(766.08783 183.187897) 788 POINT(608.788025 485.317322) 789 POINT(272.773407 176.885574) 790 POINT(323.215424 768.63855) 791 POINT(153.26712 361.265686) 792 POINT(464.740967 474.47525) 793 POINT(734.822693 969.351501) 794 POINT(292.381561 604.015503) 795 POINT(209.876038 938.450012) 796 POINT(886.865601 8.93296432) 797 POINT(996.022156 753.315979) 798 POINT(799.79657 272.137299) 799 POINT(364.354218 854.743408) 800 POINT(356.615662 548.618958) 801 POINT(661.55603 543.979553) 802 POINT(280.523407 364.952698) 803 POINT(605.332214 56.0331345) 804 POINT(231.204147 617.147034) 805 POINT(749.174744 68.2773132) 806 POINT(593.153992 221.831558) 807 POINT(858.478821 699.446594) 808 POINT(478.832336 761.552246) 809 POINT(11.1465778 648.552917) 810 POINT(460.06488 608.104553) 811 POINT(205.683853 649.372498) 812 POINT(238.561356 135.921661) 813 POINT(930.165222 765.585388) 814 POINT(997.65155 868.709412) 815 POINT(896.192139 131.609558) 816 POINT(930.077515 495.570892) 817 POINT(181.112534 727.512451) 818 POINT(751.731873 297.207733) 819 POINT(635.437195 351.58197) 820 POINT(432.546417 428.458282) 821 POINT(214.835266 575.297424) 822 POINT(900.382263 891.1026) 823 POINT(79.7052689 602.286499) 824 POINT(801.946899 721.81543) 825 POINT(890.602417 340.734924) 826 POINT(189.787018 626.298706) 827 POINT(813.393921 888.61322) 828 POINT(102.720879 864.513062) 829 POINT(760.666687 39.5966644) 830 POINT(728.25531 876.712891) 831 POINT(340.511841 376.908508) 832 POINT(192.270935 819.470825) 833 POINT(693.362244 330.365753) 834 POINT(979.377014 629.456055) 835 POINT(783.199402 42.1245308) 836 POINT(715.78186 365.45694) 837 POINT(10.4285526 598.112732) 838 POINT(167.361557 701.671509) 839 POINT(47.4323578 729.627991) 840 POINT(144.038834 503.914093) 841 POINT(209.757629 333.416382) 842 POINT(835.923401 252.02919) 843 POINT(189.703873 474.714966) 844 POINT(418.359344 653.986938) 845 POINT(646.519958 67.834465) 846 POINT(486.647308 498.039062) 847 POINT(598.36261 330.107208) 848 POINT(654.45166 617.715088) 849 POINT(253.632675 800.281494) 850 POINT(63.5880737 699.760742) 851 POINT(389.418152 140.181015) 852 POINT(400.958191 587.394165) 853 POINT(496.79007 802.771057) 854 POINT(547.929138 151.15155) 855 POINT(109.006714 670.406433) 856 POINT(148.636337 788.398438) 857 POINT(279.786285 929.333313) 858 POINT(79.8446198 132.207657) 859 POINT(433.344391 251.451035) 860 POINT(142.57666 703.295166) 861 POINT(442.615997 68.5183029) 862 POINT(834.279968 518.218567) 863 POINT(61.876255 629.62915) 864 POINT(62.5512238 206.871582) 865 POINT(827.847473 177.748657) 866 POINT(343.186981 16.868185) 867 POINT(410.46405 28.8544197) 868 POINT(805.532288 356.733612) 869 POINT(630.020874 416.885651) 870 POINT(78.8179779 809.580383) 871 POINT(28.8369789 523.979126) 872 POINT(429.615204 30.4254913) 873 POINT(888.330872 258.725128) 874 POINT(891.00647 710.420715) 875 POINT(890.163452 701.381348) 876 POINT(300.02652 77.5568237) 877 POINT(534.612244 95.7406006) 878 POINT(325.929535 824.03009) 879 POINT(830.483948 239.886856) 880 POINT(615.591003 164.214584) 881 POINT(366.653625 785.242798) 882 POINT(944.668823 83.4804916) 883 POINT(451.878784 483.5896) 884 POINT(787.979675 26.9752178) 885 POINT(681.122742 779.226624) 886 POINT(506.957733 979.606506) 887 POINT(745.626526 297.860901) 888 POINT(596.253845 425.121796) 889 POINT(70.8949585 970.527405) 890 POINT(288.821411 255.280792) 891 POINT(540.241699 500.814514) 892 POINT(645.666626 682.209839) 893 POINT(68.3337402 153.510849) 894 POINT(862.387207 331.265228) 895 POINT(634.164612 944.72052) 896 POINT(422.377838 341.915131) 897 POINT(899.079773 45.3716469) 898 POINT(381.963837 754.684631) 899 POINT(134.006317 885.338501) 900 POINT(154.685532 128.134583) 901 POINT(600.164185 143.217972) 902 POINT(792.557068 16.8324413) 903 POINT(86.6372757 621.866089) 904 POINT(766.569397 95.6021347) 905 POINT(151.767349 302.470551) 906 POINT(405.310913 673.933167) 907 POINT(967.039429 516.17627) 908 POINT(440.7901 584.819092) 909 POINT(73.7045975 813.706116) 910 POINT(968.932556 822.649658) 911 POINT(963.724609 407.243134) 912 POINT(696.481079 353.888092) 913 POINT(145.726273 927.927185) 914 POINT(706.980835 631.537537) 915 POINT(289.65509 125.131874) 916 POINT(430.116791 49.879158) 917 POINT(524.978333 234.3414) 918 POINT(787.967285 810.313843) 919 POINT(938.985046 278.656555) 920 POINT(68.9352341 3.64472198) 921 POINT(554.477417 30.0851059) 922 POINT(348.539459 610.71936) 923 POINT(408.57428 741.78418) 924 POINT(842.33844 184.540192) 925 POINT(983.211426 837.927551) 926 POINT(499.587158 195.920456) 927 POINT(908.108276 296.091461) 928 POINT(189.490265 35.2952614) 929 POINT(151.485641 525.843811) 930 POINT(710.931335 989.807678) 931 POINT(493.791779 700.056763) 932 POINT(490.275391 822.320435) 933 POINT(934.391357 61.4459343) 934 POINT(592.326843 923.215088) 935 POINT(377.96582 50.6960068) 936 POINT(631.979492 83.0223389) 937 POINT(881.781616 794.613098) 938 POINT(366.829681 330.996674) 939 POINT(390.630615 679.028381) 940 POINT(405.49527 729.240112) 941 POINT(44.8974648 303.26355) 942 POINT(267.150482 622.059875) 943 POINT(198.740112 978.08374) 944 POINT(362.554688 374.704834) 945 POINT(437.795166 260.062988) 946 POINT(676.435608 743.87262) 947 POINT(425.266083 500.640717) 948 POINT(559.432983 494.462463) 949 POINT(945.982605 481.964081) 950 POINT(81.9876938 893.621277) 951 POINT(252.413437 383.610626) 952 POINT(562.765198 95.4899902) 953 POINT(765.181335 309.8255) 954 POINT(813.758606 890.114014) 955 POINT(442 656.958984) 956 POINT(199.561737 680.273621) 957 POINT(129.888519 731.958862) 958 POINT(99.0161896 113.685158) 959 POINT(960.898071 277.283386) 960 POINT(796.203918 418.907043) 961 POINT(174.420181 213.303894) 962 POINT(180.40921 945.773132) 963 POINT(560.566833 789.642212) 964 POINT(70.1468124 610.306519) 965 POINT(258.375824 21.0340919) 966 POINT(116.722252 195.505798) 967 POINT(727.088562 365.955872) 968 POINT(413.251373 709.42865) 969 POINT(983.971985 947.746399) 970 POINT(413.93512 87.5439072) 971 POINT(391.752838 594.279236) 972 POINT(37.1129417 424.916229) 973 POINT(434.449554 724.989929) 974 POINT(818.770203 3.59456778) 975 POINT(672.117981 800.468811) 976 POINT(338.449432 650.386108) 977 POINT(870.768738 92.7404022) 978 POINT(447.73175 319.423218) 979 POINT(699.609314 872.246765) 980 POINT(886.556824 282.612091) 981 POINT(238.061859 444.528595) 982 POINT(921.712158 359.85495) 983 POINT(282.098724 525.389709) 984 POINT(635.0354 301.145294) 985 POINT(353.823334 203.282913) 986 POINT(329.559143 706.171082) 987 POINT(748.541443 702.745422) 988 POINT(316.435699 836.453308) 989 POINT(576.573059 599.546753) 990 POINT(653.569702 833.469971) 991 POINT(827.629578 329.009674) 992 POINT(491.167969 337.448456) 993 POINT(86.7376556 321.584412) 994 POINT(755.695862 329.976776) 995 POINT(823.553955 957.670288) 996 POINT(390.963928 364.31427) 997 POINT(650.752075 585.98938) 998 POINT(145.317963 755.948364) 999 POINT(669.349976 941.251831) 1000 POINT(522.376709 978.829346) 1001 POINT(884.890991 537.761536) 1002 POINT(527.761414 536.736694) 1003 POINT(661.934326 631.972534) 1004 POINT(977.24762 181.925461) 1005 POINT(587.098145 530.420654) 1006 POINT(567.303894 152.735443) 1007 POINT(812.823242 777.149536) 1008 POINT(534.765564 357.006989) 1009 POINT(663.0896 759.575317) 1010 POINT(389.238281 288.350098) 1011 POINT(784.656006 712.167542) 1012 POINT(933.68988 217.59697) 1013 POINT(537.263733 927.468384) 1014 POINT(92.6301041 532.795654) 1015 POINT(326.029297 173.54921) 1016 POINT(143.501938 329.164948) 1017 POINT(709.459351 101.370949) 1018 POINT(948.724976 687.439453) 1019 POINT(965.781433 555.646545) 1020 POINT(69.6970901 877.529968) 1021 POINT(295.361572 695.298523) 1022 POINT(19.5350933 727.572021) 1023 POINT(482.748596 216.694458) 1024 POINT(891.12323 990.021912) 1025 POINT(971.361694 552.375732) 1026 POINT(646.951477 990.901001) 1027 POINT(328.146973 3.44777846) 1028 POINT(146.217789 580.622925) 1029 POINT(733.935852 434.275208) 1030 POINT(634.80127 220.72963) 1031 POINT(745.118652 508.348083) 1032 POINT(760.190735 386.600067) 1033 POINT(279.11554 834.510742) 1034 POINT(974.587708 678.692566) 1035 POINT(803.611145 699.142944) 1036 POINT(436.645142 591.678894) 1037 POINT(609.379333 923.96344) 1038 POINT(650.222168 660.088989) 1039 POINT(948.643799 468.107788) 1040 POINT(224.823761 189.59761) 1041 POINT(683.304932 609.873474) 1042 POINT(397.877136 394.263947) 1043 POINT(946.146606 336.496246) 1044 POINT(617.614624 31.9195499) 1045 POINT(537.577148 143.630371) 1046 POINT(294.159882 493.155426) 1047 POINT(302.940125 19.5719624) 1048 POINT(235.643539 325.271332) 1049 POINT(331.454865 448.0466) 1050 POINT(699.126099 823.037048) 1051 POINT(336.058044 808.551147) 1052 POINT(9.22787571 195.713043) 1053 POINT(190.559784 351.401031) 1054 POINT(390.224304 917.651245) 1055 POINT(71.4963989 758.01178) 1056 POINT(782.65979 821.73584) 1057 POINT(559.85553 213.389984) 1058 POINT(689.080505 825.341431) 1059 POINT(63.6066284 480.801849) 1060 POINT(434.234222 552.421143) 1061 POINT(14.9444866 7.22543955) 1062 POINT(5.10486269 588.456116) 1063 POINT(43.7323341 947.205994) 1064 POINT(930.630005 373.585388) 1065 POINT(126.317322 782.47168) 1066 POINT(498.220581 390.211395) 1067 POINT(30.3223343 61.105526) 1068 POINT(215.700638 62.2723846) 1069 POINT(22.9483242 574.812683) 1070 POINT(497.586639 772.362854) 1071 POINT(162.635498 943.094666) 1072 POINT(471.423157 378.745026) 1073 POINT(759.636719 251.794571) 1074 POINT(904.006042 226.451752) 1075 POINT(56.2857361 788.991272) 1076 POINT(82.7021637 685.167419) 1077 POINT(456.75296 487.688904) 1078 POINT(50.7816849 892.05426) 1079 POINT(921.258118 891.907593) 1080 POINT(587.919128 451.456543) 1081 POINT(451.555389 45.9742813) 1082 POINT(401.101562 57.3772964) 1083 POINT(31.6601486 917.022583) 1084 POINT(3.56318808 211.322632) 1085 POINT(377.002686 814.534668) 1086 POINT(19.6068439 650.707153) 1087 POINT(391.354919 800.424683) 1088 POINT(173.975174 665.306213) 1089 POINT(166.992523 586.525391) 1090 POINT(971.614685 935.633118) 1091 POINT(600.755493 706.869202) 1092 POINT(216.181549 792.658325) 1093 POINT(476.217194 408.958588) 1094 POINT(675.539612 178.630356) 1095 POINT(997.44342 326.023224) 1096 POINT(704.990234 30.2003479) 1097 POINT(898.33313 431.411591) 1098 POINT(762.377197 144.501846) 1099 POINT(116.905373 412.744415) 1100 POINT(974.966187 803.838074) 1101 POINT(667.899963 578.863403) 1102 POINT(180.682938 893.34259) 1103 POINT(399.567719 884.1698) 1104 POINT(803.598877 957.194641) 1105 POINT(239.552139 45.5162697) 1106 POINT(126.301491 502.103607) 1107 POINT(856.437927 974.864868) 1108 POINT(783.920105 911.864868) 1109 POINT(252.123856 560.56012) 1110 POINT(873.170288 14.4965992) 1111 POINT(98.0474167 921.011536) 1112 POINT(895.025635 715.083923) 1113 POINT(905.956543 612.18988) 1114 POINT(734.842224 134.895752) 1115 POINT(730.022583 395.588165) 1116 POINT(135.399063 483.140839) 1117 POINT(708.374817 332.787415) 1118 POINT(195.942551 925.05542) 1119 POINT(623.492188 448.724182) 1120 POINT(596.631714 132.658203) 1121 POINT(875.326172 546.03009) 1122 POINT(718.595764 36.8777122) 1123 POINT(979.673706 20.8849773) 1124 POINT(24.0785332 706.896484) 1125 POINT(416.435394 555.791748) 1126 POINT(850.927429 820.127747) 1127 POINT(425.364105 191.272659) 1128 POINT(736.184143 50.5319519) 1129 POINT(76.235054 617.051025) 1130 POINT(43.0679054 980.90802) 1131 POINT(599.691406 199.802139) 1132 POINT(755.658752 63.895977) 1133 POINT(856.088806 670.625122) 1134 POINT(10.6532888 334.868042) 1135 POINT(822.36853 938.240417) 1136 POINT(143.38002 276.451721) 1137 POINT(799.333679 846.398254) 1138 POINT(576.641235 598.539062) 1139 POINT(469.82254 44.572464) 1140 POINT(819.840271 19.3243961) 1141 POINT(86.4250717 443.815643) 1142 POINT(669.327942 92.8477554) 1143 POINT(627.954712 954.383911) 1144 POINT(609.155945 47.989563) 1145 POINT(257.374481 583.764893) 1146 POINT(557.77356 694.776672) 1147 POINT(438.921661 264.027863) 1148 POINT(847.100281 68.7633896) 1149 POINT(555.530823 492.569) 1150 POINT(465.414368 366.304169) 1151 POINT(314.207581 542.568481) 1152 POINT(657.314575 256.527649) 1153 POINT(969.760742 426.666321) 1154 POINT(418.458405 114.169464) 1155 POINT(847.39386 292.972015) 1156 POINT(918.802124 516.161499) 1157 POINT(541.34314 575.654785) 1158 POINT(557.73407 289.672821) 1159 POINT(827.411865 107.7416) 1160 POINT(22.9991322 936.440857) 1161 POINT(897.401001 891.728333) 1162 POINT(170.97908 724.635925) 1163 POINT(226.7005 190.168564) 1164 POINT(750.167908 612.705444) 1165 POINT(774.449463 685.136169) 1166 POINT(387.129517 317.809875) 1167 POINT(418.570007 319.600433) 1168 POINT(982.547424 773.383057) 1169 POINT(503.649841 998.14624) 1170 POINT(814.987488 335.433868) 1171 POINT(164.209381 27.6015034) 1172 POINT(515.646545 935.498291) 1173 POINT(43.6144753 224.096985) 1174 POINT(405.717041 870.310669) 1175 POINT(102.15461 221.608963) 1176 POINT(929.256653 635.584045) 1177 POINT(167.116348 173.470367) 1178 POINT(471.93866 615.679504) 1179 POINT(571.670166 743.663696) 1180 POINT(336.208099 134.951248) 1181 POINT(834.815552 805.524841) 1182 POINT(105.761169 353.330902) 1183 POINT(606.377258 384.021881) 1184 POINT(839.589783 382.062653) 1185 POINT(622.121277 141.874451) 1186 POINT(203.912918 329.822113) 1187 POINT(845.59668 682.92981) 1188 POINT(698.095154 429.794983) 1189 POINT(304.56723 457.504303) 1190 POINT(930.201843 0.316064507) 1191 POINT(928.254761 448.57074) 1192 POINT(524.355347 451.662811) 1193 POINT(352.584717 705.063416) 1194 POINT(723.856018 456.480225) 1195 POINT(657.837158 295.169983) 1196 POINT(322.563568 478.616882) 1197 POINT(138.317032 269.877625) 1198 POINT(896.865784 223.046371) 1199 POINT(856.753601 662.469299) 1200 POINT(809.391479 986.81842) 1201 POINT(115.125008 575.976318) 1202 POINT(454.269287 7.04636478) 1203 POINT(364.613861 716.260742) 1204 POINT(256.142914 506.830231) 1205 POINT(94.6929169 767.529358) 1206 POINT(18.3931313 414.402466) 1207 POINT(77.2947845 249.393677) 1208 POINT(40.2857285 495.953796) 1209 POINT(17.1503086 675.44104) 1210 POINT(641.380676 610.465698) 1211 POINT(272.312927 203.648529) 1212 POINT(200.948257 817.982117) 1213 POINT(286.384338 545.450256) 1214 POINT(849.910583 394.258728) 1215 POINT(720.899353 715.093933) 1216 POINT(555.66156 308.42514) 1217 POINT(825.724243 551.937012) 1218 POINT(481.828033 180.595291) 1219 POINT(248.306061 649.023499) 1220 POINT(354.574432 68.305603) 1221 POINT(498.437622 950.73761) 1222 POINT(746.482605 939.910278) 1223 POINT(471.256531 435.293304) 1224 POINT(23.5632324 325.91037) 1225 POINT(432.986481 834.621826) 1226 POINT(468.885651 232.550552) 1227 POINT(415.085388 640.858215) 1228 POINT(279.104095 933.423157) 1229 POINT(94.7473526 846.6875) 1230 POINT(662.371399 92.4397888) 1231 POINT(592.995422 123.531403) 1232 POINT(785.46991 824.152344) 1233 POINT(653.910034 879.778564) 1234 POINT(415.265808 664.444153) 1235 POINT(915.992371 799.469055) 1236 POINT(568.760864 46.1067963) 1237 POINT(313.524567 744.135864) 1238 POINT(574.137512 180.430832) 1239 POINT(494.441467 26.6071529) 1240 POINT(602.470581 308.962738) 1241 POINT(782.176086 20.8394508) 1242 POINT(859.526062 70.9247894) 1243 POINT(990.822083 357.255341) 1244 POINT(335.738556 334.001923) 1245 POINT(2.52353787 835.204407) 1246 POINT(859.611877 752.433167) 1247 POINT(688.139221 945.278381) 1248 POINT(448.130554 680.392395) 1249 POINT(579.947449 82.1428604) 1250 POINT(813.113892 904.921204) 1251 POINT(849.584656 206.773087) 1252 POINT(783.738281 136.220734) 1253 POINT(94.8078079 714.607117) 1254 POINT(214.770462 859.587219) 1255 POINT(262.42215 427.874023) 1256 POINT(242.581528 208.974258) 1257 POINT(627.322998 66.5790253) 1258 POINT(55.0794678 53.9982452) 1259 POINT(82.7042236 889.299561) 1260 POINT(388.743805 727.711304) 1261 POINT(375.837311 823.674561) 1262 POINT(940.543701 379.812988) 1263 POINT(227.311508 734.474792) 1264 POINT(672.365723 77.945282) 1265 POINT(207.252518 177.281448) 1266 POINT(431.4888 647.730652) 1267 POINT(595.937439 246.544815) 1268 POINT(456.567413 130.309082) 1269 POINT(342.657257 902.251526) 1270 POINT(681.590332 324.970734) 1271 POINT(348.024719 419.31955) 1272 POINT(490.565735 495.353912) 1273 POINT(151.695068 583.519836) 1274 POINT(866.567017 162.501495) 1275 POINT(308.292328 708.166138) 1276 POINT(76.6968155 339.376648) 1277 POINT(205.970642 983.624268) 1278 POINT(949.068481 322.398621) 1279 POINT(329.374908 629.092529) 1280 POINT(941.751465 629.95874) 1281 POINT(324.800781 590.95105) 1282 POINT(42.6045227 140.131165) 1283 POINT(101.228912 437.742462) 1284 POINT(741.974487 344.938049) 1285 POINT(335.875 717.633972) 1286 POINT(9.43457317 712.234192) 1287 POINT(464.343018 464.74823) 1288 POINT(206.274979 874.825134) 1289 POINT(668.898071 126.384171) 1290 POINT(955.656189 86.7428818) 1291 POINT(757.422852 809.864075) 1292 POINT(153.640945 576.213928) 1293 POINT(702.045105 57.1326866) 1294 POINT(971.300659 951.925964) 1295 POINT(110.103249 4.53047466) 1296 POINT(8.44470692 192.52565) 1297 POINT(989.067017 697.21582) 1298 POINT(804.065491 368.271576) 1299 POINT(877.373291 940.99469) 1300 POINT(981.273132 648.464233) 1301 POINT(109.1427 592.937317) 1302 POINT(152.382935 269.341003) 1303 POINT(604.78363 835.841187) 1304 POINT(783.110596 545.850891) 1305 POINT(902.080933 235.692398) 1306 POINT(916.844482 169.021912) 1307 POINT(12.1362534 246.761124) 1308 POINT(597.148682 541.043579) 1309 POINT(278.23468 72.4389267) 1310 POINT(58.571331 755.874878) 1311 POINT(488.242462 193.615814) 1312 POINT(45.1909065 667.93689) 1313 POINT(625.496155 488.155182) 1314 POINT(678.941101 829.682007) 1315 POINT(500.464569 248.328354) 1316 POINT(54.5680542 585.577026) 1317 POINT(75.0004959 887.022522) 1318 POINT(557.151978 340.970673) 1319 POINT(140.142319 52.8609619) 1320 POINT(856.67218 675.715027) 1321 POINT(532.672607 859.424377) 1322 POINT(660.424683 131.198792) 1323 POINT(748.636108 100.514397) 1324 POINT(829.665466 893.161011) 1325 POINT(435.51059 563.454712) 1326 POINT(76.2140045 339.452545) 1327 POINT(198.60257 773.011353) 1328 POINT(535.613647 280.591034) 1329 POINT(649.505493 872.478821) 1330 POINT(406.62149 340.921661) 1331 POINT(941.251038 564.302734) 1332 POINT(96.239502 99.4969711) 1333 POINT(790.356873 544.394348) 1334 POINT(912.27124 513.08075) 1335 POINT(372.711761 141.761627) 1336 POINT(1.68740642 600.259583) 1337 POINT(518.649658 653.587219) 1338 POINT(596.231018 87.4202423) 1339 POINT(421.279663 396.407684) 1340 POINT(553.135315 556.863098) 1341 POINT(37.9165154 793.183533) 1342 POINT(978.131104 837.733765) 1343 POINT(512.181091 916.029358) 1344 POINT(402.785126 825.559753) 1345 POINT(107.018074 103.047157) 1346 POINT(524.454407 380.382843) 1347 POINT(227.641846 378.54953) 1348 POINT(73.7091217 351.830566) 1349 POINT(367.53006 8.07407665) 1350 POINT(573.040527 417.624634) 1351 POINT(47.4203339 207.705994) 1352 POINT(917.223389 246.278854) 1353 POINT(682.335327 661.688782) 1354 POINT(118.166786 342.001648) 1355 POINT(528.599609 459.094879) 1356 POINT(696.906799 777.631104) 1357 POINT(483.375702 481.046478) 1358 POINT(7.14178658 237.956741) 1359 POINT(163.317368 311.85141) 1360 POINT(876.077881 389.809906) 1361 POINT(834.527466 833.298279) 1362 POINT(940.163574 466.251068) 1363 POINT(939.243958 729.719604) 1364 POINT(729.487122 140.081238) 1365 POINT(29.8203754 886.377747) 1366 POINT(162.268188 697.426025) 1367 POINT(320.002411 824.988586) 1368 POINT(600.178894 276.569397) 1369 POINT(67.7299347 873.118347) 1370 POINT(889.513367 472.465302) 1371 POINT(961.356934 209.749512) 1372 POINT(978.921387 25.9699917) 1373 POINT(269.029114 534.113403) 1374 POINT(321.111328 111.975708) 1375 POINT(983.878601 151.154709) 1376 POINT(596.297974 46.0817337) 1377 POINT(638.693726 302.581451) 1378 POINT(555.047852 69.6215668) 1379 POINT(33.9308968 660.835754) 1380 POINT(386.500641 412.816528) 1381 POINT(311.614136 873.601135) 1382 POINT(846.791382 631.209351) 1383 POINT(682.199707 743.364929) 1384 POINT(7.05830908 457.6362) 1385 POINT(567.372498 160.432449) 1386 POINT(429.02002 197.735046) 1387 POINT(932.625244 904.620789) 1388 POINT(580.181763 248.903351) 1389 POINT(451.104614 282.241211) 1390 POINT(544.861328 258.869446) 1391 POINT(744.476685 678.144592) 1392 POINT(459.099182 19.4231663) 1393 POINT(995.47052 150.396362) 1394 POINT(437.962311 562.771973) 1395 POINT(506.442749 366.051544) 1396 POINT(116.703316 382.491699) 1397 POINT(403.018585 424.610779) 1398 POINT(789.776611 918.786499) 1399 POINT(343.993958 410.78717) 1400 POINT(704.026245 750.055298) 1401 POINT(318.733521 95.5479202) 1402 POINT(497.775513 531.487122) 1403 POINT(989.906189 814.995605) 1404 POINT(432.502747 969.125366) 1405 POINT(499.317902 717.11792) 1406 POINT(747.861328 757.706238) 1407 POINT(702.716675 808.993042) 1408 POINT(696.678589 826.380554) 1409 POINT(768.76355 359.539062) 1410 POINT(50.0800095 702.59137) 1411 POINT(379.016998 528.816895) 1412 POINT(772.966248 735.92926) 1413 POINT(139.028183 683.34137) 1414 POINT(278.802216 126.39991) 1415 POINT(572.870789 812.546082) 1416 POINT(5.24400282 621.492676) 1417 POINT(370.138916 144.84053) 1418 POINT(786.860474 720.657043) 1419 POINT(609.276306 348.567139) 1420 POINT(619.542236 731.808594) 1421 POINT(45.8041077 235.21312) 1422 POINT(347.701874 930.464966) 1423 POINT(358.476196 316.68399) 1424 POINT(697.753479 886.845703) 1425 POINT(448.620422 828.15387) 1426 POINT(20.4352016 149.165298) 1427 POINT(524.051086 351.449341) 1428 POINT(384.25 442.455292) 1429 POINT(133.222107 165.199081) 1430 POINT(29.7220154 292.221771) 1431 POINT(490.115051 126.818932) 1432 POINT(99.4867935 82.3790283) 1433 POINT(116.225548 743.150208) 1434 POINT(405.781403 469.103363) 1435 POINT(871.564819 112.209343) 1436 POINT(391.114349 399.067963) 1437 POINT(28.5811138 384.634735) 1438 POINT(439.348633 715.11261) 1439 POINT(916.216248 82.2642212) 1440 POINT(65.8193054 108.558716) 1441 POINT(408.951355 70.6916885) 1442 POINT(972.247803 519.517395) 1443 POINT(818.795898 776.112) 1444 POINT(414.058075 659.691284) 1445 POINT(555.993042 693.371704) 1446 POINT(166.309814 192.009598) 1447 POINT(824.137024 696.623901) 1448 POINT(665.042542 944.241455) 1449 POINT(2.92766404 746.692383) 1450 POINT(671.685669 946.426758) 1451 POINT(720.562988 416.157959) 1452 POINT(290.783112 792.081238) 1453 POINT(729.543884 115.891823) 1454 POINT(50.1776695 948.837646) 1455 POINT(954.323303 912.500977) 1456 POINT(415.688934 944.267883) 1457 POINT(684.781555 547.774414) 1458 POINT(900.029236 476.506958) 1459 POINT(132.080658 397.19754) 1460 POINT(382.171509 237.002853) 1461 POINT(57.3070717 89.0444717) 1462 POINT(375.685608 764.91803) 1463 POINT(120.830132 818.180786) 1464 POINT(472.891876 800.690735) 1465 POINT(1.9947747 764.87561) 1466 POINT(699.357788 81.9461823) 1467 POINT(303.264587 719.597656) 1468 POINT(896.737915 180.865692) 1469 POINT(206.990021 36.5638924) 1470 POINT(820.792236 61.4402237) 1471 POINT(801.482666 423.94577) 1472 POINT(408.313324 421.544922) 1473 POINT(769.034668 124.965675) 1474 POINT(597.469116 352.883057) 1475 POINT(643.069092 565.118408) 1476 POINT(349.664642 316.604553) 1477 POINT(333.995148 115.522461) 1478 POINT(739.522827 199.466721) 1479 POINT(910.960022 845.677734) 1480 POINT(478.169037 231.065094) 1481 POINT(355.04071 871.025574) 1482 POINT(291.997192 643.830811) 1483 POINT(892.137573 517.655273) 1484 POINT(675.950012 121.71077) 1485 POINT(622.676819 169.876251) 1486 POINT(611.620483 678.878235) 1487 POINT(120.082703 493.404114) 1488 POINT(523.883362 645.257202) 1489 POINT(928.84729 160.448074) 1490 POINT(636.103821 810.49469) 1491 POINT(992.046692 181.503433) 1492 POINT(767.202332 532.320679) 1493 POINT(841.575378 176.259155) 1494 POINT(741.036865 179.664749) 1495 POINT(334.584534 112.444275) 1496 POINT(899.904663 726.73053) 1497 POINT(87.1239471 192.014847) 1498 POINT(632.776917 603.388489) 1499 POINT(889.427063 169.799881) 1500 POINT(451.609955 142.26738) 1501 POINT(963.409302 717.181763) 1502 POINT(535.294983 636.969482) 1503 POINT(196.651077 774.812012) 1504 POINT(73.2127075 272.695862) 1505 POINT(541.4151 721.60614) 1506 POINT(394.765594 34.6570587) 1507 POINT(763.23938 685.800598) 1508 POINT(186.618454 306.002472) 1509 POINT(150.606995 266.79126) 1510 POINT(947.754822 791.291016) 1511 POINT(722.505188 168.530884) 1512 POINT(789.049194 840.036804) 1513 POINT(789.859192 876.799805) 1514 POINT(277.183746 284.510132) 1515 POINT(413.489655 169.648178) 1516 POINT(983.847107 774.293152) 1517 POINT(657.159485 324.348724) 1518 POINT(914.812683 905.250671) 1519 POINT(439.321442 782.51825) 1520 POINT(947.402344 461.359985) 1521 POINT(949.369995 430.515961) 1522 POINT(639.813477 963.674561) 1523 POINT(799.663208 733.286133) 1524 POINT(335.775146 741.601929) 1525 POINT(447.575134 680.579773) 1526 POINT(870.066467 588.331055) 1527 POINT(634.749939 834.694397) 1528 POINT(584.777893 55.9302025) 1529 POINT(174.060104 943.862854) 1530 POINT(946.139526 798.270691) 1531 POINT(967.158875 356.177032) 1532 POINT(163.729355 434.054199) 1533 POINT(583.717346 352.055145) 1534 POINT(667.476868 920.992065) 1535 POINT(582.331848 40.9731522) 1536 POINT(605.786072 789.397583) 1537 POINT(335.688568 438.340973) 1538 POINT(156.14537 53.5194626) 1539 POINT(850.005676 64.4796143) 1540 POINT(56.7040558 616.901123) 1541 POINT(680.307312 968.757263) 1542 POINT(495.556732 319.57019) 1543 POINT(856.086914 572.789917) 1544 POINT(159.07724 886.222168) 1545 POINT(891.913574 507.56134) 1546 POINT(619.903748 262.686188) 1547 POINT(688.141785 566.341797) 1548 POINT(320.545013 650.38269) 1549 POINT(979.872253 649.989075) 1550 POINT(614.619812 833.368591) 1551 POINT(97.5544128 800.823608) 1552 POINT(802.157043 648.702515) 1553 POINT(118.131752 28.6339073) 1554 POINT(928.990906 77.6673965) 1555 POINT(47.5380936 65.9656677) 1556 POINT(607.028259 972.898438) 1557 POINT(847.920715 653.781433) 1558 POINT(999.119019 815.342529) 1559 POINT(848.569641 672.568848) 1560 POINT(849.611938 686.514587) 1561 POINT(128.684875 883.382935) 1562 POINT(432.757446 307.627106) 1563 POINT(681.447144 229.100784) 1564 POINT(142.365311 140.391235) 1565 POINT(739.126465 334.955322) 1566 POINT(217.107239 157.787537) 1567 POINT(313.055817 821.414246) 1568 POINT(549.276367 610.667297) 1569 POINT(363.21579 349.545044) 1570 POINT(376.486176 462.088562) 1571 POINT(721.058899 522.621704) 1572 POINT(824.66571 800.85083) 1573 POINT(935.301331 196.995026) 1574 POINT(128.850113 534.436646) 1575 POINT(161.113647 754.883484) 1576 POINT(980.873901 695.780762) 1577 POINT(463.954254 72.1066666) 1578 POINT(868.468262 364.887878) 1579 POINT(933.844482 400.846466) 1580 POINT(709.88855 232.843185) 1581 POINT(605.939514 72.8885498) 1582 POINT(236.623505 340.371826) 1583 POINT(738.689575 719.694946) 1584 POINT(821.661865 264.593048) 1585 POINT(719.714417 774.936707) 1586 POINT(133.029404 655.395569) 1587 POINT(37.8688545 61.2519531) 1588 POINT(655.813782 326.972137) 1589 POINT(992.113464 720.091797) 1590 POINT(767.726013 271.157379) 1591 POINT(296.103851 91.2971191) 1592 POINT(373.612152 798.60321) 1593 POINT(502.384827 122.870857) 1594 POINT(756.536682 243.412735) 1595 POINT(310.354614 742.242432) 1596 POINT(143.56517 139.179138) 1597 POINT(764.503479 364.772217) 1598 POINT(822.73822 732.600159) 1599 POINT(98.7193909 385.534454) 1600 POINT(496.658875 28.7546902) 1601 POINT(371.692383 394.404053) 1602 POINT(883.417847 34.1473579) 1603 POINT(978.776855 785.627747) 1604 POINT(546.215271 394.787933) 1605 POINT(856.34137 980.488831) 1606 POINT(171.059555 522.543762) 1607 POINT(533.03363 240.101456) 1608 POINT(342.543915 510.067413) 1609 POINT(774.021606 875.14679) 1610 POINT(569.223816 489.677856) 1611 POINT(132.771515 936.466858) 1612 POINT(364.004486 572.19989) 1613 POINT(322.050323 336.464142) 1614 POINT(525.754395 476.102966) 1615 POINT(571.473389 963.44043) 1616 POINT(33.7921638 434.123169) 1617 POINT(511.070007 132.202057) 1618 POINT(747.766113 843.309387) 1619 POINT(145.137573 602.93396) 1620 POINT(195.705246 445.146545) 1621 POINT(22.361618 100.605103) 1622 POINT(379.738525 15.7434368) 1623 POINT(209.174973 498.739288) 1624 POINT(682.347168 683.311829) 1625 POINT(404.121735 579.618896) 1626 POINT(519.360046 33.2296104) 1627 POINT(840.215088 48.8621445) 1628 POINT(465.66217 212.405563) 1629 POINT(186.689713 532.428284) 1630 POINT(735.337158 797.615051) 1631 POINT(736.030212 900.68573) 1632 POINT(392.398773 380.74353) 1633 POINT(829.719299 995.078796) 1634 POINT(717.205383 671.870056) 1635 POINT(897.9198 741.622009) 1636 POINT(176.039841 593.88623) 1637 POINT(153.546844 551.046448) 1638 POINT(309.245758 895.542908) 1639 POINT(957.279907 672.634094) 1640 POINT(141.934113 439.734161) 1641 POINT(52.5162811 897.971191) 1642 POINT(958.93512 617.379211) 1643 POINT(231.71553 327.990845) 1644 POINT(203.809464 521.990845) 1645 POINT(839.778503 213.372421) 1646 POINT(44.9247284 214.083939) 1647 POINT(725.935913 561.84082) 1648 POINT(687.54248 866.769348) 1649 POINT(531.091003 949.014832) 1650 POINT(640.364441 963.613647) 1651 POINT(328.806366 960.668701) 1652 POINT(912.005432 307.158539) 1653 POINT(739.400818 887.69635) 1654 POINT(14.4599762 72.0544739) 1655 POINT(400.313049 660.425415) 1656 POINT(887.006409 821.854004) 1657 POINT(622.502869 781.579895) 1658 POINT(578.469849 515.053528) 1659 POINT(790.828735 948.097839) 1660 POINT(94.7832794 406.496826) 1661 POINT(502.821442 657.792664) 1662 POINT(41.9195175 147.935074) 1663 POINT(89.9522324 909.712402) 1664 POINT(84.2091904 690.153381) 1665 POINT(361.373077 924.86908) 1666 POINT(260.631439 63.0488091) 1667 POINT(563.3255 950.241577) 1668 POINT(525.809875 174.408401) 1669 POINT(397.224701 742.71344) 1670 POINT(630.238159 228.559372) 1671 POINT(803.215698 355.610931) 1672 POINT(450.891022 668.831604) 1673 POINT(239.269836 729.112061) 1674 POINT(907.16803 29.802042) 1675 POINT(592.283081 192.978745) 1676 POINT(629.517761 224.118561) 1677 POINT(198.902939 967.423645) 1678 POINT(23.6613827 452.492676) 1679 POINT(859.836243 752.688477) 1680 POINT(429.783936 622.994568) 1681 POINT(160.180542 452.930786) 1682 POINT(804.197205 296.494293) 1683 POINT(896.012695 423.770386) 1684 POINT(44.7542915 279.009735) 1685 POINT(318.314484 569.43512) 1686 POINT(487.779114 989.506775) 1687 POINT(181.700928 364.594391) 1688 POINT(673.657959 214.642792) 1689 POINT(997.85144 923.031189) 1690 POINT(613.851013 281.960419) 1691 POINT(290.657318 581.254456) 1692 POINT(100.357018 642.669434) 1693 POINT(208.650269 876.595337) 1694 POINT(139.181656 347.557312) 1695 POINT(325.151093 58.4897118) 1696 POINT(124.8088 558.541016) 1697 POINT(430.776215 426.377838) 1698 POINT(618.879517 588.320007) 1699 POINT(257.604828 401.425018) 1700 POINT(472.186707 666.557861) 1701 POINT(358.689789 641.187195) 1702 POINT(906.768005 748.669556) 1703 POINT(368.079865 41.1399918) 1704 POINT(129.518799 908.910461) 1705 POINT(980.614685 745.008118) 1706 POINT(108.672188 779.96991) 1707 POINT(691.089966 433.052246) 1708 POINT(541.149109 844.201416) 1709 POINT(420.727966 65.4959259) 1710 POINT(456.738525 265.139496) 1711 POINT(15.1079769 834.326538) 1712 POINT(732.022278 130.849792) 1713 POINT(429.823059 493.641113) 1714 POINT(363.729156 112.344986) 1715 POINT(514.264648 184.999344) 1716 POINT(221.736572 410.818085) 1717 POINT(274.353912 803.999939) 1718 POINT(163.302704 657.455872) 1719 POINT(534.119629 337.233032) 1720 POINT(542.506531 960.391968) 1721 POINT(44.2767982 170.238907) 1722 POINT(945.613708 276.85318) 1723 POINT(402.019592 378.092743) 1724 POINT(280.621277 577.281616) 1725 POINT(76.8633499 477.341034) 1726 POINT(457.133759 105.349571) 1727 POINT(387.439484 73.4632797) 1728 POINT(823.67981 307.102112) 1729 POINT(276.66748 579.675293) 1730 POINT(249.41655 478.391113) 1731 POINT(98.836998 524.20166) 1732 POINT(414.830566 777.330139) 1733 POINT(601.085083 483.230713) 1734 POINT(133.600815 273.377167) 1735 POINT(670.932007 970.346741) 1736 POINT(690.437012 103.123138) 1737 POINT(876.45459 540.668762) 1738 POINT(525.763916 411.846497) 1739 POINT(69.9566879 305.183533) 1740 POINT(609.036438 556.925354) 1741 POINT(411.403595 139.449142) 1742 POINT(452.810486 402.443817) 1743 POINT(724.304199 268.187805) 1744 POINT(567.155579 452.575684) 1745 POINT(582.154175 36.1359787) 1746 POINT(829.400085 953.993591) 1747 POINT(474.13623 474.351196) 1748 POINT(541.489807 984.669495) 1749 POINT(678.758789 444.092133) 1750 POINT(113.488373 368.672729) 1751 POINT(525.893677 407.115265) 1752 POINT(297.151093 85.2180176) 1753 POINT(821.74469 217.121918) 1754 POINT(601.37616 637.187988) 1755 POINT(696.286621 253.118607) 1756 POINT(58.1310692 712.185059) 1757 POINT(685.403748 988.223328) 1758 POINT(432.732513 901.026917) 1759 POINT(735.222351 989.187988) 1760 POINT(548.825562 368.272614) 1761 POINT(96.972084 920.46283) 1762 POINT(841.875732 221.267075) 1763 POINT(928.264709 445.480743) 1764 POINT(984.408264 63.3644142) 1765 POINT(320.201965 806.087158) 1766 POINT(313.669464 399.089844) 1767 POINT(496.597809 163.413193) 1768 POINT(413.038483 380.325409) 1769 POINT(977.335022 610.338257) 1770 POINT(80.7090683 930.062195) 1771 POINT(536.103699 742.984436) 1772 POINT(794.333923 781.395569) 1773 POINT(115.245987 198.039124) 1774 POINT(833.044556 42.4106216) 1775 POINT(367.04303 31.3339138) 1776 POINT(336.232025 801.203979) 1777 POINT(879.531433 903.869019) 1778 POINT(602.507385 168.928711) 1779 POINT(201.962723 942.845886) 1780 POINT(906.312073 312.469421) 1781 POINT(624.577454 811.349915) 1782 POINT(530.777405 132.820816) 1783 POINT(981.836426 920.841003) 1784 POINT(783.842651 621.741333) 1785 POINT(58.1477394 90.9158554) 1786 POINT(633.647583 789.700928) 1787 POINT(79.0769577 51.8719711) 1788 POINT(625.266418 755.07605) 1789 POINT(195.790619 514.038757) 1790 POINT(733.514038 861.128479) 1791 POINT(320.942322 625.866943) 1792 POINT(278.528717 927.330505) 1793 POINT(483.372223 308.237122) 1794 POINT(447.939331 219.476883) 1795 POINT(447.989594 498.84021) 1796 POINT(0.600947917 853.795166) 1797 POINT(435.30069 846.893372) 1798 POINT(494.206909 939.595825) 1799 POINT(689.614502 959.617004) 1800 POINT(707.747009 259.177795) 1801 POINT(531.513245 278.159729) 1802 POINT(598.105835 19.6404648) 1803 POINT(612.346619 927.995239) 1804 POINT(119.524361 666.487671) 1805 POINT(918.057556 88.831665) 1806 POINT(979.753845 791.607056) 1807 POINT(776.452942 218.994385) 1808 POINT(45.2079773 307.159271) 1809 POINT(664.104187 771.921082) 1810 POINT(730.088989 691.526428) 1811 POINT(22.536005 296.316803) 1812 POINT(605.269775 783.79425) 1813 POINT(942.487061 220.762527) 1814 POINT(388.727631 239.932251) 1815 POINT(402.195251 407.875366) 1816 POINT(880.742249 938.187927) 1817 POINT(521.37561 207.837204) 1818 POINT(687.210754 795.134705) 1819 POINT(865.452209 247.215927) 1820 POINT(339.740234 229.84758) 1821 POINT(381.439789 323.100952) 1822 POINT(731.226624 884.99353) 1823 POINT(822.524902 316.890839) 1824 POINT(403.108643 813.997192) 1825 POINT(105.877243 44.4543343) 1826 POINT(861.221619 697.300171) 1827 POINT(608.667603 983.31604) 1828 POINT(680.112183 423.103668) 1829 POINT(929.930542 192.094437) 1830 POINT(52.8789597 614.540283) 1831 POINT(698.176147 807.370483) 1832 POINT(730.275269 102.247269) 1833 POINT(982.028992 878.839111) 1834 POINT(997.267395 515.724731) 1835 POINT(237.291702 110.974136) 1836 POINT(688.92749 826.199585) 1837 POINT(300.44751 210.116562) 1838 POINT(935.03009 936.139038) 1839 POINT(95.6178284 897.105652) 1840 POINT(731.705444 34.8603058) 1841 POINT(667.384216 410.16449) 1842 POINT(909.80603 75.2766495) 1843 POINT(171.799835 179.199631) 1844 POINT(147.205368 163.743088) 1845 POINT(166.614059 755.084229) 1846 POINT(353.146088 73.8845901) 1847 POINT(131.597031 495.587616) 1848 POINT(737.178772 317.49115) 1849 POINT(641.385498 678.747437) 1850 POINT(816.505066 942.964905) 1851 POINT(105.112076 885.625793) 1852 POINT(370.105835 336.940552) 1853 POINT(905.983887 684.154419) 1854 POINT(225.463577 20.7386875) 1855 POINT(124.823921 886.376709) 1856 POINT(776.679443 644.039307) 1857 POINT(647.393921 240.694) 1858 POINT(247.151505 857.993896) 1859 POINT(247.204117 172.191025) 1860 POINT(94.6755447 413.969696) 1861 POINT(442.750305 676.857361) 1862 POINT(233.91716 987.902283) 1863 POINT(368.078735 304.259674) 1864 POINT(245.882629 820.108765) 1865 POINT(213.774323 188.30928) 1866 POINT(734.605042 123.304672) 1867 POINT(715.531006 683.185852) 1868 POINT(959.207458 325.003174) 1869 POINT(741.151917 472.821747) 1870 POINT(749.376221 942.627747) 1871 POINT(884.022705 204.850266) 1872 POINT(141.770035 249.321762) 1873 POINT(569.81604 176.427109) 1874 POINT(744.825989 775.009766) 1875 POINT(59.5451469 308.321716) 1876 POINT(343.745422 140.789154) 1877 POINT(750.354553 289.248383) 1878 POINT(943.221985 175.877274) 1879 POINT(777.993408 74.2903595) 1880 POINT(262.906403 786.392944) 1881 POINT(382.272095 864.816895) 1882 POINT(553.009277 596.126953) 1883 POINT(157.589828 783.478149) 1884 POINT(591.265076 63.695385) 1885 POINT(851.592529 953.288879) 1886 POINT(417.295929 91.233902) 1887 POINT(51.0667152 876.707214) 1888 POINT(18.9077911 210.869995) 1889 POINT(988.296936 436.823181) 1890 POINT(22.8555183 291.018555) 1891 POINT(974.449463 571.78418) 1892 POINT(879.062378 510.122864) 1893 POINT(108.348373 534.485413) 1894 POINT(934.251587 656.470825) 1895 POINT(986.665771 487.083466) 1896 POINT(743.632874 825.446716) 1897 POINT(50.5643501 104.394218) 1898 POINT(496.010651 386.942871) 1899 POINT(917.83783 497.69104) 1900 POINT(259.880737 913.195435) 1901 POINT(870.354126 512.427246) 1902 POINT(80.3397141 209.186142) 1903 POINT(473.998657 707.195679) 1904 POINT(656.628906 932.755737) 1905 POINT(810.346985 759.65625) 1906 POINT(248.705093 679.123352) 1907 POINT(782.105408 856.690918) 1908 POINT(642.308228 124.631432) 1909 POINT(532.194458 764.781555) 1910 POINT(942.659424 557.908264) 1911 POINT(881.605957 712.278503) 1912 POINT(867.363037 194.545654) 1913 POINT(364.338379 183.189194) 1914 POINT(222.624191 285.74234) 1915 POINT(517.447571 973.339844) 1916 POINT(729.976135 544.703735) 1917 POINT(497.292999 910.853333) 1918 POINT(132.905472 570.079346) 1919 POINT(344.29953 26.0695381) 1920 POINT(66.770668 127.150597) 1921 POINT(640.998962 469.160522) 1922 POINT(987.040466 629.265198) 1923 POINT(312.894104 430.239594) 1924 POINT(189.089874 359.194397) 1925 POINT(648.063171 795.83197) 1926 POINT(739.643555 688.32196) 1927 POINT(576.773376 371.892487) 1928 POINT(800.652161 237.156723) 1929 POINT(2.2073338 577.472961) 1930 POINT(139.239731 910.501343) 1931 POINT(731.361877 440.635162) 1932 POINT(563.823975 512.250427) 1933 POINT(873.005249 150.879379) 1934 POINT(41.144825 66.3957214) 1935 POINT(577.168335 997.433533) 1936 POINT(469.448364 551.173218) 1937 POINT(645.997742 173.082779) 1938 POINT(600.271484 891.80835) 1939 POINT(885.05188 87.2847137) 1940 POINT(709.111633 294.046204) 1941 POINT(451.529877 714.217529) 1942 POINT(60.8102837 266.25058) 1943 POINT(833.871765 320.868256) 1944 POINT(448.92746 543.613403) 1945 POINT(236.165527 162.644806) 1946 POINT(513.055664 55.8452682) 1947 POINT(889.471558 400.257324) 1948 POINT(760.361023 672.15979) 1949 POINT(347.290161 348.369904) 1950 POINT(297.217316 707.581909) 1951 POINT(898.832825 995.994507) 1952 POINT(976.313232 716.392273) 1953 POINT(434.52124 588.640259) 1954 POINT(699.876404 456.281647) 1955 POINT(84.363945 496.315399) 1956 POINT(909.628601 745.568481) 1957 POINT(710.803589 938.714661) 1958 POINT(210.818695 311.2948) 1959 POINT(440.675751 744.028442) 1960 POINT(696.386597 334.44693) 1961 POINT(261.575043 791.143677) 1962 POINT(886.294189 826.868286) 1963 POINT(759.824829 252.537643) 1964 POINT(507.781708 950.170532) 1965 POINT(142.144257 108.504677) 1966 POINT(299.325775 28.2828979) 1967 POINT(140.891342 549.71875) 1968 POINT(12.0917845 70.9859161) 1969 POINT(461.432587 997.385376) 1970 POINT(148.507797 765.276123) 1971 POINT(375.889038 236.83931) 1972 POINT(262.180969 894.738586) 1973 POINT(514.487366 35.5113487) 1974 POINT(843.806946 194.928818) 1975 POINT(46.3884392 69.4364471) 1976 POINT(634.177673 566.37384) 1977 POINT(296.683441 749.265564) 1978 POINT(291.197357 58.1093521) 1979 POINT(513.867554 868.045288) 1980 POINT(549.413757 956.212219) 1981 POINT(409.287109 905.447998) 1982 POINT(657.532898 906.731689) 1983 POINT(241.686462 348.895782) 1984 POINT(974.406494 154.557495) 1985 POINT(449.063629 828.976318) 1986 POINT(112.879318 463.499176) 1987 POINT(47.7157326 28.1730537) 1988 POINT(112.610405 13.2341461) 1989 POINT(463.869049 787.329529) 1990 POINT(419.599396 851.468567) 1991 POINT(954.030396 198.162964) 1992 POINT(276.860382 260.939758) 1993 POINT(951.673035 592.887695) 1994 POINT(765.805054 517.684265) 1995 POINT(273.71524 599.580933) 1996 POINT(662.874329 946.838318) 1997 POINT(182.218231 965.924011) 1998 POINT(425.359375 293.295624) 1999 POINT(454.70929 821.608398) 2000 POINT(631.877441 225.607483) 2001 POINT(328.529602 873.854309) 2002 POINT(667.434082 181.984589) 2003 POINT(986.749695 649.638672) 2004 POINT(154.356705 787.194214) 2005 POINT(9.7443161 16.4534836) 2006 POINT(835.69519 149.195816) 2007 POINT(369.859711 550.45929) 2008 POINT(267.148438 555.819519) 2009 POINT(367.240997 862.09845) 2010 POINT(670.513428 396.574036) 2011 POINT(741.455933 235.576096) 2012 POINT(752.507996 635.315247) 2013 POINT(722.805176 156.698532) 2014 POINT(757.16272 349.178619) 2015 POINT(264.035248 775.608704) 2016 POINT(760.505371 861.661621) 2017 POINT(200.575119 624.826477) 2018 POINT(448.793945 857.459106) 2019 POINT(786.532288 52.1663132) 2020 POINT(765.036377 738.636414) 2021 POINT(433.769989 661.664917) 2022 POINT(735.037964 921.638855) 2023 POINT(609.823486 428.33667) 2024 POINT(68.9332962 978.773438) 2025 POINT(622.71106 174.73378) 2026 POINT(305.415314 583.069214) 2027 POINT(410.484375 394.899445) 2028 POINT(55.1056557 349.367828) 2029 POINT(762.402954 375.966766) 2030 POINT(491.297974 495.279968) 2031 POINT(506.791321 606.60083) 2032 POINT(518.336243 32.0553093) 2033 POINT(815.951233 247.55571) 2034 POINT(860.990479 86.8650589) 2035 POINT(687.090515 161.303513) 2036 POINT(706.302368 244.530548) 2037 POINT(974.349304 609.083801) 2038 POINT(989.566956 159.009094) 2039 POINT(763.040527 194.551697) 2040 POINT(148.589081 444.259705) 2041 POINT(913.676331 198.819824) 2042 POINT(328.421387 222.37117) 2043 POINT(858.867432 863.068604) 2044 POINT(958.904846 36.5807114) 2045 POINT(137.504547 948.647766) 2046 POINT(159.059113 871.209045) 2047 POINT(202.654053 572.929443) 2048 POINT(58.4063339 143.374405) 2049 POINT(75.3240356 679.956238) 2050 POINT(331.476685 17.0393562) 2051 POINT(846.817871 871.630249) 2052 POINT(686.984558 653.528198) 2053 POINT(597.048096 776.91571) 2054 POINT(859.549194 859.79425) 2055 POINT(312.315125 767.998352) 2056 POINT(644.558716 472.703461) 2057 POINT(999.173279 3.92185807) 2058 POINT(474.162842 61.3486938) 2059 POINT(624.741028 369.868805) 2060 POINT(935.871094 617.45636) 2061 POINT(319.922974 525.584656) 2062 POINT(919.402161 704.456604) 2063 POINT(590.379395 636.674927) 2064 POINT(879.969543 557.552002) 2065 POINT(48.7142944 360.495544) 2066 POINT(117.920303 269.548676) 2067 POINT(446.387115 732.580566) 2068 POINT(289.512299 0.348779202) 2069 POINT(909.542297 954.10553) 2070 POINT(328.693115 42.507515) 2071 POINT(211.682434 935.506104) 2072 POINT(25.2214565 132.4216) 2073 POINT(418.387146 291.399323) 2074 POINT(73.675148 78.4516678) 2075 POINT(163.73793 308.37738) 2076 POINT(87.2607498 186.129242) 2077 POINT(341.504303 986.651489) 2078 POINT(919.449097 89.7221985) 2079 POINT(871.36322 371.154205) 2080 POINT(418.005157 82.6217041) 2081 POINT(14.4683943 85.4029312) 2082 POINT(165.77832 400.680939) 2083 POINT(124.693481 825.670349) 2084 POINT(759.617554 817.821716) 2085 POINT(721.096741 892.897217) 2086 POINT(115.043289 417.593048) 2087 POINT(920.98468 980.044006) 2088 POINT(235.041412 204.204254) 2089 POINT(976.88855 3.56731939) 2090 POINT(874.863159 898.780518) 2091 POINT(388.447113 895.394775) 2092 POINT(802.465027 558.735962) 2093 POINT(613.37207 847.765991) 2094 POINT(580.77356 678.397583) 2095 POINT(160.233505 434.828796) 2096 POINT(371.007172 936.126953) 2097 POINT(17.7605362 494.783691) 2098 POINT(516.652588 396.593018) 2099 POINT(246.829697 333.131409) 2100 POINT(159.31955 546.585083) 2101 POINT(746.575012 155.299698) 2102 POINT(857.656433 219.487808) 2103 POINT(897.479004 125.33168) 2104 POINT(828.99762 68.5521927) 2105 POINT(2.40115595 811.764099) 2106 POINT(663.747498 494.311981) 2107 POINT(289.904175 273.281647) 2108 POINT(31.1352386 669.442017) 2109 POINT(139.702927 671.809021) 2110 POINT(311.467255 778.206848) 2111 POINT(142.473724 111.61805) 2112 POINT(267.054932 681.18689) 2113 POINT(448.62619 687.640015) 2114 POINT(767.42688 703.614624) 2115 POINT(504.092102 297.95163) 2116 POINT(383.190674 42.4401245) 2117 POINT(954.981079 213.459396) 2118 POINT(979.058716 698.839539) 2119 POINT(44.4761772 296.855804) 2120 POINT(595.295227 815.57074) 2121 POINT(870.100891 983.325012) 2122 POINT(186.492096 669.281372) 2123 POINT(141.113007 53.2023659) 2124 POINT(668.589111 314.124786) 2125 POINT(626.033508 983.449646) 2126 POINT(143.9879 363.002563) 2127 POINT(939.077148 417.619293) 2128 POINT(768.164917 635.217957) 2129 POINT(139.526825 465.797974) 2130 POINT(80.1850586 293.708588) 2131 POINT(346.017975 75.3216705) 2132 POINT(537.903625 681.362366) 2133 POINT(62.53125 303.938721) 2134 POINT(723.484192 774.881104) 2135 POINT(617.010986 699.293457) 2136 POINT(166.357727 77.5197144) 2137 POINT(297.446259 127.462692) 2138 POINT(872.213074 830.720642) 2139 POINT(782.598877 799.774536) 2140 POINT(554.498779 741.712341) 2141 POINT(982.098511 187.877304) 2142 POINT(798.788452 492.717926) 2143 POINT(678.232788 274.2341) 2144 POINT(212.923691 251.312485) 2145 POINT(482.44574 706.740784) 2146 POINT(242.910477 265.087341) 2147 POINT(744.454163 975.48761) 2148 POINT(185.059616 562.168945) 2149 POINT(670.258484 535.900818) 2150 POINT(870.894836 347.960876) 2151 POINT(84.5434113 710.341248) 2152 POINT(118.100975 84.0198288) 2153 POINT(908.539734 320.053314) 2154 POINT(856.568787 544.15332) 2155 POINT(489.992645 957.124939) 2156 POINT(584.859558 593.179016) 2157 POINT(719.200256 993.439209) 2158 POINT(673.727417 643.475647) 2159 POINT(274.04245 247.700668) 2160 POINT(897.402466 972.272705) 2161 POINT(65.5154648 365.348267) 2162 POINT(280.966827 477.985535) 2163 POINT(789.656799 598.01001) 2164 POINT(947.298218 306.841797) 2165 POINT(546.147095 753.200745) 2166 POINT(626.78125 772.229553) 2167 POINT(450.691589 590.951111) 2168 POINT(57.4877968 439.915192) 2169 POINT(568.020813 107.329308) 2170 POINT(806.131226 374.444977) 2171 POINT(923.646118 716.351807) 2172 POINT(437.240479 688.197021) 2173 POINT(742.10907 838.184998) 2174 POINT(259.26062 447.852814) 2175 POINT(912.268921 355.032593) 2176 POINT(594.352356 57.3017082) 2177 POINT(329.175995 604.542664) 2178 POINT(119.359962 725.588989) 2179 POINT(618.422607 357.429382) 2180 POINT(977.688171 958.507751) 2181 POINT(551.799072 650.38269) 2182 POINT(187.745026 988.483337) 2183 POINT(529.995483 511.972137) 2184 POINT(198.364365 125.792053) 2185 POINT(984.490051 888.478149) 2186 POINT(43.5385017 511.810486) 2187 POINT(660.278992 324.393127) 2188 POINT(409.31543 159.444183) 2189 POINT(35.4954567 820.316956) 2190 POINT(479.413971 345.301849) 2191 POINT(743.115601 436.363831) 2192 POINT(810.681396 881.350281) 2193 POINT(741.864563 554.840576) 2194 POINT(795.78125 940.120056) 2195 POINT(174.251221 700.337341) 2196 POINT(792.399292 477.07428) 2197 POINT(713.63147 642.583679) 2198 POINT(482.862457 817.162903) 2199 POINT(681.712097 397.198456) 2200 POINT(925.577515 221.153992) 2201 POINT(83.4642181 177.14769) 2202 POINT(473.428741 682.977417) 2203 POINT(806.656616 334.3013) 2204 POINT(870.676147 434.568146) 2205 POINT(744.892944 632.54657) 2206 POINT(458.53772 642.72821) 2207 POINT(281.037292 593.69989) 2208 POINT(283.212463 207.120056) 2209 POINT(995.236755 202.811264) 2210 POINT(724.431946 934.078796) 2211 POINT(299.538605 513.854736) 2212 POINT(966.656189 332.52179) 2213 POINT(938.60553 989.34314) 2214 POINT(590.829102 911.509155) 2215 POINT(500.641937 82.8238144) 2216 POINT(847.373596 850.253052) 2217 POINT(649.862976 241.857193) 2218 POINT(809.155212 847.505493) 2219 POINT(195.299377 296.924072) 2220 POINT(827.926147 565.806763) 2221 POINT(152.192719 0.357841462) 2222 POINT(213.841782 485.223663) 2223 POINT(11.5821581 196.075378) 2224 POINT(212.722717 929.722961) 2225 POINT(718.918335 908.44104) 2226 POINT(510.628876 176.640976) 2227 POINT(659.802063 225.515579) 2228 POINT(193.972534 695.852112) 2229 POINT(874.486206 672.319214) 2230 POINT(332.885925 870.874878) 2231 POINT(964.986694 293.302063) 2232 POINT(836.078186 850.577454) 2233 POINT(740.026794 625.315308) 2234 POINT(600.282654 179.262344) 2235 POINT(662.223022 393.99173) 2236 POINT(103.055847 407.264587) 2237 POINT(45.6690521 124.176147) 2238 POINT(773.712463 236.956558) 2239 POINT(705.265137 951.117615) 2240 POINT(736.264038 793.996826) 2241 POINT(214.789108 51.4042778) 2242 POINT(816.191467 105.211884) 2243 POINT(999.93634 94.5572281) 2244 POINT(208.667267 727.693298) 2245 POINT(414.63382 526.910889) 2246 POINT(541.526489 14.192852) 2247 POINT(541.23822 933.614014) 2248 POINT(557.057373 663.9953) 2249 POINT(363.2659 42.6436768) 2250 POINT(560.864746 833.055908) 2251 POINT(906.710693 512.610413) 2252 POINT(625.099304 139.84581) 2253 POINT(984.536316 625.443848) 2254 POINT(221.810196 772.21759) 2255 POINT(938.472351 543.016724) 2256 POINT(137.764862 584.477478) 2257 POINT(710.797302 306.240051) 2258 POINT(775.609985 472.136475) 2259 POINT(232.500977 194.61705) 2260 POINT(71.661438 464.560547) 2261 POINT(347.326416 127.78685) 2262 POINT(504.985535 313.600006) 2263 POINT(746.098389 197.940582) 2264 POINT(985.960205 950.554443) 2265 POINT(932.940552 158.507294) 2266 POINT(698.503052 996.422424) 2267 POINT(433.115387 261.161896) 2268 POINT(335.071808 643.843384) 2269 POINT(958.037109 496.601837) 2270 POINT(166.948975 176.622604) 2271 POINT(321.396942 336.901703) 2272 POINT(296.91333 288.026703) 2273 POINT(634.305786 46.4357376) 2274 POINT(462.994934 226.565979) 2275 POINT(858.038818 587.835144) 2276 POINT(319.556732 802.773376) 2277 POINT(649.613403 928.319824) 2278 POINT(87.5087814 988.218018) 2279 POINT(665.430847 994.742065) 2280 POINT(414.242493 424.939331) 2281 POINT(987.072815 743.150696) 2282 POINT(744.187256 726.571167) 2283 POINT(74.694725 426.609344) 2284 POINT(204.188782 219.184433) 2285 POINT(939.061584 554.977661) 2286 POINT(138.756516 358.470795) 2287 POINT(933.006287 649.622986) 2288 POINT(876.321411 729.116821) 2289 POINT(404.968842 377.41626) 2290 POINT(909.807678 431.480438) 2291 POINT(217.425964 190.363373) 2292 POINT(476.994995 80.0292816) 2293 POINT(925.700867 153.928116) 2294 POINT(25.4038658 258.090057) 2295 POINT(930.243652 188.243759) 2296 POINT(442.971405 415.582855) 2297 POINT(678.489136 707.340698) 2298 POINT(382.916077 72.4853134) 2299 POINT(599.476135 373.209625) 2300 POINT(865.366272 153.331665) 2301 POINT(832.298157 900.579651) 2302 POINT(409.115967 70.2599945) 2303 POINT(463.039917 86.9413071) 2304 POINT(746.970703 177.771347) 2305 POINT(247.14119 298.439972) 2306 POINT(173.372726 715.867859) 2307 POINT(76.2528381 829.28064) 2308 POINT(432.299255 754.633301) 2309 POINT(489.867523 949.322571) 2310 POINT(898.872681 758.273743) 2311 POINT(649.702881 156.327866) 2312 POINT(464.911926 646.43573) 2313 POINT(534.494629 516.21521) 2314 POINT(785.100342 982.178833) 2315 POINT(898.153625 882.631592) 2316 POINT(358.002197 636.841431) 2317 POINT(316.915283 877.79718) 2318 POINT(739.388855 840.357544) 2319 POINT(561.039429 447.122314) 2320 POINT(151.93895 430.161774) 2321 POINT(521.8172 493.400635) 2322 POINT(956.170532 762.059143) 2323 POINT(41.2365456 990.914551) 2324 POINT(176.395599 682.384094) 2325 POINT(593.912354 279.660431) 2326 POINT(279.624969 113.090569) 2327 POINT(801.178284 164.831497) 2328 POINT(134.894257 741.391113) 2329 POINT(986.078369 482.038361) 2330 POINT(938.746399 495.110138) 2331 POINT(254.015808 935.480896) 2332 POINT(486.039246 526.57782) 2333 POINT(83.7746658 41.0076103) 2334 POINT(553.41925 314.82782) 2335 POINT(892.409119 690.93811) 2336 POINT(108.408394 861.860901) 2337 POINT(78.1020889 250.535675) 2338 POINT(275.912262 328.21991) 2339 POINT(308.66449 760.568848) 2340 POINT(405.016785 491.11615) 2341 POINT(299.133392 85.6048737) 2342 POINT(554.272827 170.531189) 2343 POINT(577.319092 58.2510529) 2344 POINT(328.462433 951.366333) 2345 POINT(166.649704 435.861938) 2346 POINT(282.421631 719.751282) 2347 POINT(194.905045 934.230713) 2348 POINT(289.308868 456.582886) 2349 POINT(967.17572 624.089111) 2350 POINT(36.3189659 509.415833) 2351 POINT(401.507904 478.074615) 2352 POINT(547.954834 953.752258) 2353 POINT(124.214043 11.0406332) 2354 POINT(686.395386 305.997803) 2355 POINT(244.869156 453.657959) 2356 POINT(484.186676 552.898315) 2357 POINT(492.837738 192.291275) 2358 POINT(923.507141 396.817413) 2359 POINT(190.162399 766.852844) 2360 POINT(88.8041992 604.039978) 2361 POINT(480.306458 278.093018) 2362 POINT(139.000351 96.3140793) 2363 POINT(427.208008 867.559021) 2364 POINT(128.156403 796.603333) 2365 POINT(471.130951 13.8397818) 2366 POINT(659.034546 471.687134) 2367 POINT(281.772888 769.945251) 2368 POINT(695.118408 790.595642) 2369 POINT(118.017654 46.5899963) 2370 POINT(549.140625 313.326752) 2371 POINT(298.734344 438.246796) 2372 POINT(278.986298 53.8884888) 2373 POINT(549.382751 472.199463) 2374 POINT(77.0545349 931.120117) 2375 POINT(632.271362 130.189941) 2376 POINT(61.9623909 776.246094) 2377 POINT(439.633728 907.967773) 2378 POINT(450.191742 444.632111) 2379 POINT(351.877441 916.091919) 2380 POINT(881.347717 958.273499) 2381 POINT(190.173218 727.303284) 2382 POINT(628.694885 853.323975) 2383 POINT(152.873627 998.91095) 2384 POINT(184.255112 32.2491684) 2385 POINT(177.088669 765.76416) 2386 POINT(855.810181 322.387024) 2387 POINT(746.232422 648.99762) 2388 POINT(345.600769 661.844543) 2389 POINT(135.748627 761.932251) 2390 POINT(44.4159622 800.433472) 2391 POINT(894.905945 537.025208) 2392 POINT(920.327148 689.023926) 2393 POINT(273.034363 31.9315243) 2394 POINT(311.84848 297.198975) 2395 POINT(662.484985 999.553345) 2396 POINT(757.256775 548.954285) 2397 POINT(624.693481 393.000366) 2398 POINT(764.74054 892.577637) 2399 POINT(944.898132 303.906311) 2400 POINT(414.670197 857.547363) 2401 POINT(508.309875 149.382599) 2402 POINT(101.407402 822.721741) 2403 POINT(766.99292 292.522583) 2404 POINT(986.647766 291.291779) 2405 POINT(661.64209 32.9003296) 2406 POINT(721.386597 794.60553) 2407 POINT(143.223923 881.660645) 2408 POINT(274.409729 325.324371) 2409 POINT(801.590454 350.925385) 2410 POINT(810.057007 17.3629742) 2411 POINT(525.305542 765.321167) 2412 POINT(218.334869 873.228516) 2413 POINT(890.810486 236.066833) 2414 POINT(300.833984 306.877106) 2415 POINT(989.569824 332.47229) 2416 POINT(644.032166 380.835754) 2417 POINT(356.998322 814.743591) 2418 POINT(708.257019 19.509594) 2419 POINT(352.902466 244.14299) 2420 POINT(669.787048 466.34613) 2421 POINT(874.131409 315.913177) 2422 POINT(572.35675 501.525024) 2423 POINT(348.513855 336.673187) 2424 POINT(572.8974 770.372559) 2425 POINT(85.4560928 626.578674) 2426 POINT(658.008606 202.677856) 2427 POINT(841.432739 518.388855) 2428 POINT(518.860657 282.052765) 2429 POINT(824.77124 567.297729) 2430 POINT(112.551453 595.594055) 2431 POINT(818.495667 109.194611) 2432 POINT(320.068573 41.161232) 2433 POINT(975.563843 208.769714) 2434 POINT(500.767639 566.993652) 2435 POINT(548.73584 636.054382) 2436 POINT(309.611633 781.194031) 2437 POINT(96.8127289 879.676575) 2438 POINT(8.39414215 2.46425819) 2439 POINT(877.45874 442.056213) 2440 POINT(490.989655 774.686646) 2441 POINT(339.781677 126.307739) 2442 POINT(133.652283 873.409912) 2443 POINT(90.9255524 592.734375) 2444 POINT(355.97171 869.564941) 2445 POINT(981.882812 776.097961) 2446 POINT(870.855652 252.963852) 2447 POINT(168.446121 470.54892) 2448 POINT(150.542664 464.119263) 2449 POINT(111.69857 430.060028) 2450 POINT(730.974609 337.066833) 2451 POINT(524.818237 136.89827) 2452 POINT(912.819458 958.228577) 2453 POINT(613.507568 163.195999) 2454 POINT(941.107605 727.578491) 2455 POINT(538.431396 10.7679176) 2456 POINT(307.015503 39.752636) 2457 POINT(620.168945 947.32135) 2458 POINT(818.128418 946.201416) 2459 POINT(258.98645 664.094666) 2460 POINT(133.977356 17.5486336) 2461 POINT(29.9757881 327.338593) 2462 POINT(621.349976 391.162964) 2463 POINT(693.665466 566.151978) 2464 POINT(411.511536 296.356995) 2465 POINT(516.098083 179.84819) 2466 POINT(154.864502 723.013062) 2467 POINT(981.719177 422.739655) 2468 POINT(86.6670227 3.841362) 2469 POINT(696.491577 962.086548) 2470 POINT(12.2915068 971.561401) 2471 POINT(584.820801 350.685516) 2472 POINT(767.332397 726.356018) 2473 POINT(777.657776 719.531799) 2474 POINT(634.983887 492.890076) 2475 POINT(344.170441 504.146423) 2476 POINT(341.952515 287.553314) 2477 POINT(37.3983307 262.120178) 2478 POINT(289.313995 273.542725) 2479 POINT(885.214172 926.419189) 2480 POINT(993.865356 512.732544) 2481 POINT(969.713501 341.867096) 2482 POINT(659.48114 978.405212) 2483 POINT(386.976898 339.451294) 2484 POINT(910.704102 961.871338) 2485 POINT(779.254333 368.789032) 2486 POINT(999.352173 569.456909) 2487 POINT(175.389633 302.965912) 2488 POINT(939.50592 685.569153) 2489 POINT(183.243942 187.372757) 2490 POINT(690.168457 284.484833) 2491 POINT(948.625732 676.093506) 2492 POINT(544.613098 160.671021) 2493 POINT(155.541977 702.441772) 2494 POINT(610.52002 258.019073) 2495 POINT(697.342041 596.628113) 2496 POINT(688.147949 696.130798) 2497 POINT(330.534912 691.119568) 2498 POINT(940.812073 91.1589813) 2499 POINT(543.854858 256.503906) 2500 POINT(671.789307 764.709412) 2501 POINT(273.791046 966.692078) 2502 POINT(896.514954 232.627014) 2503 POINT(791.663391 596.8125) 2504 POINT(553.771179 912.394958) 2505 POINT(721.92804 170.522873) 2506 POINT(412.812225 120.298119) 2507 POINT(450.365356 671.660095) 2508 POINT(486.472321 124.969215) 2509 POINT(195.898468 859.776367) 2510 POINT(987.830994 650.618774) 2511 POINT(380.8927 837.388733) 2512 POINT(207.658737 789.935425) 2513 POINT(99.9061279 231.555283) 2514 POINT(732.457336 692.743042) 2515 POINT(992.128906 112.162697) 2516 POINT(962.387512 682.059387) 2517 POINT(532.424561 778.160889) 2518 POINT(171.812592 44.8763809) 2519 POINT(112.350479 20.648241) 2520 POINT(332.775024 722.067139) 2521 POINT(556.296021 403.536194) 2522 POINT(496.784729 442.234009) 2523 POINT(257.570099 989.490601) 2524 POINT(809.278687 610.579834) 2525 POINT(601.647888 47.5526733) 2526 POINT(773.579651 969.181946) 2527 POINT(23.7396202 891.519409) 2528 POINT(449.835541 823.156799) 2529 POINT(8.37062168 662.654175) 2530 POINT(85.0783386 502.545502) 2531 POINT(740.905884 650.090088) 2532 POINT(642.147949 867.355225) 2533 POINT(454.159546 466.472137) 2534 POINT(699.855408 618.732544) 2535 POINT(844.793518 909.695068) 2536 POINT(809.599915 149.00647) 2537 POINT(159.630722 754.378418) 2538 POINT(143.034744 734.232849) 2539 POINT(644.922852 654.955261) 2540 POINT(882.734741 272.444794) 2541 POINT(313.778168 197.542862) 2542 POINT(477.728912 117.220284) 2543 POINT(298.252899 317.329468) 2544 POINT(495.919128 108.21653) 2545 POINT(121.048691 474.915771) 2546 POINT(196.629059 807.39679) 2547 POINT(833.473572 347.354889) 2548 POINT(162.764145 501.834534) 2549 POINT(235.567245 291.654724) 2550 POINT(870.382019 411.882904) 2551 POINT(13.4522238 449.959503) 2552 POINT(134.068741 68.4332352) 2553 POINT(118.55452 321.869385) 2554 POINT(102.711784 206.872284) 2555 POINT(671.973999 681.362732) 2556 POINT(248.497467 120.717422) 2557 POINT(31.7354698 380.157013) 2558 POINT(401.813629 967.932495) 2559 POINT(915.797668 388.308044) 2560 POINT(848.898621 411.388336) 2561 POINT(962.545898 174.255096) 2562 POINT(293.367767 476.248291) 2563 POINT(244.181717 533.847412) 2564 POINT(756.114441 36.2684135) 2565 POINT(766.201782 320.237396) 2566 POINT(372.591583 703.767517) 2567 POINT(205.417099 298.624359) 2568 POINT(367.331055 540.636108) 2569 POINT(205.203598 912.032227) 2570 POINT(21.0686684 267.123932) 2571 POINT(683.538147 972.578003) 2572 POINT(177.459763 998.820435) 2573 POINT(368.606293 828.643372) 2574 POINT(198.663376 858.375061) 2575 POINT(288.263702 59.2187614) 2576 POINT(409.738281 595.894653) 2577 POINT(161.392914 135.304596) 2578 POINT(61.6502304 10.0078783) 2579 POINT(607.354309 203.101212) 2580 POINT(985.684387 30.3472347) 2581 POINT(168.547836 388.902069) 2582 POINT(155.257584 732.328674) 2583 POINT(272.954742 20.8469925) 2584 POINT(764.730469 877.897156) 2585 POINT(218.933228 393.348297) 2586 POINT(582.145325 273.26709) 2587 POINT(892.122314 167.047394) 2588 POINT(840.31311 909.159973) 2589 POINT(400.830505 967.195068) 2590 POINT(857.906616 493.789673) 2591 POINT(896.626099 998.601257) 2592 POINT(691.885742 237.659988) 2593 POINT(114.01619 583.622375) 2594 POINT(130.504303 126.53112) 2595 POINT(278.233459 14.5205927) 2596 POINT(161.269897 89.7230453) 2597 POINT(982.499084 322.043854) 2598 POINT(62.6223907 490.916077) 2599 POINT(993.08429 842.963562) 2600 POINT(546.953369 934.073181) 2601 POINT(97.5542297 430.91861) 2602 POINT(954.233887 74.9581375) 2603 POINT(542.384705 923.229431) 2604 POINT(591.391602 686.496094) 2605 POINT(112.445793 942.963135) 2606 POINT(617.256104 762.087097) 2607 POINT(866.537231 187.67836) 2608 POINT(774.061218 713.720337) 2609 POINT(168.240402 206.806747) 2610 POINT(104.985527 380.769135) 2611 POINT(225.953918 987.014893) 2612 POINT(116.962112 400.708008) 2613 POINT(494.368561 903.237) 2614 POINT(646.073364 685.348816) 2615 POINT(184.18486 222.09967) 2616 POINT(659.458862 116.833321) 2617 POINT(798.100952 99.5314331) 2618 POINT(36.1250343 838.45636) 2619 POINT(157.625717 146.431763) 2620 POINT(865.797302 518.969238) 2621 POINT(233.86322 161.975586) 2622 POINT(299.575623 958.486877) 2623 POINT(250.950439 585.670105) 2624 POINT(491.327911 263.288849) 2625 POINT(826.321777 894.516968) 2626 POINT(650.314148 320.072479) 2627 POINT(258.549377 384.038696) 2628 POINT(852.413086 362.629059) 2629 POINT(710.429626 100.607201) 2630 POINT(651.600037 351.133392) 2631 POINT(779.634827 732.187195) 2632 POINT(20.1899033 622.552612) 2633 POINT(447.130188 875.63623) 2634 POINT(4.13563967 657.006165) 2635 POINT(368.309235 657.054932) 2636 POINT(189.806534 816.783203) 2637 POINT(975.174133 328.963013) 2638 POINT(575.727722 920.313416) 2639 POINT(519.774048 361.513519) 2640 POINT(364.444092 521.4776) 2641 POINT(467.512848 107.400169) 2642 POINT(126.793282 674.651367) 2643 POINT(79.9897766 290.038269) 2644 POINT(537.382874 817.83905) 2645 POINT(474.988708 46.1102371) 2646 POINT(683.032898 630.83783) 2647 POINT(358.481628 766.387268) 2648 POINT(755.565674 393.862396) 2649 POINT(260.551666 508.223724) 2650 POINT(659.91748 446.375244) 2651 POINT(822.615845 800.24176) 2652 POINT(804.557739 928.544067) 2653 POINT(153.988434 491.090088) 2654 POINT(653.203064 571.948547) 2655 POINT(756.557434 191.988846) 2656 POINT(767.495972 25.676096) 2657 POINT(90.1583786 374.924774) 2658 POINT(275.508453 83.1921234) 2659 POINT(679.249939 378.304474) 2660 POINT(379.568054 379.38382) 2661 POINT(232.988846 268.716705) 2662 POINT(541.062744 211.622421) 2663 POINT(633.143433 555.919983) 2664 POINT(924.755493 299.856232) 2665 POINT(732.989502 268.612305) 2666 POINT(79.0475006 625.549133) 2667 POINT(679.0271 496.933319) 2668 POINT(403.020569 205.255875) 2669 POINT(217.803665 585.593567) 2670 POINT(890.530579 379.940125) 2671 POINT(62.2082024 126.252083) 2672 POINT(833.812012 194.585312) 2673 POINT(573.32251 422.119843) 2674 POINT(454.808289 853.629883) 2675 POINT(551.409424 370.231659) 2676 POINT(855.711304 356.325836) 2677 POINT(937.144897 681.503174) 2678 POINT(738.042175 922.92627) 2679 POINT(394.141632 5.29943466) 2680 POINT(232.233521 38.9528122) 2681 POINT(596.674988 79.1406555) 2682 POINT(60.3989296 82.5823898) 2683 POINT(180.94075 236.331177) 2684 POINT(480.245819 911.971863) 2685 POINT(660.905945 991.326599) 2686 POINT(837.469421 218.266846) 2687 POINT(665.740173 516.773682) 2688 POINT(600.15863 279.908661) 2689 POINT(957.947266 425.220856) 2690 POINT(927.566345 259.077637) 2691 POINT(250.783447 685.983154) 2692 POINT(805.992126 776.723755) 2693 POINT(599.609619 822.649353) 2694 POINT(688.567566 994.310425) 2695 POINT(411.864899 843.976074) 2696 POINT(228.614975 264.41449) 2697 POINT(49.8707657 20.7666283) 2698 POINT(876.294067 925.605164) 2699 POINT(813.317749 509.765686) 2700 POINT(796.897339 487.102722) 2701 POINT(335.801697 584.209045) 2702 POINT(200.981552 143.759415) 2703 POINT(242.053055 516.683533) 2704 POINT(889.216858 790.698792) 2705 POINT(247.542267 896.221802) 2706 POINT(699.224548 868.911255) 2707 POINT(776.085571 786.562561) 2708 POINT(891.69928 8.2686224) 2709 POINT(988.171448 850.341919) 2710 POINT(75.8425751 473.457184) 2711 POINT(795.364319 594.384583) 2712 POINT(499.773651 432.52243) 2713 POINT(754.826172 719.572388) 2714 POINT(823.437988 518.986877) 2715 POINT(541.359985 185.970703) 2716 POINT(456.064453 649.38031) 2717 POINT(159.180801 796.584106) 2718 POINT(236.986145 581.67804) 2719 POINT(936.743347 643.522034) 2720 POINT(430.340332 890.360718) 2721 POINT(228.405655 696.333374) 2722 POINT(406.617523 415.011017) 2723 POINT(287.621063 707.291748) 2724 POINT(916.183655 476.575867) 2725 POINT(966.982849 791.583984) 2726 POINT(893.82312 304.32547) 2727 POINT(308.179688 856.398071) 2728 POINT(344.24057 873.407959) 2729 POINT(105.263733 112.175659) 2730 POINT(74.6337433 304.655731) 2731 POINT(631.219849 327.764526) 2732 POINT(93.3560562 852.478333) 2733 POINT(712.411011 180.481445) 2734 POINT(67.8948212 421.445862) 2735 POINT(597.946167 909.397949) 2736 POINT(718.594849 266.311401) 2737 POINT(809.376221 678.347412) 2738 POINT(757.578247 693.159485) 2739 POINT(656.511719 282.694641) 2740 POINT(509.093475 981.134033) 2741 POINT(981.820679 544.911377) 2742 POINT(665.143311 565.462769) 2743 POINT(141.197342 408.189087) 2744 POINT(438.883881 584.540039) 2745 POINT(263.396912 90.0476303) 2746 POINT(331.278625 908.574524) 2747 POINT(552.740234 950.136963) 2748 POINT(680.27594 587.288757) 2749 POINT(236.563629 974.786194) 2750 POINT(425.928406 522.539185) 2751 POINT(715.20874 17.5515938) 2752 POINT(112.078835 972.295288) 2753 POINT(381.117004 457.907684) 2754 POINT(21.3251972 999.595154) 2755 POINT(345.952271 562.787842) 2756 POINT(673.889648 108.909279) 2757 POINT(189.87738 137.015015) 2758 POINT(334.822601 368.473022) 2759 POINT(642.53894 623.496033) 2760 POINT(992.870056 246.869049) 2761 POINT(466.479401 522.736572) 2762 POINT(776.641724 32.3726234) 2763 POINT(464.226746 219.742889) 2764 POINT(440.879089 31.854826) 2765 POINT(521.970215 176.314606) 2766 POINT(322.214783 130.533157) 2767 POINT(565.394836 125.325272) 2768 POINT(667.524902 743.356201) 2769 POINT(694.92981 813.687012) 2770 POINT(69.6303558 602.722961) 2771 POINT(124.497276 920.776855) 2772 POINT(698.643372 245.606583) 2773 POINT(734.083313 733.269287) 2774 POINT(339.754547 916.64093) 2775 POINT(504.481812 705.296448) 2776 POINT(889.906372 963.626892) 2777 POINT(102.885193 159.998001) 2778 POINT(829.922852 630.134521) 2779 POINT(779.250305 595.801697) 2780 POINT(381.709686 548.959961) 2781 POINT(192.310959 614.795471) 2782 POINT(141.667999 703.304626) 2783 POINT(65.6204681 673.539246) 2784 POINT(214.183304 283.465698) 2785 POINT(761.101318 216.470352) 2786 POINT(468.76886 749.98053) 2787 POINT(111.380165 352.159027) 2788 POINT(930.113892 684.586792) 2789 POINT(661.960693 902.167053) 2790 POINT(353.976379 223.712479) 2791 POINT(907.410095 235.88649) 2792 POINT(318.764404 221.783295) 2793 POINT(57.7203712 912.831238) 2794 POINT(201.092606 870.344177) 2795 POINT(315.48172 412.403381) 2796 POINT(935.019897 531.373352) 2797 POINT(883.233887 531.758301) 2798 POINT(663.648743 647.390503) 2799 POINT(833.221191 782.274231) 2800 POINT(165.985886 25.8073235) 2801 POINT(266.780151 987.144409) 2802 POINT(122.249542 709.860962) 2803 POINT(653.862793 465.232483) 2804 POINT(911.108887 333.440308) 2805 POINT(989.008545 633.6604) 2806 POINT(209.720154 992.831726) 2807 POINT(120.797668 543.366211) 2808 POINT(392.085266 576.158325) 2809 POINT(827.96582 13.4218102) 2810 POINT(746.513672 382.985992) 2811 POINT(525.556763 402.220612) 2812 POINT(215.270187 94.7514496) 2813 POINT(815.505493 163.327408) 2814 POINT(508.406036 464.502716) 2815 POINT(952.750183 713.060242) 2816 POINT(571.991882 865.717346) 2817 POINT(13.3854733 583.593323) 2818 POINT(964.327087 349.091675) 2819 POINT(536.61676 663.011536) 2820 POINT(381.124542 518.216614) 2821 POINT(406.618927 611.408447) 2822 POINT(494.244934 155.633804) 2823 POINT(61.2219162 384.531708) 2824 POINT(253.465576 556.191162) 2825 POINT(907.151245 553.990479) 2826 POINT(625.343323 291.80191) 2827 POINT(309.973297 661.627197) 2828 POINT(388.910828 118.195808) 2829 POINT(262.692871 826.922302) 2830 POINT(509.299927 808.199341) 2831 POINT(950.007812 897.471375) 2832 POINT(905.114685 366.281677) 2833 POINT(873.546509 516.500732) 2834 POINT(204.295029 744.969849) 2835 POINT(23.1355839 16.5481358) 2836 POINT(640.268311 385.310333) 2837 POINT(134.524567 238.930374) 2838 POINT(322.450439 571.494141) 2839 POINT(307.408936 444.173004) 2840 POINT(172.824875 295.365265) 2841 POINT(939.560669 904.548279) 2842 POINT(256.717621 531.70459) 2843 POINT(912.018921 557.222595) 2844 POINT(657.444641 132.46727) 2845 POINT(413.376495 11.8644772) 2846 POINT(510.805847 950.712097) 2847 POINT(473.10257 32.1272736) 2848 POINT(89.1297226 936.58905) 2849 POINT(767.573547 394.057892) 2850 POINT(621.560425 332.853699) 2851 POINT(229.17836 329.659668) 2852 POINT(776.461914 401.003601) 2853 POINT(417.777435 919.665649) 2854 POINT(785.271667 386.934052) 2855 POINT(72.3099899 150.778549) 2856 POINT(130.054428 383.28952) 2857 POINT(143.968887 509.557892) 2858 POINT(577.716003 951.347229) 2859 POINT(394.730499 73.7631683) 2860 POINT(353.770996 555.856262) 2861 POINT(127.894844 973.89032) 2862 POINT(92.2999496 159.929855) 2863 POINT(180.542831 740.100281) 2864 POINT(263.96402 482.640442) 2865 POINT(159.460281 595.57843) 2866 POINT(411.499329 88.8101883) 2867 POINT(328.24469 895.062927) 2868 POINT(255.926163 448.664307) 2869 POINT(168.258881 90.9398804) 2870 POINT(573.855042 555.182434) 2871 POINT(632.209106 308.645691) 2872 POINT(386.947083 440.435883) 2873 POINT(506.90918 563.501465) 2874 POINT(102.107941 700.84906) 2875 POINT(199.884399 103.498863) 2876 POINT(651.810974 777.709473) 2877 POINT(89.6199875 333.570251) 2878 POINT(717.625732 486.538544) 2879 POINT(336.360474 298.729523) 2880 POINT(789.266541 30.9147358) 2881 POINT(572.417053 74.0188217) 2882 POINT(82.0940628 247.419022) 2883 POINT(89.0806732 441.914581) 2884 POINT(376.946594 23.6011028) 2885 POINT(250.720871 511.837189) 2886 POINT(279.515594 15.8938522) 2887 POINT(712.862 46.3976364) 2888 POINT(547.408447 915.533142) 2889 POINT(245.472656 65.3541718) 2890 POINT(279.880524 404.677795) 2891 POINT(289.018311 176.916992) 2892 POINT(389.41394 589.612549) 2893 POINT(850.764404 178.634201) 2894 POINT(810.442017 461.317413) 2895 POINT(612.265198 933.840515) 2896 POINT(986.260193 824.590698) 2897 POINT(623.93573 787.405579) 2898 POINT(901.351135 54.7328682) 2899 POINT(245.2164 774.757507) 2900 POINT(86.9208221 25.5741367) 2901 POINT(913.358459 304.97876) 2902 POINT(869.475647 35.0227966) 2903 POINT(332.66629 581.906433) 2904 POINT(605.949402 605.617004) 2905 POINT(39.6383438 751.9646) 2906 POINT(657.547119 619.687683) 2907 POINT(366.484283 134.891754) 2908 POINT(504.545349 464.229584) 2909 POINT(272.719208 170.203354) 2910 POINT(255.351868 202.591309) 2911 POINT(596.830383 180.371628) 2912 POINT(117.874725 392.424988) 2913 POINT(80.3853912 259.168365) 2914 POINT(395.500854 56.3937645) 2915 POINT(196.534378 603.873596) 2916 POINT(662.686829 648.962463) 2917 POINT(862.913635 252.207687) 2918 POINT(838.384399 204.854141) 2919 POINT(602.862976 303.622406) 2920 POINT(484.459686 398.736359) 2921 POINT(534.134888 410.340912) 2922 POINT(339.237671 78.3142471) 2923 POINT(684.532837 242.240097) 2924 POINT(584.755554 181.797989) 2925 POINT(860.923462 152.927994) 2926 POINT(824.813416 433.839355) 2927 POINT(511.710175 809.406555) 2928 POINT(107.161049 90.2868271) 2929 POINT(431.139893 767.379639) 2930 POINT(397.977997 420.905853) 2931 POINT(542.869568 67.0430069) 2932 POINT(754.132507 870.587402) 2933 POINT(484.310242 844.179993) 2934 POINT(535.618958 604.190002) 2935 POINT(984.76886 668.309692) 2936 POINT(557.262817 739.315857) 2937 POINT(609.833252 68.8437424) 2938 POINT(248.569855 216.925003) 2939 POINT(930.428528 242.684006) 2940 POINT(29.9302769 304.280426) 2941 POINT(494.264771 769.031677) 2942 POINT(31.8310013 911.459839) 2943 POINT(634.887634 821.612915) 2944 POINT(493.986877 615.348511) 2945 POINT(482.235992 662.90033) 2946 POINT(149.183868 798.064392) 2947 POINT(949.640259 442.709106) 2948 POINT(291.08667 35.19244) 2949 POINT(704.820251 583.862) 2950 POINT(168.366898 618.692566) 2951 POINT(504.04068 415.18811) 2952 POINT(664.452332 316.174652) 2953 POINT(924.671021 567.284851) 2954 POINT(691.301758 489.32663) 2955 POINT(695.59668 855.218811) 2956 POINT(328.321899 997.172607) 2957 POINT(49.0114288 576.261902) 2958 POINT(908.428528 762.691345) 2959 POINT(930.954529 7.08721542) 2960 POINT(130.013504 992.932373) 2961 POINT(469.563232 316.431793) 2962 POINT(947.029358 212.540771) 2963 POINT(845.510742 554.550232) 2964 POINT(753.491028 38.5790405) 2965 POINT(2.76125121 43.9338455) 2966 POINT(980.48938 921.383728) 2967 POINT(421.970306 596.481323) 2968 POINT(113.509262 473.201508) 2969 POINT(224.107376 5.93227053) 2970 POINT(718.765686 965.428223) 2971 POINT(26.8013058 211.887787) 2972 POINT(945.862305 698.967346) 2973 POINT(417.275177 169.746368) 2974 POINT(209.90332 233.69017) 2975 POINT(388.421814 571.606262) 2976 POINT(111.953804 536.013855) 2977 POINT(191.584763 194.474182) 2978 POINT(848.25946 492.624237) 2979 POINT(452.084656 367.45755) 2980 POINT(304.853607 608.398987) 2981 POINT(60.7253761 178.099274) 2982 POINT(107.166229 113.300179) 2983 POINT(863.810913 924.370972) 2984 POINT(169.200745 842.686035) 2985 POINT(921.110046 573.421814) 2986 POINT(792.083374 715.061035) 2987 POINT(559.354309 736.963257) 2988 POINT(328.756927 138.275055) 2989 POINT(420.005798 807.756409) 2990 POINT(544.861633 347.764038) 2991 POINT(564.06189 329.284393) 2992 POINT(453.111603 277.381256) 2993 POINT(661.589661 564.190796) 2994 POINT(920.559082 734.119385) 2995 POINT(645.629822 274.918762) 2996 POINT(288.983521 182.602814) 2997 POINT(563.33905 386.301788) 2998 POINT(605.321838 524.30542) 2999 POINT(904.13501 934.357605) 3000 POINT(531.759949 701.306396) 3001 POINT(445.672821 253.574615) 3002 POINT(247.162094 476.95401) 3003 POINT(732.35614 967.533691) 3004 POINT(519.359863 198.600098) 3005 POINT(114.51683 41.375782) 3006 POINT(931.035278 973.76178) 3007 POINT(834.28186 961.63739) 3008 POINT(993.202271 374.450928) 3009 POINT(779.476318 327.179047) 3010 POINT(545.439819 299.400116) 3011 POINT(150.834595 577.808777) 3012 POINT(590.006531 885.544617) 3013 POINT(639.554565 833.846924) 3014 POINT(159.832382 674.0578) 3015 POINT(609.222839 465.027191) 3016 POINT(303.347229 548.772888) 3017 POINT(863.864807 911.120972) 3018 POINT(60.4724121 112.866165) 3019 POINT(585.967224 815.496826) 3020 POINT(885.330444 130.773941) 3021 POINT(996.542236 848.076355) 3022 POINT(276.879608 804.61969) 3023 POINT(853.528015 843.052246) 3024 POINT(46.4543114 986.739624) 3025 POINT(523.067139 482.147217) 3026 POINT(271.908478 851.620117) 3027 POINT(566.594971 654.585815) 3028 POINT(355.662445 101.74292) 3029 POINT(449.472107 524.430725) 3030 POINT(965.514587 893.134705) 3031 POINT(536.483154 954.224426) 3032 POINT(942.792725 409.128082) 3033 POINT(266.410675 256.330505) 3034 POINT(415.606995 346.874756) 3035 POINT(640.711365 770.959839) 3036 POINT(462.070953 613.044067) 3037 POINT(596.824646 769.199707) 3038 POINT(288.952454 746.063782) 3039 POINT(719.72168 932.663696) 3040 POINT(287.992737 125.992371) 3041 POINT(158.954422 716.497864) 3042 POINT(720.916138 924.078857) 3043 POINT(723.833252 322.894745) 3044 POINT(583.883301 147.298065) 3045 POINT(415.694122 627.074768) 3046 POINT(284.895172 604.312927) 3047 POINT(190.90416 51.6320038) 3048 POINT(708.619812 354.703217) 3049 POINT(426.802246 188.548584) 3050 POINT(570.620667 289.819885) 3051 POINT(358.809448 547.044739) 3052 POINT(408.445709 158.819519) 3053 POINT(972.234863 551.345032) 3054 POINT(305.074768 215.468613) 3055 POINT(346.726196 232.636292) 3056 POINT(378.503174 978.967163) 3057 POINT(972.877686 626.817322) 3058 POINT(40.5891304 524.744812) 3059 POINT(875.348145 892.5755) 3060 POINT(72.6532211 538.965576) 3061 POINT(599.209839 556.96698) 3062 POINT(181.762131 764.005737) 3063 POINT(938.536377 47.7561989) 3064 POINT(90.350174 752.730591) 3065 POINT(228.941315 18.6389198) 3066 POINT(526.151794 248.905365) 3067 POINT(687.54541 666.100952) 3068 POINT(75.7811661 372.072235) 3069 POINT(591.422302 791.663452) 3070 POINT(553.272156 850.871887) 3071 POINT(543.845276 312.853485) 3072 POINT(827.177429 202.875397) 3073 POINT(19.6320648 68.2713318) 3074 POINT(412.240967 275.933899) 3075 POINT(217.695312 410.078918) 3076 POINT(233.148926 360.885895) 3077 POINT(719.811829 310.209106) 3078 POINT(930.496887 963.855774) 3079 POINT(877.006592 619.318726) 3080 POINT(728.089966 734.612427) 3081 POINT(364.313751 70.3323975) 3082 POINT(994.324768 322.45575) 3083 POINT(184.662659 487.323395) 3084 POINT(190.147491 550.395203) 3085 POINT(114.996841 87.0581665) 3086 POINT(336.497772 130.145782) 3087 POINT(302.352417 402.012329) 3088 POINT(592.940247 693.478943) 3089 POINT(392.507935 132.907242) 3090 POINT(107.165535 589.145081) 3091 POINT(245.100372 594.287842) 3092 POINT(266.16214 228.970459) 3093 POINT(321.043274 552.470276) 3094 POINT(601.187927 692.484253) 3095 POINT(163.062866 391.054962) 3096 POINT(320.397247 387.846069) 3097 POINT(798.694702 160.482254) 3098 POINT(168.434067 279.829742) 3099 POINT(225.79216 175.77739) 3100 POINT(647.921326 135.716324) 3101 POINT(570.242249 187.291611) 3102 POINT(643.136536 400.324432) 3103 POINT(789.052002 545.124939) 3104 POINT(923.957703 325.843231) 3105 POINT(512.262024 256.862061) 3106 POINT(594.211487 375.051697) 3107 POINT(435.402039 963.745117) 3108 POINT(201.802917 352.943909) 3109 POINT(579.676941 961.546753) 3110 POINT(320.525391 257.396423) 3111 POINT(297.151123 813.917969) 3112 POINT(20.4306297 170.604919) 3113 POINT(508.385406 458.225464) 3114 POINT(793.409058 226.489624) 3115 POINT(793.911682 112.829391) 3116 POINT(424.629669 512.669006) 3117 POINT(420.360321 651.997925) 3118 POINT(683.290344 817.087402) 3119 POINT(546.87085 327.42572) 3120 POINT(935.426025 167.746704) 3121 POINT(935.619324 956.477051) 3122 POINT(198.138031 788.649048) 3123 POINT(768.027161 655.28772) 3124 POINT(302.484161 196.042496) 3125 POINT(259.725067 323.827972) 3126 POINT(708.477295 867.04364) 3127 POINT(865.022705 859.689453) 3128 POINT(820.379211 48.976368) 3129 POINT(985.980774 223.050323) 3130 POINT(37.0604591 554.227295) 3131 POINT(350.836151 247.984253) 3132 POINT(97.0753326 654.618652) 3133 POINT(28.246542 511.602539) 3134 POINT(850.845093 694.399597) 3135 POINT(402.482025 664.685242) 3136 POINT(425.642395 665.746582) 3137 POINT(183.306976 693.318604) 3138 POINT(808.751953 509.558563) 3139 POINT(573.996765 434.08667) 3140 POINT(329.187531 232.368896) 3141 POINT(310.980621 884.669006) 3142 POINT(990.746582 373.040985) 3143 POINT(236.373337 31.9964314) 3144 POINT(424.173828 856.855408) 3145 POINT(15.6685143 921.770325) 3146 POINT(662.108093 676.546204) 3147 POINT(290.739594 892.128601) 3148 POINT(478.743195 117.345497) 3149 POINT(14.7970438 432.147247) 3150 POINT(611.318176 764.307495) 3151 POINT(580.959045 159.930222) 3152 POINT(430.356842 303.900635) 3153 POINT(87.6184845 368.104858) 3154 POINT(140.825607 57.4877968) 3155 POINT(217.963593 395.094055) 3156 POINT(171.010635 301.903168) 3157 POINT(612.089966 452.669006) 3158 POINT(287.009979 172.541855) 3159 POINT(720.513245 193.734268) 3160 POINT(108.479355 378.494629) 3161 POINT(218.059586 224.404404) 3162 POINT(998.98938 49.1996803) 3163 POINT(475.707947 452.180389) 3164 POINT(868.488098 880.383667) 3165 POINT(11.7467012 884.022156) 3166 POINT(815.487793 846.891418) 3167 POINT(527.46167 526.569641) 3168 POINT(15.4051619 235.145401) 3169 POINT(159.51001 943.53949) 3170 POINT(44.7966957 642.846985) 3171 POINT(112.28035 855.895386) 3172 POINT(337.995331 63.1700439) 3173 POINT(358.156311 757.855957) 3174 POINT(574.937439 770.768311) 3175 POINT(679.068665 710.896179) 3176 POINT(71.9685516 653.710693) 3177 POINT(864.549622 378.963104) 3178 POINT(219.449844 975.885559) 3179 POINT(353.323334 607.145081) 3180 POINT(412.503815 536.016785) 3181 POINT(309.038513 814.603577) 3182 POINT(938.803528 430.374359) 3183 POINT(935.953186 577.927185) 3184 POINT(807.62323 385.330719) 3185 POINT(475.227417 696.050659) 3186 POINT(368.248688 52.5218544) 3187 POINT(563.099854 940.968872) 3188 POINT(817.237305 43.562294) 3189 POINT(592.875061 563.777954) 3190 POINT(829.993347 503.697784) 3191 POINT(95.7144012 412.808716) 3192 POINT(772.876892 5.74670601) 3193 POINT(461.211823 465.141357) 3194 POINT(410.914001 699.097107) 3195 POINT(156.279495 425.577515) 3196 POINT(79.5732269 325.929352) 3197 POINT(896.724243 324.798065) 3198 POINT(746.577637 661.386658) 3199 POINT(484.948486 283.180328) 3200 POINT(764.042603 529.910278) 3201 POINT(582.464783 596.437317) 3202 POINT(868.172974 70.80233) 3203 POINT(948.506104 357.350677) 3204 POINT(792.277039 787.320557) 3205 POINT(385.199921 33.500309) 3206 POINT(841.018799 920.906433) 3207 POINT(102.937805 868.773682) 3208 POINT(754.838623 291.791168) 3209 POINT(602.221008 26.9173603) 3210 POINT(951.638306 276.129852) 3211 POINT(684.028625 924.450439) 3212 POINT(749.599915 525.514648) 3213 POINT(401.396362 849.493103) 3214 POINT(884.958313 245.387314) 3215 POINT(780.29364 389.704681) 3216 POINT(679.36731 843.288574) 3217 POINT(926.053955 319.420715) 3218 POINT(674.011963 935.467957) 3219 POINT(728.676392 861.70636) 3220 POINT(725.771851 601.169373) 3221 POINT(150.540283 849.509216) 3222 POINT(201.59494 328.567932) 3223 POINT(965.833923 481.116058) 3224 POINT(461.004608 876.152893) 3225 POINT(592.80896 584.057617) 3226 POINT(686.644836 740.245117) 3227 POINT(166.459335 569.429199) 3228 POINT(915.420837 675.838867) 3229 POINT(417.151001 341.913544) 3230 POINT(897.683594 757.241272) 3231 POINT(4.97679806 111.825813) 3232 POINT(931.731934 420.824097) 3233 POINT(293.185791 382.102905) 3234 POINT(801.483643 329.029297) 3235 POINT(788.075378 918.808716) 3236 POINT(305.449402 397.609314) 3237 POINT(616.490234 587.521484) 3238 POINT(977.188049 992.609375) 3239 POINT(22.9319172 894.638672) 3240 POINT(536.440491 826.092468) 3241 POINT(341.751007 522.528442) 3242 POINT(404.436371 46.9895744) 3243 POINT(709.605713 216.552567) 3244 POINT(497.90033 163.261581) 3245 POINT(731.082581 961.884827) 3246 POINT(168.616867 861.953064) 3247 POINT(775.970032 385.976349) 3248 POINT(966.740784 273.488739) 3249 POINT(778.162048 911.331299) 3250 POINT(217.18721 405.125519) 3251 POINT(609.679382 51.421833) 3252 POINT(753.342041 135.865433) 3253 POINT(933.088379 844.200806) 3254 POINT(548.075317 502.022797) 3255 POINT(84.052742 222.482513) 3256 POINT(118.806999 830.309448) 3257 POINT(23.3837261 863.813416) 3258 POINT(114.492744 305.671021) 3259 POINT(823.388 995.320007) 3260 POINT(274.30542 646.712219) 3261 POINT(943.309326 768.00177) 3262 POINT(290.063416 945.556885) 3263 POINT(708.102905 192.259781) 3264 POINT(19.7887611 295.183533) 3265 POINT(766.678955 539.969177) 3266 POINT(953.990051 350.078552) 3267 POINT(781.232849 381.591309) 3268 POINT(998.302979 360.492188) 3269 POINT(427.609192 618.779846) 3270 POINT(128.052155 792.333435) 3271 POINT(785.197998 588.393616) 3272 POINT(617.320923 340.086761) 3273 POINT(9.15420246 413.137329) 3274 POINT(625.548523 795.990479) 3275 POINT(531.384277 633.184937) 3276 POINT(419.962189 832.622864) 3277 POINT(981.530029 913.704529) 3278 POINT(356.868469 656.162415) 3279 POINT(184.966705 442.420593) 3280 POINT(576.662781 702.710449) 3281 POINT(439.641937 932.072998) 3282 POINT(777.196045 979.603149) 3283 POINT(333.535767 863.340881) 3284 POINT(211.803223 337.634247) 3285 POINT(503.885498 448.588837) 3286 POINT(458.920868 329.223663) 3287 POINT(400.470276 485.396301) 3288 POINT(479.997711 433.090088) 3289 POINT(568.700195 786.596497) 3290 POINT(924.651672 269.830536) 3291 POINT(562.633362 721.454529) 3292 POINT(663.193604 97.5176163) 3293 POINT(10.1124382 847.259827) 3294 POINT(686.296326 855.157532) 3295 POINT(836.850464 934.220215) 3296 POINT(72.425087 448.400665) 3297 POINT(296.511566 436.975311) 3298 POINT(901.494873 870.67334) 3299 POINT(410.761871 706.775085) 3300 POINT(207.009979 288.943848) 3301 POINT(186.162186 798.49054) 3302 POINT(180.760254 952.313904) 3303 POINT(611.024292 450.872375) 3304 POINT(449.174988 899.824646) 3305 POINT(840.461853 817.194824) 3306 POINT(857.003784 38.1999207) 3307 POINT(125.469063 422.59552) 3308 POINT(553.538635 458.257721) 3309 POINT(233.712448 15.6490831) 3310 POINT(463.690552 478.566711) 3311 POINT(225.70787 872.219666) 3312 POINT(328.577484 105.398987) 3313 POINT(198.180695 372.274628) 3314 POINT(258.69281 528.545227) 3315 POINT(772.80896 493.58847) 3316 POINT(201.146317 223.154205) 3317 POINT(807.481384 204.221176) 3318 POINT(377.976746 879.09906) 3319 POINT(731.049805 558.046753) 3320 POINT(805.317566 52.7475014) 3321 POINT(571.824402 839.786621) 3322 POINT(606.58136 343.33432) 3323 POINT(763.385742 118.946411) 3324 POINT(343.252136 389.943268) 3325 POINT(95.4248352 572.36261) 3326 POINT(813.915955 808.566101) 3327 POINT(237.155685 454.968353) 3328 POINT(228.506927 725.604492) 3329 POINT(429.382935 435.730865) 3330 POINT(816.224731 88.9359283) 3331 POINT(629.679565 483.980591) 3332 POINT(441.131989 865.309265) 3333 POINT(342.598419 669.637756) 3334 POINT(801.136597 369.041656) 3335 POINT(890.785339 223.879379) 3336 POINT(99.1037369 758.036499) 3337 POINT(128.792175 354.925507) 3338 POINT(477.538483 515.953491) 3339 POINT(792.934937 502.835907) 3340 POINT(982.086731 991.471069) 3341 POINT(369.465057 589.100098) 3342 POINT(798.581238 655.154541) 3343 POINT(679.503113 28.5987511) 3344 POINT(131.212204 170.267502) 3345 POINT(280.632355 746.067444) 3346 POINT(446.447357 55.3586159) 3347 POINT(307.893768 614.977844) 3348 POINT(192.505585 183.649704) 3349 POINT(885.429688 817.871704) 3350 POINT(264.579529 547.821228) 3351 POINT(676.563538 833.363281) 3352 POINT(871.792419 190.015137) 3353 POINT(275.194244 571.619385) 3354 POINT(476.390442 417.6745) 3355 POINT(823.653503 608.107544) 3356 POINT(725.355408 998.748779) 3357 POINT(648.382446 271.377106) 3358 POINT(839.043213 947.980957) 3359 POINT(589.812805 306.827942) 3360 POINT(523.312195 413.242645) 3361 POINT(649.694458 12.679697) 3362 POINT(846.71344 571.614197) 3363 POINT(248.932373 690.161133) 3364 POINT(591.627869 14.15516) 3365 POINT(771.031189 296.38858) 3366 POINT(719.813354 891.739563) 3367 POINT(727.887512 680.228821) 3368 POINT(863.87207 808.23407) 3369 POINT(221.420609 328.991913) 3370 POINT(194.979095 668.581482) 3371 POINT(860.022522 283.050446) 3372 POINT(855.27533 145.565125) 3373 POINT(724.804688 678.038269) 3374 POINT(65.1922531 238.328125) 3375 POINT(746.992615 157.364868) 3376 POINT(409.33493 316.898346) 3377 POINT(162.588272 334.249084) 3378 POINT(10.2278376 729.438965) 3379 POINT(839.712036 260.799835) 3380 POINT(861.166443 282.742737) 3381 POINT(842.108459 935.954346) 3382 POINT(504.690125 872.282837) 3383 POINT(791.538391 724.054565) 3384 POINT(211.990692 57.2085419) 3385 POINT(442.690247 896.850159) 3386 POINT(494.218964 159.951263) 3387 POINT(485.458099 604.736877) 3388 POINT(15.59342 372.116699) 3389 POINT(367.713165 444.676331) 3390 POINT(90.018898 611.252441) 3391 POINT(891.919189 454.724182) 3392 POINT(940.288452 380.682648) 3393 POINT(314.119995 126.264183) 3394 POINT(747.684265 411.308319) 3395 POINT(575.091248 698.392151) 3396 POINT(388.861542 325.121704) 3397 POINT(360.058105 163.507324) 3398 POINT(268.363373 260.839233) 3399 POINT(732.714355 663.783691) 3400 POINT(134.166672 288.812164) 3401 POINT(766.850159 155.158478) 3402 POINT(488.625 352.13562) 3403 POINT(628.333008 734.765198) 3404 POINT(659.492615 381.190735) 3405 POINT(993.250183 10.9575415) 3406 POINT(709.961731 507.880096) 3407 POINT(154.592407 499.446106) 3408 POINT(780.51239 962.344788) 3409 POINT(127.947495 677.447571) 3410 POINT(759.683594 168.397415) 3411 POINT(52.4077148 958.611694) 3412 POINT(169.573273 804.304504) 3413 POINT(60.5400887 168.937149) 3414 POINT(72.026535 593.573547) 3415 POINT(3.20075917 827.647461) 3416 POINT(603.281555 407.327057) 3417 POINT(231.705582 652.418518) 3418 POINT(331.621307 857.599487) 3419 POINT(410.029633 716.40979) 3420 POINT(110.779694 42.0042229) 3421 POINT(730.056824 851.853455) 3422 POINT(31.036684 957.859497) 3423 POINT(188.320984 503.722778) 3424 POINT(712.810974 471.813782) 3425 POINT(836.176331 835.089172) 3426 POINT(759.933228 633.697144) 3427 POINT(298.046997 536.660095) 3428 POINT(110.609818 725.773987) 3429 POINT(853.581604 325.769318) 3430 POINT(165.432953 296.457428) 3431 POINT(66.5716324 379.494568) 3432 POINT(508.853516 737.150024) 3433 POINT(211.881729 42.955719) 3434 POINT(301.631317 809.11554) 3435 POINT(575.024109 713.176941) 3436 POINT(738.354248 141.699249) 3437 POINT(379.142639 212.778793) 3438 POINT(520.747131 721.969788) 3439 POINT(510.939789 643.430603) 3440 POINT(981.867554 37.7324677) 3441 POINT(78.4869919 319.285583) 3442 POINT(149.227844 970.287231) 3443 POINT(926.042297 114.026222) 3444 POINT(700.337219 50.3069496) 3445 POINT(668.212036 365.756348) 3446 POINT(939.196655 970.45636) 3447 POINT(280.422211 341.526337) 3448 POINT(807.092407 613.155334) 3449 POINT(315.216461 403.111908) 3450 POINT(688.949036 513.115112) 3451 POINT(3.00193405 188.766876) 3452 POINT(743.958923 984.494629) 3453 POINT(768.285889 848.635742) 3454 POINT(485.775848 844.886108) 3455 POINT(553.057983 176.569031) 3456 POINT(875.940125 146.648483) 3457 POINT(120.793274 166.08606) 3458 POINT(740.211487 854.764954) 3459 POINT(628.705627 396.651398) 3460 POINT(540.070129 404.453705) 3461 POINT(941.62915 807.375122) 3462 POINT(552.874817 336.87265) 3463 POINT(735.632996 933.439087) 3464 POINT(159.235947 193.713089) 3465 POINT(548.684448 926.344177) 3466 POINT(983.391724 888.195251) 3467 POINT(803.004761 528.442383) 3468 POINT(63.2109413 338.493805) 3469 POINT(0.965819418 266.764252) 3470 POINT(475.457764 118.100121) 3471 POINT(913.338562 128.105576) 3472 POINT(46.8378906 754.861023) 3473 POINT(593.432007 799.544312) 3474 POINT(32.9206085 495.830322) 3475 POINT(499.2901 644.500916) 3476 POINT(239.244049 388.674286) 3477 POINT(252.89679 138.230392) 3478 POINT(738.831177 342.844513) 3479 POINT(552.664673 727.971802) 3480 POINT(558.166992 996.364807) 3481 POINT(253.852417 497.230011) 3482 POINT(862.733643 188.782013) 3483 POINT(489.608063 601.803223) 3484 POINT(879.914856 230.148926) 3485 POINT(99.8255005 973.798828) 3486 POINT(111.034119 952.998047) 3487 POINT(320.809265 41.2269325) 3488 POINT(68.1795883 372.923981) 3489 POINT(248.884079 232.676926) 3490 POINT(541.108582 188.027756) 3491 POINT(686.683594 392.54184) 3492 POINT(173.86853 983.130493) 3493 POINT(601.173462 251.364609) 3494 POINT(281.880859 927.001831) 3495 POINT(134.884949 122.86071) 3496 POINT(443.312469 656.154297) 3497 POINT(311.865845 644.378601) 3498 POINT(481.921265 513.949951) 3499 POINT(741.130798 766.967285) 3500 POINT(253.656403 86.381134) 3501 POINT(544.666382 226.431396) 3502 POINT(840.687927 164.093826) 3503 POINT(804.204468 294.996521) 3504 POINT(731.932678 622.805603) 3505 POINT(239.026443 897.327698) 3506 POINT(669.351501 900.643616) 3507 POINT(882.133545 863.126953) 3508 POINT(608.261902 551.134583) 3509 POINT(828.472473 635.473999) 3510 POINT(674.716309 945.27771) 3511 POINT(878.925781 629.19989) 3512 POINT(803.822998 406.615448) 3513 POINT(117.96669 372.248627) 3514 POINT(563.069458 601.398193) 3515 POINT(239.875549 816.15741) 3516 POINT(360.67804 724.3573) 3517 POINT(204.973877 786.080566) 3518 POINT(120.360466 162.419327) 3519 POINT(568.338501 488.418182) 3520 POINT(583.233948 767.703857) 3521 POINT(411.915741 602.938477) 3522 POINT(640.934937 401.760193) 3523 POINT(138.003113 569.785278) 3524 POINT(680.0672 940.253784) 3525 POINT(686.953003 819.030945) 3526 POINT(449.114777 756.876709) 3527 POINT(842.072449 476.207947) 3528 POINT(770.034363 783.415894) 3529 POINT(825.542419 371.871918) 3530 POINT(786.239197 406.582306) 3531 POINT(94.4003067 362.69516) 3532 POINT(848.035095 688.922913) 3533 POINT(166.974228 177.467041) 3534 POINT(520.349426 59.0702782) 3535 POINT(77.5102463 390.906128) 3536 POINT(193.491211 714.518555) 3537 POINT(128.102982 124.226288) 3538 POINT(976.5224 417.465881) 3539 POINT(518.558533 612.418335) 3540 POINT(748.549194 181.071411) 3541 POINT(50.7429123 568.312317) 3542 POINT(682.926636 970.398926) 3543 POINT(866.68396 32.4012718) 3544 POINT(193.209839 50.657196) 3545 POINT(359.706482 110.483795) 3546 POINT(980.996338 967.002625) 3547 POINT(343.821625 169.40033) 3548 POINT(801.033813 437.690887) 3549 POINT(955.222656 951.095276) 3550 POINT(257.687927 178.908783) 3551 POINT(845.938965 959.161255) 3552 POINT(671.766541 988.979431) 3553 POINT(96.4793472 917.766296) 3554 POINT(23.6046791 326.221771) 3555 POINT(82.7876129 163.902985) 3556 POINT(606.172668 283.604095) 3557 POINT(772.292175 339.334625) 3558 POINT(182.845169 850.120544) 3559 POINT(661.644104 543.173279) 3560 POINT(713.563782 849.830933) 3561 POINT(700.409729 300.059296) 3562 POINT(618.751709 51.6491165) 3563 POINT(44.148613 918.39679) 3564 POINT(823.950073 873.787415) 3565 POINT(648.722778 449.641418) 3566 POINT(654.30481 484.421906) 3567 POINT(435.231232 920.45343) 3568 POINT(914.440369 183.43074) 3569 POINT(729.653564 467.481537) 3570 POINT(36.7305374 888.384216) 3571 POINT(699.249756 648.100708) 3572 POINT(53.4622345 631.375244) 3573 POINT(683.258118 483.694794) 3574 POINT(842.957825 882.430786) 3575 POINT(340.844269 684.780151) 3576 POINT(816.566711 571.431519) 3577 POINT(935.083313 244.75589) 3578 POINT(105.882515 95.6017609) 3579 POINT(436.648651 922.324707) 3580 POINT(734.029846 726.253052) 3581 POINT(391.577179 578.247559) 3582 POINT(20.9664154 409.736603) 3583 POINT(158.879303 422.310425) 3584 POINT(93.1572876 377.271667) 3585 POINT(518.860291 759.038574) 3586 POINT(308.518707 510.883728) 3587 POINT(192.956833 109.272484) 3588 POINT(337.143158 473.144775) 3589 POINT(239.921646 708.317688) 3590 POINT(679.078186 2.42466354) 3591 POINT(918.697388 434.732422) 3592 POINT(377.531311 949.224792) 3593 POINT(580.812744 567.262329) 3594 POINT(377.634857 919.788025) 3595 POINT(698.243896 276.958984) 3596 POINT(368.770691 278.101074) 3597 POINT(798.169373 78.7221909) 3598 POINT(466.999573 604.790833) 3599 POINT(993.790527 248.612762) 3600 POINT(881.052612 30.0534382) 3601 POINT(928.399719 383.149658) 3602 POINT(851.45105 547.060425) 3603 POINT(324.285858 272.900726) 3604 POINT(951.563354 12.295125) 3605 POINT(313.134583 289.109497) 3606 POINT(38.8596725 980.652344) 3607 POINT(262.683044 758.593384) 3608 POINT(194.480118 377.173065) 3609 POINT(676.043213 814.05365) 3610 POINT(292.807526 735.895935) 3611 POINT(773.939392 955.233826) 3612 POINT(6.48428583 942.03125) 3613 POINT(752.87677 807.646729) 3614 POINT(135.795532 89.6609726) 3615 POINT(198.848419 102.094971) 3616 POINT(917.260559 847.232422) 3617 POINT(309.608673 767.78064) 3618 POINT(130.447205 131.655289) 3619 POINT(99.9222946 797.916748) 3620 POINT(303.39682 593.873474) 3621 POINT(622.798706 538.5177) 3622 POINT(487.690308 470.024841) 3623 POINT(2.92403412 613.183105) 3624 POINT(9.29393005 449.016663) 3625 POINT(141.816193 439.552856) 3626 POINT(329.217255 936.443848) 3627 POINT(791.282288 342.673737) 3628 POINT(900.140625 183.800171) 3629 POINT(104.315384 518.388611) 3630 POINT(366.09552 319.04541) 3631 POINT(140.504333 453.253021) 3632 POINT(9.70359135 118.579582) 3633 POINT(334.362732 39.2658539) 3634 POINT(346.220001 50.9579201) 3635 POINT(915.835022 220.335037) 3636 POINT(739.628357 489.290253) 3637 POINT(316.875427 26.9969673) 3638 POINT(870.368713 212.875458) 3639 POINT(898.793762 766.189453) 3640 POINT(517.141907 220.511108) 3641 POINT(912.537231 669.198181) 3642 POINT(79.94487 170.006088) 3643 POINT(556.852356 714.230652) 3644 POINT(424.493225 293.24823) 3645 POINT(754.115112 647.020447) 3646 POINT(279.057373 656.904541) 3647 POINT(825.401062 455.658112) 3648 POINT(576.162903 29.2461452) 3649 POINT(448.109619 12.3285856) 3650 POINT(769.412659 148.110489) 3651 POINT(32.2825356 88.2932968) 3652 POINT(438.819275 778.673828) 3653 POINT(194.927444 58.3816795) 3654 POINT(48.5612984 908.178101) 3655 POINT(162.555481 932.184448) 3656 POINT(864.192749 694.321289) 3657 POINT(336.274963 741.417297) 3658 POINT(50.3630066 201.595261) 3659 POINT(634.783508 152.527298) 3660 POINT(336.485504 502.982117) 3661 POINT(640.226868 602.145447) 3662 POINT(291.103363 761.256714) 3663 POINT(640.027161 427.676544) 3664 POINT(823.630188 443.485504) 3665 POINT(842.434021 809.00824) 3666 POINT(625.516907 763.567993) 3667 POINT(880.850098 788.499207) 3668 POINT(665.654663 830.88147) 3669 POINT(76.190918 899.164307) 3670 POINT(814.041016 238.921371) 3671 POINT(240.032104 725.047729) 3672 POINT(133.606995 27.571188) 3673 POINT(344.591553 28.5072079) 3674 POINT(255.944885 58.2003555) 3675 POINT(507.317017 407.506927) 3676 POINT(648.938721 954.71405) 3677 POINT(114.760513 58.6291313) 3678 POINT(52.5493736 379.130981) 3679 POINT(797.403015 400.596039) 3680 POINT(165.940826 661.031433) 3681 POINT(447.153473 606.49353) 3682 POINT(30.5725269 710.7146) 3683 POINT(703.518494 564.083069) 3684 POINT(888.771606 881.166748) 3685 POINT(812.179382 261.68042) 3686 POINT(477.706909 559.63916) 3687 POINT(548.307983 926.795776) 3688 POINT(319.810883 962.050415) 3689 POINT(891.904236 536.420654) 3690 POINT(120.854439 959.481445) 3691 POINT(317.385681 197.489212) 3692 POINT(617.520752 13.2572374) 3693 POINT(216.354492 755.237244) 3694 POINT(312.015381 51.6753082) 3695 POINT(990.797424 233.158188) 3696 POINT(379.68811 646.132507) 3697 POINT(441.945526 13.8620081) 3698 POINT(477.647919 286.636475) 3699 POINT(23.763813 223.856918) 3700 POINT(261.868896 206.502838) 3701 POINT(443.818665 541.199463) 3702 POINT(634.385193 744.097351) 3703 POINT(670.461243 572.817383) 3704 POINT(291.051117 977.07666) 3705 POINT(164.377991 283.458862) 3706 POINT(177.317596 533.620483) 3707 POINT(693.229248 451.632294) 3708 POINT(340.996613 428.177277) 3709 POINT(337.076233 296.17984) 3710 POINT(206.61705 229.421753) 3711 POINT(754.47644 792.497131) 3712 POINT(998.418762 229.242615) 3713 POINT(787.506287 577.725769) 3714 POINT(374.102203 818.050659) 3715 POINT(449.68866 42.9797211) 3716 POINT(968.097961 398.562347) 3717 POINT(3.11333656 306.922302) 3718 POINT(603.411682 693.137024) 3719 POINT(507.327942 353.515717) 3720 POINT(240.231186 665.014404) 3721 POINT(58.3498802 57.8703156) 3722 POINT(65.7749176 818.32843) 3723 POINT(155.041138 993.801392) 3724 POINT(474.759552 843.100281) 3725 POINT(783.854126 456.562073) 3726 POINT(477.938568 297.70752) 3727 POINT(31.4824104 701.484497) 3728 POINT(445.109894 781.368225) 3729 POINT(276.23996 916.783447) 3730 POINT(129.628342 242.39035) 3731 POINT(309.184387 355.028961) 3732 POINT(927.734802 234.353271) 3733 POINT(459.343994 546.884827) 3734 POINT(44.9950638 2.67331171) 3735 POINT(886.29718 832.356384) 3736 POINT(124.028732 829.450195) 3737 POINT(428.284149 54.3559494) 3738 POINT(335.81543 547.008484) 3739 POINT(603.646545 167.843262) 3740 POINT(557.644226 152.676666) 3741 POINT(734.440796 491.740417) 3742 POINT(113.786919 12.2523499) 3743 POINT(448.44516 152.480804) 3744 POINT(402.926788 861.071228) 3745 POINT(602.47998 985.278564) 3746 POINT(295.077667 224.046219) 3747 POINT(617.124695 335.478485) 3748 POINT(369.133514 644.51123) 3749 POINT(309.796143 166.767563) 3750 POINT(252.361862 291.85144) 3751 POINT(127.137398 980.321533) 3752 POINT(590.294189 806.023743) 3753 POINT(604.25885 889.480469) 3754 POINT(547.891663 220.075821) 3755 POINT(391.211426 904.267212) 3756 POINT(452.020355 207.201874) 3757 POINT(87.9071274 950.585938) 3758 POINT(915.727173 844.892212) 3759 POINT(797.423828 287.492706) 3760 POINT(924.262512 334.128479) 3761 POINT(952.241089 965.363953) 3762 POINT(252.065567 305.764252) 3763 POINT(874.590576 476.582367) 3764 POINT(762.960938 279.248016) 3765 POINT(315.020203 242.611862) 3766 POINT(619.682434 691.358154) 3767 POINT(64.8542023 526.770752) 3768 POINT(893.730835 505.915558) 3769 POINT(678.983826 495.98999) 3770 POINT(175.816147 461.433228) 3771 POINT(473.983307 728.332275) 3772 POINT(397.168243 364.8927) 3773 POINT(709.668274 492.653442) 3774 POINT(492.39917 739.469116) 3775 POINT(224.780121 644.736877) 3776 POINT(778.05835 465.847626) 3777 POINT(612.502747 288.372467) 3778 POINT(953.358459 595.199707) 3779 POINT(200.126343 253.665375) 3780 POINT(619.712341 171.956192) 3781 POINT(878.622681 527.4422) 3782 POINT(785.778137 991.889709) 3783 POINT(29.5791702 626.707764) 3784 POINT(299.855774 681.990662) 3785 POINT(64.3494034 396.03595) 3786 POINT(810.038696 160.103333) 3787 POINT(147.062729 209.540543) 3788 POINT(175.935028 391.820312) 3789 POINT(571.040405 209.256729) 3790 POINT(178.61554 777.877319) 3791 POINT(627.083008 171.609787) 3792 POINT(535.405457 486.038696) 3793 POINT(100.024055 284.994171) 3794 POINT(214.041901 486.627106) 3795 POINT(293.027069 482.819397) 3796 POINT(650.508728 0.470230341) 3797 POINT(571.588867 711.7948) 3798 POINT(953.609985 952.776489) 3799 POINT(283.490051 344.453491) 3800 POINT(477.242645 917.598816) 3801 POINT(817.507202 853.305176) 3802 POINT(161.705551 897.016907) 3803 POINT(861.20636 352.536865) 3804 POINT(894.672546 209.499283) 3805 POINT(283.328766 948.450439) 3806 POINT(380.240662 256.265686) 3807 POINT(754.044434 304.064209) 3808 POINT(893.428223 126.642601) 3809 POINT(309.689362 964.359375) 3810 POINT(53.4702911 917.807007) 3811 POINT(728.657104 870.006226) 3812 POINT(791.17511 445.983673) 3813 POINT(301.136414 938.152161) 3814 POINT(885.548401 270.763) 3815 POINT(414.762207 453.725555) 3816 POINT(378.045074 838.030579) 3817 POINT(236.481339 404.056396) 3818 POINT(367.499329 156.957321) 3819 POINT(621.661133 429.414734) 3820 POINT(876.456421 990.132935) 3821 POINT(526.447083 143.918045) 3822 POINT(844.851135 671.396362) 3823 POINT(518.486328 612.391479) 3824 POINT(737.448303 632.015381) 3825 POINT(182.385773 422.028137) 3826 POINT(587.997314 662.008484) 3827 POINT(85.7999496 251.566589) 3828 POINT(589.600037 149.622589) 3829 POINT(624.100342 69.284668) 3830 POINT(74.4241562 708.94519) 3831 POINT(188.551239 54.1237221) 3832 POINT(106.801651 44.6301689) 3833 POINT(225.311417 267.062622) 3834 POINT(95.260376 825.661621) 3835 POINT(469.029938 753.428528) 3836 POINT(167.58606 99.5150833) 3837 POINT(872.068359 647.765869) 3838 POINT(358.17749 117.159599) 3839 POINT(13.3389091 513.410278) 3840 POINT(441.430298 741.868896) 3841 POINT(392.411377 376.886292) 3842 POINT(974.488098 155.188232) 3843 POINT(406.039368 26.135582) 3844 POINT(456.376801 766.675415) 3845 POINT(704.849426 210.497314) 3846 POINT(590.360718 885.863037) 3847 POINT(355.006927 504.021759) 3848 POINT(277.522217 271.563904) 3849 POINT(928.726501 132.460266) 3850 POINT(950.389343 472.077362) 3851 POINT(542.168091 894.111877) 3852 POINT(157.366348 387.587738) 3853 POINT(501.306549 67.2236099) 3854 POINT(366.327057 591.244995) 3855 POINT(735.670349 549.061523) 3856 POINT(906.708618 146.867813) 3857 POINT(554.4151 336.947113) 3858 POINT(904.612305 358.325531) 3859 POINT(485.171722 277.963959) 3860 POINT(278.725098 618.478821) 3861 POINT(417.733673 985.783691) 3862 POINT(103.387764 224.749985) 3863 POINT(914.318359 169.865662) 3864 POINT(359.055176 265.245514) 3865 POINT(136.350571 829.50415) 3866 POINT(683.031067 915.776062) 3867 POINT(223.111359 833.802124) 3868 POINT(811.170349 326.655273) 3869 POINT(316.92984 105.251099) 3870 POINT(23.7880707 711.968811) 3871 POINT(517.747314 731.409729) 3872 POINT(838.9953 916.88269) 3873 POINT(449.867584 894.059753) 3874 POINT(149.918701 154.914017) 3875 POINT(496.649689 91.6460953) 3876 POINT(897.694763 441.960022) 3877 POINT(94.0630264 67.8855057) 3878 POINT(581.835999 562.938538) 3879 POINT(338.790497 491.877808) 3880 POINT(508.736237 886.417297) 3881 POINT(956.438965 373.228882) 3882 POINT(696.039551 579.522827) 3883 POINT(864.0354 565.571594) 3884 POINT(16.783268 497.254883) 3885 POINT(950.104919 405.051117) 3886 POINT(167.215103 345.257629) 3887 POINT(665.127258 454.050446) 3888 POINT(763.669678 401.899567) 3889 POINT(773.063354 647.523804) 3890 POINT(657.690735 783.609131) 3891 POINT(447.056885 558.253906) 3892 POINT(948.650208 736.835266) 3893 POINT(413.617371 462.258942) 3894 POINT(166.512985 921.421875) 3895 POINT(251.951569 866.167786) 3896 POINT(394.318329 934.887817) 3897 POINT(259.14624 890.016602) 3898 POINT(353.724548 127.001976) 3899 POINT(596.246033 632.564514) 3900 POINT(544.02771 921.683044) 3901 POINT(161.672684 398.488678) 3902 POINT(714.995728 641.788269) 3903 POINT(801.781616 469.923859) 3904 POINT(279.348694 105.585373) 3905 POINT(896.654297 256.609772) 3906 POINT(697.583557 806.032227) 3907 POINT(963.614197 972.877258) 3908 POINT(565.036377 210.464447) 3909 POINT(940.687866 44.9467049) 3910 POINT(720.660767 934.572021) 3911 POINT(64.692215 843.248901) 3912 POINT(504.18277 196.925491) 3913 POINT(389.325287 922.070618) 3914 POINT(591.378784 885.699402) 3915 POINT(721.200928 108.740433) 3916 POINT(117.670158 745.178406) 3917 POINT(137.9552 658.416382) 3918 POINT(992.59845 984.283936) 3919 POINT(922.250244 435.534882) 3920 POINT(49.7386398 31.5100861) 3921 POINT(156.714355 121.986374) 3922 POINT(559.042419 109.730759) 3923 POINT(913.717041 723.570374) 3924 POINT(445.425781 820.362366) 3925 POINT(804.649414 854.35675) 3926 POINT(555.694092 440.013885) 3927 POINT(68.4355774 142.961716) 3928 POINT(445.831787 215.308853) 3929 POINT(648.857666 610.795776) 3930 POINT(325.587128 554.940613) 3931 POINT(183.562881 521.023926) 3932 POINT(103.608788 764.761108) 3933 POINT(181.093628 254.906189) 3934 POINT(483.701691 344.966553) 3935 POINT(150.827423 521.579346) 3936 POINT(33.7684441 2.02481103) 3937 POINT(157.335526 196.053696) 3938 POINT(299.501831 446.294586) 3939 POINT(356.503906 371.704712) 3940 POINT(783.846924 914.365662) 3941 POINT(25.0643787 636.947021) 3942 POINT(832.720276 728.656067) 3943 POINT(485.338715 985.802979) 3944 POINT(732.661987 282.032684) 3945 POINT(48.5150871 259.084747) 3946 POINT(165.316528 699.085693) 3947 POINT(626.283691 212.86058) 3948 POINT(308.342346 305.727722) 3949 POINT(293.917786 615.387329) 3950 POINT(507.104462 553.165466) 3951 POINT(707.778625 589.976501) 3952 POINT(454.003815 449.796204) 3953 POINT(594.754944 422.182587) 3954 POINT(43.3664169 4.62886047) 3955 POINT(326.45636 423.727905) 3956 POINT(563.393921 968.456421) 3957 POINT(981.317688 146.816513) 3958 POINT(139.840286 954.877441) 3959 POINT(975.525269 240.66156) 3960 POINT(559.019592 153.6707) 3961 POINT(829.352234 772.51062) 3962 POINT(923.787292 525.879578) 3963 POINT(527.719788 649.178955) 3964 POINT(391.72049 945.803284) 3965 POINT(159.346771 388.69046) 3966 POINT(319.417755 973.082336) 3967 POINT(582.589172 437.307648) 3968 POINT(3.34287548 181.997177) 3969 POINT(101.013519 302.860596) 3970 POINT(331.772888 519.382935) 3971 POINT(949.029968 294.329102) 3972 POINT(713.11731 422.242004) 3973 POINT(526.782959 699.202698) 3974 POINT(745.230957 206.870178) 3975 POINT(101.349388 888.959961) 3976 POINT(63.5363503 989.394226) 3977 POINT(253.631012 479.42572) 3978 POINT(431.125824 449.959747) 3979 POINT(920.779053 162.759201) 3980 POINT(392.975281 586.948975) 3981 POINT(14.3206997 812.998108) 3982 POINT(143.537567 91.7122192) 3983 POINT(414.243286 604.661133) 3984 POINT(789.99292 617.153748) 3985 POINT(607.145325 96.7437744) 3986 POINT(23.1332703 414.535553) 3987 POINT(388.316864 961.010559) 3988 POINT(628.196228 112.09095) 3989 POINT(247.520157 477.884918) 3990 POINT(26.0084915 737.139099) 3991 POINT(248.690857 305.202728) 3992 POINT(580.74707 11.6472902) 3993 POINT(165.27562 829.967041) 3994 POINT(147.798401 941.519104) 3995 POINT(194.098648 642.007568) 3996 POINT(870.033813 374.826202) 3997 POINT(918.264038 87.7015076) 3998 POINT(622.899109 516.921021) 3999 POINT(78.5354233 253.883652) 4000 POINT(520.728455 994.648376) 4001 POINT(725.898865 144.615112) 4002 POINT(244.45932 482.13623) 4003 POINT(126.739059 810.065247) 4004 POINT(553.391907 801.92511) 4005 POINT(365.504303 96.4943619) 4006 POINT(572.873352 853.157043) 4007 POINT(505.281586 853.930603) 4008 POINT(380.988312 389.478027) 4009 POINT(819.859314 473.967102) 4010 POINT(78.8261871 160.125732) 4011 POINT(475.254333 660.137329) 4012 POINT(152.11235 965.916992) 4013 POINT(916.079773 249.163254) 4014 POINT(201.512039 885.679077) 4015 POINT(482.411896 610.237671) 4016 POINT(422.430603 56.8791199) 4017 POINT(653.989136 824.248901) 4018 POINT(893.468262 596.203125) 4019 POINT(76.7736282 173.961166) 4020 POINT(329.781982 311.668396) 4021 POINT(786.385437 913.72998) 4022 POINT(470.536194 968.176941) 4023 POINT(996.063232 303.081116) 4024 POINT(398.5784 844.526001) 4025 POINT(484.122101 217.772186) 4026 POINT(488.781647 873.698792) 4027 POINT(96.0009155 545.756104) 4028 POINT(205.591507 642.300598) 4029 POINT(595.675354 50.386734) 4030 POINT(929.777283 182.451172) 4031 POINT(65.3443909 471.465149) 4032 POINT(401.907562 704.075623) 4033 POINT(93.8809738 634.18158) 4034 POINT(191.469681 961.776733) 4035 POINT(24.7085667 60.1313057) 4036 POINT(4.77657938 743.351135) 4037 POINT(791.779907 602.480835) 4038 POINT(253.925079 312.199402) 4039 POINT(175.576065 553.755615) 4040 POINT(448.278381 479.66629) 4041 POINT(305.019989 359.965698) 4042 POINT(917.566162 162.640335) 4043 POINT(639.543945 894.85907) 4044 POINT(613.172729 774.086487) 4045 POINT(540.019165 344.591492) 4046 POINT(196.084778 967.742554) 4047 POINT(507.734375 283.257446) 4048 POINT(943.99646 121.770752) 4049 POINT(695.103943 906.388672) 4050 POINT(787.033936 399.130524) 4051 POINT(906.430237 571.17041) 4052 POINT(805.415405 304.871552) 4053 POINT(876.092896 472.854919) 4054 POINT(40.174202 803.097351) 4055 POINT(577.379272 186.392136) 4056 POINT(430.034668 330.309235) 4057 POINT(948.305054 905.998535) 4058 POINT(996.968811 409.124023) 4059 POINT(69.8427811 24.2286243) 4060 POINT(166.316086 129.503143) 4061 POINT(173.729126 472.694855) 4062 POINT(884.19281 16.801302) 4063 POINT(146.348999 281.131653) 4064 POINT(247.946426 880.929016) 4065 POINT(515.098206 647.868103) 4066 POINT(910.441345 163.136841) 4067 POINT(415.242035 516.437622) 4068 POINT(974.946106 231.412476) 4069 POINT(227.872162 49.1134872) 4070 POINT(336.393463 577.896301) 4071 POINT(520.502197 323.344879) 4072 POINT(22.0026608 138.356964) 4073 POINT(506.637238 161.725479) 4074 POINT(568.00647 71.5394135) 4075 POINT(442.944733 866.240479) 4076 POINT(570.959167 532.643799) 4077 POINT(504.191589 154.699997) 4078 POINT(456.388214 868.477173) 4079 POINT(596.788086 198.712967) 4080 POINT(102.082802 510.730804) 4081 POINT(999.591675 11.1296186) 4082 POINT(78.9131546 797.7901) 4083 POINT(441.71405 715.065613) 4084 POINT(972.683899 304.515259) 4085 POINT(355.693024 400.512543) 4086 POINT(23.2195625 684.211365) 4087 POINT(272.927124 307.869751) 4088 POINT(361.851624 848.815857) 4089 POINT(177.227036 205.847748) 4090 POINT(599.045105 744.092834) 4091 POINT(700.350525 805.075623) 4092 POINT(766.517456 368.867828) 4093 POINT(257.212402 384.990051) 4094 POINT(462.428162 784.236206) 4095 POINT(82.982338 42.4234924) 4096 POINT(996.752808 44.0131721) 4097 POINT(982.508423 893.590576) 4098 POINT(852.623291 525.885376) 4099 POINT(845.564453 490.375854) 4100 POINT(537.152344 468.809235) 4101 POINT(358.574707 726.049988) 4102 POINT(14.1483574 431.839935) 4103 POINT(172.10321 699.516296) 4104 POINT(216.350876 329.065369) 4105 POINT(209.009659 741.261902) 4106 POINT(404.702423 1.5645299) 4107 POINT(44.4112206 954.338806) 4108 POINT(358.165802 437.858551) 4109 POINT(907.198547 831.528503) 4110 POINT(974.263 617.332214) 4111 POINT(973.723083 432.577148) 4112 POINT(975.552307 35.3666763) 4113 POINT(205.408569 165.878067) 4114 POINT(141.491714 673.854004) 4115 POINT(59.5714645 855.700134) 4116 POINT(112.505585 46.3978806) 4117 POINT(340.927734 693.11908) 4118 POINT(90.648262 904.511353) 4119 POINT(202.491577 85.9255905) 4120 POINT(139.23735 810.78302) 4121 POINT(619.350281 825.31488) 4122 POINT(665.531799 529.221985) 4123 POINT(395.75589 376.083221) 4124 POINT(662.40094 654.337585) 4125 POINT(101.871277 238.965958) 4126 POINT(446.540405 92.1337357) 4127 POINT(26.2229099 10.8809595) 4128 POINT(724.833862 551.888611) 4129 POINT(856.459045 29.0368729) 4130 POINT(562.75885 631.754456) 4131 POINT(25.517416 891.608215) 4132 POINT(138.231735 48.9009285) 4133 POINT(472.032776 30.0685234) 4134 POINT(413.055115 131.792023) 4135 POINT(530.141785 211.034912) 4136 POINT(117.36409 554.525696) 4137 POINT(180.280624 978.965698) 4138 POINT(748.487122 37.8895607) 4139 POINT(432.751099 741.241455) 4140 POINT(865.885925 96.4349289) 4141 POINT(981.510681 335.653107) 4142 POINT(502.8909 993.608093) 4143 POINT(836.707703 414.342407) 4144 POINT(401.496033 636.592529) 4145 POINT(628.935852 0.64427942) 4146 POINT(349.341248 848.420776) 4147 POINT(962.163269 814.542175) 4148 POINT(702.13739 87.1529236) 4149 POINT(190.050659 872.668274) 4150 POINT(207.248093 421.147522) 4151 POINT(494.299377 919.687988) 4152 POINT(205.130295 236.967346) 4153 POINT(174.266861 174.852524) 4154 POINT(828.169373 464.174072) 4155 POINT(712.991211 931.462402) 4156 POINT(797.57489 901.71582) 4157 POINT(892.73114 744.559814) 4158 POINT(147.994232 766.961121) 4159 POINT(998.039978 315.583282) 4160 POINT(699.053955 744.473572) 4161 POINT(799.257507 29.8306561) 4162 POINT(308.968658 361.765808) 4163 POINT(465.25473 236.856339) 4164 POINT(56.6134949 378.557922) 4165 POINT(50.5635719 364.481995) 4166 POINT(127.107178 350.160431) 4167 POINT(556.045044 418.65213) 4168 POINT(647.192505 560.792603) 4169 POINT(419.508575 204.26709) 4170 POINT(308.854065 955.847229) 4171 POINT(376.820312 82.3550873) 4172 POINT(814.119873 510.863464) 4173 POINT(996.788269 398.100677) 4174 POINT(905.427612 27.4331608) 4175 POINT(464.373535 29.5595818) 4176 POINT(651.99115 651.230835) 4177 POINT(824.549805 241.206497) 4178 POINT(334.102051 364.242004) 4179 POINT(439.559875 118.264038) 4180 POINT(498.182587 352.100525) 4181 POINT(719.647583 11.1455326) 4182 POINT(792.751465 918.904602) 4183 POINT(703.964478 354.041077) 4184 POINT(989.456909 587.246887) 4185 POINT(64.7691727 923.034546) 4186 POINT(47.3000832 142.383606) 4187 POINT(932.884949 568.137878) 4188 POINT(298.558502 759.018127) 4189 POINT(272.417084 956.866516) 4190 POINT(381.294525 480.251709) 4191 POINT(622.838928 186.687744) 4192 POINT(678.392517 334.645264) 4193 POINT(959.741577 807.695679) 4194 POINT(962.633301 303.457458) 4195 POINT(362.937469 908.690308) 4196 POINT(110.327057 351.013092) 4197 POINT(611.47644 288.551819) 4198 POINT(4.55911398 362.475769) 4199 POINT(816.850037 205.144547) 4200 POINT(678.353271 291.342773) 4201 POINT(653.737366 876.299927) 4202 POINT(876.339905 190.655563) 4203 POINT(625.718567 427.694672) 4204 POINT(272.282867 314.772583) 4205 POINT(413.201294 732.262634) 4206 POINT(753.635498 750.739929) 4207 POINT(572.260925 972.377136) 4208 POINT(360.858734 328.614105) 4209 POINT(394.1922 452.274994) 4210 POINT(489.365814 17.9488354) 4211 POINT(382.43689 382.531036) 4212 POINT(869.598816 933.099121) 4213 POINT(670.456604 4.94188595) 4214 POINT(132.968231 123.678223) 4215 POINT(483.433319 494.663727) 4216 POINT(648.389587 839.722412) 4217 POINT(958.920044 802.220581) 4218 POINT(929.250793 145.783859) 4219 POINT(885.356873 732.037048) 4220 POINT(620.289856 966.823608) 4221 POINT(119.474052 613.052612) 4222 POINT(687.619385 624.581543) 4223 POINT(108.906471 432.968689) 4224 POINT(465.701721 49.8416748) 4225 POINT(407.849701 78.619812) 4226 POINT(128.276367 408.110229) 4227 POINT(742.429382 664.317993) 4228 POINT(615.010071 268.713226) 4229 POINT(797.893372 916.902161) 4230 POINT(184.05925 485.867889) 4231 POINT(779.149048 315.35318) 4232 POINT(397.988403 91.1764908) 4233 POINT(85.0664597 514.56543) 4234 POINT(264.90744 57.1447411) 4235 POINT(358.984619 393.172577) 4236 POINT(429.712677 258.280029) 4237 POINT(284.749786 495.809082) 4238 POINT(176.51651 198.241989) 4239 POINT(919.264343 348.080078) 4240 POINT(700.42157 597.186218) 4241 POINT(46.9406433 30.6561604) 4242 POINT(725.558533 142.278458) 4243 POINT(44.7701073 945.790649) 4244 POINT(380.705688 136.396896) 4245 POINT(423.188507 99.2681198) 4246 POINT(40.9184151 365.951569) 4247 POINT(499.930328 673.068848) 4248 POINT(53.6042938 819.819092) 4249 POINT(342.123291 664.219727) 4250 POINT(293.715851 389.533356) 4251 POINT(24.6134434 914.379456) 4252 POINT(941.633545 968.626648) 4253 POINT(576.687317 719.270325) 4254 POINT(808.452759 439.545807) 4255 POINT(479.855988 169.356659) 4256 POINT(709.464478 523.663086) 4257 POINT(819.191101 481.018951) 4258 POINT(523.44696 897.974365) 4259 POINT(840.992126 394.373779) 4260 POINT(591.91626 16.1708355) 4261 POINT(719.569031 568.93396) 4262 POINT(380.782562 767.54248) 4263 POINT(353.034912 146.222427) 4264 POINT(922.122437 160.919205) 4265 POINT(387.721405 879.59668) 4266 POINT(504.328339 219.483322) 4267 POINT(886.791321 581.887512) 4268 POINT(616.177551 943.344604) 4269 POINT(912.584351 2.603019) 4270 POINT(958.944946 658.410278) 4271 POINT(164.077469 525.629211) 4272 POINT(808.262146 81.1041718) 4273 POINT(908.578735 448.416504) 4274 POINT(474.823212 638.300781) 4275 POINT(56.5309601 753.061523) 4276 POINT(624.192871 780.483398) 4277 POINT(964.347107 662.568787) 4278 POINT(767.965149 394.272034) 4279 POINT(604.903015 361.64209) 4280 POINT(31.5386295 779.388062) 4281 POINT(139.19371 785.954895) 4282 POINT(991.139893 716.742493) 4283 POINT(754.342957 597.965332) 4284 POINT(810.888367 771.188232) 4285 POINT(329.402802 387.571747) 4286 POINT(409.217438 387.735413) 4287 POINT(56.072876 794.477417) 4288 POINT(955.552185 437.473572) 4289 POINT(409.616333 943.901245) 4290 POINT(608.602722 423.496124) 4291 POINT(746.980835 131.707794) 4292 POINT(225.923004 482.81546) 4293 POINT(543.711365 668.238953) 4294 POINT(422.563507 923.25769) 4295 POINT(686.046143 786.839172) 4296 POINT(159.92038 260.923065) 4297 POINT(955.124084 403.622345) 4298 POINT(282.565887 410.905029) 4299 POINT(600.141418 655.413757) 4300 POINT(572.384033 809.117615) 4301 POINT(748.326111 684.614197) 4302 POINT(890.300171 174.449905) 4303 POINT(971.638733 240.200012) 4304 POINT(463.980072 366.839508) 4305 POINT(81.1665039 746.046814) 4306 POINT(945.902832 257.644928) 4307 POINT(686.381897 489.722595) 4308 POINT(304.127594 743.941162) 4309 POINT(102.049477 210.936401) 4310 POINT(164.947418 438.727539) 4311 POINT(252.967392 338.681366) 4312 POINT(852.649475 225.807831) 4313 POINT(586.427734 425.126587) 4314 POINT(970.100708 743.19989) 4315 POINT(2.91117907 453.46521) 4316 POINT(41.2954407 54.8878517) 4317 POINT(133.847137 922.822876) 4318 POINT(52.907753 780.713684) 4319 POINT(186.159897 218.190948) 4320 POINT(948.9823 912.002563) 4321 POINT(119.787544 305.031128) 4322 POINT(466.992554 470.544128) 4323 POINT(287.539001 310.175018) 4324 POINT(573.539429 235.845413) 4325 POINT(335.801788 892.013733) 4326 POINT(36.0288086 525.800537) 4327 POINT(207.11261 308.471954) 4328 POINT(927.945435 665.368469) 4329 POINT(396.962891 871.230896) 4330 POINT(638.157898 403.435211) 4331 POINT(171.062378 655.090088) 4332 POINT(970.484741 367.294434) 4333 POINT(547.387512 303.833282) 4334 POINT(363.099701 295.276459) 4335 POINT(369.576508 945.721802) 4336 POINT(15.9503632 519.780029) 4337 POINT(452.610718 275.626099) 4338 POINT(629.02301 134.725815) 4339 POINT(354.371521 965.302124) 4340 POINT(568.962769 763.29718) 4341 POINT(931.846375 682.525208) 4342 POINT(93.3128586 524.423401) 4343 POINT(170.853302 103.435532) 4344 POINT(970.670715 1.08611977) 4345 POINT(353.673492 625.877197) 4346 POINT(594.691772 952.099243) 4347 POINT(48.5562859 785.708557) 4348 POINT(856.545837 534.074768) 4349 POINT(595.448303 159.617676) 4350 POINT(423.722351 654.992676) 4351 POINT(228.382385 339.130646) 4352 POINT(185.676605 148.946518) 4353 POINT(49.7486687 179.093277) 4354 POINT(934.53949 17.636179) 4355 POINT(166.294281 273.424255) 4356 POINT(520.914124 443.079254) 4357 POINT(150.41539 570.473999) 4358 POINT(882.730225 443.463623) 4359 POINT(920.500427 304.609772) 4360 POINT(314.416809 366.365723) 4361 POINT(286.263306 350.034668) 4362 POINT(902.599548 227.617477) 4363 POINT(2.80200195 573.309021) 4364 POINT(184.58606 687.466125) 4365 POINT(772.292053 414.185944) 4366 POINT(221.631638 76.4927292) 4367 POINT(354.65448 417.41684) 4368 POINT(558.080872 850.831116) 4369 POINT(756.235107 693.98584) 4370 POINT(50.7748451 568.970703) 4371 POINT(394.630127 747.266724) 4372 POINT(594.544495 480.87439) 4373 POINT(552.54248 961.965637) 4374 POINT(86.2505951 34.9586945) 4375 POINT(276.34967 541.143555) 4376 POINT(11.8714542 610.961182) 4377 POINT(916.401245 274.455017) 4378 POINT(211.905518 38.7657585) 4379 POINT(594.584473 229.972946) 4380 POINT(286.288483 567.419678) 4381 POINT(197.155762 49.1919861) 4382 POINT(800.697144 898.010132) 4383 POINT(782.113647 772.24231) 4384 POINT(714.218689 322.570312) 4385 POINT(143.495865 75.8568039) 4386 POINT(979.723572 443.165741) 4387 POINT(351.053406 33.6872482) 4388 POINT(991.842773 45.8073425) 4389 POINT(372.041473 336.268219) 4390 POINT(845.277466 528.521606) 4391 POINT(949.75769 681.001343) 4392 POINT(293.467621 528.056458) 4393 POINT(156.457993 371.333801) 4394 POINT(892.726013 642.240173) 4395 POINT(930.023621 174.805618) 4396 POINT(311.256256 132.470978) 4397 POINT(245.995209 73.4468384) 4398 POINT(860.587769 331.365265) 4399 POINT(749.216858 604.339172) 4400 POINT(356.570343 933.017578) 4401 POINT(880.35083 205.873734) 4402 POINT(778.997864 57.0458984) 4403 POINT(68.0648422 44.8104286) 4404 POINT(417.120178 742.643494) 4405 POINT(32.0166512 654.778015) 4406 POINT(259.824066 525.902771) 4407 POINT(847.249878 838.07373) 4408 POINT(14.3132753 804.003418) 4409 POINT(177.773697 404.878174) 4410 POINT(969.015747 505.382568) 4411 POINT(94.5650558 698.273315) 4412 POINT(811.637756 18.2663708) 4413 POINT(577.760803 496.337769) 4414 POINT(781.338013 624.105469) 4415 POINT(169.280243 826.323181) 4416 POINT(187.611771 721.30896) 4417 POINT(123.54776 768.339233) 4418 POINT(333.464355 682.628418) 4419 POINT(711.497681 280.567688) 4420 POINT(405.776276 181.643509) 4421 POINT(305.903687 23.8921471) 4422 POINT(563.470886 555.707825) 4423 POINT(331.659363 695.694214) 4424 POINT(589.402588 190.715378) 4425 POINT(748.457214 360.780518) 4426 POINT(353.09549 854.062927) 4427 POINT(169.001495 67.9467697) 4428 POINT(440.03299 343.746063) 4429 POINT(55.2042046 805.153748) 4430 POINT(573.696289 131.800919) 4431 POINT(307.63382 731.914001) 4432 POINT(526.666077 868.085083) 4433 POINT(427.82663 57.1181412) 4434 POINT(677.662598 575.083008) 4435 POINT(825.054993 842.643921) 4436 POINT(16.3460388 146.074341) 4437 POINT(623.042419 111.786873) 4438 POINT(474.103821 788.272095) 4439 POINT(940.297058 646.5625) 4440 POINT(917.108459 400.717163) 4441 POINT(340.716217 754.598816) 4442 POINT(880.960754 505.71756) 4443 POINT(327.526001 575.650757) 4444 POINT(260.681519 364.983093) 4445 POINT(60.2167664 446.317139) 4446 POINT(255.253677 800.49707) 4447 POINT(165.807266 731.561096) 4448 POINT(165.036713 139.369141) 4449 POINT(675.515808 910.970642) 4450 POINT(369.00412 635.848572) 4451 POINT(906.878296 639.830261) 4452 POINT(385.828278 857.376465) 4453 POINT(18.7804241 819.1026) 4454 POINT(220.434372 410.690826) 4455 POINT(60.1529846 249.073624) 4456 POINT(790.955994 224.851562) 4457 POINT(507.719055 319.042969) 4458 POINT(648.371887 487.543518) 4459 POINT(517.815979 26.0201206) 4460 POINT(173.931305 476.678802) 4461 POINT(703.698669 810.521606) 4462 POINT(152.354614 559.323303) 4463 POINT(72.7468109 654.476501) 4464 POINT(959.421814 803.101562) 4465 POINT(525.65918 277.79187) 4466 POINT(411.753601 110.905777) 4467 POINT(818.1474 284.783264) 4468 POINT(648.295166 837.987427) 4469 POINT(229.108139 703.534851) 4470 POINT(744.300354 162.006378) 4471 POINT(60.1292572 500.05368) 4472 POINT(299.677673 372.641815) 4473 POINT(29.9872532 570.167236) 4474 POINT(147.725723 939.849731) 4475 POINT(223.148972 166.461777) 4476 POINT(953.988953 61.3143005) 4477 POINT(429.959595 221.776382) 4478 POINT(627.788391 123.258072) 4479 POINT(983.063721 117.073349) 4480 POINT(663.60968 518.330627) 4481 POINT(882.674561 907.757629) 4482 POINT(231.790421 824.205994) 4483 POINT(523.711548 182.189911) 4484 POINT(716.783203 871.821533) 4485 POINT(429.825073 658.331543) 4486 POINT(578.74823 528.550842) 4487 POINT(380.30368 423.901703) 4488 POINT(715.549316 535.310303) 4489 POINT(331.319855 752.469421) 4490 POINT(705.707703 804.563904) 4491 POINT(806.549011 558.523193) 4492 POINT(399.951324 685.958496) 4493 POINT(515.650757 430.356567) 4494 POINT(734.262207 706.049561) 4495 POINT(982.313721 457.810974) 4496 POINT(498.455597 697.059143) 4497 POINT(884.543457 675.376343) 4498 POINT(202.152191 446.256561) 4499 POINT(664.751709 308.339355) 4500 POINT(428.465302 562.405701) 4501 POINT(120.237312 344.696808) 4502 POINT(901.89679 99.4456177) 4503 POINT(78.2250748 478.137543) 4504 POINT(371.007721 171.453781) 4505 POINT(664.248596 662.895691) 4506 POINT(721.726074 798.895874) 4507 POINT(936.964905 390.667206) 4508 POINT(100.118187 146.732101) 4509 POINT(963.227905 109.659996) 4510 POINT(293.654999 143.293564) 4511 POINT(499.30777 738.446045) 4512 POINT(960.139893 838.747986) 4513 POINT(910.531982 30.4474258) 4514 POINT(219.358978 297.862274) 4515 POINT(463.474274 182.100586) 4516 POINT(553.104004 988.671997) 4517 POINT(651.386353 878.100342) 4518 POINT(266.581757 582.256592) 4519 POINT(332.239655 275.356506) 4520 POINT(23.5491562 515.374512) 4521 POINT(565.024475 853.752258) 4522 POINT(207.126724 174.157196) 4523 POINT(597.479248 732.452515) 4524 POINT(309.586212 860.927979) 4525 POINT(288.945709 856.970032) 4526 POINT(902.053284 925.666748) 4527 POINT(725.454285 311.690033) 4528 POINT(366.707397 337.475342) 4529 POINT(108.443062 77.9256516) 4530 POINT(830.519226 189.022919) 4531 POINT(459.835754 527.30658) 4532 POINT(164.786392 958.405823) 4533 POINT(898.809021 268.493958) 4534 POINT(505.781891 978.806274) 4535 POINT(401.848663 121.589714) 4536 POINT(208.909439 308.067902) 4537 POINT(78.1356735 714.522766) 4538 POINT(125.189796 759.737061) 4539 POINT(175.549118 730.121399) 4540 POINT(441.124237 106.787857) 4541 POINT(705.383423 198.124817) 4542 POINT(360.567444 642.316772) 4543 POINT(741.132141 455.272949) 4544 POINT(642.887695 261.752258) 4545 POINT(941.399841 786.692017) 4546 POINT(411.216522 792.987427) 4547 POINT(580.299072 126.544548) 4548 POINT(876.939758 359.350891) 4549 POINT(579.828735 114.433571) 4550 POINT(313.826294 421.141602) 4551 POINT(545.097412 871.071106) 4552 POINT(82.5250397 750.866272) 4553 POINT(250.356537 932.592224) 4554 POINT(31.9070015 792.234131) 4555 POINT(135.277573 243.592545) 4556 POINT(669.329773 610.935059) 4557 POINT(198.501816 96.0927353) 4558 POINT(31.9298267 334.408447) 4559 POINT(849.095459 572.41333) 4560 POINT(843.197205 606.994812) 4561 POINT(254.160461 827.230591) 4562 POINT(894.177979 55.4640617) 4563 POINT(38.6207809 366.352325) 4564 POINT(440.628784 107.969971) 4565 POINT(715.378052 51.1078835) 4566 POINT(3.38283229 167.658142) 4567 POINT(392.995209 597.4104) 4568 POINT(249.275513 181.738983) 4569 POINT(394.327942 832.877136) 4570 POINT(517.540649 29.7452526) 4571 POINT(771.716736 424.861176) 4572 POINT(148.066757 983.463745) 4573 POINT(999.231201 463.454071) 4574 POINT(622.87384 258.825836) 4575 POINT(614.909302 458.69458) 4576 POINT(913.322021 520.652161) 4577 POINT(358.963898 538.212036) 4578 POINT(548.723511 138.986649) 4579 POINT(568.669678 973.821289) 4580 POINT(206.133881 195.862366) 4581 POINT(736.352539 452.273224) 4582 POINT(938.227966 259.380829) 4583 POINT(280.967102 581.172546) 4584 POINT(81.5072174 974.248535) 4585 POINT(621.668823 96.3620605) 4586 POINT(948.963562 651.309631) 4587 POINT(547.202148 737.804749) 4588 POINT(341.184509 500.684204) 4589 POINT(949.591003 178.788895) 4590 POINT(892.29425 562.031311) 4591 POINT(114.416664 135.347076) 4592 POINT(189.782501 999.990906) 4593 POINT(640.907288 521.982788) 4594 POINT(310.996826 402.437561) 4595 POINT(489.276764 444.60553) 4596 POINT(947.810791 333.83725) 4597 POINT(734.495483 886.094482) 4598 POINT(141.797852 336.400574) 4599 POINT(37.3362083 113.863365) 4600 POINT(25.3382111 159.163376) 4601 POINT(145.61911 357.541901) 4602 POINT(12.7805967 441.509888) 4603 POINT(509.718018 919.395081) 4604 POINT(966.517944 735.524414) 4605 POINT(263.340118 106.971367) 4606 POINT(785.189087 364.08017) 4607 POINT(888.236877 748.937317) 4608 POINT(137.87851 562.53595) 4609 POINT(182.854324 368.961029) 4610 POINT(164.977097 915.726501) 4611 POINT(101.116226 662.336792) 4612 POINT(552.231567 693.643433) 4613 POINT(357.814453 824.8927) 4614 POINT(581.520447 114.467331) 4615 POINT(728.837891 618.321167) 4616 POINT(395.244476 268.726501) 4617 POINT(853.213623 180.771088) 4618 POINT(559.23114 760.229187) 4619 POINT(293.294098 382.316803) 4620 POINT(53.1692162 535.587952) 4621 POINT(181.159073 623.370117) 4622 POINT(492.382263 752.791809) 4623 POINT(103.295082 37.4626579) 4624 POINT(827.916443 389.167175) 4625 POINT(909.874817 10.9386349) 4626 POINT(74.2723236 9.6258297) 4627 POINT(915.617798 209.446259) 4628 POINT(69.6065826 247.355392) 4629 POINT(850.528625 108.798294) 4630 POINT(628.929199 21.7393456) 4631 POINT(863.164734 585.515015) 4632 POINT(156.927261 903.580627) 4633 POINT(646.987488 915.518494) 4634 POINT(246.872986 797.564331) 4635 POINT(200.433548 558.992126) 4636 POINT(612.070251 848.868286) 4637 POINT(20.362957 141.95488) 4638 POINT(936.027893 188.077209) 4639 POINT(421.382996 862.852539) 4640 POINT(649.717163 439.872894) 4641 POINT(753.215942 203.289398) 4642 POINT(964.693787 360.761841) 4643 POINT(215.910538 869.392273) 4644 POINT(628.487854 204.415405) 4645 POINT(737.547729 663.311035) 4646 POINT(195.55777 495.68869) 4647 POINT(548.543091 827.749207) 4648 POINT(198.461914 522.349304) 4649 POINT(56.2128067 930.528931) 4650 POINT(488.047302 613.895691) 4651 POINT(866.572388 687.011536) 4652 POINT(419.826965 897.118713) 4653 POINT(119.145943 147.309555) 4654 POINT(180.89566 816.422485) 4655 POINT(74.7509766 309.876007) 4656 POINT(765.405396 42.1590233) 4657 POINT(333.804047 636.083557) 4658 POINT(257.611694 111.762695) 4659 POINT(449.797394 820.294373) 4660 POINT(713.753906 46.3321724) 4661 POINT(653.481689 970.766235) 4662 POINT(44.6159821 440.163086) 4663 POINT(110.340759 548.273499) 4664 POINT(589.727661 953.874817) 4665 POINT(617.666321 726.890686) 4666 POINT(195.125107 465.11261) 4667 POINT(6.56965256 535.97113) 4668 POINT(415.844269 196.879379) 4669 POINT(175.356857 230.5513) 4670 POINT(271.437378 195.528854) 4671 POINT(648.731384 851.455444) 4672 POINT(800.480164 452.114868) 4673 POINT(665.278503 174.108475) 4674 POINT(454.092285 526.562195) 4675 POINT(954.761536 19.973526) 4676 POINT(307.875336 659.035461) 4677 POINT(816.182434 795.706787) 4678 POINT(778.447205 342.603729) 4679 POINT(664.70575 727.300293) 4680 POINT(330.118866 132.111618) 4681 POINT(525.928528 430.009613) 4682 POINT(827.534851 912.99585) 4683 POINT(743.229431 575.715942) 4684 POINT(212.732773 928.159973) 4685 POINT(479.806061 629.156006) 4686 POINT(994.635071 929.108704) 4687 POINT(71.3930664 80.3865051) 4688 POINT(273.166809 888.135132) 4689 POINT(376.556152 725.795837) 4690 POINT(269.815887 680.859985) 4691 POINT(515.003662 282.398773) 4692 POINT(395.462097 62.8870811) 4693 POINT(644.815918 664.161926) 4694 POINT(1.76685023 551.4198) 4695 POINT(149.236588 324.427643) 4696 POINT(84.5374374 553.676514) 4697 POINT(53.2140236 160.488907) 4698 POINT(239.571091 220.755768) 4699 POINT(17.8536892 85.9897079) 4700 POINT(219.996429 150.778824) 4701 POINT(544.103577 770.689941) 4702 POINT(68.6300049 711.838074) 4703 POINT(310.227051 507.464355) 4704 POINT(262.049774 537.297852) 4705 POINT(953.927246 241.054626) 4706 POINT(820.776428 687.73822) 4707 POINT(250.510483 545.539917) 4708 POINT(331.091888 240.348221) 4709 POINT(22.4660664 596.832031) 4710 POINT(160.682083 213.518845) 4711 POINT(310.683685 797.468445) 4712 POINT(407.666565 958.054993) 4713 POINT(238.733139 783.915771) 4714 POINT(828.984863 533.726807) 4715 POINT(582.826416 707.49054) 4716 POINT(881.001526 368.358246) 4717 POINT(623.028625 320.447845) 4718 POINT(257.133026 284.46524) 4719 POINT(275.863739 926.016113) 4720 POINT(811.987122 34.3991203) 4721 POINT(502.682739 338.010864) 4722 POINT(359.762238 958.434082) 4723 POINT(338.154785 830.626465) 4724 POINT(570.419678 561.302856) 4725 POINT(703.269836 596.179626) 4726 POINT(557.49292 371.993561) 4727 POINT(149.681992 437.686218) 4728 POINT(956.525574 730.463806) 4729 POINT(347.584625 539.554016) 4730 POINT(486.354706 345.218567) 4731 POINT(76.2293549 934.333313) 4732 POINT(523.22699 939.976318) 4733 POINT(631.429932 232.996857) 4734 POINT(909.616333 799.075562) 4735 POINT(432.821167 842.839722) 4736 POINT(578.30603 913.643494) 4737 POINT(528.272827 58.6532288) 4738 POINT(63.6178589 998.268677) 4739 POINT(64.8262939 392.813293) 4740 POINT(264.568634 306.037415) 4741 POINT(364.083466 387.426727) 4742 POINT(41.2744637 723.964844) 4743 POINT(322.514954 21.4368839) 4744 POINT(191.306076 527.36969) 4745 POINT(599.17981 47.9426575) 4746 POINT(845.239563 747.522644) 4747 POINT(678.488464 47.9179344) 4748 POINT(321.795746 839.474426) 4749 POINT(955.657959 307.627228) 4750 POINT(427.286377 94.5127335) 4751 POINT(617.284485 475.548523) 4752 POINT(209.279495 532.99115) 4753 POINT(236.996307 253.385117) 4754 POINT(371.287384 237.732407) 4755 POINT(712.594238 563.251648) 4756 POINT(217.802261 785.876953) 4757 POINT(800.67981 913.458374) 4758 POINT(874.240479 538.580933) 4759 POINT(999.909668 278.216827) 4760 POINT(64.4896088 624.664368) 4761 POINT(665.197998 197.401474) 4762 POINT(333.112244 968.076111) 4763 POINT(851.052002 992.204163) 4764 POINT(876.287659 262.421692) 4765 POINT(659.527893 747.708801) 4766 POINT(154.837891 381.956085) 4767 POINT(561.916748 816.322998) 4768 POINT(966.884644 971.160767) 4769 POINT(856.221924 94.4828491) 4770 POINT(372.638855 398.72641) 4771 POINT(775.900879 782.567322) 4772 POINT(708.477722 561.477234) 4773 POINT(768.477356 83.6325226) 4774 POINT(273.888153 235.173233) 4775 POINT(682.863159 675.11731) 4776 POINT(198.246063 488.496063) 4777 POINT(437.072723 409.442047) 4778 POINT(523.074951 690.780945) 4779 POINT(657.099915 690.392395) 4780 POINT(900.833374 580.735229) 4781 POINT(584.813904 223.954025) 4782 POINT(197.989441 840.654297) 4783 POINT(627.70105 262.067932) 4784 POINT(85.8416519 397.289307) 4785 POINT(474.140289 218.46022) 4786 POINT(748.070007 895.960144) 4787 POINT(10.786232 325.744537) 4788 POINT(673.280457 258.773315) 4789 POINT(967.800049 276.495972) 4790 POINT(130.923981 121.56768) 4791 POINT(475.500397 17.6850109) 4792 POINT(50.1137466 68.7567749) 4793 POINT(563.010071 783.08551) 4794 POINT(286.355194 662.480103) 4795 POINT(164.283951 303.010681) 4796 POINT(527.489624 144.956696) 4797 POINT(846.275024 941.58728) 4798 POINT(666.799927 623.815247) 4799 POINT(242.813721 310.976074) 4800 POINT(370.934723 413.247437) 4801 POINT(899.047485 997.339233) 4802 POINT(758.895203 773.505493) 4803 POINT(816.144409 218.41629) 4804 POINT(754.740051 482.584167) 4805 POINT(673.66864 96.4068451) 4806 POINT(402.971313 792.55304) 4807 POINT(314.962769 367.188904) 4808 POINT(566.960571 315.226257) 4809 POINT(254.537292 618.086487) 4810 POINT(245.583725 84.5894241) 4811 POINT(429.499786 927.408508) 4812 POINT(722.895691 434.18515) 4813 POINT(221.211838 211.420013) 4814 POINT(844.766663 774.6521) 4815 POINT(548.528931 825.498352) 4816 POINT(532.613647 868.61145) 4817 POINT(38.1596107 438.827057) 4818 POINT(788.513672 676.506714) 4819 POINT(447.010803 844.560791) 4820 POINT(712.027466 327.873749) 4821 POINT(510.123199 884.063049) 4822 POINT(684.058655 688.505127) 4823 POINT(658.328552 774.293335) 4824 POINT(827.226379 416.371979) 4825 POINT(862.583374 817.063049) 4826 POINT(28.8531628 289.885895) 4827 POINT(565.689758 238.656113) 4828 POINT(318.211151 53.666256) 4829 POINT(933.554749 24.8327599) 4830 POINT(783.704346 552.585876) 4831 POINT(752.154358 361.719971) 4832 POINT(760.876831 648.291626) 4833 POINT(295.958923 215.399353) 4834 POINT(934.358948 358.047272) 4835 POINT(559.880737 745.604309) 4836 POINT(695.033203 988.668274) 4837 POINT(869.076782 480.937073) 4838 POINT(449.889465 314.167236) 4839 POINT(126.564262 329.137451) 4840 POINT(171.446869 260.805573) 4841 POINT(723.090576 666.533325) 4842 POINT(824.558167 204.452454) 4843 POINT(390.677155 571.850586) 4844 POINT(152.33493 80.0375824) 4845 POINT(332.483368 132.662842) 4846 POINT(824.405518 669.603943) 4847 POINT(686.998535 65.1427689) 4848 POINT(37.4357147 932.816467) 4849 POINT(492.070862 322.289734) 4850 POINT(150.629654 221.172241) 4851 POINT(590.059265 110.930283) 4852 POINT(881.727112 964.629517) 4853 POINT(473.70047 747.617188) 4854 POINT(478.893341 617.586975) 4855 POINT(605.507263 27.8205452) 4856 POINT(321.058167 621.395142) 4857 POINT(772.157227 496.857819) 4858 POINT(737.016663 94.7786026) 4859 POINT(158.031647 945.827881) 4860 POINT(828.405457 254.23024) 4861 POINT(965.576904 127.998665) 4862 POINT(543.082336 936.774841) 4863 POINT(79.3686371 632.874084) 4864 POINT(686.160339 431.273438) 4865 POINT(798.672607 864.385559) 4866 POINT(441.801331 396.067352) 4867 POINT(461.042511 459.794403) 4868 POINT(978.799133 365.284882) 4869 POINT(586.339783 336.054535) 4870 POINT(949.058105 29.2092247) 4871 POINT(303.8797 955.29425) 4872 POINT(985.483337 562.034241) 4873 POINT(430.71167 721.088684) 4874 POINT(442.872711 100.017624) 4875 POINT(869.966125 528.281372) 4876 POINT(583.582336 522.026672) 4877 POINT(546.496338 32.8801308) 4878 POINT(623.589172 820.919739) 4879 POINT(22.6005554 842.221802) 4880 POINT(661.806152 86.9059677) 4881 POINT(197.432709 472.029785) 4882 POINT(606.919739 852.394287) 4883 POINT(125.929611 14.6463108) 4884 POINT(85.5815048 811.913025) 4885 POINT(360.962006 215.716934) 4886 POINT(710.543518 661.125549) 4887 POINT(268.33371 284.66037) 4888 POINT(457.499573 567.066895) 4889 POINT(258.717896 752.724426) 4890 POINT(648.279968 49.3998604) 4891 POINT(672.264648 42.2864952) 4892 POINT(772.108704 422.274902) 4893 POINT(317.197479 888.905334) 4894 POINT(155.427231 411.439362) 4895 POINT(158.119339 145.695297) 4896 POINT(77.0217972 755.366516) 4897 POINT(955.982056 845.729492) 4898 POINT(34.6753998 46.781929) 4899 POINT(440.866699 265.857361) 4900 POINT(421.252075 437.086273) 4901 POINT(840.13501 453.648529) 4902 POINT(234.075806 166.479584) 4903 POINT(855.527832 592.875366) 4904 POINT(696.887085 893.368896) 4905 POINT(878.911804 302.371582) 4906 POINT(846.867065 64.8022995) 4907 POINT(831.241577 614.231506) 4908 POINT(461.655701 822.758789) 4909 POINT(304.675323 851.74353) 4910 POINT(857.52948 297.298096) 4911 POINT(63.5313416 832.413147) 4912 POINT(467.638916 355.625977) 4913 POINT(623.916077 929.770081) 4914 POINT(49.259079 605.474304) 4915 POINT(870.521606 227.854614) 4916 POINT(415.31897 481.869171) 4917 POINT(96.5372086 748.435913) 4918 POINT(735.123901 759.028748) 4919 POINT(661.234619 992.86084) 4920 POINT(402.358856 645.085266) 4921 POINT(670.069275 553.312317) 4922 POINT(878.483765 448.474396) 4923 POINT(792.732117 563.154785) 4924 POINT(642.947449 503.724609) 4925 POINT(972.239624 289.55423) 4926 POINT(727.827515 854.163635) 4927 POINT(347.747559 255.916824) 4928 POINT(296.242249 993.53949) 4929 POINT(48.3282471 214.736328) 4930 POINT(306.998993 542.134338) 4931 POINT(525.589844 886.661133) 4932 POINT(661.386353 990.673035) 4933 POINT(18.9990025 218.080475) 4934 POINT(973.856628 892.862488) 4935 POINT(406.479584 582.020508) 4936 POINT(571.771973 71.0241089) 4937 POINT(729.804932 715.978149) 4938 POINT(788.72876 355.920166) 4939 POINT(823.114075 631.488159) 4940 POINT(552.667542 89.0640335) 4941 POINT(765.321899 385.312775) 4942 POINT(618.599548 441.703033) 4943 POINT(953.138123 628.390503) 4944 POINT(194.021713 558.068298) 4945 POINT(908.874634 668.939087) 4946 POINT(743.77887 510.80423) 4947 POINT(32.3322182 338.842438) 4948 POINT(234.201721 103.767105) 4949 POINT(243.075058 941.776855) 4950 POINT(230.881226 102.276321) 4951 POINT(280.711395 707.163208) 4952 POINT(50.6198883 584.706787) 4953 POINT(606.902771 461.330109) 4954 POINT(489.258179 753.936584) 4955 POINT(732.360779 157.206741) 4956 POINT(609.646851 825.153137) 4957 POINT(51.8134727 743.041931) 4958 POINT(237.599335 11.0354223) 4959 POINT(164.717987 881.287537) 4960 POINT(440.905334 290.157776) 4961 POINT(272.369995 798.748718) 4962 POINT(573.237427 594.02179) 4963 POINT(734.14325 121.85952) 4964 POINT(869.98407 447.445709) 4965 POINT(726.148193 755.5979) 4966 POINT(958.763184 501.802399) 4967 POINT(242.003204 545.832275) 4968 POINT(568.806274 7.07396555) 4969 POINT(303.177673 733.145264) 4970 POINT(718.876099 163.807892) 4971 POINT(179.125458 687.384521) 4972 POINT(464.33252 707.3479) 4973 POINT(956.934875 497.949799) 4974 POINT(74.966835 622.340332) 4975 POINT(826.364258 92.3626099) 4976 POINT(183.973633 824.272156) 4977 POINT(666.914917 337.834595) 4978 POINT(835.749268 126.093094) 4979 POINT(725.151001 235.827621) 4980 POINT(510.033783 121.851738) 4981 POINT(467.064392 802.085632) 4982 POINT(609.327271 446.396423) 4983 POINT(774.285461 504.041138) 4984 POINT(765.69989 531.84845) 4985 POINT(44.8680267 439.20929) 4986 POINT(805.405457 689.65686) 4987 POINT(57.8564148 533.156799) 4988 POINT(661.538208 454.13559) 4989 POINT(592.636597 430.474121) 4990 POINT(755.919617 372.622742) 4991 POINT(264.064178 979.110779) 4992 POINT(894.15509 202.584854) 4993 POINT(175.554199 65.3108444) 4994 POINT(998.186462 51.5216751) 4995 POINT(215.848404 356.68161) 4996 POINT(707.623169 786.456421) 4997 POINT(870.29895 333.748535) 4998 POINT(136.739624 851.780457) 4999 POINT(601.609619 930.4151) 5000 POINT(703.470642 913.55365) 5001 POINT(323.560028 521.415161) 5002 POINT(728.340942 831.951538) 5003 POINT(467.944061 766.08844) 5004 POINT(416.475525 828.94281) 5005 POINT(181.530746 584.232666) 5006 POINT(319.22583 233.634201) 5007 POINT(416.194794 958.612305) 5008 POINT(561.203003 361.825714) 5009 POINT(49.466732 252.788239) 5010 POINT(104.462212 318.593475) 5011 POINT(730.75531 740.74762) 5012 POINT(398.168823 343.195221) 5013 POINT(254.654236 270.465302) 5014 POINT(676.371521 674.942383) 5015 POINT(859.443604 646.739563) 5016 POINT(368.707275 378.189056) 5017 POINT(706.642883 904.768555) 5018 POINT(982.282715 586.168579) 5019 POINT(764.898743 155.948685) 5020 POINT(4.06687689 809.599548) 5021 POINT(575.35437 887.879822) 5022 POINT(921.458557 299.950195) 5023 POINT(670.833862 273.783752) 5024 POINT(126.953545 592.783997) 5025 POINT(340.686249 240.332565) 5026 POINT(976.85498 808.118408) 5027 POINT(638.112305 320.720551) 5028 POINT(532.684937 717.260254) 5029 POINT(6.48807287 10.7944221) 5030 POINT(899.44397 54.7912064) 5031 POINT(222.997864 794.914307) 5032 POINT(662.315735 756.561035) 5033 POINT(917.295471 825.299072) 5034 POINT(741.151489 326.61319) 5035 POINT(193.560013 549.891846) 5036 POINT(261.539368 105.459572) 5037 POINT(667.963867 280.869781) 5038 POINT(467.030853 947.203796) 5039 POINT(910.101562 686.035645) 5040 POINT(656.865112 472.467804) 5041 POINT(54.3535805 641.329163) 5042 POINT(968.114258 297.328156) 5043 POINT(511.605591 493.048523) 5044 POINT(74.5178146 235.548599) 5045 POINT(877.474121 997.190369) 5046 POINT(543.453979 612.969055) 5047 POINT(492.583344 500.314026) 5048 POINT(377.699432 340.270905) 5049 POINT(684.003967 36.8778038) 5050 POINT(823.184998 975.394409) 5051 POINT(603.337036 193.044678) 5052 POINT(704.30011 522.177002) 5053 POINT(202.860321 843.125366) 5054 POINT(664.012695 400.475677) 5055 POINT(261.53421 234.336166) 5056 POINT(749.838867 768.9198) 5057 POINT(320.500183 676.253418) 5058 POINT(764.347778 958.929871) 5059 POINT(824.122803 96.7227631) 5060 POINT(859.362 102.767097) 5061 POINT(926.892883 535.125854) 5062 POINT(618.381409 414.819031) 5063 POINT(136.000229 851.555237) 5064 POINT(667.220154 960.358215) 5065 POINT(859.611206 396.941406) 5066 POINT(956.715271 956.557556) 5067 POINT(745.48053 490.499603) 5068 POINT(755.092651 674.13916) 5069 POINT(475.246796 428.613892) 5070 POINT(5.72881985 212.839951) 5071 POINT(56.4884949 560.680969) 5072 POINT(686.320374 818.689209) 5073 POINT(85.3627625 135.348221) 5074 POINT(738.689331 895.31665) 5075 POINT(473.540741 83.4743347) 5076 POINT(818.557007 475.193359) 5077 POINT(608.454346 366.120544) 5078 POINT(788.677979 90.5095673) 5079 POINT(287.95816 696.669434) 5080 POINT(496.940674 788.601196) 5081 POINT(309.896759 331.122101) 5082 POINT(846.727844 435.37265) 5083 POINT(652.385437 710.714539) 5084 POINT(586.434753 544.555664) 5085 POINT(428.616211 302.828461) 5086 POINT(178.137711 154.066895) 5087 POINT(495.577362 301.969635) 5088 POINT(814.682861 876.959839) 5089 POINT(822.229187 470.206726) 5090 POINT(355.748535 207.933807) 5091 POINT(640.543701 379.376923) 5092 POINT(65.666153 632.092957) 5093 POINT(501.651764 494.675598) 5094 POINT(431.036743 616.31488) 5095 POINT(706.527649 755.682312) 5096 POINT(589.648254 361.472961) 5097 POINT(71.6886444 676.783997) 5098 POINT(542.201599 342.778595) 5099 POINT(598.925354 130.318649) 5100 POINT(76.3374481 393.203979) 5101 POINT(645.870728 284.176147) 5102 POINT(392.992188 9.48139668) 5103 POINT(521.137085 48.2878914) 5104 POINT(675.891541 940.334534) 5105 POINT(761.815796 514.262207) 5106 POINT(126.841446 101.80172) 5107 POINT(478.47348 437.855743) 5108 POINT(346.335724 744.792908) 5109 POINT(187.646469 769.11499) 5110 POINT(867.943176 256.051697) 5111 POINT(186.622833 549.599365) 5112 POINT(356.15979 326.753845) 5113 POINT(280.506104 405.465851) 5114 POINT(604.230164 684.984314) 5115 POINT(145.817993 120.324623) 5116 POINT(377.305206 511.83075) 5117 POINT(734.972595 889.272156) 5118 POINT(146.780991 788.977966) 5119 POINT(396.725464 367.596558) 5120 POINT(366.448975 542.276001) 5121 POINT(142.175797 332.183563) 5122 POINT(616.002502 525.194702) 5123 POINT(135.210373 984.103027) 5124 POINT(351.436127 743.41156) 5125 POINT(769.684326 716.332764) 5126 POINT(277.007416 162.672546) 5127 POINT(930.515137 645.797913) 5128 POINT(314.907867 412.800476) 5129 POINT(367.733643 724.229858) 5130 POINT(574.924683 638.225769) 5131 POINT(765.021851 673.747009) 5132 POINT(598.617371 327.209778) 5133 POINT(609.125671 982.140137) 5134 POINT(905.45166 846.19165) 5135 POINT(493.65152 396.826385) 5136 POINT(639.62207 21.2035084) 5137 POINT(978.138855 698.177551) 5138 POINT(996.777771 844.476074) 5139 POINT(607.085571 450.899414) 5140 POINT(393.484009 781.244324) 5141 POINT(538.043274 130.446472) 5142 POINT(776.078003 140.014633) 5143 POINT(375.378723 719.825012) 5144 POINT(499.808136 120.470695) 5145 POINT(27.3264427 55.9168129) 5146 POINT(247.097229 928.679321) 5147 POINT(547.164246 874.626953) 5148 POINT(101.891121 351.856232) 5149 POINT(161.489029 427.319061) 5150 POINT(214.914734 407.825867) 5151 POINT(784.536133 499.379303) 5152 POINT(244.950012 761.246277) 5153 POINT(850.282166 703.196899) 5154 POINT(659.799377 54.0900269) 5155 POINT(924.824829 605.841675) 5156 POINT(946.345398 796.806091) 5157 POINT(279.511902 915.357117) 5158 POINT(184.136292 64.7056122) 5159 POINT(977.86676 933.601807) 5160 POINT(356.408203 637.704834) 5161 POINT(452.046814 398.307465) 5162 POINT(234.726364 997.531067) 5163 POINT(491.000549 808.462952) 5164 POINT(909.925171 482.396912) 5165 POINT(834.420837 246.876007) 5166 POINT(737.329102 13.1354942) 5167 POINT(543.904175 489.035919) 5168 POINT(6.03367376 905.652649) 5169 POINT(213.432663 991.05481) 5170 POINT(371.141205 21.7088318) 5171 POINT(171.523132 869.976868) 5172 POINT(548.220642 673.529663) 5173 POINT(731.399536 681.215149) 5174 POINT(957.972839 468.225311) 5175 POINT(455.719177 130.034302) 5176 POINT(626.317261 476.763397) 5177 POINT(339.232117 562.190186) 5178 POINT(344.203156 451.203064) 5179 POINT(874.904541 414.048218) 5180 POINT(728.825317 145.596786) 5181 POINT(583.254395 781.325378) 5182 POINT(713.168579 363.5672) 5183 POINT(755.8078 920.269165) 5184 POINT(136.606064 42.8561249) 5185 POINT(724.700439 123.445755) 5186 POINT(481.455963 268.53714) 5187 POINT(832.651123 827.842651) 5188 POINT(567.909973 497.120514) 5189 POINT(680.077515 594.792847) 5190 POINT(804.644409 779.123657) 5191 POINT(986.401428 344.029907) 5192 POINT(719.917664 334.120636) 5193 POINT(166.093781 788.334778) 5194 POINT(246.358948 296.735107) 5195 POINT(210.390289 776.713928) 5196 POINT(83.4105835 792.042053) 5197 POINT(734.604858 354.454498) 5198 POINT(349.070099 82.5553818) 5199 POINT(728.480835 944.964417) 5200 POINT(294.884186 365.196899) 5201 POINT(91.0433884 573.872437) 5202 POINT(685.893311 784.772034) 5203 POINT(978.092041 428.913666) 5204 POINT(334.36087 410.567749) 5205 POINT(204.051849 983.762817) 5206 POINT(469.712616 725.395142) 5207 POINT(862.774719 129.920853) 5208 POINT(77.356842 673.014832) 5209 POINT(234.547684 243.372696) 5210 POINT(949.274048 462.323212) 5211 POINT(277.66507 362.978943) 5212 POINT(65.9013901 237.479004) 5213 POINT(239.207291 942.054932) 5214 POINT(631.462524 885.474609) 5215 POINT(416.024811 235.545517) 5216 POINT(876.202148 800.300293) 5217 POINT(936.363159 850.479004) 5218 POINT(834.799255 380.219513) 5219 POINT(776.210693 380.454498) 5220 POINT(129.496231 566.81134) 5221 POINT(561.56665 194.882874) 5222 POINT(201.263779 397.009094) 5223 POINT(105.797653 205.29335) 5224 POINT(17.8215389 528.654419) 5225 POINT(985.575623 894.583252) 5226 POINT(571.86792 103.014061) 5227 POINT(743.213623 696.605713) 5228 POINT(197.888184 351.809662) 5229 POINT(819.286194 344.560944) 5230 POINT(65.9772263 659.748169) 5231 POINT(947.125854 474.507385) 5232 POINT(43.925354 615.111084) 5233 POINT(188.132507 247.790771) 5234 POINT(295.197083 70.0672531) 5235 POINT(839.953064 231.778534) 5236 POINT(544.324158 679.065613) 5237 POINT(222.739365 206.087021) 5238 POINT(389.709747 468.596619) 5239 POINT(534.258484 911.223206) 5240 POINT(577.092346 36.0806122) 5241 POINT(83.1182632 263.586517) 5242 POINT(918.270508 191.556) 5243 POINT(859.413513 976.0625) 5244 POINT(905.581848 595.743164) 5245 POINT(510.456116 363.593201) 5246 POINT(842.639648 955.113281) 5247 POINT(860.80304 910.354736) 5248 POINT(998.646179 992.584167) 5249 POINT(483.553467 727.35968) 5250 POINT(363.049042 995.813477) 5251 POINT(904.9776 649.91333) 5252 POINT(698.328735 668.799011) 5253 POINT(546.227051 492.482819) 5254 POINT(883.3703 82.2935181) 5255 POINT(791.539368 988.917725) 5256 POINT(833.380005 180.686279) 5257 POINT(767.499084 558.941956) 5258 POINT(352.974792 894.406006) 5259 POINT(746.182068 133.391525) 5260 POINT(108.345184 905.10376) 5261 POINT(98.1534271 482.409515) 5262 POINT(926.842407 384.041718) 5263 POINT(549.187805 479.946991) 5264 POINT(985.660645 81.0314865) 5265 POINT(95.2472839 427.316467) 5266 POINT(226.299789 381.352295) 5267 POINT(339.817444 386.672211) 5268 POINT(822.142151 911.370117) 5269 POINT(600.423828 646.254944) 5270 POINT(479.836792 890.739624) 5271 POINT(829.411438 172.763748) 5272 POINT(221.442978 271.390839) 5273 POINT(978.379822 687.653564) 5274 POINT(476.770691 232.892975) 5275 POINT(754.654114 834.484009) 5276 POINT(420.505646 422.794769) 5277 POINT(948.599609 550.261414) 5278 POINT(576.09906 432.317688) 5279 POINT(407.334991 997.249451) 5280 POINT(540.726685 16.1253033) 5281 POINT(876.475281 300.828918) 5282 POINT(978.700745 24.2148819) 5283 POINT(988.074036 437.131897) 5284 POINT(703.498108 579.319641) 5285 POINT(629.189575 250.475052) 5286 POINT(93.1165695 760.234375) 5287 POINT(348.861023 99.7820358) 5288 POINT(334.98584 636.471619) 5289 POINT(747.246887 645.581482) 5290 POINT(103.460052 529.537537) 5291 POINT(412.891418 920.760864) 5292 POINT(466.44928 578.419128) 5293 POINT(734.295532 970.657043) 5294 POINT(782.579895 179.771194) 5295 POINT(190.06456 908.491028) 5296 POINT(474.103119 415.557465) 5297 POINT(725.891113 383.466278) 5298 POINT(184.415787 821.967529) 5299 POINT(842.642029 889.516724) 5300 POINT(496.46637 583.319397) 5301 POINT(662.110046 506.817657) 5302 POINT(96.5593948 634.04834) 5303 POINT(697.947632 35.4878349) 5304 POINT(717.339478 42.0514946) 5305 POINT(359.429443 786.759338) 5306 POINT(37.3530617 139.527496) 5307 POINT(453.623108 792.259827) 5308 POINT(808.996094 15.5559845) 5309 POINT(554.047119 893.530518) 5310 POINT(141.428436 431.16803) 5311 POINT(75.8351669 113.727509) 5312 POINT(92.8706284 846.355225) 5313 POINT(71.8239899 189.470062) 5314 POINT(493.408295 833.76532) 5315 POINT(51.9652939 966.488647) 5316 POINT(393.968689 610.776428) 5317 POINT(769.288025 117.182739) 5318 POINT(341.564484 55.8915138) 5319 POINT(726.692749 916.157776) 5320 POINT(140.422104 333.242493) 5321 POINT(785.648132 471.618256) 5322 POINT(151.545807 967.350342) 5323 POINT(424.017242 232.12886) 5324 POINT(991.056396 866.693359) 5325 POINT(947.522278 911.317261) 5326 POINT(644.859253 757.25592) 5327 POINT(937.64856 354.812042) 5328 POINT(161.533188 764.853027) 5329 POINT(876.093689 736.931091) 5330 POINT(807.609253 377.062561) 5331 POINT(758.324463 757.844238) 5332 POINT(663.575989 762.094604) 5333 POINT(460.666046 919.223999) 5334 POINT(352.069122 853.537476) 5335 POINT(98.9998245 207.502823) 5336 POINT(871.981812 797.946045) 5337 POINT(883.095764 594.117065) 5338 POINT(266.979095 268.581268) 5339 POINT(377.484009 172.526031) 5340 POINT(190.568649 875.817383) 5341 POINT(304.338898 758.935608) 5342 POINT(902.037231 945.966858) 5343 POINT(320.985413 669.770935) 5344 POINT(100.901337 429.32074) 5345 POINT(657.356323 701.872742) 5346 POINT(497.866913 659.479065) 5347 POINT(268.155365 144.616898) 5348 POINT(546.586548 284.591339) 5349 POINT(729.879822 775.783997) 5350 POINT(194.818329 482.60379) 5351 POINT(561.605957 79.747879) 5352 POINT(431.120209 753.309143) 5353 POINT(866.048523 487.778503) 5354 POINT(332.278625 236.827881) 5355 POINT(147.509842 901.925171) 5356 POINT(988.718506 868.657837) 5357 POINT(167.684387 517.674805) 5358 POINT(284.737854 363.775818) 5359 POINT(628.772339 413.586456) 5360 POINT(925.256409 285.248199) 5361 POINT(33.981575 201.240234) 5362 POINT(171.677185 445.822906) 5363 POINT(54.3988724 414.586365) 5364 POINT(520.385742 904.071411) 5365 POINT(242.64357 218.234818) 5366 POINT(525.416077 530.489014) 5367 POINT(670.064331 399.117157) 5368 POINT(332.09726 854.836975) 5369 POINT(546.009155 710.631897) 5370 POINT(404.376221 875.830994) 5371 POINT(703.522949 213.828033) 5372 POINT(751.438843 70.5894012) 5373 POINT(932.466248 822.98938) 5374 POINT(498.789093 727.215576) 5375 POINT(13.3801832 345.385284) 5376 POINT(417.796143 323.285645) 5377 POINT(286.46106 704.796753) 5378 POINT(491.695923 260.269379) 5379 POINT(90.8821335 69.1937256) 5380 POINT(424.087006 254.056503) 5381 POINT(169.666077 343.7258) 5382 POINT(310.15744 880.465515) 5383 POINT(471.758423 35.7260742) 5384 POINT(316.417542 628.161743) 5385 POINT(841.380676 209.06218) 5386 POINT(929.912476 656.72168) 5387 POINT(88.7899017 996.882935) 5388 POINT(124.191513 772.189819) 5389 POINT(437.994019 576.19928) 5390 POINT(81.2939835 784.547913) 5391 POINT(475.653625 282.033569) 5392 POINT(44.3613739 909.840881) 5393 POINT(439.348206 575.925232) 5394 POINT(545.031921 623.696289) 5395 POINT(18.7308044 321.863068) 5396 POINT(947.453796 902.671387) 5397 POINT(164.098267 466.336853) 5398 POINT(723.642029 35.9288101) 5399 POINT(645.946777 987.879456) 5400 POINT(573.197815 723.467529) 5401 POINT(56.6720695 360.564789) 5402 POINT(827.420532 460.434723) 5403 POINT(440.343872 766.409241) 5404 POINT(140.029922 842.453857) 5405 POINT(955.1922 660.096741) 5406 POINT(323.63501 407.591034) 5407 POINT(670.971863 818.138306) 5408 POINT(105.44426 590.332275) 5409 POINT(362.729034 741.336548) 5410 POINT(263.321564 826.175232) 5411 POINT(644.812744 787.729187) 5412 POINT(983.102844 477.185974) 5413 POINT(983.512024 22.1382675) 5414 POINT(722.169006 104.803116) 5415 POINT(600.839783 822.775635) 5416 POINT(447.815399 392.571838) 5417 POINT(431.234528 395.407196) 5418 POINT(870.291321 305.278107) 5419 POINT(590.943604 637.328247) 5420 POINT(440.943054 589.663757) 5421 POINT(68.3449554 158.459244) 5422 POINT(120.259415 593.703064) 5423 POINT(922.340759 612.454529) 5424 POINT(626.477417 365.098236) 5425 POINT(393.224426 989.684082) 5426 POINT(393.58429 734.619446) 5427 POINT(272.212738 864.771729) 5428 POINT(341.989288 386.213898) 5429 POINT(256.410004 228.156921) 5430 POINT(792.912903 944.103027) 5431 POINT(27.7070637 933.617432) 5432 POINT(138.838364 688.663025) 5433 POINT(457.529449 697.196533) 5434 POINT(870.519653 359.658783) 5435 POINT(753.064087 238.500397) 5436 POINT(112.480766 469.915649) 5437 POINT(951.37146 579.468628) 5438 POINT(243.24588 877.922058) 5439 POINT(940.516113 740.699341) 5440 POINT(486.404694 937.962952) 5441 POINT(974.523621 399.084717) 5442 POINT(519.859802 135.587708) 5443 POINT(362.738831 306.355347) 5444 POINT(332.171844 639.5672) 5445 POINT(893.267273 995.248474) 5446 POINT(378.880981 964.651672) 5447 POINT(412.016663 113.128632) 5448 POINT(883.236633 888.69397) 5449 POINT(468.927521 482.353394) 5450 POINT(163.232132 739.964905) 5451 POINT(784.91803 68.4686966) 5452 POINT(631.660217 143.302765) 5453 POINT(538.632996 583.036499) 5454 POINT(542.652405 655.262268) 5455 POINT(751.158081 614.771606) 5456 POINT(284.532623 437.458282) 5457 POINT(817.44873 393.545349) 5458 POINT(635.626099 113.244576) 5459 POINT(31.4593773 485.17627) 5460 POINT(700.860474 265.767334) 5461 POINT(642.103271 594.875977) 5462 POINT(479.651764 95.9548492) 5463 POINT(1.60491765 943.477234) 5464 POINT(129.874344 638.432495) 5465 POINT(997.03894 358.492004) 5466 POINT(891.995605 593.604004) 5467 POINT(538.509277 792.608398) 5468 POINT(428.153687 377.754181) 5469 POINT(90.2709427 712.036011) 5470 POINT(572.645447 913.166138) 5471 POINT(329.017151 968.378296) 5472 POINT(445.663849 110.70179) 5473 POINT(79.5509186 928.29657) 5474 POINT(766.999084 962.476746) 5475 POINT(873.271912 848.615173) 5476 POINT(439.744537 827.212463) 5477 POINT(288.586182 579.794739) 5478 POINT(927.894775 411.231537) 5479 POINT(731.878113 502.604889) 5480 POINT(201.283661 320.167175) 5481 POINT(398.575043 261.706635) 5482 POINT(594.907654 967.197693) 5483 POINT(789.716431 981.6828) 5484 POINT(558.757446 300.530457) 5485 POINT(652.076233 627.43988) 5486 POINT(143.410355 874.113464) 5487 POINT(439.151031 409.067017) 5488 POINT(63.5112991 489.931396) 5489 POINT(64.2375031 304.031982) 5490 POINT(146.713211 137.165924) 5491 POINT(621.502869 65.49617) 5492 POINT(953.602356 533.000916) 5493 POINT(0.66738826 458.643158) 5494 POINT(841.671631 912.600769) 5495 POINT(608.045105 886.96228) 5496 POINT(943.719543 143.070343) 5497 POINT(251.74115 272.76416) 5498 POINT(591.467529 959.932373) 5499 POINT(250.408997 791.805542) 5500 POINT(995.142151 497.375031) 5501 POINT(909.889954 347.364197) 5502 POINT(298.843048 48.3858185) 5503 POINT(185.173065 36.6646118) 5504 POINT(982.393616 531.695923) 5505 POINT(939.430298 110.05394) 5506 POINT(438.883362 733.617615) 5507 POINT(138.538727 364.251953) 5508 POINT(92.1922684 449.410797) 5509 POINT(317.748138 624.44043) 5510 POINT(752.518188 976.424683) 5511 POINT(44.3809967 50.6511078) 5512 POINT(865.496155 456.216583) 5513 POINT(22.1606216 812.202942) 5514 POINT(670.229126 662.066528) 5515 POINT(162.593567 85.8088913) 5516 POINT(24.8842907 459.322266) 5517 POINT(938.535339 990.019409) 5518 POINT(220.022781 196.988022) 5519 POINT(764.531616 628.122192) 5520 POINT(617.212158 228.701996) 5521 POINT(975.755493 796.325623) 5522 POINT(514.548218 9.14635849) 5523 POINT(238.488281 562.495544) 5524 POINT(545.4245 308.036133) 5525 POINT(284.376862 36.989769) 5526 POINT(909.308228 958.807556) 5527 POINT(660.522705 460.97226) 5528 POINT(263.604034 784.257874) 5529 POINT(498.330139 714.338013) 5530 POINT(577.234497 378.593719) 5531 POINT(974.592041 496.018524) 5532 POINT(265.778809 877.161438) 5533 POINT(345.28067 520.566589) 5534 POINT(554.466492 704.725342) 5535 POINT(930.821106 888.766357) 5536 POINT(11.7088995 194.317337) 5537 POINT(804.264465 374.42923) 5538 POINT(277.994598 435.817352) 5539 POINT(841.876404 287.997925) 5540 POINT(101.814842 411.579102) 5541 POINT(228.477905 159.18837) 5542 POINT(257.898102 461.251556) 5543 POINT(34.7950172 70.3799362) 5544 POINT(838.608887 85.7549667) 5545 POINT(496.606323 680.172363) 5546 POINT(805.229126 638.062561) 5547 POINT(599.250977 928.434265) 5548 POINT(793.433289 283.557159) 5549 POINT(307.833923 1.88057613) 5550 POINT(671.164001 863.437256) 5551 POINT(663.123779 269.956726) 5552 POINT(635.005859 719.730042) 5553 POINT(193.68602 747.430542) 5554 POINT(43.8632622 789.343872) 5555 POINT(962.368713 891.072205) 5556 POINT(270.218933 137.298355) 5557 POINT(684.111694 647.243469) 5558 POINT(596.552856 756.468445) 5559 POINT(914.568542 104.842461) 5560 POINT(297.831696 734.164795) 5561 POINT(335.723541 609.214722) 5562 POINT(183.658325 486.552124) 5563 POINT(754.181641 8.31750298) 5564 POINT(882.143066 542.825928) 5565 POINT(6.8682394 849.218994) 5566 POINT(341.394836 565.387268) 5567 POINT(542.383179 853.149475) 5568 POINT(416.425629 803.764343) 5569 POINT(847.209839 168.649597) 5570 POINT(965.035828 773.141602) 5571 POINT(25.5278893 548.363708) 5572 POINT(764.848389 538.114014) 5573 POINT(958.765808 294.794556) 5574 POINT(407.153412 874.347473) 5575 POINT(383.648315 168.608978) 5576 POINT(446.80957 721.484375) 5577 POINT(580.843018 310.203278) 5578 POINT(769.44458 566.804443) 5579 POINT(884.032288 967.184265) 5580 POINT(859.047729 688.36908) 5581 POINT(953.078857 588.798035) 5582 POINT(345.326019 906.809021) 5583 POINT(334.808502 800.367432) 5584 POINT(518.593018 655.352539) 5585 POINT(718.801208 329.337738) 5586 POINT(11.3028965 677.53833) 5587 POINT(19.6008015 58.0467224) 5588 POINT(353.56778 541.368347) 5589 POINT(845.177734 730.9422) 5590 POINT(862.185181 848.079834) 5591 POINT(486.694336 165.382645) 5592 POINT(269.038452 584.550781) 5593 POINT(557.133057 90.7358093) 5594 POINT(538.546509 482.512573) 5595 POINT(164.790695 471.20517) 5596 POINT(571.56897 607.76178) 5597 POINT(708.77124 620.273621) 5598 POINT(504.391205 201.608902) 5599 POINT(282.31073 871.076416) 5600 POINT(348.818451 168.663162) 5601 POINT(349.046967 575.260925) 5602 POINT(998.813782 574.140869) 5603 POINT(978.33728 826.427124) 5604 POINT(569.473083 245.243347) 5605 POINT(977.688293 372.182465) 5606 POINT(507.507721 620.439087) 5607 POINT(810.672668 535.899902) 5608 POINT(493.996582 553.997498) 5609 POINT(132.880722 725.806213) 5610 POINT(378.299164 947.765198) 5611 POINT(90.11866 891.011169) 5612 POINT(968.129456 75.4985504) 5613 POINT(503.980499 483.129822) 5614 POINT(639.451233 905.224304) 5615 POINT(599.969299 505.467529) 5616 POINT(308.761902 870.885315) 5617 POINT(720.532532 752.189026) 5618 POINT(170.306854 545.357666) 5619 POINT(295.839874 545.951477) 5620 POINT(785.751282 812.833923) 5621 POINT(333.126923 128.248383) 5622 POINT(120.905975 110.217987) 5623 POINT(523.338257 311.916168) 5624 POINT(153.449677 425.867065) 5625 POINT(272.134613 305.246979) 5626 POINT(880.534912 221.647461) 5627 POINT(139.717316 512.905762) 5628 POINT(292.153137 633.394714) 5629 POINT(247.121964 126.972916) 5630 POINT(954.735596 948.638977) 5631 POINT(680.530579 974.145813) 5632 POINT(782.378723 842.669373) 5633 POINT(132.750671 180.291885) 5634 POINT(826.121887 449.077454) 5635 POINT(373.445038 64.6223831) 5636 POINT(153.821152 463.877747) 5637 POINT(376.227875 361.856964) 5638 POINT(246.422287 938.821289) 5639 POINT(368.748749 486.597534) 5640 POINT(626.036865 655.879578) 5641 POINT(856.878906 460.078125) 5642 POINT(435.486542 327.99823) 5643 POINT(29.7239475 191.483444) 5644 POINT(389.346741 818.644348) 5645 POINT(430.173096 685.731628) 5646 POINT(347.565399 982.553711) 5647 POINT(505.937469 94.2254791) 5648 POINT(862.146179 111.224167) 5649 POINT(596.540894 257.44104) 5650 POINT(505.992889 718.504883) 5651 POINT(98.635376 946.819824) 5652 POINT(904.755493 64.1413116) 5653 POINT(349.577667 602.362915) 5654 POINT(904.470093 317.015411) 5655 POINT(119.809891 201.318985) 5656 POINT(670.138306 176.358047) 5657 POINT(278.738708 467.762329) 5658 POINT(126.470619 560.323181) 5659 POINT(45.1399498 943.654236) 5660 POINT(628.262451 239.534393) 5661 POINT(428.386688 255.764069) 5662 POINT(143.857651 31.7141628) 5663 POINT(765.889954 11.8309326) 5664 POINT(313.57196 16.0697117) 5665 POINT(248.060562 191.418137) 5666 POINT(221.62294 697.151611) 5667 POINT(655.983337 225.529114) 5668 POINT(513.984497 812.462097) 5669 POINT(208.093842 513.318481) 5670 POINT(977.728699 591.833435) 5671 POINT(987.851624 248.868744) 5672 POINT(945.023743 435.80954) 5673 POINT(300.216736 736.366333) 5674 POINT(925.352966 771.864502) 5675 POINT(954.290039 984.074768) 5676 POINT(934.142029 998.814941) 5677 POINT(694.535095 177.870514) 5678 POINT(759.4104 59.3941193) 5679 POINT(183.437363 551.004272) 5680 POINT(277.982971 47.446949) 5681 POINT(282.287048 361.029327) 5682 POINT(240.039581 8.98425865) 5683 POINT(170.126114 845.974915) 5684 POINT(229.280212 525.447021) 5685 POINT(698.035034 613.939331) 5686 POINT(772.819153 953.637451) 5687 POINT(489.235931 393.058807) 5688 POINT(520.282471 161.162796) 5689 POINT(685.460876 167.628448) 5690 POINT(688.794678 950.826782) 5691 POINT(5.31279039 701.985229) 5692 POINT(436.04187 964.725952) 5693 POINT(347.686066 323.212708) 5694 POINT(786.969543 942.035645) 5695 POINT(547.601624 629.019165) 5696 POINT(213.596176 657.383362) 5697 POINT(906.051147 806.12616) 5698 POINT(917.731995 463.728302) 5699 POINT(680.771545 300.661407) 5700 POINT(462.022583 19.8272839) 5701 POINT(80.5422974 254.477005) 5702 POINT(257.761688 803.33606) 5703 POINT(268.995789 4.74178553) 5704 POINT(873.534668 342.661926) 5705 POINT(100.563515 898.932617) 5706 POINT(455.279999 580.758789) 5707 POINT(504.682251 79.4529877) 5708 POINT(227.239746 389.680023) 5709 POINT(656.509399 883.139221) 5710 POINT(9.07688141 354.045135) 5711 POINT(953.031799 238.100464) 5712 POINT(574.870361 543.414734) 5713 POINT(810.601868 346.53244) 5714 POINT(85.5691223 997.328186) 5715 POINT(949.735657 955.819031) 5716 POINT(541.746521 92.4691925) 5717 POINT(999.711365 345.497528) 5718 POINT(475.214294 279.758911) 5719 POINT(381.505219 514.23407) 5720 POINT(876.423462 941.416626) 5721 POINT(783.391724 924.188354) 5722 POINT(542.924988 286.092255) 5723 POINT(477.761047 51.0221062) 5724 POINT(738.922302 376.601593) 5725 POINT(917.115356 162.917099) 5726 POINT(836.698853 62.7456627) 5727 POINT(746.689758 493.550842) 5728 POINT(730.139221 904.963623) 5729 POINT(663.702332 829.877563) 5730 POINT(484.499115 147.563858) 5731 POINT(600.011169 569.256958) 5732 POINT(333.970306 598.041565) 5733 POINT(995.196594 341.066132) 5734 POINT(631.492188 447.187286) 5735 POINT(528.180725 180.145111) 5736 POINT(268.889008 819.608215) 5737 POINT(482.948914 93.6172714) 5738 POINT(948.067627 262.836121) 5739 POINT(911.384521 304.769318) 5740 POINT(227.154236 692.92218) 5741 POINT(225.423721 879.369995) 5742 POINT(673.63739 133.485733) 5743 POINT(681.567322 248.283005) 5744 POINT(617.525452 172.37352) 5745 POINT(121.256798 8.33591747) 5746 POINT(752.030151 564.823486) 5747 POINT(86.8674316 499.622437) 5748 POINT(221.304993 124.339111) 5749 POINT(159.346085 975.838318) 5750 POINT(361.369202 643.040588) 5751 POINT(752.214111 674.613098) 5752 POINT(121.723244 393.3526) 5753 POINT(168.267532 992.445618) 5754 POINT(544.639221 994.427429) 5755 POINT(78.4762497 24.76614) 5756 POINT(873.128418 432.232178) 5757 POINT(644.064758 462.422211) 5758 POINT(706.72113 544.904114) 5759 POINT(777.43457 773.758484) 5760 POINT(639.136719 708.599609) 5761 POINT(858.469482 544.272827) 5762 POINT(459.492249 58.0323906) 5763 POINT(0.981481969 107.06591) 5764 POINT(947.845642 765.262207) 5765 POINT(438.867645 256.05722) 5766 POINT(668.65979 485.719696) 5767 POINT(90.3361435 984.946594) 5768 POINT(787.406067 508.218567) 5769 POINT(6.83328533 198.503189) 5770 POINT(584.316833 752.738586) 5771 POINT(444.694794 74.947319) 5772 POINT(996.697388 23.5884571) 5773 POINT(263.810822 860.549011) 5774 POINT(621.778809 714.350891) 5775 POINT(388.619415 7.33258867) 5776 POINT(293.542084 983.555847) 5777 POINT(120.53392 644.796448) 5778 POINT(700.080627 675.73822) 5779 POINT(203.600372 845.312622) 5780 POINT(826.843079 491.452972) 5781 POINT(81.0265427 204.457138) 5782 POINT(42.5827637 42.6058884) 5783 POINT(681.611938 131.672989) 5784 POINT(839.222717 37.4032555) 5785 POINT(112.540344 418.728455) 5786 POINT(997.457336 384.240417) 5787 POINT(657.111633 124.385468) 5788 POINT(883.186279 88.4787216) 5789 POINT(659.539734 350.133728) 5790 POINT(745.392944 433.465027) 5791 POINT(978.818237 866.005676) 5792 POINT(46.530201 721.117737) 5793 POINT(292.854065 825.21582) 5794 POINT(727.679993 322.352386) 5795 POINT(293.734772 545.140259) 5796 POINT(811.657654 618.587219) 5797 POINT(724.374146 859.073364) 5798 POINT(249.905838 658.216614) 5799 POINT(833.267212 202.992493) 5800 POINT(498.662567 702.563171) 5801 POINT(563.177979 4.57990694) 5802 POINT(994.812378 881.321899) 5803 POINT(114.920372 213.971985) 5804 POINT(723.486572 645.441772) 5805 POINT(240.728973 848.730164) 5806 POINT(112.43557 713.907898) 5807 POINT(102.938026 126.580582) 5808 POINT(940.148621 518.782166) 5809 POINT(990.796509 301.405823) 5810 POINT(146.470444 409.547943) 5811 POINT(907.383911 389.263214) 5812 POINT(929.993347 873.323242) 5813 POINT(634.007935 25.9582157) 5814 POINT(302.871887 942.517212) 5815 POINT(543.546082 205.638947) 5816 POINT(51.0990791 617.302002) 5817 POINT(187.448395 346.353729) 5818 POINT(470.024658 238.765961) 5819 POINT(622.177307 264.504211) 5820 POINT(167.431534 162.344025) 5821 POINT(996.481384 232.232162) 5822 POINT(959.384644 43.2532921) 5823 POINT(95.9697342 372.226318) 5824 POINT(440.024384 439.982971) 5825 POINT(168.97374 511.077454) 5826 POINT(151.314346 42.8133011) 5827 POINT(348.791595 78.6226349) 5828 POINT(581.414124 556.906494) 5829 POINT(581.362976 285.803436) 5830 POINT(102.906044 419.388794) 5831 POINT(981.599915 232.146576) 5832 POINT(749.750793 53.3140869) 5833 POINT(621.515686 646.407654) 5834 POINT(702.905762 95.3816605) 5835 POINT(622.57312 26.1788177) 5836 POINT(990.452515 956.312561) 5837 POINT(135.082123 155.949005) 5838 POINT(143.422119 551.033325) 5839 POINT(968.8927 505.44809) 5840 POINT(20.9657936 79.0627289) 5841 POINT(750.059143 263.95517) 5842 POINT(318.92453 243.162613) 5843 POINT(53.7335625 690.08313) 5844 POINT(198.140854 306.43042) 5845 POINT(868.533936 754.468628) 5846 POINT(260.10434 335.252716) 5847 POINT(424.407471 444.523132) 5848 POINT(707.924011 929.184753) 5849 POINT(135.086395 571.291077) 5850 POINT(863.494629 660.792358) 5851 POINT(516.235779 969.491516) 5852 POINT(373.516846 441.324188) 5853 POINT(118.086662 879.586914) 5854 POINT(987.313049 584.94104) 5855 POINT(11.610507 327.463531) 5856 POINT(990.845398 598.901001) 5857 POINT(273.132629 20.8598938) 5858 POINT(449.813751 704.002136) 5859 POINT(384.83609 725.535461) 5860 POINT(769.129578 953.753845) 5861 POINT(997.129395 97.4162674) 5862 POINT(588.503418 127.850914) 5863 POINT(150.726425 374.329163) 5864 POINT(279.536224 521.846497) 5865 POINT(727.020752 282.781464) 5866 POINT(816.897949 427.380341) 5867 POINT(558.56488 617.542847) 5868 POINT(296.346802 723.450562) 5869 POINT(588.940308 596.137207) 5870 POINT(50.0659256 197.189041) 5871 POINT(602.917969 683.985046) 5872 POINT(52.7645111 241.198792) 5873 POINT(61.5581474 801.69873) 5874 POINT(961.025452 583.152893) 5875 POINT(258.925964 852.405579) 5876 POINT(727.431396 982.074402) 5877 POINT(481.656616 298.05249) 5878 POINT(777.131592 55.1828003) 5879 POINT(792.075867 39.163723) 5880 POINT(427.921265 900.691467) 5881 POINT(990.47583 347.826935) 5882 POINT(728.911499 167.387711) 5883 POINT(841.097046 819.750549) 5884 POINT(543.919861 43.7601852) 5885 POINT(696.128662 764.670349) 5886 POINT(323.37442 41.0243073) 5887 POINT(727.499512 677.408752) 5888 POINT(105.498466 809.41925) 5889 POINT(410.391846 222.360641) 5890 POINT(329.64566 830.029846) 5891 POINT(106.411339 835.570007) 5892 POINT(700.832947 80.1582642) 5893 POINT(307.437683 679.974609) 5894 POINT(736.841125 484.598206) 5895 POINT(640.750366 375.556152) 5896 POINT(582.915283 584.340515) 5897 POINT(247.579422 27.3951759) 5898 POINT(972.422363 715.173462) 5899 POINT(854.402649 466.967743) 5900 POINT(826.250122 568.875977) 5901 POINT(310.859833 947.036377) 5902 POINT(353.84024 177.399338) 5903 POINT(699.958679 445.409271) 5904 POINT(782.223694 624.384399) 5905 POINT(293.32193 160.518311) 5906 POINT(87.0962448 547.976868) 5907 POINT(662.694336 160.6772) 5908 POINT(625.778931 294.226166) 5909 POINT(533.05719 683.124695) 5910 POINT(122.921616 342.046661) 5911 POINT(414.865112 488.26413) 5912 POINT(486.224457 920.06781) 5913 POINT(453.635345 444.228577) 5914 POINT(834.593262 34.6267281) 5915 POINT(133.013992 148.007736) 5916 POINT(511.45108 29.189455) 5917 POINT(639.2771 648.471741) 5918 POINT(790.977234 291.799591) 5919 POINT(595.878784 5.94094324) 5920 POINT(227.525604 452.528687) 5921 POINT(89.139595 550.336609) 5922 POINT(864.209412 891.758179) 5923 POINT(91.6146088 848.875488) 5924 POINT(724.575317 277.495605) 5925 POINT(537.340942 893.849243) 5926 POINT(533.495056 221.482956) 5927 POINT(980.43219 215.978149) 5928 POINT(525.073364 685.882629) 5929 POINT(370.860168 129.505524) 5930 POINT(524.827332 71.7364349) 5931 POINT(482.384155 247.574875) 5932 POINT(472.079742 704.731201) 5933 POINT(729.203796 662.112061) 5934 POINT(860.996887 821.227112) 5935 POINT(889.915161 668.645447) 5936 POINT(612.687988 906.807922) 5937 POINT(827.74115 806.086914) 5938 POINT(987.083313 0.206424892) 5939 POINT(940.92395 962.947021) 5940 POINT(845.873779 137.379333) 5941 POINT(410.866028 828.865356) 5942 POINT(883.691589 654.428833) 5943 POINT(530.468445 513.431946) 5944 POINT(54.1350975 415.266479) 5945 POINT(511.650909 448.408203) 5946 POINT(983.514587 892.317139) 5947 POINT(287.877838 985.601685) 5948 POINT(544.761597 258.697418) 5949 POINT(371.418488 417.411469) 5950 POINT(266.374908 491.340363) 5951 POINT(800.918396 512.665405) 5952 POINT(889.263611 820.265442) 5953 POINT(455.661621 374.668091) 5954 POINT(123.719147 464.026093) 5955 POINT(429.792755 304.848114) 5956 POINT(668.437866 380.340118) 5957 POINT(992.001892 973.132996) 5958 POINT(455.606964 39.6911469) 5959 POINT(721.134277 149.919479) 5960 POINT(205.742416 944.567261) 5961 POINT(351.384125 404.596222) 5962 POINT(991.559265 604.890991) 5963 POINT(405.792816 897.99231) 5964 POINT(103.097473 918.632629) 5965 POINT(895.462219 832.467957) 5966 POINT(11.1991215 763.750488) 5967 POINT(844.088806 430.86438) 5968 POINT(280.925842 92.2535706) 5969 POINT(621.139221 917.033203) 5970 POINT(481.439209 828.754089) 5971 POINT(568.347107 804.65564) 5972 POINT(268.190033 454.401672) 5973 POINT(47.4830513 571.633606) 5974 POINT(124.040916 733.235901) 5975 POINT(264.9039 224.217987) 5976 POINT(688.380127 683.049072) 5977 POINT(310.746277 323.587036) 5978 POINT(80.6891785 568.726257) 5979 POINT(136.413208 258.772186) 5980 POINT(243.850937 505.269104) 5981 POINT(359.97641 170.255081) 5982 POINT(652.298706 693.473694) 5983 POINT(90.1622391 240.453079) 5984 POINT(13.6018305 507.312164) 5985 POINT(478.711426 618.522949) 5986 POINT(55.0865097 632.87616) 5987 POINT(609.237488 100.920059) 5988 POINT(548.539795 389.315948) 5989 POINT(97.5127792 675.054871) 5990 POINT(258.017059 798.218933) 5991 POINT(480.766571 995.917297) 5992 POINT(73.4589157 105.59848) 5993 POINT(7.59525537 915.041992) 5994 POINT(744.545227 387.031708) 5995 POINT(779.093384 943.643921) 5996 POINT(86.4174881 809.021851) 5997 POINT(637.572388 398.759918) 5998 POINT(476.154419 696.539673) 5999 POINT(631.627136 360.021851) 6000 POINT(783.886902 26.7028942) 6001 POINT(13.3423109 128.105209) 6002 POINT(426.005371 481.099365) 6003 POINT(331.238647 812.424194) 6004 POINT(33.9936104 34.3866539) 6005 POINT(385.398102 939.381836) 6006 POINT(798.083801 915.172729) 6007 POINT(301.459473 533.155457) 6008 POINT(70.370018 968.087341) 6009 POINT(278.353241 213.95932) 6010 POINT(450.553162 185.307617) 6011 POINT(269.373627 234.949493) 6012 POINT(685.574768 814.140564) 6013 POINT(894.231934 555.027222) 6014 POINT(101.590462 727.756775) 6015 POINT(755.9729 552.979431) 6016 POINT(465.739868 52.5998306) 6017 POINT(384.080688 626.52063) 6018 POINT(611.803467 652.781372) 6019 POINT(654.880676 1.34868717) 6020 POINT(527.045715 393.948853) 6021 POINT(491.716003 679.394043) 6022 POINT(9.39684963 952.349243) 6023 POINT(237.731567 676.760559) 6024 POINT(289.821625 745.391296) 6025 POINT(468.930695 900.772644) 6026 POINT(952.575867 674.852722) 6027 POINT(398.126923 68.0385513) 6028 POINT(57.5140495 270.517334) 6029 POINT(963.239258 613.109985) 6030 POINT(8.24725056 368.633026) 6031 POINT(325.969238 237.397797) 6032 POINT(555.460144 164.936523) 6033 POINT(787.250061 523.334717) 6034 POINT(466.89505 745.51532) 6035 POINT(90.11129 327.843445) 6036 POINT(128.350098 560.505127) 6037 POINT(93.0111389 676.069519) 6038 POINT(410.582367 696.219421) 6039 POINT(799.638611 820.798889) 6040 POINT(995.456299 792.065063) 6041 POINT(495.181885 500.356476) 6042 POINT(404.347504 501.427551) 6043 POINT(112.736763 219.043198) 6044 POINT(819.152954 113.150703) 6045 POINT(113.643959 355.925873) 6046 POINT(490.835571 325.453522) 6047 POINT(866.977173 862.26355) 6048 POINT(854.945496 830.909058) 6049 POINT(339.169495 282.896118) 6050 POINT(133.825272 853.871582) 6051 POINT(515.989624 396.005463) 6052 POINT(120.173973 745.517639) 6053 POINT(365.024323 237.893997) 6054 POINT(378.38205 242.128403) 6055 POINT(874.869873 9.52921295) 6056 POINT(343.74942 725.673523) 6057 POINT(172.891159 959.937195) 6058 POINT(773.688232 379.074127) 6059 POINT(400.306488 934.058838) 6060 POINT(940.72937 229.266129) 6061 POINT(713.255676 751.020508) 6062 POINT(539.171997 837.514038) 6063 POINT(861.291016 850.135376) 6064 POINT(893.231628 587.135559) 6065 POINT(478.405701 879.20105) 6066 POINT(45.3760529 783.295288) 6067 POINT(792.410828 791.262878) 6068 POINT(213.132401 907.85675) 6069 POINT(530.452698 16.0775318) 6070 POINT(928.079041 545.107605) 6071 POINT(564.105469 850.763367) 6072 POINT(612.189514 532.779358) 6073 POINT(317.291046 105.911003) 6074 POINT(57.5009499 509.091644) 6075 POINT(252.899734 499.731354) 6076 POINT(111.677017 73.0925446) 6077 POINT(286.169403 330.236298) 6078 POINT(143.995544 495.511047) 6079 POINT(749.511475 606.207458) 6080 POINT(586.3125 194.471863) 6081 POINT(387.556641 379.664154) 6082 POINT(977.453003 799.160217) 6083 POINT(703.862488 309.165161) 6084 POINT(656.204102 479.905701) 6085 POINT(51.2410545 73.6764603) 6086 POINT(169.705276 630.842529) 6087 POINT(973.405457 745.633179) 6088 POINT(915.739075 897.586975) 6089 POINT(112.111107 479.567688) 6090 POINT(797.548523 784.16864) 6091 POINT(214.812164 255.250519) 6092 POINT(219.781494 628.295227) 6093 POINT(464.822693 73.288147) 6094 POINT(528.565613 970.087708) 6095 POINT(138.950531 93.7798843) 6096 POINT(635.24231 265.483307) 6097 POINT(934.566162 157.795364) 6098 POINT(652.75354 410.979218) 6099 POINT(735.211609 875.579712) 6100 POINT(710.028687 691.321655) 6101 POINT(965.404114 708.622131) 6102 POINT(940.029846 966.797119) 6103 POINT(463.630005 934.763367) 6104 POINT(911.577148 253.242371) 6105 POINT(248.158447 51.720726) 6106 POINT(397.012878 277.671387) 6107 POINT(11.8744516 545.749573) 6108 POINT(443.618347 218.064972) 6109 POINT(336.583557 295.245056) 6110 POINT(806.041077 150.536346) 6111 POINT(719.066956 476.134644) 6112 POINT(162.518417 864.57312) 6113 POINT(633.570007 234.783264) 6114 POINT(395.216553 691.770508) 6115 POINT(179.523499 658.294739) 6116 POINT(983.484863 990.452759) 6117 POINT(868.380554 530.65564) 6118 POINT(110.328941 493.494293) 6119 POINT(856.890808 860.851318) 6120 POINT(992.122986 55.7894821) 6121 POINT(331.429169 316.243652) 6122 POINT(737.8349 518.088196) 6123 POINT(762.786499 117.111313) 6124 POINT(458.271942 662.863342) 6125 POINT(684.869995 37.9180183) 6126 POINT(562.640625 193.657104) 6127 POINT(383.93338 324.818085) 6128 POINT(86.7457275 580.766663) 6129 POINT(125.272804 249.984528) 6130 POINT(335.25293 632.580505) 6131 POINT(77.9115601 870.028015) 6132 POINT(133.550156 63.4118462) 6133 POINT(38.91782 292.168915) 6134 POINT(69.9368057 815.952637) 6135 POINT(100.033691 347.65213) 6136 POINT(466.341156 780.782776) 6137 POINT(60.7511864 262.512726) 6138 POINT(598.835999 48.6306458) 6139 POINT(272.48291 452.180023) 6140 POINT(254.335709 285.82428) 6141 POINT(624.800476 465.154266) 6142 POINT(866.584595 982.772766) 6143 POINT(61.7348061 894.329712) 6144 POINT(735.582275 573.152161) 6145 POINT(676.856812 560.319702) 6146 POINT(665.757568 32.1624832) 6147 POINT(491.418335 762.842529) 6148 POINT(428.441803 950.806152) 6149 POINT(209.488464 972.952087) 6150 POINT(885.578003 55.2793694) 6151 POINT(885.152527 95.3707962) 6152 POINT(229.327316 142.556061) 6153 POINT(674.958374 726.755859) 6154 POINT(374.620392 771.990356) 6155 POINT(907.529724 548.380127) 6156 POINT(70.1936874 265.812134) 6157 POINT(133.376007 762.037659) 6158 POINT(202.817734 496.899963) 6159 POINT(751.297913 963.217041) 6160 POINT(196.965942 88.9777145) 6161 POINT(201.421371 968.575256) 6162 POINT(448.902588 421.812225) 6163 POINT(604.927856 313.967743) 6164 POINT(674.038818 762.123047) 6165 POINT(481.237671 618.846985) 6166 POINT(636.481018 860.419861) 6167 POINT(727.13446 992.460266) 6168 POINT(420.176056 36.1474342) 6169 POINT(169.595901 622.307495) 6170 POINT(595.259277 580.25238) 6171 POINT(553.55249 636.74054) 6172 POINT(937.583191 838.13562) 6173 POINT(974.193176 37.9954567) 6174 POINT(833.513367 590.076599) 6175 POINT(265.651855 741.577026) 6176 POINT(908.62262 954.404358) 6177 POINT(296.953979 580.611755) 6178 POINT(473.711884 525.359131) 6179 POINT(163.10936 103.027435) 6180 POINT(3.58533216 487.772644) 6181 POINT(883.461975 434.307007) 6182 POINT(425.272888 80.0629654) 6183 POINT(998.236328 743.825806) 6184 POINT(568.129333 701.880676) 6185 POINT(783.156616 548.770386) 6186 POINT(746.755615 769.964905) 6187 POINT(154.695236 342.325958) 6188 POINT(340.438873 842.918274) 6189 POINT(516.688477 733.811157) 6190 POINT(84.3588257 680.845337) 6191 POINT(182.620483 344.963287) 6192 POINT(985.855347 537.915466) 6193 POINT(804.832458 291.478271) 6194 POINT(664.416748 754.314087) 6195 POINT(738.391968 880.673767) 6196 POINT(30.6753235 408.78598) 6197 POINT(77.6192856 628.863098) 6198 POINT(564.655396 594.702698) 6199 POINT(419.692261 315.435394) 6200 POINT(727.006592 612.602783) 6201 POINT(252.849167 280.082916) 6202 POINT(892.29071 742.365051) 6203 POINT(335.111298 786.073669) 6204 POINT(487.017975 121.124809) 6205 POINT(949.914001 32.5437698) 6206 POINT(56.6220741 851.893616) 6207 POINT(502.445526 334.699982) 6208 POINT(787.615112 686.382507) 6209 POINT(387.858459 400.433411) 6210 POINT(539.592773 238.173279) 6211 POINT(330.971008 328.627625) 6212 POINT(865.518372 604.169922) 6213 POINT(705.870178 517.496094) 6214 POINT(439.862122 808.856506) 6215 POINT(510.352631 695.336853) 6216 POINT(97.9156647 583.577759) 6217 POINT(339.896759 631.492981) 6218 POINT(594.251648 488.760712) 6219 POINT(602.48468 128.03714) 6220 POINT(695.306702 258.244415) 6221 POINT(390.844421 774.35321) 6222 POINT(264.999634 859.849915) 6223 POINT(512.44104 824.601746) 6224 POINT(220.852386 133.787125) 6225 POINT(627.82196 854.872131) 6226 POINT(222.078232 889.878601) 6227 POINT(800.845154 511.125) 6228 POINT(494.486847 55.9180756) 6229 POINT(884.150391 374.915405) 6230 POINT(546.897339 303.439301) 6231 POINT(492.354248 471.080658) 6232 POINT(640.245544 605.036682) 6233 POINT(124.367767 205.438324) 6234 POINT(637.040161 361.069275) 6235 POINT(633.583435 52.0356789) 6236 POINT(391.70813 175.629532) 6237 POINT(387.214996 375.231934) 6238 POINT(701.245728 555.235779) 6239 POINT(358.679352 654.099976) 6240 POINT(283.150482 882.598816) 6241 POINT(142.597412 623.158936) 6242 POINT(499.673401 6.43390894) 6243 POINT(631.885071 517.769897) 6244 POINT(22.9442463 851.67804) 6245 POINT(339.774475 543.743652) 6246 POINT(206.555328 148.294083) 6247 POINT(153.821701 723.549622) 6248 POINT(170.939758 897.38385) 6249 POINT(569.537048 516.332764) 6250 POINT(50.662735 627.511841) 6251 POINT(141.843536 691.710266) 6252 POINT(223.011124 69.4913101) 6253 POINT(314.8909 249.643082) 6254 POINT(823.582642 212.574875) 6255 POINT(824.708069 127.775085) 6256 POINT(343.639526 57.8099632) 6257 POINT(222.770966 696.367493) 6258 POINT(436.621368 904.677917) 6259 POINT(527.933533 797.793396) 6260 POINT(281.354828 985.075012) 6261 POINT(693.570984 296.60791) 6262 POINT(454.221802 374.878784) 6263 POINT(168.600098 737.194153) 6264 POINT(452.051575 689.05957) 6265 POINT(855.779053 994.258728) 6266 POINT(935.10199 313.464294) 6267 POINT(826.984497 497.985779) 6268 POINT(781.640564 197.551239) 6269 POINT(169.768082 237.064407) 6270 POINT(971.892456 270.657562) 6271 POINT(817.29834 821.295532) 6272 POINT(662.192322 733.625977) 6273 POINT(487.798706 218.926437) 6274 POINT(35.8698845 92.2129135) 6275 POINT(340.936035 685.71875) 6276 POINT(294.674438 253.691208) 6277 POINT(386.548676 952.13678) 6278 POINT(605.455933 109.109085) 6279 POINT(373.018982 26.6743584) 6280 POINT(766.579956 217.058838) 6281 POINT(983.991516 367.566376) 6282 POINT(585.469238 827.464355) 6283 POINT(906.656128 547.939331) 6284 POINT(444.188812 13.3489761) 6285 POINT(254.20491 532.438843) 6286 POINT(708.68988 982.962219) 6287 POINT(59.224247 953.762451) 6288 POINT(646.900879 232.812668) 6289 POINT(61.6965446 248.171188) 6290 POINT(452.114685 473.490234) 6291 POINT(831.103638 618.433105) 6292 POINT(115.02272 754.702209) 6293 POINT(751.093872 744.864258) 6294 POINT(997.353943 864.35791) 6295 POINT(499.687378 179.907898) 6296 POINT(482.587067 450.106415) 6297 POINT(148.551193 924.378601) 6298 POINT(417.938263 872.374695) 6299 POINT(730.116455 795.075012) 6300 POINT(823.228577 148.206512) 6301 POINT(257.985474 620.531311) 6302 POINT(585.876404 478.232635) 6303 POINT(489.073975 826.461243) 6304 POINT(349.834778 398.699036) 6305 POINT(768.261047 642.802307) 6306 POINT(255.623917 91.0515289) 6307 POINT(759.106262 543.665161) 6308 POINT(517.636414 478.169037) 6309 POINT(726.699524 949.039246) 6310 POINT(405.69397 494.610718) 6311 POINT(868.320435 17.5245647) 6312 POINT(105.597076 34.4880295) 6313 POINT(379.800079 153.002304) 6314 POINT(196.460419 141.702896) 6315 POINT(973.941101 761.004761) 6316 POINT(332.40683 740.84845) 6317 POINT(233.813904 714.191406) 6318 POINT(837.275696 731.211487) 6319 POINT(868.091492 828.018799) 6320 POINT(701.0802 339.836945) 6321 POINT(845.821777 580.250122) 6322 POINT(246.843826 901.926514) 6323 POINT(810.297668 19.8693542) 6324 POINT(60.1039925 497.986572) 6325 POINT(720.224792 756.341919) 6326 POINT(637.861938 307.777527) 6327 POINT(533.596863 568.726746) 6328 POINT(319.275909 962.538086) 6329 POINT(956.063538 261.246216) 6330 POINT(60.2610893 301.076874) 6331 POINT(919.763489 168.535416) 6332 POINT(364.819977 614.678711) 6333 POINT(967.340027 196.522705) 6334 POINT(496.950287 943.530457) 6335 POINT(94.049942 505.967133) 6336 POINT(981.060608 147.316757) 6337 POINT(681.524536 202.945114) 6338 POINT(321.785736 89.1869812) 6339 POINT(850.971497 507.515961) 6340 POINT(4.88150787 260.488434) 6341 POINT(110.686844 407.505737) 6342 POINT(801.55896 839.160645) 6343 POINT(390.047974 363.556305) 6344 POINT(514.392517 463.783325) 6345 POINT(85.1990814 74.6446075) 6346 POINT(852.117126 754.877197) 6347 POINT(314.046844 16.162365) 6348 POINT(584.670532 802.713318) 6349 POINT(241.71611 566.958313) 6350 POINT(443.29953 834.756226) 6351 POINT(722.156372 204.713699) 6352 POINT(31.1384983 84.7391586) 6353 POINT(65.1461868 893.495422) 6354 POINT(888.194275 408.656891) 6355 POINT(16.6487064 351.787781) 6356 POINT(605.089783 470.707825) 6357 POINT(898.582825 77.8462524) 6358 POINT(749.289856 785.079163) 6359 POINT(733.977783 541.567627) 6360 POINT(306.061279 618.74292) 6361 POINT(355.67691 813.587524) 6362 POINT(247.415802 698.025452) 6363 POINT(309.886963 593.968994) 6364 POINT(832.204651 920.169495) 6365 POINT(496.685333 391.242401) 6366 POINT(868.938599 343.592896) 6367 POINT(192.987183 769.917297) 6368 POINT(702.498596 750.843445) 6369 POINT(462.440643 678.769592) 6370 POINT(332.496857 70.7789841) 6371 POINT(132.396088 956.682739) 6372 POINT(253.592621 76.2949142) 6373 POINT(999.744019 16.6957588) 6374 POINT(198.632751 596.649353) 6375 POINT(782.41449 276.907166) 6376 POINT(539.265747 195.384903) 6377 POINT(457.191406 249.357132) 6378 POINT(183.994797 952.92865) 6379 POINT(990.846619 940.932678) 6380 POINT(141.931305 884.711243) 6381 POINT(382.200775 755.318176) 6382 POINT(676.358948 239.240601) 6383 POINT(267.455475 819.27063) 6384 POINT(43.3120575 714.791809) 6385 POINT(808.01593 262.886505) 6386 POINT(37.5342941 657.637329) 6387 POINT(965.176147 650.523254) 6388 POINT(995.356689 849.09021) 6389 POINT(683.720581 440.744476) 6390 POINT(28.2903748 233.721573) 6391 POINT(649.093079 19.7986412) 6392 POINT(282.663513 208.238403) 6393 POINT(670.803955 739.070312) 6394 POINT(92.7635956 91.5801849) 6395 POINT(976.820801 243.636917) 6396 POINT(374.122467 484.350494) 6397 POINT(706.576355 723.122192) 6398 POINT(299.370056 142.910522) 6399 POINT(168.809219 79.6892242) 6400 POINT(724.181885 124.110191) 6401 POINT(317.742767 189.11084) 6402 POINT(451.072876 575.136353) 6403 POINT(808.228271 742.870972) 6404 POINT(903.092102 64.354332) 6405 POINT(656.69812 681.287781) 6406 POINT(249.92215 578.973022) 6407 POINT(277.469391 54.4353294) 6408 POINT(310.672363 700.162781) 6409 POINT(628.616943 639.527588) 6410 POINT(429.106079 342.816833) 6411 POINT(611.933838 676.389771) 6412 POINT(959.594543 293.005493) 6413 POINT(279.168488 298.284576) 6414 POINT(450.322205 459.495911) 6415 POINT(931.660706 290.906006) 6416 POINT(201.870102 785.285095) 6417 POINT(820.694214 630.655212) 6418 POINT(705.097534 540.33606) 6419 POINT(897.480957 272.848999) 6420 POINT(816.174744 777.653992) 6421 POINT(288.944763 85.3798065) 6422 POINT(155.757751 12.1573391) 6423 POINT(830.765015 873.277893) 6424 POINT(573.837891 246.772522) 6425 POINT(842.979309 599.968201) 6426 POINT(5.06437016 784.732178) 6427 POINT(234.466888 182.748459) 6428 POINT(257.771118 433.7146) 6429 POINT(147.589447 389.735901) 6430 POINT(293.110657 719.399475) 6431 POINT(458.047577 175.472885) 6432 POINT(121.305374 217.016769) 6433 POINT(110.616592 310.388367) 6434 POINT(285.886322 603.943481) 6435 POINT(159.995499 948.869019) 6436 POINT(942.849609 199.404343) 6437 POINT(486.790375 170.89328) 6438 POINT(141.991928 644.509827) 6439 POINT(39.0439072 867.758728) 6440 POINT(157.481812 683.518433) 6441 POINT(505.22287 233.731567) 6442 POINT(622.303833 322.246124) 6443 POINT(28.8175926 698.450378) 6444 POINT(28.0271454 689.506653) 6445 POINT(729.451538 281.220062) 6446 POINT(541.961121 830.517212) 6447 POINT(780.524536 975.16803) 6448 POINT(455.872681 176.128601) 6449 POINT(816.931641 49.4497414) 6450 POINT(254.866058 207.960342) 6451 POINT(794.440918 779.765808) 6452 POINT(825.715149 667.0672) 6453 POINT(709.13623 535.485535) 6454 POINT(707.96051 713.309387) 6455 POINT(3.32005954 835.3927) 6456 POINT(228.632355 555.425476) 6457 POINT(53.9301872 668.824768) 6458 POINT(505.859558 949.830688) 6459 POINT(959.490295 315.750122) 6460 POINT(514.313904 461.927826) 6461 POINT(338.642883 104.713394) 6462 POINT(985.996338 740.37793) 6463 POINT(32.2869949 53.8096466) 6464 POINT(885.983643 156.132904) 6465 POINT(295.270142 444.770111) 6466 POINT(520.249451 778.487061) 6467 POINT(183.599823 897.337158) 6468 POINT(170.4897 715.005981) 6469 POINT(628.496399 19.4708595) 6470 POINT(131.097565 636.596558) 6471 POINT(956.696289 803.293945) 6472 POINT(471.235107 789.486267) 6473 POINT(12.7338057 477.396606) 6474 POINT(38.6638031 799.392273) 6475 POINT(287.117828 889.163025) 6476 POINT(643.065735 77.2241287) 6477 POINT(606.134216 817.750244) 6478 POINT(939.583984 8.43982506) 6479 POINT(624.325317 66.4759827) 6480 POINT(915.928406 358.452698) 6481 POINT(37.5364151 175.498749) 6482 POINT(659.453064 353.682922) 6483 POINT(638.906067 70.2908325) 6484 POINT(38.0580063 741.996765) 6485 POINT(936.570312 622.59906) 6486 POINT(317.674194 228.047653) 6487 POINT(482.534576 668.098816) 6488 POINT(509.645599 89.7112885) 6489 POINT(597.646362 484.117584) 6490 POINT(296.854919 473.309601) 6491 POINT(166.514557 582.614624) 6492 POINT(834.387573 940.180786) 6493 POINT(295.317017 184.654617) 6494 POINT(118.465843 788.542542) 6495 POINT(129.610794 195.131454) 6496 POINT(229.008804 636.299988) 6497 POINT(101.504356 438.336517) 6498 POINT(792.296997 746.882507) 6499 POINT(477.013092 409.596863) 6500 POINT(899.799988 776.395264) 6501 POINT(794.346497 674.740234) 6502 POINT(329.318024 572.00531) 6503 POINT(689.657227 152.29538) 6504 POINT(820.402893 554.835144) 6505 POINT(593.922363 953.466309) 6506 POINT(885.867493 162.62883) 6507 POINT(826.76062 857.996948) 6508 POINT(926.524109 35.6175041) 6509 POINT(11.8730268 261.678009) 6510 POINT(441.668243 721.51593) 6511 POINT(374.312622 950.659241) 6512 POINT(780.952393 911.210144) 6513 POINT(59.9446602 11.7754555) 6514 POINT(4.98560381 744.868469) 6515 POINT(928.393982 765.246948) 6516 POINT(56.2001801 838.960632) 6517 POINT(426.737427 760.475891) 6518 POINT(85.3144226 58.6654205) 6519 POINT(844.579895 576.959045) 6520 POINT(632.284546 18.679203) 6521 POINT(2.45081782 655.92218) 6522 POINT(577.303406 50.4139214) 6523 POINT(833.3172 405.130188) 6524 POINT(713.609985 277.540131) 6525 POINT(308.174683 886.043762) 6526 POINT(259.193634 237.945099) 6527 POINT(236.046173 41.299839) 6528 POINT(131.608368 562.232666) 6529 POINT(969.283203 449.244537) 6530 POINT(824.869202 841.300537) 6531 POINT(377.972351 314.419556) 6532 POINT(918.738647 403.334778) 6533 POINT(361.746063 897.596252) 6534 POINT(740.68866 79.419899) 6535 POINT(960.775085 950.894348) 6536 POINT(314.642883 613.170166) 6537 POINT(955.679382 313.064301) 6538 POINT(246.584869 500.253967) 6539 POINT(932.173523 513.131409) 6540 POINT(596.701233 205.94841) 6541 POINT(682.217163 668.897339) 6542 POINT(505.493469 771.091187) 6543 POINT(649.152588 807.496216) 6544 POINT(514.924011 287.777832) 6545 POINT(857.790833 901.161682) 6546 POINT(245.98761 5.30045938) 6547 POINT(437.784973 841.051575) 6548 POINT(655.063171 454.178833) 6549 POINT(814.163025 469.503815) 6550 POINT(240.069443 882.35614) 6551 POINT(844.967712 876.182922) 6552 POINT(754.022339 54.015377) 6553 POINT(403.069702 921.576416) 6554 POINT(611.387878 529.926453) 6555 POINT(976.024719 383.18924) 6556 POINT(848.088135 531.300232) 6557 POINT(971.081482 992.163208) 6558 POINT(278.722504 379.969177) 6559 POINT(317.009521 723.144958) 6560 POINT(147.202957 940.120239) 6561 POINT(233.304169 65.8918762) 6562 POINT(805.394348 985.193787) 6563 POINT(351.67511 206.815918) 6564 POINT(697.442505 642.965088) 6565 POINT(713.795776 411.523132) 6566 POINT(547.333801 87.9124527) 6567 POINT(100.461227 770.138062) 6568 POINT(219.058105 149.033951) 6569 POINT(66.084053 456.158417) 6570 POINT(270.857452 70.2167892) 6571 POINT(432.481018 882.744507) 6572 POINT(988.889099 26.6319141) 6573 POINT(638.928711 509.307587) 6574 POINT(345.774017 282.581146) 6575 POINT(631.373169 463.253662) 6576 POINT(273.644501 832.557983) 6577 POINT(110.477951 769.611877) 6578 POINT(210.262512 647.407349) 6579 POINT(232.017578 513.505798) 6580 POINT(614.500916 41.4254494) 6581 POINT(878.228149 151.116943) 6582 POINT(51.0330734 364.68985) 6583 POINT(587.495422 903.665161) 6584 POINT(213.656174 29.1443939) 6585 POINT(162.702972 451.344055) 6586 POINT(545.603943 508.894287) 6587 POINT(974.308228 241.077774) 6588 POINT(779.925903 267.334778) 6589 POINT(459.526001 650.007751) 6590 POINT(73.0965805 799.306519) 6591 POINT(298.751709 38.0047531) 6592 POINT(453.164124 19.2284069) 6593 POINT(57.5684013 675.080811) 6594 POINT(15.7716799 850.523315) 6595 POINT(628.47467 456.824829) 6596 POINT(846.234436 992.656433) 6597 POINT(830.112 802.008423) 6598 POINT(645.599976 765.420044) 6599 POINT(840.635376 756.028625) 6600 POINT(818.454407 602.008362) 6601 POINT(401.474518 962.224609) 6602 POINT(618.480774 19.8440247) 6603 POINT(651.699585 186.302368) 6604 POINT(325.880371 718.588135) 6605 POINT(93.303009 628.727356) 6606 POINT(283.291901 206.447891) 6607 POINT(173.809555 493.225433) 6608 POINT(581.495239 47.5800552) 6609 POINT(762.747925 619.317261) 6610 POINT(853.776123 354.489441) 6611 POINT(928.783752 371.583588) 6612 POINT(802.307495 559.879822) 6613 POINT(758.989502 112.209702) 6614 POINT(988.337524 223.089752) 6615 POINT(943.191467 186.025055) 6616 POINT(20.5650215 728.330811) 6617 POINT(745.094482 404.079285) 6618 POINT(476.142944 177.355392) 6619 POINT(146.578583 23.7642975) 6620 POINT(792.731812 670.448181) 6621 POINT(58.9403648 457.198395) 6622 POINT(537.494019 999.933716) 6623 POINT(799.803467 677.263855) 6624 POINT(152.57225 683.500793) 6625 POINT(619.951172 80.1824722) 6626 POINT(712.254333 264.985291) 6627 POINT(91.5755234 468.302429) 6628 POINT(823.631653 72.8602829) 6629 POINT(127.647064 665.956909) 6630 POINT(432.188354 707.221191) 6631 POINT(358.670929 919.562378) 6632 POINT(531.598328 620.816162) 6633 POINT(443.518036 770.911255) 6634 POINT(151.387451 355.566559) 6635 POINT(608.933228 155.848083) 6636 POINT(238.476334 520.593689) 6637 POINT(599.488892 460.808777) 6638 POINT(343.529602 69.1766815) 6639 POINT(156.049316 574.271729) 6640 POINT(258.195007 109.102173) 6641 POINT(834.251953 271.869843) 6642 POINT(765.53949 512.945251) 6643 POINT(211.224182 761.220581) 6644 POINT(507.225037 271.978424) 6645 POINT(423.000122 839.550964) 6646 POINT(134.286133 540.308838) 6647 POINT(219.260483 853.645569) 6648 POINT(593.967529 965.780823) 6649 POINT(836.602417 732.890564) 6650 POINT(766.274414 413.065247) 6651 POINT(575.181641 543.188904) 6652 POINT(57.1268387 904.727295) 6653 POINT(943.020325 798.896729) 6654 POINT(789.859802 281.088776) 6655 POINT(112.420601 703.892883) 6656 POINT(825.974243 93.1603317) 6657 POINT(546.772034 369.30072) 6658 POINT(255.331909 869.237366) 6659 POINT(414.728424 187.711304) 6660 POINT(894.353271 549.960876) 6661 POINT(551.509583 11.1049871) 6662 POINT(840.287598 374.412415) 6663 POINT(571.34021 676.768616) 6664 POINT(275.474976 267.422241) 6665 POINT(426.28125 112.702934) 6666 POINT(876.029846 162.64595) 6667 POINT(468.568634 607.290955) 6668 POINT(535.99469 174.63353) 6669 POINT(457.809113 488.951294) 6670 POINT(105.302879 974.25238) 6671 POINT(90.8778381 87.3582535) 6672 POINT(595.558289 634.212646) 6673 POINT(479.120575 361.426422) 6674 POINT(922.491699 994.498291) 6675 POINT(590.623657 419.103455) 6676 POINT(21.9515457 791.266174) 6677 POINT(379.129272 524.197998) 6678 POINT(844.486267 327.906311) 6679 POINT(78.0287399 305.712311) 6680 POINT(752.179688 914.743652) 6681 POINT(718.269592 240.804749) 6682 POINT(613.729309 126.223206) 6683 POINT(181.593735 74.5523071) 6684 POINT(26.2522545 723.892883) 6685 POINT(202.045654 434.718811) 6686 POINT(644.538635 863.24762) 6687 POINT(434.029419 279.987213) 6688 POINT(333.141418 576.311157) 6689 POINT(597.365234 33.4363899) 6690 POINT(489.613586 24.1252861) 6691 POINT(449.925934 862.909363) 6692 POINT(337.328064 309.126862) 6693 POINT(915.784729 905.434509) 6694 POINT(625.706909 782.384888) 6695 POINT(678.759766 638.748901) 6696 POINT(79.5458298 471.135559) 6697 POINT(333.300598 689.584656) 6698 POINT(135.763062 74.901123) 6699 POINT(240.47052 261.695496) 6700 POINT(226.777206 661.252197) 6701 POINT(368.080566 958.216003) 6702 POINT(799.393616 853.136108) 6703 POINT(980.723633 970.094971) 6704 POINT(784.252808 697.431641) 6705 POINT(295.534363 577.872803) 6706 POINT(694.382507 188.423386) 6707 POINT(419.106384 356.45871) 6708 POINT(476.148651 380.248138) 6709 POINT(644.383179 835.910767) 6710 POINT(658.982056 339.724335) 6711 POINT(705.889465 125.252441) 6712 POINT(951.872864 686.61322) 6713 POINT(887.893555 886.430969) 6714 POINT(868.082458 854.19928) 6715 POINT(51.6169167 302.60498) 6716 POINT(81.2774582 331.651245) 6717 POINT(121.200432 335.64917) 6718 POINT(335.907837 264.100677) 6719 POINT(348.671936 644.306274) 6720 POINT(864.827332 770.539795) 6721 POINT(598.650208 334.651184) 6722 POINT(373.710663 967.909668) 6723 POINT(865.097656 51.9390068) 6724 POINT(903.702515 877.162598) 6725 POINT(494.354645 376.586914) 6726 POINT(903.008667 439.300812) 6727 POINT(958.335754 651.715881) 6728 POINT(950.006531 732.71051) 6729 POINT(144.652634 105.705864) 6730 POINT(53.227459 994.434814) 6731 POINT(730.177063 816.570374) 6732 POINT(788.697815 184.905579) 6733 POINT(332.934601 837.239563) 6734 POINT(657.182617 966.24176) 6735 POINT(424.103546 819.275452) 6736 POINT(590.557312 97.3126144) 6737 POINT(885.293884 159.987625) 6738 POINT(98.6555099 283.773346) 6739 POINT(152.331177 992.841919) 6740 POINT(919.449463 498.241058) 6741 POINT(959.724854 947.565735) 6742 POINT(463.387238 135.364502) 6743 POINT(232.248138 244.174026) 6744 POINT(777.331421 160.029785) 6745 POINT(932.097351 339.625061) 6746 POINT(98.1355515 606.260559) 6747 POINT(10.574234 517.936157) 6748 POINT(426.907776 492.045715) 6749 POINT(708.893433 770.955078) 6750 POINT(492.009857 924.52948) 6751 POINT(558.451233 339.8125) 6752 POINT(244.525513 14.5170107) 6753 POINT(629.701355 924.231812) 6754 POINT(860.119507 223.492249) 6755 POINT(31.8056259 881.816223) 6756 POINT(524.848267 95.3600235) 6757 POINT(861.718628 561.277283) 6758 POINT(931.641174 534.570251) 6759 POINT(808.70929 87.0327682) 6760 POINT(984.044617 78.4484329) 6761 POINT(334.0242 548.044617) 6762 POINT(222.73175 61.3600655) 6763 POINT(739.095093 267.157623) 6764 POINT(689.670288 409.312378) 6765 POINT(811.137451 30.1482334) 6766 POINT(509.282349 653.912537) 6767 POINT(972.068237 243.415787) 6768 POINT(283.119568 873.043945) 6769 POINT(663.39032 638.606689) 6770 POINT(305.330566 801.60553) 6771 POINT(862.186951 539.926758) 6772 POINT(654.466309 599.224915) 6773 POINT(255.895035 809.570007) 6774 POINT(900.018005 393.664307) 6775 POINT(398.467743 358.304932) 6776 POINT(679.710571 59.9812698) 6777 POINT(648.399353 787.153259) 6778 POINT(909.299988 958.297913) 6779 POINT(448.505096 63.2629051) 6780 POINT(236.892242 889.808228) 6781 POINT(475.078308 645.100403) 6782 POINT(358.185394 84.583107) 6783 POINT(864.976746 691.210449) 6784 POINT(480.227386 989.599304) 6785 POINT(456.31897 710.854126) 6786 POINT(25.1042862 255.642654) 6787 POINT(162.939392 557.31958) 6788 POINT(270.370331 42.3501053) 6789 POINT(983.813599 104.708305) 6790 POINT(152.071625 377.327393) 6791 POINT(43.7016411 381.251892) 6792 POINT(734.097473 264.299347) 6793 POINT(615.782898 717.071472) 6794 POINT(652.635681 873.527039) 6795 POINT(514.695374 477.721588) 6796 POINT(158.155853 942.805725) 6797 POINT(120.910362 838.472046) 6798 POINT(634.169861 337.397736) 6799 POINT(734.647339 465.293732) 6800 POINT(809.71405 71.0505524) 6801 POINT(917.5755 829.786926) 6802 POINT(391.886902 377.208496) 6803 POINT(999.487854 635.293884) 6804 POINT(819.798706 179.694565) 6805 POINT(369.231842 674.275635) 6806 POINT(29.0257874 476.173889) 6807 POINT(476.814117 592.431885) 6808 POINT(966.294373 286.90509) 6809 POINT(417.283905 988.356445) 6810 POINT(510.979584 397.552277) 6811 POINT(395.360535 29.7191753) 6812 POINT(49.5314369 740.710999) 6813 POINT(459.574036 84.6597748) 6814 POINT(270.706055 909.454956) 6815 POINT(400.809753 532.48584) 6816 POINT(566.179932 611.430298) 6817 POINT(215.599136 978.74707) 6818 POINT(448.579956 378.224915) 6819 POINT(700.41156 119.779343) 6820 POINT(556.114685 206.954361) 6821 POINT(558.834167 809.984619) 6822 POINT(471.918884 84.9074097) 6823 POINT(436.259583 826.154114) 6824 POINT(822.110168 229.963425) 6825 POINT(942.047302 7.41360712) 6826 POINT(957.73291 956.24939) 6827 POINT(450.708038 2.8381145) 6828 POINT(203.671356 73.6846771) 6829 POINT(93.2500458 673.058838) 6830 POINT(856.819458 769.828857) 6831 POINT(237.294907 174.487747) 6832 POINT(223.999878 761.595337) 6833 POINT(117.932343 77.9702759) 6834 POINT(348.145813 792.328369) 6835 POINT(406.668823 226.220383) 6836 POINT(223.041031 76.511055) 6837 POINT(7.49155331 870.393127) 6838 POINT(239.530029 240.632492) 6839 POINT(439.401367 415.3396) 6840 POINT(39.7532272 495.78952) 6841 POINT(824.271423 580.814209) 6842 POINT(533.953491 917.341553) 6843 POINT(846.198547 203.144897) 6844 POINT(413.185333 651.917969) 6845 POINT(510.385132 275.232697) 6846 POINT(380.407135 865.459045) 6847 POINT(110.908318 184.444595) 6848 POINT(534.643738 171.542572) 6849 POINT(350.504211 755.856689) 6850 POINT(843.994812 911.42395) 6851 POINT(952.853088 455.866425) 6852 POINT(602.176025 911.036438) 6853 POINT(608.053162 537.526489) 6854 POINT(802.086243 521.322754) 6855 POINT(512.400696 608.787781) 6856 POINT(803.792969 802.992493) 6857 POINT(749.757324 938.519043) 6858 POINT(801.633606 482.030853) 6859 POINT(37.3178406 158.683517) 6860 POINT(887.296875 755.565918) 6861 POINT(975.248962 15.9882364) 6862 POINT(897.335754 537.196655) 6863 POINT(527.334534 629.915955) 6864 POINT(362.278351 305.380829) 6865 POINT(476.445251 749.14801) 6866 POINT(331.153412 257.395569) 6867 POINT(580.48053 703.468384) 6868 POINT(423.790375 14.7535086) 6869 POINT(965.668701 827.406128) 6870 POINT(410.751068 104.444984) 6871 POINT(377.136963 804.849792) 6872 POINT(887.401917 925.275391) 6873 POINT(531.988892 636.00885) 6874 POINT(97.7587967 861.786987) 6875 POINT(336.379517 260.375061) 6876 POINT(781.781006 732.336304) 6877 POINT(812.022095 548.357544) 6878 POINT(626.320618 346.006897) 6879 POINT(484.072937 682.251892) 6880 POINT(757.650452 728.959045) 6881 POINT(794.433167 432.010498) 6882 POINT(938.213562 588.97229) 6883 POINT(983.308472 556.381592) 6884 POINT(140.905746 982.353699) 6885 POINT(316.642029 354.484283) 6886 POINT(842.894226 485.739838) 6887 POINT(595.158875 101.507744) 6888 POINT(282.879547 652.891663) 6889 POINT(457.744537 835.320435) 6890 POINT(589.147705 240.291718) 6891 POINT(61.3594513 344.323639) 6892 POINT(842.183472 842.735168) 6893 POINT(583.415527 632.485779) 6894 POINT(969.586182 809.327454) 6895 POINT(530.404846 12.3754053) 6896 POINT(770.251099 870.150757) 6897 POINT(756.570251 974.024658) 6898 POINT(170.063599 943.751282) 6899 POINT(184.68512 285.074524) 6900 POINT(66.6543198 405.570496) 6901 POINT(591.816467 349.985107) 6902 POINT(323.142883 358.158508) 6903 POINT(168.667267 662.860291) 6904 POINT(820.457275 476.757538) 6905 POINT(402.23999 464.989502) 6906 POINT(128.073669 20.5397282) 6907 POINT(766.76123 215.528656) 6908 POINT(660.320557 952.968201) 6909 POINT(663.821472 718.425476) 6910 POINT(959.307739 547.583679) 6911 POINT(534.391785 252.971283) 6912 POINT(498.761017 751.794556) 6913 POINT(405.791718 627.081116) 6914 POINT(601.399963 215.37645) 6915 POINT(746.93103 25.0444431) 6916 POINT(374.919678 677.408875) 6917 POINT(124.490784 934.1521) 6918 POINT(120.213539 150.955734) 6919 POINT(98.5291672 402.014496) 6920 POINT(275.384583 495.220917) 6921 POINT(213.802399 758.899353) 6922 POINT(408.667206 857.095642) 6923 POINT(56.5127869 613.002991) 6924 POINT(44.0611649 575.49884) 6925 POINT(706.99469 32.8369179) 6926 POINT(629.834106 340.859619) 6927 POINT(656.904846 27.0809364) 6928 POINT(879.777649 197.291458) 6929 POINT(332.80542 641.18219) 6930 POINT(121.020683 765.874023) 6931 POINT(812.75116 650.138672) 6932 POINT(464.25885 394.031586) 6933 POINT(502.866943 142.401489) 6934 POINT(319.52594 728.939087) 6935 POINT(399.322723 480.384003) 6936 POINT(463.296295 43.4864464) 6937 POINT(868.075562 674.036133) 6938 POINT(924.099915 973.507446) 6939 POINT(478.894501 116.297905) 6940 POINT(0.388948977 757.262207) 6941 POINT(508.266388 669.594849) 6942 POINT(815.691956 595.725281) 6943 POINT(32.6857948 43.1037292) 6944 POINT(714.82312 8.85755444) 6945 POINT(652.562866 309.150604) 6946 POINT(226.899643 573.143616) 6947 POINT(478.678528 837.282532) 6948 POINT(185.10585 854.301331) 6949 POINT(67.0286407 205.382187) 6950 POINT(271.597626 751.874451) 6951 POINT(71.413681 123.39325) 6952 POINT(823.861511 545.696655) 6953 POINT(891.756653 687.150208) 6954 POINT(224.549377 264.876038) 6955 POINT(3.49831581 493.433746) 6956 POINT(831.746704 315.535492) 6957 POINT(761.287964 184.30127) 6958 POINT(875.371338 722.220337) 6959 POINT(658.438904 756.204346) 6960 POINT(435.633453 618.433777) 6961 POINT(500.26123 640.243774) 6962 POINT(872.042358 413.606323) 6963 POINT(0.549171865 822.61322) 6964 POINT(430.256104 156.979065) 6965 POINT(550.451477 582.941772) 6966 POINT(216.220047 194.047928) 6967 POINT(530.063171 252.58812) 6968 POINT(992.71344 89.6697922) 6969 POINT(555.863892 470.32373) 6970 POINT(975.945801 685.580933) 6971 POINT(580.218323 990.237244) 6972 POINT(845.661621 921.464783) 6973 POINT(209.3069 192.704926) 6974 POINT(840.891846 920.994324) 6975 POINT(987.954346 96.1266785) 6976 POINT(107.729233 711.251404) 6977 POINT(546.877014 162.67453) 6978 POINT(361.122986 580.00824) 6979 POINT(331.008118 349.020325) 6980 POINT(588.632385 395.578979) 6981 POINT(366.044189 251.998856) 6982 POINT(582.415771 523.983704) 6983 POINT(991.566467 434.152863) 6984 POINT(861.660522 224.293259) 6985 POINT(338.535645 945.444458) 6986 POINT(319.499329 422.162567) 6987 POINT(280.2724 61.0847931) 6988 POINT(177.651382 531.247559) 6989 POINT(690.973755 473.026459) 6990 POINT(493.151154 880.602173) 6991 POINT(734.262573 761.413513) 6992 POINT(172.26741 322.054199) 6993 POINT(34.2307014 355.038239) 6994 POINT(797.902466 634.381104) 6995 POINT(489.046844 305.092072) 6996 POINT(362.332123 450.879303) 6997 POINT(36.7210541 748.321594) 6998 POINT(464.177094 44.3183632) 6999 POINT(316.423218 643.833069) 7000 POINT(627.178955 479.573975) 7001 POINT(157.360855 217.586105) 7002 POINT(32.0090179 351.360474) 7003 POINT(519.255249 41.0522881) 7004 POINT(227.412445 664.972168) 7005 POINT(580.680054 72.1902161) 7006 POINT(863.05365 884.957153) 7007 POINT(378.820312 580.033081) 7008 POINT(426.174316 903.976257) 7009 POINT(829.58252 206.64595) 7010 POINT(583.427979 696.158447) 7011 POINT(261.571838 555.468384) 7012 POINT(446.955353 881.089661) 7013 POINT(270.505768 462.212524) 7014 POINT(771.985718 891.831421) 7015 POINT(809.53894 348.265045) 7016 POINT(327.18631 109.344521) 7017 POINT(871.24054 887.294495) 7018 POINT(986.952942 283.307892) 7019 POINT(862.222534 259.470856) 7020 POINT(208.288651 33.1128311) 7021 POINT(123.427895 915.962219) 7022 POINT(658.421082 830.93927) 7023 POINT(887.727478 436.411285) 7024 POINT(740.559998 870.076782) 7025 POINT(999.759888 406.763916) 7026 POINT(465.013733 765.448425) 7027 POINT(737.004456 462.59967) 7028 POINT(575.214783 409.674438) 7029 POINT(180.166412 688.09967) 7030 POINT(560.113892 197.632111) 7031 POINT(477.45755 402.711517) 7032 POINT(366.096405 556.625732) 7033 POINT(551.780518 241.780258) 7034 POINT(416.359406 489.882629) 7035 POINT(910.80658 94.889122) 7036 POINT(310.021637 10.681571) 7037 POINT(164.230438 422.994354) 7038 POINT(116.684258 656.160278) 7039 POINT(134.975433 264.870514) 7040 POINT(17.4136715 107.530396) 7041 POINT(404.815674 662.75946) 7042 POINT(636.002869 581.462769) 7043 POINT(170.911926 599.912354) 7044 POINT(423.826324 510.832703) 7045 POINT(147.381699 928.033813) 7046 POINT(29.7065201 907.502319) 7047 POINT(242.625351 265.203339) 7048 POINT(528.155701 141.645432) 7049 POINT(24.2156982 825.017761) 7050 POINT(473.459656 18.2141209) 7051 POINT(772.362793 471.441528) 7052 POINT(974.782227 459.035889) 7053 POINT(772.043823 622.774658) 7054 POINT(783.355713 676.884521) 7055 POINT(532.726746 609.474609) 7056 POINT(884.58075 964.474426) 7057 POINT(811.218079 647.15271) 7058 POINT(386.31073 516.101868) 7059 POINT(683.669922 156.380142) 7060 POINT(883.681519 592.633972) 7061 POINT(831.438538 949.092041) 7062 POINT(707.644958 762.395996) 7063 POINT(614.686157 27.0876865) 7064 POINT(979.060486 472.513611) 7065 POINT(177.865219 886.750244) 7066 POINT(596.121704 289.346741) 7067 POINT(611.147827 296.623138) 7068 POINT(786.483337 395.342957) 7069 POINT(258.230347 277.484192) 7070 POINT(716.284058 336.10675) 7071 POINT(368.625641 250.280182) 7072 POINT(629.020752 209.511856) 7073 POINT(24.5713158 73.5752335) 7074 POINT(803.749146 2.69650197) 7075 POINT(290.156067 532.502014) 7076 POINT(193.300522 277.810547) 7077 POINT(822.460693 94.6876221) 7078 POINT(301.191406 939.094421) 7079 POINT(318.807831 759.9823) 7080 POINT(755.855774 78.5536041) 7081 POINT(546.11908 210.401016) 7082 POINT(171.065323 482.059387) 7083 POINT(781.528931 340.470367) 7084 POINT(473.37381 9.69992065) 7085 POINT(89.5528488 507.759949) 7086 POINT(615.689331 861.785522) 7087 POINT(350.140381 395.993805) 7088 POINT(868.346558 463.870728) 7089 POINT(541.868103 401.634186) 7090 POINT(26.1324902 999.905212) 7091 POINT(761.474548 627.686218) 7092 POINT(435.567169 282.206116) 7093 POINT(439.168915 349.786011) 7094 POINT(728.415405 851.018372) 7095 POINT(381.039764 679.136169) 7096 POINT(245.11499 766.289673) 7097 POINT(655.955994 819.891296) 7098 POINT(998.858459 201.841354) 7099 POINT(43.2240791 56.1482315) 7100 POINT(523.913696 529.910522) 7101 POINT(195.700241 422.363953) 7102 POINT(379.979675 335.233093) 7103 POINT(855.93634 943.036011) 7104 POINT(460.644989 606.220032) 7105 POINT(223.27298 670.683289) 7106 POINT(544.164246 990.768555) 7107 POINT(818.712708 319.040497) 7108 POINT(897.744446 390.88028) 7109 POINT(171.172104 660.027161) 7110 POINT(824.400574 609.195679) 7111 POINT(170.70192 623.19635) 7112 POINT(149.401413 198.090866) 7113 POINT(646.992371 65.3640442) 7114 POINT(59.6949043 935.024414) 7115 POINT(358.573975 841.943787) 7116 POINT(915.930786 433.91806) 7117 POINT(171.344528 251.758774) 7118 POINT(587.34906 669.661621) 7119 POINT(394.28064 301.0112) 7120 POINT(152.578796 650.141296) 7121 POINT(483.436859 962.499634) 7122 POINT(55.1055222 16.919054) 7123 POINT(158.727936 631.568542) 7124 POINT(794.771851 31.8696556) 7125 POINT(265.789856 4.7542243) 7126 POINT(223.233673 643.385864) 7127 POINT(899.804993 350.381012) 7128 POINT(442.010437 193.470947) 7129 POINT(660.062805 587.813965) 7130 POINT(79.9528732 788.070984) 7131 POINT(771.844971 244.665802) 7132 POINT(459.058319 509.894318) 7133 POINT(872.728882 485.589203) 7134 POINT(403.156769 998.885437) 7135 POINT(768.477844 284.583771) 7136 POINT(465.769531 594.257141) 7137 POINT(502.343262 992.867249) 7138 POINT(367.224365 247.9478) 7139 POINT(811.966492 99.7730484) 7140 POINT(855.843628 947.605164) 7141 POINT(959.40625 723.94812) 7142 POINT(915.773926 983.360474) 7143 POINT(79.5017776 151.058975) 7144 POINT(809.993286 253.044815) 7145 POINT(495.331421 662.624023) 7146 POINT(399.53537 12.0190382) 7147 POINT(870.563293 604.4505) 7148 POINT(250.454056 263.985107) 7149 POINT(908.786987 514.070129) 7150 POINT(413.087402 976.180054) 7151 POINT(449.337128 571.76062) 7152 POINT(321.461823 745.015381) 7153 POINT(955.685242 332.066193) 7154 POINT(855.026489 585.927124) 7155 POINT(332.313416 820.664429) 7156 POINT(274.268585 463.985321) 7157 POINT(853.354736 599.068787) 7158 POINT(983.204407 700.339844) 7159 POINT(433.569855 276.734985) 7160 POINT(85.462059 805.140991) 7161 POINT(39.9349327 422.007965) 7162 POINT(639.991394 812.082581) 7163 POINT(328.880432 640.973877) 7164 POINT(743.800415 175.711716) 7165 POINT(526.793701 273.280945) 7166 POINT(882.092834 483.296478) 7167 POINT(654.670532 228.579971) 7168 POINT(903.469116 12.1299438) 7169 POINT(764.774109 754.268616) 7170 POINT(965.267334 805.0896) 7171 POINT(318.973419 698.176392) 7172 POINT(520.610718 857.106201) 7173 POINT(934.334656 187.802444) 7174 POINT(6.36405182 8.58619118) 7175 POINT(768.925537 685.441895) 7176 POINT(165.175659 675.070374) 7177 POINT(965.156555 456.359375) 7178 POINT(673.418579 942.408936) 7179 POINT(32.9699974 481.070068) 7180 POINT(931.58606 301.028931) 7181 POINT(392.547119 394.365601) 7182 POINT(939.115112 249.632904) 7183 POINT(635.822327 800.206177) 7184 POINT(259.40036 676.677551) 7185 POINT(365.978851 215.840714) 7186 POINT(273.745087 726.663208) 7187 POINT(770.383484 378.987183) 7188 POINT(519.111389 317.647369) 7189 POINT(739.358459 912.71521) 7190 POINT(650.861267 527.152893) 7191 POINT(303.168976 603.538391) 7192 POINT(918.407471 277.051483) 7193 POINT(193.131302 294.5065) 7194 POINT(392.146851 585.992004) 7195 POINT(288.455627 627.756042) 7196 POINT(140.668579 723.039062) 7197 POINT(765.08136 356.639679) 7198 POINT(187.590225 881.561707) 7199 POINT(671.230164 468.431122) 7200 POINT(140.167984 131.851166) 7201 POINT(999.697205 962.550842) 7202 POINT(592.875366 928.86261) 7203 POINT(770.15625 379.74762) 7204 POINT(687.392944 12.9138947) 7205 POINT(165.230621 403.812805) 7206 POINT(927.968811 201.789886) 7207 POINT(949.160583 403.913849) 7208 POINT(583.093994 28.7914696) 7209 POINT(633.082764 262.873993) 7210 POINT(779.203857 19.7419453) 7211 POINT(609.8703 370.662445) 7212 POINT(941.118408 350.362244) 7213 POINT(565.911133 144.603119) 7214 POINT(241.734055 801.913391) 7215 POINT(267.016754 775.581482) 7216 POINT(577.777405 96.369133) 7217 POINT(518.857971 265.684082) 7218 POINT(630.046814 492.037262) 7219 POINT(5.05495596 905.714966) 7220 POINT(339.442841 746.535156) 7221 POINT(422.557617 595.006653) 7222 POINT(631.299622 387.005554) 7223 POINT(56.6287994 300.598328) 7224 POINT(150.264587 488.723877) 7225 POINT(687.090698 223.550171) 7226 POINT(779.560974 564.710815) 7227 POINT(592.146606 137.870758) 7228 POINT(668.344299 563.163208) 7229 POINT(842.807556 908.859497) 7230 POINT(688.608582 599.616211) 7231 POINT(64.6133728 414.832703) 7232 POINT(701.397461 800.541077) 7233 POINT(216.954178 287.063171) 7234 POINT(696.757996 278.975037) 7235 POINT(614.999695 860.793335) 7236 POINT(951.880127 715.819458) 7237 POINT(634.289185 74.48629) 7238 POINT(449.264282 588.284668) 7239 POINT(110.808884 359.779907) 7240 POINT(236.752975 715.902344) 7241 POINT(25.3901863 691.261169) 7242 POINT(472.161072 321.474823) 7243 POINT(364.138702 289.156738) 7244 POINT(58.4996223 206.833939) 7245 POINT(128.10466 130.94133) 7246 POINT(975.970093 289.492554) 7247 POINT(955.414368 586.92865) 7248 POINT(291.712158 644.989746) 7249 POINT(175.608093 572.975159) 7250 POINT(968.535767 250.362518) 7251 POINT(875.104431 548.980042) 7252 POINT(793.501953 866.764832) 7253 POINT(578.790833 188.997803) 7254 POINT(253.309479 364.462769) 7255 POINT(888.113159 327.227539) 7256 POINT(946.189392 352.55072) 7257 POINT(131.202072 829.250977) 7258 POINT(42.7273445 190.672562) 7259 POINT(124.175255 850.640076) 7260 POINT(497.170166 433.333008) 7261 POINT(191.537842 792.042053) 7262 POINT(725.89801 982.211121) 7263 POINT(902.46283 423.308136) 7264 POINT(573.553894 832.029175) 7265 POINT(631.666931 677.004944) 7266 POINT(795.634705 315.401459) 7267 POINT(209.745895 567.218628) 7268 POINT(418.112518 346.726593) 7269 POINT(77.4476318 402.028717) 7270 POINT(61.9376869 890.25647) 7271 POINT(568.832336 772.120422) 7272 POINT(218.274338 929.269348) 7273 POINT(115.094353 824.06781) 7274 POINT(57.3533249 678.699646) 7275 POINT(257.643524 690.840332) 7276 POINT(381.343109 890.180786) 7277 POINT(687.613098 45.6535339) 7278 POINT(974.205688 464.395782) 7279 POINT(969.167786 975.637207) 7280 POINT(746.817627 469.699036) 7281 POINT(863.8302 411.77475) 7282 POINT(564.517639 217.581543) 7283 POINT(38.6633873 389.657684) 7284 POINT(520.632141 554.740601) 7285 POINT(526.799194 405.899048) 7286 POINT(180.508316 678.950439) 7287 POINT(306.868286 47.2836685) 7288 POINT(166.333649 892.897522) 7289 POINT(298.875092 139.256668) 7290 POINT(536.874268 988.55957) 7291 POINT(536.60498 638.139038) 7292 POINT(94.6573868 757.111084) 7293 POINT(197.507614 894.110718) 7294 POINT(835.631653 188.890228) 7295 POINT(55.052475 271.748016) 7296 POINT(755.656555 648.455505) 7297 POINT(98.8080902 229.589645) 7298 POINT(610.117798 955.609253) 7299 POINT(955.089722 143.316238) 7300 POINT(656.488525 289.503082) 7301 POINT(75.2058487 487.758606) 7302 POINT(16.8199329 965.240356) 7303 POINT(756.497925 565.830078) 7304 POINT(903.154541 857.03241) 7305 POINT(69.016449 147.958313) 7306 POINT(332.019745 895.870605) 7307 POINT(901.441956 39.648056) 7308 POINT(95.9349594 130.379044) 7309 POINT(165.501892 369.041687) 7310 POINT(94.8129044 175.179337) 7311 POINT(838.533752 937.983521) 7312 POINT(795.95874 990.518005) 7313 POINT(937.011108 231.989838) 7314 POINT(678.882141 239.493088) 7315 POINT(735.913757 75.1552963) 7316 POINT(324.288727 495.006622) 7317 POINT(944.046387 649.49054) 7318 POINT(72.4738007 248.232117) 7319 POINT(56.1683769 894.208313) 7320 POINT(355.102966 575.204041) 7321 POINT(499.610077 644.414368) 7322 POINT(299.347473 910.029358) 7323 POINT(324.535706 261.484436) 7324 POINT(620.993774 254.725174) 7325 POINT(229.942596 715.72467) 7326 POINT(223.038681 319.966431) 7327 POINT(426.733093 887.949097) 7328 POINT(61.1052818 171.872528) 7329 POINT(797.771057 308.20874) 7330 POINT(442.595428 481.785126) 7331 POINT(683.873901 210.555573) 7332 POINT(911.772583 103.832291) 7333 POINT(393.446503 981.521179) 7334 POINT(610.018616 494.597382) 7335 POINT(769.323303 161.657043) 7336 POINT(564.522583 136.70665) 7337 POINT(244.853668 734.378723) 7338 POINT(777.958374 220.530273) 7339 POINT(255.97554 630.451111) 7340 POINT(497.741638 102.995819) 7341 POINT(448.737091 81.3506012) 7342 POINT(320.786163 617.907043) 7343 POINT(212.318359 577.669556) 7344 POINT(226.009735 916.930847) 7345 POINT(884.093445 902.537537) 7346 POINT(562.986267 823.978577) 7347 POINT(801.783081 703.201538) 7348 POINT(5.04712915 478.098328) 7349 POINT(832.539124 790.536133) 7350 POINT(495.876678 501.885345) 7351 POINT(282.260803 286.065857) 7352 POINT(980.414368 885.086121) 7353 POINT(201.06868 604.43512) 7354 POINT(866.99292 928.441345) 7355 POINT(151.299393 317.124207) 7356 POINT(574.551514 803.419739) 7357 POINT(919.379028 207.192764) 7358 POINT(486.036926 792.498535) 7359 POINT(437.37735 327.15332) 7360 POINT(169.438416 965.846497) 7361 POINT(166.940628 910.595947) 7362 POINT(807.113953 698.061829) 7363 POINT(298.784576 376.371735) 7364 POINT(561.102844 948.064697) 7365 POINT(574.255432 981.102539) 7366 POINT(719.050842 921.990845) 7367 POINT(159.021942 516.241882) 7368 POINT(237.39798 559.283813) 7369 POINT(438.249542 670.220886) 7370 POINT(3.90880728 63.0363998) 7371 POINT(581.265442 660.346252) 7372 POINT(261.917908 414.540833) 7373 POINT(293.505341 624.681885) 7374 POINT(108.374962 837.126648) 7375 POINT(964.322266 208.36203) 7376 POINT(434.612427 514.486267) 7377 POINT(889.046631 204.509201) 7378 POINT(713.536804 423.228668) 7379 POINT(928.639709 955.635315) 7380 POINT(443.610352 948.394104) 7381 POINT(734.647522 191.197632) 7382 POINT(85.6135178 444.778442) 7383 POINT(953.31134 790.582947) 7384 POINT(922.954163 157.436859) 7385 POINT(901.143921 603.557434) 7386 POINT(343.539703 883.583252) 7387 POINT(423.655273 433.126129) 7388 POINT(687.394836 547.807495) 7389 POINT(685.984131 855.387878) 7390 POINT(588.865784 966.267517) 7391 POINT(753.825317 999.586975) 7392 POINT(928.090576 627.058899) 7393 POINT(88.2630463 286.991302) 7394 POINT(309.261292 337.744629) 7395 POINT(660.046326 492.954681) 7396 POINT(821.999146 252.069427) 7397 POINT(776.741943 181.643631) 7398 POINT(588.975952 641.863098) 7399 POINT(977.448303 412.156799) 7400 POINT(832.948425 23.334034) 7401 POINT(379.864227 738.486328) 7402 POINT(437.935333 966.28833) 7403 POINT(637.107788 549.944763) 7404 POINT(963.814636 337.817871) 7405 POINT(478.534332 114.907974) 7406 POINT(985.716858 476.846588) 7407 POINT(549.786133 706.231445) 7408 POINT(356.933685 121.399124) 7409 POINT(640.436401 574.334473) 7410 POINT(377.473206 965.969849) 7411 POINT(178.98851 482.194763) 7412 POINT(933.816956 801.966858) 7413 POINT(198.92514 979.44873) 7414 POINT(955.939575 970.546875) 7415 POINT(528.34967 540.187012) 7416 POINT(215.435928 655.528625) 7417 POINT(250.030579 356.211945) 7418 POINT(716.982849 576.397705) 7419 POINT(116.985123 715.467224) 7420 POINT(70.788147 260.221283) 7421 POINT(517.876221 20.660717) 7422 POINT(85.719162 19.753315) 7423 POINT(271.329651 147.999542) 7424 POINT(904.15033 426.908417) 7425 POINT(321.816467 808.305054) 7426 POINT(776.049255 720.537781) 7427 POINT(723.117859 166.038101) 7428 POINT(710.370789 640.085999) 7429 POINT(867.859192 275.054413) 7430 POINT(868.528259 437.912018) 7431 POINT(70.5435181 997.94458) 7432 POINT(502.747681 739.107178) 7433 POINT(482.444794 348.950439) 7434 POINT(269.809357 825.453735) 7435 POINT(133.268936 514.661438) 7436 POINT(849.48645 297.276398) 7437 POINT(208.413193 803.586426) 7438 POINT(401.470154 781.512451) 7439 POINT(611.835999 112.49118) 7440 POINT(642.423462 915.152039) 7441 POINT(390.99585 96.9453354) 7442 POINT(306.850525 639.690796) 7443 POINT(748.16571 534.306519) 7444 POINT(765.648926 434.435547) 7445 POINT(495.929657 573.489075) 7446 POINT(361.601654 425.070068) 7447 POINT(876.214539 897.045959) 7448 POINT(31.858036 900.11438) 7449 POINT(422.295685 762.684875) 7450 POINT(426.965973 113.708908) 7451 POINT(850.488647 444.322601) 7452 POINT(610.703491 951.065125) 7453 POINT(999.445129 523.754028) 7454 POINT(594.377991 76.1113205) 7455 POINT(345.000946 575.203125) 7456 POINT(186.118423 203.112076) 7457 POINT(190.38121 84.2819138) 7458 POINT(635.796753 659.771301) 7459 POINT(926.386902 513.688721) 7460 POINT(248.524307 103.575714) 7461 POINT(763.224243 599.427795) 7462 POINT(896.250122 171.567535) 7463 POINT(622.280273 578.157593) 7464 POINT(253.033295 682.634583) 7465 POINT(837.89563 718.826477) 7466 POINT(643.392578 357.694977) 7467 POINT(429.680725 386.003998) 7468 POINT(856.19989 604.363098) 7469 POINT(766.912659 789.873779) 7470 POINT(823.446716 846.983521) 7471 POINT(837.928345 485.936646) 7472 POINT(81.5724182 929.096924) 7473 POINT(267.195221 748.940186) 7474 POINT(763.722107 922.869385) 7475 POINT(977.034424 848.874634) 7476 POINT(58.2392502 38.8166618) 7477 POINT(584.042847 456.158417) 7478 POINT(608.970764 419.947632) 7479 POINT(444.499023 368.106567) 7480 POINT(926.761658 248.52919) 7481 POINT(738.948547 214.782486) 7482 POINT(182.164352 502.949097) 7483 POINT(212.378845 20.3545132) 7484 POINT(613.328613 729.166199) 7485 POINT(589.672668 482.716644) 7486 POINT(519.843262 579.148926) 7487 POINT(271.253021 621.611145) 7488 POINT(435.665009 501.307037) 7489 POINT(514.010071 331.665009) 7490 POINT(548.012207 619.627258) 7491 POINT(828.865845 175.095261) 7492 POINT(923.171204 424.073242) 7493 POINT(17.9387722 38.4538116) 7494 POINT(236.624573 720.468262) 7495 POINT(948.608521 653.397156) 7496 POINT(808.964478 299.830536) 7497 POINT(464.348694 303.429749) 7498 POINT(99.0194244 821.895752) 7499 POINT(486.635956 682.861694) 7500 POINT(882.940857 442.873444) 7501 POINT(420.305481 982.439575) 7502 POINT(87.2449188 121.509453) 7503 POINT(66.2956772 5.48414993) 7504 POINT(282.669891 319.05661) 7505 POINT(828.812378 891.747864) 7506 POINT(775.022339 867.198792) 7507 POINT(614.680176 782.069641) 7508 POINT(842.880005 153.375931) 7509 POINT(325.291199 199.350555) 7510 POINT(217.175079 895.976257) 7511 POINT(678.496155 770.134155) 7512 POINT(324.488617 723.79187) 7513 POINT(539.51123 151.495071) 7514 POINT(27.6675415 496.885162) 7515 POINT(335.077087 161.001602) 7516 POINT(700.574524 912.12616) 7517 POINT(150.452667 399.817444) 7518 POINT(27.9688225 919.302002) 7519 POINT(19.248354 392.777588) 7520 POINT(189.387939 966.652039) 7521 POINT(794.598755 992.359985) 7522 POINT(283.276794 122.366585) 7523 POINT(997.886902 569.3573) 7524 POINT(393.436035 846.038208) 7525 POINT(667.409058 170.833618) 7526 POINT(466.208069 166.937973) 7527 POINT(541.400452 210.352142) 7528 POINT(728.880005 460.593811) 7529 POINT(803.233704 476.841492) 7530 POINT(265.880249 988.387756) 7531 POINT(64.9835815 932.794678) 7532 POINT(310.922638 104.30323) 7533 POINT(570.686707 311.380646) 7534 POINT(994.882202 156.706635) 7535 POINT(642.391724 322.710144) 7536 POINT(598.561584 879.926208) 7537 POINT(878.503296 14.79181) 7538 POINT(637.449646 629.81427) 7539 POINT(331.105743 693.117615) 7540 POINT(396.030029 459.479828) 7541 POINT(951.165955 738.42749) 7542 POINT(329.232666 436.626038) 7543 POINT(690.143799 644.75116) 7544 POINT(258.438965 93.7066727) 7545 POINT(304.088898 864.660889) 7546 POINT(662.362244 688.345093) 7547 POINT(720.408691 346.767792) 7548 POINT(955.58374 386.672852) 7549 POINT(724.911377 498.459564) 7550 POINT(269.094086 309.611694) 7551 POINT(212.343201 236.936066) 7552 POINT(410.570343 985.429138) 7553 POINT(650.455933 601.598999) 7554 POINT(853.126892 405.555573) 7555 POINT(146.797546 404.27478) 7556 POINT(448.863831 999.706787) 7557 POINT(318.166443 669.693542) 7558 POINT(209.763489 236.46228) 7559 POINT(362.396118 261.83844) 7560 POINT(768.555908 662.909363) 7561 POINT(466.348755 462.573029) 7562 POINT(804.40387 358.677032) 7563 POINT(176.324066 243.322876) 7564 POINT(774.093567 473.200195) 7565 POINT(159.293915 190.134888) 7566 POINT(163.428177 608.534912) 7567 POINT(25.3366585 164.390121) 7568 POINT(303.407532 812.274902) 7569 POINT(521.37207 728.654053) 7570 POINT(672.349243 255.519653) 7571 POINT(479.92691 578.089417) 7572 POINT(822.322693 829.447083) 7573 POINT(778.443542 896.633484) 7574 POINT(373.184326 831.517151) 7575 POINT(176.970291 923.476562) 7576 POINT(360.329071 199.964554) 7577 POINT(25.4399719 554.630432) 7578 POINT(6.31511974 854.944763) 7579 POINT(314.798035 517.511414) 7580 POINT(318.237549 219.01178) 7581 POINT(565.727905 310.09436) 7582 POINT(851.677002 911.700806) 7583 POINT(359.533051 472.538818) 7584 POINT(290.938477 576.644958) 7585 POINT(500.873749 906.104858) 7586 POINT(889.937134 329.292358) 7587 POINT(522.655579 435.136566) 7588 POINT(217.428299 73.9432297) 7589 POINT(488.687592 951.999268) 7590 POINT(426.392822 986.165039) 7591 POINT(387.148438 636.83783) 7592 POINT(495.463165 486.949738) 7593 POINT(232.930313 514.229919) 7594 POINT(598.640503 635.170715) 7595 POINT(783.204651 123.215309) 7596 POINT(179.645004 762.515564) 7597 POINT(319.827728 227.395599) 7598 POINT(123.63723 488.27417) 7599 POINT(644.36261 185.037872) 7600 POINT(19.4397335 738.947449) 7601 POINT(474.541534 8.23919868) 7602 POINT(230.595856 709.014038) 7603 POINT(111.067482 953.689453) 7604 POINT(887.573792 624.400391) 7605 POINT(175.006027 159.509018) 7606 POINT(973.22644 889.896362) 7607 POINT(591.039612 842.764771) 7608 POINT(99.4492569 537.244995) 7609 POINT(831.046631 635.930237) 7610 POINT(18.1556225 553.814209) 7611 POINT(834.464111 18.7342339) 7612 POINT(230.66423 515.177734) 7613 POINT(413.454346 511.135468) 7614 POINT(565.926575 211.75029) 7615 POINT(336.897919 365.795868) 7616 POINT(302.419617 533.63269) 7617 POINT(500.698181 232.255219) 7618 POINT(276.80307 533.433533) 7619 POINT(543.924683 473.509918) 7620 POINT(623.539307 239.091431) 7621 POINT(200.214859 77.9696274) 7622 POINT(945.669983 743.285156) 7623 POINT(398.968781 20.5370865) 7624 POINT(153.025894 299.176666) 7625 POINT(296.723724 346.175842) 7626 POINT(198.644547 440.903595) 7627 POINT(749.314697 553.77887) 7628 POINT(978.519104 498.955505) 7629 POINT(281.771942 189.025391) 7630 POINT(668.581421 663.500793) 7631 POINT(5.25876093 69.4443359) 7632 POINT(393.720093 971.665588) 7633 POINT(626.723267 685.938721) 7634 POINT(947.476562 157.118195) 7635 POINT(233.454788 991.044922) 7636 POINT(101.789375 242.117722) 7637 POINT(775.661133 699.304993) 7638 POINT(110.843788 504.113708) 7639 POINT(557.89679 109.044655) 7640 POINT(271.921661 82.3174744) 7641 POINT(855.184937 292.927155) 7642 POINT(762.458801 966.324524) 7643 POINT(340.61557 797.870605) 7644 POINT(532.746765 531.386292) 7645 POINT(24.8362598 9.87300205) 7646 POINT(357.436096 646.476074) 7647 POINT(119.047607 358.213928) 7648 POINT(498.89978 815.653259) 7649 POINT(724.89917 104.246246) 7650 POINT(27.4240742 844.820618) 7651 POINT(688.169617 646.029297) 7652 POINT(96.0510025 319.826477) 7653 POINT(817.576538 900.491028) 7654 POINT(253.773727 293.652863) 7655 POINT(32.8721046 244.366974) 7656 POINT(774.878784 206.442734) 7657 POINT(763.053406 814.196777) 7658 POINT(512.857361 289.264526) 7659 POINT(39.681057 310.147522) 7660 POINT(685.916565 758.332947) 7661 POINT(523.713867 209.97023) 7662 POINT(452.283264 609.064148) 7663 POINT(46.8168602 885.216797) 7664 POINT(24.8982182 27.6298485) 7665 POINT(847.788147 194.794724) 7666 POINT(247.573715 501.00119) 7667 POINT(327.714874 899.494873) 7668 POINT(52.1735115 914.884155) 7669 POINT(947.962708 649.396729) 7670 POINT(535.9422 963.098877) 7671 POINT(545.513123 313.758698) 7672 POINT(739.958069 373.143005) 7673 POINT(360.99527 285.49231) 7674 POINT(727.127991 992.814026) 7675 POINT(64.6461639 850.576477) 7676 POINT(607.630432 34.3854218) 7677 POINT(951.132874 283.38739) 7678 POINT(550.815613 479.105377) 7679 POINT(760.567017 544.13562) 7680 POINT(67.9815292 189.497025) 7681 POINT(603.140991 112.257088) 7682 POINT(415.986145 934.506958) 7683 POINT(629.751526 903.185547) 7684 POINT(526.269348 718.006226) 7685 POINT(140.007217 464.531311) 7686 POINT(529.6203 320.166412) 7687 POINT(69.5223236 826.041443) 7688 POINT(549.125183 260.092804) 7689 POINT(395.893341 846.165039) 7690 POINT(750.490051 803.723145) 7691 POINT(170.863266 532.571411) 7692 POINT(651.804382 650.918762) 7693 POINT(176.664749 256.173615) 7694 POINT(838.348572 408.063507) 7695 POINT(747.276367 685.317993) 7696 POINT(639.969116 396.120941) 7697 POINT(48.3365173 561.664307) 7698 POINT(99.6476288 158.406952) 7699 POINT(108.867889 560.379211) 7700 POINT(986.136047 757.343262) 7701 POINT(508.031189 628.697998) 7702 POINT(427.981567 515.83783) 7703 POINT(783.231384 598.401978) 7704 POINT(421.117767 837.975708) 7705 POINT(112.552673 4.66523838) 7706 POINT(390.777985 597.315186) 7707 POINT(483.330078 917.018311) 7708 POINT(777.231079 911.807007) 7709 POINT(566.4375 964.463623) 7710 POINT(323.324829 925.353333) 7711 POINT(627.461609 398.278412) 7712 POINT(132.741867 121.085449) 7713 POINT(604.352661 30.6137066) 7714 POINT(357.044647 224.983719) 7715 POINT(627.523376 778.11499) 7716 POINT(475.960022 585.522949) 7717 POINT(741.968079 656.55365) 7718 POINT(930.99646 91.2687302) 7719 POINT(979.177612 759.596558) 7720 POINT(432.594574 910.065674) 7721 POINT(614.937134 622.703369) 7722 POINT(613.906555 187.556244) 7723 POINT(911.148926 547.705811) 7724 POINT(81.4239349 56.7937546) 7725 POINT(677.379944 836.49054) 7726 POINT(998.599304 2.82419252) 7727 POINT(980.769897 360.605011) 7728 POINT(521.03125 555.101379) 7729 POINT(489.268646 650.383362) 7730 POINT(21.5194454 95.8808441) 7731 POINT(539.023315 410.82782) 7732 POINT(644.300598 64.3487473) 7733 POINT(686.373596 516.075073) 7734 POINT(307.108612 184.849564) 7735 POINT(430.711517 569.561401) 7736 POINT(527.565125 374.464478) 7737 POINT(996.937073 778.317871) 7738 POINT(40.1173592 402.280975) 7739 POINT(644.017212 428.162445) 7740 POINT(947.742432 32.5185318) 7741 POINT(345.997589 678.505249) 7742 POINT(428.506073 529.399719) 7743 POINT(878.602417 753.273865) 7744 POINT(803.48999 917.07251) 7745 POINT(171.298279 185.953033) 7746 POINT(35.4071732 47.4070282) 7747 POINT(162.525131 395.388336) 7748 POINT(635.356445 247.154633) 7749 POINT(563.967163 103.93103) 7750 POINT(130.692001 399.423859) 7751 POINT(715.635803 555.429688) 7752 POINT(15.1008615 708.995605) 7753 POINT(742.668518 7.84889412) 7754 POINT(741.006104 943.574646) 7755 POINT(230.749039 939.900208) 7756 POINT(305.798462 611.19989) 7757 POINT(671.679321 964.601624) 7758 POINT(261.706207 695.874329) 7759 POINT(623.768433 742.368469) 7760 POINT(182.043991 237.817062) 7761 POINT(341.354858 654.930908) 7762 POINT(334.953949 110.996231) 7763 POINT(90.0754623 577.549561) 7764 POINT(343.512146 858.815979) 7765 POINT(343.704163 474.760986) 7766 POINT(195.289581 829.662354) 7767 POINT(996.875549 463.954559) 7768 POINT(55.3277321 178.754303) 7769 POINT(896.303528 426.818573) 7770 POINT(837.331604 533.311523) 7771 POINT(739.82843 702.063904) 7772 POINT(505.144226 356.974396) 7773 POINT(394.535461 130.448395) 7774 POINT(169.81691 789.865295) 7775 POINT(197.171661 27.2064133) 7776 POINT(479.525146 116.446312) 7777 POINT(905.147034 75.3870163) 7778 POINT(786.016418 48.8241577) 7779 POINT(825.679077 729.799805) 7780 POINT(531.167175 873.416931) 7781 POINT(753.379822 324.359894) 7782 POINT(102.632889 749.593506) 7783 POINT(760.179504 530.33844) 7784 POINT(633.699768 266.313873) 7785 POINT(501.431641 229.717331) 7786 POINT(397.606049 843.849487) 7787 POINT(501.993256 872.487427) 7788 POINT(302.241089 939.892029) 7789 POINT(167.767471 370.927063) 7790 POINT(711.821899 900.921509) 7791 POINT(911.526733 954.871521) 7792 POINT(295.585815 949.398743) 7793 POINT(494.806 842.592773) 7794 POINT(670.542358 364.580963) 7795 POINT(256.398468 260.62146) 7796 POINT(309.845001 689.573608) 7797 POINT(436.764343 226.769287) 7798 POINT(27.4432144 460.290436) 7799 POINT(8.85299873 563.468811) 7800 POINT(523.554016 824.588135) 7801 POINT(809.952759 68.6964111) 7802 POINT(137.465958 713.880676) 7803 POINT(934.851013 390.155609) 7804 POINT(460.70993 297.567749) 7805 POINT(224.568253 441.675964) 7806 POINT(624.263 35.7883759) 7807 POINT(772.10791 701.15271) 7808 POINT(400.894348 132.130722) 7809 POINT(0.0439142361 234.666641) 7810 POINT(223.832855 849.400208) 7811 POINT(455.485168 115.156403) 7812 POINT(484.584167 403.414307) 7813 POINT(755.268921 125.27449) 7814 POINT(158.013824 797.713745) 7815 POINT(415.521606 347.559814) 7816 POINT(736.946838 452.350311) 7817 POINT(760.501282 811.166931) 7818 POINT(419.825043 149.438828) 7819 POINT(949.525269 659.072754) 7820 POINT(464.862549 144.489426) 7821 POINT(939.554199 964.540833) 7822 POINT(37.2133293 143.829041) 7823 POINT(44.5284996 17.8890133) 7824 POINT(869.611816 733.463623) 7825 POINT(618.843628 547.126099) 7826 POINT(722.585205 162.944092) 7827 POINT(317.541931 367.277557) 7828 POINT(261.610504 679.215027) 7829 POINT(734.143372 577.30835) 7830 POINT(312.573456 800.710754) 7831 POINT(930.926453 860.2005) 7832 POINT(963.771118 592.408142) 7833 POINT(226.401321 176.304932) 7834 POINT(55.8079529 610.062439) 7835 POINT(439.333862 173.537323) 7836 POINT(846.514526 328.981873) 7837 POINT(784.728394 736.931519) 7838 POINT(116.031036 552.601624) 7839 POINT(529.551514 46.7205849) 7840 POINT(450.150299 142.586792) 7841 POINT(927.679749 356.346039) 7842 POINT(623.717712 949.644775) 7843 POINT(525.716431 3.06659627) 7844 POINT(819.290283 717.692017) 7845 POINT(653.205017 253.260788) 7846 POINT(231.431198 39.1713524) 7847 POINT(349.750488 806.809204) 7848 POINT(499.155182 852.434998) 7849 POINT(533.15332 750.462646) 7850 POINT(406.465424 80.1143341) 7851 POINT(350.498016 584.822754) 7852 POINT(625.079102 537.827332) 7853 POINT(179.974747 545.084717) 7854 POINT(628.89502 313.592896) 7855 POINT(44.9318466 699.246399) 7856 POINT(674.211792 188.717087) 7857 POINT(471.270508 411.923065) 7858 POINT(253.975021 990.102234) 7859 POINT(350.926025 395.69809) 7860 POINT(242.36496 821.950012) 7861 POINT(782.098511 189.195236) 7862 POINT(44.9023361 102.339317) 7863 POINT(333.47644 971.493958) 7864 POINT(159.142593 48.4576035) 7865 POINT(745.451843 881.486389) 7866 POINT(285.270508 425.25766) 7867 POINT(834.882874 709.264771) 7868 POINT(360.942413 848.541809) 7869 POINT(738.083923 981.233398) 7870 POINT(940.121338 958.108337) 7871 POINT(614.289612 103.587952) 7872 POINT(204.109177 233.414474) 7873 POINT(371.861603 657.946533) 7874 POINT(550.315552 887.638245) 7875 POINT(783.114014 971.729675) 7876 POINT(319.467102 61.0872955) 7877 POINT(760.087036 293.470612) 7878 POINT(417.015808 747.28064) 7879 POINT(390.275391 884.319519) 7880 POINT(684.653381 470.999695) 7881 POINT(223.734787 951.940125) 7882 POINT(161.396301 534.087708) 7883 POINT(984.769104 977.754639) 7884 POINT(322.120148 629.308411) 7885 POINT(404.309967 764.682251) 7886 POINT(929.261475 163.318024) 7887 POINT(863.014526 617.359009) 7888 POINT(918.367737 735.554016) 7889 POINT(458.040619 883.175171) 7890 POINT(351.079254 790.006348) 7891 POINT(494.536896 568.798645) 7892 POINT(703.917358 531.456299) 7893 POINT(120.375175 607.27002) 7894 POINT(865.002686 207.507721) 7895 POINT(311.927185 304.980408) 7896 POINT(133.72644 873.882141) 7897 POINT(950.26355 531.23584) 7898 POINT(163.774628 744.920593) 7899 POINT(649.656128 826.638794) 7900 POINT(264.195099 286.56601) 7901 POINT(990.458679 66.7890244) 7902 POINT(335.980927 828.459229) 7903 POINT(121.201859 907.042114) 7904 POINT(235.608383 788.954041) 7905 POINT(413.08313 500.120697) 7906 POINT(737.937378 646.258606) 7907 POINT(135.082901 984.724792) 7908 POINT(937.802979 715.581177) 7909 POINT(458.96225 819.035645) 7910 POINT(754.565796 161.759811) 7911 POINT(567.771667 22.8802242) 7912 POINT(762.043213 685.679321) 7913 POINT(124.734543 906.669739) 7914 POINT(385.936249 57.7374191) 7915 POINT(835.096069 530.024963) 7916 POINT(323.536255 360.2547) 7917 POINT(603.506836 339.852936) 7918 POINT(30.7202301 61.1949425) 7919 POINT(733.619324 593.770813) 7920 POINT(176.711899 132.660522) 7921 POINT(442.829803 953.037048) 7922 POINT(928.622986 498.768097) 7923 POINT(459.621948 218.01915) 7924 POINT(839.33728 438.731079) 7925 POINT(748.027588 532.809631) 7926 POINT(470.93103 862.93988) 7927 POINT(155.691589 473.617249) 7928 POINT(891.732727 943.831543) 7929 POINT(529.422302 493.365051) 7930 POINT(991.632141 631.285461) 7931 POINT(183.559418 973.494202) 7932 POINT(523.799072 466.717621) 7933 POINT(468.752808 149.908524) 7934 POINT(711.136108 574.128845) 7935 POINT(76.705452 965.518677) 7936 POINT(665.264465 133.887756) 7937 POINT(963.094849 254.816437) 7938 POINT(220.443192 310.407959) 7939 POINT(787.38678 899.799744) 7940 POINT(753.500671 923.149963) 7941 POINT(293.846741 790.481506) 7942 POINT(265.679321 927.207581) 7943 POINT(410.12619 671.876343) 7944 POINT(268.45752 451.413818) 7945 POINT(163.853256 623.120728) 7946 POINT(621.236145 65.3349915) 7947 POINT(37.3316612 869.219177) 7948 POINT(395.706879 589.258606) 7949 POINT(647.498657 513.42627) 7950 POINT(524.324646 991.476379) 7951 POINT(782.599182 255.693863) 7952 POINT(566.284485 243.615372) 7953 POINT(806.605835 152.790909) 7954 POINT(484.57196 826.886597) 7955 POINT(293.385162 417.112762) 7956 POINT(165.962601 439.942566) 7957 POINT(839.238831 347.941864) 7958 POINT(279.360413 283.228546) 7959 POINT(267.116669 960.727051) 7960 POINT(406.781433 656.561096) 7961 POINT(649.01123 212.166733) 7962 POINT(598.928711 968.092834) 7963 POINT(583.441345 912.489014) 7964 POINT(210.113678 216.356369) 7965 POINT(149.262955 237.919128) 7966 POINT(114.825378 565.892151) 7967 POINT(670.200562 988.140686) 7968 POINT(963.230774 424.8414) 7969 POINT(449.474487 423.44104) 7970 POINT(711.125 974.239014) 7971 POINT(631.843628 227.660461) 7972 POINT(180.28511 58.6166878) 7973 POINT(310.545654 205.141891) 7974 POINT(239.887466 781.579834) 7975 POINT(486.382477 77.3276901) 7976 POINT(423.817932 754.549438) 7977 POINT(901.073914 807.825256) 7978 POINT(440.662018 308.771851) 7979 POINT(580.619202 379.640167) 7980 POINT(324.348145 827.534851) 7981 POINT(938.525452 766.455688) 7982 POINT(598.406616 805.453735) 7983 POINT(883.262756 888.546936) 7984 POINT(173.291611 53.4916992) 7985 POINT(757.198914 796.010132) 7986 POINT(105.015106 291.474731) 7987 POINT(391.682343 865.935242) 7988 POINT(358.407288 994.281616) 7989 POINT(709.141235 890.059753) 7990 POINT(336.713135 964.311768) 7991 POINT(330.428925 35.0364189) 7992 POINT(861.160339 512.533447) 7993 POINT(574.680786 514.078491) 7994 POINT(162.906372 55.3166008) 7995 POINT(168.288742 667.393494) 7996 POINT(141.838806 226.889954) 7997 POINT(336.002502 26.0790997) 7998 POINT(961.632263 510.801208) 7999 POINT(735.515564 862.257629) 8000 POINT(0.955489635 791.985779) 8001 POINT(750.197205 5.02522564) 8002 POINT(232.589432 898.381592) 8003 POINT(884.021057 140.75975) 8004 POINT(424.411316 52.5029144) 8005 POINT(647.473572 996.572571) 8006 POINT(770.786926 494.665955) 8007 POINT(200.686234 321.927673) 8008 POINT(995.092773 316.940369) 8009 POINT(775.732056 296.042389) 8010 POINT(892.177734 597.285706) 8011 POINT(257.587891 273.597717) 8012 POINT(185.02066 224.272095) 8013 POINT(314.454163 780.132751) 8014 POINT(387.209503 722.433716) 8015 POINT(762.81958 538.494995) 8016 POINT(729.862854 935.458435) 8017 POINT(888.871826 471.723785) 8018 POINT(719.047485 498.486053) 8019 POINT(761.716614 24.2337303) 8020 POINT(331.569397 671.813293) 8021 POINT(29.6367226 476.23526) 8022 POINT(480.293671 746.949524) 8023 POINT(730.679565 915.715454) 8024 POINT(135.082779 943.519836) 8025 POINT(543.719116 163.346878) 8026 POINT(275.346619 453.890015) 8027 POINT(4.4220233 719.379089) 8028 POINT(781.522766 164.125641) 8029 POINT(189.022095 984.491882) 8030 POINT(5.11812258 78.1615601) 8031 POINT(482.352417 880.984558) 8032 POINT(352.939209 730.638367) 8033 POINT(378.205902 114.38723) 8034 POINT(996.640747 917.169495) 8035 POINT(970.931458 732.086487) 8036 POINT(192.672226 63.880085) 8037 POINT(376.474823 183.965317) 8038 POINT(542.173096 56.5656776) 8039 POINT(836.23053 615.082581) 8040 POINT(410.55484 550.050354) 8041 POINT(603.586121 732.422241) 8042 POINT(190.728043 767.187256) 8043 POINT(864.548157 912.697327) 8044 POINT(863.63739 801.984131) 8045 POINT(202.099121 647.701294) 8046 POINT(569.520813 80.7149582) 8047 POINT(358.825378 364.987915) 8048 POINT(540.809326 167.382019) 8049 POINT(991.890259 787.580322) 8050 POINT(603.653259 674.941101) 8051 POINT(534.733521 495.436066) 8052 POINT(573.638611 951.32843) 8053 POINT(295.21701 177.633698) 8054 POINT(749.421265 130.200378) 8055 POINT(222.689819 187.416382) 8056 POINT(545.945496 391.701843) 8057 POINT(887.122559 667.691589) 8058 POINT(259.953064 80.4326859) 8059 POINT(730.690369 453.307678) 8060 POINT(381.07019 28.6218338) 8061 POINT(502.729736 695.019958) 8062 POINT(561.454895 775.508911) 8063 POINT(477.731995 220.741119) 8064 POINT(848.49292 742.864807) 8065 POINT(915.981812 850.296814) 8066 POINT(534.163574 95.8666458) 8067 POINT(668.727356 523.95459) 8068 POINT(650.406433 403.221191) 8069 POINT(593.643677 271.562286) 8070 POINT(864.172546 116.165459) 8071 POINT(849.201111 832.9505) 8072 POINT(124.039253 759.054321) 8073 POINT(323.887665 501.670013) 8074 POINT(660.621155 901.586487) 8075 POINT(651.686768 379.129456) 8076 POINT(826.971558 941.861755) 8077 POINT(20.5421543 336.371155) 8078 POINT(217.30513 338.564423) 8079 POINT(425.627411 243.29985) 8080 POINT(660.381287 698.427734) 8081 POINT(112.093292 363.01181) 8082 POINT(138.588104 451.1539) 8083 POINT(728.716431 660.439697) 8084 POINT(729.104431 268.194977) 8085 POINT(538.784058 343.92746) 8086 POINT(46.5631371 834.897827) 8087 POINT(849.996338 465.312988) 8088 POINT(837.586365 638.772949) 8089 POINT(401.665558 333.969421) 8090 POINT(739.734253 551.976868) 8091 POINT(633.667175 854.020508) 8092 POINT(377.249603 766.039612) 8093 POINT(734.211243 438.19928) 8094 POINT(983.057983 74.5857086) 8095 POINT(877.439331 668.790588) 8096 POINT(373.495667 229.080627) 8097 POINT(700.114319 413.639496) 8098 POINT(75.0055466 637.893921) 8099 POINT(490.39682 226.792267) 8100 POINT(629.505981 705.252258) 8101 POINT(760.144897 898.069824) 8102 POINT(959.376038 669.615051) 8103 POINT(412.721832 308.480591) 8104 POINT(229.201157 596.939636) 8105 POINT(996.451843 909.210083) 8106 POINT(927.911621 800.11969) 8107 POINT(23.2625141 296.958405) 8108 POINT(143.164062 119.124229) 8109 POINT(834.453064 399.232635) 8110 POINT(894.336853 325.194061) 8111 POINT(390.809845 617.067993) 8112 POINT(319.026184 165.66156) 8113 POINT(860.463501 72.3980789) 8114 POINT(811.262512 892.958862) 8115 POINT(261.08194 561.400635) 8116 POINT(431.763489 312.209961) 8117 POINT(297.470398 377.710327) 8118 POINT(48.4668312 617.127075) 8119 POINT(113.796371 310.139404) 8120 POINT(419.542297 385.040131) 8121 POINT(971.971436 573.838257) 8122 POINT(454.386475 780.694275) 8123 POINT(972.845276 452.627289) 8124 POINT(37.2015038 127.494263) 8125 POINT(281.550507 30.1529064) 8126 POINT(382.218994 787.317566) 8127 POINT(907.468994 600.778931) 8128 POINT(922.152649 629.652527) 8129 POINT(755.871826 475.580322) 8130 POINT(177.860458 42.0557404) 8131 POINT(323.45871 747.930847) 8132 POINT(86.4242935 351.804047) 8133 POINT(293.033691 736.072571) 8134 POINT(498.971222 998.80426) 8135 POINT(210.799774 871.451782) 8136 POINT(323.773651 768.608154) 8137 POINT(48.7276459 611.849976) 8138 POINT(362.783295 698.675537) 8139 POINT(487.801147 903.411499) 8140 POINT(752.231812 888.370911) 8141 POINT(257.409973 937.170288) 8142 POINT(4.83312035 741.737366) 8143 POINT(461.638977 600.83197) 8144 POINT(600.146179 160.651428) 8145 POINT(972.69751 538.230591) 8146 POINT(471.624146 783.936951) 8147 POINT(211.374939 35.5228844) 8148 POINT(387.727814 575.450684) 8149 POINT(828.459229 758.911377) 8150 POINT(367.293365 331.701508) 8151 POINT(391.89325 393.22934) 8152 POINT(856.307007 78.5252228) 8153 POINT(442.582428 459.421326) 8154 POINT(327.676758 818.622314) 8155 POINT(555.832214 522.795227) 8156 POINT(353.946014 779.906982) 8157 POINT(12.1497631 909.505371) 8158 POINT(604.738708 691.790039) 8159 POINT(595.470276 208.273972) 8160 POINT(898.752563 816.500183) 8161 POINT(981.771667 795.72821) 8162 POINT(610.150818 509.766388) 8163 POINT(317.657928 450.393921) 8164 POINT(810.183899 144.663437) 8165 POINT(406.076416 641.447571) 8166 POINT(388.875671 859.839111) 8167 POINT(482.270691 138.512283) 8168 POINT(623.825562 984.977234) 8169 POINT(772.868103 298.44455) 8170 POINT(771.931885 239.121872) 8171 POINT(858.290894 370.168213) 8172 POINT(986.575195 118.932594) 8173 POINT(605.21936 810.7771) 8174 POINT(392.086426 912.226013) 8175 POINT(981.508484 332.572479) 8176 POINT(366.856232 746.069092) 8177 POINT(118.775864 874.276672) 8178 POINT(837.041077 157.642487) 8179 POINT(333.964203 98.8470459) 8180 POINT(708.432434 150.126602) 8181 POINT(574.804932 319.209137) 8182 POINT(961.749939 245.639145) 8183 POINT(607.641479 911.555054) 8184 POINT(606.588928 994.066711) 8185 POINT(740.030029 528.971069) 8186 POINT(784.825378 952.390869) 8187 POINT(563.545715 527.038147) 8188 POINT(191.890778 666.356323) 8189 POINT(41.0500107 474.296692) 8190 POINT(453.559692 408.224884) 8191 POINT(752.192749 976.304382) 8192 POINT(669.425964 734.697632) 8193 POINT(584.150391 90.2998047) 8194 POINT(477.910736 602.276855) 8195 POINT(22.6608391 661.686584) 8196 POINT(380.384277 228.425125) 8197 POINT(200.570648 52.7783623) 8198 POINT(805.869446 921.518799) 8199 POINT(314.744324 53.2182045) 8200 POINT(328.019287 167.081772) 8201 POINT(72.8007202 620.559937) 8202 POINT(340.948029 689.032349) 8203 POINT(702.377808 374.648987) 8204 POINT(341.485992 480.223419) 8205 POINT(299.236694 102.268456) 8206 POINT(187.097626 784.566223) 8207 POINT(36.3850098 576.250854) 8208 POINT(438.741699 222.291367) 8209 POINT(962.533936 678.743408) 8210 POINT(247.184174 79.8297043) 8211 POINT(820.737549 580.039734) 8212 POINT(493.643219 776.430542) 8213 POINT(881.253357 766.445618) 8214 POINT(798.222656 601.639404) 8215 POINT(148.892349 252.766434) 8216 POINT(12.5688162 562.421143) 8217 POINT(244.905289 842.533386) 8218 POINT(319.888855 47.9490089) 8219 POINT(625.408936 813.005554) 8220 POINT(682.338684 616.429749) 8221 POINT(759.251221 668.89624) 8222 POINT(162.399216 524.957031) 8223 POINT(202.931244 410.898651) 8224 POINT(363.902618 294.075012) 8225 POINT(761.734497 150.283737) 8226 POINT(605.668701 147.901199) 8227 POINT(775.750549 432.584229) 8228 POINT(375.209564 263.343109) 8229 POINT(6.16553545 640.768982) 8230 POINT(483.727905 453.812134) 8231 POINT(188.549667 676.072937) 8232 POINT(231.868454 900.175476) 8233 POINT(461.297821 373.137756) 8234 POINT(826.69989 411.412872) 8235 POINT(42.5608444 921.304504) 8236 POINT(495.655182 177.092163) 8237 POINT(519.686646 827.396362) 8238 POINT(907.208618 181.515472) 8239 POINT(311.253143 574.347656) 8240 POINT(18.6163177 144.002014) 8241 POINT(471.23172 277.441864) 8242 POINT(668.910278 680.679199) 8243 POINT(313.79718 4.18248272) 8244 POINT(664.4646 140.390518) 8245 POINT(960.062134 459.040375) 8246 POINT(761.909485 431.559601) 8247 POINT(36.9389229 910.230103) 8248 POINT(539.157715 949.364868) 8249 POINT(413.929291 287.611511) 8250 POINT(313.142761 145.291138) 8251 POINT(144.545624 559.771545) 8252 POINT(868.995728 206.575195) 8253 POINT(112.032738 820.917053) 8254 POINT(119.38205 974.410706) 8255 POINT(268.971527 16.624361) 8256 POINT(927.269531 510.820038) 8257 POINT(640.210266 209.604523) 8258 POINT(166.330536 399.243225) 8259 POINT(339.522186 545.921753) 8260 POINT(829.436584 848.182312) 8261 POINT(971.682129 207.657959) 8262 POINT(249.354797 266.334015) 8263 POINT(770.680298 224.566162) 8264 POINT(591.995972 137.832565) 8265 POINT(307.046692 925.158936) 8266 POINT(999.716125 584.428162) 8267 POINT(306.387451 412.904755) 8268 POINT(581.680786 935.173889) 8269 POINT(108.9832 897.363464) 8270 POINT(804.735291 301.659088) 8271 POINT(196.560913 150.402069) 8272 POINT(369.279877 586.793091) 8273 POINT(475.124512 216.95105) 8274 POINT(951.144836 437.024567) 8275 POINT(168.154984 726.560852) 8276 POINT(46.3476524 421.721252) 8277 POINT(106.820862 430.404572) 8278 POINT(817.953003 619.891418) 8279 POINT(345.461548 648.068481) 8280 POINT(263.254791 884.795288) 8281 POINT(652.023254 134.830246) 8282 POINT(98.4645233 303.183899) 8283 POINT(872.975647 974.124207) 8284 POINT(603.478882 870.452759) 8285 POINT(127.273491 728.129761) 8286 POINT(840.673279 659.076355) 8287 POINT(499.035278 524.127014) 8288 POINT(421.728821 899.079529) 8289 POINT(456.794464 563.286682) 8290 POINT(561.062012 440.422943) 8291 POINT(789.578247 775.382629) 8292 POINT(942.442444 193.070145) 8293 POINT(905.933777 836.632568) 8294 POINT(808.914734 896.822083) 8295 POINT(958.739624 363.212738) 8296 POINT(240.391678 156.04924) 8297 POINT(331.720123 900.308044) 8298 POINT(336.568573 171.128357) 8299 POINT(526.648743 971.827942) 8300 POINT(706.575562 236.24144) 8301 POINT(725.050354 330.736847) 8302 POINT(465.600189 470.386658) 8303 POINT(144.665115 61.5508308) 8304 POINT(740.276123 663.766541) 8305 POINT(477.032959 7.78201723) 8306 POINT(329.76474 704.578979) 8307 POINT(964.427856 316.453369) 8308 POINT(702.097534 91.6756668) 8309 POINT(166.271545 663.355042) 8310 POINT(422.573181 217.237473) 8311 POINT(869.473206 916.19873) 8312 POINT(613.005005 741.832825) 8313 POINT(434.379028 843.599915) 8314 POINT(280.716156 693.892578) 8315 POINT(736.81012 736.854187) 8316 POINT(690.82373 259.286072) 8317 POINT(693.7724 995.376648) 8318 POINT(194.111176 327.48703) 8319 POINT(650.725647 367.669281) 8320 POINT(578.355286 112.560944) 8321 POINT(994.80426 435.618805) 8322 POINT(549.171753 844.303284) 8323 POINT(652.223877 394.287842) 8324 POINT(36.2124519 42.3479309) 8325 POINT(368.546234 291.242798) 8326 POINT(783.966309 49.6131744) 8327 POINT(174.886429 743.591919) 8328 POINT(948.670166 757.345337) 8329 POINT(357.046509 107.637268) 8330 POINT(962.255188 139.175568) 8331 POINT(791.574707 11.3496981) 8332 POINT(722.275024 803.557251) 8333 POINT(244.642044 715.362549) 8334 POINT(657.965332 140.868805) 8335 POINT(276.27655 601.067261) 8336 POINT(544.650513 292.135864) 8337 POINT(711.913513 117.541931) 8338 POINT(182.481033 500.161621) 8339 POINT(271.53302 190.920883) 8340 POINT(514.881653 960.896484) 8341 POINT(248.128891 614.52832) 8342 POINT(184.200272 3.78809428) 8343 POINT(44.264534 515.371948) 8344 POINT(357.057098 865.922119) 8345 POINT(678.529175 117.780479) 8346 POINT(303.127197 947.907715) 8347 POINT(911.44696 699.044312) 8348 POINT(284.992615 852.21405) 8349 POINT(589.568604 621.485901) 8350 POINT(872.839844 700.194885) 8351 POINT(921.972473 412.669983) 8352 POINT(598.854553 836.134094) 8353 POINT(268.227936 98.3176422) 8354 POINT(627.994141 579.716431) 8355 POINT(292.162201 934.385193) 8356 POINT(763.347961 847.422668) 8357 POINT(10.7782011 664.815308) 8358 POINT(997.594543 284.120087) 8359 POINT(909.779846 794.386475) 8360 POINT(42.3287354 724.865784) 8361 POINT(301.88028 722.230286) 8362 POINT(842.582703 930.570435) 8363 POINT(945.029907 56.9320679) 8364 POINT(246.145126 337.224518) 8365 POINT(416.66272 920.279236) 8366 POINT(430.865234 145.033524) 8367 POINT(236.905396 450.900421) 8368 POINT(785.70813 209.827515) 8369 POINT(456.428772 214.098099) 8370 POINT(33.721981 533.9245) 8371 POINT(659.383362 498.595306) 8372 POINT(21.2371883 477.267853) 8373 POINT(692.900574 988.7948) 8374 POINT(774.607544 302.797607) 8375 POINT(114.349579 512.212219) 8376 POINT(843.821228 153.933823) 8377 POINT(366.417511 211.34552) 8378 POINT(264.677429 748.671753) 8379 POINT(146.765884 828.358215) 8380 POINT(534.382019 816.642273) 8381 POINT(760.261902 836.185242) 8382 POINT(118.942215 845.747986) 8383 POINT(432.47757 933.243103) 8384 POINT(207.320541 927.432617) 8385 POINT(456.294952 238.692093) 8386 POINT(662.771912 168.69072) 8387 POINT(550.189697 194.638016) 8388 POINT(565.074036 189.618469) 8389 POINT(166.341476 279.867584) 8390 POINT(10.544095 953.307922) 8391 POINT(516.524841 761.42157) 8392 POINT(265.004944 526.4823) 8393 POINT(429.272156 715.866699) 8394 POINT(226.549713 181.378693) 8395 POINT(536.708191 817.512573) 8396 POINT(931.489929 499.539154) 8397 POINT(765.487549 57.6324387) 8398 POINT(462.839447 194.542862) 8399 POINT(303.306427 784.21405) 8400 POINT(733.771362 242.082626) 8401 POINT(588.517639 658.742065) 8402 POINT(809.515686 491.578674) 8403 POINT(961.582703 253.468811) 8404 POINT(494.079163 273.766754) 8405 POINT(287.707703 763.672668) 8406 POINT(90.0440445 44.0610695) 8407 POINT(552.410767 404.255646) 8408 POINT(490.726959 883.266052) 8409 POINT(416.46933 484.046387) 8410 POINT(987.479675 677.305359) 8411 POINT(342.324005 405.329498) 8412 POINT(477.330658 118.594666) 8413 POINT(847.332947 187.016556) 8414 POINT(697.072754 806.666504) 8415 POINT(955.160034 839.737) 8416 POINT(951.99353 808.455505) 8417 POINT(88.046257 577.807373) 8418 POINT(766.539124 93.6768188) 8419 POINT(630.891296 500.014618) 8420 POINT(379.247498 453.028137) 8421 POINT(692.221375 837.522095) 8422 POINT(907.351868 392.170746) 8423 POINT(254.617706 997.703857) 8424 POINT(892.73468 268.894836) 8425 POINT(843.539612 537.685608) 8426 POINT(338.729126 691.457764) 8427 POINT(22.3286362 506.793365) 8428 POINT(988.059814 150.341064) 8429 POINT(744.282715 694.588684) 8430 POINT(660.565491 631.769531) 8431 POINT(739.924438 617.925781) 8432 POINT(852.937744 818.058472) 8433 POINT(396.965729 249.353683) 8434 POINT(342.372864 566.621216) 8435 POINT(788.121094 718.682983) 8436 POINT(275.708008 966.314697) 8437 POINT(732.104797 463.742096) 8438 POINT(662.367676 77.3907547) 8439 POINT(728.244263 534.98938) 8440 POINT(523.480957 790.945984) 8441 POINT(805.661743 207.076294) 8442 POINT(334.162781 307.33429) 8443 POINT(372.550995 469.651031) 8444 POINT(187.627304 883.065063) 8445 POINT(966.463501 876.249451) 8446 POINT(118.090309 475.419739) 8447 POINT(897.601685 156.27327) 8448 POINT(757.017883 107.168625) 8449 POINT(476.904785 738.648926) 8450 POINT(430.004059 454.774567) 8451 POINT(240.335999 210.2771) 8452 POINT(598.364502 747.364807) 8453 POINT(59.4969139 816.920227) 8454 POINT(332.479706 356.208221) 8455 POINT(583.89093 503.460815) 8456 POINT(98.2098846 901.733154) 8457 POINT(237.336853 44.8502235) 8458 POINT(321.651184 644.183228) 8459 POINT(213.830368 414.53009) 8460 POINT(952.558777 832.365845) 8461 POINT(138.32576 315.24939) 8462 POINT(7.49180031 430.773315) 8463 POINT(405.339478 415.246094) 8464 POINT(977.837891 737.429993) 8465 POINT(640.975769 213.565094) 8466 POINT(126.169846 242.561371) 8467 POINT(288.070221 40.3176613) 8468 POINT(360.817627 201.629257) 8469 POINT(353.900513 685.059143) 8470 POINT(320.177673 736.092773) 8471 POINT(827.705444 758.890625) 8472 POINT(965.324707 402.731415) 8473 POINT(941.593811 618.734253) 8474 POINT(775.254211 549.415649) 8475 POINT(161.944366 516.463684) 8476 POINT(170.018433 4.36877871) 8477 POINT(735.856995 347.795654) 8478 POINT(112.690918 720.402283) 8479 POINT(533.492126 748.286072) 8480 POINT(724.199768 549.106506) 8481 POINT(405.245544 364.286652) 8482 POINT(901.431763 876.959412) 8483 POINT(973.772034 478.770416) 8484 POINT(277.568451 80.813385) 8485 POINT(694.161316 124.63633) 8486 POINT(776.447571 709.902039) 8487 POINT(708.459045 716.179382) 8488 POINT(565.036255 671.658508) 8489 POINT(888.725525 683.211487) 8490 POINT(428.18634 76.1754608) 8491 POINT(979.568176 727.821228) 8492 POINT(709.152771 506.596252) 8493 POINT(718.325928 32.5649796) 8494 POINT(662.470215 448.277832) 8495 POINT(608.71228 938.217407) 8496 POINT(740.393127 186.991547) 8497 POINT(859.737732 451.924927) 8498 POINT(321.031281 325.1474) 8499 POINT(162.278549 131.180267) 8500 POINT(229.50293 955.075623) 8501 POINT(74.9776535 869.570068) 8502 POINT(99.9476624 650.443542) 8503 POINT(21.6541443 356.466064) 8504 POINT(876.292725 612.212402) 8505 POINT(284.557159 230.089142) 8506 POINT(206.562958 246.064758) 8507 POINT(10.2649231 442.64563) 8508 POINT(5.7161808 6.49399757) 8509 POINT(554.558533 124.122879) 8510 POINT(355.040619 761.910706) 8511 POINT(484.074402 300.060822) 8512 POINT(184.765228 98.9736404) 8513 POINT(58.9660912 486.038879) 8514 POINT(816.527039 667.309021) 8515 POINT(953.322021 261.211578) 8516 POINT(592.657837 782.882202) 8517 POINT(567.942078 994.091858) 8518 POINT(111.965897 365.192505) 8519 POINT(370.663422 550.645325) 8520 POINT(351.99118 826.465027) 8521 POINT(908.244812 917.97229) 8522 POINT(463.927887 597.026245) 8523 POINT(194.507629 602.396851) 8524 POINT(759.977112 537.613953) 8525 POINT(143.744492 550.249023) 8526 POINT(308.38916 924.646912) 8527 POINT(216.229324 350.253143) 8528 POINT(246.57341 7.258286) 8529 POINT(931.999268 31.0622139) 8530 POINT(8.21286297 224.593018) 8531 POINT(926.066895 804.594666) 8532 POINT(930.267883 78.5181122) 8533 POINT(627.113586 329.525055) 8534 POINT(407.158295 811.166443) 8535 POINT(884.89978 199.290314) 8536 POINT(842.469788 509.912567) 8537 POINT(219.60614 380.644012) 8538 POINT(16.5623608 16.3814201) 8539 POINT(167.731949 743.101257) 8540 POINT(247.906082 153.453568) 8541 POINT(130.775543 893.169006) 8542 POINT(436.408264 798.1203) 8543 POINT(449.589996 542.273682) 8544 POINT(1.1176734 352.246216) 8545 POINT(212.056793 141.636459) 8546 POINT(78.3173065 222.229797) 8547 POINT(715.678589 574.478577) 8548 POINT(548.094116 177.254471) 8549 POINT(39.1215172 134.969437) 8550 POINT(380.068817 469.955261) 8551 POINT(895.017944 688.982178) 8552 POINT(7.28156853 569.181396) 8553 POINT(735.981689 914.351685) 8554 POINT(479.574921 359.025208) 8555 POINT(940.420593 483.907898) 8556 POINT(745.64447 928.950928) 8557 POINT(116.114876 374.692261) 8558 POINT(750.806152 234.861252) 8559 POINT(7.5484705 568.676758) 8560 POINT(3.1552124 209.067764) 8561 POINT(885.636047 926.850586) 8562 POINT(694.984314 487.803986) 8563 POINT(421.923431 158.190262) 8564 POINT(413.033295 98.1718521) 8565 POINT(17.80056 521.892578) 8566 POINT(427.430237 882.908386) 8567 POINT(65.1469574 165.045563) 8568 POINT(715.249268 462.391022) 8569 POINT(178.628036 43.9998016) 8570 POINT(403.772949 350.776733) 8571 POINT(660.218628 957.050354) 8572 POINT(567.254883 809.636475) 8573 POINT(260.197723 845.256165) 8574 POINT(88.7983551 881.061401) 8575 POINT(190.724304 729.530334) 8576 POINT(118.595909 176.773575) 8577 POINT(661.171082 243.386749) 8578 POINT(987.035278 684.683533) 8579 POINT(349.7995 5.39960527) 8580 POINT(935.009216 504.640076) 8581 POINT(943.356934 132.626862) 8582 POINT(826.246643 846.4776) 8583 POINT(482.154205 120.690437) 8584 POINT(932.801575 262.172485) 8585 POINT(888.641479 468.248657) 8586 POINT(713.315063 276.886444) 8587 POINT(956.080322 679.215271) 8588 POINT(215.752655 808.440918) 8589 POINT(782.36322 276.876556) 8590 POINT(766.580811 889.494934) 8591 POINT(282.244019 867.260925) 8592 POINT(94.4791565 740.181519) 8593 POINT(957.221985 17.5722351) 8594 POINT(69.5121078 580.604736) 8595 POINT(582.19928 207.691177) 8596 POINT(112.144386 262.454224) 8597 POINT(246.066055 572.773315) 8598 POINT(787.656799 767.716309) 8599 POINT(201.940567 802.560303) 8600 POINT(600.590637 441.343689) 8601 POINT(12.4135742 883.519653) 8602 POINT(944.145142 955.699463) 8603 POINT(364.447174 364.317017) 8604 POINT(147.418457 50.1593246) 8605 POINT(854.317627 260.004517) 8606 POINT(658.583801 42.5960045) 8607 POINT(760.051941 367.904999) 8608 POINT(367.231903 604.379883) 8609 POINT(910.195923 696.337769) 8610 POINT(620.001831 851.413879) 8611 POINT(884.602966 469.541901) 8612 POINT(539.213684 95.6268387) 8613 POINT(934.501038 97.5111771) 8614 POINT(186.578995 679.935181) 8615 POINT(752.766785 932.686401) 8616 POINT(998.390503 881.240601) 8617 POINT(956.617798 186.906448) 8618 POINT(783.207275 497.475128) 8619 POINT(337.45697 177.678635) 8620 POINT(649.392456 163.571365) 8621 POINT(388.128632 4.28913975) 8622 POINT(202.507523 785.692139) 8623 POINT(716.252197 728.766357) 8624 POINT(609.207947 501.886658) 8625 POINT(901.599426 327.082031) 8626 POINT(5.7422328 919.964783) 8627 POINT(441.803589 770.705139) 8628 POINT(779.378906 839.836487) 8629 POINT(268.292999 51.8142014) 8630 POINT(467.136963 418.513763) 8631 POINT(95.6112289 246.848434) 8632 POINT(98.2773666 602.704895) 8633 POINT(612.727112 557.992859) 8634 POINT(408.4422 348.362793) 8635 POINT(333.184387 931.618896) 8636 POINT(330.549408 521.218079) 8637 POINT(218.750931 343.246796) 8638 POINT(830.138733 670.394409) 8639 POINT(983.481995 192.479813) 8640 POINT(513.508545 972.465515) 8641 POINT(104.821831 766.442322) 8642 POINT(461.50885 330.172882) 8643 POINT(926.662964 220.000992) 8644 POINT(599.204529 793.532288) 8645 POINT(75.422081 564.572754) 8646 POINT(223.867279 456.868591) 8647 POINT(541.558655 349.34137) 8648 POINT(406.090485 719.727478) 8649 POINT(851.063232 919.576416) 8650 POINT(129.564774 119.533989) 8651 POINT(487.91272 722.445801) 8652 POINT(725.655334 826.834595) 8653 POINT(181.083298 242.836563) 8654 POINT(323.948456 708.143433) 8655 POINT(468.316254 947.481201) 8656 POINT(317.084106 615.597412) 8657 POINT(551.449829 517.971558) 8658 POINT(818.283142 156.225372) 8659 POINT(400.899048 600.512756) 8660 POINT(566.954834 666.695251) 8661 POINT(214.040146 996.62262) 8662 POINT(958.707886 902.577454) 8663 POINT(126.220505 384.148468) 8664 POINT(791.174805 115.748962) 8665 POINT(784.376953 277.298889) 8666 POINT(829.622925 701.470703) 8667 POINT(370.436798 508.85614) 8668 POINT(512.805115 550.439392) 8669 POINT(581.55658 313.941925) 8670 POINT(599.471375 133.911774) 8671 POINT(191.703354 394.883575) 8672 POINT(562.117493 315.608887) 8673 POINT(217.113586 698.721741) 8674 POINT(282.701965 946.947693) 8675 POINT(547.904663 106.189713) 8676 POINT(514.172546 627.255188) 8677 POINT(678.824341 642.679443) 8678 POINT(513.767761 153.659882) 8679 POINT(941.186279 22.52075) 8680 POINT(804.40448 342.61554) 8681 POINT(300.959534 438.182281) 8682 POINT(707.337708 163.409912) 8683 POINT(318.397278 131.741547) 8684 POINT(844.141479 711.079529) 8685 POINT(564.253113 828.758789) 8686 POINT(413.466125 80.0625763) 8687 POINT(536.432068 981.759766) 8688 POINT(595.687927 939.456604) 8689 POINT(626.86377 634.733215) 8690 POINT(767.288391 705.326172) 8691 POINT(737.597107 769.856323) 8692 POINT(360.538086 945.164307) 8693 POINT(851.862366 187.180283) 8694 POINT(679.878113 715.013916) 8695 POINT(922.506287 266.962463) 8696 POINT(984.487854 242.191849) 8697 POINT(367.285736 608.071655) 8698 POINT(820.224548 937.94458) 8699 POINT(856.646057 275.400482) 8700 POINT(289.855377 507.232361) 8701 POINT(871.557312 741.089417) 8702 POINT(497.856934 660.364563) 8703 POINT(201.630081 100.830948) 8704 POINT(307.71701 7.16776562) 8705 POINT(480.080231 585.430481) 8706 POINT(271.46344 403.187012) 8707 POINT(423.29953 82.6272202) 8708 POINT(802.010742 734.127014) 8709 POINT(398.068451 414.030457) 8710 POINT(480.924347 675.009094) 8711 POINT(596.205322 571.623047) 8712 POINT(652.553833 790.629578) 8713 POINT(600.187805 367.984009) 8714 POINT(928.496033 790.780518) 8715 POINT(697.643005 870.156799) 8716 POINT(895.467346 294.863342) 8717 POINT(499.337677 210.543152) 8718 POINT(619.456421 964.162964) 8719 POINT(364.293243 556.561768) 8720 POINT(607.195129 834.937317) 8721 POINT(794.911377 96.9242249) 8722 POINT(813.3396 531.031555) 8723 POINT(370.653168 304.729065) 8724 POINT(362.250519 290.98584) 8725 POINT(305.131012 670.257446) 8726 POINT(633.959961 342.235809) 8727 POINT(280.828064 779.095093) 8728 POINT(695.018982 665.292542) 8729 POINT(608.56073 529.363342) 8730 POINT(139.745544 75.6498795) 8731 POINT(823.884094 436.384277) 8732 POINT(852.39032 413.140106) 8733 POINT(746.659851 130.643051) 8734 POINT(65.4701004 460.707153) 8735 POINT(547.846619 97.6615372) 8736 POINT(136.689758 650.88092) 8737 POINT(72.2454758 484.219604) 8738 POINT(412.294983 183.027664) 8739 POINT(218.560883 967.728088) 8740 POINT(307.321747 532.763611) 8741 POINT(567.991455 583.570496) 8742 POINT(685.101135 542.410828) 8743 POINT(247.015442 373.618896) 8744 POINT(834.736389 34.3381615) 8745 POINT(604.598877 368.242035) 8746 POINT(854.412415 774.380676) 8747 POINT(152.360428 869.937622) 8748 POINT(281.773621 357.802856) 8749 POINT(160.030899 160.838699) 8750 POINT(54.7813072 313.634186) 8751 POINT(697.736389 515.991516) 8752 POINT(725.134705 183.444504) 8753 POINT(979.212585 942.330688) 8754 POINT(622.329224 177.15744) 8755 POINT(872.16217 68.164238) 8756 POINT(923.677551 31.3621426) 8757 POINT(17.8541393 533.826843) 8758 POINT(321.202728 75.4388885) 8759 POINT(334.112244 550.69281) 8760 POINT(890.42572 68.9547653) 8761 POINT(784.563965 738.308594) 8762 POINT(512.02832 822.12262) 8763 POINT(281.048767 168.989609) 8764 POINT(631.628174 802.191101) 8765 POINT(872.175232 762.425415) 8766 POINT(575.01825 105.60862) 8767 POINT(964.053223 811.878906) 8768 POINT(78.9006271 222.469772) 8769 POINT(52.2180634 786.30127) 8770 POINT(116.200462 710.521179) 8771 POINT(227.839035 452.5914) 8772 POINT(659.425781 145.916718) 8773 POINT(795.727539 378.40387) 8774 POINT(357.315643 832.63092) 8775 POINT(523.806091 603.09021) 8776 POINT(524.384094 678.255493) 8777 POINT(979.083801 562.881226) 8778 POINT(638.244812 217.729172) 8779 POINT(817.43335 602.274414) 8780 POINT(187.233002 965.92627) 8781 POINT(835.341125 738.369934) 8782 POINT(145.401581 473.118713) 8783 POINT(691.186707 925.836609) 8784 POINT(211.146851 652.916382) 8785 POINT(919.507385 320.131805) 8786 POINT(820.343384 49.7976494) 8787 POINT(730.253601 894.023987) 8788 POINT(628.876099 752.807251) 8789 POINT(970.496887 931.477844) 8790 POINT(899.925232 74.078186) 8791 POINT(970.797546 123.282661) 8792 POINT(978.478821 966.828491) 8793 POINT(72.9829102 205.788437) 8794 POINT(692.642151 419.295929) 8795 POINT(789.058777 818.737366) 8796 POINT(194.823044 831.250977) 8797 POINT(449.13913 777.041626) 8798 POINT(5.37390852 151.428909) 8799 POINT(114.511208 536.689575) 8800 POINT(109.454468 461.239807) 8801 POINT(543.262024 834.61261) 8802 POINT(100.568832 756.860413) 8803 POINT(261.416626 359.789734) 8804 POINT(980.368469 73.3254776) 8805 POINT(801.527832 697.208618) 8806 POINT(185.971268 366.182861) 8807 POINT(990.501526 522.269165) 8808 POINT(298.420898 914.94281) 8809 POINT(694.643921 221.154968) 8810 POINT(217.319458 524.855103) 8811 POINT(636.114258 398.590851) 8812 POINT(98.5580368 707.024475) 8813 POINT(82.9114151 499.850983) 8814 POINT(229.009857 929.688293) 8815 POINT(264.102936 426.107269) 8816 POINT(141.740616 214.426071) 8817 POINT(981.226501 234.063644) 8818 POINT(498.544525 949.550598) 8819 POINT(861.78717 970.788635) 8820 POINT(627.382446 98.9984131) 8821 POINT(145.801697 356.830597) 8822 POINT(597.648743 679.344788) 8823 POINT(503.78009 364.811768) 8824 POINT(546.319946 781.411438) 8825 POINT(674.900391 982.094666) 8826 POINT(786.265991 738.226562) 8827 POINT(286.049194 345.776306) 8828 POINT(390.772827 640.374023) 8829 POINT(992.632263 512.793457) 8830 POINT(265.207886 16.1956902) 8831 POINT(575.48822 909.542297) 8832 POINT(700.454041 511.68222) 8833 POINT(167.866989 791.979858) 8834 POINT(519.056885 97.6059036) 8835 POINT(783.403992 152.15834) 8836 POINT(842.928528 114.568115) 8837 POINT(509.581299 509.65033) 8838 POINT(352.990295 145.804443) 8839 POINT(438.706177 21.0773678) 8840 POINT(501.520447 729.109741) 8841 POINT(775.461182 688.309204) 8842 POINT(255.513763 620.024658) 8843 POINT(810.219727 21.8328762) 8844 POINT(575.508911 176.002884) 8845 POINT(132.340073 961.899841) 8846 POINT(403.663208 313.820618) 8847 POINT(707.422974 833.575439) 8848 POINT(585.051819 908.783325) 8849 POINT(215.061081 535.583496) 8850 POINT(968.054443 853.745789) 8851 POINT(375.047699 475.345581) 8852 POINT(217.219864 818.627686) 8853 POINT(244.60881 167.949814) 8854 POINT(372.229706 977.642273) 8855 POINT(589.358948 134.685944) 8856 POINT(349.719238 173.150757) 8857 POINT(186.865234 252.593475) 8858 POINT(814.071289 623.821655) 8859 POINT(162.566818 21.1719398) 8860 POINT(745.326965 963.154541) 8861 POINT(360.100494 92.5933838) 8862 POINT(666.621826 105.580811) 8863 POINT(66.7036133 639.66687) 8864 POINT(622.757629 815.0755) 8865 POINT(732.318542 759.282288) 8866 POINT(341.472076 419.91275) 8867 POINT(299.434448 691.584045) 8868 POINT(478.625793 541.913452) 8869 POINT(388.834473 505.796448) 8870 POINT(819.946655 44.9342537) 8871 POINT(431.650116 407.164764) 8872 POINT(860.364075 351.716278) 8873 POINT(295.968658 566.246643) 8874 POINT(335.638885 417.467407) 8875 POINT(500.325531 487.757996) 8876 POINT(271.401184 710.23291) 8877 POINT(538.500732 312.952209) 8878 POINT(626.416138 650.375793) 8879 POINT(540.009033 994.31366) 8880 POINT(27.6008072 863.135681) 8881 POINT(666.53363 167.033783) 8882 POINT(764.836975 948.670349) 8883 POINT(582.440735 456.778381) 8884 POINT(677.906494 63.2534637) 8885 POINT(651.676453 361.759094) 8886 POINT(822.992676 614.063477) 8887 POINT(396.181488 198.809067) 8888 POINT(552.333557 619.544556) 8889 POINT(222.96228 643.389893) 8890 POINT(531.104736 489.565033) 8891 POINT(586.765381 373.195892) 8892 POINT(106.894203 987.078857) 8893 POINT(29.6753139 260.878845) 8894 POINT(648.781189 188.876892) 8895 POINT(932.773804 485.613403) 8896 POINT(997.737122 251.086975) 8897 POINT(161.268509 143.616394) 8898 POINT(983.655396 479.756897) 8899 POINT(994.359558 247.794479) 8900 POINT(235.728806 523.172363) 8901 POINT(43.8121872 995.530273) 8902 POINT(864.198669 746.188293) 8903 POINT(98.1340942 445.948853) 8904 POINT(347.898499 964.073975) 8905 POINT(627.920776 144.190475) 8906 POINT(401.822662 541.103149) 8907 POINT(775.962097 136.224167) 8908 POINT(203.613785 374.903412) 8909 POINT(84.8628159 375.175537) 8910 POINT(61.9531708 859.57312) 8911 POINT(615.092896 886.234253) 8912 POINT(51.0503349 557.570618) 8913 POINT(935.567932 654.806152) 8914 POINT(904.580872 911.795776) 8915 POINT(263.187805 970.155945) 8916 POINT(353.463318 935.1521) 8917 POINT(651.501038 598.454834) 8918 POINT(351.863098 855.866699) 8919 POINT(24.1882973 394.622009) 8920 POINT(214.964066 244.243332) 8921 POINT(286.882935 776.991577) 8922 POINT(493.671021 162.243973) 8923 POINT(79.6008072 383.614777) 8924 POINT(541.9505 463.876434) 8925 POINT(628.49408 470.526001) 8926 POINT(751.547974 24.9738388) 8927 POINT(874.65741 482.791199) 8928 POINT(599.035583 529.374268) 8929 POINT(682.305237 276.459991) 8930 POINT(187.363983 509.161835) 8931 POINT(619.944641 757.147034) 8932 POINT(287.262787 794.5495) 8933 POINT(55.4377441 57.9648705) 8934 POINT(865.022034 929.836609) 8935 POINT(176.475113 650.653625) 8936 POINT(297.593689 651.947815) 8937 POINT(937.46344 79.3489075) 8938 POINT(451.892517 294.268188) 8939 POINT(815.809875 952.478882) 8940 POINT(274.09668 198.372391) 8941 POINT(936.811707 816.383301) 8942 POINT(681.221985 507.967285) 8943 POINT(476.721497 971.628418) 8944 POINT(258.963287 341.716431) 8945 POINT(986.059509 852.505493) 8946 POINT(387.582611 444.004242) 8947 POINT(176.021606 460.321472) 8948 POINT(985.421753 285.169434) 8949 POINT(894.137756 475.920471) 8950 POINT(574.5 905.952698) 8951 POINT(173.558975 46.1416893) 8952 POINT(34.8139 896.151794) 8953 POINT(893.995422 77.9731064) 8954 POINT(376.715851 976.675598) 8955 POINT(340.026764 933.979248) 8956 POINT(480.546753 69.8716431) 8957 POINT(711.020447 219.764069) 8958 POINT(839.113464 238.33548) 8959 POINT(931.100769 421.007996) 8960 POINT(404.325165 831.187073) 8961 POINT(260.523987 281.836182) 8962 POINT(150.154221 873.425171) 8963 POINT(632.56366 331.417938) 8964 POINT(589.017395 583.494812) 8965 POINT(71.8531799 940.857361) 8966 POINT(339.742401 712.279602) 8967 POINT(308.451599 822.348755) 8968 POINT(767.700562 609.657471) 8969 POINT(932.204651 327.578827) 8970 POINT(479.758087 879.442261) 8971 POINT(357.89444 138.448273) 8972 POINT(39.8786621 657.518494) 8973 POINT(44.9692688 611.948914) 8974 POINT(110.065842 809.425354) 8975 POINT(966.201904 799.705078) 8976 POINT(453.560577 201.344421) 8977 POINT(205.445877 934.114075) 8978 POINT(953.629028 51.8153) 8979 POINT(821.88147 395.681488) 8980 POINT(295.831604 760.572327) 8981 POINT(111.020615 54.1403084) 8982 POINT(981.428955 466.340881) 8983 POINT(63.6571655 629.000183) 8984 POINT(334.746277 478.53009) 8985 POINT(943.414978 828.639771) 8986 POINT(541.208618 120.433685) 8987 POINT(320.189667 501.913116) 8988 POINT(111.816681 16.3352928) 8989 POINT(787.364441 639.089172) 8990 POINT(573.631348 444.976074) 8991 POINT(710.083191 572.00885) 8992 POINT(397.064972 700.968445) 8993 POINT(283.097168 194.477448) 8994 POINT(905.264343 978.345093) 8995 POINT(580.895081 16.591362) 8996 POINT(87.5544815 781.554993) 8997 POINT(149.239655 710.022888) 8998 POINT(229.868423 334.524872) 8999 POINT(583.248718 839.988525) 9000 POINT(155.509018 594.179077) 9001 POINT(858.284607 324.050079) 9002 POINT(667.794189 867.97467) 9003 POINT(399.781982 934.026123) 9004 POINT(733.575317 413.092651) 9005 POINT(798.513916 756.719788) 9006 POINT(727.85675 876.102905) 9007 POINT(78.5468369 859.130188) 9008 POINT(62.4789124 774.970032) 9009 POINT(714.276917 637.15564) 9010 POINT(86.8804474 79.6124802) 9011 POINT(456.608673 151.995041) 9012 POINT(820.268799 102.900299) 9013 POINT(80.7829819 629.613708) 9014 POINT(849.174805 551.646118) 9015 POINT(601.975952 685.483826) 9016 POINT(302.542145 528.095764) 9017 POINT(340.07428 474.691956) 9018 POINT(851.525208 228.574921) 9019 POINT(550.624268 107.402466) 9020 POINT(29.484642 909.836243) 9021 POINT(601.603027 328.178528) 9022 POINT(138.850052 628.43689) 9023 POINT(870.262085 667.01532) 9024 POINT(618.258789 187.956711) 9025 POINT(493.844696 327.989685) 9026 POINT(951.497375 427.446991) 9027 POINT(743.61676 801.648438) 9028 POINT(178.216019 367.225189) 9029 POINT(342.637695 148.748596) 9030 POINT(437.224396 100.663681) 9031 POINT(331.403809 700.450928) 9032 POINT(61.6054955 629.246826) 9033 POINT(747.446045 413.909485) 9034 POINT(829.223511 919.811218) 9035 POINT(148.774521 688.363037) 9036 POINT(533.896729 295.069489) 9037 POINT(928.50116 226.931458) 9038 POINT(16.1281147 219.421005) 9039 POINT(68.9199295 680.565796) 9040 POINT(815.528564 620.454651) 9041 POINT(925.785156 755.859314) 9042 POINT(270.753265 991.869751) 9043 POINT(353.641571 146.162659) 9044 POINT(990.843262 695.816956) 9045 POINT(845.077698 759.769226) 9046 POINT(401.394531 552.555176) 9047 POINT(803.083069 989.572205) 9048 POINT(480.157959 44.1248779) 9049 POINT(866.793823 180.88887) 9050 POINT(742.830872 228.365692) 9051 POINT(715.448792 509.084625) 9052 POINT(127.37336 862.592834) 9053 POINT(660.10022 442.804504) 9054 POINT(213.746033 765.762695) 9055 POINT(852.41864 124.26458) 9056 POINT(468.212891 237.786682) 9057 POINT(177.804245 893.016296) 9058 POINT(133.10376 429.210052) 9059 POINT(17.1014824 877.356445) 9060 POINT(413.131805 78.8005371) 9061 POINT(546.767578 907.207825) 9062 POINT(610.08313 566.347473) 9063 POINT(168.751465 808.576904) 9064 POINT(404.130981 959.454285) 9065 POINT(914.104675 532.944763) 9066 POINT(100.499504 753.22052) 9067 POINT(222.105316 181.155365) 9068 POINT(86.1551971 537.999023) 9069 POINT(661.183655 192.121597) 9070 POINT(157.207458 501.04248) 9071 POINT(809.081055 189.208817) 9072 POINT(671.451294 731.606934) 9073 POINT(355.456085 884.323853) 9074 POINT(492.802765 905.378113) 9075 POINT(316.71109 220.015442) 9076 POINT(469.206665 362.961823) 9077 POINT(174.397552 537.378418) 9078 POINT(220.01001 549.303284) 9079 POINT(457.566437 961.977051) 9080 POINT(502.983612 567.554016) 9081 POINT(306.351959 636.712891) 9082 POINT(538.463013 434.008575) 9083 POINT(477.560242 650.537231) 9084 POINT(744.911804 852.824646) 9085 POINT(9.82753181 31.7486343) 9086 POINT(196.15625 703.478577) 9087 POINT(860.90271 526.548279) 9088 POINT(258.293945 334.0914) 9089 POINT(595.801697 865.402344) 9090 POINT(769.664368 454.293823) 9091 POINT(53.1121178 145.057526) 9092 POINT(459.227386 337.2276) 9093 POINT(586.84967 901.874084) 9094 POINT(179.298828 977.264404) 9095 POINT(290.36911 517.209106) 9096 POINT(783.038696 254.356186) 9097 POINT(702.41925 138.248932) 9098 POINT(883.689209 364.520691) 9099 POINT(97.1340866 193.934311) 9100 POINT(272.773315 266.358154) 9101 POINT(121.331894 477.044098) 9102 POINT(882.849426 533.848511) 9103 POINT(393.831512 307.330475) 9104 POINT(994.678101 304.78476) 9105 POINT(680.59845 409.681519) 9106 POINT(999.60614 371.472229) 9107 POINT(442.53595 274.104126) 9108 POINT(729.560242 415.801483) 9109 POINT(283.895416 114.970291) 9110 POINT(906.340881 875.150818) 9111 POINT(50.9792824 335.181854) 9112 POINT(89.1002121 510.081451) 9113 POINT(813.555603 112.033546) 9114 POINT(17.3139687 891.368835) 9115 POINT(553.829895 356.567383) 9116 POINT(62.6430321 335.103882) 9117 POINT(266.684296 623.715637) 9118 POINT(676.411133 283.566132) 9119 POINT(95.0784378 348.75177) 9120 POINT(12.686677 390.103699) 9121 POINT(669.02124 104.358421) 9122 POINT(35.97332 142.764694) 9123 POINT(646.49707 975.458191) 9124 POINT(306.23172 418.956085) 9125 POINT(559.4245 964.93512) 9126 POINT(644.439758 957.616089) 9127 POINT(14.5220919 917.23114) 9128 POINT(94.3520279 62.5699196) 9129 POINT(483.362152 388.883942) 9130 POINT(38.8560829 497.805878) 9131 POINT(811.542358 331.355042) 9132 POINT(233.791534 229.902344) 9133 POINT(985.554016 273.58316) 9134 POINT(572.868408 532.915405) 9135 POINT(997.459595 806.815063) 9136 POINT(982.087036 755.496338) 9137 POINT(49.9145622 755.262268) 9138 POINT(301.644958 408.256866) 9139 POINT(133.518066 151.488159) 9140 POINT(891.662781 951.481567) 9141 POINT(799.204773 479.244995) 9142 POINT(992.237305 929.859619) 9143 POINT(932.785461 68.4802017) 9144 POINT(278.537811 733.268982) 9145 POINT(537.31012 762.771362) 9146 POINT(231.213867 972.701172) 9147 POINT(40.2984123 279.50058) 9148 POINT(747.731873 100.706993) 9149 POINT(893.817871 64.2476959) 9150 POINT(160.967438 719.440308) 9151 POINT(230.769516 935.393188) 9152 POINT(520.151855 890.25769) 9153 POINT(913.575928 720.624817) 9154 POINT(591.920532 461.32251) 9155 POINT(372.88559 217.418182) 9156 POINT(724.68512 878.790344) 9157 POINT(423.173462 743.707092) 9158 POINT(109.921135 448.593994) 9159 POINT(576.609192 877.606628) 9160 POINT(394.422211 515.877075) 9161 POINT(901.789612 576.545105) 9162 POINT(326.442596 364.672852) 9163 POINT(913.528809 92.4856949) 9164 POINT(637.376099 789.016968) 9165 POINT(385.616669 102.667252) 9166 POINT(603.771667 616.490906) 9167 POINT(980.185669 411.699188) 9168 POINT(339.760895 985.002014) 9169 POINT(643.070679 873.757751) 9170 POINT(428.188324 782.833618) 9171 POINT(360.437775 771.524719) 9172 POINT(803.838074 400.67807) 9173 POINT(972.259827 475.488068) 9174 POINT(101.212852 243.16983) 9175 POINT(735.304932 513.015442) 9176 POINT(922.533264 377.643494) 9177 POINT(492.690033 186.562332) 9178 POINT(572.313416 221.376038) 9179 POINT(987.371277 95.4698868) 9180 POINT(849.4729 387.966278) 9181 POINT(729.943909 602.638184) 9182 POINT(46.040844 221.925797) 9183 POINT(151.704376 728.162354) 9184 POINT(635.783997 281.790497) 9185 POINT(625.07782 694.635681) 9186 POINT(462.374847 110.527107) 9187 POINT(476.382874 456.73941) 9188 POINT(973.947083 222.740921) 9189 POINT(839.738831 850.048523) 9190 POINT(71.1380386 896.855957) 9191 POINT(173.107727 335.418274) 9192 POINT(14.186224 283.325012) 9193 POINT(373.511841 806.224854) 9194 POINT(99.6533661 613.94751) 9195 POINT(662.004517 192.096527) 9196 POINT(200.326782 150.069107) 9197 POINT(61.7648048 26.1833344) 9198 POINT(947.391602 556.970825) 9199 POINT(244.607635 150.710739) 9200 POINT(209.745346 896.915955) 9201 POINT(480.267273 990.385559) 9202 POINT(432.175507 543.527283) 9203 POINT(175.149124 513.657837) 9204 POINT(375.983124 325.449005) 9205 POINT(147.115997 81.9844971) 9206 POINT(359.577209 788.276306) 9207 POINT(42.6587486 826.819336) 9208 POINT(422.788208 941.798218) 9209 POINT(683.009033 228.421555) 9210 POINT(90.4667511 446.606384) 9211 POINT(225.013977 950.704956) 9212 POINT(944.798157 242.621414) 9213 POINT(767.666992 228.846054) 9214 POINT(841.239014 875.233765) 9215 POINT(930.961609 743.459961) 9216 POINT(832.769165 616.343506) 9217 POINT(313.208282 744.6828) 9218 POINT(167.066666 182.024979) 9219 POINT(7.26571608 524.9552) 9220 POINT(760.203857 830.876099) 9221 POINT(264.544037 259.774384) 9222 POINT(450.598053 693.00293) 9223 POINT(255.519043 835.906799) 9224 POINT(923.424622 775.32843) 9225 POINT(832.363647 926.877197) 9226 POINT(246.837738 551.411438) 9227 POINT(476.7883 131.948837) 9228 POINT(458.584839 850.758911) 9229 POINT(766.042358 108.890785) 9230 POINT(19.5192719 781.875732) 9231 POINT(842.146118 959.808044) 9232 POINT(346.806427 163.807373) 9233 POINT(481.809265 596.052917) 9234 POINT(145.098755 802.11261) 9235 POINT(473.275299 851.207458) 9236 POINT(162.575638 467.085846) 9237 POINT(475.77005 934.432739) 9238 POINT(57.5690422 545.305237) 9239 POINT(309.714813 639.851379) 9240 POINT(720.726501 611.49469) 9241 POINT(471.890533 36.4076042) 9242 POINT(60.6141853 68.1741333) 9243 POINT(437.94751 157.820999) 9244 POINT(533.784912 128.17099) 9245 POINT(181.800476 260.409668) 9246 POINT(643.194214 762.938293) 9247 POINT(62.4152565 299.936646) 9248 POINT(4.1428709 441.564209) 9249 POINT(386.288483 445.080017) 9250 POINT(100.470802 65.7757034) 9251 POINT(209.677521 258.119324) 9252 POINT(444.476685 130.173599) 9253 POINT(287.614349 962.070068) 9254 POINT(884.054138 860.055481) 9255 POINT(74.3137512 322.510223) 9256 POINT(345.019196 597.770996) 9257 POINT(727.274475 712.081238) 9258 POINT(383.872711 609.528503) 9259 POINT(638.802063 22.0841484) 9260 POINT(787.740601 495.471283) 9261 POINT(915.612488 130.335526) 9262 POINT(778.53656 624.827332) 9263 POINT(829.489807 534.71875) 9264 POINT(545.188477 243.802383) 9265 POINT(777.676453 690.521118) 9266 POINT(181.886124 766.040649) 9267 POINT(6.90385485 235.158325) 9268 POINT(195.682053 43.9652863) 9269 POINT(883.98053 100.358765) 9270 POINT(560.488892 314.790649) 9271 POINT(31.0328007 969.037781) 9272 POINT(536.75238 838.764038) 9273 POINT(205.337692 367.286469) 9274 POINT(800.165039 711.156799) 9275 POINT(490.843536 142.108109) 9276 POINT(685.163635 786.224121) 9277 POINT(607.687195 179.361008) 9278 POINT(859.19635 343.952911) 9279 POINT(942.180115 996.032043) 9280 POINT(514.547791 942.707703) 9281 POINT(85.8494263 594.327026) 9282 POINT(161.689301 607.278564) 9283 POINT(159.323776 505.594971) 9284 POINT(500.629181 17.3719139) 9285 POINT(224.396774 858.90564) 9286 POINT(256.637543 991.930298) 9287 POINT(472.877014 176.902664) 9288 POINT(619.21106 256.10675) 9289 POINT(269.338959 290.70575) 9290 POINT(296.545715 67.1715546) 9291 POINT(240.266098 652.11322) 9292 POINT(673.541565 740.627441) 9293 POINT(496.077698 546.764038) 9294 POINT(74.0492783 826.525269) 9295 POINT(375.040863 433.479126) 9296 POINT(315.371979 647.185425) 9297 POINT(267.093872 275.569336) 9298 POINT(195.784348 20.6655483) 9299 POINT(647.282043 227.949387) 9300 POINT(67.9652634 299.400665) 9301 POINT(287.088135 103.530205) 9302 POINT(469.831787 781.15094) 9303 POINT(159.809692 383.310516) 9304 POINT(859.508179 171.008621) 9305 POINT(83.8040161 142.195602) 9306 POINT(736.380615 50.6540108) 9307 POINT(3.51971936 637.820007) 9308 POINT(931.825684 346.85199) 9309 POINT(669.519592 719.139648) 9310 POINT(180.825485 78.5073242) 9311 POINT(600.056946 937.513672) 9312 POINT(501.991638 334.23822) 9313 POINT(671.202576 833.273621) 9314 POINT(634.334229 514.799133) 9315 POINT(651.167297 388.843964) 9316 POINT(223.375427 531.822021) 9317 POINT(956.580566 914.449768) 9318 POINT(488.990417 441.916626) 9319 POINT(931.453857 509.03363) 9320 POINT(317.858185 109.4618) 9321 POINT(928.887024 827.572998) 9322 POINT(632.937378 19.3486652) 9323 POINT(384.894287 812.505127) 9324 POINT(232.399887 530.036499) 9325 POINT(214.800385 703.037537) 9326 POINT(245.520111 285.723358) 9327 POINT(115.360229 428.972961) 9328 POINT(810.83136 453.000824) 9329 POINT(428.101837 98.1588593) 9330 POINT(383.241608 61.4709511) 9331 POINT(897.512085 887.262573) 9332 POINT(265.692444 299.4935) 9333 POINT(55.8357582 198.370331) 9334 POINT(34.4203415 826.165588) 9335 POINT(776.824951 418.646332) 9336 POINT(685.132019 330.103699) 9337 POINT(284.263519 252.308029) 9338 POINT(723.756592 906.514099) 9339 POINT(176.135101 134.463379) 9340 POINT(416.331085 688.939392) 9341 POINT(758.660034 201.506805) 9342 POINT(807.5849 304.123779) 9343 POINT(680.978088 215.016357) 9344 POINT(429.60498 501.430603) 9345 POINT(854.009888 513.283447) 9346 POINT(316.410614 16.595768) 9347 POINT(337.123657 810.215637) 9348 POINT(686.287598 778.33905) 9349 POINT(22.9175072 554.483887) 9350 POINT(573.398865 761.153259) 9351 POINT(861.094666 697.166992) 9352 POINT(608.693359 574.73584) 9353 POINT(182.554352 454.122772) 9354 POINT(845.804443 596.929993) 9355 POINT(638.0896 865.876282) 9356 POINT(981.900513 580.246826) 9357 POINT(904.223022 294.545898) 9358 POINT(970.901123 60.2064362) 9359 POINT(761.612732 111.470642) 9360 POINT(4.79274178 75.6544495) 9361 POINT(377.126587 643.596985) 9362 POINT(238.790283 76.2966156) 9363 POINT(655.246582 399.811859) 9364 POINT(751.742798 980.985229) 9365 POINT(732.189148 894.372131) 9366 POINT(811.537292 92.4515991) 9367 POINT(9.38602352 243.105896) 9368 POINT(6.51584244 541.49884) 9369 POINT(332.281067 614.496399) 9370 POINT(611.406372 588.060547) 9371 POINT(864.385376 573.08667) 9372 POINT(286.416504 50.5363731) 9373 POINT(61.9612122 123.459564) 9374 POINT(920.533813 361.593811) 9375 POINT(676.452332 631.580933) 9376 POINT(887.399048 891.972046) 9377 POINT(482.85434 814.398621) 9378 POINT(900.198975 768.146301) 9379 POINT(113.756271 211.735977) 9380 POINT(949.803955 100.053459) 9381 POINT(960.042297 315.816132) 9382 POINT(859.925537 387.104614) 9383 POINT(147.600098 177.919937) 9384 POINT(869.58197 580.703735) 9385 POINT(510.35257 449.076538) 9386 POINT(384.962463 436.374146) 9387 POINT(727.139282 568.279602) 9388 POINT(861.308655 115.89785) 9389 POINT(175.188492 79.1217346) 9390 POINT(365.266846 617.766785) 9391 POINT(956.012695 741.168335) 9392 POINT(116.991844 281.515167) 9393 POINT(178.550385 378.701324) 9394 POINT(559.929871 977.565002) 9395 POINT(225.383774 965.132629) 9396 POINT(798.615601 449.10849) 9397 POINT(995.156921 730.512451) 9398 POINT(578.05835 796.940063) 9399 POINT(200.273392 571.872864) 9400 POINT(52.5629425 113.319527) 9401 POINT(724.082703 476.996979) 9402 POINT(60.443531 488.818848) 9403 POINT(904.698181 292.569427) 9404 POINT(340.50293 889.209656) 9405 POINT(840.086304 994.144714) 9406 POINT(405.920105 970.95459) 9407 POINT(406.010742 680.193481) 9408 POINT(644.023376 657.563538) 9409 POINT(477.81012 113.503082) 9410 POINT(602.138367 9.37436867) 9411 POINT(759.971924 583.896851) 9412 POINT(519.236572 501.263092) 9413 POINT(893.292603 745.695435) 9414 POINT(592.542542 582.037598) 9415 POINT(945.466858 486.302307) 9416 POINT(552.779846 272.117035) 9417 POINT(642.739624 669.101501) 9418 POINT(139.668777 399.454865) 9419 POINT(491.410248 140.493378) 9420 POINT(502.078064 855.071594) 9421 POINT(320.260437 838.95459) 9422 POINT(329.446869 337.180756) 9423 POINT(378.269012 350.726807) 9424 POINT(290.431732 455.516479) 9425 POINT(404.281891 244.963516) 9426 POINT(702.009827 684.50769) 9427 POINT(582.762817 929.370361) 9428 POINT(71.4375763 525.439026) 9429 POINT(876.611084 299.665924) 9430 POINT(491.585327 794.352844) 9431 POINT(326.686096 832.292847) 9432 POINT(777.446045 265.468781) 9433 POINT(798.625916 975.073853) 9434 POINT(611.364685 931.242676) 9435 POINT(689.428406 225.911087) 9436 POINT(923.203491 992.394226) 9437 POINT(955.829407 421.772949) 9438 POINT(828.813354 857.465698) 9439 POINT(748.651489 771.324402) 9440 POINT(948.523987 45.5214272) 9441 POINT(15.0129194 602.487305) 9442 POINT(42.709259 971.876282) 9443 POINT(824.716064 724.444702) 9444 POINT(52.7790871 320.284363) 9445 POINT(377.529846 551.225708) 9446 POINT(695.264343 621.498108) 9447 POINT(721.832703 545.755371) 9448 POINT(299.190948 963.805542) 9449 POINT(57.6901932 229.474548) 9450 POINT(131.005081 542.98761) 9451 POINT(82.5442276 589.310547) 9452 POINT(748.358276 244.644089) 9453 POINT(467.043549 592.504883) 9454 POINT(148.658798 259.185211) 9455 POINT(102.030525 97.810791) 9456 POINT(518.140625 117.758041) 9457 POINT(943.326477 401.713623) 9458 POINT(83.112114 655.392273) 9459 POINT(884.85907 169.069901) 9460 POINT(960.971252 545.746948) 9461 POINT(227.1073 523.019104) 9462 POINT(501.578491 890.678955) 9463 POINT(669.187012 578.912659) 9464 POINT(599.864929 208.728699) 9465 POINT(859.669983 936.682922) 9466 POINT(1.43242729 261.440765) 9467 POINT(992.053589 346.520294) 9468 POINT(70.8313217 837.745178) 9469 POINT(652.435913 450.532928) 9470 POINT(656.737427 627.585571) 9471 POINT(624.285339 710.467407) 9472 POINT(82.1008606 40.3790741) 9473 POINT(961.230347 156.411972) 9474 POINT(376.316071 536.1474) 9475 POINT(764.667908 747.169983) 9476 POINT(319.514587 152.304031) 9477 POINT(487.958984 998.779785) 9478 POINT(808.280396 232.787415) 9479 POINT(550.421875 208.191086) 9480 POINT(302.625397 344.779022) 9481 POINT(727.765808 434.746521) 9482 POINT(454.260468 338.555969) 9483 POINT(414.65329 278.827698) 9484 POINT(427.502899 945.637085) 9485 POINT(981.503845 56.4179115) 9486 POINT(341.141022 87.4543304) 9487 POINT(201.331436 867.627808) 9488 POINT(819.929749 690.107239) 9489 POINT(61.3565598 219.284042) 9490 POINT(938.934387 669.748474) 9491 POINT(234.47966 724.964478) 9492 POINT(166.622269 407.84845) 9493 POINT(431.705078 174.484604) 9494 POINT(10.4896965 406.651184) 9495 POINT(730.64801 158.519058) 9496 POINT(392.304352 473.861908) 9497 POINT(547.846313 938.135864) 9498 POINT(732.058044 193.903259) 9499 POINT(42.369133 364.503784) 9500 POINT(906.907349 203.488815) 9501 POINT(581.922546 147.505264) 9502 POINT(733.303345 894.948059) 9503 POINT(225.181274 425.67868) 9504 POINT(159.865891 255.488297) 9505 POINT(558.432251 451.672119) 9506 POINT(671.170227 138.808624) 9507 POINT(331.936066 840.696045) 9508 POINT(407.423401 22.2306366) 9509 POINT(160.949158 563.413391) 9510 POINT(574.088074 283.439087) 9511 POINT(655.490356 44.031002) 9512 POINT(924.057068 932.328491) 9513 POINT(117.185219 959.406067) 9514 POINT(471.314117 142.238327) 9515 POINT(864.515076 751.734009) 9516 POINT(370.577148 568.569458) 9517 POINT(121.28907 357.438171) 9518 POINT(756.785461 439.575867) 9519 POINT(607.036499 125.4674) 9520 POINT(669.151123 512.80072) 9521 POINT(710.28186 522.173523) 9522 POINT(327.672516 860.595093) 9523 POINT(692.458374 685.764771) 9524 POINT(529.447632 869.457336) 9525 POINT(375.788239 655.11499) 9526 POINT(784.89502 991.222839) 9527 POINT(405.195557 625.178162) 9528 POINT(720.29187 490.713348) 9529 POINT(462.728729 609.764282) 9530 POINT(886.184265 406.228455) 9531 POINT(851.683655 672.955505) 9532 POINT(287.668121 28.7745476) 9533 POINT(83.3980942 439.57666) 9534 POINT(1.84230864 656.339172) 9535 POINT(497.411224 945.115784) 9536 POINT(182.600708 74.6210251) 9537 POINT(358.360779 334.161316) 9538 POINT(539.172791 929.83313) 9539 POINT(211.753525 277.268188) 9540 POINT(181.390976 807.546143) 9541 POINT(784.853943 828.279541) 9542 POINT(173.625443 719.695129) 9543 POINT(205.771179 382.245453) 9544 POINT(555.881531 776.128052) 9545 POINT(428.894867 278.543823) 9546 POINT(253.018127 914.334473) 9547 POINT(221.76799 800.600403) 9548 POINT(682.865845 658.809021) 9549 POINT(939.048889 994.32312) 9550 POINT(925.77063 348.027985) 9551 POINT(213.286423 19.239996) 9552 POINT(669.455444 111.046021) 9553 POINT(87.8197784 82.2113419) 9554 POINT(384.903534 996.666321) 9555 POINT(540.351318 321.947968) 9556 POINT(115.163109 96.0365906) 9557 POINT(660.885071 17.5170536) 9558 POINT(116.627777 685.044006) 9559 POINT(397.15567 905.274353) 9560 POINT(331.655548 417.311554) 9561 POINT(34.9037361 191.583923) 9562 POINT(195.668289 383.849182) 9563 POINT(788.014343 544.245667) 9564 POINT(697.573547 524.026367) 9565 POINT(711.383301 200.353897) 9566 POINT(479.038116 917.673279) 9567 POINT(872.295837 624.576843) 9568 POINT(338.514435 43.5707817) 9569 POINT(407.101105 437.435516) 9570 POINT(15.7974901 179.772903) 9571 POINT(910.173279 671.542725) 9572 POINT(991.215576 911.15741) 9573 POINT(40.8315277 634.042236) 9574 POINT(112.404121 754.982971) 9575 POINT(358.419861 600.392578) 9576 POINT(736.173889 412.336243) 9577 POINT(101.639023 348.516479) 9578 POINT(271.580383 189.09198) 9579 POINT(889.10675 789.168762) 9580 POINT(264.381042 931.923828) 9581 POINT(435.755249 49.7573853) 9582 POINT(657.19397 11.155591) 9583 POINT(233.943054 732.016174) 9584 POINT(481.549713 711.623108) 9585 POINT(447.065643 361.721313) 9586 POINT(828.468445 14.6385012) 9587 POINT(793.132141 469.546875) 9588 POINT(547.151428 458.649963) 9589 POINT(70.4889374 240.265594) 9590 POINT(233.911072 233.938309) 9591 POINT(889.999573 212.549301) 9592 POINT(895.78186 218.970535) 9593 POINT(648.040894 338.958405) 9594 POINT(358.664398 514.759521) 9595 POINT(401.282166 576.309875) 9596 POINT(394.81485 531.294312) 9597 POINT(14.1313696 587.078003) 9598 POINT(478.560303 569.969971) 9599 POINT(247.849655 625.039612) 9600 POINT(555.001526 511.754333) 9601 POINT(679.651367 50.8773918) 9602 POINT(689.973267 936.985168) 9603 POINT(891.763367 489.376099) 9604 POINT(629.61615 184.247925) 9605 POINT(993.665283 478.29071) 9606 POINT(256.642029 308.391663) 9607 POINT(552.959534 664.657349) 9608 POINT(512.946411 67.6977386) 9609 POINT(557.03009 537.610718) 9610 POINT(342.947296 294.433044) 9611 POINT(332.477478 223.640594) 9612 POINT(580.369934 759.033875) 9613 POINT(964.022827 652.266907) 9614 POINT(887.7052 794.147095) 9615 POINT(809.034851 84.5656204) 9616 POINT(999.955261 9.48596764) 9617 POINT(156.063065 506.685822) 9618 POINT(713.355042 801.356445) 9619 POINT(961.887207 163.938828) 9620 POINT(589.469727 581.813416) 9621 POINT(285.878174 752.31781) 9622 POINT(962.490784 652.379456) 9623 POINT(465.288727 713.141052) 9624 POINT(992.873413 997.391052) 9625 POINT(10.963172 178.263565) 9626 POINT(607.006836 434.241364) 9627 POINT(498.507263 388.938141) 9628 POINT(806.822266 134.606171) 9629 POINT(561.948364 627.538269) 9630 POINT(84.6968384 515.330566) 9631 POINT(220.226318 640.2005) 9632 POINT(300.399597 523.813171) 9633 POINT(764.493225 237.860107) 9634 POINT(83.9673843 934.85907) 9635 POINT(967.302368 806.613953) 9636 POINT(540.240112 99.1291885) 9637 POINT(432.583771 164.953476) 9638 POINT(119.396248 693.14856) 9639 POINT(55.2264748 919.890686) 9640 POINT(58.4065132 113.644852) 9641 POINT(196.619095 806.70752) 9642 POINT(819.186646 821.680786) 9643 POINT(781.273132 573.966553) 9644 POINT(681.822815 902.162598) 9645 POINT(881.429077 688.132751) 9646 POINT(780.138794 480.010834) 9647 POINT(861.202087 387.89621) 9648 POINT(779.765503 184.363998) 9649 POINT(7.37426996 589.909912) 9650 POINT(436.580536 226.060287) 9651 POINT(66.5110474 523.634949) 9652 POINT(979.857727 641.346924) 9653 POINT(851.936707 207.427002) 9654 POINT(636.768433 36.9678192) 9655 POINT(271.620392 440.623108) 9656 POINT(353.206909 569.762329) 9657 POINT(779.717102 612.551392) 9658 POINT(523.59259 619.590759) 9659 POINT(469.004211 570.063843) 9660 POINT(175.772842 520.319031) 9661 POINT(225.513428 56.9861946) 9662 POINT(875.986938 42.9146652) 9663 POINT(565.164062 874.013672) 9664 POINT(635.747192 961.215149) 9665 POINT(798.161987 203.911606) 9666 POINT(283.267944 749.042236) 9667 POINT(931.474731 317.880127) 9668 POINT(275.671356 172.092331) 9669 POINT(462.081329 703.712402) 9670 POINT(396.69577 555.09613) 9671 POINT(751.315125 129.648499) 9672 POINT(533.2146 770.399109) 9673 POINT(648.965759 139.945908) 9674 POINT(30.8703861 345.28595) 9675 POINT(178.528824 345.135223) 9676 POINT(475.980499 499.588531) 9677 POINT(453.834747 763.30542) 9678 POINT(72.1469193 770.551697) 9679 POINT(202.142242 545.79303) 9680 POINT(713.403625 167.363831) 9681 POINT(777.65033 104.185402) 9682 POINT(992.074646 422.611755) 9683 POINT(898.401733 884.069092) 9684 POINT(512.745239 912.225769) 9685 POINT(392.974274 508.557068) 9686 POINT(260.933746 629.906799) 9687 POINT(443.572693 461.043549) 9688 POINT(346.390808 297.863586) 9689 POINT(429.64328 877.21405) 9690 POINT(109.764328 234.844696) 9691 POINT(859.577454 872.052917) 9692 POINT(454.098358 87.4706802) 9693 POINT(704.198975 405.049744) 9694 POINT(898.853821 454.916565) 9695 POINT(969.430847 268.229889) 9696 POINT(516.541687 933.855957) 9697 POINT(649.817139 914.87854) 9698 POINT(816.466858 204.667252) 9699 POINT(450.565796 595.365723) 9700 POINT(205.437653 636.259766) 9701 POINT(342.73819 459.416656) 9702 POINT(753.674438 61.1680527) 9703 POINT(191.523697 766.230713) 9704 POINT(200.741684 61.072876) 9705 POINT(266.709045 225.387283) 9706 POINT(979.457458 392.553467) 9707 POINT(381.117035 398.462158) 9708 POINT(246.84256 301.196747) 9709 POINT(8.70419598 415.318878) 9710 POINT(674.832153 37.347683) 9711 POINT(889.055176 407.357574) 9712 POINT(957.380554 157.570679) 9713 POINT(37.2015839 705.454834) 9714 POINT(475.562378 321.721008) 9715 POINT(533.155945 181.386978) 9716 POINT(372.260193 566.432251) 9717 POINT(78.5467606 82.2961121) 9718 POINT(920.097717 132.479675) 9719 POINT(770.650146 287.963959) 9720 POINT(720.62323 167.165634) 9721 POINT(377.446533 345.648163) 9722 POINT(102.693016 225.507675) 9723 POINT(199.716431 657.992981) 9724 POINT(449.993011 808.131409) 9725 POINT(304.391235 332.647247) 9726 POINT(891.237671 942.542053) 9727 POINT(12.2698612 979.935974) 9728 POINT(344.49704 421.660828) 9729 POINT(355.812439 965.090454) 9730 POINT(785.142761 33.578373) 9731 POINT(200.157562 597.618286) 9732 POINT(474.01889 364.436554) 9733 POINT(582.040955 551.496948) 9734 POINT(860.703552 337.86618) 9735 POINT(884.299316 550.720459) 9736 POINT(791.327393 15.7707481) 9737 POINT(873.637268 385.679352) 9738 POINT(279.676697 663.368896) 9739 POINT(609.943054 522.87915) 9740 POINT(425.674896 153.830536) 9741 POINT(338.425537 575.204407) 9742 POINT(521.380371 322.72644) 9743 POINT(831.088562 369.546631) 9744 POINT(109.05265 388.650055) 9745 POINT(209.567841 205.975708) 9746 POINT(839.446533 433.172943) 9747 POINT(93.2646484 586.235107) 9748 POINT(715.236267 720.80719) 9749 POINT(339.276428 403.270844) 9750 POINT(441.425354 268.52597) 9751 POINT(616.228882 547.498657) 9752 POINT(591.949707 115.932381) 9753 POINT(353.266327 584.918579) 9754 POINT(542.760864 663.278137) 9755 POINT(76.7910156 597.982239) 9756 POINT(222.921387 837.755371) 9757 POINT(967.810364 218.901642) 9758 POINT(756.228333 711.984802) 9759 POINT(396.844666 109.093636) 9760 POINT(769.301514 166.185883) 9761 POINT(804.266296 695.523621) 9762 POINT(243.74353 781.557922) 9763 POINT(252.823593 428.330658) 9764 POINT(208.85463 41.9622192) 9765 POINT(275.202637 503.379486) 9766 POINT(679.524902 159.736923) 9767 POINT(840.18335 243.022842) 9768 POINT(116.537682 125.691299) 9769 POINT(761.758606 758.720215) 9770 POINT(351.909424 499.925232) 9771 POINT(150.140198 256.223083) 9772 POINT(611.517639 736.642822) 9773 POINT(353.631104 279.404968) 9774 POINT(665.693542 590.741882) 9775 POINT(645.783264 229.711456) 9776 POINT(633.379639 145.449203) 9777 POINT(881.088806 817.484253) 9778 POINT(897.690796 878.053955) 9779 POINT(760.807983 387.550018) 9780 POINT(504.220825 734.901611) 9781 POINT(832.672363 768.560486) 9782 POINT(305.268372 597.918091) 9783 POINT(86.5018234 893.353577) 9784 POINT(683.521057 614.322388) 9785 POINT(22.7470036 661.422668) 9786 POINT(590.944214 340.774994) 9787 POINT(461.246796 615.418518) 9788 POINT(729.126099 375.532227) 9789 POINT(549.830933 998.054321) 9790 POINT(285.698151 360.403076) 9791 POINT(431.68457 676.07843) 9792 POINT(740.37561 812.21991) 9793 POINT(669.632202 561.965454) 9794 POINT(829.469421 965.552917) 9795 POINT(715.824585 345.13028) 9796 POINT(978.35199 589.562073) 9797 POINT(695.983337 141.899994) 9798 POINT(999.383484 887.847778) 9799 POINT(365.756775 681.904419) 9800 POINT(933.422668 47.2285423) 9801 POINT(938.371216 728.322449) 9802 POINT(864.572449 606.449158) 9803 POINT(301.265106 956.525146) 9804 POINT(841.692871 546.447937) 9805 POINT(986.5177 631.688965) 9806 POINT(631.022644 228.150665) 9807 POINT(765.518433 288.13681) 9808 POINT(539.682312 30.5987778) 9809 POINT(360.474213 644.359863) 9810 POINT(580.702698 670.978394) 9811 POINT(40.1508331 126.347214) 9812 POINT(590.482727 758.828125) 9813 POINT(658.950623 322.110901) 9814 POINT(806.298157 580.037842) 9815 POINT(449.424316 171.865417) 9816 POINT(814.851135 493.49054) 9817 POINT(859.108154 696.554138) 9818 POINT(596.195984 616.264526) 9819 POINT(281.800415 83.2886124) 9820 POINT(717.135681 774.738708) 9821 POINT(347.802094 246.379288) 9822 POINT(133.934769 501.896118) 9823 POINT(762.130005 849.218994) 9824 POINT(808.629883 299.385773) 9825 POINT(597.268921 753.178223) 9826 POINT(642.15564 480.901733) 9827 POINT(618.803467 18.3680191) 9828 POINT(499.893494 836.199036) 9829 POINT(137.51033 746.717896) 9830 POINT(223.160217 658.264099) 9831 POINT(107.585495 75.0319824) 9832 POINT(58.7743835 556.073547) 9833 POINT(623.133606 604.877075) 9834 POINT(426.500885 18.927803) 9835 POINT(577.493225 123.299828) 9836 POINT(112.312561 133.072952) 9837 POINT(344.166962 15.0645952) 9838 POINT(8.60018539 795.388794) 9839 POINT(793.957031 700.580017) 9840 POINT(308.400391 481.114319) 9841 POINT(488.37439 426.788849) 9842 POINT(440.215851 252.315155) 9843 POINT(270.638214 979.510315) 9844 POINT(47.020134 531.11261) 9845 POINT(826.854675 329.148529) 9846 POINT(464.638489 887.253113) 9847 POINT(803.659119 837.040833) 9848 POINT(641.074707 24.6894608) 9849 POINT(265.214935 672.367493) 9850 POINT(412.829071 508.386414) 9851 POINT(250.634766 270.45697) 9852 POINT(873.2724 903.090271) 9853 POINT(879.367981 519.097351) 9854 POINT(41.2739334 643.480835) 9855 POINT(351.777771 422.336151) 9856 POINT(678.222839 503.742096) 9857 POINT(638.010864 59.0633392) 9858 POINT(374.155273 258.560455) 9859 POINT(51.480999 39.9074402) 9860 POINT(597.844849 441.924835) 9861 POINT(3.09836364 449.730347) 9862 POINT(403.504974 820.52533) 9863 POINT(346.165558 539.011597) 9864 POINT(733.384766 751.315918) 9865 POINT(995.135132 556.017822) 9866 POINT(529.330811 324.835358) 9867 POINT(157.813828 968.833984) 9868 POINT(148.78627 584.709412) 9869 POINT(111.865578 553.693665) 9870 POINT(306.273376 27.5482349) 9871 POINT(112.490936 80.8100281) 9872 POINT(67.8503723 534.997864) 9873 POINT(696.950439 533.92865) 9874 POINT(404.173462 270.414276) 9875 POINT(389.290344 393.580017) 9876 POINT(751.568237 426.545776) 9877 POINT(969.475769 700.594604) 9878 POINT(686.998413 968.394226) 9879 POINT(997.521912 615.595215) 9880 POINT(642.2052 248.371155) 9881 POINT(945.648315 487.241638) 9882 POINT(967.89856 40.8807793) 9883 POINT(938.594543 37.9550629) 9884 POINT(217.160172 753.092346) 9885 POINT(910.787964 937.289978) 9886 POINT(307.732391 311.068329) 9887 POINT(713.92627 542.281738) 9888 POINT(8.31832123 129.38472) 9889 POINT(932.73822 988.825317) 9890 POINT(690.222046 172.32962) 9891 POINT(551.35083 681.913757) 9892 POINT(411.562683 70.7319107) 9893 POINT(147.070084 884.486145) 9894 POINT(528.969177 626.121887) 9895 POINT(539.868591 889.427856) 9896 POINT(236.303238 509.545471) 9897 POINT(189.966034 787.284973) 9898 POINT(739.882141 132.859436) 9899 POINT(586.225647 239.47583) 9900 POINT(426.329041 263.264771) 9901 POINT(206.42569 824.805908) 9902 POINT(47.1367073 85.3533936) 9903 POINT(736.686523 353.146484) 9904 POINT(20.9833031 847.839478) 9905 POINT(319.444366 207.071915) 9906 POINT(781.610596 613.833435) 9907 POINT(943.498108 968.543274) 9908 POINT(219.607086 754.034607) 9909 POINT(310.073029 767.479187) 9910 POINT(677.805054 862.230713) 9911 POINT(797.926575 421.991974) 9912 POINT(362.392609 553.288574) 9913 POINT(528.775391 261.54422) 9914 POINT(78.5849686 837.314514) 9915 POINT(100.381203 785.270264) 9916 POINT(747.232117 302.392395) 9917 POINT(735.257019 24.8134689) 9918 POINT(516.640625 425.440491) 9919 POINT(393.020996 686.477966) 9920 POINT(464.843933 850.04834) 9921 POINT(646.947632 139.135864) 9922 POINT(857.39325 196.080734) 9923 POINT(741.374878 905.642822) 9924 POINT(853.402527 813.404846) 9925 POINT(465.576263 85.5999985) 9926 POINT(60.13871 166.971512) 9927 POINT(118.886955 680.882812) 9928 POINT(749.094727 188.95369) 9929 POINT(546.787903 972.789612) 9930 POINT(142.541641 792.627808) 9931 POINT(721.932007 286.924194) 9932 POINT(440.469177 789.714111) 9933 POINT(679.505188 820.612671) 9934 POINT(118.164803 56.1377258) 9935 POINT(422.729767 854.998779) 9936 POINT(122.142555 959.418823) 9937 POINT(149.749817 52.8104439) 9938 POINT(517.537292 693.564575) 9939 POINT(353.718353 591.622253) 9940 POINT(687.369568 304.454163) 9941 POINT(877.89386 305.355164) 9942 POINT(600.336243 260.947723) 9943 POINT(309.330444 523.481628) 9944 POINT(899.181152 505.597229) 9945 POINT(438.819824 893.295654) 9946 POINT(519.576843 965.807861) 9947 POINT(249.748688 646.63501) 9948 POINT(336.238586 624.130981) 9949 POINT(701.226013 795.212952) 9950 POINT(508.275604 928.226501) 9951 POINT(696.099731 890.456238) 9952 POINT(22.2483845 700.708008) 9953 POINT(155.322128 812.297974) 9954 POINT(624.872375 810.982788) 9955 POINT(217.678757 620.230408) 9956 POINT(316.726532 860.371948) 9957 POINT(737.416138 638.166504) 9958 POINT(715.766785 563.895935) 9959 POINT(529.17926 497.035004) 9960 POINT(470.09729 583.435364) 9961 POINT(105.403908 935.877441) 9962 POINT(31.6454124 364.434845) 9963 POINT(939.536072 389.517395) 9964 POINT(227.556061 279.451538) 9965 POINT(870.927917 160.221405) 9966 POINT(368.845276 704.820312) 9967 POINT(23.8715496 689.40509) 9968 POINT(3.82171082 810.306763) 9969 POINT(251.981995 786.199402) 9970 POINT(697.821289 975.260376) 9971 POINT(426.16922 821.063538) 9972 POINT(444.849091 148.498871) 9973 POINT(973.994507 808.71228) 9974 POINT(987.853699 823.622681) 9975 POINT(642.679626 955.140564) 9976 POINT(642.767273 927.956543) 9977 POINT(17.9320145 863.833191) 9978 POINT(340.453644 33.761055) 9979 POINT(484.698395 937.315735) 9980 POINT(876.755005 247.293594) 9981 POINT(990.721985 88.6366196) 9982 POINT(603.493774 657.879456) 9983 POINT(674.237915 225.39624) 9984 POINT(515.259521 719.180725) 9985 POINT(476.301727 884.409912) 9986 POINT(353.911987 662.728821) 9987 POINT(687.246887 191.481033) 9988 POINT(633.911194 424.556702) 9989 POINT(714.857788 77.1742477) 9990 POINT(508.906647 405.097473) 9991 POINT(526.415588 490.638702) 9992 POINT(978.680115 126.69014) 9993 POINT(353.329285 579.793213) 9994 POINT(853.861938 838.968201) 9995 POINT(579.236328 323.522369) 9996 POINT(135.267914 827.641846) 9997 POINT(812.004272 551.549438) 9998 POINT(459.811554 474.882324) 9999 POINT(96.8731232 327.571564) 10000 POINT(153.422318 508.466919) 10001 POINT(20.0481396 223.921188) 10002 POINT(304.07077 761.460999) 10003 POINT(115.525345 519.92688) 10004 POINT(418.807281 684.534241) 10005 POINT(887.059875 15.3913879) 10006 POINT(404.735413 739.701904) 10007 POINT(834.354309 184.910583) 10008 POINT(265.257263 228.631668) 10009 POINT(898.25946 293.474884) 10010 POINT(433.068542 532.58075) 10011 POINT(562.674683 849.902222) 10012 POINT(676.689392 767.062256) 10013 POINT(647.668518 158.749496) 10014 POINT(77.3637619 475.652771) 10015 POINT(353.993866 525.665222) 10016 POINT(440.64209 837.727051) 10017 POINT(956.653564 923.529358) 10018 POINT(397.696686 468.762634) 10019 POINT(355.618042 200.657242) 10020 POINT(284.355377 914.229492) 10021 POINT(464.458313 536.919739) 10022 POINT(33.0444412 434.635376) 10023 POINT(719.922607 173.582733) 10024 POINT(849.50116 346.324005) 10025 POINT(222.86142 68.3442993) 10026 POINT(400.574768 607.035278) 10027 POINT(647.02179 184.423752) 10028 POINT(843.119751 244.572098) 10029 POINT(878.851074 503.238159) 10030 POINT(961.475647 739.34375) 10031 POINT(758.451294 461.411163) 10032 POINT(340.011749 345.857056) 10033 POINT(487.217865 527.449768) 10034 POINT(218.517303 223.820328) 10035 POINT(537.613281 739.874695) 10036 POINT(5.78202152 936.448364) 10037 POINT(859.224304 680.998291) 10038 POINT(357.608887 542.476807) 10039 POINT(15.1142817 28.6374435) 10040 POINT(959.925232 980.594971) 10041 POINT(624.01709 247.183685) 10042 POINT(348.931213 432.406677) 10043 POINT(225.76004 400.596191) 10044 POINT(104.79052 705.16687) 10045 POINT(856.205994 509.647766) 10046 POINT(882.799133 641.577087) 10047 POINT(218.854233 366.356781) 10048 POINT(8.9555397 24.6525898) 10049 POINT(206.042221 557.837463) 10050 POINT(731.225708 175.505112) 10051 POINT(564.580383 453.268463) 10052 POINT(852.487915 355.859131) 10053 POINT(957.884216 650.42157) 10054 POINT(998.231995 490.902679) 10055 POINT(366.629303 456.929718) 10056 POINT(516.765137 567.950989) 10057 POINT(338.15033 256.565308) 10058 POINT(250.265442 179.289825) 10059 POINT(764.867432 458.212891) 10060 POINT(632.970947 41.0030136) 10061 POINT(695.712341 286.567047) 10062 POINT(702.660889 301.739807) 10063 POINT(791.723816 106.082939) 10064 POINT(291.080963 65.0309982) 10065 POINT(885.69342 696.214417) 10066 POINT(478.89859 685.332886) 10067 POINT(232.106842 854.960876) 10068 POINT(155.095139 101.503586) 10069 POINT(301.891693 603.317932) 10070 POINT(456.483582 172.561081) 10071 POINT(829.043884 815.110291) 10072 POINT(930.470886 750.627441) 10073 POINT(523.557495 290.231628) 10074 POINT(366.590729 26.8382454) 10075 POINT(775.870605 625.500916) 10076 POINT(486.155579 620.237) 10077 POINT(469.011993 982.772766) 10078 POINT(624.191284 440.436432) 10079 POINT(940.679138 290.830139) 10080 POINT(446.311798 675.909546) 10081 POINT(281.600189 93.8027649) 10082 POINT(831.195862 365.580933) 10083 POINT(679.867065 237.860229) 10084 POINT(735.775513 66.9642792) 10085 POINT(912.73175 698.834534) 10086 POINT(17.2197227 695.102539) 10087 POINT(415.011902 940.955078) 10088 POINT(388.481079 869.294556) 10089 POINT(512.26886 371.381683) 10090 POINT(460.89621 155.958481) 10091 POINT(370.92923 342.677032) 10092 POINT(909.533386 663.520752) 10093 POINT(288.279266 147.367691) 10094 POINT(369.234924 147.097595) 10095 POINT(2.65458059 952.531006) 10096 POINT(619.302368 375.739838) 10097 POINT(456.180054 310.76413) 10098 POINT(783.341248 152.560287) 10099 POINT(675.222229 945.4198) 10100 POINT(701.860229 348.187927) 10101 POINT(261.555695 896.728394) 10102 POINT(825.883911 291.366638) 10103 POINT(102.497566 801.100647) 10104 POINT(130.277252 178.420441) 10105 POINT(831.441467 293.863708) 10106 POINT(809.018188 27.6610374) 10107 POINT(899.951294 26.9098091) 10108 POINT(247.737961 468.15329) 10109 POINT(785.62146 93.8248825) 10110 POINT(781.042236 57.7450294) 10111 POINT(361.147705 288.248993) 10112 POINT(546.133179 256.698395) 10113 POINT(122.498016 384.34552) 10114 POINT(805.884338 915.045105) 10115 POINT(228.851349 834.803101) 10116 POINT(102.730621 578.96521) 10117 POINT(883.347229 10.8636312) 10118 POINT(641.589294 889.725037) 10119 POINT(799.039368 455.186096) 10120 POINT(210.720444 284.289398) 10121 POINT(494.283112 942.274048) 10122 POINT(512.292847 446.567383) 10123 POINT(169.739853 318.688141) 10124 POINT(970.878967 979.888428) 10125 POINT(487.010681 767.937988) 10126 POINT(352.742432 442.912628) 10127 POINT(826.499146 970.023499) 10128 POINT(999.287659 721.533691) 10129 POINT(507.456177 525.931335) 10130 POINT(245.243668 97.8575745) 10131 POINT(42.4136009 431.455505) 10132 POINT(949.990479 864.066772) 10133 POINT(135.620224 516.615051) 10134 POINT(765.982056 844.580627) 10135 POINT(763.045166 836.401245) 10136 POINT(251.668518 305.677277) 10137 POINT(60.5079231 490.962128) 10138 POINT(610.989807 909.573364) 10139 POINT(745.171143 269.595764) 10140 POINT(313.855072 212.399094) 10141 POINT(580.747131 619.677917) 10142 POINT(181.597549 705.723816) 10143 POINT(723.203125 521.12085) 10144 POINT(470.910156 193.069321) 10145 POINT(234.514664 947.001526) 10146 POINT(775.031372 900.609558) 10147 POINT(288.241974 275.081879) 10148 POINT(100.919151 810.035278) 10149 POINT(601.647278 612.17804) 10150 POINT(647.886475 327.023315) 10151 POINT(982.118713 848.440979) 10152 POINT(681.874756 257.182709) 10153 POINT(966.322632 981.942078) 10154 POINT(498.527588 739.668701) 10155 POINT(832.403687 971.492249) 10156 POINT(28.9476357 14.3975391) 10157 POINT(580.453369 978.955994) 10158 POINT(849.037903 790.125366) 10159 POINT(184.249741 258.691925) 10160 POINT(594.345459 296.363281) 10161 POINT(725.943909 313.996216) 10162 POINT(398.158813 491.600098) 10163 POINT(221.068146 957.030762) 10164 POINT(505.206451 153.634247) 10165 POINT(638.219727 33.7845612) 10166 POINT(663.730774 875.641663) 10167 POINT(8.41721725 278.86554) 10168 POINT(965.167969 155.214584) 10169 POINT(623.944641 781.710205) 10170 POINT(136.469528 504.912842) 10171 POINT(244.118713 127.100143) 10172 POINT(751.696228 684.411987) 10173 POINT(382.599915 435.292847) 10174 POINT(726.478882 999.277039) 10175 POINT(152.498123 302.835846) 10176 POINT(803.959106 13.5238476) 10177 POINT(624.60791 332.086334) 10178 POINT(499.723389 756.869629) 10179 POINT(121.778503 349.084595) 10180 POINT(314.968323 487.952423) 10181 POINT(567.939087 124.825401) 10182 POINT(573.754211 607.490723) 10183 POINT(751.040283 28.8678398) 10184 POINT(316.913452 346.635956) 10185 POINT(790.650879 416.968842) 10186 POINT(570.301758 222.567154) 10187 POINT(946.792175 61.9983444) 10188 POINT(480.054962 933.219666) 10189 POINT(218.562271 721.394165) 10190 POINT(206.918549 724.097839) 10191 POINT(589.080933 152.069901) 10192 POINT(733.23938 311.181335) 10193 POINT(735.279114 957.850647) 10194 POINT(450.677002 84.4099121) 10195 POINT(73.2015686 523.656128) 10196 POINT(358.044037 586.165039) 10197 POINT(16.0394115 658.878906) 10198 POINT(153.996033 589.216614) 10199 POINT(725.450134 159.446243) 10200 POINT(408.755646 560.064026) 10201 POINT(707.358276 289.256531) 10202 POINT(245.99176 848.382996) 10203 POINT(689.997314 678.02179) 10204 POINT(666.830383 693.935486) 10205 POINT(1.20898044 600.632141) 10206 POINT(362.317047 581.968567) 10207 POINT(388.840302 325.205872) 10208 POINT(851.180176 740.616394) 10209 POINT(985.484436 740.859131) 10210 POINT(262.27536 683.530701) 10211 POINT(67.9265594 865.391479) 10212 POINT(474.574493 822.950867) 10213 POINT(891.741028 916.645569) 10214 POINT(504.064941 868.336853) 10215 POINT(259.923035 253.983994) 10216 POINT(561.641663 179.826447) 10217 POINT(506.735291 768.484436) 10218 POINT(627.328674 551.046692) 10219 POINT(217.739258 848.067444) 10220 POINT(425.400208 279.757904) 10221 POINT(566.020996 258.433441) 10222 POINT(526.756897 465.590179) 10223 POINT(502.794678 569.632385) 10224 POINT(836.945557 510.544312) 10225 POINT(905.88208 794.162354) 10226 POINT(791.308777 939.382385) 10227 POINT(948.153259 874.178894) 10228 POINT(216.862 193.565765) 10229 POINT(514.13562 516.789429) 10230 POINT(530.690186 664.677185) 10231 POINT(159.031769 597.234802) 10232 POINT(927.126221 242.573853) 10233 POINT(390.844757 165.378967) 10234 POINT(614.044495 271.779816) 10235 POINT(561.820312 752.306213) 10236 POINT(348.713928 389.370239) 10237 POINT(306.742279 697.573547) 10238 POINT(305.384705 1.99887335) 10239 POINT(767.637329 136.003738) 10240 POINT(192.815155 532.555786) 10241 POINT(130.170471 893.687134) 10242 POINT(996.114075 302.634766) 10243 POINT(677.573242 159.564224) 10244 POINT(412.510956 430.572479) 10245 POINT(382.602539 500.684998) 10246 POINT(107.053825 221.964462) 10247 POINT(324.159851 670.714722) 10248 POINT(156.958023 656.548706) 10249 POINT(78.3178864 82.830513) 10250 POINT(260.716583 69.0968552) 10251 POINT(917.236694 655.801697) 10252 POINT(441.573975 459.998627) 10253 POINT(705.561829 637.377136) 10254 POINT(509.133911 921.737183) 10255 POINT(942.265686 619.334778) 10256 POINT(595.410889 939.213867) 10257 POINT(414.527496 206.538757) 10258 POINT(743.367737 214.312637) 10259 POINT(445.28183 126.572319) 10260 POINT(90.8500595 718.226562) 10261 POINT(91.7561417 171.071121) 10262 POINT(407.904388 819.576172) 10263 POINT(831.046509 464.500275) 10264 POINT(60.9468842 143.510391) 10265 POINT(21.0596752 646.148743) 10266 POINT(296.451752 748.71814) 10267 POINT(599.606506 627.534485) 10268 POINT(666.198669 868.126099) 10269 POINT(257.826721 416.824524) 10270 POINT(515.229187 838.181274) 10271 POINT(451.342346 866.502136) 10272 POINT(485.20517 574.807007) 10273 POINT(676.581787 148.209167) 10274 POINT(665.660522 565.786926) 10275 POINT(101.72226 852.934875) 10276 POINT(272.635712 504.518616) 10277 POINT(890.924744 184.610596) 10278 POINT(920.451416 444.44577) 10279 POINT(964.362976 105.432632) 10280 POINT(753.11261 403.316315) 10281 POINT(890.485413 112.223953) 10282 POINT(945.351196 278.639648) 10283 POINT(584.62915 700.833374) 10284 POINT(601.066101 477.862915) 10285 POINT(291.286438 401.565033) 10286 POINT(553.471619 937.02478) 10287 POINT(335.886871 450.151794) 10288 POINT(394.310242 958.758484) 10289 POINT(553.914795 868.691345) 10290 POINT(569.85321 193.922394) 10291 POINT(426.660095 657.724548) 10292 POINT(123.036537 910.872803) 10293 POINT(388.160492 398.356384) 10294 POINT(631.041687 623.124451) 10295 POINT(709.320618 301.728424) 10296 POINT(786.11499 1.1596905) 10297 POINT(833.288513 357.594574) 10298 POINT(547.756775 489.358582) 10299 POINT(129.575485 975.212402) 10300 POINT(713.039429 36.973259) 10301 POINT(179.868607 394.835907) 10302 POINT(418.305389 75.9185867) 10303 POINT(910.899231 209.012695) 10304 POINT(512.548584 221.692352) 10305 POINT(982.094238 867.500244) 10306 POINT(896.213196 911.381897) 10307 POINT(729.189514 861.39502) 10308 POINT(967.899353 239.501434) 10309 POINT(898.780701 970.12384) 10310 POINT(887.616455 913.999207) 10311 POINT(200.309204 103.996407) 10312 POINT(773.964661 477.463165) 10313 POINT(996.739624 745.421204) 10314 POINT(482.278717 559.255737) 10315 POINT(976.809814 159.614182) 10316 POINT(742.773376 920.558044) 10317 POINT(451.98584 552.28772) 10318 POINT(106.665863 794.266907) 10319 POINT(630.014404 354.616791) 10320 POINT(991.804871 514.154968) 10321 POINT(292.23877 237.599564) 10322 POINT(728.333191 572.086243) 10323 POINT(279.770691 237.227753) 10324 POINT(673.296265 78.4163055) 10325 POINT(938.440308 212.769272) 10326 POINT(437.949768 559.667175) 10327 POINT(626.567688 482.660736) 10328 POINT(3.01595497 180.429016) 10329 POINT(823.516968 871.366577) 10330 POINT(888.604492 785.133728) 10331 POINT(639.342712 57.0596428) 10332 POINT(703.401978 722.394043) 10333 POINT(293.37384 300.716217) 10334 POINT(881.608459 733.179749) 10335 POINT(657.187927 644.425171) 10336 POINT(488.658813 387.99353) 10337 POINT(328.113953 38.2352371) 10338 POINT(853.830322 671.830811) 10339 POINT(74.2982254 654.184692) 10340 POINT(888.352844 504.095551) 10341 POINT(360.735626 702.374817) 10342 POINT(143.668625 799.465942) 10343 POINT(94.8851471 221.790115) 10344 POINT(531.240295 321.2453) 10345 POINT(616.067749 688.382141) 10346 POINT(691.088623 137.911392) 10347 POINT(268.415405 490.703918) 10348 POINT(992.507446 193.929245) 10349 POINT(944.460876 760.700195) 10350 POINT(261.71933 965.581604) 10351 POINT(645.413269 121.360596) 10352 POINT(445.299744 650.390137) 10353 POINT(82.759491 296.674805) 10354 POINT(375.827148 984.058289) 10355 POINT(430.201202 411.167206) 10356 POINT(651.358215 881.807373) 10357 POINT(639.339478 140.339508) 10358 POINT(870.05365 342.160583) 10359 POINT(949.333801 629.333557) 10360 POINT(275.781158 751.948486) 10361 POINT(870.501221 510.400482) 10362 POINT(423.124481 103.474892) 10363 POINT(603.115051 171.298584) 10364 POINT(117.370758 30.934412) 10365 POINT(492.26828 173.14566) 10366 POINT(436.306732 736.476257) 10367 POINT(222.469803 919.746277) 10368 POINT(608.721985 190.55275) 10369 POINT(354.647644 138.853165) 10370 POINT(375.213257 730.787537) 10371 POINT(914.574158 762.68158) 10372 POINT(859.155396 763.589661) 10373 POINT(794.667297 469.376434) 10374 POINT(51.6215897 498.786407) 10375 POINT(48.032711 563.762146) 10376 POINT(588.790405 965.942261) 10377 POINT(880.012634 394.934357) 10378 POINT(352.296448 308.684631) 10379 POINT(502.021759 6.05988455) 10380 POINT(533.502686 7.811059) 10381 POINT(556.842468 829.736328) 10382 POINT(606.374146 113.367989) 10383 POINT(683.702515 637.650696) 10384 POINT(288.201752 279.062073) 10385 POINT(923.372864 548.924622) 10386 POINT(123.688789 788.698853) 10387 POINT(104.339577 135.910294) 10388 POINT(99.8136978 383.885986) 10389 POINT(465.074738 743.416565) 10390 POINT(433.488678 475.648407) 10391 POINT(496.942993 277.117188) 10392 POINT(821.545654 821.172485) 10393 POINT(107.838478 404.581635) 10394 POINT(406.313934 432.538666) 10395 POINT(556.886108 348.943573) 10396 POINT(96.4568634 959.555481) 10397 POINT(372.218018 7.29022264) 10398 POINT(751.37439 46.8388977) 10399 POINT(391.832825 775.639038) 10400 POINT(851.055054 839.874573) 10401 POINT(744.872925 257.72113) 10402 POINT(347.588806 430.375397) 10403 POINT(678.441284 539.190063) 10404 POINT(348.582062 252.837952) 10405 POINT(622.586365 251.418259) 10406 POINT(488.515533 327.476776) 10407 POINT(340.694305 574.464417) 10408 POINT(376.848694 485.95874) 10409 POINT(829.743164 247.436951) 10410 POINT(399.726501 902.492188) 10411 POINT(288.338959 692.325745) 10412 POINT(626.923706 111.379082) 10413 POINT(761.912048 406.022736) 10414 POINT(321.744904 341.282623) 10415 POINT(383.800476 741.930298) 10416 POINT(956.677246 194.982132) 10417 POINT(666.180969 260.11673) 10418 POINT(42.4889107 100.700874) 10419 POINT(342.069397 661.895569) 10420 POINT(27.1236992 347.233521) 10421 POINT(433.155701 395.083649) 10422 POINT(10.2331495 70.7385559) 10423 POINT(710.442383 789.754822) 10424 POINT(749.705872 107.481514) 10425 POINT(546.036926 796.409058) 10426 POINT(61.4201469 875.933411) 10427 POINT(423.631378 300.089935) 10428 POINT(89.1056671 255.985107) 10429 POINT(508.949799 591.715637) 10430 POINT(357.224457 35.794136) 10431 POINT(684.637024 923.961548) 10432 POINT(28.863306 781.727417) 10433 POINT(159.708817 461.298431) 10434 POINT(338.592346 728.413574) 10435 POINT(82.9165649 165.730179) 10436 POINT(926.03186 399.111816) 10437 POINT(761.456543 820.480713) 10438 POINT(381.55014 457.105743) 10439 POINT(928.758118 78.0912094) 10440 POINT(56.2889977 702.92627) 10441 POINT(663.124573 987.444824) 10442 POINT(362.894897 6.81573439) 10443 POINT(756.406738 282.120636) 10444 POINT(882.373596 278.501404) 10445 POINT(620.421692 941.792847) 10446 POINT(530.951172 695.216064) 10447 POINT(828.370178 326.3573) 10448 POINT(466.409912 342.776154) 10449 POINT(577.062073 951.943115) 10450 POINT(916.898193 72.8165131) 10451 POINT(259.465149 667.421997) 10452 POINT(490.627045 782.024231) 10453 POINT(820.205322 303.571899) 10454 POINT(19.2412968 907.079529) 10455 POINT(71.5475922 524.401611) 10456 POINT(551.177795 773.283386) 10457 POINT(944.586243 596.659424) 10458 POINT(647.323608 497.445923) 10459 POINT(88.5035553 610.202942) 10460 POINT(746.204712 529.069519) 10461 POINT(986.571228 595.301636) 10462 POINT(619.341492 111.340797) 10463 POINT(85.9597397 275.306274) 10464 POINT(91.9982986 88.745018) 10465 POINT(422.385681 412.30069) 10466 POINT(476.150604 605.64386) 10467 POINT(21.305851 912.826843) 10468 POINT(970.035339 494.951355) 10469 POINT(464.015106 889.649048) 10470 POINT(494.217346 103.77092) 10471 POINT(487.00354 568.518372) 10472 POINT(632.883545 139.80452) 10473 POINT(231.788681 396.37262) 10474 POINT(59.392128 935.428772) 10475 POINT(753.789734 575.328369) 10476 POINT(778.401428 543.09021) 10477 POINT(934.414551 906.801025) 10478 POINT(897.75061 914.26947) 10479 POINT(900.264587 689.343445) 10480 POINT(339.358673 333.486206) 10481 POINT(145.241364 145.183884) 10482 POINT(750.569885 428.083771) 10483 POINT(561.48761 642.437561) 10484 POINT(929.548035 743.876892) 10485 POINT(627.780273 786.674316) 10486 POINT(827.575989 746.837219) 10487 POINT(771.588074 246.663925) 10488 POINT(837.654297 503.115082) 10489 POINT(934.028076 190.051376) 10490 POINT(775.920593 415.767853) 10491 POINT(224.028046 186.407089) 10492 POINT(66.5916214 609.124817) 10493 POINT(175.891022 904.155701) 10494 POINT(961.914368 593.926575) 10495 POINT(28.0409451 416.539062) 10496 POINT(678.715698 102.028061) 10497 POINT(953.015869 237.863739) 10498 POINT(578.364258 722.957092) 10499 POINT(700.898743 648.298828) 10500 POINT(626.262512 621.016968) 10501 POINT(409.593048 512.527588) 10502 POINT(462.434174 966.575439) 10503 POINT(703.046448 749.342468) 10504 POINT(321.560577 224.983063) 10505 POINT(788.204224 226.158813) 10506 POINT(537.266113 448.122833) 10507 POINT(296.772858 10.3862867) 10508 POINT(433.010162 684.453369) 10509 POINT(650.545166 250.236572) 10510 POINT(475.171722 431.731232) 10511 POINT(888.971985 138.093369) 10512 POINT(780.515442 211.172028) 10513 POINT(142.860947 352.871704) 10514 POINT(521.02301 242.052933) 10515 POINT(304.679199 522.328979) 10516 POINT(748.004272 381.70636) 10517 POINT(298.190979 796.159973) 10518 POINT(411.541626 898.171143) 10519 POINT(630.452332 795.638184) 10520 POINT(330.863312 832.744141) 10521 POINT(388.02594 490.909271) 10522 POINT(979.506287 149.222458) 10523 POINT(365.298126 953.774902) 10524 POINT(792.561646 158.288513) 10525 POINT(762.739563 208.52742) 10526 POINT(341.469238 842.424622) 10527 POINT(621.728516 338.338074) 10528 POINT(917.433167 322.745758) 10529 POINT(453.16394 647.707886) 10530 POINT(533.391113 328.619751) 10531 POINT(30.6641731 596.047668) 10532 POINT(15.5306025 818.940735) 10533 POINT(44.9355125 732.653625) 10534 POINT(80.67556 916.104492) 10535 POINT(821.284302 323.919556) 10536 POINT(160.662155 746.382874) 10537 POINT(982.747314 379.929779) 10538 POINT(267.404755 220.434387) 10539 POINT(270.55658 485.574402) 10540 POINT(624.164429 962.645996) 10541 POINT(513.399658 112.637863) 10542 POINT(804.146423 626.053467) 10543 POINT(347.061218 841.143616) 10544 POINT(104.662872 469.512665) 10545 POINT(934.550293 323.455505) 10546 POINT(184.524704 975.013306) 10547 POINT(909.85907 571.710144) 10548 POINT(148.014709 235.575058) 10549 POINT(680.322266 692.187805) 10550 POINT(267.816833 28.7113552) 10551 POINT(265.533386 998.950012) 10552 POINT(101.825577 728.270386) 10553 POINT(45.4358902 248.827499) 10554 POINT(528.157227 210.490936) 10555 POINT(235.170242 801.61615) 10556 POINT(55.3757896 530.871094) 10557 POINT(26.2889919 839.722473) 10558 POINT(970.502197 630.110046) 10559 POINT(137.923676 412.733002) 10560 POINT(478.487823 553.737427) 10561 POINT(840.416809 302.301788) 10562 POINT(929.32843 415.500458) 10563 POINT(258.945526 344.847107) 10564 POINT(691.812012 514.178345) 10565 POINT(175.022003 482.911407) 10566 POINT(838.107117 932.901917) 10567 POINT(436.841949 35.4046135) 10568 POINT(876.202026 555.557922) 10569 POINT(110.7715 342.663818) 10570 POINT(585.919006 563.371155) 10571 POINT(379.452179 430.304504) 10572 POINT(60.2984543 103.821861) 10573 POINT(968.816284 787.806335) 10574 POINT(262.143127 321.82843) 10575 POINT(196.627106 930.901733) 10576 POINT(413.132294 318.408081) 10577 POINT(36.9965019 533.964783) 10578 POINT(930.973267 754.219543) 10579 POINT(424.818695 518.211609) 10580 POINT(212.507004 784.544617) 10581 POINT(245.45343 267.7211) 10582 POINT(574.587402 229.034683) 10583 POINT(510.67395 837.793335) 10584 POINT(60.1123047 415.227203) 10585 POINT(382.376709 604.334351) 10586 POINT(497.114258 951.339233) 10587 POINT(319.459412 779.766846) 10588 POINT(270.768372 883.707703) 10589 POINT(367.373535 857.016602) 10590 POINT(291.112244 770.636658) 10591 POINT(739.026062 620.644043) 10592 POINT(875.894592 291.114044) 10593 POINT(432.954346 431.026733) 10594 POINT(934.096252 128.296707) 10595 POINT(861.156067 107.131706) 10596 POINT(350.241852 188.860291) 10597 POINT(803.886719 734.946533) 10598 POINT(704.717957 295.946899) 10599 POINT(539.516357 956.790283) 10600 POINT(996.123352 521.79657) 10601 POINT(609.678284 861.855347) 10602 POINT(386.525543 393.138855) 10603 POINT(347.077209 126.409203) 10604 POINT(900.82373 535.585266) 10605 POINT(317.205444 934.720581) 10606 POINT(661.799561 540.765442) 10607 POINT(85.7356186 856.185364) 10608 POINT(520.561462 200.580597) 10609 POINT(928.514648 933.173523) 10610 POINT(688.781006 906.11853) 10611 POINT(37.0170403 936.26947) 10612 POINT(238.32576 244.52742) 10613 POINT(553.078735 22.9411411) 10614 POINT(602.679016 326.141541) 10615 POINT(85.1117477 861.969421) 10616 POINT(693.103088 457.683502) 10617 POINT(734.300171 894.556274) 10618 POINT(84.1655426 657.34436) 10619 POINT(692.134521 544.878479) 10620 POINT(284.455048 536.509583) 10621 POINT(86.8099747 384.569763) 10622 POINT(198.63385 994.013245) 10623 POINT(460.379395 29.4210358) 10624 POINT(19.10355 365.85965) 10625 POINT(384.119415 700.340454) 10626 POINT(425.319855 420.76123) 10627 POINT(677.474243 227.786285) 10628 POINT(785.126038 304.643646) 10629 POINT(225.439026 898.579651) 10630 POINT(167.453537 21.1302147) 10631 POINT(807.72229 30.946207) 10632 POINT(214.556686 736.22345) 10633 POINT(805.987366 878.178772) 10634 POINT(62.9295082 450.867584) 10635 POINT(366.550659 279.430939) 10636 POINT(526.636841 872.342285) 10637 POINT(116.870255 39.4504051) 10638 POINT(99.5553513 502.667084) 10639 POINT(994.869324 984.761292) 10640 POINT(131.652313 558.176514) 10641 POINT(108.618088 934.764282) 10642 POINT(879.756897 738.575623) 10643 POINT(836.275818 880.914429) 10644 POINT(319.240112 616.138062) 10645 POINT(966.727539 689.661499) 10646 POINT(376.690186 446.932404) 10647 POINT(512.424927 854.925903) 10648 POINT(55.2438316 87.3449326) 10649 POINT(668.061401 708.881714) 10650 POINT(177.029099 892.621216) 10651 POINT(90.5134659 56.7067871) 10652 POINT(767.640381 582.215576) 10653 POINT(413.717773 198.340134) 10654 POINT(515.27002 72.5803375) 10655 POINT(441.716339 520.382446) 10656 POINT(14.7579756 835.433167) 10657 POINT(366.988403 331.941406) 10658 POINT(370.212708 962.928711) 10659 POINT(300.539032 942.934753) 10660 POINT(97.9489594 475.563538) 10661 POINT(364.283447 471.220703) 10662 POINT(516.348511 549.731079) 10663 POINT(152.437607 860.657776) 10664 POINT(6.07759714 965.900757) 10665 POINT(912.406921 706.152649) 10666 POINT(701.20752 772.33844) 10667 POINT(800.688354 839.911133) 10668 POINT(560.627502 650.652588) 10669 POINT(837.32666 127.070915) 10670 POINT(54.2850151 876.406006) 10671 POINT(93.3725204 455.884369) 10672 POINT(267.928894 849.367676) 10673 POINT(407.588715 660.492371) 10674 POINT(423.989655 573.101379) 10675 POINT(827.475037 771.560913) 10676 POINT(178.95163 982.545105) 10677 POINT(619.78479 5.74197578) 10678 POINT(586.124817 831.684326) 10679 POINT(289.477264 748.795837) 10680 POINT(7.3042779 782.655579) 10681 POINT(603.989319 194.625381) 10682 POINT(170.735733 94.5488586) 10683 POINT(240.458786 524.401062) 10684 POINT(862.52594 747.343933) 10685 POINT(783.839478 562.99823) 10686 POINT(713.725098 196.986801) 10687 POINT(408.604248 766.35437) 10688 POINT(218.452103 125.369858) 10689 POINT(508.941376 470.932678) 10690 POINT(455.459229 298.342316) 10691 POINT(713.145081 388.729309) 10692 POINT(155.381256 890.884827) 10693 POINT(366.540253 937.282959) 10694 POINT(380.659393 686.893555) 10695 POINT(511.148407 748.665527) 10696 POINT(489.9646 357.929871) 10697 POINT(274.903961 464.803833) 10698 POINT(522.190247 407.710297) 10699 POINT(132.198166 74.6791153) 10700 POINT(138.185944 314.580688) 10701 POINT(762.623962 723.576538) 10702 POINT(735.930725 280.901306) 10703 POINT(845.896851 282.836884) 10704 POINT(944.495117 814.953125) 10705 POINT(546.047424 433.349731) 10706 POINT(994.730164 27.0781536) 10707 POINT(193.24794 525.796082) 10708 POINT(254.102066 57.3225174) 10709 POINT(631.311218 739.502869) 10710 POINT(746.525208 897.527527) 10711 POINT(305.363556 789.43689) 10712 POINT(705.636108 97.8996201) 10713 POINT(687.956543 612.6922) 10714 POINT(35.0118523 418.497345) 10715 POINT(431.572693 602.79303) 10716 POINT(77.8178635 502.343536) 10717 POINT(367.861115 318.840942) 10718 POINT(890.83728 602.16626) 10719 POINT(403.890259 459.2099) 10720 POINT(536.488953 420.882782) 10721 POINT(576.232483 803.986145) 10722 POINT(967.097717 251.28009) 10723 POINT(175.938278 860.139404) 10724 POINT(297.287781 987.953369) 10725 POINT(440.66571 917.597168) 10726 POINT(514.997559 790.103149) 10727 POINT(891.794434 987.703918) 10728 POINT(544.456909 393.552979) 10729 POINT(869.774597 758.33136) 10730 POINT(573.845581 391.245941) 10731 POINT(163.875534 888.141357) 10732 POINT(427.711182 451.047913) 10733 POINT(144.664841 67.795105) 10734 POINT(684.135132 36.0952682) 10735 POINT(368.846222 705.467285) 10736 POINT(96.7924957 994.960388) 10737 POINT(944.52417 520.729187) 10738 POINT(523.274658 545.98645) 10739 POINT(806.676697 943.168884) 10740 POINT(27.2812157 982.301208) 10741 POINT(571.863525 964.138794) 10742 POINT(610.60498 551.922058) 10743 POINT(510.354889 951.470215) 10744 POINT(341.430542 742.302673) 10745 POINT(913.450317 143.241379) 10746 POINT(631.662231 832.554138) 10747 POINT(342.392487 838.686035) 10748 POINT(434.234802 421.945831) 10749 POINT(849.7323 218.705551) 10750 POINT(991.211792 443.31369) 10751 POINT(769.146545 787.407776) 10752 POINT(977.638062 308.464478) 10753 POINT(408.560242 427.5065) 10754 POINT(920.402954 583.981812) 10755 POINT(365.110809 319.740784) 10756 POINT(294.735229 375.048096) 10757 POINT(948.272278 568.825378) 10758 POINT(835.461853 207.663528) 10759 POINT(666.714478 400.540649) 10760 POINT(171.012283 92.2546844) 10761 POINT(50.714489 606.770569) 10762 POINT(673.66095 961.039124) 10763 POINT(468.798553 393.570465) 10764 POINT(401.1185 275.183624) 10765 POINT(606.526001 573.301941) 10766 POINT(616.874207 163.929794) 10767 POINT(36.8225365 792.729553) 10768 POINT(757.358154 495.247406) 10769 POINT(783.028503 127.588272) 10770 POINT(953.84729 185.631836) 10771 POINT(993.987488 338.97934) 10772 POINT(610.034729 375.420624) 10773 POINT(179.315109 582.132812) 10774 POINT(829.381592 756.134094) 10775 POINT(834.843933 603.319641) 10776 POINT(129.976364 909.133545) 10777 POINT(493.642181 941.350525) 10778 POINT(281.952911 462.250641) 10779 POINT(115.58593 367.144226) 10780 POINT(860.015686 795.516113) 10781 POINT(454.986755 514.883911) 10782 POINT(280.853485 921.862122) 10783 POINT(376.115875 163.531738) 10784 POINT(454.893463 667.488586) 10785 POINT(603.637817 965.795288) 10786 POINT(439.769196 903.875244) 10787 POINT(760.09668 156.504745) 10788 POINT(558.000122 4.23198748) 10789 POINT(744.949158 232.875198) 10790 POINT(705.771667 967.172791) 10791 POINT(116.591469 130.015472) 10792 POINT(108.564857 465.863373) 10793 POINT(545.888916 626.65741) 10794 POINT(601.02655 28.7406292) 10795 POINT(90.5233612 734.394104) 10796 POINT(854.347412 365.676941) 10797 POINT(795.778198 540.333862) 10798 POINT(529.089905 639.323059) 10799 POINT(339.070618 295.221893) 10800 POINT(482.582367 4.10380411) 10801 POINT(310.619934 639.613586) 10802 POINT(248.483093 644.371094) 10803 POINT(547.245911 428.067169) 10804 POINT(575.871887 628.580444) 10805 POINT(324.675934 99.6706772) 10806 POINT(863.309387 338.712952) 10807 POINT(358.290375 422.250763) 10808 POINT(549.91748 854.805664) 10809 POINT(483.458771 442.679657) 10810 POINT(583.993896 185.288895) 10811 POINT(683.146423 857.78125) 10812 POINT(836.427612 487.405182) 10813 POINT(229.062439 796.036377) 10814 POINT(70.7997971 661.458923) 10815 POINT(108.156601 201.829498) 10816 POINT(837.231323 811.811157) 10817 POINT(451.763397 939.215088) 10818 POINT(388.592957 820.80304) 10819 POINT(281.266846 194.58696) 10820 POINT(594.576477 594.204102) 10821 POINT(771.082275 336.313904) 10822 POINT(473.399414 714.000305) 10823 POINT(224.398026 679.079468) 10824 POINT(697.782898 222.652939) 10825 POINT(705.003296 461.691986) 10826 POINT(539.618042 899.285278) 10827 POINT(493.27951 155.48436) 10828 POINT(677.869507 650.128235) 10829 POINT(287.806763 117.703323) 10830 POINT(41.3232346 891.145935) 10831 POINT(985.923828 747.726196) 10832 POINT(29.4667053 58.8526039) 10833 POINT(404.977905 116.384621) 10834 POINT(641.910767 545.339172) 10835 POINT(987.052246 458.601257) 10836 POINT(43.2734184 455.491882) 10837 POINT(227.913101 651.054626) 10838 POINT(143.41217 58.9671211) 10839 POINT(728.166016 559.409851) 10840 POINT(832.510986 727.978821) 10841 POINT(651.651978 919.135315) 10842 POINT(480.122101 476.268036) 10843 POINT(341.588501 711.049622) 10844 POINT(293.273468 47.3009033) 10845 POINT(565.622009 74.1059189) 10846 POINT(690.753357 333.942688) 10847 POINT(591.688232 945.75177) 10848 POINT(251.367874 881.372498) 10849 POINT(120.390457 382.353302) 10850 POINT(249.155746 354.248932) 10851 POINT(177.624741 952.116699) 10852 POINT(717.183716 303.150818) 10853 POINT(892.674927 539.782349) 10854 POINT(255.703644 899.762939) 10855 POINT(719.341614 200.833908) 10856 POINT(995.32666 721.444336) 10857 POINT(996.373474 463.403168) 10858 POINT(769.779236 240.618271) 10859 POINT(762.165222 324.446442) 10860 POINT(377.196045 640.400757) 10861 POINT(739.131775 514.712402) 10862 POINT(998.346802 553.19873) 10863 POINT(265.249084 821.746826) 10864 POINT(282.3815 562.451721) 10865 POINT(381.972443 34.5379066) 10866 POINT(146.435318 968.675476) 10867 POINT(75.2367172 595.868469) 10868 POINT(8.69940376 689.52948) 10869 POINT(923.771057 273.117584) 10870 POINT(482.416351 920.441223) 10871 POINT(828.900269 54.8629913) 10872 POINT(700.884766 648.660522) 10873 POINT(602.869019 284.534454) 10874 POINT(574.283997 501.410889) 10875 POINT(577.142944 504.529694) 10876 POINT(754.400024 70.5798035) 10877 POINT(984.873108 121.232269) 10878 POINT(712.715027 535.31958) 10879 POINT(177.636734 345.491364) 10880 POINT(633.517151 483.798615) 10881 POINT(88.6981201 712.186646) 10882 POINT(252.506912 590.564636) 10883 POINT(164.501343 149.985748) 10884 POINT(1.77447033 651.597717) 10885 POINT(992.167786 137.409058) 10886 POINT(976.061707 220.80217) 10887 POINT(370.809875 38.5695534) 10888 POINT(138.106186 175.707092) 10889 POINT(753.995911 621.812256) 10890 POINT(610.905029 303.421692) 10891 POINT(53.3427658 902.908081) 10892 POINT(843.386108 917.972229) 10893 POINT(290.728394 463.066833) 10894 POINT(317.79776 465.187683) 10895 POINT(648.892578 928.049805) 10896 POINT(429.823944 550.095581) 10897 POINT(55.2343254 280.931091) 10898 POINT(306.821167 233.750443) 10899 POINT(577.554993 556.062927) 10900 POINT(929.596985 331.582581) 10901 POINT(977.59198 429.637268) 10902 POINT(735.883484 734.392395) 10903 POINT(700.825439 502.635284) 10904 POINT(359.29541 37.3076553) 10905 POINT(149.72319 150.26889) 10906 POINT(699.41864 463.290558) 10907 POINT(140.952118 689.21875) 10908 POINT(733.205505 808.658569) 10909 POINT(161.888519 56.6658363) 10910 POINT(424.616577 911.739929) 10911 POINT(172.879578 985.522278) 10912 POINT(531.148804 586.002686) 10913 POINT(832.161377 846.24469) 10914 POINT(758.346497 590.196167) 10915 POINT(811.250732 470.637665) 10916 POINT(495.542328 695.260742) 10917 POINT(309.259552 706.224365) 10918 POINT(650.002625 306.660034) 10919 POINT(532.31604 515.805542) 10920 POINT(957.539124 107.660866) 10921 POINT(174.618088 746.097351) 10922 POINT(613.824158 390.841187) 10923 POINT(294.233582 367.808289) 10924 POINT(373.554108 869.286194) 10925 POINT(221.347244 928.790283) 10926 POINT(88.8106766 923.701416) 10927 POINT(649.124573 69.2019196) 10928 POINT(391.17569 205.816681) 10929 POINT(45.7254066 395.807007) 10930 POINT(205.174744 931.392334) 10931 POINT(276.38327 490.074829) 10932 POINT(557.408081 847.906799) 10933 POINT(451.135925 785.750122) 10934 POINT(713.343201 933.266846) 10935 POINT(709.122009 965.749695) 10936 POINT(732.386047 193.92807) 10937 POINT(934.863831 130.968903) 10938 POINT(734.84021 195.55687) 10939 POINT(374.265564 535.819885) 10940 POINT(378.147522 29.3456631) 10941 POINT(204.926758 183.68187) 10942 POINT(553.95343 535.474976) 10943 POINT(321.691376 62.1387329) 10944 POINT(154.746063 655.786865) 10945 POINT(757.121582 570.774475) 10946 POINT(884.908081 544.910522) 10947 POINT(178.945114 566.856689) 10948 POINT(674.929688 447.898132) 10949 POINT(31.726923 5.57435179) 10950 POINT(921.339844 658.55603) 10951 POINT(935.444153 976.32843) 10952 POINT(843.808472 52.3770409) 10953 POINT(564.808838 895.25708) 10954 POINT(3.18211555 578.212524) 10955 POINT(133.713882 82.6867294) 10956 POINT(941.377747 671.103821) 10957 POINT(850.834656 74.1381607) 10958 POINT(920.650269 183.187653) 10959 POINT(925.085266 942.109558) 10960 POINT(493.460815 129.087006) 10961 POINT(341.30896 65.9576416) 10962 POINT(715.827332 206.113586) 10963 POINT(233.413788 117.279678) 10964 POINT(20.5775871 717.975769) 10965 POINT(118.401436 232.365448) 10966 POINT(339.425995 634.176575) 10967 POINT(962.763794 141.266251) 10968 POINT(954.444153 127.182083) 10969 POINT(303.046814 400.167603) 10970 POINT(673.621033 7.66312361) 10971 POINT(783.634888 331.031494) 10972 POINT(368.250824 127.192848) 10973 POINT(183.752121 76.4944763) 10974 POINT(241.417725 530.893005) 10975 POINT(537.189026 610.994202) 10976 POINT(679.563293 53.4435234) 10977 POINT(385.356445 158.904129) 10978 POINT(388.84137 185.022186) 10979 POINT(708.070496 320.556885) 10980 POINT(153.63562 554.161804) 10981 POINT(136.245148 126.535126) 10982 POINT(848.304016 837.863708) 10983 POINT(733.794312 74.2313843) 10984 POINT(860.120483 511.88028) 10985 POINT(838.028564 58.7749519) 10986 POINT(369.823853 682.788147) 10987 POINT(142.309708 618.972534) 10988 POINT(717.605835 525.855469) 10989 POINT(693.453125 469.511749) 10990 POINT(541.344116 206.929718) 10991 POINT(639.229675 290.557983) 10992 POINT(398.103546 851.4198) 10993 POINT(106.319916 867.888367) 10994 POINT(10.2179193 288.337402) 10995 POINT(302.349976 109.327332) 10996 POINT(157.560684 232.332642) 10997 POINT(931.445557 160.579544) 10998 POINT(64.9959641 952.375732) 10999 POINT(983.463623 775.320984) 11000 POINT(108.659225 633.48407) 11001 POINT(423.204742 495.964874) 11002 POINT(939.974487 779.592529) 11003 POINT(866.109497 823.835815) 11004 POINT(58.6151924 483.846771) 11005 POINT(907.955139 917.170715) 11006 POINT(264.530884 950.436462) 11007 POINT(882.776978 984.640503) 11008 POINT(797.383972 673.357117) 11009 POINT(788.650696 238.807114) 11010 POINT(795.095337 436.619781) 11011 POINT(356.221619 351.571106) 11012 POINT(640.623535 212.448929) 11013 POINT(479.208221 891.32666) 11014 POINT(939.675964 904.587036) 11015 POINT(796.928223 313.953217) 11016 POINT(106.962578 159.250107) 11017 POINT(261.699768 87.2833252) 11018 POINT(613.176575 483.463654) 11019 POINT(262.392395 327.273468) 11020 POINT(840.56604 146.991959) 11021 POINT(861.201233 555.372375) 11022 POINT(646.315735 668.023071) 11023 POINT(63.7730179 507.750397) 11024 POINT(277.686096 602.971069) 11025 POINT(741.135315 260.981781) 11026 POINT(311.776062 276.62439) 11027 POINT(891.601868 723.930969) 11028 POINT(99.8310165 540.441467) 11029 POINT(736.204285 986.0896) 11030 POINT(528.283752 564.737305) 11031 POINT(624.618347 328.165192) 11032 POINT(216.380798 626.104126) 11033 POINT(660.517334 376.691528) 11034 POINT(956.63739 306.584778) 11035 POINT(184.431442 921.78833) 11036 POINT(875.923157 78.4005127) 11037 POINT(955.272888 82.544632) 11038 POINT(511.27655 900.598022) 11039 POINT(803.592773 580.066833) 11040 POINT(518.278564 835.605469) 11041 POINT(273.366272 911.866333) 11042 POINT(776.800842 328.792511) 11043 POINT(985.797607 776.440125) 11044 POINT(148.129227 347.75351) 11045 POINT(137.549255 502.726898) 11046 POINT(440.919403 105.837105) 11047 POINT(254.314255 840.317383) 11048 POINT(336.360809 292.722412) 11049 POINT(454.276978 873.227417) 11050 POINT(133.632706 190.504471) 11051 POINT(508.37381 158.664978) 11052 POINT(436.672729 494.336487) 11053 POINT(717.134521 354.155334) 11054 POINT(997.01709 200.351974) 11055 POINT(437.136322 488.846863) 11056 POINT(242.706528 329.141052) 11057 POINT(191.744431 830.661987) 11058 POINT(900.804565 169.899048) 11059 POINT(976.981384 688.656311) 11060 POINT(104.888351 948.539124) 11061 POINT(238.312927 923.607971) 11062 POINT(466.019348 523.229614) 11063 POINT(240.254166 889.204224) 11064 POINT(476.376129 714.269348) 11065 POINT(198.481766 726.573242) 11066 POINT(962.253296 893.86261) 11067 POINT(692.231201 637.306763) 11068 POINT(963.947815 347.745178) 11069 POINT(949.909241 981.131348) 11070 POINT(703.733337 917.897583) 11071 POINT(607.952087 816.239014) 11072 POINT(222.362152 427.561646) 11073 POINT(315.012421 120.838036) 11074 POINT(785.15332 150.856796) 11075 POINT(1.69705415 217.201813) 11076 POINT(449.668396 34.5179482) 11077 POINT(999.560791 443.485931) 11078 POINT(870.313721 814.308716) 11079 POINT(289.272888 478.571014) 11080 POINT(816.138062 539.791077) 11081 POINT(632.317505 781.529358) 11082 POINT(274.932495 165.272354) 11083 POINT(916.901733 735.979248) 11084 POINT(890.934753 759.435974) 11085 POINT(778.685425 432.184052) 11086 POINT(769.561646 899.565857) 11087 POINT(70.3913498 733.503479) 11088 POINT(18.3364487 957.175842) 11089 POINT(509.319275 781.558594) 11090 POINT(369.362457 149.676361) 11091 POINT(364.397583 334.710419) 11092 POINT(639.266418 467.486389) 11093 POINT(218.926285 11.2759542) 11094 POINT(874.564758 318.393005) 11095 POINT(103.972153 342.036865) 11096 POINT(754.088074 32.2657242) 11097 POINT(910.98291 511.394623) 11098 POINT(78.7550278 201.358475) 11099 POINT(309.222687 283.959991) 11100 POINT(79.0608673 296.921448) 11101 POINT(90.8551483 140.041061) 11102 POINT(371.707764 594.858398) 11103 POINT(198.794159 361.638245) 11104 POINT(961.552368 295.49527) 11105 POINT(742.816406 268.016083) 11106 POINT(929.296021 859.582825) 11107 POINT(239.013382 60.1799202) 11108 POINT(788.044739 169.484604) 11109 POINT(605.714966 625.740051) 11110 POINT(805.086731 716.756775) 11111 POINT(182.921982 24.4241333) 11112 POINT(444.171539 811.309509) 11113 POINT(107.551369 330.252441) 11114 POINT(16.5470371 889.951965) 11115 POINT(747.055054 675.094299) 11116 POINT(367.463409 600.91272) 11117 POINT(870.983521 111.584106) 11118 POINT(153.357132 74.0561142) 11119 POINT(703.706177 698.411438) 11120 POINT(871.178955 912.768982) 11121 POINT(659.78479 680.670654) 11122 POINT(126.147575 112.288391) 11123 POINT(202.552185 980.73114) 11124 POINT(711.54071 610.620056) 11125 POINT(0.539062381 385.078156) 11126 POINT(421.046936 192.816223) 11127 POINT(77.8933563 779.49408) 11128 POINT(320.892761 318.53949) 11129 POINT(484.363647 784.163513) 11130 POINT(628.747559 338.440887) 11131 POINT(746.398682 922.757446) 11132 POINT(735.73999 859.471069) 11133 POINT(930.209167 541.89325) 11134 POINT(76.3668137 455.984009) 11135 POINT(55.1271896 611.800354) 11136 POINT(11.3271065 886.174133) 11137 POINT(174.293442 83.3958664) 11138 POINT(106.202232 736.421204) 11139 POINT(100.730217 964.773376) 11140 POINT(833.357544 394.547333) 11141 POINT(239.484085 790.425537) 11142 POINT(917.547791 252.472992) 11143 POINT(608.122131 784.088562) 11144 POINT(112.650909 505.592194) 11145 POINT(33.9519272 121.264862) 11146 POINT(916.060913 187.277435) 11147 POINT(930.539246 156.222992) 11148 POINT(579.97998 629.815857) 11149 POINT(530.176208 932.197266) 11150 POINT(199.738159 245.93248) 11151 POINT(112.790421 399.836029) 11152 POINT(786.026306 886.662903) 11153 POINT(583.38916 450.530853) 11154 POINT(151.379654 451.110748) 11155 POINT(745.634583 566.575806) 11156 POINT(455.336395 441.604065) 11157 POINT(162.806137 803.256287) 11158 POINT(104.490608 704.613098) 11159 POINT(531.604187 168.678299) 11160 POINT(843.357666 244.798782) 11161 POINT(789.495239 740.774719) 11162 POINT(702.890747 208.64122) 11163 POINT(581.226074 58.4376945) 11164 POINT(602.077148 507.788544) 11165 POINT(401.497467 211.73053) 11166 POINT(883.871033 83.7345734) 11167 POINT(463.473511 416.854828) 11168 POINT(672.482544 138.46579) 11169 POINT(699.817261 742.838379) 11170 POINT(380.558655 294.729248) 11171 POINT(945.416687 622.245361) 11172 POINT(891.009705 269.603149) 11173 POINT(268.160767 156.693176) 11174 POINT(261.220215 301.762512) 11175 POINT(173.421906 364.317078) 11176 POINT(322.335785 962.516296) 11177 POINT(404.805969 20.9041023) 11178 POINT(301.555023 690.258911) 11179 POINT(771.881531 745.202148) 11180 POINT(812.323792 144.973099) 11181 POINT(656.748718 363.495636) 11182 POINT(920.599304 401.999695) 11183 POINT(965.340454 266.15567) 11184 POINT(892.617859 851.250793) 11185 POINT(504.274139 612.369568) 11186 POINT(1.68292415 88.7893066) 11187 POINT(366.017334 537.110535) 11188 POINT(962.335938 872.28125) 11189 POINT(508.362915 420.723572) 11190 POINT(166.951035 540.899048) 11191 POINT(511.101746 266.002441) 11192 POINT(622.499146 995.115112) 11193 POINT(503.847656 25.6742859) 11194 POINT(977.282349 104.380096) 11195 POINT(582.841309 585.757996) 11196 POINT(145.285934 113.47261) 11197 POINT(97.9943771 53.9328957) 11198 POINT(89.0072479 494.50351) 11199 POINT(999.314941 59.0639114) 11200 POINT(322.890747 624.939209) 11201 POINT(817.190369 236.234344) 11202 POINT(614.647888 436.997894) 11203 POINT(724.922607 764.512085) 11204 POINT(359.715302 695.403564) 11205 POINT(733.678223 321.32193) 11206 POINT(806.974365 124.420235) 11207 POINT(217.003265 712.442444) 11208 POINT(46.8138046 167.623093) 11209 POINT(299.784119 590.640808) 11210 POINT(713.989624 561.90918) 11211 POINT(898.626282 464.781525) 11212 POINT(188.959869 118.342133) 11213 POINT(418.844452 766.495605) 11214 POINT(637.02771 494.73407) 11215 POINT(927.484924 240.401154) 11216 POINT(142.397934 327.177673) 11217 POINT(490.045471 779.278809) 11218 POINT(64.969017 759.466614) 11219 POINT(816.951477 975.999146) 11220 POINT(365.287048 210.524872) 11221 POINT(278.645569 813.478333) 11222 POINT(254.646805 581.2677) 11223 POINT(157.739136 782.228882) 11224 POINT(83.0404739 95.0251312) 11225 POINT(983.559753 287.523468) 11226 POINT(780.840698 551.694031) 11227 POINT(287.245483 985.78302) 11228 POINT(527.209778 57.6778145) 11229 POINT(801.042603 939.131714) 11230 POINT(188.821213 764.594116) 11231 POINT(258.538208 480.361603) 11232 POINT(719.257507 943.466125) 11233 POINT(616.214172 985.668213) 11234 POINT(348.231262 862.078003) 11235 POINT(872.074097 422.93222) 11236 POINT(439.507629 586.406494) 11237 POINT(193.430725 408.133179) 11238 POINT(229.160263 548.207642) 11239 POINT(850.62677 406.416443) 11240 POINT(846.75824 706.219788) 11241 POINT(382.011108 767.742859) 11242 POINT(599.586792 464.970184) 11243 POINT(461.530273 115.912987) 11244 POINT(195.486893 430.362244) 11245 POINT(405.58551 605.671936) 11246 POINT(577.936157 193.259918) 11247 POINT(20.2298222 132.794479) 11248 POINT(235.273331 899.942444) 11249 POINT(261.343048 399.376556) 11250 POINT(65.3197632 541.008423) 11251 POINT(745.261841 989.492249) 11252 POINT(171.010513 958.09021) 11253 POINT(619.711426 253.018448) 11254 POINT(829.092712 211.267456) 11255 POINT(377.170746 797.508545) 11256 POINT(512.669495 490.631866) 11257 POINT(385.509735 984.862854) 11258 POINT(412.687439 404.961975) 11259 POINT(822.499878 772.174072) 11260 POINT(749.829529 591.466125) 11261 POINT(258.373566 41.1237602) 11262 POINT(106.250671 906.195984) 11263 POINT(838.880066 759.892761) 11264 POINT(548.88031 358.822876) 11265 POINT(213.259567 713.582275) 11266 POINT(928.431824 722.406982) 11267 POINT(438.3685 437.095734) 11268 POINT(89.7468872 793.627502) 11269 POINT(811.09375 467.404785) 11270 POINT(941.740662 407.329102) 11271 POINT(253.57692 194.84903) 11272 POINT(234.185959 967.480896) 11273 POINT(645.136169 795.939514) 11274 POINT(252.213455 781.639465) 11275 POINT(584.758057 849.039551) 11276 POINT(449.144867 355.305908) 11277 POINT(30.3927174 910.871948) 11278 POINT(728.695496 884.326355) 11279 POINT(225.904053 223.288086) 11280 POINT(796.37146 986.499146) 11281 POINT(251.411301 748.970459) 11282 POINT(817.869995 637.230591) 11283 POINT(454.042328 340.2164) 11284 POINT(843.407898 858.466003) 11285 POINT(298.059296 230.755295) 11286 POINT(828.232544 885.877991) 11287 POINT(758.297546 426.420166) 11288 POINT(51.2964249 877.706543) 11289 POINT(39.3853874 441.776337) 11290 POINT(709.530457 191.631882) 11291 POINT(983.921143 187.477997) 11292 POINT(50.7713776 446.158325) 11293 POINT(212.427643 423.785309) 11294 POINT(663.757996 993.361755) 11295 POINT(571.372681 841.552124) 11296 POINT(231.405914 694.291626) 11297 POINT(435.837158 560.940735) 11298 POINT(889.616882 531.235535) 11299 POINT(481.669952 213.612991) 11300 POINT(237.128006 277.491455) 11301 POINT(697.444336 125.285126) 11302 POINT(384.423615 230.908722) 11303 POINT(216.607544 787.047241) 11304 POINT(286.715149 598.549744) 11305 POINT(410.403259 406.085449) 11306 POINT(5.76422453 83.2970276) 11307 POINT(66.0772095 985.384277) 11308 POINT(719.323059 296.63031) 11309 POINT(184.306122 989.229492) 11310 POINT(929.767761 923.28363) 11311 POINT(344.604553 114.103851) 11312 POINT(802.798096 851.858643) 11313 POINT(915.669434 175.722137) 11314 POINT(233.690399 410.125214) 11315 POINT(915.351074 330.963165) 11316 POINT(636.469482 194.726257) 11317 POINT(666.449646 232.427734) 11318 POINT(577.571838 942.986816) 11319 POINT(742.212463 733.008972) 11320 POINT(930.31189 280.790131) 11321 POINT(69.7544174 153.555359) 11322 POINT(863.046753 706.947266) 11323 POINT(559.276611 149.416534) 11324 POINT(548.814514 693.685852) 11325 POINT(678.674622 877.986267) 11326 POINT(306.963104 537.983521) 11327 POINT(1.78915501 511.523438) 11328 POINT(970.588379 473.262268) 11329 POINT(757.167419 455.393646) 11330 POINT(583.281128 319.853943) 11331 POINT(703.904663 734.90387) 11332 POINT(233.688477 530.684204) 11333 POINT(501.18158 483.207092) 11334 POINT(558.795349 181.466675) 11335 POINT(935.887024 893.054443) 11336 POINT(511.823181 208.640121) 11337 POINT(573.721375 246.824753) 11338 POINT(676.544067 850.231567) 11339 POINT(327.053711 88.2396698) 11340 POINT(198.067642 772.328857) 11341 POINT(139.305237 387.078888) 11342 POINT(225.338974 135.059753) 11343 POINT(100.641647 832.272095) 11344 POINT(260.394897 875.690125) 11345 POINT(291.281921 591.811218) 11346 POINT(574.670227 662.087341) 11347 POINT(32.9061203 938.477966) 11348 POINT(677.281982 337.3815) 11349 POINT(879.724976 762.516296) 11350 POINT(951.310852 666.865906) 11351 POINT(41.1456413 895.826111) 11352 POINT(961.844543 882.294739) 11353 POINT(268.134735 342.362732) 11354 POINT(487.265045 858.673828) 11355 POINT(903.979736 447.175049) 11356 POINT(139.399155 856.9422) 11357 POINT(473.933838 8.50400352) 11358 POINT(78.2761917 115.769409) 11359 POINT(122.088463 625.818481) 11360 POINT(56.0466805 310.83371) 11361 POINT(480.751282 729.441162) 11362 POINT(57.929184 44.8187485) 11363 POINT(338.756134 817.986755) 11364 POINT(564.816223 251.003983) 11365 POINT(249.746658 267.302277) 11366 POINT(814.453247 243.395828) 11367 POINT(56.9436111 513.689209) 11368 POINT(961.10437 323.138) 11369 POINT(102.734924 565.255066) 11370 POINT(255.651276 441.36731) 11371 POINT(613.247192 284.256378) 11372 POINT(20.5897274 650.282959) 11373 POINT(701.629395 101.869263) 11374 POINT(461.951782 565.137207) 11375 POINT(498.984436 182.170822) 11376 POINT(130.497726 68.9227142) 11377 POINT(806.728577 217.099365) 11378 POINT(958.400269 168.141739) 11379 POINT(154.78038 197.24939) 11380 POINT(299.036316 542.230591) 11381 POINT(360.630371 618.657104) 11382 POINT(783.477051 601.648254) 11383 POINT(307.409851 622.967468) 11384 POINT(278.018768 101.605392) 11385 POINT(215.06485 762.896851) 11386 POINT(935.94873 761.825806) 11387 POINT(766.285156 187.691833) 11388 POINT(640.134216 270.134338) 11389 POINT(994.694702 570.937744) 11390 POINT(840.530579 242.22023) 11391 POINT(351.861053 587.81604) 11392 POINT(415.022766 555.415649) 11393 POINT(174.940125 988.597412) 11394 POINT(188.958618 245.179352) 11395 POINT(289.360626 623.2677) 11396 POINT(807.257202 264.213104) 11397 POINT(440.143311 227.814972) 11398 POINT(885.138367 661.438416) 11399 POINT(968.610779 480.584625) 11400 POINT(594.527832 587.702759) 11401 POINT(783.894043 137.591537) 11402 POINT(851.360107 313.990326) 11403 POINT(444.406281 834.732483) 11404 POINT(35.7730141 633.613281) 11405 POINT(615.098022 44.0783424) 11406 POINT(137.138351 480.529266) 11407 POINT(431.706024 348.064514) 11408 POINT(506.694 840.346985) 11409 POINT(341.375061 572.294312) 11410 POINT(113.055466 458.169128) 11411 POINT(836.097168 833.298157) 11412 POINT(624.035645 998.212158) 11413 POINT(515.633362 416.056061) 11414 POINT(529.058411 114.804321) 11415 POINT(52.3456154 817.112854) 11416 POINT(320.21286 924.181396) 11417 POINT(652.174011 758.055786) 11418 POINT(869.97876 83.3927917) 11419 POINT(362.484375 491.947021) 11420 POINT(186.305084 689.134583) 11421 POINT(245.436707 58.6223907) 11422 POINT(750.615601 498.605988) 11423 POINT(769.774048 75.8012314) 11424 POINT(414.13913 180.330063) 11425 POINT(357.506378 229.554764) 11426 POINT(58.5425758 949.70459) 11427 POINT(516.002319 413.329376) 11428 POINT(837.123596 696.889404) 11429 POINT(379.758118 788.516174) 11430 POINT(174.868469 629.162354) 11431 POINT(346.972565 246.22699) 11432 POINT(894.695312 222.36911) 11433 POINT(219.524826 449.831085) 11434 POINT(881.503723 493.475311) 11435 POINT(314.663971 956.902527) 11436 POINT(826.681641 996.031494) 11437 POINT(214.431015 749.126709) 11438 POINT(498.053284 620.756775) 11439 POINT(534.428894 746.643433) 11440 POINT(41.5807266 13.2166557) 11441 POINT(535.043091 722.113892) 11442 POINT(382.277924 849.132935) 11443 POINT(851.725403 147.966217) 11444 POINT(396.702972 125.256172) 11445 POINT(700.744629 361.902893) 11446 POINT(175.135757 210.61879) 11447 POINT(815.266724 490.565094) 11448 POINT(78.3164597 480.658051) 11449 POINT(104.252777 564.601196) 11450 POINT(74.7361832 637.066223) 11451 POINT(702.100647 441.25174) 11452 POINT(876.381653 151.831985) 11453 POINT(116.950119 539.542664) 11454 POINT(983.109253 907.942444) 11455 POINT(595.016541 20.50424) 11456 POINT(911.156738 925.412659) 11457 POINT(430.213684 208.347702) 11458 POINT(585.512756 834.109131) 11459 POINT(673.808655 561.720154) 11460 POINT(287.901245 399.277954) 11461 POINT(777.180847 946.117798) 11462 POINT(294.07077 227.438095) 11463 POINT(949.308777 923.9953) 11464 POINT(731.098877 725.648315) 11465 POINT(74.8996887 128.41626) 11466 POINT(515.856934 293.012054) 11467 POINT(642.732849 895.22644) 11468 POINT(981.068054 567.191895) 11469 POINT(328.568878 339.291718) 11470 POINT(890.106262 698.824524) 11471 POINT(292.770081 129.562607) 11472 POINT(623.522339 91.8499146) 11473 POINT(347.580811 768.450317) 11474 POINT(980.059631 727.305908) 11475 POINT(458.974915 151.705673) 11476 POINT(66.5889206 122.13559) 11477 POINT(437.338104 279.785126) 11478 POINT(402.015839 593.666992) 11479 POINT(582.405334 930.28894) 11480 POINT(579.988586 875.94812) 11481 POINT(751.323059 868.822571) 11482 POINT(527.485291 227.965866) 11483 POINT(163.084656 273.53714) 11484 POINT(667.525818 88.4838181) 11485 POINT(914.656006 743.24707) 11486 POINT(703.911072 560.967651) 11487 POINT(918.745056 832.639587) 11488 POINT(556.73291 688.614563) 11489 POINT(863.387207 58.5170097) 11490 POINT(405.242035 628.280334) 11491 POINT(0.445793211 811.743225) 11492 POINT(258.457611 618.142395) 11493 POINT(583.024719 419.686554) 11494 POINT(845.714783 612.915039) 11495 POINT(658.040344 578.19989) 11496 POINT(474.378967 828.629944) 11497 POINT(575.307739 620.899414) 11498 POINT(368.519165 283.331909) 11499 POINT(972.100342 242.678848) 11500 POINT(611.880737 968.042725) 11501 POINT(433.993317 735.621704) 11502 POINT(355.59494 152.198013) 11503 POINT(398.786774 935.980835) 11504 POINT(303.408386 778.231201) 11505 POINT(868.432983 593.533936) 11506 POINT(495.625153 80.4964752) 11507 POINT(910.29187 947.868042) 11508 POINT(121.379776 764.31781) 11509 POINT(877.971313 884.102234) 11510 POINT(994.364075 982.291382) 11511 POINT(455.857574 112.950226) 11512 POINT(629.915405 268.343384) 11513 POINT(550.708618 612.201172) 11514 POINT(714.756287 747.366394) 11515 POINT(317.009552 829.643433) 11516 POINT(521.099609 682.067322) 11517 POINT(136.926575 397.762268) 11518 POINT(293.875092 492.118561) 11519 POINT(685.528564 880.44519) 11520 POINT(346.178864 167.603851) 11521 POINT(630.484009 159.273758) 11522 POINT(999.527588 773.504456) 11523 POINT(453.81366 785.245605) 11524 POINT(271.049622 919.616821) 11525 POINT(80.7467651 50.0581932) 11526 POINT(461.445038 456.497986) 11527 POINT(774.674744 764.121887) 11528 POINT(360.581909 699.083557) 11529 POINT(253.124893 126.606674) 11530 POINT(440.296997 512.43457) 11531 POINT(421.224243 512.037903) 11532 POINT(127.772011 96.1780548) 11533 POINT(58.0472603 119.849892) 11534 POINT(482.337799 143.779831) 11535 POINT(357.421265 895.099792) 11536 POINT(471.411407 738.612671) 11537 POINT(376.211548 853.097595) 11538 POINT(648.314697 280.275513) 11539 POINT(215.953979 366.493164) 11540 POINT(669.90509 451.816284) 11541 POINT(522.205811 304.479706) 11542 POINT(502.337372 672.078491) 11543 POINT(572.528564 369.955017) 11544 POINT(799.067993 198.616394) 11545 POINT(609.105286 47.0740395) 11546 POINT(199.727936 517.424011) 11547 POINT(4.26649904 249.609055) 11548 POINT(798.172729 478.631165) 11549 POINT(503.40567 816.506653) 11550 POINT(822.442444 805.507568) 11551 POINT(924.794067 217.221222) 11552 POINT(421.217957 751.367188) 11553 POINT(892.66333 253.663406) 11554 POINT(76.4732513 329.693512) 11555 POINT(99.7415237 741.407349) 11556 POINT(479.331451 362.056976) 11557 POINT(227.468002 449.251404) 11558 POINT(87.7139816 631.823975) 11559 POINT(563.75116 318.052063) 11560 POINT(105.417946 395.559906) 11561 POINT(944.884521 777.302124) 11562 POINT(311.087219 975.314392) 11563 POINT(383.727875 957.174438) 11564 POINT(253.606033 861.189087) 11565 POINT(432.255402 646.308594) 11566 POINT(502.306885 812.886292) 11567 POINT(342.946564 878.703064) 11568 POINT(283.744781 620.115784) 11569 POINT(648.265625 219.540405) 11570 POINT(292.466766 114.202744) 11571 POINT(156.765793 848.098389) 11572 POINT(275.14563 507.042114) 11573 POINT(182.427353 860.183044) 11574 POINT(152.716934 349.334869) 11575 POINT(273.07785 302.488525) 11576 POINT(663.960205 169.121719) 11577 POINT(804.651306 42.2982559) 11578 POINT(439.610657 885.903076) 11579 POINT(659.259827 918.959534) 11580 POINT(905.03064 247.646988) 11581 POINT(233.328903 735.204895) 11582 POINT(771.274292 50.899147) 11583 POINT(232.271927 558.869507) 11584 POINT(121.743027 661.811218) 11585 POINT(933.356873 816.729858) 11586 POINT(200.372803 132.61171) 11587 POINT(749.683167 585.530396) 11588 POINT(126.36232 918.89209) 11589 POINT(244.793945 899.881958) 11590 POINT(521.914795 153.738663) 11591 POINT(46.7858887 397.329803) 11592 POINT(768.518982 571.492859) 11593 POINT(38.3473549 67.8518677) 11594 POINT(582.259521 333.687195) 11595 POINT(478.595398 644.341125) 11596 POINT(300.96637 170.015762) 11597 POINT(395.644379 403.843262) 11598 POINT(640.260681 776.22406) 11599 POINT(305.41156 3.6953907) 11600 POINT(339.420471 317.332794) 11601 POINT(520.252136 875.092041) 11602 POINT(672.300964 68.0534439) 11603 POINT(546.75415 577.46759) 11604 POINT(37.241024 722.655518) 11605 POINT(199.666229 84.5317535) 11606 POINT(10.0410976 154.564301) 11607 POINT(520.864746 946.55426) 11608 POINT(295.906433 472.897766) 11609 POINT(658.997681 638.914856) 11610 POINT(853.029175 70.9023285) 11611 POINT(885.602356 664.996826) 11612 POINT(188.681961 92.3610229) 11613 POINT(573.843994 398.801666) 11614 POINT(7.884552 849.686218) 11615 POINT(501.440887 511.432343) 11616 POINT(287.574585 345.364258) 11617 POINT(342.839203 673.679565) 11618 POINT(671.592468 201.101959) 11619 POINT(848.41217 127.827614) 11620 POINT(252.614365 151.476379) 11621 POINT(459.634827 504.576843) 11622 POINT(198.51416 366.772827) 11623 POINT(46.2175751 770.382446) 11624 POINT(867.696411 429.30069) 11625 POINT(969.572205 536.887878) 11626 POINT(569.039307 885.716614) 11627 POINT(750.367188 773.461304) 11628 POINT(688.66394 162.298492) 11629 POINT(548.063171 627.726379) 11630 POINT(712.376831 878.866577) 11631 POINT(327.086334 984.641418) 11632 POINT(607.006897 488.928436) 11633 POINT(695.70575 254.97673) 11634 POINT(926.800842 858.044922) 11635 POINT(745.863281 867.440125) 11636 POINT(926.497803 159.417526) 11637 POINT(909.417603 999.313721) 11638 POINT(387.738068 995.943909) 11639 POINT(570.893677 188.012939) 11640 POINT(0.279473484 272.768188) 11641 POINT(459.378448 855.812927) 11642 POINT(137.405273 255.58197) 11643 POINT(281.31076 203.08812) 11644 POINT(82.3668137 810.14563) 11645 POINT(578.331177 898.375854) 11646 POINT(9.27289295 770.866882) 11647 POINT(904.973633 48.6315651) 11648 POINT(810.218445 114.57782) 11649 POINT(452.797913 868.045471) 11650 POINT(656.453857 394.312561) 11651 POINT(611.717407 592.212219) 11652 POINT(653.980347 131.940491) 11653 POINT(395.025879 585.388184) 11654 POINT(225.185059 383.61908) 11655 POINT(479.3526 356.764038) 11656 POINT(743.198914 924.487915) 11657 POINT(969.985901 697.47229) 11658 POINT(242.890594 785.740845) 11659 POINT(119.335045 249.418304) 11660 POINT(713.244751 695.729492) 11661 POINT(653.503235 161.571655) 11662 POINT(974.885132 195.230759) 11663 POINT(228.907501 736.304932) 11664 POINT(601.386658 324.241455) 11665 POINT(805.60968 40.577198) 11666 POINT(844.596741 213.063034) 11667 POINT(422.650391 792.700012) 11668 POINT(366.396973 194.041382) 11669 POINT(357.461914 639.198914) 11670 POINT(509.25885 112.800865) 11671 POINT(888.759277 427.621887) 11672 POINT(305.76828 930.443604) 11673 POINT(630.680969 745.393616) 11674 POINT(836.340881 932.889771) 11675 POINT(514.000977 832.955017) 11676 POINT(501.06424 502.850861) 11677 POINT(134.723419 758.054626) 11678 POINT(335.557312 457.021027) 11679 POINT(126.182152 239.407715) 11680 POINT(434.623474 39.7281723) 11681 POINT(20.9041023 779.851196) 11682 POINT(567.116638 318.923676) 11683 POINT(414.098053 375.086365) 11684 POINT(89.7815933 616.043213) 11685 POINT(110.947693 333.207336) 11686 POINT(668.939636 773.608398) 11687 POINT(902.310364 17.1947193) 11688 POINT(171.970169 219.746567) 11689 POINT(63.4538994 217.761398) 11690 POINT(423.898773 513.998962) 11691 POINT(81.7376938 503.34433) 11692 POINT(569.497925 81.4045334) 11693 POINT(293.419128 169.248215) 11694 POINT(222.700027 280.053436) 11695 POINT(426.923584 226.187958) 11696 POINT(810.514465 559.886047) 11697 POINT(717.965454 402.598938) 11698 POINT(868.848511 906.888916) 11699 POINT(566.980652 73.5649948) 11700 POINT(66.6020279 817.04425) 11701 POINT(265.684967 826.153625) 11702 POINT(419.209961 889.08905) 11703 POINT(319.59201 496.073669) 11704 POINT(203.635895 585.622986) 11705 POINT(357.516296 699.234375) 11706 POINT(157.000519 500.287933) 11707 POINT(646.083191 384.962555) 11708 POINT(487.000122 437.156006) 11709 POINT(243.826767 771.927429) 11710 POINT(353.607117 0.286626667) 11711 POINT(840.462769 225.459045) 11712 POINT(810.939636 90.4179306) 11713 POINT(165.382599 493.775024) 11714 POINT(691.46167 486.373962) 11715 POINT(426.459259 54.1306152) 11716 POINT(740.775635 466.02298) 11717 POINT(795.146484 707.179077) 11718 POINT(92.2620239 501.186584) 11719 POINT(303.968628 593.599487) 11720 POINT(231.906891 389.057953) 11721 POINT(313.350433 351.669708) 11722 POINT(223.153351 596.357788) 11723 POINT(659.955933 563.909546) 11724 POINT(620.963135 69.1743469) 11725 POINT(770.048523 96.7943954) 11726 POINT(138.053787 669.368042) 11727 POINT(38.7401962 577.069824) 11728 POINT(372.174896 746.353577) 11729 POINT(97.3637009 494.2341) 11730 POINT(352.128448 40.4253082) 11731 POINT(752.722839 209.775604) 11732 POINT(105.96666 180.59877) 11733 POINT(247.898514 193.854568) 11734 POINT(144.486252 916.865417) 11735 POINT(507.003204 819.035583) 11736 POINT(636.977051 985.095337) 11737 POINT(456.289429 3.75280404) 11738 POINT(37.4944229 104.479408) 11739 POINT(709.957642 416.408386) 11740 POINT(105.15506 154.921204) 11741 POINT(547.640625 90.9600449) 11742 POINT(210.675644 568.336609) 11743 POINT(446.741699 448.780609) 11744 POINT(796.275513 527.177551) 11745 POINT(549.582275 417.314087) 11746 POINT(72.9733963 720.086975) 11747 POINT(503.80719 647.092712) 11748 POINT(917.164307 323.449402) 11749 POINT(603.954529 584.115479) 11750 POINT(339.241058 114.390968) 11751 POINT(149.908707 199.147415) 11752 POINT(416.116486 371.794189) 11753 POINT(319.628876 619.533936) 11754 POINT(735.130859 574.038208) 11755 POINT(602.707886 378.611267) 11756 POINT(920.438782 82.9962997) 11757 POINT(259.732697 884.33197) 11758 POINT(889.129089 631.48114) 11759 POINT(239.965469 419.546021) 11760 POINT(0.740161896 764.614014) 11761 POINT(214.554153 194.325684) 11762 POINT(61.3040543 573.923401) 11763 POINT(650.444458 864.284119) 11764 POINT(265.542572 396.38443) 11765 POINT(275.660339 462.102783) 11766 POINT(105.403816 309.766693) 11767 POINT(562.030579 832.188232) 11768 POINT(239.976273 561.841187) 11769 POINT(497.269653 645.870789) 11770 POINT(464.261169 736.134705) 11771 POINT(533.209351 657.811707) 11772 POINT(588.772095 833.53894) 11773 POINT(107.678223 559.908752) 11774 POINT(58.0331116 280.355255) 11775 POINT(48.9203186 129.203293) 11776 POINT(6.45647478 543.067017) 11777 POINT(816.546326 148.948196) 11778 POINT(640.622986 812.698059) 11779 POINT(322.944397 120.576782) 11780 POINT(16.6011238 532.07489) 11781 POINT(753.110229 157.910172) 11782 POINT(571.703186 183.326889) 11783 POINT(676.360962 758.29071) 11784 POINT(997.174866 176.819641) 11785 POINT(965.892029 738.777283) 11786 POINT(980.077698 223.341858) 11787 POINT(835.244629 385.062836) 11788 POINT(980.489502 706.285889) 11789 POINT(216.23671 427.980255) 11790 POINT(978.691956 167.948776) 11791 POINT(870.655273 494.567566) 11792 POINT(163.927979 592.717712) 11793 POINT(6.01611853 100.531471) 11794 POINT(932.420776 109.209068) 11795 POINT(790.106873 497.043793) 11796 POINT(611.58728 583.439392) 11797 POINT(394.094666 961.237854) 11798 POINT(776.832642 266.486023) 11799 POINT(982.083496 646.265198) 11800 POINT(327.165375 764.134277) 11801 POINT(176.660904 368.67865) 11802 POINT(39.4505501 574.618225) 11803 POINT(813.804016 709.202271) 11804 POINT(734.864624 896.285645) 11805 POINT(433.286621 304.234375) 11806 POINT(524.599426 333.014771) 11807 POINT(687.320374 991.932861) 11808 POINT(617.782104 155.277252) 11809 POINT(273.582672 596.304138) 11810 POINT(588.750916 433.280426) 11811 POINT(770.165222 148.832367) 11812 POINT(732.199585 310.686218) 11813 POINT(858.578735 588.952148) 11814 POINT(555.345276 988.644287) 11815 POINT(434.149994 796.803833) 11816 POINT(641.384338 336.592651) 11817 POINT(416.462463 804.57312) 11818 POINT(96.3927383 25.3776951) 11819 POINT(159.54509 332.282867) 11820 POINT(793.954346 417.268433) 11821 POINT(24.0698681 291.769958) 11822 POINT(342.724365 264.553436) 11823 POINT(291.758636 505.979828) 11824 POINT(509.559387 322.396576) 11825 POINT(383.528687 772.48822) 11826 POINT(75.5849609 921.90979) 11827 POINT(573.76123 248.797745) 11828 POINT(328.572083 166.011887) 11829 POINT(687.712524 406.551849) 11830 POINT(599.329651 884.249268) 11831 POINT(819.888062 962.091431) 11832 POINT(132.681503 634.642822) 11833 POINT(938.671997 977.099121) 11834 POINT(798.306396 582.715088) 11835 POINT(445.282867 986.40979) 11836 POINT(549.724121 872.673279) 11837 POINT(759.967346 567.016113) 11838 POINT(440.577057 376.451904) 11839 POINT(820.129456 245.089142) 11840 POINT(418.784241 346.731781) 11841 POINT(826.834229 344.319672) 11842 POINT(6.94999027 284.572266) 11843 POINT(578.95105 122.543503) 11844 POINT(510.540588 175.955933) 11845 POINT(527.372009 903.540161) 11846 POINT(195.86734 460.01413) 11847 POINT(82.6399689 481.822266) 11848 POINT(273.03125 611.267029) 11849 POINT(363.45282 720.50946) 11850 POINT(783.010437 885.788452) 11851 POINT(204.511719 351.9841) 11852 POINT(104.454247 574.330444) 11853 POINT(901.805908 669.557495) 11854 POINT(699.057312 392.280304) 11855 POINT(491.562958 223.061722) 11856 POINT(542.316528 425.666107) 11857 POINT(793.74115 224.975601) 11858 POINT(29.8465099 243.680862) 11859 POINT(538.242981 74.8681335) 11860 POINT(802.189575 421.411804) 11861 POINT(496.231964 922.703552) 11862 POINT(140.27124 222.291748) 11863 POINT(102.432808 235.622925) 11864 POINT(299.524841 639.531555) 11865 POINT(847.586914 893.551331) 11866 POINT(276.549377 351.357361) 11867 POINT(91.9582367 917.352417) 11868 POINT(144.427902 508.800812) 11869 POINT(577.696533 795.866028) 11870 POINT(811.083679 140.2444) 11871 POINT(54.8460808 807.244873) 11872 POINT(111.984764 457.688232) 11873 POINT(165.849243 273.40741) 11874 POINT(759.948059 510.20282) 11875 POINT(217.665588 407.617737) 11876 POINT(259.680511 615.294189) 11877 POINT(198.369293 143.296448) 11878 POINT(325.105438 364.605286) 11879 POINT(433.679962 911.881958) 11880 POINT(188.644135 942.793518) 11881 POINT(523.836121 879.252747) 11882 POINT(991.783386 104.477325) 11883 POINT(626.165588 279.862732) 11884 POINT(926.899902 651.371216) 11885 POINT(55.4034767 596.938904) 11886 POINT(146.00354 258.293915) 11887 POINT(442.139343 833.064697) 11888 POINT(550.500427 271.426575) 11889 POINT(27.7432537 671.080383) 11890 POINT(268.081818 794.432251) 11891 POINT(867.867859 128.94519) 11892 POINT(952.361694 277.862335) 11893 POINT(880.398376 318.132324) 11894 POINT(504.986267 615.3349) 11895 POINT(499.913727 92.9853363) 11896 POINT(618.816528 747.562866) 11897 POINT(709.835327 963.615112) 11898 POINT(827.759766 194.350876) 11899 POINT(14.108778 388.326477) 11900 POINT(880.347107 127.705933) 11901 POINT(409.245209 979.842651) 11902 POINT(39.7851448 309.387695) 11903 POINT(129.725296 784.964966) 11904 POINT(865.653442 827.340027) 11905 POINT(198.151489 427.619232) 11906 POINT(617.490723 351.919281) 11907 POINT(27.2502003 853.975281) 11908 POINT(307.158844 9.70002174) 11909 POINT(233.137268 764.580994) 11910 POINT(737.16449 745.56073) 11911 POINT(745.549255 656.958252) 11912 POINT(421.251129 659.021606) 11913 POINT(386.516113 93.2120819) 11914 POINT(869.865356 595.334412) 11915 POINT(557.841675 226.887192) 11916 POINT(317.999817 723.154602) 11917 POINT(81.5261536 413.163879) 11918 POINT(10.9902229 806.914734) 11919 POINT(705.787964 543.751892) 11920 POINT(782.78894 892.064819) 11921 POINT(280.635468 515.360352) 11922 POINT(951.876526 564.554993) 11923 POINT(157.126801 396.876312) 11924 POINT(816.247498 362.351379) 11925 POINT(337.804962 609.47229) 11926 POINT(997.888855 237.062485) 11927 POINT(244.679718 995.513245) 11928 POINT(19.0562611 759.198547) 11929 POINT(446.062561 511.694794) 11930 POINT(190.760391 493.101746) 11931 POINT(143.174805 440.294952) 11932 POINT(764.65448 239.716461) 11933 POINT(838.499756 236.365463) 11934 POINT(402.52829 650.271484) 11935 POINT(145.223755 200.345474) 11936 POINT(115.565521 685.417725) 11937 POINT(733.81073 132.809967) 11938 POINT(634.224365 56.8131828) 11939 POINT(608.91925 554.337891) 11940 POINT(608.006165 806.613159) 11941 POINT(256.750519 287.905609) 11942 POINT(474.550995 610.474426) 11943 POINT(266.902649 548.504761) 11944 POINT(354.638031 927.800781) 11945 POINT(209.397461 775.203125) 11946 POINT(952.093811 355.96344) 11947 POINT(310.384491 400.587402) 11948 POINT(396.767761 200.660416) 11949 POINT(620.863037 473.049957) 11950 POINT(949.191956 470.595642) 11951 POINT(291.483337 435.937012) 11952 POINT(874.994385 0.0555955097) 11953 POINT(461.099365 597.008606) 11954 POINT(936.408386 847.147766) 11955 POINT(423.381409 580.455017) 11956 POINT(381.250977 298.483276) 11957 POINT(768.71283 795.966309) 11958 POINT(33.6112099 913.597656) 11959 POINT(300.177795 154.789291) 11960 POINT(805.380371 885.701233) 11961 POINT(713.200317 646.683472) 11962 POINT(306.999268 291.342834) 11963 POINT(406.953583 215.17688) 11964 POINT(95.8318863 402.801971) 11965 POINT(788.782104 648.12854) 11966 POINT(770.973633 386.656036) 11967 POINT(45.4451141 968.552673) 11968 POINT(616.759888 293.790833) 11969 POINT(420.013031 364.801788) 11970 POINT(779.578735 34.547039) 11971 POINT(461.855408 853.01825) 11972 POINT(202.751694 942.765442) 11973 POINT(748.611816 197.347855) 11974 POINT(364.305939 869.867676) 11975 POINT(30.715786 719.492676) 11976 POINT(587.606079 461.082336) 11977 POINT(266.456238 369.112366) 11978 POINT(603.372986 187.408112) 11979 POINT(322.342957 176.343796) 11980 POINT(615.030884 816.435852) 11981 POINT(261.449005 108.896545) 11982 POINT(292.163422 670.898682) 11983 POINT(761.319641 566.023621) 11984 POINT(526.821533 254.563416) 11985 POINT(750.967957 683.017273) 11986 POINT(25.3299046 520.24353) 11987 POINT(369.559204 231.21019) 11988 POINT(668.028748 254.330246) 11989 POINT(691.871338 883.880249) 11990 POINT(298.136292 186.979004) 11991 POINT(779.898499 697.682983) 11992 POINT(148.819427 578.236206) 11993 POINT(776.53656 817.626892) 11994 POINT(387.932526 139.860474) 11995 POINT(304.794647 152.136337) 11996 POINT(359.178619 332.925354) 11997 POINT(51.1700134 350.015045) 11998 POINT(586.228271 825.649109) 11999 POINT(349.585388 125.362129) 12000 POINT(745.296631 338.069122) 12001 POINT(925.630859 367.548004) 12002 POINT(817.649963 264.580872) 12003 POINT(870.904907 604.708557) 12004 POINT(925.431458 517.032349) 12005 POINT(883.272339 89.9651947) 12006 POINT(804.137634 525.665588) 12007 POINT(898.230408 894.449768) 12008 POINT(48.2296982 469.020844) 12009 POINT(344.81012 30.5608959) 12010 POINT(711.056702 663.878845) 12011 POINT(360.166016 418.676331) 12012 POINT(277.937439 859.947388) 12013 POINT(691.984863 842.398865) 12014 POINT(646.472351 569.471375) 12015 POINT(586.955933 318.544098) 12016 POINT(428.625214 778.043884) 12017 POINT(414.795959 211.341888) 12018 POINT(475.651459 579.036011) 12019 POINT(896.848999 134.194946) 12020 POINT(63.4979668 740.284058) 12021 POINT(710.338562 160.916794) 12022 POINT(159.930786 628.637512) 12023 POINT(616.321228 81.3899536) 12024 POINT(825.556152 606.972778) 12025 POINT(631.786255 619.387695) 12026 POINT(232.407211 191.22081) 12027 POINT(732.795166 433.87146) 12028 POINT(372.318787 264.394409) 12029 POINT(62.8175201 866.010864) 12030 POINT(82.4787064 233.682343) 12031 POINT(133.378159 304.697723) 12032 POINT(50.0149345 569.204407) 12033 POINT(375.79364 521.297363) 12034 POINT(437.083282 953.398743) 12035 POINT(44.2729988 683.270142) 12036 POINT(361.595825 713.28479) 12037 POINT(621.252136 75.2090836) 12038 POINT(798.554321 109.674042) 12039 POINT(852.89978 929.49939) 12040 POINT(358.114349 864.075684) 12041 POINT(491.788727 557.568787) 12042 POINT(627.330933 352.47937) 12043 POINT(968.397827 52.5335999) 12044 POINT(314.464478 662.932068) 12045 POINT(105.157898 846.562195) 12046 POINT(742.332214 69.0234451) 12047 POINT(756.061768 8.69860744) 12048 POINT(438.168365 922.845276) 12049 POINT(859.430054 284.065369) 12050 POINT(752.62384 918.106323) 12051 POINT(867.396179 941.775818) 12052 POINT(903.844238 656.90741) 12053 POINT(227.301529 720.629578) 12054 POINT(331.077881 402.872925) 12055 POINT(479.859314 758.471069) 12056 POINT(206.183273 390.18573) 12057 POINT(377.161285 848.309265) 12058 POINT(794.044067 544.496582) 12059 POINT(58.9951897 682.903564) 12060 POINT(680.709412 560.213379) 12061 POINT(935.275146 696.11908) 12062 POINT(760.623596 962.487671) 12063 POINT(260.540009 466.170807) 12064 POINT(54.2907982 695.09198) 12065 POINT(36.4579849 460.757812) 12066 POINT(630.95575 441.735413) 12067 POINT(501.219025 740.522095) 12068 POINT(56.3174095 973.240295) 12069 POINT(49.8601837 424.338928) 12070 POINT(244.997253 372.055847) 12071 POINT(544.333862 602.399475) 12072 POINT(446.654358 715.11261) 12073 POINT(12.0039434 571.218933) 12074 POINT(361.596893 282.933014) 12075 POINT(169.873169 884.581848) 12076 POINT(297.925751 334.749115) 12077 POINT(850.961975 657.615784) 12078 POINT(532.235046 64.3034058) 12079 POINT(628.762024 734.894348) 12080 POINT(7.37966299 287.810303) 12081 POINT(943.579285 910.561951) 12082 POINT(534.621155 363.649445) 12083 POINT(116.998032 57.4217834) 12084 POINT(307.529205 592.785767) 12085 POINT(411.896484 236.837296) 12086 POINT(778.410095 80.3303223) 12087 POINT(947.805725 91.8912659) 12088 POINT(494.961151 573.357239) 12089 POINT(835.44104 807.880066) 12090 POINT(998.620361 839.993591) 12091 POINT(448.572937 907.866089) 12092 POINT(203.14801 572.434448) 12093 POINT(732.810242 153.273758) 12094 POINT(111.906685 825.074219) 12095 POINT(864.215759 872.61908) 12096 POINT(307.795013 522.17218) 12097 POINT(248.977982 443.260986) 12098 POINT(326.65921 361.802795) 12099 POINT(709.751953 215.030518) 12100 POINT(972.198914 419.314972) 12101 POINT(974.015015 469.836304) 12102 POINT(469.973389 219.807541) 12103 POINT(82.2447281 652.581848) 12104 POINT(415.29068 951.505432) 12105 POINT(714.420166 946.321228) 12106 POINT(22.8536053 667.30957) 12107 POINT(415.912598 674.494141) 12108 POINT(716.479614 747.731628) 12109 POINT(340.017975 136.927017) 12110 POINT(539.584412 943.075012) 12111 POINT(44.082737 481.284515) 12112 POINT(859.111389 984.877441) 12113 POINT(537.385376 500.661377) 12114 POINT(968.023682 955.700867) 12115 POINT(717.799011 769.493347) 12116 POINT(258.298523 372.378693) 12117 POINT(415.029175 988.037842) 12118 POINT(884.641907 701.476746) 12119 POINT(923.278076 520.058838) 12120 POINT(219.07579 858.278076) 12121 POINT(426.042633 864.397461) 12122 POINT(811.452698 103.97715) 12123 POINT(439.040192 699.793884) 12124 POINT(127.280602 752.509399) 12125 POINT(0.727317154 450.253998) 12126 POINT(591.549377 721.704529) 12127 POINT(78.4237671 317.645966) 12128 POINT(688.250916 347.032074) 12129 POINT(614.675537 966.925842) 12130 POINT(265.783051 44.5166359) 12131 POINT(974.325562 590.897522) 12132 POINT(197.380905 527.474792) 12133 POINT(757.064819 754.818787) 12134 POINT(15.1881361 905.23584) 12135 POINT(80.3918839 71.1910858) 12136 POINT(651.768799 317.237396) 12137 POINT(409.424805 492.076599) 12138 POINT(512.080933 869.751709) 12139 POINT(786.517944 456.239258) 12140 POINT(493.636658 772.538086) 12141 POINT(196.894089 682.915405) 12142 POINT(457.327972 337.093811) 12143 POINT(676.395996 470.307281) 12144 POINT(913.897339 155.682587) 12145 POINT(331.99295 607.812927) 12146 POINT(172.100662 480.36322) 12147 POINT(490.986053 635.031555) 12148 POINT(938.189575 853.87146) 12149 POINT(835.195374 131.822189) 12150 POINT(859.502991 90.0777969) 12151 POINT(304.163971 971.864441) 12152 POINT(967.896545 82.1494064) 12153 POINT(287.091187 252.631882) 12154 POINT(554.779907 843.398926) 12155 POINT(765.437622 678.412109) 12156 POINT(55.109375 11.641221) 12157 POINT(543.688293 36.5982361) 12158 POINT(842.38385 515.871338) 12159 POINT(19.5012951 603.159302) 12160 POINT(953.192078 598.006836) 12161 POINT(429.410645 638.822937) 12162 POINT(133.99704 176.722931) 12163 POINT(573.533875 906.550415) 12164 POINT(903.549622 50.0872307) 12165 POINT(411.60788 432.454346) 12166 POINT(673.678284 464.434174) 12167 POINT(950.527527 641.123535) 12168 POINT(194.396469 575.002869) 12169 POINT(655.898315 882.740967) 12170 POINT(464.622253 626.201599) 12171 POINT(440.567413 109.370888) 12172 POINT(758.7677 763.503662) 12173 POINT(663.426086 692.966614) 12174 POINT(996.590454 123.083893) 12175 POINT(641.86554 765.225037) 12176 POINT(466.710449 738.160645) 12177 POINT(899.119995 922.249573) 12178 POINT(993.893005 252.032562) 12179 POINT(769.484009 113.547157) 12180 POINT(310.53949 977.026672) 12181 POINT(434.300812 229.288574) 12182 POINT(400.870422 416.673981) 12183 POINT(902.066467 531.719971) 12184 POINT(382.234039 546.684204) 12185 POINT(647.490234 131.49086) 12186 POINT(475.145569 390.623199) 12187 POINT(435.529907 188.425201) 12188 POINT(398.50061 331.135468) 12189 POINT(454.032898 185.518051) 12190 POINT(168.48558 160.274139) 12191 POINT(17.5497818 266.910706) 12192 POINT(541.720276 726.781372) 12193 POINT(368.151733 293.138489) 12194 POINT(940.934082 708.424622) 12195 POINT(147.80632 513.530579) 12196 POINT(553.944763 188.772934) 12197 POINT(940.312683 915.375) 12198 POINT(775.944763 405.759399) 12199 POINT(446.341797 727.066589) 12200 POINT(346.301514 960.308899) 12201 POINT(758.28479 838.28949) 12202 POINT(442.567352 514.12738) 12203 POINT(316.011169 180.316666) 12204 POINT(867.611328 293.99231) 12205 POINT(252.037704 275.34671) 12206 POINT(985.306396 673.714233) 12207 POINT(354.891907 122.663338) 12208 POINT(613.720703 483.147034) 12209 POINT(0.628001451 514.151733) 12210 POINT(13.0962353 145.625275) 12211 POINT(410.650757 450.809479) 12212 POINT(952.992615 61.0358658) 12213 POINT(103.481979 19.4565201) 12214 POINT(605.902039 12.0575228) 12215 POINT(611.249268 354.597961) 12216 POINT(393.597809 597.208984) 12217 POINT(448.991821 889.683105) 12218 POINT(560.781311 498.153687) 12219 POINT(55.0013695 245.806183) 12220 POINT(24.692421 622.752075) 12221 POINT(390.098877 830.812378) 12222 POINT(258.806427 72.7956009) 12223 POINT(97.8801804 560.034424) 12224 POINT(626.263245 349.992065) 12225 POINT(419.545959 359.338409) 12226 POINT(650.072998 10.0080957) 12227 POINT(337.103119 85.2826843) 12228 POINT(361.367493 17.2571068) 12229 POINT(926.738525 775.091248) 12230 POINT(726.085449 648.308289) 12231 POINT(457.408234 315.537506) 12232 POINT(539.689697 885.576721) 12233 POINT(13.6620026 555.080505) 12234 POINT(377.135101 672.249817) 12235 POINT(80.0664062 953.667236) 12236 POINT(672.782166 141.747742) 12237 POINT(649.060852 211.116028) 12238 POINT(716.853149 358.575317) 12239 POINT(634.557739 95.149971) 12240 POINT(929.05304 220.979294) 12241 POINT(148.092392 326.811768) 12242 POINT(796.943298 878.804443) 12243 POINT(58.9727097 812.635742) 12244 POINT(140.50856 352.37085) 12245 POINT(78.9259796 443.680908) 12246 POINT(132.169083 430.74881) 12247 POINT(827.582031 831.070312) 12248 POINT(713.454224 451.765045) 12249 POINT(218.267166 701.382629) 12250 POINT(608.989136 183.359833) 12251 POINT(402.65097 734.085571) 12252 POINT(151.802597 839.056641) 12253 POINT(104.542458 653.781494) 12254 POINT(160.807281 762.47821) 12255 POINT(712.458252 674.586548) 12256 POINT(414.332458 640.828064) 12257 POINT(70.4896164 480.332397) 12258 POINT(58.62146 279.469727) 12259 POINT(668.610657 875.943604) 12260 POINT(996.187866 154.221207) 12261 POINT(376.155579 891.405884) 12262 POINT(787.927917 710.393921) 12263 POINT(53.1290665 304.922699) 12264 POINT(450.102417 894.243408) 12265 POINT(208.811981 386.519592) 12266 POINT(261.056519 770.268799) 12267 POINT(329.41275 773.46521) 12268 POINT(44.2782173 524.245483) 12269 POINT(868.056091 166.04335) 12270 POINT(548.683289 295.155823) 12271 POINT(61.0731888 383.654053) 12272 POINT(391.545013 378.098633) 12273 POINT(412.372772 919.797729) 12274 POINT(405.087372 544.20636) 12275 POINT(658.76001 668.679871) 12276 POINT(178.370056 822.635559) 12277 POINT(407.691132 920.066101) 12278 POINT(608.788757 764.472961) 12279 POINT(117.485771 2.34763432) 12280 POINT(572.484314 280.21051) 12281 POINT(188.976669 331.8927) 12282 POINT(543.524536 823.203674) 12283 POINT(255.58786 850.640442) 12284 POINT(494.336426 333.772247) 12285 POINT(222.658508 420.141144) 12286 POINT(504.090851 705.500977) 12287 POINT(721.349915 221.08403) 12288 POINT(700.281067 970.632996) 12289 POINT(740.698242 380.637878) 12290 POINT(927.398804 199.642471) 12291 POINT(694.436707 229.131714) 12292 POINT(544.353088 686.15448) 12293 POINT(806.365295 851.828308) 12294 POINT(121.16246 148.022644) 12295 POINT(776.680359 45.5166779) 12296 POINT(360.674805 864.86322) 12297 POINT(367.291138 773.723755) 12298 POINT(90.9572678 228.590073) 12299 POINT(40.3876076 614.494446) 12300 POINT(639.988892 584.044006) 12301 POINT(653.13269 152.519882) 12302 POINT(750.957825 349.819061) 12303 POINT(582.221252 440.125061) 12304 POINT(561.5047 743.651489) 12305 POINT(483.183319 462.117523) 12306 POINT(144.484497 391.667297) 12307 POINT(216.841904 426.221741) 12308 POINT(985.190613 216.417435) 12309 POINT(663.527161 867.879761) 12310 POINT(297.557465 205.636444) 12311 POINT(136.878098 225.318069) 12312 POINT(709.841492 533.321411) 12313 POINT(673.840332 193.309906) 12314 POINT(981.979248 498.966095) 12315 POINT(464.426483 802.983582) 12316 POINT(658.694397 472.130951) 12317 POINT(270.700897 566.936584) 12318 POINT(974.034546 471.155579) 12319 POINT(624.166443 956.04364) 12320 POINT(667.061523 800.50647) 12321 POINT(467.277161 984.54425) 12322 POINT(360.718658 845.422485) 12323 POINT(379.305725 336.735657) 12324 POINT(715.394958 340.205414) 12325 POINT(588.520813 600.988159) 12326 POINT(67.4746399 243.370132) 12327 POINT(188.957565 129.561066) 12328 POINT(776.393127 465.209473) 12329 POINT(746.500671 426.185272) 12330 POINT(59.7407379 688.051453) 12331 POINT(269.181396 903.568848) 12332 POINT(926.202881 124.136757) 12333 POINT(132.269165 241.473389) 12334 POINT(605.178955 388.779541) 12335 POINT(369.802948 320.031952) 12336 POINT(7.46836138 486.091125) 12337 POINT(978.663025 975.382996) 12338 POINT(574.276672 860.44989) 12339 POINT(815.261963 313.956207) 12340 POINT(925.922302 349.139008) 12341 POINT(912.695557 481.967377) 12342 POINT(4.08326149 860.803528) 12343 POINT(800.11853 87.5865326) 12344 POINT(612.409607 521.893616) 12345 POINT(686.708069 650.188354) 12346 POINT(53.1639557 590.973633) 12347 POINT(278.482117 755.05249) 12348 POINT(788.680298 491.22525) 12349 POINT(954.202881 39.4565887) 12350 POINT(35.4233742 97.8235016) 12351 POINT(41.509964 759.52124) 12352 POINT(937.983459 822.905701) 12353 POINT(839.291626 784.276794) 12354 POINT(436.271973 840.995544) 12355 POINT(738.254272 247.703613) 12356 POINT(300.437958 907.033447) 12357 POINT(537.947083 340.049957) 12358 POINT(686.678284 943.258362) 12359 POINT(662.52063 431.283783) 12360 POINT(288.352997 856.375854) 12361 POINT(84.756813 752.435974) 12362 POINT(998.970703 729.64978) 12363 POINT(102.032974 590.821716) 12364 POINT(448.115753 593.303223) 12365 POINT(720.633606 524.282227) 12366 POINT(752.82251 779.07959) 12367 POINT(926.082764 784.902161) 12368 POINT(982.958557 419.779083) 12369 POINT(4.94596195 826.973877) 12370 POINT(760.674438 861.469788) 12371 POINT(873.973511 515.782043) 12372 POINT(894.863831 654.909485) 12373 POINT(929.789917 757.165771) 12374 POINT(238.918884 814.172913) 12375 POINT(698.953796 572.513672) 12376 POINT(4.06028366 245.844101) 12377 POINT(814.630066 575.203552) 12378 POINT(464.491211 623.325012) 12379 POINT(920.965942 23.4982986) 12380 POINT(461.008667 610.35968) 12381 POINT(686.297302 378.147552) 12382 POINT(906.08252 718.952087) 12383 POINT(446.41864 862.650635) 12384 POINT(878.47168 353.247101) 12385 POINT(182.337189 458.160828) 12386 POINT(85.0096817 767.063721) 12387 POINT(724.326233 126.832329) 12388 POINT(880.206787 913.660583) 12389 POINT(754.961304 676.126648) 12390 POINT(542.848206 47.6320267) 12391 POINT(425.539429 396.938019) 12392 POINT(688.016846 646.878174) 12393 POINT(98.3612137 540.711243) 12394 POINT(71.2542038 844.267212) 12395 POINT(855.424805 470.994507) 12396 POINT(350.338074 321.460938) 12397 POINT(273.903687 324.689331) 12398 POINT(793.971313 139.565903) 12399 POINT(440.233856 654.860657) 12400 POINT(353.241669 521.586914) 12401 POINT(965.73175 473.202087) 12402 POINT(781.839844 309.522125) 12403 POINT(663.53479 554.591125) 12404 POINT(648.668152 984.376404) 12405 POINT(663.556091 762.71759) 12406 POINT(628.694458 441.054352) 12407 POINT(771.463257 474.255005) 12408 POINT(584.911255 473.312744) 12409 POINT(339.926971 154.81665) 12410 POINT(819.358215 358.617523) 12411 POINT(414.180603 523.975159) 12412 POINT(830.812805 391.402496) 12413 POINT(366.036926 55.5276184) 12414 POINT(780.510376 439.031464) 12415 POINT(145.811966 325.182739) 12416 POINT(147.823654 971.50769) 12417 POINT(993.110046 738.785767) 12418 POINT(221.025604 818.072021) 12419 POINT(366.268188 763.556152) 12420 POINT(783.034546 546.322632) 12421 POINT(715.693115 21.6939926) 12422 POINT(740.453125 648.035034) 12423 POINT(855.739075 584.841309) 12424 POINT(331.471924 96.7557907) 12425 POINT(228.671204 889.613892) 12426 POINT(712.624329 652.397827) 12427 POINT(526.278381 754.726135) 12428 POINT(147.402924 5.01670885) 12429 POINT(491.587402 660.716492) 12430 POINT(135.947586 341.866028) 12431 POINT(394.783417 411.169067) 12432 POINT(772.085815 697.497559) 12433 POINT(621.855835 452.475525) 12434 POINT(482.769226 905.508179) 12435 POINT(67.804512 926.057556) 12436 POINT(389.350128 652.576965) 12437 POINT(952.712708 166.685211) 12438 POINT(577.250366 971.345093) 12439 POINT(221.004028 62.7999153) 12440 POINT(20.5839291 69.7638092) 12441 POINT(612.260376 944.938354) 12442 POINT(184.529694 142.673737) 12443 POINT(654.715271 467.429047) 12444 POINT(27.1525669 349.137054) 12445 POINT(406.714935 63.1006012) 12446 POINT(303.511292 459.570862) 12447 POINT(511.936188 763.024658) 12448 POINT(500.96759 413.826721) 12449 POINT(623.977356 531.169006) 12450 POINT(121.439194 709.434631) 12451 POINT(156.22464 330.736023) 12452 POINT(292.870056 823.321167) 12453 POINT(612.905212 244.00444) 12454 POINT(210.48822 816.087097) 12455 POINT(24.3450851 455.414642) 12456 POINT(753.688171 571.673157) 12457 POINT(639.170105 388.778473) 12458 POINT(824.922974 373.874359) 12459 POINT(492.149536 889.84198) 12460 POINT(744.273865 442.218353) 12461 POINT(570.343079 956.578186) 12462 POINT(91.9458923 761.365051) 12463 POINT(422.058014 48.7647362) 12464 POINT(108.518723 799.207031) 12465 POINT(400.859528 628.46228) 12466 POINT(480.175873 168.661972) 12467 POINT(596.636902 982.426514) 12468 POINT(597.2948 736.789795) 12469 POINT(491.771362 10.3647375) 12470 POINT(176.770081 303.006592) 12471 POINT(685.156494 999.010742) 12472 POINT(181.46109 577.087402) 12473 POINT(670.702942 176.593048) 12474 POINT(907.520508 499.268066) 12475 POINT(738.641174 306.386871) 12476 POINT(798.522217 811.613525) 12477 POINT(14.1848974 748.270203) 12478 POINT(293.828308 455.075256) 12479 POINT(463.80954 325.778656) 12480 POINT(840.220093 714.107422) 12481 POINT(217.547394 280.92041) 12482 POINT(56.2784195 834.761841) 12483 POINT(687.433472 393.44873) 12484 POINT(107.286194 17.874754) 12485 POINT(946.813293 564.501343) 12486 POINT(246.608353 541.960449) 12487 POINT(490.028961 411.221527) 12488 POINT(532.775879 247.021439) 12489 POINT(462.537598 549.535278) 12490 POINT(218.183884 547.594604) 12491 POINT(461.423676 632.642822) 12492 POINT(706.852783 518.506287) 12493 POINT(107.299744 4.5957365) 12494 POINT(229.665985 778.182007) 12495 POINT(410.628876 178.799728) 12496 POINT(123.585403 890.726013) 12497 POINT(956.560791 683.2547) 12498 POINT(417.373077 718.776672) 12499 POINT(648.577271 66.3034973) 12500 POINT(114.264656 624.386414) 12501 POINT(46.8570175 732.700195) 12502 POINT(368.912842 65.5408707) 12503 POINT(654.669556 499.661804) 12504 POINT(631.944946 42.7012177) 12505 POINT(115.808937 311.582886) 12506 POINT(683.97876 974.853271) 12507 POINT(536.706848 931.245605) 12508 POINT(408.358124 30.5003719) 12509 POINT(715.181396 901.253845) 12510 POINT(717.776001 199.021988) 12511 POINT(198.667526 924.281433) 12512 POINT(517.044128 595.618286) 12513 POINT(891.240173 592.405823) 12514 POINT(168.362518 673.086426) 12515 POINT(541.921021 167.775726) 12516 POINT(45.4873505 330.970825) 12517 POINT(365.906464 708.232849) 12518 POINT(291.260529 922.85614) 12519 POINT(342.853271 87.0069351) 12520 POINT(404.24353 62.0202141) 12521 POINT(297.71994 485.574402) 12522 POINT(303.015106 1.2478931) 12523 POINT(673.511169 369.194) 12524 POINT(782.487488 441.864899) 12525 POINT(253.377518 177.111404) 12526 POINT(969.945557 528.146667) 12527 POINT(861.757202 381.179901) 12528 POINT(397.10611 764.981323) 12529 POINT(978.624084 860.533386) 12530 POINT(469.156738 808.431213) 12531 POINT(23.5569782 894.443298) 12532 POINT(476.407928 810.682983) 12533 POINT(921.528198 444.697449) 12534 POINT(355.946594 933.467224) 12535 POINT(142.405746 752.478577) 12536 POINT(369.714783 98.651947) 12537 POINT(231.68425 848.151855) 12538 POINT(875.068359 233.287125) 12539 POINT(519.533264 116.561378) 12540 POINT(780.546692 541.435974) 12541 POINT(135.640182 91.9971619) 12542 POINT(912.873474 439.83728) 12543 POINT(173.40834 708.142822) 12544 POINT(883.806702 112.594749) 12545 POINT(171.857391 96.9115601) 12546 POINT(603.184814 446.09021) 12547 POINT(428.197784 29.5924282) 12548 POINT(6.31736374 814.21698) 12549 POINT(757.767761 303.266113) 12550 POINT(971.816772 601.480896) 12551 POINT(498.21701 889.736511) 12552 POINT(625.255737 923.818787) 12553 POINT(957.000366 843.609619) 12554 POINT(32.9820671 71.0419464) 12555 POINT(349.042572 686.614563) 12556 POINT(670.479858 228.174377) 12557 POINT(116.607872 888.402405) 12558 POINT(435.393188 903.775879) 12559 POINT(495.839447 807.104065) 12560 POINT(504.434052 710.41748) 12561 POINT(252.131058 958.731262) 12562 POINT(96.6883316 105.21698) 12563 POINT(685.589172 191.539139) 12564 POINT(497.266083 946.791565) 12565 POINT(672.597351 453.83844) 12566 POINT(261.880829 189.798859) 12567 POINT(602.286865 581.176636) 12568 POINT(814.984863 290.716919) 12569 POINT(358.056976 376.649658) 12570 POINT(74.8518677 400.558777) 12571 POINT(832.809387 217.338303) 12572 POINT(894.932068 774.380066) 12573 POINT(29.0185146 257.087524) 12574 POINT(61.4768562 26.8728104) 12575 POINT(336.038086 793.285217) 12576 POINT(95.5366974 541.84082) 12577 POINT(680.153076 570.808289) 12578 POINT(888.795593 25.3307457) 12579 POINT(568.953247 273.357086) 12580 POINT(176.267319 542.692627) 12581 POINT(589.894287 530.101318) 12582 POINT(386.707214 454.523407) 12583 POINT(240.801025 788.635559) 12584 POINT(588.890808 161.597855) 12585 POINT(463.069397 984.042725) 12586 POINT(96.9903564 71.4291611) 12587 POINT(390.064087 194.366196) 12588 POINT(42.593338 436.562042) 12589 POINT(415.453949 306.594971) 12590 POINT(549.020874 805.250244) 12591 POINT(108.852699 31.6028442) 12592 POINT(443.213226 527.598267) 12593 POINT(967.150635 574.197754) 12594 POINT(52.3776321 723.964233) 12595 POINT(775.463684 574.011658) 12596 POINT(100.781754 137.471771) 12597 POINT(75.9512329 38.4951134) 12598 POINT(43.5992661 539.519165) 12599 POINT(98.2390671 360.500824) 12600 POINT(49.7622108 657.505676) 12601 POINT(512.347595 885.196106) 12602 POINT(927.673523 659.515503) 12603 POINT(622.487488 115.317841) 12604 POINT(432.823975 913.965454) 12605 POINT(554.615479 536.668457) 12606 POINT(914.412354 286.382233) 12607 POINT(607.116089 239.482391) 12608 POINT(161.682693 524.330566) 12609 POINT(65.4036026 303.715088) 12610 POINT(565.684875 89.4676743) 12611 POINT(338.751587 120.900009) 12612 POINT(487.483368 37.800705) 12613 POINT(500.517426 21.0857506) 12614 POINT(641.552429 531.131104) 12615 POINT(18.5131588 355.228088) 12616 POINT(688.398926 230.671143) 12617 POINT(296.095093 411.627441) 12618 POINT(361.668457 14.8333149) 12619 POINT(330.232758 595.542297) 12620 POINT(813.560974 154.754028) 12621 POINT(382.130859 315.5784) 12622 POINT(382.877136 641.390625) 12623 POINT(678.799927 156.078003) 12624 POINT(310.136322 795.80835) 12625 POINT(278.309296 594.362732) 12626 POINT(634.765564 508.968781) 12627 POINT(873.44281 683.797974) 12628 POINT(404.306549 488.982574) 12629 POINT(342.371124 472.343506) 12630 POINT(651.992737 173.05864) 12631 POINT(723.138306 181.264099) 12632 POINT(307.10437 559.561462) 12633 POINT(261.739349 315.34491) 12634 POINT(195.54187 94.5892792) 12635 POINT(609.97821 415.26767) 12636 POINT(672.505676 9.84950256) 12637 POINT(805.892273 361.353638) 12638 POINT(764.608948 647.497742) 12639 POINT(611.200378 277.898773) 12640 POINT(247.870819 456.809723) 12641 POINT(189.978287 716.663574) 12642 POINT(66.6650925 531.489441) 12643 POINT(151.72673 980.212463) 12644 POINT(325.774506 940.118958) 12645 POINT(139.423431 9.82772446) 12646 POINT(635.296692 241.38649) 12647 POINT(486.433685 53.3759766) 12648 POINT(431.459503 666.586853) 12649 POINT(890.793335 456.133545) 12650 POINT(563.750549 581.376099) 12651 POINT(535.011719 8.15711021) 12652 POINT(661.593079 234.426804) 12653 POINT(915.926025 726.91925) 12654 POINT(756.679749 80.6347961) 12655 POINT(722.155334 160.841278) 12656 POINT(227.702393 389.654938) 12657 POINT(114.361649 940.900452) 12658 POINT(193.406891 566.218384) 12659 POINT(511.956055 572.140808) 12660 POINT(51.60886 906.933533) 12661 POINT(583.35321 298.777863) 12662 POINT(443.092072 79.7711411) 12663 POINT(267.755493 265.386902) 12664 POINT(710.377319 758.462891) 12665 POINT(845.248474 367.747864) 12666 POINT(75.5124893 786.523132) 12667 POINT(917.34613 891.270874) 12668 POINT(634.741638 337.065735) 12669 POINT(588.792664 789.140869) 12670 POINT(670.731323 518.206787) 12671 POINT(658.292603 788.628235) 12672 POINT(227.662537 133.39711) 12673 POINT(563.909485 230.261932) 12674 POINT(846.754211 115.939911) 12675 POINT(599.277832 954.23584) 12676 POINT(488.620483 932.25177) 12677 POINT(258.773499 730.61084) 12678 POINT(96.3405075 794.783997) 12679 POINT(800.76062 779.317932) 12680 POINT(804.439453 289.22937) 12681 POINT(383.498352 203.010818) 12682 POINT(252.459473 338.603577) 12683 POINT(651.865784 536.434753) 12684 POINT(798.885071 776.558777) 12685 POINT(986.51947 741.775146) 12686 POINT(86.4484177 52.0138588) 12687 POINT(900.309631 507.653564) 12688 POINT(520.974731 245.669037) 12689 POINT(237.760452 562.894104) 12690 POINT(883.753296 45.6194305) 12691 POINT(938.295959 333.377563) 12692 POINT(795.881653 144.136673) 12693 POINT(526.928833 855.324585) 12694 POINT(839.200745 611.410645) 12695 POINT(139.701981 630.935974) 12696 POINT(262.513214 745.925354) 12697 POINT(545.794495 557.818848) 12698 POINT(767.070984 157.09787) 12699 POINT(142.504883 183.014801) 12700 POINT(478.285187 6.37528467) 12701 POINT(450.063049 92.3263168) 12702 POINT(930.812561 411.3284) 12703 POINT(975.283936 28.2334499) 12704 POINT(484.312469 637.186401) 12705 POINT(29.4629612 382.858978) 12706 POINT(763.058167 386.144684) 12707 POINT(837.764587 599.650757) 12708 POINT(393.179443 911.681458) 12709 POINT(53.924202 67.8079529) 12710 POINT(868.673584 888.706299) 12711 POINT(162.754913 651.708496) 12712 POINT(886.650635 656.920593) 12713 POINT(609.232727 674.053284) 12714 POINT(981.889343 211.213028) 12715 POINT(310.45639 92.0981979) 12716 POINT(992.125488 866.781799) 12717 POINT(287.304108 662.809143) 12718 POINT(483.137756 996.128967) 12719 POINT(876.015442 992.263977) 12720 POINT(144.338654 378.907288) 12721 POINT(554.227112 679.999146) 12722 POINT(672.036011 173.223541) 12723 POINT(127.313156 988.729309) 12724 POINT(332.750305 98.4576797) 12725 POINT(483.484863 48.0565262) 12726 POINT(240.027832 295.607727) 12727 POINT(532.374756 7.1636405) 12728 POINT(85.268158 322.902802) 12729 POINT(312.270813 521.397949) 12730 POINT(289.515839 563.858704) 12731 POINT(684.412659 742.080383) 12732 POINT(145.386765 824.618591) 12733 POINT(955.572937 594.418274) 12734 POINT(805.886963 320.489899) 12735 POINT(187.399734 607.284668) 12736 POINT(962.526123 481.847656) 12737 POINT(695.708313 198.708206) 12738 POINT(704.654114 821.437927) 12739 POINT(226.202377 935.666016) 12740 POINT(534.295959 413.620148) 12741 POINT(754.247742 455.295227) 12742 POINT(448.007568 646.901062) 12743 POINT(612.685913 51.657383) 12744 POINT(714.60791 770.521729) 12745 POINT(348.777893 258.06308) 12746 POINT(753.388489 200.779175) 12747 POINT(72.8371964 465.658539) 12748 POINT(833.003418 560.732727) 12749 POINT(138.706192 856.103577) 12750 POINT(101.269997 366.127747) 12751 POINT(419.832489 846.948792) 12752 POINT(358.25943 149.553436) 12753 POINT(672.321899 275.608032) 12754 POINT(590.148499 533.454041) 12755 POINT(44.1116638 620.089783) 12756 POINT(383.280457 360.667816) 12757 POINT(561.583923 376.006714) 12758 POINT(183.820755 899.346191) 12759 POINT(843.901855 999.54657) 12760 POINT(908.480164 428.689056) 12761 POINT(631.614563 570.415466) 12762 POINT(549.340942 144.84166) 12763 POINT(318.267456 28.2310982) 12764 POINT(257.301331 405.066956) 12765 POINT(218.635239 757.051636) 12766 POINT(493.622864 346.103424) 12767 POINT(49.6453781 717.899109) 12768 POINT(470.217896 3.22864771) 12769 POINT(123.089088 806.131897) 12770 POINT(472.472809 244.388748) 12771 POINT(213.957703 702.807739) 12772 POINT(192.508621 283.861084) 12773 POINT(463.952332 25.8662148) 12774 POINT(767.908875 807.957275) 12775 POINT(73.776619 912.768188) 12776 POINT(396.286865 27.5347252) 12777 POINT(825.744507 391.514679) 12778 POINT(707.942261 355.480927) 12779 POINT(633.649292 647.703857) 12780 POINT(258.716705 119.405159) 12781 POINT(641.505371 963.074036) 12782 POINT(737.567871 378.681) 12783 POINT(766.572998 93.0506973) 12784 POINT(656.039978 779.519836) 12785 POINT(713.014282 840.013916) 12786 POINT(240.529556 601.332458) 12787 POINT(156.744308 753.814697) 12788 POINT(26.9856586 12.2952709) 12789 POINT(133.784821 205.582672) 12790 POINT(758.498108 742.439514) 12791 POINT(346.087494 504.825104) 12792 POINT(809.326782 220.019547) 12793 POINT(650.877319 498.555969) 12794 POINT(657.618713 913.300171) 12795 POINT(20.7022324 955.701904) 12796 POINT(259.796387 527.773987) 12797 POINT(678.326599 516.901489) 12798 POINT(351.955597 571.342529) 12799 POINT(428.251312 611.279602) 12800 POINT(230.268677 0.956737697) 12801 POINT(757.993286 305.685059) 12802 POINT(909.181702 478.027924) 12803 POINT(478.443512 871.708252) 12804 POINT(392.058014 601.63031) 12805 POINT(252.902405 10.6459417) 12806 POINT(235.931442 163.782059) 12807 POINT(646.148926 261.177704) 12808 POINT(475.381561 426.203888) 12809 POINT(453.642578 489.218903) 12810 POINT(68.5558167 989.827942) 12811 POINT(270.316437 400.188263) 12812 POINT(322.479401 494.500671) 12813 POINT(80.1553268 362.383911) 12814 POINT(679.587463 14.9591732) 12815 POINT(221.746979 143.517715) 12816 POINT(940.578613 119.049164) 12817 POINT(369.253265 363.574829) 12818 POINT(551.045959 524.705383) 12819 POINT(198.90799 994.510498) 12820 POINT(284.835419 673.476807) 12821 POINT(552.462769 294.980438) 12822 POINT(262.78244 261.007477) 12823 POINT(103.357628 376.042236) 12824 POINT(201.58313 400.172852) 12825 POINT(549.295166 636.922546) 12826 POINT(497.38269 102.431725) 12827 POINT(44.9804382 589.488464) 12828 POINT(818.659668 749.927185) 12829 POINT(127.807663 872.597595) 12830 POINT(372.720093 188.118668) 12831 POINT(532.118408 325.254089) 12832 POINT(682.283752 630.040283) 12833 POINT(617.323486 888.319702) 12834 POINT(279.067505 253.07428) 12835 POINT(312.814514 401.895569) 12836 POINT(108.894432 852.438171) 12837 POINT(497.439056 388.504944) 12838 POINT(19.7496948 248.077072) 12839 POINT(150.769058 5.59489059) 12840 POINT(545.562439 19.6174316) 12841 POINT(832.951904 124.9869) 12842 POINT(332.636841 154.387207) 12843 POINT(543.24054 77.7212677) 12844 POINT(214.029892 63.7806549) 12845 POINT(576.10376 881.857788) 12846 POINT(804.350769 271.608887) 12847 POINT(18.0074978 655.442322) 12848 POINT(951.127075 663.315796) 12849 POINT(215.53772 579.877686) 12850 POINT(779.875366 156.470673) 12851 POINT(182.638977 908.823792) 12852 POINT(952.262878 800.809265) 12853 POINT(115.629776 568.598572) 12854 POINT(117.333153 820.952759) 12855 POINT(141.705063 337.582642) 12856 POINT(74.8794479 798.072205) 12857 POINT(160.359238 159.700531) 12858 POINT(541.010559 760.10437) 12859 POINT(246.191223 91.6361389) 12860 POINT(465.207031 266.199738) 12861 POINT(992.643372 721.638184) 12862 POINT(905.283813 873.0578) 12863 POINT(394.263245 661.814392) 12864 POINT(534.350708 542.470093) 12865 POINT(223.067413 203.548767) 12866 POINT(897.919434 365.161407) 12867 POINT(263.662384 250.58194) 12868 POINT(728.685791 350.930939) 12869 POINT(471.200226 785.473267) 12870 POINT(583.291199 274.815125) 12871 POINT(923.392761 977.339905) 12872 POINT(114.734138 619.809021) 12873 POINT(998.192383 462.294342) 12874 POINT(714.37854 355.509399) 12875 POINT(245.996857 698.856445) 12876 POINT(530.13855 616.417786) 12877 POINT(991.112854 760.396057) 12878 POINT(926.978821 661.729614) 12879 POINT(421.596069 632.600464) 12880 POINT(940.048096 819.027588) 12881 POINT(267.486633 458.902313) 12882 POINT(770.388855 336.804199) 12883 POINT(661.00824 159.229904) 12884 POINT(682.172546 235.201218) 12885 POINT(282.754852 141.45224) 12886 POINT(25.8792458 781.437561) 12887 POINT(867.634827 150.211746) 12888 POINT(483.959106 197.3871) 12889 POINT(843.885742 639.821838) 12890 POINT(917.606689 593.583191) 12891 POINT(656.444763 917.529114) 12892 POINT(491.790344 19.1017227) 12893 POINT(859.123291 947.304138) 12894 POINT(630.179504 413.47702) 12895 POINT(603.263611 414.655365) 12896 POINT(64.7969894 278.82132) 12897 POINT(786.86792 977.610107) 12898 POINT(12.9114571 82.0641327) 12899 POINT(18.7112007 631.453247) 12900 POINT(754.825256 913.74231) 12901 POINT(185.941086 624.154724) 12902 POINT(472.869537 326.716797) 12903 POINT(858.510742 220.383224) 12904 POINT(719.293213 751.859314) 12905 POINT(914.994263 934.945374) 12906 POINT(837.142334 525.055725) 12907 POINT(605.529297 267.380707) 12908 POINT(795.115601 588.347534) 12909 POINT(80.5797501 859.888672) 12910 POINT(399.324371 965.850098) 12911 POINT(88.787941 777.990723) 12912 POINT(599.573547 421.027161) 12913 POINT(791.409485 950.18573) 12914 POINT(456.034241 425.386383) 12915 POINT(240.816803 887.82251) 12916 POINT(317.948364 999.724426) 12917 POINT(140.584381 593.58728) 12918 POINT(386.352112 808.359863) 12919 POINT(737.109619 26.1148739) 12920 POINT(287.936371 415.634827) 12921 POINT(608.086426 854.628967) 12922 POINT(730.385254 64.2570877) 12923 POINT(310.067505 262.179352) 12924 POINT(97.3050919 59.3319206) 12925 POINT(252.582031 755.57312) 12926 POINT(782.738098 583.361023) 12927 POINT(284.703583 846.713989) 12928 POINT(673.947998 909.854675) 12929 POINT(644.593628 881.630676) 12930 POINT(932.485596 800.92511) 12931 POINT(544.512695 523.458069) 12932 POINT(766.439392 782.345093) 12933 POINT(482.354401 523.140747) 12934 POINT(353.317169 793.726868) 12935 POINT(703.293884 531.384705) 12936 POINT(288.385986 857.997681) 12937 POINT(227.168396 177.736816) 12938 POINT(675.840698 240.124374) 12939 POINT(732.345764 343.603394) 12940 POINT(231.318771 547.619934) 12941 POINT(896.856506 127.129272) 12942 POINT(958.604675 232.905151) 12943 POINT(672.337341 96.3731918) 12944 POINT(238.561737 498.893738) 12945 POINT(363.876465 975.985962) 12946 POINT(615.218384 83.6287766) 12947 POINT(345.290955 350.102203) 12948 POINT(476.461243 347.465485) 12949 POINT(118.962509 494.494202) 12950 POINT(952.018433 437.830383) 12951 POINT(174.494843 293.936157) 12952 POINT(139.554153 633.282043) 12953 POINT(481.639069 841.538879) 12954 POINT(624.052795 732.365173) 12955 POINT(318.797699 756.515808) 12956 POINT(782.698364 156.129303) 12957 POINT(665.71936 262.033386) 12958 POINT(626.721436 269.338623) 12959 POINT(332.618896 417.708344) 12960 POINT(685.884827 928.118103) 12961 POINT(940.908936 649.790649) 12962 POINT(406.234467 955.481445) 12963 POINT(474.141632 429.596466) 12964 POINT(626.395508 795.902527) 12965 POINT(370.890656 946.4245) 12966 POINT(294.118134 61.490963) 12967 POINT(601.538635 249.732605) 12968 POINT(758.166504 751.703491) 12969 POINT(253.776825 207.121979) 12970 POINT(749.319946 192.776962) 12971 POINT(320.713501 865.645203) 12972 POINT(779.661377 929.750732) 12973 POINT(442.57077 305.729401) 12974 POINT(826.034363 31.2118778) 12975 POINT(677.922913 746.808777) 12976 POINT(209.255783 293.544495) 12977 POINT(181.288925 674.446167) 12978 POINT(876.190369 306.900604) 12979 POINT(226.777634 798.76593) 12980 POINT(381.077087 59.3773193) 12981 POINT(956.651306 177.522415) 12982 POINT(742.612854 889.648865) 12983 POINT(741.50415 313.817749) 12984 POINT(724.441895 972.846375) 12985 POINT(135.757385 203.707443) 12986 POINT(602.191101 851.723267) 12987 POINT(196.980423 413.673218) 12988 POINT(996.476562 657.624573) 12989 POINT(836.920715 328.798065) 12990 POINT(177.955048 846.659546) 12991 POINT(890.942322 761.676819) 12992 POINT(400.201874 389.548492) 12993 POINT(563.844666 447.487274) 12994 POINT(254.784164 173.291077) 12995 POINT(744.89093 385.709381) 12996 POINT(939.309937 814.120056) 12997 POINT(622.578613 102.815033) 12998 POINT(305.540985 449.832153) 12999 POINT(887.612061 297.582672) 13000 POINT(936.054016 321.807892) 13001 POINT(236.202789 851.875) 13002 POINT(562.743225 909.76532) 13003 POINT(598.85437 220.727448) 13004 POINT(370.120026 23.0734844) 13005 POINT(573.945801 898.032349) 13006 POINT(55.4582062 949.446533) 13007 POINT(570.592896 145.198044) 13008 POINT(584.041077 523.836304) 13009 POINT(619.449524 892.758789) 13010 POINT(971.92395 706.755249) 13011 POINT(229.439758 617.49585) 13012 POINT(944.664429 992.130798) 13013 POINT(917.151184 764.294189) 13014 POINT(205.470993 130.780807) 13015 POINT(556.144714 642.438782) 13016 POINT(250.373413 327.997894) 13017 POINT(756.261719 665.693054) 13018 POINT(94.6401672 214.450699) 13019 POINT(436.763062 825.281494) 13020 POINT(30.2133198 601.191772) 13021 POINT(278.577362 651.419189) 13022 POINT(177.961105 805.170654) 13023 POINT(84.9490051 914.51709) 13024 POINT(393.764923 305.073059) 13025 POINT(329.367981 489.499146) 13026 POINT(249.677048 682.959595) 13027 POINT(485.967285 219.267441) 13028 POINT(759.555481 390.096924) 13029 POINT(609.845459 95.3512802) 13030 POINT(124.771477 401.227417) 13031 POINT(130.397705 469.897217) 13032 POINT(614.991272 486.595337) 13033 POINT(835.221191 433.754822) 13034 POINT(299.972931 722.257812) 13035 POINT(529.140137 566.460815) 13036 POINT(442.242249 204.090652) 13037 POINT(154.120926 377.027344) 13038 POINT(131.983887 347.620972) 13039 POINT(131.210587 316.820435) 13040 POINT(82.2031021 903.167114) 13041 POINT(43.1327324 930.32959) 13042 POINT(245.000809 43.1570587) 13043 POINT(301.951477 704.748352) 13044 POINT(102.602333 875.96637) 13045 POINT(254.521164 439.11853) 13046 POINT(626.662048 188.833847) 13047 POINT(961.662476 448.054474) 13048 POINT(186.524521 442.660767) 13049 POINT(165.6492 879.121094) 13050 POINT(274.880768 245.696701) 13051 POINT(333.290649 607.7547) 13052 POINT(164.057205 73.7998352) 13053 POINT(55.4067841 95.8016586) 13054 POINT(317.591156 625.292847) 13055 POINT(2.70159626 791.525024) 13056 POINT(72.4687805 282.210938) 13057 POINT(415.953125 908.150085) 13058 POINT(243.254623 971.366516) 13059 POINT(156.186172 58.1602135) 13060 POINT(549.269409 693.177551) 13061 POINT(397.337158 320.716125) 13062 POINT(252.045517 919.284302) 13063 POINT(427.240326 974.484192) 13064 POINT(937.701843 397.905121) 13065 POINT(878.068909 698.169067) 13066 POINT(765.953979 985.566101) 13067 POINT(258.287842 402.134796) 13068 POINT(715.654602 422.825439) 13069 POINT(456.471893 648.26355) 13070 POINT(820.614929 358.059143) 13071 POINT(62.8994408 498.87323) 13072 POINT(246.685486 906.077698) 13073 POINT(865.654968 531.941467) 13074 POINT(402.493011 6.70755291) 13075 POINT(760.193481 107.543411) 13076 POINT(395.78833 362.545288) 13077 POINT(929.199219 973.405701) 13078 POINT(792.121704 715.534546) 13079 POINT(445.487457 175.535217) 13080 POINT(252.731094 240.114777) 13081 POINT(195.163925 478.347626) 13082 POINT(627.41748 348.366974) 13083 POINT(59.9010582 98.5798492) 13084 POINT(62.2395821 822.364075) 13085 POINT(812.772949 285.117462) 13086 POINT(710.658875 903.997437) 13087 POINT(926.495789 914.934021) 13088 POINT(472.995178 416.674835) 13089 POINT(49.151371 871.47345) 13090 POINT(548.540283 690.892151) 13091 POINT(931.667358 89.4851303) 13092 POINT(386.361328 681.803162) 13093 POINT(82.7387238 118.650414) 13094 POINT(236.781845 257.217407) 13095 POINT(947.891479 222.036102) 13096 POINT(10.9481678 895.232849) 13097 POINT(355.514984 994.83844) 13098 POINT(579.096252 548.871704) 13099 POINT(817.555054 390.006439) 13100 POINT(210.570206 938.173279) 13101 POINT(817.93103 761.76416) 13102 POINT(264.883514 136.373825) 13103 POINT(847.488586 993.010681) 13104 POINT(870.847534 784.853088) 13105 POINT(858.445007 130.919083) 13106 POINT(520.846008 250.872284) 13107 POINT(299.948456 905.253235) 13108 POINT(803.645996 322.801727) 13109 POINT(573.822571 500.08078) 13110 POINT(898.784973 800.204712) 13111 POINT(808.179138 461.405548) 13112 POINT(658.746704 402.096863) 13113 POINT(306.867554 386.123779) 13114 POINT(765.161316 497.850281) 13115 POINT(993.320374 302.606293) 13116 POINT(418.582458 114.097908) 13117 POINT(55.0067825 436.719574) 13118 POINT(617.572998 730.782715) 13119 POINT(814.305481 391.454041) 13120 POINT(314.570557 433.972473) 13121 POINT(436.16153 951.375854) 13122 POINT(569.122192 816.643921) 13123 POINT(343.530212 568.336609) 13124 POINT(422.520844 526.363464) 13125 POINT(387.594635 671.367126) 13126 POINT(213.714951 856.325012) 13127 POINT(728.454956 866.169312) 13128 POINT(769.789429 209.832275) 13129 POINT(668.931091 708.460449) 13130 POINT(613.657654 474.952271) 13131 POINT(72.9352188 426.5896) 13132 POINT(518.296875 303.253326) 13133 POINT(542.307739 873.940491) 13134 POINT(335.483063 362.442963) 13135 POINT(851.95813 267.882965) 13136 POINT(675.22229 836.124084) 13137 POINT(710.614319 342.292267) 13138 POINT(300.761292 674.207275) 13139 POINT(259.596191 343.391663) 13140 POINT(827.132812 394.793793) 13141 POINT(709.048035 537.998108) 13142 POINT(715.719055 33.2381287) 13143 POINT(582.371765 298.883331) 13144 POINT(593.500549 197.902771) 13145 POINT(465.709381 369.259644) 13146 POINT(496.812714 86.7450562) 13147 POINT(288.858276 88.334671) 13148 POINT(852.006226 846.864197) 13149 POINT(673.726135 449.056122) 13150 POINT(418.970062 313.650482) 13151 POINT(31.228159 139.810349) 13152 POINT(300.723877 81.0082626) 13153 POINT(950.400269 741.801514) 13154 POINT(679.03595 53.6830597) 13155 POINT(165.588791 76.5951233) 13156 POINT(591.225403 282.048096) 13157 POINT(498.129059 152.965408) 13158 POINT(689.027771 534.465576) 13159 POINT(715.331787 93.4629745) 13160 POINT(91.8392715 918.816467) 13161 POINT(127.36187 939.373657) 13162 POINT(692.12677 9.90853977) 13163 POINT(925.353027 963.943909) 13164 POINT(321.744537 600.760132) 13165 POINT(53.6086311 459.506042) 13166 POINT(228.901382 991.386475) 13167 POINT(684.884216 311.675476) 13168 POINT(234.274063 917.469055) 13169 POINT(838.527222 705.960571) 13170 POINT(572.079407 952.58551) 13171 POINT(132.80899 217.403076) 13172 POINT(821.74823 781.55542) 13173 POINT(209.372192 266.355072) 13174 POINT(995.25592 819.577148) 13175 POINT(701.719543 452.918732) 13176 POINT(964.355042 563.488464) 13177 POINT(261.596771 844.28833) 13178 POINT(144.244186 19.585886) 13179 POINT(705.603149 634.205872) 13180 POINT(52.0374565 909.527039) 13181 POINT(726.156555 238.584412) 13182 POINT(839.347229 855.082764) 13183 POINT(330.930176 368.282959) 13184 POINT(671.044434 767.684753) 13185 POINT(566.072205 726.896179) 13186 POINT(352.647644 494.251099) 13187 POINT(552.047485 31.7162342) 13188 POINT(565.748169 811.698181) 13189 POINT(156.066238 128.844528) 13190 POINT(576.48468 924.534302) 13191 POINT(59.1656799 163.498032) 13192 POINT(161.52356 149.259705) 13193 POINT(694.594971 434.221832) 13194 POINT(527.605835 802.890625) 13195 POINT(760.859497 580.963867) 13196 POINT(165.933487 928.315186) 13197 POINT(299.358002 773.390442) 13198 POINT(316.053223 254.542633) 13199 POINT(802.884705 234.647598) 13200 POINT(153.156525 214.015182) 13201 POINT(445.371399 679.856995) 13202 POINT(48.6625748 321.423737) 13203 POINT(331.247009 506.451508) 13204 POINT(580.541138 298.947937) 13205 POINT(18.9519348 49.1063614) 13206 POINT(134.125381 942.189087) 13207 POINT(419.842133 125.233322) 13208 POINT(386.364075 430.571899) 13209 POINT(281.465454 933.130066) 13210 POINT(109.88327 57.5701027) 13211 POINT(681.617737 124.890297) 13212 POINT(174.31691 792.303223) 13213 POINT(463.45108 326.684998) 13214 POINT(420.695007 678.018311) 13215 POINT(87.0920944 302.245544) 13216 POINT(2.93964887 458.504364) 13217 POINT(542.740662 399.171356) 13218 POINT(544.536438 524.99646) 13219 POINT(425.196075 445.519684) 13220 POINT(967.165771 958.657959) 13221 POINT(999.450684 205.118042) 13222 POINT(483.564087 162.939835) 13223 POINT(658.788513 198.896423) 13224 POINT(84.3383179 32.2989044) 13225 POINT(986.23175 766.617737) 13226 POINT(916.19342 375.824799) 13227 POINT(150.827713 804.667908) 13228 POINT(478.50177 133.81842) 13229 POINT(403.91806 562.653687) 13230 POINT(240.913223 910.444641) 13231 POINT(367.064209 121.671936) 13232 POINT(494.470367 255.040359) 13233 POINT(830.728088 883.112305) 13234 POINT(333.277649 607.908813) 13235 POINT(197.253571 257.209625) 13236 POINT(167.117874 673.511353) 13237 POINT(117.424583 209.377975) 13238 POINT(84.5877609 375.542908) 13239 POINT(479.269836 869.359131) 13240 POINT(421.530273 305.734314) 13241 POINT(731.349792 768.756287) 13242 POINT(694.095215 413.284363) 13243 POINT(659.134033 697.576721) 13244 POINT(486.107086 447.113617) 13245 POINT(609.011108 676.575806) 13246 POINT(246.130356 601.829041) 13247 POINT(774.853943 161.704453) 13248 POINT(263.392914 814.170715) 13249 POINT(359.89743 627.668091) 13250 POINT(319.377533 984.200989) 13251 POINT(113.105148 932.978455) 13252 POINT(822.366272 969.626282) 13253 POINT(153.467636 928.027832) 13254 POINT(247.591431 828.080627) 13255 POINT(955.165405 225.360016) 13256 POINT(751.107483 407.235199) 13257 POINT(516.757202 767.807434) 13258 POINT(179.367157 843.139709) 13259 POINT(802.147644 181.487503) 13260 POINT(840.213318 800.799744) 13261 POINT(571.809143 28.4000282) 13262 POINT(269.148621 745.797363) 13263 POINT(349.459534 134.773376) 13264 POINT(455.021118 180.574493) 13265 POINT(950.142517 589.219055) 13266 POINT(172.478806 513.224182) 13267 POINT(266.550354 717.64801) 13268 POINT(998.649963 90.3162918) 13269 POINT(735.728271 53.881218) 13270 POINT(515.566772 349.085754) 13271 POINT(530.388977 755.677612) 13272 POINT(68.0632401 99.5221024) 13273 POINT(308.453186 50.8536148) 13274 POINT(162.565964 595.431213) 13275 POINT(659.748962 638.261475) 13276 POINT(261.800201 397.93515) 13277 POINT(886.806213 780.226013) 13278 POINT(913.529114 568.296692) 13279 POINT(702.26062 388.837799) 13280 POINT(110.72139 583.190369) 13281 POINT(901.533508 276.121185) 13282 POINT(731.824829 569.006714) 13283 POINT(237.321426 971.007751) 13284 POINT(272.056641 167.508209) 13285 POINT(71.263237 933.358276) 13286 POINT(721.871826 128.821671) 13287 POINT(975.340149 461.709778) 13288 POINT(952.240601 775.635437) 13289 POINT(196.610535 207.334183) 13290 POINT(856.366821 881.493347) 13291 POINT(757.421814 598.556152) 13292 POINT(505.465607 483.770813) 13293 POINT(241.030334 37.6922112) 13294 POINT(886.752197 326.453644) 13295 POINT(889.484924 865.668091) 13296 POINT(292.577026 258.00116) 13297 POINT(224.693924 469.195435) 13298 POINT(961.490479 144.77684) 13299 POINT(780.932922 720.823853) 13300 POINT(178.88205 990.815186) 13301 POINT(821.922363 147.326859) 13302 POINT(223.782242 660.719482) 13303 POINT(800.387085 786.459045) 13304 POINT(499.637115 205.548096) 13305 POINT(323.218201 851.488098) 13306 POINT(63.6847153 503.555603) 13307 POINT(109.619392 828.037476) 13308 POINT(928.425903 101.152) 13309 POINT(799.694763 995.270264) 13310 POINT(759.159119 517.589478) 13311 POINT(991.707031 125.534622) 13312 POINT(446.333832 243.474365) 13313 POINT(890.709167 71.1234055) 13314 POINT(956.393982 492.641968) 13315 POINT(850.562988 407.254211) 13316 POINT(528.770996 874.266602) 13317 POINT(624.764954 345.849976) 13318 POINT(811.82312 342.970856) 13319 POINT(626.380371 859.924744) 13320 POINT(741.990967 505.43396) 13321 POINT(79.2554398 723.702698) 13322 POINT(646.576965 949.49939) 13323 POINT(845.160461 854.998413) 13324 POINT(172.797455 193.576248) 13325 POINT(486.379364 585.465393) 13326 POINT(648.674927 998.391052) 13327 POINT(900.377502 938.302673) 13328 POINT(502.626831 648.65918) 13329 POINT(600.566223 584.749573) 13330 POINT(499.090088 798.423462) 13331 POINT(450.965759 318.670349) 13332 POINT(81.1394958 120.69413) 13333 POINT(757.007446 836.839111) 13334 POINT(794.883057 240.277328) 13335 POINT(12.1983547 560.901001) 13336 POINT(54.6485481 829.593323) 13337 POINT(71.3971252 670.768982) 13338 POINT(795.927002 772.771545) 13339 POINT(914.657776 439.383331) 13340 POINT(461.159241 555.907288) 13341 POINT(657.744141 131.922867) 13342 POINT(331.312775 514.238464) 13343 POINT(811.383728 940.933777) 13344 POINT(216.488388 893.939697) 13345 POINT(574.124512 720.289246) 13346 POINT(667.344849 391.648438) 13347 POINT(824.414734 218.884888) 13348 POINT(84.8780746 583.773743) 13349 POINT(445.501862 428.614258) 13350 POINT(761.108398 505.755768) 13351 POINT(239.323227 895.181152) 13352 POINT(52.7130432 285.033844) 13353 POINT(358.250305 5.04293299) 13354 POINT(601.909607 757.453735) 13355 POINT(379.976898 483.219116) 13356 POINT(5.39693737 132.745544) 13357 POINT(672.773254 506.441254) 13358 POINT(277.459015 138.688416) 13359 POINT(925.642273 861.393127) 13360 POINT(245.137512 424.444214) 13361 POINT(858.618164 631.44342) 13362 POINT(992.490845 990.697205) 13363 POINT(468.677887 665.785706) 13364 POINT(181.336411 827.724304) 13365 POINT(320.746033 26.3698025) 13366 POINT(514.579834 963.000305) 13367 POINT(553.448975 190.168106) 13368 POINT(475.474396 568.708435) 13369 POINT(456.122101 742.513062) 13370 POINT(425.237274 368.488495) 13371 POINT(785.727112 882.452271) 13372 POINT(28.8282146 164.454666) 13373 POINT(856.551025 289.891449) 13374 POINT(113.940117 123.114304) 13375 POINT(856.721863 808.963196) 13376 POINT(464.050385 396.110992) 13377 POINT(656.689453 280.41922) 13378 POINT(668.564697 483.107452) 13379 POINT(487.02356 521.376221) 13380 POINT(170.589203 384.662537) 13381 POINT(515.424866 482.546936) 13382 POINT(687.769043 348.30014) 13383 POINT(363.120178 605.891479) 13384 POINT(559.120544 827.408691) 13385 POINT(614.318665 219.774445) 13386 POINT(569.1875 987.061157) 13387 POINT(112.782768 820.192322) 13388 POINT(901.609131 680.844421) 13389 POINT(358.568512 437.042114) 13390 POINT(11.8704281 656.502258) 13391 POINT(245.49791 130.963882) 13392 POINT(21.3122139 834.410156) 13393 POINT(173.953537 431.857086) 13394 POINT(312.22467 741.034241) 13395 POINT(770.257935 153.222) 13396 POINT(140.983322 609.613586) 13397 POINT(907.482666 201.112274) 13398 POINT(529.777832 713.013916) 13399 POINT(895.402283 462.430511) 13400 POINT(397.729645 240.315353) 13401 POINT(859.975525 589.90863) 13402 POINT(752.411926 431.138184) 13403 POINT(813.836548 1.36140347) 13404 POINT(889.421875 842.509827) 13405 POINT(405.561798 945.291382) 13406 POINT(500.281403 35.4036293) 13407 POINT(81.8386154 335.878693) 13408 POINT(630.250244 765.721924) 13409 POINT(486.09433 775.663879) 13410 POINT(773.450745 971.866577) 13411 POINT(510.79364 827.303345) 13412 POINT(461.966095 633.17865) 13413 POINT(7.72717524 995.742493) 13414 POINT(370.357422 486.100311) 13415 POINT(808.582764 883.743469) 13416 POINT(792.544067 824.204163) 13417 POINT(312.419281 697.270203) 13418 POINT(882.526306 261.161835) 13419 POINT(430.983429 328.750336) 13420 POINT(15.4438915 629.826477) 13421 POINT(448.881378 27.3049068) 13422 POINT(205.531921 744.043518) 13423 POINT(233.321655 582.887085) 13424 POINT(600.348022 821.370972) 13425 POINT(925.491699 678.752502) 13426 POINT(497.024841 104.000168) 13427 POINT(548.749573 792.274475) 13428 POINT(140.195053 911.858093) 13429 POINT(991.964294 701.915588) 13430 POINT(259.709747 696.804688) 13431 POINT(261.904144 257.90329) 13432 POINT(89.5250931 961.308838) 13433 POINT(267.060272 831.179382) 13434 POINT(630.481934 370.900909) 13435 POINT(295.336456 520.480591) 13436 POINT(535.597961 379.602142) 13437 POINT(706.3927 287.559784) 13438 POINT(16.5000401 944.585754) 13439 POINT(680.982727 237.803329) 13440 POINT(106.441093 814.317017) 13441 POINT(487.380035 65.687706) 13442 POINT(934.793091 707.766235) 13443 POINT(50.0819435 555.128845) 13444 POINT(38.9286575 876.031555) 13445 POINT(377.66449 42.9080544) 13446 POINT(284.069672 857.502014) 13447 POINT(942.327637 13.7392893) 13448 POINT(505.189148 149.839508) 13449 POINT(548.816772 858.520874) 13450 POINT(305.718018 363.457916) 13451 POINT(808.673218 168.872894) 13452 POINT(527.083801 669.384644) 13453 POINT(598.908203 402.795288) 13454 POINT(175.555786 877.554077) 13455 POINT(962.094849 995.421387) 13456 POINT(196.193695 788.501953) 13457 POINT(755.537781 928.237854) 13458 POINT(508.708954 951.516846) 13459 POINT(16.746767 848.270447) 13460 POINT(460.698517 175.593658) 13461 POINT(845.160339 249.698532) 13462 POINT(57.0685043 6.69654417) 13463 POINT(548.32843 213.885406) 13464 POINT(440.72525 477.15802) 13465 POINT(635.07019 235.248856) 13466 POINT(532.095764 212.432297) 13467 POINT(807.113953 740.72168) 13468 POINT(90.1907349 49.4261017) 13469 POINT(581.15033 806.369385) 13470 POINT(795.31543 672.409241) 13471 POINT(319.979401 68.2662506) 13472 POINT(35.8568459 40.8528709) 13473 POINT(847.508423 963.833496) 13474 POINT(624.657532 92.866272) 13475 POINT(128.893341 787.992004) 13476 POINT(593.262756 23.2464085) 13477 POINT(703.375305 934.777588) 13478 POINT(886.878723 412.176788) 13479 POINT(230.722 464.234467) 13480 POINT(284.393768 315.60907) 13481 POINT(48.1517067 396.798645) 13482 POINT(224.613281 708.240112) 13483 POINT(506.830811 18.9761467) 13484 POINT(663.391785 122.302986) 13485 POINT(867.245911 876.521729) 13486 POINT(301.176666 68.2831802) 13487 POINT(60.8480835 941.751221) 13488 POINT(894.307617 615.941528) 13489 POINT(879.352844 842.931458) 13490 POINT(237.06163 5.08874369) 13491 POINT(419.089172 724.358521) 13492 POINT(318.840546 135.447586) 13493 POINT(500.083557 719.863708) 13494 POINT(119.14006 434.327728) 13495 POINT(490.521973 639.798767) 13496 POINT(202.206161 741.007874) 13497 POINT(517.360168 27.4040642) 13498 POINT(366.9021 189.589737) 13499 POINT(531.788147 485.827393) 13500 POINT(951.718872 470.193024) 13501 POINT(550.75177 128.542801) 13502 POINT(299.63559 544.868347) 13503 POINT(617.676086 195.741837) 13504 POINT(365.369781 773.300049) 13505 POINT(449.932617 605.286072) 13506 POINT(464.268311 238.672409) 13507 POINT(278.576019 282.497955) 13508 POINT(886.628052 771.015503) 13509 POINT(276.701416 117.525787) 13510 POINT(155.666794 49.5985336) 13511 POINT(33.8288841 926.97699) 13512 POINT(416.886383 173.783951) 13513 POINT(410.510956 708.321472) 13514 POINT(89.5045853 60.1141357) 13515 POINT(523.514465 147.201736) 13516 POINT(968.419128 929.807922) 13517 POINT(619.211914 910.849487) 13518 POINT(372.384308 363.464233) 13519 POINT(821.10675 892.525696) 13520 POINT(328.415527 927.392761) 13521 POINT(644.724609 685.125793) 13522 POINT(754.717407 118.029526) 13523 POINT(295.557343 95.2974777) 13524 POINT(948.595642 367.390045) 13525 POINT(967.609741 166.711548) 13526 POINT(648.936218 534.127014) 13527 POINT(83.7503281 682.227295) 13528 POINT(475.113159 742.781006) 13529 POINT(935.016541 444.959869) 13530 POINT(548.932861 590.158997) 13531 POINT(832.905273 298.660492) 13532 POINT(689.893066 714.982483) 13533 POINT(363.245117 104.966515) 13534 POINT(296.190247 18.1796207) 13535 POINT(877.387329 31.1887512) 13536 POINT(147.248505 560.244507) 13537 POINT(59.1671791 65.2366486) 13538 POINT(103.890915 373.362946) 13539 POINT(425.516785 727.50647) 13540 POINT(458.565948 274.549835) 13541 POINT(444.007904 322.182373) 13542 POINT(372.35849 807.520142) 13543 POINT(649.352478 607.146545) 13544 POINT(3.04372525 871.713501) 13545 POINT(608.497986 572.917114) 13546 POINT(107.50882 503.727478) 13547 POINT(794.057373 732.705872) 13548 POINT(823.913147 886.920044) 13549 POINT(680.164856 329.414703) 13550 POINT(188.556488 597.291199) 13551 POINT(553.33606 568.397766) 13552 POINT(607.26825 606.724854) 13553 POINT(341.537231 59.9516678) 13554 POINT(822.043579 807.688721) 13555 POINT(993.568115 291.245422) 13556 POINT(934.573853 86.5857391) 13557 POINT(702.298462 97.8544083) 13558 POINT(266.327515 936.790527) 13559 POINT(251.64267 739.956055) 13560 POINT(450.118744 588.278992) 13561 POINT(498.927673 542.922913) 13562 POINT(313.985657 850.580872) 13563 POINT(80.1342926 887.49292) 13564 POINT(191.124268 672.093994) 13565 POINT(772.129517 147.504944) 13566 POINT(79.1634521 554.758545) 13567 POINT(68.3404617 505.588989) 13568 POINT(90.9156647 812.489014) 13569 POINT(755.358704 227.046677) 13570 POINT(352.714996 499.015198) 13571 POINT(28.8362942 252.921265) 13572 POINT(584.507141 70.9306335) 13573 POINT(697.003723 964.045898) 13574 POINT(160.053436 300.449951) 13575 POINT(606.583374 763.39325) 13576 POINT(321.148468 55.9269981) 13577 POINT(734.303345 84.6871643) 13578 POINT(184.950211 663.495789) 13579 POINT(641.263 436.948334) 13580 POINT(219.825089 127.805641) 13581 POINT(738.824646 779.038635) 13582 POINT(407.091766 391.895203) 13583 POINT(193.386703 542.563232) 13584 POINT(491.39975 564.574646) 13585 POINT(261.342102 908.542236) 13586 POINT(642.022766 37.6781464) 13587 POINT(430.869873 931.548889) 13588 POINT(795.028625 195.245377) 13589 POINT(318.213135 998.630676) 13590 POINT(669.175903 912.758118) 13591 POINT(765.13739 129.010101) 13592 POINT(396.680267 828.284058) 13593 POINT(781.853699 249.655655) 13594 POINT(287.006989 900.67749) 13595 POINT(724.462036 822.294678) 13596 POINT(54.0309448 655.398438) 13597 POINT(564.67572 815.91449) 13598 POINT(943.826416 749.196045) 13599 POINT(57.1206589 797.487) 13600 POINT(364.705811 694.654968) 13601 POINT(618.855774 900.411987) 13602 POINT(558.737061 298.832214) 13603 POINT(468.084534 188.478928) 13604 POINT(483.779663 251.960999) 13605 POINT(13.5619965 792.097961) 13606 POINT(769.15918 408.12854) 13607 POINT(210.34404 497.877045) 13608 POINT(441.647186 326.234985) 13609 POINT(996.774719 832.671021) 13610 POINT(119.743111 173.329453) 13611 POINT(475.600403 224.981644) 13612 POINT(774.817749 861.128174) 13613 POINT(0.592929125 441.641418) 13614 POINT(642.042236 408.321075) 13615 POINT(158.939774 93.2999344) 13616 POINT(819.884644 754.948364) 13617 POINT(6.92781258 751.197083) 13618 POINT(865.136169 250.098618) 13619 POINT(108.237953 808.531799) 13620 POINT(814.864502 580.477295) 13621 POINT(554.741516 106.518646) 13622 POINT(544.467712 185.690048) 13623 POINT(411.427216 997.693848) 13624 POINT(902.297974 37.6605606) 13625 POINT(940.497498 672.540588) 13626 POINT(299.474792 758.37915) 13627 POINT(623.388489 481.02298) 13628 POINT(234.947327 264.689758) 13629 POINT(840.246399 654.757629) 13630 POINT(910.170349 704.235046) 13631 POINT(89.116394 310.528625) 13632 POINT(647.62323 266.783875) 13633 POINT(664.779663 189.526932) 13634 POINT(238.643478 294.369141) 13635 POINT(680.935974 72.538063) 13636 POINT(777.616516 887.017395) 13637 POINT(448.5401 788.417297) 13638 POINT(613.523926 214.005005) 13639 POINT(334.933899 796.306458) 13640 POINT(91.4081192 939.831116) 13641 POINT(968.487366 331.510132) 13642 POINT(43.7747765 396.360291) 13643 POINT(745.399414 436.740051) 13644 POINT(6.77368021 355.399933) 13645 POINT(90.8733063 996.156311) 13646 POINT(812.74646 847.503967) 13647 POINT(455.952362 306.506592) 13648 POINT(187.096298 441.82312) 13649 POINT(51.8906784 180.546249) 13650 POINT(844.24585 647.766357) 13651 POINT(372.16983 21.2847214) 13652 POINT(128.645004 662.139038) 13653 POINT(492.415833 435.550903) 13654 POINT(729.446289 995.943481) 13655 POINT(412.904663 491.629944) 13656 POINT(361.772522 644.456665) 13657 POINT(587.574341 653.644104) 13658 POINT(456.781342 374.450836) 13659 POINT(616.122253 245.911377) 13660 POINT(943.43103 496.036438) 13661 POINT(538.616089 280.317017) 13662 POINT(696.539368 656.74707) 13663 POINT(519.964722 901.000366) 13664 POINT(431.09967 875.938721) 13665 POINT(27.5942783 111.248283) 13666 POINT(957.692993 252.76001) 13667 POINT(50.884903 910.868286) 13668 POINT(197.163696 695.901306) 13669 POINT(974.60022 317.593689) 13670 POINT(56.5694275 193.713715) 13671 POINT(468.07486 817.977966) 13672 POINT(767.978943 765.393433) 13673 POINT(82.8144608 702.111938) 13674 POINT(115.288231 394.667969) 13675 POINT(137.046112 108.328621) 13676 POINT(853.302551 174.333481) 13677 POINT(208.391663 830.443787) 13678 POINT(742.462158 201.245865) 13679 POINT(35.1027603 428.242035) 13680 POINT(869.464417 715.748352) 13681 POINT(550.204956 604.714294) 13682 POINT(139.478058 726.439758) 13683 POINT(927.580505 359.453613) 13684 POINT(53.6004028 190.688797) 13685 POINT(18.7332249 50.7280998) 13686 POINT(622.744934 414.049042) 13687 POINT(96.1073608 168.798325) 13688 POINT(716.463074 9.00590229) 13689 POINT(913.882812 575.380676) 13690 POINT(455.616089 727.218567) 13691 POINT(348.775696 949.758728) 13692 POINT(787.770813 102.133133) 13693 POINT(218.292084 717.509338) 13694 POINT(943.263123 853.70874) 13695 POINT(796.99646 355.368103) 13696 POINT(570.752319 797.805847) 13697 POINT(395.676758 463.259399) 13698 POINT(459.599792 843.944092) 13699 POINT(544.940857 685.439331) 13700 POINT(541.487793 971.690674) 13701 POINT(573.029541 526.142212) 13702 POINT(447.423798 653.550781) 13703 POINT(4.85648727 435.814819) 13704 POINT(103.844681 487.186127) 13705 POINT(380.997375 602.313904) 13706 POINT(461.265045 149.006638) 13707 POINT(25.17803 543.312256) 13708 POINT(442.249237 662.193359) 13709 POINT(528.516479 503.205475) 13710 POINT(6.99915409 253.192184) 13711 POINT(398.23584 467.264252) 13712 POINT(2.2329042 260.447601) 13713 POINT(395.793121 240.484451) 13714 POINT(273.105621 57.0456123) 13715 POINT(600.497742 937.029175) 13716 POINT(672.63562 295.037201) 13717 POINT(543.976013 592.433105) 13718 POINT(845.519775 904.1875) 13719 POINT(810.663208 664.575317) 13720 POINT(443.544983 753.028503) 13721 POINT(60.3746567 416.17688) 13722 POINT(151.348465 167.296265) 13723 POINT(349.560394 572.218201) 13724 POINT(170.49469 202.65213) 13725 POINT(84.8342514 986.799683) 13726 POINT(686.289673 678.178284) 13727 POINT(690.681824 117.81665) 13728 POINT(88.1413651 128.296234) 13729 POINT(695.887634 942.234314) 13730 POINT(46.4161949 547.892517) 13731 POINT(101.323837 113.210052) 13732 POINT(885.583923 753.591553) 13733 POINT(574.560608 991.917053) 13734 POINT(407.05426 418.950684) 13735 POINT(791.681396 26.4061832) 13736 POINT(480.685394 59.1611214) 13737 POINT(509.215973 407.547821) 13738 POINT(369.808136 28.5314846) 13739 POINT(172.879562 134.004807) 13740 POINT(112.20163 679.147583) 13741 POINT(856.579224 455.898285) 13742 POINT(33.3520966 329.808289) 13743 POINT(454.808258 47.5694084) 13744 POINT(6.21785736 369.419769) 13745 POINT(532.096375 356.462494) 13746 POINT(734.43103 317.906097) 13747 POINT(350.757629 76.1358032) 13748 POINT(667.337891 780.398621) 13749 POINT(967.032104 50.8451691) 13750 POINT(152.582321 137.666245) 13751 POINT(98.235733 606.772766) 13752 POINT(795.267456 338.733307) 13753 POINT(740.225464 56.13554) 13754 POINT(375.410614 12.3120079) 13755 POINT(353.98233 186.086624) 13756 POINT(933.877319 144.594986) 13757 POINT(269.175598 941.115417) 13758 POINT(80.8184357 25.2724285) 13759 POINT(776.075317 267.78833) 13760 POINT(222.528091 925.147278) 13761 POINT(28.1411667 512.001709) 13762 POINT(208.415527 811.834961) 13763 POINT(267.159576 654.917603) 13764 POINT(38.3835449 249.789597) 13765 POINT(250.191635 623.52594) 13766 POINT(364.399963 772.962769) 13767 POINT(920.210449 510.046265) 13768 POINT(893.634094 409.059418) 13769 POINT(965.658936 641.503479) 13770 POINT(732.524658 510.525299) 13771 POINT(681.877197 432.758118) 13772 POINT(682.998291 586.619202) 13773 POINT(531.194519 974.648499) 13774 POINT(448.333252 801.35614) 13775 POINT(628.333862 510.930878) 13776 POINT(264.565125 212.541016) 13777 POINT(511.644592 766.241028) 13778 POINT(234.669159 576.965027) 13779 POINT(534.699463 440.820618) 13780 POINT(400.984833 676.142944) 13781 POINT(891.215027 790.353821) 13782 POINT(593.532593 56.3956985) 13783 POINT(111.46962 780.676941) 13784 POINT(288.211731 897.919006) 13785 POINT(110.90461 832.699646) 13786 POINT(2.68031359 391.634888) 13787 POINT(880.037292 153.593185) 13788 POINT(255.448105 612.644104) 13789 POINT(355.942535 352.760193) 13790 POINT(374.932831 928.142517) 13791 POINT(164.261429 747.522339) 13792 POINT(732.632446 599.524292) 13793 POINT(849.975647 21.7090664) 13794 POINT(503.974915 457.486115) 13795 POINT(86.1749725 773.866455) 13796 POINT(250.762161 510.301697) 13797 POINT(652.006775 809.743835) 13798 POINT(342.504883 644.727844) 13799 POINT(771.30835 640.773315) 13800 POINT(65.534462 392.512909) 13801 POINT(597.594177 656.79303) 13802 POINT(736.908752 150.124985) 13803 POINT(192.734833 473.251129) 13804 POINT(976.236389 482.637787) 13805 POINT(577.580627 402.165863) 13806 POINT(677.205444 832.870728) 13807 POINT(212.829025 269.438385) 13808 POINT(49.508297 352.666138) 13809 POINT(305.627106 571.563416) 13810 POINT(211.830032 824.014526) 13811 POINT(417.861481 420.84256) 13812 POINT(251.551895 33.6469727) 13813 POINT(90.0846558 823.972961) 13814 POINT(923.891724 186.36618) 13815 POINT(282.93573 544.087769) 13816 POINT(442.548523 311.075958) 13817 POINT(896.245911 346.316437) 13818 POINT(268.863739 341.101318) 13819 POINT(53.4062309 572.688721) 13820 POINT(793.498962 989.514221) 13821 POINT(161.775131 250.328171) 13822 POINT(133.233124 433.951263) 13823 POINT(483.799652 839.59375) 13824 POINT(448.391083 557.621887) 13825 POINT(411.12381 73.986618) 13826 POINT(689.458008 338.272186) 13827 POINT(236.393311 444.717316) 13828 POINT(173.547256 349.827576) 13829 POINT(703.99646 818.927185) 13830 POINT(994.650513 47.9547882) 13831 POINT(308.988525 546.40863) 13832 POINT(811.198792 997.145752) 13833 POINT(348.438782 565.615051) 13834 POINT(808.724243 800.048218) 13835 POINT(335.049164 341.778809) 13836 POINT(585.77948 687.191162) 13837 POINT(110.879517 599.65741) 13838 POINT(792.314636 385.136749) 13839 POINT(979.257751 408.037048) 13840 POINT(699.126404 512.230103) 13841 POINT(363.462585 155.487869) 13842 POINT(585.601746 752.921631) 13843 POINT(937.675903 765.461548) 13844 POINT(194.720474 974.146118) 13845 POINT(223.267105 337.755157) 13846 POINT(266.234802 201.124237) 13847 POINT(244.076538 492.357849) 13848 POINT(771.296021 536.48761) 13849 POINT(758.5177 516.101685) 13850 POINT(337.878235 147.741852) 13851 POINT(682.65033 973.334717) 13852 POINT(82.5921021 966.304138) 13853 POINT(763.647522 505.618042) 13854 POINT(710.46936 729.849487) 13855 POINT(112.170006 894.452393) 13856 POINT(72.7149124 92.265831) 13857 POINT(438.083008 143.111526) 13858 POINT(99.0979691 246.557541) 13859 POINT(417.82959 912.276367) 13860 POINT(65.5260925 520.601196) 13861 POINT(542.877686 448.428009) 13862 POINT(890.488831 769.397034) 13863 POINT(624.358826 518.595764) 13864 POINT(651.66571 796.675964) 13865 POINT(254.829941 420.418304) 13866 POINT(804.387756 80.319931) 13867 POINT(427.644867 998.541382) 13868 POINT(898.265381 477.576843) 13869 POINT(989.477478 658.741882) 13870 POINT(611.723022 465.665131) 13871 POINT(31.9773235 537.066406) 13872 POINT(44.1017799 589.849792) 13873 POINT(922.369629 425.551483) 13874 POINT(762.233093 793.854614) 13875 POINT(716.164368 467.227264) 13876 POINT(636.88562 986.585815) 13877 POINT(802.27533 465.205353) 13878 POINT(21.3237438 735.249329) 13879 POINT(994.151489 373.431366) 13880 POINT(19.5777588 189.332031) 13881 POINT(920.493225 885.503479) 13882 POINT(119.235245 944.507446) 13883 POINT(584.406677 263.792389) 13884 POINT(179.067764 402.8479) 13885 POINT(777.18811 670.546997) 13886 POINT(975.174011 518.952454) 13887 POINT(657.218201 307.96225) 13888 POINT(233.247131 524.514404) 13889 POINT(68.6855774 943.171936) 13890 POINT(274.880127 70.871254) 13891 POINT(990.185913 700.284302) 13892 POINT(251.45343 135.242401) 13893 POINT(108.914505 924.007812) 13894 POINT(52.1748657 307.329071) 13895 POINT(729.566589 52.8394051) 13896 POINT(678.457947 655.017212) 13897 POINT(693.694641 644.566223) 13898 POINT(453.351227 97.9988937) 13899 POINT(428.770111 348.93335) 13900 POINT(363.613831 73.7535934) 13901 POINT(718.325195 863.363464) 13902 POINT(47.8416023 629.669556) 13903 POINT(915.183289 894.7995) 13904 POINT(84.4779129 926.925354) 13905 POINT(566.937012 306.934326) 13906 POINT(889.416748 395.509949) 13907 POINT(322.633179 895.768616) 13908 POINT(498.163818 475.473328) 13909 POINT(406.329407 311.69519) 13910 POINT(29.2401047 447.830261) 13911 POINT(319.182281 252.883331) 13912 POINT(653.880188 370.783661) 13913 POINT(37.521019 177.966339) 13914 POINT(335.423004 554.996338) 13915 POINT(158.583176 926.911682) 13916 POINT(556.552185 438.066925) 13917 POINT(885 64.0648575) 13918 POINT(283.294861 646.316406) 13919 POINT(688.601074 748.940247) 13920 POINT(784.120972 595.26001) 13921 POINT(36.6691971 46.2308464) 13922 POINT(846.424866 203.133667) 13923 POINT(860.546692 870.205261) 13924 POINT(830.059448 339.608612) 13925 POINT(986.737976 49.2517433) 13926 POINT(740.499817 60.0233154) 13927 POINT(601.744141 138.544678) 13928 POINT(667.840271 680.380066) 13929 POINT(879.320435 713.00061) 13930 POINT(50.4848518 416.904297) 13931 POINT(136.291595 564.832397) 13932 POINT(15.5344257 873.693115) 13933 POINT(602.25824 901.706177) 13934 POINT(706.063171 731.043091) 13935 POINT(969.355042 699.981873) 13936 POINT(916.417175 824.24176) 13937 POINT(38.6937981 485.623596) 13938 POINT(361.171509 557.338562) 13939 POINT(786.368713 181.582382) 13940 POINT(545.400879 558.729065) 13941 POINT(148.176682 228.876907) 13942 POINT(980.517822 335.941956) 13943 POINT(460.898102 928.958618) 13944 POINT(601.31073 747.114624) 13945 POINT(319.595093 102.595505) 13946 POINT(839.289368 588.180359) 13947 POINT(213.554291 466.42038) 13948 POINT(251.465317 850.321045) 13949 POINT(614.981201 109.068153) 13950 POINT(701.827881 974.915283) 13951 POINT(719.231812 636.695435) 13952 POINT(357.717407 106.830757) 13953 POINT(106.247147 750.49054) 13954 POINT(660.870483 195.88298) 13955 POINT(621.074036 530.016174) 13956 POINT(632.057495 235.646164) 13957 POINT(496.16684 604.982788) 13958 POINT(491.023651 764.226257) 13959 POINT(476.953979 799.055969) 13960 POINT(445.077179 429.373627) 13961 POINT(610.425415 82.9059753) 13962 POINT(398.45993 277.342285) 13963 POINT(637.890137 655.888672) 13964 POINT(242.034409 938.731384) 13965 POINT(149.317184 328.107605) 13966 POINT(733.395081 923.334717) 13967 POINT(937.700867 754.370789) 13968 POINT(908.95874 308.570679) 13969 POINT(295.680023 401.577454) 13970 POINT(572.725708 611.772522) 13971 POINT(359.332581 849.822632) 13972 POINT(975.179626 115.538139) 13973 POINT(389.912201 339.097534) 13974 POINT(77.2760849 298.121826) 13975 POINT(35.6809959 597.611023) 13976 POINT(238.855515 878.796509) 13977 POINT(903.425354 409.820709) 13978 POINT(181.424698 783.131531) 13979 POINT(41.3559799 103.213234) 13980 POINT(258.528625 667.760376) 13981 POINT(368.644989 919.314148) 13982 POINT(482.449951 511.617249) 13983 POINT(436.72522 868.567932) 13984 POINT(166.423157 814.592102) 13985 POINT(756.67865 198.456238) 13986 POINT(162.755798 669.501709) 13987 POINT(936.702942 592.995422) 13988 POINT(428.151886 54.2420197) 13989 POINT(33.0276299 998.675476) 13990 POINT(400.207947 183.63533) 13991 POINT(394.134033 881.696106) 13992 POINT(498.690826 361.107208) 13993 POINT(267.228821 374.373383) 13994 POINT(0.131583259 65.8325729) 13995 POINT(11.2558022 290.813751) 13996 POINT(805.926453 728.920471) 13997 POINT(724.068115 274.973175) 13998 POINT(917.091919 910.725891) 13999 POINT(822.603516 295.274231) 14000 POINT(130.776306 149.271698) 14001 POINT(822.016724 491.889343) 14002 POINT(925.399597 256.451538) 14003 POINT(528.857178 704.0896) 14004 POINT(246.827835 84.2022247) 14005 POINT(708.799072 309.812897) 14006 POINT(944.352112 947.846375) 14007 POINT(203.511261 767.542114) 14008 POINT(632.637146 799.601746) 14009 POINT(474.507782 197.060364) 14010 POINT(427.544647 603.74884) 14011 POINT(742.881226 721.64093) 14012 POINT(176.27298 28.6767731) 14013 POINT(699.440308 136.33493) 14014 POINT(785.151672 783.161194) 14015 POINT(184.843246 797.468262) 14016 POINT(54.3883781 568.548157) 14017 POINT(116.839096 745.100525) 14018 POINT(23.9032459 469.44342) 14019 POINT(182.836853 786.512207) 14020 POINT(387.045807 578.075256) 14021 POINT(659.975037 163.870422) 14022 POINT(661.548828 47.375309) 14023 POINT(989.043152 97.8054123) 14024 POINT(844.71875 541.291931) 14025 POINT(58.5211258 801.064636) 14026 POINT(500.921631 34.8349113) 14027 POINT(274.283295 868.669678) 14028 POINT(115.33654 88.3799591) 14029 POINT(450.922729 414.690125) 14030 POINT(33.2885323 449.00708) 14031 POINT(992.065369 98.0898209) 14032 POINT(26.9358482 124.893997) 14033 POINT(187.476303 683.951843) 14034 POINT(81.4883575 836.449524) 14035 POINT(280.340637 960.218689) 14036 POINT(165.426025 9.99079037) 14037 POINT(113.088699 378.001648) 14038 POINT(790.434021 677.007751) 14039 POINT(86.9126129 425.240723) 14040 POINT(27.1725006 845.705383) 14041 POINT(139.194992 464.385712) 14042 POINT(225.872894 83.4845963) 14043 POINT(803.075317 65.7990875) 14044 POINT(102.546371 291.855408) 14045 POINT(841.071838 16.3514442) 14046 POINT(651.870178 462.133362) 14047 POINT(694.940063 459.416077) 14048 POINT(799.284485 704.943604) 14049 POINT(149.790543 576.027039) 14050 POINT(23.3014908 73.4590988) 14051 POINT(333.042664 910.815552) 14052 POINT(783.449036 814.46875) 14053 POINT(947.312134 709.587891) 14054 POINT(351.709534 238.47496) 14055 POINT(538.20636 312.780762) 14056 POINT(140.971664 596.342041) 14057 POINT(518.734436 850.876282) 14058 POINT(381.201385 272.475739) 14059 POINT(585.267273 840.158081) 14060 POINT(744.21167 480.648499) 14061 POINT(367.458923 171.541626) 14062 POINT(445.63266 96.5543594) 14063 POINT(536.153748 828.844055) 14064 POINT(345.653625 539.777954) 14065 POINT(857.052917 138.62088) 14066 POINT(469.144867 876.501282) 14067 POINT(609.942505 630.069702) 14068 POINT(214.815201 842.992859) 14069 POINT(507.841034 624.579346) 14070 POINT(819.193604 969.390564) 14071 POINT(439.897614 450.021606) 14072 POINT(584.630676 734.786438) 14073 POINT(546.766235 920.184692) 14074 POINT(124.524078 920.070984) 14075 POINT(916.131042 185.817566) 14076 POINT(780.02179 396.9263) 14077 POINT(485.820587 767.187561) 14078 POINT(230.122116 242.943817) 14079 POINT(67.4074478 51.0793762) 14080 POINT(664.061951 687.86499) 14081 POINT(87.35186 575.634949) 14082 POINT(176.988312 248.823883) 14083 POINT(96.7462997 347.823334) 14084 POINT(956.085754 918.240417) 14085 POINT(63.8109818 319.742249) 14086 POINT(466.653534 232.343582) 14087 POINT(252.860031 86.1146545) 14088 POINT(51.2914391 917.476685) 14089 POINT(255.012878 216.603775) 14090 POINT(898.6745 922.274719) 14091 POINT(693.097534 278.909119) 14092 POINT(202.827789 474.0354) 14093 POINT(827.740845 183.620819) 14094 POINT(953.917847 215.306) 14095 POINT(873.446289 646.731262) 14096 POINT(315.053894 990.656738) 14097 POINT(250.532776 243.3797) 14098 POINT(37.2625008 863.228882) 14099 POINT(287.278931 155.315811) 14100 POINT(140.604706 985.968384) 14101 POINT(410.745056 498.812592) 14102 POINT(890.419067 964.147888) 14103 POINT(566.912903 279.064697) 14104 POINT(374.090668 895.129517) 14105 POINT(261.497955 36.8261452) 14106 POINT(138.88652 820.246704) 14107 POINT(60.6842003 134.149292) 14108 POINT(991.705078 474.715973) 14109 POINT(812.864014 135.184204) 14110 POINT(246.636215 967.803101) 14111 POINT(3.12021971 657.31366) 14112 POINT(198.70813 0.842347324) 14113 POINT(114.669075 445.282654) 14114 POINT(117.933395 959.563538) 14115 POINT(306.927856 819.911255) 14116 POINT(515.702454 364.555359) 14117 POINT(117.532547 402.555817) 14118 POINT(207.77713 785.247559) 14119 POINT(822.8974 461.434235) 14120 POINT(859.808716 114.821487) 14121 POINT(944.282715 976.605408) 14122 POINT(280.759613 652.871277) 14123 POINT(637.45459 702.770752) 14124 POINT(958.297485 476.972198) 14125 POINT(155.639359 14.7448492) 14126 POINT(892.716248 221.738983) 14127 POINT(607.476196 56.6527939) 14128 POINT(69.9266129 383.25766) 14129 POINT(52.0643387 855.502991) 14130 POINT(260.357971 277.368347) 14131 POINT(868.117798 291.232666) 14132 POINT(783.180054 592.200134) 14133 POINT(917.938965 592.732971) 14134 POINT(431.147949 269.278503) 14135 POINT(491.784546 822.454102) 14136 POINT(610.799255 44.7265472) 14137 POINT(384.733948 356.323883) 14138 POINT(569.005066 94.483551) 14139 POINT(825.008728 911.859375) 14140 POINT(206.442535 707.598877) 14141 POINT(766.596436 242.113297) 14142 POINT(730.986206 2.6988399) 14143 POINT(284.881378 228.700851) 14144 POINT(292.005188 288.450806) 14145 POINT(304.785736 71.452095) 14146 POINT(725.921143 523.680969) 14147 POINT(557.817017 398.702118) 14148 POINT(803.075562 371.776733) 14149 POINT(746.647278 989.973022) 14150 POINT(518.042297 872.786804) 14151 POINT(210.813766 6.54039526) 14152 POINT(335.200714 721.509888) 14153 POINT(580.322876 25.466465) 14154 POINT(166.973495 377.751221) 14155 POINT(699.004761 145.097672) 14156 POINT(705.077881 723.364258) 14157 POINT(548.152283 116.368973) 14158 POINT(480.011475 87.8455734) 14159 POINT(633.177612 11.7559423) 14160 POINT(328.485443 198.904053) 14161 POINT(769.72876 795.220825) 14162 POINT(393.454102 875.996216) 14163 POINT(957.074341 240.487396) 14164 POINT(160.71077 113.344917) 14165 POINT(919.830505 665.55127) 14166 POINT(596.799988 25.1028671) 14167 POINT(376.663361 628.217346) 14168 POINT(145.428665 20.3780613) 14169 POINT(426.95578 46.0006905) 14170 POINT(66.9638824 501.712982) 14171 POINT(982.212036 664.914307) 14172 POINT(474.429077 439.849121) 14173 POINT(584.949341 672.091919) 14174 POINT(989.223694 863.37207) 14175 POINT(508.867493 809.088379) 14176 POINT(473.28772 747.912109) 14177 POINT(803.213196 143.912643) 14178 POINT(7.43358517 20.3829041) 14179 POINT(92.5882111 763.854675) 14180 POINT(597.019653 574.31781) 14181 POINT(960.25531 887.074402) 14182 POINT(868.109619 878.371704) 14183 POINT(695.651794 103.446831) 14184 POINT(844.949341 147.785034) 14185 POINT(970.835205 754.663208) 14186 POINT(301.313507 224.97319) 14187 POINT(599.595459 476.040283) 14188 POINT(885.478455 507.94223) 14189 POINT(228.724808 39.5005951) 14190 POINT(415.831238 92.1098938) 14191 POINT(493.330963 265.973083) 14192 POINT(319.125458 11.11654) 14193 POINT(545.110229 588.882996) 14194 POINT(976.962708 224.756104) 14195 POINT(720.306152 36.9276848) 14196 POINT(802.15802 97.2852707) 14197 POINT(566.917236 918.071289) 14198 POINT(682.309692 217.740067) 14199 POINT(190.97023 297.364044) 14200 POINT(203.334686 856.794983) 14201 POINT(429.853027 704.152344) 14202 POINT(954.269348 344.052582) 14203 POINT(315.430573 130.47081) 14204 POINT(572.715698 537.991882) 14205 POINT(577.711548 808.496277) 14206 POINT(827.510864 91.2941055) 14207 POINT(66.0740051 13.1283188) 14208 POINT(464.200684 770.696289) 14209 POINT(262.500916 23.8852577) 14210 POINT(225.532959 947.306458) 14211 POINT(941.056213 711.852844) 14212 POINT(72.3946075 945.493469) 14213 POINT(229.206848 71.4906464) 14214 POINT(292.470856 31.6991806) 14215 POINT(166.946793 488.419098) 14216 POINT(719.598572 885.100952) 14217 POINT(484.514557 983.227051) 14218 POINT(474.640625 756.895386) 14219 POINT(952.450684 973.833923) 14220 POINT(460.168823 671.613708) 14221 POINT(850.569641 896.613342) 14222 POINT(730.880432 820.484497) 14223 POINT(985.007996 976.56073) 14224 POINT(957.180908 252.214798) 14225 POINT(212.865997 462.122681) 14226 POINT(591.567322 480.085114) 14227 POINT(648.208862 179.37088) 14228 POINT(330.282745 235.981079) 14229 POINT(985.607117 517.104187) 14230 POINT(783.259399 242.584183) 14231 POINT(630.34137 148.925369) 14232 POINT(373.814178 115.700058) 14233 POINT(338.393677 415.711823) 14234 POINT(789.232727 811.532715) 14235 POINT(693.024719 333.165039) 14236 POINT(400.717438 1.15497708) 14237 POINT(154.849731 420.875946) 14238 POINT(25.7532864 379.642883) 14239 POINT(373.76059 753.816345) 14240 POINT(980.457153 834.123047) 14241 POINT(526.806763 862.206543) 14242 POINT(279.744781 127.745476) 14243 POINT(307.371063 914.794617) 14244 POINT(8.11410904 970.37146) 14245 POINT(826.922424 342.816833) 14246 POINT(675.582092 97.2295761) 14247 POINT(668.672241 42.0136795) 14248 POINT(867.012634 960.224548) 14249 POINT(48.119503 138.408432) 14250 POINT(717.062195 439.901978) 14251 POINT(962.366333 146.087875) 14252 POINT(928.686462 336.814758) 14253 POINT(149.987381 73.5610962) 14254 POINT(885.173584 417.366852) 14255 POINT(16.01758 556.638489) 14256 POINT(271.683228 229.919037) 14257 POINT(610.297119 583.020874) 14258 POINT(863.106018 421.440613) 14259 POINT(568.110962 515.393005) 14260 POINT(294.653137 663.321045) 14261 POINT(244.038391 369.882446) 14262 POINT(707.012024 717.780945) 14263 POINT(285.5737 134.99295) 14264 POINT(849.363037 464.929504) 14265 POINT(622.894287 57.9132233) 14266 POINT(184.353073 576.822998) 14267 POINT(393.774475 531.401672) 14268 POINT(625.721375 821.420593) 14269 POINT(104.828659 501.867706) 14270 POINT(61.232914 949.279602) 14271 POINT(356.896393 220.030975) 14272 POINT(783.596252 642.96344) 14273 POINT(566.467346 967.492859) 14274 POINT(335.940491 867.877441) 14275 POINT(207.713837 929.181396) 14276 POINT(245.153015 68.624321) 14277 POINT(420.213196 222.026321) 14278 POINT(287.996185 312.663116) 14279 POINT(193.184906 829.117004) 14280 POINT(636.633545 639.336731) 14281 POINT(393.542328 686.341125) 14282 POINT(740.314636 364.12973) 14283 POINT(375.905182 801.074402) 14284 POINT(599.944702 892.86145) 14285 POINT(849.687012 191.492111) 14286 POINT(116.668144 86.5760345) 14287 POINT(711.350525 777.728394) 14288 POINT(82.1185379 393.951538) 14289 POINT(136.918488 555.270203) 14290 POINT(717.454407 733.526672) 14291 POINT(906.969604 375.11792) 14292 POINT(254.652695 502.974426) 14293 POINT(567.900146 148.47374) 14294 POINT(133.84375 547.704285) 14295 POINT(61.5700989 5.75784922) 14296 POINT(914.93396 507.534546) 14297 POINT(151.090424 855.955872) 14298 POINT(873.700134 639.958984) 14299 POINT(682.074524 413.642761) 14300 POINT(578.393982 94.1767197) 14301 POINT(122.931458 354.109741) 14302 POINT(82.2406769 174.725281) 14303 POINT(179.605377 104.072342) 14304 POINT(982.740723 521.041382) 14305 POINT(662.56842 424.304169) 14306 POINT(706.220337 363.989655) 14307 POINT(357.991516 454.706604) 14308 POINT(394.555328 267.380768) 14309 POINT(910.101379 100.884781) 14310 POINT(572.495911 577.416565) 14311 POINT(725.170044 388.98468) 14312 POINT(933.739197 382.134308) 14313 POINT(554.879456 812.706177) 14314 POINT(630.146606 213.194611) 14315 POINT(681.592651 369.017792) 14316 POINT(112.740463 231.301559) 14317 POINT(812.105957 318.763062) 14318 POINT(39.8968124 842.329224) 14319 POINT(769.625244 122.293701) 14320 POINT(925.185791 852.638306) 14321 POINT(564.029114 161.339142) 14322 POINT(885.40802 538.520691) 14323 POINT(204.065674 955.006165) 14324 POINT(112.487877 666.24231) 14325 POINT(806.252747 564.195312) 14326 POINT(28.0770092 236.432785) 14327 POINT(846.284729 724.549805) 14328 POINT(687.194336 860.882874) 14329 POINT(310.207001 188.668503) 14330 POINT(30.2968483 423.068665) 14331 POINT(633.129639 544.697144) 14332 POINT(398.28949 378.468628) 14333 POINT(589.579956 927.155701) 14334 POINT(131.709396 460.13739) 14335 POINT(226.611649 79.2015381) 14336 POINT(586.35498 52.83535) 14337 POINT(841.515015 961.308411) 14338 POINT(978.796204 359.706207) 14339 POINT(311.532562 843.045288) 14340 POINT(795.441956 124.077293) 14341 POINT(522.64032 641.364441) 14342 POINT(180.226593 891.099548) 14343 POINT(535.587097 275.280243) 14344 POINT(583.700867 45.9314537) 14345 POINT(615.501709 353.395874) 14346 POINT(788.701355 483.918274) 14347 POINT(560.111816 473.383484) 14348 POINT(206.261963 231.265854) 14349 POINT(442.730469 432.853027) 14350 POINT(494.600677 510.21817) 14351 POINT(69.5328674 386.277985) 14352 POINT(231.554352 139.510513) 14353 POINT(94.2826767 355.636017) 14354 POINT(657.565735 178.299911) 14355 POINT(873.699036 951.644287) 14356 POINT(696.196045 899.909363) 14357 POINT(147.347748 892.027832) 14358 POINT(299.213165 451.22641) 14359 POINT(429.668457 132.876068) 14360 POINT(103.783943 485.760468) 14361 POINT(379.028473 644.173096) 14362 POINT(833.502563 115.099022) 14363 POINT(208.150085 62.0091782) 14364 POINT(429.357178 307.350586) 14365 POINT(598.654968 404.388672) 14366 POINT(620.846558 365.286224) 14367 POINT(334.684723 527.179504) 14368 POINT(304.002899 975.079651) 14369 POINT(559.601807 69.4452515) 14370 POINT(397.874298 53.2141991) 14371 POINT(846.782166 856.642761) 14372 POINT(723.018677 899.309692) 14373 POINT(149.735062 425.057953) 14374 POINT(256.828857 41.9914589) 14375 POINT(725.614624 846.114502) 14376 POINT(946.241272 339.761139) 14377 POINT(705.124878 975.177979) 14378 POINT(126.899811 956.054626) 14379 POINT(584.49884 752.167114) 14380 POINT(740.59668 494.819946) 14381 POINT(343.416046 132.277649) 14382 POINT(644.361938 978.185974) 14383 POINT(526.282654 531.644348) 14384 POINT(752.621887 229.906158) 14385 POINT(671.257568 507.673004) 14386 POINT(889.211975 246.667953) 14387 POINT(217.884033 445.533691) 14388 POINT(592.653198 84.0954666) 14389 POINT(84.4486618 745.029602) 14390 POINT(713.06543 836.002991) 14391 POINT(672.613953 865.460754) 14392 POINT(162.5728 265.472839) 14393 POINT(149.969193 325.549072) 14394 POINT(286.395599 266.542603) 14395 POINT(579.546753 621.947998) 14396 POINT(865.449646 448.237396) 14397 POINT(235.816757 39.9353676) 14398 POINT(52.767231 981.531677) 14399 POINT(274.08493 515.806274) 14400 POINT(598.105469 318.366364) 14401 POINT(637.583618 370.090485) 14402 POINT(493.538147 254.490433) 14403 POINT(604.997681 677.503784) 14404 POINT(846.583618 979.684692) 14405 POINT(939.962585 852.59259) 14406 POINT(978.571594 545.5177) 14407 POINT(20.5958366 304.084564) 14408 POINT(779.6922 528.476929) 14409 POINT(246.879501 606.359619) 14410 POINT(506.823334 412.016479) 14411 POINT(170.338242 929.183533) 14412 POINT(967.239136 332.315704) 14413 POINT(215.707687 598.503174) 14414 POINT(325.236572 697.503479) 14415 POINT(198.047256 788.914368) 14416 POINT(237.272263 807.571594) 14417 POINT(539.027344 895.230286) 14418 POINT(255.199875 871.581482) 14419 POINT(689.044617 34.8799133) 14420 POINT(230.581757 780.107056) 14421 POINT(631.651001 98.7503128) 14422 POINT(52.8915749 74.8147888) 14423 POINT(925.901184 515.28363) 14424 POINT(410.919006 834.946777) 14425 POINT(801.143799 406.497437) 14426 POINT(283.156036 634.164062) 14427 POINT(706.126587 596.096375) 14428 POINT(645.8302 413.25589) 14429 POINT(106.82505 245.580078) 14430 POINT(996.126709 557.799744) 14431 POINT(480.008575 26.4596767) 14432 POINT(985.69873 798.746521) 14433 POINT(445.245361 233.219742) 14434 POINT(961.631287 792.528015) 14435 POINT(977.943542 165.981842) 14436 POINT(937.535522 550.671448) 14437 POINT(139.391983 293.044312) 14438 POINT(338.484772 832.726501) 14439 POINT(813.983765 986.312683) 14440 POINT(355.252533 386.854218) 14441 POINT(454.381775 117.451553) 14442 POINT(434.096527 606.60199) 14443 POINT(775.958191 135.355896) 14444 POINT(49.5986099 997.742798) 14445 POINT(14.1600885 807.860535) 14446 POINT(644.387451 433.74585) 14447 POINT(642.40802 9.70719337) 14448 POINT(358.633148 781.263123) 14449 POINT(51.7310677 447.520172) 14450 POINT(754.834106 247.376694) 14451 POINT(402.709869 219.381439) 14452 POINT(213.558502 28.2889442) 14453 POINT(789.702576 565.645569) 14454 POINT(530.526855 205.324997) 14455 POINT(699.1427 48.6193008) 14456 POINT(684.926636 659.831909) 14457 POINT(18.4374447 937.004639) 14458 POINT(926.448669 275.726715) 14459 POINT(158.287918 517.540161) 14460 POINT(600.681091 219.596558) 14461 POINT(115.85965 927.678772) 14462 POINT(308.753418 376.558929) 14463 POINT(34.0334015 431.634888) 14464 POINT(590.191467 459.33194) 14465 POINT(335.972778 645.572815) 14466 POINT(793.640076 172.562897) 14467 POINT(245.587112 369.56781) 14468 POINT(827.381042 519.453125) 14469 POINT(182.404968 483.351685) 14470 POINT(182.49205 688.765259) 14471 POINT(461.286713 904.485596) 14472 POINT(821.245911 403.692261) 14473 POINT(78.803421 251.832077) 14474 POINT(0.27005747 486.721375) 14475 POINT(352.625916 480.004761) 14476 POINT(833.507019 174.080429) 14477 POINT(349.658142 993.45929) 14478 POINT(828.716858 267.769165) 14479 POINT(522.800476 269.278564) 14480 POINT(890.833984 51.3485069) 14481 POINT(733.143616 738.350891) 14482 POINT(466.753571 416.99588) 14483 POINT(900.209106 34.0189476) 14484 POINT(903.022217 395.87558) 14485 POINT(261.824036 919.49054) 14486 POINT(447.516663 182.284424) 14487 POINT(579.728882 470.076355) 14488 POINT(98.7032394 365.602295) 14489 POINT(367.576111 899.006836) 14490 POINT(94.8057632 894.719238) 14491 POINT(193.215622 777.156982) 14492 POINT(846.610962 899.865051) 14493 POINT(493.840576 74.0732651) 14494 POINT(611.281799 879.796997) 14495 POINT(895.563843 222.483109) 14496 POINT(943.123352 561.89679) 14497 POINT(331.322357 328.817627) 14498 POINT(656.576538 483.300354) 14499 POINT(963.793579 281.679382) 14500 POINT(615.743103 687.778503) 14501 POINT(32.5160599 177.730087) 14502 POINT(495.543854 941.357239) 14503 POINT(824.013428 534.893433) 14504 POINT(817.378418 235.915207) 14505 POINT(405.942261 806.411133) 14506 POINT(75.2034683 661.123291) 14507 POINT(44.7429123 872.137085) 14508 POINT(867.726807 708.648621) 14509 POINT(142.737091 357.101837) 14510 POINT(323.499481 846.687012) 14511 POINT(464.959229 719.059937) 14512 POINT(135.763855 526.408508) 14513 POINT(586.245789 229.29097) 14514 POINT(553.814087 304.21402) 14515 POINT(161.367249 932.844299) 14516 POINT(251.281662 274.842896) 14517 POINT(419.52887 869.794312) 14518 POINT(106.249573 691.007996) 14519 POINT(401.773254 737.63623) 14520 POINT(283.618103 316.657776) 14521 POINT(916.19696 512.053772) 14522 POINT(260.009827 435.082001) 14523 POINT(80.0766296 569.905273) 14524 POINT(432.162903 362.433746) 14525 POINT(76.7484512 591.005066) 14526 POINT(10.7849722 44.9975319) 14527 POINT(383.276367 986.350769) 14528 POINT(35.9222031 728.478821) 14529 POINT(55.5919533 107.714241) 14530 POINT(522.861328 554.141663) 14531 POINT(602.021545 850.44989) 14532 POINT(128.368301 174.813507) 14533 POINT(773.192932 47.0857315) 14534 POINT(937.75 399.278198) 14535 POINT(63.6186676 858.46875) 14536 POINT(338.996826 412.674103) 14537 POINT(503.292419 62.2943459) 14538 POINT(749.447937 120.121483) 14539 POINT(140.040298 91.7352829) 14540 POINT(674.458618 598.460022) 14541 POINT(526.903015 31.197403) 14542 POINT(141.015121 884.847046) 14543 POINT(163.3638 689.197571) 14544 POINT(599.829102 389.83847) 14545 POINT(652.794983 762.83313) 14546 POINT(517.971619 995.865356) 14547 POINT(867.200317 922.769653) 14548 POINT(884.523254 429.759705) 14549 POINT(518.44397 86.213768) 14550 POINT(971.089905 210.851242) 14551 POINT(665.057861 927.692444) 14552 POINT(877.559692 445.425781) 14553 POINT(105.918602 788.973022) 14554 POINT(554.47644 925.933777) 14555 POINT(675.215088 91.1137772) 14556 POINT(233.322098 501.793427) 14557 POINT(833.944763 390.029541) 14558 POINT(74.4076462 11.1163282) 14559 POINT(906.564636 634.318665) 14560 POINT(621.662354 332.981506) 14561 POINT(920.39093 528.278992) 14562 POINT(550.206116 362.410675) 14563 POINT(431.018127 237.517456) 14564 POINT(625.134827 89.9927521) 14565 POINT(448.676697 828.429688) 14566 POINT(630.512573 40.8326874) 14567 POINT(685.44812 650.825745) 14568 POINT(851.345886 289.448181) 14569 POINT(717.114624 465.447174) 14570 POINT(26.6292572 205.321442) 14571 POINT(269.774139 111.046448) 14572 POINT(269.849182 225.571411) 14573 POINT(1.95289361 290.676147) 14574 POINT(459.18158 914.807373) 14575 POINT(737.683533 41.0914001) 14576 POINT(920.711243 616.450073) 14577 POINT(822.895142 305.55838) 14578 POINT(705.164551 274.069794) 14579 POINT(912.610413 947.356384) 14580 POINT(435.819 795.639282) 14581 POINT(164.129837 472.967682) 14582 POINT(79.5107422 328.687073) 14583 POINT(203.978546 650.0896) 14584 POINT(264.193695 331.46283) 14585 POINT(874.411499 341.533875) 14586 POINT(88.6371689 576.29834) 14587 POINT(247.347839 982.770142) 14588 POINT(99.0237427 558.904724) 14589 POINT(646.492249 724.930115) 14590 POINT(52.9989014 954.558105) 14591 POINT(946.985107 878.740784) 14592 POINT(766.822083 142.774948) 14593 POINT(559.21051 725.948608) 14594 POINT(211.496948 690.580139) 14595 POINT(660.514343 326.814148) 14596 POINT(758.060364 455.871124) 14597 POINT(154.802338 724.292053) 14598 POINT(192.658813 452.330902) 14599 POINT(832.684021 22.2992268) 14600 POINT(653.826538 252.146515) 14601 POINT(419.5065 557.358887) 14602 POINT(765.830322 829.346802) 14603 POINT(858.920776 665.871216) 14604 POINT(934.499084 842.43512) 14605 POINT(837.295227 14.9031277) 14606 POINT(470.187439 288.313538) 14607 POINT(339.223175 769.934387) 14608 POINT(44.1249428 739.07251) 14609 POINT(894.567322 941.300049) 14610 POINT(60.1970062 398.459778) 14611 POINT(169.081314 520.604431) 14612 POINT(128.134201 525.791077) 14613 POINT(27.9009094 693.250854) 14614 POINT(703.226562 302.38205) 14615 POINT(106.490273 713.162354) 14616 POINT(562.220642 530.55603) 14617 POINT(27.4681759 436.111572) 14618 POINT(518.322205 119.830917) 14619 POINT(552.75946 29.8101997) 14620 POINT(246.660858 731.549622) 14621 POINT(335.475037 778.632141) 14622 POINT(354.745026 215.153122) 14623 POINT(289.701996 960.783691) 14624 POINT(653.041687 210.297943) 14625 POINT(511.994141 543.744141) 14626 POINT(674.676575 33.4986725) 14627 POINT(826.920532 483.354889) 14628 POINT(779.309814 380.975342) 14629 POINT(379.818817 52.1358109) 14630 POINT(26.57374 516.565125) 14631 POINT(830.290405 207.983566) 14632 POINT(494.253479 171.209641) 14633 POINT(5.47307682 155.706573) 14634 POINT(873.974365 945.56604) 14635 POINT(826.371948 76.852829) 14636 POINT(233.970749 307.250732) 14637 POINT(725.27002 399.592499) 14638 POINT(479.124878 427.274536) 14639 POINT(7.3679285 857.251404) 14640 POINT(650.575439 865.15448) 14641 POINT(883.319946 114.30793) 14642 POINT(131.621292 138.406586) 14643 POINT(497.373688 610.741028) 14644 POINT(607.335327 289.671967) 14645 POINT(812.645874 943.648132) 14646 POINT(259.326202 874.273254) 14647 POINT(883.052429 38.7747269) 14648 POINT(864.63385 153.824615) 14649 POINT(861.073547 299.351196) 14650 POINT(862.14325 409.544769) 14651 POINT(160.497925 106.407036) 14652 POINT(907.592041 34.6832123) 14653 POINT(940.319275 500.117035) 14654 POINT(268.802246 672.133484) 14655 POINT(504.932922 627.965271) 14656 POINT(628.881042 14.6593084) 14657 POINT(159.707672 900.434998) 14658 POINT(432.627594 755.616882) 14659 POINT(431.021454 562.02655) 14660 POINT(999.203186 482.655548) 14661 POINT(595.209595 143.771133) 14662 POINT(854.33313 351.286194) 14663 POINT(978.958313 607.771973) 14664 POINT(433.113068 105.710999) 14665 POINT(139.996826 785.019409) 14666 POINT(748.207397 267.818909) 14667 POINT(535.130554 320.766449) 14668 POINT(289.295898 69.3167267) 14669 POINT(684.469421 918.721497) 14670 POINT(252.622437 324.739777) 14671 POINT(776.028992 373.438171) 14672 POINT(832.11676 943.365356) 14673 POINT(581.718933 122.412239) 14674 POINT(326.62088 55.2469635) 14675 POINT(10.2203836 774.009949) 14676 POINT(25.1977844 820.738159) 14677 POINT(468.647949 978.548462) 14678 POINT(471.405609 334.644562) 14679 POINT(885.574097 827.358826) 14680 POINT(727.977295 696.821655) 14681 POINT(33.4753036 673.831909) 14682 POINT(568.876465 262.537811) 14683 POINT(27.5695782 372.259979) 14684 POINT(222.649292 410.785126) 14685 POINT(247.113052 691.336365) 14686 POINT(938.929749 370.109924) 14687 POINT(679.394043 361.694092) 14688 POINT(511.577576 853.239502) 14689 POINT(908.909851 408.703247) 14690 POINT(183.055084 498.214355) 14691 POINT(825.671875 166.37709) 14692 POINT(494.223328 559.936768) 14693 POINT(96.512825 494.769287) 14694 POINT(503.836304 497.680267) 14695 POINT(599.051208 76.3954468) 14696 POINT(957.821228 257.458588) 14697 POINT(255.108154 357.342499) 14698 POINT(968.28125 240.143082) 14699 POINT(992.505432 351.807861) 14700 POINT(297.483765 404.381805) 14701 POINT(213.057785 536.444519) 14702 POINT(617.477966 295.875549) 14703 POINT(30.0888081 830.30072) 14704 POINT(19.1092815 280.197052) 14705 POINT(368.958313 860.187744) 14706 POINT(415.89325 34.5097466) 14707 POINT(585.021729 538.460571) 14708 POINT(372.413818 714.296509) 14709 POINT(659.405273 384.55896) 14710 POINT(780.700623 835.20343) 14711 POINT(976.359436 972.954224) 14712 POINT(911.603149 118.635475) 14713 POINT(687.25415 623.730835) 14714 POINT(834.845032 554.719177) 14715 POINT(324.134674 718.883728) 14716 POINT(387.645874 90.2111435) 14717 POINT(566.927063 344.125763) 14718 POINT(587.122131 395.048401) 14719 POINT(397.7453 854.808228) 14720 POINT(138.804123 483.292236) 14721 POINT(626.322449 243.307434) 14722 POINT(958.369568 836.625793) 14723 POINT(353.491577 157.404572) 14724 POINT(65.0237427 516.370605) 14725 POINT(94.1416473 163.876724) 14726 POINT(944.938843 358.845215) 14727 POINT(324.550385 463.461792) 14728 POINT(346.981049 175.096481) 14729 POINT(296.955658 102.9011) 14730 POINT(238.936203 256.500732) 14731 POINT(300.306946 672.882874) 14732 POINT(302.028625 899.996582) 14733 POINT(692.092041 169.007095) 14734 POINT(309.291229 978.941528) 14735 POINT(111.846275 783.594055) 14736 POINT(156.977615 306.565369) 14737 POINT(270.430328 812.117859) 14738 POINT(288.532532 68.1423569) 14739 POINT(626.540894 37.7368584) 14740 POINT(61.600235 475.356262) 14741 POINT(477.451141 104.918961) 14742 POINT(7.21980047 952.557312) 14743 POINT(447.05304 728.246826) 14744 POINT(366.929993 170.991287) 14745 POINT(821.394104 590.487305) 14746 POINT(171.302124 565.535706) 14747 POINT(508.702637 465.897278) 14748 POINT(48.8841171 201.544662) 14749 POINT(764.134705 227.119324) 14750 POINT(987.242554 0.246478632) 14751 POINT(974.03595 739.11438) 14752 POINT(170.42659 13.5458593) 14753 POINT(323.400818 259.246765) 14754 POINT(505.56958 187.467941) 14755 POINT(734.560913 412.346191) 14756 POINT(444.436462 532.88678) 14757 POINT(54.204586 422.429199) 14758 POINT(575.58551 888.267212) 14759 POINT(646.999939 403.494781) 14760 POINT(284.640839 208.206421) 14761 POINT(722.876404 750.764526) 14762 POINT(582.284058 130.505096) 14763 POINT(355.042389 156.896149) 14764 POINT(213.417709 190.86528) 14765 POINT(38.8421898 396.660126) 14766 POINT(71.0969772 586.267273) 14767 POINT(177.462204 685.56134) 14768 POINT(132.968475 594.411743) 14769 POINT(267.295837 295.758575) 14770 POINT(956.912537 286.737396) 14771 POINT(79.5992279 894.866577) 14772 POINT(760.306213 816.480408) 14773 POINT(410.174377 213.914093) 14774 POINT(260.87735 501.690308) 14775 POINT(187.585037 619.608032) 14776 POINT(476.700256 977.352722) 14777 POINT(913.352905 698.466736) 14778 POINT(221.813751 572.698608) 14779 POINT(653.327332 307.313263) 14780 POINT(948.663147 631.948425) 14781 POINT(534.732483 722.663269) 14782 POINT(188.655533 982.309998) 14783 POINT(933.149658 562.927002) 14784 POINT(140.261871 45.8051643) 14785 POINT(90.9038467 359.92514) 14786 POINT(916.124756 965.865906) 14787 POINT(704.116028 833.467407) 14788 POINT(755.479858 490.644592) 14789 POINT(289.325806 653.765747) 14790 POINT(757.943115 528.297485) 14791 POINT(709.452454 355.973175) 14792 POINT(724.551758 211.409348) 14793 POINT(748.466309 959.510437) 14794 POINT(780.190735 815.146912) 14795 POINT(798.111023 118.040337) 14796 POINT(79.639061 944.19696) 14797 POINT(610.111267 425.573853) 14798 POINT(1.99749577 405.229034) 14799 POINT(303.40451 987.473145) 14800 POINT(452.908386 123.304604) 14801 POINT(856.054504 954.90271) 14802 POINT(811.569397 241.759201) 14803 POINT(691.771484 356.05014) 14804 POINT(474.02121 205.637421) 14805 POINT(555.639587 941.290405) 14806 POINT(102.625717 599.439697) 14807 POINT(105.116669 612.133728) 14808 POINT(544.23822 862.023499) 14809 POINT(791.132202 310.624878) 14810 POINT(829.641479 696.909851) 14811 POINT(18.8023796 507.826691) 14812 POINT(820.786804 137.5159) 14813 POINT(934.660156 913.730286) 14814 POINT(489.859436 307.129547) 14815 POINT(742.25 18.6074219) 14816 POINT(757.835632 66.5527725) 14817 POINT(283.46463 115.315193) 14818 POINT(505.858551 992.679932) 14819 POINT(900.244141 606.850952) 14820 POINT(219.366318 643.884521) 14821 POINT(799.465454 502.642914) 14822 POINT(604.53302 398.628479) 14823 POINT(350.414062 895.369751) 14824 POINT(4.42564869 498.46701) 14825 POINT(844.650452 997.88855) 14826 POINT(66.659111 372.521118) 14827 POINT(215.999725 633.085144) 14828 POINT(606.68927 95.0574875) 14829 POINT(355.556 299.751892) 14830 POINT(155.795609 549.226074) 14831 POINT(842.893677 492.166138) 14832 POINT(167.961578 797.041199) 14833 POINT(858.115356 502.743744) 14834 POINT(126.084396 437.770386) 14835 POINT(526.081116 674.449829) 14836 POINT(879.182678 664.052795) 14837 POINT(88.4074936 946.668213) 14838 POINT(955.588623 977.972534) 14839 POINT(792.985413 524.68335) 14840 POINT(532.707886 429.248718) 14841 POINT(755.348083 834.171753) 14842 POINT(355.125183 996.588928) 14843 POINT(879.856506 349.104218) 14844 POINT(536.07135 703.623047) 14845 POINT(158.121429 920.833435) 14846 POINT(662.119629 985.857239) 14847 POINT(792.225525 420.102692) 14848 POINT(460.140106 88.5507736) 14849 POINT(954.160583 630.122375) 14850 POINT(944.830872 151.731644) 14851 POINT(1.57891011 711.185913) 14852 POINT(113.510315 542.779968) 14853 POINT(362.73999 274.648468) 14854 POINT(14.3643341 734.770874) 14855 POINT(397.789917 251.190475) 14856 POINT(210.192963 46.3834267) 14857 POINT(484.753326 675.485168) 14858 POINT(70.2118912 193.553375) 14859 POINT(590.477966 112.666466) 14860 POINT(929.081299 331.720703) 14861 POINT(221.006927 362.945282) 14862 POINT(389.62738 958.657288) 14863 POINT(32.3478088 956.582581) 14864 POINT(51.3877678 210.248856) 14865 POINT(479.366791 715.040161) 14866 POINT(811.96698 114.658478) 14867 POINT(723.695801 743.978882) 14868 POINT(906.183899 814.060608) 14869 POINT(975.355286 843.956543) 14870 POINT(766.193665 548.262085) 14871 POINT(449.65036 694.919067) 14872 POINT(54.3705292 892.316772) 14873 POINT(951.301025 776.235657) 14874 POINT(243.066116 812.599426) 14875 POINT(600.348877 826.073181) 14876 POINT(497.853424 155.279633) 14877 POINT(565.903809 488.940338) 14878 POINT(423.101135 200.883102) 14879 POINT(629.135437 430.484833) 14880 POINT(213.391922 542.442261) 14881 POINT(539.083801 661.949097) 14882 POINT(637.22113 297.031006) 14883 POINT(114.995674 676.556763) 14884 POINT(979.53595 206.288452) 14885 POINT(876.242371 585.615906) 14886 POINT(959.066528 576.529846) 14887 POINT(212.829453 98.013382) 14888 POINT(790.260437 949.506592) 14889 POINT(141.569153 523.386841) 14890 POINT(6.27441168 467.726654) 14891 POINT(998.793274 122.575279) 14892 POINT(630.352295 831.020264) 14893 POINT(801.788757 970.566711) 14894 POINT(462.595001 651.897949) 14895 POINT(847.828308 944.309082) 14896 POINT(25.2999744 664.986816) 14897 POINT(619.747131 673.279175) 14898 POINT(423.537231 279.862366) 14899 POINT(516.622559 983.090271) 14900 POINT(572.381775 176.95488) 14901 POINT(941.496948 975.766785) 14902 POINT(915.305359 213.564621) 14903 POINT(47.6375694 894.344666) 14904 POINT(609.842834 652.660583) 14905 POINT(991.04657 49.5274162) 14906 POINT(840.109436 362.97522) 14907 POINT(958.464294 593.21051) 14908 POINT(287.497711 17.4810448) 14909 POINT(963.699219 824.387146) 14910 POINT(160.501526 681.811584) 14911 POINT(435.65448 39.4897804) 14912 POINT(564.789978 418.352905) 14913 POINT(791.911377 989.458618) 14914 POINT(351.21106 410.002594) 14915 POINT(413.306885 593.232544) 14916 POINT(81.2849731 545.00354) 14917 POINT(946.862549 261.038208) 14918 POINT(19.0222645 706.48175) 14919 POINT(484.071625 595.527832) 14920 POINT(419.769073 123.629974) 14921 POINT(534.432251 224.844589) 14922 POINT(119.557426 902.807739) 14923 POINT(563.866577 455.046875) 14924 POINT(13.571475 243.701141) 14925 POINT(246.040634 451.60434) 14926 POINT(384.399597 226.275986) 14927 POINT(111.484787 928.115723) 14928 POINT(837.422302 437.347595) 14929 POINT(432.81488 257.841156) 14930 POINT(412.80899 990.598938) 14931 POINT(490.402924 468.566223) 14932 POINT(65.1047897 720.841492) 14933 POINT(685.803345 437.826965) 14934 POINT(379.357727 932.895691) 14935 POINT(752.485291 493.344696) 14936 POINT(77.3544617 128.959518) 14937 POINT(825.465454 528.004395) 14938 POINT(462.127167 587.647583) 14939 POINT(721.908691 160.832123) 14940 POINT(559.904907 625.559692) 14941 POINT(130.424225 681.792664) 14942 POINT(905.683594 331.438202) 14943 POINT(762.518555 791.05658) 14944 POINT(944.273071 657.492554) 14945 POINT(968.475708 30.5392265) 14946 POINT(98.8672333 6.71222067) 14947 POINT(22.9572773 370.45578) 14948 POINT(112.824417 34.0062523) 14949 POINT(732.107605 485.481995) 14950 POINT(169.500198 838.450623) 14951 POINT(271.290314 678.573364) 14952 POINT(114.851723 260.093994) 14953 POINT(126.287376 295.937958) 14954 POINT(376.439941 694.573792) 14955 POINT(654.48761 450.049835) 14956 POINT(621.847839 929.771057) 14957 POINT(408.036621 320.536041) 14958 POINT(13.9739065 609.048706) 14959 POINT(848.000732 642.495178) 14960 POINT(987.8479 294.058655) 14961 POINT(135.318848 891.163391) 14962 POINT(634.372559 886.089661) 14963 POINT(96.8087082 319.306915) 14964 POINT(74.6606064 658.489441) 14965 POINT(347.022949 353.395844) 14966 POINT(141.487274 34.5069695) 14967 POINT(591.689331 876.223633) 14968 POINT(452.006012 836.24054) 14969 POINT(866.333923 852.534302) 14970 POINT(711.601013 243.171402) 14971 POINT(473.104248 341.381561) 14972 POINT(189.019241 485.536591) 14973 POINT(596.540344 700.97229) 14974 POINT(557.30835 101.72625) 14975 POINT(509.970032 260.866333) 14976 POINT(216.277924 793.756653) 14977 POINT(261.334717 710.468262) 14978 POINT(266.024231 795.093628) 14979 POINT(161.719315 245.231567) 14980 POINT(156.454544 635.716553) 14981 POINT(30.9222984 202.001617) 14982 POINT(816.787842 55.984745) 14983 POINT(299.439575 597.179077) 14984 POINT(596.891113 29.8877048) 14985 POINT(870.759827 16.2391052) 14986 POINT(407.35202 746.539001) 14987 POINT(335.509949 566.575073) 14988 POINT(8.83811474 443.852264) 14989 POINT(251.505768 739.243408) 14990 POINT(908.115295 58.3792801) 14991 POINT(891.038635 686.201782) 14992 POINT(905.796448 259.083923) 14993 POINT(66.7687759 530.904358) 14994 POINT(100.277359 969.787048) 14995 POINT(416.536896 330.119659) 14996 POINT(377.343994 495.182648) 14997 POINT(219.50174 397.67688) 14998 POINT(852.66571 779.36261) 14999 POINT(373.648346 106.24482) 15000 POINT(835.026733 714.980164) 15001 POINT(358.394073 486.559753) 15002 POINT(45.005043 247.451721) 15003 POINT(684.384766 945.71936) 15004 POINT(663.336731 884.472961) 15005 POINT(672.374268 993.852295) 15006 POINT(354.967712 119.783073) 15007 POINT(159.202835 783.881348) 15008 POINT(481.496887 845.327942) 15009 POINT(484.342438 580.076294) 15010 POINT(992.167236 582.174805) 15011 POINT(526.388428 541.116699) 15012 POINT(890.716614 972.744995) 15013 POINT(624.509094 761.553162) 15014 POINT(84.3243713 500.833313) 15015 POINT(502.59906 706.602295) 15016 POINT(906.777466 537.750305) 15017 POINT(209.22612 609.476807) 15018 POINT(699.157532 139.68103) 15019 POINT(68.046524 203.925049) 15020 POINT(759.254333 270.532867) 15021 POINT(502.952637 228.925766) 15022 POINT(420.1185 414.313477) 15023 POINT(739.685242 374.790466) 15024 POINT(376.372345 630.225464) 15025 POINT(999.005432 913.107544) 15026 POINT(984.915039 641.601379) 15027 POINT(171.905106 855.507996) 15028 POINT(668.444641 326.571259) 15029 POINT(719.003845 572.2323) 15030 POINT(742.832886 174.615829) 15031 POINT(856.609253 840.669434) 15032 POINT(673.03241 710.205688) 15033 POINT(1.42416322 21.7617722) 15034 POINT(590.188782 274.470459) 15035 POINT(43.1911926 729.411987) 15036 POINT(731.412537 750.821838) 15037 POINT(726.438477 981.383667) 15038 POINT(602.817322 63.836834) 15039 POINT(253.807938 431.884003) 15040 POINT(128.635803 456.278137) 15041 POINT(7.21901417 183.910995) 15042 POINT(800.31488 431.30484) 15043 POINT(930.478271 677.008728) 15044 POINT(48.4007416 750.744385) 15045 POINT(867.148621 822.408569) 15046 POINT(348.833344 311.422913) 15047 POINT(817.919189 507.36792) 15048 POINT(269.166534 26.2727566) 15049 POINT(317.883911 674.200623) 15050 POINT(37.5371933 852.167725) 15051 POINT(659.664856 773.002563) 15052 POINT(759.371826 809.718567) 15053 POINT(554.977417 632.014343) 15054 POINT(48.4083023 599.756042) 15055 POINT(664.897095 843.156006) 15056 POINT(217.322296 245.724747) 15057 POINT(695.770935 45.3658791) 15058 POINT(879.902039 980.127075) 15059 POINT(989.546997 943.460693) 15060 POINT(645.255005 386.523438) 15061 POINT(598.531494 229.397247) 15062 POINT(782.029358 37.0856781) 15063 POINT(167.61232 495.795837) 15064 POINT(247.283096 600.596985) 15065 POINT(822.30896 733.724304) 15066 POINT(213.759613 599.012939) 15067 POINT(27.2665462 589.021057) 15068 POINT(297.369171 764.77948) 15069 POINT(713.751099 480.45636) 15070 POINT(643.209351 789.213013) 15071 POINT(131.218643 241.016129) 15072 POINT(136.171707 288.169128) 15073 POINT(940.121155 678.401245) 15074 POINT(476.902222 69.3802338) 15075 POINT(191.91626 425.934937) 15076 POINT(124.553558 431.261078) 15077 POINT(527.02002 499.56958) 15078 POINT(26.4556675 811.333984) 15079 POINT(229.566513 935.307434) 15080 POINT(206.737259 829.999207) 15081 POINT(604.82251 864.444763) 15082 POINT(199.371017 729.083435) 15083 POINT(464.582458 17.6000366) 15084 POINT(717.537109 611.984192) 15085 POINT(619.596497 324.086304) 15086 POINT(35.1725349 371.447296) 15087 POINT(65.9455566 398.07196) 15088 POINT(205.793213 0.86462909) 15089 POINT(722.279175 949.985352) 15090 POINT(298.962524 274.869415) 15091 POINT(913.107361 719.240845) 15092 POINT(340.077972 844.976807) 15093 POINT(414.145813 346.693726) 15094 POINT(91.5294266 306.733337) 15095 POINT(471.436768 661.998352) 15096 POINT(412.941071 77.5880203) 15097 POINT(297.110046 387.597961) 15098 POINT(838.466003 191.394379) 15099 POINT(729.851562 8.39211082) 15100 POINT(566.403992 718.637085) 15101 POINT(954.156616 40.8131561) 15102 POINT(80.325531 204.310974) 15103 POINT(904.155884 689.317871) 15104 POINT(624.110779 661.654846) 15105 POINT(568.212463 700.021423) 15106 POINT(201.663254 544.071655) 15107 POINT(270.738556 423.841522) 15108 POINT(334.486206 154.586823) 15109 POINT(877.02124 764.182068) 15110 POINT(608.882263 947.777649) 15111 POINT(62.6690941 901.597839) 15112 POINT(904.449585 579.528748) 15113 POINT(457.093323 820.392395) 15114 POINT(895.12146 702.155945) 15115 POINT(833.862061 585.688538) 15116 POINT(934.675476 863.925171) 15117 POINT(131.562439 675.778625) 15118 POINT(214.994797 320.939758) 15119 POINT(76.8624115 120.729767) 15120 POINT(255.089966 614.570557) 15121 POINT(504.786102 657.149536) 15122 POINT(432.811188 808.471008) 15123 POINT(165.937668 19.1750355) 15124 POINT(703.234802 855.790039) 15125 POINT(240.786667 51.2447777) 15126 POINT(604.973938 610.138855) 15127 POINT(889.545776 768.766541) 15128 POINT(588.32843 74.4682999) 15129 POINT(723.135986 293.764343) 15130 POINT(10.5801086 62.1865234) 15131 POINT(934.879761 754.943909) 15132 POINT(440.297241 127.132271) 15133 POINT(160.645966 531.963867) 15134 POINT(253.809555 396.580505) 15135 POINT(692.073486 424.266663) 15136 POINT(655.746033 448.082794) 15137 POINT(36.233757 483.455048) 15138 POINT(927.513977 131.050278) 15139 POINT(656.785583 928.382568) 15140 POINT(821.782043 912.610168) 15141 POINT(35.5892944 92.9497299) 15142 POINT(949.487 980.072021) 15143 POINT(527.261719 82.8009262) 15144 POINT(823.802307 655.616699) 15145 POINT(237.779861 349.039429) 15146 POINT(961.216003 259.482574) 15147 POINT(815.606934 850.706848) 15148 POINT(324.798981 123.509216) 15149 POINT(401.684631 764.702454) 15150 POINT(113.487267 125.574684) 15151 POINT(422.884979 719.277832) 15152 POINT(841.433228 646.012329) 15153 POINT(640.159912 448.08316) 15154 POINT(154.03598 888.938416) 15155 POINT(163.791245 274.442108) 15156 POINT(436.072906 854.594421) 15157 POINT(638.093201 394.188446) 15158 POINT(979.50293 73.9775391) 15159 POINT(669.032104 999.744019) 15160 POINT(994.18512 345.484558) 15161 POINT(841.012878 613.499939) 15162 POINT(717.280518 856.944153) 15163 POINT(442.173065 825.957397) 15164 POINT(162.919708 87.8006439) 15165 POINT(717.676941 980.099487) 15166 POINT(962.400269 8.4984293) 15167 POINT(102.603592 240.316574) 15168 POINT(289.415283 211.095428) 15169 POINT(283.073242 229.759323) 15170 POINT(10.4350977 491.21463) 15171 POINT(7.39746666 827.709106) 15172 POINT(116.304565 971.66803) 15173 POINT(557.520569 367.548462) 15174 POINT(799.459351 418.118835) 15175 POINT(512.231262 960.9021) 15176 POINT(567.090942 893.276611) 15177 POINT(533.068237 854.858887) 15178 POINT(802.430115 165.257187) 15179 POINT(105.156296 982.850342) 15180 POINT(685.51416 305.427734) 15181 POINT(520.149353 337.357025) 15182 POINT(295.923553 49.45858) 15183 POINT(526.901489 631.360413) 15184 POINT(680.717346 761.205627) 15185 POINT(455.451447 348.216614) 15186 POINT(271.981049 131.868637) 15187 POINT(777.518616 644.86261) 15188 POINT(73.9737396 106.645401) 15189 POINT(866.224182 375.091888) 15190 POINT(756.888611 388.496765) 15191 POINT(601.56311 457.767853) 15192 POINT(142.926636 294.942261) 15193 POINT(706.754517 914.640137) 15194 POINT(454.035156 700.931702) 15195 POINT(642.636719 644.864868) 15196 POINT(215.740601 391.327423) 15197 POINT(209.494476 655.00592) 15198 POINT(437.564209 863.545105) 15199 POINT(963.001892 306.437103) 15200 POINT(880.258789 598.231934) 15201 POINT(226.337036 724.528809) 15202 POINT(89.354866 77.9169464) 15203 POINT(35.1089706 899.25824) 15204 POINT(842.205017 545.397278) 15205 POINT(274.791199 24.0402203) 15206 POINT(593.9375 210.880112) 15207 POINT(629.262024 113.349686) 15208 POINT(991.665405 535.881348) 15209 POINT(649.317444 20.4647484) 15210 POINT(84.2699966 429.49646) 15211 POINT(245.280411 270.360413) 15212 POINT(218.529846 916.447571) 15213 POINT(509.840271 21.0436039) 15214 POINT(965.87146 694.439819) 15215 POINT(865.896362 376.657104) 15216 POINT(655.267944 249.613419) 15217 POINT(817.4646 870.349792) 15218 POINT(37.6295013 992.67572) 15219 POINT(845.762756 402.687439) 15220 POINT(319.360413 504.674225) 15221 POINT(351.678192 216.365433) 15222 POINT(774.668213 120.992317) 15223 POINT(692.326233 579.907349) 15224 POINT(577.901794 56.3071861) 15225 POINT(813.832642 977.24353) 15226 POINT(541.984253 293.849792) 15227 POINT(343.454926 507.53891) 15228 POINT(463.335419 881.898865) 15229 POINT(198.450928 406.978394) 15230 POINT(567.128662 842.181091) 15231 POINT(301.592926 643.652405) 15232 POINT(631.977173 982.529663) 15233 POINT(196.919296 206.059616) 15234 POINT(216.031891 794.189758) 15235 POINT(645.345154 318.542267) 15236 POINT(675.930359 717.586365) 15237 POINT(387.37738 452.287231) 15238 POINT(488.140717 184.854584) 15239 POINT(506.781006 753.09375) 15240 POINT(574.187927 439.264954) 15241 POINT(360.1297 737.276062) 15242 POINT(675.355408 527.766602) 15243 POINT(76.3761368 690.81311) 15244 POINT(300.16507 540.762451) 15245 POINT(729.658569 785.779785) 15246 POINT(813.825867 1.08522415) 15247 POINT(577.39563 159.421402) 15248 POINT(990.600037 790.747803) 15249 POINT(192.326462 7.81616735) 15250 POINT(898.486145 548.817444) 15251 POINT(937.654602 566.387329) 15252 POINT(624.70575 616.73938) 15253 POINT(403.114044 887.676697) 15254 POINT(827.276428 279.285065) 15255 POINT(78.9743652 802.503174) 15256 POINT(862.650757 821.307007) 15257 POINT(465.247467 849.255737) 15258 POINT(695.322815 254.561737) 15259 POINT(843.286072 278.581451) 15260 POINT(548.893616 67.5541) 15261 POINT(253.326447 253.735382) 15262 POINT(368.914276 7.82360172) 15263 POINT(579.215454 852.5802) 15264 POINT(398.589203 354.125702) 15265 POINT(623.572632 483.513611) 15266 POINT(234.937943 899.972473) 15267 POINT(324.116516 417.9375) 15268 POINT(554.231201 615.026733) 15269 POINT(804.075562 645.365967) 15270 POINT(643.502625 732.554382) 15271 POINT(333.903168 518.625366) 15272 POINT(24.890852 525.824097) 15273 POINT(903.420715 286.181091) 15274 POINT(839.80249 870.909668) 15275 POINT(436.66214 732.40863) 15276 POINT(501.856812 575.344604) 15277 POINT(527.843384 656.213501) 15278 POINT(115.841461 499.656525) 15279 POINT(315.91214 721.020081) 15280 POINT(682.17572 470.771332) 15281 POINT(955.057739 477.646851) 15282 POINT(503.460358 532.021545) 15283 POINT(365.508087 784.441711) 15284 POINT(25.539835 984.078247) 15285 POINT(177.171036 880.364441) 15286 POINT(577.178772 125.197472) 15287 POINT(200.570999 476.206482) 15288 POINT(820.162476 419.032806) 15289 POINT(395.59787 152.173553) 15290 POINT(838.683716 715.820251) 15291 POINT(257.457825 337.612976) 15292 POINT(539.726624 980.536316) 15293 POINT(227.649231 217.332642) 15294 POINT(714.368042 982.823059) 15295 POINT(170.667709 90.9710541) 15296 POINT(736.189575 461.858521) 15297 POINT(967.478455 305.082275) 15298 POINT(413.140747 169.338089) 15299 POINT(775.714355 695.473511) 15300 POINT(132.169174 830.364563) 15301 POINT(733.322937 98.9811478) 15302 POINT(763.80365 750.981506) 15303 POINT(654.376892 514.015564) 15304 POINT(151.834412 488.619598) 15305 POINT(228.490051 768.201233) 15306 POINT(679.606506 524.77063) 15307 POINT(112.374161 465.259918) 15308 POINT(860.667725 215.296143) 15309 POINT(145.292038 673.536804) 15310 POINT(82.1655655 811.087097) 15311 POINT(359.390839 442.472107) 15312 POINT(172.161713 49.098732) 15313 POINT(949.143005 213.734726) 15314 POINT(957.748962 610.512695) 15315 POINT(447.515625 469.127563) 15316 POINT(223.458115 668.958557) 15317 POINT(894.289246 231.853027) 15318 POINT(716.003967 238.030197) 15319 POINT(216.535599 31.0179787) 15320 POINT(22.1328335 145.040665) 15321 POINT(643.15155 636.709045) 15322 POINT(174.520462 168.993866) 15323 POINT(93.1628418 775.561462) 15324 POINT(822.775391 287.644562) 15325 POINT(788.01593 411.077301) 15326 POINT(302.195831 574.439758) 15327 POINT(96.1527786 301.247223) 15328 POINT(204.706802 204.869415) 15329 POINT(906.817078 976.150818) 15330 POINT(320.186859 297.719452) 15331 POINT(810.406067 73.6222458) 15332 POINT(491.125336 94.9522018) 15333 POINT(524.017578 960.880005) 15334 POINT(881.304077 830.10437) 15335 POINT(410.529083 598.954468) 15336 POINT(975.164612 745.47821) 15337 POINT(493.091339 785.155151) 15338 POINT(827.02478 179.923309) 15339 POINT(37.9604149 862.68219) 15340 POINT(399.794189 689.200989) 15341 POINT(868.880554 107.400406) 15342 POINT(455.871033 397.958252) 15343 POINT(965.654236 696.987854) 15344 POINT(276.187683 474.998322) 15345 POINT(296.101074 109.998428) 15346 POINT(327.718933 921.238708) 15347 POINT(20.4434929 180.308884) 15348 POINT(919.128967 52.5301971) 15349 POINT(304.529938 800.065979) 15350 POINT(375.677002 828.038635) 15351 POINT(675.588989 391.326935) 15352 POINT(528.222412 840.453186) 15353 POINT(671.91571 988.453552) 15354 POINT(500.489838 558.793579) 15355 POINT(74.6537628 840.951477) 15356 POINT(250.1185 650.585388) 15357 POINT(192.411774 376.441895) 15358 POINT(881.995605 650.820435) 15359 POINT(2.72386813 688.041809) 15360 POINT(919.66095 274.204193) 15361 POINT(771.338379 227.462357) 15362 POINT(957.984375 559.136047) 15363 POINT(482.130524 408.086945) 15364 POINT(96.8074493 201.699738) 15365 POINT(756.338989 430.266144) 15366 POINT(392.87674 691.334473) 15367 POINT(237.210724 928.790222) 15368 POINT(91.3708878 643.093933) 15369 POINT(810.502686 370.322876) 15370 POINT(386.959442 371.39743) 15371 POINT(746.276855 372.48172) 15372 POINT(899.073853 744.476135) 15373 POINT(434.7836 917.827271) 15374 POINT(361.488953 565.476135) 15375 POINT(978.847595 452.508026) 15376 POINT(360.103668 654.193726) 15377 POINT(455.055298 13.5464544) 15378 POINT(395.790283 852.097412) 15379 POINT(202.326904 259.225525) 15380 POINT(395.301636 882.676453) 15381 POINT(403.395752 787.840515) 15382 POINT(789.551758 299.909515) 15383 POINT(434.698547 640.950195) 15384 POINT(875.314087 221.061218) 15385 POINT(743.70697 883.541748) 15386 POINT(776.834961 627.999329) 15387 POINT(218.438629 636.193237) 15388 POINT(534.479736 336.324158) 15389 POINT(318.531158 669.978577) 15390 POINT(727.889832 266.974609) 15391 POINT(395.729614 445.737915) 15392 POINT(353.921509 44.4146461) 15393 POINT(226.931793 333.281799) 15394 POINT(140.685944 713.420593) 15395 POINT(476.193207 246.591248) 15396 POINT(7.25816917 177.92662) 15397 POINT(582.568115 407.213715) 15398 POINT(346.139832 876.00293) 15399 POINT(5.74201965 744.568176) 15400 POINT(287.544159 911.129639) 15401 POINT(246.596924 169.109894) 15402 POINT(129.340179 948.404907) 15403 POINT(68.7824249 738.244873) 15404 POINT(915.49353 382.723236) 15405 POINT(681.795227 467.127075) 15406 POINT(403.641541 712.448059) 15407 POINT(685.884216 124.242744) 15408 POINT(766.737976 465.465271) 15409 POINT(532.303833 967.841248) 15410 POINT(665.318787 74.1629028) 15411 POINT(405.165527 712.282227) 15412 POINT(349.814056 571.865723) 15413 POINT(397.651093 517.341248) 15414 POINT(203.543991 66.2373886) 15415 POINT(828.023621 938.171448) 15416 POINT(316.771149 456.42514) 15417 POINT(540.221985 294.315887) 15418 POINT(943.767822 512.186707) 15419 POINT(158.476242 63.8715897) 15420 POINT(894.735962 77.4367523) 15421 POINT(942.097717 700.232849) 15422 POINT(362.15863 40.7514954) 15423 POINT(120.259377 736.007507) 15424 POINT(389.465118 715.160095) 15425 POINT(210.196732 479.560059) 15426 POINT(124.571251 163.445297) 15427 POINT(746.961731 837.668335) 15428 POINT(330.86264 708.213196) 15429 POINT(317.907867 392.081451) 15430 POINT(975.589844 683.836914) 15431 POINT(617.857727 413.070038) 15432 POINT(405.634399 366.318756) 15433 POINT(66.9120483 869.71106) 15434 POINT(931.507141 794.066528) 15435 POINT(85.7345581 70.6273956) 15436 POINT(53.6972466 845.080322) 15437 POINT(454.648773 481.809967) 15438 POINT(15.6748743 832.259033) 15439 POINT(922.89093 677.210693) 15440 POINT(492.655121 27.2517509) 15441 POINT(840.889954 705.863098) 15442 POINT(615.478943 823.912354) 15443 POINT(597.618713 344.837769) 15444 POINT(978.600586 745.003235) 15445 POINT(921.142456 454.474426) 15446 POINT(37.2640343 611.001282) 15447 POINT(85.8607788 680.780029) 15448 POINT(311.694824 998.976685) 15449 POINT(35.1075783 44.9895515) 15450 POINT(988.852478 584.45343) 15451 POINT(721.371338 23.035326) 15452 POINT(951.42511 182.461182) 15453 POINT(265.184723 814.658081) 15454 POINT(528.872314 778.816223) 15455 POINT(92.5886459 915.350647) 15456 POINT(619.133545 702.809082) 15457 POINT(113.012978 382.097992) 15458 POINT(487.930176 362.348877) 15459 POINT(405.561066 389.44986) 15460 POINT(934.356384 807.252258) 15461 POINT(281.303375 634.926636) 15462 POINT(488.734161 361.43634) 15463 POINT(49.6525764 716.8526) 15464 POINT(456.708618 866.56665) 15465 POINT(233.721329 883.77478) 15466 POINT(470.593719 795.138489) 15467 POINT(326.384277 168.643234) 15468 POINT(486.493622 847.573242) 15469 POINT(757.337524 264.500732) 15470 POINT(58.2918129 263.848633) 15471 POINT(431.653137 978.778015) 15472 POINT(114.913467 214.251785) 15473 POINT(710.172485 393.274567) 15474 POINT(206.146606 435.452484) 15475 POINT(817.700867 144.994049) 15476 POINT(308.69986 37.2822571) 15477 POINT(500.618683 483.302063) 15478 POINT(295.149628 803.041138) 15479 POINT(3.58911872 921.110107) 15480 POINT(264.182251 663.1203) 15481 POINT(616.031128 617.311951) 15482 POINT(264.387421 550.145752) 15483 POINT(751.570129 855.485962) 15484 POINT(872.253662 896.249023) 15485 POINT(694.5354 636.529175) 15486 POINT(417.524445 352.626709) 15487 POINT(281.624237 12.6344366) 15488 POINT(898.391235 282.040802) 15489 POINT(217.11087 154.710617) 15490 POINT(260.945343 470.762695) 15491 POINT(857.568787 578.455139) 15492 POINT(400.83313 742.700623) 15493 POINT(886.262268 534.919434) 15494 POINT(102.224075 540.750427) 15495 POINT(645.526428 394.287231) 15496 POINT(985.208557 515.052246) 15497 POINT(153.103806 277.067017) 15498 POINT(165.909393 61.738987) 15499 POINT(219.171661 90.9537506) 15500 POINT(725.364075 66.4672699) 15501 POINT(156.434799 155.852997) 15502 POINT(668.184692 692.687073) 15503 POINT(466.060425 401.197571) 15504 POINT(967.82312 424.025513) 15505 POINT(545.395935 621.584045) 15506 POINT(632.781982 122.746071) 15507 POINT(935.476624 917.38501) 15508 POINT(781.262634 142.035995) 15509 POINT(271.551331 430.455811) 15510 POINT(227.598785 459.534515) 15511 POINT(860.615662 31.0797863) 15512 POINT(512.58429 954.3349) 15513 POINT(456.750793 206.231842) 15514 POINT(54.7886658 791.585327) 15515 POINT(186.555389 42.0669174) 15516 POINT(767.604736 10.317132) 15517 POINT(869.883362 651.856812) 15518 POINT(136.664413 824.409851) 15519 POINT(940.34967 456.632233) 15520 POINT(147.083435 477.446686) 15521 POINT(378.641754 427.390991) 15522 POINT(305.575134 264.037628) 15523 POINT(190.710571 308.380127) 15524 POINT(237.752594 208.030685) 15525 POINT(981.67511 289.756531) 15526 POINT(327.987518 927.55426) 15527 POINT(662.129639 929.598572) 15528 POINT(683.208618 114.329834) 15529 POINT(672.014465 950.135437) 15530 POINT(371.322449 397.074707) 15531 POINT(791.921021 977.156738) 15532 POINT(640.970337 873.618591) 15533 POINT(434.414368 246.463058) 15534 POINT(356.668243 401.752289) 15535 POINT(648.551575 674.147949) 15536 POINT(569.703796 593.59613) 15537 POINT(137.260941 651.310303) 15538 POINT(331.312225 11.8386173) 15539 POINT(665.756348 166.965851) 15540 POINT(84.5595474 108.588989) 15541 POINT(943.954895 839.551147) 15542 POINT(242.102539 159.473129) 15543 POINT(589.320496 617.230164) 15544 POINT(568.763306 648.27533) 15545 POINT(139.186035 25.561758) 15546 POINT(393.972565 962.795654) 15547 POINT(382.04184 148.952606) 15548 POINT(336.045807 723.198975) 15549 POINT(942.272522 46.3014336) 15550 POINT(437.530396 823.13855) 15551 POINT(87.2705231 53.5625267) 15552 POINT(401.193756 205.13205) 15553 POINT(962.748108 714.474426) 15554 POINT(945.43634 289.470428) 15555 POINT(812.555237 718.886475) 15556 POINT(334.948303 745.382019) 15557 POINT(442.635468 795.075684) 15558 POINT(509.361877 239.925186) 15559 POINT(62.3084793 592.903809) 15560 POINT(254.673615 870.430176) 15561 POINT(325.354645 68.9734116) 15562 POINT(817.642944 17.1674099) 15563 POINT(622.036377 119.075478) 15564 POINT(733.662598 321.825958) 15565 POINT(492.970703 338.784088) 15566 POINT(358.312317 772.506104) 15567 POINT(76.5602188 987.272339) 15568 POINT(299.642517 466.051361) 15569 POINT(221.494522 905.14624) 15570 POINT(233.014511 423.084839) 15571 POINT(830.791321 232.802032) 15572 POINT(236.988953 890.108643) 15573 POINT(18.2073059 995.601379) 15574 POINT(64.3778 307.139282) 15575 POINT(194.002289 685.764282) 15576 POINT(607.350952 619.87384) 15577 POINT(525.487671 863.641907) 15578 POINT(132.738495 834.228394) 15579 POINT(687.171509 23.9374733) 15580 POINT(759.836548 750.796509) 15581 POINT(102.378029 792.087463) 15582 POINT(687.682129 170.507889) 15583 POINT(237.859589 214.628128) 15584 POINT(114.602097 664.317566) 15585 POINT(28.1340694 32.8024712) 15586 POINT(845.687073 273.530396) 15587 POINT(338.210236 444.390717) 15588 POINT(672.635376 418.412842) 15589 POINT(11.2605419 793.869385) 15590 POINT(607.226746 396.719666) 15591 POINT(559.050354 730.251648) 15592 POINT(529.716492 346.962433) 15593 POINT(833.042358 745.684021) 15594 POINT(305.00531 520.580566) 15595 POINT(36.6966171 282.047821) 15596 POINT(653.986938 380.182281) 15597 POINT(506.339386 159.040192) 15598 POINT(229.574753 35.8710365) 15599 POINT(678.959778 342.717865) 15600 POINT(324.251526 107.145226) 15601 POINT(288.420441 711.123047) 15602 POINT(269.398621 403.375214) 15603 POINT(872.968994 671.858337) 15604 POINT(920.084778 141.456985) 15605 POINT(250.869949 199.431808) 15606 POINT(149.500153 445.582581) 15607 POINT(419.823517 57.5863152) 15608 POINT(205.006073 922.441772) 15609 POINT(880.108398 889.004333) 15610 POINT(256.151764 387.490387) 15611 POINT(269.709045 242.725006) 15612 POINT(850.436523 686.731384) 15613 POINT(358.825958 984.917236) 15614 POINT(94.6337433 756.911804) 15615 POINT(386.00235 433.555176) 15616 POINT(710.842468 978.940796) 15617 POINT(761.635559 769.886963) 15618 POINT(142.909607 779.085876) 15619 POINT(728.01709 122.853149) 15620 POINT(279.418427 735.151733) 15621 POINT(387.5112 275.899109) 15622 POINT(236.136871 956.049561) 15623 POINT(909.429016 303.661407) 15624 POINT(828.856384 669.215637) 15625 POINT(847.082458 969.144226) 15626 POINT(645.251343 108.145866) 15627 POINT(563.050903 276.21521) 15628 POINT(973.193359 419.426056) 15629 POINT(324.617249 819.140381) 15630 POINT(697.434143 273.206665) 15631 POINT(822.509033 157.674515) 15632 POINT(774.426025 671.899414) 15633 POINT(642.529419 295.774231) 15634 POINT(127.089874 508.362671) 15635 POINT(617.508606 892.787842) 15636 POINT(61.5241508 267.041931) 15637 POINT(370.50827 292.093628) 15638 POINT(343.036621 820.096436) 15639 POINT(671.755676 33.3405266) 15640 POINT(329.672363 116.771141) 15641 POINT(241.872971 706.036926) 15642 POINT(450.926392 160.069855) 15643 POINT(191.236954 805.216919) 15644 POINT(444.013184 612.696838) 15645 POINT(566.514038 430.88501) 15646 POINT(179.486572 667.419739) 15647 POINT(235.44223 14.1322517) 15648 POINT(384.860748 89.2579575) 15649 POINT(162.790802 802.074158) 15650 POINT(824.992981 112.630936) 15651 POINT(675.246338 154.567001) 15652 POINT(440.299286 820.848938) 15653 POINT(570.01239 127.109398) 15654 POINT(950.454834 803.758972) 15655 POINT(458.550201 681.16217) 15656 POINT(577.276062 978.260071) 15657 POINT(948.637146 785.668884) 15658 POINT(854.313049 52.6897202) 15659 POINT(628.41394 777.811829) 15660 POINT(203.743652 947.29303) 15661 POINT(127.082893 528.592773) 15662 POINT(758.022705 667.286438) 15663 POINT(168.297348 116.914207) 15664 POINT(172.10202 421.204803) 15665 POINT(712.049622 27.2998104) 15666 POINT(252.711899 834.688965) 15667 POINT(285.156097 39.721241) 15668 POINT(668.135559 718.669067) 15669 POINT(43.5119362 429.278168) 15670 POINT(792.17865 191.69458) 15671 POINT(183.524841 308.450439) 15672 POINT(579.836304 850.236145) 15673 POINT(46.0485115 660.647522) 15674 POINT(922.807861 840.063049) 15675 POINT(732.350952 81.8020172) 15676 POINT(46.9495049 958.809082) 15677 POINT(704.931763 483.391144) 15678 POINT(500.56189 557.753174) 15679 POINT(681.225891 47.7493591) 15680 POINT(154.772537 893.44519) 15681 POINT(978.410339 862.70874) 15682 POINT(361.016083 481.511749) 15683 POINT(243.793198 710.94751) 15684 POINT(154.68483 840.828308) 15685 POINT(446.873627 29.04179) 15686 POINT(780.484009 91.9004517) 15687 POINT(933.49646 676.831665) 15688 POINT(169.080154 135.049103) 15689 POINT(895.09613 729.674866) 15690 POINT(594.595215 418.759949) 15691 POINT(510.461334 400.453461) 15692 POINT(69.8190536 593.867737) 15693 POINT(325.516876 556.418518) 15694 POINT(25.2590733 3.27391768) 15695 POINT(778.190063 275.329834) 15696 POINT(107.014153 988.42334) 15697 POINT(608.516724 908.730164) 15698 POINT(107.769493 302.211365) 15699 POINT(754.879639 126.055611) 15700 POINT(908.906311 543.393311) 15701 POINT(89.9151535 105.730766) 15702 POINT(106.874588 900.587708) 15703 POINT(436.556641 138.157776) 15704 POINT(673.785034 685.894653) 15705 POINT(996.414917 395.927887) 15706 POINT(463.956116 110.900986) 15707 POINT(967.855347 9.64551735) 15708 POINT(731.351929 613.958862) 15709 POINT(406.480804 130.056152) 15710 POINT(627.033875 280.262115) 15711 POINT(541.14856 640.937073) 15712 POINT(163.620941 639.200439) 15713 POINT(887.147644 160.297958) 15714 POINT(581.13031 401.15329) 15715 POINT(755.872742 993.320923) 15716 POINT(844.394836 673.338562) 15717 POINT(636.508911 608.249023) 15718 POINT(18.6011848 427.211945) 15719 POINT(487.27298 840.835449) 15720 POINT(81.5526886 674.520691) 15721 POINT(117.147095 504.344879) 15722 POINT(867.358459 32.3522072) 15723 POINT(537.424805 16.4269066) 15724 POINT(27.8281422 346.935028) 15725 POINT(717.522034 443.065948) 15726 POINT(329.481079 419.699677) 15727 POINT(471.273621 410.474365) 15728 POINT(163.453476 895.989197) 15729 POINT(936.344421 321.090332) 15730 POINT(673.531372 186.229218) 15731 POINT(76.5649414 418.243622) 15732 POINT(447.990509 181.370026) 15733 POINT(949.217041 429.665009) 15734 POINT(770.962952 179.660004) 15735 POINT(828.921875 752.561707) 15736 POINT(188.863953 181.589905) 15737 POINT(187.335144 657.817932) 15738 POINT(770.328125 746.075684) 15739 POINT(591.958252 538.977905) 15740 POINT(280.558167 286.163025) 15741 POINT(734.795288 329.634705) 15742 POINT(362.562225 759.901672) 15743 POINT(537.199341 392.905548) 15744 POINT(231.134415 565.344604) 15745 POINT(934.069214 246.675507) 15746 POINT(806.442383 352.285889) 15747 POINT(929.715088 741.713684) 15748 POINT(311.669708 832.404785) 15749 POINT(578.457458 835.708984) 15750 POINT(255.389526 309.593048) 15751 POINT(992.752441 999.465881) 15752 POINT(239.414978 9.69867992) 15753 POINT(465.845795 912.291931) 15754 POINT(955.101868 700.636719) 15755 POINT(538.287659 327.978668) 15756 POINT(36.9146233 37.3317223) 15757 POINT(889.843811 462.324554) 15758 POINT(566.078552 409.437622) 15759 POINT(430.301117 625.099915) 15760 POINT(97.0252762 322.010651) 15761 POINT(852.394714 16.5638142) 15762 POINT(205.912964 899.710449) 15763 POINT(233.710556 69.582634) 15764 POINT(27.7169285 513.707092) 15765 POINT(396.201813 647.176697) 15766 POINT(803.304749 717.94574) 15767 POINT(594.281677 21.6576405) 15768 POINT(550.73468 219.051987) 15769 POINT(475.825439 350.769592) 15770 POINT(9.06088448 953.867065) 15771 POINT(993.466797 329.384033) 15772 POINT(584.644897 112.916191) 15773 POINT(213.062103 598.929688) 15774 POINT(218.925156 120.20871) 15775 POINT(527.006531 123.08358) 15776 POINT(655.484558 793.423584) 15777 POINT(215.225098 135.165817) 15778 POINT(228.897232 688.171753) 15779 POINT(267.260986 993.641235) 15780 POINT(947.178406 640.680481) 15781 POINT(874.203796 676.238892) 15782 POINT(665.771301 820.581726) 15783 POINT(586.620728 45.1813316) 15784 POINT(629.083435 885.7948) 15785 POINT(209.686584 36.2230148) 15786 POINT(613.946045 681.684631) 15787 POINT(542.97998 688.604309) 15788 POINT(579.465149 74.2980728) 15789 POINT(871.690613 333.239227) 15790 POINT(794.126282 70.681633) 15791 POINT(58.1374054 199.696793) 15792 POINT(261.406921 116.871437) 15793 POINT(375.548187 361.656891) 15794 POINT(240.35939 25.5181847) 15795 POINT(156.123138 4.00363016) 15796 POINT(301.596649 160.316254) 15797 POINT(506.759338 916.657837) 15798 POINT(668.916809 474.105713) 15799 POINT(970.832825 370.376587) 15800 POINT(272.632904 582.999451) 15801 POINT(103.625778 843.411072) 15802 POINT(635.854126 972.069275) 15803 POINT(580.982849 696.092346) 15804 POINT(285.935669 521.542175) 15805 POINT(102.341171 849.706421) 15806 POINT(139.652115 59.2783203) 15807 POINT(985.282959 848.657715) 15808 POINT(265.043884 469.309509) 15809 POINT(812.218994 668.747925) 15810 POINT(541.160767 791.831543) 15811 POINT(691.856934 92.8974228) 15812 POINT(188.02623 652.298462) 15813 POINT(877.997986 987.909241) 15814 POINT(545.140869 561.830933) 15815 POINT(463.32196 976.645142) 15816 POINT(162.927368 84.3097763) 15817 POINT(281.672607 669.603455) 15818 POINT(516.015625 404.194763) 15819 POINT(732.573914 174.337204) 15820 POINT(931.617188 430.829376) 15821 POINT(38.0540237 182.024078) 15822 POINT(585.016602 607.92218) 15823 POINT(84.2045517 695.032532) 15824 POINT(285.105591 69.8324661) 15825 POINT(946.274292 830.362488) 15826 POINT(846.728027 598.637268) 15827 POINT(982.612793 49.8603973) 15828 POINT(917.330994 27.7645454) 15829 POINT(873.705139 333.210999) 15830 POINT(440.104004 739.903992) 15831 POINT(620.253174 943.623962) 15832 POINT(444.626068 790.240784) 15833 POINT(569.270081 524.210754) 15834 POINT(462.353241 912.717346) 15835 POINT(358.097778 806.263611) 15836 POINT(674.508789 339.545624) 15837 POINT(929.885864 475.606384) 15838 POINT(473.656586 475.740417) 15839 POINT(735.27124 12.1113377) 15840 POINT(720.143799 154.802383) 15841 POINT(976.778687 138.219772) 15842 POINT(816.502625 483.270874) 15843 POINT(435.950409 948.343262) 15844 POINT(225.762512 325.7229) 15845 POINT(537.676147 671.457947) 15846 POINT(95.4971466 843.584961) 15847 POINT(919.003906 188.764633) 15848 POINT(793.526855 377.135284) 15849 POINT(776.386108 997.320801) 15850 POINT(941.822327 437.220093) 15851 POINT(639.479126 905.037964) 15852 POINT(683.766724 879.027527) 15853 POINT(263.029205 753.976685) 15854 POINT(621.092346 82.9227676) 15855 POINT(920.927063 304.690979) 15856 POINT(998.216187 425.63327) 15857 POINT(236.20166 747.324402) 15858 POINT(134.171539 638.400757) 15859 POINT(573.688416 323.718536) 15860 POINT(849.819397 107.126099) 15861 POINT(72.6009979 203.062958) 15862 POINT(207.592667 453.684357) 15863 POINT(296.646729 21.3188419) 15864 POINT(472.871246 168.776138) 15865 POINT(750.156494 607.141357) 15866 POINT(973.531982 856.813843) 15867 POINT(748.588257 125.280403) 15868 POINT(833.704895 154.963608) 15869 POINT(267.463196 689.061707) 15870 POINT(198.868988 344.736298) 15871 POINT(930.189148 958.76355) 15872 POINT(64.8321228 469.231659) 15873 POINT(565.326233 150.361938) 15874 POINT(638.679138 676.707092) 15875 POINT(178.785492 542.696106) 15876 POINT(964.38855 946.600769) 15877 POINT(485.480743 69.7042923) 15878 POINT(461.576782 123.15612) 15879 POINT(645.463257 12.7303209) 15880 POINT(877.930481 730.655273) 15881 POINT(697.058838 526.348938) 15882 POINT(722.647644 709.894226) 15883 POINT(597.637939 615.683289) 15884 POINT(511.076111 475.452545) 15885 POINT(323.135193 875.39209) 15886 POINT(544.279602 415.696625) 15887 POINT(270.177277 457.611389) 15888 POINT(609.179138 651.093628) 15889 POINT(207.688522 281.00116) 15890 POINT(6.02056122 930.716797) 15891 POINT(274.252899 864.144531) 15892 POINT(984.167053 521.833557) 15893 POINT(377.575012 567.979065) 15894 POINT(741.662964 763.846863) 15895 POINT(765.489258 683.432922) 15896 POINT(68.8729706 186.898651) 15897 POINT(274.617889 187.343918) 15898 POINT(895.075195 199.055161) 15899 POINT(671.611206 113.035797) 15900 POINT(35.635006 926.717041) 15901 POINT(759.674255 108.208939) 15902 POINT(395.869354 843.895264) 15903 POINT(284.674774 664.308411) 15904 POINT(528.631226 981.057861) 15905 POINT(723.548584 746.10199) 15906 POINT(481.81601 287.795471) 15907 POINT(434.0979 691.318909) 15908 POINT(228.365448 800.613342) 15909 POINT(378.880737 616.963196) 15910 POINT(16.9867668 693.401428) 15911 POINT(274.091095 506.054871) 15912 POINT(791.913147 759.847595) 15913 POINT(952.642273 266.412048) 15914 POINT(432.92572 981.158142) 15915 POINT(442.720795 477.654938) 15916 POINT(193.981949 296.474243) 15917 POINT(550.635193 165.476852) 15918 POINT(54.7207031 635.483215) 15919 POINT(979.72052 670.627441) 15920 POINT(131.53804 451.715118) 15921 POINT(423.392883 686.830322) 15922 POINT(164.666534 60.294693) 15923 POINT(926.298645 515.494812) 15924 POINT(948.692749 825.529663) 15925 POINT(727.142151 979.677307) 15926 POINT(403.28186 842.324524) 15927 POINT(972.573425 725.029541) 15928 POINT(488.741058 32.2962227) 15929 POINT(143.992004 546.791931) 15930 POINT(10.7619839 242.558411) 15931 POINT(866.899414 170.222626) 15932 POINT(386.688293 844.962402) 15933 POINT(402.274414 593.803101) 15934 POINT(971.520264 729.310974) 15935 POINT(556.232178 712.354004) 15936 POINT(578.295532 349.473969) 15937 POINT(820.967468 768.678467) 15938 POINT(340.291107 390.856171) 15939 POINT(187.810379 51.0088463) 15940 POINT(220.621796 596.327698) 15941 POINT(491.391998 738.459106) 15942 POINT(900.33728 621.198914) 15943 POINT(169.817963 492.612122) 15944 POINT(794.233948 432.385498) 15945 POINT(604.87793 160.648972) 15946 POINT(832.626038 559.486694) 15947 POINT(462.321503 170.029083) 15948 POINT(888.702881 423.623718) 15949 POINT(736.856812 998.263123) 15950 POINT(259.406677 381.72467) 15951 POINT(149.66069 651.006287) 15952 POINT(60.6977463 38.2826576) 15953 POINT(605.842957 800.392334) 15954 POINT(366.44458 692.871887) 15955 POINT(131.602661 61.7048416) 15956 POINT(197.936829 549.918945) 15957 POINT(940.024292 524.242065) 15958 POINT(305.235992 948.059631) 15959 POINT(462.953979 821.302856) 15960 POINT(22.4483604 441.153015) 15961 POINT(604.691711 709.955444) 15962 POINT(229.848114 43.5877571) 15963 POINT(469.956482 834.622498) 15964 POINT(723.039795 441.443298) 15965 POINT(70.4937057 336.132019) 15966 POINT(632.599609 961.518311) 15967 POINT(276.67627 521.961426) 15968 POINT(219.569702 716.007263) 15969 POINT(635.510071 481.804749) 15970 POINT(608.617432 626.100525) 15971 POINT(785.728088 378.786835) 15972 POINT(230.561584 138.048569) 15973 POINT(553.397644 999.740051) 15974 POINT(801.374573 935.924438) 15975 POINT(475.059357 852.676331) 15976 POINT(140.893997 22.7394066) 15977 POINT(365.367737 766.276917) 15978 POINT(559.636475 272.61496) 15979 POINT(596.152527 200.865067) 15980 POINT(647.747314 178.944809) 15981 POINT(285.512512 714.522705) 15982 POINT(270.810394 655.042603) 15983 POINT(488.885284 648.987732) 15984 POINT(300.681946 643.466125) 15985 POINT(447.007294 780.574768) 15986 POINT(926.516235 107.440331) 15987 POINT(764.421997 610.078125) 15988 POINT(345.668976 2.61897898) 15989 POINT(180.97081 96.5385513) 15990 POINT(723.264404 740.480652) 15991 POINT(49.8934288 942.616943) 15992 POINT(733.088623 777.250916) 15993 POINT(270.275574 249.464935) 15994 POINT(904.449036 506.281067) 15995 POINT(837.252563 227.394913) 15996 POINT(756.158264 949.841858) 15997 POINT(297.357117 191.930038) 15998 POINT(109.433441 581.469727) 15999 POINT(733.578491 825.183777) 16000 POINT(548.945984 346.120544) 16001 POINT(788.079041 437.833496) 16002 POINT(211.325775 856.857788) 16003 POINT(71.2337341 40.6863365) 16004 POINT(592.07196 248.669495) 16005 POINT(842.968384 506.091858) 16006 POINT(997.113708 67.928093) 16007 POINT(403.660919 62.9610176) 16008 POINT(449.394135 316.278229) 16009 POINT(342.644348 185.255737) 16010 POINT(72.145813 687.265198) 16011 POINT(886.240417 478.49469) 16012 POINT(190.42131 610.345886) 16013 POINT(616.019958 83.68116) 16014 POINT(55.5192604 818.214539) 16015 POINT(921.510864 60.3230934) 16016 POINT(340.891144 288.421753) 16017 POINT(667.865356 102.736198) 16018 POINT(473.752258 978.473083) 16019 POINT(734.188965 225.075272) 16020 POINT(747.895813 315.012299) 16021 POINT(676.578735 924.626709) 16022 POINT(757.191284 842.978455) 16023 POINT(733.807007 19.5446358) 16024 POINT(446.134216 361.07132) 16025 POINT(493.517883 341.775574) 16026 POINT(396.922729 727.376465) 16027 POINT(621.419312 749.36615) 16028 POINT(468.313965 916.130371) 16029 POINT(302.004913 271.292328) 16030 POINT(629.528625 836.511902) 16031 POINT(201.711929 394.605469) 16032 POINT(555.422485 520.814026) 16033 POINT(427.123077 595.92041) 16034 POINT(982.847656 76.8014603) 16035 POINT(772.983154 770.542419) 16036 POINT(891.531189 942.524719) 16037 POINT(526.682617 551.952026) 16038 POINT(637.971313 537.010742) 16039 POINT(784.843872 986.658142) 16040 POINT(312.992798 63.3710442) 16041 POINT(39.2413712 244.951904) 16042 POINT(841.026794 578.873108) 16043 POINT(177.120819 132.811127) 16044 POINT(923.336365 226.951202) 16045 POINT(816.822021 15.7317543) 16046 POINT(532.867981 847.150391) 16047 POINT(443.328308 278.814453) 16048 POINT(682.860291 799.394043) 16049 POINT(327.977661 801.870422) 16050 POINT(955.61554 408.150879) 16051 POINT(998.206665 812.103149) 16052 POINT(335.868958 740.097717) 16053 POINT(681.113159 344.17514) 16054 POINT(242.059036 656.383118) 16055 POINT(871.208252 857.906738) 16056 POINT(988.694153 48.8964348) 16057 POINT(988.479126 72.8311844) 16058 POINT(897.25238 590.938843) 16059 POINT(96.4454422 27.318573) 16060 POINT(758.08667 58.9230881) 16061 POINT(268.012909 774.588867) 16062 POINT(641.205933 556.362244) 16063 POINT(424.496613 20.8810253) 16064 POINT(172.260574 678.226624) 16065 POINT(163.207062 690.188293) 16066 POINT(297.398041 567.176086) 16067 POINT(142.600449 678.781006) 16068 POINT(425.816132 848.240601) 16069 POINT(250.447052 520.323975) 16070 POINT(283.898529 890.900757) 16071 POINT(857.15033 913.477234) 16072 POINT(164.963882 683.488647) 16073 POINT(598.763794 928.802612) 16074 POINT(792.218811 651.314453) 16075 POINT(66.0342407 586.558105) 16076 POINT(210.917328 984.452637) 16077 POINT(548.707581 523.149658) 16078 POINT(923.571411 831.869202) 16079 POINT(228.24823 798.853638) 16080 POINT(517.016785 74.3168488) 16081 POINT(385.056091 965.770447) 16082 POINT(893.043884 208.588715) 16083 POINT(824.343933 251.30394) 16084 POINT(699.092773 200.342041) 16085 POINT(692.327271 822.875488) 16086 POINT(909.260803 422.440308) 16087 POINT(593.653992 303.811157) 16088 POINT(678.771606 61.9109993) 16089 POINT(702.576355 993.728394) 16090 POINT(490.42923 613.086487) 16091 POINT(732.871887 110.279495) 16092 POINT(335.873138 379.827362) 16093 POINT(871.712769 79.3784637) 16094 POINT(787.232605 779.085388) 16095 POINT(345.444977 740.274292) 16096 POINT(578.743042 805.237793) 16097 POINT(253.582489 847.891357) 16098 POINT(948.858154 304.023743) 16099 POINT(842.37323 511.207611) 16100 POINT(910.310486 881.587219) 16101 POINT(980.316711 32.1908836) 16102 POINT(690.513794 893.730347) 16103 POINT(312.388367 849.684204) 16104 POINT(392.854462 219.305161) 16105 POINT(302.95813 56.9798584) 16106 POINT(999.110718 506.631683) 16107 POINT(103.120979 876.618774) 16108 POINT(895.909973 520.46106) 16109 POINT(198.131287 932.805908) 16110 POINT(348.357452 727.475586) 16111 POINT(984.746216 567.961243) 16112 POINT(649.438232 599.415405) 16113 POINT(504.53418 478.192596) 16114 POINT(885.332703 434.062317) 16115 POINT(303.731079 781.343994) 16116 POINT(418.332031 85.5315094) 16117 POINT(917.283203 234.856232) 16118 POINT(797.673401 537.288025) 16119 POINT(476.690094 658.691772) 16120 POINT(64.5220413 65.3038254) 16121 POINT(938.653259 926.380493) 16122 POINT(473.83551 36.7177467) 16123 POINT(22.9872608 915.810364) 16124 POINT(869.395264 523.795532) 16125 POINT(60.5124817 77.322937) 16126 POINT(128.455276 627.070129) 16127 POINT(89.6070251 312.197449) 16128 POINT(751.931763 79.0688019) 16129 POINT(36.7576561 457.57901) 16130 POINT(280.658356 615.410522) 16131 POINT(82.9480591 157.796814) 16132 POINT(436.912231 168.329941) 16133 POINT(93.3156128 345.930023) 16134 POINT(845.235596 964.512329) 16135 POINT(589.577637 58.1407928) 16136 POINT(702.742676 540.799438) 16137 POINT(318.782928 217.054413) 16138 POINT(624.923767 864.760498) 16139 POINT(241.616623 225.305161) 16140 POINT(69.8891144 639.858154) 16141 POINT(280.534332 347.8815) 16142 POINT(676.599731 355.13623) 16143 POINT(562.307983 589.325745) 16144 POINT(678.610168 215.80751) 16145 POINT(119.137627 12.0204525) 16146 POINT(365.017944 163.234818) 16147 POINT(113.454834 633.203125) 16148 POINT(648.619995 300.623413) 16149 POINT(988.171692 385.096771) 16150 POINT(914.790161 114.933098) 16151 POINT(458.796295 344.347748) 16152 POINT(913.510742 497.369354) 16153 POINT(727.05072 19.1817665) 16154 POINT(924.627136 176.237274) 16155 POINT(556.022949 926.295715) 16156 POINT(379.20755 389.476288) 16157 POINT(81.2164383 761.101074) 16158 POINT(617.4328 433.005371) 16159 POINT(195.015732 946.750061) 16160 POINT(268.425354 758.88446) 16161 POINT(617.068054 287.260132) 16162 POINT(565.66095 88.6532288) 16163 POINT(11.0257969 411.480988) 16164 POINT(682.041687 217.080887) 16165 POINT(718.256653 6.72663307) 16166 POINT(253.415329 865.616638) 16167 POINT(418.894592 848.343201) 16168 POINT(733.495483 799.356873) 16169 POINT(695.479004 944.659973) 16170 POINT(115.094223 33.2563362) 16171 POINT(538.047302 861.646729) 16172 POINT(93.7661438 50.1475945) 16173 POINT(93.664505 359.781525) 16174 POINT(624.950439 653.056702) 16175 POINT(807.875061 774.342712) 16176 POINT(422.183838 136.105392) 16177 POINT(738.454346 272.429108) 16178 POINT(602.758911 531.383301) 16179 POINT(529.253906 913.963623) 16180 POINT(952.26593 563.597717) 16181 POINT(928.132996 783.841675) 16182 POINT(147.85379 800.7276) 16183 POINT(10.3319464 817.9823) 16184 POINT(451.970764 148.609146) 16185 POINT(447.677032 52.6713982) 16186 POINT(517.116516 12.282877) 16187 POINT(343.348602 135.232361) 16188 POINT(884.205322 989.566467) 16189 POINT(758.345886 61.3226357) 16190 POINT(822.06897 115.857239) 16191 POINT(94.1323013 282.25827) 16192 POINT(356.117279 327.394653) 16193 POINT(799.246704 852.567017) 16194 POINT(636.042847 727.545776) 16195 POINT(347.056793 976.939575) 16196 POINT(364.64917 342.150635) 16197 POINT(326.562195 745.987976) 16198 POINT(474.470062 641.246765) 16199 POINT(615.617676 616.461548) 16200 POINT(921.026489 131.870712) 16201 POINT(611.639709 154.157211) 16202 POINT(639.656372 627.020996) 16203 POINT(102.425056 92.6797333) 16204 POINT(868.297058 346.807068) 16205 POINT(620.896606 10.0491362) 16206 POINT(105.973221 177.457779) 16207 POINT(672.289734 45.1534843) 16208 POINT(593.734314 211.017059) 16209 POINT(508.504974 490.049133) 16210 POINT(962.221069 12.6252193) 16211 POINT(688.214111 740.599243) 16212 POINT(381.863159 953.308472) 16213 POINT(367.076813 671.014465) 16214 POINT(424.988953 834.845581) 16215 POINT(552.481018 737.242004) 16216 POINT(854.060791 990.833618) 16217 POINT(702.078186 995.19751) 16218 POINT(590.155457 36.4520073) 16219 POINT(393.667419 243.518387) 16220 POINT(297.132233 561.162354) 16221 POINT(22.4592743 933.442688) 16222 POINT(899.245483 806.845398) 16223 POINT(845.291504 612.813599) 16224 POINT(195.953537 882.455994) 16225 POINT(272.994415 34.9194679) 16226 POINT(763.178711 359.585968) 16227 POINT(272.936249 729.387878) 16228 POINT(954.222961 336.399719) 16229 POINT(573.084412 630.757507) 16230 POINT(908.015381 805.916504) 16231 POINT(124.072777 135.378571) 16232 POINT(612.553894 614.84375) 16233 POINT(872.28125 819.297791) 16234 POINT(785.625183 538.029175) 16235 POINT(298.443054 624.736328) 16236 POINT(354.590088 248.639526) 16237 POINT(684.552734 2.27959132) 16238 POINT(826.776001 853.552063) 16239 POINT(566.740601 687.184631) 16240 POINT(729.517944 445.947937) 16241 POINT(21.3130589 164.130524) 16242 POINT(404.958679 952.145203) 16243 POINT(101.463905 623.764343) 16244 POINT(813.296814 707.335571) 16245 POINT(7.5026741 290.631989) 16246 POINT(126.33532 365.759705) 16247 POINT(126.197662 375.255676) 16248 POINT(981.122864 256.263397) 16249 POINT(435.50824 808.581421) 16250 POINT(464.517792 346.028259) 16251 POINT(538.211426 105.742195) 16252 POINT(570.088074 926.11145) 16253 POINT(688.472412 694.675293) 16254 POINT(818.454529 725.419556) 16255 POINT(114.147079 365.812256) 16256 POINT(473.690338 778.673096) 16257 POINT(47.5500641 949.688782) 16258 POINT(787.523315 293.201843) 16259 POINT(569.699524 223.366577) 16260 POINT(628.796875 394.090149) 16261 POINT(386.925446 463.128815) 16262 POINT(829.99823 782.926331) 16263 POINT(311.578491 94.7290268) 16264 POINT(430.858002 468.489929) 16265 POINT(655.913025 903.888489) 16266 POINT(499.379181 155.055008) 16267 POINT(193.670975 134.733521) 16268 POINT(344.613678 83.1247711) 16269 POINT(349.222504 164.034409) 16270 POINT(137.643555 976.52063) 16271 POINT(969.207703 951.686707) 16272 POINT(365.230347 767.602417) 16273 POINT(374.475433 55.7069855) 16274 POINT(245.297913 348.421509) 16275 POINT(416.869446 101.582947) 16276 POINT(528.751465 269.836121) 16277 POINT(340.320374 415.218262) 16278 POINT(745.180298 13.7174902) 16279 POINT(311.151245 285.673706) 16280 POINT(370.940155 766.631042) 16281 POINT(308.999542 503.781311) 16282 POINT(10.2824678 988.708069) 16283 POINT(505.936829 426.471558) 16284 POINT(90.0368423 101.363846) 16285 POINT(483.978912 610.907837) 16286 POINT(835.431946 305.236298) 16287 POINT(405.116791 829.49408) 16288 POINT(181.652161 519.00061) 16289 POINT(136.261002 64.3620453) 16290 POINT(498.494812 224.978317) 16291 POINT(5.21751738 451.530273) 16292 POINT(482.958374 283.737091) 16293 POINT(312.257721 429.659882) 16294 POINT(678.829651 592.840088) 16295 POINT(512.391418 890.938538) 16296 POINT(888.539368 510.835815) 16297 POINT(511.608063 542.455261) 16298 POINT(279.043304 833.398743) 16299 POINT(259.750336 91.4621429) 16300 POINT(481.704224 521.771179) 16301 POINT(575.083618 158.755402) 16302 POINT(130.6707 462.489532) 16303 POINT(280.90802 908.273682) 16304 POINT(462.764191 40.5855484) 16305 POINT(480.732544 430.759857) 16306 POINT(155.219482 885.452393) 16307 POINT(431.730072 623.437622) 16308 POINT(49.7193451 589.396118) 16309 POINT(610.670227 120.218575) 16310 POINT(799.091858 684.218201) 16311 POINT(394.671844 217.706741) 16312 POINT(476.994934 512.282471) 16313 POINT(321.433228 446.556763) 16314 POINT(464.216095 557.326965) 16315 POINT(248.719254 706.542786) 16316 POINT(324.31427 159.323959) 16317 POINT(327.570496 733.615112) 16318 POINT(215.789566 570.135254) 16319 POINT(542.828003 130.481705) 16320 POINT(670.48938 896.344238) 16321 POINT(491.15332 566.705872) 16322 POINT(264.357208 396.88382) 16323 POINT(971.891846 853.43689) 16324 POINT(985.85614 770.960327) 16325 POINT(99.1444092 0.786888897) 16326 POINT(591.5177 791.961548) 16327 POINT(821.651489 667.262695) 16328 POINT(252.276398 861.822144) 16329 POINT(606.073059 470.907135) 16330 POINT(616.871643 614.613159) 16331 POINT(322.589722 826.87616) 16332 POINT(531.073853 565.467041) 16333 POINT(121.221924 447.67868) 16334 POINT(988.394836 349.506287) 16335 POINT(932.740662 547.461487) 16336 POINT(86.9670639 334.004333) 16337 POINT(627.538696 553.382202) 16338 POINT(419.241455 214.982971) 16339 POINT(355.473572 683.758911) 16340 POINT(220.007645 666.882019) 16341 POINT(33.7432213 808.413574) 16342 POINT(991.051331 631.489258) 16343 POINT(790.695618 281.16507) 16344 POINT(157.726212 481.278748) 16345 POINT(681.609253 913.132507) 16346 POINT(497.155945 34.5866737) 16347 POINT(516.549133 439.34964) 16348 POINT(716.135803 338.201996) 16349 POINT(857.157227 986.773132) 16350 POINT(208.648483 760.115967) 16351 POINT(403.562927 461.319427) 16352 POINT(950.936096 385.162689) 16353 POINT(187.502151 982.930725) 16354 POINT(912.103271 3.49680972) 16355 POINT(374.350311 574.33667) 16356 POINT(689.208069 291.335785) 16357 POINT(544.359619 80.238472) 16358 POINT(189.800186 660.810913) 16359 POINT(139.327286 603.826172) 16360 POINT(657.083191 897.405457) 16361 POINT(220.718887 707.200562) 16362 POINT(691.63031 196.23027) 16363 POINT(762.560242 857.381409) 16364 POINT(900.318237 779.832397) 16365 POINT(698.951782 501.74881) 16366 POINT(582.428772 548.516602) 16367 POINT(741.732117 133.207611) 16368 POINT(332.39917 438.06955) 16369 POINT(286.632416 428.94281) 16370 POINT(439.302063 488.731689) 16371 POINT(322.351501 205.814041) 16372 POINT(538.746704 353.292175) 16373 POINT(260.601624 484.333405) 16374 POINT(620.586121 771.96283) 16375 POINT(708.709961 361.497498) 16376 POINT(415.787659 738.497314) 16377 POINT(930.317017 895.862671) 16378 POINT(531.392639 887.781067) 16379 POINT(682.726929 557.132507) 16380 POINT(830.10437 402.365601) 16381 POINT(208.287872 503.773438) 16382 POINT(270.271606 207.314392) 16383 POINT(896.703857 558.012512) 16384 POINT(245.568146 783.069214) 16385 POINT(858.401978 45.8548546) 16386 POINT(857.337463 849.232239) 16387 POINT(767.142029 973.961182) 16388 POINT(185.308823 873.247253) 16389 POINT(582.208679 404.449707) 16390 POINT(616.277466 642.60144) 16391 POINT(464.161346 457.661682) 16392 POINT(470.567444 453.659698) 16393 POINT(498.730896 482.003204) 16394 POINT(310.980103 151.487671) 16395 POINT(964.690613 455.125122) 16396 POINT(409.924469 780.570374) 16397 POINT(375.136444 263.532745) 16398 POINT(322.093658 844.340759) 16399 POINT(517.481812 805.449829) 16400 POINT(500.091187 630.697144) 16401 POINT(173.606781 797.250427) 16402 POINT(489.64267 140.61673) 16403 POINT(154.134491 175.49614) 16404 POINT(743.397705 397.608612) 16405 POINT(93.9990921 278.6716) 16406 POINT(244.90274 247.752396) 16407 POINT(72.6988068 784.830505) 16408 POINT(387.30545 754.733826) 16409 POINT(312.405365 158.894531) 16410 POINT(308.053009 413.523224) 16411 POINT(819.058533 127.267441) 16412 POINT(747.718201 252.691223) 16413 POINT(42.4702721 214.337036) 16414 POINT(537.696472 461.979431) 16415 POINT(196.178497 427.565948) 16416 POINT(790.560608 102.432907) 16417 POINT(379.337067 813.06842) 16418 POINT(484.158691 255.568298) 16419 POINT(742.432922 385.312439) 16420 POINT(315.037994 310.737762) 16421 POINT(625.348694 191.976151) 16422 POINT(820.545288 31.7160053) 16423 POINT(437.615479 352.749237) 16424 POINT(907.188171 280.877625) 16425 POINT(442.139191 419.358276) 16426 POINT(103.859642 399.055328) 16427 POINT(18.8627644 469.284454) 16428 POINT(313.7789 968.818726) 16429 POINT(225.508347 859.134094) 16430 POINT(253.051773 146.65036) 16431 POINT(918.607178 432.645294) 16432 POINT(524.302185 694.109863) 16433 POINT(557.479675 375.717651) 16434 POINT(721.690308 918.982849) 16435 POINT(372.807556 525.113281) 16436 POINT(642.760437 744.648376) 16437 POINT(454.200989 222.699265) 16438 POINT(590.019409 240.129227) 16439 POINT(690.088135 233.007263) 16440 POINT(581.135864 985.80365) 16441 POINT(398.85318 543.833008) 16442 POINT(704.48291 332.471649) 16443 POINT(21.050684 298.555176) 16444 POINT(712.878662 786.915955) 16445 POINT(825.491516 681.428467) 16446 POINT(552.368225 668.449463) 16447 POINT(221.905365 325.523956) 16448 POINT(887.445801 711.98053) 16449 POINT(802.751465 35.097496) 16450 POINT(775.042908 218.272812) 16451 POINT(567.700928 123.451859) 16452 POINT(625.867615 586.361328) 16453 POINT(155.608398 42.9080048) 16454 POINT(95.3276443 912.183533) 16455 POINT(137.816071 820.054993) 16456 POINT(892.51355 747.672546) 16457 POINT(158.888931 967.348267) 16458 POINT(962.867798 922.762085) 16459 POINT(670.006836 397.355927) 16460 POINT(569.674805 516.501648) 16461 POINT(237.98941 560.106934) 16462 POINT(405.93924 990.944763) 16463 POINT(559.189087 714.309753) 16464 POINT(649.277222 181.438843) 16465 POINT(820.264099 352.525024) 16466 POINT(418.940765 168.827606) 16467 POINT(463.265381 267.177643) 16468 POINT(199.981201 82.9152985) 16469 POINT(594.804749 272.679138) 16470 POINT(711.899109 32.9991112) 16471 POINT(670.691162 908.626709) 16472 POINT(368.123413 701.643311) 16473 POINT(958.839478 525.40448) 16474 POINT(801.630188 634.057007) 16475 POINT(983.105957 497.510193) 16476 POINT(27.3978939 9.98895073) 16477 POINT(355.738434 188.169998) 16478 POINT(233.772232 191.128906) 16479 POINT(371.239014 983.508545) 16480 POINT(204.871109 728.39801) 16481 POINT(542.619812 773.568176) 16482 POINT(190.726349 814.629883) 16483 POINT(73.4313889 744.28949) 16484 POINT(79.8701782 544.034363) 16485 POINT(564.80896 88.2840347) 16486 POINT(862.609497 346.15564) 16487 POINT(123.499374 87.5703659) 16488 POINT(177.478699 795.079651) 16489 POINT(359.910645 78.7593765) 16490 POINT(736.646851 741.322083) 16491 POINT(518.296814 706.444336) 16492 POINT(359.820343 601.681091) 16493 POINT(466.011322 995.370056) 16494 POINT(394.998932 289.527649) 16495 POINT(365.217133 533.556519) 16496 POINT(356.005402 933.325134) 16497 POINT(266.538605 129.785233) 16498 POINT(501.841217 364.02829) 16499 POINT(386.00769 878.194336) 16500 POINT(865.560547 642.451294) 16501 POINT(568.560242 584.279602) 16502 POINT(407.582031 326.378815) 16503 POINT(95.6535034 950.082642) 16504 POINT(720.358398 65.4122467) 16505 POINT(81.8139191 17.1207561) 16506 POINT(201.427032 671.20874) 16507 POINT(823.718323 874.649902) 16508 POINT(196.506958 394.422882) 16509 POINT(542.517639 74.7554474) 16510 POINT(103.067047 490.464874) 16511 POINT(500.415375 86.7590103) 16512 POINT(330.35675 657.931824) 16513 POINT(809.017029 269.370636) 16514 POINT(800.087891 860.666443) 16515 POINT(790.812256 553.372864) 16516 POINT(11.7262774 811.887329) 16517 POINT(245.584061 389.505768) 16518 POINT(709.769714 812.383423) 16519 POINT(727.956909 620.351257) 16520 POINT(702.643616 140.657852) 16521 POINT(106.190559 141.745224) 16522 POINT(172.264908 128.061539) 16523 POINT(469.345581 404.55191) 16524 POINT(861.346252 893.908447) 16525 POINT(431.835876 613.120972) 16526 POINT(266.713226 332.483643) 16527 POINT(181.034897 559.635437) 16528 POINT(538.977478 844.52124) 16529 POINT(183.017456 316.70694) 16530 POINT(282.673065 889.568176) 16531 POINT(339.834534 932.450684) 16532 POINT(160.361191 242.688187) 16533 POINT(943.189941 36.9888153) 16534 POINT(876.318787 799.87262) 16535 POINT(936.398804 96.6027451) 16536 POINT(200.434814 462.594177) 16537 POINT(549.566895 426.943359) 16538 POINT(594.17334 505.08139) 16539 POINT(160.668427 0.78358233) 16540 POINT(324.363373 490.64566) 16541 POINT(434.376251 325.364471) 16542 POINT(756.717163 248.923645) 16543 POINT(155.99707 1.67066205) 16544 POINT(572.053589 287.990936) 16545 POINT(292.68927 60.823143) 16546 POINT(660.032166 818.378906) 16547 POINT(339.429413 364.676331) 16548 POINT(336.732544 975.116272) 16549 POINT(932.200134 587.751465) 16550 POINT(675.713623 894.693542) 16551 POINT(602.980652 910.556946) 16552 POINT(212.45076 732.591248) 16553 POINT(805.840942 160.49115) 16554 POINT(107.599159 80.6451416) 16555 POINT(434.400299 861.867249) 16556 POINT(266.813812 289.576141) 16557 POINT(779.875366 392.749939) 16558 POINT(598.43689 38.6548195) 16559 POINT(625.785339 100.472183) 16560 POINT(932.943848 880.492737) 16561 POINT(148.120972 972.759033) 16562 POINT(470.434875 73.7632828) 16563 POINT(774.541626 985.805237) 16564 POINT(508.615601 590.299133) 16565 POINT(767.209412 8.52865791) 16566 POINT(630.702881 926.148987) 16567 POINT(223.573822 603.287598) 16568 POINT(200.708191 80.0988312) 16569 POINT(458.300079 962.94751) 16570 POINT(575.91925 499.781403) 16571 POINT(436.218903 813.301392) 16572 POINT(759.55896 787.352051) 16573 POINT(497.421722 405.076508) 16574 POINT(590.125732 746.967285) 16575 POINT(56.3187408 753.334106) 16576 POINT(10.5008402 828.747986) 16577 POINT(99.6237183 351.836182) 16578 POINT(445.372314 952.959412) 16579 POINT(64.9621506 509.389893) 16580 POINT(8.80944538 998.834351) 16581 POINT(291.37674 803.390198) 16582 POINT(787.006287 220.465286) 16583 POINT(512.808472 517.489136) 16584 POINT(119.483139 453.790466) 16585 POINT(461.170319 185.87822) 16586 POINT(913.718384 40.8026924) 16587 POINT(280.537842 882.054382) 16588 POINT(54.7224693 897.268982) 16589 POINT(180.012695 806.754089) 16590 POINT(847.029846 456.61734) 16591 POINT(199.856155 205.207031) 16592 POINT(789.672241 344.019745) 16593 POINT(591.545898 100.834671) 16594 POINT(425.725037 470.4888) 16595 POINT(653.61554 709.476685) 16596 POINT(320.934113 827.050232) 16597 POINT(785.747437 399.268921) 16598 POINT(657.803772 34.4169426) 16599 POINT(465.993774 406.149841) 16600 POINT(432.553345 735.363342) 16601 POINT(90.6965103 188.986069) 16602 POINT(715.8479 167.093628) 16603 POINT(492.309631 812.463623) 16604 POINT(990.627869 821.85498) 16605 POINT(143.642548 346.784882) 16606 POINT(771.267578 489.03009) 16607 POINT(822.932312 253.074234) 16608 POINT(800.384155 304.740936) 16609 POINT(935.619263 630.076538) 16610 POINT(328.712708 740.022888) 16611 POINT(926.878296 94.708313) 16612 POINT(728.509033 900.923401) 16613 POINT(763.107056 785.395935) 16614 POINT(844.004822 649.106812) 16615 POINT(378.069305 357.631134) 16616 POINT(618.721924 75.9946365) 16617 POINT(165.753922 996.147217) 16618 POINT(187.265869 864.055664) 16619 POINT(30.8599472 23.5419941) 16620 POINT(510.017792 273.115967) 16621 POINT(480.921906 32.6514397) 16622 POINT(947.489868 515.657898) 16623 POINT(641.32489 16.7341766) 16624 POINT(804.705444 391.798645) 16625 POINT(603.835815 390.415192) 16626 POINT(665.624634 391.405792) 16627 POINT(966.929138 273.83313) 16628 POINT(327.3125 327.652039) 16629 POINT(906.366455 906.641296) 16630 POINT(830.299683 623.902893) 16631 POINT(319.587738 537.153198) 16632 POINT(665.622253 955.454041) 16633 POINT(37.9910889 830.353821) 16634 POINT(873.658386 261.207764) 16635 POINT(395.753082 507.689606) 16636 POINT(791.554016 540.437317) 16637 POINT(509.228394 88.110817) 16638 POINT(464.321869 79.4953537) 16639 POINT(962.052429 775.989258) 16640 POINT(722.293152 196.474884) 16641 POINT(540.856506 535.131226) 16642 POINT(110.331871 522.833191) 16643 POINT(636.129639 512.620239) 16644 POINT(901.022766 674.885681) 16645 POINT(651.477966 310.761627) 16646 POINT(456.991486 710.531677) 16647 POINT(569.728638 244.686859) 16648 POINT(51.8043098 463.872559) 16649 POINT(851.503845 27.5628223) 16650 POINT(692.842163 39.4436913) 16651 POINT(314.688629 170.812408) 16652 POINT(494.599213 906.141785) 16653 POINT(113.388397 414.894989) 16654 POINT(161.585754 26.7504177) 16655 POINT(532.404358 374.240662) 16656 POINT(294.119385 801.043518) 16657 POINT(995.95105 210.734329) 16658 POINT(618.580322 688.187561) 16659 POINT(493.436951 982.181152) 16660 POINT(160.139908 747.611206) 16661 POINT(914.882935 549.553467) 16662 POINT(567.610046 927.327026) 16663 POINT(506.343842 789.251587) 16664 POINT(717.101868 306.167694) 16665 POINT(572.040771 829.451294) 16666 POINT(766.948486 123.445099) 16667 POINT(513.429565 113.846817) 16668 POINT(617.279297 908.703491) 16669 POINT(482.890381 58.3175926) 16670 POINT(303.304962 348.671783) 16671 POINT(96.0015182 688.489746) 16672 POINT(984.47937 332.023315) 16673 POINT(374.468414 976.671692) 16674 POINT(598.065186 419.529755) 16675 POINT(42.8471642 198.697296) 16676 POINT(844.189392 462.695099) 16677 POINT(465.490417 833.913269) 16678 POINT(332.306396 293.635834) 16679 POINT(453.033661 679.619873) 16680 POINT(521.281372 29.124506) 16681 POINT(285.739563 555.077576) 16682 POINT(555.388062 159.251266) 16683 POINT(67.7614594 355.690582) 16684 POINT(467.827911 953.618347) 16685 POINT(743.62915 176.786774) 16686 POINT(176.489655 933.532532) 16687 POINT(155.888168 665.745422) 16688 POINT(621.280762 986.087646) 16689 POINT(608.839478 853.942261) 16690 POINT(629.286926 784.746521) 16691 POINT(813.8703 154.554535) 16692 POINT(187.206635 321.08194) 16693 POINT(441.187378 442.803192) 16694 POINT(747.02887 724.379822) 16695 POINT(983.254639 631.427979) 16696 POINT(690.971741 971.133362) 16697 POINT(267.394989 651.449036) 16698 POINT(788.597595 276.984894) 16699 POINT(837.482788 497.539948) 16700 POINT(249.211166 771.930664) 16701 POINT(984.18158 15.2245026) 16702 POINT(115.703209 728.77002) 16703 POINT(444.655396 425.837891) 16704 POINT(274.614136 28.6298466) 16705 POINT(549.110291 502.617798) 16706 POINT(237.187851 480.354401) 16707 POINT(774.036377 640.882996) 16708 POINT(246.502792 977.649048) 16709 POINT(509.879791 386.12381) 16710 POINT(808.480469 584.77356) 16711 POINT(181.458618 890.692566) 16712 POINT(754.875793 434.58371) 16713 POINT(318.257965 122.995949) 16714 POINT(702.567139 638.734192) 16715 POINT(482.42688 828.633179) 16716 POINT(757.034546 226.416214) 16717 POINT(176.613281 382.391907) 16718 POINT(453.410248 813.282104) 16719 POINT(601.595642 930.63855) 16720 POINT(873.604858 264.985321) 16721 POINT(873.006653 28.2696209) 16722 POINT(213.570587 959.460327) 16723 POINT(573.432739 261.503784) 16724 POINT(594.711975 408.717682) 16725 POINT(175.065109 821.49231) 16726 POINT(864.857178 405.1987) 16727 POINT(361.262543 373.733826) 16728 POINT(467.262238 580.91394) 16729 POINT(873.365845 839.951538) 16730 POINT(74.1492538 271.591125) 16731 POINT(560.514771 373.400024) 16732 POINT(690.730408 965.420898) 16733 POINT(491.817047 132.120987) 16734 POINT(896.105774 879.879395) 16735 POINT(556.888367 719.686279) 16736 POINT(61.5461464 484.309662) 16737 POINT(15.5302715 917.302002) 16738 POINT(990.297485 94.8776016) 16739 POINT(121.272667 638.28186) 16740 POINT(875.119568 177.21994) 16741 POINT(725.936157 724.927429) 16742 POINT(642.368042 256.234497) 16743 POINT(740.650208 123.504967) 16744 POINT(219.739777 548.317932) 16745 POINT(378.403931 225.638519) 16746 POINT(557.148804 685.84613) 16747 POINT(207.839478 380.017731) 16748 POINT(78.0270767 424.356476) 16749 POINT(509.38205 148.452621) 16750 POINT(826.225403 627.893982) 16751 POINT(122.817345 212.219986) 16752 POINT(789.313354 376.113129) 16753 POINT(618.085876 601.191589) 16754 POINT(563.271301 877.398926) 16755 POINT(994.4953 307.884918) 16756 POINT(720.271912 295.522583) 16757 POINT(332.016113 315.440735) 16758 POINT(447.535858 283.844604) 16759 POINT(574.204834 582.327698) 16760 POINT(441.311859 292.107452) 16761 POINT(436.09848 822.661438) 16762 POINT(819.194336 778.338867) 16763 POINT(900.781494 750.373291) 16764 POINT(312.699097 674.852051) 16765 POINT(821.994446 334.680664) 16766 POINT(29.8373795 565.944275) 16767 POINT(292.018677 75.6171494) 16768 POINT(147.059555 419.451233) 16769 POINT(997.139648 149.633194) 16770 POINT(467.197174 649.225159) 16771 POINT(178.396606 809.948669) 16772 POINT(533.867065 185.90654) 16773 POINT(782.324707 733.533508) 16774 POINT(45.2797661 904.720093) 16775 POINT(242.372879 181.034103) 16776 POINT(486.71283 647.731018) 16777 POINT(222.140518 238.005859) 16778 POINT(979.39093 520.965271) 16779 POINT(800.155396 911.431641) 16780 POINT(305.598663 621.562012) 16781 POINT(534.369385 106.302429) 16782 POINT(350.115051 724.856262) 16783 POINT(742.760498 160.238937) 16784 POINT(934.192261 244.771713) 16785 POINT(132.408951 592.591858) 16786 POINT(301.125824 372.550659) 16787 POINT(639.29187 466.648529) 16788 POINT(635.927124 238.703064) 16789 POINT(369.075714 473.600769) 16790 POINT(712.778564 161.778595) 16791 POINT(797.759277 744.514709) 16792 POINT(513.025452 116.448898) 16793 POINT(670.641418 967.043335) 16794 POINT(846.753662 934.341003) 16795 POINT(177.388031 628.010498) 16796 POINT(248.968414 46.629982) 16797 POINT(156.714066 887.875366) 16798 POINT(766.59137 780.740784) 16799 POINT(51.2537003 500.681366) 16800 POINT(467.631622 968.417725) 16801 POINT(674.583191 371.261017) 16802 POINT(304.778076 433.304749) 16803 POINT(229.209229 353.677246) 16804 POINT(271.251221 468.085846) 16805 POINT(415.905853 70.2406921) 16806 POINT(969.11554 739.820007) 16807 POINT(468.453949 213.672867) 16808 POINT(844.579529 873.66449) 16809 POINT(929.119263 596.442749) 16810 POINT(459.422913 846.620911) 16811 POINT(422.727539 256.961212) 16812 POINT(494.0354 1.80927491) 16813 POINT(392.722168 113.78009) 16814 POINT(400.193939 88.2271805) 16815 POINT(110.994041 883.4328) 16816 POINT(128.349579 999.787231) 16817 POINT(472.576111 417.926941) 16818 POINT(485.650513 480.049255) 16819 POINT(422.614502 962.629028) 16820 POINT(981.150574 765.51947) 16821 POINT(950.634644 538.470947) 16822 POINT(480.704559 141.338226) 16823 POINT(618.389282 183.785339) 16824 POINT(326.131836 499.911682) 16825 POINT(583.016785 885.988037) 16826 POINT(424.660706 937.474792) 16827 POINT(135.483994 942.755859) 16828 POINT(41.8863106 48.2395592) 16829 POINT(322.099396 232.889359) 16830 POINT(944.062134 123.853249) 16831 POINT(259.135345 480.937561) 16832 POINT(146.190552 821.148621) 16833 POINT(120.309258 364.739716) 16834 POINT(796.902405 798.032593) 16835 POINT(385.167328 54.7896805) 16836 POINT(838.464111 250.864395) 16837 POINT(22.5557175 67.8508911) 16838 POINT(642.497192 522.488953) 16839 POINT(664.729248 759.269165) 16840 POINT(164.327332 934.498962) 16841 POINT(149.750473 229.302124) 16842 POINT(559.628235 567.219727) 16843 POINT(796.300964 254.480743) 16844 POINT(147.624069 843.879639) 16845 POINT(477.620453 217.143707) 16846 POINT(20.144474 839.611389) 16847 POINT(609.894165 52.0661354) 16848 POINT(122.973175 240.112885) 16849 POINT(23.0265656 381.389984) 16850 POINT(866.024048 718.399963) 16851 POINT(874.508606 206.333405) 16852 POINT(45.8556404 221.137589) 16853 POINT(164.25943 470.510162) 16854 POINT(334.971375 689.214294) 16855 POINT(452.289246 224.85466) 16856 POINT(757.441589 151.809219) 16857 POINT(342.290771 993.476807) 16858 POINT(332.944641 891.108154) 16859 POINT(521.458679 764.236023) 16860 POINT(537.80542 578.596619) 16861 POINT(316.717194 74.0331039) 16862 POINT(961.578247 426.650848) 16863 POINT(94.9853516 208.991135) 16864 POINT(793.873352 614.761414) 16865 POINT(483.140381 141.692352) 16866 POINT(774.286133 562.559814) 16867 POINT(473.078888 544.925354) 16868 POINT(397.39212 196.930023) 16869 POINT(497.98642 883.083435) 16870 POINT(356.901215 753.52301) 16871 POINT(584.988037 33.1649132) 16872 POINT(13.4044676 60.2560577) 16873 POINT(602.273743 237.609268) 16874 POINT(607.027283 758.772705) 16875 POINT(399.20816 66.9416046) 16876 POINT(741.160156 756.911133) 16877 POINT(587.5979 862.984802) 16878 POINT(520.849548 989.136658) 16879 POINT(711.089417 250.46991) 16880 POINT(527.088623 551.430664) 16881 POINT(305.608704 419.07489) 16882 POINT(386.970398 621.706482) 16883 POINT(652.968445 177.730667) 16884 POINT(103.403511 566.480103) 16885 POINT(986.512817 222.551697) 16886 POINT(33.9078178 949.927368) 16887 POINT(214.329865 608.701233) 16888 POINT(656.105042 123.896469) 16889 POINT(402.643829 310.244873) 16890 POINT(181.212952 898.826721) 16891 POINT(908.136597 741.549316) 16892 POINT(32.5909576 828.399231) 16893 POINT(89.8980408 715.657654) 16894 POINT(3.73512506 628.26416) 16895 POINT(474.350555 61.533287) 16896 POINT(61.7835693 575.152832) 16897 POINT(422.843475 810.974792) 16898 POINT(734.381775 671.499207) 16899 POINT(172.798218 810.829956) 16900 POINT(478.623413 327.40329) 16901 POINT(328.566345 895.989197) 16902 POINT(502.791779 112.03627) 16903 POINT(784.918701 468.235168) 16904 POINT(19.9776936 206.699539) 16905 POINT(819.827942 825.725708) 16906 POINT(635.660461 888.621582) 16907 POINT(917.564331 753.661255) 16908 POINT(490.455383 165.749985) 16909 POINT(329.86203 360.142365) 16910 POINT(329.025269 436.430481) 16911 POINT(581.906311 579.580444) 16912 POINT(984.316895 272.752716) 16913 POINT(39.150425 92.1404495) 16914 POINT(943.641479 521.897339) 16915 POINT(306.632294 60.0405998) 16916 POINT(993.611328 426.078278) 16917 POINT(998.773926 264.217346) 16918 POINT(171.646576 309.304291) 16919 POINT(237.003418 157.6064) 16920 POINT(832.869812 139.471527) 16921 POINT(875.440918 519.446045) 16922 POINT(976.034424 409.159912) 16923 POINT(769.972534 799.554626) 16924 POINT(667.128296 890.479614) 16925 POINT(570.056458 649.06842) 16926 POINT(514.027893 901.561707) 16927 POINT(280.448242 326.880188) 16928 POINT(442.749176 408.600861) 16929 POINT(794.700012 696.839722) 16930 POINT(221.261383 102.151688) 16931 POINT(404.921417 953.144653) 16932 POINT(189.455963 194.689056) 16933 POINT(932.140442 359.36441) 16934 POINT(855.753418 143.937439) 16935 POINT(166.053925 504.927185) 16936 POINT(487.190094 509.437134) 16937 POINT(147.521866 482.013458) 16938 POINT(578.970581 285.165253) 16939 POINT(945.462708 91.6124268) 16940 POINT(372.845825 46.3020554) 16941 POINT(773.614441 591.616882) 16942 POINT(85.8539734 221.596558) 16943 POINT(941.814209 509.478455) 16944 POINT(599.632385 513.02301) 16945 POINT(449.02951 829.974365) 16946 POINT(386.5 580.952393) 16947 POINT(287.477875 123.522942) 16948 POINT(955.759888 385.923553) 16949 POINT(353.058624 356.331482) 16950 POINT(89.2572021 207.954742) 16951 POINT(439.369141 690.193054) 16952 POINT(299.338867 172.477158) 16953 POINT(151.302094 272.316589) 16954 POINT(938.321838 810.3078) 16955 POINT(808.247009 85.1606903) 16956 POINT(72.8309097 620.155334) 16957 POINT(943.011292 389.439514) 16958 POINT(918.484192 29.1264248) 16959 POINT(845.61145 182.511948) 16960 POINT(323.080353 443.365845) 16961 POINT(584.076538 707.100891) 16962 POINT(455.499146 21.7328072) 16963 POINT(968.481567 195.195129) 16964 POINT(671.905334 305.328156) 16965 POINT(248.850525 298.164978) 16966 POINT(112.623871 200.406372) 16967 POINT(769.71582 631.299438) 16968 POINT(257.418976 988.022095) 16969 POINT(989.504211 409.498932) 16970 POINT(712.186035 857.586548) 16971 POINT(935.169983 646.711975) 16972 POINT(397.699463 910.884583) 16973 POINT(353.371338 976.484436) 16974 POINT(995.61676 26.1913471) 16975 POINT(168.87117 981.928223) 16976 POINT(616.120605 417.718811) 16977 POINT(826.743835 423.357391) 16978 POINT(776.202393 73.1296234) 16979 POINT(213.517517 859.266479) 16980 POINT(711.601379 541.31897) 16981 POINT(987.839844 575.335022) 16982 POINT(35.8788452 204.747864) 16983 POINT(745.998535 186.46492) 16984 POINT(757.228271 276.602386) 16985 POINT(772.172424 743.839111) 16986 POINT(570.714722 274.867554) 16987 POINT(526.261658 163.614883) 16988 POINT(267.148346 745.581055) 16989 POINT(180.306061 562.727539) 16990 POINT(599.296875 29.2324696) 16991 POINT(682.734314 922.611694) 16992 POINT(284.327301 21.2923927) 16993 POINT(90.9949799 951.296997) 16994 POINT(214.054321 194.599457) 16995 POINT(428.644226 141.780472) 16996 POINT(810.712341 792.848816) 16997 POINT(581.95575 658.92041) 16998 POINT(677.626892 626.370667) 16999 POINT(820.961426 673.060608) 17000 POINT(826.533508 500.054596) 17001 POINT(306.034149 206.537064) 17002 POINT(344.703369 65.5786514) 17003 POINT(397.321533 95.1101151) 17004 POINT(126.924171 43.5775604) 17005 POINT(22.2836075 681.810791) 17006 POINT(424.326599 924.200684) 17007 POINT(656.168762 762.916504) 17008 POINT(341.73584 685.452393) 17009 POINT(339.481781 767.627136) 17010 POINT(888.481445 917.191467) 17011 POINT(381.493652 362.977997) 17012 POINT(798.367371 294.730865) 17013 POINT(93.8679504 587.699585) 17014 POINT(579.853088 290.288788) 17015 POINT(755.920593 202.845581) 17016 POINT(337.624908 664.384033) 17017 POINT(553.3927 438.40686) 17018 POINT(974.962463 854.56012) 17019 POINT(54.5343361 464.792511) 17020 POINT(799.07373 228.100067) 17021 POINT(817.529236 242.585968) 17022 POINT(118.457024 31.821537) 17023 POINT(466.717316 435.604736) 17024 POINT(655.038086 139.410782) 17025 POINT(364.702698 608.855713) 17026 POINT(960.153992 639.476318) 17027 POINT(254.402435 287.962494) 17028 POINT(191.351196 340.618317) 17029 POINT(688.652771 709.147949) 17030 POINT(698.505066 198.982086) 17031 POINT(22.5281296 333.608887) 17032 POINT(708.15271 945.283447) 17033 POINT(360.551544 797.475403) 17034 POINT(762.470276 139.071777) 17035 POINT(351.116608 794.479492) 17036 POINT(445.475403 985.5755) 17037 POINT(655.457336 84.5654526) 17038 POINT(748.36084 383.016327) 17039 POINT(418.277618 45.1918106) 17040 POINT(326.059296 334.572449) 17041 POINT(89.692482 855.842529) 17042 POINT(969.029297 458.63147) 17043 POINT(529.574036 968.771545) 17044 POINT(151.776443 403.64035) 17045 POINT(829.990906 174.341522) 17046 POINT(269.856659 450.395203) 17047 POINT(661.5672 537.217468) 17048 POINT(590.244385 36.3082733) 17049 POINT(955.76947 245.487701) 17050 POINT(419.306671 824.956482) 17051 POINT(225.994659 979.485718) 17052 POINT(144.65184 872.595886) 17053 POINT(982.634521 537.278809) 17054 POINT(691.386658 404.479553) 17055 POINT(265.912628 931.697449) 17056 POINT(312.516266 341.538544) 17057 POINT(888.243164 47.2579765) 17058 POINT(223.17601 536.682495) 17059 POINT(206.272385 777.854614) 17060 POINT(308.036896 354.694458) 17061 POINT(120.895981 686.766602) 17062 POINT(352.652618 816.093384) 17063 POINT(98.7786713 984.070801) 17064 POINT(47.9032822 719.707703) 17065 POINT(716.747253 613.318115) 17066 POINT(420.368195 547.959595) 17067 POINT(24.5138683 605.304016) 17068 POINT(581.864075 270.538788) 17069 POINT(703.273987 483.535645) 17070 POINT(453.094269 514.412476) 17071 POINT(947.69281 300.803253) 17072 POINT(787.05658 719.765747) 17073 POINT(424.656158 21.9474239) 17074 POINT(738.380066 501.900909) 17075 POINT(850.046936 132.957199) 17076 POINT(939.042175 278.394897) 17077 POINT(288.974701 5.03597975) 17078 POINT(546.034485 479.573944) 17079 POINT(417.718445 143.96106) 17080 POINT(722.688782 159.912277) 17081 POINT(707.645386 745.288147) 17082 POINT(155.864365 280.204742) 17083 POINT(901.179138 205.692596) 17084 POINT(352.486725 187.843765) 17085 POINT(674.26123 426.594971) 17086 POINT(910.571472 128.413147) 17087 POINT(23.569416 920.416443) 17088 POINT(734.579102 859.882019) 17089 POINT(513.025879 190.201889) 17090 POINT(228.53154 385.358002) 17091 POINT(973.988464 413.41098) 17092 POINT(21.7333965 386.677307) 17093 POINT(816.218018 699.511169) 17094 POINT(383.248199 434.734558) 17095 POINT(589.646729 703.340393) 17096 POINT(487.677185 419.677917) 17097 POINT(485.633392 22.3901196) 17098 POINT(384.595337 721.825989) 17099 POINT(804.426575 962.168335) 17100 POINT(378.664429 409.945374) 17101 POINT(94.7108002 61.2404671) 17102 POINT(481.531799 575.5224) 17103 POINT(321.278992 383.639679) 17104 POINT(287.835785 798.658569) 17105 POINT(496.054413 433.935089) 17106 POINT(646.792847 592.635254) 17107 POINT(252.016678 567.830444) 17108 POINT(641.880676 530.059875) 17109 POINT(713.323669 662.830933) 17110 POINT(901.132324 44.4974327) 17111 POINT(160.447845 298.993713) 17112 POINT(89.7044678 698.885681) 17113 POINT(676.969788 764.41748) 17114 POINT(488.010651 977.756104) 17115 POINT(543.426575 344.906403) 17116 POINT(939.249634 496.862244) 17117 POINT(290.054565 848.762268) 17118 POINT(719.193787 424.426331) 17119 POINT(289.279175 438.147583) 17120 POINT(301.314911 6.63797188) 17121 POINT(643.397217 135.766769) 17122 POINT(777.548157 410.69043) 17123 POINT(64.1986847 913.215576) 17124 POINT(268.161163 806.560547) 17125 POINT(938.549988 874.346313) 17126 POINT(885.387817 259.589722) 17127 POINT(894.582031 568.118225) 17128 POINT(279.889679 795.998169) 17129 POINT(822.613831 11.0010529) 17130 POINT(25.0493755 19.6712894) 17131 POINT(436.917908 195.046387) 17132 POINT(813.021729 128.442383) 17133 POINT(390.66098 95.8449173) 17134 POINT(832.941284 719.814941) 17135 POINT(556.71582 881.968872) 17136 POINT(663.405151 648.418518) 17137 POINT(69.5405655 837.012024) 17138 POINT(379.134308 549.880737) 17139 POINT(874.098877 625.46106) 17140 POINT(389.518829 768.270264) 17141 POINT(961.100769 918.461365) 17142 POINT(291.629425 997.480408) 17143 POINT(876.067749 14.8089275) 17144 POINT(932.440063 292.172119) 17145 POINT(993.36853 181.551758) 17146 POINT(87.7614746 433.091827) 17147 POINT(44.0733757 748.404297) 17148 POINT(35.1868744 297.264801) 17149 POINT(404.98587 37.3614502) 17150 POINT(634.765259 628.897034) 17151 POINT(200.421066 525.675232) 17152 POINT(846.841248 815.595093) 17153 POINT(671.210022 24.5772705) 17154 POINT(377.352509 221.141388) 17155 POINT(938.159973 421.27124) 17156 POINT(15.8051958 725.583069) 17157 POINT(969.041748 756.880737) 17158 POINT(342.217468 181.473389) 17159 POINT(566.49585 192.9505) 17160 POINT(651.737061 958.027161) 17161 POINT(674.554321 114.109421) 17162 POINT(957.710327 949.639282) 17163 POINT(477.396332 100.590965) 17164 POINT(767.160034 849.197449) 17165 POINT(187.254166 423.073944) 17166 POINT(411.486511 998.071167) 17167 POINT(218.943176 720.976318) 17168 POINT(197.430817 232.355865) 17169 POINT(584.309998 546.762085) 17170 POINT(609.76178 248.32103) 17171 POINT(847.115601 931.482117) 17172 POINT(541.70166 649.081909) 17173 POINT(221.747849 254.763107) 17174 POINT(798.871765 939.956482) 17175 POINT(320.074585 705.515381) 17176 POINT(367.70401 883.070923) 17177 POINT(420.214783 983.097961) 17178 POINT(563.156555 264.449707) 17179 POINT(797.648865 613.536743) 17180 POINT(779.62738 871.611328) 17181 POINT(799.673096 108.240204) 17182 POINT(222.759842 319.753479) 17183 POINT(713.607117 955.720947) 17184 POINT(461.062408 933.735596) 17185 POINT(660.394653 157.967438) 17186 POINT(620.753174 715.673157) 17187 POINT(399.433563 265.788666) 17188 POINT(473.922668 169.08078) 17189 POINT(46.8822174 960.781067) 17190 POINT(911.06604 465.80719) 17191 POINT(855.706177 520.268127) 17192 POINT(419.454529 827.780212) 17193 POINT(776.852844 595.986633) 17194 POINT(237.023224 638.743347) 17195 POINT(990.810791 763.422424) 17196 POINT(48.8903465 429.25061) 17197 POINT(769.176636 148.126587) 17198 POINT(124.859634 609.36084) 17199 POINT(276.606659 15.3045521) 17200 POINT(48.9948311 416.525116) 17201 POINT(462.670349 692.310425) 17202 POINT(7.40574551 650.503723) 17203 POINT(306.790955 268.879211) 17204 POINT(521.700439 172.82341) 17205 POINT(981.906006 641.087158) 17206 POINT(540.204468 35.9544411) 17207 POINT(186.094269 101.875938) 17208 POINT(627.222595 298.338623) 17209 POINT(976.699036 568.857849) 17210 POINT(275.64209 787.550476) 17211 POINT(27.0704651 930.016296) 17212 POINT(966.490845 147.759644) 17213 POINT(738.700989 896.427307) 17214 POINT(820.246338 692.45105) 17215 POINT(86.1276627 210.482925) 17216 POINT(541.427612 762.836792) 17217 POINT(281.528809 366.144775) 17218 POINT(816.123352 240.975189) 17219 POINT(231.580109 967.975525) 17220 POINT(550.550842 499.33783) 17221 POINT(560.119812 67.1861115) 17222 POINT(959.578247 691.096436) 17223 POINT(503.883087 860.425659) 17224 POINT(852.573792 844.030396) 17225 POINT(900.51001 880.880981) 17226 POINT(798.281189 552.593384) 17227 POINT(501.846161 627.417786) 17228 POINT(662.117981 144.865524) 17229 POINT(12.991621 607.589905) 17230 POINT(232.914383 402.018921) 17231 POINT(208.502655 171.592133) 17232 POINT(929.352844 236.32666) 17233 POINT(669.612 709.487854) 17234 POINT(490.052979 89.0667725) 17235 POINT(656.446106 711.77948) 17236 POINT(899.320435 231.947495) 17237 POINT(241.236008 557.713562) 17238 POINT(830.104797 75.5751724) 17239 POINT(524.827393 416.34668) 17240 POINT(546.897583 77.2904282) 17241 POINT(809.899475 307.692413) 17242 POINT(407.453644 860.324646) 17243 POINT(358.839294 676.206909) 17244 POINT(939.795349 809.217285) 17245 POINT(498.941376 43.0466957) 17246 POINT(509.521423 185.948654) 17247 POINT(607.396606 709.174805) 17248 POINT(94.688324 851.07251) 17249 POINT(996.40802 626.354187) 17250 POINT(867.283997 998.690735) 17251 POINT(85.8551636 500.825623) 17252 POINT(560.514832 88.4384003) 17253 POINT(986.482605 774.120728) 17254 POINT(851.847107 937.406677) 17255 POINT(787.99408 181.740509) 17256 POINT(788.181213 916.410461) 17257 POINT(349.19928 233.681915) 17258 POINT(150.007919 465.122009) 17259 POINT(195.118515 817.000122) 17260 POINT(327.350555 926.881287) 17261 POINT(540.459717 581.353088) 17262 POINT(946.298645 624.622375) 17263 POINT(360.023865 241.012604) 17264 POINT(28.6918297 413.108368) 17265 POINT(522.378235 83.9946671) 17266 POINT(729.829102 798.965332) 17267 POINT(79.6947556 9.24051094) 17268 POINT(723.908569 408.882629) 17269 POINT(978.238342 270.265503) 17270 POINT(591.315002 788.467957) 17271 POINT(412.99469 758.116089) 17272 POINT(306.06424 550.901855) 17273 POINT(316.852448 343.185455) 17274 POINT(278.998932 977.638855) 17275 POINT(648.235229 265.41272) 17276 POINT(739.1651 655.492798) 17277 POINT(147.873596 332.231445) 17278 POINT(341.742432 358.685272) 17279 POINT(580.396667 285.56488) 17280 POINT(288.656586 534.61499) 17281 POINT(492.615875 931.042358) 17282 POINT(403.38623 702.643433) 17283 POINT(618.90448 797.907776) 17284 POINT(183.435501 241.118134) 17285 POINT(984.19873 295.909943) 17286 POINT(984.54718 224.840103) 17287 POINT(814.24939 650.531982) 17288 POINT(995.175232 629.514221) 17289 POINT(706.33728 690.583862) 17290 POINT(316.34079 678.311462) 17291 POINT(365.370361 708.427124) 17292 POINT(252.206024 846.063904) 17293 POINT(121.859116 754.521667) 17294 POINT(275.087341 926.966492) 17295 POINT(549.604431 521.813721) 17296 POINT(192.888153 120.767006) 17297 POINT(750.035583 344.564667) 17298 POINT(907.881592 699.698059) 17299 POINT(303.138519 219.039673) 17300 POINT(107.361435 23.8846054) 17301 POINT(866.07373 354.123505) 17302 POINT(15.9750032 407.307251) 17303 POINT(872.282166 798.144043) 17304 POINT(416.748871 170.9104) 17305 POINT(516.622559 649.308044) 17306 POINT(916.240601 616.0224) 17307 POINT(54.5122757 242.167404) 17308 POINT(495.338531 212.447495) 17309 POINT(571.904785 278.037872) 17310 POINT(810.56012 14.5566988) 17311 POINT(553.124817 915.515076) 17312 POINT(253.962463 829.236023) 17313 POINT(368.094482 406.021393) 17314 POINT(158.794357 486.06369) 17315 POINT(880.459229 512.154968) 17316 POINT(671.737122 367.615814) 17317 POINT(732.816589 12.5931635) 17318 POINT(73.0670547 202.01239) 17319 POINT(62.047142 421.160187) 17320 POINT(788.524658 696.998047) 17321 POINT(832.154175 239.750427) 17322 POINT(29.4135075 491.919922) 17323 POINT(117.666054 751.080505) 17324 POINT(151.920105 848.457825) 17325 POINT(329.305878 429.33136) 17326 POINT(127.415245 611.041565) 17327 POINT(925.165466 411.856323) 17328 POINT(350.265137 2.34995174) 17329 POINT(803.04425 306.129364) 17330 POINT(719.262329 427.533875) 17331 POINT(609.062073 591.462952) 17332 POINT(57.1330833 432.888031) 17333 POINT(238.38353 468.839294) 17334 POINT(476.75528 481.268982) 17335 POINT(38.2864494 684.200745) 17336 POINT(962.92688 88.9168396) 17337 POINT(672.373047 336.082397) 17338 POINT(868.079102 828.393982) 17339 POINT(366.093933 228.523056) 17340 POINT(75.6757355 592.646851) 17341 POINT(754.690063 961.35968) 17342 POINT(575.751465 578.891846) 17343 POINT(800.037476 694.519958) 17344 POINT(135.812012 571.908813) 17345 POINT(65.7146454 678.633179) 17346 POINT(602.96875 58.8153992) 17347 POINT(951.031494 24.6535454) 17348 POINT(308.655365 406.524811) 17349 POINT(524.02533 369.338074) 17350 POINT(687.642273 84.5290146) 17351 POINT(177.918915 676.065369) 17352 POINT(893.52594 665.682617) 17353 POINT(110.763969 251.978424) 17354 POINT(171.738937 923.208191) 17355 POINT(317.587067 538.755066) 17356 POINT(519.85437 740.737488) 17357 POINT(440.07431 487.062225) 17358 POINT(658.109802 132.009415) 17359 POINT(70.5600739 511.153595) 17360 POINT(188.350983 436.656647) 17361 POINT(412.828217 562.982056) 17362 POINT(627.81073 617.738342) 17363 POINT(98.1285553 703.094055) 17364 POINT(559.242676 575.357971) 17365 POINT(305.109711 382.549988) 17366 POINT(687.989685 939.507324) 17367 POINT(579.460327 205.906128) 17368 POINT(89.7805099 985.487061) 17369 POINT(163.436172 205.245956) 17370 POINT(273.735443 88.7882004) 17371 POINT(575.768494 120.339287) 17372 POINT(979.666626 605.71228) 17373 POINT(305.453003 116.841843) 17374 POINT(436.85257 724.429626) 17375 POINT(53.4960175 65.246048) 17376 POINT(395.745026 812.409546) 17377 POINT(57.8462296 495.913361) 17378 POINT(820.348511 114.622528) 17379 POINT(829.609314 703.431946) 17380 POINT(116.244919 497.644775) 17381 POINT(602.475037 25.854702) 17382 POINT(39.4881821 843.461975) 17383 POINT(19.4748726 915.806763) 17384 POINT(560.061462 869.654358) 17385 POINT(947.234741 161.361938) 17386 POINT(468.591949 676.66626) 17387 POINT(791.427307 130.947479) 17388 POINT(148.003906 425.559082) 17389 POINT(589.917358 599.952759) 17390 POINT(867.323914 849.179932) 17391 POINT(362.019012 974.409973) 17392 POINT(80.6365738 54.8402023) 17393 POINT(401.345795 231.941803) 17394 POINT(371.036377 436.800354) 17395 POINT(202.07486 840.603638) 17396 POINT(911.282532 772.141479) 17397 POINT(618.315491 246.392105) 17398 POINT(116.808266 404.631195) 17399 POINT(366.05777 209.768509) 17400 POINT(742.956543 149.253448) 17401 POINT(607.383545 555.915405) 17402 POINT(180.134079 387.082031) 17403 POINT(705.884216 533.572266) 17404 POINT(484.438538 118.672501) 17405 POINT(237.305908 469.794861) 17406 POINT(556.791321 247.29509) 17407 POINT(485.211761 295.070587) 17408 POINT(363.392944 454.91864) 17409 POINT(280.928467 592.755432) 17410 POINT(640.234375 988.295593) 17411 POINT(571.352234 412.250122) 17412 POINT(813.387512 904.833069) 17413 POINT(256.597076 255.809586) 17414 POINT(16.9326973 643.826233) 17415 POINT(949.349182 499.101685) 17416 POINT(926.856995 634.367065) 17417 POINT(514.659119 395.95639) 17418 POINT(430.392242 363.739777) 17419 POINT(776.388367 624.145752) 17420 POINT(897.505249 386.911804) 17421 POINT(176.386658 693.113953) 17422 POINT(449.168732 26.9877892) 17423 POINT(574.595703 113.560387) 17424 POINT(263.333282 507.008972) 17425 POINT(740.65979 945.517456) 17426 POINT(715.00177 364.658691) 17427 POINT(446.406982 634.538147) 17428 POINT(305.425598 773.319153) 17429 POINT(788.005432 118.915672) 17430 POINT(644.269958 756.180847) 17431 POINT(389.079376 264.223969) 17432 POINT(657.824341 806.016541) 17433 POINT(232.096237 240.250946) 17434 POINT(109.285622 573.721497) 17435 POINT(883.545044 500.563904) 17436 POINT(40.2640877 666.315125) 17437 POINT(995.570007 323.108643) 17438 POINT(935.520386 192.976456) 17439 POINT(937.691589 203.620712) 17440 POINT(38.2365494 149.622726) 17441 POINT(820.040283 810.074646) 17442 POINT(16.6714439 562.958191) 17443 POINT(675.286499 269.388336) 17444 POINT(23.7995377 188.8564) 17445 POINT(159.424393 596.239746) 17446 POINT(471.549103 533.056458) 17447 POINT(379.145203 432.864624) 17448 POINT(635.739746 730.743408) 17449 POINT(751.224365 558.442627) 17450 POINT(545.087097 972.556763) 17451 POINT(620.775024 973.117859) 17452 POINT(719.144165 425.469666) 17453 POINT(512.153137 656.443237) 17454 POINT(890.346558 85.9687271) 17455 POINT(738.611694 250.309036) 17456 POINT(262.130798 478.828125) 17457 POINT(862.507751 95.0717773) 17458 POINT(459.205414 226.928528) 17459 POINT(463.095245 943.108948) 17460 POINT(661.433716 56.0567551) 17461 POINT(447.945984 740.49823) 17462 POINT(476.495667 944.104309) 17463 POINT(929.217651 574.675232) 17464 POINT(598.733398 697.846558) 17465 POINT(497.835358 969.120056) 17466 POINT(875.669739 954.448181) 17467 POINT(665.805237 416.330719) 17468 POINT(916.069031 311.538391) 17469 POINT(736.095886 394.166748) 17470 POINT(133.649887 232.301361) 17471 POINT(405.683014 140.312637) 17472 POINT(141.363846 434.315918) 17473 POINT(843.47052 462.972351) 17474 POINT(658.332092 427.273773) 17475 POINT(722.000427 656.436401) 17476 POINT(734.040039 630.242371) 17477 POINT(959.411865 746.966797) 17478 POINT(754.28894 379.483276) 17479 POINT(563.38092 412.246368) 17480 POINT(695.895996 79.2764969) 17481 POINT(607.282837 856.790833) 17482 POINT(720.534302 587.653931) 17483 POINT(734.190308 62.2011795) 17484 POINT(923.863281 643.942871) 17485 POINT(728.327271 306.538666) 17486 POINT(818.783569 103.736382) 17487 POINT(246.101929 818.668701) 17488 POINT(568.954895 958.121155) 17489 POINT(217.872437 323.985596) 17490 POINT(691.464294 477.128021) 17491 POINT(253.269745 985.981567) 17492 POINT(709.665039 372.456604) 17493 POINT(471.485535 557.759033) 17494 POINT(305.80069 52.2341347) 17495 POINT(975.802429 148.530823) 17496 POINT(848.27124 912.184998) 17497 POINT(969.312195 867.76178) 17498 POINT(653.617981 135.025711) 17499 POINT(614.865479 234.853073) 17500 POINT(94.9400406 755.702515) 17501 POINT(853.583862 901.760315) 17502 POINT(246.080276 287.413513) 17503 POINT(767.619812 211.890518) 17504 POINT(417.227844 126.001472) 17505 POINT(787.288452 958.899841) 17506 POINT(908.398682 282.671875) 17507 POINT(261.339661 477.082642) 17508 POINT(1.51828539 902.131104) 17509 POINT(121.256493 720.010986) 17510 POINT(501.614716 60.8101692) 17511 POINT(643.434326 110.67292) 17512 POINT(598.129211 704.131531) 17513 POINT(542.422363 784.924927) 17514 POINT(976.884766 359.703552) 17515 POINT(787.731018 26.5913315) 17516 POINT(703.270203 682.429626) 17517 POINT(927.779114 598.613037) 17518 POINT(602.262695 565.95874) 17519 POINT(207.260147 717.499817) 17520 POINT(568.725342 751.471436) 17521 POINT(86.5521317 270.821747) 17522 POINT(292.796814 728.904907) 17523 POINT(699.915527 728.064331) 17524 POINT(324.082001 547.409363) 17525 POINT(437.374878 997.972778) 17526 POINT(721.827942 611.763855) 17527 POINT(895.746033 210.24408) 17528 POINT(946.521484 960.946045) 17529 POINT(437.758545 281.450684) 17530 POINT(294.696442 115.966499) 17531 POINT(123.267532 915.364136) 17532 POINT(419.632477 698.981323) 17533 POINT(759.904053 903.002136) 17534 POINT(125.635101 407.749237) 17535 POINT(767.066956 759.965637) 17536 POINT(185.404449 962.493347) 17537 POINT(789.913879 665.822388) 17538 POINT(874.446533 600.574951) 17539 POINT(950.102478 665.902954) 17540 POINT(912.501892 993.126587) 17541 POINT(16.7179718 239.00528) 17542 POINT(671.632812 902.589905) 17543 POINT(941.488342 719.884705) 17544 POINT(679.117371 937.247314) 17545 POINT(272.536377 53.3862267) 17546 POINT(388.965515 725.239807) 17547 POINT(164.182846 823.631287) 17548 POINT(900.145081 203.767319) 17549 POINT(588.459045 88.4077072) 17550 POINT(197.056335 367.334595) 17551 POINT(56.8840408 913.049255) 17552 POINT(716.113525 250.823959) 17553 POINT(636.730835 562.489075) 17554 POINT(692.305786 538.263) 17555 POINT(330.567993 513.298035) 17556 POINT(105.25927 526.445435) 17557 POINT(345.587555 993.484131) 17558 POINT(872.680481 164.724487) 17559 POINT(352.488556 866.352234) 17560 POINT(680.321228 109.61837) 17561 POINT(292.997101 831.16095) 17562 POINT(895.088745 637.258179) 17563 POINT(489.089874 118.638985) 17564 POINT(988.078308 450.713928) 17565 POINT(912.416992 880.240845) 17566 POINT(856.693909 896.014099) 17567 POINT(244.166138 88.5554276) 17568 POINT(142.350143 494.017792) 17569 POINT(376.687561 30.3835773) 17570 POINT(808.326538 529.624878) 17571 POINT(939.735229 947.150024) 17572 POINT(790.12439 380.148499) 17573 POINT(265.438721 388.609344) 17574 POINT(830.226135 366.700928) 17575 POINT(504.476715 739.975586) 17576 POINT(735.671204 872.437683) 17577 POINT(766.894348 769.997742) 17578 POINT(278.662476 876.385376) 17579 POINT(658.215881 54.1005363) 17580 POINT(28.9486065 628.884521) 17581 POINT(216.717712 644.106995) 17582 POINT(246.559311 62.5703583) 17583 POINT(410.820679 291.489777) 17584 POINT(962.300476 450.086578) 17585 POINT(234.548553 57.4067078) 17586 POINT(872.060974 435.788818) 17587 POINT(330.008179 948.444397) 17588 POINT(213.391251 673.586609) 17589 POINT(583.139954 756.12146) 17590 POINT(376.054443 77.4612503) 17591 POINT(474.94342 20.5155354) 17592 POINT(322.519135 956.366577) 17593 POINT(145.511719 719.23053) 17594 POINT(612.978821 773.090149) 17595 POINT(241.143005 153.283676) 17596 POINT(798.893799 789.756165) 17597 POINT(92.2936401 577.974792) 17598 POINT(478.82489 684.159363) 17599 POINT(617.081177 441.622559) 17600 POINT(413.159882 224.81485) 17601 POINT(394.441437 946.069031) 17602 POINT(736.048096 52.9094505) 17603 POINT(514.027527 843.542053) 17604 POINT(652.393188 451.283722) 17605 POINT(325.764343 513.923706) 17606 POINT(687.187256 989.82428) 17607 POINT(898.028809 19.4318352) 17608 POINT(888.991821 69.4932709) 17609 POINT(495.212067 870.528259) 17610 POINT(657.303223 480.578125) 17611 POINT(426.579834 33.5039406) 17612 POINT(546.329651 122.152306) 17613 POINT(250.626602 408.251862) 17614 POINT(429.921539 367.356415) 17615 POINT(172.411758 761.45874) 17616 POINT(431.734589 211.731888) 17617 POINT(3.67183208 338.667938) 17618 POINT(621.982117 208.878052) 17619 POINT(802.958069 36.875576) 17620 POINT(451.30014 319.197693) 17621 POINT(139.912003 801.610901) 17622 POINT(480.371796 604.109985) 17623 POINT(276.442474 538.556152) 17624 POINT(121.233261 261.132721) 17625 POINT(698.5177 285.025024) 17626 POINT(735.933533 776.580261) 17627 POINT(714.164612 172.024277) 17628 POINT(646.887451 74.8321152) 17629 POINT(932.835999 89.766243) 17630 POINT(960.417908 959.358704) 17631 POINT(613.443054 230.613983) 17632 POINT(853.32489 4.73994493) 17633 POINT(196.069122 371.370728) 17634 POINT(337.661865 395.188965) 17635 POINT(976.807495 935.052246) 17636 POINT(920.197144 178.637726) 17637 POINT(335.563934 369.90387) 17638 POINT(882.350769 571.919861) 17639 POINT(250.415207 45.1713486) 17640 POINT(698.928589 508.28302) 17641 POINT(924.721985 799.356323) 17642 POINT(918.039856 650.297485) 17643 POINT(188.299301 113.361) 17644 POINT(371.633179 826.735718) 17645 POINT(213.298187 9.65438557) 17646 POINT(60.6809387 909.34375) 17647 POINT(888.939026 606.597351) 17648 POINT(348.889404 783.398621) 17649 POINT(634.863831 457.204315) 17650 POINT(44.72155 433.96225) 17651 POINT(286.775909 562.362915) 17652 POINT(597.443665 557.837769) 17653 POINT(74.4670486 223.990707) 17654 POINT(475.913177 200.073822) 17655 POINT(323.681366 663.497314) 17656 POINT(39.1087036 24.7379131) 17657 POINT(870.032166 810.601807) 17658 POINT(998.285889 174.501266) 17659 POINT(874.015076 617.995911) 17660 POINT(268.567657 604.885803) 17661 POINT(697.79718 195.155396) 17662 POINT(422.31723 39.9845657) 17663 POINT(251.795471 511.999969) 17664 POINT(600.49054 670.865479) 17665 POINT(75.0960007 197.950882) 17666 POINT(77.1426544 680.122803) 17667 POINT(789.637268 367.69754) 17668 POINT(375.314728 41.1863022) 17669 POINT(203.050339 520.774109) 17670 POINT(21.726572 614.703125) 17671 POINT(546.492981 482.582611) 17672 POINT(528.236816 792.855652) 17673 POINT(267.243408 440.134155) 17674 POINT(778.231689 162.791077) 17675 POINT(674.86908 252.494827) 17676 POINT(657.408081 349.945587) 17677 POINT(116.206329 25.3114414) 17678 POINT(935.396179 229.120529) 17679 POINT(358.069427 88.0898361) 17680 POINT(215.021454 564.493164) 17681 POINT(445.55481 924.949829) 17682 POINT(310.54718 258.735291) 17683 POINT(514.151489 722.866333) 17684 POINT(988.922852 296.112183) 17685 POINT(229.872467 220.024948) 17686 POINT(355.950745 85.4996338) 17687 POINT(655.664795 680.602539) 17688 POINT(742.575562 817.983948) 17689 POINT(164.94426 576.374146) 17690 POINT(148.517426 112.007408) 17691 POINT(392.872559 921.031982) 17692 POINT(737.650696 229.432709) 17693 POINT(309.701782 946.574463) 17694 POINT(611.454163 501.58493) 17695 POINT(73.0400391 714.813232) 17696 POINT(876.213989 939.082336) 17697 POINT(950.249634 368.806152) 17698 POINT(582.272156 837.495972) 17699 POINT(959.508179 612.32782) 17700 POINT(368.4216 197.627075) 17701 POINT(947.600525 989.441895) 17702 POINT(963.632324 10.121501) 17703 POINT(171.650879 965.563721) 17704 POINT(156.835785 605.541321) 17705 POINT(476.253021 296.452057) 17706 POINT(471.828308 929.801453) 17707 POINT(330.449707 838.321167) 17708 POINT(809.914917 498.589874) 17709 POINT(112.506538 692.319031) 17710 POINT(432.279602 31.188612) 17711 POINT(484.300537 297.202148) 17712 POINT(234.928101 122.79129) 17713 POINT(689.412292 958.004822) 17714 POINT(662.225281 434.380005) 17715 POINT(425.801483 14.3229113) 17716 POINT(354.48999 550.523804) 17717 POINT(199.519882 863.617798) 17718 POINT(727.88092 58.7547188) 17719 POINT(952.652039 832.41449) 17720 POINT(841.106567 360.754669) 17721 POINT(297.085663 166.775314) 17722 POINT(766.641235 947.361023) 17723 POINT(974.428528 443.952881) 17724 POINT(110.568398 208.91127) 17725 POINT(628.166321 506.261627) 17726 POINT(624.480103 552.859741) 17727 POINT(621.881653 618.187927) 17728 POINT(37.7222176 545.701477) 17729 POINT(300.030182 246.43161) 17730 POINT(274.52182 760.44574) 17731 POINT(676.536133 473.414978) 17732 POINT(277.09848 909.231079) 17733 POINT(290.575775 156.911697) 17734 POINT(354.826385 978.831238) 17735 POINT(705.754883 136.561676) 17736 POINT(646.066345 411.053101) 17737 POINT(493.954956 922.502258) 17738 POINT(191.752075 717.292419) 17739 POINT(262.062347 758.137634) 17740 POINT(759.633728 264.325439) 17741 POINT(400.356323 869.786133) 17742 POINT(859.829895 684.940186) 17743 POINT(385.405884 257.821381) 17744 POINT(993.705261 461.039612) 17745 POINT(115.911415 969.80011) 17746 POINT(669.903076 597.794678) 17747 POINT(433.164825 364.436493) 17748 POINT(897.556152 995.324585) 17749 POINT(542.945435 130.22757) 17750 POINT(974.357239 559.903259) 17751 POINT(955.101929 483.793976) 17752 POINT(376.47525 351.117859) 17753 POINT(61.3007164 25.9224834) 17754 POINT(331.584747 96.6589966) 17755 POINT(929.082947 678.85553) 17756 POINT(321.976013 325.034515) 17757 POINT(978.219421 233.175354) 17758 POINT(881.399231 661.637573) 17759 POINT(178.273682 578.898804) 17760 POINT(879.669617 639.055603) 17761 POINT(347.280457 230.984848) 17762 POINT(248.935608 712.688049) 17763 POINT(201.65686 347.841888) 17764 POINT(213.838959 212.694244) 17765 POINT(496.142212 911.699097) 17766 POINT(416.640686 258.673737) 17767 POINT(967.09314 936.611084) 17768 POINT(452.948883 410.588684) 17769 POINT(748.351379 603.742981) 17770 POINT(782.281189 115.175621) 17771 POINT(439.784546 720.412415) 17772 POINT(481.771973 59.0093994) 17773 POINT(376.235474 250.749069) 17774 POINT(55.4648895 975.634277) 17775 POINT(748.880127 278.994629) 17776 POINT(383.505371 533.557129) 17777 POINT(779.905396 314.261017) 17778 POINT(735.992004 803.81958) 17779 POINT(931.097961 516.466431) 17780 POINT(629.199402 760.367432) 17781 POINT(251.650253 171.28067) 17782 POINT(664.423279 984.183044) 17783 POINT(132.618484 536.95929) 17784 POINT(562.013306 544.426453) 17785 POINT(455.516785 263.280914) 17786 POINT(538.572632 128.559509) 17787 POINT(999.139587 693.401917) 17788 POINT(330.260071 241.141571) 17789 POINT(928.622131 19.9081783) 17790 POINT(349.201477 430.85202) 17791 POINT(738.863525 8.90007305) 17792 POINT(185.895981 421.100403) 17793 POINT(493.7565 628.450012) 17794 POINT(404.012848 985.744324) 17795 POINT(4.3212781 733.691589) 17796 POINT(984.057312 842.989075) 17797 POINT(462.090973 49.244854) 17798 POINT(981.113464 543.1521) 17799 POINT(306.321777 145.373489) 17800 POINT(794.44104 745.931763) 17801 POINT(900.312439 287.5625) 17802 POINT(681.432312 757.037292) 17803 POINT(146.945251 826.073853) 17804 POINT(766.772156 200.050797) 17805 POINT(38.2664299 824.085205) 17806 POINT(234.154617 105.373299) 17807 POINT(438.384583 557.46814) 17808 POINT(780.295044 12.8368578) 17809 POINT(101.195686 278.971558) 17810 POINT(850.049988 307.463806) 17811 POINT(60.5700188 663.016602) 17812 POINT(951.17218 478.957397) 17813 POINT(464.920471 838.585815) 17814 POINT(214.645111 245.481689) 17815 POINT(602.896057 96.5250778) 17816 POINT(771.868713 82.4202957) 17817 POINT(52.8145943 709.328003) 17818 POINT(866.509399 109.008423) 17819 POINT(434.001465 827.108765) 17820 POINT(513.046082 112.549316) 17821 POINT(320.188263 879.600891) 17822 POINT(15.495019 724.518494) 17823 POINT(248.437592 102.864761) 17824 POINT(531.184265 39.0165138) 17825 POINT(4.69771719 768.80188) 17826 POINT(821.591003 806.167725) 17827 POINT(150.190765 989.036255) 17828 POINT(294.096283 406.216187) 17829 POINT(60.6584358 921.329102) 17830 POINT(777.122131 169.907852) 17831 POINT(150.409729 171.176422) 17832 POINT(261.695526 953.553772) 17833 POINT(840.646973 763.943237) 17834 POINT(113.343666 789.864624) 17835 POINT(680.320251 389.799011) 17836 POINT(240.819778 645.762146) 17837 POINT(639.534485 586.427246) 17838 POINT(87.0538483 944.079712) 17839 POINT(350.192261 30.2263622) 17840 POINT(470.612885 306.147308) 17841 POINT(174.102249 328.338318) 17842 POINT(593.664795 596.131348) 17843 POINT(721.358459 329.824738) 17844 POINT(488.909485 585.703369) 17845 POINT(435.647919 458.747925) 17846 POINT(800.244568 589.81366) 17847 POINT(300.664581 384.541382) 17848 POINT(780.263428 72.3277283) 17849 POINT(623.498535 221.217239) 17850 POINT(395.362366 195.965927) 17851 POINT(315.365967 637.635864) 17852 POINT(312.706451 446.903839) 17853 POINT(544.104736 782.856628) 17854 POINT(612.139404 43.7105484) 17855 POINT(81.3669739 815.723511) 17856 POINT(333.01828 726.810791) 17857 POINT(943.397278 374.169952) 17858 POINT(396.728607 492.769867) 17859 POINT(938.83252 340.726227) 17860 POINT(209.23497 802.45575) 17861 POINT(729.346741 335.485229) 17862 POINT(966.515991 59.197361) 17863 POINT(796.584351 91.0522995) 17864 POINT(684.318054 668.715271) 17865 POINT(937.172607 96.125946) 17866 POINT(530.65741 593.772461) 17867 POINT(300.327362 11.3030138) 17868 POINT(636.351135 980.71106) 17869 POINT(591.408203 504.077301) 17870 POINT(130.13504 530.472412) 17871 POINT(519.633423 477.030975) 17872 POINT(328.327515 822.134155) 17873 POINT(327.033997 596.7547) 17874 POINT(395.336334 671.848145) 17875 POINT(834.74408 509.551208) 17876 POINT(174.536484 864.369812) 17877 POINT(746.150024 857.582397) 17878 POINT(516.23175 658.796509) 17879 POINT(396.635101 905.532837) 17880 POINT(250.751266 415.96701) 17881 POINT(7.16703939 238.442474) 17882 POINT(873.544495 484.133087) 17883 POINT(132.420288 97.0759277) 17884 POINT(131.868256 214.532043) 17885 POINT(70.2518768 744.654907) 17886 POINT(588.878235 152.536652) 17887 POINT(773.052429 90.2038269) 17888 POINT(153.340729 196.918106) 17889 POINT(355.772491 177.002441) 17890 POINT(717.587891 863.847534) 17891 POINT(791.414734 143.179291) 17892 POINT(861.696594 898.619202) 17893 POINT(311.743958 704.414001) 17894 POINT(930.249084 902.368469) 17895 POINT(456.276611 940.777649) 17896 POINT(244.624908 579.567566) 17897 POINT(531.786011 301.273499) 17898 POINT(306.902893 751.729736) 17899 POINT(431.222015 896.628052) 17900 POINT(312.560944 651.071655) 17901 POINT(616.859741 724.920776) 17902 POINT(302.821106 823.043457) 17903 POINT(477.540863 872.960022) 17904 POINT(741.395142 487.421661) 17905 POINT(932.059082 631.764771) 17906 POINT(35.359848 583.488342) 17907 POINT(856.206421 45.5682831) 17908 POINT(579.876404 245.728058) 17909 POINT(773.990601 634.528992) 17910 POINT(788.537964 803.127441) 17911 POINT(966.444946 861.537659) 17912 POINT(475.475616 888.848022) 17913 POINT(234.7827 588.50177) 17914 POINT(35.2970886 99.678421) 17915 POINT(607.036682 38.2429543) 17916 POINT(478.921021 208.793243) 17917 POINT(225.523651 161.265671) 17918 POINT(336.971924 954.116638) 17919 POINT(1.36998677 334.368988) 17920 POINT(250.310837 281.802612) 17921 POINT(704.934875 788.230408) 17922 POINT(195.317642 894.408936) 17923 POINT(388.402252 387.169464) 17924 POINT(408.656281 451.300781) 17925 POINT(148.344421 445.397705) 17926 POINT(304.513214 600.337158) 17927 POINT(549.066467 254.912094) 17928 POINT(841.901062 631.254517) 17929 POINT(687.533386 281.135162) 17930 POINT(678.87915 269.286163) 17931 POINT(111.292213 429.432495) 17932 POINT(25.9105453 449.976288) 17933 POINT(153.785034 40.3405914) 17934 POINT(816.618225 701.034668) 17935 POINT(856.695007 990.946777) 17936 POINT(788.617432 513.214417) 17937 POINT(464.475159 387.22757) 17938 POINT(400.708557 209.000885) 17939 POINT(538.119141 265.749084) 17940 POINT(499.458191 855.40802) 17941 POINT(407.799652 687.065857) 17942 POINT(35.1484261 646.060181) 17943 POINT(909.602966 817.146606) 17944 POINT(364.427399 469.273682) 17945 POINT(900.742798 542.561584) 17946 POINT(168.072693 544.964417) 17947 POINT(768.967957 850.961731) 17948 POINT(363.524597 656.430664) 17949 POINT(222.148102 397.1633) 17950 POINT(662.830688 616.558228) 17951 POINT(818.115967 149.157181) 17952 POINT(380.062225 825.55957) 17953 POINT(555.760681 815.431824) 17954 POINT(443.936218 623.400452) 17955 POINT(57.2513885 458.61618) 17956 POINT(240.248901 279.628937) 17957 POINT(417.36908 629.71405) 17958 POINT(266.870392 952.063721) 17959 POINT(246.628067 856.837402) 17960 POINT(706.657837 480.013641) 17961 POINT(185.680679 2.71061802) 17962 POINT(939.037903 44.2986603) 17963 POINT(693.054138 992.279724) 17964 POINT(950.635315 252.866959) 17965 POINT(8.32421112 597.131226) 17966 POINT(253.748734 215.413864) 17967 POINT(248.269531 254.319168) 17968 POINT(666.399414 411.898773) 17969 POINT(812.379639 466.480957) 17970 POINT(489.916473 287.636261) 17971 POINT(942.445312 866.256653) 17972 POINT(783.524597 311.749695) 17973 POINT(13.0940638 985.123901) 17974 POINT(577.235291 896.881104) 17975 POINT(118.43499 614.542236) 17976 POINT(684.702637 917.44165) 17977 POINT(784.949524 121.12085) 17978 POINT(929.917847 293.274139) 17979 POINT(281.042328 428.35675) 17980 POINT(942.116943 77.9230499) 17981 POINT(436.007538 621.940796) 17982 POINT(511.647125 948.933716) 17983 POINT(130.452545 305.920654) 17984 POINT(848.460754 825.516785) 17985 POINT(509.461243 230.995529) 17986 POINT(910.214111 310.933258) 17987 POINT(410.105652 147.373444) 17988 POINT(437.576904 688.118164) 17989 POINT(725.585754 882.050354) 17990 POINT(72.3858871 593.029907) 17991 POINT(266.675293 898.796692) 17992 POINT(264.890533 197.27803) 17993 POINT(772.783875 928.914001) 17994 POINT(877.866211 586.658081) 17995 POINT(793.447205 37.9275742) 17996 POINT(949.252625 2.84700894) 17997 POINT(258.181915 859.41272) 17998 POINT(915.783813 89.8518372) 17999 POINT(308.276398 839.33844) 18000 POINT(365.507263 263.644348) 18001 POINT(836.240234 615.505859) 18002 POINT(667.961304 702.172913) 18003 POINT(703.432678 45.3331299) 18004 POINT(421.039825 273.654846) 18005 POINT(648.097778 595.500427) 18006 POINT(800.290161 414.386139) 18007 POINT(897.029114 538.537842) 18008 POINT(549.76062 604.545898) 18009 POINT(724.88031 649.674866) 18010 POINT(416.855988 633.537842) 18011 POINT(14.3593702 363.141266) 18012 POINT(413.421936 397.836212) 18013 POINT(934.958984 897.223816) 18014 POINT(941.029175 27.2564564) 18015 POINT(432.352905 973.9646) 18016 POINT(812.862305 823.836243) 18017 POINT(388.153076 990.2854) 18018 POINT(753.556885 845.509705) 18019 POINT(231.490891 906.018738) 18020 POINT(480.71814 139.520294) 18021 POINT(949.129578 529.917603) 18022 POINT(839.760986 183.714951) 18023 POINT(916.906738 151.933197) 18024 POINT(252.336609 223.777802) 18025 POINT(657.759277 699.237915) 18026 POINT(476.269531 988.015625) 18027 POINT(494.029694 410.617004) 18028 POINT(93.0698395 946.032654) 18029 POINT(405.94754 820.544739) 18030 POINT(422.276398 471.6987) 18031 POINT(114.011345 27.7385521) 18032 POINT(597.825928 233.005844) 18033 POINT(178.464981 466.090149) 18034 POINT(171.147156 11.1437826) 18035 POINT(540.308899 887.088623) 18036 POINT(872.697205 238.4384) 18037 POINT(529.562012 956.273499) 18038 POINT(565.257202 520.357178) 18039 POINT(630.18103 731.616577) 18040 POINT(158.681366 591.878052) 18041 POINT(737.65802 564.379639) 18042 POINT(480.270111 765.059265) 18043 POINT(873.484802 393.906342) 18044 POINT(163.957138 305.174561) 18045 POINT(257.154327 513.584595) 18046 POINT(344.633026 70.4574051) 18047 POINT(786.046692 198.086288) 18048 POINT(833.870483 549.115601) 18049 POINT(669.428406 899.804382) 18050 POINT(975.887878 401.249969) 18051 POINT(616.010559 358.642059) 18052 POINT(206.733582 177.676254) 18053 POINT(324.32312 3.06451201) 18054 POINT(587.465881 848.07251) 18055 POINT(388.951355 546.329651) 18056 POINT(78.7332687 573.641663) 18057 POINT(258.954102 60.4176331) 18058 POINT(847.954224 141.509445) 18059 POINT(791.173706 917.36145) 18060 POINT(432.691772 116.904388) 18061 POINT(782.415649 465.040771) 18062 POINT(559.393982 932.960388) 18063 POINT(770.499146 809.264954) 18064 POINT(973.117249 335.524292) 18065 POINT(322.972748 528.992859) 18066 POINT(861.987366 231.062943) 18067 POINT(19.9771633 995.290466) 18068 POINT(653.927307 589.680115) 18069 POINT(748.585815 401.215942) 18070 POINT(869.665771 563.038635) 18071 POINT(702.33905 858.970398) 18072 POINT(785.423645 959.92926) 18073 POINT(392.12146 467.715668) 18074 POINT(294.285736 142.242691) 18075 POINT(871.645996 101.409981) 18076 POINT(163.541718 863.732727) 18077 POINT(439.360779 577.456238) 18078 POINT(925.795593 566.361755) 18079 POINT(53.4651108 626.114258) 18080 POINT(677.094727 807.989807) 18081 POINT(170.925323 735.358643) 18082 POINT(801.531189 345.118683) 18083 POINT(356.041168 59.6352692) 18084 POINT(17.6752472 600.367493) 18085 POINT(788.496765 482.891449) 18086 POINT(519.872253 862.006958) 18087 POINT(302.313538 961.04718) 18088 POINT(442.075287 288.498505) 18089 POINT(201.216354 47.0950165) 18090 POINT(431.810638 211.491302) 18091 POINT(296.260803 149.235764) 18092 POINT(18.5288105 73.6588593) 18093 POINT(199.906174 480.481964) 18094 POINT(378.55127 721.275452) 18095 POINT(266.938965 734.213867) 18096 POINT(425.777618 454.328827) 18097 POINT(904.763489 437.108093) 18098 POINT(234.087479 868.652161) 18099 POINT(569.71106 377.152069) 18100 POINT(167.905594 895.07605) 18101 POINT(236.436188 934.209351) 18102 POINT(758.763184 730.614136) 18103 POINT(666.549988 23.539402) 18104 POINT(18.0826473 387.491516) 18105 POINT(430.895599 434.152161) 18106 POINT(173.153671 69.318985) 18107 POINT(455.927429 854.86615) 18108 POINT(610.804138 372.447144) 18109 POINT(295.281158 848.04657) 18110 POINT(421.167755 647.665405) 18111 POINT(377.686493 486.447174) 18112 POINT(364.907745 626.732483) 18113 POINT(984.898193 610.221375) 18114 POINT(307.09433 394.151337) 18115 POINT(579.42749 502.480804) 18116 POINT(338.593933 882.167725) 18117 POINT(570.809204 801.864685) 18118 POINT(563.386353 591.850159) 18119 POINT(498.318512 264.164398) 18120 POINT(192.872833 141.578812) 18121 POINT(562.965454 412.482635) 18122 POINT(434.295715 353.252991) 18123 POINT(185.877045 552.665283) 18124 POINT(171.304535 883.56012) 18125 POINT(855.584778 219.431366) 18126 POINT(545.043335 260.891357) 18127 POINT(583.149475 15.9712572) 18128 POINT(891.595642 606.73822) 18129 POINT(269.488556 438.629333) 18130 POINT(667.027771 203.067398) 18131 POINT(739.850342 577.122253) 18132 POINT(788.560181 454.290253) 18133 POINT(980.368347 253.658112) 18134 POINT(486.647766 114.682838) 18135 POINT(663.403992 931.050476) 18136 POINT(248.148041 980.759277) 18137 POINT(642.461914 565.811157) 18138 POINT(638.632751 545.072449) 18139 POINT(82.465683 8.23379612) 18140 POINT(828.690125 475.747467) 18141 POINT(943.874084 824.252319) 18142 POINT(74.3467941 717.91156) 18143 POINT(914.381409 815.593018) 18144 POINT(478.203674 642.85791) 18145 POINT(662.787903 593.297119) 18146 POINT(301.351196 22.6810589) 18147 POINT(637.177795 378.540955) 18148 POINT(325.547058 847.294189) 18149 POINT(33.0674019 592.93042) 18150 POINT(152.581665 682.837952) 18151 POINT(84.0576553 602.816406) 18152 POINT(448.409332 591.816467) 18153 POINT(373.26239 309.027893) 18154 POINT(521.815918 682.752991) 18155 POINT(402.008453 750.714844) 18156 POINT(2.56364965 358.291382) 18157 POINT(484.783234 911.3479) 18158 POINT(936.67804 903.641235) 18159 POINT(46.0145454 883.55188) 18160 POINT(234.510284 460.862366) 18161 POINT(283.020966 140.213257) 18162 POINT(931.246216 818.125427) 18163 POINT(716.49585 60.6740952) 18164 POINT(193.579727 96.8063049) 18165 POINT(489.446259 26.9036655) 18166 POINT(927.401428 23.7362843) 18167 POINT(89.9798737 305.056793) 18168 POINT(409.761505 352.431183) 18169 POINT(983.228516 798.131348) 18170 POINT(737.372803 357.567413) 18171 POINT(41.6450386 346.506012) 18172 POINT(409.970337 523.908264) 18173 POINT(587.674438 81.5732269) 18174 POINT(859.50946 327.467468) 18175 POINT(813.258118 935.708191) 18176 POINT(708.15564 746.722046) 18177 POINT(649.792297 577.285767) 18178 POINT(455.124634 119.564949) 18179 POINT(241.159515 85.8468628) 18180 POINT(823.606506 592.459534) 18181 POINT(760.547241 688.92865) 18182 POINT(266.331757 497.586578) 18183 POINT(726.333801 943.234009) 18184 POINT(956.999268 987.950195) 18185 POINT(358.880188 219.076935) 18186 POINT(763.110046 496.342987) 18187 POINT(102.236359 114.377991) 18188 POINT(185.179718 539.306519) 18189 POINT(764.31958 124.500519) 18190 POINT(492.409088 929.92041) 18191 POINT(935.928101 184.138382) 18192 POINT(423.368378 102.203888) 18193 POINT(391.025848 500.14386) 18194 POINT(942.921448 384.530457) 18195 POINT(84.2051468 848.093994) 18196 POINT(947.421265 229.778732) 18197 POINT(510.362732 414.638336) 18198 POINT(236.222504 546.634766) 18199 POINT(518.790771 551.976501) 18200 POINT(968.97467 950.811401) 18201 POINT(949.60083 955.532349) 18202 POINT(608.297241 428.874603) 18203 POINT(533.292664 781.999023) 18204 POINT(612.748169 183.400604) 18205 POINT(541.113586 859.025879) 18206 POINT(955.044617 299.500641) 18207 POINT(449.507812 182.136276) 18208 POINT(657.973694 973.124512) 18209 POINT(969.436218 396.846497) 18210 POINT(681.169556 895.410828) 18211 POINT(851.794067 487.887543) 18212 POINT(574.866394 659.723145) 18213 POINT(902.813721 772.007568) 18214 POINT(713.943115 804.569458) 18215 POINT(195.606598 860.782654) 18216 POINT(712.245911 22.6250324) 18217 POINT(941.374084 135.538864) 18218 POINT(821.631897 740.494446) 18219 POINT(359.932556 583.865906) 18220 POINT(973.862976 433.181549) 18221 POINT(965.818665 477.882141) 18222 POINT(310.968811 799.662842) 18223 POINT(343.239868 235.620361) 18224 POINT(958.682617 50.2597466) 18225 POINT(928.530579 71.4966125) 18226 POINT(768.855347 692.100464) 18227 POINT(838.687561 398.270905) 18228 POINT(334.317932 135.884735) 18229 POINT(993.259888 845.319519) 18230 POINT(760.558777 366.083862) 18231 POINT(866.729187 676.132019) 18232 POINT(163.007019 638.911316) 18233 POINT(200.051529 57.0788345) 18234 POINT(299.986053 409.797791) 18235 POINT(991.87384 300.641235) 18236 POINT(5.96768045 297.243469) 18237 POINT(508.839813 896.058044) 18238 POINT(467.186218 105.95565) 18239 POINT(905.249817 880.947571) 18240 POINT(894.662598 642.910034) 18241 POINT(158.142197 196.762039) 18242 POINT(764.055542 39.8036003) 18243 POINT(315.752563 922.399048) 18244 POINT(676.450928 459.342926) 18245 POINT(764.541077 273.037384) 18246 POINT(671.287842 716.593628) 18247 POINT(159.937698 580.001526) 18248 POINT(817.299255 436.494049) 18249 POINT(484.151855 992.549744) 18250 POINT(397.933441 731.525146) 18251 POINT(114.454811 739.896606) 18252 POINT(475.668304 996.96637) 18253 POINT(859.032104 603.123779) 18254 POINT(999.500916 653.317871) 18255 POINT(274.700317 929.133362) 18256 POINT(549.389282 525.122742) 18257 POINT(679.495178 495.302429) 18258 POINT(881.355774 931.99408) 18259 POINT(649.499634 742.485168) 18260 POINT(441.286926 521.175659) 18261 POINT(307.549438 39.5836639) 18262 POINT(201.240097 822.111267) 18263 POINT(814.012329 444.789062) 18264 POINT(489.503448 523.550964) 18265 POINT(427.191101 872.144287) 18266 POINT(838.058655 524.600464) 18267 POINT(661.687561 158.26239) 18268 POINT(364.921356 995.355408) 18269 POINT(114.038406 519.462524) 18270 POINT(403.645966 493.53067) 18271 POINT(700.977173 576.477844) 18272 POINT(250.779572 754.569885) 18273 POINT(449.800446 50.102562) 18274 POINT(240.049667 128.532104) 18275 POINT(753.650879 460.153442) 18276 POINT(288.522095 942.626648) 18277 POINT(646.333435 521.024414) 18278 POINT(466.936676 879.276428) 18279 POINT(228.936172 264.642548) 18280 POINT(599.113708 972.319824) 18281 POINT(789.54425 346.136627) 18282 POINT(922.04718 125.325829) 18283 POINT(371.34198 124.983711) 18284 POINT(170.502716 373.536194) 18285 POINT(865.158997 356.40863) 18286 POINT(272.19339 62.8265839) 18287 POINT(9.90625 81.5981369) 18288 POINT(39.6060448 964.083008) 18289 POINT(686.382751 243.711777) 18290 POINT(663.119751 228.936829) 18291 POINT(372.740479 868.197876) 18292 POINT(491.137085 312.92865) 18293 POINT(707.732849 284.660522) 18294 POINT(23.6111279 225.542953) 18295 POINT(473.127472 803.195618) 18296 POINT(445.792358 34.4609184) 18297 POINT(479.838013 726.075256) 18298 POINT(542.556519 665.732239) 18299 POINT(422.061462 326.882507) 18300 POINT(816.757874 54.9062614) 18301 POINT(676.752197 980.291443) 18302 POINT(897.246216 359.654022) 18303 POINT(777.00177 508.86734) 18304 POINT(376.192291 625.843506) 18305 POINT(210.339371 826.389832) 18306 POINT(526.999451 280.815369) 18307 POINT(697.745178 413.747894) 18308 POINT(592.287659 524.783569) 18309 POINT(935.544861 142.525101) 18310 POINT(618.291565 909.52179) 18311 POINT(247.703842 557.709595) 18312 POINT(972.706055 579.07605) 18313 POINT(845.875061 304.881653) 18314 POINT(495.869202 137.0867) 18315 POINT(652.50946 814.725891) 18316 POINT(681.633484 376.943146) 18317 POINT(460.166016 280.386108) 18318 POINT(798.911133 32.5986176) 18319 POINT(707.745911 38.2593689) 18320 POINT(585.389954 788.229797) 18321 POINT(309.729553 613.158691) 18322 POINT(162.116013 423.447968) 18323 POINT(813.747009 352.8396) 18324 POINT(425.476959 707.498108) 18325 POINT(49.2218437 958.786926) 18326 POINT(118.664383 421.480133) 18327 POINT(307.777252 539.621216) 18328 POINT(518.14325 253.383392) 18329 POINT(735.089111 555.85553) 18330 POINT(595.326111 738.555542) 18331 POINT(862.547485 191.001022) 18332 POINT(235.990051 510.668335) 18333 POINT(242.201706 40.7700081) 18334 POINT(679.552795 878.460632) 18335 POINT(724.899597 341.600128) 18336 POINT(539.836487 785.320251) 18337 POINT(622.295715 309.761169) 18338 POINT(304.215454 66.5293961) 18339 POINT(479.626892 96.3937149) 18340 POINT(998.00885 257.776154) 18341 POINT(447.099823 711.060364) 18342 POINT(117.71875 83.9971313) 18343 POINT(840.780518 371.497406) 18344 POINT(55.4130135 866.049011) 18345 POINT(824.531738 710.586182) 18346 POINT(85.5420074 11.0239553) 18347 POINT(696.444458 239.095718) 18348 POINT(796.195862 227.767776) 18349 POINT(828.107727 316.085876) 18350 POINT(303.828979 250.488495) 18351 POINT(262.844513 525.225037) 18352 POINT(81.4949112 419.052826) 18353 POINT(537.715454 967.524963) 18354 POINT(96.4677887 104.066818) 18355 POINT(739.789307 247.599609) 18356 POINT(737.722473 468.167236) 18357 POINT(754.158691 305.621155) 18358 POINT(714.172913 602.775513) 18359 POINT(301.824921 200.395599) 18360 POINT(421.024719 493.174133) 18361 POINT(720.389954 215.770004) 18362 POINT(857.401611 256.071991) 18363 POINT(608.117004 493.885864) 18364 POINT(890.002441 515.368347) 18365 POINT(859.105652 811.210876) 18366 POINT(804.507629 876.768738) 18367 POINT(268.956299 139.042877) 18368 POINT(681.473877 114.040642) 18369 POINT(619.385071 567.133728) 18370 POINT(142.35434 663.433594) 18371 POINT(867.918457 830.705505) 18372 POINT(603.008179 253.171371) 18373 POINT(14.3133745 646.529236) 18374 POINT(968.681213 277.609741) 18375 POINT(206.089279 927.630737) 18376 POINT(31.1494179 806.93927) 18377 POINT(327.035461 568.934631) 18378 POINT(963.83728 740.106445) 18379 POINT(408.401306 253.728683) 18380 POINT(735.700745 538.470764) 18381 POINT(764.446899 764.83197) 18382 POINT(914.064392 588.772278) 18383 POINT(412.009277 752.005432) 18384 POINT(838.129883 545.043945) 18385 POINT(545.734253 231.30397) 18386 POINT(109.335732 889.579529) 18387 POINT(142.765778 211.215042) 18388 POINT(556.104675 472.999817) 18389 POINT(27.2363949 458.656708) 18390 POINT(535.822998 373.510071) 18391 POINT(378.239868 254.948212) 18392 POINT(586.362122 126.903885) 18393 POINT(985.60498 33.0688095) 18394 POINT(936.387878 183.6492) 18395 POINT(894.356079 533.862427) 18396 POINT(334.559265 450.038727) 18397 POINT(108.000984 836.927917) 18398 POINT(622.061951 460.056488) 18399 POINT(997.612183 593.98407) 18400 POINT(713.449951 237.098175) 18401 POINT(71.0720062 566.368286) 18402 POINT(383.301514 264.3974) 18403 POINT(955.968323 207.490097) 18404 POINT(899.677307 354.992493) 18405 POINT(329.711578 364.62323) 18406 POINT(971.871948 151.983322) 18407 POINT(158.881973 47.1033821) 18408 POINT(264.66568 693.963074) 18409 POINT(882.111572 730.158875) 18410 POINT(402.538727 35.7820511) 18411 POINT(60.5967178 461.212402) 18412 POINT(676.542725 548.744324) 18413 POINT(829.374878 500.15686) 18414 POINT(758.310364 855.124207) 18415 POINT(90.6750488 764.052063) 18416 POINT(507.71637 638.298584) 18417 POINT(505.963898 632.764954) 18418 POINT(273.80072 961.245544) 18419 POINT(751.898743 893.759766) 18420 POINT(976.677795 512.691467) 18421 POINT(321.519135 715.636597) 18422 POINT(218.347351 62.4694328) 18423 POINT(68.0426102 510.847015) 18424 POINT(902.795471 666.959961) 18425 POINT(225.087936 613.631348) 18426 POINT(503.843109 33.7471962) 18427 POINT(392.660919 610.602844) 18428 POINT(559.312378 284.369415) 18429 POINT(879.563538 435.150635) 18430 POINT(1.80869472 888.438293) 18431 POINT(344.907745 505.173126) 18432 POINT(72.4517822 165.240784) 18433 POINT(217.140457 44.4335442) 18434 POINT(270.053955 734.626831) 18435 POINT(299.546356 594.535706) 18436 POINT(733.484863 62.5705376) 18437 POINT(35.8517914 676.240356) 18438 POINT(761.346313 593.934631) 18439 POINT(425.684326 690.317261) 18440 POINT(665.805847 341.954224) 18441 POINT(692.759949 819.701965) 18442 POINT(614.824768 547.704529) 18443 POINT(742.405212 782.375549) 18444 POINT(520.507629 610.86377) 18445 POINT(751.131897 429.715363) 18446 POINT(815.468018 793.593018) 18447 POINT(39.34935 45.2967682) 18448 POINT(261.646393 721.117615) 18449 POINT(646.93689 697.117004) 18450 POINT(847.746582 845.024048) 18451 POINT(796.429504 570.433594) 18452 POINT(646.326782 338.421417) 18453 POINT(54.2624741 62.9672508) 18454 POINT(966.65741 286.620605) 18455 POINT(429.250397 778.837646) 18456 POINT(704.937256 94.1476898) 18457 POINT(649.752258 897.630493) 18458 POINT(862.661743 210.644958) 18459 POINT(285.433167 721.414612) 18460 POINT(383.308746 187.059128) 18461 POINT(402.927979 281.937927) 18462 POINT(806.615479 702.641479) 18463 POINT(821.928955 504.859222) 18464 POINT(521.265808 186.472397) 18465 POINT(352.264099 625.570007) 18466 POINT(326.603119 518.891052) 18467 POINT(304.539154 895.401001) 18468 POINT(510.984222 703.395813) 18469 POINT(66.1429291 436.899078) 18470 POINT(90.65522 403.950012) 18471 POINT(188.241318 747.12146) 18472 POINT(303.765198 542.465149) 18473 POINT(633.324951 418.882446) 18474 POINT(947.651489 333.459869) 18475 POINT(60.5543671 277.577118) 18476 POINT(915.280701 925.039368) 18477 POINT(79.3272934 207.198975) 18478 POINT(13.2797623 335.578918) 18479 POINT(660.057861 370.690979) 18480 POINT(217.040344 382.608429) 18481 POINT(563.110657 489.673157) 18482 POINT(278.743011 443.800751) 18483 POINT(18.3137722 25.351265) 18484 POINT(595.775269 959.704041) 18485 POINT(572.733765 950.13269) 18486 POINT(466.976562 764.588379) 18487 POINT(215.822357 787.882385) 18488 POINT(12.6300554 436.792236) 18489 POINT(609.141235 465.196442) 18490 POINT(764.457214 605.167053) 18491 POINT(591.275146 507.530304) 18492 POINT(100.498581 386.167236) 18493 POINT(524.008423 249.092194) 18494 POINT(616.257568 99.9829941) 18495 POINT(498.252533 36.3306007) 18496 POINT(200.535706 7.65452147) 18497 POINT(760.576538 189.454132) 18498 POINT(987.817627 798.748901) 18499 POINT(864.645386 558.204041) 18500 POINT(657.821167 855.969666) 18501 POINT(235.665833 446.152405) 18502 POINT(368.977661 234.661987) 18503 POINT(877.462585 76.851265) 18504 POINT(271.348267 767.868958) 18505 POINT(496.566376 495.558289) 18506 POINT(324.135437 578.292847) 18507 POINT(89.320076 217.995163) 18508 POINT(524.954041 524.767334) 18509 POINT(88.2599869 194.249664) 18510 POINT(576.961792 100.809692) 18511 POINT(122.789581 908.744568) 18512 POINT(113.504654 45.2869873) 18513 POINT(774.437561 109.014343) 18514 POINT(458.928345 319.61438) 18515 POINT(934.916992 685.331482) 18516 POINT(322.593445 192.240402) 18517 POINT(370.032471 314.108521) 18518 POINT(47.9727287 380.132111) 18519 POINT(296.604858 350.19931) 18520 POINT(20.2047253 599.839966) 18521 POINT(463.498322 92.0809174) 18522 POINT(476.944855 439.410217) 18523 POINT(740.185181 450.395966) 18524 POINT(375.24292 279.465088) 18525 POINT(233.818634 491.073578) 18526 POINT(701.050354 560.345825) 18527 POINT(733.391174 581.453552) 18528 POINT(930.520142 146.107803) 18529 POINT(900.241638 489.362427) 18530 POINT(479.326172 899.775574) 18531 POINT(249.071045 834.411438) 18532 POINT(326.742096 22.6556473) 18533 POINT(81.9935455 597.002075) 18534 POINT(447.253723 779.325684) 18535 POINT(217.367538 798.36731) 18536 POINT(799.226562 125.460648) 18537 POINT(490.729095 84.7909546) 18538 POINT(935.936401 564.833679) 18539 POINT(570.721985 406.916168) 18540 POINT(550.534546 512.182068) 18541 POINT(930.238586 672.374146) 18542 POINT(627.837036 148.317581) 18543 POINT(721.942383 574.06488) 18544 POINT(239.889694 481.679077) 18545 POINT(535.935669 430.153564) 18546 POINT(229.892334 225.883148) 18547 POINT(351.709503 3.68609977) 18548 POINT(124.205605 455.769684) 18549 POINT(550.910278 853.776062) 18550 POINT(91.8913116 495.622009) 18551 POINT(324.276825 776.301392) 18552 POINT(835.737915 443.95993) 18553 POINT(705.837646 555.321228) 18554 POINT(101.324562 361.469818) 18555 POINT(398.752991 317.960602) 18556 POINT(387.821594 794.787659) 18557 POINT(446.792236 781.913818) 18558 POINT(245.482529 722.155518) 18559 POINT(158.23909 138.211334) 18560 POINT(762.850708 571.213623) 18561 POINT(838.024109 20.3354301) 18562 POINT(947.40033 948.78894) 18563 POINT(240.224792 287.627502) 18564 POINT(355.60141 552.531555) 18565 POINT(956.011658 275.3125) 18566 POINT(654.317261 210.29567) 18567 POINT(519.030945 830.094604) 18568 POINT(620.196289 561.558899) 18569 POINT(986.613892 219.509567) 18570 POINT(185.640106 892.824524) 18571 POINT(364.718628 751.023926) 18572 POINT(500.451904 543.407104) 18573 POINT(38.9019089 304.857758) 18574 POINT(31.9679413 977.41571) 18575 POINT(482.768005 629.895996) 18576 POINT(611.047607 580.921936) 18577 POINT(897.258667 97.6999741) 18578 POINT(137.559006 889.631348) 18579 POINT(124.962143 94.0090485) 18580 POINT(680.898315 821.921021) 18581 POINT(547.591736 554.336243) 18582 POINT(695.687927 515.51593) 18583 POINT(654.295044 540.035339) 18584 POINT(470.309906 114.64576) 18585 POINT(334.014038 688.904175) 18586 POINT(139.663742 790.166443) 18587 POINT(545.354919 860.965149) 18588 POINT(229.940964 0.385212421) 18589 POINT(29.1031666 102.130463) 18590 POINT(821.848572 508.356964) 18591 POINT(906.51709 948.24353) 18592 POINT(782.289551 596.015503) 18593 POINT(933.859314 137.341843) 18594 POINT(838.837219 781.076416) 18595 POINT(521.413269 552.383179) 18596 POINT(475.369568 814.240662) 18597 POINT(362.738617 9.22475433) 18598 POINT(83.0288925 867.502197) 18599 POINT(224.527939 680.061523) 18600 POINT(583.43634 315.607422) 18601 POINT(514.647339 111.17482) 18602 POINT(879.141296 948.846191) 18603 POINT(149.402985 81.6887131) 18604 POINT(211.066116 563.907104) 18605 POINT(782.539124 848.678711) 18606 POINT(498.789398 778.674683) 18607 POINT(17.8176785 540.657715) 18608 POINT(394.590027 365.365997) 18609 POINT(12.2663279 769.022827) 18610 POINT(437.069427 43.7159958) 18611 POINT(174.441254 613.965454) 18612 POINT(888.827881 312.064758) 18613 POINT(85.5942841 461.723969) 18614 POINT(582.161194 699.835815) 18615 POINT(513.839478 193.621033) 18616 POINT(77.2625809 621.316833) 18617 POINT(472.79364 689.43042) 18618 POINT(312.28009 509.772614) 18619 POINT(795.349304 759.231506) 18620 POINT(550.241699 965.274658) 18621 POINT(76.9859543 475.640839) 18622 POINT(113.881798 502.390656) 18623 POINT(96.2179413 474.384918) 18624 POINT(158.487274 18.821003) 18625 POINT(775.42395 423.442505) 18626 POINT(530.842651 97.6212921) 18627 POINT(314.536469 342.925018) 18628 POINT(768.140869 618.843445) 18629 POINT(552.145996 368.570892) 18630 POINT(126.408539 196.927979) 18631 POINT(700.879639 485.938934) 18632 POINT(518.766052 624.276855) 18633 POINT(11.9525604 580.443176) 18634 POINT(668.026367 626.044434) 18635 POINT(371.19754 226.256271) 18636 POINT(117.175537 793.839294) 18637 POINT(367.410095 116.42202) 18638 POINT(929.741333 934.89917) 18639 POINT(633.387207 74.4844208) 18640 POINT(587.646057 257.176086) 18641 POINT(698.59491 607.415527) 18642 POINT(347.664612 709.053345) 18643 POINT(746.104126 899.080811) 18644 POINT(943.028442 445.164307) 18645 POINT(399.548676 707.021912) 18646 POINT(261.085693 227.644211) 18647 POINT(420.758575 532.690186) 18648 POINT(441.457092 666.420166) 18649 POINT(245.92392 671.778259) 18650 POINT(625.12439 514.739075) 18651 POINT(976.271667 817.951477) 18652 POINT(449.806702 869.591248) 18653 POINT(445.056 56.6761284) 18654 POINT(890.387085 574.169495) 18655 POINT(561.05188 628.204407) 18656 POINT(447.740784 514.802856) 18657 POINT(362.70636 307.95459) 18658 POINT(210.913483 872.329346) 18659 POINT(267.782867 712.004517) 18660 POINT(375.141144 892.669067) 18661 POINT(359.978821 114.287735) 18662 POINT(263.768463 939.084656) 18663 POINT(283.998138 305.079285) 18664 POINT(350.902832 675.565857) 18665 POINT(319.419159 737.830811) 18666 POINT(741.956177 293.85675) 18667 POINT(445.049805 329.336884) 18668 POINT(772.524536 963.404846) 18669 POINT(991.065857 188.193573) 18670 POINT(16.9017754 772.104431) 18671 POINT(685.962402 655.764465) 18672 POINT(943.619873 594.93335) 18673 POINT(247.22728 25.2600117) 18674 POINT(557.568237 726.845398) 18675 POINT(924.794434 346.529755) 18676 POINT(670.419678 35.6274719) 18677 POINT(699.019348 780.874573) 18678 POINT(440.344604 510.521057) 18679 POINT(852.514526 11.3256788) 18680 POINT(718.531738 724.531738) 18681 POINT(898.204224 474.767822) 18682 POINT(687.163208 104.421654) 18683 POINT(953.030212 413.976044) 18684 POINT(627.668823 364.940094) 18685 POINT(524.629944 466.695496) 18686 POINT(228.873672 756.055237) 18687 POINT(831.891602 247.544418) 18688 POINT(144.751083 277.60083) 18689 POINT(542.57666 934.61554) 18690 POINT(6.72086048 9.25549793) 18691 POINT(593.325012 559.666992) 18692 POINT(454.735779 600.16687) 18693 POINT(298.575958 597.831116) 18694 POINT(96.8460464 567.489502) 18695 POINT(572.632141 654.555664) 18696 POINT(463.720245 812.903137) 18697 POINT(928.773743 914.377747) 18698 POINT(771.048828 17.7388191) 18699 POINT(204.627472 424.094482) 18700 POINT(620.311401 798.200684) 18701 POINT(245.668686 873.534241) 18702 POINT(91.6193695 560.492798) 18703 POINT(188.664322 967.679077) 18704 POINT(148.948639 400.236633) 18705 POINT(482.063416 677.190308) 18706 POINT(978.869446 540.806641) 18707 POINT(396.937317 48.9254303) 18708 POINT(112.814461 241.158173) 18709 POINT(884.324585 57.9025536) 18710 POINT(687.062561 756.040039) 18711 POINT(165.128799 407.100494) 18712 POINT(424.15979 371.45816) 18713 POINT(167.556061 716.825073) 18714 POINT(277.762054 227.807587) 18715 POINT(703.101013 192.104401) 18716 POINT(776.318726 184.747879) 18717 POINT(272.045837 381.300079) 18718 POINT(989.187988 368.835022) 18719 POINT(368.217926 824.059692) 18720 POINT(484.381012 910.923279) 18721 POINT(693.357178 279.747162) 18722 POINT(365.992767 249.830276) 18723 POINT(455.014496 392.040588) 18724 POINT(390.437286 916.758179) 18725 POINT(897.690308 410.589935) 18726 POINT(635.936462 977.141785) 18727 POINT(972.312073 301.200775) 18728 POINT(314.505737 989.248718) 18729 POINT(979.650146 842.311951) 18730 POINT(98.2626877 28.8910942) 18731 POINT(602.513794 253.53566) 18732 POINT(13.6960649 754.571045) 18733 POINT(771.312622 423.334015) 18734 POINT(223.146484 765.430481) 18735 POINT(667.694641 804.741333) 18736 POINT(249.860413 394.304016) 18737 POINT(69.4905701 703.257019) 18738 POINT(752.405823 229.390244) 18739 POINT(463.234772 678.108398) 18740 POINT(359.926971 860.60791) 18741 POINT(512.357056 571.116516) 18742 POINT(338.738586 781.245117) 18743 POINT(762.127075 736.116882) 18744 POINT(673.30719 863.338257) 18745 POINT(907.093201 101.645866) 18746 POINT(164.067734 78.2421799) 18747 POINT(641.723328 11.3728571) 18748 POINT(227.212631 4.61411953) 18749 POINT(486.983673 367.147095) 18750 POINT(537.146423 397.698181) 18751 POINT(39.5647469 480.7565) 18752 POINT(493.413208 570.148438) 18753 POINT(659.3927 520.419739) 18754 POINT(686.396912 330.086426) 18755 POINT(606.077637 330.125549) 18756 POINT(248.913345 651.687561) 18757 POINT(295.309204 283.300018) 18758 POINT(836.025635 422.999359) 18759 POINT(489.295349 301.646057) 18760 POINT(298.218292 471.195557) 18761 POINT(506.65979 85.7133331) 18762 POINT(181.778915 443.985413) 18763 POINT(660.402954 341.798767) 18764 POINT(486.308075 4.95872402) 18765 POINT(159.343658 491.745819) 18766 POINT(567.271851 548.423889) 18767 POINT(268.781006 175.335327) 18768 POINT(329.131836 264.574493) 18769 POINT(77.9536896 222.09111) 18770 POINT(502.645905 788.015137) 18771 POINT(301.361084 618.935791) 18772 POINT(632.38031 881.827393) 18773 POINT(12.4038687 36.3311501) 18774 POINT(664.378784 76.1272736) 18775 POINT(513.484924 418.045288) 18776 POINT(669.490479 965.744629) 18777 POINT(957.1922 973.860168) 18778 POINT(168.391525 938.155396) 18779 POINT(197.095032 141.344025) 18780 POINT(846.280273 552.663025) 18781 POINT(340.785553 968.863831) 18782 POINT(718.168274 118.212425) 18783 POINT(856.9646 199.531586) 18784 POINT(292.30777 353.926453) 18785 POINT(935.62085 652.616089) 18786 POINT(195.423553 387.885468) 18787 POINT(276.810455 368.583038) 18788 POINT(487.994446 920.874756) 18789 POINT(78.4747238 235.458466) 18790 POINT(382.923096 708.455444) 18791 POINT(774.511902 292.360779) 18792 POINT(861.74646 793.071167) 18793 POINT(936.461975 721.177795) 18794 POINT(287.384491 234.891479) 18795 POINT(669.295166 315.442963) 18796 POINT(272.754242 673.25708) 18797 POINT(105.680023 348.099823) 18798 POINT(964.953369 518.096313) 18799 POINT(113.622177 654.25531) 18800 POINT(432.845886 181.309479) 18801 POINT(787.525635 74.0681839) 18802 POINT(842.572327 661.292114) 18803 POINT(478.65802 353.07016) 18804 POINT(614.714355 279.517944) 18805 POINT(151.967041 126.579369) 18806 POINT(275.629089 117.101006) 18807 POINT(424.572968 691.163513) 18808 POINT(444.034668 32.7851143) 18809 POINT(267.562714 124.695908) 18810 POINT(485.591797 273.788391) 18811 POINT(635.567749 708.395874) 18812 POINT(179.43251 969.894775) 18813 POINT(154.776001 45.961792) 18814 POINT(80.9084091 972.30072) 18815 POINT(954.393982 298.711334) 18816 POINT(646.960083 945.780396) 18817 POINT(102.142334 359.395477) 18818 POINT(80.2683105 620.144226) 18819 POINT(312.274261 884.524414) 18820 POINT(914.681763 69.7657394) 18821 POINT(374.103912 974.737488) 18822 POINT(729.394531 623.81488) 18823 POINT(417.509338 29.6910915) 18824 POINT(868.166016 961.039246) 18825 POINT(834.834229 268.481323) 18826 POINT(430.85495 448.403503) 18827 POINT(639.692383 474.737274) 18828 POINT(79.1264954 320.161316) 18829 POINT(814.132629 338.817413) 18830 POINT(790.951172 731.164429) 18831 POINT(906.333496 985.244507) 18832 POINT(747.149902 564.194336) 18833 POINT(749.4776 814.472351) 18834 POINT(128.564438 525.25061) 18835 POINT(714.830139 92.7688675) 18836 POINT(38.3935165 63.083374) 18837 POINT(752.583801 996.526306) 18838 POINT(787.908325 930.480774) 18839 POINT(555.102051 277.395782) 18840 POINT(845.330811 336.204468) 18841 POINT(269.317688 847.643127) 18842 POINT(250.456909 79.9200211) 18843 POINT(136.842285 392.010742) 18844 POINT(848.069336 420.537476) 18845 POINT(428.582336 359.750763) 18846 POINT(350.890106 694.21759) 18847 POINT(820.218384 160.590775) 18848 POINT(770.458801 505.708252) 18849 POINT(508.791351 129.057968) 18850 POINT(867.714966 190.061371) 18851 POINT(559.990784 396.300201) 18852 POINT(893.154968 846.184814) 18853 POINT(189.809219 546.398682) 18854 POINT(381.294922 634.770996) 18855 POINT(490.398224 179.899017) 18856 POINT(210.997879 907.200989) 18857 POINT(903.742493 871.24408) 18858 POINT(570.337158 675.966675) 18859 POINT(1.79316127 614.949646) 18860 POINT(103.509766 678.52002) 18861 POINT(649.725281 599.325256) 18862 POINT(52.4599075 943.414917) 18863 POINT(789.892212 933.534546) 18864 POINT(25.0132446 98.9400253) 18865 POINT(95.8492432 956.660522) 18866 POINT(465.281158 319.565338) 18867 POINT(894.640198 664.672852) 18868 POINT(514.814697 574.481262) 18869 POINT(655.646851 56.8833199) 18870 POINT(731.54071 905.957764) 18871 POINT(188.068802 297.351746) 18872 POINT(778.094116 644.48584) 18873 POINT(497.043762 244.118149) 18874 POINT(355.087982 474.593506) 18875 POINT(119.16391 371.064453) 18876 POINT(194.587524 952.398315) 18877 POINT(118.454918 410.252838) 18878 POINT(154.137924 686.526001) 18879 POINT(778.638 208.972641) 18880 POINT(374.843445 811.784363) 18881 POINT(209.705795 623.308167) 18882 POINT(54.0182838 384.344147) 18883 POINT(507.637543 572.289124) 18884 POINT(802.780151 823.185791) 18885 POINT(4.71869373 232.706802) 18886 POINT(433.701111 820.881836) 18887 POINT(341.797485 359.201569) 18888 POINT(678.465881 193.696869) 18889 POINT(228.411621 727.594421) 18890 POINT(48.7321739 773.40387) 18891 POINT(555.688232 97.6360321) 18892 POINT(306.489716 638.686951) 18893 POINT(42.0149879 15.9693565) 18894 POINT(737.742188 110.681046) 18895 POINT(452.582611 388.384094) 18896 POINT(262.985077 3.88452482) 18897 POINT(99.0192795 465.226135) 18898 POINT(960.543762 529.782593) 18899 POINT(330.60434 643.595825) 18900 POINT(618.314941 36.0745583) 18901 POINT(938.22467 998.822266) 18902 POINT(712.888977 860.076294) 18903 POINT(248.700867 435.365601) 18904 POINT(692.62146 51.9524651) 18905 POINT(460.87149 779.12738) 18906 POINT(516.281738 543.842896) 18907 POINT(814.5177 520.115356) 18908 POINT(177.88858 607.215271) 18909 POINT(165.58754 523.116394) 18910 POINT(990.810486 646.073608) 18911 POINT(721.13269 136.706467) 18912 POINT(972.862305 651.760803) 18913 POINT(147.897598 295.419586) 18914 POINT(984.786804 20.4347458) 18915 POINT(170.743164 489.687134) 18916 POINT(746.11731 71.9037628) 18917 POINT(610.296387 702.344116) 18918 POINT(357.044739 64.0471497) 18919 POINT(640.779785 423.809875) 18920 POINT(67.7545776 966.808167) 18921 POINT(774.395569 770.833008) 18922 POINT(286.078064 830.641968) 18923 POINT(671.555786 171.929428) 18924 POINT(931.660583 483.872375) 18925 POINT(638.412354 437.929077) 18926 POINT(414.760925 139.819046) 18927 POINT(484.441559 715.618225) 18928 POINT(627.952271 546.594543) 18929 POINT(981.275513 499.163574) 18930 POINT(230.218811 719.547058) 18931 POINT(275.687469 736.313416) 18932 POINT(219.179413 348.483307) 18933 POINT(378.882019 68.3893127) 18934 POINT(825.486938 349.710327) 18935 POINT(973.4021 354.535034) 18936 POINT(324.049469 57.8690186) 18937 POINT(768.545776 86.9316406) 18938 POINT(592.913269 436.419708) 18939 POINT(93.8237305 855.693359) 18940 POINT(518.886475 781.00885) 18941 POINT(274.437683 186.530365) 18942 POINT(458.833344 439.969482) 18943 POINT(87.9075775 383.227631) 18944 POINT(429.730347 464.66922) 18945 POINT(589.82312 258.398438) 18946 POINT(984.865662 103.736916) 18947 POINT(230.382706 143.296661) 18948 POINT(506.928558 84.4065247) 18949 POINT(201.162659 409.824371) 18950 POINT(33.2450218 486.984467) 18951 POINT(670.816589 9.96808434) 18952 POINT(549.267029 161.058472) 18953 POINT(134.647766 600.096741) 18954 POINT(721.932678 391.438782) 18955 POINT(739.856812 545.828979) 18956 POINT(276.132996 375.494751) 18957 POINT(707.501892 139.131348) 18958 POINT(79.8123779 889.684937) 18959 POINT(983.703674 360.16745) 18960 POINT(633.897217 810.467041) 18961 POINT(974.385376 405.032013) 18962 POINT(153.100739 312.828217) 18963 POINT(685.998657 415.35199) 18964 POINT(66.649025 138.436066) 18965 POINT(173.499878 590.919128) 18966 POINT(311.172424 235.540283) 18967 POINT(828.697998 361.760498) 18968 POINT(681.612183 895.543396) 18969 POINT(497.496155 26.7100773) 18970 POINT(153.318893 708.51947) 18971 POINT(542.132629 232.589111) 18972 POINT(96.0154343 834.433472) 18973 POINT(941.046814 638.138062) 18974 POINT(727.531616 231.560654) 18975 POINT(99.3380966 862.096436) 18976 POINT(764.88678 232.422256) 18977 POINT(809.953308 403.147827) 18978 POINT(738.219421 734.84259) 18979 POINT(420.872986 204.315475) 18980 POINT(758.185669 946.546265) 18981 POINT(715.914368 244.906647) 18982 POINT(41.8415909 141.706055) 18983 POINT(873.723694 323.992584) 18984 POINT(280.88266 953.315308) 18985 POINT(526.591309 661.02301) 18986 POINT(7.75656796 923.109192) 18987 POINT(871.530151 207.488953) 18988 POINT(711.041748 88.5322342) 18989 POINT(792.362122 530.16449) 18990 POINT(256.158875 422.11087) 18991 POINT(413.246582 698.606628) 18992 POINT(568.655579 711.330688) 18993 POINT(629.166016 960.119568) 18994 POINT(875.794922 626.147095) 18995 POINT(233.486206 802.778015) 18996 POINT(621.928406 56.6214828) 18997 POINT(901.09613 745.448975) 18998 POINT(471.219971 495.529388) 18999 POINT(680.181091 322.784088) 19000 POINT(287.898834 111.42807) 19001 POINT(816.906982 988.224304) 19002 POINT(292.678986 918.508301) 19003 POINT(783.820557 290.142853) 19004 POINT(590.737854 953.128845) 19005 POINT(731.360779 701.951538) 19006 POINT(261.263 856.40863) 19007 POINT(237.415527 938.537109) 19008 POINT(203.753189 621.4151) 19009 POINT(25.3441849 766.631836) 19010 POINT(917.814941 266.758331) 19011 POINT(167.467758 29.125845) 19012 POINT(520.078003 760.810974) 19013 POINT(427.945404 432.009796) 19014 POINT(196.127258 947.995239) 19015 POINT(643.606567 182.310974) 19016 POINT(272.215027 466.891602) 19017 POINT(39.1894722 676.413635) 19018 POINT(449.295563 536.252075) 19019 POINT(848.188293 496.507935) 19020 POINT(952.053833 996.874329) 19021 POINT(613.886169 120.192566) 19022 POINT(342.661682 502.881927) 19023 POINT(707.036499 141.694122) 19024 POINT(170.674149 264.047546) 19025 POINT(375.05481 865.607239) 19026 POINT(67.6002655 150.802551) 19027 POINT(568.633301 803.986877) 19028 POINT(141.193558 325.539886) 19029 POINT(739.64563 589.13269) 19030 POINT(827.473877 288.400269) 19031 POINT(211.455902 827.228638) 19032 POINT(668.111816 394.221893) 19033 POINT(859.787903 447.4823) 19034 POINT(700.400696 471.649292) 19035 POINT(57.7848129 648.533691) 19036 POINT(383.051971 258.072052) 19037 POINT(809.550049 875.265198) 19038 POINT(793.050537 448.266052) 19039 POINT(977.192139 656.97699) 19040 POINT(479.491028 374.127136) 19041 POINT(580.207031 150.039566) 19042 POINT(65.5039673 712.13208) 19043 POINT(474.053253 918.083557) 19044 POINT(868.020386 319.1763) 19045 POINT(786.266785 679.626221) 19046 POINT(329.280853 881.883179) 19047 POINT(370.80542 301.50116) 19048 POINT(498.869751 725.647339) 19049 POINT(130.015839 326.898987) 19050 POINT(698.963867 954.476624) 19051 POINT(322.312225 425.217773) 19052 POINT(579.875732 308.673279) 19053 POINT(224.10199 728.869202) 19054 POINT(212.413727 352.712372) 19055 POINT(626.573181 486.910889) 19056 POINT(555.768677 99.1146927) 19057 POINT(329.679535 489.733246) 19058 POINT(425.392212 85.0980988) 19059 POINT(833.152954 491.492004) 19060 POINT(8.59989738 537.354858) 19061 POINT(931.900696 331.654755) 19062 POINT(533.480774 267.111572) 19063 POINT(593.084778 603.636902) 19064 POINT(89.3243484 653.971436) 19065 POINT(845.044067 772.402771) 19066 POINT(977.500916 714.829407) 19067 POINT(42.6390572 355.068451) 19068 POINT(696.999817 165.928589) 19069 POINT(716.330017 665.570435) 19070 POINT(548.215332 315.053131) 19071 POINT(768.226685 218.585419) 19072 POINT(384.759705 950.723328) 19073 POINT(380.47879 986.949158) 19074 POINT(721.90625 400.479523) 19075 POINT(60.8433037 624.307068) 19076 POINT(890.660583 25.9566326) 19077 POINT(506.327057 579.736023) 19078 POINT(330.500031 414.125122) 19079 POINT(735.84082 838.330383) 19080 POINT(266.702179 858.091187) 19081 POINT(372.324707 181.601959) 19082 POINT(698.226685 734.128967) 19083 POINT(267.44693 249.972717) 19084 POINT(810.761841 551.695862) 19085 POINT(409.492523 948.251709) 19086 POINT(61.3725243 648.222534) 19087 POINT(367.335602 520.999573) 19088 POINT(393.881531 229.265533) 19089 POINT(358.428833 860.956665) 19090 POINT(428.505463 116.568306) 19091 POINT(422.683594 738.71405) 19092 POINT(319.289856 701.744812) 19093 POINT(501.211212 859.644409) 19094 POINT(35.6224747 142.334534) 19095 POINT(401.532745 184.510452) 19096 POINT(549.738342 351.172607) 19097 POINT(449.546509 278.479004) 19098 POINT(203.988876 281.285767) 19099 POINT(931.908508 580.471069) 19100 POINT(996.174988 999.404236) 19101 POINT(397.281342 177.469147) 19102 POINT(718.00946 64.8342819) 19103 POINT(266.02951 708.812988) 19104 POINT(573.474182 420.656067) 19105 POINT(578.392273 461.491882) 19106 POINT(806.292053 885.410767) 19107 POINT(752.074707 112.466438) 19108 POINT(897.887573 70.6571579) 19109 POINT(910.832703 257.221069) 19110 POINT(431.134094 198.677322) 19111 POINT(253.358673 179.794403) 19112 POINT(826.075195 551.48175) 19113 POINT(452.121399 878.802124) 19114 POINT(869.983093 734.018982) 19115 POINT(678.39679 292.438385) 19116 POINT(517.021973 308.674744) 19117 POINT(344.316193 854.715271) 19118 POINT(506.99292 772.9151) 19119 POINT(415.226868 872.503357) 19120 POINT(335.839783 66.0716171) 19121 POINT(384.022369 911.122009) 19122 POINT(343.616699 454.205444) 19123 POINT(999.484314 103.769852) 19124 POINT(712.400757 543.754456) 19125 POINT(217.34523 511.089722) 19126 POINT(984.249023 495.929443) 19127 POINT(788.113098 821.348816) 19128 POINT(17.9422302 75.8723907) 19129 POINT(430.202393 534.44281) 19130 POINT(756.249207 685.332336) 19131 POINT(759.225464 565.171204) 19132 POINT(629.230347 847.596558) 19133 POINT(481.170288 949.588196) 19134 POINT(183.248749 981.794678) 19135 POINT(813.507996 74.9303741) 19136 POINT(612.562988 604.266418) 19137 POINT(507.04657 876.516235) 19138 POINT(246.465332 101.856888) 19139 POINT(113.702652 567.572449) 19140 POINT(878.839111 850.825134) 19141 POINT(520.568176 269.279083) 19142 POINT(740.816833 11.1733713) 19143 POINT(66.0758896 983.156311) 19144 POINT(236.117218 755.929626) 19145 POINT(415.232544 556.599731) 19146 POINT(560.948853 835.146362) 19147 POINT(521.420776 10.8809662) 19148 POINT(497.529053 202.660141) 19149 POINT(493.927185 970.866882) 19150 POINT(936.859924 318.151855) 19151 POINT(653.019897 114.305351) 19152 POINT(690.112793 686.544067) 19153 POINT(946.081177 968.622742) 19154 POINT(479.627594 110.685997) 19155 POINT(755.130127 963.261414) 19156 POINT(454.072662 51.6464348) 19157 POINT(812.30896 99.7515259) 19158 POINT(394.811096 844.422302) 19159 POINT(897.932556 649.688599) 19160 POINT(922.168762 376.770142) 19161 POINT(496.02536 917.928894) 19162 POINT(374.4245 167.086426) 19163 POINT(973.524414 815.59375) 19164 POINT(725.386047 676.346313) 19165 POINT(808.268982 41.4931793) 19166 POINT(487.945557 652.216919) 19167 POINT(172.411865 353.567719) 19168 POINT(283.725769 464.385864) 19169 POINT(864.977295 271.751892) 19170 POINT(858.646118 773.296387) 19171 POINT(341.095795 653.765686) 19172 POINT(209.909561 644.901489) 19173 POINT(895.216675 754.837708) 19174 POINT(33.5992088 937.400818) 19175 POINT(988.725464 465.98587) 19176 POINT(478.979828 638.498413) 19177 POINT(164.376389 533.579895) 19178 POINT(734.039246 910.427612) 19179 POINT(934.427734 321.456146) 19180 POINT(998.227234 132.371414) 19181 POINT(768.095703 477.459412) 19182 POINT(107.321465 834.130188) 19183 POINT(716.802551 116.167336) 19184 POINT(349.570129 349.735138) 19185 POINT(10.6980801 501.565796) 19186 POINT(692.547424 434.59726) 19187 POINT(923.207275 896.065186) 19188 POINT(770.456177 274.75296) 19189 POINT(446.167267 189.577667) 19190 POINT(58.993248 952.481384) 19191 POINT(538.83667 104.142395) 19192 POINT(889.552795 840.319275) 19193 POINT(430.205902 421.138733) 19194 POINT(479.79837 787.195312) 19195 POINT(264.237396 550.44751) 19196 POINT(339.937042 688.589233) 19197 POINT(208.675827 370.602783) 19198 POINT(62.941658 840.457275) 19199 POINT(504.778412 148.253357) 19200 POINT(135.191391 747.937927) 19201 POINT(150.72702 291.973938) 19202 POINT(477.353668 68.9820175) 19203 POINT(396.731781 23.1056767) 19204 POINT(612.757629 535.07251) 19205 POINT(724.179871 833.968384) 19206 POINT(784.082397 811.77771) 19207 POINT(802.00177 946.198364) 19208 POINT(824.095581 787.306763) 19209 POINT(206.233139 239.476486) 19210 POINT(910.75177 44.4224358) 19211 POINT(677.171875 169.498276) 19212 POINT(482.639496 757.548523) 19213 POINT(924.328308 675.305725) 19214 POINT(992.121338 830.85968) 19215 POINT(602.422974 647.269043) 19216 POINT(968.239258 263.339874) 19217 POINT(30.0078468 110.935394) 19218 POINT(140.376022 892.663879) 19219 POINT(542.008606 317.12085) 19220 POINT(430.720184 371.327179) 19221 POINT(422.864044 619.116943) 19222 POINT(205.84639 396.393677) 19223 POINT(100.355087 583.438049) 19224 POINT(735.38916 419.828979) 19225 POINT(462.181519 706.504639) 19226 POINT(742.17804 771.562744) 19227 POINT(636.489502 397.014618) 19228 POINT(849.761292 934.707458) 19229 POINT(530.63562 299.102631) 19230 POINT(699.541016 614.922607) 19231 POINT(604.37793 356.953125) 19232 POINT(283.475555 877.539551) 19233 POINT(347.415344 305.16684) 19234 POINT(335.289093 511.166992) 19235 POINT(397.892517 74.3597107) 19236 POINT(362.314362 580.121277) 19237 POINT(167.398743 257.30072) 19238 POINT(453.550354 905.829163) 19239 POINT(796.506042 632.093933) 19240 POINT(442.436035 665.629578) 19241 POINT(648.515259 395.836273) 19242 POINT(363.549225 3.06031346) 19243 POINT(831.447815 350.809357) 19244 POINT(652.375488 234.303696) 19245 POINT(221.188232 697.192688) 19246 POINT(881.03186 29.1385021) 19247 POINT(521.934875 228.747162) 19248 POINT(388.063568 600.297607) 19249 POINT(251.757629 773.757202) 19250 POINT(287.986572 101.974396) 19251 POINT(467.228821 361.220734) 19252 POINT(580.059814 906.394958) 19253 POINT(156.042313 275.933197) 19254 POINT(412.920776 377.541656) 19255 POINT(722.646912 365.45752) 19256 POINT(702.390442 14.5653839) 19257 POINT(889.707214 412.353851) 19258 POINT(897.277344 106.075539) 19259 POINT(736.293884 337.43924) 19260 POINT(598.827209 172.881165) 19261 POINT(918.860107 470.859344) 19262 POINT(273.142517 724.046814) 19263 POINT(378.158936 149.609299) 19264 POINT(465.138672 93.1027679) 19265 POINT(857.309509 770.688416) 19266 POINT(693.218262 132.331818) 19267 POINT(254.35936 961.792175) 19268 POINT(744.790894 238.27919) 19269 POINT(446.173615 305.436371) 19270 POINT(26.1027946 866.664124) 19271 POINT(566.69165 662.396179) 19272 POINT(270.769257 315.999878) 19273 POINT(447.037842 446.683014) 19274 POINT(558.242126 953.367065) 19275 POINT(751.286133 582.94812) 19276 POINT(717.639465 200.4729) 19277 POINT(321.615692 469.795319) 19278 POINT(728.486816 861.530273) 19279 POINT(10.0429363 236.234314) 19280 POINT(315.660034 765.393494) 19281 POINT(278.877197 336.262299) 19282 POINT(162.008316 112.207916) 19283 POINT(634.659851 16.7985229) 19284 POINT(822.704102 399.606323) 19285 POINT(384.864746 121.019348) 19286 POINT(767.398743 785.879578) 19287 POINT(715.445984 772.276062) 19288 POINT(949.944702 298.853546) 19289 POINT(950.925659 708.572632) 19290 POINT(814.099426 381.33017) 19291 POINT(425.747284 905.016907) 19292 POINT(793.70166 979.440063) 19293 POINT(342.848053 898.334717) 19294 POINT(716.872986 222.267273) 19295 POINT(577.693481 195.679688) 19296 POINT(338.543701 843.436279) 19297 POINT(686.394409 857.434021) 19298 POINT(719.854614 882.410767) 19299 POINT(556.108643 853.95343) 19300 POINT(765.686157 40.0776978) 19301 POINT(683.984558 938.363098) 19302 POINT(794.787903 905.451477) 19303 POINT(54.8091621 396.291687) 19304 POINT(125.91787 314.310059) 19305 POINT(902.788696 239.181442) 19306 POINT(846.371826 433.191406) 19307 POINT(263.14859 826.519226) 19308 POINT(917.737976 10.9675055) 19309 POINT(446.248199 925.590698) 19310 POINT(752.214111 223.340424) 19311 POINT(280.547943 252.398224) 19312 POINT(249.076981 911.860107) 19313 POINT(879.049316 257.051392) 19314 POINT(855.709534 937.860535) 19315 POINT(572.88623 509.718536) 19316 POINT(554.923828 123.086945) 19317 POINT(639.833862 463.211548) 19318 POINT(277.2276 513.4104) 19319 POINT(227.00618 585.201294) 19320 POINT(293.373596 801.178772) 19321 POINT(946.4375 102.270317) 19322 POINT(812.319519 887.359314) 19323 POINT(608.225281 630.483582) 19324 POINT(649.057861 109.215073) 19325 POINT(375.20578 299.499786) 19326 POINT(245.219788 346.001526) 19327 POINT(780.62262 141.676666) 19328 POINT(35.6138992 427.847015) 19329 POINT(878.943237 312.000702) 19330 POINT(621.741882 286.018402) 19331 POINT(711.006714 442.468964) 19332 POINT(107.794769 511.199768) 19333 POINT(997.311523 194.868866) 19334 POINT(397.735321 235.89711) 19335 POINT(844.852051 953.468933) 19336 POINT(69.0167618 973.913696) 19337 POINT(408.998993 954.301453) 19338 POINT(407.593262 570.931519) 19339 POINT(116.123436 856.461975) 19340 POINT(291.587555 223.125748) 19341 POINT(776.740906 464.772247) 19342 POINT(281.868866 473.592743) 19343 POINT(832.792358 669.480774) 19344 POINT(654.552063 707.979065) 19345 POINT(44.2800293 600.258667) 19346 POINT(283.880157 340.471924) 19347 POINT(165.980057 937.064697) 19348 POINT(548.03949 149.289886) 19349 POINT(958.612305 483.603119) 19350 POINT(532.25238 17.6619148) 19351 POINT(163.046692 709.812256) 19352 POINT(193.189728 233.2883) 19353 POINT(611.371887 493.443268) 19354 POINT(229.667908 958.358276) 19355 POINT(303.577698 738.304443) 19356 POINT(783.182861 105.889648) 19357 POINT(219.967331 684.748779) 19358 POINT(827.663757 639.62384) 19359 POINT(622.10144 338.706329) 19360 POINT(963.590698 887.741577) 19361 POINT(202.087418 576.850952) 19362 POINT(23.1369762 349.676239) 19363 POINT(332.505554 700.82843) 19364 POINT(339.214905 345.33139) 19365 POINT(836.455078 841.955933) 19366 POINT(104.288635 762.720093) 19367 POINT(706.501648 4.15714693) 19368 POINT(19.7709274 799.72699) 19369 POINT(448.213348 287.481995) 19370 POINT(442.057709 555.261658) 19371 POINT(682.120728 83.3398132) 19372 POINT(698.2229 332.064362) 19373 POINT(109.086838 667.163513) 19374 POINT(857.665833 686.006042) 19375 POINT(308.105408 541.836914) 19376 POINT(393.269928 353.682465) 19377 POINT(300.468903 278.716125) 19378 POINT(187.714783 860.85199) 19379 POINT(666.196838 150.929672) 19380 POINT(781.428894 648.847046) 19381 POINT(851.843323 9.95871067) 19382 POINT(615.348572 135.163666) 19383 POINT(355.697479 90.9982529) 19384 POINT(994.354858 69.2926712) 19385 POINT(737.456604 480.639099) 19386 POINT(239.312576 567.411804) 19387 POINT(973.323608 92.9631882) 19388 POINT(863.485718 162.351624) 19389 POINT(990.914795 193.813156) 19390 POINT(912.312012 331.441711) 19391 POINT(276.244568 820.007446) 19392 POINT(856.791443 148.227936) 19393 POINT(80.3872833 158.477051) 19394 POINT(595.892822 719.039185) 19395 POINT(877.33783 893.174805) 19396 POINT(371.356018 827.013245) 19397 POINT(576.35614 274.254852) 19398 POINT(351.138519 20.1294651) 19399 POINT(389.072754 809.16571) 19400 POINT(620.713257 192.330383) 19401 POINT(839.360168 879.295288) 19402 POINT(612.795654 354.858643) 19403 POINT(906.067627 624.629089) 19404 POINT(87.3044052 756.03009) 19405 POINT(756.937256 254.132477) 19406 POINT(579.012573 149.970657) 19407 POINT(596.248474 688.47406) 19408 POINT(398.120148 847.15448) 19409 POINT(266.979431 547.117371) 19410 POINT(389.695374 101.307365) 19411 POINT(956.670349 892.203857) 19412 POINT(525.534973 438.420746) 19413 POINT(518.970886 541.128357) 19414 POINT(263.555176 144.92334) 19415 POINT(982.444397 877.998352) 19416 POINT(415.537506 374.767517) 19417 POINT(45.0882454 916.620667) 19418 POINT(917.242188 171.22049) 19419 POINT(95.8470535 395.25116) 19420 POINT(502.005127 231.044601) 19421 POINT(239.898758 182.675919) 19422 POINT(399.530579 959.672424) 19423 POINT(187.571564 528.490601) 19424 POINT(78.3673248 409.716949) 19425 POINT(780.4021 245.565048) 19426 POINT(939.341125 86.1221771) 19427 POINT(533.212402 833.09314) 19428 POINT(166.946686 504.492188) 19429 POINT(357.41687 663.438599) 19430 POINT(528.455444 360.30072) 19431 POINT(665.45874 509.922974) 19432 POINT(351.462372 402.070038) 19433 POINT(234.822067 996.11084) 19434 POINT(738.099548 688.128418) 19435 POINT(506.103699 626.008179) 19436 POINT(19.6259899 71.7513275) 19437 POINT(704.921997 300.505554) 19438 POINT(703.142029 121.525024) 19439 POINT(191.860428 45.5907669) 19440 POINT(600.454895 501.433044) 19441 POINT(466.209351 745.181824) 19442 POINT(298.47403 257.86795) 19443 POINT(64.1082764 174.36441) 19444 POINT(674.873962 778.555298) 19445 POINT(314.060211 521.461426) 19446 POINT(279.207275 81.9033661) 19447 POINT(235.074631 839.440063) 19448 POINT(288.37088 885.855042) 19449 POINT(305.402893 714.030029) 19450 POINT(559.648621 804.827332) 19451 POINT(991.592102 628.556152) 19452 POINT(400.917267 384.31958) 19453 POINT(735.158386 560.485352) 19454 POINT(865.577576 248.419724) 19455 POINT(52.4519768 794.277161) 19456 POINT(172.06105 789.523926) 19457 POINT(845.26062 577.158813) 19458 POINT(710.17511 846.526794) 19459 POINT(356.509491 392.400024) 19460 POINT(698.042419 112.572899) 19461 POINT(176.32048 357.636536) 19462 POINT(16.0222778 391.852386) 19463 POINT(626.076965 668.515442) 19464 POINT(892.980469 733.159546) 19465 POINT(867.505981 460.75946) 19466 POINT(733.906555 242.932739) 19467 POINT(423.776337 832.646667) 19468 POINT(437.622986 499.789551) 19469 POINT(11.9697771 696.481567) 19470 POINT(493.745514 824.332275) 19471 POINT(800.902954 269.115997) 19472 POINT(106.846924 711.01123) 19473 POINT(383.160858 290.818726) 19474 POINT(663.75592 902.51355) 19475 POINT(921.487244 917.264526) 19476 POINT(331.042603 421.528625) 19477 POINT(461.617828 865.220886) 19478 POINT(191.068924 300.497498) 19479 POINT(238.622055 28.3785477) 19480 POINT(546.71051 338.365509) 19481 POINT(712.34613 901.052734) 19482 POINT(250.310257 426.34436) 19483 POINT(898.258118 755.151672) 19484 POINT(748.043579 424.786499) 19485 POINT(489.641876 376.469391) 19486 POINT(36.2357216 233.650238) 19487 POINT(50.550869 62.2384834) 19488 POINT(663.964783 213.470184) 19489 POINT(779.23114 560.824036) 19490 POINT(2.33259487 6.66761494) 19491 POINT(659.975952 259.932404) 19492 POINT(154.033432 745.46936) 19493 POINT(226.851929 530.848633) 19494 POINT(469.367493 668.32251) 19495 POINT(222.813995 57.7267075) 19496 POINT(741.830994 997.781311) 19497 POINT(547.913757 833.197327) 19498 POINT(806.181702 146.315521) 19499 POINT(524.235962 410.494263) 19500 POINT(685.879944 639.891052) 19501 POINT(464.628418 859.545898) 19502 POINT(319.605316 700.656738) 19503 POINT(197.105835 587.24823) 19504 POINT(625.847168 968.439026) 19505 POINT(775.011108 923.291321) 19506 POINT(581.182007 15.4003305) 19507 POINT(380.748291 830.92218) 19508 POINT(635.726562 909.203613) 19509 POINT(22.4120121 730.997131) 19510 POINT(165.466034 288.007294) 19511 POINT(220.312363 697.335693) 19512 POINT(465.892334 46.878933) 19513 POINT(504.743439 927.081787) 19514 POINT(677.974243 511.679138) 19515 POINT(295.995453 662.485901) 19516 POINT(862.358643 745.665833) 19517 POINT(39.3268356 656.849365) 19518 POINT(510.44516 639.170166) 19519 POINT(326.274048 869.534851) 19520 POINT(114.277771 557.484619) 19521 POINT(982.292114 640.812378) 19522 POINT(976.878418 340.999084) 19523 POINT(650.420959 950.336731) 19524 POINT(399.652588 279.656403) 19525 POINT(490.718018 82.3593292) 19526 POINT(355.897675 626.645447) 19527 POINT(62.9710541 701.076721) 19528 POINT(74.4366608 220.188202) 19529 POINT(911.212219 841.170105) 19530 POINT(893.300232 684.229614) 19531 POINT(546.431274 17.56991) 19532 POINT(781.638428 456.338318) 19533 POINT(480.385254 696.38446) 19534 POINT(3.22775793 912.340515) 19535 POINT(328.412201 902.994263) 19536 POINT(144.742813 130.924622) 19537 POINT(230.68222 196.380798) 19538 POINT(747.211914 267.087494) 19539 POINT(475.492218 549.309509) 19540 POINT(853.707886 120.87999) 19541 POINT(109.293198 546.122253) 19542 POINT(167.419083 728.118835) 19543 POINT(928.508545 463.339233) 19544 POINT(151.990234 733.846497) 19545 POINT(838.370605 218.3815) 19546 POINT(203.73967 899.261353) 19547 POINT(482.600159 359.470886) 19548 POINT(89.4979706 441.140015) 19549 POINT(971.540466 491.754303) 19550 POINT(733.936462 502.601654) 19551 POINT(720.213318 73.1546173) 19552 POINT(419.064453 39.2052956) 19553 POINT(934.702026 916.225525) 19554 POINT(741.887634 799.241821) 19555 POINT(316.410675 62.8578873) 19556 POINT(682.983032 46.7213707) 19557 POINT(578.367798 786.151794) 19558 POINT(741.030396 775.628052) 19559 POINT(453.209198 162.860611) 19560 POINT(861.337097 590.805237) 19561 POINT(914.303589 60.8769798) 19562 POINT(358.430634 271.263245) 19563 POINT(303.30484 125.250885) 19564 POINT(935.30481 513.301697) 19565 POINT(260.987427 814.797974) 19566 POINT(419.4758 91.7800522) 19567 POINT(673.423889 146.708755) 19568 POINT(856.31488 936.936218) 19569 POINT(980.411926 221.550308) 19570 POINT(964.006714 550.763733) 19571 POINT(933.674805 14.1416302) 19572 POINT(705.872742 71.145607) 19573 POINT(353.01413 281.083954) 19574 POINT(371.776001 814.379089) 19575 POINT(301.656097 722.961548) 19576 POINT(281.074036 608.692261) 19577 POINT(908.023865 983.751892) 19578 POINT(178.440277 884.76947) 19579 POINT(398.709869 422.771393) 19580 POINT(947.265747 666.7052) 19581 POINT(703.279846 372.134979) 19582 POINT(222.86322 51.3596153) 19583 POINT(750.592041 327.453156) 19584 POINT(362.011993 859.580872) 19585 POINT(631.570312 9.17927742) 19586 POINT(482.328003 163.609268) 19587 POINT(565.964233 790.12854) 19588 POINT(593.466248 756.215637) 19589 POINT(819.812805 690.321899) 19590 POINT(324.327057 134.426559) 19591 POINT(693.494751 88.1879654) 19592 POINT(231.446762 670.330872) 19593 POINT(582.895691 847.634766) 19594 POINT(931.917603 670.366577) 19595 POINT(131.988052 589.561829) 19596 POINT(320.958099 460.191071) 19597 POINT(195.762161 985.615662) 19598 POINT(344.201935 342.902802) 19599 POINT(847.846924 878.632751) 19600 POINT(335.59613 772.803528) 19601 POINT(955.323669 661.109192) 19602 POINT(894.311646 764.473938) 19603 POINT(940.302124 108.665779) 19604 POINT(952.219666 957.72821) 19605 POINT(618.050232 973.939758) 19606 POINT(824.34491 813.672729) 19607 POINT(387.228424 317.35907) 19608 POINT(88.4672699 696.914612) 19609 POINT(319.590393 270.192535) 19610 POINT(510.027252 565.856995) 19611 POINT(702.998718 693.094116) 19612 POINT(521.1427 249.522781) 19613 POINT(509.532501 776.677856) 19614 POINT(37.4350815 828.628113) 19615 POINT(844.710022 811.692078) 19616 POINT(416.188202 94.4724197) 19617 POINT(267.427124 182.967453) 19618 POINT(839.943054 956.034302) 19619 POINT(614.248657 676.957825) 19620 POINT(269.909454 668.506104) 19621 POINT(605.447449 766.492249) 19622 POINT(725.625793 921.023071) 19623 POINT(621.044495 993.021729) 19624 POINT(86.312645 843.838806) 19625 POINT(8.5725956 516.54187) 19626 POINT(903.664612 462.5784) 19627 POINT(593.996704 472.463806) 19628 POINT(96.8577728 767.007141) 19629 POINT(514.937134 854.60968) 19630 POINT(552.881104 492.143616) 19631 POINT(460.936554 141.433014) 19632 POINT(966.628967 689.319214) 19633 POINT(96.9969635 971.376892) 19634 POINT(66.3391495 843.345581) 19635 POINT(150.125946 541.450439) 19636 POINT(224.866882 459.346771) 19637 POINT(968.419983 504.730835) 19638 POINT(353.027039 879.698364) 19639 POINT(510.672119 447.311127) 19640 POINT(608.004883 419.187927) 19641 POINT(712.118469 268.566711) 19642 POINT(480.952057 436.879547) 19643 POINT(97.3729019 221.476837) 19644 POINT(109.794067 548.770752) 19645 POINT(801.596313 8.71913815) 19646 POINT(505.550354 69.3369522) 19647 POINT(820.389221 207.578186) 19648 POINT(795.799438 836.2547) 19649 POINT(170.793884 710.226135) 19650 POINT(543.134827 595.395752) 19651 POINT(621.27417 629.12085) 19652 POINT(858.493958 17.6268635) 19653 POINT(976.869263 809.226196) 19654 POINT(21.1741428 490.702118) 19655 POINT(404.271088 304.217407) 19656 POINT(964.372192 24.8794537) 19657 POINT(595.864441 773.142334) 19658 POINT(565.516724 766.752502) 19659 POINT(425.426117 113.143364) 19660 POINT(675.951538 709.693176) 19661 POINT(192.9608 904.409058) 19662 POINT(169.24321 589.421387) 19663 POINT(221.942642 562.74115) 19664 POINT(619.222961 668.340637) 19665 POINT(917.037781 895.847046) 19666 POINT(128.651489 41.8154526) 19667 POINT(950.338928 980.174377) 19668 POINT(111.060448 283.563354) 19669 POINT(883.505127 619.896362) 19670 POINT(728.949463 116.445389) 19671 POINT(694.352173 838.259033) 19672 POINT(161.29129 420.463989) 19673 POINT(629.887817 869.265381) 19674 POINT(815.549255 233.620865) 19675 POINT(902.165833 465.577179) 19676 POINT(120.577034 565.995605) 19677 POINT(655.400269 283.159058) 19678 POINT(196.42894 326.138275) 19679 POINT(617.418945 926.802551) 19680 POINT(757.948181 585.417908) 19681 POINT(988.753601 491.097687) 19682 POINT(286.846466 804.744873) 19683 POINT(579.589722 172.147247) 19684 POINT(220.782455 684.130676) 19685 POINT(467.699341 585.442078) 19686 POINT(529.761841 524.527039) 19687 POINT(586.728333 649.562012) 19688 POINT(155.211121 609.581482) 19689 POINT(559.318115 394.09021) 19690 POINT(903.643738 209.284363) 19691 POINT(737.146667 449.301666) 19692 POINT(246.383224 605.486572) 19693 POINT(101.822533 666.413513) 19694 POINT(263.906311 659.115601) 19695 POINT(296.555115 707.692566) 19696 POINT(575.713135 139.391205) 19697 POINT(306.648712 208.351761) 19698 POINT(355.04361 465.856049) 19699 POINT(973.269958 435.415588) 19700 POINT(486.181885 964.634399) 19701 POINT(723.870972 206.687363) 19702 POINT(77.597847 891.670471) 19703 POINT(326.497467 155.345306) 19704 POINT(96.9578705 649.07373) 19705 POINT(644.480042 467.87146) 19706 POINT(997.41925 28.0197163) 19707 POINT(881.333618 735.961975) 19708 POINT(215.04892 305.463501) 19709 POINT(589.824341 63.3756638) 19710 POINT(144.245132 345.383087) 19711 POINT(279.001068 588.57959) 19712 POINT(154.391144 892.16925) 19713 POINT(121.521172 921.394714) 19714 POINT(862.445374 268.532104) 19715 POINT(451.978058 960.110657) 19716 POINT(891.727295 117.940659) 19717 POINT(194.402451 233.827179) 19718 POINT(848.853821 467.816772) 19719 POINT(381.056396 397.81308) 19720 POINT(63.8210716 680.753357) 19721 POINT(670.567505 157.813126) 19722 POINT(540.922485 143.837677) 19723 POINT(464.998901 588.44342) 19724 POINT(542.000488 298.270416) 19725 POINT(414.373138 182.707993) 19726 POINT(703.009216 701.042969) 19727 POINT(913.349182 681.465454) 19728 POINT(707.717346 746.262207) 19729 POINT(596.199463 706.225281) 19730 POINT(399.425995 855.202271) 19731 POINT(859.079651 894.440552) 19732 POINT(96.7560654 911.362427) 19733 POINT(447.086975 817.580811) 19734 POINT(539.949463 400.373962) 19735 POINT(80.1459427 668.452454) 19736 POINT(779.921082 685.828613) 19737 POINT(726.848816 20.8235378) 19738 POINT(836.81134 572.896362) 19739 POINT(317.650055 892.396118) 19740 POINT(704.474792 384.512238) 19741 POINT(595.020203 648.139038) 19742 POINT(321.760376 193.097839) 19743 POINT(183.195343 747.186218) 19744 POINT(233.296844 248.034378) 19745 POINT(407.013611 10.7642078) 19746 POINT(537.605896 539.833496) 19747 POINT(559.151306 534.417664) 19748 POINT(287.677856 511.20163) 19749 POINT(197.107498 914.25177) 19750 POINT(140.722778 218.622421) 19751 POINT(212.927353 448.737976) 19752 POINT(824.857605 461.985016) 19753 POINT(255.403595 25.176754) 19754 POINT(929.320129 121.070938) 19755 POINT(69.9889374 629.166016) 19756 POINT(862.862793 893.924988) 19757 POINT(257.645111 717.976318) 19758 POINT(246.844177 941.433899) 19759 POINT(220.230637 981.820007) 19760 POINT(902.894165 363.614075) 19761 POINT(864.797058 453.468353) 19762 POINT(300.707458 615.578003) 19763 POINT(268.455322 204.993088) 19764 POINT(393.459045 704.947632) 19765 POINT(573.54657 444.693848) 19766 POINT(183.605835 478.276733) 19767 POINT(82.090004 167.242249) 19768 POINT(830.640015 323.122437) 19769 POINT(869.390198 351.080231) 19770 POINT(288.006042 896.679199) 19771 POINT(337.902374 290.131866) 19772 POINT(195.335266 893.902527) 19773 POINT(410.731293 8.52536774) 19774 POINT(363.956177 630.96106) 19775 POINT(524.364929 869.50061) 19776 POINT(691.00354 227.459) 19777 POINT(55.4204483 750.851685) 19778 POINT(686.192017 197.577347) 19779 POINT(217.445984 332.59668) 19780 POINT(164.388748 221.131897) 19781 POINT(30.427784 707.183289) 19782 POINT(668.582214 66.2036514) 19783 POINT(514.990295 273.15271) 19784 POINT(166.897964 21.7493362) 19785 POINT(440.845062 570.148682) 19786 POINT(792.276611 608.363953) 19787 POINT(488.483765 732.44873) 19788 POINT(345.748962 745.679321) 19789 POINT(616.172913 721.415405) 19790 POINT(898.490051 333.909027) 19791 POINT(390.881134 601.637451) 19792 POINT(741.700928 363.578247) 19793 POINT(499.85611 273.912231) 19794 POINT(737.677917 100.922523) 19795 POINT(145.306656 209.083664) 19796 POINT(614.125854 646.839233) 19797 POINT(402.287994 544.197571) 19798 POINT(163.925568 665.296448) 19799 POINT(331.821777 126.194778) 19800 POINT(614.37439 394.032562) 19801 POINT(958.012939 703.784119) 19802 POINT(516.698486 148.131119) 19803 POINT(488.086212 976.197632) 19804 POINT(484.834503 508.169647) 19805 POINT(54.6131287 874.830872) 19806 POINT(541.666748 742.279724) 19807 POINT(44.6213531 562.541748) 19808 POINT(973.776978 879.410522) 19809 POINT(833.774048 733.465149) 19810 POINT(668.140198 253.770584) 19811 POINT(626.518555 947.087341) 19812 POINT(325.027374 442.874695) 19813 POINT(604.281372 763.100098) 19814 POINT(582.719177 879.505371) 19815 POINT(770.81665 202.961136) 19816 POINT(526.698792 227.503738) 19817 POINT(652.208496 660.462463) 19818 POINT(817.087708 959.544434) 19819 POINT(332.406555 442.941437) 19820 POINT(484.665283 689.46283) 19821 POINT(485.313293 38.6494064) 19822 POINT(502.444855 310.455902) 19823 POINT(981.203613 381.459045) 19824 POINT(424.151337 132.358459) 19825 POINT(6.66920948 494.382629) 19826 POINT(533.891235 145.617172) 19827 POINT(229.460693 126.778214) 19828 POINT(116.758224 556.587341) 19829 POINT(476.814148 310.731354) 19830 POINT(135.157211 519.024353) 19831 POINT(370.478424 119.6474) 19832 POINT(980.442383 851.421753) 19833 POINT(894.208923 551.925903) 19834 POINT(217.380814 691.076294) 19835 POINT(558.601074 135.687103) 19836 POINT(706.407776 845.975037) 19837 POINT(600.553772 73.4860306) 19838 POINT(985.212097 807.966064) 19839 POINT(15.2702284 51.0079765) 19840 POINT(829.568298 368.979462) 19841 POINT(500.519836 18.7391396) 19842 POINT(959.342468 810.725586) 19843 POINT(7.04068947 634.029236) 19844 POINT(578.181885 132.349777) 19845 POINT(274.711243 701.906006) 19846 POINT(956.626892 545.634216) 19847 POINT(808.845703 971.193909) 19848 POINT(413.454132 949.791687) 19849 POINT(360.178497 388.281921) 19850 POINT(597.28772 634.614685) 19851 POINT(339.431976 260.253998) 19852 POINT(901.353088 529.256836) 19853 POINT(274.565613 373.643616) 19854 POINT(593.258545 782.405518) 19855 POINT(535.767456 612.025146) 19856 POINT(946.573364 836.832458) 19857 POINT(67.977272 937.863892) 19858 POINT(412.548004 846.711914) 19859 POINT(819.357422 189.98735) 19860 POINT(962.532593 819.694275) 19861 POINT(300.9133 201.816757) 19862 POINT(911.572083 178.201706) 19863 POINT(199.787491 486.833893) 19864 POINT(251.478256 97.0396805) 19865 POINT(967.123352 652.008301) 19866 POINT(180.725189 449.126587) 19867 POINT(659.445618 788.048523) 19868 POINT(725.229553 80.4577484) 19869 POINT(206.993942 113.969543) 19870 POINT(158.030502 432.513885) 19871 POINT(468.256226 904.816406) 19872 POINT(109.771713 868.981262) 19873 POINT(490.086761 253.298782) 19874 POINT(531.528809 968.28656) 19875 POINT(988.394409 72.0512238) 19876 POINT(945.868774 179.10498) 19877 POINT(184.705841 262.343933) 19878 POINT(73.1378708 658.335205) 19879 POINT(346.329559 502.047668) 19880 POINT(23.0529594 516.34436) 19881 POINT(77.8784027 250.864792) 19882 POINT(825.032288 669.477783) 19883 POINT(73.1815186 460.245209) 19884 POINT(365.796722 772.446167) 19885 POINT(460.892151 0.618643641) 19886 POINT(494.166016 391.408722) 19887 POINT(444.254059 886.814392) 19888 POINT(528.367065 441.153625) 19889 POINT(853.539734 166.663055) 19890 POINT(1.37851691 596.151917) 19891 POINT(784.744873 526.255371) 19892 POINT(748.807678 685.466309) 19893 POINT(304.479065 712.271667) 19894 POINT(378.596954 176.196381) 19895 POINT(451.012177 246.923462) 19896 POINT(462.690277 560.62439) 19897 POINT(475.625031 349.710297) 19898 POINT(110.966507 500.408264) 19899 POINT(545.412964 733.373596) 19900 POINT(783.720886 799.586243) 19901 POINT(395.247559 25.722414) 19902 POINT(580.311584 919.975342) 19903 POINT(677.608582 16.6419334) 19904 POINT(820.982483 701.557434) 19905 POINT(847.457397 38.4239731) 19906 POINT(482.15033 981.056213) 19907 POINT(246.367599 371.060333) 19908 POINT(121.541023 829.167786) 19909 POINT(855.019226 201.410156) 19910 POINT(960.556519 456.468262) 19911 POINT(783.27887 950.924011) 19912 POINT(102.337311 416.182098) 19913 POINT(607.940186 581.227173) 19914 POINT(733.481323 395.664642) 19915 POINT(873.418762 166.311829) 19916 POINT(66.7312775 615.170593) 19917 POINT(492.038391 725.964417) 19918 POINT(665.719849 10.4130793) 19919 POINT(47.901825 204.582504) 19920 POINT(288.762177 973.352295) 19921 POINT(579.705017 975.573853) 19922 POINT(87.5253143 363.004028) 19923 POINT(829.374573 292.549286) 19924 POINT(692.132446 814.865051) 19925 POINT(59.3310089 398.624268) 19926 POINT(653.947083 504.479462) 19927 POINT(803.896667 264.059875) 19928 POINT(851.118591 529.003845) 19929 POINT(600.37677 135.551025) 19930 POINT(693.285278 922.28833) 19931 POINT(191.286057 748.68634) 19932 POINT(397.057831 116.50959) 19933 POINT(577.821838 445.062042) 19934 POINT(802.628967 899.937439) 19935 POINT(890.886292 829.456055) 19936 POINT(426.754547 729.77771) 19937 POINT(412.738403 548.213318) 19938 POINT(914.261841 665.622314) 19939 POINT(390.849243 331.030884) 19940 POINT(178.095657 357.896942) 19941 POINT(24.991415 443.768372) 19942 POINT(178.792007 12.4847631) 19943 POINT(246.4077 994.468628) 19944 POINT(63.3598862 253.716064) 19945 POINT(539.575134 228.807343) 19946 POINT(789.181702 410.060211) 19947 POINT(56.2447395 670.677673) 19948 POINT(132.150391 177.676544) 19949 POINT(939.853455 100.15432) 19950 POINT(304.422943 494.639099) 19951 POINT(995.95166 321.901703) 19952 POINT(173.576355 41.9375877) 19953 POINT(318.980652 135.040833) 19954 POINT(122.426186 225.683411) 19955 POINT(3.69678044 59.0480614) 19956 POINT(961.254028 78.3591232) 19957 POINT(745.034729 153.527252) 19958 POINT(498.758789 926.101807) 19959 POINT(655.611511 662.400452) 19960 POINT(594.892944 225.1978) 19961 POINT(525.905762 450.553986) 19962 POINT(911.190369 886.101379) 19963 POINT(617.032837 34.2326279) 19964 POINT(498.678711 29.9094276) 19965 POINT(836.737793 952.096252) 19966 POINT(629.573242 203.498489) 19967 POINT(310.623474 814.066284) 19968 POINT(399.35849 999.240967) 19969 POINT(255.730865 397.748322) 19970 POINT(66.4047318 57.7839966) 19971 POINT(103.524788 950.793579) 19972 POINT(525.881653 992.833801) 19973 POINT(743.368713 481.163666) 19974 POINT(855.491089 670.904053) 19975 POINT(883.079285 370.610199) 19976 POINT(347.641937 952.849731) 19977 POINT(995.643738 490.130005) 19978 POINT(634.450012 794.630249) 19979 POINT(364.293243 5.68271446) 19980 POINT(399.814087 989.66864) 19981 POINT(903.610229 879.659119) 19982 POINT(191.361649 682.557068) 19983 POINT(852.092346 355.699493) 19984 POINT(131.97258 602.498779) 19985 POINT(59.6037369 384.323334) 19986 POINT(976.69696 154.18013) 19987 POINT(467.555908 442.931396) 19988 POINT(260.125214 603.775696) 19989 POINT(864.722229 730.171753) 19990 POINT(978.722473 539.17041) 19991 POINT(39.6987877 491.155151) 19992 POINT(802.49054 137.518921) 19993 POINT(812.673645 741.911011) 19994 POINT(613.901978 1.87588942) 19995 POINT(963.001709 909.768799) 19996 POINT(835.792175 34.3512383) 19997 POINT(951.850342 657.637329) 19998 POINT(593.384583 989.244751) 19999 POINT(325.774811 196.654984) 20000 POINT(21.5392437 629.677246) 20001 POINT(360.500519 761.257263) 20002 POINT(692.489929 319.778778) 20003 POINT(525.57135 186.824539) 20004 POINT(120.707672 86.5542755) 20005 POINT(709.124023 21.8367615) 20006 POINT(972.170898 736.790222) 20007 POINT(405.250977 668.59967) 20008 POINT(40.4310188 211.080429) 20009 POINT(629.72644 289.470215) 20010 POINT(279.755524 586.147644) 20011 POINT(666.926086 765.072083) 20012 POINT(437.756683 725.661194) 20013 POINT(663.325867 738.861206) 20014 POINT(790.838318 646.863403) 20015 POINT(950.905579 635.797852) 20016 POINT(543.217224 974.307007) 20017 POINT(15.1112137 674.659668) 20018 POINT(945.01416 42.2856064) 20019 POINT(502.885651 992.169067) 20020 POINT(660.912537 74.1521454) 20021 POINT(210.91243 516.701355) 20022 POINT(375.21521 590.325317) 20023 POINT(795.017517 639.625671) 20024 POINT(751.993835 598.674622) 20025 POINT(19.1471062 768.646423) 20026 POINT(333.734131 913.060974) 20027 POINT(815.11676 760.851013) 20028 POINT(614.884949 980.636047) 20029 POINT(679.168762 40.1162262) 20030 POINT(677.585754 119.226959) 20031 POINT(993.160583 936.31842) 20032 POINT(438.274017 956.549072) 20033 POINT(559.948059 740.279419) 20034 POINT(691.680481 897.508789) 20035 POINT(895.353027 962.034363) 20036 POINT(921.850037 539.519958) 20037 POINT(862.2771 889.937805) 20038 POINT(900.351868 414.228241) 20039 POINT(883.4198 369.049316) 20040 POINT(734.958923 203.601074) 20041 POINT(873.193726 609.517517) 20042 POINT(546.102966 495.919312) 20043 POINT(910.428467 175.28508) 20044 POINT(814.794373 190.329758) 20045 POINT(583.081848 231.968491) 20046 POINT(599.004272 195.457367) 20047 POINT(504.311646 807.452209) 20048 POINT(893.437683 106.916695) 20049 POINT(183.910156 662.431152) 20050 POINT(0.998158336 989.819275) 20051 POINT(776.40448 319.309723) 20052 POINT(687.004028 275.587341) 20053 POINT(81.3311234 560.626465) 20054 POINT(346.433868 538.216003) 20055 POINT(984.689026 2.24441338) 20056 POINT(380.348267 614.868591) 20057 POINT(573.867981 157.280914) 20058 POINT(353.477844 141.252777) 20059 POINT(780.07312 235.12413) 20060 POINT(397.229858 186.151871) 20061 POINT(279.177002 32.4963913) 20062 POINT(290.614807 784.937073) 20063 POINT(768.912231 952.606018) 20064 POINT(958.529968 922.65332) 20065 POINT(720.379517 981.829041) 20066 POINT(988.274536 927.767395) 20067 POINT(436.116455 424.557129) 20068 POINT(600.060425 472.930054) 20069 POINT(224.715012 174.94072) 20070 POINT(187.690308 994.801025) 20071 POINT(790.567627 133.971527) 20072 POINT(646.699341 537.401489) 20073 POINT(432.276398 172.039841) 20074 POINT(757.415283 879.512451) 20075 POINT(318.204254 416.744476) 20076 POINT(621.033264 553.862793) 20077 POINT(264.344574 4.92855787) 20078 POINT(742.492432 622.417542) 20079 POINT(958.014526 183.890579) 20080 POINT(702.380371 96.7672424) 20081 POINT(158.848129 452.325989) 20082 POINT(302.095581 834.855164) 20083 POINT(852.310791 485.270203) 20084 POINT(646.016846 895.093567) 20085 POINT(744.731567 843.237976) 20086 POINT(338.527557 366.977783) 20087 POINT(565.042053 893.613647) 20088 POINT(22.6202793 944.902283) 20089 POINT(897.523621 207.49588) 20090 POINT(23.7837772 180.921249) 20091 POINT(310.532288 688.610901) 20092 POINT(244.39325 795.225464) 20093 POINT(295.153992 359.188019) 20094 POINT(489.457886 383.284485) 20095 POINT(489.917572 603.059204) 20096 POINT(607.022095 719.722229) 20097 POINT(176.076523 546.559509) 20098 POINT(661.588013 895.465759) 20099 POINT(493.685791 456.539581) 20100 POINT(495.573547 151.572708) 20101 POINT(991.012268 631.057007) 20102 POINT(594.11145 296.065735) 20103 POINT(296.106567 346.818146) 20104 POINT(977.625854 455.370239) 20105 POINT(35.1359863 368.547913) 20106 POINT(682.916504 956.481201) 20107 POINT(840.971375 195.145248) 20108 POINT(238.37706 837.313171) 20109 POINT(949.285583 257.342712) 20110 POINT(827.050415 708.978516) 20111 POINT(597.947083 348.852661) 20112 POINT(700.168457 953.784485) 20113 POINT(186.783417 590.503601) 20114 POINT(944.462402 935.948364) 20115 POINT(954.978455 633.124451) 20116 POINT(212.80542 568.447754) 20117 POINT(156.714722 804.021545) 20118 POINT(246.730728 149.708664) 20119 POINT(304.55838 713.544617) 20120 POINT(401.254974 429.276581) 20121 POINT(775.017273 947.797241) 20122 POINT(330.544983 844.136536) 20123 POINT(780.317383 882.000916) 20124 POINT(113.743095 389.473694) 20125 POINT(581.493835 122.96209) 20126 POINT(453.282135 642.572937) 20127 POINT(605.266052 410.75058) 20128 POINT(925.97113 680.025635) 20129 POINT(413.866669 26.9272518) 20130 POINT(325.837616 540.859619) 20131 POINT(924.158203 432.930145) 20132 POINT(826.115356 156.676666) 20133 POINT(869.251343 326.650024) 20134 POINT(377.942047 350.030243) 20135 POINT(809.824219 902.519409) 20136 POINT(530.469482 290.395813) 20137 POINT(428.935028 440.958954) 20138 POINT(729.514404 280.093384) 20139 POINT(856.957031 562.743896) 20140 POINT(361.034973 647.949646) 20141 POINT(174.101715 454.380066) 20142 POINT(36.1731033 974.507202) 20143 POINT(406.716736 9.12876225) 20144 POINT(254.059525 617.982361) 20145 POINT(478.155426 307.758606) 20146 POINT(967.846619 204.361557) 20147 POINT(981.651733 871.892517) 20148 POINT(262.468994 178.043396) 20149 POINT(925.5495 115.071686) 20150 POINT(326.495819 861.945679) 20151 POINT(952.81781 862.096313) 20152 POINT(865.333923 569.293213) 20153 POINT(977.538391 441.179565) 20154 POINT(712.279846 855.295593) 20155 POINT(809.608459 926.93988) 20156 POINT(503.956726 848.155212) 20157 POINT(582.026306 641.864319) 20158 POINT(207.068344 998.476868) 20159 POINT(657.694153 41.8230019) 20160 POINT(26.8611641 417.971985) 20161 POINT(7.693717 915.356018) 20162 POINT(760.023438 16.7754078) 20163 POINT(731.599182 230.267944) 20164 POINT(144.910431 808.762817) 20165 POINT(671.842712 543.648926) 20166 POINT(832.043518 341.629913) 20167 POINT(775.828979 247.523148) 20168 POINT(572.976807 169.468628) 20169 POINT(626.907349 912.260925) 20170 POINT(384.183655 457.056793) 20171 POINT(122.092957 989.647461) 20172 POINT(266.029419 164.608704) 20173 POINT(672.335632 288.691528) 20174 POINT(479.735474 177.479721) 20175 POINT(170.0504 97.0989914) 20176 POINT(45.20364 226.064346) 20177 POINT(766.554993 12.6847677) 20178 POINT(610.471191 386.291809) 20179 POINT(765.141113 410.329926) 20180 POINT(953.359497 400.741699) 20181 POINT(527.993103 705.505737) 20182 POINT(354.626221 445.141632) 20183 POINT(659.443726 904.61499) 20184 POINT(879.833008 356.156494) 20185 POINT(134.632858 340.790283) 20186 POINT(127.514748 695.848755) 20187 POINT(840.137878 482.318237) 20188 POINT(350.528687 458.522003) 20189 POINT(858.336975 536.129333) 20190 POINT(595.243958 220.018082) 20191 POINT(15.0306578 533.028564) 20192 POINT(892.197571 221.710129) 20193 POINT(803.188049 222.400635) 20194 POINT(787.81189 295.83728) 20195 POINT(955.737732 485.471893) 20196 POINT(48.6900444 840.495789) 20197 POINT(156.345367 926.962708) 20198 POINT(69.9443741 797.204041) 20199 POINT(716.495544 669.833557) 20200 POINT(952.167542 967.782227) 20201 POINT(405.428497 267.176636) 20202 POINT(906.348267 117.245888) 20203 POINT(970.210938 685.102417) 20204 POINT(333.703888 373.045715) 20205 POINT(528.196045 892.323975) 20206 POINT(792.625549 66.4576263) 20207 POINT(833.240051 123.272263) 20208 POINT(995.401001 628.025146) 20209 POINT(118.294533 34.8391495) 20210 POINT(813.916748 595.096924) 20211 POINT(586.518188 940.716248) 20212 POINT(60.0895081 505.72348) 20213 POINT(775.111511 35.8779182) 20214 POINT(40.4088707 120.141502) 20215 POINT(643.048218 986.772827) 20216 POINT(764.88031 350.074768) 20217 POINT(856.273315 695.593506) 20218 POINT(372.167114 699.026245) 20219 POINT(960.38562 200.560852) 20220 POINT(171.278381 276.170868) 20221 POINT(868.087708 65.0946808) 20222 POINT(505.315826 285.542145) 20223 POINT(851.642029 769.267822) 20224 POINT(927.264893 694.730957) 20225 POINT(352.236938 344.911438) 20226 POINT(407.418457 827.693359) 20227 POINT(809.661926 104.629723) 20228 POINT(135.69989 319.5354) 20229 POINT(116.287186 883.894409) 20230 POINT(61.973259 22.9725132) 20231 POINT(526.409851 839.050598) 20232 POINT(458.592499 512.835144) 20233 POINT(51.085865 882.827637) 20234 POINT(270.264557 133.428406) 20235 POINT(763.237976 168.783859) 20236 POINT(818.230835 551.286804) 20237 POINT(579.87793 298.634125) 20238 POINT(983.377197 381.064758) 20239 POINT(107.587944 778.825378) 20240 POINT(443.859863 153.75209) 20241 POINT(991.978638 617.906189) 20242 POINT(978.004272 93.5220337) 20243 POINT(937.811096 272.644684) 20244 POINT(556.539795 402.340576) 20245 POINT(528.099365 622.593506) 20246 POINT(686.747314 950.659058) 20247 POINT(110.17762 499.607117) 20248 POINT(685.013794 9.36194801) 20249 POINT(104.929543 6.0342226) 20250 POINT(646.927979 394.564911) 20251 POINT(980.774536 423.915497) 20252 POINT(461.858124 735.395142) 20253 POINT(993.336792 714.114929) 20254 POINT(341.502899 508.69519) 20255 POINT(379.877686 211.128525) 20256 POINT(761.884399 647.468872) 20257 POINT(597.554749 184.197983) 20258 POINT(171.490585 446.242493) 20259 POINT(67.5139771 21.7871685) 20260 POINT(213.707916 821.388428) 20261 POINT(721.984985 233.554977) 20262 POINT(921.391724 793.512207) 20263 POINT(16.3147106 596.408875) 20264 POINT(440.591278 38.5322075) 20265 POINT(357.749146 209.398346) 20266 POINT(357.403992 90.991806) 20267 POINT(591.391602 92.0847015) 20268 POINT(868.119324 4.98031473) 20269 POINT(72.8830338 154.202866) 20270 POINT(532.802673 102.963615) 20271 POINT(326.851898 788.141968) 20272 POINT(573.954163 629.626953) 20273 POINT(548.074219 162.86171) 20274 POINT(965.678345 325.926208) 20275 POINT(534.699951 216.810745) 20276 POINT(448.867432 937.967468) 20277 POINT(664.100891 812.322754) 20278 POINT(101.294258 656.75354) 20279 POINT(424.257568 994.559509) 20280 POINT(888.439209 269.539215) 20281 POINT(817.638733 529.702454) 20282 POINT(374.644897 103.434532) 20283 POINT(758.865723 130.742294) 20284 POINT(341.260803 509.536072) 20285 POINT(818.859436 31.4757423) 20286 POINT(748.369141 914.40033) 20287 POINT(331.515167 872.42511) 20288 POINT(302.172302 238.903198) 20289 POINT(807.253357 514.193359) 20290 POINT(816.990479 526.860596) 20291 POINT(702.185608 207.736877) 20292 POINT(758.012085 852.259888) 20293 POINT(111.365135 106.277557) 20294 POINT(440.526978 290.233673) 20295 POINT(707.055054 994.816589) 20296 POINT(668.550232 889.286194) 20297 POINT(873.640625 200.800293) 20298 POINT(398.836029 7.66992426) 20299 POINT(223.375259 309.40448) 20300 POINT(796.722961 52.748394) 20301 POINT(563.340027 680.749084) 20302 POINT(742.625854 956.832031) 20303 POINT(553.690613 11.3519068) 20304 POINT(89.9815369 645.127258) 20305 POINT(208.480698 721.137024) 20306 POINT(357.889526 200.509064) 20307 POINT(579.212036 718.801453) 20308 POINT(858.513306 445.852722) 20309 POINT(292.029602 806.4151) 20310 POINT(757.584656 678.30603) 20311 POINT(524.538513 348.514801) 20312 POINT(196.287842 372.436432) 20313 POINT(778.075745 836.997131) 20314 POINT(267.704803 782.564575) 20315 POINT(774.55365 131.802551) 20316 POINT(447.327698 621.334534) 20317 POINT(660.467957 715.3078) 20318 POINT(584.456421 864.834229) 20319 POINT(689.205688 547.737366) 20320 POINT(32.2971039 368.160065) 20321 POINT(759.412537 599.618164) 20322 POINT(145.077728 393.627533) 20323 POINT(773.013489 928.807556) 20324 POINT(619.448364 521.904846) 20325 POINT(230.783585 93.0313416) 20326 POINT(876.904785 289.857697) 20327 POINT(873.523193 588.89502) 20328 POINT(449.160065 474.119476) 20329 POINT(398.405365 995.335876) 20330 POINT(667.610779 303.269501) 20331 POINT(306.573486 199.438629) 20332 POINT(602.747681 261.538513) 20333 POINT(71.3249817 887.043945) 20334 POINT(334.114777 161.339691) 20335 POINT(936.109131 796.869873) 20336 POINT(143.921051 69.4280167) 20337 POINT(466.100586 737.78302) 20338 POINT(958.477295 621.53717) 20339 POINT(272.417114 242.884476) 20340 POINT(355.210205 542.970764) 20341 POINT(218.388992 935.31311) 20342 POINT(206.16835 488.496094) 20343 POINT(595.040955 178.840164) 20344 POINT(741.87439 945.293823) 20345 POINT(738.623596 616.790161) 20346 POINT(645.416809 119.570747) 20347 POINT(955.261902 516.547974) 20348 POINT(82.2563324 803.282532) 20349 POINT(343.332092 950.501038) 20350 POINT(145.917084 935.403625) 20351 POINT(667.919312 289.94989) 20352 POINT(566.237793 316.11377) 20353 POINT(176.65007 64.1445236) 20354 POINT(150.992462 976.553345) 20355 POINT(563.474304 255.65303) 20356 POINT(982.398193 466.47995) 20357 POINT(925.846436 644.835754) 20358 POINT(989.382263 602.891846) 20359 POINT(838.604126 975.016968) 20360 POINT(989.673889 470.765503) 20361 POINT(730.181824 846.362732) 20362 POINT(421.141907 19.3967228) 20363 POINT(817.247437 236.467346) 20364 POINT(740.759583 931.975037) 20365 POINT(484.181427 30.8246231) 20366 POINT(296.714417 430.124664) 20367 POINT(313.9039 583.934875) 20368 POINT(512.190979 818.003113) 20369 POINT(944.409607 44.6341286) 20370 POINT(549.052856 271.57074) 20371 POINT(577.122803 405.797058) 20372 POINT(539.990417 177.873245) 20373 POINT(663.092773 182.966522) 20374 POINT(735.742859 157.278381) 20375 POINT(983.500671 508.424133) 20376 POINT(959.954712 329.863403) 20377 POINT(792.443604 732.090759) 20378 POINT(1.39488733 877.481384) 20379 POINT(751.137939 349.409637) 20380 POINT(608.108276 107.974701) 20381 POINT(230.299347 995.618652) 20382 POINT(640.147034 40.7221489) 20383 POINT(946.39032 137.79071) 20384 POINT(449.541443 636.988281) 20385 POINT(410.6922 8.56019878) 20386 POINT(403.937866 718.804993) 20387 POINT(968.880432 822.04126) 20388 POINT(572.796753 21.3948021) 20389 POINT(282.22998 722.1745) 20390 POINT(324.28064 762.107056) 20391 POINT(517.120728 581.346497) 20392 POINT(12.1647768 279.770325) 20393 POINT(662.671692 302.957428) 20394 POINT(93.5895309 289.183838) 20395 POINT(760.72998 811.644836) 20396 POINT(141.692657 833.710815) 20397 POINT(209.840881 330.708771) 20398 POINT(986.679688 222.770004) 20399 POINT(75.1082535 755.148987) 20400 POINT(22.4066181 869.227112) 20401 POINT(707.027161 103.472443) 20402 POINT(893.882202 643.690186) 20403 POINT(230.569885 860.535156) 20404 POINT(878.193726 928.54071) 20405 POINT(225.28508 961.24646) 20406 POINT(284.286285 164.859161) 20407 POINT(370.314209 680.715759) 20408 POINT(825.983704 161.510712) 20409 POINT(995.545654 525.709229) 20410 POINT(820.940857 489.464203) 20411 POINT(460.248932 616.087097) 20412 POINT(92.3170395 768.460022) 20413 POINT(500.215332 19.8111515) 20414 POINT(909.418396 810.586487) 20415 POINT(148.562485 93.3707275) 20416 POINT(211.08107 299.958984) 20417 POINT(376.943909 378.932678) 20418 POINT(676.963135 733.932922) 20419 POINT(134.074875 833.643433) 20420 POINT(116.140312 644.163696) 20421 POINT(216.501358 694.409546) 20422 POINT(751.518066 961.013977) 20423 POINT(209.77951 707.87738) 20424 POINT(617.783875 728.594299) 20425 POINT(232.210785 640.579956) 20426 POINT(738.242859 57.0156708) 20427 POINT(121.621124 304.288269) 20428 POINT(483.35675 190.778824) 20429 POINT(80.1431198 928.108276) 20430 POINT(475.708191 245.780304) 20431 POINT(262.437744 739.016541) 20432 POINT(230.138214 530.976562) 20433 POINT(817.286377 499.191803) 20434 POINT(994.768494 323.722595) 20435 POINT(7.12750149 430.142487) 20436 POINT(782.475037 550.234131) 20437 POINT(99.1609344 134.359375) 20438 POINT(600.190125 465.172913) 20439 POINT(187.484039 524.76355) 20440 POINT(345.373047 198.316254) 20441 POINT(238.858719 375.920959) 20442 POINT(648.427185 903.552795) 20443 POINT(803.776611 419.837433) 20444 POINT(203.195633 308.59317) 20445 POINT(676.244019 189.730347) 20446 POINT(404.51236 215.953171) 20447 POINT(575.034363 349.722565) 20448 POINT(664.813538 80.754097) 20449 POINT(739.059265 584.773132) 20450 POINT(826.846252 213.097672) 20451 POINT(341.126801 326.82309) 20452 POINT(45.4943962 587.257141) 20453 POINT(316.938538 489.195282) 20454 POINT(250.742477 242.339981) 20455 POINT(647.115356 816.472595) 20456 POINT(401.017914 25.7134647) 20457 POINT(214.838806 541.737427) 20458 POINT(719.903198 48.2562027) 20459 POINT(63.9833603 403.166901) 20460 POINT(710.94519 916.943481) 20461 POINT(504.156433 99.1434402) 20462 POINT(149.572861 203.558273) 20463 POINT(929.735291 362.483215) 20464 POINT(345.66864 957.23175) 20465 POINT(147.804794 682.961853) 20466 POINT(595.935181 522.468445) 20467 POINT(230.988632 491.499603) 20468 POINT(945.812378 773.346375) 20469 POINT(539.786438 293.261139) 20470 POINT(653.391968 799.358765) 20471 POINT(287.563995 770.254639) 20472 POINT(292.749084 400.177063) 20473 POINT(370.301025 502.13092) 20474 POINT(404.679596 677.37323) 20475 POINT(751.212891 427.764313) 20476 POINT(355.444672 903.386292) 20477 POINT(404.188141 6.44355154) 20478 POINT(408.351959 444.915253) 20479 POINT(184.504593 768.339722) 20480 POINT(461.53717 203.256332) 20481 POINT(343.511627 367.200714) 20482 POINT(923.976807 82.2961884) 20483 POINT(147.026794 677.425049) 20484 POINT(459.501434 820.95343) 20485 POINT(934.35083 991.892639) 20486 POINT(947.464417 936.50531) 20487 POINT(283.437256 70.9032288) 20488 POINT(813.947266 964.721252) 20489 POINT(873.369995 26.6483898) 20490 POINT(657.266602 988.975159) 20491 POINT(381.536865 677.791077) 20492 POINT(807.542725 101.052414) 20493 POINT(871.497986 716.557068) 20494 POINT(556.755066 799.381287) 20495 POINT(748.416687 453.475098) 20496 POINT(410.751251 914.678223) 20497 POINT(440.054291 965.39209) 20498 POINT(938.908691 857.92804) 20499 POINT(538.865295 609.112915) 20500 POINT(924.514526 351.254059) 20501 POINT(578.919128 280.071075) 20502 POINT(296.508453 259.237274) 20503 POINT(862.604492 712.553711) 20504 POINT(201.210587 257.908325) 20505 POINT(566.850403 20.5372448) 20506 POINT(954.360107 322.870453) 20507 POINT(595.555115 567.107056) 20508 POINT(105.660034 989.360535) 20509 POINT(480.809357 892.347534) 20510 POINT(509.634949 28.6785679) 20511 POINT(825.217407 606.715576) 20512 POINT(890.64978 231.104401) 20513 POINT(904.164185 917.106201) 20514 POINT(632.238831 909.588684) 20515 POINT(771.382141 359.564636) 20516 POINT(330.38858 206.190201) 20517 POINT(522.899048 694.98291) 20518 POINT(399.18988 350.099762) 20519 POINT(840.773376 126.887436) 20520 POINT(780.50354 378.429993) 20521 POINT(954.46344 633.906738) 20522 POINT(615.306641 75.674469) 20523 POINT(197.854919 399.701324) 20524 POINT(814.633362 742.388062) 20525 POINT(205.654144 961.62854) 20526 POINT(507.077148 986.37793) 20527 POINT(863.915833 693.437683) 20528 POINT(725.367737 799.308167) 20529 POINT(613.931702 759.695801) 20530 POINT(767.401306 387.528015) 20531 POINT(892.68396 418.903809) 20532 POINT(971.229004 358.168701) 20533 POINT(990.828308 962.486084) 20534 POINT(175.968018 100.786774) 20535 POINT(613.097839 127.742302) 20536 POINT(601.586609 372.34491) 20537 POINT(956.614624 249.795578) 20538 POINT(923.349731 901.035095) 20539 POINT(278.501343 971.529602) 20540 POINT(797.840698 124.897408) 20541 POINT(132.148727 28.0827351) 20542 POINT(326.466553 217.538574) 20543 POINT(716.407715 495.882446) 20544 POINT(931.906433 209.29454) 20545 POINT(936.839905 243.316605) 20546 POINT(838.893433 62.3250237) 20547 POINT(734.112244 954.416504) 20548 POINT(961.975586 917.415894) 20549 POINT(230.916092 597.482117) 20550 POINT(131.552887 704.359375) 20551 POINT(102.816582 172.129715) 20552 POINT(560.7276 842.972473) 20553 POINT(935.693054 851.145813) 20554 POINT(547.657471 695.015015) 20555 POINT(916.559143 613.757446) 20556 POINT(102.607979 736.019043) 20557 POINT(67.3006821 286.087646) 20558 POINT(420.335419 468.504547) 20559 POINT(2.12992191 719.875) 20560 POINT(524.48584 903.022339) 20561 POINT(327.328979 74.8544769) 20562 POINT(582.193848 890.348083) 20563 POINT(842.28064 761.997681) 20564 POINT(117.949692 736.988647) 20565 POINT(508.115387 258.194702) 20566 POINT(893.143677 807.620056) 20567 POINT(166.923615 437.657593) 20568 POINT(511.694183 283.442932) 20569 POINT(490.901581 266.683014) 20570 POINT(766.131348 866.629883) 20571 POINT(965.645569 177.409912) 20572 POINT(458.896576 100.590546) 20573 POINT(541.846924 439.447052) 20574 POINT(479.992401 606.85675) 20575 POINT(179.746384 667.950806) 20576 POINT(557.177124 55.7822037) 20577 POINT(943.892273 790.758728) 20578 POINT(534.461975 114.371353) 20579 POINT(743.143738 409.004028) 20580 POINT(697.682556 115.441521) 20581 POINT(741.726868 354.354736) 20582 POINT(424.448639 323.642914) 20583 POINT(958.869507 216.359802) 20584 POINT(865.027283 631.903564) 20585 POINT(522.618408 795.702515) 20586 POINT(988.996399 393.54303) 20587 POINT(421.514832 459.427521) 20588 POINT(891.272461 108.151901) 20589 POINT(707.62323 624.029053) 20590 POINT(924.932922 451.521912) 20591 POINT(825.86499 478.888489) 20592 POINT(904.817261 930.231262) 20593 POINT(785.703491 258.781433) 20594 POINT(146.018768 399.347504) 20595 POINT(38.0965729 68.51297) 20596 POINT(509.024841 97.150383) 20597 POINT(287.533997 409.291077) 20598 POINT(415.485901 404.460876) 20599 POINT(748.293945 124.931656) 20600 POINT(175.596344 549.381287) 20601 POINT(66.2898636 711.762268) 20602 POINT(83.1725159 162.916183) 20603 POINT(871.673279 570.128479) 20604 POINT(944.156311 299.597229) 20605 POINT(629.4646 334.31015) 20606 POINT(818.031128 13.0372133) 20607 POINT(620.785828 433.648132) 20608 POINT(282.20462 203.083481) 20609 POINT(848.775208 308.623474) 20610 POINT(942.608582 503.336639) 20611 POINT(832.106018 544.988037) 20612 POINT(878.53772 870.292053) 20613 POINT(364.469025 675.928101) 20614 POINT(348.166077 73.9083328) 20615 POINT(697.789978 631.371826) 20616 POINT(218.435196 920.301575) 20617 POINT(395.854584 145.281342) 20618 POINT(997.426941 97.416687) 20619 POINT(527.026306 742.077026) 20620 POINT(20.3551388 501.482544) 20621 POINT(471.637451 853.825928) 20622 POINT(706.512268 643.971619) 20623 POINT(541.281006 827.716492) 20624 POINT(1.57553887 764.45697) 20625 POINT(801.648438 991.486206) 20626 POINT(238.442596 983.591614) 20627 POINT(993.873108 991.350281) 20628 POINT(984.164795 762.480286) 20629 POINT(625.810669 506.689117) 20630 POINT(737.655396 20.6206169) 20631 POINT(96.6988678 398.030426) 20632 POINT(52.8597374 75.6632462) 20633 POINT(896.698792 845.045532) 20634 POINT(188.308182 566.380676) 20635 POINT(335.556396 80.3579559) 20636 POINT(332.875031 307.989899) 20637 POINT(78.8025894 689.527466) 20638 POINT(888.707336 599.503296) 20639 POINT(760.40509 909.858032) 20640 POINT(968.362549 489.87677) 20641 POINT(680.613708 968.529968) 20642 POINT(900.02301 437.799255) 20643 POINT(748.026489 817.456116) 20644 POINT(51.1854591 334.058014) 20645 POINT(374.912842 977.306274) 20646 POINT(49.520813 51.1894455) 20647 POINT(551.936523 941.063354) 20648 POINT(574.866455 238.870071) 20649 POINT(208.142746 318.618378) 20650 POINT(346.861206 582.132751) 20651 POINT(678.032166 754.257812) 20652 POINT(970.014954 910.547852) 20653 POINT(451.509583 510.044464) 20654 POINT(606.588257 508.152893) 20655 POINT(754.337402 387.272736) 20656 POINT(415.233582 484.93457) 20657 POINT(104.463112 528.238403) 20658 POINT(660.749023 780.478394) 20659 POINT(99.3474197 289.981354) 20660 POINT(911.449707 69.0459747) 20661 POINT(925.464722 264.53656) 20662 POINT(792.655884 703.474731) 20663 POINT(635.851501 106.292824) 20664 POINT(57.8125305 694.218079) 20665 POINT(135.458847 851.658875) 20666 POINT(926.123596 281.461792) 20667 POINT(145.749023 130.351776) 20668 POINT(573.74231 775.107788) 20669 POINT(616.222412 87.8542557) 20670 POINT(664.084473 252.674011) 20671 POINT(116.255203 997.159424) 20672 POINT(874.41272 302.604218) 20673 POINT(508.773895 732.689453) 20674 POINT(486.303528 54.533535) 20675 POINT(589.025757 323.711517) 20676 POINT(425.893799 163.747177) 20677 POINT(606.281921 277.784119) 20678 POINT(287.987946 520.07251) 20679 POINT(491.113373 861.474365) 20680 POINT(181.376755 178.039413) 20681 POINT(831.420349 906.145447) 20682 POINT(969.403198 192.253036) 20683 POINT(900.30072 346.997253) 20684 POINT(131.349075 667.077209) 20685 POINT(389.876404 745.357483) 20686 POINT(971.180969 761.098816) 20687 POINT(577.23822 644.685974) 20688 POINT(888.281799 633.213745) 20689 POINT(899.723145 192.73201) 20690 POINT(490.821594 277.965179) 20691 POINT(882.947449 964.238281) 20692 POINT(270.337524 913.008118) 20693 POINT(910.628967 44.6289024) 20694 POINT(612.966919 481.939301) 20695 POINT(892.633423 904.969788) 20696 POINT(48.8022194 992.502441) 20697 POINT(747.38208 397.50592) 20698 POINT(739.337097 785.276367) 20699 POINT(115.382408 830.233459) 20700 POINT(380.389862 523.908447) 20701 POINT(538.96637 804.859558) 20702 POINT(513.797424 207.940796) 20703 POINT(734.204468 607.365417) 20704 POINT(958.263489 967.073486) 20705 POINT(627.433533 972.069458) 20706 POINT(903.839722 825.736267) 20707 POINT(692.013062 62.0623817) 20708 POINT(584.5625 194.135925) 20709 POINT(290.073181 350.261383) 20710 POINT(221.834778 102.172646) 20711 POINT(266.515839 590.826477) 20712 POINT(692.419861 342.068085) 20713 POINT(853.891541 350.654114) 20714 POINT(647.731445 811.131042) 20715 POINT(0.625004828 251.087357) 20716 POINT(326.900665 675.344238) 20717 POINT(833.165894 542.458801) 20718 POINT(249.448471 125.553185) 20719 POINT(984.87738 305.838593) 20720 POINT(231.985748 729.760437) 20721 POINT(678.85083 120.249123) 20722 POINT(588.026611 846.794922) 20723 POINT(524.48761 638.102478) 20724 POINT(984.671753 548.471863) 20725 POINT(92.8696899 130.823669) 20726 POINT(741.676819 679.947754) 20727 POINT(166.040237 670.263245) 20728 POINT(567.45343 392.602203) 20729 POINT(630.832214 434.93222) 20730 POINT(986.182983 922.346252) 20731 POINT(907.460449 424.285706) 20732 POINT(376.899353 911.319275) 20733 POINT(493.478088 145.840424) 20734 POINT(428.685516 925.643921) 20735 POINT(169.78392 141.062576) 20736 POINT(428.727142 390.059052) 20737 POINT(990.152161 334.557861) 20738 POINT(607.69519 216.253403) 20739 POINT(770.381592 440.610596) 20740 POINT(438.730652 360.620941) 20741 POINT(146.877502 120.656792) 20742 POINT(444.253754 214.610626) 20743 POINT(704.675842 349.56189) 20744 POINT(534.105652 553.144531) 20745 POINT(327.097351 877.959839) 20746 POINT(957.481567 80.638443) 20747 POINT(17.0185337 648.373657) 20748 POINT(581.16687 897.518066) 20749 POINT(534.917358 175.977173) 20750 POINT(842.319519 330.946899) 20751 POINT(421.284241 897.905945) 20752 POINT(503.143921 40.558136) 20753 POINT(278.685699 250.82428) 20754 POINT(348.095734 522.723145) 20755 POINT(617.863647 193.493622) 20756 POINT(505.689087 635.338257) 20757 POINT(487.007233 253.454315) 20758 POINT(893.615356 479.927277) 20759 POINT(446.126404 164.365417) 20760 POINT(827.92572 480.333679) 20761 POINT(989.795227 258.38913) 20762 POINT(507.794098 249.324615) 20763 POINT(110.054909 987.239197) 20764 POINT(493.310272 438.589081) 20765 POINT(503.722595 32.735878) 20766 POINT(494.425262 217.049149) 20767 POINT(719.632446 215.14975) 20768 POINT(547.277832 950.903992) 20769 POINT(894.44165 863.126831) 20770 POINT(685.490479 590.806458) 20771 POINT(301.703735 36.0410194) 20772 POINT(437.584717 872.070801) 20773 POINT(727.199707 317.322083) 20774 POINT(269.495148 758.489258) 20775 POINT(251.406906 170.382431) 20776 POINT(518.457825 305.488495) 20777 POINT(762.986023 677.565979) 20778 POINT(459.629486 870.891785) 20779 POINT(918.910278 993.044373) 20780 POINT(141.106476 89.0150833) 20781 POINT(109.101662 924.390442) 20782 POINT(201.126602 364.374634) 20783 POINT(656.068665 621.895264) 20784 POINT(430.845673 593.709778) 20785 POINT(191.054398 572.408447) 20786 POINT(708.009155 38.7440987) 20787 POINT(183.748337 654.05896) 20788 POINT(645.027588 537.156128) 20789 POINT(576.936157 363.744324) 20790 POINT(866.486572 736.275391) 20791 POINT(582.950928 950.49762) 20792 POINT(956.171387 584.345459) 20793 POINT(955.949341 810.097961) 20794 POINT(445.585022 629.722839) 20795 POINT(561.500793 370.561981) 20796 POINT(611.127686 611.639771) 20797 POINT(249.506821 841.041016) 20798 POINT(615.163208 620.324158) 20799 POINT(902.942261 640.377319) 20800 POINT(679.80957 643.121399) 20801 POINT(916.336121 363.99707) 20802 POINT(487.286011 371.219208) 20803 POINT(165.426407 602.410461) 20804 POINT(25.9661293 633.677307) 20805 POINT(2.27913713 370.456024) 20806 POINT(269 57.3698997) 20807 POINT(765.749756 938.288696) 20808 POINT(707.671814 469.452759) 20809 POINT(380.98349 333.32782) 20810 POINT(142.873993 999.978821) 20811 POINT(557.340027 82.9194717) 20812 POINT(746.647827 783.850525) 20813 POINT(933.441772 31.9394894) 20814 POINT(176.238464 971.57135) 20815 POINT(890.866394 455.184784) 20816 POINT(93.2289505 446.039154) 20817 POINT(122.341316 614.032959) 20818 POINT(400.878052 107.317619) 20819 POINT(932.286682 318.962158) 20820 POINT(657.734131 868.97345) 20821 POINT(531.445496 658.221375) 20822 POINT(702.001587 38.8365746) 20823 POINT(705.522522 557.949463) 20824 POINT(479.193329 605.21991) 20825 POINT(460.735626 235.713959) 20826 POINT(308.634521 78.63694) 20827 POINT(925.591614 398.74826) 20828 POINT(458.830139 51.4177208) 20829 POINT(594.799805 486.721069) 20830 POINT(487.148621 26.5152378) 20831 POINT(192.904037 648.88623) 20832 POINT(598.393677 465.996063) 20833 POINT(94.9627609 24.801712) 20834 POINT(505.464508 443.644196) 20835 POINT(530.566406 329.936829) 20836 POINT(352.379211 919.807373) 20837 POINT(204.909729 561.518616) 20838 POINT(57.5327988 45.7492943) 20839 POINT(563.917542 680.619141) 20840 POINT(528.372437 245.624588) 20841 POINT(605.063477 504.116608) 20842 POINT(116.019623 203.685364) 20843 POINT(865.153809 380.739807) 20844 POINT(151.196503 529.989929) 20845 POINT(302.732971 920.542358) 20846 POINT(615.693176 407.888794) 20847 POINT(115.784561 504.062897) 20848 POINT(844.238098 199.692337) 20849 POINT(803.058777 188.973846) 20850 POINT(460.827545 952.595581) 20851 POINT(775.791138 146.672577) 20852 POINT(575.2724 295.188904) 20853 POINT(670.039246 853.131165) 20854 POINT(97.0115433 26.378828) 20855 POINT(890.745056 897.117981) 20856 POINT(64.3028564 94.5746841) 20857 POINT(357.428131 689.990479) 20858 POINT(291.068573 857.473999) 20859 POINT(516.774719 315.607666) 20860 POINT(757.37738 854.245544) 20861 POINT(366.053009 763.125427) 20862 POINT(822.366455 555.523865) 20863 POINT(998.152466 371.747009) 20864 POINT(33.0369682 66.185936) 20865 POINT(367.111694 282.750519) 20866 POINT(504.614227 815.789246) 20867 POINT(993.405762 353.788055) 20868 POINT(226.999008 296.854462) 20869 POINT(920.260559 422.644897) 20870 POINT(329.314423 707.535828) 20871 POINT(713.241028 107.089012) 20872 POINT(135.871811 368.927399) 20873 POINT(810.817993 854.483765) 20874 POINT(550.359497 355.221588) 20875 POINT(307.199188 585.455994) 20876 POINT(892.143372 374.700714) 20877 POINT(832.163025 651.708313) 20878 POINT(213.830734 439.272217) 20879 POINT(715.846619 606.267029) 20880 POINT(490.381836 768.739563) 20881 POINT(47.4174385 387.915619) 20882 POINT(977.879639 92.6484604) 20883 POINT(591.436951 388.754089) 20884 POINT(788.530701 577.403442) 20885 POINT(178.756638 708.851746) 20886 POINT(64.6402664 950.07019) 20887 POINT(82.3625183 924.546387) 20888 POINT(508.37738 584.164246) 20889 POINT(793.204224 392.443054) 20890 POINT(839.443115 818.678955) 20891 POINT(375.346649 480.554199) 20892 POINT(615.718079 202.173416) 20893 POINT(380.520752 927.901733) 20894 POINT(822.170105 682.08313) 20895 POINT(894.211304 566.498779) 20896 POINT(473.439392 629.32373) 20897 POINT(251.806564 942.793884) 20898 POINT(901.411499 524.144043) 20899 POINT(965.186829 512.871277) 20900 POINT(329.679016 796.089966) 20901 POINT(426.695953 386.059387) 20902 POINT(144.154877 764.526306) 20903 POINT(576.113953 399.829468) 20904 POINT(28.4271812 562.722229) 20905 POINT(322.527374 235.32486) 20906 POINT(872.057983 934.94873) 20907 POINT(580.520447 453.5177) 20908 POINT(311.372101 599.903809) 20909 POINT(110.632759 638.451904) 20910 POINT(609.926086 593.236816) 20911 POINT(327.437988 183.522858) 20912 POINT(717.490723 395.776428) 20913 POINT(62.8964424 822.115479) 20914 POINT(102.835762 371.691895) 20915 POINT(233.957581 473.654327) 20916 POINT(880.829773 872.271912) 20917 POINT(75.9922791 804.307495) 20918 POINT(845.417114 486.955231) 20919 POINT(259.904816 557.963562) 20920 POINT(977.118347 164.981522) 20921 POINT(831.215027 933.013245) 20922 POINT(470.126831 0.460999787) 20923 POINT(592.648315 314.895294) 20924 POINT(176.298035 223.330872) 20925 POINT(724.580322 539.909912) 20926 POINT(900.914246 611.734436) 20927 POINT(104.93885 594.688477) 20928 POINT(220.75177 21.6184921) 20929 POINT(784.874695 545.786804) 20930 POINT(394.503662 791.206909) 20931 POINT(309.807861 358.621918) 20932 POINT(667.959045 336.515045) 20933 POINT(286.596008 683.489807) 20934 POINT(463.58609 614.882385) 20935 POINT(603.938538 253.426682) 20936 POINT(911.498718 242.909256) 20937 POINT(660.231018 114.54361) 20938 POINT(204.533875 750.105591) 20939 POINT(564.554077 870.162415) 20940 POINT(825.767212 707.525208) 20941 POINT(604.076111 607.207031) 20942 POINT(736.821899 659.844299) 20943 POINT(944.751221 344.083252) 20944 POINT(767.475281 918.525757) 20945 POINT(9.81389999 116.567406) 20946 POINT(302.159821 242.313248) 20947 POINT(798.339905 140.493652) 20948 POINT(710.93042 279.354584) 20949 POINT(428.31665 561.382935) 20950 POINT(68.4098129 803.431824) 20951 POINT(857.632751 841.322754) 20952 POINT(494.309113 316.359497) 20953 POINT(322.655609 827.73291) 20954 POINT(836.684021 471.520233) 20955 POINT(886.260559 498.120941) 20956 POINT(510.567444 102.278229) 20957 POINT(282.05246 546.136414) 20958 POINT(659.587524 906.804016) 20959 POINT(233.973297 649.409668) 20960 POINT(689.333801 181.457153) 20961 POINT(703.517517 986.653198) 20962 POINT(844.391846 432.710907) 20963 POINT(231.518204 413.792572) 20964 POINT(285.07309 397.712006) 20965 POINT(187.176651 495.581207) 20966 POINT(936.994812 521.607117) 20967 POINT(381.070526 164.960892) 20968 POINT(812.007263 472.029541) 20969 POINT(36.7972488 257.716034) 20970 POINT(60.842701 904.535217) 20971 POINT(521.323914 170.704865) 20972 POINT(447.721802 654.847473) 20973 POINT(808.78064 809.740967) 20974 POINT(419.561035 442.679474) 20975 POINT(276.231323 235.26741) 20976 POINT(365.083832 286.439056) 20977 POINT(810.897095 653.166077) 20978 POINT(862.860901 297.698242) 20979 POINT(132.519485 822.854309) 20980 POINT(746.041626 638.96875) 20981 POINT(816.296326 519.337341) 20982 POINT(162.357285 868.7276) 20983 POINT(433.483368 359.840942) 20984 POINT(681.07251 985.072632) 20985 POINT(28.8352623 324.388306) 20986 POINT(47.2573586 425.7742) 20987 POINT(425.199158 414.192719) 20988 POINT(764.489136 440.358185) 20989 POINT(512.521606 618.607849) 20990 POINT(109.445511 362.379456) 20991 POINT(246.177856 232.841995) 20992 POINT(958.511658 761.006104) 20993 POINT(880.880798 382.549622) 20994 POINT(403.313751 514.850952) 20995 POINT(412.613617 681.242249) 20996 POINT(217.956955 942.695923) 20997 POINT(31.3102245 351.310211) 20998 POINT(937.75531 51.0217323) 20999 POINT(918.764709 974.04541) 21000 POINT(442.592194 163.366486) 21001 POINT(104.993958 658.754517) 21002 POINT(286.059937 18.411293) 21003 POINT(545.636658 711.825806) 21004 POINT(555.645325 339.861267) 21005 POINT(654.707764 485.068512) 21006 POINT(224.019943 759.826904) 21007 POINT(351.021179 645.999939) 21008 POINT(894.659973 327.298004) 21009 POINT(210.852905 563.871094) 21010 POINT(647.376038 53.8573799) 21011 POINT(600.076111 282.569305) 21012 POINT(644.828186 580.040222) 21013 POINT(50.3144302 859.21814) 21014 POINT(16.8024235 18.3763218) 21015 POINT(588.015442 905.037598) 21016 POINT(745.128906 914.438599) 21017 POINT(993.247925 458.183929) 21018 POINT(231.95076 527.084412) 21019 POINT(905.110352 847.832825) 21020 POINT(554.046143 866.047363) 21021 POINT(479.656189 741.305603) 21022 POINT(145.643524 132.28624) 21023 POINT(699.086243 883.789856) 21024 POINT(574.335999 17.8127384) 21025 POINT(10.6249714 191.029648) 21026 POINT(895.126587 261.509888) 21027 POINT(401.131592 402.725433) 21028 POINT(705.256348 590.766296) 21029 POINT(278.345581 777.398926) 21030 POINT(849.362305 761.241943) 21031 POINT(199.120041 652.865784) 21032 POINT(815.869324 535.047302) 21033 POINT(954.558777 720.571777) 21034 POINT(249.663635 697.964783) 21035 POINT(265.276917 692.861084) 21036 POINT(914.471375 336.617065) 21037 POINT(158.813034 571.365906) 21038 POINT(555.540955 694.847229) 21039 POINT(375.406616 859.349854) 21040 POINT(826.900757 763.81604) 21041 POINT(85.9379272 973.870911) 21042 POINT(98.4532089 981.852661) 21043 POINT(92.9288254 493.51178) 21044 POINT(90.4185638 817.954956) 21045 POINT(136.390671 178.275558) 21046 POINT(893.224915 767.694763) 21047 POINT(133.354538 389.774017) 21048 POINT(720.053955 223.419617) 21049 POINT(163.642532 357.406738) 21050 POINT(360.212158 503.982941) 21051 POINT(873.466125 930.813293) 21052 POINT(610.749756 895.307861) 21053 POINT(129.529007 47.0794373) 21054 POINT(270.869293 105.064461) 21055 POINT(224.34787 155.221573) 21056 POINT(601.339661 956.406982) 21057 POINT(541.495483 578.207703) 21058 POINT(445.189667 211.485397) 21059 POINT(248.546646 67.6809769) 21060 POINT(645.334412 40.3583412) 21061 POINT(534.928467 197.728958) 21062 POINT(601.56366 140.654633) 21063 POINT(969.025146 346.21875) 21064 POINT(108.688568 814.144714) 21065 POINT(359.269287 685.744995) 21066 POINT(287.917297 255.210587) 21067 POINT(791.202759 227.091034) 21068 POINT(946.16571 880.576599) 21069 POINT(328.366486 667.88501) 21070 POINT(7.56549406 97.7539597) 21071 POINT(839.262024 755.069763) 21072 POINT(395.614288 480.240051) 21073 POINT(3.52899575 494.747009) 21074 POINT(494.033905 790.023926) 21075 POINT(294.031433 775.383667) 21076 POINT(873.412598 702.410522) 21077 POINT(492.001892 514.376221) 21078 POINT(586.174072 875.259155) 21079 POINT(512.138611 13.2921515) 21080 POINT(954.536316 235.724304) 21081 POINT(264.093079 799.09021) 21082 POINT(308.216309 994.399048) 21083 POINT(304.75946 338.24469) 21084 POINT(677.147034 41.938942) 21085 POINT(818.937439 904.561829) 21086 POINT(568.975891 529.945251) 21087 POINT(259.173309 841.808655) 21088 POINT(924.295471 719.903015) 21089 POINT(861.893127 36.9232788) 21090 POINT(360.247437 625.71637) 21091 POINT(397.465668 672.021362) 21092 POINT(304.279663 741.894897) 21093 POINT(395.821899 82.7556534) 21094 POINT(456.493317 796.394409) 21095 POINT(784.103516 661.551331) 21096 POINT(776.391785 190.778564) 21097 POINT(274.013672 317.179993) 21098 POINT(396.252686 677.673889) 21099 POINT(917.740967 663.029114) 21100 POINT(250.23381 103.964462) 21101 POINT(314.27301 246.867432) 21102 POINT(960.266541 335.990021) 21103 POINT(872.495361 162.134628) 21104 POINT(524.4776 38.9517632) 21105 POINT(31.6933784 967.637878) 21106 POINT(452.136108 956.21582) 21107 POINT(190.067749 177.505203) 21108 POINT(224.88945 15.2677422) 21109 POINT(411.902374 620.417603) 21110 POINT(834.40155 656.381592) 21111 POINT(466.463043 676.253906) 21112 POINT(851.635559 558.908997) 21113 POINT(917.069214 14.6784029) 21114 POINT(176.247604 640.38562) 21115 POINT(425.699646 734.865662) 21116 POINT(652.328796 177.928421) 21117 POINT(93.7238922 255.081924) 21118 POINT(928.614563 892.827271) 21119 POINT(27.7794113 457.46463) 21120 POINT(799.974121 231.600616) 21121 POINT(734.444275 254.904907) 21122 POINT(258.312134 144.509491) 21123 POINT(819.323181 226.9216) 21124 POINT(273.91394 820.637756) 21125 POINT(534.72644 348.922028) 21126 POINT(44.8039856 892.820129) 21127 POINT(302.658844 208.999908) 21128 POINT(917.070679 22.2171097) 21129 POINT(581.860596 828.775024) 21130 POINT(171.652527 848.116882) 21131 POINT(572.782227 155.711105) 21132 POINT(374.22876 521.119568) 21133 POINT(814.392517 115.458389) 21134 POINT(429.18161 295.404144) 21135 POINT(851.493774 461.281281) 21136 POINT(3.79444242 447.069427) 21137 POINT(798.759094 456.403137) 21138 POINT(685.737122 510.003815) 21139 POINT(834.146851 112.603546) 21140 POINT(399.415436 18.4022923) 21141 POINT(783.94397 488.741821) 21142 POINT(981.994385 546.586792) 21143 POINT(956.826172 645.779907) 21144 POINT(858.039856 413.479431) 21145 POINT(15.5064363 745.68988) 21146 POINT(856.082947 432.845764) 21147 POINT(790.407654 471.331665) 21148 POINT(987.437439 143.804337) 21149 POINT(717.095947 199.57959) 21150 POINT(516.867493 42.2535439) 21151 POINT(772.834778 962.884155) 21152 POINT(658.901917 86.5868073) 21153 POINT(980.571106 232.93428) 21154 POINT(448.546692 694.76593) 21155 POINT(402.076721 517.608459) 21156 POINT(679.799927 249.539322) 21157 POINT(45.1004028 8.07281303) 21158 POINT(651.800049 839.991455) 21159 POINT(829.6203 391.429352) 21160 POINT(885.824463 286.978882) 21161 POINT(91.1298752 66.0850449) 21162 POINT(5.0335393 14.2653389) 21163 POINT(517.976562 487.984406) 21164 POINT(834.259216 763.846985) 21165 POINT(726.860413 127.620911) 21166 POINT(163.845734 631.2276) 21167 POINT(255.568665 437.547089) 21168 POINT(917.253235 173.049362) 21169 POINT(802.885315 490.787506) 21170 POINT(7.65617609 64.921257) 21171 POINT(358.498566 240.602173) 21172 POINT(508.051727 751.556152) 21173 POINT(54.8966255 125.549759) 21174 POINT(889.507629 915.088623) 21175 POINT(331.074371 470.488983) 21176 POINT(703.324097 211.992264) 21177 POINT(344.876343 549.382019) 21178 POINT(848.374451 306.259521) 21179 POINT(605.611511 530.504089) 21180 POINT(331.174683 608.98645) 21181 POINT(947.946838 835.519531) 21182 POINT(502.880432 565.387756) 21183 POINT(236.904984 743.082092) 21184 POINT(157.118713 693.337524) 21185 POINT(415.062286 653.010254) 21186 POINT(561.147522 647.207703) 21187 POINT(587.902161 112.149338) 21188 POINT(639.249207 272.094086) 21189 POINT(30.9803429 66.8686295) 21190 POINT(753.570374 232.145569) 21191 POINT(110.487984 444.471954) 21192 POINT(159.017914 288.934113) 21193 POINT(782.462585 936.985779) 21194 POINT(523.629028 508.535095) 21195 POINT(298.928711 141.796768) 21196 POINT(385.496979 566.769104) 21197 POINT(53.4078217 146.049881) 21198 POINT(996.42395 269.05069) 21199 POINT(773.401123 382.809235) 21200 POINT(318.68457 413.287415) 21201 POINT(971.632568 559.585022) 21202 POINT(585.437561 100.685623) 21203 POINT(237.168549 602.40979) 21204 POINT(601.362183 580.189331) 21205 POINT(446.268524 575.315247) 21206 POINT(95.0970154 128.266586) 21207 POINT(743.347656 145.536758) 21208 POINT(889.207214 388.156647) 21209 POINT(455.257019 354.414795) 21210 POINT(330.03244 983.410156) 21211 POINT(305.841309 723.73938) 21212 POINT(425.309509 182.137863) 21213 POINT(69.1756668 343.805298) 21214 POINT(31.4959698 413.990906) 21215 POINT(393.897949 834.932739) 21216 POINT(477.935547 665.319031) 21217 POINT(30.6428165 496.512878) 21218 POINT(427.227325 223.604431) 21219 POINT(260.888824 620.241516) 21220 POINT(969.329956 75.1902924) 21221 POINT(447.801239 676.199951) 21222 POINT(803.121094 36.1734962) 21223 POINT(375.278046 726.566589) 21224 POINT(448.53891 611.40625) 21225 POINT(305.891388 92.3375854) 21226 POINT(283.371857 717.758606) 21227 POINT(445.393219 619.485596) 21228 POINT(542.684998 2.67756104) 21229 POINT(52.681881 254.08606) 21230 POINT(440.344238 155.799286) 21231 POINT(659.487122 448.323669) 21232 POINT(158.819397 608.720642) 21233 POINT(471.53299 853.802856) 21234 POINT(446.233093 495.425232) 21235 POINT(798.713806 3.70945334) 21236 POINT(2.42120719 993.331177) 21237 POINT(420.126556 195.198929) 21238 POINT(225.652176 863.142456) 21239 POINT(823.02478 527.655029) 21240 POINT(428.810486 475.935822) 21241 POINT(783.403442 266.515106) 21242 POINT(471.607941 70.1110382) 21243 POINT(378.624908 137.178024) 21244 POINT(250.18576 771.516541) 21245 POINT(166.007721 325.69342) 21246 POINT(446.885895 780.397949) 21247 POINT(430.509186 404.708557) 21248 POINT(883.692505 462.589539) 21249 POINT(432.544708 912.367676) 21250 POINT(208.697922 153.999786) 21251 POINT(884.735168 202.001038) 21252 POINT(144.874741 711.961426) 21253 POINT(193.216888 530.601257) 21254 POINT(266.50827 30.0968304) 21255 POINT(632.46814 258.997742) 21256 POINT(66.0563507 321.273682) 21257 POINT(727.911011 856.649841) 21258 POINT(711.277161 302.911652) 21259 POINT(921.46991 15.0667534) 21260 POINT(350.645081 967.884583) 21261 POINT(643.566101 217.630219) 21262 POINT(538.930542 260.711426) 21263 POINT(340.58313 247.264297) 21264 POINT(462.04657 211.428848) 21265 POINT(767.66095 259.825775) 21266 POINT(231.685211 307.905731) 21267 POINT(988.897827 648.747559) 21268 POINT(889.821594 651.432129) 21269 POINT(394.916473 179.46254) 21270 POINT(657.929138 670.85675) 21271 POINT(593.668579 0.190730363) 21272 POINT(835.915039 438.648621) 21273 POINT(24.8175106 624.140686) 21274 POINT(4.67584991 399.931885) 21275 POINT(439.682983 828.033752) 21276 POINT(420.230133 195.32695) 21277 POINT(154.314804 389.707397) 21278 POINT(766.184265 223.494171) 21279 POINT(977.667175 475.619507) 21280 POINT(517.516724 283.400787) 21281 POINT(523.077087 335.209473) 21282 POINT(778.153015 583.938049) 21283 POINT(890.443665 326.751953) 21284 POINT(506.488434 274.637878) 21285 POINT(447.920135 517.664917) 21286 POINT(908.971069 491.54425) 21287 POINT(212.942688 515.93457) 21288 POINT(537.278076 423.071136) 21289 POINT(528.54834 408.744629) 21290 POINT(297.825195 668.839661) 21291 POINT(825.799194 835.523987) 21292 POINT(404.785767 917.574707) 21293 POINT(58.5007133 197.057114) 21294 POINT(964.035156 826.313965) 21295 POINT(272.15097 707.261902) 21296 POINT(753.170715 701.236084) 21297 POINT(933.202942 602.579712) 21298 POINT(202.809677 809.756775) 21299 POINT(383.386108 24.1229534) 21300 POINT(130.682236 684.215393) 21301 POINT(711.283325 333.882812) 21302 POINT(429.683167 790.145386) 21303 POINT(641.971313 388.144989) 21304 POINT(364.219818 248.071045) 21305 POINT(755.818726 304.144165) 21306 POINT(39.2175446 628.925537) 21307 POINT(558.124512 770.882446) 21308 POINT(829.4599 42.0714569) 21309 POINT(58.9355774 988.551819) 21310 POINT(403.120056 44.691967) 21311 POINT(591.978638 905.35199) 21312 POINT(455.079834 205.799637) 21313 POINT(436.196533 853.546509) 21314 POINT(348.751007 231.690765) 21315 POINT(314.016479 781.815247) 21316 POINT(718.555969 317.398315) 21317 POINT(266.463257 617.455505) 21318 POINT(331.064301 136.228073) 21319 POINT(563.938171 464.46991) 21320 POINT(466.208557 563.091248) 21321 POINT(848.432861 212.421158) 21322 POINT(39.34412 683.984497) 21323 POINT(341.757385 72.0976639) 21324 POINT(121.610023 851.156128) 21325 POINT(746.802856 709.129639) 21326 POINT(364.672058 869.398865) 21327 POINT(44.8035545 172.943222) 21328 POINT(734.170166 852.312378) 21329 POINT(209.028305 138.696167) 21330 POINT(494.878296 767.698303) 21331 POINT(450.441254 32.5760384) 21332 POINT(363.656006 238.528122) 21333 POINT(847.891663 100.165543) 21334 POINT(400.801758 210.816299) 21335 POINT(536.700073 123.21225) 21336 POINT(496.599213 713.537903) 21337 POINT(305.614166 277.437134) 21338 POINT(131.003723 80.3544998) 21339 POINT(831.641907 53.9512711) 21340 POINT(546.990845 780.9021) 21341 POINT(541.995789 506.026276) 21342 POINT(141.650131 913.907288) 21343 POINT(487.173889 613.607971) 21344 POINT(6.35619164 579.229492) 21345 POINT(722.077515 827.9245) 21346 POINT(354.097931 795.483154) 21347 POINT(684.150574 931.297913) 21348 POINT(477.250153 529.221436) 21349 POINT(418.078247 51.9236641) 21350 POINT(754.791138 306.420837) 21351 POINT(292.988464 854.659485) 21352 POINT(649.406738 983.486328) 21353 POINT(985.866882 697.119568) 21354 POINT(130.392914 650.110901) 21355 POINT(937.651855 521.573975) 21356 POINT(259.223267 547.612488) 21357 POINT(527.987 838.912781) 21358 POINT(965.649231 932.000183) 21359 POINT(740.749939 758.470215) 21360 POINT(210.954636 249.774963) 21361 POINT(813.259155 299.676239) 21362 POINT(622.301941 975.767517) 21363 POINT(63.6183701 376.77774) 21364 POINT(331.937561 276.19339) 21365 POINT(887.245972 830.359741) 21366 POINT(664.437256 987.22583) 21367 POINT(497.641937 658.819214) 21368 POINT(684.361145 561.044189) 21369 POINT(878.369019 414.654358) 21370 POINT(598.977234 839.417419) 21371 POINT(211.706406 325.407715) 21372 POINT(962.5448 121.971916) 21373 POINT(681.22876 593.939697) 21374 POINT(359.59198 745.536133) 21375 POINT(515.552063 59.6440163) 21376 POINT(267.380371 666.132019) 21377 POINT(781.682556 759.09082) 21378 POINT(578.130127 610.720886) 21379 POINT(159.933121 224.882111) 21380 POINT(468.539429 656.737488) 21381 POINT(477.497101 684.320312) 21382 POINT(59.7363586 409.431854) 21383 POINT(461.870209 759.560852) 21384 POINT(440.243744 726.36969) 21385 POINT(143.896103 188.585037) 21386 POINT(906.144043 522.033081) 21387 POINT(816.916626 357.574036) 21388 POINT(687.840942 50.8542633) 21389 POINT(995.085205 701.687805) 21390 POINT(416.201721 82.370163) 21391 POINT(540.240662 950.078796) 21392 POINT(270.123016 56.2902412) 21393 POINT(0.84102875 685.054565) 21394 POINT(233.513123 37.5451927) 21395 POINT(264.460449 193.118683) 21396 POINT(466.271149 621.86145) 21397 POINT(231.510895 311.271729) 21398 POINT(208.139771 801.75531) 21399 POINT(314.549286 135.163986) 21400 POINT(336.504578 762.346985) 21401 POINT(925.276855 541.817627) 21402 POINT(92.6359634 97.9756546) 21403 POINT(578.763489 489.648712) 21404 POINT(181.95784 626.786804) 21405 POINT(998.295349 759.024292) 21406 POINT(502.25647 824.431335) 21407 POINT(399.426544 969.810303) 21408 POINT(922.005127 533.548645) 21409 POINT(551.332703 406.158508) 21410 POINT(534.997009 557.216431) 21411 POINT(918.536682 956.614136) 21412 POINT(576.19574 677.079712) 21413 POINT(165.772232 668.610474) 21414 POINT(69.1986237 606.08374) 21415 POINT(130.547958 365.272461) 21416 POINT(363.16098 87.9172668) 21417 POINT(427.379486 89.5320206) 21418 POINT(34.7663612 377.341248) 21419 POINT(618.307373 951.842773) 21420 POINT(410.296509 405.070496) 21421 POINT(167.967499 154.86618) 21422 POINT(888.624512 165.956161) 21423 POINT(578.013245 458.618195) 21424 POINT(705.721375 28.6750832) 21425 POINT(373.112946 305.563385) 21426 POINT(115.848999 398.382141) 21427 POINT(275.193573 935.498108) 21428 POINT(717.958435 260.861511) 21429 POINT(568.331604 538.878967) 21430 POINT(824.989929 778.287781) 21431 POINT(516.085266 294.255188) 21432 POINT(58.9776115 114.066551) 21433 POINT(766.629761 745.999878) 21434 POINT(409.415436 749.279968) 21435 POINT(67.4281006 653.5896) 21436 POINT(672.687805 568.556763) 21437 POINT(737.104736 199.84935) 21438 POINT(806.080811 181.878815) 21439 POINT(212.57019 315.089722) 21440 POINT(293.659149 194.722061) 21441 POINT(437.277588 154.770126) 21442 POINT(98.9442062 216.415665) 21443 POINT(792.914673 273.693481) 21444 POINT(339.802429 220.736053) 21445 POINT(941.096619 348.887756) 21446 POINT(86.3236847 749.189087) 21447 POINT(151.11969 10.972785) 21448 POINT(977.927612 322.469269) 21449 POINT(90.0599442 310.308105) 21450 POINT(959.807922 136.128265) 21451 POINT(366.097015 945.538269) 21452 POINT(832.549133 640.0802) 21453 POINT(396.662109 759.90387) 21454 POINT(426.905151 306.377014) 21455 POINT(49.7372665 322.089813) 21456 POINT(696.000488 784.498474) 21457 POINT(437.377838 76.2968369) 21458 POINT(450.434113 627.626038) 21459 POINT(761.422302 509.113037) 21460 POINT(641.866272 887.053162) 21461 POINT(86.6541061 742.744385) 21462 POINT(274.731689 545.684509) 21463 POINT(788.768982 644.950867) 21464 POINT(143.935104 66.7883453) 21465 POINT(463.889038 930.989319) 21466 POINT(562.071838 232.696976) 21467 POINT(641.679871 322.953339) 21468 POINT(159.322174 42.5477104) 21469 POINT(392.134399 893.735779) 21470 POINT(272.261139 221.574509) 21471 POINT(111.660652 538.637085) 21472 POINT(647.104919 0.697923779) 21473 POINT(500.266022 635.262146) 21474 POINT(384.195862 278.624634) 21475 POINT(159.496613 435.262024) 21476 POINT(662.761841 244.400665) 21477 POINT(839.624268 408.787903) 21478 POINT(680.237 572.026855) 21479 POINT(211.761978 478.95932) 21480 POINT(993.898682 596.631592) 21481 POINT(31.6345005 949.558105) 21482 POINT(592.578735 530.716125) 21483 POINT(670.270874 570.520569) 21484 POINT(284.191681 6.68396568) 21485 POINT(514.675781 994.215027) 21486 POINT(545.35675 656.399719) 21487 POINT(568.459778 258.186401) 21488 POINT(730.17395 318.683075) 21489 POINT(416.472931 559.874695) 21490 POINT(317.063141 950.847839) 21491 POINT(344.824982 654.247375) 21492 POINT(729.434509 700.677917) 21493 POINT(942.54541 660.430237) 21494 POINT(694.905273 551.261414) 21495 POINT(645.920837 877.997803) 21496 POINT(308.996552 804.164246) 21497 POINT(941.755066 622.953613) 21498 POINT(96.064827 628.435669) 21499 POINT(920.058533 848.559326) 21500 POINT(769.085999 326.432892) 21501 POINT(486.750427 933.669739) 21502 POINT(890.38562 595.600586) 21503 POINT(317.725769 33.3178062) 21504 POINT(740.196533 281.9263) 21505 POINT(890.11615 590.828796) 21506 POINT(874.837952 200.23587) 21507 POINT(75.8834457 321.192902) 21508 POINT(770.303406 953.825439) 21509 POINT(566.290405 270.903229) 21510 POINT(722.176697 126.819138) 21511 POINT(130.675369 534.687683) 21512 POINT(634.272583 193.37767) 21513 POINT(544.824646 224.888306) 21514 POINT(254.533676 325.382538) 21515 POINT(176.721985 220.640808) 21516 POINT(788.958252 462.015625) 21517 POINT(242.314224 713.086426) 21518 POINT(77.2505646 398.915833) 21519 POINT(771.05072 266.831116) 21520 POINT(785.175842 770.10675) 21521 POINT(308.339874 959.606567) 21522 POINT(449.083862 32.0682564) 21523 POINT(365.848907 580.060852) 21524 POINT(991.68396 456.210999) 21525 POINT(975.014099 61.9123573) 21526 POINT(261.979858 624.265747) 21527 POINT(346.607849 531.07019) 21528 POINT(686.503845 572.014404) 21529 POINT(360.237854 26.1034813) 21530 POINT(656.940125 2.27407479) 21531 POINT(250.859283 122.612755) 21532 POINT(427.349487 490.644531) 21533 POINT(601.528076 115.217003) 21534 POINT(112.067062 330.402222) 21535 POINT(347.588776 869.247437) 21536 POINT(625.63739 239.863281) 21537 POINT(530.285767 995.686157) 21538 POINT(804.700623 110.955032) 21539 POINT(668.542847 190.8797) 21540 POINT(417.491089 976.671692) 21541 POINT(835.631958 746.196533) 21542 POINT(671.626221 473.207489) 21543 POINT(400.029694 716.810669) 21544 POINT(250.349228 966.149597) 21545 POINT(312.446533 653.530273) 21546 POINT(869.655151 786.087524) 21547 POINT(267.446442 273.030365) 21548 POINT(85.2322464 404.893646) 21549 POINT(840.002197 861.59137) 21550 POINT(273.449097 997.918274) 21551 POINT(174.64798 482.716522) 21552 POINT(752.418396 438.204163) 21553 POINT(195.595169 362.656158) 21554 POINT(238.279785 5.98457527) 21555 POINT(896.405945 848.378174) 21556 POINT(792.223938 760.212585) 21557 POINT(671.830383 523.99408) 21558 POINT(102.486389 789.3526) 21559 POINT(64.5889359 903.809143) 21560 POINT(62.7792664 257.428497) 21561 POINT(736.727478 328.357361) 21562 POINT(807.712585 0.28581354) 21563 POINT(37.3280106 524.993469) 21564 POINT(503.136108 258.725281) 21565 POINT(652.571777 773.43689) 21566 POINT(574.575684 202.764084) 21567 POINT(495.31366 771.330444) 21568 POINT(702.738159 88.572525) 21569 POINT(52.4426575 423.236359) 21570 POINT(787.241516 971.027527) 21571 POINT(770.504456 692.025452) 21572 POINT(347.231598 785.36145) 21573 POINT(962.607666 933.415222) 21574 POINT(112.44722 616.729675) 21575 POINT(979.909302 377.217316) 21576 POINT(185.787552 42.9601173) 21577 POINT(654.481506 483.005005) 21578 POINT(406.836121 400.19986) 21579 POINT(10.7387476 159.389832) 21580 POINT(896.554016 661.172852) 21581 POINT(11.603961 436.503693) 21582 POINT(151.038696 699.4776) 21583 POINT(283.102936 277.843628) 21584 POINT(114.550087 49.5683899) 21585 POINT(805.100525 233.204926) 21586 POINT(989.753113 760.19696) 21587 POINT(2.56743908 507.477997) 21588 POINT(930.260376 619.179626) 21589 POINT(385.34668 454.720398) 21590 POINT(454.150421 330.061554) 21591 POINT(307.260284 222.86145) 21592 POINT(367.382996 217.867508) 21593 POINT(818.064026 257.005005) 21594 POINT(96.2488022 693.566589) 21595 POINT(312.856628 119.545036) 21596 POINT(704.630127 117.679977) 21597 POINT(419.835754 869.796326) 21598 POINT(74.4721146 365.786926) 21599 POINT(563.650513 346.799164) 21600 POINT(19.1745548 446.326813) 21601 POINT(981.034973 664.231445) 21602 POINT(695.428162 978.464966) 21603 POINT(809.055359 119.431862) 21604 POINT(998.281982 369.929382) 21605 POINT(703.418518 368.505341) 21606 POINT(539.01239 697.296204) 21607 POINT(342.258514 971.07196) 21608 POINT(890.863586 780.493896) 21609 POINT(25.1462555 371.78714) 21610 POINT(572.262634 846.223816) 21611 POINT(361.387054 687.278137) 21612 POINT(452.128784 719.095886) 21613 POINT(57.7436523 698.211853) 21614 POINT(91.9623871 282.718903) 21615 POINT(943.42572 614.061096) 21616 POINT(872.213318 274.552368) 21617 POINT(317.533081 155.616516) 21618 POINT(426.807495 467.435181) 21619 POINT(257.259949 475.882141) 21620 POINT(973.603333 237.397293) 21621 POINT(798.317627 367.791901) 21622 POINT(77.0249786 102.293137) 21623 POINT(584.600586 56.9187202) 21624 POINT(412.371216 360.265259) 21625 POINT(202.608292 884.371826) 21626 POINT(372.650177 672.960815) 21627 POINT(566.178345 100.363976) 21628 POINT(224.684662 678.326965) 21629 POINT(325.444092 329.083893) 21630 POINT(791.240051 224.86412) 21631 POINT(845.480774 562.753296) 21632 POINT(822.745056 977.209656) 21633 POINT(167.861435 594.9375) 21634 POINT(791.620972 226.271881) 21635 POINT(943.435303 923.788086) 21636 POINT(463.257355 160.874084) 21637 POINT(346.328003 424.025574) 21638 POINT(392.338165 427.666779) 21639 POINT(764.826843 596.85321) 21640 POINT(286.728027 968.209229) 21641 POINT(759.963135 319.968842) 21642 POINT(751.796936 213.52562) 21643 POINT(610.86853 611.40155) 21644 POINT(257.334381 214.64476) 21645 POINT(279.125458 632.633118) 21646 POINT(691.652771 60.7980118) 21647 POINT(952.230408 645.604248) 21648 POINT(720.802185 493.870483) 21649 POINT(426.955719 827.600586) 21650 POINT(445.83078 367.785095) 21651 POINT(502.960297 176.144516) 21652 POINT(841.675049 64.7905197) 21653 POINT(639.720642 406.978912) 21654 POINT(914.623291 97.7854309) 21655 POINT(328.116516 981.75647) 21656 POINT(881.553711 470.129913) 21657 POINT(712.31189 683.482727) 21658 POINT(356.635406 393.788177) 21659 POINT(816.56311 488.088623) 21660 POINT(136.329239 285.649872) 21661 POINT(462.011139 626.323975) 21662 POINT(760.91925 563.658264) 21663 POINT(355.262543 473.698456) 21664 POINT(363.128906 282.716827) 21665 POINT(476.641693 295.298889) 21666 POINT(107.455956 609.672119) 21667 POINT(452.532013 470.45993) 21668 POINT(696.638977 202.009735) 21669 POINT(52.4824829 958.561462) 21670 POINT(346.217804 781.927002) 21671 POINT(875.114258 786.393311) 21672 POINT(379.664276 282.439514) 21673 POINT(72.8304672 849.92395) 21674 POINT(203.360046 472.059998) 21675 POINT(87.5446167 454.902771) 21676 POINT(114.229118 666.892517) 21677 POINT(629.853943 663.127502) 21678 POINT(857.664795 131.878326) 21679 POINT(912.180481 571.633911) 21680 POINT(477.220398 815.200256) 21681 POINT(650.387451 303.377045) 21682 POINT(121.177963 800.915222) 21683 POINT(864.390869 418.640228) 21684 POINT(638.5177 94.77565) 21685 POINT(650.576172 120.535629) 21686 POINT(5.05156088 257.590668) 21687 POINT(59.7877464 495.273163) 21688 POINT(569.751831 790.645569) 21689 POINT(14.7874603 833.72644) 21690 POINT(454.923584 770.570068) 21691 POINT(939.012756 76.188324) 21692 POINT(38.277832 879.149048) 21693 POINT(870.961853 623.690735) 21694 POINT(599.738037 920.077576) 21695 POINT(310.476013 199.085663) 21696 POINT(943.643616 43.3578644) 21697 POINT(717.58667 417.10199) 21698 POINT(73.7277374 983.33551) 21699 POINT(372.576416 48.2791214) 21700 POINT(972.78186 573.317688) 21701 POINT(446.731506 216.139267) 21702 POINT(843.353821 933.964905) 21703 POINT(444.31662 544.916809) 21704 POINT(125.346077 990.494995) 21705 POINT(303.093018 436.971863) 21706 POINT(499.314728 192.096817) 21707 POINT(106.85643 580.650024) 21708 POINT(392.05954 463.354767) 21709 POINT(620.754578 612.411865) 21710 POINT(158.308563 880.1073) 21711 POINT(338.434082 738.775879) 21712 POINT(756.638916 339.783813) 21713 POINT(887.373596 486.839935) 21714 POINT(960.053894 488.303284) 21715 POINT(11.2150278 535.354675) 21716 POINT(735.801086 412.111908) 21717 POINT(799.767883 485.614014) 21718 POINT(642.142029 535.551697) 21719 POINT(811.012573 182.529343) 21720 POINT(872.056274 851.773865) 21721 POINT(495.379303 776.519348) 21722 POINT(828.616821 21.7564373) 21723 POINT(239.456451 627.25238) 21724 POINT(950.436584 103.193138) 21725 POINT(70.8520508 657.42218) 21726 POINT(477.746399 212.252884) 21727 POINT(863.068604 150.850098) 21728 POINT(223.003189 410.257782) 21729 POINT(831.96875 802.139526) 21730 POINT(400.272125 568.60437) 21731 POINT(384.838165 128.331985) 21732 POINT(593.922607 63.7980347) 21733 POINT(458.447998 975.640259) 21734 POINT(881.491211 445.947357) 21735 POINT(431.270905 641.079773) 21736 POINT(543.095459 904.764038) 21737 POINT(412.612091 190.042007) 21738 POINT(218.848175 513.947571) 21739 POINT(171.519989 512.526001) 21740 POINT(547.768311 95.3411026) 21741 POINT(472.693634 914.473877) 21742 POINT(421.282135 726.592896) 21743 POINT(15.0893269 993.659668) 21744 POINT(899.254028 679.029297) 21745 POINT(229.556305 874.721619) 21746 POINT(407.396057 65.4628754) 21747 POINT(670.732483 763.672485) 21748 POINT(105.83062 990.753052) 21749 POINT(749.863037 182.678009) 21750 POINT(786.585449 211.778763) 21751 POINT(791.55304 130.786514) 21752 POINT(523.084839 549.355408) 21753 POINT(379.233429 20.9696274) 21754 POINT(710.583191 764.451965) 21755 POINT(279.945892 319.279327) 21756 POINT(459.41153 667.370667) 21757 POINT(835.688782 874.734314) 21758 POINT(342.44873 614.513611) 21759 POINT(80.9003754 510.950348) 21760 POINT(767.0755 646.758423) 21761 POINT(326.692352 350.374603) 21762 POINT(205.849075 610.720154) 21763 POINT(953.32074 872.748779) 21764 POINT(848.187317 94.3210373) 21765 POINT(412.348785 950.214539) 21766 POINT(49.5498047 706.796875) 21767 POINT(276.400574 147.009094) 21768 POINT(80.1404037 586.814941) 21769 POINT(732.835938 782.337463) 21770 POINT(890.35498 367.691895) 21771 POINT(421.721527 506.717194) 21772 POINT(896.501892 643.306885) 21773 POINT(519.898926 76.4863205) 21774 POINT(582.304321 130.38031) 21775 POINT(601.629578 285.457581) 21776 POINT(147.044846 721.112732) 21777 POINT(20.2447071 549.756836) 21778 POINT(600.757568 864.169922) 21779 POINT(390.574402 880.166748) 21780 POINT(904.554993 741.698914) 21781 POINT(572.933044 119.917526) 21782 POINT(727.064087 456.125702) 21783 POINT(308.480347 594.546448) 21784 POINT(586.240173 474.211548) 21785 POINT(103.367935 199.541351) 21786 POINT(972.839294 359.143036) 21787 POINT(953.850708 441.965668) 21788 POINT(114.016617 956.841675) 21789 POINT(223.250626 820.735107) 21790 POINT(392.436554 683.364746) 21791 POINT(179.189407 958.90741) 21792 POINT(850.640503 20.02034) 21793 POINT(958.863892 138.104584) 21794 POINT(398.025452 286.049896) 21795 POINT(712.45697 893.492737) 21796 POINT(217.599274 890.478882) 21797 POINT(369.314667 436.695282) 21798 POINT(813.757507 620.667969) 21799 POINT(445.660858 228.341125) 21800 POINT(225.872818 801.497437) 21801 POINT(961.870117 631.999207) 21802 POINT(183.819702 942.904358) 21803 POINT(335.312897 373.002625) 21804 POINT(632.11853 512.20459) 21805 POINT(863.279907 390.720947) 21806 POINT(783.747681 839.428528) 21807 POINT(489.368866 518.424011) 21808 POINT(70.5314102 647.579407) 21809 POINT(163.985229 423.84671) 21810 POINT(375.189789 944.68927) 21811 POINT(551.398926 84.3880234) 21812 POINT(304.574005 810.846802) 21813 POINT(716.373352 207.662506) 21814 POINT(991.384644 141.66684) 21815 POINT(935.120056 910.590027) 21816 POINT(692.967773 491.245667) 21817 POINT(938.743347 373.718536) 21818 POINT(943.933594 504.42392) 21819 POINT(811.053772 342.995209) 21820 POINT(70.7813416 892.689087) 21821 POINT(853.407959 275.338593) 21822 POINT(801.021423 733.463257) 21823 POINT(1.95693457 649.343689) 21824 POINT(509.147705 942.623962) 21825 POINT(670.362366 786.125305) 21826 POINT(303.057831 859.312866) 21827 POINT(104.804024 261.148926) 21828 POINT(836.086853 905.437073) 21829 POINT(717.210938 215.012772) 21830 POINT(53.7828407 545.423889) 21831 POINT(224.484009 184.261063) 21832 POINT(376.106262 221.044067) 21833 POINT(411.547699 332.770294) 21834 POINT(353.200012 408.380829) 21835 POINT(678.006775 546.043091) 21836 POINT(97.6960068 416.835602) 21837 POINT(273.747925 896.462585) 21838 POINT(723.270935 391.586639) 21839 POINT(907.897034 654.434326) 21840 POINT(245.532333 199.945465) 21841 POINT(686.132019 731.222839) 21842 POINT(518.125183 378.001221) 21843 POINT(629.586365 132.653336) 21844 POINT(578.146606 126.843369) 21845 POINT(218.723999 382.797028) 21846 POINT(507.610718 908.173462) 21847 POINT(929.997437 663.016418) 21848 POINT(532.013733 568.545044) 21849 POINT(862.332886 589.669128) 21850 POINT(476.328552 81.7236252) 21851 POINT(633.146423 624.328064) 21852 POINT(989.458618 42.2705154) 21853 POINT(436.443207 340.178955) 21854 POINT(689.867676 463.594757) 21855 POINT(753.472839 439.522186) 21856 POINT(840.474243 364.171387) 21857 POINT(772.409607 77.8952103) 21858 POINT(545.77533 90.8070755) 21859 POINT(268.739136 763.713562) 21860 POINT(197.491348 492.786133) 21861 POINT(11.7075481 697.608398) 21862 POINT(848.86792 481.113037) 21863 POINT(761.724731 737.54187) 21864 POINT(947.333679 379.172058) 21865 POINT(504.499695 334.659668) 21866 POINT(928.809204 881.86499) 21867 POINT(703.572083 406.670166) 21868 POINT(306.039307 617.201599) 21869 POINT(345.536713 591.923218) 21870 POINT(252.452194 865.570801) 21871 POINT(281.525208 65.5239029) 21872 POINT(179.922638 196.299408) 21873 POINT(542.417053 771.611389) 21874 POINT(274.260254 778.028137) 21875 POINT(709.934509 721.835266) 21876 POINT(430.198334 198.935913) 21877 POINT(175.490005 883.173279) 21878 POINT(15.1960058 475.59024) 21879 POINT(905.782959 98.2822418) 21880 POINT(588.682495 856.482117) 21881 POINT(679.192871 683.90918) 21882 POINT(263.783966 250.032303) 21883 POINT(258.623871 588.489624) 21884 POINT(178.532593 979.56958) 21885 POINT(551.37146 775.524536) 21886 POINT(352.625366 832.649902) 21887 POINT(979.700745 366.885498) 21888 POINT(556.682556 412.888062) 21889 POINT(380.140533 827.699158) 21890 POINT(179.462479 893.635925) 21891 POINT(176.154572 415.382904) 21892 POINT(113.574623 829.393127) 21893 POINT(67.0995331 328.848724) 21894 POINT(513.96106 508.445587) 21895 POINT(363.605438 574.583374) 21896 POINT(740.985474 875.184692) 21897 POINT(521.225281 874.606445) 21898 POINT(659.699219 649.775024) 21899 POINT(604.029114 853.175354) 21900 POINT(710.188721 403.85614) 21901 POINT(899.522583 896.156067) 21902 POINT(225.4216 881.94043) 21903 POINT(835.731079 136.427231) 21904 POINT(490.391632 297.903778) 21905 POINT(678.520752 903.397095) 21906 POINT(100.43821 83.8610382) 21907 POINT(248.353958 123.151108) 21908 POINT(581.329407 164.824051) 21909 POINT(454.961487 772.025818) 21910 POINT(726.116821 207.511978) 21911 POINT(748.237305 790.240295) 21912 POINT(134.094589 16.816391) 21913 POINT(394.53299 338.966858) 21914 POINT(408.739563 790.627869) 21915 POINT(658.080505 934.859741) 21916 POINT(990.72644 895.547729) 21917 POINT(674.260437 587.191895) 21918 POINT(728.562866 185.601135) 21919 POINT(799.743713 376.594849) 21920 POINT(785.778198 287.223999) 21921 POINT(97.1734467 998.812744) 21922 POINT(65.7418747 240.934616) 21923 POINT(20.1531544 215.342484) 21924 POINT(922.027161 88.2530975) 21925 POINT(297.127228 234.439621) 21926 POINT(885.849854 477.270081) 21927 POINT(37.6615257 135.451385) 21928 POINT(557.686951 828.072815) 21929 POINT(597.162109 157.14386) 21930 POINT(706.043213 636.930298) 21931 POINT(209.845123 122.599152) 21932 POINT(223.927261 833.256287) 21933 POINT(636.5448 360.969635) 21934 POINT(597.49408 854.075012) 21935 POINT(453.604095 117.117058) 21936 POINT(329.200623 25.7966518) 21937 POINT(339.641968 786.787354) 21938 POINT(670.531799 591.986023) 21939 POINT(84.5635452 65.9517517) 21940 POINT(600.822388 88.5112534) 21941 POINT(664.034119 712.385254) 21942 POINT(236.005142 924.660095) 21943 POINT(785.156921 555.179016) 21944 POINT(464.444733 801.795593) 21945 POINT(835.786438 389.046478) 21946 POINT(239.697845 701.80249) 21947 POINT(259.405121 705.961609) 21948 POINT(468.510284 458.495575) 21949 POINT(456.550873 863.459961) 21950 POINT(126.199829 629.479004) 21951 POINT(387.289001 299.069214) 21952 POINT(123.467751 397.455688) 21953 POINT(950.18042 71.666275) 21954 POINT(504.457153 323.096893) 21955 POINT(852.743469 156.555923) 21956 POINT(944.475647 861.34082) 21957 POINT(305.796661 120.840248) 21958 POINT(859.293762 945.049927) 21959 POINT(286.686737 653.916565) 21960 POINT(61.5164604 580.616577) 21961 POINT(969.756653 785.063354) 21962 POINT(81.5186462 126.277512) 21963 POINT(940.129333 862.019897) 21964 POINT(492.288971 713.114136) 21965 POINT(40.7257957 632.841736) 21966 POINT(773.802246 489.150452) 21967 POINT(782.290955 225.343338) 21968 POINT(60.9408188 27.3932018) 21969 POINT(630.068542 876.976318) 21970 POINT(130.326218 238.511078) 21971 POINT(704.785461 871.510925) 21972 POINT(989.650208 508.156464) 21973 POINT(364.029266 991.492859) 21974 POINT(685.281189 968.359192) 21975 POINT(205.319153 616.861267) 21976 POINT(390.259338 883.257629) 21977 POINT(524.680603 375.692627) 21978 POINT(378.606842 43.5893593) 21979 POINT(522.976379 483.751129) 21980 POINT(239.60878 924.384521) 21981 POINT(253.377029 861.984009) 21982 POINT(196.940048 659.34906) 21983 POINT(702.053955 77.5243225) 21984 POINT(934.916504 757.287415) 21985 POINT(573.457642 662.008728) 21986 POINT(113.555756 955.001404) 21987 POINT(472.535156 484.55423) 21988 POINT(194.490952 832.46228) 21989 POINT(728.199768 424.677185) 21990 POINT(173.157089 365.339996) 21991 POINT(152.678452 447.493774) 21992 POINT(894.263062 653.486938) 21993 POINT(475.534637 440.078613) 21994 POINT(345.689972 728.617737) 21995 POINT(2.82857251 449.843018) 21996 POINT(412.066254 837.748413) 21997 POINT(532.791626 664.833618) 21998 POINT(207.929138 539.115906) 21999 POINT(589.440735 999.172363) 22000 POINT(189.291092 593.08728) 22001 POINT(322.747559 167.308838) 22002 POINT(602.401794 131.392303) 22003 POINT(754.440735 836.814087) 22004 POINT(513.483643 233.925537) 22005 POINT(536.514587 795.214111) 22006 POINT(170.286423 514.01355) 22007 POINT(727.427795 21.5635262) 22008 POINT(975.65448 931.731812) 22009 POINT(799.306946 353.454193) 22010 POINT(58.2430916 32.4889488) 22011 POINT(766.857849 835.905701) 22012 POINT(662.509155 497.218414) 22013 POINT(901.886841 346.709717) 22014 POINT(158.704102 34.2881317) 22015 POINT(471.230865 245.511765) 22016 POINT(906.506287 625.452942) 22017 POINT(643.495544 389.071869) 22018 POINT(958.97168 233.238556) 22019 POINT(562.434387 206.224731) 22020 POINT(335.595917 700.10614) 22021 POINT(321.334869 712.158447) 22022 POINT(446.541626 526.263184) 22023 POINT(510.78302 457.480865) 22024 POINT(39.6842422 949.347107) 22025 POINT(297.171082 813.489746) 22026 POINT(546.391418 602.332703) 22027 POINT(844.922241 567.09021) 22028 POINT(902.317993 473.435883) 22029 POINT(873.39209 178.503983) 22030 POINT(250.541153 801.670105) 22031 POINT(369.65036 899.525818) 22032 POINT(533.775818 422.852936) 22033 POINT(918.85553 182.444763) 22034 POINT(941.016968 332.660767) 22035 POINT(800.844421 868.347778) 22036 POINT(785.699402 395.842926) 22037 POINT(299.124084 732.452942) 22038 POINT(404.41626 134.583801) 22039 POINT(519.058044 303.114868) 22040 POINT(527.593689 945.540649) 22041 POINT(186.191696 945.54834) 22042 POINT(689.594238 386.195831) 22043 POINT(241.993774 12.1132612) 22044 POINT(221.968903 939.38501) 22045 POINT(749.562134 174.787369) 22046 POINT(269.562317 903.360962) 22047 POINT(420.932526 654.458008) 22048 POINT(847.593445 397.317078) 22049 POINT(563.549316 993.734497) 22050 POINT(934.508301 443.3367) 22051 POINT(77.3389511 848.600159) 22052 POINT(889.27301 350.295563) 22053 POINT(304.926758 328.48761) 22054 POINT(464.919647 238.987076) 22055 POINT(613.241089 38.997921) 22056 POINT(437.764008 206.954208) 22057 POINT(960.560852 786.847168) 22058 POINT(412.109863 923.111389) 22059 POINT(852.61792 18.6881218) 22060 POINT(924.877319 93.7631912) 22061 POINT(816.421326 375.823059) 22062 POINT(248.020752 371.238068) 22063 POINT(200.909897 162.719727) 22064 POINT(656.522644 642.846069) 22065 POINT(957.368774 221.522736) 22066 POINT(736.990906 890.648926) 22067 POINT(345.900879 365.888214) 22068 POINT(100.387794 741.64325) 22069 POINT(871.378479 609.56604) 22070 POINT(629.25293 614.063477) 22071 POINT(365.602264 397.936127) 22072 POINT(835.145752 829.901306) 22073 POINT(22.3659439 649.524841) 22074 POINT(679.242004 918.325073) 22075 POINT(457.40387 890.361633) 22076 POINT(174.523621 432.007629) 22077 POINT(932.539246 133.485687) 22078 POINT(551.367493 181.596924) 22079 POINT(757.637573 451.203613) 22080 POINT(742.266541 746.477112) 22081 POINT(398.209198 706.686279) 22082 POINT(391.721405 216.988968) 22083 POINT(881.83374 467.647766) 22084 POINT(692.972412 279.439392) 22085 POINT(952.247192 297.27774) 22086 POINT(716.266541 276.200226) 22087 POINT(883.332764 1.02628613) 22088 POINT(848.970398 705.260864) 22089 POINT(581.888794 862.615723) 22090 POINT(794.367493 603.676636) 22091 POINT(301.546448 804.757874) 22092 POINT(754.859314 364.97818) 22093 POINT(12.3378096 901.08667) 22094 POINT(891.099243 139.947479) 22095 POINT(851.047729 903.003784) 22096 POINT(539.020325 72.0058975) 22097 POINT(574.633972 851.324402) 22098 POINT(572.586365 122.21727) 22099 POINT(88.7993164 356.290833) 22100 POINT(515.360657 184.622665) 22101 POINT(790.505615 454.77652) 22102 POINT(775.698303 10.9554853) 22103 POINT(89.214859 810.078918) 22104 POINT(658.742493 226.027313) 22105 POINT(327.435974 392.929779) 22106 POINT(496.744965 383.138885) 22107 POINT(755.378967 173.227402) 22108 POINT(443.994843 685.29657) 22109 POINT(903.929077 27.1060848) 22110 POINT(763.387756 175.966354) 22111 POINT(899.635498 305.541962) 22112 POINT(51.1039505 16.3646088) 22113 POINT(57.9705963 866.591858) 22114 POINT(19.8015995 939.279785) 22115 POINT(637.885986 907.058289) 22116 POINT(608.119568 267.184113) 22117 POINT(430.93515 469.965576) 22118 POINT(177.193756 560.588989) 22119 POINT(959.323242 896.447571) 22120 POINT(968.513489 217.516785) 22121 POINT(364.700256 844.838989) 22122 POINT(360.10495 263.511719) 22123 POINT(556.95752 441.903687) 22124 POINT(501.168793 381.341553) 22125 POINT(161.484879 52.830349) 22126 POINT(813.489807 548.60553) 22127 POINT(134.17598 465.100067) 22128 POINT(508.876587 738.656555) 22129 POINT(313.937958 649.438538) 22130 POINT(526.392761 144.980759) 22131 POINT(438.708862 877.279053) 22132 POINT(185.159134 601.490723) 22133 POINT(377.260712 792.588257) 22134 POINT(875.106689 971.748718) 22135 POINT(217.757874 26.2645607) 22136 POINT(469.436584 590.229797) 22137 POINT(925.653625 338.96991) 22138 POINT(992.021301 570.273254) 22139 POINT(136.676285 834.164856) 22140 POINT(766.997864 298.900787) 22141 POINT(212.13739 13.8966408) 22142 POINT(625.939331 461.357239) 22143 POINT(458.472412 887.758728) 22144 POINT(262.932098 861.84668) 22145 POINT(733.804626 788.255005) 22146 POINT(975.457458 405.911438) 22147 POINT(942.540649 307.035156) 22148 POINT(478.123138 299.265106) 22149 POINT(893.817139 925.225586) 22150 POINT(349.081604 603.314026) 22151 POINT(988.407776 562.082703) 22152 POINT(790.603088 215.370117) 22153 POINT(346.971222 769.802795) 22154 POINT(534.063782 448.586761) 22155 POINT(523.914612 534.502319) 22156 POINT(877.008423 150.478439) 22157 POINT(417.41098 245.743225) 22158 POINT(440.519958 587.675171) 22159 POINT(517.135864 26.7424469) 22160 POINT(416.575897 647.108643) 22161 POINT(185.078598 197.424789) 22162 POINT(928.208496 659.535522) 22163 POINT(277.47403 611.233459) 22164 POINT(944.06134 880.221619) 22165 POINT(451.746643 168.199768) 22166 POINT(720.417419 294.394745) 22167 POINT(903.746216 180.923447) 22168 POINT(438.159515 523.01947) 22169 POINT(817.986633 942.176514) 22170 POINT(962.731689 649.464233) 22171 POINT(335.71463 813.795288) 22172 POINT(88.4493866 372.25946) 22173 POINT(529.185364 192.966187) 22174 POINT(294.019409 6.55182409) 22175 POINT(470.395935 596.170654) 22176 POINT(696.583008 140.827835) 22177 POINT(581.728333 880.782471) 22178 POINT(262.798218 730.430481) 22179 POINT(715.615479 863.083374) 22180 POINT(336.382751 740.358398) 22181 POINT(819.727539 618.383972) 22182 POINT(544.211975 192.486801) 22183 POINT(170.657135 908.73114) 22184 POINT(222.706635 322.969269) 22185 POINT(398.178619 86.6999435) 22186 POINT(691.169373 101.085609) 22187 POINT(347.490692 595.991882) 22188 POINT(220.386124 328.729919) 22189 POINT(40.1899414 722.582336) 22190 POINT(87.7647018 48.2520294) 22191 POINT(975.942871 451.215363) 22192 POINT(62.2372551 794.260864) 22193 POINT(973.934753 323.97821) 22194 POINT(363.924255 981.685364) 22195 POINT(972.309875 768.980774) 22196 POINT(139.090363 217.906052) 22197 POINT(299.234283 921.918457) 22198 POINT(777.288208 741.784058) 22199 POINT(93.2928925 971.233765) 22200 POINT(674.979187 348.207825) 22201 POINT(804.188782 254.069641) 22202 POINT(971.662048 765.274902) 22203 POINT(145.76976 966.195984) 22204 POINT(207.075638 364.953522) 22205 POINT(929.029602 441.198364) 22206 POINT(80.938942 550.203064) 22207 POINT(877.800781 534.664734) 22208 POINT(552.652039 55.8513107) 22209 POINT(657.374878 15.7484407) 22210 POINT(363.216522 501.454529) 22211 POINT(837.39679 834.798645) 22212 POINT(864.296875 756.93219) 22213 POINT(604.328796 280.832825) 22214 POINT(421.901306 331.646149) 22215 POINT(552.963013 961.209778) 22216 POINT(949.807007 21.0643444) 22217 POINT(466.370819 88.2937317) 22218 POINT(598.913879 279.13205) 22219 POINT(362.963226 120.160934) 22220 POINT(764.623169 206.504608) 22221 POINT(299.741364 516.086426) 22222 POINT(309.679138 23.0405655) 22223 POINT(102.232178 389.893066) 22224 POINT(872.372009 436.201508) 22225 POINT(802.03656 598.092957) 22226 POINT(930.405457 324.668213) 22227 POINT(638.497559 223.583115) 22228 POINT(713.022034 668.6026) 22229 POINT(885.982849 213.57457) 22230 POINT(345.227386 105.222939) 22231 POINT(945.054504 822.160889) 22232 POINT(718.357788 942.008911) 22233 POINT(354.870514 478.822021) 22234 POINT(414.106445 881.821533) 22235 POINT(994.1698 255.189117) 22236 POINT(670.919922 207.057175) 22237 POINT(415.882721 500.16568) 22238 POINT(431.955444 226.811172) 22239 POINT(260.673889 740.237183) 22240 POINT(215.256012 545.700806) 22241 POINT(100.564217 145.35817) 22242 POINT(115.271431 189.898666) 22243 POINT(36.3342247 804.656616) 22244 POINT(99.270668 990.098328) 22245 POINT(400.931915 569.444031) 22246 POINT(774.633179 428.234894) 22247 POINT(72.9831924 148.391953) 22248 POINT(548.660278 601.108704) 22249 POINT(75.2377167 591.582336) 22250 POINT(109.738976 126.516617) 22251 POINT(296.009705 902.437744) 22252 POINT(158.861984 943.630249) 22253 POINT(629.150879 660.890259) 22254 POINT(498.231384 657.330933) 22255 POINT(459.703979 634.778625) 22256 POINT(826.641663 604.809937) 22257 POINT(936.136108 72.2265091) 22258 POINT(740.375366 331.382965) 22259 POINT(652.079285 894.12677) 22260 POINT(537.392639 941.18927) 22261 POINT(325.06015 296.935242) 22262 POINT(968.727051 517.909973) 22263 POINT(499.176392 301.496094) 22264 POINT(274.409729 812.140808) 22265 POINT(733.568848 778.923157) 22266 POINT(835.249756 877.500427) 22267 POINT(767.490295 200.631088) 22268 POINT(922.850586 659.489563) 22269 POINT(702.533508 313.043579) 22270 POINT(147.905731 442.700378) 22271 POINT(818.039978 660.532593) 22272 POINT(803.79071 927.001831) 22273 POINT(569.872925 170.612289) 22274 POINT(844.570984 806.202026) 22275 POINT(26.7365704 186.801651) 22276 POINT(392.723572 478.463898) 22277 POINT(211.31662 465.983459) 22278 POINT(564.191345 732.076416) 22279 POINT(853.086914 843.246826) 22280 POINT(852.053589 369.360626) 22281 POINT(71.181221 868.462646) 22282 POINT(103.418556 92.4230042) 22283 POINT(712.902771 611.179016) 22284 POINT(238.5737 54.7052307) 22285 POINT(27.9905357 655.438538) 22286 POINT(731.535278 149.97551) 22287 POINT(190.56868 721.042908) 22288 POINT(634.615784 874.358398) 22289 POINT(847.777344 275.463654) 22290 POINT(677.297668 856.615784) 22291 POINT(412.553955 379.511444) 22292 POINT(995.506897 447.215179) 22293 POINT(592.162903 44.1185722) 22294 POINT(98.3957825 18.412384) 22295 POINT(596.238037 784.895935) 22296 POINT(206.159317 426.927246) 22297 POINT(368.818085 330.843567) 22298 POINT(497.550629 889.714478) 22299 POINT(886.749939 574.701416) 22300 POINT(696.068665 924.36615) 22301 POINT(238.667282 611.524536) 22302 POINT(858.838928 1.99529958) 22303 POINT(599.406616 881.383057) 22304 POINT(974.688782 785.823669) 22305 POINT(927.204956 59.4708443) 22306 POINT(743.655212 807.554504) 22307 POINT(896.466736 985.836121) 22308 POINT(618.097412 830.98291) 22309 POINT(226.551788 926.525024) 22310 POINT(207.792389 23.8511276) 22311 POINT(744.300171 152.878036) 22312 POINT(563.062866 100.984642) 22313 POINT(620.385498 826.394653) 22314 POINT(679.44165 401.154724) 22315 POINT(720.70575 608.959229) 22316 POINT(46.066288 144.450134) 22317 POINT(715.638916 173.899994) 22318 POINT(872.483276 4.36529064) 22319 POINT(871.99231 779.563843) 22320 POINT(162.529739 378.113312) 22321 POINT(522.866516 456.680664) 22322 POINT(400.259338 999.266724) 22323 POINT(355.572449 842.23938) 22324 POINT(815.445618 598.752075) 22325 POINT(491.437195 720.007751) 22326 POINT(2.09141302 364.142944) 22327 POINT(46.1983109 370.921051) 22328 POINT(772.798584 794.39917) 22329 POINT(476.219849 630.698486) 22330 POINT(198.124252 909.599365) 22331 POINT(632.605408 348.191742) 22332 POINT(659.615906 505.350586) 22333 POINT(489.186096 752.731995) 22334 POINT(747.649109 482.597504) 22335 POINT(986.209595 104.347023) 22336 POINT(973.177673 119.280357) 22337 POINT(172.361557 215.017273) 22338 POINT(501.878845 255.123077) 22339 POINT(744.637146 805.609253) 22340 POINT(628.863953 649.807739) 22341 POINT(417.815643 780.864685) 22342 POINT(114.218651 553.57312) 22343 POINT(120.251076 958.563049) 22344 POINT(119.310684 744.153381) 22345 POINT(455.887207 439.065125) 22346 POINT(599.395325 771.861572) 22347 POINT(917.467651 23.859684) 22348 POINT(100.99218 893.059387) 22349 POINT(34.6017189 28.0814152) 22350 POINT(917.379272 529.406616) 22351 POINT(622.54187 639.465271) 22352 POINT(110.042404 74.9370041) 22353 POINT(21.2427082 77.709198) 22354 POINT(598.853577 384.576416) 22355 POINT(215.63266 142.2043) 22356 POINT(153.073578 356.24585) 22357 POINT(871.298523 6.66510916) 22358 POINT(926.053955 94.8362122) 22359 POINT(47.3408394 46.0754662) 22360 POINT(118.945236 291.396179) 22361 POINT(930.513428 49.9123154) 22362 POINT(336.125092 626.750671) 22363 POINT(720.547058 886.795105) 22364 POINT(313.882477 318.005951) 22365 POINT(462.529236 806.134705) 22366 POINT(523.708069 862.162231) 22367 POINT(423.258301 374.248505) 22368 POINT(935.037354 727.132812) 22369 POINT(627.611938 93.6225433) 22370 POINT(185.294113 221.278503) 22371 POINT(569.305176 108.0065) 22372 POINT(966.532959 203.140671) 22373 POINT(377.216125 881.93457) 22374 POINT(469.950958 229.066635) 22375 POINT(921.115112 205.792206) 22376 POINT(807.224182 374.148987) 22377 POINT(374.645966 427.05191) 22378 POINT(979.347168 388.266388) 22379 POINT(592.418823 70.7573242) 22380 POINT(920.85614 291.552704) 22381 POINT(603.831848 379.341766) 22382 POINT(594.57135 590.497681) 22383 POINT(458.630493 180.656143) 22384 POINT(936.994202 265.889221) 22385 POINT(286.247742 556.500488) 22386 POINT(498.062408 696.352478) 22387 POINT(538.775085 220.480392) 22388 POINT(925.047363 26.3681183) 22389 POINT(90.252388 277.746033) 22390 POINT(506.038239 846.02533) 22391 POINT(855.219299 99.8454742) 22392 POINT(13.9002151 742.668274) 22393 POINT(387.646332 640.882385) 22394 POINT(230.129822 523.950012) 22395 POINT(126.093987 397.394867) 22396 POINT(136.114639 50.1465073) 22397 POINT(488.993408 890.460327) 22398 POINT(646.498413 394.074738) 22399 POINT(400.181 556.716125) 22400 POINT(438.358063 853.390076) 22401 POINT(372.263428 73.1091843) 22402 POINT(366.533691 446.821899) 22403 POINT(405.168274 721.73822) 22404 POINT(818.65979 348.085571) 22405 POINT(408.611298 505.21701) 22406 POINT(275.301483 54.4428101) 22407 POINT(947.560486 444.307526) 22408 POINT(126.292786 397.4646) 22409 POINT(984.614563 188.48793) 22410 POINT(232.228561 118.391327) 22411 POINT(176.166122 622.614075) 22412 POINT(791.523071 127.126724) 22413 POINT(722.049927 200.506241) 22414 POINT(213.084641 610.505005) 22415 POINT(900.96283 936.369507) 22416 POINT(40.1646767 360.828674) 22417 POINT(204.296875 260.289459) 22418 POINT(613.139771 459.196075) 22419 POINT(445.278107 733.111633) 22420 POINT(391.82309 309.867828) 22421 POINT(732.714355 122.913254) 22422 POINT(428.446991 912.518433) 22423 POINT(701.602783 789.73877) 22424 POINT(840.905762 749.977295) 22425 POINT(656.844238 192.643265) 22426 POINT(685.52002 221.891876) 22427 POINT(159.989487 624.353699) 22428 POINT(975.922852 772.189209) 22429 POINT(249.05307 760.610107) 22430 POINT(799.245972 733.427124) 22431 POINT(682.870178 65.7221069) 22432 POINT(305.298187 77.9109192) 22433 POINT(927.231628 570.915344) 22434 POINT(504.693359 248.211304) 22435 POINT(711.259399 601.12915) 22436 POINT(226.853348 703.499329) 22437 POINT(868.429443 998.158569) 22438 POINT(630.546509 818.575989) 22439 POINT(404.69342 618.14209) 22440 POINT(403.325928 5.90608501) 22441 POINT(701.809326 979.725281) 22442 POINT(260.217102 984.284668) 22443 POINT(940.888123 31.7657509) 22444 POINT(787.72583 718.506592) 22445 POINT(21.0643635 987.780334) 22446 POINT(761.254089 820.740295) 22447 POINT(830.98053 945.701599) 22448 POINT(180.030563 895.014648) 22449 POINT(914.448853 748.758545) 22450 POINT(754.494019 70.7286987) 22451 POINT(642.353088 934.900513) 22452 POINT(990.664368 599.422729) 22453 POINT(574.830627 122.250732) 22454 POINT(341.463318 61.8753662) 22455 POINT(963.420898 256.323517) 22456 POINT(836.403015 271.198456) 22457 POINT(322.681641 536.530579) 22458 POINT(811.865173 73.9099045) 22459 POINT(793.396301 795.802795) 22460 POINT(700.789429 797.505188) 22461 POINT(51.6808205 644.572266) 22462 POINT(612.553101 312.994568) 22463 POINT(794.927856 841.121521) 22464 POINT(653.842102 458.005463) 22465 POINT(189.611038 412.258942) 22466 POINT(575.214905 674.788147) 22467 POINT(8.64237213 834.906982) 22468 POINT(544.783813 72.8435669) 22469 POINT(756.489624 679.584106) 22470 POINT(272.059357 33.5805473) 22471 POINT(696.003418 105.658928) 22472 POINT(656.710999 880.693542) 22473 POINT(997.38031 345.999298) 22474 POINT(897.119629 881.747192) 22475 POINT(950.530457 201.211182) 22476 POINT(43.5730591 901.297485) 22477 POINT(369.091888 722.663757) 22478 POINT(255.357361 761.936584) 22479 POINT(597.30719 856.151001) 22480 POINT(157.523361 795.708496) 22481 POINT(367.97641 267.201965) 22482 POINT(282.571045 83.8184509) 22483 POINT(686.840027 813.19751) 22484 POINT(418.649994 527.49115) 22485 POINT(800.298096 870.677795) 22486 POINT(16.1838226 597.884033) 22487 POINT(581.709412 688.267334) 22488 POINT(579.290161 449.422089) 22489 POINT(617.151855 101.845268) 22490 POINT(90.3050995 10.7037439) 22491 POINT(233.091965 819.930847) 22492 POINT(91.5761642 792.771545) 22493 POINT(362.667572 330.33667) 22494 POINT(638.030884 969.212219) 22495 POINT(749.110657 576.191101) 22496 POINT(199.557983 920.036682) 22497 POINT(617.245117 448.301544) 22498 POINT(949.76886 916.003906) 22499 POINT(768.106995 904.991943) 22500 POINT(146.190506 117.036011) 22501 POINT(556.821716 989.110901) 22502 POINT(358.442993 123.287178) 22503 POINT(467.308716 9.59010983) 22504 POINT(710.671082 146.562805) 22505 POINT(894.681763 802.092468) 22506 POINT(600.755005 550.05896) 22507 POINT(261.001404 905.901245) 22508 POINT(273.056915 263.336121) 22509 POINT(24.0777607 83.86483) 22510 POINT(338.247528 35.2251015) 22511 POINT(372.194092 276.15741) 22512 POINT(740.787292 898.775208) 22513 POINT(137.936386 489.689758) 22514 POINT(612.736755 738.806763) 22515 POINT(497.902466 471.689758) 22516 POINT(965.681702 764.163208) 22517 POINT(466.184814 252.363251) 22518 POINT(757.75116 674.037109) 22519 POINT(730.555359 737.376526) 22520 POINT(730.179688 692.054932) 22521 POINT(541.737549 721.517578) 22522 POINT(690.933289 635.06543) 22523 POINT(746.664124 731.273254) 22524 POINT(988.032593 138.322586) 22525 POINT(582.942932 502.808411) 22526 POINT(571.932617 818.15155) 22527 POINT(28.7756367 195.168488) 22528 POINT(807.35553 901.022095) 22529 POINT(663.296814 424.312592) 22530 POINT(526.137329 958.646606) 22531 POINT(547.864563 195.285522) 22532 POINT(382.889679 277.302216) 22533 POINT(328.487 886.562805) 22534 POINT(506.663025 861.719727) 22535 POINT(900.701416 697.075806) 22536 POINT(559.522949 575.867065) 22537 POINT(716.342468 762.998718) 22538 POINT(395.336792 791.705688) 22539 POINT(370.366821 364.027893) 22540 POINT(540.560974 630.04248) 22541 POINT(37.0160904 909.214172) 22542 POINT(127.985962 303.111725) 22543 POINT(757.965149 377.641083) 22544 POINT(841.937012 715.285156) 22545 POINT(478.740204 512.231812) 22546 POINT(970.160278 745.734985) 22547 POINT(119.72319 764.190308) 22548 POINT(97.4922333 65.0127411) 22549 POINT(218.750336 965.139282) 22550 POINT(66.4870911 857.008728) 22551 POINT(736.042297 183.63501) 22552 POINT(20.6567554 999.921997) 22553 POINT(239.481079 687.770996) 22554 POINT(40.1792603 566.605957) 22555 POINT(737.70575 387.000854) 22556 POINT(684.303345 538.501709) 22557 POINT(76.8956604 330.722229) 22558 POINT(728.786011 381.496979) 22559 POINT(819.325073 580.791199) 22560 POINT(293.243866 240.235153) 22561 POINT(460.818573 97.8333817) 22562 POINT(108.097015 494.067444) 22563 POINT(381.243134 750.459595) 22564 POINT(792.782349 948.0271) 22565 POINT(46.3983307 501.383972) 22566 POINT(78.1805038 61.5714645) 22567 POINT(258.492981 589.70343) 22568 POINT(981.934448 42.6783867) 22569 POINT(81.3357773 724.587402) 22570 POINT(63.856266 942.105408) 22571 POINT(919.045654 58.3133774) 22572 POINT(281.368073 799.771118) 22573 POINT(905.270142 907.578979) 22574 POINT(316.475159 540.453552) 22575 POINT(643.462402 748.541687) 22576 POINT(943.815552 448.115295) 22577 POINT(635.724121 95.941864) 22578 POINT(394.696381 316.570801) 22579 POINT(734.199341 178.427231) 22580 POINT(288.652802 568.948547) 22581 POINT(259.265869 294.91571) 22582 POINT(549.025085 940.130615) 22583 POINT(245.195816 850.243286) 22584 POINT(492.536743 546.36792) 22585 POINT(617.054565 57.7866554) 22586 POINT(638.19165 36.4820137) 22587 POINT(71.0105896 413.209412) 22588 POINT(574.436279 882.012756) 22589 POINT(450.693665 303.556366) 22590 POINT(765.026428 962.522461) 22591 POINT(489.6521 551.835754) 22592 POINT(476.089294 320.806854) 22593 POINT(757.322937 606.841187) 22594 POINT(35.3016396 75.4073563) 22595 POINT(414.382721 284.745636) 22596 POINT(557.862061 899.606323) 22597 POINT(192.140442 32.0532761) 22598 POINT(715.084595 512.682007) 22599 POINT(677.159363 203.546539) 22600 POINT(405.182861 226.889359) 22601 POINT(152.050247 694.267151) 22602 POINT(590.465088 589.334839) 22603 POINT(640.00531 807.299072) 22604 POINT(572.167969 529.163025) 22605 POINT(475.892731 620.7771) 22606 POINT(518.091431 535.435547) 22607 POINT(310.491394 495.3573) 22608 POINT(776.752014 258.551086) 22609 POINT(404.719543 160.201691) 22610 POINT(995.768555 447.434937) 22611 POINT(923.637695 969.832458) 22612 POINT(105.581245 346.066254) 22613 POINT(559.834717 140.093918) 22614 POINT(79.4432297 6.86915302) 22615 POINT(644.92865 768.657837) 22616 POINT(987.123047 506.358521) 22617 POINT(216.830521 209.367004) 22618 POINT(126.220924 732.122253) 22619 POINT(647.768433 401.208313) 22620 POINT(47.8900795 352.271576) 22621 POINT(80.6045837 318.446686) 22622 POINT(652.629517 272.067963) 22623 POINT(323.585846 90.6567001) 22624 POINT(479.373199 461.327423) 22625 POINT(99.3528366 87.9132843) 22626 POINT(63.1650696 524.823486) 22627 POINT(793.930725 440.72345) 22628 POINT(212.222717 951.298218) 22629 POINT(594.790283 895.498169) 22630 POINT(126.225494 170.513565) 22631 POINT(211.286469 439.204041) 22632 POINT(19.4122734 568.314514) 22633 POINT(131.359787 871.65033) 22634 POINT(852.858215 543.856384) 22635 POINT(558.956665 86.6347275) 22636 POINT(651.565247 768.496948) 22637 POINT(98.9463882 635.490967) 22638 POINT(868.317993 640.546814) 22639 POINT(790.266235 595.683655) 22640 POINT(245.319412 782.887878) 22641 POINT(941.623352 525.825073) 22642 POINT(457.25177 450.827606) 22643 POINT(183.450134 545.331177) 22644 POINT(539.549561 195.499619) 22645 POINT(329.212616 285.980957) 22646 POINT(210.397095 744.301636) 22647 POINT(730.986145 593.629761) 22648 POINT(884.465027 135.582489) 22649 POINT(338.951843 646.600098) 22650 POINT(604.002136 891.954163) 22651 POINT(230.76033 353.809845) 22652 POINT(635.042236 787.757751) 22653 POINT(891.315979 17.1007214) 22654 POINT(902.744019 304.516113) 22655 POINT(501.336884 820.725647) 22656 POINT(282.949738 557.447693) 22657 POINT(267.051636 544.390991) 22658 POINT(492.743988 590.715759) 22659 POINT(804.737244 298.110657) 22660 POINT(600.066467 894.075012) 22661 POINT(521.737366 126.508865) 22662 POINT(123.347298 594.627625) 22663 POINT(127.515396 121.839211) 22664 POINT(141.891617 470.792114) 22665 POINT(9.69396782 579.216797) 22666 POINT(564.656555 58.2441788) 22667 POINT(444.549866 600.367432) 22668 POINT(690.58728 147.041046) 22669 POINT(30.8237896 45.1817551) 22670 POINT(872.377441 773.557678) 22671 POINT(469.855194 500.753052) 22672 POINT(605.09259 899.032471) 22673 POINT(821.968079 908.221863) 22674 POINT(792.355103 737.855225) 22675 POINT(684.848755 97.1305923) 22676 POINT(589.691895 693.272217) 22677 POINT(728.62793 929.203674) 22678 POINT(834.252441 6.59293032) 22679 POINT(626.891479 268.244232) 22680 POINT(92.615593 99.5529099) 22681 POINT(413.402313 55.523674) 22682 POINT(197.137894 650.13031) 22683 POINT(519.554077 381.618195) 22684 POINT(402.696777 292.365997) 22685 POINT(384.255768 372.711792) 22686 POINT(39.3246994 463.768768) 22687 POINT(330.942444 734.170349) 22688 POINT(524.803772 973.480896) 22689 POINT(958.733765 964.543762) 22690 POINT(550.620789 854.953613) 22691 POINT(257.550323 132.551407) 22692 POINT(83.7114334 663.474548) 22693 POINT(19.5040264 27.1522598) 22694 POINT(907.220642 637.16156) 22695 POINT(448.487732 791.218689) 22696 POINT(831.2724 756.2854) 22697 POINT(562.108398 442.978058) 22698 POINT(467.790039 296.91098) 22699 POINT(508.569153 102.230705) 22700 POINT(813.19165 708.404541) 22701 POINT(87.5680313 162.003387) 22702 POINT(503.864685 668.495667) 22703 POINT(948.625854 987.973572) 22704 POINT(889.405823 743.104675) 22705 POINT(350.492554 160.562225) 22706 POINT(348.504883 850.456787) 22707 POINT(287.541382 486.509094) 22708 POINT(96.0123367 490.149078) 22709 POINT(837.60199 452.12262) 22710 POINT(94.2180557 628.471985) 22711 POINT(952.891052 938.959229) 22712 POINT(286.889282 52.7087555) 22713 POINT(622.076965 609.789001) 22714 POINT(874.480957 631.255249) 22715 POINT(475.699341 649.318542) 22716 POINT(599.592041 95.757782) 22717 POINT(915.912292 526.873047) 22718 POINT(322.764954 939.223511) 22719 POINT(729.711792 169.313919) 22720 POINT(552.808533 684.003906) 22721 POINT(725.454834 689.733276) 22722 POINT(18.7862911 890.102417) 22723 POINT(126.711296 424.40564) 22724 POINT(1.59951854 762.451721) 22725 POINT(504.565735 66.1861267) 22726 POINT(603.775757 381.305084) 22727 POINT(746.790955 741.751709) 22728 POINT(751.846558 368.984467) 22729 POINT(595.355042 823.141235) 22730 POINT(774.880127 55.8346596) 22731 POINT(356.12851 466.933594) 22732 POINT(366.774353 895.889038) 22733 POINT(548.192932 478.716675) 22734 POINT(553.379883 376.622528) 22735 POINT(144.690414 263.467926) 22736 POINT(586.110779 976.039001) 22737 POINT(120.711845 766.940308) 22738 POINT(62.2272186 743.630554) 22739 POINT(802.426697 377.605438) 22740 POINT(822.392578 859.487976) 22741 POINT(869.76947 447.246246) 22742 POINT(545.478638 488.708466) 22743 POINT(244.899704 120.644806) 22744 POINT(399.119934 467.51651) 22745 POINT(770.852234 526.325195) 22746 POINT(515.517334 795.111816) 22747 POINT(897.923157 571.966003) 22748 POINT(551.908569 663.712891) 22749 POINT(226.154922 876.491394) 22750 POINT(723.529785 331.750275) 22751 POINT(955.671448 38.2135658) 22752 POINT(726.483582 665.459106) 22753 POINT(155.581985 32.5774231) 22754 POINT(114.522629 666.649902) 22755 POINT(437.850128 117.538101) 22756 POINT(376.30426 934.230286) 22757 POINT(604.171448 28.4731293) 22758 POINT(50.2350006 329.776917) 22759 POINT(188.903656 312.528961) 22760 POINT(287.804291 329.407593) 22761 POINT(444.952362 494.773438) 22762 POINT(861.622864 732.284729) 22763 POINT(185.86676 11.4496756) 22764 POINT(442.67749 787.840454) 22765 POINT(308.003387 880.603333) 22766 POINT(227.161224 17.4104824) 22767 POINT(651.351074 314.612732) 22768 POINT(564.334412 300.186096) 22769 POINT(824.487732 585.538757) 22770 POINT(964.030945 317.660614) 22771 POINT(504.289795 621.207581) 22772 POINT(789.599976 495.0914) 22773 POINT(638.698792 991.644897) 22774 POINT(566.327576 823.589233) 22775 POINT(623.446045 111.622162) 22776 POINT(356.918488 713.571716) 22777 POINT(411.656311 871.003235) 22778 POINT(227.74881 531.387756) 22779 POINT(247.325089 261.274841) 22780 POINT(808.776855 58.4810448) 22781 POINT(216.554123 410.701813) 22782 POINT(145.788666 529.667786) 22783 POINT(589.010559 304.199951) 22784 POINT(968.752625 537.755737) 22785 POINT(309.364319 145.114441) 22786 POINT(620.286011 210.233124) 22787 POINT(405.580719 128.10733) 22788 POINT(872.538696 85.1541824) 22789 POINT(247.16391 414.394867) 22790 POINT(831.24585 843.30127) 22791 POINT(829.140869 427.361755) 22792 POINT(907.491699 938.50293) 22793 POINT(722.25592 578.465454) 22794 POINT(209.171585 544.548828) 22795 POINT(240.143051 66.3061447) 22796 POINT(646.69696 583.000122) 22797 POINT(281.915588 107.379974) 22798 POINT(995.717529 779.518982) 22799 POINT(343.54541 512.577454) 22800 POINT(251.236496 225.914307) 22801 POINT(311.599152 841.79248) 22802 POINT(933.290405 200.34343) 22803 POINT(894.497131 888.541931) 22804 POINT(858.295105 559.057678) 22805 POINT(273.712067 171.365005) 22806 POINT(19.2996426 790.39502) 22807 POINT(712.61792 658.702576) 22808 POINT(72.9308243 386.700531) 22809 POINT(214.539581 614.299744) 22810 POINT(914.075867 4.4024477) 22811 POINT(722.572632 221.907486) 22812 POINT(537.785217 549.133301) 22813 POINT(978.701965 297.781219) 22814 POINT(901.048096 834.720337) 22815 POINT(763.526367 709.416138) 22816 POINT(567.701111 455.871735) 22817 POINT(403.503052 136.966965) 22818 POINT(263.589661 508.864563) 22819 POINT(821.196106 103.35482) 22820 POINT(5.16294909 457.539185) 22821 POINT(4.79994774 89.2659454) 22822 POINT(565.013733 829.084412) 22823 POINT(153.599396 384.821136) 22824 POINT(777.668945 231.750092) 22825 POINT(311.528503 720.995911) 22826 POINT(596.519714 1.65954363) 22827 POINT(505.232056 796.872864) 22828 POINT(119.590401 335.856781) 22829 POINT(57.7774963 465.112335) 22830 POINT(692.461243 171.771271) 22831 POINT(234.291412 464.863434) 22832 POINT(58.7677689 88.2112656) 22833 POINT(899.312256 371.552734) 22834 POINT(703.128235 779.214294) 22835 POINT(713.692261 555.062378) 22836 POINT(562.039734 979.632874) 22837 POINT(185.705841 855.842896) 22838 POINT(162.304001 280.876892) 22839 POINT(809.007446 872.226501) 22840 POINT(684.095581 888.061279) 22841 POINT(589.744812 936.961487) 22842 POINT(90.1806488 747.833191) 22843 POINT(585.096436 297.76358) 22844 POINT(170.48761 471.913849) 22845 POINT(72.5322647 722.062622) 22846 POINT(431.78476 338.054199) 22847 POINT(648.069153 752.356689) 22848 POINT(228.334381 251.45491) 22849 POINT(745.721863 443.506012) 22850 POINT(346.886383 670.158997) 22851 POINT(690.364014 430.394043) 22852 POINT(597.192383 52.5244751) 22853 POINT(681.570801 182.748062) 22854 POINT(439.434692 679.291443) 22855 POINT(874.103149 898.276794) 22856 POINT(627.767639 683.261536) 22857 POINT(617.010376 525.995605) 22858 POINT(542.883606 623.120728) 22859 POINT(661.519287 274.65152) 22860 POINT(807.584961 941.997864) 22861 POINT(799.688965 788.129211) 22862 POINT(862.34137 524.130737) 22863 POINT(581.133118 117.84317) 22864 POINT(60.4274673 313.285492) 22865 POINT(931.950806 114.251411) 22866 POINT(115.298279 483.774048) 22867 POINT(204.490799 834.239197) 22868 POINT(190.304642 999.062256) 22869 POINT(282.971191 722.319092) 22870 POINT(809.756897 984.732849) 22871 POINT(300.656586 391.102692) 22872 POINT(40.9019966 253.246124) 22873 POINT(559.777405 785.669189) 22874 POINT(951.909485 509.441956) 22875 POINT(734.285767 868.268982) 22876 POINT(297.911316 340.591309) 22877 POINT(54.6410408 970.848999) 22878 POINT(285.077942 546.194092) 22879 POINT(177.987854 915.406555) 22880 POINT(374.335114 824.424805) 22881 POINT(919.337341 444.015198) 22882 POINT(627.451599 328.560028) 22883 POINT(120.821854 494.999512) 22884 POINT(487.805176 302.924194) 22885 POINT(156.022446 238.264069) 22886 POINT(998.228333 459.522369) 22887 POINT(972.148376 385.93634) 22888 POINT(864.149048 159.884399) 22889 POINT(59.9897537 234.611206) 22890 POINT(0.0853909999 908.634033) 22891 POINT(283.696564 798.564514) 22892 POINT(982.885132 373.461182) 22893 POINT(401.322174 650.936523) 22894 POINT(360.475922 738.677673) 22895 POINT(242.585739 109.299065) 22896 POINT(918.021301 935.167969) 22897 POINT(590.466614 856.064819) 22898 POINT(625.068237 317.715607) 22899 POINT(624.175903 161.348358) 22900 POINT(121.477348 971.44165) 22901 POINT(437.014038 530.252319) 22902 POINT(743.714478 703.084351) 22903 POINT(336.002319 797.84729) 22904 POINT(446.647644 231.382416) 22905 POINT(881.475952 678.701477) 22906 POINT(692.655945 345.801971) 22907 POINT(532.683655 294.664978) 22908 POINT(816.06488 206.810532) 22909 POINT(256.60675 771.32782) 22910 POINT(336.242767 257.02005) 22911 POINT(36.5753441 142.380447) 22912 POINT(699.821472 784.574097) 22913 POINT(217.829025 329.854584) 22914 POINT(447.266144 302.566437) 22915 POINT(460.072327 190.395844) 22916 POINT(490.350098 996.078979) 22917 POINT(471.575836 612.411987) 22918 POINT(177.070663 347.289215) 22919 POINT(992.849182 510.884125) 22920 POINT(934.361511 125.30175) 22921 POINT(825.873047 656.169434) 22922 POINT(294.93576 557.825806) 22923 POINT(290.957001 466.24411) 22924 POINT(14.1805019 164.086441) 22925 POINT(889.241882 830.131409) 22926 POINT(200.785065 290.585907) 22927 POINT(284.581024 370.962738) 22928 POINT(58.41922 362.313507) 22929 POINT(952.009827 223.07785) 22930 POINT(56.1026421 641.150452) 22931 POINT(7.3935585 827.260437) 22932 POINT(405.869965 410.569458) 22933 POINT(198.375504 645.733398) 22934 POINT(375.005707 911.952942) 22935 POINT(742.82196 283.622711) 22936 POINT(646.69635 614.234436) 22937 POINT(418.082245 761.599304) 22938 POINT(70.7434998 967.024048) 22939 POINT(881.182373 616.297119) 22940 POINT(321.446014 270.444031) 22941 POINT(813.310608 877.484497) 22942 POINT(262.462616 685.743652) 22943 POINT(886.513611 566.061646) 22944 POINT(971.104614 343.17038) 22945 POINT(329.410065 222.625) 22946 POINT(112.898888 501.959045) 22947 POINT(683.078613 676.046814) 22948 POINT(600.354553 446.707611) 22949 POINT(177.347321 124.379112) 22950 POINT(589.726685 320.492279) 22951 POINT(588.882446 971.120483) 22952 POINT(941.398682 94.1344147) 22953 POINT(861.255188 348.841309) 22954 POINT(321.61673 939.973206) 22955 POINT(647.190674 995.321594) 22956 POINT(387.153656 144.866852) 22957 POINT(76.2258987 16.3163013) 22958 POINT(654.62384 479.09903) 22959 POINT(836.912598 981.054016) 22960 POINT(100.31321 394.202637) 22961 POINT(299.498993 924.448181) 22962 POINT(605.34552 202.83519) 22963 POINT(178.8479 862.229675) 22964 POINT(598.727051 287.797699) 22965 POINT(762.452209 815.899658) 22966 POINT(654.364929 575.736816) 22967 POINT(197.178558 563.276978) 22968 POINT(67.7358322 815.304932) 22969 POINT(761.31189 112.82959) 22970 POINT(226.808472 331.483551) 22971 POINT(544.218506 496.904602) 22972 POINT(756.549072 739.943542) 22973 POINT(941.256836 907.016907) 22974 POINT(266.422272 840.884888) 22975 POINT(851.319153 485.741272) 22976 POINT(78.4468079 454.557373) 22977 POINT(271.597229 542.331848) 22978 POINT(525.389771 85.0270233) 22979 POINT(29.9595604 386.444397) 22980 POINT(453.532166 919.758423) 22981 POINT(918.968872 955.356079) 22982 POINT(64.1834259 95.8967209) 22983 POINT(314.433594 539.600708) 22984 POINT(507.957001 336.042389) 22985 POINT(120.989876 50.3058815) 22986 POINT(984.064575 813.731201) 22987 POINT(311.179749 794.716187) 22988 POINT(974.987854 429.300629) 22989 POINT(464.585083 776.013) 22990 POINT(599.414795 928.507385) 22991 POINT(199.681152 266.819824) 22992 POINT(530.975159 487.942871) 22993 POINT(681.191711 245.570053) 22994 POINT(97.9034042 422.398254) 22995 POINT(15.9965191 169.683121) 22996 POINT(843.233276 579.883911) 22997 POINT(185.316528 193.348511) 22998 POINT(233.565079 210.687271) 22999 POINT(642.366089 40.3824539) 23000 POINT(307.035767 698.936523) 23001 POINT(103.42437 299.449677) 23002 POINT(751.182739 490.546478) 23003 POINT(724.968567 420.908997) 23004 POINT(305.37326 942.691711) 23005 POINT(466.893219 428.249329) 23006 POINT(49.9404793 150.248398) 23007 POINT(246.788361 594.757019) 23008 POINT(337.819 207.75679) 23009 POINT(575.781372 625.549377) 23010 POINT(60.1324806 865.794617) 23011 POINT(893.685303 289.897919) 23012 POINT(33.7907104 303.261017) 23013 POINT(279.408447 797.950867) 23014 POINT(428.782715 317.609161) 23015 POINT(669.141602 354.274231) 23016 POINT(890.693665 829.826477) 23017 POINT(65.2599792 358.414612) 23018 POINT(888.352417 296.858643) 23019 POINT(436.793793 285.924194) 23020 POINT(558.875122 648.742615) 23021 POINT(399.483978 763.576721) 23022 POINT(117.281128 339.124207) 23023 POINT(199.739975 157.073624) 23024 POINT(633.014526 274.870483) 23025 POINT(720.2547 791.238647) 23026 POINT(491.927887 922.566406) 23027 POINT(961.745728 910.009583) 23028 POINT(203.521439 66.8426895) 23029 POINT(849.537109 610.552002) 23030 POINT(876.550049 198.385422) 23031 POINT(957.854919 222.275238) 23032 POINT(871.705383 659.413574) 23033 POINT(359.293457 182.771118) 23034 POINT(1.27648842 683.296387) 23035 POINT(890.544128 139.703537) 23036 POINT(538.930176 685.353394) 23037 POINT(604.931091 297.046356) 23038 POINT(37.6028976 336.90033) 23039 POINT(562.442627 458.032623) 23040 POINT(42.658783 468.069794) 23041 POINT(721.797729 593.584595) 23042 POINT(696.757324 971.247559) 23043 POINT(957.772217 397.323029) 23044 POINT(631.239929 31.177784) 23045 POINT(869.790283 255.602997) 23046 POINT(548.353943 995.554321) 23047 POINT(392.044373 458.123474) 23048 POINT(344.484467 467.529816) 23049 POINT(406.647797 661.855225) 23050 POINT(285.073395 85.9453278) 23051 POINT(823.18512 474.307983) 23052 POINT(598.523621 437.755768) 23053 POINT(472.260895 183.110092) 23054 POINT(343.679199 488.262604) 23055 POINT(797.140076 784.734131) 23056 POINT(661.136475 327.151886) 23057 POINT(674.334229 478.813904) 23058 POINT(633.498657 311.391052) 23059 POINT(787.145935 134.348785) 23060 POINT(247.680161 379.797058) 23061 POINT(179.998825 104.270653) 23062 POINT(120.567856 349.218658) 23063 POINT(878.236877 385.093994) 23064 POINT(167.951309 950.063354) 23065 POINT(538.477539 974.023865) 23066 POINT(668.961304 681.260925) 23067 POINT(847.187073 367.942078) 23068 POINT(810.751709 864.227539) 23069 POINT(986.665833 243.727188) 23070 POINT(850.394897 545.144714) 23071 POINT(692.973877 239.616608) 23072 POINT(265.628052 768.678528) 23073 POINT(822.496277 470.641418) 23074 POINT(399.014069 748.559937) 23075 POINT(583.978516 521.030823) 23076 POINT(50.1992035 256.255402) 23077 POINT(670.21521 491.997406) 23078 POINT(610.346802 193.95137) 23079 POINT(5.52420664 589.203064) 23080 POINT(736.681396 508.539429) 23081 POINT(107.205406 320.815918) 23082 POINT(261.723053 926.138306) 23083 POINT(614.984192 770.385132) 23084 POINT(252.665909 169.462814) 23085 POINT(173.748398 500.377258) 23086 POINT(566.031555 481.211761) 23087 POINT(941.575562 339.364441) 23088 POINT(268.8992 174.385376) 23089 POINT(745.126526 781.384705) 23090 POINT(261.506134 214.475311) 23091 POINT(604.086975 668.380432) 23092 POINT(880.761658 298.830231) 23093 POINT(609.723511 689.967407) 23094 POINT(187.303253 715.857239) 23095 POINT(162.170853 488.819061) 23096 POINT(740.335571 262.358032) 23097 POINT(367.289978 540.020203) 23098 POINT(597.952576 383.138062) 23099 POINT(65.4650803 729.828186) 23100 POINT(902.397949 325.598602) 23101 POINT(938.29718 709.979492) 23102 POINT(29.334259 716.500122) 23103 POINT(419.689789 680.221558) 23104 POINT(910.371033 452.247742) 23105 POINT(558.311768 551.984741) 23106 POINT(744.654602 922.320251) 23107 POINT(449.999512 283.516785) 23108 POINT(67.2056198 272.876434) 23109 POINT(620.580933 130.478683) 23110 POINT(660.964355 969.790771) 23111 POINT(609.252808 220.67897) 23112 POINT(411.370789 283.687805) 23113 POINT(625.524902 97.6492233) 23114 POINT(185.082489 330.868317) 23115 POINT(252.494644 61.1175308) 23116 POINT(649.566467 940.897705) 23117 POINT(797.593445 404.718048) 23118 POINT(572.359497 252.213715) 23119 POINT(678.828918 169.711319) 23120 POINT(185.472198 570.202515) 23121 POINT(637.947693 220.932907) 23122 POINT(262.534546 557.200073) 23123 POINT(127.993263 246.113174) 23124 POINT(427.789703 300.837097) 23125 POINT(795.689941 386.221893) 23126 POINT(144.01062 656.730774) 23127 POINT(11.3279142 342.311676) 23128 POINT(761.033081 555.015869) 23129 POINT(160.869263 958.819092) 23130 POINT(851.192749 659.523071) 23131 POINT(255.466843 955.404236) 23132 POINT(918.964783 976.088013) 23133 POINT(9.249506 935.773682) 23134 POINT(9.10420322 215.676208) 23135 POINT(141.959015 324.76297) 23136 POINT(13.2718344 62.5263138) 23137 POINT(361.834534 22.1043472) 23138 POINT(805.315918 1.75852334) 23139 POINT(437.162659 376.250031) 23140 POINT(139.021545 189.910934) 23141 POINT(461.402405 403.464996) 23142 POINT(391.295563 561.310608) 23143 POINT(924.136963 850.86731) 23144 POINT(303.630798 149.354446) 23145 POINT(413.808868 837.536316) 23146 POINT(393.601044 551.576721) 23147 POINT(671.889038 31.2002773) 23148 POINT(407.529633 808.357361) 23149 POINT(593.577881 20.9618225) 23150 POINT(249.916229 315.43985) 23151 POINT(507.216492 136.243942) 23152 POINT(142.393845 8.86987209) 23153 POINT(371.304535 111.497368) 23154 POINT(175.74437 96.9508362) 23155 POINT(190.519363 893.673828) 23156 POINT(966.767273 357.375732) 23157 POINT(84.6542816 489.144379) 23158 POINT(314.646759 149.505051) 23159 POINT(739.33667 18.3527489) 23160 POINT(769.089783 133.103043) 23161 POINT(945.249451 325.389923) 23162 POINT(28.2337933 447.634918) 23163 POINT(191.99736 326.840424) 23164 POINT(434.591827 143.005814) 23165 POINT(750.492126 296.276703) 23166 POINT(341.686005 706.550232) 23167 POINT(858.656677 999.898621) 23168 POINT(295.212524 985.948792) 23169 POINT(852.38031 822.879211) 23170 POINT(276.402924 937.972412) 23171 POINT(768.123291 68.4622879) 23172 POINT(360.642548 853.567993) 23173 POINT(824.632141 551.862244) 23174 POINT(173.448212 826.473267) 23175 POINT(586.263489 543.273621) 23176 POINT(303.789459 691.567505) 23177 POINT(664.940491 399.150818) 23178 POINT(139.779053 797.441711) 23179 POINT(755.403687 734.350891) 23180 POINT(405.407379 272.752991) 23181 POINT(170.938614 371.341766) 23182 POINT(433.819366 765.967407) 23183 POINT(984.033447 213.693207) 23184 POINT(50.3292542 491.890411) 23185 POINT(336.464539 552.338074) 23186 POINT(947.755493 205.344238) 23187 POINT(502.245087 563.096191) 23188 POINT(911.684509 982.519043) 23189 POINT(228.970398 96.7899399) 23190 POINT(941.003723 354.558258) 23191 POINT(690.728699 518.68219) 23192 POINT(659.680237 977.13501) 23193 POINT(829.430542 807.276611) 23194 POINT(832.620117 96.0427246) 23195 POINT(789.773376 374.723816) 23196 POINT(887.970398 184.702377) 23197 POINT(742.859619 888.766418) 23198 POINT(169.991852 278.143585) 23199 POINT(399.609619 541.5672) 23200 POINT(963.33075 343.237) 23201 POINT(520.560913 771.741394) 23202 POINT(856.971069 31.154129) 23203 POINT(394.559631 965.93689) 23204 POINT(673.305176 20.2472191) 23205 POINT(574.480408 474.478088) 23206 POINT(346.681793 931.442017) 23207 POINT(690.844849 716.631897) 23208 POINT(871.682373 180.10524) 23209 POINT(309.553925 835.323181) 23210 POINT(782.550781 705.10498) 23211 POINT(31.5344543 414.598328) 23212 POINT(803.107056 14.9617729) 23213 POINT(151.687943 87.4088058) 23214 POINT(5.68393755 530.756287) 23215 POINT(581.999451 343.590637) 23216 POINT(425.828064 544.605225) 23217 POINT(607.026245 671.10022) 23218 POINT(937.529724 900.45459) 23219 POINT(665.370911 16.1104298) 23220 POINT(845.526306 530.70636) 23221 POINT(352.410156 883.572327) 23222 POINT(93.8415756 428.457703) 23223 POINT(409.883545 689.037781) 23224 POINT(923.36554 322.178162) 23225 POINT(627.448486 950.262024) 23226 POINT(889.271484 959.392517) 23227 POINT(428.618408 824.347473) 23228 POINT(227.850983 350.919739) 23229 POINT(875.372192 369.545319) 23230 POINT(951.497742 820.598572) 23231 POINT(907.041565 772.527893) 23232 POINT(762.777588 131.001633) 23233 POINT(662.854248 929.840149) 23234 POINT(879.609375 87.8166962) 23235 POINT(634.868164 19.7978992) 23236 POINT(322.494873 779.390442) 23237 POINT(398.235718 627.435974) 23238 POINT(753.540222 289.057404) 23239 POINT(586.164246 184.943573) 23240 POINT(900.910522 272.597626) 23241 POINT(263.104736 823.704407) 23242 POINT(229.667114 58.3984642) 23243 POINT(625.231628 577.57196) 23244 POINT(312.099457 881.178528) 23245 POINT(73.93396 371.945679) 23246 POINT(242.255066 869.625122) 23247 POINT(795.703796 536.807556) 23248 POINT(68.0823364 482.794891) 23249 POINT(498.489716 116.97818) 23250 POINT(171.253952 129.040375) 23251 POINT(436.413239 957.931885) 23252 POINT(603.280518 744.594788) 23253 POINT(165.983719 124.678299) 23254 POINT(834.021301 587.436462) 23255 POINT(59.9744377 384.194458) 23256 POINT(135.351105 486.951477) 23257 POINT(730.445984 234.031433) 23258 POINT(811.865662 243.133591) 23259 POINT(528.658508 791.999512) 23260 POINT(808.551392 893.14325) 23261 POINT(873.555847 40.8549232) 23262 POINT(431.876251 651.154663) 23263 POINT(567.018677 729.898926) 23264 POINT(278.475464 613.343689) 23265 POINT(566.174927 220.206009) 23266 POINT(190.323059 828.020752) 23267 POINT(61.859066 785.299255) 23268 POINT(565.953613 226.333115) 23269 POINT(647.085022 173.589386) 23270 POINT(525.984619 747.314087) 23271 POINT(917.521118 447.516693) 23272 POINT(833.098145 968.62793) 23273 POINT(922.940125 347.430359) 23274 POINT(630.078491 758.070618) 23275 POINT(458.095551 311.790894) 23276 POINT(715.926208 118.267075) 23277 POINT(545.200745 210.881104) 23278 POINT(414.040894 126.228432) 23279 POINT(498.05072 226.094116) 23280 POINT(985.684265 929.281311) 23281 POINT(377.826569 803.879578) 23282 POINT(847.222595 298.770935) 23283 POINT(238.899719 421.050171) 23284 POINT(604.945251 552.911072) 23285 POINT(433.759888 970.481384) 23286 POINT(623.637451 420.869843) 23287 POINT(91.9133072 883.003052) 23288 POINT(694.744446 952.927917) 23289 POINT(228.742325 877.837158) 23290 POINT(520.221436 98.245285) 23291 POINT(375.51709 231.25206) 23292 POINT(535.464294 424.953094) 23293 POINT(77.7628021 187.789627) 23294 POINT(868.629272 390.125305) 23295 POINT(590.894653 142.697037) 23296 POINT(486.875824 963.456238) 23297 POINT(942.444336 295.914764) 23298 POINT(278.416565 542.600952) 23299 POINT(640.451355 930.613586) 23300 POINT(631.687805 385.156067) 23301 POINT(426.934052 381.935577) 23302 POINT(121.52636 27.8370667) 23303 POINT(921.176208 229.004837) 23304 POINT(22.1506119 813.834229) 23305 POINT(915.369202 625.785706) 23306 POINT(316.317657 41.5132065) 23307 POINT(698.571716 859.952637) 23308 POINT(640.708069 859.111938) 23309 POINT(645.74884 835.203674) 23310 POINT(633.945312 729.032776) 23311 POINT(546.704773 868.618286) 23312 POINT(573.383972 580.528992) 23313 POINT(723.050537 903.589417) 23314 POINT(90.7205963 60.4529381) 23315 POINT(926.064636 399.018433) 23316 POINT(438.53717 118.303001) 23317 POINT(688.686401 970.956116) 23318 POINT(987.151184 454.751831) 23319 POINT(163.296234 553.429688) 23320 POINT(813.812988 693.436157) 23321 POINT(283.903961 896.162354) 23322 POINT(807.681213 965.963379) 23323 POINT(195.51059 629.250427) 23324 POINT(260.565216 532.376038) 23325 POINT(471.491882 665.210815) 23326 POINT(504.720856 86.874382) 23327 POINT(446.756134 159.376282) 23328 POINT(557.717102 155.225662) 23329 POINT(613.161072 658.251648) 23330 POINT(656.37616 0.392621696) 23331 POINT(115.368301 995.621643) 23332 POINT(925.976135 381.536835) 23333 POINT(939.2276 277.029877) 23334 POINT(609.359497 414.358612) 23335 POINT(968.297302 269.44632) 23336 POINT(348.511963 354.011047) 23337 POINT(92.7332611 294.86795) 23338 POINT(996.882385 952.487732) 23339 POINT(462.146301 440.222534) 23340 POINT(575.652283 857.96991) 23341 POINT(581.895325 432.876038) 23342 POINT(955.900879 442.293427) 23343 POINT(640.536133 798.504944) 23344 POINT(38.8475571 223.246841) 23345 POINT(432.787598 88.9341583) 23346 POINT(958.906311 340.256989) 23347 POINT(793.544067 730.242126) 23348 POINT(693.098999 135.190842) 23349 POINT(198.410248 850.092224) 23350 POINT(422.522888 965.171936) 23351 POINT(307.348694 767.594666) 23352 POINT(757.242004 752.761841) 23353 POINT(750.814758 404.38501) 23354 POINT(158.493896 172.50676) 23355 POINT(480.843628 953.002197) 23356 POINT(427.920288 634.236755) 23357 POINT(959.708679 734.66095) 23358 POINT(292.210175 595.792725) 23359 POINT(340.868103 325.367218) 23360 POINT(905.782288 104.833641) 23361 POINT(443.971161 24.875267) 23362 POINT(489.752838 605.458313) 23363 POINT(648.832764 400.701019) 23364 POINT(491.37738 865.60144) 23365 POINT(71.769928 538.399719) 23366 POINT(206.493958 691.19458) 23367 POINT(358.903961 364.303131) 23368 POINT(83.4229813 839.210815) 23369 POINT(780.476318 838.251709) 23370 POINT(198.618484 60.8519707) 23371 POINT(761.541199 317.522583) 23372 POINT(143.560791 475.821442) 23373 POINT(589.334351 110.749008) 23374 POINT(723.501404 867.031006) 23375 POINT(426.065765 329.375122) 23376 POINT(79.4145737 0.989498615) 23377 POINT(385.846558 26.9456806) 23378 POINT(695.694214 621.944214) 23379 POINT(842.071411 231.76825) 23380 POINT(41.7074356 377.619171) 23381 POINT(181.097946 530.30835) 23382 POINT(562.345093 41.7915306) 23383 POINT(351.870941 66.8114777) 23384 POINT(331.392334 75.2496414) 23385 POINT(49.7463112 174.442139) 23386 POINT(815.197815 773.803894) 23387 POINT(564.804382 845.666138) 23388 POINT(969.194031 92.5094757) 23389 POINT(897.165894 151.277557) 23390 POINT(865.884094 202.274872) 23391 POINT(949.119019 810.615967) 23392 POINT(492.657043 62.3583565) 23393 POINT(529.238525 947.981873) 23394 POINT(477.045197 804.31427) 23395 POINT(708.262329 705.515381) 23396 POINT(714.738159 684.775879) 23397 POINT(239.544952 649.958679) 23398 POINT(63.8880768 331.720917) 23399 POINT(365.813293 654.500183) 23400 POINT(3.17895341 177.845612) 23401 POINT(274.215179 267.652496) 23402 POINT(959.102478 432.286774) 23403 POINT(706.909607 124.820679) 23404 POINT(621.337708 915.722473) 23405 POINT(86.4572983 106.475464) 23406 POINT(168.635117 192.007904) 23407 POINT(853.911011 106.884789) 23408 POINT(808.856079 930.759094) 23409 POINT(250.788986 122.025429) 23410 POINT(236.637619 479.092682) 23411 POINT(290.172485 83.0744324) 23412 POINT(574.480957 497.108215) 23413 POINT(271.255951 406.866455) 23414 POINT(584.97522 901.320435) 23415 POINT(588.183228 576.626038) 23416 POINT(623.558105 584.404358) 23417 POINT(288.428253 440.493835) 23418 POINT(96.0033951 650.219421) 23419 POINT(446.959808 72.841423) 23420 POINT(449.157288 572.669617) 23421 POINT(866.723694 500.707458) 23422 POINT(766.890198 498.695282) 23423 POINT(398.466278 887.123169) 23424 POINT(378.487244 253.376221) 23425 POINT(626.615234 682.469055) 23426 POINT(979.582153 743.157166) 23427 POINT(203.96492 117.803459) 23428 POINT(285.200714 806.637512) 23429 POINT(475.536621 299.420441) 23430 POINT(302.581573 936.850586) 23431 POINT(528.585144 166.46405) 23432 POINT(753.38739 140.788437) 23433 POINT(586.809814 53.5909271) 23434 POINT(769.024414 848.022278) 23435 POINT(956.031128 434.419495) 23436 POINT(710.497375 708.155701) 23437 POINT(77.6732407 250.424545) 23438 POINT(260.117126 194.705032) 23439 POINT(785.230591 711.264099) 23440 POINT(934.132324 669.60675) 23441 POINT(545.499817 509.108429) 23442 POINT(963.811707 357.324188) 23443 POINT(336.860962 459.85788) 23444 POINT(381.587677 70.5055923) 23445 POINT(235.550842 872.285645) 23446 POINT(875.668457 450.993652) 23447 POINT(690.071167 671.85553) 23448 POINT(991.22467 511.992645) 23449 POINT(634.11853 954.587341) 23450 POINT(962.176025 851.280823) 23451 POINT(868.351013 218.856567) 23452 POINT(461.194794 654.045166) 23453 POINT(707.670105 786.020691) 23454 POINT(916.369507 510.385315) 23455 POINT(498.381439 656.483154) 23456 POINT(523.737 770.563416) 23457 POINT(841.611572 304.100342) 23458 POINT(401.405792 175.090454) 23459 POINT(876.833801 252.168259) 23460 POINT(402.210907 491.767029) 23461 POINT(771.549316 27.713129) 23462 POINT(299.828247 923.509583) 23463 POINT(197.467316 602.162415) 23464 POINT(463.226013 815.475037) 23465 POINT(445.433838 306.056793) 23466 POINT(764.570679 274.56485) 23467 POINT(414.507294 579.245728) 23468 POINT(557.672119 446.382446) 23469 POINT(806.729126 677.595642) 23470 POINT(802.322449 492.298187) 23471 POINT(848.170227 509.856293) 23472 POINT(182.150635 531.234131) 23473 POINT(946.757629 296.827393) 23474 POINT(710.696228 606.530579) 23475 POINT(174.333588 417.824493) 23476 POINT(386.253021 897.837708) 23477 POINT(938.629761 90.7563019) 23478 POINT(937.71051 102.04763) 23479 POINT(882.73114 891.627808) 23480 POINT(301.326385 977.144714) 23481 POINT(935.673828 292.320923) 23482 POINT(835.418945 190.40477) 23483 POINT(636.68866 633.058594) 23484 POINT(272.813232 690.168579) 23485 POINT(794.041138 264.624481) 23486 POINT(339.089142 71.6094666) 23487 POINT(222.295578 27.4230881) 23488 POINT(840.94635 715.297485) 23489 POINT(562.16687 77.6686707) 23490 POINT(819.154114 617.351135) 23491 POINT(936.043152 138.865906) 23492 POINT(233.525848 716.599548) 23493 POINT(669.027954 128.393036) 23494 POINT(225.228973 463.114136) 23495 POINT(327.340942 379.142853) 23496 POINT(609.700317 310.005432) 23497 POINT(538.644531 205.173065) 23498 POINT(169.806992 583.423279) 23499 POINT(185.956604 724.138977) 23500 POINT(25.1198521 771.794006) 23501 POINT(660.03009 789.532593) 23502 POINT(783.818726 42.6347809) 23503 POINT(544.307739 759.657043) 23504 POINT(976.523254 752.59491) 23505 POINT(849.804749 60.6767387) 23506 POINT(17.0582066 763.100647) 23507 POINT(250.66568 26.4779625) 23508 POINT(427.7677 550.161438) 23509 POINT(558.940552 22.5542717) 23510 POINT(553.550415 833.197144) 23511 POINT(361.715454 104.419983) 23512 POINT(419.504517 815.45575) 23513 POINT(595.619751 408.508301) 23514 POINT(665.255798 89.623909) 23515 POINT(201.548111 626.102051) 23516 POINT(721.148987 919.127869) 23517 POINT(562.941162 535.177612) 23518 POINT(137.0755 451.542084) 23519 POINT(439.044556 943.341736) 23520 POINT(496.489105 589.258728) 23521 POINT(643.219177 75.1608887) 23522 POINT(861.944031 758.536194) 23523 POINT(946.743164 482.594879) 23524 POINT(623.221741 846.276489) 23525 POINT(99.8785019 797.058899) 23526 POINT(826.864258 670.046692) 23527 POINT(521.665771 920.572021) 23528 POINT(131.901581 707.2453) 23529 POINT(13.4533176 681.859985) 23530 POINT(989.060913 520.835571) 23531 POINT(772.210083 187.1409) 23532 POINT(211.232269 609.263245) 23533 POINT(319.959961 466.237396) 23534 POINT(975.999207 895.210266) 23535 POINT(605.098328 959.85321) 23536 POINT(364.324982 10.4965534) 23537 POINT(177.917816 586.176697) 23538 POINT(633.835022 82.1461639) 23539 POINT(782.506226 752.908813) 23540 POINT(594.495483 167.415573) 23541 POINT(54.5523148 698.454712) 23542 POINT(195.933533 504.111633) 23543 POINT(961.877686 923.097961) 23544 POINT(949.364868 658.087341) 23545 POINT(692.221252 442.842346) 23546 POINT(246.413849 674.313293) 23547 POINT(479.564819 916.238098) 23548 POINT(358.475891 823.918701) 23549 POINT(292.863342 874.50415) 23550 POINT(713.246704 230.243927) 23551 POINT(894.314392 859.848755) 23552 POINT(462.330597 936.032043) 23553 POINT(841.276245 43.9216232) 23554 POINT(841.254028 115.82914) 23555 POINT(967.755371 171.284988) 23556 POINT(49.7017326 557.497009) 23557 POINT(477.288177 530.76593) 23558 POINT(467.427277 40.1327591) 23559 POINT(326.425629 195.274689) 23560 POINT(795.264648 268.927704) 23561 POINT(222.396194 348.499207) 23562 POINT(949.30481 927.495422) 23563 POINT(523.506531 10.7843866) 23564 POINT(221.042328 652.496216) 23565 POINT(168.201248 528.084778) 23566 POINT(781.715149 192.14473) 23567 POINT(598.32019 454.362) 23568 POINT(192.851212 188.201721) 23569 POINT(441.977997 862.037292) 23570 POINT(278.016907 319.729065) 23571 POINT(517.773315 95.5833969) 23572 POINT(806.880798 506.272552) 23573 POINT(878.975525 744.146362) 23574 POINT(689.034058 418.891876) 23575 POINT(76.3180237 369.95517) 23576 POINT(221.735657 260.869446) 23577 POINT(351.552734 775.559326) 23578 POINT(786.206421 117.916946) 23579 POINT(929.629639 325.603394) 23580 POINT(847.713013 742.79541) 23581 POINT(132.009811 824.507751) 23582 POINT(245.04567 424.638641) 23583 POINT(442.086487 472.303864) 23584 POINT(317.785645 232.708267) 23585 POINT(498.98526 524.817383) 23586 POINT(130.806839 942.226746) 23587 POINT(939.268311 34.8864517) 23588 POINT(833.703796 11.3696604) 23589 POINT(36.5457802 777.439758) 23590 POINT(410.356567 139.117508) 23591 POINT(774.073486 507.772766) 23592 POINT(805.825684 889.754639) 23593 POINT(720.603821 679.597656) 23594 POINT(692.538818 208.278931) 23595 POINT(338.687775 783.382385) 23596 POINT(186.732254 99.3837204) 23597 POINT(939.055725 447.735931) 23598 POINT(333.909149 419.159607) 23599 POINT(784.519348 284.370209) 23600 POINT(536.37561 392.029846) 23601 POINT(50.0412331 323.322479) 23602 POINT(637.530029 765.087524) 23603 POINT(748.349365 468.133087) 23604 POINT(650.457031 237.989914) 23605 POINT(946.982422 154.645432) 23606 POINT(119.587975 139.546524) 23607 POINT(825.328613 791.751831) 23608 POINT(533.925415 83.4014816) 23609 POINT(369.568695 333.103027) 23610 POINT(721.915955 236.6745) 23611 POINT(878.084229 726.509521) 23612 POINT(607.932617 729.623047) 23613 POINT(376.612 29.0856686) 23614 POINT(408.072723 864.489441) 23615 POINT(526.08313 693.35553) 23616 POINT(301.276276 31.485836) 23617 POINT(479.703491 220.400604) 23618 POINT(796.452637 383.76532) 23619 POINT(320.532227 854.158997) 23620 POINT(596.30835 276.263824) 23621 POINT(425.862061 835.290771) 23622 POINT(355.968872 541.142212) 23623 POINT(177.476944 538.324463) 23624 POINT(674.47998 801.498474) 23625 POINT(512.871948 442.451843) 23626 POINT(218.173294 51.970871) 23627 POINT(615.393921 710.3172) 23628 POINT(538.141235 637.352783) 23629 POINT(622.764648 312.05249) 23630 POINT(844.24762 906.554016) 23631 POINT(223.455429 290.872986) 23632 POINT(372.907959 217.958725) 23633 POINT(866.908691 344.614258) 23634 POINT(626.119141 522.862732) 23635 POINT(572.776611 333.143188) 23636 POINT(458.85376 496.26181) 23637 POINT(850.427246 318.709747) 23638 POINT(998.026001 549.468628) 23639 POINT(475.338928 24.7537708) 23640 POINT(638.980774 118.154236) 23641 POINT(84.1737595 143.788544) 23642 POINT(788.176636 334.347687) 23643 POINT(93.9161301 237.73175) 23644 POINT(709.867798 664.228638) 23645 POINT(999.251038 321.042633) 23646 POINT(349.718506 818.37561) 23647 POINT(911.212524 880.480408) 23648 POINT(612.089417 351.272308) 23649 POINT(352.068512 613.073792) 23650 POINT(476.051575 886.74762) 23651 POINT(977.554993 619.460815) 23652 POINT(966.946228 0.661359668) 23653 POINT(547.18988 2.22779894) 23654 POINT(227.591934 17.220871) 23655 POINT(173.863495 632.963196) 23656 POINT(331.239838 527.103821) 23657 POINT(550.731628 377.811707) 23658 POINT(575.412048 400.991547) 23659 POINT(450.258881 935.329346) 23660 POINT(523.273315 678.718323) 23661 POINT(618.829102 34.0109367) 23662 POINT(201.753708 580.181519) 23663 POINT(130.546738 467.213104) 23664 POINT(510.951935 268.226074) 23665 POINT(23.6968937 983.176636) 23666 POINT(888.230469 45.3255272) 23667 POINT(408.95224 585.942139) 23668 POINT(646.804993 675.070679) 23669 POINT(324.06665 293.252808) 23670 POINT(669.60614 166.912186) 23671 POINT(107.860779 809.771851) 23672 POINT(484.944183 969.571289) 23673 POINT(497.293121 143.466705) 23674 POINT(334.357361 296.946899) 23675 POINT(613.954285 670.798157) 23676 POINT(21.4204845 612.752869) 23677 POINT(427.178009 59.0051651) 23678 POINT(912.796936 869.669006) 23679 POINT(665.014404 313.522247) 23680 POINT(962.13501 319.285919) 23681 POINT(824.568481 833.253357) 23682 POINT(509.356628 854.969055) 23683 POINT(320.796967 39.5378304) 23684 POINT(541.406494 336.008148) 23685 POINT(647.0448 975.272522) 23686 POINT(207.697342 973.716736) 23687 POINT(18.7658463 343.536774) 23688 POINT(489.492401 84.7885742) 23689 POINT(479.519806 130.544769) 23690 POINT(805.634766 671.123169) 23691 POINT(89.1054916 111.806709) 23692 POINT(978.805176 846.034668) 23693 POINT(139.330139 814.616333) 23694 POINT(821.440063 962.426453) 23695 POINT(483.315613 561.619995) 23696 POINT(766.263 917.931091) 23697 POINT(977.408264 972.119629) 23698 POINT(553.89447 914.602722) 23699 POINT(756.823669 188.390503) 23700 POINT(293.156738 476.538696) 23701 POINT(961.380066 327.757904) 23702 POINT(975.546814 708.468872) 23703 POINT(538.434021 457.200714) 23704 POINT(204.111786 183.170517) 23705 POINT(646.94281 231.187866) 23706 POINT(891.944519 937.457825) 23707 POINT(818.064392 226.278687) 23708 POINT(603.169067 438.001526) 23709 POINT(570.634155 714.33551) 23710 POINT(109.17762 42.5106926) 23711 POINT(389.105011 922.230774) 23712 POINT(377.703461 62.6572456) 23713 POINT(430.112549 777.534119) 23714 POINT(317.896423 556.94458) 23715 POINT(692.866577 300.312531) 23716 POINT(89.8442307 109.565659) 23717 POINT(657.325134 499.973236) 23718 POINT(24.0333405 140.818893) 23719 POINT(129.967194 217.746536) 23720 POINT(260.257294 442.146057) 23721 POINT(635.449219 430.300262) 23722 POINT(134.780106 221.23645) 23723 POINT(627.14093 224.073685) 23724 POINT(350.593903 707.447083) 23725 POINT(862.24939 854.81665) 23726 POINT(742.941772 423.180725) 23727 POINT(877.833679 929.748718) 23728 POINT(388.60614 331.636017) 23729 POINT(820.50116 963.563477) 23730 POINT(243.608688 874.90387) 23731 POINT(211.084167 52.6700096) 23732 POINT(973.875 208.77951) 23733 POINT(180.389801 638.692017) 23734 POINT(164.159256 902.544434) 23735 POINT(485.571594 762.057922) 23736 POINT(352.29126 824.645874) 23737 POINT(229.300018 574.866028) 23738 POINT(991.924683 590.567993) 23739 POINT(754.343872 440.074402) 23740 POINT(353.876373 659.797302) 23741 POINT(101.171455 708.045776) 23742 POINT(843.419128 177.787567) 23743 POINT(700.622681 263.801239) 23744 POINT(251.22377 850.030579) 23745 POINT(460.601013 476.852844) 23746 POINT(34.85812 283.13501) 23747 POINT(6.21553993 73.6731415) 23748 POINT(14.7881842 247.262497) 23749 POINT(786.132263 269.819244) 23750 POINT(485.757599 511.01886) 23751 POINT(881.446594 839.186218) 23752 POINT(16.4446487 220.246124) 23753 POINT(292.679047 522.173096) 23754 POINT(415.728394 73.0173264) 23755 POINT(959.152039 658.680115) 23756 POINT(964.184875 762.043396) 23757 POINT(834.789185 317.416534) 23758 POINT(979.148865 680.820312) 23759 POINT(635.167358 637.219116) 23760 POINT(738.513733 729.967712) 23761 POINT(840.46051 21.802742) 23762 POINT(323.220551 114.747772) 23763 POINT(723.867737 175.072678) 23764 POINT(845.053406 333.749634) 23765 POINT(439.481506 433.920105) 23766 POINT(51.9807472 552.835266) 23767 POINT(989.704956 169.023209) 23768 POINT(398.05957 308.968628) 23769 POINT(470.773438 166.943085) 23770 POINT(232.167557 957.39325) 23771 POINT(714.317688 379.706238) 23772 POINT(905.997253 565.331055) 23773 POINT(979.972656 497.711792) 23774 POINT(886.40155 559.108765) 23775 POINT(963.673157 750.412842) 23776 POINT(643.021118 483.16571) 23777 POINT(151.49585 714.652588) 23778 POINT(384.970123 753.173706) 23779 POINT(630.834167 776.262756) 23780 POINT(59.1488495 446.545959) 23781 POINT(358.591156 75.6546173) 23782 POINT(269.570099 527.587097) 23783 POINT(647.32428 117.381004) 23784 POINT(507.112793 647.737) 23785 POINT(160.385071 847.367981) 23786 POINT(820.684448 880.693237) 23787 POINT(979.7005 525.690369) 23788 POINT(545.319641 675.205566) 23789 POINT(626.69281 538.991638) 23790 POINT(114.839638 553.181763) 23791 POINT(157.822876 812.154907) 23792 POINT(214.043259 906.219116) 23793 POINT(329.367859 366.470123) 23794 POINT(408.81015 799.188965) 23795 POINT(117.444687 19.7898426) 23796 POINT(975.921143 265.100067) 23797 POINT(703.224487 187.118912) 23798 POINT(434.907166 851.804993) 23799 POINT(82.1294098 187.477203) 23800 POINT(462.020813 479.489288) 23801 POINT(250.073517 630.052551) 23802 POINT(594.808777 200.204346) 23803 POINT(58.1332016 90.6042786) 23804 POINT(771.186768 569.513611) 23805 POINT(236.171738 914.387512) 23806 POINT(98.9592514 788.782349) 23807 POINT(270.774689 126.76844) 23808 POINT(833.07489 938.539246) 23809 POINT(116.39077 895.046936) 23810 POINT(814.384949 773.09314) 23811 POINT(531.946594 78.2681961) 23812 POINT(264.226105 99.2336731) 23813 POINT(907.670532 205.092377) 23814 POINT(955.845825 523.049622) 23815 POINT(95.8067932 827.826904) 23816 POINT(221.726044 764.946777) 23817 POINT(129.830002 973.863342) 23818 POINT(783.560364 150.759995) 23819 POINT(33.3182487 229.972473) 23820 POINT(990.443481 763.961121) 23821 POINT(733.564941 491.802673) 23822 POINT(155.312943 958.538757) 23823 POINT(536.191833 247.722519) 23824 POINT(427.535309 992.95105) 23825 POINT(643.471741 365.700714) 23826 POINT(121.573128 852.044434) 23827 POINT(846.916992 152.701218) 23828 POINT(931.85083 416.027832) 23829 POINT(158.191925 162.191284) 23830 POINT(749.325867 944.161072) 23831 POINT(703.94928 56.5407867) 23832 POINT(306.064117 937.038879) 23833 POINT(470.282837 272.683838) 23834 POINT(13.6327009 287.153625) 23835 POINT(289.755768 292.396759) 23836 POINT(735.807495 825.327271) 23837 POINT(995.174255 749.518799) 23838 POINT(905.513916 913.791809) 23839 POINT(674.303467 197.633072) 23840 POINT(122.776207 258.946472) 23841 POINT(31.5817585 160.983521) 23842 POINT(870.562012 142.551285) 23843 POINT(657.706421 662.20929) 23844 POINT(177.717133 464.365021) 23845 POINT(515.003235 91.9286041) 23846 POINT(314.767731 407.664398) 23847 POINT(733.132629 402.029449) 23848 POINT(4.41264296 877.984802) 23849 POINT(271.433838 777.075684) 23850 POINT(192.358353 711.708069) 23851 POINT(614.702881 292.487183) 23852 POINT(387.21344 732.334961) 23853 POINT(230.192108 495.709167) 23854 POINT(625.021301 166.578705) 23855 POINT(404.99646 254.670486) 23856 POINT(632.371155 478.593567) 23857 POINT(512.758057 779.296082) 23858 POINT(92.7034607 988.119995) 23859 POINT(12.913518 125.163963) 23860 POINT(607.366089 497.127655) 23861 POINT(178.781342 187.680054) 23862 POINT(983.248535 740.331299) 23863 POINT(875.023315 660.114014) 23864 POINT(572.621216 619.03064) 23865 POINT(680.926331 394.846436) 23866 POINT(191.455109 587.001404) 23867 POINT(382.163971 325.199127) 23868 POINT(506.437897 84.1772537) 23869 POINT(756.977478 591.857544) 23870 POINT(17.7070847 801.772705) 23871 POINT(667.938965 805.373352) 23872 POINT(886.685974 695.1026) 23873 POINT(570.637268 762.408691) 23874 POINT(832.150574 812.058533) 23875 POINT(576.891479 231.727905) 23876 POINT(311.724091 91.0528183) 23877 POINT(401.706451 215.556442) 23878 POINT(842.459473 607.898254) 23879 POINT(697.517273 967.542969) 23880 POINT(918.222473 262.843536) 23881 POINT(81.8441315 870.523376) 23882 POINT(831.553589 433.749268) 23883 POINT(318.91272 421.576874) 23884 POINT(285.006104 656.700562) 23885 POINT(673.862549 180.083893) 23886 POINT(916.203674 299.379364) 23887 POINT(49.7348328 763.868286) 23888 POINT(399.730774 474.047516) 23889 POINT(600.520325 251.888199) 23890 POINT(218.276199 995.436951) 23891 POINT(624.285156 607.801758) 23892 POINT(309.149658 64.2433167) 23893 POINT(543.034729 681.18219) 23894 POINT(837.444031 979.940552) 23895 POINT(112.910156 691.915222) 23896 POINT(273.92453 628.561523) 23897 POINT(950.041809 843.733643) 23898 POINT(667.506226 713.842773) 23899 POINT(352.54483 345.903107) 23900 POINT(605.379639 806.243408) 23901 POINT(924.490906 914.375854) 23902 POINT(408.033264 766.989014) 23903 POINT(918.109314 57.4963646) 23904 POINT(874.292664 97.2445374) 23905 POINT(588.968506 674.431213) 23906 POINT(588.872253 290.203827) 23907 POINT(366.599762 770.37677) 23908 POINT(850.762085 491.334839) 23909 POINT(769.202087 250.380157) 23910 POINT(547.118103 254.903046) 23911 POINT(803.098633 638.009521) 23912 POINT(359.384796 119.499901) 23913 POINT(981.006287 286.490753) 23914 POINT(74.4770355 198.543381) 23915 POINT(41.5623741 834.254883) 23916 POINT(215.425339 221.131927) 23917 POINT(257.686981 695.726746) 23918 POINT(887.518188 82.3852539) 23919 POINT(763.126282 678.845459) 23920 POINT(545.350525 229.286224) 23921 POINT(312.930176 56.1035919) 23922 POINT(164.130402 267.458771) 23923 POINT(110.800537 774.293884) 23924 POINT(89.0509033 316.319458) 23925 POINT(898.459045 923.762756) 23926 POINT(136.570908 545.286926) 23927 POINT(101.813293 70.5200729) 23928 POINT(531.264771 313.513794) 23929 POINT(986.249878 819.386963) 23930 POINT(134.813339 621.83374) 23931 POINT(87.4892654 774.465759) 23932 POINT(516.16571 520.831604) 23933 POINT(581.856506 411.179871) 23934 POINT(533.472534 446.309967) 23935 POINT(245.436356 804.188904) 23936 POINT(761.77002 556.732422) 23937 POINT(558.399841 465.486328) 23938 POINT(771.404114 300.881592) 23939 POINT(749.944153 50.4088593) 23940 POINT(609.766846 63.0253639) 23941 POINT(890.037109 465.229218) 23942 POINT(985.147156 622.992554) 23943 POINT(833.882263 53.1981888) 23944 POINT(421.566315 776.016968) 23945 POINT(59.2339859 406.692322) 23946 POINT(825.698059 118.924675) 23947 POINT(429.017944 827.494263) 23948 POINT(462.810181 202.754898) 23949 POINT(213.91864 176.778809) 23950 POINT(712.675049 845.384399) 23951 POINT(451.55661 478.330627) 23952 POINT(306.281006 899.95697) 23953 POINT(858.6073 85.7274094) 23954 POINT(120.751846 585.317444) 23955 POINT(85.8409271 935.164124) 23956 POINT(327.093872 143.252914) 23957 POINT(477.846344 584.369202) 23958 POINT(490.31073 24.8187981) 23959 POINT(611.526672 604.400635) 23960 POINT(564.248962 595.656677) 23961 POINT(510.824707 930.359863) 23962 POINT(7.58377934 949.918396) 23963 POINT(418.187378 990.198486) 23964 POINT(79.0681381 436.725555) 23965 POINT(522.768921 584.424133) 23966 POINT(809.123352 925.186523) 23967 POINT(856.181213 365.856262) 23968 POINT(953.734985 297.651093) 23969 POINT(251.739059 415.500092) 23970 POINT(131.261429 690.518127) 23971 POINT(483.74826 391.566254) 23972 POINT(242.102646 262.566772) 23973 POINT(448.703888 372.77243) 23974 POINT(547.289307 818.118713) 23975 POINT(87.6868362 169.043777) 23976 POINT(510.128754 142.645325) 23977 POINT(74.2793198 142.936707) 23978 POINT(713.407593 8.62837696) 23979 POINT(578.592285 599.51709) 23980 POINT(84.74263 207.098801) 23981 POINT(467.273712 452.636475) 23982 POINT(979.069214 773.484741) 23983 POINT(491.52356 68.7906876) 23984 POINT(767.644897 563.982605) 23985 POINT(558.190125 98.8674469) 23986 POINT(808.155884 150.040054) 23987 POINT(359.095825 421.57016) 23988 POINT(564.485046 423.744476) 23989 POINT(65.0942154 494.245056) 23990 POINT(204.500427 526.611084) 23991 POINT(666.380005 906.964355) 23992 POINT(930.058044 549.747742) 23993 POINT(879.764038 499.38205) 23994 POINT(238.587616 616.554932) 23995 POINT(445.623657 278.056274) 23996 POINT(136.60582 302.538116) 23997 POINT(528.795898 581.225464) 23998 POINT(331.835449 113.627785) 23999 POINT(823.689514 510.661621) 24000 POINT(635.005371 818.411804) 24001 POINT(677.347717 884.053101) 24002 POINT(170.680359 585.298096) 24003 POINT(996.241333 669.869324) 24004 POINT(697.570068 27.8810883) 24005 POINT(132.460297 628.931763) 24006 POINT(994.758972 716.348572) 24007 POINT(170.089249 297.686188) 24008 POINT(206.386734 415.924957) 24009 POINT(698.403259 367.790771) 24010 POINT(531.800537 102.017349) 24011 POINT(988.740417 321.083435) 24012 POINT(182.555389 653.447998) 24013 POINT(538.251648 9.86545181) 24014 POINT(36.4134827 408.09079) 24015 POINT(836.082031 886.969727) 24016 POINT(539.394653 488.163086) 24017 POINT(403.905914 211.118225) 24018 POINT(730.770325 864.775574) 24019 POINT(199.258133 719.092285) 24020 POINT(586.620972 573.150269) 24021 POINT(211.026093 671.344421) 24022 POINT(442.265381 741.841858) 24023 POINT(964.183777 561.593323) 24024 POINT(12.7047338 232.634506) 24025 POINT(955.859619 119.023582) 24026 POINT(386.540497 664.442383) 24027 POINT(115.77243 24.9265594) 24028 POINT(429.052307 517.063049) 24029 POINT(897.698669 280.576996) 24030 POINT(853.842712 372.177765) 24031 POINT(819.836731 682.064819) 24032 POINT(72.3577957 283.353516) 24033 POINT(263.711426 928.5448) 24034 POINT(22.5009212 798.391235) 24035 POINT(274.753723 576.40564) 24036 POINT(930.413757 451.221527) 24037 POINT(472.150299 182.296783) 24038 POINT(245.375626 152.340439) 24039 POINT(38.3700981 397.509369) 24040 POINT(381.865601 32.7864876) 24041 POINT(15.4458838 595.243591) 24042 POINT(933.458984 23.8086071) 24043 POINT(759.254761 456.780365) 24044 POINT(421.839813 10.1934328) 24045 POINT(696.455444 204.114883) 24046 POINT(595.370911 397.880157) 24047 POINT(371.289276 252.428223) 24048 POINT(683.070618 644.776978) 24049 POINT(869.141113 638.725037) 24050 POINT(682.317993 867.02124) 24051 POINT(846.719543 851.522705) 24052 POINT(756.096436 341.333527) 24053 POINT(699.211487 594.745667) 24054 POINT(635.1521 258.269012) 24055 POINT(545.174927 536.683105) 24056 POINT(762.291504 762.356201) 24057 POINT(230.767471 457.358673) 24058 POINT(933.48645 355.247375) 24059 POINT(44.7930832 165.91835) 24060 POINT(739.943604 489.626404) 24061 POINT(221.752014 630.262329) 24062 POINT(6.39581394 387.891815) 24063 POINT(96.4733582 476.361603) 24064 POINT(166.285538 164.344879) 24065 POINT(294.010101 172.35733) 24066 POINT(580.049683 487.178833) 24067 POINT(3.41227794 126.119171) 24068 POINT(857.330322 702.024048) 24069 POINT(933.024109 673.53833) 24070 POINT(409.696106 357.82077) 24071 POINT(295.458954 613.180359) 24072 POINT(562.559265 874.652954) 24073 POINT(267.896729 911.370544) 24074 POINT(371.734711 8.79987812) 24075 POINT(41.460495 336.311157) 24076 POINT(802.953552 280.184235) 24077 POINT(363.911835 722.031372) 24078 POINT(576.187988 499.78009) 24079 POINT(522.650452 970.081909) 24080 POINT(888.55835 478.183167) 24081 POINT(968.01178 691.748047) 24082 POINT(500.699921 310.84906) 24083 POINT(276.2659 14.6544123) 24084 POINT(595.711914 860.51593) 24085 POINT(261.786346 729.065796) 24086 POINT(144.261124 123.706627) 24087 POINT(710.962036 850.681946) 24088 POINT(684.268127 647.245056) 24089 POINT(197.078186 313.629913) 24090 POINT(852.180786 514.330444) 24091 POINT(594.225403 880.651367) 24092 POINT(291.58609 250.438232) 24093 POINT(416.06485 233.769592) 24094 POINT(773.395142 300.313232) 24095 POINT(716.870422 370.222595) 24096 POINT(252.75618 132.385376) 24097 POINT(590.688416 923.019897) 24098 POINT(877.022705 60.4804115) 24099 POINT(950.83551 416.599335) 24100 POINT(565.476257 199.759048) 24101 POINT(255.558563 84.8228455) 24102 POINT(77.1477585 650.060608) 24103 POINT(733.879578 65.6883469) 24104 POINT(543.187988 721.54126) 24105 POINT(853.965088 154.99762) 24106 POINT(293.132141 371.596161) 24107 POINT(738.410889 975.78418) 24108 POINT(681.528503 736.079224) 24109 POINT(768.391907 293.173035) 24110 POINT(207.32724 829.944092) 24111 POINT(111.563766 182.741058) 24112 POINT(900.846863 921.422241) 24113 POINT(564.933655 17.2263565) 24114 POINT(72.8778763 399.132507) 24115 POINT(209.772232 460.070435) 24116 POINT(621.481567 943.129272) 24117 POINT(545.273438 298.874146) 24118 POINT(171.379715 659.50177) 24119 POINT(193.470459 487.129852) 24120 POINT(78.689743 365.028046) 24121 POINT(970.387329 923.912415) 24122 POINT(423.472809 125.47271) 24123 POINT(196.184937 539.544922) 24124 POINT(390.564148 310.944061) 24125 POINT(996.900391 187.205429) 24126 POINT(215.023514 77.4498749) 24127 POINT(37.1646957 698.232422) 24128 POINT(154.969559 199.207153) 24129 POINT(450.025909 540.372498) 24130 POINT(717.368164 335.78009) 24131 POINT(607.829041 636.869995) 24132 POINT(770.475342 36.7826958) 24133 POINT(46.2773056 639.226318) 24134 POINT(852.161072 370.352081) 24135 POINT(129.69548 892.38385) 24136 POINT(251.456177 956.163757) 24137 POINT(574.65033 348.36499) 24138 POINT(579.691162 226.336349) 24139 POINT(455.082489 149.002121) 24140 POINT(38.9786797 905.698547) 24141 POINT(846.731079 651.923584) 24142 POINT(374.100098 364.728455) 24143 POINT(461.765839 473.649414) 24144 POINT(196.786346 662.818237) 24145 POINT(934.192871 92.3419724) 24146 POINT(589.757263 665.773071) 24147 POINT(378.898438 628.932739) 24148 POINT(425.641083 629.667053) 24149 POINT(326.402527 313.106812) 24150 POINT(920.114807 524.010803) 24151 POINT(573.887939 559.69751) 24152 POINT(529.474548 191.928329) 24153 POINT(161.365601 516.777771) 24154 POINT(303.688599 175.602402) 24155 POINT(928.558167 900.1073) 24156 POINT(323.248138 774.176514) 24157 POINT(609.996399 166.209122) 24158 POINT(441.379211 141.750595) 24159 POINT(437.803986 880.428711) 24160 POINT(485.115509 108.876434) 24161 POINT(826.707581 54.730217) 24162 POINT(555.169373 946.453247) 24163 POINT(75.0807953 326.178558) 24164 POINT(524.426941 651.18866) 24165 POINT(618.571289 950.148438) 24166 POINT(140.302597 72.4850464) 24167 POINT(286.454834 537.017578) 24168 POINT(862.310181 518.029846) 24169 POINT(130.812149 377.791504) 24170 POINT(241.369812 456.419678) 24171 POINT(698.570679 708.750916) 24172 POINT(3.00773048 807.375183) 24173 POINT(398.149689 749.406372) 24174 POINT(217.299698 691.668762) 24175 POINT(755.777039 219.02327) 24176 POINT(911.845764 662.580017) 24177 POINT(569.515747 967.583984) 24178 POINT(51.0699081 507.926788) 24179 POINT(37.7843704 535.771484) 24180 POINT(9.65532207 986.536072) 24181 POINT(977.930725 839.480591) 24182 POINT(7.02577829 26.0762882) 24183 POINT(951.60968 727.225464) 24184 POINT(643.66156 281.766937) 24185 POINT(997.829346 118.957962) 24186 POINT(842.013977 749.521423) 24187 POINT(340.198029 553.224426) 24188 POINT(501.302155 695.106812) 24189 POINT(808.885803 762.866638) 24190 POINT(836.108521 246.08194) 24191 POINT(304.992462 899.841187) 24192 POINT(196.131729 979.395203) 24193 POINT(768.393982 35.0471573) 24194 POINT(624.527466 998.993225) 24195 POINT(200.856354 882.785034) 24196 POINT(173.913574 749.659668) 24197 POINT(83.5189667 420.726501) 24198 POINT(184.407684 961.223694) 24199 POINT(329.1362 289.779602) 24200 POINT(162.196228 107.547592) 24201 POINT(870.241028 924.338562) 24202 POINT(358.427307 934.232361) 24203 POINT(328.284637 158.088882) 24204 POINT(618.117065 435.306488) 24205 POINT(487.57309 215.398544) 24206 POINT(981.83374 10.4566536) 24207 POINT(641.346741 190.590576) 24208 POINT(16.8708916 919.403015) 24209 POINT(243.639572 259.912598) 24210 POINT(20.2569542 968.230774) 24211 POINT(725.745178 402.273773) 24212 POINT(367.226318 153.907852) 24213 POINT(184.462875 528.90686) 24214 POINT(122.757156 688.503113) 24215 POINT(863.183777 858.763184) 24216 POINT(40.6685066 995.06427) 24217 POINT(696.81073 611.009766) 24218 POINT(647.877136 374.632019) 24219 POINT(526.119019 619.44928) 24220 POINT(857.191833 690.996338) 24221 POINT(83.2165298 72.6247482) 24222 POINT(530.038696 599.70459) 24223 POINT(262.136047 30.0307884) 24224 POINT(383.461517 194.302612) 24225 POINT(100.291527 707.080566) 24226 POINT(319.444214 980.23761) 24227 POINT(968.694336 322.751099) 24228 POINT(568.008667 480.319) 24229 POINT(690.706665 893.249634) 24230 POINT(350.713318 580.782898) 24231 POINT(248.093582 77.3385773) 24232 POINT(163.318024 640.125122) 24233 POINT(784.728394 644.474243) 24234 POINT(273.806702 990.874268) 24235 POINT(256.143066 471.635803) 24236 POINT(866.113525 494.905823) 24237 POINT(98.9520798 70.2449265) 24238 POINT(115.35733 383.916077) 24239 POINT(87.8986053 408.129944) 24240 POINT(744.842041 487.070618) 24241 POINT(317.882629 395.923157) 24242 POINT(629.351562 767.029785) 24243 POINT(279.966766 541.07312) 24244 POINT(317.300995 643.570251) 24245 POINT(908.271851 389.905945) 24246 POINT(943.17157 61.5354233) 24247 POINT(451.2565 948.608032) 24248 POINT(591.549683 478.141571) 24249 POINT(86.628067 32.9786224) 24250 POINT(408.331635 615.663147) 24251 POINT(452.692627 695.29071) 24252 POINT(489.692108 801.748352) 24253 POINT(137.072296 531.204956) 24254 POINT(124.810814 244.250061) 24255 POINT(651.287659 812.628601) 24256 POINT(336.811676 544.276794) 24257 POINT(359.722992 321.554932) 24258 POINT(823.704895 914.594971) 24259 POINT(135.101532 288.729126) 24260 POINT(516.284607 855.582092) 24261 POINT(419.048767 548.572693) 24262 POINT(664.990967 753.305176) 24263 POINT(693.001831 502.880463) 24264 POINT(967.894775 950.272217) 24265 POINT(757.137024 600.737305) 24266 POINT(35.5176277 135.885086) 24267 POINT(396.769104 166.861938) 24268 POINT(936.617126 388.154114) 24269 POINT(38.5832329 686.772217) 24270 POINT(616.905579 238.980148) 24271 POINT(492.976105 242.00975) 24272 POINT(267.631989 741.055908) 24273 POINT(301.71463 105.010193) 24274 POINT(833.861816 584.602844) 24275 POINT(98.200798 489.538116) 24276 POINT(587.078979 886.779175) 24277 POINT(605.118774 813.020935) 24278 POINT(290.482544 786.333008) 24279 POINT(883.517578 281.344452) 24280 POINT(908.253601 492.222717) 24281 POINT(478.956116 140.062607) 24282 POINT(955.439087 919.397095) 24283 POINT(532.84259 49.5026207) 24284 POINT(559.395203 600.259277) 24285 POINT(417.292603 1.51761246) 24286 POINT(666.51239 679.697144) 24287 POINT(264.592407 284.875031) 24288 POINT(841.910217 618.736084) 24289 POINT(980.697571 772.325928) 24290 POINT(990.761169 771.271484) 24291 POINT(117.24852 308.751404) 24292 POINT(496.82016 425.007996) 24293 POINT(817.608276 55.5306168) 24294 POINT(598.679321 767.336731) 24295 POINT(16.8019161 136.147812) 24296 POINT(882.418884 745.702148) 24297 POINT(58.4712791 942.401184) 24298 POINT(89.0193405 26.9714451) 24299 POINT(867.685974 625.377075) 24300 POINT(747.569153 448.951294) 24301 POINT(88.4291229 2.20308805) 24302 POINT(635.526672 117.667496) 24303 POINT(38.6875496 765.727173) 24304 POINT(622.763489 895.123047) 24305 POINT(662.326965 162.531586) 24306 POINT(917.653503 593.389893) 24307 POINT(651.460327 393.561798) 24308 POINT(145.020386 32.1099281) 24309 POINT(690.073486 845.231873) 24310 POINT(544.387207 908.447876) 24311 POINT(21.6456413 846.882935) 24312 POINT(82.8809891 492.535553) 24313 POINT(790.896423 208.276672) 24314 POINT(583.651978 709.396301) 24315 POINT(451.240326 69.3729782) 24316 POINT(434.218231 552.770508) 24317 POINT(891.793152 110.576126) 24318 POINT(869.310364 740.34845) 24319 POINT(325.733246 457.158844) 24320 POINT(732.264343 447.440918) 24321 POINT(728.481506 464.544617) 24322 POINT(473.613525 121.497246) 24323 POINT(130.664658 305.01889) 24324 POINT(614.208801 198.151199) 24325 POINT(96.4168396 970.352112) 24326 POINT(105.01725 816.304565) 24327 POINT(569.646301 53.4788513) 24328 POINT(781.913818 811.4328) 24329 POINT(94.9475174 836.138367) 24330 POINT(219.603333 689.733032) 24331 POINT(439.511963 664.219666) 24332 POINT(715.739624 428.468079) 24333 POINT(409.43869 980.070068) 24334 POINT(318.914612 678.05896) 24335 POINT(298.151581 358.447327) 24336 POINT(890.16748 767.929016) 24337 POINT(884.203125 382.972565) 24338 POINT(247.83287 240.217972) 24339 POINT(246.714981 641.350525) 24340 POINT(783.85376 993.308838) 24341 POINT(253.334579 714.369751) 24342 POINT(303.199219 441.300873) 24343 POINT(340.253296 5.49914455) 24344 POINT(676.942505 957.413574) 24345 POINT(917.047729 90.1166382) 24346 POINT(617.196472 730.729492) 24347 POINT(239.500076 957.012939) 24348 POINT(84.9110947 629.21991) 24349 POINT(77.8862686 836.410828) 24350 POINT(589.083923 720.80719) 24351 POINT(721.375854 40.5561523) 24352 POINT(690.91803 392.095154) 24353 POINT(384.16803 432.82135) 24354 POINT(104.694702 45.7531586) 24355 POINT(576.933594 352.690613) 24356 POINT(807.566101 817.412903) 24357 POINT(467.295288 386.073975) 24358 POINT(905.176392 686.992493) 24359 POINT(242.844223 627.846436) 24360 POINT(724.191833 463.888611) 24361 POINT(405.064331 646.684082) 24362 POINT(744.776245 987.389404) 24363 POINT(236.156113 357.145844) 24364 POINT(777.235229 230.497284) 24365 POINT(194.867569 322.129791) 24366 POINT(912.04187 945.274109) 24367 POINT(91.942482 557.542175) 24368 POINT(618.940613 799.625) 24369 POINT(778.688843 863.10968) 24370 POINT(279.629517 278.52829) 24371 POINT(39.586216 747.213135) 24372 POINT(953.58374 747.144958) 24373 POINT(26.0500889 603.530701) 24374 POINT(294.981506 179.658234) 24375 POINT(95.8326416 402.872894) 24376 POINT(960.616455 967.3974) 24377 POINT(351.576141 520.223206) 24378 POINT(227.455399 644.698547) 24379 POINT(601.374268 675.645874) 24380 POINT(730.564331 163.593246) 24381 POINT(320.600952 344.983063) 24382 POINT(547.057251 751.953491) 24383 POINT(482.614349 424.369629) 24384 POINT(302.210022 287.947784) 24385 POINT(679.247986 709.390015) 24386 POINT(525.751953 290.997223) 24387 POINT(681.388428 688.672485) 24388 POINT(308.537689 980.892761) 24389 POINT(734.673828 831.955078) 24390 POINT(24.3941402 698.018188) 24391 POINT(262.806946 568.897156) 24392 POINT(814.111877 255.001892) 24393 POINT(906.672852 367.500488) 24394 POINT(956.642578 340.506409) 24395 POINT(685.013245 105.918411) 24396 POINT(658.007263 896.805603) 24397 POINT(573.598328 430.276947) 24398 POINT(105.792389 812.447815) 24399 POINT(594.535339 161.129776) 24400 POINT(504.103088 318.45813) 24401 POINT(43.5624924 475.17514) 24402 POINT(811.279114 50.602417) 24403 POINT(297.042725 485.349945) 24404 POINT(844.498962 881.261353) 24405 POINT(596.137512 675.489868) 24406 POINT(538.679138 763.108032) 24407 POINT(745.7005 135.127319) 24408 POINT(402.006897 34.3365211) 24409 POINT(60.2853966 671.046143) 24410 POINT(500.3508 873.564941) 24411 POINT(487.948975 145.896378) 24412 POINT(734.116943 964.27594) 24413 POINT(321.003418 77.0994339) 24414 POINT(303.43219 426.920959) 24415 POINT(516.41626 903.667419) 24416 POINT(353.531616 835.394348) 24417 POINT(480.179932 942.271912) 24418 POINT(67.7301025 677.891296) 24419 POINT(380.807251 970.406494) 24420 POINT(349.307129 115.24028) 24421 POINT(136.412323 422.890381) 24422 POINT(578.106445 888.309448) 24423 POINT(234.993179 212.990387) 24424 POINT(317.837372 926.314575) 24425 POINT(394.047211 301.440857) 24426 POINT(814.28772 696.722778) 24427 POINT(717.159302 961.596069) 24428 POINT(394.359406 842.484985) 24429 POINT(763.460938 618.458374) 24430 POINT(635.59436 791.706726) 24431 POINT(690.751587 580.613159) 24432 POINT(313.356689 57.3728714) 24433 POINT(72.6055222 610.020508) 24434 POINT(488.906464 19.7889843) 24435 POINT(910.095703 273.641876) 24436 POINT(720.17981 392.026978) 24437 POINT(874.104309 347.11554) 24438 POINT(755.252075 989.536926) 24439 POINT(616.943787 163.867844) 24440 POINT(406.401093 180.490631) 24441 POINT(602.687378 958.508179) 24442 POINT(753.726868 695.276367) 24443 POINT(922.838989 692.079407) 24444 POINT(747.864075 674.404419) 24445 POINT(914.517334 85.325592) 24446 POINT(481.021393 677.073547) 24447 POINT(587.068054 156.822235) 24448 POINT(387.084381 241.578735) 24449 POINT(222.960663 263.440063) 24450 POINT(880.654419 758.027405) 24451 POINT(461.108246 784.65979) 24452 POINT(120.60363 298.506653) 24453 POINT(434.620789 258.825134) 24454 POINT(808.080505 455.580872) 24455 POINT(437.854309 63.2374306) 24456 POINT(27.094038 613.079529) 24457 POINT(284.95459 991.413574) 24458 POINT(886.160461 750.476746) 24459 POINT(217.546799 195.822357) 24460 POINT(103.455315 341.304443) 24461 POINT(474.552795 574.587219) 24462 POINT(130.053055 15.1459608) 24463 POINT(582.204041 443.219513) 24464 POINT(63.8423309 920.612732) 24465 POINT(15.1725636 170.280975) 24466 POINT(561.407898 552.730225) 24467 POINT(156.494125 807.439514) 24468 POINT(500.506256 732.388062) 24469 POINT(808.86792 813.783386) 24470 POINT(28.8080292 378.606628) 24471 POINT(825.364746 981.221313) 24472 POINT(305.527649 267.631317) 24473 POINT(504.072357 97.6692734) 24474 POINT(104.732841 588.193237) 24475 POINT(77.3832932 738.489441) 24476 POINT(108.964989 382.218048) 24477 POINT(99.2441635 620.900513) 24478 POINT(238.88089 897.98175) 24479 POINT(547.620422 973.050537) 24480 POINT(501.638031 111.994431) 24481 POINT(597.695312 406.982941) 24482 POINT(313.513184 721.154602) 24483 POINT(945.045044 406.313568) 24484 POINT(979.7099 432.996033) 24485 POINT(256.479462 74.1687927) 24486 POINT(368.547699 444.810333) 24487 POINT(366.779785 579.540466) 24488 POINT(873.427673 298.362488) 24489 POINT(617.725708 401.046021) 24490 POINT(542.455994 412.732635) 24491 POINT(725.200073 122.114723) 24492 POINT(3.82667279 261.06131) 24493 POINT(562.559448 72.4567795) 24494 POINT(209.583435 485.805634) 24495 POINT(643.742554 444.539276) 24496 POINT(448.89798 0.32171005) 24497 POINT(85.7618484 813.53949) 24498 POINT(885.334473 951.588623) 24499 POINT(713.420227 943.35199) 24500 POINT(594.66571 109.719643) 24501 POINT(353.576599 823.790222) 24502 POINT(717.735291 985.230408) 24503 POINT(444.42627 524.875061) 24504 POINT(596.814087 576.143616) 24505 POINT(877.579102 408.390411) 24506 POINT(287.205658 825.815308) 24507 POINT(595.840393 755.689148) 24508 POINT(484.950745 481.410156) 24509 POINT(314.283386 970.650452) 24510 POINT(995.942932 325.399323) 24511 POINT(821.333557 229.951492) 24512 POINT(404.2883 592.086365) 24513 POINT(483.167725 77.2688217) 24514 POINT(544.140808 552.405457) 24515 POINT(729.902161 807.152344) 24516 POINT(908.46991 668.117249) 24517 POINT(685.059326 137.209137) 24518 POINT(862.336426 686.715637) 24519 POINT(528.042297 218.631592) 24520 POINT(792.462036 517.14325) 24521 POINT(298.325226 345.348938) 24522 POINT(397.49884 530.707275) 24523 POINT(383.410583 167.153641) 24524 POINT(685.88092 48.9330215) 24525 POINT(932.074463 933.654785) 24526 POINT(835.043213 578.6474) 24527 POINT(529.898987 451.065063) 24528 POINT(514.816528 843.145996) 24529 POINT(123.58551 445.490692) 24530 POINT(179.774536 736.273315) 24531 POINT(920.184509 833.036377) 24532 POINT(984.160767 33.6772003) 24533 POINT(681.429138 702.76825) 24534 POINT(615.835449 463.049683) 24535 POINT(924.197266 343.115814) 24536 POINT(432.644684 634.127625) 24537 POINT(296.265533 370.997955) 24538 POINT(719.052856 321.50824) 24539 POINT(170.583435 456.798981) 24540 POINT(769.232117 781.480103) 24541 POINT(968.052856 543.903076) 24542 POINT(404.648865 661.239868) 24543 POINT(133.122437 121.045952) 24544 POINT(712.214661 758.852234) 24545 POINT(131.410904 567.109741) 24546 POINT(459.100433 439.522308) 24547 POINT(475.190186 914.652893) 24548 POINT(221.296921 73.2353287) 24549 POINT(100.142334 399.526367) 24550 POINT(627.004761 986.23114) 24551 POINT(482.743286 724.112122) 24552 POINT(838.156555 310.417358) 24553 POINT(597.421753 171.380249) 24554 POINT(2.12532711 857.596619) 24555 POINT(139.932129 192.071609) 24556 POINT(632.409119 966.828613) 24557 POINT(689.920044 239.477264) 24558 POINT(906.365601 791.530945) 24559 POINT(531.332703 852.730835) 24560 POINT(587.603455 966.835327) 24561 POINT(402.139893 963.104919) 24562 POINT(531.236694 176.666718) 24563 POINT(290.921448 306.986511) 24564 POINT(555.817078 114.048225) 24565 POINT(651.495544 628.099182) 24566 POINT(363.456268 377.910736) 24567 POINT(760.297974 9.86904049) 24568 POINT(359.61853 296.499817) 24569 POINT(915.178772 431.94751) 24570 POINT(819.635437 723.230042) 24571 POINT(367.295807 243.785858) 24572 POINT(226.607315 868.084473) 24573 POINT(216.609268 209.401474) 24574 POINT(574.581909 949.553467) 24575 POINT(491.002136 633.315735) 24576 POINT(504.438141 262.444366) 24577 POINT(602.277161 625.925415) 24578 POINT(783.566772 430.08429) 24579 POINT(740.341003 120.773323) 24580 POINT(523.180908 560.523132) 24581 POINT(269.041626 895.407104) 24582 POINT(770.973389 560.98407) 24583 POINT(140.758102 666.491333) 24584 POINT(547.064148 429.297852) 24585 POINT(897.458496 688.909241) 24586 POINT(786.06665 272.30249) 24587 POINT(197.176331 63.7422905) 24588 POINT(989.093689 576.740173) 24589 POINT(548.467346 792.842896) 24590 POINT(111.192017 746.190613) 24591 POINT(181.275925 165.450943) 24592 POINT(449.734894 626.844727) 24593 POINT(688.775879 247.79248) 24594 POINT(148.532578 74.851181) 24595 POINT(277.284363 508.322083) 24596 POINT(684.791138 108.603745) 24597 POINT(524.537292 153.328171) 24598 POINT(108.624603 771.341125) 24599 POINT(412.845123 789.737732) 24600 POINT(307.806976 74.0949783) 24601 POINT(843.425476 59.4880333) 24602 POINT(577.150513 758.257751) 24603 POINT(700.166199 903.75238) 24604 POINT(888.769897 713.388916) 24605 POINT(991.96814 882.218201) 24606 POINT(546.099976 702.502991) 24607 POINT(417.533203 274.742432) 24608 POINT(123.579193 217.77092) 24609 POINT(448.008514 577.907715) 24610 POINT(461.209015 338.733612) 24611 POINT(372.403412 40.7422142) 24612 POINT(917.696777 57.8127213) 24613 POINT(687.421997 391.258453) 24614 POINT(459.658356 729.771423) 24615 POINT(304.681335 233.225693) 24616 POINT(552.589233 789.116577) 24617 POINT(689.723328 351.080658) 24618 POINT(250.33168 249.158875) 24619 POINT(712.407898 476.069489) 24620 POINT(585.016174 476.094757) 24621 POINT(478.956573 830.206665) 24622 POINT(23.5050354 439.212158) 24623 POINT(111.978867 883.65918) 24624 POINT(766.915039 832.936096) 24625 POINT(554.269165 408.567535) 24626 POINT(367.659576 797.335449) 24627 POINT(281.141174 776.577759) 24628 POINT(67.5779953 220.949905) 24629 POINT(928.827637 982.57782) 24630 POINT(418.178986 974.026123) 24631 POINT(475.397552 553.041626) 24632 POINT(830.01178 712.767456) 24633 POINT(766.242432 49.3259544) 24634 POINT(366.014313 827.914062) 24635 POINT(957.084106 555.225891) 24636 POINT(199.816513 536.419495) 24637 POINT(280.424469 360.669342) 24638 POINT(13.9684248 276.340881) 24639 POINT(431.266968 51.8467789) 24640 POINT(227.615479 346.097717) 24641 POINT(647.806885 690.184143) 24642 POINT(284.073486 904.402161) 24643 POINT(143.738113 521.847595) 24644 POINT(465.011841 931.447205) 24645 POINT(170.120148 285.022217) 24646 POINT(451.604004 851.036072) 24647 POINT(463.772186 268.758026) 24648 POINT(449.245239 173.525803) 24649 POINT(821.419189 685.078552) 24650 POINT(409.58963 577.65863) 24651 POINT(747.939758 21.2762661) 24652 POINT(203.165237 283.105469) 24653 POINT(614.817383 983.474365) 24654 POINT(452.261108 743.008911) 24655 POINT(161.155228 582.847717) 24656 POINT(764.834412 615.779541) 24657 POINT(932.390564 275.212219) 24658 POINT(906.683716 557.281189) 24659 POINT(917.269348 781.492126) 24660 POINT(805.019348 648.379517) 24661 POINT(75.9717865 994.962402) 24662 POINT(438.902618 669.285706) 24663 POINT(93.9012222 940.856262) 24664 POINT(591.022583 22.4929485) 24665 POINT(817.066345 80.2891617) 24666 POINT(14.2448044 852.293579) 24667 POINT(774.8349 844.447388) 24668 POINT(911.7547 913.41449) 24669 POINT(650.872803 413.228699) 24670 POINT(300.993011 497.385681) 24671 POINT(778.190796 697.227417) 24672 POINT(91.6396637 366.649719) 24673 POINT(792.404602 790.982422) 24674 POINT(772.466614 197.538147) 24675 POINT(639.713257 902.226013) 24676 POINT(889.893921 659.132019) 24677 POINT(691.965027 755.588745) 24678 POINT(884.615601 511.343872) 24679 POINT(837.89978 564.556335) 24680 POINT(906.912659 188.599915) 24681 POINT(992.734497 972.79071) 24682 POINT(484.553009 332.180023) 24683 POINT(471.328766 511.194) 24684 POINT(100.944313 872.123352) 24685 POINT(404.98938 491.91626) 24686 POINT(40.0234184 156.79866) 24687 POINT(728.427368 272.106567) 24688 POINT(155.927338 543.555237) 24689 POINT(929.47644 141.440704) 24690 POINT(370.622559 946.729736) 24691 POINT(526.051453 906.797058) 24692 POINT(735.310974 379.723663) 24693 POINT(226.727386 519.001953) 24694 POINT(308.656097 206.550568) 24695 POINT(635.634644 780.052002) 24696 POINT(106.875145 956.469849) 24697 POINT(699.604797 519.991089) 24698 POINT(120.844711 364.989899) 24699 POINT(464.295471 391.660889) 24700 POINT(230.010757 138.175537) 24701 POINT(33.1277161 115.441757) 24702 POINT(581.652588 537.998535) 24703 POINT(413.173431 147.100098) 24704 POINT(159.617279 638.212585) 24705 POINT(518.634583 137.794235) 24706 POINT(304.837769 277.33255) 24707 POINT(396.399628 519.651611) 24708 POINT(539.718872 752.786743) 24709 POINT(478.597992 162.211014) 24710 POINT(311.892212 963.859802) 24711 POINT(671.488342 399.152985) 24712 POINT(35.096756 466.936859) 24713 POINT(503.913269 181.472229) 24714 POINT(844.360352 91.7132874) 24715 POINT(605.570557 548.551392) 24716 POINT(780.679504 858.988892) 24717 POINT(17.2421474 664.081421) 24718 POINT(111.594673 807.580078) 24719 POINT(381.77179 996.662048) 24720 POINT(316.129944 488.554688) 24721 POINT(883.99884 758.063293) 24722 POINT(6.32778692 718.82843) 24723 POINT(936.170288 884.006287) 24724 POINT(17.0109329 243.203171) 24725 POINT(406.824799 857.036133) 24726 POINT(817.510254 164.839111) 24727 POINT(608.154175 748.332947) 24728 POINT(734.108704 940.221008) 24729 POINT(59.9059525 480.494843) 24730 POINT(623.184143 857.821594) 24731 POINT(85.6291885 487.402161) 24732 POINT(208.937515 832.419739) 24733 POINT(746.243958 436.839661) 24734 POINT(355.731903 42.5597496) 24735 POINT(231.410339 268.836792) 24736 POINT(846.14447 50.7341652) 24737 POINT(194.000687 535.53949) 24738 POINT(497.661774 98.9457703) 24739 POINT(288.265961 470.325317) 24740 POINT(592.47876 931.396423) 24741 POINT(347.293427 693.918945) 24742 POINT(988.159729 816.824768) 24743 POINT(777.462769 328.183868) 24744 POINT(997.185364 121.759689) 24745 POINT(252.325562 144.41011) 24746 POINT(198.959122 409.587189) 24747 POINT(129.295166 348.263702) 24748 POINT(10.1273279 336.383453) 24749 POINT(991.495728 589.711792) 24750 POINT(772.649963 701.109253) 24751 POINT(713.964172 690.416443) 24752 POINT(711.637878 643.782593) 24753 POINT(676.135925 576.150391) 24754 POINT(707.368286 820.057312) 24755 POINT(477.304352 676.204956) 24756 POINT(962.047058 204.280273) 24757 POINT(372.787292 59.6384125) 24758 POINT(318.879059 166.233856) 24759 POINT(828.239502 289.276428) 24760 POINT(909.024109 450.695129) 24761 POINT(108.429253 123.977135) 24762 POINT(614.383545 375.559204) 24763 POINT(773.481506 38.7879791) 24764 POINT(397.322174 806.130798) 24765 POINT(776.836914 77.8534088) 24766 POINT(171.954514 503.445496) 24767 POINT(549.868896 838.504639) 24768 POINT(588.205811 166.926239) 24769 POINT(851.247925 704.730225) 24770 POINT(835.322144 670.734131) 24771 POINT(165.874313 617.663635) 24772 POINT(514.789246 543.863342) 24773 POINT(297.778717 268.933167) 24774 POINT(405.803253 972.032043) 24775 POINT(331.193665 224.427231) 24776 POINT(874.706726 451.01825) 24777 POINT(979.53772 991.586914) 24778 POINT(41.4884033 533.195618) 24779 POINT(226.962234 808.721497) 24780 POINT(92.9825974 859.18103) 24781 POINT(143.1409 101.655899) 24782 POINT(258.369415 222.876511) 24783 POINT(449.025055 278.486542) 24784 POINT(575.664185 789.558105) 24785 POINT(287.342316 240.196716) 24786 POINT(268.91272 672.45575) 24787 POINT(242.823151 611.83844) 24788 POINT(118.724899 913.510132) 24789 POINT(827.751526 950.03009) 24790 POINT(890.652161 939.35791) 24791 POINT(840.838562 777.371582) 24792 POINT(636.941528 845.36853) 24793 POINT(492.115601 218.392441) 24794 POINT(410.696381 360.65155) 24795 POINT(312.175171 765.805176) 24796 POINT(733.894104 167.910828) 24797 POINT(307.402893 556.727905) 24798 POINT(601.61554 887.00415) 24799 POINT(838.733948 768.405029) 24800 POINT(146.932266 613.865906) 24801 POINT(372.932983 899.634644) 24802 POINT(549.993469 461.476532) 24803 POINT(743.575317 851.087952) 24804 POINT(769.897766 241.858368) 24805 POINT(353.05481 684.079224) 24806 POINT(81.0003815 813.303711) 24807 POINT(914.442871 567.842957) 24808 POINT(781.587341 891.490601) 24809 POINT(768.382812 830.345032) 24810 POINT(340.661774 373.72403) 24811 POINT(489.056335 833.080078) 24812 POINT(389.3862 679.799683) 24813 POINT(716.359497 987.783447) 24814 POINT(532.071289 889.08252) 24815 POINT(798.664795 29.7431545) 24816 POINT(835.197021 810.116638) 24817 POINT(609.91925 331.285187) 24818 POINT(892.612549 705.848694) 24819 POINT(602.4823 768.501282) 24820 POINT(604.735596 504.392365) 24821 POINT(887.287842 398.494537) 24822 POINT(746.328125 632.851746) 24823 POINT(588.013245 933.058655) 24824 POINT(231.458221 441.346497) 24825 POINT(416.457703 943.137085) 24826 POINT(868.892029 747.952515) 24827 POINT(960.905396 647.59967) 24828 POINT(692.832642 685.331726) 24829 POINT(494.639313 546.435974) 24830 POINT(462.214386 509.533051) 24831 POINT(702.852844 584.612854) 24832 POINT(159.358734 724.597229) 24833 POINT(925.994324 776.441528) 24834 POINT(751.524719 57.600914) 24835 POINT(737.203613 594.813416) 24836 POINT(775.69104 902.672791) 24837 POINT(650.21637 14.2015867) 24838 POINT(589.853638 644.967651) 24839 POINT(809.308533 985.611572) 24840 POINT(228.409744 222.884659) 24841 POINT(790.030762 676.05072) 24842 POINT(483.150177 725.876221) 24843 POINT(362.282288 900.548218) 24844 POINT(86.4328613 233.553162) 24845 POINT(787.444702 452.898926) 24846 POINT(133.844543 347.615356) 24847 POINT(68.7290573 159.349854) 24848 POINT(287.757629 460.211365) 24849 POINT(506.585052 360.251129) 24850 POINT(941.48468 140.0737) 24851 POINT(965.119141 606.726624) 24852 POINT(690.163635 641.222656) 24853 POINT(795.220337 846.790894) 24854 POINT(896.146729 378.849548) 24855 POINT(327.884583 487.768158) 24856 POINT(303.706421 844.464905) 24857 POINT(17.5703297 944.713196) 24858 POINT(953.638672 309.447327) 24859 POINT(528.935364 618.765503) 24860 POINT(679.274841 395.286835) 24861 POINT(497.765137 461.592377) 24862 POINT(291.087769 163.254929) 24863 POINT(113.18087 154.515167) 24864 POINT(940.182129 429.732788) 24865 POINT(646.322693 511.423798) 24866 POINT(807.321472 70.4108353) 24867 POINT(251.772934 566.638245) 24868 POINT(112.703232 802.069641) 24869 POINT(781.272217 261.577789) 24870 POINT(854.523438 380.333649) 24871 POINT(542.170776 42.1731262) 24872 POINT(736.670288 21.9397812) 24873 POINT(301.058807 632.757996) 24874 POINT(465.9646 737.600647) 24875 POINT(849.760437 887.67749) 24876 POINT(218.679077 874.002319) 24877 POINT(918.121399 830.655945) 24878 POINT(279.181702 629.026611) 24879 POINT(515.644165 681.302185) 24880 POINT(28.1579609 381.714661) 24881 POINT(120.045303 10.8462362) 24882 POINT(944.794312 17.2070732) 24883 POINT(791.347839 853.774902) 24884 POINT(630.494629 816.944397) 24885 POINT(889.447449 82.5684891) 24886 POINT(58.2222176 106.455902) 24887 POINT(803.577881 98.9596786) 24888 POINT(1.61105692 528.391968) 24889 POINT(984.260681 642.392822) 24890 POINT(554.885864 248.979416) 24891 POINT(700.791504 515.633911) 24892 POINT(674.823608 464.342621) 24893 POINT(756.841248 295.368042) 24894 POINT(69.0423355 492.294556) 24895 POINT(888.226685 664.350708) 24896 POINT(533.518982 399.055237) 24897 POINT(573.331177 169.102875) 24898 POINT(972.229309 293.312103) 24899 POINT(419.171661 786.732483) 24900 POINT(982.123413 37.1353645) 24901 POINT(383.965485 255.332413) 24902 POINT(679.361023 480.170166) 24903 POINT(677.636658 279.266571) 24904 POINT(703.037048 366.528229) 24905 POINT(890.521667 323.873016) 24906 POINT(338.838989 629.817261) 24907 POINT(461.222137 139.651184) 24908 POINT(938.650818 858.306946) 24909 POINT(58.8663864 545.471191) 24910 POINT(207.611786 647.508301) 24911 POINT(452.862335 510.966736) 24912 POINT(125.258636 370.219818) 24913 POINT(432.563324 632.90271) 24914 POINT(852.937866 483.79068) 24915 POINT(856.254639 637.423096) 24916 POINT(749.623108 900.999939) 24917 POINT(817.762268 263.780701) 24918 POINT(819.675964 605.22229) 24919 POINT(662.168274 515.161133) 24920 POINT(499.147705 663.729431) 24921 POINT(430.098724 783.88208) 24922 POINT(555.247681 46.9767456) 24923 POINT(611.45874 272.562439) 24924 POINT(133.054977 299.089996) 24925 POINT(521.090515 706.403931) 24926 POINT(193.987564 618.655273) 24927 POINT(425.497345 846.748657) 24928 POINT(14.6633682 433.118896) 24929 POINT(834.525757 320.41275) 24930 POINT(268.416138 109.03923) 24931 POINT(285.857971 836.427368) 24932 POINT(913.803528 199.131348) 24933 POINT(982.594116 800.851135) 24934 POINT(537.041016 141.180878) 24935 POINT(862.485657 505.968567) 24936 POINT(513.607422 789.756836) 24937 POINT(977.022034 572.81781) 24938 POINT(896.613037 666.143799) 24939 POINT(413.204712 791.573303) 24940 POINT(37.3513603 582.577148) 24941 POINT(702.228821 324.438477) 24942 POINT(781.332947 951.869263) 24943 POINT(607.306946 817.620056) 24944 POINT(548.726685 891.642578) 24945 POINT(75.530365 985.497314) 24946 POINT(542.325623 323.058411) 24947 POINT(762.093567 869.753784) 24948 POINT(772.860413 937.182495) 24949 POINT(3.67264152 193.099136) 24950 POINT(47.7691727 838.623779) 24951 POINT(123.626045 991.00769) 24952 POINT(735.600342 197.114578) 24953 POINT(15.4873943 250.985077) 24954 POINT(147.385117 555.178528) 24955 POINT(671.575806 368.223999) 24956 POINT(125.02639 906.496094) 24957 POINT(627.218445 355.72522) 24958 POINT(704.568542 18.1955013) 24959 POINT(682.943909 458.267853) 24960 POINT(41.8447685 104.851212) 24961 POINT(80.0755615 910.863953) 24962 POINT(615.25531 146.882141) 24963 POINT(950.555298 367.003998) 24964 POINT(724.266235 296.34552) 24965 POINT(78.8310471 79.1949844) 24966 POINT(604.694519 734.481262) 24967 POINT(119.615013 338.732635) 24968 POINT(908.166321 484.068542) 24969 POINT(555.780701 333.69458) 24970 POINT(621.615051 372.622437) 24971 POINT(79.2471085 339.757812) 24972 POINT(714.769165 67.2247849) 24973 POINT(286.150452 659.242859) 24974 POINT(333.845398 726.511719) 24975 POINT(725.817993 626.987854) 24976 POINT(345.793365 848.82251) 24977 POINT(389.035919 230.115311) 24978 POINT(570.264709 737.162781) 24979 POINT(700.981201 880.944214) 24980 POINT(409.942505 191.487717) 24981 POINT(362.221649 842.327576) 24982 POINT(551.035828 507.53537) 24983 POINT(899.761658 952.281067) 24984 POINT(404.81897 180.321365) 24985 POINT(319.733032 115.268066) 24986 POINT(401.389343 341.361633) 24987 POINT(642.630676 521.895813) 24988 POINT(734.784302 504.255585) 24989 POINT(527.733093 493.655334) 24990 POINT(753.798889 646.605469) 24991 POINT(410.406647 6.93568039) 24992 POINT(657.985718 651.15448) 24993 POINT(167.383102 378.707581) 24994 POINT(209.20842 189.912598) 24995 POINT(951.947388 858.48291) 24996 POINT(724.71283 926.943909) 24997 POINT(492.544556 296.514069) 24998 POINT(50.0415573 494.075165) 24999 POINT(391.984894 991.428284) 25000 POINT(594.443604 755.343811) 25001 POINT(195.707153 871.949646) 25002 POINT(876.044617 7.44648981) 25003 POINT(690.085083 463.017639) 25004 POINT(600.38562 692.31543) 25005 POINT(847.28595 518.074646) 25006 POINT(768.584229 42.4078712) 25007 POINT(431.59726 673.78418) 25008 POINT(68.0120163 598.124939) 25009 POINT(731.43811 173.814743) 25010 POINT(179.841766 379.401459) 25011 POINT(467.592438 303.055206) 25012 POINT(188.037781 449.964874) 25013 POINT(265.807831 126.816078) 25014 POINT(990.415527 863.70874) 25015 POINT(363.171295 910.948242) 25016 POINT(194.477768 349.362305) 25017 POINT(463.11557 943.72345) 25018 POINT(82.1641693 284.067383) 25019 POINT(962.155701 639.748657) 25020 POINT(704.871948 381.142578) 25021 POINT(569.265747 796.730042) 25022 POINT(332.693298 315.383514) 25023 POINT(631.060242 729.787354) 25024 POINT(342.459778 114.507202) 25025 POINT(95.6546249 23.0995369) 25026 POINT(153.70787 332.210815) 25027 POINT(906.373901 628.41272) 25028 POINT(179.030701 701.822144) 25029 POINT(952.618591 583.461914) 25030 POINT(567.524353 455.331207) 25031 POINT(336.563873 315.379974) 25032 POINT(112.372047 727.002563) 25033 POINT(286.469482 195.037506) 25034 POINT(344.355499 280.686829) 25035 POINT(283.846497 93.9535904) 25036 POINT(23.6829147 182.919495) 25037 POINT(924.323181 307.543549) 25038 POINT(907.552185 358.076508) 25039 POINT(330.653687 504.250122) 25040 POINT(448.015839 216.042099) 25041 POINT(38.9338837 762.39032) 25042 POINT(554.805786 636.443848) 25043 POINT(721.855469 203.820496) 25044 POINT(534.754761 566.568848) 25045 POINT(760.005615 929.875122) 25046 POINT(40.3860321 773.248779) 25047 POINT(966.182251 630.200867) 25048 POINT(275.332672 953.589844) 25049 POINT(978.959045 354.433868) 25050 POINT(716.809082 417.32785) 25051 POINT(318.923035 11.1358271) 25052 POINT(331.837311 7.36188745) 25053 POINT(520.891052 454.611481) 25054 POINT(243.900681 317.812958) 25055 POINT(372.859192 820.404724) 25056 POINT(312.849243 734.565918) 25057 POINT(190.470459 622.264404) 25058 POINT(339.039978 386.092041) 25059 POINT(395.525635 90.6594086) 25060 POINT(11.8014526 917.457031) 25061 POINT(937.77301 144.609436) 25062 POINT(164.439682 643.459534) 25063 POINT(368.274139 89.4061508) 25064 POINT(948.345154 294.105225) 25065 POINT(535.565002 733.085022) 25066 POINT(725.63855 324.018463) 25067 POINT(906.246643 740.243652) 25068 POINT(534.651733 844.464111) 25069 POINT(711.303589 84.592598) 25070 POINT(89.9524307 270.559509) 25071 POINT(368.248749 828.693176) 25072 POINT(326.275665 15.7950411) 25073 POINT(635.129517 823.537537) 25074 POINT(324.45105 160.557693) 25075 POINT(501.64743 470.435516) 25076 POINT(111.150063 261.011322) 25077 POINT(29.3854446 377.189606) 25078 POINT(800.096497 30.0900764) 25079 POINT(909.797974 539.494141) 25080 POINT(40.4792747 834.798035) 25081 POINT(935.70166 822.236328) 25082 POINT(912.001892 25.3926182) 25083 POINT(478.139893 754.882141) 25084 POINT(611.740906 394.900757) 25085 POINT(352.447296 507.002136) 25086 POINT(325.336761 304.938354) 25087 POINT(649.983154 906.45575) 25088 POINT(76.7029572 589.766479) 25089 POINT(538.355286 301.659607) 25090 POINT(572.227661 539.333069) 25091 POINT(104.139732 264.19519) 25092 POINT(766.308655 478.758301) 25093 POINT(767.384094 657.859009) 25094 POINT(197.072083 511.988434) 25095 POINT(953.93689 559.858459) 25096 POINT(899.475098 327.454742) 25097 POINT(715.390564 269.555237) 25098 POINT(676.004272 910.447144) 25099 POINT(60.7834778 55.9317856) 25100 POINT(674.299194 48.0845299) 25101 POINT(460.942566 18.4123573) 25102 POINT(20.821434 516.398376) 25103 POINT(435.341614 124.02623) 25104 POINT(827.857849 313.934998) 25105 POINT(290.610687 60.0167389) 25106 POINT(318.499756 651.83551) 25107 POINT(985.48938 443.34668) 25108 POINT(394.736084 166.612747) 25109 POINT(113.33432 361.232849) 25110 POINT(454.499969 919.473511) 25111 POINT(62.6436386 399.585876) 25112 POINT(94.6105499 756.323975) 25113 POINT(308.966217 734.386108) 25114 POINT(921.381714 987.455261) 25115 POINT(356.643982 515.573059) 25116 POINT(635.663391 707.880371) 25117 POINT(262.856903 430.559113) 25118 POINT(923.816956 411.542328) 25119 POINT(694.282349 777.233032) 25120 POINT(233.294235 488.925903) 25121 POINT(671.348389 652.139465) 25122 POINT(956.913147 262.398895) 25123 POINT(207.695068 531.887817) 25124 POINT(812.545532 71.9198303) 25125 POINT(942.304504 923.858459) 25126 POINT(656.826355 631.240601) 25127 POINT(156.217422 230.660706) 25128 POINT(687.850159 127.697906) 25129 POINT(660.312561 121.911758) 25130 POINT(0.966030359 924.035889) 25131 POINT(408.933167 662.717285) 25132 POINT(995.156616 965.975708) 25133 POINT(137.949478 102.354889) 25134 POINT(869.661804 222.610825) 25135 POINT(225.034668 486.30661) 25136 POINT(789.182129 446.944946) 25137 POINT(532.513 292.8172) 25138 POINT(571.984985 890.421326) 25139 POINT(505.241852 800.040222) 25140 POINT(512.488953 128.153549) 25141 POINT(871.875916 315.680786) 25142 POINT(185.486267 31.4229031) 25143 POINT(129.91124 217.575531) 25144 POINT(493.27478 982.149597) 25145 POINT(603.630554 696.221008) 25146 POINT(462.931549 372.379822) 25147 POINT(348.098602 409.843872) 25148 POINT(235.213623 122.907318) 25149 POINT(958.446533 975.807983) 25150 POINT(618.689148 632.121948) 25151 POINT(436.722473 361.193268) 25152 POINT(525.37854 112.843605) 25153 POINT(501.574249 98.1191711) 25154 POINT(523.240967 465.669189) 25155 POINT(10.1075687 649.28949) 25156 POINT(805.223022 587.271484) 25157 POINT(735.684021 765.415222) 25158 POINT(706.360596 626.809937) 25159 POINT(427.570862 903.3479) 25160 POINT(824.792969 129.426987) 25161 POINT(513.73761 572.282532) 25162 POINT(97.8223648 79.6315384) 25163 POINT(720.345154 221.243652) 25164 POINT(331.787323 556.743896) 25165 POINT(322.348358 115.847862) 25166 POINT(619.074951 407.66745) 25167 POINT(339.018585 733.275085) 25168 POINT(434.779175 37.8412628) 25169 POINT(204.092117 954.321167) 25170 POINT(580.133423 18.7371464) 25171 POINT(808.799988 688.831604) 25172 POINT(323.856201 749.72583) 25173 POINT(201.490982 239.825882) 25174 POINT(333.014862 324.221405) 25175 POINT(72.3050613 411.943451) 25176 POINT(232.133286 106.002892) 25177 POINT(725.897644 86.8252182) 25178 POINT(786.361389 283.427643) 25179 POINT(898.188171 222.668564) 25180 POINT(878.036377 939.425415) 25181 POINT(181.267456 254.056976) 25182 POINT(195.466675 446.865295) 25183 POINT(238.830551 953.496155) 25184 POINT(140.951416 405.903229) 25185 POINT(505.812439 515.739014) 25186 POINT(107.740768 906.664856) 25187 POINT(831.425537 3.42589688) 25188 POINT(391.777222 792.130615) 25189 POINT(33.7894897 176.910461) 25190 POINT(465.718811 368.038055) 25191 POINT(654.187012 967.105347) 25192 POINT(725.118042 855.28125) 25193 POINT(225.182755 548.124146) 25194 POINT(648.040222 892.59137) 25195 POINT(73.0376053 752.387634) 25196 POINT(321.294495 800.75824) 25197 POINT(362.797913 836.308594) 25198 POINT(663.394104 732.46814) 25199 POINT(644.017822 756.895081) 25200 POINT(304.048737 512.775269) 25201 POINT(274.29425 831.467957) 25202 POINT(803.24823 73.7094269) 25203 POINT(572.789062 112.654076) 25204 POINT(753.764648 192.585052) 25205 POINT(500.937653 972.991333) 25206 POINT(806.24762 437.888245) 25207 POINT(774.986938 227.589767) 25208 POINT(986.218262 130.459793) 25209 POINT(105.366005 864.693604) 25210 POINT(990.490723 952.983582) 25211 POINT(329.813446 853.648926) 25212 POINT(813.320251 940.067017) 25213 POINT(487.415985 74.3110199) 25214 POINT(869.460815 697.628174) 25215 POINT(874.139832 693.543579) 25216 POINT(265.006165 217.674149) 25217 POINT(160.068237 101.028328) 25218 POINT(483.20993 847.274597) 25219 POINT(145.524933 121.585396) 25220 POINT(170.37764 253.653503) 25221 POINT(426.825378 723.712891) 25222 POINT(48.4639397 406.490936) 25223 POINT(449.936035 938.8078) 25224 POINT(71.3897858 120.04863) 25225 POINT(297.345581 552.88562) 25226 POINT(559.637512 898.509644) 25227 POINT(303.592621 208.548325) 25228 POINT(173.828903 185.502243) 25229 POINT(779.912048 501.058105) 25230 POINT(657.317017 501.318634) 25231 POINT(878.23584 125.891594) 25232 POINT(428.017212 867.634705) 25233 POINT(897.326355 58.9178352) 25234 POINT(421.591827 768.99585) 25235 POINT(165.259521 562.848267) 25236 POINT(375.628235 223.001312) 25237 POINT(387.071747 718.945068) 25238 POINT(744.681641 257.655121) 25239 POINT(966.521606 400.873474) 25240 POINT(99.1906891 796.045532) 25241 POINT(67.0999908 623.395508) 25242 POINT(590.631653 87.2829132) 25243 POINT(918.286804 13.3037443) 25244 POINT(467.305115 1.00464213) 25245 POINT(275.353668 530.185791) 25246 POINT(759.413879 713.910645) 25247 POINT(759.635376 292.518433) 25248 POINT(881.291809 194.512924) 25249 POINT(624.142883 488.06955) 25250 POINT(738.596497 960.981689) 25251 POINT(967.804688 430.108002) 25252 POINT(897.934631 511.687073) 25253 POINT(549.753906 191.593109) 25254 POINT(847.810486 664.435242) 25255 POINT(700.313538 253.058258) 25256 POINT(428.180084 484.76709) 25257 POINT(783.174744 846.672729) 25258 POINT(159.566025 122.944153) 25259 POINT(707.351685 294.936371) 25260 POINT(693.096802 440.925354) 25261 POINT(919.580017 519.235229) 25262 POINT(614.538818 912.907288) 25263 POINT(507.800476 938.290283) 25264 POINT(756.095642 684.645386) 25265 POINT(722.22644 362.216431) 25266 POINT(340.268646 527.21167) 25267 POINT(658.382629 902.950867) 25268 POINT(244.355789 510.111176) 25269 POINT(660.667053 820.313782) 25270 POINT(429.282166 727.442932) 25271 POINT(387.821869 74.6515274) 25272 POINT(822.5979 160.336334) 25273 POINT(453.700165 897.239014) 25274 POINT(335.971466 461.137543) 25275 POINT(216.527512 169.357666) 25276 POINT(88.7904663 952.302612) 25277 POINT(64.227562 836.821777) 25278 POINT(611.132019 688.833313) 25279 POINT(437.199066 10.9239254) 25280 POINT(824.070801 921.164978) 25281 POINT(676.203735 117.162292) 25282 POINT(908.88208 490.090149) 25283 POINT(492.881989 263.174408) 25284 POINT(948.107422 501.620422) 25285 POINT(673.115601 486.137451) 25286 POINT(72.7574997 373.315155) 25287 POINT(356.385925 302.227417) 25288 POINT(106.326256 960.826416) 25289 POINT(532.940308 876.911926) 25290 POINT(636.09436 801.1427) 25291 POINT(988.610779 540.862854) 25292 POINT(546.867676 524.794617) 25293 POINT(856.286865 433.710571) 25294 POINT(256.384613 561.281433) 25295 POINT(833.209229 923.956665) 25296 POINT(832.837341 398.972778) 25297 POINT(452.43396 550.958496) 25298 POINT(444.108063 762.156494) 25299 POINT(91.1453934 502.483887) 25300 POINT(979.358887 173.769104) 25301 POINT(522.235718 782.997009) 25302 POINT(443.615143 913.338257) 25303 POINT(211.094147 963.317932) 25304 POINT(805.131653 427.060883) 25305 POINT(497.373505 716.935059) 25306 POINT(276.955536 762.662903) 25307 POINT(630.257263 743.030457) 25308 POINT(644.642883 688.268616) 25309 POINT(22.1907139 417.798279) 25310 POINT(771.117676 305.114349) 25311 POINT(305.055298 886.122498) 25312 POINT(79.8767776 312.36618) 25313 POINT(897.354858 852.987488) 25314 POINT(854.964539 652.951599) 25315 POINT(982.28772 121.595131) 25316 POINT(19.3117771 227.236237) 25317 POINT(543.849243 782.162231) 25318 POINT(534.221191 262.22876) 25319 POINT(478.735809 726.492371) 25320 POINT(277.188904 964.069641) 25321 POINT(691.303833 959.014404) 25322 POINT(731.190369 347.769836) 25323 POINT(460.81604 621.028381) 25324 POINT(787.482178 858.046204) 25325 POINT(546.433594 133.000778) 25326 POINT(610.442688 186.823914) 25327 POINT(345.774597 797.134888) 25328 POINT(724.695862 815.323425) 25329 POINT(655.360046 261.952118) 25330 POINT(102.547134 411.040588) 25331 POINT(982.046265 620.743591) 25332 POINT(97.5595016 582.399048) 25333 POINT(37.8485146 550.581238) 25334 POINT(84.9803009 317.069855) 25335 POINT(708.783569 767.842773) 25336 POINT(831.885803 25.2018967) 25337 POINT(942.003845 415.261169) 25338 POINT(82.670166 688.004272) 25339 POINT(243.195221 555.325867) 25340 POINT(965.303833 527.805115) 25341 POINT(744.72229 242.047607) 25342 POINT(410.203003 611.045593) 25343 POINT(599.216003 209.875046) 25344 POINT(339.272614 254.444229) 25345 POINT(106.207138 852.771362) 25346 POINT(393.540833 301.191742) 25347 POINT(902.161621 181.599579) 25348 POINT(92.7280426 683.562622) 25349 POINT(476.11264 923.127625) 25350 POINT(681.167908 996.404663) 25351 POINT(531.407288 953.875916) 25352 POINT(336.909637 518.894592) 25353 POINT(444.388885 207.040298) 25354 POINT(682.90448 576.633301) 25355 POINT(496.758606 926.812195) 25356 POINT(622.35968 810.136841) 25357 POINT(231.65773 313.182312) 25358 POINT(859.197021 677.229919) 25359 POINT(334.069244 858.987183) 25360 POINT(196.782761 874.546631) 25361 POINT(821.957825 952.382629) 25362 POINT(924.513428 716.71167) 25363 POINT(91.7901917 40.589756) 25364 POINT(596.398132 400.846008) 25365 POINT(854.955078 28.7539883) 25366 POINT(25.5438175 439.485291) 25367 POINT(172.519379 840.811218) 25368 POINT(813.614197 938.097778) 25369 POINT(415.222137 682.725891) 25370 POINT(608.225342 286.063507) 25371 POINT(892.25354 523.320923) 25372 POINT(140.29776 824.760986) 25373 POINT(282.94809 410.769073) 25374 POINT(997.182068 146.469513) 25375 POINT(624.926025 255.87973) 25376 POINT(798.607971 496.92038) 25377 POINT(43.4485474 684.449524) 25378 POINT(676.989807 826.93689) 25379 POINT(310.947662 53.6250229) 25380 POINT(640.308716 29.7244091) 25381 POINT(692.102478 70.5518723) 25382 POINT(886.746887 865.678528) 25383 POINT(925.851135 990.2854) 25384 POINT(520.668884 712.355591) 25385 POINT(16.8513317 714.362488) 25386 POINT(417.752075 170.410645) 25387 POINT(228.770309 387.561218) 25388 POINT(434.506439 434.395538) 25389 POINT(92.1533051 189.80574) 25390 POINT(438.660126 318.483154) 25391 POINT(740.371582 850.132629) 25392 POINT(139.625275 670.236084) 25393 POINT(676.292847 142.976852) 25394 POINT(763.3078 259.881409) 25395 POINT(435.983978 952.234497) 25396 POINT(786.841309 888.2276) 25397 POINT(168.204391 859.717712) 25398 POINT(223.471176 594.027527) 25399 POINT(82.0603027 101.462753) 25400 POINT(25.9883156 282.544098) 25401 POINT(50.4766121 873.232666) 25402 POINT(712.137695 553.225464) 25403 POINT(492.732513 606.454773) 25404 POINT(163.739563 828.283325) 25405 POINT(421.960602 994.343018) 25406 POINT(22.4441471 318.755432) 25407 POINT(238.108475 257.311249) 25408 POINT(211.777313 794.111023) 25409 POINT(306.414642 694.830994) 25410 POINT(823.255066 320.040649) 25411 POINT(497.089355 791.105713) 25412 POINT(82.7863159 11.7948675) 25413 POINT(912.874939 603.425293) 25414 POINT(984.423096 722.969849) 25415 POINT(814.870239 459.552124) 25416 POINT(766.943726 398.264832) 25417 POINT(918.949524 984.330933) 25418 POINT(993.096436 400.375702) 25419 POINT(498.918823 541.879211) 25420 POINT(53.0230637 453.375092) 25421 POINT(149.991394 459.809723) 25422 POINT(387.006104 295.832825) 25423 POINT(267.110809 53.1862602) 25424 POINT(245.924408 715.331177) 25425 POINT(735.11322 911.167114) 25426 POINT(971.487244 241.351852) 25427 POINT(547.831665 87.0314178) 25428 POINT(376.389618 445.785675) 25429 POINT(935.264954 446.604095) 25430 POINT(84.059967 970.211548) 25431 POINT(524.239746 200.730011) 25432 POINT(598.855347 137.895096) 25433 POINT(359.103363 559.743896) 25434 POINT(323.712921 278.084564) 25435 POINT(613.515991 2.81782556) 25436 POINT(829.84259 793.168579) 25437 POINT(209.139496 119.244835) 25438 POINT(971.606201 28.7763233) 25439 POINT(576.81012 634.359863) 25440 POINT(191.977493 296.729156) 25441 POINT(533.658752 627.762329) 25442 POINT(795.727722 975.310303) 25443 POINT(866.725098 149.262009) 25444 POINT(497.681335 635.647217) 25445 POINT(199.165924 267.624298) 25446 POINT(54.1099129 172.758026) 25447 POINT(136.564896 893.46991) 25448 POINT(831.765869 151.294083) 25449 POINT(443.614746 610.936523) 25450 POINT(289.531738 96.1252289) 25451 POINT(59.2030411 858.915527) 25452 POINT(273.61261 494.203674) 25453 POINT(422.440399 513.435059) 25454 POINT(943.203064 444.769867) 25455 POINT(733.312439 645.298218) 25456 POINT(937.3125 458.718811) 25457 POINT(117.420029 634.255249) 25458 POINT(905.747864 14.2421608) 25459 POINT(990.829834 101.264809) 25460 POINT(802.085327 414.737701) 25461 POINT(342.64505 227.887848) 25462 POINT(870.872742 947.100586) 25463 POINT(861.911255 936.278015) 25464 POINT(255.495712 625.165466) 25465 POINT(352.396454 339.945007) 25466 POINT(760.429138 136.1716) 25467 POINT(302.266693 595.440918) 25468 POINT(878.426514 340.214355) 25469 POINT(732.471924 304.959259) 25470 POINT(549.145813 546.885315) 25471 POINT(42.6464844 471.770355) 25472 POINT(763.46582 193.485886) 25473 POINT(839.5224 492.291656) 25474 POINT(533.129333 749.733459) 25475 POINT(81.3833923 93.889267) 25476 POINT(577.309937 89.8061829) 25477 POINT(42.2113876 575.325623) 25478 POINT(458.302185 9.5595026) 25479 POINT(908.278137 271.834717) 25480 POINT(652.979065 471.076172) 25481 POINT(413.521454 209.475357) 25482 POINT(953.265564 865.305481) 25483 POINT(21.7482681 309.654663) 25484 POINT(629.088196 573.936279) 25485 POINT(325.286285 896.138794) 25486 POINT(395.646362 252.003601) 25487 POINT(681.043396 300.692841) 25488 POINT(541.111145 51.8348694) 25489 POINT(604.03772 982.576599) 25490 POINT(681.80719 866.215088) 25491 POINT(121.462807 209.938507) 25492 POINT(813.520325 124.128525) 25493 POINT(521.513367 201.801041) 25494 POINT(366.869659 656.783203) 25495 POINT(652.893616 917.543152) 25496 POINT(301.881195 236.131592) 25497 POINT(913.678284 891.908691) 25498 POINT(295.319366 34.6799545) 25499 POINT(160.621445 648.584229) 25500 POINT(390.424896 66.5710602) 25501 POINT(148.872849 50.8941879) 25502 POINT(152.034073 638.892151) 25503 POINT(532.247375 246.381256) 25504 POINT(163.317627 602.6922) 25505 POINT(498.705353 680.832703) 25506 POINT(329.39447 269.70462) 25507 POINT(445.678284 560.147095) 25508 POINT(836.791687 918.299622) 25509 POINT(704.567566 454.420044) 25510 POINT(128.208801 906.403931) 25511 POINT(770.540955 812.483215) 25512 POINT(964.497314 236.306641) 25513 POINT(178.157654 597.212524) 25514 POINT(588.501953 563.338806) 25515 POINT(559.001709 188.204803) 25516 POINT(409.880981 834.906494) 25517 POINT(326.152954 20.5081787) 25518 POINT(180.790955 106.438408) 25519 POINT(231.857635 43.2075424) 25520 POINT(717.08905 365.265747) 25521 POINT(947.184204 162.664383) 25522 POINT(179.287674 51.7036057) 25523 POINT(101.898102 70.5650787) 25524 POINT(305.843903 188.681854) 25525 POINT(513.51886 700.747009) 25526 POINT(785.541626 797.849426) 25527 POINT(818.916382 480.772339) 25528 POINT(865.932434 412.433472) 25529 POINT(420.370056 279.758575) 25530 POINT(974.354248 707.192383) 25531 POINT(669.386536 754.026428) 25532 POINT(433.393311 406.093262) 25533 POINT(962.505188 673.2948) 25534 POINT(593.368286 942.039856) 25535 POINT(918.702026 804.663757) 25536 POINT(893.184326 713.860413) 25537 POINT(880.836304 337.328918) 25538 POINT(463.553864 988.251831) 25539 POINT(545.004639 461.348297) 25540 POINT(72.0575027 443.509949) 25541 POINT(810.931458 147.926926) 25542 POINT(99.8856506 353.310883) 25543 POINT(781.017761 11.3321753) 25544 POINT(160.562561 408.845184) 25545 POINT(860.895081 224.046432) 25546 POINT(199.824112 13.1499329) 25547 POINT(853.927551 183.08728) 25548 POINT(934.547729 530.07782) 25549 POINT(847.82251 128.174881) 25550 POINT(231.784668 800.150208) 25551 POINT(193.241119 348.832031) 25552 POINT(134.21965 255.349991) 25553 POINT(430.041351 410.41333) 25554 POINT(296.598938 74.1373291) 25555 POINT(162.681686 916.954834) 25556 POINT(402.77063 56.6517982) 25557 POINT(486.611481 415.714355) 25558 POINT(932.042725 698.867432) 25559 POINT(64.5650024 854.06189) 25560 POINT(386.777039 374.675964) 25561 POINT(616.061768 509.333771) 25562 POINT(683.825195 558.407532) 25563 POINT(763.733093 27.3536148) 25564 POINT(957.016846 739.691406) 25565 POINT(553.100342 392.157715) 25566 POINT(76.0048981 590.981445) 25567 POINT(783.004517 590.260803) 25568 POINT(21.0510769 179.305573) 25569 POINT(635.042908 975.417542) 25570 POINT(79.6169052 592.263) 25571 POINT(133.233261 947.747986) 25572 POINT(67.8575058 439.025848) 25573 POINT(188.960846 363.407837) 25574 POINT(300.368378 845.766357) 25575 POINT(458.451416 932.417358) 25576 POINT(410.00235 987.817322) 25577 POINT(856.059753 853.172729) 25578 POINT(884.577209 974.893005) 25579 POINT(300.202606 698.525391) 25580 POINT(70.2789612 258.395416) 25581 POINT(421.555756 501.728943) 25582 POINT(577.100647 279.362885) 25583 POINT(415.057343 498.247345) 25584 POINT(397.439209 80.779747) 25585 POINT(676.325256 734.24408) 25586 POINT(455.820831 218.16925) 25587 POINT(115.43325 943.004944) 25588 POINT(789.588013 807.6745) 25589 POINT(200.862152 670.691223) 25590 POINT(614.323303 631.860229) 25591 POINT(546.226318 572.396851) 25592 POINT(354.00705 201.530594) 25593 POINT(732.582703 333.85257) 25594 POINT(467.726959 758.866455) 25595 POINT(658.392212 554.248657) 25596 POINT(938.618286 755.683228) 25597 POINT(954.278381 668.144897) 25598 POINT(416.192078 93.7559814) 25599 POINT(395.499054 121.526321) 25600 POINT(732.994568 755.747375) 25601 POINT(124.522209 346.593567) 25602 POINT(316.45459 659.71283) 25603 POINT(270.406586 915.332581) 25604 POINT(555.768677 52.4937935) 25605 POINT(960.094971 672.380859) 25606 POINT(583.805237 323.199493) 25607 POINT(76.6090012 747.932678) 25608 POINT(20.487854 213.715851) 25609 POINT(576.002014 491.748413) 25610 POINT(775.251221 365.677673) 25611 POINT(952.411316 425.733643) 25612 POINT(3.40644884 450.137634) 25613 POINT(90.4121017 926.632874) 25614 POINT(189.170486 645.425232) 25615 POINT(395.992584 179.364914) 25616 POINT(224.404388 469.202454) 25617 POINT(709.856506 908.267029) 25618 POINT(357.586273 331.902191) 25619 POINT(115.541603 936.488403) 25620 POINT(296.16452 200.619568) 25621 POINT(724.283386 947.079163) 25622 POINT(304.262695 375.782135) 25623 POINT(791.033813 142.689728) 25624 POINT(296.937134 158.836899) 25625 POINT(862.07196 309.576599) 25626 POINT(95.1404495 589.679199) 25627 POINT(922.850525 86.7798691) 25628 POINT(778.665405 60.1454582) 25629 POINT(881.868347 789.497925) 25630 POINT(517.20282 457.765778) 25631 POINT(947.325317 719.063965) 25632 POINT(134.940857 195.911377) 25633 POINT(111.110947 558.37384) 25634 POINT(687.682434 566.888916) 25635 POINT(710.433655 764.608948) 25636 POINT(422.202728 978.469543) 25637 POINT(880.374573 159.734573) 25638 POINT(17.5897713 857.458862) 25639 POINT(208.226669 528.269226) 25640 POINT(52.7915573 22.502533) 25641 POINT(448.166901 571.555847) 25642 POINT(231.863815 729.296021) 25643 POINT(226.241165 164.20665) 25644 POINT(259.911224 102.267502) 25645 POINT(62.5703239 403.135773) 25646 POINT(83.0167007 405.787018) 25647 POINT(140.001175 339.86554) 25648 POINT(872.250183 333.822296) 25649 POINT(264.130524 715.446594) 25650 POINT(985.963928 859.115356) 25651 POINT(674.859924 162.843231) 25652 POINT(729.957092 971.441833) 25653 POINT(398.649261 658.107361) 25654 POINT(48.8020287 29.9952564) 25655 POINT(865.812744 958.819885) 25656 POINT(23.8620968 278.704163) 25657 POINT(579.048401 101.475014) 25658 POINT(877.615662 37.2514191) 25659 POINT(806.545349 989.69043) 25660 POINT(946.279419 37.2653885) 25661 POINT(12.2287273 708.951904) 25662 POINT(92.9674835 565.752502) 25663 POINT(31.8637314 483.26651) 25664 POINT(304.42334 390.130798) 25665 POINT(689.855835 442.461304) 25666 POINT(711.54303 645.618713) 25667 POINT(538.785522 409.393463) 25668 POINT(166.413986 881.269775) 25669 POINT(931.26239 323.142181) 25670 POINT(418.493866 591.289368) 25671 POINT(518.955261 282.054321) 25672 POINT(185.04512 749.709595) 25673 POINT(162.164703 379.66687) 25674 POINT(284.342987 955.948914) 25675 POINT(848.67804 893.008301) 25676 POINT(975.931335 763.784363) 25677 POINT(614.648621 108.187187) 25678 POINT(664.885803 974.975952) 25679 POINT(262.750916 289.738617) 25680 POINT(814.347717 140.001877) 25681 POINT(341.887848 440.765045) 25682 POINT(863.341248 121.491051) 25683 POINT(924.401062 498.961365) 25684 POINT(959.019348 381.032715) 25685 POINT(55.3160858 173.24649) 25686 POINT(631.077026 77.7462006) 25687 POINT(796.025696 466.672424) 25688 POINT(111.31488 188.612946) 25689 POINT(812.481018 38.8883705) 25690 POINT(736.554382 638.010864) 25691 POINT(814.059937 436.687286) 25692 POINT(874.742188 959.692261) 25693 POINT(510.567535 130.64946) 25694 POINT(641.706909 801.773926) 25695 POINT(376.180725 521.854675) 25696 POINT(592.340332 757.947998) 25697 POINT(473.583862 172.908752) 25698 POINT(790.789124 590.495911) 25699 POINT(60.1907578 535.601013) 25700 POINT(608.507141 67.823555) 25701 POINT(160.463226 222.475464) 25702 POINT(138.800323 926.80835) 25703 POINT(811.30542 246.190536) 25704 POINT(826.997192 84.5411911) 25705 POINT(166.840988 739.106873) 25706 POINT(324.910034 251.972641) 25707 POINT(58.2015495 92.0607376) 25708 POINT(418.269684 771.075317) 25709 POINT(245.024963 607.35144) 25710 POINT(330.881042 425.574097) 25711 POINT(348.068298 53.8210068) 25712 POINT(667.062012 421.863647) 25713 POINT(24.6845837 614.386841) 25714 POINT(555.306885 850.841003) 25715 POINT(127.032875 816.977905) 25716 POINT(245.008972 13.0719242) 25717 POINT(481.04248 92.6229706) 25718 POINT(981.550781 699.642517) 25719 POINT(234.71788 579.177185) 25720 POINT(643.32428 190.516525) 25721 POINT(967.859558 921.19281) 25722 POINT(520.593079 573.133911) 25723 POINT(530.318909 856.730103) 25724 POINT(107.004478 348.889099) 25725 POINT(809.262817 847.055054) 25726 POINT(669.565002 927.180481) 25727 POINT(822.474182 427.41626) 25728 POINT(174.712982 889.715942) 25729 POINT(27.4726944 134.283096) 25730 POINT(342.566284 116.107033) 25731 POINT(936.330383 110.034088) 25732 POINT(847.445007 410.524109) 25733 POINT(772.744568 879.218933) 25734 POINT(102.435837 963.982727) 25735 POINT(318.593048 425.894867) 25736 POINT(484.271118 273.97522) 25737 POINT(417.347015 939.518738) 25738 POINT(50.4623032 359.565399) 25739 POINT(54.9802246 313.433594) 25740 POINT(754.901672 733.266968) 25741 POINT(77.1574783 316.721558) 25742 POINT(315.595123 489.194336) 25743 POINT(554.38385 974.336304) 25744 POINT(366.509766 548.891541) 25745 POINT(532.462524 4.82245159) 25746 POINT(425.533966 971.333069) 25747 POINT(440.173615 618.059998) 25748 POINT(826.195923 821.878967) 25749 POINT(133.809723 771.432922) 25750 POINT(839.14679 337.129364) 25751 POINT(381.462219 341.348022) 25752 POINT(200.67276 589.942627) 25753 POINT(299.264435 73.4641495) 25754 POINT(572.985718 13.2723169) 25755 POINT(695.783691 630.320618) 25756 POINT(691.193542 585.483948) 25757 POINT(636.1828 325.868744) 25758 POINT(164.24147 206.591736) 25759 POINT(559.518616 4.94535923) 25760 POINT(854.443115 438.199951) 25761 POINT(553.620911 39.8294067) 25762 POINT(178.295761 864.257935) 25763 POINT(573.53363 139.171844) 25764 POINT(469.056458 520.080139) 25765 POINT(470.756592 925.883911) 25766 POINT(91.1036911 189.105026) 25767 POINT(248.884598 384.737671) 25768 POINT(372.622986 576.864624) 25769 POINT(372.210083 917.827087) 25770 POINT(654.955994 26.5139751) 25771 POINT(701.066956 2.63281322) 25772 POINT(75.4833374 267.576965) 25773 POINT(512.904663 214.833328) 25774 POINT(790.743164 807.457092) 25775 POINT(471.17749 563.433716) 25776 POINT(595.317383 742.532654) 25777 POINT(533.119507 862.092468) 25778 POINT(640.662537 631.717896) 25779 POINT(928.487122 916.196045) 25780 POINT(750.46991 430.264618) 25781 POINT(108.64212 94.3562927) 25782 POINT(662.381348 505.965973) 25783 POINT(151.304916 845.321716) 25784 POINT(100.154327 275.09494) 25785 POINT(531.437378 652.141785) 25786 POINT(548.986511 713.279541) 25787 POINT(531.647461 35.7913055) 25788 POINT(826.120911 769.621704) 25789 POINT(293.006409 546.940552) 25790 POINT(318.624969 783.873108) 25791 POINT(604.110596 249.381134) 25792 POINT(113.071075 260.179108) 25793 POINT(825.618225 299.634918) 25794 POINT(133.55722 561.200562) 25795 POINT(760.472778 677.959167) 25796 POINT(4.04415846 168.367477) 25797 POINT(45.8528099 505.422394) 25798 POINT(280.416656 413.270294) 25799 POINT(578.942322 284.681885) 25800 POINT(282.199188 968.039124) 25801 POINT(240.403778 688.902283) 25802 POINT(271.789032 725.920227) 25803 POINT(470.594208 569.889893) 25804 POINT(661.858826 984.665283) 25805 POINT(135.84581 804.579346) 25806 POINT(213.795395 432.966827) 25807 POINT(225.423691 605.727173) 25808 POINT(459.378571 342.798523) 25809 POINT(702.079895 410.891785) 25810 POINT(425.182709 487.555206) 25811 POINT(826.578186 371.984711) 25812 POINT(958.348511 677.382751) 25813 POINT(353.427307 499.970856) 25814 POINT(790.496887 859.702271) 25815 POINT(593.710632 395.396942) 25816 POINT(883.832275 545.954529) 25817 POINT(731.85144 200.692856) 25818 POINT(483.232666 856.9375) 25819 POINT(315.030762 445.594879) 25820 POINT(756.790405 831.315552) 25821 POINT(183.543289 89.1842499) 25822 POINT(504.425629 308.112183) 25823 POINT(532.513977 573.147095) 25824 POINT(412.533325 808.047974) 25825 POINT(373.116089 638.793091) 25826 POINT(947.97168 424.859161) 25827 POINT(555.858887 88.5957336) 25828 POINT(635.992432 961.280762) 25829 POINT(218.910065 420.641479) 25830 POINT(26.029768 960.852539) 25831 POINT(98.1695938 176.121887) 25832 POINT(691.794373 92.4066086) 25833 POINT(478.418335 26.224287) 25834 POINT(666.183777 625.927734) 25835 POINT(649.969421 711.450928) 25836 POINT(508.568512 723.986206) 25837 POINT(864.601196 325.123169) 25838 POINT(926.610107 580.288574) 25839 POINT(838.036987 510.834564) 25840 POINT(414.612122 324.866943) 25841 POINT(531.864624 593.75354) 25842 POINT(566.317078 233.440598) 25843 POINT(51.6878433 676.42395) 25844 POINT(615.984741 416.581604) 25845 POINT(134.736496 255.166321) 25846 POINT(854.594299 503.155365) 25847 POINT(561.507751 923.073608) 25848 POINT(58.2971039 193.381561) 25849 POINT(432.781525 455.276398) 25850 POINT(107.127441 151.683029) 25851 POINT(204.176773 772.593079) 25852 POINT(919.905823 890.798584) 25853 POINT(592.054443 467.491638) 25854 POINT(495.807953 809.595642) 25855 POINT(461.905212 283.690125) 25856 POINT(746.920532 771.417969) 25857 POINT(916.397705 965.567871) 25858 POINT(395.084259 822.057312) 25859 POINT(426.136871 549.325073) 25860 POINT(159.374924 261.584839) 25861 POINT(731.149048 533.617004) 25862 POINT(899.773132 107.981232) 25863 POINT(702.556274 537.922729) 25864 POINT(133.109253 469.054962) 25865 POINT(537.330933 392.547089) 25866 POINT(177.569946 809.448242) 25867 POINT(788.070312 980.865479) 25868 POINT(93.356514 39.1394958) 25869 POINT(356.152466 213.813278) 25870 POINT(4.06620741 626.924561) 25871 POINT(830.3172 915.916504) 25872 POINT(443.71991 65.6834335) 25873 POINT(391.661774 64.2132111) 25874 POINT(168.903931 385.232025) 25875 POINT(966.388733 184.70018) 25876 POINT(698.174927 563.255493) 25877 POINT(753.644897 979.55835) 25878 POINT(438.766052 555.886292) 25879 POINT(629.833984 652.091736) 25880 POINT(83.9241409 828.216919) 25881 POINT(3.37474775 400.407257) 25882 POINT(416.222687 173.334366) 25883 POINT(313.646515 166.345718) 25884 POINT(339.378693 868.875305) 25885 POINT(711.572327 719.646484) 25886 POINT(943.023621 825.7854) 25887 POINT(281.818756 311.01947) 25888 POINT(444.23526 968.718994) 25889 POINT(50.9484634 489.557281) 25890 POINT(662.246948 175.743988) 25891 POINT(633.180908 813.223633) 25892 POINT(187.562668 361.766357) 25893 POINT(684.954468 415.108032) 25894 POINT(975.784729 771.017944) 25895 POINT(938.623962 67.4591904) 25896 POINT(805.008301 945.353333) 25897 POINT(859.876038 120.562447) 25898 POINT(911.967285 743.888184) 25899 POINT(396.440033 610.27594) 25900 POINT(397.678711 933.22229) 25901 POINT(659.163025 818.097229) 25902 POINT(352.696381 364.290741) 25903 POINT(80.3946991 538.215637) 25904 POINT(482.944611 360.562805) 25905 POINT(836.896729 429.972748) 25906 POINT(660.279724 312.276398) 25907 POINT(391.280334 799.977173) 25908 POINT(821.366638 392.69635) 25909 POINT(511.551849 419.90274) 25910 POINT(991.228882 965.676392) 25911 POINT(265.081207 13.4704981) 25912 POINT(614.131531 460.383575) 25913 POINT(271.720459 574.620178) 25914 POINT(487.601868 960.817932) 25915 POINT(39.5142136 959.399902) 25916 POINT(271.836151 347.273254) 25917 POINT(922.221191 243.238525) 25918 POINT(96.0444031 777.295532) 25919 POINT(135.5923 185.24585) 25920 POINT(218.149658 488.801178) 25921 POINT(182.026276 89.858078) 25922 POINT(980.501465 122.220551) 25923 POINT(871.989685 216.989899) 25924 POINT(610.831665 906.885376) 25925 POINT(134.695587 243.97052) 25926 POINT(366.643311 445.032928) 25927 POINT(797.371399 720.654663) 25928 POINT(437.777802 401.053986) 25929 POINT(127.515579 843.564148) 25930 POINT(184.368622 0.875515342) 25931 POINT(899.482727 581.706421) 25932 POINT(177.210495 844.18042) 25933 POINT(117.298088 357.435608) 25934 POINT(59.3195839 498.693359) 25935 POINT(929.675781 277.59552) 25936 POINT(98.8274765 689.79071) 25937 POINT(168.802399 746.064514) 25938 POINT(45.1621895 519.636047) 25939 POINT(867.684387 107.185196) 25940 POINT(326.66629 87.9453049) 25941 POINT(926.001465 474.509277) 25942 POINT(985.456665 572.003967) 25943 POINT(243.841187 810.547363) 25944 POINT(984.638 327.988251) 25945 POINT(396.920868 626.133972) 25946 POINT(547.262695 860.894714) 25947 POINT(634.562683 863.579041) 25948 POINT(102.128769 678.994507) 25949 POINT(319.537506 882.577759) 25950 POINT(778.194763 593.868652) 25951 POINT(151.812088 264.120544) 25952 POINT(469.76355 82.5361557) 25953 POINT(709.231812 933.22937) 25954 POINT(504.462189 918.367065) 25955 POINT(158.381699 939.733276) 25956 POINT(304.37085 567.427002) 25957 POINT(927.546204 956.571655) 25958 POINT(9.50105381 392.281616) 25959 POINT(758.219604 2.02039766) 25960 POINT(407.383362 702.393494) 25961 POINT(757.509521 176.111969) 25962 POINT(211.122375 225.985977) 25963 POINT(834.658691 948.351807) 25964 POINT(482.354584 880.160095) 25965 POINT(522.545349 135.216232) 25966 POINT(989.674072 402.305481) 25967 POINT(539.287964 569.079895) 25968 POINT(414.966217 735.225159) 25969 POINT(243.989853 258.015472) 25970 POINT(410.532867 180.315323) 25971 POINT(170.340134 756.810181) 25972 POINT(612.847229 537.644165) 25973 POINT(196.502502 467.656006) 25974 POINT(331.313171 419.52066) 25975 POINT(321.850739 634.017151) 25976 POINT(952.720581 976.423035) 25977 POINT(991.161133 118.51545) 25978 POINT(287.500153 622.886963) 25979 POINT(33.478508 416.271729) 25980 POINT(488.838379 348.667236) 25981 POINT(492.790131 265.608368) 25982 POINT(609.78479 590.352417) 25983 POINT(425.75824 210.574387) 25984 POINT(839.362 804.418823) 25985 POINT(461.078918 342.256897) 25986 POINT(442.198669 98.868866) 25987 POINT(966.690735 511.763306) 25988 POINT(86.289772 962.152771) 25989 POINT(794.305237 646.203796) 25990 POINT(702.216553 80.6812592) 25991 POINT(82.9574738 504.694519) 25992 POINT(99.7279587 906.194763) 25993 POINT(649.985901 644.695801) 25994 POINT(52.3156052 358.469849) 25995 POINT(302.679657 405.866852) 25996 POINT(428.74884 304.859375) 25997 POINT(518.534973 0.6680758) 25998 POINT(637.05011 114.143608) 25999 POINT(496.52533 985.391541) 26000 POINT(288.772736 146.898346) 26001 POINT(534.01825 395.011078) 26002 POINT(680.520203 917.487305) 26003 POINT(70.0995636 98.6826706) 26004 POINT(719.3573 383.887146) 26005 POINT(920.34906 674.003113) 26006 POINT(36.1849556 321.528381) 26007 POINT(152.936951 526.971008) 26008 POINT(686.472656 587.466797) 26009 POINT(491.779816 586.343506) 26010 POINT(434.289062 743.404541) 26011 POINT(928.047485 676.72113) 26012 POINT(759.785828 582.8974) 26013 POINT(553.30072 390.822632) 26014 POINT(481.743195 592.67627) 26015 POINT(250.850082 720.256958) 26016 POINT(8.17327404 904.168762) 26017 POINT(379.56485 913.516968) 26018 POINT(435.118744 383.443298) 26019 POINT(617.460999 573.378845) 26020 POINT(925.626526 830.952271) 26021 POINT(690.217041 212.498581) 26022 POINT(389.487427 872.287354) 26023 POINT(359.686768 700.481079) 26024 POINT(524.909607 713.968201) 26025 POINT(185.011322 868.399597) 26026 POINT(804.156738 100.978348) 26027 POINT(667.704285 113.655266) 26028 POINT(217.774078 272.879944) 26029 POINT(253.860168 60.7754059) 26030 POINT(220.922775 591.044189) 26031 POINT(671.293762 89.4914932) 26032 POINT(738.231079 559.617798) 26033 POINT(434.965515 13.059598) 26034 POINT(621.282043 836.720154) 26035 POINT(346.622894 65.7668533) 26036 POINT(159.326736 320.072205) 26037 POINT(58.4406815 93.0072327) 26038 POINT(116.114059 673.455566) 26039 POINT(457.962708 899.935669) 26040 POINT(4.06142664 558.386963) 26041 POINT(783.339111 840.873291) 26042 POINT(564.667053 61.0717316) 26043 POINT(92.3498154 172.313812) 26044 POINT(557.538757 210.620163) 26045 POINT(412.763947 464.175262) 26046 POINT(279.249695 313.827881) 26047 POINT(600.091431 499.075409) 26048 POINT(750.126526 968.331909) 26049 POINT(454.74054 885.740723) 26050 POINT(187.851181 834.06604) 26051 POINT(915.142456 883.656738) 26052 POINT(400.35553 457.694824) 26053 POINT(385.791382 260.841003) 26054 POINT(698.983398 961.770447) 26055 POINT(296.767639 979.889099) 26056 POINT(181.47937 176.013458) 26057 POINT(469.661194 989.565674) 26058 POINT(41.3583183 639.290405) 26059 POINT(507.533173 766.158691) 26060 POINT(407.061829 815.07843) 26061 POINT(285.397247 642.191833) 26062 POINT(35.5848465 208.640335) 26063 POINT(322.556335 537.117981) 26064 POINT(618.655029 859.568176) 26065 POINT(826.998291 888.155884) 26066 POINT(95.8888016 808.203857) 26067 POINT(51.0737419 307.949707) 26068 POINT(2.57602787 638.752808) 26069 POINT(151.102707 473.335205) 26070 POINT(756.930908 516.333801) 26071 POINT(443.771759 695.912231) 26072 POINT(862.986023 331.040802) 26073 POINT(69.6952209 525.700073) 26074 POINT(174.117416 601.253662) 26075 POINT(957.955505 94.8688431) 26076 POINT(734.919678 773.451477) 26077 POINT(311.567993 985.997314) 26078 POINT(855.368225 979.829773) 26079 POINT(857.515869 490.733826) 26080 POINT(233.609741 311.882263) 26081 POINT(909.281067 757.977844) 26082 POINT(348.128571 262.197876) 26083 POINT(35.78619 579.241272) 26084 POINT(405.395264 343.080902) 26085 POINT(307.624237 251.783371) 26086 POINT(727.478821 564.892334) 26087 POINT(766.763916 942.171631) 26088 POINT(170.698837 645.520935) 26089 POINT(835.090088 354.458435) 26090 POINT(509.519958 612.039001) 26091 POINT(813.804504 914.145996) 26092 POINT(431.002289 73.9179382) 26093 POINT(731.62616 503.154388) 26094 POINT(48.7795563 512.338074) 26095 POINT(454.778564 429.3255) 26096 POINT(549.446167 700.912964) 26097 POINT(883.942505 459.445679) 26098 POINT(569.205933 998.976501) 26099 POINT(18.8144989 575.830078) 26100 POINT(208.623688 29.4893665) 26101 POINT(783.906616 587.27832) 26102 POINT(725.387146 850.274414) 26103 POINT(472.134247 805.415405) 26104 POINT(99.3351517 470.977295) 26105 POINT(996.068604 922.423645) 26106 POINT(993.951721 670.782898) 26107 POINT(439.11972 746.92688) 26108 POINT(500.513367 886.039734) 26109 POINT(597.114624 87.9103394) 26110 POINT(254.679611 205.715775) 26111 POINT(799.632263 354.272064) 26112 POINT(573.227478 619.822937) 26113 POINT(633.055847 157.760956) 26114 POINT(636.670044 886.011108) 26115 POINT(664.739746 683.133118) 26116 POINT(110.616188 127.493759) 26117 POINT(629.217773 900.459473) 26118 POINT(76.9857635 356.983032) 26119 POINT(100.38829 935.364868) 26120 POINT(560.798279 982.673462) 26121 POINT(583.601868 443.928772) 26122 POINT(67.5110779 330.437927) 26123 POINT(442.18924 536.001892) 26124 POINT(371.251923 788.819946) 26125 POINT(675.950684 295.397583) 26126 POINT(750.333435 218.293198) 26127 POINT(424.373779 915.024109) 26128 POINT(90.8514633 272.39566) 26129 POINT(132.853683 822.389465) 26130 POINT(862.777039 655.151245) 26131 POINT(632.101624 354.507599) 26132 POINT(209.694077 626.700867) 26133 POINT(303.490356 755.166443) 26134 POINT(30.2882881 197.945129) 26135 POINT(978.691895 731.512695) 26136 POINT(417.045013 996.538452) 26137 POINT(21.1143532 6.3119483) 26138 POINT(558.692871 202.686035) 26139 POINT(7.97787714 238.039291) 26140 POINT(814.174988 846.417175) 26141 POINT(752.139648 119.740273) 26142 POINT(186.914246 121.507767) 26143 POINT(826.869751 191.604919) 26144 POINT(631.558594 838.788391) 26145 POINT(867.698975 959.269592) 26146 POINT(227.064255 237.616211) 26147 POINT(384.342285 863.478271) 26148 POINT(168.848511 763.851013) 26149 POINT(611.80072 825.998718) 26150 POINT(140.886551 161.417053) 26151 POINT(630.447815 846.327209) 26152 POINT(1.23426723 8.74773502) 26153 POINT(985.720459 54.0778885) 26154 POINT(879.853638 248.008194) 26155 POINT(812.586243 859.016541) 26156 POINT(977.241516 31.5155449) 26157 POINT(820.018799 276.067383) 26158 POINT(250.789047 464.387726) 26159 POINT(796.148438 43.5180969) 26160 POINT(170.721298 313.941742) 26161 POINT(763.587097 971.926819) 26162 POINT(159.706375 134.142593) 26163 POINT(832.781006 747.371948) 26164 POINT(743.725159 307.516418) 26165 POINT(783.378601 619.78186) 26166 POINT(833.62677 418.046417) 26167 POINT(641.90332 504.863098) 26168 POINT(627.157043 957.960999) 26169 POINT(38.9924393 751.965454) 26170 POINT(23.4577236 350.910187) 26171 POINT(19.7412262 431.057098) 26172 POINT(32.5377846 496.351624) 26173 POINT(673.033264 486.431671) 26174 POINT(750.585144 748.192078) 26175 POINT(445.023254 525.061096) 26176 POINT(70.9143829 318.645386) 26177 POINT(141.179459 651.494263) 26178 POINT(375.651978 320.288361) 26179 POINT(311.620209 442.357269) 26180 POINT(173.889999 940.456116) 26181 POINT(195.148712 450.93988) 26182 POINT(640.066772 888.090088) 26183 POINT(485.789124 140.778198) 26184 POINT(586.94751 210.215836) 26185 POINT(527.259521 726.921448) 26186 POINT(859.105103 680.304688) 26187 POINT(859.31781 430.674164) 26188 POINT(936.683777 191.39711) 26189 POINT(387.042908 269.635406) 26190 POINT(630.037964 311.206482) 26191 POINT(449.747284 867.04541) 26192 POINT(761.26709 383.259918) 26193 POINT(188.368118 295.640045) 26194 POINT(259.541992 186.893005) 26195 POINT(384.983093 609.891724) 26196 POINT(937.376465 239.62677) 26197 POINT(239.803024 170.77359) 26198 POINT(611.7146 768.788269) 26199 POINT(801.989441 848.756531) 26200 POINT(137.075699 266.477875) 26201 POINT(251.43808 688.981079) 26202 POINT(231.339966 335.049561) 26203 POINT(287.891998 138.42009) 26204 POINT(804.520996 331.697998) 26205 POINT(198.160294 734.961731) 26206 POINT(406.620483 623.696045) 26207 POINT(996.698853 524.922424) 26208 POINT(655.095947 204.095016) 26209 POINT(452.371735 956.400269) 26210 POINT(301.409058 15.6940022) 26211 POINT(985.982056 654.574097) 26212 POINT(368.513763 753.850037) 26213 POINT(838.404663 150.645569) 26214 POINT(409.048096 721.895447) 26215 POINT(635.243652 153.337753) 26216 POINT(972.620789 692.846985) 26217 POINT(406.393311 431.053741) 26218 POINT(358.241089 774.642639) 26219 POINT(231.324997 439.942413) 26220 POINT(396.081299 210.869888) 26221 POINT(275.120239 879.812927) 26222 POINT(535.953369 493.013611) 26223 POINT(936.098938 793.316406) 26224 POINT(805.819153 372.443878) 26225 POINT(851.362732 316.918701) 26226 POINT(83.1583099 490.099518) 26227 POINT(387.818542 933.403687) 26228 POINT(639.036682 679.135925) 26229 POINT(97.522789 19.0712013) 26230 POINT(566.316162 221.366669) 26231 POINT(129.878693 594.152649) 26232 POINT(689.826416 773.419861) 26233 POINT(289.832031 707.616272) 26234 POINT(30.7929726 535.072144) 26235 POINT(909.378784 568.445923) 26236 POINT(216.837448 862.749756) 26237 POINT(886.18042 891.254333) 26238 POINT(201.99678 678.864807) 26239 POINT(642.758972 486.962799) 26240 POINT(801.152222 76.2739716) 26241 POINT(705.625793 697.092285) 26242 POINT(315.829254 741.117371) 26243 POINT(506.914215 156.445435) 26244 POINT(602.476135 631.66272) 26245 POINT(610.898987 652.716003) 26246 POINT(432.12088 561.200867) 26247 POINT(181.573151 627.565125) 26248 POINT(736.936523 385.808899) 26249 POINT(280.726715 492.311493) 26250 POINT(113.038437 729.82428) 26251 POINT(742.362793 288.561218) 26252 POINT(731.234253 70.703537) 26253 POINT(460.553162 951.464966) 26254 POINT(33.0231094 418.729156) 26255 POINT(83.8609314 188.053284) 26256 POINT(395.584656 274.573792) 26257 POINT(288.247559 688.123291) 26258 POINT(427.639008 428.440277) 26259 POINT(38.0732079 478.901672) 26260 POINT(1.83163857 18.4127178) 26261 POINT(905.644653 921.299072) 26262 POINT(285.781128 23.4400616) 26263 POINT(546.152344 344.720062) 26264 POINT(353.313202 599.317139) 26265 POINT(587.270874 114.453278) 26266 POINT(843.012573 836.046143) 26267 POINT(339.811798 21.619194) 26268 POINT(189.501663 224.590561) 26269 POINT(44.3686676 47.0940437) 26270 POINT(243.371323 363.4375) 26271 POINT(593.767639 559.987183) 26272 POINT(381.138 844.356262) 26273 POINT(395.337555 915.977783) 26274 POINT(202.806885 356.687164) 26275 POINT(921.675903 784.5896) 26276 POINT(540.524414 505.464722) 26277 POINT(532.96991 686.403137) 26278 POINT(129.477249 706.324829) 26279 POINT(905.414795 505.997955) 26280 POINT(996.8349 495.769562) 26281 POINT(264.365631 774.438171) 26282 POINT(434.457703 265.865509) 26283 POINT(71.1954117 412.332031) 26284 POINT(567.748352 525.383667) 26285 POINT(651.169373 282.52417) 26286 POINT(700.982239 422.90564) 26287 POINT(855.865234 227.528732) 26288 POINT(196.405212 200.317841) 26289 POINT(435.780396 433.749664) 26290 POINT(971.159851 126.801086) 26291 POINT(642.903564 660.825745) 26292 POINT(316.632141 83.9422989) 26293 POINT(303.44342 554.190308) 26294 POINT(656.177185 512.606079) 26295 POINT(389.989868 391.875305) 26296 POINT(759.57666 713.000732) 26297 POINT(0.637422919 938.062744) 26298 POINT(479.319824 222.866562) 26299 POINT(718.658264 836.880371) 26300 POINT(121.337425 37.4459038) 26301 POINT(6.9356451 197.040314) 26302 POINT(420.71521 22.0241909) 26303 POINT(591.436035 723.370911) 26304 POINT(773.871277 887.154602) 26305 POINT(540.519226 242.931747) 26306 POINT(848.519836 322.602966) 26307 POINT(862.994751 564.715698) 26308 POINT(120.404732 233.618713) 26309 POINT(166.783844 882.02478) 26310 POINT(893.34375 798.013184) 26311 POINT(59.2266693 970.191467) 26312 POINT(271.771332 210.99852) 26313 POINT(174.987244 109.747856) 26314 POINT(651.026123 343.722107) 26315 POINT(711.79187 352.406708) 26316 POINT(51.5425072 88.4634247) 26317 POINT(189.642471 585.905273) 26318 POINT(983.446045 266.704712) 26319 POINT(455.563416 1.10527456) 26320 POINT(125.514854 644.533813) 26321 POINT(191.370377 443.592682) 26322 POINT(527.871521 732.502014) 26323 POINT(882.532166 680.851196) 26324 POINT(95.0615845 684.177795) 26325 POINT(236.182205 539.001038) 26326 POINT(22.4229412 179.878067) 26327 POINT(838.114258 879.821899) 26328 POINT(594.051697 760.704224) 26329 POINT(682.670898 484.668304) 26330 POINT(208.54393 624.98175) 26331 POINT(444.437592 587.915039) 26332 POINT(785.485718 517.034546) 26333 POINT(663.347839 325.341431) 26334 POINT(380.946106 520.082153) 26335 POINT(640.067444 14.5984316) 26336 POINT(166.691483 444.72229) 26337 POINT(869.369446 513.460205) 26338 POINT(121.312233 106.361916) 26339 POINT(436.761871 970.412476) 26340 POINT(260.869812 274.131104) 26341 POINT(457.155701 920.378723) 26342 POINT(874.114075 5.91583776) 26343 POINT(411.232941 730.757385) 26344 POINT(597.974548 655.46875) 26345 POINT(30.9104404 979.789551) 26346 POINT(801.220581 135.016617) 26347 POINT(173.52095 76.5767288) 26348 POINT(369.356659 267.91507) 26349 POINT(206.81192 701.418701) 26350 POINT(786.542725 888.873474) 26351 POINT(683.472046 863.774231) 26352 POINT(278.297791 2.87071991) 26353 POINT(222.648376 215.910645) 26354 POINT(552.782349 947.523865) 26355 POINT(322.942688 911.677673) 26356 POINT(402.503998 407.391724) 26357 POINT(420.932709 715.924072) 26358 POINT(599.420593 983.16156) 26359 POINT(573.737183 220.589584) 26360 POINT(334.825348 145.165268) 26361 POINT(204.037277 143.810226) 26362 POINT(74.4049835 11.1200438) 26363 POINT(999.916931 529.442749) 26364 POINT(474.912537 834.920105) 26365 POINT(236.647888 742.848633) 26366 POINT(751.561035 119.892578) 26367 POINT(988.002991 6.80271435) 26368 POINT(107.217072 259.954407) 26369 POINT(253.843887 636.864624) 26370 POINT(1.57734001 839.985168) 26371 POINT(359.727448 431.937683) 26372 POINT(819.68689 607.503601) 26373 POINT(822.36908 932.156616) 26374 POINT(16.4822521 467.063141) 26375 POINT(539.369263 567.403015) 26376 POINT(892.704407 92.9579697) 26377 POINT(798.166016 446.010986) 26378 POINT(575.850098 241.764786) 26379 POINT(431.346802 550.562134) 26380 POINT(519.259766 51.4815521) 26381 POINT(25.0036392 57.6849098) 26382 POINT(327.546417 406.721344) 26383 POINT(543.61792 38.6948662) 26384 POINT(105.046165 338.370239) 26385 POINT(27.0372639 850.589111) 26386 POINT(896.641113 810.734863) 26387 POINT(178.575409 530.818176) 26388 POINT(441.111664 669.527771) 26389 POINT(62.395607 668.503357) 26390 POINT(133.188873 910.730835) 26391 POINT(705.504639 759.073059) 26392 POINT(241.894547 354.727112) 26393 POINT(925.39978 444.009705) 26394 POINT(462.896759 734.016235) 26395 POINT(27.3061562 293.506409) 26396 POINT(397.916626 728.86261) 26397 POINT(311.775024 673.930115) 26398 POINT(614.269165 606.537109) 26399 POINT(359.066681 536.304016) 26400 POINT(305.103394 470.189667) 26401 POINT(394.22525 714.405701) 26402 POINT(961.64032 227.244659) 26403 POINT(347.19577 95.0069275) 26404 POINT(801.645325 909.584656) 26405 POINT(494.996765 147.358093) 26406 POINT(345.574951 974.342529) 26407 POINT(375.228119 118.970314) 26408 POINT(568.50946 381.15033) 26409 POINT(387.566925 330.422791) 26410 POINT(510.438873 166.102158) 26411 POINT(626.024048 559.30072) 26412 POINT(331.157349 642.027954) 26413 POINT(811.35022 384.048462) 26414 POINT(233.509644 367.096344) 26415 POINT(99.9835663 469.733276) 26416 POINT(837.718018 398.068329) 26417 POINT(241.322281 292.305115) 26418 POINT(810.820068 730.117126) 26419 POINT(325.022552 404.388184) 26420 POINT(382.81311 12.0522184) 26421 POINT(818.720825 498.047821) 26422 POINT(811.995789 794.705688) 26423 POINT(936.441833 688.071289) 26424 POINT(596.424011 542.440186) 26425 POINT(619.488831 358.432892) 26426 POINT(919.669617 125.138275) 26427 POINT(653.453491 835.760925) 26428 POINT(323.637299 363.170288) 26429 POINT(113.885269 93.3852005) 26430 POINT(228.624847 663.874451) 26431 POINT(434.010681 680.14917) 26432 POINT(683.800537 748.811707) 26433 POINT(753.693848 407.467804) 26434 POINT(595.641052 700.889343) 26435 POINT(750.720703 829.582764) 26436 POINT(816.564636 974.421143) 26437 POINT(112.720924 794.704895) 26438 POINT(503.084686 914.97522) 26439 POINT(998.003906 923.475098) 26440 POINT(397.485016 675.737976) 26441 POINT(901.778931 646.262634) 26442 POINT(427.60907 30.0105972) 26443 POINT(14.2932253 778.236938) 26444 POINT(737.2995 442.89328) 26445 POINT(481.111176 672.491943) 26446 POINT(889.896484 247.361862) 26447 POINT(582.952271 924.001648) 26448 POINT(166.694885 879.596924) 26449 POINT(201.221298 823.691101) 26450 POINT(202.197495 764.993286) 26451 POINT(561.72345 220.894684) 26452 POINT(452.32077 649.80542) 26453 POINT(17.3278065 848.045593) 26454 POINT(427.491516 374.527771) 26455 POINT(982.898804 213.326584) 26456 POINT(190.004044 355.163666) 26457 POINT(343.172852 860.554871) 26458 POINT(217.413147 339.413605) 26459 POINT(65.0406418 631.762512) 26460 POINT(477.562408 439.05069) 26461 POINT(36.6717873 813.358276) 26462 POINT(5.66000652 500.516693) 26463 POINT(581.960815 983.65033) 26464 POINT(682.311096 696.850952) 26465 POINT(742.897705 555.722595) 26466 POINT(499.416931 829.872131) 26467 POINT(445.800995 488.663849) 26468 POINT(787.302185 387.109955) 26469 POINT(559.153381 251.054977) 26470 POINT(533.402466 458.992401) 26471 POINT(678.438599 708.145813) 26472 POINT(625.530823 384.522461) 26473 POINT(132.390411 278.659058) 26474 POINT(129.463547 545.044861) 26475 POINT(169.076035 94.6111221) 26476 POINT(292.788727 293.241699) 26477 POINT(850.993408 389.550049) 26478 POINT(39.2151299 206.373108) 26479 POINT(745.753662 344.397125) 26480 POINT(167.539856 947.785217) 26481 POINT(750.955139 808.499207) 26482 POINT(138.040649 158.252991) 26483 POINT(124.660095 875.025208) 26484 POINT(260.138855 268.853638) 26485 POINT(120.725929 178.577881) 26486 POINT(785.841064 610.437195) 26487 POINT(243.495712 968.563538) 26488 POINT(63.9083023 12.6670732) 26489 POINT(559.528076 729.823792) 26490 POINT(673.239197 449.955933) 26491 POINT(333.778137 123.257919) 26492 POINT(687.035889 554.962585) 26493 POINT(420.685181 820.253052) 26494 POINT(731.517334 725.806335) 26495 POINT(841.861694 937.924561) 26496 POINT(806.947937 484.585968) 26497 POINT(154.523041 45.2933807) 26498 POINT(400.385803 976.57605) 26499 POINT(969.5755 417.073914) 26500 POINT(907.760986 446.649445) 26501 POINT(54.6561165 440.816376) 26502 POINT(919.750549 997.71228) 26503 POINT(172.766785 929.462952) 26504 POINT(336.608856 371.516632) 26505 POINT(306.983124 915.295837) 26506 POINT(339.96875 232.05928) 26507 POINT(429.670685 178.748444) 26508 POINT(946.087524 953.41449) 26509 POINT(42.4713058 938.223816) 26510 POINT(629.65094 85.4537125) 26511 POINT(470.908783 452.141113) 26512 POINT(477.755157 1.26148093) 26513 POINT(302.817932 684.764893) 26514 POINT(600.88855 118.579498) 26515 POINT(449.052124 101.436951) 26516 POINT(385.571167 74.3402405) 26517 POINT(442.334717 290.733154) 26518 POINT(368.857239 246.949142) 26519 POINT(718.067932 680.528076) 26520 POINT(498.351654 636.73175) 26521 POINT(509.909119 607.325012) 26522 POINT(716.064514 792.791748) 26523 POINT(491.600647 414.473053) 26524 POINT(776.76593 816.967529) 26525 POINT(581.65387 861.646179) 26526 POINT(41.082962 475.792297) 26527 POINT(153.922333 707.432312) 26528 POINT(433.092224 743.145081) 26529 POINT(847.864441 926.919128) 26530 POINT(537.428589 204.041199) 26531 POINT(908.518677 210.250854) 26532 POINT(850.897644 338.791077) 26533 POINT(497.161316 485.36145) 26534 POINT(870.31543 832.216187) 26535 POINT(266.661041 563.197754) 26536 POINT(67.0013428 411.045807) 26537 POINT(86.2022476 227.075836) 26538 POINT(897.337463 890.934082) 26539 POINT(601.947205 305.347992) 26540 POINT(59.5263977 840.28125) 26541 POINT(135.107315 369.894409) 26542 POINT(913.698914 659.372253) 26543 POINT(626.675659 599.318176) 26544 POINT(723.540161 689.054504) 26545 POINT(146.747345 207.971573) 26546 POINT(493.434753 852.67627) 26547 POINT(182.052444 358.545776) 26548 POINT(209.728958 88.3376083) 26549 POINT(112.304214 101.021149) 26550 POINT(245.133362 626.330444) 26551 POINT(176.611588 84.0266495) 26552 POINT(251.747986 830.252502) 26553 POINT(836.019348 301.444946) 26554 POINT(703.993652 561.586731) 26555 POINT(855.862366 218.40242) 26556 POINT(214.332321 699.081177) 26557 POINT(88.8042374 283.201996) 26558 POINT(141.619202 789.20697) 26559 POINT(841.060974 107.516907) 26560 POINT(856.950867 706.10791) 26561 POINT(683.395203 784.11853) 26562 POINT(290.772186 433.191071) 26563 POINT(536.135559 723.035767) 26564 POINT(226.729935 558.89093) 26565 POINT(52.9918747 602.440918) 26566 POINT(854.380554 111.825569) 26567 POINT(569.177368 144.45163) 26568 POINT(669.568298 891.849609) 26569 POINT(810.826843 298.785126) 26570 POINT(196.411713 320.302094) 26571 POINT(908.542725 424.771912) 26572 POINT(679.811646 12.5916634) 26573 POINT(69.8720398 346.237488) 26574 POINT(796.796997 137.318939) 26575 POINT(173.494308 871.415039) 26576 POINT(196.548981 177.195236) 26577 POINT(9.89496231 944.214233) 26578 POINT(893.410278 847.493469) 26579 POINT(445.442322 962.315369) 26580 POINT(998.538635 697.698486) 26581 POINT(293.335266 665.786987) 26582 POINT(231.176163 752.076111) 26583 POINT(578.228821 86.9652405) 26584 POINT(49.9679451 506.339111) 26585 POINT(451.981079 343.535278) 26586 POINT(991.701782 652.372559) 26587 POINT(604.532227 53.0980186) 26588 POINT(5.69469833 153.625076) 26589 POINT(293.181213 115.585938) 26590 POINT(786.397522 233.442444) 26591 POINT(340.350861 831.943359) 26592 POINT(597.314758 601.106995) 26593 POINT(707.33783 351.353912) 26594 POINT(61.872345 850.059143) 26595 POINT(700.657593 328.462158) 26596 POINT(290.344879 584.761353) 26597 POINT(997.681702 255.597855) 26598 POINT(388.459045 22.578146) 26599 POINT(556.700317 57.6948547) 26600 POINT(428.005432 771.183411) 26601 POINT(998.839966 309.757019) 26602 POINT(881.045471 287.275391) 26603 POINT(189.056747 484.33432) 26604 POINT(58.5331154 406.327057) 26605 POINT(802.4646 351.136993) 26606 POINT(435.958313 913.881958) 26607 POINT(520.432373 439.859772) 26608 POINT(780.64856 665.318176) 26609 POINT(866.196594 13.3635817) 26610 POINT(558.466248 402.454529) 26611 POINT(348.326843 470.046112) 26612 POINT(235.74971 451.907623) 26613 POINT(646.499817 455.625275) 26614 POINT(302.538513 602.385864) 26615 POINT(740.072998 185.388351) 26616 POINT(325.596863 967.417969) 26617 POINT(666.405884 793.577026) 26618 POINT(247.817322 758.273315) 26619 POINT(601.389221 687.958435) 26620 POINT(840.700134 971.578186) 26621 POINT(105.968285 411.378998) 26622 POINT(498.331116 780.527222) 26623 POINT(184.465302 930.437622) 26624 POINT(947.316223 291.429321) 26625 POINT(586.234009 382.195496) 26626 POINT(403.296387 563.015503) 26627 POINT(962.737305 426.544708) 26628 POINT(899.906372 799.522339) 26629 POINT(806.795898 553.581726) 26630 POINT(72.426712 225.704758) 26631 POINT(866.888489 76.8059158) 26632 POINT(421.102142 778.919922) 26633 POINT(92.4993515 464.536224) 26634 POINT(786.487427 747.171753) 26635 POINT(350.246643 999.590515) 26636 POINT(422.672028 320.051849) 26637 POINT(706.633118 152.599426) 26638 POINT(88.4044724 570.024231) 26639 POINT(131.63028 164.560944) 26640 POINT(128.676147 153.263168) 26641 POINT(995.942566 82.2303543) 26642 POINT(681.056824 411.682831) 26643 POINT(749.830139 314.164429) 26644 POINT(205.942429 110.933319) 26645 POINT(47.0613213 879.793945) 26646 POINT(254.952225 693.640747) 26647 POINT(256.294189 128.518173) 26648 POINT(207.192505 234.333466) 26649 POINT(554.464905 295.844574) 26650 POINT(22.3051147 714.232056) 26651 POINT(471.217834 840.017883) 26652 POINT(488.590973 392.928345) 26653 POINT(26.8080616 831.991638) 26654 POINT(43.6080589 933.102783) 26655 POINT(233.123047 536.225525) 26656 POINT(776.187073 167.617935) 26657 POINT(291.515259 767.485413) 26658 POINT(398.606018 509.993408) 26659 POINT(983.144165 203.068649) 26660 POINT(724.663086 664.453369) 26661 POINT(496.751282 899.762634) 26662 POINT(875.654724 546.105774) 26663 POINT(842.61969 155.110474) 26664 POINT(136.999069 871.650818) 26665 POINT(455.407257 173.542801) 26666 POINT(131.764099 313.24118) 26667 POINT(66.2227783 875.625916) 26668 POINT(995.108826 150.265244) 26669 POINT(227.494644 514.667786) 26670 POINT(210.198059 124.059952) 26671 POINT(382.746399 446.446411) 26672 POINT(89.1974869 457.676788) 26673 POINT(295.347992 607.729065) 26674 POINT(893.322083 396.228119) 26675 POINT(271.79071 686.011597) 26676 POINT(827.535767 943.078979) 26677 POINT(550.294922 60.6286354) 26678 POINT(615.460999 893.879639) 26679 POINT(666.984314 833.793579) 26680 POINT(758.542847 625.449829) 26681 POINT(579.95929 384.569702) 26682 POINT(563.848877 91.7374268) 26683 POINT(925.003113 120.235298) 26684 POINT(443.512695 967.023926) 26685 POINT(422.122406 484.577881) 26686 POINT(155.323792 100.400093) 26687 POINT(154.533585 843.571716) 26688 POINT(581.016235 289.073395) 26689 POINT(34.0729561 903.501648) 26690 POINT(292.240204 615.715698) 26691 POINT(160.459671 638.378662) 26692 POINT(702.956177 141.844742) 26693 POINT(215.636429 891.545166) 26694 POINT(673.142395 910.82782) 26695 POINT(325.936279 465.42038) 26696 POINT(337.446014 936.788086) 26697 POINT(619.581116 483.736298) 26698 POINT(962.062256 976.392578) 26699 POINT(728.64386 478.345276) 26700 POINT(265.131012 376.752686) 26701 POINT(784.855957 159.335556) 26702 POINT(804.87561 532.630981) 26703 POINT(667.402649 330.002594) 26704 POINT(383.264313 478.613953) 26705 POINT(836.12323 330.042328) 26706 POINT(521.970581 786.293091) 26707 POINT(561.456848 669.632874) 26708 POINT(735.795227 272.834656) 26709 POINT(607.3078 857.956482) 26710 POINT(803.553101 486.275909) 26711 POINT(877.122559 551.90918) 26712 POINT(467.924042 585.752502) 26713 POINT(467.390381 39.6057129) 26714 POINT(887.234253 43.5501595) 26715 POINT(335.126312 229.783447) 26716 POINT(820.021667 662.925415) 26717 POINT(53.4328957 8.9494009) 26718 POINT(507.114136 224.216156) 26719 POINT(156.842514 335.319214) 26720 POINT(788.507751 775.655334) 26721 POINT(448.828888 310.122314) 26722 POINT(369.397949 198.921677) 26723 POINT(518.772583 766.167908) 26724 POINT(750.227356 367.849182) 26725 POINT(84.0322495 469.782593) 26726 POINT(31.6501045 537.5401) 26727 POINT(701.990601 690.072876) 26728 POINT(172.059753 746.665894) 26729 POINT(782.523804 759.279785) 26730 POINT(841.112 74.920166) 26731 POINT(646.912354 955.761597) 26732 POINT(508.940796 797.937439) 26733 POINT(926.533447 978.46106) 26734 POINT(22.0804443 441.683594) 26735 POINT(753.629639 855.813477) 26736 POINT(531.172302 716.139587) 26737 POINT(675.044006 15.7846117) 26738 POINT(93.1623917 453.460114) 26739 POINT(804.181702 625.566711) 26740 POINT(615.840393 278.728729) 26741 POINT(530.859558 143.510345) 26742 POINT(542.294189 482.613892) 26743 POINT(825.520691 281.854523) 26744 POINT(987.357971 765.949585) 26745 POINT(324.030029 492.091431) 26746 POINT(90.7314453 398.429718) 26747 POINT(560.559875 406.337891) 26748 POINT(498.593048 229.756821) 26749 POINT(855.680969 914.489502) 26750 POINT(936.787964 654.890625) 26751 POINT(969.576782 260.427765) 26752 POINT(306.738495 449.284302) 26753 POINT(29.3053837 498.989471) 26754 POINT(85.9211349 629.593262) 26755 POINT(845.374451 182.267227) 26756 POINT(717.026245 575.333496) 26757 POINT(285.832123 318.190826) 26758 POINT(245.832092 373.011139) 26759 POINT(192.990112 560.969421) 26760 POINT(542.581909 162.641983) 26761 POINT(554.293701 612.203857) 26762 POINT(793.569519 514.230225) 26763 POINT(498.369629 809.285217) 26764 POINT(560.163086 16.2322807) 26765 POINT(731.673767 495.681274) 26766 POINT(6.19528484 187.445038) 26767 POINT(390.312012 663.099731) 26768 POINT(29.2189102 36.9299583) 26769 POINT(913.521912 451.166626) 26770 POINT(87.3918839 492.917511) 26771 POINT(486.118927 824.633606) 26772 POINT(785.653076 41.1793022) 26773 POINT(211.182526 325.342804) 26774 POINT(519.460205 186.765427) 26775 POINT(403.768219 435.952942) 26776 POINT(121.870331 351.573761) 26777 POINT(11.9909163 280.115295) 26778 POINT(923.47821 5.86079693) 26779 POINT(22.0630188 120.366058) 26780 POINT(521.128479 807.057373) 26781 POINT(965.548401 167.067291) 26782 POINT(919.960205 277.28244) 26783 POINT(75.0900116 361.51355) 26784 POINT(326.915894 725.542847) 26785 POINT(812.19574 91.6734009) 26786 POINT(448.177246 236.181931) 26787 POINT(78.454689 803.434082) 26788 POINT(597.018677 266.730011) 26789 POINT(409.062286 512.762573) 26790 POINT(624.369202 781.585388) 26791 POINT(402.142883 649.615051) 26792 POINT(717.136597 589.199158) 26793 POINT(954.575439 83.0707932) 26794 POINT(497.399658 236.567596) 26795 POINT(28.4914513 715.013062) 26796 POINT(830.353333 173.390869) 26797 POINT(464.073914 578.325867) 26798 POINT(994.975281 47.3999519) 26799 POINT(163.633728 842.257568) 26800 POINT(776.461121 690.874512) 26801 POINT(7.17449856 685.159241) 26802 POINT(944.370422 255.68634) 26803 POINT(406.917633 331.725189) 26804 POINT(29.0850563 840.345825) 26805 POINT(81.8019333 122.240204) 26806 POINT(298.670105 8.16656876) 26807 POINT(625.17804 754.900757) 26808 POINT(68.7482605 642.083496) 26809 POINT(770.296936 554.379456) 26810 POINT(602.862488 330.779907) 26811 POINT(27.3768044 21.4164009) 26812 POINT(736.463928 785.133179) 26813 POINT(999.777527 25.9516468) 26814 POINT(293.684418 886.746155) 26815 POINT(190.007874 852.387817) 26816 POINT(375.135925 755.277527) 26817 POINT(311.93454 187.836502) 26818 POINT(642.942322 462.835022) 26819 POINT(944.796021 876.141724) 26820 POINT(984.994263 636.888245) 26821 POINT(36.7021523 421.181488) 26822 POINT(26.1016865 483.659515) 26823 POINT(107.602715 407.157135) 26824 POINT(194.488449 678.046997) 26825 POINT(659.749817 71.6386566) 26826 POINT(726.259216 940.742065) 26827 POINT(1.08313441 595.017273) 26828 POINT(579.505066 935.859436) 26829 POINT(475.501556 399.33139) 26830 POINT(668.180725 741.267029) 26831 POINT(603.523438 37.3980675) 26832 POINT(751.473267 577.677246) 26833 POINT(325.395813 522.657471) 26834 POINT(317.909393 630.846985) 26835 POINT(942.417969 139.593536) 26836 POINT(678.865662 703.980774) 26837 POINT(335.356384 588.136841) 26838 POINT(480.518768 525.294006) 26839 POINT(43.7312813 472.806305) 26840 POINT(906.798218 879.964783) 26841 POINT(86.9534912 633.863831) 26842 POINT(881.905396 298.301941) 26843 POINT(346.419647 134.407364) 26844 POINT(695.877686 915.408447) 26845 POINT(583.491516 130.725342) 26846 POINT(230.0858 815.108704) 26847 POINT(996.67334 645.59613) 26848 POINT(614.140747 816.200195) 26849 POINT(705.267822 983.397461) 26850 POINT(917.283569 276.622406) 26851 POINT(847.46991 235.368149) 26852 POINT(784.874207 245.926437) 26853 POINT(587.504578 852.235901) 26854 POINT(646.16217 744.159363) 26855 POINT(306.414642 454.424774) 26856 POINT(818.300293 282.223358) 26857 POINT(499.964233 17.525177) 26858 POINT(41.8793793 51.8552513) 26859 POINT(398.474976 938.634827) 26860 POINT(436.558044 730.128296) 26861 POINT(359.015503 649.155396) 26862 POINT(746.2099 181.975632) 26863 POINT(540.09967 798.886108) 26864 POINT(939.104919 763.458313) 26865 POINT(960.926575 267.644653) 26866 POINT(580.802673 577.765442) 26867 POINT(557.346436 552.639893) 26868 POINT(949.609924 205.281052) 26869 POINT(389.418121 386.528778) 26870 POINT(113.709663 799.141602) 26871 POINT(423.023102 732.229065) 26872 POINT(335.603882 329.832794) 26873 POINT(821.0177 811.490051) 26874 POINT(366.64389 388.446686) 26875 POINT(36.4825478 305.916504) 26876 POINT(798.597839 670.777527) 26877 POINT(128.514847 838.199097) 26878 POINT(459.993896 806.645935) 26879 POINT(124.591942 829.957397) 26880 POINT(395.076752 954.489685) 26881 POINT(265.823486 638.695374) 26882 POINT(708.442444 824.763) 26883 POINT(3.53152204 813.385193) 26884 POINT(167.719086 942.083069) 26885 POINT(406.816193 455.233215) 26886 POINT(52.1082726 811.016113) 26887 POINT(508.460114 121.967514) 26888 POINT(141.390945 660.195923) 26889 POINT(206.203125 830.871948) 26890 POINT(736.448547 941.026855) 26891 POINT(871.717468 373.756195) 26892 POINT(169.905838 228.08342) 26893 POINT(352.285919 997.690247) 26894 POINT(838.731873 476.642181) 26895 POINT(710.116455 185.879456) 26896 POINT(507.238556 247.355576) 26897 POINT(789.424622 716.356506) 26898 POINT(579.709839 908.32019) 26899 POINT(568.010864 820.703918) 26900 POINT(520.82605 510.739563) 26901 POINT(602.313232 314.888214) 26902 POINT(356.187775 936.697083) 26903 POINT(655.207642 249.218521) 26904 POINT(664.783691 607.533142) 26905 POINT(574.668762 409.785645) 26906 POINT(83.5136948 980.86554) 26907 POINT(517.424377 900.469482) 26908 POINT(687.310425 855.955933) 26909 POINT(861.69342 809.325562) 26910 POINT(746.575439 144.059097) 26911 POINT(381.877258 398.103027) 26912 POINT(59.2520294 876.393372) 26913 POINT(48.6817703 396.653534) 26914 POINT(23.7172661 341.851532) 26915 POINT(831.715393 398.547577) 26916 POINT(779.736816 34.5684128) 26917 POINT(107.397758 369.413849) 26918 POINT(470.055542 603.643127) 26919 POINT(280.402344 240.094666) 26920 POINT(39.9931335 929.963806) 26921 POINT(407.358154 73.0084991) 26922 POINT(24.9954033 395.121399) 26923 POINT(440.776733 488.114502) 26924 POINT(707.903748 82.3580322) 26925 POINT(990.914612 806.17749) 26926 POINT(543.319214 177.546921) 26927 POINT(613.408203 618.867737) 26928 POINT(233.547501 978.126221) 26929 POINT(779.034912 400.445129) 26930 POINT(640.038635 319.128693) 26931 POINT(154.996231 22.8528042) 26932 POINT(369.923523 677.996887) 26933 POINT(238.942215 79.0773315) 26934 POINT(386.27243 904.41864) 26935 POINT(929.943481 228.3535) 26936 POINT(53.2490425 259.243713) 26937 POINT(315.278351 86.5481262) 26938 POINT(296.731964 949.56781) 26939 POINT(896.867249 746.829224) 26940 POINT(893.666931 467.832367) 26941 POINT(103.215012 846.113586) 26942 POINT(608.967224 24.4514923) 26943 POINT(236.696075 224.015762) 26944 POINT(989.894531 89.8286591) 26945 POINT(824.945251 950.943848) 26946 POINT(70.3460236 307.084686) 26947 POINT(590.130615 644.082092) 26948 POINT(200.290359 716.416199) 26949 POINT(160.2444 123.365288) 26950 POINT(320.810211 651.412354) 26951 POINT(39.6316185 178.914261) 26952 POINT(578.011169 773.159058) 26953 POINT(877.298584 387.116272) 26954 POINT(487.771423 336.474792) 26955 POINT(444.729706 900.574707) 26956 POINT(409.376556 911.684143) 26957 POINT(11.7553329 89.1217041) 26958 POINT(794.080994 783.110291) 26959 POINT(619.335327 982.211731) 26960 POINT(182.253693 120.748375) 26961 POINT(549.960205 80.1431351) 26962 POINT(820.828064 673.773743) 26963 POINT(625.859558 201.17012) 26964 POINT(855.220703 203.692764) 26965 POINT(686.599915 317.76239) 26966 POINT(563.790039 591.711243) 26967 POINT(153.338959 527.781006) 26968 POINT(998.461731 590.576172) 26969 POINT(247.480881 390.508911) 26970 POINT(575.680298 507.647522) 26971 POINT(545.391785 334.284882) 26972 POINT(733.792419 805.820068) 26973 POINT(794.929504 978.541992) 26974 POINT(295.908691 185.304962) 26975 POINT(548.713745 290.568939) 26976 POINT(913.909668 295.984589) 26977 POINT(266.309326 64.1506195) 26978 POINT(135.389313 851.488037) 26979 POINT(263.956055 326.876556) 26980 POINT(649.905518 737.335144) 26981 POINT(735.406006 784.436096) 26982 POINT(6.00207138 282.131073) 26983 POINT(98.2106476 138.372086) 26984 POINT(121.278969 389.148193) 26985 POINT(31.9414921 178.892731) 26986 POINT(762.63385 792.620789) 26987 POINT(741.959473 582.422424) 26988 POINT(584.126465 536.244019) 26989 POINT(506.234192 726.204529) 26990 POINT(460.295502 488.86972) 26991 POINT(323.229462 976.682068) 26992 POINT(630.885498 573.0224) 26993 POINT(184.031281 487.427612) 26994 POINT(419.631012 535.030273) 26995 POINT(927.825378 744.545105) 26996 POINT(48.952816 821.317688) 26997 POINT(920.796265 876.82782) 26998 POINT(841.206848 124.403389) 26999 POINT(616.897461 74.2554779) 27000 POINT(75.6920929 745.677429) 27001 POINT(935.243774 566.997559) 27002 POINT(112.287376 302.009888) 27003 POINT(921.732483 258.94101) 27004 POINT(453.79306 832.208374) 27005 POINT(278.669312 801.473877) 27006 POINT(9.37514591 780.456482) 27007 POINT(550.539429 167.065521) 27008 POINT(453.638184 30.9234447) 27009 POINT(379.632568 435.934784) 27010 POINT(715.613037 415.142548) 27011 POINT(703.135803 856.268799) 27012 POINT(948.278748 326.560364) 27013 POINT(792.807434 358.150177) 27014 POINT(944.217163 60.5182495) 27015 POINT(956.819824 688.290833) 27016 POINT(701.817566 699.133972) 27017 POINT(676.322205 547.215454) 27018 POINT(487.428619 116.017685) 27019 POINT(160.350769 428.653381) 27020 POINT(263.440643 463.021973) 27021 POINT(323.669922 924.198975) 27022 POINT(195.043015 188.455887) 27023 POINT(152.838776 721.998718) 27024 POINT(247.035507 732.172791) 27025 POINT(284.277039 319.184265) 27026 POINT(727.397156 947.091797) 27027 POINT(410.48114 22.4615936) 27028 POINT(320.279602 549.064453) 27029 POINT(221.076279 333.790405) 27030 POINT(424.761963 428.223694) 27031 POINT(916.462769 528.177612) 27032 POINT(927.276489 36.3312416) 27033 POINT(673.937744 613.605652) 27034 POINT(288.411865 758.0979) 27035 POINT(647.9729 920.00647) 27036 POINT(625.26416 782.514282) 27037 POINT(324.569489 61.5705032) 27038 POINT(378.210144 506.074738) 27039 POINT(79.1716461 736.777039) 27040 POINT(928.614014 557.18219) 27041 POINT(191.506927 821.197876) 27042 POINT(897.371338 654.41095) 27043 POINT(10.0743761 32.8359604) 27044 POINT(722.285156 365.70517) 27045 POINT(423.068909 437.620514) 27046 POINT(857.130798 476.681152) 27047 POINT(848.702576 558.40918) 27048 POINT(632.093262 800.256714) 27049 POINT(1.6645087 464.806152) 27050 POINT(492.372833 453.77475) 27051 POINT(197.48494 79.2620163) 27052 POINT(220.59935 621.155701) 27053 POINT(724.594116 928.88324) 27054 POINT(533.838684 724.56958) 27055 POINT(224.77327 609.36969) 27056 POINT(515.118347 511.449524) 27057 POINT(284.495026 480.371521) 27058 POINT(33.3556709 467.796967) 27059 POINT(838.472351 268.78714) 27060 POINT(168.293259 987.679749) 27061 POINT(136.840439 772.213074) 27062 POINT(685.600037 42.277317) 27063 POINT(121.164299 198.633652) 27064 POINT(501.875427 521.059937) 27065 POINT(112.407326 585.851074) 27066 POINT(493.225189 674.618774) 27067 POINT(834.74115 466.08374) 27068 POINT(790.797791 25.8341789) 27069 POINT(409.388245 494.205566) 27070 POINT(181.75856 976.636597) 27071 POINT(57.4432449 174.482895) 27072 POINT(407.32196 5.374259) 27073 POINT(682.828125 398.246124) 27074 POINT(986.489197 599.16449) 27075 POINT(177.332138 57.1832619) 27076 POINT(863.985901 811.612427) 27077 POINT(438.326355 102.963562) 27078 POINT(305.640076 884.592041) 27079 POINT(533.610657 678.420654) 27080 POINT(369.275085 669.695923) 27081 POINT(832.45105 208.894745) 27082 POINT(242.437927 467.378845) 27083 POINT(970.835571 990.530823) 27084 POINT(241.383575 347.288025) 27085 POINT(284.071594 986.954834) 27086 POINT(243.265335 389.958008) 27087 POINT(450.950073 404.030334) 27088 POINT(413.128632 606.729675) 27089 POINT(8.82174492 577.184448) 27090 POINT(879.898254 450.856293) 27091 POINT(654.198059 715.562012) 27092 POINT(305.026154 868.315491) 27093 POINT(703.1651 806.119141) 27094 POINT(320.903931 182.522659) 27095 POINT(192.362427 208.434326) 27096 POINT(543.73114 834.225708) 27097 POINT(125.040855 152.841782) 27098 POINT(190.594376 68.2706146) 27099 POINT(656.40509 991.457642) 27100 POINT(359.490845 175.195099) 27101 POINT(244.827179 910.379089) 27102 POINT(323.499359 350.903961) 27103 POINT(225.46698 174.009094) 27104 POINT(8.95570564 765.790771) 27105 POINT(973.365967 386.954529) 27106 POINT(388.145599 60.0094719) 27107 POINT(975.320557 788.733337) 27108 POINT(238.636551 369.206329) 27109 POINT(213.051636 70.7131119) 27110 POINT(475.996979 690.564514) 27111 POINT(341.749512 468.012878) 27112 POINT(629.492981 118.77198) 27113 POINT(123.493637 41.8834152) 27114 POINT(529.732239 302.42099) 27115 POINT(417.963654 756.319458) 27116 POINT(644.582886 620.918213) 27117 POINT(45.0207939 557.944824) 27118 POINT(919.606201 678.391602) 27119 POINT(895.038879 597.782288) 27120 POINT(339.398438 13.1189919) 27121 POINT(481.302826 660.218994) 27122 POINT(567.461609 578.07843) 27123 POINT(490.50589 976.788391) 27124 POINT(988.45874 850.38092) 27125 POINT(906.622681 854.406372) 27126 POINT(765.027893 55.2478065) 27127 POINT(652.593872 909.153931) 27128 POINT(331.925507 265.132294) 27129 POINT(933.841064 402.940186) 27130 POINT(236.464859 268.469055) 27131 POINT(176.2677 982.384705) 27132 POINT(752.452454 447.906555) 27133 POINT(555.851562 533.63147) 27134 POINT(54.678318 207.899826) 27135 POINT(122.080734 425.767639) 27136 POINT(455.175415 130.002518) 27137 POINT(756.334534 916.930908) 27138 POINT(736.75592 285.513672) 27139 POINT(89.9974213 254.51503) 27140 POINT(642.694397 414.343719) 27141 POINT(774.872864 93.2344055) 27142 POINT(215.941055 791.730347) 27143 POINT(467.723389 376.906647) 27144 POINT(752.095276 997.047485) 27145 POINT(707.003418 142.010712) 27146 POINT(415.883942 808.322998) 27147 POINT(746.712952 679.353455) 27148 POINT(52.5032082 549.753784) 27149 POINT(921.533936 776.131531) 27150 POINT(837.477844 285.640381) 27151 POINT(378.907074 11.532548) 27152 POINT(289.355499 791.553467) 27153 POINT(985.46344 217.635818) 27154 POINT(909.410645 641.597046) 27155 POINT(933.387756 682.219238) 27156 POINT(605.527283 569.393555) 27157 POINT(401.102173 665.261047) 27158 POINT(850.630005 420.547211) 27159 POINT(504.516968 546.169495) 27160 POINT(669.637939 87.1267242) 27161 POINT(480.495209 899.426941) 27162 POINT(446.243256 262.073639) 27163 POINT(421.762299 13.3820581) 27164 POINT(798.312317 275.911957) 27165 POINT(109.01075 586.957642) 27166 POINT(447.940948 672.885315) 27167 POINT(316.292786 344.295319) 27168 POINT(871.865723 182.46109) 27169 POINT(982.962708 145.679947) 27170 POINT(275.855011 869.433105) 27171 POINT(510.562408 407.952759) 27172 POINT(11.826581 166.665848) 27173 POINT(145.394775 608.138184) 27174 POINT(320.832214 264.515808) 27175 POINT(514.480957 674.894897) 27176 POINT(313.906769 646.429016) 27177 POINT(289.661438 784.015503) 27178 POINT(424.423859 8.06387424) 27179 POINT(135.405197 592.513855) 27180 POINT(411.474701 105.062012) 27181 POINT(352.19754 162.455002) 27182 POINT(48.4629669 360.450623) 27183 POINT(339.065186 647.832581) 27184 POINT(282.280823 85.4009476) 27185 POINT(373.878632 418.324646) 27186 POINT(236.920959 576.097046) 27187 POINT(534.674744 361.147491) 27188 POINT(505.131653 934.831116) 27189 POINT(473.62912 90.5719528) 27190 POINT(719.805176 405.798126) 27191 POINT(399.856934 173.699631) 27192 POINT(123.402924 136.700516) 27193 POINT(48.4455605 986.165283) 27194 POINT(412.180267 288.114532) 27195 POINT(709.647949 693.516602) 27196 POINT(378.728058 166.140274) 27197 POINT(990.758301 129.721085) 27198 POINT(120.965271 793.33606) 27199 POINT(888.727234 45.7930107) 27200 POINT(840.893494 942.10083) 27201 POINT(797.064148 626.767273) 27202 POINT(487.980042 907.938416) 27203 POINT(167.1521 137.655365) 27204 POINT(878.917786 112.449814) 27205 POINT(931.019043 637.694824) 27206 POINT(69.7835999 303.118317) 27207 POINT(287.260437 491.881775) 27208 POINT(993.486328 605.268555) 27209 POINT(699.68866 769.80127) 27210 POINT(983.168213 817.906494) 27211 POINT(683.035583 930.125671) 27212 POINT(262.359497 107.021416) 27213 POINT(203.412415 586.430725) 27214 POINT(729.743042 5.52138329) 27215 POINT(933.112122 793.417358) 27216 POINT(38.066452 387.0625) 27217 POINT(627.74353 605.068115) 27218 POINT(653.861816 741.041443) 27219 POINT(74.7328949 576.195129) 27220 POINT(81.1432648 677.983093) 27221 POINT(260.186279 110.344482) 27222 POINT(985.217957 569.137268) 27223 POINT(58.3512955 819.84375) 27224 POINT(512.368225 642.591553) 27225 POINT(134.959534 343.264801) 27226 POINT(570.753357 682.518982) 27227 POINT(221.204773 862.693909) 27228 POINT(323.893219 810.857483) 27229 POINT(135.772568 144.567993) 27230 POINT(210.094574 164.918686) 27231 POINT(163.069138 575.664551) 27232 POINT(701.865417 753.940063) 27233 POINT(719.608154 927.983582) 27234 POINT(974.553162 406.841553) 27235 POINT(818.535522 526.2052) 27236 POINT(82.07798 677.460205) 27237 POINT(163.76445 938.248291) 27238 POINT(11.7943459 407.983002) 27239 POINT(837.534912 107.921753) 27240 POINT(685.384827 562.465271) 27241 POINT(383.916504 109.099831) 27242 POINT(116.601425 17.1241379) 27243 POINT(609.468018 49.2473221) 27244 POINT(261.059601 460.073364) 27245 POINT(922.714355 478.063965) 27246 POINT(782.731445 28.4810638) 27247 POINT(396.180573 371.744324) 27248 POINT(903.97345 54.5741882) 27249 POINT(666.443787 37.7058144) 27250 POINT(541.679016 452.897858) 27251 POINT(75.1580353 307.102264) 27252 POINT(105.412773 149.802002) 27253 POINT(211.533752 107.1147) 27254 POINT(141.235336 212.937378) 27255 POINT(936.695068 901.621155) 27256 POINT(647.552307 304.885468) 27257 POINT(573.200073 792.745667) 27258 POINT(520.049622 972.837891) 27259 POINT(827.429199 37.947464) 27260 POINT(558.045227 448.01825) 27261 POINT(105.276711 874.341125) 27262 POINT(593.970337 807.467468) 27263 POINT(687.510071 386.055847) 27264 POINT(103.886337 930.682922) 27265 POINT(83.2892838 499.508484) 27266 POINT(585.764343 938.822327) 27267 POINT(189.809311 358.947174) 27268 POINT(722.650452 149.800583) 27269 POINT(392.087433 399.63028) 27270 POINT(1.88242996 824.279297) 27271 POINT(756.957703 493.258667) 27272 POINT(864.402893 561.566711) 27273 POINT(154.857147 950.135681) 27274 POINT(388.259094 467.727081) 27275 POINT(705.630249 800.959656) 27276 POINT(949.024597 638.273621) 27277 POINT(942.094055 289.763611) 27278 POINT(681.705872 942.864014) 27279 POINT(647.382202 545.532715) 27280 POINT(31.3895931 78.2085648) 27281 POINT(407.125854 886.298584) 27282 POINT(314.277405 767.364868) 27283 POINT(561.471436 584.515991) 27284 POINT(310.777924 368.755341) 27285 POINT(809.029236 390.363403) 27286 POINT(225.059464 947.283691) 27287 POINT(147.486145 890.01001) 27288 POINT(321.102448 624.11731) 27289 POINT(904.296082 354.202667) 27290 POINT(587.148743 222.972565) 27291 POINT(164.229233 109.727684) 27292 POINT(494.97287 471.617371) 27293 POINT(115.35923 408.994049) 27294 POINT(367.164856 290.960968) 27295 POINT(466.193176 63.3940659) 27296 POINT(807.316467 644.320801) 27297 POINT(717.098267 792.07489) 27298 POINT(800.454224 550.654846) 27299 POINT(360.093109 882.778015) 27300 POINT(373.219452 852.765198) 27301 POINT(21.7022247 694.574158) 27302 POINT(487.217468 230.377411) 27303 POINT(721.307556 98.3647308) 27304 POINT(199.848892 454.870728) 27305 POINT(187.773666 760.289978) 27306 POINT(93.1105728 584.189087) 27307 POINT(33.7094612 351.654816) 27308 POINT(773.759644 420.643982) 27309 POINT(331.317871 208.256363) 27310 POINT(572.441528 219.08696) 27311 POINT(146.253006 569.302307) 27312 POINT(802.587158 97.07621) 27313 POINT(74.2671204 474.292358) 27314 POINT(422.904144 511.598785) 27315 POINT(75.814888 373.779724) 27316 POINT(224.071396 318.676941) 27317 POINT(530.448608 970.930237) 27318 POINT(727.860596 503.450623) 27319 POINT(628.170593 224.986404) 27320 POINT(545.552368 480.373016) 27321 POINT(999.412537 550.46936) 27322 POINT(645.505615 627.90094) 27323 POINT(957.619995 288.190887) 27324 POINT(683.524414 292.041412) 27325 POINT(315.294189 522.505127) 27326 POINT(563.814331 111.498383) 27327 POINT(440.658661 305.926514) 27328 POINT(735.529602 67.7338715) 27329 POINT(880.892029 625.132874) 27330 POINT(355.997009 920.434265) 27331 POINT(400.224854 814.935059) 27332 POINT(535.617981 567.690247) 27333 POINT(906.401184 178.129257) 27334 POINT(43.2535362 676.325073) 27335 POINT(284.434235 893.979736) 27336 POINT(419.796387 607.526794) 27337 POINT(267.750519 756.764587) 27338 POINT(699.941956 53.1740608) 27339 POINT(877.347412 254.325592) 27340 POINT(359.332977 876.523743) 27341 POINT(701.247742 116.500793) 27342 POINT(620.84375 785.425781) 27343 POINT(999.19873 891.912659) 27344 POINT(507.480896 665.727295) 27345 POINT(759.246521 771.682251) 27346 POINT(611.031128 566.440186) 27347 POINT(939.646301 708.722046) 27348 POINT(249.12854 496.6185) 27349 POINT(65.8058395 585.427551) 27350 POINT(755.909851 797.378174) 27351 POINT(559.988037 480.563446) 27352 POINT(43.0801544 962.391052) 27353 POINT(931.820862 963.281921) 27354 POINT(182.333191 358.404419) 27355 POINT(598.918823 299.488403) 27356 POINT(703.115234 446.420288) 27357 POINT(315.861572 759.791565) 27358 POINT(131.251495 317.276276) 27359 POINT(221.289062 151.259781) 27360 POINT(276.670746 766.292664) 27361 POINT(449.963959 805.013611) 27362 POINT(128.18306 764.803223) 27363 POINT(260.456085 601.785461) 27364 POINT(348.935699 206.805908) 27365 POINT(188.875183 37.0747185) 27366 POINT(159.861969 772.323792) 27367 POINT(922.203491 661.149902) 27368 POINT(425.342346 851.637695) 27369 POINT(286.763763 587.246094) 27370 POINT(543.738831 803.262512) 27371 POINT(941.835876 769.854248) 27372 POINT(26.8840714 600.921204) 27373 POINT(357.161682 805.601318) 27374 POINT(611.580811 778.992004) 27375 POINT(315.940002 509.102295) 27376 POINT(270.38559 770.753235) 27377 POINT(229.914658 138.176727) 27378 POINT(419.238007 398.640442) 27379 POINT(766.434692 75.445961) 27380 POINT(999.795227 710.701233) 27381 POINT(783.173706 970.654785) 27382 POINT(441.712006 243.148712) 27383 POINT(36.9167366 779.830383) 27384 POINT(984.76593 446.66394) 27385 POINT(98.9693069 38.9433365) 27386 POINT(615.985291 655.794312) 27387 POINT(969.940552 832.055725) 27388 POINT(309.235718 958.97876) 27389 POINT(967.667542 773.623657) 27390 POINT(153.638351 384.565125) 27391 POINT(68.7544937 453.898865) 27392 POINT(835.414124 339.459808) 27393 POINT(349.61438 993.093811) 27394 POINT(261.10199 496.178406) 27395 POINT(908.147217 927.615234) 27396 POINT(547.526733 736.087402) 27397 POINT(391.533844 689.333618) 27398 POINT(277.464172 127.205811) 27399 POINT(326.442505 531.267212) 27400 POINT(654.864624 690.361145) 27401 POINT(990.751404 260.569946) 27402 POINT(768.06897 224.678238) 27403 POINT(804.311707 438.301605) 27404 POINT(565.131226 199.865494) 27405 POINT(702.074036 436.722412) 27406 POINT(796.716797 546.709106) 27407 POINT(815.957764 566.027344) 27408 POINT(226.774139 597.388) 27409 POINT(990.164124 316.361572) 27410 POINT(940.09491 843.088257) 27411 POINT(224.355774 46.1177711) 27412 POINT(882.935791 127.967438) 27413 POINT(444.503784 388.012329) 27414 POINT(605.138306 316.463318) 27415 POINT(984.619202 459.991547) 27416 POINT(979.849915 926.539795) 27417 POINT(594.553284 143.987564) 27418 POINT(863.3396 176.638504) 27419 POINT(518.193054 232.901428) 27420 POINT(828.959045 951.388062) 27421 POINT(389.464722 911.538452) 27422 POINT(325.599152 343.685791) 27423 POINT(125.458054 612.786072) 27424 POINT(634.720642 312.391205) 27425 POINT(239.720825 823.959473) 27426 POINT(547.025146 129.977173) 27427 POINT(715.463013 473.418335) 27428 POINT(669.017395 348.106842) 27429 POINT(757.325928 433.387146) 27430 POINT(73.1644745 36.9102974) 27431 POINT(948.885376 776.108154) 27432 POINT(698.28009 752.011047) 27433 POINT(976.683777 327.384491) 27434 POINT(517.465515 639.014771) 27435 POINT(613.952454 900.19635) 27436 POINT(250.879364 25.7578602) 27437 POINT(890.055908 253.002472) 27438 POINT(994.344299 896.289429) 27439 POINT(684.938599 209.801163) 27440 POINT(950.035156 546.110046) 27441 POINT(589.499878 674.864014) 27442 POINT(823.045288 135.036224) 27443 POINT(48.9870491 162.756271) 27444 POINT(931.440491 572.231995) 27445 POINT(171.447006 397.915558) 27446 POINT(664.559265 368.118469) 27447 POINT(329.38739 987.405518) 27448 POINT(314.989929 591.323975) 27449 POINT(830.58551 870.843384) 27450 POINT(157.180099 587.487854) 27451 POINT(582.072388 453.896332) 27452 POINT(806.448975 503.117401) 27453 POINT(246.472626 52.7542343) 27454 POINT(675.85321 154.986237) 27455 POINT(896.981079 548.840332) 27456 POINT(767.59613 277.538086) 27457 POINT(449.308258 273.569916) 27458 POINT(56.2888336 441.844116) 27459 POINT(97.0675964 925.685669) 27460 POINT(512.314026 884.884827) 27461 POINT(840.559448 347.688477) 27462 POINT(996.882874 422.960114) 27463 POINT(795.118225 847.873047) 27464 POINT(161.302109 494.159515) 27465 POINT(939.633667 310.815033) 27466 POINT(379.809296 18.961916) 27467 POINT(42.1715355 967.823669) 27468 POINT(119.528069 162.723358) 27469 POINT(729.555298 541.468018) 27470 POINT(937.217407 597.210693) 27471 POINT(681.219971 692.032898) 27472 POINT(128.230957 499.243622) 27473 POINT(182.609482 701.516724) 27474 POINT(529.288757 192.327499) 27475 POINT(306.003235 71.0217743) 27476 POINT(887.233826 71.9339218) 27477 POINT(661.173828 884.208923) 27478 POINT(797.977661 687.482544) 27479 POINT(417.08786 122.624084) 27480 POINT(443.51944 655.380493) 27481 POINT(409.466553 593.498596) 27482 POINT(113.58033 409.602814) 27483 POINT(966.058044 248.062546) 27484 POINT(898.467773 761.785583) 27485 POINT(278.697937 695.084351) 27486 POINT(540.847595 334.817902) 27487 POINT(983.528442 932.495911) 27488 POINT(498.848816 286.248108) 27489 POINT(161.119431 277.422211) 27490 POINT(17.1766777 374.877502) 27491 POINT(397.820099 235.194107) 27492 POINT(845.611023 510.74176) 27493 POINT(347.722412 440.076904) 27494 POINT(57.4879265 20.9383888) 27495 POINT(468.524506 669.225098) 27496 POINT(779.698669 157.738007) 27497 POINT(169.846863 387.12793) 27498 POINT(78.7119904 958.032532) 27499 POINT(482.813446 946.514832) 27500 POINT(485.579163 661.962402) 27501 POINT(836.717529 844.947815) 27502 POINT(871.384399 131.692276) 27503 POINT(492.235443 721.366821) 27504 POINT(490.855194 337.560333) 27505 POINT(338.933563 746.521912) 27506 POINT(836.663818 147.622238) 27507 POINT(903.871643 904.005127) 27508 POINT(534.281799 657.988037) 27509 POINT(652.19458 328.5802) 27510 POINT(354.161011 815.972473) 27511 POINT(682.1073 335.431427) 27512 POINT(724.705261 437.233795) 27513 POINT(246.054855 273.164124) 27514 POINT(49.2858391 113.680176) 27515 POINT(765.908386 615.862488) 27516 POINT(19.8837395 303.512451) 27517 POINT(79.2547073 291.851379) 27518 POINT(788.389954 831.51239) 27519 POINT(61.3739281 661.241882) 27520 POINT(816.847229 490.367249) 27521 POINT(846.185303 598.714783) 27522 POINT(945.802795 696.856018) 27523 POINT(30.4697666 125.795776) 27524 POINT(364.398254 635.149658) 27525 POINT(228.302612 47.1919823) 27526 POINT(858.929443 818.964905) 27527 POINT(464.230408 173.329147) 27528 POINT(783.549866 971.13916) 27529 POINT(299.812225 316.394562) 27530 POINT(415.898834 890.288879) 27531 POINT(502.349243 205.93573) 27532 POINT(713.144592 27.1023064) 27533 POINT(38.7055511 423.986755) 27534 POINT(404.820648 695.672119) 27535 POINT(340.960358 66.0213699) 27536 POINT(985.59082 706.880859) 27537 POINT(102.235893 15.6153688) 27538 POINT(594.530823 130.624222) 27539 POINT(356.547272 916.016846) 27540 POINT(281.600281 411.636505) 27541 POINT(640.179688 334.974213) 27542 POINT(513.774658 110.530235) 27543 POINT(566.297852 469.883087) 27544 POINT(413.005463 688.670044) 27545 POINT(939.737366 513.937866) 27546 POINT(549.097229 464.579346) 27547 POINT(443.856049 501.487946) 27548 POINT(739.179443 743.270691) 27549 POINT(122.684807 838.801086) 27550 POINT(291.281464 151.358002) 27551 POINT(114.305527 587.160767) 27552 POINT(235.278198 33.8412476) 27553 POINT(948.395203 946.511841) 27554 POINT(25.9943695 907.465149) 27555 POINT(863.351318 853.206909) 27556 POINT(899.469238 85.5836945) 27557 POINT(15.6082897 483.887543) 27558 POINT(886.371521 746.172974) 27559 POINT(713.050171 93.8911591) 27560 POINT(511.506134 604.318237) 27561 POINT(301.332184 623.155457) 27562 POINT(463.591431 560.069275) 27563 POINT(540.071838 1.37632763) 27564 POINT(236.454361 949.548828) 27565 POINT(27.020216 968.76001) 27566 POINT(606.061279 449.78302) 27567 POINT(842.356689 406.328156) 27568 POINT(205.06778 34.6762962) 27569 POINT(300.17392 813.230591) 27570 POINT(728.654663 300.307404) 27571 POINT(796.168335 366.376129) 27572 POINT(996.262329 762.300232) 27573 POINT(843.780273 404.007233) 27574 POINT(200.514481 557.099365) 27575 POINT(687.922119 659.345032) 27576 POINT(897.327026 173.839005) 27577 POINT(396.499634 868.469055) 27578 POINT(283.252747 116.049126) 27579 POINT(153.803009 739.149231) 27580 POINT(923.959229 595.237122) 27581 POINT(43.2781754 711.016602) 27582 POINT(650.949524 734.576355) 27583 POINT(915.070679 494.467987) 27584 POINT(844.904358 194.317108) 27585 POINT(819.067139 343.907166) 27586 POINT(739.174683 395.523956) 27587 POINT(858.080261 213.796875) 27588 POINT(874.92865 530.373474) 27589 POINT(417.588318 942.645691) 27590 POINT(42.3249741 611.185547) 27591 POINT(375.431366 5.19699669) 27592 POINT(275.045593 872.894775) 27593 POINT(732.593018 27.0844822) 27594 POINT(6.89054585 741.714478) 27595 POINT(858.291138 545.039551) 27596 POINT(830.364075 293.83786) 27597 POINT(260.820618 560.987061) 27598 POINT(352.834106 20.3294659) 27599 POINT(109.81868 437.271027) 27600 POINT(63.6209641 796.669983) 27601 POINT(103.868958 35.6628456) 27602 POINT(496.087494 127.142441) 27603 POINT(235.751572 653.199951) 27604 POINT(86.40625 35.4305534) 27605 POINT(420.448151 957.380798) 27606 POINT(242.239731 834.101624) 27607 POINT(260.598877 491.532867) 27608 POINT(190.283859 498.355286) 27609 POINT(700.996155 393.622009) 27610 POINT(74.8113785 455.454132) 27611 POINT(316.516022 249.364212) 27612 POINT(636.457031 383.14444) 27613 POINT(163.393127 749.832336) 27614 POINT(171.080566 581.298767) 27615 POINT(756.821716 327.050629) 27616 POINT(615.322144 774.744751) 27617 POINT(901.518372 746.188354) 27618 POINT(744.245667 846.211426) 27619 POINT(957.24823 803.377502) 27620 POINT(16.2004528 151.555054) 27621 POINT(157.652542 642.990967) 27622 POINT(432.78064 290.592224) 27623 POINT(885.400146 612.151611) 27624 POINT(472.732208 692.253967) 27625 POINT(235.235092 123.652588) 27626 POINT(236.158936 209.294662) 27627 POINT(742.529663 327.330353) 27628 POINT(130.863022 332.986755) 27629 POINT(120.244385 885.845947) 27630 POINT(930.692444 250.263916) 27631 POINT(111.618027 221.025146) 27632 POINT(724.047913 33.4389) 27633 POINT(837.476501 914.233032) 27634 POINT(990.05188 925.323303) 27635 POINT(81.8873291 697.192078) 27636 POINT(834.24353 250.360931) 27637 POINT(932.256226 612.295898) 27638 POINT(782.105774 625.913452) 27639 POINT(762.248108 423.550629) 27640 POINT(667.454407 188.400177) 27641 POINT(238.620773 456.140472) 27642 POINT(217.035431 698.501404) 27643 POINT(444.821991 485.247253) 27644 POINT(279.044342 0.632695913) 27645 POINT(271.776703 599.74823) 27646 POINT(81.2529526 127.543007) 27647 POINT(434.561035 666.006653) 27648 POINT(946.719604 744.978516) 27649 POINT(165.635269 909.000854) 27650 POINT(7.470994 898.293152) 27651 POINT(222.118271 525.991821) 27652 POINT(308.035461 567.722046) 27653 POINT(65.4920807 230.904297) 27654 POINT(403.341766 167.425629) 27655 POINT(244.506729 290.317993) 27656 POINT(954.47345 281.648407) 27657 POINT(281.423248 314.792175) 27658 POINT(689.404175 956.33551) 27659 POINT(951.717529 688.144836) 27660 POINT(405.581848 233.846115) 27661 POINT(309.728027 693.886963) 27662 POINT(881.647888 200.163544) 27663 POINT(277.349182 789.496033) 27664 POINT(774.366577 117.015167) 27665 POINT(37.7566643 8.45206833) 27666 POINT(894.823242 634.993896) 27667 POINT(897.43512 575.43219) 27668 POINT(979.066284 168.158264) 27669 POINT(61.718853 705.867004) 27670 POINT(939.697083 186.342728) 27671 POINT(854.036438 446.930084) 27672 POINT(56.6395302 19.8229942) 27673 POINT(67.5768738 788.311523) 27674 POINT(40.7734299 233.967117) 27675 POINT(218.803192 128.798401) 27676 POINT(989.737976 321.600891) 27677 POINT(651.884949 295.343781) 27678 POINT(10.5696745 371.18985) 27679 POINT(476.586487 457.184021) 27680 POINT(471.634216 133.378876) 27681 POINT(792.444092 506.511871) 27682 POINT(182.358658 51.3478661) 27683 POINT(220.320129 352.7034) 27684 POINT(202.519211 6.87755632) 27685 POINT(417.899689 428.237213) 27686 POINT(825.357056 819.637878) 27687 POINT(565.770508 875.95636) 27688 POINT(635.778137 618.299622) 27689 POINT(170.917023 989.561035) 27690 POINT(444.661469 665.545105) 27691 POINT(418.387878 638.159302) 27692 POINT(574.300415 792.451233) 27693 POINT(511.327179 512.947144) 27694 POINT(102.803017 399.206726) 27695 POINT(354.374725 996.858765) 27696 POINT(654.573303 767.487793) 27697 POINT(763.644287 449.184662) 27698 POINT(490.612854 854.474426) 27699 POINT(414.218781 405.164856) 27700 POINT(550.255432 589.474609) 27701 POINT(577.612244 69.5361481) 27702 POINT(722.15979 152.105072) 27703 POINT(549.322449 2.66969109) 27704 POINT(677.120483 597.242798) 27705 POINT(540.947815 793.629578) 27706 POINT(731.842957 218.422836) 27707 POINT(810.992615 37.1924362) 27708 POINT(287.707764 60.558506) 27709 POINT(360.203217 98.1918411) 27710 POINT(711.29126 247.959442) 27711 POINT(625.936707 988.719543) 27712 POINT(106.710617 168.413712) 27713 POINT(108.680931 499.574738) 27714 POINT(239.5439 822.993958) 27715 POINT(663.545654 330.385162) 27716 POINT(77.0798569 729.285461) 27717 POINT(529.589966 932.125732) 27718 POINT(632.053467 958.577271) 27719 POINT(867.625427 706.063232) 27720 POINT(362.014282 141.499619) 27721 POINT(278.141113 954.806335) 27722 POINT(562.376404 428.540283) 27723 POINT(198.872406 930.119324) 27724 POINT(479.455627 419.373749) 27725 POINT(288.037048 610.064026) 27726 POINT(194.984482 346.149689) 27727 POINT(514.27063 622.096741) 27728 POINT(333.400574 319.604065) 27729 POINT(155.819351 431.813538) 27730 POINT(908.450623 122.488144) 27731 POINT(795.721924 477.588776) 27732 POINT(950.28833 902.398621) 27733 POINT(550.794495 53.4869156) 27734 POINT(185.334747 606.300598) 27735 POINT(632.601929 146.273636) 27736 POINT(928.916504 183.149872) 27737 POINT(178.76709 102.460724) 27738 POINT(398.41333 420.962341) 27739 POINT(461.569275 439.067902) 27740 POINT(968.784546 882.977112) 27741 POINT(754.566528 583.773071) 27742 POINT(32.4685593 257.388123) 27743 POINT(571.836304 118.578079) 27744 POINT(354.458466 670.260132) 27745 POINT(771.362305 753.892639) 27746 POINT(346.672028 156.116211) 27747 POINT(295.243958 840.508667) 27748 POINT(942.495911 700.322205) 27749 POINT(594.019714 564.404602) 27750 POINT(604.668823 617.464844) 27751 POINT(117.865463 908.410278) 27752 POINT(22.666811 706.712341) 27753 POINT(549.255554 115.828903) 27754 POINT(777.787903 715.573364) 27755 POINT(673.496338 380.128601) 27756 POINT(406.649109 375.073059) 27757 POINT(237.112534 203.389664) 27758 POINT(61.375576 260.302948) 27759 POINT(709.271606 721.541077) 27760 POINT(235.074692 239.371292) 27761 POINT(246.277405 959.403503) 27762 POINT(635.067993 450.387848) 27763 POINT(149.783127 641.645569) 27764 POINT(287.746552 880.307373) 27765 POINT(820.026306 801.058594) 27766 POINT(844.890137 391.890381) 27767 POINT(328.453156 962.791016) 27768 POINT(32.0426788 777.007324) 27769 POINT(790.088867 377.706421) 27770 POINT(388.388641 317.928101) 27771 POINT(303.553497 380.816193) 27772 POINT(250.96788 765.641968) 27773 POINT(272.479828 978.389709) 27774 POINT(143.575516 338.80481) 27775 POINT(931.141357 752.091675) 27776 POINT(855.010254 692.405945) 27777 POINT(202.355331 908.182922) 27778 POINT(998.281189 76.0920639) 27779 POINT(28.316925 107.933075) 27780 POINT(400.904022 513.328186) 27781 POINT(774.208374 671.021179) 27782 POINT(408.5849 589.870972) 27783 POINT(527.589661 941.583679) 27784 POINT(915.595459 789.675415) 27785 POINT(249.226044 407.047028) 27786 POINT(443.310822 595.258606) 27787 POINT(996.773987 438.938416) 27788 POINT(855.155212 255.248032) 27789 POINT(393.388733 924.105042) 27790 POINT(756.149109 82.5079575) 27791 POINT(278.7164 231.409363) 27792 POINT(416.073761 890.658142) 27793 POINT(17.8997135 835.865356) 27794 POINT(267.780487 104.382431) 27795 POINT(291.291321 937.809143) 27796 POINT(960.323853 729.717529) 27797 POINT(707.790833 773.160278) 27798 POINT(337.454437 675.173096) 27799 POINT(220.482376 231.854706) 27800 POINT(15.7678528 444.3526) 27801 POINT(845.058044 370.467834) 27802 POINT(856.790405 437.637817) 27803 POINT(438.00235 422.870575) 27804 POINT(169.933777 607.003357) 27805 POINT(459.438354 746.079834) 27806 POINT(8.14203072 997.307617) 27807 POINT(479.784668 569.498352) 27808 POINT(187.879181 413.25116) 27809 POINT(272.947968 492.341003) 27810 POINT(395.685181 598.018494) 27811 POINT(332.814362 959.694153) 27812 POINT(853.806885 562.459351) 27813 POINT(543.558167 771.449646) 27814 POINT(879.460083 118.191635) 27815 POINT(95.1477127 385.022949) 27816 POINT(361.292572 940.501526) 27817 POINT(958.894348 972.660706) 27818 POINT(720.919006 204.298828) 27819 POINT(797.603821 13.2364035) 27820 POINT(558.428711 726.188477) 27821 POINT(882.601074 528.333862) 27822 POINT(583.100281 726.113647) 27823 POINT(805.493103 820.345032) 27824 POINT(991.885437 551.796448) 27825 POINT(714.023621 909.120239) 27826 POINT(519.37085 637.763489) 27827 POINT(754.881042 481.874542) 27828 POINT(487.833832 388.137238) 27829 POINT(986.11438 522.684692) 27830 POINT(331.749176 759.261475) 27831 POINT(420.268951 342.720642) 27832 POINT(957.872314 895.899109) 27833 POINT(96.9807281 225.709824) 27834 POINT(583.140381 955.111023) 27835 POINT(259.204742 585.9953) 27836 POINT(224.542709 87.5285416) 27837 POINT(247.247925 425.531281) 27838 POINT(107.386765 679.740417) 27839 POINT(634.220947 3.48163915) 27840 POINT(923.716797 277.709717) 27841 POINT(238.419525 295.604492) 27842 POINT(76.8562775 883.938293) 27843 POINT(873.629333 833.793396) 27844 POINT(960.081055 465.53891) 27845 POINT(276.674408 458.10495) 27846 POINT(559.362244 832.125488) 27847 POINT(400.085022 979.060059) 27848 POINT(567.14093 487.780182) 27849 POINT(822.048462 597.315613) 27850 POINT(24.5278969 467.211884) 27851 POINT(129.464172 536.935669) 27852 POINT(754.612671 510.126709) 27853 POINT(824.70575 859.05658) 27854 POINT(444.279358 577.952942) 27855 POINT(222.48436 991.956238) 27856 POINT(813.764709 682.182556) 27857 POINT(398.012848 564.263306) 27858 POINT(472.971649 173.13179) 27859 POINT(57.6277199 598.746948) 27860 POINT(595.217773 71.9175262) 27861 POINT(92.3864975 718.922546) 27862 POINT(689.721741 147.558914) 27863 POINT(986.31073 459.306763) 27864 POINT(473.905762 316.637756) 27865 POINT(454.394501 37.9249268) 27866 POINT(38.8434372 536.795532) 27867 POINT(29.876976 547.574646) 27868 POINT(272.34729 780.052917) 27869 POINT(482.345215 716.995728) 27870 POINT(413.849915 400.669403) 27871 POINT(182.872208 466.709076) 27872 POINT(926.070984 388.810822) 27873 POINT(922.610779 984.717285) 27874 POINT(796.308105 650.066956) 27875 POINT(398.193604 37.9872208) 27876 POINT(343.984528 736.908691) 27877 POINT(90.1859818 545.757019) 27878 POINT(482.901489 937.149902) 27879 POINT(647.088196 914.958679) 27880 POINT(741.671509 492.679108) 27881 POINT(42.493145 386.767273) 27882 POINT(712.377441 66.0572815) 27883 POINT(670.608093 292.463928) 27884 POINT(707.046143 620.589233) 27885 POINT(487.200134 58.0246124) 27886 POINT(438.624725 249.319504) 27887 POINT(169.012985 437.354889) 27888 POINT(395.491852 438.878998) 27889 POINT(762.827881 466.728088) 27890 POINT(86.9481964 934.623962) 27891 POINT(211.743195 206.231094) 27892 POINT(545.552612 74.1039658) 27893 POINT(595.180359 421.976471) 27894 POINT(877.678101 857.236145) 27895 POINT(592.96936 935.231995) 27896 POINT(456.444916 444.938477) 27897 POINT(103.138763 656.797546) 27898 POINT(704.570312 435.294281) 27899 POINT(706.357849 87.9019699) 27900 POINT(675.100037 510.131775) 27901 POINT(704.118164 819.20282) 27902 POINT(615.026123 618.35968) 27903 POINT(267.573212 829.371704) 27904 POINT(903.143738 149.300751) 27905 POINT(152.494385 972.093628) 27906 POINT(654.978271 824.018921) 27907 POINT(874.172729 258.575714) 27908 POINT(553.164978 710.280762) 27909 POINT(933.565491 470.944702) 27910 POINT(213.362946 652.998047) 27911 POINT(959.930237 374.952881) 27912 POINT(458.821259 953.045837) 27913 POINT(631.119995 698.544861) 27914 POINT(29.4149609 660.162842) 27915 POINT(174.258942 982.052429) 27916 POINT(474.772247 847.748169) 27917 POINT(688.442688 27.6744118) 27918 POINT(710.595398 576.94397) 27919 POINT(597.286926 637.69574) 27920 POINT(90.1299515 443.216064) 27921 POINT(190.596146 555.450562) 27922 POINT(949.78125 30.1390209) 27923 POINT(487.270752 448.819916) 27924 POINT(723.058472 812.288147) 27925 POINT(910.07312 607.174988) 27926 POINT(627.415833 982.707703) 27927 POINT(449.41568 978.85553) 27928 POINT(64.3515091 901.651855) 27929 POINT(878.424927 742.867859) 27930 POINT(637.640564 834.091553) 27931 POINT(13.804141 786.46875) 27932 POINT(694.261414 966.391968) 27933 POINT(173.226105 16.2742786) 27934 POINT(586.99707 360.75174) 27935 POINT(615.016541 146.722855) 27936 POINT(209.548859 153.244202) 27937 POINT(442.74527 533.982117) 27938 POINT(480.111389 452.034241) 27939 POINT(877.161682 319.192017) 27940 POINT(266.667114 711.589111) 27941 POINT(929.949646 941.389832) 27942 POINT(128.839752 902.134888) 27943 POINT(925.416077 322.286591) 27944 POINT(272.191132 257.509369) 27945 POINT(402.977905 322.615723) 27946 POINT(299.677795 355.851044) 27947 POINT(168.805695 549.025208) 27948 POINT(933.045593 493.772888) 27949 POINT(450.973846 143.041367) 27950 POINT(548.804077 873.970886) 27951 POINT(628.844849 716.715637) 27952 POINT(516.78302 797.393311) 27953 POINT(62.1825104 286.032959) 27954 POINT(284.94989 483.564789) 27955 POINT(424.78064 581.483887) 27956 POINT(466.10675 126.459206) 27957 POINT(265.466156 939.486816) 27958 POINT(847.356812 509.108368) 27959 POINT(468.57486 568.315735) 27960 POINT(962.029968 769.210693) 27961 POINT(886.906982 73.1960983) 27962 POINT(289.405121 442.279724) 27963 POINT(771.385742 968.253784) 27964 POINT(136.507385 560.883301) 27965 POINT(149.920334 514.637756) 27966 POINT(118.064629 601.43811) 27967 POINT(18.1981392 636.617493) 27968 POINT(898.069946 327.625977) 27969 POINT(930.31073 178.629715) 27970 POINT(455.141815 856.205261) 27971 POINT(228.379745 189.591141) 27972 POINT(752.940857 481.841064) 27973 POINT(966.959595 835.411255) 27974 POINT(958.365662 248.234222) 27975 POINT(387.327515 541.25238) 27976 POINT(579.303589 889.581665) 27977 POINT(224.343323 912.048889) 27978 POINT(368.6763 426.165833) 27979 POINT(907.998169 249.087967) 27980 POINT(43.8404427 358.181396) 27981 POINT(904.835754 213.673996) 27982 POINT(734.649902 430.934937) 27983 POINT(661.00116 543.272278) 27984 POINT(237.353699 351.081177) 27985 POINT(316.75943 123.908081) 27986 POINT(205.814392 517.004639) 27987 POINT(98.0652466 103.459892) 27988 POINT(150.227737 826.855591) 27989 POINT(918.405396 797.93457) 27990 POINT(783.679932 375.769958) 27991 POINT(686.071777 616.569153) 27992 POINT(808.685425 420.731476) 27993 POINT(378.751404 97.0263977) 27994 POINT(572.629333 339.285858) 27995 POINT(467.481232 900.012024) 27996 POINT(249.23732 539.430054) 27997 POINT(422.364227 529.94104) 27998 POINT(882.383362 885.639954) 27999 POINT(67.8624115 907.050964) 28000 POINT(21.4180984 323.952515) 28001 POINT(558.980896 264.446014) 28002 POINT(999.576416 41.7030182) 28003 POINT(882.366211 244.439255) 28004 POINT(577.848877 849.968933) 28005 POINT(537.521179 351.339111) 28006 POINT(568.047974 84.6550293) 28007 POINT(490.368927 927.230652) 28008 POINT(735.860657 381.759186) 28009 POINT(509.790588 663.679626) 28010 POINT(295.776489 280.598999) 28011 POINT(571.142273 971.617249) 28012 POINT(376.358307 973.192261) 28013 POINT(440.893066 695.547974) 28014 POINT(140.951096 266.737732) 28015 POINT(723.291626 83.8835373) 28016 POINT(683.300964 218.022522) 28017 POINT(261.377319 287.503265) 28018 POINT(220.498947 83.0040283) 28019 POINT(626.834473 142.040543) 28020 POINT(521.11853 491.816376) 28021 POINT(620.401672 550.009216) 28022 POINT(431.454041 789.697693) 28023 POINT(929.176514 386.429718) 28024 POINT(997.581177 599.116028) 28025 POINT(869.707947 741.450928) 28026 POINT(178.875687 69.5981216) 28027 POINT(84.8728409 236.563828) 28028 POINT(866.081848 341.982758) 28029 POINT(84.9535904 623.966187) 28030 POINT(663.593506 206.183487) 28031 POINT(133.947693 433.698273) 28032 POINT(183.9897 159.853439) 28033 POINT(513.959106 868.167114) 28034 POINT(898.87738 354.003967) 28035 POINT(64.67556 772.102539) 28036 POINT(562.674622 655.68158) 28037 POINT(830.685181 406.92865) 28038 POINT(997.200378 72.9180298) 28039 POINT(974.112244 26.7286777) 28040 POINT(420.001617 519.624451) 28041 POINT(969.262268 248.773102) 28042 POINT(296.583008 684.816772) 28043 POINT(713.295532 810.949463) 28044 POINT(877.535889 89.0758591) 28045 POINT(114.152901 152.980133) 28046 POINT(580.578064 129.624329) 28047 POINT(83.9184952 5.26630545) 28048 POINT(332.398102 542.634155) 28049 POINT(630.534851 741.404419) 28050 POINT(986.774475 646.776978) 28051 POINT(939.411133 86.3629837) 28052 POINT(277.650879 515.632996) 28053 POINT(333.250946 76.0839233) 28054 POINT(195.770782 789.046997) 28055 POINT(735.749329 155.607819) 28056 POINT(645.296875 746.153015) 28057 POINT(513.179504 467.074097) 28058 POINT(145.886658 987.492493) 28059 POINT(175.942062 717.083923) 28060 POINT(802.410706 212.969574) 28061 POINT(566.637024 291.543518) 28062 POINT(828.453674 129.476624) 28063 POINT(597.031494 287.453094) 28064 POINT(343.624329 110.683182) 28065 POINT(906.432007 903.019714) 28066 POINT(684.345093 386.116394) 28067 POINT(659.572632 733.436401) 28068 POINT(992.130066 922.315857) 28069 POINT(72.4478989 288.774384) 28070 POINT(744.475525 831.182312) 28071 POINT(716.942566 827.419617) 28072 POINT(246.560837 795.947693) 28073 POINT(605.139343 993.688782) 28074 POINT(935.321899 230.386444) 28075 POINT(965.46228 887.669922) 28076 POINT(892.552856 409.506012) 28077 POINT(297.085388 970.542725) 28078 POINT(905.085938 748.159668) 28079 POINT(106.195915 526.875732) 28080 POINT(135.490402 516.608398) 28081 POINT(895.749329 439.52005) 28082 POINT(316.941528 218.432648) 28083 POINT(785.426025 471.198059) 28084 POINT(904.878784 406.400726) 28085 POINT(194.854752 543.828064) 28086 POINT(802.877258 56.5997925) 28087 POINT(523.186279 131.749237) 28088 POINT(830.986145 581.619507) 28089 POINT(722.292847 573.676331) 28090 POINT(674.967468 851.759216) 28091 POINT(187.864853 111.390465) 28092 POINT(500.840424 61.6479111) 28093 POINT(909.236267 797.465576) 28094 POINT(50.4738045 171.48555) 28095 POINT(329.775879 111.966812) 28096 POINT(863.362549 851.122437) 28097 POINT(708.140076 486.885315) 28098 POINT(263.000885 135.807037) 28099 POINT(847.728088 770.574402) 28100 POINT(72.3632965 279.688293) 28101 POINT(116.571175 551.724121) 28102 POINT(303.99826 872.721802) 28103 POINT(530.003174 798.18158) 28104 POINT(631.325623 114.78833) 28105 POINT(959.311768 310.544281) 28106 POINT(567.223206 54.5029144) 28107 POINT(984.788879 419.902008) 28108 POINT(435.339539 576.911621) 28109 POINT(582.943848 314.977142) 28110 POINT(353.347565 332.205322) 28111 POINT(354.995117 523.444214) 28112 POINT(193.253067 645.514771) 28113 POINT(825.126953 818.245544) 28114 POINT(432.712982 635.202026) 28115 POINT(998.51355 110.73941) 28116 POINT(757.04657 333.870239) 28117 POINT(735.040405 432.621429) 28118 POINT(461.309021 983.24115) 28119 POINT(7.36440229 617.474243) 28120 POINT(85.6344376 932.382751) 28121 POINT(41.968586 755.878418) 28122 POINT(198.368881 670.429443) 28123 POINT(37.8069 416.234253) 28124 POINT(926.742126 572.456055) 28125 POINT(295.766266 263.401245) 28126 POINT(283.547882 423.711304) 28127 POINT(428.37265 351.187592) 28128 POINT(813.203552 846.779846) 28129 POINT(935.947815 560.46405) 28130 POINT(797.469971 412.827637) 28131 POINT(993.913818 465.717499) 28132 POINT(638.966736 636.946655) 28133 POINT(285.402832 168.293198) 28134 POINT(951.497986 794.401978) 28135 POINT(201.141098 179.136871) 28136 POINT(905.294006 745.596558) 28137 POINT(610.248413 377.879486) 28138 POINT(30.9041882 809.71521) 28139 POINT(654.759155 44.5960579) 28140 POINT(709.084961 407.828156) 28141 POINT(939.085083 347.108398) 28142 POINT(150.186279 323.895905) 28143 POINT(953.18988 877.520508) 28144 POINT(682.948975 265.401428) 28145 POINT(292.933044 539.627014) 28146 POINT(470.096924 93.664299) 28147 POINT(9.00677872 482.392456) 28148 POINT(390.596649 927.299316) 28149 POINT(341.381287 807.968262) 28150 POINT(273.022705 981.436035) 28151 POINT(871.586975 425.416779) 28152 POINT(131.316772 811.501343) 28153 POINT(270.991608 908.80542) 28154 POINT(696.670166 795.501831) 28155 POINT(938.119019 301.587555) 28156 POINT(713.749634 565.364563) 28157 POINT(828.755859 4.80999327) 28158 POINT(985.586731 429.16629) 28159 POINT(193.988785 726.899414) 28160 POINT(521.863281 995.793457) 28161 POINT(86.4140015 755.438965) 28162 POINT(835.864014 496.141602) 28163 POINT(784.697998 849.922913) 28164 POINT(114.984688 105.421501) 28165 POINT(460.697021 928.078247) 28166 POINT(780.441833 715.15625) 28167 POINT(788.852295 521.690796) 28168 POINT(678.932495 527.315002) 28169 POINT(920.06781 71.3205795) 28170 POINT(590.75177 883.653137) 28171 POINT(535.389709 388.818604) 28172 POINT(876.744446 378.249298) 28173 POINT(110.28997 683.758789) 28174 POINT(355.008667 398.615692) 28175 POINT(188.101639 82.008606) 28176 POINT(35.186409 309.396729) 28177 POINT(339.162567 484.525299) 28178 POINT(234.27951 931.973572) 28179 POINT(606.632874 360.563538) 28180 POINT(147.177094 323.304108) 28181 POINT(975.017334 845.911194) 28182 POINT(894.528992 48.7055359) 28183 POINT(685.528992 543.263306) 28184 POINT(870.455627 747.327087) 28185 POINT(834.081482 183.750687) 28186 POINT(266.161743 267.668823) 28187 POINT(471.53241 806.933411) 28188 POINT(559.266785 606.228027) 28189 POINT(558.567871 117.855667) 28190 POINT(592.15094 308.3508) 28191 POINT(364.21167 966.26123) 28192 POINT(378.532013 520.432312) 28193 POINT(820.362244 512.639954) 28194 POINT(691.664307 41.1503334) 28195 POINT(616.140503 161.89328) 28196 POINT(718.921143 171.477661) 28197 POINT(424.434418 87.1714554) 28198 POINT(988.167236 964.462646) 28199 POINT(166.22699 478.570801) 28200 POINT(456.434052 322.47998) 28201 POINT(31.6081505 144.244217) 28202 POINT(129.305573 868.753723) 28203 POINT(563.425232 891.041321) 28204 POINT(81.5475311 358.978394) 28205 POINT(272.083313 109.662323) 28206 POINT(960.437439 715.975281) 28207 POINT(367.945099 92.7070847) 28208 POINT(360.677063 324.310822) 28209 POINT(479.11026 995.780273) 28210 POINT(204.507629 662.085449) 28211 POINT(953.208374 700.448975) 28212 POINT(986.64978 463.710999) 28213 POINT(136.475174 607.445557) 28214 POINT(448.02536 581.10376) 28215 POINT(74.1821747 48.7921219) 28216 POINT(625.078857 362.606445) 28217 POINT(403.962585 293.840088) 28218 POINT(936.228027 411.043701) 28219 POINT(916.353943 287.554382) 28220 POINT(869.97583 867.136536) 28221 POINT(761.719299 316.320709) 28222 POINT(240.083527 135.229721) 28223 POINT(594.494507 779.345947) 28224 POINT(884.632202 108.69812) 28225 POINT(897.45105 450.207794) 28226 POINT(73.6041183 236.920074) 28227 POINT(231.488434 856.765808) 28228 POINT(922.747681 119.365891) 28229 POINT(449.642639 267.574646) 28230 POINT(412.014923 20.8204346) 28231 POINT(814.894958 843.865662) 28232 POINT(499.975708 721.323486) 28233 POINT(115.497658 658.441467) 28234 POINT(589.640564 281.987823) 28235 POINT(2.53367782 872.430176) 28236 POINT(717.505859 600.980103) 28237 POINT(934.054565 539.378418) 28238 POINT(240.944153 420.787903) 28239 POINT(928.273254 430.847961) 28240 POINT(126.993721 737.237244) 28241 POINT(262.94101 371.374878) 28242 POINT(788.971863 251.983276) 28243 POINT(845.334534 771.823975) 28244 POINT(570.098022 643.408081) 28245 POINT(81.4884338 62.9330902) 28246 POINT(682.52887 436.694122) 28247 POINT(136.80072 274.912201) 28248 POINT(626.077209 203.582214) 28249 POINT(773.434692 69.6959534) 28250 POINT(736.730347 677.886658) 28251 POINT(821.661682 610.822021) 28252 POINT(657.344604 236.767227) 28253 POINT(469.201935 18.520216) 28254 POINT(741.142822 563.208984) 28255 POINT(189.601486 86.6794662) 28256 POINT(955.576416 305.926636) 28257 POINT(360.744293 981.758362) 28258 POINT(965.551941 213.408249) 28259 POINT(608.871094 864.901184) 28260 POINT(159.91127 704.074402) 28261 POINT(141.216522 606.61322) 28262 POINT(315.461487 700.22644) 28263 POINT(868.970947 843.064392) 28264 POINT(943.976501 995.87439) 28265 POINT(867.224976 664.781921) 28266 POINT(667.750061 534.586731) 28267 POINT(643.50177 858.134399) 28268 POINT(949.920776 970.731934) 28269 POINT(93.1778107 229.206223) 28270 POINT(351.482117 394.046265) 28271 POINT(788.422913 535.635803) 28272 POINT(85.3280334 372.154419) 28273 POINT(85.2601624 607.598816) 28274 POINT(829.689209 657.905212) 28275 POINT(227.092651 542.831909) 28276 POINT(592.834412 308.196533) 28277 POINT(286.818207 366.516388) 28278 POINT(385.009064 249.026138) 28279 POINT(115.846214 224.702362) 28280 POINT(752.462402 819.09491) 28281 POINT(977.442871 265.101166) 28282 POINT(15.3895979 743.331665) 28283 POINT(832.499756 602.485535) 28284 POINT(683.134949 680.73584) 28285 POINT(244.802536 684.215942) 28286 POINT(805.635315 701.112061) 28287 POINT(85.053215 496.779785) 28288 POINT(472.524872 156.389313) 28289 POINT(971.281372 184.546524) 28290 POINT(756.394104 698.690186) 28291 POINT(98.99543 100.672653) 28292 POINT(783.342041 74.1804199) 28293 POINT(526.738403 156.350296) 28294 POINT(424.252472 594.651917) 28295 POINT(408.999847 673.095459) 28296 POINT(159.355301 304.060333) 28297 POINT(254.209503 133.877777) 28298 POINT(754.928345 151.768768) 28299 POINT(254.430206 148.575592) 28300 POINT(485.891296 435.575836) 28301 POINT(637.132446 239.098633) 28302 POINT(176.119232 253.898926) 28303 POINT(957.959717 366.786835) 28304 POINT(447.248444 216.527283) 28305 POINT(244.683853 392.213165) 28306 POINT(357.385925 606.570312) 28307 POINT(952.739258 313.773346) 28308 POINT(367.408539 102.642487) 28309 POINT(166.073227 380.532623) 28310 POINT(41.5205956 990.611816) 28311 POINT(315.933167 236.450363) 28312 POINT(520.624817 89.6843643) 28313 POINT(665.148315 612.663208) 28314 POINT(5.16920233 850.112915) 28315 POINT(765.074219 742.961243) 28316 POINT(854.910156 851.948364) 28317 POINT(213.423004 401.530304) 28318 POINT(516.048462 239.15683) 28319 POINT(78.5720139 33.6961098) 28320 POINT(84.143631 94.8949356) 28321 POINT(892.647705 917.630371) 28322 POINT(619.91748 926.185486) 28323 POINT(812.841492 221.255219) 28324 POINT(273.461182 944.701782) 28325 POINT(397.298553 533.000793) 28326 POINT(212.535065 760.518799) 28327 POINT(5.90203094 292.36557) 28328 POINT(367.788483 143.808884) 28329 POINT(512.871521 136.747849) 28330 POINT(130.153595 242.465683) 28331 POINT(280.928986 640.736755) 28332 POINT(594.82196 799.069641) 28333 POINT(997.623108 144.576309) 28334 POINT(426.670654 606.626953) 28335 POINT(393.123962 257.067993) 28336 POINT(311.457947 437.908783) 28337 POINT(253.409286 347.614014) 28338 POINT(596.380371 627.405518) 28339 POINT(799.401672 600.894897) 28340 POINT(656.61499 167.928375) 28341 POINT(35.5302467 449.927917) 28342 POINT(748.336304 786.402283) 28343 POINT(272.774261 898.691833) 28344 POINT(323.591431 806.691528) 28345 POINT(721.998108 129.478333) 28346 POINT(641.657837 403.291443) 28347 POINT(931.947937 113.621185) 28348 POINT(871.542786 950.952454) 28349 POINT(339.400909 723.860718) 28350 POINT(50.6833649 824.931702) 28351 POINT(311.527161 114.547821) 28352 POINT(258.362091 88.3910675) 28353 POINT(625.544861 190.03511) 28354 POINT(144.692505 791.884766) 28355 POINT(259.357574 635.414551) 28356 POINT(696.188599 19.9483585) 28357 POINT(898.315308 816.345337) 28358 POINT(438.990845 657.176514) 28359 POINT(514.918823 460.799133) 28360 POINT(505.967865 57.1494827) 28361 POINT(395.702759 275.481689) 28362 POINT(402.470673 219.049362) 28363 POINT(796.312683 899.451538) 28364 POINT(378.930542 686.338806) 28365 POINT(53.7003365 998.641724) 28366 POINT(991.331726 547.620483) 28367 POINT(103.275345 14.8358927) 28368 POINT(340.551849 650.541504) 28369 POINT(396.785065 523.996704) 28370 POINT(219.465805 334.771851) 28371 POINT(729.772888 270.178558) 28372 POINT(756.501099 689.704529) 28373 POINT(329.954315 426.671112) 28374 POINT(373.079803 977.264404) 28375 POINT(172.125671 215.249557) 28376 POINT(920.283386 501.35965) 28377 POINT(141.796082 672.795349) 28378 POINT(630.452209 814.981689) 28379 POINT(717.236023 593.082581) 28380 POINT(118.722755 836.289185) 28381 POINT(954.829651 756.793335) 28382 POINT(657.287781 689.372498) 28383 POINT(0.380265146 777.063599) 28384 POINT(584.130981 27.5656586) 28385 POINT(192.361053 778.917236) 28386 POINT(213.955963 261.576263) 28387 POINT(233.155548 762.296143) 28388 POINT(410.950867 666.373901) 28389 POINT(370.355408 699.144653) 28390 POINT(932.968689 335.378418) 28391 POINT(119.557541 29.8769436) 28392 POINT(339.858582 584.314819) 28393 POINT(668.336426 363.903595) 28394 POINT(203.373962 767.05835) 28395 POINT(701.795959 478.692902) 28396 POINT(293.755768 779.427856) 28397 POINT(285.080566 543.693298) 28398 POINT(533.310791 412.355194) 28399 POINT(507.338654 276.576019) 28400 POINT(687.775757 431.959198) 28401 POINT(542.881531 142.519913) 28402 POINT(852.793091 960.191162) 28403 POINT(404.807526 921.130554) 28404 POINT(829.374695 695.940857) 28405 POINT(68.4191132 944.16803) 28406 POINT(965.858459 433.457184) 28407 POINT(518.7323 20.2722492) 28408 POINT(174.774063 523.936218) 28409 POINT(148.772629 745.680054) 28410 POINT(764.5401 599.077942) 28411 POINT(401.801331 303.496735) 28412 POINT(814.464783 384.844452) 28413 POINT(537.878906 495.017273) 28414 POINT(876.688904 522.739014) 28415 POINT(418.130585 157.120514) 28416 POINT(323.180145 368.448608) 28417 POINT(571.741333 97.7285461) 28418 POINT(135.493637 28.0721474) 28419 POINT(952.206177 540.214294) 28420 POINT(28.6890011 835.427307) 28421 POINT(439.95459 886.553223) 28422 POINT(630.617615 875.758423) 28423 POINT(625.537109 482.675507) 28424 POINT(828.956665 467.842377) 28425 POINT(856.617859 358.236725) 28426 POINT(129.190109 64.9244614) 28427 POINT(176.688522 492.86264) 28428 POINT(918.665405 302.651947) 28429 POINT(175.466629 673.439331) 28430 POINT(339.461975 777.368896) 28431 POINT(40.2489433 109.44175) 28432 POINT(173.783066 89.5882721) 28433 POINT(202.06102 588.469543) 28434 POINT(830.753662 134.572647) 28435 POINT(946.416504 520.570618) 28436 POINT(486.811859 104.778259) 28437 POINT(570.127258 941.675537) 28438 POINT(420.395966 118.108498) 28439 POINT(55.273304 643.273865) 28440 POINT(45.5467567 372.77417) 28441 POINT(569.655334 552.679016) 28442 POINT(491.682739 715.981018) 28443 POINT(238.449463 306.838013) 28444 POINT(404.616486 102.2006) 28445 POINT(741.114807 409.238647) 28446 POINT(16.4259167 600.59137) 28447 POINT(125.760292 216.282944) 28448 POINT(211.776169 24.0133724) 28449 POINT(383.157898 314.380219) 28450 POINT(21.5232792 418.435272) 28451 POINT(445.534546 185.441315) 28452 POINT(619.866272 236.404343) 28453 POINT(360.4375 745.53363) 28454 POINT(861.019348 77.3075562) 28455 POINT(4.73311186 723.905945) 28456 POINT(740.547058 106.676071) 28457 POINT(243.674561 537.76709) 28458 POINT(933.460876 253.699188) 28459 POINT(378.590759 438.080109) 28460 POINT(977.363892 757.948486) 28461 POINT(865.868103 144.812286) 28462 POINT(418.917908 711.23822) 28463 POINT(9.39685154 863.793335) 28464 POINT(713.393188 677.349548) 28465 POINT(836.548218 654.423096) 28466 POINT(200.86232 920.439453) 28467 POINT(950.162659 286.420807) 28468 POINT(622.664917 22.3802013) 28469 POINT(420.230621 438.715393) 28470 POINT(385.165527 900.691589) 28471 POINT(931.307129 824.172485) 28472 POINT(824.752502 273.433746) 28473 POINT(455.739258 305.483704) 28474 POINT(731.798096 167.32486) 28475 POINT(777.124329 551.193115) 28476 POINT(208.366028 982.987976) 28477 POINT(669.820312 283.094635) 28478 POINT(874.383179 159.766647) 28479 POINT(453.67984 719.341858) 28480 POINT(512.48053 505.778412) 28481 POINT(821.480469 719.406921) 28482 POINT(418.577362 551.205688) 28483 POINT(190.915222 200.996368) 28484 POINT(172.475967 759.299194) 28485 POINT(602.73822 204.270477) 28486 POINT(882.321533 395.850372) 28487 POINT(189.123276 119.953117) 28488 POINT(513.961426 260.267792) 28489 POINT(116.986534 935.507751) 28490 POINT(969.32605 156.780426) 28491 POINT(393.588928 263.471497) 28492 POINT(608.400146 910.228699) 28493 POINT(57.9214516 539.882629) 28494 POINT(851.722778 275.555054) 28495 POINT(701.073914 275.737091) 28496 POINT(992.348999 262.259583) 28497 POINT(420.000397 33.413414) 28498 POINT(978.639893 94.1552811) 28499 POINT(747.956177 821.494751) 28500 POINT(496.07019 290.784393) 28501 POINT(685.650635 559.488647) 28502 POINT(424.522308 620.501648) 28503 POINT(122.21701 878.329529) 28504 POINT(627.467957 7.78389359) 28505 POINT(954.957092 778.594666) 28506 POINT(944.343384 840.703003) 28507 POINT(440.103302 67.0498657) 28508 POINT(313.750061 621.236511) 28509 POINT(410.315582 300.067566) 28510 POINT(712.422791 24.355669) 28511 POINT(233.173187 461.853607) 28512 POINT(315.907074 315.408844) 28513 POINT(841.54657 344.130737) 28514 POINT(187.385849 743.627258) 28515 POINT(2.56760287 635.434753) 28516 POINT(300.049286 147.65593) 28517 POINT(696.220642 901.584595) 28518 POINT(667.870239 132.521744) 28519 POINT(114.732689 788.914734) 28520 POINT(374.835785 2.67897487) 28521 POINT(265.456757 18.8627052) 28522 POINT(881.906006 249.638977) 28523 POINT(436.450378 692.458679) 28524 POINT(885.675354 22.7290421) 28525 POINT(167.21051 477.77298) 28526 POINT(387.464813 275.903107) 28527 POINT(736.917969 819.664368) 28528 POINT(394.07489 441.032471) 28529 POINT(247.077881 62.0928802) 28530 POINT(652.496216 678.150696) 28531 POINT(920.749573 497.286621) 28532 POINT(64.4556732 285.754272) 28533 POINT(380.89856 807.289307) 28534 POINT(429.836456 400.132294) 28535 POINT(98.15625 111.588745) 28536 POINT(130.953049 993.103882) 28537 POINT(433.949554 114.985489) 28538 POINT(445.698029 604.395081) 28539 POINT(347.192688 413.586578) 28540 POINT(723.161377 570.727234) 28541 POINT(808.278137 380.398895) 28542 POINT(480.017487 481.679291) 28543 POINT(777.843262 747.679321) 28544 POINT(92.4800873 586.318054) 28545 POINT(592.731812 828.825439) 28546 POINT(632.759155 168.874084) 28547 POINT(168.851318 591.636902) 28548 POINT(199.663116 921.420227) 28549 POINT(319.498566 586.346985) 28550 POINT(942.342896 872.243286) 28551 POINT(15.579154 140.640335) 28552 POINT(699.36853 926.682068) 28553 POINT(726.481384 620.291016) 28554 POINT(550.684753 879.545105) 28555 POINT(300.819061 794.048584) 28556 POINT(588.950928 342.363037) 28557 POINT(726.58667 76.5722046) 28558 POINT(293.909454 262.834534) 28559 POINT(680.358276 310.790619) 28560 POINT(176.434448 106.681213) 28561 POINT(993.014221 713.897522) 28562 POINT(938.612976 723.150085) 28563 POINT(61.2333679 87.7602463) 28564 POINT(566.549072 964.630615) 28565 POINT(183.89595 588.918823) 28566 POINT(280.625824 208.952255) 28567 POINT(742.99353 485.315247) 28568 POINT(563.908997 611.184814) 28569 POINT(850.135803 881.766785) 28570 POINT(976.546326 652.093628) 28571 POINT(390.922821 374.960876) 28572 POINT(748.856934 955.343872) 28573 POINT(497.063385 768.003418) 28574 POINT(287.883484 408.265045) 28575 POINT(115.057106 116.523643) 28576 POINT(494.191986 975.269043) 28577 POINT(103.520287 540.880249) 28578 POINT(883.470764 763.277283) 28579 POINT(839.961426 985.597229) 28580 POINT(859.947815 549.790771) 28581 POINT(641.256165 766.892822) 28582 POINT(467.88092 172.199921) 28583 POINT(967.618469 666.770386) 28584 POINT(628.578125 597.862305) 28585 POINT(783.020081 117.971008) 28586 POINT(281.892761 735.295166) 28587 POINT(59.4106979 804.121826) 28588 POINT(224.356262 835.072632) 28589 POINT(39.4892883 665.249451) 28590 POINT(455.631866 782.846436) 28591 POINT(893.060974 757.69458) 28592 POINT(898.488281 465.119354) 28593 POINT(23.1866055 842.210999) 28594 POINT(785.826172 340.397797) 28595 POINT(786.531067 653.138184) 28596 POINT(355.385345 164.182907) 28597 POINT(401.794739 989.099792) 28598 POINT(755.688843 676.581848) 28599 POINT(523.258057 531.43457) 28600 POINT(945.736084 787.431274) 28601 POINT(373.7836 375.850433) 28602 POINT(519.260437 97.6303635) 28603 POINT(561.743591 906.598877) 28604 POINT(658.465393 329.424438) 28605 POINT(176.024658 867.383057) 28606 POINT(131.613159 645.823792) 28607 POINT(467.391296 321.473999) 28608 POINT(406.361084 803.976318) 28609 POINT(216.074768 942.964355) 28610 POINT(522.140198 383.5513) 28611 POINT(665.623779 555.213562) 28612 POINT(519.095032 874.070923) 28613 POINT(911.06842 610.43573) 28614 POINT(580.2229 500.316528) 28615 POINT(682.68988 980.775269) 28616 POINT(932.560913 258.718933) 28617 POINT(210.666351 866.464111) 28618 POINT(250.889511 566.937927) 28619 POINT(14.2080956 196.722229) 28620 POINT(294.896423 171.179672) 28621 POINT(83.2659149 745.568176) 28622 POINT(722.649902 879.357544) 28623 POINT(641.37439 464.857086) 28624 POINT(97.2519836 301.762543) 28625 POINT(952.686035 673.528809) 28626 POINT(630.509521 983.885071) 28627 POINT(0.894627929 673.690674) 28628 POINT(981.314819 148.461273) 28629 POINT(186.797775 794.890259) 28630 POINT(694.237305 156.369614) 28631 POINT(907.085327 517.471863) 28632 POINT(575.791138 819.96283) 28633 POINT(260.079681 179.613495) 28634 POINT(365.28299 819.703003) 28635 POINT(523.219604 331.484253) 28636 POINT(570.495178 788.112793) 28637 POINT(138.833786 330.541412) 28638 POINT(865.308044 627.226135) 28639 POINT(984.077271 556.539612) 28640 POINT(249.389557 450.707153) 28641 POINT(770.807129 211.190384) 28642 POINT(465.115784 214.020691) 28643 POINT(682.790405 119.076019) 28644 POINT(372.865631 780.520325) 28645 POINT(300.221039 92.4816589) 28646 POINT(974.837097 423.734406) 28647 POINT(552.46106 107.994606) 28648 POINT(124.749084 782.767212) 28649 POINT(774.717712 877.379028) 28650 POINT(194.5466 155.501541) 28651 POINT(896.656555 5.34556293) 28652 POINT(820.960083 960.737793) 28653 POINT(662.492676 204.000275) 28654 POINT(509.056946 843.684509) 28655 POINT(452.774384 385.20047) 28656 POINT(214.453674 498.130157) 28657 POINT(455.887726 550.622009) 28658 POINT(901.456604 982.576416) 28659 POINT(408.399902 433.524811) 28660 POINT(525.010803 406.647675) 28661 POINT(1.97893929 770.097656) 28662 POINT(407.029083 38.8687553) 28663 POINT(33.1617889 861.590759) 28664 POINT(772.645996 458.715546) 28665 POINT(971.200134 966.562378) 28666 POINT(432.510193 556.601562) 28667 POINT(437.225647 786.447144) 28668 POINT(599.842285 327.710022) 28669 POINT(51.801281 393.897217) 28670 POINT(425.211487 252.479095) 28671 POINT(722.446411 934.190491) 28672 POINT(530.521057 991.883301) 28673 POINT(40.9485931 103.279053) 28674 POINT(92.3573685 423.846527) 28675 POINT(453.334686 85.2559433) 28676 POINT(532.59729 123.206207) 28677 POINT(992.531128 396.243042) 28678 POINT(743.05426 47.287899) 28679 POINT(942.37384 25.6759167) 28680 POINT(826.168213 878.639526) 28681 POINT(977.246277 750.035828) 28682 POINT(353.630371 532.719727) 28683 POINT(317.859009 394.22876) 28684 POINT(110.827316 238.883698) 28685 POINT(812.294556 773.640076) 28686 POINT(641.654541 216.018845) 28687 POINT(722.309448 722.627319) 28688 POINT(773.292053 798.446716) 28689 POINT(326.021484 925.70166) 28690 POINT(774.764343 322.6362) 28691 POINT(275.641693 654.373657) 28692 POINT(180.477432 700.907715) 28693 POINT(337.103607 179.692917) 28694 POINT(337.501221 315.313873) 28695 POINT(629.670776 797.632568) 28696 POINT(863.344604 234.543747) 28697 POINT(548.380554 556.996887) 28698 POINT(832.674316 250.93515) 28699 POINT(39.1418152 918.453491) 28700 POINT(253.297806 456.026306) 28701 POINT(982.196655 465.198883) 28702 POINT(303.341553 14.7026777) 28703 POINT(879.375854 212.896622) 28704 POINT(645.598755 93.6824722) 28705 POINT(417.120056 76.7228012) 28706 POINT(627.319275 74.2530823) 28707 POINT(451.746674 210.095184) 28708 POINT(233.21254 896.855347) 28709 POINT(525.16748 562.052795) 28710 POINT(658.200806 701.980896) 28711 POINT(735.589294 453.014008) 28712 POINT(379.695251 544.187317) 28713 POINT(54.1688728 852.130066) 28714 POINT(665.184814 450.758575) 28715 POINT(468.771637 479.638916) 28716 POINT(781.177368 201.188828) 28717 POINT(451.665619 746.11853) 28718 POINT(458.58548 36.4031639) 28719 POINT(569.046326 784.559692) 28720 POINT(805.194092 826.243591) 28721 POINT(784.741943 603.582764) 28722 POINT(178.715164 679.65509) 28723 POINT(444.42923 379.38504) 28724 POINT(88.0574417 364.242004) 28725 POINT(674.448914 564.224426) 28726 POINT(972.902344 391.097351) 28727 POINT(183.237335 290.155304) 28728 POINT(422.661346 38.3212929) 28729 POINT(233.986542 223.674179) 28730 POINT(688.726685 644.358459) 28731 POINT(963.04895 830.893921) 28732 POINT(75.0560532 52.7323151) 28733 POINT(676.568726 960.438293) 28734 POINT(271.12381 376.106354) 28735 POINT(272.733185 774.666931) 28736 POINT(930.822876 153.640076) 28737 POINT(341.902405 656.950073) 28738 POINT(766.833069 275.754272) 28739 POINT(702.828613 606.995056) 28740 POINT(291.226379 659.7052) 28741 POINT(379.470581 386.778381) 28742 POINT(711.730957 883.463501) 28743 POINT(126.932877 891.18988) 28744 POINT(714.316406 770.582458) 28745 POINT(222.317322 750.396545) 28746 POINT(204.914307 101.942909) 28747 POINT(70.3988113 401.162354) 28748 POINT(27.5965748 189.01088) 28749 POINT(286.789581 933.517029) 28750 POINT(157.966278 345.707916) 28751 POINT(942.515015 84.4780884) 28752 POINT(526.572937 350.960541) 28753 POINT(41.6988449 234.848251) 28754 POINT(48.6603508 700.876953) 28755 POINT(594.481445 106.911003) 28756 POINT(417.440094 848.337952) 28757 POINT(704.623962 764.2323) 28758 POINT(5.42589521 149.246063) 28759 POINT(357.873932 199.472809) 28760 POINT(762.358643 950.043396) 28761 POINT(343.583832 247.472916) 28762 POINT(202.220505 122.29818) 28763 POINT(316.923889 279.872681) 28764 POINT(542.22229 479.710724) 28765 POINT(89.0660629 390.764984) 28766 POINT(353.024109 393.965637) 28767 POINT(72.8222275 852.588318) 28768 POINT(964.508789 692.250549) 28769 POINT(494.40686 55.4892883) 28770 POINT(560.990295 595.38031) 28771 POINT(669.390015 5.20539904) 28772 POINT(812.754272 206.355927) 28773 POINT(821.773315 573.236023) 28774 POINT(899.360352 440.508484) 28775 POINT(666.84021 913.409912) 28776 POINT(459.384766 496.418762) 28777 POINT(176.508926 891.273804) 28778 POINT(879.566528 88.4830704) 28779 POINT(573.988647 642.993774) 28780 POINT(145.085983 924.845459) 28781 POINT(964.359863 880.281738) 28782 POINT(396.520325 936.60791) 28783 POINT(979.154358 694.460693) 28784 POINT(265.585541 804.547119) 28785 POINT(104.107391 59.0130348) 28786 POINT(831.902527 537.424988) 28787 POINT(756.122253 174.296524) 28788 POINT(700.668945 521.421082) 28789 POINT(792.390381 194.662308) 28790 POINT(743.34259 263.897858) 28791 POINT(663.925537 696.693665) 28792 POINT(670.444763 317.927979) 28793 POINT(388.008728 723.057373) 28794 POINT(970.693604 808.679871) 28795 POINT(507.8349 120.497078) 28796 POINT(210.320374 941.407837) 28797 POINT(159.757034 699.400208) 28798 POINT(50.1814804 596.598755) 28799 POINT(783.828125 8.36491394) 28800 POINT(118.844681 994.569092) 28801 POINT(224.8452 38.1329651) 28802 POINT(543.025391 713.904175) 28803 POINT(389.942963 258.613678) 28804 POINT(151.519745 490.62146) 28805 POINT(994.221008 129.604507) 28806 POINT(257.198151 13.4878683) 28807 POINT(555.301941 704.944763) 28808 POINT(308.878265 811.813782) 28809 POINT(836.616638 531.567871) 28810 POINT(369.315247 642.201355) 28811 POINT(611.228333 605.225159) 28812 POINT(298.569366 997.67749) 28813 POINT(474.899933 325.137451) 28814 POINT(138.210495 354.558868) 28815 POINT(608.757202 847.72229) 28816 POINT(638.890686 48.0644722) 28817 POINT(836.318604 897.688171) 28818 POINT(242.578644 626.528687) 28819 POINT(72.9759598 391.668762) 28820 POINT(415.149628 716.106873) 28821 POINT(692.482361 369.279877) 28822 POINT(772.133423 763.778137) 28823 POINT(377.014832 928.760376) 28824 POINT(400.431732 87.5174332) 28825 POINT(445.438446 614.541321) 28826 POINT(555.05127 910.654175) 28827 POINT(317.13681 3.16616988) 28828 POINT(108.800873 95.1851959) 28829 POINT(842.950378 848.550964) 28830 POINT(814.040833 109.343071) 28831 POINT(475.262726 859.856873) 28832 POINT(361.649353 1.81317019) 28833 POINT(239.100204 43.1017303) 28834 POINT(109.198441 333.06839) 28835 POINT(866.397766 104.533997) 28836 POINT(116.862473 798.38147) 28837 POINT(255.591873 18.8394642) 28838 POINT(147.880341 722.849548) 28839 POINT(185.809296 853.168457) 28840 POINT(635.657349 412.51004) 28841 POINT(344.639343 919.116394) 28842 POINT(320.142944 94.2584686) 28843 POINT(694.43927 425.134949) 28844 POINT(543.400879 598.333008) 28845 POINT(806.083801 913.001831) 28846 POINT(752.871948 148.773941) 28847 POINT(410.91568 791.153198) 28848 POINT(978.406738 388.286743) 28849 POINT(269.389465 397.744965) 28850 POINT(266.542664 723.750061) 28851 POINT(814.662415 925.726074) 28852 POINT(816.657654 27.2520409) 28853 POINT(515.427124 675.084229) 28854 POINT(865.622498 845.676392) 28855 POINT(706.987854 933.488403) 28856 POINT(910.592957 380.780029) 28857 POINT(783.461304 61.1523132) 28858 POINT(296.949097 313.323639) 28859 POINT(225.666428 319.860046) 28860 POINT(386.548615 911.671082) 28861 POINT(385.51532 656.323975) 28862 POINT(769.985901 30.5317097) 28863 POINT(263.409882 58.6196899) 28864 POINT(308.130066 452.963989) 28865 POINT(533.295837 549.208435) 28866 POINT(148.678055 332.811249) 28867 POINT(701.757751 172.496216) 28868 POINT(431.745819 170.432755) 28869 POINT(772.117249 58.087326) 28870 POINT(796.702271 107.59388) 28871 POINT(939.299377 387.597717) 28872 POINT(355.723022 303.976959) 28873 POINT(311.77243 723.452698) 28874 POINT(786.223938 594.880371) 28875 POINT(166.772461 48.4771271) 28876 POINT(95.873024 504.830444) 28877 POINT(846.056152 156.899384) 28878 POINT(364.845154 373.200378) 28879 POINT(721.466675 887.858765) 28880 POINT(8.06932354 844.302734) 28881 POINT(160.653564 524.47876) 28882 POINT(416.248444 185.21048) 28883 POINT(639.492554 433.527039) 28884 POINT(22.3462219 859.806213) 28885 POINT(943.365234 396.722565) 28886 POINT(147.109634 937.922852) 28887 POINT(216.859116 804.605286) 28888 POINT(353.221313 325.211578) 28889 POINT(731.147156 932.89563) 28890 POINT(386.17569 424.469147) 28891 POINT(988.937866 400.428741) 28892 POINT(207.390594 785.112122) 28893 POINT(855.202087 883.639954) 28894 POINT(690.971924 57.4701271) 28895 POINT(42.7707634 517.443054) 28896 POINT(522.640381 276.368195) 28897 POINT(578.367676 694.022095) 28898 POINT(923.424072 178.493713) 28899 POINT(987.815063 243.034973) 28900 POINT(440.764832 75.340744) 28901 POINT(358.301971 68.0994186) 28902 POINT(77.7516098 313.750031) 28903 POINT(228.100327 69.930603) 28904 POINT(42.4743805 755.512146) 28905 POINT(315.477753 716.470093) 28906 POINT(922.306946 83.0846329) 28907 POINT(402.403931 550.770203) 28908 POINT(853.724304 317.732391) 28909 POINT(536.752686 649.875427) 28910 POINT(451.608368 337.495972) 28911 POINT(988.937073 969.697876) 28912 POINT(770.589294 664.11731) 28913 POINT(803.291016 304.773376) 28914 POINT(235.632553 499.817047) 28915 POINT(107.163338 446.279602) 28916 POINT(343.75415 226.663651) 28917 POINT(695.870911 990.903931) 28918 POINT(500.50351 13.8649349) 28919 POINT(491.756805 106.789513) 28920 POINT(813.886658 132.93689) 28921 POINT(801.117493 636.218384) 28922 POINT(178.035645 269.276581) 28923 POINT(462.33786 958.881531) 28924 POINT(895.603821 893.72467) 28925 POINT(918.962036 571.147461) 28926 POINT(221.158478 362.412659) 28927 POINT(467.509155 887.889954) 28928 POINT(70.4378967 231.339417) 28929 POINT(754.633057 142.032211) 28930 POINT(198.070526 578.125732) 28931 POINT(442.845703 756.47876) 28932 POINT(68.1539841 332.291199) 28933 POINT(567.744568 272.646027) 28934 POINT(550.041077 532.852783) 28935 POINT(789.876831 934.085876) 28936 POINT(290.966583 504.342987) 28937 POINT(646.554199 703.085388) 28938 POINT(926.098022 506.406982) 28939 POINT(256.729889 708.586243) 28940 POINT(166.647156 945.497131) 28941 POINT(277.22049 526.910278) 28942 POINT(692.410706 608.005737) 28943 POINT(380.988831 939.822449) 28944 POINT(804.21051 91.2531738) 28945 POINT(85.8990707 820.264832) 28946 POINT(54.9970856 71.4892273) 28947 POINT(441.453552 3.13013506) 28948 POINT(869.813538 796.514526) 28949 POINT(245.772141 610.813232) 28950 POINT(231.454132 155.343903) 28951 POINT(57.8683281 540.709839) 28952 POINT(300.69397 429.811432) 28953 POINT(61.6160545 169.673431) 28954 POINT(760.732178 835.063232) 28955 POINT(676.320923 789.675659) 28956 POINT(331.423126 810.046814) 28957 POINT(871.268005 626.137085) 28958 POINT(349.542419 718.539124) 28959 POINT(182.896774 287.835999) 28960 POINT(319.442139 799.759766) 28961 POINT(36.3615761 202.8125) 28962 POINT(619.808228 389.592865) 28963 POINT(799.30481 571.739014) 28964 POINT(25.7949677 283.941742) 28965 POINT(33.9578552 947.93042) 28966 POINT(743.641296 690.419067) 28967 POINT(231.575302 76.2420044) 28968 POINT(332.168701 209.728394) 28969 POINT(306.207855 701.903625) 28970 POINT(230.643387 290.62796) 28971 POINT(766.562073 820.840088) 28972 POINT(856.795654 339.830078) 28973 POINT(576.938354 176.833298) 28974 POINT(66.9049759 258.738434) 28975 POINT(640.864746 625.21637) 28976 POINT(569.467651 381.352264) 28977 POINT(802.062195 450.505707) 28978 POINT(995.892395 251.385422) 28979 POINT(542.918762 534.952332) 28980 POINT(299.857697 191.696625) 28981 POINT(784.971375 880.525696) 28982 POINT(978.485901 366.171387) 28983 POINT(551.385498 858.064148) 28984 POINT(983.540771 834.522827) 28985 POINT(758.578979 429.583679) 28986 POINT(772.750183 666.004578) 28987 POINT(161.604935 714.005737) 28988 POINT(596.548889 361.289307) 28989 POINT(912.434814 659.455505) 28990 POINT(133.590607 875.931274) 28991 POINT(306.758636 279.008026) 28992 POINT(991.992371 327.681396) 28993 POINT(926.345337 199.185211) 28994 POINT(348.267792 777.882996) 28995 POINT(441.522156 975.09906) 28996 POINT(271.224548 219.273285) 28997 POINT(61.1888237 322.00296) 28998 POINT(695.813538 384.424286) 28999 POINT(823.369263 694.876099) 29000 POINT(897.221375 157.060181) 29001 POINT(253.122421 375.881592) 29002 POINT(946.712158 59.4994926) 29003 POINT(100.323257 780.078308) 29004 POINT(489.293518 481.035553) 29005 POINT(959.137024 204.237) 29006 POINT(203.780228 372.343018) 29007 POINT(193.833359 879.234375) 29008 POINT(125.943901 68.7773895) 29009 POINT(209.922684 366.128906) 29010 POINT(226.000092 620.129517) 29011 POINT(251.58667 998.136536) 29012 POINT(26.628788 536.047058) 29013 POINT(440.265472 919.42041) 29014 POINT(874.13031 635.605896) 29015 POINT(137.449814 26.6186829) 29016 POINT(683.375366 787.692505) 29017 POINT(187.705109 765.705933) 29018 POINT(470.238678 707.860535) 29019 POINT(524.36615 776.092529) 29020 POINT(869.654846 739.687744) 29021 POINT(676.93927 72.419487) 29022 POINT(672.87262 187.549469) 29023 POINT(160.918289 94.5235672) 29024 POINT(466.605255 416.928162) 29025 POINT(640.469238 85.3850784) 29026 POINT(935.402405 622.312744) 29027 POINT(293.397369 939.003418) 29028 POINT(715.642395 46.4417915) 29029 POINT(465.239319 724.175171) 29030 POINT(737.1427 73.7792435) 29031 POINT(542.604553 380.803162) 29032 POINT(331.694824 211.964706) 29033 POINT(900.52948 712.992188) 29034 POINT(555.179077 604.471375) 29035 POINT(758.242188 393.768219) 29036 POINT(892.741638 613.368103) 29037 POINT(114.119568 641.390991) 29038 POINT(979.394836 791.085327) 29039 POINT(503.634521 934.141357) 29040 POINT(59.0290146 483.213776) 29041 POINT(841.75061 272.011963) 29042 POINT(464.015594 520.037415) 29043 POINT(859.652588 258.378571) 29044 POINT(469.285858 252.753464) 29045 POINT(739.16626 616.594727) 29046 POINT(956.058716 251.829437) 29047 POINT(179.097885 645.246887) 29048 POINT(611.454224 630.977173) 29049 POINT(816.526306 786.895142) 29050 POINT(44.3939781 402.702393) 29051 POINT(271.434814 689.472229) 29052 POINT(571.896179 862.853699) 29053 POINT(11.7406435 393.72998) 29054 POINT(332.693726 485.209229) 29055 POINT(252.643143 116.429665) 29056 POINT(329.732971 566.697083) 29057 POINT(542.28125 315.223389) 29058 POINT(455.370514 173.753922) 29059 POINT(956.095154 630.846497) 29060 POINT(181.918839 215.629715) 29061 POINT(664.286194 984.433777) 29062 POINT(527.669983 516.806396) 29063 POINT(367.744873 657.215027) 29064 POINT(959.846436 24.4043941) 29065 POINT(863.278748 956.888306) 29066 POINT(849.407715 104.417839) 29067 POINT(22.5492039 955.587097) 29068 POINT(929.726135 730.384277) 29069 POINT(302.581573 410.156036) 29070 POINT(366.409119 117.824699) 29071 POINT(678.924622 3.65143442) 29072 POINT(656.67688 516.27063) 29073 POINT(563.514404 400.440979) 29074 POINT(734.531128 837.343628) 29075 POINT(874.174622 724.468872) 29076 POINT(656.412476 112.205971) 29077 POINT(325.720703 155.278214) 29078 POINT(828.215332 365.424164) 29079 POINT(156.206665 608.968689) 29080 POINT(358.60022 936.170288) 29081 POINT(656.477783 416.768341) 29082 POINT(188.842331 33.6390877) 29083 POINT(885.490173 533.2854) 29084 POINT(762.416931 984.126465) 29085 POINT(4.60104704 866.38623) 29086 POINT(217.727646 205.557739) 29087 POINT(506.089844 603.242065) 29088 POINT(177.520676 65.1599045) 29089 POINT(827.562805 960.252136) 29090 POINT(884.418884 961.860352) 29091 POINT(95.7408829 171.762131) 29092 POINT(612.602661 891.897583) 29093 POINT(19.7016354 82.8546982) 29094 POINT(343.025604 459.716553) 29095 POINT(822.316772 769.71936) 29096 POINT(698.878784 482.779358) 29097 POINT(954.908508 787.567078) 29098 POINT(127.632706 595.364258) 29099 POINT(657.671448 66.7110214) 29100 POINT(517.325989 310.294067) 29101 POINT(8.93165874 33.8983002) 29102 POINT(532.418396 966.990356) 29103 POINT(329.721863 135.466736) 29104 POINT(336.163544 638.082703) 29105 POINT(884.45105 754.274719) 29106 POINT(372.918518 34.4279671) 29107 POINT(29.7690239 232.081696) 29108 POINT(59.0246964 529.84845) 29109 POINT(926.331299 787.246765) 29110 POINT(571.949707 802.848755) 29111 POINT(834.438782 23.9894371) 29112 POINT(134.460052 84.3040314) 29113 POINT(884.968384 199.368683) 29114 POINT(917.022766 319.543915) 29115 POINT(150.256088 698.56604) 29116 POINT(783.857971 552.924622) 29117 POINT(262.405609 284.599731) 29118 POINT(895.649292 766.050476) 29119 POINT(743.749512 667.484192) 29120 POINT(667.564575 131.064774) 29121 POINT(458.899048 77.9278488) 29122 POINT(730.765076 952.294373) 29123 POINT(81.1155014 645.41217) 29124 POINT(527.929077 378.035614) 29125 POINT(426.873474 49.0172653) 29126 POINT(610.56189 575.08551) 29127 POINT(768.855225 726.379028) 29128 POINT(923.197388 418.02887) 29129 POINT(434.715881 752.033813) 29130 POINT(635.343079 690.21344) 29131 POINT(860.428223 707.104248) 29132 POINT(897.621155 301.312469) 29133 POINT(844.611633 599.403198) 29134 POINT(188.585449 465.558044) 29135 POINT(673.851562 313.816742) 29136 POINT(320.844757 163.91185) 29137 POINT(516.636536 600.108704) 29138 POINT(280.211945 432.041779) 29139 POINT(551.30542 177.563934) 29140 POINT(673.578735 114.030281) 29141 POINT(565.576233 857.236694) 29142 POINT(907.150024 129.915131) 29143 POINT(684.187866 372.739014) 29144 POINT(256.762329 94.7502899) 29145 POINT(717.45105 854.829651) 29146 POINT(629.569824 259.781006) 29147 POINT(725.696106 84.5307007) 29148 POINT(157.865067 325.097565) 29149 POINT(439.48291 80.7083817) 29150 POINT(370.767761 190.927628) 29151 POINT(417.893036 503.226318) 29152 POINT(820.669678 305.337677) 29153 POINT(350.249207 329.776001) 29154 POINT(914.48053 953.953186) 29155 POINT(871.351196 356.775848) 29156 POINT(733.827271 787.415161) 29157 POINT(156.025528 111.418159) 29158 POINT(695.48584 650.330322) 29159 POINT(452.848877 587.750671) 29160 POINT(578.668335 557.733032) 29161 POINT(504.827087 944.966125) 29162 POINT(257.664764 548.472473) 29163 POINT(460.226166 556.807861) 29164 POINT(158.19986 357.011108) 29165 POINT(701.416809 968.789673) 29166 POINT(188.273697 4.02673197) 29167 POINT(893.391663 811.997192) 29168 POINT(566.914124 770.748596) 29169 POINT(184.555878 211.43924) 29170 POINT(427.990845 741.534851) 29171 POINT(666.602295 901.724365) 29172 POINT(354.97876 463.857758) 29173 POINT(32.0300865 77.3585205) 29174 POINT(603.375488 965.264832) 29175 POINT(549.523804 928.910889) 29176 POINT(890.575317 704.322632) 29177 POINT(529.49292 85.0389099) 29178 POINT(431.696594 228.931976) 29179 POINT(973.208801 544.867554) 29180 POINT(730.596191 723.276978) 29181 POINT(15.9251385 662.090515) 29182 POINT(307.658844 987.190918) 29183 POINT(592.016541 863.624512) 29184 POINT(572.607483 92.6840515) 29185 POINT(801.516846 849.554749) 29186 POINT(897.373352 276.195618) 29187 POINT(153.626526 340.938751) 29188 POINT(279.928467 966.840332) 29189 POINT(943.037903 96.8855133) 29190 POINT(936.992065 26.1863728) 29191 POINT(796.685181 6.92428637) 29192 POINT(546.876343 730.214294) 29193 POINT(57.2677269 939.37793) 29194 POINT(461.74353 95.9791412) 29195 POINT(369.254761 567.229309) 29196 POINT(2.66697478 321.669769) 29197 POINT(154.816391 241.42392) 29198 POINT(375.679749 237.394928) 29199 POINT(741.117676 794.909302) 29200 POINT(940.160583 263.913666) 29201 POINT(684.673767 861.827393) 29202 POINT(613.262573 847.081787) 29203 POINT(369.122192 323.62265) 29204 POINT(399.584961 217.045761) 29205 POINT(594.083618 51.5114555) 29206 POINT(140.989197 543.845886) 29207 POINT(567.138062 422.50116) 29208 POINT(37.5646477 696.377808) 29209 POINT(228.845764 629.302612) 29210 POINT(700.577209 321.5224) 29211 POINT(30.823328 584.02533) 29212 POINT(68.2298508 447.228638) 29213 POINT(325.908569 998.078979) 29214 POINT(504.798157 270.579956) 29215 POINT(172.28653 788.459778) 29216 POINT(575.87384 853.190369) 29217 POINT(183.120316 361.419159) 29218 POINT(62.8709908 636.068726) 29219 POINT(730.861816 121.881866) 29220 POINT(667.573608 669.399719) 29221 POINT(330.267242 79.9929886) 29222 POINT(934.39563 285.18335) 29223 POINT(943.596069 19.5619144) 29224 POINT(259.382538 318.638947) 29225 POINT(671.033264 967.283447) 29226 POINT(489.127747 494.628479) 29227 POINT(282.681488 782.43103) 29228 POINT(771.151428 965.627991) 29229 POINT(117.273811 465.833862) 29230 POINT(684.46637 336.137421) 29231 POINT(396.948364 171.598633) 29232 POINT(642.726501 593.659668) 29233 POINT(195.004669 68.0632858) 29234 POINT(463.345306 837.908569) 29235 POINT(430.666962 824.358398) 29236 POINT(378.221039 347.769287) 29237 POINT(965.764404 49.7971687) 29238 POINT(622.29126 530.389099) 29239 POINT(335.289215 954.847595) 29240 POINT(775.251221 479.917084) 29241 POINT(877.516174 570.009338) 29242 POINT(902.72998 946.748413) 29243 POINT(138.394409 303.502533) 29244 POINT(102.472466 334.203735) 29245 POINT(836.013794 456.875092) 29246 POINT(618.193787 141.548813) 29247 POINT(388.98526 581.677002) 29248 POINT(251.447052 943.925598) 29249 POINT(870.562805 548.085327) 29250 POINT(345.903076 315.534149) 29251 POINT(159.414352 721.27063) 29252 POINT(307.821167 977.317627) 29253 POINT(257.367188 282.473785) 29254 POINT(83.2646408 190.122208) 29255 POINT(51.6028786 83.9368591) 29256 POINT(561.982117 965.118835) 29257 POINT(859.159241 350.361603) 29258 POINT(798.151184 862.099426) 29259 POINT(628.847168 410.4198) 29260 POINT(710.81427 970.636475) 29261 POINT(741.566895 601.622925) 29262 POINT(486.395111 487.181793) 29263 POINT(574.390869 697.79425) 29264 POINT(889.865295 121.772476) 29265 POINT(834.683167 83.3298874) 29266 POINT(690.750977 290.519226) 29267 POINT(664.073181 380.860138) 29268 POINT(219.18219 714.515015) 29269 POINT(522.557129 32.9339447) 29270 POINT(932.651245 82.8846283) 29271 POINT(332.747864 163.668839) 29272 POINT(746.269104 918.68811) 29273 POINT(563.836121 888.294067) 29274 POINT(661.399902 673.203308) 29275 POINT(212.797836 598.136475) 29276 POINT(26.0664825 469.290466) 29277 POINT(673.546082 892.462952) 29278 POINT(135.01915 311.242676) 29279 POINT(527.956055 38.9242821) 29280 POINT(90.5451813 110.543007) 29281 POINT(429.002869 668.994202) 29282 POINT(112.784355 568.694885) 29283 POINT(636.773865 917.244141) 29284 POINT(229.455032 974.805908) 29285 POINT(902.108521 222.634811) 29286 POINT(361.553406 872.551636) 29287 POINT(337.461945 370.972717) 29288 POINT(828.962341 524.812683) 29289 POINT(565.791443 180.619568) 29290 POINT(756.315979 241.581207) 29291 POINT(769.461426 144.435684) 29292 POINT(496.356201 165.208954) 29293 POINT(574.108337 731.384216) 29294 POINT(189.959412 644.884949) 29295 POINT(876.986023 328.447876) 29296 POINT(836.69928 138.172897) 29297 POINT(473.534424 640.36731) 29298 POINT(598.067871 800.922302) 29299 POINT(435.907562 949.674622) 29300 POINT(541.24292 857.9328) 29301 POINT(767.223816 926.670715) 29302 POINT(151.641205 166.058731) 29303 POINT(587.74231 638.103271) 29304 POINT(897.623108 410.286377) 29305 POINT(524.53302 269.702393) 29306 POINT(73.9417801 323.604095) 29307 POINT(673.125732 602.392273) 29308 POINT(438.298065 545.765808) 29309 POINT(404.85553 981.523254) 29310 POINT(597.245728 977.474365) 29311 POINT(912.048645 925.091614) 29312 POINT(206.384247 128.881393) 29313 POINT(47.8246918 428.475922) 29314 POINT(291.097412 279.021729) 29315 POINT(139.257706 753.203857) 29316 POINT(36.9922867 670.915466) 29317 POINT(771.199585 114.770599) 29318 POINT(365.734924 271.244568) 29319 POINT(370.609741 304.282501) 29320 POINT(327.360107 270.028015) 29321 POINT(913.25647 251.057266) 29322 POINT(582.67511 821.500183) 29323 POINT(449.797821 734.241089) 29324 POINT(0.525768638 9.97342682) 29325 POINT(958.26593 522.614563) 29326 POINT(89.0171127 532.009766) 29327 POINT(404.753754 820.272766) 29328 POINT(754.9776 627.51825) 29329 POINT(791.644226 944.636597) 29330 POINT(832.843506 766.857544) 29331 POINT(429.161987 100.755676) 29332 POINT(236.664825 48.6874046) 29333 POINT(45.6242027 146.201263) 29334 POINT(214.168411 114.850204) 29335 POINT(596.903564 583.748108) 29336 POINT(469.946777 215.256577) 29337 POINT(516.80011 159.854477) 29338 POINT(279.202759 319.517944) 29339 POINT(515.881958 386.651886) 29340 POINT(740.504883 475.446808) 29341 POINT(63.6576271 810.347412) 29342 POINT(75.2759705 950.700867) 29343 POINT(132.564346 701.850342) 29344 POINT(135.935913 696.566895) 29345 POINT(225.208405 93.9137573) 29346 POINT(749.5755 866.579834) 29347 POINT(809.706238 296.603241) 29348 POINT(118.690964 172.387726) 29349 POINT(41.1065521 518.577515) 29350 POINT(596.93396 820.674744) 29351 POINT(617.108276 350.20755) 29352 POINT(831.220032 344.322327) 29353 POINT(199.131882 236.331207) 29354 POINT(540.215637 405.246063) 29355 POINT(498.889099 807.409912) 29356 POINT(314.626831 333.023926) 29357 POINT(687.6828 939.62854) 29358 POINT(461.423462 890.701538) 29359 POINT(610.638245 584.282898) 29360 POINT(459.833923 285.803864) 29361 POINT(588.929504 917.484192) 29362 POINT(392.467499 420.022156) 29363 POINT(655.949036 901.253235) 29364 POINT(304.204376 585.309875) 29365 POINT(512.536011 370.577972) 29366 POINT(821.608154 447.886932) 29367 POINT(494.210999 737.698669) 29368 POINT(236.760223 36.1944733) 29369 POINT(440.366882 70.1092224) 29370 POINT(274.905273 276.088898) 29371 POINT(640.177185 903.503357) 29372 POINT(781.584045 249.042328) 29373 POINT(429.353363 711.751648) 29374 POINT(891.576111 29.9999199) 29375 POINT(530.70166 505.191864) 29376 POINT(891.685242 574.614502) 29377 POINT(702.700317 863.908081) 29378 POINT(927.985291 445.255341) 29379 POINT(595.17804 647.736145) 29380 POINT(104.557922 106.506264) 29381 POINT(148.873779 238.567642) 29382 POINT(997.05957 389.493317) 29383 POINT(233.590485 57.8567429) 29384 POINT(485.852173 466.604919) 29385 POINT(143.316605 123.418655) 29386 POINT(378.241211 130.898788) 29387 POINT(779.722839 940.616516) 29388 POINT(19.0265579 315.272003) 29389 POINT(909.5979 205.47258) 29390 POINT(917.663818 983.464539) 29391 POINT(406.953461 788.33197) 29392 POINT(986.544189 786.964722) 29393 POINT(344.708649 689.305664) 29394 POINT(879.054443 108.297775) 29395 POINT(720.197205 49.3026733) 29396 POINT(932.120728 342.049225) 29397 POINT(347.475281 567.126221) 29398 POINT(602.936707 930.962463) 29399 POINT(469.937317 533.58728) 29400 POINT(993.727844 846.848328) 29401 POINT(209.569229 133.228226) 29402 POINT(985.029968 846.764343) 29403 POINT(422.924438 184.029633) 29404 POINT(753.499695 46.5045128) 29405 POINT(555.34967 351.99115) 29406 POINT(594.30896 629.046692) 29407 POINT(929.001221 372.966949) 29408 POINT(263.388641 979.02948) 29409 POINT(649.783386 486.440613) 29410 POINT(717.009827 229.981873) 29411 POINT(134.645386 198.526505) 29412 POINT(574.356689 293.948364) 29413 POINT(632.944031 473.483124) 29414 POINT(734.938232 469.005463) 29415 POINT(111.205307 349.145538) 29416 POINT(922.089722 885.238342) 29417 POINT(385.101166 892.281616) 29418 POINT(24.7549667 440.954926) 29419 POINT(389.436371 980.924744) 29420 POINT(703.663208 725.79834) 29421 POINT(278.166199 13.8390398) 29422 POINT(999.486633 344.138885) 29423 POINT(521.828186 709.652527) 29424 POINT(517.284607 299.476929) 29425 POINT(27.2716713 342.709686) 29426 POINT(4.32646275 827.976746) 29427 POINT(330.346283 257.813507) 29428 POINT(831.183716 566.723938) 29429 POINT(220.516647 265.858307) 29430 POINT(525.86377 890.512695) 29431 POINT(439.594116 516.622192) 29432 POINT(297.916077 971.220337) 29433 POINT(875.419861 909.039917) 29434 POINT(577.198181 818.021606) 29435 POINT(544.034363 784.097839) 29436 POINT(336.791138 597.380432) 29437 POINT(547.3797 67.6739807) 29438 POINT(180.966568 652.090088) 29439 POINT(612.791443 722.424683) 29440 POINT(369.831543 222.40918) 29441 POINT(98.4473419 127.038322) 29442 POINT(588.131226 193.967209) 29443 POINT(896.689453 141.316879) 29444 POINT(15.6151028 671.636597) 29445 POINT(223.978958 215.7099) 29446 POINT(242.446396 611.646851) 29447 POINT(169.563202 58.8349571) 29448 POINT(620.546875 582.139954) 29449 POINT(230.238022 446.530853) 29450 POINT(528.842346 302.05423) 29451 POINT(109.512375 617.077209) 29452 POINT(738.553833 407.204163) 29453 POINT(357.779022 990.980225) 29454 POINT(28.5359211 778.876587) 29455 POINT(105.651596 337.39502) 29456 POINT(557.889343 252.959305) 29457 POINT(153.450638 905.682617) 29458 POINT(344.496338 5.98885489) 29459 POINT(62.0426483 888.258728) 29460 POINT(817.681274 928.573547) 29461 POINT(8.11371613 83.8874512) 29462 POINT(557.96582 777.092163) 29463 POINT(962.877014 8.62691879) 29464 POINT(457.051422 412.668457) 29465 POINT(997.67865 440.103577) 29466 POINT(30.0551071 454.094604) 29467 POINT(61.610466 480.648224) 29468 POINT(96.0803146 791.163513) 29469 POINT(591.822998 452.675201) 29470 POINT(572.003357 619.929504) 29471 POINT(561.633545 77.7516251) 29472 POINT(460.586334 605.544373) 29473 POINT(627.759155 486.937622) 29474 POINT(973.51355 975.919678) 29475 POINT(567.195557 227.657852) 29476 POINT(31.6334076 465.590393) 29477 POINT(185.679199 900.692017) 29478 POINT(500.643494 119.460106) 29479 POINT(900.681396 724.57074) 29480 POINT(525.876831 726.883667) 29481 POINT(648.011902 794.09021) 29482 POINT(253.053925 674.706238) 29483 POINT(105.974075 200.784103) 29484 POINT(294.302368 10.9631176) 29485 POINT(276.384399 407.622467) 29486 POINT(204.984512 617.118469) 29487 POINT(587.518433 225.166809) 29488 POINT(364.608459 354.775024) 29489 POINT(98.189949 594.751892) 29490 POINT(345.150085 532.127686) 29491 POINT(370.834534 834.463745) 29492 POINT(646.427734 816.110168) 29493 POINT(758.919312 499.841949) 29494 POINT(577.818481 978.850891) 29495 POINT(412.611206 23.0791912) 29496 POINT(768.778137 433.007782) 29497 POINT(266.922729 557.373413) 29498 POINT(950.652466 91.7001724) 29499 POINT(737.14447 217.983215) 29500 POINT(125.579826 537.645264) 29501 POINT(234.026016 195.050919) 29502 POINT(334.468628 45.8914337) 29503 POINT(930.76709 47.6106987) 29504 POINT(967.77002 559.020996) 29505 POINT(298.433197 171.248291) 29506 POINT(895.885498 37.2748718) 29507 POINT(687.048706 777.096985) 29508 POINT(799.491821 613.777527) 29509 POINT(905.604858 306.34549) 29510 POINT(575.904602 982.571716) 29511 POINT(162.92923 626.922241) 29512 POINT(911.029358 380.801117) 29513 POINT(518.310059 477.860321) 29514 POINT(315.788208 233.016907) 29515 POINT(879.580566 818.01239) 29516 POINT(612.607056 982.772461) 29517 POINT(628.807251 140.880188) 29518 POINT(956.166504 212.57077) 29519 POINT(781.674438 593.571228) 29520 POINT(620.865479 856.633118) 29521 POINT(654.116638 308.150757) 29522 POINT(576.129883 41.2774048) 29523 POINT(854.867371 656.395569) 29524 POINT(93.7712555 884.970154) 29525 POINT(909.605896 878.279175) 29526 POINT(536.129395 885.010864) 29527 POINT(393.696442 430.149963) 29528 POINT(9.91594315 381.612122) 29529 POINT(376.617096 435.86261) 29530 POINT(641.831238 984.764893) 29531 POINT(610.71167 304.056549) 29532 POINT(944.600708 877.266724) 29533 POINT(906.622437 163.952393) 29534 POINT(655.639587 61.8058205) 29535 POINT(782.555237 552.68042) 29536 POINT(807.802246 34.8214836) 29537 POINT(837.401794 307.117706) 29538 POINT(848.42334 69.4221115) 29539 POINT(539.828613 935.967896) 29540 POINT(778.058411 438.965729) 29541 POINT(735.995667 702.472656) 29542 POINT(406.053375 67.6682587) 29543 POINT(224.973358 79.4218369) 29544 POINT(491.508606 451.083649) 29545 POINT(128.69278 256.382904) 29546 POINT(283.674438 334.414978) 29547 POINT(466.022034 610.27478) 29548 POINT(526.768616 797.904907) 29549 POINT(630.069946 886.169983) 29550 POINT(535.210266 694.181396) 29551 POINT(243.961349 682.746765) 29552 POINT(364.015381 71.1899261) 29553 POINT(841.110779 368.981659) 29554 POINT(236.416824 445.639191) 29555 POINT(767.579163 963.95166) 29556 POINT(290.601776 855.765564) 29557 POINT(750.685669 744.099731) 29558 POINT(866.871338 199.342377) 29559 POINT(412.052643 371.742523) 29560 POINT(175.718018 774.515625) 29561 POINT(145.184753 400.307434) 29562 POINT(419.604645 399.151428) 29563 POINT(826.166138 856.762329) 29564 POINT(643.060242 341.470154) 29565 POINT(707.85321 746.5401) 29566 POINT(566.653931 293.982788) 29567 POINT(67.929863 303.193939) 29568 POINT(933.162842 147.92659) 29569 POINT(72.3852463 411.894775) 29570 POINT(924.63385 650.931091) 29571 POINT(289.50531 186.179245) 29572 POINT(665.997009 571.57428) 29573 POINT(84.5915756 250.175858) 29574 POINT(836.494629 556.473083) 29575 POINT(59.7231941 968.603577) 29576 POINT(789.631165 894.883667) 29577 POINT(921.463379 34.5047989) 29578 POINT(113.955429 239.378754) 29579 POINT(886.115356 345.918976) 29580 POINT(232.197876 446.559998) 29581 POINT(518.712341 619.124695) 29582 POINT(869.671265 967.116821) 29583 POINT(878.262634 354.905884) 29584 POINT(162.102509 138.650894) 29585 POINT(965.87561 518.38092) 29586 POINT(909.013855 716.957825) 29587 POINT(780.395569 50.749157) 29588 POINT(305.358856 561.935791) 29589 POINT(142.331131 306.961426) 29590 POINT(148.414688 503.640991) 29591 POINT(793.565063 926.531555) 29592 POINT(469.128723 623.514282) 29593 POINT(888.076965 980.831238) 29594 POINT(180.540787 957.385254) 29595 POINT(706.33606 500.223938) 29596 POINT(276.989685 563.050293) 29597 POINT(429.887238 434.897614) 29598 POINT(416.142914 989.189209) 29599 POINT(857.837219 526.477966) 29600 POINT(134.149979 67.9167709) 29601 POINT(616.462402 511.293976) 29602 POINT(198.236694 154.77832) 29603 POINT(368.134125 104.003891) 29604 POINT(609.774841 122.525536) 29605 POINT(755.452698 651.271851) 29606 POINT(906.347595 634.2229) 29607 POINT(888.276184 544.04248) 29608 POINT(748.783691 173.416153) 29609 POINT(490.738678 44.0419235) 29610 POINT(346.870331 581.162537) 29611 POINT(845.998962 241.416519) 29612 POINT(306.923523 169.21579) 29613 POINT(210.112198 307.507324) 29614 POINT(660.164673 963.738342) 29615 POINT(792.948608 946.87439) 29616 POINT(540.618164 43.3719711) 29617 POINT(931.508057 158.682343) 29618 POINT(565.828369 918.74823) 29619 POINT(995.425598 777.913879) 29620 POINT(977.03949 247.599014) 29621 POINT(480.195251 235.693344) 29622 POINT(14.6603813 71.2037506) 29623 POINT(853.029663 25.0022202) 29624 POINT(540.041443 15.2675877) 29625 POINT(39.8438568 218.608597) 29626 POINT(219.145584 233.38121) 29627 POINT(78.2192764 311.083405) 29628 POINT(514.042236 136.506393) 29629 POINT(837.141357 662.946045) 29630 POINT(593.864014 390.625061) 29631 POINT(824.682922 944.492004) 29632 POINT(90.6375809 160.573837) 29633 POINT(802.640686 507.559601) 29634 POINT(353.04776 905.573853) 29635 POINT(113.551361 368.86792) 29636 POINT(661.670532 106.096489) 29637 POINT(539.779846 47.705574) 29638 POINT(384.578186 428.144379) 29639 POINT(973.863037 458.393555) 29640 POINT(597.680725 956.060425) 29641 POINT(829.51947 274.443451) 29642 POINT(548.037537 85.5232086) 29643 POINT(687.328674 32.6519852) 29644 POINT(982.100098 441.980377) 29645 POINT(199.805603 873.125366) 29646 POINT(728.998352 144.578888) 29647 POINT(407.321655 372.63028) 29648 POINT(659.258423 880.461182) 29649 POINT(797.068787 846.581543) 29650 POINT(822.555176 488.522186) 29651 POINT(208.156616 707.869507) 29652 POINT(998.205811 115.403931) 29653 POINT(911.231812 682.709961) 29654 POINT(316.17276 930.305969) 29655 POINT(313.098297 614.489197) 29656 POINT(974.556274 940.399963) 29657 POINT(26.2043056 221.529266) 29658 POINT(295.245514 597.169922) 29659 POINT(848.178162 14.7901268) 29660 POINT(529.000671 728.393311) 29661 POINT(194.600815 893.357727) 29662 POINT(504.333801 363.90033) 29663 POINT(973.777527 1.36736465) 29664 POINT(673.833496 379.482483) 29665 POINT(868.426819 797.629578) 29666 POINT(562.861633 586.787659) 29667 POINT(657.069275 22.1397533) 29668 POINT(487.78183 112.77034) 29669 POINT(56.7348213 170.964508) 29670 POINT(556.132263 195.930481) 29671 POINT(665.793213 57.4309425) 29672 POINT(964.622437 74.4614182) 29673 POINT(826.760559 153.455795) 29674 POINT(0.837330878 540.446838) 29675 POINT(587.472473 296.211975) 29676 POINT(662.515686 211.943466) 29677 POINT(716.807129 403.744568) 29678 POINT(618.805725 249.319534) 29679 POINT(808.061646 475.842804) 29680 POINT(238.682297 372.380249) 29681 POINT(587.152832 36.2999268) 29682 POINT(443.559418 770.014648) 29683 POINT(420.149689 488.126404) 29684 POINT(247.993103 124.381165) 29685 POINT(799.515686 558.42511) 29686 POINT(531.312317 177.677567) 29687 POINT(973.224243 74.2156525) 29688 POINT(34.2380867 372.602386) 29689 POINT(386.116608 969.862366) 29690 POINT(951.370483 309.624451) 29691 POINT(827.135376 431.890167) 29692 POINT(149.28537 437.673401) 29693 POINT(46.1396561 954.470398) 29694 POINT(790.460632 273.011261) 29695 POINT(624.781616 340.946106) 29696 POINT(498.037018 907.631836) 29697 POINT(390.396667 141.299698) 29698 POINT(621.334412 897.97644) 29699 POINT(61.1716805 975.919067) 29700 POINT(326.033325 232.088058) 29701 POINT(844.260742 741.492493) 29702 POINT(258.068176 764.217346) 29703 POINT(693.400085 920.086792) 29704 POINT(241.752747 726.631592) 29705 POINT(14.4411974 477.786743) 29706 POINT(648.794922 15.8752031) 29707 POINT(9.70636559 20.674242) 29708 POINT(697.099792 382.527893) 29709 POINT(126.930267 615.003296) 29710 POINT(441.178497 297.76593) 29711 POINT(355.671265 632.411743) 29712 POINT(737.269043 635.546143) 29713 POINT(351.459717 72.7486954) 29714 POINT(96.7590408 795.410461) 29715 POINT(601.735046 485.070862) 29716 POINT(375.11734 37.7949066) 29717 POINT(442.063263 55.666153) 29718 POINT(427.368469 541.979919) 29719 POINT(628.607239 880.33252) 29720 POINT(645.374084 597.734009) 29721 POINT(143.848633 371.920319) 29722 POINT(80.1366272 867.186951) 29723 POINT(805.76886 174.315247) 29724 POINT(250.461884 406.067932) 29725 POINT(242.840836 627.201477) 29726 POINT(807.177551 106.317101) 29727 POINT(643.151245 534.320312) 29728 POINT(722.396973 49.0170059) 29729 POINT(968.765869 779.387695) 29730 POINT(321.866791 462.009827) 29731 POINT(707.208984 771.82605) 29732 POINT(194.184464 225.499969) 29733 POINT(699.902283 118.103897) 29734 POINT(165.689728 217.060684) 29735 POINT(709.986145 648.490417) 29736 POINT(199.316727 931.052124) 29737 POINT(564.635437 593.769409) 29738 POINT(287.963013 333.432343) 29739 POINT(403.40918 427.896698) 29740 POINT(399.431122 548.841248) 29741 POINT(586.107605 562.326355) 29742 POINT(975.299316 840.825012) 29743 POINT(540.921265 603.006104) 29744 POINT(777.876282 196.932541) 29745 POINT(474.363739 434.692993) 29746 POINT(358.507935 317.570923) 29747 POINT(704.707214 667.754211) 29748 POINT(630.88324 720.994446) 29749 POINT(34.652565 424.088043) 29750 POINT(971.692566 197.282227) 29751 POINT(239.139084 520.957458) 29752 POINT(638.231873 792.923645) 29753 POINT(431.048157 569.723022) 29754 POINT(741.629028 596.594971) 29755 POINT(879.707275 591.671753) 29756 POINT(401.748962 678.408691) 29757 POINT(221.316696 481.961761) 29758 POINT(345.075287 852.516541) 29759 POINT(921.583252 57.370903) 29760 POINT(102.669365 370.240784) 29761 POINT(161.960052 801.897156) 29762 POINT(87.4865494 982.297363) 29763 POINT(933.09375 589.790344) 29764 POINT(347.837158 949.217285) 29765 POINT(271.625977 197.397675) 29766 POINT(328.678864 834.412292) 29767 POINT(86.7687607 908.007385) 29768 POINT(849.918701 230.774857) 29769 POINT(536.582397 828.026489) 29770 POINT(9.30486202 786.151184) 29771 POINT(154.25824 44.3065071) 29772 POINT(318.2453 983.027344) 29773 POINT(943.711243 602.839172) 29774 POINT(16.5749111 461.481445) 29775 POINT(91.2958755 635.603638) 29776 POINT(824.597778 260.6716) 29777 POINT(234.48439 227.915985) 29778 POINT(968.478638 92.2602692) 29779 POINT(925.020508 741.681641) 29780 POINT(952.191956 689.265869) 29781 POINT(887.643799 994.58728) 29782 POINT(492.830444 826.538086) 29783 POINT(348.348785 661.213684) 29784 POINT(236.316895 855.671265) 29785 POINT(358.813202 494.661835) 29786 POINT(230.784698 499.608429) 29787 POINT(24.7253895 967.529846) 29788 POINT(761.526184 312.989441) 29789 POINT(532.029175 965.569702) 29790 POINT(604.034668 126.624481) 29791 POINT(111.46048 518.306946) 29792 POINT(292.975128 92.1149673) 29793 POINT(671.18512 766.181763) 29794 POINT(850.731567 650.014709) 29795 POINT(920.99585 506.840088) 29796 POINT(988.443787 27.0635872) 29797 POINT(898.640625 563.171387) 29798 POINT(957.228638 280.59668) 29799 POINT(956.824951 717.278748) 29800 POINT(562.780029 647.523499) 29801 POINT(373.756561 168.134064) 29802 POINT(891.076904 108.200012) 29803 POINT(784.4245 22.1891479) 29804 POINT(757.942871 869.617859) 29805 POINT(895.873047 607.281799) 29806 POINT(975.268616 525.774292) 29807 POINT(327.437958 818.02948) 29808 POINT(109.521301 224.655304) 29809 POINT(614.256592 928.382751) 29810 POINT(334.544983 410.372314) 29811 POINT(215.484253 532.601562) 29812 POINT(294.548981 905.683228) 29813 POINT(891.799438 453.715973) 29814 POINT(91.655426 935.062012) 29815 POINT(752.347839 558.269531) 29816 POINT(795.630676 482.94986) 29817 POINT(139.762299 673.163757) 29818 POINT(394.775238 347.735748) 29819 POINT(921.93927 965.712585) 29820 POINT(222.841934 741.917664) 29821 POINT(617.610229 738.165527) 29822 POINT(416.859772 45.9482765) 29823 POINT(604.29718 135.204605) 29824 POINT(397.558136 731.262146) 29825 POINT(774.997681 565.109131) 29826 POINT(183.532578 801.330383) 29827 POINT(835.037781 5.89104939) 29828 POINT(221.314835 773.32666) 29829 POINT(702.21759 885.835388) 29830 POINT(458.175781 42.7877007) 29831 POINT(509.036987 988.259583) 29832 POINT(427.996674 885.795349) 29833 POINT(650.93811 193.285889) 29834 POINT(941.211609 694.609131) 29835 POINT(402.767975 710.977478) 29836 POINT(549.096985 790.884033) 29837 POINT(388.805115 421.923035) 29838 POINT(725.133362 183.77356) 29839 POINT(769.594482 680.495483) 29840 POINT(809.486206 447.137146) 29841 POINT(359.50116 375.404633) 29842 POINT(287.665283 880.156982) 29843 POINT(48.4580154 620.294373) 29844 POINT(215.071808 828.960693) 29845 POINT(234.104721 368.09613) 29846 POINT(302.501038 414.006317) 29847 POINT(418.775726 726.376953) 29848 POINT(793.928345 500.30658) 29849 POINT(460.104828 282.355194) 29850 POINT(200.389725 26.9606037) 29851 POINT(33.0015717 326.584869) 29852 POINT(808.921143 381.466095) 29853 POINT(841.182007 260.125153) 29854 POINT(722.910583 356.064575) 29855 POINT(763.184387 463.546112) 29856 POINT(772.542847 991.717163) 29857 POINT(13.8750925 545.225159) 29858 POINT(677.095947 824.632385) 29859 POINT(208.990051 734.535706) 29860 POINT(263.626831 365.60965) 29861 POINT(926.511047 571.82666) 29862 POINT(721.133789 119.484978) 29863 POINT(532.037781 316.258636) 29864 POINT(870.797363 786.963013) 29865 POINT(71.2831879 254.957321) 29866 POINT(289.700348 70.9972763) 29867 POINT(405.032898 478.54071) 29868 POINT(68.9612579 462.187805) 29869 POINT(272.119812 580.474426) 29870 POINT(702.044312 620.556641) 29871 POINT(994.061707 48.1390762) 29872 POINT(472.841461 263.333679) 29873 POINT(288.994751 14.8029919) 29874 POINT(86.7647858 459.446899) 29875 POINT(428.547058 222.361786) 29876 POINT(705.497925 711.303589) 29877 POINT(363.58783 958.833435) 29878 POINT(4.29390383 353.837158) 29879 POINT(655.744934 851.911072) 29880 POINT(69.9765396 440.9646) 29881 POINT(101.711395 455.726501) 29882 POINT(551.417542 132.468567) 29883 POINT(925.296997 813.342651) 29884 POINT(318.673035 492.424072) 29885 POINT(764.677307 628.974243) 29886 POINT(291.735748 806.795776) 29887 POINT(404.234924 373.758972) 29888 POINT(77.6921768 906.528625) 29889 POINT(124.786156 874.917786) 29890 POINT(571.78656 317.754608) 29891 POINT(583.966492 513.832153) 29892 POINT(902.430054 267.683044) 29893 POINT(529.378296 663.023132) 29894 POINT(654.625671 958.99054) 29895 POINT(208.15593 19.9770813) 29896 POINT(515.801147 33.3756142) 29897 POINT(713.394348 907.569458) 29898 POINT(630.976196 613.298401) 29899 POINT(424.043182 782.473633) 29900 POINT(511.97757 717.333923) 29901 POINT(202.150314 266.004395) 29902 POINT(252.632034 557.185059) 29903 POINT(739.630615 143.562607) 29904 POINT(696.203491 252.026047) 29905 POINT(854.040649 392.073486) 29906 POINT(673.618652 737.883789) 29907 POINT(155.297562 328.015747) 29908 POINT(275.192413 146.260208) 29909 POINT(207.140335 125.931427) 29910 POINT(581.686462 107.811531) 29911 POINT(530.78656 958.408936) 29912 POINT(312.811249 374.924591) 29913 POINT(814.18396 838.795532) 29914 POINT(356.031097 813.373535) 29915 POINT(847.137573 408.301727) 29916 POINT(222.199066 290.449341) 29917 POINT(677.159729 666.30249) 29918 POINT(696.705627 778.186646) 29919 POINT(528.029175 278.755005) 29920 POINT(578.165344 229.36055) 29921 POINT(225.761108 162.581436) 29922 POINT(637.010559 495.203369) 29923 POINT(396.119568 597.093445) 29924 POINT(202.656509 902.335938) 29925 POINT(23.2001514 986.157593) 29926 POINT(972.216492 647.885498) 29927 POINT(157.361252 431.547607) 29928 POINT(301.27536 102.460716) 29929 POINT(528.390747 589.153137) 29930 POINT(916.296692 517.488098) 29931 POINT(529.897644 491.385651) 29932 POINT(410.283844 743.921021) 29933 POINT(795.270813 522.852295) 29934 POINT(232.91478 1.68083692) 29935 POINT(264.032043 939.372131) 29936 POINT(51.2136917 752.16156) 29937 POINT(948.038818 895.550049) 29938 POINT(177.734665 469.145386) 29939 POINT(335.891998 81.8674774) 29940 POINT(284.156006 866.573364) 29941 POINT(635.337341 722.705627) 29942 POINT(336.189789 605.453674) 29943 POINT(539.795532 821.608643) 29944 POINT(800.995544 988.066284) 29945 POINT(436.926453 394.772125) 29946 POINT(844.168762 867.444397) 29947 POINT(552.957703 759.187195) 29948 POINT(806.300598 306.419495) 29949 POINT(373.144104 254.677429) 29950 POINT(538.644897 156.480698) 29951 POINT(301.059937 611.469299) 29952 POINT(696.275696 76.093956) 29953 POINT(250.462082 324.780579) 29954 POINT(301.098175 845.384216) 29955 POINT(114.335533 178.676361) 29956 POINT(465.127533 574.227722) 29957 POINT(565.701172 552.231689) 29958 POINT(228.646545 349.506226) 29959 POINT(731.210022 436.573578) 29960 POINT(843.393372 470.825623) 29961 POINT(86.9784088 552.013062) 29962 POINT(296.126678 19.3100586) 29963 POINT(680.165405 456.189606) 29964 POINT(404.221954 568.693481) 29965 POINT(31.2169342 718.542297) 29966 POINT(856.931763 250.003281) 29967 POINT(950.382263 760.716553) 29968 POINT(261.296661 629.4552) 29969 POINT(966.05603 749.56897) 29970 POINT(671.236267 353.171631) 29971 POINT(147.844406 417.716644) 29972 POINT(526.032715 792.031982) 29973 POINT(178.25795 80.1974716) 29974 POINT(147.306549 916.031494) 29975 POINT(525.975708 634.488464) 29976 POINT(391.877472 911.250061) 29977 POINT(271.214691 460.221893) 29978 POINT(134.917542 85.8314056) 29979 POINT(378.509949 875.42218) 29980 POINT(569.986938 996.78363) 29981 POINT(180.91684 924.558533) 29982 POINT(919.465393 460.097015) 29983 POINT(287.178101 552.399475) 29984 POINT(813.248291 816.428345) 29985 POINT(632.753357 704.414246) 29986 POINT(31.1866398 37.8282623) 29987 POINT(627.929993 152.770599) 29988 POINT(434.561768 642.739563) 29989 POINT(300.769989 205.930191) 29990 POINT(105.964027 992.421448) 29991 POINT(556.790222 264.167938) 29992 POINT(50.4922867 68.3591156) 29993 POINT(576.520752 43.3917694) 29994 POINT(312.521088 864.002869) 29995 POINT(420.081085 331.391174) 29996 POINT(262.845367 792.892944) 29997 POINT(906.405884 255.697845) 29998 POINT(795.375732 137.02536) 29999 POINT(163.628067 137.826859) 30000 POINT(628.417664 292.991394) 30001 POINT(114.39669 257.632935) 30002 POINT(173.745132 68.3913956) 30003 POINT(851.695679 942.340332) 30004 POINT(61.117775 327.322449) 30005 POINT(991.305481 781.588501) 30006 POINT(383.663635 62.0334358) 30007 POINT(848.785522 922.305908) 30008 POINT(760.847839 299.418335) 30009 POINT(702.26709 50.7303658) 30010 POINT(53.89608 847.79303) 30011 POINT(566.059875 74.417038) 30012 POINT(869.982849 603.913696) 30013 POINT(240.85614 691.211426) 30014 POINT(165.799011 215.606644) 30015 POINT(929.03772 7.14446163) 30016 POINT(320.978119 215.483215) 30017 POINT(241.27182 438.879852) 30018 POINT(963.102844 80.4188156) 30019 POINT(884.343018 122.187904) 30020 POINT(757.582886 944.826111) 30021 POINT(949.279724 525.034912) 30022 POINT(949.657776 208.908371) 30023 POINT(330.666962 526.992432) 30024 POINT(987.331055 982.332825) 30025 POINT(48.1085815 736.13385) 30026 POINT(341.507874 26.0265026) 30027 POINT(832.740173 646.377747) 30028 POINT(154.4272 577.609802) 30029 POINT(337.256836 533.955261) 30030 POINT(524.225891 537.510315) 30031 POINT(356.992126 908.554871) 30032 POINT(709.840698 961.825256) 30033 POINT(970.172668 295.575134) 30034 POINT(907.264099 553.949097) 30035 POINT(53.7089691 69.2821045) 30036 POINT(299.365265 909.880432) 30037 POINT(71.0278168 686.614319) 30038 POINT(64.1450653 82.6447906) 30039 POINT(802.883179 707.636719) 30040 POINT(890.598022 660.69751) 30041 POINT(71.3146439 416.567108) 30042 POINT(200.637268 965.422363) 30043 POINT(839.581726 177.858414) 30044 POINT(816.236511 266.45639) 30045 POINT(33.7523003 141.621857) 30046 POINT(802.630371 583.709229) 30047 POINT(279.541504 833.943848) 30048 POINT(923.787537 825.399841) 30049 POINT(563.997009 78.2373505) 30050 POINT(781.246155 726.617981) 30051 POINT(776.834595 657.151001) 30052 POINT(690.727478 467.866913) 30053 POINT(649.908203 969.838806) 30054 POINT(554.790161 523.429504) 30055 POINT(862.827759 511.296631) 30056 POINT(989.3479 411.503082) 30057 POINT(913.630798 409.349915) 30058 POINT(285.470612 678.788696) 30059 POINT(739.294373 126.707405) 30060 POINT(166.967789 879.134827) 30061 POINT(313.511383 161.878128) 30062 POINT(923.380493 117.088287) 30063 POINT(428.418427 570.912598) 30064 POINT(244.886047 181.584473) 30065 POINT(290.87381 54.7232208) 30066 POINT(801.059814 541.931152) 30067 POINT(218.56488 402.641174) 30068 POINT(333.396118 807.742249) 30069 POINT(720.937744 205.97876) 30070 POINT(269.02478 347.224335) 30071 POINT(287.071838 925.414001) 30072 POINT(810.377686 935.499084) 30073 POINT(797.671509 848.349731) 30074 POINT(265.971161 778.373474) 30075 POINT(229.953522 957.998291) 30076 POINT(417.427429 379.684448) 30077 POINT(159.128128 771.409729) 30078 POINT(776.92981 235.209457) 30079 POINT(983.28595 321.216736) 30080 POINT(190.184372 626.942627) 30081 POINT(142.82164 453.373199) 30082 POINT(848.471436 132.693161) 30083 POINT(282.17984 804.082764) 30084 POINT(58.4527359 272.518066) 30085 POINT(49.9581375 282.560059) 30086 POINT(202.129913 791.109131) 30087 POINT(370.627869 716.956909) 30088 POINT(26.9185181 870.212158) 30089 POINT(692.844299 879.080505) 30090 POINT(515.531555 414.371704) 30091 POINT(149.146866 265.398285) 30092 POINT(78.7026367 934.310547) 30093 POINT(301.553619 418.871216) 30094 POINT(125.290123 333.232788) 30095 POINT(327.017365 885.611084) 30096 POINT(331.688324 591.070557) 30097 POINT(73.9383011 35.063549) 30098 POINT(246.545975 339.592621) 30099 POINT(432.056854 370.861328) 30100 POINT(521.505859 167.396698) 30101 POINT(267.333191 825.767822) 30102 POINT(801.099426 118.78093) 30103 POINT(723.244995 87.9672318) 30104 POINT(585.252869 825.621521) 30105 POINT(750.805115 732.707886) 30106 POINT(599.407837 498.588501) 30107 POINT(150.152405 833.942993) 30108 POINT(976.474121 205.848297) 30109 POINT(363.559143 571.743164) 30110 POINT(931.286011 476.993835) 30111 POINT(508.006775 915.101013) 30112 POINT(354.619446 921.100708) 30113 POINT(258.121887 794.164551) 30114 POINT(585.971619 764.943665) 30115 POINT(848.364319 844.395203) 30116 POINT(461.14444 665.563721) 30117 POINT(646.177795 136.756027) 30118 POINT(944.284851 886.209717) 30119 POINT(22.7354507 647.515564) 30120 POINT(319.613586 642.48999) 30121 POINT(10.4446669 178.96051) 30122 POINT(63.934269 713.258911) 30123 POINT(960.147644 144.217331) 30124 POINT(378.610229 995.883179) 30125 POINT(897.730591 967.094604) 30126 POINT(613.589966 686.237366) 30127 POINT(909.511292 728.59967) 30128 POINT(853.954163 938.860718) 30129 POINT(866.322876 288.40506) 30130 POINT(102.165558 861.58374) 30131 POINT(413.786499 110.52005) 30132 POINT(320.672424 311.63623) 30133 POINT(25.1176605 881.86377) 30134 POINT(96.8213043 367.450043) 30135 POINT(225.331985 200.061295) 30136 POINT(555.363464 373.351715) 30137 POINT(872.406555 857.947571) 30138 POINT(26.5200138 805.023621) 30139 POINT(720.450012 817.942505) 30140 POINT(736.041992 734.527649) 30141 POINT(818.994019 866.252625) 30142 POINT(727.539001 628.00708) 30143 POINT(626.02417 196.992096) 30144 POINT(369.244598 470.689545) 30145 POINT(863.327637 97.6432266) 30146 POINT(103.16069 556.927307) 30147 POINT(32.2795067 303.278595) 30148 POINT(733.124634 622.7677) 30149 POINT(375.580933 36.7374687) 30150 POINT(141.834824 640.608887) 30151 POINT(733.077087 850.21991) 30152 POINT(200.456741 486.155823) 30153 POINT(843.136169 990.882874) 30154 POINT(66.4264603 664.061157) 30155 POINT(908.788757 504.969543) 30156 POINT(536.919739 317.853851) 30157 POINT(731.672607 813.377625) 30158 POINT(571.73291 220.192001) 30159 POINT(46.6796417 193.604828) 30160 POINT(157.720108 349.909119) 30161 POINT(324.073151 911.543457) 30162 POINT(948.274109 912.176392) 30163 POINT(779.858826 600.117615) 30164 POINT(369.563934 287.408875) 30165 POINT(513.620361 584.359375) 30166 POINT(387.430939 833.970276) 30167 POINT(18.2429333 923.935669) 30168 POINT(825.181274 790.566589) 30169 POINT(48.4609756 969.714844) 30170 POINT(916.326172 688.376038) 30171 POINT(343.607788 711.679016) 30172 POINT(774.050964 792.982971) 30173 POINT(651.074768 397.945007) 30174 POINT(220.412872 645.228699) 30175 POINT(145.688278 111.082352) 30176 POINT(205.670486 891.952576) 30177 POINT(769.492859 746.15979) 30178 POINT(77.5563126 316.686798) 30179 POINT(387.417847 208.490463) 30180 POINT(650.659485 461.725067) 30181 POINT(456.267365 466.982544) 30182 POINT(249.464355 32.275528) 30183 POINT(204.782959 206.061295) 30184 POINT(230.182312 586.919617) 30185 POINT(16.7022362 325.662933) 30186 POINT(454.642883 933.24353) 30187 POINT(770.399902 70.7868958) 30188 POINT(525.619019 390.830322) 30189 POINT(619.613464 521.133118) 30190 POINT(481.622345 273.9599) 30191 POINT(979.804382 944.669434) 30192 POINT(978.110291 842.148682) 30193 POINT(21.8939476 789.425232) 30194 POINT(592.022217 717.490906) 30195 POINT(555.577637 43.8661385) 30196 POINT(821.546509 663.669556) 30197 POINT(922.416748 291.97171) 30198 POINT(110.09008 343.160095) 30199 POINT(106.814384 994.343384) 30200 POINT(2.76757765 537.834534) 30201 POINT(231.317719 576.660217) 30202 POINT(498.673004 545.810303) 30203 POINT(530.072266 552.556641) 30204 POINT(149.183655 406.507172) 30205 POINT(717.457031 666.117554) 30206 POINT(281.148499 999.649536) 30207 POINT(892.824158 441.899933) 30208 POINT(406.724304 296.162598) 30209 POINT(79.8658142 375.547668) 30210 POINT(884.662842 383.976562) 30211 POINT(601.568237 599.144653) 30212 POINT(889.967102 764.713562) 30213 POINT(478.243134 291.550781) 30214 POINT(852.095642 623.746582) 30215 POINT(224.132233 469.814209) 30216 POINT(561.493225 762.483704) 30217 POINT(953.075806 453.70224) 30218 POINT(898.488098 984.851746) 30219 POINT(809.343201 117.417587) 30220 POINT(588.96228 427.37851) 30221 POINT(967.710876 672.271362) 30222 POINT(972.244995 482.153839) 30223 POINT(927.115295 818.691711) 30224 POINT(616.094421 93.0926056) 30225 POINT(512.719666 588.311707) 30226 POINT(822.238647 707.722351) 30227 POINT(938.140869 505.478546) 30228 POINT(927.692261 579.231812) 30229 POINT(827.14856 36.4563217) 30230 POINT(569.014526 367.394135) 30231 POINT(194.754456 883.590088) 30232 POINT(189.031296 653.517151) 30233 POINT(811.760742 6.10236788) 30234 POINT(431.618622 525.68512) 30235 POINT(973.170227 309.989838) 30236 POINT(296.392853 408.7771) 30237 POINT(636.130615 513.272034) 30238 POINT(71.1364975 802.248596) 30239 POINT(942.177551 541.847839) 30240 POINT(888.207642 181.223465) 30241 POINT(874.459534 993.287109) 30242 POINT(977.854004 537.489014) 30243 POINT(884.511414 284.500549) 30244 POINT(235.225342 551.545288) 30245 POINT(744.240967 403.497345) 30246 POINT(951.021118 250.603668) 30247 POINT(204.498352 60.0753098) 30248 POINT(553.318604 916.644226) 30249 POINT(667.409485 85.6528473) 30250 POINT(998.519226 550.239014) 30251 POINT(479.209106 294.514923) 30252 POINT(263.977844 97.3740158) 30253 POINT(425.366669 579.114136) 30254 POINT(918.30365 26.1128979) 30255 POINT(940.235107 677.964294) 30256 POINT(365.245483 456.43576) 30257 POINT(637.284485 998.943115) 30258 POINT(414.312897 549.367249) 30259 POINT(309.335663 791.957764) 30260 POINT(869.786743 40.6192513) 30261 POINT(155.344421 297.021362) 30262 POINT(846.60675 840.079956) 30263 POINT(853.588196 716.57312) 30264 POINT(216.986496 332.870667) 30265 POINT(241.079025 709.692627) 30266 POINT(618.815002 122.27951) 30267 POINT(874.304443 831.693054) 30268 POINT(672.409424 302.205078) 30269 POINT(63.7395973 962.028809) 30270 POINT(765.549988 179.969116) 30271 POINT(98.8596573 308.743195) 30272 POINT(990.654358 573.271606) 30273 POINT(144.622009 346.669373) 30274 POINT(518.255859 152.081451) 30275 POINT(605.715027 852.751892) 30276 POINT(36.5796051 702.418274) 30277 POINT(860.540344 624.286865) 30278 POINT(500.036682 959.949463) 30279 POINT(980.294312 99.3024292) 30280 POINT(635.07196 743.392883) 30281 POINT(15.1459837 803.081177) 30282 POINT(728.328918 347.792084) 30283 POINT(373.011322 696.926514) 30284 POINT(650.976135 513.353821) 30285 POINT(788.547241 246.308838) 30286 POINT(788.849915 134.878876) 30287 POINT(10.6250658 512.713318) 30288 POINT(188.497543 228.656448) 30289 POINT(83.6927567 229.702698) 30290 POINT(385.078094 427.450134) 30291 POINT(498.234039 587.385742) 30292 POINT(843.337097 469.917175) 30293 POINT(402.23996 24.7415733) 30294 POINT(964.588989 219.134567) 30295 POINT(941.602966 435.82074) 30296 POINT(141.010315 757.147583) 30297 POINT(903.136597 819.078674) 30298 POINT(276.890961 20.5198536) 30299 POINT(518.148438 39.9693108) 30300 POINT(651.250305 368.290497) 30301 POINT(223.902634 302.040771) 30302 POINT(526.977478 901.695557) 30303 POINT(629.79303 413.356018) 30304 POINT(781.088196 418.277496) 30305 POINT(977.606506 540.960632) 30306 POINT(254.629272 606.002258) 30307 POINT(182.029053 929.81604) 30308 POINT(918.150696 630.768066) 30309 POINT(577.788086 853.207642) 30310 POINT(191.574005 198.884323) 30311 POINT(850.917969 703.85376) 30312 POINT(420.90863 681.018372) 30313 POINT(189.08844 739.132263) 30314 POINT(126.927979 52.6583252) 30315 POINT(423.382202 185.98317) 30316 POINT(934.057373 465.867615) 30317 POINT(153.103638 582.742493) 30318 POINT(245.917175 836.172974) 30319 POINT(426.030182 793.637634) 30320 POINT(644.903625 165.617874) 30321 POINT(196.989288 749.780701) 30322 POINT(497.693848 577.750061) 30323 POINT(293.887939 836.712463) 30324 POINT(390.579773 502.624084) 30325 POINT(96.5982132 916.972351) 30326 POINT(295.135712 800.460938) 30327 POINT(272.793488 216.530838) 30328 POINT(976.10083 172.698212) 30329 POINT(236.443161 951.568848) 30330 POINT(252.835083 190.7061) 30331 POINT(97.8422699 377.999573) 30332 POINT(669.725952 27.9714012) 30333 POINT(685.533386 426.907654) 30334 POINT(729.05542 254.230042) 30335 POINT(245.156418 776.948425) 30336 POINT(604.780884 223.647446) 30337 POINT(991.141907 907.566223) 30338 POINT(653.253235 938.117798) 30339 POINT(215.381287 688.122925) 30340 POINT(736.042603 206.119064) 30341 POINT(881.818542 466.785706) 30342 POINT(492.833679 252.983017) 30343 POINT(874.69751 524.026855) 30344 POINT(73.9837265 116.208076) 30345 POINT(466.470642 509.193695) 30346 POINT(241.128296 516.472046) 30347 POINT(352.768219 960.788208) 30348 POINT(151.6194 908.829651) 30349 POINT(318.092194 863.455933) 30350 POINT(993.153381 957.372253) 30351 POINT(376.924377 74.4474869) 30352 POINT(66.3935165 249.169724) 30353 POINT(38.7296524 282.33844) 30354 POINT(16.5289593 69.0271912) 30355 POINT(208.024689 379.545044) 30356 POINT(983.48822 35.5033951) 30357 POINT(516.529846 941.763794) 30358 POINT(222.006821 281.424652) 30359 POINT(535.807495 131.610306) 30360 POINT(687.134705 220.072205) 30361 POINT(106.22422 265.795929) 30362 POINT(591.378296 233.23848) 30363 POINT(790.187561 506.131653) 30364 POINT(622.948547 451.976013) 30365 POINT(391.160767 421.089813) 30366 POINT(430.101349 168.268784) 30367 POINT(329.830322 298.813812) 30368 POINT(887.009705 949.824951) 30369 POINT(18.0031109 122.194572) 30370 POINT(277.80719 755.138733) 30371 POINT(880.472412 605.404114) 30372 POINT(786.35022 926.936401) 30373 POINT(334.473877 968.198853) 30374 POINT(931.917969 934.771057) 30375 POINT(412.836517 534.097656) 30376 POINT(920.710022 838.149353) 30377 POINT(206.027374 391.559631) 30378 POINT(317.925659 237.080994) 30379 POINT(373.625 379.506287) 30380 POINT(216.865585 694.870056) 30381 POINT(439.094543 441.557587) 30382 POINT(874.453857 376.486328) 30383 POINT(812.956055 844.403992) 30384 POINT(984.531494 703.749756) 30385 POINT(696.550537 47.6724663) 30386 POINT(712.044373 835.24939) 30387 POINT(487.742157 833.93689) 30388 POINT(856.780884 524.434753) 30389 POINT(655.313599 112.274925) 30390 POINT(51.6801414 574.330261) 30391 POINT(462.890961 66.7139359) 30392 POINT(428.125183 513.120178) 30393 POINT(426.491425 767.381531) 30394 POINT(352.376923 973.344055) 30395 POINT(80.8428879 248.169388) 30396 POINT(509.839508 421.174286) 30397 POINT(935.249268 396.822418) 30398 POINT(96.7465439 594.378845) 30399 POINT(424.842285 833.815674) 30400 POINT(184.815414 151.892395) 30401 POINT(40.5811386 573.021301) 30402 POINT(419.254211 388.84668) 30403 POINT(562.471375 473.481964) 30404 POINT(263.167419 343.477264) 30405 POINT(664.424316 886.690613) 30406 POINT(633.963562 522.201294) 30407 POINT(923.359497 72.3596039) 30408 POINT(315.015717 742.631348) 30409 POINT(95.0647583 758.095032) 30410 POINT(246.882492 78.2731171) 30411 POINT(138.612915 30.6525936) 30412 POINT(188.312469 560.686523) 30413 POINT(931.538086 710.137878) 30414 POINT(222.593964 523.133789) 30415 POINT(549.393188 630.857849) 30416 POINT(807.274231 262.985229) 30417 POINT(843.739929 256.37854) 30418 POINT(115.675911 957.818726) 30419 POINT(378.204285 730.176453) 30420 POINT(90.9288406 532.265808) 30421 POINT(437.2164 511.187469) 30422 POINT(174.484406 869.898254) 30423 POINT(248.833145 885.28363) 30424 POINT(31.4798565 468.095276) 30425 POINT(32.1129646 864.600037) 30426 POINT(678.195251 305.803162) 30427 POINT(339.519165 787.66156) 30428 POINT(328.637543 436.929535) 30429 POINT(92.5193405 581.029602) 30430 POINT(577.568787 128.974503) 30431 POINT(958.812073 419.926819) 30432 POINT(488.760071 371.172424) 30433 POINT(375.453644 978.853271) 30434 POINT(975.723572 303.320801) 30435 POINT(744.710754 657.058594) 30436 POINT(966.594543 730.642578) 30437 POINT(607.988708 926.984619) 30438 POINT(107.274399 947.130737) 30439 POINT(5.05693293 131.16272) 30440 POINT(752.602173 786.146545) 30441 POINT(646.530579 754.899597) 30442 POINT(252.510727 239.50296) 30443 POINT(940.792236 54.3818474) 30444 POINT(790.297729 362.395874) 30445 POINT(624.016296 314.183136) 30446 POINT(457.862122 129.518845) 30447 POINT(623.568726 351.788788) 30448 POINT(745.728638 686.294678) 30449 POINT(548.807739 852.515625) 30450 POINT(24.717041 197.79805) 30451 POINT(635.336121 894.576782) 30452 POINT(945.163757 526.663696) 30453 POINT(183.31395 565.120117) 30454 POINT(475.731995 950.741028) 30455 POINT(219.912262 843.587219) 30456 POINT(747.258362 382.754608) 30457 POINT(800.883728 174.04245) 30458 POINT(111.088486 289.676208) 30459 POINT(645.174805 114.191093) 30460 POINT(222.406204 81.4499054) 30461 POINT(596.267517 652.238342) 30462 POINT(326.725281 890.294006) 30463 POINT(229.397186 755.768494) 30464 POINT(774.684753 776.829773) 30465 POINT(107.955086 257.292664) 30466 POINT(582.393677 752.164368) 30467 POINT(146.382141 602.505005) 30468 POINT(260.746429 10.8286057) 30469 POINT(999.954651 368.698181) 30470 POINT(279.454498 233.796722) 30471 POINT(691.430969 896.952576) 30472 POINT(235.201767 189.992249) 30473 POINT(946.084473 232.971863) 30474 POINT(836.654602 475.618317) 30475 POINT(163.818405 713.777405) 30476 POINT(183.487869 560.885498) 30477 POINT(161.608917 612.489624) 30478 POINT(936.692505 231.407883) 30479 POINT(901.325867 918.344238) 30480 POINT(990.909424 525.48938) 30481 POINT(335.055634 506.770203) 30482 POINT(257.201782 778.137634) 30483 POINT(288.51947 83.2641296) 30484 POINT(440.485535 927.966492) 30485 POINT(327.310791 569.042603) 30486 POINT(996.851807 754.840088) 30487 POINT(752.840576 255.757812) 30488 POINT(232.430374 765.460938) 30489 POINT(25.5957985 576.280823) 30490 POINT(160.585617 493.030029) 30491 POINT(861.211243 719.664062) 30492 POINT(874.541931 628.140015) 30493 POINT(166.686859 327.492645) 30494 POINT(877.585388 644.376099) 30495 POINT(634.737976 928.14917) 30496 POINT(805.46759 57.4725685) 30497 POINT(776.747192 642.901123) 30498 POINT(991.374878 685.731201) 30499 POINT(110.231201 596.650024) 30500 POINT(281.760193 926.77832) 30501 POINT(114.398689 715.756836) 30502 POINT(783.540833 187.293747) 30503 POINT(994.640442 540.309509) 30504 POINT(884.835815 894.37207) 30505 POINT(649.168457 928.873291) 30506 POINT(970.873535 566.586731) 30507 POINT(982.137573 216.14032) 30508 POINT(985.386169 957.165039) 30509 POINT(659.202454 389.577515) 30510 POINT(50.2979279 419.106018) 30511 POINT(933.463562 87.378624) 30512 POINT(140.497391 141.374847) 30513 POINT(490.147797 859.619995) 30514 POINT(656.787476 415.901611) 30515 POINT(653.287842 865.967224) 30516 POINT(192.670425 407.035126) 30517 POINT(381.360779 460.689667) 30518 POINT(846.521973 189.022171) 30519 POINT(443.709778 408.832703) 30520 POINT(790.13324 914.284363) 30521 POINT(36.108593 521.531982) 30522 POINT(120.872131 587.664551) 30523 POINT(960.66803 544.598694) 30524 POINT(154.281784 901.952576) 30525 POINT(789.187378 199.267624) 30526 POINT(566.363464 181.036377) 30527 POINT(154.903061 389.603943) 30528 POINT(182.781143 562.754089) 30529 POINT(308.389069 55.3636055) 30530 POINT(701.592163 908.352478) 30531 POINT(240.253235 775.56958) 30532 POINT(395.802979 464.433136) 30533 POINT(255.506973 595.808044) 30534 POINT(494.135986 332.049957) 30535 POINT(699.446228 255.987518) 30536 POINT(808.072266 262.497711) 30537 POINT(228.076996 895.392212) 30538 POINT(538.824707 37.2221336) 30539 POINT(311.181549 784.27832) 30540 POINT(540.840332 677.718018) 30541 POINT(604.810425 817.605286) 30542 POINT(573.302551 338.433624) 30543 POINT(62.1815414 563.992432) 30544 POINT(875.59668 970.352417) 30545 POINT(625.680969 14.4982376) 30546 POINT(347.637573 604.494629) 30547 POINT(594.022034 759.806335) 30548 POINT(495.278473 433.104462) 30549 POINT(151.887238 844.975159) 30550 POINT(361.802795 192.435928) 30551 POINT(526.93634 727.792419) 30552 POINT(858.929871 746.103455) 30553 POINT(71.4192963 585.321899) 30554 POINT(138.172806 193.839279) 30555 POINT(601.418274 174.414612) 30556 POINT(12.2111492 389.739594) 30557 POINT(242.716095 822.383423) 30558 POINT(505.751801 939.844116) 30559 POINT(83.3346863 185.933426) 30560 POINT(648.850769 694.974304) 30561 POINT(201.90773 717.652649) 30562 POINT(838.668091 485.562927) 30563 POINT(289.388367 383.375519) 30564 POINT(907.079773 525.784485) 30565 POINT(598.395264 909.635559) 30566 POINT(313.541138 100.303711) 30567 POINT(407.156647 552.953369) 30568 POINT(210.283524 34.6903152) 30569 POINT(469.027557 182.208084) 30570 POINT(28.646265 126.911316) 30571 POINT(7.56356764 977.795105) 30572 POINT(442.550476 409.853241) 30573 POINT(12.8935471 668.283447) 30574 POINT(262.374725 441.702942) 30575 POINT(777.525757 354.071075) 30576 POINT(887.493042 41.0209465) 30577 POINT(486.754974 280.957794) 30578 POINT(239.304474 145.888412) 30579 POINT(36.6454315 613.082336) 30580 POINT(652.66156 71.6352005) 30581 POINT(205.403458 268.406036) 30582 POINT(519.269531 50.0285263) 30583 POINT(544.206665 190.599777) 30584 POINT(752.066589 875.707275) 30585 POINT(401.733124 274.149475) 30586 POINT(528.134644 975) 30587 POINT(951.363892 285.721649) 30588 POINT(625.771729 600.604553) 30589 POINT(878.077515 50.9194527) 30590 POINT(808.553101 886.098694) 30591 POINT(8.29390907 433.742737) 30592 POINT(638.211975 550.681213) 30593 POINT(963.368225 24.1923962) 30594 POINT(284.805725 401.327759) 30595 POINT(297.216888 281.004913) 30596 POINT(15.8412647 851.72522) 30597 POINT(279.929352 230.573181) 30598 POINT(207.888733 270.580139) 30599 POINT(829.572693 794.425842) 30600 POINT(759.904236 532.482178) 30601 POINT(219.230713 766.555359) 30602 POINT(475.339752 9.34055328) 30603 POINT(319.273193 264.378998) 30604 POINT(301.576843 887.056396) 30605 POINT(827.680176 774.788696) 30606 POINT(704.859924 988.694641) 30607 POINT(323.83374 366.824219) 30608 POINT(54.4114037 740.778198) 30609 POINT(11.5427313 167.835068) 30610 POINT(781.612366 932.848206) 30611 POINT(731.319092 239.065613) 30612 POINT(562.97113 32.1653633) 30613 POINT(584.332886 743.496643) 30614 POINT(596.145081 956.022217) 30615 POINT(263.42276 993.239075) 30616 POINT(646.731018 944.89679) 30617 POINT(700.53363 81.150795) 30618 POINT(343.209503 982.505127) 30619 POINT(763.631042 342.609131) 30620 POINT(794.769165 676.253357) 30621 POINT(646.254028 625.128357) 30622 POINT(61.3136787 636.806213) 30623 POINT(44.306015 47.9807739) 30624 POINT(79.4685898 812.272644) 30625 POINT(790.444153 659.022522) 30626 POINT(58.6710472 465.269073) 30627 POINT(977.654602 705.008911) 30628 POINT(26.3916855 194.901321) 30629 POINT(739.54541 453.919098) 30630 POINT(493.275421 656.167725) 30631 POINT(332.93338 987.91449) 30632 POINT(202.689285 112.718163) 30633 POINT(383.960571 733.887756) 30634 POINT(653.153076 262.222168) 30635 POINT(585.871826 841.092468) 30636 POINT(767.847534 624.341675) 30637 POINT(576.486572 743.678162) 30638 POINT(417.413483 297.63443) 30639 POINT(556.17981 267.324707) 30640 POINT(868.273682 832.422424) 30641 POINT(640.860901 626.414062) 30642 POINT(969.539978 981.159485) 30643 POINT(265.137268 299.78537) 30644 POINT(551.166138 966.161804) 30645 POINT(772.829468 523.182434) 30646 POINT(81.4329834 827.390808) 30647 POINT(847.647034 464.755035) 30648 POINT(823.30957 201.586227) 30649 POINT(666.653076 791.763123) 30650 POINT(190.037155 250.352463) 30651 POINT(701.765259 542.934814) 30652 POINT(586.881165 251.346252) 30653 POINT(376.725891 8.35000038) 30654 POINT(47.9560356 836.656006) 30655 POINT(313.605774 719.479065) 30656 POINT(447.050201 889.5979) 30657 POINT(506.98764 963.962463) 30658 POINT(945.276184 469.892365) 30659 POINT(356.648102 276.341949) 30660 POINT(805.096558 742.563477) 30661 POINT(310.070221 696.349792) 30662 POINT(371.894775 43.5948029) 30663 POINT(731.861084 825.25885) 30664 POINT(225.971283 871.657471) 30665 POINT(173.625046 708.542114) 30666 POINT(517.963501 587.021057) 30667 POINT(188.688004 705.660828) 30668 POINT(800.666504 903.603271) 30669 POINT(273.037323 916.803101) 30670 POINT(194.633286 246.169357) 30671 POINT(46.8205643 579.047546) 30672 POINT(111.456764 720.75415) 30673 POINT(877.739929 543.590698) 30674 POINT(598.103455 711.854492) 30675 POINT(324.822723 439.818542) 30676 POINT(452.02063 14.8718042) 30677 POINT(912.5979 125.234322) 30678 POINT(837.050049 367.336365) 30679 POINT(274.048004 232.291885) 30680 POINT(154.645584 328.904968) 30681 POINT(896.342651 39.3888512) 30682 POINT(296.82785 639.905701) 30683 POINT(914.926819 14.6139002) 30684 POINT(233.164856 563.849365) 30685 POINT(305.791901 473.925781) 30686 POINT(723.411743 783.997192) 30687 POINT(677.582764 142.490921) 30688 POINT(62.9702835 311.55899) 30689 POINT(747.600098 556.775391) 30690 POINT(375.86203 597.813171) 30691 POINT(659.869995 259.150726) 30692 POINT(488.390442 789.418457) 30693 POINT(58.5415764 445.334045) 30694 POINT(718.170105 381.106201) 30695 POINT(333.306793 972.667603) 30696 POINT(572.918701 599.074951) 30697 POINT(600.836243 534.402466) 30698 POINT(899.660034 778.681335) 30699 POINT(751.012695 977.761658) 30700 POINT(189.221298 8.96706009) 30701 POINT(570.785461 583.223328) 30702 POINT(707.692749 22.3447819) 30703 POINT(441.639954 36.4091835) 30704 POINT(783.550171 969.17749) 30705 POINT(96.9945297 485.036407) 30706 POINT(767.239136 483.438721) 30707 POINT(209.421875 670.078857) 30708 POINT(943.131714 607.174622) 30709 POINT(268.714142 606.672668) 30710 POINT(508.95932 378.765656) 30711 POINT(2.84554219 636.132446) 30712 POINT(845.297119 524.29895) 30713 POINT(5.34284306 111.059853) 30714 POINT(830.745239 934.620911) 30715 POINT(863.086304 261.908325) 30716 POINT(273.565002 815.386169) 30717 POINT(854.889465 442.112396) 30718 POINT(437.254242 306.815308) 30719 POINT(718.226746 492.23056) 30720 POINT(648.583862 367.712433) 30721 POINT(392.202148 199.332321) 30722 POINT(557.781006 78.9836044) 30723 POINT(450.414429 69.5632706) 30724 POINT(440.784943 660.480896) 30725 POINT(877.028564 958.54718) 30726 POINT(114.88736 217.139801) 30727 POINT(230.495483 610.757568) 30728 POINT(406.793518 982.362854) 30729 POINT(227.480591 205.564392) 30730 POINT(444.526703 945.352661) 30731 POINT(588.294678 470.313324) 30732 POINT(323.090759 712.141968) 30733 POINT(166.232895 441.121124) 30734 POINT(352.973572 125.580627) 30735 POINT(66.5947266 187.306335) 30736 POINT(278.113861 66.301651) 30737 POINT(604.793945 688.362671) 30738 POINT(636.686279 374.117523) 30739 POINT(593.000305 1.6059252) 30740 POINT(127.927368 507.433167) 30741 POINT(945.445435 88.1812744) 30742 POINT(188.302795 327.766724) 30743 POINT(896.256042 394.737122) 30744 POINT(420.794495 828.632019) 30745 POINT(0.953738451 3.10125065) 30746 POINT(465.289307 184.773239) 30747 POINT(392.219421 861.715637) 30748 POINT(952.421631 781.58905) 30749 POINT(658.915161 66.9961319) 30750 POINT(407.331665 888.708862) 30751 POINT(969.572876 152.412079) 30752 POINT(126.345428 999.870789) 30753 POINT(250.604156 915.776123) 30754 POINT(854.380066 97.9189072) 30755 POINT(16.4922161 34.4780693) 30756 POINT(462.876404 883.924805) 30757 POINT(823.451782 913.285095) 30758 POINT(139.327835 388.803009) 30759 POINT(846.871338 224.59256) 30760 POINT(925.208984 60.6323967) 30761 POINT(161.789413 46.9986725) 30762 POINT(807.625 978.117249) 30763 POINT(408.335693 510.764709) 30764 POINT(212.753021 7.7717452) 30765 POINT(452.250763 309.71524) 30766 POINT(350.698517 617.648071) 30767 POINT(784.15979 245.655197) 30768 POINT(809.436218 442.542847) 30769 POINT(948.232239 306.284851) 30770 POINT(430.870087 214.022659) 30771 POINT(537.337891 329.35434) 30772 POINT(368.674194 113.345276) 30773 POINT(852.070862 528.521484) 30774 POINT(322.534332 157.085495) 30775 POINT(387.437866 519.783142) 30776 POINT(966.898438 705.288025) 30777 POINT(904.105347 726.795593) 30778 POINT(197.678909 302.183319) 30779 POINT(59.5027657 409.857971) 30780 POINT(863.977844 672.450867) 30781 POINT(844.544739 73.4067688) 30782 POINT(443.399689 44.8658981) 30783 POINT(399.147034 692.788513) 30784 POINT(671.566528 943.704102) 30785 POINT(997.076477 360.685577) 30786 POINT(414.883301 950.924011) 30787 POINT(9.1262207 400.353058) 30788 POINT(249.353638 613.934875) 30789 POINT(712.403809 305.878113) 30790 POINT(899.401062 960.349365) 30791 POINT(730.043274 643.722778) 30792 POINT(224.38768 928.815125) 30793 POINT(305.409027 145.215652) 30794 POINT(95.1769791 270.715912) 30795 POINT(261.48584 12.3837671) 30796 POINT(760.09314 98.7863464) 30797 POINT(421.399597 91.1749878) 30798 POINT(93.5642929 623.646057) 30799 POINT(99.7734451 193.930466) 30800 POINT(89.2915649 736.725525) 30801 POINT(474.898621 899.786255) 30802 POINT(693.784302 867.438904) 30803 POINT(754.62439 565.982727) 30804 POINT(369.485291 3.79561353) 30805 POINT(918.701599 748.946228) 30806 POINT(876.552307 349.602386) 30807 POINT(899.436584 481.203369) 30808 POINT(618.857666 869.271851) 30809 POINT(621.427917 864.047058) 30810 POINT(416.234833 904.943909) 30811 POINT(708.508911 717.371399) 30812 POINT(847.887695 242.67659) 30813 POINT(558.553589 843.831726) 30814 POINT(920.754211 948.040405) 30815 POINT(139.411194 96.6910324) 30816 POINT(14.1739321 120.341606) 30817 POINT(354.9198 437.239563) 30818 POINT(54.2748337 453.320221) 30819 POINT(329.846649 591.994751) 30820 POINT(97.005928 303.558502) 30821 POINT(955.969421 601.105286) 30822 POINT(819.777527 411.655273) 30823 POINT(595.729858 332.223755) 30824 POINT(413.418976 691.764771) 30825 POINT(850.47113 28.9291515) 30826 POINT(556.947815 689.274963) 30827 POINT(740.838989 795.546753) 30828 POINT(278.911133 631.753601) 30829 POINT(819.249817 982.534424) 30830 POINT(745.374329 82.9778824) 30831 POINT(518.282654 135.704437) 30832 POINT(253.698349 312.684143) 30833 POINT(142.447754 181.282227) 30834 POINT(793.874268 765.03064) 30835 POINT(120.154289 25.6426754) 30836 POINT(509.328003 736.707031) 30837 POINT(562.101135 707.614136) 30838 POINT(743.832581 241.808716) 30839 POINT(514.130371 622.225586) 30840 POINT(300.666779 366.311249) 30841 POINT(67.3222046 373.045105) 30842 POINT(217.762451 412.146545) 30843 POINT(294.401703 256.794739) 30844 POINT(134.723984 152.034836) 30845 POINT(746.137146 755.3302) 30846 POINT(3.86433315 304.529114) 30847 POINT(469.208771 238.567764) 30848 POINT(990.467041 277.973328) 30849 POINT(531.035339 165.380936) 30850 POINT(383.181702 596.671509) 30851 POINT(268.386444 721.347229) 30852 POINT(862.730713 627.556946) 30853 POINT(654.545898 131.608337) 30854 POINT(678.021667 76.6962204) 30855 POINT(621.705078 928.735229) 30856 POINT(978.51709 668.358459) 30857 POINT(26.6631546 599.720581) 30858 POINT(528.628845 792.032776) 30859 POINT(432.427948 159.027374) 30860 POINT(265.429474 182.230804) 30861 POINT(547.701904 937.606262) 30862 POINT(89.6715469 750.32782) 30863 POINT(150.388489 898.185974) 30864 POINT(39.6766167 25.8644924) 30865 POINT(578.170105 7.78421354) 30866 POINT(678.919312 686.068176) 30867 POINT(435.022644 57.7680283) 30868 POINT(425.031799 896.892212) 30869 POINT(401.505554 24.0036144) 30870 POINT(407.561218 587.283447) 30871 POINT(891.175232 824.411499) 30872 POINT(714.324097 901.958252) 30873 POINT(536.029846 643.929077) 30874 POINT(974.934631 388.607941) 30875 POINT(959.131775 858.45874) 30876 POINT(741.485962 575.709412) 30877 POINT(179.231049 766.446899) 30878 POINT(120.005081 480.147919) 30879 POINT(45.2097473 611.523071) 30880 POINT(344.876038 883.451416) 30881 POINT(900.4953 799.980774) 30882 POINT(187.756607 456.011353) 30883 POINT(890.376404 346.28125) 30884 POINT(171.541351 655.257141) 30885 POINT(937.663391 747.305786) 30886 POINT(890.724426 832.023621) 30887 POINT(991.743286 36.5004578) 30888 POINT(397.278931 845.598633) 30889 POINT(98.2985001 312.703064) 30890 POINT(624.220154 299.06604) 30891 POINT(615.419861 701.285706) 30892 POINT(418.801239 990.11615) 30893 POINT(318.306702 378.896057) 30894 POINT(628.371277 446.637512) 30895 POINT(569.091309 884.759644) 30896 POINT(212.006012 239.925537) 30897 POINT(388.562134 624.063843) 30898 POINT(880.916138 790.654724) 30899 POINT(438.820007 930.86377) 30900 POINT(844.296021 393.90509) 30901 POINT(224.444153 753.326782) 30902 POINT(851.767395 370.169556) 30903 POINT(436.950317 422.695679) 30904 POINT(579.089478 420.69104) 30905 POINT(323.703613 804.451843) 30906 POINT(153.674591 139.596603) 30907 POINT(356.631653 656.775146) 30908 POINT(117.107407 64.6508179) 30909 POINT(734.831543 254.126678) 30910 POINT(682.890198 876.208496) 30911 POINT(383.356232 304.856567) 30912 POINT(781.719482 263.891876) 30913 POINT(941.113098 199.002213) 30914 POINT(59.5606575 347.069122) 30915 POINT(675.04071 479.383301) 30916 POINT(874.575134 273.403076) 30917 POINT(554.805237 714.806946) 30918 POINT(49.6362915 35.2413063) 30919 POINT(689.56488 263.405212) 30920 POINT(2.94169044 582.714417) 30921 POINT(611.386902 607.185364) 30922 POINT(178.413681 812.016724) 30923 POINT(212.311462 391.757324) 30924 POINT(911.617676 945.000366) 30925 POINT(555.585938 159.516129) 30926 POINT(930.39386 560.082764) 30927 POINT(916.136169 177.524841) 30928 POINT(239.983566 93.3407822) 30929 POINT(718.89679 155.81694) 30930 POINT(770.961121 901.952576) 30931 POINT(72.32798 966.295105) 30932 POINT(668.697754 9.89270687) 30933 POINT(202.559402 410.943634) 30934 POINT(722.456055 868.650757) 30935 POINT(723.503296 370.424713) 30936 POINT(120.741982 935.015076) 30937 POINT(600.477783 275.644135) 30938 POINT(380.538513 555.559509) 30939 POINT(228.011124 286.525604) 30940 POINT(37.9640694 655.927917) 30941 POINT(923.315796 100.627968) 30942 POINT(66.305069 555.494751) 30943 POINT(590.307556 231.602051) 30944 POINT(266.962341 998.276184) 30945 POINT(418.013794 441.664795) 30946 POINT(275.44632 233.49675) 30947 POINT(402.892151 846.74469) 30948 POINT(757.100952 859.007507) 30949 POINT(716.22821 866.82605) 30950 POINT(707.799988 713.481995) 30951 POINT(542.781128 512.016724) 30952 POINT(98.6408539 565.263184) 30953 POINT(890.704712 587.335938) 30954 POINT(938.975647 783.81842) 30955 POINT(989.124451 892.142334) 30956 POINT(910.416199 821.518311) 30957 POINT(550.352234 775.099731) 30958 POINT(230.297882 797.049866) 30959 POINT(258.45813 889.834656) 30960 POINT(224.181427 15.9999399) 30961 POINT(62.7937927 352.827637) 30962 POINT(64.1334381 38.4098206) 30963 POINT(990.214355 922.076721) 30964 POINT(306.699554 197.446457) 30965 POINT(357.427399 246.776154) 30966 POINT(738.740845 968.428101) 30967 POINT(157.495636 654.396362) 30968 POINT(810.837891 604.565002) 30969 POINT(532.53833 577.478333) 30970 POINT(760.098511 206.848434) 30971 POINT(226.752563 329.151031) 30972 POINT(753.381836 233.079514) 30973 POINT(666.762085 30.4372978) 30974 POINT(827.73938 118.239548) 30975 POINT(344.885712 606.066772) 30976 POINT(579.97345 559.052673) 30977 POINT(818.204224 696.608276) 30978 POINT(927.440125 384.095215) 30979 POINT(293.427399 396.750519) 30980 POINT(496.527008 202.203506) 30981 POINT(183.782837 1.59621763) 30982 POINT(415.683289 1.884045) 30983 POINT(516.839905 519.622925) 30984 POINT(321.667938 9.23208332) 30985 POINT(786.865295 952.84729) 30986 POINT(9.12979412 738.422852) 30987 POINT(5.60073757 127.694618) 30988 POINT(346.188049 764.700562) 30989 POINT(863.029663 825.715149) 30990 POINT(276.912415 183.112335) 30991 POINT(194.627441 768.835144) 30992 POINT(73.2047806 495.810425) 30993 POINT(321.789703 582.132446) 30994 POINT(574.377747 195.986984) 30995 POINT(323.728455 626.661438) 30996 POINT(256.65741 127.453812) 30997 POINT(276.378204 769.722229) 30998 POINT(353.97699 726.196228) 30999 POINT(899.147949 959.898376) 31000 POINT(355.968445 65.2060089) 31001 POINT(654.193542 384.532776) 31002 POINT(442.32547 688.446777) 31003 POINT(993.906311 9.04033947) 31004 POINT(381.144257 136.465714) 31005 POINT(327.270233 197.183136) 31006 POINT(182.019958 828.101257) 31007 POINT(129.520676 671.3703) 31008 POINT(115.283699 203.738174) 31009 POINT(35.1433411 340.056885) 31010 POINT(302.62558 280.041168) 31011 POINT(392.822357 58.8688278) 31012 POINT(870.408936 679.095825) 31013 POINT(611.733765 532.283691) 31014 POINT(7.311903 832.067749) 31015 POINT(258.970917 648.271362) 31016 POINT(257.728271 115.139824) 31017 POINT(673.38916 179.599655) 31018 POINT(39.9398041 740.526611) 31019 POINT(315.397827 108.510521) 31020 POINT(934.886108 25.3247776) 31021 POINT(976.973938 727.779541) 31022 POINT(431.970306 314.007416) 31023 POINT(711.294983 48.0042305) 31024 POINT(930.449646 95.2989655) 31025 POINT(114.908562 71.1841888) 31026 POINT(219.386948 380.383484) 31027 POINT(693.396606 862.729797) 31028 POINT(939.828369 986.94989) 31029 POINT(78.3161545 522.069763) 31030 POINT(666.893921 183.120346) 31031 POINT(31.1851654 585.747925) 31032 POINT(937.017578 8.13553524) 31033 POINT(489.943878 831.655701) 31034 POINT(439.971741 214.695984) 31035 POINT(483.285797 139.819733) 31036 POINT(553.000671 23.6197186) 31037 POINT(985.281921 20.5500431) 31038 POINT(724.943787 988.140076) 31039 POINT(711.695618 676.983765) 31040 POINT(934.343689 116.519714) 31041 POINT(303.312775 323.983215) 31042 POINT(513.025818 772.113403) 31043 POINT(211.627487 752.439697) 31044 POINT(214.457245 674.612793) 31045 POINT(137.579987 386.401672) 31046 POINT(136.402252 870.612183) 31047 POINT(892.130798 924.808411) 31048 POINT(305.198883 772.137939) 31049 POINT(693.774414 950.325256) 31050 POINT(672.692383 115.297653) 31051 POINT(916.284058 0.818259358) 31052 POINT(447.932892 945.267517) 31053 POINT(201.792786 675.973328) 31054 POINT(18.7407303 856.612671) 31055 POINT(289.637634 549.690918) 31056 POINT(850.860535 718.213135) 31057 POINT(338.231995 401.016266) 31058 POINT(275.485229 889.264221) 31059 POINT(471.717316 500.978607) 31060 POINT(783.37854 526.968994) 31061 POINT(629.5401 103.91095) 31062 POINT(582.728088 428.312469) 31063 POINT(977.782104 609.330322) 31064 POINT(698.4198 8.98472691) 31065 POINT(426.552673 69.6294098) 31066 POINT(695.953979 464.022034) 31067 POINT(536.663086 320.641693) 31068 POINT(310.173584 979.599304) 31069 POINT(967.901001 273.192688) 31070 POINT(406.910553 566.794983) 31071 POINT(875.392273 106.268799) 31072 POINT(67.2814026 799.855835) 31073 POINT(382.786804 794.272339) 31074 POINT(375.486603 487.919525) 31075 POINT(612.463074 645.464111) 31076 POINT(130.545471 255.357574) 31077 POINT(222.875366 155.224594) 31078 POINT(62.494236 707.531616) 31079 POINT(58.9487 330.91806) 31080 POINT(789.386292 512.11261) 31081 POINT(258.5672 835.2724) 31082 POINT(231.279968 418.101715) 31083 POINT(950.333984 448.266846) 31084 POINT(232.72818 192.855652) 31085 POINT(826.666138 855.153992) 31086 POINT(920.662109 299.922363) 31087 POINT(261.803406 37.6542511) 31088 POINT(727.688477 126.122887) 31089 POINT(974.469604 249.406601) 31090 POINT(882.51062 844.486084) 31091 POINT(295.856476 883.9104) 31092 POINT(553.390747 860.396057) 31093 POINT(9.56377506 447.555939) 31094 POINT(224.35611 912.308167) 31095 POINT(173.508499 301.638153) 31096 POINT(487.417999 606.920044) 31097 POINT(835.116211 70.8341446) 31098 POINT(400.736176 673.662231) 31099 POINT(708.964111 382.473969) 31100 POINT(248.867004 877.338318) 31101 POINT(627.213684 417.649872) 31102 POINT(756.555603 73.859993) 31103 POINT(402.536255 154.016556) 31104 POINT(64.6603317 716.078369) 31105 POINT(993.802917 958.886047) 31106 POINT(541.559021 489.122498) 31107 POINT(947.714661 663.393372) 31108 POINT(444.717743 92.4598618) 31109 POINT(744.048645 493.202026) 31110 POINT(687.084106 294.751953) 31111 POINT(215.671387 343.161346) 31112 POINT(326.78421 713.78595) 31113 POINT(792.431641 222.869339) 31114 POINT(664.583557 654.229126) 31115 POINT(154.123688 143.215118) 31116 POINT(983.15686 248.217941) 31117 POINT(523.666687 902.270264) 31118 POINT(429.974976 956.024414) 31119 POINT(417.356812 819.602356) 31120 POINT(469.248779 705.022217) 31121 POINT(152.529251 384.041656) 31122 POINT(798.697937 974.324646) 31123 POINT(830.342896 459.622314) 31124 POINT(937.872437 509.818451) 31125 POINT(226.936127 341.947205) 31126 POINT(593.427124 10.5430641) 31127 POINT(982.274536 792.310486) 31128 POINT(843.32135 633.744873) 31129 POINT(443.134216 684.912354) 31130 POINT(559.711975 984.391479) 31131 POINT(343.463867 84.3887939) 31132 POINT(915.773804 987.998352) 31133 POINT(368.609039 193.258774) 31134 POINT(354.38266 686.460754) 31135 POINT(304.442474 453.986938) 31136 POINT(799.237 178.993774) 31137 POINT(501.33194 206.026581) 31138 POINT(877.382263 178.667099) 31139 POINT(447.228119 247.917709) 31140 POINT(415.196747 634.42749) 31141 POINT(333.223969 767.372864) 31142 POINT(839.757263 634.587585) 31143 POINT(176.108704 723.015137) 31144 POINT(439.331573 56.8179283) 31145 POINT(731.220459 500.388641) 31146 POINT(738.855469 748.621216) 31147 POINT(558.925903 648.020874) 31148 POINT(760.096863 138.636658) 31149 POINT(1.07985878 618.276062) 31150 POINT(346.354553 211.076477) 31151 POINT(859.724304 599.731628) 31152 POINT(425.678741 481.930695) 31153 POINT(457.087402 905.680603) 31154 POINT(405.561554 645.700684) 31155 POINT(779.763611 665.595154) 31156 POINT(379.763367 705.377319) 31157 POINT(185.061569 207.073563) 31158 POINT(481.495911 836.829346) 31159 POINT(866.276001 984.671814) 31160 POINT(236.762894 793.000854) 31161 POINT(956.580017 944.432556) 31162 POINT(810.588135 35.2491112) 31163 POINT(896.981812 59.8518257) 31164 POINT(453.58374 841.32019) 31165 POINT(929.099121 453.068756) 31166 POINT(556.39679 625.03125) 31167 POINT(303.260193 56.4475136) 31168 POINT(517.718933 495.485016) 31169 POINT(849.64856 472.300995) 31170 POINT(93.5666504 458.006622) 31171 POINT(856.005249 365.755737) 31172 POINT(190.391403 529.997864) 31173 POINT(969.041138 956.779297) 31174 POINT(814.320984 718.217773) 31175 POINT(905.578796 556.911316) 31176 POINT(418.670135 225.907532) 31177 POINT(769.045227 484.611023) 31178 POINT(480.102234 265.596863) 31179 POINT(440.905701 466.329956) 31180 POINT(261.926819 423.899078) 31181 POINT(906.724487 930.044861) 31182 POINT(325.543793 26.282938) 31183 POINT(112.639442 581.265564) 31184 POINT(65.6954956 391.494873) 31185 POINT(488.159454 741.319336) 31186 POINT(962.778259 146.406631) 31187 POINT(151.458908 62.4825096) 31188 POINT(159.943634 932.619324) 31189 POINT(898.020386 118.384079) 31190 POINT(631.155579 306.832458) 31191 POINT(804.939819 720.77124) 31192 POINT(558.957581 489.069916) 31193 POINT(931.970947 620.55365) 31194 POINT(490.766724 808.26532) 31195 POINT(515.077209 13.0112553) 31196 POINT(496.491272 335.975525) 31197 POINT(905.639465 250.75563) 31198 POINT(467.737122 779.290222) 31199 POINT(563.418579 655.712708) 31200 POINT(142.5224 357.112823) 31201 POINT(746.901367 860.885071) 31202 POINT(625.076111 134.329361) 31203 POINT(321.898895 767.443298) 31204 POINT(516.904846 300.989716) 31205 POINT(817.475952 801.880859) 31206 POINT(154.9375 714.163269) 31207 POINT(564.853516 546.275757) 31208 POINT(440.402435 864.894653) 31209 POINT(355.346588 102.489395) 31210 POINT(866.467407 378.579132) 31211 POINT(521.31543 364.365173) 31212 POINT(345.033905 431.649109) 31213 POINT(981.272827 102.28334) 31214 POINT(477.986176 688.871155) 31215 POINT(476.588287 818.994202) 31216 POINT(903.353943 792.590088) 31217 POINT(670.669922 387.354553) 31218 POINT(113.069984 217.333206) 31219 POINT(768.217957 717.89978) 31220 POINT(730.241333 730.348022) 31221 POINT(956.388855 81.2023315) 31222 POINT(147.170471 451.547485) 31223 POINT(963.868958 196.421219) 31224 POINT(860.959961 906.275269) 31225 POINT(898.438599 28.6887875) 31226 POINT(954.728333 723.187622) 31227 POINT(857.244446 164.986847) 31228 POINT(315.703369 99.9183655) 31229 POINT(533.449219 177.535599) 31230 POINT(166.309586 584.217957) 31231 POINT(673.071838 67.6826706) 31232 POINT(823.530273 481.717377) 31233 POINT(99.6834793 509.687347) 31234 POINT(761.111328 577.785156) 31235 POINT(533.30835 496.12265) 31236 POINT(697.542053 265.154358) 31237 POINT(322.6604 203.968567) 31238 POINT(692.256409 406.762695) 31239 POINT(804.103577 547.567627) 31240 POINT(928.349487 780.86145) 31241 POINT(441.964661 321.81311) 31242 POINT(770.61438 89.8218155) 31243 POINT(416.690216 942.215515) 31244 POINT(794.321716 742.73877) 31245 POINT(461.571075 199.445709) 31246 POINT(217.458359 813.068237) 31247 POINT(635.254639 821.812744) 31248 POINT(674.804382 234.921799) 31249 POINT(314.022919 902.747742) 31250 POINT(637.086731 834.696045) 31251 POINT(30.9740124 840.213257) 31252 POINT(296.440369 738.475586) 31253 POINT(243.059875 555.14032) 31254 POINT(157.608826 980.77594) 31255 POINT(613.788269 626.237061) 31256 POINT(342.921997 337.983459) 31257 POINT(729.799133 84.1694031) 31258 POINT(141.414841 982.207703) 31259 POINT(172.108292 950.159058) 31260 POINT(214.947205 100.736664) 31261 POINT(714.331665 949.079407) 31262 POINT(176.419846 146.032471) 31263 POINT(875.5448 957.382568) 31264 POINT(739.849854 505.019928) 31265 POINT(697.6026 709.513367) 31266 POINT(24.9923 628.712036) 31267 POINT(106.874527 646.33136) 31268 POINT(799.31781 709.027649) 31269 POINT(547.703186 874.579041) 31270 POINT(829.547791 884.649414) 31271 POINT(306.843994 362.317993) 31272 POINT(168.808701 398.234009) 31273 POINT(480.209381 331.871857) 31274 POINT(152.108963 700.135986) 31275 POINT(339.043274 455.125092) 31276 POINT(343.718109 926.579834) 31277 POINT(733.959534 797.647705) 31278 POINT(359.703186 591.077454) 31279 POINT(511.965454 405.261017) 31280 POINT(765.050415 475.62738) 31281 POINT(921.672363 152.189377) 31282 POINT(458.289307 242.262238) 31283 POINT(931.499634 662.329163) 31284 POINT(651.28833 995.874207) 31285 POINT(899.062927 228.512665) 31286 POINT(724.975769 96.6020966) 31287 POINT(299.489319 158.675751) 31288 POINT(593.351013 765.705505) 31289 POINT(266.623718 607.909424) 31290 POINT(391.611969 164.687729) 31291 POINT(622.619202 962.458008) 31292 POINT(175.978134 506.003906) 31293 POINT(294.994263 242.42627) 31294 POINT(192.406036 618.166382) 31295 POINT(550.777832 816.501526) 31296 POINT(151.570526 122.224281) 31297 POINT(147.851364 272.229492) 31298 POINT(804.041321 754.862732) 31299 POINT(225.175552 372.791595) 31300 POINT(111.464432 310.781189) 31301 POINT(765.509766 234.90831) 31302 POINT(78.8349609 479.227875) 31303 POINT(583.879395 777.169373) 31304 POINT(174.811646 462.883942) 31305 POINT(667.930603 974.119812) 31306 POINT(499.802643 528.616577) 31307 POINT(46.0611916 884.782349) 31308 POINT(946.682861 526.495361) 31309 POINT(237.593094 946.580688) 31310 POINT(471.062378 294.054932) 31311 POINT(376.136047 794.062195) 31312 POINT(884.706909 745.877441) 31313 POINT(750.692322 299.262817) 31314 POINT(897.832153 233.576736) 31315 POINT(315.102173 575.482788) 31316 POINT(257.504211 488.227844) 31317 POINT(539.384705 42.7505112) 31318 POINT(7.34592581 556.869751) 31319 POINT(258.776062 41.0749397) 31320 POINT(78.3672333 688.198853) 31321 POINT(188.308731 882.069336) 31322 POINT(515.332397 71.8869781) 31323 POINT(861.248657 151.652557) 31324 POINT(754.087402 793.630615) 31325 POINT(595.369263 782.898193) 31326 POINT(52.271656 827.243469) 31327 POINT(946.772522 190.931671) 31328 POINT(701.521851 479.618347) 31329 POINT(59.7778625 148.927185) 31330 POINT(229.465607 458.631165) 31331 POINT(524.421814 149.198975) 31332 POINT(853.439636 813.074097) 31333 POINT(299.602966 565.226196) 31334 POINT(847.027222 953.150269) 31335 POINT(17.2492905 853.914551) 31336 POINT(800.381836 996.229797) 31337 POINT(446.588715 422.8396) 31338 POINT(524.215027 882.368835) 31339 POINT(41.2992058 260.608917) 31340 POINT(296.715576 295.071259) 31341 POINT(617.761292 381.425598) 31342 POINT(467.109314 23.0860424) 31343 POINT(199.715454 974.662048) 31344 POINT(996.757507 267.477631) 31345 POINT(621.347351 549.608582) 31346 POINT(179.446075 684.189148) 31347 POINT(393.318939 513.027405) 31348 POINT(580.786377 945.883728) 31349 POINT(718.789062 466.815704) 31350 POINT(669.49646 988.658569) 31351 POINT(91.4098969 34.6921997) 31352 POINT(880.961914 200.56871) 31353 POINT(135.145996 455.720032) 31354 POINT(109.198418 821.688416) 31355 POINT(855.184448 269.639557) 31356 POINT(223.610001 112.215912) 31357 POINT(186.933716 681.013672) 31358 POINT(961.318298 149.054993) 31359 POINT(161.036758 158.307205) 31360 POINT(967.031189 816.175781) 31361 POINT(479.455719 298.086945) 31362 POINT(306.240417 934.279175) 31363 POINT(232.151337 277.011749) 31364 POINT(132.934341 945.904419) 31365 POINT(614.943054 404.290131) 31366 POINT(472.052673 938.79303) 31367 POINT(154.173386 469.535553) 31368 POINT(104.79258 499.338776) 31369 POINT(248.324722 115.80658) 31370 POINT(99.9168091 276.235168) 31371 POINT(24.3765659 231.04895) 31372 POINT(597.863586 679.507874) 31373 POINT(129.208878 984.767212) 31374 POINT(461.282013 710.16217) 31375 POINT(263.631805 297.768036) 31376 POINT(493.312561 19.4699974) 31377 POINT(976.662781 144.088165) 31378 POINT(184.321274 333.880127) 31379 POINT(506.612518 584.223511) 31380 POINT(672.82019 891.703735) 31381 POINT(647.637817 21.6148434) 31382 POINT(544.039734 451.760895) 31383 POINT(678.055176 79.7439651) 31384 POINT(690.254944 323.369568) 31385 POINT(80.3932724 200.507111) 31386 POINT(123.824829 193.325302) 31387 POINT(961.526184 566.732605) 31388 POINT(973.432434 891.399231) 31389 POINT(921.03009 19.4020824) 31390 POINT(965.778503 634.536499) 31391 POINT(372.030121 55.5435333) 31392 POINT(261.681427 355.15744) 31393 POINT(574.254456 803.742371) 31394 POINT(292.991516 975.162903) 31395 POINT(554.925232 644.239868) 31396 POINT(153.880371 599.460999) 31397 POINT(658.748169 198.759338) 31398 POINT(508.99115 626.733459) 31399 POINT(250.996902 106.242943) 31400 POINT(966.824829 407.028198) 31401 POINT(493.03067 934.952637) 31402 POINT(457.912506 902.521301) 31403 POINT(591.171814 884.85791) 31404 POINT(585.229614 556.971375) 31405 POINT(289.456024 498.507965) 31406 POINT(863.515747 369.157196) 31407 POINT(14.2375135 330.888306) 31408 POINT(622.367126 754.734619) 31409 POINT(191.994919 601.948303) 31410 POINT(455.989929 818.888062) 31411 POINT(137.066238 958.02771) 31412 POINT(4.28597546 938.91626) 31413 POINT(157.710571 54.4132957) 31414 POINT(542.556091 252.158157) 31415 POINT(349.224304 210.444626) 31416 POINT(40.7527008 581.70697) 31417 POINT(952.344482 616.31488) 31418 POINT(681.20166 222.107651) 31419 POINT(252.48024 737.951355) 31420 POINT(152.500626 702.211609) 31421 POINT(207.18631 689.71759) 31422 POINT(676.448547 385.744202) 31423 POINT(320.609253 456.376251) 31424 POINT(687.069031 445.713074) 31425 POINT(567.409912 243.644257) 31426 POINT(331.878235 130.959579) 31427 POINT(316.022736 734.233948) 31428 POINT(674.458435 246.97464) 31429 POINT(451.314575 202.608871) 31430 POINT(266.206787 704.226257) 31431 POINT(67.1358948 891.514771) 31432 POINT(949.024902 791.967102) 31433 POINT(835.419861 637.030334) 31434 POINT(628.023376 350.723145) 31435 POINT(184.018173 822.391785) 31436 POINT(795.479675 219.94574) 31437 POINT(782.11853 485.782196) 31438 POINT(728.876038 596.803955) 31439 POINT(169.754684 960.870667) 31440 POINT(164.558472 266.591278) 31441 POINT(134.601608 213.984924) 31442 POINT(455.209167 954.135437) 31443 POINT(171.079315 996.881958) 31444 POINT(547.86676 338.96756) 31445 POINT(918.02533 763.249329) 31446 POINT(816.726868 5.49740934) 31447 POINT(304.223297 720.045593) 31448 POINT(801.605896 834.338867) 31449 POINT(506.399933 386.930298) 31450 POINT(142.077011 44.1489143) 31451 POINT(90.5553589 119.310394) 31452 POINT(565.327576 367.427521) 31453 POINT(541.436279 479.553192) 31454 POINT(242.321259 181.831787) 31455 POINT(41.4730301 398.900299) 31456 POINT(434.561676 954.482788) 31457 POINT(922.594421 307.424713) 31458 POINT(328.476105 114.893829) 31459 POINT(843.136841 884.474487) 31460 POINT(715.105896 617.569885) 31461 POINT(926.837097 626.54364) 31462 POINT(591.481201 543.679993) 31463 POINT(909.022583 888.135498) 31464 POINT(411.96228 318.777771) 31465 POINT(662.09729 534.277161) 31466 POINT(131.270142 577.253296) 31467 POINT(291.898712 476.896179) 31468 POINT(87.350769 611.583801) 31469 POINT(610.228455 542.870117) 31470 POINT(356.191254 323.670837) 31471 POINT(76.7203827 746.441833) 31472 POINT(359.924164 905.400818) 31473 POINT(973.212341 785.707275) 31474 POINT(64.8437347 265.455811) 31475 POINT(412.062225 640.502502) 31476 POINT(111.256157 779.373352) 31477 POINT(900.65863 471.348022) 31478 POINT(169.466919 950.567993) 31479 POINT(280.096924 575.87439) 31480 POINT(915.867371 352.777283) 31481 POINT(447.136841 185.707184) 31482 POINT(423.339935 991.092407) 31483 POINT(953.757874 134.108505) 31484 POINT(817.501404 321.916229) 31485 POINT(284.640015 409.354858) 31486 POINT(574.218933 355.026703) 31487 POINT(844.608032 863.108826) 31488 POINT(337.056213 907.198669) 31489 POINT(778.487244 664.761169) 31490 POINT(81.6598892 460.964386) 31491 POINT(106.069458 795.360657) 31492 POINT(516.524414 619.116577) 31493 POINT(24.229229 37.4126129) 31494 POINT(908.145813 641.133911) 31495 POINT(924.050598 634.235474) 31496 POINT(878.487671 448.137451) 31497 POINT(838.629883 425.079285) 31498 POINT(922.255798 125.167526) 31499 POINT(900.641785 685.795227) 31500 POINT(412.158875 811.059143) 31501 POINT(499.553925 761.112) 31502 POINT(136.685684 815.138611) 31503 POINT(316.431976 520.746399) 31504 POINT(84.6597137 345.166809) 31505 POINT(237.598633 630.501892) 31506 POINT(344.748932 771.819763) 31507 POINT(343.13205 39.668869) 31508 POINT(920.166016 431.570526) 31509 POINT(96.5661545 151.535568) 31510 POINT(716.057739 512.778076) 31511 POINT(470.574066 84.3735733) 31512 POINT(389.749969 150.389969) 31513 POINT(800.379456 731.230225) 31514 POINT(565.403198 934.838074) 31515 POINT(510.786957 989.217529) 31516 POINT(711.19281 222.993515) 31517 POINT(690.804138 319.335541) 31518 POINT(818.425903 916.606873) 31519 POINT(546.733704 498.432587) 31520 POINT(670.736267 380.286163) 31521 POINT(633.344727 83.5402832) 31522 POINT(663.486145 431.170654) 31523 POINT(104.426613 288.999817) 31524 POINT(747.688049 511.081329) 31525 POINT(27.9436054 7.62260771) 31526 POINT(501.21524 304.734222) 31527 POINT(644.520386 933.329407) 31528 POINT(647.990417 890.879639) 31529 POINT(706.616882 774.635864) 31530 POINT(581.548584 593.891418) 31531 POINT(193.116333 511.980774) 31532 POINT(834.306702 768.917542) 31533 POINT(551.919983 438.821991) 31534 POINT(652.612122 922.376587) 31535 POINT(561.392395 243.885818) 31536 POINT(277.876404 600.137268) 31537 POINT(128.144348 812.796814) 31538 POINT(536.653442 17.5620632) 31539 POINT(139.807709 440.013214) 31540 POINT(451.33432 248.768402) 31541 POINT(481.402588 200.653152) 31542 POINT(795.279968 117.631165) 31543 POINT(695.013 806.140015) 31544 POINT(531.884155 561.501709) 31545 POINT(535.26947 92.978981) 31546 POINT(549.585999 882.268738) 31547 POINT(946.230103 621.371643) 31548 POINT(890.66333 810.773132) 31549 POINT(185.402023 706.389282) 31550 POINT(80.3216476 932.877258) 31551 POINT(952.747864 601.278625) 31552 POINT(206.830231 642.466064) 31553 POINT(279.57074 798.0224) 31554 POINT(49.0762329 172.739212) 31555 POINT(505.313934 317.996063) 31556 POINT(963.850891 327.379272) 31557 POINT(158.792267 14.5526361) 31558 POINT(53.5195541 593.210876) 31559 POINT(781.584473 894.355957) 31560 POINT(660.656677 312.095886) 31561 POINT(330.759949 145.622986) 31562 POINT(758.064453 358.946899) 31563 POINT(499.427124 315.101471) 31564 POINT(801.791321 292.42868) 31565 POINT(148.528595 43.2024345) 31566 POINT(25.8847198 583.319336) 31567 POINT(681.755493 105.457588) 31568 POINT(618.359192 291.405853) 31569 POINT(75.4159927 641.225403) 31570 POINT(319.041901 354.607819) 31571 POINT(932.705322 315.809082) 31572 POINT(515.533203 513.800598) 31573 POINT(231.342346 463.971069) 31574 POINT(130.546448 254.202667) 31575 POINT(817.346802 720.963867) 31576 POINT(442.57608 70.4961548) 31577 POINT(436.336304 246.992081) 31578 POINT(365.496979 819.97699) 31579 POINT(535.758179 893.456116) 31580 POINT(737.772766 18.5183544) 31581 POINT(893.694214 811.005188) 31582 POINT(398.013367 151.146362) 31583 POINT(587.171753 342.569611) 31584 POINT(513.369019 546.35553) 31585 POINT(988.287048 127.005119) 31586 POINT(996.499023 125.350418) 31587 POINT(531.031921 224.239639) 31588 POINT(314.554749 549.225403) 31589 POINT(414.766968 589.967834) 31590 POINT(431.837463 504.353882) 31591 POINT(269.192719 221.716461) 31592 POINT(611.726929 285.237244) 31593 POINT(995.933777 878.857727) 31594 POINT(861.450378 541.678772) 31595 POINT(497.110107 72.8516541) 31596 POINT(666.71228 280.937408) 31597 POINT(103.278923 422.257812) 31598 POINT(516.712036 573.643494) 31599 POINT(101.771347 877.094299) 31600 POINT(451.324341 163.513824) 31601 POINT(549.733032 411.790802) 31602 POINT(312.038116 474.699219) 31603 POINT(320.233612 753.76062) 31604 POINT(590.576416 636.97644) 31605 POINT(188.899643 509.602753) 31606 POINT(241.034973 788.616516) 31607 POINT(415.028503 642.867554) 31608 POINT(753.065186 390.917175) 31609 POINT(225.567352 881.531189) 31610 POINT(328.41687 808.991577) 31611 POINT(471.321136 40.7966881) 31612 POINT(517.487244 332.993652) 31613 POINT(419.048767 954.18158) 31614 POINT(965.968933 875.70282) 31615 POINT(675.59552 245.282791) 31616 POINT(506.943909 170.070114) 31617 POINT(943.903442 341.987823) 31618 POINT(176.653702 678.364929) 31619 POINT(96.7712479 247.695908) 31620 POINT(501.63736 27.9862213) 31621 POINT(661.859497 719.433472) 31622 POINT(723.028992 413.490234) 31623 POINT(558.037781 755.314209) 31624 POINT(315.754181 496.215881) 31625 POINT(954.256104 23.9623241) 31626 POINT(4.46659565 228.981308) 31627 POINT(661.327759 952.26062) 31628 POINT(455.779205 211.215576) 31629 POINT(66.0878448 266.708832) 31630 POINT(372.229431 507.743927) 31631 POINT(406.231598 515.002625) 31632 POINT(965.177551 851.051331) 31633 POINT(120.73819 401.02951) 31634 POINT(832.287476 191.62207) 31635 POINT(131.289017 86.7916641) 31636 POINT(404.327301 203.932617) 31637 POINT(578.748901 152.9189) 31638 POINT(102.820992 527.521729) 31639 POINT(697.976624 885.144836) 31640 POINT(614.782227 794.570557) 31641 POINT(934.478394 452.744965) 31642 POINT(646.681396 329.503937) 31643 POINT(936.342773 367.448486) 31644 POINT(773.386841 404.816193) 31645 POINT(871.261414 124.340034) 31646 POINT(608.649658 93.7919159) 31647 POINT(376.123657 911.989075) 31648 POINT(254.464218 708.825012) 31649 POINT(928.688171 785.335388) 31650 POINT(553.15271 78.0503464) 31651 POINT(198.308014 285.194336) 31652 POINT(987.239746 158.031387) 31653 POINT(974.882019 491.729156) 31654 POINT(520.168335 761.960083) 31655 POINT(159.500229 260.593384) 31656 POINT(320.861267 197.506592) 31657 POINT(422.158386 520.028076) 31658 POINT(195.369934 943.024841) 31659 POINT(965.064392 130.981644) 31660 POINT(890.819702 872.813538) 31661 POINT(176.210129 821.906433) 31662 POINT(925.132324 89.7105255) 31663 POINT(196.914719 12.5025053) 31664 POINT(618.271362 895.259033) 31665 POINT(766.967773 109.175812) 31666 POINT(897.840088 473.432373) 31667 POINT(437.951141 777.834656) 31668 POINT(767.706726 273.484558) 31669 POINT(973.544983 230.961533) 31670 POINT(60.0105553 31.5688419) 31671 POINT(677.520264 175.40007) 31672 POINT(938.606812 690.625488) 31673 POINT(526.18396 490.333466) 31674 POINT(239.064041 875.59491) 31675 POINT(430.916626 192.485107) 31676 POINT(973.173584 908.807312) 31677 POINT(144.875946 814.239441) 31678 POINT(504.143097 851.592285) 31679 POINT(260.819946 2.39212227) 31680 POINT(24.9153442 616.536865) 31681 POINT(257.338196 238.44249) 31682 POINT(12.204421 584.807678) 31683 POINT(549.699158 899.217712) 31684 POINT(451.814423 299.585144) 31685 POINT(228.287231 998.262817) 31686 POINT(458.676544 995.593628) 31687 POINT(439.594086 468.578156) 31688 POINT(772.999084 912.248352) 31689 POINT(827.45575 626.279602) 31690 POINT(780.296326 360.98233) 31691 POINT(829.321289 868.580872) 31692 POINT(659.287048 353.411652) 31693 POINT(965.558777 849.745972) 31694 POINT(942.308655 614.304688) 31695 POINT(199.031296 502.56601) 31696 POINT(815.66333 10.6297874) 31697 POINT(435.422089 753.325684) 31698 POINT(483.033264 724.682861) 31699 POINT(818.17804 553.619812) 31700 POINT(657.700623 925.478149) 31701 POINT(509.743713 626.857971) 31702 POINT(985.873047 678.886719) 31703 POINT(585.344604 820.587036) 31704 POINT(884.125488 454.716187) 31705 POINT(767.467407 153.211777) 31706 POINT(802.158875 799.961121) 31707 POINT(347.000793 46.2875938) 31708 POINT(404.179138 654.344238) 31709 POINT(447.504639 107.890114) 31710 POINT(157.795792 880.192383) 31711 POINT(47.1531372 460.86731) 31712 POINT(591.116394 997.425049) 31713 POINT(961.549561 539.8974) 31714 POINT(242.495972 880.397949) 31715 POINT(470.977692 576.690979) 31716 POINT(502.132874 451.577942) 31717 POINT(936.988953 482.484741) 31718 POINT(2.45451403 753.187378) 31719 POINT(662.911865 365.911682) 31720 POINT(530.204285 388.346008) 31721 POINT(306.417389 602.738586) 31722 POINT(135.643646 284.755768) 31723 POINT(323.312378 827.826538) 31724 POINT(934.76825 274.171844) 31725 POINT(512.025269 840.581116) 31726 POINT(223.471848 717.936035) 31727 POINT(617.669434 610.356628) 31728 POINT(835.873657 601.510071) 31729 POINT(851.135437 10.6009264) 31730 POINT(23.37467 318.649475) 31731 POINT(868.501587 788.464172) 31732 POINT(550.368103 58.6414223) 31733 POINT(353.421875 544.234985) 31734 POINT(693.97406 978.558838) 31735 POINT(542.435913 122.048103) 31736 POINT(598.889404 508.043457) 31737 POINT(350.851501 35.1744347) 31738 POINT(127.763412 408.641754) 31739 POINT(793.613586 116.833664) 31740 POINT(318.87262 945.711609) 31741 POINT(78.1484528 17.4676781) 31742 POINT(625.846252 471.566986) 31743 POINT(579.442017 994.000854) 31744 POINT(781.478027 247.613434) 31745 POINT(224.587662 453.646423) 31746 POINT(865.076111 725.168823) 31747 POINT(25.8480854 237.770554) 31748 POINT(629.293579 174.498047) 31749 POINT(347.18219 739.301697) 31750 POINT(480.015717 304.980988) 31751 POINT(286.570251 734.895325) 31752 POINT(526.856934 802.571655) 31753 POINT(450.837128 640.888367) 31754 POINT(610.454651 860.703003) 31755 POINT(614.65918 645.978088) 31756 POINT(147.491577 275.089233) 31757 POINT(842.80011 475.138123) 31758 POINT(449.793671 379.638672) 31759 POINT(744.240051 55.7681503) 31760 POINT(7.64298153 528.701599) 31761 POINT(576.746887 11.313139) 31762 POINT(170.424927 379.558105) 31763 POINT(966.722656 138.060806) 31764 POINT(3.84895039 438.43573) 31765 POINT(416.097809 31.6328182) 31766 POINT(599.308105 134.099991) 31767 POINT(478.027374 40.5533104) 31768 POINT(207.672134 646.476135) 31769 POINT(266.668518 220.559265) 31770 POINT(670.261292 305.744873) 31771 POINT(672.028748 945.986633) 31772 POINT(330.368439 192.452896) 31773 POINT(455.517303 70.2273407) 31774 POINT(989.057739 604.553833) 31775 POINT(60.3008537 798.129028) 31776 POINT(281.760437 946.731995) 31777 POINT(65.8575974 787.157532) 31778 POINT(813.238037 865.281067) 31779 POINT(409.3815 994.63324) 31780 POINT(416.729736 763.243042) 31781 POINT(777.163635 764.490906) 31782 POINT(370.618988 241.133606) 31783 POINT(504.154999 943.527527) 31784 POINT(387.938507 214.666336) 31785 POINT(305.103424 44.337326) 31786 POINT(718.799683 49.364048) 31787 POINT(669.586304 756.075012) 31788 POINT(4.83451033 750.343689) 31789 POINT(587.692749 336.429626) 31790 POINT(282.536896 172.048096) 31791 POINT(812.922058 505.963867) 31792 POINT(136.690277 126.062828) 31793 POINT(322.07016 582.127869) 31794 POINT(796.680481 814.811096) 31795 POINT(284.606476 423.267517) 31796 POINT(491.371765 994.907715) 31797 POINT(320.551514 756.91925) 31798 POINT(629.431519 856.932983) 31799 POINT(298.543854 111.339386) 31800 POINT(51.7274666 619.652893) 31801 POINT(425.130737 589.911499) 31802 POINT(364.005219 988.174133) 31803 POINT(0.970579028 375.784607) 31804 POINT(57.934185 769.722107) 31805 POINT(396.350464 145.417862) 31806 POINT(76.3508301 320.830109) 31807 POINT(532.084656 536.876831) 31808 POINT(686.830811 999.51825) 31809 POINT(275.474426 759.584839) 31810 POINT(962.402222 189.935089) 31811 POINT(585.711182 160.265259) 31812 POINT(998.217163 669.971375) 31813 POINT(208.151703 654.114258) 31814 POINT(840.401428 410.200592) 31815 POINT(39.6664963 985.543091) 31816 POINT(293.289673 271.441559) 31817 POINT(613.269836 659.483582) 31818 POINT(582.159546 345.187866) 31819 POINT(203.116776 458.226166) 31820 POINT(761.831604 833.651245) 31821 POINT(882.452393 871.669006) 31822 POINT(711.688354 762.377502) 31823 POINT(107.107849 677.915588) 31824 POINT(182.470642 467.110687) 31825 POINT(503.664246 739.228638) 31826 POINT(250.456406 597.213684) 31827 POINT(50.5781097 763.89624) 31828 POINT(484.261505 370.540558) 31829 POINT(616.645142 31.7037621) 31830 POINT(385.595337 429.864807) 31831 POINT(306.547546 609.148865) 31832 POINT(178.047333 960.083435) 31833 POINT(528.400635 375.64801) 31834 POINT(690.699768 690.355408) 31835 POINT(491.80957 744.72937) 31836 POINT(22.4982796 128.635437) 31837 POINT(643.736877 561.195618) 31838 POINT(438.436554 350.889221) 31839 POINT(608.334534 568.697571) 31840 POINT(802.42157 27.418766) 31841 POINT(598.833496 619.932251) 31842 POINT(9.99897385 138.597641) 31843 POINT(175.727631 507.251465) 31844 POINT(765.88208 176.953934) 31845 POINT(125.107231 753.93219) 31846 POINT(528.510986 107.610031) 31847 POINT(191.465088 770.452026) 31848 POINT(91.8680191 160.880859) 31849 POINT(316.125275 556.178589) 31850 POINT(621.808228 746.258789) 31851 POINT(879.267273 240.898651) 31852 POINT(741.68219 633.615967) 31853 POINT(522.087769 604.184143) 31854 POINT(654.59137 663.394409) 31855 POINT(315.848572 690.942566) 31856 POINT(184.93309 881.621887) 31857 POINT(54.4034653 431.480927) 31858 POINT(860.769165 297.200684) 31859 POINT(62.4175034 962.501953) 31860 POINT(784.94751 718.105774) 31861 POINT(247.143082 85.7513428) 31862 POINT(553.87793 20.5636959) 31863 POINT(869.683228 963.268982) 31864 POINT(78.6195068 62.2504044) 31865 POINT(192.661102 967.721008) 31866 POINT(996.784119 478.963074) 31867 POINT(373.757446 334.075562) 31868 POINT(792.157898 156.622543) 31869 POINT(645.435364 411.538666) 31870 POINT(571.449036 990.01709) 31871 POINT(455.222931 424.411407) 31872 POINT(196.887817 10.190876) 31873 POINT(171.180893 515.217896) 31874 POINT(605.351685 358.228302) 31875 POINT(594.77417 776.56427) 31876 POINT(328.20871 319.42572) 31877 POINT(607.553467 58.8178864) 31878 POINT(583.239746 514.139221) 31879 POINT(126.216255 663.578735) 31880 POINT(666.005981 816.241333) 31881 POINT(298.264435 958.391541) 31882 POINT(501.195831 974.023071) 31883 POINT(761.243469 352.20694) 31884 POINT(106.258247 719.081177) 31885 POINT(364.187897 595.331787) 31886 POINT(804.579041 234.397385) 31887 POINT(140.299347 669.250854) 31888 POINT(441.278351 722.234741) 31889 POINT(483.048035 533.596497) 31890 POINT(692.219666 865.063049) 31891 POINT(449.954987 138.171783) 31892 POINT(109.971024 748.514709) 31893 POINT(263.532562 591.396851) 31894 POINT(566.317871 245.035263) 31895 POINT(339.623535 422.571045) 31896 POINT(679.685486 511.710846) 31897 POINT(320.186096 969.282471) 31898 POINT(60.8149643 597.646912) 31899 POINT(469.062622 64.1197739) 31900 POINT(377.686829 787.778381) 31901 POINT(582.195068 153.160843) 31902 POINT(390.578308 224.26889) 31903 POINT(22.9990044 534.744812) 31904 POINT(2.96536541 177.504166) 31905 POINT(202.183456 608.638062) 31906 POINT(729.559326 610.505981) 31907 POINT(440.341949 436.352722) 31908 POINT(718.047485 58.4372177) 31909 POINT(670.396545 862.171326) 31910 POINT(948.156067 384.391296) 31911 POINT(422.83606 276.100983) 31912 POINT(545.668518 370.155273) 31913 POINT(385.157928 424.873199) 31914 POINT(318.331299 943.015564) 31915 POINT(11.6353312 621.201965) 31916 POINT(876.612244 854.481262) 31917 POINT(982.242188 156.411331) 31918 POINT(729.606628 932.192322) 31919 POINT(150.164658 594.471985) 31920 POINT(932.716797 381.050568) 31921 POINT(183.814224 89.2970352) 31922 POINT(549.87561 663.174377) 31923 POINT(687.766479 610.314026) 31924 POINT(922.993408 28.6699047) 31925 POINT(791.84375 437.958801) 31926 POINT(512.046814 981.099304) 31927 POINT(221.01416 970.549194) 31928 POINT(580.998169 664.197693) 31929 POINT(721.410583 502.347992) 31930 POINT(910.849182 61.7585182) 31931 POINT(518.205505 440.489532) 31932 POINT(878.043091 863.214539) 31933 POINT(646.075745 442.42572) 31934 POINT(953.703186 106.445496) 31935 POINT(527.433899 207.869431) 31936 POINT(969.528503 150.542068) 31937 POINT(910.49939 447.73114) 31938 POINT(325.379272 929.055603) 31939 POINT(129.765549 690.731689) 31940 POINT(850.622498 703.706116) 31941 POINT(854.745728 655.333252) 31942 POINT(898.238098 985.271912) 31943 POINT(866.43634 505.089111) 31944 POINT(772.71106 858.731628) 31945 POINT(590.222717 279.819946) 31946 POINT(48.165226 480.586151) 31947 POINT(842.612488 529.160095) 31948 POINT(203.484818 985.193115) 31949 POINT(568.960632 810.579102) 31950 POINT(220.884644 812.069275) 31951 POINT(890.143677 408.202484) 31952 POINT(1.22601509 556.235229) 31953 POINT(995.944641 804.478699) 31954 POINT(234.154861 748.217529) 31955 POINT(857.868958 32.4472427) 31956 POINT(517.80365 529.317017) 31957 POINT(248.470078 756.153748) 31958 POINT(298.422333 431.866333) 31959 POINT(590.419434 490.35968) 31960 POINT(545.079956 474.721313) 31961 POINT(987.001099 763.460938) 31962 POINT(891.826904 503.077759) 31963 POINT(755.09375 750.432434) 31964 POINT(375.877045 241.411148) 31965 POINT(568.768005 222.260834) 31966 POINT(435.024078 382.07016) 31967 POINT(181.266068 856.941162) 31968 POINT(763.347717 333.603363) 31969 POINT(708.348389 582.541748) 31970 POINT(177.110336 26.6746273) 31971 POINT(787.91803 738.570679) 31972 POINT(231.539551 586.468811) 31973 POINT(68.7338181 276.999329) 31974 POINT(826.005981 284.465454) 31975 POINT(492.270081 823.544983) 31976 POINT(15.1372538 175.657715) 31977 POINT(611.892395 293.538116) 31978 POINT(234.972748 296.626404) 31979 POINT(716.119446 530.872375) 31980 POINT(887.812805 472.887665) 31981 POINT(89.5945587 504.76236) 31982 POINT(891.511536 278.778809) 31983 POINT(236.375458 364.542511) 31984 POINT(276.308899 768.620789) 31985 POINT(13.2786942 790.375671) 31986 POINT(45.7077789 403.411072) 31987 POINT(162.415497 775.989319) 31988 POINT(351.326202 422.896118) 31989 POINT(805.988708 192.510025) 31990 POINT(62.1606407 439.21405) 31991 POINT(765.267395 179.859695) 31992 POINT(236.480179 576.671265) 31993 POINT(609.925842 829.356445) 31994 POINT(982.953918 264.539551) 31995 POINT(732.257568 509.105042) 31996 POINT(83.0388184 158.567978) 31997 POINT(399.913544 59.0716057) 31998 POINT(348.695679 365.36499) 31999 POINT(175.646637 477.639313) 32000 POINT(520.847656 555.703796) 32001 POINT(636.082031 433.784882) 32002 POINT(40.4753075 952.559509) 32003 POINT(384.906464 282.283234) 32004 POINT(914.793823 982.331909) 32005 POINT(678.33728 312.634186) 32006 POINT(277.655182 388.912079) 32007 POINT(879.676758 820.44104) 32008 POINT(931.35675 276.300598) 32009 POINT(580.687439 613.107727) 32010 POINT(934.736328 203.296158) 32011 POINT(794.070984 625.933289) 32012 POINT(151.236832 580.881592) 32013 POINT(685.256409 71.5732346) 32014 POINT(25.1065674 87.5086899) 32015 POINT(2.88447547 632.635193) 32016 POINT(851.751282 128.307129) 32017 POINT(643.822754 556.724731) 32018 POINT(540.300293 920.736084) 32019 POINT(686.390869 564.046631) 32020 POINT(626.628967 131.393295) 32021 POINT(108.980583 433.782013) 32022 POINT(830.469421 47.2639122) 32023 POINT(222.795212 216.646713) 32024 POINT(211.033264 610.917603) 32025 POINT(357.525208 712.62561) 32026 POINT(365.0849 744.960205) 32027 POINT(396.045135 155.862183) 32028 POINT(736.086487 838.95636) 32029 POINT(535.425781 729.655457) 32030 POINT(22.4599438 65.2275314) 32031 POINT(911.584656 375.705566) 32032 POINT(649.864807 962.177612) 32033 POINT(46.7541008 411.009979) 32034 POINT(22.5039425 999.532349) 32035 POINT(123.76709 286.615723) 32036 POINT(710.777832 284.123901) 32037 POINT(848.196716 743.885437) 32038 POINT(239.188812 233.283859) 32039 POINT(696.027649 990.759399) 32040 POINT(784.443054 631.808777) 32041 POINT(56.2857475 943.046814) 32042 POINT(907.528442 584.749939) 32043 POINT(638.547485 180.030136) 32044 POINT(656.609253 209.4888) 32045 POINT(326.240326 941.2229) 32046 POINT(674.442566 594.860413) 32047 POINT(798.025696 149.20549) 32048 POINT(712.379822 351.263275) 32049 POINT(919.320496 254.92897) 32050 POINT(533.696777 633.162476) 32051 POINT(410.306702 355.202789) 32052 POINT(125.930939 624.192322) 32053 POINT(239.851059 981.364075) 32054 POINT(432.180603 315.85788) 32055 POINT(768.994507 673.097351) 32056 POINT(155.116333 804.91272) 32057 POINT(893.582031 667.379272) 32058 POINT(238.106033 993.76416) 32059 POINT(411.81781 0.545870721) 32060 POINT(241.793732 355.27066) 32061 POINT(995.809875 58.1158752) 32062 POINT(321.278809 561.207397) 32063 POINT(481.392365 144.483063) 32064 POINT(881.405396 156.27916) 32065 POINT(540.690857 280.764771) 32066 POINT(211.415726 861.267517) 32067 POINT(78.1607285 987.436401) 32068 POINT(644.289001 424.746704) 32069 POINT(132.437256 847.997742) 32070 POINT(672.550903 518.461609) 32071 POINT(490.670959 775.531006) 32072 POINT(306.391388 933.213806) 32073 POINT(274.592621 975.975281) 32074 POINT(59.8946075 116.863731) 32075 POINT(161.990097 996.231934) 32076 POINT(778.502014 881.371887) 32077 POINT(715.342529 103.435692) 32078 POINT(10.0787315 259.825775) 32079 POINT(130.930038 721.099487) 32080 POINT(410.819733 25.9292068) 32081 POINT(54.8233414 171.221893) 32082 POINT(356.54248 196.875595) 32083 POINT(472.89682 477.308075) 32084 POINT(293.610077 965.926025) 32085 POINT(934.649963 175.704788) 32086 POINT(658.883301 384.034698) 32087 POINT(957.556641 681.406494) 32088 POINT(374.907043 801.79248) 32089 POINT(650.391846 744.912354) 32090 POINT(888.31781 555.710449) 32091 POINT(739.145447 419.774384) 32092 POINT(572.657593 738.979736) 32093 POINT(954.483032 2.77647853) 32094 POINT(620.967041 629.482605) 32095 POINT(400.130646 892.455444) 32096 POINT(571.403198 590.784424) 32097 POINT(150.06134 784.759644) 32098 POINT(556.502686 39.5181732) 32099 POINT(80.0680237 150.52478) 32100 POINT(662.537842 550.0271) 32101 POINT(315.488525 347.22702) 32102 POINT(301.75882 900.011292) 32103 POINT(738.877502 851.874512) 32104 POINT(812.376343 45.5315399) 32105 POINT(644.81134 73.2790985) 32106 POINT(137.236038 736.961304) 32107 POINT(827.39624 636.278564) 32108 POINT(123.714218 976.893921) 32109 POINT(441.181549 319.363037) 32110 POINT(918.993591 394.763367) 32111 POINT(767.949646 377.823364) 32112 POINT(994.252686 129.817307) 32113 POINT(258.26059 469.831604) 32114 POINT(359.246826 123.502937) 32115 POINT(683.812561 11.268301) 32116 POINT(569.211182 114.328102) 32117 POINT(48.8920097 470.720795) 32118 POINT(676.056641 783.506775) 32119 POINT(758.817993 848.626343) 32120 POINT(535.641479 739.478394) 32121 POINT(950.83313 599.367981) 32122 POINT(5.8178606 565.619324) 32123 POINT(457.00177 303.231323) 32124 POINT(912.406311 340.678528) 32125 POINT(516.094971 993.095093) 32126 POINT(31.8249874 618.836609) 32127 POINT(587.05426 720.786133) 32128 POINT(252.477249 209.592545) 32129 POINT(773.447754 508.031433) 32130 POINT(998.012146 501.342682) 32131 POINT(857.484802 580.360291) 32132 POINT(593.155273 941.56842) 32133 POINT(502.905396 808.254272) 32134 POINT(649.036438 426.660706) 32135 POINT(135.785583 673.0354) 32136 POINT(565.009949 211.864166) 32137 POINT(496.513306 195.774277) 32138 POINT(666.192505 863.540894) 32139 POINT(98.5148315 991.869568) 32140 POINT(301.780273 219.469727) 32141 POINT(381.518402 583.49762) 32142 POINT(853.21759 166.375275) 32143 POINT(339.103149 974.082214) 32144 POINT(181.174683 796.113953) 32145 POINT(790.009888 186.144821) 32146 POINT(666.865906 562.340576) 32147 POINT(286.317993 424.833923) 32148 POINT(970.453552 968.084534) 32149 POINT(273.377106 958.210999) 32150 POINT(684.202209 2.13636446) 32151 POINT(478.705353 921.705505) 32152 POINT(650.871948 579.778625) 32153 POINT(380.437775 543.401184) 32154 POINT(251.883804 93.0988235) 32155 POINT(838.959717 749.954773) 32156 POINT(51.5072861 440.439819) 32157 POINT(744.848328 516.577698) 32158 POINT(872.271484 576.634216) 32159 POINT(597.057129 450.856903) 32160 POINT(435.689789 339.327484) 32161 POINT(860.415649 997.107727) 32162 POINT(847.029724 586.331421) 32163 POINT(422.117432 878.911621) 32164 POINT(352.200958 189.602173) 32165 POINT(462.187897 291.599792) 32166 POINT(320.946655 228.77594) 32167 POINT(140.34671 258.425171) 32168 POINT(388.599182 507.501404) 32169 POINT(76.7085037 84.3710251) 32170 POINT(147.025162 866.001953) 32171 POINT(140.041519 105.953728) 32172 POINT(945.477417 410.917755) 32173 POINT(356.577087 835.587341) 32174 POINT(928.466064 846.683533) 32175 POINT(194.521103 42.3195419) 32176 POINT(788.153625 330.280975) 32177 POINT(272.467346 469.87088) 32178 POINT(183.985397 332.579651) 32179 POINT(969.985535 456.389038) 32180 POINT(926.238892 664.685059) 32181 POINT(100.010674 142.270645) 32182 POINT(829.977417 297.412506) 32183 POINT(927.681091 702.528137) 32184 POINT(321.72464 687.489807) 32185 POINT(409.461456 853.843201) 32186 POINT(76.3560181 737.271179) 32187 POINT(678.386597 14.626111) 32188 POINT(32.6746902 108.165573) 32189 POINT(942.818542 955.692688) 32190 POINT(392.476593 624.798706) 32191 POINT(102.117607 601.807495) 32192 POINT(662.304016 830.939453) 32193 POINT(346.084442 128.170654) 32194 POINT(415.361877 163.833115) 32195 POINT(707.077942 454.425598) 32196 POINT(402.170776 615.839355) 32197 POINT(213.601868 251.037231) 32198 POINT(544.524353 456.837982) 32199 POINT(769.27063 233.660248) 32200 POINT(533.403992 544.022217) 32201 POINT(796.91571 690.737732) 32202 POINT(495.999329 784.371338) 32203 POINT(767.814148 244.017548) 32204 POINT(981.33374 416.811401) 32205 POINT(32.3648643 922.5495) 32206 POINT(272.772064 314.006653) 32207 POINT(510.891144 895.255981) 32208 POINT(406.587372 476.65741) 32209 POINT(249.618118 78.2058868) 32210 POINT(849.603333 205.533249) 32211 POINT(133.390808 248.740616) 32212 POINT(359.659271 128.274948) 32213 POINT(37.623909 963.705322) 32214 POINT(367.327911 759.927368) 32215 POINT(839.688599 212.952713) 32216 POINT(226.157715 659.498596) 32217 POINT(264.953644 327.365601) 32218 POINT(785.020447 471.499603) 32219 POINT(863.639465 703.859436) 32220 POINT(46.3773842 313.938538) 32221 POINT(178.274673 674.78479) 32222 POINT(747.994446 585.788086) 32223 POINT(622.744019 618.074341) 32224 POINT(805.541809 451.306671) 32225 POINT(835.697449 725.221252) 32226 POINT(895.418884 40.1816063) 32227 POINT(454.579529 780.216431) 32228 POINT(460.0047 946.322327) 32229 POINT(870.999023 683.007629) 32230 POINT(953.40918 469.919312) 32231 POINT(640.970703 120.601158) 32232 POINT(789.895081 423.396332) 32233 POINT(730.232727 857.965088) 32234 POINT(737.767334 299.03009) 32235 POINT(649.007935 215.374725) 32236 POINT(150.135818 401.830688) 32237 POINT(73.9925079 810.384827) 32238 POINT(625.119019 803.93634) 32239 POINT(647.903442 978.428528) 32240 POINT(329.461395 935.060974) 32241 POINT(996.606445 118.996696) 32242 POINT(142.013046 436.862579) 32243 POINT(396.80838 732.907349) 32244 POINT(21.004612 867.50647) 32245 POINT(77.7941589 74.4449387) 32246 POINT(68.6205292 626.852844) 32247 POINT(541.097656 109.851471) 32248 POINT(858.218811 403.883179) 32249 POINT(52.8281822 86.1442337) 32250 POINT(856.991516 738.114685) 32251 POINT(203.260635 222.49028) 32252 POINT(576.346741 288.37384) 32253 POINT(63.9993629 356.989227) 32254 POINT(223.396057 858.571899) 32255 POINT(509.419739 346.929779) 32256 POINT(622.341736 524.83667) 32257 POINT(39.1925316 428.243256) 32258 POINT(490.097748 615.922241) 32259 POINT(353.631866 903.454712) 32260 POINT(455.094666 234.276123) 32261 POINT(732.63739 526.033386) 32262 POINT(623.978333 274.1604) 32263 POINT(269.509338 877.391479) 32264 POINT(853.011597 942.085815) 32265 POINT(358.407013 251.230026) 32266 POINT(947.751221 950.440063) 32267 POINT(752.330933 944.455078) 32268 POINT(777.436707 315.113831) 32269 POINT(548.994629 46.0914612) 32270 POINT(184.073685 910.313904) 32271 POINT(754.695923 472.729584) 32272 POINT(728.10675 127.389534) 32273 POINT(579.306213 43.9050331) 32274 POINT(833.68573 548.803772) 32275 POINT(364.90683 261.908813) 32276 POINT(70.7707596 23.3902988) 32277 POINT(410.665222 361.958038) 32278 POINT(885.776062 845.417114) 32279 POINT(869.649658 350.1492) 32280 POINT(517.303162 469.014954) 32281 POINT(129.933517 633.523254) 32282 POINT(512.094788 793.141052) 32283 POINT(501.172638 469.864929) 32284 POINT(795.084351 132.970627) 32285 POINT(785.609314 591.145569) 32286 POINT(705.9021 544.607361) 32287 POINT(174.048523 766.020996) 32288 POINT(555.11676 825.068054) 32289 POINT(455.772064 811.367371) 32290 POINT(792.664734 793.038574) 32291 POINT(427.736267 203.95636) 32292 POINT(737.292358 32.9601021) 32293 POINT(622.001587 310.132599) 32294 POINT(361.479431 211.246338) 32295 POINT(608.543152 688.497009) 32296 POINT(936.419189 45.1466637) 32297 POINT(568.90564 538.460022) 32298 POINT(444.525848 608.8703) 32299 POINT(48.2191353 292.093506) 32300 POINT(794.06366 625.608643) 32301 POINT(580.650146 469.579071) 32302 POINT(706.418884 836.206909) 32303 POINT(626.299622 146.945908) 32304 POINT(78.9577637 214.222778) 32305 POINT(163.890991 891.571533) 32306 POINT(996.153442 362.394318) 32307 POINT(639.444092 494.554626) 32308 POINT(912.667175 667.1474) 32309 POINT(390.767578 723.665588) 32310 POINT(861.402161 886.381287) 32311 POINT(343.40271 105.862434) 32312 POINT(547.411133 622.659912) 32313 POINT(726.122986 159.679321) 32314 POINT(528.249817 301.023895) 32315 POINT(881.87384 786.129333) 32316 POINT(209.369949 680.46344) 32317 POINT(379.875488 708.712097) 32318 POINT(409.015808 823.816467) 32319 POINT(571.399963 960.909058) 32320 POINT(783.512024 716.272034) 32321 POINT(308.473511 751.035217) 32322 POINT(416.638367 132.178757) 32323 POINT(672.581177 402.971771) 32324 POINT(534.917053 818.519531) 32325 POINT(478.623077 56.2327385) 32326 POINT(236.163361 896.883301) 32327 POINT(845.268311 4.74479151) 32328 POINT(636.767517 530.330322) 32329 POINT(901.985779 820.996948) 32330 POINT(232.201309 194.123688) 32331 POINT(459.031982 126.819305) 32332 POINT(6.62584543 307.424438) 32333 POINT(251.3022 175.582962) 32334 POINT(855.786438 894.885681) 32335 POINT(810.083923 460.297821) 32336 POINT(840.309814 361.423767) 32337 POINT(576.404602 780.779785) 32338 POINT(254.891983 279.699829) 32339 POINT(81.9628067 529.233337) 32340 POINT(276.624908 348.060333) 32341 POINT(752.838867 91.3552856) 32342 POINT(289.926056 807.515869) 32343 POINT(579.677368 929.138428) 32344 POINT(826.40625 681.080261) 32345 POINT(816.325134 97.2855148) 32346 POINT(308.853088 179.355484) 32347 POINT(365.633575 148.51825) 32348 POINT(555.769287 605.174011) 32349 POINT(263.043579 870.679688) 32350 POINT(846.15564 580.562134) 32351 POINT(930.554749 352.608307) 32352 POINT(526.162598 545.053894) 32353 POINT(728.739624 44.1633987) 32354 POINT(875.672302 259.882324) 32355 POINT(943.737244 821.974976) 32356 POINT(662.763306 662.837219) 32357 POINT(198.900696 425.585052) 32358 POINT(369.416931 409.275269) 32359 POINT(444.365997 833.362061) 32360 POINT(47.9483452 2.18519688) 32361 POINT(47.7649117 314.261078) 32362 POINT(692.80603 645.263611) 32363 POINT(59.2475853 646.144958) 32364 POINT(618.022339 75.1831436) 32365 POINT(755.678955 725.578064) 32366 POINT(801.289734 260.799988) 32367 POINT(962.202026 914.978149) 32368 POINT(379.077209 256.740479) 32369 POINT(112.33136 653.620483) 32370 POINT(294.203461 816.040344) 32371 POINT(326.485657 287.701569) 32372 POINT(551.804077 891.32489) 32373 POINT(77.6440582 705.595337) 32374 POINT(128.727386 567.077332) 32375 POINT(964.001709 167.294342) 32376 POINT(505.272858 588.136108) 32377 POINT(242.614136 927.175537) 32378 POINT(200.16069 693.601807) 32379 POINT(693.6875 617.644226) 32380 POINT(946.141663 783.36261) 32381 POINT(9.15421677 404.485809) 32382 POINT(54.2882843 279.624939) 32383 POINT(736.349792 175.124985) 32384 POINT(592.451538 281.954651) 32385 POINT(190.988724 276.307587) 32386 POINT(713.437927 525.80658) 32387 POINT(94.3530197 891.452454) 32388 POINT(480.108978 156.384903) 32389 POINT(726.920654 119.178429) 32390 POINT(969.895813 727.600464) 32391 POINT(441.947449 278.015594) 32392 POINT(125.353073 76.1584167) 32393 POINT(593.291382 278.415466) 32394 POINT(528.669556 140.340332) 32395 POINT(525.65802 947.855347) 32396 POINT(997.949829 869.371277) 32397 POINT(804.213684 609.692993) 32398 POINT(66.1568527 970.555359) 32399 POINT(454.036133 658.691467) 32400 POINT(147.551117 876.407349) 32401 POINT(596.16626 268.655334) 32402 POINT(612.099365 382.217102) 32403 POINT(542.210632 148.873077) 32404 POINT(369.60202 445.901703) 32405 POINT(507.795776 640.148865) 32406 POINT(659.271057 587.28479) 32407 POINT(569.056641 627.85614) 32408 POINT(997.373962 744.386902) 32409 POINT(86.2799149 234.007584) 32410 POINT(58.6711731 801.829163) 32411 POINT(403.433014 33.7867432) 32412 POINT(263.148071 903.579712) 32413 POINT(378.363251 390.928772) 32414 POINT(67.5612869 92.179657) 32415 POINT(960.823914 202.996536) 32416 POINT(184.267456 413.052612) 32417 POINT(197.18512 939.82666) 32418 POINT(883.507324 909.953186) 32419 POINT(362.849792 909.692566) 32420 POINT(98.7228088 581.07489) 32421 POINT(395.277069 527.153564) 32422 POINT(619.657288 420.487854) 32423 POINT(989.499573 328.850433) 32424 POINT(300.130829 832.697144) 32425 POINT(19.6143932 199.029724) 32426 POINT(954.805115 566.117676) 32427 POINT(837.564758 851.296814) 32428 POINT(703.4104 591.691162) 32429 POINT(276.364868 958.624207) 32430 POINT(626.363098 173.889923) 32431 POINT(228.642776 337.192902) 32432 POINT(110.157127 501.746887) 32433 POINT(690.985352 444.081238) 32434 POINT(525.183105 316.738861) 32435 POINT(446.206421 832.60791) 32436 POINT(436.661041 782.367676) 32437 POINT(713.574646 576.387634) 32438 POINT(398.23996 567.796326) 32439 POINT(323.621155 493.597809) 32440 POINT(217.709183 586.192993) 32441 POINT(289.89859 11.9286985) 32442 POINT(68.5083694 749.430542) 32443 POINT(153.62439 963.181213) 32444 POINT(805.758789 327.017578) 32445 POINT(595.262085 501.081665) 32446 POINT(640.935974 271.77182) 32447 POINT(544.662659 728.830688) 32448 POINT(947.762451 81.5648422) 32449 POINT(211.409332 802.046509) 32450 POINT(379.236206 179.894852) 32451 POINT(10.617301 51.5741844) 32452 POINT(840.872437 333.111664) 32453 POINT(515.892212 628.216858) 32454 POINT(810.293152 584.493896) 32455 POINT(147.829926 902.529175) 32456 POINT(343.446075 521.350403) 32457 POINT(948.854553 217.744125) 32458 POINT(141.292816 237.799606) 32459 POINT(226.97374 968.666199) 32460 POINT(749.219543 90.4128571) 32461 POINT(123.936958 505.550018) 32462 POINT(259.263947 634.650757) 32463 POINT(907.19812 196.827423) 32464 POINT(420.213257 985.771179) 32465 POINT(458.016266 550.894348) 32466 POINT(423.533081 168.048813) 32467 POINT(566.107483 533.501221) 32468 POINT(617.875977 840.767761) 32469 POINT(108.74968 827.706299) 32470 POINT(258.667969 549.185791) 32471 POINT(431.517914 487.580292) 32472 POINT(72.1723709 414.817322) 32473 POINT(529.402771 220.238556) 32474 POINT(808.804199 913.852417) 32475 POINT(299.568207 894.308167) 32476 POINT(184.761307 197.861755) 32477 POINT(877.19812 83.2064743) 32478 POINT(223.820267 780.294312) 32479 POINT(128.644196 790.84436) 32480 POINT(275.109894 479.448853) 32481 POINT(844.428467 523.4245) 32482 POINT(113.646339 298.00174) 32483 POINT(209.708817 627.35614) 32484 POINT(947.332092 595.843445) 32485 POINT(220.836838 139.054825) 32486 POINT(729.062439 32.5790596) 32487 POINT(931.01239 132.270966) 32488 POINT(480.736542 514.870239) 32489 POINT(641.274048 812.933777) 32490 POINT(905.662109 868.756653) 32491 POINT(378.790985 26.2998257) 32492 POINT(128.513748 395.725372) 32493 POINT(524.40033 798.044556) 32494 POINT(142.227936 481.770691) 32495 POINT(145.44339 437.068756) 32496 POINT(346.687683 269.783508) 32497 POINT(166.208191 256.054108) 32498 POINT(275.585449 226.750778) 32499 POINT(752.809753 304.672577) 32500 POINT(269.402374 528.466309) 32501 POINT(316.398438 613.936523) 32502 POINT(961.07251 226.419388) 32503 POINT(40.5582619 288.190704) 32504 POINT(196.80954 475.526703) 32505 POINT(336.151855 589.05365) 32506 POINT(571.081482 899.321106) 32507 POINT(718.318604 684.182129) 32508 POINT(468.268066 803.6427) 32509 POINT(212.594894 499.668091) 32510 POINT(183.701385 163.963867) 32511 POINT(35.0840874 650.402832) 32512 POINT(856.262268 489.004089) 32513 POINT(288.266418 525.713257) 32514 POINT(49.3087463 78.6680908) 32515 POINT(180.536545 591.466003) 32516 POINT(535.390442 262.613739) 32517 POINT(553.150452 913.747742) 32518 POINT(295.024261 732.584229) 32519 POINT(600.332214 907.890564) 32520 POINT(755.971008 513.313843) 32521 POINT(742.346985 730.372681) 32522 POINT(655.274902 790.252625) 32523 POINT(881.0177 435.962708) 32524 POINT(583.258301 205.088409) 32525 POINT(284.211731 659.991943) 32526 POINT(701.269287 210.244537) 32527 POINT(240.12999 813.058594) 32528 POINT(450.956573 149.979858) 32529 POINT(351.802338 515.647217) 32530 POINT(383.016724 307.83606) 32531 POINT(943.165588 691.554993) 32532 POINT(821.664001 767.99884) 32533 POINT(884.727478 585.760803) 32534 POINT(694.587524 512.331909) 32535 POINT(161.487656 194.181213) 32536 POINT(947.07666 286.693756) 32537 POINT(469.00235 674.971313) 32538 POINT(926.636719 881.569519) 32539 POINT(883.872742 254.640747) 32540 POINT(577.224304 185.587219) 32541 POINT(389.27243 713.848389) 32542 POINT(279.778839 679.297668) 32543 POINT(499.280945 519.558899) 32544 POINT(480.708832 574.473511) 32545 POINT(0.774360418 110.124641) 32546 POINT(578.226318 95.5387878) 32547 POINT(579.566956 301.289276) 32548 POINT(806.858398 109.612755) 32549 POINT(807.661621 593.183899) 32550 POINT(445.170624 495.707367) 32551 POINT(208.231384 665.837341) 32552 POINT(645.907043 998.144592) 32553 POINT(279.829834 163.897522) 32554 POINT(579.708008 421.171082) 32555 POINT(924.945618 116.13755) 32556 POINT(624.755371 618.583923) 32557 POINT(492.134613 903.500366) 32558 POINT(709.680908 932.105957) 32559 POINT(985.465027 488.145386) 32560 POINT(13.5618935 294.050537) 32561 POINT(127.902313 818.051941) 32562 POINT(385.626801 782.90979) 32563 POINT(172.679306 615.683716) 32564 POINT(612.360901 794.923218) 32565 POINT(252.892487 599.126892) 32566 POINT(28.0963249 351.103668) 32567 POINT(836.93103 39.7082329) 32568 POINT(637.097351 218.898209) 32569 POINT(536.378113 166.733932) 32570 POINT(543.922974 202.563553) 32571 POINT(192.365829 538.633972) 32572 POINT(930.915833 998.970276) 32573 POINT(272.767639 127.06041) 32574 POINT(386.597015 669.089905) 32575 POINT(150.961639 538.591736) 32576 POINT(89.2337112 923.645081) 32577 POINT(640.200928 825.494141) 32578 POINT(151.71666 838.735962) 32579 POINT(137.015991 525.958557) 32580 POINT(506.076904 218.729233) 32581 POINT(121.808395 504.473816) 32582 POINT(670.559204 914.980225) 32583 POINT(392.254059 429.234528) 32584 POINT(924.348877 936.333923) 32585 POINT(910.831543 186.072174) 32586 POINT(93.1363831 987.742004) 32587 POINT(255.352386 563.313721) 32588 POINT(804.151428 124.267632) 32589 POINT(422.559387 290.816162) 32590 POINT(636.666992 877.403809) 32591 POINT(779.556396 136.423843) 32592 POINT(710.969238 507.781677) 32593 POINT(744.044373 677.101868) 32594 POINT(516.221802 862.417664) 32595 POINT(838.202393 508.485809) 32596 POINT(969.476868 705.671875) 32597 POINT(966.818909 739.661438) 32598 POINT(71.3642273 781.736816) 32599 POINT(560.338013 359.37146) 32600 POINT(28.9210129 324.028534) 32601 POINT(868.340759 440.892731) 32602 POINT(255.932632 215.228775) 32603 POINT(537.266724 676.513062) 32604 POINT(342.476959 623.466248) 32605 POINT(334.65451 665.462158) 32606 POINT(467.678253 188.388306) 32607 POINT(745.726501 3.5460279) 32608 POINT(75.6734467 839.453491) 32609 POINT(249.762451 86.4446106) 32610 POINT(160.294968 122.085396) 32611 POINT(544.544495 705.142334) 32612 POINT(627.924805 650.401794) 32613 POINT(316.458527 810.364014) 32614 POINT(802.446289 553.744568) 32615 POINT(418.99173 97.918045) 32616 POINT(776.405273 734.462769) 32617 POINT(418.884033 428.85141) 32618 POINT(526.715637 493.268127) 32619 POINT(370.696838 173.27652) 32620 POINT(232.945435 833.520569) 32621 POINT(688.82373 746.237671) 32622 POINT(245.976074 145.178894) 32623 POINT(980.858276 295.273529) 32624 POINT(542.325623 251.65686) 32625 POINT(395.767639 375.250214) 32626 POINT(105.496613 127.872345) 32627 POINT(210.62886 695.068604) 32628 POINT(544.28772 255.402634) 32629 POINT(145.021851 597.084351) 32630 POINT(886.171509 251.53212) 32631 POINT(944.928284 803.252869) 32632 POINT(71.7802124 414.383545) 32633 POINT(638.660034 367.472015) 32634 POINT(377.580261 378.17691) 32635 POINT(134.572998 462.319427) 32636 POINT(164.398178 523.500793) 32637 POINT(430.864563 116.970947) 32638 POINT(799.155396 880.470825) 32639 POINT(146.494934 843.771118) 32640 POINT(838.674927 381.581665) 32641 POINT(692.213562 41.5505867) 32642 POINT(63.5567245 740.343384) 32643 POINT(592.953491 457.834259) 32644 POINT(375.826691 366.470642) 32645 POINT(986.729736 908.651245) 32646 POINT(48.4193954 384.12912) 32647 POINT(478.028595 988.475708) 32648 POINT(162.74733 442.82312) 32649 POINT(461.012268 14.2451468) 32650 POINT(70.9649124 937.851807) 32651 POINT(973.31427 812.395996) 32652 POINT(353.496429 966.400818) 32653 POINT(646.53302 818.029602) 32654 POINT(444.53363 704.440369) 32655 POINT(514.616455 967.898193) 32656 POINT(6.21729803 407.458618) 32657 POINT(284.184662 956.733765) 32658 POINT(336.91806 314.08017) 32659 POINT(197.59053 28.0093212) 32660 POINT(894.368774 905.85083) 32661 POINT(194.426773 789.622803) 32662 POINT(147.446274 179.565262) 32663 POINT(642.636902 801.955872) 32664 POINT(891.348816 391.773865) 32665 POINT(236.883942 365.633301) 32666 POINT(273.085327 600.432495) 32667 POINT(598.006531 40.0740585) 32668 POINT(684.034058 858.602173) 32669 POINT(830.007019 718.177307) 32670 POINT(443.404816 102.822067) 32671 POINT(554.950317 349.459961) 32672 POINT(583.453308 258.062164) 32673 POINT(334.417206 691.502197) 32674 POINT(770.060608 376.422882) 32675 POINT(559.879517 341.142212) 32676 POINT(369.760498 403.029022) 32677 POINT(842.81012 81.5965576) 32678 POINT(278.530212 475.525848) 32679 POINT(225.886917 624.286316) 32680 POINT(433.866089 209.519699) 32681 POINT(564.804871 734.982422) 32682 POINT(968.14978 788.121399) 32683 POINT(669.611816 638.916138) 32684 POINT(959.531433 586.99469) 32685 POINT(46.8804626 390.336761) 32686 POINT(381.075043 645.142395) 32687 POINT(729.313477 475.864838) 32688 POINT(527.427551 294.870026) 32689 POINT(925.551453 470.73703) 32690 POINT(251.607422 341.367645) 32691 POINT(356.152374 771.143677) 32692 POINT(316.6026 123.180527) 32693 POINT(776.189575 738.425232) 32694 POINT(54.3970108 770.163574) 32695 POINT(513.059631 481.644348) 32696 POINT(28.9996777 826.623596) 32697 POINT(890.409119 709.339233) 32698 POINT(173.355148 836.159302) 32699 POINT(264.208588 850.066345) 32700 POINT(769.110962 343.752869) 32701 POINT(491.689178 991.258972) 32702 POINT(972.679077 303.109833) 32703 POINT(992.985657 149.188278) 32704 POINT(373.549438 966.878906) 32705 POINT(981.915039 257.269196) 32706 POINT(267.211334 758.620544) 32707 POINT(847.489685 859.077148) 32708 POINT(104.265633 293.27478) 32709 POINT(300.778534 395.339294) 32710 POINT(561.427429 933.066589) 32711 POINT(579.972229 775.558533) 32712 POINT(194.330566 984.571411) 32713 POINT(375.484161 485.175415) 32714 POINT(954.664917 696.957703) 32715 POINT(920.263672 174.244034) 32716 POINT(466.653168 588.768738) 32717 POINT(939.967529 645.098511) 32718 POINT(794.77832 679.160706) 32719 POINT(503.114014 561.642639) 32720 POINT(133.694595 938.076355) 32721 POINT(710.837891 464.556122) 32722 POINT(3.22342968 597.807922) 32723 POINT(155.507812 733.355286) 32724 POINT(930.187256 925.836304) 32725 POINT(21.516901 691.975403) 32726 POINT(491.645691 76.3826904) 32727 POINT(42.3981628 829.081604) 32728 POINT(931.062439 787.071838) 32729 POINT(536.551208 83.0175934) 32730 POINT(243.367554 929.387024) 32731 POINT(767.935181 825.14325) 32732 POINT(763.234924 359.741211) 32733 POINT(594.836731 830.895264) 32734 POINT(442.739838 645.161865) 32735 POINT(34.1487541 437.453522) 32736 POINT(432.588196 187.568802) 32737 POINT(63.497921 798.265198) 32738 POINT(501.142303 67.8428574) 32739 POINT(870.177551 721.342529) 32740 POINT(656.4505 740.362061) 32741 POINT(323.424591 849.311218) 32742 POINT(950.48938 86.0997772) 32743 POINT(762.518738 749.370117) 32744 POINT(417.045563 474.012909) 32745 POINT(152.976715 940.983704) 32746 POINT(953.417053 473.220947) 32747 POINT(240.406586 624.23877) 32748 POINT(432.848022 929.921082) 32749 POINT(828.124268 273.962463) 32750 POINT(613.896973 891.269043) 32751 POINT(600.310303 741.142151) 32752 POINT(382.469208 582.366333) 32753 POINT(715.298279 726.763062) 32754 POINT(362.844971 471.447632) 32755 POINT(489.674011 652.364502) 32756 POINT(9.64360809 682.394775) 32757 POINT(997.486633 0.506521702) 32758 POINT(440.360413 313.482819) 32759 POINT(12.4055185 106.669693) 32760 POINT(688.081482 918.07428) 32761 POINT(944.615234 387.225616) 32762 POINT(899.553833 708.737732) 32763 POINT(867.252441 836.99823) 32764 POINT(631.399597 313.51297) 32765 POINT(316.014191 841.180786) 32766 POINT(616.490662 884.942078) 32767 POINT(785.087524 452.214081) 32768 POINT(696.03595 422.82309) 32769 POINT(65.7759094 80.5115509) 32770 POINT(506.598602 594.832947) 32771 POINT(192.257797 352.122955) 32772 POINT(644.000549 540.252747) 32773 POINT(511.069366 775.650513) 32774 POINT(519.957153 926.666687) 32775 POINT(594.534546 929.707092) 32776 POINT(807.509338 343.996216) 32777 POINT(518.983459 491.278107) 32778 POINT(16.2076874 301.476868) 32779 POINT(649.8349 450.500488) 32780 POINT(328.993652 118.732941) 32781 POINT(69.2294769 940.198792) 32782 POINT(804.3927 740.115845) 32783 POINT(277.767334 906.254211) 32784 POINT(537.672791 460.734192) 32785 POINT(758.041199 280.369629) 32786 POINT(473.853943 132.533051) 32787 POINT(440.187225 828.517578) 32788 POINT(567.823486 159.415924) 32789 POINT(422.868042 640.415283) 32790 POINT(639.388245 422.405548) 32791 POINT(419.331329 517.488159) 32792 POINT(24.0734444 770.504639) 32793 POINT(87.9656601 794.313843) 32794 POINT(377.181427 332.152588) 32795 POINT(518.731934 392.460388) 32796 POINT(355.493744 248.522781) 32797 POINT(857.744873 922.539673) 32798 POINT(437.60968 496.527649) 32799 POINT(116.995361 202.428101) 32800 POINT(612.958435 890.08905) 32801 POINT(217.748825 694.801575) 32802 POINT(786.819641 647.397095) 32803 POINT(915.661987 648.873535) 32804 POINT(433.185883 754.567993) 32805 POINT(442.385468 488.615875) 32806 POINT(651.067139 797.978271) 32807 POINT(39.7472076 567.50238) 32808 POINT(418.071594 674.892273) 32809 POINT(454.05011 418.304901) 32810 POINT(516.115967 211.723511) 32811 POINT(373.196198 191.659607) 32812 POINT(559.367004 948.920288) 32813 POINT(530.031311 990.614136) 32814 POINT(468.568451 309.200897) 32815 POINT(141.368149 177.389236) 32816 POINT(996.454956 810.480774) 32817 POINT(711.600159 625.991577) 32818 POINT(856.818054 565.737) 32819 POINT(288.798065 8.57575798) 32820 POINT(188.917328 819.295044) 32821 POINT(633.942139 988.675964) 32822 POINT(496.388123 883.250366) 32823 POINT(642.867188 120.333267) 32824 POINT(535.7854 380.256378) 32825 POINT(766.096985 54.0902672) 32826 POINT(547.736877 881.618286) 32827 POINT(202.645859 579.783691) 32828 POINT(579.809326 705.085815) 32829 POINT(726.831543 108.639587) 32830 POINT(754.182678 48.0849915) 32831 POINT(147.056351 445.592865) 32832 POINT(197.778595 663.171631) 32833 POINT(425.376465 424.86441) 32834 POINT(943.42218 707.631287) 32835 POINT(317.633728 991.108948) 32836 POINT(596.869202 133.439972) 32837 POINT(265.217346 184.000595) 32838 POINT(568.183838 332.891724) 32839 POINT(998.548645 820.675354) 32840 POINT(512.191101 665.392395) 32841 POINT(544.637451 328.349792) 32842 POINT(589.881531 799.117859) 32843 POINT(790.186218 534.665771) 32844 POINT(732.152039 484.985321) 32845 POINT(489.467224 417.465698) 32846 POINT(193.700928 807.851562) 32847 POINT(252.459259 6.01599741) 32848 POINT(965.951416 139.815262) 32849 POINT(61.5038452 235.012589) 32850 POINT(664.373718 852.385315) 32851 POINT(780.166931 519.504272) 32852 POINT(111.462021 368.113922) 32853 POINT(800.32196 847.254395) 32854 POINT(248.963531 778.75116) 32855 POINT(865.091797 994.757141) 32856 POINT(181.952332 97.3442001) 32857 POINT(476.703918 49.4842949) 32858 POINT(986.308472 207.893616) 32859 POINT(498.162537 264.935791) 32860 POINT(506.549286 830.729309) 32861 POINT(262.676666 653.305908) 32862 POINT(292.335663 827.84668) 32863 POINT(969.890686 915.283569) 32864 POINT(332.034454 63.8347244) 32865 POINT(456.148956 865.529358) 32866 POINT(556.282898 839.147766) 32867 POINT(738.423889 499.19223) 32868 POINT(622.513611 788.363159) 32869 POINT(537.401794 88.5466232) 32870 POINT(124.932945 642.386719) 32871 POINT(351.940796 44.1706009) 32872 POINT(678.693604 586.610107) 32873 POINT(480.191681 832.401978) 32874 POINT(830.287109 193.702179) 32875 POINT(635.744507 636.076843) 32876 POINT(179.947449 297.568207) 32877 POINT(791.984619 70.3754425) 32878 POINT(650.673706 322.199707) 32879 POINT(484.295868 527.200928) 32880 POINT(390.041931 744.456909) 32881 POINT(715.846375 292.748413) 32882 POINT(186.108749 702.683289) 32883 POINT(634.559082 652.261414) 32884 POINT(561.348755 553.492737) 32885 POINT(390.77298 717.522095) 32886 POINT(375.79538 107.752739) 32887 POINT(739.416565 656.106628) 32888 POINT(22.5552502 665.005615) 32889 POINT(537.751648 602.210938) 32890 POINT(288.969208 25.2360573) 32891 POINT(908.541565 537.887085) 32892 POINT(41.3351364 740.544067) 32893 POINT(415.602539 367.435577) 32894 POINT(879.867798 720.087952) 32895 POINT(638.999939 798.692566) 32896 POINT(316.136841 303.403137) 32897 POINT(373.657013 290.889648) 32898 POINT(313.421417 344.301544) 32899 POINT(718.986084 543.124146) 32900 POINT(870.190308 115.046188) 32901 POINT(317.588043 859.358582) 32902 POINT(840.333862 754.04248) 32903 POINT(255.480759 329.997101) 32904 POINT(196.029694 986.182312) 32905 POINT(800.2146 476.818268) 32906 POINT(228.541534 280.130798) 32907 POINT(450.249664 693.348206) 32908 POINT(730.274719 948.798462) 32909 POINT(250.86084 118.243988) 32910 POINT(442.609711 816.158081) 32911 POINT(128.487213 162.147064) 32912 POINT(126.107857 474.236267) 32913 POINT(64.8576813 691.610962) 32914 POINT(603.44519 237.942337) 32915 POINT(310.540192 295.587677) 32916 POINT(334.830872 212.441437) 32917 POINT(889.033386 324.670288) 32918 POINT(257.774811 348.687622) 32919 POINT(309.530731 720.562622) 32920 POINT(208.078781 548.802551) 32921 POINT(459.546295 528.434875) 32922 POINT(640.159546 256.128357) 32923 POINT(936.329224 408.900024) 32924 POINT(188.715073 127.536255) 32925 POINT(775.171753 205.911423) 32926 POINT(919.884155 331.103241) 32927 POINT(398.212311 464.168365) 32928 POINT(671.127197 374.36377) 32929 POINT(222.162262 772.466675) 32930 POINT(390.882996 671.417114) 32931 POINT(388.671875 501.332123) 32932 POINT(780.586609 966.263184) 32933 POINT(506.058167 233.31781) 32934 POINT(184.932709 300.513794) 32935 POINT(683.226135 297.267212) 32936 POINT(646.532532 142.37117) 32937 POINT(891.334167 923.987183) 32938 POINT(366.662628 167.396576) 32939 POINT(279.714478 766.121521) 32940 POINT(726.085632 727.646484) 32941 POINT(301.523834 761.164734) 32942 POINT(203.504364 382.396912) 32943 POINT(751.441895 470.733124) 32944 POINT(371.790192 749.697083) 32945 POINT(290.473694 274.272125) 32946 POINT(994.522156 22.8066044) 32947 POINT(17.6716347 819.794617) 32948 POINT(631.531494 569.211243) 32949 POINT(759.634277 392.124054) 32950 POINT(89.1360931 273.052307) 32951 POINT(178.346603 820.178772) 32952 POINT(218.769043 515.722778) 32953 POINT(566.805054 944.434387) 32954 POINT(630.070251 626.005066) 32955 POINT(408.553741 754.817932) 32956 POINT(697.67157 122.978607) 32957 POINT(848.507507 104.515968) 32958 POINT(114.428612 365.182678) 32959 POINT(163.128113 438.754639) 32960 POINT(190.435501 191.967453) 32961 POINT(961.167603 547.374084) 32962 POINT(82.6213455 572.014893) 32963 POINT(102.926147 769.45929) 32964 POINT(333.013489 74.7054672) 32965 POINT(435.547455 926.496582) 32966 POINT(116.934975 458.008087) 32967 POINT(221.680466 132.23584) 32968 POINT(780.675659 768.165588) 32969 POINT(234.374435 382.992798) 32970 POINT(859.859741 908.557373) 32971 POINT(625.981384 847.514099) 32972 POINT(296.270355 635.275391) 32973 POINT(904.872131 192.337906) 32974 POINT(946.858215 743.320435) 32975 POINT(300.813141 254.052582) 32976 POINT(341.747223 828.697693) 32977 POINT(925.906799 326.828186) 32978 POINT(589.078735 347.479431) 32979 POINT(979.205627 210.554108) 32980 POINT(137.451508 783.146423) 32981 POINT(663.720032 665.956299) 32982 POINT(38.589241 8.88403034) 32983 POINT(926.945068 767.920837) 32984 POINT(353.89151 463.281586) 32985 POINT(870.726624 822.265503) 32986 POINT(322.025085 507.979187) 32987 POINT(51.9206009 515.354187) 32988 POINT(957.129333 406.762268) 32989 POINT(588.613953 66.845665) 32990 POINT(438.116577 250.58873) 32991 POINT(252.564911 635.729431) 32992 POINT(241.637878 985.830383) 32993 POINT(649.987488 636.481812) 32994 POINT(680.38147 508.037781) 32995 POINT(330.982361 19.1535072) 32996 POINT(753.413757 725.833069) 32997 POINT(712.064636 783.57196) 32998 POINT(868.338501 134.761566) 32999 POINT(113.738281 878.339355) 33000 POINT(631.330994 965.38269) 33001 POINT(901.426331 290.279114) 33002 POINT(48.9168587 470.46286) 33003 POINT(646.917786 185.407639) 33004 POINT(876.165039 620.392334) 33005 POINT(700.595459 809.98468) 33006 POINT(664.309692 2.0434885) 33007 POINT(461.944183 906.952698) 33008 POINT(194.412537 323.012421) 33009 POINT(665.216125 321.963684) 33010 POINT(273.336578 759.950012) 33011 POINT(944.78064 452.687439) 33012 POINT(357.977356 746.535706) 33013 POINT(924.868896 189.301773) 33014 POINT(660.453003 354.237274) 33015 POINT(783.520874 972.70575) 33016 POINT(470.9888 498.623383) 33017 POINT(191.061554 795.426147) 33018 POINT(569.86377 17.5684795) 33019 POINT(318.007904 139.381241) 33020 POINT(141.463028 567.74823) 33021 POINT(172.696243 501.224884) 33022 POINT(361.767792 15.5328035) 33023 POINT(370.002869 832.144043) 33024 POINT(318.21463 941.535645) 33025 POINT(882.318237 712.579895) 33026 POINT(603.582581 309.077789) 33027 POINT(793.557861 706.856628) 33028 POINT(472.369415 680.726196) 33029 POINT(305.712158 177.240082) 33030 POINT(981.066101 409.516052) 33031 POINT(552.630676 976.234863) 33032 POINT(878.026184 428.76947) 33033 POINT(302.917603 240.313919) 33034 POINT(942.575134 953.480774) 33035 POINT(606.611328 853.73761) 33036 POINT(978.059753 64.5999451) 33037 POINT(410.49472 679.261169) 33038 POINT(174.268143 643.368164) 33039 POINT(264.313538 20.5737171) 33040 POINT(208.752594 964.933594) 33041 POINT(422.877777 912.115479) 33042 POINT(344.882965 848.219727) 33043 POINT(953.116821 163.954163) 33044 POINT(200.88884 132.463715) 33045 POINT(244.91272 826.771362) 33046 POINT(555.787659 340.660309) 33047 POINT(542.327698 104.44043) 33048 POINT(975.138367 267.623169) 33049 POINT(528.182434 214.519897) 33050 POINT(585.324707 357.422363) 33051 POINT(458.46167 281.219727) 33052 POINT(606.005066 714.118896) 33053 POINT(30.4812431 807.619995) 33054 POINT(326.039276 414.151703) 33055 POINT(835.030151 396.362244) 33056 POINT(841.307983 92.2348862) 33057 POINT(470.808319 218.542984) 33058 POINT(779.200623 79.6026001) 33059 POINT(850.549316 832.593262) 33060 POINT(333.109924 348.937012) 33061 POINT(891.506653 657.629944) 33062 POINT(593.098633 219.995483) 33063 POINT(225.870453 53.8390617) 33064 POINT(461.203064 900.104309) 33065 POINT(184.683228 166.252838) 33066 POINT(409.915894 61.2236595) 33067 POINT(575.565186 573.782043) 33068 POINT(211.706299 517.748352) 33069 POINT(491.802612 244.172485) 33070 POINT(220.546402 784.760132) 33071 POINT(937.980286 234.887665) 33072 POINT(211.024689 623.87262) 33073 POINT(643.355164 172.636841) 33074 POINT(517.553467 272.529144) 33075 POINT(344.711121 478.841339) 33076 POINT(809.366821 692.662903) 33077 POINT(669.757874 38.8659096) 33078 POINT(283.527618 46.6717949) 33079 POINT(732.623779 9.06109619) 33080 POINT(58.2105827 533.988098) 33081 POINT(685.154236 452.920502) 33082 POINT(755.427917 412.048309) 33083 POINT(850.19104 746.92749) 33084 POINT(532.553528 333.729828) 33085 POINT(122.537567 214.553452) 33086 POINT(465.058014 302.484253) 33087 POINT(64.7881927 265.599274) 33088 POINT(211.479721 460.249847) 33089 POINT(381.628723 735.49408) 33090 POINT(271.651428 356.182037) 33091 POINT(138.727875 948.760193) 33092 POINT(49.5196495 211.341034) 33093 POINT(440.199158 851.717651) 33094 POINT(974.607605 301.382355) 33095 POINT(109.197556 966.367371) 33096 POINT(446.474915 872.298584) 33097 POINT(875.035828 770.603516) 33098 POINT(622.743408 820.275513) 33099 POINT(380.893402 785.450806) 33100 POINT(554.825928 683.286255) 33101 POINT(40.5037956 289.486908) 33102 POINT(820.993774 677.325439) 33103 POINT(20.0294724 341.237671) 33104 POINT(251.53476 572.961792) 33105 POINT(860.669373 94.9615097) 33106 POINT(176.314713 47.5840797) 33107 POINT(24.53269 182.352539) 33108 POINT(645.001282 805.364807) 33109 POINT(805.205078 906.39032) 33110 POINT(521.614624 661.237305) 33111 POINT(37.6170616 873.572205) 33112 POINT(188.126251 8.35908222) 33113 POINT(139.804779 462.435547) 33114 POINT(709.857544 592.53833) 33115 POINT(570.563904 690.588562) 33116 POINT(824.879822 404.460938) 33117 POINT(468.595978 866.017822) 33118 POINT(580.053772 264.447845) 33119 POINT(305.41687 173.460892) 33120 POINT(110.469345 448.673859) 33121 POINT(919.043274 600.968689) 33122 POINT(162.673248 514.714661) 33123 POINT(459.43454 418.915009) 33124 POINT(914.145935 492.988708) 33125 POINT(59.095356 612.740601) 33126 POINT(314.08786 374.794403) 33127 POINT(510.524261 86.3729858) 33128 POINT(138.884567 543.498169) 33129 POINT(781.835876 205.889618) 33130 POINT(747.967773 549.918152) 33131 POINT(806.516235 968.574585) 33132 POINT(873.61731 653.612854) 33133 POINT(944.655212 152.649826) 33134 POINT(866.128723 456.787048) 33135 POINT(711.017273 634.876953) 33136 POINT(531.395142 5.65600634) 33137 POINT(507.969513 329.767792) 33138 POINT(882.147339 74.7825317) 33139 POINT(974.718262 93.7968903) 33140 POINT(820.798767 273.151703) 33141 POINT(282.770111 404.867828) 33142 POINT(478.130219 797.24585) 33143 POINT(963.410583 641.085571) 33144 POINT(848.114624 427.412384) 33145 POINT(166.7948 578.970764) 33146 POINT(638.345154 931.295654) 33147 POINT(222.601654 60.6024246) 33148 POINT(254.236755 754.56842) 33149 POINT(925.86969 158.389786) 33150 POINT(362.991943 487.815033) 33151 POINT(613.500061 127.482437) 33152 POINT(52.9515457 482.973511) 33153 POINT(159.978775 777.078918) 33154 POINT(681.209778 427.654541) 33155 POINT(916.275452 926.565613) 33156 POINT(756.206726 85.9570389) 33157 POINT(82.8759995 419.611237) 33158 POINT(754.490845 585.761169) 33159 POINT(363.880615 843.786072) 33160 POINT(447.162109 21.1850014) 33161 POINT(139.562057 5.31486797) 33162 POINT(889.987427 81.8578262) 33163 POINT(43.3554535 214.193771) 33164 POINT(693.26416 395.429199) 33165 POINT(287.706451 185.697845) 33166 POINT(967.771851 144.461227) 33167 POINT(481.416534 517.50769) 33168 POINT(579.28241 802.333923) 33169 POINT(977.102844 180.142578) 33170 POINT(126.92881 924.44104) 33171 POINT(17.2672482 700.578125) 33172 POINT(684.190613 370.808167) 33173 POINT(475.503815 928.953674) 33174 POINT(552.42865 54.9866104) 33175 POINT(757.947632 675.859314) 33176 POINT(525.97113 882.96106) 33177 POINT(209.688446 578.193909) 33178 POINT(858.052124 426.761292) 33179 POINT(10.1751347 295.972931) 33180 POINT(854.866028 673.036133) 33181 POINT(217.374664 327.344391) 33182 POINT(870.206421 890.190002) 33183 POINT(87.5108109 136.667923) 33184 POINT(188.29422 902.590088) 33185 POINT(638.595642 968.67749) 33186 POINT(583.292847 371.237396) 33187 POINT(302.817352 233.958923) 33188 POINT(149.598557 722.20105) 33189 POINT(414.417206 26.3312912) 33190 POINT(679.356995 192.700531) 33191 POINT(773.359619 515.952698) 33192 POINT(497.982788 776.278748) 33193 POINT(6.38151455 263.427155) 33194 POINT(283.072327 229.951935) 33195 POINT(389.529572 45.8478737) 33196 POINT(218.443207 485.089752) 33197 POINT(1.81994915 467.172852) 33198 POINT(557.678467 898.234253) 33199 POINT(928.061829 349.820526) 33200 POINT(678.195251 546.89978) 33201 POINT(928.185364 844.745422) 33202 POINT(338.31601 868.021423) 33203 POINT(826.737366 41.9837646) 33204 POINT(650.040466 143.172638) 33205 POINT(463.812592 66.8495941) 33206 POINT(246.269791 835.625305) 33207 POINT(579.957275 678.337097) 33208 POINT(953.315186 401.056732) 33209 POINT(503.023499 981.198975) 33210 POINT(630.952576 638.140625) 33211 POINT(63.1995087 272.597351) 33212 POINT(569.506226 769.927063) 33213 POINT(210.249985 284.768921) 33214 POINT(246.032288 494.985229) 33215 POINT(349.256622 189.029083) 33216 POINT(352.316193 102.541214) 33217 POINT(280.857941 991.52179) 33218 POINT(781.925232 182.70755) 33219 POINT(740.282654 190.870193) 33220 POINT(870.904175 396.405487) 33221 POINT(115.610672 361.405853) 33222 POINT(248.94873 505.395233) 33223 POINT(807.062622 267.673798) 33224 POINT(500.22467 347.23819) 33225 POINT(511.220245 66.7825623) 33226 POINT(733.746643 509.935364) 33227 POINT(200.549271 490.864319) 33228 POINT(603.831909 93.9541245) 33229 POINT(771.191467 764.036072) 33230 POINT(236.171616 513.538879) 33231 POINT(880.59491 554.033142) 33232 POINT(542.212097 793.38501) 33233 POINT(849.171814 910.972595) 33234 POINT(134.628326 160.35704) 33235 POINT(192.939713 842.973999) 33236 POINT(283.652222 952.988953) 33237 POINT(251.278656 624.71759) 33238 POINT(324.951843 404.680878) 33239 POINT(917.899536 850.187195) 33240 POINT(594.848083 771.09082) 33241 POINT(944.381714 610.170166) 33242 POINT(231.216278 530.1297) 33243 POINT(12.8297472 499.555542) 33244 POINT(144.900711 86.7352448) 33245 POINT(444.078064 705.677063) 33246 POINT(696.438721 57.3980522) 33247 POINT(275.324829 479.12442) 33248 POINT(369.045135 925.022461) 33249 POINT(589.10376 390.437927) 33250 POINT(226.963562 667.544312) 33251 POINT(565.244873 993.391907) 33252 POINT(607.400513 38.836277) 33253 POINT(248.184174 677.257385) 33254 POINT(186.383224 73.4694901) 33255 POINT(541.044678 441.244476) 33256 POINT(859.226624 294.163025) 33257 POINT(350.833405 174.609451) 33258 POINT(313.171417 109.147209) 33259 POINT(89.5126419 401.647614) 33260 POINT(474.616241 223.738419) 33261 POINT(185.370178 743.582153) 33262 POINT(370.774841 174.331146) 33263 POINT(757.910034 966.429504) 33264 POINT(243.249146 582.549683) 33265 POINT(865.426208 98.1211929) 33266 POINT(829.730286 571.879761) 33267 POINT(533.634094 897.970825) 33268 POINT(633.777771 278.758057) 33269 POINT(230.48027 901.094055) 33270 POINT(228.444168 205.501938) 33271 POINT(258.910706 309.341156) 33272 POINT(387.610657 624.896484) 33273 POINT(216.459183 394.046051) 33274 POINT(262.591431 567.642273) 33275 POINT(816.655884 565.398926) 33276 POINT(277.305145 456.736908) 33277 POINT(909.205078 365.122955) 33278 POINT(712.661804 940.387146) 33279 POINT(978.527954 885.598328) 33280 POINT(602.475159 301.008728) 33281 POINT(76.6156235 307.484985) 33282 POINT(35.0010071 256.688568) 33283 POINT(467.324036 692.722961) 33284 POINT(915.066406 438.192078) 33285 POINT(964.521667 949.639832) 33286 POINT(813.765259 124.865547) 33287 POINT(353.259705 96.4928894) 33288 POINT(541.045959 402.895142) 33289 POINT(536.875488 949.472534) 33290 POINT(299.527649 106.257263) 33291 POINT(377.300537 26.9683208) 33292 POINT(696.998718 191.866989) 33293 POINT(142.579269 435.35318) 33294 POINT(944.84491 454.066589) 33295 POINT(174.599274 439.89917) 33296 POINT(387.818085 208.484085) 33297 POINT(799.292175 250.553101) 33298 POINT(187.914459 170.846146) 33299 POINT(657.224487 704.647278) 33300 POINT(815.624817 762.589294) 33301 POINT(898.812256 211.30394) 33302 POINT(732.520142 422.7435) 33303 POINT(7.74873781 755.033508) 33304 POINT(730.241211 765.849976) 33305 POINT(159.136566 424.183502) 33306 POINT(225.787338 60.5358734) 33307 POINT(833.898438 834.439575) 33308 POINT(7.99561977 115.342255) 33309 POINT(75.0612106 725.115112) 33310 POINT(544.837219 240.649109) 33311 POINT(39.3488541 698.720032) 33312 POINT(758.32489 141.856094) 33313 POINT(952.190674 600.118774) 33314 POINT(869.250183 913.769348) 33315 POINT(876.881836 953.95752) 33316 POINT(426.590454 414.455933) 33317 POINT(848.483765 527.052551) 33318 POINT(338.320007 254.320236) 33319 POINT(467.505951 800.819397) 33320 POINT(686.716492 139.120438) 33321 POINT(392.970947 537.93689) 33322 POINT(370.398773 940.992615) 33323 POINT(792.771851 833.252258) 33324 POINT(398.705933 366.823822) 33325 POINT(503.036011 943.052795) 33326 POINT(656.204712 566.677002) 33327 POINT(797.397705 696.475952) 33328 POINT(543.783875 235.210266) 33329 POINT(479.662994 580.859131) 33330 POINT(428.78421 355.56427) 33331 POINT(775.454102 347.716156) 33332 POINT(843.864807 508.052155) 33333 POINT(824.30603 661.874695) 33334 POINT(859.889893 795.843384) 33335 POINT(655.738525 382.840271) 33336 POINT(722.233398 747.972107) 33337 POINT(391.549408 260.02179) 33338 POINT(335.857452 758.338745) 33339 POINT(150.603546 393.039185) 33340 POINT(368.776306 560.447083) 33341 POINT(168.480911 771.530823) 33342 POINT(925.633179 164.595108) 33343 POINT(987.38623 597.922852) 33344 POINT(935.795166 480.903046) 33345 POINT(54.7111282 209.356094) 33346 POINT(569.425964 292.330322) 33347 POINT(602.71698 64.8744736) 33348 POINT(309.378845 241.746719) 33349 POINT(506.227997 30.1546516) 33350 POINT(388.525818 361.841522) 33351 POINT(747.371216 669.235657) 33352 POINT(476.506104 352.470215) 33353 POINT(801.784058 301.232117) 33354 POINT(45.1538048 133.864197) 33355 POINT(422.958862 575.869507) 33356 POINT(239.496521 153.504303) 33357 POINT(992.272156 406.460236) 33358 POINT(265.776031 867.546997) 33359 POINT(451.628876 429.877289) 33360 POINT(917.12262 763.283691) 33361 POINT(301.552246 163.023148) 33362 POINT(482.136536 136.620209) 33363 POINT(766.101074 632.71936) 33364 POINT(715.640564 628.027893) 33365 POINT(861.450256 174.950439) 33366 POINT(41.333252 682.49884) 33367 POINT(199.717072 49.7182999) 33368 POINT(653.193848 705.030029) 33369 POINT(184.158539 484.746796) 33370 POINT(589.58197 694.976135) 33371 POINT(154.838409 245.898422) 33372 POINT(277.487244 662.784119) 33373 POINT(702.023315 101.029831) 33374 POINT(43.8833427 654.327332) 33375 POINT(32.7998314 879.342957) 33376 POINT(929.326782 865.072327) 33377 POINT(37.7144012 777.938782) 33378 POINT(31.6281796 143.056549) 33379 POINT(719.76062 194.726013) 33380 POINT(973.56311 321.170868) 33381 POINT(407.028992 501.178711) 33382 POINT(800.24707 841.18512) 33383 POINT(740.178284 654.403442) 33384 POINT(244.174576 230.622849) 33385 POINT(702.089661 495.916229) 33386 POINT(377.329926 255.893341) 33387 POINT(913.262512 620.423279) 33388 POINT(931.669006 228.566544) 33389 POINT(354.454346 213.34436) 33390 POINT(196.212387 604.49054) 33391 POINT(477.650085 658.04303) 33392 POINT(278.67926 946.394653) 33393 POINT(35.6638947 675.585938) 33394 POINT(492.84491 669.104492) 33395 POINT(685.67334 469.816895) 33396 POINT(743.57428 42.5609741) 33397 POINT(617.010803 762.705872) 33398 POINT(526.832336 372.143097) 33399 POINT(810.979126 689.044312) 33400 POINT(742.100037 429.638733) 33401 POINT(580.820251 510.954803) 33402 POINT(82.8507996 283.497101) 33403 POINT(361.886566 762.345642) 33404 POINT(683.512268 26.274826) 33405 POINT(252.292526 257.968597) 33406 POINT(768.219299 263.615692) 33407 POINT(47.7557411 933.358765) 33408 POINT(780.358337 996.472351) 33409 POINT(803.963623 518.497742) 33410 POINT(338.224579 971.000793) 33411 POINT(706.771484 903.027039) 33412 POINT(30.0078793 103.673721) 33413 POINT(974.09906 803.345093) 33414 POINT(652.866943 18.3309879) 33415 POINT(970.929932 86.6740646) 33416 POINT(841.231628 503.405273) 33417 POINT(835.843262 204.539902) 33418 POINT(897.015442 148.338333) 33419 POINT(917.647766 514.039429) 33420 POINT(10.5693893 25.7831516) 33421 POINT(755.704163 461.377808) 33422 POINT(380.53183 918.727539) 33423 POINT(337.297577 325.674774) 33424 POINT(140.925629 757.970093) 33425 POINT(887.962708 394.809479) 33426 POINT(575.742065 34.8388786) 33427 POINT(532.104248 507.575775) 33428 POINT(138.775223 526.710571) 33429 POINT(165.851349 51.7604141) 33430 POINT(46.7046738 649.422058) 33431 POINT(754.222107 975.65387) 33432 POINT(126.558174 702.362549) 33433 POINT(770.856812 636.316833) 33434 POINT(578.046265 660.800842) 33435 POINT(489.443207 372.626099) 33436 POINT(963.286804 598.380859) 33437 POINT(488.257874 321.314392) 33438 POINT(120.703659 283.874115) 33439 POINT(797.871765 972.129883) 33440 POINT(579.084229 623.998718) 33441 POINT(190.017715 331.716949) 33442 POINT(137.733597 942.810303) 33443 POINT(834.031311 898.344177) 33444 POINT(498.318939 262.891266) 33445 POINT(925.408264 270.27597) 33446 POINT(555.420349 839.9599) 33447 POINT(486.254639 464.127167) 33448 POINT(251.194443 896.894531) 33449 POINT(745.251221 516.310486) 33450 POINT(803.232422 392.421021) 33451 POINT(798.838928 806.655029) 33452 POINT(855.099304 471.39267) 33453 POINT(437.418762 670.050903) 33454 POINT(360.749725 95.8602676) 33455 POINT(470.332001 156.774811) 33456 POINT(184.717987 7.774755) 33457 POINT(809.244568 437.840851) 33458 POINT(820.502747 274.602692) 33459 POINT(257.447815 16.7593727) 33460 POINT(843.847473 8.40231419) 33461 POINT(16.7534904 57.5924187) 33462 POINT(722.735657 607.670532) 33463 POINT(556.49176 240.880478) 33464 POINT(102.06105 870.816711) 33465 POINT(711.126526 349.242554) 33466 POINT(321.425995 282.363495) 33467 POINT(782.810486 514.191101) 33468 POINT(565.80542 530.455505) 33469 POINT(449.57428 741.559204) 33470 POINT(0.462823629 120.137482) 33471 POINT(423.66272 7.13593578) 33472 POINT(516.212158 684.935913) 33473 POINT(900.802002 174.497604) 33474 POINT(274.707062 43.9532738) 33475 POINT(801.040222 47.0846748) 33476 POINT(264.8508 118.001656) 33477 POINT(864.504883 605.40918) 33478 POINT(182.726532 811.930054) 33479 POINT(648.351685 492.609955) 33480 POINT(453.845703 837.519531) 33481 POINT(19.8414822 957.75592) 33482 POINT(406.319702 29.0533447) 33483 POINT(578.514771 122.30777) 33484 POINT(958.223572 969.451172) 33485 POINT(619.590942 742.585876) 33486 POINT(636.511597 66.8501434) 33487 POINT(400.883698 757.18512) 33488 POINT(936.054993 608.513245) 33489 POINT(54.7066269 255.876373) 33490 POINT(546.526611 670.359497) 33491 POINT(30.5739441 24.1161995) 33492 POINT(615.897888 116.279724) 33493 POINT(328.237183 208.952972) 33494 POINT(229.311646 712.389221) 33495 POINT(426.127197 637.594727) 33496 POINT(611.245667 678.768921) 33497 POINT(998.094177 884.544312) 33498 POINT(110.505669 766.964417) 33499 POINT(590.092834 827.986938) 33500 POINT(908.130066 288.095551) 33501 POINT(74.9025879 427.633972) 33502 POINT(157.319702 917.037842) 33503 POINT(171.985733 76.7160263) 33504 POINT(184.721146 696.558899) 33505 POINT(694.178345 678.122192) 33506 POINT(669.613159 485.945312) 33507 POINT(624.211792 632.285583) 33508 POINT(790.7146 306.57666) 33509 POINT(121.335594 31.4126244) 33510 POINT(61.5221176 187.753677) 33511 POINT(178.936523 375.776093) 33512 POINT(539.491333 406.162292) 33513 POINT(793.533386 173.389053) 33514 POINT(820.315552 528.563843) 33515 POINT(137.504196 480.424774) 33516 POINT(447.478058 637.183899) 33517 POINT(654.129639 177.850876) 33518 POINT(263.726044 158.994156) 33519 POINT(93.8978729 967.126526) 33520 POINT(692.835571 92.4311066) 33521 POINT(993.517883 377.325684) 33522 POINT(807.821045 277.483795) 33523 POINT(749.863831 696.169128) 33524 POINT(359.543823 977.555847) 33525 POINT(374.380951 622.280151) 33526 POINT(204.552643 114.72094) 33527 POINT(921.706421 555.243225) 33528 POINT(983.151184 345.241119) 33529 POINT(989.901428 29.1013622) 33530 POINT(611.441956 991.413025) 33531 POINT(187.392303 604.743958) 33532 POINT(520.897644 11.4925051) 33533 POINT(980.229797 83.8225479) 33534 POINT(415.426636 434.781281) 33535 POINT(377.485535 723.607544) 33536 POINT(131.619324 397.734406) 33537 POINT(815.51532 16.4185238) 33538 POINT(448.719177 363.576233) 33539 POINT(774.568542 862.402893) 33540 POINT(69.7859268 707.433411) 33541 POINT(843.065918 689.598022) 33542 POINT(606.59375 407.073364) 33543 POINT(453.185944 355.124939) 33544 POINT(73.2181702 542.259766) 33545 POINT(491.708344 856.37146) 33546 POINT(905.340698 10.4243908) 33547 POINT(665.981262 867.111877) 33548 POINT(855.477539 790.336609) 33549 POINT(428.179993 532.273987) 33550 POINT(703.197327 96.9014511) 33551 POINT(561.580139 463.737762) 33552 POINT(701.616394 377.916809) 33553 POINT(168.389374 400.975739) 33554 POINT(147.883987 706.987244) 33555 POINT(805.905212 973.004456) 33556 POINT(709.921082 265.864685) 33557 POINT(260.642334 626.112915) 33558 POINT(911.44519 214.927353) 33559 POINT(870.991516 284.887756) 33560 POINT(922.476807 893.610596) 33561 POINT(178.437042 177.523712) 33562 POINT(926.415039 435.275146) 33563 POINT(854.003784 481.265656) 33564 POINT(443.827789 125.784401) 33565 POINT(487.189423 796.675781) 33566 POINT(146.898056 175.124176) 33567 POINT(694.039856 722.485229) 33568 POINT(659.701721 640.522827) 33569 POINT(682.258789 23.9237156) 33570 POINT(323.974243 562.136353) 33571 POINT(565.437378 630.100464) 33572 POINT(836.712585 613.48584) 33573 POINT(334.90036 289.335266) 33574 POINT(406.910919 784.138916) 33575 POINT(43.6835938 500.040436) 33576 POINT(709.152039 497.905273) 33577 POINT(828.279968 929.177734) 33578 POINT(459.980713 712.976501) 33579 POINT(363.660522 56.4426346) 33580 POINT(140.423553 678.527466) 33581 POINT(17.4439869 131.757278) 33582 POINT(919.258301 253.46991) 33583 POINT(719.841614 613.614441) 33584 POINT(584.370239 786.102966) 33585 POINT(605.144348 239.154892) 33586 POINT(604.586548 157.74559) 33587 POINT(94.1877899 452.060852) 33588 POINT(865.691467 499.112946) 33589 POINT(889.678101 535.505432) 33590 POINT(148.975006 475.865479) 33591 POINT(539.874023 934.244324) 33592 POINT(748.839233 730.712097) 33593 POINT(811.407043 637.816345) 33594 POINT(411.011932 775.599731) 33595 POINT(197.610413 386.717834) 33596 POINT(871.230713 201.407257) 33597 POINT(901.381897 871.925537) 33598 POINT(995.443481 757.349976) 33599 POINT(576.204529 57.5003319) 33600 POINT(879.307983 531.77948) 33601 POINT(818.502136 564.048401) 33602 POINT(222.892334 914.643372) 33603 POINT(790.144531 521.039062) 33604 POINT(24.9224663 154.596283) 33605 POINT(650.903015 7.46612787) 33606 POINT(761.758911 446.283752) 33607 POINT(514.365173 747.830322) 33608 POINT(54.715332 541.950073) 33609 POINT(52.7645264 974.259277) 33610 POINT(663.669373 713.158142) 33611 POINT(389.992493 681.747192) 33612 POINT(956.612061 470.598206) 33613 POINT(589.500488 33.5910149) 33614 POINT(728.403259 150.862701) 33615 POINT(494.744385 575.348145) 33616 POINT(15.2433386 307.46817) 33617 POINT(372.288727 610.897034) 33618 POINT(965.056091 698.724976) 33619 POINT(277.79837 521.918518) 33620 POINT(672.050903 587.331543) 33621 POINT(177.16449 676.440796) 33622 POINT(413.26004 486.464264) 33623 POINT(51.320118 592.722107) 33624 POINT(886.031067 475.938904) 33625 POINT(764.405396 187.04332) 33626 POINT(741.608704 731.645386) 33627 POINT(729.478882 738.917419) 33628 POINT(47.5151405 64.44664) 33629 POINT(40.6945953 921.398926) 33630 POINT(850.000305 544.245728) 33631 POINT(10.6592216 149.819717) 33632 POINT(10.0804262 824.756531) 33633 POINT(39.5565414 147.240662) 33634 POINT(168.434875 609.068665) 33635 POINT(609.711243 72.6655884) 33636 POINT(474.631348 970.427002) 33637 POINT(434.817535 637.718628) 33638 POINT(466.871521 522.40155) 33639 POINT(464.463837 193.765198) 33640 POINT(784.884949 914.105042) 33641 POINT(447.351013 914.708679) 33642 POINT(769.070984 896.230164) 33643 POINT(64.3588791 556.901672) 33644 POINT(174.94133 489.966156) 33645 POINT(557.125671 238.367554) 33646 POINT(397.920807 211.484848) 33647 POINT(178.946716 652.065735) 33648 POINT(647.313293 118.438301) 33649 POINT(390.581482 785.10553) 33650 POINT(270.558899 801.208618) 33651 POINT(300.116302 746.088318) 33652 POINT(953.736938 630.526978) 33653 POINT(517.617737 660.245422) 33654 POINT(308.683136 275.201141) 33655 POINT(54.3161354 746.462769) 33656 POINT(601.278076 40.344696) 33657 POINT(662.983948 876.991577) 33658 POINT(232.753723 159.606857) 33659 POINT(689.654663 890.621887) 33660 POINT(412.695984 156.989273) 33661 POINT(13.6225739 199.932129) 33662 POINT(68.3663254 518.078613) 33663 POINT(497.652222 335.164703) 33664 POINT(932.721558 560.704102) 33665 POINT(886.521179 799.150208) 33666 POINT(408.893677 845.563843) 33667 POINT(690.548828 283.002014) 33668 POINT(890.850647 133.291748) 33669 POINT(10.8876619 990.121033) 33670 POINT(850.563782 581.422607) 33671 POINT(822.455383 631.117371) 33672 POINT(6.4501276 29.0421181) 33673 POINT(73.9717789 944.923401) 33674 POINT(44.4635887 175.502823) 33675 POINT(316.267792 247.616989) 33676 POINT(653.419922 699.975342) 33677 POINT(981.613342 151.895462) 33678 POINT(494.526428 758.959778) 33679 POINT(38.1484299 893.967896) 33680 POINT(289.347107 347.988342) 33681 POINT(492.604797 573.717407) 33682 POINT(571.382996 121.0233) 33683 POINT(147.508804 496.800629) 33684 POINT(98.0368576 966.533264) 33685 POINT(500.214203 908.00293) 33686 POINT(209.024841 873.578674) 33687 POINT(642.813721 943.379211) 33688 POINT(994.497192 955.745056) 33689 POINT(254.722885 89.8353424) 33690 POINT(404.550262 397.341583) 33691 POINT(122.157417 825.817871) 33692 POINT(997.902161 147.474564) 33693 POINT(247.588516 192.284576) 33694 POINT(950.833008 406.572449) 33695 POINT(282.446106 591.350403) 33696 POINT(990.752197 960.47229) 33697 POINT(310.853821 178.792358) 33698 POINT(797.773682 743.6875) 33699 POINT(592.154175 369.434509) 33700 POINT(51.3952866 321.007477) 33701 POINT(724.67749 540.415833) 33702 POINT(59.8649826 320.790741) 33703 POINT(390.003571 341.200195) 33704 POINT(872.270081 930.495789) 33705 POINT(771.372559 711.270203) 33706 POINT(966.12146 962.0625) 33707 POINT(385.549255 892.727966) 33708 POINT(257.674133 439.248383) 33709 POINT(226.095261 297.113617) 33710 POINT(982.995544 269.105896) 33711 POINT(167.536209 950.868713) 33712 POINT(332.558685 94.2437286) 33713 POINT(732.334473 574.867249) 33714 POINT(931.721008 530.766052) 33715 POINT(862.026184 838.794556) 33716 POINT(887.795227 468.863037) 33717 POINT(874.610779 424.968048) 33718 POINT(168.596252 129.600876) 33719 POINT(524.675232 708.194885) 33720 POINT(237.554504 953.818909) 33721 POINT(31.3011875 843.799866) 33722 POINT(800.039368 859.096436) 33723 POINT(200.17627 106.010605) 33724 POINT(70.8845749 791.046143) 33725 POINT(767.263245 450.05307) 33726 POINT(463.817932 58.8843422) 33727 POINT(836.763 515.824524) 33728 POINT(42.2688675 566.112427) 33729 POINT(608.940857 946.712097) 33730 POINT(423.675873 499.631744) 33731 POINT(404.804901 777.502441) 33732 POINT(264.891571 239.745697) 33733 POINT(533.891785 329.473694) 33734 POINT(596.651306 504.939575) 33735 POINT(635.90564 133.406967) 33736 POINT(445.532074 995.364868) 33737 POINT(402.183014 742.749146) 33738 POINT(660.69812 884.498108) 33739 POINT(772.550293 275.482422) 33740 POINT(131.456238 407.037903) 33741 POINT(858.861328 276.005219) 33742 POINT(574.796204 870.913147) 33743 POINT(598.228882 174.734512) 33744 POINT(427.366913 691.082031) 33745 POINT(944.710083 666.051514) 33746 POINT(684.552917 402.03064) 33747 POINT(804.097168 663.106995) 33748 POINT(584.421875 94.5595398) 33749 POINT(766.765137 824.98114) 33750 POINT(83.3718491 771.250122) 33751 POINT(440.618927 707.482727) 33752 POINT(63.5228386 795.210266) 33753 POINT(100.566727 348.825806) 33754 POINT(52.582756 880.23407) 33755 POINT(801.265137 66.5128708) 33756 POINT(31.523632 39.9035263) 33757 POINT(722.885864 678.585754) 33758 POINT(213.497833 71.5812378) 33759 POINT(590.229797 553.206665) 33760 POINT(761.702148 632.478638) 33761 POINT(606.667847 383.148193) 33762 POINT(490.179993 793.448608) 33763 POINT(637.2547 439.687408) 33764 POINT(78.7848206 296.884125) 33765 POINT(849.196167 112.707939) 33766 POINT(103.778648 153.76918) 33767 POINT(740.037415 635.250061) 33768 POINT(814.008972 887.813965) 33769 POINT(349.986847 131.657288) 33770 POINT(597.609131 758.627686) 33771 POINT(438.330536 144.830292) 33772 POINT(217.151947 898.578125) 33773 POINT(806.679993 981.511902) 33774 POINT(326.721954 97.5196228) 33775 POINT(653.722656 972.222778) 33776 POINT(410.153229 224.734589) 33777 POINT(555.205627 747.292297) 33778 POINT(936.528931 137.634018) 33779 POINT(165.224289 70.8617096) 33780 POINT(260.899689 682.047974) 33781 POINT(144.756027 604.881836) 33782 POINT(102.122292 719.96344) 33783 POINT(833.16449 164.704254) 33784 POINT(505.939636 348.629669) 33785 POINT(308.606659 812.232971) 33786 POINT(203.245422 811.959595) 33787 POINT(332.537933 262.733978) 33788 POINT(557.337341 403.653534) 33789 POINT(168.584335 73.8962555) 33790 POINT(669.441223 664.616455) 33791 POINT(911.823486 472.827179) 33792 POINT(191.573944 768.829651) 33793 POINT(93.9895172 256.197235) 33794 POINT(445.727356 446.276703) 33795 POINT(354.428741 284.202484) 33796 POINT(237.347382 523.858276) 33797 POINT(625.03772 759.488159) 33798 POINT(401.215607 981.122742) 33799 POINT(887.298584 832.399841) 33800 POINT(454.317261 763.374878) 33801 POINT(266.392242 464.253235) 33802 POINT(531.414673 807.225098) 33803 POINT(254.857132 786.712585) 33804 POINT(26.2883739 290.436371) 33805 POINT(758.118713 59.44767) 33806 POINT(489.524597 887.187988) 33807 POINT(556.336792 407.221588) 33808 POINT(480.019714 300.387756) 33809 POINT(639.399475 734.301636) 33810 POINT(322.852173 953.843079) 33811 POINT(730.679199 7.05821657) 33812 POINT(384.792389 998.987) 33813 POINT(534.60376 668.923279) 33814 POINT(287.54718 654.109192) 33815 POINT(765.578125 525.248657) 33816 POINT(888.064819 919.95575) 33817 POINT(611.81781 494.384613) 33818 POINT(268.17865 366.047211) 33819 POINT(805.864136 166.468887) 33820 POINT(998.988892 559.661987) 33821 POINT(90.695549 909.577576) 33822 POINT(638.241394 807.306213) 33823 POINT(341.316528 96.2664185) 33824 POINT(544.255798 830.430176) 33825 POINT(509.500519 939.977661) 33826 POINT(363.503723 327.56781) 33827 POINT(565.118896 993.781067) 33828 POINT(889.686279 749.013) 33829 POINT(700.464966 902.554504) 33830 POINT(772.176086 83.2628632) 33831 POINT(811.558167 858.72406) 33832 POINT(846.174744 723.048462) 33833 POINT(68.1021729 1.42096353) 33834 POINT(694.202759 129.746445) 33835 POINT(705.2005 845.350525) 33836 POINT(660.04187 775.864807) 33837 POINT(816.863953 620.413208) 33838 POINT(606.546997 834.282227) 33839 POINT(283.658295 53.3882713) 33840 POINT(625.546631 58.7848892) 33841 POINT(232.54483 801.645508) 33842 POINT(12.1617327 912.601196) 33843 POINT(892.197815 144.361084) 33844 POINT(651.252258 40.1205139) 33845 POINT(986.090332 103.186119) 33846 POINT(527.40802 822.463501) 33847 POINT(90.8179855 371.471802) 33848 POINT(62.1385574 831.336853) 33849 POINT(698.976807 14.3513727) 33850 POINT(56.0027237 209.566544) 33851 POINT(163.063782 112.187302) 33852 POINT(25.794735 213.405136) 33853 POINT(686.085693 373.716461) 33854 POINT(987.149109 594.306335) 33855 POINT(70.7221985 274.893616) 33856 POINT(253.726257 60.1524048) 33857 POINT(875.00531 782.793945) 33858 POINT(571.322083 512.313416) 33859 POINT(859.679077 14.4661417) 33860 POINT(47.7511406 20.4539986) 33861 POINT(389.948425 837.431702) 33862 POINT(499.252258 877.348511) 33863 POINT(589.599854 36.326561) 33864 POINT(336.658356 517.406006) 33865 POINT(183.984619 109.333832) 33866 POINT(237.971771 422.05661) 33867 POINT(833.729309 394.534515) 33868 POINT(79.7458115 350.151825) 33869 POINT(405.041779 201.709656) 33870 POINT(862.356018 690.244019) 33871 POINT(674.987793 96.6887665) 33872 POINT(301.550354 442.827576) 33873 POINT(889.140137 875.907715) 33874 POINT(961.415222 203.754623) 33875 POINT(910.675903 16.8888416) 33876 POINT(66.0282288 575.129028) 33877 POINT(288.579773 199.992691) 33878 POINT(695.660706 107.687126) 33879 POINT(870.479492 587.735291) 33880 POINT(898.639038 250.292526) 33881 POINT(863.310547 905.575439) 33882 POINT(235.189774 809.609375) 33883 POINT(851.103027 493.322693) 33884 POINT(521.232117 208.821411) 33885 POINT(890.470703 655.807068) 33886 POINT(617.705444 871.588623) 33887 POINT(675.739746 117.406105) 33888 POINT(277.32901 480.077759) 33889 POINT(980.088745 725.300415) 33890 POINT(531.505493 688.271301) 33891 POINT(297.720581 814.399048) 33892 POINT(294.341949 278.899475) 33893 POINT(324.200745 671.84314) 33894 POINT(650.547241 289.911163) 33895 POINT(685.067139 165.586487) 33896 POINT(254.462097 500.690735) 33897 POINT(52.142971 940.118774) 33898 POINT(927.013245 946.155945) 33899 POINT(446.305908 258.913361) 33900 POINT(627.398315 45.9735947) 33901 POINT(416.537933 979.252869) 33902 POINT(681.375122 114.569527) 33903 POINT(787.784668 687.936523) 33904 POINT(355.841278 714.177368) 33905 POINT(492.499207 378.854248) 33906 POINT(420.77182 677.279175) 33907 POINT(428.864105 404.003143) 33908 POINT(278.473328 946.481262) 33909 POINT(436.838501 732.320923) 33910 POINT(63.5888519 339.801636) 33911 POINT(43.7405548 775.445679) 33912 POINT(25.5404224 268.815216) 33913 POINT(124.566544 421.534515) 33914 POINT(651.446594 528.016296) 33915 POINT(647.289307 208.561356) 33916 POINT(728.447083 888.662781) 33917 POINT(156.736374 283.665436) 33918 POINT(689.374512 112.417534) 33919 POINT(97.1998215 467.368286) 33920 POINT(647.530579 533.098328) 33921 POINT(816.68634 168.665588) 33922 POINT(970.769775 813.192017) 33923 POINT(545.807373 392.608948) 33924 POINT(741.116882 280.531677) 33925 POINT(540.997192 725.124878) 33926 POINT(115.807999 195.331741) 33927 POINT(242.408707 65.1973877) 33928 POINT(274.154633 834.919617) 33929 POINT(866.986328 362.520294) 33930 POINT(80.2948227 749.906738) 33931 POINT(560.48175 585.283142) 33932 POINT(796.170288 418.745819) 33933 POINT(620.318359 229.487488) 33934 POINT(576.517456 675.785706) 33935 POINT(504.112244 545.331726) 33936 POINT(205.981491 219.857269) 33937 POINT(314.321655 220.597137) 33938 POINT(688.474792 625.506836) 33939 POINT(234.063461 964.097717) 33940 POINT(164.55275 117.285751) 33941 POINT(346.855652 478.218567) 33942 POINT(960.936096 859.66626) 33943 POINT(346.307007 918.093262) 33944 POINT(817.570496 232.471664) 33945 POINT(601.083069 591.405884) 33946 POINT(895.097351 966.103027) 33947 POINT(734.466797 358.1315) 33948 POINT(645.762085 704.846375) 33949 POINT(483.258759 710.343201) 33950 POINT(93.1765289 543.326782) 33951 POINT(872.509827 630.750732) 33952 POINT(273.678009 974.518494) 33953 POINT(263.654327 92.736084) 33954 POINT(260.106537 22.045475) 33955 POINT(265.151337 37.8014946) 33956 POINT(236.600082 769.848328) 33957 POINT(825.995911 177.639801) 33958 POINT(892.558167 104.316879) 33959 POINT(630.823792 362.206207) 33960 POINT(30.437355 943.984619) 33961 POINT(576.299805 142.56456) 33962 POINT(763.843079 136.759903) 33963 POINT(105.692429 663.876404) 33964 POINT(250.912872 281.975098) 33965 POINT(313.74939 41.3007965) 33966 POINT(247.818375 102.426987) 33967 POINT(387.08316 807.000061) 33968 POINT(266.042603 408.853394) 33969 POINT(324.263214 42.7586098) 33970 POINT(115.734634 815.352173) 33971 POINT(270.820587 118.387497) 33972 POINT(659.851624 969.142456) 33973 POINT(821.66333 995.217041) 33974 POINT(687.039124 332.454224) 33975 POINT(479.357819 296.291321) 33976 POINT(635.468506 319.504578) 33977 POINT(131.859589 525.730591) 33978 POINT(118.46666 559.387085) 33979 POINT(26.2114944 190.0923) 33980 POINT(672.184204 78.8062286) 33981 POINT(692.224548 151.041916) 33982 POINT(175.320358 520.095764) 33983 POINT(617.09906 353.469208) 33984 POINT(993.756958 13.656333) 33985 POINT(21.3404446 424.200684) 33986 POINT(44.6657333 784.247681) 33987 POINT(749.307678 337.148163) 33988 POINT(824.189575 902.514404) 33989 POINT(303.557983 970.191467) 33990 POINT(622.230835 102.375656) 33991 POINT(238.207443 532.052429) 33992 POINT(982.401978 217.754517) 33993 POINT(128.314758 374.223419) 33994 POINT(233.126205 385.481293) 33995 POINT(873.453308 999.651245) 33996 POINT(98.6656799 692.610596) 33997 POINT(225.918076 277.936981) 33998 POINT(931.068481 784.011963) 33999 POINT(787.30481 133.532166) 34000 POINT(623.363647 98.7163696) 34001 POINT(749.505981 711.635071) 34002 POINT(361.611603 770.539124) 34003 POINT(903.623108 184.697739) 34004 POINT(842.582764 849.994263) 34005 POINT(767.156982 644.745728) 34006 POINT(671.960632 811.129578) 34007 POINT(528.490479 652.815308) 34008 POINT(315.243134 369.934174) 34009 POINT(148.627045 972.077393) 34010 POINT(103.262054 422.314484) 34011 POINT(742.026794 296.622925) 34012 POINT(502.912445 511.844543) 34013 POINT(957.951294 670.026978) 34014 POINT(710.836426 153.726212) 34015 POINT(755.864197 48.9238014) 34016 POINT(876.149231 705.445496) 34017 POINT(796.153809 654.754456) 34018 POINT(123.63871 310.886963) 34019 POINT(811.870239 435.075165) 34020 POINT(450.164917 918.213501) 34021 POINT(277.568237 953.438538) 34022 POINT(376.301331 38.2961159) 34023 POINT(515.095886 188.606995) 34024 POINT(527.788391 966.176331) 34025 POINT(968.779297 160.078506) 34026 POINT(625.43689 719.87854) 34027 POINT(717.554626 633.580261) 34028 POINT(409.164276 186.395523) 34029 POINT(670.952576 788.911194) 34030 POINT(996.446228 522.019653) 34031 POINT(199.324463 60.5223236) 34032 POINT(965.308716 992.163086) 34033 POINT(884.328796 61.3612213) 34034 POINT(897.898743 303.827301) 34035 POINT(429.59494 761.252991) 34036 POINT(266.594452 371.978424) 34037 POINT(657.915649 866.545898) 34038 POINT(887.621887 49.9235954) 34039 POINT(632.66626 607.641541) 34040 POINT(907.430115 964.659668) 34041 POINT(797.918152 120.706802) 34042 POINT(577.957031 442.986023) 34043 POINT(232.538712 60.3117027) 34044 POINT(274.845856 945.483459) 34045 POINT(585.207764 517.541626) 34046 POINT(127.20961 186.418777) 34047 POINT(504.614594 275.537933) 34048 POINT(771.390869 592.036499) 34049 POINT(735.135498 709.262817) 34050 POINT(580.140869 211.950943) 34051 POINT(924.166809 542.052612) 34052 POINT(921.695129 63.49963) 34053 POINT(322.255096 287.308472) 34054 POINT(692.420044 962.621826) 34055 POINT(268.611786 624.211548) 34056 POINT(367.242706 623.377014) 34057 POINT(788.028381 541.985291) 34058 POINT(902.275146 528.527405) 34059 POINT(4.25688171 713.939636) 34060 POINT(985.348206 263.218842) 34061 POINT(951.342285 871.923401) 34062 POINT(797.151062 530.866455) 34063 POINT(868.074768 601.107788) 34064 POINT(756.025085 443.67807) 34065 POINT(149.677475 887.074158) 34066 POINT(764.004578 299.238708) 34067 POINT(841.191467 360.466095) 34068 POINT(544.378418 459.278351) 34069 POINT(253.022278 703.084839) 34070 POINT(508.935638 67.8112259) 34071 POINT(903.155518 322.986572) 34072 POINT(666.350159 754.560913) 34073 POINT(313.137787 660.235229) 34074 POINT(785.173828 627.884155) 34075 POINT(54.6909981 350.445038) 34076 POINT(962.09137 371.816589) 34077 POINT(37.5342064 716.721313) 34078 POINT(978.011902 117.54953) 34079 POINT(101.517433 464.297394) 34080 POINT(113.929611 594.398315) 34081 POINT(110.528648 63.9255028) 34082 POINT(161.094543 403.552704) 34083 POINT(602.954224 693.383545) 34084 POINT(114.846573 764.648438) 34085 POINT(623.011169 90.4117432) 34086 POINT(860.545349 816.128418) 34087 POINT(206.409576 599.717346) 34088 POINT(118.574699 201.764694) 34089 POINT(518.054199 681.737183) 34090 POINT(41.7310791 834.498474) 34091 POINT(312.486084 317.598297) 34092 POINT(383.868561 122.466644) 34093 POINT(11.2584686 984.772827) 34094 POINT(768.035767 688.882324) 34095 POINT(645.31897 98.5077896) 34096 POINT(663.200684 476.115204) 34097 POINT(402.735168 188.077301) 34098 POINT(571.835999 744.284241) 34099 POINT(838.894958 292.727509) 34100 POINT(180.077499 645.975037) 34101 POINT(561.884155 573.969788) 34102 POINT(824.938904 961.987915) 34103 POINT(592.483032 418.346252) 34104 POINT(289.366699 39.6000099) 34105 POINT(636.633118 83.298996) 34106 POINT(299.066223 696.599243) 34107 POINT(296.940765 469.29657) 34108 POINT(21.4713612 693.860474) 34109 POINT(215.562729 900.507324) 34110 POINT(666.535278 579.646545) 34111 POINT(288.543243 896.28949) 34112 POINT(973.883057 153.920059) 34113 POINT(254.349045 114.440697) 34114 POINT(907.111816 265.157654) 34115 POINT(48.1141129 757.992981) 34116 POINT(432.590515 50.5091286) 34117 POINT(567.213379 339.455994) 34118 POINT(459.076233 368.300201) 34119 POINT(730.620728 384.524414) 34120 POINT(181.0159 996.130676) 34121 POINT(579.576721 291.729462) 34122 POINT(480.867767 15.0837765) 34123 POINT(384.029114 521.306885) 34124 POINT(185.596115 648.373901) 34125 POINT(339.874176 707.271545) 34126 POINT(774.239746 39.2875137) 34127 POINT(96.0960999 328.562439) 34128 POINT(234.822021 47.2992325) 34129 POINT(496.492737 661.004639) 34130 POINT(760.680847 12.1904211) 34131 POINT(93.9100571 800.194031) 34132 POINT(652.493469 623.898682) 34133 POINT(60.0530853 300.362183) 34134 POINT(399.925964 971.345947) 34135 POINT(513.373474 135.534561) 34136 POINT(406.143799 597.922791) 34137 POINT(291.764191 242.21846) 34138 POINT(92.7021866 926.556396) 34139 POINT(154.453583 348.416199) 34140 POINT(288.031799 835.90625) 34141 POINT(985.337585 398.561157) 34142 POINT(419.424591 964.366455) 34143 POINT(42.9110794 930.242126) 34144 POINT(358.796265 624.012451) 34145 POINT(742.9552 794.169128) 34146 POINT(32.377224 46.8098602) 34147 POINT(30.3477898 697.216797) 34148 POINT(512.811218 225.355759) 34149 POINT(585.043457 18.6599388) 34150 POINT(140.985229 405.806671) 34151 POINT(981.799255 46.6205482) 34152 POINT(849.477295 537.750732) 34153 POINT(379.113495 315.623444) 34154 POINT(808.104004 771.523071) 34155 POINT(323.729156 722.986938) 34156 POINT(516.128906 645.375854) 34157 POINT(124.684822 953.158875) 34158 POINT(709.821533 541.16925) 34159 POINT(855.166504 852.272034) 34160 POINT(825.93219 566.627258) 34161 POINT(89.3189392 442.98468) 34162 POINT(102.091141 394.125641) 34163 POINT(760.858704 440.578186) 34164 POINT(748.094971 40.4801521) 34165 POINT(155.045715 379.391571) 34166 POINT(484.580811 789.951233) 34167 POINT(707.696289 753.722839) 34168 POINT(317.903778 764.960266) 34169 POINT(504.973969 154.661987) 34170 POINT(855.447021 247.741913) 34171 POINT(754.298889 994.91925) 34172 POINT(120.549759 103.871262) 34173 POINT(956.635437 574.178528) 34174 POINT(510.310303 298.4711) 34175 POINT(558.533875 480.062592) 34176 POINT(765.399597 911.709534) 34177 POINT(831.618652 442.298065) 34178 POINT(54.5307693 526.358826) 34179 POINT(28.871788 73.5913162) 34180 POINT(186.313522 791.738953) 34181 POINT(240.308167 519.167542) 34182 POINT(669.951233 170.979126) 34183 POINT(132.866638 992.620483) 34184 POINT(678.807129 798.486755) 34185 POINT(56.0505104 859.01062) 34186 POINT(705.597107 348.730652) 34187 POINT(49.6807137 213.019653) 34188 POINT(816.300049 323.459625) 34189 POINT(654.828491 432.015503) 34190 POINT(346.391663 70.4580078) 34191 POINT(233.457138 618.335876) 34192 POINT(775.388428 661.670471) 34193 POINT(704.530823 104.804459) 34194 POINT(454.765533 881.427002) 34195 POINT(240.475815 720.937012) 34196 POINT(144.025116 546.602722) 34197 POINT(902.163879 508.569794) 34198 POINT(677.110352 130.519577) 34199 POINT(365.411499 254.478912) 34200 POINT(986.685303 762.530518) 34201 POINT(577.858826 59.3100929) 34202 POINT(560.345886 587.429688) 34203 POINT(230.645264 187.775345) 34204 POINT(797.041443 795.650452) 34205 POINT(511.285767 411.20343) 34206 POINT(733.441345 369.803925) 34207 POINT(477.463745 742.377014) 34208 POINT(981.366699 369.269836) 34209 POINT(139.094589 922.005432) 34210 POINT(174.550552 916.685852) 34211 POINT(619.113098 809.641724) 34212 POINT(684.830872 623.337463) 34213 POINT(571.259521 288.461914) 34214 POINT(206.492172 50.2871666) 34215 POINT(933.057556 757.804749) 34216 POINT(98.0488205 644.888184) 34217 POINT(479.712128 370.076569) 34218 POINT(141.625824 5.02189445) 34219 POINT(993.425232 995.535339) 34220 POINT(862.685669 33.5159645) 34221 POINT(974.406067 361.177185) 34222 POINT(431.745575 670.904419) 34223 POINT(74.5066299 815.691589) 34224 POINT(832.619995 194.775421) 34225 POINT(39.9640541 894.07373) 34226 POINT(769.432312 197.826706) 34227 POINT(192.304352 981.461304) 34228 POINT(241.109497 94.4533768) 34229 POINT(970.315002 360.204926) 34230 POINT(834.376892 537.893494) 34231 POINT(993.514771 236.805923) 34232 POINT(274.600922 277.939972) 34233 POINT(509.2388 721.519409) 34234 POINT(281.506714 464.908142) 34235 POINT(49.9557571 424.097595) 34236 POINT(160.269821 61.4679832) 34237 POINT(81.4910736 350.942017) 34238 POINT(127.317787 103.26664) 34239 POINT(371.337372 174.069275) 34240 POINT(137.071976 935.778503) 34241 POINT(582.191711 988.62384) 34242 POINT(906.635681 22.9307117) 34243 POINT(110.404594 196.6716) 34244 POINT(99.0329819 387.809509) 34245 POINT(681.415283 729.779663) 34246 POINT(844.098083 512.815308) 34247 POINT(501.865021 46.1589279) 34248 POINT(274.698578 542.293762) 34249 POINT(496.431549 70.2650452) 34250 POINT(812.973083 731.839722) 34251 POINT(50.1462212 859.702332) 34252 POINT(38.1126976 252.690506) 34253 POINT(785.801819 427.649078) 34254 POINT(38.496357 55.055481) 34255 POINT(860.910889 976.053955) 34256 POINT(834.386108 529.665955) 34257 POINT(527.543152 228.389038) 34258 POINT(343.732056 81.6787949) 34259 POINT(797.390747 529.264648) 34260 POINT(246.863892 485.374695) 34261 POINT(857.832275 605.81543) 34262 POINT(233.031235 452.518677) 34263 POINT(834.982666 82.1816254) 34264 POINT(433.095062 293.084961) 34265 POINT(867.227844 988.986938) 34266 POINT(261.483093 836.206421) 34267 POINT(586.183167 115.431686) 34268 POINT(513.252625 14.2289648) 34269 POINT(678.147339 379.076965) 34270 POINT(948.323914 186.795853) 34271 POINT(472.821136 719.819885) 34272 POINT(7.34874678 528.748413) 34273 POINT(560.342896 907.804626) 34274 POINT(958.088989 649.718262) 34275 POINT(433.680115 153.551727) 34276 POINT(86.5336456 219.644775) 34277 POINT(580.379089 351.524689) 34278 POINT(395.363647 298.739563) 34279 POINT(372.985596 20.4127178) 34280 POINT(228.96347 508.932953) 34281 POINT(426.621185 634.942139) 34282 POINT(837.308716 223.481247) 34283 POINT(778.864624 701.015808) 34284 POINT(852.166565 819.735535) 34285 POINT(603.003479 0.0197799355) 34286 POINT(162.707535 355.231415) 34287 POINT(70.7682343 326.454132) 34288 POINT(631.533569 48.0445251) 34289 POINT(142.851852 438.497589) 34290 POINT(327.100647 818.185547) 34291 POINT(270.980225 22.1723251) 34292 POINT(508.502136 167.716156) 34293 POINT(358.294861 190.544205) 34294 POINT(980.645264 523.920532) 34295 POINT(537.71814 369.597321) 34296 POINT(842.201782 163.553528) 34297 POINT(911.30426 597.413818) 34298 POINT(228.656952 188.821152) 34299 POINT(945.965454 34.0448265) 34300 POINT(764.77002 89.8707962) 34301 POINT(669.164124 362.581299) 34302 POINT(894.360718 947.339478) 34303 POINT(657.056641 289.645294) 34304 POINT(563.246887 685.721863) 34305 POINT(390.175415 323.682007) 34306 POINT(359.200012 258.384918) 34307 POINT(279.170013 735.509338) 34308 POINT(829.898621 643.015503) 34309 POINT(274.66098 166.682327) 34310 POINT(428.121185 857.803894) 34311 POINT(788.264832 842.078857) 34312 POINT(198.018997 320.027679) 34313 POINT(811.842773 124.060173) 34314 POINT(695.572449 96.8242416) 34315 POINT(852.634155 92.5872955) 34316 POINT(711.699036 420.361511) 34317 POINT(154.922577 590.375366) 34318 POINT(572.52594 124.50209) 34319 POINT(784.124817 391.778564) 34320 POINT(265.7547 916.193787) 34321 POINT(464.70343 761.461487) 34322 POINT(475.651917 21.6240406) 34323 POINT(625.212036 102.510643) 34324 POINT(95.9439011 284.685791) 34325 POINT(276.348602 857.572571) 34326 POINT(676.84491 174.180801) 34327 POINT(73.4957352 540.596985) 34328 POINT(999.802551 947.726746) 34329 POINT(964.38092 226.169617) 34330 POINT(964.62146 886.442993) 34331 POINT(43.8208656 9.21490765) 34332 POINT(824.872498 657.714844) 34333 POINT(807.785095 636.632629) 34334 POINT(578.479065 476.833435) 34335 POINT(673.105957 486.436829) 34336 POINT(773.790588 455.872345) 34337 POINT(990.081116 377.037018) 34338 POINT(843.127625 874.205139) 34339 POINT(484.096313 892.916931) 34340 POINT(244.653488 744.628357) 34341 POINT(108.49749 342.23349) 34342 POINT(551.573425 37.7969055) 34343 POINT(241.642624 461.492218) 34344 POINT(250.267059 961.893616) 34345 POINT(411.87793 162.822021) 34346 POINT(424.356659 361.053802) 34347 POINT(758.736572 106.433365) 34348 POINT(941.336304 322.588593) 34349 POINT(38.7149048 566.213379) 34350 POINT(906.814514 587.663513) 34351 POINT(539.419922 847.308228) 34352 POINT(396.345184 101.578133) 34353 POINT(984.710999 583.821777) 34354 POINT(157.060501 667.572876) 34355 POINT(681.81488 280.895782) 34356 POINT(634.822449 972.201721) 34357 POINT(393.52594 922.534485) 34358 POINT(324.442871 411.414062) 34359 POINT(906.90686 814.316223) 34360 POINT(760.884155 985.880371) 34361 POINT(34.8757019 803.956421) 34362 POINT(121.563782 763.683044) 34363 POINT(927.343445 873.519531) 34364 POINT(250.38858 880.817932) 34365 POINT(510.908203 841.526978) 34366 POINT(252.512161 8.17808437) 34367 POINT(625.396729 583.499817) 34368 POINT(657.73645 541.605713) 34369 POINT(814.786865 73.4616318) 34370 POINT(475.782959 243.618225) 34371 POINT(670.368164 480.081696) 34372 POINT(437.29126 596.575928) 34373 POINT(354.672119 98.5685806) 34374 POINT(952.426208 23.0283222) 34375 POINT(273.098297 657.848999) 34376 POINT(149.593689 336.041992) 34377 POINT(451.798218 372.344879) 34378 POINT(58.2890282 137.388901) 34379 POINT(748.876953 384.764893) 34380 POINT(53.9862862 362.098236) 34381 POINT(623.100708 112.357018) 34382 POINT(23.7850571 142.214615) 34383 POINT(439.931091 621.257629) 34384 POINT(976.961731 639.445435) 34385 POINT(666.857849 934.76239) 34386 POINT(605.444702 375.138641) 34387 POINT(334.802124 70.0229492) 34388 POINT(389.492645 906.743835) 34389 POINT(684.066467 297.930481) 34390 POINT(490.571411 893.244324) 34391 POINT(414.305298 352.521545) 34392 POINT(826.796326 729.286438) 34393 POINT(688.781555 64.4726868) 34394 POINT(289.647949 970.799744) 34395 POINT(352.398285 659.125061) 34396 POINT(140.432785 826.324097) 34397 POINT(387.406097 9.59316921) 34398 POINT(780.708618 541.214905) 34399 POINT(705.167908 752.092651) 34400 POINT(585.330811 690.162048) 34401 POINT(39.9248886 901.522888) 34402 POINT(535.712219 241.45462) 34403 POINT(132.276978 514.03418) 34404 POINT(413.280365 929.188232) 34405 POINT(55.3355141 858.901733) 34406 POINT(181.0215 522.805603) 34407 POINT(512.596252 329.245605) 34408 POINT(469.626923 213.281052) 34409 POINT(119.035652 50.3245659) 34410 POINT(322.415588 628.808838) 34411 POINT(39.3791313 461.276001) 34412 POINT(271.346954 177.584763) 34413 POINT(201.685059 442.86908) 34414 POINT(599.631165 109.333572) 34415 POINT(510.219727 247.31366) 34416 POINT(182.380035 149.428482) 34417 POINT(757.067627 229.27449) 34418 POINT(426.249329 939.182373) 34419 POINT(63.1670685 368.455444) 34420 POINT(596.038513 103.205193) 34421 POINT(780.737 767.541687) 34422 POINT(717.815308 240.281586) 34423 POINT(552.752197 674.649109) 34424 POINT(484.509796 819.314819) 34425 POINT(171.737061 352.077484) 34426 POINT(314.397644 68.4250412) 34427 POINT(608.316772 44.0757713) 34428 POINT(281.91333 825.815796) 34429 POINT(16.446291 902.106628) 34430 POINT(863.365234 718.703003) 34431 POINT(171.914688 538.965698) 34432 POINT(830.068054 335.217133) 34433 POINT(996.603027 700.92688) 34434 POINT(643.97937 528.162659) 34435 POINT(974.191895 683.317566) 34436 POINT(35.0724716 53.8841782) 34437 POINT(112.825935 648.684753) 34438 POINT(187.470032 209.910461) 34439 POINT(974.030884 32.7179451) 34440 POINT(957.994568 437.817596) 34441 POINT(310.452972 101.699394) 34442 POINT(574.583374 339.779938) 34443 POINT(261.38092 332.433258) 34444 POINT(294.413757 696.106812) 34445 POINT(396.278076 262.966156) 34446 POINT(977.160828 734.854492) 34447 POINT(302.576233 467.175018) 34448 POINT(585.252502 602.146423) 34449 POINT(842.774841 261.320129) 34450 POINT(351.128326 112.546272) 34451 POINT(693.578491 94.4136581) 34452 POINT(45.281147 962.743652) 34453 POINT(690.652222 510.844025) 34454 POINT(185.344528 599.59845) 34455 POINT(778.961731 322.844147) 34456 POINT(595.873962 416.534729) 34457 POINT(781.096619 677.454468) 34458 POINT(864.078979 372.291199) 34459 POINT(593.091858 48.5827141) 34460 POINT(545.039978 85.6658096) 34461 POINT(975.811646 596.20343) 34462 POINT(510.459503 952.295654) 34463 POINT(584.833923 593.900574) 34464 POINT(370.44812 488.48407) 34465 POINT(855.974915 780.6828) 34466 POINT(144.049164 457.035126) 34467 POINT(498.254974 106.776802) 34468 POINT(230.110184 36.0234756) 34469 POINT(630.489441 745.021118) 34470 POINT(607.78418 409.075439) 34471 POINT(599.172363 774.280212) 34472 POINT(150.582077 381.358643) 34473 POINT(629.413879 219.314392) 34474 POINT(997.823242 545.982056) 34475 POINT(161.029449 278.764648) 34476 POINT(323.987732 868.439209) 34477 POINT(810.215393 480.932495) 34478 POINT(264.429565 440.244019) 34479 POINT(753.465332 83.0910568) 34480 POINT(582.866089 335.806519) 34481 POINT(162.495087 446.996613) 34482 POINT(242.827759 638.280273) 34483 POINT(413.075623 69.5642166) 34484 POINT(915.786682 570.633423) 34485 POINT(761.094727 877.422241) 34486 POINT(620.047058 458.206604) 34487 POINT(218.246155 776.999695) 34488 POINT(836.874695 779.816223) 34489 POINT(488.000854 23.2760067) 34490 POINT(247.083405 547.957275) 34491 POINT(138.573669 981.312988) 34492 POINT(528.831909 547.388672) 34493 POINT(120.220543 321.794708) 34494 POINT(765.282959 798.516968) 34495 POINT(284.269562 647.249084) 34496 POINT(941.734497 881.314636) 34497 POINT(563.810669 287.267059) 34498 POINT(731.669739 231.435608) 34499 POINT(842.07666 342.347473) 34500 POINT(448.83493 117.757851) 34501 POINT(503.500244 576.080322) 34502 POINT(300.010864 35.4605293) 34503 POINT(51.6114159 48.9640999) 34504 POINT(235.790207 647.21283) 34505 POINT(632.853333 314.585236) 34506 POINT(42.7329178 14.0351048) 34507 POINT(549.676453 936.14856) 34508 POINT(331.183075 654.424011) 34509 POINT(931.678223 170.034332) 34510 POINT(683.372925 323.577789) 34511 POINT(289.971497 60.4008217) 34512 POINT(73.9001465 322.805664) 34513 POINT(165.395309 317.70047) 34514 POINT(350.068604 531.868408) 34515 POINT(31.7638302 152.80899) 34516 POINT(856.873779 244.116699) 34517 POINT(895.335449 411.383881) 34518 POINT(457.661774 706.533386) 34519 POINT(83.4612503 619.795898) 34520 POINT(186.892197 95.4320297) 34521 POINT(809.446777 899.867188) 34522 POINT(479.310364 455.535706) 34523 POINT(585.664429 635.678711) 34524 POINT(456.625336 997.992126) 34525 POINT(109.647285 548.480225) 34526 POINT(678.073486 584.73822) 34527 POINT(123.157814 737.472351) 34528 POINT(337.711792 356.301208) 34529 POINT(25.0667496 822.787292) 34530 POINT(334.755493 312.02533) 34531 POINT(866.430908 645.844971) 34532 POINT(372.694794 390.882751) 34533 POINT(259.68103 870.511597) 34534 POINT(130.36409 783.129639) 34535 POINT(760.705139 130.857941) 34536 POINT(168.793015 24.3921623) 34537 POINT(328.348083 198.162445) 34538 POINT(119.859406 971.225708) 34539 POINT(504.073517 617.103088) 34540 POINT(577.93512 258.322601) 34541 POINT(287.013977 780.433655) 34542 POINT(168.439499 910.517029) 34543 POINT(186.243988 880.072205) 34544 POINT(385.184174 686.331848) 34545 POINT(320.864166 263.291534) 34546 POINT(812.429504 613.455627) 34547 POINT(495.509613 624.074158) 34548 POINT(321.621887 330.255127) 34549 POINT(18.4538574 125.773453) 34550 POINT(253.911255 951.898438) 34551 POINT(343.951599 951.739014) 34552 POINT(667.958801 556.158752) 34553 POINT(930.358276 150.869873) 34554 POINT(601.550232 244.418915) 34555 POINT(609.514038 736.126038) 34556 POINT(321.581573 430.32901) 34557 POINT(187.642365 322.462769) 34558 POINT(529.648499 285.154755) 34559 POINT(448.472534 688.679871) 34560 POINT(962.443787 508.877869) 34561 POINT(538.456543 313.146515) 34562 POINT(243.27005 73.9895706) 34563 POINT(292.950653 479.75354) 34564 POINT(872.152283 719.688965) 34565 POINT(150.323257 56.85812) 34566 POINT(9.35811234 563.527161) 34567 POINT(215.521988 613.14563) 34568 POINT(35.7956009 691.71344) 34569 POINT(921.186707 510.595337) 34570 POINT(542.082153 325.233612) 34571 POINT(816.567627 882.074829) 34572 POINT(387.508026 614.166992) 34573 POINT(844.056335 601.1026) 34574 POINT(215.223587 155.285126) 34575 POINT(169.942535 141.240997) 34576 POINT(448.455658 466.965912) 34577 POINT(178.082413 525.256897) 34578 POINT(415.229675 290.074158) 34579 POINT(648.636108 818.099365) 34580 POINT(149.87854 253.781387) 34581 POINT(793.158508 26.9864197) 34582 POINT(345.634521 81.990181) 34583 POINT(644.49585 56.2002678) 34584 POINT(334.016815 690.378784) 34585 POINT(75.6562271 8.90686131) 34586 POINT(246.867203 698.005737) 34587 POINT(294.71521 634.424316) 34588 POINT(282.194702 653.448364) 34589 POINT(209.652786 853.462158) 34590 POINT(305.037506 646.762268) 34591 POINT(332.670502 838.168457) 34592 POINT(632.03125 578.922424) 34593 POINT(481.020691 126.207039) 34594 POINT(489.108887 714.264221) 34595 POINT(91.8230515 272.01535) 34596 POINT(214.692062 913.813965) 34597 POINT(491.007507 912.971191) 34598 POINT(177.940002 193.954681) 34599 POINT(508.78717 198.14566) 34600 POINT(668.29187 671.899902) 34601 POINT(811.440002 902.996094) 34602 POINT(716.995605 133.858475) 34603 POINT(695.296204 360.728058) 34604 POINT(165.002731 121.111366) 34605 POINT(665.44574 471.737152) 34606 POINT(979.098145 691.644287) 34607 POINT(278.682373 413.749908) 34608 POINT(227.11792 639.282837) 34609 POINT(675.593018 439.875244) 34610 POINT(594.41156 587.870239) 34611 POINT(246.618317 8.22656441) 34612 POINT(401.267548 814.950806) 34613 POINT(585.607056 889.183289) 34614 POINT(761.919861 78.3423386) 34615 POINT(474.252136 314.455292) 34616 POINT(510.176239 941.181641) 34617 POINT(132.329041 401.245819) 34618 POINT(457.981842 828.428162) 34619 POINT(460.498993 255.95517) 34620 POINT(307.799377 152.947372) 34621 POINT(921.342346 351.629272) 34622 POINT(417.115021 565.333374) 34623 POINT(55.1367798 13.9614439) 34624 POINT(626.369446 592.357544) 34625 POINT(242.697205 439.954712) 34626 POINT(475.982178 408.76236) 34627 POINT(119.484749 424.819611) 34628 POINT(522.828979 151.093719) 34629 POINT(252.423752 465.424072) 34630 POINT(743.622559 336.047333) 34631 POINT(130.828003 737.350403) 34632 POINT(507.322449 535.682678) 34633 POINT(841.031494 467.703918) 34634 POINT(589.292297 324.746216) 34635 POINT(714.382629 823.233948) 34636 POINT(667.864624 628.783691) 34637 POINT(811.949524 744.671509) 34638 POINT(623.847473 333.871857) 34639 POINT(966.479675 340.687622) 34640 POINT(392.997864 378.453583) 34641 POINT(700.871765 931.380493) 34642 POINT(691.423767 434.330536) 34643 POINT(218.778412 540.189331) 34644 POINT(438.196686 737.392883) 34645 POINT(681.226807 278.703735) 34646 POINT(385.237823 79.8106613) 34647 POINT(585.703308 370.722931) 34648 POINT(281.972687 495.465485) 34649 POINT(521.502808 505.463409) 34650 POINT(754.654114 721.27771) 34651 POINT(235.929901 296.001373) 34652 POINT(74.0787201 201.322739) 34653 POINT(486.91214 114.46003) 34654 POINT(680.233398 711.39447) 34655 POINT(833.629944 762.347656) 34656 POINT(990.906372 752.752808) 34657 POINT(410.891998 860.662842) 34658 POINT(859.297668 719.600952) 34659 POINT(6.31730223 573.391479) 34660 POINT(482.115723 650.414185) 34661 POINT(901.19165 138.926285) 34662 POINT(466.617004 684.250549) 34663 POINT(13.5192108 521.464905) 34664 POINT(717.732361 355.902527) 34665 POINT(790.807434 418.948975) 34666 POINT(333.145325 665.115662) 34667 POINT(14.131423 501.559235) 34668 POINT(526.391418 672.637329) 34669 POINT(495.782379 496.791962) 34670 POINT(920.30011 827.737183) 34671 POINT(460.196777 990.927979) 34672 POINT(253.103821 576.846436) 34673 POINT(899.897217 255.126358) 34674 POINT(458.103912 190.508743) 34675 POINT(180.981125 215.901764) 34676 POINT(258.865479 465.96283) 34677 POINT(750.534973 828.48053) 34678 POINT(362.5737 696.049316) 34679 POINT(663.602234 547.204224) 34680 POINT(234.625122 363.03891) 34681 POINT(320.511566 555.109375) 34682 POINT(451.066162 630.332153) 34683 POINT(885.101257 666.036072) 34684 POINT(108.572029 218.322311) 34685 POINT(267.420471 863.709656) 34686 POINT(533.855652 406.201935) 34687 POINT(805.727539 825.420654) 34688 POINT(88.4001846 82.9257355) 34689 POINT(205.049026 291.056244) 34690 POINT(676.043457 252.327087) 34691 POINT(294.342407 94.7812119) 34692 POINT(299.150604 594.562805) 34693 POINT(490.680969 155.737427) 34694 POINT(795.966125 404.296448) 34695 POINT(824.22821 820.446228) 34696 POINT(552.428955 911.611206) 34697 POINT(127.60733 23.5165672) 34698 POINT(294.591522 981.485168) 34699 POINT(751.223572 660.755737) 34700 POINT(14.2410145 959.30249) 34701 POINT(483.926514 991.45105) 34702 POINT(94.9617538 851.477905) 34703 POINT(365.987671 461.668793) 34704 POINT(926.383362 610.628784) 34705 POINT(736.721252 990.749939) 34706 POINT(811.561279 433.252228) 34707 POINT(198.328964 927.24762) 34708 POINT(80.2730637 214.593185) 34709 POINT(564.958862 762.453674) 34710 POINT(766.560608 570.987671) 34711 POINT(243.917236 509.121826) 34712 POINT(442.293732 705.722351) 34713 POINT(634.967896 895.370605) 34714 POINT(223.205048 322.282013) 34715 POINT(882.330566 190.011917) 34716 POINT(186.182693 381.296631) 34717 POINT(849.103577 332.306488) 34718 POINT(516.18811 747.718872) 34719 POINT(260.27124 868.617432) 34720 POINT(400.677307 316.543762) 34721 POINT(161.220749 48.4754753) 34722 POINT(724.670776 563.144958) 34723 POINT(824.917297 866.65332) 34724 POINT(909.58551 303.080078) 34725 POINT(1.83170569 185.081451) 34726 POINT(155.676529 821.680542) 34727 POINT(509.760376 673.542114) 34728 POINT(966.639771 142.173141) 34729 POINT(1.33423364 781.411133) 34730 POINT(183.913986 629.398987) 34731 POINT(798.911926 420.249115) 34732 POINT(68.9392395 101.937912) 34733 POINT(751.452148 390.381561) 34734 POINT(928.647766 266.776733) 34735 POINT(525.743103 730.971252) 34736 POINT(770.481201 356.368378) 34737 POINT(803.03949 285.33606) 34738 POINT(839.059753 987.428467) 34739 POINT(797.857605 539.869324) 34740 POINT(171.225967 264.145325) 34741 POINT(962.656311 669.984497) 34742 POINT(506.612183 196.306442) 34743 POINT(882.777161 179.758682) 34744 POINT(707.337708 416.449646) 34745 POINT(220.83287 288.735016) 34746 POINT(926.245667 671.457092) 34747 POINT(237.354858 550.649841) 34748 POINT(974.685913 485.550476) 34749 POINT(321.69574 101.266296) 34750 POINT(987.813538 986.591614) 34751 POINT(118.812195 458.257935) 34752 POINT(580.390076 39.7255707) 34753 POINT(66.638298 233.040741) 34754 POINT(194.976929 316.142059) 34755 POINT(376.429901 276.07547) 34756 POINT(436.133606 655.111145) 34757 POINT(933.974609 242.560577) 34758 POINT(480.852051 360.138245) 34759 POINT(90.3045502 929.330566) 34760 POINT(482.170013 851.367065) 34761 POINT(492.024963 856.520264) 34762 POINT(518.024963 213.15416) 34763 POINT(697.21637 825.128052) 34764 POINT(562.387695 605.582336) 34765 POINT(384.837769 715.610657) 34766 POINT(105.116264 619.737854) 34767 POINT(123.535995 760.298645) 34768 POINT(58.4966965 457.635284) 34769 POINT(377.761261 346.58139) 34770 POINT(52.9006233 208.151657) 34771 POINT(231.231186 26.9570827) 34772 POINT(935.345947 510.261108) 34773 POINT(64.3360138 530.269775) 34774 POINT(490.05545 974.914795) 34775 POINT(575.416992 905.497314) 34776 POINT(49.5730476 948.36969) 34777 POINT(356.486603 470.655975) 34778 POINT(661.933411 504.553131) 34779 POINT(70.5258179 485.728516) 34780 POINT(930.236633 54.6944771) 34781 POINT(806.749634 686.60614) 34782 POINT(105.323631 152.126389) 34783 POINT(667.056396 289.08371) 34784 POINT(752.774536 82.6427841) 34785 POINT(144.281906 345.81601) 34786 POINT(547.987915 690.515991) 34787 POINT(551.994324 478.307648) 34788 POINT(896.577148 762.257385) 34789 POINT(145.651352 839.569458) 34790 POINT(3.82618475 730.121399) 34791 POINT(703.378113 535.758423) 34792 POINT(301.660889 661.487366) 34793 POINT(106.920464 757.27887) 34794 POINT(312.848816 555.526733) 34795 POINT(853.119324 167.433182) 34796 POINT(821.37146 102.506149) 34797 POINT(735.290283 61.3738937) 34798 POINT(809.700806 891.863525) 34799 POINT(42.0667305 847.055603) 34800 POINT(905.742126 841.603088) 34801 POINT(236.5802 185.958206) 34802 POINT(895.30542 513.009399) 34803 POINT(987.437561 853.037964) 34804 POINT(244.077759 261.214294) 34805 POINT(739.077698 986.755432) 34806 POINT(33.2636147 534.426453) 34807 POINT(425.122955 870.858765) 34808 POINT(445.530365 393.947876) 34809 POINT(964.798523 955.216003) 34810 POINT(95.9671021 695.358215) 34811 POINT(438.00531 234.373001) 34812 POINT(442.877228 700.996582) 34813 POINT(235.956589 876.258606) 34814 POINT(44.9519615 928.265747) 34815 POINT(536.309998 661.797241) 34816 POINT(67.4084854 161.121445) 34817 POINT(487.451141 156.973007) 34818 POINT(645.841309 37.8008461) 34819 POINT(917.146057 905.591187) 34820 POINT(161.775406 891.427917) 34821 POINT(945.434875 382.709167) 34822 POINT(290.294952 367.274841) 34823 POINT(897.7724 80.1807098) 34824 POINT(672.846985 217.445847) 34825 POINT(527.536194 267.333252) 34826 POINT(25.7045784 917.498474) 34827 POINT(990.760986 557.446411) 34828 POINT(398.067169 837.562805) 34829 POINT(822.065491 56.0293007) 34830 POINT(577.943237 501.030823) 34831 POINT(469.10849 227.127258) 34832 POINT(446.500122 485.650604) 34833 POINT(711.544434 611.878784) 34834 POINT(493.298553 164.289047) 34835 POINT(555.483704 607.764771) 34836 POINT(19.6970387 285.762268) 34837 POINT(320.152679 871.55127) 34838 POINT(522.788818 290.636627) 34839 POINT(562.177856 763.54187) 34840 POINT(817.712708 814.067749) 34841 POINT(985.197571 90.7910004) 34842 POINT(25.3818645 509.479492) 34843 POINT(406.960541 233.344131) 34844 POINT(232.045349 735.733765) 34845 POINT(379.46698 316.985718) 34846 POINT(476.206848 779.565247) 34847 POINT(934.924561 210.600952) 34848 POINT(499.968933 768.243591) 34849 POINT(744.335266 823.955444) 34850 POINT(131.669235 789.093933) 34851 POINT(387.537292 25.9378834) 34852 POINT(163.672287 637.691284) 34853 POINT(432.749786 823.201355) 34854 POINT(525.44989 120.913078) 34855 POINT(177.498062 579.399719) 34856 POINT(502.81427 640.873169) 34857 POINT(606.732239 626.205017) 34858 POINT(747.688965 467.983582) 34859 POINT(851.634399 744.979797) 34860 POINT(90.5505676 403.540619) 34861 POINT(985.788513 573.971436) 34862 POINT(394.226501 552.467896) 34863 POINT(753.952576 927.41803) 34864 POINT(260.781647 433.963531) 34865 POINT(0.626890123 472.859161) 34866 POINT(663.590393 301.204437) 34867 POINT(437.090942 889.705505) 34868 POINT(68.3180542 110.997482) 34869 POINT(570.843811 979.844238) 34870 POINT(326.495026 260.998199) 34871 POINT(312.806458 689.461975) 34872 POINT(273.853424 817.132507) 34873 POINT(995.742737 365.714386) 34874 POINT(195.931747 199.069656) 34875 POINT(380.759491 63.327404) 34876 POINT(992.081787 29.5434303) 34877 POINT(124.210556 351.292999) 34878 POINT(285.504059 327.169891) 34879 POINT(129.742401 880.736145) 34880 POINT(903.990234 315.948944) 34881 POINT(52.5835876 259.642883) 34882 POINT(59.4809227 612.282288) 34883 POINT(866.632385 351.918915) 34884 POINT(353.304352 347.12674) 34885 POINT(88.6925201 556.302124) 34886 POINT(50.1105995 192.496735) 34887 POINT(795.730347 519.703796) 34888 POINT(222.257889 234.220535) 34889 POINT(615.783936 959.955261) 34890 POINT(646.059204 3.55493832) 34891 POINT(144.781174 190.664536) 34892 POINT(213.304398 726.514038) 34893 POINT(791.773682 697.54541) 34894 POINT(40.407444 339.730713) 34895 POINT(513.853699 868.39093) 34896 POINT(51.0837936 64.1358948) 34897 POINT(727.295715 150.683487) 34898 POINT(167.459839 222.122375) 34899 POINT(409.390289 440.131958) 34900 POINT(162.901535 570.199097) 34901 POINT(900.266235 94.3131332) 34902 POINT(954.690857 128.098572) 34903 POINT(618.120789 337.790375) 34904 POINT(596.173889 388.166656) 34905 POINT(85.1931152 963.940979) 34906 POINT(369.472656 847.553528) 34907 POINT(674.166138 645.222107) 34908 POINT(287.73819 122.77507) 34909 POINT(2.21662164 104.343697) 34910 POINT(549.799744 974.79071) 34911 POINT(177.541901 156.022186) 34912 POINT(312.621643 526.636169) 34913 POINT(223.875595 750.514954) 34914 POINT(774.045715 819.269104) 34915 POINT(133.402908 699.454041) 34916 POINT(408.808533 789.676147) 34917 POINT(616.851746 570.716309) 34918 POINT(146.857803 324.109131) 34919 POINT(798.754272 146.906723) 34920 POINT(899.739929 434.861053) 34921 POINT(741.451782 961.848572) 34922 POINT(656.615601 918.170898) 34923 POINT(746.986572 387.240234) 34924 POINT(117.726234 301.195435) 34925 POINT(183.345444 928.960999) 34926 POINT(694.449646 95.6796646) 34927 POINT(990.47522 216.606461) 34928 POINT(569.147583 603.771606) 34929 POINT(750.084534 303.567902) 34930 POINT(215.637314 916.789185) 34931 POINT(37.6178284 526.809082) 34932 POINT(376.262512 600.684509) 34933 POINT(829.187256 259.542389) 34934 POINT(471.262268 553.136169) 34935 POINT(703.065308 395.993042) 34936 POINT(980.641418 967.917419) 34937 POINT(975.078369 570.711182) 34938 POINT(641.345154 464.354614) 34939 POINT(338.535767 686.43042) 34940 POINT(699.685059 585.841858) 34941 POINT(968.934509 820.872742) 34942 POINT(760.223083 784.68158) 34943 POINT(906.482849 536.395569) 34944 POINT(490.385345 74.7647934) 34945 POINT(178.491486 824.815308) 34946 POINT(40.7757339 23.2004776) 34947 POINT(980.023193 696.600708) 34948 POINT(193.42984 81.9954224) 34949 POINT(34.1286812 848.011414) 34950 POINT(76.1660233 236.932846) 34951 POINT(319.910248 6.38661909) 34952 POINT(605.947266 19.1915417) 34953 POINT(833.052246 823.017151) 34954 POINT(426.084595 422.901733) 34955 POINT(152.974792 430.843842) 34956 POINT(962.636353 676.286621) 34957 POINT(885.158081 652.206787) 34958 POINT(779.056213 993.455994) 34959 POINT(656.334595 987.261841) 34960 POINT(792.715698 897.08606) 34961 POINT(222.162628 859.324646) 34962 POINT(223.187439 848.557312) 34963 POINT(437.809906 577.783936) 34964 POINT(664.078064 291.660889) 34965 POINT(705.847046 306.436157) 34966 POINT(154.805496 739.396912) 34967 POINT(995.362549 214.869934) 34968 POINT(26.226944 781.956482) 34969 POINT(391.769073 428.214996) 34970 POINT(7.75727224 329.621704) 34971 POINT(237.010391 377.14624) 34972 POINT(220.019363 629.572021) 34973 POINT(431.553741 452.100708) 34974 POINT(295.70932 603.615295) 34975 POINT(147.551651 265.448975) 34976 POINT(734.934143 478.456543) 34977 POINT(629.882385 370.71579) 34978 POINT(425.608856 45.6918831) 34979 POINT(599.56543 542.342834) 34980 POINT(963.529419 860.305908) 34981 POINT(11.5573835 12.0318041) 34982 POINT(362.536407 319.726318) 34983 POINT(123.539078 733.125) 34984 POINT(27.9494114 556.733887) 34985 POINT(399.527527 413.124878) 34986 POINT(504.501556 15.6563215) 34987 POINT(175.60437 842.298706) 34988 POINT(734.785339 189.830338) 34989 POINT(56.516449 844.96405) 34990 POINT(60.3025627 397.458374) 34991 POINT(71.2486343 896.729858) 34992 POINT(352.290497 421.507721) 34993 POINT(900.905457 258.526031) 34994 POINT(814.391968 986.611938) 34995 POINT(289.498535 65.1747818) 34996 POINT(697.895264 182.076813) 34997 POINT(671.778687 626.632324) 34998 POINT(409.759857 245.730896) 34999 POINT(294.457977 723.593933) 35000 POINT(974.162903 419.781433) 35001 POINT(688.546875 641.256165) 35002 POINT(183.167328 588.955322) 35003 POINT(369.713928 336.644684) 35004 POINT(897.7724 965.56073) 35005 POINT(527.324463 492.648102) 35006 POINT(146.632339 438.860535) 35007 POINT(216.006821 307.970184) 35008 POINT(928.809265 241.09697) 35009 POINT(19.2405567 4.48039103) 35010 POINT(924.891357 74.0547485) 35011 POINT(223.695312 15.3803473) 35012 POINT(826.592102 703.246155) 35013 POINT(465.125061 228.3125) 35014 POINT(330.629578 567.300415) 35015 POINT(398.927399 91.7458801) 35016 POINT(333.456268 114.236732) 35017 POINT(856.516296 711.031311) 35018 POINT(787.593445 200.908615) 35019 POINT(896.063477 638.403687) 35020 POINT(519.362244 954.56189) 35021 POINT(194.696075 40.5209312) 35022 POINT(996.269348 364.319641) 35023 POINT(988.778809 465.098236) 35024 POINT(207.891617 554.279602) 35025 POINT(707.464844 947.668823) 35026 POINT(77.6324539 88.1973648) 35027 POINT(98.4066696 638.960205) 35028 POINT(948.138733 808.473694) 35029 POINT(877.628479 196.916702) 35030 POINT(927.540466 50.0288544) 35031 POINT(190.465744 594.75) 35032 POINT(197.201172 663.917297) 35033 POINT(717.674988 732.916077) 35034 POINT(667.666687 98.1344681) 35035 POINT(448.947571 809.57074) 35036 POINT(734.417725 916.521301) 35037 POINT(651.877747 67.4492722) 35038 POINT(888.437622 84.1583862) 35039 POINT(642.824097 577.481384) 35040 POINT(841.198242 242.937027) 35041 POINT(700.070007 688.629333) 35042 POINT(845.260864 68.5230103) 35043 POINT(10.3669128 732.917725) 35044 POINT(449.234467 804.723511) 35045 POINT(396.592377 353.49353) 35046 POINT(891.398438 768.994934) 35047 POINT(804.253052 266.55484) 35048 POINT(285.075958 209.776993) 35049 POINT(23.4238605 485.455811) 35050 POINT(209.161743 459.424194) 35051 POINT(864.065186 653.222229) 35052 POINT(20.5019932 93.260582) 35053 POINT(288.26355 539.686401) 35054 POINT(335.675079 393.883148) 35055 POINT(712.676453 368.708344) 35056 POINT(575.813904 89.0610275) 35057 POINT(536.339355 122.337776) 35058 POINT(70.2732315 230.843796) 35059 POINT(709.143555 510.768005) 35060 POINT(17.1188412 502.837616) 35061 POINT(948.976624 853.637024) 35062 POINT(97.6711884 862.698792) 35063 POINT(733.113708 659.374023) 35064 POINT(938.870605 569.018311) 35065 POINT(952.468323 450.218048) 35066 POINT(64.362648 517.842957) 35067 POINT(724.385132 112.228432) 35068 POINT(829.378723 776.637024) 35069 POINT(237.545792 268.666443) 35070 POINT(905.275024 995.698669) 35071 POINT(156.141891 413.778015) 35072 POINT(679.692749 382.694611) 35073 POINT(372.756409 600.10321) 35074 POINT(933.529053 419.479706) 35075 POINT(181.518356 659.453369) 35076 POINT(15.2124472 896.765503) 35077 POINT(984.313782 334.733856) 35078 POINT(578.220886 947.15509) 35079 POINT(760.530273 401.578003) 35080 POINT(604.572632 16.8614197) 35081 POINT(870.492371 225.641479) 35082 POINT(683.465271 467.986877) 35083 POINT(548.042847 109.371422) 35084 POINT(331.793549 224.101547) 35085 POINT(220.396851 872.70459) 35086 POINT(966.509155 430.179443) 35087 POINT(703.328369 42.6944733) 35088 POINT(105.385193 2.52887249) 35089 POINT(314.944519 720.370239) 35090 POINT(573.544128 594.59375) 35091 POINT(67.8999023 87.6644821) 35092 POINT(222.039108 440.45047) 35093 POINT(702.156921 817.116943) 35094 POINT(668.917297 690.142395) 35095 POINT(350.688843 571.992188) 35096 POINT(302.735016 790.969116) 35097 POINT(859.363953 819.791077) 35098 POINT(646.76123 658.39624) 35099 POINT(58.2683182 328.870087) 35100 POINT(775.536743 421.912659) 35101 POINT(781.682373 742.603882) 35102 POINT(863.631653 418.096771) 35103 POINT(912.706543 310.468048) 35104 POINT(892.046143 469.156128) 35105 POINT(769.137756 248.427032) 35106 POINT(756.564575 854.683472) 35107 POINT(410.766968 865.568604) 35108 POINT(433.42923 422.37149) 35109 POINT(924.057861 859.125427) 35110 POINT(833.032837 45.6084404) 35111 POINT(995.555115 390.601288) 35112 POINT(587.12439 818.528137) 35113 POINT(515.871399 322.019409) 35114 POINT(297.602905 569.125305) 35115 POINT(35.3453522 439.310944) 35116 POINT(956.787476 196.007019) 35117 POINT(422.205566 511.168396) 35118 POINT(14.6645536 112.402771) 35119 POINT(434.201843 533.522888) 35120 POINT(305.724121 470.979401) 35121 POINT(313.183228 665.019897) 35122 POINT(97.4232025 494.228638) 35123 POINT(235.143463 855.943298) 35124 POINT(428.004303 937.741943) 35125 POINT(110.077682 466.070282) 35126 POINT(660.418396 648.231995) 35127 POINT(18.9825344 725.659851) 35128 POINT(491.651123 165.98674) 35129 POINT(519.991394 453.534271) 35130 POINT(176.149902 74.4677658) 35131 POINT(250.602036 257.985168) 35132 POINT(304.738708 170.525879) 35133 POINT(124.983002 526.622009) 35134 POINT(435.964508 760.369995) 35135 POINT(979.317688 892.510742) 35136 POINT(217.931778 362.778046) 35137 POINT(587.074463 843.874084) 35138 POINT(331.175781 596.495178) 35139 POINT(461.104584 536.716797) 35140 POINT(795.943054 958.364258) 35141 POINT(19.8275776 253.107224) 35142 POINT(542.460754 868.14093) 35143 POINT(337.850708 917.209229) 35144 POINT(965.58075 711.448364) 35145 POINT(472.687897 496.87262) 35146 POINT(753.896484 490.839325) 35147 POINT(982.432434 356.632233) 35148 POINT(79.5039291 73.9980469) 35149 POINT(776.051331 829.934021) 35150 POINT(192.570587 275.887726) 35151 POINT(498.29007 601.530823) 35152 POINT(222.49791 136.929733) 35153 POINT(703.016113 358.12085) 35154 POINT(135.519775 661.495422) 35155 POINT(648.314087 514.914612) 35156 POINT(131.028168 0.140840575) 35157 POINT(518.041626 362.014832) 35158 POINT(522.821167 25.7865524) 35159 POINT(680.235962 417.00058) 35160 POINT(297.026062 539.721802) 35161 POINT(503.242737 104.280632) 35162 POINT(968.980591 909.815552) 35163 POINT(614.349731 608.589417) 35164 POINT(183.30484 893.178955) 35165 POINT(979.805481 136.051102) 35166 POINT(274.333466 221.914246) 35167 POINT(64.2734146 143.756104) 35168 POINT(990.700317 367.288513) 35169 POINT(675.019775 915.630432) 35170 POINT(3.99352741 769.104492) 35171 POINT(72.5929337 232.012268) 35172 POINT(85.9750443 888.241516) 35173 POINT(24.6805553 631.879517) 35174 POINT(823.954834 266.973907) 35175 POINT(760.612549 744.824219) 35176 POINT(24.720953 560.027588) 35177 POINT(146.116837 485.000153) 35178 POINT(62.2736664 316.326843) 35179 POINT(815.070129 177.347641) 35180 POINT(84.9403305 374.546051) 35181 POINT(768.868042 319.03479) 35182 POINT(397.825836 703.085632) 35183 POINT(964.557495 73.4656601) 35184 POINT(364.680267 625.71936) 35185 POINT(368.031586 423.25177) 35186 POINT(669.957031 777.333008) 35187 POINT(634.519165 360.694275) 35188 POINT(791.041138 119.926704) 35189 POINT(109.566498 523.686584) 35190 POINT(549.412292 598.048706) 35191 POINT(912.085327 261.2453) 35192 POINT(838.075378 846.360352) 35193 POINT(987.343323 471.461243) 35194 POINT(214.252274 992.008911) 35195 POINT(800.628662 446.513855) 35196 POINT(357.536713 373.450317) 35197 POINT(708.489868 901.105957) 35198 POINT(234.034042 668.480591) 35199 POINT(498.815826 884.483582) 35200 POINT(689.137878 871.288818) 35201 POINT(466.590088 179.958374) 35202 POINT(581.354065 55.7562828) 35203 POINT(100.058899 393.01947) 35204 POINT(135.917053 325.027496) 35205 POINT(731.5495 298.817627) 35206 POINT(61.9214401 581.240356) 35207 POINT(675.653809 256.745514) 35208 POINT(965.511414 200.507706) 35209 POINT(580.451355 964.381104) 35210 POINT(482.650513 703.710144) 35211 POINT(178.525757 391.179291) 35212 POINT(329.579254 550.924316) 35213 POINT(895.482178 45.5951195) 35214 POINT(561.830933 124.541428) 35215 POINT(984.385071 445.023743) 35216 POINT(881.309082 312.111847) 35217 POINT(963.016479 698.899963) 35218 POINT(926.255005 254.099091) 35219 POINT(173.228867 919.992615) 35220 POINT(414.898376 324.08136) 35221 POINT(622.205017 951.453857) 35222 POINT(537.25116 190.161057) 35223 POINT(846.507141 857.271362) 35224 POINT(551.080872 437.72525) 35225 POINT(131.921631 256.769287) 35226 POINT(540.893921 177.154831) 35227 POINT(873.905273 890.694031) 35228 POINT(349.224884 918.146057) 35229 POINT(351.67923 553.799316) 35230 POINT(847.230164 758.151733) 35231 POINT(468.576111 498.941284) 35232 POINT(739.223572 239.855057) 35233 POINT(665.135132 658.361145) 35234 POINT(709.181763 605.977478) 35235 POINT(900.789856 102.542038) 35236 POINT(835.339355 284.124573) 35237 POINT(314.062531 394.8862) 35238 POINT(193.856079 325.461609) 35239 POINT(477.350769 246.188309) 35240 POINT(519.363708 895.067993) 35241 POINT(456.173004 736.838806) 35242 POINT(717.314575 355.762634) 35243 POINT(637.763672 482.848236) 35244 POINT(161.89624 728.559631) 35245 POINT(311.933167 365.744843) 35246 POINT(748.421387 469.869812) 35247 POINT(648.015686 733.389771) 35248 POINT(988.244263 336.896179) 35249 POINT(223.526123 481.625427) 35250 POINT(378.213165 267.796356) 35251 POINT(908.971619 833.903748) 35252 POINT(389.387329 472.140564) 35253 POINT(313.365601 401.731171) 35254 POINT(698.302612 490.642883) 35255 POINT(338.763733 702.641541) 35256 POINT(428.648224 662.377808) 35257 POINT(700.080017 469.824127) 35258 POINT(835.147339 944.624634) 35259 POINT(637.190491 59.4588852) 35260 POINT(901.156799 217.651566) 35261 POINT(906.639465 64.8564835) 35262 POINT(46.5870018 317.318695) 35263 POINT(495.02002 912.885132) 35264 POINT(565.887695 956.139648) 35265 POINT(178.308441 45.7464523) 35266 POINT(502.87207 192.803375) 35267 POINT(972.228943 93.4118042) 35268 POINT(588.998596 106.164726) 35269 POINT(917.363281 798.053223) 35270 POINT(246.476273 128.024033) 35271 POINT(336.587952 956.322693) 35272 POINT(812.392151 35.9271278) 35273 POINT(337.022278 158.704712) 35274 POINT(353.307526 739.635193) 35275 POINT(627.640137 3.36355448) 35276 POINT(192.867584 690.38385) 35277 POINT(738.793762 886.53302) 35278 POINT(502.500183 368.732178) 35279 POINT(90.9992218 579.775574) 35280 POINT(644.925781 873.488525) 35281 POINT(525.454834 19.2247295) 35282 POINT(2.79346371 40.2992897) 35283 POINT(414.029114 991.694641) 35284 POINT(564.235718 804.04541) 35285 POINT(176.13237 411.393402) 35286 POINT(820.570007 114.866638) 35287 POINT(386.348236 358.643127) 35288 POINT(508.965088 694.719238) 35289 POINT(930.464661 983.835388) 35290 POINT(307.949768 241.780518) 35291 POINT(207.234924 266.819855) 35292 POINT(872.624573 456.282959) 35293 POINT(855.580017 730.628967) 35294 POINT(138.903809 966.657288) 35295 POINT(166.893097 821.117798) 35296 POINT(894.769104 12.9728241) 35297 POINT(302.637604 328.590912) 35298 POINT(427.174103 620.004272) 35299 POINT(839.67041 7.27793026) 35300 POINT(24.8455372 129.861115) 35301 POINT(498.931427 272.704071) 35302 POINT(121.854279 919.655334) 35303 POINT(244.703629 370.312958) 35304 POINT(479.672058 99.4444504) 35305 POINT(167.068771 821.482544) 35306 POINT(554.808044 56.5829773) 35307 POINT(653.09906 891.311401) 35308 POINT(816.478149 112.185341) 35309 POINT(614.490051 677.842285) 35310 POINT(448.67099 901.812927) 35311 POINT(850.638184 601.959412) 35312 POINT(481.131012 644.533752) 35313 POINT(694.606018 253.895386) 35314 POINT(785.002991 371.580688) 35315 POINT(701.131958 914.593811) 35316 POINT(585.119202 737.994019) 35317 POINT(405.085571 572.189941) 35318 POINT(679.227783 918.534485) 35319 POINT(797.930176 865.326965) 35320 POINT(615.058655 614.092529) 35321 POINT(659.33606 341.266968) 35322 POINT(812.317017 578.702148) 35323 POINT(839.724426 468.76001) 35324 POINT(384.932831 672.638855) 35325 POINT(943.973999 510.00882) 35326 POINT(28.7467155 997.104736) 35327 POINT(121.666031 165.02774) 35328 POINT(303.973328 554.464355) 35329 POINT(158.094559 653.103882) 35330 POINT(426.073639 379.312073) 35331 POINT(193.954926 903.395874) 35332 POINT(952.032776 614.85968) 35333 POINT(919.402954 869.055481) 35334 POINT(633.549927 371.901215) 35335 POINT(307.434906 751.356384) 35336 POINT(29.4970665 850.22168) 35337 POINT(17.7814999 482.512451) 35338 POINT(5.51463699 461.691742) 35339 POINT(739.366943 44.1440201) 35340 POINT(980.229187 47.9607086) 35341 POINT(498.622223 734.302551) 35342 POINT(139.870682 601.796204) 35343 POINT(472.43277 996.824768) 35344 POINT(973.733032 688.506836) 35345 POINT(66.2627182 815.399719) 35346 POINT(472.776947 421.938232) 35347 POINT(986.154785 389.580963) 35348 POINT(476.669464 918.293091) 35349 POINT(112.121956 55.1585197) 35350 POINT(697.754333 561.154846) 35351 POINT(112.300774 406.546692) 35352 POINT(344.053558 733.883545) 35353 POINT(692.639282 809.50116) 35354 POINT(410.726013 372.913116) 35355 POINT(4.47504568 959.523071) 35356 POINT(216.906357 369.95166) 35357 POINT(208.87851 611.342468) 35358 POINT(692.081543 495.836121) 35359 POINT(276.979919 860.128418) 35360 POINT(25.8303261 767.605042) 35361 POINT(372.665924 443.391663) 35362 POINT(302.675934 557.64679) 35363 POINT(279.164948 17.4166279) 35364 POINT(568.922852 914.590759) 35365 POINT(283.39035 572.569885) 35366 POINT(792.74353 585.602112) 35367 POINT(288.863251 432.722412) 35368 POINT(457.637207 795.204468) 35369 POINT(85.0992355 245.634888) 35370 POINT(101.028412 533.604614) 35371 POINT(132.148407 139.468842) 35372 POINT(205.646149 665.266235) 35373 POINT(725.284424 687.205383) 35374 POINT(156.002197 704.342285) 35375 POINT(366.526367 392.89975) 35376 POINT(873.458069 376.314636) 35377 POINT(794.757751 264.228882) 35378 POINT(581.861267 744.220947) 35379 POINT(700.811584 353.175537) 35380 POINT(475.481689 513.209412) 35381 POINT(292.274963 385.039551) 35382 POINT(859.064941 319.519135) 35383 POINT(767.317993 224.997421) 35384 POINT(306.429749 180.623032) 35385 POINT(428.074493 686.502686) 35386 POINT(192.497711 544.107666) 35387 POINT(710.628723 317.902405) 35388 POINT(450.398224 376.439453) 35389 POINT(257.255005 329.345062) 35390 POINT(899.906555 722.24115) 35391 POINT(312.091675 773.597168) 35392 POINT(998.652222 23.868187) 35393 POINT(16.9233475 769.621399) 35394 POINT(349.088318 994.343201) 35395 POINT(530.319885 770.175476) 35396 POINT(921.095642 899.120544) 35397 POINT(530.303101 203.369064) 35398 POINT(344.368439 29.3694553) 35399 POINT(405.35968 857.791809) 35400 POINT(111.596748 887.783875) 35401 POINT(936.500854 991.854797) 35402 POINT(391.235901 994.248535) 35403 POINT(247.821411 706.337524) 35404 POINT(858.78656 230.569565) 35405 POINT(306.385468 766.417847) 35406 POINT(452.567413 649.064331) 35407 POINT(914.150696 952.895813) 35408 POINT(881.643616 677.8974) 35409 POINT(413.044128 584.76709) 35410 POINT(650.695435 566.055908) 35411 POINT(755.351135 25.2261066) 35412 POINT(113.122543 762.821411) 35413 POINT(39.5350952 464.689972) 35414 POINT(866.64447 151.178146) 35415 POINT(518.852173 787.255188) 35416 POINT(615.280151 723.08783) 35417 POINT(727.166809 856.482727) 35418 POINT(341.179932 358.877075) 35419 POINT(81.8484039 603.530273) 35420 POINT(365.797272 955.657288) 35421 POINT(794.289551 132.014221) 35422 POINT(191.885452 733.900574) 35423 POINT(399.319183 951.814392) 35424 POINT(168.491104 270.811218) 35425 POINT(788.59375 966.185242) 35426 POINT(226.303299 688.377319) 35427 POINT(461.071533 26.4814625) 35428 POINT(609.356567 628.002563) 35429 POINT(275.167908 565.648621) 35430 POINT(553.244141 728.062439) 35431 POINT(369.53006 870.095642) 35432 POINT(804.871826 481.898071) 35433 POINT(8.0755167 60.0056419) 35434 POINT(272.691895 678.560913) 35435 POINT(873.632629 446.535065) 35436 POINT(670.74762 344.601044) 35437 POINT(84.9687881 12.2967501) 35438 POINT(959.299866 830.504761) 35439 POINT(824.071167 726.24707) 35440 POINT(576.995911 678.8302) 35441 POINT(642.265259 928.455627) 35442 POINT(745.295654 322.074707) 35443 POINT(51.2520409 292.699249) 35444 POINT(549.138062 776.87085) 35445 POINT(12.67027 849.497375) 35446 POINT(555.680176 7.91859818) 35447 POINT(109.731178 198.815811) 35448 POINT(625.568604 851.40271) 35449 POINT(37.3371277 595.563049) 35450 POINT(451.930176 525.436401) 35451 POINT(181.51326 803.166687) 35452 POINT(587.536194 166.848785) 35453 POINT(401.713196 997.544312) 35454 POINT(99.97995 262.562683) 35455 POINT(185.486801 97.9026566) 35456 POINT(40.8970261 673.677307) 35457 POINT(447.129578 499.864594) 35458 POINT(94.081192 455.592957) 35459 POINT(801.399353 603.906006) 35460 POINT(747.744141 273.129547) 35461 POINT(899.448914 847.091797) 35462 POINT(240.208969 701.264648) 35463 POINT(684.160583 253.354294) 35464 POINT(181.208435 536.133728) 35465 POINT(351.593231 177.413483) 35466 POINT(931.002197 754.215942) 35467 POINT(617.8927 805.868835) 35468 POINT(508.174347 427.705597) 35469 POINT(138.533051 737.6026) 35470 POINT(428.797791 599.112061) 35471 POINT(739.032288 251.649231) 35472 POINT(592.348145 346.924713) 35473 POINT(451.325317 606.956787) 35474 POINT(214.137054 436.140045) 35475 POINT(243.918442 343.468719) 35476 POINT(154.061218 582.614197) 35477 POINT(151.046066 271.79422) 35478 POINT(554.194519 399.239838) 35479 POINT(188.685684 869.134033) 35480 POINT(923.387756 106.141754) 35481 POINT(763.971985 627.439941) 35482 POINT(98.8982925 538.350891) 35483 POINT(87.9142227 526.988586) 35484 POINT(479.599121 475.297913) 35485 POINT(566.122192 1.24052179) 35486 POINT(622.082764 840.120056) 35487 POINT(23.3705158 299.265594) 35488 POINT(482.675598 506.996948) 35489 POINT(498.279419 87.9937668) 35490 POINT(990.832947 835.928345) 35491 POINT(885.305847 31.5724277) 35492 POINT(171.537933 291.584747) 35493 POINT(891.868164 268.2836) 35494 POINT(68.2527847 651.760254) 35495 POINT(186.162781 521.516541) 35496 POINT(328.860138 67.8276749) 35497 POINT(631.57489 640.561035) 35498 POINT(533.206604 191.351547) 35499 POINT(610.17157 795.457581) 35500 POINT(393.76709 455.19397) 35501 POINT(432.352325 239.413589) 35502 POINT(535.156555 512.21698) 35503 POINT(92.2029953 409.598663) 35504 POINT(41.4178391 548.830505) 35505 POINT(366.459656 335.318085) 35506 POINT(693.037109 353.572357) 35507 POINT(755.375 550.104431) 35508 POINT(342.420044 422.674286) 35509 POINT(640.446045 415.271606) 35510 POINT(194.17807 205.830322) 35511 POINT(479.294586 426.662476) 35512 POINT(565.216492 657.429932) 35513 POINT(892.494263 429.048553) 35514 POINT(652.609558 273.262665) 35515 POINT(219.449127 954.878906) 35516 POINT(791.029663 612.680298) 35517 POINT(957.298523 152.432724) 35518 POINT(945.650269 174.586014) 35519 POINT(453.143341 5.127141) 35520 POINT(773.645874 296.189301) 35521 POINT(128.657913 66.6243896) 35522 POINT(463.503052 250.642654) 35523 POINT(288.511749 558.94458) 35524 POINT(895.266235 848.49353) 35525 POINT(439.225922 982.124817) 35526 POINT(78.6500092 904.011047) 35527 POINT(840.519165 958.798645) 35528 POINT(644.845947 857.168518) 35529 POINT(372.362762 745.751648) 35530 POINT(670.161377 482.295685) 35531 POINT(451.493866 63.0206261) 35532 POINT(776.78949 942.69458) 35533 POINT(722.796387 761.039856) 35534 POINT(222.601837 835.00946) 35535 POINT(213.621689 524.931519) 35536 POINT(195.565063 316.63681) 35537 POINT(30.8049641 725.13623) 35538 POINT(360.037994 823.37616) 35539 POINT(36.962307 603.661621) 35540 POINT(655.745239 302.891968) 35541 POINT(128.89212 939.393555) 35542 POINT(672.72229 743.044189) 35543 POINT(198.930252 883.890869) 35544 POINT(567.178345 134.044846) 35545 POINT(860.433228 786.226624) 35546 POINT(347.347137 831.617065) 35547 POINT(909.818115 32.7154961) 35548 POINT(551.438477 687.414856) 35549 POINT(956.529907 481.389709) 35550 POINT(421.335541 776.071167) 35551 POINT(933.820557 254.070419) 35552 POINT(908.398254 209.164032) 35553 POINT(390.316345 8.68931866) 35554 POINT(447.452209 409.542603) 35555 POINT(716.151367 414.61618) 35556 POINT(820.714111 489.875) 35557 POINT(267.220764 223.246231) 35558 POINT(477.092285 592.63269) 35559 POINT(784.228394 909.723511) 35560 POINT(949.208069 401.298126) 35561 POINT(455.190704 469.773529) 35562 POINT(48.9225235 611.292908) 35563 POINT(414.534058 214.166763) 35564 POINT(53.5763283 181.504837) 35565 POINT(710.651001 703.9375) 35566 POINT(304.122223 291.515045) 35567 POINT(686.641907 719.362793) 35568 POINT(410.549988 364.474091) 35569 POINT(13.9696331 27.7211781) 35570 POINT(440.289734 430.46698) 35571 POINT(82.0323029 897.469727) 35572 POINT(95.5779724 790.17749) 35573 POINT(192.464798 753.810974) 35574 POINT(463.152222 74.3777237) 35575 POINT(727.703857 52.3850021) 35576 POINT(644.298767 702.518005) 35577 POINT(679.494934 599.378723) 35578 POINT(598.535339 635.389587) 35579 POINT(233.218948 918.6604) 35580 POINT(216.511246 545.015442) 35581 POINT(434.930267 376.233276) 35582 POINT(786.620972 832.760071) 35583 POINT(824.7052 151.576981) 35584 POINT(148.052139 697.922729) 35585 POINT(635.312805 592.166748) 35586 POINT(396.340302 968.208923) 35587 POINT(140.468002 315.099854) 35588 POINT(694.930847 65.4935226) 35589 POINT(731.270203 707.422485) 35590 POINT(669.82135 100.871391) 35591 POINT(620.250488 319.159637) 35592 POINT(849.269714 118.413193) 35593 POINT(865.254578 400.563721) 35594 POINT(435.128143 274.231079) 35595 POINT(893.811951 383.683472) 35596 POINT(338.041138 723.942871) 35597 POINT(444.438477 89.6223907) 35598 POINT(310.102051 65.5713501) 35599 POINT(954.377319 514.02533) 35600 POINT(303.29071 855.115479) 35601 POINT(871.604126 127.260345) 35602 POINT(960.932739 377.897552) 35603 POINT(188.643433 160.921722) 35604 POINT(706.477844 60.362236) 35605 POINT(51.1235352 542.775818) 35606 POINT(976.159485 574.946167) 35607 POINT(527.410706 207.825745) 35608 POINT(199.763123 396.236633) 35609 POINT(307.632568 939.14032) 35610 POINT(570.122009 771.812073) 35611 POINT(79.5422058 679.448792) 35612 POINT(63.5164757 378.442383) 35613 POINT(781.760132 169.852112) 35614 POINT(639.45105 336.887634) 35615 POINT(616.83313 597.565735) 35616 POINT(822.013916 390.160553) 35617 POINT(200.282684 718.244141) 35618 POINT(662.009094 435.223083) 35619 POINT(188.509125 223.616043) 35620 POINT(318.23822 901.710266) 35621 POINT(157.330719 280.986206) 35622 POINT(549.76178 749.080444) 35623 POINT(961.452271 522.360046) 35624 POINT(353.892944 801.86676) 35625 POINT(688.782532 917.87207) 35626 POINT(845.381592 348.367767) 35627 POINT(105.887863 56.8258896) 35628 POINT(482.184265 118.698997) 35629 POINT(973.73761 271.584595) 35630 POINT(586.954346 51.8047905) 35631 POINT(176.147415 682.008911) 35632 POINT(178.621277 416.57843) 35633 POINT(454.9711 783.982483) 35634 POINT(755.980713 519.084534) 35635 POINT(972.256042 343.262909) 35636 POINT(409.030487 196.050095) 35637 POINT(534.527039 539.555054) 35638 POINT(470.934875 744.960083) 35639 POINT(310.475525 5.0482502) 35640 POINT(564.174683 694.545105) 35641 POINT(271.116699 352.041809) 35642 POINT(991.961548 588.099487) 35643 POINT(479.566742 236.678055) 35644 POINT(836.813232 588.453918) 35645 POINT(182.746811 976.81604) 35646 POINT(161.865463 460.715851) 35647 POINT(414.418457 263.932098) 35648 POINT(379.734558 230.867569) 35649 POINT(341.008698 879.482605) 35650 POINT(124.365044 329.393646) 35651 POINT(779.821777 358.882263) 35652 POINT(2.2378571 224.334824) 35653 POINT(432.718292 820.242249) 35654 POINT(32.6539726 733.196716) 35655 POINT(224.552658 285.00174) 35656 POINT(737.736633 324.269958) 35657 POINT(360.105072 623.925537) 35658 POINT(989.634094 612.056946) 35659 POINT(39.5579567 140.605881) 35660 POINT(346.600525 896.187378) 35661 POINT(252.504211 897.202209) 35662 POINT(645.753418 356.607056) 35663 POINT(333.922363 350.899231) 35664 POINT(706.049194 408.726227) 35665 POINT(470.516113 127.321815) 35666 POINT(721.203735 640.035156) 35667 POINT(628.427734 747.380188) 35668 POINT(82.8556213 734.469177) 35669 POINT(297.853546 550.844727) 35670 POINT(216.301468 273.201874) 35671 POINT(458.897705 643.080872) 35672 POINT(484.812225 351.846588) 35673 POINT(536.605591 416.172546) 35674 POINT(227.197739 536.176392) 35675 POINT(180.154922 563.096802) 35676 POINT(643.35907 893.957825) 35677 POINT(148.40477 780.289978) 35678 POINT(93.6315231 182.510254) 35679 POINT(666.29895 822.086975) 35680 POINT(692.467651 873.930664) 35681 POINT(416.991455 777.980591) 35682 POINT(71.262207 586.983032) 35683 POINT(14.1478281 453.901978) 35684 POINT(277.819366 831.476746) 35685 POINT(846.928589 380.881409) 35686 POINT(843.186707 313.217438) 35687 POINT(674.067993 93.2242966) 35688 POINT(655.513855 591.593323) 35689 POINT(158.725861 24.0919113) 35690 POINT(963.567566 714.475403) 35691 POINT(656.049622 285.081146) 35692 POINT(320.987061 803.8974) 35693 POINT(292.391479 119.655434) 35694 POINT(760.86792 49.1116486) 35695 POINT(588.768677 355.317261) 35696 POINT(846.51355 439.869598) 35697 POINT(289.437408 399.082153) 35698 POINT(319.010498 991.573608) 35699 POINT(445.508453 413.590973) 35700 POINT(899.614685 465.323425) 35701 POINT(287.621216 231.184113) 35702 POINT(901.847107 350.502502) 35703 POINT(693.196777 280.184387) 35704 POINT(864.887817 476.704468) 35705 POINT(633.215698 546.844971) 35706 POINT(589.646484 267.403564) 35707 POINT(469.447968 128.894104) 35708 POINT(98.2177353 692.36322) 35709 POINT(292.355896 768.947998) 35710 POINT(955.877258 162.516541) 35711 POINT(147.381134 420.495941) 35712 POINT(605.027161 323.734802) 35713 POINT(326.019714 193.538177) 35714 POINT(328.384949 218.933975) 35715 POINT(309.119385 264.753845) 35716 POINT(853.16803 16.3971329) 35717 POINT(182.457291 597.394897) 35718 POINT(551.130249 251.676453) 35719 POINT(716.257263 693.66925) 35720 POINT(506.250275 747.268616) 35721 POINT(956.391602 457.54422) 35722 POINT(190.977661 395.349548) 35723 POINT(339.216705 454.644257) 35724 POINT(94.6511841 291.745514) 35725 POINT(566.070129 59.8408165) 35726 POINT(818.593506 162.170547) 35727 POINT(887.294373 839.457886) 35728 POINT(29.1425056 133.368195) 35729 POINT(7.25672674 946.60083) 35730 POINT(333.331665 71.5677185) 35731 POINT(567.336182 753.432312) 35732 POINT(906.018738 478.643921) 35733 POINT(457.508362 607.36969) 35734 POINT(299.057465 233.218048) 35735 POINT(991.357605 698.890869) 35736 POINT(752.804871 860.944092) 35737 POINT(24.5916443 52.2585869) 35738 POINT(911.17865 977.304504) 35739 POINT(252.061218 597.988281) 35740 POINT(720.066956 669.931702) 35741 POINT(359.649872 923.887512) 35742 POINT(524.724121 868.937012) 35743 POINT(190.085846 412.21814) 35744 POINT(737.545105 826.764771) 35745 POINT(188.740585 101.821075) 35746 POINT(639.130859 218.096024) 35747 POINT(787.953918 329.380646) 35748 POINT(821.772644 740.360107) 35749 POINT(55.62043 332.488007) 35750 POINT(857.468811 502.121063) 35751 POINT(443.067474 883.519104) 35752 POINT(47.5414276 626.290039) 35753 POINT(214.162476 277.924591) 35754 POINT(616.156189 954.681702) 35755 POINT(595.734863 749.311707) 35756 POINT(677.018127 247.426544) 35757 POINT(660.548828 518.285095) 35758 POINT(415.785583 943.330688) 35759 POINT(818.09436 109.629349) 35760 POINT(578.011414 144.232315) 35761 POINT(753.389221 465.912964) 35762 POINT(874.502502 657.155518) 35763 POINT(5.93192005 433.449951) 35764 POINT(856.836243 462.640717) 35765 POINT(734.173828 852.869141) 35766 POINT(172.448715 56.7060928) 35767 POINT(757.775696 221.042831) 35768 POINT(581.41571 558.75415) 35769 POINT(730.976807 439.164154) 35770 POINT(359.102844 0.292077303) 35771 POINT(374.27951 774.316162) 35772 POINT(576.706421 662.12915) 35773 POINT(505.084442 855.543152) 35774 POINT(554.919861 953.90741) 35775 POINT(165.79335 332.445526) 35776 POINT(537.229431 13.2067184) 35777 POINT(283.22998 42.5246696) 35778 POINT(294.493408 716.452271) 35779 POINT(917.149841 976.378357) 35780 POINT(120.433189 55.4844208) 35781 POINT(507.374695 576.494446) 35782 POINT(130.533661 147.588425) 35783 POINT(426.079041 550.536316) 35784 POINT(259.810852 459.316223) 35785 POINT(229.48262 284.008331) 35786 POINT(146.274292 972.476746) 35787 POINT(5.29698467 476.012909) 35788 POINT(668.138855 981.765381) 35789 POINT(180.494522 937.059326) 35790 POINT(208.492355 355.810516) 35791 POINT(718.195557 736.791992) 35792 POINT(388.90036 425.724243) 35793 POINT(250.714096 494.915283) 35794 POINT(634.145447 86.9718094) 35795 POINT(904.195129 508.987488) 35796 POINT(297.900848 251.554276) 35797 POINT(233.077255 312.235718) 35798 POINT(440.700409 898.80249) 35799 POINT(242.202606 872.832458) 35800 POINT(657.27948 715.788452) 35801 POINT(201.283508 968.527588) 35802 POINT(503.54834 654.394958) 35803 POINT(199.252411 798.122192) 35804 POINT(180.565399 763.977356) 35805 POINT(821.525696 890.600952) 35806 POINT(753.47113 879.473083) 35807 POINT(216.288742 126.041725) 35808 POINT(580.121887 288.549561) 35809 POINT(229.562836 737.538147) 35810 POINT(12.9449358 392.345795) 35811 POINT(394.181519 583.785278) 35812 POINT(237.268951 777.595154) 35813 POINT(844.137756 596.790283) 35814 POINT(192.13591 589.082153) 35815 POINT(760.450989 963.102295) 35816 POINT(460.56778 826.771484) 35817 POINT(633.250183 400.368073) 35818 POINT(343.765015 278.468842) 35819 POINT(420.808197 469.879486) 35820 POINT(779.197998 464.068512) 35821 POINT(901.552612 611.693054) 35822 POINT(510.587372 829.476562) 35823 POINT(29.5026054 909.097595) 35824 POINT(856.052307 745.960083) 35825 POINT(625.144592 156.530304) 35826 POINT(390.053375 793.374573) 35827 POINT(48.5990257 807.97522) 35828 POINT(899.119202 623.507019) 35829 POINT(724.299377 775.521912) 35830 POINT(587.788269 93.2977142) 35831 POINT(208.691132 799.840332) 35832 POINT(899.919983 648.267212) 35833 POINT(435.163391 461.194214) 35834 POINT(634.847778 335.984283) 35835 POINT(432.189636 592.247314) 35836 POINT(634.210754 690.405457) 35837 POINT(118.228569 408.912415) 35838 POINT(3.27672005 793.565857) 35839 POINT(235.20726 625.08136) 35840 POINT(122.855965 475.186737) 35841 POINT(424.383453 959.108398) 35842 POINT(70.3193741 127.7062) 35843 POINT(285.194855 87.8711472) 35844 POINT(169.726044 409.074982) 35845 POINT(728.608521 337.208099) 35846 POINT(353.699127 984.048828) 35847 POINT(358.866211 310.256653) 35848 POINT(668.664978 862.947449) 35849 POINT(136.887863 608.03772) 35850 POINT(368.706268 171.847824) 35851 POINT(418.581543 665.534058) 35852 POINT(603.021484 807.475586) 35853 POINT(173.66745 153.088211) 35854 POINT(142.402542 261.82016) 35855 POINT(905.242676 34.4282799) 35856 POINT(48.9304466 454.510956) 35857 POINT(465.198669 151.870468) 35858 POINT(761.07196 84.6716766) 35859 POINT(631.885925 564.71936) 35860 POINT(37.4788666 348.35495) 35861 POINT(348.362396 2.69375277) 35862 POINT(324.117035 793.413696) 35863 POINT(854.54071 932.074829) 35864 POINT(831.083496 172.078949) 35865 POINT(355.077698 353.552582) 35866 POINT(330.919983 864.500183) 35867 POINT(195.55629 558.418152) 35868 POINT(25.8544788 386.60144) 35869 POINT(949.15686 430.408508) 35870 POINT(836.759888 655.98053) 35871 POINT(99.4795761 276.388763) 35872 POINT(904.414307 704.0177) 35873 POINT(725.47583 648.004333) 35874 POINT(679.695068 915.276306) 35875 POINT(412.702393 741.925964) 35876 POINT(632.585327 311.716095) 35877 POINT(520.587585 67.4508972) 35878 POINT(702.392334 934.854736) 35879 POINT(495.47699 491.736237) 35880 POINT(218.556671 710.104736) 35881 POINT(529.412964 125.176598) 35882 POINT(171.203522 890.985779) 35883 POINT(998.53302 918.379456) 35884 POINT(634.584473 4.31093502) 35885 POINT(574.402466 199.433304) 35886 POINT(529.36084 268.933655) 35887 POINT(66.4112473 592.935547) 35888 POINT(138.976501 499.004974) 35889 POINT(131.56897 3.4021039) 35890 POINT(211.982925 177.347504) 35891 POINT(265.762512 303.691101) 35892 POINT(630.05603 485.539185) 35893 POINT(582.050293 498.0448) 35894 POINT(497.653168 785.280151) 35895 POINT(979.242737 899.010925) 35896 POINT(813.996399 181.881714) 35897 POINT(428.367523 3.19880557) 35898 POINT(274.652802 77.178421) 35899 POINT(354.268127 523.536072) 35900 POINT(74.8618393 888.363953) 35901 POINT(891.303711 452.013733) 35902 POINT(159.501419 614.35144) 35903 POINT(150.7771 119.077461) 35904 POINT(197.886902 556.0495) 35905 POINT(386.333954 281.680786) 35906 POINT(621.277527 15.8386402) 35907 POINT(993.278809 125.049255) 35908 POINT(515.970276 129.571457) 35909 POINT(867.797363 282.506317) 35910 POINT(637.262756 427.262207) 35911 POINT(599.850159 158.014038) 35912 POINT(624.556091 222.574356) 35913 POINT(924.508057 837.733521) 35914 POINT(933.772705 333.163635) 35915 POINT(534.377014 75.887825) 35916 POINT(541.519165 911.435242) 35917 POINT(812.260681 378.117432) 35918 POINT(50.6091652 686.487366) 35919 POINT(908.217041 239.579483) 35920 POINT(76.3681717 691.728516) 35921 POINT(316.693329 548.109497) 35922 POINT(308.386414 478.289337) 35923 POINT(243.5952 973.315674) 35924 POINT(217.023361 931.9375) 35925 POINT(454.229004 534.610291) 35926 POINT(255.0578 551.411255) 35927 POINT(403.425812 194.629364) 35928 POINT(542.623291 480.204865) 35929 POINT(539.32428 244.600403) 35930 POINT(321.28598 673.776794) 35931 POINT(90.8870239 935.966125) 35932 POINT(27.258934 432.453583) 35933 POINT(73.0120468 534.560303) 35934 POINT(223.872528 630.128906) 35935 POINT(926.957336 12.0888605) 35936 POINT(112.228737 453.99823) 35937 POINT(240.732101 492.442505) 35938 POINT(122.282402 365.441925) 35939 POINT(525.255981 400.939178) 35940 POINT(593.354736 461.806519) 35941 POINT(546.702454 852.060608) 35942 POINT(655.36853 18.9063587) 35943 POINT(300.912354 0.338335842) 35944 POINT(695.093445 920.859375) 35945 POINT(257.590851 980.11084) 35946 POINT(763.723083 24.2977448) 35947 POINT(973.821655 298.889526) 35948 POINT(684.622559 485.597015) 35949 POINT(880.004761 517.644348) 35950 POINT(637.651123 320.705902) 35951 POINT(856.527588 156.667679) 35952 POINT(516.777161 226.227905) 35953 POINT(854.325073 680.658936) 35954 POINT(221.584137 117.014053) 35955 POINT(53.1053505 329.761261) 35956 POINT(294.657745 219.715866) 35957 POINT(11.666954 428.581024) 35958 POINT(452.819489 584.182129) 35959 POINT(637.801025 592.455811) 35960 POINT(780.924683 856.550537) 35961 POINT(111.259857 194.760483) 35962 POINT(815.793823 311.301758) 35963 POINT(730.816101 311.826233) 35964 POINT(801.240601 816.94458) 35965 POINT(952.294556 639.702026) 35966 POINT(852.66748 354.555847) 35967 POINT(143.509109 111.731506) 35968 POINT(144.017624 303.890778) 35969 POINT(137.295166 935.608337) 35970 POINT(986.818115 232.627747) 35971 POINT(926.41864 826.681396) 35972 POINT(479.570587 785.55072) 35973 POINT(553.330078 419.912689) 35974 POINT(387.911835 277.771545) 35975 POINT(720.895569 290.77182) 35976 POINT(896.973938 195.736389) 35977 POINT(32.885006 65.8283539) 35978 POINT(635.539795 338.666443) 35979 POINT(288.764008 632.862305) 35980 POINT(888.364258 268.784149) 35981 POINT(457.977692 109.546486) 35982 POINT(622.979858 949.344727) 35983 POINT(974.314392 656.394409) 35984 POINT(998.126831 443.910889) 35985 POINT(779.103271 346.562897) 35986 POINT(483.462006 727.894592) 35987 POINT(139.064697 570.728333) 35988 POINT(898.348267 564.180176) 35989 POINT(34.8552246 63.7175903) 35990 POINT(318.386993 949.305481) 35991 POINT(802.107422 810.599731) 35992 POINT(352.114624 416.4953) 35993 POINT(478.576996 308.881744) 35994 POINT(160.268188 948.735168) 35995 POINT(817.495239 931.276306) 35996 POINT(382.678223 11.576437) 35997 POINT(345.154327 216.828476) 35998 POINT(912.73645 254.644501) 35999 POINT(924.998047 599.220093) 36000 POINT(979.212036 386.66629) 36001 POINT(624.06897 407.675385) 36002 POINT(975.76886 125.657112) 36003 POINT(921.699402 511.538269) 36004 POINT(838.815918 628.749207) 36005 POINT(444.090302 53.3883629) 36006 POINT(886.371338 470.667938) 36007 POINT(19.2822094 672.230591) 36008 POINT(969.635132 762.3573) 36009 POINT(320.490021 68.1876907) 36010 POINT(583.266968 968.636597) 36011 POINT(175.485428 829.220337) 36012 POINT(461.39444 123.575516) 36013 POINT(567.422729 20.2990894) 36014 POINT(838.710815 572.666809) 36015 POINT(818.09845 33.3795624) 36016 POINT(367.35022 850.648376) 36017 POINT(636.123047 785.343933) 36018 POINT(991.373047 482.386597) 36019 POINT(915.990601 219.238464) 36020 POINT(435.60376 161.627548) 36021 POINT(3.82786894 665.764404) 36022 POINT(361.302155 99.3080978) 36023 POINT(794.057251 426.793671) 36024 POINT(377.918762 160.79158) 36025 POINT(508.83963 686.030579) 36026 POINT(631.301147 441.760559) 36027 POINT(437.596191 784.807129) 36028 POINT(470.627563 18.1053295) 36029 POINT(703.904907 39.979084) 36030 POINT(38.6184654 989.152832) 36031 POINT(286.511627 658.2146) 36032 POINT(544.908875 499.777649) 36033 POINT(883.090576 214.482742) 36034 POINT(436.677155 949.736938) 36035 POINT(680.874146 425.737885) 36036 POINT(842.662537 993.014099) 36037 POINT(926.596252 142.75415) 36038 POINT(158.635117 501.70813) 36039 POINT(186.750534 198.523254) 36040 POINT(789.405029 364.350494) 36041 POINT(3.45175862 850.936096) 36042 POINT(142.890396 644.390137) 36043 POINT(4.84697247 416.603394) 36044 POINT(467.051392 218.492569) 36045 POINT(473.803802 453.234253) 36046 POINT(965.214722 914.41925) 36047 POINT(544.395264 667.207886) 36048 POINT(457.147583 383.375702) 36049 POINT(40.5059929 23.6989231) 36050 POINT(263.020142 371.254944) 36051 POINT(30.8413792 257.423492) 36052 POINT(769.060974 737.19812) 36053 POINT(313.982269 826.863647) 36054 POINT(534.332642 937.007568) 36055 POINT(708.281067 43.4319839) 36056 POINT(767.832031 814.46936) 36057 POINT(474.84314 624.801147) 36058 POINT(447.367889 387.489929) 36059 POINT(796.218018 769.529541) 36060 POINT(372.836548 980.655762) 36061 POINT(645.490906 294.757141) 36062 POINT(606.174011 34.5610428) 36063 POINT(865.104797 702.359131) 36064 POINT(311.101288 348.793243) 36065 POINT(914.958679 789.375916) 36066 POINT(183.626907 414.246674) 36067 POINT(706.257446 659.263123) 36068 POINT(878.063843 26.4763546) 36069 POINT(700.48468 550.63147) 36070 POINT(955.133667 100.783714) 36071 POINT(89.1199493 624.389893) 36072 POINT(483.760071 727.922852) 36073 POINT(274.832733 848.930542) 36074 POINT(44.7203445 103.650665) 36075 POINT(22.4845543 22.1656399) 36076 POINT(243.869553 263.3508) 36077 POINT(840.126099 160.454941) 36078 POINT(129.750122 172.809677) 36079 POINT(266.160309 374.967804) 36080 POINT(12.744442 926.69458) 36081 POINT(486.970398 618.662903) 36082 POINT(941.338867 736.800293) 36083 POINT(875.711609 510.314606) 36084 POINT(549.491943 342.726532) 36085 POINT(741.899414 779.969604) 36086 POINT(644.604797 128.988571) 36087 POINT(505.273376 702.610291) 36088 POINT(958.376587 905.937683) 36089 POINT(176.684708 428.97937) 36090 POINT(86.209465 219.190109) 36091 POINT(42.0823517 135.46347) 36092 POINT(151.253036 546.072205) 36093 POINT(729.807983 915.243835) 36094 POINT(956.217957 561.04834) 36095 POINT(901.244995 852.82135) 36096 POINT(842.436646 188.998322) 36097 POINT(973.403687 561.370667) 36098 POINT(627.126099 689.964844) 36099 POINT(970.397766 930.640747) 36100 POINT(505.362701 946.637146) 36101 POINT(548.235901 11.410778) 36102 POINT(804.972473 262.041718) 36103 POINT(761.296326 945.541321) 36104 POINT(795.582458 765.96106) 36105 POINT(384.782379 998.801941) 36106 POINT(155.774399 311.410004) 36107 POINT(799.004395 942.86499) 36108 POINT(176.087234 994.611389) 36109 POINT(130.255966 904.749146) 36110 POINT(755.096436 21.4828453) 36111 POINT(659.234436 13.7907391) 36112 POINT(868.649292 79.4742813) 36113 POINT(409.40152 650.773376) 36114 POINT(549.380371 55.085659) 36115 POINT(350.527344 279.631348) 36116 POINT(798.812317 404.593353) 36117 POINT(161.164291 923.262268) 36118 POINT(14.7365112 669.079712) 36119 POINT(930.33783 551.164307) 36120 POINT(902.359375 96.0861206) 36121 POINT(313.833618 463.207031) 36122 POINT(852.215698 551.009521) 36123 POINT(342.72876 181.826965) 36124 POINT(17.5327396 474.270447) 36125 POINT(488.023315 170.912338) 36126 POINT(868.152466 558.469238) 36127 POINT(470.257721 665.831177) 36128 POINT(599.973999 716.996643) 36129 POINT(249.858292 73.3171005) 36130 POINT(153.9897 316.295624) 36131 POINT(303.772675 345.730438) 36132 POINT(666.299255 213.219421) 36133 POINT(675.994507 780.665405) 36134 POINT(302.064911 932.361328) 36135 POINT(951.217285 188.697922) 36136 POINT(697.418457 32.1330338) 36137 POINT(637.607422 919.619019) 36138 POINT(672.160278 929.654785) 36139 POINT(930.178162 966.751953) 36140 POINT(714.15448 910.732727) 36141 POINT(262.241547 171.503799) 36142 POINT(658.186646 860.497314) 36143 POINT(818.789124 333.390015) 36144 POINT(375.411469 171.453461) 36145 POINT(490.421997 967.234131) 36146 POINT(495.194061 968.163025) 36147 POINT(875.741699 227.570724) 36148 POINT(743.088684 21.5769138) 36149 POINT(508.186035 594.56189) 36150 POINT(393.969879 691.829834) 36151 POINT(682.532349 755.708923) 36152 POINT(308.130219 757.386536) 36153 POINT(107.201599 458.645874) 36154 POINT(693.807861 772.704651) 36155 POINT(209.710037 203.325348) 36156 POINT(978.546936 498.589355) 36157 POINT(700.896057 503.541992) 36158 POINT(283.59964 212.330414) 36159 POINT(963.771667 110.22007) 36160 POINT(992.942322 212.312149) 36161 POINT(808.027649 350.063873) 36162 POINT(757.22229 358.495392) 36163 POINT(32.484436 406.513733) 36164 POINT(142.018616 951.019653) 36165 POINT(304.389404 534.565918) 36166 POINT(641.265076 949.830383) 36167 POINT(913.797607 451.628845) 36168 POINT(255.73584 424.989838) 36169 POINT(638.842102 343.552551) 36170 POINT(561.458557 37.0928955) 36171 POINT(987.13855 444.25885) 36172 POINT(645.240784 257.522034) 36173 POINT(511.632904 130.619003) 36174 POINT(398.740173 317.301819) 36175 POINT(365.771545 78.5999298) 36176 POINT(76.3788376 529.841614) 36177 POINT(220.962097 675.079651) 36178 POINT(326.710419 566.299805) 36179 POINT(655.029907 510.596283) 36180 POINT(895.546692 512.70459) 36181 POINT(998.018433 95.7427826) 36182 POINT(119.304199 535.984802) 36183 POINT(833.614807 667.677246) 36184 POINT(128.839462 802.994507) 36185 POINT(171.213028 68.6416016) 36186 POINT(270.821655 894.366516) 36187 POINT(73.7874298 686.440125) 36188 POINT(731.890381 436.142303) 36189 POINT(927.09729 614.132141) 36190 POINT(280.034302 529.766968) 36191 POINT(821.164062 794.959961) 36192 POINT(680.497986 928.990295) 36193 POINT(768.459778 516.62207) 36194 POINT(915.901062 814.899292) 36195 POINT(865.955139 269.883362) 36196 POINT(261.078857 622.759216) 36197 POINT(509.354248 519.293823) 36198 POINT(404.500641 232.221863) 36199 POINT(454.874329 193.191025) 36200 POINT(745.181946 142.067001) 36201 POINT(792.318542 796.539185) 36202 POINT(255.105698 98.880249) 36203 POINT(716.57428 609.48877) 36204 POINT(613.743042 263.486816) 36205 POINT(664.802429 848.421997) 36206 POINT(877.89563 997.712097) 36207 POINT(803.350342 341.914886) 36208 POINT(634.45575 995.920593) 36209 POINT(709.830078 884.338623) 36210 POINT(236.624039 920.205505) 36211 POINT(187.98468 163.227112) 36212 POINT(389.578766 215.104645) 36213 POINT(590.180115 967.1474) 36214 POINT(526.628601 57.9640198) 36215 POINT(496.987854 238.359894) 36216 POINT(301.695801 765.850952) 36217 POINT(635.875366 674.388) 36218 POINT(271.889862 641.147461) 36219 POINT(110.126091 755.718262) 36220 POINT(811.389038 548.168884) 36221 POINT(281.530701 799.816406) 36222 POINT(294.417023 215.519257) 36223 POINT(511.006042 446.702423) 36224 POINT(123.482689 737.199707) 36225 POINT(743.115662 666.329346) 36226 POINT(725.058533 274.147766) 36227 POINT(34.6219788 256.432098) 36228 POINT(857.45874 951.935913) 36229 POINT(312.947723 950.456055) 36230 POINT(596.905457 215.470581) 36231 POINT(225.152283 773.368347) 36232 POINT(12.8413582 883.986145) 36233 POINT(47.2371559 528.945862) 36234 POINT(590.77655 186.347137) 36235 POINT(490.925751 151.504684) 36236 POINT(891.793213 625.186523) 36237 POINT(422.265137 749.581177) 36238 POINT(186.843628 486.887268) 36239 POINT(123.360565 166.028366) 36240 POINT(8.86076736 691.646362) 36241 POINT(743.28241 701.19873) 36242 POINT(817.276123 863.258179) 36243 POINT(32.8115578 731.826904) 36244 POINT(561.751892 531.857483) 36245 POINT(704.474854 512.000427) 36246 POINT(611.855042 195.336838) 36247 POINT(746.644775 683.943665) 36248 POINT(737.224182 127.783539) 36249 POINT(518.849487 440.590973) 36250 POINT(981.825256 797.987427) 36251 POINT(313.490295 870.061035) 36252 POINT(982.607849 150.386337) 36253 POINT(463.65274 540.776611) 36254 POINT(596.826782 797.909241) 36255 POINT(762.507996 637.317688) 36256 POINT(386.181335 14.8340082) 36257 POINT(519.939941 979.014038) 36258 POINT(275.565399 822.413147) 36259 POINT(677.63269 609.241882) 36260 POINT(478.56543 95.675766) 36261 POINT(24.1738777 662.498657) 36262 POINT(932.952637 542.149658) 36263 POINT(264.149323 243.310455) 36264 POINT(92.493782 308.556519) 36265 POINT(895.236755 696.233398) 36266 POINT(4.76747465 446.724945) 36267 POINT(8.57999897 35.6184883) 36268 POINT(399.766296 242.584061) 36269 POINT(51.9988632 329.020355) 36270 POINT(705.459717 600.306274) 36271 POINT(662.749146 396.37207) 36272 POINT(881.884521 36.2503242) 36273 POINT(94.5942001 471.169922) 36274 POINT(65.5375214 23.7311134) 36275 POINT(819.024231 158.393127) 36276 POINT(784.81543 229.847473) 36277 POINT(186.811996 570.822815) 36278 POINT(942.050903 780.299255) 36279 POINT(786.114319 400.550995) 36280 POINT(558.523499 898.608521) 36281 POINT(347.519806 621.132568) 36282 POINT(99.0033264 804.34082) 36283 POINT(823.438843 769.013245) 36284 POINT(888.358643 473.341095) 36285 POINT(35.7928352 337.15686) 36286 POINT(14.0938377 4.8171854) 36287 POINT(46.9647141 761.433716) 36288 POINT(188.079758 789.112854) 36289 POINT(997.430725 89.1590881) 36290 POINT(284.013336 200.626343) 36291 POINT(480.540771 502.672882) 36292 POINT(843.242493 67.5843887) 36293 POINT(829.802368 8.12104797) 36294 POINT(372.58725 999.947144) 36295 POINT(794.141602 385.372162) 36296 POINT(68.8718185 734.876648) 36297 POINT(617.465027 789.621094) 36298 POINT(974.378906 822.87262) 36299 POINT(244.066238 574.680054) 36300 POINT(976.787903 204.3974) 36301 POINT(292.764801 113.832542) 36302 POINT(450.937012 884.744751) 36303 POINT(210.020081 783.655029) 36304 POINT(335.647552 12.8409939) 36305 POINT(83.6294556 272.249207) 36306 POINT(637.691467 107.019302) 36307 POINT(510.139893 914.345947) 36308 POINT(550.709045 987.61438) 36309 POINT(525.026672 545.846008) 36310 POINT(816.572144 603.150513) 36311 POINT(367.406372 129.278671) 36312 POINT(590.524536 445.231995) 36313 POINT(31.0648003 114.735069) 36314 POINT(802.745239 598.902771) 36315 POINT(499.520172 669.052063) 36316 POINT(944.208008 772.760559) 36317 POINT(951.473877 795.977661) 36318 POINT(903.432434 389.658173) 36319 POINT(309.200867 263.975159) 36320 POINT(205.622559 128.184006) 36321 POINT(369.210449 704.066284) 36322 POINT(972.597778 211.703079) 36323 POINT(563.000854 301.152527) 36324 POINT(549.777588 410.598572) 36325 POINT(635.188843 7.69001722) 36326 POINT(907.35907 710.142517) 36327 POINT(264.108917 3.15221667) 36328 POINT(191.918808 97.4357529) 36329 POINT(781.648804 316.750336) 36330 POINT(710.29834 23.0031967) 36331 POINT(648.25116 750.366394) 36332 POINT(901.242432 23.4510918) 36333 POINT(507.427612 875.194214) 36334 POINT(676.419128 369.251465) 36335 POINT(361.680023 336.402374) 36336 POINT(778.857971 685.005615) 36337 POINT(386.411346 658.084167) 36338 POINT(354.316284 427.866058) 36339 POINT(916.374451 384.317352) 36340 POINT(803.570374 193.204956) 36341 POINT(314.700073 675.425781) 36342 POINT(678.195618 725.76947) 36343 POINT(459.957031 371.237183) 36344 POINT(99.2476807 570.75177) 36345 POINT(982.527161 270.625122) 36346 POINT(70.7005234 714.335999) 36347 POINT(746.467957 709.876465) 36348 POINT(483.984894 689.904297) 36349 POINT(333.732483 968.049988) 36350 POINT(376.0737 207.358627) 36351 POINT(949.016235 117.702682) 36352 POINT(623.970947 782.724487) 36353 POINT(558.595703 472.020172) 36354 POINT(199.000854 377.770813) 36355 POINT(616.463928 67.9646988) 36356 POINT(33.9102859 119.837944) 36357 POINT(155.095184 748.653809) 36358 POINT(596.555481 566.083313) 36359 POINT(643.680054 461.532501) 36360 POINT(241.0466 150.215469) 36361 POINT(989.164307 732.348938) 36362 POINT(98.9830475 740.410583) 36363 POINT(598.534119 784.47052) 36364 POINT(661.280457 122.027832) 36365 POINT(86.2758789 90.2793045) 36366 POINT(719.633057 566.124695) 36367 POINT(128.683273 923.494873) 36368 POINT(123.56945 963.41156) 36369 POINT(94.6926346 651.137268) 36370 POINT(955.168518 692.589478) 36371 POINT(457.337799 499.940247) 36372 POINT(522.74292 992.024536) 36373 POINT(974.97998 558.456238) 36374 POINT(774.252319 45.091404) 36375 POINT(169.57402 52.5896416) 36376 POINT(781.060669 843.558716) 36377 POINT(490.884308 944.197693) 36378 POINT(246.229904 621.99707) 36379 POINT(589.396179 650.695984) 36380 POINT(155.28862 861.916016) 36381 POINT(503.439209 934.889343) 36382 POINT(770.89856 540.333008) 36383 POINT(52.6309967 550.751709) 36384 POINT(938.760437 77.5425568) 36385 POINT(903.167847 100.452232) 36386 POINT(836.273987 847.395081) 36387 POINT(291.872833 324.038574) 36388 POINT(776.839966 815.45636) 36389 POINT(254.509995 34.9562492) 36390 POINT(853.33429 921.661621) 36391 POINT(967.078064 476.717072) 36392 POINT(139.393433 920.791321) 36393 POINT(872.107544 618.895081) 36394 POINT(895.042908 123.195862) 36395 POINT(99.0425949 960.190735) 36396 POINT(975.326965 567.220093) 36397 POINT(100.342285 654.173279) 36398 POINT(101.521675 721.889038) 36399 POINT(792.877258 126.707535) 36400 POINT(211.938965 622.408081) 36401 POINT(25.5258465 985.850037) 36402 POINT(104.065323 31.3092175) 36403 POINT(174.729355 623.637451) 36404 POINT(555.783813 584.688477) 36405 POINT(714.400696 928.784363) 36406 POINT(67.7601089 106.584442) 36407 POINT(907.382019 439.59082) 36408 POINT(1.93664658 176.438354) 36409 POINT(343.118439 802.680176) 36410 POINT(855.788147 326.6633) 36411 POINT(998.994568 816.519836) 36412 POINT(564.996582 782.174805) 36413 POINT(257.618988 645.629639) 36414 POINT(378.070343 674.460144) 36415 POINT(874.131165 24.1717491) 36416 POINT(7.85888672 53.1788368) 36417 POINT(89.3432693 724.104858) 36418 POINT(402.720886 552.806091) 36419 POINT(837.357239 56.7379112) 36420 POINT(763.233459 165.493698) 36421 POINT(539.468628 286.450623) 36422 POINT(980.856445 529.79071) 36423 POINT(127.065506 156.27124) 36424 POINT(818.081665 414.434204) 36425 POINT(340.364594 117.281357) 36426 POINT(163.623322 493.993958) 36427 POINT(730.827393 693.419434) 36428 POINT(62.5886917 56.2815056) 36429 POINT(204.724045 841.787231) 36430 POINT(874.876953 318.271881) 36431 POINT(13.4478045 343.248993) 36432 POINT(492.984589 566.627808) 36433 POINT(280.83371 601.806763) 36434 POINT(643.767639 280.172791) 36435 POINT(995.033203 682.410889) 36436 POINT(701.471619 774.873901) 36437 POINT(746.703857 679.623413) 36438 POINT(398.556335 167.726105) 36439 POINT(808.767944 303.626282) 36440 POINT(286.7117 655.672485) 36441 POINT(696.287048 880.796448) 36442 POINT(676.306824 211.258926) 36443 POINT(466.723877 294.446045) 36444 POINT(174.77211 910.646912) 36445 POINT(397.771362 3.93750358) 36446 POINT(412.667694 725.06012) 36447 POINT(566.913818 459.46524) 36448 POINT(353.124084 857.508179) 36449 POINT(336.943573 523.195374) 36450 POINT(941.780334 617.125427) 36451 POINT(985.929443 978.649902) 36452 POINT(189.233109 558.727173) 36453 POINT(197.873825 688.313965) 36454 POINT(958.418945 730.881531) 36455 POINT(918.889954 289.160614) 36456 POINT(330.475647 568.212219) 36457 POINT(78.6819153 607.479004) 36458 POINT(972.787781 319.700287) 36459 POINT(852.058105 854.032532) 36460 POINT(163.562439 151.978729) 36461 POINT(791.903137 519.771851) 36462 POINT(222.972565 823.179993) 36463 POINT(183.364502 138.300354) 36464 POINT(949.343323 347.588165) 36465 POINT(56.979351 386.898956) 36466 POINT(100.862694 513.582336) 36467 POINT(242.213394 551.630371) 36468 POINT(42.8143311 767.171204) 36469 POINT(756.658264 137.967545) 36470 POINT(894.430786 511.479919) 36471 POINT(402.326172 336.251404) 36472 POINT(58.3428879 620.140625) 36473 POINT(199.593155 386.430969) 36474 POINT(52.5772362 131.582016) 36475 POINT(830.01123 379.95047) 36476 POINT(446.572235 34.2371254) 36477 POINT(508.190857 204.926315) 36478 POINT(238.317413 512.870483) 36479 POINT(165.132263 716.12677) 36480 POINT(712.161682 387.341187) 36481 POINT(833.766052 591.580383) 36482 POINT(151.90892 11.5924311) 36483 POINT(93.1791229 36.3744774) 36484 POINT(420.464325 27.52314) 36485 POINT(90.3156586 590.460876) 36486 POINT(477.587646 891.319275) 36487 POINT(334.229065 885.7901) 36488 POINT(216.439545 455.091888) 36489 POINT(293.736664 639.201721) 36490 POINT(335.90094 431.197113) 36491 POINT(48.2181549 337.178192) 36492 POINT(310.542542 767.942688) 36493 POINT(395.066742 608.431641) 36494 POINT(308.196594 691.675964) 36495 POINT(35.8259392 847.554443) 36496 POINT(274.0289 930.293213) 36497 POINT(704.336731 170.489059) 36498 POINT(440.647156 826.421021) 36499 POINT(400.409332 688.822998) 36500 POINT(530.056824 214.935486) 36501 POINT(615.880493 589.005554) 36502 POINT(632.258484 9.77196407) 36503 POINT(528.804077 814.23053) 36504 POINT(627.165894 990.421875) 36505 POINT(366.455627 756.292847) 36506 POINT(464.633057 761.030823) 36507 POINT(347.445374 273.175842) 36508 POINT(238.155594 877.140442) 36509 POINT(984.287231 322.070129) 36510 POINT(840.827271 690.023071) 36511 POINT(815.141724 319.182068) 36512 POINT(840.083008 180.025604) 36513 POINT(420.153839 54.9193459) 36514 POINT(766.463867 462.790771) 36515 POINT(524.969177 169.313095) 36516 POINT(200.043594 420.688416) 36517 POINT(90.8921967 156.957886) 36518 POINT(228.329987 91.9401016) 36519 POINT(105.136139 968.043152) 36520 POINT(116.595062 738.039978) 36521 POINT(711.20697 112.56987) 36522 POINT(404.011292 493.080322) 36523 POINT(832.300354 884.565979) 36524 POINT(348.128815 904.020386) 36525 POINT(341.427277 793.638672) 36526 POINT(370.684601 616.954895) 36527 POINT(500.705048 429.754669) 36528 POINT(297.189636 709.8349) 36529 POINT(36.8609123 966.574829) 36530 POINT(72.0096512 366.279755) 36531 POINT(126.631058 17.4620972) 36532 POINT(813.689026 518.138245) 36533 POINT(348.65509 50.5350342) 36534 POINT(549.132629 936.967468) 36535 POINT(510.04718 514.575867) 36536 POINT(430.152954 847.896118) 36537 POINT(196.579468 961.579712) 36538 POINT(345.13327 185.330429) 36539 POINT(23.972002 25.2208824) 36540 POINT(448.590088 961.193726) 36541 POINT(310.905884 144.117783) 36542 POINT(551.818665 116.020439) 36543 POINT(256.944183 436.727142) 36544 POINT(561.262756 555.048096) 36545 POINT(523.566406 438.839142) 36546 POINT(183.585999 609.875183) 36547 POINT(295.130676 318.458038) 36548 POINT(106.586159 826.322021) 36549 POINT(678.029602 265.437256) 36550 POINT(435.147919 66.5074158) 36551 POINT(497.985199 609.320618) 36552 POINT(636.579346 374.124939) 36553 POINT(822.842407 708.774597) 36554 POINT(908.23407 723.385864) 36555 POINT(595.002197 155.755966) 36556 POINT(203.734268 631.626221) 36557 POINT(655.543091 488.747101) 36558 POINT(76.9522095 31.3210049) 36559 POINT(810.994446 569.234314) 36560 POINT(662.86615 777.994934) 36561 POINT(891.658264 466.953125) 36562 POINT(102.313705 615.683716) 36563 POINT(513.454529 60.7560883) 36564 POINT(327.453552 371.218842) 36565 POINT(347.754883 297.376465) 36566 POINT(603.49707 33.3472633) 36567 POINT(567.944397 879.58667) 36568 POINT(520.170532 263.845673) 36569 POINT(48.0262222 63.6421623) 36570 POINT(146.744965 747.259338) 36571 POINT(186.089096 734.429382) 36572 POINT(913.760864 716.22699) 36573 POINT(590.648071 262.00705) 36574 POINT(22.3597431 483.712494) 36575 POINT(555.634216 107.467201) 36576 POINT(71.0969315 5.63569355) 36577 POINT(343.14978 287.097809) 36578 POINT(346.082275 411.797852) 36579 POINT(953.158325 685.181335) 36580 POINT(262.213898 244.666718) 36581 POINT(775.30249 656.511108) 36582 POINT(643.210571 390.18869) 36583 POINT(357.416473 224.579895) 36584 POINT(461.302826 568.61853) 36585 POINT(383.533997 570.741821) 36586 POINT(852.13385 863.316284) 36587 POINT(804.921021 49.4478683) 36588 POINT(408.093079 329.093842) 36589 POINT(212.638443 46.5068436) 36590 POINT(118.528069 857.164001) 36591 POINT(859.25177 28.455389) 36592 POINT(755.749329 439.846039) 36593 POINT(938.556946 784.384155) 36594 POINT(842.280579 924.318726) 36595 POINT(601.717041 325.437836) 36596 POINT(621.353516 560.936279) 36597 POINT(840.261414 135.787201) 36598 POINT(186.279449 818.584534) 36599 POINT(493.373474 431.888306) 36600 POINT(305.237427 378.557068) 36601 POINT(759.28418 19.6474113) 36602 POINT(659.526123 141.375854) 36603 POINT(307.042236 992.679077) 36604 POINT(551.878052 840.415161) 36605 POINT(322.191132 405.778625) 36606 POINT(446.59787 195.272964) 36607 POINT(82.8437576 718.255859) 36608 POINT(487.760712 840.357361) 36609 POINT(284.306763 29.748703) 36610 POINT(871.308838 804.535034) 36611 POINT(721.905762 240.023895) 36612 POINT(290.563141 510.96048) 36613 POINT(842.254333 333.185608) 36614 POINT(754.487305 918.03186) 36615 POINT(400.281586 110.374016) 36616 POINT(719.206848 979.09729) 36617 POINT(158.384796 233.796143) 36618 POINT(454.107635 396.967529) 36619 POINT(458.749451 274.769928) 36620 POINT(865.76825 167.027496) 36621 POINT(141.924011 220.977859) 36622 POINT(60.5865974 507.935883) 36623 POINT(804.044739 250.547791) 36624 POINT(877.937988 980.353821) 36625 POINT(739.677063 445.755524) 36626 POINT(560.871948 291.258179) 36627 POINT(143.212311 935.553589) 36628 POINT(944.660339 14.2205) 36629 POINT(603.385132 927.87561) 36630 POINT(782.023926 155.221146) 36631 POINT(565.146362 439.471252) 36632 POINT(537.782104 730.422363) 36633 POINT(21.3387165 738.243652) 36634 POINT(578.308411 758.744934) 36635 POINT(82.0199051 581.671082) 36636 POINT(758.984497 910.629761) 36637 POINT(428.609131 31.4901562) 36638 POINT(35.392662 488.176117) 36639 POINT(748.187866 731.634033) 36640 POINT(653.966064 74.7255249) 36641 POINT(643.267395 101.304573) 36642 POINT(431.053802 608.313721) 36643 POINT(885.280762 481.484528) 36644 POINT(524.79248 468.288116) 36645 POINT(215.217651 210.274857) 36646 POINT(313.880188 473.441925) 36647 POINT(759.58905 234.890701) 36648 POINT(596.521667 169.544205) 36649 POINT(919.780151 806.325256) 36650 POINT(339.767578 21.0551491) 36651 POINT(781.470642 172.56813) 36652 POINT(875.659546 843.653625) 36653 POINT(479.917145 879.444092) 36654 POINT(440.580811 139.127258) 36655 POINT(926.396912 211.848389) 36656 POINT(675.696716 680.978027) 36657 POINT(59.0012054 635.246155) 36658 POINT(490.173004 397.189209) 36659 POINT(613.386108 516.251953) 36660 POINT(78.921669 96.0240707) 36661 POINT(930.285706 366.015167) 36662 POINT(880.023865 62.1444397) 36663 POINT(718.954346 830.730164) 36664 POINT(553.901062 835.040833) 36665 POINT(999.742676 385.223877) 36666 POINT(320.079987 281.664581) 36667 POINT(753.348816 419.218536) 36668 POINT(54.4637299 242.790115) 36669 POINT(535.692871 158.130417) 36670 POINT(739.94873 811.173157) 36671 POINT(480.709747 663.369324) 36672 POINT(188.71965 572.797791) 36673 POINT(541.659241 308.901611) 36674 POINT(381.419891 684.838013) 36675 POINT(425.940735 444.80899) 36676 POINT(465.590485 390.432861) 36677 POINT(698.134277 13.8150768) 36678 POINT(45.3571472 786.657654) 36679 POINT(778.449341 277.991394) 36680 POINT(201.524246 314.450256) 36681 POINT(694.458008 400.443665) 36682 POINT(984.323669 364.641083) 36683 POINT(176.553589 786.695129) 36684 POINT(401.511169 570.172485) 36685 POINT(73.7621536 964.327576) 36686 POINT(116.875099 149.244034) 36687 POINT(736.232666 524.440063) 36688 POINT(816.213806 86.2743835) 36689 POINT(421.944427 687.490479) 36690 POINT(80.2748108 886.639526) 36691 POINT(474.031372 327.573181) 36692 POINT(420.969116 157.173752) 36693 POINT(845.892273 497.258301) 36694 POINT(135.454865 778.06366) 36695 POINT(966.313477 359.503052) 36696 POINT(762.616089 14.3204765) 36697 POINT(206.686554 939.190247) 36698 POINT(91.3684921 528.392273) 36699 POINT(685.689087 755.535889) 36700 POINT(976.547668 2.21525383) 36701 POINT(500.270172 454.533264) 36702 POINT(225.448532 450.26889) 36703 POINT(960.326233 309.994659) 36704 POINT(789.08075 438.778381) 36705 POINT(111.077591 450.463531) 36706 POINT(642.707458 344.515778) 36707 POINT(912.987976 960.779175) 36708 POINT(489.183716 654.727905) 36709 POINT(403.375977 430.478607) 36710 POINT(638.084534 683.227905) 36711 POINT(54.0203209 921.250305) 36712 POINT(678.795959 152.915863) 36713 POINT(260.578979 812.656982) 36714 POINT(404.966644 958.860168) 36715 POINT(426.14859 185.2995) 36716 POINT(592.419678 306.10968) 36717 POINT(734.550659 705.102539) 36718 POINT(867.378113 930.784058) 36719 POINT(328.82254 788.690613) 36720 POINT(914.358887 520.495972) 36721 POINT(924.924866 830.742493) 36722 POINT(504.157593 900.203857) 36723 POINT(685.983459 648.237976) 36724 POINT(315.926025 332.222046) 36725 POINT(572.724121 997.750732) 36726 POINT(780.507263 74.9864349) 36727 POINT(63.5098686 20.1101875) 36728 POINT(385.132599 475.57962) 36729 POINT(623.06897 997.217834) 36730 POINT(205.623566 547.871887) 36731 POINT(191.229935 619.527954) 36732 POINT(227.824509 563.975281) 36733 POINT(188.52652 576.291748) 36734 POINT(94.6850891 404.698212) 36735 POINT(599.273071 226.347626) 36736 POINT(781.918945 658.619629) 36737 POINT(927.655884 182.865585) 36738 POINT(829.297119 3.68523049) 36739 POINT(639.664856 164.501984) 36740 POINT(805.344299 664.907959) 36741 POINT(842.564331 506.987976) 36742 POINT(782.560059 522.488403) 36743 POINT(731.452698 387.993561) 36744 POINT(573.480469 192.752625) 36745 POINT(894.79718 454.525909) 36746 POINT(103.250862 456.64682) 36747 POINT(141.282349 32.114563) 36748 POINT(553.341797 244.667709) 36749 POINT(640.641846 80.209343) 36750 POINT(238.175568 871.213501) 36751 POINT(991.228638 195.792252) 36752 POINT(709.440918 854.194885) 36753 POINT(294.933807 180.039734) 36754 POINT(412.573212 856.770569) 36755 POINT(471.815613 409.436707) 36756 POINT(640.215393 587.298706) 36757 POINT(246.710403 697.145386) 36758 POINT(285.519348 821.695618) 36759 POINT(430.544952 712.39325) 36760 POINT(444.097015 640.648499) 36761 POINT(70.5667801 830.51886) 36762 POINT(650.599915 964.4599) 36763 POINT(604.88446 515.078918) 36764 POINT(70.7463989 123.242966) 36765 POINT(504.325012 752.67218) 36766 POINT(361.694916 512.902832) 36767 POINT(773.550049 453.109497) 36768 POINT(925.671936 991.623718) 36769 POINT(696.635986 140.098679) 36770 POINT(629.532776 91.841507) 36771 POINT(11.0492744 254.198517) 36772 POINT(665.397949 23.960783) 36773 POINT(267.391327 299.529999) 36774 POINT(456.745636 886.038086) 36775 POINT(47.8350258 233.338211) 36776 POINT(445.541534 164.584747) 36777 POINT(369.329956 533.3302) 36778 POINT(257.47702 102.461296) 36779 POINT(462.053375 407.74765) 36780 POINT(365.602173 548.077576) 36781 POINT(990.982971 528.96875) 36782 POINT(642.162903 603.943542) 36783 POINT(58.7500381 380.30011) 36784 POINT(491.965759 520.82373) 36785 POINT(199.106339 980.367493) 36786 POINT(938.928162 485.748169) 36787 POINT(328.53421 78.6185303) 36788 POINT(634.567505 17.9624767) 36789 POINT(883.010986 353.01651) 36790 POINT(270.109741 797.225586) 36791 POINT(320.080902 156.754349) 36792 POINT(2.8549192 724.970642) 36793 POINT(833.705627 690.106812) 36794 POINT(905.739868 572.652161) 36795 POINT(609.485352 367.341553) 36796 POINT(973.13739 555.645386) 36797 POINT(667.526917 623.528198) 36798 POINT(175.390717 828.507507) 36799 POINT(304.366638 494.344299) 36800 POINT(462.103302 112.044121) 36801 POINT(186.938583 301.43338) 36802 POINT(435.604187 208.863174) 36803 POINT(181.749908 499.993103) 36804 POINT(820.231689 956.978821) 36805 POINT(260.439697 773.169861) 36806 POINT(462.199982 516.215942) 36807 POINT(126.139328 384.231232) 36808 POINT(734.020935 725.950684) 36809 POINT(199.028671 482.73291) 36810 POINT(165.074982 452.016602) 36811 POINT(7.82732439 880.969055) 36812 POINT(357.401215 332.950287) 36813 POINT(908.42926 913.495789) 36814 POINT(707.678406 509.306976) 36815 POINT(21.3677692 522.671692) 36816 POINT(780.394348 783.33728) 36817 POINT(804.291199 99.8227005) 36818 POINT(954.166321 109.291878) 36819 POINT(290.274078 793.280212) 36820 POINT(987.027954 397.052368) 36821 POINT(591.836487 675.273621) 36822 POINT(664.310608 754.338928) 36823 POINT(236.385818 59.1951675) 36824 POINT(654.708618 566.704773) 36825 POINT(531.930115 362.460236) 36826 POINT(9.55656338 181.810318) 36827 POINT(810.980042 719.026001) 36828 POINT(503.701294 527.615417) 36829 POINT(742.311768 326.214691) 36830 POINT(793.194336 246.297058) 36831 POINT(189.586975 545.03772) 36832 POINT(418.060608 0.687206388) 36833 POINT(415.733276 609.584106) 36834 POINT(223.430023 532.23877) 36835 POINT(943.601562 502.702393) 36836 POINT(228.30159 984.01062) 36837 POINT(576.003052 951.265015) 36838 POINT(210.211731 504.57724) 36839 POINT(19.166193 429.488678) 36840 POINT(871.295959 415.404541) 36841 POINT(138.448715 643.444336) 36842 POINT(934.986633 342.004852) 36843 POINT(77.4322739 830.00116) 36844 POINT(624.322937 905.628479) 36845 POINT(593.064758 730.613831) 36846 POINT(877.135559 465.534515) 36847 POINT(880.190491 701.805847) 36848 POINT(247.900116 250.793854) 36849 POINT(586.621582 772.778137) 36850 POINT(571.651672 174.530273) 36851 POINT(440.993805 744.755493) 36852 POINT(165.965424 972.53949) 36853 POINT(44.2686386 600.575745) 36854 POINT(119.700203 733.00293) 36855 POINT(604.279114 526.355957) 36856 POINT(262.174988 705.825989) 36857 POINT(241.673981 975.187195) 36858 POINT(877.016357 710.888611) 36859 POINT(563.62616 176.688995) 36860 POINT(477.529205 856.743347) 36861 POINT(415.497955 832.502197) 36862 POINT(804.669434 378.192505) 36863 POINT(585.175415 968.636414) 36864 POINT(157.232773 586.513794) 36865 POINT(83.0091095 838.872925) 36866 POINT(682.540466 474.293518) 36867 POINT(863.360352 702.624329) 36868 POINT(13.6407089 842.91272) 36869 POINT(230.906326 314.879486) 36870 POINT(757.932007 730.370483) 36871 POINT(3.49019265 159.834747) 36872 POINT(647.337646 856.617981) 36873 POINT(928.919983 193.886093) 36874 POINT(430.048615 109.823868) 36875 POINT(99.3540497 13.807457) 36876 POINT(799.842651 247.537903) 36877 POINT(725.522217 573.768921) 36878 POINT(255.656418 849.73175) 36879 POINT(753.899536 497.581665) 36880 POINT(899.127075 644.957092) 36881 POINT(391.08493 593.046326) 36882 POINT(902.051392 35.7917671) 36883 POINT(677.171021 812.003906) 36884 POINT(3.07927561 515.378418) 36885 POINT(188.080597 816.745361) 36886 POINT(670.535767 623.86615) 36887 POINT(688.076904 730.554565) 36888 POINT(946.24353 713.227661) 36889 POINT(868.430786 52.6889) 36890 POINT(866.921875 533.160156) 36891 POINT(45.1865311 107.023048) 36892 POINT(351.607697 122.128281) 36893 POINT(24.8627892 535.49054) 36894 POINT(605.154358 679.227905) 36895 POINT(36.6417313 24.5868855) 36896 POINT(181.908264 638.240662) 36897 POINT(256.144806 713.393982) 36898 POINT(595.960083 589.41571) 36899 POINT(670.399353 138.327316) 36900 POINT(673.866821 662.200806) 36901 POINT(845.325989 452.197723) 36902 POINT(94.5073776 549.01355) 36903 POINT(123.405159 357.940765) 36904 POINT(823.968323 212.481415) 36905 POINT(295.617035 330.855225) 36906 POINT(459.375275 63.3037453) 36907 POINT(331.931549 393.381561) 36908 POINT(75.8349915 750.539062) 36909 POINT(120.303589 844.94342) 36910 POINT(709.703918 788.855347) 36911 POINT(735.194397 843.397827) 36912 POINT(496.94754 816.897461) 36913 POINT(741.09375 757.043884) 36914 POINT(58.2182808 986.831177) 36915 POINT(720.497742 445.399872) 36916 POINT(526.407654 617.358948) 36917 POINT(213.557297 537.182434) 36918 POINT(644.886292 981.735229) 36919 POINT(760.537048 824.825562) 36920 POINT(325.63385 769.822693) 36921 POINT(768.823792 821.824219) 36922 POINT(599.2948 70.9436264) 36923 POINT(582.124878 583.145264) 36924 POINT(870.326355 524.72998) 36925 POINT(837.462952 86.5232315) 36926 POINT(119.395073 823.526794) 36927 POINT(960.48645 845.874634) 36928 POINT(184.732697 905.942322) 36929 POINT(304.479095 275.177185) 36930 POINT(470.09082 731.283264) 36931 POINT(894.403442 455.43924) 36932 POINT(538.190369 383.901428) 36933 POINT(233.610519 957.938843) 36934 POINT(677.212585 730.570679) 36935 POINT(984.869507 838.464355) 36936 POINT(999.119324 889.20575) 36937 POINT(194.629608 700.188232) 36938 POINT(220.741257 200.433441) 36939 POINT(813.552002 203.036407) 36940 POINT(473.081543 202.278748) 36941 POINT(629.100281 716.570312) 36942 POINT(215.715073 660.689819) 36943 POINT(997.237976 128.711472) 36944 POINT(239.219894 13.5937223) 36945 POINT(398.055542 556.9552) 36946 POINT(410.073883 543.056335) 36947 POINT(380.575775 800.521973) 36948 POINT(43.3350868 238.957428) 36949 POINT(769.315735 525.278687) 36950 POINT(825.765503 89.0509338) 36951 POINT(521.804749 107.959305) 36952 POINT(6.05364895 495.645447) 36953 POINT(622.676697 767.573303) 36954 POINT(22.7586536 640.329895) 36955 POINT(224.800873 580.886658) 36956 POINT(960.985718 997.720215) 36957 POINT(577.954651 482.10141) 36958 POINT(775.177673 330.278809) 36959 POINT(375.646149 666.563171) 36960 POINT(350.466705 512.652222) 36961 POINT(83.8809433 502.3526) 36962 POINT(414.594513 460.090546) 36963 POINT(753.065002 165.436478) 36964 POINT(475.421936 436.403778) 36965 POINT(245.100494 582.770569) 36966 POINT(217.583374 648.228638) 36967 POINT(799.451538 738.088379) 36968 POINT(721.089172 490.423889) 36969 POINT(310.032776 77.4251099) 36970 POINT(992.9646 179.087341) 36971 POINT(562.846313 271.693207) 36972 POINT(361.778717 21.5415936) 36973 POINT(294.113617 343.447418) 36974 POINT(458.733459 844.823975) 36975 POINT(150.101944 551.577271) 36976 POINT(685.546448 394.534546) 36977 POINT(170.943436 123.896881) 36978 POINT(89.4911804 973.754578) 36979 POINT(67.6118393 121.941795) 36980 POINT(473.600464 507.188568) 36981 POINT(428.125214 368.831299) 36982 POINT(862.264465 269.365234) 36983 POINT(768.357849 439.541016) 36984 POINT(319.456573 28.9528465) 36985 POINT(555.083618 438.701965) 36986 POINT(731.921509 545.908508) 36987 POINT(572.665527 425.080902) 36988 POINT(879.305054 566.83429) 36989 POINT(206.914246 400.797821) 36990 POINT(726.961548 439.716125) 36991 POINT(884.938782 299.333069) 36992 POINT(907.743774 595.9646) 36993 POINT(371.320007 177.314255) 36994 POINT(272.275909 699.774597) 36995 POINT(289.778961 154.433075) 36996 POINT(851.98053 657.310913) 36997 POINT(854.949097 632.723206) 36998 POINT(717.549377 716.773621) 36999 POINT(678.274841 55.5600433) 37000 POINT(852.801086 21.2924423) 37001 POINT(800.957275 298.47345) 37002 POINT(78.2892761 536.75177) 37003 POINT(28.8845291 594.170532) 37004 POINT(232.045563 743.601624) 37005 POINT(751.374878 324.651031) 37006 POINT(681.042297 723.627686) 37007 POINT(847.211853 721.186462) 37008 POINT(934.031372 798.320068) 37009 POINT(975.86615 421.081512) 37010 POINT(745.177368 84.3194122) 37011 POINT(555.112976 377.013031) 37012 POINT(932.304688 763.456787) 37013 POINT(402.727844 4.45742369) 37014 POINT(930.684509 450.817596) 37015 POINT(311.951904 904.989746) 37016 POINT(313.299866 355.326355) 37017 POINT(508.479462 503.425659) 37018 POINT(534.759033 425.494202) 37019 POINT(849.456482 485.853699) 37020 POINT(604.930115 960.7229) 37021 POINT(949.158203 790.171021) 37022 POINT(329.511841 239.090256) 37023 POINT(906.509033 863.021179) 37024 POINT(930.828064 199.635971) 37025 POINT(549.436829 4.88434935) 37026 POINT(998.965454 645.241943) 37027 POINT(761.338379 441.969696) 37028 POINT(739.901062 466.291534) 37029 POINT(504.942322 618.604004) 37030 POINT(755.566772 81.0674667) 37031 POINT(175.963333 441.730072) 37032 POINT(186.060837 342.593048) 37033 POINT(298.659912 440.272491) 37034 POINT(994.768188 160.251526) 37035 POINT(791.370789 152.473434) 37036 POINT(714.43158 755.573914) 37037 POINT(884.065796 415.450378) 37038 POINT(780.797119 933.228149) 37039 POINT(641.792786 510.406158) 37040 POINT(48.0381851 759.263611) 37041 POINT(145.638626 486.981873) 37042 POINT(547.556763 248.476959) 37043 POINT(992.58197 139.660583) 37044 POINT(562.918579 861.407959) 37045 POINT(511.65863 492.007812) 37046 POINT(645.669922 979.611633) 37047 POINT(148.565704 730.597473) 37048 POINT(989.802368 886.773315) 37049 POINT(864.710388 55.07341) 37050 POINT(269.99704 844.853577) 37051 POINT(228.393448 124.911659) 37052 POINT(486.941132 471.303375) 37053 POINT(572.063599 703.679382) 37054 POINT(861.532654 38.6483536) 37055 POINT(155.27359 760.159424) 37056 POINT(391.372101 415.186676) 37057 POINT(541.11322 980.477295) 37058 POINT(293.401978 919.594971) 37059 POINT(275.629456 189.802795) 37060 POINT(374.842255 287.931458) 37061 POINT(694.319336 155.41095) 37062 POINT(22.751358 554.524597) 37063 POINT(84.5869522 239.591583) 37064 POINT(305.814697 874.834106) 37065 POINT(153.593765 251.457184) 37066 POINT(918.645935 5.47663927) 37067 POINT(510.838989 987.082397) 37068 POINT(850.424561 281.765961) 37069 POINT(725.838928 489.221466) 37070 POINT(660.658569 864.486633) 37071 POINT(93.3143692 158.318054) 37072 POINT(732.947937 773.99292) 37073 POINT(989.352112 928.494995) 37074 POINT(443.653595 690.512573) 37075 POINT(168.212402 724.169678) 37076 POINT(620.29071 714.780762) 37077 POINT(395.065948 38.9811974) 37078 POINT(221.341019 683.491516) 37079 POINT(877.346497 448.568329) 37080 POINT(795.202209 290.828552) 37081 POINT(317.104095 167.75209) 37082 POINT(874.494568 142.43161) 37083 POINT(407.373291 891.831482) 37084 POINT(139.360367 64.1113052) 37085 POINT(913.888489 387.595062) 37086 POINT(499.2995 997.609985) 37087 POINT(374.366364 904.51416) 37088 POINT(460.174744 773.502441) 37089 POINT(994.042542 8.26371002) 37090 POINT(477.115692 981.358704) 37091 POINT(679.327087 960.693542) 37092 POINT(864.094421 224.585266) 37093 POINT(820.592773 111.746933) 37094 POINT(109.011002 807.588318) 37095 POINT(477.60672 774.319336) 37096 POINT(704.407104 552.352295) 37097 POINT(932.478577 833.022278) 37098 POINT(376.741577 67.108696) 37099 POINT(128.8479 518.242432) 37100 POINT(612.958374 619.029419) 37101 POINT(614.137817 749.361267) 37102 POINT(826.425293 413.975067) 37103 POINT(123.936195 622.757751) 37104 POINT(262.916748 818.052002) 37105 POINT(601.944641 664.10614) 37106 POINT(661.974609 17.497509) 37107 POINT(21.58424 568.974731) 37108 POINT(803.655212 95.258461) 37109 POINT(980.531799 274.938141) 37110 POINT(882.426636 185.218796) 37111 POINT(369.55542 312.057404) 37112 POINT(359.014557 569.656006) 37113 POINT(992.539917 702.010315) 37114 POINT(700.626404 524.078186) 37115 POINT(434.165497 970.348816) 37116 POINT(586.660156 738.652283) 37117 POINT(662.09198 617.918274) 37118 POINT(540.292358 0.143457234) 37119 POINT(316.584015 198.625) 37120 POINT(58.9389534 886.435852) 37121 POINT(715.299927 769.334595) 37122 POINT(624.310913 781.707153) 37123 POINT(695.590088 227.19696) 37124 POINT(144.587357 979.227722) 37125 POINT(270.369049 9.233778) 37126 POINT(539.178772 806.207458) 37127 POINT(3.82005739 893.308533) 37128 POINT(145.838562 27.4141541) 37129 POINT(165.370956 568.986267) 37130 POINT(188.831467 598.347534) 37131 POINT(318.176605 117.252342) 37132 POINT(676.920654 622.111633) 37133 POINT(593.517334 191.20163) 37134 POINT(235.666748 984.952454) 37135 POINT(624.953186 182.853638) 37136 POINT(657.63385 112.502563) 37137 POINT(923.771179 917.052979) 37138 POINT(467.392365 1.51523173) 37139 POINT(406.358948 870.448669) 37140 POINT(839.639465 680.320312) 37141 POINT(198.892059 775.915283) 37142 POINT(525.397217 466.048798) 37143 POINT(687.512634 960.209961) 37144 POINT(483.289642 389.150146) 37145 POINT(823.519409 360.502563) 37146 POINT(83.6661987 407.774689) 37147 POINT(781.607483 874.647705) 37148 POINT(659.27063 138.753204) 37149 POINT(381.654785 287.291138) 37150 POINT(876.828308 781.342712) 37151 POINT(975.831055 261.343933) 37152 POINT(662.029541 338.408173) 37153 POINT(355.912903 839.865234) 37154 POINT(941.748779 671.690002) 37155 POINT(311.7565 130.451065) 37156 POINT(190.898071 28.3055153) 37157 POINT(760.16864 671.926331) 37158 POINT(59.1455917 500.312897) 37159 POINT(431.306244 756.214294) 37160 POINT(280.023407 124.317581) 37161 POINT(342.734894 307.055634) 37162 POINT(660.032104 580.637756) 37163 POINT(183.019638 927.753418) 37164 POINT(439.660919 439.00708) 37165 POINT(68.9640884 313.923523) 37166 POINT(396.355988 738.341675) 37167 POINT(313.240906 291.566162) 37168 POINT(109.079132 140.52565) 37169 POINT(50.1740837 458.489624) 37170 POINT(166.02742 611.888245) 37171 POINT(102.974922 466.691864) 37172 POINT(315.272064 351.093231) 37173 POINT(950.056885 838.839172) 37174 POINT(629.597351 679.207153) 37175 POINT(253.542725 333.200439) 37176 POINT(381.870422 658.03772) 37177 POINT(170.236481 993.65332) 37178 POINT(159.169022 18.3606339) 37179 POINT(672.799927 395.649109) 37180 POINT(639.087524 412.914124) 37181 POINT(793.399475 241.91188) 37182 POINT(719.694519 303.203552) 37183 POINT(68.5653076 405.374481) 37184 POINT(348.231079 828.01062) 37185 POINT(345.431274 59.2795181) 37186 POINT(398.630219 559.459106) 37187 POINT(417.038849 488.96579) 37188 POINT(473.258667 44.5886497) 37189 POINT(927.246521 125.726562) 37190 POINT(171.993103 762.29425) 37191 POINT(441.371552 874.990295) 37192 POINT(507.047607 543.493469) 37193 POINT(162.511871 789.288818) 37194 POINT(23.1828747 443.395325) 37195 POINT(209.182526 937.018738) 37196 POINT(291.498108 496.309113) 37197 POINT(709.216614 82.4709473) 37198 POINT(715.502441 93.7056503) 37199 POINT(837.700684 678.226685) 37200 POINT(658.281189 914.023132) 37201 POINT(791.053406 100.650536) 37202 POINT(360.131714 297.404419) 37203 POINT(81.3427353 971.321106) 37204 POINT(760.99054 740.203247) 37205 POINT(318.831085 505.940613) 37206 POINT(418.378937 213.366531) 37207 POINT(268.920074 837.271667) 37208 POINT(169.650421 356.979187) 37209 POINT(692.647766 155.320892) 37210 POINT(930.354309 232.260071) 37211 POINT(656.30188 797.300476) 37212 POINT(154.979874 324.659607) 37213 POINT(302.310699 368.448853) 37214 POINT(571.780945 380.600433) 37215 POINT(765.243103 864.810669) 37216 POINT(102.505608 559.606018) 37217 POINT(76.4977417 148.413666) 37218 POINT(606.478699 317.495087) 37219 POINT(690.219543 57.412159) 37220 POINT(665.564087 570.022156) 37221 POINT(170.412216 747.797485) 37222 POINT(924.126465 575.476318) 37223 POINT(672.494751 403.928009) 37224 POINT(91.4266739 815.607239) 37225 POINT(27.1912746 332.760193) 37226 POINT(131.228989 33.7340813) 37227 POINT(464.276886 297.24234) 37228 POINT(136.228439 734.561401) 37229 POINT(600.085754 139.465073) 37230 POINT(97.784729 480.224426) 37231 POINT(135.705246 701.076721) 37232 POINT(122.075066 490.219238) 37233 POINT(480.437073 440.014832) 37234 POINT(452.970978 518.543823) 37235 POINT(13.5404663 157.258774) 37236 POINT(983.64917 29.6272697) 37237 POINT(40.7341919 839.168518) 37238 POINT(270.233612 6.12298346) 37239 POINT(382.814056 759.773682) 37240 POINT(601.831482 617.670288) 37241 POINT(472.542938 908.461853) 37242 POINT(585.488708 672.208252) 37243 POINT(431.326385 262.864532) 37244 POINT(328.298096 612.890259) 37245 POINT(775.85553 930.95459) 37246 POINT(451.713165 557.262878) 37247 POINT(671.764709 272.676178) 37248 POINT(367.750519 884.930542) 37249 POINT(339.418121 577.680542) 37250 POINT(949.023071 439.833984) 37251 POINT(737.346191 35.4112358) 37252 POINT(603.379944 938.577454) 37253 POINT(740.850464 665.977417) 37254 POINT(941.407104 472.595642) 37255 POINT(14.2722149 679.695862) 37256 POINT(526.363342 505.660339) 37257 POINT(790.880676 760.224365) 37258 POINT(399.604156 836.192383) 37259 POINT(47.915863 896.827881) 37260 POINT(161.633362 93.6095276) 37261 POINT(647.775024 267.118286) 37262 POINT(794.183594 337.671265) 37263 POINT(39.5437088 949.806702) 37264 POINT(269.859955 738.262329) 37265 POINT(36.0513153 850.470154) 37266 POINT(403.707794 529.705017) 37267 POINT(36.509037 590.521973) 37268 POINT(649.526917 998.544312) 37269 POINT(217.821014 444.604004) 37270 POINT(379.925873 107.472672) 37271 POINT(611.234436 934.202881) 37272 POINT(63.1817207 51.9436493) 37273 POINT(385.615082 880.794739) 37274 POINT(65.268692 51.9782867) 37275 POINT(922.935547 591.208435) 37276 POINT(168.381622 602.234497) 37277 POINT(572.303955 157.779816) 37278 POINT(367.485168 231.752213) 37279 POINT(60.91959 388.463257) 37280 POINT(846.556335 194.694977) 37281 POINT(6.73165417 685.233704) 37282 POINT(962.080322 949.29364) 37283 POINT(479.426819 826.323303) 37284 POINT(491.950439 449.104279) 37285 POINT(82.9412308 408.193848) 37286 POINT(715.285767 224.277084) 37287 POINT(151.363388 11.378231) 37288 POINT(148.005524 667.09198) 37289 POINT(756.376099 580.779907) 37290 POINT(998.613464 442.459595) 37291 POINT(791.909424 181.678192) 37292 POINT(859.987244 247.95253) 37293 POINT(232.200806 99.1483002) 37294 POINT(500.614502 367.389526) 37295 POINT(132.867111 98.0955734) 37296 POINT(250.357147 355.826141) 37297 POINT(268.890961 726.476868) 37298 POINT(732.284241 411.431793) 37299 POINT(764.747498 514.011414) 37300 POINT(117.335152 321.187378) 37301 POINT(284.501831 246.874496) 37302 POINT(669.625671 493.288361) 37303 POINT(505.976715 655.241333) 37304 POINT(807.293213 330.870361) 37305 POINT(723.530884 570.464294) 37306 POINT(880.203613 771.107422) 37307 POINT(607.235962 143.092651) 37308 POINT(218.066681 63.3998947) 37309 POINT(819.048828 78.4876709) 37310 POINT(40.0922012 33.4378815) 37311 POINT(353.831635 75.6719513) 37312 POINT(552.9646 60.186512) 37313 POINT(967.781311 45.1312866) 37314 POINT(963.438354 554.700378) 37315 POINT(790.125366 46.0368156) 37316 POINT(364.205994 788.181824) 37317 POINT(425.08017 801.877686) 37318 POINT(138.934891 777.510437) 37319 POINT(357.436035 720.514343) 37320 POINT(999.703918 545.880554) 37321 POINT(922.232544 420.533722) 37322 POINT(295.816132 271.102661) 37323 POINT(210.459625 226.483902) 37324 POINT(298.565155 592.094482) 37325 POINT(110.312653 82.6920776) 37326 POINT(706.56073 33.269043) 37327 POINT(857.133667 6.14924955) 37328 POINT(268.367798 135.711639) 37329 POINT(442.789734 976.231995) 37330 POINT(774.304871 352.639618) 37331 POINT(553.008301 981.300659) 37332 POINT(521.225342 114.694893) 37333 POINT(223.362762 513.56781) 37334 POINT(950.041443 128.796005) 37335 POINT(573.5672 843.795349) 37336 POINT(445.839874 13.8614626) 37337 POINT(66.0009689 901.705505) 37338 POINT(177.998428 759.623962) 37339 POINT(86.5740128 37.460392) 37340 POINT(449.194214 323.524933) 37341 POINT(940.926575 610.767578) 37342 POINT(877.163635 448.474243) 37343 POINT(851.404602 529.34906) 37344 POINT(114.225563 624.870178) 37345 POINT(313.284149 85.5002518) 37346 POINT(932.739014 58.1154861) 37347 POINT(383.456696 781.757568) 37348 POINT(788.771179 702.970459) 37349 POINT(620.498962 123.377106) 37350 POINT(293.381897 444.126984) 37351 POINT(539.111572 431.137512) 37352 POINT(946.270081 534.645142) 37353 POINT(479.833984 703.264954) 37354 POINT(548.408508 537.292664) 37355 POINT(700.356018 56.012825) 37356 POINT(640.150818 475.896088) 37357 POINT(569.413757 690.220032) 37358 POINT(293.705872 312.722778) 37359 POINT(868.053955 73.240097) 37360 POINT(511.530792 482.448395) 37361 POINT(83.9905472 764.833374) 37362 POINT(185.919403 182.842346) 37363 POINT(8.99279213 240.424942) 37364 POINT(103.797012 736.962219) 37365 POINT(30.9860172 129.64621) 37366 POINT(331.552612 282.0513) 37367 POINT(944.20874 462.034943) 37368 POINT(687.835266 627.769592) 37369 POINT(402.850372 30.5077744) 37370 POINT(60.9363899 572.773499) 37371 POINT(914.731201 597.726318) 37372 POINT(408.117645 626.530457) 37373 POINT(438.537201 897.349426) 37374 POINT(196.595596 695.776978) 37375 POINT(715.767395 753.627136) 37376 POINT(322.556061 245.99057) 37377 POINT(769.901489 956.700378) 37378 POINT(641.360535 12.0619287) 37379 POINT(951.482239 100.79776) 37380 POINT(827.972473 924.063477) 37381 POINT(238.085419 497.371857) 37382 POINT(483.641693 339.27597) 37383 POINT(529.9104 609.81427) 37384 POINT(38.2339973 376.747314) 37385 POINT(560.463867 581.089111) 37386 POINT(845.606628 472.531525) 37387 POINT(991.170776 216.398849) 37388 POINT(913.544373 689.926208) 37389 POINT(830.481201 881.450134) 37390 POINT(384.566895 697.66333) 37391 POINT(642.036438 840.24585) 37392 POINT(327.080414 178.89621) 37393 POINT(40.7158546 507.443787) 37394 POINT(698.705505 154.378601) 37395 POINT(756.046204 367.670532) 37396 POINT(799.105652 834.493286) 37397 POINT(433.770264 121.860321) 37398 POINT(885.342773 87.4162521) 37399 POINT(290.725616 178.432877) 37400 POINT(328.890289 995.990479) 37401 POINT(506.088623 400.278687) 37402 POINT(153.262054 735.745667) 37403 POINT(672.119324 48.0658073) 37404 POINT(611.210693 743.47113) 37405 POINT(916.564819 892.917664) 37406 POINT(700.184082 852.999817) 37407 POINT(201.719284 289.263885) 37408 POINT(936.897339 386.173096) 37409 POINT(384.80954 649.488281) 37410 POINT(32.3007278 626.750732) 37411 POINT(552.005127 809.364868) 37412 POINT(245.846191 338.33847) 37413 POINT(903.204102 546.28717) 37414 POINT(524.849609 69.9012604) 37415 POINT(634.197144 355.683228) 37416 POINT(126.102074 620.392395) 37417 POINT(232.375519 115.122055) 37418 POINT(301.029114 794.378296) 37419 POINT(845.454224 596.43103) 37420 POINT(34.0700455 200.813324) 37421 POINT(701.486084 815.261719) 37422 POINT(441.126862 445.479553) 37423 POINT(332.63269 842.188599) 37424 POINT(648.604248 402.84671) 37425 POINT(792.737915 112.454788) 37426 POINT(124.551659 974.638489) 37427 POINT(445.853363 151.363586) 37428 POINT(65.6702423 640.252197) 37429 POINT(853.750916 433.163422) 37430 POINT(554.532227 359.035706) 37431 POINT(997.509094 282.803467) 37432 POINT(490.471252 817.564575) 37433 POINT(551.980225 47.5083542) 37434 POINT(418.563965 338.400757) 37435 POINT(290.976013 459.703888) 37436 POINT(190.375122 832.887329) 37437 POINT(362.097778 201.025177) 37438 POINT(197.25737 232.510849) 37439 POINT(138.175415 191.18071) 37440 POINT(734.672913 755.02594) 37441 POINT(460.269257 363.181549) 37442 POINT(850.059631 927.307678) 37443 POINT(246.265472 461.350952) 37444 POINT(966.146118 411.808807) 37445 POINT(888.516418 289.707794) 37446 POINT(278.394104 673.217896) 37447 POINT(421.125946 440.494232) 37448 POINT(724.614868 322.731232) 37449 POINT(747.862183 706.144104) 37450 POINT(495.0802 426.175903) 37451 POINT(8.93012619 498.842712) 37452 POINT(74.0841446 136.597382) 37453 POINT(480.714142 811.609741) 37454 POINT(613.467712 80.0130997) 37455 POINT(876.982666 710.774109) 37456 POINT(672.801147 993.624878) 37457 POINT(10.9492407 474.65097) 37458 POINT(610.5401 88.2900696) 37459 POINT(21.1335659 225.659256) 37460 POINT(969.481384 521.514648) 37461 POINT(624.420471 947.125366) 37462 POINT(315.310852 654.313965) 37463 POINT(579.462646 851.341858) 37464 POINT(109.157425 496.278564) 37465 POINT(993.114868 157.433365) 37466 POINT(227.157532 879.996033) 37467 POINT(630.559875 947.204407) 37468 POINT(788.548706 551.156311) 37469 POINT(672.949158 161.007568) 37470 POINT(578.309265 7.36936283) 37471 POINT(659.611877 256.002228) 37472 POINT(813.546143 700.741211) 37473 POINT(738.197083 123.822823) 37474 POINT(520.522217 160.999771) 37475 POINT(986.635803 617.121582) 37476 POINT(780.351379 862.475403) 37477 POINT(954.800903 293.792175) 37478 POINT(438.049774 805.188538) 37479 POINT(768.585999 598.647461) 37480 POINT(127.004822 3.9617281) 37481 POINT(40.327507 775.264099) 37482 POINT(167.332138 466.777771) 37483 POINT(410.690765 961.600464) 37484 POINT(783.482788 22.0810394) 37485 POINT(110.085854 563.439026) 37486 POINT(338.403076 142.534927) 37487 POINT(352.259918 526.930481) 37488 POINT(786.238647 968.690552) 37489 POINT(366.932648 218.373932) 37490 POINT(143.829453 209.505966) 37491 POINT(228.336304 454.330811) 37492 POINT(517.008789 777.719604) 37493 POINT(456.548676 762.346619) 37494 POINT(588.071106 587.391296) 37495 POINT(350.947357 161.662964) 37496 POINT(675.898987 219.766907) 37497 POINT(680.477783 869.700867) 37498 POINT(673.467773 363.912598) 37499 POINT(302.345856 114.759056) 37500 POINT(705.212952 412.844055) 37501 POINT(435.976959 184.897095) 37502 POINT(38.6315231 87.3022308) 37503 POINT(187.511215 499.595032) 37504 POINT(143.178467 851.697021) 37505 POINT(834.734924 652.34375) 37506 POINT(280.841461 454.461853) 37507 POINT(754.316284 352.304932) 37508 POINT(305.674408 583.178223) 37509 POINT(441.773834 70.6864624) 37510 POINT(566.109985 179.000214) 37511 POINT(157.146591 67.2324753) 37512 POINT(769.254333 851.430359) 37513 POINT(471.355927 694.583557) 37514 POINT(158.908417 410.274231) 37515 POINT(613.392517 329.193359) 37516 POINT(360.209747 264.181427) 37517 POINT(578.476807 598.597778) 37518 POINT(188.111176 192.721954) 37519 POINT(582.117249 423.347656) 37520 POINT(742.111267 290.240143) 37521 POINT(592.531799 690.686401) 37522 POINT(306.537537 104.189903) 37523 POINT(380.336334 564.558594) 37524 POINT(238.209412 688.320801) 37525 POINT(154.003189 716.872498) 37526 POINT(898.540466 392.620605) 37527 POINT(344.727142 357.840698) 37528 POINT(225.274857 288.613434) 37529 POINT(235.520096 334.032623) 37530 POINT(143.412186 642.381714) 37531 POINT(745.22052 752.476379) 37532 POINT(291.900757 401.056732) 37533 POINT(955.404358 344.336761) 37534 POINT(551.94696 244.680511) 37535 POINT(661.807617 884.606995) 37536 POINT(366.986755 8.05837154) 37537 POINT(924.820801 482.729095) 37538 POINT(559.320862 720.923218) 37539 POINT(947.03009 16.5808449) 37540 POINT(193.068588 814.447693) 37541 POINT(608.909119 727.938538) 37542 POINT(379.519714 253.540771) 37543 POINT(214.002563 376.0672) 37544 POINT(844.35321 173.733795) 37545 POINT(827.782837 967.860474) 37546 POINT(604.866272 615.719116) 37547 POINT(513.45105 73.9217758) 37548 POINT(470.764252 887.281616) 37549 POINT(575.037903 991.752258) 37550 POINT(968.767578 59.633564) 37551 POINT(993.131714 437.016113) 37552 POINT(86.9978943 881.808044) 37553 POINT(789.421509 204.536301) 37554 POINT(280.624329 622.203247) 37555 POINT(369.128998 30.7191982) 37556 POINT(19.5350361 810.638489) 37557 POINT(579.569458 162.607086) 37558 POINT(788.914612 738.043762) 37559 POINT(480.914093 365.446869) 37560 POINT(574.750366 695.453003) 37561 POINT(672.229065 15.8890734) 37562 POINT(131.783539 11.2113829) 37563 POINT(550.677429 782.670959) 37564 POINT(597.70459 827.792175) 37565 POINT(531.14032 207.494415) 37566 POINT(594.042114 490.496033) 37567 POINT(22.3323135 298.006134) 37568 POINT(853.901489 283.379395) 37569 POINT(676.75885 330.180847) 37570 POINT(605.297424 817.43396) 37571 POINT(16.7185936 242.469894) 37572 POINT(585.236023 567.356567) 37573 POINT(226.258942 867.912109) 37574 POINT(286.008453 171.875412) 37575 POINT(506.919586 387.737061) 37576 POINT(166.556839 104.820312) 37577 POINT(568.764893 661.173706) 37578 POINT(376.579742 26.8563786) 37579 POINT(291.236664 867.186646) 37580 POINT(520.70874 518.582214) 37581 POINT(392.516022 326.300476) 37582 POINT(69.1779556 342.688171) 37583 POINT(721.249939 611.766174) 37584 POINT(837.619873 894.868286) 37585 POINT(988.677856 531.920715) 37586 POINT(102.77462 979.591736) 37587 POINT(928.525635 208.174454) 37588 POINT(186.94017 527.710571) 37589 POINT(870.771423 989.727173) 37590 POINT(978.98999 788.868469) 37591 POINT(985.913757 56.5903206) 37592 POINT(813.935242 954.072815) 37593 POINT(269.198364 252.133362) 37594 POINT(309.632721 54.5131721) 37595 POINT(38.0124817 456.152344) 37596 POINT(264.783966 444.291718) 37597 POINT(987.099426 925.976685) 37598 POINT(116.400009 700.337952) 37599 POINT(940.25885 778.619751) 37600 POINT(0.124257401 496.204437) 37601 POINT(436.789703 709.282288) 37602 POINT(369.024536 952.091919) 37603 POINT(357.236938 204.122452) 37604 POINT(824.63562 296.371155) 37605 POINT(415.273895 737.200745) 37606 POINT(170.222916 949.723328) 37607 POINT(588.179443 587.634033) 37608 POINT(285.643738 558.091553) 37609 POINT(322.850525 83.5868225) 37610 POINT(774.122253 141.84668) 37611 POINT(611.269592 900.778442) 37612 POINT(175.176804 623.452942) 37613 POINT(80.5738907 906.286255) 37614 POINT(59.4109955 162.639755) 37615 POINT(968.233704 350.806946) 37616 POINT(407.598724 225.435989) 37617 POINT(960.348755 647.050049) 37618 POINT(169.28096 290.811646) 37619 POINT(146.848907 717.060547) 37620 POINT(838.889832 846.144714) 37621 POINT(905.691467 901.096741) 37622 POINT(777.296875 520.944641) 37623 POINT(61.3705177 664.955933) 37624 POINT(43.8412552 178.514252) 37625 POINT(691.698608 56.6954956) 37626 POINT(841.651428 739.428467) 37627 POINT(79.5190506 798.51416) 37628 POINT(673.873352 801.391357) 37629 POINT(449.522675 571.743286) 37630 POINT(769.83313 490.369263) 37631 POINT(799.548279 994.673462) 37632 POINT(780.885925 811.669922) 37633 POINT(663.661072 802.161987) 37634 POINT(631.554565 341.268768) 37635 POINT(442.049011 126.107712) 37636 POINT(411.490509 822.203064) 37637 POINT(739.623413 626.042114) 37638 POINT(429.859894 913.934265) 37639 POINT(288.525482 623.995789) 37640 POINT(851.173462 430.503967) 37641 POINT(635.049927 717.812195) 37642 POINT(468.649506 232.99382) 37643 POINT(72.4152145 458.166199) 37644 POINT(129.380844 990.78418) 37645 POINT(849.110657 218.313538) 37646 POINT(539.431152 162.55455) 37647 POINT(608.104858 19.2654037) 37648 POINT(784.213867 280.669128) 37649 POINT(273.024048 719.512024) 37650 POINT(990.926392 350.956879) 37651 POINT(229.627914 76.0769348) 37652 POINT(429.367462 443.969452) 37653 POINT(18.7909756 936.68042) 37654 POINT(742.231812 284.240845) 37655 POINT(803.112915 450.843781) 37656 POINT(366.140228 412.174286) 37657 POINT(363.747314 176.236298) 37658 POINT(953.555237 760.855103) 37659 POINT(175.683472 306.423248) 37660 POINT(339.790161 859.873718) 37661 POINT(375.297485 724.020813) 37662 POINT(378.11618 343.303497) 37663 POINT(928.394836 971.330444) 37664 POINT(552.204102 633.105652) 37665 POINT(613.197571 576.657837) 37666 POINT(384.621918 116.836998) 37667 POINT(211.923096 42.2028236) 37668 POINT(211.796219 504.660767) 37669 POINT(546.01593 517.731689) 37670 POINT(261.799103 390.964996) 37671 POINT(261.107666 97.9445724) 37672 POINT(226.744431 56.6704445) 37673 POINT(963.90564 400.875122) 37674 POINT(694.782471 816.471436) 37675 POINT(908.079651 735.786804) 37676 POINT(129.120026 468.338501) 37677 POINT(721.582092 643.460205) 37678 POINT(237.731461 758.787415) 37679 POINT(43.5910454 796.725464) 37680 POINT(955.160706 995.46991) 37681 POINT(603.405945 357.435791) 37682 POINT(197.867218 667.985107) 37683 POINT(512.293762 586.275696) 37684 POINT(600.882568 968.486023) 37685 POINT(966.730652 247.958221) 37686 POINT(593.190857 616.321228) 37687 POINT(370.098755 616.20813) 37688 POINT(122.4217 206.907059) 37689 POINT(90.1796188 395.811554) 37690 POINT(749.466064 136.174179) 37691 POINT(780.38031 893.908569) 37692 POINT(556.9422 850.819336) 37693 POINT(830.278137 306.216949) 37694 POINT(661.618774 984.381104) 37695 POINT(80.6708221 68.2301559) 37696 POINT(102.641174 743.636536) 37697 POINT(272.871552 154.481277) 37698 POINT(460.525604 483.39624) 37699 POINT(712.626831 804.181885) 37700 POINT(915.328308 665.50116) 37701 POINT(555.019409 988.03717) 37702 POINT(198.235962 645.355957) 37703 POINT(775.428101 603.526367) 37704 POINT(354.25174 912.961792) 37705 POINT(928.562866 754.777893) 37706 POINT(692.989868 372.049438) 37707 POINT(936.404724 914.33374) 37708 POINT(241.287979 948.102356) 37709 POINT(438.321014 419.1922) 37710 POINT(359.9664 641.958618) 37711 POINT(312.570709 779.767029) 37712 POINT(585.308044 99.0863266) 37713 POINT(295.879364 100.656013) 37714 POINT(794.515991 744.944519) 37715 POINT(722.874634 464.850281) 37716 POINT(267.478577 584.119812) 37717 POINT(144.190765 122.33902) 37718 POINT(371.701935 305.821747) 37719 POINT(403.360809 469.696472) 37720 POINT(383.450714 452.125458) 37721 POINT(928.718201 94.5360184) 37722 POINT(279.295288 49.976181) 37723 POINT(876.067627 88.6505051) 37724 POINT(294.835876 385.958221) 37725 POINT(17.6060066 672.834473) 37726 POINT(210.938354 7.34612608) 37727 POINT(167.372116 207.027695) 37728 POINT(955.062073 697.784241) 37729 POINT(546.373047 429.381165) 37730 POINT(412.012268 125.499878) 37731 POINT(982.622925 340.605072) 37732 POINT(743.650146 261.280975) 37733 POINT(701.881409 354.612366) 37734 POINT(892.814392 68.2078323) 37735 POINT(761.286377 17.7500076) 37736 POINT(868.144958 571.608337) 37737 POINT(805.839478 867.163757) 37738 POINT(401.971375 312.82077) 37739 POINT(760.463562 480.046295) 37740 POINT(374.380707 601.63739) 37741 POINT(609.857544 851.27771) 37742 POINT(187.584641 527.930176) 37743 POINT(444.518494 334.505157) 37744 POINT(943.456299 631.713928) 37745 POINT(172.082092 163.876862) 37746 POINT(664.424072 612.200439) 37747 POINT(494.691315 228.924789) 37748 POINT(947.740845 770.271973) 37749 POINT(49.6913109 257.574982) 37750 POINT(852.558105 705.92688) 37751 POINT(694.95166 841.688721) 37752 POINT(688.425781 453.90271) 37753 POINT(312.043976 51.2475128) 37754 POINT(856.126343 948.787903) 37755 POINT(798.9823 478.269623) 37756 POINT(343.58374 818.021729) 37757 POINT(56.0299911 946.385437) 37758 POINT(710.53302 750.422791) 37759 POINT(238.063538 348.932709) 37760 POINT(918.391907 463.068481) 37761 POINT(688.180237 935.307983) 37762 POINT(642.158813 864.881653) 37763 POINT(190.764053 165.60762) 37764 POINT(408.12085 806.208618) 37765 POINT(227.349655 76.4112091) 37766 POINT(156.759583 615.65802) 37767 POINT(102.724655 40.6261559) 37768 POINT(459.685883 904.801575) 37769 POINT(277.296753 221.98111) 37770 POINT(401.040039 204.927719) 37771 POINT(218.455688 795.998718) 37772 POINT(49.0043068 365.432373) 37773 POINT(120.239388 775.701111) 37774 POINT(926.461853 158.782532) 37775 POINT(66.9507065 699.128906) 37776 POINT(79.0949554 711.097168) 37777 POINT(590.47522 429.83609) 37778 POINT(325.164734 609.66156) 37779 POINT(129.052429 329.342926) 37780 POINT(347.804291 369.170898) 37781 POINT(1.41261613 286.175446) 37782 POINT(204.950119 297.846161) 37783 POINT(106.889503 749.33606) 37784 POINT(34.2365646 264.073853) 37785 POINT(419.865967 500.170959) 37786 POINT(623.597778 885.79895) 37787 POINT(314.335449 406.615967) 37788 POINT(709.412415 851.093811) 37789 POINT(8.22669315 604.305054) 37790 POINT(412.35434 422.291931) 37791 POINT(712.324097 222.248581) 37792 POINT(889.374207 311.608795) 37793 POINT(988.1297 964.57782) 37794 POINT(784.255432 567.68219) 37795 POINT(23.988472 137.688965) 37796 POINT(317.903015 544.995422) 37797 POINT(18.4920444 403.10199) 37798 POINT(245.010986 497.357361) 37799 POINT(181.973175 985.206421) 37800 POINT(491.206512 538.795593) 37801 POINT(426.309326 880.147461) 37802 POINT(102.505363 237.288666) 37803 POINT(83.9025192 923.389099) 37804 POINT(418.382843 676.254272) 37805 POINT(780.352112 270.577087) 37806 POINT(805.533691 553.791138) 37807 POINT(261.870361 836.440552) 37808 POINT(249.160706 549.131042) 37809 POINT(755.913452 692.469177) 37810 POINT(933.215698 419.00708) 37811 POINT(607.949707 34.4570618) 37812 POINT(194.361069 883.723877) 37813 POINT(103.01545 549.821106) 37814 POINT(903.599182 504.290741) 37815 POINT(740.102966 311.60025) 37816 POINT(114.721718 259.337433) 37817 POINT(800.992065 436.582489) 37818 POINT(373.285675 115.588066) 37819 POINT(941.507568 920.058044) 37820 POINT(260.170349 400.962524) 37821 POINT(159.120819 315.865906) 37822 POINT(859.480042 478.067749) 37823 POINT(861.1922 299.911316) 37824 POINT(904.328186 961.726074) 37825 POINT(705.986755 936.036438) 37826 POINT(331.688232 301.675537) 37827 POINT(325.015228 468.50174) 37828 POINT(37.9705582 875.707581) 37829 POINT(199.517273 274.481323) 37830 POINT(392.35495 114.946472) 37831 POINT(673.395508 817.622375) 37832 POINT(860.366638 558.008667) 37833 POINT(985.135742 910.213501) 37834 POINT(194.055984 941.324524) 37835 POINT(15.8425426 692.828552) 37836 POINT(538.86615 456.500366) 37837 POINT(231.239655 618.064514) 37838 POINT(425.428253 510.402985) 37839 POINT(672.212708 536.394775) 37840 POINT(594.794983 718.462646) 37841 POINT(279.215302 150.073212) 37842 POINT(538.842102 345.912628) 37843 POINT(856.753235 563.917419) 37844 POINT(317.668762 25.3686352) 37845 POINT(459.461395 123.777969) 37846 POINT(889.890015 752.949951) 37847 POINT(353.376862 914.29248) 37848 POINT(809.926758 970.356934) 37849 POINT(245.399002 172.473404) 37850 POINT(612.086914 938.850037) 37851 POINT(529.243896 963.771851) 37852 POINT(620.835693 705.471985) 37853 POINT(544.205444 29.091898) 37854 POINT(859.747009 245.274139) 37855 POINT(538.611267 27.0287323) 37856 POINT(440.907013 969.544006) 37857 POINT(256.015869 13.2234478) 37858 POINT(517.822021 743.495789) 37859 POINT(980.03949 981.64093) 37860 POINT(997.116516 22.6172104) 37861 POINT(972.59491 469.888123) 37862 POINT(599.557556 250.532486) 37863 POINT(587.433899 447.124634) 37864 POINT(114.411919 459.124878) 37865 POINT(831.988708 69.0272064) 37866 POINT(331.142578 160.685516) 37867 POINT(759.026672 25.6303406) 37868 POINT(890.437683 349.549316) 37869 POINT(97.4243546 516.280884) 37870 POINT(357.099304 355.213165) 37871 POINT(858.290466 768.637329) 37872 POINT(68.1020355 669.092712) 37873 POINT(986.733643 148.471176) 37874 POINT(590.979309 852.277344) 37875 POINT(256.907043 472.460907) 37876 POINT(984.5578 511.924866) 37877 POINT(642.833191 91.3114624) 37878 POINT(983.003296 789.967896) 37879 POINT(32.2971344 625.11261) 37880 POINT(925.361755 160.862427) 37881 POINT(906.302917 142.214401) 37882 POINT(879.601746 797.122009) 37883 POINT(80.8499527 828.030029) 37884 POINT(319.024109 684.873535) 37885 POINT(727.862427 307.672394) 37886 POINT(709.383972 799.821533) 37887 POINT(162.874619 298.419556) 37888 POINT(969.855347 370.590881) 37889 POINT(641.550781 972.536133) 37890 POINT(445.883423 835.863647) 37891 POINT(56.4277229 621.4328) 37892 POINT(445.960815 959.054443) 37893 POINT(708.675903 7.61781549) 37894 POINT(669.497498 505.165558) 37895 POINT(564.554504 266.121979) 37896 POINT(814.431396 355.195709) 37897 POINT(738.105164 732.397949) 37898 POINT(79.3605957 270.977386) 37899 POINT(594.113647 505.098694) 37900 POINT(147.222107 205.113083) 37901 POINT(390.227478 541.216003) 37902 POINT(990.45874 944.941406) 37903 POINT(904.239075 285.044495) 37904 POINT(608.906433 494.977386) 37905 POINT(979.925781 174.175873) 37906 POINT(692.115662 338.450104) 37907 POINT(408.624084 283.700439) 37908 POINT(481.439667 115.445862) 37909 POINT(408.154938 68.1005249) 37910 POINT(541.048828 243.419846) 37911 POINT(108.196472 858.688049) 37912 POINT(181.259277 156.75209) 37913 POINT(672.229492 958.219482) 37914 POINT(315.51651 617.510071) 37915 POINT(829.386414 844.490784) 37916 POINT(180.496445 552.177551) 37917 POINT(831.682434 917.876282) 37918 POINT(666.644287 91.9831009) 37919 POINT(948.071167 186.152328) 37920 POINT(756.767212 571.400879) 37921 POINT(139.564865 321.393829) 37922 POINT(468.843262 694.812866) 37923 POINT(190.4133 211.724014) 37924 POINT(664.958191 580.258606) 37925 POINT(288.312714 794.336365) 37926 POINT(493.29892 987.31543) 37927 POINT(419.192688 940.220337) 37928 POINT(149.61557 429.741455) 37929 POINT(364.817078 75.7604675) 37930 POINT(106.833138 649.488281) 37931 POINT(37.8651085 197.818115) 37932 POINT(197.99353 814.588257) 37933 POINT(161.089493 858.64624) 37934 POINT(633.009705 917.408691) 37935 POINT(274.462189 472.261963) 37936 POINT(571.511169 950.629333) 37937 POINT(944.923828 97.5539856) 37938 POINT(603.175354 175.456238) 37939 POINT(143.581787 373.913849) 37940 POINT(947.31427 960.069946) 37941 POINT(659.212585 976.651611) 37942 POINT(372.198334 436.789124) 37943 POINT(327.099426 291.612946) 37944 POINT(451.832184 425.193787) 37945 POINT(789.084229 716.610046) 37946 POINT(476.986725 407.416046) 37947 POINT(562.864868 332.487152) 37948 POINT(974.666748 673.504822) 37949 POINT(812.785767 665.466003) 37950 POINT(675.438965 322.371735) 37951 POINT(385.530609 917.084656) 37952 POINT(913.843994 491.115723) 37953 POINT(235.241623 666.401611) 37954 POINT(819.299683 766.916931) 37955 POINT(224.791504 464.670837) 37956 POINT(422.405914 126.229958) 37957 POINT(692.479736 524.494263) 37958 POINT(586.46405 251.347977) 37959 POINT(933.698547 448.26178) 37960 POINT(801.514038 640.852966) 37961 POINT(510.621307 504.838898) 37962 POINT(626.593689 394.915192) 37963 POINT(793.341248 724.942322) 37964 POINT(416.682922 896.407837) 37965 POINT(404.890289 186.048615) 37966 POINT(858.479065 192.513748) 37967 POINT(920.076721 454.243958) 37968 POINT(401.455353 717.719788) 37969 POINT(712.105103 665.990234) 37970 POINT(498.401154 987.224121) 37971 POINT(787.617188 105.832954) 37972 POINT(456.778137 69.8722153) 37973 POINT(664.374023 70.7127914) 37974 POINT(895.817871 452.44342) 37975 POINT(268.667816 27.4872379) 37976 POINT(254.531342 403.726654) 37977 POINT(732.223083 552.87915) 37978 POINT(406.019592 99.2637253) 37979 POINT(199.442825 795.315857) 37980 POINT(310.109985 678.438232) 37981 POINT(992.14209 482.611542) 37982 POINT(338.969116 567.91626) 37983 POINT(975.268555 100.402069) 37984 POINT(701.651978 953.086365) 37985 POINT(806.5448 331.514771) 37986 POINT(489.360931 236.515747) 37987 POINT(96.6150436 239.528) 37988 POINT(682.451599 854.581238) 37989 POINT(843.393555 829.740723) 37990 POINT(875.006165 486.001831) 37991 POINT(902.281982 372.363831) 37992 POINT(58.2934113 675.292969) 37993 POINT(608.250183 336.310974) 37994 POINT(88.9690475 297.090424) 37995 POINT(950.095764 583.483398) 37996 POINT(182.886108 331.392456) 37997 POINT(213.269592 4.51473856) 37998 POINT(105.4506 723.209778) 37999 POINT(635.358459 444.792206) 38000 POINT(562.271912 921.67981) 38001 POINT(65.6623077 247.05127) 38002 POINT(470.237366 182.811554) 38003 POINT(673.422424 212.432648) 38004 POINT(353.032013 166.715912) 38005 POINT(522.409668 209.68782) 38006 POINT(553.601074 445.111359) 38007 POINT(15.1459455 11.9556608) 38008 POINT(489.303497 579.36261) 38009 POINT(328.522278 447.555176) 38010 POINT(946.857117 645.225647) 38011 POINT(612.619141 366.526428) 38012 POINT(780.069824 820.374268) 38013 POINT(832.891174 764.804688) 38014 POINT(143.359161 657.838257) 38015 POINT(207.432037 205.157303) 38016 POINT(80.8802567 326.474457) 38017 POINT(558.788696 226.202499) 38018 POINT(360.527954 682.941833) 38019 POINT(974.889221 51.4377937) 38020 POINT(563.101135 963.389221) 38021 POINT(695.333313 678.337463) 38022 POINT(731.58252 952.864868) 38023 POINT(424.95813 437.958282) 38024 POINT(178.995071 152.597961) 38025 POINT(471.74173 728.471985) 38026 POINT(123.961983 56.708374) 38027 POINT(434.371521 717.600647) 38028 POINT(652.371582 648.102417) 38029 POINT(177.947205 20.6649761) 38030 POINT(525.997498 496.480713) 38031 POINT(664.187134 350.095093) 38032 POINT(712.245667 898.301941) 38033 POINT(803.174072 821.649963) 38034 POINT(284.212494 738.632568) 38035 POINT(903.239929 430.719971) 38036 POINT(830.888733 718.104126) 38037 POINT(878.3125 383.050171) 38038 POINT(470.701874 205.359161) 38039 POINT(70.306076 697.746887) 38040 POINT(427.849152 817.687988) 38041 POINT(128.449127 281.866241) 38042 POINT(313.358673 361.949585) 38043 POINT(706.429321 506.210449) 38044 POINT(357.966431 586.874756) 38045 POINT(968.663025 957.772888) 38046 POINT(931.289368 299.628326) 38047 POINT(793.744934 287.809204) 38048 POINT(514.098633 417.853882) 38049 POINT(709.208618 963.612244) 38050 POINT(583.577515 987.747131) 38051 POINT(648.267456 830.219238) 38052 POINT(544.226257 764.046143) 38053 POINT(575.46106 24.5732613) 38054 POINT(261.62677 674.850708) 38055 POINT(451.492584 303.830414) 38056 POINT(7.79300976 79.1794891) 38057 POINT(293.509857 861.898804) 38058 POINT(733.634216 755.05188) 38059 POINT(709.295593 339.889984) 38060 POINT(777.588196 758.188782) 38061 POINT(44.0433846 878.562439) 38062 POINT(84.3152618 784.318115) 38063 POINT(556.491821 621.266724) 38064 POINT(131.170822 210.341751) 38065 POINT(45.1748886 227.20932) 38066 POINT(383.822113 230.683807) 38067 POINT(361.55777 385.523163) 38068 POINT(769.781067 235.031357) 38069 POINT(889.118591 484.757111) 38070 POINT(366.867096 973.0672) 38071 POINT(528.393555 959.712463) 38072 POINT(952.880188 941.964905) 38073 POINT(28.131937 143.40416) 38074 POINT(906.383911 525.285156) 38075 POINT(740.640869 947.290283) 38076 POINT(42.9044495 560.018127) 38077 POINT(481.898163 394.393494) 38078 POINT(625.628784 455.022949) 38079 POINT(148.952896 969.76178) 38080 POINT(17.5154037 612.812317) 38081 POINT(921.531067 228.733551) 38082 POINT(208.444763 491.929718) 38083 POINT(162.746277 929.157104) 38084 POINT(925.572693 104.111526) 38085 POINT(774.641846 708.177429) 38086 POINT(839.482178 374.675568) 38087 POINT(575.346863 602.157898) 38088 POINT(838.251587 552.425842) 38089 POINT(891.414978 370.114197) 38090 POINT(734.489014 573.718933) 38091 POINT(725.074646 2.67271781) 38092 POINT(578.173218 941.7453) 38093 POINT(613.399109 121.627136) 38094 POINT(905.354675 644.69751) 38095 POINT(274.696289 356.885834) 38096 POINT(397.10907 914.119507) 38097 POINT(794.725891 650.826477) 38098 POINT(145.411682 116.771149) 38099 POINT(977.804932 723.280762) 38100 POINT(816.769531 819.8349) 38101 POINT(439.727203 337.663788) 38102 POINT(717.569519 500.906464) 38103 POINT(493.072327 259.866028) 38104 POINT(47.3779678 562.233215) 38105 POINT(141.430588 881.788452) 38106 POINT(381.175598 215.01033) 38107 POINT(905.948547 891.808472) 38108 POINT(755.180603 526.751099) 38109 POINT(432.168091 381.607574) 38110 POINT(203.068008 965.980896) 38111 POINT(122.269066 664.903503) 38112 POINT(462.735046 267.552826) 38113 POINT(490.544189 396.562286) 38114 POINT(64.1061707 403.159973) 38115 POINT(709.360962 383.790863) 38116 POINT(534.767639 40.1635399) 38117 POINT(388.264343 603.734375) 38118 POINT(894.534302 663.334473) 38119 POINT(77.623497 228.550018) 38120 POINT(527.583496 714.803528) 38121 POINT(205.833969 20.2504654) 38122 POINT(449.85437 764.34906) 38123 POINT(119.190407 919.284729) 38124 POINT(661.459839 82.6597443) 38125 POINT(897.896362 404.549896) 38126 POINT(873.454468 672.555054) 38127 POINT(550.164246 655.535156) 38128 POINT(313.147278 76.1215591) 38129 POINT(746.98468 372.437012) 38130 POINT(383.059387 268.736267) 38131 POINT(239.046661 495.830475) 38132 POINT(719.550049 964.046692) 38133 POINT(608.721313 967.937256) 38134 POINT(165.140625 367.815216) 38135 POINT(746.369995 62.4223175) 38136 POINT(533.85083 154.411591) 38137 POINT(922.006714 914.330383) 38138 POINT(964.742371 409.558014) 38139 POINT(149.169754 457.216583) 38140 POINT(481.791565 839.240479) 38141 POINT(634.495422 537.334351) 38142 POINT(917.752014 430.659882) 38143 POINT(978.819153 57.1459274) 38144 POINT(128.516144 350.495514) 38145 POINT(776.667908 400.264587) 38146 POINT(888.46228 453.007446) 38147 POINT(761.880615 420.703918) 38148 POINT(685.327759 760.650635) 38149 POINT(407.060883 20.0973797) 38150 POINT(947.343689 478.578033) 38151 POINT(221.011627 882.08667) 38152 POINT(860.907288 957.959045) 38153 POINT(46.7307739 643.713928) 38154 POINT(652.265381 868.35022) 38155 POINT(666.594666 535.36554) 38156 POINT(992.985229 153.965515) 38157 POINT(522.778625 955.206604) 38158 POINT(480.97403 0.76409781) 38159 POINT(489.644745 218.34021) 38160 POINT(84.1551971 539.60199) 38161 POINT(348.776093 757.978699) 38162 POINT(103.458908 754.683228) 38163 POINT(952.679871 794.198547) 38164 POINT(909.461975 596.244629) 38165 POINT(384.187866 129.47049) 38166 POINT(179.90329 542.475525) 38167 POINT(667.623413 498.836121) 38168 POINT(63.592205 389.399506) 38169 POINT(535.393982 281.697266) 38170 POINT(23.2416401 330.742584) 38171 POINT(248.439697 372.664246) 38172 POINT(671.941895 25.2242298) 38173 POINT(687.674377 377.384796) 38174 POINT(774.913025 329.392944) 38175 POINT(631.086731 827.963257) 38176 POINT(502.529205 333.878937) 38177 POINT(890.524231 849.341003) 38178 POINT(708.220642 804.167358) 38179 POINT(464.503632 216.312546) 38180 POINT(384.667084 758.743042) 38181 POINT(57.9279938 349.802704) 38182 POINT(895.778748 773.388916) 38183 POINT(793.732056 855.357422) 38184 POINT(165.505585 376.820068) 38185 POINT(90.726532 316.848694) 38186 POINT(755.84729 186.625) 38187 POINT(979.904968 350.147339) 38188 POINT(916.998291 953.193298) 38189 POINT(379.970825 286.572113) 38190 POINT(926.926453 551.111633) 38191 POINT(431.717377 201.508408) 38192 POINT(743.543518 941.184265) 38193 POINT(108.162178 502.555817) 38194 POINT(510.802246 871.205017) 38195 POINT(259.128204 632.388733) 38196 POINT(334.495789 379.904175) 38197 POINT(629.537964 78.2966309) 38198 POINT(971.304749 196.789825) 38199 POINT(402.423737 282.841522) 38200 POINT(355.938141 712.178589) 38201 POINT(481.068665 953.576111) 38202 POINT(879.362244 38.4865456) 38203 POINT(138.40686 925.288452) 38204 POINT(882.551758 648.363525) 38205 POINT(252.590988 152.376175) 38206 POINT(254.503159 400.665222) 38207 POINT(120.35881 633.930969) 38208 POINT(333.114471 335.361694) 38209 POINT(627.507935 397.790558) 38210 POINT(468.778442 207.687042) 38211 POINT(269.552948 905.655029) 38212 POINT(792.104553 255.184509) 38213 POINT(394.746521 968.483704) 38214 POINT(551.148682 454.458405) 38215 POINT(903.482727 74.5005646) 38216 POINT(175.082443 473.697479) 38217 POINT(128.169968 791.600891) 38218 POINT(258.698303 499.297333) 38219 POINT(459.599579 987.744019) 38220 POINT(426.967255 87.72258) 38221 POINT(531.400085 158.634384) 38222 POINT(465.611267 535.274963) 38223 POINT(53.2376633 318.868195) 38224 POINT(830.021423 977.462585) 38225 POINT(154.012665 123.603088) 38226 POINT(261.662506 425.610016) 38227 POINT(894.537659 81.1710358) 38228 POINT(542.300964 261.250092) 38229 POINT(299.327271 597.002808) 38230 POINT(649.049316 769.357483) 38231 POINT(281.561951 875.490845) 38232 POINT(687.52533 170.914062) 38233 POINT(464.519562 384.338043) 38234 POINT(879.707458 275.546997) 38235 POINT(485.428223 156.502441) 38236 POINT(673.764648 418.594086) 38237 POINT(580.543335 934.645691) 38238 POINT(284.827393 267.090424) 38239 POINT(348.170776 334.26532) 38240 POINT(931.039612 509.624054) 38241 POINT(652.356384 362.274719) 38242 POINT(914.105408 410.192688) 38243 POINT(825.171326 841.180664) 38244 POINT(926.87207 871.143616) 38245 POINT(139.202103 384.284973) 38246 POINT(424.336243 570.663147) 38247 POINT(21.3839779 389.242188) 38248 POINT(144.021561 112.386528) 38249 POINT(560.207703 176.182632) 38250 POINT(435.27243 35.4391098) 38251 POINT(494.212982 518.440369) 38252 POINT(686.087952 210.133118) 38253 POINT(362.315674 790.308533) 38254 POINT(5.24709892 205.798309) 38255 POINT(725.782349 194.408157) 38256 POINT(314.354614 921.603577) 38257 POINT(45.5752335 704.049805) 38258 POINT(969.87677 268.148773) 38259 POINT(703.47168 651.871277) 38260 POINT(13.193799 267.107849) 38261 POINT(905.076416 269.14447) 38262 POINT(634.231262 278.951355) 38263 POINT(489.97403 900.193665) 38264 POINT(631.548828 496.056671) 38265 POINT(519.318604 318.702271) 38266 POINT(712.177673 562.242188) 38267 POINT(512.764648 308.284668) 38268 POINT(754.455383 552.477661) 38269 POINT(291.562073 955.164917) 38270 POINT(466.176392 311.387299) 38271 POINT(57.7520256 468.361877) 38272 POINT(721.257751 689.969482) 38273 POINT(933.720032 590.281494) 38274 POINT(716.626648 811.115784) 38275 POINT(113.01664 101.538902) 38276 POINT(626.122131 551.065491) 38277 POINT(771.605347 637.276184) 38278 POINT(761.93042 751.541321) 38279 POINT(275.923767 112.935249) 38280 POINT(211.643845 722.268616) 38281 POINT(145.854492 865.736145) 38282 POINT(278.762177 692.796631) 38283 POINT(910.53125 29.980957) 38284 POINT(797.791077 503.556641) 38285 POINT(984.609558 321.350922) 38286 POINT(956.604736 857.069275) 38287 POINT(122.094681 964.815918) 38288 POINT(776.122986 389.947968) 38289 POINT(832.045837 885.483826) 38290 POINT(961.428894 74.2403793) 38291 POINT(401.606476 930.15979) 38292 POINT(743.165039 552.755127) 38293 POINT(231.091171 3.6591177) 38294 POINT(320.46759 887.994385) 38295 POINT(985.686401 807.756042) 38296 POINT(47.0198631 429.443878) 38297 POINT(379.19101 847.400024) 38298 POINT(973.35321 541.178223) 38299 POINT(75.7760849 519.46814) 38300 POINT(377.737701 383.553802) 38301 POINT(402.730499 190.453491) 38302 POINT(544.459167 802.356445) 38303 POINT(65.4710541 983.335083) 38304 POINT(44.6650276 279.926239) 38305 POINT(428.732941 578.289673) 38306 POINT(857.105469 369.919708) 38307 POINT(835.957397 250.368301) 38308 POINT(752.935852 735.523438) 38309 POINT(871.712219 948.866272) 38310 POINT(832.359314 895.769653) 38311 POINT(996.903137 812.598633) 38312 POINT(16.4653111 752.41272) 38313 POINT(999.063721 722.997803) 38314 POINT(693.481384 507.517365) 38315 POINT(673.787048 448.859344) 38316 POINT(826.250488 417.02829) 38317 POINT(890.136658 524.273132) 38318 POINT(331.639679 76.295372) 38319 POINT(72.5298157 132.017258) 38320 POINT(830.478516 358.611938) 38321 POINT(362.139069 111.315666) 38322 POINT(279.332306 376.699127) 38323 POINT(588.426453 459.840698) 38324 POINT(76.8879395 699.773621) 38325 POINT(300.282806 809.28064) 38326 POINT(985.030823 716.036011) 38327 POINT(668.761047 791.419556) 38328 POINT(318.023712 303.401642) 38329 POINT(100.085793 712.838806) 38330 POINT(985.877136 571.975342) 38331 POINT(987.117004 772.029175) 38332 POINT(986.472351 222.691208) 38333 POINT(606.505066 199.493454) 38334 POINT(134.835999 270.856567) 38335 POINT(742.280884 211.556961) 38336 POINT(209.858643 394.848816) 38337 POINT(17.5827827 839.932617) 38338 POINT(254.526108 763.326233) 38339 POINT(55.7677345 345.085663) 38340 POINT(654.330566 784.070251) 38341 POINT(709.544434 621.21759) 38342 POINT(462.023132 109.639709) 38343 POINT(509.381531 348.956207) 38344 POINT(560.454895 375.677185) 38345 POINT(835.797424 508.962128) 38346 POINT(937.248108 373.87616) 38347 POINT(837.855469 611.607056) 38348 POINT(66.8906708 650.838379) 38349 POINT(854.034973 766.256165) 38350 POINT(92.1252518 244.480774) 38351 POINT(671.5 665.715332) 38352 POINT(804.902954 430.088745) 38353 POINT(843.658325 119.942596) 38354 POINT(938.512756 847.960999) 38355 POINT(9.9195118 876.640747) 38356 POINT(790.725952 263.900238) 38357 POINT(589.988342 818.953369) 38358 POINT(949.981812 903.229004) 38359 POINT(800.240967 951.900085) 38360 POINT(842.977478 869.845947) 38361 POINT(932.245789 864.766296) 38362 POINT(865.838196 575.994873) 38363 POINT(591.931641 87.3768311) 38364 POINT(108.774689 468.439484) 38365 POINT(799.035706 210.643219) 38366 POINT(695.351318 135.781281) 38367 POINT(745.164429 98.1964417) 38368 POINT(794.894531 253.51973) 38369 POINT(688.081299 524.162354) 38370 POINT(645.976562 792.542297) 38371 POINT(80.8230133 195.675125) 38372 POINT(869.267761 648.090027) 38373 POINT(86.2094574 186.659851) 38374 POINT(821.426697 895.534485) 38375 POINT(177.621857 166.475906) 38376 POINT(323.292297 442.810974) 38377 POINT(471.096893 563.545959) 38378 POINT(313.767456 14.0022154) 38379 POINT(745.448792 586.082703) 38380 POINT(566.894775 391.883606) 38381 POINT(88.046196 221.064377) 38382 POINT(748.285095 287.402649) 38383 POINT(633.920044 355.929596) 38384 POINT(665.965881 349.850403) 38385 POINT(653.066223 687.912659) 38386 POINT(430.691223 832.310364) 38387 POINT(71.2722168 291.998627) 38388 POINT(425.74054 572.879089) 38389 POINT(497.791046 564.24585) 38390 POINT(993.302734 923.805786) 38391 POINT(671.095581 712.427307) 38392 POINT(773.887756 379.384247) 38393 POINT(442.278229 265.934479) 38394 POINT(840.153503 131.06543) 38395 POINT(593.049316 972.641541) 38396 POINT(503.522522 967.380554) 38397 POINT(858.485779 458.551636) 38398 POINT(750.566284 580.035583) 38399 POINT(998.579651 678.758179) 38400 POINT(199.045151 819.750793) 38401 POINT(970.23468 283.414001) 38402 POINT(716.531555 40.4861908) 38403 POINT(603.794922 873.477112) 38404 POINT(86.6608276 793.649658) 38405 POINT(424.721283 807.104126) 38406 POINT(461.312469 590.404968) 38407 POINT(699.036133 833.408752) 38408 POINT(626.625671 686.555481) 38409 POINT(566.152893 736.252563) 38410 POINT(115.014221 197.605331) 38411 POINT(478.312073 242.761002) 38412 POINT(895.71228 799.019043) 38413 POINT(643.835815 330.959564) 38414 POINT(207.426208 676.587891) 38415 POINT(901.652466 415.534729) 38416 POINT(196.082275 772.949097) 38417 POINT(395.055023 623.088745) 38418 POINT(479.266754 128.106339) 38419 POINT(599.565247 926.853882) 38420 POINT(870.699036 774.312744) 38421 POINT(57.3405342 499.765259) 38422 POINT(10.0295372 149.555176) 38423 POINT(521.16571 483.783447) 38424 POINT(5.60880136 910.417175) 38425 POINT(885.224854 947.763733) 38426 POINT(813.951355 816.209656) 38427 POINT(126.179749 116.964485) 38428 POINT(555.863953 624.480408) 38429 POINT(673.352966 771.072021) 38430 POINT(365.191895 676.512329) 38431 POINT(925.904968 806.621887) 38432 POINT(444.557465 693.984985) 38433 POINT(620.813599 391.769287) 38434 POINT(479.13504 779.014587) 38435 POINT(89.3470078 469.977509) 38436 POINT(353.382996 374.350311) 38437 POINT(110.82032 923.457153) 38438 POINT(598.793335 54.2467728) 38439 POINT(648.130676 831.827881) 38440 POINT(248.329575 175.745972) 38441 POINT(625.375793 566.835388) 38442 POINT(813.615906 211.702652) 38443 POINT(557.418518 76.0218201) 38444 POINT(165.566879 738.409302) 38445 POINT(66.3135147 518.615112) 38446 POINT(872.571655 680.289673) 38447 POINT(499.952881 332.800018) 38448 POINT(420.270386 280.618866) 38449 POINT(212.116699 7.81265116) 38450 POINT(44.1991615 20.0095387) 38451 POINT(856.468689 995.435913) 38452 POINT(195.082413 133.51387) 38453 POINT(904.173157 777.57135) 38454 POINT(923.385132 663.298706) 38455 POINT(708.109375 579.342407) 38456 POINT(415.099945 948.240051) 38457 POINT(826.632446 316.006805) 38458 POINT(187.954132 806.37085) 38459 POINT(85.1083374 337.78656) 38460 POINT(922.72522 263.440277) 38461 POINT(420.789093 406.17627) 38462 POINT(867.721558 764.06897) 38463 POINT(930.884521 130.581055) 38464 POINT(228.410614 254.89772) 38465 POINT(557.924011 113.121071) 38466 POINT(904.483398 126.148689) 38467 POINT(411.829681 105.596657) 38468 POINT(532.274963 654.179077) 38469 POINT(83.7939835 155.03511) 38470 POINT(653.485352 608.576721) 38471 POINT(270.451141 597.667847) 38472 POINT(286.762695 19.4131966) 38473 POINT(243.466171 715.962585) 38474 POINT(505.235413 580.345154) 38475 POINT(893.164673 275.439301) 38476 POINT(301.964294 768.880432) 38477 POINT(296.95343 149.029922) 38478 POINT(991.093445 864.463745) 38479 POINT(643.915344 973.928162) 38480 POINT(282.909637 646.876953) 38481 POINT(344.113403 692.069153) 38482 POINT(576.891846 561.208557) 38483 POINT(800.937317 839.053345) 38484 POINT(732.093079 581.356812) 38485 POINT(491.53244 271.590302) 38486 POINT(845.911987 322.367523) 38487 POINT(126.346512 380.108887) 38488 POINT(350.683716 214.144485) 38489 POINT(14.6229115 706.413025) 38490 POINT(925.860962 717.139282) 38491 POINT(696.891541 777.13739) 38492 POINT(428.318481 737.048767) 38493 POINT(94.9206543 138.868927) 38494 POINT(824.064026 73.5040512) 38495 POINT(129.073608 322.382355) 38496 POINT(224.073715 50.9986305) 38497 POINT(45.5769005 319.337097) 38498 POINT(800.907898 453.301056) 38499 POINT(742.97583 188.47847) 38500 POINT(10.1527853 680.360474) 38501 POINT(677.296875 448.977905) 38502 POINT(33.640564 224.909286) 38503 POINT(526.528381 810.763306) 38504 POINT(275.025726 320.884918) 38505 POINT(602.484924 645.880615) 38506 POINT(600.953918 34.344162) 38507 POINT(985.565735 47.0708809) 38508 POINT(564.200073 377.271301) 38509 POINT(827.114502 741.442688) 38510 POINT(253.345291 843.745422) 38511 POINT(94.9175949 935.594543) 38512 POINT(574.498352 355.125732) 38513 POINT(937.847778 36.6501122) 38514 POINT(525.074768 105.646454) 38515 POINT(601.905945 309.882599) 38516 POINT(411.662811 512.129211) 38517 POINT(556.189148 852.029175) 38518 POINT(490.60498 72.0785828) 38519 POINT(876.004883 749.757507) 38520 POINT(371.303375 744.519775) 38521 POINT(501.963684 190.392258) 38522 POINT(871.730652 699.479004) 38523 POINT(347.052216 347.92453) 38524 POINT(209.649628 287.532898) 38525 POINT(285.169159 598.101196) 38526 POINT(261.176178 603.533691) 38527 POINT(329.283813 554.264526) 38528 POINT(633.263733 442.233032) 38529 POINT(128.259033 358.424255) 38530 POINT(944.257751 42.5020447) 38531 POINT(689.596008 923.279419) 38532 POINT(655.815796 206.208038) 38533 POINT(710.171082 479.663116) 38534 POINT(172.279907 963.233215) 38535 POINT(385.823242 934.888367) 38536 POINT(545.219177 381.887482) 38537 POINT(218.923706 551.078613) 38538 POINT(769.653564 730.998047) 38539 POINT(374.450958 184.746384) 38540 POINT(315.867401 463.785065) 38541 POINT(101.360847 431.245636) 38542 POINT(641.29541 282.425903) 38543 POINT(767.066467 147.485931) 38544 POINT(108.411598 364.753906) 38545 POINT(106.633171 906.31842) 38546 POINT(87.6870956 90.2475281) 38547 POINT(400.984528 404.757446) 38548 POINT(343.460358 831.383484) 38549 POINT(834.26178 909.789673) 38550 POINT(832.04425 509.211517) 38551 POINT(181.864975 699.67157) 38552 POINT(235.781021 219.954681) 38553 POINT(18.138113 630.678894) 38554 POINT(317.364594 784.454285) 38555 POINT(654.77478 430.222351) 38556 POINT(112.026077 156.909973) 38557 POINT(204.571289 853.684998) 38558 POINT(140.695786 246.768143) 38559 POINT(265.028442 226.497391) 38560 POINT(987.703308 491.583496) 38561 POINT(315.503052 172.692505) 38562 POINT(457.782776 993.626404) 38563 POINT(681.273682 69.957695) 38564 POINT(28.0542965 863.975952) 38565 POINT(827.266602 298.120026) 38566 POINT(813.325928 660.488037) 38567 POINT(370.672211 7.79560328) 38568 POINT(842.700989 156.64743) 38569 POINT(940.775085 538.952393) 38570 POINT(130.400497 723.818726) 38571 POINT(339.658783 891.357056) 38572 POINT(45.3648529 77.3409576) 38573 POINT(170.781891 681.898987) 38574 POINT(527.159424 145.428772) 38575 POINT(583.643127 724.840027) 38576 POINT(147.659012 127.738243) 38577 POINT(239.864105 912.972107) 38578 POINT(219.76001 67.1436615) 38579 POINT(325.153961 148.957779) 38580 POINT(649.899414 253.788315) 38581 POINT(27.0369225 130.882263) 38582 POINT(17.5279102 695.485107) 38583 POINT(562.305481 303.982574) 38584 POINT(142.075195 544.338867) 38585 POINT(591.415649 986.996094) 38586 POINT(819.689209 477.956299) 38587 POINT(798.100586 817.561157) 38588 POINT(334.564606 447.33902) 38589 POINT(968.099426 253.207138) 38590 POINT(82.5744324 165.688553) 38591 POINT(75.9678345 944.921143) 38592 POINT(200.878464 106.671425) 38593 POINT(516.457825 666.919067) 38594 POINT(442.016296 381.619812) 38595 POINT(608.060608 952.562195) 38596 POINT(833.657349 587.710449) 38597 POINT(90.2615738 231.443878) 38598 POINT(547.735596 869.040833) 38599 POINT(350.232513 681.255005) 38600 POINT(190.344803 955.99292) 38601 POINT(194.602982 60.4684982) 38602 POINT(694.827454 682.258057) 38603 POINT(851.232361 850.144653) 38604 POINT(636.404358 400.925781) 38605 POINT(596.312866 246.844559) 38606 POINT(22.0329838 199.286713) 38607 POINT(583.54834 70.984169) 38608 POINT(81.6425781 855.245178) 38609 POINT(562.586426 908.808533) 38610 POINT(887.299622 985.901001) 38611 POINT(749.460876 729.998718) 38612 POINT(549.146484 850.980469) 38613 POINT(16.78932 520.840271) 38614 POINT(528.205078 221.03363) 38615 POINT(248.248535 864.608826) 38616 POINT(216.538727 673.964478) 38617 POINT(420.922333 871.719727) 38618 POINT(268.139282 605.429443) 38619 POINT(89.1234436 913.216431) 38620 POINT(325.699158 231.472427) 38621 POINT(120.981659 508.943237) 38622 POINT(338.710236 418.623322) 38623 POINT(39.3546104 748.485046) 38624 POINT(869.796631 431.358582) 38625 POINT(224.458801 326.512329) 38626 POINT(854.657959 663.725525) 38627 POINT(708.172302 718.021545) 38628 POINT(635.420654 286.101593) 38629 POINT(818.482544 32.2096786) 38630 POINT(599.633179 45.1624756) 38631 POINT(584.427551 511.093048) 38632 POINT(2.797194 401.455536) 38633 POINT(482.612976 590.828125) 38634 POINT(59.5166321 861.434753) 38635 POINT(769.614807 545.990417) 38636 POINT(888.51886 986.945312) 38637 POINT(602.054993 381.420288) 38638 POINT(574.524902 763.117981) 38639 POINT(277.747894 229.874542) 38640 POINT(352.914459 34.2322426) 38641 POINT(945.067749 729.488281) 38642 POINT(572.1698 725.74646) 38643 POINT(809.713135 881.4198) 38644 POINT(688.128479 849.416077) 38645 POINT(332.602448 679.134033) 38646 POINT(590.208374 517.883789) 38647 POINT(852.105164 326.294922) 38648 POINT(253.176636 696.627808) 38649 POINT(998.710876 355.54248) 38650 POINT(202.040283 406.598175) 38651 POINT(799.184509 176.497589) 38652 POINT(928.68866 912.807373) 38653 POINT(417.022491 34.7718849) 38654 POINT(16.5807228 835.724731) 38655 POINT(551.479004 586.786926) 38656 POINT(826.744202 487.348755) 38657 POINT(951.598328 85.6760941) 38658 POINT(640.456421 336.710815) 38659 POINT(705.683044 844.93335) 38660 POINT(810.154358 765.334595) 38661 POINT(679.724976 277.886444) 38662 POINT(862.443054 987.504456) 38663 POINT(17.8922863 497.232025) 38664 POINT(450.735931 629.371582) 38665 POINT(129.72261 560.131348) 38666 POINT(348.382629 321.860657) 38667 POINT(295.844421 836.704346) 38668 POINT(287.570282 242.576126) 38669 POINT(478.595978 304.773956) 38670 POINT(819.389587 709.603088) 38671 POINT(255.71788 488.635193) 38672 POINT(633.934814 194.049759) 38673 POINT(962.367615 187.299286) 38674 POINT(26.974823 877.794434) 38675 POINT(165.1754 516.573853) 38676 POINT(725.540649 678.222412) 38677 POINT(866.18866 323.584747) 38678 POINT(835.787048 423.431061) 38679 POINT(286.720459 941.650391) 38680 POINT(702.90387 160.730667) 38681 POINT(481.831055 23.1378765) 38682 POINT(377.991486 880.19342) 38683 POINT(234.068069 819.037231) 38684 POINT(777.124878 836.037598) 38685 POINT(846.922791 533.088623) 38686 POINT(552.875549 144.945526) 38687 POINT(359.114258 47.6119385) 38688 POINT(941.044495 65.7891312) 38689 POINT(913.295776 445.573486) 38690 POINT(111.092346 844.093628) 38691 POINT(198.221298 902.352966) 38692 POINT(756.690857 901.941528) 38693 POINT(31.0732594 20.2512054) 38694 POINT(185.022461 525.575378) 38695 POINT(823.918274 873.728699) 38696 POINT(75.1276398 744.983765) 38697 POINT(280.631622 534.04126) 38698 POINT(405.055145 399.167358) 38699 POINT(671.750061 774.313965) 38700 POINT(26.2570705 165.116928) 38701 POINT(236.330032 911.777405) 38702 POINT(676.160217 715.961121) 38703 POINT(41.8899307 230.097122) 38704 POINT(253.82959 923.042297) 38705 POINT(203.908051 314.320892) 38706 POINT(279.942352 777.27301) 38707 POINT(11.2639999 612.416138) 38708 POINT(164.854492 267.049286) 38709 POINT(837.709656 64.7787247) 38710 POINT(214.43959 993.916199) 38711 POINT(934.318909 186.189087) 38712 POINT(912.80304 654.38208) 38713 POINT(314.400208 278.824371) 38714 POINT(587.248718 378.679077) 38715 POINT(59.1964493 751.080261) 38716 POINT(940.440125 147.404755) 38717 POINT(916.600281 831.720154) 38718 POINT(437.129425 348.015442) 38719 POINT(40.9618111 334.471619) 38720 POINT(170.815521 868.87207) 38721 POINT(962.868286 842.491089) 38722 POINT(575.061096 733.36908) 38723 POINT(294.665253 558.582947) 38724 POINT(353.89267 65.6529236) 38725 POINT(509.721283 684.80304) 38726 POINT(907.794312 458.217377) 38727 POINT(198.399231 148.813721) 38728 POINT(651.485535 526.542847) 38729 POINT(146.892334 644.447693) 38730 POINT(235.261734 423.832825) 38731 POINT(130.146484 676.353638) 38732 POINT(274.622345 327.34024) 38733 POINT(508.778473 734.940613) 38734 POINT(697.78125 764.926575) 38735 POINT(202.096619 35.3373032) 38736 POINT(875.148376 135.150345) 38737 POINT(833.043579 855.587952) 38738 POINT(889.806152 785.750916) 38739 POINT(342.242554 343.293579) 38740 POINT(437.325439 593.920715) 38741 POINT(11.5965691 430.481384) 38742 POINT(154.04657 567.901978) 38743 POINT(65.449791 923.368103) 38744 POINT(615.382507 634.499817) 38745 POINT(99.6733246 902.229431) 38746 POINT(723.107056 452.978821) 38747 POINT(874.825562 777.772766) 38748 POINT(819.4151 905.050049) 38749 POINT(175.509918 970.838135) 38750 POINT(185.354874 346.417786) 38751 POINT(739.09668 494.143158) 38752 POINT(864.727905 901.436523) 38753 POINT(776.100525 266.003021) 38754 POINT(217.555557 63.2361565) 38755 POINT(502.837799 839.961731) 38756 POINT(668.660034 792.249207) 38757 POINT(873.792664 220.177216) 38758 POINT(648.880127 742.082947) 38759 POINT(403.776306 394.93042) 38760 POINT(304.127319 379.409058) 38761 POINT(503.97998 270.131744) 38762 POINT(699.210754 690.907959) 38763 POINT(95.0296097 447.153564) 38764 POINT(700.561523 112.84391) 38765 POINT(705.909851 156.325607) 38766 POINT(669.241333 895.725769) 38767 POINT(700.016785 36.2178154) 38768 POINT(420.622101 586.511719) 38769 POINT(396.631836 12.254838) 38770 POINT(450.688904 823.363953) 38771 POINT(463.917145 464.73349) 38772 POINT(235.000626 483.086517) 38773 POINT(162.370483 140.051315) 38774 POINT(972.00354 79.749649) 38775 POINT(507.932373 819.626953) 38776 POINT(667.833862 505.911957) 38777 POINT(722.113403 853.953552) 38778 POINT(98.2837601 947.202454) 38779 POINT(41.2402573 45.4511986) 38780 POINT(291.686859 439.365936) 38781 POINT(994.963989 539.873596) 38782 POINT(563.674988 817.365967) 38783 POINT(140.412704 894.208252) 38784 POINT(313.762512 112.569611) 38785 POINT(285.815399 127.134888) 38786 POINT(230.348999 60.8240166) 38787 POINT(867.202087 639.652832) 38788 POINT(913.939026 706.412354) 38789 POINT(93.1609879 497.559143) 38790 POINT(340.232605 930.111206) 38791 POINT(62.9833221 788.774048) 38792 POINT(870.432983 540.153687) 38793 POINT(438.363007 967.429382) 38794 POINT(453.974121 679.743042) 38795 POINT(631.771851 149.128677) 38796 POINT(240.330078 201.40274) 38797 POINT(417.460327 869.460754) 38798 POINT(456.206329 205.053406) 38799 POINT(503.620667 517.924866) 38800 POINT(249.921097 642.063293) 38801 POINT(884.603577 434.759491) 38802 POINT(346.985168 151.041519) 38803 POINT(756.331787 947.23291) 38804 POINT(93.7268982 652.873718) 38805 POINT(790.462646 628.854309) 38806 POINT(536.35376 623.095459) 38807 POINT(565.801392 9.42632103) 38808 POINT(41.2899132 950.458496) 38809 POINT(719.461853 331.234406) 38810 POINT(12.301115 343.372406) 38811 POINT(753.949341 737.931396) 38812 POINT(107.256416 963.347412) 38813 POINT(596.452576 264.430664) 38814 POINT(61.9563484 339.780212) 38815 POINT(708.068054 950.592346) 38816 POINT(552.968384 287.208313) 38817 POINT(366.444275 376.528015) 38818 POINT(191.677811 28.9188118) 38819 POINT(356.556671 476.434052) 38820 POINT(656.729126 694.577393) 38821 POINT(690.270264 960.098511) 38822 POINT(513.768738 860.0047) 38823 POINT(703.39209 401.33078) 38824 POINT(515.102722 530.660767) 38825 POINT(344.573273 650.895874) 38826 POINT(145.870117 523.714539) 38827 POINT(147.317474 824.067993) 38828 POINT(119.051521 304.319946) 38829 POINT(66.2540588 591.254578) 38830 POINT(103.651772 98.0491943) 38831 POINT(441.615479 771.507751) 38832 POINT(586.412598 292.142395) 38833 POINT(39.5331841 465.987518) 38834 POINT(758.243958 402.733063) 38835 POINT(686.46344 860.047607) 38836 POINT(226.158417 13.5382042) 38837 POINT(88.0348434 822.67749) 38838 POINT(176.920975 264.327332) 38839 POINT(188.252075 10.28757) 38840 POINT(60.0825233 506.092804) 38841 POINT(904.808655 73.6107407) 38842 POINT(568.869141 356.150635) 38843 POINT(368.881256 22.7976589) 38844 POINT(533.996643 432.943817) 38845 POINT(329.963837 843.200867) 38846 POINT(617.441772 770.263855) 38847 POINT(162.930237 105.103577) 38848 POINT(413.220459 187.740829) 38849 POINT(768.597168 872.603394) 38850 POINT(696.12439 503.190125) 38851 POINT(501.730988 503.486328) 38852 POINT(276.091156 327.783997) 38853 POINT(330.955048 522.323364) 38854 POINT(837.502441 592.705872) 38855 POINT(550.757812 237.916763) 38856 POINT(594.41449 862.228455) 38857 POINT(172.276566 23.9695835) 38858 POINT(852.846191 729.951355) 38859 POINT(340.377808 564.423401) 38860 POINT(121.225098 149.778854) 38861 POINT(811.523315 23.9101219) 38862 POINT(184.495911 789.274353) 38863 POINT(309.890594 196.418182) 38864 POINT(193.918777 419.088562) 38865 POINT(916.209045 634.43634) 38866 POINT(914.051697 867.634888) 38867 POINT(70.9177551 504.980988) 38868 POINT(604.764587 215.116379) 38869 POINT(154.799606 162.14328) 38870 POINT(846.442444 106.061348) 38871 POINT(388.585846 887.831482) 38872 POINT(891.000366 395.983246) 38873 POINT(238.662918 918.586609) 38874 POINT(743.268372 777.564819) 38875 POINT(977.579163 247.691864) 38876 POINT(253.16008 657.410339) 38877 POINT(202.304428 34.8771095) 38878 POINT(588.383179 869.080139) 38879 POINT(215.021729 52.9717903) 38880 POINT(822.9776 945.608337) 38881 POINT(303.633301 999.725708) 38882 POINT(234.499939 659.417542) 38883 POINT(283.280487 767.182922) 38884 POINT(671.15509 534.528137) 38885 POINT(665.260986 719.554138) 38886 POINT(901.677307 600.873657) 38887 POINT(573.164246 528.217224) 38888 POINT(770.481995 989.670715) 38889 POINT(923.342712 259.63623) 38890 POINT(776.861755 149.061615) 38891 POINT(401.626617 834.598999) 38892 POINT(111.233612 718.194336) 38893 POINT(702.229004 66.838623) 38894 POINT(398.232483 53.6882477) 38895 POINT(227.962769 653.049072) 38896 POINT(303.474457 313.844971) 38897 POINT(691.203613 397.379028) 38898 POINT(598.9151 22.416523) 38899 POINT(588.623962 800.173401) 38900 POINT(294.83783 445.27655) 38901 POINT(463.840637 877.123596) 38902 POINT(531.701416 600.618347) 38903 POINT(913.155273 670.817444) 38904 POINT(282.546631 607.614807) 38905 POINT(951.022888 607.29541) 38906 POINT(699.732849 571.735168) 38907 POINT(232.396225 386.602417) 38908 POINT(504.88678 659.659424) 38909 POINT(655.419556 995.067688) 38910 POINT(977.674316 176.128616) 38911 POINT(544.965027 220.387756) 38912 POINT(360.040039 702.906372) 38913 POINT(278.231049 536.367554) 38914 POINT(323.727234 970.717224) 38915 POINT(269.182068 715.87854) 38916 POINT(219.127747 523.613403) 38917 POINT(418.264954 107.317657) 38918 POINT(254.899551 207.359848) 38919 POINT(774.969238 266.325409) 38920 POINT(375.512604 515.418884) 38921 POINT(398.916107 931.092834) 38922 POINT(186.271072 194.859192) 38923 POINT(463.895447 42.2397919) 38924 POINT(803.851257 727.564392) 38925 POINT(80.3808975 278.573914) 38926 POINT(419.563477 227.624878) 38927 POINT(245.4216 65.2737274) 38928 POINT(790.084961 442.559998) 38929 POINT(722.443909 134.02861) 38930 POINT(907.143677 313.447449) 38931 POINT(543.530334 913.891052) 38932 POINT(37.5014458 477.170624) 38933 POINT(577.433044 511.153839) 38934 POINT(914.660278 113.500465) 38935 POINT(160.309647 16.1824036) 38936 POINT(554.197144 221.890564) 38937 POINT(913.446472 840.163818) 38938 POINT(358.832764 219.600815) 38939 POINT(421.691162 736.153381) 38940 POINT(483.712097 286.612549) 38941 POINT(594.713501 863.210388) 38942 POINT(906.483582 136.921906) 38943 POINT(35.4281158 492.042145) 38944 POINT(53.3076248 503.986511) 38945 POINT(178.958649 773.273438) 38946 POINT(886.72345 114.768555) 38947 POINT(2.52940321 958.698059) 38948 POINT(983.300781 957.002808) 38949 POINT(730.895386 910.761353) 38950 POINT(690.270874 273.686035) 38951 POINT(740.749756 0.781875551) 38952 POINT(26.064888 643.623169) 38953 POINT(196.485748 192.411819) 38954 POINT(608.206055 314.09021) 38955 POINT(302.368896 359.521149) 38956 POINT(784.751526 368.821838) 38957 POINT(234.357849 588.68634) 38958 POINT(997.032043 459.76947) 38959 POINT(198.374786 272.984924) 38960 POINT(599.483887 463.188812) 38961 POINT(858.781921 388.701965) 38962 POINT(247.733002 189.023483) 38963 POINT(877.299805 148.315079) 38964 POINT(82.7173462 967.285583) 38965 POINT(112.863739 695.846863) 38966 POINT(283.59314 736.867676) 38967 POINT(349.340118 124.08017) 38968 POINT(835.657837 992.233215) 38969 POINT(261.12146 582.575989) 38970 POINT(214.857361 313.646454) 38971 POINT(795.023315 861.893616) 38972 POINT(984.074402 69.5516968) 38973 POINT(667.369934 599.486572) 38974 POINT(337.886963 478.562042) 38975 POINT(252.569717 188.664551) 38976 POINT(434.537262 437.057983) 38977 POINT(606.844238 881.623596) 38978 POINT(882.283081 131.040482) 38979 POINT(639.228149 274.326141) 38980 POINT(171.05838 372.670319) 38981 POINT(750.752625 924.067139) 38982 POINT(781.520996 138.519852) 38983 POINT(429.247467 874.613342) 38984 POINT(487.306641 884.254272) 38985 POINT(956.955811 209.205048) 38986 POINT(270.958954 706.159607) 38987 POINT(284.779907 794.437622) 38988 POINT(781.014709 291.18573) 38989 POINT(302.228271 259.696777) 38990 POINT(301.65509 212.135025) 38991 POINT(815.893433 134.633926) 38992 POINT(424.890991 492.094971) 38993 POINT(999.564575 363.984009) 38994 POINT(599.247131 381.593445) 38995 POINT(432.004608 73.3306122) 38996 POINT(272.293915 3.29513669) 38997 POINT(958.251648 175.30722) 38998 POINT(694.21875 353.014465) 38999 POINT(939.425049 902.920166) 39000 POINT(556.122803 173.686829) 39001 POINT(264.935974 620.537537) 39002 POINT(403.197723 402.628998) 39003 POINT(138.348022 794.585632) 39004 POINT(295.82312 334.470886) 39005 POINT(790.672058 71.7352676) 39006 POINT(50.5007401 835.717102) 39007 POINT(177.484634 294.562683) 39008 POINT(840.100952 25.7890453) 39009 POINT(461.946259 531.198547) 39010 POINT(184.960556 828.018311) 39011 POINT(835.691345 869.795776) 39012 POINT(841.885132 857.452209) 39013 POINT(472.929291 659.865601) 39014 POINT(669.140869 806.151611) 39015 POINT(217.313873 915.371765) 39016 POINT(787.272583 7.20485544) 39017 POINT(861.71582 839.287903) 39018 POINT(796.365356 292.857819) 39019 POINT(571.605103 512.092041) 39020 POINT(181.636139 837.512939) 39021 POINT(425.070374 98.99086) 39022 POINT(525.556396 11.0389538) 39023 POINT(76.4573212 879.769592) 39024 POINT(633.769958 620.651917) 39025 POINT(904.204346 663.891663) 39026 POINT(14.7015991 439.985748) 39027 POINT(462.822357 910.315857) 39028 POINT(372.89386 901.911194) 39029 POINT(738.368042 80.5450821) 39030 POINT(380.833252 947.846191) 39031 POINT(298.575439 384.406799) 39032 POINT(183.531906 602.018127) 39033 POINT(453.548553 366.3396) 39034 POINT(17.729557 86.3039551) 39035 POINT(599.212097 476.494873) 39036 POINT(349.726318 562.427795) 39037 POINT(930.323059 392.367157) 39038 POINT(862.114319 626.597961) 39039 POINT(187.649017 935.161255) 39040 POINT(962.743408 870.908752) 39041 POINT(377.923828 758.542664) 39042 POINT(714.953186 440.430145) 39043 POINT(886.534668 889.277588) 39044 POINT(865.373657 969.898926) 39045 POINT(830.830505 748.650085) 39046 POINT(96.5151596 384.971008) 39047 POINT(193.855698 575.173645) 39048 POINT(581.122375 246.391251) 39049 POINT(379.710999 563.343445) 39050 POINT(142.186813 938.087097) 39051 POINT(566.260132 405.984589) 39052 POINT(808.033691 529.649719) 39053 POINT(150.292404 920.732849) 39054 POINT(730.599243 448.079529) 39055 POINT(814.40033 711.577271) 39056 POINT(444.586121 681.844666) 39057 POINT(251.749542 287.037842) 39058 POINT(376.446228 511.634857) 39059 POINT(400.730713 165.931244) 39060 POINT(659.04187 256.735443) 39061 POINT(530.45697 453.890381) 39062 POINT(417.443024 174.355911) 39063 POINT(622.580078 388.578217) 39064 POINT(213.828812 22.8183899) 39065 POINT(985.458679 914.223083) 39066 POINT(678.196045 360.15213) 39067 POINT(761.948792 457.678589) 39068 POINT(112.978592 999.895264) 39069 POINT(128.766418 505.278625) 39070 POINT(103.322945 178.934448) 39071 POINT(288.365753 104.541214) 39072 POINT(653.34021 541.808289) 39073 POINT(406.606964 85.1285706) 39074 POINT(817.984009 536.473511) 39075 POINT(112.271843 172.868927) 39076 POINT(129.232864 913.126343) 39077 POINT(36.9942093 588.190674) 39078 POINT(696.055115 775.943481) 39079 POINT(703.780151 520.738647) 39080 POINT(765.39801 753.854919) 39081 POINT(264.512543 665.586243) 39082 POINT(794.493835 917.58844) 39083 POINT(615.294983 919.302002) 39084 POINT(934.555664 803.783447) 39085 POINT(84.953125 257.779877) 39086 POINT(947.019226 431.112518) 39087 POINT(576.355652 659.418213) 39088 POINT(353.564514 266.871063) 39089 POINT(950.454468 869.795837) 39090 POINT(401.047882 374.807922) 39091 POINT(865.203186 515.908264) 39092 POINT(746.132751 236.110992) 39093 POINT(830.05542 23.4068279) 39094 POINT(628.897522 166.100647) 39095 POINT(103.951012 438.845612) 39096 POINT(410.218628 670.604675) 39097 POINT(271.076843 346.042389) 39098 POINT(347.590668 210.106094) 39099 POINT(972.873596 842.275085) 39100 POINT(234.708969 519.112854) 39101 POINT(783.506226 22.7659645) 39102 POINT(341.160797 105.952354) 39103 POINT(594.209656 642.978699) 39104 POINT(972.655212 718.142822) 39105 POINT(952.566833 885.521057) 39106 POINT(895.184448 175.04187) 39107 POINT(497.009827 265.382843) 39108 POINT(997.295166 957.667542) 39109 POINT(173.91153 242.948181) 39110 POINT(525.331543 611.086853) 39111 POINT(141.940353 673.429199) 39112 POINT(342.282196 303.863953) 39113 POINT(801.388062 664.426636) 39114 POINT(210.048553 638.667725) 39115 POINT(958.589172 116.206413) 39116 POINT(558.988647 995.793945) 39117 POINT(799.08197 323.595764) 39118 POINT(522.057068 685.227722) 39119 POINT(727.701172 681.368286) 39120 POINT(811.447449 991.743774) 39121 POINT(697.349915 179.463013) 39122 POINT(894.17334 720.83136) 39123 POINT(926.904053 938.838745) 39124 POINT(673.438721 130.973846) 39125 POINT(766.813721 227.306) 39126 POINT(752.022095 600.678223) 39127 POINT(350.868652 927.032166) 39128 POINT(292.425812 97.9215317) 39129 POINT(844.795227 286.929749) 39130 POINT(399.539917 457.276855) 39131 POINT(915.479004 484.792664) 39132 POINT(941.488586 728.438538) 39133 POINT(175.427383 312.43924) 39134 POINT(352.733459 932.34967) 39135 POINT(60.4729881 464.4841) 39136 POINT(493.098572 581.4328) 39137 POINT(957.68634 5.54113722) 39138 POINT(282.977234 312.951172) 39139 POINT(576.144165 675.137207) 39140 POINT(17.5248299 114.324471) 39141 POINT(34.8470421 593.488403) 39142 POINT(853.20752 441.948029) 39143 POINT(997.080505 499.289062) 39144 POINT(533.855652 247.014877) 39145 POINT(304.371643 993.134705) 39146 POINT(508.687622 609.922607) 39147 POINT(929.54718 3.12450576) 39148 POINT(923.065369 576.605042) 39149 POINT(978.999451 224.165421) 39150 POINT(718.591553 503.725494) 39151 POINT(809.004639 16.7571678) 39152 POINT(150.252365 13.8915663) 39153 POINT(787.813232 857.425049) 39154 POINT(255.472061 686.317383) 39155 POINT(620.384033 99.9638214) 39156 POINT(237.117783 152.704498) 39157 POINT(570.315735 488.361389) 39158 POINT(846.75061 13.2036104) 39159 POINT(56.1272812 528.412109) 39160 POINT(875.951904 254.442719) 39161 POINT(487.057617 710.959167) 39162 POINT(935.686279 852.680359) 39163 POINT(435.63028 436.398712) 39164 POINT(182.838608 332.700104) 39165 POINT(247.116028 834.136536) 39166 POINT(348.850952 970.273376) 39167 POINT(464.610504 34.3411942) 39168 POINT(850.484558 456.665619) 39169 POINT(335.730133 630.430176) 39170 POINT(382.959259 462.166443) 39171 POINT(574.054382 382.743683) 39172 POINT(880.025391 57.0190926) 39173 POINT(214.659119 735.896118) 39174 POINT(195.971069 178.0793) 39175 POINT(145.781204 549.082764) 39176 POINT(146.355148 714.333923) 39177 POINT(863.334473 930.504456) 39178 POINT(415.704987 660.968933) 39179 POINT(405.293793 100.036613) 39180 POINT(282.972351 637.536377) 39181 POINT(830.637451 419.9086) 39182 POINT(563.772156 749.093506) 39183 POINT(142.469269 788.707458) 39184 POINT(760.029785 798.760925) 39185 POINT(175.138977 412.319977) 39186 POINT(233.458969 635.390442) 39187 POINT(706.775208 984.963013) 39188 POINT(573.221191 480.979492) 39189 POINT(285.899384 738.32251) 39190 POINT(957.258667 359.785675) 39191 POINT(916.080322 866.749939) 39192 POINT(661.333496 816.07251) 39193 POINT(596.430054 996.810608) 39194 POINT(353.070923 421.963928) 39195 POINT(616.760498 641.20874) 39196 POINT(26.7379456 743.546814) 39197 POINT(631.17981 726.837891) 39198 POINT(447.660522 445.295746) 39199 POINT(637.684937 96.6461716) 39200 POINT(545.789368 703.897217) 39201 POINT(656.915039 403.013916) 39202 POINT(41.7843361 597.028442) 39203 POINT(791.799194 599.896912) 39204 POINT(625.047729 295.645355) 39205 POINT(450.620209 631.189026) 39206 POINT(603.468262 775.515137) 39207 POINT(396.404999 248.334351) 39208 POINT(184.431412 71.3788223) 39209 POINT(341.054962 781.517761) 39210 POINT(454.234711 412.167328) 39211 POINT(506.869293 261.765747) 39212 POINT(929.857849 625.654724) 39213 POINT(732.859436 437.594116) 39214 POINT(947.651978 103.982979) 39215 POINT(688.378723 856.673767) 39216 POINT(515.620972 136.417572) 39217 POINT(780.108948 463.202271) 39218 POINT(930.3974 191.914154) 39219 POINT(686.486755 783.743286) 39220 POINT(990.701294 561.623047) 39221 POINT(740.476807 192.328812) 39222 POINT(23.0958805 831.003601) 39223 POINT(799.585571 429.339172) 39224 POINT(873.39978 764.047302) 39225 POINT(811.670837 233.433807) 39226 POINT(161.51651 60.1331482) 39227 POINT(105.065987 882.5755) 39228 POINT(305.131134 939.800842) 39229 POINT(928.568237 645.579407) 39230 POINT(398.279358 872.391174) 39231 POINT(945.812317 651.84668) 39232 POINT(996.908875 859.853699) 39233 POINT(82.4803543 791.866577) 39234 POINT(181.045914 311.480011) 39235 POINT(244.811905 778.163452) 39236 POINT(100.997757 598.920532) 39237 POINT(213.237152 4.73194122) 39238 POINT(195.235809 175.248581) 39239 POINT(283.041321 937.36676) 39240 POINT(715.406738 622.34021) 39241 POINT(620.289001 308.008331) 39242 POINT(387.633789 994.349731) 39243 POINT(549.424866 749.266663) 39244 POINT(460.339691 329.125702) 39245 POINT(140.78093 832.253845) 39246 POINT(971.820557 572.185547) 39247 POINT(151.542603 918.981445) 39248 POINT(453.415894 408.148224) 39249 POINT(50.5625381 232.706833) 39250 POINT(57.1817245 521.717346) 39251 POINT(61.8998871 24.2281818) 39252 POINT(54.4195518 654.458374) 39253 POINT(758.354614 373.323975) 39254 POINT(40.3192139 915.383484) 39255 POINT(166.950592 732.041748) 39256 POINT(950.530579 214.037445) 39257 POINT(883.801086 775.712585) 39258 POINT(51.0100403 376.278076) 39259 POINT(684.701599 979.378052) 39260 POINT(509.436157 577.809082) 39261 POINT(236.892914 848.36731) 39262 POINT(554.42749 681.912659) 39263 POINT(21.6072254 184.280869) 39264 POINT(840.416443 29.5326347) 39265 POINT(549.258301 709.474731) 39266 POINT(677.160034 226.292847) 39267 POINT(550.595581 867.770935) 39268 POINT(672.444275 667.236877) 39269 POINT(547.071594 495.650848) 39270 POINT(946.633911 491.707977) 39271 POINT(109.452164 161.340591) 39272 POINT(983.53302 564.14325) 39273 POINT(100.840446 409.32605) 39274 POINT(911.86499 18.5461197) 39275 POINT(242.417801 550.914856) 39276 POINT(297.012909 112.565216) 39277 POINT(739.089783 399.096954) 39278 POINT(548.036621 229.609573) 39279 POINT(337.741791 865.366272) 39280 POINT(698.11084 103.061874) 39281 POINT(770.967224 290.213165) 39282 POINT(438.220337 864.821167) 39283 POINT(850.063416 956.146667) 39284 POINT(918.154053 631.159668) 39285 POINT(627.054443 386.469818) 39286 POINT(472.625427 712.874939) 39287 POINT(738.877991 734.326904) 39288 POINT(283.914215 495.248352) 39289 POINT(798.174988 50.1288261) 39290 POINT(209.085709 788.299988) 39291 POINT(102.976051 232.310699) 39292 POINT(936.052185 351.794434) 39293 POINT(928.747925 533.09198) 39294 POINT(98.0605621 95.5682526) 39295 POINT(745.628052 139.716537) 39296 POINT(483.32077 527.804871) 39297 POINT(204.24411 380.401764) 39298 POINT(491.248169 646.293945) 39299 POINT(66.4185333 826.397156) 39300 POINT(178.126678 55.5132523) 39301 POINT(161.560059 56.2468872) 39302 POINT(724.979187 451.233368) 39303 POINT(243.01709 210.293442) 39304 POINT(774.249207 190.549179) 39305 POINT(446.631317 53.000782) 39306 POINT(597.879517 795.710754) 39307 POINT(139.807007 953.795898) 39308 POINT(458.957764 402.391083) 39309 POINT(845.366394 635.423645) 39310 POINT(246.860962 225.256989) 39311 POINT(760.173645 379.512878) 39312 POINT(639.466309 584.691589) 39313 POINT(121.988663 545.009277) 39314 POINT(766.318359 317.66507) 39315 POINT(345.389008 184.822479) 39316 POINT(907.607544 23.1032448) 39317 POINT(813.132996 443.560333) 39318 POINT(912.48407 498.327667) 39319 POINT(415.410706 504.310211) 39320 POINT(206.805023 479.522491) 39321 POINT(146.550003 610.426453) 39322 POINT(888.207642 867.637939) 39323 POINT(145.54715 120.172249) 39324 POINT(81.8674698 604.207581) 39325 POINT(680.03009 424.442139) 39326 POINT(513.002686 252.39769) 39327 POINT(477.82254 652.890137) 39328 POINT(904.823792 771.016052) 39329 POINT(89.1664658 459.451508) 39330 POINT(49.0197678 467.592102) 39331 POINT(277.009521 377.958954) 39332 POINT(138.963028 346.046448) 39333 POINT(771.834534 601.410461) 39334 POINT(575.677246 80.5531921) 39335 POINT(658.678772 909.178711) 39336 POINT(28.4395561 346.256958) 39337 POINT(582.772156 455.406616) 39338 POINT(84.0001984 806.449036) 39339 POINT(340.248108 364.994019) 39340 POINT(582.247437 422.174683) 39341 POINT(63.4040604 452.53949) 39342 POINT(396.289154 32.1995811) 39343 POINT(495.8974 791.594177) 39344 POINT(359.065033 107.59594) 39345 POINT(990.061157 489.455933) 39346 POINT(607.560547 865.333923) 39347 POINT(132.346329 554.962952) 39348 POINT(353.415192 319.21936) 39349 POINT(928.002563 637.435852) 39350 POINT(992.270203 534.967957) 39351 POINT(444.877411 133.792709) 39352 POINT(233.781433 160.440659) 39353 POINT(749.157288 443.275696) 39354 POINT(223.15274 933.9953) 39355 POINT(961.617188 246.154907) 39356 POINT(289.76709 186.078323) 39357 POINT(748.259277 610.818726) 39358 POINT(308.579132 584.749023) 39359 POINT(538.972717 525.045776) 39360 POINT(708.078247 418.588104) 39361 POINT(75.0578156 399.83252) 39362 POINT(870.655457 334.804749) 39363 POINT(432.253143 21.4014721) 39364 POINT(216.057556 571.362976) 39365 POINT(689.542664 908.0354) 39366 POINT(258.355835 645.260742) 39367 POINT(732.888123 657.904907) 39368 POINT(706.691162 131.004745) 39369 POINT(942.632324 512.425842) 39370 POINT(518.303772 420.743927) 39371 POINT(437.28891 382.881622) 39372 POINT(190.455872 177.992294) 39373 POINT(186.529404 137.669403) 39374 POINT(430.384491 948.555725) 39375 POINT(292.279419 180.810349) 39376 POINT(307.069458 83.9606094) 39377 POINT(526.957825 692.150574) 39378 POINT(656.193909 663.784302) 39379 POINT(348.15863 284.448303) 39380 POINT(674.152344 513.843689) 39381 POINT(943.751099 966.397095) 39382 POINT(545.397278 137.875229) 39383 POINT(842.837708 903.300049) 39384 POINT(550.003662 482.423676) 39385 POINT(526.771973 523.93689) 39386 POINT(298.393494 900.066284) 39387 POINT(639.128235 534.133423) 39388 POINT(644.140808 567.367432) 39389 POINT(500.898926 631.249146) 39390 POINT(993.24939 444.255096) 39391 POINT(942.140564 451.474396) 39392 POINT(421.945801 764.62085) 39393 POINT(46.8246307 71.3221741) 39394 POINT(450.689484 48.2842064) 39395 POINT(434.88501 289.487152) 39396 POINT(918.708679 887.070557) 39397 POINT(663.66803 764.4328) 39398 POINT(32.9973297 838.29071) 39399 POINT(287.549835 721.37439) 39400 POINT(903.55188 853.671448) 39401 POINT(964.910278 480.112915) 39402 POINT(251.004074 867.682556) 39403 POINT(719.564636 118.408119) 39404 POINT(215.165619 693.776917) 39405 POINT(350.922546 565.871704) 39406 POINT(487.910706 848.466919) 39407 POINT(923.438599 727.927856) 39408 POINT(228.979706 600.199951) 39409 POINT(959.361084 541.091492) 39410 POINT(239.510696 572.070923) 39411 POINT(195.497864 348.120453) 39412 POINT(709.342407 904.568909) 39413 POINT(658.96283 608.619141) 39414 POINT(17.4498482 987.45874) 39415 POINT(61.0275841 697.121277) 39416 POINT(750.471619 419.833984) 39417 POINT(622.783447 621.924744) 39418 POINT(465.480804 366.262573) 39419 POINT(29.9575195 674.954163) 39420 POINT(116.390869 197.317963) 39421 POINT(193.675919 812.301086) 39422 POINT(298.239685 977.81012) 39423 POINT(374.11322 499.052826) 39424 POINT(52.7545891 379.49353) 39425 POINT(337.81778 628.430603) 39426 POINT(387.892853 221.344391) 39427 POINT(978.187256 257.584778) 39428 POINT(562.416687 494.709717) 39429 POINT(971.350403 369.745178) 39430 POINT(696.071716 218.396011) 39431 POINT(883.967468 769.522888) 39432 POINT(211.788025 236.37825) 39433 POINT(840.703918 905.358765) 39434 POINT(776.834778 455.182831) 39435 POINT(620.993164 766.389038) 39436 POINT(766.475586 496.669647) 39437 POINT(438.937408 661.952148) 39438 POINT(260.964844 183.074234) 39439 POINT(796.691528 317.818573) 39440 POINT(342.391479 183.558548) 39441 POINT(648.4328 236.84166) 39442 POINT(72.7312775 934.573486) 39443 POINT(705.180054 111.572273) 39444 POINT(302.464539 140.09613) 39445 POINT(414.538422 446.565582) 39446 POINT(127.316582 692.93396) 39447 POINT(906.304504 668.348328) 39448 POINT(829.282654 306.077026) 39449 POINT(775.265747 356.672272) 39450 POINT(910.426758 965.439819) 39451 POINT(825.112549 822.72406) 39452 POINT(960.439819 114.806969) 39453 POINT(998.901306 854.996948) 39454 POINT(651.176025 253.546341) 39455 POINT(426.848175 833.782776) 39456 POINT(886.057251 1.46647096) 39457 POINT(414.402771 628.56488) 39458 POINT(765.155884 187.487366) 39459 POINT(933.683655 302.458527) 39460 POINT(476.891754 814.605225) 39461 POINT(758.706299 983.360718) 39462 POINT(866.669434 898.623962) 39463 POINT(366.788788 667.358093) 39464 POINT(336.642334 868.590393) 39465 POINT(510.581024 806.554626) 39466 POINT(927.43219 39.7197952) 39467 POINT(420.970581 426.795105) 39468 POINT(153.50885 352.371307) 39469 POINT(732.42218 112.378006) 39470 POINT(93.6099854 231.495071) 39471 POINT(808.997925 391.99881) 39472 POINT(763.753723 818.712769) 39473 POINT(399.384796 35.6931534) 39474 POINT(263.886719 613.223145) 39475 POINT(748.860596 214.936539) 39476 POINT(133.961731 518.086792) 39477 POINT(59.5151787 841.402588) 39478 POINT(778.322815 605.799255) 39479 POINT(709.592957 153.914642) 39480 POINT(418.889191 412.703064) 39481 POINT(939.047852 503.195038) 39482 POINT(471.087524 957.624268) 39483 POINT(879.926636 541.099854) 39484 POINT(358.238281 808.69696) 39485 POINT(283.790527 671.727417) 39486 POINT(899.716858 636.810364) 39487 POINT(78.9186935 698.329773) 39488 POINT(538.388489 678.282532) 39489 POINT(810.530151 400.192902) 39490 POINT(779.371155 157.629929) 39491 POINT(988.835022 111.05706) 39492 POINT(464.061401 908.717834) 39493 POINT(631.649109 824.327087) 39494 POINT(522.634033 484.79306) 39495 POINT(657.951294 514.999084) 39496 POINT(960.091614 911.218445) 39497 POINT(911.649292 104.256287) 39498 POINT(313.717926 746.05249) 39499 POINT(194.566254 176.04126) 39500 POINT(154.920578 250.494019) 39501 POINT(816.039551 327.192261) 39502 POINT(330.508179 601.799561) 39503 POINT(453.406036 51.1683083) 39504 POINT(185.12648 214.372345) 39505 POINT(21.0488529 742.830933) 39506 POINT(568.701782 269.728973) 39507 POINT(301.729675 706.67511) 39508 POINT(804.248291 533.013794) 39509 POINT(166.887543 657.412842) 39510 POINT(219.363632 883.3125) 39511 POINT(744.829712 839.634521) 39512 POINT(279.356934 778.508484) 39513 POINT(157.783859 547.755005) 39514 POINT(704.546021 74.7393036) 39515 POINT(789.254089 999.577026) 39516 POINT(315.272827 328.187531) 39517 POINT(138.783447 473.166138) 39518 POINT(285.185974 416.139984) 39519 POINT(426.959137 639.562683) 39520 POINT(259.023163 158.768646) 39521 POINT(312.305695 661.007751) 39522 POINT(621.316223 627.330078) 39523 POINT(534.73468 939.302612) 39524 POINT(506.078735 153.495651) 39525 POINT(496.70929 220.765625) 39526 POINT(786.69519 263.969574) 39527 POINT(800.627258 937.715149) 39528 POINT(855.104797 50.7200623) 39529 POINT(474.626892 301.847931) 39530 POINT(18.2819595 936.950256) 39531 POINT(12.7182226 388.275787) 39532 POINT(539.405701 639.91272) 39533 POINT(730.586792 651.927368) 39534 POINT(915.553162 981.987244) 39535 POINT(175.497665 407.749481) 39536 POINT(800.938782 319.881958) 39537 POINT(135.447372 455.49704) 39538 POINT(895.477661 897.804565) 39539 POINT(955.207397 427.367767) 39540 POINT(166.717804 674.013428) 39541 POINT(499.427338 536.40979) 39542 POINT(456.036377 801.967468) 39543 POINT(897.908936 175.242004) 39544 POINT(37.6224136 288.637543) 39545 POINT(686.023499 493.524658) 39546 POINT(204.494873 615.331909) 39547 POINT(712.665527 419.778931) 39548 POINT(806.073792 643.16687) 39549 POINT(155.865082 105.183136) 39550 POINT(666.205261 679.240601) 39551 POINT(667.110229 986.092224) 39552 POINT(481.733887 534.437561) 39553 POINT(392.560913 386.091431) 39554 POINT(605.536682 34.0137558) 39555 POINT(803.803406 120.879997) 39556 POINT(723.329895 162.725922) 39557 POINT(651.855042 9.28532124) 39558 POINT(962.601257 642.944031) 39559 POINT(253.169235 625.964905) 39560 POINT(249.900482 703.201538) 39561 POINT(870.912659 416.20639) 39562 POINT(537.76532 432.919403) 39563 POINT(392.428558 306.669281) 39564 POINT(836.206848 914.116882) 39565 POINT(376.316589 829.519714) 39566 POINT(240.50322 140.963547) 39567 POINT(979.833679 188.426285) 39568 POINT(484.746307 91.8226776) 39569 POINT(237.36348 556.154541) 39570 POINT(59.9747505 605.394653) 39571 POINT(679.63916 643.501648) 39572 POINT(910.751038 472.736725) 39573 POINT(725.503967 422.151581) 39574 POINT(911.773743 320.970551) 39575 POINT(585.627747 39.430172) 39576 POINT(176.750809 3.68387699) 39577 POINT(361.282318 916.25116) 39578 POINT(168.619171 789.299438) 39579 POINT(449.643311 771.745667) 39580 POINT(169.722916 254.563492) 39581 POINT(456.88562 635.759338) 39582 POINT(992.327576 438.961731) 39583 POINT(326.464325 575.810303) 39584 POINT(626.549011 131.089264) 39585 POINT(895.423157 926.079163) 39586 POINT(550.228516 664.201172) 39587 POINT(257.485138 826.025696) 39588 POINT(582.442139 960.386414) 39589 POINT(127.312325 184.396957) 39590 POINT(821.252441 836.707703) 39591 POINT(433.055237 125.435448) 39592 POINT(442.204865 468.519165) 39593 POINT(9.65635586 158.365173) 39594 POINT(975.242798 981.929932) 39595 POINT(996.958679 864.703857) 39596 POINT(355.622009 146.561752) 39597 POINT(166.256821 712.223206) 39598 POINT(243.613968 179.516296) 39599 POINT(286.399445 586.683411) 39600 POINT(215.98941 510.613739) 39601 POINT(3.91134524 955.651733) 39602 POINT(790.295654 646.901733) 39603 POINT(836.991089 931.259888) 39604 POINT(394.723633 801.20105) 39605 POINT(384.90506 334.755127) 39606 POINT(338.976471 895.717163) 39607 POINT(924.63147 654.889954) 39608 POINT(275.193817 738.792053) 39609 POINT(226.11203 269.92038) 39610 POINT(215.979263 312.615936) 39611 POINT(764.776672 720.223572) 39612 POINT(755.361511 54.6974831) 39613 POINT(971.880859 191.900513) 39614 POINT(27.6695766 9.27379894) 39615 POINT(744.510925 733.429138) 39616 POINT(151.510147 650.412476) 39617 POINT(970.886047 375.323242) 39618 POINT(407.12149 810.733459) 39619 POINT(223.941971 70.3169022) 39620 POINT(354.291412 403.496979) 39621 POINT(276.385193 797.927185) 39622 POINT(136.833145 806.929443) 39623 POINT(510.834137 877.081421) 39624 POINT(663.509644 834.381104) 39625 POINT(284.829224 364.178467) 39626 POINT(482.605988 979.141724) 39627 POINT(586.024475 757.462036) 39628 POINT(459.512512 76.0202408) 39629 POINT(929.531189 223.52388) 39630 POINT(758.271179 31.29245) 39631 POINT(37.0497475 365.345306) 39632 POINT(756.750671 847.113892) 39633 POINT(854.106567 586.386108) 39634 POINT(981.7677 705.412354) 39635 POINT(443.545258 310.310974) 39636 POINT(729.013916 419.641754) 39637 POINT(104.656281 395.11026) 39638 POINT(980.146118 541.268433) 39639 POINT(150.358902 753.349304) 39640 POINT(496.047516 892.759094) 39641 POINT(400.170807 442.420868) 39642 POINT(454.393616 252.058929) 39643 POINT(962.957153 820.953674) 39644 POINT(817.697815 437.632355) 39645 POINT(967.392456 46.5511818) 39646 POINT(324.544342 631.244446) 39647 POINT(804.581726 498.020203) 39648 POINT(854.43042 561.586426) 39649 POINT(259.3797 190.057404) 39650 POINT(141.361374 179.999496) 39651 POINT(785.749634 973.460632) 39652 POINT(822.010376 854.971313) 39653 POINT(616.276184 108.432426) 39654 POINT(472.945282 450.431854) 39655 POINT(454.070953 507.16394) 39656 POINT(193.329605 130.448792) 39657 POINT(72.2940445 674.985229) 39658 POINT(952.945923 436.631409) 39659 POINT(215.991943 762.915955) 39660 POINT(81.8107376 341.934357) 39661 POINT(64.6794586 570.053406) 39662 POINT(111.623657 213.774551) 39663 POINT(51.954525 209.115189) 39664 POINT(578.513 179.223068) 39665 POINT(758.436523 145.46846) 39666 POINT(201.826004 424.924011) 39667 POINT(682.59491 627.597717) 39668 POINT(109.010704 774.363647) 39669 POINT(64.8421173 99.293663) 39670 POINT(979.017883 145.827866) 39671 POINT(285.98761 990.612305) 39672 POINT(326.309998 527.136047) 39673 POINT(202.29361 561.207947) 39674 POINT(797.821533 119.935822) 39675 POINT(714.573853 966.961426) 39676 POINT(662.51532 659.526489) 39677 POINT(824.788269 955.508911) 39678 POINT(447.094482 349.015167) 39679 POINT(915.296082 100.553276) 39680 POINT(424.651886 742.882141) 39681 POINT(326.341187 56.5605583) 39682 POINT(861.39325 549.161987) 39683 POINT(917.592896 268.082764) 39684 POINT(238.996078 106.468307) 39685 POINT(918.906738 980.61322) 39686 POINT(218.740677 37.668232) 39687 POINT(321.292175 367.289703) 39688 POINT(723.460693 732.438354) 39689 POINT(476.875519 468.273193) 39690 POINT(962.935974 203.118866) 39691 POINT(690.072205 313.216339) 39692 POINT(499.027954 969.766724) 39693 POINT(942.977722 703.503601) 39694 POINT(973.215881 829.257324) 39695 POINT(636.043945 327.114197) 39696 POINT(38.9171677 158.483978) 39697 POINT(298.430481 87.8869324) 39698 POINT(444.89621 192.571533) 39699 POINT(667.139954 191.126343) 39700 POINT(398.121246 45.5925903) 39701 POINT(714.425903 842.983093) 39702 POINT(41.6935272 34.2175789) 39703 POINT(61.3792496 611.598083) 39704 POINT(566.139404 695.329773) 39705 POINT(522.562561 48.9678917) 39706 POINT(533.746033 218.810547) 39707 POINT(130.708847 84.8451996) 39708 POINT(42.1800575 448.98468) 39709 POINT(68.5827179 744.338135) 39710 POINT(444.924683 135.778015) 39711 POINT(242.006271 691.435547) 39712 POINT(244.803558 373.264313) 39713 POINT(346.784729 9.32104111) 39714 POINT(198.843994 673.384399) 39715 POINT(873.96051 58.5170441) 39716 POINT(536.917847 551.243652) 39717 POINT(551.737244 534.727966) 39718 POINT(875.054138 901.198853) 39719 POINT(805.93103 324.450165) 39720 POINT(972.237732 516.222473) 39721 POINT(329.430695 38.3431358) 39722 POINT(965.214539 433.693756) 39723 POINT(258.517059 315.981628) 39724 POINT(350.762115 106.352188) 39725 POINT(561.758667 32.5402908) 39726 POINT(453.620972 815.824097) 39727 POINT(435.453735 305.42038) 39728 POINT(808.519775 26.6835842) 39729 POINT(976.230103 869.671082) 39730 POINT(137.277252 170.853607) 39731 POINT(452.582092 653.755432) 39732 POINT(960.778931 445.327057) 39733 POINT(737.070312 695.871216) 39734 POINT(347.774078 781.355164) 39735 POINT(82.0249786 365.380157) 39736 POINT(568.111511 21.7041454) 39737 POINT(444.377106 929.28186) 39738 POINT(140.556778 236.230072) 39739 POINT(88.3323669 81.0656509) 39740 POINT(801.148804 867.409729) 39741 POINT(644.757019 145.284531) 39742 POINT(576.73468 269.751984) 39743 POINT(188.242889 318.050751) 39744 POINT(442.559113 73.9926453) 39745 POINT(39.8720398 799.200623) 39746 POINT(938.405273 443.057404) 39747 POINT(826.841064 829.594238) 39748 POINT(783.725037 607.001465) 39749 POINT(68.5875854 46.0072289) 39750 POINT(590.536133 374.167725) 39751 POINT(30.2728195 801.060486) 39752 POINT(548.791992 561.931763) 39753 POINT(433.919098 26.9726639) 39754 POINT(730.768066 309.541992) 39755 POINT(568.814026 225.586975) 39756 POINT(910.205688 5.24942732) 39757 POINT(447.732147 384.717285) 39758 POINT(453.073486 448.32373) 39759 POINT(543.970581 209.607834) 39760 POINT(547.551086 882.454712) 39761 POINT(774.15979 441.055878) 39762 POINT(392.02417 579.859436) 39763 POINT(299.420349 146.985092) 39764 POINT(745.45105 765.189697) 39765 POINT(266.957397 426.079956) 39766 POINT(711.492676 275.730164) 39767 POINT(247.990631 670.225098) 39768 POINT(726.477844 530.681763) 39769 POINT(116.524475 382.289978) 39770 POINT(354.932617 89.4510269) 39771 POINT(805.498169 38.234726) 39772 POINT(771.476746 419.354034) 39773 POINT(449.079559 884.188721) 39774 POINT(283.951996 960.159607) 39775 POINT(127.160027 152.298065) 39776 POINT(192.394775 300.22348) 39777 POINT(853.482605 511.598633) 39778 POINT(897.716248 291.025391) 39779 POINT(753.417786 705.431091) 39780 POINT(891.654846 388.74588) 39781 POINT(50.4572945 94.0677032) 39782 POINT(947.785706 978.778992) 39783 POINT(589.400269 64.9985809) 39784 POINT(67.3094177 108.056297) 39785 POINT(64.4731598 104.08046) 39786 POINT(41.3136559 7.67248726) 39787 POINT(865.881958 364.453339) 39788 POINT(604.653503 262.092438) 39789 POINT(810.305176 218.390671) 39790 POINT(260.102173 89.3466644) 39791 POINT(859.477417 937.285645) 39792 POINT(832.672791 197.877594) 39793 POINT(964.296753 989.645935) 39794 POINT(513.830933 229.495346) 39795 POINT(185.946136 664.746094) 39796 POINT(617.646729 174.278931) 39797 POINT(354.609283 774.57428) 39798 POINT(992.847412 32.8805008) 39799 POINT(422.862122 28.6319351) 39800 POINT(216.423187 725.845642) 39801 POINT(875.249939 550.35553) 39802 POINT(489.22467 20.1661911) 39803 POINT(666.53894 661.404663) 39804 POINT(918.325256 412.871124) 39805 POINT(105.426102 17.400692) 39806 POINT(414.364868 223.203613) 39807 POINT(382.980682 968.131287) 39808 POINT(267.347107 982.611328) 39809 POINT(398.784027 434.615845) 39810 POINT(57.246521 849.81311) 39811 POINT(573.76416 958.219604) 39812 POINT(575.240295 631.632446) 39813 POINT(196.345978 962.326294) 39814 POINT(999.483093 864.773621) 39815 POINT(845.138855 769.644287) 39816 POINT(511.288208 755.547302) 39817 POINT(712.468567 898.390259) 39818 POINT(631.682007 920.643616) 39819 POINT(442.266022 494.336548) 39820 POINT(786.010498 299.942108) 39821 POINT(944.902405 84.6326828) 39822 POINT(400.162842 190.20195) 39823 POINT(690.398682 820.637146) 39824 POINT(333.735718 585.081482) 39825 POINT(168.041504 933.579407) 39826 POINT(753.913452 301.711151) 39827 POINT(570.938782 697.188721) 39828 POINT(942.924622 267.020416) 39829 POINT(682.708191 979.576477) 39830 POINT(758.73407 758.869263) 39831 POINT(352.690704 692.371094) 39832 POINT(983.323486 919.040649) 39833 POINT(616.327087 593.728699) 39834 POINT(998.838867 939.23114) 39835 POINT(297.261353 974.357239) 39836 POINT(735.469788 569.867126) 39837 POINT(994.10022 518.693481) 39838 POINT(695.754822 8.04338837) 39839 POINT(462.442078 869.097961) 39840 POINT(840.770813 418.910522) 39841 POINT(134.802399 177.218826) 39842 POINT(940.178711 858.852173) 39843 POINT(538.539062 767.015747) 39844 POINT(559.317749 863.819824) 39845 POINT(664.073608 287.414062) 39846 POINT(554.522827 497.905853) 39847 POINT(470.001923 743.918335) 39848 POINT(847.796631 921.91864) 39849 POINT(83.5944138 178.095001) 39850 POINT(382.200226 126.289696) 39851 POINT(338.333405 637.616394) 39852 POINT(751.299622 104.637863) 39853 POINT(886.286377 339.145874) 39854 POINT(734.271057 541.893494) 39855 POINT(612.145569 478.958679) 39856 POINT(240.537872 812.84613) 39857 POINT(665.688232 164.692108) 39858 POINT(314.891907 382.726898) 39859 POINT(406.360718 114.472122) 39860 POINT(419.900909 361.018738) 39861 POINT(531.916809 550.980164) 39862 POINT(194.078964 163.761108) 39863 POINT(834.938354 577.523315) 39864 POINT(982.003723 809.475037) 39865 POINT(417.128174 996.211121) 39866 POINT(299.61911 21.3906593) 39867 POINT(890.141663 265.892456) 39868 POINT(890.807678 886.452576) 39869 POINT(530.153625 116.177612) 39870 POINT(459.529816 572.771606) 39871 POINT(536.240845 265.878143) 39872 POINT(538.096497 415.576691) 39873 POINT(302.992493 37.4037056) 39874 POINT(242.291595 321.707733) 39875 POINT(866.682312 226.528854) 39876 POINT(37.0349236 829.32135) 39877 POINT(661.100708 958.590515) 39878 POINT(714.146362 598.419922) 39879 POINT(241.136307 32.3214417) 39880 POINT(891.730774 545.348389) 39881 POINT(344.923706 281.520782) 39882 POINT(761.074463 107.447769) 39883 POINT(292.468231 148.585663) 39884 POINT(13.1694164 210.149078) 39885 POINT(311.87793 104.177086) 39886 POINT(807.635254 776.096863) 39887 POINT(573.561523 921.199036) 39888 POINT(939.582031 73.2034073) 39889 POINT(955.994995 541.68158) 39890 POINT(605.674072 745.259338) 39891 POINT(400.052765 300.553009) 39892 POINT(163.256866 44.9088593) 39893 POINT(996.698792 294.764099) 39894 POINT(262.971832 25.098875) 39895 POINT(137.422928 429.519135) 39896 POINT(665.995789 312.822021) 39897 POINT(408.694458 120.819466) 39898 POINT(835.229736 550.005554) 39899 POINT(779.520874 286.118042) 39900 POINT(121.865799 743.293701) 39901 POINT(691.70636 379.214844) 39902 POINT(614.356689 110.390724) 39903 POINT(170.478561 103.823929) 39904 POINT(738.588684 679.368347) 39905 POINT(111.808174 620.360413) 39906 POINT(711.84259 913.304871) 39907 POINT(633.109741 605.910522) 39908 POINT(377.858734 160.856613) 39909 POINT(285.348938 267.157593) 39910 POINT(658.074829 329.526489) 39911 POINT(84.2674103 184.973389) 39912 POINT(420.072693 38.7803688) 39913 POINT(621.983521 797.790955) 39914 POINT(516.773071 721.68396) 39915 POINT(941.267212 34.7391434) 39916 POINT(820.402222 933.926758) 39917 POINT(695.076477 480.431641) 39918 POINT(448.289032 116.13559) 39919 POINT(253.367508 898.498108) 39920 POINT(940.83374 498.038879) 39921 POINT(565.754028 633.271179) 39922 POINT(746.337952 880.748596) 39923 POINT(528.429626 536.975037) 39924 POINT(36.7468452 976.207764) 39925 POINT(451.138672 587.406738) 39926 POINT(119.798515 501.380157) 39927 POINT(667.263733 238.177353) 39928 POINT(726.796082 640.321472) 39929 POINT(897.806519 15.449791) 39930 POINT(394.538544 11.7789822) 39931 POINT(266.80011 692.73822) 39932 POINT(381.308685 265.964172) 39933 POINT(798.26709 55.3324776) 39934 POINT(869.79425 624.789612) 39935 POINT(308.106812 340.498077) 39936 POINT(127.103325 458.948425) 39937 POINT(171.272644 706.63678) 39938 POINT(279.450745 637.155212) 39939 POINT(906.408569 857.54364) 39940 POINT(85.5829163 302.70285) 39941 POINT(616.021118 305.873535) 39942 POINT(680.642029 735.87915) 39943 POINT(367.644592 797.652039) 39944 POINT(536.147705 494.025818) 39945 POINT(745.825439 497.490265) 39946 POINT(620.408997 421.02005) 39947 POINT(269.73465 528.062805) 39948 POINT(928.42157 862.255127) 39949 POINT(708.580078 8.98724461) 39950 POINT(615.724487 377.957977) 39951 POINT(666.607178 506.72644) 39952 POINT(54.4789658 925.693298) 39953 POINT(109.362022 711.374084) 39954 POINT(323.014404 281.584595) 39955 POINT(799.174927 636.657776) 39956 POINT(236.206024 929.165955) 39957 POINT(264.762604 900.299805) 39958 POINT(770.373901 695.533813) 39959 POINT(889.826599 902.744629) 39960 POINT(83.1235275 627.881348) 39961 POINT(739.054382 468.541504) 39962 POINT(678.999512 441.483093) 39963 POINT(695.635864 747.342957) 39964 POINT(232.446045 935.29657) 39965 POINT(539.05365 657.137268) 39966 POINT(209.926041 56.7200928) 39967 POINT(500.37265 673.213318) 39968 POINT(495.845825 436.485901) 39969 POINT(177.548813 370.302307) 39970 POINT(437.979614 732.583618) 39971 POINT(136.532822 375.831573) 39972 POINT(6.3360424 683.546753) 39973 POINT(54.421608 618.367188) 39974 POINT(476.927094 432.051208) 39975 POINT(445.986511 301.83252) 39976 POINT(283.88266 135.864853) 39977 POINT(250.095718 513.328857) 39978 POINT(458.122894 721.660278) 39979 POINT(311.478027 906.322693) 39980 POINT(619.800293 585.603088) 39981 POINT(877.706299 383.208221) 39982 POINT(499.524811 221.11348) 39983 POINT(21.0923538 39.0237732) 39984 POINT(817.681946 917.564209) 39985 POINT(598.390625 994.257385) 39986 POINT(392.770203 473.333649) 39987 POINT(263.93689 827.685547) 39988 POINT(122.55825 92.6190872) 39989 POINT(768.358459 574.162781) 39990 POINT(983.074707 468.396698) 39991 POINT(497.66922 146.934204) 39992 POINT(120.177231 315.179321) 39993 POINT(956.908142 314.741425) 39994 POINT(120.03569 16.6856651) 39995 POINT(777.135254 261.696777) 39996 POINT(494.740753 447.733948) 39997 POINT(251.313049 299.229462) 39998 POINT(616.992981 659.773438) 39999 POINT(388.263977 516.571411) 40000 POINT(796.128845 869.257385) 40001 POINT(847.509521 347.112671) 40002 POINT(872.419861 831.954651) 40003 POINT(792.498535 5.98716211) 40004 POINT(786.589172 139.33577) 40005 POINT(914.776855 98.5519028) 40006 POINT(678.887451 541.012085) 40007 POINT(454.426392 4.72603083) 40008 POINT(512.063538 26.1479836) 40009 POINT(618.105713 770.806213) 40010 POINT(273.465912 923.717529) 40011 POINT(98.9031448 564.354248) 40012 POINT(974.768311 683.975769) 40013 POINT(483.711914 410.659393) 40014 POINT(867.997009 649.729431) 40015 POINT(823.848206 88.3384476) 40016 POINT(171.34317 24.7076073) 40017 POINT(1.15663612 139.706146) 40018 POINT(738.490723 296.965149) 40019 POINT(281.023193 887.096985) 40020 POINT(304.823822 617.839478) 40021 POINT(469.796143 843.456482) 40022 POINT(449.972107 502.18988) 40023 POINT(829.486694 683.96521) 40024 POINT(178.894409 774.764221) 40025 POINT(617.788147 990.567932) 40026 POINT(946.421936 902.476501) 40027 POINT(165.051651 794.028137) 40028 POINT(139.316528 825.681519) 40029 POINT(448.64212 785.117065) 40030 POINT(45.0264549 626.357117) 40031 POINT(433.95462 230.001984) 40032 POINT(440.129974 981.248474) 40033 POINT(103.308052 652.673462) 40034 POINT(339.772308 367.899017) 40035 POINT(250.079025 302.821808) 40036 POINT(581.163879 586.129944) 40037 POINT(265.055359 140.03978) 40038 POINT(641.491394 882.603821) 40039 POINT(352.457306 379.319214) 40040 POINT(988.59314 17.897831) 40041 POINT(779.902283 668.875488) 40042 POINT(859.78241 80.9402542) 40043 POINT(863.409485 335.351166) 40044 POINT(391.720215 962.266235) 40045 POINT(717.113586 225.020309) 40046 POINT(666.80481 763.487366) 40047 POINT(237.55864 899.96637) 40048 POINT(386.856873 304.43927) 40049 POINT(52.2921944 988.1875) 40050 POINT(373.762787 441.077942) 40051 POINT(28.0966702 524.673523) 40052 POINT(973.12738 416.387634) 40053 POINT(519.847961 110.797623) 40054 POINT(197.964874 613.995605) 40055 POINT(539.056519 631.601501) 40056 POINT(295.208191 191.157715) 40057 POINT(952.135071 340.074829) 40058 POINT(501.667725 346.194214) 40059 POINT(280.979553 95.3182144) 40060 POINT(434.465942 777.858093) 40061 POINT(599.307495 944.1297) 40062 POINT(643.480835 963.671021) 40063 POINT(902.249878 595.301941) 40064 POINT(852.649719 604.755615) 40065 POINT(506.94812 450.604248) 40066 POINT(798.930542 230.540421) 40067 POINT(929.500427 39.5344429) 40068 POINT(11.2396803 942.953308) 40069 POINT(17.788229 35.5555649) 40070 POINT(478.851227 412.017914) 40071 POINT(217.87764 604.413025) 40072 POINT(764.749329 959.410583) 40073 POINT(859.337708 10.6074047) 40074 POINT(502.592651 220.438782) 40075 POINT(485.585571 62.1544533) 40076 POINT(357.723328 935.606873) 40077 POINT(81.00811 747.999207) 40078 POINT(867.601562 758.599915) 40079 POINT(687.011658 974.090088) 40080 POINT(242.869186 86.936554) 40081 POINT(312.315308 556.014648) 40082 POINT(297.757507 224.127045) 40083 POINT(264.870483 16.7288551) 40084 POINT(481.705505 207.963959) 40085 POINT(428.00882 471.372559) 40086 POINT(249.911911 319.233643) 40087 POINT(514.184143 177.190811) 40088 POINT(189.305298 189.955933) 40089 POINT(726.480713 670.515686) 40090 POINT(811.400085 22.1525574) 40091 POINT(389.550201 805.590149) 40092 POINT(341.15799 309.647614) 40093 POINT(154.566086 218.332748) 40094 POINT(230.866486 619.684448) 40095 POINT(92.0317154 544.174255) 40096 POINT(272.869141 71.9874878) 40097 POINT(944.854492 170.702896) 40098 POINT(790.563782 674.721863) 40099 POINT(683.136719 966.500732) 40100 POINT(372.362305 304.645355) 40101 POINT(270.889404 626.350769) 40102 POINT(350.355774 908.271484) 40103 POINT(790.736206 354.661865) 40104 POINT(789.442322 148.357529) 40105 POINT(171.140594 183.854218) 40106 POINT(171.976013 812.411987) 40107 POINT(195.404144 418.541565) 40108 POINT(469.02536 564.721191) 40109 POINT(44.3926773 401.247131) 40110 POINT(566.662903 178.787094) 40111 POINT(715.544495 918.317749) 40112 POINT(452.035706 991.839783) 40113 POINT(477.200043 278.510956) 40114 POINT(500.113068 626.650085) 40115 POINT(345.803345 89.8978806) 40116 POINT(181.914871 818.260132) 40117 POINT(28.3167629 487.351471) 40118 POINT(535.765198 645.137756) 40119 POINT(45.6481476 492.703979) 40120 POINT(504.884094 416.930817) 40121 POINT(865.517822 58.0075874) 40122 POINT(400.746185 626.367126) 40123 POINT(923.62677 400.198059) 40124 POINT(158.546082 583.450867) 40125 POINT(826.985474 499.441345) 40126 POINT(18.3825531 859.112366) 40127 POINT(817.704102 135.76712) 40128 POINT(806.10791 356.666504) 40129 POINT(562.443176 877.109314) 40130 POINT(66.9998474 477.232239) 40131 POINT(433.205231 820.062073) 40132 POINT(92.45121 364.712891) 40133 POINT(898.476013 201.617661) 40134 POINT(996.803345 912.684204) 40135 POINT(267.277649 840.612549) 40136 POINT(773.4729 35.8867531) 40137 POINT(467.985626 591.914001) 40138 POINT(964.953369 489.873871) 40139 POINT(522.417664 980.515503) 40140 POINT(701.562378 241.275085) 40141 POINT(945.485229 68.2719116) 40142 POINT(333.519592 416.25293) 40143 POINT(91.4891357 550.222351) 40144 POINT(337.779388 194.854004) 40145 POINT(937.946838 503.174042) 40146 POINT(215.81749 573.494019) 40147 POINT(482.795013 54.9257164) 40148 POINT(505.239716 726.810852) 40149 POINT(695.173035 212.302353) 40150 POINT(53.7025909 194.232544) 40151 POINT(246.145599 899.773682) 40152 POINT(298.412109 367.131866) 40153 POINT(324.170654 903.195557) 40154 POINT(361.716431 721.281982) 40155 POINT(59.4997444 386.116028) 40156 POINT(419.4758 29.0368156) 40157 POINT(118.76403 215.734589) 40158 POINT(583.549683 889.392029) 40159 POINT(140.638306 784.213013) 40160 POINT(725.581726 465.630524) 40161 POINT(948.69165 886.469849) 40162 POINT(472.107758 344.033112) 40163 POINT(59.4619179 581.314575) 40164 POINT(439.807465 88.1813354) 40165 POINT(391.688538 647.903503) 40166 POINT(526.534485 917.354675) 40167 POINT(343.887787 98.743515) 40168 POINT(303.789948 180.724579) 40169 POINT(437.56424 334.194519) 40170 POINT(797.870239 18.3800297) 40171 POINT(495.95343 547.593811) 40172 POINT(931.46637 23.2286243) 40173 POINT(145.044708 306.352325) 40174 POINT(809.590454 462.662109) 40175 POINT(164.617538 249.880722) 40176 POINT(761.048462 944.350281) 40177 POINT(590.152954 232.839752) 40178 POINT(430.091522 466.041565) 40179 POINT(257.881439 190.456833) 40180 POINT(296.299896 864.845154) 40181 POINT(809.162598 465.605133) 40182 POINT(281.26059 457.809784) 40183 POINT(719.237427 284.733795) 40184 POINT(778.384155 463.987671) 40185 POINT(209.66539 736.916199) 40186 POINT(670.587036 830.495972) 40187 POINT(542.082153 748.227295) 40188 POINT(35.9927101 703.89447) 40189 POINT(100.051399 668.969482) 40190 POINT(93.8430176 736.659668) 40191 POINT(350.618256 736.167847) 40192 POINT(24.1606808 80.4343719) 40193 POINT(570.709351 636.100891) 40194 POINT(71.180687 567.484985) 40195 POINT(536.896606 984.898315) 40196 POINT(481.121613 634.446411) 40197 POINT(949.511353 848.524536) 40198 POINT(451.56488 803.637024) 40199 POINT(511.03894 531.503784) 40200 POINT(207.748459 453.277161) 40201 POINT(449.654785 136.877472) 40202 POINT(348.779236 515.754333) 40203 POINT(95.3090973 714.097595) 40204 POINT(705.573425 120.1875) 40205 POINT(429.691467 808.452087) 40206 POINT(556.815002 910.116455) 40207 POINT(472.586914 562.412476) 40208 POINT(297.074005 327.967529) 40209 POINT(893.582458 118.846367) 40210 POINT(633.271423 964.437683) 40211 POINT(385.930206 376.824066) 40212 POINT(395.858551 663.138306) 40213 POINT(472.874237 356.865784) 40214 POINT(836.467224 379.404999) 40215 POINT(478.293518 763.658325) 40216 POINT(294.579865 388.407349) 40217 POINT(153.600174 275.862152) 40218 POINT(755.282959 783.489563) 40219 POINT(760.105042 645.613159) 40220 POINT(694.850159 903.584167) 40221 POINT(437.268677 621.294922) 40222 POINT(780.324707 371.726868) 40223 POINT(197.285782 798.349731) 40224 POINT(216.126495 448.951385) 40225 POINT(458.307831 802.153503) 40226 POINT(530.818665 933.574097) 40227 POINT(323.428406 277.786163) 40228 POINT(289.481384 530.12561) 40229 POINT(819.592896 332.979828) 40230 POINT(973.718079 530.61731) 40231 POINT(597.235107 697.352112) 40232 POINT(167.36731 489.732086) 40233 POINT(553.192871 533.582336) 40234 POINT(249.823303 921.815491) 40235 POINT(949.947754 690.440674) 40236 POINT(261.931183 628.754639) 40237 POINT(665.227539 115.134026) 40238 POINT(156.286423 202.131531) 40239 POINT(597.38501 50.5192108) 40240 POINT(662.127991 289.213867) 40241 POINT(181.737 704.198486) 40242 POINT(825.691772 19.8164501) 40243 POINT(727.335693 979.837708) 40244 POINT(473.830017 349.863068) 40245 POINT(476.7211 60.330246) 40246 POINT(388.974701 168.274216) 40247 POINT(115.438393 597.400391) 40248 POINT(577.321716 657.882324) 40249 POINT(934.015625 728.245972) 40250 POINT(312.760651 310.351227) 40251 POINT(71.3124847 357.842224) 40252 POINT(503.017029 22.0893288) 40253 POINT(671.428894 132.166092) 40254 POINT(661.2771 86.0572433) 40255 POINT(371.585999 315.078522) 40256 POINT(388.930725 526.974915) 40257 POINT(138.571152 667.777039) 40258 POINT(748.811523 879.138855) 40259 POINT(997.600891 228.073074) 40260 POINT(402.379608 91.9099579) 40261 POINT(889.06604 176.365723) 40262 POINT(520.758301 73.5905533) 40263 POINT(562.957458 350.795837) 40264 POINT(583.586975 396.159882) 40265 POINT(723.341675 296.03067) 40266 POINT(529.618225 718.103333) 40267 POINT(289.693481 374.418671) 40268 POINT(800.306763 517.881775) 40269 POINT(699.956848 576.473938) 40270 POINT(556.884216 134.613144) 40271 POINT(271.775665 397.023529) 40272 POINT(390.281036 894.068359) 40273 POINT(221.42569 916.731262) 40274 POINT(772.568298 156.527283) 40275 POINT(550.714539 984.574524) 40276 POINT(112.287598 498.441376) 40277 POINT(514.760803 839.298584) 40278 POINT(821.192566 362.87027) 40279 POINT(220.49617 356.6315) 40280 POINT(226.732635 455.587616) 40281 POINT(347.465027 349.46405) 40282 POINT(376.3909 886.504089) 40283 POINT(377.657227 481.259338) 40284 POINT(883.185791 662.167847) 40285 POINT(746.457031 645.258057) 40286 POINT(515.835144 117.743019) 40287 POINT(237.21257 395.814392) 40288 POINT(504.952454 369.820068) 40289 POINT(820.426208 741.283325) 40290 POINT(734.021545 899.096375) 40291 POINT(146.277542 383.764984) 40292 POINT(529.722046 99.4152832) 40293 POINT(525.368286 148.789612) 40294 POINT(532.523376 612.536682) 40295 POINT(544.609436 732.430298) 40296 POINT(690.527405 702.615601) 40297 POINT(358.562195 114.709946) 40298 POINT(305.635468 897.605896) 40299 POINT(144.926453 672.497925) 40300 POINT(2.69478297 864.221008) 40301 POINT(518.005737 563.974854) 40302 POINT(673.907227 606.834045) 40303 POINT(735.743774 757.408081) 40304 POINT(760.160095 847.582397) 40305 POINT(22.3356915 812.274353) 40306 POINT(508.880585 4.36170912) 40307 POINT(45.6009254 379.166962) 40308 POINT(138.471329 825.395996) 40309 POINT(650.51593 320.539062) 40310 POINT(639.420044 144.319519) 40311 POINT(49.9360466 336.880432) 40312 POINT(451.99408 709.483643) 40313 POINT(331.084808 247.761032) 40314 POINT(633.341675 827.432434) 40315 POINT(950.495789 375.274658) 40316 POINT(719.280029 995.703857) 40317 POINT(787.510742 325.38028) 40318 POINT(107.619621 527.481506) 40319 POINT(812.05304 392.697205) 40320 POINT(953.256042 773.924988) 40321 POINT(829.212952 624.310852) 40322 POINT(736.266479 203.669159) 40323 POINT(502.337006 581.567993) 40324 POINT(511.834991 718.033997) 40325 POINT(667.062256 114.784081) 40326 POINT(497.057343 970.597595) 40327 POINT(148.462341 108.977486) 40328 POINT(919.74585 567.240356) 40329 POINT(27.6837845 529.537781) 40330 POINT(726.585144 184.485443) 40331 POINT(796.77832 71.1047134) 40332 POINT(803.824829 337.476227) 40333 POINT(642.643066 932.480957) 40334 POINT(237.706192 622.410278) 40335 POINT(342.940735 362.354736) 40336 POINT(971.70636 260.481476) 40337 POINT(896.602417 567.81604) 40338 POINT(94.2551346 80.7798462) 40339 POINT(85.1417923 788.59198) 40340 POINT(207.795883 238.201904) 40341 POINT(32.7941513 18.7021542) 40342 POINT(634.979248 899.898438) 40343 POINT(445.817596 223.572327) 40344 POINT(60.6035843 421.417786) 40345 POINT(334.664673 439.893555) 40346 POINT(991.960938 633.408264) 40347 POINT(505.783844 858.652832) 40348 POINT(751.962341 374.059052) 40349 POINT(129.300293 645.39032) 40350 POINT(658.369629 324.551758) 40351 POINT(999.634155 628.085449) 40352 POINT(351.348999 168.452759) 40353 POINT(291.254883 129.988678) 40354 POINT(626.202087 625.611633) 40355 POINT(332.368439 705.677246) 40356 POINT(527.473389 671.786621) 40357 POINT(164.655838 682.721008) 40358 POINT(236.743469 302.553436) 40359 POINT(994.600342 563.3255) 40360 POINT(514.49469 230.363022) 40361 POINT(466.974152 110.525948) 40362 POINT(164.798798 503.805389) 40363 POINT(477.327698 457.914215) 40364 POINT(411.669495 935.754944) 40365 POINT(789.600708 732.091797) 40366 POINT(892.316772 540.277954) 40367 POINT(417.129974 370.283356) 40368 POINT(572.933167 665.766479) 40369 POINT(768.379883 724.667175) 40370 POINT(617.8479 823.137024) 40371 POINT(238.792236 358.460297) 40372 POINT(636.858276 133.137985) 40373 POINT(861.508728 110.734634) 40374 POINT(795.347778 36.5100021) 40375 POINT(4.73607826 7.06785011) 40376 POINT(697.632751 246.225662) 40377 POINT(942.717957 156.794464) 40378 POINT(399.159363 584.218079) 40379 POINT(529.271606 155.801804) 40380 POINT(224.142258 188.424515) 40381 POINT(594.409119 223.108063) 40382 POINT(571.5755 842.791016) 40383 POINT(70.5671997 372.095367) 40384 POINT(596.939819 756.892639) 40385 POINT(68.4290619 651.100647) 40386 POINT(525.205261 777.436707) 40387 POINT(74.3666916 696.566223) 40388 POINT(551.82843 666.17334) 40389 POINT(371.422668 104.225594) 40390 POINT(444.436951 33.299263) 40391 POINT(510.866089 34.567337) 40392 POINT(393.979126 718.601562) 40393 POINT(827.2099 888.444397) 40394 POINT(658.611938 701.256714) 40395 POINT(319.795135 193.139572) 40396 POINT(577.952148 970.919617) 40397 POINT(770.393616 170.076248) 40398 POINT(544.092346 575.669739) 40399 POINT(358.631958 969.891296) 40400 POINT(136.68364 285.315491) 40401 POINT(733.41095 681.625488) 40402 POINT(453.227234 870.910156) 40403 POINT(35.0108299 888.805359) 40404 POINT(486.445892 943.13855) 40405 POINT(603.498596 460.29364) 40406 POINT(465.291595 44.1604919) 40407 POINT(496.7677 147.702148) 40408 POINT(334.984985 320.833008) 40409 POINT(746.552063 399.236847) 40410 POINT(907.793213 583.888977) 40411 POINT(851.698914 93.0622101) 40412 POINT(776.484009 980.172058) 40413 POINT(21.6139126 908.229858) 40414 POINT(406.111786 366.571472) 40415 POINT(393.993164 70.1399765) 40416 POINT(169.695816 908.661804) 40417 POINT(942.736755 778.249207) 40418 POINT(685.256592 458.64209) 40419 POINT(225.427826 809.775757) 40420 POINT(64.5353851 61.0253754) 40421 POINT(984.222229 423.590424) 40422 POINT(469.597748 46.3215942) 40423 POINT(976.805725 608.040039) 40424 POINT(267.615234 798.964844) 40425 POINT(170.746674 35.4852943) 40426 POINT(604.747314 512.884521) 40427 POINT(558.738708 430.821045) 40428 POINT(118.654785 303.939331) 40429 POINT(645.640442 822.786499) 40430 POINT(960.336609 551.091309) 40431 POINT(0.769606054 732.691956) 40432 POINT(187.388626 546.485291) 40433 POINT(868.597717 438.139343) 40434 POINT(763.256714 597.924744) 40435 POINT(473.954865 217.872452) 40436 POINT(894.543884 935.644836) 40437 POINT(458.34903 892.160706) 40438 POINT(757.997925 809.435852) 40439 POINT(534.414978 990.823975) 40440 POINT(10.6532984 343.357117) 40441 POINT(466.338623 743.498047) 40442 POINT(994.04718 255.415726) 40443 POINT(473.990906 544.996216) 40444 POINT(592.914124 801.205872) 40445 POINT(44.2052422 119.242378) 40446 POINT(99.8697205 6.77652073) 40447 POINT(419.028229 820.468079) 40448 POINT(683.000793 800.707031) 40449 POINT(50.8735161 168.01973) 40450 POINT(618.823303 312.937286) 40451 POINT(479.444244 124.702797) 40452 POINT(7.68153381 793.356934) 40453 POINT(134.320465 877.189514) 40454 POINT(354.42337 122.174988) 40455 POINT(817.614441 55.3637886) 40456 POINT(999.287476 182.953918) 40457 POINT(218.589706 795.927307) 40458 POINT(700.697205 784.814758) 40459 POINT(980.249268 690.11499) 40460 POINT(684.525696 830.241333) 40461 POINT(128.383652 97.5723572) 40462 POINT(617.936707 897.298035) 40463 POINT(216.31369 215.554428) 40464 POINT(377.824432 848.712769) 40465 POINT(291.571869 587.472046) 40466 POINT(254.977921 894.580872) 40467 POINT(790.17572 855.907776) 40468 POINT(659.343567 260.456726) 40469 POINT(74.2115784 716.655884) 40470 POINT(216.207794 178.978363) 40471 POINT(491.552124 431.834625) 40472 POINT(817.978149 902.208374) 40473 POINT(323.183899 397.023926) 40474 POINT(124.817131 285.486969) 40475 POINT(642.452942 130.67659) 40476 POINT(796.1297 824.314209) 40477 POINT(118.307579 430.336914) 40478 POINT(443.39032 826.777649) 40479 POINT(906.209106 101.703529) 40480 POINT(685.713013 309.105865) 40481 POINT(568.799622 661.14447) 40482 POINT(478.742096 735.46991) 40483 POINT(114.80014 303.389954) 40484 POINT(993.813843 550.216492) 40485 POINT(728.209717 542.892456) 40486 POINT(119.981804 626.958557) 40487 POINT(148.081696 624.480896) 40488 POINT(221.606735 980.663879) 40489 POINT(347.463898 666.799316) 40490 POINT(137.106842 942.980469) 40491 POINT(622.145569 676.582947) 40492 POINT(781.587341 215.062576) 40493 POINT(237.409836 944.695007) 40494 POINT(801.995728 904.271606) 40495 POINT(773.92804 813.241943) 40496 POINT(915.870667 580.116699) 40497 POINT(470.264832 559.865845) 40498 POINT(184.493256 200.080109) 40499 POINT(465.314209 868.947449) 40500 POINT(72.249588 247.584183) 40501 POINT(513.624573 504.051727) 40502 POINT(723.349182 772.963135) 40503 POINT(672.370117 831.227234) 40504 POINT(144.905319 55.1918144) 40505 POINT(661.199036 504.09259) 40506 POINT(575.093018 19.2119255) 40507 POINT(173.966095 159.975876) 40508 POINT(93.1057205 203.520615) 40509 POINT(801.199768 408.323212) 40510 POINT(803.497131 218.410782) 40511 POINT(408.938049 750.383972) 40512 POINT(713.922852 150.668579) 40513 POINT(646.310303 650.666626) 40514 POINT(688.101746 30.0521812) 40515 POINT(632.066711 599.314209) 40516 POINT(763.946899 191.538315) 40517 POINT(38.429348 239.478302) 40518 POINT(302.344147 450.792633) 40519 POINT(566.536499 79.695015) 40520 POINT(200.16806 404.885193) 40521 POINT(836.884216 828.5448) 40522 POINT(40.1565895 712.848694) 40523 POINT(724.169983 353.480652) 40524 POINT(41.6443787 878.801331) 40525 POINT(200.570114 819.241272) 40526 POINT(954.465759 222.196426) 40527 POINT(444.614929 860.951477) 40528 POINT(241.268097 384.099274) 40529 POINT(782.47821 115.705818) 40530 POINT(611.848755 784.6521) 40531 POINT(490.795746 12.6065674) 40532 POINT(0.888283789 955.098816) 40533 POINT(469.333405 108.98745) 40534 POINT(664.669678 48.5747871) 40535 POINT(730.322327 179.625671) 40536 POINT(163.243546 158.60881) 40537 POINT(819.570374 701.47876) 40538 POINT(495.341583 304.846985) 40539 POINT(31.1826096 829.855408) 40540 POINT(670.603149 184.435867) 40541 POINT(279.635223 699.543701) 40542 POINT(96.9289398 527.952942) 40543 POINT(4.9286046 188.500229) 40544 POINT(592.710938 274.539581) 40545 POINT(591.60614 700.104309) 40546 POINT(820.12616 816.387695) 40547 POINT(641.69751 116.176056) 40548 POINT(895.570679 422.994263) 40549 POINT(544.385864 676.049866) 40550 POINT(738.71759 196.295166) 40551 POINT(198.792801 991.709961) 40552 POINT(947.808472 725.205444) 40553 POINT(366.226013 825.685669) 40554 POINT(163.945221 89.1467514) 40555 POINT(928.18335 263.047211) 40556 POINT(742.791077 232.368698) 40557 POINT(608.100403 893.03772) 40558 POINT(272.780579 612.436218) 40559 POINT(358.160278 986.852417) 40560 POINT(952.376343 675.947449) 40561 POINT(325.454132 88.684227) 40562 POINT(905.91687 281.781036) 40563 POINT(880.525879 115.868362) 40564 POINT(222.115189 966.985474) 40565 POINT(730.11084 944.882935) 40566 POINT(338.369202 613.483826) 40567 POINT(337.06958 512.823547) 40568 POINT(567.922485 946.358459) 40569 POINT(254.629913 924.117554) 40570 POINT(228.889236 588.522217) 40571 POINT(147.720963 670.654236) 40572 POINT(340.676727 464.609344) 40573 POINT(148.16243 366.787476) 40574 POINT(13.9727144 932.098755) 40575 POINT(277.650543 901.035156) 40576 POINT(987.905396 503.79892) 40577 POINT(305.863281 411.614807) 40578 POINT(728.057129 687.297791) 40579 POINT(1.7237432 316.68866) 40580 POINT(760.658142 718.845154) 40581 POINT(23.1734447 851.447632) 40582 POINT(603.578003 617.058411) 40583 POINT(992.094666 277.668976) 40584 POINT(588.864685 472.110718) 40585 POINT(761.795349 497.48642) 40586 POINT(832.872498 555.58905) 40587 POINT(728.360535 97.7940979) 40588 POINT(579.919556 162.540176) 40589 POINT(815.94165 516.564514) 40590 POINT(558.488525 948.510681) 40591 POINT(609.579102 714.625732) 40592 POINT(982.931824 409.434784) 40593 POINT(975.445374 378.964386) 40594 POINT(499.279388 470.432098) 40595 POINT(433.585327 714.873169) 40596 POINT(5.02294016 440.993835) 40597 POINT(896.577393 508.352692) 40598 POINT(616.732971 789.323425) 40599 POINT(101.425606 576.823547) 40600 POINT(566.25061 859.039307) 40601 POINT(911.925354 460.768951) 40602 POINT(879.304871 258.967865) 40603 POINT(503.361298 242.378494) 40604 POINT(936.182739 803.880554) 40605 POINT(437.445038 476.204376) 40606 POINT(492.096344 563.937073) 40607 POINT(547.775452 163.502731) 40608 POINT(207.840256 427.063965) 40609 POINT(967.803833 544.158508) 40610 POINT(925.037048 115.948227) 40611 POINT(205.449661 781.366821) 40612 POINT(733.673523 494.792328) 40613 POINT(890.393921 703.663818) 40614 POINT(694.803162 306.125549) 40615 POINT(259.061798 991.193726) 40616 POINT(973.431213 891.08728) 40617 POINT(993.899353 158.618301) 40618 POINT(134.02211 554.603516) 40619 POINT(171.38588 521.794189) 40620 POINT(685.227112 767.307251) 40621 POINT(599.060425 930.869629) 40622 POINT(315.885223 467.071899) 40623 POINT(115.560806 316.003326) 40624 POINT(28.8054695 93.4228134) 40625 POINT(697.285889 196.344727) 40626 POINT(893.110107 307.278198) 40627 POINT(746.925598 936.70752) 40628 POINT(943.949097 406.48996) 40629 POINT(347.021515 153.620178) 40630 POINT(857.264221 425.165741) 40631 POINT(738.302307 742.876038) 40632 POINT(117.172691 623.050781) 40633 POINT(848.29071 259.681427) 40634 POINT(127.782539 242.241089) 40635 POINT(449.240753 80.9901199) 40636 POINT(956.286682 884.730835) 40637 POINT(892.582275 934.219055) 40638 POINT(439.581451 888.927551) 40639 POINT(354.621735 19.4872437) 40640 POINT(255.11293 540.090881) 40641 POINT(968.266113 381.662994) 40642 POINT(213.991882 613.075745) 40643 POINT(19.1477451 217.316116) 40644 POINT(649.579712 530.829407) 40645 POINT(790.977417 9.25646877) 40646 POINT(969.805115 634.46698) 40647 POINT(471.634613 362.423431) 40648 POINT(541.617737 646.723145) 40649 POINT(423.916321 29.823143) 40650 POINT(359.544342 207.058044) 40651 POINT(806.648132 241.97084) 40652 POINT(898.724609 341.228882) 40653 POINT(54.7687416 229.482971) 40654 POINT(100.646515 268.881165) 40655 POINT(720.914368 913.306641) 40656 POINT(224.76062 58.4626884) 40657 POINT(103.961029 553.422974) 40658 POINT(912.057678 208.926544) 40659 POINT(478.064026 633.193176) 40660 POINT(41.4838333 312.30777) 40661 POINT(453.21994 116.93161) 40662 POINT(63.8170433 960.998718) 40663 POINT(487.654999 172.518692) 40664 POINT(420.527954 79.6947632) 40665 POINT(103.916389 484.256195) 40666 POINT(300.524567 846.452393) 40667 POINT(283.048706 894.696167) 40668 POINT(461.971436 422.634796) 40669 POINT(501.429382 574.445068) 40670 POINT(709.15625 330.877014) 40671 POINT(187.600296 508.18219) 40672 POINT(128.342087 637.37616) 40673 POINT(94.7750626 351.187073) 40674 POINT(567.513733 134.2146) 40675 POINT(369.754089 717.02179) 40676 POINT(511.846252 644.093628) 40677 POINT(440.002441 532.76355) 40678 POINT(331.663116 939.457275) 40679 POINT(305.019745 88.0537033) 40680 POINT(437.807404 776.809509) 40681 POINT(301.366333 918.577637) 40682 POINT(699.039062 281.987335) 40683 POINT(886.436096 329.387024) 40684 POINT(288.743774 610.783264) 40685 POINT(756.044922 570.3302) 40686 POINT(118.461205 69.7851868) 40687 POINT(555.013733 831.985901) 40688 POINT(71.2107544 973.396729) 40689 POINT(266.177795 8.76011086) 40690 POINT(209.128479 584.145081) 40691 POINT(857.779297 764.676331) 40692 POINT(41.4780121 824.600708) 40693 POINT(46.2581177 790.970154) 40694 POINT(297.729279 741.202576) 40695 POINT(783.427917 232.615067) 40696 POINT(656.307678 264.277283) 40697 POINT(824.419556 318.711365) 40698 POINT(686.124023 856.492126) 40699 POINT(74.2221527 10.2377272) 40700 POINT(221.544724 526.411926) 40701 POINT(272.917633 494.598816) 40702 POINT(321.628326 147.916336) 40703 POINT(467.659576 141.929489) 40704 POINT(373.925476 453.758362) 40705 POINT(966.112366 891.0849) 40706 POINT(257.743988 736.923096) 40707 POINT(482.563751 267.138062) 40708 POINT(450.457123 611.717529) 40709 POINT(713.516357 426.116882) 40710 POINT(665.256653 963.351318) 40711 POINT(931.635315 871.375916) 40712 POINT(874.914185 896.442627) 40713 POINT(510.981354 149.757217) 40714 POINT(181.9384 416.319214) 40715 POINT(816.133789 790.534302) 40716 POINT(922.445312 219.719162) 40717 POINT(154.85347 637.647095) 40718 POINT(73.6638412 201.692963) 40719 POINT(638.243164 203.159439) 40720 POINT(610.977356 611.960083) 40721 POINT(771.935303 660.044434) 40722 POINT(20.5694752 616.08905) 40723 POINT(452.806641 33.8164406) 40724 POINT(12.0507298 874.693298) 40725 POINT(132.350342 249.269974) 40726 POINT(338.955139 578.026184) 40727 POINT(172.499405 160.393951) 40728 POINT(973.913208 735.209961) 40729 POINT(632.91449 23.7458687) 40730 POINT(102.947792 878.757324) 40731 POINT(739.14093 69.1790848) 40732 POINT(106.14711 308.578217) 40733 POINT(265.374939 643.413879) 40734 POINT(939.517456 558.476746) 40735 POINT(778.731018 633.758362) 40736 POINT(887.797791 556.01947) 40737 POINT(716.887085 569.170044) 40738 POINT(236.255753 488.010101) 40739 POINT(268.925964 507.277008) 40740 POINT(929.918518 343.68042) 40741 POINT(989.355591 878.056458) 40742 POINT(123.398048 541.76123) 40743 POINT(565.056091 212.315979) 40744 POINT(748.641052 652.124878) 40745 POINT(569.775574 746.300354) 40746 POINT(869.889587 584.601379) 40747 POINT(854.415771 388.621857) 40748 POINT(886.326538 464.407562) 40749 POINT(235.465668 353.893372) 40750 POINT(267.867615 863.552185) 40751 POINT(738.442627 816.152344) 40752 POINT(856.047729 869.381958) 40753 POINT(36.0948486 387.255768) 40754 POINT(170.750854 294.527771) 40755 POINT(178.533157 769.375427) 40756 POINT(178.59726 956.932678) 40757 POINT(858.660217 20.6302223) 40758 POINT(597.198242 565.063904) 40759 POINT(483.627106 978.488281) 40760 POINT(731.413513 153.111588) 40761 POINT(252.082932 242.203537) 40762 POINT(716.519226 935.87793) 40763 POINT(366.323212 974.196716) 40764 POINT(735.259766 745.69751) 40765 POINT(864.845947 657.554626) 40766 POINT(590.688354 117.266479) 40767 POINT(349.174194 874.924622) 40768 POINT(967.188354 484.486572) 40769 POINT(932.10553 450.879395) 40770 POINT(763.937012 620.761902) 40771 POINT(963.939514 738.797729) 40772 POINT(207.266754 305.660126) 40773 POINT(737.965942 13.5442476) 40774 POINT(662.965332 542.132751) 40775 POINT(253.95903 447.473694) 40776 POINT(501.737518 425.866791) 40777 POINT(874.115784 859.872253) 40778 POINT(299.137787 818.727722) 40779 POINT(63.4425583 714.865723) 40780 POINT(556.729431 279.193207) 40781 POINT(417.779755 841.666809) 40782 POINT(948.597046 622.325745) 40783 POINT(477.352814 221.035675) 40784 POINT(464.332733 28.9877071) 40785 POINT(859.950562 345.829254) 40786 POINT(327.048981 698.070923) 40787 POINT(561.693176 60.0068245) 40788 POINT(6.79686308 676.540039) 40789 POINT(729.12085 113.529228) 40790 POINT(273.04422 140.73201) 40791 POINT(246.393478 659.974365) 40792 POINT(984.803162 109.909691) 40793 POINT(376.244354 554.737244) 40794 POINT(106.900978 311.443542) 40795 POINT(791.620605 85.3683701) 40796 POINT(372.212219 788.733459) 40797 POINT(313.412598 948.530884) 40798 POINT(641.983643 341.247406) 40799 POINT(783.222412 162.449463) 40800 POINT(612.379028 144.633423) 40801 POINT(831.742004 717.4375) 40802 POINT(290.873291 942.168335) 40803 POINT(14.1480131 183.595322) 40804 POINT(40.0759697 191.884277) 40805 POINT(363.222992 43.1783676) 40806 POINT(831.034973 52.221817) 40807 POINT(926.06842 40.1615257) 40808 POINT(238.25769 289.28833) 40809 POINT(196.791656 451.529449) 40810 POINT(172.908981 177.665176) 40811 POINT(509.055695 509.777649) 40812 POINT(120.348129 471.746277) 40813 POINT(710.641174 635.617493) 40814 POINT(907.921021 163.968597) 40815 POINT(687.06073 81.1657333) 40816 POINT(666.424683 278.799866) 40817 POINT(240.799438 709.819702) 40818 POINT(504.729126 526.395325) 40819 POINT(253.063431 138.044601) 40820 POINT(535.620544 547.462524) 40821 POINT(70.2553558 290.538452) 40822 POINT(769.093689 401.745239) 40823 POINT(360.151031 543.410706) 40824 POINT(227.260178 207.942139) 40825 POINT(793.426208 285.47287) 40826 POINT(586.077942 644.72998) 40827 POINT(423.413483 666.462158) 40828 POINT(69.6903534 723.400574) 40829 POINT(487.514038 39.6113281) 40830 POINT(22.856575 585.61145) 40831 POINT(42.4276886 676.658875) 40832 POINT(78.4620972 448.681915) 40833 POINT(705.308777 534.020386) 40834 POINT(586.230347 490.149689) 40835 POINT(215.235336 492.890015) 40836 POINT(644.466003 847.982178) 40837 POINT(293.252289 662.607117) 40838 POINT(801.014954 818.571106) 40839 POINT(682.101379 120.443901) 40840 POINT(87.8178864 207.720642) 40841 POINT(434.08609 222.383286) 40842 POINT(303.792603 967.180115) 40843 POINT(710.973328 234.454346) 40844 POINT(344.737061 208.413803) 40845 POINT(115.163185 144.361496) 40846 POINT(331.085297 294.4039) 40847 POINT(16.4448929 775.722778) 40848 POINT(442.355225 478.140106) 40849 POINT(431.511719 665.06543) 40850 POINT(821.828369 882.471252) 40851 POINT(790.15863 13.2924423) 40852 POINT(960.338928 40.22435) 40853 POINT(746.996887 592.736572) 40854 POINT(351.095032 666.593384) 40855 POINT(12.9676809 997.877319) 40856 POINT(378.403656 389.058655) 40857 POINT(757.434326 557.673462) 40858 POINT(765.339966 275.425812) 40859 POINT(317.806549 581.225525) 40860 POINT(65.243988 780.516235) 40861 POINT(926.267456 152.738129) 40862 POINT(699.003723 169.757278) 40863 POINT(677.106384 208.72229) 40864 POINT(677.0979 207.203766) 40865 POINT(596.426758 167.919754) 40866 POINT(118.137161 440.783112) 40867 POINT(99.7207718 506.016144) 40868 POINT(903.110229 443.83609) 40869 POINT(321.249725 701.943176) 40870 POINT(658.777161 934.986633) 40871 POINT(339.71283 275.176117) 40872 POINT(819.854553 494.307434) 40873 POINT(602.845398 794.264404) 40874 POINT(806.124512 209.564941) 40875 POINT(342.985443 891.866394) 40876 POINT(598.818481 749.571289) 40877 POINT(278.046753 362.395386) 40878 POINT(895.145569 190.499863) 40879 POINT(787.620728 252.250381) 40880 POINT(948.352905 174.23053) 40881 POINT(250.101303 652.352417) 40882 POINT(504.038391 304.789368) 40883 POINT(609.926575 356.812714) 40884 POINT(465.529999 879.778748) 40885 POINT(128.509094 114.123642) 40886 POINT(59.0770836 289.017883) 40887 POINT(850.571899 338.014618) 40888 POINT(23.5517807 513.722351) 40889 POINT(609.923218 599.403137) 40890 POINT(372.664581 838.358887) 40891 POINT(503.823883 239.674454) 40892 POINT(426.79483 996.352051) 40893 POINT(109.787857 45.4406471) 40894 POINT(395.998047 753.266785) 40895 POINT(307.784241 138.192062) 40896 POINT(828.272766 270.721954) 40897 POINT(237.39534 356.70697) 40898 POINT(683.568787 265.529175) 40899 POINT(574.654419 259.211395) 40900 POINT(823.243225 896.432983) 40901 POINT(196.301926 25.1773758) 40902 POINT(938.790649 781.014404) 40903 POINT(227.441208 588.043457) 40904 POINT(707.881958 514.106689) 40905 POINT(87.5498734 140.386566) 40906 POINT(538.369812 363.364594) 40907 POINT(183.149033 98.1473312) 40908 POINT(123.390541 434.974274) 40909 POINT(394.901154 832.009949) 40910 POINT(117.600121 901.046265) 40911 POINT(102.385696 129.194275) 40912 POINT(193.601242 868.79541) 40913 POINT(639.295898 860.578491) 40914 POINT(139.58812 49.5868759) 40915 POINT(311.443451 634.715576) 40916 POINT(308.087036 593.359375) 40917 POINT(304.006561 26.0349712) 40918 POINT(868.482117 721.488342) 40919 POINT(395.298309 989.0625) 40920 POINT(902.979553 190.111481) 40921 POINT(652.466309 299.191437) 40922 POINT(320.100006 108.222946) 40923 POINT(558.604309 794.382446) 40924 POINT(948.144287 322.985413) 40925 POINT(987.50885 97.7496643) 40926 POINT(572.921448 961.881775) 40927 POINT(356.641907 660.542175) 40928 POINT(362.056732 921.312378) 40929 POINT(233.763184 926.397095) 40930 POINT(288.228912 138.458496) 40931 POINT(809.312378 244.405609) 40932 POINT(244.668854 542.716003) 40933 POINT(464.206421 679.593079) 40934 POINT(410.254089 210.416794) 40935 POINT(228.653534 929.60022) 40936 POINT(643.750305 638.192078) 40937 POINT(137.383743 266.010895) 40938 POINT(795.505371 293.103241) 40939 POINT(313.983612 403.882843) 40940 POINT(551.634827 919.109924) 40941 POINT(363.56427 855.204407) 40942 POINT(955.022827 97.730957) 40943 POINT(198.664871 48.4415474) 40944 POINT(966.996338 534.662659) 40945 POINT(476.107574 969.917175) 40946 POINT(184.126831 623.074402) 40947 POINT(168.609238 491.947906) 40948 POINT(150.226257 308.331787) 40949 POINT(548.574951 851.555359) 40950 POINT(101.298492 828.679077) 40951 POINT(715.032654 901.899475) 40952 POINT(651.176514 853.220642) 40953 POINT(268.626434 11.6970177) 40954 POINT(21.1477795 94.3041687) 40955 POINT(432.596771 586.769531) 40956 POINT(294.481201 988.651123) 40957 POINT(756.502625 649.111389) 40958 POINT(645.997803 263.480316) 40959 POINT(28.960083 264.70755) 40960 POINT(70.361557 514.205383) 40961 POINT(498.898193 659.61322) 40962 POINT(276.432922 593.478271) 40963 POINT(372.892395 918.010071) 40964 POINT(797.767761 62.4361496) 40965 POINT(558.291992 295.179962) 40966 POINT(113.228821 989.649231) 40967 POINT(75.4907455 497.30896) 40968 POINT(501.903107 447.754791) 40969 POINT(613.305847 139.109772) 40970 POINT(251.403183 489.010742) 40971 POINT(572.666382 865.399719) 40972 POINT(679.624329 656.548584) 40973 POINT(187.422775 955.600525) 40974 POINT(651.695679 76.1164551) 40975 POINT(56.9560204 277.85965) 40976 POINT(13.9049301 382.365509) 40977 POINT(631.40271 144.981812) 40978 POINT(715.606689 563.662354) 40979 POINT(892.843018 386.082581) 40980 POINT(642.494812 800.045166) 40981 POINT(38.9912796 989.932983) 40982 POINT(87.1936798 450.94574) 40983 POINT(342.15741 218.081726) 40984 POINT(786.104858 93.9627762) 40985 POINT(296.025879 613.372009) 40986 POINT(958.145691 385.207764) 40987 POINT(524.755676 843.391479) 40988 POINT(397.889709 108.092827) 40989 POINT(889.800415 585.301453) 40990 POINT(462.225647 94.0534592) 40991 POINT(544.564941 460.622955) 40992 POINT(508.698273 369.387329) 40993 POINT(938.558044 413.750031) 40994 POINT(710.990601 431.558807) 40995 POINT(622.20874 459.706451) 40996 POINT(111.505371 651.003601) 40997 POINT(140.239105 734.048401) 40998 POINT(644.771545 486.336731) 40999 POINT(892.81311 605.579224) 41000 POINT(753.635315 188.204742) 41001 POINT(985.119629 871.031006) 41002 POINT(151.212601 536.749268) 41003 POINT(251.227692 866.05481) 41004 POINT(486.83139 637.295227) 41005 POINT(628.732483 590.356445) 41006 POINT(838.242004 6.61651087) 41007 POINT(256.775024 563.83551) 41008 POINT(462.921906 876.743835) 41009 POINT(279.472687 277.989716) 41010 POINT(439.165802 474.187592) 41011 POINT(645.778259 471.107391) 41012 POINT(256.778412 789.683716) 41013 POINT(819.544434 490.993805) 41014 POINT(74.6468582 217.801895) 41015 POINT(442.496948 184.882126) 41016 POINT(948.456726 238.270325) 41017 POINT(648.416992 808.125977) 41018 POINT(499.650604 743.584412) 41019 POINT(7.73598289 622.228638) 41020 POINT(102.85714 542.914856) 41021 POINT(414.71283 175.339233) 41022 POINT(23.0109787 233.681793) 41023 POINT(619.273499 756.762207) 41024 POINT(47.9351578 913.202209) 41025 POINT(385.460266 489.138367) 41026 POINT(3.08899832 877.960205) 41027 POINT(339.387756 781.235901) 41028 POINT(271.439758 442.33963) 41029 POINT(690.900085 989.84314) 41030 POINT(695.0672 607.750427) 41031 POINT(992.145447 725.806946) 41032 POINT(331.351074 473.272369) 41033 POINT(578.543762 147.161926) 41034 POINT(753.74353 837.139709) 41035 POINT(46.7461433 187.524368) 41036 POINT(406.635162 372.141205) 41037 POINT(111.93885 112.080971) 41038 POINT(880.258728 435.472656) 41039 POINT(83.1012192 233.814529) 41040 POINT(502.628326 3.54593182) 41041 POINT(457.603973 481.926147) 41042 POINT(942.010803 304.139984) 41043 POINT(301.958038 731.214111) 41044 POINT(369.309296 492.118469) 41045 POINT(17.8552494 79.5550842) 41046 POINT(392.081848 611.395447) 41047 POINT(234.262878 320.329285) 41048 POINT(390.912598 176.197083) 41049 POINT(187.752167 682.989868) 41050 POINT(967.821106 950.857056) 41051 POINT(403.088867 8.9753294) 41052 POINT(61.7816277 11.9334249) 41053 POINT(441.149994 158.401535) 41054 POINT(457.800171 432.511963) 41055 POINT(196.338623 887.677063) 41056 POINT(176.055527 69.95298) 41057 POINT(783.852783 247.209015) 41058 POINT(792.17511 989.458679) 41059 POINT(619.563232 785.188171) 41060 POINT(527.729248 181.727737) 41061 POINT(351.119385 337.157776) 41062 POINT(833.561646 989.284241) 41063 POINT(915.622498 776.413208) 41064 POINT(742.821472 239.110184) 41065 POINT(72.282196 907.593262) 41066 POINT(23.8490791 575.88855) 41067 POINT(261.544098 331.092896) 41068 POINT(846.829773 128.01564) 41069 POINT(876.996948 980.74762) 41070 POINT(476.949707 35.7307892) 41071 POINT(882.822571 548.839661) 41072 POINT(308.349182 786.03009) 41073 POINT(875.648499 833.708374) 41074 POINT(198.29982 881.888916) 41075 POINT(961.530579 364.587585) 41076 POINT(593.67395 413.758575) 41077 POINT(310.697021 429.839966) 41078 POINT(858.999878 279.985352) 41079 POINT(656.999329 828.246704) 41080 POINT(717.398743 441.019592) 41081 POINT(846.254517 513.780334) 41082 POINT(955.800537 901.947205) 41083 POINT(406.456696 563.328552) 41084 POINT(880.480103 451.528503) 41085 POINT(939.942139 80.7369385) 41086 POINT(247.712662 286.733246) 41087 POINT(427.894775 291.536407) 41088 POINT(49.9154968 903.503479) 41089 POINT(624.084229 978.656799) 41090 POINT(75.8388443 311.573395) 41091 POINT(8.57158947 873.790405) 41092 POINT(253.140503 148.665634) 41093 POINT(12.5541735 730.948425) 41094 POINT(545.094666 432.931305) 41095 POINT(729.934143 662.883606) 41096 POINT(435.442383 948.394226) 41097 POINT(245.094604 277.783386) 41098 POINT(574.808472 943.314087) 41099 POINT(253.382919 88.9422302) 41100 POINT(960.131897 413.337158) 41101 POINT(382.691986 225.608582) 41102 POINT(509.758301 608.217712) 41103 POINT(671.181213 306.090485) 41104 POINT(218.91124 51.5659409) 41105 POINT(975.593994 367.349915) 41106 POINT(324.025238 696.909912) 41107 POINT(712.944336 417.194824) 41108 POINT(363.821014 400.403015) 41109 POINT(639.815735 689.891235) 41110 POINT(447.112396 601.418091) 41111 POINT(290.528381 263.291687) 41112 POINT(872.345032 538.338867) 41113 POINT(998.487915 820.76355) 41114 POINT(895.099609 950.001709) 41115 POINT(962.768555 15.2771893) 41116 POINT(513.696045 625.995178) 41117 POINT(771.159668 882.579773) 41118 POINT(699.173889 364.554108) 41119 POINT(906.402954 837.665344) 41120 POINT(297.001862 508.879761) 41121 POINT(627.17395 21.6047249) 41122 POINT(589.695801 785.792908) 41123 POINT(890.647156 707.696777) 41124 POINT(151.056 329.716522) 41125 POINT(658.494324 455.948029) 41126 POINT(516.032654 595.760559) 41127 POINT(570.270813 67.8070297) 41128 POINT(410.492279 44.4256744) 41129 POINT(972.866699 749.222351) 41130 POINT(860.709656 604.073303) 41131 POINT(135.658218 365.440674) 41132 POINT(664.688782 713.365234) 41133 POINT(959.959717 157.108795) 41134 POINT(141.000183 332.51767) 41135 POINT(988.218445 691.422302) 41136 POINT(163.400757 448.236298) 41137 POINT(241.134247 317.124207) 41138 POINT(581.896545 932.011108) 41139 POINT(645.643433 666.574036) 41140 POINT(767.068909 935.092102) 41141 POINT(177.750275 255.985565) 41142 POINT(191.473969 496.604309) 41143 POINT(523.895142 445.994568) 41144 POINT(379.942963 525.181702) 41145 POINT(83.4274368 674.319336) 41146 POINT(872.979431 501.11911) 41147 POINT(591.435547 211.391235) 41148 POINT(910.607178 987.895386) 41149 POINT(962.433533 735.064148) 41150 POINT(667.547974 582.178772) 41151 POINT(146.096329 804.084167) 41152 POINT(67.1898499 153.871628) 41153 POINT(679.38269 129.767944) 41154 POINT(437.269958 906.801636) 41155 POINT(126.117668 214.776779) 41156 POINT(713.482117 841.360779) 41157 POINT(954.682922 26.0804214) 41158 POINT(170.401428 928.393433) 41159 POINT(434.26886 490.914948) 41160 POINT(87.3900528 655.232544) 41161 POINT(475.680389 610.095886) 41162 POINT(618.832458 416.888092) 41163 POINT(727.595276 248.432037) 41164 POINT(914.585693 475.552063) 41165 POINT(715.206482 328.800079) 41166 POINT(162.496185 267.949036) 41167 POINT(5.22038746 381.905151) 41168 POINT(337.921387 711.438477) 41169 POINT(757.239441 610.729126) 41170 POINT(636.223022 745.559937) 41171 POINT(112.762917 755.623718) 41172 POINT(627.113953 685.959167) 41173 POINT(543.652954 797.047363) 41174 POINT(351.61496 492.995239) 41175 POINT(974.313354 627.797668) 41176 POINT(833.40332 839.102478) 41177 POINT(476.529572 250.605316) 41178 POINT(699.834045 859.076477) 41179 POINT(961.545959 311.110596) 41180 POINT(910.333618 788.409241) 41181 POINT(237.275696 127.138123) 41182 POINT(530.770691 829.783813) 41183 POINT(314.425171 105.047348) 41184 POINT(334.500977 670.634338) 41185 POINT(16.7827435 90.6178741) 41186 POINT(969.876709 129.706573) 41187 POINT(939.099365 848.905029) 41188 POINT(929.056946 602.847412) 41189 POINT(90.1364441 333.874237) 41190 POINT(456.019165 863.480286) 41191 POINT(225.955612 539.120361) 41192 POINT(417.952789 547.670959) 41193 POINT(814.884399 625.949463) 41194 POINT(562.031128 404.272156) 41195 POINT(754.444275 330.524658) 41196 POINT(220.354294 344.893738) 41197 POINT(683.629761 749.255188) 41198 POINT(594.205139 104.540718) 41199 POINT(881.163086 898.362915) 41200 POINT(132.351959 180.486008) 41201 POINT(19.7264423 612.450684) 41202 POINT(57.7967262 803.709595) 41203 POINT(243.824127 576.391541) 41204 POINT(837.037781 304.08197) 41205 POINT(269.109619 529.063049) 41206 POINT(822.674377 38.0594711) 41207 POINT(156.110519 906.094421) 41208 POINT(634.213928 377.284729) 41209 POINT(611.802612 637.220947) 41210 POINT(226.573563 320.055695) 41211 POINT(717.060669 233.034302) 41212 POINT(387.445282 437.686829) 41213 POINT(793.399231 202.47757) 41214 POINT(412.982117 847.494629) 41215 POINT(213.502563 768.582886) 41216 POINT(448.86084 97.2901077) 41217 POINT(659.828186 593.546265) 41218 POINT(916.505493 527.263794) 41219 POINT(55.1924362 98.749794) 41220 POINT(241.0578 259.045837) 41221 POINT(867.965271 49.8771133) 41222 POINT(880.629028 254.176926) 41223 POINT(49.6950035 466.556854) 41224 POINT(250.653671 331.527008) 41225 POINT(640.164307 970.352417) 41226 POINT(321.117035 972.257324) 41227 POINT(297.67572 280.380463) 41228 POINT(419.479889 649.282104) 41229 POINT(232.538391 343.981689) 41230 POINT(532.856567 164.008774) 41231 POINT(369.157806 207.912231) 41232 POINT(307.104279 565.210144) 41233 POINT(994.829224 116.327408) 41234 POINT(78.7752075 62.6257019) 41235 POINT(707.429932 903.863708) 41236 POINT(942.315491 471.33429) 41237 POINT(513.960144 739.494934) 41238 POINT(796.532837 62.7593193) 41239 POINT(399.673157 889.268372) 41240 POINT(981.397766 825.642395) 41241 POINT(353.877075 888.87146) 41242 POINT(912.006653 517.370239) 41243 POINT(552.008484 351.209534) 41244 POINT(647.46991 115.199669) 41245 POINT(331.038666 346.400452) 41246 POINT(658.159546 351.362122) 41247 POINT(511.549438 664.031006) 41248 POINT(937.856934 569.529602) 41249 POINT(97.9253311 348.029297) 41250 POINT(763.702576 697.105042) 41251 POINT(89.1763382 246.562363) 41252 POINT(755.409424 353.297211) 41253 POINT(46.1937904 272.069672) 41254 POINT(798.032043 62.6213379) 41255 POINT(754.132629 964.617676) 41256 POINT(944.8797 913.618164) 41257 POINT(186.612869 405.562012) 41258 POINT(637.242004 380.120239) 41259 POINT(495.175568 664.00415) 41260 POINT(696.909546 134.856293) 41261 POINT(714.672791 667.336426) 41262 POINT(250.58374 650.733032) 41263 POINT(672.896545 576.501831) 41264 POINT(419.880951 962.561462) 41265 POINT(428.769043 589.314087) 41266 POINT(597.564331 800.712708) 41267 POINT(723.960205 279.753906) 41268 POINT(973.823364 198.237564) 41269 POINT(32.118557 561.695435) 41270 POINT(672.945129 795.027466) 41271 POINT(20.3923473 611.732239) 41272 POINT(110.77034 237.921768) 41273 POINT(620.075684 333.032074) 41274 POINT(640.223572 16.1915588) 41275 POINT(535.681458 441.420654) 41276 POINT(72.4008713 630.092285) 41277 POINT(331.270538 22.7807789) 41278 POINT(553.750244 409.339172) 41279 POINT(224.339981 479.583588) 41280 POINT(558.49646 462.213654) 41281 POINT(224.002991 451.791473) 41282 POINT(385.454163 918.964233) 41283 POINT(182.705032 376.965973) 41284 POINT(698.691589 750.266113) 41285 POINT(928.580811 425.279602) 41286 POINT(944.220154 298.410126) 41287 POINT(726.141296 201.994888) 41288 POINT(235.189453 201.894791) 41289 POINT(521.800537 713.187439) 41290 POINT(804.280457 460.108917) 41291 POINT(491.440674 16.0321178) 41292 POINT(855.559937 951.354065) 41293 POINT(371.525513 864.439087) 41294 POINT(543.556213 152.733582) 41295 POINT(553.097046 671.451416) 41296 POINT(502.433228 123.211281) 41297 POINT(407.324768 664.445984) 41298 POINT(433.70108 900.840515) 41299 POINT(328.266785 146.29216) 41300 POINT(530.846558 371.812408) 41301 POINT(387.393524 999.321167) 41302 POINT(220.673218 823.243652) 41303 POINT(737.608826 698.967102) 41304 POINT(784.197815 864.802795) 41305 POINT(252.484024 125.611977) 41306 POINT(787.979004 158.275803) 41307 POINT(687.8302 877.478333) 41308 POINT(16.2049713 531.533691) 41309 POINT(584.333374 860.962646) 41310 POINT(304.304291 67.2572098) 41311 POINT(446.647003 949.822937) 41312 POINT(598.96405 780.974609) 41313 POINT(519.082764 8.96991634) 41314 POINT(923.068787 561.903992) 41315 POINT(892.002319 635.744873) 41316 POINT(126.146828 308.792053) 41317 POINT(205.43988 410.595795) 41318 POINT(223.508499 207.075073) 41319 POINT(934.765991 114.718239) 41320 POINT(345.571136 59.5418739) 41321 POINT(42.8456154 374.853912) 41322 POINT(361.21283 587.169189) 41323 POINT(637.774109 161.02153) 41324 POINT(836.824951 887.463684) 41325 POINT(486.661255 883.08667) 41326 POINT(330.612793 392.6474) 41327 POINT(683.948364 913.990662) 41328 POINT(987.318787 968.153503) 41329 POINT(165.40329 884.003052) 41330 POINT(832.73645 382.571259) 41331 POINT(882.369324 230.014206) 41332 POINT(114.087044 553.430115) 41333 POINT(419.308533 200.746765) 41334 POINT(988.618958 409.710846) 41335 POINT(343.55838 782.561279) 41336 POINT(28.8548031 233.000854) 41337 POINT(140.020706 56.6184387) 41338 POINT(542.074585 156.690277) 41339 POINT(803.858948 77.5085983) 41340 POINT(950.3302 469.069153) 41341 POINT(967.948242 992.674377) 41342 POINT(255.107468 224.802872) 41343 POINT(333.687103 333.260895) 41344 POINT(430.379883 803.818115) 41345 POINT(486.849304 998.278259) 41346 POINT(915.060486 741.542297) 41347 POINT(325.557251 738.633423) 41348 POINT(879.688477 804.741028) 41349 POINT(44.4595604 4.78228331) 41350 POINT(744.668823 708.559814) 41351 POINT(225.169678 946.194397) 41352 POINT(353.700165 509.080444) 41353 POINT(223.484543 502.866699) 41354 POINT(34.5079575 898.671509) 41355 POINT(942.480408 784.739502) 41356 POINT(491.083679 856.175293) 41357 POINT(789.037354 935.667419) 41358 POINT(501.894348 228.704834) 41359 POINT(259.556152 81.7984619) 41360 POINT(884.659424 355.305908) 41361 POINT(146.609772 692.673645) 41362 POINT(221.118057 184.385513) 41363 POINT(838.150024 175.550369) 41364 POINT(708.671448 26.6644135) 41365 POINT(958.922241 983.479126) 41366 POINT(966.95697 54.1323509) 41367 POINT(622.3172 165.249481) 41368 POINT(126.481979 474.368042) 41369 POINT(590.50769 605.820801) 41370 POINT(466.742035 440.540039) 41371 POINT(530.021362 200.241837) 41372 POINT(859.213684 802.971558) 41373 POINT(475.638855 638.942505) 41374 POINT(365.813904 761.494385) 41375 POINT(332.566162 139.878098) 41376 POINT(308.557068 972.724609) 41377 POINT(338.220825 391.170746) 41378 POINT(677.031311 227.279129) 41379 POINT(531.819214 730.105225) 41380 POINT(795.908386 103.857292) 41381 POINT(431.523743 509.692383) 41382 POINT(107.061867 85.6961975) 41383 POINT(862.578125 37.2460175) 41384 POINT(805.197021 186.469162) 41385 POINT(611.142334 20.8752747) 41386 POINT(930.506104 764.137207) 41387 POINT(771.060974 255.45195) 41388 POINT(598.208069 630.132324) 41389 POINT(106.324211 211.074646) 41390 POINT(17.4765415 905.706238) 41391 POINT(850.387756 161.541855) 41392 POINT(208.899231 96.1118088) 41393 POINT(312.817902 680.718994) 41394 POINT(211.073257 195.909088) 41395 POINT(750.049377 429.414673) 41396 POINT(617.158691 95.1427383) 41397 POINT(794.648987 608.571472) 41398 POINT(498.267426 307.087921) 41399 POINT(518.747131 735.951965) 41400 POINT(852.644104 904.994934) 41401 POINT(952.740479 248.414627) 41402 POINT(321.025909 249.694443) 41403 POINT(688.615417 91.3019104) 41404 POINT(885.789307 464.593079) 41405 POINT(495.052124 947.00592) 41406 POINT(934.079041 912.658386) 41407 POINT(663.724548 108.662827) 41408 POINT(425.759827 35.2506676) 41409 POINT(925.919189 520.006409) 41410 POINT(931.554504 599.522827) 41411 POINT(136.89357 992.162048) 41412 POINT(164.084549 584.614502) 41413 POINT(761.531982 651.682678) 41414 POINT(936.770386 922.681091) 41415 POINT(326.225494 866.150635) 41416 POINT(577.885193 45.2059402) 41417 POINT(74.0027847 94.5372849) 41418 POINT(977.801636 504.965302) 41419 POINT(796.409302 695.212952) 41420 POINT(138.070969 826.983521) 41421 POINT(268.22525 836.621277) 41422 POINT(256.002747 555.998474) 41423 POINT(509.717804 451.415131) 41424 POINT(655.561951 222.141693) 41425 POINT(703.740295 77.1368332) 41426 POINT(855.491699 540.139526) 41427 POINT(537.761292 373.793884) 41428 POINT(542.547974 630.398071) 41429 POINT(888.078613 805.037476) 41430 POINT(438.668793 833.510559) 41431 POINT(557.44104 134.813492) 41432 POINT(965.987732 854.312195) 41433 POINT(488.558807 10.6856833) 41434 POINT(126.166245 479.513763) 41435 POINT(853.178894 479.495209) 41436 POINT(226.995621 66.7166672) 41437 POINT(336.278351 77.2298813) 41438 POINT(569.192383 895.406128) 41439 POINT(52.3823166 435.150177) 41440 POINT(212.461014 436.130981) 41441 POINT(929.040344 696.212952) 41442 POINT(688.056824 656.916687) 41443 POINT(232.236618 503.122864) 41444 POINT(434.18927 811.067688) 41445 POINT(679.219849 731.027344) 41446 POINT(672.731812 293.552826) 41447 POINT(353.299622 338.67984) 41448 POINT(996.048706 310.429474) 41449 POINT(298.078827 812.182678) 41450 POINT(619.625977 364.158905) 41451 POINT(199.006226 301.153534) 41452 POINT(811.053711 144.734085) 41453 POINT(259.797607 89.9534149) 41454 POINT(613.316772 950.451599) 41455 POINT(130.073334 913.678955) 41456 POINT(528.009033 501.694641) 41457 POINT(246.498856 492.825836) 41458 POINT(152.808167 105.672646) 41459 POINT(998.928406 710.33667) 41460 POINT(921.28656 869.720276) 41461 POINT(839.797302 44.2649956) 41462 POINT(568.950806 726.162964) 41463 POINT(511.667938 168.242279) 41464 POINT(947.499146 744.191895) 41465 POINT(494.916473 275.674072) 41466 POINT(482.981506 775.575684) 41467 POINT(173.684647 423.099731) 41468 POINT(279.283752 263.907654) 41469 POINT(10.1714201 540.02002) 41470 POINT(415.710266 784.610474) 41471 POINT(709.984863 248.961029) 41472 POINT(889.100159 958.879517) 41473 POINT(287.624542 78.450882) 41474 POINT(372.701904 73.5656967) 41475 POINT(512.351135 346.413208) 41476 POINT(174.896713 455.70462) 41477 POINT(169.979126 21.3316822) 41478 POINT(602.871338 200.667618) 41479 POINT(232.887283 328.138458) 41480 POINT(194.690399 683.020752) 41481 POINT(534.282898 115.477646) 41482 POINT(756.230469 726.05188) 41483 POINT(117.115463 916.770874) 41484 POINT(808.554016 847.097351) 41485 POINT(624.772156 860.964783) 41486 POINT(351.095734 499.43515) 41487 POINT(49.6791992 777.19928) 41488 POINT(914.19751 206.400055) 41489 POINT(815.194885 913.749512) 41490 POINT(801.88562 328.929169) 41491 POINT(571.837463 93.942421) 41492 POINT(506.277466 464.007843) 41493 POINT(605.207642 64.4305954) 41494 POINT(255.707077 69.1141968) 41495 POINT(322.318726 473.94931) 41496 POINT(989.761841 418.049408) 41497 POINT(675.951965 838.838196) 41498 POINT(139.251373 878.401794) 41499 POINT(451.735962 6.15407848) 41500 POINT(34.1250229 362.865356) 41501 POINT(256.669342 782.736511) 41502 POINT(627.088684 638.882019) 41503 POINT(565.647827 341.341248) 41504 POINT(267.841217 617.391418) 41505 POINT(887.226868 790.777649) 41506 POINT(208.272598 306.262939) 41507 POINT(662.481689 469.353821) 41508 POINT(281.590759 472.297333) 41509 POINT(900.678223 418.946808) 41510 POINT(150.234329 263.176422) 41511 POINT(349.919525 465.40332) 41512 POINT(733.789185 793.704773) 41513 POINT(595.497009 980.088928) 41514 POINT(937.268799 586.035461) 41515 POINT(346.978699 853.217285) 41516 POINT(833.493835 498.846436) 41517 POINT(118.874046 363.710571) 41518 POINT(695.482788 503.795105) 41519 POINT(908.90332 389.986572) 41520 POINT(113.437668 127.819023) 41521 POINT(540.479553 944.10022) 41522 POINT(206.897675 226.381195) 41523 POINT(348.114655 16.5506611) 41524 POINT(199.88739 775.619385) 41525 POINT(460.348999 644.913269) 41526 POINT(362.46814 751.216125) 41527 POINT(266.850952 435.987213) 41528 POINT(236.214783 719.944641) 41529 POINT(765.058594 213.719009) 41530 POINT(807.099548 218.184509) 41531 POINT(465.761841 284.746613) 41532 POINT(723.518921 182.774551) 41533 POINT(823.114441 26.6081085) 41534 POINT(89.3162918 876.546021) 41535 POINT(747.602783 142.700653) 41536 POINT(804.3302 797.544189) 41537 POINT(493.487213 290.811676) 41538 POINT(844.054077 751.716248) 41539 POINT(996.309814 691.950073) 41540 POINT(434.372864 518.753845) 41541 POINT(810.482422 342.38324) 41542 POINT(409.119537 655.501221) 41543 POINT(979.117004 178.962646) 41544 POINT(462.55838 907.151794) 41545 POINT(103.643517 846.347595) 41546 POINT(804.180359 270.284515) 41547 POINT(293.011017 960.589478) 41548 POINT(370.827118 951.16571) 41549 POINT(613.142822 98.3215332) 41550 POINT(185.720093 655.830078) 41551 POINT(756.702148 321.734741) 41552 POINT(313.150879 844.046082) 41553 POINT(369.124207 299.463318) 41554 POINT(732.211731 676.778809) 41555 POINT(335.420715 940.92981) 41556 POINT(136.954544 426.225159) 41557 POINT(217.717667 630.708679) 41558 POINT(410.834076 529.580078) 41559 POINT(378.234589 349.789429) 41560 POINT(270.409912 323.683777) 41561 POINT(396.955109 187.603821) 41562 POINT(230.376602 759.513062) 41563 POINT(546.21228 483.304443) 41564 POINT(715.500854 165.657104) 41565 POINT(992.573608 353.646149) 41566 POINT(394.546875 901.618652) 41567 POINT(314.642181 950.152039) 41568 POINT(899.453369 648.799683) 41569 POINT(936.700867 987.896301) 41570 POINT(235.716553 153.774582) 41571 POINT(343.649414 965.680847) 41572 POINT(806.069885 629.969543) 41573 POINT(951.674316 881.72522) 41574 POINT(931.211609 295.811829) 41575 POINT(328.93515 984.954834) 41576 POINT(633.703064 876.079346) 41577 POINT(986.754944 299.913269) 41578 POINT(782.572571 405.484497) 41579 POINT(167.996231 949.217224) 41580 POINT(208.047653 577.002441) 41581 POINT(247.252899 62.918148) 41582 POINT(272.781433 790.268066) 41583 POINT(407.065582 716.360291) 41584 POINT(515.627441 236.310608) 41585 POINT(873.590698 549.981201) 41586 POINT(207.271454 953.376709) 41587 POINT(970.146484 684.466431) 41588 POINT(17.7963581 94.6586304) 41589 POINT(692.087402 206.843109) 41590 POINT(991.607361 343.053375) 41591 POINT(113.897072 837.209229) 41592 POINT(855.270081 811.920898) 41593 POINT(229.755539 627.190552) 41594 POINT(502.042694 96.1006088) 41595 POINT(400.753632 440.882538) 41596 POINT(659.649963 736.723511) 41597 POINT(362.158813 43.558712) 41598 POINT(64.7324219 979.783997) 41599 POINT(237.565033 405.050385) 41600 POINT(451.094574 725.805359) 41601 POINT(546.388733 111.263931) 41602 POINT(775.198059 260.654877) 41603 POINT(188.14209 882.287476) 41604 POINT(20.2419071 140.678955) 41605 POINT(580.473877 198.044632) 41606 POINT(761.71405 284.502258) 41607 POINT(835.509766 27.207737) 41608 POINT(267.678192 345.353363) 41609 POINT(226.044556 2.43822908) 41610 POINT(24.6040974 138.557785) 41611 POINT(443.282043 960.95282) 41612 POINT(205.696869 756.418213) 41613 POINT(832.83374 215.524551) 41614 POINT(168.005173 885.243042) 41615 POINT(45.4628639 894.541382) 41616 POINT(714.784485 255.578522) 41617 POINT(311.601532 113.517433) 41618 POINT(681.479919 506.160583) 41619 POINT(880.108215 52.9540977) 41620 POINT(691.217407 564.768127) 41621 POINT(416.329712 422.787598) 41622 POINT(425.92572 875.695923) 41623 POINT(274.668732 511.558655) 41624 POINT(922.346802 5.25928974) 41625 POINT(317.039948 534.251831) 41626 POINT(631.550537 795.510376) 41627 POINT(189.463898 307.452759) 41628 POINT(882.596863 914.724487) 41629 POINT(871.347168 160.664551) 41630 POINT(25.2558918 364.369995) 41631 POINT(630.621887 220.531738) 41632 POINT(655.893494 879.99585) 41633 POINT(835.867676 828.200195) 41634 POINT(670.58728 732.168457) 41635 POINT(54.9523735 432.563202) 41636 POINT(359.18988 858.307068) 41637 POINT(497.85907 172.81517) 41638 POINT(725.482117 592.667358) 41639 POINT(706.602051 867.277527) 41640 POINT(766.946411 206.090027) 41641 POINT(852.976685 872.231323) 41642 POINT(601.36731 606.390259) 41643 POINT(548.975586 390.460083) 41644 POINT(317.871643 611.940674) 41645 POINT(506.790253 185.982697) 41646 POINT(941.727051 313.271393) 41647 POINT(85.2873917 206.25679) 41648 POINT(322.923615 939.153748) 41649 POINT(935.710388 498.820618) 41650 POINT(429.082275 994.073914) 41651 POINT(897.242554 724.382751) 41652 POINT(987.517151 23.2683182) 41653 POINT(607.234009 966.871948) 41654 POINT(676.394958 370.256653) 41655 POINT(173.728027 892.647888) 41656 POINT(811.078186 541.353333) 41657 POINT(729.9245 351.298737) 41658 POINT(362.227966 993.882568) 41659 POINT(850.028076 490.192902) 41660 POINT(33.5315819 172.302383) 41661 POINT(80.3014145 390.807281) 41662 POINT(328.563934 672.325562) 41663 POINT(232.960403 159.052444) 41664 POINT(61.0032005 401.194824) 41665 POINT(436.82074 612.207825) 41666 POINT(576.006409 296.947418) 41667 POINT(148.463135 15.1418371) 41668 POINT(221.963638 485.821045) 41669 POINT(640.385925 307.326324) 41670 POINT(963.155334 0.579332829) 41671 POINT(715.544128 524.488037) 41672 POINT(780.235596 299.757233) 41673 POINT(196.336929 514.922058) 41674 POINT(945.271423 655.557861) 41675 POINT(824.138489 956.503113) 41676 POINT(862.732056 993.914978) 41677 POINT(634.623108 237.866348) 41678 POINT(871.912842 342.228607) 41679 POINT(274.302277 133.325134) 41680 POINT(847.48877 677.279907) 41681 POINT(552.872375 798.68866) 41682 POINT(204.048447 567.244385) 41683 POINT(320.302338 382.727448) 41684 POINT(801.497681 607.591797) 41685 POINT(381.328003 190.698914) 41686 POINT(508.221802 691.650269) 41687 POINT(55.5469894 571.824036) 41688 POINT(758.046448 704.009888) 41689 POINT(429.131775 517.2453) 41690 POINT(238.661072 240.660599) 41691 POINT(672.93335 849.775818) 41692 POINT(979.711365 546.343018) 41693 POINT(698.190186 128.269379) 41694 POINT(127.799835 510.196899) 41695 POINT(140.070496 259.928101) 41696 POINT(865.848022 409.216125) 41697 POINT(283.867554 861.170898) 41698 POINT(471.493988 159.671616) 41699 POINT(239.97081 695.287048) 41700 POINT(832.36969 294.581818) 41701 POINT(921.008972 872.097473) 41702 POINT(717.290588 286.16449) 41703 POINT(245.184143 765.969421) 41704 POINT(316.796936 372.276093) 41705 POINT(379.302551 904.124878) 41706 POINT(542.424927 812.053345) 41707 POINT(716.982422 23.2356606) 41708 POINT(43.0093956 715.855408) 41709 POINT(963.749023 480.395203) 41710 POINT(42.7914391 886.325684) 41711 POINT(51.0856361 641.943787) 41712 POINT(817.824097 729.741577) 41713 POINT(334.014191 433.132751) 41714 POINT(744.956116 399.210358) 41715 POINT(427.551544 101.737648) 41716 POINT(425.471771 203.740585) 41717 POINT(220.69809 383.558044) 41718 POINT(900.346436 640.433716) 41719 POINT(764.836365 627.010315) 41720 POINT(636.236206 502.289734) 41721 POINT(387.061279 273.072327) 41722 POINT(924.076782 593.317932) 41723 POINT(126.664604 146.658493) 41724 POINT(951.968323 998.327026) 41725 POINT(361.508301 812.686279) 41726 POINT(900.436157 350.104004) 41727 POINT(785.229736 316.87262) 41728 POINT(473.881348 495.465668) 41729 POINT(49.1345444 765.518677) 41730 POINT(792.887512 658.294861) 41731 POINT(805.380798 713.681274) 41732 POINT(196.978851 47.1955109) 41733 POINT(319.901489 306.292023) 41734 POINT(368.494904 663.479553) 41735 POINT(581.831848 646.697571) 41736 POINT(110.662743 278.12262) 41737 POINT(66.5127029 312.102966) 41738 POINT(875.018799 501.012482) 41739 POINT(235.06427 171.490158) 41740 POINT(716.513672 39.7967911) 41741 POINT(26.8209362 330.348938) 41742 POINT(193.487442 507.085846) 41743 POINT(151.4758 785.227966) 41744 POINT(961.931824 992.466309) 41745 POINT(873.604675 142.541412) 41746 POINT(529.873474 469.147736) 41747 POINT(239.460724 978.726196) 41748 POINT(132.270462 494.137878) 41749 POINT(688.809631 296.839966) 41750 POINT(706.575806 516.282654) 41751 POINT(665.491089 287.744965) 41752 POINT(944.291809 999.609436) 41753 POINT(959.859497 717.491333) 41754 POINT(767.725647 962.084595) 41755 POINT(932.899536 737.370972) 41756 POINT(940.217468 24.6814804) 41757 POINT(662.397095 515.960327) 41758 POINT(921.907776 655.717468) 41759 POINT(170.948608 605.537354) 41760 POINT(294.343536 614.542847) 41761 POINT(826.825439 426.389984) 41762 POINT(811.706543 171.271545) 41763 POINT(412.90271 245.214951) 41764 POINT(313.134308 170.365143) 41765 POINT(225.27594 867.131287) 41766 POINT(721.558105 471.188324) 41767 POINT(459.203613 299.533142) 41768 POINT(234.904037 434.429199) 41769 POINT(461.138855 490.432343) 41770 POINT(613.709106 516.440979) 41771 POINT(645.481445 20.0666294) 41772 POINT(416.641754 411.646301) 41773 POINT(795.048645 223.981171) 41774 POINT(816.654053 664.321045) 41775 POINT(465.016754 555.749939) 41776 POINT(633.229797 14.1257772) 41777 POINT(499.224854 230.844574) 41778 POINT(781.242065 594.096252) 41779 POINT(531.402344 18.3583164) 41780 POINT(8.25090218 255.479401) 41781 POINT(396.327087 918.450256) 41782 POINT(566.715942 931.468201) 41783 POINT(809.5354 850.220581) 41784 POINT(45.775444 892.842651) 41785 POINT(509.490387 112.608963) 41786 POINT(622.264893 704.673462) 41787 POINT(391.704163 520.805481) 41788 POINT(338.964325 517.131409) 41789 POINT(426.964783 779.175049) 41790 POINT(989.244385 258.234741) 41791 POINT(350.415894 861.050171) 41792 POINT(794.019592 225.842148) 41793 POINT(67.7913742 223.796936) 41794 POINT(265.035278 274.783386) 41795 POINT(360.745667 407.775513) 41796 POINT(626.95929 177.742096) 41797 POINT(24.2040691 529.308655) 41798 POINT(541.585754 111.038292) 41799 POINT(852.367981 975.260315) 41800 POINT(965.88855 525.086182) 41801 POINT(551.955078 100.666092) 41802 POINT(59.999836 740.940796) 41803 POINT(425.067169 297.021881) 41804 POINT(622.884888 446.534851) 41805 POINT(581.51886 578.933716) 41806 POINT(507.105896 217.108551) 41807 POINT(141.403366 988.077881) 41808 POINT(487.309601 262.73761) 41809 POINT(831.138611 58.6776543) 41810 POINT(720.759521 711.186157) 41811 POINT(96.3461304 266.440826) 41812 POINT(36.3042717 906.585083) 41813 POINT(216.934692 497.223755) 41814 POINT(67.70504 874.333313) 41815 POINT(356.068481 842.322998) 41816 POINT(658.424866 341.421814) 41817 POINT(275.805603 439.590698) 41818 POINT(911.140991 471.007172) 41819 POINT(956.727905 134.505737) 41820 POINT(842.812927 873.051514) 41821 POINT(243.606659 699.509033) 41822 POINT(394.703735 982.356934) 41823 POINT(158.943909 505.554382) 41824 POINT(798.997131 685.154663) 41825 POINT(764.101318 434.789215) 41826 POINT(235.405502 149.96582) 41827 POINT(564.81366 521.036377) 41828 POINT(741.364807 342.77771) 41829 POINT(943.437439 134.403732) 41830 POINT(340.131927 236.337173) 41831 POINT(21.6909523 332.626282) 41832 POINT(897.538513 454.843475) 41833 POINT(610.408142 394.99826) 41834 POINT(838.62561 115.436813) 41835 POINT(460.586029 160.958557) 41836 POINT(281.336731 164.168716) 41837 POINT(194.515579 6.15052652) 41838 POINT(560.451782 174.76738) 41839 POINT(946.926758 511.315033) 41840 POINT(408.694305 642.266846) 41841 POINT(591.86261 786.545593) 41842 POINT(74.262352 409.864624) 41843 POINT(257.554169 193.711075) 41844 POINT(428.863495 306.250519) 41845 POINT(753.156372 817.338318) 41846 POINT(154.746292 22.7696114) 41847 POINT(240.20932 438.670349) 41848 POINT(593.411255 46.439621) 41849 POINT(498.614868 204.32518) 41850 POINT(945.972595 297.944611) 41851 POINT(60.3990784 400.955566) 41852 POINT(591.973511 355.817566) 41853 POINT(241.32547 267.149994) 41854 POINT(149.404022 522.265259) 41855 POINT(195.413834 125.747948) 41856 POINT(46.4239235 886.269653) 41857 POINT(883.612366 101.618065) 41858 POINT(280.679291 240.134583) 41859 POINT(696.400879 615.246033) 41860 POINT(374.057617 621.574829) 41861 POINT(140.227539 790.296326) 41862 POINT(411.332031 190.429413) 41863 POINT(806.781067 978.379883) 41864 POINT(305.58847 553.411987) 41865 POINT(937.688232 146.927963) 41866 POINT(839.934814 858.903442) 41867 POINT(498.928986 772.314087) 41868 POINT(575.201111 474.18103) 41869 POINT(340.840393 771.791687) 41870 POINT(821.7276 697.835083) 41871 POINT(870.919495 551.638855) 41872 POINT(687.596069 259.227386) 41873 POINT(665.736877 367.987) 41874 POINT(826.609009 714.122681) 41875 POINT(631.276489 329.626038) 41876 POINT(210.911118 801.098755) 41877 POINT(52.1763344 722.729065) 41878 POINT(792.440552 307.693573) 41879 POINT(92.04245 125.652145) 41880 POINT(744.596863 579.750732) 41881 POINT(789.756226 493.088104) 41882 POINT(493.933289 954.007324) 41883 POINT(189.120163 23.8682804) 41884 POINT(567.770386 705.15802) 41885 POINT(118.051765 952.209045) 41886 POINT(456.956909 567.597656) 41887 POINT(53.7210884 200.422485) 41888 POINT(986.266113 152.576263) 41889 POINT(54.5399513 149.90036) 41890 POINT(813.931946 158.012344) 41891 POINT(569.886963 190.017258) 41892 POINT(565.548035 825.739441) 41893 POINT(43.1463242 520.580383) 41894 POINT(118.035599 695.172791) 41895 POINT(170.434967 257.311127) 41896 POINT(761.842957 29.5654678) 41897 POINT(861.79895 831.923523) 41898 POINT(412.272003 938.091064) 41899 POINT(847.308777 114.649925) 41900 POINT(945.299622 911.483521) 41901 POINT(279.132812 509.147675) 41902 POINT(784.029053 349.044037) 41903 POINT(982.201111 384.839905) 41904 POINT(446.674164 439.283875) 41905 POINT(408.494965 792.738037) 41906 POINT(226.562347 114.721252) 41907 POINT(139.446228 146.151398) 41908 POINT(52.9870529 523.43158) 41909 POINT(571.659241 891.502502) 41910 POINT(875.91925 726.523376) 41911 POINT(405.562988 616.468384) 41912 POINT(327.79306 963.07312) 41913 POINT(755.166443 278.206329) 41914 POINT(595.13446 534.106079) 41915 POINT(208.463089 534.475708) 41916 POINT(238.149567 997.505554) 41917 POINT(418.964142 541.634521) 41918 POINT(437.100372 179.425247) 41919 POINT(804.22052 78.0023193) 41920 POINT(833.065552 378.664856) 41921 POINT(500.028412 756.782654) 41922 POINT(733.334778 842.9552) 41923 POINT(780.432373 223.115936) 41924 POINT(137.157532 45.23209) 41925 POINT(942.906311 163.978394) 41926 POINT(427.939148 789.4151) 41927 POINT(992.582642 292.289764) 41928 POINT(998.434448 675.241638) 41929 POINT(984.627686 58.0864868) 41930 POINT(804.361023 787.252625) 41931 POINT(323.455322 65.9404526) 41932 POINT(360.579865 621.617798) 41933 POINT(723.190613 180.553253) 41934 POINT(937.14447 594.29834) 41935 POINT(535.523254 238.861008) 41936 POINT(317.792755 993.852844) 41937 POINT(206.834427 579.896667) 41938 POINT(41.6727142 851.418213) 41939 POINT(272.374939 191.550613) 41940 POINT(354.196442 939.081238) 41941 POINT(395.570648 860.350403) 41942 POINT(391.977173 406.655457) 41943 POINT(957.62207 16.16856) 41944 POINT(370.017944 497.089935) 41945 POINT(866.951111 973.722046) 41946 POINT(630.008057 304.267792) 41947 POINT(938.364563 487.817047) 41948 POINT(453.18692 756.348755) 41949 POINT(64.8096085 226.126068) 41950 POINT(99.3313751 416.229065) 41951 POINT(725.171936 204.083572) 41952 POINT(867.698181 421.92868) 41953 POINT(222.720993 969.105347) 41954 POINT(302.037781 968.17926) 41955 POINT(591.673584 429.250305) 41956 POINT(399.026855 321.219604) 41957 POINT(833.18103 523.755005) 41958 POINT(699.718994 17.4703789) 41959 POINT(114.232758 274.304779) 41960 POINT(22.081295 819.644226) 41961 POINT(679.016052 246.815552) 41962 POINT(857.687683 277.870361) 41963 POINT(455.811005 719.862122) 41964 POINT(838.622864 596.107117) 41965 POINT(995.290161 289.301544) 41966 POINT(366.187775 553.650146) 41967 POINT(328.014984 646.336365) 41968 POINT(368.778687 736.704712) 41969 POINT(287.986908 521.086548) 41970 POINT(63.1605911 445.194641) 41971 POINT(601.447998 474.17395) 41972 POINT(575.217468 645.261902) 41973 POINT(699.997131 298.963959) 41974 POINT(830.205261 918.940857) 41975 POINT(476.872192 236.690781) 41976 POINT(448.754364 840.550659) 41977 POINT(585.455322 241.056641) 41978 POINT(636.689453 796.361511) 41979 POINT(978.321411 909.02832) 41980 POINT(590.595703 312.583496) 41981 POINT(130.223846 937.048889) 41982 POINT(566.538818 209.876465) 41983 POINT(284.185059 598.973206) 41984 POINT(989.131165 744.165527) 41985 POINT(439.330383 571.566467) 41986 POINT(278.052612 597.987183) 41987 POINT(73.4186707 768.859924) 41988 POINT(108.123619 568.926514) 41989 POINT(501.425323 767.13147) 41990 POINT(719.163879 867.595886) 41991 POINT(631.417847 2.50314474) 41992 POINT(478.345184 533.344116) 41993 POINT(835.829895 563.470886) 41994 POINT(948.882629 938.38208) 41995 POINT(933.72583 957.082581) 41996 POINT(216.151047 157.808014) 41997 POINT(429.506531 341.558258) 41998 POINT(600.231018 2.27612257) 41999 POINT(305.628235 47.1304169) 42000 POINT(280.17923 250.564941) 42001 POINT(779.288635 673.621338) 42002 POINT(860.7995 480.481445) 42003 POINT(541.819763 96.247551) 42004 POINT(821.309204 418.421478) 42005 POINT(468.966705 534.447937) 42006 POINT(844.123474 841.161926) 42007 POINT(562.71228 661.900757) 42008 POINT(681.207458 339.373077) 42009 POINT(731.333679 44.6749268) 42010 POINT(878.400208 152.825531) 42011 POINT(782.585754 989.63092) 42012 POINT(951.234558 414.864685) 42013 POINT(872.051575 933.347595) 42014 POINT(548.636292 491.597778) 42015 POINT(369.665222 585.228027) 42016 POINT(516.181335 303.179077) 42017 POINT(265.208954 204.886093) 42018 POINT(294.135376 94.9949112) 42019 POINT(489.342224 206.904831) 42020 POINT(676.250183 750.486755) 42021 POINT(869.695496 74.6995163) 42022 POINT(985.308105 460.468353) 42023 POINT(439.139709 674.229065) 42024 POINT(265.889221 82.3811569) 42025 POINT(861.030151 98.0379333) 42026 POINT(182.10405 423.907928) 42027 POINT(307.653015 266.549469) 42028 POINT(169.536072 696.261597) 42029 POINT(25.0341358 558.275513) 42030 POINT(710.937439 621.454346) 42031 POINT(419.583008 640.877197) 42032 POINT(772.020081 903.715881) 42033 POINT(17.7506924 603.668518) 42034 POINT(787.798767 637.386047) 42035 POINT(365.109039 137.662521) 42036 POINT(675.319214 512.092834) 42037 POINT(460.269257 325.734497) 42038 POINT(162.313553 571.509094) 42039 POINT(854.233398 62.6309204) 42040 POINT(963.562744 605.744507) 42041 POINT(107.620544 957.749146) 42042 POINT(660.830994 721.393555) 42043 POINT(985.360596 33.8212585) 42044 POINT(404.615021 89.9576492) 42045 POINT(7.66685581 638.460388) 42046 POINT(66.1948013 567.96283) 42047 POINT(772.258423 765.19397) 42048 POINT(239.272629 694.380676) 42049 POINT(648.919006 733.970215) 42050 POINT(487.669342 277.35791) 42051 POINT(934.68103 721.65448) 42052 POINT(628.051453 297.795135) 42053 POINT(585.46991 539.835388) 42054 POINT(246.564178 487.660736) 42055 POINT(25.3148479 925.063049) 42056 POINT(400.735748 632.365723) 42057 POINT(922.742554 295.791718) 42058 POINT(831.420654 235.976929) 42059 POINT(939.344055 816.779907) 42060 POINT(485.306641 653.045349) 42061 POINT(349.506744 837.106018) 42062 POINT(661.194153 499.540588) 42063 POINT(732.812622 489.519196) 42064 POINT(280.562836 116.598244) 42065 POINT(109.629242 879.413513) 42066 POINT(235.686325 973.918701) 42067 POINT(462.094391 789.763977) 42068 POINT(280.691681 204.745468) 42069 POINT(421.276581 887.997559) 42070 POINT(749.551819 392.056915) 42071 POINT(449.163757 761.719482) 42072 POINT(460.243774 347.223724) 42073 POINT(371.800751 717.822937) 42074 POINT(399.52417 899.821411) 42075 POINT(975.994812 654.759277) 42076 POINT(284.409821 753.089844) 42077 POINT(243.29335 727.233154) 42078 POINT(424.075775 746.857544) 42079 POINT(916.296814 248.544861) 42080 POINT(722.19397 542.390808) 42081 POINT(556.803162 866.074768) 42082 POINT(380.547821 825.997986) 42083 POINT(223.929169 563.476807) 42084 POINT(309.022736 785.358887) 42085 POINT(862.469055 318.114075) 42086 POINT(286.855469 400.118652) 42087 POINT(514.719543 118.860756) 42088 POINT(130.523972 202.580185) 42089 POINT(448.328278 637.960693) 42090 POINT(33.1943398 692.253479) 42091 POINT(202.044083 777.14917) 42092 POINT(580.656189 757.124512) 42093 POINT(692.317993 964.317322) 42094 POINT(903.744995 882.945007) 42095 POINT(776.409302 869.846436) 42096 POINT(885.063232 878.412598) 42097 POINT(739.995972 814.223877) 42098 POINT(139.19162 458.219452) 42099 POINT(855.409241 739.140137) 42100 POINT(674.475037 597.637268) 42101 POINT(554.763 167.06665) 42102 POINT(217.942123 782.24115) 42103 POINT(572.814026 49.0494957) 42104 POINT(343.169922 445.842072) 42105 POINT(157.879532 32.4757042) 42106 POINT(937.256897 230.613724) 42107 POINT(724.17865 220.857819) 42108 POINT(533.960205 568.302307) 42109 POINT(52.3246918 462.833344) 42110 POINT(435.063721 213.460419) 42111 POINT(841.243835 129.821671) 42112 POINT(853.857239 142.640549) 42113 POINT(407.554749 18.9698639) 42114 POINT(9.05706787 941.829834) 42115 POINT(28.5333824 763.627563) 42116 POINT(843.517517 853.149231) 42117 POINT(571.476013 26.723156) 42118 POINT(961.749268 846.636963) 42119 POINT(962.935303 887.792297) 42120 POINT(298.767944 870.080444) 42121 POINT(871.454285 572.39093) 42122 POINT(728.463074 146.263916) 42123 POINT(930.687378 889.179993) 42124 POINT(273.950836 510.203796) 42125 POINT(467.94165 76.7054749) 42126 POINT(229.82338 177.108627) 42127 POINT(156.069168 876.035583) 42128 POINT(484.528687 513.721069) 42129 POINT(232.308289 459.813141) 42130 POINT(731.128357 750.784241) 42131 POINT(962.237488 801.411194) 42132 POINT(370.329803 662.665833) 42133 POINT(234.725342 363.841003) 42134 POINT(488.048401 982.335083) 42135 POINT(497.022919 846.58783) 42136 POINT(781.014343 287.205444) 42137 POINT(448.453003 634.986206) 42138 POINT(111.423622 745.750305) 42139 POINT(855.13916 552.071716) 42140 POINT(101.784119 58.8012619) 42141 POINT(703.644775 283.664246) 42142 POINT(893.499084 156.219193) 42143 POINT(433.139679 215.971527) 42144 POINT(650.054749 352.973358) 42145 POINT(756.787903 439.103607) 42146 POINT(303.758881 252.987442) 42147 POINT(264.588409 893.03894) 42148 POINT(342.755341 379.453094) 42149 POINT(581.156616 393.877075) 42150 POINT(484.5896 362.336517) 42151 POINT(900.29425 922.381226) 42152 POINT(959.114319 223.797623) 42153 POINT(629.163452 694.210144) 42154 POINT(855.323669 457.123169) 42155 POINT(122.092361 287.83136) 42156 POINT(805.237244 922.078918) 42157 POINT(869.251831 373.509399) 42158 POINT(867.784973 197.480042) 42159 POINT(408.537689 272.188934) 42160 POINT(224.476105 699.048767) 42161 POINT(857.979736 849.405151) 42162 POINT(547.277222 236.691727) 42163 POINT(607.008606 805.018799) 42164 POINT(191.536316 540.220215) 42165 POINT(972.203613 708.703674) 42166 POINT(700.027771 806.926025) 42167 POINT(709.102173 623.424438) 42168 POINT(178.461655 339.595551) 42169 POINT(196.778442 589.997131) 42170 POINT(571.41925 561.412781) 42171 POINT(974.835144 866.186646) 42172 POINT(587.08374 967.309753) 42173 POINT(539.94812 640.278931) 42174 POINT(298.911041 142.827362) 42175 POINT(906.046509 3.88677931) 42176 POINT(305.217529 735.246521) 42177 POINT(231.608109 569.766357) 42178 POINT(719.373657 972.050781) 42179 POINT(730.532288 71.109024) 42180 POINT(362.829407 903.724426) 42181 POINT(348.879913 158.231003) 42182 POINT(962.629761 307.14035) 42183 POINT(125.82415 11.5434828) 42184 POINT(239.600113 68.6395264) 42185 POINT(408.945007 176.491745) 42186 POINT(791.314697 709.26123) 42187 POINT(885.157227 572.788025) 42188 POINT(106.75013 495.988129) 42189 POINT(770.843384 78.3248291) 42190 POINT(831.740723 670.49176) 42191 POINT(108.055061 594.873657) 42192 POINT(173.689804 729.485474) 42193 POINT(395.950226 490.897797) 42194 POINT(681.268799 307.829865) 42195 POINT(284.092926 725.014709) 42196 POINT(354.002777 87.0321732) 42197 POINT(631.101013 485.935577) 42198 POINT(374.763062 708.39209) 42199 POINT(330.782104 560.811157) 42200 POINT(665.465759 983.071655) 42201 POINT(198.844604 849.17865) 42202 POINT(846.021667 722.711121) 42203 POINT(245.152786 975.108398) 42204 POINT(135.253479 366.419098) 42205 POINT(506.060028 82.2943878) 42206 POINT(829.65033 746.200745) 42207 POINT(533.493774 907.944031) 42208 POINT(494.172699 946.932556) 42209 POINT(715.182251 669.254822) 42210 POINT(114.662941 303.272339) 42211 POINT(994.841614 224.490555) 42212 POINT(612.714661 299.435974) 42213 POINT(761.538452 218.295105) 42214 POINT(183.165436 54.2505836) 42215 POINT(751.194092 332.626678) 42216 POINT(456.910645 379.592255) 42217 POINT(645.80481 450.918976) 42218 POINT(45.7991486 182.14975) 42219 POINT(641.054932 129.749084) 42220 POINT(323.420502 463.963684) 42221 POINT(882.352295 651.018433) 42222 POINT(520.189392 984.537048) 42223 POINT(222.801422 505.660675) 42224 POINT(250.979263 35.2869987) 42225 POINT(942.256409 110.02742) 42226 POINT(289.466553 895.122375) 42227 POINT(670.497192 66.8499451) 42228 POINT(799.272766 674.028198) 42229 POINT(894.004456 308.129547) 42230 POINT(824.995972 90.3784943) 42231 POINT(787.156799 967.20105) 42232 POINT(836.507751 588.572144) 42233 POINT(215.442032 56.8929596) 42234 POINT(660.774719 298.410278) 42235 POINT(209.100861 731.151794) 42236 POINT(583.387695 18.9404831) 42237 POINT(927.25708 595.30542) 42238 POINT(566.522217 420.453979) 42239 POINT(629.923584 737.543335) 42240 POINT(923.901489 382.7211) 42241 POINT(781.309326 679.035828) 42242 POINT(882.3125 99.8037338) 42243 POINT(533.72699 595.880188) 42244 POINT(912.275452 696.930664) 42245 POINT(226.368515 31.8484344) 42246 POINT(649.667358 428.624878) 42247 POINT(494.659515 991.448975) 42248 POINT(480.637177 505.821747) 42249 POINT(269.335663 138.448853) 42250 POINT(202.347305 570.028564) 42251 POINT(573.428833 701.717346) 42252 POINT(583.383118 272.183563) 42253 POINT(151.775818 249.641876) 42254 POINT(564.650696 190.946198) 42255 POINT(721.342163 393.663788) 42256 POINT(401.936981 948.477051) 42257 POINT(969.601868 643.532654) 42258 POINT(345.849213 250.755264) 42259 POINT(388.559631 500.164062) 42260 POINT(777.533386 234.18074) 42261 POINT(978.0047 640.604431) 42262 POINT(816.459473 871.274353) 42263 POINT(725.629395 943.287109) 42264 POINT(739.853638 847.015869) 42265 POINT(344.233368 605.857971) 42266 POINT(505.37088 725.656738) 42267 POINT(866.006042 723.329895) 42268 POINT(855.788635 988.256531) 42269 POINT(537.587463 187.798996) 42270 POINT(966.418823 626.877258) 42271 POINT(782.136047 424.647003) 42272 POINT(135.297104 66.1202316) 42273 POINT(378.990204 341.910828) 42274 POINT(328.815002 770.922119) 42275 POINT(118.828194 502.807526) 42276 POINT(400.273346 656.273376) 42277 POINT(11.7704945 265.353058) 42278 POINT(867.914185 395.452911) 42279 POINT(225.007721 812.338196) 42280 POINT(347.534912 624.775269) 42281 POINT(700.787659 229.976288) 42282 POINT(111.119644 451.632416) 42283 POINT(328.587799 210.288239) 42284 POINT(18.4844742 316.322968) 42285 POINT(418.792938 442.345764) 42286 POINT(928.297791 254.963272) 42287 POINT(429.073334 228.07869) 42288 POINT(25.6962376 719.448547) 42289 POINT(636.927673 482.318481) 42290 POINT(646.893921 980.403625) 42291 POINT(18.6453896 742.573975) 42292 POINT(680.62262 560.359802) 42293 POINT(600.516785 575.81897) 42294 POINT(479.011078 297.689209) 42295 POINT(184.85759 297.041748) 42296 POINT(116.812126 348.404022) 42297 POINT(641.823669 942.811646) 42298 POINT(451.034241 404.704926) 42299 POINT(996.708191 223.642807) 42300 POINT(609.47406 498.672943) 42301 POINT(758.190918 728.067993) 42302 POINT(585.952698 209.91272) 42303 POINT(330.734436 1.31891859) 42304 POINT(554.922363 791.058105) 42305 POINT(766.998535 570.179504) 42306 POINT(304.352753 439.256989) 42307 POINT(454.909515 346.424133) 42308 POINT(992.375061 590.102234) 42309 POINT(838.12915 693.368164) 42310 POINT(882.125183 998.633057) 42311 POINT(755.502991 378.170898) 42312 POINT(125.780647 446.283234) 42313 POINT(100.138359 516.998169) 42314 POINT(331.249512 9.9171896) 42315 POINT(965.701538 826.939026) 42316 POINT(34.7906189 926.905884) 42317 POINT(318.084534 169.293869) 42318 POINT(254.590378 556.722656) 42319 POINT(134.66684 660.722168) 42320 POINT(651.688904 783.565247) 42321 POINT(348.982422 964.620483) 42322 POINT(66.4590454 325.457855) 42323 POINT(361.841797 693.463074) 42324 POINT(125.037766 853.184692) 42325 POINT(195.100357 857.786316) 42326 POINT(467.765137 7.92935848) 42327 POINT(13.6987 708.755554) 42328 POINT(890.992615 410.921387) 42329 POINT(995.830688 124.17588) 42330 POINT(217.903168 543.644043) 42331 POINT(738.755676 383.367096) 42332 POINT(129.685089 45.7698669) 42333 POINT(225.619614 31.1255112) 42334 POINT(55.0887985 23.1310444) 42335 POINT(101.570648 827.263489) 42336 POINT(796.7677 513.484558) 42337 POINT(698.450562 63.8041039) 42338 POINT(82.6807175 348.016479) 42339 POINT(67.5551147 870.292603) 42340 POINT(89.1600418 436.480438) 42341 POINT(718.634033 347.963959) 42342 POINT(61.0932274 549.24884) 42343 POINT(887.832031 320.41153) 42344 POINT(29.2306805 166.6604) 42345 POINT(863.16333 272.277435) 42346 POINT(823.226013 1.78684354) 42347 POINT(156.995926 294.317719) 42348 POINT(833.094849 604.656677) 42349 POINT(432.653931 954.577087) 42350 POINT(465.907227 642.225525) 42351 POINT(946.515808 378.570984) 42352 POINT(866.40332 277.763397) 42353 POINT(565.8927 119.168633) 42354 POINT(60.6667557 695.250549) 42355 POINT(952.653687 817.770447) 42356 POINT(284.942596 518.875366) 42357 POINT(377.279877 156.487427) 42358 POINT(374.226166 345.474731) 42359 POINT(540.155151 146.076416) 42360 POINT(907.562805 160.038208) 42361 POINT(246.955322 621.720581) 42362 POINT(492.413177 253.124359) 42363 POINT(411.600739 679.344543) 42364 POINT(475.394226 756.753662) 42365 POINT(570.15802 195.61879) 42366 POINT(300.777985 805.20813) 42367 POINT(387.190399 67.3646393) 42368 POINT(214.008774 992.972534) 42369 POINT(855.375732 178.573547) 42370 POINT(491.009125 518.214111) 42371 POINT(440.86438 669.175537) 42372 POINT(534.128601 581.747681) 42373 POINT(50.0996742 918.136047) 42374 POINT(134.317505 64.0456924) 42375 POINT(706.049255 859.151245) 42376 POINT(781.678589 672.807678) 42377 POINT(368.506256 180.507034) 42378 POINT(891.276794 977.819763) 42379 POINT(637.948364 497.532196) 42380 POINT(179.42572 505.851532) 42381 POINT(697.146912 368.127502) 42382 POINT(612.179321 224.316513) 42383 POINT(899.179993 706.301147) 42384 POINT(490.142059 807.153137) 42385 POINT(862.733337 658.351624) 42386 POINT(422.786072 449.282837) 42387 POINT(821.698792 779.779663) 42388 POINT(475.175629 217.104034) 42389 POINT(660.36499 592.285767) 42390 POINT(387.421234 922.455261) 42391 POINT(490.319672 529.048706) 42392 POINT(922.506592 857.611511) 42393 POINT(561.051636 378.227753) 42394 POINT(494.67981 891.083923) 42395 POINT(591.794861 610.271362) 42396 POINT(874.812927 0.808390915) 42397 POINT(444.143372 190.743317) 42398 POINT(20.5894623 305.901428) 42399 POINT(178.278641 419.225098) 42400 POINT(700.764465 684.319824) 42401 POINT(533.286987 44.2672577) 42402 POINT(289.886444 655.895325) 42403 POINT(405.147095 947.824951) 42404 POINT(821.709351 33.3716774) 42405 POINT(953.78595 399.219116) 42406 POINT(478.136353 953.907227) 42407 POINT(120.522179 593.147278) 42408 POINT(231.113083 996.31366) 42409 POINT(974.74939 518.974121) 42410 POINT(375.750946 751.9953) 42411 POINT(907.483154 285.439301) 42412 POINT(425.554596 177.670197) 42413 POINT(51.1722641 737.632568) 42414 POINT(969.522278 433.660248) 42415 POINT(809.830872 458.82666) 42416 POINT(3.77971506 461.620209) 42417 POINT(239.097885 221.380798) 42418 POINT(288.11554 929.450989) 42419 POINT(508.402832 326.908142) 42420 POINT(984.257751 158.846909) 42421 POINT(421.270966 510.341003) 42422 POINT(205.033051 433.127502) 42423 POINT(157.320755 645.152161) 42424 POINT(841.881897 480.986786) 42425 POINT(51.1975708 113.155739) 42426 POINT(795.881287 657.47522) 42427 POINT(438.183807 642.987244) 42428 POINT(370.899567 249.447311) 42429 POINT(800.286072 693.156921) 42430 POINT(406.343658 662.026855) 42431 POINT(645.104858 90.7051544) 42432 POINT(743.854614 879.150513) 42433 POINT(575.750854 932.819397) 42434 POINT(803.082031 309.363892) 42435 POINT(774.618896 529.770874) 42436 POINT(555.267334 842.799866) 42437 POINT(866.218384 992.30127) 42438 POINT(651.859985 962.332031) 42439 POINT(661.876526 539.861755) 42440 POINT(213.975708 17.556118) 42441 POINT(267.483704 588.224121) 42442 POINT(95.5016479 121.420456) 42443 POINT(178.166534 541.933838) 42444 POINT(779.503662 543.547424) 42445 POINT(342.621979 110.448975) 42446 POINT(388.869568 319.717865) 42447 POINT(384.697113 43.8390007) 42448 POINT(225.520767 82.4274673) 42449 POINT(678.668579 867.454163) 42450 POINT(388.866119 742.273071) 42451 POINT(323.695099 423.495972) 42452 POINT(157.400085 654.235535) 42453 POINT(116.338676 505.023132) 42454 POINT(194.5327 717.351196) 42455 POINT(820.267822 314.341064) 42456 POINT(211.078415 552.099487) 42457 POINT(649.764893 878.302979) 42458 POINT(385.64151 438.991364) 42459 POINT(267.103241 408.764465) 42460 POINT(716.867126 186.864517) 42461 POINT(419.989838 173.893784) 42462 POINT(117.745125 23.4349594) 42463 POINT(868.968201 27.4620094) 42464 POINT(724.557739 97.5165558) 42465 POINT(558.958008 876.482971) 42466 POINT(797.469116 276.408783) 42467 POINT(235.096542 116.110619) 42468 POINT(155.111771 778.310852) 42469 POINT(380.008453 253.637985) 42470 POINT(183.903488 353.910187) 42471 POINT(524.941711 425.500854) 42472 POINT(669.418823 419.803619) 42473 POINT(556.379395 392.724518) 42474 POINT(540.269104 836.056458) 42475 POINT(576.402283 507.23761) 42476 POINT(826.053711 138.52449) 42477 POINT(480.991638 465.516907) 42478 POINT(894.605042 601.723572) 42479 POINT(575.509888 814.345825) 42480 POINT(237.657364 778.816406) 42481 POINT(958.787109 818.920471) 42482 POINT(559.043945 291.115417) 42483 POINT(862.703613 634.595032) 42484 POINT(729.511719 910.408447) 42485 POINT(747.155273 694.326599) 42486 POINT(804.312378 74.0658569) 42487 POINT(413.196594 804.083313) 42488 POINT(954.0755 216.576675) 42489 POINT(230.489639 863.472229) 42490 POINT(989.41272 903.793152) 42491 POINT(377.573914 149.596741) 42492 POINT(521.69104 70.2865143) 42493 POINT(691.672119 235.278534) 42494 POINT(506.015228 428.987762) 42495 POINT(823.643188 390.488647) 42496 POINT(470.36911 729.49939) 42497 POINT(226.293533 535.993591) 42498 POINT(612.907471 261.530365) 42499 POINT(481.693085 794.298035) 42500 POINT(816.503662 247.866028) 42501 POINT(334.674042 494.066193) 42502 POINT(607.919495 352.799713) 42503 POINT(862.696167 225.053909) 42504 POINT(3.56322789 893.317078) 42505 POINT(622.256042 571.529358) 42506 POINT(813.063354 818.445068) 42507 POINT(592.626953 349.188721) 42508 POINT(297.251923 594.601013) 42509 POINT(840.700623 175.273956) 42510 POINT(533.195801 669.661316) 42511 POINT(185.948181 671.210205) 42512 POINT(563.327148 694.608704) 42513 POINT(710.024414 454.443512) 42514 POINT(489.333221 558.41925) 42515 POINT(767.450439 759.75824) 42516 POINT(408.207672 79.3627319) 42517 POINT(576.374329 244.284317) 42518 POINT(224.818344 824.767212) 42519 POINT(444.014435 494.399445) 42520 POINT(362.700012 572.838501) 42521 POINT(980.542603 452.134613) 42522 POINT(635.858398 846.235229) 42523 POINT(126.496887 414.488556) 42524 POINT(645.617188 340.3237) 42525 POINT(639.08429 197.840256) 42526 POINT(87.5250778 932.535217) 42527 POINT(606.824585 283.652954) 42528 POINT(56.7582474 926.811401) 42529 POINT(172.90712 318.733978) 42530 POINT(542.126343 783.167297) 42531 POINT(606.513489 796.93219) 42532 POINT(717.663818 471.96109) 42533 POINT(157.459442 428.418365) 42534 POINT(748.930969 831.203247) 42535 POINT(330.212433 952.332397) 42536 POINT(703.756165 589.451294) 42537 POINT(714.153076 578.942993) 42538 POINT(822.546997 633.435547) 42539 POINT(781.505066 984.530273) 42540 POINT(92.9196167 376.086121) 42541 POINT(914.412476 717.569275) 42542 POINT(471.825104 835.241211) 42543 POINT(728.083984 915.689636) 42544 POINT(593.271118 24.8079376) 42545 POINT(725.751526 552.165833) 42546 POINT(731.978882 137.92717) 42547 POINT(739.547119 716.828247) 42548 POINT(706.816528 555.805664) 42549 POINT(93.5361252 143.38179) 42550 POINT(299.683563 126.983971) 42551 POINT(163.445602 792.901611) 42552 POINT(335.883972 251.199799) 42553 POINT(22.5993252 527.093811) 42554 POINT(474.236023 781.592834) 42555 POINT(253.84906 5.74409723) 42556 POINT(845.669312 481.322052) 42557 POINT(199.632248 937.226685) 42558 POINT(267.428253 978.891785) 42559 POINT(921.572998 731.236816) 42560 POINT(858.926941 744.397705) 42561 POINT(780.283447 746.897705) 42562 POINT(460.607117 330.922852) 42563 POINT(736.349548 510.546783) 42564 POINT(477.78067 906.477661) 42565 POINT(454.155975 74.9364471) 42566 POINT(259.464111 247.844666) 42567 POINT(878.602844 700.009033) 42568 POINT(202.828995 824.75647) 42569 POINT(796.399902 115.184227) 42570 POINT(725.418091 207.910797) 42571 POINT(712.124573 150.199753) 42572 POINT(551.160156 764.950439) 42573 POINT(216.355347 637.577576) 42574 POINT(347.025116 832.876221) 42575 POINT(528.82782 351.975098) 42576 POINT(262.591248 282.200989) 42577 POINT(521.709412 782.872986) 42578 POINT(955.669495 516.90979) 42579 POINT(802.889709 675.726868) 42580 POINT(27.3884392 525.006104) 42581 POINT(230.887985 226.971069) 42582 POINT(686.860657 37.7541809) 42583 POINT(983.976624 299.832825) 42584 POINT(868.922485 242.971664) 42585 POINT(286.910706 26.1497669) 42586 POINT(841.779968 790.788391) 42587 POINT(457.878265 175.256271) 42588 POINT(671.157349 131.714508) 42589 POINT(752.69635 971.118042) 42590 POINT(313.29364 29.8130131) 42591 POINT(807.760071 905.475159) 42592 POINT(853.566956 532.037292) 42593 POINT(400.812531 75.6532364) 42594 POINT(706.466309 772.791565) 42595 POINT(920.37561 734.398926) 42596 POINT(865.017944 915.534851) 42597 POINT(849.92218 904.686157) 42598 POINT(405.681213 836.445374) 42599 POINT(798.964478 929.656799) 42600 POINT(993.355042 35.0800171) 42601 POINT(45.6863251 807.050354) 42602 POINT(618.792969 800.514282) 42603 POINT(168.192078 724.617798) 42604 POINT(968.86676 96.1772156) 42605 POINT(435.641998 759.713257) 42606 POINT(863.309631 570.658569) 42607 POINT(86.3737717 639.730225) 42608 POINT(977.508545 813.959595) 42609 POINT(145.579697 453.157532) 42610 POINT(450.420227 608.392334) 42611 POINT(816.354492 442.243927) 42612 POINT(993.702698 760.646179) 42613 POINT(829.204651 451.684906) 42614 POINT(269.7547 827.101929) 42615 POINT(148.801514 223.105942) 42616 POINT(792.731567 979.562988) 42617 POINT(633.373047 747.763184) 42618 POINT(581.084167 615.11792) 42619 POINT(220.298706 70.7958527) 42620 POINT(609.184814 444.372711) 42621 POINT(897.951965 796.141418) 42622 POINT(578.738281 439.972015) 42623 POINT(623.513794 604.09491) 42624 POINT(170.61792 575.945129) 42625 POINT(792.360046 161.308304) 42626 POINT(210.338303 12.3858728) 42627 POINT(267.843628 189.258469) 42628 POINT(754.522583 694.340637) 42629 POINT(80.1040039 240.970795) 42630 POINT(103.513298 44.2012444) 42631 POINT(16.3246059 11.7881689) 42632 POINT(991.90741 979.667725) 42633 POINT(598.132874 138.581345) 42634 POINT(482.588989 221.376373) 42635 POINT(598.22821 298.97757) 42636 POINT(372.230255 243.114304) 42637 POINT(839.590454 649.544434) 42638 POINT(641.807129 131.336456) 42639 POINT(676.645081 896.630188) 42640 POINT(792.120789 568.242126) 42641 POINT(236.554611 498.583252) 42642 POINT(882.455322 533.38092) 42643 POINT(236.49292 91.8264389) 42644 POINT(34.2758522 672.672852) 42645 POINT(353.608582 419.8508) 42646 POINT(818.355957 541.513855) 42647 POINT(650.767273 43.3426247) 42648 POINT(763.105896 661.582092) 42649 POINT(223.598679 406.719238) 42650 POINT(607.485046 0.977780998) 42651 POINT(881.486267 432.300537) 42652 POINT(480.156738 696.958496) 42653 POINT(483.689697 474.784454) 42654 POINT(977.060181 582.936218) 42655 POINT(276.663879 977.85437) 42656 POINT(895.025146 990.373291) 42657 POINT(802.837463 579.473633) 42658 POINT(875.258057 896.162537) 42659 POINT(335.778442 276.196808) 42660 POINT(336.432556 442.043823) 42661 POINT(331.055389 908.745544) 42662 POINT(204.793091 220.258835) 42663 POINT(633.586121 15.8938742) 42664 POINT(153.316849 195.265732) 42665 POINT(546.361023 631.723755) 42666 POINT(371.907379 301.840942) 42667 POINT(815.762939 998.533569) 42668 POINT(537.246887 352.825409) 42669 POINT(927.044067 325.70694) 42670 POINT(318.893311 23.290556) 42671 POINT(209.739349 550.900879) 42672 POINT(835.160278 110.794868) 42673 POINT(334.907562 726.848938) 42674 POINT(299.091125 653.089661) 42675 POINT(130.227173 853.367554) 42676 POINT(215.369202 605.149414) 42677 POINT(859.390137 153.905014) 42678 POINT(900.372742 817.41571) 42679 POINT(401.318878 428.912567) 42680 POINT(499.976685 837.938049) 42681 POINT(142.985901 939.79187) 42682 POINT(726.444458 294.591095) 42683 POINT(965.673706 538.16394) 42684 POINT(83.28759 152.275406) 42685 POINT(885.135864 472.309753) 42686 POINT(704.870972 227.143646) 42687 POINT(706.187134 508.081787) 42688 POINT(118.497375 859.212646) 42689 POINT(304.772583 993.227295) 42690 POINT(206.543991 370.649261) 42691 POINT(766.673279 85.3761063) 42692 POINT(573.884583 784.585144) 42693 POINT(830.958374 134.031281) 42694 POINT(33.3877296 554.1922) 42695 POINT(725.472778 750.482239) 42696 POINT(334.929474 700.221741) 42697 POINT(186.56369 276.994812) 42698 POINT(859.416016 614.192017) 42699 POINT(949.530762 553.890808) 42700 POINT(260.226288 831.441833) 42701 POINT(331.692017 221.818573) 42702 POINT(894.824097 681.510559) 42703 POINT(336.373749 443.85791) 42704 POINT(986.751526 891.553711) 42705 POINT(441.563324 310.952698) 42706 POINT(383.618988 851.166565) 42707 POINT(437.545319 242.995728) 42708 POINT(323.996857 384.107056) 42709 POINT(207.828049 120.806686) 42710 POINT(42.3642578 944.648865) 42711 POINT(649.445007 400.972443) 42712 POINT(276.669464 234.942703) 42713 POINT(272.789612 61.4077568) 42714 POINT(700.932007 286.734344) 42715 POINT(756.146179 401.52478) 42716 POINT(92.1089706 168.620346) 42717 POINT(532.772461 743.668701) 42718 POINT(215.729019 161.879807) 42719 POINT(613.652466 234.21489) 42720 POINT(241.264587 627.594604) 42721 POINT(379.879791 771.27832) 42722 POINT(191.680954 889.671326) 42723 POINT(176.184952 654.838379) 42724 POINT(911.022034 447.549103) 42725 POINT(690.643372 693.328918) 42726 POINT(171.33165 264.479309) 42727 POINT(382.474243 53.1180725) 42728 POINT(410.864655 948.586731) 42729 POINT(515.575317 214.146591) 42730 POINT(727.732422 441.380219) 42731 POINT(643.666138 622.293884) 42732 POINT(878.299011 579.513977) 42733 POINT(975.389404 398.392944) 42734 POINT(332.368286 218.571823) 42735 POINT(804.330444 182.44577) 42736 POINT(805.169495 761.245789) 42737 POINT(827.668396 532.355896) 42738 POINT(960.187866 65.9207077) 42739 POINT(484.196716 447.863678) 42740 POINT(200.933426 115.396507) 42741 POINT(532.009705 506.451843) 42742 POINT(140.873367 179.947067) 42743 POINT(650.623047 748.505005) 42744 POINT(659.161865 835.411743) 42745 POINT(412.191498 69.3103027) 42746 POINT(568.808594 307.46402) 42747 POINT(120.436348 216.555771) 42748 POINT(199.977463 560.135071) 42749 POINT(690.657837 70.4156952) 42750 POINT(443.771912 73.2539978) 42751 POINT(444.666687 231.339676) 42752 POINT(523.835876 743.492371) 42753 POINT(753.63031 856.131409) 42754 POINT(430.202789 71.5780869) 42755 POINT(290.829193 479.294373) 42756 POINT(231.002701 179.015549) 42757 POINT(994.40979 313.033173) 42758 POINT(494.959351 36.9786453) 42759 POINT(4.79189396 330.461853) 42760 POINT(636.272766 34.2166405) 42761 POINT(977.942261 662.829956) 42762 POINT(911.806152 996.749451) 42763 POINT(507.898834 358.916016) 42764 POINT(39.9245644 477.362854) 42765 POINT(471.477753 4.75360775) 42766 POINT(405.440582 425.611755) 42767 POINT(64.9019241 741.776794) 42768 POINT(703.596863 737.990967) 42769 POINT(94.1612778 774.147278) 42770 POINT(748.687195 72.5483856) 42771 POINT(744.387329 959.937622) 42772 POINT(323.721863 232.539536) 42773 POINT(952.651367 740.087585) 42774 POINT(123.559425 310.41275) 42775 POINT(585.764404 693.358154) 42776 POINT(495.341492 207.76651) 42777 POINT(650.370239 900.223877) 42778 POINT(210.208511 570.843018) 42779 POINT(585.519836 54.7528229) 42780 POINT(515.582458 207.157776) 42781 POINT(484.746857 647.62207) 42782 POINT(277.349548 670.175964) 42783 POINT(620.319275 337.729584) 42784 POINT(888.757202 549.322754) 42785 POINT(479.82251 882.250488) 42786 POINT(513.575256 606.469482) 42787 POINT(335.675964 268.912872) 42788 POINT(64.0066528 922.411072) 42789 POINT(140.845917 318.846893) 42790 POINT(461.038208 713.405823) 42791 POINT(846.283752 348.308716) 42792 POINT(261.593109 144.873734) 42793 POINT(462.993286 103.258743) 42794 POINT(691.302124 893.763367) 42795 POINT(817.749084 238.14801) 42796 POINT(725.39917 120.431732) 42797 POINT(778.105286 990.948242) 42798 POINT(797.734253 23.3066025) 42799 POINT(129.336273 317.670258) 42800 POINT(376.882385 23.9032631) 42801 POINT(481.342834 764.20697) 42802 POINT(369.629791 515.359863) 42803 POINT(853.474854 459.786041) 42804 POINT(639.681274 794.580505) 42805 POINT(543.918579 268.725922) 42806 POINT(860.331055 466.993774) 42807 POINT(730.160095 805.284058) 42808 POINT(154.263687 85.1356354) 42809 POINT(988.572083 435.517639) 42810 POINT(164.922745 769.667358) 42811 POINT(663.010376 811.22406) 42812 POINT(208.453934 916.574707) 42813 POINT(181.211136 920.790222) 42814 POINT(282.656738 60.3325386) 42815 POINT(18.6281567 132.384491) 42816 POINT(972.369324 423.547607) 42817 POINT(875.152283 544.222778) 42818 POINT(655.078918 413.422638) 42819 POINT(672.044739 958.109558) 42820 POINT(45.2440071 239.360718) 42821 POINT(433.649567 535.194946) 42822 POINT(642.901367 229.810074) 42823 POINT(808.409912 271.627502) 42824 POINT(396.811493 266.328247) 42825 POINT(551.909546 706.873596) 42826 POINT(132.983093 865.731995) 42827 POINT(464.723083 124.887558) 42828 POINT(517.363586 804.637634) 42829 POINT(101.547226 69.662529) 42830 POINT(451.353882 162.847824) 42831 POINT(675.282471 429.191406) 42832 POINT(478.298187 271.692719) 42833 POINT(428.446564 68.3705902) 42834 POINT(599.034607 190.005829) 42835 POINT(870.664429 950.369141) 42836 POINT(648.914673 33.9379959) 42837 POINT(549.24646 581.558105) 42838 POINT(324.479065 187.959915) 42839 POINT(872.425781 166.978043) 42840 POINT(15.4093618 194.45639) 42841 POINT(212.180893 56.8699265) 42842 POINT(699.781555 920.192688) 42843 POINT(424.355316 400.978882) 42844 POINT(404.470306 532.171631) 42845 POINT(714.75946 672.7677) 42846 POINT(677.36615 376.164001) 42847 POINT(705.984741 162.569824) 42848 POINT(426.565399 172.275391) 42849 POINT(703.783264 214.923264) 42850 POINT(569.691833 47.718586) 42851 POINT(685.19989 964.336243) 42852 POINT(622.962769 982.539429) 42853 POINT(922.448242 434.638306) 42854 POINT(516.580383 805.050842) 42855 POINT(484.177948 954.599854) 42856 POINT(125.718361 136.459961) 42857 POINT(14.7952633 17.0063782) 42858 POINT(783.092529 735.538147) 42859 POINT(156.508118 595.828064) 42860 POINT(121.310783 761.723022) 42861 POINT(49.5259781 928.134399) 42862 POINT(165.44838 176.918777) 42863 POINT(403.235657 271.190643) 42864 POINT(546.297974 101.266731) 42865 POINT(383.208893 833.593262) 42866 POINT(873.309509 575.704102) 42867 POINT(791.703552 140.82753) 42868 POINT(737.317017 154.256271) 42869 POINT(847.159973 484.368408) 42870 POINT(3.80905795 732.379456) 42871 POINT(983.447083 789.117859) 42872 POINT(207.94281 335.576416) 42873 POINT(12.7886009 451.931976) 42874 POINT(126.037437 456.86084) 42875 POINT(326.030884 205.216995) 42876 POINT(331.366211 294.985413) 42877 POINT(466.958038 360.661255) 42878 POINT(554.261108 650.840881) 42879 POINT(918.599304 421.355621) 42880 POINT(470.548981 670.862793) 42881 POINT(611.917358 813.678345) 42882 POINT(603.972351 358.068542) 42883 POINT(922.045898 696.869751) 42884 POINT(16.4565201 218.523727) 42885 POINT(493.619415 537.288269) 42886 POINT(496.938293 379.274353) 42887 POINT(452.088074 480.659363) 42888 POINT(870.166382 449.359711) 42889 POINT(557.747681 879.543823) 42890 POINT(609.737549 635.364258) 42891 POINT(867.168091 510.747833) 42892 POINT(136.094009 644.607178) 42893 POINT(34.5316505 690.067871) 42894 POINT(444.843689 580.671204) 42895 POINT(642.982605 316.842377) 42896 POINT(181.274567 866.331665) 42897 POINT(861.439575 781.11377) 42898 POINT(44.1341324 617.466125) 42899 POINT(311.577515 80.2715454) 42900 POINT(759.582642 378.256927) 42901 POINT(667.094238 623.948547) 42902 POINT(561.774475 643.595642) 42903 POINT(135.325165 275.402527) 42904 POINT(599.969482 710.355164) 42905 POINT(360.265472 669.992249) 42906 POINT(366.747711 577.026367) 42907 POINT(284.737305 767.617554) 42908 POINT(714.240356 453.65567) 42909 POINT(294.550903 702.750854) 42910 POINT(354.868286 944.240295) 42911 POINT(293.94635 75.1555252) 42912 POINT(692.591797 755.516357) 42913 POINT(812.364685 924.430176) 42914 POINT(115.942085 393.840668) 42915 POINT(478.822784 315.601105) 42916 POINT(424.07251 400.643158) 42917 POINT(211.111023 60.2202759) 42918 POINT(223.802078 302.390167) 42919 POINT(820.078491 952.530396) 42920 POINT(4.32822847 309.431) 42921 POINT(819.927673 623.592041) 42922 POINT(195.271515 476.418762) 42923 POINT(537.338562 833.799072) 42924 POINT(74.4343796 262.737793) 42925 POINT(927.142273 627.547302) 42926 POINT(598.675476 322.701843) 42927 POINT(210.046951 170.184265) 42928 POINT(472.317963 670.994446) 42929 POINT(756.591919 449.618439) 42930 POINT(383.342682 758.323364) 42931 POINT(837.204834 41.5701904) 42932 POINT(872.213501 245.590408) 42933 POINT(555.215027 262.511261) 42934 POINT(748.609314 562.703491) 42935 POINT(670.321716 737.591675) 42936 POINT(37.7939453 501.765625) 42937 POINT(124.830505 427.640259) 42938 POINT(774.157593 835.683105) 42939 POINT(2.59444571 740.628174) 42940 POINT(421.063263 124.776306) 42941 POINT(807.780151 515.403748) 42942 POINT(593.090698 718.922668) 42943 POINT(352.2099 441.265961) 42944 POINT(101.79142 364.893707) 42945 POINT(19.1143131 163.900375) 42946 POINT(104.968575 562.28656) 42947 POINT(638.801392 739.824524) 42948 POINT(481.219208 791.83197) 42949 POINT(907.261536 816.888123) 42950 POINT(98.0958481 272.547729) 42951 POINT(19.4708214 532.267456) 42952 POINT(718.954651 935.491577) 42953 POINT(620.629883 492.140076) 42954 POINT(178.677094 668.662659) 42955 POINT(24.4222889 704.797058) 42956 POINT(633.428772 567.44281) 42957 POINT(959.344055 122.951508) 42958 POINT(89.0222397 286.028931) 42959 POINT(512.134338 668.65625) 42960 POINT(673.973022 636.364014) 42961 POINT(899.333191 688.405518) 42962 POINT(837.806763 221.554153) 42963 POINT(750.132385 655.140198) 42964 POINT(616.52655 160.687622) 42965 POINT(590.238647 302.104919) 42966 POINT(562.460938 292.026062) 42967 POINT(619.804443 960.544434) 42968 POINT(835.177429 702.995667) 42969 POINT(949.121582 664.430847) 42970 POINT(197.082764 990.190857) 42971 POINT(542.336792 81.7539368) 42972 POINT(358.18515 403.246948) 42973 POINT(898.706299 799.988586) 42974 POINT(828.840393 466.108337) 42975 POINT(227.72876 215.405121) 42976 POINT(429.829346 931.705627) 42977 POINT(631.904236 799.754578) 42978 POINT(91.6481552 35.7678795) 42979 POINT(759.978516 907.026611) 42980 POINT(968.374146 137.480637) 42981 POINT(23.6205406 366.538025) 42982 POINT(67.9733887 524.612976) 42983 POINT(848.915283 731.294006) 42984 POINT(135.632065 614.875) 42985 POINT(456.353027 322.724518) 42986 POINT(947.948853 90.5360031) 42987 POINT(302.784515 760.509033) 42988 POINT(215.057739 887.281616) 42989 POINT(877.851746 880.867554) 42990 POINT(129.537796 39.0689011) 42991 POINT(905.578064 235.639542) 42992 POINT(132.997116 417.153229) 42993 POINT(867.114746 400.548828) 42994 POINT(534.318176 542.910095) 42995 POINT(919.230957 292.735229) 42996 POINT(251.661942 190.611435) 42997 POINT(849.252808 559.027161) 42998 POINT(660.522705 108.59127) 42999 POINT(373.192474 817.258301) 43000 POINT(512.595947 196.549759) 43001 POINT(370.2659 348.548187) 43002 POINT(298.29245 95.0018387) 43003 POINT(152.509079 499.846588) 43004 POINT(615.843689 722.624634) 43005 POINT(519.528381 79.7895279) 43006 POINT(891.671204 581.65387) 43007 POINT(650.441833 949.252014) 43008 POINT(682.728577 24.3171349) 43009 POINT(170.79184 618.766052) 43010 POINT(247.688782 408.982819) 43011 POINT(412.772583 281.675232) 43012 POINT(769.09198 588.287292) 43013 POINT(701.768738 413.62265) 43014 POINT(664.951111 268.644867) 43015 POINT(768.335999 950.44165) 43016 POINT(671.040344 907.531982) 43017 POINT(247.870392 478.093109) 43018 POINT(582.476196 308.684784) 43019 POINT(913.948181 705.94342) 43020 POINT(696.693054 413.396698) 43021 POINT(347.429077 390.004974) 43022 POINT(534.084351 836.612732) 43023 POINT(301.784027 482.995728) 43024 POINT(465.118317 968.279846) 43025 POINT(43.7425003 536.062195) 43026 POINT(534.47168 352.842682) 43027 POINT(463.390259 701.23468) 43028 POINT(337.590607 112.908241) 43029 POINT(123.536545 288.239105) 43030 POINT(20.1671906 327.608246) 43031 POINT(596.901428 933.908752) 43032 POINT(786.497803 83.3505173) 43033 POINT(191.950333 532.469727) 43034 POINT(121.891991 846.387207) 43035 POINT(342.661285 151.393448) 43036 POINT(863.671875 465.475372) 43037 POINT(710.904785 986.920105) 43038 POINT(354.411865 492.028839) 43039 POINT(177.333542 777.985596) 43040 POINT(942.61145 238.349426) 43041 POINT(960.724243 44.9800491) 43042 POINT(775.792786 606.192688) 43043 POINT(767.718567 614.008667) 43044 POINT(78.0118561 873.109436) 43045 POINT(124.138481 457.215118) 43046 POINT(290.040741 378.371887) 43047 POINT(442.876465 269.989105) 43048 POINT(651.210815 100.132362) 43049 POINT(337.299927 26.869091) 43050 POINT(45.4261703 47.6870956) 43051 POINT(666.789185 135.638763) 43052 POINT(451.605835 934.865479) 43053 POINT(604.208801 635.109924) 43054 POINT(815.365051 870.802734) 43055 POINT(23.6763878 63.6058807) 43056 POINT(981.792847 561.468689) 43057 POINT(928.947327 335.063324) 43058 POINT(839.547913 408.729767) 43059 POINT(764.214417 886.433044) 43060 POINT(568.12207 713.459595) 43061 POINT(884.380615 957.779419) 43062 POINT(850.078674 115.944031) 43063 POINT(403.288788 604.887634) 43064 POINT(808.561707 261.84024) 43065 POINT(106.491547 658.630432) 43066 POINT(910.705811 177.163742) 43067 POINT(208.544189 586.806641) 43068 POINT(996.205811 823.725647) 43069 POINT(880.272827 99.2374878) 43070 POINT(256.79837 30.2923584) 43071 POINT(673.878967 397.823792) 43072 POINT(419.457642 338.281189) 43073 POINT(66.1084137 507.877747) 43074 POINT(539.539795 38.448616) 43075 POINT(233.163513 948.824768) 43076 POINT(858.865723 721.815613) 43077 POINT(104.834084 690.423157) 43078 POINT(749.882324 329.668732) 43079 POINT(536.844727 489.701447) 43080 POINT(175.783905 910.166321) 43081 POINT(735.174744 174.215103) 43082 POINT(626.126221 909.779968) 43083 POINT(587.731995 604.952942) 43084 POINT(619.474121 824.051392) 43085 POINT(359.013275 58.8791542) 43086 POINT(533.55719 772.108948) 43087 POINT(912.142639 773.909546) 43088 POINT(366.963135 51.8528175) 43089 POINT(697.955078 820.937866) 43090 POINT(645.396179 877.102173) 43091 POINT(728.717346 246.82869) 43092 POINT(853.912476 334.33371) 43093 POINT(498.907806 273.178497) 43094 POINT(751.385986 555.600098) 43095 POINT(769.599487 957.842834) 43096 POINT(654.954346 257.082428) 43097 POINT(566.906494 115.08667) 43098 POINT(173.660049 101.420334) 43099 POINT(7.30459547 946.711975) 43100 POINT(28.3924942 909.014038) 43101 POINT(330.1698 27.2564526) 43102 POINT(79.1072083 62.0695801) 43103 POINT(45.4893761 293.5625) 43104 POINT(752.861755 649.050232) 43105 POINT(475.381805 60.5402985) 43106 POINT(943.269409 10.817853) 43107 POINT(342.961945 884.269897) 43108 POINT(552.485718 538.136597) 43109 POINT(930.452026 149.803238) 43110 POINT(42.8768196 389.032806) 43111 POINT(757.65863 418.868896) 43112 POINT(232.267029 440.046112) 43113 POINT(617.513184 942.497314) 43114 POINT(632.447083 344.585815) 43115 POINT(120.944595 951.352112) 43116 POINT(626.890869 271.956024) 43117 POINT(950.674561 773.873962) 43118 POINT(894.94458 360.305756) 43119 POINT(682.479004 906.443787) 43120 POINT(603.815491 394.575165) 43121 POINT(11.0571985 543.503418) 43122 POINT(847.317078 865.870361) 43123 POINT(302.017822 957.413147) 43124 POINT(655.472046 671.637024) 43125 POINT(695.893433 451.872223) 43126 POINT(128.795547 957.188904) 43127 POINT(206.910782 368.716919) 43128 POINT(65.5882339 299.863434) 43129 POINT(908.982727 41.1804276) 43130 POINT(3.16566896 809.244507) 43131 POINT(982.680603 408.238129) 43132 POINT(241.097687 113.042717) 43133 POINT(36.5527878 751.063477) 43134 POINT(965.787903 361.52829) 43135 POINT(218.957291 216.114777) 43136 POINT(563.79126 697.65509) 43137 POINT(535.582397 247.812943) 43138 POINT(61.9640999 379.610565) 43139 POINT(894.170959 80.6279068) 43140 POINT(34.812233 322.517365) 43141 POINT(450.901337 114.774345) 43142 POINT(395.319092 52.0607376) 43143 POINT(149.791367 416.346222) 43144 POINT(60.2924004 381.207581) 43145 POINT(72.889389 101.949509) 43146 POINT(333.185455 868.838989) 43147 POINT(578.534058 865.699707) 43148 POINT(957.871521 773.570129) 43149 POINT(749.354858 24.4344292) 43150 POINT(600.55072 645.448486) 43151 POINT(530.835693 852.382324) 43152 POINT(151.537933 411.390259) 43153 POINT(73.1808167 572.173889) 43154 POINT(794.945679 206.550812) 43155 POINT(230.035095 603.460022) 43156 POINT(566.173279 823.365784) 43157 POINT(281.585327 747.616333) 43158 POINT(851.723816 423.4104) 43159 POINT(679.077942 126.786354) 43160 POINT(433.37973 655.793945) 43161 POINT(723.348572 383.203278) 43162 POINT(642.500977 11.449172) 43163 POINT(440.197052 881.305725) 43164 POINT(576.613647 717.929077) 43165 POINT(677.119141 207.230713) 43166 POINT(199.095932 737.355469) 43167 POINT(373.902008 910.049805) 43168 POINT(256.344238 104.756622) 43169 POINT(636.919067 224.469055) 43170 POINT(21.1320343 459.606293) 43171 POINT(334.745575 19.1094398) 43172 POINT(824.901733 844.968384) 43173 POINT(420.223907 757.032349) 43174 POINT(547.530579 731.925049) 43175 POINT(638.716553 180.591431) 43176 POINT(765.874817 468.211639) 43177 POINT(99.5035477 351.337097) 43178 POINT(150.446976 536.112366) 43179 POINT(840.741699 713.545654) 43180 POINT(174.362167 863.225525) 43181 POINT(809.86676 898.593445) 43182 POINT(944.77124 78.8499374) 43183 POINT(990.662415 954.074646) 43184 POINT(372.078125 807.265564) 43185 POINT(943.459167 739.12323) 43186 POINT(297.133942 486.492737) 43187 POINT(72.18396 64.314209) 43188 POINT(145.258453 587.257629) 43189 POINT(105.524452 224.900314) 43190 POINT(165.43045 662.528809) 43191 POINT(771.679382 349.700623) 43192 POINT(43.5065842 204.41069) 43193 POINT(477.543457 200.060501) 43194 POINT(303.194611 534.298889) 43195 POINT(72.3606415 954.916321) 43196 POINT(284.167084 756.557251) 43197 POINT(909.626831 125.730232) 43198 POINT(922.725525 408.733887) 43199 POINT(424.214783 91.1320648) 43200 POINT(69.5073013 726.279358) 43201 POINT(147.342026 123.374191) 43202 POINT(626.689819 181.280487) 43203 POINT(401.234253 10.64083) 43204 POINT(542.934387 67.9172516) 43205 POINT(87.4146881 39.9639435) 43206 POINT(289.992218 697.850647) 43207 POINT(824.853699 789.705139) 43208 POINT(185.669479 182.846069) 43209 POINT(852.252075 748.621155) 43210 POINT(102.028992 656.544067) 43211 POINT(306.13855 606.415466) 43212 POINT(186.746994 99.946579) 43213 POINT(774.993652 289.990662) 43214 POINT(164.007111 54.056942) 43215 POINT(39.1533203 607.584961) 43216 POINT(206.901031 436.983246) 43217 POINT(94.8019638 132.44957) 43218 POINT(876.833801 331.104584) 43219 POINT(464.07019 647.180786) 43220 POINT(0.847633243 8.64307117) 43221 POINT(276.36499 783.361511) 43222 POINT(852.150879 51.8488464) 43223 POINT(110.961967 148.521194) 43224 POINT(562.665894 268.27771) 43225 POINT(388.088409 218.935059) 43226 POINT(232.408218 164.236679) 43227 POINT(533.855408 93.4414825) 43228 POINT(815.426758 122.929672) 43229 POINT(900.214661 116.847916) 43230 POINT(115.442551 631.318604) 43231 POINT(749.504211 673.860168) 43232 POINT(378.913239 45.0133858) 43233 POINT(597.112915 673.650146) 43234 POINT(244.845383 498.031219) 43235 POINT(6.47391701 454.653198) 43236 POINT(618.221985 819.060303) 43237 POINT(37.2422218 868.060669) 43238 POINT(249.477219 263.59137) 43239 POINT(27.5133724 991.469482) 43240 POINT(1.22984898 708.226807) 43241 POINT(139.79808 391.622681) 43242 POINT(493.803284 766.563599) 43243 POINT(91.8204727 723.099121) 43244 POINT(774.356384 302.801727) 43245 POINT(28.809967 109.786728) 43246 POINT(35.2972565 657.826965) 43247 POINT(453.692719 615.23114) 43248 POINT(103.746796 821.741577) 43249 POINT(223.465485 839.339417) 43250 POINT(275.979889 936.080505) 43251 POINT(630.185791 470.914124) 43252 POINT(122.946381 178.29715) 43253 POINT(627.694763 432.19928) 43254 POINT(642.229187 951.192627) 43255 POINT(32.786377 42.7606049) 43256 POINT(778.331909 692.088257) 43257 POINT(542.556213 640.951782) 43258 POINT(30.3194542 742.610535) 43259 POINT(266.737946 82.9118576) 43260 POINT(970.011414 932.518677) 43261 POINT(101.722763 8.09758949) 43262 POINT(814.717102 573.213501) 43263 POINT(176.541489 249.006271) 43264 POINT(248.599014 812.215637) 43265 POINT(113.375374 68.8391418) 43266 POINT(931.980713 43.4055023) 43267 POINT(377.285492 347.871521) 43268 POINT(247.215851 714.214233) 43269 POINT(281.068756 486.333008) 43270 POINT(925.183838 225.906586) 43271 POINT(578.842712 743.387146) 43272 POINT(103.265388 132.899628) 43273 POINT(171.641571 348.68631) 43274 POINT(862.098938 848.618958) 43275 POINT(483.603607 880.940186) 43276 POINT(355.974487 36.255085) 43277 POINT(100.001442 748.577209) 43278 POINT(724.951294 671.104553) 43279 POINT(418.30011 788.124146) 43280 POINT(193.38855 915.756531) 43281 POINT(308.623138 939.231567) 43282 POINT(210.372314 849.627197) 43283 POINT(146.604401 99.8070679) 43284 POINT(466.453613 280.290924) 43285 POINT(433.855591 814.588806) 43286 POINT(875.251038 266.375977) 43287 POINT(501.572418 625.42157) 43288 POINT(588.013794 171.766113) 43289 POINT(271.641754 196.841339) 43290 POINT(217.504608 510.399811) 43291 POINT(575.632812 727.306274) 43292 POINT(290.997772 132.618088) 43293 POINT(282.012634 431.135071) 43294 POINT(590.356567 440.94809) 43295 POINT(210.705811 811.154724) 43296 POINT(232.763412 939.211487) 43297 POINT(104.725121 85.0676041) 43298 POINT(814.53479 38.3261032) 43299 POINT(442.169128 43.103714) 43300 POINT(601.514465 330.167389) 43301 POINT(597.670654 129.724533) 43302 POINT(974.868286 553.037781) 43303 POINT(367.770477 2.7205894) 43304 POINT(205.899429 904.941833) 43305 POINT(555.189819 839.344666) 43306 POINT(166.08519 800.902771) 43307 POINT(636.219666 357.124939) 43308 POINT(10.3472795 345.517975) 43309 POINT(315.185516 788.306641) 43310 POINT(887.182556 819.998047) 43311 POINT(380.075592 798.706787) 43312 POINT(716.390259 122.863472) 43313 POINT(921.935608 746.981262) 43314 POINT(374.559509 4.6900444) 43315 POINT(953.676453 427.379883) 43316 POINT(784.169373 889.84314) 43317 POINT(375.763458 982.095398) 43318 POINT(411.176392 262.68512) 43319 POINT(279.244293 478.035919) 43320 POINT(238.513443 833.567322) 43321 POINT(771.232239 452.604309) 43322 POINT(52.3215256 702.942139) 43323 POINT(952.927673 794.840759) 43324 POINT(710.427917 362.694641) 43325 POINT(802.287659 658.672302) 43326 POINT(268.138367 855.453674) 43327 POINT(517.429565 736.241516) 43328 POINT(427.524963 638.996643) 43329 POINT(195.780411 449.210541) 43330 POINT(718.88623 448.317932) 43331 POINT(468.999451 258.029633) 43332 POINT(285.871399 627.531677) 43333 POINT(124.058731 922.525818) 43334 POINT(750.977356 323.18512) 43335 POINT(633.952637 766.530945) 43336 POINT(710.926941 536.063477) 43337 POINT(542.827759 664.982422) 43338 POINT(230.154205 157.078995) 43339 POINT(523.51123 959.971436) 43340 POINT(746.690186 741.900513) 43341 POINT(702.231628 964.1828) 43342 POINT(12.7406359 276.756073) 43343 POINT(155.645233 283.292786) 43344 POINT(699.864441 563.118591) 43345 POINT(787.121338 306.024231) 43346 POINT(696.721069 1.18010724) 43347 POINT(618.724731 810.169312) 43348 POINT(709.802673 521.17157) 43349 POINT(756.729004 419.08844) 43350 POINT(791.472229 628.35321) 43351 POINT(344.175964 335.703888) 43352 POINT(815.183411 63.181591) 43353 POINT(974.477783 365.175293) 43354 POINT(598.292358 394.659546) 43355 POINT(653.968811 214.257614) 43356 POINT(444.817535 64.7396622) 43357 POINT(145.413361 691.391174) 43358 POINT(903.442627 478.040283) 43359 POINT(653.643677 9.09308147) 43360 POINT(772.679749 817.838196) 43361 POINT(411.752289 457.05542) 43362 POINT(51.2362061 390.734711) 43363 POINT(952.721069 333.990173) 43364 POINT(46.2030678 623.593811) 43365 POINT(196.298416 27.7886181) 43366 POINT(86.7814484 912.983826) 43367 POINT(11.717577 361.717163) 43368 POINT(822.072388 555.709412) 43369 POINT(528.988037 889.500061) 43370 POINT(436.303864 56.0095863) 43371 POINT(138.62706 350.218536) 43372 POINT(25.1958961 438.163147) 43373 POINT(143.581436 376.590515) 43374 POINT(27.5444698 410.744141) 43375 POINT(287.606262 194.60611) 43376 POINT(884.230164 589.400391) 43377 POINT(589.52655 131.54071) 43378 POINT(843.550476 638.200378) 43379 POINT(848.739319 451.517639) 43380 POINT(90.9794006 425.34494) 43381 POINT(968.277649 317.155609) 43382 POINT(650.245483 788.036926) 43383 POINT(560.136475 502.132965) 43384 POINT(981.184509 584.834045) 43385 POINT(673.861328 88.0869217) 43386 POINT(41.4864807 593.7854) 43387 POINT(522.256348 521.114502) 43388 POINT(140.663452 843.620667) 43389 POINT(694.237732 594.858032) 43390 POINT(4.88512087 886.372986) 43391 POINT(49.2230721 700.965515) 43392 POINT(603.459106 716.876526) 43393 POINT(613.014954 841.466248) 43394 POINT(927.491333 791.985413) 43395 POINT(753.043579 744.776367) 43396 POINT(727.596619 315.167145) 43397 POINT(440.330231 46.7398567) 43398 POINT(332.507324 435.98111) 43399 POINT(824.01123 985.055054) 43400 POINT(909.247559 715.1604) 43401 POINT(797.221619 769.978333) 43402 POINT(666.52063 461.480896) 43403 POINT(944.217407 612.314941) 43404 POINT(527.542358 833.868286) 43405 POINT(779.569336 953.005798) 43406 POINT(141.314972 789.421082) 43407 POINT(650.972473 404.319733) 43408 POINT(899.970581 554.011475) 43409 POINT(35.6958618 203.619522) 43410 POINT(975.138062 696.272583) 43411 POINT(253.073303 35.3619118) 43412 POINT(572.249878 638.134094) 43413 POINT(205.970047 99.5166321) 43414 POINT(375.375854 466.292938) 43415 POINT(595.235168 514.677002) 43416 POINT(966.743835 790.386536) 43417 POINT(893.269287 27.1339531) 43418 POINT(257.903137 587.09082) 43419 POINT(64.6394577 554.073425) 43420 POINT(269.951538 77.4327774) 43421 POINT(759.91156 86.4372253) 43422 POINT(7.95016479 700.448608) 43423 POINT(238.431763 697.083435) 43424 POINT(452.287537 803.726807) 43425 POINT(179.675964 890.547729) 43426 POINT(553.146301 294.760956) 43427 POINT(482.137177 855.418457) 43428 POINT(482.317719 851.443054) 43429 POINT(112.790054 668.19574) 43430 POINT(641.470825 431.112335) 43431 POINT(626.342712 493.236389) 43432 POINT(122.809204 441.634796) 43433 POINT(517.267944 937.342102) 43434 POINT(495.162323 631.930359) 43435 POINT(572.629333 75.7082596) 43436 POINT(177.400436 250.731766) 43437 POINT(661.742493 159.910049) 43438 POINT(946.207947 429.315765) 43439 POINT(309.619446 555.594849) 43440 POINT(694.390991 825.279968) 43441 POINT(162.94249 210.42218) 43442 POINT(749.853638 969.563477) 43443 POINT(356.137817 610.022766) 43444 POINT(428.096924 277.86377) 43445 POINT(435.222351 195.437653) 43446 POINT(19.6485939 501.054535) 43447 POINT(90.8670959 59.3753891) 43448 POINT(808.412537 318.439453) 43449 POINT(510.061798 146.037323) 43450 POINT(630.85437 534.611145) 43451 POINT(776.511902 401.189911) 43452 POINT(775.664551 777.850464) 43453 POINT(860.208618 372.205536) 43454 POINT(998.62323 958.572205) 43455 POINT(341.368286 674.179382) 43456 POINT(100.540588 914.080444) 43457 POINT(946.146667 815.809204) 43458 POINT(853.166809 415.260773) 43459 POINT(142.327896 930.974731) 43460 POINT(227.818237 956.842651) 43461 POINT(691.829407 567.97583) 43462 POINT(506.209717 801.177856) 43463 POINT(0.729338467 442.907806) 43464 POINT(257.817139 542.390381) 43465 POINT(992.125244 827.024353) 43466 POINT(631.340942 840.172974) 43467 POINT(776.10199 386.134155) 43468 POINT(410.941681 917.974426) 43469 POINT(656.181458 964.703918) 43470 POINT(765.446716 297.003571) 43471 POINT(622.730042 165.619873) 43472 POINT(208.376526 54.1611214) 43473 POINT(898.918457 41.3469391) 43474 POINT(579.229492 548.111572) 43475 POINT(860.097473 721.993591) 43476 POINT(645.943542 93.2642136) 43477 POINT(607.126526 64.6451569) 43478 POINT(461.887268 907.108215) 43479 POINT(80.6583023 135.991943) 43480 POINT(838.323364 883.433228) 43481 POINT(127.142853 522.108215) 43482 POINT(118.347916 314.37262) 43483 POINT(717.007202 596.201965) 43484 POINT(967.289917 700.478882) 43485 POINT(247.8461 233.866089) 43486 POINT(687.023865 743.333679) 43487 POINT(795.411011 328.032532) 43488 POINT(880.30249 643.306885) 43489 POINT(385.712463 370.328796) 43490 POINT(351.872314 950.419128) 43491 POINT(13.7927475 395.320984) 43492 POINT(354.744232 603.868103) 43493 POINT(717.93573 558.316956) 43494 POINT(544.616638 1.31949592) 43495 POINT(599.642151 380.710114) 43496 POINT(868.29187 158.825562) 43497 POINT(155.120987 359.630432) 43498 POINT(611.305542 343.12793) 43499 POINT(626.962036 826.905334) 43500 POINT(697.346313 207.673828) 43501 POINT(596.820251 47.6215096) 43502 POINT(251.955307 60.0830612) 43503 POINT(601.239441 978.149597) 43504 POINT(303.149994 690.838745) 43505 POINT(871.18512 530.19281) 43506 POINT(132.843033 350.053833) 43507 POINT(157.565674 799.729736) 43508 POINT(259.160828 261.322601) 43509 POINT(124.27066 471.73999) 43510 POINT(818.08667 189.570297) 43511 POINT(659.411133 473.054138) 43512 POINT(423.448914 354.749664) 43513 POINT(195.030762 151.912033) 43514 POINT(570.469727 617.118958) 43515 POINT(334.193817 564.819275) 43516 POINT(666.327515 705.20575) 43517 POINT(688.804932 365.662445) 43518 POINT(631.038513 57.5842018) 43519 POINT(336.663483 851.007996) 43520 POINT(226.124054 988.05481) 43521 POINT(45.1031265 716.917419) 43522 POINT(302.818909 635.13208) 43523 POINT(792.255249 339.93927) 43524 POINT(684.943726 935.954468) 43525 POINT(884.752869 987.287598) 43526 POINT(536.071716 477.49704) 43527 POINT(439.951172 383.3172) 43528 POINT(631.472351 970.581116) 43529 POINT(316.981964 871.60199) 43530 POINT(740.824829 601.545044) 43531 POINT(967.818848 890.200562) 43532 POINT(309.310883 120.115547) 43533 POINT(688.766663 263.644379) 43534 POINT(236.990829 88.1523514) 43535 POINT(514.280823 566.044189) 43536 POINT(937.029724 751.326965) 43537 POINT(466.783234 448.323639) 43538 POINT(93.199707 903.851868) 43539 POINT(94.2997971 787.437256) 43540 POINT(930.075623 435.134674) 43541 POINT(556.559265 10.6115656) 43542 POINT(102.545494 907.36322) 43543 POINT(902.049438 192.892029) 43544 POINT(954.859131 85.8138885) 43545 POINT(383.928467 6.93271637) 43546 POINT(296.76712 291.037903) 43547 POINT(540.270813 321.012085) 43548 POINT(601.797546 366.552551) 43549 POINT(490.650116 961.292664) 43550 POINT(709.953369 950.413086) 43551 POINT(231.399521 659.595642) 43552 POINT(476.780548 237.854156) 43553 POINT(229.063065 546.282959) 43554 POINT(68.6821594 49.4837303) 43555 POINT(976.680603 282.707062) 43556 POINT(679.474487 440.321045) 43557 POINT(379.901062 388.20163) 43558 POINT(707.5755 354.964905) 43559 POINT(446.870575 847.475098) 43560 POINT(962.073975 649.641724) 43561 POINT(162.904755 295.881104) 43562 POINT(287.570251 749.731506) 43563 POINT(111.759819 98.3539047) 43564 POINT(343.556183 19.1449642) 43565 POINT(161.622849 354.415619) 43566 POINT(828.77655 703.785828) 43567 POINT(745.630188 183.808151) 43568 POINT(592.187378 834.071716) 43569 POINT(141.803436 747.832214) 43570 POINT(160.615768 380.51886) 43571 POINT(981.896729 28.8621941) 43572 POINT(782.978455 41.7562904) 43573 POINT(607.03363 878.851746) 43574 POINT(138.999359 486.692474) 43575 POINT(32.5642509 726.677429) 43576 POINT(86.9792938 493.195587) 43577 POINT(205.793793 339.236481) 43578 POINT(883.631348 936.487671) 43579 POINT(36.7628784 413.300354) 43580 POINT(55.7483406 834.026367) 43581 POINT(780.85083 550.823425) 43582 POINT(848.086914 893.123962) 43583 POINT(757.508911 371.949524) 43584 POINT(927.029358 116.717262) 43585 POINT(934.921692 445.194122) 43586 POINT(751.139709 775.972839) 43587 POINT(506.971069 176.686279) 43588 POINT(896.611694 370.82312) 43589 POINT(475.797668 379.03244) 43590 POINT(269.881775 376.748688) 43591 POINT(247.904251 530.041138) 43592 POINT(876.546326 564.437561) 43593 POINT(999.626038 592.57428) 43594 POINT(923.498718 315.27829) 43595 POINT(792.545715 75.1435394) 43596 POINT(991.334961 617.518738) 43597 POINT(172.805298 910.15387) 43598 POINT(761.134705 683.510742) 43599 POINT(900.152161 870.129578) 43600 POINT(951.405579 386.552277) 43601 POINT(980.956543 54.7043228) 43602 POINT(308.101135 875.845886) 43603 POINT(860.487915 401.079712) 43604 POINT(487.131409 830.054932) 43605 POINT(327.692047 902.169128) 43606 POINT(721.753418 284.522888) 43607 POINT(842.958557 979.462891) 43608 POINT(226.847626 885.710754) 43609 POINT(886.40979 237.136108) 43610 POINT(261.680573 750.723633) 43611 POINT(889.715698 121.042862) 43612 POINT(758.764099 942.471375) 43613 POINT(35.1009789 87.6039047) 43614 POINT(988.423218 405.2117) 43615 POINT(935.942322 35.4265518) 43616 POINT(129.368027 174.740646) 43617 POINT(37.1638145 514.644653) 43618 POINT(70.7544098 806.739441) 43619 POINT(651.661255 668.912415) 43620 POINT(699.85614 420.803375) 43621 POINT(370.477142 811.827209) 43622 POINT(203.63028 92.1215897) 43623 POINT(216.790878 838.022888) 43624 POINT(107.330788 733.945801) 43625 POINT(252.492859 429.616455) 43626 POINT(417.23526 188.786865) 43627 POINT(364.80603 867.081055) 43628 POINT(58.9398499 212.256332) 43629 POINT(960.865356 581.567505) 43630 POINT(992.119141 8.78352833) 43631 POINT(160.24498 800.419189) 43632 POINT(824.83606 221.882797) 43633 POINT(507.143799 411.982727) 43634 POINT(286.242126 942.628662) 43635 POINT(11.4349442 698.282959) 43636 POINT(589.775696 668.561462) 43637 POINT(585.310242 808.802856) 43638 POINT(26.8151798 902.055237) 43639 POINT(362.193085 745.220825) 43640 POINT(273.373291 543.523132) 43641 POINT(487.455139 430.854919) 43642 POINT(23.142519 622.624939) 43643 POINT(354.891327 900.726196) 43644 POINT(35.472744 572.420227) 43645 POINT(855.639404 285.180084) 43646 POINT(316.244263 930.338684) 43647 POINT(512.156921 604.125854) 43648 POINT(445.791779 429.706543) 43649 POINT(721.999695 238.017471) 43650 POINT(496.856842 200.791519) 43651 POINT(145.613495 609.183655) 43652 POINT(215.941635 645.943542) 43653 POINT(278.411499 172.120651) 43654 POINT(295.479614 295.081207) 43655 POINT(767.449402 368.61731) 43656 POINT(467.118713 31.7921715) 43657 POINT(212.532944 113.435318) 43658 POINT(576.456055 843.595581) 43659 POINT(254.234238 514.700317) 43660 POINT(738.211121 169.991699) 43661 POINT(248.809479 541.768616) 43662 POINT(552.648315 866.966675) 43663 POINT(892.286011 889.349182) 43664 POINT(326.757111 285.41394) 43665 POINT(741.027283 272.931335) 43666 POINT(378.084351 372.893921) 43667 POINT(720.024658 265.572235) 43668 POINT(99.1396942 593.321289) 43669 POINT(777.261597 753.93689) 43670 POINT(273.027557 748.203003) 43671 POINT(775.131348 371.882446) 43672 POINT(606.594177 47.2459373) 43673 POINT(278.574219 348.190796) 43674 POINT(989.237427 477.420837) 43675 POINT(952.963501 82.2538452) 43676 POINT(200.053802 260.445923) 43677 POINT(999.570312 204.208588) 43678 POINT(732.763062 962.311523) 43679 POINT(187.561569 666.427612) 43680 POINT(849.551575 258.684448) 43681 POINT(171.935684 599.248474) 43682 POINT(627.428284 991.231323) 43683 POINT(577.713013 808.84967) 43684 POINT(542.843018 637.115906) 43685 POINT(771.330566 228.349396) 43686 POINT(424.240051 712.825867) 43687 POINT(897.924255 699.249756) 43688 POINT(463.109009 640.352661) 43689 POINT(33.5250664 769.615112) 43690 POINT(440.271149 805.506348) 43691 POINT(657.783081 873.84668) 43692 POINT(627.044373 662.324707) 43693 POINT(897.419495 198.18692) 43694 POINT(645.138 902.305176) 43695 POINT(503.076843 643.392517) 43696 POINT(302.331787 671.334412) 43697 POINT(510.599976 744.199219) 43698 POINT(404.015533 230.126144) 43699 POINT(288.164612 882.744019) 43700 POINT(317.446716 105.746513) 43701 POINT(797.337585 94.1138687) 43702 POINT(633.201355 853.068604) 43703 POINT(591.484985 676.377014) 43704 POINT(326.934631 857.043213) 43705 POINT(359.447662 420.180389) 43706 POINT(27.5608654 871.41748) 43707 POINT(794.71283 815.235291) 43708 POINT(201.746124 59.5131721) 43709 POINT(657.183228 89.3709717) 43710 POINT(578.75647 421.057587) 43711 POINT(100.962013 422.532288) 43712 POINT(976.911865 539.63269) 43713 POINT(500.344269 450.990845) 43714 POINT(818.983521 342.482056) 43715 POINT(28.5633373 49.6009521) 43716 POINT(207.783936 943.234985) 43717 POINT(369.042389 931.265808) 43718 POINT(97.0062256 944.231384) 43719 POINT(984.33075 427.613098) 43720 POINT(161.2659 754.854858) 43721 POINT(979.069275 773.560852) 43722 POINT(721.607178 372.5112) 43723 POINT(493.860016 686.966064) 43724 POINT(999.898682 651.172729) 43725 POINT(808.573059 154.484161) 43726 POINT(992.134094 716.902832) 43727 POINT(546.288818 263.361938) 43728 POINT(4.36534166 889.272522) 43729 POINT(10.7564955 78.9846191) 43730 POINT(976.648193 131.493973) 43731 POINT(297.078156 898.080078) 43732 POINT(923.922791 720.466858) 43733 POINT(251.567795 411.649445) 43734 POINT(395.248352 931.420227) 43735 POINT(64.7592392 109.670845) 43736 POINT(744.463379 141.731506) 43737 POINT(531.862549 636.763) 43738 POINT(119.466362 836.724426) 43739 POINT(156.222366 265.275024) 43740 POINT(520.355713 649.330017) 43741 POINT(980.273926 456.287567) 43742 POINT(608.197693 278.601562) 43743 POINT(560.006409 911.999634) 43744 POINT(428.908234 42.9998894) 43745 POINT(936.034485 132.778992) 43746 POINT(66.4535904 957.514526) 43747 POINT(958.181641 342.257843) 43748 POINT(875.24469 744.108826) 43749 POINT(380.253387 563.352234) 43750 POINT(235.290146 648.327515) 43751 POINT(824.800232 461.706726) 43752 POINT(300.576965 537.479736) 43753 POINT(919.657288 431.162201) 43754 POINT(499.590393 584.518738) 43755 POINT(602.522339 904.393738) 43756 POINT(328.304016 124.122322) 43757 POINT(78.5637436 422.467896) 43758 POINT(434.945618 621.699402) 43759 POINT(78.9082718 996.948975) 43760 POINT(20.0632668 380.897736) 43761 POINT(612.863037 420.199127) 43762 POINT(5.70256329 780.076904) 43763 POINT(120.000046 612.136475) 43764 POINT(307.804352 763.181763) 43765 POINT(924.040588 789.046143) 43766 POINT(373.313904 696.168396) 43767 POINT(861.198059 171.806213) 43768 POINT(118.151138 857.881531) 43769 POINT(421.782837 352.444855) 43770 POINT(677.448425 975.98114) 43771 POINT(304.072571 60.2615852) 43772 POINT(311.763611 696.69928) 43773 POINT(860.463989 428.431671) 43774 POINT(211.889481 435.042053) 43775 POINT(22.6305695 491.28772) 43776 POINT(323.105469 73.3267822) 43777 POINT(257.822327 339.192657) 43778 POINT(133.06868 735.073608) 43779 POINT(343.694061 435.559448) 43780 POINT(304.970062 773.290894) 43781 POINT(993.388916 138.234818) 43782 POINT(211.153854 982.774414) 43783 POINT(933.425659 559.875732) 43784 POINT(657.31073 321.462982) 43785 POINT(79.7426758 909.457764) 43786 POINT(161.929291 443.080933) 43787 POINT(195.672592 255.64386) 43788 POINT(51.3693161 579.78064) 43789 POINT(401.4216 884.005676) 43790 POINT(782.277161 637.446472) 43791 POINT(267.681732 741.262939) 43792 POINT(447.789032 286.522308) 43793 POINT(924.32782 793.631653) 43794 POINT(452.889465 747.091736) 43795 POINT(684.871521 911.532715) 43796 POINT(151.346313 418.511566) 43797 POINT(492.723297 333.407349) 43798 POINT(568.909912 421.842285) 43799 POINT(978.729614 76.9406128) 43800 POINT(645.128723 78.9194565) 43801 POINT(851.419434 341.962921) 43802 POINT(112.525299 807.083496) 43803 POINT(570.536865 986.656738) 43804 POINT(803.433533 465.870392) 43805 POINT(957.521912 324.04361) 43806 POINT(891.09668 844.528076) 43807 POINT(328.503143 561.292053) 43808 POINT(95.3552551 360.847504) 43809 POINT(479.100891 238.02095) 43810 POINT(930.240845 676.904663) 43811 POINT(67.0308533 574.95282) 43812 POINT(559.976929 490.931519) 43813 POINT(617.413208 50.0978546) 43814 POINT(133.342285 292.339569) 43815 POINT(84.2066574 120.849709) 43816 POINT(659.274658 65.196785) 43817 POINT(34.8114281 417.299042) 43818 POINT(597.297424 381.119354) 43819 POINT(557.253967 70.6980286) 43820 POINT(596.290222 763.127136) 43821 POINT(722.233276 2.93908286) 43822 POINT(908.862 745.68457) 43823 POINT(245.56134 895.3703) 43824 POINT(323.82193 461.702728) 43825 POINT(98.1714096 351.112549) 43826 POINT(336.792938 504.119324) 43827 POINT(487.035828 152.740662) 43828 POINT(262.829712 27.849308) 43829 POINT(495.282379 950.851685) 43830 POINT(82.0475769 758.066467) 43831 POINT(915.911377 668.385742) 43832 POINT(699.944702 574.228821) 43833 POINT(461.30072 105.949127) 43834 POINT(651.621704 357.910522) 43835 POINT(678.776978 935.784424) 43836 POINT(939.919983 678.890625) 43837 POINT(977.682678 493.044739) 43838 POINT(981.17926 891.235657) 43839 POINT(180.471115 544.884644) 43840 POINT(551.553894 203.091278) 43841 POINT(782.410828 838.426453) 43842 POINT(147.446899 44.9804611) 43843 POINT(552.621887 511.381989) 43844 POINT(464.562347 506.629242) 43845 POINT(472.650116 973.097656) 43846 POINT(383.416046 47.3738899) 43847 POINT(104.994942 223.782181) 43848 POINT(250.072754 56.3312721) 43849 POINT(958.451965 636.014404) 43850 POINT(637.716431 982.6521) 43851 POINT(993.445374 351.294739) 43852 POINT(648.856812 650.864868) 43853 POINT(140.462433 786.997742) 43854 POINT(104.094902 389.719391) 43855 POINT(218.150208 462.833374) 43856 POINT(299.114838 743.841309) 43857 POINT(392.597076 863.677612) 43858 POINT(987.753235 705.330811) 43859 POINT(851.933228 295.873779) 43860 POINT(659.569519 637.212158) 43861 POINT(544.90387 370.926727) 43862 POINT(272.370178 793.037537) 43863 POINT(90.8755569 583.646484) 43864 POINT(323.823029 638.25177) 43865 POINT(582.342896 426.594421) 43866 POINT(404.95166 11.0508986) 43867 POINT(318.037994 100.119797) 43868 POINT(278.375732 625.95697) 43869 POINT(201.968582 403.951508) 43870 POINT(625.224854 15.3443823) 43871 POINT(876.005005 114.452858) 43872 POINT(169.400299 856.484009) 43873 POINT(704.010498 609.109192) 43874 POINT(132.111191 768.727417) 43875 POINT(655.091797 760.077026) 43876 POINT(312.311218 252.28273) 43877 POINT(431.603058 10.7766724) 43878 POINT(401.884338 32.2886047) 43879 POINT(921.439636 918.289307) 43880 POINT(3.36356878 865.876099) 43881 POINT(119.425674 400.073364) 43882 POINT(750.938599 952.52002) 43883 POINT(32.8571014 92.2181931) 43884 POINT(673.96167 686.772522) 43885 POINT(63.2700348 999.713562) 43886 POINT(670.664734 225.598557) 43887 POINT(820.147644 404.249542) 43888 POINT(566.052063 468.787872) 43889 POINT(980.560974 464.732147) 43890 POINT(552.749512 719.714539) 43891 POINT(447.796661 288.476013) 43892 POINT(900.922485 795.093018) 43893 POINT(796.113831 421.023285) 43894 POINT(170.285934 367.000458) 43895 POINT(510.274536 669.460205) 43896 POINT(963.921265 169.590805) 43897 POINT(357.920044 173.312805) 43898 POINT(683.401428 598.529419) 43899 POINT(968.843994 419.578461) 43900 POINT(134.059814 525.767334) 43901 POINT(264.509369 980.789612) 43902 POINT(997.681763 589.014038) 43903 POINT(288.644226 669.438904) 43904 POINT(650.153687 177.949692) 43905 POINT(568.446411 346.470856) 43906 POINT(19.4884052 102.252335) 43907 POINT(796.955505 109.343178) 43908 POINT(824.104126 904.942078) 43909 POINT(109.775574 95.4775848) 43910 POINT(724.337585 784.031677) 43911 POINT(850.932556 764.489258) 43912 POINT(487.11795 552.302002) 43913 POINT(628.737061 627.750427) 43914 POINT(982.829712 336.113464) 43915 POINT(876.725769 852.587524) 43916 POINT(686.107239 267.055389) 43917 POINT(608.834656 622.334473) 43918 POINT(773.187439 123.088104) 43919 POINT(721.794434 239.790329) 43920 POINT(35.2071838 237.441162) 43921 POINT(9.34253311 643.215149) 43922 POINT(750.282715 413.302368) 43923 POINT(48.346817 699.311035) 43924 POINT(671.294922 600.312134) 43925 POINT(660.598328 550.789429) 43926 POINT(138.1008 635.725342) 43927 POINT(688.225952 646.83551) 43928 POINT(462.587982 0.110310122) 43929 POINT(115.934708 358.405365) 43930 POINT(565.91217 746.533752) 43931 POINT(978.193176 277.805389) 43932 POINT(975.845398 135.872589) 43933 POINT(180.862518 190.008011) 43934 POINT(777.991821 42.3609543) 43935 POINT(99.4423599 63.8784599) 43936 POINT(720.391357 516.512207) 43937 POINT(173.123611 292.778656) 43938 POINT(112.546402 531.568848) 43939 POINT(356.313416 379.349701) 43940 POINT(356.125122 559.660583) 43941 POINT(206.491486 637.757324) 43942 POINT(267.580505 280.564484) 43943 POINT(146.553558 623.041016) 43944 POINT(877.87677 115.642342) 43945 POINT(436.704224 501.789307) 43946 POINT(149.751984 989.098938) 43947 POINT(99.1098938 577.145874) 43948 POINT(269.914185 475.697479) 43949 POINT(259.672729 565.738831) 43950 POINT(536.838806 416.648987) 43951 POINT(485.318359 901.740479) 43952 POINT(762.100769 932.350464) 43953 POINT(910.114868 486.763214) 43954 POINT(875.258301 181.396423) 43955 POINT(545.487488 602.151123) 43956 POINT(613.150696 999.868591) 43957 POINT(773.023987 606.544495) 43958 POINT(781.151306 883.983887) 43959 POINT(815.25824 26.0916004) 43960 POINT(296.62088 474.038086) 43961 POINT(990.888062 442.724396) 43962 POINT(716.862915 470.140656) 43963 POINT(884.753113 448.463959) 43964 POINT(71.7273331 613.027649) 43965 POINT(626.333557 877.392883) 43966 POINT(874.222961 239.434906) 43967 POINT(278.412506 583.940063) 43968 POINT(183.766663 854.89679) 43969 POINT(722.875732 504.32959) 43970 POINT(511.84903 931.824097) 43971 POINT(304.5466 430.91922) 43972 POINT(357.869629 652.345947) 43973 POINT(95.7153091 425.801117) 43974 POINT(865.764587 879.338135) 43975 POINT(791.015869 695.183594) 43976 POINT(825.008972 201.594772) 43977 POINT(580.028992 900.066895) 43978 POINT(280.946869 297.145386) 43979 POINT(597.085083 667.549133) 43980 POINT(850.628784 69.812706) 43981 POINT(765.958984 632.349243) 43982 POINT(395.987274 406.413757) 43983 POINT(671.37915 837.036987) 43984 POINT(623.958374 984.317261) 43985 POINT(957.514832 174.874634) 43986 POINT(53.8691978 230.795471) 43987 POINT(212.001007 709.566406) 43988 POINT(410.018738 336.791931) 43989 POINT(206.858261 855.693115) 43990 POINT(108.937256 589.02594) 43991 POINT(177.255585 271.897064) 43992 POINT(66.524437 277.066925) 43993 POINT(795.950256 891.337402) 43994 POINT(453.453064 18.0429592) 43995 POINT(994.056213 291.525116) 43996 POINT(384.330322 623.543335) 43997 POINT(464.296509 854.981812) 43998 POINT(396.702362 104.195389) 43999 POINT(815.972595 175.463898) 44000 POINT(222.766708 201.131363) 44001 POINT(14.535573 469.614349) 44002 POINT(995.438904 974.525208) 44003 POINT(94.0123215 424.316559) 44004 POINT(80.1521759 632.612427) 44005 POINT(666.872498 774.836609) 44006 POINT(56.5212479 505.770416) 44007 POINT(540.611206 812.775024) 44008 POINT(564.968994 55.6226692) 44009 POINT(678.867371 76.2572708) 44010 POINT(310.917755 145.651001) 44011 POINT(790.939331 303.655548) 44012 POINT(214.63089 714.996643) 44013 POINT(298.846741 728.046875) 44014 POINT(692.826782 109.16304) 44015 POINT(195.51416 359.808167) 44016 POINT(246.468079 888.996521) 44017 POINT(79.213623 722.073547) 44018 POINT(748.478455 112.021629) 44019 POINT(214.243378 756.713806) 44020 POINT(119.501022 147.993607) 44021 POINT(940.189758 261.139435) 44022 POINT(946.254761 734.056152) 44023 POINT(824.403748 218.309143) 44024 POINT(235.767731 515.456238) 44025 POINT(145.030762 979.191223) 44026 POINT(63.0856972 967.275879) 44027 POINT(203.695023 199.556412) 44028 POINT(716.416443 703.637817) 44029 POINT(524.513977 237.977859) 44030 POINT(881.648926 496.488281) 44031 POINT(704.390625 921.501099) 44032 POINT(950.470154 230.148483) 44033 POINT(871.505249 977.481506) 44034 POINT(148.720276 784.765869) 44035 POINT(795.739258 328.037964) 44036 POINT(533.114197 886.631653) 44037 POINT(415.669861 926.547974) 44038 POINT(117.094368 91.7219772) 44039 POINT(219.155411 978.331482) 44040 POINT(285.555054 727.056763) 44041 POINT(683.899841 590.496033) 44042 POINT(21.8128052 139.469666) 44043 POINT(74.3684692 14.8142662) 44044 POINT(279.941833 470.677948) 44045 POINT(853.788086 324.085236) 44046 POINT(526.009521 259.302124) 44047 POINT(934.583496 253.912643) 44048 POINT(180.538544 973.498596) 44049 POINT(915.486938 971.073975) 44050 POINT(512.502197 501.546875) 44051 POINT(374.839722 135.126068) 44052 POINT(756.280396 212.118713) 44053 POINT(571.548462 5.70105267) 44054 POINT(594.328735 371.710419) 44055 POINT(490.134888 733.812683) 44056 POINT(120.042328 45.1334114) 44057 POINT(824.848572 846.776001) 44058 POINT(370.749908 567.943604) 44059 POINT(78.5174103 294.011017) 44060 POINT(106.393143 869.788208) 44061 POINT(631.457581 31.6635723) 44062 POINT(764.806274 338.0224) 44063 POINT(169.230103 769.852722) 44064 POINT(212.305023 175.386658) 44065 POINT(828.326477 235.301422) 44066 POINT(744.341797 848.452942) 44067 POINT(487.122772 677.600037) 44068 POINT(694.231812 909.984985) 44069 POINT(784.915649 698.489685) 44070 POINT(350.473267 263.973083) 44071 POINT(261.933533 155.066315) 44072 POINT(740.166504 523.196655) 44073 POINT(873.401611 490.044037) 44074 POINT(235.807846 72.6375275) 44075 POINT(514.671326 501.154694) 44076 POINT(116.732063 525.470093) 44077 POINT(903.854248 169.004318) 44078 POINT(849.278809 559.837524) 44079 POINT(583.215393 625.478577) 44080 POINT(329.056702 412.99057) 44081 POINT(128.785217 835.943665) 44082 POINT(995.292236 234.019562) 44083 POINT(185.379547 776.500977) 44084 POINT(125.128403 847.3974) 44085 POINT(285.726135 266.523102) 44086 POINT(741.946106 437.532532) 44087 POINT(760.073242 636.359314) 44088 POINT(126.520012 50.7956886) 44089 POINT(417.002625 805.789429) 44090 POINT(556.40387 337.945892) 44091 POINT(175.822006 371.516785) 44092 POINT(473.820862 479.082153) 44093 POINT(882.628418 968.315063) 44094 POINT(105.0756 988.34613) 44095 POINT(150.795273 510.608643) 44096 POINT(637.806641 970.391968) 44097 POINT(65.2511902 237.130493) 44098 POINT(372.079285 169.533066) 44099 POINT(889.620361 584.328979) 44100 POINT(966.323914 730.514343) 44101 POINT(755.34021 383.501038) 44102 POINT(621.525513 282.700226) 44103 POINT(509.645203 306.929108) 44104 POINT(112.061989 713.412415) 44105 POINT(100.312958 739.95166) 44106 POINT(257.489136 648.099609) 44107 POINT(802.945129 704.875488) 44108 POINT(217.829071 182.522766) 44109 POINT(303.056091 250.544815) 44110 POINT(820.101807 183.353546) 44111 POINT(760.251343 5.4424901) 44112 POINT(623.64563 497.297943) 44113 POINT(963.304138 795.268616) 44114 POINT(197.019257 584.491089) 44115 POINT(69.1120605 286.490204) 44116 POINT(903.912964 459.49649) 44117 POINT(69.5965958 239.49234) 44118 POINT(626.588257 813.450745) 44119 POINT(490.980194 858.406372) 44120 POINT(243.110657 875.011475) 44121 POINT(170.042145 894.800537) 44122 POINT(222.35762 907.704651) 44123 POINT(620.553467 100.165466) 44124 POINT(514.921082 339.569336) 44125 POINT(176.877045 594.115967) 44126 POINT(558.148376 870.823853) 44127 POINT(35.5764236 3.68694901) 44128 POINT(942.375244 640.419556) 44129 POINT(592.811401 381.875061) 44130 POINT(318.718719 677.218933) 44131 POINT(256.446747 994.149353) 44132 POINT(885.559509 581.174255) 44133 POINT(686.415955 899.119812) 44134 POINT(143.129593 229.952484) 44135 POINT(252.34993 688.644714) 44136 POINT(128.617081 483.246277) 44137 POINT(289.309509 903.722717) 44138 POINT(566.236145 447.43631) 44139 POINT(454.280792 131.533646) 44140 POINT(19.2251968 94.8735504) 44141 POINT(439.664154 7.56203222) 44142 POINT(398.302429 522.988892) 44143 POINT(365.191772 702.088623) 44144 POINT(951.422302 147.506042) 44145 POINT(54.5548706 635.31665) 44146 POINT(973.555176 800.642334) 44147 POINT(893.641479 328.488678) 44148 POINT(976.606323 339.371094) 44149 POINT(177.93605 413.651184) 44150 POINT(445.564056 641.254272) 44151 POINT(479.699738 861.955994) 44152 POINT(777.720032 97.3219452) 44153 POINT(121.536835 684.914062) 44154 POINT(710.655823 114.890419) 44155 POINT(930.497742 465.801514) 44156 POINT(848.083923 70.6130905) 44157 POINT(992.72406 606.071838) 44158 POINT(600.139099 348.612671) 44159 POINT(637.695251 656.372742) 44160 POINT(479.034027 944.035461) 44161 POINT(686.389832 341.455597) 44162 POINT(697.938843 883.216309) 44163 POINT(510.26944 196.373444) 44164 POINT(79.4659653 822.883301) 44165 POINT(407.177887 186.996521) 44166 POINT(512.307922 448.128326) 44167 POINT(523.412415 385.75235) 44168 POINT(425.582153 138.513855) 44169 POINT(183.87262 73.9787216) 44170 POINT(758.604492 150.590042) 44171 POINT(257.95816 421.333435) 44172 POINT(670.585388 750.799438) 44173 POINT(639.529114 791.940002) 44174 POINT(194.694168 193.413055) 44175 POINT(184.640976 403.58783) 44176 POINT(331.755402 682.561707) 44177 POINT(488.934235 443.201721) 44178 POINT(791.356201 885.010437) 44179 POINT(733.622314 257.423309) 44180 POINT(16.2928314 711.116089) 44181 POINT(849.243347 95.6117477) 44182 POINT(17.1425838 886.069824) 44183 POINT(382.103638 303.594238) 44184 POINT(347.507538 863.342712) 44185 POINT(470.147247 335.434204) 44186 POINT(670.460571 349.149078) 44187 POINT(91.4774475 468.31134) 44188 POINT(409.376099 713.241943) 44189 POINT(416.680359 438.923676) 44190 POINT(1.21837831 850.638733) 44191 POINT(430.350098 150.857269) 44192 POINT(40.1867409 264.717773) 44193 POINT(570.7901 178.970612) 44194 POINT(830.194092 788.950195) 44195 POINT(630.903809 582.490173) 44196 POINT(474.936584 117.375633) 44197 POINT(557.043884 862.308472) 44198 POINT(996.359497 228.451996) 44199 POINT(643.447998 104.644714) 44200 POINT(161.340195 559.406006) 44201 POINT(343.35965 53.1227798) 44202 POINT(740.708435 5.59170723) 44203 POINT(977.641479 170.415634) 44204 POINT(55.7549934 209.168304) 44205 POINT(819.4021 580.505432) 44206 POINT(569.712769 281.803162) 44207 POINT(748.752686 30.5365353) 44208 POINT(343.023254 835.874939) 44209 POINT(113.29525 850.048035) 44210 POINT(732.345703 627.214905) 44211 POINT(883.454712 3.54224992) 44212 POINT(318.176727 29.8177223) 44213 POINT(271.560425 183.970001) 44214 POINT(691.685974 149.838303) 44215 POINT(882.036926 949.530151) 44216 POINT(118.144157 463.865356) 44217 POINT(197.695129 899.528992) 44218 POINT(875.434326 146.828262) 44219 POINT(882.547241 67.9123306) 44220 POINT(98.048645 590.501099) 44221 POINT(421.567352 102.062531) 44222 POINT(549.245483 247.574158) 44223 POINT(27.2613335 421.777039) 44224 POINT(909.37561 752.458557) 44225 POINT(354.807129 716.860901) 44226 POINT(872.597412 42.7915573) 44227 POINT(293.008698 654.954224) 44228 POINT(756.238464 850.052429) 44229 POINT(176.634872 113.173767) 44230 POINT(68.9927292 749.450134) 44231 POINT(14.2676373 212.606949) 44232 POINT(881.164551 904.590393) 44233 POINT(390.07431 784.003723) 44234 POINT(170.604233 548.287292) 44235 POINT(301.574524 2.14649057) 44236 POINT(63.2677422 84.7906952) 44237 POINT(390.254883 936.942139) 44238 POINT(982.049255 848.820312) 44239 POINT(437.675323 838.496033) 44240 POINT(799.371521 21.9201031) 44241 POINT(94.5172501 524.153992) 44242 POINT(748.796936 886.184875) 44243 POINT(119.979874 206.203918) 44244 POINT(882.589905 529.405151) 44245 POINT(798.292419 193.719757) 44246 POINT(512.782227 734.791321) 44247 POINT(110.263107 840.634766) 44248 POINT(293.070129 163.958862) 44249 POINT(941.233643 879.894104) 44250 POINT(291.122559 35.703968) 44251 POINT(451.188965 381.441864) 44252 POINT(672.044861 417.80423) 44253 POINT(394.837311 266.443237) 44254 POINT(23.4011955 477.813202) 44255 POINT(914.116699 883.752808) 44256 POINT(163.039093 715.365173) 44257 POINT(215.797333 155.073486) 44258 POINT(698.802917 347.283936) 44259 POINT(753.781372 285.975006) 44260 POINT(73.0203857 802.83374) 44261 POINT(548.595398 850.06543) 44262 POINT(196.45842 265.428406) 44263 POINT(162.823624 27.8557529) 44264 POINT(631.476868 565.312805) 44265 POINT(506.336914 30.5800667) 44266 POINT(150.672394 572.064514) 44267 POINT(42.7761002 888.406799) 44268 POINT(106.853355 783.771179) 44269 POINT(410.600433 223.704529) 44270 POINT(587.282532 679.586121) 44271 POINT(837.997131 770.531311) 44272 POINT(677.470947 852.837952) 44273 POINT(729.076355 914.15625) 44274 POINT(168.215698 122.384918) 44275 POINT(215.17511 597.666077) 44276 POINT(747.999939 20.5020638) 44277 POINT(414.028198 530.666687) 44278 POINT(628.377991 956.927612) 44279 POINT(313.409424 707.480225) 44280 POINT(852.752869 282.071289) 44281 POINT(115.117882 34.4169617) 44282 POINT(392.336639 629.707153) 44283 POINT(138.507065 128.646454) 44284 POINT(893.507874 663.284729) 44285 POINT(916.893799 601.498535) 44286 POINT(417.820801 423.449036) 44287 POINT(430.016418 908.928711) 44288 POINT(222.269821 261.261932) 44289 POINT(834.249023 939.225647) 44290 POINT(28.8890133 116.369919) 44291 POINT(990.653076 226.305832) 44292 POINT(998.320496 77.0097504) 44293 POINT(288.413635 105.225388) 44294 POINT(873.682373 544.947876) 44295 POINT(35.1546249 359.57843) 44296 POINT(324.104706 369.498962) 44297 POINT(181.554672 308.58432) 44298 POINT(170.000824 347.579224) 44299 POINT(589.235168 720.881042) 44300 POINT(895.945435 988.859985) 44301 POINT(989.812927 63.9321632) 44302 POINT(86.5123062 284.659546) 44303 POINT(349.191803 59.7503738) 44304 POINT(293.275391 905.036865) 44305 POINT(502.615601 242.193756) 44306 POINT(448.22345 180.042221) 44307 POINT(698.849426 636.874817) 44308 POINT(574.017639 938.278137) 44309 POINT(450.360474 15.8425875) 44310 POINT(951.911438 709.489868) 44311 POINT(772.912292 635.378723) 44312 POINT(543.944702 519.131348) 44313 POINT(283.07486 431.841003) 44314 POINT(730.536682 973.65033) 44315 POINT(554.42395 328.470703) 44316 POINT(924.288696 158.147583) 44317 POINT(789.411865 362.053253) 44318 POINT(415.226654 36.2503929) 44319 POINT(998.918823 554.51123) 44320 POINT(654.572266 189.291748) 44321 POINT(78.3526993 878.769165) 44322 POINT(809.240845 382.617737) 44323 POINT(88.9842834 864.032898) 44324 POINT(736.574219 266.09256) 44325 POINT(685.242004 682.078613) 44326 POINT(910.398254 559.301819) 44327 POINT(540.331055 297.971954) 44328 POINT(350.539612 35.855957) 44329 POINT(209.292114 66.1867371) 44330 POINT(296.767517 92.4820709) 44331 POINT(604.106323 132.346283) 44332 POINT(456.189392 394.804565) 44333 POINT(941.448242 53.3635941) 44334 POINT(824.991882 151.013107) 44335 POINT(40.0634995 81.8430862) 44336 POINT(728.779419 735.794495) 44337 POINT(399.515503 747.072021) 44338 POINT(181.439957 319.372742) 44339 POINT(871.338562 393.253693) 44340 POINT(474.404907 640.30072) 44341 POINT(551.706238 659.919128) 44342 POINT(73.4450607 276.441071) 44343 POINT(973.962585 979.421814) 44344 POINT(118.940704 537.649963) 44345 POINT(780.274109 757.429504) 44346 POINT(751.214355 137.953903) 44347 POINT(902.875122 245.346497) 44348 POINT(971.453979 957.02063) 44349 POINT(313.658386 225.238159) 44350 POINT(110.561172 713.637878) 44351 POINT(611.085388 540.308411) 44352 POINT(225.620636 131.517517) 44353 POINT(938.571289 515.154175) 44354 POINT(842.433411 954.447815) 44355 POINT(879.760071 233.364456) 44356 POINT(581.62207 878.667603) 44357 POINT(292.717163 54.647213) 44358 POINT(967.280518 420.992126) 44359 POINT(344.400513 254.282028) 44360 POINT(446.194733 877.973877) 44361 POINT(934.34137 114.659637) 44362 POINT(620.623474 691.145081) 44363 POINT(975.904907 567.961365) 44364 POINT(399.950012 693.701172) 44365 POINT(686.564392 722.250427) 44366 POINT(140.76091 243.009705) 44367 POINT(755.192383 457.620331) 44368 POINT(508.776306 149.859497) 44369 POINT(462.464111 177.426865) 44370 POINT(350.366028 498.808014) 44371 POINT(66.2006912 680.492859) 44372 POINT(100.082748 954.386353) 44373 POINT(891.127136 687.622192) 44374 POINT(420.79837 395.94104) 44375 POINT(24.4507942 529.519165) 44376 POINT(824.836548 790.821716) 44377 POINT(585.397827 868.629761) 44378 POINT(861.275513 63.3731155) 44379 POINT(557.004761 585.481934) 44380 POINT(182.793762 448.306366) 44381 POINT(818.812317 377.404236) 44382 POINT(984.619568 924.660767) 44383 POINT(554.526245 476.268768) 44384 POINT(201.016617 944.523804) 44385 POINT(712.210632 739.993347) 44386 POINT(667.114136 823.359375) 44387 POINT(827.285278 273.419678) 44388 POINT(624.717346 11.2453651) 44389 POINT(769.78064 516.964294) 44390 POINT(342.077057 572.205811) 44391 POINT(914.332886 250.842209) 44392 POINT(804.66272 758.427246) 44393 POINT(749.792297 309.04129) 44394 POINT(945.075317 664.388245) 44395 POINT(18.7026634 606.55603) 44396 POINT(446.819458 810.346436) 44397 POINT(407.041443 747.271545) 44398 POINT(963.278381 753.379028) 44399 POINT(471.379822 405.55304) 44400 POINT(527.615662 716.052734) 44401 POINT(602.027466 534.888794) 44402 POINT(832.266479 907.221558) 44403 POINT(162.91127 440.337891) 44404 POINT(972.138855 976.452148) 44405 POINT(636.149475 812.145813) 44406 POINT(670.680908 573.823242) 44407 POINT(323.912567 925.437927) 44408 POINT(142.786301 601.626526) 44409 POINT(442.711365 600.737061) 44410 POINT(746.42334 655.724243) 44411 POINT(884.36084 943.150513) 44412 POINT(792.329285 714.533386) 44413 POINT(440.285095 851.036682) 44414 POINT(127.682755 85.9733429) 44415 POINT(396.445282 340.020447) 44416 POINT(898.047241 351.018341) 44417 POINT(437.989594 663.225891) 44418 POINT(687.885986 821.156921) 44419 POINT(166.879944 337.017914) 44420 POINT(712.534119 271.112732) 44421 POINT(971.498901 582.488281) 44422 POINT(5.74215221 223.291824) 44423 POINT(811.965759 461.112854) 44424 POINT(441.973389 292.876801) 44425 POINT(844.10321 478.80014) 44426 POINT(729.868347 389.205811) 44427 POINT(922.322571 531.919678) 44428 POINT(194.125031 387.588837) 44429 POINT(448.902283 413.446838) 44430 POINT(662.055298 104.194283) 44431 POINT(904.093689 344.31131) 44432 POINT(225.961411 533.869202) 44433 POINT(656.21991 67.2468414) 44434 POINT(154.052948 746.155579) 44435 POINT(349.558685 376.37912) 44436 POINT(64.8355637 118.367783) 44437 POINT(664.585022 759.566223) 44438 POINT(409.824799 647.071106) 44439 POINT(482.473846 321.841461) 44440 POINT(777.260132 491.931335) 44441 POINT(234.13327 822.558899) 44442 POINT(938.540955 130.61142) 44443 POINT(322.090332 496.980011) 44444 POINT(515.820801 142.708023) 44445 POINT(148.041016 111.668777) 44446 POINT(713.149902 687.811768) 44447 POINT(214.685684 204.410202) 44448 POINT(487.442719 831.433716) 44449 POINT(580.610474 731.281677) 44450 POINT(555.189819 527.17688) 44451 POINT(292.574646 949.467712) 44452 POINT(655.174927 949.184753) 44453 POINT(289.883759 633.516846) 44454 POINT(888.569153 41.2372932) 44455 POINT(237.94986 999.720276) 44456 POINT(810.851807 304.170898) 44457 POINT(198.170639 608.498657) 44458 POINT(283.36911 568.493286) 44459 POINT(452.534668 154.090881) 44460 POINT(137.437027 521.680359) 44461 POINT(975.632568 326.051666) 44462 POINT(145.287369 197.848526) 44463 POINT(363.913666 745.303406) 44464 POINT(17.5494556 250.079422) 44465 POINT(700.074341 511.612701) 44466 POINT(497.166504 262.047302) 44467 POINT(135.53949 837.840515) 44468 POINT(638.617554 405.80658) 44469 POINT(530.35083 43.2560158) 44470 POINT(46.1179352 597.294739) 44471 POINT(489.796326 303.328705) 44472 POINT(895.302368 761.591248) 44473 POINT(601.305908 742.078918) 44474 POINT(633.074158 608.153015) 44475 POINT(702.134888 956.241821) 44476 POINT(196.275574 284.665802) 44477 POINT(24.917326 894.796326) 44478 POINT(721.171692 669.970276) 44479 POINT(79.1750641 215.042557) 44480 POINT(45.1341934 765.528748) 44481 POINT(965.329346 95.2452545) 44482 POINT(795.187683 425.51416) 44483 POINT(394.805664 817.355713) 44484 POINT(684.178589 442.85614) 44485 POINT(244.712769 820.600891) 44486 POINT(416.323486 88.1443329) 44487 POINT(825.694092 962.495728) 44488 POINT(664.975891 526.447021) 44489 POINT(832.400146 268.457581) 44490 POINT(204.948456 950.773682) 44491 POINT(901.250854 880.646057) 44492 POINT(941.076416 747.627991) 44493 POINT(871.501343 372.530609) 44494 POINT(208.488144 918.031433) 44495 POINT(862.976746 235.214798) 44496 POINT(965.945618 325.330933) 44497 POINT(605.212585 587.584778) 44498 POINT(952.460693 28.4558907) 44499 POINT(614.253601 953.368896) 44500 POINT(323.119812 26.0974255) 44501 POINT(679.289795 988.298096) 44502 POINT(969.736389 614.207397) 44503 POINT(134.022583 49.4731331) 44504 POINT(615.789001 317.551605) 44505 POINT(817.665466 462.120911) 44506 POINT(756.414368 957.708252) 44507 POINT(826.425842 757.139832) 44508 POINT(699.455383 967.423096) 44509 POINT(794.944763 292.791321) 44510 POINT(912.282532 47.778019) 44511 POINT(783.370911 817.818787) 44512 POINT(854.011597 823.990173) 44513 POINT(962.526367 229.019958) 44514 POINT(689.645325 312.248596) 44515 POINT(348.110413 87.3360367) 44516 POINT(160.528122 928.852722) 44517 POINT(324.349335 211.958817) 44518 POINT(296.375183 9.70650673) 44519 POINT(685.311096 716.514648) 44520 POINT(173.234314 559.233582) 44521 POINT(303.776306 295.419922) 44522 POINT(77.364151 299.924133) 44523 POINT(286.720703 37.9886932) 44524 POINT(958.622864 274.54538) 44525 POINT(894.880981 934.411743) 44526 POINT(133.121521 880.705811) 44527 POINT(471.42218 948.547363) 44528 POINT(711.303406 550.75) 44529 POINT(849.415588 740.412292) 44530 POINT(25.0842743 478.288635) 44531 POINT(975.799744 14.8226919) 44532 POINT(450.175232 126.076096) 44533 POINT(914.991028 5.89976215) 44534 POINT(964.277466 409.102051) 44535 POINT(670.721619 749.861694) 44536 POINT(748.685669 752.949158) 44537 POINT(910.512512 786.013123) 44538 POINT(283.281433 892.603882) 44539 POINT(292.079559 509.099426) 44540 POINT(59.3844872 653.528687) 44541 POINT(601.667603 91.8163147) 44542 POINT(51.0340805 788.075562) 44543 POINT(825.705811 236.476059) 44544 POINT(955.681396 610.03418) 44545 POINT(922.276001 797.491882) 44546 POINT(405.815186 952.671692) 44547 POINT(848.822754 854.919006) 44548 POINT(532.658447 286.08316) 44549 POINT(76.5632095 192.890457) 44550 POINT(553.83197 473.685394) 44551 POINT(697.5625 440.135376) 44552 POINT(283.984222 71.5511703) 44553 POINT(452.933197 723.215088) 44554 POINT(409.143768 614.902527) 44555 POINT(803.726379 442.638458) 44556 POINT(3.42229104 471.004303) 44557 POINT(81.5679703 349.220612) 44558 POINT(535.234741 435.084015) 44559 POINT(923.837219 130.158279) 44560 POINT(647.121704 814.543213) 44561 POINT(576.193909 134.159363) 44562 POINT(389.363953 686.027832) 44563 POINT(269.670685 111.061455) 44564 POINT(636.822693 859.936951) 44565 POINT(114.610077 117.80687) 44566 POINT(867.892456 778.328003) 44567 POINT(741.833923 269.134125) 44568 POINT(784.305603 676.213867) 44569 POINT(33.082222 273.252014) 44570 POINT(804.106445 314.860657) 44571 POINT(566.592957 691.056702) 44572 POINT(873.857605 51.4151764) 44573 POINT(36.4644127 358.738312) 44574 POINT(379.627411 935.191345) 44575 POINT(641.032776 200.126373) 44576 POINT(952.224487 551.007935) 44577 POINT(858.917358 774.694092) 44578 POINT(376.319 988.513) 44579 POINT(802.76825 923.260437) 44580 POINT(544.464111 268.490417) 44581 POINT(449.350739 115.191147) 44582 POINT(817.671997 858.387146) 44583 POINT(57.8041191 913.038574) 44584 POINT(339.309113 256.014404) 44585 POINT(401.22467 963.422791) 44586 POINT(826.96759 599.474121) 44587 POINT(523.778137 222.520172) 44588 POINT(369.09491 600.38623) 44589 POINT(398.102753 622.394165) 44590 POINT(464.091064 914.604736) 44591 POINT(475.701996 987.799194) 44592 POINT(347.002899 118.598732) 44593 POINT(904.357971 894.868896) 44594 POINT(893.687256 399.957001) 44595 POINT(417.448608 11.7345676) 44596 POINT(618.314575 687.084534) 44597 POINT(194.689102 730.717773) 44598 POINT(484.419434 416.767426) 44599 POINT(544.617065 62.0217323) 44600 POINT(132.567169 290.170288) 44601 POINT(86.6146622 545.166626) 44602 POINT(342.414429 909.9198) 44603 POINT(313.038483 597.747437) 44604 POINT(949.947327 975.750854) 44605 POINT(416.867828 278.042908) 44606 POINT(341.546173 986.918335) 44607 POINT(82.0706177 920.795776) 44608 POINT(57.9539833 39.9912491) 44609 POINT(385.624664 811.97052) 44610 POINT(929.030823 95.1669312) 44611 POINT(962.959534 811.950623) 44612 POINT(693.307434 927.903381) 44613 POINT(381.755157 196.565781) 44614 POINT(856.876465 191.139069) 44615 POINT(69.931366 556.266113) 44616 POINT(939.276733 532.933289) 44617 POINT(797.794556 236.03717) 44618 POINT(518.051147 381.937775) 44619 POINT(345.309662 888.252869) 44620 POINT(100.042908 806.233948) 44621 POINT(645.090393 389.195038) 44622 POINT(750.802734 137.909348) 44623 POINT(9.83526039 794.655273) 44624 POINT(241.410309 845.088318) 44625 POINT(487.588226 603.726868) 44626 POINT(815.385437 324.387848) 44627 POINT(475.500458 301.070435) 44628 POINT(331.124817 919.984985) 44629 POINT(326.977448 660.697449) 44630 POINT(744.516174 981.311951) 44631 POINT(250.590622 338.386627) 44632 POINT(612.25177 221.139313) 44633 POINT(592.42511 840.582397) 44634 POINT(422.207336 991.369629) 44635 POINT(965.259766 535.996277) 44636 POINT(199.512405 457.790894) 44637 POINT(314.885223 238.74826) 44638 POINT(555.189392 520.49054) 44639 POINT(150.849182 320.963318) 44640 POINT(401.173035 827.39801) 44641 POINT(898.977356 856.140137) 44642 POINT(166.959702 388.918976) 44643 POINT(817.291504 15.8033657) 44644 POINT(938.02594 286.888428) 44645 POINT(644.68689 670.042908) 44646 POINT(366.562744 336.766235) 44647 POINT(190.32457 722.260132) 44648 POINT(56.1967316 504.414886) 44649 POINT(316.647156 250.131042) 44650 POINT(922.528381 484.853027) 44651 POINT(193.87326 654.438904) 44652 POINT(511.958313 347.603088) 44653 POINT(610.52063 126.625534) 44654 POINT(606.963745 159.818726) 44655 POINT(392.839355 241.884262) 44656 POINT(544.42627 273.06842) 44657 POINT(324.005707 40.2263145) 44658 POINT(365.616058 651.886536) 44659 POINT(147.673035 761.665527) 44660 POINT(245.95665 522.017639) 44661 POINT(404.251801 407.591461) 44662 POINT(116.792702 404.339111) 44663 POINT(674.481934 478.260834) 44664 POINT(190.261734 598.039612) 44665 POINT(813.974426 821.485291) 44666 POINT(385.34668 595.672363) 44667 POINT(553.066711 271.005585) 44668 POINT(784.705139 105.729271) 44669 POINT(335.318939 171.319244) 44670 POINT(37.5041809 68.5597229) 44671 POINT(980.154724 511.100128) 44672 POINT(575.932556 662.577881) 44673 POINT(13.5304976 17.6609688) 44674 POINT(98.1325226 84.1725922) 44675 POINT(726.236877 513.645081) 44676 POINT(656.94043 261.600891) 44677 POINT(931.744019 183.388748) 44678 POINT(4.11694717 436.067871) 44679 POINT(321.794281 234.902191) 44680 POINT(398.87854 158.46489) 44681 POINT(403.717468 134.519653) 44682 POINT(675.834229 44.7662163) 44683 POINT(472.335236 10.9530706) 44684 POINT(962.330811 84.4136887) 44685 POINT(473.08847 615.341614) 44686 POINT(473.282562 272.30954) 44687 POINT(81.5456848 41.155426) 44688 POINT(430.509827 345.082184) 44689 POINT(815.742126 175.331253) 44690 POINT(444.246063 845.500366) 44691 POINT(547.988586 8.27350903) 44692 POINT(950.750366 155.326782) 44693 POINT(756.136536 679.440308) 44694 POINT(268.944427 457.189087) 44695 POINT(193.171143 696.885132) 44696 POINT(970.878113 381.489166) 44697 POINT(128.939224 628.685974) 44698 POINT(958.936523 826.89032) 44699 POINT(777.430786 722.644714) 44700 POINT(513.479431 715.049988) 44701 POINT(144.086578 134.581512) 44702 POINT(677.61853 245.171707) 44703 POINT(64.9750824 517.208496) 44704 POINT(443.789246 185.417664) 44705 POINT(246.385117 688.794189) 44706 POINT(15.4769001 400.675537) 44707 POINT(310.541229 527.103821) 44708 POINT(855.86261 834.636658) 44709 POINT(200.032257 448.521362) 44710 POINT(675.326843 594.294189) 44711 POINT(357.52652 179.552216) 44712 POINT(26.8892269 323.089081) 44713 POINT(273.941406 618.424988) 44714 POINT(801.087524 281.937286) 44715 POINT(761.071228 544.231506) 44716 POINT(870.955444 212.801773) 44717 POINT(455.514191 651.567139) 44718 POINT(118.214928 255.490967) 44719 POINT(979.460022 777.188843) 44720 POINT(461.254608 683.760681) 44721 POINT(78.5103302 414.640991) 44722 POINT(644.734375 670.984192) 44723 POINT(213.339981 371.594147) 44724 POINT(983.691101 478.672913) 44725 POINT(114.923981 166.893036) 44726 POINT(978.884766 563.641174) 44727 POINT(914.636475 959.748352) 44728 POINT(435.018433 942.906982) 44729 POINT(651.28241 187.483765) 44730 POINT(72.7061615 451.412537) 44731 POINT(335.680664 911.738953) 44732 POINT(485.098572 128.878967) 44733 POINT(746.541321 152.635483) 44734 POINT(960.474304 121.743126) 44735 POINT(743.945251 258.360962) 44736 POINT(185.563049 67.9430923) 44737 POINT(951.758423 911.768066) 44738 POINT(126.703873 720.746582) 44739 POINT(88.9184723 529.398376) 44740 POINT(626.103149 477.88385) 44741 POINT(260.985657 140.924545) 44742 POINT(70.5147171 819.622681) 44743 POINT(975.028198 943.087646) 44744 POINT(214.811234 370.394958) 44745 POINT(158.326324 462.139709) 44746 POINT(151.473755 220.066223) 44747 POINT(768.161499 8.56081867) 44748 POINT(990.440613 250.470901) 44749 POINT(727.863892 9.00763512) 44750 POINT(986.596863 878.581238) 44751 POINT(543.207764 10.294281) 44752 POINT(262.146576 858.4245) 44753 POINT(501.174561 91.5539474) 44754 POINT(509.014923 479.027344) 44755 POINT(366.185974 32.0625458) 44756 POINT(916.216797 695.284546) 44757 POINT(831.394836 567.621765) 44758 POINT(295.87796 863.390259) 44759 POINT(96.899826 147.626328) 44760 POINT(929.494507 893.614563) 44761 POINT(103.323288 763.330688) 44762 POINT(926.392944 742.681641) 44763 POINT(496.697083 156.358566) 44764 POINT(985.643005 348.335297) 44765 POINT(15.7921515 301.770477) 44766 POINT(940.459778 853.037964) 44767 POINT(930.79248 774.239319) 44768 POINT(603.095337 405.920227) 44769 POINT(505.55426 996.942383) 44770 POINT(434.190796 996.502014) 44771 POINT(365.746124 504.127472) 44772 POINT(852.479187 825.374268) 44773 POINT(621.186646 49.0620461) 44774 POINT(450.670013 211.634827) 44775 POINT(680.072266 503.942413) 44776 POINT(566.500244 170.693359) 44777 POINT(801.021118 137.691254) 44778 POINT(102.627853 656.019714) 44779 POINT(529.586182 647.36731) 44780 POINT(926.71582 272.043671) 44781 POINT(560.86969 650.764648) 44782 POINT(798.277344 650.884155) 44783 POINT(138.979309 628.910339) 44784 POINT(449.321869 901.685669) 44785 POINT(555.32074 210.431931) 44786 POINT(32.3791695 737.479675) 44787 POINT(427.246643 403.638092) 44788 POINT(686.02594 350.709656) 44789 POINT(340.638458 860.735352) 44790 POINT(951.671936 525.52356) 44791 POINT(816.97168 471.620972) 44792 POINT(406.270386 163.937363) 44793 POINT(937.807983 767.495544) 44794 POINT(307.125214 575.920044) 44795 POINT(926.108398 518.107971) 44796 POINT(633.518127 892.882996) 44797 POINT(471.024414 47.3787422) 44798 POINT(465.042755 553.143982) 44799 POINT(95.7815628 702.673767) 44800 POINT(671.006592 360.457123) 44801 POINT(739.933289 390.971893) 44802 POINT(864.864075 407.082123) 44803 POINT(368.76059 454.058472) 44804 POINT(171.322342 596.134888) 44805 POINT(573.186462 473.791534) 44806 POINT(683.582336 399.792694) 44807 POINT(100.643311 972.146179) 44808 POINT(379.343048 296.599884) 44809 POINT(206.386612 759.505859) 44810 POINT(495.017151 379.557648) 44811 POINT(859.420715 764.505737) 44812 POINT(909.539368 394.413452) 44813 POINT(729.250061 191.249695) 44814 POINT(396.751038 822.765747) 44815 POINT(648.975342 452.143494) 44816 POINT(806.324646 76.0486679) 44817 POINT(854.826904 439.764038) 44818 POINT(418.359192 813.578674) 44819 POINT(778.198608 767.593567) 44820 POINT(180.085251 380.667297) 44821 POINT(877.873047 831.193787) 44822 POINT(21.6311684 311.99704) 44823 POINT(889.796814 138.19931) 44824 POINT(411.71994 332.306549) 44825 POINT(709.979614 812.728088) 44826 POINT(156.804916 772.856689) 44827 POINT(761.485901 498.414703) 44828 POINT(774.962158 410.682587) 44829 POINT(305.819824 830.869507) 44830 POINT(648.403137 421.449524) 44831 POINT(497.16037 7.18184614) 44832 POINT(338.454041 49.6053085) 44833 POINT(627.883301 794.971008) 44834 POINT(650.082153 265.87793) 44835 POINT(636.752563 159.916794) 44836 POINT(178.486526 767.039734) 44837 POINT(536.3255 877.778687) 44838 POINT(529.974182 231.915329) 44839 POINT(530.882507 379.363159) 44840 POINT(258.515106 477.136627) 44841 POINT(636.065979 265.072754) 44842 POINT(826.324036 643.059692) 44843 POINT(50.0311584 545.548706) 44844 POINT(813.006287 512.095703) 44845 POINT(165.030197 608.098267) 44846 POINT(847.791321 636.630676) 44847 POINT(327.852112 82.3071747) 44848 POINT(710.864807 890.51239) 44849 POINT(465.433258 355.330811) 44850 POINT(83.610405 6.1754446) 44851 POINT(774.370361 156.304214) 44852 POINT(67.6376801 408.899048) 44853 POINT(444.266083 844.222046) 44854 POINT(835.869324 391.112091) 44855 POINT(37.1992607 264.232605) 44856 POINT(325.884827 204.360474) 44857 POINT(699.648926 18.9229317) 44858 POINT(389.490601 696.453674) 44859 POINT(937.539124 984.818542) 44860 POINT(129.553894 538.942505) 44861 POINT(666.47699 906.58313) 44862 POINT(595.065857 118.619858) 44863 POINT(662.604919 954.507568) 44864 POINT(580.889771 689.961426) 44865 POINT(217.789719 532.67749) 44866 POINT(955.518066 177.757599) 44867 POINT(657.262207 189.174759) 44868 POINT(887.355652 995.66095) 44869 POINT(647.553345 784.911316) 44870 POINT(179.633728 712.655518) 44871 POINT(725.033203 718.931396) 44872 POINT(981.238708 301.833527) 44873 POINT(856.054932 845.607971) 44874 POINT(693.828857 881.251892) 44875 POINT(822.269287 129.075439) 44876 POINT(426.056091 282.579834) 44877 POINT(860.862183 204.083954) 44878 POINT(788.082886 827.898987) 44879 POINT(909.166809 7.46077156) 44880 POINT(811.575989 367.171661) 44881 POINT(464.312805 933.368225) 44882 POINT(912.79425 827.961853) 44883 POINT(7.43768549 487.036774) 44884 POINT(883.210144 295.020782) 44885 POINT(22.754612 869.724182) 44886 POINT(140.382309 400.991974) 44887 POINT(306.827972 42.0353851) 44888 POINT(851.7323 642.046204) 44889 POINT(783.264221 568.783752) 44890 POINT(958.78009 95.6325455) 44891 POINT(761.311096 447.260529) 44892 POINT(685.720581 14.2708273) 44893 POINT(180.331726 428.704956) 44894 POINT(373.53363 392.573853) 44895 POINT(120.664917 342.160492) 44896 POINT(701.818237 988.268677) 44897 POINT(818.005615 168.616547) 44898 POINT(761.04248 446.293121) 44899 POINT(754.274597 154.840775) 44900 POINT(436.851593 293.12088) 44901 POINT(602.249573 929.713318) 44902 POINT(37.5476265 191.976242) 44903 POINT(941.386108 235.901703) 44904 POINT(611.040588 174.830154) 44905 POINT(633.772034 626.71875) 44906 POINT(486.792694 680.933105) 44907 POINT(525.668152 927.960999) 44908 POINT(972.980713 361.680389) 44909 POINT(23.3454132 819.032532) 44910 POINT(23.8547115 375.982544) 44911 POINT(961.822815 953.948792) 44912 POINT(954.773071 557.818542) 44913 POINT(749.641479 293.731842) 44914 POINT(763.461304 537.696655) 44915 POINT(818.118713 945.738525) 44916 POINT(359.621277 932.374023) 44917 POINT(43.865593 756.697449) 44918 POINT(508.180817 763.058472) 44919 POINT(741.101807 154.404495) 44920 POINT(754.412964 642.721069) 44921 POINT(555.981812 513.487183) 44922 POINT(175.193436 200.001221) 44923 POINT(737.373657 384.37204) 44924 POINT(846.245728 33.0266991) 44925 POINT(734.077148 788.179626) 44926 POINT(239.919846 954.46051) 44927 POINT(382.208771 975.954773) 44928 POINT(884.554382 783.018555) 44929 POINT(431.422272 376.265045) 44930 POINT(990.606323 730.986755) 44931 POINT(225.914963 224.248337) 44932 POINT(49.4417915 946.943237) 44933 POINT(745.04364 656.758789) 44934 POINT(760.033936 803.627197) 44935 POINT(236.22467 967.076721) 44936 POINT(862.009644 518.977112) 44937 POINT(485.129059 599.067322) 44938 POINT(328.840179 0.701767862) 44939 POINT(588.637268 200.665329) 44940 POINT(883.93219 888.889038) 44941 POINT(476.346985 291.736023) 44942 POINT(379.512756 505.261566) 44943 POINT(496.515137 488.939789) 44944 POINT(361.210327 310.544189) 44945 POINT(100.168373 693.060791) 44946 POINT(220.933624 922.432251) 44947 POINT(58.8695946 620.826477) 44948 POINT(10.9893866 295.877655) 44949 POINT(101.536125 757.646362) 44950 POINT(0.423371166 245.508484) 44951 POINT(296.15506 439.658173) 44952 POINT(850.518677 668.254395) 44953 POINT(703.736572 828.347046) 44954 POINT(273.555603 64.580246) 44955 POINT(643.022888 19.7637882) 44956 POINT(823.776794 861.671997) 44957 POINT(502.084229 199.625076) 44958 POINT(111.581306 604.635437) 44959 POINT(171.869232 397.548309) 44960 POINT(993.981201 936.052246) 44961 POINT(440.039368 56.2154312) 44962 POINT(892.12384 954.497681) 44963 POINT(732.143982 877.845093) 44964 POINT(239.147247 693.904907) 44965 POINT(410.635376 570.08606) 44966 POINT(540.874756 153.621521) 44967 POINT(7.77033472 531.049988) 44968 POINT(713.055054 229.937744) 44969 POINT(671.601257 799.034973) 44970 POINT(270.342316 640.682312) 44971 POINT(218.658005 872.522339) 44972 POINT(815.43042 222.725784) 44973 POINT(314.321838 171.866669) 44974 POINT(796.272888 936.06134) 44975 POINT(822.175476 872.965637) 44976 POINT(52.839016 286.340332) 44977 POINT(484.786346 767.941833) 44978 POINT(603.18811 329.741241) 44979 POINT(106.57943 386.976257) 44980 POINT(965.740112 739.879395) 44981 POINT(918.933838 302.996613) 44982 POINT(77.5490036 776.790405) 44983 POINT(10.78267 806.67511) 44984 POINT(247.340271 224.128815) 44985 POINT(625.311829 718.478271) 44986 POINT(230.379288 164.529541) 44987 POINT(853.474182 248.315063) 44988 POINT(286.33316 697.122864) 44989 POINT(224.722046 538.246399) 44990 POINT(290.751068 608.637695) 44991 POINT(909.488464 861.981567) 44992 POINT(628.307739 474.162354) 44993 POINT(539.535339 704.339844) 44994 POINT(667.355042 459.868561) 44995 POINT(932.453186 917.981995) 44996 POINT(269.550262 142.887314) 44997 POINT(514.615234 432.611877) 44998 POINT(647.449341 258.712128) 44999 POINT(790.127869 168.245148) 45000 POINT(272.163788 380.289459) 45001 POINT(447.29776 739.386414) 45002 POINT(730.799316 962.251709) 45003 POINT(352.478821 607.028809) 45004 POINT(920.871155 926.090698) 45005 POINT(805.633179 681.891052) 45006 POINT(680.793518 385.628632) 45007 POINT(652.417786 162.460342) 45008 POINT(529.565308 225.700729) 45009 POINT(622.102051 28.073555) 45010 POINT(215.738907 949.942932) 45011 POINT(125.265884 38.9112282) 45012 POINT(49.6144142 546.007385) 45013 POINT(564.2771 25.5094242) 45014 POINT(760.410095 509.080872) 45015 POINT(425.38559 399.933533) 45016 POINT(832.125305 688.542053) 45017 POINT(304.409912 174.461166) 45018 POINT(831.247864 239.874863) 45019 POINT(917.057922 832.462646) 45020 POINT(252.813904 777.101135) 45021 POINT(736.677979 426.750183) 45022 POINT(438.171204 323.166016) 45023 POINT(441.563538 565.216919) 45024 POINT(420.82663 980.694275) 45025 POINT(923.837646 29.9542656) 45026 POINT(351.78894 417.751953) 45027 POINT(373.56015 727.702209) 45028 POINT(861.802307 447.72821) 45029 POINT(394.284637 315.545349) 45030 POINT(206.866455 734.868469) 45031 POINT(297.230713 30.9548168) 45032 POINT(890.658569 173.62558) 45033 POINT(556.031799 89.9333725) 45034 POINT(191.223328 857.766113) 45035 POINT(856.310608 127.133759) 45036 POINT(371.033691 1.6155057) 45037 POINT(545.872742 928.984192) 45038 POINT(503.808685 319.108337) 45039 POINT(461.983521 562.299255) 45040 POINT(696.007935 465.222839) 45041 POINT(790.006287 599.430237) 45042 POINT(856.520386 348.329956) 45043 POINT(578.770325 675.19165) 45044 POINT(118.67614 721.021729) 45045 POINT(916.655518 34.6953163) 45046 POINT(41.4052773 131.761246) 45047 POINT(250.916046 14.5502567) 45048 POINT(11.336113 391.508331) 45049 POINT(431.722565 778.005188) 45050 POINT(988.19812 390.234436) 45051 POINT(380.414368 848.489807) 45052 POINT(238.505493 740.486267) 45053 POINT(745.278137 572.258362) 45054 POINT(796.725769 72.0555038) 45055 POINT(22.6915359 121.677452) 45056 POINT(591.672302 237.147858) 45057 POINT(719.693176 823.982361) 45058 POINT(944.526062 483.637146) 45059 POINT(627.103882 779.530212) 45060 POINT(152.631653 230.073013) 45061 POINT(899.476379 997.801941) 45062 POINT(242.09761 235.752991) 45063 POINT(716.786255 723.3797) 45064 POINT(527.455627 148.656677) 45065 POINT(978.391052 608.199158) 45066 POINT(136.521362 970.287537) 45067 POINT(976.021973 786.527161) 45068 POINT(124.588715 377.015015) 45069 POINT(861.181091 366.943542) 45070 POINT(648.760559 950.52002) 45071 POINT(93.1868591 28.3381901) 45072 POINT(38.2563286 704.209351) 45073 POINT(885.244568 217.426071) 45074 POINT(570.769897 247.39476) 45075 POINT(993.453308 332.003662) 45076 POINT(642.320068 44.666153) 45077 POINT(381.850098 441.228333) 45078 POINT(545.612061 434.894226) 45079 POINT(287.822906 761.319702) 45080 POINT(699.907349 943.960022) 45081 POINT(777.001038 757.61322) 45082 POINT(307.102875 419.545441) 45083 POINT(863.68927 382.815643) 45084 POINT(650.589783 237.666428) 45085 POINT(858.807739 353.222504) 45086 POINT(665.073425 272.254272) 45087 POINT(547.015076 291.786346) 45088 POINT(749.57843 114.77903) 45089 POINT(671.238464 77.1197357) 45090 POINT(788.161255 705.076477) 45091 POINT(677.340149 394.261017) 45092 POINT(902.351501 752.226562) 45093 POINT(733.374756 615.417786) 45094 POINT(958.10968 141.197769) 45095 POINT(254.221085 91.6677475) 45096 POINT(363.322662 633.312256) 45097 POINT(928.807922 320.082275) 45098 POINT(247.878006 163.310013) 45099 POINT(37.3346367 390.929321) 45100 POINT(948.60614 640.438782) 45101 POINT(461.568054 508.103149) 45102 POINT(510.432556 493.734406) 45103 POINT(612.360107 119.952255) 45104 POINT(50.6279984 21.2697582) 45105 POINT(732.987061 470.079102) 45106 POINT(655.910645 559.056213) 45107 POINT(970.889587 866.948303) 45108 POINT(536.279602 367.51944) 45109 POINT(858.153503 131.360062) 45110 POINT(441.91983 122.700386) 45111 POINT(594.996887 981.752991) 45112 POINT(560.504028 816.849182) 45113 POINT(811.126465 294.245605) 45114 POINT(905.054199 430.79068) 45115 POINT(385.729187 478.283813) 45116 POINT(433.651642 790.890381) 45117 POINT(864.831238 656.337585) 45118 POINT(121.280396 809.799988) 45119 POINT(29.6674652 959.505554) 45120 POINT(943.635986 716.201233) 45121 POINT(74.5699615 347.997986) 45122 POINT(198.666718 678.912048) 45123 POINT(558.83667 749.749023) 45124 POINT(952.867493 340.004547) 45125 POINT(43.3359604 560.963501) 45126 POINT(277.997681 495.680969) 45127 POINT(926.626465 263.953064) 45128 POINT(665.136353 448.842346) 45129 POINT(102.629913 950.520813) 45130 POINT(845.138306 240.486633) 45131 POINT(396.018677 269.379608) 45132 POINT(689.062866 25.8226433) 45133 POINT(344.232849 885.247559) 45134 POINT(843.581848 663.450134) 45135 POINT(416.29892 102.57515) 45136 POINT(912.426697 140.92189) 45137 POINT(646.399109 291.175354) 45138 POINT(916.434448 666.886292) 45139 POINT(450.563721 92.8306198) 45140 POINT(245.634644 158.847076) 45141 POINT(952.190552 791.333679) 45142 POINT(604.162537 877.034668) 45143 POINT(908.716125 413.117096) 45144 POINT(492.779205 170.249115) 45145 POINT(578.180298 76.984108) 45146 POINT(477.745819 670.725098) 45147 POINT(939.276489 330.451813) 45148 POINT(965.186951 904.618958) 45149 POINT(258.512726 963.456299) 45150 POINT(996.453125 665.796204) 45151 POINT(338.21814 359.875275) 45152 POINT(965.050903 766.987061) 45153 POINT(962.314514 381.348633) 45154 POINT(345.274689 958.502136) 45155 POINT(244.168701 139.697235) 45156 POINT(935.685608 55.5850792) 45157 POINT(261.708496 632.958313) 45158 POINT(629.117737 196.803497) 45159 POINT(606.703552 940.395142) 45160 POINT(900.140503 863.918945) 45161 POINT(173.189957 604.156372) 45162 POINT(579.190552 915.355835) 45163 POINT(638.08783 595.525879) 45164 POINT(791.350647 648.240356) 45165 POINT(946.884521 263.526093) 45166 POINT(361.572388 426.170105) 45167 POINT(588.707764 300.238129) 45168 POINT(414.700073 950.193481) 45169 POINT(236.211639 703.432983) 45170 POINT(168.784683 958.336304) 45171 POINT(222.565323 161.448792) 45172 POINT(77.8193207 304.452759) 45173 POINT(444.738464 181.798065) 45174 POINT(22.2515659 670.863037) 45175 POINT(311.591034 603.473694) 45176 POINT(372.631714 932.455872) 45177 POINT(817.514465 108.696106) 45178 POINT(616.856262 624.602173) 45179 POINT(316.1651 733.879944) 45180 POINT(201.110306 425.876678) 45181 POINT(20.9362335 688.50293) 45182 POINT(98.3712311 792.389343) 45183 POINT(174.117844 556.552612) 45184 POINT(898.901978 257.269867) 45185 POINT(538.199646 976.167297) 45186 POINT(380.360229 710.947937) 45187 POINT(781.614014 482.446228) 45188 POINT(229.920151 620.360352) 45189 POINT(196.65329 435.28418) 45190 POINT(979.219727 433.765564) 45191 POINT(316.708679 933.217712) 45192 POINT(100.203651 798.73761) 45193 POINT(538.876587 695.998047) 45194 POINT(374.34906 31.0679359) 45195 POINT(29.9948406 958.913208) 45196 POINT(70.7837677 989.254944) 45197 POINT(551.062195 102.366653) 45198 POINT(585.00769 1.17811489) 45199 POINT(506.645142 698.10907) 45200 POINT(136.997482 265.223816) 45201 POINT(470.291229 811.666138) 45202 POINT(996.23877 606.963806) 45203 POINT(690.284241 197.383087) 45204 POINT(785.629883 154.530029) 45205 POINT(6.5470643 662.221802) 45206 POINT(463.308563 331.739075) 45207 POINT(151.510117 576.718506) 45208 POINT(41.4642029 129.090027) 45209 POINT(335.821747 761.698547) 45210 POINT(377.431366 360.900818) 45211 POINT(182.515488 778.420532) 45212 POINT(71.2627716 154.603088) 45213 POINT(647.426147 764.387695) 45214 POINT(685.1203 238.744812) 45215 POINT(304.144073 169.350891) 45216 POINT(925.898621 333.345154) 45217 POINT(861.623596 103.877815) 45218 POINT(819.324036 624.319946) 45219 POINT(682.848328 79.7632446) 45220 POINT(170.3013 587.788147) 45221 POINT(372.964172 26.5998974) 45222 POINT(122.580193 375.84314) 45223 POINT(772.398621 956.748108) 45224 POINT(476.076874 279.119049) 45225 POINT(320.204437 132.086716) 45226 POINT(620.737 30.1119232) 45227 POINT(218.826767 186.273254) 45228 POINT(733.107117 632.270508) 45229 POINT(935.455505 267.390015) 45230 POINT(940.363586 111.515511) 45231 POINT(696.968811 795.031555) 45232 POINT(874.12793 847.865112) 45233 POINT(983.210571 45.9491501) 45234 POINT(753.791382 604.659058) 45235 POINT(883.106018 181.784973) 45236 POINT(400.232544 821.513733) 45237 POINT(164.159195 965.307312) 45238 POINT(382.798218 355.280365) 45239 POINT(210.584961 747.620056) 45240 POINT(545.440796 462.197876) 45241 POINT(629.206116 83.4221497) 45242 POINT(95.2674255 126.051666) 45243 POINT(403.930084 795.506653) 45244 POINT(124.919846 704.004639) 45245 POINT(425.86731 479.92038) 45246 POINT(188.724686 527.023926) 45247 POINT(41.8463058 351.778717) 45248 POINT(374.138794 439.272308) 45249 POINT(782.226074 276.496063) 45250 POINT(170.475281 64.8847427) 45251 POINT(560.640808 625.631226) 45252 POINT(505.183105 766.243347) 45253 POINT(622.888123 819.755005) 45254 POINT(216.135193 110.864655) 45255 POINT(176.976135 667.455994) 45256 POINT(281.651764 140.610825) 45257 POINT(606.884338 740.158813) 45258 POINT(616.669373 674.041809) 45259 POINT(182.500275 412.813049) 45260 POINT(645.003784 247.883743) 45261 POINT(279.224792 992.32373) 45262 POINT(108.621124 484.957642) 45263 POINT(942.781189 706.063904) 45264 POINT(312.917633 672.284302) 45265 POINT(635.818787 654.78064) 45266 POINT(823.037048 43.8714981) 45267 POINT(719.107117 86.1662064) 45268 POINT(314.171082 727.931702) 45269 POINT(515.731018 221.40477) 45270 POINT(85.6610489 968.645264) 45271 POINT(124.095673 86.8589249) 45272 POINT(624.744873 139.353409) 45273 POINT(755.252991 352.075226) 45274 POINT(454.29364 189.163757) 45275 POINT(620.688599 554.441589) 45276 POINT(426.299164 610.906067) 45277 POINT(965.025574 566.724854) 45278 POINT(188.780197 278.360291) 45279 POINT(978.991333 18.5788956) 45280 POINT(20.8666058 708.476135) 45281 POINT(124.458153 164.794281) 45282 POINT(814.91449 484.331299) 45283 POINT(16.5491047 465.037994) 45284 POINT(104.551247 891.869507) 45285 POINT(926.945618 731.203918) 45286 POINT(565.612976 833.6875) 45287 POINT(265.035004 953.992615) 45288 POINT(928.218018 982.588623) 45289 POINT(954.893921 950.310669) 45290 POINT(261.0354 13.203229) 45291 POINT(429.95697 403.504211) 45292 POINT(854.602844 829.235291) 45293 POINT(315.32132 90.9163666) 45294 POINT(623.899231 604.990417) 45295 POINT(639.874817 515.018188) 45296 POINT(958.96814 441.564453) 45297 POINT(324.811615 448.247406) 45298 POINT(117.052841 649.836304) 45299 POINT(517.750305 256.187836) 45300 POINT(614.374939 404.256256) 45301 POINT(196.852386 232.926407) 45302 POINT(137.446259 444.009308) 45303 POINT(49.4361153 536.066895) 45304 POINT(452.837036 952.759521) 45305 POINT(455.09964 882.307983) 45306 POINT(803.9552 936.751038) 45307 POINT(72.9433746 708.687622) 45308 POINT(700.068359 696.101929) 45309 POINT(972.86792 536.152832) 45310 POINT(636.087158 88.8363113) 45311 POINT(967.008545 323.267639) 45312 POINT(644.230347 605.348389) 45313 POINT(122.152939 466.464996) 45314 POINT(136.41629 76.997757) 45315 POINT(778.614807 102.765144) 45316 POINT(918.030762 551.430542) 45317 POINT(504.750824 580.420105) 45318 POINT(661.666809 284.67453) 45319 POINT(596.505493 477.229828) 45320 POINT(348.721527 372.358032) 45321 POINT(133.547592 725.662415) 45322 POINT(995.681885 606.460144) 45323 POINT(451.358704 124.371979) 45324 POINT(361.987427 177.361496) 45325 POINT(733.807861 418.851318) 45326 POINT(722.087585 711.787048) 45327 POINT(403.177368 876.999512) 45328 POINT(313.413879 354.306305) 45329 POINT(42.3019676 791.188721) 45330 POINT(835.281555 562.801147) 45331 POINT(762.579834 45.4492798) 45332 POINT(665.166809 536.755676) 45333 POINT(596.367004 998.760315) 45334 POINT(25.4445553 662.041931) 45335 POINT(585.059326 672.865723) 45336 POINT(625.712769 608.349854) 45337 POINT(525.50531 80.8765335) 45338 POINT(726.596069 217.458954) 45339 POINT(675.914612 492.155243) 45340 POINT(726.852844 674.708313) 45341 POINT(284.882904 266.197998) 45342 POINT(326.282928 655.4599) 45343 POINT(348.435303 385.673553) 45344 POINT(825.0401 816.849182) 45345 POINT(103.095612 24.2851105) 45346 POINT(901.312134 687.097839) 45347 POINT(89.0588226 962.177185) 45348 POINT(182.894028 355.16214) 45349 POINT(155.832108 739.309875) 45350 POINT(466.008087 438.170776) 45351 POINT(100.599701 460.299286) 45352 POINT(612.021912 299.256042) 45353 POINT(122.567139 743.021973) 45354 POINT(997.795593 990.921143) 45355 POINT(418.282898 563.784302) 45356 POINT(139.70224 636.546021) 45357 POINT(835.178772 585.661133) 45358 POINT(439.479645 53.1842613) 45359 POINT(923.197205 870.944702) 45360 POINT(299.680176 121.22995) 45361 POINT(185.389984 846.360168) 45362 POINT(468.414185 370.252502) 45363 POINT(113.916878 699.277466) 45364 POINT(941.270691 265.345947) 45365 POINT(322.19278 488.684784) 45366 POINT(69.8209305 925.382751) 45367 POINT(939.422668 625.906494) 45368 POINT(401.160309 304.890198) 45369 POINT(440.921814 752.306824) 45370 POINT(854.841553 936.791077) 45371 POINT(345.085754 665.492065) 45372 POINT(988.743591 16.514204) 45373 POINT(142.400772 838.410156) 45374 POINT(623.475037 152.141052) 45375 POINT(438.362244 269.476654) 45376 POINT(998.525757 394.108978) 45377 POINT(423.593872 194.279984) 45378 POINT(888.373291 965.947449) 45379 POINT(341.97644 394.010651) 45380 POINT(882.06842 359.623413) 45381 POINT(850.452148 31.6268311) 45382 POINT(947.538635 440.979828) 45383 POINT(869.756714 728.631165) 45384 POINT(787.150452 878.752563) 45385 POINT(359.151855 823.549438) 45386 POINT(622.286194 401.66629) 45387 POINT(133.917801 803.740906) 45388 POINT(403.261536 79.6712036) 45389 POINT(433.680481 916.641296) 45390 POINT(961.40509 385.659271) 45391 POINT(72.4684677 102.161827) 45392 POINT(940.240845 231.776321) 45393 POINT(115.733459 67.5978546) 45394 POINT(53.2728653 389.142395) 45395 POINT(671.554871 488.515778) 45396 POINT(110.819313 731.4422) 45397 POINT(417.142334 667.782043) 45398 POINT(584.747498 22.1185589) 45399 POINT(349.933319 239.908447) 45400 POINT(188.018524 563.080017) 45401 POINT(225.563568 654.558777) 45402 POINT(938.981506 901.83551) 45403 POINT(571.398743 712.372131) 45404 POINT(564.805115 56.3332481) 45405 POINT(720.914062 624.809204) 45406 POINT(433.873688 855.668152) 45407 POINT(255.878525 209.747604) 45408 POINT(756.094727 144.029633) 45409 POINT(653.048218 463.887482) 45410 POINT(768.693481 779.191284) 45411 POINT(971.032959 935.163086) 45412 POINT(452.144226 740.548401) 45413 POINT(570.428406 882.385559) 45414 POINT(868.484009 800.840576) 45415 POINT(203.588074 999.993652) 45416 POINT(57.5679817 306.552124) 45417 POINT(235.048904 613.420715) 45418 POINT(94.1692886 741.473511) 45419 POINT(233.257904 341.16217) 45420 POINT(131.656921 143.569794) 45421 POINT(10.6316156 664.764648) 45422 POINT(220.862915 725.30603) 45423 POINT(261.996674 54.8688507) 45424 POINT(283.376282 470.708771) 45425 POINT(969.118164 942.982422) 45426 POINT(677.693726 198.114838) 45427 POINT(487.454742 93.3132095) 45428 POINT(368.362366 875.810303) 45429 POINT(824.743103 770.8526) 45430 POINT(289.536255 539.25946) 45431 POINT(751.893555 490.698303) 45432 POINT(285.434601 304.654114) 45433 POINT(575.478088 304.690552) 45434 POINT(164.352737 915.991638) 45435 POINT(246.449402 285.784576) 45436 POINT(276.583099 354.355164) 45437 POINT(908.397705 624.799194) 45438 POINT(429.424805 21.6849098) 45439 POINT(505.517212 90.4865723) 45440 POINT(397.08963 270.886322) 45441 POINT(8.52230453 320.122009) 45442 POINT(235.571945 864.02948) 45443 POINT(587.158691 817.482178) 45444 POINT(741.382385 715.697754) 45445 POINT(399.953308 717.275879) 45446 POINT(820.52594 824.903625) 45447 POINT(902.822998 424.531677) 45448 POINT(85.4225388 62.6952591) 45449 POINT(843.623718 514.491943) 45450 POINT(450.948822 800.545227) 45451 POINT(633.299133 659.178528) 45452 POINT(837.865112 714.376404) 45453 POINT(117.743446 472.595123) 45454 POINT(747.154114 348.81192) 45455 POINT(47.7038269 694.73291) 45456 POINT(579.930969 684.7146) 45457 POINT(715.028198 988.003113) 45458 POINT(235.409637 419.732544) 45459 POINT(328.440155 236.913345) 45460 POINT(17.8741016 486.418457) 45461 POINT(105.057587 826.829102) 45462 POINT(969.771973 426.215668) 45463 POINT(697.445862 150.249039) 45464 POINT(872.121887 181.484222) 45465 POINT(230.616196 34.5221672) 45466 POINT(718.722168 123.696548) 45467 POINT(737.682678 904.323242) 45468 POINT(83.6122284 306.497406) 45469 POINT(333.629425 52.0824966) 45470 POINT(521.442688 10.6665783) 45471 POINT(808.700562 172.162415) 45472 POINT(730.546387 267.928925) 45473 POINT(39.3131409 367.738647) 45474 POINT(384.395874 736.443848) 45475 POINT(366.244629 726.554749) 45476 POINT(217.722321 717.710083) 45477 POINT(866.414734 612.076843) 45478 POINT(510.935333 308.207886) 45479 POINT(813.253784 374.80603) 45480 POINT(625.807312 365.660187) 45481 POINT(976.930176 864.963318) 45482 POINT(735.000244 726.234802) 45483 POINT(233.234314 48.4191818) 45484 POINT(589.355774 662.879211) 45485 POINT(30.4401875 84.2019119) 45486 POINT(764.514526 44.4343681) 45487 POINT(986.873718 321.409363) 45488 POINT(710.071533 799.006775) 45489 POINT(466.216156 988.721802) 45490 POINT(430.932983 752.703308) 45491 POINT(688.893005 569.443481) 45492 POINT(305.761108 496.288666) 45493 POINT(400.503967 433.190582) 45494 POINT(388.444977 808.273987) 45495 POINT(524.518555 701.719177) 45496 POINT(245.617874 154.680481) 45497 POINT(596.902405 296.300018) 45498 POINT(609.669434 605.151611) 45499 POINT(213.587906 898.475159) 45500 POINT(728.924072 4.75665617) 45501 POINT(644.509949 171.573761) 45502 POINT(584.242859 663.896729) 45503 POINT(185.185287 69.2517014) 45504 POINT(126.951813 58.9836884) 45505 POINT(561.521545 697.397156) 45506 POINT(342.52359 848.424866) 45507 POINT(686.837341 810.49585) 45508 POINT(426.789856 816.953613) 45509 POINT(531.216125 192.070969) 45510 POINT(298.70517 472.157227) 45511 POINT(619.680969 485.832672) 45512 POINT(391.018372 876.464355) 45513 POINT(372.780975 370.043274) 45514 POINT(435.953064 742.773254) 45515 POINT(864.648254 678.301514) 45516 POINT(278.599304 829.871277) 45517 POINT(651.17926 307.073608) 45518 POINT(540.747681 612.977234) 45519 POINT(744.597351 671.080811) 45520 POINT(860.044434 83.9251633) 45521 POINT(38.2735443 494.937164) 45522 POINT(34.4386406 254.106735) 45523 POINT(53.4485474 801.703735) 45524 POINT(503.870239 531.34845) 45525 POINT(651.676147 780.376465) 45526 POINT(447.083954 50.0745125) 45527 POINT(775.770874 504.491669) 45528 POINT(311.541718 323.692993) 45529 POINT(618.305298 218.360641) 45530 POINT(731.969788 221.049103) 45531 POINT(218.894363 606.910034) 45532 POINT(634.554871 347.560394) 45533 POINT(36.3834267 386.313995) 45534 POINT(428.775085 929.443848) 45535 POINT(784.507996 977.777832) 45536 POINT(820.001465 390.054749) 45537 POINT(842.622314 503.825989) 45538 POINT(149.167114 995.197876) 45539 POINT(17.8346634 938.737793) 45540 POINT(699.904846 394.377991) 45541 POINT(830.596924 781.458008) 45542 POINT(980.683044 152.997009) 45543 POINT(889.858765 945.12146) 45544 POINT(164.812561 652.76593) 45545 POINT(211.817963 782.612549) 45546 POINT(183.073898 120.995865) 45547 POINT(491.713379 918.319763) 45548 POINT(143.574753 261.502411) 45549 POINT(662.771667 224.032211) 45550 POINT(985.857544 618.767578) 45551 POINT(450.218201 268.996094) 45552 POINT(448.933868 671.538513) 45553 POINT(759.201111 563.348572) 45554 POINT(386.646576 871.620667) 45555 POINT(409.690918 88.9559708) 45556 POINT(242.496399 708.282166) 45557 POINT(63.1641464 926.200378) 45558 POINT(596.888733 69.0869293) 45559 POINT(867.538269 209.21312) 45560 POINT(322.852264 5.41347551) 45561 POINT(898.907532 410.794922) 45562 POINT(184.976761 707.298767) 45563 POINT(499.766296 822.769104) 45564 POINT(47.0534134 400.11853) 45565 POINT(30.3577766 574.384644) 45566 POINT(26.2557735 738.137573) 45567 POINT(867.430359 152.84993) 45568 POINT(458.357483 470.925659) 45569 POINT(36.0347328 953.986511) 45570 POINT(885.275146 972.44989) 45571 POINT(56.1807594 210.819275) 45572 POINT(112.089066 64.3654327) 45573 POINT(166.452805 802.769287) 45574 POINT(827.704163 240.290527) 45575 POINT(368.440338 32.7154121) 45576 POINT(166.665176 352.965546) 45577 POINT(864.582458 833.888123) 45578 POINT(687.64917 398.06842) 45579 POINT(661.384644 909.334412) 45580 POINT(538.277527 694.630493) 45581 POINT(931.702209 655.147156) 45582 POINT(500.681366 390.63208) 45583 POINT(303.777527 32.0095177) 45584 POINT(305.419434 322.245605) 45585 POINT(528.979187 750.720276) 45586 POINT(153.704834 225.747833) 45587 POINT(10.8482313 664.712952) 45588 POINT(93.3902664 682.382874) 45589 POINT(819.374451 320.264771) 45590 POINT(499.863098 899.087341) 45591 POINT(8.77802563 422.832764) 45592 POINT(869.105835 63.2767067) 45593 POINT(74.976532 21.1120605) 45594 POINT(840.005249 19.7542896) 45595 POINT(78.9983673 489.954376) 45596 POINT(432.988647 4.77484417) 45597 POINT(501.624878 675.821716) 45598 POINT(981.801147 129.545761) 45599 POINT(37.3844986 636.202148) 45600 POINT(907.406494 866.760986) 45601 POINT(865.692627 305.236969) 45602 POINT(53.4157982 483.555969) 45603 POINT(114.561562 715.174438) 45604 POINT(690.074158 847.582581) 45605 POINT(247.156128 426.281464) 45606 POINT(870.724243 365.395691) 45607 POINT(520.923218 911.229736) 45608 POINT(666.027954 690.307556) 45609 POINT(888.585449 414.087494) 45610 POINT(935.367798 847.214172) 45611 POINT(203.5952 384.861115) 45612 POINT(953.227234 292.173157) 45613 POINT(161.449875 869.649414) 45614 POINT(75.5225143 272.873596) 45615 POINT(432.459656 121.119812) 45616 POINT(94.5340729 441.377167) 45617 POINT(129.137756 357.04541) 45618 POINT(332.072235 642.042358) 45619 POINT(388.488007 724.527405) 45620 POINT(402.766235 945.403748) 45621 POINT(50.3502769 578.374329) 45622 POINT(939.947754 503.634613) 45623 POINT(370.01413 623.641541) 45624 POINT(115.713989 486.362183) 45625 POINT(437.034607 39.9037476) 45626 POINT(157.714172 928.940002) 45627 POINT(581.210999 649.417358) 45628 POINT(124.457741 641.358704) 45629 POINT(957.780884 529.529663) 45630 POINT(258.059967 627.950562) 45631 POINT(721.918335 233.732651) 45632 POINT(301.017181 639.707947) 45633 POINT(560.614929 273.49646) 45634 POINT(207.659317 296.805969) 45635 POINT(759.100037 537.921875) 45636 POINT(870.309204 593.831848) 45637 POINT(678.376099 469.430969) 45638 POINT(436.952087 839.94165) 45639 POINT(327.59436 665.890869) 45640 POINT(846.58667 136.981964) 45641 POINT(275.378113 3.09253979) 45642 POINT(628.704285 197.440048) 45643 POINT(181.451569 742.359741) 45644 POINT(285.975403 628.45929) 45645 POINT(795.808228 547.84552) 45646 POINT(638.783203 126.247871) 45647 POINT(997.037354 44.0091896) 45648 POINT(994.421814 345.797272) 45649 POINT(782.327148 918.710205) 45650 POINT(503.401306 433.336456) 45651 POINT(615.212524 559.781067) 45652 POINT(374.31012 373.409454) 45653 POINT(47.5919113 506.950439) 45654 POINT(984.152893 839.54718) 45655 POINT(502.282898 326.311127) 45656 POINT(293.201294 218.495636) 45657 POINT(801.92926 856.508118) 45658 POINT(255.489166 864.777222) 45659 POINT(808.045593 635.448547) 45660 POINT(214.593719 537.536499) 45661 POINT(67.1467209 960.195618) 45662 POINT(148.846207 868.325317) 45663 POINT(904.140808 743.04248) 45664 POINT(343.29837 740.497742) 45665 POINT(39.4757919 651.40918) 45666 POINT(833.46106 652.630981) 45667 POINT(697.051453 21.6537361) 45668 POINT(206.968704 654.90332) 45669 POINT(803.899109 546.227783) 45670 POINT(935.982483 844.305054) 45671 POINT(327.475708 594.575562) 45672 POINT(920.519287 878.225647) 45673 POINT(947.621948 351.113678) 45674 POINT(879.30127 603.26355) 45675 POINT(91.4289017 364.523499) 45676 POINT(361.613556 924.58075) 45677 POINT(172.205475 993.031799) 45678 POINT(655.597473 78.9399414) 45679 POINT(548.317078 7.58243036) 45680 POINT(623.095703 780.504761) 45681 POINT(961.888 951.657837) 45682 POINT(339.420898 431.966705) 45683 POINT(817.353943 941.473694) 45684 POINT(402.187042 24.6281109) 45685 POINT(729.877014 377.445282) 45686 POINT(393.691162 170.379318) 45687 POINT(6.07823133 496.933044) 45688 POINT(436.463257 237.350632) 45689 POINT(634.903564 64.6738968) 45690 POINT(224.825577 11.3111038) 45691 POINT(563.359924 521.966125) 45692 POINT(703.073364 29.1631966) 45693 POINT(437.088135 115.203461) 45694 POINT(502.772003 472.310944) 45695 POINT(104.167198 430.974823) 45696 POINT(860.35675 650.047424) 45697 POINT(345.175018 176.508316) 45698 POINT(477.544312 920.829895) 45699 POINT(914.498901 274.224731) 45700 POINT(329.960327 807.425964) 45701 POINT(796.449158 466.669617) 45702 POINT(895.929199 866.087097) 45703 POINT(912.269409 747.849854) 45704 POINT(492.753296 16.4242039) 45705 POINT(506.159088 409.353912) 45706 POINT(150.352448 864.439026) 45707 POINT(313.566376 190.567902) 45708 POINT(703.280762 533.74353) 45709 POINT(925.025085 593.408081) 45710 POINT(976.463806 527.540771) 45711 POINT(633.584351 520.50592) 45712 POINT(215.195374 685.235168) 45713 POINT(451.421875 944.552551) 45714 POINT(356.819275 772.000916) 45715 POINT(937.669861 754.012268) 45716 POINT(654.049194 187.302521) 45717 POINT(359.080933 450.755615) 45718 POINT(285.110504 629.89801) 45719 POINT(450.296814 218.057724) 45720 POINT(374.024109 883.550049) 45721 POINT(421.666382 518.224365) 45722 POINT(698.711243 651.437012) 45723 POINT(728.42334 818.805176) 45724 POINT(891.625061 170.634079) 45725 POINT(642.336243 51.5477333) 45726 POINT(196.880432 174.192566) 45727 POINT(610.564575 761.154114) 45728 POINT(602.054504 271.061218) 45729 POINT(329.408356 649.380249) 45730 POINT(127.782814 507.796021) 45731 POINT(64.0482788 927.54126) 45732 POINT(152.9328 425.719269) 45733 POINT(998.508118 886.155884) 45734 POINT(249.557465 388.589569) 45735 POINT(870.303101 719.008301) 45736 POINT(175.223953 25.2132797) 45737 POINT(227.082764 510.672882) 45738 POINT(448.985474 895.684509) 45739 POINT(811.662476 537.519958) 45740 POINT(552.671509 676.619995) 45741 POINT(638.925781 533.992126) 45742 POINT(935.878052 388.023773) 45743 POINT(653.049011 245.746841) 45744 POINT(48.745163 211.06189) 45745 POINT(654.361267 601.943787) 45746 POINT(922.126648 921.4646) 45747 POINT(748.038513 879) 45748 POINT(904.043701 677.54187) 45749 POINT(505.997009 751.637085) 45750 POINT(41.4268417 35.5591774) 45751 POINT(541.183594 603.733582) 45752 POINT(967.294495 439.767792) 45753 POINT(290.46283 636.721558) 45754 POINT(669.009216 761.627014) 45755 POINT(587.112305 418.006958) 45756 POINT(29.5363674 595.236084) 45757 POINT(503.307617 572.747803) 45758 POINT(860.278381 196.876083) 45759 POINT(961.796997 371.524872) 45760 POINT(293.767365 69.6322479) 45761 POINT(587.237793 301.828522) 45762 POINT(843.083984 13.7436295) 45763 POINT(102.523834 146.350494) 45764 POINT(331.283569 904.64502) 45765 POINT(513.135803 204.901932) 45766 POINT(870.417114 829.291809) 45767 POINT(180.475266 684.112854) 45768 POINT(451.131897 453.580292) 45769 POINT(308.807495 800.250977) 45770 POINT(768.644653 446.407867) 45771 POINT(83.4702835 171.507156) 45772 POINT(140.543564 426.699646) 45773 POINT(752.162231 758.533508) 45774 POINT(700.966248 596.721497) 45775 POINT(966.290649 103.111961) 45776 POINT(121.911674 986.998047) 45777 POINT(153.540176 337.430237) 45778 POINT(506.598114 964.567444) 45779 POINT(112.153961 329.025146) 45780 POINT(615.820374 387.17334) 45781 POINT(266.156921 93.1181107) 45782 POINT(473.256989 951.984619) 45783 POINT(541.276917 964.545898) 45784 POINT(599.829407 959.8302) 45785 POINT(884.144409 961.130188) 45786 POINT(553.840759 856.656677) 45787 POINT(401.105438 790.107483) 45788 POINT(209.162231 625.499512) 45789 POINT(614.424866 315.761993) 45790 POINT(847.769165 877.864685) 45791 POINT(677.670776 301.891083) 45792 POINT(938.142395 466.843933) 45793 POINT(641.661804 415.037964) 45794 POINT(633.271484 639.934509) 45795 POINT(178.663452 887.029358) 45796 POINT(970.166809 332.458649) 45797 POINT(44.7907829 717.352844) 45798 POINT(358.975189 728.327087) 45799 POINT(56.200531 692.032166) 45800 POINT(789.200928 879.965942) 45801 POINT(369.139465 916.253296) 45802 POINT(781.473633 70.4338913) 45803 POINT(360.892853 629.046509) 45804 POINT(207.225845 945.641357) 45805 POINT(709.904968 181.427734) 45806 POINT(870.117371 861.301941) 45807 POINT(248.70369 621.786987) 45808 POINT(79.761734 636.597839) 45809 POINT(520.764221 16.8238487) 45810 POINT(191.096573 133.929901) 45811 POINT(498.22168 631.4505) 45812 POINT(275.539612 81.5934601) 45813 POINT(725.65094 350.914124) 45814 POINT(229.951416 4.4382205) 45815 POINT(938.354004 222.656296) 45816 POINT(916.58606 347.817596) 45817 POINT(482.239532 959.481812) 45818 POINT(514.967834 84.3315277) 45819 POINT(235.078964 430.426971) 45820 POINT(511.432434 633.5495) 45821 POINT(122.436676 87.9014053) 45822 POINT(463.485657 545.235535) 45823 POINT(240.779816 471.454895) 45824 POINT(366.855591 480.371704) 45825 POINT(378.185822 187.738678) 45826 POINT(588.967957 845.90448) 45827 POINT(770.813904 406.373566) 45828 POINT(582.500977 413.660767) 45829 POINT(990.150208 11.5978394) 45830 POINT(78.7487717 186.959167) 45831 POINT(239.354965 204.480286) 45832 POINT(7.93602848 116.365685) 45833 POINT(192.34671 920.493835) 45834 POINT(780.698608 345.730438) 45835 POINT(60.1784325 788.33374) 45836 POINT(773.126099 968.624512) 45837 POINT(367.560913 149.630142) 45838 POINT(321.616211 661.745361) 45839 POINT(97.9429321 542.875427) 45840 POINT(391.020142 544.558289) 45841 POINT(376.381195 951.313965) 45842 POINT(420.975342 592.809814) 45843 POINT(741.653625 462.202179) 45844 POINT(974.880066 447.619934) 45845 POINT(676.948242 987.841492) 45846 POINT(460.727112 442.302765) 45847 POINT(364.376099 576.841309) 45848 POINT(813.181458 687.166077) 45849 POINT(373.02356 82.5388489) 45850 POINT(25.1762619 570.213501) 45851 POINT(31.9020271 555.358826) 45852 POINT(401.35965 651.457642) 45853 POINT(754.738342 453.744293) 45854 POINT(434.522766 643.616089) 45855 POINT(327.951111 406.355957) 45856 POINT(42.3699875 616.084473) 45857 POINT(729.392395 854.370178) 45858 POINT(261.478149 256.690002) 45859 POINT(74.6262207 20.386858) 45860 POINT(296.976898 641.848999) 45861 POINT(778.930359 618.783997) 45862 POINT(442.437897 556.058899) 45863 POINT(544.221436 886.056152) 45864 POINT(889.880859 662.431519) 45865 POINT(726.229614 479.099426) 45866 POINT(873.010742 344.135162) 45867 POINT(482.115875 690.532104) 45868 POINT(159.238739 539.700867) 45869 POINT(644.09375 154.570267) 45870 POINT(312.276062 501.320801) 45871 POINT(890.368713 671.937805) 45872 POINT(774.827515 873.320618) 45873 POINT(698.851013 140.631271) 45874 POINT(10.9611044 467.32901) 45875 POINT(57.7637024 529.558716) 45876 POINT(244.046585 391.343048) 45877 POINT(584.717346 828.231628) 45878 POINT(725.800293 952.556335) 45879 POINT(764.434021 417.531769) 45880 POINT(675.150513 819.76886) 45881 POINT(475.589355 69.4585953) 45882 POINT(685.658386 12.3475494) 45883 POINT(937.83197 48.6585808) 45884 POINT(373.547058 231.593613) 45885 POINT(97.6918716 572.049866) 45886 POINT(634.570435 110.160942) 45887 POINT(291.689789 217.210358) 45888 POINT(109.69326 9.64628983) 45889 POINT(609.511597 53.2454033) 45890 POINT(292.671387 820.054871) 45891 POINT(640.750916 113.069916) 45892 POINT(316.06543 722.569153) 45893 POINT(464.70697 912.530518) 45894 POINT(448.058289 374.58078) 45895 POINT(651.434875 644.282227) 45896 POINT(45.8757935 409.573303) 45897 POINT(329.191132 293.173889) 45898 POINT(420.949188 351.082153) 45899 POINT(762.229919 611.061707) 45900 POINT(257.652771 997.145752) 45901 POINT(425.344055 794.065613) 45902 POINT(826.071777 407.562469) 45903 POINT(887.492371 981.53064) 45904 POINT(877.497986 829.672058) 45905 POINT(384.316437 766.211975) 45906 POINT(400.036652 128.699738) 45907 POINT(304.462921 707.940186) 45908 POINT(134.777985 585.977234) 45909 POINT(801.646301 82.3450546) 45910 POINT(157.519363 723.249023) 45911 POINT(815.693115 491.851776) 45912 POINT(867.203552 175.077927) 45913 POINT(211.917526 503.457397) 45914 POINT(293.395844 525.988403) 45915 POINT(877.709717 657.733154) 45916 POINT(847.69635 556.976562) 45917 POINT(124.946548 282.672516) 45918 POINT(57.5464935 0.528187394) 45919 POINT(891.624573 826.64978) 45920 POINT(698.13562 818.117737) 45921 POINT(98.9913254 444.714813) 45922 POINT(294.864594 213.716461) 45923 POINT(262.533447 395.209442) 45924 POINT(624.02533 246.167175) 45925 POINT(565.735474 258.342773) 45926 POINT(465.074188 558.039551) 45927 POINT(151.927567 919.643982) 45928 POINT(29.3157482 595.060425) 45929 POINT(267.307007 779.462097) 45930 POINT(735.283752 835.328308) 45931 POINT(70.9763718 380.888489) 45932 POINT(52.0594559 208.810028) 45933 POINT(717.349792 984.235962) 45934 POINT(172.772247 683.24646) 45935 POINT(592.421387 963.745422) 45936 POINT(199.277344 181.346985) 45937 POINT(56.1730347 934.361816) 45938 POINT(156.323715 725.451233) 45939 POINT(494.954895 421.697144) 45940 POINT(553.354858 269.712646) 45941 POINT(34.2629128 620.785461) 45942 POINT(871.49762 756.979309) 45943 POINT(596.33905 318.657715) 45944 POINT(472.484406 849.205444) 45945 POINT(628.946655 617.474609) 45946 POINT(158.542389 738.326904) 45947 POINT(380.154968 439.929688) 45948 POINT(314.115356 801.626709) 45949 POINT(975.759033 443.47583) 45950 POINT(41.2293091 364.856079) 45951 POINT(275.953094 446.860382) 45952 POINT(473.067566 861.557678) 45953 POINT(879.067505 579.330444) 45954 POINT(980.705078 502.572601) 45955 POINT(113.709343 413.167267) 45956 POINT(944.911011 610.640442) 45957 POINT(155.771332 413.026367) 45958 POINT(270.531128 836.986694) 45959 POINT(840.874573 225.628647) 45960 POINT(700.407837 6.12345123) 45961 POINT(461.396271 1.01396477) 45962 POINT(17.397892 668.679932) 45963 POINT(63.9376755 957.813171) 45964 POINT(388.260223 57.4713936) 45965 POINT(49.6663742 421.417145) 45966 POINT(836.573608 907.367371) 45967 POINT(356.30481 232.747803) 45968 POINT(271.100372 23.6290302) 45969 POINT(124.639763 669.420105) 45970 POINT(731.96582 965.656555) 45971 POINT(560.430969 278.899963) 45972 POINT(843.607361 293.566803) 45973 POINT(58.7553635 498.913788) 45974 POINT(627.746094 434.37085) 45975 POINT(504.522552 853.577454) 45976 POINT(281.828064 934.025635) 45977 POINT(770.643738 349.836761) 45978 POINT(671.806824 133.216675) 45979 POINT(652.761597 458.824799) 45980 POINT(729.226074 740.917175) 45981 POINT(983.313721 517.246582) 45982 POINT(740.890747 373.739563) 45983 POINT(212.887146 307.122131) 45984 POINT(437.677826 514.624695) 45985 POINT(916.334595 16.0099888) 45986 POINT(543.053284 45.9279861) 45987 POINT(136.09967 307.669373) 45988 POINT(950.580322 194.489441) 45989 POINT(204.890335 174.101028) 45990 POINT(335.188812 445.487091) 45991 POINT(261.638947 938.764343) 45992 POINT(840.429382 434.055511) 45993 POINT(484.091461 847.848572) 45994 POINT(551.671387 595.719604) 45995 POINT(582.018005 247.760468) 45996 POINT(994.6745 176.18602) 45997 POINT(128.687317 294.075439) 45998 POINT(574.731628 186.114624) 45999 POINT(234.778473 377.316711) 46000 POINT(81.3490524 795.952271) 46001 POINT(96.3291016 156.923874) 46002 POINT(468.011017 149.15863) 46003 POINT(362.765778 955.127563) 46004 POINT(619.923157 419.236084) 46005 POINT(686.792236 731.262268) 46006 POINT(741.806396 327.548798) 46007 POINT(427.305237 404.049255) 46008 POINT(33.0184975 96.2760696) 46009 POINT(300.074341 649.921509) 46010 POINT(121.835701 645.900513) 46011 POINT(907.292908 730.51355) 46012 POINT(161.072205 611.925171) 46013 POINT(953.043213 408.608917) 46014 POINT(852.928894 694.206848) 46015 POINT(572.098022 631.347595) 46016 POINT(984.731018 848.178711) 46017 POINT(397.315765 690.200745) 46018 POINT(284.86557 654.720703) 46019 POINT(677.306274 822.594971) 46020 POINT(718.702515 779.569275) 46021 POINT(170.308945 279.214966) 46022 POINT(359.653931 59.5954094) 46023 POINT(499.717072 338.65918) 46024 POINT(15.9855127 378.313965) 46025 POINT(806.908813 467.618164) 46026 POINT(147.863281 953.532288) 46027 POINT(601.638672 176.068054) 46028 POINT(752.847351 933.640137) 46029 POINT(740.964233 244.72139) 46030 POINT(766.194885 653.849304) 46031 POINT(94.4104538 63.3832741) 46032 POINT(752.610168 548.502808) 46033 POINT(133.817444 236.771805) 46034 POINT(849.2948 449.797363) 46035 POINT(957.212219 327.256683) 46036 POINT(850.255005 866.947266) 46037 POINT(981.342896 315.948456) 46038 POINT(245.883377 263.616608) 46039 POINT(159.604645 794.360901) 46040 POINT(900.046509 406.659271) 46041 POINT(371.473145 33.821743) 46042 POINT(762.596069 507.737335) 46043 POINT(934.877075 419.898499) 46044 POINT(684.827271 223.783737) 46045 POINT(690.948303 550.938293) 46046 POINT(588.500854 115.695969) 46047 POINT(56.1617889 865.621155) 46048 POINT(198.325562 20.8826027) 46049 POINT(913.033142 532.043823) 46050 POINT(499.077209 998.748962) 46051 POINT(378.407135 563.765503) 46052 POINT(440.7659 223.941284) 46053 POINT(837.20459 555.558655) 46054 POINT(60.5129013 985.832886) 46055 POINT(226.683975 898.040405) 46056 POINT(693.26709 0.621971786) 46057 POINT(297.318878 946.272339) 46058 POINT(833.494507 641.43219) 46059 POINT(434.933441 8.77566147) 46060 POINT(217.957535 669.501526) 46061 POINT(906.527405 581.823914) 46062 POINT(10.2373629 224.080551) 46063 POINT(969.146301 386.569885) 46064 POINT(468.433197 458.820496) 46065 POINT(865.215393 146.388428) 46066 POINT(9.32279301 447.635895) 46067 POINT(105.097061 857.250854) 46068 POINT(189.128693 113.309082) 46069 POINT(722.497864 509.089355) 46070 POINT(299.97821 638.132324) 46071 POINT(73.1396179 780.688721) 46072 POINT(232.367493 418.944397) 46073 POINT(752.313965 390.009705) 46074 POINT(130.758545 340.928253) 46075 POINT(931.202271 286.978821) 46076 POINT(528.302185 318.033325) 46077 POINT(781.918701 243.275665) 46078 POINT(897.155762 426.031311) 46079 POINT(182.004761 155.738098) 46080 POINT(405.651459 920.803528) 46081 POINT(893.57843 334.538147) 46082 POINT(598.484985 263.897461) 46083 POINT(311.651581 507.733978) 46084 POINT(380.085815 384.724579) 46085 POINT(409.53595 319.279175) 46086 POINT(206.464722 599.663696) 46087 POINT(994.138611 822.793335) 46088 POINT(602.308594 329.070038) 46089 POINT(965.816528 238.721985) 46090 POINT(796.230774 340.689117) 46091 POINT(179.943771 923.914185) 46092 POINT(389.325165 179.771179) 46093 POINT(282.205902 741.724487) 46094 POINT(975.09137 590.4422) 46095 POINT(666.754211 474.729401) 46096 POINT(650.088074 598.400452) 46097 POINT(443.738068 513.888123) 46098 POINT(485.153687 911.187134) 46099 POINT(36.5161285 225.949539) 46100 POINT(560.65094 939.163879) 46101 POINT(123.289108 349.215454) 46102 POINT(853.020996 978.58551) 46103 POINT(35.3755951 716.136719) 46104 POINT(544.159363 499.068665) 46105 POINT(195.380356 35.0009613) 46106 POINT(613.079773 503.243561) 46107 POINT(571.712097 383.139374) 46108 POINT(467.453156 178.973343) 46109 POINT(618.052917 237.241455) 46110 POINT(940.467285 537.400269) 46111 POINT(512.348572 74.7435455) 46112 POINT(978.748108 57.0148468) 46113 POINT(292.682739 871.704529) 46114 POINT(495.630066 59.3640404) 46115 POINT(368.155701 760.573547) 46116 POINT(79.8122559 290.94754) 46117 POINT(850.863342 24.8939457) 46118 POINT(904.453796 33.9716759) 46119 POINT(777.649231 842.000427) 46120 POINT(351.245728 712.217529) 46121 POINT(962.991394 349.503357) 46122 POINT(576.265564 984.25531) 46123 POINT(420.81424 832.794617) 46124 POINT(730.919495 452.134796) 46125 POINT(814.947876 0.550962687) 46126 POINT(496.5802 477.66925) 46127 POINT(625.270691 340.484009) 46128 POINT(383.323151 949.294556) 46129 POINT(857.275452 601.239075) 46130 POINT(222.281967 829.640564) 46131 POINT(463.029633 216.857101) 46132 POINT(991.51709 727.439087) 46133 POINT(795.510376 431.684814) 46134 POINT(554.003662 757.873352) 46135 POINT(578.469971 465.775696) 46136 POINT(753.580261 404.239044) 46137 POINT(60.8356819 19.0185261) 46138 POINT(263.785583 682.748962) 46139 POINT(336.800842 997.439636) 46140 POINT(471.889526 494.013672) 46141 POINT(676.979004 573.949646) 46142 POINT(815.666687 862.32959) 46143 POINT(137.155716 600.471619) 46144 POINT(386.262085 701.197327) 46145 POINT(522.287415 266.749725) 46146 POINT(232.681 574.886292) 46147 POINT(895.597656 566.666992) 46148 POINT(820.937805 566.399536) 46149 POINT(475.168976 164.705063) 46150 POINT(135.802689 117.536766) 46151 POINT(770.69873 247.980408) 46152 POINT(290.573486 523.194336) 46153 POINT(826.598267 763.442261) 46154 POINT(508.702637 476.491821) 46155 POINT(177.987732 451.297302) 46156 POINT(441.866913 651.314331) 46157 POINT(645.141174 436.131958) 46158 POINT(926.751221 142.574524) 46159 POINT(19.445528 983.764526) 46160 POINT(95.1227646 670.712952) 46161 POINT(487.962616 797.427612) 46162 POINT(829.520752 695.088501) 46163 POINT(840.357483 849.931946) 46164 POINT(694.01886 10.9987669) 46165 POINT(965.537415 933.097046) 46166 POINT(913.112671 457.777649) 46167 POINT(318.217316 571.682068) 46168 POINT(672.026367 112.033676) 46169 POINT(188.293594 681.656921) 46170 POINT(871.953491 742.532471) 46171 POINT(87.0089111 852.903015) 46172 POINT(600.381592 464.026276) 46173 POINT(50.1744614 670.921875) 46174 POINT(529.275391 939.662354) 46175 POINT(405.074646 343.084503) 46176 POINT(495.205048 279.241028) 46177 POINT(637.113953 610.23053) 46178 POINT(861.316223 987.96814) 46179 POINT(585.912964 567.495605) 46180 POINT(330.305389 102.482361) 46181 POINT(787.677246 418.213226) 46182 POINT(542.345093 563.511597) 46183 POINT(428.62973 186.327271) 46184 POINT(627.403748 113.802368) 46185 POINT(978.627197 126.317863) 46186 POINT(415.939117 662.895081) 46187 POINT(108.400864 621.160828) 46188 POINT(976.958557 354.419647) 46189 POINT(259.933228 139.910675) 46190 POINT(732.508362 125.025238) 46191 POINT(117.187218 744.349243) 46192 POINT(480.46521 615.625793) 46193 POINT(921.750183 361.62204) 46194 POINT(83.8846054 34.7528954) 46195 POINT(881.074524 765.375488) 46196 POINT(399.052429 270.495331) 46197 POINT(940.148376 885.707397) 46198 POINT(712.861938 882.441101) 46199 POINT(622.994812 667.977173) 46200 POINT(743.389709 899.503601) 46201 POINT(18.8882618 457.546112) 46202 POINT(278.895813 815.430542) 46203 POINT(888.217957 552.805542) 46204 POINT(146.368271 163.696762) 46205 POINT(221.286896 659.001404) 46206 POINT(220.738205 310.534027) 46207 POINT(904.885254 22.6113834) 46208 POINT(122.711433 12.8465967) 46209 POINT(769.234558 828.217651) 46210 POINT(572.607117 121.106102) 46211 POINT(612.989807 310.428284) 46212 POINT(738.61615 981.061768) 46213 POINT(575.675171 51.5318909) 46214 POINT(462.55835 407.898193) 46215 POINT(762.590271 195.949402) 46216 POINT(789.723267 18.6170387) 46217 POINT(472.373993 175.5271) 46218 POINT(550.048096 549.823425) 46219 POINT(955.67926 881.271118) 46220 POINT(817.158142 36.2999763) 46221 POINT(896.551758 678.859009) 46222 POINT(344.245178 248.919449) 46223 POINT(886.008301 904.403137) 46224 POINT(679.080566 97.3647766) 46225 POINT(7.97441149 416.336639) 46226 POINT(685.472351 193.211807) 46227 POINT(317.306091 857.421387) 46228 POINT(939.125854 982.220886) 46229 POINT(822.344116 701.841064) 46230 POINT(669.225708 721.843994) 46231 POINT(532.70752 145.866196) 46232 POINT(33.3161125 672.274109) 46233 POINT(967.344727 932.015869) 46234 POINT(945.542236 648.755127) 46235 POINT(86.8463287 276.965302) 46236 POINT(33.4651413 151.87587) 46237 POINT(94.4540863 969.267273) 46238 POINT(636.055664 644.349426) 46239 POINT(696.944153 196.487717) 46240 POINT(837.796326 811.126953) 46241 POINT(812.642273 800.460205) 46242 POINT(76.9006653 349.016327) 46243 POINT(20.3642159 7.51064014) 46244 POINT(788.437317 647.319214) 46245 POINT(249.332474 566.801208) 46246 POINT(217.696655 698.024231) 46247 POINT(883.478699 999.108643) 46248 POINT(40.6512527 409.08902) 46249 POINT(989.510498 920.748474) 46250 POINT(785.16156 774.223816) 46251 POINT(250.332748 288.950592) 46252 POINT(490.109955 804.895508) 46253 POINT(195.62471 807.391602) 46254 POINT(254.47757 873.16272) 46255 POINT(849.470764 541.016785) 46256 POINT(702.208435 906.224487) 46257 POINT(168.927795 190.596024) 46258 POINT(262.349915 364.625946) 46259 POINT(913.423035 158.12442) 46260 POINT(81.3673019 915.958984) 46261 POINT(477.168427 948.306702) 46262 POINT(342.771118 365.280792) 46263 POINT(927.733643 68.6773148) 46264 POINT(468.46286 543.646545) 46265 POINT(44.0490952 146.759476) 46266 POINT(769.822693 199.019882) 46267 POINT(635.044312 728.031311) 46268 POINT(460.972076 331.931152) 46269 POINT(272.62442 169.948334) 46270 POINT(851.417114 114.759018) 46271 POINT(794.629883 237.094131) 46272 POINT(13.1133184 412.208923) 46273 POINT(357.821472 728.549194) 46274 POINT(233.702377 755.86084) 46275 POINT(358.91571 544.253906) 46276 POINT(292.209717 332.603149) 46277 POINT(432.522156 601.602173) 46278 POINT(647.923523 431.019928) 46279 POINT(795.889343 541.459229) 46280 POINT(342.697479 797.64563) 46281 POINT(87.1548462 74.606102) 46282 POINT(59.8532219 323.358307) 46283 POINT(259.950928 491.247162) 46284 POINT(840.646484 386.58902) 46285 POINT(104.500961 429.28006) 46286 POINT(366.476562 392.644745) 46287 POINT(193.631134 628.745605) 46288 POINT(109.355789 576.064209) 46289 POINT(959.429138 513.098938) 46290 POINT(625.433044 874.965271) 46291 POINT(728.737122 971.149658) 46292 POINT(610.532471 682.83606) 46293 POINT(747.528442 370.811096) 46294 POINT(299.79126 964.836487) 46295 POINT(947.869812 336.900696) 46296 POINT(325.7565 663.699646) 46297 POINT(727.11908 155.498047) 46298 POINT(154.050354 476.666809) 46299 POINT(665.889465 327.772675) 46300 POINT(799.381104 62.098465) 46301 POINT(585.877136 53.3373718) 46302 POINT(246.833481 25.6356773) 46303 POINT(895.788269 559.295532) 46304 POINT(126.712212 774.834656) 46305 POINT(876.318054 754.082092) 46306 POINT(931.559021 542.474121) 46307 POINT(574.562317 738.424194) 46308 POINT(840.255981 727.280823) 46309 POINT(803.640564 78.370697) 46310 POINT(898.444702 742.294373) 46311 POINT(442.057648 282.086975) 46312 POINT(472.019836 991.79248) 46313 POINT(694.941772 733.334045) 46314 POINT(69.5212097 504.530548) 46315 POINT(189.398224 46.2232819) 46316 POINT(551.296265 361.557343) 46317 POINT(30.5703106 809.566772) 46318 POINT(592.901123 989.215637) 46319 POINT(123.485947 392.148834) 46320 POINT(935.054749 900.909363) 46321 POINT(876.393982 555.382446) 46322 POINT(273.370239 714.235535) 46323 POINT(630.196472 255.561432) 46324 POINT(662.012695 533.172974) 46325 POINT(920.015015 168.372864) 46326 POINT(523.437927 748.863464) 46327 POINT(661.276611 103.227631) 46328 POINT(971.650757 298.391327) 46329 POINT(84.4741821 829.64447) 46330 POINT(322.304077 640.792847) 46331 POINT(318.582031 663.367432) 46332 POINT(735.884338 515.833557) 46333 POINT(869.742798 972.705017) 46334 POINT(729.770081 687.051086) 46335 POINT(364.177979 97.9801483) 46336 POINT(313.796936 719.963196) 46337 POINT(155.309753 826.826599) 46338 POINT(217.941452 683.589783) 46339 POINT(145.955994 848.831482) 46340 POINT(758.788086 903.589844) 46341 POINT(186.427994 603.811646) 46342 POINT(455.641144 344.012299) 46343 POINT(995.805481 733.548401) 46344 POINT(382.682312 298.215118) 46345 POINT(862.093018 307.440094) 46346 POINT(208.771011 164.812454) 46347 POINT(631.009338 994.244995) 46348 POINT(912.791748 649.122986) 46349 POINT(244.583969 36.4792175) 46350 POINT(704.431091 632.662781) 46351 POINT(469.417023 908.328491) 46352 POINT(865.620483 701.553162) 46353 POINT(418.404877 824.985962) 46354 POINT(147.425476 318.704773) 46355 POINT(55.0807648 259.612549) 46356 POINT(304.842621 404.336761) 46357 POINT(440.722778 517.736572) 46358 POINT(74.8542938 585.457825) 46359 POINT(983.423523 437.589478) 46360 POINT(851.384338 158.660004) 46361 POINT(145.905869 913.967468) 46362 POINT(887.811646 343.876556) 46363 POINT(813.640015 183.691895) 46364 POINT(669.881531 292.163544) 46365 POINT(993.523315 429.213898) 46366 POINT(208.779358 541.252502) 46367 POINT(460.915344 35.59869) 46368 POINT(168.483276 822.372192) 46369 POINT(982.176514 822.884888) 46370 POINT(679.127502 835.067139) 46371 POINT(472.177917 334.118561) 46372 POINT(317.915283 488.48941) 46373 POINT(890.788635 118.31282) 46374 POINT(433.20163 213.570404) 46375 POINT(406.486481 251.909622) 46376 POINT(820.91272 976.88031) 46377 POINT(754.487549 702.369995) 46378 POINT(763.798218 160.770706) 46379 POINT(264.784546 679.271057) 46380 POINT(844.577209 243.105637) 46381 POINT(533.974792 733.34375) 46382 POINT(428.399811 331.687286) 46383 POINT(543.63678 959.468628) 46384 POINT(665.908875 842.15802) 46385 POINT(395.281708 408.615295) 46386 POINT(636.361084 603.130066) 46387 POINT(23.6965084 404.533203) 46388 POINT(374.708069 218.59201) 46389 POINT(881.07074 347.786896) 46390 POINT(4.3079257 795.936035) 46391 POINT(846.034607 242.196884) 46392 POINT(728.238647 979.526367) 46393 POINT(525.148132 332.255737) 46394 POINT(670.332153 326.504395) 46395 POINT(778.094666 145.609543) 46396 POINT(358.488159 276.038635) 46397 POINT(138.612503 908.832825) 46398 POINT(317.13382 538.638977) 46399 POINT(825.920166 779.703308) 46400 POINT(795.556763 552.259338) 46401 POINT(79.0707626 912.857422) 46402 POINT(70.0847321 491.117523) 46403 POINT(510.433807 861.550293) 46404 POINT(189.651917 86.5123291) 46405 POINT(303.611298 795.359192) 46406 POINT(108.25563 532.074036) 46407 POINT(192.931396 76.7854538) 46408 POINT(189.360504 945.137939) 46409 POINT(901.731873 749.171326) 46410 POINT(354.771362 78.1933289) 46411 POINT(808.584961 820.141968) 46412 POINT(165.316193 197.173859) 46413 POINT(106.177605 20.4999428) 46414 POINT(797.427124 634.880554) 46415 POINT(246.633606 135.374298) 46416 POINT(856.074463 496.85733) 46417 POINT(487.652008 465.306763) 46418 POINT(831.320496 242.983978) 46419 POINT(402.072449 418.320129) 46420 POINT(556.953796 430.952484) 46421 POINT(153.622345 363.962555) 46422 POINT(512.323486 218.311569) 46423 POINT(616.033691 416.578705) 46424 POINT(172.795685 349.194763) 46425 POINT(291.947662 742.981934) 46426 POINT(763.539185 262.097565) 46427 POINT(820.685852 810.260132) 46428 POINT(812.043091 748.683594) 46429 POINT(326.816345 969.250549) 46430 POINT(386.458771 763.738342) 46431 POINT(209.360641 190.486588) 46432 POINT(112.230446 666.843994) 46433 POINT(287.487732 180.007294) 46434 POINT(194.353134 391.53125) 46435 POINT(663.749268 565.802551) 46436 POINT(155.92514 952.616272) 46437 POINT(729.589294 190.946869) 46438 POINT(707.506165 872.813904) 46439 POINT(487.393341 621.378601) 46440 POINT(661.354675 731.822388) 46441 POINT(694.230408 885.157837) 46442 POINT(628.214661 201.816254) 46443 POINT(218.327927 831.869019) 46444 POINT(113.399742 860.196533) 46445 POINT(741.949585 727.214478) 46446 POINT(748.051941 381.700867) 46447 POINT(423.617004 186.010544) 46448 POINT(638.328369 666.35675) 46449 POINT(56.5213127 969.591125) 46450 POINT(30.7110786 206.681) 46451 POINT(414.654846 719.525635) 46452 POINT(719.59137 827.032654) 46453 POINT(977.906067 322.670441) 46454 POINT(360.81546 520.771301) 46455 POINT(764.489563 272.621155) 46456 POINT(302.19577 788.154968) 46457 POINT(94.1341629 344.966858) 46458 POINT(852.403503 851.638367) 46459 POINT(357.057251 889.348816) 46460 POINT(439.616364 747.94928) 46461 POINT(198.673279 576.790161) 46462 POINT(670.365173 311.183472) 46463 POINT(453.098999 58.3208771) 46464 POINT(399.902679 851.968689) 46465 POINT(2.83576393 488.424133) 46466 POINT(33.9281731 178.903809) 46467 POINT(918.664978 557.751282) 46468 POINT(66.5828323 915.035461) 46469 POINT(482.041168 642.99707) 46470 POINT(443.362518 639.742249) 46471 POINT(329.493134 12.5185089) 46472 POINT(545.161438 681.354004) 46473 POINT(130.255829 84.5733185) 46474 POINT(199.391006 735.049866) 46475 POINT(138.18222 396.923401) 46476 POINT(117.453995 361.59436) 46477 POINT(198.690475 853.595215) 46478 POINT(969.365417 703.449829) 46479 POINT(470.963043 624.041565) 46480 POINT(73.6956329 944.53595) 46481 POINT(202.843369 704.657898) 46482 POINT(495.087036 537.804321) 46483 POINT(407.002777 51.0466003) 46484 POINT(496.306915 570.899414) 46485 POINT(596.235413 555.699768) 46486 POINT(534.221252 765.152283) 46487 POINT(785.56134 199.606827) 46488 POINT(769.395508 78.2834702) 46489 POINT(529.690735 933.043274) 46490 POINT(780.575684 168.396957) 46491 POINT(684.951538 241.435043) 46492 POINT(444.517181 678.664246) 46493 POINT(41.7744217 693.322937) 46494 POINT(818.082275 411.688904) 46495 POINT(722.136536 831.297058) 46496 POINT(105.915001 613.700684) 46497 POINT(859.006653 601.188171) 46498 POINT(129.143417 305.862671) 46499 POINT(232.932297 683.261658) 46500 POINT(47.4013557 548.132202) 46501 POINT(223.730606 920.770386) 46502 POINT(800.073242 755.94989) 46503 POINT(210.164642 880.700684) 46504 POINT(898.242126 407.840973) 46505 POINT(813.019165 39.255661) 46506 POINT(844.684509 269.705658) 46507 POINT(600.763489 286.525208) 46508 POINT(816.848022 346.69162) 46509 POINT(863.762939 282.505341) 46510 POINT(1.64333558 274.249054) 46511 POINT(192.659714 577.369812) 46512 POINT(508.773621 535.050293) 46513 POINT(77.0905304 505.519135) 46514 POINT(452.032043 387.332275) 46515 POINT(858.483459 363.913696) 46516 POINT(119.468964 502.923309) 46517 POINT(739.52948 744.635925) 46518 POINT(150.633652 220.41803) 46519 POINT(365.444 579.253784) 46520 POINT(2.42543697 841.945374) 46521 POINT(768.824158 203.7202) 46522 POINT(367.769196 252.657715) 46523 POINT(309.406128 818.221802) 46524 POINT(469.801483 172.986282) 46525 POINT(69.0840607 113.182434) 46526 POINT(598.090759 808.027527) 46527 POINT(986.059143 592.763855) 46528 POINT(895.309875 419.933563) 46529 POINT(662.945862 548.534363) 46530 POINT(208.553421 192.293686) 46531 POINT(173.208145 531.977112) 46532 POINT(958.093384 595.248413) 46533 POINT(557.687134 124.280655) 46534 POINT(69.8586655 602.142334) 46535 POINT(865.600037 400.125549) 46536 POINT(391.510986 499.180603) 46537 POINT(197.740433 589.301025) 46538 POINT(943.983643 505.722595) 46539 POINT(977.329407 431.932526) 46540 POINT(332.201691 962.067627) 46541 POINT(657.812927 741.477417) 46542 POINT(584.979309 812.016724) 46543 POINT(906.752075 891.674927) 46544 POINT(252.489441 517.932129) 46545 POINT(438.824066 752.173645) 46546 POINT(351.042206 295.864929) 46547 POINT(644.967529 951.080322) 46548 POINT(503.136292 687.630493) 46549 POINT(843.13324 945.27478) 46550 POINT(622.933899 426.135315) 46551 POINT(801.313232 950.754578) 46552 POINT(693.647949 371.095642) 46553 POINT(426.035034 310.846924) 46554 POINT(477.143005 956.445923) 46555 POINT(517.947937 860.844543) 46556 POINT(493.779938 200.754074) 46557 POINT(947.259827 550.078674) 46558 POINT(871.755371 381.006897) 46559 POINT(750.482422 288.866608) 46560 POINT(952.588501 91.988884) 46561 POINT(579.223022 246.016418) 46562 POINT(68.8165512 632.56781) 46563 POINT(802.750671 696.108215) 46564 POINT(100.315727 641.557251) 46565 POINT(868.026123 833.709106) 46566 POINT(139.044067 205.116776) 46567 POINT(321.19519 578.73761) 46568 POINT(423.592987 471.16095) 46569 POINT(88.7186508 403.727753) 46570 POINT(173.063675 220.89389) 46571 POINT(177.97522 245.730515) 46572 POINT(785.893433 90.908226) 46573 POINT(188.089798 14.6273708) 46574 POINT(257.917328 829.444214) 46575 POINT(801.78772 482.95282) 46576 POINT(502.85791 366.192413) 46577 POINT(466.264435 112.771065) 46578 POINT(368.408875 725.850708) 46579 POINT(551.524414 831.211609) 46580 POINT(576.065674 211.554108) 46581 POINT(512.637573 862.036499) 46582 POINT(69.9243164 505.950714) 46583 POINT(670.271301 425.815369) 46584 POINT(539.015076 706.380859) 46585 POINT(682.188477 671.277039) 46586 POINT(332.68457 38.2542877) 46587 POINT(205.789154 346.160461) 46588 POINT(975.525696 429.838593) 46589 POINT(574.973083 974.012024) 46590 POINT(816.95752 25.4461212) 46591 POINT(38.4972763 206.086609) 46592 POINT(533.468811 446.21759) 46593 POINT(564.602051 362.670868) 46594 POINT(704.577759 452.767456) 46595 POINT(819.114441 279.222046) 46596 POINT(175.677094 36.9145737) 46597 POINT(410.769257 508.818542) 46598 POINT(524.1922 676.23822) 46599 POINT(185.494812 798.264404) 46600 POINT(485.081665 971.5625) 46601 POINT(386.402344 911.140686) 46602 POINT(445.969818 490.593445) 46603 POINT(101.828796 193.120453) 46604 POINT(72.5680161 838.357422) 46605 POINT(151.766953 404.568542) 46606 POINT(206.084717 634.972351) 46607 POINT(543.261963 940.054932) 46608 POINT(523.739319 712.422485) 46609 POINT(815.861633 536.775818) 46610 POINT(162.101303 843.812744) 46611 POINT(35.1176338 382.473724) 46612 POINT(864.719788 231.085724) 46613 POINT(239.700027 372.379761) 46614 POINT(977.461365 731.066956) 46615 POINT(748.29187 353.694977) 46616 POINT(227.326233 966.240723) 46617 POINT(656.584045 20.5323715) 46618 POINT(86.592514 507.769562) 46619 POINT(951.022278 683.03717) 46620 POINT(250.382187 836.494812) 46621 POINT(111.229126 198.187347) 46622 POINT(401.728546 776.152161) 46623 POINT(622.114868 698.78009) 46624 POINT(766.642944 185.601639) 46625 POINT(52.6115799 439.181091) 46626 POINT(688.35144 417.91333) 46627 POINT(941.845703 655.031006) 46628 POINT(493.746002 68.710701) 46629 POINT(654.664856 138.367081) 46630 POINT(658.236206 899.916382) 46631 POINT(194.137985 604.255676) 46632 POINT(772.796875 234.259506) 46633 POINT(84.4598236 480.394836) 46634 POINT(107.399864 157.502411) 46635 POINT(337.246124 613.208801) 46636 POINT(879.64447 266.86908) 46637 POINT(989.261841 444.325897) 46638 POINT(360.824829 583.768311) 46639 POINT(130.063278 377.22699) 46640 POINT(71.5973129 365.395355) 46641 POINT(931.865479 498.131287) 46642 POINT(876.649658 552.575806) 46643 POINT(237.300049 226.322693) 46644 POINT(326.274872 270.327118) 46645 POINT(367.864777 301.215912) 46646 POINT(109.58812 333.719788) 46647 POINT(179.165665 236.243881) 46648 POINT(679.486145 926.009521) 46649 POINT(29.0262737 718.467346) 46650 POINT(636.659485 220.59903) 46651 POINT(339.815613 658.642151) 46652 POINT(175.470963 565.713257) 46653 POINT(253.687714 715.928162) 46654 POINT(107.882187 183.896545) 46655 POINT(503.712158 166.717148) 46656 POINT(705.535339 41.3555565) 46657 POINT(888.115173 256.041443) 46658 POINT(800.404114 389.190704) 46659 POINT(550.177795 476.182037) 46660 POINT(430.058441 384.721741) 46661 POINT(872.008118 139.522568) 46662 POINT(426.612488 472.082123) 46663 POINT(3.80335498 746.122498) 46664 POINT(54.0425682 783.321838) 46665 POINT(516.849365 851.259888) 46666 POINT(375.087006 551.335876) 46667 POINT(112.006561 790.296265) 46668 POINT(957.823853 381.558136) 46669 POINT(787.556458 859.249939) 46670 POINT(747.829956 578.702087) 46671 POINT(0.918518364 536.648315) 46672 POINT(72.2565536 576.66748) 46673 POINT(605.895935 488.423828) 46674 POINT(398.027679 773.492493) 46675 POINT(246.909225 361.293549) 46676 POINT(431.628662 768.94165) 46677 POINT(308.383057 445.322754) 46678 POINT(669.667419 570.654297) 46679 POINT(893.445618 892.943359) 46680 POINT(537.762634 847.018005) 46681 POINT(911.894897 304.932861) 46682 POINT(693.654968 722.99707) 46683 POINT(541.608337 634.731689) 46684 POINT(25.1994648 41.571331) 46685 POINT(766.983154 787.590515) 46686 POINT(904.647461 941.391785) 46687 POINT(647.477234 282.621002) 46688 POINT(630.060486 164.52803) 46689 POINT(511.881805 451.721283) 46690 POINT(908.637512 731.176147) 46691 POINT(570.726379 933.045593) 46692 POINT(134.125854 665.961304) 46693 POINT(979.461426 507.276428) 46694 POINT(953.393433 888.663879) 46695 POINT(236.154434 467.176178) 46696 POINT(780.864807 387.116333) 46697 POINT(854.889771 815.083862) 46698 POINT(32.1827469 458.569214) 46699 POINT(493.508118 275.166779) 46700 POINT(641.596985 365.552551) 46701 POINT(433.517517 778.930847) 46702 POINT(85.7741928 821.322937) 46703 POINT(390.838257 140.970749) 46704 POINT(547.660706 557.180115) 46705 POINT(786.513428 760.046814) 46706 POINT(858.535645 978.669983) 46707 POINT(612.762756 546.789429) 46708 POINT(498.408234 880.006104) 46709 POINT(6.03353643 847.75885) 46710 POINT(711.514465 36.601635) 46711 POINT(277.39212 875.944458) 46712 POINT(905.044312 555.694519) 46713 POINT(972.21521 305.440216) 46714 POINT(98.7080917 346.591858) 46715 POINT(134.306168 993.939758) 46716 POINT(636.768921 327.585266) 46717 POINT(261.044678 777.477234) 46718 POINT(472.301605 759.268066) 46719 POINT(960.854614 469.70694) 46720 POINT(598.380615 767.603455) 46721 POINT(395.155975 390.829071) 46722 POINT(98.4710464 969.064148) 46723 POINT(615.184753 262.5047) 46724 POINT(487.442841 549.532043) 46725 POINT(628.874695 213.857803) 46726 POINT(637.420227 984.064575) 46727 POINT(771.784973 44.6673012) 46728 POINT(454.309357 262.408386) 46729 POINT(854.330444 145.457596) 46730 POINT(369.639557 342.164856) 46731 POINT(838.96283 456.376831) 46732 POINT(619.75238 65.3445892) 46733 POINT(17.2169304 199.112442) 46734 POINT(634.945984 812.836182) 46735 POINT(937.562134 495.857758) 46736 POINT(792.630127 243.861176) 46737 POINT(638.789185 319.364685) 46738 POINT(391.682922 973.196533) 46739 POINT(106.353607 936.870605) 46740 POINT(273.977661 517.861816) 46741 POINT(654.942505 322.277374) 46742 POINT(800.529663 227.755417) 46743 POINT(91.9185486 135.107269) 46744 POINT(334.098541 772.66687) 46745 POINT(803.728333 286.82547) 46746 POINT(390.69046 553.111633) 46747 POINT(179.476288 836.067322) 46748 POINT(805.682007 737.061401) 46749 POINT(219.416901 740.75177) 46750 POINT(675.802673 492.049866) 46751 POINT(525.990234 629.221436) 46752 POINT(248.663742 16.1034012) 46753 POINT(724.228088 282.276276) 46754 POINT(52.7249298 695.893494) 46755 POINT(368.019287 506.74411) 46756 POINT(311.494965 801.477112) 46757 POINT(548.105774 858.147583) 46758 POINT(438.43576 619.637817) 46759 POINT(294.164154 579.825012) 46760 POINT(238.679581 528.463562) 46761 POINT(852.421753 778.878357) 46762 POINT(378.593872 811.298767) 46763 POINT(495.59198 381.544159) 46764 POINT(955.883911 726.142578) 46765 POINT(485.251984 693.606445) 46766 POINT(295.881317 605.079407) 46767 POINT(538.004028 342.52356) 46768 POINT(801.619812 316.22641) 46769 POINT(853.875488 169.877106) 46770 POINT(137.071121 927.368164) 46771 POINT(734.545288 964.043518) 46772 POINT(768.445984 655.966736) 46773 POINT(664.404358 227.740494) 46774 POINT(924.831543 355.248413) 46775 POINT(641.536377 933.039673) 46776 POINT(66.8291779 691.863831) 46777 POINT(548.961548 162.913315) 46778 POINT(623.598999 529.111694) 46779 POINT(547.542969 924.371338) 46780 POINT(931.250916 693.447754) 46781 POINT(277.579895 260.352509) 46782 POINT(288.422607 514.132202) 46783 POINT(81.1773987 117.981064) 46784 POINT(850.841187 170.1884) 46785 POINT(335.004944 547.441711) 46786 POINT(681.502808 729.773987) 46787 POINT(224.164581 522.039246) 46788 POINT(825.766663 739.631836) 46789 POINT(131.840561 565.092529) 46790 POINT(413.217316 622.164673) 46791 POINT(83.5821457 37.8958588) 46792 POINT(825.79425 911.149109) 46793 POINT(14.9854679 245.414139) 46794 POINT(192.748734 341.086914) 46795 POINT(750.821594 828.637085) 46796 POINT(358.898865 977.22229) 46797 POINT(544.065674 376.20639) 46798 POINT(957.996216 301.499359) 46799 POINT(454.697662 960.272034) 46800 POINT(945.47699 462.981354) 46801 POINT(208.575989 805.382996) 46802 POINT(495.276672 658.9151) 46803 POINT(2.26725578 473.049927) 46804 POINT(337.674927 874.746521) 46805 POINT(874.70166 492.533081) 46806 POINT(656.389343 408.62912) 46807 POINT(193.300674 10.1366463) 46808 POINT(523.534424 809.616638) 46809 POINT(771.298645 750.181152) 46810 POINT(433.938599 30.7004356) 46811 POINT(492.982635 881.85376) 46812 POINT(912.104797 840.685913) 46813 POINT(751.269714 533.906616) 46814 POINT(965.379822 345.75766) 46815 POINT(752.301453 975.911865) 46816 POINT(608.365662 976.259277) 46817 POINT(897.579712 438.335358) 46818 POINT(2.07451224 521.112793) 46819 POINT(176.718842 237.54541) 46820 POINT(355.748962 906.475281) 46821 POINT(282.413483 135.119232) 46822 POINT(501.709503 972.330078) 46823 POINT(61.0951347 538.182983) 46824 POINT(549.245422 697.035706) 46825 POINT(833.484985 349.367859) 46826 POINT(780.756714 242.312057) 46827 POINT(32.477478 627.263489) 46828 POINT(703.525513 67.2786179) 46829 POINT(813.26709 112.601646) 46830 POINT(98.2196579 808.128479) 46831 POINT(672.241577 519.035889) 46832 POINT(898.199219 898.622559) 46833 POINT(374.916138 953.144409) 46834 POINT(632.733704 165.228271) 46835 POINT(425.210327 104.655807) 46836 POINT(16.2868023 159.446442) 46837 POINT(22.9256439 888.976929) 46838 POINT(562.15625 469.338257) 46839 POINT(645.755127 999.619263) 46840 POINT(42.1645126 3.76047802) 46841 POINT(577.050171 573.423279) 46842 POINT(358.105164 478.266418) 46843 POINT(479.51947 637.550598) 46844 POINT(291.697968 403.562012) 46845 POINT(414.798492 710.644226) 46846 POINT(467.472107 528.992493) 46847 POINT(34.2854919 403.588074) 46848 POINT(209.968887 308.558807) 46849 POINT(350.802582 905.762512) 46850 POINT(268.759155 809.84137) 46851 POINT(954.639221 164.08667) 46852 POINT(290.947296 991.981812) 46853 POINT(500.627686 443.548248) 46854 POINT(563.156982 243.199677) 46855 POINT(82.4708023 894.085083) 46856 POINT(748.656128 937.498657) 46857 POINT(872.095642 99.9411621) 46858 POINT(888.602661 881.150024) 46859 POINT(358.980804 229.959793) 46860 POINT(800.820923 349.777191) 46861 POINT(228.951721 982.291626) 46862 POINT(629.626526 834.561157) 46863 POINT(503.744659 681.915833) 46864 POINT(813.691895 130.039474) 46865 POINT(979.713379 567.050964) 46866 POINT(236.616791 405.58609) 46867 POINT(292.52182 929.440613) 46868 POINT(100.672173 947.982849) 46869 POINT(458.79657 557.744934) 46870 POINT(865.201599 274.185242) 46871 POINT(447.877747 92.5736237) 46872 POINT(867.579773 862.736328) 46873 POINT(987.523865 921.414795) 46874 POINT(399.76825 301.20459) 46875 POINT(255.320435 122.821022) 46876 POINT(653.817444 798.058899) 46877 POINT(529.375061 478.312469) 46878 POINT(134.709473 753.703613) 46879 POINT(22.5355263 489.771393) 46880 POINT(631.419495 60.7733231) 46881 POINT(586.850769 717.487976) 46882 POINT(352.807678 532.641724) 46883 POINT(410.437012 152.945038) 46884 POINT(292.889404 6.47258043) 46885 POINT(226.5755 90.0082016) 46886 POINT(662.237244 288.696014) 46887 POINT(482.133606 403.13562) 46888 POINT(383.938293 902.819763) 46889 POINT(764.774963 891.89856) 46890 POINT(231.986557 148.896561) 46891 POINT(39.5432739 533.480225) 46892 POINT(418.679047 18.3057747) 46893 POINT(697.021606 990.499634) 46894 POINT(0.0701435581 144.930679) 46895 POINT(447.271393 457.71933) 46896 POINT(752.526306 973.115662) 46897 POINT(914.147339 70.7834702) 46898 POINT(519.723938 333.380829) 46899 POINT(679.500916 331.586212) 46900 POINT(981.997803 428.794525) 46901 POINT(110.483871 782.274902) 46902 POINT(355.84433 28.8250523) 46903 POINT(768.025757 952.990234) 46904 POINT(390.808136 264.692352) 46905 POINT(561.094666 152.575653) 46906 POINT(847.253967 532.643005) 46907 POINT(178.190735 217.636475) 46908 POINT(268.090881 491.707214) 46909 POINT(121.424881 900.089539) 46910 POINT(609.94696 233.534683) 46911 POINT(894.385803 188.950043) 46912 POINT(187.280853 287.634216) 46913 POINT(385.799164 826.39978) 46914 POINT(372.285706 980.173035) 46915 POINT(157.873184 404.649506) 46916 POINT(753.132996 703.467102) 46917 POINT(430.458588 297.849731) 46918 POINT(605.193665 182.075409) 46919 POINT(867.110107 887.041687) 46920 POINT(899.550415 786.288879) 46921 POINT(462.333191 936.231628) 46922 POINT(938.70636 181.693665) 46923 POINT(624.362427 950.085632) 46924 POINT(552.338257 91.9259567) 46925 POINT(996.505798 30.0873299) 46926 POINT(540.815369 58.8855476) 46927 POINT(292.28714 303.499969) 46928 POINT(358.697357 819.33075) 46929 POINT(893.330566 850.978394) 46930 POINT(475.359222 178.345245) 46931 POINT(710.294128 142.66597) 46932 POINT(229.214447 88.6946793) 46933 POINT(700.426514 13.1838217) 46934 POINT(552.785278 471.234436) 46935 POINT(912.881287 882.802673) 46936 POINT(638.303223 206.585281) 46937 POINT(265.275513 250.634918) 46938 POINT(340.927765 654.169312) 46939 POINT(790.769104 946.869629) 46940 POINT(985.494324 113.937347) 46941 POINT(510.910706 501.49881) 46942 POINT(812.517334 331.883179) 46943 POINT(640.544189 548.877686) 46944 POINT(832.668823 596.51947) 46945 POINT(600.190247 988.673584) 46946 POINT(571.956482 204.298218) 46947 POINT(459.653473 727.765137) 46948 POINT(501.273804 252.534897) 46949 POINT(453.408356 63.5596123) 46950 POINT(725.967896 404.404297) 46951 POINT(160.974152 981.723267) 46952 POINT(338.755524 658.305176) 46953 POINT(729.503235 940.822876) 46954 POINT(241.040665 330.256287) 46955 POINT(104.816971 728.832764) 46956 POINT(944.889221 650.524658) 46957 POINT(932.880737 93.4682617) 46958 POINT(65.1712418 202.566147) 46959 POINT(476.103485 477.096405) 46960 POINT(786.381287 152.361511) 46961 POINT(265.878357 0.391626149) 46962 POINT(382.215698 978.779175) 46963 POINT(70.5902786 25.4338779) 46964 POINT(922.064575 510.722076) 46965 POINT(211.153458 142.681839) 46966 POINT(114.240257 185.18869) 46967 POINT(996.396362 236.926956) 46968 POINT(11.2019653 883.282288) 46969 POINT(598.78717 630.294678) 46970 POINT(190.577194 690.557373) 46971 POINT(645.723083 926.583496) 46972 POINT(383.860107 816.430725) 46973 POINT(89.6526642 607.322693) 46974 POINT(161.864029 437.876556) 46975 POINT(46.5373764 188.112671) 46976 POINT(715.009583 789.055359) 46977 POINT(589.604858 631.936646) 46978 POINT(453.163544 675.310669) 46979 POINT(365.12384 47.6819992) 46980 POINT(762.953064 162.146988) 46981 POINT(98.3062439 556.174866) 46982 POINT(922.33313 283.03595) 46983 POINT(897.792419 677.352173) 46984 POINT(707.879028 670.479187) 46985 POINT(892.011414 41.1099396) 46986 POINT(418.131744 379.598846) 46987 POINT(363.66217 526.863159) 46988 POINT(857.782837 320.16571) 46989 POINT(741.390442 734.522339) 46990 POINT(717.123779 509.581238) 46991 POINT(690.323608 639.671387) 46992 POINT(876.693787 314.68396) 46993 POINT(73.4793549 311.062714) 46994 POINT(559.258118 363.77597) 46995 POINT(770.316162 107.613503) 46996 POINT(234.090347 421.992828) 46997 POINT(601.103699 28.9863129) 46998 POINT(499.072906 163.73819) 46999 POINT(858.738586 88.3004761) 47000 POINT(274.58252 16.6624489) 47001 POINT(963.628845 192.894089) 47002 POINT(942.794861 554.493774) 47003 POINT(380.944489 60.3204384) 47004 POINT(163.384537 883.471436) 47005 POINT(349.648682 928.51709) 47006 POINT(51.1739998 92.3490753) 47007 POINT(924.15625 23.5569134) 47008 POINT(975.797546 752.717834) 47009 POINT(905.231995 973.431885) 47010 POINT(153.713638 189.160492) 47011 POINT(97.9656219 165.40448) 47012 POINT(367.865662 452.527496) 47013 POINT(970.604004 766.696777) 47014 POINT(942.026489 680.086975) 47015 POINT(766.06958 108.391052) 47016 POINT(590.566223 509.733887) 47017 POINT(833.647461 980.749573) 47018 POINT(988.368164 18.7617321) 47019 POINT(875.225098 230.692368) 47020 POINT(91.337822 8.44146252) 47021 POINT(740.36676 780.509705) 47022 POINT(69.9689331 471.984619) 47023 POINT(737.287476 708.250793) 47024 POINT(584.447266 524.1745) 47025 POINT(360.465759 517.478821) 47026 POINT(370.605927 585.449341) 47027 POINT(156.33168 865.687134) 47028 POINT(265.641205 991.551941) 47029 POINT(770.446777 270.735931) 47030 POINT(877.927307 622.684875) 47031 POINT(235.236069 142.921082) 47032 POINT(796.721985 434.71817) 47033 POINT(287.148376 632.073547) 47034 POINT(198.361008 641.304443) 47035 POINT(44.7444 485.391388) 47036 POINT(792.135803 592.297913) 47037 POINT(161.394714 399.124908) 47038 POINT(571.010315 363.818146) 47039 POINT(592.901184 247.995117) 47040 POINT(802.352905 602.434204) 47041 POINT(224.439682 388.181702) 47042 POINT(77.7594833 24.6813812) 47043 POINT(693.891052 766.340088) 47044 POINT(207.767715 78.5051651) 47045 POINT(69.1441345 407.504883) 47046 POINT(918.882324 930.913818) 47047 POINT(402.693604 593.63269) 47048 POINT(12.0405731 102.406525) 47049 POINT(243.334854 542.281738) 47050 POINT(151.767715 560.538025) 47051 POINT(655.599854 27.4988937) 47052 POINT(255.248795 889.824219) 47053 POINT(234.549881 293.984833) 47054 POINT(474.945251 641.251587) 47055 POINT(636.517273 958.262817) 47056 POINT(654.909363 140.7117) 47057 POINT(733.383728 789.738892) 47058 POINT(480.415771 801.159485) 47059 POINT(175.125137 258.684814) 47060 POINT(126.881859 378.224854) 47061 POINT(776.903198 231.404694) 47062 POINT(294.360931 64.0589371) 47063 POINT(175.322922 904.886108) 47064 POINT(38.3543854 900.656921) 47065 POINT(894.11261 989.438599) 47066 POINT(679.626587 673.681152) 47067 POINT(671.048828 769.164734) 47068 POINT(401.561829 323.454315) 47069 POINT(302.20517 263.190643) 47070 POINT(482.945221 474.46106) 47071 POINT(611.42749 557.633728) 47072 POINT(729.579895 72.1846313) 47073 POINT(535.344727 27.1525078) 47074 POINT(775.682556 350.816986) 47075 POINT(888.33844 679.088623) 47076 POINT(944.484436 602.36499) 47077 POINT(626.97998 61.7711983) 47078 POINT(158.964508 32.5894508) 47079 POINT(436.881134 926.238892) 47080 POINT(553.361023 568.350159) 47081 POINT(112.201332 227.793716) 47082 POINT(482.360107 911.19989) 47083 POINT(462.843079 726.41333) 47084 POINT(289.093842 641.017944) 47085 POINT(668.408447 784.710632) 47086 POINT(659.86676 379.255493) 47087 POINT(981.162598 376.077026) 47088 POINT(550.56012 182.777786) 47089 POINT(170.563568 476.717651) 47090 POINT(357.764648 605.740173) 47091 POINT(885.508667 111.973434) 47092 POINT(270.800079 528.468933) 47093 POINT(301.564331 313.716064) 47094 POINT(75.977478 589.595215) 47095 POINT(711.484558 91.4315109) 47096 POINT(291.928284 192.002655) 47097 POINT(628.777649 460.224274) 47098 POINT(547.895935 796.408203) 47099 POINT(104.593872 355.355499) 47100 POINT(931.997925 921.142273) 47101 POINT(234.533142 411.674194) 47102 POINT(443.192749 676.091492) 47103 POINT(758.990417 629.640076) 47104 POINT(191.72403 156.603821) 47105 POINT(571.383545 685.418396) 47106 POINT(73.9759521 883.847534) 47107 POINT(254.167526 384.231293) 47108 POINT(967.918091 116.699615) 47109 POINT(202.196213 582.874146) 47110 POINT(176.699615 82.3798676) 47111 POINT(784.122681 913.779419) 47112 POINT(715.680237 425.035126) 47113 POINT(480.649017 189.584091) 47114 POINT(870.569946 790.22522) 47115 POINT(247.169083 329.807281) 47116 POINT(232.842545 926.309753) 47117 POINT(29.4600754 671.57251) 47118 POINT(577.755737 859.244446) 47119 POINT(544.445801 261.543274) 47120 POINT(627.85022 94.0602036) 47121 POINT(81.6901245 99.229599) 47122 POINT(31.5325298 813.724792) 47123 POINT(221.313385 751.045715) 47124 POINT(76.2144699 224.225128) 47125 POINT(364.713165 484.056976) 47126 POINT(495.55954 464.209961) 47127 POINT(778.203125 297.970856) 47128 POINT(670.864746 429.697571) 47129 POINT(226.959213 448.95874) 47130 POINT(970.80957 921.088684) 47131 POINT(76.1209183 260.31427) 47132 POINT(528.174683 303.572235) 47133 POINT(134.29071 969.364929) 47134 POINT(476.241699 376.136047) 47135 POINT(266.890808 849.681396) 47136 POINT(324.130463 2.58238554) 47137 POINT(495.881989 920.325317) 47138 POINT(455.127197 794.616394) 47139 POINT(589.354675 773.11969) 47140 POINT(604.055542 417.2612) 47141 POINT(18.7291355 743.812683) 47142 POINT(981.009583 966.220581) 47143 POINT(190.128189 168.271393) 47144 POINT(534.502075 41.6507378) 47145 POINT(435.424805 410.826843) 47146 POINT(715.599365 200.024246) 47147 POINT(851.145264 854.582642) 47148 POINT(247.363556 132.921417) 47149 POINT(501.591431 994.49231) 47150 POINT(505.475647 316.81778) 47151 POINT(136.107391 80.5308838) 47152 POINT(563.958618 760.053223) 47153 POINT(617.373108 593.193237) 47154 POINT(95.2851639 491.573273) 47155 POINT(4.08490372 885.309387) 47156 POINT(680.782227 380.769501) 47157 POINT(291.644409 46.8919067) 47158 POINT(682.201599 929.477173) 47159 POINT(380.902527 913.13446) 47160 POINT(348.815002 657.203491) 47161 POINT(938.102966 875.127747) 47162 POINT(939.72699 320.87149) 47163 POINT(527.572205 19.316412) 47164 POINT(184.725937 323.315308) 47165 POINT(169.169281 131.795761) 47166 POINT(698.488281 513.61084) 47167 POINT(299.920197 289.463837) 47168 POINT(15.001399 50.8685722) 47169 POINT(836.62616 419.655304) 47170 POINT(687.501038 865.756714) 47171 POINT(554.688477 156.664856) 47172 POINT(572.976318 425.812622) 47173 POINT(557.186951 136.6203) 47174 POINT(611.444458 297.19339) 47175 POINT(24.7720394 146.218109) 47176 POINT(443.939728 343.206726) 47177 POINT(356.690613 136.235382) 47178 POINT(367.811035 145.66597) 47179 POINT(959.887451 403.460602) 47180 POINT(884.932617 356.361115) 47181 POINT(368.378754 376.342499) 47182 POINT(392.363831 550.902466) 47183 POINT(708.851318 567.467651) 47184 POINT(33.5502434 774.659363) 47185 POINT(228.717331 802.794983) 47186 POINT(962.156982 239.898529) 47187 POINT(205.778458 741.87616) 47188 POINT(64.0071182 594.564819) 47189 POINT(928.484802 669.176941) 47190 POINT(782.442627 267.105438) 47191 POINT(14.8940077 283.808319) 47192 POINT(48.9184875 669.603394) 47193 POINT(397.354736 728.83844) 47194 POINT(337.109619 475.177521) 47195 POINT(187.285828 882.851074) 47196 POINT(641.696289 877.654541) 47197 POINT(26.9599552 252.157257) 47198 POINT(291.869141 185.098099) 47199 POINT(687.806152 934.271606) 47200 POINT(207.15416 427.669739) 47201 POINT(670.432251 619.790222) 47202 POINT(705.222229 898.917725) 47203 POINT(561.464722 524.126465) 47204 POINT(696.860291 862.97937) 47205 POINT(395.669983 321.779175) 47206 POINT(924.315552 604.002625) 47207 POINT(326.038574 438.648132) 47208 POINT(390.973206 764.634888) 47209 POINT(415.093842 552.726685) 47210 POINT(821.110779 604.604858) 47211 POINT(301.255035 486.270477) 47212 POINT(609.740356 635.77478) 47213 POINT(166.40802 234.860291) 47214 POINT(458.864258 674.730042) 47215 POINT(714.790222 77.8790359) 47216 POINT(635.53418 956.79126) 47217 POINT(476.893097 223.653305) 47218 POINT(369.733826 725.692993) 47219 POINT(461.454285 449.3508) 47220 POINT(380.24707 941.112061) 47221 POINT(108.013428 654.773804) 47222 POINT(371.39917 112.414146) 47223 POINT(334.32132 130.173355) 47224 POINT(783.060425 92.7032547) 47225 POINT(747.63092 876.483643) 47226 POINT(253.903488 164.426361) 47227 POINT(395.191406 262.910217) 47228 POINT(530.049194 268.936615) 47229 POINT(693.873718 178.211655) 47230 POINT(727.493896 520.722595) 47231 POINT(906.657654 160.506134) 47232 POINT(449.77887 586.253967) 47233 POINT(57.7171593 573.87616) 47234 POINT(738.058472 371.991699) 47235 POINT(909.181946 51.9016724) 47236 POINT(857.995483 171.100861) 47237 POINT(300.591217 227.634155) 47238 POINT(628.827759 769.452026) 47239 POINT(93.9672928 311.154388) 47240 POINT(199.707382 454.890503) 47241 POINT(318.837463 720.085327) 47242 POINT(655.330505 746.407288) 47243 POINT(96.0465012 591.239075) 47244 POINT(568.399902 439.297821) 47245 POINT(88.5953598 244.561508) 47246 POINT(45.1605339 116.812843) 47247 POINT(711.890747 190.926987) 47248 POINT(69.8211136 116.972885) 47249 POINT(92.7064667 995.982788) 47250 POINT(134.935806 464.555176) 47251 POINT(831.973022 671.620239) 47252 POINT(541.722168 22.801981) 47253 POINT(365.482147 468.863953) 47254 POINT(113.897881 17.8103886) 47255 POINT(71.1060944 210.744354) 47256 POINT(841.1297 712.13324) 47257 POINT(11.6887712 116.40564) 47258 POINT(556.922058 814.762878) 47259 POINT(178.005127 429.27774) 47260 POINT(767.174622 814.923523) 47261 POINT(482.861877 839.206909) 47262 POINT(239.27829 810.128357) 47263 POINT(310.410431 463.224792) 47264 POINT(700.196228 198.551559) 47265 POINT(727.068726 69.9872513) 47266 POINT(691.302979 346.340149) 47267 POINT(173.236664 862.314392) 47268 POINT(206.78598 687.082092) 47269 POINT(567.49646 799.806885) 47270 POINT(573.212769 718.921082) 47271 POINT(834.598267 493.933319) 47272 POINT(185.62973 731.054138) 47273 POINT(310.750549 751.627502) 47274 POINT(228.611023 402.47818) 47275 POINT(758.19458 6.2796731) 47276 POINT(610.454895 399.406525) 47277 POINT(637.507324 48.6547813) 47278 POINT(709.808594 871.920654) 47279 POINT(220.418854 561.949219) 47280 POINT(564.081299 73.941246) 47281 POINT(286.169617 147.758224) 47282 POINT(158.900131 852.916382) 47283 POINT(816.690857 491.642609) 47284 POINT(51.5224266 266.766724) 47285 POINT(904.43573 512.362793) 47286 POINT(675.608582 266.26532) 47287 POINT(203.893127 237.409027) 47288 POINT(30.2767792 52.4495506) 47289 POINT(714.196716 484.560516) 47290 POINT(706.229126 92.7837067) 47291 POINT(574.42511 455.81842) 47292 POINT(202.396744 709.14386) 47293 POINT(311.936279 82.7909088) 47294 POINT(547.57666 878.4552) 47295 POINT(612.272156 433.680328) 47296 POINT(375.61557 296.756683) 47297 POINT(9.81604004 999.289795) 47298 POINT(775.657593 624.02063) 47299 POINT(842.618591 32.4042778) 47300 POINT(619.759644 65.2452087) 47301 POINT(611.884521 900.609802) 47302 POINT(280.861572 358.841766) 47303 POINT(353.917419 221.8237) 47304 POINT(19.8681087 782.433044) 47305 POINT(415.358459 244.865051) 47306 POINT(119.784775 785.787598) 47307 POINT(844.96167 890.280945) 47308 POINT(558.887268 298.269806) 47309 POINT(528.681091 220.955597) 47310 POINT(578.369446 2.05736947) 47311 POINT(829.385254 24.9982433) 47312 POINT(550.50238 921.247986) 47313 POINT(306.071045 87.8785095) 47314 POINT(681.863892 450.266968) 47315 POINT(616.155029 545.236267) 47316 POINT(86.615509 472.731415) 47317 POINT(812.532349 146.333313) 47318 POINT(884.176758 934.790771) 47319 POINT(376.995728 40.4671288) 47320 POINT(164.171432 206.235855) 47321 POINT(753.804626 810.182068) 47322 POINT(822.521606 750.263916) 47323 POINT(210.326782 416.767151) 47324 POINT(512.482117 131.24469) 47325 POINT(232.48967 761.925232) 47326 POINT(832.814941 712.315125) 47327 POINT(616.167786 986.85968) 47328 POINT(654.892334 664.928894) 47329 POINT(24.5996761 974.206482) 47330 POINT(387.115326 155.013138) 47331 POINT(207.606171 852.715698) 47332 POINT(407.575958 950.181091) 47333 POINT(810.027893 458.460266) 47334 POINT(736.457581 765.174927) 47335 POINT(801.801758 524.346008) 47336 POINT(843.448608 624.66272) 47337 POINT(935.953186 962.169678) 47338 POINT(820.758728 460.59726) 47339 POINT(257.13501 594.396118) 47340 POINT(730.625 303.100616) 47341 POINT(843.945068 477.800354) 47342 POINT(942.042236 387.437439) 47343 POINT(552.990662 945.380249) 47344 POINT(592.54718 543.860962) 47345 POINT(249.546082 349.330933) 47346 POINT(788.046753 511.38327) 47347 POINT(644.798828 404.868896) 47348 POINT(830.854614 610.86554) 47349 POINT(527.36377 966.400635) 47350 POINT(140.356857 207.915817) 47351 POINT(569.341003 983.669495) 47352 POINT(802.260559 913.204895) 47353 POINT(525.214111 521.445801) 47354 POINT(4.51213455 718.883484) 47355 POINT(123.958191 833.017883) 47356 POINT(347.147247 607.342834) 47357 POINT(207.616013 71.7995758) 47358 POINT(959.123474 335.769226) 47359 POINT(198.184906 839.023254) 47360 POINT(30.2860298 480.594635) 47361 POINT(111.942131 196.580109) 47362 POINT(236.84343 694.446838) 47363 POINT(497.46167 336.086884) 47364 POINT(273.033813 899.600952) 47365 POINT(589.792725 867.294556) 47366 POINT(422.109222 621.887024) 47367 POINT(965.964722 765.741211) 47368 POINT(631.553406 303.808502) 47369 POINT(201.66362 761.436951) 47370 POINT(678.897156 562.187012) 47371 POINT(689.222229 233.332123) 47372 POINT(707.049927 451.507629) 47373 POINT(434.738861 139.960358) 47374 POINT(106.296692 727.462524) 47375 POINT(437.070892 822.194458) 47376 POINT(561.711487 384.765747) 47377 POINT(121.646973 582.355042) 47378 POINT(160.534149 768.553894) 47379 POINT(293.637451 213.446625) 47380 POINT(57.9864006 869.634766) 47381 POINT(552.275574 327.165833) 47382 POINT(79.1445618 941.16333) 47383 POINT(13.4150877 629.25708) 47384 POINT(239.02594 889.299988) 47385 POINT(291.249084 701.133301) 47386 POINT(896.312256 454.953888) 47387 POINT(841.135254 368.412689) 47388 POINT(724.566284 620.376587) 47389 POINT(140.430756 136.745483) 47390 POINT(947.969849 936.303894) 47391 POINT(538.019165 235.243713) 47392 POINT(109.218216 206.348953) 47393 POINT(518.818054 575.838074) 47394 POINT(731.065918 709.826416) 47395 POINT(268.126678 976.439026) 47396 POINT(519.079407 557.187683) 47397 POINT(771.459351 635.981934) 47398 POINT(603.482788 909.426514) 47399 POINT(815.901611 435.01001) 47400 POINT(807.778381 350.467102) 47401 POINT(564.526001 776.750183) 47402 POINT(89.4043808 266.581604) 47403 POINT(329.646454 506.63855) 47404 POINT(354.505707 386.84668) 47405 POINT(575.433899 844.55603) 47406 POINT(489.506287 791.697937) 47407 POINT(415.542511 140.871964) 47408 POINT(64.2819061 461.567108) 47409 POINT(144.91333 797.606934) 47410 POINT(86.1595688 463.806305) 47411 POINT(942.962646 568.102966) 47412 POINT(964.658508 953.652283) 47413 POINT(422.187744 116.619965) 47414 POINT(480.909943 474.526642) 47415 POINT(364.208679 653.000122) 47416 POINT(743.242188 405.796661) 47417 POINT(804.925659 392.295807) 47418 POINT(504.814972 534.144714) 47419 POINT(700.437073 776.030884) 47420 POINT(676.879089 470.457214) 47421 POINT(152.391205 847.150635) 47422 POINT(701.791504 240.807495) 47423 POINT(600.419312 926.945312) 47424 POINT(666.030029 731.456909) 47425 POINT(333.22464 97.1560593) 47426 POINT(600.946655 538.258911) 47427 POINT(39.9172478 757.565308) 47428 POINT(506.813934 75.4476318) 47429 POINT(158.542297 287.738892) 47430 POINT(865.935364 843.200562) 47431 POINT(296.834686 185.951859) 47432 POINT(108.391273 483.868256) 47433 POINT(646.554077 849.0448) 47434 POINT(937.707764 510.277008) 47435 POINT(810.941589 769.996643) 47436 POINT(94.8053513 343.572449) 47437 POINT(866.653381 506.970856) 47438 POINT(971.580811 920.849365) 47439 POINT(416.847992 475.714783) 47440 POINT(118.093628 633.090759) 47441 POINT(318.942444 859.323059) 47442 POINT(710.387756 631.133606) 47443 POINT(225.038559 653.987915) 47444 POINT(253.427612 631.530457) 47445 POINT(919.414795 780.558228) 47446 POINT(432.530212 695.945862) 47447 POINT(118.162102 9.23698997) 47448 POINT(47.2344627 118.404274) 47449 POINT(181.52272 153.918732) 47450 POINT(267.077576 496.210022) 47451 POINT(428.401276 94.4780884) 47452 POINT(145.699005 385.220703) 47453 POINT(111.616791 946.372864) 47454 POINT(977.628784 141.547104) 47455 POINT(866.632751 399.442749) 47456 POINT(943.740234 763.4552) 47457 POINT(668.75177 439.622375) 47458 POINT(782.471985 793.679993) 47459 POINT(185.219315 411.919952) 47460 POINT(363.501495 788.562195) 47461 POINT(378.611084 509.542816) 47462 POINT(900.6474 62.051506) 47463 POINT(373.658783 127.203964) 47464 POINT(696.589172 565.976257) 47465 POINT(836.80957 206.772186) 47466 POINT(291.840363 959.967224) 47467 POINT(409.947906 356.508636) 47468 POINT(425.739319 382.589874) 47469 POINT(388.593018 532.765442) 47470 POINT(492.599365 777.739319) 47471 POINT(720.40094 842.43512) 47472 POINT(79.2883148 115.984894) 47473 POINT(229.959518 228.484451) 47474 POINT(542.197449 628.720825) 47475 POINT(536.796814 628.05719) 47476 POINT(465.767212 533.732483) 47477 POINT(539.486084 596.993958) 47478 POINT(738.522461 354.784637) 47479 POINT(282.110809 345.913513) 47480 POINT(86.1362839 146.367355) 47481 POINT(20.652256 866.58551) 47482 POINT(367.70459 939.71521) 47483 POINT(964.719482 94.1751862) 47484 POINT(127.620468 880.178955) 47485 POINT(411.209412 367.654083) 47486 POINT(610.75769 572.144836) 47487 POINT(315.850769 349.480408) 47488 POINT(205.802795 469.753754) 47489 POINT(99.1526184 844.401794) 47490 POINT(546.333557 24.0807362) 47491 POINT(66.1839676 929.407166) 47492 POINT(940.576904 135.239166) 47493 POINT(974.110046 551.546509) 47494 POINT(540.755859 66.7335205) 47495 POINT(324.886261 362.280426) 47496 POINT(526.756409 805.591309) 47497 POINT(38.4721642 396.563782) 47498 POINT(344.823761 232.270645) 47499 POINT(498.006958 147.98642) 47500 POINT(691.58313 876.605896) 47501 POINT(104.341011 279.591614) 47502 POINT(901.442993 348.283661) 47503 POINT(563.031494 300.694305) 47504 POINT(819.071838 251.321533) 47505 POINT(110.388054 955.980713) 47506 POINT(208.96402 921.171631) 47507 POINT(802.531799 252.860916) 47508 POINT(565.075378 200.423843) 47509 POINT(206.966141 200.572769) 47510 POINT(582.176575 625.306763) 47511 POINT(292.23053 669.621826) 47512 POINT(987.147339 401.567383) 47513 POINT(778.32959 788.141724) 47514 POINT(306.230408 866.763489) 47515 POINT(537.43219 973.647522) 47516 POINT(69.7270584 369.071747) 47517 POINT(997.573669 821.034607) 47518 POINT(988.322632 633.554504) 47519 POINT(656.653809 412.77124) 47520 POINT(537.864929 369.237244) 47521 POINT(342.913605 232.899765) 47522 POINT(877.81134 618.73407) 47523 POINT(422.422791 316.170502) 47524 POINT(21.6534271 831.564453) 47525 POINT(743.179016 876.491943) 47526 POINT(47.4867096 908.389038) 47527 POINT(286.59259 779.611267) 47528 POINT(958.722595 212.451538) 47529 POINT(665.910339 463.895203) 47530 POINT(607.050964 363.456696) 47531 POINT(241.157257 396.240967) 47532 POINT(103.60527 245.480911) 47533 POINT(513.198486 769.106506) 47534 POINT(54.4276581 192.468338) 47535 POINT(995.431824 806.641724) 47536 POINT(150.472122 521.198364) 47537 POINT(148.420151 925.77417) 47538 POINT(461.342529 111.734917) 47539 POINT(486.596069 780.33313) 47540 POINT(769.682495 379.32373) 47541 POINT(241.27507 356.986542) 47542 POINT(436.687836 920.152588) 47543 POINT(182.982758 260.639557) 47544 POINT(308.791473 167.624237) 47545 POINT(389.04364 859.358948) 47546 POINT(714.502319 277.722107) 47547 POINT(988.124695 305.813843) 47548 POINT(515.099182 24.2179565) 47549 POINT(648.737366 630.266846) 47550 POINT(772.969238 970.038269) 47551 POINT(808.456726 141.536011) 47552 POINT(899.524719 473.866638) 47553 POINT(197.825012 574.926453) 47554 POINT(106.656113 965.421387) 47555 POINT(8.70319176 603.381592) 47556 POINT(780.53064 293.853729) 47557 POINT(330.473419 59.1244469) 47558 POINT(646.287903 127.025475) 47559 POINT(46.3615608 92.5814743) 47560 POINT(622.020081 301.334045) 47561 POINT(891.75116 383.750305) 47562 POINT(348.669128 529.172424) 47563 POINT(550.329407 794.371155) 47564 POINT(10.5750399 941.580322) 47565 POINT(553.999878 648.886597) 47566 POINT(163.93689 945.325745) 47567 POINT(988.601074 315.454163) 47568 POINT(505.096985 815.340088) 47569 POINT(47.5867767 348.063782) 47570 POINT(428.15033 224.531219) 47571 POINT(856.095703 85.5805283) 47572 POINT(635.859375 573.556946) 47573 POINT(572.508667 987.387573) 47574 POINT(226.29007 953.815613) 47575 POINT(6.05992365 837.968872) 47576 POINT(530.174072 928.997803) 47577 POINT(137.827362 259.599304) 47578 POINT(424.063019 15.9494743) 47579 POINT(347.121704 234.275528) 47580 POINT(998.321838 886.867371) 47581 POINT(502.67157 819.729858) 47582 POINT(876.477234 395.142944) 47583 POINT(632.954468 232.042191) 47584 POINT(426.089172 680.280884) 47585 POINT(725.551147 506.860779) 47586 POINT(786.972534 857.659119) 47587 POINT(482.643616 106.029449) 47588 POINT(489.20224 311.503662) 47589 POINT(67.9846039 935.606689) 47590 POINT(312.962219 939.991577) 47591 POINT(87.2305908 129.570099) 47592 POINT(530.142029 46.1568642) 47593 POINT(143.951004 741.285156) 47594 POINT(291.962372 14.1689959) 47595 POINT(281.541382 798.05304) 47596 POINT(419.270264 685.126099) 47597 POINT(758.433105 404.341766) 47598 POINT(397.054779 67.9114227) 47599 POINT(790.290833 133.874634) 47600 POINT(859.891907 947.700134) 47601 POINT(836.328125 502.449371) 47602 POINT(121.250031 236.779449) 47603 POINT(493.585388 50.6716194) 47604 POINT(390.824554 839.505188) 47605 POINT(207.259018 442.80249) 47606 POINT(737.388184 56.1191444) 47607 POINT(499.33078 974.375488) 47608 POINT(790.240479 450.0896) 47609 POINT(782.328003 212.478928) 47610 POINT(783.533813 862.521301) 47611 POINT(658.683289 919.605469) 47612 POINT(190.992722 227.5522) 47613 POINT(835.611145 451.342865) 47614 POINT(683.39325 767.67688) 47615 POINT(915.566711 2.14313674) 47616 POINT(980.331726 411.398254) 47617 POINT(686.200623 199.814407) 47618 POINT(827.101868 151.925247) 47619 POINT(542.408936 931.709412) 47620 POINT(475.863922 969.843872) 47621 POINT(65.8602448 2.93283057) 47622 POINT(809.799927 680.454285) 47623 POINT(881.636047 373.989319) 47624 POINT(444.800079 84.0802765) 47625 POINT(852.865601 662.492249) 47626 POINT(553.73468 432.028351) 47627 POINT(686.093994 196.828613) 47628 POINT(764.985168 949.548462) 47629 POINT(654.359985 820.629333) 47630 POINT(724.198669 848.280579) 47631 POINT(531.450684 522.751587) 47632 POINT(913.897827 423.062134) 47633 POINT(927.563904 731.095642) 47634 POINT(190.432236 861.023315) 47635 POINT(59.7640381 198.425812) 47636 POINT(515.752686 834.658752) 47637 POINT(944.434509 28.5464287) 47638 POINT(279.691101 735.692688) 47639 POINT(5.78563976 761.427795) 47640 POINT(877.033142 104.344116) 47641 POINT(924.877441 41.532486) 47642 POINT(225.99707 880.957275) 47643 POINT(56.1998558 235.637131) 47644 POINT(297.229584 156.438446) 47645 POINT(90.374855 211.479797) 47646 POINT(524.663452 117.68634) 47647 POINT(596.883972 118.817093) 47648 POINT(954.250244 508.018127) 47649 POINT(222.896835 477.795959) 47650 POINT(869.504761 674.885864) 47651 POINT(314.405853 739.412231) 47652 POINT(332.921051 822.988159) 47653 POINT(553.224609 68.3425446) 47654 POINT(971.711792 485.875031) 47655 POINT(435.358643 754.323425) 47656 POINT(490.182251 169.608521) 47657 POINT(448.320404 994.864319) 47658 POINT(837.692688 194.889694) 47659 POINT(110.76609 935.395203) 47660 POINT(932.038147 696.837219) 47661 POINT(419.136353 694.568176) 47662 POINT(17.7519169 652.4646) 47663 POINT(82.6730423 549.57782) 47664 POINT(515.009033 453.641571) 47665 POINT(428.263733 681.896057) 47666 POINT(928.298401 577.358032) 47667 POINT(306.169861 576.202515) 47668 POINT(578.781921 115.467957) 47669 POINT(341.080231 778.637146) 47670 POINT(597.344543 493.448761) 47671 POINT(642.481812 724.535767) 47672 POINT(466.950104 453.350647) 47673 POINT(634.562317 475.877045) 47674 POINT(86.3792572 11.9477262) 47675 POINT(87.3874512 715.753906) 47676 POINT(699.178406 483.677765) 47677 POINT(154.685913 247.883011) 47678 POINT(401.266724 22.4320164) 47679 POINT(254.112289 575.706299) 47680 POINT(320.82486 370.422424) 47681 POINT(796.348083 185.874985) 47682 POINT(920.644104 380.621918) 47683 POINT(990.977966 748.313171) 47684 POINT(374.996552 316.686371) 47685 POINT(468.998901 148.735077) 47686 POINT(242.361649 236.486328) 47687 POINT(81.4685364 684.16803) 47688 POINT(17.2107716 878.691284) 47689 POINT(606.68103 738.058716) 47690 POINT(876.828308 233.176025) 47691 POINT(948.009827 184.894348) 47692 POINT(524.279663 362.893707) 47693 POINT(782.9328 796.552734) 47694 POINT(400.69693 425.447723) 47695 POINT(160.638962 191.029724) 47696 POINT(336.730896 225.687225) 47697 POINT(699.017212 801.637268) 47698 POINT(525.143494 915.656738) 47699 POINT(337.875763 889.690002) 47700 POINT(318.021912 685.194885) 47701 POINT(928.198547 480.208862) 47702 POINT(30.0637455 886.059204) 47703 POINT(719.488831 987.990356) 47704 POINT(614.002197 75.9446945) 47705 POINT(319.294678 205.876099) 47706 POINT(668.833618 918.080078) 47707 POINT(289.483215 749.177734) 47708 POINT(852.521057 829.758728) 47709 POINT(889.492126 256.577545) 47710 POINT(957.847107 232.365753) 47711 POINT(832.518799 920.656006) 47712 POINT(935.775696 349.977203) 47713 POINT(369.41806 808.346008) 47714 POINT(230.867828 757.855408) 47715 POINT(718.101318 996.560974) 47716 POINT(346.938812 461.17569) 47717 POINT(302.721436 620.083313) 47718 POINT(460.299469 743.768494) 47719 POINT(524.270874 352.269012) 47720 POINT(717.799744 562.825195) 47721 POINT(747.923401 724.561218) 47722 POINT(125.801788 965.320801) 47723 POINT(836.146057 664.200867) 47724 POINT(385.600037 92.8818283) 47725 POINT(182.054459 82.4671631) 47726 POINT(845.247803 442.143555) 47727 POINT(684.56311 685.506226) 47728 POINT(804.937683 416.082794) 47729 POINT(163.604538 79.1627426) 47730 POINT(573.83905 987.797058) 47731 POINT(126.184731 886.694824) 47732 POINT(974.561646 791.764893) 47733 POINT(676.569031 947.926636) 47734 POINT(924.266541 839.431824) 47735 POINT(408.83374 690.002197) 47736 POINT(489.071259 647.30957) 47737 POINT(847.882019 688.803772) 47738 POINT(564.123108 78.5654144) 47739 POINT(14.4406071 27.2585239) 47740 POINT(431.983124 985.858765) 47741 POINT(907.286194 818.785156) 47742 POINT(706.346924 547.106995) 47743 POINT(626.877014 733.25354) 47744 POINT(89.3206863 390.734222) 47745 POINT(841.695984 336.8927) 47746 POINT(424.291687 487.176239) 47747 POINT(733.07959 850.066956) 47748 POINT(381.829285 754.03241) 47749 POINT(185.368195 616.847778) 47750 POINT(895.093994 188.926178) 47751 POINT(133.251053 262.561584) 47752 POINT(989.113159 553.155701) 47753 POINT(782.704163 550.350281) 47754 POINT(703.324524 517.494446) 47755 POINT(109.5597 211.211899) 47756 POINT(370.437073 226.580063) 47757 POINT(162.261734 155.599258) 47758 POINT(21.4830093 308.37149) 47759 POINT(382.63916 135.667923) 47760 POINT(274.630554 958.948486) 47761 POINT(368.56665 38.5372276) 47762 POINT(824.715881 269.887878) 47763 POINT(271.325012 990.930542) 47764 POINT(875.477112 975.617981) 47765 POINT(712.568909 548.400085) 47766 POINT(294.205841 212.187164) 47767 POINT(663.446472 647.740784) 47768 POINT(369.167847 268.077942) 47769 POINT(922.097656 204.508804) 47770 POINT(217.003143 133.965118) 47771 POINT(504.124756 239.763077) 47772 POINT(726.841797 524.19519) 47773 POINT(600.42627 987.838196) 47774 POINT(499.639191 941.419373) 47775 POINT(512.912231 352.367493) 47776 POINT(307.933441 921.032471) 47777 POINT(734.067017 388.75177) 47778 POINT(878.682129 348.268829) 47779 POINT(752.239441 761.294312) 47780 POINT(208.990524 353.023346) 47781 POINT(230.172913 681.39093) 47782 POINT(533.465637 811.364685) 47783 POINT(487.019836 24.2094116) 47784 POINT(547.82251 614.578125) 47785 POINT(109.431015 755.560852) 47786 POINT(584.541626 193.330887) 47787 POINT(498.894928 604.136108) 47788 POINT(364.28418 33.732811) 47789 POINT(32.0903816 978.554626) 47790 POINT(395.978577 211.833542) 47791 POINT(648.485229 360.976013) 47792 POINT(456.694977 62.2424927) 47793 POINT(292.775543 982.21051) 47794 POINT(190.446808 634.495605) 47795 POINT(15.1454782 185.80687) 47796 POINT(266.839325 367.560699) 47797 POINT(283.993591 974.597839) 47798 POINT(733.102722 609.134705) 47799 POINT(386.105103 272.373749) 47800 POINT(876.688965 43.4334259) 47801 POINT(698.751221 161.078552) 47802 POINT(743.604309 480.917328) 47803 POINT(215.50769 21.1641254) 47804 POINT(286.433563 658.37738) 47805 POINT(419.45578 126.094093) 47806 POINT(255.160919 941.187317) 47807 POINT(428.746613 853.686523) 47808 POINT(406.100983 995.099854) 47809 POINT(123.282585 574.877136) 47810 POINT(355.339142 377.138397) 47811 POINT(608.625854 278.046722) 47812 POINT(611.993835 498.957489) 47813 POINT(123.447502 663.390869) 47814 POINT(615.41925 847.166931) 47815 POINT(167.258972 391.643616) 47816 POINT(294.364777 649.839783) 47817 POINT(861.332886 255.148758) 47818 POINT(43.4149666 193.654175) 47819 POINT(81.2505188 632.782654) 47820 POINT(554.197998 699.402039) 47821 POINT(766.171936 835.170715) 47822 POINT(580.440552 423.090698) 47823 POINT(647.588989 0.231456488) 47824 POINT(94.6590118 474.362701) 47825 POINT(907.0047 484.181732) 47826 POINT(0.929499209 632.871033) 47827 POINT(503.811005 148.218903) 47828 POINT(396.721832 236.617371) 47829 POINT(975.876648 270.261139) 47830 POINT(574.278992 444.749603) 47831 POINT(848.381287 734.10553) 47832 POINT(468.675903 912.212158) 47833 POINT(661.758606 650.503113) 47834 POINT(998.81543 116.863625) 47835 POINT(395.863831 146.929428) 47836 POINT(815.662109 353.757782) 47837 POINT(401.424316 991.848877) 47838 POINT(928.545532 249.392578) 47839 POINT(106.344727 277.258698) 47840 POINT(788.081665 684.65448) 47841 POINT(826.530701 118.104065) 47842 POINT(878.978821 273.337738) 47843 POINT(139.697433 302.257751) 47844 POINT(136.667114 188.537491) 47845 POINT(965.402344 869.255676) 47846 POINT(420.376923 717.56958) 47847 POINT(802.66626 554.601929) 47848 POINT(427.200134 653.64093) 47849 POINT(403.530365 19.5544853) 47850 POINT(345.105896 586.204956) 47851 POINT(480.375244 419.850189) 47852 POINT(949.306152 559.318726) 47853 POINT(158.553864 542.430969) 47854 POINT(930.338074 46.5395432) 47855 POINT(673.753174 864.114136) 47856 POINT(891.450745 0.748128355) 47857 POINT(983.499146 133.163162) 47858 POINT(508.169403 27.1756058) 47859 POINT(300.497711 632.335999) 47860 POINT(848.208862 787.881897) 47861 POINT(176.310287 104.318329) 47862 POINT(302.290283 256.649384) 47863 POINT(359.585327 377.216797) 47864 POINT(176.072189 726.004272) 47865 POINT(744.212585 254.339478) 47866 POINT(893.666138 734.775452) 47867 POINT(907.965088 979.810852) 47868 POINT(320.506104 687.783875) 47869 POINT(948.20752 76.2516785) 47870 POINT(737.255981 622.090698) 47871 POINT(52.9587364 105.030334) 47872 POINT(999.662903 720.506714) 47873 POINT(836.006226 721.312988) 47874 POINT(867.616638 57.1937103) 47875 POINT(325.021606 598.779846) 47876 POINT(49.1027908 97.2113342) 47877 POINT(360.966644 461.537323) 47878 POINT(303.310883 467.440002) 47879 POINT(362.90097 678.167603) 47880 POINT(807.069824 916.737) 47881 POINT(80.1060486 5.36740446) 47882 POINT(688.358093 525.367249) 47883 POINT(316.863037 992.216003) 47884 POINT(151.315247 585.23468) 47885 POINT(226.020157 912.37854) 47886 POINT(393.535858 21.3888416) 47887 POINT(755.54071 537.721619) 47888 POINT(686.156311 270.480499) 47889 POINT(155.546051 525.744507) 47890 POINT(641.162415 572.708191) 47891 POINT(148.088272 103.390854) 47892 POINT(122.402977 210.369202) 47893 POINT(792.265686 295.298645) 47894 POINT(214.058624 269.070312) 47895 POINT(185.711823 385.103302) 47896 POINT(592.981201 578.255615) 47897 POINT(700.453186 99.3753967) 47898 POINT(962.709778 67.8808365) 47899 POINT(305.276276 166.133408) 47900 POINT(503.526947 460.349518) 47901 POINT(854.827637 190.218567) 47902 POINT(634.217163 994.387756) 47903 POINT(782.573792 988.385254) 47904 POINT(529.919006 384.160095) 47905 POINT(3.48116231 685.593872) 47906 POINT(512.449646 977.033875) 47907 POINT(673.970093 554.17334) 47908 POINT(543.665466 752.023804) 47909 POINT(760.608582 108.345901) 47910 POINT(980.876221 453.752533) 47911 POINT(702.529175 692.808655) 47912 POINT(571.253845 480.039642) 47913 POINT(211.174713 335.989777) 47914 POINT(397.88031 721.894653) 47915 POINT(908.348511 102.225075) 47916 POINT(375.018585 120.273781) 47917 POINT(861.411377 464.030975) 47918 POINT(608.92749 372.636078) 47919 POINT(512.720215 233.108688) 47920 POINT(880.77771 752.885803) 47921 POINT(227.044937 509.556946) 47922 POINT(10.7778168 50.1316376) 47923 POINT(981.867249 621.468689) 47924 POINT(471.4328 974.866821) 47925 POINT(215.413284 585.746399) 47926 POINT(330.005341 206.343994) 47927 POINT(718.384644 695.315002) 47928 POINT(115.924141 383.36911) 47929 POINT(728.137573 163.293625) 47930 POINT(181.40625 484.390808) 47931 POINT(157.150513 582.08429) 47932 POINT(409.37677 54.1465988) 47933 POINT(587.773682 301.34668) 47934 POINT(31.4492283 856.41687) 47935 POINT(297.35318 725.683655) 47936 POINT(862.968933 649.413452) 47937 POINT(974.875 278.410065) 47938 POINT(407.73996 666.412842) 47939 POINT(863.414124 185.495544) 47940 POINT(200.999832 954.468079) 47941 POINT(51.1558838 882.763489) 47942 POINT(67.5437241 284.065186) 47943 POINT(354.969025 334.416809) 47944 POINT(997.828918 838.718506) 47945 POINT(339.953735 732.300781) 47946 POINT(366.729248 162.637222) 47947 POINT(219.701981 298.979126) 47948 POINT(718.803955 864.283691) 47949 POINT(736.945007 385.293579) 47950 POINT(255.067688 712.044067) 47951 POINT(262.711182 891.825867) 47952 POINT(116.990395 24.1360283) 47953 POINT(732.077942 676.437012) 47954 POINT(164.640961 547.699158) 47955 POINT(192.216415 975.296265) 47956 POINT(981.460938 381.786499) 47957 POINT(537.943054 666.63501) 47958 POINT(555.183899 356.374023) 47959 POINT(893.80249 164.595093) 47960 POINT(433.097717 705.806519) 47961 POINT(340.310822 830.335876) 47962 POINT(33.5047913 832.226013) 47963 POINT(624.024353 530.002014) 47964 POINT(320.30603 545.016541) 47965 POINT(813.321838 620.828308) 47966 POINT(773.700012 879.314575) 47967 POINT(819.083923 489.801331) 47968 POINT(779.734253 573.962158) 47969 POINT(374.825104 351.762329) 47970 POINT(430.696991 551.339172) 47971 POINT(625.419861 399.089783) 47972 POINT(696.038452 453.337311) 47973 POINT(396.615906 412.258331) 47974 POINT(861.732727 4.99625158) 47975 POINT(576.436035 434.346527) 47976 POINT(619.926331 896.302734) 47977 POINT(729.833374 193.320663) 47978 POINT(748.692383 80.2679214) 47979 POINT(63.2250938 249.625732) 47980 POINT(685.161438 109.187576) 47981 POINT(457.536041 744.874023) 47982 POINT(648.805603 989.117371) 47983 POINT(377.029266 537.458862) 47984 POINT(202.901382 283.850403) 47985 POINT(744.480103 105.59082) 47986 POINT(92.0161743 993.481079) 47987 POINT(137.310059 66.0307465) 47988 POINT(905.691895 359.015656) 47989 POINT(18.3848686 451.781097) 47990 POINT(90.4126129 884.112427) 47991 POINT(861.684021 983.919189) 47992 POINT(263.632019 839.18988) 47993 POINT(487.476013 696.966858) 47994 POINT(828.426758 533.743347) 47995 POINT(282.61322 184.665436) 47996 POINT(901.671387 62.3019371) 47997 POINT(175.855713 940.364868) 47998 POINT(362.077942 791.197754) 47999 POINT(770.621704 305.668701) 48000 POINT(909.696838 940.999878) 48001 POINT(241.256897 210.353165) 48002 POINT(871.360596 507.501678) 48003 POINT(884.943542 499.374573) 48004 POINT(756.009521 867.576172) 48005 POINT(328.996063 278.098846) 48006 POINT(381.943787 540.700684) 48007 POINT(639.888367 459.454254) 48008 POINT(589.989502 168.782669) 48009 POINT(111.447128 926.874756) 48010 POINT(900.670654 173.009155) 48011 POINT(548.845947 310.647247) 48012 POINT(951.191345 224.335312) 48013 POINT(964.116882 954.196106) 48014 POINT(593.917297 492.079041) 48015 POINT(887.73175 878.167542) 48016 POINT(289.806885 121.697243) 48017 POINT(937.40979 356.758118) 48018 POINT(978.689514 937.59137) 48019 POINT(905.810303 541.049133) 48020 POINT(247.379669 509.769043) 48021 POINT(797.428772 602.258423) 48022 POINT(93.4076767 395.036316) 48023 POINT(904.213379 343.53421) 48024 POINT(346.848389 135.40303) 48025 POINT(929.664551 627.538513) 48026 POINT(268.648499 930.462341) 48027 POINT(201.106689 289.582764) 48028 POINT(597.443665 399.198029) 48029 POINT(326.186676 219.081039) 48030 POINT(427.684998 503.13974) 48031 POINT(7.33669424 777.809692) 48032 POINT(532.656738 150.819916) 48033 POINT(709.954224 729.75061) 48034 POINT(812.483826 767.495972) 48035 POINT(147.526993 947.632507) 48036 POINT(368.444794 859.132324) 48037 POINT(89.1241074 664.767822) 48038 POINT(652.891785 381.346893) 48039 POINT(378.972412 302.137238) 48040 POINT(294.032013 238.711197) 48041 POINT(679.741882 530.257507) 48042 POINT(575.061523 74.359375) 48043 POINT(784.314392 349.150024) 48044 POINT(389.111816 391.855377) 48045 POINT(186.95787 479.313904) 48046 POINT(479.738739 98.8471527) 48047 POINT(343.862732 159.224823) 48048 POINT(298.950165 533.995361) 48049 POINT(892.919006 713.376282) 48050 POINT(211.851715 584.414124) 48051 POINT(329.562286 677.737) 48052 POINT(592.835632 410.440308) 48053 POINT(863.745239 300.812134) 48054 POINT(589.91571 748.624451) 48055 POINT(604.985352 347.997589) 48056 POINT(681.517151 583.693359) 48057 POINT(858.506531 59.9539337) 48058 POINT(267.084137 877.792053) 48059 POINT(264.3638 103.280678) 48060 POINT(275.715424 873.10437) 48061 POINT(199.874252 420.438904) 48062 POINT(455.249329 485.147339) 48063 POINT(298.558289 67.8811874) 48064 POINT(630.489868 362.416992) 48065 POINT(949.1297 724.552307) 48066 POINT(759.41571 78.0513153) 48067 POINT(136.992676 370.799408) 48068 POINT(239.187332 555.808228) 48069 POINT(217.46846 259.37616) 48070 POINT(241.638412 521.593079) 48071 POINT(981.967651 320.372772) 48072 POINT(215.89537 459.30545) 48073 POINT(341.048462 420.896637) 48074 POINT(362.14151 72.8196182) 48075 POINT(825.397461 814.153381) 48076 POINT(336.766876 592.006287) 48077 POINT(948.987671 802.825867) 48078 POINT(629.798523 778.01123) 48079 POINT(917.898438 265.55603) 48080 POINT(598.279358 190.31575) 48081 POINT(661.52356 675.744385) 48082 POINT(634.980774 74.830162) 48083 POINT(246.289825 517.277649) 48084 POINT(194.436432 158.453461) 48085 POINT(269.805725 276.272705) 48086 POINT(634.846741 121.833664) 48087 POINT(267.950531 181.216263) 48088 POINT(15.1153889 639.773193) 48089 POINT(769.300964 561.33136) 48090 POINT(14.4683495 589.757141) 48091 POINT(749.108398 595.593445) 48092 POINT(124.208984 435.976196) 48093 POINT(545.546265 599.151794) 48094 POINT(756.758179 392.137054) 48095 POINT(59.0208054 122.211624) 48096 POINT(188.905975 885.088623) 48097 POINT(343.995026 566.549927) 48098 POINT(519.983887 107.256798) 48099 POINT(683.139282 820.253479) 48100 POINT(500.399323 224.112488) 48101 POINT(394.958466 401.077423) 48102 POINT(43.7251892 649.063965) 48103 POINT(35.7323341 627.757202) 48104 POINT(51.5067825 908.548401) 48105 POINT(210.151764 517.017029) 48106 POINT(382.449127 81.6200714) 48107 POINT(876.074585 57.8787041) 48108 POINT(118.134056 838.528076) 48109 POINT(119.113495 635.788879) 48110 POINT(900.450684 339.808929) 48111 POINT(762.192566 74.2777405) 48112 POINT(929.205261 950.082947) 48113 POINT(571.773499 704.187439) 48114 POINT(52.7248573 18.4436188) 48115 POINT(12.290287 248.441406) 48116 POINT(303.631744 170.114578) 48117 POINT(597.702637 77.9700012) 48118 POINT(723.406982 322.575684) 48119 POINT(586.361084 521.485718) 48120 POINT(583.0849 304.921417) 48121 POINT(583.086243 633.668396) 48122 POINT(296.739258 733.724976) 48123 POINT(149.124359 893.951843) 48124 POINT(795.784058 34.6763382) 48125 POINT(703.219238 238.098557) 48126 POINT(695.090637 939.911804) 48127 POINT(330.308716 149.340408) 48128 POINT(749.206421 820.036926) 48129 POINT(931.331177 52.8926201) 48130 POINT(334.37793 101.788193) 48131 POINT(859.43689 280.604187) 48132 POINT(668.569824 192.111435) 48133 POINT(533.80481 480.481415) 48134 POINT(319.306183 582.827271) 48135 POINT(819.648682 633.544983) 48136 POINT(73.1370163 593.290222) 48137 POINT(357.361145 168.304993) 48138 POINT(229.167755 858.446655) 48139 POINT(738.733032 907.038513) 48140 POINT(813.832275 663.993958) 48141 POINT(15.5413055 379.632172) 48142 POINT(529.50769 437.1026) 48143 POINT(615.421631 57.2368927) 48144 POINT(583.359192 629.176819) 48145 POINT(289.823364 212.220078) 48146 POINT(985.785278 275.808502) 48147 POINT(265.130219 841.374268) 48148 POINT(753.952026 228.463226) 48149 POINT(674.96991 600.1474) 48150 POINT(452.231537 353.19342) 48151 POINT(561.715637 206.529083) 48152 POINT(98.0898514 455.085083) 48153 POINT(18.7102661 769.506104) 48154 POINT(62.4211349 775.131653) 48155 POINT(250.450989 979.672302) 48156 POINT(803.945801 221.326385) 48157 POINT(632.618774 835.237488) 48158 POINT(157.650574 31.1375103) 48159 POINT(12.3019114 347.556854) 48160 POINT(210.041855 951.96991) 48161 POINT(84.0589066 524.251648) 48162 POINT(255.031509 794.134399) 48163 POINT(370.72226 428.481476) 48164 POINT(852.522705 22.2807693) 48165 POINT(118.319771 589.068481) 48166 POINT(979.280884 961.870361) 48167 POINT(849.568054 832.687683) 48168 POINT(743.658142 903.350098) 48169 POINT(805.58075 336.572205) 48170 POINT(160.508377 475.167572) 48171 POINT(514.362976 484.125458) 48172 POINT(281.6297 855.161926) 48173 POINT(59.0963249 838.071655) 48174 POINT(234.872849 816.355774) 48175 POINT(659.030273 133.549881) 48176 POINT(829.350708 16.5340309) 48177 POINT(129.002655 809.710999) 48178 POINT(675.799133 990.655212) 48179 POINT(936.340515 931.387207) 48180 POINT(794.016479 781.124084) 48181 POINT(540.403259 856.375854) 48182 POINT(430.517456 223.937729) 48183 POINT(672.704773 148.53627) 48184 POINT(989.274719 419.980835) 48185 POINT(214.90094 757.592712) 48186 POINT(240.007355 572.209045) 48187 POINT(456.578339 634.246094) 48188 POINT(168.352249 13.6585169) 48189 POINT(191.499817 740.520447) 48190 POINT(279.999207 131.319489) 48191 POINT(344.621033 882.439209) 48192 POINT(879.170288 890.703186) 48193 POINT(445.808868 232.984207) 48194 POINT(776.505737 559.823914) 48195 POINT(190.894287 641.324707) 48196 POINT(211.424393 934.357056) 48197 POINT(795.737488 418.603729) 48198 POINT(121.426964 183.57663) 48199 POINT(671.756592 845.87323) 48200 POINT(580.801514 315.617737) 48201 POINT(777.3797 26.4197788) 48202 POINT(542.092407 37.5598488) 48203 POINT(552.753052 278.701538) 48204 POINT(426.951416 438.326294) 48205 POINT(676.543213 179.023727) 48206 POINT(563.173584 818.609802) 48207 POINT(623.676453 772.141602) 48208 POINT(589.525513 140.749512) 48209 POINT(609.385864 796.046875) 48210 POINT(340.222076 872.117188) 48211 POINT(514.111816 952.745361) 48212 POINT(170.540726 488.158569) 48213 POINT(659.88031 3.96788621) 48214 POINT(441.156281 16.4438286) 48215 POINT(294.156342 499.20285) 48216 POINT(891.522034 812.196594) 48217 POINT(602.336365 238.548279) 48218 POINT(805.343079 220.71109) 48219 POINT(363.642426 635.628113) 48220 POINT(310.322571 5.36694956) 48221 POINT(663.966858 242.807007) 48222 POINT(419.48822 894.779236) 48223 POINT(638.072754 114.393738) 48224 POINT(775.2146 462.761475) 48225 POINT(115.492088 961.297363) 48226 POINT(715.371643 824.651733) 48227 POINT(450.609161 256.171814) 48228 POINT(662.791626 478.189423) 48229 POINT(217.034256 410.550629) 48230 POINT(816.533142 592.202271) 48231 POINT(906.84021 709.564758) 48232 POINT(271.415253 348.154694) 48233 POINT(192.062561 965.902405) 48234 POINT(539.334412 655.03595) 48235 POINT(652.685547 468.68692) 48236 POINT(723.387451 914.669067) 48237 POINT(453.906525 146.519501) 48238 POINT(488.394012 130.460358) 48239 POINT(145.676941 344.284515) 48240 POINT(366.723328 786.678162) 48241 POINT(267.363098 903.296326) 48242 POINT(677.211243 726.957336) 48243 POINT(555.989746 522.456787) 48244 POINT(461.344635 19.9162369) 48245 POINT(392.181244 618.391663) 48246 POINT(851.867065 197.207977) 48247 POINT(365.980621 64.7693176) 48248 POINT(384.710205 606.293213) 48249 POINT(25.7150669 510.528168) 48250 POINT(99.0081253 148.640366) 48251 POINT(585.620605 204.526108) 48252 POINT(198.344543 726.459534) 48253 POINT(538.794373 906.778259) 48254 POINT(378.892273 40.630764) 48255 POINT(256.095215 76.1938629) 48256 POINT(179.420654 352.980225) 48257 POINT(81.8701782 889.412354) 48258 POINT(340.093109 721.905457) 48259 POINT(574.975708 78.4483871) 48260 POINT(840.499451 456.590881) 48261 POINT(127.749084 155.485535) 48262 POINT(144.531876 917.352783) 48263 POINT(543.75 416.039734) 48264 POINT(35.7224503 764.296265) 48265 POINT(412.739655 537.192322) 48266 POINT(59.8251991 660.370239) 48267 POINT(512.131775 491.649231) 48268 POINT(983.200378 745.611755) 48269 POINT(539.790771 522.618774) 48270 POINT(260.50766 785.034058) 48271 POINT(373.452454 726.137695) 48272 POINT(421.035492 262.036438) 48273 POINT(715.210022 289.374146) 48274 POINT(620.508057 241.794693) 48275 POINT(451.57016 74.0617142) 48276 POINT(658.360168 104.886543) 48277 POINT(704.808838 217.685135) 48278 POINT(276.32901 181.06398) 48279 POINT(312.115906 971.059998) 48280 POINT(982.971313 467.905731) 48281 POINT(115.826614 584.887451) 48282 POINT(393.699799 460.974762) 48283 POINT(829.527039 700.689819) 48284 POINT(743.58252 253.609329) 48285 POINT(537.747192 159.851242) 48286 POINT(880.042114 478.757416) 48287 POINT(846.203125 200.519135) 48288 POINT(437.414795 996.107178) 48289 POINT(908.125671 713.728577) 48290 POINT(750.909851 999.592163) 48291 POINT(671.250793 140.756577) 48292 POINT(302.788757 98.1900558) 48293 POINT(708.803711 42.5115204) 48294 POINT(480.632385 962.459473) 48295 POINT(483.667603 703.429199) 48296 POINT(241.57872 26.7528019) 48297 POINT(243.397217 957.243347) 48298 POINT(945.714294 79.425766) 48299 POINT(428.447418 866.092529) 48300 POINT(377.833313 88.166832) 48301 POINT(298.700928 839.324097) 48302 POINT(504.110565 412.965027) 48303 POINT(823.973145 151.28595) 48304 POINT(196.562897 414.003693) 48305 POINT(950.65863 781.205261) 48306 POINT(344.320984 15.3310623) 48307 POINT(435.194733 741.42157) 48308 POINT(0.639321446 827.550232) 48309 POINT(139.808853 36.8700142) 48310 POINT(485.314453 144.659744) 48311 POINT(209.473572 578.522217) 48312 POINT(373.948975 332.845245) 48313 POINT(911.621582 491.844818) 48314 POINT(711.615601 534.393921) 48315 POINT(220.607605 569.199951) 48316 POINT(445.385254 70.5061264) 48317 POINT(893.900574 129.092621) 48318 POINT(287.457184 685.788208) 48319 POINT(821.43335 297.494324) 48320 POINT(10.9619675 718.40387) 48321 POINT(666.432434 14.9874573) 48322 POINT(509.719818 177.664871) 48323 POINT(166.534592 711.664368) 48324 POINT(990.274353 480.282806) 48325 POINT(167.322952 158.67247) 48326 POINT(31.4533138 543.25592) 48327 POINT(333.970551 95.7564926) 48328 POINT(268.730072 1.71145082) 48329 POINT(175.967819 708.4552) 48330 POINT(416.092926 350.880493) 48331 POINT(248.567596 262.746307) 48332 POINT(708.417542 780.289368) 48333 POINT(214.362839 340.494873) 48334 POINT(567.053772 743.371338) 48335 POINT(489.203796 313.278778) 48336 POINT(998.173889 895.824036) 48337 POINT(916.467163 367.888855) 48338 POINT(518.208435 840.577393) 48339 POINT(848.645935 492.508118) 48340 POINT(57.3616104 176.231079) 48341 POINT(29.5904064 52.3658943) 48342 POINT(567.821472 89.9338608) 48343 POINT(206.883545 647.265259) 48344 POINT(908.056091 236.200302) 48345 POINT(732.282166 836.14679) 48346 POINT(891.836243 862.005859) 48347 POINT(877.535645 536.75708) 48348 POINT(286.79361 178.208038) 48349 POINT(879.960815 728.133057) 48350 POINT(581.978455 331.074463) 48351 POINT(91.7898712 782.228455) 48352 POINT(779.723328 129.247192) 48353 POINT(122.525688 876.43689) 48354 POINT(519.962402 955.249146) 48355 POINT(695.465759 554.494446) 48356 POINT(933.952637 201.683563) 48357 POINT(577.455261 438.367188) 48358 POINT(621.155518 676.254822) 48359 POINT(452.177429 192.976639) 48360 POINT(623.070801 912.937561) 48361 POINT(887.400696 219.337173) 48362 POINT(759.376831 295.954102) 48363 POINT(569.202515 825.854736) 48364 POINT(926.280396 576.228394) 48365 POINT(43.0432243 193.76152) 48366 POINT(119.076393 354.831726) 48367 POINT(192.549103 718.169556) 48368 POINT(918.261902 683.407532) 48369 POINT(309.990601 943.862366) 48370 POINT(811.961365 237.080383) 48371 POINT(653.842529 513.192261) 48372 POINT(60.8422012 840.947205) 48373 POINT(962.746216 256.404266) 48374 POINT(342.207001 157.592178) 48375 POINT(194.03949 752.099548) 48376 POINT(337.732727 391.438507) 48377 POINT(299.292175 602.731689) 48378 POINT(907.708252 148.073669) 48379 POINT(737.606995 57.9710083) 48380 POINT(880.048462 455.493073) 48381 POINT(586.585266 994.081055) 48382 POINT(584.401306 152.666428) 48383 POINT(45.6894989 152.353958) 48384 POINT(593.014038 762.731018) 48385 POINT(170.272736 751.994934) 48386 POINT(156.501099 867.869629) 48387 POINT(237.917068 436.113373) 48388 POINT(213.209396 305.577179) 48389 POINT(971.19281 62.7633972) 48390 POINT(727.574951 17.22439) 48391 POINT(239.893356 211.015198) 48392 POINT(300.901215 545.876465) 48393 POINT(986.731995 795.172485) 48394 POINT(275.689148 338.134583) 48395 POINT(187.032593 744.465393) 48396 POINT(903.453308 631.878784) 48397 POINT(216.870255 952.43927) 48398 POINT(0.438299567 676.362061) 48399 POINT(195.299133 287.054443) 48400 POINT(13.5034437 841.932251) 48401 POINT(642.750916 302.065521) 48402 POINT(650.48645 233.149216) 48403 POINT(195.534973 841.033569) 48404 POINT(489.539581 261.262878) 48405 POINT(499.872925 181.442657) 48406 POINT(17.3192749 190.584351) 48407 POINT(720.444214 947.575562) 48408 POINT(806.703857 519.508057) 48409 POINT(108.507668 212.39357) 48410 POINT(434.226898 652.74176) 48411 POINT(631.935486 11.6496706) 48412 POINT(862.09845 269.210663) 48413 POINT(950.702942 674.437256) 48414 POINT(429.108246 83.2898254) 48415 POINT(781.40686 715.565613) 48416 POINT(71.5613327 969.267761) 48417 POINT(516.24292 584.414124) 48418 POINT(645.506226 194.676544) 48419 POINT(506.690308 885.720703) 48420 POINT(163.827774 452.370178) 48421 POINT(679.191772 109.211845) 48422 POINT(768.35553 549.664856) 48423 POINT(686.755188 771.807495) 48424 POINT(403.185394 701.754639) 48425 POINT(12.1551809 798.68219) 48426 POINT(469.24295 972.904541) 48427 POINT(798.903748 73.7187958) 48428 POINT(453.179138 240.132462) 48429 POINT(497.153748 267.442505) 48430 POINT(320.552948 238.392044) 48431 POINT(53.0744896 208.611649) 48432 POINT(731.615723 542.445374) 48433 POINT(550.007507 377.104645) 48434 POINT(218.688553 398.081909) 48435 POINT(214.000427 249.068726) 48436 POINT(901.063354 924.139954) 48437 POINT(139.391479 674.578552) 48438 POINT(103.630928 547.580383) 48439 POINT(164.35495 683.023193) 48440 POINT(89.2372818 427.939484) 48441 POINT(52.2270317 827.446533) 48442 POINT(665.418945 786.762695) 48443 POINT(610.64801 647.088196) 48444 POINT(540.107788 334.63324) 48445 POINT(33.8345451 64.0082016) 48446 POINT(287.701904 626.322327) 48447 POINT(588.519897 567.159729) 48448 POINT(659.262024 57.1898918) 48449 POINT(614.278137 173.445419) 48450 POINT(694.337952 115.672379) 48451 POINT(585.211975 203.637863) 48452 POINT(835.995911 342.542633) 48453 POINT(921.592773 450.66037) 48454 POINT(637.081726 523.285095) 48455 POINT(164.376801 943.337402) 48456 POINT(999.809204 901.681824) 48457 POINT(678.091187 80.6894608) 48458 POINT(490.724396 487.46814) 48459 POINT(952.022888 806.137024) 48460 POINT(600.42041 816.230225) 48461 POINT(877.705444 849.198608) 48462 POINT(806.620178 173.741501) 48463 POINT(722.271729 41.6403275) 48464 POINT(588.114685 328.464996) 48465 POINT(350.327393 738.416382) 48466 POINT(716.353638 124.392014) 48467 POINT(107.73835 379.601196) 48468 POINT(15.182169 911.789429) 48469 POINT(533.36731 921.963562) 48470 POINT(574.371643 166.447174) 48471 POINT(151.728668 967.590332) 48472 POINT(79.4012527 839.946838) 48473 POINT(291.261414 907.388672) 48474 POINT(381.725494 956.223633) 48475 POINT(518.080139 780.357971) 48476 POINT(786.964294 825.8078) 48477 POINT(550.413025 91.8206558) 48478 POINT(342.637634 481.770172) 48479 POINT(679.355103 817.57312) 48480 POINT(924.94043 684.35144) 48481 POINT(850.063049 794.002197) 48482 POINT(371.428894 118.938354) 48483 POINT(815.228271 720.097412) 48484 POINT(702.314758 389.499451) 48485 POINT(648.841309 905.067932) 48486 POINT(489.411713 642.479248) 48487 POINT(470.294586 529.67688) 48488 POINT(243.83786 340.752014) 48489 POINT(372.258911 660.783264) 48490 POINT(829.675293 930.477234) 48491 POINT(244.152954 192.913025) 48492 POINT(102.367027 133.113159) 48493 POINT(738.159546 679.562134) 48494 POINT(402.259125 968.597229) 48495 POINT(916.508606 67.5997086) 48496 POINT(93.0725784 632.581604) 48497 POINT(855.155457 333.431915) 48498 POINT(863.031738 160.03508) 48499 POINT(446.16571 127.989868) 48500 POINT(46.8313637 699.523132) 48501 POINT(953.330811 723.21759) 48502 POINT(276.661163 877.72522) 48503 POINT(225.167389 785.282349) 48504 POINT(530.32251 473.529602) 48505 POINT(377.005005 14.5661144) 48506 POINT(267.384857 657.27301) 48507 POINT(817.971252 240.595749) 48508 POINT(186.786804 735.907532) 48509 POINT(646.10376 658.035522) 48510 POINT(10.8564234 422.244751) 48511 POINT(170.432739 69.9221725) 48512 POINT(114.106354 499.729767) 48513 POINT(975.695496 64.3245087) 48514 POINT(236.167023 657.861023) 48515 POINT(934.500793 304.031921) 48516 POINT(615.80603 642.422119) 48517 POINT(632.50769 634.818665) 48518 POINT(779.209839 504.803223) 48519 POINT(121.912575 611.024475) 48520 POINT(735.773987 92.1455078) 48521 POINT(902.745422 657.982849) 48522 POINT(256.876068 331.75824) 48523 POINT(773.808533 315.199615) 48524 POINT(218.943863 806.774353) 48525 POINT(247.292709 473.728851) 48526 POINT(116.140884 463.489319) 48527 POINT(713.069397 893.148132) 48528 POINT(927.875977 543.059631) 48529 POINT(428.384918 480.741089) 48530 POINT(652.919556 390.635315) 48531 POINT(732.312317 276.438354) 48532 POINT(289.120911 203.605103) 48533 POINT(6.0974493 15.8426285) 48534 POINT(592.641785 968.10498) 48535 POINT(762.863525 760.001038) 48536 POINT(43.4438972 370.574188) 48537 POINT(623.50531 869.837036) 48538 POINT(477.815247 820.846802) 48539 POINT(668.65979 566.292664) 48540 POINT(430.433289 487.583221) 48541 POINT(926.124878 220.862015) 48542 POINT(417.417725 418.939209) 48543 POINT(313.912476 147.541946) 48544 POINT(950.712524 35.0269051) 48545 POINT(794.256714 64.1429977) 48546 POINT(718.778503 58.3588638) 48547 POINT(464.501312 121.863205) 48548 POINT(17.9199352 959.120178) 48549 POINT(806.107666 796.136108) 48550 POINT(544.679749 289.451202) 48551 POINT(900.447815 333.744781) 48552 POINT(137.815231 561.230164) 48553 POINT(495.076233 471.401489) 48554 POINT(16.7284508 172.038651) 48555 POINT(840.450867 905.398499) 48556 POINT(733.318848 31.6103153) 48557 POINT(16.344553 392.149902) 48558 POINT(120.621414 104.268036) 48559 POINT(409.35022 302.682159) 48560 POINT(371.983459 820.439148) 48561 POINT(295.927673 113.256393) 48562 POINT(359.743378 871.712036) 48563 POINT(415.515991 377.783875) 48564 POINT(946.343201 79.1032867) 48565 POINT(599.588318 649.637024) 48566 POINT(350.61145 993.903564) 48567 POINT(147.545029 70.5835724) 48568 POINT(307.782349 475.955322) 48569 POINT(729.533569 658.235901) 48570 POINT(456.99765 407.395569) 48571 POINT(248.278717 951.583374) 48572 POINT(961.008545 793.314941) 48573 POINT(733.567505 633.471558) 48574 POINT(119.132248 17.6048298) 48575 POINT(979.03833 71.5252457) 48576 POINT(688.912842 846.27124) 48577 POINT(94.3816299 702.843018) 48578 POINT(750.210571 676.108765) 48579 POINT(348.107635 646.29126) 48580 POINT(396.542999 428.882874) 48581 POINT(855.922668 438.496887) 48582 POINT(944.496826 695.732361) 48583 POINT(644.87561 950.40741) 48584 POINT(38.1121635 189.663025) 48585 POINT(39.2858353 210.91069) 48586 POINT(269.638428 102.673492) 48587 POINT(894.683411 418.449493) 48588 POINT(222.410721 565.772583) 48589 POINT(2.33793712 2.44566727) 48590 POINT(100.374344 443.080017) 48591 POINT(629.304443 360.87558) 48592 POINT(979.683472 164.137299) 48593 POINT(105.284348 271.377045) 48594 POINT(791.641907 110.906418) 48595 POINT(154.118179 889.286499) 48596 POINT(216.980804 267.741058) 48597 POINT(158.650208 411.109406) 48598 POINT(986.156433 844.541199) 48599 POINT(185.421036 615.841614) 48600 POINT(589.186584 466.637817) 48601 POINT(650.654907 584.637268) 48602 POINT(4.85870504 251.61058) 48603 POINT(329.950806 442.534943) 48604 POINT(869.372131 765.763672) 48605 POINT(677.71637 230.912079) 48606 POINT(78.1947327 964.527832) 48607 POINT(383.584106 288.261627) 48608 POINT(414.819824 905.419006) 48609 POINT(834.829285 337.628601) 48610 POINT(642.013977 303.772614) 48611 POINT(837.298584 915.083435) 48612 POINT(994.005798 45.3306122) 48613 POINT(61.8200417 654.045227) 48614 POINT(43.9413948 131.547272) 48615 POINT(295.875122 109.825996) 48616 POINT(65.0260849 409.491974) 48617 POINT(586.987671 377.80426) 48618 POINT(784.398926 915.371948) 48619 POINT(738.447083 353.119324) 48620 POINT(577.396667 966.519287) 48621 POINT(661.399292 491.319946) 48622 POINT(851.023743 889.345032) 48623 POINT(679.887756 765.218506) 48624 POINT(506.852234 729.049866) 48625 POINT(735.114929 846.153015) 48626 POINT(796.049011 600.207764) 48627 POINT(328.158997 556.41803) 48628 POINT(626.714355 795.748718) 48629 POINT(90.8761215 297.892944) 48630 POINT(953.284241 56.0180473) 48631 POINT(775.126892 429.600525) 48632 POINT(469.594879 830.777954) 48633 POINT(721.298828 679.420166) 48634 POINT(594.653381 157.150528) 48635 POINT(106.98391 383.436127) 48636 POINT(39.645916 278.122589) 48637 POINT(412.369659 167.02182) 48638 POINT(885.816772 82.505722) 48639 POINT(75.2988892 146.976547) 48640 POINT(598.262634 241.955933) 48641 POINT(579.05304 641.686707) 48642 POINT(216.226425 828.223999) 48643 POINT(630.849426 39.863369) 48644 POINT(765.090942 629.266541) 48645 POINT(388.073425 977.006653) 48646 POINT(851.031311 151.864517) 48647 POINT(189.774261 397.097229) 48648 POINT(251.386841 847.257202) 48649 POINT(98.4447861 795.462341) 48650 POINT(880.572693 761.92395) 48651 POINT(975.215454 823.290955) 48652 POINT(774.220337 75.5667267) 48653 POINT(352.078827 126.474052) 48654 POINT(127.777054 710.732544) 48655 POINT(157.503754 448.556427) 48656 POINT(87.7113037 892.152832) 48657 POINT(354.808777 572.449158) 48658 POINT(14.5765629 598.180359) 48659 POINT(802.072571 46.651268) 48660 POINT(611.430298 821.71521) 48661 POINT(502.425446 43.1592674) 48662 POINT(385.556305 374.39035) 48663 POINT(826.669495 345.73819) 48664 POINT(836.293091 196.825241) 48665 POINT(26.8293171 854.131958) 48666 POINT(940.347839 241.368179) 48667 POINT(268.066223 113.086288) 48668 POINT(544.722229 574.468933) 48669 POINT(664.159729 1.34357464) 48670 POINT(235.859787 396.824036) 48671 POINT(163.352081 627.270264) 48672 POINT(894.544861 834.498779) 48673 POINT(179.771057 722.351135) 48674 POINT(185.254776 137.774445) 48675 POINT(262.02713 964.900085) 48676 POINT(585.04071 1.52819109) 48677 POINT(824.183044 33.1023903) 48678 POINT(602.654846 147.197327) 48679 POINT(602.4953 123.640015) 48680 POINT(648.75061 778.092834) 48681 POINT(439.639862 790.015442) 48682 POINT(620.875122 623.926758) 48683 POINT(710.190247 379.252441) 48684 POINT(894.099609 754.440979) 48685 POINT(988.671021 968.520752) 48686 POINT(744.057678 284.138275) 48687 POINT(804.449097 431.629242) 48688 POINT(661.585632 269.104095) 48689 POINT(734.055237 272.109253) 48690 POINT(887.897339 162.18988) 48691 POINT(937.382629 833.24884) 48692 POINT(350.228729 934.439575) 48693 POINT(163.84436 890.032471) 48694 POINT(7.22083378 569.247314) 48695 POINT(430.372742 913.224304) 48696 POINT(121.172203 912.623779) 48697 POINT(25.615406 207.152267) 48698 POINT(814.002441 530.036865) 48699 POINT(322.4617 911.084534) 48700 POINT(291.771454 130.115509) 48701 POINT(510.873169 536.038696) 48702 POINT(648.467529 511.232758) 48703 POINT(799.77887 316.657135) 48704 POINT(196.202194 752.396851) 48705 POINT(713.536316 489.266632) 48706 POINT(781.75824 279.400391) 48707 POINT(736.285645 475.897247) 48708 POINT(707.564941 405.838959) 48709 POINT(975.696106 438.963043) 48710 POINT(300.70343 282.080048) 48711 POINT(543.500061 367.234497) 48712 POINT(191.657715 829.82843) 48713 POINT(629.345642 621.008545) 48714 POINT(253.556961 32.5113029) 48715 POINT(500.49649 78.9861221) 48716 POINT(394.034271 869.829285) 48717 POINT(944.534851 832.898499) 48718 POINT(920.138 596.660645) 48719 POINT(615.358826 925.610413) 48720 POINT(649.661255 980.844788) 48721 POINT(802.413696 347.120026) 48722 POINT(910.627563 430.629944) 48723 POINT(855.397278 329.05246) 48724 POINT(848.431213 700.782471) 48725 POINT(725.886047 616.003296) 48726 POINT(294.345734 497.187561) 48727 POINT(275.822784 561.15918) 48728 POINT(789.986389 874.513977) 48729 POINT(421.101288 579.357422) 48730 POINT(113.154083 802.076904) 48731 POINT(175.205322 194.118698) 48732 POINT(917.749817 761.962036) 48733 POINT(909.771301 902.801147) 48734 POINT(443.699097 233.922974) 48735 POINT(910.925537 638.104492) 48736 POINT(934.760498 547.333557) 48737 POINT(665.30719 272.552917) 48738 POINT(638.531006 865.96936) 48739 POINT(418.961456 458.78186) 48740 POINT(472.848969 181.659729) 48741 POINT(905.026855 951.542969) 48742 POINT(498.204498 683.544678) 48743 POINT(799.735291 262.061157) 48744 POINT(811.890503 937.090576) 48745 POINT(336.195435 162.065186) 48746 POINT(904.787292 38.0691032) 48747 POINT(555.377869 809.457703) 48748 POINT(627.314087 528.931824) 48749 POINT(205.41391 501.78537) 48750 POINT(881.772156 996.577515) 48751 POINT(193.651733 684.645935) 48752 POINT(881.743103 170.201004) 48753 POINT(458.884064 522.775208) 48754 POINT(136.210175 155.148819) 48755 POINT(949.904968 270.271912) 48756 POINT(270.588715 463.517761) 48757 POINT(185.331116 807.343201) 48758 POINT(885.951233 415.295746) 48759 POINT(320.813263 13.8131599) 48760 POINT(81.6105423 606.434021) 48761 POINT(283.876648 359.784149) 48762 POINT(178.1996 684.282593) 48763 POINT(952.298401 962.254517) 48764 POINT(934.90741 988.846924) 48765 POINT(475.9104 899.771667) 48766 POINT(965.161804 453.503387) 48767 POINT(178.894684 327.571686) 48768 POINT(632.493286 894.92804) 48769 POINT(363.01767 690.968811) 48770 POINT(918.385132 733.466858) 48771 POINT(172.968521 408.493622) 48772 POINT(265.561127 687.040405) 48773 POINT(222.277344 867.53418) 48774 POINT(335.454407 879.597656) 48775 POINT(229.577866 538.739746) 48776 POINT(802.731079 545.40448) 48777 POINT(625.752991 831.551392) 48778 POINT(521.036194 429.978577) 48779 POINT(186.392197 857.90509) 48780 POINT(614.026245 564.813232) 48781 POINT(772.757141 186.013046) 48782 POINT(708.828735 194.322556) 48783 POINT(357.975647 608.393433) 48784 POINT(773.013 768.485352) 48785 POINT(631.47699 840.839722) 48786 POINT(931.797119 482.875763) 48787 POINT(649.869202 350.274048) 48788 POINT(523.489014 389.184296) 48789 POINT(600.8078 383.518341) 48790 POINT(245.142899 544.619019) 48791 POINT(710.29071 955.665344) 48792 POINT(997.298401 589.021484) 48793 POINT(423.747162 541.293945) 48794 POINT(359.778137 996.048096) 48795 POINT(75.9038925 495.224548) 48796 POINT(126.295753 641.898804) 48797 POINT(510.461914 578.451538) 48798 POINT(53.6438675 264.976898) 48799 POINT(272.990662 161.549362) 48800 POINT(704.179932 486.336731) 48801 POINT(662.147644 770.076233) 48802 POINT(694.033386 848.222717) 48803 POINT(746.493896 187.773956) 48804 POINT(722.86084 471.471375) 48805 POINT(426.05719 672.780457) 48806 POINT(826.151001 487.696014) 48807 POINT(306.780334 314.36853) 48808 POINT(433.219147 65.2953873) 48809 POINT(957.583252 773.23999) 48810 POINT(61.4576187 206.33165) 48811 POINT(507.606445 733.127869) 48812 POINT(61.5636711 271.753998) 48813 POINT(317.038666 236.981171) 48814 POINT(433.923737 513.462036) 48815 POINT(998.65271 594.561218) 48816 POINT(750.787109 512.098389) 48817 POINT(586.78418 902.713562) 48818 POINT(983.132568 988.647766) 48819 POINT(432.124268 103.371994) 48820 POINT(89.165123 765.937073) 48821 POINT(58.6124611 371.603638) 48822 POINT(570.244263 883.643738) 48823 POINT(945.299805 946.442749) 48824 POINT(539.940186 838.714844) 48825 POINT(11.8044949 26.2367821) 48826 POINT(836.154175 344.094757) 48827 POINT(589.541748 298.717377) 48828 POINT(191.275787 724.888123) 48829 POINT(279.032898 80.6170807) 48830 POINT(770.747192 345.717194) 48831 POINT(331.164795 934.598328) 48832 POINT(508.863098 169.854813) 48833 POINT(880.293335 310.404388) 48834 POINT(577.971985 464.137665) 48835 POINT(410.692871 35.9549179) 48836 POINT(192.406418 698.735291) 48837 POINT(494.304321 941.691467) 48838 POINT(393.526794 153.224426) 48839 POINT(914.415894 132.563187) 48840 POINT(812.409851 576.390442) 48841 POINT(432.322388 286.974335) 48842 POINT(940.272217 293.66037) 48843 POINT(385.792267 236.775894) 48844 POINT(635.132263 390.602203) 48845 POINT(81.0785828 108.571098) 48846 POINT(391.053284 391.671234) 48847 POINT(184.124725 641.447327) 48848 POINT(931.274048 209.130417) 48849 POINT(489.548859 362.596039) 48850 POINT(549.435486 957.236084) 48851 POINT(84.0703964 38.6141167) 48852 POINT(107.902496 551.39917) 48853 POINT(888.529602 930.696899) 48854 POINT(955.929749 271.77179) 48855 POINT(301.928833 586.159607) 48856 POINT(203.320328 736.855103) 48857 POINT(452.496918 182.115555) 48858 POINT(680.600159 967.197021) 48859 POINT(733.284119 300.666565) 48860 POINT(641.025574 524.57843) 48861 POINT(539.986328 725.233337) 48862 POINT(372.520355 581.445251) 48863 POINT(691.460693 686.888611) 48864 POINT(651.60675 342.517944) 48865 POINT(981.737427 505.613617) 48866 POINT(602.363403 529.910034) 48867 POINT(847.384399 827.748413) 48868 POINT(440.36264 819.758484) 48869 POINT(725.105103 486.656677) 48870 POINT(656.481323 737.971375) 48871 POINT(388.824036 253.496017) 48872 POINT(3.63144541 781.519958) 48873 POINT(288.74823 509.332672) 48874 POINT(719.150208 516.663452) 48875 POINT(640.621277 784.638672) 48876 POINT(478.259216 344.125031) 48877 POINT(33.362854 569.060181) 48878 POINT(814.226501 131.710968) 48879 POINT(517.398499 200.478668) 48880 POINT(46.332737 255.962784) 48881 POINT(212.235825 670.649597) 48882 POINT(968.282654 915.572693) 48883 POINT(216.369019 23.5730801) 48884 POINT(711.247253 170.513107) 48885 POINT(129.652496 626.332825) 48886 POINT(804.357483 702.797424) 48887 POINT(500.2547 930.156006) 48888 POINT(711.375488 108.7873) 48889 POINT(505.699432 647.249878) 48890 POINT(178.779663 830.909424) 48891 POINT(768.950928 297.539825) 48892 POINT(944.048218 971.078369) 48893 POINT(322.761414 345.368347) 48894 POINT(533.091187 942.205872) 48895 POINT(873.459717 181.738739) 48896 POINT(535.254028 591.703674) 48897 POINT(12.0194397 810.659607) 48898 POINT(348.91922 346.262177) 48899 POINT(286.746246 582.035156) 48900 POINT(609.408813 495.462585) 48901 POINT(827.514648 757.459595) 48902 POINT(465.714417 758.605896) 48903 POINT(813.555603 193.93486) 48904 POINT(388.743378 210.819092) 48905 POINT(650.850586 344.292084) 48906 POINT(49.5938911 817.932861) 48907 POINT(494.860291 977.934387) 48908 POINT(983.300476 722.360352) 48909 POINT(271.363892 163.035599) 48910 POINT(686.098206 902.404236) 48911 POINT(742.491211 778.75) 48912 POINT(620.229858 403.869629) 48913 POINT(394.601929 66.1642609) 48914 POINT(410.49118 414.976959) 48915 POINT(25.6381779 918.134949) 48916 POINT(605.013855 563.392395) 48917 POINT(246.203247 954.897156) 48918 POINT(486.302002 888.383667) 48919 POINT(623.288513 154.137344) 48920 POINT(7.45223618 552.962158) 48921 POINT(658.78418 386.440216) 48922 POINT(396.129761 972.292969) 48923 POINT(55.3047066 650.627991) 48924 POINT(921.679565 248.192886) 48925 POINT(956.193787 875.107117) 48926 POINT(818.299805 608.344482) 48927 POINT(809.726013 633.15448) 48928 POINT(162.184845 586.733093) 48929 POINT(782.506165 59.9575233) 48930 POINT(328.78302 473.167145) 48931 POINT(895.010559 220.653839) 48932 POINT(426.74649 769.615967) 48933 POINT(262.377258 490.69162) 48934 POINT(189.858658 75.1541595) 48935 POINT(563.318298 517.282288) 48936 POINT(282.39389 675.829407) 48937 POINT(524.901489 643.892517) 48938 POINT(865.320923 727.680176) 48939 POINT(274.566681 424.598724) 48940 POINT(811.948792 17.9681396) 48941 POINT(674.860718 923.308716) 48942 POINT(836.601929 989.612793) 48943 POINT(600.875366 791.562927) 48944 POINT(396.398071 775.619324) 48945 POINT(753.266418 820.721252) 48946 POINT(885.001648 63.3822365) 48947 POINT(307.147797 458.288269) 48948 POINT(902.292908 483.173218) 48949 POINT(93.3532562 118.040688) 48950 POINT(252.287231 71.5389481) 48951 POINT(285.920837 469.213104) 48952 POINT(493.564911 20.0375023) 48953 POINT(748.690613 996.632019) 48954 POINT(995.244141 94.6417007) 48955 POINT(373.24646 232.334061) 48956 POINT(393.59613 653.775024) 48957 POINT(346.835968 186.46579) 48958 POINT(409.331238 346.483276) 48959 POINT(327.252014 683.368225) 48960 POINT(186.073883 220.472275) 48961 POINT(804.961853 835.545837) 48962 POINT(612.413025 887.075134) 48963 POINT(412.158905 577.190063) 48964 POINT(662.1073 491.685394) 48965 POINT(833.146484 609.166321) 48966 POINT(251.612396 829.475952) 48967 POINT(97.9218292 873.614563) 48968 POINT(796.277832 973.600464) 48969 POINT(46.5255013 638.900818) 48970 POINT(824.64679 83.4635925) 48971 POINT(359.283752 810.574341) 48972 POINT(165.741257 611.582336) 48973 POINT(809.259399 332.828918) 48974 POINT(291.582581 297.213715) 48975 POINT(937.924683 664.965332) 48976 POINT(14.1935549 132.076218) 48977 POINT(641.281128 731.357361) 48978 POINT(493.760712 807.562256) 48979 POINT(717.515015 389.912994) 48980 POINT(206.458908 43.8659286) 48981 POINT(133.043503 47.0932121) 48982 POINT(393.719116 90.0935364) 48983 POINT(53.8669472 286.936096) 48984 POINT(519.653381 641.979919) 48985 POINT(833.996094 262.579712) 48986 POINT(303.255829 412.209259) 48987 POINT(501.01062 622.462402) 48988 POINT(73.3227768 710.077393) 48989 POINT(507.277618 176.305527) 48990 POINT(76.3484421 135.498245) 48991 POINT(878.903809 630.377747) 48992 POINT(213.648361 0.934093356) 48993 POINT(476.1185 85.2506332) 48994 POINT(709.465027 388.140106) 48995 POINT(39.6177559 655.765503) 48996 POINT(835.76062 989.687744) 48997 POINT(526.70575 371.333466) 48998 POINT(913.872498 633.741211) 48999 POINT(6.22331285 289.720825) 49000 POINT(953.394531 840.791321) 49001 POINT(977.770142 619.474976) 49002 POINT(2.86774325 999.91394) 49003 POINT(382.235901 221.099518) 49004 POINT(306.567505 7.16204929) 49005 POINT(78.9132767 536.597778) 49006 POINT(871.429199 98.0758514) 49007 POINT(59.3588867 188.289795) 49008 POINT(935.653931 388.801941) 49009 POINT(857.700867 863.728882) 49010 POINT(936.604004 465.35788) 49011 POINT(287.399414 852.569763) 49012 POINT(944.178223 518.206604) 49013 POINT(899.80481 677.477783) 49014 POINT(654.018616 690.17627) 49015 POINT(112.612129 634.341492) 49016 POINT(122.841003 811.166382) 49017 POINT(316.98584 962.510742) 49018 POINT(629.219971 744.935547) 49019 POINT(39.3604507 554.507568) 49020 POINT(713.740601 524.103699) 49021 POINT(334.46582 103.246735) 49022 POINT(402.124908 42.4953613) 49023 POINT(524.866333 905.485474) 49024 POINT(356.445801 692.879517) 49025 POINT(512.246338 990.849487) 49026 POINT(698.675171 257.446442) 49027 POINT(577.953735 139.826996) 49028 POINT(176.521637 993.041199) 49029 POINT(604.188416 770.69281) 49030 POINT(315.867065 8.90677166) 49031 POINT(300.072601 709.141968) 49032 POINT(52.3057137 157.772125) 49033 POINT(454.176056 865.828003) 49034 POINT(834.643555 88.4617233) 49035 POINT(680.524048 711.997498) 49036 POINT(327.177185 317.343445) 49037 POINT(130.443283 803.582947) 49038 POINT(39.7080116 35.0365105) 49039 POINT(337.689362 116.693291) 49040 POINT(622.256165 382.657196) 49041 POINT(707.153748 545.275818) 49042 POINT(266.138916 507.903534) 49043 POINT(184.198471 13.2888498) 49044 POINT(948.416809 385.508698) 49045 POINT(716.578186 473.124664) 49046 POINT(889.754333 89.690979) 49047 POINT(186.357086 818.985718) 49048 POINT(16.6921654 509.485657) 49049 POINT(315.723511 923.789673) 49050 POINT(831.496765 863.173218) 49051 POINT(486.783386 611.943787) 49052 POINT(502.594818 397.960236) 49053 POINT(638.025452 174.583054) 49054 POINT(255.677628 348.787354) 49055 POINT(164.088638 800.837585) 49056 POINT(32.5718956 209.41925) 49057 POINT(633.723877 86.2356873) 49058 POINT(607.742798 164.235275) 49059 POINT(814.568909 150.935425) 49060 POINT(829.759033 805.417236) 49061 POINT(941.798218 185.208649) 49062 POINT(759.288513 73.1927109) 49063 POINT(958.257507 782.209839) 49064 POINT(281.393066 402.725677) 49065 POINT(981.847473 828.891968) 49066 POINT(306.380371 927.063354) 49067 POINT(995.321045 130.965469) 49068 POINT(171.687881 998.791077) 49069 POINT(506.058258 238.632614) 49070 POINT(1.79492915 371.87796) 49071 POINT(68.6643143 23.6958942) 49072 POINT(961.674072 888.403198) 49073 POINT(309.411469 608.385681) 49074 POINT(892.627319 91.8538208) 49075 POINT(724.742798 950.359131) 49076 POINT(291.447906 629.514343) 49077 POINT(660.535217 200.885437) 49078 POINT(981.775513 791.793213) 49079 POINT(706.963135 343.98587) 49080 POINT(830.470398 887.439941) 49081 POINT(286.121429 328.582214) 49082 POINT(135.133972 82.414093) 49083 POINT(564.686279 174.513397) 49084 POINT(708.002441 689.207764) 49085 POINT(418.579437 383.195465) 49086 POINT(515.89978 925.870239) 49087 POINT(15.7293501 446.96283) 49088 POINT(18.458252 753.615417) 49089 POINT(499.608582 625.582153) 49090 POINT(43.2130814 323.131317) 49091 POINT(161.396271 257.554993) 49092 POINT(315.402771 727.591797) 49093 POINT(621.629578 276.723358) 49094 POINT(244.426102 480.559052) 49095 POINT(720.44928 906.086365) 49096 POINT(583.116272 355.749023) 49097 POINT(684.522339 560.982361) 49098 POINT(398.613556 779.927856) 49099 POINT(422.06665 188.863525) 49100 POINT(906.093018 837.549561) 49101 POINT(546.875366 744.389099) 49102 POINT(53.5086174 494.304047) 49103 POINT(577.71405 403.71994) 49104 POINT(944.536499 885.303223) 49105 POINT(158.959534 883.557861) 49106 POINT(838.868652 341.610107) 49107 POINT(637.991394 787.117249) 49108 POINT(367.860138 286.246338) 49109 POINT(778.898132 954.947021) 49110 POINT(996.344666 648.366577) 49111 POINT(232.89769 73.0583649) 49112 POINT(598.395935 93.24646) 49113 POINT(894.010864 269.51947) 49114 POINT(199.250198 108.016068) 49115 POINT(792.590881 614.516541) 49116 POINT(573.960144 921.212646) 49117 POINT(396.069153 594.466248) 49118 POINT(45.1936455 861.399719) 49119 POINT(350.601868 40.3118782) 49120 POINT(750.6203 210.082932) 49121 POINT(892.206726 201.505524) 49122 POINT(70.3601913 901.369202) 49123 POINT(542.594727 733.842163) 49124 POINT(235.951904 730.29718) 49125 POINT(772.487732 140.371872) 49126 POINT(256.298828 609.18219) 49127 POINT(131.147751 514.802429) 49128 POINT(768.270752 52.9549484) 49129 POINT(800.642883 396.461792) 49130 POINT(778.390442 567.24353) 49131 POINT(610.663208 781.003906) 49132 POINT(238.769531 184.395142) 49133 POINT(546.240173 233.203125) 49134 POINT(179.743195 660.916626) 49135 POINT(576.396423 24.6290417) 49136 POINT(591.184937 73.7243118) 49137 POINT(934.567749 942.567322) 49138 POINT(245.082306 881.546997) 49139 POINT(577.727112 75.7368011) 49140 POINT(227.565048 241.859299) 49141 POINT(554.760437 431.245667) 49142 POINT(596.270569 173.499481) 49143 POINT(118.179344 645.55835) 49144 POINT(498.903717 351.938995) 49145 POINT(137.212387 555.361694) 49146 POINT(434.417297 129.929352) 49147 POINT(313.328857 743.099854) 49148 POINT(465.852142 143.49884) 49149 POINT(788.074585 883.193237) 49150 POINT(913.103394 335.168091) 49151 POINT(472.619781 320.796143) 49152 POINT(877.414978 786.591248) 49153 POINT(151.644073 613.230408) 49154 POINT(343.069763 676.020203) 49155 POINT(532.244812 68.4347076) 49156 POINT(234.482452 377.073334) 49157 POINT(660.709473 703.995483) 49158 POINT(800.78833 999.931763) 49159 POINT(833.626648 619.296997) 49160 POINT(880.245361 990.573608) 49161 POINT(430.425598 882.404236) 49162 POINT(741.653137 84.9041672) 49163 POINT(215.670746 558.439941) 49164 POINT(290.985779 440.187134) 49165 POINT(153.047241 89.0480423) 49166 POINT(903.101013 4.1923852) 49167 POINT(768.842041 530.267273) 49168 POINT(128.43129 641.738647) 49169 POINT(558.860474 91.6290817) 49170 POINT(123.790901 618.239014) 49171 POINT(885.25177 431.017151) 49172 POINT(158.805069 280.491425) 49173 POINT(622.907043 451.881287) 49174 POINT(702.040894 106.96167) 49175 POINT(431.323364 141.518463) 49176 POINT(843.901123 294.469421) 49177 POINT(717.60614 766.662537) 49178 POINT(570.043396 167.423203) 49179 POINT(968.237427 506.545563) 49180 POINT(265.957855 542.09906) 49181 POINT(338.134827 120.503632) 49182 POINT(869.947815 745.080383) 49183 POINT(950.242004 299.326996) 49184 POINT(60.7987518 905.665771) 49185 POINT(860.436096 984.753113) 49186 POINT(483.721924 941.218689) 49187 POINT(742.043579 723.240967) 49188 POINT(202.655197 997.119568) 49189 POINT(30.9829159 377.556) 49190 POINT(690.771667 44.8466759) 49191 POINT(113.879059 597.456299) 49192 POINT(809.280334 579.054016) 49193 POINT(532.931824 959.258972) 49194 POINT(405.62149 474.236053) 49195 POINT(596.50238 749.255066) 49196 POINT(617.409302 791.219666) 49197 POINT(25.0602226 879.433594) 49198 POINT(382.525665 781.459045) 49199 POINT(708.199524 292.998047) 49200 POINT(416.315857 281.725311) 49201 POINT(507.88678 614.562012) 49202 POINT(364.702789 772.687134) 49203 POINT(602.081726 414.172607) 49204 POINT(521.161255 382.116058) 49205 POINT(735.634521 739.53125) 49206 POINT(402.95517 227.68071) 49207 POINT(124.286919 996.688232) 49208 POINT(318.025818 536.809326) 49209 POINT(663.202271 561.433044) 49210 POINT(471.755524 663.812439) 49211 POINT(622.354431 932.56073) 49212 POINT(18.9598999 299.906616) 49213 POINT(594.068237 810.768311) 49214 POINT(70.4533234 83.1312943) 49215 POINT(97.9183884 235.354767) 49216 POINT(28.0851593 346.189453) 49217 POINT(778.058228 133.005981) 49218 POINT(713.073975 665.388855) 49219 POINT(459.000214 142.228531) 49220 POINT(738.72345 108.146172) 49221 POINT(697.168213 952.549866) 49222 POINT(82.2540207 925.612244) 49223 POINT(694.562622 234.152786) 49224 POINT(156.725204 847.165649) 49225 POINT(173.138077 391.514984) 49226 POINT(151.175629 941.724243) 49227 POINT(767.619568 229.852142) 49228 POINT(476.614685 194.573105) 49229 POINT(732.2323 317.32019) 49230 POINT(761.934448 875.872253) 49231 POINT(903.081116 516.243347) 49232 POINT(624.865051 456.971588) 49233 POINT(370.690948 265.952881) 49234 POINT(989.59491 162.545197) 49235 POINT(732.642761 666.621582) 49236 POINT(828.561157 270.393219) 49237 POINT(978.571716 941.864441) 49238 POINT(118.257561 417.218628) 49239 POINT(451.414459 167.572739) 49240 POINT(467.903442 509.051575) 49241 POINT(200.211075 230.805939) 49242 POINT(208.782761 331.183929) 49243 POINT(739.613831 326.566071) 49244 POINT(827.451782 707.026855) 49245 POINT(436.292786 178.51564) 49246 POINT(47.3865242 561.381531) 49247 POINT(707.534668 864.407837) 49248 POINT(873.70282 635.004517) 49249 POINT(25.5161514 186.021408) 49250 POINT(730.14325 898.470886) 49251 POINT(533.131348 10.2137613) 49252 POINT(855.540955 89.2257767) 49253 POINT(383.117767 751.422119) 49254 POINT(260.501617 802.036438) 49255 POINT(778.944824 11.2841406) 49256 POINT(349.296326 396.100159) 49257 POINT(19.0060425 448.364502) 49258 POINT(315.238983 728.739136) 49259 POINT(598.727478 846.242126) 49260 POINT(351.591278 613.465698) 49261 POINT(910.026367 473.032806) 49262 POINT(768.851501 547.391907) 49263 POINT(174.007538 587.022705) 49264 POINT(160.849091 918.27478) 49265 POINT(658.882812 14.3206282) 49266 POINT(657.19574 734.34668) 49267 POINT(756.966003 293.775452) 49268 POINT(82.2865295 210.521149) 49269 POINT(236.499527 905.955627) 49270 POINT(8.26957226 973.248352) 49271 POINT(638.382935 546.472107) 49272 POINT(441.405548 534.511719) 49273 POINT(875.113403 504.699249) 49274 POINT(371.338654 245.123367) 49275 POINT(208.040771 717.985229) 49276 POINT(997.445679 521.128784) 49277 POINT(856.146545 505.345825) 49278 POINT(935.187195 487.934357) 49279 POINT(29.8580189 875.631653) 49280 POINT(610.953186 688.513672) 49281 POINT(519.91626 451.095764) 49282 POINT(842.090027 429.148132) 49283 POINT(515.156128 761.650452) 49284 POINT(938.569458 103.645103) 49285 POINT(813.496399 26.9805355) 49286 POINT(676.174561 250.526352) 49287 POINT(344.84848 647.8125) 49288 POINT(3.33485484 603.572571) 49289 POINT(88.5532455 834.367554) 49290 POINT(133.161072 331.263214) 49291 POINT(264.970306 985.333557) 49292 POINT(720.251099 502.605011) 49293 POINT(662.735535 236.175232) 49294 POINT(563.040466 433.758911) 49295 POINT(259.853699 678.49231) 49296 POINT(844.5401 470.543701) 49297 POINT(866.207825 35.2801819) 49298 POINT(418.067993 345.73114) 49299 POINT(393.38269 498.827789) 49300 POINT(353.981354 57.087883) 49301 POINT(909.171814 202.699051) 49302 POINT(635.52301 173.030563) 49303 POINT(801.147156 626.520142) 49304 POINT(976.90741 158.82988) 49305 POINT(926.730896 607.480774) 49306 POINT(638.004272 189.441574) 49307 POINT(414.947205 556.533691) 49308 POINT(433.880371 577.79657) 49309 POINT(984.207642 716.844727) 49310 POINT(943.601135 392.912354) 49311 POINT(5.98235464 639.327759) 49312 POINT(973.768372 704.282104) 49313 POINT(659.035767 532.953613) 49314 POINT(344.100159 692.07312) 49315 POINT(44.1918259 339.419189) 49316 POINT(953.887024 271.756409) 49317 POINT(54.6018944 611.809631) 49318 POINT(231.459488 952.565125) 49319 POINT(688.596802 889.803284) 49320 POINT(539.064636 77.9232025) 49321 POINT(746.923157 870.115601) 49322 POINT(931.10022 969.617371) 49323 POINT(947.126404 396.221161) 49324 POINT(75.936676 543.539734) 49325 POINT(216.803299 27.5439968) 49326 POINT(835.13739 801.471619) 49327 POINT(674.293823 602.483948) 49328 POINT(336.469604 989.400146) 49329 POINT(778.117554 954.706665) 49330 POINT(719.491394 797.670837) 49331 POINT(611.219727 466.543365) 49332 POINT(618.659363 551.922852) 49333 POINT(877.135376 901.222961) 49334 POINT(875.8927 86.8898468) 49335 POINT(114.885139 416.723846) 49336 POINT(642.545837 729.071899) 49337 POINT(908.296448 563.631897) 49338 POINT(593.111023 250.90126) 49339 POINT(572.127014 658.507935) 49340 POINT(286.129028 650.881165) 49341 POINT(368.61496 219.498032) 49342 POINT(81.3126831 404.433838) 49343 POINT(748.77356 184.493149) 49344 POINT(468.468903 302.638733) 49345 POINT(255.89325 701.911682) 49346 POINT(149.26796 925.09436) 49347 POINT(485.448853 203.61618) 49348 POINT(906.19519 93.8291702) 49349 POINT(105.185074 817.684692) 49350 POINT(816.202637 633.188171) 49351 POINT(218.958832 550.4646) 49352 POINT(44.8498001 362.219055) 49353 POINT(953.455627 922.896118) 49354 POINT(568.406555 308.187714) 49355 POINT(781.803955 261.475403) 49356 POINT(197.928711 630.010986) 49357 POINT(824.14386 761.04248) 49358 POINT(155.283371 46.7624016) 49359 POINT(812.246826 912.04425) 49360 POINT(814.186646 687.780518) 49361 POINT(31.3401165 341.899475) 49362 POINT(660.345581 116.697243) 49363 POINT(893.495056 497.04718) 49364 POINT(837.712158 871.948364) 49365 POINT(717.550232 593.303406) 49366 POINT(79.7293091 641.691589) 49367 POINT(232.943405 607.002075) 49368 POINT(325.476868 222.831284) 49369 POINT(559.524414 753.411804) 49370 POINT(794.123291 663.943481) 49371 POINT(291.051208 403.074432) 49372 POINT(843.506958 562.851807) 49373 POINT(503.388184 987.605286) 49374 POINT(129.577972 874.589417) 49375 POINT(274.314789 426.358826) 49376 POINT(675.521606 918.277832) 49377 POINT(723.318726 512.042908) 49378 POINT(668.479126 576.482971) 49379 POINT(817.926331 590.342468) 49380 POINT(546.827393 122.901482) 49381 POINT(737.270325 584.985962) 49382 POINT(94.0423813 249.459915) 49383 POINT(501.094849 800.185913) 49384 POINT(391.45282 888.355347) 49385 POINT(758.75708 87.3559799) 49386 POINT(130.004501 425.151917) 49387 POINT(61.635891 518.431091) 49388 POINT(671.953979 103.304016) 49389 POINT(915.462463 55.5948906) 49390 POINT(571.757568 446.574219) 49391 POINT(306.321442 253.973648) 49392 POINT(899.015259 632.537354) 49393 POINT(923.450134 452.746216) 49394 POINT(495.992981 87.1276169) 49395 POINT(749.612732 389.613617) 49396 POINT(291.916779 427.03125) 49397 POINT(170.010086 667.778259) 49398 POINT(482.992249 934.318359) 49399 POINT(955.782227 983.224731) 49400 POINT(971.133728 327.330475) 49401 POINT(928.680969 718.521545) 49402 POINT(89.0214157 905.414185) 49403 POINT(408.06366 178.558853) 49404 POINT(680.779358 545.147583) 49405 POINT(606.748169 900.194031) 49406 POINT(865.857361 255.418518) 49407 POINT(483.351898 643.929321) 49408 POINT(801.297363 441.860657) 49409 POINT(508.5242 669.340698) 49410 POINT(940.293396 962.158997) 49411 POINT(772.1073 20.4929867) 49412 POINT(331.756226 887.631775) 49413 POINT(586.975769 882.112671) 49414 POINT(538.542236 428.950256) 49415 POINT(550.501587 706.577454) 49416 POINT(596.292175 181.157242) 49417 POINT(51.7708817 116.166206) 49418 POINT(868.77594 32.2059174) 49419 POINT(685.475525 430.476868) 49420 POINT(660.693298 237.599716) 49421 POINT(503.575745 697.060547) 49422 POINT(459.609833 159.537247) 49423 POINT(633.261902 971.365417) 49424 POINT(832.812683 511.041046) 49425 POINT(472.439392 222.886902) 49426 POINT(393.161377 33.2915802) 49427 POINT(478.058533 76.4553375) 49428 POINT(164.443558 907.834412) 49429 POINT(852.362549 834.961548) 49430 POINT(868.382324 795.146545) 49431 POINT(149.921021 92.2519684) 49432 POINT(572.484558 768.522644) 49433 POINT(744.654236 217.767838) 49434 POINT(183.684448 39.2908936) 49435 POINT(59.5758781 78.7348633) 49436 POINT(53.6693954 848.529114) 49437 POINT(649.437439 327.933777) 49438 POINT(537.448486 224.886154) 49439 POINT(392.738647 207.521484) 49440 POINT(479.829041 111.616974) 49441 POINT(777.673706 149.88269) 49442 POINT(10.8273907 172.918228) 49443 POINT(217.653961 58.5455284) 49444 POINT(629.601807 65.1502457) 49445 POINT(495.333588 354.897003) 49446 POINT(719.323669 158.211212) 49447 POINT(376.957367 24.5090313) 49448 POINT(437.700104 312.481232) 49449 POINT(556.847717 600.685547) 49450 POINT(397.942871 944.290405) 49451 POINT(858.591614 408.343872) 49452 POINT(924.28894 975.326233) 49453 POINT(836.731995 350.147675) 49454 POINT(619.293701 476.945343) 49455 POINT(970.392883 956.144775) 49456 POINT(904.726746 647.781189) 49457 POINT(726.286926 510.87793) 49458 POINT(434.826935 851.75769) 49459 POINT(179.095016 506.512573) 49460 POINT(373.864075 583.668335) 49461 POINT(226.529587 901.057129) 49462 POINT(476.474731 601.52301) 49463 POINT(916.883606 156.973129) 49464 POINT(409.290344 890.192993) 49465 POINT(39.0249519 532.727539) 49466 POINT(459.27298 311.40918) 49467 POINT(7.26275396 849.113464) 49468 POINT(544.365723 603.429932) 49469 POINT(633.040161 970.049988) 49470 POINT(585.118958 62.8592491) 49471 POINT(616.882019 556.30365) 49472 POINT(824.569092 654.946655) 49473 POINT(350.453949 567.994995) 49474 POINT(563.637573 231.658691) 49475 POINT(801.103088 321.349884) 49476 POINT(179.639175 903.910583) 49477 POINT(99.1104584 226.018219) 49478 POINT(838.198669 721.253479) 49479 POINT(778.467834 236.149185) 49480 POINT(319.180634 605.316833) 49481 POINT(80.815773 401.624786) 49482 POINT(133.450119 799.317444) 49483 POINT(42.8639374 81.3950577) 49484 POINT(90.8528442 912.510437) 49485 POINT(301.931549 520.327698) 49486 POINT(625.299072 323.732697) 49487 POINT(302.065002 751.60791) 49488 POINT(127.954056 270.968231) 49489 POINT(322.52951 591.35614) 49490 POINT(875.097046 293.559998) 49491 POINT(17.4569893 779.241943) 49492 POINT(657.158875 850.342651) 49493 POINT(814.327576 792.573181) 49494 POINT(166.851715 341.241333) 49495 POINT(12.1435719 241.345764) 49496 POINT(537.362488 483.060699) 49497 POINT(18.1364269 23.4113598) 49498 POINT(39.6118889 994.189209) 49499 POINT(213.257645 83.2317963) 49500 POINT(957.030396 930.308228) 49501 POINT(118.302757 941.238464) 49502 POINT(616.739197 277.083313) 49503 POINT(99.1876907 425.834747) 49504 POINT(730.147522 680.021118) 49505 POINT(884.644226 794.416321) 49506 POINT(799.602844 500.607086) 49507 POINT(833.561401 736.916931) 49508 POINT(799.806213 896.541321) 49509 POINT(671.627686 444.416718) 49510 POINT(515.302979 888.022888) 49511 POINT(385.210938 841.004333) 49512 POINT(383.667175 587.888) 49513 POINT(10.0511665 329.710663) 49514 POINT(986.348328 27.8969955) 49515 POINT(156.978287 618.914185) 49516 POINT(176.974304 534.129639) 49517 POINT(578.246887 765.749023) 49518 POINT(424.785095 9.45027733) 49519 POINT(776.100159 904.961243) 49520 POINT(166.497559 29.1350346) 49521 POINT(297.831757 898.203003) 49522 POINT(644.092896 496.424591) 49523 POINT(735.046753 528.405762) 49524 POINT(902.725159 28.0177917) 49525 POINT(663.287903 830.735962) 49526 POINT(829.235413 926.018799) 49527 POINT(514.069519 665.434814) 49528 POINT(527.820862 863.880005) 49529 POINT(185.165085 933.928162) 49530 POINT(108.573257 481.362396) 49531 POINT(665.347717 668.942505) 49532 POINT(463.306763 299.998291) 49533 POINT(3.45404077 108.579002) 49534 POINT(630.915161 479.159027) 49535 POINT(93.5050354 325.60321) 49536 POINT(424.129791 317.385071) 49537 POINT(310.687134 824.461853) 49538 POINT(566.807434 338.545471) 49539 POINT(428.400574 53.2075386) 49540 POINT(344.711548 702.697571) 49541 POINT(213.581726 84.7081146) 49542 POINT(825.228394 352.877106) 49543 POINT(953.482239 895.957642) 49544 POINT(877.780457 197.754822) 49545 POINT(57.5481796 76.3500748) 49546 POINT(305.176727 73.0634689) 49547 POINT(26.622036 301.394958) 49548 POINT(358.227661 699.463013) 49549 POINT(40.1432495 159.151489) 49550 POINT(186.212921 229.242554) 49551 POINT(310.236786 569.860107) 49552 POINT(511.924469 757.738464) 49553 POINT(147.556641 17.7085476) 49554 POINT(102.832497 766.996094) 49555 POINT(413.629456 555.860901) 49556 POINT(733.384949 409.056458) 49557 POINT(62.4769745 255.903885) 49558 POINT(44.620842 754.972595) 49559 POINT(742.870422 670.451599) 49560 POINT(456.351501 204.542221) 49561 POINT(712.190674 448.148804) 49562 POINT(477.459106 632.697815) 49563 POINT(452.169403 484.702545) 49564 POINT(997.827271 144.061981) 49565 POINT(552.525635 678.449768) 49566 POINT(490.621399 510.518707) 49567 POINT(395.572723 266.566223) 49568 POINT(268.774323 111.557968) 49569 POINT(516.258606 896.187378) 49570 POINT(740.42395 8.03783035) 49571 POINT(888.953003 596.921875) 49572 POINT(913.642273 321.912598) 49573 POINT(793.864197 996.59729) 49574 POINT(583.156189 423.062134) 49575 POINT(909.640381 805.308289) 49576 POINT(766.086365 235.9151) 49577 POINT(259.989624 394.294006) 49578 POINT(68.3458633 860.002319) 49579 POINT(84.6793747 341.829865) 49580 POINT(989.680237 377.443115) 49581 POINT(410.798737 999.78009) 49582 POINT(397.978516 314.823914) 49583 POINT(448.575043 358.948151) 49584 POINT(910.124023 495.761017) 49585 POINT(135.335724 931.735413) 49586 POINT(48.1134834 613.064514) 49587 POINT(487.528351 715.3479) 49588 POINT(339.392395 555.875183) 49589 POINT(508.316895 1.98178673) 49590 POINT(996.408386 528.096619) 49591 POINT(429.540955 333.792847) 49592 POINT(142.464508 111.176971) 49593 POINT(62.2666397 995.370422) 49594 POINT(402.384216 368.728912) 49595 POINT(88.4034271 345.862335) 49596 POINT(903.721069 715.140625) 49597 POINT(673.67218 33.4411087) 49598 POINT(646.833618 818.402954) 49599 POINT(824.463928 738.688599) 49600 POINT(812.790588 162.635574) 49601 POINT(280.838379 858.553467) 49602 POINT(852.595642 832.656555) 49603 POINT(346.206665 282.288239) 49604 POINT(308.571869 516.449158) 49605 POINT(140.382553 704.29248) 49606 POINT(880.989258 957.188843) 49607 POINT(144.052429 360.810455) 49608 POINT(595.353577 70.9057693) 49609 POINT(224.817093 528.301697) 49610 POINT(326.520447 515.776611) 49611 POINT(321.426575 956.999512) 49612 POINT(876.400146 632.007751) 49613 POINT(665.424622 775.299133) 49614 POINT(217.045578 735.455322) 49615 POINT(468.022339 446.39621) 49616 POINT(38.0653801 752.312073) 49617 POINT(852.639404 510.882996) 49618 POINT(967.395813 25.7912884) 49619 POINT(6.32015944 46.2802124) 49620 POINT(561.442078 848.796021) 49621 POINT(920.405396 720.834778) 49622 POINT(631.536865 309.737854) 49623 POINT(134.806763 734.079834) 49624 POINT(638.75177 453.253906) 49625 POINT(861.490356 805.980408) 49626 POINT(651.658936 515.47998) 49627 POINT(89.9704437 200.954803) 49628 POINT(828.12207 197.306152) 49629 POINT(447.491821 819.269897) 49630 POINT(112.161659 81.837265) 49631 POINT(954.031616 938.481934) 49632 POINT(93.0968933 517.891541) 49633 POINT(460.280151 789.589417) 49634 POINT(972.319824 604.209106) 49635 POINT(646.500854 869.852295) 49636 POINT(742.167786 484.151337) 49637 POINT(480.880096 555.91925) 49638 POINT(873.485474 553.709534) 49639 POINT(55.0389633 31.7123184) 49640 POINT(608.811584 592.904602) 49641 POINT(627.301392 895.804565) 49642 POINT(895.002197 339.053558) 49643 POINT(484.727386 688.761414) 49644 POINT(793.96405 857.451111) 49645 POINT(184.585907 373.706451) 49646 POINT(67.5782166 848.920776) 49647 POINT(734.738586 920.441467) 49648 POINT(430.555328 23.2298908) 49649 POINT(28.3473854 257.65152) 49650 POINT(543.684631 11.93641) 49651 POINT(147.53035 157.532913) 49652 POINT(223.676514 283.897949) 49653 POINT(107.33654 56.7024498) 49654 POINT(71.6163712 842.073181) 49655 POINT(918.069763 366.19751) 49656 POINT(970.144714 442.684265) 49657 POINT(21.0735054 717.1203) 49658 POINT(823.17218 899.19281) 49659 POINT(799.226135 577.984497) 49660 POINT(867.676697 66.4130402) 49661 POINT(905.346252 281.693359) 49662 POINT(684.482117 87.6083679) 49663 POINT(94.3538895 246.543854) 49664 POINT(186.578003 813.378906) 49665 POINT(421.38205 864.557312) 49666 POINT(835.330322 239.964462) 49667 POINT(489.221069 475.265961) 49668 POINT(795.799561 781.295959) 49669 POINT(633.756409 122.934593) 49670 POINT(814.390259 989.394653) 49671 POINT(842.81958 504.795166) 49672 POINT(110.408333 417.831604) 49673 POINT(957.61261 17.5705528) 49674 POINT(296.112732 19.8310738) 49675 POINT(530.228271 975.339478) 49676 POINT(258.964996 263.775604) 49677 POINT(157.52124 545.247192) 49678 POINT(489.573853 902.504089) 49679 POINT(310.581421 385.926544) 49680 POINT(656.996155 557.682861) 49681 POINT(588.318787 299.605988) 49682 POINT(410.413177 376.084625) 49683 POINT(979.328491 861.232117) 49684 POINT(716.694031 520.868469) 49685 POINT(482.520599 170.612823) 49686 POINT(274.060791 108.58564) 49687 POINT(256.353546 806.333252) 49688 POINT(123.172356 962.922363) 49689 POINT(109.412384 228.35025) 49690 POINT(911.773804 691.053101) 49691 POINT(460.156525 280.716675) 49692 POINT(964.051575 700.449646) 49693 POINT(57.6813354 853.423218) 49694 POINT(420.571442 856.241028) 49695 POINT(523.17926 955.096619) 49696 POINT(11.8431301 165.53186) 49697 POINT(726.456909 474.11618) 49698 POINT(223.980331 689.879761) 49699 POINT(814.49469 328.076691) 49700 POINT(627.546387 495.444092) 49701 POINT(348.887817 849.541138) 49702 POINT(342.569336 907.809143) 49703 POINT(53.4581299 474.412445) 49704 POINT(79.0682449 341.450836) 49705 POINT(517.890808 698.367798) 49706 POINT(951.576111 109.16436) 49707 POINT(321.553741 972.612427) 49708 POINT(549.520264 612.043518) 49709 POINT(235.463562 614.328186) 49710 POINT(237.496017 283.965088) 49711 POINT(809.551575 816.838379) 49712 POINT(748.143494 374.771179) 49713 POINT(964.962585 632.540405) 49714 POINT(156.325378 752.87207) 49715 POINT(473.22345 56.543766) 49716 POINT(830.556763 180.855225) 49717 POINT(30.0047646 514.796509) 49718 POINT(943.220947 147.541183) 49719 POINT(213.248596 627.016418) 49720 POINT(285.218872 148.067245) 49721 POINT(974.158203 807.312622) 49722 POINT(126.657852 1.91715777) 49723 POINT(543.573486 334.966156) 49724 POINT(549.441528 239.889786) 49725 POINT(172.347137 991.039795) 49726 POINT(359.738403 17.9745674) 49727 POINT(967.37207 245.526718) 49728 POINT(380.983734 312.767059) 49729 POINT(67.9024582 592.485901) 49730 POINT(597.125366 93.826889) 49731 POINT(440.886078 780.516357) 49732 POINT(430.205048 668.292847) 49733 POINT(898.447327 952.101013) 49734 POINT(18.1417446 757.789001) 49735 POINT(372.808044 682.528931) 49736 POINT(32.9497948 43.4717026) 49737 POINT(669.315979 457.628967) 49738 POINT(624.901978 738.892456) 49739 POINT(580.501709 625.403564) 49740 POINT(975.779053 199.728165) 49741 POINT(434.960266 441.431763) 49742 POINT(628.907104 22.5165653) 49743 POINT(504.238281 658.847473) 49744 POINT(872.864014 530.128418) 49745 POINT(656.808044 613.641663) 49746 POINT(580.358887 889.212952) 49747 POINT(766.758972 863.462952) 49748 POINT(837.798096 394.317566) 49749 POINT(520.293213 857.100647) 49750 POINT(691.517273 115.46521) 49751 POINT(857.857605 562.15686) 49752 POINT(333.781555 211.964157) 49753 POINT(614.287354 445.396301) 49754 POINT(958.745239 727.038452) 49755 POINT(322.309814 184.886658) 49756 POINT(442.077271 698.044434) 49757 POINT(302.918427 261.905945) 49758 POINT(497.457245 438.739258) 49759 POINT(334.357635 415.923431) 49760 POINT(301.331207 7.08532381) 49761 POINT(452.771851 395.611511) 49762 POINT(970.005859 188.818939) 49763 POINT(953.09198 566.290344) 49764 POINT(139.297729 968.526733) 49765 POINT(917.725403 568.549927) 49766 POINT(108.612457 981.918213) 49767 POINT(670.457703 208.759583) 49768 POINT(143.703476 41.6507111) 49769 POINT(329.178528 210.115326) 49770 POINT(113.768143 591.364868) 49771 POINT(87.2387695 988.769348) 49772 POINT(400.430511 96.0659103) 49773 POINT(291.193573 635.029907) 49774 POINT(143.101242 539.800598) 49775 POINT(682.264343 181.846909) 49776 POINT(264.893341 632.523071) 49777 POINT(38.0746346 704.653748) 49778 POINT(196.527847 176.525986) 49779 POINT(676.208557 6.6026597) 49780 POINT(826.430786 598.878052) 49781 POINT(976.16748 555.403137) 49782 POINT(450.57254 600.61908) 49783 POINT(933.740845 922.084473) 49784 POINT(575.728516 527.306213) 49785 POINT(302.171783 463.400848) 49786 POINT(498.066406 640.794128) 49787 POINT(696.414673 139.25972) 49788 POINT(991.733215 321.413086) 49789 POINT(67.0149078 681.08136) 49790 POINT(9.00022984 96.1330948) 49791 POINT(693.567688 358.618347) 49792 POINT(527.214905 655.673157) 49793 POINT(637.34375 129.326904) 49794 POINT(44.130249 966.236877) 49795 POINT(839.636719 309.366669) 49796 POINT(391.079712 614.669189) 49797 POINT(495.949768 157.811432) 49798 POINT(625.00531 455.00473) 49799 POINT(293.675568 10.4088011) 49800 POINT(600.729553 895.892883) 49801 POINT(717.949524 196.580597) 49802 POINT(192.403488 119.168015) 49803 POINT(130.495468 799.288513) 49804 POINT(9.21135616 627.407471) 49805 POINT(261.300751 13.4983692) 49806 POINT(269.737122 650.865112) 49807 POINT(252.731705 82.4913712) 49808 POINT(399.593872 610.460083) 49809 POINT(418.242828 465.041687) 49810 POINT(988.805542 432.960968) 49811 POINT(459.271332 448.983185) 49812 POINT(282.954773 587.174011) 49813 POINT(388.506836 82.0265961) 49814 POINT(132.344788 186.476791) 49815 POINT(777.86145 258.587891) 49816 POINT(736.556641 954.735779) 49817 POINT(955.649353 567.200317) 49818 POINT(1.14438367 741.411438) 49819 POINT(268.348877 67.7837219) 49820 POINT(475.235321 200.035538) 49821 POINT(674.621582 298.236328) 49822 POINT(723.070618 205.398224) 49823 POINT(507.885712 287.72406) 49824 POINT(361.719666 212.504425) 49825 POINT(811.69281 227.519287) 49826 POINT(587.157532 579.055969) 49827 POINT(880.567749 282.765045) 49828 POINT(730.547424 547.934387) 49829 POINT(517.106262 149.210739) 49830 POINT(607.995789 172.557526) 49831 POINT(611.355713 712.509399) 49832 POINT(225.435913 662.353516) 49833 POINT(356.351074 164.435257) 49834 POINT(803.970764 14.8518105) 49835 POINT(207.761719 296.35144) 49836 POINT(331.413757 112.569435) 49837 POINT(377.694519 317.030609) 49838 POINT(607.470703 815.140686) 49839 POINT(602.666626 336.736237) 49840 POINT(420.712524 728.782471) 49841 POINT(351.624084 795.155762) 49842 POINT(416.007324 935.625366) 49843 POINT(827.766785 275.820953) 49844 POINT(925.364807 804.709167) 49845 POINT(682.108582 798.152405) 49846 POINT(540.260132 265.201324) 49847 POINT(489.530762 279.953827) 49848 POINT(199.649277 421.94632) 49849 POINT(760.094055 153.407562) 49850 POINT(708.37738 845.694763) 49851 POINT(668.180237 347.363068) 49852 POINT(741.968933 127.843269) 49853 POINT(206.408936 34.5660248) 49854 POINT(845.435364 595.397583) 49855 POINT(115.092094 716.673462) 49856 POINT(708.44397 319.94165) 49857 POINT(534.259949 680.292969) 49858 POINT(62.7801666 499.072601) 49859 POINT(785.150696 417.345886) 49860 POINT(69.4458847 855.078552) 49861 POINT(250.758667 841.888916) 49862 POINT(664.043823 189.262924) 49863 POINT(807.963074 647.861572) 49864 POINT(335.495819 597.53949) 49865 POINT(312.426636 798.4104) 49866 POINT(502.949463 930.656311) 49867 POINT(975.481995 293.448822) 49868 POINT(510.393188 848.186096) 49869 POINT(151.383347 169.552017) 49870 POINT(212.588257 637.416809) 49871 POINT(703.465088 302.376678) 49872 POINT(817.138611 855.272766) 49873 POINT(196.931244 429.395386) 49874 POINT(666.673584 702.810974) 49875 POINT(210.330551 828.317566) 49876 POINT(786.158325 897.705261) 49877 POINT(931.508179 978.234802) 49878 POINT(530.345581 101.121468) 49879 POINT(349.353546 16.005928) 49880 POINT(495.534058 752.783691) 49881 POINT(40.4863014 865.038025) 49882 POINT(911.421692 433.751465) 49883 POINT(128.778763 58.3971825) 49884 POINT(109.38662 713.011108) 49885 POINT(142.053482 769.704529) 49886 POINT(932.558044 334.5914) 49887 POINT(459.309601 685.758728) 49888 POINT(373.257355 700.337891) 49889 POINT(916.422485 652.133545) 49890 POINT(510.606995 924.130493) 49891 POINT(79.5648422 560.599365) 49892 POINT(394.276947 441.251648) 49893 POINT(192.86937 554.216858) 49894 POINT(751.526672 807.461182) 49895 POINT(927.478638 147.072296) 49896 POINT(859.105774 112.411034) 49897 POINT(698.611267 401.221985) 49898 POINT(147.518417 448.238312) 49899 POINT(449.250763 499.460999) 49900 POINT(824.076172 344.06076) 49901 POINT(725.291748 290.633789) 49902 POINT(197.63884 618.818481) 49903 POINT(467.337891 71.5865936) 49904 POINT(349.661591 977.254822) 49905 POINT(926.848877 679.373352) 49906 POINT(163.952301 26.2202759) 49907 POINT(265.109375 87.4491348) 49908 POINT(545.343384 510.953339) 49909 POINT(826.799927 84.4149628) 49910 POINT(422.361755 144.208145) 49911 POINT(488.17337 233.143967) 49912 POINT(41.1408005 746.347839) 49913 POINT(383.483337 397.174042) 49914 POINT(270.574646 743.719177) 49915 POINT(311.012115 431.06955) 49916 POINT(508.515778 738.308716) 49917 POINT(138.557816 678.638733) 49918 POINT(115.231636 607.013794) 49919 POINT(72.4485703 239.670319) 49920 POINT(616.058655 797.638) 49921 POINT(57.0648499 350.071899) 49922 POINT(676.045898 435.347595) 49923 POINT(244.598358 985.434631) 49924 POINT(724.306824 952.848877) 49925 POINT(156.619461 23.2095394) 49926 POINT(216.871475 15.6231689) 49927 POINT(167.344925 78.5939026) 49928 POINT(699.243347 976.483154) 49929 POINT(418.801941 824.234741) 49930 POINT(841.938965 298.397614) 49931 POINT(454.00769 89.9469223) 49932 POINT(455.468048 808.517395) 49933 POINT(277.580566 957.407227) 49934 POINT(580.067383 157.783112) 49935 POINT(353.756256 73.4578323) 49936 POINT(227.728897 968.195129) 49937 POINT(187.603653 427.079651) 49938 POINT(320.481934 253.193146) 49939 POINT(642.456665 307.754944) 49940 POINT(113.446289 335.665619) 49941 POINT(389.456879 290.935059) 49942 POINT(660.93573 593.551208) 49943 POINT(806.018005 99.3828201) 49944 POINT(129.059235 506.094269) 49945 POINT(9.48950291 552.628784) 49946 POINT(382.157104 116.491821) 49947 POINT(378.940887 541.63678) 49948 POINT(879.466736 771.452271) 49949 POINT(58.5711212 818.622681) 49950 POINT(572.211182 838.24939) 49951 POINT(305.652344 155.036209) 49952 POINT(952.533508 668.98053) 49953 POINT(727.148438 141.848373) 49954 POINT(390.186676 904.342407) 49955 POINT(103.343651 148.968521) 49956 POINT(319.573914 950.362244) 49957 POINT(613.229187 53.9398613) 49958 POINT(80.6884918 176.826721) 49959 POINT(422.411163 638.76355) 49960 POINT(347.924866 771.927429) 49961 POINT(165.427948 648.126343) 49962 POINT(128.937332 830.804016) 49963 POINT(324.233032 528.433228) 49964 POINT(513.161011 883.752136) 49965 POINT(674.967346 716.477417) 49966 POINT(380.847473 801.036621) 49967 POINT(225.897003 926.539185) 49968 POINT(536.203857 604.304504) 49969 POINT(608.534424 368.045868) 49970 POINT(543.274353 818.933411) 49971 POINT(997.627747 901.126892) 49972 POINT(464.519562 407.326935) 49973 POINT(938.151428 258.552246) 49974 POINT(726.693909 210.835693) 49975 POINT(141.04451 99.3916168) 49976 POINT(166.79686 18.9357662) 49977 POINT(394.726562 547.610474) 49978 POINT(595.896545 590.446472) 49979 POINT(325.013763 258.717804) 49980 POINT(816.940369 25.4558563) 49981 POINT(248.709366 966.091431) 49982 POINT(253.846863 71.4096909) 49983 POINT(810.742493 917.960754) 49984 POINT(205.912155 126.298988) 49985 POINT(304.282288 924.07666) 49986 POINT(199.683884 650.460632) 49987 POINT(458.8927 701.315125) 49988 POINT(138.896759 331.2323) 49989 POINT(282.778107 418.95282) 49990 POINT(573.903564 967.233398) 49991 POINT(78.8786697 391.842102) 49992 POINT(750.46344 597.673096) 49993 POINT(666.521118 613.551331) 49994 POINT(432.087921 733.723572) 49995 POINT(854.142883 637.703247) 49996 POINT(301.841614 631.185059) 49997 POINT(376.04657 345.837891) 49998 POINT(973.113953 744.570374) 49999 POINT(457.087769 541.375366) 50000 POINT(912.12323 831.139587) \. ������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_gml_expected�����������������������������������������������������0000644�0000000�0000000�00000043453�12314525005�020311� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������empty_geom| ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation point_1|POINT(1 2) ERROR: invalid GML representation point_3|POINT EMPTY point_4|SRID=4326;POINT(1 2) linestring_1|LINESTRING(1 2,3 4) ERROR: invalid GML representation linestring_3|SRID=4326;LINESTRING(1 2,3 4) ERROR: invalid GML representation linestring_5|LINESTRING EMPTY linestring_6|LINESTRING(1 2,3 4) curve_1|LINESTRING(1 2,3 4) ERROR: invalid GML representation curve_3|SRID=4326;LINESTRING(1 2,3 4) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation curve_8|LINESTRING(1 2,3 4) ERROR: invalid GML representation curve_10|LINESTRING(1 2,3 4) curve_11|LINESTRING(1 2,3 4,5 6) curve_12|LINESTRING(1 2 3,4 5 6,7 8 9) ERROR: invalid GML representation ERROR: invalid GML representation curve_15|LINESTRING(1 2,4 5,7 8) curve_16|LINESTRING(1 2,3 4,6 7) polygon_1|POLYGON((1 2,3 4,5 6,1 2)) polygon_2|SRID=4326;POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation polygon_9|POLYGON EMPTY polygon_10|POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)) polygon_11|POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)) polygon_12|POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation polygon_16|POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8),(13 14,15 16,17 18,13 14)) polygon_17|POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)) polygon_18|POLYGON((1 2,4 5,7 8,1 2),(10 11,12 13,14 15,10 11)) polygon_19|POLYGON((1 2,3 4,5 6,1 2),(7 8,10 11,13 14,7 8)) linearring_1|POLYGON((1 2,3 4,5 6,1 2)) linearring_2|SRID=4326;POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation linearring_8|POLYGON((1 2,3 4,5 6,1 2)) triangle_1|TRIANGLE((1 2,3 4,5 6,1 2)) triangle_2|SRID=4326;TRIANGLE((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation triangle_8|TRIANGLE EMPTY triangle_9|TRIANGLE((1 2,3 4,5 6,1 2)) triangle_10|TRIANGLE((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation surface_1|POLYGON((1 2,3 4,5 6,1 2)) surface_2|SRID=4326;POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation surface_11|POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)) surface_12|POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)) surface_13|POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation surface_17|POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8),(13 14,15 16,17 18,13 14)) surface_18|POLYGON((1 2,4 5,7 8,1 2),(10 11,12 13,14 15,10 11)) surface_19|POLYGON((1 2,3 4,5 6,1 2),(7 8,10 11,13 14,7 8)) ERROR: invalid GML representation surface_21|POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid GML representation ERROR: invalid GML representation mpoint_1|MULTIPOINT(1 2) mpoint_2|MULTIPOINT(1 2,3 4) mpoint_3|SRID=4326;MULTIPOINT(1 2) mpoint_4|MULTIPOINT EMPTY mpoint_5|MULTIPOINT EMPTY mpoint_6|MULTIPOINT(1 2,3 4) mpoint_7|SRID=27582;MULTIPOINT(1 2,400000 7000000) mpoint_8|MULTIPOINT(1 2) mpoint_9|MULTIPOINT(1 2,3 4) mpoint_10|MULTIPOINT EMPTY mline_1|MULTILINESTRING((1 2,3 4)) mline_2|MULTILINESTRING((1 2,3 4),(5 6,7 8)) mline_3|SRID=4326;MULTILINESTRING((1 2,3 4)) mline_4|MULTILINESTRING EMPTY mline_5|MULTILINESTRING EMPTY mline_6|MULTILINESTRING((1 2,3 4),(5 6,7 8)) mline_7|MULTILINESTRING((1 2,4 5),(7 8,9 10)) mline_8|MULTILINESTRING((1 2,3 4),(5 6,8 9)) mline_9|SRID=27582;MULTILINESTRING((1 2,3 4),(400000 7000000,400010 7000010)) mcurve_1|MULTILINESTRING((1 2,3 4)) mcurve_2|MULTILINESTRING((1 2,3 4),(5 6,7 8)) mcurve_3|SRID=4326;MULTILINESTRING((1 2,3 4)) mcurve_4|MULTILINESTRING EMPTY mcurve_5|MULTILINESTRING EMPTY mcurve_6|MULTILINESTRING((1 2,3 4),(5 6,7 8)) mcurve_7|MULTILINESTRING((1 2,4 5),(7 8,9 10)) mcurve_8|MULTILINESTRING((1 2,3 4),(5 6,8 9)) mcurve_9|SRID=27582;MULTILINESTRING((1 2,3 4),(400000 7000000,400010 7000010)) mcurve_10|MULTILINESTRING((1 2,3 4)) mcurve_11|MULTILINESTRING((1 2,3 4),(5 6,7 8)) mcurve_12|MULTILINESTRING EMPTY mpoly_1|MULTIPOLYGON(((1 2,3 4,5 6,1 2))) mpoly_2|MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))) mpoly_3|SRID=4326;MULTIPOLYGON(((1 2,3 4,5 6,1 2))) mpoly_4|MULTIPOLYGON EMPTY mpoly_5|MULTIPOLYGON EMPTY mpoly_6|MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))) mpoly_7|MULTIPOLYGON(((1 2,4 5,7 8,1 2)),((10 11,12 13,14 15,10 11))) mpoly_8|MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,10 11,13 14,7 8))) mpoly_9|SRID=27582;MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((400000 7000000,400010 7000010,400020 7000020,400000 7000000),(400100 7000100,400110 7000110,400120 7000120,400100 7000100))) msurface_1|MULTIPOLYGON(((1 2,3 4,5 6,1 2))) msurface_2|MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))) msurface_3|SRID=4326;MULTIPOLYGON(((1 2,3 4,5 6,1 2))) msurface_4|MULTIPOLYGON EMPTY msurface_5|MULTIPOLYGON EMPTY msurface_6|MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))) msurface_7|MULTIPOLYGON(((1 2,4 5,7 8,1 2)),((10 11,12 13,14 15,10 11))) msurface_8|MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,10 11,13 14,7 8))) msurface_9|SRID=27582;MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((400000 7000000,400010 7000010,400020 7000020,400000 7000000),(400100 7000100,400110 7000110,400120 7000120,400100 7000100))) msurface_10|MULTIPOLYGON(((1 2,3 4,5 6,1 2))) msurface_11|MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))) msurface_12|MULTIPOLYGON EMPTY polyhedralsurface_1|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3))) polyhedralsurface_2|SRID=4326;POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3))) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation polyhedralsurface_9|POLYHEDRALSURFACE EMPTY polyhedralsurface_10|POLYHEDRALSURFACE EMPTY polyhedralsurface_11|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3),(10 11 12,13 14 15,16 17 18,10 11 12))) polyhedralsurface_12|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12))) polyhedralsurface_13|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12),(19 20 21,22 23 24,25 26 27,19 20 21))) polyhedralsurface_14|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12),(19 20 21,22 23 24,25 26 27,19 20 21))) polyhedralsurface_15|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3))) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation polyhedralsurface_19|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3),(10 11 12,13 14 15,16 17 18,10 11 12),(19 20 21,22 23 24,25 26 27,19 20 21))) polyhedralsurface_20|POLYHEDRALSURFACE(((1 2,4 5,7 8,1 2),(10 11,12 13,14 15,10 11))) polyhedralsurface_21|POLYHEDRALSURFACE(((1 2,3 4,5 6,1 2),(7 8,10 11,13 14,7 8))) polyhedralsurface_22|POLYHEDRALSURFACE(((1 2,4 5,7 8,1 2)),((10 11,12 13,14 15,10 11))) polyhedralsurface_23|POLYHEDRALSURFACE(((1 2,3 4,5 6,1 2)),((7 8,10 11,13 14,7 8))) polyhedralsurface_24|POLYHEDRALSURFACE(((1 2 3,4 5 6,7 8 9,1 2 3))) ERROR: invalid GML representation tin_1|TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) tin_2|SRID=4326;TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation tin_8|TIN EMPTY tin_9|TIN EMPTY tin_10|TIN EMPTY tin_11|TIN(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12))) tin_12|TIN(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12))) tin_13|TIN(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12)),((19 20 21,22 23 24,25 26 27,19 20 21))) tin_14|TIN(((1 2,4 5,7 8,1 2)),((10 11,12 13,14 15,10 11))) tin_15|TIN(((1 2,3 4,5 6,1 2)),((7 8,10 11,13 14,7 8))) tin_16|TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) tin_17|TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) tin_18|TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) collection_1|GEOMETRYCOLLECTION(POINT(1 2)) collection_2|GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6)) collection_3|GEOMETRYCOLLECTION(MULTIPOINT(1 2,3 4)) collection_4|GEOMETRYCOLLECTION(MULTIPOINT(1 2,3 4),MULTILINESTRING((5 6,7 8),(9 10,11 12))) collection_5|GEOMETRYCOLLECTION(MULTIPOINT(1 2,3 4),POINT(5 6),MULTILINESTRING((7 8,9 10),(11 12,13 14)),POLYGON((15 16,17 18,19 20,15 16))) collection_6|GEOMETRYCOLLECTION EMPTY collection_7|GEOMETRYCOLLECTION EMPTY collection_8|GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(POINT(3 4))) collection_9|GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4)))) collection_10|SRID=4326;GEOMETRYCOLLECTION(POINT(1 2)) collection_11|GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4)))) collection_12|GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(4 5)))) collection_13|GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4)))) collection_14|SRID=27582;GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(400000 7000000)))) srs_1|SRID=4326;POINT(1 2) srs_2|SRID=4326;POINT(2 1) srs_3|SRID=4326;POINT(2 1) srs_4|SRID=4326;POINT(2 1) srs_5|SRID=4326;POINT(2 1) srs_6|SRID=4326;POINT(2 1) srs_7|SRID=4326;POINT(1 2) srs_8|SRID=4326;POINT(1 2) ERROR: unknown spatial reference system ERROR: unknown spatial reference system ERROR: unknown spatial reference system ERROR: unknown spatial reference system ERROR: unknown spatial reference system ERROR: unknown spatial reference system ERROR: unknown spatial reference system ERROR: unknown spatial reference system srs_17|SRID=4326;GEOMETRYCOLLECTION(POINT(2 1),LINESTRING(4 3,6 5),LINESTRING(8 7,10 9),POLYGON((12 11,14 13,16 15,12 11),(18 17,20 19,22 21,18 17)),POLYGON((24 23,26 25,28 27,24 23),(26 25,28 27,30 29,26 25))) ns_1|POINT(1 2) ns_2|POINT(1 2) ns_3|POINT(1 2) ERROR: invalid GML representation ns_5|POINT(1 2) ns_6|POINT(1 2) ns_7|SRID=4326;POINT(1 2) ns_8|SRID=4326;POINT(1 2) ns_9|SRID=4326;POINT(1 2) ns_10|SRID=4326;POINT(1 2) ns_11|POINT(1 2) ERROR: invalid GML representation ns_13|SRID=4326;POINT(1 2) coordinates_1|POINT(1 2) ERROR: invalid GML representation coordinates_3|POINT(1 2 3) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation coordinates_12|LINESTRING(1 2,3 4) coordinates_13|LINESTRING(1 2,3 4) coordinates_14|LINESTRING(1 2,4 5) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation coordinates_cs_1|POINT(1 2) ERROR: invalid GML representation coordinates_cs_3|POINT(1 2) ERROR: invalid GML representation ERROR: invalid GML representation coordinates_cs_6|LINESTRING(1 2,3 4) ERROR: invalid GML representation coordinates_cs_8|LINESTRING(1 2,3 4) ERROR: invalid GML representation ERROR: invalid GML representation coordinates_cs_11|LINESTRING(1.1 2.2,3.3 4.4) coordinates_cs_12|LINESTRING(1.1 2.2,3.3 4.4) ERROR: invalid GML representation ERROR: invalid GML representation coordinates_cs_15|LINESTRING(1.1 2.2,3.3 4.4) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation coordinates_cs_19|LINESTRING(1 2,3 4) pos_1|POINT(1 2) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation pos_8|POINT(1 2) pos_9|POINT(1 2) pos_10|POINT(1 2) pos_11|POINT(1 2) ERROR: invalid GML representation ERROR: invalid GML representation pos_14|POINT(1 2) ERROR: invalid GML representation pos_16|POINT(1 2 3) ERROR: invalid GML representation poslist_1|LINESTRING(1 2,3 4) poslist_2|LINESTRING(1 2,3 4) poslist_3|LINESTRING(1 2,3 4) poslist_4|LINESTRING(1 2,3 4) poslist_5|LINESTRING(1 2,3 4) ERROR: invalid GML representation ERROR: invalid GML representation poslist_8|LINESTRING(1 2 3,4 5 6) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation poslist_16|LINESTRING(1 2,3 4) poslist_17|LINESTRING(1 2,3 4) ERROR: invalid GML representation data_1|LINESTRING(1 2,3 4,5 6,7 8,9 10,11 12) data_2|LINESTRING(1 2,3 4,5 6,7 8,9 10) xlink_1|LINESTRING(1 2,1 2,3 4) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation xlink_11|LINESTRING(1 2,1 2,3 4) xlink_12|GEOMETRYCOLLECTION(POINT(1 2),POINT(1 2)) xlink_13|GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),LINESTRING(1 2,3 4)) xlink_14|GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),LINESTRING(1 2,3 4)) xlink_15|GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((1 2,3 4,5 6,1 2))) xlink_16|GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((1 2,3 4,5 6,1 2))) xlink_17|GEOMETRYCOLLECTION(MULTIPOINT(1 2),MULTIPOINT(1 2)) xlink_18|GEOMETRYCOLLECTION(MULTILINESTRING((1 2,3 4)),MULTILINESTRING((1 2,3 4))) xlink_19|GEOMETRYCOLLECTION(MULTILINESTRING((1 2,3 4)),MULTILINESTRING((1 2,3 4))) xlink_20|GEOMETRYCOLLECTION(MULTIPOLYGON(((1 2,3 4,5 6,1 2))),MULTIPOLYGON(((1 2,3 4,5 6,1 2)))) xlink_21|GEOMETRYCOLLECTION(MULTIPOLYGON(((1 2,3 4,5 6,1 2))),MULTIPOLYGON(((1 2,3 4,5 6,1 2)))) xlink_22|GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 2)),GEOMETRYCOLLECTION(POINT(1 2))) ERROR: invalid GML representation gml_1|POINT(1 2) gml_2|POINT(1 2 3) gml_3|SRID=27582;POINT(1 2) gml_4|POINT(1 2) gml_5|SRID=4326;POINT(1 2) gml_6|POINT(1 2 3) gml_7|SRID=4326;POINT(1 2 3) gml_8|LINESTRING(1 2,3 4) gml_9|LINESTRING(1 2 3,4 5 6) gml_10|SRID=27582;LINESTRING(1 2,3 4) gml_11|LINESTRING(1 2,3 4) gml_12|SRID=4326;LINESTRING(1 2,3 4) gml_13|LINESTRING(1 2 3,4 5 6) gml_14|SRID=4326;LINESTRING(1 2 3,4 5 6) gml_15|POLYGON((1 2,3 4,5 6,1 2)) gml_16|POLYGON((1 2 3,4 5 6,7 8 9,1 2 3)) gml_17|SRID=27582;POLYGON((1 2,3 4,5 6,1 2)) gml_18|POLYGON((1 2,3 4,5 6,1 2)) gml_19|SRID=4326;POLYGON((1 2,3 4,5 6,1 2)) gml_20|POLYGON((1 2 3,4 5 6,7 8 9,1 2 3)) gml_21|SRID=4326;POLYGON((1 2 3,4 5 6,7 8 9,1 2 3)) gml_22|TRIANGLE((1 2,3 4,5 6,1 2)) gml_23|SRID=4326;TRIANGLE((1 2,3 4,5 6,1 2)) gml_24|SRID=27582;TRIANGLE((1 2,3 4,5 6,1 2)) gml_25|TRIANGLE((1 2 3,4 5 6,7 8 9,1 2 3)) gml_26|SRID=4326;TRIANGLE((1 2 3,4 5 6,7 8 9,1 2 3)) gml_27|MULTIPOINT(1 2) gml_28|MULTIPOINT(1 2 3) gml_29|SRID=27582;MULTIPOINT(1 2) gml_30|MULTIPOINT(1 2) gml_31|SRID=4326;MULTIPOINT(1 2) gml_32|MULTIPOINT(1 2 3) gml_33|SRID=4326;MULTIPOINT(1 2 3) gml_34|MULTILINESTRING((1 2,3 4)) gml_35|MULTILINESTRING((1 2 3,4 5 6)) gml_36|SRID=27582;MULTILINESTRING((1 2,3 4)) gml_37|MULTILINESTRING((1 2,3 4)) gml_38|SRID=4326;MULTILINESTRING((1 2,3 4)) gml_39|MULTILINESTRING((1 2 3,4 5 6)) gml_40|SRID=4326;MULTILINESTRING((1 2 3,4 5 6)) gml_41|MULTIPOLYGON(((1 2,3 4,5 6,1 2))) gml_42|MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3))) gml_43|SRID=27582;MULTIPOLYGON(((1 2,3 4,5 6,1 2))) gml_44|MULTIPOLYGON(((1 2,3 4,5 6,1 2))) gml_45|SRID=4326;MULTIPOLYGON(((1 2,3 4,5 6,1 2))) gml_46|MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3))) gml_47|SRID=27582;MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3))) gml_48|SRID=4326;MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3))) gml_49|TIN(((1 2,3 4,5 6,1 2))) gml_50|SRID=27582;TIN(((1 2,3 4,5 6,1 2))) gml_51|SRID=4326;TIN(((1 2,3 4,5 6,1 2))) gml_52|TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) gml_53|SRID=27582;TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) gml_54|SRID=4326;TIN(((1 2 3,4 5 6,7 8 9,1 2 3))) gml_55|GEOMETRYCOLLECTION(POINT(1 2)) gml_56|GEOMETRYCOLLECTION(POINT(1 2 3)) gml_57|SRID=27582;GEOMETRYCOLLECTION(POINT(1 2)) gml_58|GEOMETRYCOLLECTION(POINT(1 2)) gml_59|SRID=4326;GEOMETRYCOLLECTION(POINT(1 2)) gml_60|GEOMETRYCOLLECTION(POINT(1 2 3)) gml_61|SRID=4326;GEOMETRYCOLLECTION(POINT(1 2 3)) coord_1|POINT(1 2) coord_2|POINT(1 2 3) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation coord_10|POINT(1 2) coord_11|POINT(1 2) coord_12|POINT(1 2) coord_13|LINESTRING(1 2,3 4) coord_14|LINESTRING(1 2,4 5) coord_15|LINESTRING(1 2,3 4) coord_16|LINESTRING(1 2,3 4) double_1|POINT(1 1234567890) double_2|POINT(1 -1) double_3|POINT(1 1) ERROR: invalid GML representation ERROR: invalid GML representation double_6|POINT(1 1.2) double_7|POINT(1 1.23) double_8|POINT(1 1) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation double_15|POINT(1 100) double_16|POINT(1 100) double_17|POINT(1 0.01) double_18|POINT(1 0.01) double_19|POINT(1 123) double_20|POINT(1 123) double_21|POINT(1 -123) ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ERROR: invalid GML representation ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/out_geography.sql���������������������������������������������������0000644�0000000�0000000�00000016600�11722777314�020645� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� -- -- spatial_ref_sys data -- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","proj4text") VALUES (4326,'EPSG',4326,'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); INSERT INTO "spatial_ref_sys" ("srid", "proj4text") VALUES (102189, '+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); -- -- GML -- -- Empty Geometry SELECT 'gml_empty_geom', ST_AsGML(geography(GeomFromEWKT(NULL))); -- Precision SELECT 'gml_precision_01', ST_AsGML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2); SELECT 'gml_precision_02', ST_AsGML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19); -- Version SELECT 'gml_version_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); SELECT 'gml_version_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); SELECT 'gml_version_03', ST_AsGML(21, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); SELECT 'gml_version_04', ST_AsGML(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); -- Option SELECT 'gml_option_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 0); SELECT 'gml_option_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 1); SELECT 'gml_option_03', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2); -- Deegree data SELECT 'gml_deegree_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0); SELECT 'gml_deegree_02', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1); SELECT 'gml_deegree_03', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0); SELECT 'gml_deegree_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1); -- Prefix SELECT 'gml_prefix_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, ''); SELECT 'gml_prefix_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, ''); SELECT 'gml_prefix_03', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo'); SELECT 'gml_prefix_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo'); -- -- KML -- -- SRID SELECT 'kml_srid_01', ST_AsKML(geography(GeomFromEWKT('SRID=10;POINT(0 1)'))); SELECT 'kml_srid_02', ST_AsKML(geography(GeomFromEWKT('POINT(0 1)'))); -- Empty Geometry SELECT 'kml_empty_geom', ST_AsKML(geography(GeomFromEWKT(NULL))); -- Precision SELECT 'kml_precision_01', ST_AsKML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2); SELECT 'kml_precision_02', ST_AsKML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19); -- Version SELECT 'kml_version_01', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); SELECT 'kml_version_02', ST_AsKML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); SELECT 'kml_version_03', ST_AsKML(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); -- Prefix SELECT 'kml_prefix_01', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, ''); SELECT 'kml_prefix_02', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 'kml'); -- Projected -- National Astronomical Observatory of Colombia - Bogota, Colombia (Placemark) SELECT 'kml_projection_01', ST_AsKML(geography(GeomFromEWKT('SRID=102189;POINT(1000000 1000000)')), 3); -- -- SVG -- -- Empty Geometry SELECT 'svg_empty_geom', ST_AsSVG(geography(GeomFromEWKT(NULL))); -- Option SELECT 'svg_option_01', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0); SELECT 'svg_option_02', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1); SELECT 'svg_option_03', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0, 0); SELECT 'svg_option_04', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1, 0); -- Precision SELECT 'svg_precision_01', ST_AsSVG(geography(GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, -2); SELECT 'svg_precision_02', ST_AsSVG(geography(GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, 19); -- -- GeoJson -- -- Empty Geometry SELECT 'geojson_empty_geom', ST_AsGeoJson(geography(GeomFromEWKT(NULL))); -- Precision SELECT 'geojson_precision_01', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2); SELECT 'geojson_precision_02', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19); -- Version SELECT 'geojson_version_01', ST_AsGeoJson(1, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); SELECT 'geojson_version_02', ST_AsGeoJson(21, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); SELECT 'geojson_version_03', ST_AsGeoJson(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)'))); -- CRS SELECT 'geojson_crs_01', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2); SELECT 'geojson_crs_02', ST_AsGeoJson(geography(GeomFromEWKT('POINT(1 1)')), 0, 2); SELECT 'geojson_crs_03', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 4); SELECT 'geojson_crs_04', ST_AsGeoJson(geography(GeomFromEWKT('POINT(1 1)')), 0, 4); SELECT 'geojson_crs_05', ST_AsGeoJson(geography(GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 2); SELECT 'geojson_crs_06', ST_AsGeoJson(geography(GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 4); -- Bbox SELECT 'geojson_bbox_01', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0); SELECT 'geojson_bbox_02', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1); SELECT 'geojson_bbox_03', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3); SELECT 'geojson_bbox_04', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5); -- CRS and Bbox SELECT 'geojson_options_01', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 0); SELECT 'geojson_options_02', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0); SELECT 'geojson_options_03', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1); SELECT 'geojson_options_04', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1); SELECT 'geojson_options_05', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2); SELECT 'geojson_options_06', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2); SELECT 'geojson_options_07', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3); SELECT 'geojson_options_08', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3); SELECT 'geojson_options_09', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4); SELECT 'geojson_options_10', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4); SELECT 'geojson_options_11', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5); SELECT 'geojson_options_12', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5); SELECT 'geojson_options_13', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6); SELECT 'geojson_options_14', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6); SELECT 'geojson_options_15', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7); SELECT 'geojson_options_16', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7); -- -- Delete inserted spatial data -- DELETE FROM spatial_ref_sys; ��������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/binary.sql����������������������������������������������������������0000644�0000000�0000000�00000004100�12143205626�017233� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; CREATE SCHEMA tm; CREATE TABLE tm.geoms (id serial, g geometry); INSERT INTO tm.geoms(g) values ('POINT EMPTY'); INSERT INTO tm.geoms(g) values ('LINESTRING EMPTY'); INSERT INTO tm.geoms(g) values ('POLYGON EMPTY'); INSERT INTO tm.geoms(g) values ('MULTIPOINT EMPTY'); INSERT INTO tm.geoms(g) values ('MULTILINESTRING EMPTY'); INSERT INTO tm.geoms(g) values ('MULTIPOLYGON EMPTY'); INSERT INTO tm.geoms(g) values ('GEOMETRYCOLLECTION EMPTY'); INSERT INTO tm.geoms(g) values ('CIRCULARSTRING EMPTY'); INSERT INTO tm.geoms(g) values ('COMPOUNDCURVE EMPTY'); INSERT INTO tm.geoms(g) values ('CURVEPOLYGON EMPTY'); INSERT INTO tm.geoms(g) values ('MULTICURVE EMPTY'); INSERT INTO tm.geoms(g) values ('MULTISURFACE EMPTY'); INSERT INTO tm.geoms(g) values ('POLYHEDRALSURFACE EMPTY'); INSERT INTO tm.geoms(g) values ('TRIANGLE EMPTY'); INSERT INTO tm.geoms(g) values ('TIN EMPTY'); -- all zm flags INSERT INTO tm.geoms(g) SELECT st_force3dz(g) FROM tm.geoms WHERE id < 15 ORDER BY id; INSERT INTO tm.geoms(g) SELECT st_force3dm(g) FROM tm.geoms WHERE id < 15 ORDER BY id; INSERT INTO tm.geoms(g) SELECT st_force4d(g) FROM tm.geoms WHERE id < 15 ORDER BY id; -- known srid INSERT INTO tm.geoms(g) SELECT st_setsrid(g,4326) FROM tm.geoms ORDER BY id; COPY tm.geoms TO :tmpfile WITH BINARY; CREATE TABLE tm.geoms_in AS SELECT * FROM tm.geoms LIMIT 0; COPY tm.geoms_in FROM :tmpfile WITH BINARY; SELECT 'geometry', count(*) FROM tm.geoms_in i, tm.geoms o WHERE i.id = o.id AND ST_OrderingEquals(i.g, o.g); CREATE TABLE tm.geogs AS SELECT id,g::geography FROM tm.geoms WHERE geometrytype(g) NOT LIKE '%CURVE%' AND geometrytype(g) NOT LIKE '%CIRCULAR%' AND geometrytype(g) NOT LIKE '%SURFACE%' AND geometrytype(g) NOT LIKE 'TRIANGLE%' AND geometrytype(g) NOT LIKE 'TIN%' ; COPY tm.geogs TO :tmpfile WITH BINARY; CREATE TABLE tm.geogs_in AS SELECT * FROM tm.geogs LIMIT 0; COPY tm.geogs_in FROM :tmpfile WITH BINARY; SELECT 'geometry', count(*) FROM tm.geogs_in i, tm.geogs o WHERE i.id = o.id AND ST_OrderingEquals(i.g::geometry, o.g::geometry); DROP SCHEMA tm CASCADE; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/removepoint.sql�����������������������������������������������������0000644�0000000�0000000�00000002332�11722777314�020335� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat tests for new function names. -- Can't remove points from a 2-point linestring SELECT ST_removepoint('LINESTRING(0 0, 1 1)', 0); -- Out of range indexes SELECT ST_removepoint('LINESTRING(0 0, 1 1, 2 2)', 3); SELECT ST_removepoint('LINESTRING(0 0, 1 1, 2 2)', -1); -- Removing first/last points SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0, 1 1, 2 2)', 0)); SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0, 1 1, 2 2)', 2)); -- Removing first/last points with higher dimension SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0 0, 1 1 1, 2 2 2)', 0)); SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0 0, 1 1 1, 2 2 2)', 2)); SELECT ST_asewkt(ST_removepoint('LINESTRINGM(0 0 0, 1 1 1, 2 2 2)', 0)); SELECT ST_asewkt(ST_removepoint('LINESTRINGM(0 0 0, 1 1 1, 2 2 2)', 2)); SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2)', 0)); SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2)', 2)); -- Removing intermediate points with higher dimension SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 3 3 3 3, 4 4 4 4, 5 5 5 5, 6 6 6 6, 7 7 7 7)', 2)); SELECT ST_asewkt(ST_removepoint('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 3 3 3 3, 4 4 4 4, 5 5 5 5, 6 6 6 6, 7 7 7 7)', 4)); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/wkt.sql�������������������������������������������������������������0000644�0000000�0000000�00000056437�11722777314�016612� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- POINT -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT(EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT(0 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT Z (0 0 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT M (0 0 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT ZM (0 0 0 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT ZM (0 0 0)' -- broken, misses an ordinate value ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POINT((0 0))' ::text as g ) as foo; -- MULTIPOINT -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT(EMPTY)' ::text as g ) as foo; -- This is supported for backward compatibility SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT(0 0, 2 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT((0 0), (2 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT((0 0), (2 0), EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT Z ((0 0 0), (2 0 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT M ((0 0 0), (2 0 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOINT ZM ((0 0 0 0), (2 0 0 0))' ::text as g ) as foo; -- LINESTRING -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING(EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING(0 0, 1 1)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING((0 0, 1 1))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING((0 0), (1 1))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING Z (0 0 0, 1 1 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING M (0 0 0, 1 1 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'LINESTRING ZM (0 0 0 0, 1 1 0 0)' ::text as g ) as foo; -- MULTILINESTRING -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING(EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING(0 0, 2 0)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING((0 0, 2 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING((0 0, 2 0), (1 1, 2 2))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING((0 0, 2 0), (1 1, 2 2), EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING((0 0, 2 0), (1 1, 2 2), (EMPTY))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING Z ((0 0 0, 2 0 0), (1 1 0, 2 2 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING M ((0 0 0, 2 0 0), (1 1 0, 2 2 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTILINESTRING ZM ((0 0 0 0, 2 0 0 0), (1 1 0 0, 2 2 0 0))' ::text as g ) as foo; -- POLYGON -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYGON EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYGON(EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYGON((0 0,1 0,1 1,0 1,0 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYGON M ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYGON ZM ((0 0 0 2,10 0 0 2,10 10 0 2,0 10 0 2,0 0 0 2),(2 2 0 2,2 5 0 2,5 5 0 2,5 2 0 2,2 2 0 2))' ::text as g ) as foo; -- MULTIPOLYGON -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOLYGON EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOLYGON(EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOLYGON((EMPTY))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOLYGON Z (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOLYGON M (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTIPOLYGON ZM (((0 0 2 5,10 0 2 5,10 10 2 5,0 10 2 5,0 0 2 5),(2 2 2 5,2 5 2 5,5 5 2 5,5 2 2 5,2 2 2 5)))' ::text as g ) as foo; -- GEOMETRYCOLLECTION -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'GEOMETRYCOLLECTION EMPTY' ::text as g ) as foo; -- This is supported for backward compatibility SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'GEOMETRYCOLLECTION(EMPTY)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'GEOMETRYCOLLECTION((EMPTY))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))),POINT(0 0),MULTILINESTRING((0 0, 2 0),(1 1, 2 2)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT Z (0 0 5),MULTILINESTRING Z ((0 0 5, 2 0 5),(1 1 5, 2 2 5)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'GEOMETRYCOLLECTION M (MULTIPOLYGON M (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT M (0 0 5),MULTILINESTRING M ((0 0 5, 2 0 5),(1 1 5, 2 2 5)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'GEOMETRYCOLLECTION ZM (MULTIPOLYGON ZM (((0 0 5 4,10 0 5 4,10 10 5 4,0 10 5 4,0 0 5 4),(2 2 5 4,2 5 5 4,5 5 5 4,5 2 5 4,2 2 5 4))),POINT ZM (0 0 5 4),MULTILINESTRING ZM ((0 0 5 4, 2 0 5 4),(1 1 5 4, 2 2 5 4)))' ::text as g ) as foo; -- CIRCULARSTRING -- SELECT g, -- invalid ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING(EMPTY)' ::text as g ) as foo; SELECT g, -- invalid ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING((0 0, 1 1, 2 2))' ::text as g ) as foo; SELECT g, -- invalid ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING(0 0, 1 1)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING(0 0, 1 1, 3 3)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING Z (0 0 0, 1 1 0, 2 3 4)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING M (0 0 0, 1 1 0, 3 4 5)' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CIRCULARSTRING ZM (0 0 0 0, 1 1 0 0, 1 2 3 4)' ::text as g ) as foo; -- COMPOUNDCURVE -- SELECT g, -- invalid (missing point) ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 0),(1 0,0 1))' ::text as g ) as foo; SELECT g, -- invalid (non continuous curve) ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 2,0 1))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'COMPOUNDCURVE EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5), (1 0 2 3,0 1 2 2), (0 1 2 2,30 1 2 2), CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5))' ::text as g ) as foo; -- CURVEPOLYGON -- SELECT g, -- invalid (non continuous curve) ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON (COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 2,0 1)))' ::text as g ) as foo; SELECT g, -- invalid (requires more points -- is this correct?) ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON (COMPOUNDCURVE EMPTY)' ::text as g ) as foo; SELECT g, -- invalid (non-closed rings) ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON (COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON (COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2),(0 1 2, 0 0 2)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON (COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2, 0 0 2)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5), (1 0 2 3,0 1 2 2), (0 1 2 2,30 1 2 2), CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5, 1 10 3 5, 0 0 2 5)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'CURVEPOLYGON(COMPOUNDCURVE((5 5 1 0,5 0 1 1,0 0 1 2,0 5 1 3), CIRCULARSTRING(0 5 1 3,1.5 7.5 1 4,5 5 1 0)),(1.5 5 2 0,2.5 6 3 1,3.5 5 2 2,1.5 5 2 0), COMPOUNDCURVE(CIRCULARSTRING(1.5 2 2 0,1 2.5 3 1,3.5 2 2 2),(3.5 2 2 2,3.5 4 1 3,1.5 4 1 4,1.5 2 2 0)))' ::text as g ) as foo; -- MULTICURVE -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTICURVE EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTICURVE ((5 5, 3 5, 3 3, 0 3), CIRCULARSTRING (0 0, 0.2 1, 0.5 1.4), COMPOUNDCURVE (CIRCULARSTRING (0 0,1 1,1 0),(1 0,0 1)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTICURVE M ((5 5 1, 3 5 2, 3 3 3, 0 3 1), CIRCULARSTRING M (0 0 0, 0.2 1 3, 0.5 1.4 1), COMPOUNDCURVE M (CIRCULARSTRING M (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTICURVE Z ((5 5 1, 3 5 2, 3 3 3, 0 3 1), CIRCULARSTRING Z (0 0 0, 0.2 1 3, 0.5 1.4 1), COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTICURVE ZM ((5 5 1 3, 3 5 2 2, 3 3 3 1, 0 3 1 1), CIRCULARSTRING ZM (0 0 0 0, 0.2 1 3 -2, 0.5 1.4 1 2), COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 0 0,1 1 1 2,1 0 0 1),(1 0 0 1,0 1 5 4)))' ::text as g ) as foo; -- MULTISURFACE -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTISURFACE EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTISURFACE (CURVEPOLYGON (CIRCULARSTRING (-2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0)), ((7 8, 10 10, 6 14, 4 11, 7 8)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTISURFACE M (CURVEPOLYGON M (CIRCULARSTRING M (-2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTISURFACE Z (CURVEPOLYGON Z (CIRCULARSTRING Z (-2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'MULTISURFACE ZM (CURVEPOLYGON ZM (CIRCULARSTRING ZM (-2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2)), ((7 8 7 8, 10 10 5 5, 6 14 3 1, 4 11 4 6, 7 8 7 8)))' ::text as g ) as foo; -- POLYHEDRALSURFACE -- SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYHEDRALSURFACE EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYHEDRALSURFACE (((0 0,0 0,0 1,0 0)),((0 0,0 1,1 0,0 0)),((0 0,1 0,0 0,0 0)),((1 0,0 1,0 0,1 0)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYHEDRALSURFACE M (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYHEDRALSURFACE Z (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'POLYHEDRALSURFACE ZM (((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))' ::text as g ) as foo; -- TRIANGLE -- SELECT g, -- invalid (non-closed ring) ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TRIANGLE ((1 2 3,4 5 6,7 8 9,1 2 0))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TRIANGLE EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TRIANGLE ((1 2 3,4 5 6,7 8 9,1 2 3))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TRIANGLE M ((1 2 3,4 5 6,7 8 9,1 2 3))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TRIANGLE Z ((1 2 3,4 5 6,7 8 9,1 2 3))' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TRIANGLE ZM ((1 2 3 -1,4 5 6 -2,7 8 9 -3,1 2 3 -1))' ::text as g ) as foo; -- TIN -- SELECT g, -- invalid (non-closed ring) ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TIN ZM ( ((0 0 0 0, 0 0 1 0, 0 1 0 4, 0 0 0 0)), ((0 0 0 1, 0 1 0 2, 1 1 0 3, 0 1 0 1)) )' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TIN EMPTY' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TIN ( ((0 0, 0 0, 0 1, 0 0)), ((0 0, 0 1, 1 1, 0 0)) )' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TIN Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TIN M ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )' ::text as g ) as foo; SELECT g, ST_AsText(g::geometry), ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT 'TIN ZM ( ((0 0 0 0, 0 0 1 0, 0 1 0 4, 0 0 0 0)), ((0 0 0 1, 0 1 0 2, 1 1 0 3, 0 0 0 1)) )' ::text as g ) as foo; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/remove_repeated_points.sql������������������������������������������0000644�0000000�0000000�00000005063�11722777314�022534� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT 0, ST_AsText(ST_RemoveRepeatedPoints('GEOMETRYCOLLECTION EMPTY')); SELECT 1, ST_AsText(ST_RemoveRepeatedPoints('LINESTRING(0 0, 1 1, 1 1, 2 2)')); SELECT 2, ST_AsText(ST_RemoveRepeatedPoints('LINESTRING(0 0, 1 1, 1 1, 2 2, 2 2, 2 2, 2 2, 3 3, 3 3)')); SELECT 3, ST_AsText(ST_RemoveRepeatedPoints('MULTILINESTRING((0 0, 1 1, 1 1, 2 2, 2 2, 2 2, 2 2, 3 3, 3 3),(5 5, 5 5, 5 5, 4 4, 2 2))')); SELECT 4, ST_AsText(ST_RemoveRepeatedPoints('POLYGON((0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0),(5 5, 5 5, 5 8, 8 8, 8 8, 8 8, 8 5,8 5, 5 5, 5 5, 5 5, 5 5, 5 5))')); SELECT 5, ST_AsText(ST_RemoveRepeatedPoints('MULTIPOLYGON(((0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0),(5 5, 5 5, 5 8, 8 8, 8 8, 8 8, 8 5,8 5, 5 5, 5 5, 5 5, 5 5, 5 5)),((50 50, 50 50, 50 50, 50 60, 50 60, 50 60, 60 60, 60 50, 60 50, 50 50),(55 55, 55 58, 58 58, 58 55, 58 55, 55 55)))')); SELECT 6, ST_AsText(ST_RemoveRepeatedPoints('MULTIPOINT(0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0,5 5, 5 5, 5 8, 8 8, 8 8, 8 8, 8 5,8 5, 5 5, 5 5, 5 5, 5 5, 5 5,50 50, 50 50, 50 50, 50 60, 50 60, 50 60, 60 60, 60 50, 60 50, 50 50,55 55, 55 58, 58 58, 58 55, 58 55, 55 55)')); SELECT 7, ST_AsText(ST_RemoveRepeatedPoints('GEOMETRYCOLLECTION(MULTIPOINT(0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0,5 5, 5 5, 5 8, 8 8, 8 8, 8 8, 8 5,8 5, 5 5, 5 5, 5 5, 5 5, 5 5,50 50, 50 50, 50 50, 50 60, 50 60, 50 60, 60 60, 60 50, 60 50, 50 50,55 55, 55 58, 58 58, 58 55, 58 55, 55 55),MULTIPOLYGON(((0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0),(5 5, 5 5, 5 8, 8 8, 8 8, 8 8, 8 5,8 5, 5 5, 5 5, 5 5, 5 5, 5 5)),((50 50, 50 50, 50 50, 50 60, 50 60, 50 60, 60 60, 60 50, 60 50, 50 50),(55 55, 55 58, 58 58, 58 55, 58 55, 55 55))))')); SELECT 8, ST_AsText(ST_RemoveRepeatedPoints('POINT(0 0)')); SELECT 9, ST_AsText(ST_RemoveRepeatedPoints('CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2))')); SELECT 10, ST_AsText(ST_RemoveRepeatedPoints('LINESTRING(0 0, 0 0)')); SELECT 11, ST_AsText(ST_RemoveRepeatedPoints('LINESTRING(0 0, 0 0, 0 0, 0 0, 0 0)')); SELECT 12, ST_SRID(ST_RemoveRepeatedPoints('SRID=3;LINESTRING(0 0, 0 0, 0 0, 0 0, 0 0)')); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/isvaliddetail_expected����������������������������������������������0000644�0000000�0000000�00000000352�11722777314�021667� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|t|| 2|f|Too few points in geometry component|POINT(70 250) 3|f|Self-intersection|POINT(70 400) 4|f|Self-intersection|POINT(70 400) 5|f|Ring Self-intersection|POINT(70 250) 5s|f 5r|Ring Self-intersection 6|t|| 6s|t 5r|Valid Geometry ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/relate_expected�����������������������������������������������������0000644�0000000�0000000�00000016756�11722777314�020344� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|FF2FF1212 2|2FFF1FFF2 3|212FF1FF2 4|2121F12F2 5|2121F1212 6|212101212 7|212101212 8|212101212 9|21210F212 10|2121012F2 11|FF2F11212 12|FF2F01212 13|21210F212 14|1010F0212 15|1010F0212 16|10F0FF212 17|F01FF0212 18|101FF0212 19|F01FF0212 20|101FF0212 21|1010FF212 22|1010FF212 23|10F0FF212 24|101FFF212 25|1FFFFFFF2 26|1FF0FF212 27|11F00F212 28|10FF0FFF2 29|FF1FF0102 30|FF1FF0102 31|FF1FF01F2 32|FF1FF01F2 33|1FFF0FFF2 34|1FFF0FFF2 35|1FFF0FFF2 36|10F00FFF2 37|1FFFFFFF2 38|10FF0FFF2 39|0F1FF0102 40|0F1FF0102 41|FF10F0102 42|FF10F0102 43|F01FF0102 44|1F1F00102 45|1FFF0F1F2 46|101FFF102 47|101FF0FF2 48|FF0FFF212 49|0F0FFF212 50|F00FFF212 51|00FFFF212 52|000FFF212 53|F0FFFF212 54|FF0FFF102 55|F0FFFF102 56|0FFFFF102 57|F00FFF102 58|00FFFF102 59|0F0FFF102 60|0F0FFF102 61|0F0FFF102 62|0FFFFFFF2 63|FF0FFF0F2 64|0F0FFF0F2 65|0FFFFFFF2 66|212111212 67|212111212 68|2FFF1FFF2 69|2FFF1FFF2 70|2FFF1FFF2 71|2FFF1FFF2 72|FF2FF1212 73|FF2F01212 74|FF2F01212 75|FF2F01212 76|FF2F01212 77|FF2F01212 78|FF2F01212 79|FF2F01212 80|FF2F01212 81|FF2F01212 82|FF2F01212 83|FF2F01212 84|FF2F01212 85|FF2F01212 86|FF2F01212 87|FF2F01212 88|FF2F01212 89|FF2F11212 90|FF2F11212 91|FF2F11212 92|FF2F11212 93|FF2F11212 94|FF2F11212 95|FF2F11212 96|FF2F11212 97|FF2F11212 98|FF2F11212 99|212FF1FF2 100|212F01FF2 101|212F01FF2 102|212F01FF2 103|212F01FF2 104|212F01FF2 105|212F01FF2 106|212F01FF2 107|212F01FF2 108|212F01FF2 109|212F01FF2 110|212F01FF2 111|212F01FF2 112|212F11FF2 113|212F11FF2 114|212F11FF2 115|212F11FF2 116|212F11FF2 117|212F11FF2 118|212F11FF2 119|212F11FF2 120|212F11FF2 121|212111212 122|212111212 123|212101212 124|212111212 125|212101212 126|212101212 127|212101212 128|212101212 129|212101212 130|212101212 131|212101212 132|212101212 133|212101212 134|212111212 135|212111212 136|212111212 137|212111212 138|212111212 139|212111212 140|212111212 141|212111212 142|212111212 143|212101212 144|212111212 145|212101212 146|FF2F01212 147|FF2F01212 148|FF2F01212 149|FF2F01212 150|FF2F01212 151|FF2F01212 152|FF2F01212 153|FF2F1F212 154|FF2F11212 155|FF2F11212 156|FF2F11212 157|2FF1FF212 158|2FF1FF212 159|2FF11F212 160|2FF11F212 161|2FF11F212 162|2FFF1FFF2 163|2FFF1FFF2 164|FF2F01212 165|FF2F01212 166|FF2F01212 167|FF2F01212 168|FF2F11212 169|FF2F11212 170|21210F212 171|FF2F01212 172|FF2F01212 173|FF2F11212 174|FF2F11212 175|FF2F11212 176|212111212 177|21210F212 178|FF1F00212 179|FF1F0F212 180|FF1F00212 181|F1FF0F212 182|F11F00212 183|F11F0F212 184|F11FF0212 185|1010F0212 186|101FF0212 187|1010F0212 188|101FF0212 189|1010F0212 190|101FF0212 191|1010F0212 192|1FF0FF212 193|1FFF0F212 194|1FF00F212 195|11F00F212 196|11F0FF212 197|FF1FF0212 198|FF1FF0212 199|FF1F00212 200|FF1F0F212 201|F01FF0212 202|F01FF0212 203|F01FF0212 204|F01FF0212 205|F01FF0212 206|F01FF0212 207|F01FF0212 208|F01FF0212 209|FF1F00212 210|F01FF0212 211|F01FF0212 212|F01FF0212 213|F01FF0212 214|F01FF0212 215|F01FF0212 216|F01FF0212 217|1010FF212 218|1010FF212 219|10F0FF212 220|F01FFF212 221|F01FFF212 222|F01FFF212 223|F1FFFF2F2 224|F1FFFF212 225|F11FFF212 226|F11FFF212 227|101FFF212 228|101FFF212 229|1FFFFF212 230|1FFFFF212 231|10FFFF212 232|10FFFF212 233|11FFFF212 234|FF1F00212 235|FF1F00212 236|FF1F00212 237|FF1F00212 238|F11F00212 239|111F00212 240|1FF0FF212 241|11F00F212 242|F01FF0212 243|FF1F00212 244|FF1F00212 245|FF1F00212 246|1010F0212 247|1010F0212 248|1010F0212 249|1010F0212 250|1FF0FF212 251|11F00F212 252|FF1F00212 253|FF1F00212 254|FF1F00212 255|1FFFFFFF2 256|1FF0FF212 257|11F00F212 258|10FF0FFF2 259|FF1F00102 260|FF1F00102 261|F01FF0102 262|FF1F00102 263|F01FF0102 264|0F1FF0102 265|1FFF0FFF2 266|1FFF0FFF2 267|FF1FF0102 268|1FFF0FFF2 269|101F00FF2 270|101FF0FF2 271|1010F0102 272|1010F0102 273|1010F0102 274|FF1F00102 275|FF1F00102 276|FF1F00102 277|FF10FF102 278|FF10FF102 279|FF1F0F1F2 280|FF1F0F1F2 281|F01FF0102 282|F01FF0102 283|F01FF01F2 284|F010F0102 285|F01FF0102 286|F01FF0102 287|F01FF01F2 288|0F1F00102 289|0F1F0F1F2 290|0F1F00102 291|0F1F0F1F2 292|0F10F0102 293|0F10F0102 294|0F100F102 295|0010F0102 296|0010F0102 297|0F10F0102 298|0F10F0102 299|0F10F0102 300|0F1FF0102 301|0F1FF0102 302|0F1FF0102 303|0F1FF0102 304|0F1FF0102 305|0F1FF0102 306|001FF0102 307|1FFF0FFF2 308|1FFF0FFF2 309|1FFF0FFF2 310|FF1FF0102 311|FF1FF0102 312|1FFF0FFF2 313|1FFF0FFF2 314|101F00FF2 315|101FF0FF2 316|101FF0FF2 317|101FF0FF2 318|1010F0102 319|1F1F00102 320|1F1F00102 321|1010F0102 322|1010F0102 323|1F1F00102 324|1F1FF0102 325|101FF0102 326|101FF0102 327|1F1FF0102 328|1F1FF0102 329|FF10F01F2 330|0F1FF01F2 331|0F1FF01F2 332|0F1FF01F2 333|1FF0FF1F2 334|1FF0FF1F2 335|1FF0FF1F2 336|1F10F01F2 337|1F10F01F2 338|1F1FF01F2 339|F01FF0102 340|F01FF0102 341|F01FF0102 342|0F1FF01F2 343|0F1FF01F2 344|0F1FF01F2 345|0F1FF0102 346|0F1FF0102 347|0F1FF01F2 348|0F1FF0102 349|0F1FF0102 350|0F1FF0102 351|0F1FF01F2 352|0F1FF0102 353|FF1F00102 354|F01FF0102 355|F01FF0102 356|F01FF0102 357|0F1FF0102 358|FF1F00102 359|FF1F00102 360|F01FF0102 361|FF10F0102 362|101FF0102 363|101FF0102 364|FF10F0102 365|1FFFFFFF2 366|1FFFFFFF2 367|1FFFFFFF2 368|1FFFFFFF2 369|0F1FFF1F2 370|0F1FFF1F2 371|0F1FFF1F2 372|0F1FFF1F2 373|0F1FFF1F2 374|0F1FFF1F2 375|1F1FFF1F2 376|1F1FFF1F2 377|1F1FFF1F2 378|F01FFF102 379|F01FFF102 380|F01FFF102 381|101FFF102 382|101FFF1F2 383|0F1FFF1F2 384|0F1FFF1F2 385|0F1FFF1F2 386|0F1FFF1F2 387|0F1FFF1F2 388|0F1FFF1F2 389|1FFFFFFF2 390|1FFF0FFF2 391|1FFF0FFF2 392|FF1F00102 393|FF1F00102 394|FF1F00102 395|FF10F0102 396|FF10F0102 397|FF10F0102 398|FF10F0102 399|FF10F0102 400|0F1FF0102 401|0F1FF0102 402|0F1FF0102 403|FF0FFF212 404|FF0FFF212 405|FF0FFF212 406|FF0FFF212 407|FF0FFF212 408|F0FFFF212 409|F0FFFF212 410|F0FFFF212 411|F0FFFF212 412|0FFFFF212 413|FF0FFF212 414|FF0FFF212 415|F0FFFF212 416|F0FFFF212 417|F0FFFF212 418|F0FFFF212 419|F0FFFF212 420|F0FFFF212 421|0FFFFF212 422|F0FFFF212 423|F0FFFF212 424|FF0FFF212 425|F00FFF212 426|F00FFF212 427|F00FFF212 428|F00FFF212 429|F0FFFF212 430|F0FFFF212 431|000FFF212 432|000FFF212 433|000FFF212 434|0F0FFF212 435|000FFF212 436|0FFFFF212 437|00FFFF212 438|FF0FFF212 439|FF0FFF212 440|FF0FFF212 441|F0FFFF212 442|F0FFFF212 443|F0FFFF212 444|F0FFFF212 445|FF0FFF102 446|F0FFFF102 447|F0FFFF102 448|0FFFFF102 449|0FFFFF102 450|FF0FFF1F2 451|FF0FFF1F2 452|0FFFFF1F2 453|0FFFFF1F2 454|0FFFFF1F2 455|F0FFFF102 456|F0FFFF102 457|F0FFFF102 458|0FFFFF102 459|0FFFFF102 460|0FFFFF102 461|0FFFFF102 462|0FFFFF102 463|F0FFFF102 464|0FFFFF102 465|0FFFFF102 466|0FFFFF102 467|0FFFFF102 468|0FFFFF102 469|0FFFFF102 470|0FFFFF102 471|0FFFFF102 472|F0FFFF102 473|F0FFFF102 474|F0FFFF102 475|F0FFFF102 476|F0FFFF102 477|F0FFFF102 478|F0FFFF102 479|F0FFFF102 480|F0FFFF102 481|F0FFFF102 482|F0FFFF102 483|F0FFFF102 484|F0FFFF102 485|F0FFFF102 486|F0FFFF102 487|F0FFFF102 488|F0FFFF102 489|0FFFFF1F2 490|0FFFFF1F2 491|0FFFFF1F2 492|0FFFFF1F2 493|0FFFFF1F2 494|0FFFFF1F2 495|0FFFFF1F2 496|F0FFFF102 497|0FFFFF102 498|F0FFFF102 499|0FFFFF102 500|F0FFFF102 501|0FFFFF102 502|F0FFFF102 503|0FFFFF102 504|0FFFFF1F2 505|0FFFFF1F2 506|0FFFFF1F2 507|0FFFFF1F2 508|0FFFFF1F2 509|0FFFFF1F2 510|0FFFFF1F2 511|0FFFFF1F2 512|0FFFFF1F2 513|0FFFFF1F2 514|0FFFFF1F2 515|0FFFFF1F2 516|0FFFFF1F2 517|0FFFFF1F2 518|F0FFFF102 519|0FFFFF102 520|0FFFFF102 521|0FFFFF1F2 522|0FFFFF1F2 523|0FFFFF1F2 524|0FFFFF102 525|0FFFFF102 526|0FFFFF102 527|FF0FFF102 528|FF0FFF102 529|F00FFF102 530|F00FFF102 531|0F0FFF102 532|0F0FFF102 533|0F0FFF102 534|0F0FFF102 535|00FFFF1F2 536|00FFFF102 537|00FFFF102 538|00FFFF102 539|0FFFFF102 540|0FFFFF102 541|0FFFFF102 542|00FFFF102 543|0FFFFFFF2 544|FF0FFF0F2 545|FF0FFF0F2 546|0FFFFF0F2 547|0FFFFFFF2 548|0FFFFFFF2 549|FF0FFF0F2 550|0FFFFFFF2 551|0FFFFFFF2 552|0F0FFFFF2 553|0F0FFFFF2 554|0F0FFF0F2 555|0F0FFF0F2 ������������������postgis-2.1.2+dfsg.orig/regress/geography_expected��������������������������������������������������0000644�0000000�0000000�00000001060�11777341326�021033� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������geog_distance_cached_1a|t geog_distance_cached_1b|t geog_distance_cached_1c|t geog_distance_cached_1e|t geog_distance_cached_1f|t geog_distance_cached_1g|t geog_distance_cached_1h|t geog_dithin_cached_1a|t geog_dithin_cached_1b|t geog_dithin_cached_1c|t geog_dithin_cached_2a|f geog_dithin_cached_2b|f geog_dithin_cached_2c|f geog_dithin_cached_3a|t geog_dithin_cached_3b|t geog_dithin_cached_3c|t geog_precision_savffir|0|0 geog_precision_savffir|0|0 geog_precision_savffir|0|0 geog_precision_savffir|0|0 geog_precision_pazafir|0|0 geog_precision_pazafir|0|0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/out_geometry_expected�����������������������������������������������0000644�0000000�0000000�00000014217�12031354162�021562� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gml_empty_geom| gml_precision_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point> gml_precision_02|<gml:Point srsName="EPSG:4326"><gml:coordinates>1.1111111,1.1111111</gml:coordinates></gml:Point> gml_version_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point> gml_version_02|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point> ERROR: Only GML 2 and GML 3 are supported ERROR: Only GML 2 and GML 3 are supported gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point> gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point> gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 1</gml:pos></gml:Point> gml_deegree_01|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point> gml_deegree_02|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point> gml_deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point> gml_deegree_04|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="3">1 2 3</gml:pos></gml:Point> gml_deegree_05|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2,3</gml:coordinates></gml:Point> gml_deegree_06|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="3">2 1 3</gml:pos></gml:Point> gml_prefix_01|<Point srsName="EPSG:4326"><coordinates>1,2</coordinates></Point> gml_prefix_02|<Point srsName="EPSG:4326"><pos srsDimension="2">2 1</pos></Point> gml_prefix_03|<foo:Point srsName="EPSG:4326"><foo:coordinates>1,2</foo:coordinates></foo:Point> gml_prefix_04|<foo:Point srsName="EPSG:4326"><foo:pos srsDimension="2">2 1</foo:pos></foo:Point> gml_shortline_01|<LineString><posList>1 2 3 4</posList></LineString> gml_shortline_02|<Curve><segments><LineStringSegment><posList>1 2 3 4</posList></LineStringSegment></segments></Curve> gml_shortline_03|<MultiCurve><curveMember><LineString><posList>1 2 3 4</posList></LineString></curveMember><curveMember><LineString><posList>5 6 7 8</posList></LineString></curveMember></MultiCurve> gml_shortline_04|<MultiCurve><curveMember><Curve><segments><LineStringSegment><posList>1 2 3 4</posList></LineStringSegment></segments></Curve></curveMember><curveMember><Curve><segments><LineStringSegment><posList>5 6 7 8</posList></LineStringSegment></segments></Curve></curveMember></MultiCurve> ERROR: GetProj4StringSPI: Cannot find SRID (10) in spatial_ref_sys ERROR: Input geometry has unknown (0) SRID kml_empty_geom| kml_precision_01|<Point><coordinates>1,1</coordinates></Point> kml_precision_02|<Point><coordinates>1.1111111,1.1111111</coordinates></Point> kml_version_01|<Point><coordinates>1,1</coordinates></Point> ERROR: Only KML 2 is supported ERROR: Only KML 2 is supported kml_prefix_01|<Point><coordinates>1,2</coordinates></Point> kml_prefix_02|<kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point> kml_projection_01|<Point><coordinates>-74.078,4.596</coordinates></Point> svg_empty_geom| svg_option_01|M 1 -1 L 4 -4 5 -7 svg_option_02|M 1 -1 l 3 -3 1 -3 svg_option_03|M 1 -1 L 4 -4 5 -7 svg_option_04|M 1 -1 l 3 -3 1 -3 svg_precision_01|x="1" y="-1" svg_precision_02|x="1.1111111" y="-1.1111111" geojson_empty_geom| geojson_precision_01|{"type":"Point","coordinates":[1,1]} geojson_precision_02|{"type":"Point","coordinates":[1.1111111,1.1111111]} geojson_version_01|{"type":"Point","coordinates":[1,1]} ERROR: Only GeoJSON 1 is supported ERROR: Only GeoJSON 1 is supported geojson_crs_01|{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[1,1]} geojson_crs_02|{"type":"Point","coordinates":[1,1]} geojson_crs_03|{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[1,1]} geojson_crs_04|{"type":"Point","coordinates":[1,1]} ERROR: SRID 1 unknown in spatial_ref_sys table ERROR: SRID 1 unknown in spatial_ref_sys table geojson_bbox_01|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_bbox_02|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_bbox_03|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_bbox_04|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_01|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_02|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_03|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_04|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_05|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_06|{"type":"LineString","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_07|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_08|{"type":"LineString","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_09|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_10|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_11|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_12|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_13|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_14|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_15|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_16|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} pgcast_01|t pgcast_02|t pgcast_03|t pgcast_03|t pgcast_04|t pgcast_05|t pgcast_06|POLYGON((0 0,0 1,1 1,1 0,0 0)) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_ogc_expected������������������������������������������������0000644�0000000�0000000�00000003571�12116367152�021352� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������buffer|POLYGON((1 0,0.707107 -0.707107,0 -1,-0.707107 -0.707107,-1 0,-0.707107 0.707107,0 1,0.707107 0.707107,1 0)) geomunion|MULTIPOINT(0 0,1 1) convexhull|POLYGON((0 0,0 10,10 10,10 0,0 0)) relate|F0FFFF102 relate|t relate|f disjoint|f touches|t intersects|t crosses|f crosses|t within100|t within101|f within102|f within103|f within104|f within105|t within106|t disjoint100|f disjoint101|f disjoint102|t disjoint103|f disjoint104|t disjoint105|f disjoint106|t disjoint150|f disjoint151|f disjoint152|t disjoint153|f disjoint154|t disjoint155|f disjoint156|t intersects100|t intersects101|t intersects102|f intersects103|t intersects104|f intersects105|t intersects106|f intersects150|t intersects151|t intersects152|f intersects153|t intersects154|f intersects155|t intersects156|f contains100|t contains101|f contains102|f contains103|f contains104|f contains105|t contains106|t within119|f within120|f contains110|t contains111|f within130|t within131|f overlaps|f isvalid|t NOTICE: Self-intersection isvalid|f isvalid|t intersection|POINT(0 0) difference|MULTILINESTRING((0 10,0 2),(0 -2,0 -10)) boundary|MULTILINESTRING((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2)) symdifference|GEOMETRYCOLLECTION(LINESTRING(2 2,4 4),LINESTRING(10 10,20 20),POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,2 4,2 2,4 2,4 4))) issimple|t equals|t pointonsurface|t centroid|POINT(5.08333333333333 5.08333333333333) exteriorring|LINESTRING(52 18,66 23,73 9,48 6,52 18) polygonize_garray|GEOMETRYCOLLECTION EMPTY polygonize_garray|POLYGON((10 0,0 0,0 10,10 10,10 0)) linemerge149|LINESTRING(-5 -5,0 0,1 1,4 4) intersects|f ST_GeometryN|LINESTRING(0 0,1 1) ST_NumGeometries|1 ST_Union1|POLYGON((0 0,0 1,0.5 1,0.5 1.5,1.5 1.5,1.5 0.5,1 0.5,1 0,0 0)) ST_StartPoint1|POINT(0 0) ST_EndPoint1|POINT(2 2) ST_PointN1|POINT(1 1) ST_PointN2|POINT(2 2) ST_PointN3| ST_PointN4| ST_PointN5|POINT(0 0) ST_PointN6| ST_Buffer(empty)|POLYGON EMPTY ���������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/iscollection.sql����������������������������������������������������0000644�0000000�0000000�00000002673�11722777314�020465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Ensure there are no false-positives SELECT 'point', ST_IsCollection('POINT(42 42)'); SELECT 'poly', ST_IsCollection('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); SELECT 'line', ST_IsCollection('LINESTRING(0 0, 10 10)'); -- PostGIS doesn't support typed empties... --SELECT 'empty point', ST_IsCollection('POINT EMPTY'); --SELECT 'empty poly', ST_IsCollection('POLYGON EMPTY'); --SELECT 'empty line', ST_IsCollection('LINESTRING EMPTY'); --Ensure that all collections return true (even if they contain a single geometry). SELECT 'empty multipoint', ST_IsCollection('MULTIPOINT EMPTY'); SELECT 'multipoint', ST_IsCollection('MULTIPOINT((0 0))'); SELECT 'multipoint+', ST_IsCollection('MULTIPOINT((0 0), (42 42))'); SELECT 'empty multiline', ST_IsCollection('MULTILINESTRING EMPTY'); SELECT 'multiline', ST_IsCollection('MULTILINESTRING((0 0, 10 10))'); SELECT 'multiline+', ST_IsCollection('MULTILINESTRING((0 0, 10 10), (100 100, 142 142))'); SELECT 'empty multipoly', ST_IsCollection('MULTIPOLYGON EMPTY'); SELECT 'multipoly', ST_IsCollection('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))'); SELECT 'multipoly+', ST_IsCollection('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((100 100, 110 100, 110 110, 100 110, 100 100)))'); SELECT 'empty collection', ST_IsCollection('GEOMETRYCOLLECTION EMPTY'); SELECT 'collection', ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'); SELECT 'collection+', ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0), POINT(42 42))'); ���������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/measures_expected���������������������������������������������������0000644�0000000�0000000�00000004454�11722777314�020704� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������113|291 114|140 115|140 116|4.24264068711929 117|4.24264068711929 118|5.19615242270663 134|0 135|13 136|13 dist|1|1 #1502|t st_shortestline_134|LINESTRING(1 2,1 2) st_shortestline_135|LINESTRING(5 0,10 12) st_shortestline_136|LINESTRING(0 0,5 12) st_shortestline_dist|LINESTRING(10 0,11 0)|LINESTRING(11 0,10 0) st_maxdistance_134|0 st_maxdistance_135|13 st_maxdistance_136|13 st_maxdistance_dist|22.3606797749979|22.3606797749979 st_longestline_134|LINESTRING(1 2,1 2) st_longestline_135|LINESTRING(5 0,10 12) st_longestline_136|LINESTRING(0 0,5 12) st_longestline_dist|LINESTRING(0 0,20 10)|LINESTRING(20 10,0 0) distancetest1|1|50|LINESTRING(17 18,17 19)|LINESTRING(17 19,17 18)|LINESTRING(29 39,-1 -1)|LINESTRING(-1 -1,29 39) distancetest2|0|50|0.0000000000|0.0000000000|0.0000000000|0.0000000000|LINESTRING(-40 -20,-10 20)|LINESTRING(-10 20,-40 -20) distancepoly1|1|50|LINESTRING(17 18,17 19)|LINESTRING(17 19,17 18)|LINESTRING(29 39,-1 -1)|LINESTRING(-1 -1,29 39) distancepoly2|0|26.1725046566048|LINESTRING(17 14,17 14)|LINESTRING(17 14,17 14)|LINESTRING(17 18,-1 -1)|LINESTRING(-1 -1,17 18) distancepoly3|0|26.9072480941474|LINESTRING(17 19,17 19)|LINESTRING(17 19,17 19)|LINESTRING(17 19,-1 -1)|LINESTRING(-1 -1,17 19) distancepoly4|0|28.3196045170126|LINESTRING(16 19,16 19)|LINESTRING(16 19,16 19)|LINESTRING(18 20,-1 -1)|LINESTRING(-1 -1,18 20) distancepoly5|0|26.1725046566048|LINESTRING(17 12,17 12)|LINESTRING(17 12,17 12)|LINESTRING(17 18,-1 -1)|LINESTRING(-1 -1,17 18) distancepoly6|0|32.5269119345812|LINESTRING(2 2,2 2)|LINESTRING(2 2,2 2)|LINESTRING(2 2,25 25)|LINESTRING(25 25,2 2) 3dDistancetest1|6.40312423743285|6.40312423743285|f|f|LINESTRING(1 1 1,3 2 7)|POINT(1 1 1)|LINESTRING(1 1 1,3 2 7) 3dDistancetest2|0|1.73205080756888|t|t|LINESTRING(1 1 1,1 1 1)|POINT(1 1 1)|LINESTRING(1 1 1,0 0 0) 3dDistancetest3|4.09994192757944|6.48074069840786|t|f|LINESTRING(1 1 1,0.61904761904762 -0.19047619047619 4.90476190476191)|POINT(1 1 1)|LINESTRING(1 1 1,5 2 6) 3dDistancetest4|2|10.0498756211209|t|f|LINESTRING(1 1 3,1 1 1)|POINT(1 1 3)|LINESTRING(5 7 8,1 1 1) 3dDistancetest5|2|10|t|f|LINESTRING(5 0 5,5 2 5)|POINT(5 0 5)|LINESTRING(11 0 5,5 0 13) 3dDistancetest6|0 emptyPolyArea|0 emptyLineArea|0 emptyPointArea|0 emptyMultiPolyArea|0 emptyMultiLineArea|0 emptyMultiPointArea|0 emptyCollectionArea|0 spheroidLength1|85204.52077 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_kml_expected�����������������������������������������������������0000644�0000000�0000000�00000007614�12163313207�020315� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������empty_geom| ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation point_1|SRID=4326;POINT(1 2) point_1a|SRID=4326;POINT(1 2) point_1b|SRID=4326;POINT(1 2) point_1c|SRID=4326;POINT(1 2) point_1d|SRID=4326;POINT(1 2) ERROR: invalid KML representation ERROR: invalid KML representation linestring_1|SRID=4326;LINESTRING(1 2,3 4) ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation linestring_5|SRID=4326;LINESTRING(1 2,3 4) polygon_1|SRID=4326;POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation polygon_9|SRID=4326;POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)) polygon_10|SRID=4326;POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)) polygon_11|SRID=4326;POLYGON((1 2,3 4,5 6,1 2)) ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation polygon_15|SRID=4326;POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8),(13 14,15 16,17 18,13 14)) multi_7|SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6),POLYGON((7 8,9 10,11 12,7 8))) multi_8|SRID=4326;GEOMETRYCOLLECTION EMPTY multi_9|SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6),POLYGON((7 8,9 10,11 12,7 8))) multi_10|SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6),POLYGON((7 8,9 10,11 12,7 8))) ns_1|SRID=4326;POINT(1 2) ns_2|SRID=4326;POINT(1 2) ERROR: invalid KML representation ns_4|SRID=4326;POINT(1 2) ns_5|SRID=4326;POINT(1 2) coordinates_1|SRID=4326;POINT(1 2) ERROR: invalid KML representation coordinates_3|SRID=4326;POINT(1 2 3) ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation coordinates_12|SRID=4326;LINESTRING(1 2,3 4) coordinates_13|SRID=4326;LINESTRING(1 2,3 4) coordinates_14|SRID=4326;LINESTRING(1 2,3 4) coordinates_15|SRID=4326;LINESTRING(1 2,3 4) coordinates_16|SRID=4326;LINESTRING(1 2,3 4) ERROR: invalid KML representation kml_1|SRID=4326;POINT(1 2) kml_2|SRID=4326;POINT(1 2 3) kml_3|SRID=4326;LINESTRING(1 2,3 4) kml_4|SRID=4326;LINESTRING(1 2 3,4 5 6) kml_5|SRID=4326;POLYGON((1 2,3 4,5 6,1 2)) kml_6|SRID=4326;POLYGON((1 2 3,4 5 6,7 8 9,1 2 3)) kml_7|SRID=4326;MULTIPOINT(1 2,3 4) kml_8|SRID=4326;MULTIPOINT(1 2 3,4 5 6) kml_9|SRID=4326;MULTILINESTRING((1 2,3 4),(5 6,7 8)) kml_10|SRID=4326;MULTILINESTRING((1 2 3,4 5 6),(7 8 9,10 11 12)) kml_11|SRID=4326;MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))) kml_12|SRID=4326;MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12))) double_1|SRID=4326;POINT(1 1234567890) double_2|SRID=4326;POINT(1 -1) double_3|SRID=4326;POINT(1 1) ERROR: invalid KML representation ERROR: invalid KML representation double_6|SRID=4326;POINT(1 1.2) double_7|SRID=4326;POINT(1 1.23) double_8|SRID=4326;POINT(1 1) ERROR: invalid KML representation double_10|SRID=4326;POINT(1 0.1) double_11|SRID=4326;POINT(1 -0.1) ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation double_15|SRID=4326;POINT(1 100) double_16|SRID=4326;POINT(1 100) double_17|SRID=4326;POINT(1 0.01) double_18|SRID=4326;POINT(1 0.01) double_19|SRID=4326;POINT(1 123) double_20|SRID=4326;POINT(1 123) double_21|SRID=4326;POINT(1 -123) ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ��������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_kml.sql����������������������������������������������������������0000644�0000000�0000000�00000046621�12163313207�017233� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- GeomFromKML regression test -- Written by Olivier Courtin - Oslandia -- -- -- spatial_ref_sys datas -- -- EPSG 4326 : WGS 84 INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4326,'EPSG',4326,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); -- Empty Geometry SELECT 'empty_geom', ST_AsEWKT(ST_GeomFromKML(NULL)); -- -- XML -- -- ERROR: Empty String SELECT 'xml_1', ST_AsEWKT(ST_GeomFromKML('')); -- ERROR: Not well formed XML SELECT 'xml_2', ST_AsEWKT(ST_GeomFromKML('<foo>')); -- ERROR: Not a KML Geometry SELECT 'xml_3', ST_AsEWKT(ST_GeomFromKML('<foo/>')); -- -- Point -- -- 1 Point SELECT 'point_1', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- See http://trac.osgeo.org/postgis/ticket/2372 SELECT 'point_1a', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1 ,2</kml:coordinates></kml:Point>')); SELECT 'point_1b', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1, 2</kml:coordinates></kml:Point>')); SELECT 'point_1c', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates> 1,2</kml:coordinates></kml:Point>')); SELECT 'point_1d', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates> 1,2 </kml:coordinates></kml:Point>')); -- ERROR: 2 points SELECT 'point_error_1', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2 3,4</kml:coordinates></kml:Point>')); -- ERROR: empty point SELECT 'point_error_2', ST_AsEWKT(ST_GeomFromKML('<kml:Point></kml:Point>')); -- -- LineString -- -- 2 Points SELECT 'linestring_1', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates>1,2 3,4</kml:coordinates></kml:LineString>')); -- ERROR 1 Point SELECT 'linestring_2', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates>1,2</kml:coordinates></kml:LineString>')); -- ERROR: empty coordinates SELECT 'linestring_3', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates></kml:coordinates></kml:LineString>')); SELECT 'linestring_4', ST_AsEWKT(ST_GeomFromKML('<kml:LineString></kml:LineString>')); -- XML not elements handle SELECT 'linestring_5', ST_AsEWKT(ST_GeomFromKML(' <!-- --> <kml:LineString> <!-- --> <kml:coordinates>1,2 3,4</kml:coordinates></kml:LineString>')); -- -- Polygon -- -- 1 ring SELECT 'polygon_1', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>')); -- ERROR: In exterior ring: Last point is not the same as the first one SELECT 'polygon_2', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,3</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>')); -- ERROR: In exterior 3D ring: Last point is not the same as the first one in Z SELECT 'polygon_3', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2,3 4,5,6 7,8,9 1,2,0</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>')); -- ERROR: Only 3 points in exterior ring SELECT 'polygon_4', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>')); -- ERROR: Empty exterior ring coordinates SELECT 'polygon_5', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates></kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>')); SELECT 'polygon_6', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>')); SELECT 'polygon_7', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs></kml:outerBoundaryIs></kml:Polygon>')); SELECT 'polygon_8', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon></kml:Polygon>')); -- 2 rings SELECT 'polygon_9', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,8</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>')); -- XML not elements handle SELECT 'polygon_10', ST_AsEWKT(ST_GeomFromKML(' <!-- --> <kml:Polygon> <!-- --> <kml:outerBoundaryIs> <!-- --> <kml:LinearRing> <!-- --> <kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs> <!-- --> <kml:innerBoundaryIs> <!-- --> <kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,8</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>')); -- Empty interior ring coordinates (even if defined) SELECT 'polygon_11', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs></kml:innerBoundaryIs></kml:Polygon>')); -- ERROR: Only 3 points in interior ring SELECT 'polygon_12', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 7,8</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>')); -- ERROR: In interior ring: Last point is not the same as the first one SELECT 'polygon_13', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,9</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>')); -- ERROR: In interior 3D ring: Last point is not the same as the first one in Z SELECT 'polygon_14', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2,3 4,5,6 7,8,9 1,2,3</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>10,11,12 13,14,15 16,17,18 10,11,0</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>')); -- 3 rings SELECT 'polygon_15', ST_AsEWKT(ST_GeomFromKML('<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,8</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>13,14 15,16 17,18 13,14</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>')); -- -- MultiGeometry -- -- 1 point --SELECT 'multi_1', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point></kml:MultiGeometry>')); -- 2 points --SELECT 'multi_2', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point><kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point></kml:MultiGeometry>')); -- 1 line --SELECT 'multi_3', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:LineString><kml:coordinates>1,2 3,4</kml:coordinates></kml:LineString></kml:MultiGeometry>')); -- 2 lines --SELECT 'multi_4', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:LineString><kml:coordinates>1,2 3,4</kml:coordinates></kml:LineString><kml:LineString><kml:coordinates>5,6 7,8</kml:coordinates></kml:LineString></kml:MultiGeometry>')); -- 1 polygon --SELECT 'multi_5', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon></kml:MultiGeometry>')); -- 2 polygons --SELECT 'multi_6', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>1,2 3,4 5,6 1,2</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,8</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon></kml:MultiGeometry>')); -- Point, LineString and Polygon SELECT 'multi_7', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point><kml:LineString><kml:coordinates>3,4 5,6</kml:coordinates></kml:LineString><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,8</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon></kml:MultiGeometry>')); -- Empty collection SELECT 'multi_8', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry></kml:MultiGeometry>')); -- Collection of collection SELECT 'multi_9', ST_AsEWKT(ST_GeomFromKML('<kml:MultiGeometry><kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point><kml:MultiGeometry><kml:LineString><kml:coordinates>3,4 5,6</kml:coordinates></kml:LineString><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,8</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon></kml:MultiGeometry></kml:MultiGeometry>')); -- XML not elements handle SELECT 'multi_10', ST_AsEWKT(ST_GeomFromKML(' <!-- --> <kml:MultiGeometry> <!-- --> <kml:Point> <!-- --> <kml:coordinates>1,2</kml:coordinates></kml:Point> <!-- --> <kml:LineString><kml:coordinates>3,4 5,6</kml:coordinates></kml:LineString> <!-- --> <kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>7,8 9,10 11,12 7,8</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon></kml:MultiGeometry>')); -- -- KML Namespace -- -- KML namespace SELECT 'ns_1', ST_AsEWKT(ST_GeomFromKML('<kml:Point xmlns:kml="http://www.opengis.net/kml/2.2"><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- KML namespace without explicit prefix SELECT 'ns_2', ST_AsEWKT(ST_GeomFromKML('<kml:Point xmlns="http://www.opengis.net/kml/2.2"><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- ERROR wrong namespace SELECT 'ns_3', ST_AsEWKT(ST_GeomFromKML('<kml:Point xmlns:kml="http://foo.net"><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- Several namespaces SELECT 'ns_4', ST_AsEWKT(ST_GeomFromKML('<kml:Point xmlns:foo="http://bar.net" xmlns:kml="http://www.opengis.net/kml/2.2"><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- Ignore other namespace element SELECT 'ns_5', ST_AsEWKT(ST_GeomFromKML('<kml:Point xmlns:foo="http://foo.net" xmlns:kml="http://www.opengis.net/kml/2.2"><kml:coordinates>1,2</kml:coordinates><foo:coordinates>3,4</foo:coordinates></kml:Point>')); -- Attribute without explicit namespace -- TODO SELECT 'ns_6', ST_AsEWKT(ST_GeomFromKML('<kml:Point altitudeMode="relative" xmlns:gml="http://www.opengis.net/gml"><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- Attribute with explicit KML namespace -- TODO SELECT 'ns_8', ST_AsEWKT(ST_GeomFromKML('<kml:Point kml:srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- Attribute with explicit prefix but unqualified namespace -- TODO SELECT 'ns_10', ST_AsEWKT(ST_GeomFromKML('<kml:Point foo:srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- Ignore other namespace attribute -- TODO SELECT 'ns_11', ST_AsEWKT(ST_GeomFromKML('<kml:Point foo:srsName="EPSG:4326" xmlns:foo="http://foo.net" xmlns:gml="http://www.opengis.net/gml"><kml:coordinates>1,2</kml:coordinates><foo:coordinates>3,4</foo:coordinates></kml:Point>')); -- -- Coordinates -- -- X,Y SELECT 'coordinates_1', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point>')); -- ERROR: single X SELECT 'coordinates_2', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1</kml:coordinates></kml:Point>')); -- X,Y,Z SELECT 'coordinates_3', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2,3</kml:coordinates></kml:Point>')); -- ERROR: 4 dimension SELECT 'coordinates_4', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2,3,4</kml:coordinates></kml:Point>')); -- ERROR: Only commas SELECT 'coordinates_5', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>,</kml:coordinates></kml:Point>')); SELECT 'coordinates_6', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates> , </kml:coordinates></kml:Point>')); -- ERROR: empty or spaces SELECT 'coordinates_7', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates></kml:coordinates></kml:Point>')); SELECT 'coordinates_8', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates> </kml:coordinates></kml:Point>')); -- ERROR: End on comma SELECT 'coordinates_9', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2,3,</kml:coordinates></kml:Point>')); SELECT 'coordinates_10', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2,</kml:coordinates></kml:Point>')); -- ERROR: Begin on comma SELECT 'coordinates_11', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates>,1 2,3</kml:coordinates></kml:LineString>')); -- Whitespaces before and after SELECT 'coordinates_12', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates> 1,2 3,4 </kml:coordinates></kml:LineString>')); SELECT 'coordinates_13', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates> 1,2 3,4 </kml:coordinates></kml:LineString>')); -- ERROR: Spaces insides SELECT 'coordinates_14', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates>1, 2 3, 4</kml:coordinates></kml:LineString>')); -- Several spaces as tuples separator SELECT 'coordinates_15', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates>1,2 3,4</kml:coordinates></kml:LineString>')); SELECT 'coordinates_16', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates> 1,2 3,4 </kml:coordinates></kml:LineString>')); -- ERROR: Junk SELECT 'coordinates_17', ST_AsEWKT(ST_GeomFromKML('<kml:LineString><kml:coordinates>!@#$%^*()"</kml:coordinates></kml:LineString>')); -- -- Bijective PostGIS KML test -- -- Point SELECT 'kml_1', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;POINT(1 2)')))); -- Point - 3D SELECT 'kml_2', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;POINT(1 2 3)')))); -- Linestring SELECT 'kml_3', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;LINESTRING(1 2,3 4)')))); -- Linestring - 3D SELECT 'kml_4', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;LINESTRING(1 2 3,4 5 6)')))); -- Polygon KML SELECT 'kml_5', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;POLYGON((1 2,3 4,5 6,1 2))')))); -- Polygon KML - 3D SELECT 'kml_6', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;POLYGON((1 2 3,4 5 6,7 8 9,1 2 3))')))); -- Multipoint SELECT 'kml_7', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;MULTIPOINT(1 2,3 4)')))); -- Multipoint - 3D SELECT 'kml_8', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;MULTIPOINT(1 2 3,4 5 6)')))); -- Multilinestring SELECT 'kml_9', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;MULTILINESTRING((1 2,3 4),(5 6,7 8))')))); -- Multilinestring - 3D SELECT 'kml_10', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;MULTILINESTRING((1 2 3,4 5 6),(7 8 9,10 11 12))')))); -- Multipolygon SELECT 'kml_11', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))')))); -- Multipolygon - 3D SELECT 'kml_12', ST_AsEWKT(ST_GeomFromKML(ST_AsKML(ST_AsEWKT('SRID=4326;MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3)),((10 11 12,13 14 15,16 17 18,10 11 12)))')))); -- -- Double -- -- Several digits SELECT 'double_1', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1234567890</kml:coordinates></kml:Point>')); -- Sign +/- SELECT 'double_2', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,-1</kml:coordinates></kml:Point>')); SELECT 'double_3', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,+1</kml:coordinates></kml:Point>')); -- ERROR: double sign SELECT 'double_4', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,--1</kml:coordinates></kml:Point>')); -- ERROR: sign inside digit SELECT 'double_5', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1-1</kml:coordinates></kml:Point>')); -- Decimal part SELECT 'double_6', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1.2</kml:coordinates></kml:Point>')); SELECT 'double_7', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1.23</kml:coordinates></kml:Point>')); -- no digit after dot SELECT 'double_8', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1.</kml:coordinates></kml:Point>')); -- ERROR: several dots SELECT 'double_9', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1.2.3</kml:coordinates></kml:Point>')); -- ERROR: no digit before dot SELECT 'double_10', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,.1</kml:coordinates></kml:Point>')); SELECT 'double_11', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,-.1</kml:coordinates></kml:Point>')); -- ERROR: not a digit SELECT 'double_12', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,a</kml:coordinates></kml:Point>')); SELECT 'double_13', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1a</kml:coordinates></kml:Point>')); SELECT 'double_14', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1a2</kml:coordinates></kml:Point>')); -- Exp SELECT 'double_15', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1e2</kml:coordinates></kml:Point>')); SELECT 'double_16', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1E+2</kml:coordinates></kml:Point>')); SELECT 'double_17', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1e-2</kml:coordinates></kml:Point>')); SELECT 'double_18', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1E-2</kml:coordinates></kml:Point>')); -- Exp with decimal parts SELECT 'double_19', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1.23E2</kml:coordinates></kml:Point>')); SELECT 'double_20', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1.23e2</kml:coordinates></kml:Point>')); SELECT 'double_21', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,-1.23E2</kml:coordinates></kml:Point>')); -- ERROR: no exp digit SELECT 'double_22', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1E</kml:coordinates></kml:Point>')); SELECT 'double_23', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1e</kml:coordinates></kml:Point>')); -- ERROR: dot inside exp digits SELECT 'double_24', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1e2.3</kml:coordinates></kml:Point>')); SELECT 'double_25', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,1E2.3</kml:coordinates></kml:Point>')); -- ERROR: spaces inside SELECT 'double_26', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,- 1.23</kml:coordinates></kml:Point>')); SELECT 'double_27', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,-1 .23</kml:coordinates></kml:Point>')); SELECT 'double_28', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,-1. 23</kml:coordinates></kml:Point>')); SELECT 'double_29', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,-1.23 E2</kml:coordinates></kml:Point>')); SELECT 'double_30', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,-1.23E 2</kml:coordinates></kml:Point>')); -- ERROR: Junk SELECT 'double_31', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,$0%@#$^%#</kml:coordinates></kml:Point>')); -- -- Delete inserted spatial data -- DELETE FROM spatial_ref_sys WHERE srid = 4326; ���������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/long_xact_expected��������������������������������������������������0000644�0000000�0000000�00000000727�11722777314�021035� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Long transactions support enabled 0 1 1 ERROR: UPDATE where "id" = '1' requires authorization 'auth1' BEGIN t COMMIT ERROR: UPDATE where "id" = '1' requires authorization 'auth1' BEGIN t COMMIT BEGIN t ERROR: UPDATE where "id" = '1' requires authorization 'auth1' COMMIT ERROR: UPDATE where "id" = '2' requires authorization 'auth2' ERROR: UPDATE where "id" = '1' requires authorization 'auth1' 3|nolocks 1|authorized 2|authorized Long transactions support disabled �����������������������������������������postgis-2.1.2+dfsg.orig/regress/boundary_expected���������������������������������������������������0000644�0000000�0000000�00000000220�12141503651�020651� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINT(1 1,-1 1) LINESTRING(1 1,0 0,-1 1,1 1) LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1) MULTIPOINT(-1 1 1,1 1 0.75) LINESTRING(1 1,0 0,-1 1,1 1) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_bdpoly_expected���������������������������������������������0000644�0000000�0000000�00000000556�11761546422�022077� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BuildArea|t BuildArea|t BuildArea|t BuildArea|t BuildArea|t BdMPolyFromText|t BdPolyFromText|t ERROR: Input is not a MultiLinestring ERROR: Input is not a MultiLinestring ERROR: Input returns more then a single polygon, try using BdMPolyFromText instead BdMPolyFromText|SRID=3;MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,4 4,2 4,2 2),(5 5,7 5,7 7,5 7,5 5))) ��������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_lrs.sql�����������������������������������������������������0000644�0000000�0000000�00000007477�12122364034�020321� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat all tests with the new function names. -- No M value select '2d',ST_AsText(ST_LocateAlong('POINT(1 2)', 1)); select '3dz',ST_AsText(ST_LocateAlong('POINT(1 2 3)', 1)); -- Points select 'PNTM_1',ST_AsText(ST_LocateAlong('POINTM(1 2 3)', 1)); select 'PNTM_2',ST_AsText(ST_LocateAlong('POINTM(1 2 3)', 3)); select 'PNTM_3',ST_AsText(ST_LocateBetween('POINTM(1 2 3)', 2, 3)); select 'PNTM_4',ST_AsText(ST_LocateBetween('POINTM(1 2 3)', 3, 4)); select 'PNTM_5',ST_AsText(ST_LocateBetween('POINTM(1 2 4.00001)', 3, 4)); -- Multipoints select 'MPNT_1',ST_AsText(ST_LocateBetween('MULTIPOINTM(1 2 2)', 2, 5)); select 'MPNT_2', ST_AsText(ST_LocateBetween('MULTIPOINTM(1 2 8, 2 2 5, 2 1 0)', 2, 5)); select 'MPNT_3', ST_AsText(ST_LocateBetween('MULTIPOINTM(1 2 8, 2 2 5.1, 2 1 0)', 2, 5)); select 'MPNT_4', ST_AsText(ST_LocateBetween('MULTIPOINTM(1 2 8, 2 2 5, 2 1 0)', 4, 8)); -- Linestrings select 'LINEZM_1', ST_AsText(ST_LocateBetween('LINESTRING(0 10 100 0, 0 0 0 10)', 2, 18)); select 'LINEZM_2', ST_AsText(ST_LocateBetween('LINESTRING(0 10 0 0, 0 0 100 10)', 2, 18)); select 'LINEZM_3', ST_AsText(ST_LocateBetween('LINESTRING(0 10 100 0, 0 0 0 10, 10 0 0 0)', 2, 18)); select 'LINEZM_4', ST_AsText(ST_LocateBetween('LINESTRING(0 10 100 0, 0 0 0 20, 10 0 0 0)', 2, 18)); select 'LINEZM_5', ST_AsText(ST_LocateBetween('LINESTRING(0 10 100 0, 0 0 0 20, 0 10 10 40, 10 0 0 0)', 2, 18)); select 'LINEZM_6', ST_AsText(ST_LocateBetween('LINESTRING(0 10 10 40, 10 0 0 0)', 2, 2)); --- line_locate_point SELECT 'line_locate_point_1', ST_LineLocatePoint('LINESTRING(709243.393033887 163969.752725768,708943.240904444 163974.593889146,708675.634380651 163981.832927298)', 'POINT(705780 15883)'); --- postgis-users/2006-January/010613.html select 'line_locate_point_2', ST_LineLocatePoint(ST_geomfromtext('LINESTRING(-1953743.873 471070.784,-1953735.105 471075.419,-1953720.034 471081.649)', 6269), ST_geomfromtext('POINT(-1953720.034 471081.649)', 6269)); select 'line_locate_point_3', ST_LineLocatePoint(ST_geomfromtext('LINESTRING(-1953743.873 471070.784,-1953735.105 471075.419,-1953720.034 471081.649)', 6269), ST_geomfromtext('POINT(-1953743.873 471070.784)', 6269)); --- http://trac.osgeo.org/postgis/ticket/1772#comment:2 select 'line_locate_point_4', ST_LineLocatePoint('LINESTRING(0 1, 0 1, 0 1)', 'POINT(0 1)'); --- line_substring / line_interpolate_point --- postgis-devel/2006-January/001951.html with substr as ( select ST_LineSubstring(ST_geomfromewkt('SRID=4326;LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 3 3 3 3, 4 4 4 4)'), 0.5, 0.8) as ln ) select 'line_substring_1', ST_SRID(ln), ST_AsText(ln) from substr; select 'line_substring_2', ST_AsText(ST_LineSubstring('LINESTRING(0 0 0 0, 1 1 1 1, 2 2 2 2, 3 3 3 3, 4 4 4 4)', 0.5, 0.75)); select 'line_substring_3', ST_AsText(ST_LineSubstring('LINESTRING(0 0, 1 1, 2 2)', 0, 0.5)); select 'line_substring_4', ST_AsText(ST_LineSubstring('LINESTRING(0 0, 1 1, 2 2)', 0.5, 1)); select 'line_substring_5', ST_AsText(ST_LineSubstring('LINESTRING(0 0, 2 2)', 0.5, 1)); select 'line_substring_6', ST_AsText(ST_LineSubstring('LINESTRING(0 0, 2 2)', 0, 0.5)); select 'line_substring_7', ST_AsText(ST_LineSubstring('LINESTRING(0 0, 4 4)', .25, 0.5)); select 'line_substring_8', ST_AsText(ST_LineSubstring('LINESTRINGM(0 0 0, 4 4 4)', .25, 0.5)); select 'line_substring_9', ST_AsText(ST_LineSubstring('LINESTRINGM(0 0 4, 4 4 0)', .25, 0.5)); select 'line_substring_10', ST_AsText(ST_LineSubstring('LINESTRING(0 0 4, 4 4 0)', .25, 0.5)); select 'line_substring_11', ST_AsText(ST_LineSubstring('LINESTRING(0 0, 1 1)', 0, 0)); select 'line_substring_12', ST_AsText(ST_LineSubstring('LINESTRING(0 0 10, 1 1 5)', 0.5, .5)); --- line_interpolate_point select 'line_interpolate_point', ST_AsText(ST_LineInterpolatePoint('LINESTRING(0 0, 1 1)', 0)); select 'line_interpolate_point', ST_AsText(ST_LineInterpolatePoint('LINESTRING(0 0 10, 1 1 5)', 0.5)); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/wkt_expected��������������������������������������������������������0000644�0000000�0000000�00000030437�11732660151�017654� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT EMPTY|POINT EMPTY|t ERROR: parse error - invalid geometry POINT(0 0)|POINT(0 0)|t POINT Z (0 0 0)|POINT Z (0 0 0)|t POINT M (0 0 0)|POINT M (0 0 0)|t POINT ZM (0 0 0 0)|POINT ZM (0 0 0 0)|t ERROR: can not mix dimensionality in a geometry ERROR: parse error - invalid geometry MULTIPOINT EMPTY|MULTIPOINT EMPTY|t MULTIPOINT(EMPTY)|MULTIPOINT(EMPTY)|t MULTIPOINT(0 0, 2 0)|MULTIPOINT(0 0,2 0)|t MULTIPOINT((0 0), (2 0))|MULTIPOINT(0 0,2 0)|t MULTIPOINT((0 0), (2 0), EMPTY)|MULTIPOINT(0 0,2 0,EMPTY)|t MULTIPOINT Z ((0 0 0), (2 0 0))|MULTIPOINT Z (0 0 0,2 0 0)|t MULTIPOINT M ((0 0 0), (2 0 0))|MULTIPOINT M (0 0 0,2 0 0)|t MULTIPOINT ZM ((0 0 0 0), (2 0 0 0))|MULTIPOINT ZM (0 0 0 0,2 0 0 0)|t LINESTRING EMPTY|LINESTRING EMPTY|t ERROR: parse error - invalid geometry LINESTRING(0 0, 1 1)|LINESTRING(0 0,1 1)|t ERROR: parse error - invalid geometry ERROR: parse error - invalid geometry LINESTRING Z (0 0 0, 1 1 0)|LINESTRING Z (0 0 0,1 1 0)|t LINESTRING M (0 0 0, 1 1 0)|LINESTRING M (0 0 0,1 1 0)|t LINESTRING ZM (0 0 0 0, 1 1 0 0)|LINESTRING ZM (0 0 0 0,1 1 0 0)|t MULTILINESTRING EMPTY|MULTILINESTRING EMPTY|t MULTILINESTRING(EMPTY)|MULTILINESTRING(EMPTY)|t ERROR: parse error - invalid geometry MULTILINESTRING((0 0, 2 0))|MULTILINESTRING((0 0,2 0))|t MULTILINESTRING((0 0, 2 0), (1 1, 2 2))|MULTILINESTRING((0 0,2 0),(1 1,2 2))|t MULTILINESTRING((0 0, 2 0), (1 1, 2 2), EMPTY)|MULTILINESTRING((0 0,2 0),(1 1,2 2),EMPTY)|t ERROR: parse error - invalid geometry MULTILINESTRING Z ((0 0 0, 2 0 0), (1 1 0, 2 2 0))|MULTILINESTRING Z ((0 0 0,2 0 0),(1 1 0,2 2 0))|t MULTILINESTRING M ((0 0 0, 2 0 0), (1 1 0, 2 2 0))|MULTILINESTRING M ((0 0 0,2 0 0),(1 1 0,2 2 0))|t MULTILINESTRING ZM ((0 0 0 0, 2 0 0 0), (1 1 0 0, 2 2 0 0))|MULTILINESTRING ZM ((0 0 0 0,2 0 0 0),(1 1 0 0,2 2 0 0))|t POLYGON EMPTY|POLYGON EMPTY|t ERROR: parse error - invalid geometry POLYGON((0 0,1 0,1 1,0 1,0 0))|POLYGON((0 0,1 0,1 1,0 1,0 0))|t POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))|POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))|t POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|t POLYGON M ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|POLYGON M ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|t POLYGON ZM ((0 0 0 2,10 0 0 2,10 10 0 2,0 10 0 2,0 0 0 2),(2 2 0 2,2 5 0 2,5 5 0 2,5 2 0 2,2 2 0 2))|POLYGON ZM ((0 0 0 2,10 0 0 2,10 10 0 2,0 10 0 2,0 0 0 2),(2 2 0 2,2 5 0 2,5 5 0 2,5 2 0 2,2 2 0 2))|t MULTIPOLYGON EMPTY|MULTIPOLYGON EMPTY|t MULTIPOLYGON(EMPTY)|MULTIPOLYGON(EMPTY)|t ERROR: parse error - invalid geometry MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))|t MULTIPOLYGON Z (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|MULTIPOLYGON Z (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|t MULTIPOLYGON M (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|MULTIPOLYGON M (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|t MULTIPOLYGON ZM (((0 0 2 5,10 0 2 5,10 10 2 5,0 10 2 5,0 0 2 5),(2 2 2 5,2 5 2 5,5 5 2 5,5 2 2 5,2 2 2 5)))|MULTIPOLYGON ZM (((0 0 2 5,10 0 2 5,10 10 2 5,0 10 2 5,0 0 2 5),(2 2 2 5,2 5 2 5,5 5 2 5,5 2 2 5,2 2 2 5)))|t GEOMETRYCOLLECTION EMPTY|GEOMETRYCOLLECTION EMPTY|t ERROR: parse error - invalid geometry ERROR: parse error - invalid geometry GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))),POINT(0 0),MULTILINESTRING((0 0, 2 0),(1 1, 2 2)))|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))),POINT(0 0),MULTILINESTRING((0 0,2 0),(1 1,2 2)))|t GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT Z (0 0 5),MULTILINESTRING Z ((0 0 5, 2 0 5),(1 1 5, 2 2 5)))|GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT Z (0 0 5),MULTILINESTRING Z ((0 0 5,2 0 5),(1 1 5,2 2 5)))|t GEOMETRYCOLLECTION M (MULTIPOLYGON M (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT M (0 0 5),MULTILINESTRING M ((0 0 5, 2 0 5),(1 1 5, 2 2 5)))|GEOMETRYCOLLECTION M (MULTIPOLYGON M (((0 0 5,10 0 5,10 10 5,0 10 5,0 0 5),(2 2 5,2 5 5,5 5 5,5 2 5,2 2 5))),POINT M (0 0 5),MULTILINESTRING M ((0 0 5,2 0 5),(1 1 5,2 2 5)))|t GEOMETRYCOLLECTION ZM (MULTIPOLYGON ZM (((0 0 5 4,10 0 5 4,10 10 5 4,0 10 5 4,0 0 5 4),(2 2 5 4,2 5 5 4,5 5 5 4,5 2 5 4,2 2 5 4))),POINT ZM (0 0 5 4),MULTILINESTRING ZM ((0 0 5 4, 2 0 5 4),(1 1 5 4, 2 2 5 4)))|GEOMETRYCOLLECTION ZM (MULTIPOLYGON ZM (((0 0 5 4,10 0 5 4,10 10 5 4,0 10 5 4,0 0 5 4),(2 2 5 4,2 5 5 4,5 5 5 4,5 2 5 4,2 2 5 4))),POINT ZM (0 0 5 4),MULTILINESTRING ZM ((0 0 5 4,2 0 5 4),(1 1 5 4,2 2 5 4)))|t ERROR: parse error - invalid geometry ERROR: parse error - invalid geometry ERROR: geometry requires more points CIRCULARSTRING EMPTY|CIRCULARSTRING EMPTY|t CIRCULARSTRING(0 0, 1 1, 3 3)|CIRCULARSTRING(0 0,1 1,3 3)|t CIRCULARSTRING Z (0 0 0, 1 1 0, 2 3 4)|CIRCULARSTRING Z (0 0 0,1 1 0,2 3 4)|t CIRCULARSTRING M (0 0 0, 1 1 0, 3 4 5)|CIRCULARSTRING M (0 0 0,1 1 0,3 4 5)|t CIRCULARSTRING ZM (0 0 0 0, 1 1 0 0, 1 2 3 4)|CIRCULARSTRING ZM (0 0 0 0,1 1 0 0,1 2 3 4)|t ERROR: geometry requires more points ERROR: incontinuous compound curve COMPOUNDCURVE EMPTY|COMPOUNDCURVE EMPTY|t COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))|COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))|t COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))|COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))|t COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))|COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))|t COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5), (1 0 2 3,0 1 2 2), (0 1 2 2,30 1 2 2), CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5))|COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5),(1 0 2 3,0 1 2 2),(0 1 2 2,30 1 2 2),CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5))|t ERROR: incontinuous compound curve ERROR: geometry requires more points ERROR: geometry contains non-closed rings CURVEPOLYGON EMPTY|CURVEPOLYGON EMPTY|t CURVEPOLYGON (COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2),(0 1 2, 0 0 2)))|CURVEPOLYGON M (COMPOUNDCURVE M (CIRCULARSTRING M (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2),(0 1 2,0 0 2)))|t CURVEPOLYGON (COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2, 0 0 2)))|CURVEPOLYGON Z (COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2,0 0 2)))|t CURVEPOLYGON (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5), (1 0 2 3,0 1 2 2), (0 1 2 2,30 1 2 2), CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5, 1 10 3 5, 0 0 2 5)))|CURVEPOLYGON ZM (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 2 5,1 1 2 6,1 0 2 5),(1 0 2 3,0 1 2 2),(0 1 2 2,30 1 2 2),CIRCULARSTRING ZM (30 1 2 2,12 1 2 6,1 10 2 5,1 10 3 5,0 0 2 5)))|t CURVEPOLYGON(COMPOUNDCURVE((5 5 1 0,5 0 1 1,0 0 1 2,0 5 1 3), CIRCULARSTRING(0 5 1 3,1.5 7.5 1 4,5 5 1 0)),(1.5 5 2 0,2.5 6 3 1,3.5 5 2 2,1.5 5 2 0), COMPOUNDCURVE(CIRCULARSTRING(1.5 2 2 0,1 2.5 3 1,3.5 2 2 2),(3.5 2 2 2,3.5 4 1 3,1.5 4 1 4,1.5 2 2 0)))|CURVEPOLYGON ZM (COMPOUNDCURVE ZM ((5 5 1 0,5 0 1 1,0 0 1 2,0 5 1 3),CIRCULARSTRING ZM (0 5 1 3,1.5 7.5 1 4,5 5 1 0)),(1.5 5 2 0,2.5 6 3 1,3.5 5 2 2,1.5 5 2 0),COMPOUNDCURVE ZM (CIRCULARSTRING ZM (1.5 2 2 0,1 2.5 3 1,3.5 2 2 2),(3.5 2 2 2,3.5 4 1 3,1.5 4 1 4,1.5 2 2 0)))|t MULTICURVE EMPTY|MULTICURVE EMPTY|t MULTICURVE ((5 5, 3 5, 3 3, 0 3), CIRCULARSTRING (0 0, 0.2 1, 0.5 1.4), COMPOUNDCURVE (CIRCULARSTRING (0 0,1 1,1 0),(1 0,0 1)))|MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,0.2 1,0.5 1.4),COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)))|t MULTICURVE M ((5 5 1, 3 5 2, 3 3 3, 0 3 1), CIRCULARSTRING M (0 0 0, 0.2 1 3, 0.5 1.4 1), COMPOUNDCURVE M (CIRCULARSTRING M (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))|MULTICURVE M ((5 5 1,3 5 2,3 3 3,0 3 1),CIRCULARSTRING M (0 0 0,0.2 1 3,0.5 1.4 1),COMPOUNDCURVE M (CIRCULARSTRING M (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))|t MULTICURVE Z ((5 5 1, 3 5 2, 3 3 3, 0 3 1), CIRCULARSTRING Z (0 0 0, 0.2 1 3, 0.5 1.4 1), COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))|MULTICURVE Z ((5 5 1,3 5 2,3 3 3,0 3 1),CIRCULARSTRING Z (0 0 0,0.2 1 3,0.5 1.4 1),COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 0,1 1 1,1 0 0),(1 0 0,0 1 5)))|t MULTICURVE ZM ((5 5 1 3, 3 5 2 2, 3 3 3 1, 0 3 1 1), CIRCULARSTRING ZM (0 0 0 0, 0.2 1 3 -2, 0.5 1.4 1 2), COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 0 0,1 1 1 2,1 0 0 1),(1 0 0 1,0 1 5 4)))|MULTICURVE ZM ((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),CIRCULARSTRING ZM (0 0 0 0,0.2 1 3 -2,0.5 1.4 1 2),COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 0 0,1 1 1 2,1 0 0 1),(1 0 0 1,0 1 5 4)))|t MULTISURFACE EMPTY|MULTISURFACE EMPTY|t MULTISURFACE (CURVEPOLYGON (CIRCULARSTRING (-2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0)), ((7 8, 10 10, 6 14, 4 11, 7 8)))|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))|t MULTISURFACE M (CURVEPOLYGON M (CIRCULARSTRING M (-2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7)))|MULTISURFACE M (CURVEPOLYGON M (CIRCULARSTRING M (-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7)))|t MULTISURFACE Z (CURVEPOLYGON Z (CIRCULARSTRING Z (-2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1)), ((7 8 7, 10 10 5, 6 14 3, 4 11 4, 7 8 7)))|MULTISURFACE Z (CURVEPOLYGON Z (CIRCULARSTRING Z (-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7)))|t MULTISURFACE ZM (CURVEPOLYGON ZM (CIRCULARSTRING ZM (-2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2)), ((7 8 7 8, 10 10 5 5, 6 14 3 1, 4 11 4 6, 7 8 7 8)))|MULTISURFACE ZM (CURVEPOLYGON ZM (CIRCULARSTRING ZM (-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8)))|t POLYHEDRALSURFACE EMPTY|POLYHEDRALSURFACE EMPTY|t POLYHEDRALSURFACE (((0 0,0 0,0 1,0 0)),((0 0,0 1,1 0,0 0)),((0 0,1 0,0 0,0 0)),((1 0,0 1,0 0,1 0)))|POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0)),((0 0,0 1,1 0,0 0)),((0 0,1 0,0 0,0 0)),((1 0,0 1,0 0,1 0)))|t POLYHEDRALSURFACE M (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))|POLYHEDRALSURFACE M (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))|t POLYHEDRALSURFACE Z (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))|POLYHEDRALSURFACE Z (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))|t POLYHEDRALSURFACE ZM (((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))|POLYHEDRALSURFACE ZM (((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))|t ERROR: geometry contains non-closed rings TRIANGLE EMPTY|TRIANGLE EMPTY|t TRIANGLE ((1 2 3,4 5 6,7 8 9,1 2 3))|TRIANGLE Z ((1 2 3,4 5 6,7 8 9,1 2 3))|t TRIANGLE M ((1 2 3,4 5 6,7 8 9,1 2 3))|TRIANGLE M ((1 2 3,4 5 6,7 8 9,1 2 3))|t TRIANGLE Z ((1 2 3,4 5 6,7 8 9,1 2 3))|TRIANGLE Z ((1 2 3,4 5 6,7 8 9,1 2 3))|t TRIANGLE ZM ((1 2 3 -1,4 5 6 -2,7 8 9 -3,1 2 3 -1))|TRIANGLE ZM ((1 2 3 -1,4 5 6 -2,7 8 9 -3,1 2 3 -1))|t ERROR: geometry contains non-closed rings TIN EMPTY|TIN EMPTY|t TIN ( ((0 0, 0 0, 0 1, 0 0)), ((0 0, 0 1, 1 1, 0 0)) )|TIN(((0 0,0 0,0 1,0 0)),((0 0,0 1,1 1,0 0)))|t TIN Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )|TIN Z (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 1 0,0 0 0)))|t TIN M ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )|TIN M (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 1 0,0 0 0)))|t TIN ZM ( ((0 0 0 0, 0 0 1 0, 0 1 0 4, 0 0 0 0)), ((0 0 0 1, 0 1 0 2, 1 1 0 3, 0 0 0 1)) )|TIN ZM (((0 0 0 0,0 0 1 0,0 1 0 4,0 0 0 0)),((0 0 0 1,0 1 0 2,1 1 0 3,0 0 0 1)))|t ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/lwgeom_regress_expected���������������������������������������������0000644�0000000�0000000�00000000111�11722777314�022066� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BOX(0 0.1,11 12) BOX3D(0 0.1 -55,11 12 12) 11184 15824 20464 15824 11184 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/dump.sql������������������������������������������������������������0000644�0000000�0000000�00000006637�11722777314�016747� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT 't1', path, ST_AsText(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'POINT (0 9)'::geometry AS geom ) AS g ) j; SELECT 't2', path, ST_AsText(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'LINESTRING ( 0 0, 0 9, 9 9, 9 0, 0 0 )'::geometry AS geom ) AS g ) j; SELECT 't3', path, ST_AsText(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'POLYGON (( 0 0, 0 9, 9 9, 9 0, 0 0 ))'::geometry AS geom ) AS g ) j; SELECT 't4', path, ST_AsText(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'TRIANGLE (( 0 0, 0 9, 9 0, 0 0 ))'::geometry AS geom ) AS g ) j; SELECT 't5', path, ST_AsText(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'POLYGON (( 0 0, 0 9, 9 9, 9 0, 0 0 ), ( 1 1, 1 3, 3 2, 1 1 ), ( 7 6, 6 8, 8 8, 7 6 ))'::geometry AS geom ) AS g ) j; SELECT 't6', path, ST_AsText(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'MULTIPOLYGON ((( 0 0, 0 3, 4 3, 4 0, 0 0 )), (( 2 4, 1 6, 4 5, 2 4 ), ( 7 6, 6 8, 8 8, 7 6 )))'::geometry AS geom ) AS g ) j; SELECT 't7', path, ST_AsEWKT(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'POLYHEDRALSURFACE ((( 0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0 )) )'::geometry AS geom ) AS g ) j; SELECT 't8', path, ST_AsEWKT(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )'::geometry AS geom ) AS g ) j; SELECT 't9', path, ST_AsText(geom) FROM ( SELECT (ST_Dump(g.geom)).* FROM (SELECT 'GEOMETRYCOLLECTION( POINT(99 98), LINESTRING(1 1, 3 3), POLYGON((0 0, 0 1, 1 1, 0 0)), POLYGON((0 0, 0 9, 9 9, 9 0, 0 0), (5 5, 5 6, 6 6, 5 5)), MULTIPOLYGON(((0 0, 0 9, 9 9, 9 0, 0 0), (5 5, 5 6, 6 6, 5 5))) )'::geometry AS geom ) AS g ) j; SELECT 't10', count(*) FROM ST_Dump(' GEOMETRYCOLLECTION EMPTY '); SELECT 't11', count(*) FROM ST_Dump(' GEOMETRYCOLLECTION ( GEOMETRYCOLLECTION EMPTY, POINT EMPTY, LINESTRING EMPTY, POLYGON EMPTY, MULTIPOINT EMPTY, MULTILINESTRING EMPTY, MULTIPOLYGON EMPTY, GEOMETRYCOLLECTION ( GEOMETRYCOLLECTION EMPTY ) ) '); �������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/legacy.sql����������������������������������������������������������0000644�0000000�0000000�00000011255�12315353606�017227� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- These tests serve the purpose of ensuring compatibility with -- old versions of postgis users. -- -- Their use rely on loading the legacy.sql script. -- This file also serves as a testcase for uninstall_legacy.sql -- SET client_min_messages TO WARNING; \cd :scriptdir \i legacy.sql TRUNCATE spatial_ref_sys; INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4326,'EPSG',4326,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); SELECT 'Starting up MapServer/Geoserver tests...'; -- Set up the data table SELECT 'Setting up the data table...'; CREATE TABLE wmstest ( id INTEGER ); SELECT AddGeometryColumn( 'wmstest', 'pt', 4326, 'POLYGON', 2 ); INSERT INTO wmstest SELECT lon * 100 + lat AS id, st_setsrid(st_buffer(st_makepoint(lon, lat),1.0),4326) AS pt FROM (select lon, generate_series(-80,80, 5) AS lat FROM (SELECT generate_series(-175, 175, 5) AS lon) AS sq1) AS sq2; ALTER TABLE wmstest add PRIMARY KEY ( id ); CREATE INDEX wmstest_geomidx ON wmstest using gist ( pt ); -- Geoserver 2.0 NG tests SELECT 'Running Geoserver 2.0 NG tests...'; -- Run a Geoserver 2.0 NG metadata query SELECT 'Geoserver1', TYPE FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; SELECT 'Geoserver2', SRID FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; -- Run a Geoserver 2.0 NG WMS query SELECT 'Geoserver3', "id",substr(encode(asBinary(force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-6.58216065979069 -0.7685569763184591, -6.58216065979069 0.911225433349509, -3.050569931030911 0.911225433349509, -3.050569931030911 -0.7685569763184591, -6.58216065979069 -0.7685569763184591))', 4326); -- Run a Geoserver 2.0 NG KML query SELECT 'Geoserver4', count(*) FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver5', "id",substr(encode(asBinary(force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver6', "id",substr(encode(asBinary(force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-1.507182836191598 24.031312785172446, -1.507182836191598 25.995557016429064, 1.7399982474034008 25.995557016429064, 1.7399982474034008 24.031312785172446, -1.507182836191598 24.031312785172446))', 4326); -- MapServer 5.4 tests select 'MapServer1', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer2', "id",substr(encode(AsBinary(force_collection(force_2d("pt")),'NDR'),'base64'),0,16) as geom,"id" from wmstest where pt && GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- MapServer 5.6 tests select * from wmstest where false limit 0; select 'MapServer3', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer4', "id",substr(encode(AsBinary(force_collection(force_2d("pt")),'NDR'),'hex'),0,16) as geom,"id" from wmstest where pt && GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- Drop the data table SELECT 'Removing the data table...'; DROP TABLE wmstest; DELETE FROM geometry_columns WHERE f_table_name = 'wmstest' AND f_table_schema = 'public'; SELECT 'Done.'; -- test #1869 ST_AsBinary is not unique -- SELECT 1869 As ticket_id, ST_AsText(ST_AsBinary('POINT(1 2)')); DELETE FROM spatial_ref_sys WHERE SRID = '4326'; \i uninstall_legacy.sql ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/empty.sql�����������������������������������������������������������0000644�0000000�0000000�00000015462�12274345516�017132� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- ST_SnapToGrid SELECT 'T1.1', ST_AsEWKT(ST_SnapToGrid('POINT EMPTY', 1)); SELECT 'T1.2', ST_AsEWKT(ST_SnapToGrid('LINESTRING EMPTY', 1)); SELECT 'T1.3', ST_AsEWKT(ST_SnapToGrid('SRID=4326;POLYGON EMPTY', 1)); -- ST_Buffer SELECT 'T2.1', ST_AsEWKT(ST_Buffer('SRID=4326;POINT EMPTY', 0)); SELECT 'T2.2', ST_AsEWKT(ST_Buffer('SRID=4326;LINESTRING EMPTY', 0)); SELECT 'T2.3', ST_AsEWKT(ST_Buffer('SRID=4326;MULTIPOLYGON EMPTY', 0)); WITH b as ( SELECT ST_Buffer('SRID=4326;MULTIPOINT EMPTY', 1) as g ) SELECT 'T2.4', ST_Srid(g), GeometryType(g) from b; -- ST_AsGML (output may need some tweaking) SELECT 'T3.1', ST_AsGML('POINT EMPTY'); SELECT 'T3.2', ST_AsGML('LINESTRING EMPTY'); SELECT 'T3.3', ST_AsGML('POLYGON EMPTY'); SELECT 'T3.4', ST_AsGML('MULTIPOLYGON EMPTY'); SELECT 'T3.5', ST_AsGML('MULTILINESTRING EMPTY'); SELECT 'T3.6', ST_AsGML('GEOMETRYCOLLECTION EMPTY'); SELECT 'T3.7', ST_AsGML(3,'POINT EMPTY'::geometry); SELECT 'T3.8', ST_AsGML(3,'LINESTRING EMPTY'::geometry); SELECT 'T3.9', ST_AsGML(3,'POLYGON EMPTY'::geometry); SELECT 'T3.10', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry); SELECT 'T3.11', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry); SELECT 'T3.12', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry); SELECT 'T3.13', ST_AsGML(3,'POINT EMPTY'::geometry); SELECT 'T3.14', ST_AsGML(3,'LINESTRING EMPTY'::geometry); SELECT 'T3.15', ST_AsGML(3,'POLYGON EMPTY'::geometry); SELECT 'T3.16', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry); SELECT 'T3.17', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry); SELECT 'T3.18', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry); -- See http://trac.osgeo.org/postgis/wiki/DevWikiEmptyGeometry WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry, 120 as tolerance ) SELECT 'ST_Buffer(empty, tolerance) == empty', encode(ST_AsBinary(ST_Buffer(empty, tolerance),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Union(geometry, empty) == geometry', encode(ST_AsBinary(ST_Union(geometry, empty),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Union(empty, empty) == empty', encode(ST_AsBinary(ST_Union(empty, empty),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Intersection(geometry, empty) == geometry', encode(ST_AsBinary(ST_Intersection(geometry, empty),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Intersection(empty, empty) == empty', encode(ST_AsBinary(ST_Intersection(empty, empty),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Difference(geometry, empty) == geometry', encode(ST_AsBinary(ST_Difference(geometry, empty),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Difference(empty, geometry) == empty', encode(ST_AsBinary(ST_Difference(empty, geometry),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Distance(geometry, empty) == NULL', ST_Distance(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry, 120 as tolerance ) SELECT 'ST_DWithin(geometry, empty, tolerance) == FALSE', ST_DWithin(geometry, empty, tolerance) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Within(geometry, empty) == FALSE', ST_Within(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Contains(empty, geometry) == FALSE', ST_Contains(empty, geometry) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Within(empty, geometry) == FALSE', ST_Within(empty, geometry) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Contains(empty, empty) == FALSE', ST_Contains(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Intersects(geometry, empty) == FALSE', ST_Intersects(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Intersects(empty, empty) == FALSE', ST_Intersects(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Disjoint(empty, empty) == TRUE', ST_Disjoint(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Disjoint(geometry, empty) == TRUE', ST_Disjoint(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty1, 'POINT Z EMPTY'::geometry as empty2 ) SELECT 'ST_Equals(empty1, empty2) == TRUE', ST_Equals(empty1, empty2) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_IsSimple(empty) == TRUE', ST_IsSimple(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_IsValid(empty) == TRUE', ST_IsValid(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_NumGeometries(empty) == 0', ST_NumGeometries(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_NRings(empty) == 0', ST_NRings(empty) FROM inp; WITH inp AS (SELECT 'LINESTRING EMPTY'::geometry as empty ) SELECT 'ST_NumPoints(empty) == 0', ST_NumPoints(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_NPoints(empty) == 0', ST_NPoints(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 1 as n ) SELECT 'ST_GeometryN(empty, n) == empty', encode(ST_AsEWKB(ST_GeometryN(empty, n),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_ExteriorRing(empty) == empty', encode(ST_AsEWKB(ST_ExteriorRing(empty),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 1 as n ) SELECT 'ST_InteriorRingN(empty, n) == NULL', encode(ST_AsEWKB(ST_InteriorRingN(empty, n),'ndr'),'hex') FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Area(empty) == 0', ST_Area(empty) FROM inp; WITH inp AS (SELECT 'LINESTRING EMPTY'::geometry as empty ) SELECT 'ST_Length(empty) == 0', ST_Length(empty) FROM inp; -- Operators -- same box, see http://trac.osgeo.org/postgis/ticket/1453 SELECT '~=', 'POINT EMPTY'::geometry ~= 'POINT EMPTY'::geometry; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/ctors_expected������������������������������������������������������0000644�0000000�0000000�00000000510�11722777314�020177� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������32749 ERROR: Operation on mixed SRID geometries SRID=3;LINESTRING(0 0,1 1) ERROR: Operation on mixed SRID geometries ST_MakeLine1|LINESTRING(0 0,1 1,10 0) ST_MakeLine_agg1|LINESTRING(0 0,1 1,10 0,20 20,40 4) BOX(0 0,1 1) ERROR: Operation on mixed SRID geometries BOX3D(0 0 0,1 1 0) ERROR: Operation on mixed SRID geometries ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_buffer_params_expected��������������������������������������0000644�0000000�0000000�00000002154�11722777314�023421� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������point quadsegs=2|POLYGON((1 0,0.707107 -0.707107,0 -1,-0.707107 -0.707107,-1 0,-0.707107 0.707107,0 1,0.707107 0.707107,1 0)) line quadsegs=2|POLYGON((10 2,11.414214 1.414214,12 0,11.414214 -1.414214,10 -2,0 -2,-1.414214 -1.414214,-2 0,-1.414214 1.414214,0 2,10 2)) line quadsegs=2 endcap=flat|POLYGON((10 2,10 -2,0 -2,0 2,10 2)) line quadsegs=2 endcap=butt|POLYGON((10 2,10 -2,0 -2,0 2,10 2)) line quadsegs=2 endcap=square|POLYGON((10 2,12 2,12 -2,0 -2,-2 -2,-2 2,10 2)) poly quadsegs=2 join=round|POLYGON((-2 0,-2 10,-1.414214 11.414214,0 12,10 12,11.414214 11.414214,12 10,12 0,11.414214 -1.414214,10 -2,0 -2,-1.414214 -1.414214,-2 0)) poly quadsegs=2 join=bevel|POLYGON((-2 0,-2 10,0 12,10 12,12 10,12 0,10 -2,0 -2,-2 0)) poly quadsegs=2 join=mitre|POLYGON((-2 -2,-2 12,12 12,12 -2,-2 -2)) poly quadsegs=2 join=mitre mitre_limit=1|POLYGON((-1.828427 -1,-1.828427 11,-1 11.828427,11 11.828427,11.828427 11,11.828427 -1,11 -1.828427,-1 -1.828427,-1.828427 -1)) poly quadsegs=2 join=miter miter_limit=1|POLYGON((-1.828427 -1,-1.828427 11,-1 11.828427,11 11.828427,11.828427 11,11.828427 -1,11 -1.828427,-1 -1.828427,-1.828427 -1)) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/run_test.pl���������������������������������������������������������0000755�0000000�0000000�00000074577�12315371551�017464� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl use File::Basename; use File::Temp 'tempdir'; #use File::Which; use File::Copy; use File::Path; use Cwd 'abs_path'; use Getopt::Long; use strict; ################################################################## # Usage ./run_test.pl <testname> [<testname>] # # Create the spatial database 'postgis_reg' (or whatever $DB # is set to) if it doesn't already exist. # # Run the <testname>.sql script # Check output against <testname>_expected ################################################################## if ( @ARGV < 1 ) { usage(); } ################################################################## # Global configuration items ################################################################## our $DB = "postgis_reg"; our $REGDIR = abs_path(dirname($0)); our $SHP2PGSQL = $REGDIR . "/../loader/shp2pgsql"; our $PGSQL2SHP = $REGDIR . "/../loader/pgsql2shp"; our $RASTER2PGSQL = $REGDIR . "/../raster/loader/raster2pgsql"; our $sysdiff = !system("diff --strip-trailing-cr $0 $0 2> /dev/null"); ################################################################## # Parse command line opts ################################################################## my $OPT_CLEAN = 0; my $OPT_NODROP = 0; my $OPT_NOCREATE = 0; my $OPT_UPGRADE = 0; my $OPT_WITH_TOPO = 0; my $OPT_WITH_RASTER = 0; my $OPT_WITH_SFCGAL = 0; my $OPT_EXPECT = 0; my $OPT_EXTENSIONS = 0; my $VERBOSE = 0; GetOptions ( 'verbose' => \$VERBOSE, 'clean' => \$OPT_CLEAN, 'nodrop' => \$OPT_NODROP, 'upgrade' => \$OPT_UPGRADE, 'nocreate' => \$OPT_NOCREATE, 'topology' => \$OPT_WITH_TOPO, 'raster' => \$OPT_WITH_RASTER, 'sfcgal' => \$OPT_WITH_SFCGAL, 'expect' => \$OPT_EXPECT, 'extensions' => \$OPT_EXTENSIONS ); ################################################################## # Set the locale to "C" so error messages match # Save original locale to set back ################################################################## my $ORIG_LC_ALL = $ENV{"LC_ALL"}; my $ORIG_LANG = $ENV{"LANG"}; $ENV{"LC_ALL"} = "C"; $ENV{"LANG"} = "C"; # Add locale info to the psql options my $PGOPTIONS = $ENV{"PGOPTIONS"} . " -c lc_messages=C -c client_min_messages=NOTICE"; $ENV{"PGOPTIONS"} = $PGOPTIONS; # Bring the path info in my $PATH = $ENV{"PATH"}; # this is useless # Calculate the regression directory locations my $STAGED_INSTALL_DIR = $REGDIR . "/00-regress-install"; my $STAGED_SCRIPTS_DIR = $STAGED_INSTALL_DIR . "/share/contrib/postgis"; my $OBJ_COUNT_PRE = 0; my $OBJ_COUNT_POST = 0; ################################################################## # Check that we have the executables we need ################################################################## print "PATH is $PATH\n"; #foreach my $exec ( ("psql", "createdb", "createlang", "dropdb") ) #{ # my $execdir = which( $exec ); # print "Checking for $exec ... "; # if ( $execdir ) # { # print "found $execdir\n"; # } # else # { # print "failed\n"; # die "Unable to find $exec executable. Please ensure it is on your PATH.\n"; # } #} foreach my $exec ( ($SHP2PGSQL, $PGSQL2SHP) ) { printf "Checking for %s ... ", basename($exec); if ( -x $exec ) { print "found\n"; } else { print "failed\n"; die "Unable to find $exec executable.\n"; } } if ( $OPT_WITH_RASTER ) { print "Checking for raster2pgsql ... "; if ( -x $RASTER2PGSQL ) { print "found\n"; } else { print "failed\n"; die "Unable to find raster2pgsql executable.\n"; } } ################################################################## # Set up the temporary directory ################################################################## my $TMPDIR; if ( $ENV{'PGIS_REG_TMPDIR'} ) { $TMPDIR = $ENV{'PGIS_REG_TMPDIR'}; } elsif ( -d "/tmp/" && -w "/tmp/" ) { $TMPDIR = "/tmp/pgis_reg"; } else { $TMPDIR = tempdir( CLEANUP => 0 ); } mkdir $TMPDIR if ( ! -d $TMPDIR ); # Set log name my $REGRESS_LOG = "${TMPDIR}/regress_log"; # Report print "TMPDIR is $TMPDIR\n"; ################################################################## # Prepare the database ################################################################## my @dblist = grep(/$DB/, split(/\n/, `psql -l`)); my $dbcount = @dblist; if ( $dbcount == 0 ) { if ( $OPT_NOCREATE ) { print "Database $DB does not exist.\n"; print "Run without the --nocreate flag to create it.\n"; exit(1); } else { create_spatial(); } } else { if ( $OPT_NOCREATE ) { print "Using existing database $DB\n"; } else { print "Database $DB already exists.\n"; print "Drop it, or run with the --nocreate flag to use it.\n"; exit(1); } } my $libver = sql("select postgis_lib_version()"); if ( ! $libver ) { `dropdb $DB`; print "\nSomething went wrong (no PostGIS installed in $DB).\n"; print "For details, check $REGRESS_LOG\n\n"; exit(1); } if ( $OPT_UPGRADE ) { if ( $OPT_EXTENSIONS ) { upgrade_spatial_extensions(); } else { upgrade_spatial(); } } ################################################################## # Report PostGIS environment ################################################################## my $geosver = sql("select postgis_geos_version()"); my $projver = sql("select postgis_proj_version()"); my $svnrev = sql("select postgis_svn_version()"); my $libbuilddate = sql("select postgis_lib_build_date()"); my $pgsqlver = sql("select version()"); my $gdalver = sql("select postgis_gdal_version()") if $OPT_WITH_RASTER; my $sfcgalver = sql("select postgis_sfcgal_version()") if $OPT_WITH_SFCGAL; print "$pgsqlver\n"; print " Postgis $libver - r${svnrev} - $libbuilddate\n"; print " GEOS: $geosver\n" if $geosver; print " PROJ: $projver\n" if $projver; print " SFCGAL: $sfcgalver\n" if $sfcgalver; print " GDAL: $gdalver\n" if $gdalver; ################################################################## # Set up some global variables ################################################################## my $RUN = 0; my $FAIL = 0; my $SKIP = 0; our $TEST = ""; ################################################################## # Run the tests ################################################################## print "\nRunning tests\n\n"; foreach $TEST (@ARGV) { # catch a common mistake (strip trailing .sql) $TEST =~ s/.sql$//; start_test($TEST); # Check for a "-pre.pl" file in case there are setup commands eval_file("${TEST}-pre.pl"); # Check for a "-pre.sql" file in case there is setup SQL needed before # the test can be run. if ( -r "${TEST}-pre.sql" ) { run_simple_sql("${TEST}-pre.sql"); show_progress(); } # Check .dbf *before* .sql as loader test could # create the .sql # Check for .dbf not just .shp since the loader can load # .dbf files without a .shp. if ( -r "${TEST}.dbf" ) { pass() if ( run_loader_test() ); } elsif ( -r "${TEST}.tif" ) { my $rv = run_raster_loader_test(); pass() if $rv; } elsif ( -r "${TEST}.sql" ) { my $rv = run_simple_test("${TEST}.sql", "${TEST}_expected"); pass() if $rv; } else { print " skipped (can't read ${TEST}.sql)\n"; $SKIP++; next; } if ( -r "${TEST}-post.sql" ) { my $rv = run_simple_sql("${TEST}-post.sql"); if ( ! $rv ) { print " ... but cleanup sql failed!"; } } # Check for a "-post.pl" file in case there are teardown commands eval_file("${TEST}-post.pl"); } ################################################################### # Uninstall postgis (serves as an uninstall test) ################################################################## # We only test uninstall if we've been asked to drop # and we did create # and nobody requested raster or topology # (until they have an uninstall script themself) if ( (! $OPT_NODROP) && $OBJ_COUNT_PRE > 0 ) { uninstall_spatial(); } ################################################################## # Summary report ################################################################## print "\nRun tests: $RUN\n"; print "Failed: $FAIL\n"; if ( $OPT_CLEAN ) { rmtree($TMPDIR); } if ( ! ($OPT_NODROP || $OPT_NOCREATE) ) { sleep(1); system("dropdb $DB"); } else { print "Drop database ${DB} manually\n"; } # Set the locale back to the original $ENV{"LC_ALL"} = $ORIG_LC_ALL; $ENV{"LANG"} = $ORIG_LANG; exit($FAIL); ################################################################## # Utility functions # sub usage { die qq{ Usage: $0 <testname> [<testname>] Options: --verbose be verbose about failures --nocreate do not create the regression database on start --upgrade source the upgrade scripts on start --nodrop do not drop the regression database on exit --raster load also raster extension --topology load also topology extension --sfcgal use also sfcgal backend --clean cleanup test logs on exit --expect save obtained output as expected }; } # start_test <name> sub start_test { my $test = shift; print " $test "; $RUN++; show_progress(); } # Print a entry sub echo_inline { my $msg = shift; print $msg; } # Print a single dot sub show_progress { print "."; } # pass <msg> sub pass { my $msg = shift; printf(" ok %s\n", $msg); } # fail <msg> <log> sub fail { my $msg = shift; my $log = shift; if ( ! $log ) { printf(" failed (%s)\n", $msg); } elsif ( $VERBOSE == 1 ) { printf(" failed (%s: %s)\n", $msg, $log); print "-----------------------------------------------------------------------------\n"; open(LOG, "$log") or die "Cannot open log file $log\n"; print while(<LOG>); close(LOG); print "-----------------------------------------------------------------------------\n"; } else { printf(" failed (%s: %s)\n", $msg, $log); } $FAIL++; } ################################################################## # run_simple_sql # Run an sql script and hide results unless it fails. # SQL input file name is $1 ################################################################## sub run_simple_sql { my $sql = shift; if ( ! -r $sql ) { fail("can't read $sql"); return 0; } # Dump output to a temp file. my $tmpfile = sprintf("%s/test_%s_tmp", $TMPDIR, $RUN); my $cmd = "psql -v \"VERBOSITY=terse\" -tXA $DB < $sql > $tmpfile 2>&1"; my $rv = system($cmd); # Check if psql errored out. if ( $rv != 0 ) { fail("Unable to run sql script $sql", $tmpfile); return 0; } # Check for ERROR lines open FILE, "$tmpfile"; my @lines = <FILE>; my @errors = grep(/^ERROR/, @lines); if ( @errors > 0 ) { fail("Errors while running sql script $sql", $tmpfile); return 0; } unlink $tmpfile; return 1; } sub drop_table { my $tblname = shift; my $cmd = "psql -tXA -d $DB -c \"DROP TABLE IF EXISTS $tblname\" >> $REGRESS_LOG 2>&1"; my $rv = system($cmd); die "Could not run: $cmd\n" if $rv; } sub sql { my $sql = shift; my $result = `psql -tXA -d $DB -c "$sql"`; $result =~ s/\n$//; $result; } sub eval_file { my $file = shift; my $pl; if ( -r $file ) { #open(PL, $file); #$pl = <PL>; #close(PL); #eval($pl); do $file; } } ################################################################## # run_simple_test # Run an sql script and compare results with the given expected output # SQL input is ${TEST}.sql, expected output is {$TEST}_expected ################################################################## sub run_simple_test { my $sql = shift; my $expected = shift; my $msg = shift; if ( ! -r "$sql" ) { fail("can't read $sql"); return 0; } if ( ! $OPT_EXPECT ) { if ( ! -r "$expected" ) { fail("can't read $expected"); return 0; } } show_progress(); my $outfile = sprintf("%s/test_%s_out", $TMPDIR, $RUN); my $betmpdir = sprintf("%s/pgis_reg_tmp/", $TMPDIR); my $tmpfile = sprintf("%s/test_%s_tmp", $betmpdir, $RUN); my $diffile = sprintf("%s/test_%s_diff", $TMPDIR, $RUN); mkpath($betmpdir); chmod 0777, $betmpdir; my $scriptdir; if ( $OPT_EXTENSIONS ) { # TODO: allow override this default with env variable ? my $pgis_majmin = $libver; $pgis_majmin =~ s/^([1-9]*\.[1-9]*).*/\1/; $scriptdir = `pg_config --sharedir`; chop $scriptdir; $scriptdir .= "/contrib/postgis-" . $pgis_majmin; } else { $scriptdir = $STAGED_SCRIPTS_DIR; } my $cmd = "psql -v \"VERBOSITY=terse\"" . " -v \"tmpfile='$tmpfile'\"" . " -v \"scriptdir=$scriptdir\"" . " -tXA $DB < $sql > $outfile 2>&1"; my $rv = system($cmd); # Check for ERROR lines open(FILE, "$outfile"); my @lines = <FILE>; close(FILE); # Strip the lines we don't care about @lines = grep(!/^\$/, @lines); @lines = grep(!/^(INSERT|DELETE|UPDATE|SELECT)/, @lines); @lines = grep(!/^(CONTEXT|RESET|ANALYZE)/, @lines); @lines = grep(!/^(DROP|CREATE|VACUUM)/, @lines); @lines = grep(!/^(LOG|SET|TRUNCATE)/, @lines); @lines = grep(!/^LINE \d/, @lines); @lines = grep(!/^\s+$/, @lines); # Morph values into expected forms for ( my $i = 0; $i < @lines; $i++ ) { $lines[$i] =~ s/Infinity/inf/g; $lines[$i] =~ s/Inf/inf/g; $lines[$i] =~ s/1\.#INF/inf/g; $lines[$i] =~ s/[eE]([+-])0+(\d+)/e$1$2/g; $lines[$i] =~ s/Self-intersection .*/Self-intersection/; $lines[$i] =~ s/^ROLLBACK/COMMIT/; } # Write out output file open(FILE, ">$outfile"); foreach my $l (@lines) { print FILE $l; } close(FILE); # Clean up interim stuff #remove_tree($betmpdir); if ( $OPT_EXPECT ) { print " expected\n"; copy($outfile, $expected); } else { my $diff = diff($expected, $outfile); if ( $diff ) { open(FILE, ">$diffile"); print FILE $diff; close(FILE); fail("${msg}diff expected obtained", $diffile); return 0; } else { unlink $outfile; return 1; } } return 1; } ################################################################## # This runs the loader once and checks the output of it. # It will NOT run if neither the expected SQL nor the expected # select results file exists, unless you pass true for the final # parameter. # # $1 - Description of this run of the loader, used for error messages. # $2 - Table name to load into. # $3 - The name of the file containing what the # SQL generated by shp2pgsql should look like. # $4 - The name of the file containing the expected results of # SELECT geom FROM _tblname should look like. # $5 - Command line options for shp2pgsql. # $6 - If you pass true, this will run the loader even if neither # of the expected results files exists (though of course # the results won't be compared with anything). ################################################################## sub run_loader_and_check_output { my $description = shift; my $tblname = shift; my $expected_sql_file = shift; my $expected_select_results_file = shift; my $loader_options = shift; my $run_always = shift; my ( $cmd, $rv ); my $outfile = "${TMPDIR}/loader.out"; my $errfile = "${TMPDIR}/loader.err"; # ON_ERROR_STOP is used by psql to return non-0 on an error my $psql_opts = " --no-psqlrc --variable ON_ERROR_STOP=true"; if ( $run_always || -r $expected_sql_file || -r $expected_select_results_file ) { show_progress(); # Produce the output SQL file. $cmd = "$SHP2PGSQL $loader_options -g the_geom ${TEST}.shp $tblname > $outfile 2> $errfile"; $rv = system($cmd); if ( $rv ) { fail(" $description: running shp2pgsql", "$errfile"); return 0; } # Compare the output SQL file with the expected if there is one. if ( -r $expected_sql_file ) { show_progress(); my $diff = diff($expected_sql_file, $outfile); if ( $diff ) { fail(" $description: actual SQL does not match expected.", "$outfile"); return 0; } } # Run the loader SQL script. show_progress(); $cmd = "psql $psql_opts -f $outfile $DB > $errfile 2>&1"; $rv = system($cmd); if ( $rv ) { fail(" $description: running shp2pgsql output","$errfile"); return 0; } # Run the select script (if there is one) if ( -r "${TEST}.select.sql" ) { $rv = run_simple_test("${TEST}.select.sql",$expected_select_results_file, $description); return 0 if ( ! $rv ); } } return 1; } ################################################################## # This runs the dumper once and checks the output of it. # It will NOT run if the expected shp file does not exist, unless # you pass true for the final parameter. # # $1 - Description of this run of the dumper, used for error messages. # $2 - Table name to dump from. # $3 - "Expected" .shp file to compare with. # $3 - If you pass true, this will run the loader even if neither # of the expected results files exists (though of course # the results won't be compared with anything). ################################################################## sub run_dumper_and_check_output { my $description = shift; my $tblname = shift; my $expected_shp_file = shift; my $run_always = shift; my ($cmd, $rv); my $errfile = "${TMPDIR}/dumper.err"; if ( $run_always || -r $expected_shp_file ) { show_progress(); $cmd = "${PGSQL2SHP} -f ${TMPDIR}/dumper $DB $tblname > $errfile 2>&1"; $rv = system($cmd); if ( $rv ) { fail("$description: dumping loaded table", $errfile); return 0; } # Compare with expected output if there is any. if ( -r $expected_shp_file ) { show_progress(); my $diff = diff($expected_shp_file, "$TMPDIR/dumper.shp"); if ( $diff ) { # ls -lL "${TMPDIR}"/dumper.shp "$_expected_shp_file" > "${TMPDIR}"/dumper.diff fail("$description: dumping loaded table", "${TMPDIR}/dumper.diff"); return 0; } } } return 1; } ################################################################## # This runs the loader once and checks the output of it. # It will NOT run if neither the expected SQL nor the expected # select results file exists, unless you pass true for the final # parameter. # # $1 - Description of this run of the loader, used for error messages. # $2 - Table name to load into. # $3 - The name of the file containing what the # SQL generated by shp2pgsql should look like. # $4 - The name of the file containing the expected results of # SELECT rast FROM _tblname should look like. # $5 - Command line options for raster2pgsql. # $6 - If you pass true, this will run the loader even if neither # of the expected results files exists (though of course # the results won't be compared with anything). ################################################################## sub run_raster_loader_and_check_output { my $description = shift; my $tblname = shift; my $expected_sql_file = shift; my $expected_select_results_file = shift; my $loader_options = shift; my $run_always = shift; # ON_ERROR_STOP is used by psql to return non-0 on an error my $psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true"; my ($cmd, $rv); my $outfile = "${TMPDIR}/loader.out"; my $errfile = "${TMPDIR}/loader.err"; if ( $run_always || -r $expected_sql_file || -r $expected_select_results_file ) { show_progress(); # Produce the output SQL file. $cmd = "$RASTER2PGSQL $loader_options ${TEST}.tif $tblname > $outfile 2> $errfile"; $rv = system($cmd); if ( $rv ) { fail("$description: running raster2pgsql", $errfile); return 0; } if ( -r $expected_sql_file ) { show_progress(); my $diff = diff($expected_sql_file, $outfile); if ( $diff ) { fail(" $description: actual SQL does not match expected.", "$outfile"); return 0; } } # Run the loader SQL script. show_progress(); $cmd = "psql $psql_opts -f $outfile $DB > $errfile 2>&1"; $rv = system($cmd); if ( $rv ) { fail(" $description: running raster2pgsql output","$errfile"); return 0; } # Run the select script (if there is one) if ( -r "${TEST}.select.sql" ) { $rv = run_simple_test("${TEST}.select.sql",$expected_select_results_file, $description); return 0 if ( ! $rv ); } } return 1; } ################################################################## # run_loader_test # # Load a shapefile with different methods, create a 'select *' SQL # test and run simple test with provided expected output. # # SHP input is ${TEST}.shp, expected output is {$TEST}.expected ################################################################## sub run_loader_test { # See if there is a custom command-line options file my $opts_file = "${TEST}.opts"; my $custom_opts=""; if ( -r $opts_file ) { open(FILE, $opts_file); my @opts = <FILE>; close(FILE); @opts = grep(!/^\s*#/, @opts); map(s/\n//, @opts); $custom_opts = join(" ", @opts); } my $tblname="loadedshp"; # If we have some expected files to compare with, run in wkt mode. if ( ! run_loader_and_check_output("wkt test", $tblname, "${TEST}-w.sql.expected", "${TEST}-w.select.expected", "-w $custom_opts") ) { return 0; } drop_table($tblname); # If we have some expected files to compare with, run in geography mode. if ( ! run_loader_and_check_output("geog test", $tblname, "${TEST}-G.sql.expected", "${TEST}-G.select.expected", "-G $custom_opts") ) { return 0; } # If we have some expected files to compare with, run the dumper and compare shape files. if ( ! run_dumper_and_check_output("dumper geog test", $tblname, "${TEST}-G.shp.expected") ) { return 0; } drop_table($tblname); # Always run in wkb ("normal") mode, even if there are no expected files to compare with. if( ! run_loader_and_check_output("wkb test", $tblname, "${TEST}.sql.expected", "${TEST}.select.expected", "$custom_opts", "true") ) { return 0; } # If we have some expected files to compare with, run the dumper and compare shape files. if( ! run_dumper_and_check_output("dumper wkb test", $tblname, "${TEST}.shp.expected") ) { return 0; } drop_table($tblname); # Some custom parameters can be incompatible with -D. if ( $custom_opts ) { # If we have some expected files to compare with, run in wkt dump mode. if ( ! run_loader_and_check_output("wkt dump test", $tblname, "${TEST}-wD.sql.expected") ) { return 0; } drop_table($tblname); # If we have some expected files to compare with, run in wkt dump mode. if ( ! run_loader_and_check_output("geog dump test", $tblname, "${TEST}-GD.sql.expected") ) { return 0; } drop_table($tblname); # If we have some expected files to compare with, run in wkb dump mode. if ( ! run_loader_and_check_output("wkb dump test", $tblname, "${TEST}-D.sql.expected") ) { return 0; } drop_table($tblname); } return 1; } ################################################################## # run_raster_loader_test ################################################################## sub run_raster_loader_test { # See if there is a custom command-line options file my $opts_file = "${TEST}.opts"; my $custom_opts=""; if ( -r $opts_file ) { open(FILE, $opts_file); my @opts = <FILE>; close(FILE); @opts = grep(!/^\s*#/, @opts); map(s/\n//, @opts); $custom_opts = join(" ", @opts); } my $tblname="loadedrast"; # If we have some expected files to compare with, run in geography mode. if ( ! run_raster_loader_and_check_output("test", $tblname, "${TEST}.sql.expected", "${TEST}.select.expected", $custom_opts, "true") ) { return 0; } drop_table($tblname); return 1; } ################################################################## # Count database objects ################################################################## sub count_db_objects { my $count = sql("WITH counts as ( select count(*) from pg_type union all select count(*) from pg_proc union all select count(*) from pg_cast union all select count(*) from pg_aggregate union all select count(*) from pg_operator union all select count(*) from pg_opclass union all select count(*) from pg_namespace where nspname NOT LIKE 'pg_%' union all select count(*) from pg_opfamily ) select sum(count) from counts"); return $count; } ################################################################## # Create the spatial database ################################################################## sub create_spatial { my ($cmd, $rv); print "Creating database '$DB' \n"; $cmd = "createdb --encoding=UTF-8 --template=template0 --lc-collate=C $DB > $REGRESS_LOG"; $rv = system($cmd); $cmd = "createlang plpgsql $DB >> $REGRESS_LOG 2>&1"; $rv = system($cmd); # Count database objects before installing anything $OBJ_COUNT_PRE = count_db_objects(); if ( $OPT_EXTENSIONS ) { prepare_spatial_extensions(); } else { prepare_spatial(); } } sub load_sql_file { my $file = shift; my $strict = shift; if ( $strict && ! -e $file ) { die "Unable to find $file\n"; } if ( -e $file ) { # ON_ERROR_STOP is used by psql to return non-0 on an error my $psql_opts = "--no-psqlrc --variable ON_ERROR_STOP=true"; my $cmd = "psql $psql_opts -Xf $file $DB >> $REGRESS_LOG 2>&1"; print " $file\n" if $VERBOSE; my $rv = system($cmd); die "\nError encountered loading $file, see $REGRESS_LOG for details\n\n" if $rv; } return 1; } # Prepare the database for spatial operations (extension method) sub prepare_spatial_extensions { print "Preparing db '${DB}' using 'CREATE EXTENSION'\n"; # ON_ERROR_STOP is used by psql to return non-0 on an error my $psql_opts = "--no-psqlrc --variable ON_ERROR_STOP=true"; my $cmd = "psql $psql_opts -c \"CREATE EXTENSION postgis\" $DB >> $REGRESS_LOG 2>&1"; my $rv = system($cmd); die "\nError encountered creating EXTENSION POSTGIS, see $REGRESS_LOG for details\n\n" if $rv; if ( $OPT_WITH_TOPO ) { $cmd = "psql $psql_opts -c \"CREATE EXTENSION postgis_topology\" $DB >> $REGRESS_LOG 2>&1"; $rv = system($cmd); die "\nError encountered creating EXTENSION POSTGIS_TOPOLOGY, see $REGRESS_LOG for details\n\n" if $rv; } return 1; } # Prepare the database for spatial operations (old method) sub prepare_spatial { print "Loading PostGIS into '${DB}' \n"; # Load postgis.sql into the database load_sql_file("${STAGED_SCRIPTS_DIR}/postgis.sql", 1); load_sql_file("${STAGED_SCRIPTS_DIR}/postgis_comments.sql", 0); if ( $OPT_WITH_TOPO ) { print "Loading Topology into '${DB}'\n"; load_sql_file("${STAGED_SCRIPTS_DIR}/topology.sql", 1); load_sql_file("${STAGED_SCRIPTS_DIR}/topology_comments.sql", 0); } if ( $OPT_WITH_RASTER ) { print "Loading Raster into '${DB}'\n"; load_sql_file("${STAGED_SCRIPTS_DIR}/rtpostgis.sql", 1); load_sql_file("${STAGED_SCRIPTS_DIR}/raster_comments.sql", 0); } if ( $OPT_WITH_SFCGAL ) { print "Loading SFCGAL into '${DB}'\n"; load_sql_file("${STAGED_SCRIPTS_DIR}/sfcgal.sql", 1); load_sql_file("${STAGED_SCRIPTS_DIR}/sfcgal_comments.sql", 0); } return 1; } # Upgrade an existing database (soft upgrade) sub upgrade_spatial { print "Upgrading PostGIS in '${DB}' \n" ; my $script = `ls ${STAGED_SCRIPTS_DIR}/postgis_upgrade_*_minor.sql`; chomp($script); if ( -e $script ) { print "Upgrading core\n"; load_sql_file($script); } else { die "$script not found\n"; } if ( $OPT_WITH_TOPO ) { my $script = `ls ${STAGED_SCRIPTS_DIR}/topology_upgrade_*_minor.sql`; chomp($script); if ( -e $script ) { print "Upgrading topology\n"; load_sql_file($script); } else { die "$script not found\n"; } } if ( $OPT_WITH_RASTER ) { my $script = `ls ${STAGED_SCRIPTS_DIR}/rtpostgis_upgrade_*_minor.sql`; chomp($script); if ( -e $script ) { print "Upgrading raster\n"; load_sql_file($script); } else { die "$script not found\n"; } } return 1; } # Upgrade an existing database (soft upgrade, extension method) sub upgrade_spatial_extensions { print "Upgrading PostGIS in '${DB}' using 'ALTER EXTENSION'\n" ; # ON_ERROR_STOP is used by psql to return non-0 on an error my $psql_opts = "--no-psqlrc --variable ON_ERROR_STOP=true"; my $cmd = "psql $psql_opts -c \"ALTER EXTENSION postgis UPDATE TO '${libver}next'\" $DB >> $REGRESS_LOG 2>&1"; my $rv = system($cmd); die "\nError encountered altering EXTENSION POSTGIS, see $REGRESS_LOG for details\n\n" if $rv; if ( $OPT_WITH_TOPO ) { my $cmd = "psql $psql_opts -c \"ALTER EXTENSION postgis_topology UPDATE TO '${libver}next'\" $DB >> $REGRESS_LOG 2>&1"; my $rv = system($cmd); die "\nError encountered altering EXTENSION POSTGIS_TOPOLOGY, see $REGRESS_LOG for details\n\n" if $rv; } return 1; } sub drop_spatial { my $ok = 1; if ( $OPT_WITH_TOPO ) { load_sql_file("${STAGED_SCRIPTS_DIR}/uninstall_topology.sql"); } if ( $OPT_WITH_RASTER ) { load_sql_file("${STAGED_SCRIPTS_DIR}/uninstall_rtpostgis.sql"); } if ( $OPT_WITH_SFCGAL ) { load_sql_file("${STAGED_SCRIPTS_DIR}/uninstall_sfcgal.sql"); } load_sql_file("${STAGED_SCRIPTS_DIR}/uninstall_postgis.sql"); return 1; } sub drop_spatial_extensions { # ON_ERROR_STOP is used by psql to return non-0 on an error my $psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true"; my $ok = 1; my ($cmd, $rv); if ( $OPT_WITH_TOPO ) { $cmd = "psql $psql_opts -c \"DROP EXTENSION postgis_topology\" $DB >> $REGRESS_LOG 2>&1"; $rv = system($cmd); $ok = 0 if $rv; } $cmd = "psql $psql_opts -c \"DROP EXTENSION postgis\" $DB >> $REGRESS_LOG 2>&1"; $rv = system($cmd); die "\nError encountered dropping EXTENSION POSTGIS, see $REGRESS_LOG for details\n\n" if $rv; return $ok; } # Drop spatial from an existing database sub uninstall_spatial { my $ok; start_test("uninstall"); if ( $OPT_EXTENSIONS ) { $ok = drop_spatial_extensions(); } else { $ok = drop_spatial(); } if ( $ok ) { show_progress(); # on to objects count $OBJ_COUNT_POST = count_db_objects(); if ( $OBJ_COUNT_POST != $OBJ_COUNT_PRE ) { fail("Object count pre-install ($OBJ_COUNT_PRE) != post-uninstall ($OBJ_COUNT_POST)"); return 0; } else { pass("($OBJ_COUNT_PRE)"); return 1; } } return 0; } sub diff { my ($expected_file, $obtained_file) = @_; my $diffstr = ''; if ( $sysdiff ) { $diffstr = `diff --strip-trailing-cr -u $expected_file $obtained_file`; return $diffstr; } open(OBT, $obtained_file) || die "Cannot open $obtained_file\n"; open(EXP, $expected_file) || die "Cannot open $expected_file\n"; my $lineno = 0; while (!eof(OBT) or !eof(EXP)) { # TODO: check for premature end of one or the other ? my $obtline=<OBT>; my $expline=<EXP>; $obtline =~ s/\r?\n$//; # Strip line endings $expline =~ s/\r?\n$//; # Strip line endings $lineno++; if ( $obtline ne $expline ) { my $diffln .= "$lineno.OBT: $obtline\n"; $diffln .= "$lineno.EXP: $expline\n"; $diffstr .= $diffln; } } close(OBT); close(EXP); return $diffstr; } ���������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/delaunaytriangles_expected������������������������������������������0000644�0000000�0000000�00000000504�12141651064�022550� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|GEOMETRYCOLLECTION(POLYGON((5 5,6 0,7 9,5 5))) 2|GEOMETRYCOLLECTION(POLYGON((5 5,6 0,8 9,5 5)),POLYGON((5 5,8 9,7 9,5 5))) 3|GEOMETRYCOLLECTION(POLYGON((5 5,6 0,7 9,5 5))) 4|MULTILINESTRING((5 5,7 9),(5 5,6 0),(6 0,7 9)) 5|TIN(((5 5,6 0,7 9,5 5))) 6|TIN(((5 5,6 0,8 9,5 5)),((5 5,8 9,7 9,5 5))) 7|TIN(((5 5,6 0,7 9,5 5))) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-compoundcurve.sql��������������������������������������������0000644�0000000�0000000�00000057321�12220405345�022055� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT 'ndims01', ST_NDims(ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2, 2 0 0 0, 0 0 0 0))')); SELECT 'geometrytype01', geometrytype(ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2, 2 0 0 0, 0 0 0 0))')); SELECT 'ndims02', ST_NDims(ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1, 2 0 0, 0 0 0))')); SELECT 'geometrytype02', geometrytype(ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1, 2 0 0, 0 0 0))')); SELECT 'ndims03', ST_NDims(ST_Geomfromewkt('COMPOUNDCURVEM(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 2, 2 0 0, 0 0 0))')); SELECT 'geometrytype03', geometrytype(ST_Geomfromewkt('COMPOUNDCURVEM(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 2, 2 0 0, 0 0 0))')); SELECT 'ndims04', ST_NDims(ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097), (0.5857864376269049511983112757903 1.4142135623730950488016887242097, 2 0, 0 0))')); SELECT 'geometrytype04', geometrytype(ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097), (0.5857864376269049511983112757903 1.4142135623730950488016887242097, 2 0, 0 0))')); -- Repeat tests with new function names. SELECT 'ndims01', ST_NDims(ST_geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2, 2 0 0 0, 0 0 0 0))')); SELECT 'geometrytype01', geometrytype(ST_geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2, 2 0 0 0, 0 0 0 0))')); SELECT 'ndims02', ST_NDims(ST_geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1, 2 0 0, 0 0 0))')); SELECT 'geometrytype02', geometrytype(ST_geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1, 2 0 0, 0 0 0))')); SELECT 'ndims03', ST_NDims(ST_geomfromewkt('COMPOUNDCURVEM(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 2, 2 0 0, 0 0 0))')); SELECT 'geometrytype03', geometrytype(ST_geomfromewkt('COMPOUNDCURVEM(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 2, 2 0 0, 0 0 0))')); SELECT 'ndims04', ST_NDims(ST_geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097), (0.5857864376269049511983112757903 1.4142135623730950488016887242097, 2 0, 0 0))')); SELECT 'geometrytype04', geometrytype(ST_geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097), (0.5857864376269049511983112757903 1.4142135623730950488016887242097, 2 0, 0 0))')); CREATE TABLE public.compoundcurve (id INTEGER, description VARCHAR, the_geom_2d GEOMETRY(COMPOUNDCURVE), the_geom_3dm GEOMETRY(COMPOUNDCURVEM), the_geom_3dz GEOMETRY(COMPOUNDCURVEZ), the_geom_4d GEOMETRY(COMPOUNDCURVEZM) ); INSERT INTO public.compoundcurve ( id, description ) VALUES ( 2, 'compoundcurve'); UPDATE public.compoundcurve SET the_geom_4d = ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2, 2 0 0 0, 0 0 0 0))'); UPDATE public.compoundcurve SET the_geom_3dz = ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 1, 2 0 0, 0 0 0))'); UPDATE public.compoundcurve SET the_geom_3dm = ST_Geomfromewkt('COMPOUNDCURVEM(CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2), (0.5857864376269049511983112757903 1.4142135623730950488016887242097 2, 2 0 0, 0 0 0))'); UPDATE public.compoundcurve SET the_geom_2d = ST_Geomfromewkt('COMPOUNDCURVE(CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097), (0.5857864376269049511983112757903 1.4142135623730950488016887242097, 2 0, 0 0))'); SELECT 'astext01', ST_Astext(the_geom_2d) FROM public.compoundcurve; SELECT 'astext02', ST_Astext(the_geom_3dm) FROM public.compoundcurve; SELECT 'astext03', ST_Astext(the_geom_3dz) FROM public.compoundcurve; SELECT 'astext04', ST_Astext(the_geom_4d) FROM public.compoundcurve; SELECT 'asewkt01', ST_Asewkt(the_geom_2d) FROM public.compoundcurve; SELECT 'asewkt02', ST_Asewkt(the_geom_3dm) FROM public.compoundcurve; SELECT 'asewkt03', ST_Asewkt(the_geom_3dz) FROM public.compoundcurve; SELECT 'asewkt04', ST_Asewkt(the_geom_4d) FROM public.compoundcurve; -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(asbinary(the_geom_2d), 'hex') FROM public.compoundcurve; --SELECT 'asbinary02', encode(asbinary(the_geom_3dm), 'hex') FROM public.compoundcurve; --SELECT 'asbinary03', encode(asbinary(the_geom_3dz), 'hex') FROM public.compoundcurve; --SELECT 'asbinary04', encode(asbinary(the_geom_4d), 'hex') FROM public.compoundcurve; -- --SELECT 'asewkb01', encode(asewkb(the_geom_2d), 'hex') FROM public.compoundcurve; --SELECT 'asewkb02', encode(asewkb(the_geom_3dm), 'hex') FROM public.compoundcurve; --SELECT 'asewkb03', encode(asewkb(the_geom_3dz), 'hex') FROM public.compoundcurve; --SELECT 'asewkb04', encode(asewkb(the_geom_4d), 'hex') FROM public.compoundcurve; SELECT 'ST_CurveToLine-201', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine-202', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine-203', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine-204', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine-401', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine-402', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine-403', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine-404', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine01', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine02', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine03', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'ST_CurveToLine04', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; -- Removed due to discrepencies between hardware --SELECT 'box2d01', box2d(the_geom_2d) FROM public.compoundcurve; --SELECT 'box2d02', box2d(the_geom_3dm) FROM public.compoundcurve; --SELECT 'box2d03', box2d(the_geom_3dz) FROM public.compoundcurve; --SELECT 'box2d04', box2d(the_geom_4d) FROM public.compoundcurve; --SELECT 'box3d01', box3d(the_geom_2d) FROM public.compoundcurve; --SELECT 'box3d02', box3d(the_geom_3dm) FROM public.compoundcurve; --SELECT 'box3d03', box3d(the_geom_3dz) FROM public.compoundcurve; --SELECT 'box3d04', box3d(the_geom_4d) FROM public.compoundcurve; -- SELECT 'isValid01', isValid(the_geom_2d) FROM public.compoundcurve; -- SELECT 'isValid02', isValid(the_geom_3dm) FROM public.compoundcurve; -- SELECT 'isValid03', isValid(the_geom_3dz) FROM public.compoundcurve; -- SELECT 'isValid04', isValid(the_geom_4d) FROM public.compoundcurve; -- SELECT 'dimension01', dimension(the_geom_2d) FROM public.compoundcurve; -- SELECT 'dimension02', dimension(the_geom_3dm) FROM public.compoundcurve; -- SELECT 'dimension03', dimension(the_geom_3dz) FROM public.compoundcurve; -- SELECT 'dimension04', dimension(the_geom_4d) FROM public.compoundcurve; -- SELECT 'SRID01', ST_SRID(the_geom_2d) FROM public.compoundcurve; -- SELECT 'SRID02', ST_SRID(the_geom_3dm) FROM public.compoundcurve; -- SELECT 'SRID03', ST_SRID(the_geom_3dz) FROM public.compoundcurve; -- SELECT 'SRID04', ST_SRID(the_geom_4d) FROM public.compoundcurve; -- SELECT 'accessor01', isEmpty(the_geom_2d), isSimple(the_geom_2d), isClosed(the_geom_2d), isRing(the_geom_2d) FROM public.compoundcurve; -- SELECT 'accessor02', isEmpty(the_geom_3dm), isSimple(the_geom_3dm), isClosed(the_geom_3dm), isRing(the_geom_3dm) FROM public.compoundcurve; -- SELECT 'accessor03', isEmpty(the_geom_3dz), isSimple(the_geom_3dz), isClosed(the_geom_3dz), isRing(the_geom_3dz) FROM public.compoundcurve; -- SELECT 'accessor04', isEmpty(the_geom_4d), isSimple(the_geom_4d), isClosed(the_geom_4d), isRing(the_geom_4d) FROM public.compoundcurve; -- SELECT 'envelope01', ST_AsText(ST_SnapToGrid(envelope(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; -- SELECT 'envelope02', ST_AsText(ST_SnapToGrid(envelope(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; -- SELECT 'envelope03', ST_AsText(ST_SnapToGrid(envelope(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; -- SELECT 'envelope04', ST_AsText(ST_SnapToGrid(envelope(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; -- TODO: ST_SnapToGrid is required to remove platform dependent precision -- issues. Until ST_SnapToGrid is updated to work against curves, these -- tests cannot be run. --SELECT 'ST_LineToCurve', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_2d))) FROM public.compoundcurve; --SELECT 'ST_LineToCurve', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dm))) FROM public.compoundcurve; --SELECT 'ST_LineToCurve', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dz))) FROM public.compoundcurve; --SELECT 'ST_LineToCurve', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_4d))) FROM public.compoundcurve; -- Repeat tests on new function names. SELECT 'astext01', ST_astext(the_geom_2d) FROM public.compoundcurve; SELECT 'astext02', ST_astext(the_geom_3dm) FROM public.compoundcurve; SELECT 'astext03', ST_astext(the_geom_3dz) FROM public.compoundcurve; SELECT 'astext04', ST_astext(the_geom_4d) FROM public.compoundcurve; SELECT 'asewkt01', ST_asewkt(the_geom_2d) FROM public.compoundcurve; SELECT 'asewkt02', ST_asewkt(the_geom_3dm) FROM public.compoundcurve; SELECT 'asewkt03', ST_asewkt(the_geom_3dz) FROM public.compoundcurve; SELECT 'asewkt04', ST_asewkt(the_geom_4d) FROM public.compoundcurve; --SELECT 'asbinary01', encode(ST_asbinary(the_geom_2d), 'hex') FROM public.compoundcurve; --SELECT 'asbinary02', encode(ST_asbinary(the_geom_3dm), 'hex') FROM public.compoundcurve; --SELECT 'asbinary03', encode(ST_asbinary(the_geom_3dz), 'hex') FROM public.compoundcurve; --SELECT 'asbinary04', encode(ST_asbinary(the_geom_4d), 'hex') FROM public.compoundcurve; -- --SELECT 'asewkb01', encode(ST_asewkb(the_geom_2d), 'hex') FROM public.compoundcurve; --SELECT 'asewkb02', encode(ST_asewkb(the_geom_3dm), 'hex') FROM public.compoundcurve; --SELECT 'asewkb03', encode(ST_asewkb(the_geom_3dz), 'hex') FROM public.compoundcurve; --SELECT 'asewkb04', encode(ST_asewkb(the_geom_4d), 'hex') FROM public.compoundcurve; -- Removed due to discrepencies between hardware --SELECT 'box2d01', ST_box2d(the_geom_2d) FROM public.compoundcurve; --SELECT 'box2d02', ST_box2d(the_geom_3dm) FROM public.compoundcurve; --SELECT 'box2d03', ST_box2d(the_geom_3dz) FROM public.compoundcurve; --SELECT 'box2d04', ST_box2d(the_geom_4d) FROM public.compoundcurve; --SELECT 'box3d01', ST_box3d(the_geom_2d) FROM public.compoundcurve; --SELECT 'box3d02', ST_box3d(the_geom_3dm) FROM public.compoundcurve; --SELECT 'box3d03', ST_box3d(the_geom_3dz) FROM public.compoundcurve; --SELECT 'box3d04', ST_box3d(the_geom_4d) FROM public.compoundcurve; SELECT 'isValid01', ST_isValid(the_geom_2d) FROM public.compoundcurve; SELECT 'isValid02', ST_isValid(the_geom_3dm) FROM public.compoundcurve; SELECT 'isValid03', ST_isValid(the_geom_3dz) FROM public.compoundcurve; SELECT 'isValid04', ST_isValid(the_geom_4d) FROM public.compoundcurve; SELECT 'dimension01', ST_dimension(the_geom_2d) FROM public.compoundcurve; SELECT 'dimension02', ST_dimension(the_geom_3dm) FROM public.compoundcurve; SELECT 'dimension03', ST_dimension(the_geom_3dz) FROM public.compoundcurve; SELECT 'dimension04', ST_dimension(the_geom_4d) FROM public.compoundcurve; SELECT 'SRID01', ST_SRID(the_geom_2d) FROM public.compoundcurve; SELECT 'SRID02', ST_SRID(the_geom_3dm) FROM public.compoundcurve; SELECT 'SRID03', ST_SRID(the_geom_3dz) FROM public.compoundcurve; SELECT 'SRID04', ST_SRID(the_geom_4d) FROM public.compoundcurve; SELECT 'accessor01', ST_isEmpty(the_geom_2d), ST_isSimple(the_geom_2d), ST_isClosed(the_geom_2d), ST_isRing(the_geom_2d) FROM public.compoundcurve; SELECT 'accessor02', ST_isEmpty(the_geom_3dm), ST_isSimple(the_geom_3dm), ST_isClosed(the_geom_3dm), ST_isRing(the_geom_3dm) FROM public.compoundcurve; SELECT 'accessor03', ST_isEmpty(the_geom_3dz), ST_isSimple(the_geom_3dz), ST_isClosed(the_geom_3dz), ST_isRing(the_geom_3dz) FROM public.compoundcurve; SELECT 'accessor04', ST_isEmpty(the_geom_4d), ST_isSimple(the_geom_4d), ST_isClosed(the_geom_4d), ST_isRing(the_geom_4d) FROM public.compoundcurve; SELECT 'envelope01', ST_asText(ST_snapToGrid(ST_envelope(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'envelope02', ST_asText(ST_snapToGrid(ST_envelope(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'envelope03', ST_asText(ST_snapToGrid(ST_envelope(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT 'envelope04', ST_asText(ST_snapToGrid(ST_envelope(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.compoundcurve; SELECT DropGeometryColumn('public', 'compoundcurve', 'the_geom_4d'); SELECT DropGeometryColumn('public', 'compoundcurve', 'the_geom_3dz'); SELECT DropGeometryColumn('public', 'compoundcurve', 'the_geom_3dm'); SELECT DropGeometryColumn('public', 'compoundcurve', 'the_geom_2d'); DROP TABLE public.compoundcurve; SELECT 'valid wkt compound curve 1', encode(ST_AsBinary(ST_GeomFromEWKT('COMPOUNDCURVE((153.72942375 -27.21757040, 152.29285719 -29.23940482, 154.74034096 -30.51635287),(154.74034096 -30.51635287, 152.39926953 -32.16574411, 155.11278414 -34.08116619, 151.86720784 -35.62414508))'),'ndr'),'hex'); SELECT 'valid wkt compound curve 2', encode(ST_AsBinary(ST_GeomFromEWKT('COMPOUNDCURVE((153.72942375 -27.21757040, 152.29285719 -29.23940482, 154.74034096 -30.51635287, 152.39926953 -32.16574411, 155.11278414 -34.08116619, 151.86720784 -35.62414508))'),'ndr'),'hex'); SELECT 'valid wkt compound curve 3', encode(ST_AsBinary(ST_GeomFromEWKT('COMPOUNDCURVE((151.60117699 -27.32398274, 151.22873381 -35.94338210, 150.74987829 -27.80283826))'),'ndr'),'hex'); SELECT 'valid wkt compound curve 4', encode(ST_AsBinary(ST_GeomFromEWKT('COMPOUNDCURVE((153.72942375 -27.21757040, 152.29285719 -29.23940482, 154.74034096 -30.51635287),CIRCULARSTRING(154.74034096 -30.51635287, 154.74034096 -30.51635287, 152.39926953 -32.16574411, 155.11278414 -34.08116619, 151.86720784 -35.62414508))'),'ndr'),'hex'); SELECT 'valid wkt compound curve 5', encode(ST_AsBinary(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(157.87950492 -27.59001358, 156.01728901 -28.28169378, 155.59163966 -26.52589021),(155.59163966 -26.52589021, 153.72942375 -27.21757040, 152.29285719 -29.23940482, 154.74034096 -30.51635287),CIRCULARSTRING(154.74034096 -30.51635287, 154.74034096 -30.51635287, 152.39926953 -32.16574411, 155.11278414 -34.08116619, 151.86720784 -35.62414508))'),'ndr'),'hex'); SELECT 'invalid wkt compound curve 1', ST_GeomFromEWKT('COMPOUNDCURVE((153.72942375 -27.21757040, 152.29285719 -29.23940482, 154.74034096 -30.51635287),(152.39926953 -32.16574411, 155.11278414 -34.08116619, 151.86720784 -35.62414508))'); SELECT 'invalid wkt compound curve 2', ST_GeomFromEWKT('COMPOUNDCURVE((153.72942375 -27.21757040, 152.29285719 -29.23940482),CIRCULARSTRING(154.74034096 -30.51635287, 154.74034096 -30.51635287, 152.39926953 -32.16574411, 155.11278414 -34.08116619, 151.86720784 -35.62414508))'); SELECT 'invalid wkt compound curve 3', ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(157.87950492 -27.59001358, 156.01728901 -28.28169378, 155.59163966 -26.52589021, 153.72942375 -27.21757040),(153.72942375 -27.21757040, 152.29285719 -29.23940482),CIRCULARSTRING(154.74034096 -30.51635287, 154.74034096 -30.51635287, 152.39926953 -32.16574411, 155.11278414 -34.08116619, 151.86720784 -35.62414508))'); SELECT 'valid wkb compound curve 1', ST_asEWKT(ST_GeomFromEWKB(decode('0109000000020000000102000000030000009FE5797057376340E09398B1B2373BC05AAE0A165F0963409F6760A2493D3DC0DB6286DFB057634082D8A1B32F843EC0010200000004000000DB6286DFB057634082D8A1B32F843EC075B4E4D0C60C634031FA5D1A371540C0D7197CED9B636340A3CB59A7630A41C050F4A72AC0FB6240974769FCE3CF41C0', 'hex'))); SELECT 'valid wkb compound curve 2', ST_asEWKT(ST_GeomFromEWKB(decode('0109000000010000000102000000060000009FE5797057376340E09398B1B2373BC05AAE0A165F0963409F6760A2493D3DC0DB6286DFB057634082D8A1B32F843EC075B4E4D0C60C634031FA5D1A371540C0D7197CED9B636340A3CB59A7630A41C050F4A72AC0FB6240974769FCE3CF41C0', 'hex'))); SELECT 'valid wkb compound curve 3', ST_asEWKT(ST_GeomFromEWKB(decode('0109000000010000000102000000030000000CE586D73CF36240BBC46888F0523BC0102E91C951E76240DF90A1BEC0F841C0F970C100FFD7624074ADE6CE86CD3BC0', 'hex'))); SELECT 'valid wkb compound curve 4', ST_asEWKT(ST_GeomFromEWKB(decode('0109000000020000000102000000030000009FE5797057376340E09398B1B2373BC05AAE0A165F0963409F6760A2493D3DC0DB6286DFB057634082D8A1B32F843EC0010800000005000000DB6286DFB057634082D8A1B32F843EC0DB6286DFB057634082D8A1B32F843EC075B4E4D0C60C634031FA5D1A371540C0D7197CED9B636340A3CB59A7630A41C050F4A72AC0FB6240974769FCE3CF41C0', 'hex'))); SELECT 'valid wkb compound curve 5', ST_asEWKT(ST_GeomFromEWKB(decode('010900000003000000010800000003000000468280E724BC6340BF4B46210B973BC0F890AEA18D8063402D9664151D483CC0EED64BB6EE726340903CA5BDA0863AC0010200000004000000EED64BB6EE726340903CA5BDA0863AC09FE5797057376340E09398B1B2373BC05AAE0A165F0963409F6760A2493D3DC0DB6286DFB057634082D8A1B32F843EC0010800000005000000DB6286DFB057634082D8A1B32F843EC0DB6286DFB057634082D8A1B32F843EC075B4E4D0C60C634031FA5D1A371540C0D7197CED9B636340A3CB59A7630A41C050F4A72AC0FB6240974769FCE3CF41C0', 'hex'))); SELECT 'null response', ST_NumPoints(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0))')); SELECT 'minpoints issues - pass', encode(ST_AsBinary(ST_GeomFromText('COMPOUNDCURVE((0 0,1 1))'),'ndr'),'hex'); SELECT 'minpoints issues - pass', encode(ST_AsBinary(ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 0,0 1,1 1))'),'ndr'),'hex'); SELECT 'minpoints issues - fail', ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1))'); SELECT 'minpoints issues - fail', ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 0))'); SELECT 'minpoints issues - fail', ST_GeomFromText('COMPOUNDCURVE((0 0),(0 0,1 1))'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/unaryunion.sql������������������������������������������������������0000644�0000000�0000000�00000001026�11722777314�020174� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� -- Noding a multilinestring SELECT 1, ST_AsText(ST_UnaryUnion('MULTILINESTRING((0 0, 10 0), (5 -5, 5 5))')); -- Unioning a set of polygons (CascadedUnion) SELECT 2, ST_AsText(ST_UnaryUnion('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),POLYGON((5 5, 15 5, 15 15, 5 15, 5 5)))')); -- Unioning an heterogeneous collection of geometries SELECT 3, ST_AsText(ST_UnaryUnion('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),POLYGON((5 5, 15 5, 15 15, 5 15, 5 5)), MULTIPOINT(5 4, -5 4),LINESTRING(2 -10, 2 20))')); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/polyhedralsurface.sql�����������������������������������������������0000644�0000000�0000000�00000005030�11722777314�021500� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- ST_Dimension on 2D: not closed SELECT 'dimension_01', ST_Dimension('POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0)))'::geometry); SELECT 'dimension_02', ST_Dimension('GEOMETRYCOLLECTION(POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0))))'::geometry); -- ST_Dimension on 3D: closed SELECT 'dimension_03', ST_Dimension('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))'::geometry); SELECT 'dimension_04', ST_Dimension('GEOMETRYCOLLECTION(POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0))))'::geometry); -- ST_Dimension on 4D: closed SELECT 'dimension_05', ST_Dimension('POLYHEDRALSURFACE(((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))'::geometry); SELECT 'dimension_06', ST_Dimension('GEOMETRYCOLLECTION(POLYHEDRALSURFACE(((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0))))'::geometry); -- ST_Dimension on 3D: invalid polyedron (a single edge is shared 3 times) SELECT 'dimension_07', ST_Dimension('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,0 1 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))'::geometry); -- ST_Dimension on 3D: invalid polyedron (redundant point inside each face) SELECT 'dimension_08', ST_Dimension('POLYHEDRALSURFACE(((0 0 0,1 0 0,1 0 0,0 0 0)),((0 0 1,1 0 1,1 0 1,0 0 1)),((0 0 2,1 0 2,1 0 2,0 0 2)),((0 0 3,1 0 3,1 0 3,0 0 3)))'::geometry); -- ST_NumPatches SELECT 'numpatches_01', ST_NumPatches('POLYHEDRALSURFACE EMPTY'::geometry); SELECT 'numpatches_02', ST_NumPatches('POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0)))'::geometry); SELECT 'numpatches_03', ST_NumPatches('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))'::geometry); -- ST_PatchN SELECT 'patchN_01', ST_AsEWKT(ST_patchN('POLYHEDRALSURFACE EMPTY'::geometry, 1)); SELECT 'patchN_02', ST_AsEWKT(ST_patchN('POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0)))'::geometry, 1)); SELECT 'patchN_03', ST_AsEWKT(ST_patchN('POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0)))'::geometry, 0)); SELECT 'patchN_04', ST_AsEWKT(ST_patchN('POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0)))'::geometry, 2)); SELECT 'patchN_05', ST_AsEWKT(ST_patchN('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))'::geometry, 2)); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_selectivity.sql���������������������������������������������0000644�0000000�0000000�00000004256�12057713602�022063� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� -- Check for error messages create table no_stats ( g geometry, id integer ); create table no_stats_join ( g geometry, id integer ); select _postgis_selectivity('no_stats','g', 'LINESTRING(0 0, 1 1)'); select _postgis_stats('no_stats','g'); select _postgis_join_selectivity('no_stats', 'g', 'no_stats_join', 'g'); insert into no_stats (g, id) values ('POINT(0 0)', 0); analyze no_stats; select _postgis_join_selectivity('no_stats', 'g', 'no_stats_join', 'g'); drop table no_stats; drop table no_stats_join; -- Table with uniformly variable density, highest at 1,1, lowest at 10,10 create table regular_overdots as with ij as ( select i, j from generate_series(1, 10) i, generate_series(1, 10) j), iijj as (select generate_series(1, i) as a, generate_series(1, j) b from ij) select st_makepoint(a, b) as g from iijj; -- Generate the stats analyze regular_overdots; -- Baseline info select 'selectivity_00', count(*) from regular_overdots; -- First test select 'selectivity_01', count(*) from regular_overdots where g && 'LINESTRING(0 0, 11 3.5)'; select 'selectivity_02', 'actual', round(1068.0/2127.0,3); select 'selectivity_03', 'estimated', round(_postgis_selectivity('regular_overdots','g','LINESTRING(0 0, 11 3.5)')::numeric,3); -- Second test select 'selectivity_04', count(*) from regular_overdots where g && 'LINESTRING(5.5 5.5, 11 11)'; select 'selectivity_05', 'actual', round(161.0/2127.0,3); select 'selectivity_06', 'estimated', round(_postgis_selectivity('regular_overdots','g','LINESTRING(5.5 5.5, 11 11)')::numeric,3); -- Third test select 'selectivity_07', count(*) from regular_overdots where g && 'LINESTRING(1.5 1.5, 2.5 2.5)'; select 'selectivity_08', 'actual', round(81.0/2127.0,3); select 'selectivity_09', 'estimated', round(_postgis_selectivity('regular_overdots','g','LINESTRING(1.5 1.5, 2.5 2.5)')::numeric,3); -- Fourth test select 'selectivity_10', 'actual', 0; select 'selectivity_09', 'estimated', _postgis_selectivity('regular_overdots','g','LINESTRING(11 11, 12 12)'); -- Fifth test select 'selectivity_10', 'actual', 1; select 'selectivity_09', 'estimated', _postgis_selectivity('regular_overdots','g','LINESTRING(0 0, 12 12)'); -- Clean drop table if exists regular_overdots; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_sfcgal.sql��������������������������������������������������0000644�0000000�0000000�00000003013�12143217372�020743� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- Regression tests for PostGIS SFCGAL backend --- -- We only care about testing PostGIS prototype here -- Behaviour is already handled by SFCGAL own tests SELECT 'postgis_sfcgal_version', count(*) FROM (SELECT postgis_sfcgal_version()) AS f; SELECT 'ST_Tesselate', ST_AsText(ST_Tesselate('GEOMETRYCOLLECTION(POINT(4 4),POLYGON((0 0,1 0,1 1,0 1,0 0)))')); SELECT 'ST_3DArea', ST_3DArea('POLYGON((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0))'); SELECT 'ST_Extrude_point', ST_AsText(ST_Extrude('POINT(0 0)', 1, 0, 0)); SELECT 'ST_Extrude_line', ST_AsText(ST_Extrude(ST_Extrude('POINT(0 0)', 1, 0, 0), 0, 1, 0)); SELECT 'ST_Extrude_surface', ST_AsText(ST_Extrude(ST_Extrude(ST_Extrude('POINT(0 0)', 1, 0, 0), 0, 1, 0), 0, 0, 1)); SELECT 'ST_ForceLHR', ST_AsText(ST_ForceLHR('POLYGON((0 0,0 1,1 1,1 0,0 0))')); SELECT 'ST_Orientation_1', ST_Orientation(ST_ForceLHR('POLYGON((0 0,0 1,1 1,1 0,0 0))')); SELECT 'ST_Orientation_2', ST_Orientation(ST_ForceRHR('POLYGON((0 0,0 1,1 1,1 0,0 0))')); SELECT 'ST_MinkowskiSum', ST_AsText(ST_MinkowskiSum('LINESTRING(0 0,4 0)','POLYGON((0 0,1 0,1 1,0 1,0 0))')); SELECT 'ST_StraightSkeleton', ST_AsText(ST_StraightSkeleton('POLYGON((0 0,1 0,1 1,0 1,0 0))')); -- Backend switch tests SET postgis.backend = 'geos'; SELECT 'intersection_geos', ST_astext(ST_intersection('LINESTRING(0 10, 0 -10)', 'LINESTRING(0 0, 1 1)')); SET postgis.backend = 'sfcgal'; SELECT 'intersection_sfcgal', ST_astext(ST_intersection('LINESTRING(0 10, 0 -10)', 'LINESTRING(0 0, 1 1)')); SET postgis.backend = 'foo'; SET postgis.backend = ''; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-curvepoly.sql������������������������������������������������0000644�0000000�0000000�00000061733�12274345516�021232� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat tests with new function names. SELECT 'ndims01', ST_ndims(ST_geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2))')); SELECT 'geometrytype01', geometrytype(ST_geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2))')); SELECT 'ndims02', ST_ndims(ST_geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1))')); SELECT 'geometrytype02', geometrytype(ST_geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1))')); SELECT 'ndims03', ST_ndims(ST_geomfromewkt('CURVEPOLYGONM(CIRCULARSTRING( -2 0 0, -1 -1 2, 0 0 4, 1 -1 6, 2 0 8, 0 2 4, -2 0 0), (-1 0 2, 0 0.5 4, 1 0 6, 0 1 4, -1 0 2))')); SELECT 'geometrytype03', geometrytype(ST_geomfromewkt('CURVEPOLYGONM(CIRCULARSTRING( -2 0 0, -1 -1 2, 0 0 4, 1 -1 6, 2 0 8, 0 2 4, -2 0 0), (-1 0 2, 0 0.5 4, 1 0 6, 0 1 4, -1 0 2))')); SELECT 'ndims04', ST_ndims(ST_geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0))')); SELECT 'geometrytype04', geometrytype(ST_geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0))')); SELECT 'ndims05', ST_Ndims(ST_geomfromewkt('CURVEPOLYGON( COMPOUNDCURVE( (5 5 1 0,5 0 1 1,0 0 1 2,0 5 1 3), CIRCULARSTRING(0 5 1 3,1.5 7.5 1 4,5 5 1 0)), (1.5 5 2 0,2.5 6 3 1,3.5 5 2 2,1.5 5 2 0), COMPOUNDCURVE( CIRCULARSTRING(1.5 2 2 0,1 2.5 3 1,3.5 2 2 2), (3.5 2 2 2,3.5 4 1 3,1.5 4 1 4,1.5 2 2 0)))')); CREATE TABLE public.curvepolygon (id INTEGER, description VARCHAR, the_geom_2d GEOMETRY(CURVEPOLYGON), the_geom_3dm GEOMETRY(CURVEPOLYGONM), the_geom_3dz GEOMETRY(CURVEPOLYGONZ), the_geom_4d GEOMETRY(CURVEPOLYGONZM)); INSERT INTO public.curvepolygon ( id, description ) VALUES ( 1, 'curvepolygon'); UPDATE public.curvepolygon SET the_geom_4d = ST_Geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0 0 0, -1 -1 1 2, 0 0 2 4, 1 -1 3 6, 2 0 4 8, 0 2 2 4, -2 0 0 0), (-1 0 1 2, 0 0.5 2 4, 1 0 3 6, 0 1 3 4, -1 0 1 2))'); UPDATE public.curvepolygon SET the_geom_3dz = ST_Geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0 0, -1 -1 1, 0 0 2, 1 -1 3, 2 0 4, 0 2 2, -2 0 0), (-1 0 1, 0 0.5 2, 1 0 3, 0 1 3, -1 0 1))'); UPDATE public.curvepolygon SET the_geom_3dm = ST_Geomfromewkt('CURVEPOLYGONM(CIRCULARSTRING( -2 0 0, -1 -1 2, 0 0 4, 1 -1 6, 2 0 8, 0 2 4, -2 0 0), (-1 0 2, 0 0.5 4, 1 0 6, 0 1 4, -1 0 2))'); UPDATE public.curvepolygon SET the_geom_2d = ST_Geomfromewkt('CURVEPOLYGON(CIRCULARSTRING( -2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0))'); -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(asbinary(the_geom_2d), 'hex') FROM public.curvepolygon; --SELECT 'asbinary02', encode(asbinary(the_geom_3dm), 'hex') FROM public.curvepolygon; --SELECT 'asbinary03', encode(asbinary(the_geom_3dz), 'hex') FROM public.curvepolygon; --SELECT 'asbinary04', encode(asbinary(the_geom_4d), 'hex') FROM public.curvepolygon; -- --SELECT 'asewkb01', encode(asewkb(the_geom_2d), 'hex') FROM public.curvepolygon; --SELECT 'asewkb02', encode(asewkb(the_geom_3dm), 'hex') FROM public.curvepolygon; --SELECT 'asewkb03', encode(asewkb(the_geom_3dz), 'hex') FROM public.curvepolygon; --SELECT 'asewkb04', encode(asewkb(the_geom_4d), 'hex') FROM public.curvepolygon; SELECT 'ST_CurveToLine-201',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine-202',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine-203',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine-204',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine-401',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine-402',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine-403',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine-404',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine01',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine02',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine03',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'ST_CurveToLine04',ST_asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; -- Removed due to descrepencies between hardware --SELECT 'box2d01', box2d(the_geom_2d) FROM public.curvepolygon; --SELECT 'box2d02', box2d(the_geom_3dm) FROM public.curvepolygon; --SELECT 'box2d03', box2d(the_geom_3dz) FROM public.curvepolygon; --SELECT 'box2d04', box2d(the_geom_4d) FROM public.curvepolygon; --SELECT 'box3d01', box3d(the_geom_2d) FROM public.curvepolygon; --SELECT 'box3d02', box3d(the_geom_3dm) FROM public.curvepolygon; --SELECT 'box3d03', box3d(the_geom_3dz) FROM public.curvepolygon; --SELECT 'box3d04', box3d(the_geom_4d) FROM public.curvepolygon; -- TODO: ST_SnapToGrid is required to remove platform dependent precision -- issues. Until ST_SnapToGrid is updated to work against curves, these -- tests cannot be run. --SELECT 'ST_LineToCurve01',ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_2d))) FROM public.curvepolygon; --SELECT 'ST_LineToCurve02',ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dm))) FROM public.curvepolygon; --SELECT 'ST_LineToCurve03',ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dz))) FROM public.curvepolygon; --SELECT 'ST_LineToCurve04',ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_4d))) FROM public.curvepolygon; -- Repeat tests with new function names. SELECT 'astext01', ST_astext(the_geom_2d) FROM public.curvepolygon; SELECT 'astext02', ST_astext(the_geom_3dm) FROM public.curvepolygon; SELECT 'astext03', ST_astext(the_geom_3dz) FROM public.curvepolygon; SELECT 'astext04', ST_astext(the_geom_4d) FROM public.curvepolygon; SELECT 'asewkt01', ST_asewkt(the_geom_2d) FROM public.curvepolygon; SELECT 'asewkt02', ST_asewkt(the_geom_3dm) FROM public.curvepolygon; SELECT 'asewkt03', ST_asewkt(the_geom_3dz) FROM public.curvepolygon; SELECT 'asewkt04', ST_asewkt(the_geom_4d) FROM public.curvepolygon; -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(ST_asbinary(the_geom_2d), 'hex') FROM public.curvepolygon; --SELECT 'asbinary02', encode(ST_asbinary(the_geom_3dm), 'hex') FROM public.curvepolygon; --SELECT 'asbinary03', encode(ST_asbinary(the_geom_3dz), 'hex') FROM public.curvepolygon; --SELECT 'asbinary04', encode(ST_asbinary(the_geom_4d), 'hex') FROM public.curvepolygon; -- --SELECT 'asewkb01', encode(ST_asewkb(the_geom_2d), 'hex') FROM public.curvepolygon; --SELECT 'asewkb02', encode(ST_asewkb(the_geom_3dm), 'hex') FROM public.curvepolygon; --SELECT 'asewkb03', encode(ST_asewkb(the_geom_3dz), 'hex') FROM public.curvepolygon; --SELECT 'asewkb04', encode(ST_asewkb(the_geom_4d), 'hex') FROM public.curvepolygon; -- Removed due to descrepencies between hardware --SELECT 'box2d01', ST_box2d(the_geom_2d) FROM public.curvepolygon; --SELECT 'box2d02', ST_box2d(the_geom_3dm) FROM public.curvepolygon; --SELECT 'box2d03', ST_box2d(the_geom_3dz) FROM public.curvepolygon; --SELECT 'box2d04', ST_box2d(the_geom_4d) FROM public.curvepolygon; --SELECT 'box3d01', ST_box3d(the_geom_2d) FROM public.curvepolygon; --SELECT 'box3d02', ST_box3d(the_geom_3dm) FROM public.curvepolygon; --SELECT 'box3d03', ST_box3d(the_geom_3dz) FROM public.curvepolygon; --SELECT 'box3d04', ST_box3d(the_geom_4d) FROM public.curvepolygon; SELECT 'isValid01', ST_isValid(the_geom_2d) FROM public.curvepolygon; SELECT 'isValid02', ST_isValid(the_geom_3dm) FROM public.curvepolygon; SELECT 'isValid03', ST_isValid(the_geom_3dz) FROM public.curvepolygon; SELECT 'isValid04', ST_isValid(the_geom_4d) FROM public.curvepolygon; SELECT 'dimension01', ST_dimension(the_geom_2d) FROM public.curvepolygon; SELECT 'dimension02', ST_dimension(the_geom_3dm) FROM public.curvepolygon; SELECT 'dimension03', ST_dimension(the_geom_3dz) FROM public.curvepolygon; SELECT 'dimension04', ST_dimension(the_geom_4d) FROM public.curvepolygon; SELECT 'SRID01', ST_SRID(the_geom_2d) FROM public.curvepolygon; SELECT 'SRID02', ST_SRID(the_geom_3dm) FROM public.curvepolygon; SELECT 'SRID03', ST_SRID(the_geom_3dz) FROM public.curvepolygon; SELECT 'SRID04', ST_SRID(the_geom_4d) FROM public.curvepolygon; SELECT 'envelope01', ST_asText(ST_snapToGrid(ST_envelope(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'envelope02', ST_asText(ST_snapToGrid(ST_envelope(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'envelope03', ST_asText(ST_snapToGrid(ST_envelope(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'envelope04', ST_asText(ST_snapToGrid(ST_envelope(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.curvepolygon; SELECT 'startPoint01', (ST_startPoint(the_geom_2d) is null) FROM public.curvepolygon; SELECT 'startPoint02', (ST_startPoint(the_geom_3dm) is null) FROM public.curvepolygon; SELECT 'startPoint03', (ST_startPoint(the_geom_3dz) is null) FROM public.curvepolygon; SELECT 'startPoint04', (ST_startPoint(the_geom_4d) is null) FROM public.curvepolygon; SELECT 'endPoint01', (ST_endPoint(the_geom_2d) is null) FROM public.curvepolygon; SELECT 'endPoint02', (ST_endPoint(the_geom_3dm) is null) FROM public.curvepolygon; SELECT 'endPoint03', (ST_endPoint(the_geom_3dz) is null) FROM public.curvepolygon; SELECT 'endPoint04', (ST_endPoint(the_geom_4d) is null) FROM public.curvepolygon; SELECT 'exteriorRing01', ST_asEWKT(ST_exteriorRing(the_geom_2d)) FROM public.curvepolygon; SELECT 'exteriorRing02', ST_asEWKT(ST_exteriorRing(the_geom_3dm)) FROM public.curvepolygon; SELECT 'exteriorRing03', ST_asEWKT(ST_exteriorRing(the_geom_3dz)) FROM public.curvepolygon; SELECT 'exteriorRing04', ST_asEWKT(ST_exteriorRing(the_geom_4d)) FROM public.curvepolygon; SELECT 'numInteriorRings01', ST_numInteriorRings(the_geom_2d) FROM public.curvepolygon; SELECT 'numInteriorRings02', ST_numInteriorRings(the_geom_3dm) FROM public.curvepolygon; SELECT 'numInteriorRings03', ST_numInteriorRings(the_geom_3dz) FROM public.curvepolygon; SELECT 'numInteriorRings04', ST_numInteriorRings(the_geom_4d) FROM public.curvepolygon; SELECT 'interiorRingN-101', ST_asEWKT(ST_interiorRingN(the_geom_2d, 1)) FROM public.curvepolygon; SELECT 'interiorRingN-102', ST_asEWKT(ST_interiorRingN(the_geom_3dm, 1)) FROM public.curvepolygon; SELECT 'interiorRingN-103', ST_asEWKT(ST_interiorRingN(the_geom_3dz, 1)) FROM public.curvepolygon; SELECT 'interiorRingN-104', ST_asEWKT(ST_interiorRingN(the_geom_4d, 1)) FROM public.curvepolygon; SELECT 'interiorRingN-201', ST_asEWKT(ST_interiorRingN(the_geom_2d, 2)) FROM public.curvepolygon; SELECT 'interiorRingN-202', ST_asEWKT(ST_interiorRingN(the_geom_3dm, 2)) FROM public.curvepolygon; SELECT 'interiorRingN-203', ST_asEWKT(ST_interiorRingN(the_geom_3dz, 2)) FROM public.curvepolygon; SELECT 'interiorRingN-204', ST_asEWKT(ST_interiorRingN(the_geom_4d, 2)) FROM public.curvepolygon; SELECT DropGeometryColumn('public', 'curvepolygon', 'the_geom_2d'); SELECT DropGeometryColumn('public', 'curvepolygon', 'the_geom_3dm'); SELECT DropGeometryColumn('public', 'curvepolygon', 'the_geom_3dz'); SELECT DropGeometryColumn('public', 'curvepolygon', 'the_geom_4d'); DROP TABLE public.curvepolygon; SELECT 'valid wkt curve polygon 1', encode(ST_AsBinary(ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827))'),'ndr'),'hex'); SELECT 'valid wkt curve polygon 2', encode(ST_AsBinary(ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827),(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664, 147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -31.26123924022086))'),'ndr'),'hex'); SELECT 'valid wkt curve polygon 3', encode(ST_AsBinary(ST_GeomFromEWKT('CURVEPOLYGON(CIRCULARSTRING(143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827))'),'ndr'),'hex'); SELECT 'valid wkt curve polygon 4', encode(ST_AsBinary(ST_GeomFromEWKT('CURVEPOLYGON(CIRCULARSTRING(143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827),(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664, 147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -31.26123924022086))'),'ndr'),'hex'); SELECT 'valid wkt curve polygon 5', encode(ST_AsBinary(ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827),COMPOUNDCURVE(CIRCULARSTRING(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664), (145.55230712890625 -33.49203872680664, 147.97080993652344 -32.03618621826172),CIRCULARSTRING(147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -31.26123924022086)))'),'ndr'),'hex'); SELECT 'invalid wkt curve polygon 4', ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076))'); SELECT 'invalid wkt curve polygon 5', ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827),(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664, 147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417))'); SELECT 'invalid wkt curve polygon 6', ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431),(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664, 147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -31.26123924022086))'); SELECT 'invalid wkt curve polygon 7', ST_GeomFromEWKT('CURVEPOLYGON(CIRCULARSTRING(143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 143.62025166838282 -30.037497356076827))'); SELECT 'invalid wkt curve polygon 8', ST_GeomFromEWKT('CURVEPOLYGON(CIRCULARSTRING(143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431),(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664, 147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -31.26123924022086))'); SELECT 'invalid wkt curve polygon 9', ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827),COMPOUNDCURVE(CIRCULARSTRING(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664),CIRCULARSTRING(147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -31.26123924022086))'); SELECT 'invalid wkt curve polygon a', ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827),COMPOUNDCURVE(CIRCULARSTRING(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664),(145.55230712890625 -33.49203872680664, 147.97080993652344 -32.03618621826172),CIRCULARSTRING(147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -30.76123924022086))'); SELECT 'invalid wkt curve polygon b', ST_GeomFromEWKT('CURVEPOLYGON((143.62025166838282 -30.037497356076827, 142.92857147299705 -32.75101196874403, 145.96132309891922 -34.985671061528784, 149.57565307617188 -33.41153335571289, 149.41972407584802 -29.824672680573517, 146.1209416055467 -30.19711586270431, 143.62025166838282 -30.037497356076827),COMPOUNDCURVE(CIRCULARSTRING(144.84399355252685 -31.26123924022086, 144.20551952601693 -32.27215644886158, 145.55230712890625 -33.49203872680664),(145.55230712890625 -33.49203872680664),CIRCULARSTRING(147.97080993652344 -32.03618621826172, 146.38697244992585 -31.47406391572417, 144.84399355252685 -31.26123924022086))'); SELECT 'valid ewkb curve polygon 1', ST_asEWKT(ST_GeomFromEWKB(decode('010a00000001000000010200000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec0', 'hex'))); SELECT 'valid ewkb curve polygon 2', ST_asEWKT(ST_GeomFromEWKB(decode('010a00000002000000010200000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec00102000000060000006844c4fe011b6240342e2993e0423fc0d45daf9d93066240c4a0c305d62240c000000080ac31624000000020fbbe40c0000000e0107f6240000000c0a10440c04e1c0c14624c6240bf3fb6405c793fc06844c4fe011b6240342e2993e0423fc0', 'hex'))); SELECT 'valid ewkb curve polygon 3', ST_asEWKT(ST_GeomFromEWKB(decode('010a00000001000000010800000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec0', 'hex'))); SELECT 'valid ewkb curve polygon 4', ST_asEWKT(ST_GeomFromEWKB(decode('010a00000002000000010800000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec00102000000060000006844c4fe011b6240342e2993e0423fc0d45daf9d93066240c4a0c305d62240c000000080ac31624000000020fbbe40c0000000e0107f6240000000c0a10440c04e1c0c14624c6240bf3fb6405c793fc06844c4fe011b6240342e2993e0423fc0', 'hex'))); SELECT 'valid ewkb curve polygon 5', ST_asEWKT(ST_GeomFromEWKB(decode('010a00000002000000010200000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec00109000000030000000108000000030000006844c4fe011b6240342e2993e0423fc0d45daf9d93066240c4a0c305d62240c000000080ac31624000000020fbbe40c001020000000200000000000080ac31624000000020fbbe40c0000000e0107f6240000000c0a10440c0010800000003000000000000e0107f6240000000c0a10440c04e1c0c14624c6240bf3fb6405c793fc06844c4fe011b6240342e2993e0423fc0', 'hex'))); SELECT 'valid curve 6', encode(ST_AsBinary(ST_GeomFromText('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.7 1) )'),'ndr'),'hex'); SELECT 'valid curve 7', encode(ST_AsBinary(ST_GeomFromText('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), (1.7 1, 1.4 0.4, 1.7 1) )'),'ndr'),'hex'); SELECT 'valid curve 8', encode(ST_AsBinary(ST_GeomFromText('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.7 1) )'),'ndr'),'hex'); SELECT 'null response', ST_NumPoints(ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.7 1) )')); �������������������������������������postgis-2.1.2+dfsg.orig/regress/postgis_type_name.sql�����������������������������������������������0000644�0000000�0000000�00000024355�11722777314�021530� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT 'POINT(0)', postgis_type_name('POINT', 0); SELECT 'POINT(1)', postgis_type_name('POINT', 1); SELECT 'POINT(2)', postgis_type_name('POINT', 2); SELECT 'POINT(3)', postgis_type_name('POINT', 3); SELECT 'POINT(4)', postgis_type_name('POINT', 4); SELECT 'POINT(5)', postgis_type_name('POINT', 5); SELECT 'POINTM(2)', postgis_type_name('POINTM', 2); SELECT 'POINTM(3)', postgis_type_name('POINTM', 3); SELECT 'POINTZ(3)', postgis_type_name('POINTZ', 3); SELECT 'POINTZM(3)', postgis_type_name('POINTZM', 3); SELECT 'POINTZM(4)', postgis_type_name('POINTZM', 4); SELECT 'LINESTRING(0)', postgis_type_name('LINESTRING', 0); SELECT 'LINESTRING(1)', postgis_type_name('LINESTRING', 1); SELECT 'LINESTRING(2)', postgis_type_name('LINESTRING', 2); SELECT 'LINESTRING(3)', postgis_type_name('LINESTRING', 3); SELECT 'LINESTRING(4)', postgis_type_name('LINESTRING', 4); SELECT 'LINESTRING(5)', postgis_type_name('LINESTRING', 5); SELECT 'LINESTRINGM(2)', postgis_type_name('LINESTRINGM', 2); SELECT 'LINESTRINGM(3)', postgis_type_name('LINESTRINGM', 3); SELECT 'LINESTRINGZ(3)', postgis_type_name('LINESTRINGZ', 3); SELECT 'LINESTRINGZM(3)', postgis_type_name('LINESTRINGZM', 3); SELECT 'LINESTRINGZM(4)', postgis_type_name('LINESTRINGZM', 4); SELECT 'POLYGON(0)', postgis_type_name('POLYGON', 0); SELECT 'POLYGON(1)', postgis_type_name('POLYGON', 1); SELECT 'POLYGON(2)', postgis_type_name('POLYGON', 2); SELECT 'POLYGON(3)', postgis_type_name('POLYGON', 3); SELECT 'POLYGON(4)', postgis_type_name('POLYGON', 4); SELECT 'POLYGON(5)', postgis_type_name('POLYGON', 5); SELECT 'POLYGONM(2)', postgis_type_name('POLYGONM', 2); SELECT 'POLYGONM(3)', postgis_type_name('POLYGONM', 3); SELECT 'POLYGONZ(3)', postgis_type_name('POLYGONZ', 3); SELECT 'POLYGONZM(3)', postgis_type_name('POLYGONZM', 3); SELECT 'POLYGONZM(4)', postgis_type_name('POLYGONZM', 4); SELECT 'MULTIPOINT(0)', postgis_type_name('MULTIPOINT', 0); SELECT 'MULTIPOINT(1)', postgis_type_name('MULTIPOINT', 1); SELECT 'MULTIPOINT(2)', postgis_type_name('MULTIPOINT', 2); SELECT 'MULTIPOINT(3)', postgis_type_name('MULTIPOINT', 3); SELECT 'MULTIPOINT(4)', postgis_type_name('MULTIPOINT', 4); SELECT 'MULTIPOINT(5)', postgis_type_name('MULTIPOINT', 5); SELECT 'MULTIPOINTM(2)', postgis_type_name('MULTIPOINTM', 2); SELECT 'MULTIPOINTM(3)', postgis_type_name('MULTIPOINTM', 3); SELECT 'MULTIPOINTZ(3)', postgis_type_name('MULTIPOINTZ', 3); SELECT 'MULTIPOINTZM(3)', postgis_type_name('MULTIPOINTZM', 3); SELECT 'MULTIPOINTZM(4)', postgis_type_name('MULTIPOINTZM', 4); SELECT 'MULTILINESTRING(0)', postgis_type_name('MULTILINESTRING', 0); SELECT 'MULTILINESTRING(1)', postgis_type_name('MULTILINESTRING', 1); SELECT 'MULTILINESTRING(2)', postgis_type_name('MULTILINESTRING', 2); SELECT 'MULTILINESTRING(3)', postgis_type_name('MULTILINESTRING', 3); SELECT 'MULTILINESTRING(4)', postgis_type_name('MULTILINESTRING', 4); SELECT 'MULTILINESTRING(5)', postgis_type_name('MULTILINESTRING', 5); SELECT 'MULTILINESTRINGM(2)', postgis_type_name('MULTILINESTRINGM', 2); SELECT 'MULTILINESTRINGM(3)', postgis_type_name('MULTILINESTRINGM', 3); SELECT 'MULTILINESTRINGZ(3)', postgis_type_name('MULTILINESTRINGZ', 3); SELECT 'MULTILINESTRINGZM(3)', postgis_type_name('MULTILINESTRINGZM', 3); SELECT 'MULTILINESTRINGZM(4)', postgis_type_name('MULTILINESTRINGZM', 4); SELECT 'MULTIPOLYGON(0)', postgis_type_name('MULTIPOLYGON', 0); SELECT 'MULTIPOLYGON(1)', postgis_type_name('MULTIPOLYGON', 1); SELECT 'MULTIPOLYGON(2)', postgis_type_name('MULTIPOLYGON', 2); SELECT 'MULTIPOLYGON(3)', postgis_type_name('MULTIPOLYGON', 3); SELECT 'MULTIPOLYGON(4)', postgis_type_name('MULTIPOLYGON', 4); SELECT 'MULTIPOLYGON(5)', postgis_type_name('MULTIPOLYGON', 5); SELECT 'MULTIPOLYGONM(2)', postgis_type_name('MULTIPOLYGONM', 2); SELECT 'MULTIPOLYGONM(3)', postgis_type_name('MULTIPOLYGONM', 3); SELECT 'MULTIPOLYGONZ(3)', postgis_type_name('MULTIPOLYGONZ', 3); SELECT 'MULTIPOLYGONZM(3)', postgis_type_name('MULTIPOLYGONZM', 3); SELECT 'MULTIPOLYGONZM(4)', postgis_type_name('MULTIPOLYGONZM', 4); SELECT 'GEOMETRYCOLLECTION(0)', postgis_type_name('GEOMETRYCOLLECTION', 0); SELECT 'GEOMETRYCOLLECTION(1)', postgis_type_name('GEOMETRYCOLLECTION', 1); SELECT 'GEOMETRYCOLLECTION(2)', postgis_type_name('GEOMETRYCOLLECTION', 2); SELECT 'GEOMETRYCOLLECTION(3)', postgis_type_name('GEOMETRYCOLLECTION', 3); SELECT 'GEOMETRYCOLLECTION(4)', postgis_type_name('GEOMETRYCOLLECTION', 4); SELECT 'GEOMETRYCOLLECTION(5)', postgis_type_name('GEOMETRYCOLLECTION', 5); SELECT 'GEOMETRYCOLLECTIONM(2)', postgis_type_name('GEOMETRYCOLLECTIONM', 2); SELECT 'GEOMETRYCOLLECTIONM(3)', postgis_type_name('GEOMETRYCOLLECTIONM', 3); SELECT 'GEOMETRYCOLLECTIONZ(3)', postgis_type_name('GEOMETRYCOLLECTIONZ', 3); SELECT 'GEOMETRYCOLLECTIONZM(3)', postgis_type_name('GEOMETRYCOLLECTIONZM', 3); SELECT 'GEOMETRYCOLLECTIONZM(4)', postgis_type_name('GEOMETRYCOLLECTIONZM', 4); SELECT 'CIRCULARSTRING(0)', postgis_type_name('CIRCULARSTRING', 0); SELECT 'CIRCULARSTRING(1)', postgis_type_name('CIRCULARSTRING', 1); SELECT 'CIRCULARSTRING(2)', postgis_type_name('CIRCULARSTRING', 2); SELECT 'CIRCULARSTRING(3)', postgis_type_name('CIRCULARSTRING', 3); SELECT 'CIRCULARSTRING(4)', postgis_type_name('CIRCULARSTRING', 4); SELECT 'CIRCULARSTRING(5)', postgis_type_name('CIRCULARSTRING', 5); SELECT 'CIRCULARSTRINGM(2)', postgis_type_name('CIRCULARSTRINGM', 2); SELECT 'CIRCULARSTRINGM(3)', postgis_type_name('CIRCULARSTRINGM', 3); SELECT 'CIRCULARSTRINGZ(3)', postgis_type_name('CIRCULARSTRINGZ', 3); SELECT 'CIRCULARSTRINGZM(3)', postgis_type_name('CIRCULARSTRINGZM', 3); SELECT 'CIRCULARSTRINGZM(4)', postgis_type_name('CIRCULARSTRINGZM', 4); SELECT 'COMPOUNDCURVE(0)', postgis_type_name('COMPOUNDCURVE', 0); SELECT 'COMPOUNDCURVE(1)', postgis_type_name('COMPOUNDCURVE', 1); SELECT 'COMPOUNDCURVE(2)', postgis_type_name('COMPOUNDCURVE', 2); SELECT 'COMPOUNDCURVE(3)', postgis_type_name('COMPOUNDCURVE', 3); SELECT 'COMPOUNDCURVE(4)', postgis_type_name('COMPOUNDCURVE', 4); SELECT 'COMPOUNDCURVE(5)', postgis_type_name('COMPOUNDCURVE', 5); SELECT 'COMPOUNDCURVEM(2)', postgis_type_name('COMPOUNDCURVEM', 2); SELECT 'COMPOUNDCURVEM(3)', postgis_type_name('COMPOUNDCURVEM', 3); SELECT 'COMPOUNDCURVEZ(3)', postgis_type_name('COMPOUNDCURVEZ', 3); SELECT 'COMPOUNDCURVEZM(3)', postgis_type_name('COMPOUNDCURVEZM', 3); SELECT 'COMPOUNDCURVEZM(4)', postgis_type_name('COMPOUNDCURVEZM', 4); SELECT 'CURVEPOLYGON(0)', postgis_type_name('CURVEPOLYGON', 0); SELECT 'CURVEPOLYGON(1)', postgis_type_name('CURVEPOLYGON', 1); SELECT 'CURVEPOLYGON(2)', postgis_type_name('CURVEPOLYGON', 2); SELECT 'CURVEPOLYGON(3)', postgis_type_name('CURVEPOLYGON', 3); SELECT 'CURVEPOLYGON(4)', postgis_type_name('CURVEPOLYGON', 4); SELECT 'CURVEPOLYGON(5)', postgis_type_name('CURVEPOLYGON', 5); SELECT 'CURVEPOLYGONM(2)', postgis_type_name('CURVEPOLYGONM', 2); SELECT 'CURVEPOLYGONM(3)', postgis_type_name('CURVEPOLYGONM', 3); SELECT 'CURVEPOLYGONZ(3)', postgis_type_name('CURVEPOLYGONZ', 3); SELECT 'CURVEPOLYGONZM(3)', postgis_type_name('CURVEPOLYGONZM', 3); SELECT 'CURVEPOLYGONZM(4)', postgis_type_name('CURVEPOLYGONZM', 4); SELECT 'MULTICURVE(0)', postgis_type_name('MULTICURVE', 0); SELECT 'MULTICURVE(1)', postgis_type_name('MULTICURVE', 1); SELECT 'MULTICURVE(2)', postgis_type_name('MULTICURVE', 2); SELECT 'MULTICURVE(3)', postgis_type_name('MULTICURVE', 3); SELECT 'MULTICURVE(4)', postgis_type_name('MULTICURVE', 4); SELECT 'MULTICURVE(5)', postgis_type_name('MULTICURVE', 5); SELECT 'MULTICURVEM(2)', postgis_type_name('MULTICURVEM', 2); SELECT 'MULTICURVEM(3)', postgis_type_name('MULTICURVEM', 3); SELECT 'MULTICURVEZ(3)', postgis_type_name('MULTICURVEZ', 3); SELECT 'MULTICURVEZM(3)', postgis_type_name('MULTICURVEZM', 3); SELECT 'MULTICURVEZM(4)', postgis_type_name('MULTICURVEZM', 4); SELECT 'MULTISURFACE(0)', postgis_type_name('MULTISURFACE', 0); SELECT 'MULTISURFACE(1)', postgis_type_name('MULTISURFACE', 1); SELECT 'MULTISURFACE(2)', postgis_type_name('MULTISURFACE', 2); SELECT 'MULTISURFACE(3)', postgis_type_name('MULTISURFACE', 3); SELECT 'MULTISURFACE(4)', postgis_type_name('MULTISURFACE', 4); SELECT 'MULTISURFACE(5)', postgis_type_name('MULTISURFACE', 5); SELECT 'MULTISURFACEM(2)', postgis_type_name('MULTISURFACEM', 2); SELECT 'MULTISURFACEM(3)', postgis_type_name('MULTISURFACEM', 3); SELECT 'MULTISURFACEZ(3)', postgis_type_name('MULTISURFACEZ', 3); SELECT 'MULTISURFACEZM(3)', postgis_type_name('MULTISURFACEZM', 3); SELECT 'MULTISURFACEZM(4)', postgis_type_name('MULTISURFACEZM', 4); SELECT 'POLYHEDRALSURFACE(0)', postgis_type_name('POLYHEDRALSURFACE', 0); SELECT 'POLYHEDRALSURFACE(1)', postgis_type_name('POLYHEDRALSURFACE', 1); SELECT 'POLYHEDRALSURFACE(2)', postgis_type_name('POLYHEDRALSURFACE', 2); SELECT 'POLYHEDRALSURFACE(3)', postgis_type_name('POLYHEDRALSURFACE', 3); SELECT 'POLYHEDRALSURFACE(4)', postgis_type_name('POLYHEDRALSURFACE', 4); SELECT 'POLYHEDRALSURFACE(5)', postgis_type_name('POLYHEDRALSURFACE', 5); SELECT 'POLYHEDRALSURFACEM(2)', postgis_type_name('POLYHEDRALSURFACEM', 2); SELECT 'POLYHEDRALSURFACEM(3)', postgis_type_name('POLYHEDRALSURFACEM', 3); SELECT 'POLYHEDRALSURFACEZ(3)', postgis_type_name('POLYHEDRALSURFACEZ', 3); SELECT 'POLYHEDRALSURFACEZM(3)', postgis_type_name('POLYHEDRALSURFACEZM', 3); SELECT 'POLYHEDRALSURFACEZM(4)', postgis_type_name('POLYHEDRALSURFACEZM', 4); SELECT 'TRIANGLE(0)', postgis_type_name('TRIANGLE', 0); SELECT 'TRIANGLE(1)', postgis_type_name('TRIANGLE', 1); SELECT 'TRIANGLE(2)', postgis_type_name('TRIANGLE', 2); SELECT 'TRIANGLE(3)', postgis_type_name('TRIANGLE', 3); SELECT 'TRIANGLE(4)', postgis_type_name('TRIANGLE', 4); SELECT 'TRIANGLE(5)', postgis_type_name('TRIANGLE', 5); SELECT 'TRIANGLEM(2)', postgis_type_name('TRIANGLEM', 2); SELECT 'TRIANGLEM(3)', postgis_type_name('TRIANGLEM', 3); SELECT 'TRIANGLEZ(3)', postgis_type_name('TRIANGLEZ', 3); SELECT 'TRIANGLEZM(3)', postgis_type_name('TRIANGLEZM', 3); SELECT 'TRIANGLEZM(4)', postgis_type_name('TRIANGLEZM', 4); SELECT 'TIN(0)', postgis_type_name('TIN', 0); SELECT 'TIN(1)', postgis_type_name('TIN', 1); SELECT 'TIN(2)', postgis_type_name('TIN', 2); SELECT 'TIN(3)', postgis_type_name('TIN', 3); SELECT 'TIN(4)', postgis_type_name('TIN', 4); SELECT 'TIN(5)', postgis_type_name('TIN', 5); SELECT 'TINM(2)', postgis_type_name('TINM', 2); SELECT 'TINM(3)', postgis_type_name('TINM', 3); SELECT 'TINZ(3)', postgis_type_name('TINZ', 3); SELECT 'TINZM(3)', postgis_type_name('TINZM', 3); SELECT 'TINZM(4)', postgis_type_name('TINZM', 4); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress.sql���������������������������������������������������������0000644�0000000�0000000�00000044007�12220405345�017427� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- regression test for postGIS --- assume datatypes already defined --- basic datatypes (correct) select '1',ST_asewkt('POINT( 1 2 )'::GEOMETRY) as geom; select '2',ST_asewkt('POINT( 1 2 3)'::GEOMETRY) as geom; select '3',ST_asewkt('LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4)'::GEOMETRY) as geom; select '4',ST_asewkt('LINESTRING( 0 0 0 , 1 1 1 , 2 2 2 , 3 3 3, 4 4 4)'::GEOMETRY) as geom; select '5',ST_asewkt('LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15)'::GEOMETRY) as geom; select '6',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0) )'::GEOMETRY) as geom; select '7',ST_asewkt('POLYGON( (0 0 1 , 10 0 1, 10 10 1, 0 10 1, 0 0 1) )'::GEOMETRY) as geom; select '8',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) )'::GEOMETRY) as geom; select '9',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) )'::GEOMETRY) as geom; select '10',ST_asewkt('POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1) )'::GEOMETRY) as geom; select '11',ST_asewkt('POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) )'::GEOMETRY) as geom; select '12',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 ))'::GEOMETRY); select '13',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 3))'::GEOMETRY); select '14',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4))'::GEOMETRY); select '15',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))'::GEOMETRY); select '16',ST_asewkt('GEOMETRYCOLLECTION(POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1) ))'::GEOMETRY); select '17',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),POINT( 1 2 3) )'::GEOMETRY); select '18',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),POINT( 1 2 3) )'::GEOMETRY); select '19',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 ),LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4) )'::GEOMETRY); select '20',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0 ),POINT( 1 2 3),LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15) )'::GEOMETRY); select '21',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0 ),POINT( 1 2 3),LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),POLYGON( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0) ) )'::GEOMETRY); select '22',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),POINT( 1 2 3),POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) )'::GEOMETRY); select '23',ST_asewkt('MULTIPOINT( 1 2)'::GEOMETRY) as geom; select '24',ST_asewkt('MULTIPOINT( 1 2 3)'::GEOMETRY) as geom; select '25',ST_asewkt('MULTIPOINT( 1 2, 3 4, 5 6)'::GEOMETRY) as geom; select '26',ST_asewkt('MULTIPOINT( 1 2 3, 5 6 7, 8 9 10, 11 12 13)'::GEOMETRY) as geom; select '27',ST_asewkt('MULTIPOINT( 1 2 0, 1 2 3, 4 5 0, 6 7 8)'::GEOMETRY) as geom; select '28',ST_asewkt('MULTIPOINT( 1 2 3,4 5 0)'::GEOMETRY) as geom; select '29',ST_asewkt('MULTILINESTRING( (0 0, 1 1, 2 2, 3 3 , 4 4) )'::GEOMETRY) as geom; select '30',ST_asewkt('MULTILINESTRING( (0 0, 1 1, 2 2, 3 3 , 4 4),(0 0, 1 1, 2 2, 3 3 , 4 4))'::GEOMETRY) as geom; select '31',ST_asewkt('MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15) )'::GEOMETRY) as geom; select '32',ST_asewkt('MULTILINESTRING( (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0))'::GEOMETRY) as geom; select '33',ST_asewkt('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)) )'::GEOMETRY) as geom; select '34',ST_asewkt('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) )'::GEOMETRY) as geom; select '35',ST_asewkt('MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) )'::GEOMETRY) as geom; select '36',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2))'::GEOMETRY); select '37',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2 3))'::GEOMETRY); select '38',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2 3, 5 6 7, 8 9 10, 11 12 13))'::GEOMETRY); select '39',ST_asewkt('GEOMETRYCOLLECTION(MULTILINESTRING( (0 0, 1 1, 2 2, 3 3 , 4 4) ))'::GEOMETRY); select '40',ST_asewkt('GEOMETRYCOLLECTION(MULTILINESTRING( (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0)))'::GEOMETRY); select '41',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) ))'::GEOMETRY); select '42',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),MULTIPOINT( 1 2 3))'::GEOMETRY); select '43',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2 0, 3 4 0, 5 6 0),POINT( 1 2 3))'::GEOMETRY); select '44',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 3),MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0) ))'::GEOMETRY); select '45',ST_asewkt('GEOMETRYCOLLECTION(MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0) ),POINT( 1 2 3))'::GEOMETRY); select '46',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 3), MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) ))'::GEOMETRY); select '47',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) ),MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15) ),MULTIPOINT( 1 2 3, 5 6 7, 8 9 10, 11 12 13))'::GEOMETRY); select '48',ST_asewkt('MULTIPOINT( -1 -2 -3, 5.4 6.6 7.77, -5.4 -6.6 -7.77, 1e6 1e-6 -1e6, -1.3e-6 -1.4e-5 0)'::GEOMETRY) as geom; select '49', ST_asewkt('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 1) ))'::GEOMETRY) as geom; --- basic datatype (incorrect) select '50', 'POINT()'::GEOMETRY as geom; select '51', 'POINT(1)'::GEOMETRY as geom; select '52', 'POINT(,)'::GEOMETRY as geom; select '53', 'MULTIPOINT(,)'::GEOMETRY as geom; select '54', 'POINT(a b)'::GEOMETRY as geom; select '55', 'MULTIPOINT()'::GEOMETRY as geom; select '56', ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10) )'::GEOMETRY); select '57', ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7) )'::GEOMETRY); select '58', ST_asewkt('MULTILINESTRING((0 0, 1 1),(0 0, 1 1, 2 2,) )'::GEOMETRY); --- funny results select '59',ST_asewkt('POINT(1 2 3, 4 5 6)'::GEOMETRY); select '60',ST_asewkt('POINT(1 2 3 4 5 6 7)'::GEOMETRY); select '61',ST_asewkt('LINESTRING(1 1)'::GEOMETRY); select '62',regexp_replace(ST_asewkt('POINT( 1e700 0)'::GEOMETRY), E'(Infinity|1\.#INF)', 'inf'); select '63',regexp_replace(ST_asewkt('POINT( -1e700 0)'::GEOMETRY), E'(Infinity|1\.#INF)', 'inf'); --select '62',ST_asewkt('POINT( 1e700 0)'::GEOMETRY); --select '63',ST_asewkt('POINT( -1e700 0)'::GEOMETRY); select '64',ST_asewkt('MULTIPOINT(1 1, 2 2'::GEOMETRY); --- is_same() testing select '65','POINT(1 1)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; select '65a',ST_OrderingEquals('POINT(1 1)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; select '66','POINT(1 1 0)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; select '66a',ST_OrderingEquals('POINT(1 1 0)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; select '67','POINT(1 1 0)'::GEOMETRY ~= 'POINT(1 1 0)'::GEOMETRY as bool; select '67a',ST_OrderingEquals('POINT(1 1 0)'::GEOMETRY,'POINT(1 1 0)'::GEOMETRY) as bool; select '68','MULTIPOINT(1 1,2 2)'::GEOMETRY ~= 'MULTIPOINT(1 1,2 2)'::GEOMETRY as bool; select '68a',ST_OrderingEquals('MULTIPOINT(1 1,2 2)'::GEOMETRY,'MULTIPOINT(1 1,2 2)'::GEOMETRY) as bool; select '69','MULTIPOINT(2 2, 1 1)'::GEOMETRY ~= 'MULTIPOINT(1 1,2 2)'::GEOMETRY as bool; select '69a',ST_OrderingEquals('MULTIPOINT(2 2, 1 1)'::GEOMETRY,'MULTIPOINT(1 1,2 2)'::GEOMETRY) as bool; select '70','GEOMETRYCOLLECTION(POINT( 1 2 3),POINT(4 5 6))'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; select '70a',ST_OrderingEquals('GEOMETRYCOLLECTION(POINT( 1 2 3),POINT(4 5 6))'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; select '71','MULTIPOINT(4 5 6, 1 2 3)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; select '71a',ST_OrderingEquals('MULTIPOINT(4 5 6, 1 2 3)'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; select '72','MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; select '72a',ST_OrderingEquals('MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; select '73','MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(MULTIPOINT(1 2 3, 4 5 6))'::GEOMETRY as bool; select '73a',ST_OrderingEquals('MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY,'GEOMETRYCOLLECTION(MULTIPOINT(1 2 3, 4 5 6))'::GEOMETRY) as bool; select '74','LINESTRING(1 1,2 2)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; select '74a',ST_OrderingEquals('LINESTRING(1 1,2 2)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; select '75','LINESTRING(1 1, 2 2)'::GEOMETRY ~= 'LINESTRING(2 2, 1 1)'::GEOMETRY as bool; select '75a',ST_OrderingEquals('LINESTRING(1 1, 2 2)'::GEOMETRY,'LINESTRING(2 2, 1 1)'::GEOMETRY) as bool; select '76','LINESTRING(1 1, 2 2)'::GEOMETRY ~= 'LINESTRING(1 1, 2 2, 3 3)'::GEOMETRY as bool; select '76a',ST_OrderingEquals('LINESTRING(1 1, 2 2)'::GEOMETRY,'LINESTRING(1 1, 2 2, 3 3)'::GEOMETRY) as bool; --- operator testing (testing is on the BOUNDING BOX (2d), not the actual geometries) select '77','POINT(1 1)'::GEOMETRY &< 'POINT(1 1)'::GEOMETRY as bool; select '78','POINT(1 1)'::GEOMETRY &< 'POINT(2 1)'::GEOMETRY as bool; select '79','POINT(2 1)'::GEOMETRY &< 'POINT(1 1)'::GEOMETRY as bool; select '80','POINT(1 1)'::GEOMETRY << 'POINT(1 1)'::GEOMETRY as bool; select '81','POINT(1 1)'::GEOMETRY << 'POINT(2 1)'::GEOMETRY as bool; select '82','POINT(2 1)'::GEOMETRY << 'POINT(1 1)'::GEOMETRY as bool; select '83','POINT(1 1)'::GEOMETRY &> 'POINT(1 1)'::GEOMETRY as bool; select '84','POINT(1 1)'::GEOMETRY &> 'POINT(2 1)'::GEOMETRY as bool; select '85','POINT(2 1)'::GEOMETRY &> 'POINT(1 1)'::GEOMETRY as bool; select '86','POINT(1 1)'::GEOMETRY >> 'POINT(1 1)'::GEOMETRY as bool; select '87','POINT(1 1)'::GEOMETRY >> 'POINT(2 1)'::GEOMETRY as bool; select '88','POINT(2 1)'::GEOMETRY >> 'POINT(1 1)'::GEOMETRY as bool; -- overlap select '89','POINT(1 1)'::GEOMETRY && 'POINT(1 1)'::GEOMETRY as bool; select '90','POINT(1 1)'::GEOMETRY && 'POINT(2 2)'::GEOMETRY as bool; select '91','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1 1, 2 2)'::GEOMETRY as bool; select '92','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1.0001 1, 2 2)'::GEOMETRY as bool; select '93','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1 1.0001, 2 2)'::GEOMETRY as bool; select '94','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1 0, 2 2)'::GEOMETRY as bool; select '95','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1.0001 0, 2 2)'::GEOMETRY as bool; select '96','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(0 1, 1 2)'::GEOMETRY as bool; select '97','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(0 1.0001, 1 2)'::GEOMETRY as bool; --- contains select '98','MULTIPOINT(0 0, 10 10)'::GEOMETRY ~ 'MULTIPOINT(5 5, 7 7)'::GEOMETRY as bool; select '99','MULTIPOINT(5 5, 7 7)'::GEOMETRY ~ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '100','MULTIPOINT(0 0, 7 7)'::GEOMETRY ~ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '101','MULTIPOINT(-0.0001 0, 7 7)'::GEOMETRY ~ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; --- contained by select '102','MULTIPOINT(0 0, 10 10)'::GEOMETRY @ 'MULTIPOINT(5 5, 7 7)'::GEOMETRY as bool; select '103','MULTIPOINT(5 5, 7 7)'::GEOMETRY @ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '104','MULTIPOINT(0 0, 7 7)'::GEOMETRY @ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '105','MULTIPOINT(-0.0001 0, 7 7)'::GEOMETRY @ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; --- function testing --- conversion function select '106',box3d('MULTIPOINT(0 0, 7 7)'::GEOMETRY) as bvol; -- box3d only type is only used for indexing -- NEVER use one yourself select '107',ST_AsEWKT(geometry('BOX3D(0 0 0, 7 7 7 )'::BOX3D)); --- debug function testing select '108',ST_NPoints('MULTIPOINT(0 0, 7 7)'::GEOMETRY) as value; select '109',ST_NPoints('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING( 1 1 , 2 2, 3 3))'::GEOMETRY) as value; select '110', ST_NRings('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY) as value; select '111', ST_mem_size(PostGIS_DropBBOX('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY)) as value; select '112',ST_NumGeometries('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING( 1 1 , 2 2, 3 3),MULTIPOINT(1 1, 2 2))'::GEOMETRY) as value; ---selection --- TOAST testing -- create a table with data that will be TOASTed (even after compression) create table TEST(a GEOMETRY, b GEOMETRY); \i regress_biginsert.sql ---test basic ops on this select '121',box3d(a) as box3d_a, box3d(b) as box3d_b from TEST; select '122',a <<b from TEST; select '123',a &<b from TEST; select '124',a >>b from TEST; select '125',a &>b from TEST; select '126',a ~= b from TEST; select '127',a @ b from TEST; select '128',a ~ b from TEST; select '129', ST_mem_size(PostGIS_DropBBOX(a)), ST_mem_size(PostGIS_DropBBOX(b)) from TEST; select '131', ST_X('POINT(1 2)'); select '132', ST_Y('POINT(1 2)'); select '133', ST_Z('POINT(1 2)'); select '133a', ST_Z('POINT(1 2 3)'); select '133b', ST_Z('POINTM(1 2 3)'); select '133c', ST_M('POINT(1 2)'); select '133d', ST_M('POINTM(1 2 4)'); select '133e', ST_M('POINT(1 2 4)'); select '137', box3d('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY)'::geometry); select '138', box3d('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT(0 0))'::geometry); select '139', ST_AsEWKT(ST_multi(ST_setsrid('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT(0 0))'::geometry, 2))); select '140', ST_AsEWKT(ST_multi(ST_setsrid('POINT(2 2)'::geometry, 3))); select '141', ST_AsEWKT(ST_multi(ST_setsrid('LINESTRING(2 2, 3 3)'::geometry, 4))); select '142', ST_AsEWKT(ST_multi(ST_setsrid('LINESTRING(2 2, 3 3)'::geometry, 5))); select '143', ST_AsEWKT(ST_multi(ST_setsrid('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'::geometry, 6))); select '143c1', ST_AsEWKT(ST_multi('CIRCULARSTRING(0 0, 1 1, 2 2)'::geometry)); select '144', ST_AsEWKT(ST_force_3dm('POINT(1 2 3)')); select '145', ST_AsEWKT(ST_force_3dz('POINTM(1 2 3)')); select '146', ST_AsEWKT(ST_force_4d('POINTM(1 2 3)')); select '147', ST_AsEWKT(ST_force_4d('POINT(1 2 3)')); select '148', ST_AsText(ST_segmentize('LINESTRING(0 0, 10 0)'::geometry, 5)); select '149', ST_AsText(ST_segmentize('GEOMETRYCOLLECTION EMPTY'::geometry, 0.5)); select '150', ST_AsEWKT(ST_force_collection(ST_setsrid('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'::geometry, 6))); select '151', encode(ST_AsBinary(ST_MakeEnvelope(0, 0, 1, 1, 4326),'ndr'),'hex'); select '152', ST_SRID(ST_MakeEnvelope(0, 0, 1, 1, 4326)); select '152.1', ST_SRID(ST_MakeEnvelope(0, 0, 1, 1)) = ST_SRID('POINT(0 0)'::geometry); select '152.2', ST_SRID(ST_SetSRID(ST_MakeEnvelope(0, 0, 1, 1), 4326)); select '153', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(POINT(0 0))',1)); select '154', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',1)); select '155', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0), POINT(1 1)))',1)); select '156', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)))',1)); select '157', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)))',2)); select '158', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)),LINESTRING(2 2, 3 3))',2)); select '159', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)),LINESTRING(2 2, 3 3))',3)); select '160', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)),LINESTRING(2 2, 3 3))',1)); select '161', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), GEOMETRYCOLLECTION(POINT(1 1))),LINESTRING(2 2, 3 3))',2)); select '162', encode(ST_AsBinary(ST_MakeLine(ST_GeomFromText('POINT(-11.1111111 40)'),ST_GeomFromText('LINESTRING(-11.1111111 70,70 -11.1111111)')),'ndr'),'hex') As result; select '163', ST_AsEWKT('POLYGON((0 0 0, 1 0 0, 1 1 0, 0 1 0, 0 0 0))'); select '164', ST_AsEWKT('POLYGON((0 0 0, 1 0 0, 1 1 0, 0 1 0, 0 0 1))'); select '165', ST_AsEWKT('POLYGON((0 0 0, 1 0 0, 1 1 0, 0 1 0, 0 0.1 1))'); select '166', ST_AsText('POINT EMPTY'); select '167', ST_AsText('LINESTRING EMPTY'); select '168', ST_AsText('POLYGON EMPTY'); select '169', ST_AsText('CIRCULARSTRING EMPTY'); select '170', ST_AsText('COMPOUNDCURVE EMPTY'); select '171', ST_AsText('CURVEPOLYGON EMPTY'); select '172', ST_AsText('MULTIPOINT EMPTY'); select '173', ST_AsText('MULTILINESTRING EMPTY'); select '174', ST_AsText('MULTIPOLYGON EMPTY'); select '175', ST_AsText('TRIANGLE EMPTY'); select '176', ST_AsText('TIN EMPTY'); select '177', ST_AsText('POLYHEDRALSURFACE EMPTY'); select '178', ST_AsText('MULTISURFACE EMPTY'); select '179', ST_AsText('MULTICURVE EMPTY'); select '180', ST_AsText('GEOMETRYCOLLECTION EMPTY'); select '181', ST_AsText('GEOMETRYCOLLECTION(TRIANGLE EMPTY,TIN EMPTY)'); -- Drop test table DROP table test; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/measures.sql��������������������������������������������������������0000644�0000000�0000000�00000023276�11722777314�017624� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� select '113', ST_area2d('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY) as value; select '114', ST_perimeter2d('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY) as value; select '115', ST_3DPerimeter('MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) )'::GEOMETRY) as value; select '116', ST_length2d('MULTILINESTRING((0 0, 1 1),(0 0, 1 1, 2 2) )'::GEOMETRY) as value; select '117', ST_3dlength('MULTILINESTRING((0 0, 1 1),(0 0, 1 1, 2 2) )'::GEOMETRY) as value; select '118', ST_3dlength('MULTILINESTRING((0 0 0, 1 1 1),(0 0 0, 1 1 1, 2 2 2) )'::GEOMETRY) as value; select '134', ST_Distance('POINT(1 2)', 'POINT(1 2)'); select '135', ST_Distance('POINT(5 0)', 'POINT(10 12)'); select '136', ST_Distance('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0)); -- postgis-users/2006-May/012174.html select 'dist', ST_Distance(a,b), ST_Distance(b,a) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 11 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; --#1502 SELECT '#1502', ST_Dwithin(a,b,0.0) from (SELECT 'LINESTRING(-97364 -97364, 9736.4 9736.4)'::geometry a, 'POINT(0 0)'::geometry b ) foo; --st_shortestline select 'st_shortestline_134', st_astext(st_shortestline('POINT(1 2)', 'POINT(1 2)')); select 'st_shortestline_135', st_astext(st_shortestline('POINT(5 0)', 'POINT(10 12)')); select 'st_shortestline_136', st_astext(st_shortestline('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0))); -- postgis-users/2006-May/012174.html select 'st_shortestline_dist', st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 12 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; --st_maxdistance select 'st_maxdistance_134', st_maxdistance('POINT(1 2)', 'POINT(1 2)'); select 'st_maxdistance_135', st_maxdistance('POINT(5 0)', 'POINT(10 12)'); select 'st_maxdistance_136', st_maxdistance('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0)); -- postgis-users/2006-May/012174.html select 'st_maxdistance_dist', st_maxdistance(a,b), st_maxdistance(b,a) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 11 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; --st_longestline select 'st_longestline_134', st_astext(st_longestline('POINT(1 2)', 'POINT(1 2)')); select 'st_longestline_135', st_astext(st_longestline('POINT(5 0)', 'POINT(10 12)')); select 'st_longestline_136', st_astext(st_longestline('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0))); -- postgis-users/2006-May/012174.html select 'st_longestline_dist', st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 11 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; select 'distancetest1', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('MULTILINESTRING((17 16, 16 17, 17 18, 17 17, 17 16), (28 35,29 39, 30 35))') as a, ST_GeomFromText('MULTIPOLYGON(((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14)),((33 35,33 40, 35 40, 35 35, 33 35)))') as b ) as foo; select 'distancetest2', ST_Distance(a, b), st_maxdistance(a, b), round(st_x(st_startpoint(st_shortestline(a,b)))::numeric, 10), round(st_y(st_startpoint(st_shortestline(a,b)))::numeric, 10), round(st_x(st_endpoint(st_shortestline(a,b)))::numeric, 10), round(st_y(st_endpoint(st_shortestline(a,b)))::numeric, 10), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('LINESTRING(-40 -20 , 4 2)') as a, ST_GeomFromText('LINESTRING(-10 20, 1 -2)') as b ) as foo; select 'distancepoly1', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('MULTIPOLYGON(((17 16, 16 17, 17 18, 17 17, 17 16)), ((28 35,29 39, 30 35, 28 35)))') as a, ST_GeomFromText('MULTIPOLYGON(((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14)),((33 35,33 40, 35 40, 35 35, 33 35)))') as b ) as foo; select 'distancepoly2', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 14, 16 17, 17 18, 17 17, 17 14))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly3', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 16, 16 17, 17 19, 17 17, 17 16))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly4', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 16, 16 17, 16 20, 18 20, 18 17, 17 16))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly5', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 12, 16 17, 17 18, 17 17, 17 12))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly6', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; --3D Distance functions SELECT '3dDistancetest1', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'POINT(3 2 7)'::geometry as b ) as foo; SELECT '3dDistancetest2', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'LINESTRING(0 0 0, 2 2 2)'::geometry as b ) as foo; SELECT '3dDistancetest3', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_SnapToGrid(ST_3DShortestline(a,b), 1e-14)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'LINESTRING(5 2 6, -3 -2 4)'::geometry as b ) as foo; SELECT '3dDistancetest4', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'LINESTRING(1 1 3, 5 7 8)'::geometry as a, 'POINT(1 1 1)'::geometry as b ) as foo; SELECT '3dDistancetest5', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'LINESTRING(1 0 5, 11 0 5)'::geometry as a, 'LINESTRING(5 2 0, 5 2 10, 5 0 13)'::geometry as b ) as foo; SELECT '3dDistancetest6', ST_3DDistance(a,b) FROM ( SELECT 'LINESTRING(1 1 1 , 2 2 2)'::geometry as a, 'POLYGON((0 0 0, 2 2 2, 3 3 3, 0 0 0))'::geometry as b) as foo; -- Area of an empty polygon select 'emptyPolyArea', st_area('POLYGON EMPTY'); -- Area of an empty linestring select 'emptyLineArea', st_area('LINESTRING EMPTY'); -- Area of an empty point select 'emptyPointArea', st_area('POINT EMPTY'); -- Area of an empty multipolygon select 'emptyMultiPolyArea', st_area('MULTIPOLYGON EMPTY'); -- Area of an empty multilinestring select 'emptyMultiLineArea', st_area('MULTILINESTRING EMPTY'); -- Area of an empty multilipoint select 'emptyMultiPointArea', st_area('MULTIPOINT EMPTY'); -- Area of an empty collection select 'emptyCollectionArea', st_area('GEOMETRYCOLLECTION EMPTY'); -- select 'spheroidLength1', round(st_length_spheroid('MULTILINESTRING((-118.584 38.374,-118.583 38.5),(-71.05957 42.3589 , -71.061 43))'::geometry,'SPHEROID["GRS_1980",6378137,298.257222101]'::spheroid)::numeric,5); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/simplify_expected���������������������������������������������������0000644�0000000�0000000�00000001262�12052403731�020670� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|LINESTRING(0 0,0 51,50 20,30 20,7 32) 2|LINESTRING Z (0 0 3,0 51 1,50 20 6,30 20 9,7 32 10) 3|LINESTRING M (0 0 3,0 51 1,50 20 6,30 20 9,7 32 10) 4|LINESTRING ZM (0 0 3 2,0 51 1 6,50 20 6 7,30 20 9 9,7 32 10 5) 5|MULTIPOINT ZM (0 0 3 2,0 10 6 1,0 51 1 6,50 20 6 7,30 20 9 9,7 32 10 5) 6|MULTILINESTRING ZM ((0 0 3 2,0 51 1 6,50 20 6 7,7 32 10 5),(0 0 4 3,20 20 5 30)) 7|POLYGON ZM ((0 0 3 2,0 51 1 6,50 20 6 7,7 32 10 5,0 0 3 2)) 8|POLYGON ZM ((0 0 3 2,0 51 1 6,50 20 6 7,30 20 9 9,7 32 10 5,0 0 3 2),(1 1 4 3,1 3 2 3,18 18 5 30,1 1 4 3)) 9| 10|LINESTRING(0 0,0 10) 11|MULTIPOLYGON(((100 100,100 130,130 130,130 100,100 100))) 12|MULTIPOLYGON(((100 100,100 130,130 130,130 100,100 100))) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-multisurface_expected����������������������������������������0000644�0000000�0000000�00000070550�11722777314�022767� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ndims01|4 geometrytype01|MULTISURFACE ndims02|3 geometrytype02|MULTISURFACE ndims03|3 geometrytype03|MULTISURFACEM ndims04|2 geometrytype04|MULTISURFACE ST_CurveToLine-201|MULTIPOLYGON(((-2 0,-1.70710678 -0.70710678,-1 -1,-0.29289322 -0.70710678,0 0,0.29289322 -0.70710678,1 -1,1.70710678 -0.70710678,2 0,1.41421356 1.41421356,0 2,-1.41421356 1.41421356,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8))) ST_CurveToLine-202|MULTIPOLYGONM(((-2 0 0,-1.70710678 -0.70710678 1,-1 -1 2,-0.29289322 -0.70710678 3,0 0 4,0.29289322 -0.70710678 5,1 -1 6,1.70710678 -0.70710678 7,2 0 8,1.41421356 1.41421356 6,0 2 4,-1.41421356 1.41421356 2,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8))) ST_CurveToLine-203|MULTIPOLYGON(((-2 0 0,-1.70710678 -0.70710678 0.5,-1 -1 1,-0.29289322 -0.70710678 1.5,0 0 2,0.29289322 -0.70710678 2.5,1 -1 3,1.70710678 -0.70710678 3.5,2 0 4,1.41421356 1.41421356 3,0 2 2,-1.41421356 1.41421356 1,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7))) ST_CurveToLine-204|MULTIPOLYGON(((-2 0 0 0,-1.70710678 -0.70710678 0.5 1,-1 -1 1 2,-0.29289322 -0.70710678 1.5 3,0 0 2 4,0.29289322 -0.70710678 2.5 5,1 -1 3 6,1.70710678 -0.70710678 3.5 7,2 0 4 8,1.41421356 1.41421356 3 6,0 2 2 4,-1.41421356 1.41421356 1 2,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8))) ST_CurveToLine-401|MULTIPOLYGON(((-2 0,-1.92387953 -0.38268343,-1.70710678 -0.70710678,-1.38268343 -0.92387953,-1 -1,-0.61731657 -0.92387953,-0.29289322 -0.70710678,-0.07612047 -0.38268343,0 0,0.07612047 -0.38268343,0.29289322 -0.70710678,0.61731657 -0.92387953,1 -1,1.38268343 -0.92387953,1.70710678 -0.70710678,1.92387953 -0.38268343,2 0,1.84775907 0.76536686,1.41421356 1.41421356,0.76536686 1.84775907,0 2,-0.76536686 1.84775907,-1.41421356 1.41421356,-1.84775907 0.76536686,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8))) ST_CurveToLine-402|MULTIPOLYGONM(((-2 0 0,-1.92387953 -0.38268343 0.5,-1.70710678 -0.70710678 1,-1.38268343 -0.92387953 1.5,-1 -1 2,-0.61731657 -0.92387953 2.5,-0.29289322 -0.70710678 3,-0.07612047 -0.38268343 3.5,0 0 4,0.07612047 -0.38268343 4.5,0.29289322 -0.70710678 5,0.61731657 -0.92387953 5.5,1 -1 6,1.38268343 -0.92387953 6.5,1.70710678 -0.70710678 7,1.92387953 -0.38268343 7.5,2 0 8,1.84775907 0.76536686 7,1.41421356 1.41421356 6,0.76536686 1.84775907 5,0 2 4,-0.76536686 1.84775907 3,-1.41421356 1.41421356 2,-1.84775907 0.76536686 1,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8))) ST_CurveToLine-403|MULTIPOLYGON(((-2 0 0,-1.92387953 -0.38268343 0.25,-1.70710678 -0.70710678 0.5,-1.38268343 -0.92387953 0.75,-1 -1 1,-0.61731657 -0.92387953 1.25,-0.29289322 -0.70710678 1.5,-0.07612047 -0.38268343 1.75,0 0 2,0.07612047 -0.38268343 2.25,0.29289322 -0.70710678 2.5,0.61731657 -0.92387953 2.75,1 -1 3,1.38268343 -0.92387953 3.25,1.70710678 -0.70710678 3.5,1.92387953 -0.38268343 3.75,2 0 4,1.84775907 0.76536686 3.5,1.41421356 1.41421356 3,0.76536686 1.84775907 2.5,0 2 2,-0.76536686 1.84775907 1.5,-1.41421356 1.41421356 1,-1.84775907 0.76536686 0.5,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7))) ST_CurveToLine-404|MULTIPOLYGON(((-2 0 0 0,-1.92387953 -0.38268343 0.25 0.5,-1.70710678 -0.70710678 0.5 1,-1.38268343 -0.92387953 0.75 1.5,-1 -1 1 2,-0.61731657 -0.92387953 1.25 2.5,-0.29289322 -0.70710678 1.5 3,-0.07612047 -0.38268343 1.75 3.5,0 0 2 4,0.07612047 -0.38268343 2.25 4.5,0.29289322 -0.70710678 2.5 5,0.61731657 -0.92387953 2.75 5.5,1 -1 3 6,1.38268343 -0.92387953 3.25 6.5,1.70710678 -0.70710678 3.5 7,1.92387953 -0.38268343 3.75 7.5,2 0 4 8,1.84775907 0.76536686 3.5 7,1.41421356 1.41421356 3 6,0.76536686 1.84775907 2.5 5,0 2 2 4,-0.76536686 1.84775907 1.5 3,-1.41421356 1.41421356 1 2,-1.84775907 0.76536686 0.5 1,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8))) ST_CurveToLine01|MULTIPOLYGON(((-2 0,-1.99879546 -0.04906767,-1.99518473 -0.09801714,-1.98917651 -0.14673047,-1.98078528 -0.19509032,-1.97003125 -0.24298018,-1.95694034 -0.29028468,-1.94154407 -0.33688985,-1.92387953 -0.38268343,-1.90398929 -0.42755509,-1.88192126 -0.47139674,-1.85772861 -0.51410274,-1.83146961 -0.55557023,-1.80320753 -0.5956993,-1.77301045 -0.63439328,-1.74095113 -0.67155895,-1.70710678 -0.70710678,-1.67155895 -0.74095113,-1.63439328 -0.77301045,-1.5956993 -0.80320753,-1.55557023 -0.83146961,-1.51410274 -0.85772861,-1.47139674 -0.88192126,-1.42755509 -0.90398929,-1.38268343 -0.92387953,-1.33688985 -0.94154407,-1.29028468 -0.95694034,-1.24298018 -0.97003125,-1.19509032 -0.98078528,-1.14673047 -0.98917651,-1.09801714 -0.99518473,-1.04906767 -0.99879546,-1 -1,-0.95093233 -0.99879546,-0.90198286 -0.99518473,-0.85326953 -0.98917651,-0.80490968 -0.98078528,-0.75701982 -0.97003125,-0.70971532 -0.95694034,-0.66311015 -0.94154407,-0.61731657 -0.92387953,-0.57244491 -0.90398929,-0.52860326 -0.88192126,-0.48589726 -0.85772861,-0.44442977 -0.83146961,-0.4043007 -0.80320753,-0.36560672 -0.77301045,-0.32844105 -0.74095113,-0.29289322 -0.70710678,-0.25904887 -0.67155895,-0.22698955 -0.63439328,-0.19679247 -0.5956993,-0.16853039 -0.55557023,-0.14227139 -0.51410274,-0.11807874 -0.47139674,-0.09601071 -0.42755509,-0.07612047 -0.38268343,-0.05845593 -0.33688985,-0.04305966 -0.29028468,-0.02996875 -0.24298018,-0.01921472 -0.19509032,-0.01082349 -0.14673047,-0.00481527 -0.09801714,-0.00120454 -0.04906767,0 0,0.00120454 -0.04906767,0.00481527 -0.09801714,0.01082349 -0.14673047,0.01921472 -0.19509032,0.02996875 -0.24298018,0.04305966 -0.29028468,0.05845593 -0.33688985,0.07612047 -0.38268343,0.09601071 -0.42755509,0.11807874 -0.47139674,0.14227139 -0.51410274,0.16853039 -0.55557023,0.19679247 -0.5956993,0.22698955 -0.63439328,0.25904887 -0.67155895,0.29289322 -0.70710678,0.32844105 -0.74095113,0.36560672 -0.77301045,0.4043007 -0.80320753,0.44442977 -0.83146961,0.48589726 -0.85772861,0.52860326 -0.88192126,0.57244491 -0.90398929,0.61731657 -0.92387953,0.66311015 -0.94154407,0.70971532 -0.95694034,0.75701982 -0.97003125,0.80490968 -0.98078528,0.85326953 -0.98917651,0.90198286 -0.99518473,0.95093233 -0.99879546,1 -1,1.04906767 -0.99879546,1.09801714 -0.99518473,1.14673047 -0.98917651,1.19509032 -0.98078528,1.24298018 -0.97003125,1.29028468 -0.95694034,1.33688985 -0.94154407,1.38268343 -0.92387953,1.42755509 -0.90398929,1.47139674 -0.88192126,1.51410274 -0.85772861,1.55557023 -0.83146961,1.5956993 -0.80320753,1.63439328 -0.77301045,1.67155895 -0.74095113,1.70710678 -0.70710678,1.74095113 -0.67155895,1.77301045 -0.63439328,1.80320753 -0.5956993,1.83146961 -0.55557023,1.85772861 -0.51410274,1.88192126 -0.47139674,1.90398929 -0.42755509,1.92387953 -0.38268343,1.94154407 -0.33688985,1.95694034 -0.29028468,1.97003125 -0.24298018,1.98078528 -0.19509032,1.98917651 -0.14673047,1.99518473 -0.09801714,1.99879546 -0.04906767,2 0,1.99759091 0.09813535,1.99036945 0.19603428,1.97835302 0.29346095,1.96157056 0.39018064,1.94006251 0.48596036,1.91388067 0.58056935,1.88308813 0.67377971,1.84775907 0.76536686,1.80797859 0.85511019,1.76384253 0.94279347,1.71545722 1.02820549,1.66293922 1.11114047,1.60641506 1.19139861,1.54602091 1.26878657,1.48190225 1.34311791,1.41421356 1.41421356,1.34311791 1.48190225,1.26878657 1.54602091,1.19139861 1.60641506,1.11114047 1.66293922,1.02820549 1.71545722,0.94279347 1.76384253,0.85511019 1.80797859,0.76536686 1.84775907,0.67377971 1.88308813,0.58056935 1.91388067,0.48596036 1.94006251,0.39018064 1.96157056,0.29346095 1.97835302,0.19603428 1.99036945,0.09813535 1.99759091,0 2,-0.09813535 1.99759091,-0.19603428 1.99036945,-0.29346095 1.97835302,-0.39018064 1.96157056,-0.48596036 1.94006251,-0.58056935 1.91388067,-0.67377971 1.88308813,-0.76536686 1.84775907,-0.85511019 1.80797859,-0.94279347 1.76384253,-1.02820549 1.71545722,-1.11114047 1.66293922,-1.19139861 1.60641506,-1.26878657 1.54602091,-1.34311791 1.48190225,-1.41421356 1.41421356,-1.48190225 1.34311791,-1.54602091 1.26878657,-1.60641506 1.19139861,-1.66293922 1.11114047,-1.71545722 1.02820549,-1.76384253 0.94279347,-1.80797859 0.85511019,-1.84775907 0.76536686,-1.88308813 0.67377971,-1.91388067 0.58056935,-1.94006251 0.48596036,-1.96157056 0.39018064,-1.97835302 0.29346095,-1.99036945 0.19603428,-1.99759091 0.09813535,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8))) ST_CurveToLine02|MULTIPOLYGONM(((-2 0 0,-1.99879546 -0.04906767 0.0625,-1.99518473 -0.09801714 0.125,-1.98917651 -0.14673047 0.1875,-1.98078528 -0.19509032 0.25,-1.97003125 -0.24298018 0.3125,-1.95694034 -0.29028468 0.375,-1.94154407 -0.33688985 0.4375,-1.92387953 -0.38268343 0.5,-1.90398929 -0.42755509 0.5625,-1.88192126 -0.47139674 0.625,-1.85772861 -0.51410274 0.6875,-1.83146961 -0.55557023 0.75,-1.80320753 -0.5956993 0.8125,-1.77301045 -0.63439328 0.875,-1.74095113 -0.67155895 0.9375,-1.70710678 -0.70710678 1,-1.67155895 -0.74095113 1.0625,-1.63439328 -0.77301045 1.125,-1.5956993 -0.80320753 1.1875,-1.55557023 -0.83146961 1.25,-1.51410274 -0.85772861 1.3125,-1.47139674 -0.88192126 1.375,-1.42755509 -0.90398929 1.4375,-1.38268343 -0.92387953 1.5,-1.33688985 -0.94154407 1.5625,-1.29028468 -0.95694034 1.625,-1.24298018 -0.97003125 1.6875,-1.19509032 -0.98078528 1.75,-1.14673047 -0.98917651 1.8125,-1.09801714 -0.99518473 1.875,-1.04906767 -0.99879546 1.9375,-1 -1 2,-0.95093233 -0.99879546 2.0625,-0.90198286 -0.99518473 2.125,-0.85326953 -0.98917651 2.1875,-0.80490968 -0.98078528 2.25,-0.75701982 -0.97003125 2.3125,-0.70971532 -0.95694034 2.375,-0.66311015 -0.94154407 2.4375,-0.61731657 -0.92387953 2.5,-0.57244491 -0.90398929 2.5625,-0.52860326 -0.88192126 2.625,-0.48589726 -0.85772861 2.6875,-0.44442977 -0.83146961 2.75,-0.4043007 -0.80320753 2.8125,-0.36560672 -0.77301045 2.875,-0.32844105 -0.74095113 2.9375,-0.29289322 -0.70710678 3,-0.25904887 -0.67155895 3.0625,-0.22698955 -0.63439328 3.125,-0.19679247 -0.5956993 3.1875,-0.16853039 -0.55557023 3.25,-0.14227139 -0.51410274 3.3125,-0.11807874 -0.47139674 3.375,-0.09601071 -0.42755509 3.4375,-0.07612047 -0.38268343 3.5,-0.05845593 -0.33688985 3.5625,-0.04305966 -0.29028468 3.625,-0.02996875 -0.24298018 3.6875,-0.01921472 -0.19509032 3.75,-0.01082349 -0.14673047 3.8125,-0.00481527 -0.09801714 3.875,-0.00120454 -0.04906767 3.9375,0 0 4,0.00120454 -0.04906767 4.0625,0.00481527 -0.09801714 4.125,0.01082349 -0.14673047 4.1875,0.01921472 -0.19509032 4.25,0.02996875 -0.24298018 4.3125,0.04305966 -0.29028468 4.375,0.05845593 -0.33688985 4.4375,0.07612047 -0.38268343 4.5,0.09601071 -0.42755509 4.5625,0.11807874 -0.47139674 4.625,0.14227139 -0.51410274 4.6875,0.16853039 -0.55557023 4.75,0.19679247 -0.5956993 4.8125,0.22698955 -0.63439328 4.875,0.25904887 -0.67155895 4.9375,0.29289322 -0.70710678 5,0.32844105 -0.74095113 5.0625,0.36560672 -0.77301045 5.125,0.4043007 -0.80320753 5.1875,0.44442977 -0.83146961 5.25,0.48589726 -0.85772861 5.3125,0.52860326 -0.88192126 5.375,0.57244491 -0.90398929 5.4375,0.61731657 -0.92387953 5.5,0.66311015 -0.94154407 5.5625,0.70971532 -0.95694034 5.625,0.75701982 -0.97003125 5.6875,0.80490968 -0.98078528 5.75,0.85326953 -0.98917651 5.8125,0.90198286 -0.99518473 5.875,0.95093233 -0.99879546 5.9375,1 -1 6,1.04906767 -0.99879546 6.0625,1.09801714 -0.99518473 6.125,1.14673047 -0.98917651 6.1875,1.19509032 -0.98078528 6.25,1.24298018 -0.97003125 6.3125,1.29028468 -0.95694034 6.375,1.33688985 -0.94154407 6.4375,1.38268343 -0.92387953 6.5,1.42755509 -0.90398929 6.5625,1.47139674 -0.88192126 6.625,1.51410274 -0.85772861 6.6875,1.55557023 -0.83146961 6.75,1.5956993 -0.80320753 6.8125,1.63439328 -0.77301045 6.875,1.67155895 -0.74095113 6.9375,1.70710678 -0.70710678 7,1.74095113 -0.67155895 7.0625,1.77301045 -0.63439328 7.125,1.80320753 -0.5956993 7.1875,1.83146961 -0.55557023 7.25,1.85772861 -0.51410274 7.3125,1.88192126 -0.47139674 7.375,1.90398929 -0.42755509 7.4375,1.92387953 -0.38268343 7.5,1.94154407 -0.33688985 7.5625,1.95694034 -0.29028468 7.625,1.97003125 -0.24298018 7.6875,1.98078528 -0.19509032 7.75,1.98917651 -0.14673047 7.8125,1.99518473 -0.09801714 7.875,1.99879546 -0.04906767 7.9375,2 0 8,1.99759091 0.09813535 7.875,1.99036945 0.19603428 7.75,1.97835302 0.29346095 7.625,1.96157056 0.39018064 7.5,1.94006251 0.48596036 7.375,1.91388067 0.58056935 7.25,1.88308813 0.67377971 7.125,1.84775907 0.76536686 7,1.80797859 0.85511019 6.875,1.76384253 0.94279347 6.75,1.71545722 1.02820549 6.625,1.66293922 1.11114047 6.5,1.60641506 1.19139861 6.375,1.54602091 1.26878657 6.25,1.48190225 1.34311791 6.125,1.41421356 1.41421356 6,1.34311791 1.48190225 5.875,1.26878657 1.54602091 5.75,1.19139861 1.60641506 5.625,1.11114047 1.66293922 5.5,1.02820549 1.71545722 5.375,0.94279347 1.76384253 5.25,0.85511019 1.80797859 5.125,0.76536686 1.84775907 5,0.67377971 1.88308813 4.875,0.58056935 1.91388067 4.75,0.48596036 1.94006251 4.625,0.39018064 1.96157056 4.5,0.29346095 1.97835302 4.375,0.19603428 1.99036945 4.25,0.09813535 1.99759091 4.125,0 2 4,-0.09813535 1.99759091 3.875,-0.19603428 1.99036945 3.75,-0.29346095 1.97835302 3.625,-0.39018064 1.96157056 3.5,-0.48596036 1.94006251 3.375,-0.58056935 1.91388067 3.25,-0.67377971 1.88308813 3.125,-0.76536686 1.84775907 3,-0.85511019 1.80797859 2.875,-0.94279347 1.76384253 2.75,-1.02820549 1.71545722 2.625,-1.11114047 1.66293922 2.5,-1.19139861 1.60641506 2.375,-1.26878657 1.54602091 2.25,-1.34311791 1.48190225 2.125,-1.41421356 1.41421356 2,-1.48190225 1.34311791 1.875,-1.54602091 1.26878657 1.75,-1.60641506 1.19139861 1.625,-1.66293922 1.11114047 1.5,-1.71545722 1.02820549 1.375,-1.76384253 0.94279347 1.25,-1.80797859 0.85511019 1.125,-1.84775907 0.76536686 1,-1.88308813 0.67377971 0.875,-1.91388067 0.58056935 0.75,-1.94006251 0.48596036 0.625,-1.96157056 0.39018064 0.5,-1.97835302 0.29346095 0.375,-1.99036945 0.19603428 0.25,-1.99759091 0.09813535 0.125,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8))) ST_CurveToLine03|MULTIPOLYGON(((-2 0 0,-1.99879546 -0.04906767 0.03125,-1.99518473 -0.09801714 0.0625,-1.98917651 -0.14673047 0.09375,-1.98078528 -0.19509032 0.125,-1.97003125 -0.24298018 0.15625,-1.95694034 -0.29028468 0.1875,-1.94154407 -0.33688985 0.21875,-1.92387953 -0.38268343 0.25,-1.90398929 -0.42755509 0.28125,-1.88192126 -0.47139674 0.3125,-1.85772861 -0.51410274 0.34375,-1.83146961 -0.55557023 0.375,-1.80320753 -0.5956993 0.40625,-1.77301045 -0.63439328 0.4375,-1.74095113 -0.67155895 0.46875,-1.70710678 -0.70710678 0.5,-1.67155895 -0.74095113 0.53125,-1.63439328 -0.77301045 0.5625,-1.5956993 -0.80320753 0.59375,-1.55557023 -0.83146961 0.625,-1.51410274 -0.85772861 0.65625,-1.47139674 -0.88192126 0.6875,-1.42755509 -0.90398929 0.71875,-1.38268343 -0.92387953 0.75,-1.33688985 -0.94154407 0.78125,-1.29028468 -0.95694034 0.8125,-1.24298018 -0.97003125 0.84375,-1.19509032 -0.98078528 0.875,-1.14673047 -0.98917651 0.90625,-1.09801714 -0.99518473 0.9375,-1.04906767 -0.99879546 0.96875,-1 -1 1,-0.95093233 -0.99879546 1.03125,-0.90198286 -0.99518473 1.0625,-0.85326953 -0.98917651 1.09375,-0.80490968 -0.98078528 1.125,-0.75701982 -0.97003125 1.15625,-0.70971532 -0.95694034 1.1875,-0.66311015 -0.94154407 1.21875,-0.61731657 -0.92387953 1.25,-0.57244491 -0.90398929 1.28125,-0.52860326 -0.88192126 1.3125,-0.48589726 -0.85772861 1.34375,-0.44442977 -0.83146961 1.375,-0.4043007 -0.80320753 1.40625,-0.36560672 -0.77301045 1.4375,-0.32844105 -0.74095113 1.46875,-0.29289322 -0.70710678 1.5,-0.25904887 -0.67155895 1.53125,-0.22698955 -0.63439328 1.5625,-0.19679247 -0.5956993 1.59375,-0.16853039 -0.55557023 1.625,-0.14227139 -0.51410274 1.65625,-0.11807874 -0.47139674 1.6875,-0.09601071 -0.42755509 1.71875,-0.07612047 -0.38268343 1.75,-0.05845593 -0.33688985 1.78125,-0.04305966 -0.29028468 1.8125,-0.02996875 -0.24298018 1.84375,-0.01921472 -0.19509032 1.875,-0.01082349 -0.14673047 1.90625,-0.00481527 -0.09801714 1.9375,-0.00120454 -0.04906767 1.96875,0 0 2,0.00120454 -0.04906767 2.03125,0.00481527 -0.09801714 2.0625,0.01082349 -0.14673047 2.09375,0.01921472 -0.19509032 2.125,0.02996875 -0.24298018 2.15625,0.04305966 -0.29028468 2.1875,0.05845593 -0.33688985 2.21875,0.07612047 -0.38268343 2.25,0.09601071 -0.42755509 2.28125,0.11807874 -0.47139674 2.3125,0.14227139 -0.51410274 2.34375,0.16853039 -0.55557023 2.375,0.19679247 -0.5956993 2.40625,0.22698955 -0.63439328 2.4375,0.25904887 -0.67155895 2.46875,0.29289322 -0.70710678 2.5,0.32844105 -0.74095113 2.53125,0.36560672 -0.77301045 2.5625,0.4043007 -0.80320753 2.59375,0.44442977 -0.83146961 2.625,0.48589726 -0.85772861 2.65625,0.52860326 -0.88192126 2.6875,0.57244491 -0.90398929 2.71875,0.61731657 -0.92387953 2.75,0.66311015 -0.94154407 2.78125,0.70971532 -0.95694034 2.8125,0.75701982 -0.97003125 2.84375,0.80490968 -0.98078528 2.875,0.85326953 -0.98917651 2.90625,0.90198286 -0.99518473 2.9375,0.95093233 -0.99879546 2.96875,1 -1 3,1.04906767 -0.99879546 3.03125,1.09801714 -0.99518473 3.0625,1.14673047 -0.98917651 3.09375,1.19509032 -0.98078528 3.125,1.24298018 -0.97003125 3.15625,1.29028468 -0.95694034 3.1875,1.33688985 -0.94154407 3.21875,1.38268343 -0.92387953 3.25,1.42755509 -0.90398929 3.28125,1.47139674 -0.88192126 3.3125,1.51410274 -0.85772861 3.34375,1.55557023 -0.83146961 3.375,1.5956993 -0.80320753 3.40625,1.63439328 -0.77301045 3.4375,1.67155895 -0.74095113 3.46875,1.70710678 -0.70710678 3.5,1.74095113 -0.67155895 3.53125,1.77301045 -0.63439328 3.5625,1.80320753 -0.5956993 3.59375,1.83146961 -0.55557023 3.625,1.85772861 -0.51410274 3.65625,1.88192126 -0.47139674 3.6875,1.90398929 -0.42755509 3.71875,1.92387953 -0.38268343 3.75,1.94154407 -0.33688985 3.78125,1.95694034 -0.29028468 3.8125,1.97003125 -0.24298018 3.84375,1.98078528 -0.19509032 3.875,1.98917651 -0.14673047 3.90625,1.99518473 -0.09801714 3.9375,1.99879546 -0.04906767 3.96875,2 0 4,1.99759091 0.09813535 3.9375,1.99036945 0.19603428 3.875,1.97835302 0.29346095 3.8125,1.96157056 0.39018064 3.75,1.94006251 0.48596036 3.6875,1.91388067 0.58056935 3.625,1.88308813 0.67377971 3.5625,1.84775907 0.76536686 3.5,1.80797859 0.85511019 3.4375,1.76384253 0.94279347 3.375,1.71545722 1.02820549 3.3125,1.66293922 1.11114047 3.25,1.60641506 1.19139861 3.1875,1.54602091 1.26878657 3.125,1.48190225 1.34311791 3.0625,1.41421356 1.41421356 3,1.34311791 1.48190225 2.9375,1.26878657 1.54602091 2.875,1.19139861 1.60641506 2.8125,1.11114047 1.66293922 2.75,1.02820549 1.71545722 2.6875,0.94279347 1.76384253 2.625,0.85511019 1.80797859 2.5625,0.76536686 1.84775907 2.5,0.67377971 1.88308813 2.4375,0.58056935 1.91388067 2.375,0.48596036 1.94006251 2.3125,0.39018064 1.96157056 2.25,0.29346095 1.97835302 2.1875,0.19603428 1.99036945 2.125,0.09813535 1.99759091 2.0625,0 2 2,-0.09813535 1.99759091 1.9375,-0.19603428 1.99036945 1.875,-0.29346095 1.97835302 1.8125,-0.39018064 1.96157056 1.75,-0.48596036 1.94006251 1.6875,-0.58056935 1.91388067 1.625,-0.67377971 1.88308813 1.5625,-0.76536686 1.84775907 1.5,-0.85511019 1.80797859 1.4375,-0.94279347 1.76384253 1.375,-1.02820549 1.71545722 1.3125,-1.11114047 1.66293922 1.25,-1.19139861 1.60641506 1.1875,-1.26878657 1.54602091 1.125,-1.34311791 1.48190225 1.0625,-1.41421356 1.41421356 1,-1.48190225 1.34311791 0.9375,-1.54602091 1.26878657 0.875,-1.60641506 1.19139861 0.8125,-1.66293922 1.11114047 0.75,-1.71545722 1.02820549 0.6875,-1.76384253 0.94279347 0.625,-1.80797859 0.85511019 0.5625,-1.84775907 0.76536686 0.5,-1.88308813 0.67377971 0.4375,-1.91388067 0.58056935 0.375,-1.94006251 0.48596036 0.3125,-1.96157056 0.39018064 0.25,-1.97835302 0.29346095 0.1875,-1.99036945 0.19603428 0.125,-1.99759091 0.09813535 0.0625,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7))) ST_CurveToLine04|MULTIPOLYGON(((-2 0 0 0,-1.99879546 -0.04906767 0.03125 0.0625,-1.99518473 -0.09801714 0.0625 0.125,-1.98917651 -0.14673047 0.09375 0.1875,-1.98078528 -0.19509032 0.125 0.25,-1.97003125 -0.24298018 0.15625 0.3125,-1.95694034 -0.29028468 0.1875 0.375,-1.94154407 -0.33688985 0.21875 0.4375,-1.92387953 -0.38268343 0.25 0.5,-1.90398929 -0.42755509 0.28125 0.5625,-1.88192126 -0.47139674 0.3125 0.625,-1.85772861 -0.51410274 0.34375 0.6875,-1.83146961 -0.55557023 0.375 0.75,-1.80320753 -0.5956993 0.40625 0.8125,-1.77301045 -0.63439328 0.4375 0.875,-1.74095113 -0.67155895 0.46875 0.9375,-1.70710678 -0.70710678 0.5 1,-1.67155895 -0.74095113 0.53125 1.0625,-1.63439328 -0.77301045 0.5625 1.125,-1.5956993 -0.80320753 0.59375 1.1875,-1.55557023 -0.83146961 0.625 1.25,-1.51410274 -0.85772861 0.65625 1.3125,-1.47139674 -0.88192126 0.6875 1.375,-1.42755509 -0.90398929 0.71875 1.4375,-1.38268343 -0.92387953 0.75 1.5,-1.33688985 -0.94154407 0.78125 1.5625,-1.29028468 -0.95694034 0.8125 1.625,-1.24298018 -0.97003125 0.84375 1.6875,-1.19509032 -0.98078528 0.875 1.75,-1.14673047 -0.98917651 0.90625 1.8125,-1.09801714 -0.99518473 0.9375 1.875,-1.04906767 -0.99879546 0.96875 1.9375,-1 -1 1 2,-0.95093233 -0.99879546 1.03125 2.0625,-0.90198286 -0.99518473 1.0625 2.125,-0.85326953 -0.98917651 1.09375 2.1875,-0.80490968 -0.98078528 1.125 2.25,-0.75701982 -0.97003125 1.15625 2.3125,-0.70971532 -0.95694034 1.1875 2.375,-0.66311015 -0.94154407 1.21875 2.4375,-0.61731657 -0.92387953 1.25 2.5,-0.57244491 -0.90398929 1.28125 2.5625,-0.52860326 -0.88192126 1.3125 2.625,-0.48589726 -0.85772861 1.34375 2.6875,-0.44442977 -0.83146961 1.375 2.75,-0.4043007 -0.80320753 1.40625 2.8125,-0.36560672 -0.77301045 1.4375 2.875,-0.32844105 -0.74095113 1.46875 2.9375,-0.29289322 -0.70710678 1.5 3,-0.25904887 -0.67155895 1.53125 3.0625,-0.22698955 -0.63439328 1.5625 3.125,-0.19679247 -0.5956993 1.59375 3.1875,-0.16853039 -0.55557023 1.625 3.25,-0.14227139 -0.51410274 1.65625 3.3125,-0.11807874 -0.47139674 1.6875 3.375,-0.09601071 -0.42755509 1.71875 3.4375,-0.07612047 -0.38268343 1.75 3.5,-0.05845593 -0.33688985 1.78125 3.5625,-0.04305966 -0.29028468 1.8125 3.625,-0.02996875 -0.24298018 1.84375 3.6875,-0.01921472 -0.19509032 1.875 3.75,-0.01082349 -0.14673047 1.90625 3.8125,-0.00481527 -0.09801714 1.9375 3.875,-0.00120454 -0.04906767 1.96875 3.9375,0 0 2 4,0.00120454 -0.04906767 2.03125 4.0625,0.00481527 -0.09801714 2.0625 4.125,0.01082349 -0.14673047 2.09375 4.1875,0.01921472 -0.19509032 2.125 4.25,0.02996875 -0.24298018 2.15625 4.3125,0.04305966 -0.29028468 2.1875 4.375,0.05845593 -0.33688985 2.21875 4.4375,0.07612047 -0.38268343 2.25 4.5,0.09601071 -0.42755509 2.28125 4.5625,0.11807874 -0.47139674 2.3125 4.625,0.14227139 -0.51410274 2.34375 4.6875,0.16853039 -0.55557023 2.375 4.75,0.19679247 -0.5956993 2.40625 4.8125,0.22698955 -0.63439328 2.4375 4.875,0.25904887 -0.67155895 2.46875 4.9375,0.29289322 -0.70710678 2.5 5,0.32844105 -0.74095113 2.53125 5.0625,0.36560672 -0.77301045 2.5625 5.125,0.4043007 -0.80320753 2.59375 5.1875,0.44442977 -0.83146961 2.625 5.25,0.48589726 -0.85772861 2.65625 5.3125,0.52860326 -0.88192126 2.6875 5.375,0.57244491 -0.90398929 2.71875 5.4375,0.61731657 -0.92387953 2.75 5.5,0.66311015 -0.94154407 2.78125 5.5625,0.70971532 -0.95694034 2.8125 5.625,0.75701982 -0.97003125 2.84375 5.6875,0.80490968 -0.98078528 2.875 5.75,0.85326953 -0.98917651 2.90625 5.8125,0.90198286 -0.99518473 2.9375 5.875,0.95093233 -0.99879546 2.96875 5.9375,1 -1 3 6,1.04906767 -0.99879546 3.03125 6.0625,1.09801714 -0.99518473 3.0625 6.125,1.14673047 -0.98917651 3.09375 6.1875,1.19509032 -0.98078528 3.125 6.25,1.24298018 -0.97003125 3.15625 6.3125,1.29028468 -0.95694034 3.1875 6.375,1.33688985 -0.94154407 3.21875 6.4375,1.38268343 -0.92387953 3.25 6.5,1.42755509 -0.90398929 3.28125 6.5625,1.47139674 -0.88192126 3.3125 6.625,1.51410274 -0.85772861 3.34375 6.6875,1.55557023 -0.83146961 3.375 6.75,1.5956993 -0.80320753 3.40625 6.8125,1.63439328 -0.77301045 3.4375 6.875,1.67155895 -0.74095113 3.46875 6.9375,1.70710678 -0.70710678 3.5 7,1.74095113 -0.67155895 3.53125 7.0625,1.77301045 -0.63439328 3.5625 7.125,1.80320753 -0.5956993 3.59375 7.1875,1.83146961 -0.55557023 3.625 7.25,1.85772861 -0.51410274 3.65625 7.3125,1.88192126 -0.47139674 3.6875 7.375,1.90398929 -0.42755509 3.71875 7.4375,1.92387953 -0.38268343 3.75 7.5,1.94154407 -0.33688985 3.78125 7.5625,1.95694034 -0.29028468 3.8125 7.625,1.97003125 -0.24298018 3.84375 7.6875,1.98078528 -0.19509032 3.875 7.75,1.98917651 -0.14673047 3.90625 7.8125,1.99518473 -0.09801714 3.9375 7.875,1.99879546 -0.04906767 3.96875 7.9375,2 0 4 8,1.99759091 0.09813535 3.9375 7.875,1.99036945 0.19603428 3.875 7.75,1.97835302 0.29346095 3.8125 7.625,1.96157056 0.39018064 3.75 7.5,1.94006251 0.48596036 3.6875 7.375,1.91388067 0.58056935 3.625 7.25,1.88308813 0.67377971 3.5625 7.125,1.84775907 0.76536686 3.5 7,1.80797859 0.85511019 3.4375 6.875,1.76384253 0.94279347 3.375 6.75,1.71545722 1.02820549 3.3125 6.625,1.66293922 1.11114047 3.25 6.5,1.60641506 1.19139861 3.1875 6.375,1.54602091 1.26878657 3.125 6.25,1.48190225 1.34311791 3.0625 6.125,1.41421356 1.41421356 3 6,1.34311791 1.48190225 2.9375 5.875,1.26878657 1.54602091 2.875 5.75,1.19139861 1.60641506 2.8125 5.625,1.11114047 1.66293922 2.75 5.5,1.02820549 1.71545722 2.6875 5.375,0.94279347 1.76384253 2.625 5.25,0.85511019 1.80797859 2.5625 5.125,0.76536686 1.84775907 2.5 5,0.67377971 1.88308813 2.4375 4.875,0.58056935 1.91388067 2.375 4.75,0.48596036 1.94006251 2.3125 4.625,0.39018064 1.96157056 2.25 4.5,0.29346095 1.97835302 2.1875 4.375,0.19603428 1.99036945 2.125 4.25,0.09813535 1.99759091 2.0625 4.125,0 2 2 4,-0.09813535 1.99759091 1.9375 3.875,-0.19603428 1.99036945 1.875 3.75,-0.29346095 1.97835302 1.8125 3.625,-0.39018064 1.96157056 1.75 3.5,-0.48596036 1.94006251 1.6875 3.375,-0.58056935 1.91388067 1.625 3.25,-0.67377971 1.88308813 1.5625 3.125,-0.76536686 1.84775907 1.5 3,-0.85511019 1.80797859 1.4375 2.875,-0.94279347 1.76384253 1.375 2.75,-1.02820549 1.71545722 1.3125 2.625,-1.11114047 1.66293922 1.25 2.5,-1.19139861 1.60641506 1.1875 2.375,-1.26878657 1.54602091 1.125 2.25,-1.34311791 1.48190225 1.0625 2.125,-1.41421356 1.41421356 1 2,-1.48190225 1.34311791 0.9375 1.875,-1.54602091 1.26878657 0.875 1.75,-1.60641506 1.19139861 0.8125 1.625,-1.66293922 1.11114047 0.75 1.5,-1.71545722 1.02820549 0.6875 1.375,-1.76384253 0.94279347 0.625 1.25,-1.80797859 0.85511019 0.5625 1.125,-1.84775907 0.76536686 0.5 1,-1.88308813 0.67377971 0.4375 0.875,-1.91388067 0.58056935 0.375 0.75,-1.94006251 0.48596036 0.3125 0.625,-1.96157056 0.39018064 0.25 0.5,-1.97835302 0.29346095 0.1875 0.375,-1.99036945 0.19603428 0.125 0.25,-1.99759091 0.09813535 0.0625 0.125,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8))) astext01|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8))) astext02|MULTISURFACE M (CURVEPOLYGON M (CIRCULARSTRING M (-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8))) astext03|MULTISURFACE Z (CURVEPOLYGON Z (CIRCULARSTRING Z (-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7))) astext04|MULTISURFACE ZM (CURVEPOLYGON ZM (CIRCULARSTRING ZM (-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8))) asewkt01|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8))) asewkt02|MULTISURFACEM(CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)),((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8))) asewkt03|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)),((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7))) asewkt04|MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)),((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8))) box2d01|BOX(-2 -1,10 14) box2d02|BOX(-2 -1,10 14) box2d03|BOX(-2 -1,10 14) box2d04|BOX(-2 -1,10 14) box3d01|BOX3D(-2 -1 0,10 14 0) box3d02|BOX3D(-2 -1 0,10 14 0) box3d03|BOX3D(-2 -1 0,10 14 7) box3d04|BOX3D(-2 -1 0,10 14 7) ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. dimension01|2 dimension02|2 dimension03|2 dimension04|2 numGeometries01|2 numGeometries02|2 numGeometries03|2 numGeometries04|2 geometryN-201|POLYGON((7 8,10 10,6 14,4 11,7 8)) geometryN-202|POLYGONM((7 8 8,10 10 5,6 14 1,4 11 6,7 8 8)) geometryN-203|POLYGON((7 8 7,10 10 5,6 14 3,4 11 4,7 8 7)) geometryN-204|POLYGON((7 8 7 8,10 10 5 5,6 14 3 1,4 11 4 6,7 8 7 8)) geometryN-301|t geometryN-302|t geometryN-303|t geometryN-304|t public.multisurface.the_geom_2d effectively removed. public.multisurface.the_geom_3dm effectively removed. public.multisurface.the_geom_3dz effectively removed. public.multisurface.the_geom_4d effectively removed. ��������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-compoundcurve_expected���������������������������������������0000644�0000000�0000000�00000023214�12220405345�023132� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ndims01|4 geometrytype01|COMPOUNDCURVE ndims02|3 geometrytype02|COMPOUNDCURVE ndims03|3 geometrytype03|COMPOUNDCURVEM ndims04|2 geometrytype04|COMPOUNDCURVE ndims01|4 geometrytype01|COMPOUNDCURVE ndims02|3 geometrytype02|COMPOUNDCURVE ndims03|3 geometrytype03|COMPOUNDCURVEM ndims04|2 geometrytype04|COMPOUNDCURVE astext01|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0)) astext02|COMPOUNDCURVE M (CIRCULARSTRING M (0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0)) astext03|COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1),(0.585786437626905 1.4142135623731 1,2 0 0,0 0 0)) astext04|COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2),(0.585786437626905 1.4142135623731 1 2,2 0 0 0,0 0 0 0)) asewkt01|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0)) asewkt02|COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0)) asewkt03|COMPOUNDCURVE(CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1),(0.585786437626905 1.4142135623731 1,2 0 0,0 0 0)) asewkt04|COMPOUNDCURVE(CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2),(0.585786437626905 1.4142135623731 1 2,2 0 0 0,0 0 0 0)) ST_CurveToLine-201|LINESTRING(0 0,0.58578644 1.41421356,2 0,0 0) ST_CurveToLine-202|LINESTRINGM(0 0 0,0.58578644 1.41421356 2,2 0 0,0 0 0) ST_CurveToLine-203|LINESTRING(0 0 0,0.58578644 1.41421356 1,2 0 0,0 0 0) ST_CurveToLine-204|LINESTRING(0 0 0 0,0.58578644 1.41421356 1 2,2 0 0 0,0 0 0 0) ST_CurveToLine-401|LINESTRING(0 0,0.15224093 0.76536686,0.58578644 1.41421356,2 0,0 0) ST_CurveToLine-402|LINESTRINGM(0 0 0,0.15224093 0.76536686 -1.5,0.58578644 1.41421356 2,2 0 0,0 0 0) ST_CurveToLine-403|LINESTRING(0 0 0,0.15224093 0.76536686 2.25,0.58578644 1.41421356 1,2 0 0,0 0 0) ST_CurveToLine-404|LINESTRING(0 0 0 0,0.15224093 0.76536686 2.25 -1.5,0.58578644 1.41421356 1 2,2 0 0 0,0 0 0 0) ST_CurveToLine01|LINESTRING(0 0,0.00240909 0.09813535,0.00963055 0.19603428,0.02164698 0.29346095,0.03842944 0.39018064,0.05993749 0.48596036,0.08611933 0.58056935,0.11691187 0.67377971,0.15224093 0.76536686,0.19202141 0.85511019,0.23615747 0.94279347,0.28454278 1.02820549,0.33706078 1.11114047,0.39358494 1.19139861,0.45397909 1.26878657,0.51809775 1.34311791,0.58578644 1.41421356,2 0,0 0) ST_CurveToLine02|LINESTRINGM(0 0 0,0.00240909 0.09813535 -0.1875,0.00963055 0.19603428 -0.375,0.02164698 0.29346095 -0.5625,0.03842944 0.39018064 -0.75,0.05993749 0.48596036 -0.9375,0.08611933 0.58056935 -1.125,0.11691187 0.67377971 -1.3125,0.15224093 0.76536686 -1.5,0.19202141 0.85511019 -1.6875,0.23615747 0.94279347 -1.875,0.28454278 1.02820549 -1.75,0.33706078 1.11114047 -1,0.39358494 1.19139861 -0.25,0.45397909 1.26878657 0.5,0.51809775 1.34311791 1.25,0.58578644 1.41421356 2,2 0 0,0 0 0) ST_CurveToLine03|LINESTRING(0 0 0,0.00240909 0.09813535 0.28125,0.00963055 0.19603428 0.5625,0.02164698 0.29346095 0.84375,0.03842944 0.39018064 1.125,0.05993749 0.48596036 1.40625,0.08611933 0.58056935 1.6875,0.11691187 0.67377971 1.96875,0.15224093 0.76536686 2.25,0.19202141 0.85511019 2.53125,0.23615747 0.94279347 2.8125,0.28454278 1.02820549 2.875,0.33706078 1.11114047 2.5,0.39358494 1.19139861 2.125,0.45397909 1.26878657 1.75,0.51809775 1.34311791 1.375,0.58578644 1.41421356 1,2 0 0,0 0 0) ST_CurveToLine04|LINESTRING(0 0 0 0,0.00240909 0.09813535 0.28125 -0.1875,0.00963055 0.19603428 0.5625 -0.375,0.02164698 0.29346095 0.84375 -0.5625,0.03842944 0.39018064 1.125 -0.75,0.05993749 0.48596036 1.40625 -0.9375,0.08611933 0.58056935 1.6875 -1.125,0.11691187 0.67377971 1.96875 -1.3125,0.15224093 0.76536686 2.25 -1.5,0.19202141 0.85511019 2.53125 -1.6875,0.23615747 0.94279347 2.8125 -1.875,0.28454278 1.02820549 2.875 -1.75,0.33706078 1.11114047 2.5 -1,0.39358494 1.19139861 2.125 -0.25,0.45397909 1.26878657 1.75 0.5,0.51809775 1.34311791 1.375 1.25,0.58578644 1.41421356 1 2,2 0 0 0,0 0 0 0) astext01|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0)) astext02|COMPOUNDCURVE M (CIRCULARSTRING M (0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0)) astext03|COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1),(0.585786437626905 1.4142135623731 1,2 0 0,0 0 0)) astext04|COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2),(0.585786437626905 1.4142135623731 1 2,2 0 0 0,0 0 0 0)) asewkt01|COMPOUNDCURVE(CIRCULARSTRING(0 0,0.267949192431123 1,0.585786437626905 1.4142135623731),(0.585786437626905 1.4142135623731,2 0,0 0)) asewkt02|COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 0,0.267949192431123 1 -2,0.585786437626905 1.4142135623731 2),(0.585786437626905 1.4142135623731 2,2 0 0,0 0 0)) asewkt03|COMPOUNDCURVE(CIRCULARSTRING(0 0 0,0.267949192431123 1 3,0.585786437626905 1.4142135623731 1),(0.585786437626905 1.4142135623731 1,2 0 0,0 0 0)) asewkt04|COMPOUNDCURVE(CIRCULARSTRING(0 0 0 0,0.267949192431123 1 3 -2,0.585786437626905 1.4142135623731 1 2),(0.585786437626905 1.4142135623731 1 2,2 0 0 0,0 0 0 0)) ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. dimension01|1 dimension02|1 dimension03|1 dimension04|1 SRID01|0 SRID02|0 SRID03|0 SRID04|0 ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. envelope01|POLYGON((0 0,0 1.41421356,2 1.41421356,2 0,0 0)) envelope02|POLYGON((0 0,0 1.41421356,2 1.41421356,2 0,0 0)) envelope03|POLYGON((0 0,0 1.41421356,2 1.41421356,2 0,0 0)) envelope04|POLYGON((0 0,0 1.41421356,2 1.41421356,2 0,0 0)) public.compoundcurve.the_geom_4d effectively removed. public.compoundcurve.the_geom_3dz effectively removed. public.compoundcurve.the_geom_3dm effectively removed. public.compoundcurve.the_geom_2d effectively removed. valid wkt compound curve 1|0109000000020000000102000000030000009fe5797057376340e09398b1b2373bc05aae0a165f0963409f6760a2493d3dc0db6286dfb057634082d8a1b32f843ec0010200000004000000db6286dfb057634082d8a1b32f843ec075b4e4d0c60c634031fa5d1a371540c0d7197ced9b636340a3cb59a7630a41c050f4a72ac0fb6240974769fce3cf41c0 valid wkt compound curve 2|0109000000010000000102000000060000009fe5797057376340e09398b1b2373bc05aae0a165f0963409f6760a2493d3dc0db6286dfb057634082d8a1b32f843ec075b4e4d0c60c634031fa5d1a371540c0d7197ced9b636340a3cb59a7630a41c050f4a72ac0fb6240974769fce3cf41c0 valid wkt compound curve 3|0109000000010000000102000000030000000ce586d73cf36240bbc46888f0523bc0102e91c951e76240df90a1bec0f841c0f970c100ffd7624074ade6ce86cd3bc0 valid wkt compound curve 4|0109000000020000000102000000030000009fe5797057376340e09398b1b2373bc05aae0a165f0963409f6760a2493d3dc0db6286dfb057634082d8a1b32f843ec0010800000005000000db6286dfb057634082d8a1b32f843ec0db6286dfb057634082d8a1b32f843ec075b4e4d0c60c634031fa5d1a371540c0d7197ced9b636340a3cb59a7630a41c050f4a72ac0fb6240974769fce3cf41c0 valid wkt compound curve 5|010900000003000000010800000003000000468280e724bc6340bf4b46210b973bc0f890aea18d8063402d9664151d483cc0eed64bb6ee726340903ca5bda0863ac0010200000004000000eed64bb6ee726340903ca5bda0863ac09fe5797057376340e09398b1b2373bc05aae0a165f0963409f6760a2493d3dc0db6286dfb057634082d8a1b32f843ec0010800000005000000db6286dfb057634082d8a1b32f843ec0db6286dfb057634082d8a1b32f843ec075b4e4d0c60c634031fa5d1a371540c0d7197ced9b636340a3cb59a7630a41c050f4a72ac0fb6240974769fce3cf41c0 ERROR: incontinuous compound curve ERROR: incontinuous compound curve ERROR: geometry must have an odd number of points valid wkb compound curve 1|COMPOUNDCURVE((153.72942375 -27.2175704,152.29285719 -29.23940482,154.74034096 -30.51635287),(154.74034096 -30.51635287,152.39926953 -32.16574411,155.11278414 -34.08116619,151.86720784 -35.62414508)) valid wkb compound curve 2|COMPOUNDCURVE((153.72942375 -27.2175704,152.29285719 -29.23940482,154.74034096 -30.51635287,152.39926953 -32.16574411,155.11278414 -34.08116619,151.86720784 -35.62414508)) valid wkb compound curve 3|COMPOUNDCURVE((151.60117699 -27.32398274,151.22873381 -35.9433821,150.74987829 -27.80283826)) valid wkb compound curve 4|COMPOUNDCURVE((153.72942375 -27.2175704,152.29285719 -29.23940482,154.74034096 -30.51635287),CIRCULARSTRING(154.74034096 -30.51635287,154.74034096 -30.51635287,152.39926953 -32.16574411,155.11278414 -34.08116619,151.86720784 -35.62414508)) valid wkb compound curve 5|COMPOUNDCURVE(CIRCULARSTRING(157.87950492 -27.59001358,156.01728901 -28.28169378,155.59163966 -26.52589021),(155.59163966 -26.52589021,153.72942375 -27.2175704,152.29285719 -29.23940482,154.74034096 -30.51635287),CIRCULARSTRING(154.74034096 -30.51635287,154.74034096 -30.51635287,152.39926953 -32.16574411,155.11278414 -34.08116619,151.86720784 -35.62414508)) null response| minpoints issues - pass|01090000000100000001020000000200000000000000000000000000000000000000000000000000f03f000000000000f03f minpoints issues - pass|010900000001000000010800000003000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f ERROR: geometry requires more points ERROR: geometry requires more points ERROR: geometry requires more points ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/hausdorff_expected��������������������������������������������������0000644�0000000�0000000�00000000232�11722777314�021027� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hausdorff_poly_poly|0.707106781186548 hausdorff_ls_ls|1 hausdorff_ls_ls_2|2 hausdorff_ls_mp|1 hausdorff_ls_ls_3|14.142135623731 hausdorffdensify_ls_ls|70 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_gml.sql����������������������������������������������������������0000644�0000000�0000000�00000317613�12314525005�017230� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- GeomFromGML regression test -- Written by Olivier Courtin - Oslandia -- -- -- spatial_ref_sys datas -- -- EPSG 4326 : WGS 84 INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4326,'EPSG',4326,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); --- EPSG 27562 : NTF (Paris) / Lambert Centre France INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27562,'EPSG',27562,'PROJCS["NTF (Paris) / Lambert Centre France",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27562"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- EPSG 27582 : NTF (Paris) / France II (deprecated) INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27582,'EPSG',27582,'PROJCS["NTF (Paris) / France II (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","27582"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); -- Empty Geometry SELECT 'empty_geom', ST_AsEWKT(ST_GeomFromGML(NULL)); -- -- XML -- -- ERROR: Empty String SELECT 'xml_1', ST_AsEWKT(ST_GeomFromGML('')); -- ERROR: Not well formed XML SELECT 'xml_2', ST_AsEWKT(ST_GeomFromGML('<foo>')); -- ERROR: Not a GML Geometry SELECT 'xml_3', ST_AsEWKT(ST_GeomFromGML('<foo/>')); -- -- Point -- -- 1 Point SELECT 'point_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- ERROR: 2 points SELECT 'point_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1,2 3,4</gml:coordinates></gml:Point>')); -- ERROR: empty point SELECT 'point_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point></gml:Point>')); -- srsName handle SELECT 'point_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>')); -- -- LineString -- -- 2 Points SELECT 'linestring_1', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString>')); -- ERROR 1 Point SELECT 'linestring_2', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates>1,2</gml:coordinates></gml:LineString>')); -- srsName handle SELECT 'linestring_3', ST_AsEWKT(ST_GeomFromGML('<gml:LineString srsName="EPSG:4326"><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString>')); -- ERROR: empty coordinates SELECT 'linestring_4', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates></gml:coordinates></gml:LineString>')); SELECT 'linestring_5', ST_AsEWKT(ST_GeomFromGML('<gml:LineString></gml:LineString>')); -- XML not elements handle SELECT 'linestring_6', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:LineString> <!-- --> <gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString>')); -- -- Curve -- -- 2 Points SELECT 'curve_1', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- ERROR 1 Point SELECT 'curve_2', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- srsName handle SELECT 'curve_3', ST_AsEWKT(ST_GeomFromGML('<gml:Curve srsName="EPSG:4326"><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- ERROR: empty coordinates SELECT 'curve_4', ST_AsEWKT(ST_GeomFromGML('<gml:Curve srsName="EPSG:4326"><gml:segments><gml:LineStringSegment><gml:posList></gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); SELECT 'curve_5', ST_AsEWKT(ST_GeomFromGML('<gml:Curve srsName="EPSG:4326"><gml:segments><gml:LineStringSegment></gml:LineStringSegment></gml:segments></gml:Curve>')); SELECT 'curve_6', ST_AsEWKT(ST_GeomFromGML('<gml:Curve srsName="EPSG:4326"><gml:segments></gml:segments></gml:Curve>')); SELECT 'curve_7', ST_AsEWKT(ST_GeomFromGML('<gml:Curve srsName="EPSG:4326"></gml:Curve>')); -- linear interpolation SELECT 'curve_8', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment interpolation="linear"><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- ERROR: wrong interpolation SELECT 'curve_9', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment interpolation="spline"><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- XML not elements handle SELECT 'curve_10', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:Curve> <!-- --> <gml:segments> <!-- --> <gml:LineStringSegment> <!-- --> <gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- 2 Segments SELECT 'curve_11', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment><gml:LineStringSegment><gml:posList>3 4 5 6</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); SELECT 'curve_12', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">1 2 3 4 5 6</gml:posList></gml:LineStringSegment><gml:LineStringSegment><gml:posList srsDimension="3">4 5 6 7 8 9</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- ERROR 2 Segments disjoint SELECT 'curve_13', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment><gml:LineStringSegment><gml:posList>5 6 7 8</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- ERROR 2 3D Segments disjoint in Z SELECT 'curve_14', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">1 2 3 4 5 6</gml:posList></gml:LineStringSegment><gml:LineStringSegment><gml:posList srsDimension="3">4 5 0 7 8 9</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- 2 segments, mixed dimension SELECT 'curve_15', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">1 2 3 4 5 6</gml:posList></gml:LineStringSegment><gml:LineStringSegment><gml:posList srsDimension="2">4 5 7 8</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); SELECT 'curve_16', ST_AsEWKT(ST_GeomFromGML('<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">1 2 3 4</gml:posList></gml:LineStringSegment><gml:LineStringSegment><gml:posList srsDimension="3">3 4 5 6 7 8</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>')); -- -- Polygon -- -- GML 2 - 1 ring SELECT 'polygon_1', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>')); -- srsName handle SELECT 'polygon_2', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>')); -- ERROR: In exterior ring: Last point is not the same as the first one SELECT 'polygon_3', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>')); -- ERROR: In exterior 3D ring: Last point is not the same as the first one in Z SELECT 'polygon_4', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2,3 4,5,6 7,8,9 1,2,0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>')); -- ERROR: Only 3 points in exterior ring SELECT 'polygon_5', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>')); -- ERROR: Empty exterior ring coordinates SELECT 'polygon_6', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates></gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>')); SELECT 'polygon_7', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>')); SELECT 'polygon_8', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs></gml:outerBoundaryIs></gml:Polygon>')); SELECT 'polygon_9', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon></gml:Polygon>')); -- GML 2 - 2 rings SELECT 'polygon_10', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>')); -- XML not elements handle SELECT 'polygon_11', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:Polygon> <!-- --> <gml:outerBoundaryIs> <!-- --> <gml:LinearRing> <!-- --> <gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs> <!-- --> <gml:innerBoundaryIs> <!-- --> <gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>')); -- Empty interior ring coordinates (even if defined) SELECT 'polygon_12', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs></gml:innerBoundaryIs></gml:Polygon>')); -- ERROR: Only 3 points in interior ring SELECT 'polygon_13', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>7,8 9,10 7,8</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>')); -- ERROR: In interior ring: Last point is not the same as the first one SELECT 'polygon_14', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,9</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>')); -- ERROR: In interior 3D ring: Last point is not the same as the first one in Z SELECT 'polygon_15', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2,3 4,5,6 7,8,9 1,2,3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>10,11,12 13,14,15 16,17,18 10,11,0</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>')); -- GML 2 - 3 rings SELECT 'polygon_16', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>13,14 15,16 17,18 13,14</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>')); -- GML 3 SELECT 'polygon_17', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:interior></gml:Polygon>')); -- Mixed dimension in rings SELECT 'polygon_18', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">10 11 12 13 14 15 10 11</gml:posList></gml:LinearRing></gml:interior></gml:Polygon>')); SELECT 'polygon_19', ST_AsEWKT(ST_GeomFromGML('<gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">7 8 9 10 11 12 13 14 15 7 8 9</gml:posList></gml:LinearRing></gml:interior></gml:Polygon>')); -- -- LinearRing -- -- 2D LinearRing SELECT 'linearring_1', ST_AsEWKT(ST_GeomFromGML('<gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing>')); -- srsName handle SELECT 'linearring_2', ST_AsEWKT(ST_GeomFromGML('<gml:LinearRing srsName="EPSG:4326"><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing>')); -- ERROR: Last point is not the same as the first one SELECT 'linearring_3', ST_AsEWKT(ST_GeomFromGML('<gml:LinearRing><gml:posList>1 2 3 4 5 6 1 3</gml:posList></gml:LinearRing>')); -- ERROR: Last point is not the same as the first one in Z SELECT 'linearring_4', ST_AsEWKT(ST_GeomFromGML('<gml:LinearRing><gml:posList>1 2 3 4 5 6 1 3</gml:posList></gml:LinearRing>')); -- ERROR: Only 3 points SELECT 'linearring_5', ST_AsEWKT(ST_GeomFromGML('<gml:LinearRing><gml:posList>1 2 3 4 1 3</gml:posList></gml:LinearRing>')); -- ERROR: Empty coordinates SELECT 'linearring_6', ST_AsEWKT(ST_GeomFromGML('<gml:LinearRing><gml:posList></gml:posList></gml:LinearRing>')); SELECT 'linearring_7', ST_AsEWKT(ST_GeomFromGML('<gml:LinearRing></gml:LinearRing>')); -- XML not elements handle SELECT 'linearring_8', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:LinearRing> <!-- --> <gml:posList>1 2 3 4 5 6 1 2</gml:posList> <!-- --> </gml:LinearRing>')); -- -- Triangle -- -- a triangle SELECT 'triangle_1', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:Triangle>')); -- srsName handle SELECT 'triangle_2', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:Triangle>')); -- ERROR: Last point is not the same as the first one SELECT 'triangle_3', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,0</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surfacne>')); -- ERROR: Last point is not the same as the first one in Z SELECT 'triangle_4', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle><gml:exterior><gml:LinearRing><gml:coordinates>1,2,3 4,5,6 7,8,9 1,2,0</gml:coordinates></gml:LinearRing></gml:exterior></gml:Triangle>')); -- ERROR: Only 3 points SELECT 'triangle_5', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:Triangle>')); -- ERROR: Empty exterior ring coordinates SELECT 'triangle_6', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle><gml:exterior><gml:LinearRing></gml:LinearRing></gml:exterior></gml:Triangle>')); SELECT 'triangle_7', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle><gml:exterior></gml:exterior></gml:Triangle>')); SELECT 'triangle_8', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle></gml:Triangle>')); -- XML not elements handle SELECT 'triangle_9', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:Triangle> <!-- --> <gml:exterior> <!-- --> <gml:LinearRing> <!-- --> <gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:Triangle>')); -- planar interpolation SELECT 'triangle_10', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle interpolation="planar"><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:Triangle>')); -- ERROR: interpolation not planar SELECT 'triangle_11', ST_AsEWKT(ST_GeomFromGML('<gml:Triangle interpolation="not_planar"><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:Triangle>')); -- -- Surface -- -- 1 ring SELECT 'surface_1', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- srsName handle SELECT 'surface_2', ST_AsEWKT(ST_GeomFromGML('<gml:Surface srsName="EPSG:4326"><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: In exterior ring: Last point is not the same as the first one SELECT 'surface_3', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,0</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: In exterior 3D ring: Last point is not the same as the first one in Z SELECT 'surface_4', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2,3 4,5,6 7,8,9 1,2,0</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: Only 3 points in exterior ring SELECT 'surface_5', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: Empty exterior ring coordinates SELECT 'surface_6', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); SELECT 'surface_7', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); SELECT 'surface_8', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch></gml:PolygonPatch></gml:patches></gml:Surface>')); SELECT 'surface_9', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches></gml:patches></gml:Surface>')); SELECT 'surface_10', ST_AsEWKT(ST_GeomFromGML('<gml:Surface></gml:Surface>')); -- 2 rings SELECT 'surface_11', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- XML not elements handle SELECT 'surface_12', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:Surface> <!-- --> <gml:patches> <!-- --> <gml:PolygonPatch> <!-- --> <gml:exterior> <!-- --> <gml:LinearRing> <!-- --> <gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior> <!-- --> <gml:interior> <!-- --> <gml:LinearRing> <!-- --> <gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- Empty interior ring coordinates (even if defined) SELECT 'surface_13', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: Only 3 points in interior ring SELECT 'surface_14', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:coordinates>7,8 9,10 7,8</gml:coordinates></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: In interior ring: Last point is not the same as the first one SELECT 'surface_15', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,0</gml:coordinates></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: In interior 3D ring: Last point is not the same as the first one in Z SELECT 'surface_16', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2,3 4,5,6 7,8,9 1,2,3</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:coordinates>10,11,12 13,14,15 16,17,18 10,11,0</gml:coordinates></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- 3 rings SELECT 'surface_17', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:interior><gml:interior><gml:LinearRing><gml:coordinates>13,14 15,16 17,18 13,14</gml:coordinates></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- Mixed dimension in rings SELECT 'surface_18', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">10 11 12 13 14 15 10 11</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); SELECT 'surface_19', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">7 8 9 10 11 12 13 14 15 7 8 9</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: two patches SELECT 'surface_20', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- planar interpolation SELECT 'surface_21', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch interpolation="planar"><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: interpolation not planar SELECT 'surface_22', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch interpolation="not_planar"><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- ERROR: interior but no exterior SELECT 'surface_23', ST_AsEWKT(ST_GeomFromGML('<gml:Surface><gml:patches><gml:PolygonPatch><gml:interior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface>')); -- -- MultiPoint -- -- 1 point SELECT 'mpoint_1', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint><gml:pointMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>')); -- 2 points SELECT 'mpoint_2', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint><gml:pointMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,4</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>')); -- srsName handle SELECT 'mpoint_3', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>')); -- Empty MultiPoints SELECT 'mpoint_4', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint><gml:pointMember></gml:pointMember></gml:MultiPoint>')); SELECT 'mpoint_5', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint></gml:MultiPoint>')); -- XML not elements handle SELECT 'mpoint_6', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:MultiPoint> <!-- --> <gml:pointMember> <!-- --> <gml:Point> <!-- --> <gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember> <!-- --> <gml:pointMember> <!-- --> <gml:Point> <!-- --> <gml:coordinates>3,4</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>')); -- Mixed srsName SELECT 'mpoint_7', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint srsName="EPSG:27582"><gml:pointMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point srsName="EPSG:27562"><gml:coordinates>400000,5000000</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>')); -- 1 point in pointMembers SELECT 'mpoint_8', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint><gml:pointMembers><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMembers></gml:MultiPoint>')); -- 2 points in pointMembers SELECT 'mpoint_9', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint><gml:pointMembers><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point><gml:Point><gml:coordinates>3,4</gml:coordinates></gml:Point></gml:pointMembers></gml:MultiPoint>')); -- Empty pointMembers SELECT 'mpoint_10', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPoint><gml:pointMembers></gml:pointMembers></gml:MultiPoint>')); -- -- MultiLineString -- -- 1 line SELECT 'mline_1', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString><gml:lineStringMember><gml:LineString><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>')); -- 2 lines SELECT 'mline_2', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString><gml:lineStringMember><gml:LineString><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>5,6 7,8</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>')); -- srsName handle SELECT 'mline_3', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>')); -- Empty MultiLineString SELECT 'mline_4', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString><gml:lineStringMember></gml:lineStringMember></gml:MultiLineString>')); SELECT 'mline_5', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString></gml:MultiLineString>')); -- XML not elements handle SELECT 'mline_6', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:MultiLineString> <!-- --> <gml:lineStringMember> <!-- --> <gml:LineString> <!-- --> <gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString></gml:lineStringMember> <!-- --> <gml:lineStringMember> <!-- --> <gml:LineString> <!-- --> <gml:coordinates>5,6 7,8</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>')); -- Mixed dimension SELECT 'mline_7', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString><gml:lineStringMember><gml:LineString><gml:posList srsDimension="3">1 2 3 4 5 6</gml:posList></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:posList srsDimension="2">7 8 9 10</gml:posList></gml:LineString></gml:lineStringMember></gml:MultiLineString>')); SELECT 'mline_8', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString><gml:lineStringMember><gml:LineString><gml:posList srsDimension="2">1 2 3 4</gml:posList></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:posList srsDimension="3">5 6 7 8 9 10</gml:posList></gml:LineString></gml:lineStringMember></gml:MultiLineString>')); -- Mixed srsName SELECT 'mline_9', ST_AsEWKT(ST_GeomFromGML('<gml:MultiLineString srsName="EPSG:27582"><gml:lineStringMember><gml:LineString><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString srsName="EPSG:27562"><gml:coordinates>400000,5000000 400010,5000010</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>')); -- -- MultiCurve -- -- 1 curve SELECT 'mcurve_1', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>')); -- 2 curves SELECT 'mcurve_2', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>5 6 7 8</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>')); -- srsName handle SELECT 'mcurve_3', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve srsName="EPSG:4326"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>')); -- Empty Curve SELECT 'mcurve_4', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMember></gml:curveMember></gml:MultiCurve>')); SELECT 'mcurve_5', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve></gml:MultiCurve>')); -- XML not elements handle SELECT 'mcurve_6', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:MultiCurve> <!-- --> <gml:curveMember> <!-- --> <gml:Curve> <!-- --> <gml:segments> <!-- --> <gml:LineStringSegment> <!-- --> <gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember> <!-- --> <gml:curveMember> <!-- --> <gml:Curve> <!-- --> <gml:segments> <!-- --> <gml:LineStringSegment><gml:posList>5 6 7 8</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>')); -- Mixed dimension SELECT 'mcurve_7', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">1 2 3 4 5 6</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">7 8 9 10</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>')); SELECT 'mcurve_8', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">5 6 7 8 9 10</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>')); -- Mixed srsName SELECT 'mcurve_9', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve srsName="EPSG:27582"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve srsName="EPSG:27562"><gml:segments><gml:LineStringSegment><gml:coordinates>400000,5000000 400010,5000010</gml:coordinates></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>')); -- 1 curve in curveMembers SELECT 'mcurve_10', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMembers><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMembers></gml:MultiCurve>')); -- 2 curves in curveMembers SELECT 'mcurve_11', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMembers><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>5 6 7 8</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMembers></gml:MultiCurve>')); SELECT 'mcurve_12', ST_AsEWKT(ST_GeomFromGML('<gml:MultiCurve><gml:curveMembers></gml:curveMembers></gml:MultiCurve>')); -- -- MultiPolygon -- -- 1 polygon SELECT 'mpoly_1', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>')); -- 2 polygons SELECT 'mpoly_2', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>')); -- srsName handle SELECT 'mpoly_3', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>')); -- Empty MultiPolygon SELECT 'mpoly_4', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon><gml:polygonMember></gml:polygonMember></gml:MultiPolygon>')); SELECT 'mpoly_5', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon></gml:MultiPolygon>')); -- XML not elements handle SELECT 'mpoly_6', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:MultiPolygon> <!-- --> <gml:polygonMember> <!-- --> <gml:Polygon> <!-- --> <gml:outerBoundaryIs> <!-- --> <gml:LinearRing> <!-- --> <gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember> <!-- --> <gml:polygonMember> <!-- --> <gml:Polygon> <!-- --> <gml:outerBoundaryIs> <!-- --> <gml:LinearRing> <!-- --> <gml:coordinates>7,8 9,10 11,12 7,8</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>')); -- Mixed dimension SELECT 'mpoly_7', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:posList srsDimension="2">10 11 12 13 14 15 10 11</gml:posList></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>')); SELECT 'mpoly_8', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:posList srsDimension="2">1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:posList srsDimension="3">7 8 9 10 11 12 13 14 15 7 8 9</gml:posList></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>')); -- Mixed srsName SELECT 'mpoly_9', ST_AsEWKT(ST_GeomFromGML('<gml:MultiPolygon srsName="EPSG:27582"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon srsName="EPSG:27562"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>400000,5000000 400010,5000010 400020,5000020 400000,5000000</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>400100,5000100 400110,5000110 400120,5000120 400100,5000100</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>')); -- -- MultiSurface -- -- 1 surface SELECT 'msurface_1', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>')); -- 2 surfaces SELECT 'msurface_2', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>7 8 9 10 11 12 7 8</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>')); -- srsName handle SELECT 'msurface_3', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface srsName="EPSG:4326"><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>')); -- Empty MultiSurface SELECT 'msurface_4', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMember></gml:surfaceMember></gml:MultiSurface>')); SELECT 'msurface_5', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface></gml:MultiSurface>')); -- XML not elements handle SELECT 'msurface_6', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:MultiSurface> <!-- --> <gml:surfaceMember> <!-- --> <gml:Polygon> <!-- --> <gml:exterior> <!-- --> <gml:LinearRing> <!-- --> <gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior> <!-- --> </gml:Polygon> <!-- --> </gml:surfaceMember> <!-- --> <gml:surfaceMember> <!-- --> <gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>7 8 9 10 11 12 7 8</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>')); -- Mixed dimension SELECT 'msurface_7', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">10 11 12 13 14 15 10 11</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>')); SELECT 'msurface_8', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">7 8 9 10 11 12 13 14 15 7 8 9</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>')); -- Mixed srsName SELECT 'msurface_9', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface srsName="EPSG:27582"><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:coordinates>1,2 3,4 5,6 1,2</gml:coordinates></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon srsName="EPSG:27562"><gml:exterior><gml:LinearRing><gml:coordinates>400000,5000000 400010,5000010 400020,5000020 400000,5000000</gml:coordinates></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:coordinates>400100,5000100 400110,5000110 400120,5000120 400100,5000100</gml:coordinates></gml:LinearRing></gml:interior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>')); -- 1 surface in surfaceMembers SELECT 'msurface_10', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMembers><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMembers></gml:MultiSurface>')); -- 2 surfaces in surfaceMembers SELECT 'msurface_11', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMembers><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>7 8 9 10 11 12 7 8</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMembers></gml:MultiSurface>')); -- Empty surfaceMembers SELECT 'msurface_12', ST_AsEWKT(ST_GeomFromGML('<gml:MultiSurface><gml:surfaceMembers></gml:surfaceMembers></gml:MultiSurface>')); -- -- PolyhedralSurface -- -- 1 ring SELECT 'polyhedralsurface_1', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- srsName handle SELECT 'polyhedralsurface_2', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface srsName="EPSG:4326"><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: In exterior ring: Last point is not the same as the first one SELECT 'polyhedralsurface_3', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 0 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: In exterior 3D ring: Last point is not the same as the first one in Z SELECT 'polyhedralsurface_4', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 0</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: Only 3 points in exterior ring SELECT 'polyhedralsurface_5', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: Empty exterior ring coordinates SELECT 'polyhedralsurface_6', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); SELECT 'polyhedralsurface_7', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); SELECT 'polyhedralsurface_8', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- EMPTY SELECT 'polyhedralsurface_9', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches></gml:polygonPatches></gml:PolyhedralSurface>')); SELECT 'polyhedralsurface_10', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface></gml:PolyhedralSurface>')); -- 2 rings SELECT 'polyhedralsurface_11', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- 2 patches SELECT 'polyhedralsurface_12', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- 2 patches & 2 rings SELECT 'polyhedralsurface_13', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">19 20 21 22 23 24 25 26 27 19 20 21</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- XML not elements handle SELECT 'polyhedralsurface_14', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:PolyhedralSurface> <!-- --> <gml:polygonPatches> <!-- --> <gml:PolygonPatch> <!-- --> <gml:exterior> <!-- --> <gml:LinearRing> <!-- --> <gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList> <!-- --> </gml:LinearRing> <!-- --> </gml:exterior> <!-- --> </gml:PolygonPatch> <!-- --> <gml:PolygonPatch> <!-- --> <gml:exterior> <!-- --> <gml:LinearRing> <!-- --> <gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList> <!-- --> </gml:LinearRing> <!-- --> </gml:exterior> <!-- --> <gml:interior> <!-- --> <gml:LinearRing> <!-- --> <gml:posList srsDimension="3">19 20 21 22 23 24 25 26 27 19 20 21</gml:posList> <!-- --> </gml:LinearRing> <!-- --> </gml:interior> <!-- --> </gml:PolygonPatch> <!-- --> </gml:polygonPatches> <!-- --> </gml:PolyhedralSurface>')); -- Empty interior ring coordinates (even if defined) SELECT 'polyhedralsurface_15', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: Only 3 points in interior ring SELECT 'polyhedralsurface_16', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 10 11 12</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: In interior ring: Last point is not the same as the first one SELECT 'polyhedralsurface_17', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 0 12</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: In interior 3D ring: Last point is not the same as the first one in Z SELECT 'polyhedralsurface_18', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 0</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- 3 rings SELECT 'polyhedralsurface_19', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList></gml:LinearRing></gml:interior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">19 20 21 22 23 24 25 26 27 19 20 21</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- Mixed dimension in rings SELECT 'polyhedralsurface_20', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">10 11 12 13 14 15 10 11</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); SELECT 'polyhedralsurface_21', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="3">7 8 9 10 11 12 13 14 15 7 8 9</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- Mixed dimension in patches SELECT 'polyhedralsurface_22', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">10 11 12 13 14 15 10 11</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); SELECT 'polyhedralsurface_23', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">7 8 9 10 11 12 13 14 15 7 8 9</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- planar interpolation SELECT 'polyhedralsurface_24', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch interpolation="planar"><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- ERROR: interpolation not planar SELECT 'polyhedralsurface_25', ST_AsEWKT(ST_GeomFromGML('<gml:PolyhedralSurface><gml:polygonPatches><gml:PolygonPatch interpolation="not_planar"><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>')); -- -- Tin and TriangulatedSurface -- -- 1 patch SELECT 'tin_1', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- srsName handle SELECT 'tin_2', ST_AsEWKT(ST_GeomFromGML('<gml:Tin srsName="EPSG:4326"><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- ERROR: Last point is not the same as the first one SELECT 'tin_3', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 0 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- ERROR: Last point is not the same as the first one in Z SELECT 'tin_4', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 0</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- ERROR: Only 3 points in exterior ring SELECT 'tin_5', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- ERROR: Empty exterior ring coordinates SELECT 'tin_6', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); SELECT 'tin_7', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- EMPTY SELECT 'tin_8', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle></gml:Triangle></gml:patches></gml:Tin>')); SELECT 'tin_9', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches></gml:patches></gml:Tin>')); SELECT 'tin_10', ST_AsEWKT(ST_GeomFromGML('<gml:Tin></gml:Tin>')); -- 2 patches SELECT 'tin_11', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- XML not elements handle SELECT 'tin_12', ST_AsEWKT(ST_GeomFromGML('<gml:Tin> <!-- --> <gml:patches> <!-- --> <gml:Triangle> <!-- --> <gml:exterior> <!-- --> <gml:LinearRing> <!-- --> <gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList> <!-- --> </gml:LinearRing> <!-- --> </gml:exterior> <!-- --> </gml:Triangle> <!-- --> <gml:Triangle> <!-- --> <gml:exterior> <!-- --> <gml:LinearRing> <!-- --> <gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList> <!-- --> </gml:LinearRing> <!-- --> </gml:exterior> <!-- --> </gml:Triangle> <!-- --> </gml:patches> <!-- --> </gml:Tin>')); -- 3 patches SELECT 'tin_13', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">10 11 12 13 14 15 16 17 18 10 11 12</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">19 20 21 22 23 24 25 26 27 19 20 21</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- Mixed dimension in patches SELECT 'tin_14', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">10 11 12 13 14 15 10 11</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); SELECT 'tin_15', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">7 8 9 10 11 12 13 14 15 7 8 9</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:Tin>')); -- TriangulatedSurface SELECT 'tin_16', ST_AsEWKT(ST_GeomFromGML('<gml:TriangulatedSurface><gml:patches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:patches></gml:TriangulatedSurface>')); -- trianglePatches SELECT 'tin_17', ST_AsEWKT(ST_GeomFromGML('<gml:Tin><gml:trianglePatches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:trianglePatches></gml:Tin>')); SELECT 'tin_18', ST_AsEWKT(ST_GeomFromGML('<gml:TriangulatedSurface><gml:trianglePatches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">1 2 3 4 5 6 7 8 9 1 2 3</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:trianglePatches></gml:TriangulatedSurface>')); -- -- GeometryCollection -- -- 1 simple geom SELECT 'collection_1', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:geometryMember></gml:MultiGeometry>')); -- 2 simples geom SELECT 'collection_2', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>3 4 5 6</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember></gml:MultiGeometry>')); -- 1 multi geom SELECT 'collection_3', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:MultiPoint><gml:pointMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>3 4</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint></gml:geometryMember></gml:MultiGeometry>')); -- 2 multi geom SELECT 'collection_4', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:MultiPoint><gml:pointMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>3 4</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint></gml:geometryMember><gml:geometryMember><gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>5 6 7 8</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>9 10 11 12</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve></gml:geometryMember></gml:MultiGeometry>')); -- 2 multi geom and 2 simples SELECT 'collection_5', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:MultiPoint><gml:pointMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos>3 4</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint></gml:geometryMember><gml:geometryMember><gml:Point><gml:pos>5 6</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>7 8 9 10</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>11 12 13 14</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve></gml:geometryMember><gml:geometryMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>15 16 17 18 19 20 15 16</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:geometryMember></gml:MultiGeometry>')); -- Empty collection SELECT 'collection_6', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember></gml:geometryMember></gml:MultiGeometry>')); SELECT 'collection_7', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry></gml:MultiGeometry>')); -- Collection of collection SELECT 'collection_8', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:pointMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:pointMember><gml:geometryMember><gml:MultiGeometry><gml:pointMember><gml:Point><gml:coordinates>3,4</gml:coordinates></gml:Point></gml:pointMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>')); -- Collection of collection of collection SELECT 'collection_9', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:Point><gml:coordinates>3,4</gml:coordinates></gml:Point></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>')); -- srsName handle SELECT 'collection_10', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry srsName="EPSG:4326"><gml:geometryMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:geometryMember></gml:MultiGeometry>')); -- XML not elements handle SELECT 'collection_11', ST_AsEWKT(ST_GeomFromGML(' <!-- --> <gml:MultiGeometry> <!-- --> <gml:geometryMember> <!-- --> <gml:Point> <!-- --> <gml:pos srsDimension="2">1 2</gml:pos></gml:Point></gml:geometryMember> <!-- --> <gml:geometryMember> <!-- --> <gml:MultiGeometry> <!-- --> <gml:geometryMember> <!-- --> <gml:MultiGeometry> <!-- --> <gml:geometryMember><gml:Point><gml:pos srsDimension="3">3 4 5</gml:pos></gml:Point></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>')); -- Mixed dimension SELECT 'collection_12', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:pos srsDimension="3">1 2 3</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:Point><gml:pos srsDimension="2">4 5</gml:pos></gml:Point></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>')); SELECT 'collection_13', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:pos srsDimension="2">1 2</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:Point><gml:pos srsDimension="3">3 4 5</gml:pos></gml:Point></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>')); -- Mixed srsName SELECT 'collection_14', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry srsName="EPSG:27582"><gml:geometryMember><gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:MultiGeometry srsName="EPSG:27562"><gml:geometryMember><gml:Point><gml:coordinates>400000,5000000</gml:coordinates></gml:Point></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>')); -- -- srsName -- -- Supported srsName patterns SELECT 'srs_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:EPSG:geographicCRS:4326"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:ogc:def:crs:EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:ogc:def:crs:EPSG:6.6:4326"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:x-ogc:def:crs:EPSG:6.6:4326"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"><gml:pos>1 2</gml:pos></gml:Point>')); -- Use default srsName SELECT 'srs_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 2</gml:pos></gml:Point>', 4326)); -- ERROR not a valid pattern SELECT 'srs_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="a:wrong:pattern:4326"><gml:pos>1 2</gml:pos></gml:Point>')); -- ERROR: not a defined SRID SELECT 'srs_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:01"><gml:pos>1 2</gml:pos></gml:Point>')); -- ERROR: SRID is not an int SELECT 'srs_11', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:abc"><gml:pos>1 2</gml:pos></gml:Point>')); -- ERROR: SRID is not only int SELECT 'srs_12', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:4326abc"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_13', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:abc4326"><gml:pos>1 2</gml:pos></gml:Point>')); -- ERROR: srsName empty SELECT 'srs_14', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:"><gml:pos>1 2</gml:pos></gml:Point>')); SELECT 'srs_15', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName=""><gml:pos>1 2</gml:pos></gml:Point>')); -- ERROR: srsName is defined as -1 SELECT 'srs_16', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:-1"><gml:pos>1 2</gml:pos></gml:Point>')); -- Reverse axis with all kind of simples geometry types SELECT 'srs_17', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry srsName="urn:ogc:def:crs:EPSG::4326"><gml:geometryMember><gml:Point><gml:pos srsDimension="2">1 2</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:LineString><gml:posList srsDimension="2">3 4 5 6</gml:posList></gml:LineString></gml:geometryMember><gml:geometryMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">7 8 9 10</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember><gml:geometryMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">11 12 13 14 15 16 11 12</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">17 18 19 20 21 22 17 18</gml:posList></gml:LinearRing></gml:interior></gml:Polygon></gml:geometryMember><gml:geometryMember><gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">23 24 25 26 27 28 23 24</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">25 26 27 28 29 30 25 26</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface></gml:geometryMember></gml:MultiGeometry>')); -- Reverse axis with severals multi geometry types -- TODO -- -- GML Namespace -- -- GML namespace SELECT 'ns_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- GML namespace without explicit prefix SELECT 'ns_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point xmlns="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- GML 3.2 namespace SELECT 'ns_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point xmlns:gml="http://www.opengis.net/gml/3.2"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- ERROR wrong namespace SELECT 'ns_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point xmlns:gml="http://foo.net"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- Several namespaces SELECT 'ns_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point xmlns:foo="http://bar.net" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- Ignore other namespace element SELECT 'ns_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point xmlns:foo="http://foo.net" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates><foo:coordinates>3,4</foo:coordinates></gml:Point>')); -- Attribute without explicit namespace SELECT 'ns_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- Attribute with explicit GML namespace SELECT 'ns_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point gml:srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- Attribute with explicit GML 3.2 namespace SELECT 'ns_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point gml:srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml/3.2"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- Attribute with explicit prefix but unqualified namespace SELECT 'ns_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point foo:srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- Ignore other namespace attribute SELECT 'ns_11', ST_AsEWKT(ST_GeomFromGML('<gml:Point foo:srsName="EPSG:4326" xmlns:foo="http://foo.net" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>1,2</gml:coordinates><foo:coordinates>3,4</foo:coordinates></gml:Point>')); -- ERROR Attribute with explicit prefix but unqualified namespace SELECT 'ns_12', ST_AsEWKT(ST_GeomFromGML('<gml:Point foo:srsName="EPSG:4326" xmlns:gml="http://foo.net"><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- Explicit GML namespace (no prefix) SELECT 'ns_13', ST_AsEWKT(ST_GeomFromGML('<Point srsName="EPSG:4326" xmlns="http://www.opengis.net/gml"><coordinates>1,2</coordinates></Point>')); -- -- Coordinates (simple) -- -- X,Y SELECT 'coordinates_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>')); -- ERROR: single X SELECT 'coordinates_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1</gml:coordinates></gml:Point>')); -- X,Y,Z SELECT 'coordinates_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1,2,3</gml:coordinates></gml:Point>')); -- ERROR: 4 dimension SELECT 'coordinates_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1,2,3,4</gml:coordinates></gml:Point>')); -- ERROR: Only commas SELECT 'coordinates_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>,</gml:coordinates></gml:Point>')); SELECT 'coordinates_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates> , </gml:coordinates></gml:Point>')); -- ERROR: empty or spaces SELECT 'coordinates_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates></gml:coordinates></gml:Point>')); SELECT 'coordinates_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates> </gml:coordinates></gml:Point>')); -- ERROR: End on comma SELECT 'coordinates_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1,2,3,</gml:coordinates></gml:Point>')); SELECT 'coordinates_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates>1,2,</gml:coordinates></gml:Point>')); -- ERROR: Begin on comma SELECT 'coordinates_11', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates>,1 2,3</gml:coordinates></gml:LineString>')); -- Whitespaces before and after SELECT 'coordinates_12', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates> 1,2 3,4 </gml:coordinates></gml:LineString>')); SELECT 'coordinates_13', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates> 1,2 3,4 </gml:coordinates></gml:LineString>')); -- Mixed dimension SELECT 'coordinates_14', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates>1,2,3 4,5</gml:coordinates></gml:LineString>')); -- ERROR: Spaces insides SELECT 'coordinates_15', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates>1, 2 3, 4</gml:coordinates></gml:LineString>')); SELECT 'coordinates_16', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates>1,2 3,4</gml:coordinates></gml:LineString>')); -- ERROR: Junk SELECT 'coordinates_17', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates>!@#$%^*()"</gml:coordinates></gml:LineString>')); -- -- Coordinates (cs,ts,decimal) -- -- Specify default CS separator SELECT 'coordinates_cs_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates cs="," >1,2</gml:coordinates></gml:Point>')); -- ERROR: wrong CS separator SELECT 'coordinates_cs_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates cs=";" >1,2</gml:coordinates></gml:Point>')); -- Specify a CS separator SELECT 'coordinates_cs_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates cs=";" >1;2</gml:coordinates></gml:Point>')); -- ERROR: CS separator is a number SELECT 'coordinates_cs_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates cs="0" >102</gml:coordinates></gml:Point>')); -- ERROR: CS separator is multichar SELECT 'coordinates_cs_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coordinates cs="||" >1||2</gml:coordinates></gml:Point>')); -- Specify default TS separator SELECT 'coordinates_cs_6', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates ts=" ">1,2 3,4</gml:coordinates></gml:LineString>')); -- ERROR: wrong TS separator SELECT 'coordinates_cs_7', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates ts=" ">1,2;3,4</gml:coordinates></gml:LineString>')); -- Specify a TS separator SELECT 'coordinates_cs_8', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates ts=";">1,2;3,4</gml:coordinates></gml:LineString>')); -- ERROR: TS separator is a number SELECT 'coordinates_cs_9', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates ts="0">1,203,4</gml:coordinates></gml:LineString>')); -- ERROR: TS separator is multichar SELECT 'coordinates_cs_10', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates ts="||">1,2||3,4</gml:coordinates></gml:LineString>')); -- Specify default Decimal separator SELECT 'coordinates_cs_11', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates decimal=".">1.1,2.2 3.3,4.4</gml:coordinates></gml:LineString>')); -- ERROR: wrong Decimal separator SELECT 'coordinates_cs_12', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates decimal=";">1;1,2;2 3;3,4;4</gml:coordinates></gml:LineString>')); -- ERROR: Decimal separator is a number SELECT 'coordinates_cs_13', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates decimal="0">101,202 303,404</gml:coordinates></gml:LineString>')); -- ERROR: Decimal separator is multichar SELECT 'coordinates_cs_14', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates decimal="||">1||1,2||2 3||3,4||4</gml:coordinates></gml:LineString>')); -- CS and TS and Decimal together SELECT 'coordinates_cs_15', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates cs="." ts=";" decimal=",">1,1.2,2;3,3.4,4</gml:coordinates></gml:LineString>')); -- ERROR: CS and Decimal are the same SELECT 'coordinates_cs_16', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates ts=" " cs=" ">1 2 3 4</gml:coordinates></gml:LineString>')); SELECT 'coordinates_cs_17', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates cs="." ts=";" decimal=".">1.1.2.2;3.3.4,4</gml:coordinates></gml:LineString>')); SELECT 'coordinates_cs_18', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates cs="." ts=";" decimal=";">1;1.2;2;3;3.4,4</gml:coordinates></gml:LineString>')); -- XML Entity substitution SELECT 'coordinates_cs_19', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coordinates ts="," cs=" ">1 2,3 4</gml:coordinates></gml:LineString>')); -- -- pos -- -- X,Y SELECT 'pos_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 2</gml:pos></gml:Point>')); -- ERROR: single X SELECT 'pos_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1</gml:pos></gml:Point>')); -- ERROR: X,Y,Z but without explicit dimension SELECT 'pos_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 2 3</gml:pos></gml:Point>')); -- ERROR: 4 dimension SELECT 'pos_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 2 3 4</gml:pos></gml:Point>')); -- ERROR: empty or spaces SELECT 'pos_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos></gml:pos></gml:Point>')); SELECT 'pos_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos> </gml:pos></gml:Point>')); SELECT 'pos_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos> </gml:pos></gml:Point>')); -- Whitespaces before and after SELECT 'pos_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos> 1 2 </gml:pos></gml:Point>')); SELECT 'pos_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos> 1 2 </gml:pos></gml:Point>')); SELECT 'pos_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos> 1 2 </gml:pos></gml:Point>')); -- Several Spaces insides SELECT 'pos_11', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 2</gml:pos></gml:Point>')); -- ERROR: Junk SELECT 'pos_12', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>@!#$#%</gml:pos></gml:Point>')); -- ERROR: 1 dimension SELECT 'pos_13', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos srsDimension="1">1</gml:pos></gml:Point>')); -- 2 Dimensions explicit SELECT 'pos_14', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>')); -- ERROR: 2 Dimensions explicit but 3 dims SELECT 'pos_15', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos srsDimension="2">1 2 3</gml:pos></gml:Point>')); -- 3 Dimensions explicit SELECT 'pos_16', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos srsDimension="3">1 2 3</gml:pos></gml:Point>')); -- ERROR: 4 dimensions SELECT 'pos_17', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos srsDimension="4">1 2 3 4</gml:pos></gml:Point>')); -- -- posList -- -- 2 coords SELECT 'poslist_1', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList>1 2 3 4</gml:posList></gml:LineString>')); -- spaces before and after SELECT 'poslist_2', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList> 1 2 3 4 </gml:posList></gml:LineString>')); SELECT 'poslist_3', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList> 1 2 3 4 </gml:posList></gml:LineString>')); SELECT 'poslist_4', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList> 1 2 3 4 </gml:posList></gml:LineString>')); -- explicit 2 dimension SELECT 'poslist_5', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList srsDimension="2">1 2 3 4</gml:posList></gml:LineString>')); -- ERROR: wrong dimension SELECT 'poslist_6', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList> 1 2 3 4 5 </gml:posList></gml:LineString>')); SELECT 'poslist_7', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList srsDimension="2">1 2 3 4 5</gml:posList></gml:LineString>')); -- 2 coord 3D SELECT 'poslist_8', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList srsDimension="3">1 2 3 4 5 6</gml:posList></gml:LineString>')); -- ERROR: 1 dimension SELECT 'poslist_9', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList>1</gml:posList></gml:LineString>')); SELECT 'poslist_10', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList srsDimension="1">1</gml:posList></gml:LineString>')); -- ERROR: 4 dimensions SELECT 'poslist_11', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList srsDimension="4">1 2 3 4 5 6 7 8</gml:posList></gml:LineString>')); -- ERROR: 3D but no explicit dimension SELECT 'poslist_12', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList>1 2 3</gml:posList></gml:LineString>')); -- ERROR: empty or spaces SELECT 'poslist_13', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList></gml:posList></gml:LineString>')); SELECT 'poslist_14', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList> </gml:posList></gml:LineString>')); SELECT 'poslist_15', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList> </gml:posList></gml:LineString>')); -- Several spaces insides posList SELECT 'poslist_16', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList>1 2 3 4</gml:posList></gml:LineString>')); SELECT 'poslist_17', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList> 1 2 3 4 </gml:posList></gml:LineString>')); -- ERROR: Junk SELECT 'poslist_18', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:posList>!@#$%^*()"</gml:posList></gml:LineString>')); -- -- Generic data -- -- Mixed pos, posList, coordinates, coord SELECT 'data_1', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:pos>1 2</gml:pos><gml:posList>3 4 5 6</gml:posList><gml:coordinates>7,8 9,10</gml:coordinates><gml:coord><gml:X>11</gml:X><gml:Y>12</gml:Y></gml:coord></gml:LineString>')); -- Mixed pos, posList, pointProperty, pointRep SELECT 'data_2', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:pos>1 2</gml:pos><gml:posList>3 4 5 6</gml:posList><gml:pointProperty><gml:Point><gml:pos>7 8</gml:pos></gml:Point></gml:pointProperty><gml:pointRep><gml:Point><gml:coordinates>9,10</gml:coordinates></gml:Point></gml:pointRep></gml:LineString>')); -- -- XLink -- -- xlink with pointProperty SELECT 'xlink_1', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" xlink:href="#p1"/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: xlink:href destination is not defined SELECT 'xlink_2', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" xlink:href="#p2"/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: no href SELECT 'xlink_3', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" /></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: empty href SELECT 'xlink_4', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" xlink:href=""/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: no sharp char in href SELECT 'xlink_5', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" xlink:href="p2"/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: no xlink namespace SELECT 'xlink_6', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" xlink:href="#p1"/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: wrong xlink namespace SELECT 'xlink_7', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://foo.net"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" xlink:href="#p1"/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: no xlink:type SELECT 'xlink_8', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:href="#p1"/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: xlink:type not simple SELECT 'xlink_9', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="extended" xlink:href="#p1"/></gml:pointProperty><gml:pos>3 4</gml:pos></gml:LineString>')); -- ERROR: more than one destination is defined SELECT 'xlink_10', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointProperty><gml:pointProperty><gml:Point xlink:type="simple" xlink:href="#p1"/></gml:pointProperty><gml:pointProperty><gml:Point gml:id="p1"><gml:pos>3 4</gml:pos></gml:Point></gml:pointProperty></gml:LineString>')); -- xlink with pointRep SELECT 'xlink_11', ST_AsEWKT(ST_GeomFromGML('<gml:LineString xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:pointRep><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:pointRep><gml:pointRep><gml:Point xlink:type="simple" xlink:href="#p1"/></gml:pointRep><gml:pos>3 4</gml:pos></gml:LineString>')); -- xlink on a point SELECT 'xlink_12', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:Point gml:id="p1"><gml:pos>1 2</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:Point xlink:type="simple" xlink:href="#p1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a linestring SELECT 'xlink_13', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:LineString gml:id="l1"><gml:posList>1 2 3 4</gml:posList></gml:LineString></gml:geometryMember><gml:geometryMember><gml:LineString xlink:type="simple" xlink:href="#l1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a curve SELECT 'xlink_14', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:Curve gml:id="c1"><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember><gml:geometryMember><gml:Curve xlink:type="simple" xlink:href="#c1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a polygon SELECT 'xlink_15', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:Polygon gml:id="p1"><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:geometryMember><gml:geometryMember><gml:Polygon xlink:type="simple" xlink:href="#p1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a surface SELECT 'xlink_16', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:Surface gml:id="s1"><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface></gml:geometryMember><gml:geometryMember><gml:Surface xlink:type="simple" xlink:href="#s1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a multipoint SELECT 'xlink_17', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:MultiPoint gml:id="mp1"><gml:pointMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint></gml:geometryMember><gml:geometryMember><gml:MultiPoint xlink:type="simple" xlink:href="#mp1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a multiline SELECT 'xlink_18', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:MultiLineString gml:id="ml1"><gml:lineStringMember><gml:LineString><gml:posList>1 2 3 4</gml:posList></gml:LineString></gml:lineStringMember></gml:MultiLineString></gml:geometryMember><gml:geometryMember><gml:MultiLineString xlink:type="simple" xlink:href="#ml1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a multicurve SELECT 'xlink_19', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:MultiCurve gml:id="mc1"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList>1 2 3 4</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve></gml:geometryMember><gml:geometryMember><gml:MultiCurve xlink:type="simple" xlink:href="#mc1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a multipolygon SELECT 'xlink_20', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:MultiPolygon gml:id="mp1"><gml:polygonMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:polygonMember></gml:MultiPolygon></gml:geometryMember><gml:geometryMember><gml:MultiPolygon xlink:type="simple" xlink:href="#mp1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a multisurface SELECT 'xlink_21', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:MultiSurface gml:id="ms1"><gml:surfaceMember><gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList>1 2 3 4 5 6 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:patches></gml:Surface></gml:surfaceMember></gml:MultiSurface></gml:geometryMember><gml:geometryMember><gml:MultiSurface xlink:type="simple" xlink:href="#ms1"/></gml:geometryMember></gml:MultiGeometry>')); -- xlink on a multigeometry SELECT 'xlink_22', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:MultiGeometry gml:id="mg1"><gml:geometryMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:geometryMember></gml:MultiGeometry></gml:geometryMember><gml:geometryMember><gml:MultiGeometry xlink:type="simple" xlink:href="#mg1"/></gml:geometryMember></gml:MultiGeometry>')); -- ERROR circular ref SELECT 'xlink_23', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry gml:id="mg1" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"><gml:geometryMember><gml:Point><gml:pos>1 2</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiGeometry xlink:type="simple" xlink:href="#mg1"/></gml:geometryMember></gml:MultiGeometry>')); -- -- Bijective PostGIS GML test -- -- Point GML 2 SELECT 'gml_1', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('POINT(1 2)')))); -- Point GML 2 - 3D SELECT 'gml_2', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('POINT(1 2 3)')))); -- Point GML 2 & SRID planar SELECT 'gml_3', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('SRID=27582;POINT(1 2)')))); -- Point GML 3 SELECT 'gml_4', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('POINT(1 2)')))); -- Point GML 3 & SRID lat/lon SELECT 'gml_5', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;POINT(1 2)'), 16))); -- Point GML 3 - 3D SELECT 'gml_6', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('POINT(1 2 3)')))); -- Point GML 3 - 3D & SRID lat/lon SELECT 'gml_7', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;POINT(1 2 3)'), 16))); -- Linestring GML 2 SELECT 'gml_8', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('LINESTRING(1 2,3 4)')))); -- Linestring GML 2 - 3D SELECT 'gml_9', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('LINESTRING(1 2 3,4 5 6)')))); -- Linestring GML 2 & SRID planar SELECT 'gml_10', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('SRID=27582;LINESTRING(1 2,3 4)')))); -- Linestring GML 3 SELECT 'gml_11', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('LINESTRING(1 2,3 4)')))); -- Linestring GML 3 & SRID lat/lon SELECT 'gml_12', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;LINESTRING(1 2,3 4)'), 16))); -- Linestring GML 3 - 3D SELECT 'gml_13', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('LINESTRING(1 2 3,4 5 6)')))); -- Linestring GML 3 - 3D & SRID lat/lon SELECT 'gml_14', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;LINESTRING(1 2 3,4 5 6)'), 16))); -- Polygon GML 2 SELECT 'gml_15', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('POLYGON((1 2,3 4,5 6,1 2))')))); -- Polygon GML 2 - 3D SELECT 'gml_16', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('POLYGON((1 2 3,4 5 6,7 8 9,1 2 3))')))); -- Polygon GML 2 & SRID planar SELECT 'gml_17', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('SRID=27582;POLYGON((1 2,3 4,5 6,1 2))')))); -- Polygon GML 3 SELECT 'gml_18', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('POLYGON((1 2,3 4,5 6,1 2))')))); -- Polygon GML 3 & SRID lat/lon SELECT 'gml_19', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;POLYGON((1 2,3 4,5 6,1 2))'), 16))); -- Polygon GML 3 - 3D SELECT 'gml_20', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('POLYGON((1 2 3,4 5 6,7 8 9,1 2 3))')))); -- Polygon GML 3 - 3D & SRID lat/lon SELECT 'gml_21', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;POLYGON((1 2 3,4 5 6,7 8 9,1 2 3))'), 16))); -- Triangle GML 3 SELECT 'gml_22', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('TRIANGLE((1 2,3 4,5 6,1 2))')))); -- Triangle GML 3 & SRID lat/lon SELECT 'gml_23', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;TRIANGLE((1 2,3 4,5 6,1 2))'), 16))); -- Triangle GML 3 & SRID planar SELECT 'gml_24', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=27582;TRIANGLE((1 2,3 4,5 6,1 2))')))); -- Triangle GML 3 - 3D SELECT 'gml_25', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('TRIANGLE((1 2 3,4 5 6,7 8 9,1 2 3))')))); -- Triangle GML 3 - 3D & SRID lat/lon SELECT 'gml_26', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;TRIANGLE((1 2 3,4 5 6,7 8 9,1 2 3))'), 16))); -- Multipoint GML 2 SELECT 'gml_27', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('MULTIPOINT(1 2)')))); -- Multipoint GML 2 - 3D SELECT 'gml_28', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('MULTIPOINT(1 2 3)')))); -- Multipoint GML 2 & SRID planar SELECT 'gml_29', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('SRID=27582;MULTIPOINT(1 2)')))); -- Multipoint GML 3 SELECT 'gml_30', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('MULTIPOINT(1 2)')))); -- Multipoint GML 3 & SRID lat/lon SELECT 'gml_31', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;MULTIPOINT(1 2)'), 16))); -- Multipoint GML 3 - 3D SELECT 'gml_32', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('MULTIPOINT(1 2 3)')))); -- Multipoint GML 3 - 3D & SRID lat/lon SELECT 'gml_33', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;MULTIPOINT(1 2 3)'), 16))); -- Multilinestring GML 2 SELECT 'gml_34', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('MULTILINESTRING((1 2,3 4))')))); -- Multilinestring GML 2 - 3D SELECT 'gml_35', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('MULTILINESTRING((1 2 3,4 5 6))')))); -- Multilinestring GML 2 & SRID planar SELECT 'gml_36', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('SRID=27582;MULTILINESTRING((1 2,3 4))')))); -- Multilinestring GML 3 SELECT 'gml_37', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('MULTILINESTRING((1 2,3 4))')))); -- Multilinestring GML 3 & SRID lat/lon SELECT 'gml_38', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;MULTILINESTRING((1 2,3 4))'), 16))); -- Multilinestring GML 3 - 3D SELECT 'gml_39', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('MULTILINESTRING((1 2 3,4 5 6))')))); -- Multilinestring GML 3 - 3D & SRID lat/lon SELECT 'gml_40', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;MULTILINESTRING((1 2 3,4 5 6))'), 16))); -- Multipolygon GML 2 SELECT 'gml_41', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('MULTIPOLYGON(((1 2,3 4,5 6,1 2)))')))); -- Multipolygon GML 2 - 3D SELECT 'gml_42', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3)))')))); -- Multipolygon GML 2 & SRID planar SELECT 'gml_43', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('SRID=27582;MULTIPOLYGON(((1 2,3 4,5 6,1 2)))')))); -- Multipolygon GML 3 SELECT 'gml_44', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('MULTIPOLYGON(((1 2,3 4,5 6,1 2)))')))); -- Multipolygon GML 3 & SRID lat/lon SELECT 'gml_45', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;MULTIPOLYGON(((1 2,3 4,5 6,1 2)))'), 16))); -- Multipolygon GML 3 - 3D SELECT 'gml_46', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3)))')))); -- Multipolygon GML 3 - 3D & SRID planar SELECT 'gml_47', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=27582;MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3)))')))); -- Multipolygon GML 3 - 3D & SRID lat/lon SELECT 'gml_48', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;MULTIPOLYGON(((1 2 3,4 5 6,7 8 9,1 2 3)))'), 16))); -- Tin GML 3 SELECT 'gml_49', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('TIN(((1 2,3 4,5 6,1 2)))')))); -- Tin GML 3 & SRID planar SELECT 'gml_50', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=27582;TIN(((1 2,3 4,5 6,1 2)))')))); -- Tin GML 3 & SRID lat/lon SELECT 'gml_51', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;TIN(((1 2,3 4,5 6,1 2)))'), 16))); -- Tin GML 3 - 3D SELECT 'gml_52', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('TIN(((1 2 3,4 5 6,7 8 9,1 2 3)))')))); -- Tin GML 3 - 3D & SRID planar SELECT 'gml_53', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=27582;TIN(((1 2 3,4 5 6,7 8 9,1 2 3)))')))); -- Tin GML 3 - 3D & SRID lat/lon SELECT 'gml_54', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;TIN(((1 2 3,4 5 6,7 8 9,1 2 3)))'), 16))); -- Collection GML 2 SELECT 'gml_55', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('GEOMETRYCOLLECTION(POINT(1 2))')))); -- Collection GML 2 - 3D SELECT 'gml_56', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('GEOMETRYCOLLECTION(POINT(1 2 3))')))); -- Collection GML 2 & SRID planar SELECT 'gml_57', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(ST_AsEWKT('SRID=27582;GEOMETRYCOLLECTION(POINT(1 2))')))); -- Collection GML 3 SELECT 'gml_58', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('GEOMETRYCOLLECTION(POINT(1 2))')))); -- Collection GML 3 & SRID lat/lon SELECT 'gml_59', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;GEOMETRYCOLLECTION(POINT(1 2))'), 16))); -- Collection GML 3 - 3D SELECT 'gml_60', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('GEOMETRYCOLLECTION(POINT(1 2 3))')))); -- Collection GML 3 - 3D & SRID lat/lon SELECT 'gml_61', ST_AsEWKT(ST_GeomFromGML(ST_AsGML(3, ST_AsEWKT('SRID=4326;GEOMETRYCOLLECTION(POINT(1 2 3))'), 16))); -- -- coord -- -- X,Y SELECT 'coord_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Y>2</gml:Y></gml:coord></gml:Point>')); -- X,Y,Z SELECT 'coord_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Y>2</gml:Y><gml:Z>3</gml:Z></gml:coord></gml:Point>')); -- ERROR no X or Y SELECT 'coord_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Z>2</gml:Z></gml:coord></gml:Point>')); SELECT 'coord_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:Y>1</gml:Y><gml:Z>2</gml:Z></gml:coord></gml:Point>')); SELECT 'coord_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:Z>1</gml:Z></gml:coord></gml:Point>')); -- ERROR empty coord even if defined SELECT 'coord_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X></gml:X><gml:Y></gml:Y></gml:coord></gml:Point>')); SELECT 'coord_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord></gml:coord></gml:Point>')); -- ERROR space in coord SELECT 'coord_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Y> </gml:Y></gml:coord></gml:Point>')); SELECT 'coord_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Y> </gml:Y></gml:coord></gml:Point>')); -- Spaces before and after coord SELECT 'coord_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Y> 2 </gml:Y></gml:coord></gml:Point>')); SELECT 'coord_11', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Y> 2 </gml:Y></gml:coord></gml:Point>')); SELECT 'coord_12', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:coord><gml:X>1</gml:X><gml:Y> 2 </gml:Y></gml:coord></gml:Point>')); -- Several coords SELECT 'coord_13', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coord><gml:X>1</gml:X><gml:Y>2</gml:Y></gml:coord><gml:coord><gml:X>3</gml:X><gml:Y>4</gml:Y></gml:coord></gml:LineString>')); -- Several coords mixed dimension SELECT 'coord_14', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coord><gml:X>1</gml:X><gml:Y>2</gml:Y><gml:Z>3</gml:Z></gml:coord><gml:coord><gml:X>4</gml:X><gml:Y>5</gml:Y></gml:coord></gml:LineString>')); SELECT 'coord_15', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coord><gml:X>1</gml:X><gml:Y>2</gml:Y></gml:coord><gml:coord><gml:X>3</gml:X><gml:Y>4</gml:Y><gml:Z>5</gml:Z></gml:coord></gml:LineString>')); -- XML not elements handle SELECT 'coord_16', ST_AsEWKT(ST_GeomFromGML('<gml:LineString><gml:coord> <!-- --> <gml:X>1</gml:X> <!-- --> <gml:Y>2</gml:Y> <!-- --> </gml:coord> <!-- --> <gml:coord> <!-- --> <gml:X>3</gml:X> <!-- --> <gml:Y>4</gml:Y></gml:coord></gml:LineString>')); -- -- Double -- -- Several digits SELECT 'double_1', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1234567890</gml:pos></gml:Point>')); -- Sign +/- SELECT 'double_2', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 -1</gml:pos></gml:Point>')); SELECT 'double_3', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 +1</gml:pos></gml:Point>')); -- ERROR: double sign SELECT 'double_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 --1</gml:pos></gml:Point>')); -- ERROR: sign inside digit SELECT 'double_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1-1</gml:pos></gml:Point>')); -- Decimal part SELECT 'double_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.2</gml:pos></gml:Point>')); SELECT 'double_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.23</gml:pos></gml:Point>')); -- no digit after dot SELECT 'double_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.</gml:pos></gml:Point>')); -- ERROR: several dots SELECT 'double_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.2.3</gml:pos></gml:Point>')); -- ERROR: no digit before dot SELECT 'double_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 .1</gml:pos></gml:Point>')); SELECT 'double_11', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 -.1</gml:pos></gml:Point>')); -- ERROR: not a digit SELECT 'double_12', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 a</gml:pos></gml:Point>')); SELECT 'double_13', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1a</gml:pos></gml:Point>')); SELECT 'double_14', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1a2</gml:pos></gml:Point>')); -- Exp SELECT 'double_15', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1e2</gml:pos></gml:Point>')); SELECT 'double_16', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1E+2</gml:pos></gml:Point>')); SELECT 'double_17', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1e-2</gml:pos></gml:Point>')); SELECT 'double_18', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1E-2</gml:pos></gml:Point>')); -- Exp with decimal parts SELECT 'double_19', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.23E2</gml:pos></gml:Point>')); SELECT 'double_20', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.23e2</gml:pos></gml:Point>')); SELECT 'double_21', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 -1.23E2</gml:pos></gml:Point>')); -- ERROR: no exp digit SELECT 'double_22', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1E</gml:pos></gml:Point>')); SELECT 'double_23', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1e</gml:pos></gml:Point>')); -- ERROR: dot inside exp digits SELECT 'double_24', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1e2.3</gml:pos></gml:Point>')); SELECT 'double_25', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1E2.3</gml:pos></gml:Point>')); -- ERROR: spaces inside SELECT 'double_26', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 - 1.23</gml:pos></gml:Point>')); SELECT 'double_27', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 -1 .23</gml:pos></gml:Point>')); SELECT 'double_28', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 -1. 23</gml:pos></gml:Point>')); SELECT 'double_29', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 -1.23 E2</gml:pos></gml:Point>')); SELECT 'double_30', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 -1.23E 2</gml:pos></gml:Point>')); -- ERROR: Junk SELECT 'double_31', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 $0%@#$^%#</gml:pos></gml:Point>')); -- -- Delete inserted spatial data -- DELETE FROM spatial_ref_sys WHERE srid = 4326; DELETE FROM spatial_ref_sys WHERE srid = 27562; DELETE FROM spatial_ref_sys WHERE srid = 27582; ���������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_buffer_params.sql�������������������������������������������0000644�0000000�0000000�00000003151�11722777314�022334� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- Tests for ST_Buffer with parameters (needs GEOS-3.2 or higher) --- --- -- Ouput is snapped to grid to account for small floating numbers -- differences between architectures SELECT 'point quadsegs=2', ST_AsText(ST_SnapToGrid(st_buffer('POINT(0 0)', 1, 'quad_segs=2'), 1.0e-6)); SELECT 'line quadsegs=2', ST_AsText(ST_SnapToGrid(st_buffer('LINESTRING(0 0, 10 0)', 2, 'quad_segs=2'), 1.0e-6)); SELECT 'line quadsegs=2 endcap=flat', ST_AsText(ST_SnapToGrid(st_buffer('LINESTRING(0 0, 10 0)', 2, 'quad_segs=2 endcap=flat'), 1.0e-6)); SELECT 'line quadsegs=2 endcap=butt', ST_AsText(ST_SnapToGrid(st_buffer('LINESTRING(0 0, 10 0)', 2, 'quad_segs=2 endcap=butt'), 1.0e-6)); SELECT 'line quadsegs=2 endcap=square', ST_AsText(ST_SnapToGrid(st_buffer('LINESTRING(0 0, 10 0)', 2, 'quad_segs=2 endcap=square'), 1.0e-6)); SELECT 'poly quadsegs=2 join=round', ST_AsText(ST_SnapToGrid(st_buffer('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 2, 'quad_segs=2 join=round'), 1.0e-6)); SELECT 'poly quadsegs=2 join=bevel', ST_AsText(ST_SnapToGrid(st_buffer('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 2, 'quad_segs=2 join=bevel'), 1.0e-6)); SELECT 'poly quadsegs=2 join=mitre', ST_AsText(ST_SnapToGrid(st_buffer('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 2, 'quad_segs=2 join=mitre'), 1.0e-6)); SELECT 'poly quadsegs=2 join=mitre mitre_limit=1', ST_AsText(ST_SnapToGrid(st_buffer('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 2, 'quad_segs=2 join=mitre mitre_limit=1'), 1.0e-6)); SELECT 'poly quadsegs=2 join=miter miter_limit=1', ST_AsText(ST_SnapToGrid(st_buffer('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 2, 'quad_segs=2 join=miter miter_limit=1'), 1.0e-6)); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/README��������������������������������������������������������������0000644�0000000�0000000�00000005226�11761466745�016140� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Requirements for run_test.pl ---------------------------- run_test.pl requires the following Perl modules to be installed Text::Diff; File::Which; File::Basename; File::Temp 'tempdir'; File::Copy; File::Path 'make_path'; File::Path 'remove_tree'; Cwd 'abs_path'; Getopt::Long; Most distributions of Perl will have everything except Text::Diff and File::Which. To install them from the command-line, as root run cpan Text::Diff cpan File::Which How to add a regression test ---------------------------- 1. Write a /regress/<testname>.sql file with data and sql queries for testing 2. Write a /regress/<testname>_expected or <testname>_expected.in file with expected results per query The expected results provided in the <testname>_expected file must be formatted using the following psql options: -a -- unaligned columns -f | -- use | (pipe) as the field separator between columns -t -- output rows only, ie. no table header cat file.sql | psql -F\| -t -A > file_expected 3. Edit regress/Makefile adding <testname> to the TESTS variable. Any _expected.in files need to be added to the PREPROC variable. Optional: If your test has unusual setup or teardown requirements, you may create any of the following optional files (they will run in this order): /regress/<testname>-pre.sh /regress/<testname>-pre.sql (run via psql) (The test itself is run here.) /regress/<testname>-post.sql (run via psql) /regress/<testname>-post.sh Notes about changes in regression tests introduces with PostGIS 1.1.0 --------------------------------------------------------------------- - Mixed-dimensioned geometries are no longer supported (previous behaviour was to fill Z with a 0 value) [ updated to use new behaviour ] - geometry_same operator (=~) now requires all dimensions equality Previously only x/y were checked - geometry_same operator (=~) now requires geom type equality Previous behaviour: GEOMETRYCOLLECTION(POINT(0 1), POINT(2 3)) =~ MULTIPOINT(0 1,2 3) - numb_sub_geometries does not exist anymore [updated to use numgeometries] - truly_inside does not exist anymore [updated to use within] Notes about <testname>_expected.in ---------------------------------- The first line of the <testname>_expected.in should include the postgis configuration header. #include "../postgis_config.h" The ability to run a c preprocessor over the expected results prior to regression testing was needed for testing curved string functionality that would elicit different responses from JTS vs GEOS compilations. Since JTS is no longer supported, this may not be required anymore. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/Makefile.in���������������������������������������������������������0000644�0000000�0000000�00000012205�12142775451�017307� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * # * Copyright (C) 2011-2012 Sandro Santilli <strk@keybit.net> # * Copyright (C) 2009-2011 Paul Ramsey <pramsey@cleverelephant.ca> # * Copyright (C) 2008-2009 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** PERL=@PERL@ TMPDIR?=/tmp POSTGIS_PGSQL_VERSION=@POSTGIS_PGSQL_VERSION@ POSTGIS_GEOS_VERSION=@POSTGIS_GEOS_VERSION@ POSTGIS_PROJ_VERSION=@POSTGIS_PROJ_VERSION@ HAVE_JSON=@HAVE_JSON@ HAVE_SFCGAL=@HAVE_SFCGAL@ MINGWBUILD=@MINGWBUILD@ # MingW hack: rather than use PGSQL_BINDIR directly, we change # to the directory and then use "pwd" to return the path. This # ensures that the returned path is in MSYS format, otherwise # colons in drive letters will break PATH. PGSQL_BINDIR=$(shell cd "@PGSQL_BINDIR@" && pwd) # Where we put our regression installation ifeq ($(MINGWBUILD),1) srcdir=$(shell bash -c "pwd -W") else srcdir=$(shell pwd) endif REGRESS_INSTALLDIR=$(srcdir)/00-regress-install # # Put path from pg_config into front of search path # PATH := $(PGSQL_BINDIR):$(PATH) export PATH TESTS = \ loader/Point \ loader/PointM \ loader/PointZ \ loader/MultiPoint \ loader/MultiPointM \ loader/MultiPointZ \ loader/Arc \ loader/ArcM \ loader/ArcZ \ loader/Polygon \ loader/PolygonM \ loader/PolygonZ \ loader/TSTPolygon \ loader/TSIPolygon \ loader/TSTIPolygon \ loader/PointWithSchema \ loader/NoTransPoint \ loader/NotReallyMultiPoint \ loader/MultiToSinglePoint \ loader/ReprojectPts \ loader/ReprojectPtsGeog \ loader/Latin1 \ binary \ regress \ regress_index \ regress_index_nulls \ regress_selectivity \ lwgeom_regress \ regress_lrs \ removepoint \ setpoint \ simplify \ snaptogrid \ summary \ affine \ empty \ measures \ legacy \ long_xact \ ctors \ sql-mm-serialize \ sql-mm-circularstring \ sql-mm-compoundcurve \ sql-mm-curvepoly \ sql-mm-general \ sql-mm-multicurve \ sql-mm-multisurface \ polyhedralsurface \ polygonize \ postgis_type_name \ geography \ out_geometry \ out_geography \ in_geohash \ in_gml \ in_kml \ iscollection \ regress_ogc \ regress_ogc_cover \ regress_ogc_prep \ regress_bdpoly \ regress_proj \ regress_management \ dump \ dumppoints \ boundary \ wmsservers \ wkt \ wkb \ tickets \ typmod \ remove_repeated_points \ split \ relate \ bestsrid \ concave_hull ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">=" 32),1) # GEOS-3.3 adds: # ST_HausdorffDistance, ST_Buffer(params) TESTS += \ hausdorff \ regress_buffer_params endif ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">=" 33),1) # GEOS-3.3 adds: # ST_RelateMatch, ST_IsValidDetail, ST_SharedPaths , # ST_Snap, ST_UnaryUnion, ST_MakeClean TESTS += \ offsetcurve \ relatematch \ isvaliddetail \ sharedpaths \ snap \ node \ unaryunion \ clean \ relate_bnr endif ifeq ($(shell expr $(POSTGIS_GEOS_VERSION) ">=" 34),1) # GEOS-3.4 adds: # ST_DelaunayTriangles TESTS += \ delaunaytriangles endif ifeq ($(HAVE_JSON),yes) # JSON-C adds: # ST_GeomFromGeoJSON() TESTS += \ in_geojson endif ifeq ($(HAVE_SFCGAL),yes) # SFCGAL additionnal backend TESTS += \ regress_sfcgal \ sfcgal/empty.sql \ sfcgal/geography.sql \ sfcgal/legacy.sql \ sfcgal/measures.sql \ sfcgal/regress_ogc_prep.sql \ sfcgal/regress_ogc.sql \ sfcgal/regress.sql \ sfcgal/tickets.sql \ sfcgal/concave_hull.sql \ sfcgal/wmsservers.sql RUNTESTFLAGS = --sfcgal endif all install uninstall: distclean: clean rm Makefile staged-install-topology: @if test x"@TOPOLOGY@" != "x"; then \ $(MAKE) -C ../topology REGRESS=1 DESTDIR=$(REGRESS_INSTALLDIR) install; \ fi staged-install-raster: @if test x"@RASTER@" != "x"; then \ $(MAKE) -C ../raster/rt_pg REGRESS=1 DESTDIR=$(REGRESS_INSTALLDIR) install; \ fi staged-install: staged-install-raster staged-install-topology $(MAKE) -C ../postgis REGRESS=1 DESTDIR=$(REGRESS_INSTALLDIR) install $(MAKE) -C ../ REGRESS=1 DESTDIR=$(REGRESS_INSTALLDIR) comments-install $(PERL) -pi.bak -e 's,\$$libdir,$(REGRESS_INSTALLDIR)/lib,g' $(REGRESS_INSTALLDIR)/share/contrib/postgis/*.sql #$(MAKE) -C ../loader REGRESS=1 DESTDIR=$(REGRESS_INSTALLDIR) install test check: staged-install $(PERL) run_test.pl $(RUNTESTFLAGS) $(TESTS) && \ $(PERL) run_test.pl --upgrade $(RUNTESTFLAGS) $(TESTS) garden: createdb postgis_garden createlang plpgsql postgis_garden psql -d postgis_garden < ../postgis/postgis.sql psql -d postgis_garden < ../spatial_ref_sys.sql @echo '-------------------------------------------------' @echo 'Regression tests in progress (it will take time)' @echo 'Result output: ./regress/garden_result.txt' @echo '-------------------------------------------------' psql -d postgis_garden < ../doc/postgis_gardentest_${POSTGIS_MAJOR_VERSION}${POSTGIS_MINOR_VERSION}.sql > postgis_garden_result.txt 2>&1 #dropdb postgis_garden cleanup: @sleep 1 @dropdb postgis_reg > /dev/null clean: rm -rf $(REGRESS_INSTALLDIR) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/wkb_expected��������������������������������������������������������0000644�0000000�0000000�00000074002�11722777314�017637� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT EMPTY|010400000000000000|f|000000000400000000 POINT Z EMPTY|01ec03000000000000|f|00000003ec00000000 POINT M EMPTY|01d407000000000000|f|00000007d400000000 POINT ZM EMPTY|01bc0b000000000000|f|0000000bbc00000000 POINT(0 0)|010100000000000000000000000000000000000000|t|000000000100000000000000000000000000000000 POINT Z (1 2 3)|01e9030000000000000000f03f00000000000000400000000000000840|t|00000003e93ff000000000000040000000000000004008000000000000 POINT M (1 2 3)|01d1070000000000000000f03f00000000000000400000000000000840|t|00000007d13ff000000000000040000000000000004008000000000000 POINT ZM (1 2 3 4)|01b90b0000000000000000f03f000000000000004000000000000008400000000000001040|t|0000000bb93ff0000000000000400000000000000040080000000000004010000000000000 MULTIPOINT EMPTY|010400000000000000|t|000000000400000000 MULTIPOINT Z EMPTY|01ec03000000000000|t|00000003ec00000000 MULTIPOINT M EMPTY|01d407000000000000|t|00000007d400000000 MULTIPOINT ZM EMPTY|01bc0b000000000000|t|0000000bbc00000000 MULTIPOINT((0 0), (2 0))|010400000002000000010100000000000000000000000000000000000000010100000000000000000000400000000000000000|t|000000000400000002000000000100000000000000000000000000000000000000000140000000000000000000000000000000 MULTIPOINT Z ((0 0 0), (2 0 1))|01ec0300000200000001e903000000000000000000000000000000000000000000000000000001e903000000000000000000400000000000000000000000000000f03f|t|00000003ec0000000200000003e900000000000000000000000000000000000000000000000000000003e9400000000000000000000000000000003ff0000000000000 MULTIPOINT M ((0 0 2), (2 0 1))|01d40700000200000001d107000000000000000000000000000000000000000000000000004001d107000000000000000000400000000000000000000000000000f03f|t|00000007d40000000200000007d100000000000000000000000000000000400000000000000000000007d1400000000000000000000000000000003ff0000000000000 MULTIPOINT ZM ((0 1 2 3), (3 2 1 0))|01bc0b00000200000001b90b00000000000000000000000000000000f03f0000000000000040000000000000084001b90b000000000000000008400000000000000040000000000000f03f0000000000000000|t|0000000bbc000000020000000bb900000000000000003ff0000000000000400000000000000040080000000000000000000bb9400800000000000040000000000000003ff00000000000000000000000000000 LINESTRING EMPTY|010200000000000000|t|000000000200000000 LINESTRING Z EMPTY|01ea03000000000000|t|00000003ea00000000 LINESTRING M EMPTY|01d207000000000000|t|00000007d200000000 LINESTRING ZM EMPTY|01ba0b000000000000|t|0000000bba00000000 LINESTRING(0 0, 1 1)|01020000000200000000000000000000000000000000000000000000000000f03f000000000000f03f|t|000000000200000002000000000000000000000000000000003ff00000000000003ff0000000000000 LINESTRING Z (0 0 2, 1 1 3)|01ea03000002000000000000000000000000000000000000000000000000000040000000000000f03f000000000000f03f0000000000000840|t|00000003ea000000020000000000000000000000000000000040000000000000003ff00000000000003ff00000000000004008000000000000 LINESTRING M (0 0 2, 1 1 3)|01d207000002000000000000000000000000000000000000000000000000000040000000000000f03f000000000000f03f0000000000000840|t|00000007d2000000020000000000000000000000000000000040000000000000003ff00000000000003ff00000000000004008000000000000 LINESTRING ZM (0 0 2 3, 1 1 4 5)|01ba0b0000020000000000000000000000000000000000000000000000000000400000000000000840000000000000f03f000000000000f03f00000000000010400000000000001440|t|0000000bba0000000200000000000000000000000000000000400000000000000040080000000000003ff00000000000003ff000000000000040100000000000004014000000000000 MULTILINESTRING EMPTY|010500000000000000|t|000000000500000000 MULTILINESTRING Z EMPTY|01ed03000000000000|t|00000003ed00000000 MULTILINESTRING M EMPTY|01d507000000000000|t|00000007d500000000 MULTILINESTRING ZM EMPTY|01bd0b000000000000|t|0000000bbd00000000 MULTILINESTRING((0 0, 2 0))|0105000000010000000102000000020000000000000000000000000000000000000000000000000000400000000000000000|t|0000000005000000010000000002000000020000000000000000000000000000000040000000000000000000000000000000 MULTILINESTRING((0 0, 2 0), (1 1, 2 2))|0105000000020000000102000000020000000000000000000000000000000000000000000000000000400000000000000000010200000002000000000000000000f03f000000000000f03f00000000000000400000000000000040|t|00000000050000000200000000020000000200000000000000000000000000000000400000000000000000000000000000000000000002000000023ff00000000000003ff000000000000040000000000000004000000000000000 MULTILINESTRING Z ((0 0 1, 2 0 2), (1 1 3, 2 2 4))|01ed0300000200000001ea0300000200000000000000000000000000000000000000000000000000f03f00000000000000400000000000000000000000000000004001ea03000002000000000000000000f03f000000000000f03f0000000000000840000000000000004000000000000000400000000000001040|t|00000003ed0000000200000003ea00000002000000000000000000000000000000003ff000000000000040000000000000000000000000000000400000000000000000000003ea000000023ff00000000000003ff00000000000004008000000000000400000000000000040000000000000004010000000000000 MULTILINESTRING M ((0 0 1, 2 0 2), (1 1 3, 2 2 4))|01d50700000200000001d20700000200000000000000000000000000000000000000000000000000f03f00000000000000400000000000000000000000000000004001d207000002000000000000000000f03f000000000000f03f0000000000000840000000000000004000000000000000400000000000001040|t|00000007d50000000200000007d200000002000000000000000000000000000000003ff000000000000040000000000000000000000000000000400000000000000000000007d2000000023ff00000000000003ff00000000000004008000000000000400000000000000040000000000000004010000000000000 MULTILINESTRING ZM ((0 0 1 5, 2 0 2 4), (1 1 3 3, 2 2 4 2))|01bd0b00000200000001ba0b00000200000000000000000000000000000000000000000000000000f03f0000000000001440000000000000004000000000000000000000000000000040000000000000104001ba0b000002000000000000000000f03f000000000000f03f000000000000084000000000000008400000000000000040000000000000004000000000000010400000000000000040|t|0000000bbd000000020000000bba00000002000000000000000000000000000000003ff0000000000000401400000000000040000000000000000000000000000000400000000000000040100000000000000000000bba000000023ff00000000000003ff0000000000000400800000000000040080000000000004000000000000000400000000000000040100000000000004000000000000000 POLYGON EMPTY|010300000000000000|t|000000000300000000 POLYGON Z EMPTY|01eb03000000000000|t|00000003eb00000000 POLYGON M EMPTY|01d307000000000000|t|00000007d300000000 POLYGON ZM EMPTY|01bb0b000000000000|t|0000000bbb00000000 POLYGON((0 0,1 0,1 1,0 1,0 0))|0103000000010000000500000000000000000000000000000000000000000000000000f03f0000000000000000000000000000f03f000000000000f03f0000000000000000000000000000f03f00000000000000000000000000000000|t|00000000030000000100000005000000000000000000000000000000003ff000000000000000000000000000003ff00000000000003ff000000000000000000000000000003ff000000000000000000000000000000000000000000000 POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))|010300000002000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000000000000000000000000050000000000000000000040000000000000004000000000000000400000000000001440000000000000144000000000000014400000000000001440000000000000004000000000000000400000000000000040|t|000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000054000000000000000400000000000000040000000000000004014000000000000401400000000000040140000000000004014000000000000400000000000000040000000000000004000000000000000 POLYGON Z ((0 0 1,10 0 2 ,10 10 2,0 10 2,0 0 1),(2 2 5 ,2 5 4,5 5 3,5 2 3,2 2 5))|01eb030000020000000500000000000000000000000000000000000000000000000000f03f00000000000024400000000000000000000000000000004000000000000024400000000000002440000000000000004000000000000000000000000000002440000000000000004000000000000000000000000000000000000000000000f03f05000000000000000000004000000000000000400000000000001440000000000000004000000000000014400000000000001040000000000000144000000000000014400000000000000840000000000000144000000000000000400000000000000840000000000000004000000000000000400000000000001440|t|00000003eb0000000200000005000000000000000000000000000000003ff0000000000000402400000000000000000000000000004000000000000000402400000000000040240000000000004000000000000000000000000000000040240000000000004000000000000000000000000000000000000000000000003ff000000000000000000005400000000000000040000000000000004014000000000000400000000000000040140000000000004010000000000000401400000000000040140000000000004008000000000000401400000000000040000000000000004008000000000000400000000000000040000000000000004014000000000000 POLYGON M ((0 0 1,10 0 2 ,10 10 2,0 10 2,0 0 1),(2 2 5 ,2 5 4,5 5 3,5 2 3,2 2 5))|01d3070000020000000500000000000000000000000000000000000000000000000000f03f00000000000024400000000000000000000000000000004000000000000024400000000000002440000000000000004000000000000000000000000000002440000000000000004000000000000000000000000000000000000000000000f03f05000000000000000000004000000000000000400000000000001440000000000000004000000000000014400000000000001040000000000000144000000000000014400000000000000840000000000000144000000000000000400000000000000840000000000000004000000000000000400000000000001440|t|00000007d30000000200000005000000000000000000000000000000003ff0000000000000402400000000000000000000000000004000000000000000402400000000000040240000000000004000000000000000000000000000000040240000000000004000000000000000000000000000000000000000000000003ff000000000000000000005400000000000000040000000000000004014000000000000400000000000000040140000000000004010000000000000401400000000000040140000000000004008000000000000401400000000000040000000000000004008000000000000400000000000000040000000000000004014000000000000 POLYGON ZM ((0 0 1 -1,10 0 2 -2,10 10 2 -2,0 10 2 -4,0 0 1 -1),(2 2 5 0,2 5 4 1,5 5 3 2,5 2 3 1,2 2 5 0))|01bb0b0000020000000500000000000000000000000000000000000000000000000000f03f000000000000f0bf00000000000024400000000000000000000000000000004000000000000000c000000000000024400000000000002440000000000000004000000000000000c000000000000000000000000000002440000000000000004000000000000010c000000000000000000000000000000000000000000000f03f000000000000f0bf050000000000000000000040000000000000004000000000000014400000000000000000000000000000004000000000000014400000000000001040000000000000f03f0000000000001440000000000000144000000000000008400000000000000040000000000000144000000000000000400000000000000840000000000000f03f0000000000000040000000000000004000000000000014400000000000000000|t|0000000bbb0000000200000005000000000000000000000000000000003ff0000000000000bff0000000000000402400000000000000000000000000004000000000000000c000000000000000402400000000000040240000000000004000000000000000c000000000000000000000000000000040240000000000004000000000000000c010000000000000000000000000000000000000000000003ff0000000000000bff00000000000000000000540000000000000004000000000000000401400000000000000000000000000004000000000000000401400000000000040100000000000003ff000000000000040140000000000004014000000000000400800000000000040000000000000004014000000000000400000000000000040080000000000003ff00000000000004000000000000000400000000000000040140000000000000000000000000000 MULTIPOLYGON EMPTY|010600000000000000|t|000000000600000000 MULTIPOLYGON Z EMPTY|01ee03000000000000|t|00000003ee00000000 MULTIPOLYGON M EMPTY|01d607000000000000|t|00000007d600000000 MULTIPOLYGON ZM EMPTY|01be0b000000000000|t|0000000bbe00000000 MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))|010600000001000000010300000002000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000000000000000000000000050000000000000000000040000000000000004000000000000000400000000000001440000000000000144000000000000014400000000000001440000000000000004000000000000000400000000000000040|t|000000000600000001000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000054000000000000000400000000000000040000000000000004014000000000000401400000000000040140000000000004014000000000000400000000000000040000000000000004000000000000000 MULTIPOLYGON Z (((0 0 3,10 0 3,10 10 3,0 10 3,0 0 3),(2 2 3,2 5 3,5 5 3,5 2 3,2 2 3)))|01ee0300000100000001eb030000020000000500000000000000000000000000000000000000000000000000084000000000000024400000000000000000000000000000084000000000000024400000000000002440000000000000084000000000000000000000000000002440000000000000084000000000000000000000000000000000000000000000084005000000000000000000004000000000000000400000000000000840000000000000004000000000000014400000000000000840000000000000144000000000000014400000000000000840000000000000144000000000000000400000000000000840000000000000004000000000000000400000000000000840|t|00000003ee0000000100000003eb000000020000000500000000000000000000000000000000400800000000000040240000000000000000000000000000400800000000000040240000000000004024000000000000400800000000000000000000000000004024000000000000400800000000000000000000000000000000000000000000400800000000000000000005400000000000000040000000000000004008000000000000400000000000000040140000000000004008000000000000401400000000000040140000000000004008000000000000401400000000000040000000000000004008000000000000400000000000000040000000000000004008000000000000 MULTIPOLYGON M (((0 0 3,10 0 3,10 10 3,0 10 3,0 0 3),(2 2 3,2 5 3,5 5 3,5 2 3,2 2 3)))|01d60700000100000001d3070000020000000500000000000000000000000000000000000000000000000000084000000000000024400000000000000000000000000000084000000000000024400000000000002440000000000000084000000000000000000000000000002440000000000000084000000000000000000000000000000000000000000000084005000000000000000000004000000000000000400000000000000840000000000000004000000000000014400000000000000840000000000000144000000000000014400000000000000840000000000000144000000000000000400000000000000840000000000000004000000000000000400000000000000840|t|00000007d60000000100000007d3000000020000000500000000000000000000000000000000400800000000000040240000000000000000000000000000400800000000000040240000000000004024000000000000400800000000000000000000000000004024000000000000400800000000000000000000000000000000000000000000400800000000000000000005400000000000000040000000000000004008000000000000400000000000000040140000000000004008000000000000401400000000000040140000000000004008000000000000401400000000000040000000000000004008000000000000400000000000000040000000000000004008000000000000 MULTIPOLYGON ZM (((0 0 3 2,10 0 3 2,10 10 3 2,0 10 3 2,0 0 3 2),(2 2 3 2,2 5 3 2,5 5 3 2,5 2 3 2,2 2 3 2)))|01be0b00000100000001bb0b00000200000005000000000000000000000000000000000000000000000000000840000000000000004000000000000024400000000000000000000000000000084000000000000000400000000000002440000000000000244000000000000008400000000000000040000000000000000000000000000024400000000000000840000000000000004000000000000000000000000000000000000000000000084000000000000000400500000000000000000000400000000000000040000000000000084000000000000000400000000000000040000000000000144000000000000008400000000000000040000000000000144000000000000014400000000000000840000000000000004000000000000014400000000000000040000000000000084000000000000000400000000000000040000000000000004000000000000008400000000000000040|t|0000000bbe000000010000000bbb0000000200000005000000000000000000000000000000004008000000000000400000000000000040240000000000000000000000000000400800000000000040000000000000004024000000000000402400000000000040080000000000004000000000000000000000000000000040240000000000004008000000000000400000000000000000000000000000000000000000000000400800000000000040000000000000000000000540000000000000004000000000000000400800000000000040000000000000004000000000000000401400000000000040080000000000004000000000000000401400000000000040140000000000004008000000000000400000000000000040140000000000004000000000000000400800000000000040000000000000004000000000000000400000000000000040080000000000004000000000000000 GEOMETRYCOLLECTION EMPTY|010700000000000000|t|000000000700000000 GEOMETRYCOLLECTION Z EMPTY|01ef03000000000000|t|00000003ef00000000 GEOMETRYCOLLECTION M EMPTY|01d707000000000000|t|00000007d700000000 GEOMETRYCOLLECTION ZM EMPTY|01bf0b000000000000|t|0000000bbf00000000 GEOMETRYCOLLECTION ZM (POINT ZM (0 0 0 0),LINESTRING ZM (0 0 0 0,1 1 1 1))|01bf0b00000200000001b90b0000000000000000000000000000000000000000000000000000000000000000000001ba0b0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f|t|0000000bbf000000020000000bb900000000000000000000000000000000000000000000000000000000000000000000000bba0000000200000000000000000000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff00000000000003ff0000000000000 GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1))|01d70700000200000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f|t|00000007d70000000200000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff0000000000000 GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1)))|01d70700000300000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f01d70700000200000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f|t|00000007d70000000300000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff000000000000000000007d70000000200000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff0000000000000 GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),POINT M EMPTY,GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1)))|01d70700000400000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f01d40700000000000001d70700000200000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f|f|00000007d70000000400000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff000000000000000000007d40000000000000007d70000000200000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff0000000000000 GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),POINT M EMPTY,GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1))),POINT M EMPTY,GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1)))|01d70700000500000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f01d70700000400000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f01d40700000000000001d70700000200000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f01d40700000000000001d70700000200000001d107000000000000000000000000000000000000000000000000000001d207000002000000000000000000000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f|f|00000007d70000000500000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff000000000000000000007d70000000400000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff000000000000000000007d40000000000000007d70000000200000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff000000000000000000007d40000000000000007d70000000200000007d100000000000000000000000000000000000000000000000000000007d2000000020000000000000000000000000000000000000000000000003ff00000000000003ff00000000000003ff0000000000000 CIRCULARSTRING EMPTY|010800000000000000|t|000000000800000000 CIRCULARSTRING Z EMPTY|01f003000000000000|t|00000003f000000000 CIRCULARSTRING M EMPTY|01d807000000000000|t|00000007d800000000 CIRCULARSTRING ZM EMPTY|01c00b000000000000|t|0000000bc000000000 CIRCULARSTRING (0 0,1 1, 2 0)|01080000000300000000000000000000000000000000000000000000000000f03f000000000000f03f00000000000000400000000000000000|t|000000000800000003000000000000000000000000000000003ff00000000000003ff000000000000040000000000000000000000000000000 CIRCULARSTRING M (0 0 1,1 1 1, 2 0 1)|01d80700000300000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000400000000000000000000000000000f03f|t|00000007d800000003000000000000000000000000000000003ff00000000000003ff00000000000003ff00000000000003ff0000000000000400000000000000000000000000000003ff0000000000000 CIRCULARSTRING ZM (0 0 1 2,1 1 1 2, 2 0 1 2)|01c00b00000300000000000000000000000000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f03f000000000000f03f000000000000004000000000000000400000000000000000000000000000f03f0000000000000040|t|0000000bc000000003000000000000000000000000000000003ff000000000000040000000000000003ff00000000000003ff00000000000003ff00000000000004000000000000000400000000000000000000000000000003ff00000000000004000000000000000 COMPOUNDCURVE EMPTY|010900000000000000|t|000000000900000000 COMPOUNDCURVE Z EMPTY|01f103000000000000|t|00000003f100000000 COMPOUNDCURVE M EMPTY|01d907000000000000|t|00000007d900000000 COMPOUNDCURVE ZM EMPTY|01c10b000000000000|t|0000000bc100000000 COMPOUNDCURVE (CIRCULARSTRING (0 0,1 1,2 0),LINESTRING(2 0,4 1))|01090000000200000001080000000300000000000000000000000000000000000000000000000000f03f000000000000f03f00000000000000400000000000000000010200000002000000000000000000004000000000000000000000000000001040000000000000f03f|t|000000000900000002000000000800000003000000000000000000000000000000003ff00000000000003ff0000000000000400000000000000000000000000000000000000002000000024000000000000000000000000000000040100000000000003ff0000000000000 COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 1,1 1 1,2 0 1),LINESTRING Z (2 0 0,4 1 1))|01f10300000200000001f00300000300000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000400000000000000000000000000000f03f01ea030000020000000000000000000040000000000000000000000000000000000000000000001040000000000000f03f000000000000f03f|t|00000003f10000000200000003f000000003000000000000000000000000000000003ff00000000000003ff00000000000003ff00000000000003ff0000000000000400000000000000000000000000000003ff000000000000000000003ea0000000240000000000000000000000000000000000000000000000040100000000000003ff00000000000003ff0000000000000 COMPOUNDCURVE M (CIRCULARSTRING M (0 0 1,1 1 1,2 0 1),LINESTRING M (2 0 0,4 1 1))|01d90700000200000001d80700000300000000000000000000000000000000000000000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000400000000000000000000000000000f03f01d2070000020000000000000000000040000000000000000000000000000000000000000000001040000000000000f03f000000000000f03f|t|00000007d90000000200000007d800000003000000000000000000000000000000003ff00000000000003ff00000000000003ff00000000000003ff0000000000000400000000000000000000000000000003ff000000000000000000007d20000000240000000000000000000000000000000000000000000000040100000000000003ff00000000000003ff0000000000000 COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING ZM (2 0 0 0,4 1 1 1))|01c10b00000200000001c00b00000300000000000000000000000000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f03f000000000000f03f000000000000004000000000000000400000000000000000000000000000f03f000000000000004001ba0b00000200000000000000000000400000000000000000000000000000000000000000000000000000000000001040000000000000f03f000000000000f03f000000000000f03f|t|0000000bc1000000020000000bc000000003000000000000000000000000000000003ff000000000000040000000000000003ff00000000000003ff00000000000003ff00000000000004000000000000000400000000000000000000000000000003ff000000000000040000000000000000000000bba00000002400000000000000000000000000000000000000000000000000000000000000040100000000000003ff00000000000003ff00000000000003ff0000000000000 CURVEPOLYGON EMPTY|010a00000000000000|t|000000000a00000000 CURVEPOLYGON Z EMPTY|01f203000000000000|t|00000003f200000000 CURVEPOLYGON M EMPTY|01da07000000000000|t|00000007da00000000 CURVEPOLYGON ZM EMPTY|01c20b000000000000|t|0000000bc200000000 CURVEPOLYGON ZM (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING(2 0 1 2,1 -1 1 1,0 0 1 2)))|01c20b00000100000001c10b00000200000001c00b00000300000000000000000000000000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f03f000000000000f03f000000000000004000000000000000400000000000000000000000000000f03f000000000000004001ba0b00000300000000000000000000400000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f0bf000000000000f03f000000000000f03f00000000000000000000000000000000000000000000f03f0000000000000040|t|0000000bc2000000010000000bc1000000020000000bc000000003000000000000000000000000000000003ff000000000000040000000000000003ff00000000000003ff00000000000003ff00000000000004000000000000000400000000000000000000000000000003ff000000000000040000000000000000000000bba00000003400000000000000000000000000000003ff000000000000040000000000000003ff0000000000000bff00000000000003ff00000000000003ff0000000000000000000000000000000000000000000003ff00000000000004000000000000000 MULTICURVE EMPTY|010b00000000000000|t|000000000b00000000 MULTICURVE Z EMPTY|01f303000000000000|t|00000003f300000000 MULTICURVE M EMPTY|01db07000000000000|t|00000007db00000000 MULTICURVE ZM EMPTY|01c30b000000000000|t|0000000bc300000000 MULTICURVE ZM (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING(2 0 1 2,1 -1 1 1,0 0 1 2)))|01c30b00000100000001c10b00000200000001c00b00000300000000000000000000000000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f03f000000000000f03f000000000000004000000000000000400000000000000000000000000000f03f000000000000004001ba0b00000300000000000000000000400000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f0bf000000000000f03f000000000000f03f00000000000000000000000000000000000000000000f03f0000000000000040|t|0000000bc3000000010000000bc1000000020000000bc000000003000000000000000000000000000000003ff000000000000040000000000000003ff00000000000003ff00000000000003ff00000000000004000000000000000400000000000000000000000000000003ff000000000000040000000000000000000000bba00000003400000000000000000000000000000003ff000000000000040000000000000003ff0000000000000bff00000000000003ff00000000000003ff0000000000000000000000000000000000000000000003ff00000000000004000000000000000 MULTISURFACE EMPTY|010c00000000000000|t|000000000c00000000 MULTISURFACE Z EMPTY|01f403000000000000|t|00000003f400000000 MULTISURFACE M EMPTY|01dc07000000000000|t|00000007dc00000000 MULTISURFACE ZM EMPTY|01c40b000000000000|t|0000000bc400000000 MULTISURFACE ZM (CURVEPOLYGON ZM (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING(2 0 1 2,1 -1 1 1,0 0 1 2))),POLYGON((10 10 10 10,10 12 10 10,12 12 10 10,12 10 10 10,10 10 10 10)))|01c40b00000200000001c20b00000100000001c10b00000200000001c00b00000300000000000000000000000000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f03f000000000000f03f000000000000004000000000000000400000000000000000000000000000f03f000000000000004001ba0b00000300000000000000000000400000000000000000000000000000f03f0000000000000040000000000000f03f000000000000f0bf000000000000f03f000000000000f03f00000000000000000000000000000000000000000000f03f000000000000004001bb0b0000010000000500000000000000000024400000000000002440000000000000244000000000000024400000000000002440000000000000284000000000000024400000000000002440000000000000284000000000000028400000000000002440000000000000244000000000000028400000000000002440000000000000244000000000000024400000000000002440000000000000244000000000000024400000000000002440|t|0000000bc4000000020000000bc2000000010000000bc1000000020000000bc000000003000000000000000000000000000000003ff000000000000040000000000000003ff00000000000003ff00000000000003ff00000000000004000000000000000400000000000000000000000000000003ff000000000000040000000000000000000000bba00000003400000000000000000000000000000003ff000000000000040000000000000003ff0000000000000bff00000000000003ff00000000000003ff0000000000000000000000000000000000000000000003ff000000000000040000000000000000000000bbb000000010000000540240000000000004024000000000000402400000000000040240000000000004024000000000000402800000000000040240000000000004024000000000000402800000000000040280000000000004024000000000000402400000000000040280000000000004024000000000000402400000000000040240000000000004024000000000000402400000000000040240000000000004024000000000000 POLYHEDRALSURFACE EMPTY|010f00000000000000|t|000000000f00000000 POLYHEDRALSURFACE Z EMPTY|01f703000000000000|t|00000003f700000000 POLYHEDRALSURFACE M EMPTY|01df07000000000000|t|00000007df00000000 POLYHEDRALSURFACE ZM EMPTY|01c70b000000000000|t|0000000bc700000000 TRIANGLE EMPTY|011100000000000000|t|000000001100000000 TRIANGLE Z EMPTY|01f903000000000000|t|00000003f900000000 TRIANGLE M EMPTY|01e107000000000000|t|00000007e100000000 TRIANGLE ZM EMPTY|01c90b000000000000|t|0000000bc900000000 TIN EMPTY|011000000000000000|t|000000001000000000 TIN Z EMPTY|01f803000000000000|t|00000003f800000000 TIN M EMPTY|01e007000000000000|t|00000007e000000000 TIN ZM EMPTY|01c80b000000000000|t|0000000bc800000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_biginsert.sql�����������������������������������������������0000644�0000000�0000000�00000252106�11722777314�021514� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������insert into TEST values('MULTIPOINT(539.303406 376.058716,202.25177 22.0542946,360.907745 488.519318,561.954895 76.2742081,154.161743 784.542969,961.448181 265.013519,355.182983 775.852173,823.602844 939.744446,432.967377 580.047791,569.839905 466.251007,400.788818 579.457703,498.164032 892.853394,90.925972 74.5945358,937.808044 107.329208,792.148743 134.400589,410.748444 182.218704,623.001282 447.977661,214.111847 333.964111,327.100952 558.144409,835.091187 152.088226,91.1712952 582.239929,167.555328 774.574402,296.461884 564.938721,22.6981888 636.175415,522.965576 460.605499,245.920334 375.651672,824.218018 933.539185,690.468262 484.912048,62.4769707 606.037964,538.947266 829.757385,342.720215 486.9841,659.05127 449.480621,468.913818 726.164551,21.3789902 962.020752,169.164978 881.588318,844.492004 950.955933,887.039612 138.658813,931.610901 620.402039,516.90918 547.65625,115.101707 829.415527,808.023071 806.663513,800.930237 646.683777,432.439789 305.206635,607.203369 367.557068,95.8279419 151.868607,608.403564 156.262894,34.7034264 639.695679,19.0910854 186.239166,161.639984 719.650146,993.771851 320.295135,306.24765 642.472839,214.154129 849.746155,908.833374 532.969971,245.426346 805.165344,560.922668 447.046082,259.54953 750.738281,728.799622 308.585693,338.224823 824.543701,562.591248 677.916565,346.695465 429.80896,555.816528 927.624451,410.22644 927.48468,285.173706 251.402985,20.3341484 511.824127,14.0441942 782.62323,227.897659 330.023712,63.8606339 591.848694,918.329712 768.499817,782.263184 944.173462,140.104019 15.0379257,752.330994 431.626984,861.06842 84.70327,206.979828 259.0672,490.742828 514.62384,736.356506 163.352524,356.393738 737.188232,501.924622 269.110382,895.792358 176.885895,725.220642 941.508057,514.996521 26.8358841,808.467102 543.12439,312.312073 625.657776,141.567902 328.815369,222.88884 839.139771,367.318542 247.230972,593.597229 839.737488,195.682236 66.0508499,300.797516 965.800354,745.639404 254.730835,677.694885 764.514832,71.0039902 280.733887,187.53656 255.77182,863.914246 399.214844,569.371338 326.312439,741.082825 916.226746,383.652771 836.307373,368.087097 600.257874,665.772766 347.130188,146.953033 894.97467,15.1230125 577.084045,201.415878 149.952896,345.454834 587.149048,611.352905 481.008514,398.82843 452.948547,231.534149 781.762085,144.537552 531.066895,509.70874 577.714233,465.896637 142.540543,871.59198 779.846741,776.939697 747.945251,270.703461 472.468018,326.22049 650.827698,495.162415 48.1516571,953.307678 560.460388,518.56488 526.917358,745.205017 249.475021,280.477173 243.558395,721.309692 256.589935,664.365234 915.773376,883.716125 209.00119,96.4160156 873.189087,453.728973 380.506256,839.233643 30.4432583,402.696503 429.607422,214.494003 10.2854099,660.671021 384.58017,125.967995 167.075745,124.848274 814.654907,600.635254 616.64624,381.469879 598.568604,428.29071 631.691528,400.269836 384.491455,287.107544 564.576416,826.41925 549.525696,661.548218 17.5187492,355.063354 422.160858,787.2323 254.162811,344.51239 844.352722,682.794006 934.116943,402.53363 158.666504,676.035645 516.987366,233.291061 411.919312,361.635864 661.943787,996.984253 419.595581,553.327515 496.442352,899.898621 844.921021,486.355713 338.953033,200.831436 611.956909,629.789551 542.505737,689.316711 999.294739,778.430725 543.296509,496.329987 200.955261,705.813416 656.342773,104.723434 86.634613,938.679871 256.089569,593.905029 282.752289,237.417419 538.641724,306.227753 172.306824,456.72821 518.266663,929.652588 859.178101,561.70929 127.188683,608.059326 756.375793,340.898712 191.245483,977.000122 274.210052,909.762268 440.401886,215.381943 569.15155,203.001343 376.312714,554.770813 950.177185,42.4043541 233.243973,879.367432 782.647034,371.959473 626.37262,343.671356 910.149414,868.331726 118.018051,243.24202 838.093079,328.882599 450.9375,106.714943 472.397095,136.96994 518.739441,878.782349 152.352829,494.822784 818.610901,405.715668 498.951141,674.003235 656.309204,41.8900528 315.685242,837.223877 969.888123,324.15329 493.94043,188.145676 233.150452,574.462769 395.249756,304.339478 463.093872,70.5499802 699.04248,522.261719 109.899307,754.97168 543.561096,452.937531 825.854797,823.645203 135.056519,433.872681 899.562561,10.9722977 59.1961517,929.370239 675.478882,540.960754 682.530151,569.480591 497.205322,645.846619 972.424316,465.943237 646.239075,145.657669 926.754517,650.359558 378.950714,252.396179 223.450562,626.004456 902.241394,928.477539 467.246002,43.9169235 437.142944,218.57254 938.098022,603.757202 411.649445,520.093689 946.48877,529.62323 738.028931,419.608765 647.352173,362.620941 164.534119,353.669739 563.891174,265.594788 284.876984,301.668152 546.184021,512.570129 366.966553,678.112488 476.269714,639.245789 613.000977,199.786819 915.770325,573.011536 517.767029,178.431015 344.104218,2.09698439 80.6630325,229.39032 408.046265,989.05957 651.094788,786.268677 384.177032,428.732544 443.063232,676.909607 42.7332535,220.863785 741.01123,195.797226 338.137268,750.47583 912.89447,727.516113 265.466339,803.679749 890.889465,443.466827 850.095947,756.343933 141.870956,63.604023 342.635895,980.563232 16.8725758,297.048035 21.400404,673.027832 539.876404,377.346588 413.416931,796.757996 986.2099,503.913086 541.557861,854.60437 295.386658,911.277649 41.3887634,667.539673 827.616394,397.762024 499.432037,874.555908 218.602539,537.843445 496.970886,967.412537 454.608978,392.152466 849.846619,464.866608 949.578796,718.035889 980.796631,976.233032 384.054016,170.135178 920.866028,666.962463 763.905945,452.47287 686.399963,420.079803 990.819153,473.402405 356.032318,128.328186 407.332153,370.402618 31.3539906,260.205872 610.025024,434.230591 355.701141,242.584534 768.796814,825.462097 464.024811,368.312714 362.940979,7.73779964 232.310471,258.759399 220.669205,779.35437 246.511215,308.968475 175.226974,904.905334 354.629089,929.589478 774.583679,561.776184 247.353729,886.471863 339.079102,175.242783 926.961914,672.907654 762.962341,170.63826 635.298523,66.7210007 60.653717,347.955109 401.349915,825.003601 950.502014,493.189819 865.490845,718.992004 152.102768,689.026184 85.404007,714.093262 320.241516,915.772644 401.000397,777.444885 910.008606,103.532982 971.691711,120.542389 483.047089,878.369385 464.708771,260.056091 875.234558,530.995178 326.17746,967.905518 639.971313,528.526794 875.344788,334.599091 762.157715,377.131195 996.96106,908.351685 449.021759,163.885162 751.462036,773.754517 202.291412,429.500732 222.305969,846.144348 292.782349,378.041809 975.411743,471.095062 788.979248,638.367737 92.2769547,588.052917 431.471069,995.550598 640.967957,24.146143 314.615448,804.40387 507.277679,977.234985 960.59967,2.09129405 883.178284,35.2329941 373.850922,975.489746 44.6877747,229.114365 496.176178,780.429504 241.801407,731.070557 955.039795,27.7681637 340.926971,443.267151 24.4087124,396.281677 848.292664,760.888489 169.498581,278.895935 704.634399,452.540588 452.228912,107.264633 832.737854,734.086853 322.636505,11.2563848 218.745346,371.578552 381.544556,523.26709 450.32016,863.435608 801.998962,669.088135 589.806946,420.18924 500.396942,239.963943 943.33551,255.534973 128.487656,353.404022 956.616394,309.41629 510.876923,367.292969 395.318146,272.684448 525.400635,698.289917 234.644501,508.682373 478.525269,485.130249 888.474121,446.428589 20.3111668,469.251831 23.6580029,85.6637802 158.593796,274.593414 946.183411,539.498352 435.684418,432.515106 567.647278,133.883133 912.096313,647.440369 167.26033,253.697556 562.453796,412.351379 365.758759,590.922119 906.462708,978.346252 374.76825,275.733093 843.641296,711.13501 361.311768,959.254761 997.293579,987.967102 921.375,689.197632 160.54158,379.905731 823.52063,18.3778706 104.465782,669.036255 399.283997,470.716248 999.692932,539.974915 101.856949,439.109802 449.478912,62.2949219 273.067871,805.901794 615.946899,211.77565 131.662094,609.876221 271.568207,691.194214 456.002777,214.649368 655.722717,781.674255 481.986084,206.791382 884.901855,556.505371 692.606018,12.7750731 512.19635,546.267944 510.497742,918.450378 176.084961,994.563843 757.727417,132.07872 884.619873,72.4647217 71.7265244,376.205994 35.7143059,803.802612 769.052734,893.01886 228.50058,686.027771 864.890625,879.231812 198.661041,231.802658 547.92804,324.932892 170.469742,137.660126 617.902527,186.849594 605.958557,926.712524 624.790039,365.645142 211.73793,629.981445 615.072205,766.18512 499.273438,488.845093 640.84259,725.575073 11.1465721,521.011047 881.03064,764.533813 74.1377182,696.421509 989.20636,811.713501 62.470871,188.117935 289.943848,232.474396 749.901123,11.0472832 342.202759,549.859131 212.48082,42.6537666 839.379272,998.428101 24.2628994,42.919754 422.445679,840.02533 102.910873,560.959473 100.907997,187.471344 880.589294,886.193359 90.5836716,967.314575 576.185486,190.679016 620.60437,641.787231 914.897339,819.185425 457.05838,429.628845 364.181244,287.852478 844.935059,231.468994 371.560608,626.371521 727.678406,211.315247 924.329346,56.3610344 523.763489,803.829407 304.691406,868.682617 516.808533,535.139648 340.75354,984.707458 661.444397,717.054993 106.792183,730.625122 125.070587,69.4093094 266.343262,325.820221 58.6187096,933.671265 632.216248,635.953247 280.772797,667.625854 437.553223,900.536011 344.670624,294.838043 710.09259,860.151794 992.320679,139.905334 438.338593,336.345642 9.96521854,237.009888 653.564209,603.059021 813.217407,567.64679 771.944031,878.068542 170.499039,956.800537 577.166138,970.655945 126.390266,256.320251 747.901123,170.77356 164.270111,232.370682 465.18634,584.073669 182.55864,860.965759 872.608459,983.891479 426.283142,205.976822 521.453613,827.266724 963.608032,228.399063 967.504761,307.208893 470.168457,819.209839 874.784119,484.738159 460.000916,503.485168 864.242676,703.918518 139.906693,919.42334 87.6809769,642.203857 340.528839,406.114655 546.26178,387.983887 98.3486481,778.977722 552.763184,480.774567 1.20265412,885.070618 930.979553,311.599945 813.32074,935.560852 78.0359421,192.115341 505.152771,607.348022 44.8926964,257.07608 67.0603943,117.407356 988.791199,692.204102 609.546387,719.14624 203.542587,744.08905 339.971893,122.92363 787.721863,656.722107 34.0563545,628.834717 618.562073,539.25354 856.900085,37.795208 811.378784,338.334076 770.283325,198.249664 723.315674,79.6130219 630.944519,957.151367 764.314941,606.081726 26.0421391,905.443787 834.577576,682.979248 698.66748,616.888611 400.126038,42.8674431 403.985992,472.137756 826.790039,483.544678 941.261963,225.702286 644.868042,994.431824 83.9348907,880.926453 223.90065,561.59137 23.9463806,443.184387 75.3407135,438.843872 724.374512,189.527847 81.2205734,351.140106 282.636688,469.253967 786.066772,787.190857 914.143921,298.942322 761.95813,450.476288 921.639038,577.977173 348.14444,463.849152 643.682495,691.149475 920.786377,173.593002 818.018433,265.088806 934.950928,828.275513 45.5713234,940.427795 905.379333,434.874329 301.979645,219.374466 855.935852,766.121582 816.297424,485.463379 262.108978,587.962402 645.571899,212.936172 155.761932,885.452881 59.3739662,305.228607 878.014099,77.5960236 843.567688,331.716034 638.176697,472.849243 875.449524,766.181519 635.633057,956.653687 883.213501,783.762085 587.372437,364.962921 972.985657,326.365784 683.908447,480.286133 792.694153,351.402435 351.906036,142.082047 612.229187,99.5908585 889.118347,774.476685 587.553711,804.859009 394.490662,60.1412163 854.670715,537.345642 699.83374,718.949402 69.6868896,776.044556 881.174316,119.284828 862.188599,846.649048 52.332058,184.8647 596.029968,411.294556 413.413239,442.230774 539.716187,991.561462 773.474365,982.24823 190.171661,98.1007996 541.713867,659.625366 646.227539,571.87677 761.962646,890.620605 52.1688538,763.328491 624.524841,416.00058 375.173615,863.062561 462.484009,664.596436 9.03505135,54.7640572 735.637268,125.630676 662.377563,426.2229 562.802246,792.55249 8.29048347,685.799622 535.012451,167.185913 225.83252,882.791626 424.31897,76.3077316 339.484406,640.801514 507.767303,276.85083 592.478577,503.324188 435.365265,735.582275 224.561676,645.722351 967.372559,725.131592 597.851074,684.805298 999.048767,409.008636 116.926216,645.334473 888.364685,196.645813 790.59375,226.9198 191.324997,885.343933 985.114868,185.413895 555.24823,123.354797 630.177368,678.007324 705.230042,84.1970749 861.43103,747.173462 326.519562,643.154724 845.328308,111.613388 715.456909,355.946289 531.980835,985.397156 435.930115,574.047302 864.574219,292.524719 706.409119,622.217285 877.317322,370.295044 766.321777,714.920044 184.004715,658.702576 609.179199,887.447021 485.832001,248.09346 273.50061,941.809204 177.708694,306.057831 323.892212,759.030334 768.869934,547.362549 154.113861,534.521301 361.904419,717.414673 465.276215,582.678467 475.000763,946.931702 735.087891,860.148499 969.382141,500.326294 293.089172,581.986511 604.411499,37.8526039 210.666168,302.923645 938.511597,370.602509 886.97876,903.377686 9.92403126,851.955566 996.026123,268.489563 753.562683,66.1190109 799.996765,111.351227 272.865173,798.351013 364.989868,470.06485 854.888672,304.760803 357.259033,434.101715 549.070312,872.312134 661.89447,797.613159 544.435547,24.434967 281.242859,879.602173 365.587769,726.929565 605.726868,962.494263 56.9771042,657.125793 231.972946,161.160568 617.529846,443.145966 749.425598,400.597473 69.2090378,434.776245 593.560791,759.49707 222.609726,247.204926 858.620361,375.632019 699.747131,534.615234 479.353516,379.765686 761.79071,152.413818 12.1354313,833.446777 648.904358,299.820251 460.604828,475.615082 608.49646,944.71521 206.478165,784.444153 649.723145,754.455322 239.3228,663.780273 136.785736,760.961853 930.235046,153.677658 765.819763,892.460083 997.65387,17.4944038 868.840698,946.627747 896.295959,382.022461 132.477936,880.523193 930.147461,729.861755 496.075317,89.8860397 181.931412,145.188995 727.784973,709.555298 751.980164,409.62973 297.910522,138.513321 635.801758,424.721527 352.230377,279.710175 433.113892,442.411133 429.029846,976.711914 215.620438,714.761047 575.722107,348.684723 900.481873,125.450325 891.211487,656.987366 80.6255646,110.136971 602.684204,759.981934 802.144958,648.586853 722.093567,690.294434 890.711853,618.52356 341.394196,417.734131 190.597229,743.977295 626.672424,308.428253 813.580505,842.309875 888.724609,341.273529 103.618156,16.7024441 864.64856,677.542908 760.906006,541.690125 40.5570679,996.28772 728.5271,352.154785 876.836182,669.734924 341.171326,37.1111374 377.531586,814.917419 193.078659,542.606995 819.651367,548.127136 693.668884,481.78653 331.0354,269.521576 979.397644,547.863281 629.826599,714.183594 783.416199,13.7983265 43.0824051,92.9519348 716.066101,962.14679 366.091492,507.213837 11.4181242,572.49707 598.514648,691.620972 168.194183,881.358582 701.969788,693.883606 48.3849258,795.24353 729.898376,738.403748 144.894791,835.524597 504.410187,253.019608 210.547867,984.119873 334.082977,469.65976 836.087463,988.329651 252.777161,899.115662 190.514175,585.30719 475.240265,739.476746 418.940979,709.308594 654.333008,514.548157 646.873474,299.456573 68.7666321,166.391479 487.160645,690.942078 498.541016,648.96521 598.764282,501.276703 330.7771,285.511932 654.797241,379.000092 618.097351,1.30407822 254.379044,802.765991 800.481201,989.505676 64.5244827,855.121155 700.060974,531.134583 390.028717,712.201721 141.040833,279.60968 401.55722,936.440186 587.806763,506.044098 497.293274,477.183502 802.968262,677.601624 548.381226,854.938965 152.000397,486.632019 109.897705,453.340057 670.736023,365.925446 149.487701,997.931946 788.610046,329.73877 280.5065,67.7492142 929.403992,913.423828 80.7647705,70.295578 133.075439,794.197021 433.911041,526.778381 252.199585,484.864563 143.434082,213.763 703.591919,954.874207 443.17337,511.897614 69.4497833,918.787903 834.44574,972.130798 518.700317,401.822632 62.8143768,811.612366 629.999512,366.708374 63.4886742,940.845886 207.664719,153.022446 828.019653,177.940964 178.570908,178.1082 343.843781,10.1682968 17.8513165,325.582123 411.053589,979.856384 29.8255653,908.606445 805.726746,748.441162 357.376892,271.253754 630.390869,806.72522 417.468781,267.507202 79.7391586,650.676025 809.770813,48.1593857 29.8081417,96.5135345 524.455139,91.3634872 430.185608,216.396851 31.3950653,522.449768 888.442566,817.253723 259.4664,415.158173 891.115479,705.930115 710.710266,922.014526 890.273254,23.9586411 701.679993,924.040039 300.726501,388.024353 78.4792633,472.909485 535.077637,607.65979 96.6448593,708.770325 326.603607,245.989578 824.206055,616.995422 830.653442,599.983459 240.646973,965.06665 615.975403,87.6351624 165.050369,794.812988 367.286957,824.460938 785.457581,857.981628 944.724121,234.02919 84.3970108,525.42749 452.42691,346.516022 484.106018,70.3495636 788.19165,230.888306 27.9482422,577.128052 681.441589,126.552467 779.447388,23.8717537 507.450775,293.836609 979.626953,902.279053 745.880859,77.1569214 298.563049,406.71463 596.657593,224.439987 425.696655,124.405357 71.8240662,828.887817 970.556885,508.85083 289.532593,858.155884 256.025513,199.908585 540.701477,154.277496 501.31369,223.000916 646.020935,499.949036 682.527649,242.615723 69.2654037,982.252747 154.357346,52.8142815 862.524841,329.356506 331.93396,701.154114 634.530457,285.492706 944.775818,491.172485 422.955475,261.271759 342.573212,457.731628 899.180725,818.970642 46.3262749,29.6838989 382.581879,760.421448 754.929932,113.120865 134.872314,697.860596 885.453186,366.968658 155.530853,542.679138 129.006439,475.148743 600.564026,249.771912 144.074753,142.278915 792.764526,30.4807892 17.815609,174.963318 87.5506363,251.166397 622.244263,326.857819 766.802856,769.146423 96.5065384,467.281464 152.615585,46.4287376 303.16806,66.877243 405.905579,399.069611 674.259277,744.243469 967.072388,539.125671 516.660095,975.399109 441.349304,89.2029877 585.234253,448.745941 74.6308899,630.088684 813.892395,86.8382034 968.963623,878.960754 822.826965,29.0734024 963.760925,334.284363 407.835876,764.548279 696.784607,898.483582 354.53421,80.4708939 146.580536,924.547241 927.999268,962.262451 707.273865,831.810913 631.906006,815.223206 290.365448,759.807312 126.006744,280.971344 430.686676,148.998444 50.829277,732.842957 525.453369,561.969604 235.107056,157.862732 788.179321,787.968933 810.503479,626.689758 939.046082,457.228394 279.377899,353.048889 69.8663025,189.230774 4.64107752,544.6073 554.922913,846.81488 31.0550213,61.0120583 349.190918,564.620361 611.108643,674.881531 409.16571,604.586426 742.042419,940.967957 842.496094,178.482101 185.355652,488.699371 983.22821,274.924194 838.0896,50.3199272 500.087585,368.98999 196.724548,399.578094 908.200195,86.1890488 296.795349,668.106689 190.300781,306.41687 36.2599678,203.483627 152.334152,57.914547 526.317932,60.0687561 711.220459,732.587402 989.817871,135.168259 494.298004,264.53717 700.356689,891.817139 490.785126,389.505768 822.498108,424.01889 934.45697,92.1666107 62.384491,825.414246 592.734558,799.464905 923.29187,162.362106 378.58786,812.696594 51.6453133,429.708191 632.347534,711.035828 83.9393158,396.957092 881.899841,12.8112679 794.818481,132.421494 367.46286,697.158447 331.66568,987.606934 391.23999,783.631653 679.349365,380.617737 406.089783,336.54126 729.510864,567.512939 45.8525696,509.20459 303.960297,190.768326 267.883331,475.404266 622.437866,206.813721 199.541367,643.708008 978.105652,30.6475506 363.192139,507.914429 375.330139,180.617859 438.357361,875.434814 260.802917,753.303528 676.759155,359.862 744.128723,701.723022 425.84082,311.736237 501.140076,467.909332 559.873535,155.081039 494.968018,156.888367 946.036621,836.426941 482.482117,680.593628 82.9057007,879.93512 893.727661,279.305298 253.161026,327.558685 384.22699,387.001343 563.202454,979.965088 96.3945007,770.403442 765.416138,65.2023392 310.515686,457.136017 813.944824,767.355591 890.223877,20.9987221 442.557983,163.283279 657.302002,513.698669 200.362183,84.5319214 680.593323,190.489594 130.758636,436.810394 732.226929,598.050598 99.9171753,380.495758 114.571472,806.340881 960.937134,334.837311 278.006104,250.897217 796.407715,570.977234 419.488129,906.763672 175.245758,3.37755489 214.090591,965.791931 181.228806,826.385193 945.827332,468.647858 561.006287,424.551514 789.852539,410.504456 71.0766678,152.629135 610.696228,451.575745 259.117462,845.617615 22.0130577,768.747314 117.60553,871.144165 196.310287,985.834473 727.36145,329.992859 366.589935,371.712738 413.838104,302.848541 709.719177,546.732605 983.988037,494.012177 947.798645,415.503632 414.521179,184.996155 88.4563675,992.252563 392.361084,67.238945 594.684998,589.93219 38.0758286,150.148361 425.491333,46.9631996 435.015106,315.706207 725.264954,464.075012 818.951416,478.194458 4.59097338,600.554138 672.445862,232.231796 800.668335,164.59137 339.110992,899.909424 650.735718,572.011841 870.897949,374.966095 93.6476593,613.489685 448.284027,604.086121 320.10379,229.055862 699.909729,791.76178 872.374573,72.0403976 886.670227,274.442749 283.329498,761.513916 238.823792,553.821411 445.084076,58.8313522 921.790466,742.145935 360.495087,671.898499 282.81662,216.01445 525.864319,766.912231 635.40033,115.74221 301.844147,436.921448 354.469513,357.252014 204.079636,559.123474 330.229584,391.139435 706.464905,134.452454 748.792908,87.4629135 703.042664,69.510498 317.119293,73.0824966 836.616882,791.700378 576.99646,707.992004 599.947205,265.328949 653.916138,994.620361 833.636536,319.92511 827.801941,248.209061 329.680664,641.100525 491.676788,6.64761639 338.110992,924.823853 87.6509171,219.701111 322.262817,662.219421 755.940186,693.732971 330.64679,971.971069 823.730347,205.663513 957.712585,928.381836 391.572968,561.624146 364.949951,637.226868 651.101318,868.901733 586.403381,23.9395924 146.172638,850.771362 756.192383,432.297516 669.680603,8.71207142 941.310608,101.914757 522.85437,179.661407 978.850525,450.375824 885.006104,758.695129 538.223755,382.759979 528.233704,742.153137 537.199951,889.791016 662.2724,51.2416801 632.340515,416.863312 977.270325,653.287231 182.74353,222.438721 587.511047,634.856628 530.890198,374.772705 567.736572,19.3815498 153.582703,19.5695744 813.010437,291.09317 777.372437,427.098572 535.230774,245.772781 357.649963,567.714233 663.426514,163.461807 759.815735,238.137772 389.84906,339.214294 289.061768,571.586182 784.871399,185.171204 712.455383,624.483887 933.756165,267.065186 218.379379,534.998779 537.72644,517.719727 927.540955,905.937561 93.537468,866.611877 533.262817,354.974854 326.703278,236.573853 174.375671,443.032654 144.358429,992.747314 329.835785,630.431213 709.749878,711.179016 102.269577,392.737671 948.776245,173.117798 687.752014,712.23938 965.815674,431.204468 556.090942,14.5932198 70.6273956,752.548401 877.652405,342.062195 296.066223,230.933853 695.60321,598.588501 20.5155582,438.118103 727.844421,278.638947 483.265869,988.398071 217.477753,719.774353 891.232056,35.7066536 990.03186,759.943909 971.39032,966.884216 552.823303,282.432343 647.304504,768.941895 990.910095,298.719635 328.818848,798.632874 4.44433069,369.97406 147.071579,512.486206 581.042297,771.930237 734.201904,138.504074 434.840912,153.701965 635.166443,851.999146 221.508896,261.883026 745.373535,629.403381 508.839752,784.621338 760.430542,930.367371 387.21347,560.614502 279.836426,870.934998 834.676208,979.315979 974.613098,145.102524 679.013855,929.166199 803.807495,698.808533 699.443787,679.078857 437.208496,936.86554 592.087219,828.912842 609.769897,405.560516 924.03949,138.285172 650.571899,291.792572 660.428894,110.035995 948.695129,480.351288 468.639679,987.086121 225.598938,38.5911255 190.408005,250.725845 683.621643,393.516998 610.263611,263.749878 398.479248,480.874207 394.869659,674.971375 946.200439,673.860413 337.15976,210.151398 617.997009,50.0334969 32.8876305,125.880943 538.039612,632.872803 144.48674,527.465271 294.865723,5.48106527 493.662262,406.924042 303.637177,129.325577 20.5523911,917.917847 236.407898,600.649048 325.946045,139.168045 332.123413,657.445129 448.598541,590.544983 699.427002,384.811554 823.213989,201.405762 336.721985,116.789307 808.742615,303.245819 10.218648,473.140961 196.517334,393.739227 191.369232,10.4372053 352.049652,475.658081 390.834076,29.2262726 917.733582,71.9546585 72.4249039,770.256836 758.253784,520.558899 782.877136,821.351562 821.914062,621.442017 560.295715,696.254395 214.17659,435.854401 689.391418,552.661011 825.516052,156.078445 64.5430222,695.87439 481.321075,653.904419 434.799988,611.935059 552.868713,573.79895 15.9295416,273.007599 8.21821404,396.766174 6.09975815,560.293274 588.867615,632.463867 44.6886024,714.382263 947.258789,293.172028 930.699402,928.94751 374.211823,123.334793 127.19101,247.32634 782.689209,700.101379 498.722382,903.102173 390.821167,53.275486 31.2920113,471.07547 62.0444221,98.0058975 216.48494,167.677338 63.2101135,528.782104 23.9253769,4.19122648 575.237915,691.104736 498.08905,179.381714 772.590515,91.7442169 163.47287,155.198578 943.15155,226.125153 471.951721,489.443542 379.366302,658.372437 759.877136,248.546844 252.542786,150.016022 904.102051,496.409485 227.225311,140.96936 57.2294502,902.864319 789.202271,169.046402 83.6194611,369.715302 685.482239,685.937073 457.296204,54.4804993 488.201233,697.50531 51.7308998,354.327576 892.162231,481.921295 921.336853,549.217773 892.015686,366.571075 588.331238,465.746765 452.005066,944.905884 452.103821,948.742188 46.9283104,86.6051483 401.70047,801.873413 58.3199196,994.042542 32.6284866,252.668716 917.105591,957.863953 4.55962467,556.984375 212.111298,160.496094 377.625671,128.341858 814.720093,699.795776 20.5872364,931.891113 651.056458,493.597565 391.963562,208.582993 800.624207,157.507812 174.801208,784.783264 665.64093,235.435471 167.825516,788.888489 586.938843,713.630127 971.643066,142.570984 935.69751,822.017944 601.154785,70.8630905 707.162354,33.5691872 216.965363,977.468201 792.865662,153.45549 476.740967,811.232788 409.549622,76.6065292 675.864075,545.095581 179.451736,767.930542 997.445984,938.354309 326.697205,941.457031 705.285278,409.494019 31.1701488,296.529236 898.434753,459.841614 431.980164,901.916138 762.614807,362.826202 145.357346,719.339722 117.788467,768.988586 413.331665,439.193085 974.991272,945.393738 804.034241,686.408508 668.232056,582.16803 579.284546,917.201416 181.502258,129.3311 893.44928,735.563782 400.168152,841.022095 884.285645,284.646973 803.795288,169.361496 957.237427,220.44046 240.312576,808.082581 46.4707527,307.5672 127.175194,60.4491463 502.601501,363.996338 856.581482,484.636963 974.890015,59.3143425 784.136169,726.689148 911.953003,963.911621 252.871735,584.206299 560.999573,701.783447 873.297119,997.189331 15.4821024,102.578743 98.9493713,608.557129 921.090515,993.336914 895.130615,860.868286 715.368835,977.280457 906.050537,493.725433 612.577698,54.9118614 735.107361,923.594482 135.760849,886.030457 730.292603,708.181763 396.192566,840.677307 136.263657,787.982239 483.657684,916.614868 708.666443,204.978287 333.45462,851.473328 196.746613,160.743271 925.130371,351.384949 623.868652,922.055969 449.275452,1.66909981 597.035095,368.041229 133.525543,902.35144 875.450867,553.783569 546.48407,442.752777 718.877136,15.8289251 37.8408356,908.22699 979.694031,412.289673 21.8640938,672.562805 25.0544548,286.16507 707.189575,729.136292 417.018982,735.127197 556.235962,260.911682 851.076538,824.737183 820.307617,875.217163 425.938721,796.789612 192.08139,482.186157 736.447937,795.982178 51.4814186,525.995178 77.1588211,296.439789 617.434021,376.24527 44.0248375,43.7471924 980.927124,982.023315 600.091675,634.896729 200.602341,913.422913 755.903137,921.304443 64.8320847,401.411133 856.232666,656.283142 670.954468,119.182137 11.6426353,279.901215 335.533173,598.656921 822.546204,966.21521 938.302185,869.899231 144.236633,896.038818 277.175262,438.063049 799.534363,170.817322 846.551819,479.478333 577.064636,960.226868 598.940552,922.434265 470.352692,757.08197 45.5278931,862.042236 820.020386,547.423523 20.3050728,642.996704 87.3386536,325.941895 444.371826,620.506592 669.65863,592.356323 93.7549057,202.346771 628.326782,664.258057 954.429565,654.544861 609.546814,260.017212 48.9415741,104.862862 258.117126,533.497131 584.181152,105.583076 558.21582,442.161591 695.081909,769.535217 439.482727,934.022888 264.763855,671.236816 847.253174,146.433197 69.6946259,655.562317 555.975281,110.369789 493.076416,385.910126 465.948944,821.823242 366.937866,319.81485 314.893372,390.923401 543.025879,108.41642 657.657288,52.5886536 257.271118,811.187805 969.790955,467.777893 427.239655,688.942139 419.039948,62.262455 115.055298,369.795135 847.546448,411.965698 293.679047,485.852386 918.883301,68.2402039 516.645325,596.546265 541.801819,242.40535 576.079163,675.806152 558.176331,680.101318 290.383148,315.078156 827.584473,519.046509 108.633858,337.907135 23.9761333,285.793091 936.504395,165.782974 897.503601,62.4245987 891.836609,161.824707 171.808105,238.267715 724.911316,812.304443 227.473801,694.894531 190.978394,819.573975 750.417725,650.80896 613.092773,782.708435 774.674988,940.778992 685.450989,739.199829 387.742401,836.031555 318.492065,501.442261 419.151459,834.739075 320.280823,306.651825 982.56488,882.291626 773.60968,823.355408 504.14621,815.402161 998.148132,370.521118 815.172485,259.65036 336.09845,215.68869 165.045166,796.332764 28.5739021,443.808502 516.13092,605.705139 935.562805,931.061157 44.570858,578.321899 224.872894,864.959778 406.31134,307.9086 870.440369,921.665405 103.052452,359.841309 222.38736,714.903137 929.327393,37.7702599 635.948486,381.98233 167.949234,76.8396454 174.296906,724.801514 472.466705,960.663696 616.063843,587.252441 572.09845,33.4599495 743.920044,299.651886 336.871887,790.397766 135.816299,986.406616 834.980713,925.184692 805.71936,979.357483 106.655411,625.05719 353.97757,49.4050026 606.770935,51.4377785 384.637848,893.529968 839.750183,625.647156 382.680603,593.523682 622.499146,670.22168 142.73259,515.272583 204.709,865.314148 330.492279,767.645569 845.751038,94.4788971 683.246826,215.702637 698.397034,259.347382 430.365204,339.463257 305.262665,770.93811 458.046783,865.822205 930.271667,716.036926 1.31574845,18.6145267 928.326538,234.245605 449.122192,95.7743301 524.830994,671.986084 452.211151,348.394287 353.232147,137.553009 705.358337,614.956604 724.132141,855.602295 457.023743,674.095154 658.179321,357.914978 295.874817,439.23349 323.240997,706.657715 479.138245,481.31015 139.178711,438.175354 270.607758,340.61264 896.968933,696.691223 223.823334,262.308838 856.896851,855.434021 662.806824,833.653015 809.582092,122.268387 986.831604,82.8008957 116.00988,227.991867 576.40033,526.166992 454.815033,696.120667 8.03931808,346.996094 365.249268,672.282593 716.544434,257.98288 256.88678,697.818176 507.323395,405.630402 95.5982208,988.988342 767.761841,964.852905 19.3747387,14.0044117 414.988068,652.865723 78.2174911,913.183472 250.144287,167.641769 41.2454414,427.424927 496.457825,551.299805 18.1331577,576.199097 675.765625,969.505005 641.739319,967.848755 610.855225,531.403137 273.040619,80.3017502 204.444885,225.577942 201.747314,298.814178 818.164124,293.984375 287.097961,157.4384 545.904846,134.132736 850.060669,626.4823 394.864471,520.781677 721.178467,653.042908 715.378845,63.0276871 556.105896,699.281799 309.11673,136.280396 825.898499,706.398315 552.385071,483.550873 482.346222,237.735809 181.414703,785.717651 249.057755,201.598373 649.374451,767.350708 355.219849,996.633118 69.2372971,298.092621 498.939209,277.892456 950.786865,604.621277 746.736145,177.521164 939.970337,158.550186 471.785278,385.894073 435.858002,244.067093 24.539669,429.321228 326.584442,110.730141 433.553467,781.893616 834.787231,727.574646 469.416779,517.409302 233.317993,350.61145 415.670319,259.572113 641.217346,183.059357 279.824982,40.9433212 933.489746,463.859161 95.6526108,771.846375 846.84082,822.39325 662.709045,327.979584 93.3473511,677.079834 593.402405,21.0814362 124.407875,163.835571 785.684448,33.4096718 824.328186,547.386475 654.256165,760.540894 879.898804,464.340179 415.850555,348.101379 664.779724,267.981659 916.076355,957.865234 799.669617,307.776123 569.192078,564.472534 47.060688,99.615799 314.21106,952.605652 744.391724,603.417053 574.563416,718.918274 181.250397,329.821045 494.947052,661.015686 27.5805454,993.406616 602.868103,724.896851 309.653778,786.131104 782.39386,863.41864 21.8186111,407.827087 859.666565,53.6309929 71.8538589,494.478363 990.831238,695.615906 357.898071,369.953522 336.402802,148.364624 334.667938,135.817886 3.52101421,195.945663 835.369202,18.4035892 859.752258,234.22261 752.680725,654.518555 688.45105,862.310303 945.33313,781.746094 448.682434,473.236359 680.712036,639.232117 580.367493,519.694763 83.0607147,411.444275 813.30072,996.032837 905.016296,988.899292 849.735046,827.429993 207.566315,794.430908 783.954529,668.540527 137.084503,285.17157 95.7130051,756.621216 714.892456,555.465942 215.555695,509.572845 859.7276,68.2583694 263.159729,398.259369 428.446136,163.458511 243.338943,38.0315552 209.765289,761.789368 627.695679,193.434967 67.5124435,692.059692 56.0243874,898.172668 54.9442482,18.4934196 83.621521,959.75415 889.410278,985.892578 389.355042,590.841675 727.983582,44.9236526 376.461456,778.347778 823.850891,900.287903 940.603149,889.976624 380.433167,753.226624 228.084198,631.214844 734.740295,277.272675 672.693359,351.158325 78.8673325,864.488647 208.045273,757.849121 178.104156,53.9203644 432.057312,534.438354 648.082886,161.966904 596.341492,490.084991 247.298279,353.039764 457.11087,63.4827652 131.178772,844.794128 343.314606,259.624908 902.349304,902.251465 681.908691,261.829041 325.645782,974.348572 348.676697,843.172729 419.900238,781.902649 491.075165,741.36731 495.858551,689.520142 152.543381,327.221863 583.93634,310.287231 866.700439,377.347107 163.338989,768.73468 308.984039,867.196716 708.457947,95.4876633 77.6201172,454.091583 340.037292,899.781738 206.764679,30.5226002 983.640625,571.722107 949.119446,456.214417 323.076233,164.725525 330.045532,112.626045 629.46344,111.67157 941.809753,752.517761 630.328796,928.266663 325.475983,694.522949 591.360107,376.358276 43.5619164,3.65868568 140.991028,838.710022 102.127686,303.321472 438.304718,528.149536 742.232483,208.362762 345.593109,550.82373 336.539124,19.3024616 717.916321,184.441391 10.4251385,175.915405 712.521973,408.537964 464.878662,589.493347 465.283478,364.033875 207.06871,564.345886 874.950317,510.116791 669.229126,807.444092 127.25779,719.804993 955.7005,326.333832 87.6561356,572.675293 757.665466,890.965759 810.05426,955.619568 154.487305,146.103271 576.637756,162.039078 702.343018,340.494202 58.0755539,825.725586 971.329346,616.343811 951.97406,188.832428 110.993141,277.681702 5.52594423,479.884064 9.43626213,269.419342 193.333115,927.509155 989.077942,919.358093 697.518616,143.995865 804.261414,976.428589 368.90329,83.0272751 877.495972,374.796967 941.05365,367.816101 981.29187,591.196716 648.815735,865.036987 110.033562,993.798706 593.344421,960.920227 153.23056,244.358032 270.071655,493.360535 605.178833,647.592163 836.005371,588.287598 783.327515,507.680603 546.305054,540.062134 902.178833,342.446289 236.456711,95.7313995 916.927673,393.76358 169.85289,997.439148 13.1241169,19.7827663 247.514374,474.897217 597.551514,953.763977 541.502563,708.520203 278.956451,208.93895 73.3664856,852.309082 59.5127563,404.681885 756.119019,664.387695 488.754211,704.626892 194.422195,677.02124 46.1457176,216.731415 668.268982,12.3960247 625.870667,950.990295 488.667023,970.064697 679.262146,440.958893 829.852295,953.733093 500.964081,326.517944 249.080032,861.209717 55.5134888,644.547058 585.991455,999.163696 75.925499,712.329468 887.135498,918.427124 557.594849,716.390076 341.6297,589.139893 141.002182,338.506439 53.8081017,976.059204 856.815491,492.761017 676.039307,330.001404 533.139954,860.574768 859.565002,109.531822 660.764282,622.173462 132.067581,205.005737 748.887451,550.421387 101.413879,263.784363 829.835815,451.294495 893.267822,906.500061 436.075073,474.186035 563.891235,361.477295 77.1377869,434.67453 340.113098,103.306335 199.403976,63.9548874 773.238342,701.89209 536.078064,829.769836 281.310425,62.2605858 649.856018,920.696533 872.606384,445.866425 407.214874,204.639862 341.58075,842.799744 941.309814,249.237411 564.738403,248.637848 97.1432648,759.674377 100.397476,612.290588 790.566528,688.445801 544.849976,640.298828 912.359009,224.857071 513.567627,715.765625 373.33905,497.06311 142.619858,52.315464 2.68571901,228.491669 600.659302,789.476929 519.130981,954.026611 653.933594,21.02244 596.634766,816.833374 88.3328247,374.864441 421.858398,334.02475 397.011292,814.894104 553.582153,243.993286 557.306213,567.61377 38.8785973,51.6201553 793.390381,634.087891 978.152954,44.3627167 837.896057,27.4540539 512.668884,166.387192 916.113342,601.074158 403.382355,931.166138 825.734192,889.517456 107.911057,887.320862 103.944115,806.079468 524.929993,348.865692 381.002472,624.798523 228.4142,349.566956 379.170959,683.486206 74.6354141,900.74823 352.478729,654.651489 368.162537,600.450195 9.06600189,561.818726 573.467468,67.118782 418.207001,436.043518 48.3729134,497.5914 208.498291,490.499847 917.306152,800.06427 247.032578,87.4246216 682.652954,190.726013 662.0271,561.354736 119.048615,199.443375 342.659637,223.617737 529.071045,947.887573 459.635803,291.951141 697.2099,572.788635 777.853516,302.902527 483.892334,667.986755 481.56546,4.06507587 8.13464546,845.594604 238.718796,21.8470936 164.154053,87.1941833 312.539551,51.0277367 876.201843,567.418945 390.420105,458.102386 834.692932,280.976471 833.464966,661.796204 940.223389,211.479965 466.784821,152.040375 939.304688,788.304016 729.989868,771.577942 729.757629,315.616333 140.941162,859.30481 30.790554,717.465698 886.491333,598.670837 163.105927,154.446609 697.728638,693.120422 320.682404,590.725586 825.163574,759.230103 600.578735,486.163391 277.292847,810.932129 68.6622009,807.72821 873.245239,124.480522 889.62384,843.202576 472.992828,94.0339355 961.395569,324.203308 210.539764,424.922607 978.942444,261.099976 26.9440231,772.496704 269.760071,111.099556 534.579285,255.469147 321.790222,193.483658 112.863731,986.676575 983.894714,846.355042 152.003555,675.752319 596.70166,121.629013 47.0356522,615.923889 639.055054,972.026062 303.27887,270.79068 555.492798,403.342285 70.5519485,574.915466 34.896965,211.473816 661.174866,461.450195 387.114136,840.632446 413.403717,375.196991 312.302521,83.6568832 873.727539,949.999512 846.94458,116.417496 631.578186,110.482925 682.517517,60.7975922 743.621521,743.289062 8.05125141,289.105957 458.178558,909.758606 567.805176,292.650421 161.272018,749.597168 429.591003,403.748383 198.537323,133.048874 932.692627,305.27597 904.716125,30.8162498 580.601562,505.507294 249.654449,331.435486 451.653534,468.450165 282.958954,457.921387 545.316467,50.6130829 259.610565,104.657028 744.732239,165.0578 678.466431,610.486694 459.640076,397.917908 20.4037418,858.826355 995.475037,478.838989 151.245956,864.516724 438.524353,364.516022 563.209229,999.932129 506.936279,466.586151 366.685486,803.049438 117.586609,313.042725 383.109192,43.1131668 403.61557,950.103394 425.186188,579.574585 789.986816,65.8037796 918.867737,240.03064 344.649963,694.319275 411.376373,859.408752 704.322205,696.414124 750.305237,894.116516 319.414795,327.630493 96.4523697,418.073547 498.27774,619.46759 531.955627,50.2169647 989.916321,653.696838 815.180603,635.646851 433.070251,22.7295113 969.15625,562.123413 499.818573,885.22052 717.400757,717.88446 748.113464,776.486145 757.948547,1.19894826 703.013977,775.039124 809.184082,791.951599 696.981934,181.030365 826.554199,605.565002 768.994812,788.825806 360.179535,529.336487 51.0299263,950.577087 702.888794,973.954895 379.63797,21.6069794 529.288086,73.3440094 773.193298,566.430908 736.193359,820.014465 139.889145,972.825806 683.65802,867.562073 279.523407,524.459106 127.273506,277.723358 573.297913,75.0548477 812.733521,161.346588 6.23875856,163.321854 621.871155,812.214539 370.768799,627.312622 145.695694,136.356552 787.073608,112.67804 720.936401,956.11145 609.667053,995.986023 349.218567,721.07074 619.922729,34.4113388 732.076782,212.923264 46.7583046,316.197205 235.977905,361.298157 348.354187,321.722656 930.534485,628.905884 359.117706,812.263916 317.36731,497.635406 698.055725,761.619934 886.958862,493.292511 449.171814,325.250305 828.325745,128.479645 21.4147663,560.543884 150.016129,303.142181 524.527039,562.145081 352.09787,754.355225 384.865753,538.721802 443.012817,849.261841 134.088882,649.463806 166.03389,946.400024 30.6922932,11.7005119 292.929535,727.302673 490.624939,180.182693 127.692108,926.755615 100.387306,810.715149 83.2966537,494.063049 117.109322,148.360397 743.407043,330.357635 406.375641,962.181702 469.634247,789.173767 871.693237,210.19902 113.097137,74.1878738 391.723236,608.218628 399.668884,20.3860092 29.5525322,781.088501 385.250092,38.070816 439.909271,325.50177 715.397461,349.895386 916.300049,760.444946 83.1819611,615.622986 66.7534866,943.71875 109.450157,196.057587 409.542419,528.319031 71.6210022,783.23291 972.275574,290.928192 519.997864,702.082336 818.977051,293.35318 776.335876,890.106079 414.644012,966.243591 660.031555,667.227051 556.437012,520.106873 693.678345,205.280243 167.143509,784.686584 192.817596,527.587585 824.312866,808.047546 696.927307,245.347 665.377502,859.005615 944.297241,564.040588 3.9247365,175.997574 746.945679,37.8202019 672.013977,575.688599 946.480347,813.512451 720.842407,749.997803 416.741821,754.012451 291.49234,842.742432 792.289185,932.61731 729.814331,633.743469 116.775932,255.925995 51.127491,634.750366 948.888794,721.444641 954.369019,470.902191 912.588501,159.467148 416.273224,16.8902245 944.323608,258.814789 685.096802,577.047546 548.226624,405.859955 900.129211,633.40741 477.030426,781.629822 132.948578,420.044312 397.800323,291.987946 382.789337,184.348724 237.765854,62.7896118 58.2497673,619.776794 89.9554291,470.735168 376.309937,253.291611 765.153137,130.844742 121.709297,315.002075 818.36261,76.8455353 473.418976,271.438141 800.890015,725.722351 2.99277997,796.075623 765.110779,397.167419 699.658447,330.612 82.8642349,710.150696 303.961304,422.686951 719.878052,179.111023 896.841187,398.711578 181.68483,229.280899 207.783035,322.773438 37.5273247,839.104736 820.971436,726.578064 62.3787842,499.459686 801.681152,744.26178 424.52182,513.603516 408.905029,201.565948 422.123383,454.446594 769.265625,731.404968 125.840714,772.752014 597.871704,205.617599 353.530182,858.940186 643.426025,329.522766 565.553284,114.045586 350.314972,515.093079 317.287964,76.2213287 334.661163,684.063293 116.406937,370.830475 739.783325,536.976013 200.267258,42.7322731 911.049072,164.838638 845.832031,314.238525 478.690857,126.331345 231.83403,813.470459 355.685669,243.169128 871.154541,944.330383 292.7052,513.73468 644.187012,743.223816 892.245422,92.7146835 518.137634,811.90863 676.274048,878.013977 122.589058,23.7383556 623.054138,164.076096 170.706375,812.42334 612.008911,541.458008 679.199341,338.26947 120.962624,982.4953 493.910706,925.807983 524.359436,76.0658188 645.612,158.296799 928.918396,808.234741 161.287628,662.308655 636.467712,11.5678501 810.684204,107.204041 992.054688,957.629944 182.32193,293.679657 767.435181,766.474243 532.78833,646.956909 841.733826,608.411316 177.082901,364.462921 741.295837,699.152832 180.485077,318.318451 335.249939,803.310608 113.331825,326.81723 900.004761,213.752594 727.003784,115.28582 88.0368271,621.198181 192.822845,206.056717 633.144165,41.2462387 603.785095,511.625336 889.537598,837.138611 170.630081,975.163269 452.158356,557.026306 143.125122)','MULTIPOINT(674.825989 963.445862,614.761597 717.4646,209.186478 535.759705,227.65387 637.33252,704.243835 197.454422,403.798584 775.03717,731.197449 74.1394958,463.80188 273.423157,240.715775 541.873657,284.453796 721.884521,532.049561 395.370819,744.175598 35.6223984,530.580688 763.476135,853.505005 686.114807,352.267456 187.431824,317.727966 306.696472,403.751709 151.45639,661.561218 267.524475,953.263733 947.807068,130.549881 791.499695,514.674255 722.782715,346.243683 169.36235,491.511444 789.260132,351.125824 840.196777,461.4216 790.069336,516.078308 876.923035,90.1998672 277.906555,459.651398 285.225616,779.6026 414.076172,43.5562668 170.478531,267.10791 983.86322,955.752502 774.51886,586.768188 657.50238,552.98114 325.024384,306.45578 914.897888,295.392914 905.345398,495.735626 439.882111,322.810455 782.735718,815.273071 947.454956,303.16571 461.898621,983.117554 949.420593,527.028442 431.085449,253.455902 640.173706,622.423096 963.710876,281.830872 799.863525,427.560699 733.552856,59.201683 336.439362,305.18338 741.860291,95.7257538 448.127563,953.640625 680.89917,569.607666 870.196411,594.068909 588.742737,599.540039 635.115173,576.737183 834.85968,216.017136 585.193115,922.273376 56.8742714,591.25885 174.886047,973.897644 943.918945,586.488647 946.193359,741.049622 798.472412,893.801575 967.191711,936.000793 356.820862,94.7606125 164.565628,767.270691 434.620148,898.7276 584.133606,57.1579018 352.703064,789.174072 667.809387,682.285156 921.071045,864.847168 582.749573,3.67115808 41.9321785,819.507141 606.180237,981.599548 789.608215,513.04834 336.352875,658.227722 438.902649,394.043152 156.989227,256.635101 54.4659424,798.148376 850.155701,896.17334 65.4151306,458.846985 57.6473503,410.176819 617.28418,173.794983 680.626953,658.409424 968.788513,633.227051 496.061188,437.639862 320.25061,318.566956 856.230835,770.954834 573.217102,945.216736 159.918152,142.391235 886.335999,279.943237 892.021667,369.121674 508.053772,262.277374 620.283813,355.285767 263.423492,278.260803 688.453674,64.3010101 566.775452,823.902771 321.224457,623.98877 650.7323,578.491882 979.892334,192.120438 650.33905,336.644958 615.005188,228.488495 833.535217,754.521118 98.4568558,571.420959 801.022827,580.972351 802.354919,652.350708 649.053833,251.767227 119.013618,542.654114 29.6052723,553.163696 929.06189,56.3772125 78.5897293,282.691345 48.4905548,420.58844 66.899704,764.914551 607.421265,739.52417 972.925537,14.9888363 848.072815,486.156494 654.127625,293.931976 999.119934,455.571838 815.527161,517.631836 848.721069,831.005676 672.896301,664.392883 849.762329,536.458069 686.828064,738.284119 129.556198,640.324768 883.499512,55.7763748 433.324707,129.47168 308.319489,510.854706 681.765686,209.40683 229.871689,41.225132 143.222946,219.208679 141.250854,401.797394 739.387329,301.638092 335.620361,131.867722 217.890137,58.120327 158.629745,634.455078 313.742737,498.23819 821.592834,311.514252 549.727112,12.4100313 611.056641,890.837891 363.85257,406.551697 350.195496,246.0401 377.10968,670.475952 462.626465,5.31253529 721.33783,926.540527 523.09906,612.7547 824.841064,307.051849 801.049988,288.154755 935.366028,914.748962 197.798019,340.935272 129.721268,918.900024 534.902161,925.726929 161.95253,238.414856 755.128601,378.734528 980.893005,155.577484 696.084961,786.414795 464.490295,417.949829 73.0345535,876.263 868.599792,395.378998 365.52298,488.685852 933.910645,253.179062 401.445618,420.141846 710.17865,271.499054 233.610336,332.789551 606.333557,299.85907 73.8156586,803.228027 237.386887,377.414703 341.031464,949.34082 738.950928,147.017578 719.975281,15.9668436 821.840149,61.1334457 265.328461,386.23291 719.99469,585.891541 775.161743,837.528992 133.896378,964.659485 655.740173,944.988892 38.830986,130.088287 62.1907005,177.06752 656.157959,607.686401 327.645142,968.549316 992.121338,674.333984 720.371704,794.283386 767.958313,264.228729 271.8862,891.923523 296.807739,320.683868 92.2058182,91.6367416 374.238525,998.754456 798.804565,289.714874 502.882446,518.594604 123.747986,505.773254 756.780151,920.203064 244.169312,166.926712 311.04425,474.144409 742.500183,716.772522 144.4216,840.376648 140.039948,795.119629 764.739014,469.150757 365.40744,291.043762 822.915527,180.126083 732.867554,773.927734 99.6206741,886.787964 386.148895,646.910767 497.162201,331.047485 29.7259369,463.448944 372.320679,903.734436 395.009644,34.1152725 883.534424,30.3193779 35.1132088,264.450165 978.798096,238.164154 785.842102,652.531189 546.669006,797.6026 395.393158,495.81604 856.485046,980.192627 980.508301,669.8927 171.888489,935.570129 523.02124,578.909912 533.50061,340.441223 240.861343,765.292725 343.201385,174.604691 510.557343,367.49411 774.247559,327.325775 875.271606,291.773621 569.654602,123.197968 490.188171,383.610474 133.638748,791.715027 936.530396,365.592224 364.640472,488.796265 572.627686,341.178619 322.728271,262.842285 337.127686,131.466675 526.228638,359.678772 476.626862,171.410172 571.901917,278.470337 963.47699,502.474762 34.7583694,88.3382874 434.689056,155.134323 511.55896,176.371002 133.069855,412.636688 748.018311,726.893921 843.466064,104.507057 145.992432,856.33905 603.331055,601.848694 196.509552,963.930237 445.701416,570.850098 23.3392563,29.2461567 101.504501,417.690979 380.358795,900.679993 16.7276936,115.603539 209.965805,893.682434 499.24057,775.079407 682.664795,266.498108 683.628479,873.938049 404.71759,552.520142 580.039307,152.313507 519.840637,71.682457 34.1963806,268.871155 840.374878,450.373291 49.813282,192.249344 466.196503,787.949402 213.193146,208.967773 187.503021,608.369568 532.895813,677.239075 735.601868,737.562805 797.817383,760.639282 736.294189,813.475037 900.785095,353.679993 393.006378,5.52405214 381.362793,846.727844 829.889587,343.739227 995.083679,517.239136 717.488159,272.372131 672.198181,226.578308 898.021851,579.301697 741.880371,658.711975 176.8638,996.519592 594.292297,108.049629 154.393295,237.714828 551.495361,539.364746 309.936493,312.388397 895.647339,205.337402 957.322632,131.600082 672.961426,344.235565 142.792175,439.635651 440.294434,645.815613 53.463768,864.733276 898.073242,375.158264 958.976196,772.917297 617.761841,730.132874 232.48381,642.320801 328.662872,742.051697 204.605652,679.871277 522.468872,282.10556 839.938721,220.322693 214.159042,739.806396 45.8798027,498.475708 214.869858,995.659119 726.209961,736.639771 562.278992,817.827332 687.854919,809.81134 866.902588,352.609558 531.559875,738.619141 949.065796,992.062256 640.72406,349.418762 963.650024,976.917114 329.47757,770.553284 960.708069,102.184662 912.093445,556.265076 307.851379,820.453552 739.661438,747.428772 887.808655,881.211914 15.4455156,837.42749 72.9824219,693.120544 400.91275,288.503906 660.765015,472.333313 887.119385,757.559692 822.032166,17.4477139 622.880371,911.09552 781.798279,720.402466 578.891357,245.353287 515.538452,526.748413 791.037903,578.093079 948.14978,721.620239 95.6884918,178.356583 407.090332,938.471802 503.318634,408.895447 658.134888,154.284973 42.8775978,533.710327 148.78714,643.066528 90.8622742,420.006439 909.802673,469.427704 85.1249847,405.634766 690.463257,498.263367 362.011719,976.105042 924.944214,275.155548 261.370819,263.620941 63.9857597,89.0368271 563.762146,42.8160095 950.291321,787.002136 526.284058,639.488098 175.233994,961.266663 397.827484,675.29126 742.970764,102.59977 630.607971,150.254684 229.330811,588.473022 803.412476,40.330265 356.25531,853.042114 451.440125,227.598251 669.162781,108.438606 240.030563,209.735306 729.382935,323.063721 907.260864,868.750977 30.7722397,418.586884 592.690796,491.638245 193.785767,49.211113 629.888245,920.68396 224.89444,297.988007 199.704041,901.237488 967.456238,771.785522 24.637722,200.288895 453.040192,970.695923 859.97644,810.938599 752.935791,183.175095 430.354156,959.880371 623.371582,735.950867 161.02037,974.854858 453.477875,333.124969 804.393005,626.355408 297.197784,806.835693 896.116699,917.657715 424.346619,947.290222 45.7095375,244.877991 279.730713,698.270813 318.996185,618.394653 569.865662,814.528503 488.291321,73.3724442 989.517273,43.3347054 182.519226,166.241928 365.229797,277.68631 673.984314,63.7424774 215.428146,382.66803 997.853638,420.729675 923.108154,893.157104 614.237183,534.670715 282.678467,903.070801 291.366638,91.3611069 581.673218,21.2053375 101.25666,73.6488037 643.026794,356.035004 209.44162,162.208633 876.71875,384.591705 140.042465,983.343201 348.209747,148.127747 325.825958,448.0784 59.431221,222.463074 125.683998,475.292664 558.982483,271.397583 431.345459,607.617065 426.951477,958.009949 619.26062,79.7769318 588.731689,858.920959 258.347229,192.830307 402.02359,352.201263 472.714539,630.491882 666.891296,639.623169 359.331116,916.288269 641.545959,907.800537 906.861267,891.643738 748.920898,788.548767 368.711792,35.8173523 42.0988541,24.0949421 130.389267,678.458008 909.001526,972.045593 980.634094,503.082428 745.263062,725.749817 109.563515,65.8344574 780.189941,34.1620789 691.398865,948.631958 433.619171,95.2667007 541.607971,71.4047241 844.357178,524.006775 421.30722,714.035583 66.4304276,63.694622 457.281799,578.240723 265.874359,342.52121 16.0928688,535.643311 834.492249,562.943726 732.290222,320.564911 131.718933,209.990341 430.393219,479.535004 494.147461,108.890778 364.365448,548.428101 113.232635,745.632202 514.750366,479.823578 185.814346,329.968445 222.514847,677.312866 411.407257,4.54126835 275.079559,166.898788 804.195984,541.294556 164.139404,322.10376 657.798401,533.419006 534.58551,406.330048 337.895813,740.245239 542.96405,894.92981 960.43158,274.526733 45.2325211,242.229385 171.068665,999.49646 945.668091,430.858307 277.576324,813.797607 402.617554,336.26001 378.714661,780.667542 281.340637,718.613831 577.704346,55.5011635 77.7864914,973.37085 477.863678,433.182404 457.676605,868.956787 106.244217,36.2716141 388.052063,593.562866 74.3898163,954.629883 823.856079,245.613571 307.795013,227.986618 277.390808,337.727997 580.095642,797.726929 250.16713,537.969727 478.91275,869.263855 99.7381592,454.133698 524.67749,158.878189 415.415741,841.866882 777.552795,932.37439 601.483948,489.602905 483.747498,314.845978 134.467224,635.768005 274.10379,808.841492 671.261047,42.617672 970.376404,315.198486 690.746582,878.24054 104.02002,313.890381 876.578125,659.571167 541.128113,887.154846 526.238159,243.856277 412.434662,683.273865 70.886734,992.432129 305.878357,148.282333 609.427429,132.405304 557.368469,866.647644 411.992188,79.2545547 140.309692,367.985504 453.357666,332.193115 403.041382,37.9914932 724.579895,167.955399 268.919617,223.040222 567.588379,362.535889 453.123108,258.235657 582.572021,606.650635 37.0998459,43.9250755 829.57074,956.53302 954.039551,993.986816 474.662079,281.746643 474.876862,314.660187 541.948364,213.398605 984.684814,448.562195 679.080078,54.9525108 444.648041,117.232086 114.374878,454.935913 369.304047,781.510681 526.367798,645.040894 407.70816,229.829346 297.853943,293.982635 86.1327972,380.77832 821.922974,804.53302 217.9048,958.58197 601.774841,42.4150467 637.550781,577.080444 696.590332,346.615723 253.865494,443.749695 59.072937,27.6427917 712.472839,261.07132 685.718323,227.4776 988.235107,612.477356 433.299774,337.742249 901.125916,709.316162 735.487122,108.444046 989.198792,303.887421 549.276733,601.751221 368.904358,696.911194 97.8751144,555.728638 920.542358,357.138428 842.033813,981.192078 222.045807,536.969421 928.336426,743.336365 446.035278,86.7958069 984.423828,162.104965 64.3010483,556.979492 320.881744,353.552094 806.281067,147.763031 314.355804,696.491028 399.690765,515.699219 497.101196,605.032349 164.249786,906.847778 413.625427,185.803894 380.945068,433.496368 977.357666,419.652435 610.727966,390.711029 81.6283646,856.439941 930.13208,72.6835175 536.567566,665.927307 743.241455,328.301819 794.539551,860.000244 781.614136,32.9937706 116.130745,17.8481693 198.841095,831.43042 833.211548,869.598145 43.3682137,897.033386 367.675995,914.813232 32.302578,525.809021 336.895813,140.825989 801.402771,631.75592 879.651855,591.772644 903.965149,291.795776 602.904907,453.057953 169.759796,190.197723 202.760757,551.677795 942.903076,53.2440872 906.405762,92.928299 313.156952,994.168152 624.952881,731.58844 811.538574,614.97821 531.246643,185.697128 133.687988,196.112595 981.854553,65.7350769 920.920166,545.614075 784.058777,80.3867798 622.119568,772.077148 59.089592,986.193726 91.8249359,472.008087 634.013916,564.372009 789.911255,114.757919 79.997879,661.465088 52.8200989,219.762192 625.641174,313.346466 755.320984,479.970917 196.594818,292.860016 514.524719,582.828064 733.780518,153.312653 861.267334,69.037468 321.621368,650.504761 626.241089,622.641663 279.250214,302.482117 927.403137,585.337585 483.888855,184.668976 308.928894,536.861633 448.491394,309.493866 220.257401,377.49472 448.541595,353.77478 499.34137,922.085938 1.60034692,789.407471 853.941345,119.955757 435.865387,672.512756 847.046448,611.948059 494.712708,420.990295 939.656189,806.317505 689.924927,804.231262 959.65741,938.246948 708.039246,809.361145 259.91861,483.104797 531.98175,654.789978 278.881592,914.910095 598.50769,524.275879 20.6208248,826.36853 612.734253,23.1070805 928.067261,254.211258 120.404839,625.93811 666.821167,803.767212 918.139526,989.263184 89.742836,716.031372 979.774109,687.098572 791.815491,157.607269 776.676453,914.45343 219.775391,986.737915 46.1627693,432.289307 307.852112,282.81723 664.440063,916.847839 772.14917,66.3262558 730.358887,553.951172 691.8349,43.2390137 23.5134678,930.202942 297.020477,238.586304 605.66449,862.087646 784.010437,447.96051 942.544556,334.375061 221.541763,663.681519 389.338898,9.26742649 240.692322,768.244629 402.79303,435.860291 408.467499,786.524414 880.861511,560.650635 938.249756,149.80098 521.854248,543.612793 208.629364,464.742523 687.52356,2.29929185 795.339539,900.601257 865.586731,399.273651 247.968704,358.819946 340.400482,279.921448 230.617737,404.86676 382.05835,491.037292 323.777832,699.801758 731.495422,198.178268 885.108582,616.508728 822.702393,391.763092 317.573944,662.826294 403.705536,242.540558 814.183228,934.728333 106.77137,171.028946 45.4098778,831.926758 861.360413,258.926758 697.602905,268.282654 609.058899,87.1671066 983.332703,444.174072 680.432068,786.989014 423.680573,334.483459 930.00061,841.311096 192.902328,455.138672 53.8260803,250.17041 614.925781,31.2657948 698.477966,421.127136 807.56311,995.077698 730.544983,642.752747 103.14502,335.873077 982.046936,925.568665 878.960266,306.618378 997.270142,876.003113 516.208984,71.1425781 238.054413,324.154999 111.863167,937.351318 689.238586,523.642578 826.373413,571.121216 301.147064,980.266785 210.906448,371.679077 935.095032,990.878601 936.202881,178.421249 96.5222092,458.722198 897.208557,574.914124 731.973694,130.811523 35.8254471,546.268555 667.716858,930.744507 410.754333,518.598145 909.89624,101.541206 76.2013702,225.56813 172.628036,728.773743 180.020432,814.840332 148.058151,48.6337395 164.579346,297.286926 167.447449,832.681335 755.329102,231.349091 353.792938,390.86676 74.8107071,122.344978 132.465439,402.700287 496.092041,462.378448 737.441589,482.452423 318.173676,338.62381 641.74408,791.023315 679.068665,779.816772 816.688538,135.062836 943.021973,166.309067 106.006966,575.903564 885.740173,671.829956 370.735718,253.266296 337.603607,67.0340424 906.077881,305.418762 684.470276,614.215088 226.238113,223.972183 21.7179489,817.188843 125.699097,364.659058 886.490356,497.733643 776.902771,971.703491 644.395264,734.602783 647.746521,231.139465 241.453308,835.155212 247.904358,938.238342 858.135864,959.944641 247.956924,639.018372 173.018829,751.454163 95.5808716,874.13147 414.555725,487.76004 443.307556,758.362549 677.180542,375.135468 234.683243,33.8261185 987.914368,656.763855 368.710663,350.999603 304.955414,851.018066 246.636734,337.469177 820.288635,707.822815 214.560547,286.553009 189.120972,890.142578 734.870422,648.841125 124.181366,251.025513 715.815491,485.291168 683.502686,930.879517 959.24823,732.203674 325.678192,108.182068 741.410767,836.523315 473.348938,460.562378 749.626892,577.764221 942.68512,428.394958 884.138672,472.137268 205.645416,262.230499 142.628265,884.269714 250.072433,578.677551 570.246216,715.548889 177.250687,870.704468 745.081116,916.105835 775.234802,508.683563 60.4856033,436.987488 309.013397,935.496826 344.401672,76.8238297 141.648376,804.970764 750.604248,434.691437 289.959137,660.942871 943.278748,206.093018 176.701401,800.921509 778.215393,28.8739929 75.2160721,856.781128 263.643494,235.537842 786.606567,39.8395309 382.889832,535.223328 864.952087,120.766449 553.456238,740.331238 596.530823,342.252625 158.432251,679.331116 783.694641,301.228363 591.673828,667.847839 64.631691,239.273224 851.740967,841.755859 953.335632,119.918739 417.878632,851.426025 92.1426697,701.761719 52.0156479,68.9908142 876.830505,699.595947 19.8888836,463.62558 211.659119,978.048096 988.308655,842.353271 437.386383,991.28717 23.8326626,611.316589 291.727539,842.193176 974.475037,234.775711 572.212402,851.71344 879.18335,477.987152 510.612762,155.104782 109.240021,350.561066 534.950928,683.273499 934.317322,592.555542 656.814392,192.70816 986.679077,270.86908 487.596375,456.010742 743.889221,634.423096 825.621277,532.53833 51.5137863,338.895386 105.289818,44.0450287 496.514618,28.9718151 387.555908,211.363724 917.919983,771.365173 498.193329,720.882629 260.62088,127.119034 913.282227,600.341248 870.483765,852.921997 512.914856,432.327209 81.2593765,956.073975 209.976944,714.873474 474.524658,241.699036 707.488464,827.34137 656.97229,992.24231 932.822937,40.2160606 810.536621,205.610489 759.896545,793.252319 249.45639,710.19165 679.444214,151.432434 782.323303,482.617493 856.834229,170.183304 642.665894,448.093964 125.506805,350.790833 532.662292,230.16922 765.016785,960.226624 942.716736,425.710236 558.350342,817.953247 881.724365,582.584412 712.566223,645.767578 867.495667,307.36734 195.351105,822.434875 364.97403,252.059235 184.005997,239.82193 223.401566,63.832592 286.456573,765.970886 517.930115,489.114899 973.366516,738.468018 730.246155,803.317383 545.158997,91.5771255 497.795715,544.344604 910.942505,251.331345 133.772568,824.095337 570.509277,723.724609 344.955231,321.60141 27.0434685,767.91626 67.7038956,126.424171 128.023438,974.979858 641.357971,488.965729 469.691376,603.860046 987.053467,724.383911 629.635925,951.524353 313.581207,507.733795 430.809357,491.307312 189.900787,29.1329899 359.835205,164.813171 648.415161,346.919189 796.036133,216.644257 739.903931,534.423096 688.633606,352.448029 577.196594,552.620911 372.520599,175.281662 800.851501,944.472168 237.919571,579.614624 3.20512652,540.694641 577.895508,8.70910072 140.100494,246.671249 910.590881,518.700134 731.630554,744.19873 441.194519,374.238831 564.260132,136.785141 512.738159,926.29718 873.132263,610.653564 151.7285,245.985992 42.1036797,727.219421 67.3293228,665.591187 577.591187,391.452301 997.436096,909.368774 469.978912,542.469299 551.62207,28.296011 646.351746,554.338318 173.909683,35.6159782 600.671204,238.683243 891.916565,535.068115 885.16687,241.393509 88.1974258,960.214172 709.402527,161.487778 294.752167,17.7104855 452.078339,93.9730759 714.503296,335.362305 61.7494736,58.1865273 266.984314,446.041656 834.037903,581.617737 321.547394,757.196838 449.478516,987.513733 544.069824,376.91272 236.929367,518.659363 163.482162,385.848541 513.542664,533.361389 56.7894211,629.415771 889.582092,147.613052 400.857086,100.255585 760.600647,767.876831 672.48761,91.5479202 347.942871,152.977448 349.021515,634.723755 297.920105,505.835388 707.874329,866.727356 898.93396,361.815277 995.998535,804.549561 976.336914,74.0141678 716.675903,909.152771 435.0867,150.885956 589.051636,87.8357391 700.176575,193.942047 456.825348,238.650757 85.2795868,638.689941 496.819061,238.084 909.718933,509.873962 745.822937,815.761536 711.092834,304.957306 938.77594,495.067017 211.60788,314.37265 311.98349,478.312286 441.235046,429.879364 744.284424,279.108765 696.690247,176.691208 335.112488,329.855835 262.313446,760.104431 791.352539,960.654724 886.407898,424.191467 827.041382,39.3942833 760.065002,457.678619 253.28511,433.230103 508.273926,856.738464 950.220337,183.847504 143.002106,63.0377617 109.396172,343.57663 300.026428,207.055832 29.2546158,459.38559 141.750443,112.797668 550.169067,306.358368 13.0796919,803.061768 71.9149323,264.95517 461.97113,755.746643 997.388,303.939819 149.359299,708.622742 765.510864,56.0579109 376.513153,293.531799 237.602463,334.890259 262.918793,383.835083 894.843872,435.857483 514.972839,833.320496 36.4758339,974.257019 843.963135,333.98233 195.733887,262.31192 47.3420486,79.092308 70.367012,488.895294 634.543518,323.809479 566.807434,4.86551523 297.38678,695.417236 749.516296,993.03717 291.906158,736.535156 59.0512428,177.947052 514.353638,480.951538 868.177246,641.53894 549.864319,734.394958 956.255981,159.564072 409.877808,916.645569 905.542542,86.2532806 657.875366,633.026611 906.824951,1.66120803 242.444778,201.624634 349.546906,441.533752 974.432068,641.193054 155.402939,648.921631 449.614563,50.0574532 829.147339,474.979187 113.766441,933.465759 464.035675,76.683815 48.6680183,736.349426 29.1448803,815.059448 113.497795,255.296967 14.220912,344.761322 464.405182,882.843628 787.542175,137.810745 420.17981,549.390686 851.617065,207.885513 954.076355,410.631683 198.964798,682.340271 277.583527,813.394836 261.678833,95.2234268 951.721375,82.1914749 593.2948,330.60376 766.039246,667.392395 518.166626,759.992554 274.441528,903.599304 599.981323,62.9045563 663.211426,410.646637 946.891479,465.430786 183.036011,871.10022 965.95813,874.571777 425.934021,302.982666 294.002319,807.661255 455.254578,638.553223 821.786804,526.485596 632.245544,867.46228 226.381882,529.992859 329.20108,509.751038 873.980469,395.891205 667.766602,439.77887 182.802597,257.640564 986.762939,934.015564 649.989014,858.548828 155.202347,376.680725 787.406982,874.253357 10.7345715,590.802673 17.4370289,90.6595078 835.859497,148.588348 150.046616,443.064514 370.489838,203.957703 550.908875,869.550171 267.881287,320.244476 556.263733,370.298279 367.873749,854.724915 862.236389,626.344482 670.842896,635.301636 397.17746,161.077621 741.714478,572.741516 236.340515,534.244507 752.755493,426.273712 635.679932,71.6973724 723.082397,59.9909096 157.54184,456.747711 757.405579,317.550171 349.829468,488.497528 264.77121,228.62616 775.833069,16.6707687 760.744873,152.47583 861.799927,805.751709 201.374542,642.629211 625.20166,171.985962 449.345154,642.847595 857.601624,28.0665073 786.745789,472.480927 53.1141472,685.842163 765.271362,995.074402 738.897766,636.663879 434.336212,367.283539 662.003235,519.065735 735.302917,583.419189 921.717224,392.034363 610.213684,943.60199 428.908325,933.663513 69.8643646,247.909821 978.794678,391.534332 623.088318,860.544128 175.559052,363.295441 306.109894,412.123566 583.486145,869.348145 411.073883,711.255737 395.504547,443.18866 56.0505524,555.049805 350.018463,892.418701 762.640564,995.899841 376.59082,171.037979 491.806671,641.794312 495.784668,188.603653 507.284515,974.765808 606.994202,594.011658 518.817871,543.154602 33.0232544,345.855591 816.135254,340.214111 248.308151,576.16333 861.129456,765.966553 87.7781982,223.133957 687.403381,932.625061 162.142212,848.363281 706.596069,665.963196 245.286026,580.292664 974.374939,488.149231 609.47467,200.007004 989.577393,746.313721 159.850082,308.176392 763.277466,953.243713 195.357147,277.353424 149.440491,397.613098 444.81543,497.701935 913.762634,962.456665 199.621017,169.683594 329.092987,37.195282 223.148804,533.968628 859.008545,582.547546 863.205505,880.764404 958.945923,851.064148 37.5441284,112.37989 138.36705,485.508575 948.699097,736.239685 159.90004,294.513672 871.33783,40.8767586 203.451401,59.7074585 573.356567,999.857666 59.3479271,932.679993 144.231033,46.479805 76.2487106,863.876465 680.276245,959.360229 332.145203,832.592163 18.022316,854.255981 846.971069,963.821472 871.758606,882.807861 687.297546,159.018051 653.874695,197.214722 597.45105,442.159485 777.138794,684.165283 859.689636,299.018982 859.934448,266.683929 313.002808,335.375488 768.230347,454.62323 644.914185,354.097656 473.230743,561.909302 999.174072,31.6307125 4.91793633,942.051819 474.68869,17.3561192 62.2873459,78.4913406 625.116272,89.7862015 370.498932,418.749603 935.935181,545.851746 617.838928,890.158081 320.603058,529.605835 526.059082,465.544922 919.482727,944.280457 704.752197,323.142975 590.789001,875.272888 637.038208,97.9896469 880.0896,493.123627 557.994446,910.273071 49.6655807,963.741516 361.13504,208.728348 118.802383,198.116058 270.279144,209.992676 446.940735,539.718018 732.847961,825.893005 290.222778,467.443329 1.3484304,368.973022 909.632751,529.742798 954.151428,664.021729 329.36441,663.824158 43.4650078,113.252487 212.470749,233.059341 935.570557,298.394867 26.1962357,94.9119492 133.289169,16.8765888 418.96875,309.201996 292.107941,270.86438 74.6014709,313.344238 79.3732224,407.674469 164.574188,818.104797 309.069,989.193909 88.1734848,289.832977 186.943115,977.820984 342.162811,745.498657 986.664795,399.250702 919.529663,425.726715 90.6324768,823.447388 871.491821,641.483521 371.783051,675.167542 418.587158,582.260498 83.5390854,647.324829 15.4539251,618.871765 86.3175278,254.042709 166.612549,112.760208 401.280273,782.15625 125.568787,909.731995 825.844666,95.0245514 759.85791,415.382568 818.003906,362.658081 721.37561,218.920532 893.004333,507.557251 115.928246,180.782578 418.175446,868.344299 921.063721,909.272339 980.063965,27.3902836 235.806366,322.626953 205.000046,646.97113 976.911621,658.907898 4.56375217,655.09314 874.988281,610.064514 898.881714,195.249527 389.058685,25.2650566 895.49939,390.607605 802.662598,245.561066 559.177185,715.762573 613.758728,783.324829 847.918213,871.824524 581.19281,651.576904 678.719177,911.668091 161.073273,70.01371 435.393982,492.720551 371.636169,629.065613 936.190857,285.643707 18.7427769,910.227783 495.28891,633.840149 517.135925,825.092407 397.196411,538.615723 247.58287,745.759949 333.798279,228.383057 160.160233,356.883148 547.038513,465.874023 746.82843,750.883728 156.144394,474.05777 857.798767,913.42981 220.268311,94.5269623 897.581543,142.341949 126.206352,845.805969 829.16864,22.4872513 69.4836426,658.504761 3.39875484,188.249298 811.952332,35.2838974 664.08374,372.227234 494.817657,247.138031 290.614258,58.2873802 274.008362,891.318787 32.1041031,526.278564 669.772583,932.174377 140.563232,248.768631 672.137207,2.82538939 312.155792,449.926361 778.42865,816.95459 143.331253,606.483398 112.506432,59.6807518 267.787872,485.394653 681.505676,311.648529 449.177582,525.90564 687.952393,604.788696 767.659485,718.66333 703.911011,12.3006067 504.588013,971.602539 298.653687,994.927002 383.807495,477.919373 43.3976822,770.091431 955.026062,506.721954 214.245941,104.52594 979.079651,629.497437 699.140686,707.386597 45.4316978,428.97171 297.55896,535.280151 595.69989,735.99585 815.755188,507.792816 870.230835,749.679199 983.341675,109.603409 187.305603,183.858353 669.612061,953.617371 141.971893,728.545471 54.1491623,463.498169 668.920532,483.282379 314.810669,237.655014 626.407471,627.678101 983.466248,605.180176 144.843918,799.265991 363.639557,614.490295 939.138062,740.091125 418.201691,653.95929 768.396729,752.347778 635.582764,826.170349 140.387299,387.152222 466.332153,302.787323 81.1048737,978.264709 294.414886,730.903931 346.671967,792.604187 76.2463531,363.81424 538.365723,194.97438 681.68103,597.887024 63.4687157,617.804688 304.634766,285.19751 723.760742,426.123596 775.106201,762.514648 617.393921,519.35614 699.594116,523.653381 167.191376,67.9322662 78.4421921,7.47460461 298.148804,829.319214 128.335236,964.366821 872.340881,875.180298 830.889954,322.93576 782.816284,119.825798 799.974731,114.352356 554.944275,338.597198 741.970642,206.454987 982.116394,721.085327 188.689423,36.3157043 798.989624,982.752869 493.225189,418.079254 678.554565,871.086487 274.959869,84.0658798 213.71077,581.8172 252.061172,221.466415 482.963318,910.657654 707.034058,456.295929 243.667572,301.308105 265.822266,481.784454 744.709717,410.007446 975.512085,830.741699 185.874557,148.680298 562.60675,72.5699387 670.588257,340.314972 536.364929,491.663666 871.023987,527.05896 348.612915,682.069641 85.4588699,754.885925 710.630859,954.021545 118.982872,900.304565 84.9358063,197.595932 908.631165,303.703156 320.733276,500.545624 856.712219,936.364319 544.609192,88.8767929 490.502655,332.852173 957.167786,840.984436 585.274719,667.457703 593.585876,961.859253 719.481018,76.1286697 993.445801,454.645935 674.053711,147.227173 643.832153,280.057312 274.768402,252.582886 248.452957,676.87085 897.505066,445.718506 972.300415,870.746155 66.4499512,398.624969 365.98291,152.396118 281.685852,133.8255 478.507538,896.567932 789.867126,929.522339 598.412048,622.702637 947.350952,299.017334 307.534973,333.694672 546.600952,675.435364 753.44751,704.098511 627.15448,735.369263 772.457336,448.412415 451.240906,729.94281 591.360168,237.582474 58.4303093,848.734802 440.47525,490.953125 568.45282,580.047974 108.221977,154.75592 806.325134,709.653687 375.070526,411.772736 923.722473,683.77478 716.635437,698.423096 437.803253,230.099319 688.50885,652.205994 742.366943,922.377319 838.346863,20.915041 260.001373,770.475159 448.404938,298.026947 912.356628,492.209412 355.677551,20.9107647 594.757996,382.405212 58.2444077,351.708313 329.846802,51.1173477 604.93811,148.082336 120.240601,950.590332 725.863403,881.947815 618.804199,964.610657 358.07193,250.661865 977.710449,615.571289 958.549255,899.960999 552.247253,750.68634 650.7323,501.092407 188.557281,47.1336365 988.494873,251.316208 530.465454,766.284302 512.460144,588.774902 199.166,422.777924 126.66626,583.198792 984.505554,619.552002 888.589722,431.227356 44.4949608,872.357971 512.298706,655.467346 660.618713,834.12439 325.068726,472.319458 409.906128,644.357483 160.284744,316.042175 36.4599609,122.058472 820.496643,508.895599 479.93457,550.237854 345.956573,428.917084 743.372498,129.103348 436.92746,928.736267 810.870728,213.767258 881.468933,671.590332 742.122742,116.18261 555.285767,238.28334 795.985474,68.8600922 940.179932,372.185303 175.076981,423.984619 700.636963,933.649475 792.606873,866.349548 477.597198,673.000305 713.917847,448.917053 642.941101,826.59021 483.379608,920.639282 817.345703,93.2505112 682.030334,706.51825 397.80127,62.2108917 925.651978,419.674622 221.932831,634.209412 84.3807526,332.220764 177.970535,730.252441 473.955322,705.218689 683.294434,745.727844 806.849976,365.73111 334.96698,473.811768 870.805481,416.575653 435.133606,649.915894 745.148071,604.686707 632.914001,855.942444 459.079193,187.466476 643.085449,509.866486 281.756256,765.742065 594.106201,158.803619 283.92926,234.512985 207.912933,29.2291565 995.241516,664.255005 203.608444,171.114288 724.70752,486.239624 934.144714,916.808044 300.239044,993.821045 514.340881,388.771851 966.689514,4.6560421 333.18927,84.5487213 938.666931,793.44812 989.35376,937.435608 591.238281,718.572021 911.597595,850.23938 501.141296,522.167297 83.7409897,561.90094 847.526245,40.0375214 850.402832,220.214661 650.213135,853.719849 242.615341,975.61615 809.346069,641.645508 847.657959,612.606079 196.104065,295.108398 297.627167,944.058472 828.098206,808.321777 566.240967,169.305557 153.040527,827.59552 1.35748363,129.901993 214.627945,590.323547 485.738464,985.431641 12.5705767,279.114899 196.879303,352.408661 213.509995,875.134521 929.793213,580.633789 719.199402,493.33432 908.532593,613.859314 511.118256,273.165863 177.46434,606.008606 660.142273,817.18988 226.290054,472.641083 194.778564,648.524414 696.15625,890.507324 874.611694,590.86731 672.646851,22.0203724 333.55304,792.703064 871.003967,294.793884 965.021729,238.823135 294.008759,354.272064 836.242065,220.970978 850.726929,552.18811 740.286804,205.755295 625.690002,545.50647 600.682373,606.324402 180.083084,214.248932 662.560852,33.8013535 394.597748,573.938721 103.952789,62.4135284 407.8573,257.185425 46.6233826,723.871582 125.051971,421.876862 773.938721,987.429993 237.719589,844.619019 705.559875,583.73468 951.166504,730.164062 736.527771,839.057129 794.20282,739.569763 215.574326,658.442566 52.3528709,673.184326 816.375305,981.513489 106.106674,816.242188 999.936401,853.197693 95.4626694,200.722244 209.458603,171.209961 727.965637,115.388359 415.219208,819.977051 527.384033,992.539612 541.984985,743.57196 15.1786594,564.418884 541.69696,676.890564 933.68042,555.479187 557.500305,698.124573 664.331299,470.000122 363.902618,823.481262 43.6010323,1.40486765 561.303833,636.69574 833.222839,641.657837 906.803955,284.200439 513.097839,631.421326 625.474243,463.75174 140.705963,616.728271 984.551819,661.190979 625.818359,174.34613 222.588379,447.858856 772.445374,260.241028 938.533875,475.989471 543.473694,14.5193787 138.627106,207.471756 584.893005,484.654938 711.086548,137.857666 306.933838,461.080688 775.834412,603.821655 472.664337,300.522827 233.268478,438.346161 195.42244,618.098511 72.5897751,870.240112 465.095978,624.648926 347.979065,283.394684 128.659058,966.35199 505.48056,332.665192 314.286407,602.193726 746.352295,512.421448 198.742645,118.508858 985.974243,287.180023 950.603943,697.832214 933.007629,478.434998 159.348785,120.457581 698.804565,290.804657 996.426025,809.897766 433.682251,382.319611 261.900726,211.101318 335.736725,762.463013 644.199585,612.644531 958.079102,904.058105 497.105225,422.141113 167.782028,310.37439 177.445984,438.096863 322.075562,33.3338432 337.564789,89.8241577 297.616394,20.3514595 288.738678,192.467529 634.671448,119.624687 47.3893013,215.039078 463.531921,553.641907 227.339417,99.9199066 858.180786,531.605103 588.247314,43.1545677 320.237183,753.523621 802.970642,862.410889 649.963806,4.30459356 928.391541,903.94574 88.4212723,555.591553 988.229797,42.9275131 665.765442,147.538712 994.747314,798.57666 414.828247,884.272034 425.514374,876.353149 987.085693,63.4994316 743.407532,728.827271 744.443054,338.021698 726.844604,225.255203 75.6200333,577.03949 427.182739,88.4046936 204.984604,432.850494 219.965256,7.65823126 939.122559,80.9465103 555.422729,469.776337 139.617767,29.4179153 359.112335,176.47702 933.073242,84.8201141 649.973389,909.43396 876.445068,831.151306 729.387695,489.165375 405.563873,424.844452 378.038849,467.953674 909.897888,193.507034 432.048981,794.75293 218.208527,157.700745 191.173004,163.677475 477.518005,407.018066 80.9492493,218.067551 925.775146,883.863281 154.774185,937.009949 26.3784637,379.753113 258.83197,59.3885155 930.313416,901.949707 189.055527,618.317017 443.528412,699.842224 416.167267,860.156738 678.810608,767.392578 707.633362,834.525024 383.533173,239.134857 73.4128265,335.845367 599.876648,754.315369 373.836426,692.96106 865.500916,283.653229 154.178345,592.619507 832.465881,148.84256 900.679077,487.636322 409.706848,923.339294 71.1897354,624.492371 463.576874,249.469391 87.8543625,136.359467 747.223694,734.691956 178.593582,623.117249 247.894043,555.23938 299.141541,770.257324 174.199356,389.021362 716.151978,586.986023 77.1765823,534.118469 829.451355,507.876099 432.866943,469.456482 754.878662,541.277405 490.377655,113.756172 949.373291,867.111511 898.973816,635.01239 758.515503,669.107544 650.053223,25.0497608 157.171539,308.266327 465.447021,202.427277 646.789246,785.961426 534.960144,129.18483 516.698975,559.223267 785.315247,906.312744 982.196655,969.168762 898.255493,101.84996 882.748962,694.644348 358.644196,918.114502 637.20459,218.754196 317.598358,372.691101 877.919373,537.517517 739.649475,342.374878 840.517151,756.727173 561.478394,37.9824905 447.675201,14.9583073 152.787018,360.726532 430.731598,853.045715 522.29541,869.496765 493.907227,460.786621 956.214355,604.571655 762.297119,707.321533 42.1953087,398.320587 990.923584,770.817993 177.219193,203.631851 682.701721,308.844177 594.31842,829.407349 280.380768,340.477509 280.345337,571.855652 113.977478,995.255798 801.377075,10.1156998 165.666672,245.138824 135.759369,292.880005 741.649719,411.071716 986.092285,459.343292 482.556305,373.54834 938.807678,255.438766 495.615021,348.116913 254.76178,211.731171 935.54541,697.781128 486.553223,542.358398 527.05127,710.549744 84.6908875,799.24353 41.9666023,523.026001 553.865784,731.871094 315.51297,47.7166862 892.516724,520.29071 691.247192,994.170166 109.29998,347.691681 861.999084,360.181763 79.0239868,391.889221 251.285141,986.877808 276.636322,30.1595554 328.891663,664.492981 309.355804,17.6789894 760.808289,506.784637 405.611755,660.740845 491.625031,923.983765 299.834259,538.341125 86.5192642,197.382751 554.718567,573.552429 171.360657,983.096924 577.741821,742.088806 59.1928024,375.39563 329.133942,201.524551 951.414978,219.600784 167.483047,156.803436 436.426086,133.354477 283.139191,32.3163109 720.031494,183.9272 195.710129,132.534531 934.296509,555.027466 290.019562,613.57489 457.126312,188.778015 967.208496,739.808472 624.465027,565.330261 37.2826462,124.254601 509.906403,853.748596 402.106384,65.4464111 478.596527,583.794556 548.406921,787.141602 953.798523,174.931198 125.089828,743.672729 12.0295925,283.193085 686.708984,241.854721 306.691803,819.256714 245.624283,395.622498 454.204285,683.044373 484.702515,949.285767 553.345398,672.478027 493.34491,781.196167 193.098984,500.64325 923.583679,532.810852 397.420593,76.5132294 190.972229,952.447876 767.085999,626.606567 89.7154007,602.744934 604.435974,799.955566 480.826141,389.56839 278.814941,414.4776 139.861343,436.2453 97.2177658,361.587036 427.780823,853.390503 867.691467,790.41333 129.028244,846.514099 796.806763,273.154907 471.659821,753.404236 14.825942,305.770081 659.375488,523.248291 472.215454,12.4888277 282.491089,637.353394 770.175293,940.311951 695.423279,141.365921 790.805054,628.552734 118.899635,712.761902 47.5434074,687.777222 549.591431,904.369446 314.013428,794.583557 299.435608,171.499176 438.808563,601.543396 279.707336,96.0352325 54.8345985,811.214905 549.833374,562.892212 472.727264,737.714905 77.9774857,386.429291 931.188965,347.105927 632.639099,489.672119 131.059753,308.105133 62.9004288,458.507294 776.469849,993.083008 440.194092,665.335205 908.059814,651.469727 450.741547,23.4695854 445.187469,700.187317 352.525574,738.516907 916.175781,639.055115 881.46637,61.7883797 958.315247,692.136475 190.983047,637.814209 727.575989,631.820068 629.066223,713.833252 853.470642,129.931778 153.720749,170.837341 998.911987,706.747375 185.070862,127.691422 33.2169189,822.347656 177.911575,942.182434 765.998352,924.844849 855.954407,4.25404501 323.064636,215.549194 746.486206,703.653442 649.348633,678.014893 346.255157,3.54356718 662.182739,312.615875 136.612885,27.4485035 762.170349,697.897583 45.3715439,310.444061 800.632996,589.370056 895.011047,907.793945 537.488159,996.436157 920.406799,78.3154907 689.3349,305.978271 273.761353,774.648621 32.8995934,573.814026 312.536652,390.995483 297.901794,297.724854 662.82251,393.715515 999.553833,196.035904 757.499512,378.483612 549.405334,780.351929 625.068787,921.04425 393.607361,333.909332 764.975769,970.457336 892.685059,95.1743546 944.953247,498.555725 304.602417,577.077332 415.255524,85.9668808 857.689819,613.86145 508.801544,255.801361 150.233215,625.798157 102.305992,112.213631 822.899048,280.423645 767.225952,854.218018 293.230042,589.005798 986.661072,13.7284164 292.000488,743.449463 661.980408,889.955322 33.8674278,526.144958 721.665222,76.2731857 794.810913,862.443176 144.080704,876.541382 881.778992,418.096954 275.135315,905.100708 325.999023,95.9545059 801.788818,615.082336 351.574463,444.120178 810.246948,156.28154 18.3456097,953.854248 525.780273,481.334503 765.555847,180.954254 219.116531,265.578766 873.355286,371.173279 890.919678,360.682709 236.830765,180.59642 301.533173,182.988922 307.570221,287.514587 989.5802,359.247955 333.139832,107.679749 644.388123,309.731842 381.454926,624.596985 357.641327,104.833969 814.928833,904.974792 708.548767,195.04567 20.4900837,668.460388 353.549561,956.120789 244.898849,279.321716 670.11731,560.007324 466.879761,798.531799 874.257263,129.197189 316.59726,452.979431 572.784363,65.3561859 502.023499,994.928528 349.165314,898.570374 337.336517,806.070679 573.324524,528.544189 770.602173,29.1745796 86.370636,393.947418 626.952087,597.800293 658.350586,710.299194 203.475174,185.089035 841.591309,975.194702 518.870422,816.64032 519.341797,927.674072 282.770691,583.921814 824.946472,939.662231 567.730469,925.599487 113.438904,884.917969 595.998474,997.374329 818.677185,959.825134 110.085411,261.326477 320.748505,854.568848 42.1200676,768.739502 975.588257,651.628723 209.560944,490.626831 501.266876,449.698853 567.426697,275.884521 549.187073,477.806366 636.418335,333.390015 310.302002,423.492889 781.412842,968.814148 97.7159195,417.428986 879.796875,700.013 9.38574791,445.790131 3.4617939,545.292236 877.581299,850.287354 442.614166,261.653473 491.498657,408.334137 774.911926,302.944275 340.441895,710.028015 127.181435,783.725098 134.518631,267.464722 873.536499,305.95163 91.8346252,356.981476 593.141663,321.540344 356.615753,550.527954 869.695374,10.2111654 981.90094,877.924561 776.321838,741.18219 870.984802,705.302002 253.710876,554.546021 169.277679,614.799622 471.078369,195.219254 151.39212,319.139404 464.655151,799.393127 112.586876,978.229065 430.629944,897.629639 731.243591,678.953064 337.729767,281.579895 525.293457,874.172668 137.761368,212.040527 912.906616,80.7460327 958.270325,861.356445 613.894104,823.803955 164.032791,62.572998 941.166443,9.46158409 727.850891,717.335144 538.893005,835.760986 11.7571497,588.073914 307.708496,832.855408 40.712883,141.26738 620.548767,16.8445377 947.374023,804.361023 818.310303,687.942017 946.255249,109.573044 259.727448,248.600906 664.430542,508.268951 134.843369,881.902466 18.5310841,784.927002 30.9458122,135.487473 328.01123,569.395142 621.728638,713.959045 391.77179,656.26416 693.971802,940.55481 566.585876,780.568298 412.100006,93.4031525 297.060638,374.829529 516.58197,922.212952 180.668335,162.421402 155.709641,700.220154 723.290039,51.975811 981.737427,137.222122 423.316925,848.204285 87.5803528,653.588623 4.8375206,659.688416 696.795105,258.954315 962.124451,661.93396 13.2792158,164.174881 971.589844,738.238037 585.235962,858.224243 351.334839,127.405769 767.565063,595.81366 726.6297,56.1623268 777.880127,955.944336 719.812317,956.887146 635.348877,598.816956 493.397186,616.241455 344.826263,995.001221 504.642273,7.82945538 342.610565,673.217285 288.265747,66.3437653 38.3609314,924.413635 262.858063,907.672546 290.024689,190.406082 274.269165,413.600159 885.328979,128.953995 926.492798,368.213989 993.87146,587.521301 513.219788,143.24765 969.743774,44.3092957 342.525238,614.673218 659.821655,289.96637 978.426819,370.632874 387.589905,524.928101 340.111847,113.030525 910.793396,958.474182 961.909485,231.056564 779.475098,174.224045 369.420227,385.654388 999.352844,594.276245 569.887451,187.682129 176.214249,807.666199 303.662964,72.2738037 939.566406,891.29248 685.883545,382.240784 184.060699,85.719223 188.185379,776.793213 690.478271,288.642151 285.200348,414.400146 948.677124,684.958801 676.417419,594.002136 545.068481,457.512268 161.510361,391.877869 156.386429,732.182556 702.739319,518.284485 610.909485,294.043945 258.761047,594.682434 697.644714,772.7901 597.031494,282.791595 688.459778,929.942932 696.434692,349.545898 331.204376,221.292053 691.428467,216.189545 940.871277,162.255264 92.0678253,506.027832 544.310974,996.815613 257.247406,632.921265 672.117493,147.916992 764.944702)') ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/legacy_expected�����������������������������������������������������0000644�0000000�0000000�00000001047�12054516537�020314� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Starting up MapServer/Geoserver tests... Setting up the data table... public.wmstest.pt SRID:4326 TYPE:POLYGON DIMS:2 ALTER TABLE Running Geoserver 2.0 NG tests... Geoserver1|POLYGON Geoserver2|4326 Geoserver3|-500|AAAAAAMAAAABAAA Geoserver4|1 Geoserver5|25|AAAAAAMAAAABAAA Geoserver6|25|AAAAAAMAAAABAAA MapServer1|id MapServer2|-9465|AQcAAAABAAAAAQM|-9465 MapServer2|-9460|AQcAAAABAAAAAQM|-9460 MapServer3|id MapServer4|-9465|010700000001000|-9465 MapServer4|-9460|010700000001000|-9460 Removing the data table... Done. 1869|POINT(1 2) BEGIN COMMIT �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/in_geojson.sql������������������������������������������������������0000644�0000000�0000000�00000003501�12314516156�020110� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- FromGeoJSON select 'geomfromgeojson_01',st_asewkt(st_geomfromgeojson(st_asgeojson('SRID=3005;MULTIPOINT(1 1, 1 1)'))); select 'geomfromgeojson_02',st_astext(st_geomfromgeojson(st_asgeojson('SRID=3005;MULTIPOINT(1 1, 1 1)'))); select 'geomfromgeojson_03',st_astext(st_geomfromgeojson(st_asgeojson('POINT(1 1)'))); select 'geomfromgeojson_04',st_astext(st_geomfromgeojson(st_asgeojson('LINESTRING(0 0,1 1)'))); select 'geomfromgeojson_05',st_astext(st_geomfromgeojson(st_asgeojson('POLYGON((0 0,1 1,1 0,0 0))'))); select 'geomfromgeojson_06',st_astext(st_geomfromgeojson(st_asgeojson('MULTIPOLYGON(((0 0,1 1,1 0,0 0)))'))); -- #1434 select '#1434: Next two errors'; select '#1434.1',ST_GeomFromGeoJSON('{ "type": "Point", "crashme": [100.0, 0.0] }'); select '#1434.2',ST_GeomFromGeoJSON('crashme');; -- #2130 -- SELECT '#2130', ST_NPoints(ST_GeomFromGeoJSON('{"type":"MultiPolygon","coordinates":[[[[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,32],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,32],[-117,32],[-117,32],[-117,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-116,32],[-117,32],[-117,32],[-117,32],[-117,32]],[[-117,33],[-117,33],[-117,33],[-117,33],[-117,33],[-117,32],[-117,33]]]]}')); -- #2216 -- SELECT '#2216', ST_NPoints(ST_GeomFromGeoJSON('{"type":"MultiPolygon","coordinates":[[[[4,0],[0,-4],[-4,0],[0,4],[4,0]],[[2,0],[0,2],[-2,0],[0,-2],[2,0]]],[[[24,0],[20,-4],[16,0],[20,4],[24,0]],[[22,0],[20,2],[18,0],[20,-2],[22,0]]],[[[44,0],[40,-4],[36,0],[40,4],[44,0]],[[42,0],[40,2],[38,0],[40,-2],[42,0]]]]}')); -- #2619 -- SELECT '#2619', ST_AsText(ST_GeomFromGeoJSON('{"type":"Polygon","bbox":[1,5,2,6],"coordinates":[]}'));�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-curvepoly_expected�������������������������������������������0000644�0000000�0000000�00000102726�12274345516�022313� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ndims01|4 geometrytype01|CURVEPOLYGON ndims02|3 geometrytype02|CURVEPOLYGON ndims03|3 geometrytype03|CURVEPOLYGONM ndims04|2 geometrytype04|CURVEPOLYGON ndims05|4 ST_CurveToLine-201|POLYGON((-2 0,-1.70710678 -0.70710678,-1 -1,-0.29289322 -0.70710678,0 0,0.29289322 -0.70710678,1 -1,1.70710678 -0.70710678,2 0,1.41421356 1.41421356,0 2,-1.41421356 1.41421356,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)) ST_CurveToLine-202|POLYGONM((-2 0 0,-1.70710678 -0.70710678 1,-1 -1 2,-0.29289322 -0.70710678 3,0 0 4,0.29289322 -0.70710678 5,1 -1 6,1.70710678 -0.70710678 7,2 0 8,1.41421356 1.41421356 6,0 2 4,-1.41421356 1.41421356 2,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)) ST_CurveToLine-203|POLYGON((-2 0 0,-1.70710678 -0.70710678 0.5,-1 -1 1,-0.29289322 -0.70710678 1.5,0 0 2,0.29289322 -0.70710678 2.5,1 -1 3,1.70710678 -0.70710678 3.5,2 0 4,1.41421356 1.41421356 3,0 2 2,-1.41421356 1.41421356 1,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)) ST_CurveToLine-204|POLYGON((-2 0 0 0,-1.70710678 -0.70710678 0.5 1,-1 -1 1 2,-0.29289322 -0.70710678 1.5 3,0 0 2 4,0.29289322 -0.70710678 2.5 5,1 -1 3 6,1.70710678 -0.70710678 3.5 7,2 0 4 8,1.41421356 1.41421356 3 6,0 2 2 4,-1.41421356 1.41421356 1 2,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)) ST_CurveToLine-401|POLYGON((-2 0,-1.92387953 -0.38268343,-1.70710678 -0.70710678,-1.38268343 -0.92387953,-1 -1,-0.61731657 -0.92387953,-0.29289322 -0.70710678,-0.07612047 -0.38268343,0 0,0.07612047 -0.38268343,0.29289322 -0.70710678,0.61731657 -0.92387953,1 -1,1.38268343 -0.92387953,1.70710678 -0.70710678,1.92387953 -0.38268343,2 0,1.84775907 0.76536686,1.41421356 1.41421356,0.76536686 1.84775907,0 2,-0.76536686 1.84775907,-1.41421356 1.41421356,-1.84775907 0.76536686,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)) ST_CurveToLine-402|POLYGONM((-2 0 0,-1.92387953 -0.38268343 0.5,-1.70710678 -0.70710678 1,-1.38268343 -0.92387953 1.5,-1 -1 2,-0.61731657 -0.92387953 2.5,-0.29289322 -0.70710678 3,-0.07612047 -0.38268343 3.5,0 0 4,0.07612047 -0.38268343 4.5,0.29289322 -0.70710678 5,0.61731657 -0.92387953 5.5,1 -1 6,1.38268343 -0.92387953 6.5,1.70710678 -0.70710678 7,1.92387953 -0.38268343 7.5,2 0 8,1.84775907 0.76536686 7,1.41421356 1.41421356 6,0.76536686 1.84775907 5,0 2 4,-0.76536686 1.84775907 3,-1.41421356 1.41421356 2,-1.84775907 0.76536686 1,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)) ST_CurveToLine-403|POLYGON((-2 0 0,-1.92387953 -0.38268343 0.25,-1.70710678 -0.70710678 0.5,-1.38268343 -0.92387953 0.75,-1 -1 1,-0.61731657 -0.92387953 1.25,-0.29289322 -0.70710678 1.5,-0.07612047 -0.38268343 1.75,0 0 2,0.07612047 -0.38268343 2.25,0.29289322 -0.70710678 2.5,0.61731657 -0.92387953 2.75,1 -1 3,1.38268343 -0.92387953 3.25,1.70710678 -0.70710678 3.5,1.92387953 -0.38268343 3.75,2 0 4,1.84775907 0.76536686 3.5,1.41421356 1.41421356 3,0.76536686 1.84775907 2.5,0 2 2,-0.76536686 1.84775907 1.5,-1.41421356 1.41421356 1,-1.84775907 0.76536686 0.5,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)) ST_CurveToLine-404|POLYGON((-2 0 0 0,-1.92387953 -0.38268343 0.25 0.5,-1.70710678 -0.70710678 0.5 1,-1.38268343 -0.92387953 0.75 1.5,-1 -1 1 2,-0.61731657 -0.92387953 1.25 2.5,-0.29289322 -0.70710678 1.5 3,-0.07612047 -0.38268343 1.75 3.5,0 0 2 4,0.07612047 -0.38268343 2.25 4.5,0.29289322 -0.70710678 2.5 5,0.61731657 -0.92387953 2.75 5.5,1 -1 3 6,1.38268343 -0.92387953 3.25 6.5,1.70710678 -0.70710678 3.5 7,1.92387953 -0.38268343 3.75 7.5,2 0 4 8,1.84775907 0.76536686 3.5 7,1.41421356 1.41421356 3 6,0.76536686 1.84775907 2.5 5,0 2 2 4,-0.76536686 1.84775907 1.5 3,-1.41421356 1.41421356 1 2,-1.84775907 0.76536686 0.5 1,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)) ST_CurveToLine01|POLYGON((-2 0,-1.99879546 -0.04906767,-1.99518473 -0.09801714,-1.98917651 -0.14673047,-1.98078528 -0.19509032,-1.97003125 -0.24298018,-1.95694034 -0.29028468,-1.94154407 -0.33688985,-1.92387953 -0.38268343,-1.90398929 -0.42755509,-1.88192126 -0.47139674,-1.85772861 -0.51410274,-1.83146961 -0.55557023,-1.80320753 -0.5956993,-1.77301045 -0.63439328,-1.74095113 -0.67155895,-1.70710678 -0.70710678,-1.67155895 -0.74095113,-1.63439328 -0.77301045,-1.5956993 -0.80320753,-1.55557023 -0.83146961,-1.51410274 -0.85772861,-1.47139674 -0.88192126,-1.42755509 -0.90398929,-1.38268343 -0.92387953,-1.33688985 -0.94154407,-1.29028468 -0.95694034,-1.24298018 -0.97003125,-1.19509032 -0.98078528,-1.14673047 -0.98917651,-1.09801714 -0.99518473,-1.04906767 -0.99879546,-1 -1,-0.95093233 -0.99879546,-0.90198286 -0.99518473,-0.85326953 -0.98917651,-0.80490968 -0.98078528,-0.75701982 -0.97003125,-0.70971532 -0.95694034,-0.66311015 -0.94154407,-0.61731657 -0.92387953,-0.57244491 -0.90398929,-0.52860326 -0.88192126,-0.48589726 -0.85772861,-0.44442977 -0.83146961,-0.4043007 -0.80320753,-0.36560672 -0.77301045,-0.32844105 -0.74095113,-0.29289322 -0.70710678,-0.25904887 -0.67155895,-0.22698955 -0.63439328,-0.19679247 -0.5956993,-0.16853039 -0.55557023,-0.14227139 -0.51410274,-0.11807874 -0.47139674,-0.09601071 -0.42755509,-0.07612047 -0.38268343,-0.05845593 -0.33688985,-0.04305966 -0.29028468,-0.02996875 -0.24298018,-0.01921472 -0.19509032,-0.01082349 -0.14673047,-0.00481527 -0.09801714,-0.00120454 -0.04906767,0 0,0.00120454 -0.04906767,0.00481527 -0.09801714,0.01082349 -0.14673047,0.01921472 -0.19509032,0.02996875 -0.24298018,0.04305966 -0.29028468,0.05845593 -0.33688985,0.07612047 -0.38268343,0.09601071 -0.42755509,0.11807874 -0.47139674,0.14227139 -0.51410274,0.16853039 -0.55557023,0.19679247 -0.5956993,0.22698955 -0.63439328,0.25904887 -0.67155895,0.29289322 -0.70710678,0.32844105 -0.74095113,0.36560672 -0.77301045,0.4043007 -0.80320753,0.44442977 -0.83146961,0.48589726 -0.85772861,0.52860326 -0.88192126,0.57244491 -0.90398929,0.61731657 -0.92387953,0.66311015 -0.94154407,0.70971532 -0.95694034,0.75701982 -0.97003125,0.80490968 -0.98078528,0.85326953 -0.98917651,0.90198286 -0.99518473,0.95093233 -0.99879546,1 -1,1.04906767 -0.99879546,1.09801714 -0.99518473,1.14673047 -0.98917651,1.19509032 -0.98078528,1.24298018 -0.97003125,1.29028468 -0.95694034,1.33688985 -0.94154407,1.38268343 -0.92387953,1.42755509 -0.90398929,1.47139674 -0.88192126,1.51410274 -0.85772861,1.55557023 -0.83146961,1.5956993 -0.80320753,1.63439328 -0.77301045,1.67155895 -0.74095113,1.70710678 -0.70710678,1.74095113 -0.67155895,1.77301045 -0.63439328,1.80320753 -0.5956993,1.83146961 -0.55557023,1.85772861 -0.51410274,1.88192126 -0.47139674,1.90398929 -0.42755509,1.92387953 -0.38268343,1.94154407 -0.33688985,1.95694034 -0.29028468,1.97003125 -0.24298018,1.98078528 -0.19509032,1.98917651 -0.14673047,1.99518473 -0.09801714,1.99879546 -0.04906767,2 0,1.99759091 0.09813535,1.99036945 0.19603428,1.97835302 0.29346095,1.96157056 0.39018064,1.94006251 0.48596036,1.91388067 0.58056935,1.88308813 0.67377971,1.84775907 0.76536686,1.80797859 0.85511019,1.76384253 0.94279347,1.71545722 1.02820549,1.66293922 1.11114047,1.60641506 1.19139861,1.54602091 1.26878657,1.48190225 1.34311791,1.41421356 1.41421356,1.34311791 1.48190225,1.26878657 1.54602091,1.19139861 1.60641506,1.11114047 1.66293922,1.02820549 1.71545722,0.94279347 1.76384253,0.85511019 1.80797859,0.76536686 1.84775907,0.67377971 1.88308813,0.58056935 1.91388067,0.48596036 1.94006251,0.39018064 1.96157056,0.29346095 1.97835302,0.19603428 1.99036945,0.09813535 1.99759091,0 2,-0.09813535 1.99759091,-0.19603428 1.99036945,-0.29346095 1.97835302,-0.39018064 1.96157056,-0.48596036 1.94006251,-0.58056935 1.91388067,-0.67377971 1.88308813,-0.76536686 1.84775907,-0.85511019 1.80797859,-0.94279347 1.76384253,-1.02820549 1.71545722,-1.11114047 1.66293922,-1.19139861 1.60641506,-1.26878657 1.54602091,-1.34311791 1.48190225,-1.41421356 1.41421356,-1.48190225 1.34311791,-1.54602091 1.26878657,-1.60641506 1.19139861,-1.66293922 1.11114047,-1.71545722 1.02820549,-1.76384253 0.94279347,-1.80797859 0.85511019,-1.84775907 0.76536686,-1.88308813 0.67377971,-1.91388067 0.58056935,-1.94006251 0.48596036,-1.96157056 0.39018064,-1.97835302 0.29346095,-1.99036945 0.19603428,-1.99759091 0.09813535,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)) ST_CurveToLine02|POLYGONM((-2 0 0,-1.99879546 -0.04906767 0.0625,-1.99518473 -0.09801714 0.125,-1.98917651 -0.14673047 0.1875,-1.98078528 -0.19509032 0.25,-1.97003125 -0.24298018 0.3125,-1.95694034 -0.29028468 0.375,-1.94154407 -0.33688985 0.4375,-1.92387953 -0.38268343 0.5,-1.90398929 -0.42755509 0.5625,-1.88192126 -0.47139674 0.625,-1.85772861 -0.51410274 0.6875,-1.83146961 -0.55557023 0.75,-1.80320753 -0.5956993 0.8125,-1.77301045 -0.63439328 0.875,-1.74095113 -0.67155895 0.9375,-1.70710678 -0.70710678 1,-1.67155895 -0.74095113 1.0625,-1.63439328 -0.77301045 1.125,-1.5956993 -0.80320753 1.1875,-1.55557023 -0.83146961 1.25,-1.51410274 -0.85772861 1.3125,-1.47139674 -0.88192126 1.375,-1.42755509 -0.90398929 1.4375,-1.38268343 -0.92387953 1.5,-1.33688985 -0.94154407 1.5625,-1.29028468 -0.95694034 1.625,-1.24298018 -0.97003125 1.6875,-1.19509032 -0.98078528 1.75,-1.14673047 -0.98917651 1.8125,-1.09801714 -0.99518473 1.875,-1.04906767 -0.99879546 1.9375,-1 -1 2,-0.95093233 -0.99879546 2.0625,-0.90198286 -0.99518473 2.125,-0.85326953 -0.98917651 2.1875,-0.80490968 -0.98078528 2.25,-0.75701982 -0.97003125 2.3125,-0.70971532 -0.95694034 2.375,-0.66311015 -0.94154407 2.4375,-0.61731657 -0.92387953 2.5,-0.57244491 -0.90398929 2.5625,-0.52860326 -0.88192126 2.625,-0.48589726 -0.85772861 2.6875,-0.44442977 -0.83146961 2.75,-0.4043007 -0.80320753 2.8125,-0.36560672 -0.77301045 2.875,-0.32844105 -0.74095113 2.9375,-0.29289322 -0.70710678 3,-0.25904887 -0.67155895 3.0625,-0.22698955 -0.63439328 3.125,-0.19679247 -0.5956993 3.1875,-0.16853039 -0.55557023 3.25,-0.14227139 -0.51410274 3.3125,-0.11807874 -0.47139674 3.375,-0.09601071 -0.42755509 3.4375,-0.07612047 -0.38268343 3.5,-0.05845593 -0.33688985 3.5625,-0.04305966 -0.29028468 3.625,-0.02996875 -0.24298018 3.6875,-0.01921472 -0.19509032 3.75,-0.01082349 -0.14673047 3.8125,-0.00481527 -0.09801714 3.875,-0.00120454 -0.04906767 3.9375,0 0 4,0.00120454 -0.04906767 4.0625,0.00481527 -0.09801714 4.125,0.01082349 -0.14673047 4.1875,0.01921472 -0.19509032 4.25,0.02996875 -0.24298018 4.3125,0.04305966 -0.29028468 4.375,0.05845593 -0.33688985 4.4375,0.07612047 -0.38268343 4.5,0.09601071 -0.42755509 4.5625,0.11807874 -0.47139674 4.625,0.14227139 -0.51410274 4.6875,0.16853039 -0.55557023 4.75,0.19679247 -0.5956993 4.8125,0.22698955 -0.63439328 4.875,0.25904887 -0.67155895 4.9375,0.29289322 -0.70710678 5,0.32844105 -0.74095113 5.0625,0.36560672 -0.77301045 5.125,0.4043007 -0.80320753 5.1875,0.44442977 -0.83146961 5.25,0.48589726 -0.85772861 5.3125,0.52860326 -0.88192126 5.375,0.57244491 -0.90398929 5.4375,0.61731657 -0.92387953 5.5,0.66311015 -0.94154407 5.5625,0.70971532 -0.95694034 5.625,0.75701982 -0.97003125 5.6875,0.80490968 -0.98078528 5.75,0.85326953 -0.98917651 5.8125,0.90198286 -0.99518473 5.875,0.95093233 -0.99879546 5.9375,1 -1 6,1.04906767 -0.99879546 6.0625,1.09801714 -0.99518473 6.125,1.14673047 -0.98917651 6.1875,1.19509032 -0.98078528 6.25,1.24298018 -0.97003125 6.3125,1.29028468 -0.95694034 6.375,1.33688985 -0.94154407 6.4375,1.38268343 -0.92387953 6.5,1.42755509 -0.90398929 6.5625,1.47139674 -0.88192126 6.625,1.51410274 -0.85772861 6.6875,1.55557023 -0.83146961 6.75,1.5956993 -0.80320753 6.8125,1.63439328 -0.77301045 6.875,1.67155895 -0.74095113 6.9375,1.70710678 -0.70710678 7,1.74095113 -0.67155895 7.0625,1.77301045 -0.63439328 7.125,1.80320753 -0.5956993 7.1875,1.83146961 -0.55557023 7.25,1.85772861 -0.51410274 7.3125,1.88192126 -0.47139674 7.375,1.90398929 -0.42755509 7.4375,1.92387953 -0.38268343 7.5,1.94154407 -0.33688985 7.5625,1.95694034 -0.29028468 7.625,1.97003125 -0.24298018 7.6875,1.98078528 -0.19509032 7.75,1.98917651 -0.14673047 7.8125,1.99518473 -0.09801714 7.875,1.99879546 -0.04906767 7.9375,2 0 8,1.99759091 0.09813535 7.875,1.99036945 0.19603428 7.75,1.97835302 0.29346095 7.625,1.96157056 0.39018064 7.5,1.94006251 0.48596036 7.375,1.91388067 0.58056935 7.25,1.88308813 0.67377971 7.125,1.84775907 0.76536686 7,1.80797859 0.85511019 6.875,1.76384253 0.94279347 6.75,1.71545722 1.02820549 6.625,1.66293922 1.11114047 6.5,1.60641506 1.19139861 6.375,1.54602091 1.26878657 6.25,1.48190225 1.34311791 6.125,1.41421356 1.41421356 6,1.34311791 1.48190225 5.875,1.26878657 1.54602091 5.75,1.19139861 1.60641506 5.625,1.11114047 1.66293922 5.5,1.02820549 1.71545722 5.375,0.94279347 1.76384253 5.25,0.85511019 1.80797859 5.125,0.76536686 1.84775907 5,0.67377971 1.88308813 4.875,0.58056935 1.91388067 4.75,0.48596036 1.94006251 4.625,0.39018064 1.96157056 4.5,0.29346095 1.97835302 4.375,0.19603428 1.99036945 4.25,0.09813535 1.99759091 4.125,0 2 4,-0.09813535 1.99759091 3.875,-0.19603428 1.99036945 3.75,-0.29346095 1.97835302 3.625,-0.39018064 1.96157056 3.5,-0.48596036 1.94006251 3.375,-0.58056935 1.91388067 3.25,-0.67377971 1.88308813 3.125,-0.76536686 1.84775907 3,-0.85511019 1.80797859 2.875,-0.94279347 1.76384253 2.75,-1.02820549 1.71545722 2.625,-1.11114047 1.66293922 2.5,-1.19139861 1.60641506 2.375,-1.26878657 1.54602091 2.25,-1.34311791 1.48190225 2.125,-1.41421356 1.41421356 2,-1.48190225 1.34311791 1.875,-1.54602091 1.26878657 1.75,-1.60641506 1.19139861 1.625,-1.66293922 1.11114047 1.5,-1.71545722 1.02820549 1.375,-1.76384253 0.94279347 1.25,-1.80797859 0.85511019 1.125,-1.84775907 0.76536686 1,-1.88308813 0.67377971 0.875,-1.91388067 0.58056935 0.75,-1.94006251 0.48596036 0.625,-1.96157056 0.39018064 0.5,-1.97835302 0.29346095 0.375,-1.99036945 0.19603428 0.25,-1.99759091 0.09813535 0.125,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)) ST_CurveToLine03|POLYGON((-2 0 0,-1.99879546 -0.04906767 0.03125,-1.99518473 -0.09801714 0.0625,-1.98917651 -0.14673047 0.09375,-1.98078528 -0.19509032 0.125,-1.97003125 -0.24298018 0.15625,-1.95694034 -0.29028468 0.1875,-1.94154407 -0.33688985 0.21875,-1.92387953 -0.38268343 0.25,-1.90398929 -0.42755509 0.28125,-1.88192126 -0.47139674 0.3125,-1.85772861 -0.51410274 0.34375,-1.83146961 -0.55557023 0.375,-1.80320753 -0.5956993 0.40625,-1.77301045 -0.63439328 0.4375,-1.74095113 -0.67155895 0.46875,-1.70710678 -0.70710678 0.5,-1.67155895 -0.74095113 0.53125,-1.63439328 -0.77301045 0.5625,-1.5956993 -0.80320753 0.59375,-1.55557023 -0.83146961 0.625,-1.51410274 -0.85772861 0.65625,-1.47139674 -0.88192126 0.6875,-1.42755509 -0.90398929 0.71875,-1.38268343 -0.92387953 0.75,-1.33688985 -0.94154407 0.78125,-1.29028468 -0.95694034 0.8125,-1.24298018 -0.97003125 0.84375,-1.19509032 -0.98078528 0.875,-1.14673047 -0.98917651 0.90625,-1.09801714 -0.99518473 0.9375,-1.04906767 -0.99879546 0.96875,-1 -1 1,-0.95093233 -0.99879546 1.03125,-0.90198286 -0.99518473 1.0625,-0.85326953 -0.98917651 1.09375,-0.80490968 -0.98078528 1.125,-0.75701982 -0.97003125 1.15625,-0.70971532 -0.95694034 1.1875,-0.66311015 -0.94154407 1.21875,-0.61731657 -0.92387953 1.25,-0.57244491 -0.90398929 1.28125,-0.52860326 -0.88192126 1.3125,-0.48589726 -0.85772861 1.34375,-0.44442977 -0.83146961 1.375,-0.4043007 -0.80320753 1.40625,-0.36560672 -0.77301045 1.4375,-0.32844105 -0.74095113 1.46875,-0.29289322 -0.70710678 1.5,-0.25904887 -0.67155895 1.53125,-0.22698955 -0.63439328 1.5625,-0.19679247 -0.5956993 1.59375,-0.16853039 -0.55557023 1.625,-0.14227139 -0.51410274 1.65625,-0.11807874 -0.47139674 1.6875,-0.09601071 -0.42755509 1.71875,-0.07612047 -0.38268343 1.75,-0.05845593 -0.33688985 1.78125,-0.04305966 -0.29028468 1.8125,-0.02996875 -0.24298018 1.84375,-0.01921472 -0.19509032 1.875,-0.01082349 -0.14673047 1.90625,-0.00481527 -0.09801714 1.9375,-0.00120454 -0.04906767 1.96875,0 0 2,0.00120454 -0.04906767 2.03125,0.00481527 -0.09801714 2.0625,0.01082349 -0.14673047 2.09375,0.01921472 -0.19509032 2.125,0.02996875 -0.24298018 2.15625,0.04305966 -0.29028468 2.1875,0.05845593 -0.33688985 2.21875,0.07612047 -0.38268343 2.25,0.09601071 -0.42755509 2.28125,0.11807874 -0.47139674 2.3125,0.14227139 -0.51410274 2.34375,0.16853039 -0.55557023 2.375,0.19679247 -0.5956993 2.40625,0.22698955 -0.63439328 2.4375,0.25904887 -0.67155895 2.46875,0.29289322 -0.70710678 2.5,0.32844105 -0.74095113 2.53125,0.36560672 -0.77301045 2.5625,0.4043007 -0.80320753 2.59375,0.44442977 -0.83146961 2.625,0.48589726 -0.85772861 2.65625,0.52860326 -0.88192126 2.6875,0.57244491 -0.90398929 2.71875,0.61731657 -0.92387953 2.75,0.66311015 -0.94154407 2.78125,0.70971532 -0.95694034 2.8125,0.75701982 -0.97003125 2.84375,0.80490968 -0.98078528 2.875,0.85326953 -0.98917651 2.90625,0.90198286 -0.99518473 2.9375,0.95093233 -0.99879546 2.96875,1 -1 3,1.04906767 -0.99879546 3.03125,1.09801714 -0.99518473 3.0625,1.14673047 -0.98917651 3.09375,1.19509032 -0.98078528 3.125,1.24298018 -0.97003125 3.15625,1.29028468 -0.95694034 3.1875,1.33688985 -0.94154407 3.21875,1.38268343 -0.92387953 3.25,1.42755509 -0.90398929 3.28125,1.47139674 -0.88192126 3.3125,1.51410274 -0.85772861 3.34375,1.55557023 -0.83146961 3.375,1.5956993 -0.80320753 3.40625,1.63439328 -0.77301045 3.4375,1.67155895 -0.74095113 3.46875,1.70710678 -0.70710678 3.5,1.74095113 -0.67155895 3.53125,1.77301045 -0.63439328 3.5625,1.80320753 -0.5956993 3.59375,1.83146961 -0.55557023 3.625,1.85772861 -0.51410274 3.65625,1.88192126 -0.47139674 3.6875,1.90398929 -0.42755509 3.71875,1.92387953 -0.38268343 3.75,1.94154407 -0.33688985 3.78125,1.95694034 -0.29028468 3.8125,1.97003125 -0.24298018 3.84375,1.98078528 -0.19509032 3.875,1.98917651 -0.14673047 3.90625,1.99518473 -0.09801714 3.9375,1.99879546 -0.04906767 3.96875,2 0 4,1.99759091 0.09813535 3.9375,1.99036945 0.19603428 3.875,1.97835302 0.29346095 3.8125,1.96157056 0.39018064 3.75,1.94006251 0.48596036 3.6875,1.91388067 0.58056935 3.625,1.88308813 0.67377971 3.5625,1.84775907 0.76536686 3.5,1.80797859 0.85511019 3.4375,1.76384253 0.94279347 3.375,1.71545722 1.02820549 3.3125,1.66293922 1.11114047 3.25,1.60641506 1.19139861 3.1875,1.54602091 1.26878657 3.125,1.48190225 1.34311791 3.0625,1.41421356 1.41421356 3,1.34311791 1.48190225 2.9375,1.26878657 1.54602091 2.875,1.19139861 1.60641506 2.8125,1.11114047 1.66293922 2.75,1.02820549 1.71545722 2.6875,0.94279347 1.76384253 2.625,0.85511019 1.80797859 2.5625,0.76536686 1.84775907 2.5,0.67377971 1.88308813 2.4375,0.58056935 1.91388067 2.375,0.48596036 1.94006251 2.3125,0.39018064 1.96157056 2.25,0.29346095 1.97835302 2.1875,0.19603428 1.99036945 2.125,0.09813535 1.99759091 2.0625,0 2 2,-0.09813535 1.99759091 1.9375,-0.19603428 1.99036945 1.875,-0.29346095 1.97835302 1.8125,-0.39018064 1.96157056 1.75,-0.48596036 1.94006251 1.6875,-0.58056935 1.91388067 1.625,-0.67377971 1.88308813 1.5625,-0.76536686 1.84775907 1.5,-0.85511019 1.80797859 1.4375,-0.94279347 1.76384253 1.375,-1.02820549 1.71545722 1.3125,-1.11114047 1.66293922 1.25,-1.19139861 1.60641506 1.1875,-1.26878657 1.54602091 1.125,-1.34311791 1.48190225 1.0625,-1.41421356 1.41421356 1,-1.48190225 1.34311791 0.9375,-1.54602091 1.26878657 0.875,-1.60641506 1.19139861 0.8125,-1.66293922 1.11114047 0.75,-1.71545722 1.02820549 0.6875,-1.76384253 0.94279347 0.625,-1.80797859 0.85511019 0.5625,-1.84775907 0.76536686 0.5,-1.88308813 0.67377971 0.4375,-1.91388067 0.58056935 0.375,-1.94006251 0.48596036 0.3125,-1.96157056 0.39018064 0.25,-1.97835302 0.29346095 0.1875,-1.99036945 0.19603428 0.125,-1.99759091 0.09813535 0.0625,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)) ST_CurveToLine04|POLYGON((-2 0 0 0,-1.99879546 -0.04906767 0.03125 0.0625,-1.99518473 -0.09801714 0.0625 0.125,-1.98917651 -0.14673047 0.09375 0.1875,-1.98078528 -0.19509032 0.125 0.25,-1.97003125 -0.24298018 0.15625 0.3125,-1.95694034 -0.29028468 0.1875 0.375,-1.94154407 -0.33688985 0.21875 0.4375,-1.92387953 -0.38268343 0.25 0.5,-1.90398929 -0.42755509 0.28125 0.5625,-1.88192126 -0.47139674 0.3125 0.625,-1.85772861 -0.51410274 0.34375 0.6875,-1.83146961 -0.55557023 0.375 0.75,-1.80320753 -0.5956993 0.40625 0.8125,-1.77301045 -0.63439328 0.4375 0.875,-1.74095113 -0.67155895 0.46875 0.9375,-1.70710678 -0.70710678 0.5 1,-1.67155895 -0.74095113 0.53125 1.0625,-1.63439328 -0.77301045 0.5625 1.125,-1.5956993 -0.80320753 0.59375 1.1875,-1.55557023 -0.83146961 0.625 1.25,-1.51410274 -0.85772861 0.65625 1.3125,-1.47139674 -0.88192126 0.6875 1.375,-1.42755509 -0.90398929 0.71875 1.4375,-1.38268343 -0.92387953 0.75 1.5,-1.33688985 -0.94154407 0.78125 1.5625,-1.29028468 -0.95694034 0.8125 1.625,-1.24298018 -0.97003125 0.84375 1.6875,-1.19509032 -0.98078528 0.875 1.75,-1.14673047 -0.98917651 0.90625 1.8125,-1.09801714 -0.99518473 0.9375 1.875,-1.04906767 -0.99879546 0.96875 1.9375,-1 -1 1 2,-0.95093233 -0.99879546 1.03125 2.0625,-0.90198286 -0.99518473 1.0625 2.125,-0.85326953 -0.98917651 1.09375 2.1875,-0.80490968 -0.98078528 1.125 2.25,-0.75701982 -0.97003125 1.15625 2.3125,-0.70971532 -0.95694034 1.1875 2.375,-0.66311015 -0.94154407 1.21875 2.4375,-0.61731657 -0.92387953 1.25 2.5,-0.57244491 -0.90398929 1.28125 2.5625,-0.52860326 -0.88192126 1.3125 2.625,-0.48589726 -0.85772861 1.34375 2.6875,-0.44442977 -0.83146961 1.375 2.75,-0.4043007 -0.80320753 1.40625 2.8125,-0.36560672 -0.77301045 1.4375 2.875,-0.32844105 -0.74095113 1.46875 2.9375,-0.29289322 -0.70710678 1.5 3,-0.25904887 -0.67155895 1.53125 3.0625,-0.22698955 -0.63439328 1.5625 3.125,-0.19679247 -0.5956993 1.59375 3.1875,-0.16853039 -0.55557023 1.625 3.25,-0.14227139 -0.51410274 1.65625 3.3125,-0.11807874 -0.47139674 1.6875 3.375,-0.09601071 -0.42755509 1.71875 3.4375,-0.07612047 -0.38268343 1.75 3.5,-0.05845593 -0.33688985 1.78125 3.5625,-0.04305966 -0.29028468 1.8125 3.625,-0.02996875 -0.24298018 1.84375 3.6875,-0.01921472 -0.19509032 1.875 3.75,-0.01082349 -0.14673047 1.90625 3.8125,-0.00481527 -0.09801714 1.9375 3.875,-0.00120454 -0.04906767 1.96875 3.9375,0 0 2 4,0.00120454 -0.04906767 2.03125 4.0625,0.00481527 -0.09801714 2.0625 4.125,0.01082349 -0.14673047 2.09375 4.1875,0.01921472 -0.19509032 2.125 4.25,0.02996875 -0.24298018 2.15625 4.3125,0.04305966 -0.29028468 2.1875 4.375,0.05845593 -0.33688985 2.21875 4.4375,0.07612047 -0.38268343 2.25 4.5,0.09601071 -0.42755509 2.28125 4.5625,0.11807874 -0.47139674 2.3125 4.625,0.14227139 -0.51410274 2.34375 4.6875,0.16853039 -0.55557023 2.375 4.75,0.19679247 -0.5956993 2.40625 4.8125,0.22698955 -0.63439328 2.4375 4.875,0.25904887 -0.67155895 2.46875 4.9375,0.29289322 -0.70710678 2.5 5,0.32844105 -0.74095113 2.53125 5.0625,0.36560672 -0.77301045 2.5625 5.125,0.4043007 -0.80320753 2.59375 5.1875,0.44442977 -0.83146961 2.625 5.25,0.48589726 -0.85772861 2.65625 5.3125,0.52860326 -0.88192126 2.6875 5.375,0.57244491 -0.90398929 2.71875 5.4375,0.61731657 -0.92387953 2.75 5.5,0.66311015 -0.94154407 2.78125 5.5625,0.70971532 -0.95694034 2.8125 5.625,0.75701982 -0.97003125 2.84375 5.6875,0.80490968 -0.98078528 2.875 5.75,0.85326953 -0.98917651 2.90625 5.8125,0.90198286 -0.99518473 2.9375 5.875,0.95093233 -0.99879546 2.96875 5.9375,1 -1 3 6,1.04906767 -0.99879546 3.03125 6.0625,1.09801714 -0.99518473 3.0625 6.125,1.14673047 -0.98917651 3.09375 6.1875,1.19509032 -0.98078528 3.125 6.25,1.24298018 -0.97003125 3.15625 6.3125,1.29028468 -0.95694034 3.1875 6.375,1.33688985 -0.94154407 3.21875 6.4375,1.38268343 -0.92387953 3.25 6.5,1.42755509 -0.90398929 3.28125 6.5625,1.47139674 -0.88192126 3.3125 6.625,1.51410274 -0.85772861 3.34375 6.6875,1.55557023 -0.83146961 3.375 6.75,1.5956993 -0.80320753 3.40625 6.8125,1.63439328 -0.77301045 3.4375 6.875,1.67155895 -0.74095113 3.46875 6.9375,1.70710678 -0.70710678 3.5 7,1.74095113 -0.67155895 3.53125 7.0625,1.77301045 -0.63439328 3.5625 7.125,1.80320753 -0.5956993 3.59375 7.1875,1.83146961 -0.55557023 3.625 7.25,1.85772861 -0.51410274 3.65625 7.3125,1.88192126 -0.47139674 3.6875 7.375,1.90398929 -0.42755509 3.71875 7.4375,1.92387953 -0.38268343 3.75 7.5,1.94154407 -0.33688985 3.78125 7.5625,1.95694034 -0.29028468 3.8125 7.625,1.97003125 -0.24298018 3.84375 7.6875,1.98078528 -0.19509032 3.875 7.75,1.98917651 -0.14673047 3.90625 7.8125,1.99518473 -0.09801714 3.9375 7.875,1.99879546 -0.04906767 3.96875 7.9375,2 0 4 8,1.99759091 0.09813535 3.9375 7.875,1.99036945 0.19603428 3.875 7.75,1.97835302 0.29346095 3.8125 7.625,1.96157056 0.39018064 3.75 7.5,1.94006251 0.48596036 3.6875 7.375,1.91388067 0.58056935 3.625 7.25,1.88308813 0.67377971 3.5625 7.125,1.84775907 0.76536686 3.5 7,1.80797859 0.85511019 3.4375 6.875,1.76384253 0.94279347 3.375 6.75,1.71545722 1.02820549 3.3125 6.625,1.66293922 1.11114047 3.25 6.5,1.60641506 1.19139861 3.1875 6.375,1.54602091 1.26878657 3.125 6.25,1.48190225 1.34311791 3.0625 6.125,1.41421356 1.41421356 3 6,1.34311791 1.48190225 2.9375 5.875,1.26878657 1.54602091 2.875 5.75,1.19139861 1.60641506 2.8125 5.625,1.11114047 1.66293922 2.75 5.5,1.02820549 1.71545722 2.6875 5.375,0.94279347 1.76384253 2.625 5.25,0.85511019 1.80797859 2.5625 5.125,0.76536686 1.84775907 2.5 5,0.67377971 1.88308813 2.4375 4.875,0.58056935 1.91388067 2.375 4.75,0.48596036 1.94006251 2.3125 4.625,0.39018064 1.96157056 2.25 4.5,0.29346095 1.97835302 2.1875 4.375,0.19603428 1.99036945 2.125 4.25,0.09813535 1.99759091 2.0625 4.125,0 2 2 4,-0.09813535 1.99759091 1.9375 3.875,-0.19603428 1.99036945 1.875 3.75,-0.29346095 1.97835302 1.8125 3.625,-0.39018064 1.96157056 1.75 3.5,-0.48596036 1.94006251 1.6875 3.375,-0.58056935 1.91388067 1.625 3.25,-0.67377971 1.88308813 1.5625 3.125,-0.76536686 1.84775907 1.5 3,-0.85511019 1.80797859 1.4375 2.875,-0.94279347 1.76384253 1.375 2.75,-1.02820549 1.71545722 1.3125 2.625,-1.11114047 1.66293922 1.25 2.5,-1.19139861 1.60641506 1.1875 2.375,-1.26878657 1.54602091 1.125 2.25,-1.34311791 1.48190225 1.0625 2.125,-1.41421356 1.41421356 1 2,-1.48190225 1.34311791 0.9375 1.875,-1.54602091 1.26878657 0.875 1.75,-1.60641506 1.19139861 0.8125 1.625,-1.66293922 1.11114047 0.75 1.5,-1.71545722 1.02820549 0.6875 1.375,-1.76384253 0.94279347 0.625 1.25,-1.80797859 0.85511019 0.5625 1.125,-1.84775907 0.76536686 0.5 1,-1.88308813 0.67377971 0.4375 0.875,-1.91388067 0.58056935 0.375 0.75,-1.94006251 0.48596036 0.3125 0.625,-1.96157056 0.39018064 0.25 0.5,-1.97835302 0.29346095 0.1875 0.375,-1.99036945 0.19603428 0.125 0.25,-1.99759091 0.09813535 0.0625 0.125,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)) astext01|CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)) astext02|CURVEPOLYGON M (CIRCULARSTRING M (-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)) astext03|CURVEPOLYGON Z (CIRCULARSTRING Z (-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)) astext04|CURVEPOLYGON ZM (CIRCULARSTRING ZM (-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)) asewkt01|CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)) asewkt02|CURVEPOLYGONM(CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0),(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2)) asewkt03|CURVEPOLYGON(CIRCULARSTRING(-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0),(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1)) asewkt04|CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2)) ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. ERROR: Exception in LWGEOM2GEOS: curved geometry not supported. dimension01|2 dimension02|2 dimension03|2 dimension04|2 SRID01|0 SRID02|0 SRID03|0 SRID04|0 envelope01|POLYGON((-2 -1,-2 2,2 2,2 -1,-2 -1)) envelope02|POLYGON((-2 -1,-2 2,2 2,2 -1,-2 -1)) envelope03|POLYGON((-2 -1,-2 2,2 2,2 -1,-2 -1)) envelope04|POLYGON((-2 -1,-2 2,2 2,2 -1,-2 -1)) startPoint01|t startPoint02|t startPoint03|t startPoint04|t endPoint01|t endPoint02|t endPoint03|t endPoint04|t exteriorRing01|CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0) exteriorRing02|CIRCULARSTRINGM(-2 0 0,-1 -1 2,0 0 4,1 -1 6,2 0 8,0 2 4,-2 0 0) exteriorRing03|CIRCULARSTRING(-2 0 0,-1 -1 1,0 0 2,1 -1 3,2 0 4,0 2 2,-2 0 0) exteriorRing04|CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0) numInteriorRings01|1 numInteriorRings02|1 numInteriorRings03|1 numInteriorRings04|1 interiorRingN-101|LINESTRING(-1 0,0 0.5,1 0,0 1,-1 0) interiorRingN-102|LINESTRINGM(-1 0 2,0 0.5 4,1 0 6,0 1 4,-1 0 2) interiorRingN-103|LINESTRING(-1 0 1,0 0.5 2,1 0 3,0 1 3,-1 0 1) interiorRingN-104|LINESTRING(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2) interiorRingN-201| interiorRingN-202| interiorRingN-203| interiorRingN-204| public.curvepolygon.the_geom_2d effectively removed. public.curvepolygon.the_geom_3dm effectively removed. public.curvepolygon.the_geom_3dz effectively removed. public.curvepolygon.the_geom_4d effectively removed. valid wkt curve polygon 1|010a00000001000000010200000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec0 valid wkt curve polygon 2|010a00000002000000010200000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec00102000000060000006844c4fe011b6240342e2993e0423fc0d45daf9d93066240c4a0c305d62240c000000080ac31624000000020fbbe40c0000000e0107f6240000000c0a10440c04e1c0c14624c6240bf3fb6405c793fc06844c4fe011b6240342e2993e0423fc0 valid wkt curve polygon 3|010a00000001000000010800000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec0 valid wkt curve polygon 4|010a00000002000000010800000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec00102000000060000006844c4fe011b6240342e2993e0423fc0d45daf9d93066240c4a0c305d62240c000000080ac31624000000020fbbe40c0000000e0107f6240000000c0a10440c04e1c0c14624c6240bf3fb6405c793fc06844c4fe011b6240342e2993e0423fc0 valid wkt curve polygon 5|010a00000002000000010200000007000000ccdf061ad9f3614054093e6d99093ec0ab9085dbb6dd614081540229216040c0ebd7a828c33e62409bf026782a7e41c0000000c06bb2624000000020adb440c08e632f616ead6240c9f7b0bf1dd33dc09011eec0de4362407dd6672f76323ec0ccdf061ad9f3614054093e6d99093ec00109000000030000000108000000030000006844c4fe011b6240342e2993e0423fc0d45daf9d93066240c4a0c305d62240c000000080ac31624000000020fbbe40c001020000000200000000000080ac31624000000020fbbe40c0000000e0107f6240000000c0a10440c0010800000003000000000000e0107f6240000000c0a10440c04e1c0c14624c6240bf3fb6405c793fc06844c4fe011b6240342e2993e0423fc0 ERROR: geometry contains non-closed rings ERROR: geometry contains non-closed rings ERROR: geometry contains non-closed rings ERROR: geometry must have an odd number of points ERROR: geometry must have an odd number of points ERROR: incontinuous compound curve ERROR: geometry contains non-closed rings ERROR: geometry requires more points valid ewkb curve polygon 1|CURVEPOLYGON((143.620251668383 -30.0374973560768,142.928571472997 -32.751011968744,145.961323098919 -34.9856710615288,149.575653076172 -33.4115333557129,149.419724075848 -29.8246726805735,146.120941605547 -30.1971158627043,143.620251668383 -30.0374973560768)) valid ewkb curve polygon 2|CURVEPOLYGON((143.620251668383 -30.0374973560768,142.928571472997 -32.751011968744,145.961323098919 -34.9856710615288,149.575653076172 -33.4115333557129,149.419724075848 -29.8246726805735,146.120941605547 -30.1971158627043,143.620251668383 -30.0374973560768),(144.843993552527 -31.2612392402209,144.205519526017 -32.2721564488616,145.552307128906 -33.4920387268066,147.970809936523 -32.0361862182617,146.386972449926 -31.4740639157242,144.843993552527 -31.2612392402209)) valid ewkb curve polygon 3|CURVEPOLYGON(CIRCULARSTRING(143.620251668383 -30.0374973560768,142.928571472997 -32.751011968744,145.961323098919 -34.9856710615288,149.575653076172 -33.4115333557129,149.419724075848 -29.8246726805735,146.120941605547 -30.1971158627043,143.620251668383 -30.0374973560768)) valid ewkb curve polygon 4|CURVEPOLYGON(CIRCULARSTRING(143.620251668383 -30.0374973560768,142.928571472997 -32.751011968744,145.961323098919 -34.9856710615288,149.575653076172 -33.4115333557129,149.419724075848 -29.8246726805735,146.120941605547 -30.1971158627043,143.620251668383 -30.0374973560768),(144.843993552527 -31.2612392402209,144.205519526017 -32.2721564488616,145.552307128906 -33.4920387268066,147.970809936523 -32.0361862182617,146.386972449926 -31.4740639157242,144.843993552527 -31.2612392402209)) valid ewkb curve polygon 5|CURVEPOLYGON((143.620251668383 -30.0374973560768,142.928571472997 -32.751011968744,145.961323098919 -34.9856710615288,149.575653076172 -33.4115333557129,149.419724075848 -29.8246726805735,146.120941605547 -30.1971158627043,143.620251668383 -30.0374973560768),COMPOUNDCURVE(CIRCULARSTRING(144.843993552527 -31.2612392402209,144.205519526017 -32.2721564488616,145.552307128906 -33.4920387268066),(145.552307128906 -33.4920387268066,147.970809936523 -32.0361862182617),CIRCULARSTRING(147.970809936523 -32.0361862182617,146.386972449926 -31.4740639157242,144.843993552527 -31.2612392402209))) valid curve 6|010a0000000200000001090000000200000001080000000500000000000000000000000000000000000000000000000000004000000000000000000000000000000040000000000000f03f00000000000000400000000000000840000000000000104000000000000008400102000000040000000000000000001040000000000000084000000000000010400000000000001440000000000000f03f000000000000104000000000000000000000000000000000010800000003000000333333333333fb3f000000000000f03f666666666666f63f9a9999999999d93f333333333333fb3f000000000000f03f ERROR: geometry requires more points valid curve 8|010a0000000200000001090000000200000001080000000500000000000000000000000000000000000000000000000000004000000000000000000000000000000040000000000000f03f00000000000000400000000000000840000000000000104000000000000008400102000000020000000000000000001040000000000000084000000000000000000000000000000000010800000003000000333333333333fb3f000000000000f03f666666666666f63f9a9999999999d93f333333333333fb3f000000000000f03f null response| ������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_lots_of_nulls.sql�������������������������������������������0000644�0000000�0000000�00000073631�11722777314�022414� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Test index creation on null geometries -- An index on more than 459 null geometries (with or without actual geometires) -- used to fail on PostgreSQL 8.2. CREATE TABLE "test" ( "num" integer, "the_geom" geometry ); INSERT INTO "test" ("num", "the_geom") VALUES ( 1 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 2 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 3 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 4 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 5 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 6 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 7 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 8 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 9 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 10 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 11 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 12 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 13 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 14 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 15 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 16 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 17 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 18 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 19 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 20 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 21 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 22 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 23 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 24 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 25 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 26 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 27 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 28 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 29 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 30 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 31 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 32 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 33 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 34 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 35 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 36 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 37 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 38 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 39 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 40 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 41 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 42 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 43 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 44 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 45 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 46 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 47 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 48 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 49 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 50 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 51 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 52 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 53 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 54 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 55 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 56 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 57 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 58 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 59 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 60 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 61 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 62 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 63 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 64 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 65 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 66 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 67 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 68 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 69 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 70 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 71 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 72 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 73 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 74 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 75 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 76 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 77 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 78 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 79 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 80 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 81 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 82 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 83 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 84 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 85 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 86 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 87 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 88 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 89 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 90 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 91 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 92 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 93 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 94 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 95 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 96 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 97 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 98 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 99 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 100 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 101 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 102 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 103 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 104 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 105 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 106 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 107 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 108 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 109 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 110 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 111 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 112 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 113 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 114 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 115 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 116 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 117 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 118 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 119 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 120 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 121 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 122 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 123 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 124 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 125 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 126 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 127 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 128 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 129 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 130 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 131 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 132 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 133 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 134 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 135 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 136 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 137 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 138 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 139 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 140 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 141 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 142 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 143 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 144 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 145 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 146 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 147 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 148 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 149 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 150 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 151 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 152 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 153 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 154 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 155 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 156 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 157 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 158 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 159 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 160 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 161 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 162 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 163 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 164 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 165 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 166 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 167 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 168 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 169 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 170 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 171 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 172 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 173 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 174 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 175 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 176 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 177 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 178 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 179 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 180 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 181 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 182 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 183 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 184 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 185 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 186 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 187 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 188 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 189 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 190 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 191 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 192 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 193 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 194 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 195 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 196 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 197 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 198 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 199 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 200 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 201 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 202 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 203 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 204 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 205 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 206 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 207 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 208 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 209 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 210 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 211 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 212 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 213 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 214 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 215 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 216 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 217 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 218 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 219 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 220 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 221 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 222 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 223 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 224 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 225 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 226 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 227 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 228 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 229 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 230 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 231 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 232 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 233 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 234 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 235 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 236 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 237 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 238 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 239 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 240 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 241 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 242 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 243 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 244 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 245 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 246 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 247 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 248 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 249 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 250 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 251 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 252 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 253 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 254 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 255 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 256 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 257 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 258 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 259 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 260 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 261 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 262 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 263 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 264 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 265 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 266 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 267 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 268 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 269 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 270 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 271 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 272 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 273 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 274 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 275 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 276 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 277 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 278 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 279 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 280 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 281 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 282 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 283 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 284 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 285 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 286 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 287 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 288 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 289 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 290 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 291 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 292 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 293 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 294 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 295 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 296 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 297 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 298 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 299 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 300 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 301 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 302 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 303 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 304 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 305 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 306 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 307 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 308 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 309 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 310 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 311 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 312 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 313 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 314 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 315 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 316 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 317 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 318 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 319 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 320 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 321 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 322 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 323 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 324 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 325 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 326 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 327 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 328 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 329 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 330 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 331 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 332 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 333 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 334 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 335 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 336 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 337 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 338 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 339 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 340 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 341 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 342 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 343 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 344 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 345 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 346 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 347 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 348 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 349 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 350 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 351 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 352 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 353 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 354 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 355 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 356 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 357 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 358 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 359 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 360 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 361 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 362 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 363 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 364 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 365 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 366 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 367 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 368 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 369 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 370 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 371 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 372 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 373 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 374 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 375 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 376 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 377 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 378 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 379 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 380 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 381 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 382 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 383 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 384 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 385 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 386 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 387 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 388 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 389 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 390 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 391 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 392 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 393 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 394 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 395 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 396 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 397 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 398 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 399 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 400 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 401 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 402 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 403 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 404 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 405 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 406 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 407 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 408 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 409 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 410 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 411 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 412 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 413 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 414 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 415 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 416 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 417 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 418 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 419 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 420 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 421 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 422 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 423 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 424 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 425 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 426 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 427 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 428 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 429 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 430 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 431 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 432 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 433 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 434 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 435 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 436 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 437 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 438 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 439 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 440 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 441 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 442 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 443 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 444 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 445 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 446 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 447 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 448 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 449 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 450 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 451 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 452 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 453 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 454 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 455 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 456 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 457 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 458 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 459 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 460 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 461 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 462 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 463 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 464 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 465 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 466 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 467 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 468 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 469 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 470 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 471 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 472 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 473 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 474 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 475 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 476 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 477 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 478 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 479 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 480 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 481 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 482 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 483 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 484 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 485 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 486 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 487 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 488 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 489 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 490 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 491 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 492 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 493 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 494 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 495 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 496 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 497 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 498 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 499 , NULL); INSERT INTO "test" ("num", "the_geom") VALUES ( 500 , NULL); �������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/boundary.sql��������������������������������������������������������0000644�0000000�0000000�00000000713�12141503651�017575� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)'))); SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))'))); SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, 1 1 1))'))); SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )'))); SELECT ST_AsText(ST_Boundary(ST_GeomFromText('TRIANGLE((1 1,0 0, -1 1, 1 1))'))); �����������������������������������������������������postgis-2.1.2+dfsg.orig/regress/isvaliddetail.sql���������������������������������������������������0000644�0000000�0000000�00000002731�11722777314�020607� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select 1, valid, reason, st_astext(location) FROM ( SELECT (ST_IsValidDetail('LINESTRING (70 250, 190 340)')).* ) foo; select 2, valid, reason, st_astext(location) FROM ( SELECT (ST_IsValidDetail('LINESTRING (70 250, 70 250)')).* ) foo; -- Twisted polygon select 3, valid, reason, st_astext(location) FROM ( SELECT (ST_IsValidDetail( 'POLYGON ((70 250, 70 500, 80 400, 40 400, 70 250))' )).* ) foo; -- Twisted polygon is also invalid for ESRI select 4, valid, reason, st_astext(location) FROM ( SELECT (ST_IsValidDetail( 'POLYGON ((70 250, 70 500, 80 400, 40 400, 70 250))' , 1 -- ESRI flag )).* ) foo; -- Self-touching ring forming hole select 5, valid, reason, st_astext(location) FROM ( SELECT (ST_IsValidDetail( 'POLYGON ((70 250, 40 500, 100 400, 70 250, 80 350, 60 350, 70 250))' , 0 -- No flags )).* ) foo; select '5s', ST_IsValid( 'POLYGON ((70 250, 40 500, 100 400, 70 250, 80 350, 60 350, 70 250))' , 0); select '5r', ST_IsValidReason( 'POLYGON ((70 250, 40 500, 100 400, 70 250, 80 350, 60 350, 70 250))' , 0); -- Self-touching ring forming hole with ESRI flag select 6, valid, reason, st_astext(location) FROM ( SELECT (ST_IsValidDetail( 'POLYGON ((70 250, 40 500, 100 400, 70 250, 80 350, 60 350, 70 250))' , 1 -- ESRI flag )).* ) foo; select '6s', ST_IsValid( 'POLYGON ((70 250, 40 500, 100 400, 70 250, 80 350, 60 350, 70 250))' , 1); select '5r', ST_IsValidReason( 'POLYGON ((70 250, 40 500, 100 400, 70 250, 80 350, 60 350, 70 250))' , 1); ���������������������������������������postgis-2.1.2+dfsg.orig/regress/clean_expected������������������������������������������������������0000644�0000000�0000000�00000001001�11765606072�020122� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RT|1|t|t|f RT|2|t|t|f RT|3|t|t|f RT|4|t|t|f RT|5|t|t|f RT|6|t|t|f RT|7|t|t|f RT|7.1|t|t|f RT|8|t|t|f RT|9|t|t|f RT|9.1|t|t|f RT|10|t|t|t RT|11|t|t|f RT|12|t|t|f RT|13.1|t|t|t RT|13.2|t|t|f RT|14|t|t|f RT|15|t|t|f RT|16.1|t|t|f RT|16.2|t|t|f RT|16.3|t|t|f RT|16.4|t|t|f RT|17.1|t|t|f PG|1|t|t|f PG|2|t|t|f PG|3|t|t|f PG|4|t|t|f PG|5|t|t|f #1719.1|POINT(0 0) #1719.2|GEOMETRYCOLLECTION(POINT(0 0),MULTIPOINT(3 4,5 2),POINT(4 4),MULTIPOLYGON(((0 0,5 5,10 0,0 0)),((5 5,0 10,10 10,5 5)))) #1719.3|MULTIPOINT(3 4,5 2) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/binary_expected�����������������������������������������������������0000644�0000000�0000000�00000000073�11722777314�020335� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������COPY 114 COPY 114 geometry|106 COPY 56 COPY 56 geometry|48 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-serialize_expected�������������������������������������������0000644�0000000�0000000�00000000576�11722777314�022254� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|pass 2|pass 3|pass 4|pass 5|pass 6|pass 7|pass 8|pass 9|pass 10|pass 11|pass 12|pass 13|pass 14|pass 15|pass 16|pass 17|pass 18|pass 19|pass 20|pass 21|pass 22|pass 23|pass 24|pass 25|pass 1|pass 2|pass 3|pass 4|pass 5|pass 6|pass 7|pass 8|pass 9|pass 10|pass 11|pass 12|pass 13|pass 14|pass 15|pass 16|pass 17|pass 18|pass 19|pass 20|pass 21|pass 22|pass 23|pass 24|pass 25|pass ����������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/run_test������������������������������������������������������������0000755�0000000�0000000�00000073022�12212161245�017023� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh export DB=postgis_reg # TODO: get this part generated by ./configure. For now # we must make sure this matches REGRESS_INSTALLDIR in # Makefile.in. export SHP2PGSQL=../loader/shp2pgsql export PGSQL2SHP=../loader/pgsql2shp # raster2pgsql is relative to the place where this script # would be called: raster/test/regress export RASTER2PGSQL=../../loader/raster2pgsql ################################################### # # Usage ./run_test <testname> [<testname>] # # Create the spatial database 'postgis_reg' # (or whatever $DB is set to) if it doesn't # already exist. # # Run the <testname>.sql script # Diff output against <testname>_expected # # ################################################### # Set the locale to "C" so error messages match # Save original locale to set back ORIG_LC_ALL=$LC_ALL ORIG_LANG=$LANG export LC_ALL=C export LANG=C PGOPTIONS="${PGOPTIONS} -c lc_messages=C -c client_min_messages=NOTICE" export PGOPTIONS REGDIR=`dirname $0` REGDIR=`cd "${REGDIR}" && pwd` STAGED_INSTALL_DIR="${REGDIR}/00-regress-install" STAGED_SCRIPTS_DIR="${STAGED_INSTALL_DIR}/share/contrib/postgis" PSQL="psql" if [ -z "$PGIS_REG_TMPDIR" ]; then PGIS_REG_TMPDIR=/tmp/pgis_reg fi mkdir -p ${PGIS_REG_TMPDIR}/tmp chmod 777 ${PGIS_REG_TMPDIR}/tmp VERBOSE=0 OPT_CLEAN=no OPT_DROP=yes OPT_CREATE=yes OPT_UPGRADE=no OPT_WITH_TOPO=no OPT_WITH_RASTER=no OPT_WITH_SFCGAL=no OPT_EXPECT=no OPT_EXTENSIONS=no if echo '\c' | grep c >/dev/null 2>&1; then ECHO_N='echo -n' ECHO_C='' else ECHO_N='echo' ECHO_C='\c' fi ################################################### # # Helper functions # ################################################### # # start_test <name> # start_test () { TEST="$1" ${ECHO_N} " ${TEST} ${ECHO_C}" RUN=`expr $RUN + 1` show_progress } # Print a single dot echo_inline() { msg="$1" ${ECHO_N} "${msg}${ECHO_C}" } # Print a single dot show_progress() { echo_inline "." } # # pass <msg> # pass () { msg="${1}" echo " ok ${msg}" } # # fail <msg> <log> # fail () { _msg="$1" _log="$2" if [ -z "$_log" ]; then echo " failed ($_msg)" elif test "$VERBOSE" -eq "1"; then echo " failed ($_msg: $_log)" echo "-----------------------------------------------------------------------------" cat $_log echo "-----------------------------------------------------------------------------" else echo " failed ($_msg: $_log)" fi FAIL=`expr $FAIL + 1` } # # run_simple_sql # # Run an sql script and hide results unless it fails. # # SQL input file name is $1 # run_simple_sql () { _sql="$1" if [ ! -r "$_sql" ]; then fail "can't read $_sql" return 1 fi TMPFILE="${PGIS_REG_TMPDIR}/test_${RUN}_tmp" # Dump output to a temp file. ${PSQL} -v "VERBOSITY=terse" -tXA < "${_sql}" ${DB} > ${TMPFILE} 2>&1 # Check if psql errored out. if [ $? -gt 0 ]; then fail "Unable to run sql script $_sql" "${TMPFILE}" return 1 fi # Check if psql produced any error output. grep "^ERROR:" "${TMPFILE}" if [ $? -eq 0 ]; then fail "Errors while running sql script $_sql" "${TMPFILE}" return 1 fi rm ${TMPFILE} } # # run_simple_test # # Run an sql script and compare results with the given expected output # # SQL input is ${TEST}.sql, expected output is {$TEST}_expected # run_simple_test () { _sql="$1" _expected="$2" if [ -n "$3" ]; then _msg="$3: " else _msg= fi if [ ! -r "$_sql" ]; then fail "can't read $_sql" return 1 fi if test x"$OPT_EXPECT" = "xno"; then if [ ! -r "$_expected" ]; then fail "can't read $_expected" return 1 fi fi show_progress OUTFILE="${PGIS_REG_TMPDIR}/test_${RUN}_out" BEPGIS_REG_TMPDIR="${PGIS_REG_TMPDIR}/pgis_reg_tmp/" TMPFILE="${BEPGIS_REG_TMPDIR}/test_${RUN}_tmp" DIFFILE="${PGIS_REG_TMPDIR}/test_${RUN}_diff" mkdir -p "${BEPGIS_REG_TMPDIR}" chmod 777 "${BEPGIS_REG_TMPDIR}" # Use only one call to sed to work around MSYS buffering problem # and use fewer calls to grep for the same problem. MSYS only accepts # about 16 redirects before hanging. ${PSQL} -v "VERBOSITY=terse" -v "tmpfile='${TMPFILE}'" -tXA ${DB} < "${_sql}" 2>&1 \ | grep --binary-files=text -v "^$" \ | grep --binary-files=text -v "^\(INSERT\|DELETE\|UPDATE\|SELECT\)" \ | grep --binary-files=text -v "^\(CONTEXT\|RESET\|ANALYZE\)" \ | grep --binary-files=text -v "^\(DROP\|CREATE\|VACUUM\)" \ | grep --binary-files=text -v "^\(SET\|TRUNCATE\)" \ | grep --binary-files=text -v "^LINE [0-9]" \ | grep --binary-files=text -v "^ *^$" \ | sed -e 's/Infinity/inf/g' -e 's/Inf/inf/g' -e 's/1\.#INF/inf/g' \ -e 's/[eE]\([+-]\)0\{1,\}\([0-9]\{1,\}\)/e\1\2/g' \ -e 's/Self-intersection .*/Self-intersection/' \ -e 's/^ROLLBACK/COMMIT/' \ > "${OUTFILE}" rm -rf "${BEPGIS_REG_TMPDIR}" # should we keep these ? if test x"$OPT_EXPECT" = "xyes"; then echo_inline " expected" cp "${OUTFILE}" "${_expected}" else if diff -u "${_expected}" "${OUTFILE}" > ${DIFFILE}; then #SUCCESS=`expr $SUCCESS + 1` rm "${OUTFILE}" "${DIFFILE}" # we don't need these anymore return 0 else fail "${_msg}diff expected obtained" "${DIFFILE}" # rm "${OUTFILE}" # diff is enough return 1 fi fi } # Drop a table if exists drop_table_if_exists() { tblname="$1" ${PSQL} -c "DROP TABLE IF EXISTS ${tblname}" "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 } # # This runs the loader once and checks the output of it. # It will NOT run if neither the expected SQL nor the expected # select results file exists, unless you pass true for the final # parameter. # # $1 - Description of this run of the loader, used for error messages. # $2 - Table name to load into. # $3 - The name of the file containing what the # SQL generated by shp2pgsql should look like. # $4 - The name of the file containing the expected results of # SELECT geom FROM _tblname should look like. # $5 - Command line options for shp2pgsql. # $6 - If you pass true, this will run the loader even if neither # of the expected results files exists (though of course # the results won't be compared with anything). # run_loader_and_check_output() { _description=$1 _tblname=$2 _expected_sql_file=$3 _expected_select_results_file=$4 _loader_options=$5 _run_always=$6 # ON_ERROR_STOP is used by psql to return non-0 on an error _psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true" if [ -n "$_run_always" -o -r "$_expected_sql_file" -o -r "$_expected_select_results_file" ]; then show_progress # Produce the output SQL file. ${SHP2PGSQL} $_loader_options -g the_geom ${TEST}.shp $_tblname \ > ${PGIS_REG_TMPDIR}/loader.out \ 2> ${PGIS_REG_TMPDIR}/loader.err if [ $? -gt 0 ]; then fail " $_description: running shp2pgsql" "${PGIS_REG_TMPDIR}/loader.err" return 1 fi # Compare the output SQL file with the expected if there is one. if [ -r $_expected_sql_file ]; then show_progress if diff "${PGIS_REG_TMPDIR}/loader.out" "$_expected_sql_file" > /dev/null; then : else fail " $_description: actual SQL does not match expected.", \ "${PGIS_REG_TMPDIR}/loader.out" fi fi # Run the loader SQL script. show_progress ${PSQL} ${_psql_opts} -f ${PGIS_REG_TMPDIR}/loader.out "${DB}" > ${PGIS_REG_TMPDIR}/loader.err 2>&1 if [ $? -gt 0 ]; then fail " $_description: running shp2pgsql output" "${PGIS_REG_TMPDIR}/loader.err" return 1 fi # Run the select script (if there is one) if [ -r "${TEST}.select.sql" ]; then if run_simple_test "${TEST}.select.sql" "$_expected_select_results_file" "$_description"; then : else # That will have already called fail, so just return an error. return 1 fi fi fi return 0 } # # This runs the dumper once and checks the output of it. # It will NOT run if the expected shp file does not exist, unless # you pass true for the final parameter. # # $1 - Description of this run of the dumper, used for error messages. # $2 - Table name to dump from. # $3 - "Expected" .shp file to compare with. # $3 - If you pass true, this will run the loader even if neither # of the expected results files exists (though of course # the results won't be compared with anything). # run_dumper_and_check_output() { _description=$1 _tblname=$2 _expected_shp_file=$3 _run_always=$4 if [ -n "$_run_always" -o -r "$_expected_shp_file" ]; then show_progress ${PGSQL2SHP} -f ${PGIS_REG_TMPDIR}/dumper ${DB} "${_tblname}" > "${PGIS_REG_TMPDIR}/dumper.err" 2>&1 if [ $? -gt 0 ]; then fail "$_description: dumping loaded table" "${PGIS_REG_TMPDIR}/dumper.err" return 1 fi # Compare with expected output if there is any. if [ -r $_expected_shp_file ]; then show_progress if diff "${PGIS_REG_TMPDIR}"/dumper.shp "$_expected_shp_file" > /dev/null; then : else ls -lL "${PGIS_REG_TMPDIR}"/dumper.shp "$_expected_shp_file" > "${PGIS_REG_TMPDIR}"/dumper.diff fail "$_description: dumping loaded table" "${PGIS_REG_TMPDIR}/dumper.diff" return 1 fi fi fi return 0 } # # run_loader_test # # Load a shapefile with different methods, create a 'select *' SQL # test and run simple test with provided expected output. # # SHP input is ${TEST}.shp, expected output is {$TEST}.expected # run_loader_test () { # See if there is a custom command-line options file _custom_opts="" if [ -r ${TEST}.opts ]; then _custom_opts=`grep -v ^\s*# ${TEST}.opts` fi tblname="loadedshp" # If we have some expected files to compare with, run in wkt mode. if run_loader_and_check_output "wkt test" "${tblname}" "${TEST}-w.sql.expected" "${TEST}-w.select.expected" \ "-w $_custom_opts"; then : else return 1 fi drop_table_if_exists "${tblname}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 # If we have some expected files to compare with, run in geography mode. if run_loader_and_check_output "geog test" "${tblname}" "${TEST}-G.sql.expected" "${TEST}-G.select.expected" \ "-G $_custom_opts"; then : else return 1 fi # If we have some expected files to compare with, run the dumper and compare shape files. if run_dumper_and_check_output "dumper geog test" "${tblname}" "${TEST}-G.shp.expected"; then : else return 1 fi drop_table_if_exists "${tblname}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 # Always run in wkb ("normal") mode, even if there are no expected files to compare with. if run_loader_and_check_output "wkb test" "${tblname}" "${TEST}.sql.expected" "${TEST}.select.expected" \ "$_custom_opts" "true"; then : else return 1 fi # If we have some expected files to compare with, run the dumper and compare shape files. if run_dumper_and_check_output "dumper wkb test" "${tblname}" "${TEST}.shp.expected"; then : else return 1 fi drop_table_if_exists "${tblname}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 # Some custom parameters can be incompatible with -D. if [ -z "$_custom_opts" ]; then # If we have some expected files to compare with, run in wkt dump mode. if run_loader_and_check_output "wkt dump test" "${tblname}" "${TEST}-wD.sql.expected" \ "${TEST}-w.select.expected" "-w -D"; then : else return 1 fi drop_table_if_exists "${tblname}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 # If we have some expected files to compare with, run in wkt dump mode. if run_loader_and_check_output "geog dump test" "${tblname}" "${TEST}-GD.sql.expected" \ "${TEST}-G.select.expected" "-G -D"; then : else return 1 fi drop_table_if_exists "${tblname}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 # If we have some expected files to compare with, run in wkb dump mode. if run_loader_and_check_output "wkb dump test" "${tblname}" "${TEST}-D.sql.expected" \ "${TEST}.select.expected" "-D"; then : else return 1 fi drop_table_if_exists "${tblname}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 fi return 0 } # # This runs the loader once and checks the output of it. # It will NOT run if neither the expected SQL nor the expected # select results file exists, unless you pass true for the final # parameter. # # $1 - Description of this run of the loader, used for error messages. # $2 - Table name to load into. # $3 - The name of the file containing what the # SQL generated by shp2pgsql should look like. # $4 - The name of the file containing the expected results of # SELECT rast FROM _tblname should look like. # $5 - Command line options for raster2pgsql. # $6 - If you pass true, this will run the loader even if neither # of the expected results files exists (though of course # the results won't be compared with anything). # run_raster_loader_and_check_output() { _description=$1 _tblname=$2 _expected_sql_file=$3 _expected_select_results_file=$4 _loader_options=$5 _run_always=$6 # ON_ERROR_STOP is used by psql to return non-0 on an error _psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true" if [ -n "$_run_always" -o -r "$_expected_sql_file" -o -r "$_expected_select_results_file" ]; then show_progress # Produce the output SQL file. ${RASTER2PGSQL} $_loader_options ${TEST}.tif $_tblname \ > ${PGIS_REG_TMPDIR}/loader.out \ 2> ${PGIS_REG_TMPDIR}/loader.err if [ $? -gt 0 ]; then fail " $_description: running raster2pgsql" "${PGIS_REG_TMPDIR}/loader.err" return 1 fi # Compare the output SQL file with the expected if there is one. if [ -r $_expected_sql_file ]; then show_progress if diff -w "${PGIS_REG_TMPDIR}/loader.out" "$_expected_sql_file" > /dev/null; then : else fail " $_description: actual SQL does not match expected.", \ "${PGIS_REG_TMPDIR}/loader.out" fi fi # Run the loader SQL script. show_progress ${PSQL} ${_psql_opts} -f ${PGIS_REG_TMPDIR}/loader.out "${DB}" > ${PGIS_REG_TMPDIR}/loader.err 2>&1 if [ $? -gt 0 ]; then fail " $_description: running raster2pgsql output" "${PGIS_REG_TMPDIR}/loader.err" return 1 fi # Run the select script (if there is one) if [ -r "${TEST}.select.sql" ]; then if run_simple_test "${TEST}.select.sql" "$_expected_select_results_file" "$_description"; then : else # That will have already called fail, so just return an error. return 1 fi fi fi return 0 } # # run_raster_loader_test # # Load a raster with different methods # # raster input is ${TEST}.tif, expected output is {$TEST}.expected # run_raster_loader_test () { # See if there is a custom command-line options file _custom_opts="" if [ -r ${TEST}.opts ]; then _custom_opts=`grep -v ^\s*# ${TEST}.opts` fi tblname="loadedrast" if run_raster_loader_and_check_output "test" "${tblname}" "${TEST}.sql.expected" "${TEST}.select.expected" \ "$_custom_opts" "true"; then : else return 1 fi drop_table_if_exists "${tblname}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 return 0 } # Log an initialization error and optionally drop the db init_db_error () { echo echo " Something went wrong during db initialization ($1)." if test "$VERBOSE" -eq "1"; then echo " Last 5 lines of ${PGIS_REG_TMPDIR}/regress_log follow:" echo "-----------------------------------------------------------------------------" tail -5 ${PGIS_REG_TMPDIR}/regress_log echo "-----------------------------------------------------------------------------" else echo " For details, check ${PGIS_REG_TMPDIR}/regress_log" fi echo if test x"$OPT_DROP" = "xyes" -a x"$OPT_CREATE" = "xyes"; then dropdb "${DB}" > /dev/null else : echo "Drop database ${DB} manually" fi exit 1 } # Count database objects count_db_objects () { ${PSQL} ${_psql_opts} -tAc "WITH counts as ( select count(*) from pg_type union all select count(*) from pg_proc union all select count(*) from pg_cast union all select count(*) from pg_aggregate union all select count(*) from pg_operator union all select count(*) from pg_opclass union all select count(*) from pg_namespace where nspname NOT LIKE 'pg_%' union all select count(*) from pg_opfamily ) select sum(count) from counts;" "${DB}" if [ $? -gt 0 ]; then init_db_error $1 fi } # Prepare the database for spatial operations (extension method) prepare_spatial_extensions () { echo "Preparing spatial db ${DB} using EXTENSION" # ON_ERROR_STOP is used by psql to return non-0 on an error _psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true" ${PSQL} ${_psql_opts} -c "CREATE EXTENSION postgis" "${DB}" \ >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "core extension" # NOTE: "postgis" extension includes raster... if test x"$OPT_WITH_TOPO" = "xyes"; then # { ${PSQL} ${_psql_opts} -c "CREATE EXTENSION postgis_topology" "${DB}" \ >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "topology extension" fi # } } # Prepare the database for spatial operations (old method) prepare_spatial () { echo "Preparing spatial db ${DB} " # ON_ERROR_STOP is used by psql to return non-0 on an error _psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true" ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/postgis.sql "${DB}" \ >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "core module" if test -e ${STAGED_SCRIPTS_DIR}/postgis_comments.sql; then # { ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/postgis_comments.sql \ "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "core comments" fi # } if test x"$OPT_WITH_TOPO" = "xyes"; then # { SCRIPT=${STAGED_SCRIPTS_DIR}/topology.sql if test -e ${SCRIPT}; then echo "Adding topology support" ${PSQL} ${_psql_opts} -Xf ${REGDIR}/../topology/topology.sql "${DB}" \ >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "topology module" else echo "${SCRIPT} not found" >&2 exit 1 fi if test -e ${STAGED_SCRIPTS_DIR}/topology_comments.sql; then ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/topology_comments.sql \ "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || \ init_db_error "topology comments" fi fi # } if test x"$OPT_WITH_RASTER" = "xyes"; then # { SCRIPT=${STAGED_SCRIPTS_DIR}/rtpostgis.sql if test -e ${SCRIPT}; then echo "Adding raster support" ${PSQL} ${_psql_opts} -Xf ${SCRIPT} "${DB}" \ >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "raster module" else echo "${SCRIPT} not found" >&2 exit 1 fi if test -e ${STAGED_SCRIPTS_DIR}/raster_comments.sql; then ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/raster_comments.sql \ "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || \ init_db_error "raster comments" fi fi # } if test x"$OPT_WITH_SFCGAL" = "xyes"; then # { SCRIPT=${STAGED_SCRIPTS_DIR}/sfcgal.sql if test -e ${SCRIPT}; then echo "Adding sfcgal support" ${PSQL} ${_psql_opts} -Xf ${SCRIPT} "${DB}" \ >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "raster module" else echo "${SCRIPT} not found" >&2 exit 1 fi if test -e ${STAGED_SCRIPTS_DIR}/sfcgal_comments.sql; then ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/sfcgal_comments.sql \ "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || \ init_db_error "sfcgal comments" fi fi # } } # Create the spatial database create_spatial () { echo "Creating spatial db ${DB} " createdb --encoding=UTF-8 --template=template0 --lc-collate="C" "${DB}" > ${PGIS_REG_TMPDIR}/regress_log 2>&1 if [ $? -gt 0 ]; then # { fail "createdb failed" "${PGIS_REG_TMPDIR}/regress_log" exit 1 fi # } createlang plpgsql "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log # Count database objects before installing anything object_count_pre=$(count_db_objects "counting object before postgis install") if test x"$OPT_EXTENSIONS" = "xyes"; then # { prepare_spatial_extensions else # }{ prepare_spatial fi # } } # Upgrade an existing database (soft upgrade) upgrade_spatial () { echo "Upgrading spatial db ${DB} " SCRIPT=${STAGED_SCRIPTS_DIR}/postgis_upgrade_*_minor.sql if test -e ${SCRIPT}; then echo "Upgrading core" ${PSQL} ${_psql_opts} -Xf ${SCRIPT} "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "core upgrade" else echo "${SCRIPT} not found" >&2 exit 1 fi if test x"$OPT_WITH_TOPO" = "xyes"; then SCRIPT=${STAGED_SCRIPTS_DIR}/topology_upgrade_*_minor.sql if test -e ${SCRIPT}; then echo "Upgrading topology" ${PSQL} ${_psql_opts} -Xf ${SCRIPT} "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "topology upgrade" else echo "${SCRIPT} not found" >&2 exit 1 fi fi if test x"$OPT_WITH_RASTER" = "xyes"; then SCRIPT=${STAGED_SCRIPTS_DIR}/rtpostgis_upgrade_*_minor.sql if test -e ${SCRIPT}; then echo "Upgrading raster" ${PSQL} ${_psql_opts} -Xf ${SCRIPT} "${DB}" >> ${PGIS_REG_TMPDIR}/regress_log 2>&1 || init_db_error "raster upgrade" else echo "${SCRIPT} not found" >&2 exit 1 fi fi } drop_spatial_extensions() { #echo "Dropping spatial from ${DB} using EXTENSION" # ON_ERROR_STOP is used by psql to return non-0 on an error _psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true" if test x"$OPT_WITH_TOPO" = "xyes"; then ${PSQL} ${_psql_opts} -c "DROP EXTENSION postgis_topology;" \ "${DB}" > ${PGIS_REG_TMPDIR}/uninstall.log 2> ${PGIS_REG_TMPDIR}/uninstall.err if [ $? -gt 0 ]; then # { fail "DROP EXTENSION postgis_topology failed" "${PGIS_REG_TMPDIR}/uninstall.err" ok=no fi # } show_progress # on to core uninstall fi ${PSQL} ${_psql_opts} -c "DROP EXTENSION postgis;" \ "${DB}" > ${PGIS_REG_TMPDIR}/uninstall.log 2> ${PGIS_REG_TMPDIR}/uninstall.err if [ $? -gt 0 ]; then # { fail "DROP EXTENSION postgis failed" "${PGIS_REG_TMPDIR}/uninstall.err" fi # } test x"$ok" = "xyes" return $? } drop_spatial() { #echo "Dropping spatial from ${DB}" ok=yes if test x"$OPT_WITH_TOPO" = "xyes"; then ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/uninstall_topology.sql \ "${DB}" > ${PGIS_REG_TMPDIR}/uninstall.log 2> ${PGIS_REG_TMPDIR}/uninstall.err if [ $? -gt 0 ]; then # { fail "uninstall_topology.sql failed" "${PGIS_REG_TMPDIR}/uninstall.err" ok=no fi # } show_progress # on to raster uninstall fi if test x"$OPT_WITH_RASTER" = "xyes"; then ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/uninstall_rtpostgis.sql \ "${DB}" > ${PGIS_REG_TMPDIR}/uninstall.log 2> ${PGIS_REG_TMPDIR}/uninstall.err if [ $? -gt 0 ]; then # { fail "uninstall_rtpostgis.sql failed" "${PGIS_REG_TMPDIR}/uninstall.err" ok=no fi # } show_progress # on to postgis uninstall fi ${PSQL} ${_psql_opts} -Xf ${STAGED_SCRIPTS_DIR}/uninstall_postgis.sql \ "${DB}" > ${PGIS_REG_TMPDIR}/uninstall.log 2> ${PGIS_REG_TMPDIR}/uninstall.err if [ $? -gt 0 ]; then # { fail "uninstall_postgis.sql failed" "${PGIS_REG_TMPDIR}/uninstall.err" fi # } test x"$ok" = "xyes" return $? } # Drop spatial from an existing database uninstall_spatial() { start_test "uninstall" if test x"$OPT_EXTENSIONS" = "xyes"; then # { ok=drop_spatial_extensions else # }{ ok=drop_spatial fi # } if $ok; then # { show_progress # on to objects count object_count_post=$(count_db_objects "counting object after postgis uninstall") if test ${object_count_pre} != ${object_count_post}; then # { fail "Count of object before install (${object_count_pre}) != count after uninstall (${object_count_post})" else pass "(${object_count_pre})" fi # } fi # } } ################################################### # # Parse command line opts # ################################################### while [ -n "$1" ]; do if test "$1" = "-v"; then VERBOSE=1 shift continue elif test "$1" = "--nodrop"; then OPT_DROP=no shift continue elif test "$1" = "--nocreate"; then OPT_CREATE=no shift continue elif test "$1" = "--expect"; then OPT_EXPECT=yes shift continue elif test "$1" = "--extensions"; then OPT_EXTENSIONS=yes shift continue elif test "$1" = "--upgrade"; then OPT_UPGRADE=yes shift continue elif test "$1" = "--topology"; then OPT_WITH_TOPO=yes shift continue elif test "$1" = "--raster"; then OPT_WITH_RASTER=yes shift continue elif test "$1" = "--sfcgal"; then OPT_WITH_SFCGAL=yes shift continue elif test "$1" = "--clean"; then OPT_CLEAN=yes shift continue else break fi done if [ -z "$1" ]; then echo "Usage: $0 [<options>] <test> [<test>]" >&2 echo "Options:" >&2 echo " -v be verbose about failures" >&2 echo " --nocreate do not create the regression database on start" >&2 echo " --upgrade source the upgrade scripts on start" >&2 echo " --nodrop do not drop the regression database on exit" >&2 echo " --raster load also raster extension" >&2 echo " --topology load also topology extension" >&2 echo " --sfcgal use also sfcgal backend" >&2 echo " --clean cleanup test logs on exit" >&2 echo " --expect save obtained output as expected" >&2 exit 1 fi ################################################### # # Prepare the database # ################################################### db_exists=`${PSQL} -l | grep -w ${DB}` if test -z "$db_exists"; then if test x"$OPT_CREATE" = "xyes"; then create_spatial else echo "Database ${DB} does not exist" >&2 echo "Run w/out the --nocreate flag to create it" >&2 exit 1 fi else if test x"$OPT_CREATE" = "xyes"; then echo "Database ${DB} already exist." >&2 echo "Run with the --nocreate flag to use it " \ "or drop it and try again." >&2 exit 1 else echo "Using existing database ${DB}" fi fi if test x"$OPT_UPGRADE" = "xyes"; then upgrade_spatial fi libver=`${PSQL} -tAc "select postgis_lib_version()" "${DB}"` if [ -z "$libver" ]; then dropdb "${DB}" echo echo " Something went wrong (no postgis installed in ${DB})." if [ -z "$db_exists" ]; then echo " For details, check ${PGIS_REG_TMPDIR}/regress_log" fi echo exit 1 fi ################################################### # # Report runtime environment # ################################################### geosver=`${PSQL} -tAc "select postgis_geos_version()" "${DB}"` projver=`${PSQL} -tAc "select postgis_proj_version()" "${DB}"` if test x"$OPT_WITH_SFCGAL" = "xyes"; then sfcgalver=`${PSQL} -tAc "select postgis_sfcgal_version()" "${DB}"` fi if test x"$OPT_WITH_RASTER" = "xyes"; then gdalver=`${PSQL} -tAc "select postgis_gdal_version()" "${DB}"` fi svnrev=`${PSQL} -tAc "select postgis_svn_version()" "${DB}"` libbuilddate=`${PSQL} -tAc "select postgis_lib_build_date()" "${DB}"` pgsqlver=`${PSQL} -tAc "select version()" "${DB}"` echo "PGIS_REG_TMPDIR is ${PGIS_REG_TMPDIR}" echo "PATH is ${PATH}" echo echo " $pgsqlver" echo " Postgis $libver - r${svnrev} - $libbuilddate" if [ -n "$geosver" ]; then echo " GEOS: $geosver" fi if [ -n "$projver" ]; then echo " PROJ: $projver" fi if [ -n "$sfcgalver" ]; then echo " SFCGAL: $sfcgalver" fi if [ -n "$gdalver" ]; then echo " GDAL: $gdalver" fi ################################################### # # Run the tests # ################################################### echo echo "Running tests" echo RUN=0 SKIP=0 FAIL=0 #SUCCESS=0 while [ -n "$1" ]; do TEST="$1"; shift; # catch a common mistake (strip trailing .sql) TEST=`echo "$TEST" | sed 's/\.sql$//'` export TEST start_test "${TEST}" # Check for a "-pre.sh" file in case there are non-SQL setup tasks needed before # the test can be run. if [ -r "${TEST}-pre.sh" ]; then "./${TEST}-pre.sh" if [ $? -gt 0 ]; then fail " setup script failed" continue else show_progress fi fi # Check for a "-pre.sql" file in case there is setup SQL needed before # the test can be run. if [ -r "${TEST}-pre.sql" ]; then if run_simple_sql "${TEST}-pre.sql"; then show_progress else continue fi fi # Check .dbf *before* .sql as loader test could # create the .sql # Check for .dbf not just .shp since the loader can load # .dbf files without a .shp. if [ -r "${TEST}.dbf" ]; then if run_loader_test; then pass fi # Check .tif *before* .sql as loader test could # create the .sql elif [ -r "${TEST}.tif" ]; then if run_raster_loader_test; then pass fi elif [ -r "${TEST}.sql" ]; then if run_simple_test ${TEST}.sql ${TEST}_expected; then pass fi else echo " skipped (can't read ${TEST}.sql)" SKIP=`expr $SKIP + 1` continue fi # Check for a "-post.sql" file in case there is teardown SQL needed after # the test has been run. if [ -r "${TEST}-post.sql" ]; then if ! run_simple_sql "${TEST}-post.sql"; then echo " ... but cleanup sql failed!" fi fi # Check for a "-post.sh" file in case there are non-SQL teardown tasks needed after # the test has been run. if [ -r "${TEST}-post.sh" ]; then "./${TEST}-post.sh" if [ $? -gt 0 ]; then echo " ... but cleanup script failed!" fi fi done ################################################### # # Uninstall postgis (serves as an uninstall test) # ################################################### # We only test uninstall if we've been asked to drop # and we did create # and nobody requested raster or topology # (until they have an uninstall script themself) if test x"$OPT_DROP" = "xyes" \ -a x"$object_count_pre" != "x" then # { uninstall_spatial fi # } ################################################### # # Summary report # ################################################### echo echo "Run tests: $RUN" #echo "Skipped: $SKIP" #echo "Successful: $SUCCESS" echo "Failed: $FAIL" if test x"$OPT_CLEAN" = "xyes"; then rm -f "${PGIS_REG_TMPDIR}"/dumper.* rm -f "${PGIS_REG_TMPDIR}/loader.*" rm -f "${PGIS_REG_TMPDIR}/regress_log" rm -f "${PGIS_REG_TMPDIR}"/uninstall.* rm -f "${PGIS_REG_TMPDIR}"/tmp/test_* rmdir -p "${PGIS_REG_TMPDIR}/tmp/" 2> /dev/null rmdir -p "${PGIS_REG_TMPDIR}" 2> /dev/null fi if test x"$OPT_DROP" = "xyes" -a x"$OPT_CREATE" = "xyes"; then sleep 1 dropdb "${DB}" > /dev/null else : echo "Drop database ${DB} manually" fi # Set the locale back to the original export LC_ALL=$ORIG_LC_ALL export LANG=$ORIG_LANG exit $FAIL ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/relate_bnr_expected�������������������������������������������������0000644�0000000�0000000�00000057451�11722777314�021202� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|FF2FF1212|FF2FF1212|FF2FF1212|FF2FF1212 2|2FFF1FFF2|2FFF1FFF2|2FFF0FFF2|2FFF1FFF2 3|212FF1FF2|212FF1FF2|212FF1FF2|212FF1FF2 4|2121F12F2|2121F12F2|2121F12F2|2121F12F2 5|2121F1212|2121F1212|2121F1212|2121F1212 6|212101212|212101212|212101212|212101212 7|212101212|212101212|2F2F002F2|212101212 8|212101212|212101212|2F2F002F2|212101212 9|21210F212|21210F212|2F200F202|21210F212 10|2121012F2|2121012F2|2F210F2F2|2121012F2 11|FF2F11212|FF2F11212|1F2F01202|FF2F11212 12|FF2F01212|FF2F01212|FF2F01202|FF2F01212 13|21210F212|21210F212|2F200F202|21210F212 14|1010F0212|1010F0212|101FFF202|1010F0212 15|1010F0212|1010F0212|101FFF202|1010F0212 16|10F0FF212|10F0FF212|10FFFF202|10F0FF212 17|F01FF0212|F01FF0212|F01FFF202|F01FF0212 18|101FF0212|101FF0212|101FFF202|101FF0212 19|F01FF0212|F01FF0212|F01FFF212|F01FF0212 20|101FF0212|101FF0212|101FFF212|101FF0212 21|1010FF212|1010FF212|101FFF202|1010FF212 22|1010FF212|1010FF212|101FFF202|1010FF212 23|10F0FF212|10F0FF212|10FFFF202|10F0FF212 24|101FFF212|1010FF212|101FFF202|101FFF212 25|1FFFFFFF2|10FF0FFF2|1FFFFFFF2|1FFFFFFF2 26|1FF0FF212|F1F0FF212|01FFFF212|1FF0FF212 27|11F00F212|F1F00F212|11FFFF212|11F00F212 28|10FF0FFF2|10FF0FFF2|1FFFFFFF2|10FF0FFF2 29|FF1FF0102|FF1FF0102|FF1FF0102|FF1FF0102 30|FF1FF0102|FF1FF0102|FF1FFF1F2|FF1FF0102 31|FF1FF01F2|FF1FF01F2|FF1FF01F2|FF1FF01F2 32|FF1FF01F2|FF1FF0102|FF1FFF1F2|FF1FF01F2 33|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 34|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 35|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 36|10F00FFF2|10F00FFF2|1FFFFFFF2|10F00FFF2 37|1FFFFFFF2|10FF0FFF2|1FFFFFFF2|1FFFFFFF2 38|10FF0FFF2|10FF0FFF2|1FFFFFFF2|10FF0FFF2 39|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 40|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 41|FF10F0102|FF10F0102|0F1FFF1F2|FF10F0102 42|FF10F0102|FF10F0102|0F1FFF1F2|FF10F0102 43|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 44|1F1F00102|1F1F00102|1F1FFF1F2|1F1F00102 45|1FFF0F1F2|1FFF0F1F2|1FFFFF1F2|1FFF0F1F2 46|101FFF102|101FF0102|1F1FFF1F2|101FFF102 47|101FF0FF2|101FF0FF2|1F1FFFFF2|101FF0FF2 48|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 49|0F0FFF212|0F0FFF212|0F0FFF212|0F0FFF212 50|F00FFF212|F00FFF212|F00FFF212|F00FFF212 51|00FFFF212|00FFFF212|00FFFF212|00FFFF212 52|000FFF212|000FFF212|000FFF212|000FFF212 53|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 54|FF0FFF102|FF0FFF102|FF0FFF1F2|FF0FFF102 55|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 56|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 57|F00FFF102|F00FFF102|0F0FFF1F2|F00FFF102 58|00FFFF102|00FFFF102|0FFFFF1F2|00FFFF102 59|0F0FFF102|0F0FFF102|0F0FFF1F2|0F0FFF102 60|0F0FFF102|0F0FFF102|0F0FFF1F2|0F0FFF102 61|0F0FFF102|0F0FFF102|0F0FFF1F2|0F0FFF102 62|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2 63|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2 64|0F0FFF0F2|0F0FFF0F2|0F0FFF0F2|0F0FFF0F2 65|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2 66|212111212|212111212|212101212|212111212 67|212111212|212111212|212101212|212111212 68|2FFF1FFF2|2FFF1FFF2|2FFF0FFF2|2FFF1FFF2 69|2FFF1FFF2|2FFF1FFF2|2FFF0FFF2|2FFF1FFF2 70|2FFF1FFF2|2FFF1FFF2|2FFF0FFF2|2FFF1FFF2 71|2FFF1FFF2|2FFF1FFF2|2FFF0FFF2|2FFF1FFF2 72|FF2FF1212|FF2FF1212|FF2FF1212|FF2FF1212 73|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 74|FF2F01212|FF2F01212|FF2F0F202|FF2F01212 75|FF2F01212|FF2F01212|FF2F0F202|FF2F01212 76|FF2F01212|FF2F01212|FF2F002F2|FF2F01212 77|FF2F01212|FF2F01212|FF2F00202|FF2F01212 78|FF2F01212|FF2F01212|FF2F00202|FF2F01212 79|FF2F01212|FF2F01212|FF2F00202|FF2F01212 80|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 81|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 82|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 83|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 84|FF2F01212|FF2F01212|FF2F002F2|FF2F01212 85|FF2F01212|FF2F01212|FF2F00202|FF2F01212 86|FF2F01212|FF2F01212|FF2F00202|FF2F01212 87|FF2F01212|FF2F01212|FF2F00202|FF2F01212 88|FF2F01212|FF2F01212|FF2F00202|FF2F01212 89|FF2F11212|FF2F11212|1F2F0F2F2|FF2F11212 90|FF2F11212|FF2F11212|1F2F0F2F2|FF2F11212 91|FF2F11212|FF2F11212|1F2F0F202|FF2F11212 92|FF2F11212|FF2F11212|1F2F0F202|FF2F11212 93|FF2F11212|FF2F11212|1F2F0F2F2|FF2F11212 94|FF2F11212|FF2F11212|1F2F0F202|FF2F11212 95|FF2F11212|FF2F11212|1F2F00202|FF2F11212 96|FF2F11212|FF2F11212|1F2F0F202|FF2F11212 97|FF2F11212|FF2F11212|1F2F0F2F2|FF2F11212 98|FF2F11212|FF2F11212|1F2F0F202|FF2F11212 99|212FF1FF2|212FF1FF2|212FF1FF2|212FF1FF2 100|212F01FF2|212F01FF2|2F2F0FFF2|212F01FF2 101|212F01FF2|212F01FF2|202F0FFF2|212F01FF2 102|212F01FF2|212F01FF2|2F2F00FF2|212F01FF2 103|212F01FF2|212F01FF2|202F00FF2|212F01FF2 104|212F01FF2|212F01FF2|2F2F00FF2|212F01FF2 105|212F01FF2|212F01FF2|202F00FF2|212F01FF2 106|212F01FF2|212F01FF2|2F2F0FFF2|212F01FF2 107|212F01FF2|212F01FF2|2F2F0FFF2|212F01FF2 108|212F01FF2|212F01FF2|2F2F00FF2|212F01FF2 109|212F01FF2|212F01FF2|2F2F00FF2|212F01FF2 110|212F01FF2|212F01FF2|202F00FF2|212F01FF2 111|212F01FF2|212F01FF2|202F00FF2|212F01FF2 112|212F11FF2|212F11FF2|2F2F0FFF2|212F11FF2 113|212F11FF2|212F11FF2|2F2F0FFF2|212F11FF2 114|212F11FF2|212F11FF2|2F2F0FFF2|212F11FF2 115|212F11FF2|212F11FF2|202F0FFF2|212F11FF2 116|212F11FF2|212F11FF2|2F2F0FFF2|212F11FF2 117|212F11FF2|212F11FF2|202F0FFF2|212F11FF2 118|212F11FF2|212F11FF2|2F2F0FFF2|212F11FF2 119|212F11FF2|212F11FF2|2F2F00FF2|212F11FF2 120|212F11FF2|212F11FF2|2F2F0FFF2|212F11FF2 121|212111212|212111212|212101212|212111212 122|212111212|212111212|2F2F0F2F2|212111212 123|212101212|212101212|212101212|212101212 124|212111212|212111212|212101212|212111212 125|212101212|212101212|2F2F0F2F2|212101212 126|212101212|212101212|2F2F0F2F2|212101212 127|212101212|212101212|2F2F0F202|212101212 128|212101212|212101212|2F2F0F202|212101212 129|212101212|212101212|2F2F0F202|212101212 130|212101212|212101212|212101212|212101212 131|212101212|212101212|212101212|212101212 132|212101212|212101212|212101212|212101212 133|212101212|212101212|212101212|212101212 134|212111212|212111212|212101212|212111212 135|212111212|212111212|212101212|212111212 136|212111212|212111212|212101212|212111212 137|212111212|212111212|212101212|212111212 138|212111212|212111212|212101212|212111212 139|212111212|212111212|212101212|212111212 140|212111212|212111212|212101212|212111212 141|212111212|212111212|212101212|212111212 142|212111212|212111212|212101212|212111212 143|212101212|212101212|212101212|212101212 144|212111212|212111212|212101212|212111212 145|212101212|212101212|212101212|212101212 146|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 147|FF2F01212|FF2F01212|FF2F0F212|FF2F01212 148|FF2F01212|FF2F01212|FF2F00212|FF2F01212 149|FF2F01212|FF2F01212|FF2F0F212|FF2F01212 150|FF2F01212|FF2F01212|FF2F0F212|FF2F01212 151|FF2F01212|FF2F01212|FF2F0F212|FF2F01212 152|FF2F01212|FF2F01212|FF2F00212|FF2F01212 153|FF2F1F212|FF2F1F212|1F2F0F212|FF2F1F212 154|FF2F11212|FF2F11212|1F2F0F212|FF2F11212 155|FF2F11212|FF2F11212|1F2F0F212|FF2F11212 156|FF2F11212|FF2F11212|1F2F00212|FF2F11212 157|2FF1FF212|2FF1FF212|2FF1FF212|2FF1FF212 158|2FF1FF212|2FF1FF212|2FF1FF212|2FF1FF212 159|2FF11F212|2FF11F212|2FF00F212|2FF11F212 160|2FF11F212|2FF11F212|2FFF0F212|2FF11F212 161|2FF11F212|2FF11F212|2FFF0F212|2FF11F212 162|2FFF1FFF2|2FFF1FFF2|2FFF0FFF2|2FFF1FFF2 163|2FFF1FFF2|2FFF1FFF2|2FFF0FFF2|2FFF1FFF2 164|FF2F01212|FF2F01212|FF2F0F202|FF2F01212 165|FF2F01212|FF2F01212|FF2F00202|FF2F01212 166|FF2F01212|FF2F01212|FF2F00202|FF2F01212 167|FF2F01212|FF2F01212|FF2F0F212|FF2F01212 168|FF2F11212|FF2F11212|1F2F0F202|FF2F11212 169|FF2F11212|FF2F11212|1F2F00202|FF2F11212 170|21210F212|21210F212|2F200F202|21210F212 171|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 172|FF2F01212|FF2F01212|FF2F0F2F2|FF2F01212 173|FF2F11212|FF2F11212|1F2F0F2F2|FF2F11212 174|FF2F11212|FF2F11212|1F2F0F2F2|FF2F11212 175|FF2F11212|FF2F11212|1F2F0F2F2|FF2F11212 176|212111212|212111212|212101212|212111212 177|21210F212|21210F212|2F200F202|21210F212 178|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 179|FF1F0F212|FF1F0F212|F01FFF202|FF1F0F212 180|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 181|F1FF0F212|F1FF0F212|10FFFF202|F1FF0F212 182|F11F00212|F11F00212|101FFF202|F11F00212 183|F11F0F212|F11F0F212|101FFF202|F11F0F212 184|F11FF0212|F11FF0212|101FFF202|F11FF0212 185|1010F0212|1010F0212|101FFF202|1010F0212 186|101FF0212|101FF0212|101FFF202|101FF0212 187|1010F0212|1010F0212|101FFF2F2|1010F0212 188|101FF0212|101FF0212|101FFF2F2|101FF0212 189|1010F0212|1010F0212|101FFF202|1010F0212 190|101FF0212|101FF0212|101FFF202|101FF0212 191|1010F0212|1010F0212|101FFF2F2|1010F0212 192|1FF0FF212|1FF0FF212|1FFFFF212|1FF0FF212 193|1FFF0F212|1FFF0F212|10FFFF202|1FFF0F212 194|1FF00F212|1FF00F212|10FFFF202|1FF00F212 195|11F00F212|11F00F212|10FFFF202|11F00F212 196|11F0FF212|11F0FF212|10FFFF202|11F0FF212 197|FF1FF0212|FF1FF0212|FF1FFF212|FF1FF0212 198|FF1FF0212|FF1FF0212|FF1FFF212|FF1FF0212 199|FF1F00212|FF1F00212|F01FFF212|FF1F00212 200|FF1F0F212|FF1F0F212|F01FFF212|FF1F0F212 201|F01FF0212|F01FF0212|F01FFF2F2|F01FF0212 202|F01FF0212|F01FF0212|F01FFF202|F01FF0212 203|F01FF0212|F01FF0212|101FFF202|F01FF0212 204|F01FF0212|F01FF0212|101FFF202|F01FF0212 205|F01FF0212|F01FF0212|F01FFF2F2|F01FF0212 206|F01FF0212|F01FF0212|F01FFF202|F01FF0212 207|F01FF0212|F01FF0212|0F1FFF202|F01FF0212 208|F01FF0212|F01FF0212|0F1FFF202|F01FF0212 209|FF1F00212|FF1F00212|F01FFF212|FF1F00212 210|F01FF0212|F01FF0212|F01FFF212|F01FF0212 211|F01FF0212|F01FF0212|F01FFF212|F01FF0212 212|F01FF0212|F01FF0212|F01FFF212|F01FF0212 213|F01FF0212|F01FF0212|F01FFF212|F01FF0212 214|F01FF0212|F01FF0212|F01FFF212|F01FF0212 215|F01FF0212|F01FF0212|F01FFF212|F01FF0212 216|F01FF0212|F01FF0212|F01FFF212|F01FF0212 217|1010FF212|1010FF212|101FFF202|1010FF212 218|1010FF212|1010FF212|101FFF202|1010FF212 219|10F0FF212|10F0FF212|10FFFF202|10F0FF212 220|F01FFF212|FF1F0F212|F01FFF202|F01FFF212 221|F01FFF212|FF1F0F212|F01FFF202|F01FFF212 222|F01FFF212|FF1F0F212|F01FFF212|F01FFF212 223|F1FFFF2F2|F1FF0F2F2|10FFFF2F2|F1FFFF2F2 224|F1FFFF212|F1FF0F212|10FFFF212|F1FFFF212 225|F11FFF212|F11F0F212|101FFF212|F11FFF212 226|F11FFF212|F11F0F212|101FFF212|F11FFF212 227|101FFF212|1010FF212|101FFF202|101FFF212 228|101FFF212|101FF0212|101FFF2F2|101FFF212 229|1FFFFF212|1FF0FF212|1FFFFF212|1FFFFF212 230|1FFFFF212|1FF0FF212|1FFFFF212|1FFFFF212 231|10FFFF212|1FFF0F212|10FFFF212|10FFFF212 232|10FFFF212|1FFF0F212|10FFFF212|10FFFF212 233|11FFFF212|11FF0F212|10FFFF212|11FFFF212 234|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 235|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 236|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 237|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 238|F11F00212|F11F00212|101FFF2F2|F11F00212 239|111F00212|111F00212|101FFF2F2|111F00212 240|1FF0FF212|1FF0FF212|1FFFFF212|1FF0FF212 241|11F00F212|11F00F212|10FFFF2F2|11F00F212 242|F01FF0212|F01FF0212|F01FFF212|F01FF0212 243|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 244|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 245|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 246|1010F0212|1010F0212|101FFF2F2|1010F0212 247|1010F0212|1010F0212|101FFF2F2|1010F0212 248|1010F0212|1010F0212|101FFF2F2|1010F0212 249|1010F0212|1010F0212|101FFF2F2|1010F0212 250|1FF0FF212|1FF0FF212|1FFFFF212|1FF0FF212 251|11F00F212|11F00F212|10FFFF2F2|11F00F212 252|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 253|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 254|FF1F00212|FF1F00212|F01FFF2F2|FF1F00212 255|1FFFFFFF2|10FF0FFF2|1FFFFFFF2|1FFFFFFF2 256|1FF0FF212|F1F0FF212|01FFFF212|1FF0FF212 257|11F00F212|F1F00F212|11FFFF212|11F00F212 258|10FF0FFF2|10FF0FFF2|1FFFFFFF2|10FF0FFF2 259|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 260|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 261|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 262|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 263|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 264|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 265|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 266|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 267|FF1FF0102|FF1FF0102|FF1FFF1F2|FF1FF0102 268|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 269|101F00FF2|101F00FF2|1F1FFFFF2|101F00FF2 270|101FF0FF2|101FF0FF2|1F1FFFFF2|101FF0FF2 271|1010F0102|1010F0102|1F1FFF1F2|1010F0102 272|1010F0102|1010F0102|1F1FFF1F2|1010F0102 273|1010F0102|1010F0102|1F1FFF1F2|1010F0102 274|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 275|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 276|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 277|FF10FF102|FF10FF102|0F1FFF1F2|FF10FF102 278|FF10FF102|FF10FF102|0F1FFF1F2|FF10FF102 279|FF1F0F1F2|FF1F0F1F2|0F1FFF1F2|FF1F0F1F2 280|FF1F0F1F2|FF1F0F1F2|0F1FFF1F2|FF1F0F1F2 281|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 282|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 283|F01FF01F2|F01FF01F2|0F1FFF1F2|F01FF01F2 284|F010F0102|F010F0102|0F1FFF1F2|F010F0102 285|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 286|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 287|F01FF01F2|F01FF01F2|0F1FFF1F2|F01FF01F2 288|0F1F00102|0F1F00102|0F1FFF1F2|0F1F00102 289|0F1F0F1F2|0F1F0F1F2|0F1FFF1F2|0F1F0F1F2 290|0F1F00102|0F1F00102|0F1FFF1F2|0F1F00102 291|0F1F0F1F2|0F1F0F1F2|0F1FFF1F2|0F1F0F1F2 292|0F10F0102|0F10F0102|0F1FFF1F2|0F10F0102 293|0F10F0102|0F10F0102|0F1FFF1F2|0F10F0102 294|0F100F102|0F100F102|0F1FFF1F2|0F100F102 295|0010F0102|0010F0102|0F1FFF1F2|0010F0102 296|0010F0102|0010F0102|0F1FFF1F2|0010F0102 297|0F10F0102|0F10F0102|0F1FFF1F2|0F10F0102 298|0F10F0102|0F10F0102|0F1FFF1F2|0F10F0102 299|0F10F0102|0F10F0102|0F1FFF1F2|0F10F0102 300|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 301|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 302|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 303|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 304|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 305|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 306|001FF0102|001FF0102|0F1FFF1F2|001FF0102 307|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 308|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 309|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 310|FF1FF0102|FF1FF0102|FF1FF0102|FF1FF0102 311|FF1FF0102|FF1FF0102|FF1FFF1F2|FF1FF0102 312|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 313|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 314|101F00FF2|101F00FF2|1F1FFFFF2|101F00FF2 315|101FF0FF2|101FF0FF2|1F1FFFFF2|101FF0FF2 316|101FF0FF2|101FF0FF2|1F1FFFFF2|101FF0FF2 317|101FF0FF2|101FF0FF2|1F1FFFFF2|101FF0FF2 318|1010F0102|1010F0102|1F1FFF1F2|1010F0102 319|1F1F00102|1F1F00102|1F1FFF1F2|1F1F00102 320|1F1F00102|1F1F00102|1F1FFF1F2|1F1F00102 321|1010F0102|1010F0102|1F1FFF1F2|1010F0102 322|1010F0102|1010F0102|1F1FFF1F2|1010F0102 323|1F1F00102|1F1F00102|1F1FFF1F2|1F1F00102 324|1F1FF0102|1F1FF0102|1F1FFF1F2|1F1FF0102 325|101FF0102|101FF0102|1F1FFF1F2|101FF0102 326|101FF0102|101FF0102|1F1FFF1F2|101FF0102 327|1F1FF0102|1F1FF0102|1F1FFF1F2|1F1FF0102 328|1F1FF0102|1F1FF0102|1F1FFF1F2|1F1FF0102 329|FF10F01F2|FF1F001F2|0F1FFF1F2|FF10F01F2 330|0F1FF01F2|F01FF01F2|0F1FFF1F2|0F1FF01F2 331|0F1FF01F2|F01FF01F2|0F1FFF1F2|0F1FF01F2 332|0F1FF01F2|F01FF01F2|0F1FFF1F2|0F1FF01F2 333|1FF0FF1F2|1FF00F1F2|1FFFFF1F2|1FF0FF1F2 334|1FF0FF1F2|1FF00F1F2|1FFFFF1F2|1FF0FF1F2 335|1FF0FF1F2|10F0FF1F2|1FFFFF1F2|1FF0FF1F2 336|1F10F01F2|1F1F001F2|1F1FFF1F2|1F10F01F2 337|1F10F01F2|1F1F001F2|1F1FFF1F2|1F10F01F2 338|1F1FF01F2|101FF01F2|1F1FFF1F2|1F1FF01F2 339|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 340|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 341|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 342|0F1FF01F2|F01FF01F2|0F1FFF1F2|0F1FF01F2 343|0F1FF01F2|F01FF01F2|0F1FFF1F2|0F1FF01F2 344|0F1FF01F2|F01FF01F2|0F1FFF1F2|0F1FF01F2 345|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 346|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 347|0F1FF01F2|0F1FF0102|0F1FFF1F2|0F1FF01F2 348|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 349|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 350|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 351|0F1FF01F2|0F1FF0102|0F1FFF1F2|0F1FF01F2 352|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 353|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 354|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 355|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 356|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 357|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 358|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 359|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 360|F01FF0102|F01FF0102|0F1FFF1F2|F01FF0102 361|FF10F0102|FF10F0102|0F1FFF1F2|FF10F0102 362|101FF0102|101FF0102|1F1FFF1F2|101FF0102 363|101FF0102|101FF0102|1F1FFF1F2|101FF0102 364|FF10F0102|FF10F0102|0F1FFF1F2|FF10F0102 365|1FFFFFFF2|1FFF0FFF2|1FFFFFFF2|1FFFFFFF2 366|1FFFFFFF2|1FFF0FFF2|1FFFFFFF2|1FFFFFFF2 367|1FFFFFFF2|10F0FFFF2|1FFFFFFF2|1FFFFFFF2 368|1FFFFFFF2|10F0FFFF2|1FFFFFFF2|1FFFFFFF2 369|0F1FFF1F2|FF1F0F1F2|0F1FFF1F2|0F1FFF1F2 370|0F1FFF1F2|0F1F0F1F2|0F1FFF1F2|0F1FFF1F2 371|0F1FFF1F2|FF10FF102|0F1FFF1F2|0F1FFF1F2 372|0F1FFF1F2|FF10FF102|0F1FFF1F2|0F1FFF1F2 373|0F1FFF1F2|0F1FF0102|0F1FFF1F2|0F1FFF1F2 374|0F1FFF1F2|0F10FF102|0F1FFF1F2|0F1FFF1F2 375|1F1FFF1F2|1F1F0F1F2|1F1FFF1F2|1F1FFF1F2 376|1F1FFF1F2|1F10FF102|1F1FFF1F2|1F1FFF1F2 377|1F1FFF1F2|1F1F0F1F2|1F1FFF1F2|1F1FFF1F2 378|F01FFF102|FF1F0F102|0F1FFF1F2|F01FFF102 379|F01FFF102|FF1F0F102|0F1FFF1F2|F01FFF102 380|F01FFF102|FF1F0F102|0F1FFF1F2|F01FFF102 381|101FFF102|1010FF102|1F1FFF1F2|101FFF102 382|101FFF1F2|1010FF1F2|1F1FFF1F2|101FFF1F2 383|0F1FFF1F2|FF1F0F1F2|0F1FFF1F2|0F1FFF1F2 384|0F1FFF1F2|0F1FF0102|0F1FFF1F2|0F1FFF1F2 385|0F1FFF1F2|0F1FF0102|0F1FFF1F2|0F1FFF1F2 386|0F1FFF1F2|0F1FF0102|0F1FFF1F2|0F1FFF1F2 387|0F1FFF1F2|0F1FF0102|0F1FFF1F2|0F1FFF1F2 388|0F1FFF1F2|0F1FF0102|0F1FFF1F2|0F1FFF1F2 389|1FFFFFFF2|1FFF0FFF2|1FFFFFFF2|1FFFFFFF2 390|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 391|1FFF0FFF2|1FFF0FFF2|1FFFFFFF2|1FFF0FFF2 392|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 393|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 394|FF1F00102|FF1F00102|0F1FFF1F2|FF1F00102 395|FF10F0102|FF1F00102|0F1FFF1F2|FF10F0102 396|FF10F0102|FF1F00102|0F1FFF1F2|FF10F0102 397|FF10F0102|FF1F00102|0F1FFF1F2|FF10F0102 398|FF10F0102|FF1F00102|0F1FFF1F2|FF10F0102 399|FF10F0102|FF1F00102|0F1FFF1F2|FF10F0102 400|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 401|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 402|0F1FF0102|0F1FF0102|0F1FFF1F2|0F1FF0102 403|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 404|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 405|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 406|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 407|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 408|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 409|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 410|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 411|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 412|0FFFFF212|0FFFFF212|0FFFFF212|0FFFFF212 413|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 414|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 415|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 416|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 417|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 418|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 419|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 420|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 421|0FFFFF212|0FFFFF212|0FFFFF212|0FFFFF212 422|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 423|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 424|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 425|F00FFF212|F00FFF212|F00FFF212|F00FFF212 426|F00FFF212|F00FFF212|F00FFF212|F00FFF212 427|F00FFF212|F00FFF212|F00FFF212|F00FFF212 428|F00FFF212|F00FFF212|F00FFF212|F00FFF212 429|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 430|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 431|000FFF212|000FFF212|000FFF212|000FFF212 432|000FFF212|000FFF212|000FFF212|000FFF212 433|000FFF212|000FFF212|000FFF212|000FFF212 434|0F0FFF212|0F0FFF212|0F0FFF212|0F0FFF212 435|000FFF212|000FFF212|000FFF212|000FFF212 436|0FFFFF212|0FFFFF212|0FFFFF212|0FFFFF212 437|00FFFF212|00FFFF212|00FFFF212|00FFFF212 438|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 439|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 440|FF0FFF212|FF0FFF212|FF0FFF212|FF0FFF212 441|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 442|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 443|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 444|F0FFFF212|F0FFFF212|F0FFFF212|F0FFFF212 445|FF0FFF102|FF0FFF102|FF0FFF1F2|FF0FFF102 446|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 447|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 448|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 449|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 450|FF0FFF1F2|FF0FFF102|FF0FFF1F2|FF0FFF1F2 451|FF0FFF1F2|FF0FFF102|FF0FFF1F2|FF0FFF1F2 452|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 453|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 454|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 455|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 456|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 457|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 458|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 459|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 460|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 461|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 462|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 463|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 464|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 465|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 466|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 467|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 468|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 469|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 470|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 471|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 472|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 473|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 474|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 475|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 476|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 477|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 478|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 479|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 480|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 481|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 482|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 483|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 484|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 485|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 486|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 487|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 488|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 489|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 490|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 491|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 492|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 493|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 494|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 495|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 496|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 497|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 498|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 499|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 500|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 501|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 502|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 503|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 504|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 505|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 506|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 507|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 508|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 509|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 510|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 511|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 512|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 513|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 514|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 515|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 516|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 517|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 518|F0FFFF102|F0FFFF102|0FFFFF1F2|F0FFFF102 519|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 520|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 521|0FFFFF1F2|F0FFFF1F2|0FFFFF1F2|0FFFFF1F2 522|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 523|0FFFFF1F2|0FFFFF102|0FFFFF1F2|0FFFFF1F2 524|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 525|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 526|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 527|FF0FFF102|FF0FFF102|FF0FFF1F2|FF0FFF102 528|FF0FFF102|FF0FFF102|FF0FFF1F2|FF0FFF102 529|F00FFF102|F00FFF102|0F0FFF1F2|F00FFF102 530|F00FFF102|F00FFF102|0F0FFF1F2|F00FFF102 531|0F0FFF102|0F0FFF102|0F0FFF1F2|0F0FFF102 532|0F0FFF102|0F0FFF102|0F0FFF1F2|0F0FFF102 533|0F0FFF102|0F0FFF102|0F0FFF1F2|0F0FFF102 534|0F0FFF102|0F0FFF102|0F0FFF1F2|0F0FFF102 535|00FFFF1F2|00FFFF1F2|0FFFFF1F2|00FFFF1F2 536|00FFFF102|00FFFF102|0FFFFF1F2|00FFFF102 537|00FFFF102|00FFFF102|0FFFFF1F2|00FFFF102 538|00FFFF102|00FFFF102|0FFFFF1F2|00FFFF102 539|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 540|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 541|0FFFFF102|0FFFFF102|0FFFFF1F2|0FFFFF102 542|00FFFF102|00FFFF102|0FFFFF1F2|00FFFF102 543|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2 544|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2 545|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2 546|0FFFFF0F2|0FFFFF0F2|0FFFFF0F2|0FFFFF0F2 547|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2 548|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2 549|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2|FF0FFF0F2 550|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2 551|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2|0FFFFFFF2 552|0F0FFFFF2|0F0FFFFF2|0F0FFFFF2|0F0FFFFF2 553|0F0FFFFF2|0F0FFFFF2|0F0FFFFF2|0F0FFFFF2 554|0F0FFF0F2|0F0FFF0F2|0F0FFF0F2|0F0FFF0F2 555|0F0FFF0F2|0F0FFF0F2|0F0FFF0F2|0F0FFF0F2 ERROR: GEOSRelate: Invalid boundary node rule 5 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_index_nulls.sql���������������������������������������������0000644�0000000�0000000�00000003454�12211534446�022041� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\i regress_lots_of_nulls.sql SET client_min_messages TO NOTICE; CREATE INDEX "test_geom_idx" ON "test" using gist (the_geom); DROP TABLE "test"; -- Test node splits in geometry and geography with null-filled, empty-filled, and mixed collections of rows -- Previous issues showed crashing behaviour, so if we don't crash, we're golden. -- Mixed null/empty on geography drop table if exists indexnulls; create table indexnulls (g geography, id integer); create index nulls_gix on indexnulls using gist (g); insert into indexnulls (id, g) with n as ( select null::geography as p ), e as (select 'point(0 0)'::geography as p), a as (select * from n union all select * from e) select generate_series as id, p as g from generate_series(1,1000),a order by generate_series; drop table indexnulls; -- Mixed null/empty on geometry drop table if exists indexnulls; create table indexnulls (g geometry, id integer); create index nulls_gix on indexnulls using gist (g); insert into indexnulls (id, g) with n as ( select null::geometry as p ), e as (select 'point(0 0)'::geometry as p), a as (select * from n union all select * from e) select generate_series as id, p as g from generate_series(1,1000),a order by generate_series; drop table indexnulls; -- All empty on geometry drop table if exists indexempty; create table indexempty (g geography, id integer); create index empty_gix on indexempty using gist (g); insert into indexempty (id, g) select generate_series, 'POINT EMPTY'::geography from generate_series(1,1000); drop table indexempty; -- All empty on geometry drop table if exists indexempty; create table indexempty (g geometry, id integer); create index empty_gix on indexempty using gist (g); insert into indexempty (id, g) select generate_series, 'POINT EMPTY':: geometry from generate_series(1,1000); drop table indexempty; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-circularstring.sql�������������������������������������������0000644�0000000�0000000�00000035776�12200634326�022232� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; SELECT 'ndims01', ST_ndims(ST_geomfromewkt('CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2)')); SELECT 'geometrytype01', geometrytype(ST_geomfromewkt('CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2)')); SELECT 'ndims02', ST_ndims(ST_geomfromewkt('CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511981127579 1.4142135623730950488016887242097 1)')); SELECT 'geometrytype02', geometrytype(ST_geomfromewkt('CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511981127579 1.4142135623730950488016887242097 1)')); SELECT 'ndims03', ST_ndims(ST_geomfromewkt('CIRCULARSTRINGM( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511981127579 1.4142135623730950488016887242097 2)')); SELECT 'geometrytype03', geometrytype(ST_geomfromewkt('CIRCULARSTRINGM( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511981127579 1.4142135623730950488016887242097 2)')); SELECT 'ndims04', ST_ndims(ST_geomfromewkt('CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511981127579 1.4142135623730950488016887242097)')); SELECT 'geometrytype04', geometrytype(ST_geomfromewkt('CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511981127579 1.4142135623730950488016887242097)')); SELECT 'isClosed01', ST_isClosed(ST_geomfromewkt('CIRCULARSTRING( 0 -2, -2 0, 0 2, 2 0, 0 -2)')); SELECT 'isSimple01', ST_isSimple(ST_geomfromewkt('CIRCULARSTRING( 0 -2, -2 0, 0 2, 2 0, 0 -2)')); SELECT 'isRing01', ST_isRing(ST_geomfromewkt('CIRCULARSTRING( 0 -2, -2 0, 0 2, 2 0, 0 -2)')); SELECT 'isClosed02', ST_isClosed(ST_geomfromewkt('CIRCULARSTRING( 0 -2, -2 0, 0 2, -2 0, 2 -2, -2 0, -2 -2, -2 0, 0 -2)')); SELECT 'isSimple02', ST_isSimple(ST_geomfromewkt('CIRCULARSTRING( 0 -2, -2 0, 0 2, -2 0, 2 -2, -2 0, -2 -2, -2 0, 0 -2)')); SELECT 'isRing02', ST_isRing(ST_geomfromewkt('CIRCULARSTRING( 0 -2, -2 0, 0 2, -2 0, 2 -2, -2 0, -2 -2, -2 0, 0 -2)')); CREATE TABLE public.circularstring (id INTEGER, description VARCHAR, the_geom_2d GEOMETRY(CIRCULARSTRING), the_geom_3dm GEOMETRY(CIRCULARSTRINGM), the_geom_3dz GEOMETRY(CIRCULARSTRINGZ), the_geom_4d GEOMETRY(CIRCULARSTRINGZM)); INSERT INTO public.circularstring ( id, description ) VALUES ( 1, '180-135 degrees'); UPDATE public.circularstring SET the_geom_4d = ST_Geomfromewkt('CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2)') WHERE id = 1; UPDATE public.circularstring SET the_geom_3dz = ST_Geomfromewkt('CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511981127579 1.4142135623730950488016887242097 1)') WHERE id = 1; UPDATE public.circularstring SET the_geom_3dm = ST_Geomfromewkt('CIRCULARSTRINGM( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511981127579 1.4142135623730950488016887242097 2)') WHERE id = 1; UPDATE public.circularstring SET the_geom_2d = ST_Geomfromewkt('CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511981127579 1.4142135623730950488016887242097)') WHERE id = 1; INSERT INTO public.circularstring ( id, description ) VALUES ( 2, '2-segment string'); UPDATE public.circularstring SET the_geom_4d = ST_Geomfromewkt('CIRCULARSTRING( -5 0 0 4, 0 5 1 3, 5 0 2 2, 10 -5 3 1, 15 0 4 0)') WHERE id = 2; UPDATE public.circularstring SET the_geom_3dz = ST_Geomfromewkt('CIRCULARSTRING( -5 0 0, 0 5 1, 5 0 2, 10 -5 3, 15 0 4)') WHERE id = 2; UPDATE public.circularstring SET the_geom_3dm = ST_Geomfromewkt('CIRCULARSTRINGM( -5 0 4, 0 5 3, 5 0 2, 10 -5 1, 15 0 0)') WHERE id = 2; UPDATE public.circularstring SET the_geom_2d = ST_Geomfromewkt('CIRCULARSTRING( -5 0, 0 5, 5 0, 10 -5, 15 0)') WHERE id = 2; SELECT 'astext01', ST_astext(the_geom_2d) FROM public.circularstring; SELECT 'astext02', ST_astext(the_geom_3dm) FROM public.circularstring; SELECT 'astext03', ST_astext(the_geom_3dz) FROM public.circularstring; SELECT 'astext04', ST_astext(the_geom_4d) FROM public.circularstring; SELECT 'asewkt01', ST_asewkt(the_geom_2d) FROM public.circularstring; SELECT 'asewkt02', ST_asewkt(the_geom_3dm) FROM public.circularstring; SELECT 'asewkt03', ST_asewkt(the_geom_3dz) FROM public.circularstring; SELECT 'asewkt04', ST_asewkt(the_geom_4d) FROM public.circularstring; -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(asbinary(the_geom_2d), 'hex') FROM public.circularstring; --SELECT 'asbinary02', encode(asbinary(the_geom_3dm), 'hex') FROM public.circularstring; --SELECT 'asbinary03', encode(asbinary(the_geom_3dz), 'hex') FROM public.circularstring; --SELECT 'asbinary04', encode(asbinary(the_geom_4d), 'hex') FROM public.circularstring; -- --SELECT 'asewkb01', encode(asewkb(the_geom_2d), 'hex') FROM public.circularstring; --SELECT 'asewkb02', encode(asewkb(the_geom_3dm), 'hex') FROM public.circularstring; --SELECT 'asewkb03', encode(asewkb(the_geom_3dz), 'hex') FROM public.circularstring; --SELECT 'asewkb04', encode(asewkb(the_geom_4d), 'hex') FROM public.circularstring; SELECT 'ST_CurveToLine-201', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine-202', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine-203', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine-204', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine-401', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine-402', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine-403', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine-404', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine01', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine02', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine03', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'ST_CurveToLine04', ST_asewkt( ST_SnapToGrid(ST_CurveToLine(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; --Removed due to discrepencies between hardware --SELECT 'box2d01', box2d(the_geom_2d) FROM public.circularstring; --SELECT 'box2d02', box2d(the_geom_3dm) FROM public.circularstring; --SELECT 'box2d03', box2d(the_geom_3dz) FROM public.circularstring; --SELECT 'box2d04', box2d(the_geom_4d) FROM public.circularstring; --SELECT 'box3d01', box3d(the_geom_2d) FROM public.circularstring; --SELECT 'box3d02', box3d(the_geom_3dm) FROM public.circularstring; --SELECT 'box3d03', box3d(the_geom_3dz) FROM public.circularstring; --SELECT 'box3d04', box3d(the_geom_4d) FROM public.circularstring; -- TODO: ST_SnapToGrid is required to remove platform dependent precision -- issues. Until ST_SnapToGrid is updated to work against curves, these -- tests cannot be run. --SELECT 'ST_LineToCurve01', ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_2d))) FROM public.circularstring; --SELECT 'ST_LineToCurve02', ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dm))) FROM public.circularstring; --SELECT 'ST_LineToCurve03', ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dz))) FROM public.circularstring; --SELECT 'ST_LineToCurve04', ST_asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_4d))) FROM public.circularstring; -- Repeat tests with new function names. SELECT 'astext01', ST_astext(the_geom_2d) FROM public.circularstring; SELECT 'astext02', ST_astext(the_geom_3dm) FROM public.circularstring; SELECT 'astext03', ST_astext(the_geom_3dz) FROM public.circularstring; SELECT 'astext04', ST_astext(the_geom_4d) FROM public.circularstring; SELECT 'asewkt01', ST_asewkt(the_geom_2d) FROM public.circularstring; SELECT 'asewkt02', ST_asewkt(the_geom_3dm) FROM public.circularstring; SELECT 'asewkt03', ST_asewkt(the_geom_3dz) FROM public.circularstring; SELECT 'asewkt04', ST_asewkt(the_geom_4d) FROM public.circularstring; -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(ST_asbinary(the_geom_2d), 'hex') FROM public.circularstring; --SELECT 'asbinary02', encode(ST_asbinary(the_geom_3dm), 'hex') FROM public.circularstring; --SELECT 'asbinary03', encode(ST_asbinary(the_geom_3dz), 'hex') FROM public.circularstring; --SELECT 'asbinary04', encode(ST_asbinary(the_geom_4d), 'hex') FROM public.circularstring; -- --SELECT 'asewkb01', encode(ST_asewkb(the_geom_2d), 'hex') FROM public.circularstring; --SELECT 'asewkb02', encode(ST_asewkb(the_geom_3dm), 'hex') FROM public.circularstring; --SELECT 'asewkb03', encode(ST_asewkb(the_geom_3dz), 'hex') FROM public.circularstring; --SELECT 'asewkb04', encode(ST_asewkb(the_geom_4d), 'hex') FROM public.circularstring; --Removed due to discrepencies between hardware --SELECT 'box2d01', box2d(the_geom_2d) FROM public.circularstring; --SELECT 'box2d02', box2d(the_geom_3dm) FROM public.circularstring; --SELECT 'box2d03', box2d(the_geom_3dz) FROM public.circularstring; --SELECT 'box2d04', box2d(the_geom_4d) FROM public.circularstring; --SELECT 'box3d01', box3d(the_geom_2d) FROM public.circularstring; --SELECT 'box3d02', box3d(the_geom_3dm) FROM public.circularstring; --SELECT 'box3d03', box3d(the_geom_3dz) FROM public.circularstring; --SELECT 'box3d04', box3d(the_geom_4d) FROM public.circularstring; SELECT 'isValid01', ST_isValid(the_geom_2d) FROM public.circularstring; SELECT 'isValid02', ST_isValid(the_geom_3dm) FROM public.circularstring; SELECT 'isValid03', ST_isValid(the_geom_3dz) FROM public.circularstring; SELECT 'isValid04', ST_isValid(the_geom_4d) FROM public.circularstring; SELECT 'dimension01', ST_dimension(the_geom_2d) FROM public.circularstring; SELECT 'dimension02', ST_dimension(the_geom_3dm) FROM public.circularstring; SELECT 'dimension03', ST_dimension(the_geom_3dz) FROM public.circularstring; SELECT 'dimension04', ST_dimension(the_geom_4d) FROM public.circularstring; SELECT 'SRID01', ST_SRID(the_geom_2d) FROM public.circularstring; SELECT 'SRID02', ST_SRID(the_geom_3dm) FROM public.circularstring; SELECT 'SRID03', ST_SRID(the_geom_3dz) FROM public.circularstring; SELECT 'SRID04', ST_SRID(the_geom_4d) FROM public.circularstring; SELECT 'accessors01', ST_IsEmpty(the_geom_2d), ST_isSimple(the_geom_2d), ST_isClosed(the_geom_2d), ST_isRing(the_geom_2d) FROM public.circularstring; SELECT 'accessors02', ST_IsEmpty(the_geom_3dm), ST_isSimple(the_geom_3dm), ST_isClosed(the_geom_3dm), ST_isRing(the_geom_3dm) FROM public.circularstring; SELECT 'accessors03', ST_IsEmpty(the_geom_3dz), ST_isSimple(the_geom_3dz), ST_isClosed(the_geom_3dz), ST_isRing(the_geom_3dz) FROM public.circularstring; SELECT 'accessors04', ST_IsEmpty(the_geom_4d), ST_isSimple(the_geom_4d), ST_isClosed(the_geom_4d), ST_isRing(the_geom_4d) FROM public.circularstring; SELECT 'envelope01', ST_AsText(ST_SnapToGrid(ST_Envelope(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'envelope02', ST_AsText(ST_SnapToGrid(ST_Envelope(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'envelope03', ST_AsText(ST_SnapToGrid(ST_Envelope(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT 'envelope04', ST_AsText(ST_SnapToGrid(ST_Envelope(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.circularstring; SELECT DropGeometryColumn('public', 'circularstring', 'the_geom_4d'); SELECT DropGeometryColumn('public', 'circularstring', 'the_geom_3dz'); SELECT DropGeometryColumn('public', 'circularstring', 'the_geom_3dm'); SELECT DropGeometryColumn('public', 'circularstring', 'the_geom_2d'); DROP TABLE public.circularstring; SELECT ST_AsText(st_snaptogrid(box2d('CIRCULARSTRING(220268.439465645 150415.359530563,220227.333322076 150505.561285879,220227.353105332 150406.434743975)'::geometry),0.0001)); SELECT 'npoints_is_five',ST_NumPoints(ST_GeomFromEWKT('CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3)')); -- See http://trac.osgeo.org/postgis/ticket/2410 SELECT 'straight_curve',ST_AsText(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(0 0,1 0,2 0,3 0,4 0)'))); ��postgis-2.1.2+dfsg.orig/regress/wkb.sql�������������������������������������������������������������0000644�0000000�0000000�00000067201�11722777314�016557� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- POINT select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT(0 0)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT Z (1 2 3)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT M (1 2 3)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POINT ZM (1 2 3 4)' ::text as g ) as foo; -- MULTIPOINT select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT((0 0), (2 0))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT Z ((0 0 0), (2 0 1))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT M ((0 0 2), (2 0 1))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOINT ZM ((0 1 2 3), (3 2 1 0))' ::text as g ) as foo; -- LINESTRING select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING(0 0, 1 1)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING Z (0 0 2, 1 1 3)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING M (0 0 2, 1 1 3)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'LINESTRING ZM (0 0 2 3, 1 1 4 5)' ::text as g ) as foo; -- MULTILINESTRING select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING((0 0, 2 0))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING((0 0, 2 0), (1 1, 2 2))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING Z ((0 0 1, 2 0 2), (1 1 3, 2 2 4))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING M ((0 0 1, 2 0 2), (1 1 3, 2 2 4))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTILINESTRING ZM ((0 0 1 5, 2 0 2 4), (1 1 3 3, 2 2 4 2))' ::text as g ) as foo; -- POLYGON select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON((0 0,1 0,1 1,0 1,0 0))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON Z ((0 0 1,10 0 2 ,10 10 2,0 10 2,0 0 1),(2 2 5 ,2 5 4,5 5 3,5 2 3,2 2 5))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON M ((0 0 1,10 0 2 ,10 10 2,0 10 2,0 0 1),(2 2 5 ,2 5 4,5 5 3,5 2 3,2 2 5))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYGON ZM ((0 0 1 -1,10 0 2 -2,10 10 2 -2,0 10 2 -4,0 0 1 -1),(2 2 5 0,2 5 4 1,5 5 3 2,5 2 3 1,2 2 5 0))' ::text as g ) as foo; -- MULTIPOLYGON select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON Z (((0 0 3,10 0 3,10 10 3,0 10 3,0 0 3),(2 2 3,2 5 3,5 5 3,5 2 3,2 2 3)))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON M (((0 0 3,10 0 3,10 10 3,0 10 3,0 0 3),(2 2 3,2 5 3,5 5 3,5 2 3,2 2 3)))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTIPOLYGON ZM (((0 0 3 2,10 0 3 2,10 10 3 2,0 10 3 2,0 0 3 2),(2 2 3 2,2 5 3 2,5 5 3 2,5 2 3 2,2 2 3 2)))' ::text as g ) as foo; -- GEOMETRYCOLLECTION select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION ZM (POINT ZM (0 0 0 0),LINESTRING ZM (0 0 0 0,1 1 1 1))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1)))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),POINT M EMPTY,GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1)))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1),POINT M EMPTY,GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1))),POINT M EMPTY,GEOMETRYCOLLECTION M (POINT M (0 0 0),LINESTRING M (0 0 0,1 1 1)))' ::text as g ) as foo; -- CIRCULARSTRING select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CIRCULARSTRING EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CIRCULARSTRING Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CIRCULARSTRING M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CIRCULARSTRING ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CIRCULARSTRING (0 0,1 1, 2 0)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CIRCULARSTRING M (0 0 1,1 1 1, 2 0 1)' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CIRCULARSTRING ZM (0 0 1 2,1 1 1 2, 2 0 1 2)' ::text as g ) as foo; -- COMPOUNDCURVE select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE (CIRCULARSTRING (0 0,1 1,2 0),LINESTRING(2 0,4 1))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 1,1 1 1,2 0 1),LINESTRING Z (2 0 0,4 1 1))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE M (CIRCULARSTRING M (0 0 1,1 1 1,2 0 1),LINESTRING M (2 0 0,4 1 1))' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING ZM (2 0 0 0,4 1 1 1))' ::text as g ) as foo; -- CURVEPOLYGON select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CURVEPOLYGON EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CURVEPOLYGON Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CURVEPOLYGON M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CURVEPOLYGON ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'CURVEPOLYGON ZM (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING(2 0 1 2,1 -1 1 1,0 0 1 2)))' ::text as g ) as foo; -- MULTICURVE select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTICURVE EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTICURVE Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTICURVE M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTICURVE ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTICURVE ZM (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING(2 0 1 2,1 -1 1 1,0 0 1 2)))' ::text as g ) as foo; -- MULTISURFACE select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTISURFACE EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTISURFACE Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTISURFACE M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTISURFACE ZM EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'MULTISURFACE ZM (CURVEPOLYGON ZM (COMPOUNDCURVE ZM (CIRCULARSTRING ZM (0 0 1 2,1 1 1 2,2 0 1 2),LINESTRING(2 0 1 2,1 -1 1 1,0 0 1 2))),POLYGON((10 10 10 10,10 12 10 10,12 12 10 10,12 10 10 10,10 10 10 10)))' ::text as g ) as foo; -- POLYHEDRALSURFACE select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYHEDRALSURFACE EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYHEDRALSURFACE Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYHEDRALSURFACE M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'POLYHEDRALSURFACE ZM EMPTY' ::text as g ) as foo; -- TRIANGLE select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TRIANGLE EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TRIANGLE Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TRIANGLE M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TRIANGLE ZM EMPTY' ::text as g ) as foo; -- TIN select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TIN EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TIN Z EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TIN M EMPTY' ::text as g ) as foo; select g, encode(st_asbinary(g::geometry, 'ndr'), 'hex'), st_orderingequals(g::geometry, ST_GeomFromWKB(ST_AsBinary(g::geometry))), encode(st_asbinary(g::geometry, 'xdr'), 'hex') FROM ( SELECT 'TIN ZM EMPTY' ::text as g ) as foo; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/snap_expected�������������������������������������������������������0000644�0000000�0000000�00000000242�11722777314�020010� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: Operation on mixed SRID geometries t2|SRID=10;LINESTRING(0 0,9 0,10 0) t3|LINESTRING(0 0,5 -1,10 0) t4|LINESTRING(0 0,11 0) t5|LINESTRING(70 250,230 340) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/tickets.sql���������������������������������������������������������0000644�0000000�0000000�00000165751�12302421217�017432� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- Regression tests that were filed as cases in bug tickets, -- referenced by bug number for historical interest. -- SET client_min_messages TO NOTICE; -- NOTE: some tests _require_ spatial_ref_sys entries. -- In particular, the GML output ones want auth_name and auth_srid too, -- so we provide one for EPSG:4326 DELETE FROM spatial_ref_sys; INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 32611, '+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs' ); INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' ); INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 32602, '+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs ' ); INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 32702, '+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs ' ); INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 3395, '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs ' ); INSERT INTO spatial_ref_sys (srid,proj4text) VALUES (32707,'+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs '); -- #2 -- SELECT '#2', ST_AsText(ST_Union(g)) FROM ( VALUES ('SRID=4326;MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)))'), ('SRID=4326;MULTIPOLYGON(((2 1,3 1,3 2,2 2,2 1)))') ) AS v(g); -- #11 -- SELECT '#11', ST_Distance (a.g, ST_Intersection(b.g, a.g)) AS distance FROM (SELECT '01020000000200000050E8303FC2E85141B017CFC05A825541000000E0C0E85141000000205C825541'::geometry AS g) a, (SELECT 'LINESTRING(4694792.35840419 5638508.89950758,4694793.20840419 5638506.34950758)'::geometry AS g) b; -- #21 -- SELECT '#21', ST_AsEWKT(ST_Locate_Along_Measure(g, 4566)) FROM ( VALUES (ST_GeomFromEWKT('SRID=31293;LINESTRINGM( 6193.76 5337404.95 4519, 6220.13 5337367.145 4566, 6240.889 5337337.383 4603 )')) ) AS v(g); -- #22 -- SELECT ST_Within(g, 'POLYGON((0 0,10 0,20 10,10 20,0 20,-10 10,0 0))') FROM (VALUES ('POLYGON((4 9,6 9,6 11,4 11,4 9))') ) AS v(g); -- #33 -- CREATE TABLE road_pg (ID INTEGER, NAME VARCHAR(32)); SELECT '#33', AddGeometryColumn( '', 'public', 'road_pg','roads_geom', 330000, 'POINT', 2 ); DROP TABLE road_pg; -- #44 -- SELECT '#44', ST_Relate(g1, g2, 'T12101212'), ST_Relate(g1, g2, 't12101212') FROM (VALUES ('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 'POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))') ) AS v(g1, g2); -- #58 -- SELECT '#58', round(ST_xmin(g)),round(ST_ymin(g)),round(ST_xmax(g)),round(ST_ymax(g)) FROM (SELECT ST_Envelope('CIRCULARSTRING(220268.439465645 150415.359530563,220227.333322076 150505.561285879,220227.353105332 150406.434743975)'::geometry) as g) AS foo; -- #65 -- SELECT '#65', ST_AsGML(ST_GeometryFromText('CURVEPOLYGON(CIRCULARSTRING(4 2,3 -1.0,1 -1,-1.0 4,4 2))')); -- #66 -- SELECT '#66', ST_AsText((ST_Dump(ST_GeomFromEWKT('CIRCULARSTRING(0 0,1 1,2 2)'))).geom); -- #68 -- SELECT '#68a', ST_AsText(ST_Shift_Longitude(ST_GeomFromText('MULTIPOINT(1 3, 4 5)'))); SELECT '#68b', ST_AsText(ST_Shift_Longitude(ST_GeomFromText('CIRCULARSTRING(1 3, 4 5, 6 7)'))); -- #69 -- SELECT '#69', ST_AsText(ST_Translate(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),1,2)); -- #70 -- SELECT '#70', ST_NPoints(ST_LinetoCurve(ST_Buffer('POINT(1 2)',3))); -- #73 -- SELECT '#73', ST_AsText(ST_ForceCollection(ST_GeomFromEWKT('CIRCULARSTRING(1 1, 2 3, 4 5, 6 7, 5 6)'))); -- #80 -- SELECT '#80', ST_AsText(ST_Multi('MULTILINESTRING((0 0,1 1))')); -- #83 -- SELECT '#83', ST_AsText(ST_Multi(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'))); -- #85 -- SELECT '#85', ST_Distance(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'), ST_Point(220268, 150415)); -- #112 -- SELECT '#112', ST_AsText(ST_CurveToLine('GEOMETRYCOLLECTION(POINT(-10 50))'::geometry)); -- #113 -- SELECT '#113', ST_Locate_Along_Measure('LINESTRING(0 0 0, 1 1 1)', 0.5); -- #116 -- SELECT '#116', ST_AsText('010300000000000000'); -- #122 -- SELECT '#122', ST_AsText(ST_SnapToGrid(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'), 0.1)); -- #124 -- SELECT '#124a', ST_AsText(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,30 5),CIRCULARSTRING(30 5,34 56,67 89))')); SELECT '#124b', ST_AsText(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,30 6),CIRCULARSTRING(30 5,34 56,67 89))')); -- #145 -- SELECT '#145a', encode(ST_AsEWKB(ST_Buffer(ST_GeomFromText('LINESTRING(-116.93414544665981 34.16033385105459,-116.87777514700957 34.10831080544884,-116.86972224705954 34.086748622072776,-116.9327074288116 34.08458099517253,-117.00216369088065 34.130329331330216,-117.00216369088065 34.130329331330216)', 4326), 0),'ndr'),'hex'); SELECT '#145b', ST_Area(ST_Buffer(ST_GeomFromText('LINESTRING(-116.93414544665981 34.16033385105459,-116.87777514700957 34.10831080544884,-116.86972224705954 34.086748622072776,-116.9327074288116 34.08458099517253,-117.00216369088065 34.130329331330216,-117.00216369088065 34.130329331330216)', 4326), 0)); -- #146 -- SELECT '#146', ST_Distance(g1,g2), ST_Dwithin(g1,g2,0.01), ST_AsEWKT(g2) FROM (SELECT ST_geomFromEWKT('LINESTRING(1 2, 2 4)') As g1, ST_Collect(ST_GeomFromEWKT('LINESTRING(0 0, -1 -1)'), ST_GeomFromEWKT('MULTIPOINT(1 2,2 3)')) As g2) As foo; -- #156 -- SELECT '#156', ST_AsEWKT('0106000000010000000103000000010000000700000024213D12AA7BFD40945FF42576511941676A32F9017BFD40B1D67BEA7E511941C3E3C640DB7DFD4026CE38F4EE531941C91289C5A7EFD40017B8518E3531941646F1599AB7DFD409627F1F0AE521941355EBA49547CFD407B14AEC74652194123213D12AA7BFD40945FF42576511941'); -- #157 -- SELECT '#157', ST_GeometryType(g) As newname, GeometryType(g) as oldname FROM ( VALUES (ST_GeomFromText('POLYGON((-0.25 -1.25,-0.25 1.25,2.5 1.25,2.5 -1.25,-0.25 -1.25), (2.25 0,1.25 1,1.25 -1,2.25 0),(1 -1,1 1,0 0,1 -1))') ), ( ST_Point(1,2) ), ( ST_Buffer(ST_Point(1,2), 3) ), ( ST_LineToCurve(ST_Buffer(ST_Point(1,2), 3)) ) , ( ST_LineToCurve(ST_Boundary(ST_Buffer(ST_Point(1,2), 3))) ) ) AS v(g); -- #168 -- SELECT '#168', ST_NPoints(g), ST_AsText(g), ST_isValidReason(g) FROM ( VALUES ('01060000C00100000001030000C00100000003000000E3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFF'::geometry) ) AS v(g); -- #175 -- SELECT '#175', ST_AsEWKT(ST_GeomFromEWKT('SRID=26915;POINT(482020 4984378.)')); -- #178 -- SELECT '#178a', ST_XMin(ST_MakeBox2D(ST_Point(5, 5), ST_Point(0, 0))); SELECT '#178b', ST_XMax(ST_MakeBox2D(ST_Point(5, 5), ST_Point(0, 0))); -- #179 -- SELECT '#179a', ST_MakeLine(ARRAY[NULL,NULL,NULL,NULL]); SELECT '#179b', ST_MakeLine(ARRAY[NULL,NULL,NULL,NULL]); -- #183 -- SELECT '#183', ST_AsText(ST_SnapToGrid(ST_LineToCurve(ST_LineMerge(ST_Collect(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(0 0, 1 1, 1 0)')),ST_GeomFromEWKT('LINESTRING(1 0, 0 1)') ))), 1E-10)); -- #210 -- SELECT '#210a', ST_Union(ARRAY[NULL,NULL,NULL,NULL]) ; SELECT '#210b', ST_MakeLine(ARRAY[NULL,NULL,NULL,NULL]) ; -- #213 -- SELECT '#213', round(ST_Perimeter(ST_CurveToLine(ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)))')))); -- #234 -- SELECT '#234', ST_AsText(ST_GeomFromText('COMPOUNDCURVE( (0 0,1 1) )')); -- #239 -- --SELECT '#239', ST_AsSVG('010700002031BF0D0000000000'); -- #241 -- CREATE TABLE c ( the_geom GEOMETRY); INSERT INTO c SELECT ST_MakeLine(ST_Point(-10,40),ST_Point(40,-10)) As the_geom; INSERT INTO c SELECT ST_MakeLine(ST_Point(-10,40),ST_Point(40,-10)) As the_geom; SELECT '#241', sum(ST_LineCrossingDirection(the_geom, ST_GeomFromText('LINESTRING(1 2,3 4)'))) FROM c; DROP TABLE c; -- #254 -- SELECT '#254', encode(ST_AsEWKB(ST_Segmentize(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'), 0.5),'ndr'),'hex'); -- #259 -- SELECT '#259', ST_Distance(ST_GeographyFromText('SRID=4326;POLYGON EMPTY'), ST_GeographyFromText('SRID=4326;POINT(1 2)')); -- #260 -- SELECT '#260', round(ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-10 40)'), ST_GeographyFromText('SRID=4326;POINT(-10 55)'))); -- #261 -- SELECT '#261', ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-71.0325022849392 42.3793285830812)'),ST_GeographyFromText('SRID=4326;POLYGON((-71.0325022849392 42.3793285830812,-71.0325745928559 42.3793012556699,-71.0326708728343 42.3794450989722,-71.0326045866257 42.3794706688942,-71.0325022849392 42.3793285830812))')); -- #262 -- SELECT '#262', ST_AsText(pt.the_geog) As wkt_pt, ST_Covers(poly.the_geog, pt.the_geog) As geog, ST_Covers( ST_Transform(CAST(poly.the_geog As geometry),32611), ST_Transform(CAST(pt.the_geog As geometry),32611)) As utm, ST_Covers( CAST(poly.the_geog As geometry), CAST(pt.the_geog As geometry) ) As pca FROM (SELECT ST_GeographyFromText('SRID=4326;POLYGON((-119.5434 34.9438,-119.5437 34.9445,-119.5452 34.9442,-119.5434 34.9438))') As the_geog) As poly CROSS JOIN (VALUES ( ST_GeographyFromText('SRID=4326;POINT(-119.5434 34.9438)') ) , ( ST_GeographyFromText('SRID=4326;POINT(-119.5452 34.9442)') ) , ( ST_GeographyFromText('SRID=4326;POINT(-119.5434 34.9438)') ), ( ST_GeographyFromText('SRID=4326;POINT(-119.5438 34.9443)') ) ) As pt(the_geog); -- #263 -- SELECT '#263', ST_AsEWKT(geometry(geography(pt.the_geom))) As wkt, ST_Covers( ST_Transform(poly.the_geom,32611), ST_Transform(pt.the_geom,32611)) As utm, ST_Covers( poly.the_geom, pt.the_geom) As pca, ST_Covers(geometry(geography(poly.the_geom)), geometry(geography(pt.the_geom))) As gm_to_gg_gm_pca FROM (SELECT ST_GeomFromEWKT('SRID=4326;POLYGON((-119.5434 34.9438,-119.5437 34.9445,-119.5452 34.9442,-119.5434 34.9438))') As the_geom) As poly CROSS JOIN (VALUES ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5434 34.9438)') ) , ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5452 34.9442)') ) , ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5434 34.9438)') ), ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5438 34.9443)') ) ) As pt(the_geom); -- #271 -- SELECT '#271', ST_Covers( 'POLYGON((-9.123456789 50,51 -11.123456789,-10.123456789 50,-9.123456789 50))'::geography, 'POINT(-10.123456789 50)'::geography ); -- #272 -- SELECT '#272', ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 , ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1 FROM (SELECT ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING(2.99 90.16,71 74,20 140,171 154)') As line2 ) As foo; -- #277 -- SELECT '#277', ST_AsGML(2, ST_GeomFromText('POINT(1 1e308)')); -- #299 -- SELECT '#299', round(ST_Y(geometry(ST_Intersection(ST_GeographyFromText('POINT(1.2456 2)'), ST_GeographyFromText('POINT(1.2456 2)'))))); -- #304 -- SELECT '#304'; CREATE OR REPLACE FUNCTION utmzone(geometry) RETURNS integer AS $BODY$ DECLARE geomgeog geometry; zone int; pref int; BEGIN geomgeog:= ST_Transform($1,4326); IF (ST_Y(geomgeog))>0 THEN pref:=32600; ELSE pref:=32700; END IF; zone:=floor((ST_X(geomgeog)+180)/6)+1; IF ( zone > 60 ) THEN zone := 60; END IF; RETURN zone+pref; END; $BODY$ LANGUAGE 'plpgsql' IMMUTABLE COST 100; CREATE TABLE utm_dots ( the_geog geography, utm_srid integer); INSERT INTO utm_dots SELECT geography(ST_SetSRID(ST_Point(i*10,j*10),4326)) As the_geog, utmzone(ST_SetSRID(ST_Point(i*10,j*10),4326)) As utm_srid FROM generate_series(-17,17) As i CROSS JOIN generate_series(-8,8) As j; SELECT ST_AsText(the_geog) as the_pt, utm_srid, ST_Area(ST_Buffer(the_geog,10)) As the_area, ST_Area(geography(ST_Transform(ST_Buffer(ST_Transform(geometry(the_geog),utm_srid),10),4326))) As geog_utm_area FROM utm_dots WHERE ST_Area(ST_Buffer(the_geog,10)) NOT between 307 and 315 LIMIT 10; SELECT '#304.a', Count(*) FROM utm_dots WHERE ST_DWithin(the_geog, 'POINT(0 0)'::geography, 3000000); CREATE INDEX utm_dots_gix ON utm_dots USING GIST (the_geog); SELECT '#304.b', Count(*) FROM utm_dots WHERE ST_DWithin(the_geog, 'POINT(0 0)'::geography, 300000); DROP FUNCTION utmzone(geometry); DROP TABLE utm_dots; -- #408 -- SELECT '#408', substring(st_isvalidreason('0105000020E0670000010000000102000020E06700000100000016DA52BA62A04141FFF3AD290B735241') from E'.*\\['); SELECT '#408.1', st_isvalid('01050000000100000001020000000100000000000000000000000000000000000000'); SELECT '#408.2', st_isvalidreason('01020000000100000000000000000000000000000000000000'); SELECT '#408.3', st_isvalid('0106000020BB0B000001000000010300000005000000D6000000000000C0F1A138410AD7A3103190524114AE4721F7A138410000000030905241713D0A57FAA1384185EB51982C9052417B14AE87FAA13841000000402A905241AE47E13AFBA1384114AE474128905241EC51B81EFDA138413D0AD7632690524152B81E85FFA13841D7A3707D2590524152B81E4500A23841713D0A072590524100000000FFA13841713D0AF724905241CDCCCCCCFFA13841CDCCCC0C249052419A99991901A238419A999919249052411F85EBD101A23841D7A3704D23905241E17A14AE02A23841A4703D3A2290524185EB51F808A23841000000D021905241E17A14EE0BA238413333335321905241666666A615A23841B81E85AB1F905241713D0AD710A23841B81E858B1E905241666666260CA2384114AE4731209052410AD7A37009A23841CDCCCCEC20905241AE47E13A06A23841EC51B87E219052419A9999D903A23841EC51B80E21905241EC51B8DE08A238418FC2F5681F905241666666660EA23841A4703D9A1D9052413D0AD7A30FA2384114AE47A11C9052413333333311A23841000000101C90524148E17A1414A23841333333931A905241EC51B81E1AA23841EC51B89E1890524185EB51381CA23841D7A370BD17905241295C8FC220A2384185EB51C816905241C3F528DC2BA238418FC2F5E814905241E17A14EE2EA23841EC51B8FE13905241AE47E1FA2BA23841EC51B8EE119052415C8FC2F52BA2384185EB51C810905241333333332EA2384114AE4701109052417B14AEC73BA238410AD7A3300D905241CDCCCCCC43A238417B14AE870B905241CDCCCC4C45A23841A4703D3A0B9052413D0AD7A34DA238411F85EB810A905241295C8F8250A23841CDCCCCBC09905241000000C053A238410AD7A36009905241A4703D0A5CA2384114AE4751099052418FC2F5A866A23841A4703D4A0A9052410000008069A2384114AE47B10A9052415C8FC2B573A23841B81E851B0D905241AE47E1FA76A23841666666C60D9052417B14AE077BA238411F85EB510E905241AE47E1FA7FA23841666666E60E9052415C8FC2358DA23841000000F010905241EC51B85E95A2384148E17A14119052417B14AE4795A23841CDCCCCCC1090524114AE47E18CA2384185EB51F80F90524148E17AD480A2384114AE47A10E9052413D0AD76383A23841713D0AF70C9052417B14AEC784A23841A4703D8A0C9052410000000086A23841A4703D0A0B9052411F85EB9187A23841B81E851B09905241F6285CCF86A2384100000010099052417B14AE4787A2384185EB51180890524114AE472186A23841CDCCCCFC079052410AD7A3B086A23841C3F5280C07905241333333B385A23841CDCCCC0C07905241000000407EA2384152B81E15079052419A9999197BA23841A4703D2A079052416666666673A2384114AE47710790524114AE47A16EA238413D0AD7F30690524114AE472170A238418FC2F5D8059052413D0AD72372A2384185EB511806905241A4703DCA71A23841D7A3707D05905241EC51B8DE7EA238411F85EBD104905241E17A14AE76A23841333333E30390524185EB51B875A23841713D0A47029052415C8FC2F576A23841D7A3703D029052419A99999976A2384114AE475101905241333333B378A23841EC51B83E019052410AD7A3307CA238410AD7A320019052418FC2F52885A23841295C8FD20090524148E17A9483A238416666664600905241295C8FC276A238411F85EB9100905241CDCCCC4C76A2384100000070FF8F5241AE47E13A76A2384133333343FF8F52417B14AE0783A23841D7A370FDFE8F5241E17A14AE81A23841C3F5283CFE8F52415C8FC2357DA2384114AE47A1FE8F5241CDCCCC8C7BA238415C8FC275FD8F524148E17AD47FA238417B14AE17FD8F5241000000807EA238413D0AD7A3FC8F5241713D0AD776A2384133333363FD8F5241CDCCCC8C73A2384152B81EF5FD8F5241E17A14AE70A2384114AE4711FE8F524185EB51B870A23841B81E852BFF8F524152B81E056CA2384114AE4731FF8F5241B81E856B6BA2384152B81E25FE8F5241AE47E13A69A23841E17A142EFE8F52419A99995962A238415C8FC275FE8F52415C8FC27562A238411F85EB710090524114AE47A15BA23841EC51B86E00905241EC51B85E5BA238419A9999E902905241295C8F025BA238417B14AE8704905241A4703D8A54A23841713D0A7704905241C3F5285C51A2384148E17A44049052418FC2F5E84CA23841A4703D4A049052410AD7A3304CA2384148E17A94049052419A9999994CA238413D0AD7F305905241AE47E1FA49A2384114AE471106905241EC51B85E49A23841AE47E1FA07905241AE47E13A43A238415C8FC255099052416666662644A23841D7A3707D0A9052415C8FC2F53FA23841CDCCCC2C0B90524185EB517839A2384185EB51380C90524152B81E4532A23841D7A370DD099052419A9999592FA2384152B81E4509905241D7A3707D2AA23841B81E857B089052415C8FC27526A238416666667608905241EC51B81E26A238417B14AE7707905241295C8F0226A23841F6285C1F07905241666666A61CA23841CDCCCC6C07905241713D0A1716A23841B81E856B07905241B81E85EB15A2384100000040079052411F85EB1108A2384114AE4741079052415C8FC23505A2384148E17AC40790524152B81E0506A23841EC51B84E09905241713D0A5707A23841AE47E10A0A905241EC51B81E12A2384152B81EA50890524152B81E4521A23841F6285CDF0890524148E17A1427A23841EC51B80E099052415C8FC2B52AA2384185EB5168099052413D0AD7E32FA23841CDCCCC3C0A9052413D0AD7A331A23841333333930A90524185EB51F833A238410AD7A3B00B9052411F85EB5135A23841EC51B8AE0B90524185EB513836A23841333333530D9052410000004030A238415C8FC2B50E905241000000802FA238415C8FC2750E9052410000008028A238419A9999B90E905241F6285C0F28A23841333333630E90524114AE47E123A23841333333730E905241D7A3707D23A2384152B81E750E9052410000008023A2384185EB51E80E905241D7A370BD1EA23841713D0A170F9052419A9999991EA23841333333830F9052419A9999991CA238411F85EB810F90524152B81E450EA2384152B81E750F9052417B14AE470AA23841EC51B89E0F905241B81E85EB05A238410AD7A3F00F905241D7A3707DFFA138417B14AEF71090524185EB51F8FDA138413D0AD72311905241295C8F02FAA13841EC51B83E11905241713D0A17EFA13841E17A145E129052417B14AE87CBA1384152B81E05179052418FC2F528C0A13841D7A3709D17905241D7A370BDC0A13841F6285C5F18905241295C8F82CBA138419A9999F917905241AE47E1BAD7A138415C8FC255169052411F85EB91E0A13841000000401590524114AE47A1E2A1384185EB5108159052415C8FC235ECA13841C3F5286C13905241C3F528DCF4A13841000000701290524152B81E45F5A138415C8FC2A51290524100000040F6A13841CDCCCC7C129052417B14AE47FBA138410000000012905241EC51B85E00A2384185EB51A8119052413D0AD7A305A238419A99990911905241EC51B81E0AA238411F85EB611090524148E17A940EA23841A4703D0A1090524152B81E0514A2384152B81EE50F905241F6285CCF15A238410AD7A3E00F9052417B14AEC718A23841CDCCCCDC0F9052419A9999191AA238415C8FC2E50F905241EC51B81E20A238415C8FC2E50F90524148E17A1420A23841333333C30F9052417B14AE8729A23841713D0AA70F905241000000002AA238413D0AD733119052411F85EB9129A23841C3F528EC12905241E17A142E28A238419A999919149052418FC2F5A825A23841CDCCCC1C15905241C3F5285C21A2384114AE473116905241F6285C4F1BA2384152B81E4517905241D7A3707D1AA2384148E17A1417905241C3F5285C19A23841D7A3702D179052413333333318A23841B81E85CB17905241000000C017A2384185EB5108189052413D0AD72310A238419A9999F91790524148E17A5410A2384148E17AD41690524148E17AD40DA2384152B81ED516905241B81E85AB09A23841F6285C1F179052418FC2F5A809A2384185EB51C8179052418FC2F56808A238417B14AEC7179052410000008008A2384185EB515818905241AE47E1BA16A23841F6285C6F189052410AD7A33017A23841C3F5289C18905241000000C012A23841AE47E10A1A9052411F85EB5110A238413D0AD7131B905241000000800DA238415C8FC2451C90524148E17A140DA23841A4703D4A1C9052413D0AD7230BA2384148E17A141E905241295C8F4205A23841295C8F421E905241F6285C4F00A238419A9999691E905241C3F5289CFDA13841AE47E16A1E905241D7A370FDFDA1384114AE47711F90524185EB51F801A23841B81E855B1F905241A4703D0A05A23841CDCCCCAC1F905241E17A14AE02A23841EC51B89E20905241295C8F82FFA138419A9999E9219052419A999919FEA1384185EB5188239052410AD7A330FAA13841E17A14DE25905241C3F5281CF9A13841F6285CFF26905241AE47E13AF8A138415C8FC2E527905241CDCCCC8CF7A1384185EB51B82890524185EB51F8F7A138413333334329905241C3F5281CF6A138418FC2F5182C905241A4703D4AF5A13841EC51B8BE2C905241CDCCCC0CF4A13841713D0AF72E90524185EB5138F3A13841000000502F905241000000C0F1A138410AD7A3103190524111000000CDCCCC4C6AA23841713D0A170A905241CDCCCC4C6FA238411F85EB710790524148E17A947AA2384114AE47410890524185EB51387BA23841D7A370ED07905241666666267BA23841713D0A7707905241EC51B85E7EA2384114AE476107905241E17A14AE7EA2384114AE473108905241713D0A5785A23841CDCCCCBC089052410AD7A33083A23841F6285C9F0B9052413333337382A23841666666460C90524148E17AD481A23841333333D30C90524114AE472181A23841333333730D905241AE47E1BA7FA23841CDCCCC3C0E9052418FC2F56876A238415C8FC2050D90524185EB513872A238418FC2F5D80B90524185EB513870A23841EC51B82E0B905241CDCCCC4C6AA23841713D0A170A90524113000000A4703DCA6BA238415C8FC295FF8F5241B81E856B74A238410AD7A380FF8F5241EC51B89E74A23841E17A149E00905241AE47E1BA74A23841F6285C4F019052419A99995974A23841295C8F520290524148E17AD473A2384114AE47B10390524152B81EC572A2384114AE4701059052417B14AE476DA23841AE47E1DA04905241F6285C8F6DA23841333333A303905241000000006CA2384152B81E9503905241EC51B81E69A23841A4703D7A039052410AD7A3B068A23841B81E85AB049052415C8FC2F55CA23841CDCCCC8C0490524152B81E455DA238411F85EB0103905241333333B35DA23841AE47E1DA00905241EC51B85E67A23841C3F528FC009052410AD7A3B067A23841CDCCCCCCFF8F524185EB51B86BA23841333333C3FF8F5241A4703DCA6BA238415C8FC295FF8F5241020000003D0AD7A346A238413D0AD7E3099052413D0AD7A346A238413D0AD7E309905241100000007B14AEC74DA238410AD7A3B008905241EC51B85E4EA23841B81E850B079052413D0AD7234FA23841C3F528DC0490524185EB51385CA23841EC51B8EE04905241B81E852B60A23841A4703DDA049052410000008066A23841A4703DFA049052411F85EB116AA23841CDCCCC0C05905241CDCCCC8C6EA23841A4703D5A05905241A4703D0A6CA238417B14AE37079052411F85EBD16AA23841A4703DCA07905241AE47E1FA68A23841E17A14FE08905241295C8F0268A238410AD7A320099052419A99999963A23841AE47E10A099052415C8FC2B55AA23841333333C30890524114AE476156A23841CDCCCCBC089052417B14AEC74DA238410AD7A3B008905241'); SELECT '#408.4', st_isvalidreason('0106000020BB0B000001000000010300000005000000D6000000000000C0F1A138410AD7A3103190524114AE4721F7A138410000000030905241713D0A57FAA1384185EB51982C9052417B14AE87FAA13841000000402A905241AE47E13AFBA1384114AE474128905241EC51B81EFDA138413D0AD7632690524152B81E85FFA13841D7A3707D2590524152B81E4500A23841713D0A072590524100000000FFA13841713D0AF724905241CDCCCCCCFFA13841CDCCCC0C249052419A99991901A238419A999919249052411F85EBD101A23841D7A3704D23905241E17A14AE02A23841A4703D3A2290524185EB51F808A23841000000D021905241E17A14EE0BA238413333335321905241666666A615A23841B81E85AB1F905241713D0AD710A23841B81E858B1E905241666666260CA2384114AE4731209052410AD7A37009A23841CDCCCCEC20905241AE47E13A06A23841EC51B87E219052419A9999D903A23841EC51B80E21905241EC51B8DE08A238418FC2F5681F905241666666660EA23841A4703D9A1D9052413D0AD7A30FA2384114AE47A11C9052413333333311A23841000000101C90524148E17A1414A23841333333931A905241EC51B81E1AA23841EC51B89E1890524185EB51381CA23841D7A370BD17905241295C8FC220A2384185EB51C816905241C3F528DC2BA238418FC2F5E814905241E17A14EE2EA23841EC51B8FE13905241AE47E1FA2BA23841EC51B8EE119052415C8FC2F52BA2384185EB51C810905241333333332EA2384114AE4701109052417B14AEC73BA238410AD7A3300D905241CDCCCCCC43A238417B14AE870B905241CDCCCC4C45A23841A4703D3A0B9052413D0AD7A34DA238411F85EB810A905241295C8F8250A23841CDCCCCBC09905241000000C053A238410AD7A36009905241A4703D0A5CA2384114AE4751099052418FC2F5A866A23841A4703D4A0A9052410000008069A2384114AE47B10A9052415C8FC2B573A23841B81E851B0D905241AE47E1FA76A23841666666C60D9052417B14AE077BA238411F85EB510E905241AE47E1FA7FA23841666666E60E9052415C8FC2358DA23841000000F010905241EC51B85E95A2384148E17A14119052417B14AE4795A23841CDCCCCCC1090524114AE47E18CA2384185EB51F80F90524148E17AD480A2384114AE47A10E9052413D0AD76383A23841713D0AF70C9052417B14AEC784A23841A4703D8A0C9052410000000086A23841A4703D0A0B9052411F85EB9187A23841B81E851B09905241F6285CCF86A2384100000010099052417B14AE4787A2384185EB51180890524114AE472186A23841CDCCCCFC079052410AD7A3B086A23841C3F5280C07905241333333B385A23841CDCCCC0C07905241000000407EA2384152B81E15079052419A9999197BA23841A4703D2A079052416666666673A2384114AE47710790524114AE47A16EA238413D0AD7F30690524114AE472170A238418FC2F5D8059052413D0AD72372A2384185EB511806905241A4703DCA71A23841D7A3707D05905241EC51B8DE7EA238411F85EBD104905241E17A14AE76A23841333333E30390524185EB51B875A23841713D0A47029052415C8FC2F576A23841D7A3703D029052419A99999976A2384114AE475101905241333333B378A23841EC51B83E019052410AD7A3307CA238410AD7A320019052418FC2F52885A23841295C8FD20090524148E17A9483A238416666664600905241295C8FC276A238411F85EB9100905241CDCCCC4C76A2384100000070FF8F5241AE47E13A76A2384133333343FF8F52417B14AE0783A23841D7A370FDFE8F5241E17A14AE81A23841C3F5283CFE8F52415C8FC2357DA2384114AE47A1FE8F5241CDCCCC8C7BA238415C8FC275FD8F524148E17AD47FA238417B14AE17FD8F5241000000807EA238413D0AD7A3FC8F5241713D0AD776A2384133333363FD8F5241CDCCCC8C73A2384152B81EF5FD8F5241E17A14AE70A2384114AE4711FE8F524185EB51B870A23841B81E852BFF8F524152B81E056CA2384114AE4731FF8F5241B81E856B6BA2384152B81E25FE8F5241AE47E13A69A23841E17A142EFE8F52419A99995962A238415C8FC275FE8F52415C8FC27562A238411F85EB710090524114AE47A15BA23841EC51B86E00905241EC51B85E5BA238419A9999E902905241295C8F025BA238417B14AE8704905241A4703D8A54A23841713D0A7704905241C3F5285C51A2384148E17A44049052418FC2F5E84CA23841A4703D4A049052410AD7A3304CA2384148E17A94049052419A9999994CA238413D0AD7F305905241AE47E1FA49A2384114AE471106905241EC51B85E49A23841AE47E1FA07905241AE47E13A43A238415C8FC255099052416666662644A23841D7A3707D0A9052415C8FC2F53FA23841CDCCCC2C0B90524185EB517839A2384185EB51380C90524152B81E4532A23841D7A370DD099052419A9999592FA2384152B81E4509905241D7A3707D2AA23841B81E857B089052415C8FC27526A238416666667608905241EC51B81E26A238417B14AE7707905241295C8F0226A23841F6285C1F07905241666666A61CA23841CDCCCC6C07905241713D0A1716A23841B81E856B07905241B81E85EB15A2384100000040079052411F85EB1108A2384114AE4741079052415C8FC23505A2384148E17AC40790524152B81E0506A23841EC51B84E09905241713D0A5707A23841AE47E10A0A905241EC51B81E12A2384152B81EA50890524152B81E4521A23841F6285CDF0890524148E17A1427A23841EC51B80E099052415C8FC2B52AA2384185EB5168099052413D0AD7E32FA23841CDCCCC3C0A9052413D0AD7A331A23841333333930A90524185EB51F833A238410AD7A3B00B9052411F85EB5135A23841EC51B8AE0B90524185EB513836A23841333333530D9052410000004030A238415C8FC2B50E905241000000802FA238415C8FC2750E9052410000008028A238419A9999B90E905241F6285C0F28A23841333333630E90524114AE47E123A23841333333730E905241D7A3707D23A2384152B81E750E9052410000008023A2384185EB51E80E905241D7A370BD1EA23841713D0A170F9052419A9999991EA23841333333830F9052419A9999991CA238411F85EB810F90524152B81E450EA2384152B81E750F9052417B14AE470AA23841EC51B89E0F905241B81E85EB05A238410AD7A3F00F905241D7A3707DFFA138417B14AEF71090524185EB51F8FDA138413D0AD72311905241295C8F02FAA13841EC51B83E11905241713D0A17EFA13841E17A145E129052417B14AE87CBA1384152B81E05179052418FC2F528C0A13841D7A3709D17905241D7A370BDC0A13841F6285C5F18905241295C8F82CBA138419A9999F917905241AE47E1BAD7A138415C8FC255169052411F85EB91E0A13841000000401590524114AE47A1E2A1384185EB5108159052415C8FC235ECA13841C3F5286C13905241C3F528DCF4A13841000000701290524152B81E45F5A138415C8FC2A51290524100000040F6A13841CDCCCC7C129052417B14AE47FBA138410000000012905241EC51B85E00A2384185EB51A8119052413D0AD7A305A238419A99990911905241EC51B81E0AA238411F85EB611090524148E17A940EA23841A4703D0A1090524152B81E0514A2384152B81EE50F905241F6285CCF15A238410AD7A3E00F9052417B14AEC718A23841CDCCCCDC0F9052419A9999191AA238415C8FC2E50F905241EC51B81E20A238415C8FC2E50F90524148E17A1420A23841333333C30F9052417B14AE8729A23841713D0AA70F905241000000002AA238413D0AD733119052411F85EB9129A23841C3F528EC12905241E17A142E28A238419A999919149052418FC2F5A825A23841CDCCCC1C15905241C3F5285C21A2384114AE473116905241F6285C4F1BA2384152B81E4517905241D7A3707D1AA2384148E17A1417905241C3F5285C19A23841D7A3702D179052413333333318A23841B81E85CB17905241000000C017A2384185EB5108189052413D0AD72310A238419A9999F91790524148E17A5410A2384148E17AD41690524148E17AD40DA2384152B81ED516905241B81E85AB09A23841F6285C1F179052418FC2F5A809A2384185EB51C8179052418FC2F56808A238417B14AEC7179052410000008008A2384185EB515818905241AE47E1BA16A23841F6285C6F189052410AD7A33017A23841C3F5289C18905241000000C012A23841AE47E10A1A9052411F85EB5110A238413D0AD7131B905241000000800DA238415C8FC2451C90524148E17A140DA23841A4703D4A1C9052413D0AD7230BA2384148E17A141E905241295C8F4205A23841295C8F421E905241F6285C4F00A238419A9999691E905241C3F5289CFDA13841AE47E16A1E905241D7A370FDFDA1384114AE47711F90524185EB51F801A23841B81E855B1F905241A4703D0A05A23841CDCCCCAC1F905241E17A14AE02A23841EC51B89E20905241295C8F82FFA138419A9999E9219052419A999919FEA1384185EB5188239052410AD7A330FAA13841E17A14DE25905241C3F5281CF9A13841F6285CFF26905241AE47E13AF8A138415C8FC2E527905241CDCCCC8CF7A1384185EB51B82890524185EB51F8F7A138413333334329905241C3F5281CF6A138418FC2F5182C905241A4703D4AF5A13841EC51B8BE2C905241CDCCCC0CF4A13841713D0AF72E90524185EB5138F3A13841000000502F905241000000C0F1A138410AD7A3103190524111000000CDCCCC4C6AA23841713D0A170A905241CDCCCC4C6FA238411F85EB710790524148E17A947AA2384114AE47410890524185EB51387BA23841D7A370ED07905241666666267BA23841713D0A7707905241EC51B85E7EA2384114AE476107905241E17A14AE7EA2384114AE473108905241713D0A5785A23841CDCCCCBC089052410AD7A33083A23841F6285C9F0B9052413333337382A23841666666460C90524148E17AD481A23841333333D30C90524114AE472181A23841333333730D905241AE47E1BA7FA23841CDCCCC3C0E9052418FC2F56876A238415C8FC2050D90524185EB513872A238418FC2F5D80B90524185EB513870A23841EC51B82E0B905241CDCCCC4C6AA23841713D0A170A90524113000000A4703DCA6BA238415C8FC295FF8F5241B81E856B74A238410AD7A380FF8F5241EC51B89E74A23841E17A149E00905241AE47E1BA74A23841F6285C4F019052419A99995974A23841295C8F520290524148E17AD473A2384114AE47B10390524152B81EC572A2384114AE4701059052417B14AE476DA23841AE47E1DA04905241F6285C8F6DA23841333333A303905241000000006CA2384152B81E9503905241EC51B81E69A23841A4703D7A039052410AD7A3B068A23841B81E85AB049052415C8FC2F55CA23841CDCCCC8C0490524152B81E455DA238411F85EB0103905241333333B35DA23841AE47E1DA00905241EC51B85E67A23841C3F528FC009052410AD7A3B067A23841CDCCCCCCFF8F524185EB51B86BA23841333333C3FF8F5241A4703DCA6BA238415C8FC295FF8F5241020000003D0AD7A346A238413D0AD7E3099052413D0AD7A346A238413D0AD7E309905241100000007B14AEC74DA238410AD7A3B008905241EC51B85E4EA23841B81E850B079052413D0AD7234FA23841C3F528DC0490524185EB51385CA23841EC51B8EE04905241B81E852B60A23841A4703DDA049052410000008066A23841A4703DFA049052411F85EB116AA23841CDCCCC0C05905241CDCCCC8C6EA23841A4703D5A05905241A4703D0A6CA238417B14AE37079052411F85EBD16AA23841A4703DCA07905241AE47E1FA68A23841E17A14FE08905241295C8F0268A238410AD7A320099052419A99999963A23841AE47E10A099052415C8FC2B55AA23841333333C30890524114AE476156A23841CDCCCCBC089052417B14AEC74DA238410AD7A3B008905241'); -- #457 -- SELECT '#457.1', st_astext(st_collectionExtract('POINT(0 0)', 1)); SELECT '#457.2', st_astext(st_collectionExtract('POINT(0 0)', 2)); SELECT '#457.3', st_astext(st_collectionExtract('POINT(0 0)', 3)); SELECT '#457.4', st_astext(st_collectionExtract('LINESTRING(0 0, 1 1)', 1)); SELECT '#457.5', st_astext(st_collectionExtract('LINESTRING(0 0, 1 1)', 2)); SELECT '#457.6', st_astext(st_collectionExtract('LINESTRING(0 0, 1 1)', 3)); SELECT '#457.7', st_astext(st_collectionExtract('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', 1)); SELECT '#457.8', st_astext(st_collectionExtract('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', 2)); SELECT '#457.9', st_astext(st_collectionExtract('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', 3)); -- #835 -- SELECT '#835.1', st_astext(st_collectionExtract('POLYGON EMPTY', 1)); SELECT '#835.2', st_astext(st_collectionExtract('POLYGON EMPTY', 2)); SELECT '#835.3', st_astext(st_collectionExtract('POLYGON EMPTY', 3)); SELECT '#835.4', st_astext(st_collectionExtract('LINESTRING EMPTY', 1)); SELECT '#835.5', st_astext(st_collectionExtract('LINESTRING EMPTY', 2)); SELECT '#835.6', st_astext(st_collectionExtract('LINESTRING EMPTY', 3)); SELECT '#835.7', st_astext(st_collectionExtract('POINT EMPTY', 1)); SELECT '#835.8', st_astext(st_collectionExtract('POINT EMPTY', 2)); SELECT '#835.9', st_astext(st_collectionExtract('POINT EMPTY', 3)); SELECT '#835.10', st_astext(st_collectionExtract('GEOMETRYCOLLECTION EMPTY', 1)); SELECT '#835.11', st_astext(st_collectionExtract('GEOMETRYCOLLECTION EMPTY', 2)); SELECT '#835.12', st_astext(st_collectionExtract('GEOMETRYCOLLECTION EMPTY', 3)); -- #650 -- SELECT '#650', ST_AsText(ST_Collect(ARRAY[ST_MakePoint(0,0), ST_MakePoint(1,1), null, ST_MakePoint(2,2)])); -- #662 -- --SELECT '#662', ST_MakePolygon(ST_AddPoint(ST_AddPoint(ST_MakeLine(ST_SetSRID(ST_MakePointM(i+m,j,m),4326),ST_SetSRID(ST_MakePointM(j+m,i-m,m),4326)),ST_SetSRID(ST_MakePointM(i,j,m),4326)),ST_SetSRID(ST_MakePointM(i+m,j,m),4326))) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, m, i*j*m LIMIT 1; -- #667 -- SELECT '#667', ST_AsEWKT(ST_LineToCurve(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j))) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, j, i*j LIMIT 1; -- #677 -- SELECT '#677',round(ST_Distance_Spheroid(ST_GeomFromEWKT('MULTIPOLYGON(((-10 40,-10 55,-10 70,5 40,-10 40)))'), ST_GeomFromEWKT('MULTIPOINT(20 40,20 55,20 70,35 40,35 55,35 70,50 40,50 55,50 70)'), 'SPHEROID["GRS_1980",6378137,298.257222101]')) As result; -- #680 -- SELECT '#680', encode(ST_AsBinary(geography(foo1.the_geom),'ndr'),'hex') As result FROM ((SELECT ST_SetSRID(ST_MakePointM(i,j,m),4326) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(50,70, 20) AS j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, i*j*m)) As foo1 LIMIT 1; -- #681 -- SELECT '#681a', ST_AsGML(ST_GeomFromText('POINT EMPTY', 4326)); SELECT '#681b', ST_AsGML(ST_GeomFromText('POLYGON EMPTY', 4326)); SELECT '#681c', ST_AsGML(ST_GeomFromText('LINESTRING EMPTY', 4326)); SELECT '#681d', ST_AsGML(ST_GeomFromText('MULTIPOINT EMPTY', 4326)); SELECT '#681e', ST_AsGML(ST_GeomFromText('MULTILINESTRING EMPTY', 4326)); SELECT '#681f', ST_AsGML(ST_GeomFromText('MULTIPOLYGON EMPTY', 4326)); SELECT '#681g', ST_AsGML(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY', 4326)); -- #682 -- SELECT '#682', encode(ST_AsEWKB(ST_Buffer(ST_GeomFromText('POLYGON EMPTY',4326) , 0.5), 'ndr'),'hex'); -- #683 -- SELECT '#683', encode(ST_AsEWKB(ST_BuildArea(ST_GeomFromText('POINT EMPTY',4326)),'ndr'),'hex'); -- #684,#2109 -- SELECT '#684,#2109', ST_AsEWKT(ST_Centroid(ST_GeomFromText('POLYGON EMPTY',4326))); SELECT '#2109', ST_AsEWKT(ST_Centroid(ST_GeomFromText('MULTILINESTRING ZM EMPTY',3395))); -- #685 -- SELECT '#685', encode(ST_AsEWKB(ST_ConvexHull(ST_GeomFromText('POLYGON EMPTY',4326)),'ndr'),'hex'); -- #686 -- SELECT '#686', encode(ST_AsEWKB(ST_COLLECT(ST_GeomFromText('POLYGON EMPTY',4326),ST_GeomFromText('TRIANGLE EMPTY',4326)),'ndr'),'hex'); -- #687 -- SELECT '#687', ST_DFullyWithin(ST_GeomFromText('LINESTRING(-10 50,50 -10)',4326), ST_GeomFromText('POLYGON EMPTY',4326),5); -- #689 -- SELECT '#689', ST_CoveredBy(ST_GeomFromText('POLYGON EMPTY'), ST_GeomFromText('LINESTRING(-10 50,50 -10)')); -- #690 -- SELECT '#690'; SELECT encode(ST_AsEWKB(ST_MakeLine(ST_GeomFromText('POINT(-11.1111111 40)'), ST_GeomFromText('LINESTRING(-11.1111111 70,70 -11.1111111)')),'ndr'), 'hex') As result; -- #693 -- SELECT '#693a', encode(ST_AsEWKB(ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2503 1,-71.132 42.2502 3,-71.1323 42.2504 -2,-71.1322 42.2505 1,-71.1319 42.2503 0))'),'ndr'),'hex'); SELECT '#693b', encode(ST_AsEWKB(ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2512 0,-71.1318 42.2511 20,-71.1317 42.2511 -20,-71.1317 42.251 5,-71.1317 42.2509 4,-71.132 42.2511 6,-71.1319 42.2512 30))'),'ndr'),'hex'); -- #694 -- SELECT '#694'; SELECT ST_MakePolygon('POINT(1 2)'::geometry); -- #695 -- SELECT '#695'; SELECT ST_RemovePoint('POINT(-11.1111111 40)'::geometry, 1); -- #696 -- SELECT '#696', encode(ST_AsEWKB(ST_Segmentize(ST_GeomFromEWKT('PolyhedralSurface( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'), 0.5),'ndr'),'hex'); -- #720 -- SELECT '#720', ST_AsText(ST_SnapTogrid(ST_Transform(ST_GeomFromText('MULTIPOINT(-10 40,-10 55,-10 70,5 40,5 55,5 70,20 40,20 55,20 70,35 40,35 55,35 70,50 40,50 55,50 70)',4326), 3395), 0.01)); -- #723 -- SELECT '#723', encode(ST_AsEWKB(ST_SnapToGrid( ST_Intersection(a.geog, b.geog)::geometry, 0.00001),'ndr'),'hex') FROM (VALUES (ST_GeogFromText('SRID=4326;POINT(-11.1111111 40)') ), (ST_GeogFromText('SRID=4326;POINT(-11.1111111 55)') ) ) As a(geog) CROSS JOIN ( VALUES (ST_GeogFromText('SRID=4326;POINT(-11.1111111 40)') ), (ST_GeogFromText('SRID=4326;POINT(-11.1111111 55)') )) As b(geog); -- #729 -- --SELECT '#729',ST_MakeLine(foo1.the_geom) As result FROM ((SELECT ST_GeomFromText('POINT EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTIPOINT EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTIPOLYGON EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('LINESTRING EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTILINESTRING EMPTY',4326) As the_geom ) ) As foo1; -- #804 SELECT '#804', ST_AsGML(3, 'SRID=4326;POINT(0 0)'::geometry, 0, 1); -- #845 SELECT '#845', ST_Intersects('POINT(169.69960846592 -46.5061209281002)'::geometry, 'POLYGON((169.699607857174 -46.5061218662,169.699607857174 -46.5061195965597,169.699608806526 -46.5061195965597,169.699608806526 -46.5061218662,169.699607857174 -46.5061218662))'::geometry); -- #834 SELECT '#834', ST_AsEWKT(ST_Intersection('LINESTRING(0 0,0 10,10 10,10 0)', 'LINESTRING(10 10 4,10 0 5,0 0 5)')); -- #884 -- CREATE TABLE foo (id integer, the_geom geometry); INSERT INTO foo VALUES (1, st_geomfromtext('MULTIPOLYGON(((-113.6 35.4,-113.6 35.8,-113.2 35.8,-113.2 35.4,-113.6 35.4),(-113.5 35.5,-113.3 35.5,-113.3 35.7,-113.5 35.7,-113.5 35.5)))')); INSERT INTO foo VALUES (2, st_geomfromtext('MULTIPOLYGON(((-113.7 35.3,-113.7 35.9,-113.1 35.9,-113.1 35.3,-113.7 35.3),(-113.6 35.4,-113.2 35.4,-113.2 35.8,-113.6 35.8,-113.6 35.4)),((-113.5 35.5,-113.5 35.7,-113.3 35.7,-113.3 35.5,-113.5 35.5)))')); select '#884', id, ST_Within( ST_GeomFromText('POINT (-113.4 35.6)'), the_geom ) from foo; select '#938', 'POLYGON EMPTY'::geometry::box2d; DROP TABLE foo; -- #668 -- select '#668',box2d('CIRCULARSTRING(10 2,12 2,14 2)'::geometry) as b; -- #711 -- select '#711', ST_GeoHash(ST_GeomFromText('POLYGON EMPTY',4326)); -- #712 -- SELECT '#712',ST_IsValid(ST_GeomFromText('POLYGON EMPTY',4326)); -- #756 WITH inp AS ( SELECT 'LINESTRING(0 0, 1 1)'::geometry as s, 'LINESTRING EMPTY'::geometry as e ) SELECT '#756.1', ST_Equals(s, st_multi(s)), ST_Equals(s, st_collect(s, e)) FROM inp; -- #1023 -- select '#1023', 'POINT(10 4)'::geometry = 'POINT(10 4)'::geometry; select '#1023.a', 'POINT(10 4)'::geometry = 'POINT(10 5)'::geometry; select '#1023.b', postgis_addbbox('POINT(10 4)'::geometry) = 'POINT(10 4)'::geometry; -- #1069 -- select '#1060', ST_Relate(ST_GeomFromText('POINT EMPTY',4326), ST_GeomFromText('POINT EMPTY',4326)) As result; -- #1273 -- WITH p AS ( SELECT 'POINT(832694.188 816254.625)'::geometry as g ) SELECT '#1273', st_equals(p.g, postgis_addbbox(p.g)) from p; -- Another for #1273 -- WITH p AS ( SELECT 'MULTIPOINT((832694.188 816254.625))'::geometry as g ) SELECT '#1273.1', st_equals(p.g, postgis_dropbbox(p.g)) from p; -- #877, #818 create table t(g geometry); select '#877.1', ST_EstimatedExtent('t','g'); analyze t; select '#877.2', ST_EstimatedExtent('public', 't','g'); SET client_min_messages TO DEBUG; select '#877.2.deprecated', ST_Estimated_Extent('public', 't','g'); SET client_min_messages TO NOTICE; insert into t(g) values ('LINESTRING(-10 -50, 20 30)'); -- #877.3 with e as ( select ST_EstimatedExtent('t','g') as e ) select '#877.3', round(st_xmin(e.e)::numeric, 5), round(st_xmax(e.e)::numeric, 5), round(st_ymin(e.e)::numeric, 5), round(st_ymax(e.e)::numeric, 5) from e; -- #877.4 analyze t; with e as ( select ST_EstimatedExtent('t','g') as e ) select '#877.4', round(st_xmin(e.e)::numeric, 5), round(st_xmax(e.e)::numeric, 5), round(st_ymin(e.e)::numeric, 5), round(st_ymax(e.e)::numeric, 5) from e; -- #877.5 truncate t; with e as ( select ST_EstimatedExtent('t','g') as e ) select '#877.5', round(st_xmin(e.e)::numeric, 5), round(st_xmax(e.e)::numeric, 5), round(st_ymin(e.e)::numeric, 5), round(st_ymax(e.e)::numeric, 5) from e; drop table t; -- #1292 SELECT '#1292', ST_AsText(ST_SnapToGrid(ST_GeomFromText( 'GEOMETRYCOLLECTION(POINT(180 90),POLYGON((140 50,150 50,180 50,140 50),(140 60,150 60,180 60,140 60)))' , 4326), 0.00001)::geography); -- #1292.1 SELECT '#1292.1', ST_AsText(ST_GeomFromText('POINT(180.00000000001 95)')::geography), ST_AsText(ST_GeomFromText('POINT(185 90.00000000001)')::geography); -- #1320 SELECT '<#1320>'; CREATE TABLE A ( geom geometry(MultiPolygon, 4326), geog geography(MultiPolygon, 4326) ); -- Valid inserts INSERT INTO a(geog) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geography); INSERT INTO a(geom) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geometry); SELECT '#1320.geog.1', geometrytype(geog::geometry), st_srid(geog::geometry) FROM a where geog is not null; SELECT '#1320.geom.1', geometrytype(geom), st_srid(geom) FROM a where geom is not null; -- Type mismatches is not allowed INSERT INTO a(geog) VALUES('SRID=4326;POLYGON ((0 0, 10 0, 10 10, 0 0))'::geography); INSERT INTO a(geom) VALUES('SRID=4326;POLYGON ((0 0, 10 0, 10 10, 0 0))'::geometry); SELECT '#1320.geog.2', geometrytype(geog::geometry), st_srid(geog::geometry) FROM a where geog is not null; SELECT '#1320.geom.2', geometrytype(geom), st_srid(geom) FROM a where geom is not null; -- Even if it's a trigger changing the type CREATE OR REPLACE FUNCTION triga() RETURNS trigger AS $$ BEGIN NEW.geom = ST_GeometryN(New.geom,1); NEW.geog = ST_GeometryN(New.geog::geometry,1)::geography; RETURN NEW; END; $$ language plpgsql VOLATILE; CREATE TRIGGER triga_before BEFORE INSERT ON a FOR EACH ROW EXECUTE PROCEDURE triga(); INSERT INTO a(geog) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geography); INSERT INTO a(geom) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geometry); SELECT '#1320.geog.3', geometrytype(geog::geometry), st_srid(geog::geometry) FROM a where geog is not null; SELECT '#1320.geom.3', geometrytype(geom), st_srid(geom) FROM a where geom is not null; DROP TABLE A; DROP FUNCTION triga(); SELECT '</#1320>'; -- st_AsText POLYGON((0 0,10 0,10 10,0 0)) -- #1344 select '#1344', octet_length(ST_AsEWKB(st_makeline(g))) FROM ( values ('POINT(0 0)'::geometry ) ) as foo(g); -- #1385 SELECT '#1385', ST_Extent(g) FROM ( select null::geometry as g ) as foo; -- #657 SELECT '#657.1',Round(ST_X(ST_Project('POINT(175 10)'::geography, 2000000, 3.1415/2)::GEOMETRY)::numeric,2); SELECT '#657.2',Round(ST_Distance(ST_Project('POINT(10 10)'::geography, 10, 0), 'POINT(10 10)'::geography)::numeric,2); SELECT '#657.3',ST_DWithin(ST_Project('POINT(10 10)'::geography, 2000, pi()/2), 'POINT(10 10)'::geography, 2000); -- #1305 SELECT '#1305.1',ST_AsText(ST_Project('POINT(10 10)'::geography, 0, 0)); WITH pts AS ( SELECT 'POINT(0 45)'::geography AS s, 'POINT(45 45)'::geography AS e ) SELECT '#1305.2',abs(ST_Distance(e, ST_Project(s, ST_Distance(s, e), ST_Azimuth(s, e)))) < 0.001 FROM pts; SELECT '#1305.3',ST_Azimuth('POINT(0 45)'::geography, 'POINT(0 45)'::geography) IS NULL; -- #1445 SELECT '01060000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '01050000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '01040000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '01090000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '010B0000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '010C0000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; -- #1453 SELECT '#1453.1', ST_OrderingEquals('POINT EMPTY', 'POINT EMPTY'); SELECT '#1453.2', ST_OrderingEquals('POINT EMPTY', 'POINT Z EMPTY'); -- #1454 with inp as ( select 'MULTILINESTRING((0 0, 2 0))'::geometry as g ) SELECT '#1454', st_orderingequals(g,g) from inp; -- #1414 SELECT '#1414', st_astext(st_Force3DZ('CURVEPOLYGON EMPTY')); -- #1478 SELECT '#1478', encode(ST_AsEWKB('SRID=1;POINT EMPTY'::geometry::text::geometry,'ndr'),'hex'); -- #745 SELECT '#745', ST_AsEWKT(ST_Split('POLYGON((-72 42 1,-70 43 1,-71 41 1,-72 42 1))', 'LINESTRING(-10 40 1,-9 41 1)')); -- #1450 SELECT '#1450', GeometryType('POINT(0 0)'::geography), GeometryType('POLYGON EMPTY'::geography); -- #1482 select '#1482', ST_Srid('POINT(0 0)'::geography(point, 0)::geometry); -- #852 CREATE TABLE cacheable (id int, g geometry); COPY cacheable FROM STDIN; 1 POINT(0.5 0.5000000000001) 2 POINT(0.5 0.5000000000001) \. select '#852.1', id, -- first run is not cached, consequent are cached st_intersects(g, 'POLYGON((0 0, 10 10, 1 0, 0 0))'::geometry), st_intersects(g, 'POLYGON((0 0, 1 1, 1 0, 0 0))'::geometry) from cacheable; UPDATE cacheable SET g = 'POINT(0.5 0.5)'; -- New select, new cache select '#852.2', id, -- first run is not cached, consequent are cached st_intersects(g, 'POLYGON((0 0, 10 10, 1 0, 0 0))'::geometry), st_intersects(g, 'POLYGON((0 0, 1 1, 1 0, 0 0))'::geometry) from cacheable; DROP TABLE cacheable; -- #1489 with inp AS ( SELECT st_multi('POINT EMPTY'::geometry) as mp, st_multi('LINESTRING EMPTY'::geometry) as ml, st_multi('POLYGON EMPTY'::geometry) as ma, st_multi('GEOMETRYCOLLECTION EMPTY'::geometry) as mm ) select '#1489', st_astext(mp), st_numgeometries(mp), st_astext(ml), st_numgeometries(ml), st_astext(ma), st_numgeometries(ma), st_astext(mm), st_numgeometries(mm) FROM inp; -- #1150 insert into spatial_ref_sys (srid, proj4text) values (500001,NULL); insert into spatial_ref_sys (srid, proj4text) values (500002, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'); select '#1150', st_astext(st_transform('SRID=500002;POINT(0 0)'::geometry,500001)); -- #1038 select '#1038', ST_AsSVG('POLYGON EMPTY'::geometry); -- #1042 select '#1042',round((st_ymax(st_minimumboundingcircle('LINESTRING(-1 -1, 1 1)')) * st_xmax(st_minimumboundingcircle('LINESTRING(-1 -1, 1 1)')))::numeric,0); -- #1170 -- SELECT '#1170', ST_Y(ST_Intersection( ST_GeogFromText( 'POINT(0 90)'), ST_GeogFromText( 'POINT(0 90)' ))::geometry); -- #1264 -- SELECT '#1264', ST_DWithin('POLYGON((-10 -10, -10 10, 10 10, 10 -10, -10 -10))'::geography, 'POINT(0 0)'::geography, 0); -- #1398 select '#1398a', st_astext(st_snaptogrid(st_project('POINT(-120 45)'::geography, 100000, radians(45))::geometry,0.000001)); select '#1398b', st_astext(st_snaptogrid(st_project('POINT(20 85)'::geography, 2000000, radians(0.1))::geometry,0.000001)); -- #1543 with inp as ( select '0105000000020000000102000000040000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000000001020000000100000000000000000000000000000000000000' ::geometry as g ) select '#1543', st_astext(g), st_astext(st_buildarea(g)) from inp; -- #1578 with inp as ( select ST_Collect('POLYGON EMPTY', 'POLYGON EMPTY') as mp, 'POINT(0 0)'::geometry as p ) select '#1578', _st_within(p, mp), _st_intersects(p, mp) FROM inp; -- #1580 select '#1580.1', ST_Summary(ST_Transform('SRID=4326;POINT(0 0)'::geometry, 3395)); select '#1580.2', ST_Transform('SRID=4326;POINT(180 90)'::geometry, 3395); -- fails select '#1580.3', ST_Summary(ST_Transform('SRID=4326;POINT(0 0)'::geometry, 3395)); -- #1596 -- CREATE TABLE road_pg (ID INTEGER, NAME VARCHAR(32)); SELECT '#1596.1', AddGeometryColumn( 'road_pg','roads_geom', 3395, 'POINT', 2 ); SELECT '#1596.2', UpdateGeometrySRID( 'road_pg','roads_geom', 330000); SELECT '#1596.3', srid FROM geometry_columns WHERE f_table_name = 'road_pg' AND f_geometry_column = 'roads_geom'; SELECT '#1596.4', UpdateGeometrySRID( 'road_pg','roads_geom', 999000); SELECT '#1596.5', srid FROM geometry_columns WHERE f_table_name = 'road_pg' AND f_geometry_column = 'roads_geom'; SELECT '#1596.6', UpdateGeometrySRID( 'road_pg','roads_geom', -1); SELECT '#1596.7', srid FROM geometry_columns WHERE f_table_name = 'road_pg' AND f_geometry_column = 'roads_geom'; DROP TABLE road_pg; -- #1596 WITH inp AS ( SELECT 'POLYGON((-176 -22,-176 -21,-175 -21,-175 -22,-176 -22))'::geography as a, 'POINT(-176 -22)'::geography as p ) SELECT '#1596', ST_Summary(ST_Intersection(a,p)) FROM inp; -- #1695 SELECT '#1695', ST_AsEWKT(ST_SnapToGrid('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))'::geometry, 20)); -- #1697 -- CREATE TABLE eg(g geography, gm geometry); CREATE INDEX egi on eg using gist (g); CREATE INDEX egind on eg using gist (gm gist_geometry_ops_nd); INSERT INTO eg (g, gm) select 'POINT EMPTY'::geography, 'POINT EMPTY'::geometry from generate_series(1,1024); SELECT '#1697.1', count(*) FROM eg WHERE g && 'POINT(0 0)'::geography; SELECT '#1697.2', count(*) FROM eg WHERE gm && 'POINT(0 0)'::geometry; SELECT '#1697.3', count(*) FROM eg WHERE gm ~= 'POINT EMPTY'::geometry; DROP TABLE eg; -- #1734 -- create table eg (g geography); create index egi on eg using gist (g); INSERT INTO eg(g) VALUES (NULL); INSERT INTO eg (g) VALUES ('POINT(0 0)'::geography); INSERT INTO eg (g) select 'POINT(0 0)'::geography FROM generate_series(1,1024); SELECT '#1734.1', count(*) FROM eg; DROP table eg; -- #1755 -- select '#1755', encode(ST_AsBinary(ST_GeographyFromText('SRID=4326;Point(85 35 0)'),'ndr'),'hex'); -- #1776 -- with inp as ( SELECT 'POLYGON EMPTY'::geometry as A, 'POLYGON((0 0, 10 0, 10 10, 0 0))'::geometry as B ) SELECT '#1776', ST_AsText(ST_SymDifference(A,B)), ST_AsText(ST_SymDifference(B, A)) FROM inp; -- #1780 -- SELECT '#1780',ST_GeoHash('POINT(4 4)'::geometry) = ST_GeoHash('POINT(4 4)'::geography); -- #1791 -- with inp as ( SELECT '010100000000000000004065C0041AD965BE5554C0'::geometry as a, '010100000001000000004065C0041AD965BE5554C0'::geometry as b ) SELECT '#1791', round(ST_Azimuth(a,b)*10)/10 from inp; -- #1799 -- SELECT '#1799', ST_Segmentize('LINESTRING(0 0, 10 0)'::geometry, 0); -- #1936 -- select st_astext(st_geomfromgml( '<gml:Polygon xmlns:gml="http://www.opengis.net/gml/3.2" gml:id="HPA.15449990010" srsName="urn:ogc:def:crs:EPSG::4326" srsDimension="2"> <gml:exterior> <gml:Ring> <gml:curveMember> <gml:LineString gml:id="HPA.15449990010.1"> <gml:posList>711540.35 1070163.61 711523.82 1070166.54 711521.30 1070164.14 711519.52 1070162.44 711518.57 1070164.62 712154.47 1070824.94</gml:posList> </gml:LineString> </gml:curveMember> <gml:curveMember> <gml:Curve gml:id="HPA.15449990010.2"> <gml:segments><gml:ArcString> <gml:posList>712154.47 1070824.94 712154.98 1070826.04 712154.41 1070827.22</gml:posList> </gml:ArcString> </gml:segments> </gml:Curve> </gml:curveMember> <gml:curveMember> <gml:LineString gml:id="HPA.15449990010.3"> <gml:posList>712154.41 1070827.22 712160.31 1070837.07 712160.92 1070835.36 712207.89 1071007.95</gml:posList> </gml:LineString> </gml:curveMember> <gml:curveMember> <gml:Curve gml:id="HPA.15449990010.4"><gml:segments><gml:ArcString><gml:posList>712207.89 1071007.95 712207.48 1071005.59 712208.38 1071001.28</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:LineString gml:id="HPA.15449990010.5"><gml:posList>712208.38 1071001.28 712228.74 1070949.67 712233.98 1070936.15 712124.93 1070788.72</gml:posList></gml:LineString></gml:curveMember><gml:curveMember><gml:Curve gml:id="HPA.15449990010.6"><gml:segments><gml:ArcString><gml:posList>712124.93 1070788.72 712124.28 1070785.87 712124.63 1070783.38</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:LineString gml:id="HPA.15449990010.7"><gml:posList>712124.63 1070783.38 712141.04 1070764.12 712146.60 1070757.01 711540.35 1070163.61</gml:posList></gml:LineString></gml:curveMember></gml:Ring></gml:exterior> <gml:interior> <gml:LinearRing> <gml:posList>713061.62 1070354.46 713053.59 1070335.12 713049.58 1070315.92 713049.65 1070298.33 713061.62 1070354.46</gml:posList> </gml:LinearRing> </gml:interior> </gml:Polygon>')); -- #1957 -- SELECT '#1957', ST_Distance(ST_Makeline(ARRAY['POINT(1 0)'::geometry]), 'POINT(0 0)'::geometry); -- #1978 -- SELECT '#1978', round(ST_Length(ST_GeomFromText('CIRCULARSTRING(0 0,1 0,0 0)',0))::numeric,4); -- #1996 -- SELECT '#1996', ST_AsGeoJSON(ST_GeomFromText('POINT EMPTY')); -- #2001 -- SELECT '#2001', ST_AsText(ST_CurveToLine(ST_GeomFromText('CURVEPOLYGON((0 0, 0 1, 1 1, 0 0))'), 2)); -- #2028 -- SELECT '#2028', ST_AsText(ST_Multi('TRIANGLE((0 0, 0 1, 1 1, 0 0))')); -- #2035 START ------------------------------------------------------------ -- Simple geographic table, with single point. CREATE TABLE "city" ( "id" integer, "name" varchar(30) NOT NULL, "point" geometry(POINT,4326) NOT NULL ); CREATE INDEX "city_point_id" ON "city" USING GIST ( "point" ); -- Initial data, with points around the world. INSERT INTO "city" (id, name, point) VALUES (1, 'Houston', 'SRID=4326;POINT(-95.363151 29.763374)'); INSERT INTO "city" (id, name, point) VALUES (2, 'Dallas', 'SRID=4326;POINT(-95.363151 29.763374)'); INSERT INTO "city" (id, name, point) VALUES (3, 'Oklahoma City', 'SRID=4326;POINT(-97.521157 34.464642)'); INSERT INTO "city" (id, name, point) VALUES (4, 'Wellington', 'SRID=4326;POINT(174.783117 -41.315268)'); INSERT INTO "city" (id, name, point) VALUES (5, 'Pueblo', 'SRID=4326;POINT(-104.609252 38.255001)'); INSERT INTO "city" (id, name, point) VALUES (6, 'Lawrence', 'SRID=4326;POINT(-95.23506 38.971823)'); INSERT INTO "city" (id, name, point) VALUES (7, 'Chicago', 'SRID=4326;POINT(-87.650175 41.850385)'); INSERT INTO "city" (id, name, point) VALUES (8, 'Victoria', 'SRID=4326;POINT(-123.305196 48.462611)'); -- This query, or COUNT(*), does not return anything; should return 6 cities, -- excluding Pueblo and Victoria. The Polygon is a simple approximation of -- Colorado. SELECT '#2035a', Count(*) FROM "city" WHERE "city"."point" >> ST_GeomFromEWKT('SRID=4326;POLYGON ((-109.060253 36.992426, -109.060253 41.003444, -102.041524 41.003444, -102.041524 36.992426, -109.060253 36.992426))'); -- However, when a LIMIT is placed on statement, the query suddenly works. SELECT '#2035b', Count(*) FROM "city" WHERE "city"."point" >> ST_GeomFromEWKT('SRID=4326;POLYGON ((-109.060253 36.992426, -109.060253 41.003444, -102.041524 41.003444, -102.041524 36.992426, -109.060253 36.992426))') LIMIT 6; DROP TABLE "city"; -- #2035 END -------------------------------------------------------------- -- #2084 -- SELECT '#2084', num, ST_Within('POINT(-54.394 56.522)', the_geom), ST_CoveredBy('POINT(-54.394 56.522)', the_geom) FROM ( VALUES (1, '0103000000010000000E00000051C6F7C5A5324BC02EB69F8CF13F4C40F12EA4C343364BC0326AA2CF47434C402BC1A8A44E364BC02A50E10852434C407F2990D959364BC0A0D1730B5D434C404102452C62364BC0ECF335CB65434C400903232F6B364BC0F635E84B6F434C40BD0CC51D6F364BC0D2805EB873434C40B9E6E26F7B364BC0F20B93A982434C40D9FAAF73D3344BC0FE84D04197444C40BD5C8AABCA344BC0CED05CA791444C4023F2237EC5344BC02A84F23E8E444C40BDCDD8077B324BC0C60FB90F01434C409FD1702E65324BC04EF1915C17404C4051C6F7C5A5324BC02EB69F8CF13F4C40'::geometry), (2, '0103000000010000001C00000003F25650F73B4BC098477F523E3E4C40C9A6A344CE3C4BC0C69698653E3E4C40BDD0E979373E4BC0081FA0FB723E4C400FD252793B3E4BC01A137F14753E4C40537170E998414BC070D3BCE314414C4023FC51D499474BC0D4D100DE024F4C40638C47A984454BC024130D52F0504C40B9442DCDAD404BC03A29E96168554C40C7108DEE20404BC07C7C26FBE7554C40195D6BEF533F4BC0E20391459A564C40239FE40E9B344BC08C1ADB6B41514C40132D3F7095314BC0BA2ADF33124F4C409DB91457952D4BC02C7B681F2B4C4C4089DC60A8C32C4BC07C5C3810924B4C40D7ED409DF22A4BC0F64389963C4A4C405D1EF818AC2A4BC00EC84274084A4C401B48A46DFC294BC0B271A8DF85494C40E78AA6B393294BC01ED0EFFB37494C4081C64B3789294BC0DC5BE7DF2E494C409B23329287294BC0F0D6974E2D494C40CD22D5D687294BC0844316D72C494C40F5229D4FE2294BC002F19825AB484C40A3D0BD5AE9294BC06C0776A9A2484C409FD1702E65324BC04EF1915C17404C409F860AA7BD324BC0162CA390E33F4C40539A5C1C23334BC0FE86B04EB03F4C4081511DFF90334BC088FF36D4873F4C4003F25650F73B4BC098477F523E3E4C40'::geometry), (3, '010300000001000000100000008D57CD101A214BC0AECDD34E072C4C400DBB72E6EC274BC0A8088D60E32C4C40CF8FD7E6734E4BC0B22695BE4A324C40BFA74213934F4BC020BE505D4C354C4057CD4BEE454E4BC0BA6CF3940F3D4C40E7BDC5FD263E4BC09A4B297D5B484C4073A46A86701C4BC0B287F08D93364C4045501F86701C4BC05EBDB78D93364C40A37DB6586D1C4BC0841E7D2891364C409FBF445F6D1C4BC01E225C5690364C40D1BA97726D1C4BC06E2AF7EA8D364C4019B60C9B751C4BC0D2FD702575364C40FDE4394B5E1F4BC08C40F231CC2F4C402343DF40F51F4BC022008E3D7B2E4C400BB57B45F9204BC0908CE2EA3A2C4C408D57CD101A214BC0AECDD34E072C4C40'::geometry) ) AS f(num, the_geom); -- #2112 -- Start SELECT '#2112a', ST_3DDistance(a,b), ST_ASEWKT(ST_3DShortestLine(a,b)) FROM (SELECT 'POLYGON((1 1 1, 5 1 1,5 5 1, 1 5 1,1 1 1))'::geometry as a, 'LINESTRING(0 0 2, 0 0 0,5 5 2)'::geometry as b ) as foo; SELECT '#2112b', ST_3DDistance(a,b), ST_ASEWKT(ST_3DShortestLine(a,b)) FROM (SELECT 'POLYGON((1 1 1, 5 1 1,5 5 1, 1 5 1,1 1 1))'::geometry as a, 'LINESTRING(1 0 2, 1 0 0,5 5 -1)'::geometry as b ) as foo; -- 2112 -- End SELECT '#2108', ST_AsEWKT(ST_LineInterpolatePoint('SRID=3395;LINESTRING M EMPTY'::geometry, 0.5)); SELECT '#2117', ST_AsEWKT(ST_PointOnSurface('SRID=3395;MULTIPOLYGON M EMPTY'::geometry)); SELECT '#2110.1', 'POINT(0 0)'::geometry = 'POINT EMPTY'::geometry; SELECT '#2110.2', 'POINT EMPTY'::geometry = 'POINT EMPTY'::geometry; SELECT '#2110.3', 'POINT(0 0)'::geometry = 'POINT(0 0)'::geometry; SELECT '#2145', round(ST_Length(St_Segmentize(ST_GeographyFromText('LINESTRING(-89.3000030518 28.2000007629,-89.1999969482 89.1999969482,-89.1999969482 89.1999969482)'), 10000))::numeric,0); -- #2307 -- SELECT '#2307', ST_AsText(ST_SnapToGrid(ST_MakeValid('0106000020E6100000010000000103000000010000000A0000004B7DA956B99844C0DB0790FE8B4D1DC010BA74A9AF9444C049AFFC5B8C4D1DC03FC6CC690D9844C0DD67E5628C4D1DC07117B56B0D9844C0C80ABA67C45E1DC0839166ABAF9444C0387D4568C45E1DC010BA74A9AF9444C049AFFC5B8C4D1DC040C3CD74169444C0362EC0608C4D1DC07C1A3B77169444C0DC3ADB40B2641DC03AAE5F68B99844C0242948DEB1641DC04B7DA956B99844C0DB0790FE8B4D1DC0'::geometry),0.0001)); SELECT '#2415.1', ST_AsText(ST_Multi( 'COMPOUNDCURVE((0 0, 10 0),CIRCULARSTRING(10 0, 15 1, 20 10))' )); SELECT '#2415.2', ST_AsText(ST_Multi( 'CURVEPOLYGON(CIRCULARSTRING(10 0,15 1,20 0,18 5,20 10,10 10,10 0))' )); SELECT '#2412', ST_AsText(ST_LineToCurve('LINESTRING(0 0,10 0,20 0)')); SELECT '#2420.1', ST_AsText(ST_LineToCurve('LINESTRING(0 0,10 0,10 10,0 10,0 0)')); SELECT '#2420.2', ST_AsText(ST_LineToCurve('LINESTRING(0 0,10 0,10 10,0 10)')); SELECT '#2423', ST_AsText(ST_SnapToGrid(ST_CurveToLine(ST_LineToCurve( ST_Intersection(ST_Buffer(ST_Point(0,0),10),ST_MakeEnvelope(-10,0,10,10)) ), 4), 1e-5)); SELECT '#2424', ST_AsText(ST_SnapToGrid(ST_CurveToLine( 'MULTICURVE(COMPOUNDCURVE((0 0, 10 0),CIRCULARSTRING(10 0, 20 1, 30 10)))', 2),1)); SELECT '#2427', st_astext(st_pointn(ST_CurveToLine('CIRCULARSTRING(-1 0,0 1,0 -1)'),1)); SELECT '#2168', ST_Distance(g1,g2)::numeric(16,8) As dist_g1_g2, ST_Distance(g2,g1)::numeric(16,8) AS dist_g2_g1,ST_Distance(g1,g2) - ST_Distance(g2,g1) FROM (SELECT 'POINT(18.5107234 54.7587757)'::geography As g1, 'POINT(18.58218 54.7344227)'::geography As g2) As a; -- #2556 -- CREATE TABLE images (id integer, name varchar, extent geography(POLYGON,4326)); INSERT INTO images VALUES (47409, 'TDX-1_2010-10-06T19_44_2375085', 'SRID=4326;POLYGON((-59.4139571913088 82.9486103943668,-57.3528882462655 83.1123152898828,-50.2302874208478 81.3740574826097,-51.977353304689 81.2431047148532,-59.4139571913088 82.9486103943668))'::geography); INSERT INTO images VALUES (1, 'first_image', 'SRID=4326;POLYGON((-162.211667 88.046667,-151.190278 87.248889,-44.266389 74.887778,-40.793889 75.043333,-162.211667 88.046667))'::geography); SELECT '#2556' AS ticket, id, round(ST_Distance(extent, 'SRID=4326;POLYGON((-46.625977 81.634149,-46.625977 81.348076,-48.999023 81.348076,-48.999023 81.634149,-46.625977 81.634149))'::geography)) from images; DROP TABLE images; -- Clean up DELETE FROM spatial_ref_sys; �����������������������postgis-2.1.2+dfsg.orig/regress/regress_management.sql����������������������������������������������0000644�0000000�0000000�00000001242�12030215310�021603� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id: regress_management.sql 10326 2012-09-25 02:45:28Z robe $ -- Test the populate_geometry_columns,DropGeometryTable etc -- \set VERBOSITY terse SET client_min_messages TO warning; DELETE FROM spatial_ref_sys WHERE srid = 4326; INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES( 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'); CREATE TABLE test_pt(gid SERIAL PRIMARY KEY, geom geometry); INSERT INTO test_pt(geom) VALUES(ST_GeomFromEWKT('SRID=4326;POINT M(1 2 3)')); SELECT populate_geometry_columns('test_pt'::regclass); SELECT 'The result: ' || DropGeometryTable('test_pt'); SELECT 'Unexistant: ' || DropGeometryTable('unexistent'); -- see ticket #861 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/snap.sql������������������������������������������������������������0000644�0000000�0000000�00000001325�11722777314�016730� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- SRIDs are checked! select 't1', st_asewkt(st_snap( 'SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;LINESTRING(0 0, 100 0)', 0 )); -- SRIDs are retained select 't2', st_asewkt(st_snap( 'SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(0 0, 9 0)', 1 )); -- Segment snapping select 't3', st_asewkt(st_snap( 'LINESTRING(0 0, 10 0)', 'LINESTRING(5 -1, 5 -10)', 2 )); -- Vertex snapping select 't4', st_asewkt(st_snap( 'LINESTRING(0 0, 10 0)', 'POINT(11 0)', 2 )); -- http://sourceforge.net/mailarchive/forum.php?thread_name=4CE841B8.4090702@cgf.upv.es&forum_name=jts-topo-suite-user select 't5', st_asewkt(st_snap( 'LINESTRING (70 250, 190 340)', 'POLYGON ((230 340, 300 340, 300 240, 230 240, 230 340))', 50 )); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_ogc_cover_expected������������������������������������������0000755�0000000�0000000�00000000363�11722777314�022556� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������covers100|t covers101|t covers102|t covers103|t covers104|f covers105|t covers106|f covers107|t covers108|t coveredby100|t coveredby101|t coveredby102|t coveredby103|t coveredby104|f coveredby105|t coveredby106|f coveredby107|t coveredby108|t �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/summary_expected����������������������������������������������������0000644�0000000�0000000�00000001074�12236034214�020532� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T1|Point[] T1B|Point[B] T1S|Point[S] T1M|Point[M] T1Z|Point[Z] T1ZM|Point[ZM] T1ZMB|Point[ZMB] T1ZMBS|Point[ZMBS] T3|MultiPoint[B] with 1 elements Point[] T4|MultiPoint[BS] with 1 elements Point[S] T5|GeometryCollection[B] with 2 elements MultiLineString[] with 2 elements LineString[] with 2 points LineString[] with 2 points MultiPoint[] with 1 elements Point[] T6|GeometryCollection[BS] with 2 elements MultiLineString[S] with 2 elements LineString[S] with 2 points LineString[S] with 2 points MultiPoint[S] with 1 elements Point[S] ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/snaptogrid.sql������������������������������������������������������0000644�0000000�0000000�00000001615�11722777314�020143� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� -- postgis-users/2006-January/010870.html CREATE TEMP TABLE tmp (orig geometry); INSERT INTO tmp (orig) VALUES ('01020000207D18000007000000D7A3701D641B3FC18B6CE7FB5A721841FA7E6A9C5E1B3FC191ED7C3F9872184139B4C816591B3FC1E3A59BC4D472184104560E4D891A3FC177BE9F1ABF7118417B14AEA7961A3FC18716D94E0C711841022B8716671B3FC1C74B370939721841D7A3701D641B3FC18B6CE7FB5A721841'); -- Repeat tests with new function names. SELECT ST_snaptogrid(orig, 0.001) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.001), 0.001) FROM tmp; SELECT ST_snaptogrid(orig, 0.005) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.005), 0.005) FROM tmp; SELECT ST_snaptogrid(orig, 0.002) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.002), 0.002) FROM tmp; SELECT ST_snaptogrid(orig, 0.003) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.003), 0.003) FROM tmp; SELECT ST_snaptogrid(orig, 0.0002) ~= ST_snaptogrid(ST_snaptogrid(orig, 0.0002), 0.0002) FROM tmp; DROP TABLE tmp; �������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sql-mm-multicurve.sql�����������������������������������������������0000644�0000000�0000000�00000030373�11722777314�021377� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Repeat the tests with the new function names. SELECT 'ndims01', ST_ndims(ST_geomfromewkt('MULTICURVE(( 5 5 1 3, 3 5 2 2, 3 3 3 1, 0 3 1 1) ,CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2))')); SELECT 'geometrytype01', geometrytype(ST_geomfromewkt('MULTICURVE(( 5 5 1 3, 3 5 2 2, 3 3 3 1, 0 3 1 1) ,CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2))')); SELECT 'ndims02', ST_ndims(ST_geomfromewkt('MULTICURVE(( 5 5 1, 3 5 2, 3 3 3, 0 3 1) ,CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1))')); SELECT 'geometrytype02', geometrytype(ST_geomfromewkt('MULTICURVE(( 5 5 1, 3 5 2, 3 3 3, 0 3 1) ,CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1))')); SELECT 'ndims03', ST_ndims(ST_geomfromewkt('MULTICURVEM(( 5 5 3, 3 5 2, 3 3 1, 0 3 1) ,CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2))')); SELECT 'geometrytype03', geometrytype(ST_geomfromewkt('MULTICURVEM(( 5 5 3, 3 5 2, 3 3 1, 0 3 1) ,CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2))')); SELECT 'ndims04', ST_ndims(ST_geomfromewkt('MULTICURVE(( 5 5, 3 5, 3 3, 0 3) ,CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097))')); SELECT 'geometrytype04', geometrytype(ST_geomfromewkt('MULTICURVE(( 5 5, 3 5, 3 3, 0 3) ,CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097))')); CREATE TABLE public.multicurve (id INTEGER, description VARCHAR, the_geom_2d GEOMETRY(MULTICURVE), the_geom_3dm GEOMETRY(MULTICURVEM), the_geom_3dz GEOMETRY(MULTICURVEZ), the_geom_4d GEOMETRY(MULTICURVEZM)); INSERT INTO public.multicurve ( id, description ) VALUES ( 1, 'multicurve'); UPDATE public.multicurve SET the_geom_4d = ST_Geomfromewkt('MULTICURVE(( 5 5 1 3, 3 5 2 2, 3 3 3 1, 0 3 1 1) ,CIRCULARSTRING( 0 0 0 0, 0.26794919243112270647255365849413 1 3 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1 2))'); UPDATE public.multicurve SET the_geom_3dz = ST_Geomfromewkt('MULTICURVE(( 5 5 1, 3 5 2, 3 3 3, 0 3 1) ,CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1))'); UPDATE public.multicurve SET the_geom_3dm = ST_Geomfromewkt('MULTICURVEM(( 5 5 3, 3 5 2, 3 3 1, 0 3 1) ,CIRCULARSTRING( 0 0 0, 0.26794919243112270647255365849413 1 -2, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 2))'); UPDATE public.multicurve SET the_geom_2d = ST_Geomfromewkt('MULTICURVE(( 5 5, 3 5, 3 3, 0 3) ,CIRCULARSTRING( 0 0, 0.26794919243112270647255365849413 1, 0.5857864376269049511983112757903 1.4142135623730950488016887242097))'); -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(asbinary(the_geom_2d), 'hex') FROM public.multicurve; --SELECT 'asbinary02', encode(asbinary(the_geom_3dm), 'hex') FROM public.multicurve; --SELECT 'asbinary03', encode(asbinary(the_geom_3dz), 'hex') FROM public.multicurve; --SELECT 'asbinary04', encode(asbinary(the_geom_4d), 'hex') FROM public.multicurve; -- --SELECT 'asewkb01', encode(asewkb(the_geom_2d), 'hex') FROM public.multicurve; --SELECT 'asewkb02', encode(asewkb(the_geom_3dm), 'hex') FROM public.multicurve; --SELECT 'asewkb03', encode(asewkb(the_geom_3dz), 'hex') FROM public.multicurve; --SELECT 'asewkb04', encode(asewkb(the_geom_4d), 'hex') FROM public.multicurve; SELECT 'ST_CurveToLine-201', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine-202', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine-203', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine-204', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 2), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine-401', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine-402', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine-403', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine-404', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d, 4), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine01', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_2d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine02', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dm), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine03', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_3dz), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; SELECT 'ST_CurveToLine04', ST_Asewkt(ST_SnapToGrid(ST_CurveToLine(the_geom_4d), 'POINT(0 0 0 0)'::geometry, 1e-8, 1e-8, 1e-8, 1e-8)) FROM public.multicurve; -- Removed due to descrepencies between hardware --SELECT 'box2d01', box2d(the_geom_2d) FROM public.multicurve; --SELECT 'box2d02', box2d(the_geom_3dm) FROM public.multicurve; --SELECT 'box2d03', box2d(the_geom_3dz) FROM public.multicurve; --SELECT 'box2d04', box2d(the_geom_4d) FROM public.multicurve; --SELECT 'box3d01', box3d(the_geom_2d) FROM public.multicurve; --SELECT 'box3d02', box3d(the_geom_3dm) FROM public.multicurve; --SELECT 'box3d03', box3d(the_geom_3dz) FROM public.multicurve; --SELECT 'box3d04', box3d(the_geom_4d) FROM public.multicurve; -- TODO: ST_SnapToGrid is required to remove platform dependent precision -- issues. Until ST_SnapToGrid is updated to work against curves, these -- tests cannot be run. --SELECT 'ST_LineToCurve01', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_2d))) FROM public.multicurve; --SELECT 'ST_LineToCurve02', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dm))) FROM public.multicurve; --SELECT 'ST_LineToCurve03', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_3dz))) FROM public.multicurve; --SELECT 'ST_LineToCurve04', ST_Asewkt(ST_LineToCurve(ST_CurveToLine(the_geom_4d))) FROM public.multicurve; -- Repeat all tests with the new function names. SELECT 'astext01', ST_astext(the_geom_2d) FROM public.multicurve; SELECT 'astext02', ST_astext(the_geom_3dm) FROM public.multicurve; SELECT 'astext03', ST_astext(the_geom_3dz) FROM public.multicurve; SELECT 'astext04', ST_astext(the_geom_4d) FROM public.multicurve; SELECT 'asewkt01', ST_asewkt(the_geom_2d) FROM public.multicurve; SELECT 'asewkt02', ST_asewkt(the_geom_3dm) FROM public.multicurve; SELECT 'asewkt03', ST_asewkt(the_geom_3dz) FROM public.multicurve; SELECT 'asewkt04', ST_asewkt(the_geom_4d) FROM public.multicurve; -- These tests will fail on different architectures -- We need a way to handle multiple byte orderings --SELECT 'asbinary01', encode(ST_asbinary(the_geom_2d), 'hex') FROM public.multicurve; --SELECT 'asbinary02', encode(ST_asbinary(the_geom_3dm), 'hex') FROM public.multicurve; --SELECT 'asbinary03', encode(ST_asbinary(the_geom_3dz), 'hex') FROM public.multicurve; --SELECT 'asbinary04', encode(ST_asbinary(the_geom_4d), 'hex') FROM public.multicurve; -- --SELECT 'asewkb01', encode(ST_asewkb(the_geom_2d), 'hex') FROM public.multicurve; --SELECT 'asewkb02', encode(ST_asewkb(the_geom_3dm), 'hex') FROM public.multicurve; --SELECT 'asewkb03', encode(ST_asewkb(the_geom_3dz), 'hex') FROM public.multicurve; --SELECT 'asewkb04', encode(ST_asewkb(the_geom_4d), 'hex') FROM public.multicurve; -- Removed due to descrepencies between hardware --SELECT 'box2d01', ST_box2d(the_geom_2d) FROM public.multicurve; --SELECT 'box2d02', ST_box2d(the_geom_3dm) FROM public.multicurve; --SELECT 'box2d03', ST_box2d(the_geom_3dz) FROM public.multicurve; --SELECT 'box2d04', ST_box2d(the_geom_4d) FROM public.multicurve; --SELECT 'box3d01', ST_box3d(the_geom_2d) FROM public.multicurve; --SELECT 'box3d02', ST_box3d(the_geom_3dm) FROM public.multicurve; --SELECT 'box3d03', ST_box3d(the_geom_3dz) FROM public.multicurve; --SELECT 'box3d04', ST_box3d(the_geom_4d) FROM public.multicurve; SELECT 'isValid01', ST_isValid(the_geom_2d) FROM public.multicurve; SELECT 'isValid02', ST_isValid(the_geom_3dm) FROM public.multicurve; SELECT 'isValid03', ST_isValid(the_geom_3dz) FROM public.multicurve; SELECT 'isValid04', ST_isValid(the_geom_4d) FROM public.multicurve; SELECT 'dimension01', ST_dimension(the_geom_2d) FROM public.multicurve; SELECT 'dimension02', ST_dimension(the_geom_3dm) FROM public.multicurve; SELECT 'dimension03', ST_dimension(the_geom_3dz) FROM public.multicurve; SELECT 'dimension04', ST_dimension(the_geom_4d) FROM public.multicurve; SELECT 'numGeometries01', ST_numGeometries(the_geom_2d) FROM public.multicurve; SELECT 'numGeometries02', ST_numGeometries(the_geom_3dm) FROM public.multicurve; SELECT 'numGeometries03', ST_numGeometries(the_geom_3dz) FROM public.multicurve; SELECT 'numGeometries04', ST_numGeometries(the_geom_4d) FROM public.multicurve; SELECT 'geometryN-201', ST_asEWKT(ST_geometryN(the_geom_2d, 2)) FROM public.multicurve; SELECT 'geometryN-202', ST_asEWKT(ST_geometryN(the_geom_3dm, 2)) FROM public.multicurve; SELECT 'geometryN-203', ST_asEWKT(ST_geometryN(the_geom_3dz, 2)) FROM public.multicurve; SELECT 'geometryN-204', ST_asEWKT(ST_geometryN(the_geom_4d, 2)) FROM public.multicurve; SELECT 'geometryN-301', (ST_asEWKT(ST_geometryN(the_geom_2d, 3)) is null) FROM public.multicurve; SELECT 'geometryN-302', (ST_asEWKT(ST_geometryN(the_geom_3dm, 3)) is null) FROM public.multicurve; SELECT 'geometryN-303', (ST_asEWKT(ST_geometryN(the_geom_3dz, 3)) is null) FROM public.multicurve; SELECT 'geometryN-304', (ST_asEWKT(ST_geometryN(the_geom_4d, 3)) is null) FROM public.multicurve; SELECT DropGeometryColumn('public', 'multicurve', 'the_geom_2d'); SELECT DropGeometryColumn('public', 'multicurve', 'the_geom_3dm'); SELECT DropGeometryColumn('public', 'multicurve', 'the_geom_3dz'); SELECT DropGeometryColumn('public', 'multicurve', 'the_geom_4d'); DROP TABLE public.multicurve; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/concave_hull.sql����������������������������������������������������0000644�0000000�0000000�00000003746�11722777314�020442� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id: concave_hull.sql 9324 2012-02-27 22:08:12Z pramsey $ -- Tests to confirm the concave hull area is <= convex hull and -- covers the original geometry (can't use covers because always gives topo errors with 3.3 SELECT 'ST_ConcaveHull MultiPolygon 0.95', ST_Area(ST_Intersection(geom,ST_ConcaveHull( geom, 0.95) )) = ST_Area(geom) As encloses_geom, (ST_Area(ST_ConvexHull(geom)) - ST_Area(ST_ConcaveHull(geom, 0.95))) < (0.95 * ST_Area(ST_ConvexHull(geom) ) ) As reached_target FROM ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ) As geom; SELECT 'ST_ConcaveHull Lines 0.80', ST_Intersection(geom,ST_ConcaveHull( geom, 0.80) ) = geom As encloses_geom, (ST_Area(ST_ConvexHull(geom)) - ST_Area(ST_ConcaveHull(geom, 0.80))) < (0.80 * ST_Area(ST_ConvexHull(geom) ) ) As reached_target FROM ST_GeomFromText('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94, 130 62,122 40,156 32,162 76,172 88), (132 178,134 148,128 136,96 128,132 108,150 130, 170 142,174 110,156 96,158 90,158 88), (22 64,66 28,94 38,94 68,114 76,112 30, 132 10,168 18,178 34,186 52,184 74,190 100, 190 122,182 148,178 170,176 184,156 164,146 178, 132 186,92 182,56 158,36 150,62 150,76 128,88 118))') As geom; -- test holes vs. no holes - holes should still enclose but have smaller area than no holes -- SELECT 'ST_ConcaveHull Lines 0.80 holes', ST_Intersection(geom,ST_ConcaveHull( geom, 0.80, true) ) = geom As encloses_geom, ST_Area(ST_ConcaveHull(geom, 0.80, true)) < ST_Area(ST_ConcaveHull(geom, 0.80)) As reached_target FROM ST_GeomFromText('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94, 130 62,122 40,156 32,162 76,172 88), (132 178,134 148,128 136,96 128,132 108,150 130, 170 142,174 110,156 96,158 90,158 88), (22 64,66 28,94 38,94 68,114 76,112 30, 132 10,168 18,178 34,186 52,184 74,190 100, 190 122,182 148,178 170,176 184,156 164,146 178, 132 186,92 182,56 158,36 150,62 150,76 128,88 118))') As geom; ��������������������������postgis-2.1.2+dfsg.orig/regress/dumppoints_expected�������������������������������������������������0000644�0000000�0000000�00000003721�12141205260�021234� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{1}|POINT(0 9) {1}|POINT(0 0) {2}|POINT(0 9) {3}|POINT(9 9) {4}|POINT(9 0) {5}|POINT(0 0) {1,1}|POINT(0 0) {1,2}|POINT(0 9) {1,3}|POINT(9 9) {1,4}|POINT(9 0) {1,5}|POINT(0 0) {1,1}|POINT(0 0) {1,2}|POINT(0 9) {1,3}|POINT(9 0) {1,4}|POINT(0 0) {1,1}|POINT(0 0) {1,2}|POINT(0 9) {1,3}|POINT(9 9) {1,4}|POINT(9 0) {1,5}|POINT(0 0) {2,1}|POINT(1 1) {2,2}|POINT(1 3) {2,3}|POINT(3 2) {2,4}|POINT(1 1) {3,1}|POINT(7 6) {3,2}|POINT(6 8) {3,3}|POINT(8 8) {3,4}|POINT(7 6) {1,1,1}|POINT(0 0) {1,1,2}|POINT(0 3) {1,1,3}|POINT(4 3) {1,1,4}|POINT(4 0) {1,1,5}|POINT(0 0) {2,1,1}|POINT(2 4) {2,1,2}|POINT(1 6) {2,1,3}|POINT(4 5) {2,1,4}|POINT(2 4) {2,2,1}|POINT(7 6) {2,2,2}|POINT(6 8) {2,2,3}|POINT(8 8) {2,2,4}|POINT(7 6) {1,1,1}|POINT(0 0 0) {1,1,2}|POINT(0 0 1) {1,1,3}|POINT(0 1 1) {1,1,4}|POINT(0 1 0) {1,1,5}|POINT(0 0 0) {2,1,1}|POINT(0 0 0) {2,1,2}|POINT(0 1 0) {2,1,3}|POINT(1 1 0) {2,1,4}|POINT(1 0 0) {2,1,5}|POINT(0 0 0) {1,1,1}|POINT(0 0 0) {1,1,2}|POINT(0 0 1) {1,1,3}|POINT(0 1 0) {1,1,4}|POINT(0 0 0) {2,1,1}|POINT(0 0 0) {2,1,2}|POINT(0 1 0) {2,1,3}|POINT(1 1 0) {2,1,4}|POINT(0 0 0) {1,1}|POINT(99 98) {2,1}|POINT(1 1) {2,2}|POINT(3 3) {3,1,1}|POINT(0 0) {3,1,2}|POINT(0 1) {3,1,3}|POINT(1 1) {3,1,4}|POINT(0 0) {4,1,1}|POINT(0 0) {4,1,2}|POINT(0 9) {4,1,3}|POINT(9 9) {4,1,4}|POINT(9 0) {4,1,5}|POINT(0 0) {4,2,1}|POINT(5 5) {4,2,2}|POINT(5 6) {4,2,3}|POINT(6 6) {4,2,4}|POINT(5 5) {5,1,1,1}|POINT(0 0) {5,1,1,2}|POINT(0 9) {5,1,1,3}|POINT(9 9) {5,1,1,4}|POINT(9 0) {5,1,1,5}|POINT(0 0) {5,1,2,1}|POINT(5 5) {5,1,2,2}|POINT(5 6) {5,1,2,3}|POINT(6 6) {5,1,2,4}|POINT(5 5) {1,1}|POINT(-71.0821 42.3036) {1,2}|POINT(-71.4821 42.3036) {1,3}|POINT(-71.7821 42.7036) {1,4}|POINT(-71.0821 42.7036) {1,5}|POINT(-71.0821 42.3036) {2,1}|POINT(-71.1821 42.4036) {2,2}|POINT(-71.3821 42.6036) {2,3}|POINT(-71.3821 42.4036) {2,4}|POINT(-71.1821 42.4036) {1,1}|POINT(0 0) {1,2}|POINT(4 0) {1,3}|POINT(4 4) {1,4}|POINT(0 4) {1,5}|POINT(0 0) {2,1}|POINT(1 1) {2,2}|POINT(3 3) {2,3}|POINT(3 1) {2,4}|POINT(1 1) �����������������������������������������������postgis-2.1.2+dfsg.orig/regress/polygonize.sql������������������������������������������������������0000644�0000000�0000000�00000000640�11722777314�020165� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT 1, ST_AsText(ST_Polygonize( 'GEOMETRYCOLLECTION( MULTILINESTRING( (1656318.45 4833344.45,1656321.79 4833339.62,1656312.54 4833333.49), (1656312.54 4833333.49,1656309.68 4833337.07) ), LINESTRING(1656309.68 4833337.07,1656318.45 4833344.45) )'::geometry)); -- See ticket #1602 SELECT 2, ST_AsEWKT(ST_Polygonize( 'MULTILINESTRING((0 0 0, 0 10 0, 10 10 0),(10 10 0, 10 0 5, 0 0 0))' ::geometry)); ������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/isvalid_test��������������������������������������������������������0000644�0000000�0000000�00000275071�07672176700�017677� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN; CREATE TABLE "validtest" ( "g" geometry, "result" boolean, "comment" text ); -- -- Data for TOC Entry ID 3 (OID 100237962) -- -- Name: validtest Type: TABLE DATA Owner: dblasby -- INSERT INTO "validtest" VALUES ('SRID=-1;POINT(10 10)','t','P - point'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(10 10,20 20,30 30)','t','mP - no repeated points'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(10 10,20 20,30 30,10 10)','t','P - repeated points'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 180,120 120,140 200,200 140,240 200)','t','L - no repeated points'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 180,120 120,140 200,140 200,200 140,240 200)','t','L - repeated points'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,0 0)','f','L - linestring with two identical points '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,0 0,0 0,0 0,0 0))','f','A - zero-area polygon '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,10 0,20 0,0 0,0 0))','f','A - polygon with too few points '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((107 246,107 246,250 285,294 137,151 90,15 125,157 174,107 246))','t','A - polygon with repeatd point '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((100 20,180 20,180 100,100 100,100 20)),((20 100,100 100,100 180,20 180,20 100)),((100 180,180 180,180 260,100 260,100 180)),((180 100,180 180,180 180,180 100)))','f','mA - multipolygon with component with too few points '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 40,0 0,40 40,40 0,0 40))','f','A - polygon self-intersects at non-vertex'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((0 40,20 20,40 0,40 40,20 20,0 0,0 40)))','f','A - polygon self-intersects at vertex'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 40,20 20,40 0,40 40,0 0,0 40))','f','A - polygon self-intersects at vertex/non-vertex'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((-10 50,50 50,50 -10,-10 -10,-10 50),(0 40,0 0,40 40,40 0,0 40))','f','A - hole self-intersects at non-vertex'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((-10 50,50 50,50 -10,-10 -10,-10 50),(0 40,20 20,40 0,40 40,20 20,0 0,0 40))','f','A - polygon self-intersects at vertex'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((-10 50,50 50,50 -10,-10 -10,-10 50),(0 40,20 20,40 0,40 40,0 0,0 40))','f','A - polygon self-intersects at vertex/non-vertex'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 60,0 0,60 0,60 60,0 60),(20 40,20 20,40 20,40 40,20 40))','t','A - Valid doughnut'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 60,0 0,0 0,60 0,60 60,0 60),(20 40,20 20,40 20,40 40,20 40))','t','A - shell has repeated points'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 60,0 0,60 0,60 60,0 60),(20 40,20 20,60 20,20 40))','t','A - shell touches hole without crossing it (valid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 60,0 0,60 0,60 60,0 60),(0 40,20 20,60 20,0 40))','f','A - shell touches hole without crossing it, but does so twice (invalid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 120,0 0,140 0,140 120,0 120),(100 100,100 20,120 20,120 100,100 100),(20 100,20 40,100 40,20 100))','t','A - hole touches hole without crossing it (valid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 120,0 0,140 0,140 120,0 120),(100 100,100 20,120 20,120 100,100 100),(20 100,20 40,100 40,80 60,100 80,20 100))','f','A - holel touches hole without crossing it, but does so twice (invalid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 120,0 0,140 0,140 120,0 120),(100 100,100 20,120 20,120 100,100 100),(20 100,20 40,100 40,100 80,20 100))','f','A - hole touches hole without crossing it, but does so at an infinite number of points (invalid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 60,0 0,60 0,60 20,100 20,60 20,60 60,0 60))','f','A - spike (invalid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 60,0 0,60 0,60 20,20 20,60 20,60 60,0 60))','f','A - puncture (invalid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 140,0 0,180 0,180 140,0 140),(20 20,160 20,160 120,20 120,20 20),(40 100,40 40,140 40,140 100,40 100))','f','A - hole within a hole (invalid)'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 280,260 180,60 80,60 280),(140 80,120 180,200 180,140 80))','f','A - hole overlapping shell at non-vertex'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 340,60 100,340 100,340 280,340 200,340 340,60 340))','f','A - shell self-overlaps '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 260,40 60,120 60,180 160,240 60,300 60,300 260,40 260),(70 230,80 230,80 220,80 220,70 230))','t','A - hole with repeated points'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 260,40 60,120 60,180 160,240 60,300 60,300 260,40 260),(180 160,240 60,120 60,180 160))','f','A - hole outside but adjacent to shell'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((240 260,40 260,40 80,240 80,240 260),(140 180,40 180,140 260,140 180))','f','A - hole touches shell at two points'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((240 260,40 260,40 80,240 80,240 260),(140 180,40 180,140 240,140 180))','t','A - hole touches shell at one non-vertex point'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((240 260,40 260,40 80,240 80,240 260),(140 180,40 260,140 240,140 180))','t','A - hole touches shell at one vertex point'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 180,20 20,140 20,140 180,20 180),(160 120,180 100,160 80,160 120))','f','A - hole outside shell'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 180,20 20,140 20,140 180,20 180),(20 180,20 20,140 20,140 180,20 180))','f','A - hole identical to shell'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 180,20 20,140 20,140 180,20 180),(20 180,20 20,140 20,140 180,20 180))','f','A - hole identical to shell'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((380 340,40 340,40 20,380 20,380 340),(120 300,300 280,320 200,160 140,200 80,320 120,320 200,360 60,120 40,120 300))','f','A - hole self-intersects '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 320,260 320,260 20,20 20,20 320),(140 280,80 100,200 100,140 280),(140 280,40 80,240 80,140 280))','f','A - holes overlap, first point is identical '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 320,240 320,240 40,20 40,20 320),(140 180,60 120,60 240,140 180),(140 180,200 120,200 240,140 180))','t','A - holes do not overlap, first point is identical '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((340 320,340 200,200 280,200 80,340 200,340 20,60 20,60 340,340 320))','f','A - shell self-touches at vertex '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((300 320,300 220,260 260,180 220,360 220,360 140,120 140,120 320,300 320))','f','A - shell self-touches at non-vertex '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 300,40 20,280 20,280 300,40 300),(120 240,80 180,160 220,120 240),(220 240,160 220,220 160,220 240),(160 100,80 180,100 80,160 100),(160 100,220 160,240 100,160 100))','f','A - chain of holes surrounds an island inside the polygon '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 320,340 320,340 20,40 20,40 320),(100 120,40 20,180 100,100 120),(200 200,180 100,240 160,200 200),(260 260,240 160,300 200,260 260),(300 300,300 200,340 320,300 300))','f','A - chain of holes splits polygon in two (touching at vertices) '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 320,340 320,340 20,40 20,40 320),(100 120,40 20,180 100,100 120),(200 200,180 100,240 160,200 200),(260 260,240 160,300 200,260 260),(300 300,300 200,340 260,300 300))','f','A - chain of holes splits polygon in two (touching at non-vertex) '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,360 20,20 20,190 190),(90 50,150 110,190 50,90 50),(190 50,230 110,290 50,190 50))','t','A - holes touch in one point '); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 340,300 340,300 40,40 40,40 340),(180 260,100 120,240 100,180 260),(100 120,240 100,180 260,100 120))','f','A - duplicate holes '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((40 120,140 120,140 40,40 40,40 120)),((140 120,40 120,40 200,140 200,140 120)))','f','mA - adjacent shells (shared vertices) '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((40 120,140 120,140 40,40 40,40 120)),((160 120,60 120,40 200,140 200,160 120)))','f','mA - adjacent shells (different vertices) '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((80 260,240 260,240 100,80 100,80 260)),((120 240,220 240,220 140,120 140,120 240)))','f','mA - nested overlapping shells '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((60 320,60 80,300 80,60 320),(80 280,80 100,260 100,80 280)),((120 160,140 160,140 140,120 160)))','t','mA - nested non-overlapping shells '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 380,420 380,420 20,20 20,20 380),(220 340,180 240,60 200,180 160,340 60,240 220,220 340)),((180 240,180 160,240 220,180 240)))','t','mA - nested non-overlapping shells, all vertices touch '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 380,420 380,420 20,20 20,20 380),(220 340,180 240,60 200,140 100,340 60,300 240,220 340)),((60 200,340 60,220 340,60 200)))','f','mA - nested overlapping shells, all vertices touch '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 380,420 380,420 20,20 20,20 380),(220 340,80 320,60 200,140 100,340 60,300 240,220 340)),((60 200,340 60,220 340,60 200)))','t','mA - nested non-overlapping shells, all vertices touch '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 380,420 380,420 20,20 20,20 380),(220 340,180 240,60 200,200 180,340 60,240 220,220 340)),((60 200,340 60,220 340,60 200)))','f','mA - nested overlapping shells, all vertices touch '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((100 20,180 20,180 100,100 100,100 20)),((20 100,100 100,100 180,20 180,20 100)),((100 180,180 180,180 260,100 260,100 180)),((180 100,260 100,260 180,180 180,180 100)))','t','mA - disconnected exterior '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,70 200,150 200,110 110)),((110 110,150 20,70 20,110 110)))','t','mA - shells touch in single point '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((60 300,320 220,260 60,60 100,60 300)),((60 300,320 220,260 60,60 100,60 300)))','f','mA - duplicate shells '); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((180 60,240 160,300 60,180 60)),((80 80,180 60,160 140,240 160,360 140,300 60,420 100,320 280,120 260,80 80)))','t','mA - shells are not nested but share all vertices '); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(-123456789 -40,381039468754763 123456789)','t','Test 1'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(0 0)','t','Test 2'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,20 100,120 100,140 20,20 20))','t','Test 3'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,140 20,120 100,20 100,20 20))','t','Test 4'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 100,140 20,20 20,20 100,120 100))','t','Test 5'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 100,60 100,120 100,140 20,80 20,20 20,20 100))','t','Test 6'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,80 0,80 80,0 80,0 0))','t','Test 7'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 200,100 140,180 140,180 200,100 200))','t','Test 8'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 120,160 20,20 20,20 120,140 120))','t','Test 9'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 120,140 200,240 200,240 120,140 120))','t','Test 10'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((80 180,140 260,260 200,200 60,80 180))','t','Test 11'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((240 80,140 120,180 240,280 200,240 80))','t','Test 12'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 160,20 20,270 20,150 160,230 40,60 40,140 160))','t','Test 13'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 40,180 80,120 100,140 40))','t','Test 14'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 100,180 80,130 40,120 100))','t','Test 15'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,180 20,140 140,20 140,20 20))','t','Test 16'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((180 100,80 200,180 280,260 200,180 100))','t','Test 17'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 140,20 120,0 220,120 240,140 140))','t','Test 18'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 200,210 70,120 70,160 200))','t','Test 19'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 200,260 40,70 40,160 200,20 20,310 20,160 200))','f','Test 20'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 140,200 70,200 160,110 140))','t','Test 21'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 140,110 50,60 50,60 90,160 190,20 110,20 20,200 20,110 140))','f','Test 22'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 120,20 20,260 20,260 120,200 40,140 120,80 40,20 120))','t','Test 23'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 120,20 240,260 240,260 120,200 200,140 120,80 200,20 120))','t','Test 24'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 120,20 20,260 20,260 120,180 40,140 120,100 40,20 120))','t','Test 25'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 120,300 120,140 240,20 120))','t','Test 26'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,20 300,280 300,280 260,220 260,60 100,60 60,280 60,280 20,20 20))','t','Test 27'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 140,160 80,280 180,200 240,220 160,160 200,180 120,100 140))','t','Test 28'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((260 200,180 80,120 160,200 160,180 220,260 200))','t','Test 29'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,280 20,280 140,220 60,140 140,80 60,20 140,20 20))','t','Test 30'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 140,300 140,140 240,0 140))','t','Test 31'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 240,20 140,320 140,180 240,20 240))','t','Test 32'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 240,20 140,80 180,140 140,220 180,280 140,280 240,20 240))','t','Test 33'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 120,180 60,20 20,20 120,120 120))','t','Test 34'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 120,220 20,280 20,240 160,120 120))','t','Test 35'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 120,160 20,260 120,220 200,140 120))','t','Test 36'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 140,120 40,20 40,20 140))','t','Test 37'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 140,190 20,140 20,20 140,190 140))','t','Test 38'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((300 20,220 20,120 120,260 160,300 20))','t','Test 39'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 120,240 160,280 60,160 20,140 120))','t','Test 40'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((280 60,180 60,120 120,260 180,280 60))','t','Test 41'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 200,120 120,40 120,40 200,120 200))','t','Test 42'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 220,140 120,60 120,40 220,160 220))','t','Test 43'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 120,20 120,20 220,140 220,140 120))','t','Test 44'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((320 20,220 20,80 160,240 140,320 20))','t','Test 45'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,20 180,220 180,220 20,20 20))','t','Test 46'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 40,60 140,180 140,180 40,60 40))','t','Test 47'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,80 140,160 60,20 20))','t','Test 48'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 60,20 20,100 140,160 60))','t','Test 49'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 100,140 160,160 40,20 100))','t','Test 50'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 40,20 100,160 160,160 40))','t','Test 51'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 180,180 120,80 40,20 180))','t','Test 52'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((180 120,100 40,20 180,180 120))','t','Test 53'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,140 40,140 120,20 160,80 80,20 20))','t','Test 54'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,140 40,140 140,20 180,80 100,20 20))','t','Test 55'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 180,60 100,180 100,200 180,120 120,40 180))','t','Test 56'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 180,60 80,180 80,220 180,120 120,20 180))','t','Test 57'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 60,20 180,100 100,140 180,160 120,220 100,140 40,40 60))','t','Test 58'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 100,180 100,220 180,120 140,20 180,60 100))','t','Test 59'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,20 140,120 120,120 40,20 20))','t','Test 60'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,20 180,140 140,140 60,20 20))','t','Test 61'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,120 40,120 120,20 140,20 20))','t','Test 62'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 40,20 20,20 140,120 120,120 40))','t','Test 63'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,140 60,140 140,20 180,20 20))','t','Test 64'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 60,20 20,20 180,140 140,140 60))','t','Test 65'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,60 120,140 120,180 20,20 20))','t','Test 66'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 40,120 40,120 120,20 140,20 40))','t','Test 67'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,20 180,60 120,100 180,140 120,220 180,200 120,140 60,20 20))','t','Test 68'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((150 150,330 150,250 70,70 70,150 150))','t','Test 69'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((150 150,270 150,140 20,20 20,150 150))','t','Test 70'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((150 150,270 150,330 150,250 70,190 70,70 70,150 150))','t','Test 71'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((150 150,270 150,190 70,140 20,20 20,70 70,150 150))','t','Test 72'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,60 50,20 40,60 70,20 60,60 90,20 90,70 110,20 130,80 130,20 150,80 160,20 170,80 180,20 200,80 200,30 240,80 220,50 260,100 220,100 260,120 220,130 260,140 220,150 280,150 190,160 280,170 190,180 280,190 190,200 280,210 190,220 280,230 190,240 260,250 230,260 260,260 220,290 270,290 220,330 260,300 210,340 240,290 180,340 210,290 170,350 170,240 150,350 150,240 140,350 130,240 120,350 120,240 110,350 110,240 100,350 100,240 90,350 90,240 80,350 80,300 70,340 60,290 60,340 40,300 50,340 20,270 60,310 20,250 60,270 20,230 60,240 20,210 60,210 20,190 70,190 20,180 90,170 20,160 90,150 20,140 90,130 20,120 90,110 20,100 90,100 20,90 60,80 20,70 40,20 20))','t','Test 73'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 140,140 130,200 160,130 150,210 170,130 170,210 180,120 190,220 200,120 200,250 210,120 210,250 220,120 220,250 230,120 240,230 240,120 250,240 260,120 260,240 270,120 270,270 290,120 290,230 300,150 310,250 310,180 320,250 320,200 360,260 330,240 360,280 320,290 370,290 320,320 360,310 320,360 360,310 310,380 340,310 290,390 330,310 280,410 310,310 270,420 280,310 260,430 250,300 250,440 240,300 240,450 230,280 220,440 220,280 210,440 210,300 200,430 190,300 190,440 180,330 180,430 150,320 180,420 130,300 180,410 120,280 180,400 110,280 170,390 90,280 160,400 70,270 160,450 30,260 160,420 30,250 160,390 30,240 160,370 30,230 160,360 30,230 150,330 50,240 130,330 30,230 130,310 30,220 130,280 30,230 100,270 40,220 110,250 30,210 130,240 30,210 100,220 40,200 90,200 20,190 100,180 30,20 20,180 40,20 30,180 50,20 50,180 60,30 60,180 70,20 70,170 80,80 80,170 90,20 80,180 100,40 100,200 110,60 110,200 120,120 120,190 140))','t','Test 74'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((70 150,20 160,110 160,20 180,100 200,20 200,190 210,20 210,160 220,20 220,150 230,60 240,180 250,20 260,170 260,60 270,160 270,100 310,170 280,200 260,180 230,210 260,130 330,230 250,210 290,240 250,230 210,260 300,250 230,270 300,270 240,300 340,280 250,320 330,290 250,340 350,290 240,350 360,270 190,350 340,290 200,350 330,300 190,360 320,310 190,360 300,320 200,360 280,330 200,360 260,340 200,370 260,340 180,390 290,340 170,400 260,350 170,400 250,350 160,410 240,350 150,400 170,350 140,310 170,340 140,270 180,330 140,260 170,310 140,240 170,290 140,200 190,270 140,180 190,260 140,170 190,260 130,170 180,250 130,170 170,240 120,170 160,210 120,170 150,210 110,340 130,230 110,420 140,220 100,410 130,220 90,400 120,220 80,390 110,220 70,420 110,240 70,420 100,260 70,420 90,280 70,430 80,230 60,430 60,270 50,450 40,210 50,370 40,260 40,460 30,160 40,210 60,200 110,190 60,190 120,170 50,180 130,150 30,170 130,140 20,160 120,130 20,160 150,120 20,160 170,110 20,160 190,100 20,150 190,90 20,140 180,80 20,120 140,70 20,120 150,60 20,110 150,50 20,100 140,50 30,90 130,40 30,80 120,30 30,80 130,30 40,80 140,20 40,70 140,40 90,60 130,20 90,60 140,20 130,70 150))','t','Test 75'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 160,220 160,220 20,60 20,60 160))','t','Test 76'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 160,20 200,260 200,220 160,140 80,60 160))','t','Test 77'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 160,20 200,260 200,140 80,60 160))','t','Test 78'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 200,140 80,260 200,20 200))','t','Test 79'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 200,60 160,140 80,220 160,260 200,20 200))','t','Test 80'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 200,60 160,140 80,260 200,20 200))','t','Test 81'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,0 200,200 200,200 0,0 0))','t','Test 82'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,1000000 110,10000000 100,100 100))','t','Test 83'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 0,100 200,200 200,200 0,100 0))','t','Test 84'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 0,120 200,200 200,200 0,120 0))','t','Test 85'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,0 200,110 200,110 0,0 0))','t','Test 86'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,100 200,200 200,200 100,100 100))','t','Test 87'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,2100 110,2100 100,100 100))','t','Test 88'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,2101 110,2101 100,100 100))','t','Test 89'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,200 200,200 100,100 100))','t','Test 90'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,1000000 110,1000000 100,100 100))','t','Test 91'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 100,120 200,200 200,200 100,120 100))','t','Test 93'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,500 110,500 100,100 100))','t','Test 94'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,501 110,501 100,100 100))','t','Test 95'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 100,130 200,200 200,200 100,120 100))','t','Test 96'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 100,17 200,200 200,200 100,120 100))','t','Test 97'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((101 99,101 1000000,102 1000000,101 99))','t','Test 98'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,200 101,200 100,100 100))','t','Test 99'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((16 319,150 39,25 302,160 20,265 20,127 317,16 319))','t','Test 100'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((10 307,22 307,153 34,22 34,10 307))','t','Test 101'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 200,310 20,20 20,160 200),(160 200,260 40,70 40,160 200))','t','Test 102'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((170 120,240 100,260 50,190 70,170 120))','t','Test 103'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,330 120,260 50,100 50,170 120))','t','Test 104'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((270 90,200 50,150 80,210 120,270 90))','t','Test 105'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((170 120,260 100,240 60,150 80,170 120))','t','Test 106'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((220 120,270 80,200 60,160 100,220 120))','t','Test 107'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((260 50,180 70,180 110,260 90,260 50))','t','Test 108'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((230 110,290 80,190 60,140 90,230 110))','t','Test 109'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((170 120,330 120,260 50,100 50,170 120))','t','Test 110'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((170 120,330 120,280 70,120 70,170 120))','t','Test 111'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((170 120,300 120,250 70,120 70,170 120))','t','Test 112'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 100,310 100,260 50,140 50,190 100))','t','Test 113'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((280 130,360 130,270 40,190 40,280 130))','t','Test 114'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((150 150,410 150,280 20,20 20,150 150),(170 120,250 120,180 50,100 50,170 120))','t','Test 115'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((220 80,180 40,80 40,170 130,270 130,230 90,300 90,250 30,280 30,390 140,150 140,40 30,230 30,280 80,220 80))','t','Test 116'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((260 130,360 130,280 40,170 40,260 130))','t','Test 117'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((240 110,340 110,290 60,190 60,240 110))','t','Test 118'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((250 120,350 120,280 50,180 50,250 120))','t','Test 119'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((230 210,230 20,20 20,20 210,230 210),(120 180,50 50,200 50,120 180))','t','Test 120'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((230 210,230 20,20 20,20 210,230 210),(140 40,40 40,40 170,140 40),(110 190,210 190,210 50,110 190))','t','Test 121'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((280 190,330 150,200 110,150 150,280 190))','t','Test 122'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((140 110,260 110,170 20,50 20,140 110)),((300 270,420 270,340 190,220 190,300 270)))','t','Test 123'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((80 190,220 190,140 110,0 110,80 190))','t','Test 124'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((330 150,200 110,150 150,280 190,330 150))','t','Test 125'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((290 190,340 150,220 120,170 170,290 190))','t','Test 126'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((220 190,340 190,260 110,140 110,220 190))','t','Test 127'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 190,220 190,100 70,20 70,140 190))','t','Test 128'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 220,60 140,140 60,220 140,140 220))','t','Test 129'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((100 20,180 20,180 100,100 100,100 20)),((20 100,100 100,100 180,20 180,20 100)),((100 180,180 180,180 260,100 260,100 180)),((180 100,260 100,260 180,180 180,180 100)))','t','Test 130'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,70 200,150 200,110 110)),((110 110,150 20,70 20,110 110)))','t','Test 131'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110)),((110 110,60 60,10 110,60 160,110 110)))','t','Test 132'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,70 200,150 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,150 20,70 20,110 110),(110 110,120 40,100 40,110 110)))','t','Test 133'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,160 160,210 110,160 60,110 110),(110 110,160 130,160 90,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))','t','Test 134'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,70 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,70 20,110 110),(110 110,120 40,100 40,110 110)))','t','Test 135'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,20 200,200 200,110 110),(110 110,100 180,120 180,110 110)),((110 110,200 20,20 20,110 110),(110 110,120 40,100 40,110 110)))','t','Test 136'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,70 200,210 110,70 20,110 110),(110 110,110 140,150 110,110 80,110 110)),((110 110,60 60,10 110,60 160,110 110),(110 110,60 90,60 130,110 110)))','t','Test 137'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 60,140 100,100 140,60 100,100 60))','t','Test 138'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((80 40,120 40,120 80,80 80,80 40)),((120 80,160 80,160 120,120 120,120 80)),((80 120,120 120,120 160,80 160,80 120)),((40 80,80 80,80 120,40 120,40 80)))','t','Test 139'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(150 150,40 230)','t','Test 140'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((150 150,410 150,280 20,20 20,150 150))','t','Test 141'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,50 130,130 130)','t','Test 142'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 230,150 150)','t','Test 143'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(210 150,330 150)','t','Test 144'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 150,310 150,360 220)','t','Test 145'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(180 150,250 150,230 250,370 250,410 150)','t','Test 146'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(210 210,220 150,320 150,370 210)','t','Test 147'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 60,150 60)','t','Test 148'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 90,310 180)','t','Test 149'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 210,210 90)','t','Test 150'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(290 10,130 170)','t','Test 151'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(30 100,100 100,180 100)','t','Test 152'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 100,100 100,360 100,410 100)','t','Test 153'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 210,150 150,210 90)','t','Test 154'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(180 90,280 120)','t','Test 155'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(70 70,80 20)','t','Test 156'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 20,150 60)','t','Test 157'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(70 70,80 20,140 20,150 60)','t','Test 158'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(170 50,170 20,240 20,260 60)','t','Test 159'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(50 100,140 190,280 190)','t','Test 160'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 60,180 100,290 100)','t','Test 161'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(170 120,210 80,270 80)','t','Test 162'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(170 120,260 50)','t','Test 163'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(190 90,190 270)','t','Test 164'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,360 20,20 20,190 190),(190 190,280 50,100 50,190 190))','t','Test 165'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 160,150 70)','t','Test 166'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,360 20,20 20,190 190),(110 110,250 100,140 30,110 110))','t','Test 167'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))','t','Test 168'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(190 90,190 190,190 270)','t','Test 169'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 160,110 110,150 70)','t','Test 170'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,110 110,20 20,360 20,190 190),(250 100,110 110,140 30,250 100))','t','Test 171'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 110,180 110,190 60)','t','Test 172'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 200,240 200,240 20,20 20,20 200),(130 110,60 180,60 40,130 110),(130 110,200 40,200 180,130 110))','t','Test 173'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 110,180 110)','t','Test 174'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 200,20 20,240 20,240 200,20 200),(60 180,130 110,60 40,60 180),(130 110,200 40,200 180,130 110))','t','Test 175'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 110,170 110)','t','Test 176'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,130 40,200 110,130 180))','t','Test 177'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 110,130 110,170 110)','t','Test 178'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 110,130 110,180 110)','t','Test 179'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(160 70,320 230)','t','Test 180'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(160 70,200 110,280 190,320 230)','t','Test 181'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(70 50,70 150)','t','Test 182'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((0 0,0 100,140 100,140 0,0 0)),((20 170,70 100,130 170,20 170)))','t','Test 183'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,20 200,200 200,110 110)','t','Test 184'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,200 20,110 110,20 20))','t','Test 185'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(150 70,160 110,200 60,150 70)','t','Test 186'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 60,120 40,120 70,80 60)','t','Test 187'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 110,200 20,20 20,110 110),(110 90,50 30,170 30,110 90))','t','Test 188'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,200 20,110 110,20 20)','t','Test 189'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 90,170 30,50 30,110 90)','t','Test 190'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,170 50,170 110,110 110)','t','Test 191'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 90,70 50,130 50,110 90)','t','Test 192'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 60,20 150,200 150,110 60)','t','Test 193'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 130,110 70,200 100,110 130)','t','Test 194'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 90,160 40,60 40,110 90)','t','Test 195'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 100,40 30,180 30,110 100)','t','Test 196'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 110,200 20,20 20,110 110),(110 90,60 40,160 40,110 90))','t','Test 197'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,180 30,40 30,110 110)','t','Test 198'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 90,180 30,40 30,110 90)','t','Test 199'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 90,50 30,180 30,110 90)','t','Test 200'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 200,200 110,110 200)','t','Test 201'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 110,200 20,20 20,110 110))','t','Test 202'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 200,110 110,20 200,20 110,200 110)','t','Test 203'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,20 110,200 110,50 110,110 170)','t','Test 204'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,20 200,110 200,110 110,200 200)','t','Test 205'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,170 50,20 200,20 110,200 110)','t','Test 206'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,180 40,110 40,110 180)','t','Test 207'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 60,50 30,170 30,90 70)','t','Test 208'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,180 40,110 40,110 110,70 40)','t','Test 209'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(230 70,170 120,190 60,140 60,170 120,270 90)','t','Test 210'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110),(200 200,110 110,20 210,110 110))','t','Test 211'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110),(60 180,60 110,160 110,110 110))','t','Test 212'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110),(200 200,110 110,20 200,110 200,110 110))','t','Test 213'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110),(110 50,110 170,110 70,110 150,200 150))','t','Test 214'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110),(50 110,170 110,110 170,110 50,110 170,110 50))','t','Test 215'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110),(110 60,110 160,200 160))','t','Test 216'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((110 100,40 30,180 30),(170 30,110 90,50 30))','t','Test 217'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((110 110,60 40,70 20,150 20,170 40),(180 30,40 30,110 80))','t','Test 218'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110,200 160),(110 110,200 110,200 70,20 150))','t','Test 219'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,20 20,200 20,110 110)),((110 110,20 200,200 200,110 110)))','t','Test 220'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 160,70 110,150 110,200 160),(110 110,20 110,50 80,70 110,200 110))','t','Test 221'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 110,200 110),(110 110,20 170,20 130,200 90))','t','Test 222'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,0 50,50 50,50 0,0 0)','t','Test 223'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((0 0,0 50),(0 50,50 50),(50 50,50 0),(50 0,0 0))','t','Test 224'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 180,140 180)','t','Test 225'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((20 180,20 80,180 80,180 180,20 180)))','f','Test 226'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 320,180 320,180 180,20 180,20 320)),((60 180,60 80,180 80,180 180,60 180)))','f','Test 227'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,60 0,60 60,60 0,120 0)','t','Test 228'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((0 0,60 0),(60 0,120 0),(60 0,60 60))','t','Test 229'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,120 120)','t','Test 230'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,60 120)','t','Test 231'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 240,40 40)','t','Test 232'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,180 180)','t','Test 233'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(120 120,20 200)','t','Test 234'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 240,120 120)','t','Test 235'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 180,140 140)','t','Test 236'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 120,120 40)','t','Test 237'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,100 100)','t','Test 238'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,40 40)','t','Test 239'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 120,120 160)','t','Test 240'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,180 180)','t','Test 241'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,110 110)','t','Test 242'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(50 50,140 140)','t','Test 243'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(180 180,40 40)','t','Test 244'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(120 120,260 260)','t','Test 245'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(260 260,120 120)','t','Test 246'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,100 100,200 120,80 240)','t','Test 247'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,20 100,40 160,20 200)','t','Test 248'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,40 160,20 100,40 40)','t','Test 249'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 240,200 120,100 100,40 40)','t','Test 250'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 60,60 230,140 230,250 160)','t','Test 251'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,60 60,250 160,310 230)','t','Test 252'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,110 110,200 110,320 230)','t','Test 253'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,60 250,360 210)','t','Test 254'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,110 160,250 160,310 160,360 210)','t','Test 255'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(360 210,310 160,110 160,60 110)','t','Test 256'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(160 160,240 240)','t','Test 257'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(240 240,160 160)','t','Test 258'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 150,110 100,170 100,110 230)','t','Test 259'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 120,200 190,150 240,200 240)','t','Test 260'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 240,150 240,200 200,200 120)','t','Test 261'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 230,80 140,120 140,140 230)','t','Test 262'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,200 110,250 160,300 210)','t','Test 263'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,200 110,250 160,300 210,360 210)','t','Test 264'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,220 110,250 160,280 110)','t','Test 265'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,150 110,200 160,250 110,360 110,360 210)','t','Test 266'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 160,160 110,220 110,250 160,250 210)','t','Test 267'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 160,160 110,190 110,230 210)','t','Test 268'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 160,160 110,200 110,230 160,260 210,360 210)','t','Test 269'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 160,160 110,200 110,230 160,260 210,360 210,380 210)','t','Test 270'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 160,160 110,200 110,230 160,260 210,380 210)','t','Test 271'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,160 110,200 110,250 160,250 210)','t','Test 272'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,180 110,250 160,320 110)','t','Test 273'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 160,180 80,220 160,250 80)','t','Test 274'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,100 100,200 120,130 190)','t','Test 275'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 130,70 130,160 40)','t','Test 276'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 160,40 100,110 40,170 40)','t','Test 277'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 110,180 160,230 110,280 160,330 110)','t','Test 278'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(30 140,80 140,100 100,200 30)','t','Test 279'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 160,180 110,250 160,250 110)','t','Test 280'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,80 80,160 80,240 80,300 140)','t','Test 281'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 60,60 60,60 140,80 80,100 20,140 140,180 20,200 80,220 20,240 80,300 80,270 110,200 110)','t','Test 282'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,230 20,20 30,170 30,20 40,230 40,20 50,230 60,60 60,230 70,20 70,180 80,60 80,230 90,20 90,230 100,30 100,210 110,20 110,80 120,20 130,170 130,90 120,230 130,170 140,230 140,80 150,160 140,20 140,70 150,20 150,230 160,80 160,230 170,20 160,180 170,20 170,230 180,20 180,40 190,230 190,20 200,230 200)','t','Test 283'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(30 210,30 60,40 210,40 30,50 190,50 20,60 160,60 50,70 220,70 50,80 20,80 210,90 50,90 150,100 30,100 210,110 20,110 190,120 50,120 180,130 210,120 20,140 210,130 50,150 210,130 20,160 210,140 30,170 210,150 20,180 210,160 20,190 210,180 80,170 50,170 20,180 70,180 20,190 190,190 30,200 210,200 30,210 210,210 20,220 150,220 20)','t','Test 284'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 240,120 200,200 120,100 100,80 80,40 40)','t','Test 285'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(260 210,240 130,280 120,260 40)','t','Test 286'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 20,20 20,20 160,210 160,210 20,110 20,50 120,120 150,200 150)','t','Test 287'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 130,100 110,120 60,170 60)','t','Test 288'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,110 160,310 160,360 210)','t','Test 289'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 110,110 160,250 160)','t','Test 290'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,310 160,340 190)','t','Test 291'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 160,250 160,310 160,340 190)','t','Test 292'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,250 160,310 160)','t','Test 293'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 120,100 100,40 40,140 80,200 40)','t','Test 294'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(280 240,240 140,200 120,100 100,40 40)','t','Test 295'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 190,140 140,40 40)','t','Test 296'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(240 200,200 260,80 240,140 180)','t','Test 297'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 180,80 240,200 260,240 200)','t','Test 298'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(280 240,240 140,200 120,80 240)','t','Test 299'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 80,120 80,200 80,260 20)','t','Test 300'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,200 120,240 140,280 240)','t','Test 301'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(280 240,240 140,200 120,100 100)','t','Test 302'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 20,80 80,240 80,300 20)','t','Test 303'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 80,80 80,120 80,140 140,160 80,200 80,220 20,240 80,270 110,300 80)','t','Test 304'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,20 180,180 180)','t','Test 305'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,180 20,20 20,100 100)','t','Test 306'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 100,180 100,100 180)','t','Test 307'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 40,100 160,180 160)','t','Test 308'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 100,100 100,180 100,100 180)','t','Test 309'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,160 40)','t','Test 310'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,180 20)','t','Test 311'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 60,100 100,140 60)','t','Test 312'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,190 10,190 100)','t','Test 313'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,160 40,160 100)','t','Test 314'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 140,160 40,160 140)','t','Test 315'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,140 140)','t','Test 316'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,20 80,140 80,80 20,80 140)','t','Test 317'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,20 80,140 80)','t','Test 318'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,140 80,80 20,80 140)','t','Test 319'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,20 80,140 80,80 20,80 80)','t','Test 320'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,20 80,140 80,80 80)','t','Test 321'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,20 80,20 140,140 20,80 20,80 80)','t','Test 322'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 140,140 20,100 20,100 80)','t','Test 323'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 80,20 80,120 80,80 20,80 140)','t','Test 324'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 80,20 80,140 80)','t','Test 325'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 80,20 80,80 140,80 20)','t','Test 326'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 80,80 80,20 80,50 140,50 60)','t','Test 327'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 80,20 80,120 80,80 20,80 80,80 140)','t','Test 328'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 80,20 80,80 80,140 80)','t','Test 329'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 80,20 80,80 140,80 80,80 20)','t','Test 330'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 150,220 150,220 240)','t','Test 331'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 240,130 150,220 20,50 20,130 150)','t','Test 332'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(30 150,130 150,250 150)','t','Test 333'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(30 150,250 150)','t','Test 334'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(130 240,130 20,30 20,130 150)','t','Test 335'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(120 240,120 20,20 20,120 170)','t','Test 336'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,20 20,200 20,110 110,20 200,110 200,110 110)','t','Test 337'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 110)','t','Test 338'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 110,200 110)','t','Test 339'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 200,90 130,110 110,150 200)','t','Test 340'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,20 20,200 20,20 200,20 130,90 130)','t','Test 341'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 110,110 110,90 130,90 200)','t','Test 342'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,150 80,210 80)','t','Test 343'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 20,140 140),(20 140,140 20))','t','Test 344'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 80,160 200,260 20,40 80)','t','Test 345'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 80,260 20,160 200,40 80)','t','Test 346'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(260 20,40 80,160 200,260 20)','t','Test 347'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 140,160 200,260 20,40 80,100 140)','t','Test 348'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 100,180 180,20 180,100 100)','t','Test 349'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 150,40 40,150 40,150 150,40 150)','t','Test 350'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 150,150 40,170 20,170 190,40 150)','t','Test 351'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(180 100,20 100,100 180,180 100)','t','Test 352'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(180 180,100 100,20 180,180 180)','t','Test 353'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 180,100 100,20 20,20 180)','t','Test 354'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 20,100 180,180 100,100 20)','t','Test 355'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(170 20,20 170,170 170,170 20)','t','Test 356'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 150,150 150,90 210,40 150)','t','Test 357'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 150,170 150,90 230,20 150)','t','Test 358'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 150,150 150,150 40,20 40,20 150,40 150)','t','Test 359'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 20,20 20,110 110)','t','Test 360'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 20,20 200,200 200,110 110,110 40)','t','Test 361'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 20,20 200,200 200,20 20)','t','Test 362'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,20 110,110 20,20 20,110 110)','t','Test 363'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 200,110 200,200 110,110 110)','t','Test 364'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 120,120 120,20 20,120 20,20 120)','t','Test 365'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(170 100,70 100,170 170,70 170,170 100)','t','Test 366'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 110,110 110,20 20,110 20,20 110)','t','Test 367'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,70 110,60 160,20 130,110 160)','t','Test 368'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,200 200,20 20,200 20,20 200)','t','Test 369'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 110,200 110,200 160,20 60,20 110)','t','Test 370'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,110 110,200 110,110 200,200 200)','t','Test 371'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(220 120,120 20,220 20,120 120,220 120)','t','Test 372'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((70 20,20 90,70 170),(70 170,120 90,70 20))','t','Test 373'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 20,90 20,170 20),(90 20,90 80,90 140))','t','Test 374'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 140,90 60,90 20),(170 20,130 20,20 20))','t','Test 375'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(130 100,130 60,90 20,50 90))','t','Test 376'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 20,170 100,170 140),(130 140,130 60,90 20,20 90,90 20,130 60,170 60))','t','Test 377'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60))','t','Test 378'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(130 100,90 20))','t','Test 379'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60),(120 100,170 100,90 20))','t','Test 380'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 20,170 100,170 140),(130 140,130 60,90 20,20 90,90 20))','t','Test 381'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((90 20,170 100,170 140),(170 60,90 20,20 60,20 140,90 20))','t','Test 382'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 20,90 90,20 160),(90 160,90 20))','t','Test 383'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((160 160,90 90,160 20),(160 120,120 120,90 90,160 60))','t','Test 384'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((160 160,90 90,160 20),(160 120,120 120,90 90,120 60,160 60))','t','Test 385'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((160 160,90 90,160 20),(160 120,90 90,160 60))','t','Test 386'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(20 20)','t','Test 387'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 120,60 40,160 40,160 120,60 120))','t','Test 388'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(70 170)','t','Test 389'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 230,80 160,20 160,20 20,200 20,200 160,140 160,110 230))','t','Test 390'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(110 130)','t','Test 391'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 160,80 160,110 100,140 160,200 160,200 20,20 20,20 160))','t','Test 392'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(100 70)','t','Test 393'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 150,100 150,40 50,170 50,110 150,190 150,190 20,20 20,20 150))','t','Test 394'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 150,100 150,40 50,160 50,100 150,180 150,180 20,20 20,20 150))','f','Test 395'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(60 120)','t','Test 396'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(110 120)','t','Test 397'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(160 120)','t','Test 398'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(100 150)','t','Test 399'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(100 80)','t','Test 400'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(60 160)','t','Test 401'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,360 20,20 20,190 190),(280 50,100 50,190 140,280 50))','t','Test 402'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(190 90)','t','Test 403'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(190 190)','t','Test 404'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(360 20)','t','Test 405'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(130 130)','t','Test 406'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(280 50)','t','Test 407'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(150 100)','t','Test 408'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(100 50)','t','Test 409'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(140 120)','t','Test 410'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(190 50)','t','Test 411'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,360 20,20 20,190 190),(90 50,150 110,190 50,90 50),(190 50,230 110,290 50,190 50))','t','Test 412'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(180 90)','t','Test 413'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,360 20,20 20,190 190),(180 140,180 40,80 40,180 140),(180 90,210 140,310 40,230 40,180 90))','t','Test 414'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 80,110 160,20 160)','t','Test 415'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 80,60 120,20 160)','t','Test 416'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(10 80,110 170,110 120)','t','Test 417'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(10 80,110 170,160 120)','t','Test 418'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 120,60 120,110 120,160 120,200 120)','t','Test 419'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(60 120,110 120,160 120)','t','Test 420'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(60 120,160 120,160 40,60 40)','t','Test 421'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 150,60 120,110 80)','t','Test 422'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(110 80,160 120,200 160)','t','Test 423'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(110 80,110 120,110 160)','t','Test 424'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(110 170,110 80)','t','Test 425'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(60 120,160 120,110 80,110 170)','t','Test 426'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(90 80,130 80)','t','Test 427'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(60 120,160 120,110 80)','t','Test 428'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 170,40 90,130 170)','t','Test 429'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(90 170,280 170,190 90)','t','Test 430'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(190 110,150 70,230 70)','t','Test 431'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(100 100)','t','Test 432'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 100,20 20,100 20,100 100,20 100)),((100 180,100 100,180 100,180 180,100 180)))','t','Test 433'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(20 100)','t','Test 434'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(60 100)','t','Test 435'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(110 110)','t','Test 436'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((110 110,20 200,200 200,110 110),(110 110,80 180,140 180,110 110)),((110 110,20 20,200 20,110 110),(110 110,80 40,140 40,110 110)))','t','Test 437'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(110 200)','t','Test 438'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 80,160 150,300 150,340 150,340 240)','t','Test 439'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(90 80)','t','Test 440'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(340 240)','t','Test 441'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(230 150)','t','Test 442'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(160 150)','t','Test 443'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(90 150)','t','Test 444'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(150 150,20 20,280 20,150 150)','t','Test 445'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(150 80)','t','Test 446'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(150 150)','t','Test 447'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(100 20)','t','Test 448'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(220 220)','t','Test 449'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,220 20,20 20,110 110,220 220)','t','Test 450'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,220 20,20 20,220 220)','t','Test 451'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(110 20)','t','Test 452'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(220 20)','t','Test 453'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(220 220,20 20,220 20,110 110)','t','Test 454'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(20 110)','t','Test 455'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,20 20,110 20,20 110,110 200)','t','Test 456'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(20 200)','t','Test 457'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,200 20,20 20,200 200)','t','Test 458'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,200 20,140 20,140 80,80 140,20 140)','t','Test 459'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(80 140)','t','Test 460'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)','t','Test 461'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,200 20,140 20,140 80,110 110,80 140,20 140)','t','Test 462'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,110 110,200 20,20 20,110 110,200 200)','t','Test 463'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,200 20,20 20,110 110,200 200)','t','Test 464'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,110 110,20 20,200 20,110 110,200 200)','t','Test 465'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,110 110,200 20,140 20,140 80,110 110,80 140,20 140)','t','Test 466'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,200 20,140 20,140 80,110 110,80 140,20 140)','t','Test 467'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,200 20,140 20,140 80,80 140,20 140)','t','Test 468'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,110 110,200 20,20 20,110 110,200 200)','t','Test 469'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,200 20,20 20,110 110,200 200)','t','Test 470'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,200 20,20 20,200 200)','t','Test 471'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,110 110,20 20,200 20,110 110,200 200)','t','Test 472'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,110 200,20 200,200 20,200 110,110 110,200 200)','t','Test 473'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,110 110,20 20,200 20,110 110,20 200,110 200,110 110)','t','Test 474'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,20 20,200 20,20 200,110 200,110 110)','t','Test 475'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,110 110,200 20,20 20,110 110,20 200,110 200,110 110)','t','Test 476'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,20 20,20 110,110 110,20 200,110 200,110 110)','t','Test 477'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(110 160)','t','Test 478'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,200 250,110 250,110 160,110 110,110 20,20 20,110 110)','t','Test 479'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,200 250,110 250,110 110,110 20,20 20,110 110)','t','Test 480'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 160,200 250,110 250,110 160,110 20,20 20,110 110)','t','Test 481'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 200,110 200,110 110,110 20,20 20,110 110)','t','Test 482'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 200,110 200,110 20,20 20,110 110)','t','Test 483'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(140 200)','t','Test 484'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,200 200,110 200,110 110,110 20,200 20,110 110)','t','Test 485'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(90 130)','t','Test 486'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 130,20 130,20 200,90 130,200 20,20 20,200 200)','t','Test 487'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 130,20 130,20 200,200 20,20 20,200 200)','t','Test 488'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,20 20,200 20,90 130,20 200,20 130,90 130)','t','Test 489'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,20 130,20 200,110 110,200 20,20 20,110 110,200 200,200 130,110 110)','t','Test 490'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,20 130,20 200,200 20,20 20,200 200,200 130,110 110)','t','Test 491'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,80 200,20 200,110 110,200 20,20 20,110 110,200 200,140 200,110 110)','t','Test 492'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 110,80 200,20 200,200 20,20 20,200 200,140 200,110 110)','t','Test 493'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,20 20,200 20,20 200,200 200)','t','Test 494'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,110 110,20 20,200 20,110 110,20 200,200 200)','t','Test 495'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 200,110 110,200 20,20 20,110 110,20 200,200 200)','t','Test 496'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 130,20 130,20 200,90 130,110 110,200 20,20 20,110 110,200 200,90 130)','t','Test 497'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 130,20 130,20 200,110 110,200 20,20 20,110 110,200 200,90 130)','t','Test 498'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 130,90 200,20 200,90 130,110 110,200 20,20 20,110 110,200 200,90 130)','t','Test 499'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 130,90 200,20 200,200 20,20 20,200 200,90 130)','t','Test 500'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(90 130,90 200,20 200,110 110,200 20,20 20,110 110,200 200,90 130)','t','Test 501'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200,200 200)','t','Test 502'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(110 150)','t','Test 503'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 200,110 110,20 20,200 20,110 110,110 200)','t','Test 504'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 200,110 200,110 110,20 20,200 20,110 110,110 200,200 200)','t','Test 505'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(50 250,90 220,130 190)','t','Test 506'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(180 180,230 130,280 80)','t','Test 507'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(50 120,90 80,130 40)','t','Test 508'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(300 280,340 240,380 200)','t','Test 509'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(230 150,260 120,290 90)','t','Test 510'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(200 190,240 150,270 110)','t','Test 511'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(160 150,190 120,220 90)','t','Test 512'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(120 190,160 150,200 110)','t','Test 513'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(90 80,160 150,340 240)','t','Test 514'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(90 80,160 150,300 150)','t','Test 515'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(90 80,160 150,240 150)','t','Test 516'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(90 80,130 120,210 150)','t','Test 517'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(130 120,210 150,340 200)','t','Test 518'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(160 150,240 150,340 210)','t','Test 519'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(160 150,300 150,340 150)','t','Test 520'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(160 150,240 150,340 240)','t','Test 521'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(40 60)','t','Test 522'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(40 40)','t','Test 523'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 20,80 80,20 120)','t','Test 524'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 40,80 60,120 100)','t','Test 525'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 40,120 100,80 60)','t','Test 526'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 40,60 100,100 60,120 120)','t','Test 527'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 120,60 60,100 100,140 40)','t','Test 528'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 20,80 70,140 120,200 170)','t','Test 529'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 20,140 120,80 70,200 170)','t','Test 530'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(80 70,20 20,200 170,140 120)','t','Test 531'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(80 70,140 120)','t','Test 532'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(140 120,80 70)','t','Test 533'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(80 170,140 120,200 80)','t','Test 534'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(80 170,140 120,200 80,80 70)','t','Test 535'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(10 10)','t','Test 536'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(10 10,20 20)','t','Test 537'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(10 10,20 20)','t','Test 538'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(10 10,20 20,20 10,10 10)','t','Test 539'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,100 100,180 100,180 180,100 180,100 100)','t','Test 540'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((10 10,20 20),(20 20,30 30))','t','Test 541'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((10 10,20 20),(20 20,30 20),(20 20,30 30))','t','Test 542'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((10 10,20 20),(20 20,30 20),(20 20,30 30),(20 20,30 40))','t','Test 543'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((10 10,20 20),(20 20,20 30,30 30,30 20,20 20))','t','Test 544'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((10 10,20 20,20 30,30 30,30 20,20 20))','t','Test 545'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 60,420 60,420 320,40 320,40 60))','t','Test 546'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 60,420 60,420 320,40 320,40 60),(200 140,160 220,260 200,200 140))','t','Test 547'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(130 240,130 240,130 240,570 240,570 240,570 240,650 240)','t','Test 548'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((10 10,100 10,100 100,10 100,10 10))','t','Test 549'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(30 220,240 220,240 220)','t','Test 550'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(110 290,110 100,110 100)','t','Test 551'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(120 230,120 200,150 180,180 220,160 260,90 250,80 190,140 110,230 150,240 230,180 320,60 310,40 160,140 50,280 140)','t','Test 552'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((200 360,230 210,100 190,270 150,360 10,320 200,490 230,280 240,200 360),(220 300,250 200,150 190,290 150,330 70,310 210,390 230,280 230,220 300))','t','Test 553'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(70 340,70 50,430 50,420 340,340 120,390 110,390 70,350 100,350 50,370 90,320 80,360 120,350 80,390 90,420 80,410 60,410 100,370 100,380 60,370 80,380 100,360 80,370 80,380 70,390 80,390 70,410 70,400 60,410 60,410 60,410 60,370 70,410 50,410 50,410 50,410 50,410 50,410 50,410 50)','t','Test 554'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(140 350,510 140,110 140,250 290,250 50,300 370,450 310,440 160,290 280,220 160,100 260,320 230,200 280,360 130,330 210,380 80,220 210,380 310,260 150,260 110,170 130)','t','Test 555'); INSERT INTO "validtest" VALUES ('SRID=-1;GEOMETRYCOLLECTION(POINT(110 300),POINT(100 110),POINT(130 210),POINT(150 210),POINT(150 180),POINT(130 170),POINT(140 190),POINT(130 200),LINESTRING(240 50,210 120,270 80,250 140,330 70,300 160,340 130,340 130),POLYGON((210 340,220 260,150 270,230 220,230 140,270 210,360 240,260 250,260 280,240 270,210 340),(230 270,230 250,200 250,240 220,240 190,260 220,290 230,250 230,230 270)))','t','Test 556'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(50 320,50 280,50 230,50 160,50 120,100 120,160 120,210 120,210 180,210 150,180 180,140 180,140 210,140 260,160 180,140 300,140 320,110 320,80 320)','t','Test 557'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((50 50,200 50,200 200,50 200,50 50))','t','Test 559'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,20 160,160 160,160 20,20 20),(140 140,40 140,40 40,140 40,140 140))','t','Test 560'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((80 100,220 100,220 240,80 240,80 100))','t','Test 561'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 340,330 380,50 40,20 340))','t','Test 562'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((210 320,140 270,0 270,140 220,210 320))','t','Test 563'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,110 0,110 60,40 60,180 140,40 220,110 260,0 260,0 0))','t','Test 564'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((220 0,110 0,110 60,180 60,40 140,180 220,110 260,220 260,220 0))','t','Test 565'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,120 0,120 50,50 50,120 100,50 150,120 150,120 190,0 190,0 0))','t','Test 566'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((230 0,120 0,120 50,190 50,120 100,190 150,120 150,120 190,230 190,230 0))','t','Test 567'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,210 0,210 230,0 230,0 0))','t','Test 568'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((40 20,0 0,20 40,60 60,40 20)),((60 90,60 60,90 60,90 90,60 90)),((70 120,90 90,100 120,70 120)),((120 70,90 90,120 100,120 70)))','t','Test 569'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,340 0,340 300,0 300,0 0))','t','Test 570'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((40 20,0 0,20 40,60 60,40 20)),((60 100,60 60,100 60,100 100,60 100)))','t','Test 571'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,120 0,120 120,0 120,0 0))','t','Test 572'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((60 20,0 20,60 60,60 20)),((60 100,60 60,100 60,100 100,60 100)))','t','Test 573'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 330,60 260,20 150,60 40,190 20,270 130,260 250,160 330),(140 240,80 190,90 100,160 70,210 130,210 210,140 240))','t','Test 574'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((300 330,190 270,150 170,150 110,250 30,380 50,380 250,300 330),(290 240,240 200,240 110,290 80,330 170,290 240))','t','Test 575'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((120 340,120 200,140 200,140 280,160 280,160 200,180 200,180 280,200 280,200 200,220 200,220 340,120 340)),((360 200,220 200,220 180,300 180,300 160,220 160,220 140,300 140,300 120,220 120,220 100,360 100,360 200)))','t','Test 576'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((100 220,100 200,300 200,300 220,100 220)),((280 180,280 160,300 160,300 180,280 180)),((220 140,220 120,240 120,240 140,220 140)),((180 220,160 240,200 240,180 220)))','t','Test 577'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((100 200,100 180,120 180,120 200,100 200)),((60 240,60 140,220 140,220 160,160 160,160 180,200 180,200 200,160 200,160 220,220 220,220 240,60 240),(80 220,80 160,140 160,140 220,80 220)),((280 220,240 180,260 160,300 200,280 220)))','t','Test 578'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((80 220,80 160,140 160,140 220,80 220),(100 200,100 180,120 180,120 200,100 200)),((220 240,220 220,160 220,160 200,220 200,220 180,160 180,160 160,220 160,220 140,320 140,320 240,220 240),(240 220,240 160,300 160,300 220,240 220)))','t','Test 579'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 160,140 160,140 60,60 60,60 160))','t','Test 580'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((160 160,100 160,100 100,160 100,160 160),(140 140,120 140,120 120,140 120,140 140))','t','Test 581'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((10 10,100 10,10 11,10 10))','t','Test 582'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((90 0,200 0,200 200,90 200,90 0))','t','Test 583'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 10,10 10,90 11,90 20,100 20,100 10))','t','Test 584'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 20,0 20,0 0,20 0,20 20))','t','Test 585'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((10 10,50 10,50 50,10 50,10 31,49 30,10 30,10 10))','t','Test 586'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 40,40 40,40 20,60 20,60 40))','t','Test 587'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((10 100,10 10,100 10,100 100,10 100),(90 90,11 90,10 10,90 11,90 90))','t','Test 588'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 30,0 0,30 0,30 30,0 30))','t','Test 589'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((0 0,100 0,100 20,0 20,0 0)),((0 40,0 21,100 20,100 40,0 40)))','t','Test 590'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 30,90 30,90 10,110 10,110 30))','t','Test 591'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 10,0 10,100 11,100 10))','t','Test 592'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 10,0 10,90 11,90 20,100 20,100 10))','t','Test 593'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((10 30,10 0,30 10,30 30,10 30))','t','Test 594'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((10 30,10 10,30 10,30 30,10 30))','t','Test 595'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,200 0,0 198,0 0))','t','Test 596'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((280 60,139 60,280 70,280 60))','t','Test 597'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,140 10,0 20,0 0))','t','Test 598'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((280 0,139 10,280 1,280 0))','t','Test 599'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((1 4,1 1,2 1,2 4,1 4)),((3 4,3 1,4 1,4 4,3 4)),((5 4,5 1,6 1,6 4,5 4)),((7 4,7 1,8 1,8 4,7 4)),((9 4,9 1,10 1,10 4,9 4)))','t','Test 600'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 2,11 3,11 2,0 2))','t','Test 601'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 40,20 200,180 200,180 40,20 40),(180 120,120 120,120 160,60 120,120 80,120 119,180 120))','t','Test 602'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((200 160,160 160,160 80,200 80,200 160))','t','Test 603'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(160 140,160 100)','t','Test 604'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 40,20 200,180 200,180 120,140 120,180 119,180 40,20 40),(140 160,80 120,140 80,140 160))','t','Test 605'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((200 160,150 160,150 80,200 80,200 160))','t','Test 606'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((83 33,62 402,68 402,83 33))','t','Test 607'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((78 39,574 76,576 60,78 39))','t','Test 608'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(240 190,120 120)','t','Test 609'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((110 240,50 80,240 70,110 240))','t','Test 610'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 100,100 100,200 200)','t','Test 611'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((30 240,260 30,30 30,30 240),(80 140,80 80,140 80,80 140))','t','Test 612'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 340,200 250,120 180,160 110,270 40)','t','Test 613'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((60 320,60 80,300 80,60 320),(80 280,80 100,260 100,80 280)),((120 160,140 160,140 140,120 160)))','t','Test 614'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((100 240,100 180,160 180,160 120,220 120),(40 360,40 60,340 60,40 360,40 20),(120 120,120 140,100 140,100 120,140 120))','t','Test 615'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((60 260,60 120,220 120,220 260,60 260),(80 240,80 140,200 140,200 240,80 240)),((100 220,100 160,180 160,180 220,100 220),(120 200,120 180,160 180,160 200,120 200)))','t','Test 616'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((40 260,240 260,240 240,40 240,40 220,240 220),(120 300,120 80,140 80,140 300,140 80,120 80,120 320))','t','Test 617'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((60 320,60 120,280 120,280 320,60 320),(120 260,120 180,240 180,240 260,120 260)),((280 400,320 400,320 360,280 360,280 400)),((300 240,300 220,320 220,320 240,300 240)))','t','Test 618'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((80 300,80 160,260 160,260 300,80 300,80 140),(220 360,220 240,300 240,300 360))','t','Test 619'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((120 180,60 80,180 80,120 180)),((100 240,140 240,120 220,100 240)))','t','Test 620'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((180 260,120 180,60 260,180 260),(60 300,60 40),(100 100,140 100))','t','Test 621'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((95 9,81 414,87 414,95 9))','t','Test 622'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(93 13,96 13)','t','Test 623'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,100 100)','t','Test 624'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 100,100 0)','t','Test 625'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,100 100,200 0)','t','Test 626'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,100 100,200 200)','t','Test 627'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 360,40 220,120 360)','t','Test 628'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(120 340,60 220,140 220,140 360)','t','Test 629'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(220 240,200 220,60 320,40 300,180 200,160 180,20 280)','t','Test 630'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(220 240,140 160,120 180,220 280,200 300,100 200)','t','Test 631'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 320,220 320,220 160,80 300)','t','Test 632'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 200,60 260,140 200)','t','Test 633'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 200,60 140,140 200)','t','Test 634'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(180 200,100 280,20 200,100 120,180 200)','t','Test 635'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 200,220 200,220 80,100 80,100 200)','t','Test 636'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 10,620 10,0 11)','t','Test 637'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(400 60,400 10)','t','Test 638'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((120 320,180 200,240 320,120 320)),((180 200,240 80,300 200,180 200)))','t','Test 639'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(120 320,180 260,180 320,180 200,300 200,200 220)','t','Test 640'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((120 80,420 80,420 340,120 340,120 80),(160 300,160 120,380 120,380 300,160 300)),((200 260,200 160,340 160,340 260,200 260),(240 220,240 200,300 200,300 220,240 220)))','t','Test 641'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(200 360,420 340,400 100,340 120,200 140,200 160,220 180,260 200,200 360,420 340,400 100,340 120,200 140,200 160,220 180,260 200)','t','Test 642'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 90,20 20,70 70)','t','Test 643'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,100 100)','t','Test 644'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,110 110,170 50,130 10,70 70)','t','Test 645'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((100 320,100 220),(100 180,200 180),(220 180,220 320),(220 320,160 320),(100 320,100 220),(100 180,200 180),(220 180,220 320),(220 320,160 320),(100 220,100 320))','t','Test 646'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(100 320,100 260,100 220,100 200,100 180,120 180,200 180,220 180,220 260,220 320,200 320,160 320,140 320,120 320,100 320,100 260,100 220,100 200,100 180,120 180,200 180,220 180,220 260,220 320,200 320,160 320,140 320,120 320)','t','Test 647'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((-500 -140,-500 -280,-320 -280,-320 -140,-500 -140,-500 -340),(-500 -140,-320 -140,-500 -140,-320 -140,-500 -140))','t','Test 648'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(-560 -180,-420 -180,-500 -220,-500 -340,-500 -280,-500 -140,-320 -140,-420 -140,-320 -180,-280 -140,-320 -120,-560 -180,-420 -180,-500 -220,-500 -340,-500 -280,-500 -140,-320 -140,-420 -140,-320 -180,-280 -140,-320 -120)','t','Test 649'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((180 100,140 280,240 140,220 120,140 280),(140 280,100 400,80 380,140 280,40 380,20 360,140 280))','t','Test 650'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(200 200)','t','Test 651'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(100 100,200 200)','t','Test 652'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(100 100,200 200,300 300,500 500)','t','Test 653'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(100 100,200 200,400 400,600 600)','t','Test 654'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(80 200)','t','Test 655'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(260 80)','t','Test 656'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(60 260)','t','Test 657'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(120 260)','t','Test 658'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(80 80)','t','Test 659'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(80 280)','t','Test 660'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 0,140 0,140 140,0 140,0 0))','t','Test 661'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((140 0,0 0,0 140,140 140,140 0))','t','Test 662'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 60,360 60,360 300,40 300,40 60))','t','Test 663'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 100,280 100,280 240,120 240,120 100))','t','Test 664'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((80 100,360 100,360 280,80 280,80 100))','t','Test 665'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 280,0 0,260 0,260 280,0 280),(220 240,40 240,40 40,220 40,220 240))','t','Test 666'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 260,240 260,240 20,20 20,20 260),(160 180,80 180,120 120,160 180))','t','Test 667'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 80,200 80,200 220,60 220,60 80))','t','Test 668'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((120 140,260 140,260 260,120 260,120 140))','t','Test 669'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 220,220 220,140 140,60 220))','t','Test 670'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 180,180 180,180 100,100 100,100 180))','t','Test 671'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 40,180 40,180 180,40 180,40 40))','t','Test 672'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((180 40,40 180,160 280,300 140,180 40))','t','Test 673'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 280,200 280,200 100,40 100,40 280),(100 220,120 220,120 200,100 180,100 220))','t','Test 674'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 280,180 260,180 120,60 120,40 280))','t','Test 675'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((0 200,0 0,200 0,200 200,0 200),(20 180,130 180,130 30,20 30,20 180))','t','Test 676'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((60 90,130 90,130 30,60 30,60 90))','t','Test 677'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 120,100 240)','t','Test 678'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 60,160 60,160 180,40 180,40 60))','t','Test 679'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,140 140,200 200)','t','Test 680'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 40,140 40,140 140,40 140,40 40))','t','Test 681'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((190 190,360 20,20 20,190 190),(111 110,250 100,140 30,111 110))','t','Test 682'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 200,20 20,240 20,240 200,20 200),(130 110,60 40,60 180,130 110),(130 180,131 40,200 110,130 180))','t','Test 683'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(100 140,100 40)','t','Test 684'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 80,180 79,100 0,20 80)),((20 160,180 160,100 80,20 160)))','t','Test 685'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((20 80,180 80,100 0,20 80)),((20 160,180 160,100 80,20 160)))','t','Test 686'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 0,20 80,100 80,80 120,40 140)','t','Test 687'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 300,220 160,260 200,240 260)','t','Test 688'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 40,140 40,140 160,0 160)','t','Test 689'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 280,240 280,240 180,140 180,140 280)','t','Test 690'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 0,0 0,40 60,0 120,60 200,220 160,220 40)','t','Test 691'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 140,180 100,160 40,100 40,60 100,80 140)','t','Test 692'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,80 80)','t','Test 693'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,160 160,200 60,60 140)','t','Test 694'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,200 40)','t','Test 695'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(200 40,140 40,40 40)','t','Test 696'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,110 0,60 0)','t','Test 697'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,110 0)','t','Test 698'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(0 0,80 0,80 60,80 0,170 0)','t','Test 699'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((0 0,170 0),(80 0,80 60))','t','Test 700'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 100,180 200)','t','Test 701'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 180,180 120)','t','Test 702'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,100 100,160 160)','t','Test 703'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(160 60,100 100,60 140)','t','Test 704'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 60,60 140)','t','Test 705'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,180 180,100 180,100 100)','t','Test 706'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 90,50 50,0 0)','t','Test 707'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 140,240 140)','t','Test 708'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 140,100 140,80 80,120 60,100 140,160 140,160 100,200 100,160 140,240 140)','t','Test 709'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,100 20,20 20)','t','Test 710'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(60 20,200 20)','t','Test 711'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 60,180 60,180 140,100 140,100 60,220 60,220 180,80 180,80 60,280 60)','t','Test 712'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(140 60,180 60,220 60,260 60)','t','Test 713'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(0 20,40 20)','t','Test 714'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((20 40,20 0,60 0,60 40,20 40))','t','Test 715'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(0 20,20 20)','t','Test 716'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(20 20,40 20)','t','Test 717'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(80 260,140 260,180 260)','t','Test 718'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((40 320,140 320,140 200,40 200,40 320))','t','Test 719'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((0 40,0 0,40 0,40 40,0 40)),((40 80,40 40,80 40,80 80,40 80)))','t','Test 720'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,120 120,200 120)','t','Test 721'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,100 100,160 100)','t','Test 722'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(60 60)','t','Test 723'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 40,100 40)','t','Test 724'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,80 80)','t','Test 725'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 40,60 60)','t','Test 726'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(60 60,100 100)','t','Test 727'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(40 40,60 60,80 80)','t','Test 728'); INSERT INTO "validtest" VALUES ('SRID=-1;POINT(20 30)','t','Test 729'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(40 40,80 60,40 100)','t','Test 730'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(80 280,80 220,160 220,80 220)','t','Test 731'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(80 280,80 220,160 220)','t','Test 732'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 60,160 60,80 160,80 20)','t','Test 734'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 80,80 20,80 80,140 60,80 20,160 20)','t','Test 735'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 60,100 60,60 100,60 60)','t','Test 736'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 60,60 60,100 60,60 100,60 60)','t','Test 737'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(20 20,80 20,80 80,20 20)','t','Test 738'); INSERT INTO "validtest" VALUES ('SRID=-1;LINESTRING(80 80,20 20,20 80,140 80,140 140,80 80)','t','Test 739'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((40 140,160 40),(160 140,40 40))','t','Test 741'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((20 160,20 20),(100 160,100 20))','t','Test 742'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((60 140,20 80,60 40),(60 40,100 80,60 140))','t','Test 743'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((60 40,140 40,100 120,100 0),(100 200,200 120))','t','Test 744'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((40 120,100 60),(160 120,100 60),(40 60,160 60))','t','Test 745'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((80 160,40 220,40 100,80 160),(80 160,120 220,120 100,80 160))','t','Test 746'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTILINESTRING((80 160,40 220),(80 160,120 220,120 100,80 160),(40 100,80 160))','t','Test 747'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((180 260,80 300,40 180,160 120,180 260))','t','Test 748'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((240 160,140 220,80 60,220 40,240 160)),((160 380,100 240,20 380,160 380),(120 340,60 360,80 320,120 340)))','t','Test 750'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOLYGON(((240 160,100 240,80 60,220 40,240 160)),((160 380,100 240,20 380,160 380),(120 340,60 360,80 320,120 340)))','t','Test 751'); INSERT INTO "validtest" VALUES ('SRID=-1;POLYGON((100 100,1e+15 110,1e+15 100,100 100))','t','Test 92'); INSERT INTO "validtest" VALUES ('SRID=-1;MULTIPOINT(-1e+24 -1e+24,1e+24 -1e+24,1e+24 1e+24,-1e+24 1e+24,0 0)','t','Test 558'); COMMIT; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_proj.sql����������������������������������������������������0000644�0000000�0000000�00000005362�12315271514�020466� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� -- some transform() regression -- prime spatial_ref_sys table with two projections --- EPSG 100001 : WGS 84 / UTM zone 33N INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (100001,'EPSG',100001,'PROJCS["WGS 84 / UTM zone 33N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","1000002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","100001"]]','+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs '); --- EPSG 100002 : WGS 84 INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (100002,'EPSG',100002,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","100002"]]','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); -- Repeat all tests with the new function names. --- test #0: NULL values SELECT 0,coalesce(ST_AsText(ST_transform(NULL::geometry, 100001)),'EMPTY'); --- test #1: a simple projection SELECT 1,ST_AsEWKT(ST_SnapToGrid(ST_transform(ST_GeomFromEWKT('SRID=100002;POINT(16 48)'),100001),10)); --- test #2: same in 3D SELECT 2,ST_AsEWKT(ST_SnapToGrid(ST_transform(ST_GeomFromEWKT('SRID=100002;POINT(16 48 171)'),100001),10)); --- test #3: same in 4D SELECT 3,ST_AsEWKT(ST_SnapToGrid(ST_transform(ST_GeomFromEWKT('SRID=100002;POINT(16 48 171 -500)'),100001),10)); --- test #4: LINESTRING projection, 2 points SELECT 4,ST_AsEWKT(ST_SnapToGrid(ST_transform(ST_GeomFromEWKT('SRID=100002;LINESTRING(16 48, 16 49)'),100001),10)); --- test #5: LINESTRING projection, 2 points, 4D SELECT 5,ST_AsEWKT(ST_SnapToGrid(ST_transform(ST_GeomFromEWKT('SRID=100002;LINESTRING(16 48 0 0, 16 49 0 0)'),100001),10)); --- test #6: re-projecting a projected value SELECT 6,round(ST_X(ST_transform(ST_transform(ST_GeomFromEWKT('SRID=100002;POINT(16 48)'),100001), 100002))::numeric,8),round(ST_Y(ST_transform(ST_transform(ST_GeomFromEWKT('SRID=100002;POINT(16 48)'),100001), 100002))::numeric,8); --- test #7: Should yield an error since input SRID is unknown SELECT ST_transform(ST_GeomFromEWKT('SRID=0;POINT(0 0)'),100002); --- test #8: Transforming to same SRID SELECT 8,ST_AsEWKT(ST_transform(ST_GeomFromEWKT('SRID=100002;POINT(0 0)'),100002)); DELETE FROM spatial_ref_sys WHERE srid >= 100000; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_index_expected����������������������������������������������0000644�0000000�0000000�00000000306�11722777314�021711� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2594|POINT(130.504303 126.53112) 3618|POINT(130.447205 131.655289) 7245|POINT(128.10466 130.94133) 2594|POINT(130.504303 126.53112) 3618|POINT(130.447205 131.655289) 7245|POINT(128.10466 130.94133) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_lrs_expected������������������������������������������������0000644�0000000�0000000�00000002576�11741501202�021373� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ERROR: Input geometry does not have a measure dimension ERROR: Input geometry does not have a measure dimension PNTM_1|MULTIPOINT M EMPTY PNTM_2|MULTIPOINT M (1 2 3) PNTM_3|MULTIPOINT M (1 2 3) PNTM_4|MULTIPOINT M (1 2 3) PNTM_5|MULTIPOINT M EMPTY MPNT_1|MULTIPOINT M (1 2 2) MPNT_2|MULTIPOINT M (2 2 5) MPNT_3|MULTIPOINT M EMPTY MPNT_4|MULTIPOINT M (1 2 8,2 2 5) LINEZM_1|MULTILINESTRING ZM ((0 8 80 2,0 0 0 10)) LINEZM_2|MULTILINESTRING ZM ((0 8 20 2,0 0 100 10)) LINEZM_3|MULTILINESTRING ZM ((0 8 80 2,0 0 0 10,8 0 0 2)) LINEZM_4|MULTILINESTRING ZM ((0 9 90 2,0 1 10 18),(1 0 0 18,9 0 0 2)) LINEZM_5|MULTILINESTRING ZM ((0 9 90 2,0 1 10 18),(5.5 4.5 4.5 18,9.5 0.5 0.5 2)) LINEZM_6|MULTIPOINT ZM (9.5 0.5 0.5 2) line_locate_point_1|0.528602749909894 line_locate_point_2|1 line_locate_point_3|0 line_locate_point_4|0 line_substring_1|4326|LINESTRING ZM (2 2 2 2,3 3 3 3,3.2 3.2 3.2 3.2) line_substring_2|LINESTRING ZM (2 2 2 2,3 3 3 3) line_substring_3|LINESTRING(0 0,1 1) line_substring_4|LINESTRING(1 1,2 2) line_substring_5|LINESTRING(1 1,2 2) line_substring_6|LINESTRING(0 0,1 1) line_substring_7|LINESTRING(1 1,2 2) line_substring_8|LINESTRING M (1 1 1,2 2 2) line_substring_9|LINESTRING M (1 1 3,2 2 2) line_substring_10|LINESTRING Z (1 1 3,2 2 2) line_substring_11|POINT(0 0) line_substring_12|POINT Z (0.5 0.5 7.5) line_interpolate_point|POINT(0 0) line_interpolate_point|POINT Z (0.5 0.5 7.5) ����������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/�������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016474� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/empty_expected�����������������������������������������������0000644�0000000�0000000�00000003336�12142775451�021450� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T1.1|POINT EMPTY T1.2|LINESTRING EMPTY T1.3|SRID=4326;POLYGON EMPTY T2.1|SRID=4326;POLYGON EMPTY T2.2|SRID=4326;POLYGON EMPTY T2.3|SRID=4326;POLYGON EMPTY T2.4|4326|POLYGON T3.1| T3.2| T3.3| T3.4| T3.5| T3.6| T3.7| T3.8| T3.9| T3.10| T3.11| T3.12| T3.13| T3.14| T3.15| T3.16| T3.17| T3.18| ST_Buffer(empty, tolerance) == empty|010300000000000000 ST_Union(geometry, empty) == geometry|0103000000010000000400000000000000000000000000000000000000000000000000244000000000000000000000000000001440000000000000144000000000000000000000000000000000 ST_Union(empty, empty) == empty|010300000000000000 ST_Intersection(geometry, empty) == geometry|010700000000000000 ST_Intersection(empty, empty) == empty|010700000000000000 ST_Difference(geometry, empty) == geometry|0103000000010000000400000000000000000000000000000000000000000000000000244000000000000000000000000000001440000000000000144000000000000000000000000000000000 ST_Difference(empty, geometry) == empty|010300000000000000 ST_Distance(geometry, empty) == NULL|inf ST_DWithin(geometry, empty, tolerance) == FALSE|f ST_Within(geometry, empty) == FALSE|f ST_Contains(empty, geometry) == FALSE|f ST_Within(empty, geometry) == FALSE|f ST_Contains(empty, empty) == FALSE|f ST_Intersects(geometry, empty) == FALSE|f ST_Intersects(empty, empty) == FALSE|f ST_Disjoint(empty, empty) == TRUE|t ST_Disjoint(geometry, empty) == TRUE|t ST_Equals(empty1, empty2) == TRUE|t ST_IsSimple(empty) == TRUE|t ST_IsValid(empty) == TRUE|t ST_NumGeometries(empty) == 0|0 ST_NRings(empty) == 0|0 ST_NumPoints(empty) == 0|0 ST_NPoints(empty) == 0|0 ST_GeometryN(empty, n) == empty|010300000000000000 ST_ExteriorRing(empty) == empty|010200000000000000 ST_InteriorRingN(empty, n) == NULL| ST_Area(empty) == 0|0 ST_Length(empty) == 0|0 ~=|t ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/regress_ogc.sql����������������������������������������������0000644�0000000�0000000�00000027735�12142775451�021542� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- SFCGAL backend tests based on GEOS/JTS implemented functions --- --- SET postgis.backend = 'sfcgal'; -- Repeat all tests with new function names. SELECT 'buffer', ST_astext(ST_SnapToGrid(ST_buffer('POINT(0 0)', 1, 2), 1.0e-6)); SELECT 'geomunion', ST_astext(ST_union('POINT(0 0)', 'POINT(1 1)')); SELECT 'convexhull', ST_asewkt(ST_convexhull('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))')); SELECT 'relate', ST_relate('POINT(0 0)', 'LINESTRING(0 0, 1 1)'); SELECT 'relate', ST_relate('POINT(0 0)', 'LINESTRING(0 0, 1 1)', 'F0FFFF*02'); SELECT 'relate', ST_relate('POINT(0 0)', 'LINESTRING(0 0, 1 1)', 'F0FFF0*02'); SELECT 'disjoint', ST_disjoint('POINT(0 0)', 'LINESTRING(0 0, 1 1)'); SELECT 'touches', ST_touches('LINESTRING(0 10, 0 -10)', 'LINESTRING(0 0, 1 1)'); SELECT 'intersects', ST_intersects('LINESTRING(0 10, 0 -10)', 'LINESTRING(0 0, 1 1)'); SELECT 'crosses', ST_crosses('LINESTRING(0 10, 0 -10)', 'LINESTRING(0 0, 1 1)'); SELECT 'crosses', ST_crosses('LINESTRING(0 10, 0 -10)', 'LINESTRING(-4 0, 1 1)'); -- PIP - point within polygon SELECT 'within100', ST_within('POINT(5 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on vertex of polygon SELECT 'within101', ST_within('POINT(0 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point outside polygon SELECT 'within102', ST_within('POINT(-1 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on edge of polygon SELECT 'within103', ST_within('POINT(0 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point in line with polygon edge SELECT 'within104', ST_within('POINT(0 12)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point vertically aligned with polygon vertex SELECT 'within105', ST_within(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'within106', ST_within(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'disjoint100', ST_disjoint('POINT(5 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon vertex SELECT 'disjoint101', ST_disjoint('POINT(0 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point outside polygon SELECT 'disjoint102', ST_disjoint('POINT(-1 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon edge SELECT 'disjoint103', ST_disjoint('POINT(0 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point in line with polygon edge SELECT 'disjoint104', ST_disjoint('POINT(0 12)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point vertically aligned with polygon vertex SELECT 'disjoint105', ST_disjoint(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'disjoint106', ST_disjoint(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'disjoint150', ST_disjoint('POINT(5 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon vertex SELECT 'disjoint151', ST_disjoint('POINT(0 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point outside polygon SELECT 'disjoint152', ST_disjoint('POINT(-1 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon edge SELECT 'disjoint153', ST_disjoint('POINT(0 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point in line with polygon edge SELECT 'disjoint154', ST_disjoint('POINT(0 12)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point vertically aligned with polygon vertex SELECT 'disjoint155', ST_disjoint(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'disjoint156', ST_disjoint(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'intersects100', ST_intersects('POINT(5 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon vertex SELECT 'intersects101', ST_intersects('POINT(0 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point outside polygon SELECT 'intersects102', ST_intersects('POINT(-1 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon edge SELECT 'intersects103', ST_intersects('POINT(0 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point in line with polygon edge SELECT 'intersects104', ST_intersects('POINT(0 12)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point vertically aligned with polygon vertex SELECT 'intersects105', ST_intersects(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'intersects106', ST_intersects(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'intersects150', ST_intersects('POINT(5 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon vertex SELECT 'intersects151', ST_intersects('POINT(0 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point outside polygon SELECT 'intersects152', ST_intersects('POINT(-1 0)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point on polygon edge SELECT 'intersects153', ST_intersects('POINT(0 5)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point in line with polygon edge SELECT 'intersects154', ST_intersects('POINT(0 12)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); -- PIP - point vertically aligned with polygon vertex SELECT 'intersects155', ST_intersects(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - repeated vertex SELECT 'intersects156', ST_intersects(ST_GeomFromText('POINT(521543 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)); -- PIP - point within polygon SELECT 'contains100', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'); -- PIP - point on vertex of polygon SELECT 'contains101', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'); -- PIP - point outside polygon SELECT 'contains102', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'); -- PIP - point on edge of polygon SELECT 'contains103', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'); -- PIP - point in line with polygon edge SELECT 'contains104', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)'); -- PIP - point vertically aligned with polygon vertex SELECT 'contains105', ST_contains(ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631), ST_GeomFromText('POINT(521513 5377804)', 32631)); -- PIP - repeated vertex SELECT 'contains106', ST_contains(ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631), ST_GeomFromText('POINT(521513 5377804)', 32631)); -- moved here from regress.sql select 'within119', ST_within('LINESTRING(-1 -1, -1 101, 101 101, 101 -1)'::GEOMETRY,'BOX3D(0 0, 100 100)'::BOX3D); select 'within120', ST_within('LINESTRING(-1 -1, -1 100, 101 100, 101 -1)'::GEOMETRY,'BOX3D(0 0, 100 100)'::BOX3D); SELECT 'contains110', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(1 10, 9 10, 9 8)'); SELECT 'contains111', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(1 10, 10 10, 10 8)'); SELECT 'within130', ST_Within('LINESTRING(1 10, 9 10, 9 8)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); SELECT 'within131', ST_Within('LINESTRING(1 10, 10 10, 10 8)', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); SELECT 'overlaps', ST_overlaps('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))','POINT(5 5)'); SELECT 'isvalid', ST_isvalid('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'); SELECT 'isvalid', ST_isvalid('POLYGON((0 0, 0 10, 10 10, -5 10, 10 0, 0 0))'); SELECT 'isvalid', ST_isvalid('GEOMETRYCOLLECTION EMPTY'); SELECT 'intersection', ST_astext(ST_intersection('LINESTRING(0 10, 0 -10)', 'LINESTRING(0 0, 1 1)')); SELECT 'difference', ST_astext(ST_difference('LINESTRING(0 10, 0 -10)'::GEOMETRY, 'LINESTRING(0 2, 0 -2)'::GEOMETRY)); SELECT 'boundary', ST_astext(ST_boundary('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))')); SELECT 'symdifference', ST_astext(ST_symdifference('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))', 'LINESTRING(0 0, 20 20)')); SELECT 'issimple', ST_issimple('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'); SELECT 'equals', ST_equals('LINESTRING(0 0, 1 1)', 'LINESTRING(1 1, 0 0)'); WITH inp AS ( SELECT 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))' ::geometry as g ) SELECT 'pointonsurface', ST_Contains(g, ST_pointonsurface(g)) from inp; SELECT 'centroid', ST_astext(ST_centroid('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))')); SELECT 'exteriorring', ST_astext(ST_exteriorring(ST_PolygonFromText('POLYGON((52 18,66 23,73 9,48 6,52 18),(59 18,67 18,67 13,59 13,59 18))'))); SELECT 'polygonize_garray', ST_astext(ST_polygonize('{0102000000020000000000000000000000000000000000000000000000000024400000000000000000:0102000000020000000000000000002440000000000000000000000000000000000000000000000000:0102000000020000000000000000002440000000000000244000000000000000000000000000000000:0102000000020000000000000000002440000000000000244000000000000024400000000000000000:0102000000020000000000000000002440000000000000244000000000000000000000000000002440:0102000000020000000000000000000000000000000000244000000000000000000000000000002440:0102000000020000000000000000000000000000000000244000000000000024400000000000002440:0102000000020000000000000000000000000000000000244000000000000000000000000000000000:0102000000020000000000000000000000000000000000244000000000000024400000000000000000}'::geometry[])); SELECT 'polygonize_garray', ST_astext(ST_geometryn(ST_polygonize('{LINESTRING(0 0, 10 0):LINESTRING(10 0, 10 10):LINESTRING(10 10, 0 10):LINESTRING(0 10, 0 0)}'::geometry[]), 1)); select 'linemerge149', ST_asewkt(ST_linemerge('GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), LINESTRING(4 4, 1 1), LINESTRING(-5 -5, 0 0))'::geometry)); --- postgis-devel/2005-December/001784.html select 'intersects', ST_intersects( ST_polygonfromtext('POLYGON((0.0 0.0,1.0 0.0,1.0 1.0,1.0 0.0,0.0 0.0))'), ST_polygonfromtext('POLYGON((0.0 2.0,1.0 2.0,1.0 3.0,0.0 3.0,0.0 2.0))') ); select 'ST_GeometryN', ST_asewkt(ST_GeometryN('LINESTRING(0 0, 1 1)'::geometry, 1)); select 'ST_NumGeometries', ST_NumGeometries('LINESTRING(0 0, 1 1)'::geometry); select 'ST_Union1', ST_AsText(ST_Union(ARRAY['POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::geometry, 'POLYGON((0.5 0.5, 1.5 0.5, 1.5 1.5, 0.5 1.5, 0.5 0.5))'::geometry])); select 'ST_StartPoint1',ST_AsText(ST_StartPoint('LINESTRING(0 0, 1 1, 2 2)')); select 'ST_EndPoint1', ST_AsText(ST_Endpoint('LINESTRING(0 0, 1 1, 2 2)')); select 'ST_PointN1', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)',2)); select 'ST_PointN2', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)',3)); select 'ST_PointN3', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)',4)); select 'ST_PointN4', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)',0)); select 'ST_PointN5', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)',1)); select 'ST_PointN6', ST_AsText(ST_PointN('POLYGON((0 0, 1 1, 0 1, 0 0))',1)); -- issues with EMPTY -- select 'ST_Buffer(empty)', ST_AsText(ST_Buffer('POLYGON EMPTY', 0.5)); �����������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/regress_ogc_prep_expected������������������������������������0000644�0000000�0000000�00000005107�12142775451�023640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������intersects099|t intersects100|t intersects101|t intersects102|f intersects103|t intersects104|f contains099|t contains100|t contains101|f contains102|f contains103|f contains104|f covers099|t covers100|t covers101|t covers102|f covers103|t covers104|f containsproperly099|t containsproperly100|t containsproperly101|f containsproperly102|f containsproperly103|f containsproperly104|f intersects105|t intersects105|t intersects105|t intersects106|t intersects106|t intersects106|t intersects107|f intersects107|f intersects107|f intersects108|f intersects108|f intersects108|f contains105|t contains105|t contains105|t contains106|f contains106|f contains106|f contains107|f contains107|f contains107|f contains108|f contains108|f contains108|f containsproperly105|t containsproperly105|t containsproperly105|t containsproperly106|f containsproperly106|f containsproperly106|f containsproperly107|f containsproperly107|f containsproperly107|f containsproperly108|f containsproperly108|f containsproperly108|f covers105|t covers105|t covers105|t covers106|f covers106|f covers106|f covers107|f covers107|f covers107|f covers108|f covers108|f covers108|f intersects200|t|t intersects201|t|t intersects202|t|t intersects203|t|t intersects204|f|f intersects205|t|t intersects206|t|t intersects207|t|t intersects208|t|t intersects209|f|f contains200|t|f contains201|t|f contains202|t|f contains203|f|f contains204|f|f contains205|t|f contains206|t|f contains207|t|f contains208|f|f contains209|f|f containsproperly200|t|f containsproperly201|t|f containsproperly202|f|f containsproperly203|f|f containsproperly204|f|f containsproperly205|t|f containsproperly206|t|f containsproperly207|f|f containsproperly208|f|f containsproperly209|f|f covers200|t|f covers201|t|f covers202|t|f covers203|f|f covers204|f|f covers205|t|f covers206|t|f covers207|t|f covers208|f|f covers209|f|f types100|t|f|t|f|t|t|t|f types101|t|f|t|f|t|t|t|f types102|t|f|t|f|t|t|t|f types103|f|f|f|f|f|f|f|f types104|f|f|f|f|f|f|f|f types105|f|f|f|f|f|f|f|f types106|t|t|t|t|t|t|t|t types107|t|t|t|t|t|t|t|t types108|t|t|t|t|t|t|t|t types109|t|t|t|t|t|t|f|f types110|t|t|t|t|t|t|f|f types111|t|t|t|t|t|t|f|f types112|f|f|t|f|t|t|f|f types113|f|f|t|f|t|t|f|f types114|f|f|t|f|t|t|f|f intersects310|t intersects310|t intersects310|t intersects311|t intersects311|t intersects311|t contains310|t contains310|t contains310|t contains311|f contains311|f contains311|f containsproperly310|f containsproperly310|f containsproperly310|f containsproperly311|f containsproperly311|f containsproperly311|f covers310|t covers310|t covers310|t covers311|t covers311|t covers311|t ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/geography.sql������������������������������������������������0000644�0000000�0000000�00000065347�12142775451�021226� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET postgis.backend = 'sfcgal'; INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) VALUES ( '4326', 'EPSG', '4326', 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]', '+proj=longlat +datum=WGS84 +no_defs' ); -- Do cached and uncached distance agree? SELECT c, abs(ST_Distance(ply::geography, pt::geography) - _ST_DistanceUnCached(ply::geography, pt::geography)) < 0.01 FROM ( VALUES ('geog_distance_cached_1a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1b', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1c', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1e', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1f', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1g', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_distance_cached_1h', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)') ) AS u(c,ply,pt); -- Does tolerance based distance work cached? Inside tolerance SELECT c, ST_DWithin(ply::geography, pt::geography, 3000) from ( VALUES ('geog_dithin_cached_1a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_1b', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_1c', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)') ) as p(c, ply, pt); -- Does tolerance based distance work cached? Outside tolerance SELECT c, ST_DWithin(ply::geography, pt::geography, 1000) from ( VALUES ('geog_dithin_cached_2a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_2b', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)'), ('geog_dithin_cached_2c', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(10.01 5)') ) as p(c, ply, pt); -- Do things work when there's cache coherence on the point side but not the poly side? SELECT c, ST_DWithin(ply::geography, pt::geography, 3000) from ( VALUES ('geog_dithin_cached_3a', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('geog_dithin_cached_3b', 'POLYGON((1 1, 1 10, 10 10, 10 1, 1 1))', 'POINT(5 5)'), ('geog_dithin_cached_3c', 'POLYGON((2 2, 2 10, 10 10, 10 2, 2 2))', 'POINT(5 5)') ) as p(c, ply, pt); -- Test a precision case near the south pole that came up during development. WITH pt AS ( SELECT point::geography FROM ( VALUES ('0101000020E61000006C5B94D920EB4CC0A0FD481119B24FC0'), ('0101000020E610000097A8DE1AD8524CC09C8A54185B1050C0'), ('0101000020E61000008FC2F5285C4F4CC0E5ED08A7050F50C0'), ('0101000020E61000008FC2F5285C4F4CC0E5ED08A7050F50C0') ) AS p(point) ), ply AS ( SELECT polygon::geography FROM ( VALUES ('0106000020E610000001000000010300000001000000A10100005036E50AEF8E4FC0E3FC4D2844A443C000000000008046C000000000000047C033333333335346C000000000000047C066666666662646C000000000000047C09999999999F945C000000000000047C0CDCCCCCCCCCC45C000000000000047C00000000000A045C000000000000047C033333333337345C000000000000047C066666666664645C000000000000047C099999999991945C000000000000047C0CDCCCCCCCCEC44C000000000000047C00000000000C044C000000000000047C033333333339344C000000000000047C066666666666644C000000000000047C099999999993944C000000000000047C0CDCCCCCCCC0C44C000000000000047C00000000000E043C000000000000047C03333333333B343C000000000000047C066666666668643C000000000000047C099999999995943C000000000000047C0CDCCCCCCCC2C43C000000000000047C000000000000043C000000000000047C03333333333D342C000000000000047C06666666666A642C000000000000047C099999999997942C000000000000047C0CDCCCCCCCC4C42C000000000000047C000000000002042C000000000000047C03333333333F341C000000000000047C06666666666C641C000000000000047C099999999999941C000000000000047C0CDCCCCCCCC6C41C000000000000047C000000000004041C000000000000047C033333333331341C000000000000047C06666666666E640C000000000000047C09999999999B940C000000000000047C0CDCCCCCCCC8C40C000000000000047C000000000006040C000000000000047C033333333333340C000000000000047C066666666660640C000000000000047C03333333333B33FC000000000000047C09999999999593FC000000000000047C00000000000003FC000000000000047C06666666666A63EC000000000000047C0CCCCCCCCCC4C3EC000000000000047C03333333333F33DC000000000000047C09999999999993DC000000000000047C00000000000403DC000000000000047C06666666666E63CC000000000000047C0CCCCCCCCCC8C3CC000000000000047C03333333333333CC000000000000047C09999999999D93BC000000000000047C00000000000803BC000000000000047C06666666666263BC000000000000047C0CCCCCCCCCCCC3AC000000000000047C03333333333733AC000000000000047C09999999999193AC000000000000047C00000000000C039C000000000000047C066666666666639C000000000000047C0CCCCCCCCCC0C39C000000000000047C03333333333B338C000000000000047C099999999995938C000000000000047C000000000000038C000000000000047C06666666666A637C000000000000047C0CDCCCCCCCC4C37C000000000000047C03333333333F336C000000000000047C099999999999936C000000000000047C000000000004036C000000000000047C06666666666E635C000000000000047C0CDCCCCCCCC8C35C000000000000047C033333333333335C000000000000047C09999999999D934C000000000000047C000000000008034C000000000000047C066666666662634C000000000000047C0CDCCCCCCCCCC33C000000000000047C033333333337333C000000000000047C099999999991933C000000000000047C00000000000C032C000000000000047C066666666666632C000000000000047C0CDCCCCCCCC0C32C000000000000047C03333333333B331C000000000000047C099999999995931C000000000000047C000000000000031C000000000000047C06666666666A630C000000000000047C0CDCCCCCCCC4C30C000000000000047C06666666666E62FC000000000000047C03333333333332FC000000000000047C00000000000802EC000000000000047C0CCCCCCCCCCCC2DC000000000000047C09999999999192DC000000000000047C06666666666662CC000000000000047C03333333333B32BC000000000000047C00000000000002BC000000000000047C0CCCCCCCCCC4C2AC000000000000047C099999999999929C000000000000047C06666666666E628C000000000000047C033333333333328C000000000000047C000000000008027C000000000000047C0CDCCCCCCCCCC26C000000000000047C099999999991926C000000000000047C066666666666625C000000000000047C03333333333B324C000000000000047C000000000000024C000000000000047C000000000000024C03943F5FFFF7F56C000000000008052C03943F5FFFF7F56C000000000008052C00000000000004EC068774831407A52C00000000000004EC0B8ACC266807452C00000000000004EC020240B98C06E52C00000000000004EC0705985CD006952C00000000000004EC0D9D0CDFE406352C00000000000004EC029064834815D52C00000000000004EC0917D9065C15752C00000000000004EC0E1B20A9B015252C00000000000004EC0492A53CC414C52C00000000000004EC09A5FCD01824652C00000000000004EC002D71533C24052C00000000000004EC0520C9068023B52C00000000000004EC0BA83D899423552C00000000000004EC00AB952CF822F52C00000000000004EC072309B00C32952C00000000000004EC0C3651536032452C00000000000004EC02BDD5D67431E52C00000000000004EC09354A698831852C00000000000004EC0E38920CEC31252C00000000000004EC04B0169FF030D52C00000000000004EC09B36E334440752C00000000000004EC003AE2B66840152C00000000000004EC054E3A59BC4FB51C00000000000004EC0BC5AEECC04F651C00000000000004EC00C90680245F051C00000000000004EC07407B13385EA51C00000000000004EC0C43C2B69C5E451C00000000000004EC02DB4739A05DF51C00000000000004EC07DE9EDCF45D951C00000000000004EC0E560360186D351C00000000000004EC03596B036C6CD51C00000000000004EC09D0DF96706C851C00000000000004EC0EE42739D46C251C00000000000004EC056BABBCE86BC51C00000000000004EC0A6EF3504C7B651C00000000000004EC00E677E3507B151C00000000000004EC076DEC66647AB51C00000000000004EC0C613419C87A551C00000000000004EC02E8B89CDC79F51C00000000000004EC07FC00303089A51C00000000000004EC0E7374C34489451C00000000000004EC0376DC669888E51C00000000000004EC09FE40E9BC88851C00000000000004EC0EF1989D0088351C00000000000004EC05791D101497D51C00000000000004EC0A8C64B37897751C00000000000004EC0103E9468C97151C00000000000004EC060730E9E096C51C00000000000004EC0C8EA56CF496651C00000000000004EC01820D1048A6051C00000000000004EC081971936CA5A51C00000000000004EC0D1CC936B0A5551C00000000000004EC03944DC9C4A4F51C00000000000004EC0A1BB24CE8A4951C00000000000004EC0F1F09E03CB4351C00000000000004EC05968E7340B3E51C00000000000004EC0AA9D616A4B3851C00000000000004EC01215AA9B8B3251C00000000000004EC0624A24D1CB2C51C00000000000004EC0CAC16C020C2751C00000000000004EC01AF7E6374C2151C00000000000004EC0826E2F698C1B51C00000000000004EC0D3A3A99ECC1551C00000000000004EC03B1BF2CF0C1051C00000000000004EC08B506C054D0A51C00000000000004EC0F3C7B4368D0451C00000000000004EC043FD2E6CCDFE50C00000000000004EC0AB74779D0DF950C00000000000004EC0FCA9F1D24DF350C00000000000004EC064213A048EED50C00000000000004EC0CC988235CEE750C00000000000004EC01CCEFC6A0EE250C00000000000004EC08445459C4EDC50C00000000000004EC0D47ABFD18ED650C00000000000004EC0C2340C1F11D150C00000000000004EC0C2340C1F11D150C0FE7DC685032D4DC0C2340C1F11D150C0FE7DC685033D4CC0C2340C1F11D150C0713D0AD7A3304CC02AAC545051CB50C0703D0AD7A3304CC07AE1CE8591C550C0703D0AD7A3304CC0E25817B7D1BF50C0703D0AD7A3304CC0328E91EC11BA50C0703D0AD7A3304CC09A05DA1D52B450C0703D0AD7A3304CC0EB3A545392AE50C0703D0AD7A3304CC053B29C84D2A850C0703D0AD7A3304CC0A3E716BA12A350C0703D0AD7A3304CC00B5F5FEB529D50C0703D0AD7A3304CC05B94D920939750C0703D0AD7A3304CC0C30B2252D39150C0703D0AD7A3304CC014419C87138C50C0703D0AD7A3304CC07CB8E4B8538650C0703D0AD7A3304CC0CCED5EEE938050C0703D0AD7A3304CC03465A71FD47A50C0703D0AD7A3304CC0849A2155147550C0703D0AD7A3304CC0EC116A86546F50C0703D0AD7A3304CC03ECBF3E0EE6E50C0713D0AD7A3304CC0FF3EE3C2816E50C0A2EE0390DAB04BC0EC12D55B038550C01630815B77974BC05BCEA5B8AA9A50C0C173EFE1928F4BC0A5315A4755B550C00000000000804BC0014D840D4FD150C01899DB1896744BC05D05E7421B2A51C0B38EF4B3A2754BC0BB0F406A132751C068E89FE062C94AC03D6B1217DB2851C0413F9D3C76564AC09F268E97491D51C01E55A8C9E72D4AC014AE47E17A5051C05E770481DF154AC0DA531795F95E51C0ADA81CEE7E154AC033333333337351C0EACF7EA488084AC0DA835A1DCA8251C019479B994F014AC00473F4F8BDA551C0CB4A9352D0014AC0AD927EB12DFD51C0848FD2B6AB014AC07F11D9AC1FFF51C0D21D1F8887F249C01D4762388D1B52C06AE27899BCCA49C00AD7A3703D1252C08BAF2C87CCA049C0A323B9FC871A52C0ADCE20F4229449C056760B6E351352C0F866E5A8ED8449C024F83A04E91352C0DCDB8882745249C0F1F44A59863252C0DBCD42F1195049C01A97BBE09D4452C0EEEBC039236449C09A31BBDD014C52C0454B79083E6349C0A59421D8826352C004824AA6542849C04BABC6B71C6252C046216EF36B1449C0A4F55C4BED5D52C01CE7DB27EC0549C0D9BBF550916452C058CE39D3DFF648C0DD0E6844445C52C0937D46D8A6E648C098B4F347E26652C0F6FC1F1620C748C0AB37B412845D52C0D9A2BBDA40A948C048E17A14AE5F52C0D52137C30D9448C04B1A48BCE14B52C0BF901F3BB99848C0B26DAC1FF63552C0E4709CCA587B48C0287E8CB96B2652C0912CBBBB296948C0A59421D8822852C0D49AE61DA74048C0C009E0C1AA1452C0106734A8EC2E48C0A8D94D3ADB1452C004560E2DB21948C0687B4F40EE2452C06ECF3D35A8F047C089022269DC1552C0ADAC23FDACCD47C019B2158FE61652C07BC26DC89AB747C009B3BFA2910A52C095E70B6B74B447C01DF2857F47FF51C01D8AA7C3AF9A47C0F1248EE156F651C0E9482EFF219B47C07A45A6327BFE51C0711706D1FF8747C0A5315A4755FD51C000000000008047C0395BE5AE4AFB51C0CD6152D7356547C0182DF64DD0F451C00CC3EC0A226447C0B6CA5D95D5EA51C098E19A96B34A47C06ABC749318FA51C0E51E5C4B121247C0C1920612EFEE51C0780F2B37AC0847C09D2743FA12EA51C0653FE65EBBF546C01563AAAA61F351C0FA8271CBA2CB46C00775368966E151C08208CC9E5FC346C05DEF4806CAD651C03ECB98277C9C46C03760A12042E551C0FFF1B96EA57B46C073A7CF69710152C090A4FF40147346C03D5C1723B70152C0F46C567DAE6646C03505D78198E051C023DF008E985E46C08351499D80D451C037853A51B76646C09C46A4B789C751C0B515FBCBEE4546C09C33A2B437CF51C0BE82D9A95E3446C066E1462550F651C042CB5FC6B93046C09B6B3DE8FEF551C056212FB5EF0D46C075FBF6BFEDEB51C04E36D4DE96FF45C020578FA01DF251C0C967C3ABF6E845C05CA2C4F87AE651C0E5F21FD26FD745C0FD0978E3EEFB51C06CE3F49AC3BE45C09D11A5BDC1F951C00C11267B3AAB45C08A9DDFE643F051C037EE83E27DA645C0A922CB38FCEF51C0CCBE863B729645C008D5BC99070852C0865EDACB118745C088635DDC460952C01B09D91E624E45C01F85EB51B80652C07D96E7C1DD4D45C0A8188CB6CF0152C018135102513E45C00C7D0B46000852C0166646E4602945C06E2585C31C0352C039B0C167901345C0A499DD497AEF51C0BD1358A5991245C023DBF97E6AF251C0BEF15AAE230045C0EE7C3F355EF151C0F6FC1F1620E944C040529F3FC8F851C0BBF7CB82E4D344C0D27E5AFBF1F751C0F6D61B107CB444C0CA9C23938AF751C0B498EEF4A2B544C0624775BC1FF751C035958D13C7B644C0EA8B637FB1F651C040BEE654E8B744C0AADC49E43FF651C0298B1FA206B944C0AD7CCAF3CAF551C043D796E421BA44C0D6E6CDB652F551C0ECBDE6053ABB44C0532E8236D7F451C06B72E6EF4EBC44C07E585A7C58F451C08F13AC8C60BD44C01EB00D92D6F351C0DE7A8EC66EBE44C02712978151F351C01507278879BF44C0F9333455C9F251C0D96153BC80C044C015E364173EF251C08540374E84C144C0703EEAD2AFF151C0B21F3E2984C244C062E9C5921EF151C088F91C3980C344C0313839628AF051C083F6D36978C444C05856C44CF3EF51C0A018B0A76CC544C09366255E59EF51C0A5E04CDF5CC644C0AE9C57A2BCEE51C08AED95FD48C744C0495192251DEE51C09C95C8EF30C844C0760F48F47AED51C0747975A314C944C0739C251BD6EC51C060108206F4C944C061F910A72EEC51C0372E2A07CFCA44C0385F28A584EB51C066820194A5CB44C0E834C122D8EA51C01010F59B77CC44C0DDFF662D29EA51C0149F4C0E45CD44C0DA4EDAD277E951C0E725ACDA0DCE44C0669F0F21C4E851C0FB2B15F1D1CE44C0C53D2E260EE851C0B124E84191CF44C0A41F8FF055E751C09CC2E5BD4BD044C098B9BB8E9BE651C0F042305601D144C076CF6C0FDFE551C017B14CFCB1D144C0B73F898120E551C0192224A25DD244C0F9C924F45FE451C0E5E7043A04D344C0B2D07E769DE351C03EBCA3B6A5D344C047160118D9E251C039E31C0B42D444C095753EE812E251C01B45F52AD9D444C01596F1F64AE151C09D7F1B0A6BD544C0B79BFB5381E051C048EEE89CF7D544C096D2620FB6DF51C0F7A922D87ED644C0AA565139E9DE51C0497FFAB000D744C097B713E21ADE51C0FBDB0F1D7DD744C0BB98171A4BDD51C0FBB27012F4D744C0AC4DEAF179DC51C02D579A8765D844C03173377AA7DB51C0BC4C7A73D1D844C0FB84C7C3D3DA51C0FD106FCD37D944C027707EDFFED951C095D8488D98D944C0C8225ADE28D951C013444AABF3D944C08B1871D151D851C0B40A292049DA44C0ADE4F0C979D751C0529B0EE598DA44C061B91CD9A0D651C07AB398F3E2DA44C0D4EC4B10C7D551C076ECD94527DB44C0F97BE880ECD451C0633E5AD665DB44C0398B6D3C11D451C01F7917A09EDB44C04CE5655435D351C01FB3859ED1DB44C048786ADA58D251C018AE8FCDFEDB44C022D120E07BD151C05831972926DC44C0C89539779ED051C0F25975AF47DC44C0FEFD6EB1C0CF51C091E07A5C63DC44C02B4B83A0E2CE51C0EE54702E79DC44C03D3F3F5604CE51C0F24E962389DC44C0D69270E425CD51C07E95A53A93DC44C0EE6AE85C47CC51C0A93ACF7297DC44C00BCE79D168CB51C0C6ADBCCB95DC44C04F19F8538ACA51C0D7C28F458EDC44C06D7535F6ABC951C09FAFE2E080DC44C0CD4B01CACDC851C04CFEC79E6DDC44C000BC26E1EFC751C0B675CA8054DC44C09F116B4D12C751C029F7EC8835DC44C0DF3A8C2035C651C0DC51AAB910DC44C0F53F3F6C58C551C0FC0BF515E6DB44C073BB2E427CC451C0632137A1B5DB44C0D153F9B3A0C351C0F7B7515F7FDB44C04D3630D3C5C251C0CDC99C5443DB44C0459355B1EBC151C0F8C4E68501DB44C0451CDB5F12C151C0342174F8B9DA44C0DB8320F039C051C062EBFEB16CDA44C079FF717362BF51C0E546B6B819DA44C078CB06FB8BBE51C0F2E43D13C1D944C06DB1FF97B6BD51C0DC71ADC862D944C0F890655BE2BC51C088F88FE0FED844C03BEB27560FBC51C0E13BE36295D844C014711B993DBB51C09706175826D844C04F94F8346DBA51C02E710CC9B1D744C0F31B5A3A9EB951C04B1E15BF37D744C0C6BBBBB9D0B851C0976DF243B8D644C03FAF78C304B851C014A5D46133D644C0F757CA673AB751C01A115A23A9D544C0DADFC6B671B651C0141B8E9319D544C014DF5FC0AAB551C0FE56E8BD84D444C005066194E5B451C0E6874BAEEAD344C049CB6E4222B451C0629B04714BD344C0E91D05DA60B351C03E9CC912A7D244C0051C766AA1B251C04D9CB8A0FDD144C0D3CDE802E4B151C0CD9556284FD144C058E557B228B151C00E448EB79BD044C0C48290876FB051C0DCF3AE5CE3CF44C0ABFD3091B8AF51C0A54B6B2626CF44C034B3A7DD03AF51C06F0BD82364CE44C048D9317B51AE51C0DEC46A649DCD44C0FC56DA77A1AD51C05A8BF8F7D1CC44C032A278E1F3AC51C0709CB4EE01CC44C0A0A2AFC548AC51C0B9002F592DCB44C03F9AEC31A0AB51C03225534854CA44C05A136633FAAA51C0646D66CD76C944C02DD41AD756AA51C050BE06FA94C844C04CD8D029B6A951C0720229E0AEC744C0D34F143818A951C0DEA61792C4C644C075A4360E7DA851C0AF117122D6C544C082844DB8E4A751C0EE1126A4E3C444C0FDF331424FA751C02849782AEDC344C0B6637FB7BCA651C0B58EF8C8F2C244C0A5CE92232DA651C0FE4C8593F4C144C067DD8991A0A551C0EBD8489EF2C044C01010420C17A551C084C3B7FDECBF44C046EE579E90A451C006268FC6E3BE44C0C53D26520DA451C0AAE8D20DD7BD44C0473FC5318DA351C01B04CCE8C6BC44C0E1F1094710A351C0E0BD066DB3BB44C0E85C859B96A251C000E050B09CBA44C05AE0833820A251C0CAEBB7C882B944C0CF8B0C27ADA151C02F4887CC65B844C00B7CE06F3DA151C0B66B46D245B744C02E3F7A1BD1A051C03B02B7F022B644C0813F0D3268A051C0BA0ED33EFDB444C0E43485BB02A051C02C09CBD3D4B344C0FB9C85BFA09F51C0CBF803C7A9B244C0EB396945429F51C0D58A15307CB144C0E1974154E79E51C0FC25C8264CB044C03299D6F28F9E51C0ADFA12C319AF44C03D09A6273C9E51C076101A1DE5AD44C0EF35E3F8EB9D51C084502C4DAEAC44C0F98F766C9F9D51C0A08DC16B75AB44C09EB70C93849D51C08100BE8003AB44C05036E50AEF8E4FC0E3FC4D2844A443C0') ) as q(polygon) ) SELECT 'geog_precision_savffir', _ST_DistanceUnCached(pt.point, ply.polygon), ST_Distance(pt.point, ply.polygon) FROM pt, ply; -- Test another precision case near the north poly and over the dateline WITH pt AS ( SELECT point::geography FROM ( VALUES ('0101000020E610000000000000004065400000000000804840'), ('0101000020E610000075C8CD70033965C02176A6D079315040') ) AS p(point) ), ply AS ( SELECT polygon::geography FROM ( VALUES ('0103000020E6100000010000004101000078A1B94E231F65C000000000000051400000000000C063C000000000000052400000000000C063C0000000000000524078A1B94E231F65C0000000000000514078A1B94E231F65C000000000008056400000000000A061C000000000008056400000000000A061C0EF940ED6FF7F56400000000000A061C0DD291DACFF7F56400000000000A061C0CBBE2B82FF7F56400000000000A061C0B9533A58FF7F56400000000000A061C0A8E8482EFF7F56400000000000A061C0967D5704FF7F56400000000000A061C072A774B0FE7F56400000000000A061C04FD1915CFE7F56400000000000A061C02BFBAE08FE7F56400000000000A061C0F6B9DA8AFD7F56400000000000A061C0C178060DFD7F56400000000000A061C079CC4065FC7F56400000000000A061C00F4A9869FB7F56400000000000A061C0A4C7EF6DFA7F56400000000000A061C0040473F4F87F56400000000000A061C052D50451F77F56400000000000A061C07DD0B359F57F56400000000000A061C0611F9DBAF27F56400000000000A061C00F2DB29DEF7F56400000000000A061C0642310AFEB7F56400000000000A061C06102B7EEE67F56400000000000A061C0E1F3C308E17F56400000000000A061C0AFB6627FD97F56400000000000A061C0DDB5847CD07F56400000000000A061C013DA722EC57F56400000000000A061C02C4D4A41B77F56400000000000A061C0CFF753E3A57F56400000000000A061C0B72DCA6C907F56400000000000A061C0776C04E2757F56400000000000A061C093C6681D557F56400000000000A061C05B0D897B2C7F56400000000000A061C01B12F758FA7E56400000000000A061C0B8239C16BC7E56400000000000A061C027FC523F6F7E56400000000000A061C0BD9179E40F7E56400000000000A061C0CFDA6D179A7D56400000000000A061C0F0332E1C087D56400000000000A061C07CB8E4B8537C56400000000000A061C0C53D963E747B56400000000000A061C08E40BCAE5F7A56400000000000A061C07F8CB96B097956400000000000A061C0FE65F7E4617756400000000000A061C0C9073D9B557556400000000000A061C0CDCCCCCCCC7256400000000000A061C07A01F6D1A96F56400000000000A061C053616C21C86B56400000000000A061C009A7052FFA6656400000000000A061C0F0332E1C086156400000000000A061C085471B47AC5956400000000000A061C0752497FF905056400000000000A061C08C84B69C4B4556400000000000A061C02C6519E2583756400000000000A061C02B357BA0152656400000000000A061C055C6BFCFB81056400000000000A061C0F988981249F655400000000000A061C08C321B6492D555400000000000A061C0ADC5A70018AD55400000000000A061C02254A9D9037B55400000000000A061C009E1D1C6113D55400000000000A061C0A0E5797077F054400000000000A061C0FA49B54FC79154400000000000A061C043959A3DD01C54400000000000A061C075EACA67798C53400000000000A061C00EE02D90A0DA52400000000000A061C000000000000052400000000000A061C000000000000052400000000000A061C00100000000004F400000000000A061C01730815B77274E408C45D3D9C99D61C04CAB21718F254E40C0120F289B9861C03EB324404D214E40745E6397A89061C0B9AAECBB221C4E406C3997E2AA8E61C09E465A2A6F274E4068666666667F61C0C9EA56CF49174E40F8D005F52D7661C01FF98381E72A4E408499B67F656261C01B69A9BC1D2D4E40C04351A04F6261C01CD82AC1E2284E40EC7C3F355E6661C0097250C24C0B4E40E8525C55F66161C001E31934F4FF4D406431B1F9B86161C0EDDD1FEF55FF4D407C4963B48E5961C06749809A5AF64D40703D0AD7A35661C0D60451F701F44D4080608E1EBF5561C0F22900C633EC4D40008750A5665561C048C49448A2E74D40205036E50A5461C0C481902C60E24D40283108AC1C4161C0C1E78711C2BB4D40B08009DCBA4061C0CA1F0C3CF7BA4D4010751F80D43E61C0029F1F4608B74D40A47EDE54A43E61C03CFC3559A3B64D405C3D27BD6F3361C00938842A359F4D40E85BE674593161C0F7D1A92B9F8D4D409820EA3E003061C019E76F42217E4D402883A3E4D53061C08833BF9A03744D40605E807D742E61C04E7FF62345744D40182B6A300D2961C06B82A8FB00804D40D0FBC6D79E2561C0C8F484251E844D4044DD0720B52261C0E46BCF2C09884D40DC9DB5DB2E2161C0AF47E17A148A4D40303D6189071F61C02A5C8FC2F58C4D40F8F719170E1C61C02259C0046E914D405031CEDF841A61C0AB2B9FE579944D401C649291B31261C077DB85E63A954D40A07A6B60AB0F61C03E963E7441A14D40247F30F0DC0F61C026E99AC937A34D402054A9D9030F61C04EB9C2BB5CA44D40C051F2EA1C0F61C0CE920035B5A84D409CF9D51C200F61C05B2A6F4738A94D40C86C9049460F61C05D8FC2F528B04D4008D3307C440F61C073BF4351A0BB4D40285C8FC2F50B61C03E61890794B94D40080C59DDEA0B61C030FA0AD28CB94D40D8166536C80B61C04C7155D977B94D400079AF5A990B61C005392861A6B94D40F836FDD98F0B61C0E8A4F78DAFB94D40D03FC1C58A0B61C0DA5A5F24B4B94D4058087250C20961C0650113B875BB4D401C5A643BDF0861C0C32FF5F3A6BE4D407862D68BA10761C0E627D53E1DC34D4020680586AC0761C03A5D16139BC74D40D02C0950530B61C07194BC3AC7CC4D4030EBC5504E0961C0988BF84ECCCE4D40CCAFE600C10861C07411DF8959CF4D40B81457957D0861C0EC8B84B69CCF4D400825CCB4FD0761C0F2EF332E1CD04D40703D0AD7A30761C023F8DF4A76D04D403837A6272C0661C0BD3AC780ECD14D40602D3E05C00261C05F2EE23B31D34D4018601F9DBA0161C057F146E691D34D409820EA3E000161C03AEE940ED6D34D406CB2463D440061C041C1C58A1AD44D4010FC6F253B0061C0C8F484251ED44D402CBCCB457CFE60C038328FFCC1D44D40C0BC00FBE8FB60C065AF777FBCD74D4080BC57AD4CFB60C0C7BFCFB870D84D40102DB29DEFF860C0BB490C022BDB4D40242D95B723F760C0E25D2EE23BDD4D402CE7525C55EF60C00B9DD7D825E64D40CC1E680586EB60C0EE9925016ADE4D400C022B8716E860C0B7B9313D61D94D40CC0182397AE760C0FFB7921D1BD94D40C095ECD808E760C0B1389CF9D5D44D40E47E87A240E560C0079E7B0F97D04D401C5036E50AE560C0013ACC9717D04D40C01C3D7E6FE460C03A2861A6EDCF4D40988F6B43C5E360C05665DF15C1CF4D40148733BF9AE360C0252367614FCF4D40D0A5B8AAECE060C040DEAB5626C84D40D4CA845FEAE060C09AB67F65A5C54D40901EBFB7E9E060C01B2FDD2406C54D40B05582C5E1E060C055E3A59BC4BC4D405014E81379E260C0537E52EDD3B94D40483D44A33BE360C08A07944DB9B64D40E8263108ACDF60C09A7CB3CD8DB14D4080F10C1AFAE060C04052448655AC4D40D8D825AAB7DE60C06B65C22FF5A34D40E874594C6CD660C01D5A643BDF9F4D40F82CCF83BBD560C063D68BA19C984D40B0683A3B19D260C046990D32C9904D407047382D78CF60C0CDE9B298D8904D4078978BF84ECE60C017139B8F6B8B4D4008B64AB038CC60C094DE37BEF6844D40303D618907CD60C069CBB914577D4D40140A117008CA60C0E644BB0A297B4D4054E3A59BC4CA60C0763C66A032764D40044CE0D6DDC960C025404D2D5B734D40A818E76F42C860C0FD6F253B366E4D40A41EA2D11DBF60C067F2CD3637624D40D0A92B9FE5BA60C07732384A5E5D4D4030B610E4A0B660C059FFE7305F4E4D40A0BE654E97B560C02CC1E270E64B4D4044813E9127B560C08A5E46B1DC4A4D40C09F1A2FDDB460C044FF04172B4A4D40DCD26A48DCB460C0284EEE77284A4D4028E3DF675CB360C04A29E8F692464D4048D74CBED9B160C05F9D6340F6424D4098395D1613AC60C09F7B0F971C374D40F00390DAC4AE60C0A80018CFA0314D40F8F719170EAB60C0AC730CC85E234D400C5EF415A4A860C01B4CC3F0111D4D4008E1D1C611A760C03208AC1C5A184D40E422BE13B3A660C08221AB5B3D174D404833164D67A660C0FCC6D79E59164D4070641EF983A560C073DC291DAC134D4020E527D53EA260C06B9F8EC70C004D40B0BAD573D29B60C0DEEA39E97DEB4C40F4D6C056099860C07884D38217D94C4064B48EAA269560C0D869A4A5F2CE4C4054C6BFCFB89160C081ECF5EE8FBF4C405CC47762D68B60C02AE8F692C6AC4C40446E861BF08760C0ADA8C1340C9B4C4060C8EA56CF8B60C096CFF23CB88B4C40D005F52D738160C07E5C1B2AC6854C40AC6EF59CF48360C088BF266BD46F4C40D8EBDD1FEF7B60C026CCB4FD2B674C402883A3E4D57C60C040A9F6E978604C40D03FC1C58A7B60C0448B6CE7FB594C40747632384A7B60C07D96E7C1DD554C40D0747632387B60C03815A930B6544C40F8B31F29227B60C074F4F8BD4D534C40D8868A71FE7A60C0FF7DC68503514C40600CE544BB7A60C0F88DAF3DB34C4C40C8D2872EA87960C046F0BF95EC4C4C40E04F8D976E7860C0A2B94E232D4D4C4054910A630B7860C08642041C424D4C40540E2DB29D7760C03ED00A0C594D4C40808B1535987660C005FF5BC98E4D4C40D09B8A54187560C036EA211ADD4D4C406891ED7C3F7460C019ADA3AA094E4C4050EDD3F1987260C059FFE7305F4E4C40446458C51B6F60C02EEC6987BF464C40280AF4893C6A60C0E46BCF2C09404C40E0AFC91AF56960C03A7AFCDEA63F4C408872A25D856960C0ADA8C1340C3F4C4018B2BAD5736960C043EC4CA1F33E4C4044088F368E6560C0C57762D68B394C40CCCCCCCCCC6260C0A4C7EF6DFA334C4058DDEA39E95E60C0613C8386FE314C4034164D67275E60C0709EEA909B314C40C8F99B50885D60C0FE2B2B4D4A314C40E07A14AE475D60C0D4D9C9E028314C4098F56228275C60C0EAEC647094304C40C0D84290835B60C0F246E6913F304C40981C774A075960C0CA1F0C3CF72E4C40900A630B415860C0B1AC3429052D4C40205ED72FD85760C0E44EE960FD2B4C40DC240681955760C0ECDD1FEF552B4C407C74EACA675760C0E6965643E22A4C40B04B546F0D5760C0CBBE2B82FF294C4034936FB6B95660C05B0D897B2C294C40285C8FC2F55560C0C9CD70033E274C40342905DD5E5560C08CA6B393C1254C4098728577B95460C07923F3C81F244C4044C02154A95460C01D9430D3F6234C40A82688BA0F5460C067834C3272224C4030815B77F35360C044FF04172B224C40E422BE13B35360C0DAEBDD1FEF214C40A47EDE54A45260C038A6272CF1204C403C1405FA445260C0079E7B0F97204C40C8681D554D5160C0B3632310AF1F4C4080F10C1AFA4E60C050AA7D3A1E1F4C405C33F9669B4E60C0DE0720B5891B4C409CC420B0724E60C03641D47D001A4C40C0FF56B2634E60C0B7D617096D194C40B46CAD2F124E60C092442FA358164C402891442FA34D60C0AF64C74620124C4090ED7C3F354B60C023F8DF4A76104C405CE15D2EE24760C0C7850321590C4C400CB08F4E5D4760C07177D66EBB0C4C40E097FA79534360C048FE60E0B90F4C40C8D2872EA84260C0EA263108AC0C4C4098395D16134260C052F2EA1C030A4C40902232ACE24160C029D027F224094C40B87EC16ED84160C094DE37BEF6084C40F00703CFBD4160C0EAB298D87C084C40DC9DB5DB2E4160C0DAEBDD1FEF054C40200C3CF71E4160C09AB67F65A5054C40686AD95A5F4060C067F2CD3637024C40A41EA2D11D4060C0A2629CBF09014C40C4724BAB214060C05D8FC2F528004C40F8B31F29224060C00FA14ACD1E004C409C16BCE82B4060C034F9669B1BFF4B40CC457C27664060C04DC3F01131F94B405C5A0D897B4060C0E6ED08A705F74B40DC0720B5894060C0B72DCA6C90F54B40BCD05CA7914060C0EA60FD9FC3F44B4054F146E6914060C07177D66EBBF44B40601A868F884060C07177D66EBBF44B409CF9D51C204060C07177D66EBBF44B409CF9D51C204060C0F20C1AFA27F44B406414CB2DAD4260C077BE9F1A2FE94B40B8533A58FF4360C06D5B94D920E74B40B05582C5E14460C0CBF8F71917E24B40F82CCF83BB4460C0174D672783DB4B40188BA6B3934360C0AC90F2936AD74B4004DD5ED2184460C00B2E56D460CA4B4044D3D9C9E04260C03AB4C876BEBF4B40EC5F5969524160C0E8FBA9F1D2B94B406414CB2DAD4060C05001309E41AB4B40900A630B413F60C0D205F52D73A64B40E4C281902C3F60C096B7239C16A44B4020020EA14A4360C0F870C971A7984B400035B56CAD4460C00BF4893C49924B40E0F3C308E14460C001E31934F48F4B402866BD18CA4560C0B3632310AF8B4B4048ACC5A7004660C0011DE6CB0B884B401881785DBF4860C07FA4880CAB7C4B40B46CAD2F124B60C0B7F3FDD478754B40480C022B874D60C0A553573ECB6F4B40C0D4CF9B8A4E60C0FF60E0B9F76C4B40889D29745E4F60C0F4716DA8186B4B40DC9DB5DB2E5260C0A96F99D365654B4000D9EBDD1F5460C0D678E92631644B4054AEF02E175560C0A81DFE9AAC614B40182FDD24065460C0E06C73637A5E4B403C3F8C101E5460C055E3A59BC45C4B408043A852B35360C0597380608E5A4B40044CE0D6DD9560C0CDCCCCCCCC544B406866666666DE60C01E03B2D7BB1B4B4000000000000061C00100000000004B400000000000E060C01E03B2D7BB5B4A400000000000F862C0132C0E677E614C4000000000002063C00100000000004C4000000000000064C00100000000C04A40F8B31F2922FA64C03433333333B34940F8B31F29221266C0B0C91AF51011494034333333332366401D03B2D7BB1B49402EE7525C555D64409A99999999D946400000000000E063404A63B48EAA0A494000000000002065400100000000004B40000000000040654003F1BA7EC1564B406766666666466540EACF7EA488684B4000000000008066400100000000004E4068666666668665C03433333333035040E8C6F484251F65C00000000000405040E8C6F484251F65C00000000000C0504078A1B94E231F65C00000000000005140') ) as q(polygon) ) SELECT 'geog_precision_pazafir', _ST_DistanceUnCached(pt.point, ply.polygon), ST_Distance(pt.point, ply.polygon) FROM pt, ply; -- Clean up spatial_ref_sys DELETE FROM spatial_ref_sys WHERE srid = 4326; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/regress_expected���������������������������������������������0000644�0000000�0000000�00000015503�12142775451�021763� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|POINT(1 2) 2|POINT(1 2 3) 3|LINESTRING(0 0,1 1,2 2,3 3,4 4) 4|LINESTRING(0 0 0,1 1 1,2 2 2,3 3 3,4 4 4) 5|LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15) 6|POLYGON((0 0,10 0,10 10,0 10,0 0)) 7|POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1)) 8|POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5)) 9|POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5),(1 1,2 1,2 2,1 2,1 1)) 10|POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1)) 11|POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)) 12|GEOMETRYCOLLECTION(POINT(1 2)) 13|GEOMETRYCOLLECTION(POINT(1 2 3)) 14|GEOMETRYCOLLECTION(LINESTRING(0 0,1 1,2 2,3 3,4 4)) 15|GEOMETRYCOLLECTION(LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)) 16|GEOMETRYCOLLECTION(POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1))) 17|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3)) 18|GEOMETRYCOLLECTION(LINESTRING(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),POINT(1 2 3)) 19|GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,1 1,2 2,3 3,4 4)) 20|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3),LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)) 21|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3),LINESTRING(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),POLYGON((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0))) 22|GEOMETRYCOLLECTION(POINT(1 2 0),POINT(1 2 3),POLYGON((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))) 23|MULTIPOINT(1 2) 24|MULTIPOINT(1 2 3) 25|MULTIPOINT(1 2,3 4,5 6) 26|MULTIPOINT(1 2 3,5 6 7,8 9 10,11 12 13) 27|MULTIPOINT(1 2 0,1 2 3,4 5 0,6 7 8) 28|MULTIPOINT(1 2 3,4 5 0) 29|MULTILINESTRING((0 0,1 1,2 2,3 3,4 4)) 30|MULTILINESTRING((0 0,1 1,2 2,3 3,4 4),(0 0,1 1,2 2,3 3,4 4)) 31|MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)) 32|MULTILINESTRING((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)) 33|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0))) 34|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))) 35|MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))) 36|GEOMETRYCOLLECTION(MULTIPOINT(1 2)) 37|GEOMETRYCOLLECTION(MULTIPOINT(1 2 3)) 38|GEOMETRYCOLLECTION(MULTIPOINT(1 2 3,5 6 7,8 9 10,11 12 13)) 39|GEOMETRYCOLLECTION(MULTILINESTRING((0 0,1 1,2 2,3 3,4 4))) 40|GEOMETRYCOLLECTION(MULTILINESTRING((1 2 3,4 5 6,7 8 9,10 11 12,13 14 15),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0))) 41|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))) 42|GEOMETRYCOLLECTION(POINT(1 2 0),MULTIPOINT(1 2 3)) 43|GEOMETRYCOLLECTION(MULTIPOINT(1 2 0,3 4 0,5 6 0),POINT(1 2 3)) 44|GEOMETRYCOLLECTION(POINT(1 2 3),MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0))) 45|GEOMETRYCOLLECTION(MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0)),POINT(1 2 3)) 46|GEOMETRYCOLLECTION(POINT(1 2 3),MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1)))) 47|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0)),((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(5 5 0,7 5 0,7 7 0,5 7 0,5 5 0)),((0 0 1,10 0 1,10 10 1,0 10 1,0 0 1),(5 5 1,7 5 1,7 7 1,5 7 1,5 5 1),(1 1 1,2 1 1,2 2 1,1 2 1,1 1 1))),MULTILINESTRING((0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(0 0 0,1 1 0,2 2 0,3 3 0,4 4 0),(1 2 3,4 5 6,7 8 9,10 11 12,13 14 15)),MULTIPOINT(1 2 3,5 6 7,8 9 10,11 12 13)) 48|MULTIPOINT(-1 -2 -3,5.4 6.6 7.77,-5.4 -6.6 -7.77,1000000 1e-6 -1000000,-1.3e-6 -1.4e-5 0) 49|GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 1))) ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: parse error - invalid geometry at character 14 ERROR: geometry contains non-closed rings at character 24 ERROR: geometry contains non-closed rings at character 24 ERROR: parse error - invalid geometry at character 24 ERROR: geometry has too many points at character 23 ERROR: parse error - invalid geometry at character 23 ERROR: geometry requires more points at character 23 62|POINT(inf 0) 63|POINT(-inf 0) ERROR: parse error - invalid geometry at character 23 65|t 65a|t 66|t 66a|f 67|t 67a|t 68|t 68a|t 69|t 69a|f 70|t 70a|f 71|t 71a|f 72|t 72a|f 73|t 73a|f 74|f 74a|f 75|t 75a|f 76|f 76a|f 77|t 78|t 79|f 80|f 81|t 82|f 83|t 84|f 85|t 86|f 87|f 88|t 89|t 90|f 91|t 92|f 93|f 94|t 95|f 96|t 97|f 98|t 99|f 100|f 101|f 102|f 103|t 104|t 105|f 106|BOX3D(0 0 0,7 7 0) 107|POLYGON((0 0,0 7,7 7,7 0,0 0)) 108|2 109|4 110|6 111|552 112|3 121|BOX3D(1.19894826 1.20265412 0,999.932129 999.692932 0)|BOX3D(1.40486765 1.3484304 0,999.857666 999.936401 0) 122|f 123|f 124|f 125|f 126|f 127|f 128|f 129|48016|48016 131|1 132|2 133| 133a|3 133b| 133c| 133d|4 133e| 137| 138|BOX3D(0 0 0,0 0 0) 139|SRID=2;GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY,POINT(0 0)) 140|SRID=3;MULTIPOINT(2 2) 141|SRID=4;MULTILINESTRING((2 2,3 3)) 142|SRID=5;MULTILINESTRING((2 2,3 3)) 143|SRID=6;MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0))) 143c1|MULTICURVE(CIRCULARSTRING(0 0,1 1,2 2)) 144|POINTM(1 2 0) 145|POINT(1 2 0) 146|POINT(1 2 0 3) 147|POINT(1 2 3 0) 148|LINESTRING(0 0,5 0,10 0) 149|GEOMETRYCOLLECTION EMPTY 150|SRID=6;GEOMETRYCOLLECTION(POLYGON((0 0,1 0,1 1,0 1,0 0))) 151|0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000 152|4326 152.1|t 152.2|4326 153|MULTIPOINT(0 0) 154|MULTIPOINT(0 0) 155|MULTIPOINT(0 0,1 1) 156|MULTIPOINT(1 1) 157|MULTILINESTRING((0 0,1 1)) 158|MULTILINESTRING((0 0,1 1),(2 2,3 3)) 159|MULTIPOLYGON EMPTY 160|MULTIPOINT(1 1) 161|MULTILINESTRING((0 0,1 1),(2 2,3 3)) 162|010200000003000000F771D98DE33826C00000000000004440F771D98DE33826C000000000008051400000000000805140F771D98DE33826C0 163|POLYGON((0 0 0,1 0 0,1 1 0,0 1 0,0 0 0)) 164|POLYGON((0 0 0,1 0 0,1 1 0,0 1 0,0 0 1)) ERROR: geometry contains non-closed rings 166|POINT EMPTY 167|LINESTRING EMPTY 168|POLYGON EMPTY 169|CIRCULARSTRING EMPTY 170|COMPOUNDCURVE EMPTY 171|CURVEPOLYGON EMPTY 172|MULTIPOINT EMPTY 173|MULTILINESTRING EMPTY 174|MULTIPOLYGON EMPTY 175|TRIANGLE EMPTY 176|TIN EMPTY 177|POLYHEDRALSURFACE EMPTY 178|MULTISURFACE EMPTY 179|MULTICURVE EMPTY 180|GEOMETRYCOLLECTION EMPTY 181|GEOMETRYCOLLECTION(TRIANGLE EMPTY,TIN EMPTY) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/concave_hull_expected����������������������������������������0000644�0000000�0000000�00000000147�12142775451�022751� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ST_ConcaveHull MultiPolygon 0.95|t|t ST_ConcaveHull Lines 0.80|t|t ST_ConcaveHull Lines 0.80 holes|t|t �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/wmsservers.sql�����������������������������������������������0000644�0000000�0000000�00000010015�12143373606�021434� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET postgis.backend = 'sfcgal'; SET client_min_messages TO warning; SELECT 'Starting up MapServer/Geoserver tests...'; -- Set up the data table SELECT 'Setting up the data table...'; CREATE TABLE wmstest ( id INTEGER, pt GEOMETRY(Polygon,4326) ); INSERT INTO wmstest SELECT lon * 100 + lat AS id, st_setsrid(st_buffer(st_makepoint(lon, lat),1.0),4326) AS pt FROM (select lon, generate_series(-80,80, 5) AS lat FROM (SELECT generate_series(-175, 175, 5) AS lon) AS sq1) AS sq2; --INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES ('', 'public','wmstest','pt',2,4326,'POLYGON'); ALTER TABLE wmstest add PRIMARY KEY ( id ); CREATE INDEX wmstest_geomidx ON wmstest using gist ( pt ); -- Geoserver 2.0 NG tests SELECT 'Running Geoserver 2.0 NG tests...'; -- Run a Geoserver 2.0 NG metadata query SELECT 'Geoserver1', upper(TYPE) As TYPE FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; SELECT 'Geoserver2', SRID FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; -- Run a Geoserver 2.0 NG WMS query SELECT 'Geoserver3', "id",substr(encode(ST_AsBinary(ST_Force2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-6.58216065979069 -0.7685569763184591, -6.58216065979069 0.911225433349509, -3.050569931030911 0.911225433349509, -3.050569931030911 -0.7685569763184591, -6.58216065979069 -0.7685569763184591))', 4326); -- Run a Geoserver 2.0 NG KML query SELECT 'Geoserver4', count(*) FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver5', "id",substr(encode(ST_AsBinary(ST_Force2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver6', "id",substr(encode(ST_AsBinary(ST_Force2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && ST_GeomFromText('POLYGON ((-1.507182836191598 24.031312785172446, -1.507182836191598 25.995557016429064, 1.7399982474034008 25.995557016429064, 1.7399982474034008 24.031312785172446, -1.507182836191598 24.031312785172446))', 4326); -- MapServer 5.4 tests select 'MapServer1', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer2', "id",substr(encode(ST_AsBinary(ST_ForceCollection(ST_Force2d("pt")),'NDR'),'base64'),0,16) as geom,"id" from wmstest where pt && ST_GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- MapServer 5.6 tests select * from wmstest where false limit 0; select 'MapServer3', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer4', "id",substr(encode(ST_AsBinary(ST_ForceCollection(ST_Force2d("pt")),'NDR'),'hex'),0,16) as geom,"id" from wmstest where pt && ST_GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- Drop the data table SELECT 'Removing the data table...'; DROP TABLE wmstest; --DELETE FROM geometry_columns WHERE f_table_name = 'wmstest' AND f_table_schema = 'public'; SELECT 'Done.'; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/tickets_expected���������������������������������������������0000644�0000000�0000000�00000024737�12142775451�021770� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#2|POLYGON((1 1,1 2,2 2,3 2,3 1,2 1,1 1)) #11|0 NOTICE: ST_Locate_Between_Measures and ST_Locate_Along_Measure are deprecated. Use ST_LocateAlong and ST_LocateBetween. #21|SRID=31293;POINTM(6220.13 5337367.145 4566) t ERROR: AddGeometryColumn() - invalid SRID #44|t|t #58|220187|150406|220289|150507 ERROR: lwgeom_to_gml2: 'CurvePolygon' geometry type not supported #66|CIRCULARSTRING(0 0,1 1,2 2) #68a|MULTIPOINT(1 3,4 5) ERROR: lwgeom_longitude_shift: unsupported geom type: CircularString #69|CIRCULARSTRING(220269 150417,220228 150507,220228 150408) #70|3 #73|GEOMETRYCOLLECTION(CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)) #80|MULTILINESTRING((0 0,1 1)) #83|MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406)) ERROR: LWGEOM2SFCGAL: Unknown geometry type ! #112|GEOMETRYCOLLECTION(POINT(-10 50)) NOTICE: ST_Locate_Between_Measures and ST_Locate_Along_Measure are deprecated. Use ST_LocateAlong and ST_LocateBetween. ERROR: Geometry argument does not have an 'M' ordinate #116|POLYGON EMPTY #122|CIRCULARSTRING(220268 150415,220227 150505,220227 150406) #124a|COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,30 5),CIRCULARSTRING(30 5,34 56,67 89)) ERROR: incontinuous compound curve #145a|0103000020E610000000000000 #145b|0 #146|0|t|GEOMETRYCOLLECTION(LINESTRING(0 0,-1 -1),MULTIPOINT(1 2,2 3)) ERROR: Invalid hex string, length (267) has to be a multiple of two! #157|ST_Polygon|POLYGON #157|ST_Point|POINT #157|ST_Polygon|POLYGON #157|ST_CurvePolygon|CURVEPOLYGON #157|ST_CircularString|CIRCULARSTRING #168|3|MULTIPOLYGON ZM (((4275341.96977851 259186.966993061 1323.76295828331 -1.79769313486232e+308,4275341.96977851 259186.966993061 1323.76295828331 -1.79769313486232e+308,4275341.96977851 259186.966993061 1323.76295828331 -1.79769313486232e+308)))|IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4 #175|SRID=26915;POINT(482020 4984378) #178a|0 #178b|5 NOTICE: No points or linestrings in input array #179a| NOTICE: No points or linestrings in input array #179b| #183|CIRCULARSTRING(0 0,0.5 1.2071067812,0 1) #210a| NOTICE: No points or linestrings in input array #210b| #213|17 #234|COMPOUNDCURVE((0 0,1 1)) #241|0 #254|010700000000000000 #259| #260|1667701 #261|0 #262|POINT(-119.5434 34.9438)|t|t|t #262|POINT(-119.5452 34.9442)|t|t|t #262|POINT(-119.5434 34.9438)|t|t|t #262|POINT(-119.5438 34.9443)|t|t|t #263|SRID=4326;POINT(-119.5434 34.9438)|t|t|t #263|SRID=4326;POINT(-119.5452 34.9442)|t|t|t #263|SRID=4326;POINT(-119.5434 34.9438)|t|t|t #263|SRID=4326;POINT(-119.5438 34.9443)|t|t|t #271|t #272|-2|2 #277|<gml:Point><gml:coordinates>1,1e+308</gml:coordinates></gml:Point> #299|2 #304 #304.a|21 #304.b|1 #408|Too few points in geometry component[ NOTICE: Too few points in geometry component at or near point 0 0 #408.1|f #408.2|Too few points in geometry component[0 0] NOTICE: IllegalArgumentException: Invalid number of points in LinearRing found 2 - must be 0 or >= 4 #408.3|f #408.4|IllegalArgumentException: Invalid number of points in LinearRing found 2 - must be 0 or >= 4 #457.1|POINT(0 0) #457.2|LINESTRING EMPTY #457.3|POLYGON EMPTY #457.4|POINT EMPTY #457.5|LINESTRING(0 0,1 1) #457.6|POLYGON EMPTY #457.7|POINT EMPTY #457.8|LINESTRING EMPTY #457.9|POLYGON((0 0,1 0,1 1,0 1,0 0)) #835.1|POINT EMPTY #835.2|LINESTRING EMPTY #835.3|POLYGON EMPTY #835.4|POINT EMPTY #835.5|LINESTRING EMPTY #835.6|POLYGON EMPTY #835.7|POINT EMPTY #835.8|LINESTRING EMPTY #835.9|POLYGON EMPTY #835.10|MULTIPOINT EMPTY #835.11|MULTILINESTRING EMPTY #835.12|MULTIPOLYGON EMPTY #650|MULTIPOINT(0 0,1 1,2 2) #667|SRID=4326;CURVEPOLYGON(CIRCULARSTRING(30 40,-49.2314112161292 32.1963871193548,30 40)) #677|1121395 #680|01d107000000000000000024c000000000000049400000000000000040 #681a| #681b| #681c| #681d| #681e| #681f| #681g| #682|0103000020E610000000000000 #683|0103000020E610000000000000 #684,#2109|SRID=4326;POINT EMPTY #2109|SRID=3395;POINT EMPTY #685|0103000020E610000000000000 #686|0107000020E610000000000000 #687|f #689|f #690 010200000003000000F771D98DE33826C00000000000004440F771D98DE33826C000000000008051400000000000805140F771D98DE33826C0 #693a|0103000060E61000000100000005000000EA95B20C71C851C02B1895D409204540000000000000F03F9CC420B072C851C0C7BAB88D062045400000000000000840B1506B9A77C851C08E75711B0D20454000000000000000C0FF21FDF675C851C0F2D24D6210204540000000000000F03FEA95B20C71C851C02B1895D4092045400000000000000000 #693b|0103000060E61000000100000007000000EA95B20C71C851C0AA605452272045400000000000000000386744696FC851C04703780B2420454000000000000034408638D6C56DC851C04703780B2420454000000000000034C08638D6C56DC851C0E3A59BC42020454000000000000014408638D6C56DC851C08048BF7D1D20454000000000000010409CC420B072C851C04703780B242045400000000000001840EA95B20C71C851C0AA605452272045400000000000003E40 #694 ERROR: Shell is not a line #695 ERROR: First argument must be a LINESTRING #696|010F000080060000000103000080010000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000010300008001000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000001030000800100000005000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000001030000800100000005000000000000000000F03F000000000000F03F0000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F0000000000000000000000000000F03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F03F0000000000000000010300008001000000050000000000000000000000000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000F03F00000000000000000000000000000000000000000000F03F00000000000000000103000080010000000500000000000000000000000000000000000000000000000000F03F000000000000F03F0000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F0000000000000000000000000000F03F000000000000F03F00000000000000000000000000000000000000000000F03F #720|MULTIPOINT(-1113194.91 4838471.4,-1113194.91 7326837.72,-1113194.91 11028513.63,556597.45 4838471.4,556597.45 7326837.72,556597.45 11028513.63,2226389.82 4838471.4,2226389.82 7326837.72,2226389.82 11028513.63,3896182.18 4838471.4,3896182.18 7326837.72,3896182.18 11028513.63,5565974.54 4838471.4,5565974.54 7326837.72,5565974.54 11028513.63) #723|0101000020E61000006284F068E33826C00000000000004440 #723|0107000020E610000000000000 #723|0107000020E610000000000000 #723|0101000020E61000006284F068E33826C00100000000804B40 #804|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">0 0</gml:pos></gml:Point> #845|t #834|GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(10 0,10 10)) #884|1|f #884|2|t #938| #668|BOX(10 2,14 2) #711| #712|t #756.1|t|t #1023|t #1023.a|f #1023.b|t #1060|FFFFFFFF2 #1273|t #1273.1|t ERROR: stats for "t.g" do not exist ERROR: stats for "t.g" do not exist WARNING: ST_Estimated_Extent signature was deprecated in 2.1.0. Please use ST_EstimatedExtent ERROR: stats for "t.g" do not exist ERROR: stats for "t.g" do not exist #877.4|-10.15000|20.15000|-50.40000|30.40000 #877.5|-10.15000|20.15000|-50.40000|30.40000 #1292|GEOMETRYCOLLECTION(POINT(180 90),POLYGON((140 50,150 50,180 50,140 50),(140 60,150 60,180 60,140 60))) NOTICE: Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY NOTICE: Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY #1292.1|POINT(180 85)|POINT(-175 90) <#1320> #1320.geog.1|MULTIPOLYGON|4326 #1320.geom.1|MULTIPOLYGON|4326 ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) #1320.geog.2|MULTIPOLYGON|4326 #1320.geom.2|MULTIPOLYGON|4326 ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) #1320.geog.3|MULTIPOLYGON|4326 #1320.geom.3|MULTIPOLYGON|4326 </#1320> #1344|25 #1385| #657.1|-166.78 #657.2|10.00 #657.3|t #1305.1|POINT(10 10) #1305.2|t #1305.3|t ERROR: MultiPolygon cannot contain MultiPoint element at character 8 ERROR: MultiLineString cannot contain MultiPoint element at character 8 ERROR: MultiPoint cannot contain MultiPoint element at character 8 ERROR: CompoundCurve cannot contain MultiPoint element at character 8 ERROR: MultiCurve cannot contain MultiPoint element at character 8 ERROR: MultiSurface cannot contain MultiPoint element at character 8 #1453.1|t #1453.2|f #1454|t #1414|CURVEPOLYGON Z EMPTY #1478|01040000200100000000000000 #745|GEOMETRYCOLLECTION(POLYGON((-72 42 1,-70 43 1,-71 41 1,-72 42 1))) #1450|POINT|POLYGON #1482|4326 #852.1|1|f|f #852.1|2|f|f #852.2|1|t|t #852.2|2|t|t #1489|MULTIPOINT EMPTY|0|MULTILINESTRING EMPTY|0|MULTIPOLYGON EMPTY|0|GEOMETRYCOLLECTION EMPTY|0 ERROR: AddToPROJ4SRSCache: could not parse proj4 string '' #1038| #1042|2 #1170|90 #1264|t #1398a|POINT(-119.093153 45.632669) #1398b|POINT(-160.137654 77.091608) #1543|MULTILINESTRING((0 0,10 0,10 10,0 0),(0 0))|POLYGON((0 0,10 10,10 0,0 0)) #1578|f|f #1580.1|Point[BS] ERROR: transform: couldn't project point (180 90 0): tolerance condition error (-20) #1580.3|Point[BS] #1596.1|public.road_pg.roads_geom SRID:3395 TYPE:POINT DIMS:2 ERROR: invalid SRID: 330000 not found in spatial_ref_sys #1596.3|3395 ERROR: invalid SRID: 999000 not found in spatial_ref_sys #1596.5|3395 NOTICE: SRID value -1 converted to the officially unknown SRID value 0 #1596.6|public.road_pg.roads_geom SRID changed to 0 #1596.7|0 #1596|Point[BGS] #1695|MULTIPOLYGON EMPTY #1697.1|0 #1697.2|0 #1697.3|1024 #1734.1|1026 #1755|01010000A0E6100000000000000040554000000000008041400000000000000000 #1776|POLYGON((0 0,10 0,10 10,0 0))|POLYGON((0 0,10 0,10 10,0 0)) #1780|t #1791|4.7 ERROR: ST_Segmentize: invalid max_distance 0 (must be >= 0) ERROR: invalid GML representation #1957|inf #1978|3.1413 #1996|{"type":"Point","coordinates":[]} #2001|POLYGON((0 0,0 1,1 1,0 0)) #2028|TIN(((0 0,0 1,1 1,0 0))) #2035a|6 #2035b|6 #2048|1|f|f #2048|2|t|t #2048|3|f|f #2112a|0|LINESTRING(2.5 2.5 1,2.5 2.5 1) #2112b|1|LINESTRING(1 1 1,1 0 1) #2108|SRID=3395;POINTM EMPTY #2117|SRID=3395;POINTM EMPTY #2110.1|f #2110.2|t #2110.3|t #2145|6792004 ���������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/geography_expected�������������������������������������������0000644�0000000�0000000�00000001060�12142775451�022267� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������geog_distance_cached_1a|t geog_distance_cached_1b|t geog_distance_cached_1c|t geog_distance_cached_1e|t geog_distance_cached_1f|t geog_distance_cached_1g|t geog_distance_cached_1h|t geog_dithin_cached_1a|t geog_dithin_cached_1b|t geog_dithin_cached_1c|t geog_dithin_cached_2a|f geog_dithin_cached_2b|f geog_dithin_cached_2c|f geog_dithin_cached_3a|t geog_dithin_cached_3b|t geog_dithin_cached_3c|t geog_precision_savffir|0|0 geog_precision_savffir|0|0 geog_precision_savffir|0|0 geog_precision_savffir|0|0 geog_precision_pazafir|0|0 geog_precision_pazafir|0|0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/regress_ogc_expected�����������������������������������������0000644�0000000�0000000�00000003573�12142775451�022617� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������buffer|POLYGON((1 0,0.707107 -0.707107,0 -1,-0.707107 -0.707107,-1 0,-0.707107 0.707107,0 1,0.707107 0.707107,1 0)) geomunion|MULTIPOINT(0 0,1 1) convexhull|POLYGON((0 0,0 10,10 10,10 0,0 0)) relate|F0FFFF102 relate|t relate|f disjoint|f touches|t intersects|t crosses|f crosses|t within100|t within101|f within102|f within103|f within104|f within105|t within106|t disjoint100|f disjoint101|f disjoint102|t disjoint103|f disjoint104|t disjoint105|f disjoint106|t disjoint150|f disjoint151|f disjoint152|t disjoint153|f disjoint154|t disjoint155|f disjoint156|t intersects100|t intersects101|t intersects102|f intersects103|t intersects104|f intersects105|t intersects106|f intersects150|t intersects151|t intersects152|f intersects153|t intersects154|f intersects155|t intersects156|f contains100|t contains101|f contains102|f contains103|f contains104|f contains105|t contains106|t within119|f within120|f contains110|t contains111|f within130|t within131|f overlaps|f isvalid|t NOTICE: Self-intersection isvalid|f isvalid|t intersection|POINT(-0 -0) difference|MULTILINESTRING((0 10,0 2),(0 -2,0 -10)) boundary|MULTILINESTRING((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2)) symdifference|GEOMETRYCOLLECTION(LINESTRING(2 2,4 4),LINESTRING(10 10,20 20),POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,2 4,2 2,4 2,4 4))) issimple|t equals|t pointonsurface|t centroid|POINT(5.08333333333333 5.08333333333333) exteriorring|LINESTRING(52 18,66 23,73 9,48 6,52 18) polygonize_garray|GEOMETRYCOLLECTION EMPTY polygonize_garray|POLYGON((10 0,0 0,0 10,10 10,10 0)) linemerge149|LINESTRING(-5 -5,0 0,1 1,4 4) intersects|f ST_GeometryN|LINESTRING(0 0,1 1) ST_NumGeometries|1 ST_Union1|POLYGON((0 0,0 1,0.5 1,0.5 1.5,1.5 1.5,1.5 0.5,1 0.5,1 0,0 0)) ST_StartPoint1|POINT(0 0) ST_EndPoint1|POINT(2 2) ST_PointN1|POINT(1 1) ST_PointN2|POINT(2 2) ST_PointN3| ST_PointN4| ST_PointN5|POINT(0 0) ST_PointN6| ST_Buffer(empty)|POLYGON EMPTY �������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/measures_expected��������������������������������������������0000644�0000000�0000000�00000004454�12142775451�022140� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������113|291 114|140 115|140 116|4.24264068711929 117|4.24264068711929 118|5.19615242270663 134|0 135|13 136|13 dist|1|1 #1502|t st_shortestline_134|LINESTRING(1 2,1 2) st_shortestline_135|LINESTRING(5 0,10 12) st_shortestline_136|LINESTRING(0 0,5 12) st_shortestline_dist|LINESTRING(10 0,11 0)|LINESTRING(11 0,10 0) st_maxdistance_134|0 st_maxdistance_135|13 st_maxdistance_136|13 st_maxdistance_dist|22.3606797749979|22.3606797749979 st_longestline_134|LINESTRING(1 2,1 2) st_longestline_135|LINESTRING(5 0,10 12) st_longestline_136|LINESTRING(0 0,5 12) st_longestline_dist|LINESTRING(0 0,20 10)|LINESTRING(20 10,0 0) distancetest1|1|50|LINESTRING(17 18,17 19)|LINESTRING(17 19,17 18)|LINESTRING(29 39,-1 -1)|LINESTRING(-1 -1,29 39) distancetest2|0|50|0.0000000000|0.0000000000|0.0000000000|0.0000000000|LINESTRING(-40 -20,-10 20)|LINESTRING(-10 20,-40 -20) distancepoly1|1|50|LINESTRING(17 18,17 19)|LINESTRING(17 19,17 18)|LINESTRING(29 39,-1 -1)|LINESTRING(-1 -1,29 39) distancepoly2|0|26.1725046566048|LINESTRING(17 14,17 14)|LINESTRING(17 14,17 14)|LINESTRING(17 18,-1 -1)|LINESTRING(-1 -1,17 18) distancepoly3|0|26.9072480941474|LINESTRING(17 19,17 19)|LINESTRING(17 19,17 19)|LINESTRING(17 19,-1 -1)|LINESTRING(-1 -1,17 19) distancepoly4|0|28.3196045170126|LINESTRING(16 19,16 19)|LINESTRING(16 19,16 19)|LINESTRING(18 20,-1 -1)|LINESTRING(-1 -1,18 20) distancepoly5|0|26.1725046566048|LINESTRING(17 12,17 12)|LINESTRING(17 12,17 12)|LINESTRING(17 18,-1 -1)|LINESTRING(-1 -1,17 18) distancepoly6|0|32.5269119345812|LINESTRING(2 2,2 2)|LINESTRING(2 2,2 2)|LINESTRING(2 2,25 25)|LINESTRING(25 25,2 2) 3dDistancetest1|6.40312423743285|6.40312423743285|f|f|LINESTRING(1 1 1,3 2 7)|POINT(1 1 1)|LINESTRING(1 1 1,3 2 7) 3dDistancetest2|0|1.73205080756888|t|t|LINESTRING(1 1 1,1 1 1)|POINT(1 1 1)|LINESTRING(1 1 1,0 0 0) 3dDistancetest3|4.09994192757944|6.48074069840786|t|f|LINESTRING(1 1 1,0.61904761904762 -0.19047619047619 4.90476190476191)|POINT(1 1 1)|LINESTRING(1 1 1,5 2 6) 3dDistancetest4|2|10.0498756211209|t|f|LINESTRING(1 1 3,1 1 1)|POINT(1 1 3)|LINESTRING(5 7 8,1 1 1) 3dDistancetest5|2|10|t|f|LINESTRING(5 0 5,5 2 5)|POINT(5 0 5)|LINESTRING(11 0 5,5 0 13) 3dDistancetest6|0 emptyPolyArea|0 emptyLineArea|0 emptyPointArea|0 emptyMultiPolyArea|0 emptyMultiLineArea|0 emptyMultiPointArea|0 emptyCollectionArea|0 spheroidLength1|85204.52077 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/legacy.sql���������������������������������������������������0000644�0000000�0000000�00000011375�12142775451�020475� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- These tests serve the purpose of ensuring compatibility with -- old versions of postgis users. -- -- Their use rely on loading the legacy.sql script. -- This file also serves as a testcase for uninstall_legacy.sql -- SET postgis.backend = 'sfcgal'; SET client_min_messages TO WARNING; \i 00-regress-install/share/contrib/postgis/legacy.sql INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4326,'EPSG',4326,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); SELECT 'Starting up MapServer/Geoserver tests...'; -- Set up the data table SELECT 'Setting up the data table...'; CREATE TABLE public.wmstest ( id INTEGER ); SELECT AddGeometryColumn( 'wmstest', 'pt', 4326, 'POLYGON', 2 ); INSERT INTO wmstest SELECT lon * 100 + lat AS id, st_setsrid(st_buffer(st_makepoint(lon, lat),1.0),4326) AS pt FROM (select lon, generate_series(-80,80, 5) AS lat FROM (SELECT generate_series(-175, 175, 5) AS lon) AS sq1) AS sq2; ALTER TABLE wmstest add PRIMARY KEY ( id ); CREATE INDEX wmstest_geomidx ON wmstest using gist ( pt ); -- Geoserver 2.0 NG tests SELECT 'Running Geoserver 2.0 NG tests...'; -- Run a Geoserver 2.0 NG metadata query SELECT 'Geoserver1', TYPE FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; SELECT 'Geoserver2', SRID FROM GEOMETRY_COLUMNS WHERE F_TABLE_SCHEMA = 'public' AND F_TABLE_NAME = 'wmstest' AND F_GEOMETRY_COLUMN = 'pt'; -- Run a Geoserver 2.0 NG WMS query SELECT 'Geoserver3', "id",substr(encode(asBinary(force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-6.58216065979069 -0.7685569763184591, -6.58216065979069 0.911225433349509, -3.050569931030911 0.911225433349509, -3.050569931030911 -0.7685569763184591, -6.58216065979069 -0.7685569763184591))', 4326); -- Run a Geoserver 2.0 NG KML query SELECT 'Geoserver4', count(*) FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver5', "id",substr(encode(asBinary(force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-1.504017942347938 24.0332272532341, -1.504017942347938 25.99364254836741, 1.736833353559741 25.99364254836741, 1.736833353559741 24.0332272532341, -1.504017942347938 24.0332272532341))', 4326); SELECT 'Geoserver6', "id",substr(encode(asBinary(force_2d("pt"),'XDR'),'base64'),0,16) as "pt" FROM "public"."wmstest" WHERE "pt" && GeomFromText('POLYGON ((-1.507182836191598 24.031312785172446, -1.507182836191598 25.995557016429064, 1.7399982474034008 25.995557016429064, 1.7399982474034008 24.031312785172446, -1.507182836191598 24.031312785172446))', 4326); -- MapServer 5.4 tests select 'MapServer1', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer2', "id",substr(encode(AsBinary(force_collection(force_2d("pt")),'NDR'),'base64'),0,16) as geom,"id" from wmstest where pt && GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- MapServer 5.6 tests select * from wmstest where false limit 0; select 'MapServer3', attname from pg_attribute, pg_constraint, pg_class where pg_constraint.conrelid = pg_class.oid and pg_class.oid = pg_attribute.attrelid and pg_constraint.contype = 'p' and pg_constraint.conkey[1] = pg_attribute.attnum and pg_class.relname = 'wmstest' and pg_table_is_visible(pg_class.oid) and pg_constraint.conkey[2] is null; select 'MapServer4', "id",substr(encode(AsBinary(force_collection(force_2d("pt")),'NDR'),'hex'),0,16) as geom,"id" from wmstest where pt && GeomFromText('POLYGON((-98.5 32,-98.5 39,-91.5 39,-91.5 32,-98.5 32))',find_srid('','wmstest','pt')); -- Drop the data table SELECT 'Removing the data table...'; DROP TABLE wmstest; DELETE FROM geometry_columns WHERE f_table_name = 'wmstest' AND f_table_schema = 'public'; SELECT 'Done.'; -- test #1869 ST_AsBinary is not unique -- SELECT 1869 As ticket_id, ST_AsText(ST_AsBinary('POINT(1 2)')); DELETE FROM spatial_ref_sys WHERE SRID = '4326'; \i 00-regress-install/share/contrib/postgis/uninstall_legacy.sql �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/empty.sql����������������������������������������������������0000644�0000000�0000000�00000015017�12142775451�020364� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET postgis.backend = 'sfcgal'; -- ST_SnapToGrid SELECT 'T1.1', ST_AsEWKT(ST_SnapToGrid('POINT EMPTY', 1)); SELECT 'T1.2', ST_AsEWKT(ST_SnapToGrid('LINESTRING EMPTY', 1)); SELECT 'T1.3', ST_AsEWKT(ST_SnapToGrid('SRID=4326;POLYGON EMPTY', 1)); -- ST_Buffer SELECT 'T2.1', ST_AsEWKT(ST_Buffer('SRID=4326;POINT EMPTY', 0)); SELECT 'T2.2', ST_AsEWKT(ST_Buffer('SRID=4326;LINESTRING EMPTY', 0)); SELECT 'T2.3', ST_AsEWKT(ST_Buffer('SRID=4326;MULTIPOLYGON EMPTY', 0)); WITH b as ( SELECT ST_Buffer('SRID=4326;MULTIPOINT EMPTY', 1) as g ) SELECT 'T2.4', ST_Srid(g), GeometryType(g) from b; -- ST_AsGML (output may need some tweaking) SELECT 'T3.1', ST_AsGML('POINT EMPTY'); SELECT 'T3.2', ST_AsGML('LINESTRING EMPTY'); SELECT 'T3.3', ST_AsGML('POLYGON EMPTY'); SELECT 'T3.4', ST_AsGML('MULTIPOLYGON EMPTY'); SELECT 'T3.5', ST_AsGML('MULTILINESTRING EMPTY'); SELECT 'T3.6', ST_AsGML('GEOMETRYCOLLECTION EMPTY'); SELECT 'T3.7', ST_AsGML(3,'POINT EMPTY'::geometry); SELECT 'T3.8', ST_AsGML(3,'LINESTRING EMPTY'::geometry); SELECT 'T3.9', ST_AsGML(3,'POLYGON EMPTY'::geometry); SELECT 'T3.10', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry); SELECT 'T3.11', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry); SELECT 'T3.12', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry); SELECT 'T3.13', ST_AsGML(3,'POINT EMPTY'::geometry); SELECT 'T3.14', ST_AsGML(3,'LINESTRING EMPTY'::geometry); SELECT 'T3.15', ST_AsGML(3,'POLYGON EMPTY'::geometry); SELECT 'T3.16', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry); SELECT 'T3.17', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry); SELECT 'T3.18', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry); -- See http://trac.osgeo.org/postgis/wiki/DevWikiEmptyGeometry WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry, 120 as tolerance ) SELECT 'ST_Buffer(empty, tolerance) == empty', ST_Buffer(empty, tolerance) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Union(geometry, empty) == geometry', ST_Union(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Union(empty, empty) == empty', ST_Union(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Intersection(geometry, empty) == geometry', ST_Intersection(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Intersection(empty, empty) == empty', ST_Intersection(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Difference(geometry, empty) == geometry', ST_Difference(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Difference(empty, geometry) == empty', ST_Difference(empty, geometry) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Distance(geometry, empty) == NULL', ST_Distance(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry, 120 as tolerance ) SELECT 'ST_DWithin(geometry, empty, tolerance) == FALSE', ST_DWithin(geometry, empty, tolerance) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Within(geometry, empty) == FALSE', ST_Within(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Contains(empty, geometry) == FALSE', ST_Contains(empty, geometry) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Within(empty, geometry) == FALSE', ST_Within(empty, geometry) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Contains(empty, empty) == FALSE', ST_Contains(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Intersects(geometry, empty) == FALSE', ST_Intersects(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Intersects(empty, empty) == FALSE', ST_Intersects(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Disjoint(empty, empty) == TRUE', ST_Disjoint(empty, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry ) SELECT 'ST_Disjoint(geometry, empty) == TRUE', ST_Disjoint(geometry, empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty1, 'POINT Z EMPTY'::geometry as empty2 ) SELECT 'ST_Equals(empty1, empty2) == TRUE', ST_Equals(empty1, empty2) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_IsSimple(empty) == TRUE', ST_IsSimple(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_IsValid(empty) == TRUE', ST_IsValid(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_NumGeometries(empty) == 0', ST_NumGeometries(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_NRings(empty) == 0', ST_NRings(empty) FROM inp; WITH inp AS (SELECT 'LINESTRING EMPTY'::geometry as empty ) SELECT 'ST_NumPoints(empty) == 0', ST_NumPoints(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_NPoints(empty) == 0', ST_NPoints(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 1 as n ) SELECT 'ST_GeometryN(empty, n) == empty', ST_GeometryN(empty, n) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_ExteriorRing(empty) == empty', ST_ExteriorRing(empty) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty, 1 as n ) SELECT 'ST_InteriorRingN(empty, n) == NULL', ST_InteriorRingN(empty, n) FROM inp; WITH inp AS (SELECT 'POLYGON EMPTY'::geometry as empty ) SELECT 'ST_Area(empty) == 0', ST_Area(empty) FROM inp; WITH inp AS (SELECT 'LINESTRING EMPTY'::geometry as empty ) SELECT 'ST_Length(empty) == 0', ST_Length(empty) FROM inp; -- Operators -- same box, see http://trac.osgeo.org/postgis/ticket/1453 SELECT '~=', 'POINT EMPTY'::geometry ~= 'POINT EMPTY'::geometry; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/regress.sql��������������������������������������������������0000644�0000000�0000000�00000043740�12143373606�020701� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET postgis.backend = 'sfcgal'; --- regression test for postGIS --- assume datatypes already defined --- basic datatypes (correct) select '1',ST_asewkt('POINT( 1 2 )'::GEOMETRY) as geom; select '2',ST_asewkt('POINT( 1 2 3)'::GEOMETRY) as geom; select '3',ST_asewkt('LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4)'::GEOMETRY) as geom; select '4',ST_asewkt('LINESTRING( 0 0 0 , 1 1 1 , 2 2 2 , 3 3 3, 4 4 4)'::GEOMETRY) as geom; select '5',ST_asewkt('LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15)'::GEOMETRY) as geom; select '6',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0) )'::GEOMETRY) as geom; select '7',ST_asewkt('POLYGON( (0 0 1 , 10 0 1, 10 10 1, 0 10 1, 0 0 1) )'::GEOMETRY) as geom; select '8',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) )'::GEOMETRY) as geom; select '9',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) )'::GEOMETRY) as geom; select '10',ST_asewkt('POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1) )'::GEOMETRY) as geom; select '11',ST_asewkt('POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) )'::GEOMETRY) as geom; select '12',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 ))'::GEOMETRY); select '13',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 3))'::GEOMETRY); select '14',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4))'::GEOMETRY); select '15',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))'::GEOMETRY); select '16',ST_asewkt('GEOMETRYCOLLECTION(POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1) ))'::GEOMETRY); select '17',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),POINT( 1 2 3) )'::GEOMETRY); select '18',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),POINT( 1 2 3) )'::GEOMETRY); select '19',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 ),LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4) )'::GEOMETRY); select '20',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0 ),POINT( 1 2 3),LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15) )'::GEOMETRY); select '21',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0 ),POINT( 1 2 3),LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),POLYGON( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0) ) )'::GEOMETRY); select '22',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),POINT( 1 2 3),POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) )'::GEOMETRY); select '23',ST_asewkt('MULTIPOINT( 1 2)'::GEOMETRY) as geom; select '24',ST_asewkt('MULTIPOINT( 1 2 3)'::GEOMETRY) as geom; select '25',ST_asewkt('MULTIPOINT( 1 2, 3 4, 5 6)'::GEOMETRY) as geom; select '26',ST_asewkt('MULTIPOINT( 1 2 3, 5 6 7, 8 9 10, 11 12 13)'::GEOMETRY) as geom; select '27',ST_asewkt('MULTIPOINT( 1 2 0, 1 2 3, 4 5 0, 6 7 8)'::GEOMETRY) as geom; select '28',ST_asewkt('MULTIPOINT( 1 2 3,4 5 0)'::GEOMETRY) as geom; select '29',ST_asewkt('MULTILINESTRING( (0 0, 1 1, 2 2, 3 3 , 4 4) )'::GEOMETRY) as geom; select '30',ST_asewkt('MULTILINESTRING( (0 0, 1 1, 2 2, 3 3 , 4 4),(0 0, 1 1, 2 2, 3 3 , 4 4))'::GEOMETRY) as geom; select '31',ST_asewkt('MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15) )'::GEOMETRY) as geom; select '32',ST_asewkt('MULTILINESTRING( (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0))'::GEOMETRY) as geom; select '33',ST_asewkt('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)) )'::GEOMETRY) as geom; select '34',ST_asewkt('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) )'::GEOMETRY) as geom; select '35',ST_asewkt('MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) )'::GEOMETRY) as geom; select '36',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2))'::GEOMETRY); select '37',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2 3))'::GEOMETRY); select '38',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2 3, 5 6 7, 8 9 10, 11 12 13))'::GEOMETRY); select '39',ST_asewkt('GEOMETRYCOLLECTION(MULTILINESTRING( (0 0, 1 1, 2 2, 3 3 , 4 4) ))'::GEOMETRY); select '40',ST_asewkt('GEOMETRYCOLLECTION(MULTILINESTRING( (1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0)))'::GEOMETRY); select '41',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) ))'::GEOMETRY); select '42',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),MULTIPOINT( 1 2 3))'::GEOMETRY); select '43',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOINT( 1 2 0, 3 4 0, 5 6 0),POINT( 1 2 3))'::GEOMETRY); select '44',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 3),MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0) ))'::GEOMETRY); select '45',ST_asewkt('GEOMETRYCOLLECTION(MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0 , 4 4 0) ),POINT( 1 2 3))'::GEOMETRY); select '46',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 3), MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) ))'::GEOMETRY); select '47',ST_asewkt('GEOMETRYCOLLECTION(MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) ),MULTILINESTRING( (0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),(1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15) ),MULTIPOINT( 1 2 3, 5 6 7, 8 9 10, 11 12 13))'::GEOMETRY); select '48',ST_asewkt('MULTIPOINT( -1 -2 -3, 5.4 6.6 7.77, -5.4 -6.6 -7.77, 1e6 1e-6 -1e6, -1.3e-6 -1.4e-5 0)'::GEOMETRY) as geom; select '49', ST_asewkt('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 1) ))'::GEOMETRY) as geom; --- basic datatype (incorrect) select '50', 'POINT()'::GEOMETRY as geom; select '51', 'POINT(1)'::GEOMETRY as geom; select '52', 'POINT(,)'::GEOMETRY as geom; select '53', 'MULTIPOINT(,)'::GEOMETRY as geom; select '54', 'POINT(a b)'::GEOMETRY as geom; select '55', 'MULTIPOINT()'::GEOMETRY as geom; select '56', ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10) )'::GEOMETRY); select '57', ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7) )'::GEOMETRY); select '58', ST_asewkt('MULTILINESTRING((0 0, 1 1),(0 0, 1 1, 2 2,) )'::GEOMETRY); --- funny results select '59',ST_asewkt('POINT(1 2 3, 4 5 6)'::GEOMETRY); select '60',ST_asewkt('POINT(1 2 3 4 5 6 7)'::GEOMETRY); select '61',ST_asewkt('LINESTRING(1 1)'::GEOMETRY); select '62',regexp_replace(ST_asewkt('POINT( 1e700 0)'::GEOMETRY), E'(Infinity|1\.#INF)', 'inf'); select '63',regexp_replace(ST_asewkt('POINT( -1e700 0)'::GEOMETRY), E'(Infinity|1\.#INF)', 'inf'); --select '62',ST_asewkt('POINT( 1e700 0)'::GEOMETRY); --select '63',ST_asewkt('POINT( -1e700 0)'::GEOMETRY); select '64',ST_asewkt('MULTIPOINT(1 1, 2 2'::GEOMETRY); --- is_same() testing select '65','POINT(1 1)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; select '65a',ST_OrderingEquals('POINT(1 1)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; select '66','POINT(1 1 0)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; select '66a',ST_OrderingEquals('POINT(1 1 0)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; select '67','POINT(1 1 0)'::GEOMETRY ~= 'POINT(1 1 0)'::GEOMETRY as bool; select '67a',ST_OrderingEquals('POINT(1 1 0)'::GEOMETRY,'POINT(1 1 0)'::GEOMETRY) as bool; select '68','MULTIPOINT(1 1,2 2)'::GEOMETRY ~= 'MULTIPOINT(1 1,2 2)'::GEOMETRY as bool; select '68a',ST_OrderingEquals('MULTIPOINT(1 1,2 2)'::GEOMETRY,'MULTIPOINT(1 1,2 2)'::GEOMETRY) as bool; select '69','MULTIPOINT(2 2, 1 1)'::GEOMETRY ~= 'MULTIPOINT(1 1,2 2)'::GEOMETRY as bool; select '69a',ST_OrderingEquals('MULTIPOINT(2 2, 1 1)'::GEOMETRY,'MULTIPOINT(1 1,2 2)'::GEOMETRY) as bool; select '70','GEOMETRYCOLLECTION(POINT( 1 2 3),POINT(4 5 6))'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; select '70a',ST_OrderingEquals('GEOMETRYCOLLECTION(POINT( 1 2 3),POINT(4 5 6))'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; select '71','MULTIPOINT(4 5 6, 1 2 3)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; select '71a',ST_OrderingEquals('MULTIPOINT(4 5 6, 1 2 3)'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; select '72','MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; select '72a',ST_OrderingEquals('MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; select '73','MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(MULTIPOINT(1 2 3, 4 5 6))'::GEOMETRY as bool; select '73a',ST_OrderingEquals('MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY,'GEOMETRYCOLLECTION(MULTIPOINT(1 2 3, 4 5 6))'::GEOMETRY) as bool; select '74','LINESTRING(1 1,2 2)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; select '74a',ST_OrderingEquals('LINESTRING(1 1,2 2)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; select '75','LINESTRING(1 1, 2 2)'::GEOMETRY ~= 'LINESTRING(2 2, 1 1)'::GEOMETRY as bool; select '75a',ST_OrderingEquals('LINESTRING(1 1, 2 2)'::GEOMETRY,'LINESTRING(2 2, 1 1)'::GEOMETRY) as bool; select '76','LINESTRING(1 1, 2 2)'::GEOMETRY ~= 'LINESTRING(1 1, 2 2, 3 3)'::GEOMETRY as bool; select '76a',ST_OrderingEquals('LINESTRING(1 1, 2 2)'::GEOMETRY,'LINESTRING(1 1, 2 2, 3 3)'::GEOMETRY) as bool; --- operator testing (testing is on the BOUNDING BOX (2d), not the actual geometries) select '77','POINT(1 1)'::GEOMETRY &< 'POINT(1 1)'::GEOMETRY as bool; select '78','POINT(1 1)'::GEOMETRY &< 'POINT(2 1)'::GEOMETRY as bool; select '79','POINT(2 1)'::GEOMETRY &< 'POINT(1 1)'::GEOMETRY as bool; select '80','POINT(1 1)'::GEOMETRY << 'POINT(1 1)'::GEOMETRY as bool; select '81','POINT(1 1)'::GEOMETRY << 'POINT(2 1)'::GEOMETRY as bool; select '82','POINT(2 1)'::GEOMETRY << 'POINT(1 1)'::GEOMETRY as bool; select '83','POINT(1 1)'::GEOMETRY &> 'POINT(1 1)'::GEOMETRY as bool; select '84','POINT(1 1)'::GEOMETRY &> 'POINT(2 1)'::GEOMETRY as bool; select '85','POINT(2 1)'::GEOMETRY &> 'POINT(1 1)'::GEOMETRY as bool; select '86','POINT(1 1)'::GEOMETRY >> 'POINT(1 1)'::GEOMETRY as bool; select '87','POINT(1 1)'::GEOMETRY >> 'POINT(2 1)'::GEOMETRY as bool; select '88','POINT(2 1)'::GEOMETRY >> 'POINT(1 1)'::GEOMETRY as bool; -- overlap select '89','POINT(1 1)'::GEOMETRY && 'POINT(1 1)'::GEOMETRY as bool; select '90','POINT(1 1)'::GEOMETRY && 'POINT(2 2)'::GEOMETRY as bool; select '91','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1 1, 2 2)'::GEOMETRY as bool; select '92','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1.0001 1, 2 2)'::GEOMETRY as bool; select '93','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1 1.0001, 2 2)'::GEOMETRY as bool; select '94','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1 0, 2 2)'::GEOMETRY as bool; select '95','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(1.0001 0, 2 2)'::GEOMETRY as bool; select '96','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(0 1, 1 2)'::GEOMETRY as bool; select '97','MULTIPOINT(0 0, 1 1)'::GEOMETRY && 'MULTIPOINT(0 1.0001, 1 2)'::GEOMETRY as bool; --- contains select '98','MULTIPOINT(0 0, 10 10)'::GEOMETRY ~ 'MULTIPOINT(5 5, 7 7)'::GEOMETRY as bool; select '99','MULTIPOINT(5 5, 7 7)'::GEOMETRY ~ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '100','MULTIPOINT(0 0, 7 7)'::GEOMETRY ~ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '101','MULTIPOINT(-0.0001 0, 7 7)'::GEOMETRY ~ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; --- contained by select '102','MULTIPOINT(0 0, 10 10)'::GEOMETRY @ 'MULTIPOINT(5 5, 7 7)'::GEOMETRY as bool; select '103','MULTIPOINT(5 5, 7 7)'::GEOMETRY @ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '104','MULTIPOINT(0 0, 7 7)'::GEOMETRY @ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; select '105','MULTIPOINT(-0.0001 0, 7 7)'::GEOMETRY @ 'MULTIPOINT(0 0, 10 10)'::GEOMETRY as bool; --- function testing --- conversion function select '106',box3d('MULTIPOINT(0 0, 7 7)'::GEOMETRY) as bvol; -- box3d only type is only used for indexing -- NEVER use one yourself select '107',ST_AsEWKT(geometry('BOX3D(0 0 0, 7 7 7 )'::BOX3D)); --- debug function testing select '108',ST_NPoints('MULTIPOINT(0 0, 7 7)'::GEOMETRY) as value; select '109',ST_NPoints('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING( 1 1 , 2 2, 3 3))'::GEOMETRY) as value; select '110', ST_NRings('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY) as value; select '111', ST_mem_size(PostGIS_DropBBOX('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY)) as value; select '112',ST_NumGeometries('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING( 1 1 , 2 2, 3 3),MULTIPOINT(1 1, 2 2))'::GEOMETRY) as value; ---selection --- TOAST testing -- create a table with data that will be TOASTed (even after compression) create table TEST(a GEOMETRY, b GEOMETRY); \i regress_biginsert.sql ---test basic ops on this select '121',box3d(a) as box3d_a, box3d(b) as box3d_b from TEST; select '122',a <<b from TEST; select '123',a &<b from TEST; select '124',a >>b from TEST; select '125',a &>b from TEST; select '126',a ~= b from TEST; select '127',a @ b from TEST; select '128',a ~ b from TEST; select '129', ST_mem_size(PostGIS_DropBBOX(a)), ST_mem_size(PostGIS_DropBBOX(b)) from TEST; select '131', ST_X('POINT(1 2)'); select '132', ST_Y('POINT(1 2)'); select '133', ST_Z('POINT(1 2)'); select '133a', ST_Z('POINT(1 2 3)'); select '133b', ST_Z('POINTM(1 2 3)'); select '133c', ST_M('POINT(1 2)'); select '133d', ST_M('POINTM(1 2 4)'); select '133e', ST_M('POINT(1 2 4)'); select '137', box3d('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY)'::geometry); select '138', box3d('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT(0 0))'::geometry); select '139', ST_AsEWKT(ST_multi(ST_setsrid('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT(0 0))'::geometry, 2))); select '140', ST_AsEWKT(ST_multi(ST_setsrid('POINT(2 2)'::geometry, 3))); select '141', ST_AsEWKT(ST_multi(ST_setsrid('LINESTRING(2 2, 3 3)'::geometry, 4))); select '142', ST_AsEWKT(ST_multi(ST_setsrid('LINESTRING(2 2, 3 3)'::geometry, 5))); select '143', ST_AsEWKT(ST_multi(ST_setsrid('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'::geometry, 6))); select '143c1', ST_AsEWKT(ST_multi('CIRCULARSTRING(0 0, 1 1, 2 2)'::geometry)); select '144', ST_AsEWKT(ST_Force3DM('POINT(1 2 3)')); select '145', ST_AsEWKT(ST_Force3DZ('POINTM(1 2 3)')); select '146', ST_AsEWKT(ST_Force4D('POINTM(1 2 3)')); select '147', ST_AsEWKT(ST_Force4D('POINT(1 2 3)')); select '148', ST_AsText(ST_segmentize('LINESTRING(0 0, 10 0)'::geometry, 5)); select '149', ST_AsText(ST_segmentize('GEOMETRYCOLLECTION EMPTY'::geometry, 0.5)); select '150', ST_AsEWKT(ST_ForceCollection(ST_setsrid('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'::geometry, 6))); select '151', ST_MakeEnvelope(0, 0, 1, 1, 4326); select '152', ST_SRID(ST_MakeEnvelope(0, 0, 1, 1, 4326)); select '152.1', ST_SRID(ST_MakeEnvelope(0, 0, 1, 1)) = ST_SRID('POINT(0 0)'::geometry); select '152.2', ST_SRID(ST_SetSRID(ST_MakeEnvelope(0, 0, 1, 1), 4326)); select '153', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(POINT(0 0))',1)); select '154', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',1)); select '155', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0), POINT(1 1)))',1)); select '156', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)))',1)); select '157', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)))',2)); select '158', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)),LINESTRING(2 2, 3 3))',2)); select '159', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)),LINESTRING(2 2, 3 3))',3)); select '160', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), POINT(1 1)),LINESTRING(2 2, 3 3))',1)); select '161', ST_AsText(ST_CollectionExtract('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1), GEOMETRYCOLLECTION(POINT(1 1))),LINESTRING(2 2, 3 3))',2)); select '162', ST_MakeLine(ST_GeomFromText('POINT(-11.1111111 40)'),ST_GeomFromText('LINESTRING(-11.1111111 70,70 -11.1111111)')) As result; select '163', ST_AsEWKT('POLYGON((0 0 0, 1 0 0, 1 1 0, 0 1 0, 0 0 0))'); select '164', ST_AsEWKT('POLYGON((0 0 0, 1 0 0, 1 1 0, 0 1 0, 0 0 1))'); select '165', ST_AsEWKT('POLYGON((0 0 0, 1 0 0, 1 1 0, 0 1 0, 0 0.1 1))'); select '166', ST_AsText('POINT EMPTY'); select '167', ST_AsText('LINESTRING EMPTY'); select '168', ST_AsText('POLYGON EMPTY'); select '169', ST_AsText('CIRCULARSTRING EMPTY'); select '170', ST_AsText('COMPOUNDCURVE EMPTY'); select '171', ST_AsText('CURVEPOLYGON EMPTY'); select '172', ST_AsText('MULTIPOINT EMPTY'); select '173', ST_AsText('MULTILINESTRING EMPTY'); select '174', ST_AsText('MULTIPOLYGON EMPTY'); select '175', ST_AsText('TRIANGLE EMPTY'); select '176', ST_AsText('TIN EMPTY'); select '177', ST_AsText('POLYHEDRALSURFACE EMPTY'); select '178', ST_AsText('MULTISURFACE EMPTY'); select '179', ST_AsText('MULTICURVE EMPTY'); select '180', ST_AsText('GEOMETRYCOLLECTION EMPTY'); select '181', ST_AsText('GEOMETRYCOLLECTION(TRIANGLE EMPTY,TIN EMPTY)'); -- Drop test table DROP table test; ��������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/measures.sql�������������������������������������������������0000644�0000000�0000000�00000023336�12142775451�021055� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET postgis.backend = 'sfcgal'; select '113', ST_area2d('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY) as value; select '114', ST_perimeter2d('MULTIPOLYGON( ((0 0, 10 0, 10 10, 0 10, 0 0)),( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) ) ,( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7, 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) ) )'::GEOMETRY) as value; select '115', ST_3DPerimeter('MULTIPOLYGON( ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0)),( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0),(5 5 0, 7 5 0, 7 7 0, 5 7 0, 5 5 0) ) ,( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) )'::GEOMETRY) as value; select '116', ST_length2d('MULTILINESTRING((0 0, 1 1),(0 0, 1 1, 2 2) )'::GEOMETRY) as value; select '117', ST_3dlength('MULTILINESTRING((0 0, 1 1),(0 0, 1 1, 2 2) )'::GEOMETRY) as value; select '118', ST_3dlength('MULTILINESTRING((0 0 0, 1 1 1),(0 0 0, 1 1 1, 2 2 2) )'::GEOMETRY) as value; select '134', ST_Distance('POINT(1 2)', 'POINT(1 2)'); select '135', ST_Distance('POINT(5 0)', 'POINT(10 12)'); select '136', ST_Distance('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0)); -- postgis-users/2006-May/012174.html select 'dist', ST_Distance(a,b), ST_Distance(b,a) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 11 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; --#1502 SELECT '#1502', ST_Dwithin(a,b,0.0) from (SELECT 'LINESTRING(-97364 -97364, 9736.4 9736.4)'::geometry a, 'POINT(0 0)'::geometry b ) foo; --st_shortestline select 'st_shortestline_134', st_astext(st_shortestline('POINT(1 2)', 'POINT(1 2)')); select 'st_shortestline_135', st_astext(st_shortestline('POINT(5 0)', 'POINT(10 12)')); select 'st_shortestline_136', st_astext(st_shortestline('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0))); -- postgis-users/2006-May/012174.html select 'st_shortestline_dist', st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 12 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; --st_maxdistance select 'st_maxdistance_134', st_maxdistance('POINT(1 2)', 'POINT(1 2)'); select 'st_maxdistance_135', st_maxdistance('POINT(5 0)', 'POINT(10 12)'); select 'st_maxdistance_136', st_maxdistance('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0)); -- postgis-users/2006-May/012174.html select 'st_maxdistance_dist', st_maxdistance(a,b), st_maxdistance(b,a) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 11 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; --st_longestline select 'st_longestline_134', st_astext(st_longestline('POINT(1 2)', 'POINT(1 2)')); select 'st_longestline_135', st_astext(st_longestline('POINT(5 0)', 'POINT(10 12)')); select 'st_longestline_136', st_astext(st_longestline('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0))); -- postgis-users/2006-May/012174.html select 'st_longestline_dist', st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry as a, 'POLYGON((11 0, 11 10, 20 10, 20 0, 11 0), (15 5, 15 8, 17 8, 17 5, 15 5))'::geometry as b ) as foo; select 'distancetest1', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('MULTILINESTRING((17 16, 16 17, 17 18, 17 17, 17 16), (28 35,29 39, 30 35))') as a, ST_GeomFromText('MULTIPOLYGON(((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14)),((33 35,33 40, 35 40, 35 35, 33 35)))') as b ) as foo; select 'distancetest2', ST_Distance(a, b), st_maxdistance(a, b), round(st_x(st_startpoint(st_shortestline(a,b)))::numeric, 10), round(st_y(st_startpoint(st_shortestline(a,b)))::numeric, 10), round(st_x(st_endpoint(st_shortestline(a,b)))::numeric, 10), round(st_y(st_endpoint(st_shortestline(a,b)))::numeric, 10), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('LINESTRING(-40 -20 , 4 2)') as a, ST_GeomFromText('LINESTRING(-10 20, 1 -2)') as b ) as foo; select 'distancepoly1', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('MULTIPOLYGON(((17 16, 16 17, 17 18, 17 17, 17 16)), ((28 35,29 39, 30 35, 28 35)))') as a, ST_GeomFromText('MULTIPOLYGON(((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14)),((33 35,33 40, 35 40, 35 35, 33 35)))') as b ) as foo; select 'distancepoly2', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 14, 16 17, 17 18, 17 17, 17 14))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly3', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 16, 16 17, 17 19, 17 17, 17 16))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly4', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 16, 16 17, 16 20, 18 20, 18 17, 17 16))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly5', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((17 12, 16 17, 17 18, 17 17, 17 12))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; select 'distancepoly6', ST_Distance(a, b), st_maxdistance(a, b), st_astext(st_shortestline(a,b)), st_astext(st_shortestline(b,a)), st_astext(st_longestline(a,b)), st_astext(st_longestline(b,a)) from ( select ST_GeomFromText('POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))') as a, ST_GeomFromText('POLYGON((-1 -1, -1 25, 25 25, 25 -1, -1 -1), (14 14,14 19,19 19,19 14,14 14))') as b ) as foo; --3D Distance functions SELECT '3dDistancetest1', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'POINT(3 2 7)'::geometry as b ) as foo; SELECT '3dDistancetest2', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'LINESTRING(0 0 0, 2 2 2)'::geometry as b ) as foo; SELECT '3dDistancetest3', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_SnapToGrid(ST_3DShortestline(a,b), 1e-14)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'LINESTRING(5 2 6, -3 -2 4)'::geometry as b ) as foo; SELECT '3dDistancetest4', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'LINESTRING(1 1 3, 5 7 8)'::geometry as a, 'POINT(1 1 1)'::geometry as b ) as foo; SELECT '3dDistancetest5', ST_3DDistance(a,b), ST_3DMaxDistance(a,b), ST_3DDWithin(a,b,5), ST_3DDFullyWithin(a,b,5), ST_ASEWKT(ST_3DShortestline(a,b)), ST_ASEWKT(ST_3DClosestpoint(a,b)), ST_ASEWKT(ST_3DLongestline(a,b)) FROM ( SELECT 'LINESTRING(1 0 5, 11 0 5)'::geometry as a, 'LINESTRING(5 2 0, 5 2 10, 5 0 13)'::geometry as b ) as foo; SELECT '3dDistancetest6', ST_3DDistance(a,b) FROM ( SELECT 'LINESTRING(1 1 1 , 2 2 2)'::geometry as a, 'POLYGON((0 0 0, 2 2 2, 3 3 0, 0 0 0))'::geometry as b) as foo; -- Area of an empty polygon select 'emptyPolyArea', st_area('POLYGON EMPTY'); -- Area of an empty linestring select 'emptyLineArea', st_area('LINESTRING EMPTY'); -- Area of an empty point select 'emptyPointArea', st_area('POINT EMPTY'); -- Area of an empty multipolygon select 'emptyMultiPolyArea', st_area('MULTIPOLYGON EMPTY'); -- Area of an empty multilinestring select 'emptyMultiLineArea', st_area('MULTILINESTRING EMPTY'); -- Area of an empty multilipoint select 'emptyMultiPointArea', st_area('MULTIPOINT EMPTY'); -- Area of an empty collection select 'emptyCollectionArea', st_area('GEOMETRYCOLLECTION EMPTY'); -- select 'spheroidLength1', round(st_length_spheroid('MULTILINESTRING((-118.584 38.374,-118.583 38.5),(-71.05957 42.3589 , -71.061 43))'::geometry,'SPHEROID["GRS_1980",6378137,298.257222101]'::spheroid)::numeric,5); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/README�������������������������������������������������������0000644�0000000�0000000�00000003437�12142775451�017370� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������These regress/sfcgal directory contains several tests closely based on current regress one. Usually they should behave really the same (i.e with both backends) however some slightly differences beetween GEOS and SFCGAL backends are listed below: == sfcgal/ticket == 2.OBT: #11|1.31708901596544e-9 2.EXP: #11|0 => Numerical precision issue (We slightly modify the unit test to use SQL round) 18.OBT: ERROR: LWGEOM2SFCGAL: Unknown geometry type ! 18.EXP: #85|0 => Curves are not (yet) handled by SFCGAL (To be done in future SFCGAL release) 132.OBT: #834|GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(10 0,10 10)) 132.EXP: #834|GEOMETRYCOLLECTION(POINT(0 0 5),LINESTRING(10 10 5,10 0 5)) => For SFCGAL a 2D Intersection even with both 2D and 3D input data is assumed as 2D and so set output Z to 0 228.OBT: #1957|inf 228.EXP: #1957|1 => Initial line is OGC invalid (single point), so SFCGAL return infinite distance, which .. also make sense == sfcgal/regress_ogc == 65.OBT: intersection|POINT(-0 -0) 65.EXP: intersection|POINT(0 0) => No comment, except that the test itself could be sligthly rewrited == sfcgal/empty == 29.OBT: ST_Intersection(geometry, empty) == geometry|010700000000000000 29.EXP: ST_Intersection(geometry, empty) == geometry|010300000000000000 30.OBT: ST_Intersection(empty, empty) == empty|010700000000000000 30.EXP: ST_Intersection(empty, empty) == empty|010300000000000000 => SFCGAL don't consider keeping initial geometry type when intersection is null so a GEOMETRYCOLLECTION(EMPTY) is returned (for both tests) (maybe could be improved in SFCGAL) 33.OBT: ST_Distance(geometry, empty) == NULL|inf 33.EXP: ST_Distance(geometry, empty) == NULL| => SFCGAL returns an infinite distance to an empty geometry instead of null, which .. also make sense ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/legacy_expected����������������������������������������������0000644�0000000�0000000�00000001047�12142775451�021553� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Starting up MapServer/Geoserver tests... Setting up the data table... public.wmstest.pt SRID:4326 TYPE:POLYGON DIMS:2 ALTER TABLE Running Geoserver 2.0 NG tests... Geoserver1|POLYGON Geoserver2|4326 Geoserver3|-500|AAAAAAMAAAABAAA Geoserver4|1 Geoserver5|25|AAAAAAMAAAABAAA Geoserver6|25|AAAAAAMAAAABAAA MapServer1|id MapServer2|-9465|AQcAAAABAAAAAQM|-9465 MapServer2|-9460|AQcAAAABAAAAAQM|-9460 MapServer3|id MapServer4|-9465|010700000001000|-9465 MapServer4|-9460|010700000001000|-9460 Removing the data table... Done. 1869|POINT(1 2) BEGIN COMMIT �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/tickets.sql��������������������������������������������������0000644�0000000�0000000�00000160256�12143373606�020677� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- Regression tests that were filed as cases in bug tickets, -- referenced by bug number for historical interest. -- SET postgis.backend = 'sfcgal'; -- NOTE: some tests _require_ spatial_ref_sys entries. -- In particular, the GML output ones want auth_name and auth_srid too, -- so we provide one for EPSG:4326 DELETE FROM spatial_ref_sys; INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 32611, '+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs' ); INSERT INTO spatial_ref_sys ( auth_name, auth_srid, srid, proj4text ) VALUES ( 'EPSG', 4326, 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' ); INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 32602, '+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs ' ); INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 32702, '+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs ' ); INSERT INTO spatial_ref_sys ( srid, proj4text ) VALUES ( 3395, '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs ' ); INSERT INTO spatial_ref_sys (srid,proj4text) VALUES (32707,'+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs '); -- #2 -- SELECT '#2', ST_AsText(ST_Union(g)) FROM ( VALUES ('SRID=4326;MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)))'), ('SRID=4326;MULTIPOLYGON(((2 1,3 1,3 2,2 2,2 1)))') ) AS v(g); -- #11 -- SELECT '#11', round(ST_Distance (a.g, ST_Intersection(b.g, a.g))) AS distance FROM (SELECT '01020000000200000050E8303FC2E85141B017CFC05A825541000000E0C0E85141000000205C825541'::geometry AS g) a, (SELECT 'LINESTRING(4694792.35840419 5638508.89950758,4694793.20840419 5638506.34950758)'::geometry AS g) b; -- #21 -- SELECT '#21', ST_AsEWKT(ST_Locate_Along_Measure(g, 4566)) FROM ( VALUES (ST_GeomFromEWKT('SRID=31293;LINESTRINGM( 6193.76 5337404.95 4519, 6220.13 5337367.145 4566, 6240.889 5337337.383 4603 )')) ) AS v(g); -- #22 -- SELECT ST_Within(g, 'POLYGON((0 0,10 0,20 10,10 20,0 20,-10 10,0 0))') FROM (VALUES ('POLYGON((4 9,6 9,6 11,4 11,4 9))') ) AS v(g); -- #33 -- CREATE TABLE road_pg (ID INTEGER, NAME VARCHAR(32)); SELECT '#33', AddGeometryColumn( '', 'public', 'road_pg','roads_geom', 330000, 'POINT', 2 ); DROP TABLE road_pg; -- #44 -- SELECT '#44', ST_Relate(g1, g2, 'T12101212'), ST_Relate(g1, g2, 't12101212') FROM (VALUES ('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 'POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))') ) AS v(g1, g2); -- #58 -- SELECT '#58', round(ST_xmin(g)),round(ST_ymin(g)),round(ST_xmax(g)),round(ST_ymax(g)) FROM (SELECT ST_Envelope('CIRCULARSTRING(220268.439465645 150415.359530563,220227.333322076 150505.561285879,220227.353105332 150406.434743975)') as g) AS foo; -- #65 -- SELECT '#65', ST_AsGML(ST_GeometryFromText('CURVEPOLYGON(CIRCULARSTRING(4 2,3 -1.0,1 -1,-1.0 4,4 2))')); -- #66 -- SELECT '#66', ST_AsText((ST_Dump(ST_GeomFromEWKT('CIRCULARSTRING(0 0,1 1,2 2)'))).geom); -- #68 -- SELECT '#68a', ST_AsText(ST_Shift_Longitude(ST_GeomFromText('MULTIPOINT(1 3, 4 5)'))); SELECT '#68b', ST_AsText(ST_Shift_Longitude(ST_GeomFromText('CIRCULARSTRING(1 3, 4 5, 6 7)'))); -- #69 -- SELECT '#69', ST_AsText(ST_Translate(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),1,2)); -- #70 -- SELECT '#70', ST_NPoints(ST_LinetoCurve(ST_Buffer('POINT(1 2)',3))); -- #73 -- SELECT '#73', ST_AsText(ST_ForceCollection(ST_GeomFromEWKT('CIRCULARSTRING(1 1, 2 3, 4 5, 6 7, 5 6)'))); -- #80 -- SELECT '#80', ST_AsText(ST_Multi('MULTILINESTRING((0 0,1 1))')); -- #83 -- SELECT '#83', ST_AsText(ST_Multi(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'))); -- #85 -- SELECT '#85', ST_Distance(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'), ST_Point(220268, 150415)); -- #112 -- SELECT '#112', ST_AsText(ST_CurveToLine('GEOMETRYCOLLECTION(POINT(-10 50))'::geometry)); -- #113 -- SELECT '#113', ST_Locate_Along_Measure('LINESTRING(0 0 0, 1 1 1)', 0.5); -- #116 -- SELECT '#116', ST_AsText('010300000000000000'); -- #122 -- SELECT '#122', ST_AsText(ST_SnapToGrid(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'), 0.1)); -- #124 -- SELECT '#124a', ST_AsText(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,30 5),CIRCULARSTRING(30 5,34 56,67 89))')); SELECT '#124b', ST_AsText(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,30 6),CIRCULARSTRING(30 5,34 56,67 89))')); -- #145 -- SELECT '#145a', ST_Buffer(ST_GeomFromText('LINESTRING(-116.93414544665981 34.16033385105459,-116.87777514700957 34.10831080544884,-116.86972224705954 34.086748622072776,-116.9327074288116 34.08458099517253,-117.00216369088065 34.130329331330216,-117.00216369088065 34.130329331330216)', 4326), 0); SELECT '#145b', ST_Area(ST_Buffer(ST_GeomFromText('LINESTRING(-116.93414544665981 34.16033385105459,-116.87777514700957 34.10831080544884,-116.86972224705954 34.086748622072776,-116.9327074288116 34.08458099517253,-117.00216369088065 34.130329331330216,-117.00216369088065 34.130329331330216)', 4326), 0)); -- #146 -- SELECT '#146', ST_Distance(g1,g2), ST_Dwithin(g1,g2,0.01), ST_AsEWKT(g2) FROM (SELECT ST_geomFromEWKT('LINESTRING(1 2, 2 4)') As g1, ST_Collect(ST_GeomFromEWKT('LINESTRING(0 0, -1 -1)'), ST_GeomFromEWKT('MULTIPOINT(1 2,2 3)')) As g2) As foo; -- #156 -- SELECT '#156', ST_AsEWKT('0106000000010000000103000000010000000700000024213D12AA7BFD40945FF42576511941676A32F9017BFD40B1D67BEA7E511941C3E3C640DB7DFD4026CE38F4EE531941C91289C5A7EFD40017B8518E3531941646F1599AB7DFD409627F1F0AE521941355EBA49547CFD407B14AEC74652194123213D12AA7BFD40945FF42576511941'); -- #157 -- SELECT '#157', ST_GeometryType(g) As newname, GeometryType(g) as oldname FROM ( VALUES (ST_GeomFromText('POLYGON((-0.25 -1.25,-0.25 1.25,2.5 1.25,2.5 -1.25,-0.25 -1.25), (2.25 0,1.25 1,1.25 -1,2.25 0),(1 -1,1 1,0 0,1 -1))') ), ( ST_Point(1,2) ), ( ST_Buffer(ST_Point(1,2), 3) ), ( ST_LineToCurve(ST_Buffer(ST_Point(1,2), 3)) ) , ( ST_LineToCurve(ST_Boundary(ST_Buffer(ST_Point(1,2), 3))) ) ) AS v(g); -- #168 -- SELECT '#168', ST_NPoints(g), ST_AsText(g), ST_isValidReason(g) FROM ( VALUES ('01060000C00100000001030000C00100000003000000E3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFF'::geometry) ) AS v(g); -- #175 -- SELECT '#175', ST_AsEWKT(ST_GeomFromEWKT('SRID=26915;POINT(482020 4984378.)')); -- #178 -- SELECT '#178a', ST_XMin(ST_MakeBox2D(ST_Point(5, 5), ST_Point(0, 0))); SELECT '#178b', ST_XMax(ST_MakeBox2D(ST_Point(5, 5), ST_Point(0, 0))); -- #179 -- SELECT '#179a', ST_MakeLine(ARRAY[NULL,NULL,NULL,NULL]); SELECT '#179b', ST_MakeLine(ARRAY[NULL,NULL,NULL,NULL]); -- #183 -- SELECT '#183', ST_AsText(ST_SnapToGrid(ST_LineToCurve(ST_LineMerge(ST_Collect(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(0 0, 1 1, 1 0)')),ST_GeomFromEWKT('LINESTRING(1 0, 0 1)') ))), 1E-10)); -- #210 -- SELECT '#210a', ST_Union(ARRAY[NULL,NULL,NULL,NULL]) ; SELECT '#210b', ST_MakeLine(ARRAY[NULL,NULL,NULL,NULL]) ; -- #213 -- SELECT '#213', round(ST_Perimeter(ST_CurveToLine(ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)))')))); -- #234 -- SELECT '#234', ST_AsText(ST_GeomFromText('COMPOUNDCURVE( (0 0,1 1) )')); -- #239 -- --SELECT '#239', ST_AsSVG('010700002031BF0D0000000000'); -- #241 -- CREATE TABLE c ( the_geom GEOMETRY); INSERT INTO c SELECT ST_MakeLine(ST_Point(-10,40),ST_Point(40,-10)) As the_geom; INSERT INTO c SELECT ST_MakeLine(ST_Point(-10,40),ST_Point(40,-10)) As the_geom; SELECT '#241', sum(ST_LineCrossingDirection(the_geom, ST_GeomFromText('LINESTRING(1 2,3 4)'))) FROM c; DROP TABLE c; -- #254 -- SELECT '#254', ST_Segmentize(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'), 0.5); -- #259 -- SELECT '#259', ST_Distance(ST_GeographyFromText('SRID=4326;POLYGON EMPTY'), ST_GeographyFromText('SRID=4326;POINT(1 2)')); -- #260 -- SELECT '#260', round(ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-10 40)'), ST_GeographyFromText('SRID=4326;POINT(-10 55)'))); -- #261 -- SELECT '#261', ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-71.0325022849392 42.3793285830812)'),ST_GeographyFromText('SRID=4326;POLYGON((-71.0325022849392 42.3793285830812,-71.0325745928559 42.3793012556699,-71.0326708728343 42.3794450989722,-71.0326045866257 42.3794706688942,-71.0325022849392 42.3793285830812))')); -- #262 -- SELECT '#262', ST_AsText(pt.the_geog) As wkt_pt, ST_Covers(poly.the_geog, pt.the_geog) As geog, ST_Covers( ST_Transform(CAST(poly.the_geog As geometry),32611), ST_Transform(CAST(pt.the_geog As geometry),32611)) As utm, ST_Covers( CAST(poly.the_geog As geometry), CAST(pt.the_geog As geometry) ) As pca FROM (SELECT ST_GeographyFromText('SRID=4326;POLYGON((-119.5434 34.9438,-119.5437 34.9445,-119.5452 34.9442,-119.5434 34.9438))') As the_geog) As poly CROSS JOIN (VALUES ( ST_GeographyFromText('SRID=4326;POINT(-119.5434 34.9438)') ) , ( ST_GeographyFromText('SRID=4326;POINT(-119.5452 34.9442)') ) , ( ST_GeographyFromText('SRID=4326;POINT(-119.5434 34.9438)') ), ( ST_GeographyFromText('SRID=4326;POINT(-119.5438 34.9443)') ) ) As pt(the_geog); -- #263 -- SELECT '#263', ST_AsEWKT(geometry(geography(pt.the_geom))) As wkt, ST_Covers( ST_Transform(poly.the_geom,32611), ST_Transform(pt.the_geom,32611)) As utm, ST_Covers( poly.the_geom, pt.the_geom) As pca, ST_Covers(geometry(geography(poly.the_geom)), geometry(geography(pt.the_geom))) As gm_to_gg_gm_pca FROM (SELECT ST_GeomFromEWKT('SRID=4326;POLYGON((-119.5434 34.9438,-119.5437 34.9445,-119.5452 34.9442,-119.5434 34.9438))') As the_geom) As poly CROSS JOIN (VALUES ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5434 34.9438)') ) , ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5452 34.9442)') ) , ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5434 34.9438)') ), ( ST_GeomFromEWKT('SRID=4326;POINT(-119.5438 34.9443)') ) ) As pt(the_geom); -- #271 -- SELECT '#271', ST_Covers( 'POLYGON((-9.123456789 50,51 -11.123456789,-10.123456789 50,-9.123456789 50))'::geography, 'POINT(-10.123456789 50)'::geography ); -- #272 -- SELECT '#272', ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 , ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1 FROM (SELECT ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING(2.99 90.16,71 74,20 140,171 154)') As line2 ) As foo; -- #277 -- SELECT '#277', ST_AsGML(2, ST_GeomFromText('POINT(1 1e308)')); -- #299 -- SELECT '#299', round(ST_Y(geometry(ST_Intersection(ST_GeographyFromText('POINT(1.2456 2)'), ST_GeographyFromText('POINT(1.2456 2)'))))); -- #304 -- SELECT '#304'; CREATE OR REPLACE FUNCTION utmzone(geometry) RETURNS integer AS $BODY$ DECLARE geomgeog geometry; zone int; pref int; BEGIN geomgeog:= ST_Transform($1,4326); IF (ST_Y(geomgeog))>0 THEN pref:=32600; ELSE pref:=32700; END IF; zone:=floor((ST_X(geomgeog)+180)/6)+1; IF ( zone > 60 ) THEN zone := 60; END IF; RETURN zone+pref; END; $BODY$ LANGUAGE 'plpgsql' IMMUTABLE COST 100; CREATE TABLE utm_dots ( the_geog geography, utm_srid integer); INSERT INTO utm_dots SELECT geography(ST_SetSRID(ST_Point(i*10,j*10),4326)) As the_geog, utmzone(ST_SetSRID(ST_Point(i*10,j*10),4326)) As utm_srid FROM generate_series(-17,17) As i CROSS JOIN generate_series(-8,8) As j; SELECT ST_AsText(the_geog) as the_pt, utm_srid, ST_Area(ST_Buffer(the_geog,10)) As the_area, ST_Area(geography(ST_Transform(ST_Buffer(ST_Transform(geometry(the_geog),utm_srid),10),4326))) As geog_utm_area FROM utm_dots WHERE ST_Area(ST_Buffer(the_geog,10)) NOT between 307 and 315 LIMIT 10; SELECT '#304.a', Count(*) FROM utm_dots WHERE ST_DWithin(the_geog, 'POINT(0 0)'::geography, 3000000); CREATE INDEX utm_dots_gix ON utm_dots USING GIST (the_geog); SELECT '#304.b', Count(*) FROM utm_dots WHERE ST_DWithin(the_geog, 'POINT(0 0)'::geography, 300000); DROP FUNCTION utmzone(geometry); DROP TABLE utm_dots; -- #408 -- SELECT '#408', substring(st_isvalidreason('0105000020E0670000010000000102000020E06700000100000016DA52BA62A04141FFF3AD290B735241') from E'.*\\['); SELECT '#408.1', st_isvalid('01050000000100000001020000000100000000000000000000000000000000000000'); SELECT '#408.2', st_isvalidreason('01020000000100000000000000000000000000000000000000'); SELECT '#408.3', st_isvalid('0106000020BB0B000001000000010300000005000000D6000000000000C0F1A138410AD7A3103190524114AE4721F7A138410000000030905241713D0A57FAA1384185EB51982C9052417B14AE87FAA13841000000402A905241AE47E13AFBA1384114AE474128905241EC51B81EFDA138413D0AD7632690524152B81E85FFA13841D7A3707D2590524152B81E4500A23841713D0A072590524100000000FFA13841713D0AF724905241CDCCCCCCFFA13841CDCCCC0C249052419A99991901A238419A999919249052411F85EBD101A23841D7A3704D23905241E17A14AE02A23841A4703D3A2290524185EB51F808A23841000000D021905241E17A14EE0BA238413333335321905241666666A615A23841B81E85AB1F905241713D0AD710A23841B81E858B1E905241666666260CA2384114AE4731209052410AD7A37009A23841CDCCCCEC20905241AE47E13A06A23841EC51B87E219052419A9999D903A23841EC51B80E21905241EC51B8DE08A238418FC2F5681F905241666666660EA23841A4703D9A1D9052413D0AD7A30FA2384114AE47A11C9052413333333311A23841000000101C90524148E17A1414A23841333333931A905241EC51B81E1AA23841EC51B89E1890524185EB51381CA23841D7A370BD17905241295C8FC220A2384185EB51C816905241C3F528DC2BA238418FC2F5E814905241E17A14EE2EA23841EC51B8FE13905241AE47E1FA2BA23841EC51B8EE119052415C8FC2F52BA2384185EB51C810905241333333332EA2384114AE4701109052417B14AEC73BA238410AD7A3300D905241CDCCCCCC43A238417B14AE870B905241CDCCCC4C45A23841A4703D3A0B9052413D0AD7A34DA238411F85EB810A905241295C8F8250A23841CDCCCCBC09905241000000C053A238410AD7A36009905241A4703D0A5CA2384114AE4751099052418FC2F5A866A23841A4703D4A0A9052410000008069A2384114AE47B10A9052415C8FC2B573A23841B81E851B0D905241AE47E1FA76A23841666666C60D9052417B14AE077BA238411F85EB510E905241AE47E1FA7FA23841666666E60E9052415C8FC2358DA23841000000F010905241EC51B85E95A2384148E17A14119052417B14AE4795A23841CDCCCCCC1090524114AE47E18CA2384185EB51F80F90524148E17AD480A2384114AE47A10E9052413D0AD76383A23841713D0AF70C9052417B14AEC784A23841A4703D8A0C9052410000000086A23841A4703D0A0B9052411F85EB9187A23841B81E851B09905241F6285CCF86A2384100000010099052417B14AE4787A2384185EB51180890524114AE472186A23841CDCCCCFC079052410AD7A3B086A23841C3F5280C07905241333333B385A23841CDCCCC0C07905241000000407EA2384152B81E15079052419A9999197BA23841A4703D2A079052416666666673A2384114AE47710790524114AE47A16EA238413D0AD7F30690524114AE472170A238418FC2F5D8059052413D0AD72372A2384185EB511806905241A4703DCA71A23841D7A3707D05905241EC51B8DE7EA238411F85EBD104905241E17A14AE76A23841333333E30390524185EB51B875A23841713D0A47029052415C8FC2F576A23841D7A3703D029052419A99999976A2384114AE475101905241333333B378A23841EC51B83E019052410AD7A3307CA238410AD7A320019052418FC2F52885A23841295C8FD20090524148E17A9483A238416666664600905241295C8FC276A238411F85EB9100905241CDCCCC4C76A2384100000070FF8F5241AE47E13A76A2384133333343FF8F52417B14AE0783A23841D7A370FDFE8F5241E17A14AE81A23841C3F5283CFE8F52415C8FC2357DA2384114AE47A1FE8F5241CDCCCC8C7BA238415C8FC275FD8F524148E17AD47FA238417B14AE17FD8F5241000000807EA238413D0AD7A3FC8F5241713D0AD776A2384133333363FD8F5241CDCCCC8C73A2384152B81EF5FD8F5241E17A14AE70A2384114AE4711FE8F524185EB51B870A23841B81E852BFF8F524152B81E056CA2384114AE4731FF8F5241B81E856B6BA2384152B81E25FE8F5241AE47E13A69A23841E17A142EFE8F52419A99995962A238415C8FC275FE8F52415C8FC27562A238411F85EB710090524114AE47A15BA23841EC51B86E00905241EC51B85E5BA238419A9999E902905241295C8F025BA238417B14AE8704905241A4703D8A54A23841713D0A7704905241C3F5285C51A2384148E17A44049052418FC2F5E84CA23841A4703D4A049052410AD7A3304CA2384148E17A94049052419A9999994CA238413D0AD7F305905241AE47E1FA49A2384114AE471106905241EC51B85E49A23841AE47E1FA07905241AE47E13A43A238415C8FC255099052416666662644A23841D7A3707D0A9052415C8FC2F53FA23841CDCCCC2C0B90524185EB517839A2384185EB51380C90524152B81E4532A23841D7A370DD099052419A9999592FA2384152B81E4509905241D7A3707D2AA23841B81E857B089052415C8FC27526A238416666667608905241EC51B81E26A238417B14AE7707905241295C8F0226A23841F6285C1F07905241666666A61CA23841CDCCCC6C07905241713D0A1716A23841B81E856B07905241B81E85EB15A2384100000040079052411F85EB1108A2384114AE4741079052415C8FC23505A2384148E17AC40790524152B81E0506A23841EC51B84E09905241713D0A5707A23841AE47E10A0A905241EC51B81E12A2384152B81EA50890524152B81E4521A23841F6285CDF0890524148E17A1427A23841EC51B80E099052415C8FC2B52AA2384185EB5168099052413D0AD7E32FA23841CDCCCC3C0A9052413D0AD7A331A23841333333930A90524185EB51F833A238410AD7A3B00B9052411F85EB5135A23841EC51B8AE0B90524185EB513836A23841333333530D9052410000004030A238415C8FC2B50E905241000000802FA238415C8FC2750E9052410000008028A238419A9999B90E905241F6285C0F28A23841333333630E90524114AE47E123A23841333333730E905241D7A3707D23A2384152B81E750E9052410000008023A2384185EB51E80E905241D7A370BD1EA23841713D0A170F9052419A9999991EA23841333333830F9052419A9999991CA238411F85EB810F90524152B81E450EA2384152B81E750F9052417B14AE470AA23841EC51B89E0F905241B81E85EB05A238410AD7A3F00F905241D7A3707DFFA138417B14AEF71090524185EB51F8FDA138413D0AD72311905241295C8F02FAA13841EC51B83E11905241713D0A17EFA13841E17A145E129052417B14AE87CBA1384152B81E05179052418FC2F528C0A13841D7A3709D17905241D7A370BDC0A13841F6285C5F18905241295C8F82CBA138419A9999F917905241AE47E1BAD7A138415C8FC255169052411F85EB91E0A13841000000401590524114AE47A1E2A1384185EB5108159052415C8FC235ECA13841C3F5286C13905241C3F528DCF4A13841000000701290524152B81E45F5A138415C8FC2A51290524100000040F6A13841CDCCCC7C129052417B14AE47FBA138410000000012905241EC51B85E00A2384185EB51A8119052413D0AD7A305A238419A99990911905241EC51B81E0AA238411F85EB611090524148E17A940EA23841A4703D0A1090524152B81E0514A2384152B81EE50F905241F6285CCF15A238410AD7A3E00F9052417B14AEC718A23841CDCCCCDC0F9052419A9999191AA238415C8FC2E50F905241EC51B81E20A238415C8FC2E50F90524148E17A1420A23841333333C30F9052417B14AE8729A23841713D0AA70F905241000000002AA238413D0AD733119052411F85EB9129A23841C3F528EC12905241E17A142E28A238419A999919149052418FC2F5A825A23841CDCCCC1C15905241C3F5285C21A2384114AE473116905241F6285C4F1BA2384152B81E4517905241D7A3707D1AA2384148E17A1417905241C3F5285C19A23841D7A3702D179052413333333318A23841B81E85CB17905241000000C017A2384185EB5108189052413D0AD72310A238419A9999F91790524148E17A5410A2384148E17AD41690524148E17AD40DA2384152B81ED516905241B81E85AB09A23841F6285C1F179052418FC2F5A809A2384185EB51C8179052418FC2F56808A238417B14AEC7179052410000008008A2384185EB515818905241AE47E1BA16A23841F6285C6F189052410AD7A33017A23841C3F5289C18905241000000C012A23841AE47E10A1A9052411F85EB5110A238413D0AD7131B905241000000800DA238415C8FC2451C90524148E17A140DA23841A4703D4A1C9052413D0AD7230BA2384148E17A141E905241295C8F4205A23841295C8F421E905241F6285C4F00A238419A9999691E905241C3F5289CFDA13841AE47E16A1E905241D7A370FDFDA1384114AE47711F90524185EB51F801A23841B81E855B1F905241A4703D0A05A23841CDCCCCAC1F905241E17A14AE02A23841EC51B89E20905241295C8F82FFA138419A9999E9219052419A999919FEA1384185EB5188239052410AD7A330FAA13841E17A14DE25905241C3F5281CF9A13841F6285CFF26905241AE47E13AF8A138415C8FC2E527905241CDCCCC8CF7A1384185EB51B82890524185EB51F8F7A138413333334329905241C3F5281CF6A138418FC2F5182C905241A4703D4AF5A13841EC51B8BE2C905241CDCCCC0CF4A13841713D0AF72E90524185EB5138F3A13841000000502F905241000000C0F1A138410AD7A3103190524111000000CDCCCC4C6AA23841713D0A170A905241CDCCCC4C6FA238411F85EB710790524148E17A947AA2384114AE47410890524185EB51387BA23841D7A370ED07905241666666267BA23841713D0A7707905241EC51B85E7EA2384114AE476107905241E17A14AE7EA2384114AE473108905241713D0A5785A23841CDCCCCBC089052410AD7A33083A23841F6285C9F0B9052413333337382A23841666666460C90524148E17AD481A23841333333D30C90524114AE472181A23841333333730D905241AE47E1BA7FA23841CDCCCC3C0E9052418FC2F56876A238415C8FC2050D90524185EB513872A238418FC2F5D80B90524185EB513870A23841EC51B82E0B905241CDCCCC4C6AA23841713D0A170A90524113000000A4703DCA6BA238415C8FC295FF8F5241B81E856B74A238410AD7A380FF8F5241EC51B89E74A23841E17A149E00905241AE47E1BA74A23841F6285C4F019052419A99995974A23841295C8F520290524148E17AD473A2384114AE47B10390524152B81EC572A2384114AE4701059052417B14AE476DA23841AE47E1DA04905241F6285C8F6DA23841333333A303905241000000006CA2384152B81E9503905241EC51B81E69A23841A4703D7A039052410AD7A3B068A23841B81E85AB049052415C8FC2F55CA23841CDCCCC8C0490524152B81E455DA238411F85EB0103905241333333B35DA23841AE47E1DA00905241EC51B85E67A23841C3F528FC009052410AD7A3B067A23841CDCCCCCCFF8F524185EB51B86BA23841333333C3FF8F5241A4703DCA6BA238415C8FC295FF8F5241020000003D0AD7A346A238413D0AD7E3099052413D0AD7A346A238413D0AD7E309905241100000007B14AEC74DA238410AD7A3B008905241EC51B85E4EA23841B81E850B079052413D0AD7234FA23841C3F528DC0490524185EB51385CA23841EC51B8EE04905241B81E852B60A23841A4703DDA049052410000008066A23841A4703DFA049052411F85EB116AA23841CDCCCC0C05905241CDCCCC8C6EA23841A4703D5A05905241A4703D0A6CA238417B14AE37079052411F85EBD16AA23841A4703DCA07905241AE47E1FA68A23841E17A14FE08905241295C8F0268A238410AD7A320099052419A99999963A23841AE47E10A099052415C8FC2B55AA23841333333C30890524114AE476156A23841CDCCCCBC089052417B14AEC74DA238410AD7A3B008905241'); SELECT '#408.4', st_isvalidreason('0106000020BB0B000001000000010300000005000000D6000000000000C0F1A138410AD7A3103190524114AE4721F7A138410000000030905241713D0A57FAA1384185EB51982C9052417B14AE87FAA13841000000402A905241AE47E13AFBA1384114AE474128905241EC51B81EFDA138413D0AD7632690524152B81E85FFA13841D7A3707D2590524152B81E4500A23841713D0A072590524100000000FFA13841713D0AF724905241CDCCCCCCFFA13841CDCCCC0C249052419A99991901A238419A999919249052411F85EBD101A23841D7A3704D23905241E17A14AE02A23841A4703D3A2290524185EB51F808A23841000000D021905241E17A14EE0BA238413333335321905241666666A615A23841B81E85AB1F905241713D0AD710A23841B81E858B1E905241666666260CA2384114AE4731209052410AD7A37009A23841CDCCCCEC20905241AE47E13A06A23841EC51B87E219052419A9999D903A23841EC51B80E21905241EC51B8DE08A238418FC2F5681F905241666666660EA23841A4703D9A1D9052413D0AD7A30FA2384114AE47A11C9052413333333311A23841000000101C90524148E17A1414A23841333333931A905241EC51B81E1AA23841EC51B89E1890524185EB51381CA23841D7A370BD17905241295C8FC220A2384185EB51C816905241C3F528DC2BA238418FC2F5E814905241E17A14EE2EA23841EC51B8FE13905241AE47E1FA2BA23841EC51B8EE119052415C8FC2F52BA2384185EB51C810905241333333332EA2384114AE4701109052417B14AEC73BA238410AD7A3300D905241CDCCCCCC43A238417B14AE870B905241CDCCCC4C45A23841A4703D3A0B9052413D0AD7A34DA238411F85EB810A905241295C8F8250A23841CDCCCCBC09905241000000C053A238410AD7A36009905241A4703D0A5CA2384114AE4751099052418FC2F5A866A23841A4703D4A0A9052410000008069A2384114AE47B10A9052415C8FC2B573A23841B81E851B0D905241AE47E1FA76A23841666666C60D9052417B14AE077BA238411F85EB510E905241AE47E1FA7FA23841666666E60E9052415C8FC2358DA23841000000F010905241EC51B85E95A2384148E17A14119052417B14AE4795A23841CDCCCCCC1090524114AE47E18CA2384185EB51F80F90524148E17AD480A2384114AE47A10E9052413D0AD76383A23841713D0AF70C9052417B14AEC784A23841A4703D8A0C9052410000000086A23841A4703D0A0B9052411F85EB9187A23841B81E851B09905241F6285CCF86A2384100000010099052417B14AE4787A2384185EB51180890524114AE472186A23841CDCCCCFC079052410AD7A3B086A23841C3F5280C07905241333333B385A23841CDCCCC0C07905241000000407EA2384152B81E15079052419A9999197BA23841A4703D2A079052416666666673A2384114AE47710790524114AE47A16EA238413D0AD7F30690524114AE472170A238418FC2F5D8059052413D0AD72372A2384185EB511806905241A4703DCA71A23841D7A3707D05905241EC51B8DE7EA238411F85EBD104905241E17A14AE76A23841333333E30390524185EB51B875A23841713D0A47029052415C8FC2F576A23841D7A3703D029052419A99999976A2384114AE475101905241333333B378A23841EC51B83E019052410AD7A3307CA238410AD7A320019052418FC2F52885A23841295C8FD20090524148E17A9483A238416666664600905241295C8FC276A238411F85EB9100905241CDCCCC4C76A2384100000070FF8F5241AE47E13A76A2384133333343FF8F52417B14AE0783A23841D7A370FDFE8F5241E17A14AE81A23841C3F5283CFE8F52415C8FC2357DA2384114AE47A1FE8F5241CDCCCC8C7BA238415C8FC275FD8F524148E17AD47FA238417B14AE17FD8F5241000000807EA238413D0AD7A3FC8F5241713D0AD776A2384133333363FD8F5241CDCCCC8C73A2384152B81EF5FD8F5241E17A14AE70A2384114AE4711FE8F524185EB51B870A23841B81E852BFF8F524152B81E056CA2384114AE4731FF8F5241B81E856B6BA2384152B81E25FE8F5241AE47E13A69A23841E17A142EFE8F52419A99995962A238415C8FC275FE8F52415C8FC27562A238411F85EB710090524114AE47A15BA23841EC51B86E00905241EC51B85E5BA238419A9999E902905241295C8F025BA238417B14AE8704905241A4703D8A54A23841713D0A7704905241C3F5285C51A2384148E17A44049052418FC2F5E84CA23841A4703D4A049052410AD7A3304CA2384148E17A94049052419A9999994CA238413D0AD7F305905241AE47E1FA49A2384114AE471106905241EC51B85E49A23841AE47E1FA07905241AE47E13A43A238415C8FC255099052416666662644A23841D7A3707D0A9052415C8FC2F53FA23841CDCCCC2C0B90524185EB517839A2384185EB51380C90524152B81E4532A23841D7A370DD099052419A9999592FA2384152B81E4509905241D7A3707D2AA23841B81E857B089052415C8FC27526A238416666667608905241EC51B81E26A238417B14AE7707905241295C8F0226A23841F6285C1F07905241666666A61CA23841CDCCCC6C07905241713D0A1716A23841B81E856B07905241B81E85EB15A2384100000040079052411F85EB1108A2384114AE4741079052415C8FC23505A2384148E17AC40790524152B81E0506A23841EC51B84E09905241713D0A5707A23841AE47E10A0A905241EC51B81E12A2384152B81EA50890524152B81E4521A23841F6285CDF0890524148E17A1427A23841EC51B80E099052415C8FC2B52AA2384185EB5168099052413D0AD7E32FA23841CDCCCC3C0A9052413D0AD7A331A23841333333930A90524185EB51F833A238410AD7A3B00B9052411F85EB5135A23841EC51B8AE0B90524185EB513836A23841333333530D9052410000004030A238415C8FC2B50E905241000000802FA238415C8FC2750E9052410000008028A238419A9999B90E905241F6285C0F28A23841333333630E90524114AE47E123A23841333333730E905241D7A3707D23A2384152B81E750E9052410000008023A2384185EB51E80E905241D7A370BD1EA23841713D0A170F9052419A9999991EA23841333333830F9052419A9999991CA238411F85EB810F90524152B81E450EA2384152B81E750F9052417B14AE470AA23841EC51B89E0F905241B81E85EB05A238410AD7A3F00F905241D7A3707DFFA138417B14AEF71090524185EB51F8FDA138413D0AD72311905241295C8F02FAA13841EC51B83E11905241713D0A17EFA13841E17A145E129052417B14AE87CBA1384152B81E05179052418FC2F528C0A13841D7A3709D17905241D7A370BDC0A13841F6285C5F18905241295C8F82CBA138419A9999F917905241AE47E1BAD7A138415C8FC255169052411F85EB91E0A13841000000401590524114AE47A1E2A1384185EB5108159052415C8FC235ECA13841C3F5286C13905241C3F528DCF4A13841000000701290524152B81E45F5A138415C8FC2A51290524100000040F6A13841CDCCCC7C129052417B14AE47FBA138410000000012905241EC51B85E00A2384185EB51A8119052413D0AD7A305A238419A99990911905241EC51B81E0AA238411F85EB611090524148E17A940EA23841A4703D0A1090524152B81E0514A2384152B81EE50F905241F6285CCF15A238410AD7A3E00F9052417B14AEC718A23841CDCCCCDC0F9052419A9999191AA238415C8FC2E50F905241EC51B81E20A238415C8FC2E50F90524148E17A1420A23841333333C30F9052417B14AE8729A23841713D0AA70F905241000000002AA238413D0AD733119052411F85EB9129A23841C3F528EC12905241E17A142E28A238419A999919149052418FC2F5A825A23841CDCCCC1C15905241C3F5285C21A2384114AE473116905241F6285C4F1BA2384152B81E4517905241D7A3707D1AA2384148E17A1417905241C3F5285C19A23841D7A3702D179052413333333318A23841B81E85CB17905241000000C017A2384185EB5108189052413D0AD72310A238419A9999F91790524148E17A5410A2384148E17AD41690524148E17AD40DA2384152B81ED516905241B81E85AB09A23841F6285C1F179052418FC2F5A809A2384185EB51C8179052418FC2F56808A238417B14AEC7179052410000008008A2384185EB515818905241AE47E1BA16A23841F6285C6F189052410AD7A33017A23841C3F5289C18905241000000C012A23841AE47E10A1A9052411F85EB5110A238413D0AD7131B905241000000800DA238415C8FC2451C90524148E17A140DA23841A4703D4A1C9052413D0AD7230BA2384148E17A141E905241295C8F4205A23841295C8F421E905241F6285C4F00A238419A9999691E905241C3F5289CFDA13841AE47E16A1E905241D7A370FDFDA1384114AE47711F90524185EB51F801A23841B81E855B1F905241A4703D0A05A23841CDCCCCAC1F905241E17A14AE02A23841EC51B89E20905241295C8F82FFA138419A9999E9219052419A999919FEA1384185EB5188239052410AD7A330FAA13841E17A14DE25905241C3F5281CF9A13841F6285CFF26905241AE47E13AF8A138415C8FC2E527905241CDCCCC8CF7A1384185EB51B82890524185EB51F8F7A138413333334329905241C3F5281CF6A138418FC2F5182C905241A4703D4AF5A13841EC51B8BE2C905241CDCCCC0CF4A13841713D0AF72E90524185EB5138F3A13841000000502F905241000000C0F1A138410AD7A3103190524111000000CDCCCC4C6AA23841713D0A170A905241CDCCCC4C6FA238411F85EB710790524148E17A947AA2384114AE47410890524185EB51387BA23841D7A370ED07905241666666267BA23841713D0A7707905241EC51B85E7EA2384114AE476107905241E17A14AE7EA2384114AE473108905241713D0A5785A23841CDCCCCBC089052410AD7A33083A23841F6285C9F0B9052413333337382A23841666666460C90524148E17AD481A23841333333D30C90524114AE472181A23841333333730D905241AE47E1BA7FA23841CDCCCC3C0E9052418FC2F56876A238415C8FC2050D90524185EB513872A238418FC2F5D80B90524185EB513870A23841EC51B82E0B905241CDCCCC4C6AA23841713D0A170A90524113000000A4703DCA6BA238415C8FC295FF8F5241B81E856B74A238410AD7A380FF8F5241EC51B89E74A23841E17A149E00905241AE47E1BA74A23841F6285C4F019052419A99995974A23841295C8F520290524148E17AD473A2384114AE47B10390524152B81EC572A2384114AE4701059052417B14AE476DA23841AE47E1DA04905241F6285C8F6DA23841333333A303905241000000006CA2384152B81E9503905241EC51B81E69A23841A4703D7A039052410AD7A3B068A23841B81E85AB049052415C8FC2F55CA23841CDCCCC8C0490524152B81E455DA238411F85EB0103905241333333B35DA23841AE47E1DA00905241EC51B85E67A23841C3F528FC009052410AD7A3B067A23841CDCCCCCCFF8F524185EB51B86BA23841333333C3FF8F5241A4703DCA6BA238415C8FC295FF8F5241020000003D0AD7A346A238413D0AD7E3099052413D0AD7A346A238413D0AD7E309905241100000007B14AEC74DA238410AD7A3B008905241EC51B85E4EA23841B81E850B079052413D0AD7234FA23841C3F528DC0490524185EB51385CA23841EC51B8EE04905241B81E852B60A23841A4703DDA049052410000008066A23841A4703DFA049052411F85EB116AA23841CDCCCC0C05905241CDCCCC8C6EA23841A4703D5A05905241A4703D0A6CA238417B14AE37079052411F85EBD16AA23841A4703DCA07905241AE47E1FA68A23841E17A14FE08905241295C8F0268A238410AD7A320099052419A99999963A23841AE47E10A099052415C8FC2B55AA23841333333C30890524114AE476156A23841CDCCCCBC089052417B14AEC74DA238410AD7A3B008905241'); -- #457 -- SELECT '#457.1', st_astext(st_collectionExtract('POINT(0 0)', 1)); SELECT '#457.2', st_astext(st_collectionExtract('POINT(0 0)', 2)); SELECT '#457.3', st_astext(st_collectionExtract('POINT(0 0)', 3)); SELECT '#457.4', st_astext(st_collectionExtract('LINESTRING(0 0, 1 1)', 1)); SELECT '#457.5', st_astext(st_collectionExtract('LINESTRING(0 0, 1 1)', 2)); SELECT '#457.6', st_astext(st_collectionExtract('LINESTRING(0 0, 1 1)', 3)); SELECT '#457.7', st_astext(st_collectionExtract('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', 1)); SELECT '#457.8', st_astext(st_collectionExtract('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', 2)); SELECT '#457.9', st_astext(st_collectionExtract('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', 3)); -- #835 -- SELECT '#835.1', st_astext(st_collectionExtract('POLYGON EMPTY', 1)); SELECT '#835.2', st_astext(st_collectionExtract('POLYGON EMPTY', 2)); SELECT '#835.3', st_astext(st_collectionExtract('POLYGON EMPTY', 3)); SELECT '#835.4', st_astext(st_collectionExtract('LINESTRING EMPTY', 1)); SELECT '#835.5', st_astext(st_collectionExtract('LINESTRING EMPTY', 2)); SELECT '#835.6', st_astext(st_collectionExtract('LINESTRING EMPTY', 3)); SELECT '#835.7', st_astext(st_collectionExtract('POINT EMPTY', 1)); SELECT '#835.8', st_astext(st_collectionExtract('POINT EMPTY', 2)); SELECT '#835.9', st_astext(st_collectionExtract('POINT EMPTY', 3)); SELECT '#835.10', st_astext(st_collectionExtract('GEOMETRYCOLLECTION EMPTY', 1)); SELECT '#835.11', st_astext(st_collectionExtract('GEOMETRYCOLLECTION EMPTY', 2)); SELECT '#835.12', st_astext(st_collectionExtract('GEOMETRYCOLLECTION EMPTY', 3)); -- #650 -- SELECT '#650', ST_AsText(ST_Collect(ARRAY[ST_MakePoint(0,0), ST_MakePoint(1,1), null, ST_MakePoint(2,2)])); -- #662 -- --SELECT '#662', ST_MakePolygon(ST_AddPoint(ST_AddPoint(ST_MakeLine(ST_SetSRID(ST_MakePointM(i+m,j,m),4326),ST_SetSRID(ST_MakePointM(j+m,i-m,m),4326)),ST_SetSRID(ST_MakePointM(i,j,m),4326)),ST_SetSRID(ST_MakePointM(i+m,j,m),4326))) As the_geom FROM generate_series(-10,50,20) As i CROSS JOIN generate_series(50,70, 20) As j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, m, i*j*m LIMIT 1; -- #667 -- SELECT '#667', ST_AsEWKT(ST_LineToCurve(ST_Buffer(ST_SetSRID(ST_Point(i,j),4326), j))) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(40,70, 20) As j ORDER BY i, j, i*j LIMIT 1; -- #677 -- SELECT '#677',round(ST_Distance_Spheroid(ST_GeomFromEWKT('MULTIPOLYGON(((-10 40,-10 55,-10 70,5 40,-10 40)))'), ST_GeomFromEWKT('MULTIPOINT(20 40,20 55,20 70,35 40,35 55,35 70,50 40,50 55,50 70)'), 'SPHEROID["GRS_1980",6378137,298.257222101]')) As result; -- #680 -- SELECT '#680', encode(ST_AsBinary(geography(foo1.the_geom)),'hex') As result FROM ((SELECT ST_SetSRID(ST_MakePointM(i,j,m),4326) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(50,70, 20) AS j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, i*j*m)) As foo1 LIMIT 1; -- #681 -- SELECT '#681a', ST_AsGML(ST_GeomFromText('POINT EMPTY', 4326)); SELECT '#681b', ST_AsGML(ST_GeomFromText('POLYGON EMPTY', 4326)); SELECT '#681c', ST_AsGML(ST_GeomFromText('LINESTRING EMPTY', 4326)); SELECT '#681d', ST_AsGML(ST_GeomFromText('MULTIPOINT EMPTY', 4326)); SELECT '#681e', ST_AsGML(ST_GeomFromText('MULTILINESTRING EMPTY', 4326)); SELECT '#681f', ST_AsGML(ST_GeomFromText('MULTIPOLYGON EMPTY', 4326)); SELECT '#681g', ST_AsGML(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY', 4326)); -- #682 -- SELECT '#682', ST_Buffer(ST_GeomFromText('POLYGON EMPTY',4326) , 0.5); -- #683 -- SELECT '#683', ST_BuildArea(ST_GeomFromText('POINT EMPTY',4326)); -- #684,#2109 -- SELECT '#684,#2109', ST_AsEWKT(ST_Centroid(ST_GeomFromText('POLYGON EMPTY',4326))); SELECT '#2109', ST_AsEWKT(ST_Centroid(ST_GeomFromText('MULTILINESTRING ZM EMPTY',3395))); -- #685 -- SELECT '#685', ST_ConvexHull(ST_GeomFromText('POLYGON EMPTY',4326)); -- #686 -- SELECT '#686', ST_COLLECT(ST_GeomFromText('POLYGON EMPTY',4326),ST_GeomFromText('TRIANGLE EMPTY',4326)); -- #687 -- SELECT '#687', ST_DFullyWithin(ST_GeomFromText('LINESTRING(-10 50,50 -10)',4326), ST_GeomFromText('POLYGON EMPTY',4326),5); -- #689 -- SELECT '#689', ST_CoveredBy(ST_GeomFromText('POLYGON EMPTY'), ST_GeomFromText('LINESTRING(-10 50,50 -10)')); -- #690 -- SELECT '#690'; SELECT ST_MakeLine(ST_GeomFromText('POINT(-11.1111111 40)'), ST_GeomFromText('LINESTRING(-11.1111111 70,70 -11.1111111)')) As result; -- #693 -- SELECT '#693a', ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2503 1,-71.132 42.2502 3,-71.1323 42.2504 -2,-71.1322 42.2505 1,-71.1319 42.2503 0))'); SELECT '#693b', ST_GeomFromEWKT('SRID=4326;POLYGONM((-71.1319 42.2512 0,-71.1318 42.2511 20,-71.1317 42.2511 -20,-71.1317 42.251 5,-71.1317 42.2509 4,-71.132 42.2511 6,-71.1319 42.2512 30))'); -- #694 -- SELECT '#694'; SELECT ST_MakePolygon('POINT(1 2)'::geometry); -- #695 -- SELECT '#695'; SELECT ST_RemovePoint('POINT(-11.1111111 40)'::geometry, 1); -- #696 -- SELECT '#696',ST_Segmentize(ST_GeomFromEWKT('PolyhedralSurface( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'), 0.5); -- #720 -- SELECT '#720', ST_AsText(ST_SnapTogrid(ST_Transform(ST_GeomFromText('MULTIPOINT(-10 40,-10 55,-10 70,5 40,5 55,5 70,20 40,20 55,20 70,35 40,35 55,35 70,50 40,50 55,50 70)',4326), 3395), 0.01)); -- #723 -- SELECT '#723', ST_SnapToGrid( ST_Intersection(a.geog, b.geog)::geometry, 0.00001) FROM (VALUES (ST_GeogFromText('SRID=4326;POINT(-11.1111111 40)') ), (ST_GeogFromText('SRID=4326;POINT(-11.1111111 55)') ) ) As a(geog) CROSS JOIN ( VALUES (ST_GeogFromText('SRID=4326;POINT(-11.1111111 40)') ), (ST_GeogFromText('SRID=4326;POINT(-11.1111111 55)') )) As b(geog); -- #729 -- --SELECT '#729',ST_MakeLine(foo1.the_geom) As result FROM ((SELECT ST_GeomFromText('POINT EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTIPOINT EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTIPOLYGON EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('LINESTRING EMPTY',4326) As the_geom UNION ALL SELECT ST_GeomFromText('MULTILINESTRING EMPTY',4326) As the_geom ) ) As foo1; -- #804 SELECT '#804', ST_AsGML(3, 'SRID=4326;POINT(0 0)'::geometry, 0, 1); -- #845 SELECT '#845', ST_Intersects('POINT(169.69960846592 -46.5061209281002)'::geometry, 'POLYGON((169.699607857174 -46.5061218662,169.699607857174 -46.5061195965597,169.699608806526 -46.5061195965597,169.699608806526 -46.5061218662,169.699607857174 -46.5061218662))'::geometry); -- #834 SELECT '#834', ST_AsEWKT(ST_Intersection('LINESTRING(0 0,0 10,10 10,10 0)', 'LINESTRING(10 10 4,10 0 5,0 0 5)')); -- #884 -- CREATE TABLE foo (id integer, the_geom geometry); INSERT INTO foo VALUES (1, st_geomfromtext('MULTIPOLYGON(((-113.6 35.4,-113.6 35.8,-113.2 35.8,-113.2 35.4,-113.6 35.4),(-113.5 35.5,-113.3 35.5,-113.3 35.7,-113.5 35.7,-113.5 35.5)))')); INSERT INTO foo VALUES (2, st_geomfromtext('MULTIPOLYGON(((-113.7 35.3,-113.7 35.9,-113.1 35.9,-113.1 35.3,-113.7 35.3),(-113.6 35.4,-113.2 35.4,-113.2 35.8,-113.6 35.8,-113.6 35.4)),((-113.5 35.5,-113.5 35.7,-113.3 35.7,-113.3 35.5,-113.5 35.5)))')); select '#884', id, ST_Within( ST_GeomFromText('POINT (-113.4 35.6)'), the_geom ) from foo; select '#938', 'POLYGON EMPTY'::geometry::box2d; DROP TABLE foo; -- #668 -- select '#668',box2d('CIRCULARSTRING(10 2,12 2,14 2)'::geometry) as b; -- #711 -- select '#711', ST_GeoHash(ST_GeomFromText('POLYGON EMPTY',4326)); -- #712 -- SELECT '#712',ST_IsValid(ST_GeomFromText('POLYGON EMPTY',4326)); -- #756 WITH inp AS ( SELECT 'LINESTRING(0 0, 1 1)'::geometry as s, 'LINESTRING EMPTY'::geometry as e ) SELECT '#756.1', ST_Equals(s, st_multi(s)), ST_Equals(s, st_collect(s, e)) FROM inp; -- #1023 -- select '#1023', 'POINT(10 4)'::geometry = 'POINT(10 4)'::geometry; select '#1023.a', 'POINT(10 4)'::geometry = 'POINT(10 5)'::geometry; select '#1023.b', postgis_addbbox('POINT(10 4)'::geometry) = 'POINT(10 4)'::geometry; -- #1069 -- select '#1060', ST_Relate(ST_GeomFromText('POINT EMPTY',4326), ST_GeomFromText('POINT EMPTY',4326)) As result; -- #1273 -- WITH p AS ( SELECT 'POINT(832694.188 816254.625)'::geometry as g ) SELECT '#1273', st_equals(p.g, postgis_addbbox(p.g)) from p; -- Another for #1273 -- WITH p AS ( SELECT 'MULTIPOINT((832694.188 816254.625))'::geometry as g ) SELECT '#1273.1', st_equals(p.g, postgis_dropbbox(p.g)) from p; -- #877, #818 create table t(g geometry); select '#877.1', ST_EstimatedExtent('t','g'); analyze t; select '#877.2', ST_EstimatedExtent('public', 't','g'); select '#877.2.deprecated', ST_Estimated_Extent('public', 't','g'); insert into t(g) values ('LINESTRING(-10 -50, 20 30)'); -- #877.3 with e as ( select ST_EstimatedExtent('t','g') as e ) select '#877.3', round(st_xmin(e.e)::numeric, 5), round(st_xmax(e.e)::numeric, 5), round(st_ymin(e.e)::numeric, 5), round(st_ymax(e.e)::numeric, 5) from e; -- #877.4 analyze t; with e as ( select ST_EstimatedExtent('t','g') as e ) select '#877.4', round(st_xmin(e.e)::numeric, 5), round(st_xmax(e.e)::numeric, 5), round(st_ymin(e.e)::numeric, 5), round(st_ymax(e.e)::numeric, 5) from e; -- #877.5 truncate t; with e as ( select ST_EstimatedExtent('t','g') as e ) select '#877.5', round(st_xmin(e.e)::numeric, 5), round(st_xmax(e.e)::numeric, 5), round(st_ymin(e.e)::numeric, 5), round(st_ymax(e.e)::numeric, 5) from e; drop table t; -- #1292 SELECT '#1292', ST_AsText(ST_SnapToGrid(ST_GeomFromText( 'GEOMETRYCOLLECTION(POINT(180 90),POLYGON((140 50,150 50,180 50,140 50),(140 60,150 60,180 60,140 60)))' , 4326), 0.00001)::geography); -- #1292.1 SELECT '#1292.1', ST_AsText(ST_GeomFromText('POINT(180.00000000001 95)')::geography), ST_AsText(ST_GeomFromText('POINT(185 90.00000000001)')::geography); -- #1320 SELECT '<#1320>'; CREATE TABLE A ( geom geometry(MultiPolygon, 4326), geog geography(MultiPolygon, 4326) ); -- Valid inserts INSERT INTO a(geog) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geography); INSERT INTO a(geom) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geometry); SELECT '#1320.geog.1', geometrytype(geog::geometry), st_srid(geog::geometry) FROM a where geog is not null; SELECT '#1320.geom.1', geometrytype(geom), st_srid(geom) FROM a where geom is not null; -- Type mismatches is not allowed INSERT INTO a(geog) VALUES('SRID=4326;POLYGON ((0 0, 10 0, 10 10, 0 0))'::geography); INSERT INTO a(geom) VALUES('SRID=4326;POLYGON ((0 0, 10 0, 10 10, 0 0))'::geometry); SELECT '#1320.geog.2', geometrytype(geog::geometry), st_srid(geog::geometry) FROM a where geog is not null; SELECT '#1320.geom.2', geometrytype(geom), st_srid(geom) FROM a where geom is not null; -- Even if it's a trigger changing the type CREATE OR REPLACE FUNCTION triga() RETURNS trigger AS $$ BEGIN NEW.geom = ST_GeometryN(New.geom,1); NEW.geog = ST_GeometryN(New.geog::geometry,1)::geography; RETURN NEW; END; $$ language plpgsql VOLATILE; CREATE TRIGGER triga_before BEFORE INSERT ON a FOR EACH ROW EXECUTE PROCEDURE triga(); INSERT INTO a(geog) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geography); INSERT INTO a(geom) VALUES('SRID=4326;MULTIPOLYGON (((0 0, 10 0, 10 10, 0 0)))'::geometry); SELECT '#1320.geog.3', geometrytype(geog::geometry), st_srid(geog::geometry) FROM a where geog is not null; SELECT '#1320.geom.3', geometrytype(geom), st_srid(geom) FROM a where geom is not null; DROP TABLE A; DROP FUNCTION triga(); SELECT '</#1320>'; -- st_AsText POLYGON((0 0,10 0,10 10,0 0)) -- #1344 select '#1344', octet_length(ST_AsEWKB(st_makeline(g))) FROM ( values ('POINT(0 0)'::geometry ) ) as foo(g); -- #1385 SELECT '#1385', ST_Extent(g) FROM ( select null::geometry as g ) as foo; -- #657 SELECT '#657.1',Round(ST_X(ST_Project('POINT(175 10)'::geography, 2000000, 3.1415/2)::GEOMETRY)::numeric,2); SELECT '#657.2',Round(ST_Distance(ST_Project('POINT(10 10)'::geography, 10, 0), 'POINT(10 10)'::geography)::numeric,2); SELECT '#657.3',ST_DWithin(ST_Project('POINT(10 10)'::geography, 2000, pi()/2), 'POINT(10 10)'::geography, 2000); -- #1305 SELECT '#1305.1',ST_AsText(ST_Project('POINT(10 10)'::geography, 0, 0)); WITH pts AS ( SELECT 'POINT(0 45)'::geography AS s, 'POINT(45 45)'::geography AS e ) SELECT '#1305.2',abs(ST_Distance(e, ST_Project(s, ST_Distance(s, e), ST_Azimuth(s, e)))) < 0.001 FROM pts; SELECT '#1305.3',ST_Azimuth('POINT(0 45)'::geography, 'POINT(0 45)'::geography) IS NULL; -- #1445 SELECT '01060000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '01050000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '01040000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '01090000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '010B0000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; SELECT '010C0000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F'::geometry; -- #1453 SELECT '#1453.1', ST_OrderingEquals('POINT EMPTY', 'POINT EMPTY'); SELECT '#1453.2', ST_OrderingEquals('POINT EMPTY', 'POINT Z EMPTY'); -- #1454 with inp as ( select 'MULTILINESTRING((0 0, 2 0))'::geometry as g ) SELECT '#1454', st_orderingequals(g,g) from inp; -- #1414 SELECT '#1414', st_astext(st_Force3DZ('CURVEPOLYGON EMPTY')); -- #1478 SELECT '#1478', 'SRID=1;POINT EMPTY'::geometry::text::geometry; -- #745 SELECT '#745', ST_AsEWKT(ST_Split('POLYGON((-72 42 1,-70 43 1,-71 41 1,-72 42 1))', 'LINESTRING(-10 40 1,-9 41 1)')); -- #1450 SELECT '#1450', GeometryType('POINT(0 0)'::geography), GeometryType('POLYGON EMPTY'::geography); -- #1482 select '#1482', ST_Srid('POINT(0 0)'::geography(point, 0)::geometry); -- #852 CREATE TABLE cacheable (id int, g geometry); COPY cacheable FROM STDIN; 1 POINT(0.5 0.5000000000001) 2 POINT(0.5 0.5000000000001) \. select '#852.1', id, -- first run is not cached, consequent are cached st_intersects(g, 'POLYGON((0 0, 10 10, 1 0, 0 0))'::geometry), st_intersects(g, 'POLYGON((0 0, 1 1, 1 0, 0 0))'::geometry) from cacheable; UPDATE cacheable SET g = 'POINT(0.5 0.5)'; -- New select, new cache select '#852.2', id, -- first run is not cached, consequent are cached st_intersects(g, 'POLYGON((0 0, 10 10, 1 0, 0 0))'::geometry), st_intersects(g, 'POLYGON((0 0, 1 1, 1 0, 0 0))'::geometry) from cacheable; DROP TABLE cacheable; -- #1489 with inp AS ( SELECT st_multi('POINT EMPTY'::geometry) as mp, st_multi('LINESTRING EMPTY'::geometry) as ml, st_multi('POLYGON EMPTY'::geometry) as ma, st_multi('GEOMETRYCOLLECTION EMPTY'::geometry) as mm ) select '#1489', st_astext(mp), st_numgeometries(mp), st_astext(ml), st_numgeometries(ml), st_astext(ma), st_numgeometries(ma), st_astext(mm), st_numgeometries(mm) FROM inp; -- #1150 insert into spatial_ref_sys (srid, proj4text) values (500001,NULL); insert into spatial_ref_sys (srid, proj4text) values (500002, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'); select '#1150', st_astext(st_transform('SRID=500002;POINT(0 0)',500001)); -- #1038 select '#1038', ST_AsSVG('POLYGON EMPTY'::geometry); -- #1042 select '#1042',round((st_ymax(st_minimumboundingcircle('LINESTRING(-1 -1, 1 1)')) * st_xmax(st_minimumboundingcircle('LINESTRING(-1 -1, 1 1)')))::numeric,0); -- #1170 -- SELECT '#1170', ST_Y(ST_Intersection( ST_GeogFromText( 'POINT(0 90)'), ST_GeogFromText( 'POINT(0 90)' ))::geometry); -- #1264 -- SELECT '#1264', ST_DWithin('POLYGON((-10 -10, -10 10, 10 10, 10 -10, -10 -10))'::geography, 'POINT(0 0)'::geography, 0); -- #1398 select '#1398a', st_astext(st_snaptogrid(st_project('POINT(-120 45)'::geography, 100000, radians(45))::geometry,0.000001)); select '#1398b', st_astext(st_snaptogrid(st_project('POINT(20 85)'::geography, 2000000, radians(0.1))::geometry,0.000001)); -- #1543 with inp as ( select '0105000000020000000102000000040000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000000001020000000100000000000000000000000000000000000000' ::geometry as g ) select '#1543', st_astext(g), st_astext(st_buildarea(g)) from inp; -- #1578 with inp as ( select ST_Collect('POLYGON EMPTY', 'POLYGON EMPTY') as mp, 'POINT(0 0)'::geometry as p ) select '#1578', _st_within(p, mp), _st_intersects(p, mp) FROM inp; -- #1580 select '#1580.1', ST_Summary(ST_Transform('SRID=4326;POINT(0 0)'::geometry, 3395)); select '#1580.2', ST_Transform('SRID=4326;POINT(180 90)'::geometry, 3395); -- fails select '#1580.3', ST_Summary(ST_Transform('SRID=4326;POINT(0 0)'::geometry, 3395)); -- #1596 -- CREATE TABLE road_pg (ID INTEGER, NAME VARCHAR(32)); SELECT '#1596.1', AddGeometryColumn( 'road_pg','roads_geom', 3395, 'POINT', 2 ); SELECT '#1596.2', UpdateGeometrySRID( 'road_pg','roads_geom', 330000); SELECT '#1596.3', srid FROM geometry_columns WHERE f_table_name = 'road_pg' AND f_geometry_column = 'roads_geom'; SELECT '#1596.4', UpdateGeometrySRID( 'road_pg','roads_geom', 999000); SELECT '#1596.5', srid FROM geometry_columns WHERE f_table_name = 'road_pg' AND f_geometry_column = 'roads_geom'; SELECT '#1596.6', UpdateGeometrySRID( 'road_pg','roads_geom', -1); SELECT '#1596.7', srid FROM geometry_columns WHERE f_table_name = 'road_pg' AND f_geometry_column = 'roads_geom'; DROP TABLE road_pg; -- #1596 WITH inp AS ( SELECT 'POLYGON((-176 -22,-176 -21,-175 -21,-175 -22,-176 -22))'::geography as a, 'POINT(-176 -22)'::geography as p ) SELECT '#1596', ST_Summary(ST_Intersection(a,p)) FROM inp; -- #1695 SELECT '#1695', ST_AsEWKT(ST_SnapToGrid('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))'::geometry, 20)); -- #1697 -- CREATE TABLE eg(g geography, gm geometry); CREATE INDEX egi on eg using gist (g); CREATE INDEX egind on eg using gist (gm gist_geometry_ops_nd); INSERT INTO eg (g, gm) select 'POINT EMPTY'::geography, 'POINT EMPTY'::geometry from generate_series(1,1024); SELECT '#1697.1', count(*) FROM eg WHERE g && 'POINT(0 0)'::geography; SELECT '#1697.2', count(*) FROM eg WHERE gm && 'POINT(0 0)'::geometry; SELECT '#1697.3', count(*) FROM eg WHERE gm ~= 'POINT EMPTY'::geometry; DROP TABLE eg; -- #1734 -- create table eg (g geography); create index egi on eg using gist (g); INSERT INTO eg(g) VALUES (NULL); INSERT INTO eg (g) VALUES ('POINT(0 0)'::geography); INSERT INTO eg (g) select 'POINT(0 0)'::geography FROM generate_series(1,1024); SELECT '#1734.1', count(*) FROM eg; DROP table eg; -- #1755 -- select '#1755', st_geographyFromText('SRID=4326;Point(85 35 0)'); -- #1776 -- with inp as ( SELECT 'POLYGON EMPTY'::geometry as A, 'POLYGON((0 0, 10 0, 10 10, 0 0))'::geometry as B ) SELECT '#1776', ST_AsText(ST_SymDifference(A,B)), ST_AsText(ST_SymDifference(B, A)) FROM inp; -- #1780 -- SELECT '#1780',ST_GeoHash('POINT(4 4)'::geometry) = ST_GeoHash('POINT(4 4)'::geography); -- #1791 -- with inp as ( SELECT '010100000000000000004065C0041AD965BE5554C0'::geometry as a, '010100000001000000004065C0041AD965BE5554C0'::geometry as b ) SELECT '#1791', round(ST_Azimuth(a,b)*10)/10 from inp; -- #1799 -- SELECT '#1799', ST_Segmentize('LINESTRING(0 0, 10 0)'::geometry, 0); -- #1936 -- select st_astext(st_geomfromgml( '<gml:Polygon xmlns:gml="http://www.opengis.net/gml/3.2" gml:id="HPA.15449990010" srsName="urn:ogc:def:crs:EPSG::4326" srsDimension="2"> <gml:exterior> <gml:Ring> <gml:curveMember> <gml:LineString gml:id="HPA.15449990010.1"> <gml:posList>711540.35 1070163.61 711523.82 1070166.54 711521.30 1070164.14 711519.52 1070162.44 711518.57 1070164.62 712154.47 1070824.94</gml:posList> </gml:LineString> </gml:curveMember> <gml:curveMember> <gml:Curve gml:id="HPA.15449990010.2"> <gml:segments><gml:ArcString> <gml:posList>712154.47 1070824.94 712154.98 1070826.04 712154.41 1070827.22</gml:posList> </gml:ArcString> </gml:segments> </gml:Curve> </gml:curveMember> <gml:curveMember> <gml:LineString gml:id="HPA.15449990010.3"> <gml:posList>712154.41 1070827.22 712160.31 1070837.07 712160.92 1070835.36 712207.89 1071007.95</gml:posList> </gml:LineString> </gml:curveMember> <gml:curveMember> <gml:Curve gml:id="HPA.15449990010.4"><gml:segments><gml:ArcString><gml:posList>712207.89 1071007.95 712207.48 1071005.59 712208.38 1071001.28</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:LineString gml:id="HPA.15449990010.5"><gml:posList>712208.38 1071001.28 712228.74 1070949.67 712233.98 1070936.15 712124.93 1070788.72</gml:posList></gml:LineString></gml:curveMember><gml:curveMember><gml:Curve gml:id="HPA.15449990010.6"><gml:segments><gml:ArcString><gml:posList>712124.93 1070788.72 712124.28 1070785.87 712124.63 1070783.38</gml:posList></gml:ArcString></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:LineString gml:id="HPA.15449990010.7"><gml:posList>712124.63 1070783.38 712141.04 1070764.12 712146.60 1070757.01 711540.35 1070163.61</gml:posList></gml:LineString></gml:curveMember></gml:Ring></gml:exterior> <gml:interior> <gml:LinearRing> <gml:posList>713061.62 1070354.46 713053.59 1070335.12 713049.58 1070315.92 713049.65 1070298.33 713061.62 1070354.46</gml:posList> </gml:LinearRing> </gml:interior> </gml:Polygon>')); -- #1957 -- SELECT '#1957', ST_Distance(ST_Makeline(ARRAY['POINT(1 0)'::geometry]), 'POINT(0 0)'::geometry); -- #1978 -- SELECT '#1978', round(ST_Length(ST_GeomFromText('CIRCULARSTRING(0 0,1 0,0 0)',0))::numeric,4); -- #1996 -- SELECT '#1996', ST_AsGeoJSON(ST_GeomFromText('POINT EMPTY')); -- #2001 -- SELECT '#2001', ST_AsText(ST_CurveToLine(ST_GeomFromText('CURVEPOLYGON((0 0, 0 1, 1 1, 0 0))'), 2)); -- #2028 -- SELECT '#2028', ST_AsText(ST_Multi('TRIANGLE((0 0, 0 1, 1 1, 0 0))')); -- #2035 START ------------------------------------------------------------ -- Simple geographic table, with single point. CREATE TABLE "city" ( "id" integer, "name" varchar(30) NOT NULL, "point" geometry(POINT,4326) NOT NULL ); CREATE INDEX "city_point_id" ON "city" USING GIST ( "point" ); -- Initial data, with points around the world. INSERT INTO "city" (id, name, point) VALUES (1, 'Houston', 'SRID=4326;POINT(-95.363151 29.763374)'); INSERT INTO "city" (id, name, point) VALUES (2, 'Dallas', 'SRID=4326;POINT(-95.363151 29.763374)'); INSERT INTO "city" (id, name, point) VALUES (3, 'Oklahoma City', 'SRID=4326;POINT(-97.521157 34.464642)'); INSERT INTO "city" (id, name, point) VALUES (4, 'Wellington', 'SRID=4326;POINT(174.783117 -41.315268)'); INSERT INTO "city" (id, name, point) VALUES (5, 'Pueblo', 'SRID=4326;POINT(-104.609252 38.255001)'); INSERT INTO "city" (id, name, point) VALUES (6, 'Lawrence', 'SRID=4326;POINT(-95.23506 38.971823)'); INSERT INTO "city" (id, name, point) VALUES (7, 'Chicago', 'SRID=4326;POINT(-87.650175 41.850385)'); INSERT INTO "city" (id, name, point) VALUES (8, 'Victoria', 'SRID=4326;POINT(-123.305196 48.462611)'); -- This query, or COUNT(*), does not return anything; should return 6 cities, -- excluding Pueblo and Victoria. The Polygon is a simple approximation of -- Colorado. SELECT '#2035a', Count(*) FROM "city" WHERE "city"."point" >> ST_GeomFromEWKT('SRID=4326;POLYGON ((-109.060253 36.992426, -109.060253 41.003444, -102.041524 41.003444, -102.041524 36.992426, -109.060253 36.992426))'); -- However, when a LIMIT is placed on statement, the query suddenly works. SELECT '#2035b', Count(*) FROM "city" WHERE "city"."point" >> ST_GeomFromEWKT('SRID=4326;POLYGON ((-109.060253 36.992426, -109.060253 41.003444, -102.041524 41.003444, -102.041524 36.992426, -109.060253 36.992426))') LIMIT 6; DROP TABLE "city"; -- #2035 END -------------------------------------------------------------- -- #2084 -- SELECT '#2048', num, ST_Within('POINT(-54.394 56.522)', "the_geom"), ST_CoveredBy('POINT(-54.394 56.522)', "the_geom") FROM ( VALUES (1, '0103000000010000000E00000051C6F7C5A5324BC02EB69F8CF13F4C40F12EA4C343364BC0326AA2CF47434C402BC1A8A44E364BC02A50E10852434C407F2990D959364BC0A0D1730B5D434C404102452C62364BC0ECF335CB65434C400903232F6B364BC0F635E84B6F434C40BD0CC51D6F364BC0D2805EB873434C40B9E6E26F7B364BC0F20B93A982434C40D9FAAF73D3344BC0FE84D04197444C40BD5C8AABCA344BC0CED05CA791444C4023F2237EC5344BC02A84F23E8E444C40BDCDD8077B324BC0C60FB90F01434C409FD1702E65324BC04EF1915C17404C4051C6F7C5A5324BC02EB69F8CF13F4C40'::geometry), (2, '0103000000010000001C00000003F25650F73B4BC098477F523E3E4C40C9A6A344CE3C4BC0C69698653E3E4C40BDD0E979373E4BC0081FA0FB723E4C400FD252793B3E4BC01A137F14753E4C40537170E998414BC070D3BCE314414C4023FC51D499474BC0D4D100DE024F4C40638C47A984454BC024130D52F0504C40B9442DCDAD404BC03A29E96168554C40C7108DEE20404BC07C7C26FBE7554C40195D6BEF533F4BC0E20391459A564C40239FE40E9B344BC08C1ADB6B41514C40132D3F7095314BC0BA2ADF33124F4C409DB91457952D4BC02C7B681F2B4C4C4089DC60A8C32C4BC07C5C3810924B4C40D7ED409DF22A4BC0F64389963C4A4C405D1EF818AC2A4BC00EC84274084A4C401B48A46DFC294BC0B271A8DF85494C40E78AA6B393294BC01ED0EFFB37494C4081C64B3789294BC0DC5BE7DF2E494C409B23329287294BC0F0D6974E2D494C40CD22D5D687294BC0844316D72C494C40F5229D4FE2294BC002F19825AB484C40A3D0BD5AE9294BC06C0776A9A2484C409FD1702E65324BC04EF1915C17404C409F860AA7BD324BC0162CA390E33F4C40539A5C1C23334BC0FE86B04EB03F4C4081511DFF90334BC088FF36D4873F4C4003F25650F73B4BC098477F523E3E4C40'::geometry), (3, '010300000001000000100000008D57CD101A214BC0AECDD34E072C4C400DBB72E6EC274BC0A8088D60E32C4C40CF8FD7E6734E4BC0B22695BE4A324C40BFA74213934F4BC020BE505D4C354C4057CD4BEE454E4BC0BA6CF3940F3D4C40E7BDC5FD263E4BC09A4B297D5B484C4073A46A86701C4BC0B287F08D93364C4045501F86701C4BC05EBDB78D93364C40A37DB6586D1C4BC0841E7D2891364C409FBF445F6D1C4BC01E225C5690364C40D1BA97726D1C4BC06E2AF7EA8D364C4019B60C9B751C4BC0D2FD702575364C40FDE4394B5E1F4BC08C40F231CC2F4C402343DF40F51F4BC022008E3D7B2E4C400BB57B45F9204BC0908CE2EA3A2C4C408D57CD101A214BC0AECDD34E072C4C40'::geometry) ) AS f(num, the_geom); -- #2112 -- Start SELECT '#2112a', ST_3DDistance(a,b), ST_ASEWKT(ST_3DShortestLine(a,b)) FROM (SELECT 'POLYGON((1 1 1, 5 1 1,5 5 1, 1 5 1,1 1 1))'::geometry as a, 'LINESTRING(0 0 2, 0 0 0,5 5 2)'::geometry as b ) as foo; SELECT '#2112b', ST_3DDistance(a,b), ST_ASEWKT(ST_3DShortestLine(a,b)) FROM (SELECT 'POLYGON((1 1 1, 5 1 1,5 5 1, 1 5 1,1 1 1))'::geometry as a, 'LINESTRING(1 0 2, 1 0 0,5 5 -1)'::geometry as b ) as foo; -- 2112 -- End SELECT '#2108', ST_AsEWKT(ST_LineInterpolatePoint('SRID=3395;LINESTRING M EMPTY'::geometry, 0.5)); SELECT '#2117', ST_AsEWKT(ST_PointOnSurface('SRID=3395;MULTIPOLYGON M EMPTY'::geometry)); SELECT '#2110.1', 'POINT(0 0)'::geometry = 'POINT EMPTY'::geometry; SELECT '#2110.2', 'POINT EMPTY'::geometry = 'POINT EMPTY'::geometry; SELECT '#2110.3', 'POINT(0 0)'::geometry = 'POINT(0 0)'::geometry; SELECT '#2145', round(ST_Length(St_Segmentize(ST_GeographyFromText('LINESTRING(-89.3000030518 28.2000007629,-89.1999969482 89.1999969482,-89.1999969482 89.1999969482)'), 10000))::numeric,0); -- Clean up DELETE FROM spatial_ref_sys; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/concave_hull.sql���������������������������������������������0000644�0000000�0000000�00000004007�12142775451�021665� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET postgis.backend = 'sfcgal'; -- $Id: concave_hull.sql 9324 2012-02-27 22:08:12Z pramsey $ -- Tests to confirm the concave hull area is <= convex hull and -- covers the original geometry (can't use covers because always gives topo errors with 3.3 SELECT 'ST_ConcaveHull MultiPolygon 0.95', ST_Area(ST_Intersection(geom,ST_ConcaveHull( geom, 0.95) )) = ST_Area(geom) As encloses_geom, (ST_Area(ST_ConvexHull(geom)) - ST_Area(ST_ConcaveHull(geom, 0.95))) < (0.95 * ST_Area(ST_ConvexHull(geom) ) ) As reached_target FROM ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'), ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20) ) As geom; SELECT 'ST_ConcaveHull Lines 0.80', ST_Intersection(geom,ST_ConcaveHull( geom, 0.80) ) = geom As encloses_geom, (ST_Area(ST_ConvexHull(geom)) - ST_Area(ST_ConcaveHull(geom, 0.80))) < (0.80 * ST_Area(ST_ConvexHull(geom) ) ) As reached_target FROM ST_GeomFromText('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94, 130 62,122 40,156 32,162 76,172 88), (132 178,134 148,128 136,96 128,132 108,150 130, 170 142,174 110,156 96,158 90,158 88), (22 64,66 28,94 38,94 68,114 76,112 30, 132 10,168 18,178 34,186 52,184 74,190 100, 190 122,182 148,178 170,176 184,156 164,146 178, 132 186,92 182,56 158,36 150,62 150,76 128,88 118))') As geom; -- test holes vs. no holes - holes should still enclose but have smaller area than no holes -- SELECT 'ST_ConcaveHull Lines 0.80 holes', ST_Intersection(geom,ST_ConcaveHull( geom, 0.80, true) ) = geom As encloses_geom, ST_Area(ST_ConcaveHull(geom, 0.80, true)) < ST_Area(ST_ConcaveHull(geom, 0.80)) As reached_target FROM ST_GeomFromText('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94, 130 62,122 40,156 32,162 76,172 88), (132 178,134 148,128 136,96 128,132 108,150 130, 170 142,174 110,156 96,158 90,158 88), (22 64,66 28,94 38,94 68,114 76,112 30, 132 10,168 18,178 34,186 52,184 74,190 100, 190 122,182 148,178 170,176 184,156 164,146 178, 132 186,92 182,56 158,36 150,62 150,76 128,88 118))') As geom; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/regress_ogc_prep.sql�����������������������������������������0000644�0000000�0000000�00000045560�12142775451�022564� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- 9DIM Tests based on GEOS/JTS ones --- --- SET postgis.backend = 'sfcgal'; SELECT c, ST_Intersects(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('intersects099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('intersects100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('intersects101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('intersects102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('intersects103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('intersects104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); SELECT c, ST_Contains(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('contains099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('contains100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('contains101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('contains102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('contains103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('contains104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); SELECT c, ST_Covers(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('covers099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('covers100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('covers101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('covers102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('covers103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('covers104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); SELECT c, ST_ContainsProperly(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('containsproperly099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('containsproperly100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('containsproperly101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('containsproperly102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('containsproperly103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('containsproperly104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'intersects105', ST_Intersects(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'intersects106', ST_Intersects(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'intersects107', ST_Intersects(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'intersects108', ST_Intersects(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'contains105', ST_Contains(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'contains106', ST_Contains(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'contains107', ST_Contains(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'contains108', ST_Contains(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'containsproperly105', ST_ContainsProperly(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'containsproperly106', ST_ContainsProperly(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'containsproperly107', ST_ContainsProperly(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'containsproperly108', ST_ContainsProperly(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'covers105', ST_Covers(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'covers106', ST_Covers(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'covers107', ST_Covers(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'covers108', ST_Covers(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); SELECT c, ST_Intersects(p1, p2) AS intersects_p1p2, ST_Intersects(p2, p1) AS intersects_p2p1 FROM ( VALUES ('intersects200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('intersects203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('intersects204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('intersects205', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects206', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects207', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('intersects208', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('intersects209', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); SELECT c, ST_Contains(p1, p2) AS contains_p1p2, ST_Contains(p2, p1) AS contains_p2p1 FROM ( VALUES ('contains200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('contains203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('contains204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('contains205', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains206', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains207', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('contains208', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('contains209', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); SELECT c, ST_ContainsProperly(p1, p2) AS containsproperly_p1p2, ST_ContainsProperly(p2, p1) AS containsproperly_p2p1 FROM ( VALUES ('containsproperly200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('containsproperly203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('containsproperly204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('containsproperly205', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly206', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly207', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('containsproperly208', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('containsproperly209', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); SELECT c, ST_Covers(p1, p2) AS covers_p1p2, ST_Covers(p2, p1) AS covers_p2p1 FROM ( VALUES ('covers200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('covers203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('covers204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('covers205', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers206', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers207', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('covers208', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('covers209', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); -- UNEXPECTED GEOMETRY TYPES -- SELECT c, ST_Contains(p1, p2) AS contains_p1p2, ST_Contains(p2, p1) AS contains_p2p1, ST_Covers(p1, p2) AS covers_p1p2, ST_Covers(p2, p1) AS covers_p2p1, ST_Intersects(p1, p2) AS intersects_p1p2, ST_Intersects(p2, p1) AS intersects_p2p1, ST_ContainsProperly(p1, p2) AS containsproper_p1p2, ST_ContainsProperly(p2, p1) AS containsproper_p2p1 FROM ( VALUES ('types100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('types101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('types102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('types103', 'LINESTRING(0 0, 0 10, 10 10, 10 0)', 'POINT(5 5)'), ('types104', 'LINESTRING(0 0, 0 10, 10 10, 10 0)', 'POINT(5 5)'), ('types105', 'LINESTRING(0 0, 0 10, 10 10, 10 0)', 'POINT(5 5)'), ('types106', 'POINT(5 5)', 'POINT(5 5)'), ('types107', 'POINT(5 5)', 'POINT(5 5)'), ('types108', 'POINT(5 5)', 'POINT(5 5)'), ('types109', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ('types110', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ('types111', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ('types112', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(0 0, 0 10, 10 10, 10 0)'), ('types113', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(0 0, 0 10, 10 10, 10 0)'), ('types114', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(0 0, 0 10, 10 10, 10 0)') ) AS v(c,p1,p2); SELECT 'intersects310', ST_intersects('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'intersects311', ST_intersects('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); SELECT 'contains310', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'contains311', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); SELECT 'containsproperly310', ST_ContainsProperly('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'containsproperly311', ST_ContainsProperly('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); SELECT 'covers310', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'covers311', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); ������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/sfcgal/wmsservers_expected������������������������������������������0000644�0000000�0000000�00000000731�12142775451�022526� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Starting up MapServer/Geoserver tests... Setting up the data table... ALTER TABLE Running Geoserver 2.0 NG tests... Geoserver1|POLYGON Geoserver2|4326 Geoserver3|-500|AAAAAAMAAAABAAA Geoserver4|1 Geoserver5|25|AAAAAAMAAAABAAA Geoserver6|25|AAAAAAMAAAABAAA MapServer1|id MapServer2|-9465|AQcAAAABAAAAAQM|-9465 MapServer2|-9460|AQcAAAABAAAAAQM|-9460 MapServer3|id MapServer4|-9465|010700000001000|-9465 MapServer4|-9460|010700000001000|-9460 Removing the data table... Done. ���������������������������������������postgis-2.1.2+dfsg.orig/regress/affine.sql����������������������������������������������������������0000644�0000000�0000000�00000010002�11722777314�017207� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Tests for affine transformations -- Repeat all tests with the new function names. -- ST_Translate select 'ST_Translate', ST_asewkt(ST_Translate('POINT(0 0)'::geometry, 5, 12)); select 'ST_Translate', ST_asewkt(ST_Translate('POINT(0 0 0)'::geometry, -3, -7, 3)); -- ST_Scale select 'ST_Scale', ST_asewkt(ST_Scale('POINT(1 1)'::geometry, 5, 5)); select 'ST_Scale', ST_asewkt(ST_Scale('POINT(1 1)'::geometry, 3, 2)); select 'ST_Scale', ST_asewkt(ST_Scale('POINT(10 20 -5)'::geometry, 4, 2, -8)); -- ST_Rotate select 'ST_Rotate', ST_asewkt(ST_SnapToGrid(ST_Rotate('POINT(1 1)'::geometry, pi()/2, 10.0, 20.0), 0.1)); select 'ST_Rotate', ST_asewkt(ST_SnapToGrid(ST_Rotate('POINT(1 1)'::geometry, -pi()/2, -1.0, 2.0), 0.1)); select 'ST_Rotate', ST_asewkt(ST_SnapToGrid(ST_Rotate('POINT(1 1)'::geometry, pi()/2, 'POINT(10 10)'::geometry), 0.1)); select 'ST_Rotate', ST_asewkt(ST_SnapToGrid(ST_Rotate('POINT(1 1)'::geometry, pi()/2, ST_Centroid('LINESTRING(0 0, 1 0)'::geometry)), 0.1)); -- ST_RotateZ select 'ST_RotateZ', ST_asewkt(ST_SnapToGrid(ST_RotateZ('POINT(1 1)'::geometry, pi()), 0.1)); select 'ST_RotateZ', ST_asewkt(ST_SnapToGrid(ST_RotateZ('POINT(1 1)'::geometry, pi()/2), 0.1)); select 'ST_RotateZ', ST_asewkt(ST_SnapToGrid(ST_RotateZ('POINT(1 1)'::geometry, pi()+pi()/2), 0.1)); select 'ST_RotateZ', ST_asewkt(ST_SnapToGrid(ST_RotateZ('POINT(1 1)'::geometry, 2*pi()), 0.1)); -- ST_RotateY select 'ST_RotateY', ST_asewkt(ST_SnapToGrid(ST_RotateY('POINT(1 1 1)'::geometry, pi()), 0.1)); select 'ST_RotateY', ST_asewkt(ST_SnapToGrid(ST_RotateY('POINT(1 1 1)'::geometry, pi()/2), 0.1)); select 'ST_RotateY', ST_asewkt(ST_SnapToGrid(ST_RotateY('POINT(1 1 1)'::geometry, pi()+pi()/2), 0.1)); select 'ST_RotateY', ST_asewkt(ST_SnapToGrid(ST_RotateY('POINT(1 1 1)'::geometry, 2*pi()), 0.1)); -- ST_RotateX select 'ST_RotateX', ST_asewkt(ST_SnapToGrid(ST_RotateX('POINT(1 1 1)'::geometry, pi()), 0.1)); select 'ST_RotateX', ST_asewkt(ST_SnapToGrid(ST_RotateX('POINT(1 1 1)'::geometry, pi()/2), 0.1)); select 'ST_RotateX', ST_asewkt(ST_SnapToGrid(ST_RotateX('POINT(1 1 1)'::geometry, pi()+pi()/2), 0.1)); select 'ST_RotateX', ST_asewkt(ST_SnapToGrid(ST_RotateX('POINT(1 1 1)'::geometry, 2*pi()), 0.1)); -- ST_TransScale select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,1, 1, 1, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(2 2)'::geometry,1, 1, 1, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,-1, -1, -1, -1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,0, 1, 1, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,1, 0, 1, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,1, 1, 0, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,1, 1, 1, 0), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,2, 1, 1, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,1, 2, 1, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,1, 1, 2, 1), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,1, 1, 1, 2), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1)'::geometry,2, 3, 5, 7), 0.1)); select 'ST_TransScale', ST_asewkt(ST_snapToGrid(ST_TransScale('POINT(1 1 1)'::geometry,2, 3, 5, 7), 0.1)); -- postgis-users/2006-May/012119.html select 'transl_bbox', box2d(ST_Translate('LINESTRING(0 0, 1 1)'::geometry, 1, 0, 0)); select 'ST_Scale_bbox', box2d(ST_Scale('LINESTRING(1 0, 2 1)'::geometry, 2, 0)); select 'ST_Scale_bbox', box2d(ST_TransScale('LINESTRING(1 0, 2 1)'::geometry, 2, 1, 1, 1)); select 'ST_RotZ_bbox', box2d(ST_SnapToGrid(ST_RotateZ('LINESTRING(0 0, 1 0)'::geometry, pi()), 0.1)); select 'ST_RotY_bbox', box2d(ST_SnapToGrid(ST_RotateY('LINESTRING(0 0, 1 0)'::geometry, pi()), 0.1)); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_ogc_prep.sql������������������������������������������������0000644�0000000�0000000�00000045524�11722777314�021330� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- Tests for GEOS/JTS prepared predicates --- --- SELECT c, ST_Intersects(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('intersects099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('intersects100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('intersects101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('intersects102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('intersects103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('intersects104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); SELECT c, ST_Contains(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('contains099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('contains100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('contains101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('contains102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('contains103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('contains104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); SELECT c, ST_Covers(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('covers099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('covers100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('covers101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('covers102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('covers103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('covers104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); SELECT c, ST_ContainsProperly(ply, pt) FROM ( VALUES -- PIP - point within polygon (no cache) ('containsproperly099', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point within polygon ('containsproperly100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), -- PIP - point on polygon vertex ('containsproperly101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 0)'), -- PIP - point outside polygon ('containsproperly102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(-1 0)'), -- PIP - point on polygon edge ('containsproperly103', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 5)'), -- PIP - point in line with polygon edge ('containsproperly104', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(0 12)') ) AS v(c,ply,pt); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'intersects105', ST_Intersects(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'intersects106', ST_Intersects(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'intersects107', ST_Intersects(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'intersects108', ST_Intersects(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'contains105', ST_Contains(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'contains106', ST_Contains(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'contains107', ST_Contains(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'contains108', ST_Contains(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'containsproperly105', ST_ContainsProperly(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'containsproperly106', ST_ContainsProperly(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'containsproperly107', ST_ContainsProperly(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'containsproperly108', ST_ContainsProperly(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, poly first SELECT 'covers105', ST_Covers(p, ST_GeomFromText('POINT(521513 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - point vertically aligned with polygon vertex, point first SELECT 'covers106', ST_Covers(ST_GeomFromText('POINT(521513 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, poly first SELECT 'covers107', ST_Covers(p, ST_GeomFromText('POINT(521543 5377804)', 32631)) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); -- PIP - repeated vertex, point first SELECT 'covers108', ST_Covers(ST_GeomFromText('POINT(521543 5377804)', 32631), p) FROM ( VALUES (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)), (ST_GeomFromText('POLYGON((521526 5377783, 521482 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) ) AS v(p); SELECT c, ST_Intersects(p1, p2) AS intersects_p1p2, ST_Intersects(p2, p1) AS intersects_p2p1 FROM ( VALUES ('intersects200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('intersects203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('intersects204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('intersects205', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects206', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('intersects207', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('intersects208', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('intersects209', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); SELECT c, ST_Contains(p1, p2) AS contains_p1p2, ST_Contains(p2, p1) AS contains_p2p1 FROM ( VALUES ('contains200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('contains203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('contains204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('contains205', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains206', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('contains207', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('contains208', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('contains209', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); SELECT c, ST_ContainsProperly(p1, p2) AS containsproperly_p1p2, ST_ContainsProperly(p2, p1) AS containsproperly_p2p1 FROM ( VALUES ('containsproperly200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('containsproperly203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('containsproperly204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('containsproperly205', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly206', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('containsproperly207', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('containsproperly208', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('containsproperly209', 'POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); SELECT c, ST_Covers(p1, p2) AS covers_p1p2, ST_Covers(p2, p1) AS covers_p2p1 FROM ( VALUES ('covers200', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers201', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers202', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('covers203', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('covers204', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))'), ('covers205', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers206', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'), ('covers207', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'), ('covers208', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((-5 -5, 5 -5, 5 5, -5 5, -5 -5))'), ('covers209', 'POLYGON((0 0, 0 10, 10 10, 11 0, 0 0))', 'POLYGON((-2 -2, -2 -3, -3 -3, -3 -2, -2 -2))') ) AS v(c,p1,p2); -- UNEXPECTED GEOMETRY TYPES -- SELECT c, ST_Contains(p1, p2) AS contains_p1p2, ST_Contains(p2, p1) AS contains_p2p1, ST_Covers(p1, p2) AS covers_p1p2, ST_Covers(p2, p1) AS covers_p2p1, ST_Intersects(p1, p2) AS intersects_p1p2, ST_Intersects(p2, p1) AS intersects_p2p1, ST_ContainsProperly(p1, p2) AS containsproper_p1p2, ST_ContainsProperly(p2, p1) AS containsproper_p2p1 FROM ( VALUES ('types100', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('types101', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('types102', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POINT(5 5)'), ('types103', 'LINESTRING(0 0, 0 10, 10 10, 10 0)', 'POINT(5 5)'), ('types104', 'LINESTRING(0 0, 0 10, 10 10, 10 0)', 'POINT(5 5)'), ('types105', 'LINESTRING(0 0, 0 10, 10 10, 10 0)', 'POINT(5 5)'), ('types106', 'POINT(5 5)', 'POINT(5 5)'), ('types107', 'POINT(5 5)', 'POINT(5 5)'), ('types108', 'POINT(5 5)', 'POINT(5 5)'), ('types109', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ('types110', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ('types111', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ('types112', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(0 0, 0 10, 10 10, 10 0)'), ('types113', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(0 0, 0 10, 10 10, 10 0)'), ('types114', 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(0 0, 0 10, 10 10, 10 0)') ) AS v(c,p1,p2); SELECT 'intersects310', ST_intersects('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'intersects311', ST_intersects('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); SELECT 'contains310', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'contains311', ST_Contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); SELECT 'containsproperly310', ST_ContainsProperly('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'containsproperly311', ST_ContainsProperly('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); SELECT 'covers310', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)'),('LINESTRING(1 10, 9 10, 9 8)') ) AS v(p); SELECT 'covers311', ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', p) FROM ( VALUES ('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)'),('LINESTRING(1 10, 10 10, 10 8)') ) AS v(p); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/polyhedralsurface_expected������������������������������������������0000644�0000000�0000000�00000000433�11722777314�022565� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dimension_01|2 dimension_02|2 dimension_03|3 dimension_04|3 dimension_05|3 dimension_06|3 dimension_07|2 dimension_08|2 numpatches_01|0 numpatches_02|1 numpatches_03|4 patchN_01| patchN_02|POLYGON((0 0,0 0,0 1,0 0)) patchN_03| patchN_04| patchN_05|POLYGON((0 0 0,0 1 0,1 0 0,0 0 0)) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/split.sql�����������������������������������������������������������0000644�0000000�0000000�00000011616�12075241565�017122� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Split line by point of different SRID select st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;POINT(5 1)'); -- Split line by point on the line interior select '1',st_asewkt(st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(5 0)')); select '1.1',st_asewkt(st_split('SRID=10;LINESTRING(10 0, 0 0)', 'SRID=10;POINT(5 0)')); -- Split line by point on the line boundary select '2',st_asewkt(st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(10 0)')); -- Split line by point on the line exterior select '3',st_asewkt(st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(5 1)')); -- Split line by line of different SRID select st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;LINESTRING(5 1, 10 1)'); -- Split line by disjoint line select '4', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(20 0, 20 20)')); -- Split line by touching line select '5', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(10 -5, 10 5)')); -- Split line by crossing line select '6', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 -5, 5 5)')); -- Split line by multiply-crossing line select '7', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0, 10 10, 0 10, 0 20, 10 20)', 'SRID=10;LINESTRING(5 -5, 5 25)')); -- Split line by overlapping line (1) select '8.1', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 0, 20 0)')); -- Split line by contained line (2) select '8.2', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 0, 8 0)')); -- Split exterior-only polygon by crossing line select '20', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 'SRID=12;LINESTRING(5 -5, 5 15)')); -- Split single-hole polygon by line crossing both exterior and hole select '21', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 8, 2 8, 2 2))', 'SRID=12;LINESTRING(5 -5, 5 15)')); -- Split single-hole polygon by line crossing only exterior select '22', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 2, 8 2, 8 8, 5 8, 5 2))', 'SRID=12;LINESTRING(2 -5, 2 15)')); -- Split double-hole polygon by line crossing exterior and both holes select '23', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6))', 'SRID=12;LINESTRING(5 -5, 5 15)')); -- Split multiline by line crossing both select '30', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 -5, 5 10)')); -- Split multiline by line crossing only one of them select '31', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 -5, 5 2)')); -- Split multiline by disjoint line select '32', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 10, 5 20)')); -- Split multiline by point on one of them select '40', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;POINT(5 0)')); -- Split multipolygon by line select '50', st_asewkt(ST_Split('SRID=12;MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6)),((20 0,20 10, 30 10, 30 0, 20 0),(25 5, 28 5, 25 8, 25 5)))', 'SRID=12;LINESTRING(5 -5, 5 15)')); -- Split geometrycollection by line select '60', st_asewkt(ST_Split('SRID=12;GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6)),((20 0,20 10, 30 10, 30 0, 20 0),(25 5, 28 5, 25 8, 25 5))),MULTILINESTRING((0 0, 10 0),(0 5, 10 5)))', 'SRID=12;LINESTRING(5 -5, 5 15)')); -- Split 3d line by 2d line select '70', st_asewkt(ST_Split('SRID=11;LINESTRING(1691983.26 4874594.81 312.24, 1691984.86 4874593.69 312.24, 1691979.54 4874586.09 312.24, 1691978.03 4874587.16 298.36)', 'SRID=11;LINESTRING(1691978.0 4874589.0,1691982.0 4874588.53, 1691982.0 4874591.0)')); -- Split collapsed line by point -- See http://trac.osgeo.org/postgis/ticket/1772 select '80', st_asewkt(ST_Split('LINESTRING(0 1, 0 1, 0 1)', 'POINT(0 1)')); select '81', st_asewkt(ST_Split('LINESTRING(0 1, 0 1)', 'POINT(0 1)')); -- Split long line by vertex point -- See http://trac.osgeo.org/postgis/ticket/2173 with inp as ( SELECT '01020000001000000034030F8FB15866C0F2311FFD3B9A53C0571C87CF1BB65BC0182DB847DB9052C0EBD57BDEEBF658C05CA18B9FA81B52C074384E71C20552C05AD308B7C38351C0A4B3920AA7914CC0ACD200FB29784FC0F8892AEE70E14040C0C8143E325651C0234604DC104E5440EF10F2807BF850C08FEE52B6CAE15F4002BF1C6676B450C0051A57A65BB061405B9E445AEC9F50C05AF3E1D5815665405E3A4A2BB6CF51C0591DE7ECD21F66400D33BFE91C7E53C0000000E0FF7F6640000000C04E9353C0000000000080664000000000008056C000000000008066C000000000008056C000000000008066C0000000E04D9353C034030F8FB15866C0F2311FFD3B9A53C0' ::geometry as g, 14 as p ) select '82', st_equals(g, st_union( st_geometryn(st_split(g, st_pointn(g,p)), 1), st_geometryn(st_split(g, st_pointn(g,p)), 2))) from inp; -- TODO: split line by collapsed line ������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/�������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016503� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NotReallyMultiPoint.select.sql�������������������������������0000644�0000000�0000000�00000000103�11764431755�024444� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(ST_SnapToGrid(the_geom,0.00001)) from loadedshp; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ.shx����������������������������������������������0000644�0000000�0000000�00000000154�10462153143�021461� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�������������������ð¿������"@������ð?������4À�������@�����À^À������@���2���T��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point.shx����������������������������������������������������0000644�0000000�0000000�00000000174�10462153143�020316� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������>è�������������������ð¿������"@������ð?�����������������������������������2��� ���@��� ���N��� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ-G.select.expected��������������������������������0000644�0000000�0000000�00000000067�11540721245�024127� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;MULTIPOINT(0 1 2 3,9 -1 -2 -3,9 -1 -20 -123) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts.select.sql��������������������������������������0000644�0000000�0000000�00000000106�11722777314�023133� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(ST_SnapToGrid(the_geom,0.00000001)) from loadedshp; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon.select.expected�����������������������������������0000644�0000000�0000000�00000000206�11540676357�023524� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon.shp����������������������������������������������0000644�0000000�0000000�00000000750�11540141776�021357� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint.select.sql��������������������������������0000644�0000000�0000000�00000000103�11764431755�024257� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(ST_SnapToGrid(the_geom,0.00001)) from loadedshp; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NotReallyMultiPoint.shp.expected�����������������������������0000644�0000000�0000000�00000010344�11540676357�024772� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������rè�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������������I Iº!Aƒ †)AI Iº!Aƒ †)A���I Iº!Aƒ †)A���������ìF“ÛçA¼Æ¼ƒfŠ"AìF“ÛçA¼Æ¼ƒfŠ"A���ìF“ÛçA¼Æ¼ƒfŠ"A���������§èYíK>#AJìøêÀ A§èYíK>#AJìøêÀ A���§èYíK>#AJìøêÀ A���������ŒûøAAëk AkAŒûøAAëk AkA���ŒûøAAëk AkA���������Ø“•ͺ¿A”7püÀ{&AØ“•ͺ¿A”7püÀ{&A���Ø“•ͺ¿A”7püÀ{&A���������CÔoÊ„A ¿ÖŒþÉ"ACÔoÊ„A ¿ÖŒþÉ"A���CÔoÊ„A ¿ÖŒþÉ"A���������±¾©ÇUË AK$"€1IA±¾©ÇUË AK$"€1IA���±¾©ÇUË AK$"€1IA���������¿:R­â{ARÄñ?@wA¿:R­â{ARÄñ?@wA���¿:R­â{ARÄñ?@wA��� ������Ç Œ•Z!Aûäx…¸AÇ Œ•Z!Aûäx…¸A���Ç Œ•Z!Aûäx…¸A��� ������üÍ!:òú AÒœ«žJA&AüÍ!:òú AÒœ«žJA&A���üÍ!:òú AÒœ«žJA&A��� ������°LÚÞ]A£Xþ{5q%A°LÚÞ]A£Xþ{5q%A���°LÚÞ]A£Xþ{5q%A��� ������Ù‚Åàc©!A¬N=ß¡ù&AÙ‚Åàc©!A¬N=ß¡ù&A���Ù‚Åàc©!A¬N=ß¡ù&A��� ������² ‡7͇!Avï„d²x'A² ‡7͇!Avï„d²x'A���² ‡7͇!Avï„d²x'A���������êY·³° A-† Â9e$AêY·³° A-† Â9e$A���êY·³° A-† Â9e$A���������aW'nAœq3Ži&AaW'nAœq3Ži&A���aW'nAœq3Ži&A���������´[·s¿’AX)$g80A´[·s¿’AX)$g80A���´[·s¿’AX)$g80A���������7ÖÎ*md!A̳oÖ@A7ÖÎ*md!A̳oÖ@A���7ÖÎ*md!A̳oÖ@A���������NeÀ°[HAÏb. Œ\%ANeÀ°[HAÏb. Œ\%A���NeÀ°[HAÏb. Œ\%A���������Ì* zr"Aú×ÿ_™&AÌ* zr"Aú×ÿ_™&A���Ì* zr"Aú×ÿ_™&A���������’û†›îÿAм%A’û†›îÿAм%A���’û†›îÿAм%A���������’ä”÷XvAé\!]d×A’ä”÷XvAé\!]d×A���’ä”÷XvAé\!]d×A���������½Z(f¢!A*õåÝY0%A½Z(f¢!A*õåÝY0%A���½Z(f¢!A*õåÝY0%A���������¡X>Ĥ•!Avæz“àÑ%A¡X>Ĥ•!Avæz“àÑ%A���¡X>Ĥ•!Avæz“àÑ%A��������� râñ !A]QÇx-<%A râñ !A]QÇx-<%A��� râñ !A]QÇx-<%A���������Ž èŽWÁ!A‡²í¸,%AŽ èŽWÁ!A‡²í¸,%A���Ž èŽWÁ!A‡²í¸,%A��������� —ÒGœ~A.×"ò5 A —ÒGœ~A.×"ò5 A��� —ÒGœ~A.×"ò5 A���������þàÞÆf×!Aõ (Ù•(%AþàÞÆf×!Aõ (Ù•(%A���þàÞÆf×!Aõ (Ù•(%A���������MË|bL9 AròðÎÞ%AMË|bL9 AròðÎÞ%A���MË|bL9 AròðÎÞ%A���������=Í/»®Â!A60%A=Í/»®Â!A60%A���=Í/»®Â!A60%A���������®d$‹@;A äºÙÏ A®d$‹@;A äºÙÏ A���®d$‹@;A äºÙÏ A���������ç‚D.?' AÔ÷*ý¤"Aç‚D.?' AÔ÷*ý¤"A���ç‚D.?' AÔ÷*ý¤"A��� ������ ¾7taÁ!Aõ5þgC<%A ¾7taÁ!Aõ5þgC<%A��� ¾7taÁ!Aõ5þgC<%A���!������#RÁß9ÏA:-W_ªË"A#RÁß9ÏA:-W_ªË"A���#RÁß9ÏA:-W_ªË"A���"������^­ÿOHÿ"AVÏ}Ìô&A^­ÿOHÿ"AVÏ}Ìô&A���^­ÿOHÿ"AVÏ}Ìô&A���#������<Ï«ãØRAPW¯#(A<Ï«ãØRAPW¯#(A���<Ï«ãØRAPW¯#(A���$������7ŠV©®'"A‘ü´ß© A7ŠV©®'"A‘ü´ß© A���7ŠV©®'"A‘ü´ß© A���%������ýÂÞGrïAÙ)ûýõô AýÂÞGrïAÙ)ûýõô A���ýÂÞGrïAÙ)ûýõô A���&������ô®Š‚{"AadëÞ'Aô®Š‚{"AadëÞ'A���ô®Š‚{"AadëÞ'A���'������mhY–™iAüàWÒAmhY–™iAüàWÒA���mhY–™iAüàWÒA���(������á\û¼„"A³w¾¬OÜ$Aá\û¼„"A³w¾¬OÜ$A���á\û¼„"A³w¾¬OÜ$A���)������jzûA¬äœ×' AjzûA¬äœ×' A���jzûA¬äœ×' A���*������5†%O ß!A](3ù*A5†%O ß!A](3ù*A���5†%O ß!A](3ù*A���+������wã“áHEAæób‚\B%Awã“áHEAæób‚\B%A���wã“áHEAæób‚\B%A���,������§'TA%u o˜Ú A§'TA%u o˜Ú A���§'TA%u o˜Ú A���-������å[©æC'!A Ÿö±¾>%Aå[©æC'!A Ÿö±¾>%A���å[©æC'!A Ÿö±¾>%A���.������¸MœØõuA°&¨°_‡A¸MœØõuA°&¨°_‡A���¸MœØõuA°&¨°_‡A���/������p›m~A³î–S%"Ap›m~A³î–S%"A���p›m~A³î–S%"A���0������ˆrÜÞ´A!AŽN?JŽ$AˆrÜÞ´A!AŽN?JŽ$A���ˆrÜÞ´A!AŽN?JŽ$A���1������÷i sAÙD9™ò%A÷i sAÙD9™ò%A���÷i sAÙD9™ò%A���2������’ûÿÄ·"A#g½~ó%A’ûÿÄ·"A#g½~ó%A���’ûÿÄ·"A#g½~ó%A���3������Ò©’ØAÐÁpÇ7AÒ©’ØAÐÁpÇ7A���Ò©’ØAÐÁpÇ7A���4������ôkØohtAWì%«S AôkØohtAWì%«S A���ôkØohtAWì%«S A���5������ÒosÄAEknÉ)‰"AÒosÄAEknÉ)‰"A���ÒosÄAEknÉ)‰"A���6������Ukm!æ¤"Aý1�ãq%AUkm!æ¤"Aý1�ãq%A���Ukm!æ¤"Aý1�ãq%A���7������t&—ö9¡!A`o®]8%At&—ö9¡!A`o®]8%A���t&—ö9¡!A`o®]8%A���8������í^µÙ� #A‡œB™£G%Aí^µÙ� #A‡œB™£G%A���í^µÙ� #A‡œB™£G%A���9������çõùÏÕAìꂾ#AçõùÏÕAìꂾ#A���çõùÏÕAìꂾ#A���:������*ÙªôA“V~¤"A*ÙªôA“V~¤"A���*ÙªôA“V~¤"A���;������ˆë½Ú/!A Êˤú&Aˆë½Ú/!A Êˤú&A���ˆë½Ú/!A Êˤú&A���<������-Û#û}8A€ÎbXc÷A-Û#û}8A€ÎbXc÷A���-Û#û}8A€ÎbXc÷A���=������ºi\¾%!A …°YÆAºi\¾%!A …°YÆA���ºi\¾%!A …°YÆA���>������)ùqÎ!A¢sÿÚÑ.'A)ùqÎ!A¢sÿÚÑ.'A���)ùqÎ!A¢sÿÚÑ.'A���?������² @³k²A|¢Jn¬Ö(A² @³k²A|¢Jn¬Ö(A���² @³k²A|¢Jn¬Ö(A���@������“ÛÜ{ö"AZó•ù%A“ÛÜ{ö"AZó•ù%A���“ÛÜ{ö"AZó•ù%A���A������ÆÎ'£¿Aªww)ñ"AÆÎ'£¿Aªww)ñ"A���ÆÎ'£¿Aªww)ñ"A���B������ÉŽOAý¨A‘%AÉŽOAý¨A‘%A���ÉŽOAý¨A‘%A��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint.shp�����������������������������������������������0000644�0000000�0000000�00000000304�11722777314�021330� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������bè�������������������ð¿������"@������ð?��������������������������������������,�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint.shp.expected��������������������������������������0000644�0000000�0000000�00000000304�11540676357�023133� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������bè�������������������ð¿������"@������ð?��������������������������������������,�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM-G.shp.expected������������������������������������������0000644�0000000�0000000�00000000534�11540722277�022033� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������®è���������������������������$@������$@����������������������ð?������@������x�������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@������ð?������@������ð?�������@������@������@������@������@������@��������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ-w.select.expected���������������������������������������0000644�0000000�0000000�00000002143�11540676357�022622� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������01050000C00300000001020000C00200000000000000000000000000000000000000000000000000F03F0000000000002240000000000000F03F000000000000F03F0000000000000040000000000000204001020000C0020000000000000000000840000000000000084000000000000008400000000000001C40000000000000104000000000000010400000000000001040000000000000184001020000C00300000000000000000024400000000000002440000000000000144000000000000014400000000000001440000000000000144000000000000018400000000000001040000000000000084000000000000008400000000000001C400000000000001040 00C00000050000000300C000000200000002000000000000000000000000000000003FF000000000000040220000000000003FF00000000000003FF00000000000004000000000000000402000000000000000C000000200000002400800000000000040080000000000004008000000000000401C000000000000401000000000000040100000000000004010000000000000401800000000000000C0000002000000034024000000000000402400000000000040140000000000004014000000000000401400000000000040140000000000004018000000000000401000000000000040080000000000004008000000000000401C0000000000004010000000000000 MULTILINESTRING((0 0 1 9,1 1 2 8),(3 3 3 7,4 4 4 6),(10 10 5 5,5 5 6 4,3 3 7 4)) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint.select.expected�����������������������������������0000644�0000000�0000000�00000000032�11540676357�023616� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINT(0 1,9 -1,9 -1) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon.opts���������������������������������������������0000644�0000000�0000000�00000000647�11540141776�021557� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# You cannot create a test tablespace because tablespaces need to be directories that # are owned by the postgres user, which is rarely the same as the user running the test, # and you can't chown without sudo, so we gave up on trying to have a test that proves # the -T and -X parameters work. However we can at least test that they don't cause # any problems, which is what this test is for. -T pg_default -X pg_default �����������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint.select.expected���������������������������������0000644�0000000�0000000�00000000043�11540676357�024112� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0 1) POINT(9 -1) POINT(9 -1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM-G.shp.expected����������������������������������������0000644�0000000�0000000�00000000320�11540722277�022410� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������hè�������������������ð¿������"@������ð?���������������������À^À������@�����������������������ð?������@���������������"@������ð¿������À���������������"@������ð¿�����À^À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon.shp.expected��������������������������������������0000644�0000000�0000000�00000000750�11540676357�023056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM-G.select.expected��������������������������������0000644�0000000�0000000�00000000057�11540721245�024111� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;MULTIPOINTM(0 1 3,9 -1 -3,9 -1 -123) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ.select.expected�����������������������������������������0000644�0000000�0000000�00000002143�11540676357�022356� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������01050000C00300000001020000C00200000000000000000000000000000000000000000000000000F03F0000000000002240000000000000F03F000000000000F03F0000000000000040000000000000204001020000C0020000000000000000000840000000000000084000000000000008400000000000001C40000000000000104000000000000010400000000000001040000000000000184001020000C00300000000000000000024400000000000002440000000000000144000000000000014400000000000001440000000000000144000000000000018400000000000001040000000000000084000000000000008400000000000001C400000000000001040 00C00000050000000300C000000200000002000000000000000000000000000000003FF000000000000040220000000000003FF00000000000003FF00000000000004000000000000000402000000000000000C000000200000002400800000000000040080000000000004008000000000000401C000000000000401000000000000040100000000000004010000000000000401800000000000000C0000002000000034024000000000000402400000000000040140000000000004014000000000000401400000000000040140000000000004018000000000000401000000000000040080000000000004008000000000000401C0000000000004010000000000000 MULTILINESTRING((0 0 1 9,1 1 2 8),(3 3 3 7,4 4 4 6),(10 10 5 5,5 5 6 4,3 3 7 4)) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ-G.select.expected���������������������������������������0000644�0000000�0000000�00000002175�11540721245�022532� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������01050000E0E61000000300000001020000C00200000000000000000000000000000000000000000000000000F03F0000000000002240000000000000F03F000000000000F03F0000000000000040000000000000204001020000C0020000000000000000000840000000000000084000000000000008400000000000001C40000000000000104000000000000010400000000000001040000000000000184001020000C00300000000000000000024400000000000002440000000000000144000000000000014400000000000001440000000000000144000000000000018400000000000001040000000000000084000000000000008400000000000001C400000000000001040 00E0000005000010E60000000300C000000200000002000000000000000000000000000000003FF000000000000040220000000000003FF00000000000003FF00000000000004000000000000000402000000000000000C000000200000002400800000000000040080000000000004008000000000000401C000000000000401000000000000040100000000000004010000000000000401800000000000000C0000002000000034024000000000000402400000000000040140000000000004014000000000000401400000000000040140000000000004018000000000000401000000000000040080000000000004008000000000000401C0000000000004010000000000000 SRID=4326;MULTILINESTRING((0 0 1 9,1 1 2 8),(3 3 3 7,4 4 4 6),(10 10 5 5,5 5 6 4,3 3 7 4)) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog.dbf�����������������������������������������0000644�0000000�0000000�00000000144�11722777314�022415� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������oB���!���������������������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM.select.expected���������������������������������������0000644�0000000�0000000�00000000060�11611631125�022700� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINTM(0 1 3) POINTM(9 -1 -123) POINTM(9 -1 -3) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog.opts����������������������������������������0000644�0000000�0000000�00000000262�11673707266�022654� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This happens to be a multipoint shapefile that has only single points, so use -S. # It is in NJ State Plane NAD83, using the -G flag will reproject to 4326. -S -s 2260:4326 -G ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point.shp����������������������������������������������������0000644�0000000�0000000�00000000270�11722777314�020317� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������\è�������������������ð¿������"@������ð?�������������������������������������� �����������������ð?������ ���������"@������ð¿������ ���������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM-w.select.expected���������������������������������������0000644�0000000�0000000�00000001566�11540676357�022615� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������01050000400300000001020000400200000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040010200004002000000000000000000084000000000000008400000000000000840000000000000104000000000000010400000000000001040010200004003000000000000000000244000000000000024400000000000001440000000000000144000000000000014400000000000001840000000000000084000000000000008400000000000001C40 004000000500000003004000000200000002000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000400000000000000000400000020000000240080000000000004008000000000000400800000000000040100000000000004010000000000000401000000000000000400000020000000340240000000000004024000000000000401400000000000040140000000000004014000000000000401800000000000040080000000000004008000000000000401C000000000000 MULTILINESTRINGM((0 0 1,1 1 2),(3 3 3,4 4 4),(10 10 5,5 5 6,3 3 7)) ������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM-w.select.expected�������������������������������������0000644�0000000�0000000�00000000060�11611631125�023144� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINTM(0 1 3) POINTM(9 -1 -123) POINTM(9 -1 -3) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM.shx�����������������������������������������������������0000644�0000000�0000000�00000000154�10462153143�020045� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è���������������������������$@������$@����������������������ð?������@���2���x��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint.shp.expected������������������������������������0000644�0000000�0000000�00000000270�11540676357�023427� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������\è�������������������ð¿������"@������ð?�������������������������������������� �����������������ð?������ ���������"@������ð¿������ ���������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM.select.expected�����������������������������������������0000644�0000000�0000000�00000001566�11540676357�022351� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������01050000400300000001020000400200000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040010200004002000000000000000000084000000000000008400000000000000840000000000000104000000000000010400000000000001040010200004003000000000000000000244000000000000024400000000000001440000000000000144000000000000014400000000000001840000000000000084000000000000008400000000000001C40 004000000500000003004000000200000002000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000400000000000000000400000020000000240080000000000004008000000000000400800000000000040100000000000004010000000000000401000000000000000400000020000000340240000000000004024000000000000401400000000000040140000000000004014000000000000401800000000000040080000000000004008000000000000401C000000000000 MULTILINESTRINGM((0 0 1,1 1 2),(3 3 3,4 4 4),(10 10 5,5 5 6,3 3 7)) ������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon.select.expected����������������������������������0000644�0000000�0000000�00000000206�11540676357�023650� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point.dbf����������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020254� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema-pre.sql��������������������������������������0000644�0000000�0000000�00000000025�11722777314�023063� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE SCHEMA pgreg; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ.dbf�������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020744� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint.opts��������������������������������������������0000644�0000000�0000000�00000000462�11540170177�022012� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Ideally we'd use a shapefile with an invalid geometry, so you could see that the # "don't use a transaction" version successfully inserts every row except that one. # However as of this writing, we don't have such a shapefile, so this test just # shows that it doesn't break anything to use the flag. -e ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Latin1.opts��������������������������������������������������0000644�0000000�0000000�00000000101�11540727326�020536� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# The DBF contains a string with Norweigan characters. -W LATIN1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NotReallyMultiPoint.shp��������������������������������������0000644�0000000�0000000�00000010344�11540676357�023172� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������rè�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������������I Iº!Aƒ †)AI Iº!Aƒ †)A���I Iº!Aƒ †)A���������ìF“ÛçA¼Æ¼ƒfŠ"AìF“ÛçA¼Æ¼ƒfŠ"A���ìF“ÛçA¼Æ¼ƒfŠ"A���������§èYíK>#AJìøêÀ A§èYíK>#AJìøêÀ A���§èYíK>#AJìøêÀ A���������ŒûøAAëk AkAŒûøAAëk AkA���ŒûøAAëk AkA���������Ø“•ͺ¿A”7püÀ{&AØ“•ͺ¿A”7püÀ{&A���Ø“•ͺ¿A”7püÀ{&A���������CÔoÊ„A ¿ÖŒþÉ"ACÔoÊ„A ¿ÖŒþÉ"A���CÔoÊ„A ¿ÖŒþÉ"A���������±¾©ÇUË AK$"€1IA±¾©ÇUË AK$"€1IA���±¾©ÇUË AK$"€1IA���������¿:R­â{ARÄñ?@wA¿:R­â{ARÄñ?@wA���¿:R­â{ARÄñ?@wA��� ������Ç Œ•Z!Aûäx…¸AÇ Œ•Z!Aûäx…¸A���Ç Œ•Z!Aûäx…¸A��� ������üÍ!:òú AÒœ«žJA&AüÍ!:òú AÒœ«žJA&A���üÍ!:òú AÒœ«žJA&A��� ������°LÚÞ]A£Xþ{5q%A°LÚÞ]A£Xþ{5q%A���°LÚÞ]A£Xþ{5q%A��� ������Ù‚Åàc©!A¬N=ß¡ù&AÙ‚Åàc©!A¬N=ß¡ù&A���Ù‚Åàc©!A¬N=ß¡ù&A��� ������² ‡7͇!Avï„d²x'A² ‡7͇!Avï„d²x'A���² ‡7͇!Avï„d²x'A���������êY·³° A-† Â9e$AêY·³° A-† Â9e$A���êY·³° A-† Â9e$A���������aW'nAœq3Ži&AaW'nAœq3Ži&A���aW'nAœq3Ži&A���������´[·s¿’AX)$g80A´[·s¿’AX)$g80A���´[·s¿’AX)$g80A���������7ÖÎ*md!A̳oÖ@A7ÖÎ*md!A̳oÖ@A���7ÖÎ*md!A̳oÖ@A���������NeÀ°[HAÏb. Œ\%ANeÀ°[HAÏb. Œ\%A���NeÀ°[HAÏb. Œ\%A���������Ì* zr"Aú×ÿ_™&AÌ* zr"Aú×ÿ_™&A���Ì* zr"Aú×ÿ_™&A���������’û†›îÿAм%A’û†›îÿAм%A���’û†›îÿAм%A���������’ä”÷XvAé\!]d×A’ä”÷XvAé\!]d×A���’ä”÷XvAé\!]d×A���������½Z(f¢!A*õåÝY0%A½Z(f¢!A*õåÝY0%A���½Z(f¢!A*õåÝY0%A���������¡X>Ĥ•!Avæz“àÑ%A¡X>Ĥ•!Avæz“àÑ%A���¡X>Ĥ•!Avæz“àÑ%A��������� râñ !A]QÇx-<%A râñ !A]QÇx-<%A��� râñ !A]QÇx-<%A���������Ž èŽWÁ!A‡²í¸,%AŽ èŽWÁ!A‡²í¸,%A���Ž èŽWÁ!A‡²í¸,%A��������� —ÒGœ~A.×"ò5 A —ÒGœ~A.×"ò5 A��� —ÒGœ~A.×"ò5 A���������þàÞÆf×!Aõ (Ù•(%AþàÞÆf×!Aõ (Ù•(%A���þàÞÆf×!Aõ (Ù•(%A���������MË|bL9 AròðÎÞ%AMË|bL9 AròðÎÞ%A���MË|bL9 AròðÎÞ%A���������=Í/»®Â!A60%A=Í/»®Â!A60%A���=Í/»®Â!A60%A���������®d$‹@;A äºÙÏ A®d$‹@;A äºÙÏ A���®d$‹@;A äºÙÏ A���������ç‚D.?' AÔ÷*ý¤"Aç‚D.?' AÔ÷*ý¤"A���ç‚D.?' AÔ÷*ý¤"A��� ������ ¾7taÁ!Aõ5þgC<%A ¾7taÁ!Aõ5þgC<%A��� ¾7taÁ!Aõ5þgC<%A���!������#RÁß9ÏA:-W_ªË"A#RÁß9ÏA:-W_ªË"A���#RÁß9ÏA:-W_ªË"A���"������^­ÿOHÿ"AVÏ}Ìô&A^­ÿOHÿ"AVÏ}Ìô&A���^­ÿOHÿ"AVÏ}Ìô&A���#������<Ï«ãØRAPW¯#(A<Ï«ãØRAPW¯#(A���<Ï«ãØRAPW¯#(A���$������7ŠV©®'"A‘ü´ß© A7ŠV©®'"A‘ü´ß© A���7ŠV©®'"A‘ü´ß© A���%������ýÂÞGrïAÙ)ûýõô AýÂÞGrïAÙ)ûýõô A���ýÂÞGrïAÙ)ûýõô A���&������ô®Š‚{"AadëÞ'Aô®Š‚{"AadëÞ'A���ô®Š‚{"AadëÞ'A���'������mhY–™iAüàWÒAmhY–™iAüàWÒA���mhY–™iAüàWÒA���(������á\û¼„"A³w¾¬OÜ$Aá\û¼„"A³w¾¬OÜ$A���á\û¼„"A³w¾¬OÜ$A���)������jzûA¬äœ×' AjzûA¬äœ×' A���jzûA¬äœ×' A���*������5†%O ß!A](3ù*A5†%O ß!A](3ù*A���5†%O ß!A](3ù*A���+������wã“áHEAæób‚\B%Awã“áHEAæób‚\B%A���wã“áHEAæób‚\B%A���,������§'TA%u o˜Ú A§'TA%u o˜Ú A���§'TA%u o˜Ú A���-������å[©æC'!A Ÿö±¾>%Aå[©æC'!A Ÿö±¾>%A���å[©æC'!A Ÿö±¾>%A���.������¸MœØõuA°&¨°_‡A¸MœØõuA°&¨°_‡A���¸MœØõuA°&¨°_‡A���/������p›m~A³î–S%"Ap›m~A³î–S%"A���p›m~A³î–S%"A���0������ˆrÜÞ´A!AŽN?JŽ$AˆrÜÞ´A!AŽN?JŽ$A���ˆrÜÞ´A!AŽN?JŽ$A���1������÷i sAÙD9™ò%A÷i sAÙD9™ò%A���÷i sAÙD9™ò%A���2������’ûÿÄ·"A#g½~ó%A’ûÿÄ·"A#g½~ó%A���’ûÿÄ·"A#g½~ó%A���3������Ò©’ØAÐÁpÇ7AÒ©’ØAÐÁpÇ7A���Ò©’ØAÐÁpÇ7A���4������ôkØohtAWì%«S AôkØohtAWì%«S A���ôkØohtAWì%«S A���5������ÒosÄAEknÉ)‰"AÒosÄAEknÉ)‰"A���ÒosÄAEknÉ)‰"A���6������Ukm!æ¤"Aý1�ãq%AUkm!æ¤"Aý1�ãq%A���Ukm!æ¤"Aý1�ãq%A���7������t&—ö9¡!A`o®]8%At&—ö9¡!A`o®]8%A���t&—ö9¡!A`o®]8%A���8������í^µÙ� #A‡œB™£G%Aí^µÙ� #A‡œB™£G%A���í^µÙ� #A‡œB™£G%A���9������çõùÏÕAìꂾ#AçõùÏÕAìꂾ#A���çõùÏÕAìꂾ#A���:������*ÙªôA“V~¤"A*ÙªôA“V~¤"A���*ÙªôA“V~¤"A���;������ˆë½Ú/!A Êˤú&Aˆë½Ú/!A Êˤú&A���ˆë½Ú/!A Êˤú&A���<������-Û#û}8A€ÎbXc÷A-Û#û}8A€ÎbXc÷A���-Û#û}8A€ÎbXc÷A���=������ºi\¾%!A …°YÆAºi\¾%!A …°YÆA���ºi\¾%!A …°YÆA���>������)ùqÎ!A¢sÿÚÑ.'A)ùqÎ!A¢sÿÚÑ.'A���)ùqÎ!A¢sÿÚÑ.'A���?������² @³k²A|¢Jn¬Ö(A² @³k²A|¢Jn¬Ö(A���² @³k²A|¢Jn¬Ö(A���@������“ÛÜ{ö"AZó•ù%A“ÛÜ{ö"AZó•ù%A���“ÛÜ{ö"AZó•ù%A���A������ÆÎ'£¿Aªww)ñ"AÆÎ'£¿Aªww)ñ"A���ÆÎ'£¿Aªww)ñ"A���B������ÉŽOAý¨A‘%AÉŽOAý¨A‘%A���ÉŽOAý¨A‘%A��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM.dbf�������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020727� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc.select.sql�����������������������������������������������0000644�0000000�0000000�00000000324�11722777314�021216� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Ashexewkb(the_geom::geometry, 'NDR') from loadedshp order by 1; select ST_Ashexewkb(the_geom::geometry, 'XDR') from loadedshp order by 1; select ST_Asewkt(the_geom::geometry) from loadedshp order by 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon.select.expected��������������������������������������0000644�0000000�0000000�00000000206�11540676357�023144� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon-w.select.expected���������������������������������0000644�0000000�0000000�00000000206�11540676357�023770� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon.shp��������������������������������������������������0000644�0000000�0000000�00000000750�11722777314�020660� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ.shp����������������������������������������������0000644�0000000�0000000�00000000424�11722777314�021465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Šè�������������������ð¿������"@������ð?������4À�������@�����À^À������@������T�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿������4À�������@�������@�������À������4À�����À^À������@������@������À�����À^À��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon.dbf�����������������������������������������������0000644�0000000�0000000�00000000041�11722777314�021205� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point.select.sql���������������������������������������������0000644�0000000�0000000�00000000101�11722777314�021573� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp order by 1; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ-G.select.expected�������������������������������������0000644�0000000�0000000�00000000124�11612637122�023106� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;POINT(0 1 2 3) SRID=4326;POINT(9 -1 -2 -3) SRID=4326;POINT(9 -1 -20 -123) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ.select.sql������������������������������������������0000644�0000000�0000000�00000000066�11722777314�022275� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon.shx����������������������������������������������0000644�0000000�0000000�00000000154�11540141776�021365� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�����������$À������$À������$@������$@�����������������������������������2���¾��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc-G.shp.expected�������������������������������������������0000644�0000000�0000000�00000000620�11540722277�021712� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Èè���������������������������$@������$@��������������������������������������:�������������������������@������@�����������������������������������ð?������ð?������@������@������@������@������T�������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM-G.shp.expected�����������������������������������0000644�0000000�0000000�00000000354�11540722277�023432� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������vè�������������������ð¿������"@������ð?���������������������À^À������@������@�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿�����À^À������@������@������À�����À^À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts.shp���������������������������������������������0000644�0000000�0000000�00000010344�11540676357�021660� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������rè�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������������I Iº!Aƒ †)AI Iº!Aƒ †)A���I Iº!Aƒ †)A���������ìF“ÛçA¼Æ¼ƒfŠ"AìF“ÛçA¼Æ¼ƒfŠ"A���ìF“ÛçA¼Æ¼ƒfŠ"A���������§èYíK>#AJìøêÀ A§èYíK>#AJìøêÀ A���§èYíK>#AJìøêÀ A���������ŒûøAAëk AkAŒûøAAëk AkA���ŒûøAAëk AkA���������Ø“•ͺ¿A”7püÀ{&AØ“•ͺ¿A”7püÀ{&A���Ø“•ͺ¿A”7püÀ{&A���������CÔoÊ„A ¿ÖŒþÉ"ACÔoÊ„A ¿ÖŒþÉ"A���CÔoÊ„A ¿ÖŒþÉ"A���������±¾©ÇUË AK$"€1IA±¾©ÇUË AK$"€1IA���±¾©ÇUË AK$"€1IA���������¿:R­â{ARÄñ?@wA¿:R­â{ARÄñ?@wA���¿:R­â{ARÄñ?@wA��� ������Ç Œ•Z!Aûäx…¸AÇ Œ•Z!Aûäx…¸A���Ç Œ•Z!Aûäx…¸A��� ������üÍ!:òú AÒœ«žJA&AüÍ!:òú AÒœ«žJA&A���üÍ!:òú AÒœ«žJA&A��� ������°LÚÞ]A£Xþ{5q%A°LÚÞ]A£Xþ{5q%A���°LÚÞ]A£Xþ{5q%A��� ������Ù‚Åàc©!A¬N=ß¡ù&AÙ‚Åàc©!A¬N=ß¡ù&A���Ù‚Åàc©!A¬N=ß¡ù&A��� ������² ‡7͇!Avï„d²x'A² ‡7͇!Avï„d²x'A���² ‡7͇!Avï„d²x'A���������êY·³° A-† Â9e$AêY·³° A-† Â9e$A���êY·³° A-† Â9e$A���������aW'nAœq3Ži&AaW'nAœq3Ži&A���aW'nAœq3Ži&A���������´[·s¿’AX)$g80A´[·s¿’AX)$g80A���´[·s¿’AX)$g80A���������7ÖÎ*md!A̳oÖ@A7ÖÎ*md!A̳oÖ@A���7ÖÎ*md!A̳oÖ@A���������NeÀ°[HAÏb. Œ\%ANeÀ°[HAÏb. Œ\%A���NeÀ°[HAÏb. Œ\%A���������Ì* zr"Aú×ÿ_™&AÌ* zr"Aú×ÿ_™&A���Ì* zr"Aú×ÿ_™&A���������’û†›îÿAм%A’û†›îÿAм%A���’û†›îÿAм%A���������’ä”÷XvAé\!]d×A’ä”÷XvAé\!]d×A���’ä”÷XvAé\!]d×A���������½Z(f¢!A*õåÝY0%A½Z(f¢!A*õåÝY0%A���½Z(f¢!A*õåÝY0%A���������¡X>Ĥ•!Avæz“àÑ%A¡X>Ĥ•!Avæz“àÑ%A���¡X>Ĥ•!Avæz“àÑ%A��������� râñ !A]QÇx-<%A râñ !A]QÇx-<%A��� râñ !A]QÇx-<%A���������Ž èŽWÁ!A‡²í¸,%AŽ èŽWÁ!A‡²í¸,%A���Ž èŽWÁ!A‡²í¸,%A��������� —ÒGœ~A.×"ò5 A —ÒGœ~A.×"ò5 A��� —ÒGœ~A.×"ò5 A���������þàÞÆf×!Aõ (Ù•(%AþàÞÆf×!Aõ (Ù•(%A���þàÞÆf×!Aõ (Ù•(%A���������MË|bL9 AròðÎÞ%AMË|bL9 AròðÎÞ%A���MË|bL9 AròðÎÞ%A���������=Í/»®Â!A60%A=Í/»®Â!A60%A���=Í/»®Â!A60%A���������®d$‹@;A äºÙÏ A®d$‹@;A äºÙÏ A���®d$‹@;A äºÙÏ A���������ç‚D.?' AÔ÷*ý¤"Aç‚D.?' AÔ÷*ý¤"A���ç‚D.?' AÔ÷*ý¤"A��� ������ ¾7taÁ!Aõ5þgC<%A ¾7taÁ!Aõ5þgC<%A��� ¾7taÁ!Aõ5þgC<%A���!������#RÁß9ÏA:-W_ªË"A#RÁß9ÏA:-W_ªË"A���#RÁß9ÏA:-W_ªË"A���"������^­ÿOHÿ"AVÏ}Ìô&A^­ÿOHÿ"AVÏ}Ìô&A���^­ÿOHÿ"AVÏ}Ìô&A���#������<Ï«ãØRAPW¯#(A<Ï«ãØRAPW¯#(A���<Ï«ãØRAPW¯#(A���$������7ŠV©®'"A‘ü´ß© A7ŠV©®'"A‘ü´ß© A���7ŠV©®'"A‘ü´ß© A���%������ýÂÞGrïAÙ)ûýõô AýÂÞGrïAÙ)ûýõô A���ýÂÞGrïAÙ)ûýõô A���&������ô®Š‚{"AadëÞ'Aô®Š‚{"AadëÞ'A���ô®Š‚{"AadëÞ'A���'������mhY–™iAüàWÒAmhY–™iAüàWÒA���mhY–™iAüàWÒA���(������á\û¼„"A³w¾¬OÜ$Aá\û¼„"A³w¾¬OÜ$A���á\û¼„"A³w¾¬OÜ$A���)������jzûA¬äœ×' AjzûA¬äœ×' A���jzûA¬äœ×' A���*������5†%O ß!A](3ù*A5†%O ß!A](3ù*A���5†%O ß!A](3ù*A���+������wã“áHEAæób‚\B%Awã“áHEAæób‚\B%A���wã“áHEAæób‚\B%A���,������§'TA%u o˜Ú A§'TA%u o˜Ú A���§'TA%u o˜Ú A���-������å[©æC'!A Ÿö±¾>%Aå[©æC'!A Ÿö±¾>%A���å[©æC'!A Ÿö±¾>%A���.������¸MœØõuA°&¨°_‡A¸MœØõuA°&¨°_‡A���¸MœØõuA°&¨°_‡A���/������p›m~A³î–S%"Ap›m~A³î–S%"A���p›m~A³î–S%"A���0������ˆrÜÞ´A!AŽN?JŽ$AˆrÜÞ´A!AŽN?JŽ$A���ˆrÜÞ´A!AŽN?JŽ$A���1������÷i sAÙD9™ò%A÷i sAÙD9™ò%A���÷i sAÙD9™ò%A���2������’ûÿÄ·"A#g½~ó%A’ûÿÄ·"A#g½~ó%A���’ûÿÄ·"A#g½~ó%A���3������Ò©’ØAÐÁpÇ7AÒ©’ØAÐÁpÇ7A���Ò©’ØAÐÁpÇ7A���4������ôkØohtAWì%«S AôkØohtAWì%«S A���ôkØohtAWì%«S A���5������ÒosÄAEknÉ)‰"AÒosÄAEknÉ)‰"A���ÒosÄAEknÉ)‰"A���6������Ukm!æ¤"Aý1�ãq%AUkm!æ¤"Aý1�ãq%A���Ukm!æ¤"Aý1�ãq%A���7������t&—ö9¡!A`o®]8%At&—ö9¡!A`o®]8%A���t&—ö9¡!A`o®]8%A���8������í^µÙ� #A‡œB™£G%Aí^µÙ� #A‡œB™£G%A���í^µÙ� #A‡œB™£G%A���9������çõùÏÕAìꂾ#AçõùÏÕAìꂾ#A���çõùÏÕAìꂾ#A���:������*ÙªôA“V~¤"A*ÙªôA“V~¤"A���*ÙªôA“V~¤"A���;������ˆë½Ú/!A Êˤú&Aˆë½Ú/!A Êˤú&A���ˆë½Ú/!A Êˤú&A���<������-Û#û}8A€ÎbXc÷A-Û#û}8A€ÎbXc÷A���-Û#û}8A€ÎbXc÷A���=������ºi\¾%!A …°YÆAºi\¾%!A …°YÆA���ºi\¾%!A …°YÆA���>������)ùqÎ!A¢sÿÚÑ.'A)ùqÎ!A¢sÿÚÑ.'A���)ùqÎ!A¢sÿÚÑ.'A���?������² @³k²A|¢Jn¬Ö(A² @³k²A|¢Jn¬Ö(A���² @³k²A|¢Jn¬Ö(A���@������“ÛÜ{ö"AZó•ù%A“ÛÜ{ö"AZó•ù%A���“ÛÜ{ö"AZó•ù%A���A������ÆÎ'£¿Aªww)ñ"AÆÎ'£¿Aªww)ñ"A���ÆÎ'£¿Aªww)ñ"A���B������ÉŽOAý¨A‘%AÉŽOAý¨A‘%A���ÉŽOAý¨A‘%A��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog-w.select.expected���������������������������0000644�0000000�0000000�00000005307�11544166732�025211� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;POINT(-74.17782492 41.08263361) SRID=4326;POINT(-74.44881286 40.50133744) SRID=4326;POINT(-74.00376358 40.28149688) SRID=4326;POINT(-75.12863742 39.7797389) SRID=4326;POINT(-74.57629014 40.85597595) SRID=4326;POINT(-74.47160401 40.52369066) SRID=4326;POINT(-75.46891683 39.69688334) SRID=4326;POINT(-75.11458618 39.70739231) SRID=4326;POINT(-74.22643701 40.09726563) SRID=4326;POINT(-74.26766926 40.83522615) SRID=4326;POINT(-74.42152037 40.76232181) SRID=4326;POINT(-74.18666598 40.89980341) SRID=4326;POINT(-74.20201874 40.94448827) SRID=4326;POINT(-74.31866663 40.6680465) SRID=4326;POINT(-74.83205963 40.84912898) SRID=4326;POINT(-74.64402101 39.96633708) SRID=4326;POINT(-74.22194028 40.09559148) SRID=4326;POINT(-74.60375255 40.75504208) SRID=4326;POINT(-74.09376018 40.86569336) SRID=4326;POINT(-74.4430374 40.77797967) SRID=4326;POINT(-74.76841703 40.22038455) SRID=4326;POINT(-74.19078182 40.73914574) SRID=4326;POINT(-74.19628444 40.79591416) SRID=4326;POINT(-74.19130306 40.74330253) SRID=4326;POINT(-74.17636308 40.73783123) SRID=4326;POINT(-74.53148731 39.49029456) SRID=4326;POINT(-74.16618054 40.73634864) SRID=4326;POINT(-74.35732607 40.80076793) SRID=4326;POINT(-74.17573811 40.73901418) SRID=4326;POINT(-74.66491581 40.34572735) SRID=4326;POINT(-74.36625323 40.51061374) SRID=4326;POINT(-74.17631876 40.74329159) SRID=4326;POINT(-74.4544664 40.52427239) SRID=4326;POINT(-74.02836656 40.89756584) SRID=4326;POINT(-75.00833975 39.82895026) SRID=4326;POINT(-74.13132221 40.33161528) SRID=4326;POINT(-74.67999522 39.46203859) SRID=4326;POINT(-74.08904806 40.9515804) SRID=4326;POINT(-75.12091068 39.94826917) SRID=4326;POINT(-74.08628025 40.70929009) SRID=4326;POINT(-74.73270242 40.27825159) SRID=4326;POINT(-74.16625303 40.01000431) SRID=4326;POINT(-75.01837982 40.74472398) SRID=4326;POINT(-74.65920653 40.34951097) SRID=4326;POINT(-74.24751143 40.74434122) SRID=4326;POINT(-74.65122484 40.25151634) SRID=4326;POINT(-74.43880205 40.4659008) SRID=4326;POINT(-74.2355417 40.68231466) SRID=4326;POINT(-74.49892935 40.80763833) SRID=4326;POINT(-74.0625762 40.73086062) SRID=4326;POINT(-75.03600164 39.78659251) SRID=4326;POINT(-75.05591643 39.44084942) SRID=4326;POINT(-74.39804333 40.50086907) SRID=4326;POINT(-74.07131567 40.72720191) SRID=4326;POINT(-74.19117919 40.74196293) SRID=4326;POINT(-74.02494262 40.74676479) SRID=4326;POINT(-74.68894668 40.6094749) SRID=4326;POINT(-74.44600226 40.49825884) SRID=4326;POINT(-74.19898991 40.85779571) SRID=4326;POINT(-74.7828046 40.27094999) SRID=4326;POINT(-74.25017536 40.217432) SRID=4326;POINT(-74.16960551 40.91844326) SRID=4326;POINT(-74.75788852 41.06754763) SRID=4326;POINT(-74.03363729 40.72689071) SRID=4326;POINT(-74.5760699 40.53743164) SRID=4326;POINT(-74.43925667 40.77359187) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog-pre.sql�������������������������������������0000644�0000000�0000000�00000002577�11722777314�023261� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- --- EPSG 4326 : WGS 84 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4326,'EPSG',4326,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); --- --- EPSG 2260 : NAD83 / New York East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2260,'EPSG',2260,'PROJCS["NAD83 / New York East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","2260"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs '); ���������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM.select.sql��������������������������������������������0000644�0000000�0000000�00000000100�11722777314�021707� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp order by 1; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM.shp�������������������������������������������������0000644�0000000�0000000�00000001230�11722777314�020767� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������Lè�����������$À������$À������$@������$@����������������������.À������.@��������������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������.À������.@������ð?������@������@������@������ð?������"@������.@������*@������&@������"@������ð¿������À������À������À������ð¿������"À������.À������*À������&À������"À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ-w.select.expected�������������������������������������0000644�0000000�0000000�00000000066�11612637122�023173� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0 1 2 3) POINT(9 -1 -2 -3) POINT(9 -1 -20 -123) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon.select.expected�����������������������������������0000644�0000000�0000000�00000000206�11540676357�023537� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint.shx���������������������������������������������0000644�0000000�0000000�00000000174�11540170177�021627� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������>è�������������������ð¿������"@������ð?�����������������������������������2��� ���@��� ���N��� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint.select.sql��������������������������������������0000644�0000000�0000000�00000000054�11722777314�023107� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom) from loadedshp; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog.shx�����������������������������������������0000644�0000000�0000000�00000001164�11540676357�022472� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������:è�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������2������R������r������’������²������Ò������ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint-G.select.expected���������������������������������0000644�0000000�0000000�00000000044�11540721245�023770� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;MULTIPOINT(0 1,9 -1,9 -1) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon.opts����������������������������������������������0000644�0000000�0000000�00000000631�11540141776�021424� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# You cannot create a test tablespace because tablespaces need to be directories that # are owned by the postgres user, which is rarely the same as the user running the test, # and you can't chown without sudo, so we gave up on trying to have a test that proves # the -T and -X parameters work. However we can at least test that they don't cause # any problems, which is what this test is for. -X pg_default �������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point-G.shp.expected�����������������������������������������0000644�0000000�0000000�00000000270�11540722277�022277� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������\è�������������������ð¿������"@������ð?�������������������������������������� �����������������ð?������ ���������"@������ð¿������ ���������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ-G.shp.expected����������������������������������������0000644�0000000�0000000�00000000350�11540722277�022430� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������tè�� �����������������ð¿������"@������ð?������4À�������@�����À^À������@������ �����������������ð?�������@������@������ ���������"@������ð¿�������À������À������ ���������"@������ð¿������4À�����À^À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon.shx�����������������������������������������������0000644�0000000�0000000�00000000154�11540141776�021254� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�����������$À������$À������$@������$@�����������������������������������2���¾��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon.shp�����������������������������������������������0000644�0000000�0000000�00000000750�11540141776�021233� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/Latin1.select.sql��������������������������������������������0000644�0000000�0000000�00000000066�11722777314�021644� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET CLIENT_ENCODING to UTF8; SELECT * FROM loadedshp; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema-post.sql�������������������������������������0000644�0000000�0000000�00000000166�11722777314�023270� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS pgreg.loadedshp; --DELETE FROM geometry_columns WHERE f_table_schema='pgreg'; DROP SCHEMA pgreg; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM.shp���������������������������������������������������0000644�0000000�0000000�00000000320�11722777314�020430� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������hè�������������������ð¿������"@������ð?���������������������À^À������@�����������������������ð?������@���������������"@������ð¿������À���������������"@������ð¿�����À^À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint-w.select.expected�������������������������������0000644�0000000�0000000�00000000043�11540676357�024356� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0 1) POINT(9 -1) POINT(9 -1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ.select.sql��������������������������������������������0000644�0000000�0000000�00000000100�11722777314�021724� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp order by 1; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM.dbf�����������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020005� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ-G.shp.expected�����������������������������������0000644�0000000�0000000�00000000424�11540722277�023445� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Šè�������������������ð¿������"@������ð?������4À�������@�����À^À������@������T�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿������4À�������@�������@�������À������4À�����À^À������@������@������À�����À^À��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema.dbf������������������������������������������0000644�0000000�0000000�00000000041�11722777314�022231� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint.opts��������������������������������������0000644�0000000�0000000�00000000337�11540676357�023201� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# These points are in a multipoint shapefile even though they're all single points. # That used to break, so you sould be able to use the -S parameter to force them to # load into a POINT table rather than a MULTIPOINT. -S �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon.select.sql����������������������������������������0000644�0000000�0000000�00000000054�11722777314�022533� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom) from loadedshp; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM.shp.expected����������������������������������������0000644�0000000�0000000�00000001230�11540676357�022572� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������Lè�����������$À������$À������$@������$@����������������������.À������.@��������������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������.À������.@������ð?������@������@������@������ð?������"@������.@������*@������&@������"@������ð¿������À������À������À������ð¿������"À������.À������*À������&À������"À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point.select.expected����������������������������������������0000644�0000000�0000000�00000000043�11540676357�022605� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0 1) POINT(9 -1) POINT(9 -1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint.shp.expected������������������������������0000644�0000000�0000000�00000003634�11540676357�024611� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������Îè�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�������������������������������������� ���I Iº!Aƒ †)A������ ���ìF“ÛçA¼Æ¼ƒfŠ"A������ ���§èYíK>#AJìøêÀ A������ ���ŒûøAAëk AkA������ ���Ø“•ͺ¿A”7püÀ{&A������ ���CÔoÊ„A ¿ÖŒþÉ"A������ ���±¾©ÇUË AK$"€1IA������ ���¿:R­â{ARÄñ?@wA��� ��� ���Ç Œ•Z!Aûäx…¸A��� ��� ���üÍ!:òú AÒœ«žJA&A��� ��� ���°LÚÞ]A£Xþ{5q%A��� ��� ���Ù‚Åàc©!A¬N=ß¡ù&A��� ��� ���² ‡7͇!Avï„d²x'A������ ���êY·³° A-† Â9e$A������ ���aW'nAœq3Ži&A������ ���´[·s¿’AX)$g80A������ ���7ÖÎ*md!A̳oÖ@A������ ���NeÀ°[HAÏb. Œ\%A������ ���Ì* zr"Aú×ÿ_™&A������ ���’û†›îÿAм%A������ ���’ä”÷XvAé\!]d×A������ ���½Z(f¢!A*õåÝY0%A������ ���¡X>Ĥ•!Avæz“àÑ%A������ ��� râñ !A]QÇx-<%A������ ���Ž èŽWÁ!A‡²í¸,%A������ ��� —ÒGœ~A.×"ò5 A������ ���þàÞÆf×!Aõ (Ù•(%A������ ���MË|bL9 AròðÎÞ%A������ ���=Í/»®Â!A60%A������ ���®d$‹@;A äºÙÏ A������ ���ç‚D.?' AÔ÷*ý¤"A��� ��� ��� ¾7taÁ!Aõ5þgC<%A���!��� ���#RÁß9ÏA:-W_ªË"A���"��� ���^­ÿOHÿ"AVÏ}Ìô&A���#��� ���<Ï«ãØRAPW¯#(A���$��� ���7ŠV©®'"A‘ü´ß© A���%��� ���ýÂÞGrïAÙ)ûýõô A���&��� ���ô®Š‚{"AadëÞ'A���'��� ���mhY–™iAüàWÒA���(��� ���á\û¼„"A³w¾¬OÜ$A���)��� ���jzûA¬äœ×' A���*��� ���5†%O ß!A](3ù*A���+��� ���wã“áHEAæób‚\B%A���,��� ���§'TA%u o˜Ú A���-��� ���å[©æC'!A Ÿö±¾>%A���.��� ���¸MœØõuA°&¨°_‡A���/��� ���p›m~A³î–S%"A���0��� ���ˆrÜÞ´A!AŽN?JŽ$A���1��� ���÷i sAÙD9™ò%A���2��� ���’ûÿÄ·"A#g½~ó%A���3��� ���Ò©’ØAÐÁpÇ7A���4��� ���ôkØohtAWì%«S A���5��� ���ÒosÄAEknÉ)‰"A���6��� ���Ukm!æ¤"Aý1�ãq%A���7��� ���t&—ö9¡!A`o®]8%A���8��� ���í^µÙ� #A‡œB™£G%A���9��� ���çõùÏÕAìꂾ#A���:��� ���*ÙªôA“V~¤"A���;��� ���ˆë½Ú/!A Êˤú&A���<��� ���-Û#û}8A€ÎbXc÷A���=��� ���ºi\¾%!A …°YÆA���>��� ���)ùqÎ!A¢sÿÚÑ.'A���?��� ���² @³k²A|¢Jn¬Ö(A���@��� ���“ÛÜ{ö"AZó•ù%A���A��� ���ÆÎ'£¿Aªww)ñ"A���B��� ���ÉŽOAý¨A‘%A����������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog.shp�����������������������������������������0000644�0000000�0000000�00000010344�11540676357�022462� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������rè�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������������I Iº!Aƒ †)AI Iº!Aƒ †)A���I Iº!Aƒ †)A���������ìF“ÛçA¼Æ¼ƒfŠ"AìF“ÛçA¼Æ¼ƒfŠ"A���ìF“ÛçA¼Æ¼ƒfŠ"A���������§èYíK>#AJìøêÀ A§èYíK>#AJìøêÀ A���§èYíK>#AJìøêÀ A���������ŒûøAAëk AkAŒûøAAëk AkA���ŒûøAAëk AkA���������Ø“•ͺ¿A”7püÀ{&AØ“•ͺ¿A”7püÀ{&A���Ø“•ͺ¿A”7püÀ{&A���������CÔoÊ„A ¿ÖŒþÉ"ACÔoÊ„A ¿ÖŒþÉ"A���CÔoÊ„A ¿ÖŒþÉ"A���������±¾©ÇUË AK$"€1IA±¾©ÇUË AK$"€1IA���±¾©ÇUË AK$"€1IA���������¿:R­â{ARÄñ?@wA¿:R­â{ARÄñ?@wA���¿:R­â{ARÄñ?@wA��� ������Ç Œ•Z!Aûäx…¸AÇ Œ•Z!Aûäx…¸A���Ç Œ•Z!Aûäx…¸A��� ������üÍ!:òú AÒœ«žJA&AüÍ!:òú AÒœ«žJA&A���üÍ!:òú AÒœ«žJA&A��� ������°LÚÞ]A£Xþ{5q%A°LÚÞ]A£Xþ{5q%A���°LÚÞ]A£Xþ{5q%A��� ������Ù‚Åàc©!A¬N=ß¡ù&AÙ‚Åàc©!A¬N=ß¡ù&A���Ù‚Åàc©!A¬N=ß¡ù&A��� ������² ‡7͇!Avï„d²x'A² ‡7͇!Avï„d²x'A���² ‡7͇!Avï„d²x'A���������êY·³° A-† Â9e$AêY·³° A-† Â9e$A���êY·³° A-† Â9e$A���������aW'nAœq3Ži&AaW'nAœq3Ži&A���aW'nAœq3Ži&A���������´[·s¿’AX)$g80A´[·s¿’AX)$g80A���´[·s¿’AX)$g80A���������7ÖÎ*md!A̳oÖ@A7ÖÎ*md!A̳oÖ@A���7ÖÎ*md!A̳oÖ@A���������NeÀ°[HAÏb. Œ\%ANeÀ°[HAÏb. Œ\%A���NeÀ°[HAÏb. Œ\%A���������Ì* zr"Aú×ÿ_™&AÌ* zr"Aú×ÿ_™&A���Ì* zr"Aú×ÿ_™&A���������’û†›îÿAм%A’û†›îÿAм%A���’û†›îÿAм%A���������’ä”÷XvAé\!]d×A’ä”÷XvAé\!]d×A���’ä”÷XvAé\!]d×A���������½Z(f¢!A*õåÝY0%A½Z(f¢!A*õåÝY0%A���½Z(f¢!A*õåÝY0%A���������¡X>Ĥ•!Avæz“àÑ%A¡X>Ĥ•!Avæz“àÑ%A���¡X>Ĥ•!Avæz“àÑ%A��������� râñ !A]QÇx-<%A râñ !A]QÇx-<%A��� râñ !A]QÇx-<%A���������Ž èŽWÁ!A‡²í¸,%AŽ èŽWÁ!A‡²í¸,%A���Ž èŽWÁ!A‡²í¸,%A��������� —ÒGœ~A.×"ò5 A —ÒGœ~A.×"ò5 A��� —ÒGœ~A.×"ò5 A���������þàÞÆf×!Aõ (Ù•(%AþàÞÆf×!Aõ (Ù•(%A���þàÞÆf×!Aõ (Ù•(%A���������MË|bL9 AròðÎÞ%AMË|bL9 AròðÎÞ%A���MË|bL9 AròðÎÞ%A���������=Í/»®Â!A60%A=Í/»®Â!A60%A���=Í/»®Â!A60%A���������®d$‹@;A äºÙÏ A®d$‹@;A äºÙÏ A���®d$‹@;A äºÙÏ A���������ç‚D.?' AÔ÷*ý¤"Aç‚D.?' AÔ÷*ý¤"A���ç‚D.?' AÔ÷*ý¤"A��� ������ ¾7taÁ!Aõ5þgC<%A ¾7taÁ!Aõ5þgC<%A��� ¾7taÁ!Aõ5þgC<%A���!������#RÁß9ÏA:-W_ªË"A#RÁß9ÏA:-W_ªË"A���#RÁß9ÏA:-W_ªË"A���"������^­ÿOHÿ"AVÏ}Ìô&A^­ÿOHÿ"AVÏ}Ìô&A���^­ÿOHÿ"AVÏ}Ìô&A���#������<Ï«ãØRAPW¯#(A<Ï«ãØRAPW¯#(A���<Ï«ãØRAPW¯#(A���$������7ŠV©®'"A‘ü´ß© A7ŠV©®'"A‘ü´ß© A���7ŠV©®'"A‘ü´ß© A���%������ýÂÞGrïAÙ)ûýõô AýÂÞGrïAÙ)ûýõô A���ýÂÞGrïAÙ)ûýõô A���&������ô®Š‚{"AadëÞ'Aô®Š‚{"AadëÞ'A���ô®Š‚{"AadëÞ'A���'������mhY–™iAüàWÒAmhY–™iAüàWÒA���mhY–™iAüàWÒA���(������á\û¼„"A³w¾¬OÜ$Aá\û¼„"A³w¾¬OÜ$A���á\û¼„"A³w¾¬OÜ$A���)������jzûA¬äœ×' AjzûA¬äœ×' A���jzûA¬äœ×' A���*������5†%O ß!A](3ù*A5†%O ß!A](3ù*A���5†%O ß!A](3ù*A���+������wã“áHEAæób‚\B%Awã“áHEAæób‚\B%A���wã“áHEAæób‚\B%A���,������§'TA%u o˜Ú A§'TA%u o˜Ú A���§'TA%u o˜Ú A���-������å[©æC'!A Ÿö±¾>%Aå[©æC'!A Ÿö±¾>%A���å[©æC'!A Ÿö±¾>%A���.������¸MœØõuA°&¨°_‡A¸MœØõuA°&¨°_‡A���¸MœØõuA°&¨°_‡A���/������p›m~A³î–S%"Ap›m~A³î–S%"A���p›m~A³î–S%"A���0������ˆrÜÞ´A!AŽN?JŽ$AˆrÜÞ´A!AŽN?JŽ$A���ˆrÜÞ´A!AŽN?JŽ$A���1������÷i sAÙD9™ò%A÷i sAÙD9™ò%A���÷i sAÙD9™ò%A���2������’ûÿÄ·"A#g½~ó%A’ûÿÄ·"A#g½~ó%A���’ûÿÄ·"A#g½~ó%A���3������Ò©’ØAÐÁpÇ7AÒ©’ØAÐÁpÇ7A���Ò©’ØAÐÁpÇ7A���4������ôkØohtAWì%«S AôkØohtAWì%«S A���ôkØohtAWì%«S A���5������ÒosÄAEknÉ)‰"AÒosÄAEknÉ)‰"A���ÒosÄAEknÉ)‰"A���6������Ukm!æ¤"Aý1�ãq%AUkm!æ¤"Aý1�ãq%A���Ukm!æ¤"Aý1�ãq%A���7������t&—ö9¡!A`o®]8%At&—ö9¡!A`o®]8%A���t&—ö9¡!A`o®]8%A���8������í^µÙ� #A‡œB™£G%Aí^µÙ� #A‡œB™£G%A���í^µÙ� #A‡œB™£G%A���9������çõùÏÕAìꂾ#AçõùÏÕAìꂾ#A���çõùÏÕAìꂾ#A���:������*ÙªôA“V~¤"A*ÙªôA“V~¤"A���*ÙªôA“V~¤"A���;������ˆë½Ú/!A Êˤú&Aˆë½Ú/!A Êˤú&A���ˆë½Ú/!A Êˤú&A���<������-Û#û}8A€ÎbXc÷A-Û#û}8A€ÎbXc÷A���-Û#û}8A€ÎbXc÷A���=������ºi\¾%!A …°YÆAºi\¾%!A …°YÆA���ºi\¾%!A …°YÆA���>������)ùqÎ!A¢sÿÚÑ.'A)ùqÎ!A¢sÿÚÑ.'A���)ùqÎ!A¢sÿÚÑ.'A���?������² @³k²A|¢Jn¬Ö(A² @³k²A|¢Jn¬Ö(A���² @³k²A|¢Jn¬Ö(A���@������“ÛÜ{ö"AZó•ù%A“ÛÜ{ö"AZó•ù%A���“ÛÜ{ö"AZó•ù%A���A������ÆÎ'£¿Aªww)ñ"AÆÎ'£¿Aªww)ñ"A���ÆÎ'£¿Aªww)ñ"A���B������ÉŽOAý¨A‘%AÉŽOAý¨A‘%A���ÉŽOAý¨A‘%A��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint-G.shp.expected������������������������������������0000644�0000000�0000000�00000000304�11540722277�023310� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������bè�������������������ð¿������"@������ð?��������������������������������������,�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint.select.expected���������������������������0000644�0000000�0000000�00000004164�11764431755�025274� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(580936.14282 819465.26182) POINT(506358.89382 607539.2573) POINT(630565.96358 527840.45893) POINT(315456.49222 345306.81409) POINT(471022.70077 736736.49304) POINT(500018.60921 615679.27508) POINT(219498.72249 315980.37513) POINT(319224.66926 318928.06245) POINT(568650.77442 460462.13034) POINT(556409.11354 729253.3099) POINT(513863.46763 702618.74217) POINT(578737.93901 752848.93601) POINT(574438.60845 769113.19633) POINT(542424.35101 668316.88013) POINT(400265.83533 734407.0336) POINT(451759.863 412686.10072) POINT(569910.58361 459856.20941) POINT(463382.92261 699974.01989) POINT(604477.02181 740527.99913) POINT(507899.65188 708318.27556) POINT(417174.24178 505305.09095) POINT(577806.69953 694316.9334) POINT(576210.38329 714992.28805) POINT(577656.9425 695830.7359) POINT(581803.77911 693852.46425) POINT(483239.07014 239264.86823) POINT(584627.38842 693322.92413) POINT(531622.19236 716647.0409) POINT(581975.3656 694284.04885) POINT(446160.13588 550892.86503) POINT(529311.59037 610942.50619) POINT(581808.72699 695841.70311) POINT(504782.46851 615893.18621) POINT(622500.15625 752230.03026) POINT(349366.22234 363016.92123) POINT(594903.33074 545923.43693) POINT(441308.57019 229022.74901) POINT(605633.26966 771823.45975) POINT(318054.39683 406677.96877) POINT(606814.49094 683559.83739) POINT(427202.24558 526355.92112) POINT(585605.65458 428734.29996) POINT(348498.22029 696622.25466) POINT(447753.88823 552268.21802) POINT(562081.95051 696159.34758) POINT(449917.46153 516567.92252) POINT(509151.60704 594632.16326) POINT(565466.43528 673573.12364) POINT(492421.36236 719117.79927) POINT(613346.49996 691449.74754) POINT(341505.39323 347633.86011) POINT(335130.10922 221738.45857) POINT(520476.8592 607380.89342) POINT(610931.06529 690104.94336) POINT(577692.98162 695342.84069) POINT(623744.42521 697297.79934) POINT(439667.9941 646984.2557) POINT(507141.1403 606418.24612) POINT(575383.92723 737533.32187) POINT(413215.49525 523736.83631) POINT(561887.18089 504214.42238) POINT(583428.22076 759656.92773) POINT(421018.92505 813910.21541) POINT(621373.92981 690044.79287) POINT(470983.15933 620692.73333) POINT(508947.75836 706720.50714) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ.shx���������������������������������������������������0000644�0000000�0000000�00000000174�10462153143�020450� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������>è�� �����������������ð¿������"@������ð?������4À�������@�����À^À������@���2������H������^�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc.shp.expected���������������������������������������������0000644�0000000�0000000�00000000620�11540676357�021535� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Èè���������������������������$@������$@��������������������������������������:�������������������������@������@�����������������������������������ð?������ð?������@������@������@������@������T�������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ.shx�������������������������������������������������0000644�0000000�0000000�00000000154�10462153143�021004� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�����������$À������$À������$@������$@������,À������,@������.À������.@���2��n��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM.dbf����������������������������������������������0000644�0000000�0000000�00000000041�11722777314�021404� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point-w.select.expected��������������������������������������0000644�0000000�0000000�00000000043�11540676357�023051� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0 1) POINT(9 -1) POINT(9 -1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM.shx����������������������������������������������0000644�0000000�0000000�00000000154�10462153143�021444� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�������������������ð¿������"@������ð?���������������������À^À������@���2���@��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc.select.expected������������������������������������������0000644�0000000�0000000�00000002032�11540676357�022221� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������01050000000200000001020000000200000000000000000000000000000000000000000000000000F03F000000000000F03F0102000000020000000000000000000840000000000000084000000000000010400000000000001040 01050000000300000001020000000200000000000000000000000000000000000000000000000000F03F000000000000F03F0102000000020000000000000000000840000000000000084000000000000010400000000000001040010200000003000000000000000000244000000000000024400000000000001440000000000000144000000000000008400000000000000840 000000000500000002000000000200000002000000000000000000000000000000003FF00000000000003FF00000000000000000000002000000024008000000000000400800000000000040100000000000004010000000000000 000000000500000003000000000200000002000000000000000000000000000000003FF00000000000003FF00000000000000000000002000000024008000000000000400800000000000040100000000000004010000000000000000000000200000003402400000000000040240000000000004014000000000000401400000000000040080000000000004008000000000000 MULTILINESTRING((0 0,1 1),(3 3,4 4)) MULTILINESTRING((0 0,1 1),(3 3,4 4),(10 10,5 5,3 3)) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NotReallyMultiPoint.dbf��������������������������������������0000644�0000000�0000000�00000000144�11722777314�023125� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������oB���!���������������������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ.select.expected�������������������������������������0000644�0000000�0000000�00000000366�11540676357�023305� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0 0 1,0 10 6 7,10 10 4 5,10 0 2 3,0 0 0 1),(5 5 8 9,8 5 14 15,8 8 12 13,5 8 10 11,5 5 8 9)),((-1 -1 -1 -1,-1 -10 -6 -7,-10 -10 -4 -5,-10 -1 -2 -3,-1 -1 -1 -1),(-5 -5 -8 -9,-8 -5 -14 -15,-8 -8 -12 -13,-5 -8 -10 -11,-5 -5 -8 -9))) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ.dbf�����������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020022� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint.shp���������������������������������������������0000644�0000000�0000000�00000000270�11540170177�021614� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������\è�������������������ð¿������"@������ð?�������������������������������������� �����������������ð?������ ���������"@������ð¿������ ���������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM.select.sql���������������������������������������0000644�0000000�0000000�00000000066�11722777314�022735� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon.select.sql�������������������������������������������0000644�0000000�0000000�00000000066�11722777314�022143� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon.shp.expected��������������������������������������0000644�0000000�0000000�00000000750�11540676357�023043� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM-G.select.expected���������������������������������������0000644�0000000�0000000�00000001620�11540721245�022507� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0105000060E61000000300000001020000400200000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040010200004002000000000000000000084000000000000008400000000000000840000000000000104000000000000010400000000000001040010200004003000000000000000000244000000000000024400000000000001440000000000000144000000000000014400000000000001840000000000000084000000000000008400000000000001C40 0060000005000010E600000003004000000200000002000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000400000000000000000400000020000000240080000000000004008000000000000400800000000000040100000000000004010000000000000401000000000000000400000020000000340240000000000004024000000000000401400000000000040140000000000004014000000000000401800000000000040080000000000004008000000000000401C000000000000 SRID=4326;MULTILINESTRINGM((0 0 1,1 1 2),(3 3 3,4 4 4),(10 10 5,5 5 6,3 3 7)) ����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ.dbf���������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020406� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon.select.sql����������������������������������������0000644�0000000�0000000�00000000054�11722777314�022520� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom) from loadedshp; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM.dbf���������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020371� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog.select.expected�����������������������������0000644�0000000�0000000�00000005307�11544166732�024745� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;POINT(-74.17782492 41.08263361) SRID=4326;POINT(-74.44881286 40.50133744) SRID=4326;POINT(-74.00376358 40.28149688) SRID=4326;POINT(-75.12863742 39.7797389) SRID=4326;POINT(-74.57629014 40.85597595) SRID=4326;POINT(-74.47160401 40.52369066) SRID=4326;POINT(-75.46891683 39.69688334) SRID=4326;POINT(-75.11458618 39.70739231) SRID=4326;POINT(-74.22643701 40.09726563) SRID=4326;POINT(-74.26766926 40.83522615) SRID=4326;POINT(-74.42152037 40.76232181) SRID=4326;POINT(-74.18666598 40.89980341) SRID=4326;POINT(-74.20201874 40.94448827) SRID=4326;POINT(-74.31866663 40.6680465) SRID=4326;POINT(-74.83205963 40.84912898) SRID=4326;POINT(-74.64402101 39.96633708) SRID=4326;POINT(-74.22194028 40.09559148) SRID=4326;POINT(-74.60375255 40.75504208) SRID=4326;POINT(-74.09376018 40.86569336) SRID=4326;POINT(-74.4430374 40.77797967) SRID=4326;POINT(-74.76841703 40.22038455) SRID=4326;POINT(-74.19078182 40.73914574) SRID=4326;POINT(-74.19628444 40.79591416) SRID=4326;POINT(-74.19130306 40.74330253) SRID=4326;POINT(-74.17636308 40.73783123) SRID=4326;POINT(-74.53148731 39.49029456) SRID=4326;POINT(-74.16618054 40.73634864) SRID=4326;POINT(-74.35732607 40.80076793) SRID=4326;POINT(-74.17573811 40.73901418) SRID=4326;POINT(-74.66491581 40.34572735) SRID=4326;POINT(-74.36625323 40.51061374) SRID=4326;POINT(-74.17631876 40.74329159) SRID=4326;POINT(-74.4544664 40.52427239) SRID=4326;POINT(-74.02836656 40.89756584) SRID=4326;POINT(-75.00833975 39.82895026) SRID=4326;POINT(-74.13132221 40.33161528) SRID=4326;POINT(-74.67999522 39.46203859) SRID=4326;POINT(-74.08904806 40.9515804) SRID=4326;POINT(-75.12091068 39.94826917) SRID=4326;POINT(-74.08628025 40.70929009) SRID=4326;POINT(-74.73270242 40.27825159) SRID=4326;POINT(-74.16625303 40.01000431) SRID=4326;POINT(-75.01837982 40.74472398) SRID=4326;POINT(-74.65920653 40.34951097) SRID=4326;POINT(-74.24751143 40.74434122) SRID=4326;POINT(-74.65122484 40.25151634) SRID=4326;POINT(-74.43880205 40.4659008) SRID=4326;POINT(-74.2355417 40.68231466) SRID=4326;POINT(-74.49892935 40.80763833) SRID=4326;POINT(-74.0625762 40.73086062) SRID=4326;POINT(-75.03600164 39.78659251) SRID=4326;POINT(-75.05591643 39.44084942) SRID=4326;POINT(-74.39804333 40.50086907) SRID=4326;POINT(-74.07131567 40.72720191) SRID=4326;POINT(-74.19117919 40.74196293) SRID=4326;POINT(-74.02494262 40.74676479) SRID=4326;POINT(-74.68894668 40.6094749) SRID=4326;POINT(-74.44600226 40.49825884) SRID=4326;POINT(-74.19898991 40.85779571) SRID=4326;POINT(-74.7828046 40.27094999) SRID=4326;POINT(-74.25017536 40.217432) SRID=4326;POINT(-74.16960551 40.91844326) SRID=4326;POINT(-74.75788852 41.06754763) SRID=4326;POINT(-74.03363729 40.72689071) SRID=4326;POINT(-74.5760699 40.53743164) SRID=4326;POINT(-74.43925667 40.77359187) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM.select.sql����������������������������������������������0000644�0000000�0000000�00000000324�11722777314�021333� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Ashexewkb(the_geom::geometry, 'NDR') from loadedshp order by 1; select ST_Ashexewkb(the_geom::geometry, 'XDR') from loadedshp order by 1; select ST_Asewkt(the_geom::geometry) from loadedshp order by 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ.shp�����������������������������������������������������0000644�0000000�0000000�00000000644�11722777314�020072� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Òè�� �������������������������$@������$@������ð?������@������@������"@������œ �������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@������ð?������@������ð?�������@������@������@������@������@������@������@������"@������"@������ @������@������@������@������@������@��������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon.dbf�����������������������������������������������0000644�0000000�0000000�00000000041�11722777314�021172� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ.shp���������������������������������������������������0000644�0000000�0000000�00000000350�11722777314�020450� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������tè�� �����������������ð¿������"@������ð?������4À�������@�����À^À������@������ �����������������ð?�������@������@������ ���������"@������ð¿�������À������À������ ���������"@������ð¿������4À�����À^À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon.shp.expected�������������������������������������0000644�0000000�0000000�00000000750�11540676357�023167� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon-w.select.expected������������������������������������0000644�0000000�0000000�00000000206�11540676357�023410� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ.select.expected���������������������������������������0000644�0000000�0000000�00000000066�11612637122�022727� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0 1 2 3) POINT(9 -1 -2 -3) POINT(9 -1 -20 -123) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointZ.shp.expected������������������������������������������0000644�0000000�0000000�00000000350�11540676357�022253� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������tè�� �����������������ð¿������"@������ð?������4À�������@�����À^À������@������ �����������������ð?�������@������@������ ���������"@������ð¿�������À������À������ ���������"@������ð¿������4À�����À^À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon-w.select.expected���������������������������������0000644�0000000�0000000�00000000206�11540676357�024003� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point.shp.expected�������������������������������������������0000644�0000000�0000000�00000000270�11540676357�022122� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������\è�������������������ð¿������"@������ð?�������������������������������������� �����������������ð?������ ���������"@������ð¿������ ���������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM.select.expected����������������������������������0000644�0000000�0000000�00000000045�11540676357�023737� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINTM(0 1 3,9 -1 -3,9 -1 -123) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon.shx��������������������������������������������������0000644�0000000�0000000�00000000154�10462153143�020652� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�����������$À������$À������$@������$@�����������������������������������2���¾��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ.shx�����������������������������������������������������0000644�0000000�0000000�00000000154�10462153143�020062� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�� �������������������������$@������$@������ð?������@������@������"@���2���œ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM.select.sql������������������������������������������0000644�0000000�0000000�00000000066�11722777314�022260� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema.shp������������������������������������������0000644�0000000�0000000�00000000270�11540714001�022252� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������\è�������������������ð¿������"@������ð?�������������������������������������� �����������������ð?������ ���������"@������ð¿������ ���������"@������ð¿����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts.shx���������������������������������������������0000644�0000000�0000000�00000001164�11540676357�021670� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������:è�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������2������R������r������’������²������Ò������ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint.shp���������������������������������������0000644�0000000�0000000�00000010344�11540676357�023005� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������rè�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������������I Iº!Aƒ †)AI Iº!Aƒ †)A���I Iº!Aƒ †)A���������ìF“ÛçA¼Æ¼ƒfŠ"AìF“ÛçA¼Æ¼ƒfŠ"A���ìF“ÛçA¼Æ¼ƒfŠ"A���������§èYíK>#AJìøêÀ A§èYíK>#AJìøêÀ A���§èYíK>#AJìøêÀ A���������ŒûøAAëk AkAŒûøAAëk AkA���ŒûøAAëk AkA���������Ø“•ͺ¿A”7püÀ{&AØ“•ͺ¿A”7püÀ{&A���Ø“•ͺ¿A”7püÀ{&A���������CÔoÊ„A ¿ÖŒþÉ"ACÔoÊ„A ¿ÖŒþÉ"A���CÔoÊ„A ¿ÖŒþÉ"A���������±¾©ÇUË AK$"€1IA±¾©ÇUË AK$"€1IA���±¾©ÇUË AK$"€1IA���������¿:R­â{ARÄñ?@wA¿:R­â{ARÄñ?@wA���¿:R­â{ARÄñ?@wA��� ������Ç Œ•Z!Aûäx…¸AÇ Œ•Z!Aûäx…¸A���Ç Œ•Z!Aûäx…¸A��� ������üÍ!:òú AÒœ«žJA&AüÍ!:òú AÒœ«žJA&A���üÍ!:òú AÒœ«žJA&A��� ������°LÚÞ]A£Xþ{5q%A°LÚÞ]A£Xþ{5q%A���°LÚÞ]A£Xþ{5q%A��� ������Ù‚Åàc©!A¬N=ß¡ù&AÙ‚Åàc©!A¬N=ß¡ù&A���Ù‚Åàc©!A¬N=ß¡ù&A��� ������² ‡7͇!Avï„d²x'A² ‡7͇!Avï„d²x'A���² ‡7͇!Avï„d²x'A���������êY·³° A-† Â9e$AêY·³° A-† Â9e$A���êY·³° A-† Â9e$A���������aW'nAœq3Ži&AaW'nAœq3Ži&A���aW'nAœq3Ži&A���������´[·s¿’AX)$g80A´[·s¿’AX)$g80A���´[·s¿’AX)$g80A���������7ÖÎ*md!A̳oÖ@A7ÖÎ*md!A̳oÖ@A���7ÖÎ*md!A̳oÖ@A���������NeÀ°[HAÏb. Œ\%ANeÀ°[HAÏb. Œ\%A���NeÀ°[HAÏb. Œ\%A���������Ì* zr"Aú×ÿ_™&AÌ* zr"Aú×ÿ_™&A���Ì* zr"Aú×ÿ_™&A���������’û†›îÿAм%A’û†›îÿAм%A���’û†›îÿAм%A���������’ä”÷XvAé\!]d×A’ä”÷XvAé\!]d×A���’ä”÷XvAé\!]d×A���������½Z(f¢!A*õåÝY0%A½Z(f¢!A*õåÝY0%A���½Z(f¢!A*õåÝY0%A���������¡X>Ĥ•!Avæz“àÑ%A¡X>Ĥ•!Avæz“àÑ%A���¡X>Ĥ•!Avæz“àÑ%A��������� râñ !A]QÇx-<%A râñ !A]QÇx-<%A��� râñ !A]QÇx-<%A���������Ž èŽWÁ!A‡²í¸,%AŽ èŽWÁ!A‡²í¸,%A���Ž èŽWÁ!A‡²í¸,%A��������� —ÒGœ~A.×"ò5 A —ÒGœ~A.×"ò5 A��� —ÒGœ~A.×"ò5 A���������þàÞÆf×!Aõ (Ù•(%AþàÞÆf×!Aõ (Ù•(%A���þàÞÆf×!Aõ (Ù•(%A���������MË|bL9 AròðÎÞ%AMË|bL9 AròðÎÞ%A���MË|bL9 AròðÎÞ%A���������=Í/»®Â!A60%A=Í/»®Â!A60%A���=Í/»®Â!A60%A���������®d$‹@;A äºÙÏ A®d$‹@;A äºÙÏ A���®d$‹@;A äºÙÏ A���������ç‚D.?' AÔ÷*ý¤"Aç‚D.?' AÔ÷*ý¤"A���ç‚D.?' AÔ÷*ý¤"A��� ������ ¾7taÁ!Aõ5þgC<%A ¾7taÁ!Aõ5þgC<%A��� ¾7taÁ!Aõ5þgC<%A���!������#RÁß9ÏA:-W_ªË"A#RÁß9ÏA:-W_ªË"A���#RÁß9ÏA:-W_ªË"A���"������^­ÿOHÿ"AVÏ}Ìô&A^­ÿOHÿ"AVÏ}Ìô&A���^­ÿOHÿ"AVÏ}Ìô&A���#������<Ï«ãØRAPW¯#(A<Ï«ãØRAPW¯#(A���<Ï«ãØRAPW¯#(A���$������7ŠV©®'"A‘ü´ß© A7ŠV©®'"A‘ü´ß© A���7ŠV©®'"A‘ü´ß© A���%������ýÂÞGrïAÙ)ûýõô AýÂÞGrïAÙ)ûýõô A���ýÂÞGrïAÙ)ûýõô A���&������ô®Š‚{"AadëÞ'Aô®Š‚{"AadëÞ'A���ô®Š‚{"AadëÞ'A���'������mhY–™iAüàWÒAmhY–™iAüàWÒA���mhY–™iAüàWÒA���(������á\û¼„"A³w¾¬OÜ$Aá\û¼„"A³w¾¬OÜ$A���á\û¼„"A³w¾¬OÜ$A���)������jzûA¬äœ×' AjzûA¬äœ×' A���jzûA¬äœ×' A���*������5†%O ß!A](3ù*A5†%O ß!A](3ù*A���5†%O ß!A](3ù*A���+������wã“áHEAæób‚\B%Awã“áHEAæób‚\B%A���wã“áHEAæób‚\B%A���,������§'TA%u o˜Ú A§'TA%u o˜Ú A���§'TA%u o˜Ú A���-������å[©æC'!A Ÿö±¾>%Aå[©æC'!A Ÿö±¾>%A���å[©æC'!A Ÿö±¾>%A���.������¸MœØõuA°&¨°_‡A¸MœØõuA°&¨°_‡A���¸MœØõuA°&¨°_‡A���/������p›m~A³î–S%"Ap›m~A³î–S%"A���p›m~A³î–S%"A���0������ˆrÜÞ´A!AŽN?JŽ$AˆrÜÞ´A!AŽN?JŽ$A���ˆrÜÞ´A!AŽN?JŽ$A���1������÷i sAÙD9™ò%A÷i sAÙD9™ò%A���÷i sAÙD9™ò%A���2������’ûÿÄ·"A#g½~ó%A’ûÿÄ·"A#g½~ó%A���’ûÿÄ·"A#g½~ó%A���3������Ò©’ØAÐÁpÇ7AÒ©’ØAÐÁpÇ7A���Ò©’ØAÐÁpÇ7A���4������ôkØohtAWì%«S AôkØohtAWì%«S A���ôkØohtAWì%«S A���5������ÒosÄAEknÉ)‰"AÒosÄAEknÉ)‰"A���ÒosÄAEknÉ)‰"A���6������Ukm!æ¤"Aý1�ãq%AUkm!æ¤"Aý1�ãq%A���Ukm!æ¤"Aý1�ãq%A���7������t&—ö9¡!A`o®]8%At&—ö9¡!A`o®]8%A���t&—ö9¡!A`o®]8%A���8������í^µÙ� #A‡œB™£G%Aí^µÙ� #A‡œB™£G%A���í^µÙ� #A‡œB™£G%A���9������çõùÏÕAìꂾ#AçõùÏÕAìꂾ#A���çõùÏÕAìꂾ#A���:������*ÙªôA“V~¤"A*ÙªôA“V~¤"A���*ÙªôA“V~¤"A���;������ˆë½Ú/!A Êˤú&Aˆë½Ú/!A Êˤú&A���ˆë½Ú/!A Êˤú&A���<������-Û#û}8A€ÎbXc÷A-Û#û}8A€ÎbXc÷A���-Û#û}8A€ÎbXc÷A���=������ºi\¾%!A …°YÆAºi\¾%!A …°YÆA���ºi\¾%!A …°YÆA���>������)ùqÎ!A¢sÿÚÑ.'A)ùqÎ!A¢sÿÚÑ.'A���)ùqÎ!A¢sÿÚÑ.'A���?������² @³k²A|¢Jn¬Ö(A² @³k²A|¢Jn¬Ö(A���² @³k²A|¢Jn¬Ö(A���@������“ÛÜ{ö"AZó•ù%A“ÛÜ{ö"AZó•ù%A���“ÛÜ{ö"AZó•ù%A���A������ÆÎ'£¿Aªww)ñ"AÆÎ'£¿Aªww)ñ"A���ÆÎ'£¿Aªww)ñ"A���B������ÉŽOAý¨A‘%AÉŽOAý¨A‘%A���ÉŽOAý¨A‘%A��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM.shp.expected��������������������������������������������0000644�0000000�0000000�00000000534�11540676357�021656� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������®è���������������������������$@������$@����������������������ð?������@������x�������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@������ð?������@������ð?�������@������@������@������@������@������@��������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts-w.select.expected�������������������������������0000644�0000000�0000000�00000005307�11544166732�024407� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;POINT(-74.17782492 41.08263361) SRID=4326;POINT(-74.44881286 40.50133744) SRID=4326;POINT(-74.00376358 40.28149688) SRID=4326;POINT(-75.12863742 39.7797389) SRID=4326;POINT(-74.57629014 40.85597595) SRID=4326;POINT(-74.47160401 40.52369066) SRID=4326;POINT(-75.46891683 39.69688334) SRID=4326;POINT(-75.11458618 39.70739231) SRID=4326;POINT(-74.22643701 40.09726563) SRID=4326;POINT(-74.26766926 40.83522615) SRID=4326;POINT(-74.42152037 40.76232181) SRID=4326;POINT(-74.18666598 40.89980341) SRID=4326;POINT(-74.20201874 40.94448827) SRID=4326;POINT(-74.31866663 40.6680465) SRID=4326;POINT(-74.83205963 40.84912898) SRID=4326;POINT(-74.64402101 39.96633708) SRID=4326;POINT(-74.22194028 40.09559148) SRID=4326;POINT(-74.60375255 40.75504208) SRID=4326;POINT(-74.09376018 40.86569336) SRID=4326;POINT(-74.4430374 40.77797967) SRID=4326;POINT(-74.76841703 40.22038455) SRID=4326;POINT(-74.19078182 40.73914574) SRID=4326;POINT(-74.19628444 40.79591416) SRID=4326;POINT(-74.19130306 40.74330253) SRID=4326;POINT(-74.17636308 40.73783123) SRID=4326;POINT(-74.53148731 39.49029456) SRID=4326;POINT(-74.16618054 40.73634864) SRID=4326;POINT(-74.35732607 40.80076793) SRID=4326;POINT(-74.17573811 40.73901418) SRID=4326;POINT(-74.66491581 40.34572735) SRID=4326;POINT(-74.36625323 40.51061374) SRID=4326;POINT(-74.17631876 40.74329159) SRID=4326;POINT(-74.4544664 40.52427239) SRID=4326;POINT(-74.02836656 40.89756584) SRID=4326;POINT(-75.00833975 39.82895026) SRID=4326;POINT(-74.13132221 40.33161528) SRID=4326;POINT(-74.67999522 39.46203859) SRID=4326;POINT(-74.08904806 40.9515804) SRID=4326;POINT(-75.12091068 39.94826917) SRID=4326;POINT(-74.08628025 40.70929009) SRID=4326;POINT(-74.73270242 40.27825159) SRID=4326;POINT(-74.16625303 40.01000431) SRID=4326;POINT(-75.01837982 40.74472398) SRID=4326;POINT(-74.65920653 40.34951097) SRID=4326;POINT(-74.24751143 40.74434122) SRID=4326;POINT(-74.65122484 40.25151634) SRID=4326;POINT(-74.43880205 40.4659008) SRID=4326;POINT(-74.2355417 40.68231466) SRID=4326;POINT(-74.49892935 40.80763833) SRID=4326;POINT(-74.0625762 40.73086062) SRID=4326;POINT(-75.03600164 39.78659251) SRID=4326;POINT(-75.05591643 39.44084942) SRID=4326;POINT(-74.39804333 40.50086907) SRID=4326;POINT(-74.07131567 40.72720191) SRID=4326;POINT(-74.19117919 40.74196293) SRID=4326;POINT(-74.02494262 40.74676479) SRID=4326;POINT(-74.68894668 40.6094749) SRID=4326;POINT(-74.44600226 40.49825884) SRID=4326;POINT(-74.19898991 40.85779571) SRID=4326;POINT(-74.7828046 40.27094999) SRID=4326;POINT(-74.25017536 40.217432) SRID=4326;POINT(-74.16960551 40.91844326) SRID=4326;POINT(-74.75788852 41.06754763) SRID=4326;POINT(-74.03363729 40.72689071) SRID=4326;POINT(-74.5760699 40.53743164) SRID=4326;POINT(-74.43925667 40.77359187) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/README�������������������������������������������������������0000644�0000000�0000000�00000003252�11722777314�017375� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������A loader test requires, at a minimum, a dbf file: <name>.dbf Most tests will use a shapefile, so these files as well: <name>.shp <name>.shx The loader will be run against the dbf/shapefile with no command-line flags, then the output will be run via psql to insert the table into PostGIS. If there is no <name>.opts file, the loader is then run with the -D flag, and the output again run via psql. See ../README for a description of optional setup/teardown script files. The following are optional files for each loader test: <name>.opts - If this exists, the first line that does not begin with a # is read and passed as command line arguments to the loader. This allows testing any arbitrary command line arguments (-s, -G, etc). NOTE: When this file exists, this test is NOT run a second time with -D, because -D can conflict with some arguments. <name>.sql.expected - If this exists, the output of the loader is compared with this file before running it via psql. <name>.select.sql and <name>.select.expected - If these are present, after the loader output is loaded into the database, the query in <name>.select.sql is run and the psql output is compared with <name>.select.expected. <name>.select.sql and <name>-w.select.expected - If these are present, the loader is also run with the -w flag to produce WKT output rather than WKB output. The query in <name>.select.sql is run again and compared against <name>-w.select.expected. <name>.shp.expected - If this is present, the dumper is run (after running the WKB version, not the WKT version, as WKT can lose precision) and the .shp file produced by the dumper is compared with <name>.shp.expected. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM.shx���������������������������������������������������0000644�0000000�0000000�00000000174�10462153143�020433� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������>è�������������������ð¿������"@������ð?���������������������À^À������@���2������D������V�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ.dbf����������������������������������������������0000644�0000000�0000000�00000000041�11722777314�021421� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NotReallyMultiPoint.shx��������������������������������������0000644�0000000�0000000�00000001164�11540676357�023202� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������:è�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������2������R������r������’������²������Ò������ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM-G.select.expected�����������������������������������0000644�0000000�0000000�00000000311�11540721245�023425� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;MULTIPOLYGONM(((0 0 1,0 10 7,10 10 5,10 0 3,0 0 1),(5 5 9,8 5 15,8 8 13,5 8 11,5 5 9)),((-1 -1 -1,-1 -10 -7,-10 -10 -5,-10 -1 -3,-1 -1 -1),(-5 -5 -9,-8 -5 -15,-8 -8 -13,-5 -8 -11,-5 -5 -9))) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM.shx�������������������������������������������������0000644�0000000�0000000�00000000154�10462153143�020767� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�����������$À������$À������$@������$@����������������������.À������.@���2����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NotReallyMultiPoint.select.expected��������������������������0000644�0000000�0000000�00000004676�11764431755�025471� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINT(580936.14282 819465.26182) MULTIPOINT(506358.89382 607539.2573) MULTIPOINT(630565.96358 527840.45893) MULTIPOINT(315456.49222 345306.81409) MULTIPOINT(471022.70077 736736.49304) MULTIPOINT(500018.60921 615679.27508) MULTIPOINT(219498.72249 315980.37513) MULTIPOINT(319224.66926 318928.06245) MULTIPOINT(568650.77442 460462.13034) MULTIPOINT(556409.11354 729253.3099) MULTIPOINT(513863.46763 702618.74217) MULTIPOINT(578737.93901 752848.93601) MULTIPOINT(574438.60845 769113.19633) MULTIPOINT(542424.35101 668316.88013) MULTIPOINT(400265.83533 734407.0336) MULTIPOINT(451759.863 412686.10072) MULTIPOINT(569910.58361 459856.20941) MULTIPOINT(463382.92261 699974.01989) MULTIPOINT(604477.02181 740527.99913) MULTIPOINT(507899.65188 708318.27556) MULTIPOINT(417174.24178 505305.09095) MULTIPOINT(577806.69953 694316.9334) MULTIPOINT(576210.38329 714992.28805) MULTIPOINT(577656.9425 695830.7359) MULTIPOINT(581803.77911 693852.46425) MULTIPOINT(483239.07014 239264.86823) MULTIPOINT(584627.38842 693322.92413) MULTIPOINT(531622.19236 716647.0409) MULTIPOINT(581975.3656 694284.04885) MULTIPOINT(446160.13588 550892.86503) MULTIPOINT(529311.59037 610942.50619) MULTIPOINT(581808.72699 695841.70311) MULTIPOINT(504782.46851 615893.18621) MULTIPOINT(622500.15625 752230.03026) MULTIPOINT(349366.22234 363016.92123) MULTIPOINT(594903.33074 545923.43693) MULTIPOINT(441308.57019 229022.74901) MULTIPOINT(605633.26966 771823.45975) MULTIPOINT(318054.39683 406677.96877) MULTIPOINT(606814.49094 683559.83739) MULTIPOINT(427202.24558 526355.92112) MULTIPOINT(585605.65458 428734.29996) MULTIPOINT(348498.22029 696622.25466) MULTIPOINT(447753.88823 552268.21802) MULTIPOINT(562081.95051 696159.34758) MULTIPOINT(449917.46153 516567.92252) MULTIPOINT(509151.60704 594632.16326) MULTIPOINT(565466.43528 673573.12364) MULTIPOINT(492421.36236 719117.79927) MULTIPOINT(613346.49996 691449.74754) MULTIPOINT(341505.39323 347633.86011) MULTIPOINT(335130.10922 221738.45857) MULTIPOINT(520476.8592 607380.89342) MULTIPOINT(610931.06529 690104.94336) MULTIPOINT(577692.98162 695342.84069) MULTIPOINT(623744.42521 697297.79934) MULTIPOINT(439667.9941 646984.2557) MULTIPOINT(507141.1403 606418.24612) MULTIPOINT(575383.92723 737533.32187) MULTIPOINT(413215.49525 523736.83631) MULTIPOINT(561887.18089 504214.42238) MULTIPOINT(583428.22076 759656.92773) MULTIPOINT(421018.92505 813910.21541) MULTIPOINT(621373.92981 690044.79287) MULTIPOINT(470983.15933 620692.73333) MULTIPOINT(508947.75836 706720.50714) ������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ.select.expected����������������������������������0000644�0000000�0000000�00000000055�11540676357�023755� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINT(0 1 2 3,9 -1 -2 -3,9 -1 -20 -123) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon-w.select.expected��������������������������������0000644�0000000�0000000�00000000206�11540676357�024114� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint.dbf���������������������������������������0000644�0000000�0000000�00000000144�11722777314�022740� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������oB���!���������������������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint-w.select.expected���������������������������������0000644�0000000�0000000�00000000032�11540676357�024062� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINT(0 1,9 -1,9 -1) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog-post.sql������������������������������������0000644�0000000�0000000�00000000050�11722777314�023440� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- cleanup DELETE FROM spatial_ref_sys; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM-G.shp.expected��������������������������������������0000644�0000000�0000000�00000001230�11540722277�022747� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������Lè�����������$À������$À������$@������$@����������������������.À������.@��������������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������.À������.@������ð?������@������@������@������ð?������"@������.@������*@������&@������"@������ð¿������À������À������À������ð¿������"À������.À������*À������&À������"À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ-G.shp.expected������������������������������������������0000644�0000000�0000000�00000000644�11540722277�022052� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Òè�� �������������������������$@������$@������ð?������@������@������"@������œ �������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@������ð?������@������ð?�������@������@������@������@������@������@������@������"@������"@������ @������@������@������@������@������@��������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM.select.expected�������������������������������������0000644�0000000�0000000�00000000277�11540676357�023271� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGONM(((0 0 1,0 10 7,10 10 5,10 0 3,0 0 1),(5 5 9,8 5 15,8 8 13,5 8 11,5 5 9)),((-1 -1 -1,-1 -10 -7,-10 -10 -5,-10 -1 -3,-1 -1 -1),(-5 -5 -9,-8 -5 -15,-8 -8 -13,-5 -8 -11,-5 -5 -9))) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Latin1.dbf���������������������������������������������������0000644�0000000�0000000�00000000143�11722777314�020316� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���A�!���������������������ADDRESS����C���� ��������������� Tårneby in Våler I Solør kommune�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon.shp.expected�����������������������������������������0000644�0000000�0000000�00000000750�11540676357�022463� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint.shx�����������������������������������������������0000644�0000000�0000000�00000000154�10462153143�021327� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�������������������ð¿������"@������ð?�����������������������������������2���,��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM.shp.expected�������������������������������������0000644�0000000�0000000�00000000354�11540676357�023255� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������vè�������������������ð¿������"@������ð?���������������������À^À������@������@�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿�����À^À������@������@������À�����À^À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcM.shp�����������������������������������������������������0000644�0000000�0000000�00000000534�11722777314�020053� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������®è���������������������������$@������$@����������������������ð?������@������x�������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@������ð?������@������ð?�������@������@������@������@������@������@��������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon.opts����������������������������������������������0000644�0000000�0000000�00000000631�11540141776�021437� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# You cannot create a test tablespace because tablespaces need to be directories that # are owned by the postgres user, which is rarely the same as the user running the test, # and you can't chown without sudo, so we gave up on trying to have a test that proves # the -T and -X parameters work. However we can at least test that they don't cause # any problems, which is what this test is for. -T pg_default �������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NotReallyMultiPoint-w.select.expected������������������������0000644�0000000�0000000�00000004676�11764431755�025735� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINT(580936.14282 819465.26182) MULTIPOINT(506358.89382 607539.2573) MULTIPOINT(630565.96358 527840.45893) MULTIPOINT(315456.49222 345306.81409) MULTIPOINT(471022.70077 736736.49304) MULTIPOINT(500018.60921 615679.27508) MULTIPOINT(219498.72249 315980.37513) MULTIPOINT(319224.66926 318928.06245) MULTIPOINT(568650.77442 460462.13034) MULTIPOINT(556409.11354 729253.3099) MULTIPOINT(513863.46763 702618.74217) MULTIPOINT(578737.93901 752848.93601) MULTIPOINT(574438.60845 769113.19633) MULTIPOINT(542424.35101 668316.88013) MULTIPOINT(400265.83533 734407.0336) MULTIPOINT(451759.863 412686.10072) MULTIPOINT(569910.58361 459856.20941) MULTIPOINT(463382.92261 699974.01989) MULTIPOINT(604477.02181 740527.99913) MULTIPOINT(507899.65188 708318.27556) MULTIPOINT(417174.24178 505305.09095) MULTIPOINT(577806.69953 694316.9334) MULTIPOINT(576210.38329 714992.28805) MULTIPOINT(577656.9425 695830.7359) MULTIPOINT(581803.77911 693852.46425) MULTIPOINT(483239.07014 239264.86823) MULTIPOINT(584627.38842 693322.92413) MULTIPOINT(531622.19236 716647.0409) MULTIPOINT(581975.3656 694284.04885) MULTIPOINT(446160.13588 550892.86503) MULTIPOINT(529311.59037 610942.50619) MULTIPOINT(581808.72699 695841.70311) MULTIPOINT(504782.46851 615893.18621) MULTIPOINT(622500.15625 752230.03026) MULTIPOINT(349366.22234 363016.92123) MULTIPOINT(594903.33074 545923.43693) MULTIPOINT(441308.57019 229022.74901) MULTIPOINT(605633.26966 771823.45975) MULTIPOINT(318054.39683 406677.96877) MULTIPOINT(606814.49094 683559.83739) MULTIPOINT(427202.24558 526355.92112) MULTIPOINT(585605.65458 428734.29996) MULTIPOINT(348498.22029 696622.25466) MULTIPOINT(447753.88823 552268.21802) MULTIPOINT(562081.95051 696159.34758) MULTIPOINT(449917.46153 516567.92252) MULTIPOINT(509151.60704 594632.16326) MULTIPOINT(565466.43528 673573.12364) MULTIPOINT(492421.36236 719117.79927) MULTIPOINT(613346.49996 691449.74754) MULTIPOINT(341505.39323 347633.86011) MULTIPOINT(335130.10922 221738.45857) MULTIPOINT(520476.8592 607380.89342) MULTIPOINT(610931.06529 690104.94336) MULTIPOINT(577692.98162 695342.84069) MULTIPOINT(623744.42521 697297.79934) MULTIPOINT(439667.9941 646984.2557) MULTIPOINT(507141.1403 606418.24612) MULTIPOINT(575383.92723 737533.32187) MULTIPOINT(413215.49525 523736.83631) MULTIPOINT(561887.18089 504214.42238) MULTIPOINT(583428.22076 759656.92773) MULTIPOINT(421018.92505 813910.21541) MULTIPOINT(621373.92981 690044.79287) MULTIPOINT(470983.15933 620692.73333) MULTIPOINT(508947.75836 706720.50714) ������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema.shx������������������������������������������0000644�0000000�0000000�00000000174�11540714001�022265� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������>è�������������������ð¿������"@������ð?�����������������������������������2��� ���@��� ���N��� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts-post.sql����������������������������������������0000644�0000000�0000000�00000000050�11722777314�022636� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Cleanup DELETE FROM spatial_ref_sys; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM-G.select.expected�������������������������������������0000644�0000000�0000000�00000000116�11611631125�023066� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;POINTM(0 1 3) SRID=4326;POINTM(9 -1 -123) SRID=4326;POINTM(9 -1 -3) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema.select.sql�����������������������������������0000644�0000000�0000000�00000000075�11722777314�023562� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom) from pgreg.loadedshp order by 1; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint.dbf�����������������������������������������������0000644�0000000�0000000�00000000041�11722777314�021267� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon.select.sql���������������������������������������0000644�0000000�0000000�00000000054�11722777314�022644� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom) from loadedshp; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonM-w.select.expected�����������������������������������0000644�0000000�0000000�00000000277�11540676357�023535� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGONM(((0 0 1,0 10 7,10 10 5,10 0 3,0 0 1),(5 5 9,8 5 15,8 8 13,5 8 11,5 5 9)),((-1 -1 -1,-1 -10 -7,-10 -10 -5,-10 -1 -3,-1 -1 -1),(-5 -5 -9,-8 -5 -15,-8 -8 -13,-5 -8 -11,-5 -5 -9))) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ.select.sql���������������������������������������0000644�0000000�0000000�00000000066�11722777314�022752� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ-w.select.expected��������������������������������0000644�0000000�0000000�00000000055�11540676357�024221� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINT(0 1 2 3,9 -1 -2 -3,9 -1 -20 -123) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPtsGeog.select.sql����������������������������������0000644�0000000�0000000�00000000120�11722777314�023731� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(ST_SnapToGrid(the_geom::geometry,0.00000001)) from loadedshp; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts.dbf���������������������������������������������0000644�0000000�0000000�00000000144�11722777314�021613� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������oB���!���������������������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ.shp�������������������������������������������������0000644�0000000�0000000�00000001510�11722777314�021005� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������¤è�����������$À������$À������$@������$@������,À������,@������.À������.@�����n���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������,À������,@��������������@������@�������@�������������� @������,@������(@������$@������ @������ð¿������À������À�������À������ð¿������ À������,À������(À������$À������ À������.À������.@������ð?������@������@������@������ð?������"@������.@������*@������&@������"@������ð¿������À������À������À������ð¿������"À������.À������*À������&À������"À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPoint.select.sql����������������������������������������0000644�0000000�0000000�00000000066�11722777314�022620� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Asewkt(the_geom::geometry) from loadedshp; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon.dbf��������������������������������������������������0000644�0000000�0000000�00000000041�11722777314�020612� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Point-G.select.expected��������������������������������������0000644�0000000�0000000�00000000101�11540721245�022747� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;POINT(0 1) SRID=4326;POINT(9 -1) SRID=4326;POINT(9 -1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint.shx���������������������������������������0000644�0000000�0000000�00000001164�11540676357�023015� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������:è�����±¾©ÇUË AWì%«S A§èYíK>#Aƒ †)A�����������������������������������2������R������r������’������²������Ò������ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R�����r�����’�����²�����Ò�����ò����������2�����R���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointM.shp.expected������������������������������������������0000644�0000000�0000000�00000000320�11540676357�022233� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������hè�������������������ð¿������"@������ð?���������������������À^À������@�����������������������ð?������@���������������"@������ð¿������À���������������"@������ð¿�����À^À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM-w.select.expected��������������������������������0000644�0000000�0000000�00000000045�11540676357�024203� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOINTM(0 1 3,9 -1 -3,9 -1 -123) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts.opts��������������������������������������������0000644�0000000�0000000�00000000233�11673707266�022050� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This happens to be a multipoint shapefile that has only single points, so use -S. # It is in NJ State Plane NAD83, so reproject to 4326. -S -s 2260:4326 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon-G.select.expected������������������������������������0000644�0000000�0000000�00000000220�11540721245�023307� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,8 5,8 8,5 8,5 5)),((-1 -1,-1 -10,-10 -10,-10 -1,-1 -1),(-5 -5,-8 -5,-8 -8,-5 -8,-5 -5))) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTPolygon.shp�����������������������������������������������0000644�0000000�0000000�00000000750�11540141776�021246� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema.opts�����������������������������������������0000644�0000000�0000000�00000000132�11540714001�022442� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test loading a table with a schema. -g the_geom loader/PointWithSchema pgreg.loadedshp ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointM.shp����������������������������������������������0000644�0000000�0000000�00000000354�11722777314�021452� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������vè�������������������ð¿������"@������ð?���������������������À^À������@������@�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿�����À^À������@������@������À�����À^À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ-w.select.expected�����������������������������������0000644�0000000�0000000�00000000366�11540676357�023551� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MULTIPOLYGON(((0 0 0 1,0 10 6 7,10 10 4 5,10 0 2 3,0 0 0 1),(5 5 8 9,8 5 14 15,8 8 12 13,5 8 10 11,5 5 8 9)),((-1 -1 -1 -1,-1 -10 -6 -7,-10 -10 -4 -5,-10 -1 -2 -3,-1 -1 -1 -1),(-5 -5 -8 -9,-8 -5 -14 -15,-8 -8 -12 -13,-5 -8 -10 -11,-5 -5 -8 -9))) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts.select.expected���������������������������������0000644�0000000�0000000�00000005307�11544166732�024143� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;POINT(-74.17782492 41.08263361) SRID=4326;POINT(-74.44881286 40.50133744) SRID=4326;POINT(-74.00376358 40.28149688) SRID=4326;POINT(-75.12863742 39.7797389) SRID=4326;POINT(-74.57629014 40.85597595) SRID=4326;POINT(-74.47160401 40.52369066) SRID=4326;POINT(-75.46891683 39.69688334) SRID=4326;POINT(-75.11458618 39.70739231) SRID=4326;POINT(-74.22643701 40.09726563) SRID=4326;POINT(-74.26766926 40.83522615) SRID=4326;POINT(-74.42152037 40.76232181) SRID=4326;POINT(-74.18666598 40.89980341) SRID=4326;POINT(-74.20201874 40.94448827) SRID=4326;POINT(-74.31866663 40.6680465) SRID=4326;POINT(-74.83205963 40.84912898) SRID=4326;POINT(-74.64402101 39.96633708) SRID=4326;POINT(-74.22194028 40.09559148) SRID=4326;POINT(-74.60375255 40.75504208) SRID=4326;POINT(-74.09376018 40.86569336) SRID=4326;POINT(-74.4430374 40.77797967) SRID=4326;POINT(-74.76841703 40.22038455) SRID=4326;POINT(-74.19078182 40.73914574) SRID=4326;POINT(-74.19628444 40.79591416) SRID=4326;POINT(-74.19130306 40.74330253) SRID=4326;POINT(-74.17636308 40.73783123) SRID=4326;POINT(-74.53148731 39.49029456) SRID=4326;POINT(-74.16618054 40.73634864) SRID=4326;POINT(-74.35732607 40.80076793) SRID=4326;POINT(-74.17573811 40.73901418) SRID=4326;POINT(-74.66491581 40.34572735) SRID=4326;POINT(-74.36625323 40.51061374) SRID=4326;POINT(-74.17631876 40.74329159) SRID=4326;POINT(-74.4544664 40.52427239) SRID=4326;POINT(-74.02836656 40.89756584) SRID=4326;POINT(-75.00833975 39.82895026) SRID=4326;POINT(-74.13132221 40.33161528) SRID=4326;POINT(-74.67999522 39.46203859) SRID=4326;POINT(-74.08904806 40.9515804) SRID=4326;POINT(-75.12091068 39.94826917) SRID=4326;POINT(-74.08628025 40.70929009) SRID=4326;POINT(-74.73270242 40.27825159) SRID=4326;POINT(-74.16625303 40.01000431) SRID=4326;POINT(-75.01837982 40.74472398) SRID=4326;POINT(-74.65920653 40.34951097) SRID=4326;POINT(-74.24751143 40.74434122) SRID=4326;POINT(-74.65122484 40.25151634) SRID=4326;POINT(-74.43880205 40.4659008) SRID=4326;POINT(-74.2355417 40.68231466) SRID=4326;POINT(-74.49892935 40.80763833) SRID=4326;POINT(-74.0625762 40.73086062) SRID=4326;POINT(-75.03600164 39.78659251) SRID=4326;POINT(-75.05591643 39.44084942) SRID=4326;POINT(-74.39804333 40.50086907) SRID=4326;POINT(-74.07131567 40.72720191) SRID=4326;POINT(-74.19117919 40.74196293) SRID=4326;POINT(-74.02494262 40.74676479) SRID=4326;POINT(-74.68894668 40.6094749) SRID=4326;POINT(-74.44600226 40.49825884) SRID=4326;POINT(-74.19898991 40.85779571) SRID=4326;POINT(-74.7828046 40.27094999) SRID=4326;POINT(-74.25017536 40.217432) SRID=4326;POINT(-74.16960551 40.91844326) SRID=4326;POINT(-74.75788852 41.06754763) SRID=4326;POINT(-74.03363729 40.72689071) SRID=4326;POINT(-74.5760699 40.53743164) SRID=4326;POINT(-74.43925667 40.77359187) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc.dbf������������������������������������������������������0000644�0000000�0000000�00000000131�11722777314�017670� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_���A� ���������������������ID���������N���� ��������������� 1 2 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ-G.shp.expected��������������������������������������0000644�0000000�0000000�00000001510�11540722277�022765� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������¤è�����������$À������$À������$@������$@������,À������,@������.À������.@�����n���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������,À������,@��������������@������@�������@�������������� @������,@������(@������$@������ @������ð¿������À������À�������À������ð¿������ À������,À������(À������$À������ À������.À������.@������ð?������@������@������@������ð?������"@������.@������*@������&@������"@������ð¿������À������À������À������ð¿������"À������.À������*À������&À������"À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ.shp.expected����������������������������������������0000644�0000000�0000000�00000001510�11540676357�022610� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' ����������������������¤è�����������$À������$À������$@������$@������,À������,@������.À������.@�����n���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������,À������,@��������������@������@�������@�������������� @������,@������(@������$@������ @������ð¿������À������À�������À������ð¿������ À������,À������(À������$À������ À������.À������.@������ð?������@������@������@������ð?������"@������.@������*@������&@������"@������ð¿������À������À������À������ð¿������"À������.À������*À������&À������"À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc.shx������������������������������������������������������0000644�0000000�0000000�00000000164�10462153143�017731� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������:è���������������������������$@������$@�����������������������������������2���:���p���T������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PolygonZ-G.select.expected�����������������������������������0000644�0000000�0000000�00000000400�11540721245�023441� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SRID=4326;MULTIPOLYGON(((0 0 0 1,0 10 6 7,10 10 4 5,10 0 2 3,0 0 0 1),(5 5 8 9,8 5 14 15,8 8 12 13,5 8 10 11,5 5 8 9)),((-1 -1 -1 -1,-1 -10 -6 -7,-10 -10 -4 -5,-10 -1 -2 -3,-1 -1 -1 -1),(-5 -5 -8 -9,-8 -5 -14 -15,-8 -8 -12 -13,-5 -8 -10 -11,-5 -5 -8 -9))) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc-w.select.expected����������������������������������������0000644�0000000�0000000�00000002032�11540676357�022465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������01050000000200000001020000000200000000000000000000000000000000000000000000000000F03F000000000000F03F0102000000020000000000000000000840000000000000084000000000000010400000000000001040 01050000000300000001020000000200000000000000000000000000000000000000000000000000F03F000000000000F03F0102000000020000000000000000000840000000000000084000000000000010400000000000001040010200000003000000000000000000244000000000000024400000000000001440000000000000144000000000000008400000000000000840 000000000500000002000000000200000002000000000000000000000000000000003FF00000000000003FF00000000000000000000002000000024008000000000000400800000000000040100000000000004010000000000000 000000000500000003000000000200000002000000000000000000000000000000003FF00000000000003FF00000000000000000000002000000024008000000000000400800000000000040100000000000004010000000000000000000000200000003402400000000000040240000000000004014000000000000401400000000000040080000000000004008000000000000 MULTILINESTRING((0 0,1 1),(3 3,4 4)) MULTILINESTRING((0 0,1 1),(3 3,4 4),(10 10,5 5,3 3)) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc.shp������������������������������������������������������0000644�0000000�0000000�00000000620�11722777314�017732� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Èè���������������������������$@������$@��������������������������������������:�������������������������@������@�����������������������������������ð?������ð?������@������@������@������@������T�������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiPointZ.shp.expected�������������������������������������0000644�0000000�0000000�00000000424�11540676357�023270� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Šè�������������������ð¿������"@������ð?������4À�������@�����À^À������@������T�����������������ð¿������"@������ð?�����������������ð?������"@������ð¿������"@������ð¿������4À�������@�������@�������À������4À�����À^À������@������@������À�����À^À��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/NoTransPoint.dbf���������������������������������������������0000644�0000000�0000000�00000000041�11722777314�021561� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSIPolygon.shx�����������������������������������������������0000644�0000000�0000000�00000000154�11540141776�021241� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������6è�����������$À������$À������$@������$@�����������������������������������2���¾��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ.select.sql����������������������������������������������0000644�0000000�0000000�00000000324�11722777314�021350� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������select ST_Ashexewkb(the_geom::geometry, 'NDR') from loadedshp order by 1; select ST_Ashexewkb(the_geom::geometry, 'XDR') from loadedshp order by 1; select ST_Asewkt(the_geom::geometry) from loadedshp order by 1; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/PointWithSchema.select.expected������������������������������0000644�0000000�0000000�00000000043�11540734340�024545� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(0 1) POINT(9 -1) POINT(9 -1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Polygon-G.shp.expected���������������������������������������0000644�0000000�0000000�00000000750�11540722277�022640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������ôè�����������$À������$À������$@������$@��������������������������������������¾���������$À������$À������$@������$@������������� ������������������������������������$@������$@������$@������$@������������������������������@������@������ @������@������ @������ @������@������ @������@������@������ð¿������ð¿������ð¿������$À������$À������$À������$À������ð¿������ð¿������ð¿������À������À������ À������À������ À������ À������À������ À������À������À������������������������postgis-2.1.2+dfsg.orig/regress/loader/TSTIPolygon.dbf����������������������������������������������0000644�0000000�0000000�00000000041�11722777314�021316� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����!���������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Latin1.select.expected���������������������������������������0000644�0000000�0000000�00000000046�11565546263�022646� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|TÃ¥rneby in VÃ¥ler I Solør kommune ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ArcZ.shp.expected��������������������������������������������0000644�0000000�0000000�00000000644�11540676357�021675� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������' �����������������������Òè�� �������������������������$@������$@������ð?������@������@������"@������œ �������������������������$@������$@��������������������������������������ð?������ð?������@������@������@������@������$@������$@������@������@������@������@������ð?������@������ð?�������@������@������@������@������@������@������@������"@������"@������ @������@������@������@������@������@��������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/Arc-G.select.expected����������������������������������������0000644�0000000�0000000�00000002116�11540721245�022373� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0105000020E61000000200000001020000000200000000000000000000000000000000000000000000000000F03F000000000000F03F0102000000020000000000000000000840000000000000084000000000000010400000000000001040 0105000020E61000000300000001020000000200000000000000000000000000000000000000000000000000F03F000000000000F03F0102000000020000000000000000000840000000000000084000000000000010400000000000001040010200000003000000000000000000244000000000000024400000000000001440000000000000144000000000000008400000000000000840 0020000005000010E600000002000000000200000002000000000000000000000000000000003FF00000000000003FF00000000000000000000002000000024008000000000000400800000000000040100000000000004010000000000000 0020000005000010E600000003000000000200000002000000000000000000000000000000003FF00000000000003FF00000000000000000000002000000024008000000000000400800000000000040100000000000004010000000000000000000000200000003402400000000000040240000000000004014000000000000401400000000000040080000000000004008000000000000 SRID=4326;MULTILINESTRING((0 0,1 1),(3 3,4 4)) SRID=4326;MULTILINESTRING((0 0,1 1),(3 3,4 4),(10 10,5 5,3 3)) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/ReprojectPts-pre.sql�����������������������������������������0000644�0000000�0000000�00000002723�12315271514�022436� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- In case this test is running in an extension context TRUNCATE spatial_ref_sys; --- --- EPSG 4326 : WGS 84 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4326,'EPSG',4326,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '); --- --- EPSG 2260 : NAD83 / New York East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2260,'EPSG',2260,'PROJCS["NAD83 / New York East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","2260"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs '); ���������������������������������������������postgis-2.1.2+dfsg.orig/regress/loader/MultiToSinglePoint-w.select.expected�������������������������0000644�0000000�0000000�00000004164�11764431755�025540� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������POINT(580936.14282 819465.26182) POINT(506358.89382 607539.2573) POINT(630565.96358 527840.45893) POINT(315456.49222 345306.81409) POINT(471022.70077 736736.49304) POINT(500018.60921 615679.27508) POINT(219498.72249 315980.37513) POINT(319224.66926 318928.06245) POINT(568650.77442 460462.13034) POINT(556409.11354 729253.3099) POINT(513863.46763 702618.74217) POINT(578737.93901 752848.93601) POINT(574438.60845 769113.19633) POINT(542424.35101 668316.88013) POINT(400265.83533 734407.0336) POINT(451759.863 412686.10072) POINT(569910.58361 459856.20941) POINT(463382.92261 699974.01989) POINT(604477.02181 740527.99913) POINT(507899.65188 708318.27556) POINT(417174.24178 505305.09095) POINT(577806.69953 694316.9334) POINT(576210.38329 714992.28805) POINT(577656.9425 695830.7359) POINT(581803.77911 693852.46425) POINT(483239.07014 239264.86823) POINT(584627.38842 693322.92413) POINT(531622.19236 716647.0409) POINT(581975.3656 694284.04885) POINT(446160.13588 550892.86503) POINT(529311.59037 610942.50619) POINT(581808.72699 695841.70311) POINT(504782.46851 615893.18621) POINT(622500.15625 752230.03026) POINT(349366.22234 363016.92123) POINT(594903.33074 545923.43693) POINT(441308.57019 229022.74901) POINT(605633.26966 771823.45975) POINT(318054.39683 406677.96877) POINT(606814.49094 683559.83739) POINT(427202.24558 526355.92112) POINT(585605.65458 428734.29996) POINT(348498.22029 696622.25466) POINT(447753.88823 552268.21802) POINT(562081.95051 696159.34758) POINT(449917.46153 516567.92252) POINT(509151.60704 594632.16326) POINT(565466.43528 673573.12364) POINT(492421.36236 719117.79927) POINT(613346.49996 691449.74754) POINT(341505.39323 347633.86011) POINT(335130.10922 221738.45857) POINT(520476.8592 607380.89342) POINT(610931.06529 690104.94336) POINT(577692.98162 695342.84069) POINT(623744.42521 697297.79934) POINT(439667.9941 646984.2557) POINT(507141.1403 606418.24612) POINT(575383.92723 737533.32187) POINT(413215.49525 523736.83631) POINT(561887.18089 504214.42238) POINT(583428.22076 759656.92773) POINT(421018.92505 813910.21541) POINT(621373.92981 690044.79287) POINT(470983.15933 620692.73333) POINT(508947.75836 706720.50714) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/out_geography_expected����������������������������������������������0000644�0000000�0000000�00000013614�11722777314�021732� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gml_empty_geom| gml_precision_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point> gml_precision_02|<gml:Point srsName="EPSG:4326"><gml:coordinates>1.1111111,1.1111111</gml:coordinates></gml:Point> gml_version_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point> gml_version_02|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point> ERROR: Only GML 2 and GML 3 are supported ERROR: Only GML 2 and GML 3 are supported gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point> gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point> gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 1</gml:pos></gml:Point> gml_deegree_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point> gml_deegree_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:coordinates>1,2</gml:coordinates></gml:Point> gml_deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point> gml_deegree_04|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point> gml_prefix_01|<Point srsName="EPSG:4326"><coordinates>1,2</coordinates></Point> gml_prefix_02|<Point srsName="EPSG:4326"><pos srsDimension="2">1 2</pos></Point> gml_prefix_03|<foo:Point srsName="EPSG:4326"><foo:coordinates>1,2</foo:coordinates></foo:Point> gml_prefix_04|<foo:Point srsName="EPSG:4326"><foo:pos srsDimension="2">1 2</foo:pos></foo:Point> ERROR: GetProj4StringSPI: Cannot find SRID (10) in spatial_ref_sys kml_srid_02|<Point><coordinates>0,1</coordinates></Point> kml_empty_geom| kml_precision_01|<Point><coordinates>1,1</coordinates></Point> kml_precision_02|<Point><coordinates>1.1111111,1.1111111</coordinates></Point> kml_version_01|<Point><coordinates>1,1</coordinates></Point> ERROR: Only KML 2 is supported ERROR: Only KML 2 is supported kml_prefix_01|<Point><coordinates>1,2</coordinates></Point> kml_prefix_02|<kml:Point><kml:coordinates>1,2</kml:coordinates></kml:Point> ERROR: Only lon/lat coordinate systems are supported in geography. svg_empty_geom| svg_option_01|M 1 -1 L 4 -4 5 -7 svg_option_02|M 1 -1 l 3 -3 1 -3 svg_option_03|M 1 -1 L 4 -4 5 -7 svg_option_04|M 1 -1 l 3 -3 1 -3 svg_precision_01|x="1" y="-1" svg_precision_02|x="1.1111111" y="-1.1111111" geojson_empty_geom| geojson_precision_01|{"type":"Point","coordinates":[1,1]} geojson_precision_02|{"type":"Point","coordinates":[1.1111111,1.1111111]} geojson_version_01|{"type":"Point","coordinates":[1,1]} ERROR: Only GeoJSON 1 is supported ERROR: Only GeoJSON 1 is supported geojson_crs_01|{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[1,1]} geojson_crs_02|{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[1,1]} geojson_crs_03|{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[1,1]} geojson_crs_04|{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[1,1]} ERROR: GetProj4StringSPI: Cannot find SRID (1) in spatial_ref_sys ERROR: GetProj4StringSPI: Cannot find SRID (1) in spatial_ref_sys geojson_bbox_01|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_bbox_02|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_bbox_03|{"type":"LineString","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_bbox_04|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_01|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_02|{"type":"LineString","coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_03|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_04|{"type":"LineString","bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_05|{"type":"LineString","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_06|{"type":"LineString","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_07|{"type":"LineString","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_08|{"type":"LineString","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_09|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_10|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_11|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_12|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_13|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_14|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_15|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} geojson_options_16|{"type":"LineString","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1,1,4,4],"coordinates":[[1,1],[2,2],[3,3],[4,4]]} ��������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/regress/wmsservers_expected�������������������������������������������������0000644�0000000�0000000�00000000731�12030215310�021242� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Starting up MapServer/Geoserver tests... Setting up the data table... ALTER TABLE Running Geoserver 2.0 NG tests... Geoserver1|POLYGON Geoserver2|4326 Geoserver3|-500|AAAAAAMAAAABAAA Geoserver4|1 Geoserver5|25|AAAAAAMAAAABAAA Geoserver6|25|AAAAAAMAAAABAAA MapServer1|id MapServer2|-9465|AQcAAAABAAAAAQM|-9465 MapServer2|-9460|AQcAAAABAAAAAQM|-9460 MapServer3|id MapServer4|-9465|010700000001000|-9465 MapServer4|-9460|010700000001000|-9460 Removing the data table... Done. ���������������������������������������postgis-2.1.2+dfsg.orig/regress/regress_index_nulls_expected����������������������������������������0000644�0000000�0000000�00000000324�11777604124�023124� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "indexnulls" does not exist, skipping NOTICE: table "indexnulls" does not exist, skipping NOTICE: table "indexempty" does not exist, skipping NOTICE: table "indexempty" does not exist, skipping ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015544� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkb.c��������������������������������������������������������0000644�0000000�0000000�00000046340�12031410715�017522� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeom_log.h" /** * Used for passing the parse state between the parsing functions. */ typedef struct { const uint8_t *wkb; /* Points to start of WKB */ size_t wkb_size; /* Expected size of WKB */ int swap_bytes; /* Do an endian flip? */ int check; /* Simple validity checks on geometries */ uint32_t lwtype; /* Current type we are handling */ uint32_t srid; /* Current SRID we are handling */ int has_z; /* Z? */ int has_m; /* M? */ int has_srid; /* SRID? */ const uint8_t *pos; /* Current parse position */ } wkb_parse_state; /** * Internal function declarations. */ LWGEOM* lwgeom_from_wkb_state(wkb_parse_state *s); /**********************************************************************/ /* Our static character->number map. Anything > 15 is invalid */ static uint8_t hex2char[256] = { /* not Hex characters */ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, /* 0-9 */ 0,1,2,3,4,5,6,7,8,9,20,20,20,20,20,20, /* A-F */ 20,10,11,12,13,14,15,20,20,20,20,20,20,20,20,20, /* not Hex characters */ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, /* a-f */ 20,10,11,12,13,14,15,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, /* not Hex characters (upper 128 characters) */ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20 }; uint8_t* bytes_from_hexbytes(const char *hexbuf, size_t hexsize) { uint8_t *buf = NULL; register uint8_t h1, h2; int i; if( hexsize % 2 ) lwerror("Invalid hex string, length (%d) has to be a multiple of two!", hexsize); buf = lwalloc(hexsize/2); if( ! buf ) lwerror("Unable to allocate memory buffer."); for( i = 0; i < hexsize/2; i++ ) { h1 = hex2char[(int)hexbuf[2*i]]; h2 = hex2char[(int)hexbuf[2*i+1]]; if( h1 > 15 ) lwerror("Invalid hex character (%c) encountered", hexbuf[2*i]); if( h2 > 15 ) lwerror("Invalid hex character (%c) encountered", hexbuf[2*i+1]); /* First character is high bits, second is low bits */ buf[i] = ((h1 & 0x0F) << 4) | (h2 & 0x0F); } return buf; } /**********************************************************************/ /** * Check that we are not about to read off the end of the WKB * array. */ static inline void wkb_parse_state_check(wkb_parse_state *s, size_t next) { if( (s->pos + next) > (s->wkb + s->wkb_size) ) lwerror("WKB structure does not match expected size!"); } /** * Take in an unknown kind of wkb type number and ensure it comes out * as an extended WKB type number (with Z/M/SRID flags masked onto the * high bits). */ static void lwtype_from_wkb_state(wkb_parse_state *s, uint32_t wkb_type) { uint32_t wkb_simple_type; LWDEBUG(4, "Entered function"); s->has_z = LW_FALSE; s->has_m = LW_FALSE; s->has_srid = LW_FALSE; /* If any of the higher bits are set, this is probably an extended type. */ if( wkb_type & 0xF0000000 ) { if( wkb_type & WKBZOFFSET ) s->has_z = LW_TRUE; if( wkb_type & WKBMOFFSET ) s->has_m = LW_TRUE; if( wkb_type & WKBSRIDFLAG ) s->has_srid = LW_TRUE; LWDEBUGF(4, "Extended type: has_z=%d has_m=%d has_srid=%d", s->has_z, s->has_m, s->has_srid); } /* Mask off the flags */ wkb_type = wkb_type & 0x0FFFFFFF; /* Strip out just the type number (1-12) from the ISO number (eg 3001-3012) */ wkb_simple_type = wkb_type % 1000; /* Extract the Z/M information from ISO style numbers */ if( wkb_type >= 3000 && wkb_type < 4000 ) { s->has_z = LW_TRUE; s->has_m = LW_TRUE; } else if ( wkb_type >= 2000 && wkb_type < 3000 ) { s->has_m = LW_TRUE; } else if ( wkb_type >= 1000 && wkb_type < 2000 ) { s->has_z = LW_TRUE; } switch (wkb_simple_type) { case WKB_POINT_TYPE: s->lwtype = POINTTYPE; break; case WKB_LINESTRING_TYPE: s->lwtype = LINETYPE; break; case WKB_POLYGON_TYPE: s->lwtype = POLYGONTYPE; break; case WKB_MULTIPOINT_TYPE: s->lwtype = MULTIPOINTTYPE; break; case WKB_MULTILINESTRING_TYPE: s->lwtype = MULTILINETYPE; break; case WKB_MULTIPOLYGON_TYPE: s->lwtype = MULTIPOLYGONTYPE; break; case WKB_GEOMETRYCOLLECTION_TYPE: s->lwtype = COLLECTIONTYPE; break; case WKB_CIRCULARSTRING_TYPE: s->lwtype = CIRCSTRINGTYPE; break; case WKB_COMPOUNDCURVE_TYPE: s->lwtype = COMPOUNDTYPE; break; case WKB_CURVEPOLYGON_TYPE: s->lwtype = CURVEPOLYTYPE; break; case WKB_MULTICURVE_TYPE: s->lwtype = MULTICURVETYPE; break; case WKB_MULTISURFACE_TYPE: s->lwtype = MULTISURFACETYPE; break; case WKB_POLYHEDRALSURFACE_TYPE: s->lwtype = POLYHEDRALSURFACETYPE; break; case WKB_TIN_TYPE: s->lwtype = TINTYPE; break; case WKB_TRIANGLE_TYPE: s->lwtype = TRIANGLETYPE; break; /* PostGIS 1.5 emits 13, 14 for CurvePolygon, MultiCurve */ /* These numbers aren't SQL/MM (numbers currently only */ /* go up to 12. We can handle the old data here (for now??) */ /* converting them into the lwtypes that are intended. */ case WKB_CURVE_TYPE: s->lwtype = CURVEPOLYTYPE; break; case WKB_SURFACE_TYPE: s->lwtype = MULTICURVETYPE; break; default: /* Error! */ lwerror("Unknown WKB type (%d)! Full WKB type number was (%d).", wkb_simple_type, wkb_type); break; } LWDEBUGF(4,"Got lwtype %s (%u)", lwtype_name(s->lwtype), s->lwtype); return; } /** * Byte * Read a byte and advance the parse state forward. */ static char byte_from_wkb_state(wkb_parse_state *s) { char char_value = 0; LWDEBUG(4, "Entered function"); wkb_parse_state_check(s, WKB_BYTE_SIZE); LWDEBUG(4, "Passed state check"); char_value = s->pos[0]; LWDEBUGF(4, "Read byte value: %x", char_value); s->pos += WKB_BYTE_SIZE; return char_value; } /** * Int32 * Read 4-byte integer and advance the parse state forward. */ static uint32_t integer_from_wkb_state(wkb_parse_state *s) { uint32_t i = 0; wkb_parse_state_check(s, WKB_INT_SIZE); memcpy(&i, s->pos, WKB_INT_SIZE); /* Swap? Copy into a stack-allocated integer. */ if( s->swap_bytes ) { int j = 0; uint8_t tmp; for( j = 0; j < WKB_INT_SIZE/2; j++ ) { tmp = ((uint8_t*)(&i))[j]; ((uint8_t*)(&i))[j] = ((uint8_t*)(&i))[WKB_INT_SIZE - j - 1]; ((uint8_t*)(&i))[WKB_INT_SIZE - j - 1] = tmp; } } s->pos += WKB_INT_SIZE; return i; } /** * Double * Read an 8-byte double and advance the parse state forward. */ static double double_from_wkb_state(wkb_parse_state *s) { double d = 0; wkb_parse_state_check(s, WKB_DOUBLE_SIZE); memcpy(&d, s->pos, WKB_DOUBLE_SIZE); /* Swap? Copy into a stack-allocated integer. */ if( s->swap_bytes ) { int i = 0; uint8_t tmp; for( i = 0; i < WKB_DOUBLE_SIZE/2; i++ ) { tmp = ((uint8_t*)(&d))[i]; ((uint8_t*)(&d))[i] = ((uint8_t*)(&d))[WKB_DOUBLE_SIZE - i - 1]; ((uint8_t*)(&d))[WKB_DOUBLE_SIZE - i - 1] = tmp; } } s->pos += WKB_DOUBLE_SIZE; return d; } /** * POINTARRAY * Read a dynamically sized point array and advance the parse state forward. * First read the number of points, then read the points. */ static POINTARRAY* ptarray_from_wkb_state(wkb_parse_state *s) { POINTARRAY *pa = NULL; size_t pa_size; uint32_t ndims = 2; uint32_t npoints = 0; /* Calculate the size of this point array. */ npoints = integer_from_wkb_state(s); if( s->has_z ) ndims++; if( s->has_m ) ndims++; pa_size = npoints * ndims * WKB_DOUBLE_SIZE; /* Empty! */ if( npoints == 0 ) return ptarray_construct(s->has_z, s->has_m, npoints); /* Does the data we want to read exist? */ wkb_parse_state_check(s, pa_size); /* If we're in a native endianness, we can just copy the data directly! */ if( ! s->swap_bytes ) { pa = ptarray_construct_copy_data(s->has_z, s->has_m, npoints, (uint8_t*)s->pos); s->pos += pa_size; } /* Otherwise we have to read each double, separately. */ else { int i = 0; double *dlist; pa = ptarray_construct(s->has_z, s->has_m, npoints); dlist = (double*)(pa->serialized_pointlist); for( i = 0; i < npoints * ndims; i++ ) { dlist[i] = double_from_wkb_state(s); } } return pa; } /** * POINT * Read a WKB point, starting just after the endian byte, * type number and optional srid number. * Advance the parse state forward appropriately. * WKB point has just a set of doubles, with the quantity depending on the * dimension of the point, so this looks like a special case of the above * with only one point. */ static LWPOINT* lwpoint_from_wkb_state(wkb_parse_state *s) { static uint32_t npoints = 1; POINTARRAY *pa = NULL; size_t pa_size; uint32_t ndims = 2; /* Count the dimensions. */ if( s->has_z ) ndims++; if( s->has_m ) ndims++; pa_size = ndims * WKB_DOUBLE_SIZE; /* Does the data we want to read exist? */ wkb_parse_state_check(s, pa_size); /* If we're in a native endianness, we can just copy the data directly! */ if( ! s->swap_bytes ) { pa = ptarray_construct_copy_data(s->has_z, s->has_m, npoints, (uint8_t*)s->pos); s->pos += pa_size; } /* Otherwise we have to read each double, separately */ else { int i = 0; double *dlist; pa = ptarray_construct(s->has_z, s->has_m, npoints); dlist = (double*)(pa->serialized_pointlist); for( i = 0; i < ndims; i++ ) { dlist[i] = double_from_wkb_state(s); } } return lwpoint_construct(s->srid, NULL, pa); } /** * LINESTRING * Read a WKB linestring, starting just after the endian byte, * type number and optional srid number. Advance the parse state * forward appropriately. * There is only one pointarray in a linestring. Optionally * check for minimal following of rules (two point minimum). */ static LWLINE* lwline_from_wkb_state(wkb_parse_state *s) { POINTARRAY *pa = ptarray_from_wkb_state(s); if( pa == NULL || pa->npoints == 0 ) return lwline_construct_empty(s->srid, s->has_z, s->has_m); if( s->check & LW_PARSER_CHECK_MINPOINTS && pa->npoints < 2 ) { lwerror("%s must have at least two points", lwtype_name(s->lwtype)); return NULL; } return lwline_construct(s->srid, NULL, pa); } /** * CIRCULARSTRING * Read a WKB circularstring, starting just after the endian byte, * type number and optional srid number. Advance the parse state * forward appropriately. * There is only one pointarray in a linestring. Optionally * check for minimal following of rules (three point minimum, * odd number of points). */ static LWCIRCSTRING* lwcircstring_from_wkb_state(wkb_parse_state *s) { POINTARRAY *pa = ptarray_from_wkb_state(s); if( pa == NULL || pa->npoints == 0 ) return lwcircstring_construct_empty(s->srid, s->has_z, s->has_m); if( s->check & LW_PARSER_CHECK_MINPOINTS && pa->npoints < 3 ) { lwerror("%s must have at least three points", lwtype_name(s->lwtype)); return NULL; } if( s->check & LW_PARSER_CHECK_ODD && ! (pa->npoints % 2) ) { lwerror("%s must have an odd number of points", lwtype_name(s->lwtype)); return NULL; } return lwcircstring_construct(s->srid, NULL, pa); } /** * POLYGON * Read a WKB polygon, starting just after the endian byte, * type number and optional srid number. Advance the parse state * forward appropriately. * First read the number of rings, then read each ring * (which are structured as point arrays) */ static LWPOLY* lwpoly_from_wkb_state(wkb_parse_state *s) { uint32_t nrings = integer_from_wkb_state(s); int i = 0; LWPOLY *poly = lwpoly_construct_empty(s->srid, s->has_z, s->has_m); /* Empty polygon? */ if( nrings == 0 ) return poly; for( i = 0; i < nrings; i++ ) { POINTARRAY *pa = ptarray_from_wkb_state(s); if( pa == NULL ) continue; /* Check for at least four points. */ if( s->check & LW_PARSER_CHECK_MINPOINTS && pa->npoints < 4 ) { LWDEBUGF(2, "%s must have at least four points in each ring", lwtype_name(s->lwtype)); lwerror("%s must have at least four points in each ring", lwtype_name(s->lwtype)); return NULL; } /* Check that first and last points are the same. */ if( s->check & LW_PARSER_CHECK_CLOSURE && ! ptarray_is_closed_2d(pa) ) { LWDEBUGF(2, "%s must have closed rings", lwtype_name(s->lwtype)); lwerror("%s must have closed rings", lwtype_name(s->lwtype)); return NULL; } /* Add ring to polygon */ if ( lwpoly_add_ring(poly, pa) == LW_FAILURE ) { LWDEBUG(2, "Unable to add ring to polygon"); lwerror("Unable to add ring to polygon"); } } return poly; } /** * TRIANGLE * Read a WKB triangle, starting just after the endian byte, * type number and optional srid number. Advance the parse state * forward appropriately. * Triangles are encoded like polygons in WKB, but more like linestrings * as lwgeometries. */ static LWTRIANGLE* lwtriangle_from_wkb_state(wkb_parse_state *s) { uint32_t nrings = integer_from_wkb_state(s); LWTRIANGLE *tri = lwtriangle_construct_empty(s->srid, s->has_z, s->has_m); POINTARRAY *pa = NULL; /* Empty triangle? */ if( nrings == 0 ) return tri; /* Should be only one ring. */ if ( nrings != 1 ) lwerror("Triangle has wrong number of rings: %d", nrings); /* There's only one ring, we hope? */ pa = ptarray_from_wkb_state(s); /* If there's no points, return an empty triangle. */ if( pa == NULL ) return tri; /* Check for at least four points. */ if( s->check & LW_PARSER_CHECK_MINPOINTS && pa->npoints < 4 ) { LWDEBUGF(2, "%s must have at least four points", lwtype_name(s->lwtype)); lwerror("%s must have at least four points", lwtype_name(s->lwtype)); return NULL; } if( s->check & LW_PARSER_CHECK_CLOSURE && ! ptarray_is_closed(pa) ) { lwerror("%s must have closed rings", lwtype_name(s->lwtype)); return NULL; } if( s->check & LW_PARSER_CHECK_ZCLOSURE && ! ptarray_is_closed_z(pa) ) { lwerror("%s must have closed rings", lwtype_name(s->lwtype)); return NULL; } tri->points = pa; return tri; } /** * CURVEPOLYTYPE */ static LWCURVEPOLY* lwcurvepoly_from_wkb_state(wkb_parse_state *s) { uint32_t ngeoms = integer_from_wkb_state(s); LWCURVEPOLY *cp = lwcurvepoly_construct_empty(s->srid, s->has_z, s->has_m); LWGEOM *geom = NULL; int i; /* Empty collection? */ if ( ngeoms == 0 ) return cp; for ( i = 0; i < ngeoms; i++ ) { geom = lwgeom_from_wkb_state(s); if ( lwcurvepoly_add_ring(cp, geom) == LW_FAILURE ) lwerror("Unable to add geometry (%p) to curvepoly (%p)", geom, cp); } return cp; } /** * POLYHEDRALSURFACETYPE */ /** * COLLECTION, MULTIPOINTTYPE, MULTILINETYPE, MULTIPOLYGONTYPE, COMPOUNDTYPE, * MULTICURVETYPE, MULTISURFACETYPE, * TINTYPE */ static LWCOLLECTION* lwcollection_from_wkb_state(wkb_parse_state *s) { uint32_t ngeoms = integer_from_wkb_state(s); LWCOLLECTION *col = lwcollection_construct_empty(s->lwtype, s->srid, s->has_z, s->has_m); LWGEOM *geom = NULL; int i; /* Empty collection? */ if ( ngeoms == 0 ) return col; /* Be strict in polyhedral surface closures */ if ( s->lwtype == POLYHEDRALSURFACETYPE ) s->check |= LW_PARSER_CHECK_ZCLOSURE; for ( i = 0; i < ngeoms; i++ ) { geom = lwgeom_from_wkb_state(s); if ( lwcollection_add_lwgeom(col, geom) == NULL ) { lwerror("Unable to add geometry (%p) to collection (%p)", geom, col); return NULL; } } return col; } /** * GEOMETRY * Generic handling for WKB geometries. The front of every WKB geometry * (including those embedded in collections) is an endian byte, a type * number and an optional srid number. We handle all those here, then pass * to the appropriate handler for the specific type. */ LWGEOM* lwgeom_from_wkb_state(wkb_parse_state *s) { char wkb_little_endian; uint32_t wkb_type; LWDEBUG(4,"Entered function"); /* Fail when handed incorrect starting byte */ wkb_little_endian = byte_from_wkb_state(s); if( wkb_little_endian != 1 && wkb_little_endian != 0 ) { LWDEBUG(4,"Leaving due to bad first byte!"); lwerror("Invalid endian flag value encountered."); return NULL; } /* Check the endianness of our input */ s->swap_bytes = LW_FALSE; if( getMachineEndian() == NDR ) /* Machine arch is little */ { if ( ! wkb_little_endian ) /* Data is big! */ s->swap_bytes = LW_TRUE; } else /* Machine arch is big */ { if ( wkb_little_endian ) /* Data is little! */ s->swap_bytes = LW_TRUE; } /* Read the type number */ wkb_type = integer_from_wkb_state(s); LWDEBUGF(4,"Got WKB type number: 0x%X", wkb_type); lwtype_from_wkb_state(s, wkb_type); /* Read the SRID, if necessary */ if( s->has_srid ) { s->srid = clamp_srid(integer_from_wkb_state(s)); /* TODO: warn on explicit UNKNOWN srid ? */ LWDEBUGF(4,"Got SRID: %u", s->srid); } /* Do the right thing */ switch( s->lwtype ) { case POINTTYPE: return (LWGEOM*)lwpoint_from_wkb_state(s); break; case LINETYPE: return (LWGEOM*)lwline_from_wkb_state(s); break; case CIRCSTRINGTYPE: return (LWGEOM*)lwcircstring_from_wkb_state(s); break; case POLYGONTYPE: return (LWGEOM*)lwpoly_from_wkb_state(s); break; case TRIANGLETYPE: return (LWGEOM*)lwtriangle_from_wkb_state(s); break; case CURVEPOLYTYPE: return (LWGEOM*)lwcurvepoly_from_wkb_state(s); break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COMPOUNDTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return (LWGEOM*)lwcollection_from_wkb_state(s); break; /* Unknown type! */ default: lwerror("Unsupported geometry type: %s [%d]", lwtype_name(s->lwtype), s->lwtype); } /* Return value to keep compiler happy. */ return NULL; } /* TODO add check for SRID consistency */ /** * WKB inputs *must* have a declared size, to prevent malformed WKB from reading * off the end of the memory segment (this stops a malevolent user from declaring * a one-ring polygon to have 10 rings, causing the WKB reader to walk off the * end of the memory). * * Check is a bitmask of: LW_PARSER_CHECK_MINPOINTS, LW_PARSER_CHECK_ODD, * LW_PARSER_CHECK_CLOSURE, LW_PARSER_CHECK_NONE, LW_PARSER_CHECK_ALL */ LWGEOM* lwgeom_from_wkb(const uint8_t *wkb, const size_t wkb_size, const char check) { wkb_parse_state s; /* Initialize the state appropriately */ s.wkb = wkb; s.wkb_size = wkb_size; s.swap_bytes = LW_FALSE; s.check = check; s.lwtype = 0; s.srid = SRID_UNKNOWN; s.has_z = LW_FALSE; s.has_m = LW_FALSE; s.has_srid = LW_FALSE; s.pos = wkb; /* Hand the check catch-all values */ if ( check & LW_PARSER_CHECK_NONE ) s.check = 0; else s.check = check; return lwgeom_from_wkb_state(&s); } LWGEOM* lwgeom_from_hexwkb(const char *hexwkb, const char check) { int hexwkb_len; uint8_t *wkb; LWGEOM *lwgeom; if ( ! hexwkb ) { lwerror("lwgeom_from_hexwkb: null input"); return NULL; } hexwkb_len = strlen(hexwkb); wkb = bytes_from_hexbytes(hexwkb, hexwkb_len); lwgeom = lwgeom_from_wkb(wkb, hexwkb_len/2, check); lwfree(wkb); return lwgeom; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeodetic.h������������������������������������������������������0000644�0000000�0000000�00000012476�12314235664�020060� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeodetic.h 12343 2014-03-25 08:17:56Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef _LWGEODETIC_H #define _LWGEODETIC_H 1 /* For NAN */ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include <math.h> #ifndef NAN #define NAN 0.0/0.0 #endif extern int gbox_geocentric_slow; #define POW2(x) ((x)*(x)) /** * Point in spherical coordinates on the world. Units of radians. */ typedef struct { double lon; double lat; } GEOGRAPHIC_POINT; /** * Two-point great circle segment from a to b. */ typedef struct { GEOGRAPHIC_POINT start; GEOGRAPHIC_POINT end; } GEOGRAPHIC_EDGE; /** * Holder for sorting points in distance algorithm */ typedef struct { double measure; uint32_t index; } DISTANCE_ORDER; /** * Conversion functions */ #define deg2rad(d) (PI * (d) / 180.0) #define rad2deg(r) (180.0 * (r) / PI) /** * Ape a java function */ #define signum(a) ((a) < 0 ? -1 : ((a) > 0 ? 1 : (a))) /** * Bitmask elements for edge_intersects() return value. */ #define PIR_NO_INTERACT 0x00 #define PIR_INTERSECTS 0x01 #define PIR_COLINEAR 0x02 #define PIR_A_TOUCH_RIGHT 0x04 #define PIR_A_TOUCH_LEFT 0x08 #define PIR_B_TOUCH_RIGHT 0x10 #define PIR_B_TOUCH_LEFT 0x20 /* * Geodetic calculations */ void geog2cart(const GEOGRAPHIC_POINT *g, POINT3D *p); void cart2geog(const POINT3D *p, GEOGRAPHIC_POINT *g); void robust_cross_product(const GEOGRAPHIC_POINT *p, const GEOGRAPHIC_POINT *q, POINT3D *a); void x_to_z(POINT3D *p); void y_to_z(POINT3D *p); int edge_point_on_plane(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p); int edge_point_in_cone(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p); int edge_contains_coplanar_point(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p); int edge_contains_point(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p); double z_to_latitude(double z, int top); int clairaut_cartesian(const POINT3D *start, const POINT3D *end, GEOGRAPHIC_POINT *g_top, GEOGRAPHIC_POINT *g_bottom); int clairaut_geographic(const GEOGRAPHIC_POINT *start, const GEOGRAPHIC_POINT *end, GEOGRAPHIC_POINT *g_top, GEOGRAPHIC_POINT *g_bottom); double sphere_distance(const GEOGRAPHIC_POINT *s, const GEOGRAPHIC_POINT *e); double sphere_distance_cartesian(const POINT3D *s, const POINT3D *e); int sphere_project(const GEOGRAPHIC_POINT *r, double distance, double azimuth, GEOGRAPHIC_POINT *n); int edge_calculate_gbox_slow(const GEOGRAPHIC_EDGE *e, GBOX *gbox); int edge_calculate_gbox(const POINT3D *A1, const POINT3D *A2, GBOX *gbox); int edge_intersection(const GEOGRAPHIC_EDGE *e1, const GEOGRAPHIC_EDGE *e2, GEOGRAPHIC_POINT *g); int edge_intersects(const POINT3D *A1, const POINT3D *A2, const POINT3D *B1, const POINT3D *B2); double edge_distance_to_point(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *gp, GEOGRAPHIC_POINT *closest); double edge_distance_to_edge(const GEOGRAPHIC_EDGE *e1, const GEOGRAPHIC_EDGE *e2, GEOGRAPHIC_POINT *closest1, GEOGRAPHIC_POINT *closest2); void geographic_point_init(double lon, double lat, GEOGRAPHIC_POINT *g); int ptarray_contains_point_sphere(const POINTARRAY *pa, const POINT2D *pt_outside, const POINT2D *pt_to_test); int lwpoly_covers_point2d(const LWPOLY *poly, const POINT2D *pt_to_test); void lwpoly_pt_outside(const LWPOLY *poly, POINT2D *pt_outside); int ptarray_point_in_ring(const POINTARRAY *pa, const POINT2D *pt_outside, const POINT2D *pt_to_test); double ptarray_area_sphere(const POINTARRAY *pa); double latitude_degrees_normalize(double lat); double longitude_degrees_normalize(double lon); double ptarray_length_spheroid(const POINTARRAY *pa, const SPHEROID *s); int geographic_point_equals(const GEOGRAPHIC_POINT *g1, const GEOGRAPHIC_POINT *g2); int crosses_dateline(const GEOGRAPHIC_POINT *s, const GEOGRAPHIC_POINT *e); void point_shift(GEOGRAPHIC_POINT *p, double shift); double longitude_radians_normalize(double lon); double latitude_radians_normalize(double lat); void vector_sum(const POINT3D *a, const POINT3D *b, POINT3D *n); double vector_angle(const POINT3D* v1, const POINT3D* v2); void vector_rotate(const POINT3D* v1, const POINT3D* v2, double angle, POINT3D* n); void normalize(POINT3D *p); void unit_normal(const POINT3D *P1, const POINT3D *P2, POINT3D *normal); double sphere_direction(const GEOGRAPHIC_POINT *s, const GEOGRAPHIC_POINT *e, double d); void ll2cart(const POINT2D *g, POINT3D *p); /* ** Prototypes for spheroid functions. */ double spheroid_distance(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, const SPHEROID *spheroid); double spheroid_direction(const GEOGRAPHIC_POINT *r, const GEOGRAPHIC_POINT *s, const SPHEROID *spheroid); int spheroid_project(const GEOGRAPHIC_POINT *r, const SPHEROID *spheroid, double distance, double azimuth, GEOGRAPHIC_POINT *g); #endif /* _LWGEODETIC_H */ /** * Notes for rewrite * * Define separate POINT types for 2-d-points-in-radiands and 3-d-points-in-geocentric * Maintain consistent units (radians?) throughout all calculations * Put an index pointer onto LWGEOM itself, and cache the indexed LWGEOM instead of a bare tree * only primitive objects should get a tree */��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwout_x3d.c�������������������������������������������������������0000644�0000000�0000000�00000056172�12153051513�017644� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwout_x3d.c 11511 2013-06-03 08:26:51Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://www.postgis.org * adapted from lwout_asgml.c * Copyright 2011 Arrival 3D * Regina Obe with input from Dave Arendash * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /** * @file X3D output routines. * **********************************************************************/ #include <string.h> #include "liblwgeom_internal.h" /** defid is the id of the coordinate can be used to hold other elements DEF='abc' transform='' etc. **/ static size_t asx3d3_point_size(const LWPOINT *point, char *srs, int precision, int opts, const char *defid); static char *asx3d3_point(const LWPOINT *point, char *srs, int precision, int opts, const char *defid); static size_t asx3d3_line_size(const LWLINE *line, char *srs, int precision, int opts, const char *defid); static char *asx3d3_line(const LWLINE *line, char *srs, int precision, int opts, const char *defid); static size_t asx3d3_poly_size(const LWPOLY *poly, char *srs, int precision, int opts, const char *defid); static size_t asx3d3_triangle_size(const LWTRIANGLE *triangle, char *srs, int precision, int opts, const char *defid); static char *asx3d3_triangle(const LWTRIANGLE *triangle, char *srs, int precision, int opts, const char *defid); static size_t asx3d3_multi_size(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid); static char *asx3d3_multi(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid); static char *asx3d3_psurface(const LWPSURFACE *psur, char *srs, int precision, int opts, const char *defid); static char *asx3d3_tin(const LWTIN *tin, char *srs, int precision, int opts, const char *defid); static size_t asx3d3_collection_size(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid); static char *asx3d3_collection(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid); static size_t pointArray_toX3D3(POINTARRAY *pa, char *buf, int precision, int opts, int is_closed); static size_t pointArray_X3Dsize(POINTARRAY *pa, int precision); /* * VERSION X3D 3.0.2 http://www.web3d.org/specifications/x3d-3.0.dtd */ /* takes a GEOMETRY and returns an X3D representation */ extern char * lwgeom_to_x3d3(const LWGEOM *geom, char *srs, int precision, int opts, const char *defid) { int type = geom->type; switch (type) { case POINTTYPE: return asx3d3_point((LWPOINT*)geom, srs, precision, opts, defid); case LINETYPE: return asx3d3_line((LWLINE*)geom, srs, precision, opts, defid); case POLYGONTYPE: { /** We might change this later, but putting a polygon in an indexed face set * seems like the simplest way to go so treat just like a mulitpolygon */ LWCOLLECTION *tmp = (LWCOLLECTION*)lwgeom_as_multi(geom); char *ret = asx3d3_multi(tmp, srs, precision, opts, defid); lwcollection_free(tmp); return ret; } case TRIANGLETYPE: return asx3d3_triangle((LWTRIANGLE*)geom, srs, precision, opts, defid); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: return asx3d3_multi((LWCOLLECTION*)geom, srs, precision, opts, defid); case POLYHEDRALSURFACETYPE: return asx3d3_psurface((LWPSURFACE*)geom, srs, precision, opts, defid); case TINTYPE: return asx3d3_tin((LWTIN*)geom, srs, precision, opts, defid); case COLLECTIONTYPE: return asx3d3_collection((LWCOLLECTION*)geom, srs, precision, opts, defid); default: lwerror("lwgeom_to_x3d3: '%s' geometry type not supported", lwtype_name(type)); return NULL; } } static size_t asx3d3_point_size(const LWPOINT *point, char *srs, int precision, int opts, const char *defid) { int size; /* size_t defidlen = strlen(defid); */ size = pointArray_X3Dsize(point->point, precision); /* size += ( sizeof("<point><pos>/") + (defidlen*2) ) * 2; */ /* if (srs) size += strlen(srs) + sizeof(" srsName=.."); */ return size; } static size_t asx3d3_point_buf(const LWPOINT *point, char *srs, char *output, int precision, int opts, const char *defid) { char *ptr = output; /* int dimension=2; */ /* if (FLAGS_GET_Z(point->flags)) dimension = 3; */ /* if ( srs ) { ptr += sprintf(ptr, "<%sPoint srsName=\"%s\">", defid, srs); } else*/ /* ptr += sprintf(ptr, "%s", defid); */ /* ptr += sprintf(ptr, "<%spos>", defid); */ ptr += pointArray_toX3D3(point->point, ptr, precision, opts, 0); /* ptr += sprintf(ptr, "</%spos></%sPoint>", defid, defid); */ return (ptr-output); } static char * asx3d3_point(const LWPOINT *point, char *srs, int precision, int opts, const char *defid) { char *output; int size; size = asx3d3_point_size(point, srs, precision, opts, defid); output = lwalloc(size); asx3d3_point_buf(point, srs, output, precision, opts, defid); return output; } static size_t asx3d3_line_size(const LWLINE *line, char *srs, int precision, int opts, const char *defid) { int size; size_t defidlen = strlen(defid); size = pointArray_X3Dsize(line->points, precision)*2; size += ( sizeof("<LineSet vertexCount=''><Coordinate point='' /></LineSet>") + defidlen ) * 2; /* if (srs) size += strlen(srs) + sizeof(" srsName=.."); */ return size; } static size_t asx3d3_line_buf(const LWLINE *line, char *srs, char *output, int precision, int opts, const char *defid) { char *ptr=output; /* int dimension=2; */ POINTARRAY *pa; /* if (FLAGS_GET_Z(line->flags)) dimension = 3; */ pa = line->points; ptr += sprintf(ptr, "<LineSet %s vertexCount='%d'>", defid, pa->npoints); ptr += sprintf(ptr, "<Coordinate point='"); ptr += pointArray_toX3D3(line->points, ptr, precision, opts, lwline_is_closed((LWLINE *) line)); ptr += sprintf(ptr, "' />"); ptr += sprintf(ptr, "</LineSet>"); return (ptr-output); } static size_t asx3d3_line_coords(const LWLINE *line, char *output, int precision, int opts) { char *ptr=output; /* ptr += sprintf(ptr, ""); */ ptr += pointArray_toX3D3(line->points, ptr, precision, opts, lwline_is_closed(line)); return (ptr-output); } /* Calculate the coordIndex property of the IndexedLineSet for the multilinestring */ static size_t asx3d3_mline_coordindex(const LWMLINE *mgeom, char *output) { char *ptr=output; LWLINE *geom; int i, j, k, si; POINTARRAY *pa; int np; j = 0; for (i=0; i < mgeom->ngeoms; i++) { geom = (LWLINE *) mgeom->geoms[i]; pa = geom->points; np = pa->npoints; si = j; /* start index of first point of linestring */ for (k=0; k < np ; k++) { if (k) { ptr += sprintf(ptr, " "); } /** if the linestring is closed, we put the start point index * for the last vertex to denote use first point * and don't increment the index **/ if (!lwline_is_closed(geom) || k < (np -1) ) { ptr += sprintf(ptr, "%d", j); j += 1; } else { ptr += sprintf(ptr,"%d", si); } } if (i < (mgeom->ngeoms - 1) ) { ptr += sprintf(ptr, " -1 "); /* separator for each linestring */ } } return (ptr-output); } /* Calculate the coordIndex property of the IndexedLineSet for a multipolygon This is not ideal -- would be really nice to just share this function with psurf, but I'm not smart enough to do that yet*/ static size_t asx3d3_mpoly_coordindex(const LWMPOLY *psur, char *output) { char *ptr=output; LWPOLY *patch; int i, j, k, l; int np; j = 0; for (i=0; i<psur->ngeoms; i++) { patch = (LWPOLY *) psur->geoms[i]; for (l=0; l < patch->nrings; l++) { np = patch->rings[l]->npoints - 1; for (k=0; k < np ; k++) { if (k) { ptr += sprintf(ptr, " "); } ptr += sprintf(ptr, "%d", (j + k)); } j += k; if (l < (patch->nrings - 1) ) { /** @todo TODO: Decide the best way to render holes * Evidentally according to my X3D expert the X3D consortium doesn't really * support holes and it's an issue of argument among many that feel it should. He thinks CAD x3d extensions to spec might. * What he has done and others developing X3D exports to simulate a hole is to cut around it. * So if you have a donut, you would cut it into half and have 2 solid polygons. Not really sure the best way to handle this. * For now will leave it as polygons stacked on top of each other -- which is what we are doing here and perhaps an option * to color differently. It's not ideal but the alternative sounds complicated. **/ ptr += sprintf(ptr, " -1 "); /* separator for each inner ring. Ideally we should probably triangulate and cut around as others do */ } } if (i < (psur->ngeoms - 1) ) { ptr += sprintf(ptr, " -1 "); /* separator for each subgeom */ } } return (ptr-output); } /** Return the linestring as an X3D LineSet */ static char * asx3d3_line(const LWLINE *line, char *srs, int precision, int opts, const char *defid) { char *output; int size; size = sizeof("<LineSet><CoordIndex ='' /></LineSet>") + asx3d3_line_size(line, srs, precision, opts, defid); output = lwalloc(size); asx3d3_line_buf(line, srs, output, precision, opts, defid); return output; } /** Compute the string space needed for the IndexedFaceSet representation of the polygon **/ static size_t asx3d3_poly_size(const LWPOLY *poly, char *srs, int precision, int opts, const char *defid) { size_t size; size_t defidlen = strlen(defid); int i; size = ( sizeof("<IndexedFaceSet></IndexedFaceSet>") + (defidlen*3) ) * 2 + 6 * (poly->nrings - 1); for (i=0; i<poly->nrings; i++) size += pointArray_X3Dsize(poly->rings[i], precision); return size; } /** Compute the X3D coordinates of the polygon **/ static size_t asx3d3_poly_buf(const LWPOLY *poly, char *srs, char *output, int precision, int opts, int is_patch, const char *defid) { int i; char *ptr=output; ptr += pointArray_toX3D3(poly->rings[0], ptr, precision, opts, 1); for (i=1; i<poly->nrings; i++) { ptr += sprintf(ptr, " "); /* inner ring points start */ ptr += pointArray_toX3D3(poly->rings[i], ptr, precision, opts,1); } return (ptr-output); } static size_t asx3d3_triangle_size(const LWTRIANGLE *triangle, char *srs, int precision, int opts, const char *defid) { size_t size; size_t defidlen = strlen(defid); /** 6 for the 3 sides and space to separate each side **/ size = sizeof("<IndexedTriangleSet index=''></IndexedTriangleSet>") + defidlen + 6; size += pointArray_X3Dsize(triangle->points, precision); return size; } static size_t asx3d3_triangle_buf(const LWTRIANGLE *triangle, char *srs, char *output, int precision, int opts, const char *defid) { char *ptr=output; ptr += pointArray_toX3D3(triangle->points, ptr, precision, opts, 1); return (ptr-output); } static char * asx3d3_triangle(const LWTRIANGLE *triangle, char *srs, int precision, int opts, const char *defid) { char *output; int size; size = asx3d3_triangle_size(triangle, srs, precision, opts, defid); output = lwalloc(size); asx3d3_triangle_buf(triangle, srs, output, precision, opts, defid); return output; } /** * Compute max size required for X3D version of this * inspected geometry. Will recurse when needed. * Don't call this with single-geoms inspected. */ static size_t asx3d3_multi_size(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid) { int i; size_t size; size_t defidlen = strlen(defid); LWGEOM *subgeom; /* the longest possible multi version needs to hold DEF=defid and coordinate breakout */ size = sizeof("<PointSet><Coordinate point='' /></PointSet>") + defidlen; /* if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); */ for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; if (subgeom->type == POINTTYPE) { /* size += ( sizeof("point=''") + defidlen ) * 2; */ size += asx3d3_point_size((LWPOINT*)subgeom, 0, precision, opts, defid); } else if (subgeom->type == LINETYPE) { /* size += ( sizeof("<curveMember>/") + defidlen ) * 2; */ size += asx3d3_line_size((LWLINE*)subgeom, 0, precision, opts, defid); } else if (subgeom->type == POLYGONTYPE) { /* size += ( sizeof("<surfaceMember>/") + defidlen ) * 2; */ size += asx3d3_poly_size((LWPOLY*)subgeom, 0, precision, opts, defid); } } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asx3d3_multi_buf(const LWCOLLECTION *col, char *srs, char *output, int precision, int opts, const char *defid) { char *ptr, *x3dtype; int i; int dimension=2; if (FLAGS_GET_Z(col->flags)) dimension = 3; LWGEOM *subgeom; ptr = output; x3dtype=""; switch (col->type) { case MULTIPOINTTYPE: x3dtype = "PointSet"; if ( dimension == 2 ){ /** Use Polypoint2D instead **/ x3dtype = "Polypoint2D"; ptr += sprintf(ptr, "<%s %s point='", x3dtype, defid); } else { ptr += sprintf(ptr, "<%s %s>", x3dtype, defid); } break; case MULTILINETYPE: x3dtype = "IndexedLineSet"; ptr += sprintf(ptr, "<%s %s coordIndex='", x3dtype, defid); ptr += asx3d3_mline_coordindex((const LWMLINE *)col, ptr); ptr += sprintf(ptr, "'>"); break; case MULTIPOLYGONTYPE: x3dtype = "IndexedFaceSet"; ptr += sprintf(ptr, "<%s %s coordIndex='", x3dtype, defid); ptr += asx3d3_mpoly_coordindex((const LWMPOLY *)col, ptr); ptr += sprintf(ptr, "'>"); break; default: lwerror("asx3d3_multi_buf: '%s' geometry type not supported", lwtype_name(col->type)); return 0; } if (dimension == 3){ ptr += sprintf(ptr, "<Coordinate point='"); } for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; if (subgeom->type == POINTTYPE) { ptr += asx3d3_point_buf((LWPOINT*)subgeom, 0, ptr, precision, opts, defid); ptr += sprintf(ptr, " "); } else if (subgeom->type == LINETYPE) { ptr += asx3d3_line_coords((LWLINE*)subgeom, ptr, precision, opts); ptr += sprintf(ptr, " "); } else if (subgeom->type == POLYGONTYPE) { ptr += asx3d3_poly_buf((LWPOLY*)subgeom, 0, ptr, precision, opts, 0, defid); ptr += sprintf(ptr, " "); } } /* Close outmost tag */ if (dimension == 3){ ptr += sprintf(ptr, "' /></%s>", x3dtype); } else { ptr += sprintf(ptr, "' />"); } return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asx3d3_multi(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid) { char *x3d; size_t size; size = asx3d3_multi_size(col, srs, precision, opts, defid); x3d = lwalloc(size); asx3d3_multi_buf(col, srs, x3d, precision, opts, defid); return x3d; } static size_t asx3d3_psurface_size(const LWPSURFACE *psur, char *srs, int precision, int opts, const char *defid) { int i; size_t size; size_t defidlen = strlen(defid); size = sizeof("<IndexedFaceSet coordIndex=''><Coordinate point='' />") + defidlen; for (i=0; i<psur->ngeoms; i++) { size += asx3d3_poly_size(psur->geoms[i], 0, precision, opts, defid)*5; /** need to make space for coordIndex values too including -1 separating each poly**/ } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asx3d3_psurface_buf(const LWPSURFACE *psur, char *srs, char *output, int precision, int opts, const char *defid) { char *ptr; int i; int j; int k; int np; LWPOLY *patch; ptr = output; /* Open outmost tag */ ptr += sprintf(ptr, "<IndexedFaceSet %s coordIndex='",defid); j = 0; for (i=0; i<psur->ngeoms; i++) { patch = (LWPOLY *) psur->geoms[i]; np = patch->rings[0]->npoints - 1; for (k=0; k < np ; k++) { if (k) { ptr += sprintf(ptr, " "); } ptr += sprintf(ptr, "%d", (j + k)); } if (i < (psur->ngeoms - 1) ) { ptr += sprintf(ptr, " -1 "); /* separator for each subgeom */ } j += k; } ptr += sprintf(ptr, "'><Coordinate point='"); for (i=0; i<psur->ngeoms; i++) { ptr += asx3d3_poly_buf(psur->geoms[i], 0, ptr, precision, opts, 1, defid); if (i < (psur->ngeoms - 1) ) { ptr += sprintf(ptr, " "); /* only add a trailing space if its not the last polygon in the set */ } } /* Close outmost tag */ ptr += sprintf(ptr, "' /></IndexedFaceSet>"); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asx3d3_psurface(const LWPSURFACE *psur, char *srs, int precision, int opts, const char *defid) { char *x3d; size_t size; size = asx3d3_psurface_size(psur, srs, precision, opts, defid); x3d = lwalloc(size); asx3d3_psurface_buf(psur, srs, x3d, precision, opts, defid); return x3d; } static size_t asx3d3_tin_size(const LWTIN *tin, char *srs, int precision, int opts, const char *defid) { int i; size_t size; size_t defidlen = strlen(defid); /* int dimension=2; */ /** Need to make space for size of additional attributes, ** the coordIndex has a value for each edge for each triangle plus a space to separate so we need at least that much extra room ***/ size = sizeof("<IndexedTriangleSet coordIndex=''></IndexedTriangleSet>") + defidlen + tin->ngeoms*12; for (i=0; i<tin->ngeoms; i++) { size += (asx3d3_triangle_size(tin->geoms[i], 0, precision, opts, defid) * 20); /** 3 is to make space for coordIndex **/ } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asx3d3_tin_buf(const LWTIN *tin, char *srs, char *output, int precision, int opts, const char *defid) { char *ptr; int i; int k; /* int dimension=2; */ ptr = output; ptr += sprintf(ptr, "<IndexedTriangleSet %s index='",defid); k = 0; /** Fill in triangle index **/ for (i=0; i<tin->ngeoms; i++) { ptr += sprintf(ptr, "%d %d %d", k, (k+1), (k+2)); if (i < (tin->ngeoms - 1) ) { ptr += sprintf(ptr, " "); } k += 3; } ptr += sprintf(ptr, "'><Coordinate point='"); for (i=0; i<tin->ngeoms; i++) { ptr += asx3d3_triangle_buf(tin->geoms[i], 0, ptr, precision, opts, defid); if (i < (tin->ngeoms - 1) ) { ptr += sprintf(ptr, " "); } } /* Close outmost tag */ ptr += sprintf(ptr, "'/></IndexedTriangleSet>"); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asx3d3_tin(const LWTIN *tin, char *srs, int precision, int opts, const char *defid) { char *x3d; size_t size; size = asx3d3_tin_size(tin, srs, precision, opts, defid); x3d = lwalloc(size); asx3d3_tin_buf(tin, srs, x3d, precision, opts, defid); return x3d; } static size_t asx3d3_collection_size(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid) { int i; size_t size; size_t defidlen = strlen(defid); LWGEOM *subgeom; size = sizeof("<MultiGeometry></MultiGeometry>") + defidlen*2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; size += ( sizeof("<geometryMember>/") + defidlen ) * 2; if ( subgeom->type == POINTTYPE ) { size += asx3d3_point_size((LWPOINT*)subgeom, 0, precision, opts, defid); } else if ( subgeom->type == LINETYPE ) { size += asx3d3_line_size((LWLINE*)subgeom, 0, precision, opts, defid); } else if ( subgeom->type == POLYGONTYPE ) { size += asx3d3_poly_size((LWPOLY*)subgeom, 0, precision, opts, defid); } else if ( lwgeom_is_collection(subgeom) ) { size += asx3d3_multi_size((LWCOLLECTION*)subgeom, 0, precision, opts, defid); } else lwerror("asx3d3_collection_size: unknown geometry type"); } return size; } static size_t asx3d3_collection_buf(const LWCOLLECTION *col, char *srs, char *output, int precision, int opts, const char *defid) { char *ptr; int i; LWGEOM *subgeom; ptr = output; /* Open outmost tag */ if ( srs ) { ptr += sprintf(ptr, "<%sMultiGeometry srsName=\"%s\">", defid, srs); } else { ptr += sprintf(ptr, "<%sMultiGeometry>", defid); } for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; ptr += sprintf(ptr, "<%sgeometryMember>", defid); if ( subgeom->type == POINTTYPE ) { ptr += asx3d3_point_buf((LWPOINT*)subgeom, 0, ptr, precision, opts, defid); } else if ( subgeom->type == LINETYPE ) { ptr += asx3d3_line_buf((LWLINE*)subgeom, 0, ptr, precision, opts, defid); } else if ( subgeom->type == POLYGONTYPE ) { ptr += asx3d3_poly_buf((LWPOLY*)subgeom, 0, ptr, precision, opts, 0, defid); } else if ( lwgeom_is_collection(subgeom) ) { if ( subgeom->type == COLLECTIONTYPE ) ptr += asx3d3_collection_buf((LWCOLLECTION*)subgeom, 0, ptr, precision, opts, defid); else ptr += asx3d3_multi_buf((LWCOLLECTION*)subgeom, 0, ptr, precision, opts, defid); } else lwerror("asx3d3_collection_buf: unknown geometry type"); ptr += sprintf(ptr, "</%sgeometryMember>", defid); } /* Close outmost tag */ ptr += sprintf(ptr, "</%sMultiGeometry>", defid); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asx3d3_collection(const LWCOLLECTION *col, char *srs, int precision, int opts, const char *defid) { char *x3d; size_t size; size = asx3d3_collection_size(col, srs, precision, opts, defid); x3d = lwalloc(size); asx3d3_collection_buf(col, srs, x3d, precision, opts, defid); return x3d; } /** In X3D3, coordinates are separated by a space separator */ static size_t pointArray_toX3D3(POINTARRAY *pa, char *output, int precision, int opts, int is_closed) { int i; char *ptr; char x[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char y[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char z[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; ptr = output; if ( ! FLAGS_GET_Z(pa->flags) ) { for (i=0; i<pa->npoints; i++) { /** Only output the point if it is not the last point of a closed object or it is a non-closed type **/ if ( !is_closed || i < (pa->npoints - 1) ) { POINT2D pt; getPoint2d_p(pa, i, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, pt.y); else sprintf(y, "%g", pt.y); trim_trailing_zeros(y); if ( i ) ptr += sprintf(ptr, " "); ptr += sprintf(ptr, "%s %s", x, y); } } } else { for (i=0; i<pa->npoints; i++) { /** Only output the point if it is not the last point of a closed object or it is a non-closed type **/ if ( !is_closed || i < (pa->npoints - 1) ) { POINT4D pt; getPoint4d_p(pa, i, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, pt.y); else sprintf(y, "%g", pt.y); trim_trailing_zeros(y); if (fabs(pt.z) < OUT_MAX_DOUBLE) sprintf(z, "%.*f", precision, pt.z); else sprintf(z, "%g", pt.z); trim_trailing_zeros(z); if ( i ) ptr += sprintf(ptr, " "); ptr += sprintf(ptr, "%s %s %s", x, y, z); } } } return ptr-output; } /** * Returns maximum size of rendered pointarray in bytes. */ static size_t pointArray_X3Dsize(POINTARRAY *pa, int precision) { if (FLAGS_NDIMS(pa->flags) == 2) return (OUT_MAX_DIGS_DOUBLE + precision + sizeof(" ")) * 2 * pa->npoints; return (OUT_MAX_DIGS_DOUBLE + precision + sizeof(" ")) * 3 * pa->npoints; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwprint.c���������������������������������������������������������0000644�0000000�0000000�00000026256�11722777314�017432� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwprint.c 9324 2012-02-27 22:08:12Z pramsey $ * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <string.h> #include "liblwgeom_internal.h" /* Ensures the given lat and lon are in the "normal" range: * -90 to +90 for lat, -180 to +180 for lon. */ static void lwprint_normalize_latlon(double *lat, double *lon) { /* First remove all the truly excessive trips around the world via up or down. */ while (*lat > 270) { *lat -= 360; } while (*lat < -270) { *lat += 360; } /* Now see if latitude is past the top or bottom of the world. * Past 90 or -90 puts us on the other side of the earth, * so wrap latitude and add 180 to longitude to reflect that. */ if (*lat > 90) { *lat = 180 - *lat; *lon += 180; } if (*lat < -90) { *lat = -180 - *lat; *lon += 180; } /* Now make sure lon is in the normal range. Wrapping longitude * has no effect on latitude. */ while (*lon > 180) { *lon -= 360; } while (*lon < -180) { *lon += 360; } } /* Converts a single double to DMS given the specified DMS format string. * Symbols are specified since N/S or E/W are the only differences when printing * lat vs. lon. They are only used if the "C" (compass dir) token appears in the * format string. * NOTE: Format string and symbols are required to be in UTF-8. */ static char * lwdouble_to_dms(double val, const char *pos_dir_symbol, const char *neg_dir_symbol, const char * format) { /* 3 numbers, 1 sign or compass dir, and 5 possible strings (degree signs, spaces, misc text, etc) between or around them.*/ const int NUM_PIECES = 9; const int WORK_SIZE = 1024; char pieces[NUM_PIECES][WORK_SIZE]; int current_piece = 0; int is_negative = 0; double degrees = 0.0; double minutes = 0.0; double seconds = 0.0; int compass_dir_piece = -1; int reading_deg = 0; int deg_digits = 0; int deg_has_decpoint = 0; int deg_dec_digits = 0; int deg_piece = -1; int reading_min = 0; int min_digits = 0; int min_has_decpoint = 0; int min_dec_digits = 0; int min_piece = -1; int reading_sec = 0; int sec_digits = 0; int sec_has_decpoint = 0; int sec_dec_digits = 0; int sec_piece = -1; int format_length = ((NULL == format) ? 0 : strlen(format)); char * result; int index, following_byte_index; int multibyte_char_width = 1; /* Initialize the working strs to blank. We may not populate all of them, and * this allows us to concat them all at the end without worrying about how many * we actually needed. */ for (index = 0; index < NUM_PIECES; index++) { pieces[index][0] = '\0'; } /* If no format is provided, use a default. */ if (0 == format_length) { /* C2B0 is UTF-8 for the degree symbol. */ format = "D\xC2\xB0""M'S.SSS\"C"; format_length = strlen(format); } else if (format_length > WORK_SIZE) { /* Sanity check, we don't want to overwrite an entire piece of work and no one should need a 1K-sized * format string anyway. */ lwerror("Bad format, exceeds maximum length (%d).", WORK_SIZE); } for (index = 0; index < format_length; index++) { char next_char = format[index]; switch (next_char) { case 'D': if (reading_deg) { /* If we're reading degrees, add another digit. */ deg_has_decpoint ? deg_dec_digits++ : deg_digits++; } else { /* If we're not reading degrees, we are now. */ current_piece++; deg_piece = current_piece; if (deg_digits > 0) { lwerror("Bad format, cannot include degrees (DD.DDD) more than once."); } reading_deg = 1; reading_min = 0; reading_sec = 0; deg_digits++; } break; case 'M': if (reading_min) { /* If we're reading minutes, add another digit. */ min_has_decpoint ? min_dec_digits++ : min_digits++; } else { /* If we're not reading minutes, we are now. */ current_piece++; min_piece = current_piece; if (min_digits > 0) { lwerror("Bad format, cannot include minutes (MM.MMM) more than once."); } reading_deg = 0; reading_min = 1; reading_sec = 0; min_digits++; } break; case 'S': if (reading_sec) { /* If we're reading seconds, add another digit. */ sec_has_decpoint ? sec_dec_digits++ : sec_digits++; } else { /* If we're not reading seconds, we are now. */ current_piece++; sec_piece = current_piece; if (sec_digits > 0) { lwerror("Bad format, cannot include seconds (SS.SSS) more than once."); } reading_deg = 0; reading_min = 0; reading_sec = 1; sec_digits++; } break; case 'C': /* We're done reading anything else we might have been reading. */ if (reading_deg || reading_min || reading_sec) { /* We were reading something, that means this is the next piece. */ reading_deg = 0; reading_min = 0; reading_sec = 0; } current_piece++; if (compass_dir_piece >= 0) { lwerror("Bad format, cannot include compass dir (C) more than once."); } /* The compass dir is a piece all by itself. */ compass_dir_piece = current_piece; current_piece++; break; case '.': /* If we're reading deg, min, or sec, we want a decimal point for it. */ if (reading_deg) { deg_has_decpoint = 1; } else if (reading_min) { min_has_decpoint = 1; } else if (reading_sec) { sec_has_decpoint = 1; } else { /* Not reading anything, just pass through the '.' */ strncat(pieces[current_piece], &next_char, 1); } break; default: /* Any other char is just passed through unchanged. But it does mean we are done reading D, M, or S.*/ if (reading_deg || reading_min || reading_sec) { /* We were reading something, that means this is the next piece. */ current_piece++; reading_deg = 0; reading_min = 0; reading_sec = 0; } /* Check if this is a multi-byte UTF-8 character. If so go ahead and read the rest of the bytes as well. */ multibyte_char_width = 1; if (next_char & 0x80) { if ((next_char & 0xF8) == 0xF0) { multibyte_char_width += 3; } else if ((next_char & 0xF0) == 0xE0) { multibyte_char_width += 2; } else if ((next_char & 0xE0) == 0xC0) { multibyte_char_width += 1; } else { lwerror("Bad format, invalid high-order byte found first, format string may not be UTF-8."); } } if (multibyte_char_width > 1) { if (index + multibyte_char_width >= format_length) { lwerror("Bad format, UTF-8 character first byte found with insufficient following bytes, format string may not be UTF-8."); } for (following_byte_index = (index + 1); following_byte_index < (index + multibyte_char_width); following_byte_index++) { if ((format[following_byte_index] & 0xC0) != 0x80) { lwerror("Bad format, invalid byte found following leading byte of multibyte character, format string may not be UTF-8."); } } } /* Copy all the character's bytes into the current piece. */ strncat(pieces[current_piece], &(format[index]), multibyte_char_width); /* Now increment index past the rest of those bytes. */ index += multibyte_char_width - 1; break; } if (current_piece >= NUM_PIECES) { lwerror("Internal error, somehow needed more pieces than it should."); } } if (deg_piece < 0) { lwerror("Bad format, degrees (DD.DDD) must be included."); } /* Divvy the number up into D, DM, or DMS */ if (val < 0) { val *= -1; is_negative = 1; } degrees = val; if (min_digits > 0) { degrees = (long)degrees; minutes = (val - degrees) * 60; } if (sec_digits > 0) { if (0 == min_digits) { lwerror("Bad format, cannot include seconds (SS.SSS) without including minutes (MM.MMM)."); } minutes = (long)minutes; seconds = (val - (degrees + (minutes / 60))) * 3600; } /* Handle the compass direction. If not using compass dir, display degrees as a positive/negative number. */ if (compass_dir_piece >= 0) { strcpy(pieces[compass_dir_piece], is_negative ? neg_dir_symbol : pos_dir_symbol); } else if (is_negative) { degrees *= -1; } /* Format the degrees into their string piece. */ if (deg_digits + deg_dec_digits + 2 > WORK_SIZE) { lwerror("Bad format, degrees (DD.DDD) number of digits was greater than our working limit."); } sprintf(pieces[deg_piece], "%*.*f", deg_digits, deg_dec_digits, degrees); if (min_piece >= 0) { /* Format the minutes into their string piece. */ if (min_digits + min_dec_digits + 2 > WORK_SIZE) { lwerror("Bad format, minutes (MM.MMM) number of digits was greater than our working limit."); } sprintf(pieces[min_piece], "%*.*f", min_digits, min_dec_digits, minutes); } if (sec_piece >= 0) { /* Format the seconds into their string piece. */ if (sec_digits + sec_dec_digits + 2 > WORK_SIZE) { lwerror("Bad format, seconds (SS.SSS) number of digits was greater than our working limit."); } sprintf(pieces[sec_piece], "%*.*f", sec_digits, sec_dec_digits, seconds); } /* Allocate space for the result. Leave plenty of room for excess digits, negative sign, etc.*/ result = (char*)lwalloc(format_length + WORK_SIZE); /* Append all the pieces together. There may be less than 9, but in that case the rest will be blank. */ strcpy(result, pieces[0]); for (index = 1; index < NUM_PIECES; index++) { strcat(result, pieces[index]); } return result; } /* Print two doubles (lat and lon) in DMS form using the specified format. * First normalizes them so they will display as -90 to 90 and -180 to 180. * Format string may be null or 0-length, in which case a default format will be used. * NOTE: Format string is required to be in UTF-8. * NOTE2: returned string is lwalloc'ed, caller is responsible to lwfree it up */ static char * lwdoubles_to_latlon(double lat, double lon, const char * format) { char * lat_text; char * lon_text; char * result; /* Normalize lat/lon to the normal (-90 to 90, -180 to 180) range. */ lwprint_normalize_latlon(&lat, &lon); /* This is somewhat inefficient as the format is parsed twice. */ lat_text = lwdouble_to_dms(lat, "N", "S", format); lon_text = lwdouble_to_dms(lon, "E", "W", format); /* lat + lon + a space between + the null terminator. */ result = (char*)lwalloc(strlen(lat_text) + strlen(lon_text) + 2); sprintf(result, "%s %s", lat_text, lon_text); lwfree(lat_text); lwfree(lon_text); return result; } /* Print the X (lon) and Y (lat) of the given point in DMS form using * the specified format. * First normalizes the values so they will display as -90 to 90 and -180 to 180. * Format string may be null or 0-length, in which case a default format will be used. * NOTE: Format string is required to be in UTF-8. * NOTE2: returned string is lwalloc'ed, caller is responsible to lwfree it up */ char* lwpoint_to_latlon(const LWPOINT * pt, const char *format) { POINT2D p; if (NULL == pt) { lwerror("Cannot convert a null point into formatted text."); } if (lwgeom_is_empty((LWGEOM *)pt)) { lwerror("Cannot convert an empty point into formatted text."); } getPoint2d_p(pt->point, 0, &p); return lwdoubles_to_latlon(p.y, p.x, format); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/box2d.c�����������������������������������������������������������0000644�0000000�0000000�00000000525�11722777314�016740� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #ifndef EPSILON #define EPSILON 1.0E-06 #endif #ifndef FPeq #define FPeq(A,B) (fabs((A) - (B)) <= EPSILON) #endif GBOX * box2d_clone(const GBOX *in) { GBOX *ret = lwalloc(sizeof(GBOX)); memcpy(ret, in, sizeof(GBOX)); return ret; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/vsprintf.c��������������������������������������������������������0000644�0000000�0000000�00000007244�11727672212�017576� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. Copyright (C) 1994, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #if __STDC__ # include <stdarg.h> #else # include <varargs.h> #endif #ifdef TEST int global_total_width; #endif /* Make sure we have a va_copy that will work on all platforms */ #ifndef va_copy # ifdef __va_copy # define va_copy(d, s) __va_copy((d), (s)) # else # define va_copy(d, s) memcpy(&(d), &(s), sizeof(va_list)) # endif #endif int lw_vasprintf (char **result, const char *format, va_list args); int lw_asprintf #if __STDC__ (char **result, const char *format, ...); #else (result, va_alist); char **result; va_dcl #endif static int int_vasprintf (result, format, args) char **result; const char *format; va_list *args; { const char *p = format; /* Add one to make sure that it is never zero, which might cause malloc to return NULL. */ int total_width = strlen (format) + 1; va_list ap; memcpy (&ap, args, sizeof (va_list)); while (*p != '\0') { if (*p++ == '%') { while (strchr ("-+ #0", *p)) ++p; if (*p == '*') { ++p; total_width += abs (va_arg (ap, int)); } else total_width += strtoul (p, (char **) &p, 10); if (*p == '.') { ++p; if (*p == '*') { ++p; total_width += abs (va_arg (ap, int)); } else total_width += strtoul (p, (char **) &p, 10); } while (strchr ("hlLjtz", *p)) ++p; /* Should be big enough for any format specifier except %s and floats. */ total_width += 30; switch (*p) { case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': case 'c': (void) va_arg (ap, int); break; case 'f': { double arg = va_arg (ap, double); if (arg >= 1.0 || arg <= -1.0) /* Since an ieee double can have an exponent of 307, we'll make the buffer wide enough to cover the gross case. */ total_width += 307; } break; case 'e': case 'E': case 'g': case 'G': (void) va_arg (ap, double); break; case 's': total_width += strlen (va_arg (ap, char *)); break; case 'p': case 'n': (void) va_arg (ap, char *); break; } p++; } } #ifdef TEST global_total_width = total_width; #endif *result = malloc (total_width); if (*result != NULL) return vsprintf (*result, format, *args); else return 0; } int lw_vasprintf (result, format, args) char **result; const char *format; va_list args; { va_list temp; va_copy(temp, args); return int_vasprintf (result, format, &temp); } int lw_asprintf #if __STDC__ (char **result, const char *format, ...) #else (result, va_alist) char **result; va_dcl #endif { va_list args; int done; #if __STDC__ va_start (args, format); #else char *format; va_start (args); format = va_arg (args, char *); #endif done = lw_vasprintf (result, format, args); va_end (args); return done; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwtriangle.c������������������������������������������������������0000644�0000000�0000000�00000011065�12045033704�020056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2010 - Oslandia * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* basic LWTRIANGLE manipulation */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" /* construct a new LWTRIANGLE. * use SRID=SRID_UNKNOWN for unknown SRID (will have 8bit type's S = 0) */ LWTRIANGLE* lwtriangle_construct(int srid, GBOX *bbox, POINTARRAY *points) { LWTRIANGLE *result; result = (LWTRIANGLE*) lwalloc(sizeof(LWTRIANGLE)); result->type = TRIANGLETYPE; result->flags = points->flags; FLAGS_SET_BBOX(result->flags, bbox?1:0); result->srid = srid; result->points = points; result->bbox = bbox; return result; } LWTRIANGLE* lwtriangle_construct_empty(int srid, char hasz, char hasm) { LWTRIANGLE *result = lwalloc(sizeof(LWTRIANGLE)); result->type = TRIANGLETYPE; result->flags = gflags(hasz,hasm,0); result->srid = srid; result->points = ptarray_construct_empty(hasz, hasm, 1); result->bbox = NULL; return result; } void lwtriangle_free(LWTRIANGLE *triangle) { if ( ! triangle ) return; if (triangle->bbox) lwfree(triangle->bbox); if (triangle->points) ptarray_free(triangle->points); lwfree(triangle); } void printLWTRIANGLE(LWTRIANGLE *triangle) { if (triangle->type != TRIANGLETYPE) lwerror("printLWTRIANGLE called with something else than a Triangle"); lwnotice("LWTRIANGLE {"); lwnotice(" ndims = %i", (int)FLAGS_NDIMS(triangle->flags)); lwnotice(" SRID = %i", (int)triangle->srid); printPA(triangle->points); lwnotice("}"); } /* @brief Clone LWTRIANGLE object. Serialized point lists are not copied. * * @see ptarray_clone */ LWTRIANGLE * lwtriangle_clone(const LWTRIANGLE *g) { LWDEBUGF(2, "lwtriangle_clone called with %p", g); return (LWTRIANGLE *)lwline_clone((const LWLINE *)g); } void lwtriangle_force_clockwise(LWTRIANGLE *triangle) { if ( ptarray_isccw(triangle->points) ) ptarray_reverse(triangle->points); } void lwtriangle_reverse(LWTRIANGLE *triangle) { if( lwtriangle_is_empty(triangle) ) return; ptarray_reverse(triangle->points); } void lwtriangle_release(LWTRIANGLE *lwtriangle) { lwgeom_release(lwtriangle_as_lwgeom(lwtriangle)); } /* check coordinate equality */ char lwtriangle_same(const LWTRIANGLE *t1, const LWTRIANGLE *t2) { char r = ptarray_same(t1->points, t2->points); LWDEBUGF(5, "returning %d", r); return r; } /* * Construct a triangle from a LWLINE being * the shell * Pointarray from intput geom are cloned. * Input line must have 4 points, and be closed. */ LWTRIANGLE * lwtriangle_from_lwline(const LWLINE *shell) { LWTRIANGLE *ret; POINTARRAY *pa; if ( shell->points->npoints != 4 ) lwerror("lwtriangle_from_lwline: shell must have exactly 4 points"); if ( (!FLAGS_GET_Z(shell->flags) && !ptarray_is_closed_2d(shell->points)) || (FLAGS_GET_Z(shell->flags) && !ptarray_is_closed_3d(shell->points)) ) lwerror("lwtriangle_from_lwline: shell must be closed"); pa = ptarray_clone_deep(shell->points); ret = lwtriangle_construct(shell->srid, NULL, pa); if (lwtriangle_is_repeated_points(ret)) lwerror("lwtriangle_from_lwline: some points are repeated in triangle"); return ret; } char lwtriangle_is_repeated_points(LWTRIANGLE *triangle) { char ret; POINTARRAY *pa; pa = ptarray_remove_repeated_points(triangle->points); ret = ptarray_same(pa, triangle->points); ptarray_free(pa); return ret; } int lwtriangle_is_empty(const LWTRIANGLE *triangle) { if ( !triangle->points || triangle->points->npoints < 1 ) return LW_TRUE; return LW_FALSE; } /** * Find the area of the outer ring */ double lwtriangle_area(const LWTRIANGLE *triangle) { double area=0.0; int i; POINT2D p1; POINT2D p2; if (! triangle->points->npoints) return area; /* empty triangle */ for (i=0; i < triangle->points->npoints-1; i++) { getPoint2d_p(triangle->points, i, &p1); getPoint2d_p(triangle->points, i+1, &p2); area += ( p1.x * p2.y ) - ( p1.y * p2.x ); } area /= 2.0; return fabs(area); } double lwtriangle_perimeter(const LWTRIANGLE *triangle) { if( triangle->points ) return ptarray_length(triangle->points); else return 0.0; } double lwtriangle_perimeter_2d(const LWTRIANGLE *triangle) { if( triangle->points ) return ptarray_length_2d(triangle->points); else return 0.0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/ptarray.c���������������������������������������������������������0000644�0000000�0000000�00000113742�12230320272�017370� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <string.h> #include "liblwgeom_internal.h" /*#define POSTGIS_DEBUG_LEVEL 4*/ #include "lwgeom_log.h" int ptarray_has_z(const POINTARRAY *pa) { if ( ! pa ) return LW_FALSE; return FLAGS_GET_Z(pa->flags); } int ptarray_has_m(const POINTARRAY *pa) { if ( ! pa ) return LW_FALSE; return FLAGS_GET_M(pa->flags); } /* * Size of point represeneted in the POINTARRAY * 16 for 2d, 24 for 3d, 32 for 4d */ int inline ptarray_point_size(const POINTARRAY *pa) { LWDEBUGF(5, "ptarray_point_size: FLAGS_NDIMS(pa->flags)=%x",FLAGS_NDIMS(pa->flags)); return sizeof(double)*FLAGS_NDIMS(pa->flags); } POINTARRAY* ptarray_construct(char hasz, char hasm, uint32_t npoints) { POINTARRAY *pa = ptarray_construct_empty(hasz, hasm, npoints); pa->npoints = npoints; return pa; } POINTARRAY* ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints) { uint8_t dims = gflags(hasz, hasm, 0); POINTARRAY *pa = lwalloc(sizeof(POINTARRAY)); pa->serialized_pointlist = NULL; /* Set our dimsionality info on the bitmap */ pa->flags = dims; /* We will be allocating a bit of room */ pa->npoints = 0; pa->maxpoints = maxpoints; /* Allocate the coordinate array */ if ( maxpoints > 0 ) pa->serialized_pointlist = lwalloc(maxpoints * ptarray_point_size(pa)); else pa->serialized_pointlist = NULL; return pa; } /* * Add a point into a pointarray. Only adds as many dimensions as the * pointarray supports. */ int ptarray_insert_point(POINTARRAY *pa, const POINT4D *p, int where) { size_t point_size = ptarray_point_size(pa); LWDEBUGF(5,"pa = %p; p = %p; where = %d", pa, p, where); LWDEBUGF(5,"pa->npoints = %d; pa->maxpoints = %d", pa->npoints, pa->maxpoints); if ( FLAGS_GET_READONLY(pa->flags) ) { lwerror("ptarray_insert_point: called on read-only point array"); return LW_FAILURE; } /* Error on invalid offset value */ if ( where > pa->npoints || where < 0) { lwerror("ptarray_insert_point: offset out of range (%d)", where); return LW_FAILURE; } /* If we have no storage, let's allocate some */ if( pa->maxpoints == 0 || ! pa->serialized_pointlist ) { pa->maxpoints = 32; pa->npoints = 0; pa->serialized_pointlist = lwalloc(ptarray_point_size(pa) * pa->maxpoints); } /* Error out if we have a bad situation */ if ( pa->npoints > pa->maxpoints ) lwerror("npoints (%d) is greated than maxpoints (%d)", pa->npoints, pa->maxpoints); /* Check if we have enough storage, add more if necessary */ if( pa->npoints == pa->maxpoints ) { pa->maxpoints *= 2; pa->serialized_pointlist = lwrealloc(pa->serialized_pointlist, ptarray_point_size(pa) * pa->maxpoints); } /* Make space to insert the new point */ if( where < pa->npoints ) { size_t copy_size = point_size * (pa->npoints - where); memmove(getPoint_internal(pa, where+1), getPoint_internal(pa, where), copy_size); LWDEBUGF(5,"copying %d bytes to start vertex %d from start vertex %d", copy_size, where+1, where); } /* We have one more point */ ++pa->npoints; /* Copy the new point into the gap */ ptarray_set_point4d(pa, where, p); LWDEBUGF(5,"copying new point to start vertex %d", point_size, where); return LW_SUCCESS; } int ptarray_append_point(POINTARRAY *pa, const POINT4D *pt, int repeated_points) { /* Check for pathology */ if( ! pa || ! pt ) { lwerror("ptarray_append_point: null input"); return LW_FAILURE; } /* Check for duplicate end point */ if ( repeated_points == LW_FALSE && pa->npoints > 0 ) { POINT4D tmp; getPoint4d_p(pa, pa->npoints-1, &tmp); LWDEBUGF(4,"checking for duplicate end point (pt = POINT(%g %g) pa->npoints-q = POINT(%g %g))",pt->x,pt->y,tmp.x,tmp.y); /* Return LW_SUCCESS and do nothing else if previous point in list is equal to this one */ if ( (pt->x == tmp.x) && (pt->y == tmp.y) && (FLAGS_GET_Z(pa->flags) ? pt->z == tmp.z : 1) && (FLAGS_GET_M(pa->flags) ? pt->m == tmp.m : 1) ) { return LW_SUCCESS; } } /* Append is just a special case of insert */ return ptarray_insert_point(pa, pt, pa->npoints); } int ptarray_append_ptarray(POINTARRAY *pa1, POINTARRAY *pa2, double gap_tolerance) { unsigned int poff = 0; unsigned int npoints; unsigned int ncap; unsigned int ptsize; /* Check for pathology */ if( ! pa1 || ! pa2 ) { lwerror("ptarray_append_ptarray: null input"); return LW_FAILURE; } npoints = pa2->npoints; if ( ! npoints ) return LW_SUCCESS; /* nothing more to do */ if( FLAGS_GET_READONLY(pa1->flags) ) { lwerror("ptarray_append_ptarray: target pointarray is read-only"); return LW_FAILURE; } if( FLAGS_GET_ZM(pa1->flags) != FLAGS_GET_ZM(pa2->flags) ) { lwerror("ptarray_append_ptarray: appending mixed dimensionality is not allowed"); return LW_FAILURE; } ptsize = ptarray_point_size(pa1); /* Check for duplicate end point */ if ( pa1->npoints ) { POINT2D tmp1, tmp2; getPoint2d_p(pa1, pa1->npoints-1, &tmp1); getPoint2d_p(pa2, 0, &tmp2); /* If the end point and start point are the same, then don't copy start point */ if (p2d_same(&tmp1, &tmp2)) { poff = 1; --npoints; } else if ( gap_tolerance == 0 || ( gap_tolerance > 0 && distance2d_pt_pt(&tmp1, &tmp2) > gap_tolerance ) ) { lwerror("Second line start point too far from first line end point"); return LW_FAILURE; } } /* Check if we need extra space */ ncap = pa1->npoints + npoints; if ( pa1->maxpoints < ncap ) { pa1->maxpoints = ncap > pa1->maxpoints*2 ? ncap : pa1->maxpoints*2; pa1->serialized_pointlist = lwrealloc(pa1->serialized_pointlist, ptsize * pa1->maxpoints); } memcpy(getPoint_internal(pa1, pa1->npoints), getPoint_internal(pa2, poff), ptsize * npoints); pa1->npoints = ncap; return LW_SUCCESS; } /* * Add a point into a pointarray. Only adds as many dimensions as the * pointarray supports. */ int ptarray_remove_point(POINTARRAY *pa, int where) { size_t ptsize = ptarray_point_size(pa); /* Check for pathology */ if( ! pa ) { lwerror("ptarray_remove_point: null input"); return LW_FAILURE; } /* Error on invalid offset value */ if ( where >= pa->npoints || where < 0) { lwerror("ptarray_remove_point: offset out of range (%d)", where); return LW_FAILURE; } /* If the point is any but the last, we need to copy the data back one point */ if( where < pa->npoints - 1 ) { memmove(getPoint_internal(pa, where), getPoint_internal(pa, where+1), ptsize * (pa->npoints - where - 1)); } /* We have one less point */ pa->npoints--; return LW_SUCCESS; } /** * Build a new #POINTARRAY, but on top of someone else's ordinate array. * Flag as read-only, so that ptarray_free() does not free the serialized_ptlist */ POINTARRAY* ptarray_construct_reference_data(char hasz, char hasm, uint32_t npoints, uint8_t *ptlist) { POINTARRAY *pa = lwalloc(sizeof(POINTARRAY)); LWDEBUGF(5, "hasz = %d, hasm = %d, npoints = %d, ptlist = %p", hasz, hasm, npoints, ptlist); pa->flags = gflags(hasz, hasm, 0); FLAGS_SET_READONLY(pa->flags, 1); /* We don't own this memory, so we can't alter or free it. */ pa->npoints = npoints; pa->maxpoints = npoints; pa->serialized_pointlist = ptlist; return pa; } POINTARRAY* ptarray_construct_copy_data(char hasz, char hasm, uint32_t npoints, const uint8_t *ptlist) { POINTARRAY *pa = lwalloc(sizeof(POINTARRAY)); pa->flags = gflags(hasz, hasm, 0); pa->npoints = npoints; pa->maxpoints = npoints; if ( npoints > 0 ) { pa->serialized_pointlist = lwalloc(ptarray_point_size(pa) * npoints); memcpy(pa->serialized_pointlist, ptlist, ptarray_point_size(pa) * npoints); } else { pa->serialized_pointlist = NULL; } return pa; } void ptarray_free(POINTARRAY *pa) { if(pa) { if(pa->serialized_pointlist && ( ! FLAGS_GET_READONLY(pa->flags) ) ) lwfree(pa->serialized_pointlist); lwfree(pa); LWDEBUG(5,"Freeing a PointArray"); } } void ptarray_reverse(POINTARRAY *pa) { /* TODO change this to double array operations once point array is double aligned */ POINT4D pbuf; uint32_t i; int ptsize = ptarray_point_size(pa); int last = pa->npoints-1; int mid = pa->npoints/2; for (i=0; i<mid; i++) { uint8_t *from, *to; from = getPoint_internal(pa, i); to = getPoint_internal(pa, (last-i)); memcpy((uint8_t *)&pbuf, to, ptsize); memcpy(to, from, ptsize); memcpy(from, (uint8_t *)&pbuf, ptsize); } } /** * Reverse X and Y axis on a given POINTARRAY */ POINTARRAY* ptarray_flip_coordinates(POINTARRAY *pa) { int i; double d; POINT4D p; for (i=0 ; i < pa->npoints ; i++) { getPoint4d_p(pa, i, &p); d = p.y; p.y = p.x; p.x = d; ptarray_set_point4d(pa, i, &p); } return pa; } /** * @brief Returns a modified #POINTARRAY so that no segment is * longer than the given distance (computed using 2d). * * Every input point is kept. * Z and M values for added points (if needed) are set to 0. */ POINTARRAY * ptarray_segmentize2d(const POINTARRAY *ipa, double dist) { double segdist; POINT4D p1, p2; POINT4D pbuf; POINTARRAY *opa; int ipoff=0; /* input point offset */ int hasz = FLAGS_GET_Z(ipa->flags); int hasm = FLAGS_GET_M(ipa->flags); pbuf.x = pbuf.y = pbuf.z = pbuf.m = 0; /* Initial storage */ opa = ptarray_construct_empty(hasz, hasm, ipa->npoints); /* Add first point */ getPoint4d_p(ipa, ipoff, &p1); ptarray_append_point(opa, &p1, LW_FALSE); ipoff++; while (ipoff<ipa->npoints) { /* * We use these pointers to avoid * "strict-aliasing rules break" warning raised * by gcc (3.3 and up). * * It looks that casting a variable address (also * referred to as "type-punned pointer") * breaks those "strict" rules. * */ POINT4D *p1ptr=&p1, *p2ptr=&p2; getPoint4d_p(ipa, ipoff, &p2); segdist = distance2d_pt_pt((POINT2D *)p1ptr, (POINT2D *)p2ptr); if (segdist > dist) /* add an intermediate point */ { pbuf.x = p1.x + (p2.x-p1.x)/segdist * dist; pbuf.y = p1.y + (p2.y-p1.y)/segdist * dist; if( hasz ) pbuf.z = p1.z + (p2.z-p1.z)/segdist * dist; if( hasm ) pbuf.m = p1.m + (p2.m-p1.m)/segdist * dist; ptarray_append_point(opa, &pbuf, LW_FALSE); p1 = pbuf; } else /* copy second point */ { ptarray_append_point(opa, &p2, (ipa->npoints==2)?LW_TRUE:LW_FALSE); p1 = p2; ipoff++; } } return opa; } char ptarray_same(const POINTARRAY *pa1, const POINTARRAY *pa2) { uint32_t i; size_t ptsize; if ( FLAGS_GET_ZM(pa1->flags) != FLAGS_GET_ZM(pa2->flags) ) return LW_FALSE; LWDEBUG(5,"dimensions are the same"); if ( pa1->npoints != pa2->npoints ) return LW_FALSE; LWDEBUG(5,"npoints are the same"); ptsize = ptarray_point_size(pa1); LWDEBUGF(5, "ptsize = %d", ptsize); for (i=0; i<pa1->npoints; i++) { if ( memcmp(getPoint_internal(pa1, i), getPoint_internal(pa2, i), ptsize) ) return LW_FALSE; LWDEBUGF(5,"point #%d is the same",i); } return LW_TRUE; } /** * @brief Add a point in a pointarray. * * @param pa the source POINTARRAY * @param p the point to add * @param pdims number of ordinates in p (2..4) * @param where to insert the point. 0 prepends, pa->npoints appends * * @returns a newly constructed POINTARRAY using a newly allocated buffer * for the actual points, or NULL on error. */ POINTARRAY * ptarray_addPoint(const POINTARRAY *pa, uint8_t *p, size_t pdims, uint32_t where) { POINTARRAY *ret; POINT4D pbuf; size_t ptsize = ptarray_point_size(pa); LWDEBUGF(3, "pa %x p %x size %d where %d", pa, p, pdims, where); if ( pdims < 2 || pdims > 4 ) { lwerror("ptarray_addPoint: point dimension out of range (%d)", pdims); return NULL; } if ( where > pa->npoints ) { lwerror("ptarray_addPoint: offset out of range (%d)", where); return NULL; } LWDEBUG(3, "called with a %dD point"); pbuf.x = pbuf.y = pbuf.z = pbuf.m = 0.0; memcpy((uint8_t *)&pbuf, p, pdims*sizeof(double)); LWDEBUG(3, "initialized point buffer"); ret = ptarray_construct(FLAGS_GET_Z(pa->flags), FLAGS_GET_M(pa->flags), pa->npoints+1); if ( where == -1 ) where = pa->npoints; if ( where ) { memcpy(getPoint_internal(ret, 0), getPoint_internal(pa, 0), ptsize*where); } memcpy(getPoint_internal(ret, where), (uint8_t *)&pbuf, ptsize); if ( where+1 != ret->npoints ) { memcpy(getPoint_internal(ret, where+1), getPoint_internal(pa, where), ptsize*(pa->npoints-where)); } return ret; } /** * @brief Remove a point from a pointarray. * @param which - is the offset (starting at 0) * @return #POINTARRAY is newly allocated */ POINTARRAY * ptarray_removePoint(POINTARRAY *pa, uint32_t which) { POINTARRAY *ret; size_t ptsize = ptarray_point_size(pa); LWDEBUGF(3, "pa %x which %d", pa, which); #if PARANOIA_LEVEL > 0 if ( which > pa->npoints-1 ) { lwerror("ptarray_removePoint: offset (%d) out of range (%d..%d)", which, 0, pa->npoints-1); return NULL; } if ( pa->npoints < 3 ) { lwerror("ptarray_removePointe: can't remove a point from a 2-vertex POINTARRAY"); } #endif ret = ptarray_construct(FLAGS_GET_Z(pa->flags), FLAGS_GET_M(pa->flags), pa->npoints-1); /* copy initial part */ if ( which ) { memcpy(getPoint_internal(ret, 0), getPoint_internal(pa, 0), ptsize*which); } /* copy final part */ if ( which < pa->npoints-1 ) { memcpy(getPoint_internal(ret, which), getPoint_internal(pa, which+1), ptsize*(pa->npoints-which-1)); } return ret; } /** * @brief Merge two given POINTARRAY and returns a pointer * on the new aggregate one. * Warning: this function free the two inputs POINTARRAY * @return #POINTARRAY is newly allocated */ POINTARRAY * ptarray_merge(POINTARRAY *pa1, POINTARRAY *pa2) { POINTARRAY *pa; size_t ptsize = ptarray_point_size(pa1); if (FLAGS_GET_ZM(pa1->flags) != FLAGS_GET_ZM(pa2->flags)) lwerror("ptarray_cat: Mixed dimension"); pa = ptarray_construct( FLAGS_GET_Z(pa1->flags), FLAGS_GET_M(pa1->flags), pa1->npoints + pa2->npoints); memcpy( getPoint_internal(pa, 0), getPoint_internal(pa1, 0), ptsize*(pa1->npoints)); memcpy( getPoint_internal(pa, pa1->npoints), getPoint_internal(pa2, 0), ptsize*(pa2->npoints)); lwfree(pa1); lwfree(pa2); return pa; } /** * @brief Deep clone a pointarray (also clones serialized pointlist) */ POINTARRAY * ptarray_clone_deep(const POINTARRAY *in) { POINTARRAY *out = lwalloc(sizeof(POINTARRAY)); size_t size; LWDEBUG(3, "ptarray_clone_deep called."); out->flags = in->flags; out->npoints = in->npoints; out->maxpoints = in->maxpoints; FLAGS_SET_READONLY(out->flags, 0); size = in->npoints * ptarray_point_size(in); out->serialized_pointlist = lwalloc(size); memcpy(out->serialized_pointlist, in->serialized_pointlist, size); return out; } /** * @brief Clone a POINTARRAY object. Serialized pointlist is not copied. */ POINTARRAY * ptarray_clone(const POINTARRAY *in) { POINTARRAY *out = lwalloc(sizeof(POINTARRAY)); LWDEBUG(3, "ptarray_clone_deep called."); out->flags = in->flags; out->npoints = in->npoints; out->maxpoints = in->maxpoints; FLAGS_SET_READONLY(out->flags, 1); out->serialized_pointlist = in->serialized_pointlist; return out; } /** * Check for ring closure using whatever dimensionality is declared on the * pointarray. */ int ptarray_is_closed(const POINTARRAY *in) { return 0 == memcmp(getPoint_internal(in, 0), getPoint_internal(in, in->npoints-1), ptarray_point_size(in)); } int ptarray_is_closed_2d(const POINTARRAY *in) { return 0 == memcmp(getPoint_internal(in, 0), getPoint_internal(in, in->npoints-1), sizeof(POINT2D)); } int ptarray_is_closed_3d(const POINTARRAY *in) { return 0 == memcmp(getPoint_internal(in, 0), getPoint_internal(in, in->npoints-1), sizeof(POINT3D)); } int ptarray_is_closed_z(const POINTARRAY *in) { if ( FLAGS_GET_Z(in->flags) ) return ptarray_is_closed_3d(in); else return ptarray_is_closed_2d(in); } /** * Return 1 if the point is inside the POINTARRAY, -1 if it is outside, * and 0 if it is on the boundary. */ int ptarray_contains_point(const POINTARRAY *pa, const POINT2D *pt) { return ptarray_contains_point_partial(pa, pt, LW_TRUE, NULL); } int ptarray_contains_point_partial(const POINTARRAY *pa, const POINT2D *pt, int check_closed, int *winding_number) { int wn = 0; int i; double side; const POINT2D *seg1; const POINT2D *seg2; double ymin, ymax; seg1 = getPoint2d_cp(pa, 0); seg2 = getPoint2d_cp(pa, pa->npoints-1); if ( check_closed && ! p2d_same(seg1, seg2) ) lwerror("ptarray_contains_point called on unclosed ring"); for ( i=1; i < pa->npoints; i++ ) { seg2 = getPoint2d_cp(pa, i); /* Zero length segments are ignored. */ if ( seg1->x == seg2->x && seg1->y == seg2->y ) { seg1 = seg2; continue; } ymin = FP_MIN(seg1->y, seg2->y); ymax = FP_MAX(seg1->y, seg2->y); /* Only test segments in our vertical range */ if ( pt->y > ymax || pt->y < ymin ) { seg1 = seg2; continue; } side = lw_segment_side(seg1, seg2, pt); /* * A point on the boundary of a ring is not contained. * WAS: if (fabs(side) < 1e-12), see #852 */ if ( (side == 0) && lw_pt_in_seg(pt, seg1, seg2) ) { return LW_BOUNDARY; } /* * If the point is to the left of the line, and it's rising, * then the line is to the right of the point and * circling counter-clockwise, so incremement. */ if ( (side < 0) && (seg1->y <= pt->y) && (pt->y < seg2->y) ) { wn++; } /* * If the point is to the right of the line, and it's falling, * then the line is to the right of the point and circling * clockwise, so decrement. */ else if ( (side > 0) && (seg2->y <= pt->y) && (pt->y < seg1->y) ) { wn--; } seg1 = seg2; } /* Sent out the winding number for calls that are building on this as a primitive */ if ( winding_number ) *winding_number = wn; /* Outside */ if (wn == 0) { return LW_OUTSIDE; } /* Inside */ return LW_INSIDE; } /** * For POINTARRAYs representing CIRCULARSTRINGS. That is, linked triples * with each triple being control points of a circular arc. Such * POINTARRAYs have an odd number of vertices. * * Return 1 if the point is inside the POINTARRAY, -1 if it is outside, * and 0 if it is on the boundary. */ int ptarrayarc_contains_point(const POINTARRAY *pa, const POINT2D *pt) { return ptarrayarc_contains_point_partial(pa, pt, LW_TRUE /* Check closed*/, NULL); } int ptarrayarc_contains_point_partial(const POINTARRAY *pa, const POINT2D *pt, int check_closed, int *winding_number) { int wn = 0; int i, side; const POINT2D *seg1; const POINT2D *seg2; const POINT2D *seg3; GBOX gbox; /* Check for not an arc ring (always have odd # of points) */ if ( (pa->npoints % 2) == 0 ) { lwerror("ptarrayarc_contains_point called with even number of points"); return LW_OUTSIDE; } /* Check for not an arc ring (always have >= 3 points) */ if ( pa->npoints < 3 ) { lwerror("ptarrayarc_contains_point called too-short pointarray"); return LW_OUTSIDE; } /* Check for unclosed case */ seg1 = getPoint2d_cp(pa, 0); seg3 = getPoint2d_cp(pa, pa->npoints-1); if ( check_closed && ! p2d_same(seg1, seg3) ) { lwerror("ptarrayarc_contains_point called on unclosed ring"); return LW_OUTSIDE; } /* OK, it's closed. Is it just one circle? */ else if ( p2d_same(seg1, seg3) && pa->npoints == 3 ) { double radius, d; POINT2D c; seg2 = getPoint2d_cp(pa, 1); /* Wait, it's just a point, so it can't contain anything */ if ( lw_arc_is_pt(seg1, seg2, seg3) ) return LW_OUTSIDE; /* See if the point is within the circle radius */ radius = lw_arc_center(seg1, seg2, seg3, &c); d = distance2d_pt_pt(pt, &c); if ( FP_EQUALS(d, radius) ) return LW_BOUNDARY; /* Boundary of circle */ else if ( d < radius ) return LW_INSIDE; /* Inside circle */ else return LW_OUTSIDE; /* Outside circle */ } else if ( p2d_same(seg1, pt) || p2d_same(seg3, pt) ) { return LW_BOUNDARY; /* Boundary case */ } /* Start on the ring */ seg1 = getPoint2d_cp(pa, 0); for ( i=1; i < pa->npoints; i += 2 ) { seg2 = getPoint2d_cp(pa, i); seg3 = getPoint2d_cp(pa, i+1); /* Catch an easy boundary case */ if( p2d_same(seg3, pt) ) return LW_BOUNDARY; /* Skip arcs that have no size */ if ( lw_arc_is_pt(seg1, seg2, seg3) ) { seg1 = seg3; continue; } /* Only test segments in our vertical range */ lw_arc_calculate_gbox_cartesian_2d(seg1, seg2, seg3, &gbox); if ( pt->y > gbox.ymax || pt->y < gbox.ymin ) { seg1 = seg3; continue; } /* Outside of horizontal range, and not between end points we also skip */ if ( (pt->x > gbox.xmax || pt->x < gbox.xmin) && (pt->y > FP_MAX(seg1->y, seg3->y) || pt->y < FP_MIN(seg1->y, seg3->y)) ) { seg1 = seg3; continue; } side = lw_arc_side(seg1, seg2, seg3, pt); /* On the boundary */ if ( (side == 0) && lw_pt_in_arc(pt, seg1, seg2, seg3) ) { return LW_BOUNDARY; } /* Going "up"! Point to left of arc. */ if ( side < 0 && (seg1->y <= pt->y) && (pt->y < seg3->y) ) { wn++; } /* Going "down"! */ if ( side > 0 && (seg2->y <= pt->y) && (pt->y < seg1->y) ) { wn--; } /* Inside the arc! */ if ( pt->x <= gbox.xmax && pt->x >= gbox.xmin ) { POINT2D C; double radius = lw_arc_center(seg1, seg2, seg3, &C); double d = distance2d_pt_pt(pt, &C); /* On the boundary! */ if ( d == radius ) return LW_BOUNDARY; /* Within the arc! */ if ( d < radius ) { /* Left side, increment winding number */ if ( side < 0 ) wn++; /* Right side, decrement winding number */ if ( side > 0 ) wn--; } } seg1 = seg3; } /* Sent out the winding number for calls that are building on this as a primitive */ if ( winding_number ) *winding_number = wn; /* Outside */ if (wn == 0) { return LW_OUTSIDE; } /* Inside */ return LW_INSIDE; } /** * Returns the area in cartesian units. Area is negative if ring is oriented CCW, * positive if it is oriented CW and zero if the ring is degenerate or flat. * http://en.wikipedia.org/wiki/Shoelace_formula */ double ptarray_signed_area(const POINTARRAY *pa) { const POINT2D *P1; const POINT2D *P2; const POINT2D *P3; double sum = 0.0; double x0, x, y1, y2; int i; if (! pa || pa->npoints < 3 ) return 0.0; P1 = getPoint2d_cp(pa, 0); P2 = getPoint2d_cp(pa, 1); x0 = P1->x; for ( i = 1; i < pa->npoints - 1; i++ ) { P3 = getPoint2d_cp(pa, i+1); x = P2->x - x0; y1 = P3->y; y2 = P1->y; sum += x * (y2-y1); /* Move forwards! */ P1 = P2; P2 = P3; } return sum / 2.0; } int ptarray_isccw(const POINTARRAY *pa) { double area = 0; area = ptarray_signed_area(pa); if ( area > 0 ) return LW_FALSE; else return LW_TRUE; } POINTARRAY* ptarray_force_dims(const POINTARRAY *pa, int hasz, int hasm) { /* TODO handle zero-length point arrays */ int i; int in_hasz = FLAGS_GET_Z(pa->flags); int in_hasm = FLAGS_GET_M(pa->flags); POINT4D pt; POINTARRAY *pa_out = ptarray_construct_empty(hasz, hasm, pa->npoints); for( i = 0; i < pa->npoints; i++ ) { getPoint4d_p(pa, i, &pt); if( hasz && ! in_hasz ) pt.z = 0.0; if( hasm && ! in_hasm ) pt.m = 0.0; ptarray_append_point(pa_out, &pt, LW_TRUE); } return pa_out; } POINTARRAY * ptarray_substring(POINTARRAY *ipa, double from, double to, double tolerance) { POINTARRAY *dpa; POINT4D pt; POINT4D p1, p2; POINT4D *p1ptr=&p1; /* don't break strict-aliasing rule */ POINT4D *p2ptr=&p2; int nsegs, i; double length, slength, tlength; int state = 0; /* 0=before, 1=inside */ /* * Create a dynamic pointarray with an initial capacity * equal to full copy of input points */ dpa = ptarray_construct_empty(FLAGS_GET_Z(ipa->flags), FLAGS_GET_M(ipa->flags), ipa->npoints); /* Compute total line length */ length = ptarray_length_2d(ipa); LWDEBUGF(3, "Total length: %g", length); /* Get 'from' and 'to' lengths */ from = length*from; to = length*to; LWDEBUGF(3, "From/To: %g/%g", from, to); tlength = 0; getPoint4d_p(ipa, 0, &p1); nsegs = ipa->npoints - 1; for ( i = 0; i < nsegs; i++ ) { double dseg; getPoint4d_p(ipa, i+1, &p2); LWDEBUGF(3 ,"Segment %d: (%g,%g,%g,%g)-(%g,%g,%g,%g)", i, p1.x, p1.y, p1.z, p1.m, p2.x, p2.y, p2.z, p2.m); /* Find the length of this segment */ slength = distance2d_pt_pt((POINT2D *)p1ptr, (POINT2D *)p2ptr); /* * We are before requested start. */ if ( state == 0 ) /* before */ { LWDEBUG(3, " Before start"); if ( fabs ( from - ( tlength + slength ) ) <= tolerance ) { LWDEBUG(3, " Second point is our start"); /* * Second point is our start */ ptarray_append_point(dpa, &p2, LW_FALSE); state=1; /* we're inside now */ goto END; } else if ( fabs(from - tlength) <= tolerance ) { LWDEBUG(3, " First point is our start"); /* * First point is our start */ ptarray_append_point(dpa, &p1, LW_FALSE); /* * We're inside now, but will check * 'to' point as well */ state=1; } /* * Didn't reach the 'from' point, * nothing to do */ else if ( from > tlength + slength ) goto END; else /* tlength < from < tlength+slength */ { LWDEBUG(3, " Seg contains first point"); /* * Our start is between first and * second point */ dseg = (from - tlength) / slength; interpolate_point4d(&p1, &p2, &pt, dseg); ptarray_append_point(dpa, &pt, LW_FALSE); /* * We're inside now, but will check * 'to' point as well */ state=1; } } if ( state == 1 ) /* inside */ { LWDEBUG(3, " Inside"); /* * 'to' point is our second point. */ if ( fabs(to - ( tlength + slength ) ) <= tolerance ) { LWDEBUG(3, " Second point is our end"); ptarray_append_point(dpa, &p2, LW_FALSE); break; /* substring complete */ } /* * 'to' point is our first point. * (should only happen if 'to' is 0) */ else if ( fabs(to - tlength) <= tolerance ) { LWDEBUG(3, " First point is our end"); ptarray_append_point(dpa, &p1, LW_FALSE); break; /* substring complete */ } /* * Didn't reach the 'end' point, * just copy second point */ else if ( to > tlength + slength ) { ptarray_append_point(dpa, &p2, LW_FALSE); goto END; } /* * 'to' point falls on this segment * Interpolate and break. */ else if ( to < tlength + slength ) { LWDEBUG(3, " Seg contains our end"); dseg = (to - tlength) / slength; interpolate_point4d(&p1, &p2, &pt, dseg); ptarray_append_point(dpa, &pt, LW_FALSE); break; } else { LWDEBUG(3, "Unhandled case"); } } END: tlength += slength; memcpy(&p1, &p2, sizeof(POINT4D)); } LWDEBUGF(3, "Out of loop, ptarray has %d points", dpa->npoints); return dpa; } /* * Write into the *ret argument coordinates of the closes point on * the given segment to the reference input point. */ void closest_point_on_segment(const POINT4D *p, const POINT4D *A, const POINT4D *B, POINT4D *ret) { double r; if ( FP_EQUALS(A->x, B->x) && FP_EQUALS(A->y, B->y) ) { *ret = *A; return; } /* * We use comp.graphics.algorithms Frequently Asked Questions method * * (1) AC dot AB * r = ---------- * ||AB||^2 * r has the following meaning: * r=0 P = A * r=1 P = B * r<0 P is on the backward extension of AB * r>1 P is on the forward extension of AB * 0<r<1 P is interior to AB * */ r = ( (p->x-A->x) * (B->x-A->x) + (p->y-A->y) * (B->y-A->y) )/( (B->x-A->x)*(B->x-A->x) +(B->y-A->y)*(B->y-A->y) ); if (r<0) { *ret = *A; return; } if (r>1) { *ret = *B; return; } ret->x = A->x + ( (B->x - A->x) * r ); ret->y = A->y + ( (B->y - A->y) * r ); ret->z = A->z + ( (B->z - A->z) * r ); ret->m = A->m + ( (B->m - A->m) * r ); } /* * Given a point, returns the location of closest point on pointarray * and, optionally, it's actual distance from the point array. */ double ptarray_locate_point(const POINTARRAY *pa, const POINT4D *p4d, double *mindistout, POINT4D *proj4d) { double mindist=-1; double tlen, plen; int t, seg=-1; POINT4D start4d, end4d, projtmp; POINT2D start, end, proj, p; /* Initialize our 2D copy of the input parameter */ p.x = p4d->x; p.y = p4d->y; if ( ! proj4d ) proj4d = &projtmp; getPoint2d_p(pa, 0, &start); for (t=1; t<pa->npoints; t++) { double dist; getPoint2d_p(pa, t, &end); dist = distance2d_pt_seg(&p, &start, &end); if (t==1 || dist < mindist ) { mindist = dist; seg=t-1; } if ( mindist == 0 ) { LWDEBUG(3, "Breaking on mindist=0"); break; } start = end; } if ( mindistout ) *mindistout = mindist; LWDEBUGF(3, "Closest segment: %d", seg); LWDEBUGF(3, "mindist: %g", mindist); /* * We need to project the * point on the closest segment. */ getPoint4d_p(pa, seg, &start4d); getPoint4d_p(pa, seg+1, &end4d); closest_point_on_segment(p4d, &start4d, &end4d, proj4d); /* Copy 4D values into 2D holder */ proj.x = proj4d->x; proj.y = proj4d->y; LWDEBUGF(3, "Closest segment:%d, npoints:%d", seg, pa->npoints); /* For robustness, force 1 when closest point == endpoint */ if ( (seg >= (pa->npoints-2)) && p2d_same(&proj, &end) ) { return 1.0; } LWDEBUGF(3, "Closest point on segment: %g,%g", proj.x, proj.y); tlen = ptarray_length_2d(pa); LWDEBUGF(3, "tlen %g", tlen); /* Location of any point on a zero-length line is 0 */ /* See http://trac.osgeo.org/postgis/ticket/1772#comment:2 */ if ( tlen == 0 ) return 0; plen=0; getPoint2d_p(pa, 0, &start); for (t=0; t<seg; t++, start=end) { getPoint2d_p(pa, t+1, &end); plen += distance2d_pt_pt(&start, &end); LWDEBUGF(4, "Segment %d made plen %g", t, plen); } plen+=distance2d_pt_pt(&proj, &start); LWDEBUGF(3, "plen %g, tlen %g", plen, tlen); return plen/tlen; } /** * @brief Longitude shift for a pointarray. * Y remains the same * X is converted: * from -180..180 to 0..360 * from 0..360 to -180..180 * X < 0 becomes X + 360 * X > 180 becomes X - 360 */ void ptarray_longitude_shift(POINTARRAY *pa) { int i; double x; for (i=0; i<pa->npoints; i++) { memcpy(&x, getPoint_internal(pa, i), sizeof(double)); if ( x < 0 ) x+= 360; else if ( x > 180 ) x -= 360; memcpy(getPoint_internal(pa, i), &x, sizeof(double)); } } /* * Returns a POINTARRAY with consecutive equal points * removed. Equality test on all dimensions of input. * * Always returns a newly allocated object. * */ POINTARRAY * ptarray_remove_repeated_points(POINTARRAY *in) { POINTARRAY* out; size_t ptsize; size_t ipn, opn; LWDEBUG(3, "ptarray_remove_repeated_points called."); /* Single or zero point arrays can't have duplicates */ if ( in->npoints < 3 ) return ptarray_clone_deep(in); ptsize = ptarray_point_size(in); LWDEBUGF(3, "ptsize: %d", ptsize); /* Allocate enough space for all points */ out = ptarray_construct(FLAGS_GET_Z(in->flags), FLAGS_GET_M(in->flags), in->npoints); /* Now fill up the actual points (NOTE: could be optimized) */ opn=1; memcpy(getPoint_internal(out, 0), getPoint_internal(in, 0), ptsize); LWDEBUGF(3, " first point copied, out points: %d", opn); for (ipn=1; ipn<in->npoints; ++ipn) { if ( (ipn==in->npoints-1 && opn==1) || memcmp(getPoint_internal(in, ipn-1), getPoint_internal(in, ipn), ptsize) ) { /* The point is different from the previous, * we add it to output */ memcpy(getPoint_internal(out, opn++), getPoint_internal(in, ipn), ptsize); LWDEBUGF(3, " Point %d differs from point %d. Out points: %d", ipn, ipn-1, opn); } } LWDEBUGF(3, " in:%d out:%d", out->npoints, opn); out->npoints = opn; return out; } static void ptarray_dp_findsplit(POINTARRAY *pts, int p1, int p2, int *split, double *dist) { int k; POINT2D pa, pb, pk; double tmp; LWDEBUG(4, "function called"); *dist = -1; *split = p1; if (p1 + 1 < p2) { getPoint2d_p(pts, p1, &pa); getPoint2d_p(pts, p2, &pb); LWDEBUGF(4, "P%d(%f,%f) to P%d(%f,%f)", p1, pa.x, pa.y, p2, pb.x, pb.y); for (k=p1+1; k<p2; k++) { getPoint2d_p(pts, k, &pk); LWDEBUGF(4, "P%d(%f,%f)", k, pk.x, pk.y); /* distance computation */ tmp = distance2d_pt_seg(&pk, &pa, &pb); if (tmp > *dist) { *dist = tmp; /* record the maximum */ *split = k; LWDEBUGF(4, "P%d is farthest (%g)", k, *dist); } } } /* length---should be redone if can == 0 */ else { LWDEBUG(3, "segment too short, no split/no dist"); } } POINTARRAY * ptarray_simplify(POINTARRAY *inpts, double epsilon, unsigned int minpts) { int *stack; /* recursion stack */ int sp=-1; /* recursion stack pointer */ int p1, split; double dist; POINTARRAY *outpts; POINT4D pt; /* Allocate recursion stack */ stack = lwalloc(sizeof(int)*inpts->npoints); p1 = 0; stack[++sp] = inpts->npoints-1; LWDEBUGF(2, "Input has %d pts and %d dims", inpts->npoints, FLAGS_NDIMS(inpts->flags)); /* Allocate output POINTARRAY, and add first point. */ outpts = ptarray_construct_empty(FLAGS_GET_Z(inpts->flags), FLAGS_GET_M(inpts->flags), inpts->npoints); getPoint4d_p(inpts, 0, &pt); ptarray_append_point(outpts, &pt, LW_FALSE); LWDEBUG(3, "Added P0 to simplified point array (size 1)"); do { ptarray_dp_findsplit(inpts, p1, stack[sp], &split, &dist); LWDEBUGF(3, "Farthest point from P%d-P%d is P%d (dist. %g)", p1, stack[sp], split, dist); if (dist > epsilon || ( outpts->npoints+sp+1 < minpts && dist > 0 ) ) { LWDEBUGF(4, "Added P%d to stack (outpts:%d)", split, sp); stack[++sp] = split; } else { getPoint4d_p(inpts, stack[sp], &pt); ptarray_append_point(outpts, &pt, LW_FALSE); LWDEBUGF(4, "Added P%d to simplified point array (size: %d)", stack[sp], outpts->npoints); p1 = stack[sp--]; } LWDEBUGF(4, "stack pointer = %d", sp); } while (! (sp<0) ); lwfree(stack); return outpts; } /** * Find the 2d length of the given #POINTARRAY, using circular * arc interpolation between each coordinate triple. * Length(A1, A2, A3, A4, A5) = Length(A1, A2, A3)+Length(A3, A4, A5) */ double ptarray_arc_length_2d(const POINTARRAY *pts) { double dist = 0.0; int i; const POINT2D *a1; const POINT2D *a2; const POINT2D *a3; if ( pts->npoints % 2 != 1 ) lwerror("arc point array with even number of points"); a1 = getPoint2d_cp(pts, 0); for ( i=2; i < pts->npoints; i += 2 ) { a2 = getPoint2d_cp(pts, i-1); a3 = getPoint2d_cp(pts, i); dist += lw_arc_length(a1, a2, a3); a1 = a3; } return dist; } /** * Find the 2d length of the given #POINTARRAY (even if it's 3d) */ double ptarray_length_2d(const POINTARRAY *pts) { double dist = 0.0; int i; const POINT2D *frm; const POINT2D *to; if ( pts->npoints < 2 ) return 0.0; frm = getPoint2d_cp(pts, 0); for ( i=1; i < pts->npoints; i++ ) { to = getPoint2d_cp(pts, i); dist += sqrt( ((frm->x - to->x)*(frm->x - to->x)) + ((frm->y - to->y)*(frm->y - to->y)) ); frm = to; } return dist; } /** * Find the 3d/2d length of the given #POINTARRAY * (depending on its dimensionality) */ double ptarray_length(const POINTARRAY *pts) { double dist = 0.0; int i; POINT3DZ frm; POINT3DZ to; if ( pts->npoints < 2 ) return 0.0; /* compute 2d length if 3d is not available */ if ( ! FLAGS_GET_Z(pts->flags) ) return ptarray_length_2d(pts); getPoint3dz_p(pts, 0, &frm); for ( i=1; i < pts->npoints; i++ ) { getPoint3dz_p(pts, i, &to); dist += sqrt( ((frm.x - to.x)*(frm.x - to.x)) + ((frm.y - to.y)*(frm.y - to.y)) + ((frm.z - to.z)*(frm.z - to.z)) ); frm = to; } return dist; } /* * Get a pointer to nth point of a POINTARRAY. * You cannot safely cast this to a real POINT, due to memory alignment * constraints. Use getPoint*_p for that. */ uint8_t * getPoint_internal(const POINTARRAY *pa, int n) { size_t size; uint8_t *ptr; #if PARANOIA_LEVEL > 0 if ( pa == NULL ) { lwerror("getPoint got NULL pointarray"); return NULL; } LWDEBUGF(5, "(n=%d, pa.npoints=%d, pa.maxpoints=%d)",n,pa->npoints,pa->maxpoints); if ( ( n < 0 ) || ( n > pa->npoints ) || ( n >= pa->maxpoints ) ) { lwerror("getPoint_internal called outside of ptarray range (n=%d, pa.npoints=%d, pa.maxpoints=%d)",n,pa->npoints,pa->maxpoints); return NULL; /*error */ } #endif size = ptarray_point_size(pa); ptr = pa->serialized_pointlist + size * n; if ( FLAGS_NDIMS(pa->flags) == 2) { LWDEBUGF(5, "point = %g %g", *((double*)(ptr)), *((double*)(ptr+8))); } else if ( FLAGS_NDIMS(pa->flags) == 3) { LWDEBUGF(5, "point = %g %g %g", *((double*)(ptr)), *((double*)(ptr+8)), *((double*)(ptr+16))); } else if ( FLAGS_NDIMS(pa->flags) == 4) { LWDEBUGF(5, "point = %g %g %g %g", *((double*)(ptr)), *((double*)(ptr+8)), *((double*)(ptr+16)), *((double*)(ptr+24))); } return ptr; } /** * Affine transform a pointarray. */ void ptarray_affine(POINTARRAY *pa, const AFFINE *a) { int i; double x,y,z; POINT4D p4d; LWDEBUG(2, "lwgeom_affine_ptarray start"); if ( FLAGS_GET_Z(pa->flags) ) { LWDEBUG(3, " has z"); for (i=0; i<pa->npoints; i++) { getPoint4d_p(pa, i, &p4d); x = p4d.x; y = p4d.y; z = p4d.z; p4d.x = a->afac * x + a->bfac * y + a->cfac * z + a->xoff; p4d.y = a->dfac * x + a->efac * y + a->ffac * z + a->yoff; p4d.z = a->gfac * x + a->hfac * y + a->ifac * z + a->zoff; ptarray_set_point4d(pa, i, &p4d); LWDEBUGF(3, " POINT %g %g %g => %g %g %g", x, y, x, p4d.x, p4d.y, p4d.z); } } else { LWDEBUG(3, " doesn't have z"); for (i=0; i<pa->npoints; i++) { getPoint4d_p(pa, i, &p4d); x = p4d.x; y = p4d.y; p4d.x = a->afac * x + a->bfac * y + a->xoff; p4d.y = a->dfac * x + a->efac * y + a->yoff; ptarray_set_point4d(pa, i, &p4d); LWDEBUGF(3, " POINT %g %g %g => %g %g %g", x, y, x, p4d.x, p4d.y, p4d.z); } } LWDEBUG(3, "lwgeom_affine_ptarray end"); } int ptarray_startpoint(const POINTARRAY* pa, POINT4D* pt) { return getPoint4d_p(pa, 0, pt); }������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwmline.c���������������������������������������������������������0000644�0000000�0000000�00000005542�11722777314�017375� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwmline.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" void lwmline_release(LWMLINE *lwmline) { lwgeom_release(lwmline_as_lwgeom(lwmline)); } LWMLINE * lwmline_construct_empty(int srid, char hasz, char hasm) { LWMLINE *ret = (LWMLINE*)lwcollection_construct_empty(MULTILINETYPE, srid, hasz, hasm); return ret; } LWMLINE* lwmline_add_lwline(LWMLINE *mobj, const LWLINE *obj) { return (LWMLINE*)lwcollection_add_lwgeom((LWCOLLECTION*)mobj, (LWGEOM*)obj); } /** * Re-write the measure ordinate (or add one, if it isn't already there) interpolating * the measure between the supplied start and end values. */ LWMLINE* lwmline_measured_from_lwmline(const LWMLINE *lwmline, double m_start, double m_end) { int i = 0; int hasm = 0, hasz = 0; double length = 0.0, length_so_far = 0.0; double m_range = m_end - m_start; LWGEOM **geoms = NULL; if ( lwmline->type != MULTILINETYPE ) { lwerror("lwmline_measured_from_lmwline: only multiline types supported"); return NULL; } hasz = FLAGS_GET_Z(lwmline->flags); hasm = 1; /* Calculate the total length of the mline */ for ( i = 0; i < lwmline->ngeoms; i++ ) { LWLINE *lwline = (LWLINE*)lwmline->geoms[i]; if ( lwline->points && lwline->points->npoints > 1 ) { length += ptarray_length_2d(lwline->points); } } if ( lwgeom_is_empty((LWGEOM*)lwmline) ) { return (LWMLINE*)lwcollection_construct_empty(MULTILINETYPE, lwmline->srid, hasz, hasm); } geoms = lwalloc(sizeof(LWGEOM*) * lwmline->ngeoms); for ( i = 0; i < lwmline->ngeoms; i++ ) { double sub_m_start, sub_m_end; double sub_length = 0.0; LWLINE *lwline = (LWLINE*)lwmline->geoms[i]; if ( lwline->points && lwline->points->npoints > 1 ) { sub_length = ptarray_length_2d(lwline->points); } sub_m_start = (m_start + m_range * length_so_far / length); sub_m_end = (m_start + m_range * (length_so_far + sub_length) / length); geoms[i] = (LWGEOM*)lwline_measured_from_lwline(lwline, sub_m_start, sub_m_end); length_so_far += sub_length; } return (LWMLINE*)lwcollection_construct(lwmline->type, lwmline->srid, NULL, lwmline->ngeoms, geoms); } void lwmline_free(LWMLINE *mline) { int i; if ( ! mline ) return; if ( mline->bbox ) lwfree(mline->bbox); for ( i = 0; i < mline->ngeoms; i++ ) if ( mline->geoms && mline->geoms[i] ) lwline_free(mline->geoms[i]); if ( mline->geoms ) lwfree(mline->geoms); lwfree(mline); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_geos.h�����������������������������������������������������0000644�0000000�0000000�00000002036�11722777314�020235� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2011 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* Workaround for GEOS 2.2 compatibility: old geos_c.h does not contain header guards to protect from multiple inclusion */ #ifndef GEOS_C_INCLUDED #define GEOS_C_INCLUDED #include "geos_c.h" #endif #include "liblwgeom.h" /* ** Public prototypes for GEOS utility functions. */ LWGEOM *GEOS2LWGEOM(const GEOSGeometry *geom, char want3d); GEOSGeometry * LWGEOM2GEOS(const LWGEOM *g); GEOSGeometry * LWGEOM_GEOS_buildArea(const GEOSGeometry* geom_in); POINTARRAY *ptarray_from_GEOSCoordSeq(const GEOSCoordSequence *cs, char want3d); extern char lwgeom_geos_errmsg[]; extern void lwgeom_geos_error(const char *fmt, ...); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_log.h������������������������������������������������������0000644�0000000�0000000�00000003327�11722777314�020065� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2011 Sandro Santilli <strk@keybit.net> * Copyright 2008 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2007-2008 Mark Cave-Ayland * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * Internal logging routines * **********************************************************************/ #ifndef LWGEOM_LOG_H #define LWGEOM_LOG_H 1 #include <stdarg.h> /* * Debug macros */ #if POSTGIS_DEBUG_LEVEL > 0 /* Display a notice at the given debug level */ #define LWDEBUG(level, msg) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ lwnotice("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__); \ } while (0); /* Display a formatted notice at the given debug level * (like printf, with variadic arguments) */ #define LWDEBUGF(level, msg, ...) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ lwnotice("[%s:%s:%d] " msg, \ __FILE__, __func__, __LINE__, __VA_ARGS__); \ } while (0); #else /* POSTGIS_DEBUG_LEVEL <= 0 */ /* Empty prototype that can be optimised away by the compiler * for non-debug builds */ #define LWDEBUG(level, msg) \ ((void) 0) /* Empty prototype that can be optimised away by the compiler * for non-debug builds */ #define LWDEBUGF(level, msg, ...) \ ((void) 0) #endif /* POSTGIS_DEBUG_LEVEL <= 0 */ #endif /* LWGEOM_LOG_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwout_kml.c�������������������������������������������������������0000644�0000000�0000000�00000013255�11722777314�017743� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwout_kml.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2006 Corporacion Autonoma Regional de Santander * Eduin Carrillo <yecarrillo@cas.gov.co> * Copyright 2010 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of hte GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "stringbuffer.h" static int lwgeom_to_kml2_sb(const LWGEOM *geom, int precision, const char *prefix, stringbuffer_t *sb); static int lwpoint_to_kml2_sb(const LWPOINT *point, int precision, const char *prefix, stringbuffer_t *sb); static int lwline_to_kml2_sb(const LWLINE *line, int precision, const char *prefix, stringbuffer_t *sb); static int lwpoly_to_kml2_sb(const LWPOLY *poly, int precision, const char *prefix, stringbuffer_t *sb); static int lwcollection_to_kml2_sb(const LWCOLLECTION *col, int precision, const char *prefix, stringbuffer_t *sb); static int ptarray_to_kml2_sb(const POINTARRAY *pa, int precision, stringbuffer_t *sb); /* * KML 2.2.0 */ /* takes a GEOMETRY and returns a KML representation */ char* lwgeom_to_kml2(const LWGEOM *geom, int precision, const char *prefix) { stringbuffer_t *sb; int rv; char *kml; /* Can't do anything with empty */ if( lwgeom_is_empty(geom) ) return NULL; sb = stringbuffer_create(); rv = lwgeom_to_kml2_sb(geom, precision, prefix, sb); if ( rv == LW_FAILURE ) { stringbuffer_destroy(sb); return NULL; } kml = stringbuffer_getstringcopy(sb); stringbuffer_destroy(sb); return kml; } static int lwgeom_to_kml2_sb(const LWGEOM *geom, int precision, const char *prefix, stringbuffer_t *sb) { switch (geom->type) { case POINTTYPE: return lwpoint_to_kml2_sb((LWPOINT*)geom, precision, prefix, sb); case LINETYPE: return lwline_to_kml2_sb((LWLINE*)geom, precision, prefix, sb); case POLYGONTYPE: return lwpoly_to_kml2_sb((LWPOLY*)geom, precision, prefix, sb); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: return lwcollection_to_kml2_sb((LWCOLLECTION*)geom, precision, prefix, sb); default: lwerror("lwgeom_to_kml2: '%s' geometry type not supported", lwtype_name(geom->type)); return LW_FAILURE; } } static int ptarray_to_kml2_sb(const POINTARRAY *pa, int precision, stringbuffer_t *sb) { int i, j; int dims = FLAGS_GET_Z(pa->flags) ? 3 : 2; POINT4D pt; double *d; for ( i = 0; i < pa->npoints; i++ ) { getPoint4d_p(pa, i, &pt); d = (double*)(&pt); if ( i ) stringbuffer_append(sb," "); for (j = 0; j < dims; j++) { if ( j ) stringbuffer_append(sb,","); if( fabs(d[j]) < OUT_MAX_DOUBLE ) { if ( stringbuffer_aprintf(sb, "%.*f", precision, d[j]) < 0 ) return LW_FAILURE; } else { if ( stringbuffer_aprintf(sb, "%g", d[j]) < 0 ) return LW_FAILURE; } stringbuffer_trim_trailing_zeroes(sb); } } return LW_SUCCESS; } static int lwpoint_to_kml2_sb(const LWPOINT *point, int precision, const char *prefix, stringbuffer_t *sb) { /* Open point */ if ( stringbuffer_aprintf(sb, "<%sPoint><%scoordinates>", prefix, prefix) < 0 ) return LW_FAILURE; /* Coordinate array */ if ( ptarray_to_kml2_sb(point->point, precision, sb) == LW_FAILURE ) return LW_FAILURE; /* Close point */ if ( stringbuffer_aprintf(sb, "</%scoordinates></%sPoint>", prefix, prefix) < 0 ) return LW_FAILURE; return LW_SUCCESS; } static int lwline_to_kml2_sb(const LWLINE *line, int precision, const char *prefix, stringbuffer_t *sb) { /* Open linestring */ if ( stringbuffer_aprintf(sb, "<%sLineString><%scoordinates>", prefix, prefix) < 0 ) return LW_FAILURE; /* Coordinate array */ if ( ptarray_to_kml2_sb(line->points, precision, sb) == LW_FAILURE ) return LW_FAILURE; /* Close linestring */ if ( stringbuffer_aprintf(sb, "</%scoordinates></%sLineString>", prefix, prefix) < 0 ) return LW_FAILURE; return LW_SUCCESS; } static int lwpoly_to_kml2_sb(const LWPOLY *poly, int precision, const char *prefix, stringbuffer_t *sb) { int i, rv; /* Open polygon */ if ( stringbuffer_aprintf(sb, "<%sPolygon>", prefix) < 0 ) return LW_FAILURE; for ( i = 0; i < poly->nrings; i++ ) { /* Inner or outer ring opening tags */ if( i ) rv = stringbuffer_aprintf(sb, "<%sinnerBoundaryIs><%sLinearRing><%scoordinates>", prefix, prefix, prefix); else rv = stringbuffer_aprintf(sb, "<%souterBoundaryIs><%sLinearRing><%scoordinates>", prefix, prefix, prefix); if ( rv < 0 ) return LW_FAILURE; /* Coordinate array */ if ( ptarray_to_kml2_sb(poly->rings[i], precision, sb) == LW_FAILURE ) return LW_FAILURE; /* Inner or outer ring closing tags */ if( i ) rv = stringbuffer_aprintf(sb, "</%scoordinates></%sLinearRing></%sinnerBoundaryIs>", prefix, prefix, prefix); else rv = stringbuffer_aprintf(sb, "</%scoordinates></%sLinearRing></%souterBoundaryIs>", prefix, prefix, prefix); if ( rv < 0 ) return LW_FAILURE; } /* Close polygon */ if ( stringbuffer_aprintf(sb, "</%sPolygon>", prefix) < 0 ) return LW_FAILURE; return LW_SUCCESS; } static int lwcollection_to_kml2_sb(const LWCOLLECTION *col, int precision, const char *prefix, stringbuffer_t *sb) { int i, rv; /* Open geometry */ if ( stringbuffer_aprintf(sb, "<%sMultiGeometry>", prefix) < 0 ) return LW_FAILURE; for ( i = 0; i < col->ngeoms; i++ ) { rv = lwgeom_to_kml2_sb(col->geoms[i], precision, prefix, sb); if ( rv == LW_FAILURE ) return LW_FAILURE; } /* Close geometry */ if ( stringbuffer_aprintf(sb, "</%sMultiGeometry>", prefix) < 0 ) return LW_FAILURE; return LW_SUCCESS; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwcurvepoly.c�����������������������������������������������������0000644�0000000�0000000�00000007235�12125137775�020321� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* basic LWCURVEPOLY manipulation */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" LWCURVEPOLY * lwcurvepoly_construct_empty(int srid, char hasz, char hasm) { LWCURVEPOLY *ret; ret = lwalloc(sizeof(LWCURVEPOLY)); ret->type = CURVEPOLYTYPE; ret->flags = gflags(hasz, hasm, 0); ret->srid = srid; ret->nrings = 0; ret->maxrings = 1; /* Allocate room for sub-members, just in case. */ ret->rings = lwalloc(ret->maxrings * sizeof(LWGEOM*)); ret->bbox = NULL; return ret; } LWCURVEPOLY * lwcurvepoly_construct_from_lwpoly(LWPOLY *lwpoly) { LWCURVEPOLY *ret; int i; ret = lwalloc(sizeof(LWCURVEPOLY)); ret->type = CURVEPOLYTYPE; ret->flags = lwpoly->flags; ret->srid = lwpoly->srid; ret->nrings = lwpoly->nrings; ret->maxrings = lwpoly->nrings; /* Allocate room for sub-members, just in case. */ ret->rings = lwalloc(ret->maxrings * sizeof(LWGEOM*)); ret->bbox = lwpoly->bbox; for ( i = 0; i < ret->nrings; i++ ) { ret->rings[i] = lwline_as_lwgeom(lwline_construct(ret->srid, NULL, ptarray_clone_deep(lwpoly->rings[i]))); } return ret; } int lwcurvepoly_add_ring(LWCURVEPOLY *poly, LWGEOM *ring) { int i; /* Can't do anything with NULLs */ if( ! poly || ! ring ) { LWDEBUG(4,"NULL inputs!!! quitting"); return LW_FAILURE; } /* Check that we're not working with garbage */ if ( poly->rings == NULL && (poly->nrings || poly->maxrings) ) { LWDEBUG(4,"mismatched nrings/maxrings"); lwerror("Curvepolygon is in inconsistent state. Null memory but non-zero collection counts."); } /* Check that we're adding an allowed ring type */ if ( ! ( ring->type == LINETYPE || ring->type == CIRCSTRINGTYPE || ring->type == COMPOUNDTYPE ) ) { LWDEBUGF(4,"got incorrect ring type: %s",lwtype_name(ring->type)); return LW_FAILURE; } /* In case this is a truly empty, make some initial space */ if ( poly->rings == NULL ) { poly->maxrings = 2; poly->nrings = 0; poly->rings = lwalloc(poly->maxrings * sizeof(LWGEOM*)); } /* Allocate more space if we need it */ if ( poly->nrings == poly->maxrings ) { poly->maxrings *= 2; poly->rings = lwrealloc(poly->rings, sizeof(LWGEOM*) * poly->maxrings); } /* Make sure we don't already have a reference to this geom */ for ( i = 0; i < poly->nrings; i++ ) { if ( poly->rings[i] == ring ) { LWDEBUGF(4, "Found duplicate geometry in collection %p == %p", poly->rings[i], ring); return LW_SUCCESS; } } /* Add the ring and increment the ring count */ poly->rings[poly->nrings] = (LWGEOM*)ring; poly->nrings++; return LW_SUCCESS; } /** * This should be rewritten to make use of the curve itself. */ double lwcurvepoly_area(const LWCURVEPOLY *curvepoly) { double area = 0.0; LWPOLY *poly; if( lwgeom_is_empty((LWGEOM*)curvepoly) ) return 0.0; poly = lwcurvepoly_segmentize(curvepoly, 32); area = lwpoly_area(poly); lwpoly_free(poly); return area; } double lwcurvepoly_perimeter(const LWCURVEPOLY *poly) { double result=0.0; int i; for (i=0; i<poly->nrings; i++) result += lwgeom_length(poly->rings[i]); return result; } double lwcurvepoly_perimeter_2d(const LWCURVEPOLY *poly) { double result=0.0; int i; for (i=0; i<poly->nrings; i++) result += lwgeom_length_2d(poly->rings[i]); return result; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/g_util.c����������������������������������������������������������0000644�0000000�0000000�00000013476�12051032034�017171� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: g_util.c 10680 2012-11-15 00:15:24Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <ctype.h> #include "liblwgeom_internal.h" /* Structure for the type array */ struct geomtype_struct { char *typename; int type; int z; int m; }; /* Type array. Note that the order of this array is important in that any typename in the list must *NOT* occur within an entry before it. Otherwise if we search for "POINT" at the top of the list we would also match MULTIPOINT, for example. */ struct geomtype_struct geomtype_struct_array[] = { { "GEOMETRYCOLLECTIONZM", COLLECTIONTYPE, 1, 1 }, { "GEOMETRYCOLLECTIONZ", COLLECTIONTYPE, 1, 0 }, { "GEOMETRYCOLLECTIONM", COLLECTIONTYPE, 0, 1 }, { "GEOMETRYCOLLECTION", COLLECTIONTYPE, 0, 0 }, { "GEOMETRYZM", 0, 1, 1 }, { "GEOMETRYZ", 0, 1, 0 }, { "GEOMETRYM", 0, 0, 1 }, { "GEOMETRY", 0, 0, 0 }, { "POLYHEDRALSURFACEZM", POLYHEDRALSURFACETYPE, 1, 1 }, { "POLYHEDRALSURFACEZ", POLYHEDRALSURFACETYPE, 1, 0 }, { "POLYHEDRALSURFACEM", POLYHEDRALSURFACETYPE, 0, 1 }, { "POLYHEDRALSURFACE", POLYHEDRALSURFACETYPE, 0, 0 }, { "TINZM", TINTYPE, 1, 1 }, { "TINZ", TINTYPE, 1, 0 }, { "TINM", TINTYPE, 0, 1 }, { "TIN", TINTYPE, 0, 0 }, { "CIRCULARSTRINGZM", CIRCSTRINGTYPE, 1, 1 }, { "CIRCULARSTRINGZ", CIRCSTRINGTYPE, 1, 0 }, { "CIRCULARSTRINGM", CIRCSTRINGTYPE, 0, 1 }, { "CIRCULARSTRING", CIRCSTRINGTYPE, 0, 0 }, { "COMPOUNDCURVEZM", COMPOUNDTYPE, 1, 1 }, { "COMPOUNDCURVEZ", COMPOUNDTYPE, 1, 0 }, { "COMPOUNDCURVEM", COMPOUNDTYPE, 0, 1 }, { "COMPOUNDCURVE", COMPOUNDTYPE, 0, 0 }, { "CURVEPOLYGONZM", CURVEPOLYTYPE, 1, 1 }, { "CURVEPOLYGONZ", CURVEPOLYTYPE, 1, 0 }, { "CURVEPOLYGONM", CURVEPOLYTYPE, 0, 1 }, { "CURVEPOLYGON", CURVEPOLYTYPE, 0, 0 }, { "MULTICURVEZM", MULTICURVETYPE, 1, 1 }, { "MULTICURVEZ", MULTICURVETYPE, 1, 0 }, { "MULTICURVEM", MULTICURVETYPE, 0, 1 }, { "MULTICURVE", MULTICURVETYPE, 0, 0 }, { "MULTISURFACEZM", MULTISURFACETYPE, 1, 1 }, { "MULTISURFACEZ", MULTISURFACETYPE, 1, 0 }, { "MULTISURFACEM", MULTISURFACETYPE, 0, 1 }, { "MULTISURFACE", MULTISURFACETYPE, 0, 0 }, { "MULTILINESTRINGZM", MULTILINETYPE, 1, 1 }, { "MULTILINESTRINGZ", MULTILINETYPE, 1, 0 }, { "MULTILINESTRINGM", MULTILINETYPE, 0, 1 }, { "MULTILINESTRING", MULTILINETYPE, 0, 0 }, { "MULTIPOLYGONZM", MULTIPOLYGONTYPE, 1, 1 }, { "MULTIPOLYGONZ", MULTIPOLYGONTYPE, 1, 0 }, { "MULTIPOLYGONM", MULTIPOLYGONTYPE, 0, 1 }, { "MULTIPOLYGON", MULTIPOLYGONTYPE, 0, 0 }, { "MULTIPOINTZM", MULTIPOINTTYPE, 1, 1 }, { "MULTIPOINTZ", MULTIPOINTTYPE, 1, 0 }, { "MULTIPOINTM", MULTIPOINTTYPE, 0, 1 }, { "MULTIPOINT", MULTIPOINTTYPE, 0, 0 }, { "LINESTRINGZM", LINETYPE, 1, 1 }, { "LINESTRINGZ", LINETYPE, 1, 0 }, { "LINESTRINGM", LINETYPE, 0, 1 }, { "LINESTRING", LINETYPE, 0, 0 }, { "TRIANGLEZM", TRIANGLETYPE, 1, 1 }, { "TRIANGLEZ", TRIANGLETYPE, 1, 0 }, { "TRIANGLEM", TRIANGLETYPE, 0, 1 }, { "TRIANGLE", TRIANGLETYPE, 0, 0 }, { "POLYGONZM", POLYGONTYPE, 1, 1 }, { "POLYGONZ", POLYGONTYPE, 1, 0 }, { "POLYGONM", POLYGONTYPE, 0, 1 }, { "POLYGON", POLYGONTYPE, 0, 0 }, { "POINTZM", POINTTYPE, 1, 1 }, { "POINTZ", POINTTYPE, 1, 0 }, { "POINTM", POINTTYPE, 0, 1 }, { "POINT", POINTTYPE, 0, 0 } }; #define GEOMTYPE_STRUCT_ARRAY_LEN (sizeof geomtype_struct_array/sizeof(struct geomtype_struct)) /* * We use a very simple upper case mapper here, because the system toupper() function * is locale dependent and may have trouble mapping lower case strings to the upper * case ones we expect (see, the "Turkisk I", http://www.i18nguy.com/unicode/turkish-i18n.html) * We could also count on PgSQL sending us *lower* case inputs, as it seems to do that * regardless of the case the user provides for the type arguments. */ const char dumb_upper_map[128] = "................................................0123456789.......ABCDEFGHIJKLMNOPQRSTUVWXYZ......ABCDEFGHIJKLMNOPQRSTUVWXYZ....."; static char dump_toupper(int in) { if ( in < 0 || in > 127 ) return '.'; return dumb_upper_map[in]; } uint8_t gflags(int hasz, int hasm, int geodetic) { uint8_t flags = 0; if ( hasz ) FLAGS_SET_Z(flags, 1); if ( hasm ) FLAGS_SET_M(flags, 1); if ( geodetic ) FLAGS_SET_GEODETIC(flags, 1); return flags; } /** * Calculate type integer and dimensional flags from string input. * Case insensitive, and insensitive to spaces at front and back. * Type == 0 in the case of the string "GEOMETRY" or "GEOGRAPHY". * Return LW_SUCCESS for success. */ int geometry_type_from_string(const char *str, uint8_t *type, int *z, int *m) { char *tmpstr; int tmpstartpos, tmpendpos; int i; assert(str); assert(type); assert(z); assert(m); /* Initialize. */ *type = 0; *z = 0; *m = 0; /* Locate any leading/trailing spaces */ tmpstartpos = 0; for (i = 0; i < strlen(str); i++) { if (str[i] != ' ') { tmpstartpos = i; break; } } tmpendpos = strlen(str) - 1; for (i = strlen(str) - 1; i >= 0; i--) { if (str[i] != ' ') { tmpendpos = i; break; } } /* Copy and convert to upper case for comparison */ tmpstr = lwalloc(tmpendpos - tmpstartpos + 2); for (i = tmpstartpos; i <= tmpendpos; i++) tmpstr[i - tmpstartpos] = dump_toupper(str[i]); /* Add NULL to terminate */ tmpstr[i - tmpstartpos] = '\0'; /* Now check for the type */ for (i = 0; i < GEOMTYPE_STRUCT_ARRAY_LEN; i++) { if (!strcmp(tmpstr, geomtype_struct_array[i].typename)) { *type = geomtype_struct_array[i].type; *z = geomtype_struct_array[i].z; *m = geomtype_struct_array[i].m; lwfree(tmpstr); return LW_SUCCESS; } } lwfree(tmpstr); return LW_FAILURE; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwmpoint.c��������������������������������������������������������0000644�0000000�0000000�00000004650�11722777314�017576� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" void lwmpoint_release(LWMPOINT *lwmpoint) { lwgeom_release(lwmpoint_as_lwgeom(lwmpoint)); } LWMPOINT * lwmpoint_construct_empty(int srid, char hasz, char hasm) { LWMPOINT *ret = (LWMPOINT*)lwcollection_construct_empty(MULTIPOINTTYPE, srid, hasz, hasm); return ret; } LWMPOINT* lwmpoint_add_lwpoint(LWMPOINT *mobj, const LWPOINT *obj) { LWDEBUG(4, "Called"); return (LWMPOINT*)lwcollection_add_lwgeom((LWCOLLECTION*)mobj, (LWGEOM*)obj); } LWMPOINT * lwmpoint_construct(int srid, const POINTARRAY *pa) { int i; int hasz = ptarray_has_z(pa); int hasm = ptarray_has_m(pa); LWMPOINT *ret = (LWMPOINT*)lwcollection_construct_empty(MULTIPOINTTYPE, srid, hasz, hasm); for ( i = 0; i < pa->npoints; i++ ) { LWPOINT *lwp; POINT4D p; getPoint4d_p(pa, i, &p); lwp = lwpoint_make(srid, hasz, hasm, &p); lwmpoint_add_lwpoint(ret, lwp); } return ret; } void lwmpoint_free(LWMPOINT *mpt) { int i; if ( ! mpt ) return; if ( mpt->bbox ) lwfree(mpt->bbox); for ( i = 0; i < mpt->ngeoms; i++ ) if ( mpt->geoms && mpt->geoms[i] ) lwpoint_free(mpt->geoms[i]); if ( mpt->geoms ) lwfree(mpt->geoms); lwfree(mpt); } LWGEOM* lwmpoint_remove_repeated_points(LWMPOINT *mpoint) { uint32_t nnewgeoms; uint32_t i, j; LWGEOM **newgeoms; newgeoms = lwalloc(sizeof(LWGEOM *)*mpoint->ngeoms); nnewgeoms = 0; for (i=0; i<mpoint->ngeoms; ++i) { /* Brute force, may be optimized by building an index */ int seen=0; for (j=0; j<nnewgeoms; ++j) { if ( lwpoint_same((LWPOINT*)newgeoms[j], (LWPOINT*)mpoint->geoms[i]) ) { seen=1; break; } } if ( seen ) continue; newgeoms[nnewgeoms++] = (LWGEOM*)lwpoint_clone(mpoint->geoms[i]); } return (LWGEOM*)lwcollection_construct(mpoint->type, mpoint->srid, mpoint->bbox ? gbox_copy(mpoint->bbox) : NULL, nnewgeoms, newgeoms); } ����������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwtin.c�����������������������������������������������������������0000644�0000000�0000000�00000007032�12143577056�017056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" LWTIN* lwtin_add_lwtriangle(LWTIN *mobj, const LWTRIANGLE *obj) { return (LWTIN*)lwcollection_add_lwgeom((LWCOLLECTION*)mobj, (LWGEOM*)obj); } void lwtin_free(LWTIN *tin) { int i; if ( ! tin ) return; if ( tin->bbox ) lwfree(tin->bbox); for ( i = 0; i < tin->ngeoms; i++ ) if ( tin->geoms && tin->geoms[i] ) lwtriangle_free(tin->geoms[i]); if ( tin->geoms ) lwfree(tin->geoms); lwfree(tin); } void printLWTIN(LWTIN *tin) { int i; LWTRIANGLE *triangle; if (tin->type != TINTYPE) lwerror("printLWTIN called with something else than a TIN"); lwnotice("LWTIN {"); lwnotice(" ndims = %i", (int)FLAGS_NDIMS(tin->flags)); lwnotice(" SRID = %i", (int)tin->srid); lwnotice(" ngeoms = %i", (int)tin->ngeoms); for (i=0; i<tin->ngeoms; i++) { triangle = (LWTRIANGLE *) tin->geoms[i]; printPA(triangle->points); } lwnotice("}"); } /* * TODO rewrite all this stuff to be based on a truly topological model */ struct struct_tin_arcs { double ax, ay, az; double bx, by, bz; int cnt, face; }; typedef struct struct_tin_arcs *tin_arcs; /* We supposed that the geometry is valid we could have wrong result if not */ int lwtin_is_closed(const LWTIN *tin) { int i, j, k; int narcs, carc; int found; tin_arcs arcs; POINT4D pa, pb; LWTRIANGLE *patch; /* If surface is not 3D, it's can't be closed */ if (!FLAGS_GET_Z(tin->flags)) return 0; /* Max theorical arcs number if no one is shared ... */ narcs = 3 * tin->ngeoms; arcs = lwalloc(sizeof(struct struct_tin_arcs) * narcs); for (i=0, carc=0; i < tin->ngeoms ; i++) { patch = (LWTRIANGLE *) tin->geoms[i]; for (j=0; j < 3 ; j++) { getPoint4d_p(patch->points, j, &pa); getPoint4d_p(patch->points, j+1, &pb); /* Make sure to order the 'lower' point first */ if ( (pa.x > pb.x) || (pa.x == pb.x && pa.y > pb.y) || (pa.x == pb.x && pa.y == pb.y && pa.z > pb.z) ) { pa = pb; getPoint4d_p(patch->points, j, &pb); } for (found=0, k=0; k < carc ; k++) { if ( ( arcs[k].ax == pa.x && arcs[k].ay == pa.y && arcs[k].az == pa.z && arcs[k].bx == pb.x && arcs[k].by == pb.y && arcs[k].bz == pb.z && arcs[k].face != i) ) { arcs[k].cnt++; found = 1; /* Look like an invalid TIN anyway not a closed one */ if (arcs[k].cnt > 2) { lwfree(arcs); return 0; } } } if (!found) { arcs[carc].cnt=1; arcs[carc].face=i; arcs[carc].ax = pa.x; arcs[carc].ay = pa.y; arcs[carc].az = pa.z; arcs[carc].bx = pb.x; arcs[carc].by = pb.y; arcs[carc].bz = pb.z; carc++; /* Look like an invalid TIN anyway not a closed one */ if (carc > narcs) { lwfree(arcs); return 0; } } } } /* A TIN is closed if each edge is shared by exactly 2 faces */ for (k=0; k < carc ; k++) { if (arcs[k].cnt != 2) { lwfree(arcs); return 0; } } lwfree(arcs); /* Invalid TIN case */ if (carc < tin->ngeoms) return 0; return 1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_geos_split.c�����������������������������������������������0000644�0000000�0000000�00000030571�12236407770�021445� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_geos.c 5258 2010-02-17 21:02:49Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2009-2010 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * Split polygon by line, line by line, line by point. * Returns at most components as a collection. * First element of the collection is always the part which * remains after the cut, while the second element is the * part which has been cut out. We arbitrarely take the part * on the *right* of cut lines as the part which has been cut out. * For a line cut by a point the part which remains is the one * from start of the line to the cut point. * * * Author: Sandro Santilli <strk@keybit.net> * * Work done for Faunalia (http://www.faunalia.it) with fundings * from Regione Toscana - Sistema Informativo per il Governo * del Territorio e dell'Ambiente (RT-SIGTA). * * Thanks to the PostGIS community for sharing poly/line ideas [1] * * [1] http://trac.osgeo.org/postgis/wiki/UsersWikiSplitPolygonWithLineString * * **********************************************************************/ #include "lwgeom_geos.h" #include "liblwgeom_internal.h" #include <string.h> #include <assert.h> static LWGEOM* lwline_split_by_line(const LWLINE* lwgeom_in, const LWLINE* blade_in); static LWGEOM* lwline_split_by_point(const LWLINE* lwgeom_in, const LWPOINT* blade_in); static LWGEOM* lwline_split(const LWLINE* lwgeom_in, const LWGEOM* blade_in); static LWGEOM* lwpoly_split_by_line(const LWPOLY* lwgeom_in, const LWLINE* blade_in); static LWGEOM* lwcollection_split(const LWCOLLECTION* lwcoll_in, const LWGEOM* blade_in); static LWGEOM* lwpoly_split(const LWPOLY* lwpoly_in, const LWGEOM* blade_in); /* Initializes and uses GEOS internally */ static LWGEOM* lwline_split_by_line(const LWLINE* lwline_in, const LWLINE* blade_in) { LWGEOM** components; LWGEOM* diff; LWCOLLECTION* out; GEOSGeometry* gdiff; /* difference */ GEOSGeometry* g1; GEOSGeometry* g2; int ret; /* Possible outcomes: * * 1. The lines do not cross or overlap * -> Return a collection with single element * 2. The lines cross * -> Return a collection of all elements resulting from the split */ initGEOS(lwgeom_geos_error, lwgeom_geos_error); g1 = LWGEOM2GEOS((LWGEOM*)lwline_in); if ( ! g1 ) { lwerror("LWGEOM2GEOS: %s", lwgeom_geos_errmsg); return NULL; } g2 = LWGEOM2GEOS((LWGEOM*)blade_in); if ( ! g2 ) { GEOSGeom_destroy(g1); lwerror("LWGEOM2GEOS: %s", lwgeom_geos_errmsg); return NULL; } /* If interior intersecton is linear we can't split */ ret = GEOSRelatePattern(g1, g2, "1********"); if ( 2 == ret ) { lwerror("GEOSRelatePattern: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); return NULL; } if ( ret ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); lwerror("Splitter line has linear intersection with input"); return NULL; } gdiff = GEOSDifference(g1,g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (gdiff == NULL) { lwerror("GEOSDifference: %s", lwgeom_geos_errmsg); return NULL; } diff = GEOS2LWGEOM(gdiff, FLAGS_GET_Z(lwline_in->flags)); GEOSGeom_destroy(gdiff); if (NULL == diff) { lwerror("GEOS2LWGEOM: %s", lwgeom_geos_errmsg); return NULL; } out = lwgeom_as_lwcollection(diff); if ( ! out ) { components = lwalloc(sizeof(LWGEOM*)*1); components[0] = diff; out = lwcollection_construct(COLLECTIONTYPE, lwline_in->srid, NULL, 1, components); } else { /* Set SRID */ lwgeom_set_srid((LWGEOM*)out, lwline_in->srid); /* Force collection type */ out->type = COLLECTIONTYPE; } return (LWGEOM*)out; } static LWGEOM* lwline_split_by_point(const LWLINE* lwline_in, const LWPOINT* blade_in) { LWMLINE* out; out = lwmline_construct_empty(lwline_in->srid, FLAGS_GET_Z(lwline_in->flags), FLAGS_GET_M(lwline_in->flags)); if ( lwline_split_by_point_to(lwline_in, blade_in, out) < 2 ) { lwmline_add_lwline(out, lwline_clone(lwline_in)); } /* Turn multiline into collection */ out->type = COLLECTIONTYPE; return (LWGEOM*)out; } int lwline_split_by_point_to(const LWLINE* lwline_in, const LWPOINT* blade_in, LWMLINE* v) { double loc, dist; POINT4D pt, pt_projected; POINTARRAY* pa1; POINTARRAY* pa2; double vstol; /* vertex snap tolerance */ /* Possible outcomes: * * 1. The point is not on the line or on the boundary * -> Leave collection untouched, return 0 * 2. The point is on the boundary * -> Push 1 element on the collection: * o the original line * -> Return 1 * 3. The point is in the line * -> Push 2 elements on the collection: * o start_point - cut_point * o cut_point - last_point * -> Return 2 */ getPoint4d_p(blade_in->point, 0, &pt); loc = ptarray_locate_point(lwline_in->points, &pt, &dist, &pt_projected); /* lwnotice("Location: %g -- Distance: %g", loc, dist); */ if ( dist > 0 ) /* TODO: accept a tolerance ? */ { /* No intersection */ return 0; } if ( loc == 0 || loc == 1 ) { /* Intersection is on the boundary */ return 1; } /* There is a real intersection, let's get two substrings */ /* Compute vertex snap tolerance based on line length * TODO: take as parameter ? */ vstol = ptarray_length_2d(lwline_in->points) / 1e14; pa1 = ptarray_substring(lwline_in->points, 0, loc, vstol); pa2 = ptarray_substring(lwline_in->points, loc, 1, vstol); /* NOTE: I've seen empty pointarrays with loc != 0 and loc != 1 */ if ( pa1->npoints == 0 || pa2->npoints == 0 ) { ptarray_free(pa1); ptarray_free(pa2); /* Intersection is on the boundary */ return 1; } lwmline_add_lwline(v, lwline_construct(SRID_UNKNOWN, NULL, pa1)); lwmline_add_lwline(v, lwline_construct(SRID_UNKNOWN, NULL, pa2)); return 2; } static LWGEOM* lwline_split(const LWLINE* lwline_in, const LWGEOM* blade_in) { switch (blade_in->type) { case POINTTYPE: return lwline_split_by_point(lwline_in, (LWPOINT*)blade_in); case LINETYPE: return lwline_split_by_line(lwline_in, (LWLINE*)blade_in); default: lwerror("Splitting a Line by a %s is unsupported", lwtype_name(blade_in->type)); return NULL; } return NULL; } /* Initializes and uses GEOS internally */ static LWGEOM* lwpoly_split_by_line(const LWPOLY* lwpoly_in, const LWLINE* blade_in) { LWCOLLECTION* out; GEOSGeometry* g1; GEOSGeometry* g2; GEOSGeometry* g1_bounds; GEOSGeometry* polygons; const GEOSGeometry *vgeoms[1]; int i,n; int hasZ = FLAGS_GET_Z(lwpoly_in->flags); /* Possible outcomes: * * 1. The line does not split the polygon * -> Return a collection with single element * 2. The line does split the polygon * -> Return a collection of all elements resulting from the split */ initGEOS(lwgeom_geos_error, lwgeom_geos_error); g1 = LWGEOM2GEOS((LWGEOM*)lwpoly_in); if ( NULL == g1 ) { lwerror("LWGEOM2GEOS: %s", lwgeom_geos_errmsg); return NULL; } g1_bounds = GEOSBoundary(g1); if ( NULL == g1_bounds ) { GEOSGeom_destroy(g1); lwerror("GEOSBoundary: %s", lwgeom_geos_errmsg); return NULL; } g2 = LWGEOM2GEOS((LWGEOM*)blade_in); if ( NULL == g2 ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g1_bounds); lwerror("LWGEOM2GEOS: %s", lwgeom_geos_errmsg); return NULL; } vgeoms[0] = GEOSUnion(g1_bounds, g2); if ( NULL == vgeoms[0] ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g1_bounds); lwerror("GEOSUnion: %s", lwgeom_geos_errmsg); return NULL; } /* debugging.. lwnotice("Bounds poly: %s", lwgeom_to_ewkt(GEOS2LWGEOM(g1_bounds, hasZ))); lwnotice("Line: %s", lwgeom_to_ewkt(GEOS2LWGEOM(g2, hasZ))); lwnotice("Noded bounds: %s", lwgeom_to_ewkt(GEOS2LWGEOM(vgeoms[0], hasZ))); */ polygons = GEOSPolygonize(vgeoms, 1); if ( NULL == polygons ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g1_bounds); GEOSGeom_destroy((GEOSGeometry*)vgeoms[0]); lwerror("GEOSPolygonize: %s", lwgeom_geos_errmsg); return NULL; } #if PARANOIA_LEVEL > 0 if ( GEOSGeometryTypeId(polygons) != COLLECTIONTYPE ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g1_bounds); GEOSGeom_destroy((GEOSGeometry*)vgeoms[0]); GEOSGeom_destroy(polygons); lwerror("Unexpected return from GEOSpolygonize"); return 0; } #endif /* We should now have all polygons, just skip * the ones which are in holes of the original * geometries and return the rest in a collection */ n = GEOSGetNumGeometries(polygons); out = lwcollection_construct_empty(COLLECTIONTYPE, lwpoly_in->srid, hasZ, 0); /* Allocate space for all polys */ out->geoms = lwrealloc(out->geoms, sizeof(LWGEOM*)*n); assert(0 == out->ngeoms); for (i=0; i<n; ++i) { GEOSGeometry* pos; /* point on surface */ const GEOSGeometry* p = GEOSGetGeometryN(polygons, i); int contains; pos = GEOSPointOnSurface(p); if ( ! pos ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g1_bounds); GEOSGeom_destroy((GEOSGeometry*)vgeoms[0]); GEOSGeom_destroy(polygons); lwerror("GEOSPointOnSurface: %s", lwgeom_geos_errmsg); return NULL; } contains = GEOSContains(g1, pos); if ( 2 == contains ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g1_bounds); GEOSGeom_destroy((GEOSGeometry*)vgeoms[0]); GEOSGeom_destroy(polygons); GEOSGeom_destroy(pos); lwerror("GEOSContains: %s", lwgeom_geos_errmsg); return NULL; } GEOSGeom_destroy(pos); if ( 0 == contains ) { /* Original geometry doesn't contain * a point in this ring, must be an hole */ continue; } out->geoms[out->ngeoms++] = GEOS2LWGEOM(p, hasZ); } GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g1_bounds); GEOSGeom_destroy((GEOSGeometry*)vgeoms[0]); GEOSGeom_destroy(polygons); return (LWGEOM*)out; } static LWGEOM* lwcollection_split(const LWCOLLECTION* lwcoll_in, const LWGEOM* blade_in) { LWGEOM** split_vector=NULL; LWCOLLECTION* out; size_t split_vector_capacity; size_t split_vector_size=0; size_t i,j; split_vector_capacity=8; split_vector = lwalloc(split_vector_capacity * sizeof(LWGEOM*)); if ( ! split_vector ) { lwerror("Out of virtual memory"); return NULL; } for (i=0; i<lwcoll_in->ngeoms; ++i) { LWCOLLECTION* col; LWGEOM* split = lwgeom_split(lwcoll_in->geoms[i], blade_in); /* an exception should prevent this from ever returning NULL */ if ( ! split ) return NULL; col = lwgeom_as_lwcollection(split); /* Output, if any, will always be a collection */ assert(col); /* Reallocate split_vector if needed */ if ( split_vector_size + col->ngeoms > split_vector_capacity ) { /* NOTE: we could be smarter on reallocations here */ split_vector_capacity += col->ngeoms; split_vector = lwrealloc(split_vector, split_vector_capacity * sizeof(LWGEOM*)); if ( ! split_vector ) { lwerror("Out of virtual memory"); return NULL; } } for (j=0; j<col->ngeoms; ++j) { col->geoms[j]->srid = SRID_UNKNOWN; /* strip srid */ split_vector[split_vector_size++] = col->geoms[j]; } lwfree(col->geoms); lwfree(col); } /* Now split_vector has split_vector_size geometries */ out = lwcollection_construct(COLLECTIONTYPE, lwcoll_in->srid, NULL, split_vector_size, split_vector); return (LWGEOM*)out; } static LWGEOM* lwpoly_split(const LWPOLY* lwpoly_in, const LWGEOM* blade_in) { switch (blade_in->type) { case LINETYPE: return lwpoly_split_by_line(lwpoly_in, (LWLINE*)blade_in); default: lwerror("Splitting a Polygon by a %s is unsupported", lwtype_name(blade_in->type)); return NULL; } return NULL; } /* exported */ LWGEOM* lwgeom_split(const LWGEOM* lwgeom_in, const LWGEOM* blade_in) { switch (lwgeom_in->type) { case LINETYPE: return lwline_split((const LWLINE*)lwgeom_in, blade_in); case POLYGONTYPE: return lwpoly_split((const LWPOLY*)lwgeom_in, blade_in); case MULTIPOLYGONTYPE: case MULTILINETYPE: case COLLECTIONTYPE: return lwcollection_split((const LWCOLLECTION*)lwgeom_in, blade_in); default: lwerror("Splitting of %s geometries is unsupported", lwtype_name(lwgeom_in->type)); return NULL; } } ���������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/snprintf.c��������������������������������������������������������0000644�0000000�0000000�00000000000�11727672212�017545� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_geos.c�����������������������������������������������������0000644�0000000�0000000�00000102133�12212403325�020206� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2011-2012 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "lwgeom_geos.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" #include "lwgeom_log.h" #include <stdlib.h> LWTIN *lwtin_from_geos(const GEOSGeometry *geom, int want3d); #undef LWGEOM_PROFILE_BUILDAREA #define LWGEOM_GEOS_ERRMSG_MAXSIZE 256 char lwgeom_geos_errmsg[LWGEOM_GEOS_ERRMSG_MAXSIZE]; extern void lwgeom_geos_error(const char *fmt, ...) { va_list ap; va_start(ap, fmt); /* Call the supplied function */ if ( LWGEOM_GEOS_ERRMSG_MAXSIZE-1 < vsnprintf(lwgeom_geos_errmsg, LWGEOM_GEOS_ERRMSG_MAXSIZE-1, fmt, ap) ) { lwgeom_geos_errmsg[LWGEOM_GEOS_ERRMSG_MAXSIZE-1] = '\0'; } va_end(ap); } /* ** GEOS <==> PostGIS conversion functions ** ** Default conversion creates a GEOS point array, then iterates through the ** PostGIS points, setting each value in the GEOS array one at a time. ** */ /* Return a POINTARRAY from a GEOSCoordSeq */ POINTARRAY * ptarray_from_GEOSCoordSeq(const GEOSCoordSequence *cs, char want3d) { uint32_t dims=2; uint32_t size, i; POINTARRAY *pa; POINT4D point; LWDEBUG(2, "ptarray_fromGEOSCoordSeq called"); if ( ! GEOSCoordSeq_getSize(cs, &size) ) lwerror("Exception thrown"); LWDEBUGF(4, " GEOSCoordSeq size: %d", size); if ( want3d ) { if ( ! GEOSCoordSeq_getDimensions(cs, &dims) ) lwerror("Exception thrown"); LWDEBUGF(4, " GEOSCoordSeq dimensions: %d", dims); /* forget higher dimensions (if any) */ if ( dims > 3 ) dims = 3; } LWDEBUGF(4, " output dimensions: %d", dims); pa = ptarray_construct((dims==3), 0, size); for (i=0; i<size; i++) { GEOSCoordSeq_getX(cs, i, &(point.x)); GEOSCoordSeq_getY(cs, i, &(point.y)); if ( dims >= 3 ) GEOSCoordSeq_getZ(cs, i, &(point.z)); ptarray_set_point4d(pa,i,&point); } return pa; } /* Return an LWGEOM from a Geometry */ LWGEOM * GEOS2LWGEOM(const GEOSGeometry *geom, char want3d) { int type = GEOSGeomTypeId(geom) ; int hasZ; int SRID = GEOSGetSRID(geom); /* GEOS's 0 is equivalent to our unknown as for SRID values */ if ( SRID == 0 ) SRID = SRID_UNKNOWN; if ( want3d ) { hasZ = GEOSHasZ(geom); if ( ! hasZ ) { LWDEBUG(3, "Geometry has no Z, won't provide one"); want3d = 0; } } /* if ( GEOSisEmpty(geom) ) { return (LWGEOM*)lwcollection_construct_empty(COLLECTIONTYPE, SRID, want3d, 0); } */ switch (type) { const GEOSCoordSequence *cs; POINTARRAY *pa, **ppaa; const GEOSGeometry *g; LWGEOM **geoms; uint32_t i, ngeoms; case GEOS_POINT: LWDEBUG(4, "lwgeom_from_geometry: it's a Point"); cs = GEOSGeom_getCoordSeq(geom); if ( GEOSisEmpty(geom) ) return (LWGEOM*)lwpoint_construct_empty(SRID, want3d, 0); pa = ptarray_from_GEOSCoordSeq(cs, want3d); return (LWGEOM *)lwpoint_construct(SRID, NULL, pa); case GEOS_LINESTRING: case GEOS_LINEARRING: LWDEBUG(4, "lwgeom_from_geometry: it's a LineString or LinearRing"); if ( GEOSisEmpty(geom) ) return (LWGEOM*)lwline_construct_empty(SRID, want3d, 0); cs = GEOSGeom_getCoordSeq(geom); pa = ptarray_from_GEOSCoordSeq(cs, want3d); return (LWGEOM *)lwline_construct(SRID, NULL, pa); case GEOS_POLYGON: LWDEBUG(4, "lwgeom_from_geometry: it's a Polygon"); if ( GEOSisEmpty(geom) ) return (LWGEOM*)lwpoly_construct_empty(SRID, want3d, 0); ngeoms = GEOSGetNumInteriorRings(geom); ppaa = lwalloc(sizeof(POINTARRAY *)*(ngeoms+1)); g = GEOSGetExteriorRing(geom); cs = GEOSGeom_getCoordSeq(g); ppaa[0] = ptarray_from_GEOSCoordSeq(cs, want3d); for (i=0; i<ngeoms; i++) { g = GEOSGetInteriorRingN(geom, i); cs = GEOSGeom_getCoordSeq(g); ppaa[i+1] = ptarray_from_GEOSCoordSeq(cs, want3d); } return (LWGEOM *)lwpoly_construct(SRID, NULL, ngeoms+1, ppaa); case GEOS_MULTIPOINT: case GEOS_MULTILINESTRING: case GEOS_MULTIPOLYGON: case GEOS_GEOMETRYCOLLECTION: LWDEBUG(4, "lwgeom_from_geometry: it's a Collection or Multi"); ngeoms = GEOSGetNumGeometries(geom); geoms = NULL; if ( ngeoms ) { geoms = lwalloc(sizeof(LWGEOM *)*ngeoms); for (i=0; i<ngeoms; i++) { g = GEOSGetGeometryN(geom, i); geoms[i] = GEOS2LWGEOM(g, want3d); } } return (LWGEOM *)lwcollection_construct(type, SRID, NULL, ngeoms, geoms); default: lwerror("GEOS2LWGEOM: unknown geometry type: %d", type); return NULL; } } GEOSCoordSeq ptarray_to_GEOSCoordSeq(const POINTARRAY *); GEOSCoordSeq ptarray_to_GEOSCoordSeq(const POINTARRAY *pa) { uint32_t dims = 2; uint32_t size, i; POINT3DZ p; GEOSCoordSeq sq; if ( FLAGS_GET_Z(pa->flags) ) dims = 3; size = pa->npoints; sq = GEOSCoordSeq_create(size, dims); if ( ! sq ) lwerror("Error creating GEOS Coordinate Sequence"); for (i=0; i<size; i++) { getPoint3dz_p(pa, i, &p); LWDEBUGF(4, "Point: %g,%g,%g", p.x, p.y, p.z); #if POSTGIS_GEOS_VERSION < 33 /* Make sure we don't pass any infinite values down into GEOS */ /* GEOS 3.3+ is supposed to handle this stuff OK */ if ( isinf(p.x) || isinf(p.y) || (dims == 3 && isinf(p.z)) ) lwerror("Infinite coordinate value found in geometry."); if ( isnan(p.x) || isnan(p.y) || (dims == 3 && isnan(p.z)) ) lwerror("NaN coordinate value found in geometry."); #endif GEOSCoordSeq_setX(sq, i, p.x); GEOSCoordSeq_setY(sq, i, p.y); if ( dims == 3 ) GEOSCoordSeq_setZ(sq, i, p.z); } return sq; } GEOSGeometry * LWGEOM2GEOS(const LWGEOM *lwgeom) { GEOSCoordSeq sq; GEOSGeom g, shell; GEOSGeom *geoms = NULL; /* LWGEOM *tmp; */ uint32_t ngeoms, i; int geostype; #if LWDEBUG_LEVEL >= 4 char *wkt; #endif LWDEBUGF(4, "LWGEOM2GEOS got a %s", lwtype_name(lwgeom->type)); if (lwgeom_has_arc(lwgeom)) { LWDEBUG(3, "LWGEOM2GEOS: arced geometry found."); lwerror("Exception in LWGEOM2GEOS: curved geometry not supported."); return NULL; } switch (lwgeom->type) { LWPOINT *lwp = NULL; LWPOLY *lwpoly = NULL; LWLINE *lwl = NULL; LWCOLLECTION *lwc = NULL; #if POSTGIS_GEOS_VERSION < 33 POINTARRAY *pa = NULL; #endif case POINTTYPE: lwp = (LWPOINT *)lwgeom; if ( lwgeom_is_empty(lwgeom) ) { #if POSTGIS_GEOS_VERSION < 33 pa = ptarray_construct_empty(lwgeom_has_z(lwgeom), lwgeom_has_m(lwgeom), 2); sq = ptarray_to_GEOSCoordSeq(pa); shell = GEOSGeom_createLinearRing(sq); g = GEOSGeom_createPolygon(shell, NULL, 0); #else g = GEOSGeom_createEmptyPolygon(); #endif } else { sq = ptarray_to_GEOSCoordSeq(lwp->point); g = GEOSGeom_createPoint(sq); } if ( ! g ) { /* lwnotice("Exception in LWGEOM2GEOS"); */ return NULL; } break; case LINETYPE: lwl = (LWLINE *)lwgeom; if ( lwl->points->npoints == 1 ) { /* Duplicate point, to make geos-friendly */ lwl->points = ptarray_addPoint(lwl->points, getPoint_internal(lwl->points, 0), FLAGS_NDIMS(lwl->points->flags), lwl->points->npoints); } sq = ptarray_to_GEOSCoordSeq(lwl->points); g = GEOSGeom_createLineString(sq); if ( ! g ) { /* lwnotice("Exception in LWGEOM2GEOS"); */ return NULL; } break; case POLYGONTYPE: lwpoly = (LWPOLY *)lwgeom; if ( lwgeom_is_empty(lwgeom) ) { #if POSTGIS_GEOS_VERSION < 33 POINTARRAY *pa = ptarray_construct_empty(lwgeom_has_z(lwgeom), lwgeom_has_m(lwgeom), 2); sq = ptarray_to_GEOSCoordSeq(pa); shell = GEOSGeom_createLinearRing(sq); g = GEOSGeom_createPolygon(shell, NULL, 0); #else g = GEOSGeom_createEmptyPolygon(); #endif } else { sq = ptarray_to_GEOSCoordSeq(lwpoly->rings[0]); /* TODO: check ring for being closed and fix if not */ shell = GEOSGeom_createLinearRing(sq); if ( ! shell ) return NULL; /*lwerror("LWGEOM2GEOS: exception during polygon shell conversion"); */ ngeoms = lwpoly->nrings-1; if ( ngeoms > 0 ) geoms = malloc(sizeof(GEOSGeom)*ngeoms); for (i=1; i<lwpoly->nrings; ++i) { sq = ptarray_to_GEOSCoordSeq(lwpoly->rings[i]); geoms[i-1] = GEOSGeom_createLinearRing(sq); if ( ! geoms[i-1] ) { --i; while (i) GEOSGeom_destroy(geoms[--i]); free(geoms); GEOSGeom_destroy(shell); return NULL; } /*lwerror("LWGEOM2GEOS: exception during polygon hole conversion"); */ } g = GEOSGeom_createPolygon(shell, geoms, ngeoms); if (geoms) free(geoms); } if ( ! g ) return NULL; break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: if ( lwgeom->type == MULTIPOINTTYPE ) geostype = GEOS_MULTIPOINT; else if ( lwgeom->type == MULTILINETYPE ) geostype = GEOS_MULTILINESTRING; else if ( lwgeom->type == MULTIPOLYGONTYPE ) geostype = GEOS_MULTIPOLYGON; else geostype = GEOS_GEOMETRYCOLLECTION; lwc = (LWCOLLECTION *)lwgeom; ngeoms = lwc->ngeoms; if ( ngeoms > 0 ) geoms = malloc(sizeof(GEOSGeom)*ngeoms); for (i=0; i<ngeoms; ++i) { GEOSGeometry* g = LWGEOM2GEOS(lwc->geoms[i]); if ( ! g ) { while (i) GEOSGeom_destroy(geoms[--i]); free(geoms); return NULL; } geoms[i] = g; } g = GEOSGeom_createCollection(geostype, geoms, ngeoms); if ( geoms ) free(geoms); if ( ! g ) return NULL; break; default: lwerror("Unknown geometry type: %d - %s", lwgeom->type, lwtype_name(lwgeom->type)); return NULL; } GEOSSetSRID(g, lwgeom->srid); #if LWDEBUG_LEVEL >= 4 wkt = GEOSGeomToWKT(g); LWDEBUGF(4, "LWGEOM2GEOS: GEOSGeom: %s", wkt); free(wkt); #endif return g; } const char* lwgeom_geos_version() { const char *ver = GEOSversion(); return ver; } LWGEOM * lwgeom_normalize(const LWGEOM *geom1) { LWGEOM *result ; GEOSGeometry *g1; int is3d ; int srid ; srid = (int)(geom1->srid); is3d = FLAGS_GET_Z(geom1->flags); initGEOS(lwnotice, lwgeom_geos_error); g1 = LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL ; } if ( -1 == GEOSNormalize(g1) ) { lwerror("Error in GEOSNormalize: %s", lwgeom_geos_errmsg); return NULL; /* never get here */ } GEOSSetSRID(g1, srid); /* needed ? */ result = GEOS2LWGEOM(g1, is3d); GEOSGeom_destroy(g1); if (result == NULL) { lwerror("Error performing intersection: GEOS2LWGEOM: %s", lwgeom_geos_errmsg); return NULL ; /* never get here */ } return result ; } LWGEOM * lwgeom_intersection(const LWGEOM *geom1, const LWGEOM *geom2) { LWGEOM *result ; GEOSGeometry *g1, *g2, *g3 ; int is3d ; int srid ; /* A.Intersection(Empty) == Empty */ if ( lwgeom_is_empty(geom2) ) return lwgeom_clone(geom2); /* Empty.Intersection(A) == Empty */ if ( lwgeom_is_empty(geom1) ) return lwgeom_clone(geom1); /* ensure srids are identical */ srid = (int)(geom1->srid); error_if_srid_mismatch(srid, (int)(geom2->srid)); is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ; initGEOS(lwnotice, lwgeom_geos_error); LWDEBUG(3, "intersection() START"); g1 = LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL ; } g2 = LWGEOM2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS."); GEOSGeom_destroy(g1); return NULL ; } LWDEBUG(3, " constructed geometrys - calling geos"); LWDEBUGF(3, " g1 = %s", GEOSGeomToWKT(g1)); LWDEBUGF(3, " g2 = %s", GEOSGeomToWKT(g2)); /*LWDEBUGF(3, "g2 is valid = %i",GEOSisvalid(g2)); */ /*LWDEBUGF(3, "g1 is valid = %i",GEOSisvalid(g1)); */ g3 = GEOSIntersection(g1,g2); LWDEBUG(3, " intersection finished"); if (g3 == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); lwerror("Error performing intersection: %s", lwgeom_geos_errmsg); return NULL; /* never get here */ } LWDEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ; GEOSSetSRID(g3, srid); result = GEOS2LWGEOM(g3, is3d); if (result == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); lwerror("Error performing intersection: GEOS2LWGEOM: %s", lwgeom_geos_errmsg); return NULL ; /* never get here */ } GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); return result ; } LWGEOM * lwgeom_difference(const LWGEOM *geom1, const LWGEOM *geom2) { GEOSGeometry *g1, *g2, *g3; LWGEOM *result; int is3d; int srid; /* A.Difference(Empty) == A */ if ( lwgeom_is_empty(geom2) ) return lwgeom_clone(geom1); /* Empty.Intersection(A) == Empty */ if ( lwgeom_is_empty(geom1) ) return lwgeom_clone(geom1); /* ensure srids are identical */ srid = (int)(geom1->srid); error_if_srid_mismatch(srid, (int)(geom2->srid)); is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ; initGEOS(lwnotice, lwgeom_geos_error); g1 = LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } g2 = LWGEOM2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { GEOSGeom_destroy(g1); lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } g3 = GEOSDifference(g1,g2); if (g3 == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); lwerror("GEOSDifference: %s", lwgeom_geos_errmsg); return NULL ; /* never get here */ } LWDEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ; GEOSSetSRID(g3, srid); result = GEOS2LWGEOM(g3, is3d); if (result == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); lwerror("Error performing difference: GEOS2LWGEOM: %s", lwgeom_geos_errmsg); return NULL; /* never get here */ } GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); /* compressType(result); */ return result; } LWGEOM * lwgeom_symdifference(const LWGEOM* geom1, const LWGEOM* geom2) { GEOSGeometry *g1, *g2, *g3; LWGEOM *result; int is3d; int srid; /* A.SymDifference(Empty) == A */ if ( lwgeom_is_empty(geom2) ) return lwgeom_clone(geom1); /* Empty.DymDifference(B) == B */ if ( lwgeom_is_empty(geom1) ) return lwgeom_clone(geom2); /* ensure srids are identical */ srid = (int)(geom1->srid); error_if_srid_mismatch(srid, (int)(geom2->srid)); is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ; initGEOS(lwnotice, lwgeom_geos_error); g1 = LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } g2 = LWGEOM2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); return NULL; } g3 = GEOSSymDifference(g1,g2); if (g3 == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); lwerror("GEOSSymDifference: %s", lwgeom_geos_errmsg); return NULL; /*never get here */ } LWDEBUGF(3, "result: %s", GEOSGeomToWKT(g3)); GEOSSetSRID(g3, srid); result = GEOS2LWGEOM(g3, is3d); if (result == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); lwerror("GEOS symdifference() threw an error (result postgis geometry formation)!"); return NULL ; /*never get here */ } GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); return result; } LWGEOM* lwgeom_union(const LWGEOM *geom1, const LWGEOM *geom2) { int is3d; int srid; GEOSGeometry *g1, *g2, *g3; LWGEOM *result; LWDEBUG(2, "in geomunion"); /* A.Union(empty) == A */ if ( lwgeom_is_empty(geom1) ) return lwgeom_clone(geom2); /* B.Union(empty) == B */ if ( lwgeom_is_empty(geom2) ) return lwgeom_clone(geom1); /* ensure srids are identical */ srid = (int)(geom1->srid); error_if_srid_mismatch(srid, (int)(geom2->srid)); is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ; initGEOS(lwnotice, lwgeom_geos_error); g1 = LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } g2 = LWGEOM2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { GEOSGeom_destroy(g1); lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } LWDEBUGF(3, "g1=%s", GEOSGeomToWKT(g1)); LWDEBUGF(3, "g2=%s", GEOSGeomToWKT(g2)); g3 = GEOSUnion(g1,g2); LWDEBUGF(3, "g3=%s", GEOSGeomToWKT(g3)); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (g3 == NULL) { lwerror("GEOSUnion: %s", lwgeom_geos_errmsg); return NULL; /* never get here */ } GEOSSetSRID(g3, srid); result = GEOS2LWGEOM(g3, is3d); GEOSGeom_destroy(g3); if (result == NULL) { lwerror("Error performing union: GEOS2LWGEOM: %s", lwgeom_geos_errmsg); return NULL; /*never get here */ } return result; } /* ------------ BuildArea stuff ---------------------------------------------------------------------{ */ typedef struct Face_t { const GEOSGeometry* geom; GEOSGeometry* env; double envarea; struct Face_t* parent; /* if this face is an hole of another one, or NULL */ } Face; static Face* newFace(const GEOSGeometry* g); static void delFace(Face* f); static unsigned int countParens(const Face* f); static void findFaceHoles(Face** faces, int nfaces); static Face* newFace(const GEOSGeometry* g) { Face* f = lwalloc(sizeof(Face)); f->geom = g; f->env = GEOSEnvelope(f->geom); GEOSArea(f->env, &f->envarea); f->parent = NULL; /* lwnotice("Built Face with area %g and %d holes", f->envarea, GEOSGetNumInteriorRings(f->geom)); */ return f; } static unsigned int countParens(const Face* f) { unsigned int pcount = 0; while ( f->parent ) { ++pcount; f = f->parent; } return pcount; } /* Destroy the face and release memory associated with it */ static void delFace(Face* f) { GEOSGeom_destroy(f->env); lwfree(f); } static int compare_by_envarea(const void* g1, const void* g2) { Face* f1 = *(Face**)g1; Face* f2 = *(Face**)g2; double n1 = f1->envarea; double n2 = f2->envarea; if ( n1 < n2 ) return 1; if ( n1 > n2 ) return -1; return 0; } /* Find holes of each face */ static void findFaceHoles(Face** faces, int nfaces) { int i, j, h; /* We sort by envelope area so that we know holes are only * after their shells */ qsort(faces, nfaces, sizeof(Face*), compare_by_envarea); for (i=0; i<nfaces; ++i) { Face* f = faces[i]; int nholes = GEOSGetNumInteriorRings(f->geom); LWDEBUGF(2, "Scanning face %d with env area %g and %d holes", i, f->envarea, nholes); for (h=0; h<nholes; ++h) { const GEOSGeometry *hole = GEOSGetInteriorRingN(f->geom, h); LWDEBUGF(2, "Looking for hole %d/%d of face %d among %d other faces", h+1, nholes, i, nfaces-i-1); for (j=i+1; j<nfaces; ++j) { const GEOSGeometry *f2er; Face* f2 = faces[j]; if ( f2->parent ) continue; /* hole already assigned */ f2er = GEOSGetExteriorRing(f2->geom); /* TODO: can be optimized as the ring would have the * same vertices, possibly in different order. * maybe comparing number of points could already be * useful. */ if ( GEOSEquals(f2er, hole) ) { LWDEBUGF(2, "Hole %d/%d of face %d is face %d", h+1, nholes, i, j); f2->parent = f; break; } } } } } static GEOSGeometry* collectFacesWithEvenAncestors(Face** faces, int nfaces) { GEOSGeometry **geoms = lwalloc(sizeof(GEOSGeometry*)*nfaces); GEOSGeometry *ret; unsigned int ngeoms = 0; int i; for (i=0; i<nfaces; ++i) { Face *f = faces[i]; if ( countParens(f) % 2 ) continue; /* we skip odd parents geoms */ geoms[ngeoms++] = GEOSGeom_clone(f->geom); } ret = GEOSGeom_createCollection(GEOS_MULTIPOLYGON, geoms, ngeoms); lwfree(geoms); return ret; } GEOSGeometry* LWGEOM_GEOS_buildArea(const GEOSGeometry* geom_in) { GEOSGeometry *tmp; GEOSGeometry *geos_result, *shp; GEOSGeometry const *vgeoms[1]; uint32_t i, ngeoms; int srid = GEOSGetSRID(geom_in); Face ** geoms; vgeoms[0] = geom_in; #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Polygonizing"); #endif geos_result = GEOSPolygonize(vgeoms, 1); LWDEBUGF(3, "GEOSpolygonize returned @ %p", geos_result); /* Null return from GEOSpolygonize (an exception) */ if ( ! geos_result ) return 0; /* * We should now have a collection */ #if PARANOIA_LEVEL > 0 if ( GEOSGeometryTypeId(geos_result) != COLLECTIONTYPE ) { GEOSGeom_destroy(geos_result); lwerror("Unexpected return from GEOSpolygonize"); return 0; } #endif ngeoms = GEOSGetNumGeometries(geos_result); #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Num geometries from polygonizer: %d", ngeoms); #endif LWDEBUGF(3, "GEOSpolygonize: ngeoms in polygonize output: %d", ngeoms); LWDEBUGF(3, "GEOSpolygonize: polygonized:%s", lwgeom_to_ewkt(GEOS2LWGEOM(geos_result, 0))); /* * No geometries in collection, early out */ if ( ngeoms == 0 ) { GEOSSetSRID(geos_result, srid); return geos_result; } /* * Return first geometry if we only have one in collection, * to avoid the unnecessary Geometry clone below. */ if ( ngeoms == 1 ) { tmp = (GEOSGeometry *)GEOSGetGeometryN(geos_result, 0); if ( ! tmp ) { GEOSGeom_destroy(geos_result); return 0; /* exception */ } shp = GEOSGeom_clone(tmp); GEOSGeom_destroy(geos_result); /* only safe after the clone above */ GEOSSetSRID(shp, srid); return shp; } LWDEBUGF(2, "Polygonize returned %d geoms", ngeoms); /* * Polygonizer returns a polygon for each face in the built topology. * * This means that for any face with holes we'll have other faces * representing each hole. We can imagine a parent-child relationship * between these faces. * * In order to maximize the number of visible rings in output we * only use those faces which have an even number of parents. * * Example: * * +---------------+ * | L0 | L0 has no parents * | +---------+ | * | | L1 | | L1 is an hole of L0 * | | +---+ | | * | | |L2 | | | L2 is an hole of L1 (which is an hole of L0) * | | | | | | * | | +---+ | | * | +---------+ | * | | * +---------------+ * * See http://trac.osgeo.org/postgis/ticket/1806 * */ #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Preparing face structures"); #endif /* Prepare face structures for later analysis */ geoms = lwalloc(sizeof(Face**)*ngeoms); for (i=0; i<ngeoms; ++i) geoms[i] = newFace(GEOSGetGeometryN(geos_result, i)); #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Finding face holes"); #endif /* Find faces representing other faces holes */ findFaceHoles(geoms, ngeoms); #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Colletting even ancestor faces"); #endif /* Build a MultiPolygon composed only by faces with an * even number of ancestors */ tmp = collectFacesWithEvenAncestors(geoms, ngeoms); #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Cleaning up"); #endif /* Cleanup face structures */ for (i=0; i<ngeoms; ++i) delFace(geoms[i]); lwfree(geoms); /* Faces referenced memory owned by geos_result. * It is safe to destroy geos_result after deleting them. */ GEOSGeom_destroy(geos_result); #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Self-unioning"); #endif /* Run a single overlay operation to dissolve shared edges */ shp = GEOSUnionCascaded(tmp); if ( ! shp ) { GEOSGeom_destroy(tmp); return 0; /* exception */ } #ifdef LWGEOM_PROFILE_BUILDAREA lwnotice("Final cleanup"); #endif GEOSGeom_destroy(tmp); GEOSSetSRID(shp, srid); return shp; } LWGEOM* lwgeom_buildarea(const LWGEOM *geom) { GEOSGeometry* geos_in; GEOSGeometry* geos_out; LWGEOM* geom_out; int SRID = (int)(geom->srid); int is3d = FLAGS_GET_Z(geom->flags); /* Can't build an area from an empty! */ if ( lwgeom_is_empty(geom) ) { return (LWGEOM*)lwpoly_construct_empty(SRID, is3d, 0); } LWDEBUG(3, "buildarea called"); LWDEBUGF(3, "ST_BuildArea got geom @ %p", geom); initGEOS(lwnotice, lwgeom_geos_error); geos_in = LWGEOM2GEOS(geom); if ( 0 == geos_in ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } geos_out = LWGEOM_GEOS_buildArea(geos_in); GEOSGeom_destroy(geos_in); if ( ! geos_out ) /* exception thrown.. */ { lwerror("LWGEOM_GEOS_buildArea: %s", lwgeom_geos_errmsg); return NULL; } /* If no geometries are in result collection, return NULL */ if ( GEOSGetNumGeometries(geos_out) == 0 ) { GEOSGeom_destroy(geos_out); return NULL; } geom_out = GEOS2LWGEOM(geos_out, is3d); GEOSGeom_destroy(geos_out); #if PARANOIA_LEVEL > 0 if ( geom_out == NULL ) { lwerror("serialization error"); return NULL; } #endif return geom_out; } /* ------------ end of BuildArea stuff ---------------------------------------------------------------------} */ LWGEOM* lwgeom_geos_noop(const LWGEOM* geom_in) { GEOSGeometry *geosgeom; LWGEOM* geom_out; int is3d = FLAGS_GET_Z(geom_in->flags); initGEOS(lwnotice, lwgeom_geos_error); geosgeom = LWGEOM2GEOS(geom_in); if ( ! geosgeom ) { lwerror("Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } geom_out = GEOS2LWGEOM(geosgeom, is3d); GEOSGeom_destroy(geosgeom); if ( ! geom_out ) { lwerror("GEOS Geometry could not be converted to LWGEOM: %s", lwgeom_geos_errmsg); } return geom_out; } LWGEOM* lwgeom_snap(const LWGEOM* geom1, const LWGEOM* geom2, double tolerance) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this lwgeom library " "was compiled against (%d) doesn't support " "'Snap' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); return NULL; #else /* POSTGIS_GEOS_VERSION >= 33 */ int srid, is3d; GEOSGeometry *g1, *g2, *g3; LWGEOM* out; srid = geom1->srid; error_if_srid_mismatch(srid, (int)(geom2->srid)); is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ; initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } g2 = (GEOSGeometry *)LWGEOM2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); return NULL; } g3 = GEOSSnap(g1, g2, tolerance); if (g3 == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); lwerror("GEOSSnap: %s", lwgeom_geos_errmsg); return NULL; } GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSSetSRID(g3, srid); out = GEOS2LWGEOM(g3, is3d); if (out == NULL) { GEOSGeom_destroy(g3); lwerror("GEOSSnap() threw an error (result LWGEOM geometry formation)!"); return NULL; } GEOSGeom_destroy(g3); return out; #endif /* POSTGIS_GEOS_VERSION >= 33 */ } LWGEOM* lwgeom_sharedpaths(const LWGEOM* geom1, const LWGEOM* geom2) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this postgis binary " "was compiled against (%d) doesn't support " "'SharedPaths' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); return NULL; #else /* POSTGIS_GEOS_VERSION >= 33 */ GEOSGeometry *g1, *g2, *g3; LWGEOM *out; int is3d, srid; srid = geom1->srid; error_if_srid_mismatch(srid, (int)(geom2->srid)); is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ; initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)LWGEOM2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } g2 = (GEOSGeometry *)LWGEOM2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); return NULL; } g3 = GEOSSharedPaths(g1,g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (g3 == NULL) { lwerror("GEOSSharedPaths: %s", lwgeom_geos_errmsg); return NULL; } GEOSSetSRID(g3, srid); out = GEOS2LWGEOM(g3, is3d); GEOSGeom_destroy(g3); if (out == NULL) { lwerror("GEOS2LWGEOM threw an error"); return NULL; } return out; #endif /* POSTGIS_GEOS_VERSION >= 33 */ } LWGEOM* lwgeom_offsetcurve(const LWLINE *lwline, double size, int quadsegs, int joinStyle, double mitreLimit) { #if POSTGIS_GEOS_VERSION < 32 lwerror("lwgeom_offsetcurve: GEOS 3.2 or higher required"); #else GEOSGeometry *g1, *g3; LWGEOM *lwgeom_result; LWGEOM *lwgeom_in = lwline_as_lwgeom(lwline); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)LWGEOM2GEOS(lwgeom_in); if ( ! g1 ) { lwerror("lwgeom_offsetcurve: Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } #if POSTGIS_GEOS_VERSION < 33 /* Size is always positive for GEOSSingleSidedBuffer, and a flag determines left/right */ g3 = GEOSSingleSidedBuffer(g1, size < 0 ? -size : size, quadsegs, joinStyle, mitreLimit, size < 0 ? 0 : 1); #else g3 = GEOSOffsetCurve(g1, size, quadsegs, joinStyle, mitreLimit); #endif /* Don't need input geometry anymore */ GEOSGeom_destroy(g1); if (g3 == NULL) { lwerror("GEOSOffsetCurve: %s", lwgeom_geos_errmsg); return NULL; } LWDEBUGF(3, "result: %s", GEOSGeomToWKT(g3)); GEOSSetSRID(g3, lwgeom_get_srid(lwgeom_in)); lwgeom_result = GEOS2LWGEOM(g3, lwgeom_has_z(lwgeom_in)); GEOSGeom_destroy(g3); if (lwgeom_result == NULL) { lwerror("lwgeom_offsetcurve: GEOS2LWGEOM returned null"); return NULL; } return lwgeom_result; #endif /* POSTGIS_GEOS_VERSION < 32 */ } LWTIN *lwtin_from_geos(const GEOSGeometry *geom, int want3d) { int type = GEOSGeomTypeId(geom); int hasZ; int SRID = GEOSGetSRID(geom); /* GEOS's 0 is equivalent to our unknown as for SRID values */ if ( SRID == 0 ) SRID = SRID_UNKNOWN; if ( want3d ) { hasZ = GEOSHasZ(geom); if ( ! hasZ ) { LWDEBUG(3, "Geometry has no Z, won't provide one"); want3d = 0; } } switch (type) { LWTRIANGLE **geoms; uint32_t i, ngeoms; case GEOS_GEOMETRYCOLLECTION: LWDEBUG(4, "lwgeom_from_geometry: it's a Collection or Multi"); ngeoms = GEOSGetNumGeometries(geom); geoms = NULL; if ( ngeoms ) { geoms = lwalloc(ngeoms * sizeof *geoms); if (!geoms) { lwerror("lwtin_from_geos: can't allocate geoms"); return NULL; } for (i=0; i<ngeoms; i++) { const GEOSGeometry *poly, *ring; const GEOSCoordSequence *cs; POINTARRAY *pa; poly = GEOSGetGeometryN(geom, i); ring = GEOSGetExteriorRing(poly); cs = GEOSGeom_getCoordSeq(ring); pa = ptarray_from_GEOSCoordSeq(cs, want3d); geoms[i] = lwtriangle_construct(SRID, NULL, pa); } } return (LWTIN *)lwcollection_construct(TINTYPE, SRID, NULL, ngeoms, (LWGEOM **)geoms); case GEOS_POLYGON: case GEOS_MULTIPOINT: case GEOS_MULTILINESTRING: case GEOS_MULTIPOLYGON: case GEOS_LINESTRING: case GEOS_LINEARRING: case GEOS_POINT: lwerror("lwtin_from_geos: invalid geometry type for tin: %d", type); break; default: lwerror("GEOS2LWGEOM: unknown geometry type: %d", type); return NULL; } /* shouldn't get here */ return NULL; } /* * output = 1 for edges, 2 for TIN, 0 for polygons */ LWGEOM* lwgeom_delaunay_triangulation(const LWGEOM *lwgeom_in, double tolerance, int output) { #if POSTGIS_GEOS_VERSION < 34 lwerror("lwgeom_delaunay_triangulation: GEOS 3.4 or higher required"); return NULL; #else GEOSGeometry *g1, *g3; LWGEOM *lwgeom_result; if (output < 0 || output > 2) { lwerror("lwgeom_delaunay_triangulation: invalid output type specified %d", output); return NULL; } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)LWGEOM2GEOS(lwgeom_in); if ( ! g1 ) { lwerror("lwgeom_delaunay_triangulation: Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); return NULL; } /* if output != 1 we want polys */ g3 = GEOSDelaunayTriangulation(g1, tolerance, output == 1); /* Don't need input geometry anymore */ GEOSGeom_destroy(g1); if (g3 == NULL) { lwerror("GEOSDelaunayTriangulation: %s", lwgeom_geos_errmsg); return NULL; } /* LWDEBUGF(3, "result: %s", GEOSGeomToWKT(g3)); */ GEOSSetSRID(g3, lwgeom_get_srid(lwgeom_in)); if (output == 2) { lwgeom_result = (LWGEOM *)lwtin_from_geos(g3, lwgeom_has_z(lwgeom_in)); } else { lwgeom_result = GEOS2LWGEOM(g3, lwgeom_has_z(lwgeom_in)); } GEOSGeom_destroy(g3); if (lwgeom_result == NULL) { if (output != 2) { lwerror("lwgeom_delaunay_triangulation: GEOS2LWGEOM returned null"); } else { lwerror("lwgeom_delaunay_triangulation: lwtin_from_geos returned null"); } return NULL; } return lwgeom_result; #endif /* POSTGIS_GEOS_VERSION < 34 */ } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwpoly.c����������������������������������������������������������0000644�0000000�0000000�00000025235�12062320470�017236� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* basic LWPOLY manipulation */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" #define CHECK_POLY_RINGS_ZM 1 /* construct a new LWPOLY. arrays (points/points per ring) will NOT be copied * use SRID=SRID_UNKNOWN for unknown SRID (will have 8bit type's S = 0) */ LWPOLY* lwpoly_construct(int srid, GBOX *bbox, uint32_t nrings, POINTARRAY **points) { LWPOLY *result; int hasz, hasm; #ifdef CHECK_POLY_RINGS_ZM char zm; uint32_t i; #endif if ( nrings < 1 ) lwerror("lwpoly_construct: need at least 1 ring"); hasz = FLAGS_GET_Z(points[0]->flags); hasm = FLAGS_GET_M(points[0]->flags); #ifdef CHECK_POLY_RINGS_ZM zm = FLAGS_GET_ZM(points[0]->flags); for (i=1; i<nrings; i++) { if ( zm != FLAGS_GET_ZM(points[i]->flags) ) lwerror("lwpoly_construct: mixed dimensioned rings"); } #endif result = (LWPOLY*) lwalloc(sizeof(LWPOLY)); result->type = POLYGONTYPE; result->flags = gflags(hasz, hasm, 0); FLAGS_SET_BBOX(result->flags, bbox?1:0); result->srid = srid; result->nrings = nrings; result->maxrings = nrings; result->rings = points; result->bbox = bbox; return result; } LWPOLY* lwpoly_construct_empty(int srid, char hasz, char hasm) { LWPOLY *result = lwalloc(sizeof(LWPOLY)); result->type = POLYGONTYPE; result->flags = gflags(hasz,hasm,0); result->srid = srid; result->nrings = 0; result->maxrings = 1; /* Allocate room for ring, just in case. */ result->rings = lwalloc(result->maxrings * sizeof(POINTARRAY*)); result->bbox = NULL; return result; } void lwpoly_free(LWPOLY *poly) { int t; if( ! poly ) return; if ( poly->bbox ) lwfree(poly->bbox); for (t=0; t<poly->nrings; t++) { if ( poly->rings[t] ) ptarray_free(poly->rings[t]); } if ( poly->rings ) lwfree(poly->rings); lwfree(poly); } void printLWPOLY(LWPOLY *poly) { int t; lwnotice("LWPOLY {"); lwnotice(" ndims = %i", (int)FLAGS_NDIMS(poly->flags)); lwnotice(" SRID = %i", (int)poly->srid); lwnotice(" nrings = %i", (int)poly->nrings); for (t=0; t<poly->nrings; t++) { lwnotice(" RING # %i :",t); printPA(poly->rings[t]); } lwnotice("}"); } /* @brief Clone LWLINE object. Serialized point lists are not copied. * * @see ptarray_clone */ LWPOLY * lwpoly_clone(const LWPOLY *g) { int i; LWPOLY *ret = lwalloc(sizeof(LWPOLY)); memcpy(ret, g, sizeof(LWPOLY)); ret->rings = lwalloc(sizeof(POINTARRAY *)*g->nrings); for ( i = 0; i < g->nrings; i++ ) { ret->rings[i] = ptarray_clone(g->rings[i]); } if ( g->bbox ) ret->bbox = gbox_copy(g->bbox); return ret; } /* Deep clone LWPOLY object. POINTARRAY are copied, as is ring array */ LWPOLY * lwpoly_clone_deep(const LWPOLY *g) { int i; LWPOLY *ret = lwalloc(sizeof(LWPOLY)); memcpy(ret, g, sizeof(LWPOLY)); if ( g->bbox ) ret->bbox = gbox_copy(g->bbox); ret->rings = lwalloc(sizeof(POINTARRAY *)*g->nrings); for ( i = 0; i < ret->nrings; i++ ) { ret->rings[i] = ptarray_clone_deep(g->rings[i]); } FLAGS_SET_READONLY(ret->flags,0); return ret; } /** * Add a ring to a polygon. Point array will be referenced, not copied. */ int lwpoly_add_ring(LWPOLY *poly, POINTARRAY *pa) { if( ! poly || ! pa ) return LW_FAILURE; /* We have used up our storage, add some more. */ if( poly->nrings >= poly->maxrings ) { int new_maxrings = 2 * (poly->nrings + 1); poly->rings = lwrealloc(poly->rings, new_maxrings * sizeof(POINTARRAY*)); } /* Add the new ring entry. */ poly->rings[poly->nrings] = pa; poly->nrings++; return LW_SUCCESS; } void lwpoly_force_clockwise(LWPOLY *poly) { int i; /* No-op empties */ if ( lwpoly_is_empty(poly) ) return; /* External ring */ if ( ptarray_isccw(poly->rings[0]) ) ptarray_reverse(poly->rings[0]); /* Internal rings */ for (i=1; i<poly->nrings; i++) if ( ! ptarray_isccw(poly->rings[i]) ) ptarray_reverse(poly->rings[i]); } void lwpoly_release(LWPOLY *lwpoly) { lwgeom_release(lwpoly_as_lwgeom(lwpoly)); } void lwpoly_reverse(LWPOLY *poly) { int i; if ( lwpoly_is_empty(poly) ) return; for (i=0; i<poly->nrings; i++) ptarray_reverse(poly->rings[i]); } LWPOLY * lwpoly_segmentize2d(LWPOLY *poly, double dist) { POINTARRAY **newrings; uint32_t i; newrings = lwalloc(sizeof(POINTARRAY *)*poly->nrings); for (i=0; i<poly->nrings; i++) { newrings[i] = ptarray_segmentize2d(poly->rings[i], dist); } return lwpoly_construct(poly->srid, NULL, poly->nrings, newrings); } /* * check coordinate equality * ring and coordinate order is considered */ char lwpoly_same(const LWPOLY *p1, const LWPOLY *p2) { uint32_t i; if ( p1->nrings != p2->nrings ) return 0; for (i=0; i<p1->nrings; i++) { if ( ! ptarray_same(p1->rings[i], p2->rings[i]) ) return 0; } return 1; } /* * Construct a polygon from a LWLINE being * the shell and an array of LWLINE (possibly NULL) being holes. * Pointarrays from intput geoms are cloned. * SRID must be the same for each input line. * Input lines must have at least 4 points, and be closed. */ LWPOLY * lwpoly_from_lwlines(const LWLINE *shell, uint32_t nholes, const LWLINE **holes) { uint32_t nrings; POINTARRAY **rings = lwalloc((nholes+1)*sizeof(POINTARRAY *)); int srid = shell->srid; LWPOLY *ret; if ( shell->points->npoints < 4 ) lwerror("lwpoly_from_lwlines: shell must have at least 4 points"); if ( ! ptarray_is_closed_2d(shell->points) ) lwerror("lwpoly_from_lwlines: shell must be closed"); rings[0] = ptarray_clone_deep(shell->points); for (nrings=1; nrings<=nholes; nrings++) { const LWLINE *hole = holes[nrings-1]; if ( hole->srid != srid ) lwerror("lwpoly_from_lwlines: mixed SRIDs in input lines"); if ( hole->points->npoints < 4 ) lwerror("lwpoly_from_lwlines: holes must have at least 4 points"); if ( ! ptarray_is_closed_2d(hole->points) ) lwerror("lwpoly_from_lwlines: holes must be closed"); rings[nrings] = ptarray_clone_deep(hole->points); } ret = lwpoly_construct(srid, NULL, nrings, rings); return ret; } LWGEOM* lwpoly_remove_repeated_points(LWPOLY *poly) { uint32_t i; POINTARRAY **newrings; newrings = lwalloc(sizeof(POINTARRAY *)*poly->nrings); for (i=0; i<poly->nrings; i++) { newrings[i] = ptarray_remove_repeated_points(poly->rings[i]); } return (LWGEOM*)lwpoly_construct(poly->srid, poly->bbox ? gbox_copy(poly->bbox) : NULL, poly->nrings, newrings); } LWPOLY* lwpoly_force_dims(const LWPOLY *poly, int hasz, int hasm) { LWPOLY *polyout; /* Return 2D empty */ if( lwpoly_is_empty(poly) ) { polyout = lwpoly_construct_empty(poly->srid, hasz, hasm); } else { POINTARRAY **rings = NULL; int i; rings = lwalloc(sizeof(POINTARRAY*) * poly->nrings); for( i = 0; i < poly->nrings; i++ ) { rings[i] = ptarray_force_dims(poly->rings[i], hasz, hasm); } polyout = lwpoly_construct(poly->srid, NULL, poly->nrings, rings); } polyout->type = poly->type; return polyout; } int lwpoly_is_empty(const LWPOLY *poly) { if ( (poly->nrings < 1) || (!poly->rings) || (!poly->rings[0]) || (poly->rings[0]->npoints < 1) ) return LW_TRUE; return LW_FALSE; } int lwpoly_count_vertices(LWPOLY *poly) { int i = 0; int v = 0; /* vertices */ assert(poly); for ( i = 0; i < poly->nrings; i ++ ) { v += poly->rings[i]->npoints; } return v; } LWPOLY* lwpoly_simplify(const LWPOLY *ipoly, double dist) { int i; LWPOLY *opoly = lwpoly_construct_empty(ipoly->srid, FLAGS_GET_Z(ipoly->flags), FLAGS_GET_M(ipoly->flags)); LWDEBUGF(2, "simplify_polygon3d: simplifying polygon with %d rings", ipoly->nrings); if( lwpoly_is_empty(ipoly) ) return opoly; /* should we return NULL instead ? */ for (i = 0; i < ipoly->nrings; i++) { static const int minvertices = 0; /* TODO: allow setting this */ POINTARRAY *opts = ptarray_simplify(ipoly->rings[i], dist, minvertices); LWDEBUGF(3, "ring%d simplified from %d to %d points", i, ipoly->rings[i]->npoints, opts->npoints); /* Less points than are needed to form a closed ring, we can't use this */ if ( opts->npoints < 4 ) { LWDEBUGF(3, "ring%d skipped (% pts)", i, opts->npoints); ptarray_free(opts); if ( i ) continue; else break; /* Don't scan holes if shell is collapsed */ } /* Add ring to simplified polygon */ if( lwpoly_add_ring(opoly, opts) == LW_FAILURE ) return NULL; } LWDEBUGF(3, "simplified polygon with %d rings", ipoly->nrings); opoly->type = ipoly->type; if( lwpoly_is_empty(opoly) ) return NULL; return opoly; } /** * Find the area of the outer ring - sum (area of inner rings). */ double lwpoly_area(const LWPOLY *poly) { double poly_area = 0.0; int i; if ( ! poly ) lwerror("lwpoly_area called with null polygon pointer!"); for ( i=0; i < poly->nrings; i++ ) { POINTARRAY *ring = poly->rings[i]; double ringarea = 0.0; /* Empty or messed-up ring. */ if ( ring->npoints < 3 ) continue; ringarea = fabs(ptarray_signed_area(ring)); if ( i == 0 ) /* Outer ring, positive area! */ poly_area += ringarea; else /* Inner ring, negative area! */ poly_area -= ringarea; } return poly_area; } /** * Compute the sum of polygon rings length. * Could use a more numerically stable calculator... */ double lwpoly_perimeter(const LWPOLY *poly) { double result=0.0; int i; LWDEBUGF(2, "in lwgeom_polygon_perimeter (%d rings)", poly->nrings); for (i=0; i<poly->nrings; i++) result += ptarray_length(poly->rings[i]); return result; } /** * Compute the sum of polygon rings length (forcing 2d computation). * Could use a more numerically stable calculator... */ double lwpoly_perimeter_2d(const LWPOLY *poly) { double result=0.0; int i; LWDEBUGF(2, "in lwgeom_polygon_perimeter (%d rings)", poly->nrings); for (i=0; i<poly->nrings; i++) result += ptarray_length_2d(poly->rings[i]); return result; } int lwpoly_is_closed(const LWPOLY *poly) { int i = 0; if ( poly->nrings == 0 ) return LW_TRUE; for ( i = 0; i < poly->nrings; i++ ) { if (FLAGS_GET_Z(poly->flags)) { if ( ! ptarray_is_closed_3d(poly->rings[i]) ) return LW_FALSE; } else { if ( ! ptarray_is_closed_2d(poly->rings[i]) ) return LW_FALSE; } } return LW_TRUE; } int lwpoly_startpoint(const LWPOLY* poly, POINT4D* pt) { if ( poly->nrings < 1 ) return LW_FAILURE; return ptarray_startpoint(poly->rings[0], pt); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwspheroid.c������������������������������������������������������0000644�0000000�0000000�00000042254�11766736215�020112� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright (C) 2009 David Skea <David.Skea@gov.bc.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeodetic.h" #include "lwgeom_log.h" /** * Initialize spheroid object based on major and minor axis */ void spheroid_init(SPHEROID *s, double a, double b) { s->a = a; s->b = b; s->f = (a - b) / a; s->e_sq = (a*a - b*b)/(a*a); s->radius = (2.0 * a + b ) / 3.0; } static double spheroid_mu2(double alpha, const SPHEROID *s) { double b2 = POW2(s->b); return POW2(cos(alpha)) * (POW2(s->a) - b2) / b2; } static double spheroid_big_a(double u2) { return 1.0 + (u2 / 16384.0) * (4096.0 + u2 * (-768.0 + u2 * (320.0 - 175.0 * u2))); } static double spheroid_big_b(double u2) { return (u2 / 1024.0) * (256.0 + u2 * (-128.0 + u2 * (74.0 - 47.0 * u2))); } /** * Computes the shortest distance along the surface of the spheroid * between two points. Based on Vincenty's formula for the geodetic * inverse problem as described in "Geocentric Datum of Australia * Technical Manual", Chapter 4. Tested against: * http://mascot.gdbc.gov.bc.ca/mascot/util1a.html * and * http://www.ga.gov.au/nmd/geodesy/datums/vincenty_inverse.jsp * * @param a - location of first point. * @param b - location of second point. * @param s - spheroid to calculate on * @return spheroidal distance between a and b in spheroid units. */ double spheroid_distance(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, const SPHEROID *spheroid) { double lambda = (b->lon - a->lon); double f = spheroid->f; double omf = 1 - spheroid->f; double u1, u2; double cos_u1, cos_u2; double sin_u1, sin_u2; double big_a, big_b, delta_sigma; double alpha, sin_alpha, cos_alphasq, c; double sigma, sin_sigma, cos_sigma, cos2_sigma_m, sqrsin_sigma, last_lambda, omega; double cos_lambda, sin_lambda; double distance; int i = 0; /* Same point => zero distance */ if ( geographic_point_equals(a, b) ) { return 0.0; } u1 = atan(omf * tan(a->lat)); cos_u1 = cos(u1); sin_u1 = sin(u1); u2 = atan(omf * tan(b->lat)); cos_u2 = cos(u2); sin_u2 = sin(u2); omega = lambda; do { cos_lambda = cos(lambda); sin_lambda = sin(lambda); sqrsin_sigma = POW2(cos_u2 * sin_lambda) + POW2((cos_u1 * sin_u2 - sin_u1 * cos_u2 * cos_lambda)); sin_sigma = sqrt(sqrsin_sigma); cos_sigma = sin_u1 * sin_u2 + cos_u1 * cos_u2 * cos_lambda; sigma = atan2(sin_sigma, cos_sigma); sin_alpha = cos_u1 * cos_u2 * sin_lambda / sin(sigma); /* Numerical stability issue, ensure asin is not NaN */ if ( sin_alpha > 1.0 ) alpha = M_PI_2; else if ( sin_alpha < -1.0 ) alpha = -1.0 * M_PI_2; else alpha = asin(sin_alpha); cos_alphasq = POW2(cos(alpha)); cos2_sigma_m = cos(sigma) - (2.0 * sin_u1 * sin_u2 / cos_alphasq); /* Numerical stability issue, cos2 is in range */ if ( cos2_sigma_m > 1.0 ) cos2_sigma_m = 1.0; if ( cos2_sigma_m < -1.0 ) cos2_sigma_m = -1.0; c = (f / 16.0) * cos_alphasq * (4.0 + f * (4.0 - 3.0 * cos_alphasq)); last_lambda = lambda; lambda = omega + (1.0 - c) * f * sin(alpha) * (sigma + c * sin(sigma) * (cos2_sigma_m + c * cos(sigma) * (-1.0 + 2.0 * POW2(cos2_sigma_m)))); i++; } while ( (i < 999) && (lambda != 0.0) && (fabs((last_lambda - lambda)/lambda) > 1.0e-9) ); u2 = spheroid_mu2(alpha, spheroid); big_a = spheroid_big_a(u2); big_b = spheroid_big_b(u2); delta_sigma = big_b * sin_sigma * (cos2_sigma_m + (big_b / 4.0) * (cos_sigma * (-1.0 + 2.0 * POW2(cos2_sigma_m)) - (big_b / 6.0) * cos2_sigma_m * (-3.0 + 4.0 * sqrsin_sigma) * (-3.0 + 4.0 * POW2(cos2_sigma_m)))); distance = spheroid->b * big_a * (sigma - delta_sigma); /* Algorithm failure, distance == NaN, fallback to sphere */ if ( distance != distance ) { lwerror("spheroid_distance returned NaN: (%.20g %.20g) (%.20g %.20g) a = %.20g b = %.20g",a->lat, a->lon, b->lat, b->lon, spheroid->a, spheroid->b); return spheroid->radius * sphere_distance(a, b); } return distance; } /** * Computes the direction of the geodesic joining two points on * the spheroid. Based on Vincenty's formula for the geodetic * inverse problem as described in "Geocentric Datum of Australia * Technical Manual", Chapter 4. Tested against: * http://mascot.gdbc.gov.bc.ca/mascot/util1a.html * and * http://www.ga.gov.au/nmd/geodesy/datums/vincenty_inverse.jsp * * @param r - location of first point * @param s - location of second point * @return azimuth of line joining r and s */ double spheroid_direction(const GEOGRAPHIC_POINT *r, const GEOGRAPHIC_POINT *s, const SPHEROID *spheroid) { int i = 0; double lambda = s->lon - r->lon; double omf = 1 - spheroid->f; double u1 = atan(omf * tan(r->lat)); double cos_u1 = cos(u1); double sin_u1 = sin(u1); double u2 = atan(omf * tan(s->lat)); double cos_u2 = cos(u2); double sin_u2 = sin(u2); double omega = lambda; double alpha, sigma, sin_sigma, cos_sigma, cos2_sigma_m, sqr_sin_sigma, last_lambda; double sin_alpha, cos_alphasq, C, alphaFD; do { sqr_sin_sigma = POW2(cos_u2 * sin(lambda)) + POW2((cos_u1 * sin_u2 - sin_u1 * cos_u2 * cos(lambda))); sin_sigma = sqrt(sqr_sin_sigma); cos_sigma = sin_u1 * sin_u2 + cos_u1 * cos_u2 * cos(lambda); sigma = atan2(sin_sigma, cos_sigma); sin_alpha = cos_u1 * cos_u2 * sin(lambda) / sin(sigma); /* Numerical stability issue, ensure asin is not NaN */ if ( sin_alpha > 1.0 ) alpha = M_PI_2; else if ( sin_alpha < -1.0 ) alpha = -1.0 * M_PI_2; else alpha = asin(sin_alpha); cos_alphasq = POW2(cos(alpha)); cos2_sigma_m = cos(sigma) - (2.0 * sin_u1 * sin_u2 / cos_alphasq); /* Numerical stability issue, cos2 is in range */ if ( cos2_sigma_m > 1.0 ) cos2_sigma_m = 1.0; if ( cos2_sigma_m < -1.0 ) cos2_sigma_m = -1.0; C = (spheroid->f / 16.0) * cos_alphasq * (4.0 + spheroid->f * (4.0 - 3.0 * cos_alphasq)); last_lambda = lambda; lambda = omega + (1.0 - C) * spheroid->f * sin(alpha) * (sigma + C * sin(sigma) * (cos2_sigma_m + C * cos(sigma) * (-1.0 + 2.0 * POW2(cos2_sigma_m)))); i++; } while ( (i < 999) && (lambda != 0) && (fabs((last_lambda - lambda) / lambda) > 1.0e-9) ); alphaFD = atan2((cos_u2 * sin(lambda)), (cos_u1 * sin_u2 - sin_u1 * cos_u2 * cos(lambda))); if (alphaFD < 0.0) { alphaFD = alphaFD + 2.0 * M_PI; } if (alphaFD > 2.0 * M_PI) { alphaFD = alphaFD - 2.0 * M_PI; } return alphaFD; } /** * Given a location, an azimuth and a distance, computes the * location of the projected point. Based on Vincenty's formula * for the geodetic direct problem as described in "Geocentric * Datum of Australia Technical Manual", Chapter 4. Tested against: * http://mascot.gdbc.gov.bc.ca/mascot/util1b.html * and * http://www.ga.gov.au/nmd/geodesy/datums/vincenty_direct.jsp * * @param r - location of first point. * @param distance - distance in meters. * @param azimuth - azimuth in radians. * @return s - location of projected point. */ int spheroid_project(const GEOGRAPHIC_POINT *r, const SPHEROID *spheroid, double distance, double azimuth, GEOGRAPHIC_POINT *g) { double omf = 1 - spheroid->f; double tan_u1 = omf * tan(r->lat); double u1 = atan(tan_u1); double sigma, last_sigma, delta_sigma, two_sigma_m; double sigma1, sin_alpha, alpha, cos_alphasq; double u2, A, B; double lat2, lambda, lambda2, C, omega; int i = 0; if (azimuth < 0.0) { azimuth = azimuth + M_PI * 2.0; } if (azimuth > (PI * 2.0)) { azimuth = azimuth - M_PI * 2.0; } sigma1 = atan2(tan_u1, cos(azimuth)); sin_alpha = cos(u1) * sin(azimuth); alpha = asin(sin_alpha); cos_alphasq = 1.0 - POW2(sin_alpha); u2 = spheroid_mu2(alpha, spheroid); A = spheroid_big_a(u2); B = spheroid_big_b(u2); sigma = (distance / (spheroid->b * A)); do { two_sigma_m = 2.0 * sigma1 + sigma; delta_sigma = B * sin(sigma) * (cos(two_sigma_m) + (B / 4.0) * (cos(sigma) * (-1.0 + 2.0 * POW2(cos(two_sigma_m)) - (B / 6.0) * cos(two_sigma_m) * (-3.0 + 4.0 * POW2(sin(sigma))) * (-3.0 + 4.0 * POW2(cos(two_sigma_m)))))); last_sigma = sigma; sigma = (distance / (spheroid->b * A)) + delta_sigma; i++; } while (i < 999 && fabs((last_sigma - sigma) / sigma) > 1.0e-9); lat2 = atan2((sin(u1) * cos(sigma) + cos(u1) * sin(sigma) * cos(azimuth)), (omf * sqrt(POW2(sin_alpha) + POW2(sin(u1) * sin(sigma) - cos(u1) * cos(sigma) * cos(azimuth))))); lambda = atan2((sin(sigma) * sin(azimuth)), (cos(u1) * cos(sigma) - sin(u1) * sin(sigma) * cos(azimuth))); C = (spheroid->f / 16.0) * cos_alphasq * (4.0 + spheroid->f * (4.0 - 3.0 * cos_alphasq)); omega = lambda - (1.0 - C) * spheroid->f * sin_alpha * (sigma + C * sin(sigma) * (cos(two_sigma_m) + C * cos(sigma) * (-1.0 + 2.0 * POW2(cos(two_sigma_m))))); lambda2 = r->lon + omega; g->lat = lat2; g->lon = lambda2; return LW_SUCCESS; } static inline double spheroid_prime_vertical_radius_of_curvature(double latitude, const SPHEROID *spheroid) { return spheroid->a / (sqrt(1.0 - spheroid->e_sq * POW2(sin(latitude)))); } static inline double spheroid_parallel_arc_length(double latitude, double deltaLongitude, const SPHEROID *spheroid) { return spheroid_prime_vertical_radius_of_curvature(latitude, spheroid) * cos(latitude) * deltaLongitude; } /** * Computes the area on the spheroid of a box bounded by meridians and * parallels. The box is defined by two points, the South West corner * and the North East corner. Formula based on Bagratuni 1967. * * @param southWestCorner - lower left corner of bounding box. * @param northEastCorner - upper right corner of bounding box. * @return area in square meters. */ static double spheroid_boundingbox_area(const GEOGRAPHIC_POINT *southWestCorner, const GEOGRAPHIC_POINT *northEastCorner, const SPHEROID *spheroid) { double z0 = (northEastCorner->lon - southWestCorner->lon) * POW2(spheroid->b) / 2.0; double e = sqrt(spheroid->e_sq); double sinPhi1 = sin(southWestCorner->lat); double sinPhi2 = sin(northEastCorner->lat); double t1p1 = sinPhi1 / (1.0 - spheroid->e_sq * sinPhi1 * sinPhi1); double t1p2 = sinPhi2 / (1.0 - spheroid->e_sq * sinPhi2 * sinPhi2); double oneOver2e = 1.0 / (2.0 * e); double t2p1 = oneOver2e * log((1.0 + e * sinPhi1) / (1.0 - e * sinPhi1)); double t2p2 = oneOver2e * log((1.0 + e * sinPhi2) / (1.0 - e * sinPhi2)); return z0 * (t1p2 + t2p2) - z0 * (t1p1 + t2p1); } /** * This function doesn't work for edges crossing the dateline or in the southern * hemisphere. Points are pre-conditioned in ptarray_area_spheroid. */ static double spheroid_striparea(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, double latitude_min, const SPHEROID *spheroid) { GEOGRAPHIC_POINT A, B, mL, nR; double deltaLng, baseArea, topArea; double bE, tE, ratio, sign; A = *a; B = *b; mL.lat = latitude_min; mL.lon = FP_MIN(A.lon, B.lon); nR.lat = FP_MIN(A.lat, B.lat); nR.lon = FP_MAX(A.lon, B.lon); LWDEBUGF(4, "mL (%.12g %.12g)", mL.lat, mL.lon); LWDEBUGF(4, "nR (%.12g %.12g)", nR.lat, nR.lon); baseArea = spheroid_boundingbox_area(&mL, &nR, spheroid); LWDEBUGF(4, "baseArea %.12g", baseArea); mL.lat = FP_MIN(A.lat, B.lat); mL.lon = FP_MIN(A.lon, B.lon); nR.lat = FP_MAX(A.lat, B.lat); nR.lon = FP_MAX(A.lon, B.lon); LWDEBUGF(4, "mL (%.12g %.12g)", mL.lat, mL.lon); LWDEBUGF(4, "nR (%.12g %.12g)", nR.lat, nR.lon); topArea = spheroid_boundingbox_area(&mL, &nR, spheroid); LWDEBUGF(4, "topArea %.12g", topArea); deltaLng = B.lon - A.lon; LWDEBUGF(4, "deltaLng %.12g", deltaLng); bE = spheroid_parallel_arc_length(A.lat, deltaLng, spheroid); tE = spheroid_parallel_arc_length(B.lat, deltaLng, spheroid); LWDEBUGF(4, "bE %.12g", bE); LWDEBUGF(4, "tE %.12g", tE); ratio = (bE + tE)/tE; sign = signum(B.lon - A.lon); return (baseArea + topArea / ratio) * sign; } static double ptarray_area_spheroid(const POINTARRAY *pa, const SPHEROID *spheroid) { GEOGRAPHIC_POINT a, b; POINT2D p; int i; double area = 0.0; GBOX gbox2d; int in_south = LW_FALSE; double delta_lon_tolerance; double latitude_min; gbox2d.flags = gflags(0, 0, 0); /* Return zero on non-sensical inputs */ if ( ! pa || pa->npoints < 4 ) return 0.0; /* Get the raw min/max values for the latitudes */ ptarray_calculate_gbox_cartesian(pa, &gbox2d); if ( signum(gbox2d.ymin) != signum(gbox2d.ymax) ) lwerror("ptarray_area_spheroid: cannot handle ptarray that crosses equator"); /* Geodetic bbox < 0.0 implies geometry is entirely in southern hemisphere */ if ( gbox2d.ymax < 0.0 ) in_south = LW_TRUE; LWDEBUGF(4, "gbox2d.ymax %.12g", gbox2d.ymax); /* Tolerance for strip area calculation */ if ( in_south ) { delta_lon_tolerance = (90.0 / (fabs(gbox2d.ymin) / 8.0) - 2.0) / 10000.0; latitude_min = deg2rad(fabs(gbox2d.ymax)); } else { delta_lon_tolerance = (90.0 / (fabs(gbox2d.ymax) / 8.0) - 2.0) / 10000.0; latitude_min = deg2rad(gbox2d.ymin); } /* Initialize first point */ getPoint2d_p(pa, 0, &p); geographic_point_init(p.x, p.y, &a); for ( i = 1; i < pa->npoints; i++ ) { GEOGRAPHIC_POINT a1, b1; double strip_area = 0.0; double delta_lon = 0.0; LWDEBUGF(4, "edge #%d", i); getPoint2d_p(pa, i, &p); geographic_point_init(p.x, p.y, &b); a1 = a; b1 = b; /* Flip into north if in south */ if ( in_south ) { a1.lat = -1.0 * a1.lat; b1.lat = -1.0 * b1.lat; } LWDEBUGF(4, "in_south %d", in_south); LWDEBUGF(4, "crosses_dateline(a, b) %d", crosses_dateline(&a, &b) ); if ( crosses_dateline(&a, &b) ) { double shift; if ( a1.lon > 0.0 ) shift = (M_PI - a1.lon) + 0.088; /* About 5deg more */ else shift = (M_PI - b1.lon) + 0.088; /* About 5deg more */ LWDEBUGF(4, "shift: %.8g", shift); LWDEBUGF(4, "before shift a1(%.8g %.8g) b1(%.8g %.8g)", a1.lat, a1.lon, b1.lat, b1.lon); point_shift(&a1, shift); point_shift(&b1, shift); LWDEBUGF(4, "after shift a1(%.8g %.8g) b1(%.8g %.8g)", a1.lat, a1.lon, b1.lat, b1.lon); } delta_lon = fabs(b1.lon - a1.lon); LWDEBUGF(4, "a1(%.18g %.18g) b1(%.18g %.18g)", a1.lat, a1.lon, b1.lat, b1.lon); LWDEBUGF(4, "delta_lon %.18g", delta_lon); LWDEBUGF(4, "delta_lon_tolerance %.18g", delta_lon_tolerance); if ( delta_lon > 0.0 ) { if ( delta_lon < delta_lon_tolerance ) { strip_area = spheroid_striparea(&a1, &b1, latitude_min, spheroid); LWDEBUGF(4, "strip_area %.12g", strip_area); area += strip_area; } else { GEOGRAPHIC_POINT p, q; double step = floor(delta_lon / delta_lon_tolerance); double distance = spheroid_distance(&a1, &b1, spheroid); double pDistance = 0.0; int j = 0; LWDEBUGF(4, "step %.18g", step); LWDEBUGF(4, "distance %.18g", distance); step = distance / step; LWDEBUGF(4, "step %.18g", step); p = a1; while (pDistance < (distance - step * 1.01)) { double azimuth = spheroid_direction(&p, &b1, spheroid); j++; LWDEBUGF(4, " iteration %d", j); LWDEBUGF(4, " azimuth %.12g", azimuth); pDistance = pDistance + step; LWDEBUGF(4, " pDistance %.12g", pDistance); spheroid_project(&p, spheroid, step, azimuth, &q); strip_area = spheroid_striparea(&p, &q, latitude_min, spheroid); LWDEBUGF(4, " strip_area %.12g", strip_area); area += strip_area; LWDEBUGF(4, " area %.12g", area); p.lat = q.lat; p.lon = q.lon; } strip_area = spheroid_striparea(&p, &b1, latitude_min, spheroid); area += strip_area; } } /* B gets incremented in the next loop, so we save the value here */ a = b; } return fabs(area); } /** * Calculate the area of an LWGEOM. Anything except POLYGON, MULTIPOLYGON * and GEOMETRYCOLLECTION return zero immediately. Multi's recurse, polygons * calculate external ring area and subtract internal ring area. A GBOX is * required to check relationship to equator an outside point. * WARNING: Does NOT WORK for polygons over equator or pole. */ double lwgeom_area_spheroid(const LWGEOM *lwgeom, const SPHEROID *spheroid) { int type; assert(lwgeom); /* No area in nothing */ if ( lwgeom_is_empty(lwgeom) ) return 0.0; /* Read the geometry type number */ type = lwgeom->type; /* Anything but polygons and collections returns zero */ if ( ! ( type == POLYGONTYPE || type == MULTIPOLYGONTYPE || type == COLLECTIONTYPE ) ) return 0.0; /* Actually calculate area */ if ( type == POLYGONTYPE ) { LWPOLY *poly = (LWPOLY*)lwgeom; int i; double area = 0.0; /* Just in case there's no rings */ if ( poly->nrings < 1 ) return 0.0; /* First, the area of the outer ring */ area += ptarray_area_spheroid(poly->rings[0], spheroid); /* Subtract areas of inner rings */ for ( i = 1; i < poly->nrings; i++ ) { area -= ptarray_area_spheroid(poly->rings[i], spheroid); } return area; } /* Recurse into sub-geometries to get area */ if ( type == MULTIPOLYGONTYPE || type == COLLECTIONTYPE ) { LWCOLLECTION *col = (LWCOLLECTION*)lwgeom; int i; double area = 0.0; for ( i = 0; i < col->ngeoms; i++ ) { area += lwgeom_area_spheroid(col->geoms[i], spheroid); } return area; } /* Shouldn't get here. */ return 0.0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_transform.c������������������������������������������������0000644�0000000�0000000�00000011016�11722777314�021304� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_log.h" #include <string.h> /** convert decimal degress to radians */ static void to_rad(POINT4D *pt) { pt->x *= M_PI/180.0; pt->y *= M_PI/180.0; } /** convert radians to decimal degress */ static void to_dec(POINT4D *pt) { pt->x *= 180.0/M_PI; pt->y *= 180.0/M_PI; } /** * Transform given POINTARRAY * from inpj projection to outpj projection */ int ptarray_transform(POINTARRAY *pa, projPJ inpj, projPJ outpj) { int i; POINT4D p; for ( i = 0; i < pa->npoints; i++ ) { getPoint4d_p(pa, i, &p); if ( ! point4d_transform(&p, inpj, outpj) ) return LW_FAILURE; ptarray_set_point4d(pa, i, &p); } return LW_SUCCESS; } /** * Transform given SERIALIZED geometry * from inpj projection to outpj projection */ int lwgeom_transform(LWGEOM *geom, projPJ inpj, projPJ outpj) { int i; /* No points to transform in an empty! */ if ( lwgeom_is_empty(geom) ) return LW_SUCCESS; switch(geom->type) { case POINTTYPE: case LINETYPE: case CIRCSTRINGTYPE: case TRIANGLETYPE: { LWLINE *g = (LWLINE*)geom; if ( ! ptarray_transform(g->points, inpj, outpj) ) return LW_FAILURE; break; } case POLYGONTYPE: { LWPOLY *g = (LWPOLY*)geom; for ( i = 0; i < g->nrings; i++ ) { if ( ! ptarray_transform(g->rings[i], inpj, outpj) ) return LW_FAILURE; } break; } case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: { LWCOLLECTION *g = (LWCOLLECTION*)geom; for ( i = 0; i < g->ngeoms; i++ ) { if ( ! lwgeom_transform(g->geoms[i], inpj, outpj) ) return LW_FAILURE; } break; } default: { lwerror("lwgeom_transform: Cannot handle type '%s'", lwtype_name(geom->type)); return LW_FAILURE; } } return LW_SUCCESS; } int point4d_transform(POINT4D *pt, projPJ srcpj, projPJ dstpj) { int* pj_errno_ref; POINT4D orig_pt; /* Make a copy of the input point so we can report the original should an error occur */ orig_pt.x = pt->x; orig_pt.y = pt->y; orig_pt.z = pt->z; if (pj_is_latlong(srcpj)) to_rad(pt) ; LWDEBUGF(4, "transforming POINT(%f %f) from '%s' to '%s'", orig_pt.x, orig_pt.y, pj_get_def(srcpj,0), pj_get_def(dstpj,0)); /* Perform the transform */ pj_transform(srcpj, dstpj, 1, 0, &(pt->x), &(pt->y), &(pt->z)); /* For NAD grid-shift errors, display an error message with an additional hint */ pj_errno_ref = pj_get_errno_ref(); if (*pj_errno_ref != 0) { if (*pj_errno_ref == -38) { lwnotice("PostGIS was unable to transform the point because either no grid shift files were found, or the point does not lie within the range for which the grid shift is defined. Refer to the ST_Transform() section of the PostGIS manual for details on how to configure PostGIS to alter this behaviour."); lwerror("transform: couldn't project point (%g %g %g): %s (%d)", orig_pt.x, orig_pt.y, orig_pt.z, pj_strerrno(*pj_errno_ref), *pj_errno_ref); return 0; } else { lwerror("transform: couldn't project point (%g %g %g): %s (%d)", orig_pt.x, orig_pt.y, orig_pt.z, pj_strerrno(*pj_errno_ref), *pj_errno_ref); return 0; } } if (pj_is_latlong(dstpj)) to_dec(pt); return 1; } projPJ lwproj_from_string(const char *str1) { int t; char *params[1024]; /* one for each parameter */ char *loc; char *str; size_t slen; projPJ result; if (str1 == NULL) return NULL; slen = strlen(str1); if (slen == 0) return NULL; str = lwalloc(slen+1); strcpy(str, str1); /* * first we split the string into a bunch of smaller strings, * based on the " " separator */ params[0] = str; /* 1st param, we'll null terminate at the " " soon */ loc = str; t = 1; while ((loc != NULL) && (*loc != 0) ) { loc = strchr(loc, ' '); if (loc != NULL) { *loc = 0; /* null terminate */ params[t] = loc+1; loc++; /* next char */ t++; /*next param */ } } if (!(result=pj_init(t, params))) { lwfree(str); return NULL; } lwfree(str); return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwutil.c����������������������������������������������������������0000644�0000000�0000000�00000015257�12067042633�017242� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> /* Global variables */ #include "../postgis_config.h" #include "liblwgeom_internal.h" #include "lwgeom_log.h" /* Default allocators */ static void * default_allocator(size_t size); static void default_freeor(void *mem); static void * default_reallocator(void *mem, size_t size); lwallocator lwalloc_var = default_allocator; lwreallocator lwrealloc_var = default_reallocator; lwfreeor lwfree_var = default_freeor; /* Default reporters */ static void default_noticereporter(const char *fmt, va_list ap); static void default_errorreporter(const char *fmt, va_list ap); lwreporter lwnotice_var = default_noticereporter; lwreporter lwerror_var = default_errorreporter; static char *lwgeomTypeName[] = { "Unknown", "Point", "LineString", "Polygon", "MultiPoint", "MultiLineString", "MultiPolygon", "GeometryCollection", "CircularString", "CompoundCurve", "CurvePolygon", "MultiCurve", "MultiSurface", "PolyhedralSurface", "Triangle", "Tin" }; /* * Default lwnotice/lwerror handlers * * Since variadic functions cannot pass their parameters directly, we need * wrappers for these functions to convert the arguments into a va_list * structure. */ void lwnotice(const char *fmt, ...) { va_list ap; va_start(ap, fmt); /* Call the supplied function */ (*lwnotice_var)(fmt, ap); va_end(ap); } void lwerror(const char *fmt, ...) { va_list ap; va_start(ap, fmt); /* Call the supplied function */ (*lwerror_var)(fmt, ap); va_end(ap); } /* * Default allocators * * We include some default allocators that use malloc/free/realloc * along with stdout/stderr since this is the most common use case * */ static void * default_allocator(size_t size) { void *mem = malloc(size); return mem; } static void default_freeor(void *mem) { free(mem); } static void * default_reallocator(void *mem, size_t size) { void *ret = realloc(mem, size); return ret; } static void default_noticereporter(const char *fmt, va_list ap) { char *msg; /* * This is a GNU extension. * Dunno how to handle errors here. */ if (!lw_vasprintf (&msg, fmt, ap)) { va_end (ap); return; } printf("%s\n", msg); free(msg); } static void default_errorreporter(const char *fmt, va_list ap) { char *msg; /* * This is a GNU extension. * Dunno how to handle errors here. */ if (!lw_vasprintf (&msg, fmt, ap)) { va_end (ap); return; } fprintf(stderr, "%s\n", msg); free(msg); exit(1); } /** * This function is called by programs which want to set up custom handling * for memory management and error reporting * * Only non-NULL values change their respective handler */ void lwgeom_set_handlers(lwallocator allocator, lwreallocator reallocator, lwfreeor freeor, lwreporter errorreporter, lwreporter noticereporter) { if ( allocator ) lwalloc_var = allocator; if ( reallocator ) lwrealloc_var = reallocator; if ( freeor ) lwfree_var = freeor; if ( errorreporter ) lwerror_var = errorreporter; if ( noticereporter ) lwnotice_var = noticereporter; } const char* lwtype_name(uint8_t type) { if ( type > 15 ) { /* assert(0); */ return "Invalid type"; } return lwgeomTypeName[(int ) type]; } void * lwalloc(size_t size) { void *mem = lwalloc_var(size); LWDEBUGF(5, "lwalloc: %d@%p", size, mem); return mem; } void * lwrealloc(void *mem, size_t size) { LWDEBUGF(5, "lwrealloc: %d@%p", size, mem); return lwrealloc_var(mem, size); } void lwfree(void *mem) { lwfree_var(mem); } /* * Removes trailing zeros and dot for a %f formatted number. * Modifies input. */ void trim_trailing_zeros(char *str) { char *ptr, *totrim=NULL; int len; int i; LWDEBUGF(3, "input: %s", str); ptr = strchr(str, '.'); if ( ! ptr ) return; /* no dot, no decimal digits */ LWDEBUGF(3, "ptr: %s", ptr); len = strlen(ptr); for (i=len-1; i; i--) { if ( ptr[i] != '0' ) break; totrim=&ptr[i]; } if ( totrim ) { if ( ptr == totrim-1 ) *ptr = '\0'; else *totrim = '\0'; } LWDEBUGF(3, "output: %s", str); } /* * Returns a new string which contains a maximum of maxlength characters starting * from startpos and finishing at endpos (0-based indexing). If the string is * truncated then the first or last characters are replaced by "..." as * appropriate. * * The caller should specify start or end truncation by setting the truncdirection * parameter as follows: * 0 - start truncation (i.e. characters are removed from the beginning) * 1 - end trunctation (i.e. characters are removed from the end) */ char *lwmessage_truncate(char *str, int startpos, int endpos, int maxlength, int truncdirection) { char *output; char *outstart; /* Allocate space for new string */ output = lwalloc(maxlength + 4); output[0] = '\0'; /* Start truncation */ if (truncdirection == 0) { /* Calculate the start position */ if (endpos - startpos < maxlength) { outstart = str + startpos; strncat(output, outstart, endpos - startpos + 1); } else { if (maxlength >= 3) { /* Add "..." prefix */ outstart = str + endpos + 1 - maxlength + 3; strncat(output, "...", 3); strncat(output, outstart, maxlength - 3); } else { /* maxlength is too small; just output "..." */ strncat(output, "...", 3); } } } /* End truncation */ if (truncdirection == 1) { /* Calculate the end position */ if (endpos - startpos < maxlength) { outstart = str + startpos; strncat(output, outstart, endpos - startpos + 1); } else { if (maxlength >= 3) { /* Add "..." suffix */ outstart = str + startpos; strncat(output, outstart, maxlength - 3); strncat(output, "...", 3); } else { /* maxlength is too small; just output "..." */ strncat(output, "...", 3); } } } return output; } char getMachineEndian(void) { static int endian_check_int = 1; /* dont modify this!!! */ return *((char *) &endian_check_int); /* 0 = big endian | xdr, * 1 = little endian | ndr */ } void error_if_srid_mismatch(int srid1, int srid2) { if ( srid1 != srid2 ) { lwerror("Operation on mixed SRID geometries"); } } int clamp_srid(int srid) { int newsrid = srid; if ( newsrid <= 0 ) { if ( newsrid != SRID_UNKNOWN ) { newsrid = SRID_UNKNOWN; lwnotice("SRID value %d converted to the officially unknown SRID value %d", srid, newsrid); } } else if ( srid > SRID_MAXIMUM ) { newsrid = SRID_USER_MAXIMUM + 1 + /* -1 is to reduce likelyhood of clashes */ /* NOTE: must match implementation in postgis_restore.pl */ ( srid % ( SRID_MAXIMUM - SRID_USER_MAXIMUM - 1 ) ); lwnotice("SRID value %d > SRID_MAXIMUM converted to %d", srid, newsrid); } return newsrid; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_api.c������������������������������������������������������0000644�0000000�0000000�00000033576�12047044677�020061� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeom_log.h" #include <float.h> #include <stdio.h> #include <errno.h> #include <assert.h> /* * Lower this to reduce integrity checks */ #define PARANOIA_LEVEL 1 /********************************************************************** * BOX routines * * returns the float thats very close to the input, but <= * handles the funny differences in float4 and float8 reps. **********************************************************************/ typedef union { float value; uint32_t word; } ieee_float_shape_type; #define GET_FLOAT_WORD(i,d) \ do { \ ieee_float_shape_type gf_u; \ gf_u.value = (d); \ (i) = gf_u.word; \ } while (0) #define SET_FLOAT_WORD(d,i) \ do { \ ieee_float_shape_type sf_u; \ sf_u.word = (i); \ (d) = sf_u.value; \ } while (0) /* * Returns the next smaller or next larger float * from x (in direction of y). */ static float nextafterf_custom(float x, float y) { int hx,hy,ix,iy; GET_FLOAT_WORD(hx,x); GET_FLOAT_WORD(hy,y); ix = hx&0x7fffffff; /* |x| */ iy = hy&0x7fffffff; /* |y| */ if ((ix>0x7f800000) || /* x is nan */ (iy>0x7f800000)) /* y is nan */ return x+y; if (x==y) return y; /* x=y, return y */ if (ix==0) { /* x == 0 */ SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */ y = x*x; if (y==x) return y; else return x; /* raise underflow flag */ } if (hx>=0) { /* x > 0 */ if (hx>hy) { /* x > y, x -= ulp */ hx -= 1; } else { /* x < y, x += ulp */ hx += 1; } } else { /* x < 0 */ if (hy>=0||hx>hy) { /* x < y, x -= ulp */ hx -= 1; } else { /* x > y, x += ulp */ hx += 1; } } hy = hx&0x7f800000; if (hy>=0x7f800000) return x+x; /* overflow */ if (hy<0x00800000) { /* underflow */ y = x*x; if (y!=x) { /* raise underflow flag */ SET_FLOAT_WORD(y,hx); return y; } } SET_FLOAT_WORD(x,hx); return x; } float next_float_down(double d) { float result = d; if ( ((double) result) <=d) return result; return nextafterf_custom(result, result - 1000000); } /* * Returns the float thats very close to the input, but >=. * handles the funny differences in float4 and float8 reps. */ float next_float_up(double d) { float result = d; if ( ((double) result) >=d) return result; return nextafterf_custom(result, result + 1000000); } /* * Returns the double thats very close to the input, but <. * handles the funny differences in float4 and float8 reps. */ double next_double_down(float d) { double result = d; if ( result < d) return result; return nextafterf_custom(result, result - 1000000); } /* * Returns the double thats very close to the input, but > * handles the funny differences in float4 and float8 reps. */ double next_double_up(float d) { double result = d; if ( result > d) return result; return nextafterf_custom(result, result + 1000000); } /************************************************************************ * POINTARRAY support functions * * TODO: should be moved to ptarray.c probably * ************************************************************************/ /* * Copies a point from the point array into the parameter point * will set point's z=NO_Z_VALUE if pa is 2d * will set point's m=NO_M_VALUE if pa is 3d or 2d * * NOTE: point is a real POINT3D *not* a pointer */ POINT4D getPoint4d(const POINTARRAY *pa, int n) { POINT4D result; getPoint4d_p(pa, n, &result); return result; } /* * Copies a point from the point array into the parameter point * will set point's z=NO_Z_VALUE if pa is 2d * will set point's m=NO_M_VALUE if pa is 3d or 2d * * NOTE: this will modify the point4d pointed to by 'point'. */ int getPoint4d_p(const POINTARRAY *pa, int n, POINT4D *op) { uint8_t *ptr; int zmflag; #if PARANOIA_LEVEL > 0 if ( ! pa ) lwerror("getPoint4d_p: NULL pointarray"); if ( (n<0) || (n>=pa->npoints)) { lwerror("getPoint4d_p: point offset out of range"); } #endif LWDEBUG(4, "getPoint4d_p called."); /* Get a pointer to nth point offset and zmflag */ ptr=getPoint_internal(pa, n); zmflag=FLAGS_GET_ZM(pa->flags); LWDEBUGF(4, "ptr %p, zmflag %d", ptr, zmflag); switch (zmflag) { case 0: /* 2d */ memcpy(op, ptr, sizeof(POINT2D)); op->m=NO_M_VALUE; op->z=NO_Z_VALUE; break; case 3: /* ZM */ memcpy(op, ptr, sizeof(POINT4D)); break; case 2: /* Z */ memcpy(op, ptr, sizeof(POINT3DZ)); op->m=NO_M_VALUE; break; case 1: /* M */ memcpy(op, ptr, sizeof(POINT3DM)); op->m=op->z; /* we use Z as temporary storage */ op->z=NO_Z_VALUE; break; default: lwerror("Unknown ZM flag ??"); } return 1; } /* * Copy a point from the point array into the parameter point * will set point's z=NO_Z_VALUE if pa is 2d * NOTE: point is a real POINT3DZ *not* a pointer */ POINT3DZ getPoint3dz(const POINTARRAY *pa, int n) { POINT3DZ result; getPoint3dz_p(pa, n, &result); return result; } /* * Copy a point from the point array into the parameter point * will set point's z=NO_Z_VALUE if pa is 2d * * NOTE: point is a real POINT3DZ *not* a pointer */ POINT3DM getPoint3dm(const POINTARRAY *pa, int n) { POINT3DM result; getPoint3dm_p(pa, n, &result); return result; } /* * Copy a point from the point array into the parameter point * will set point's z=NO_Z_VALUE if pa is 2d * * NOTE: this will modify the point3dz pointed to by 'point'. */ int getPoint3dz_p(const POINTARRAY *pa, int n, POINT3DZ *op) { uint8_t *ptr; #if PARANOIA_LEVEL > 0 if ( ! pa ) return 0; if ( (n<0) || (n>=pa->npoints)) { LWDEBUGF(4, "%d out of numpoint range (%d)", n, pa->npoints); return 0; /*error */ } #endif LWDEBUGF(2, "getPoint3dz_p called on array of %d-dimensions / %u pts", FLAGS_NDIMS(pa->flags), pa->npoints); /* Get a pointer to nth point offset */ ptr=getPoint_internal(pa, n); /* * if input POINTARRAY has the Z, it is always * at third position so make a single copy */ if ( FLAGS_GET_Z(pa->flags) ) { memcpy(op, ptr, sizeof(POINT3DZ)); } /* * Otherwise copy the 2d part and initialize * Z to NO_Z_VALUE */ else { memcpy(op, ptr, sizeof(POINT2D)); op->z=NO_Z_VALUE; } return 1; } /* * Copy a point from the point array into the parameter point * will set point's m=NO_Z_VALUE if pa has no M * * NOTE: this will modify the point3dm pointed to by 'point'. */ int getPoint3dm_p(const POINTARRAY *pa, int n, POINT3DM *op) { uint8_t *ptr; int zmflag; #if PARANOIA_LEVEL > 0 if ( ! pa ) return 0; if ( (n<0) || (n>=pa->npoints)) { lwerror("%d out of numpoint range (%d)", n, pa->npoints); return 0; /*error */ } #endif LWDEBUGF(2, "getPoint3dm_p(%d) called on array of %d-dimensions / %u pts", n, FLAGS_NDIMS(pa->flags), pa->npoints); /* Get a pointer to nth point offset and zmflag */ ptr=getPoint_internal(pa, n); zmflag=FLAGS_GET_ZM(pa->flags); /* * if input POINTARRAY has the M and NO Z, * we can issue a single memcpy */ if ( zmflag == 1 ) { memcpy(op, ptr, sizeof(POINT3DM)); return 1; } /* * Otherwise copy the 2d part and * initialize M to NO_M_VALUE */ memcpy(op, ptr, sizeof(POINT2D)); /* * Then, if input has Z skip it and * copy next double, otherwise initialize * M to NO_M_VALUE */ if ( zmflag == 3 ) { ptr+=sizeof(POINT3DZ); memcpy(&(op->m), ptr, sizeof(double)); } else { op->m=NO_M_VALUE; } return 1; } /* * Copy a point from the point array into the parameter point * z value (if present) is not returned. * * NOTE: point is a real POINT2D *not* a pointer */ POINT2D getPoint2d(const POINTARRAY *pa, int n) { const POINT2D *result; result = getPoint2d_cp(pa, n); return *result; } /* * Copy a point from the point array into the parameter point * z value (if present) is not returned. * * NOTE: this will modify the point2d pointed to by 'point'. */ int getPoint2d_p(const POINTARRAY *pa, int n, POINT2D *point) { #if PARANOIA_LEVEL > 0 if ( ! pa ) return 0; if ( (n<0) || (n>=pa->npoints)) { lwerror("getPoint2d_p: point offset out of range"); return 0; /*error */ } #endif /* this does x,y */ memcpy(point, getPoint_internal(pa, n), sizeof(POINT2D)); return 1; } /** * Returns a pointer into the POINTARRAY serialized_ptlist, * suitable for reading from. This is very high performance * and declared const because you aren't allowed to muck with the * values, only read them. */ const POINT2D* getPoint2d_cp(const POINTARRAY *pa, int n) { if ( ! pa ) return 0; if ( (n<0) || (n>=pa->npoints)) { lwerror("getPoint2D_const_p: point offset out of range"); return 0; /*error */ } return (const POINT2D*)getPoint_internal(pa, n); } /* * set point N to the given value * NOTE that the pointarray can be of any * dimension, the appropriate ordinate values * will be extracted from it * */ void ptarray_set_point4d(POINTARRAY *pa, int n, const POINT4D *p4d) { uint8_t *ptr; assert(n >= 0 && n < pa->npoints); ptr=getPoint_internal(pa, n); switch ( FLAGS_GET_ZM(pa->flags) ) { case 3: memcpy(ptr, p4d, sizeof(POINT4D)); break; case 2: memcpy(ptr, p4d, sizeof(POINT3DZ)); break; case 1: memcpy(ptr, p4d, sizeof(POINT2D)); ptr+=sizeof(POINT2D); memcpy(ptr, &(p4d->m), sizeof(double)); break; case 0: memcpy(ptr, p4d, sizeof(POINT2D)); break; } } /***************************************************************************** * Basic sub-geometry types *****************************************************************************/ /* handle missaligned uint32_t32 data */ uint32_t lw_get_uint32_t(const uint8_t *loc) { uint32_t result; memcpy(&result, loc, sizeof(uint32_t)); return result; } /* handle missaligned signed int32_t data */ int32_t lw_get_int32_t(const uint8_t *loc) { int32_t result; memcpy(&result,loc, sizeof(int32_t)); return result; } /************************************************ * debugging routines ************************************************/ void printBOX3D(BOX3D *box) { lwnotice("BOX3D: %g %g, %g %g", box->xmin, box->ymin, box->xmax, box->ymax); } void printPA(POINTARRAY *pa) { int t; POINT4D pt; char *mflag; if ( FLAGS_GET_M(pa->flags) ) mflag = "M"; else mflag = ""; lwnotice(" POINTARRAY%s{", mflag); lwnotice(" ndims=%i, ptsize=%i", FLAGS_NDIMS(pa->flags), ptarray_point_size(pa)); lwnotice(" npoints = %i", pa->npoints); for (t =0; t<pa->npoints; t++) { getPoint4d_p(pa, t, &pt); if (FLAGS_NDIMS(pa->flags) == 2) { lwnotice(" %i : %lf,%lf",t,pt.x,pt.y); } if (FLAGS_NDIMS(pa->flags) == 3) { lwnotice(" %i : %lf,%lf,%lf",t,pt.x,pt.y,pt.z); } if (FLAGS_NDIMS(pa->flags) == 4) { lwnotice(" %i : %lf,%lf,%lf,%lf",t,pt.x,pt.y,pt.z,pt.m); } } lwnotice(" }"); } /** * Given a string with at least 2 chars in it, convert them to * a byte value. No error checking done! */ uint8_t parse_hex(char *str) { /* do this a little brute force to make it faster */ uint8_t result_high = 0; uint8_t result_low = 0; switch (str[0]) { case '0' : result_high = 0; break; case '1' : result_high = 1; break; case '2' : result_high = 2; break; case '3' : result_high = 3; break; case '4' : result_high = 4; break; case '5' : result_high = 5; break; case '6' : result_high = 6; break; case '7' : result_high = 7; break; case '8' : result_high = 8; break; case '9' : result_high = 9; break; case 'A' : case 'a' : result_high = 10; break; case 'B' : case 'b' : result_high = 11; break; case 'C' : case 'c' : result_high = 12; break; case 'D' : case 'd' : result_high = 13; break; case 'E' : case 'e' : result_high = 14; break; case 'F' : case 'f' : result_high = 15; break; } switch (str[1]) { case '0' : result_low = 0; break; case '1' : result_low = 1; break; case '2' : result_low = 2; break; case '3' : result_low = 3; break; case '4' : result_low = 4; break; case '5' : result_low = 5; break; case '6' : result_low = 6; break; case '7' : result_low = 7; break; case '8' : result_low = 8; break; case '9' : result_low = 9; break; case 'A' : case 'a' : result_low = 10; break; case 'B' : case 'b' : result_low = 11; break; case 'C' : case 'c' : result_low = 12; break; case 'D' : case 'd' : result_low = 13; break; case 'E' : case 'e' : result_low = 14; break; case 'F' : case 'f' : result_low = 15; break; } return (uint8_t) ((result_high<<4) + result_low); } /** * Given one byte, populate result with two byte representing * the hex number. * * Ie. deparse_hex( 255, mystr) * -> mystr[0] = 'F' and mystr[1] = 'F' * * No error checking done */ void deparse_hex(uint8_t str, char *result) { int input_high; int input_low; static char outchr[]= { "0123456789ABCDEF" }; input_high = (str>>4); input_low = (str & 0x0F); result[0] = outchr[input_high]; result[1] = outchr[input_low]; } /** * Find interpolation point I * between point A and point B * so that the len(AI) == len(AB)*F * and I falls on AB segment. * * Example: * * F=0.5 : A----I----B * F=1 : A---------B==I * F=0 : A==I---------B * F=.2 : A-I-------B */ void interpolate_point4d(POINT4D *A, POINT4D *B, POINT4D *I, double F) { #if PARANOIA_LEVEL > 0 double absF=fabs(F); if ( absF < 0 || absF > 1 ) { lwerror("interpolate_point4d: invalid F (%g)", F); } #endif I->x=A->x+((B->x-A->x)*F); I->y=A->y+((B->y-A->y)*F); I->z=A->z+((B->z-A->z)*F); I->m=A->m+((B->m-A->m)*F); } ����������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/stringbuffer.c����������������������������������������������������0000644�0000000�0000000�00000020655�12125043174�020414� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: stringbuffer.c 11218 2013-03-28 13:32:44Z robe $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2002 Thamer Alharbash * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * The name of the author may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * **********************************************************************/ #include "liblwgeom_internal.h" #include "stringbuffer.h" /** * Allocate a new stringbuffer_t. Use stringbuffer_destroy to free. */ stringbuffer_t* stringbuffer_create(void) { return stringbuffer_create_with_size(STRINGBUFFER_STARTSIZE); } /** * Allocate a new stringbuffer_t. Use stringbuffer_destroy to free. */ stringbuffer_t* stringbuffer_create_with_size(size_t size) { stringbuffer_t *s; s = lwalloc(sizeof(stringbuffer_t)); s->str_start = lwalloc(size); s->str_end = s->str_start; s->capacity = size; memset(s->str_start,0,size); return s; } /** * Free the stringbuffer_t and all memory managed within it. */ void stringbuffer_destroy(stringbuffer_t *s) { if ( s->str_start ) lwfree(s->str_start); if ( s ) lwfree(s); } /** * Reset the stringbuffer_t. Useful for starting a fresh string * without the expense of freeing and re-allocating a new * stringbuffer_t. */ void stringbuffer_clear(stringbuffer_t *s) { s->str_start[0] = '\0'; s->str_end = s->str_start; } /** * If necessary, expand the stringbuffer_t internal buffer to accomodate the * specified additional size. */ static inline void stringbuffer_makeroom(stringbuffer_t *s, size_t size_to_add) { size_t current_size = (s->str_end - s->str_start); size_t capacity = s->capacity; size_t required_size = current_size + size_to_add; while (capacity < required_size) capacity *= 2; if ( capacity > s->capacity ) { s->str_start = lwrealloc(s->str_start, capacity); s->capacity = capacity; s->str_end = s->str_start + current_size; } } /** * Return the last character in the buffer. */ char stringbuffer_lastchar(stringbuffer_t *s) { if( s->str_end == s->str_start ) return 0; return *(s->str_end - 1); } /** * Append the specified string to the stringbuffer_t. */ void stringbuffer_append(stringbuffer_t *s, const char *a) { int alen = strlen(a); /* Length of string to append */ int alen0 = alen + 1; /* Length including null terminator */ stringbuffer_makeroom(s, alen0); memcpy(s->str_end, a, alen0); s->str_end += alen; } /** * Returns a reference to the internal string being managed by * the stringbuffer. The current string will be null-terminated * within the internal string. */ const char* stringbuffer_getstring(stringbuffer_t *s) { return s->str_start; } /** * Returns a newly allocated string large enough to contain the * current state of the string. Caller is responsible for * freeing the return value. */ char* stringbuffer_getstringcopy(stringbuffer_t *s) { size_t size = (s->str_end - s->str_start) + 1; char *str = lwalloc(size); memcpy(str, s->str_start, size); str[size - 1] = '\0'; return str; } /** * Returns the length of the current string, not including the * null terminator (same behavior as strlen()). */ int stringbuffer_getlength(stringbuffer_t *s) { return (s->str_end - s->str_start); } /** * Clear the stringbuffer_t and re-start it with the specified string. */ void stringbuffer_set(stringbuffer_t *s, const char *str) { stringbuffer_clear(s); stringbuffer_append(s, str); } /** * Copy the contents of src into dst. */ void stringbuffer_copy(stringbuffer_t *dst, stringbuffer_t *src) { stringbuffer_set(dst, stringbuffer_getstring(src)); } /** * Appends a formatted string to the current string buffer, * using the format and argument list provided. Returns -1 on error, * check errno for reasons, documented in the printf man page. */ static int stringbuffer_avprintf(stringbuffer_t *s, const char *fmt, va_list ap) { int maxlen = (s->capacity - (s->str_end - s->str_start)); int len = 0; /* Length of the output */ va_list ap2; /* Make a copy of the variadic arguments, in case we need to print twice */ /* Print to our buffer */ va_copy(ap2, ap); len = vsnprintf(s->str_end, maxlen, fmt, ap2); va_end(ap2); /* Propogate errors up */ if ( len < 0 ) #if defined(__MINGW64_VERSION_MAJOR) len = _vscprintf(fmt, ap2);/**Assume windows flaky vsnprintf that returns -1 if initial buffer to small and add more space **/ #else return len; #endif /* We didn't have enough space! */ /* Either Unix vsnprint returned write length larger than our buffer */ /* or Windows vsnprintf returned an error code. */ if ( len >= maxlen ) { stringbuffer_makeroom(s, len + 1); maxlen = (s->capacity - (s->str_end - s->str_start)); /* Try to print a second time */ len = vsnprintf(s->str_end, maxlen, fmt, ap); /* Printing error? Error! */ if ( len < 0 ) return len; /* Too long still? Error! */ if ( len >= maxlen ) return -1; } /* Move end pointer forward and return. */ s->str_end += len; return len; } /** * Appends a formatted string to the current string buffer, * using the format and argument list provided. * Returns -1 on error, check errno for reasons, * as documented in the printf man page. */ int stringbuffer_aprintf(stringbuffer_t *s, const char *fmt, ...) { int r; va_list ap; va_start(ap, fmt); r = stringbuffer_avprintf(s, fmt, ap); va_end(ap); return r; } /** * Trims whitespace off the end of the stringbuffer. Returns * the number of characters trimmed. */ int stringbuffer_trim_trailing_white(stringbuffer_t *s) { char *ptr = s->str_end; int dist = 0; /* Roll backwards until we hit a non-space. */ while( ptr > s->str_start ) { ptr--; if( (*ptr == ' ') || (*ptr == '\t') ) { continue; } else { ptr++; dist = s->str_end - ptr; *ptr = '\0'; s->str_end = ptr; return dist; } } return dist; } /** * Trims zeroes off the end of the last number in the stringbuffer. * The number has to be the very last thing in the buffer. Only the * last number will be trimmed. Returns the number of characters * trimmed. * * eg: 1.22000 -> 1.22 * 1.0 -> 1 * 0.0 -> 0 */ int stringbuffer_trim_trailing_zeroes(stringbuffer_t *s) { char *ptr = s->str_end; char *decimal_ptr = NULL; int dist; if ( s->str_end - s->str_start < 2) return 0; /* Roll backwards to find the decimal for this number */ while( ptr > s->str_start ) { ptr--; if ( *ptr == '.' ) { decimal_ptr = ptr; break; } if ( (*ptr >= '0') && (*ptr <= '9' ) ) continue; else break; } /* No decimal? Nothing to trim! */ if ( ! decimal_ptr ) return 0; ptr = s->str_end; /* Roll backwards again, with the decimal as stop point, trimming contiguous zeroes */ while( ptr >= decimal_ptr ) { ptr--; if ( *ptr == '0' ) continue; else break; } /* Huh, we get anywhere. Must not have trimmed anything. */ if ( ptr == s->str_end ) return 0; /* If we stopped at the decimal, we want to null that out. It we stopped on a numeral, we want to preserve that, so push the pointer forward one space. */ if ( *ptr != '.' ) ptr++; /* Add null terminator re-set the end of the stringbuffer. */ *ptr = '\0'; dist = s->str_end - ptr; s->str_end = ptr; return dist; } �����������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_sfcgal.c���������������������������������������������������0000644�0000000�0000000�00000032537�12142775451�020540� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Wrapper around SFCGAL for 3D functions * * Copyright 2012-2013 Oslandia <infos@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <assert.h> #include "lwgeom_sfcgal.h" static int SFCGAL_type_to_lwgeom_type(sfcgal_geometry_type_t type); static POINTARRAY* ptarray_from_SFCGAL(const sfcgal_geometry_t* geom, int force3D); static sfcgal_geometry_t* ptarray_to_SFCGAL(const POINTARRAY* pa, int type); /* Return SFCGAL version string */ const char* lwgeom_sfcgal_version() { const char *version = sfcgal_version(); return version; } /* * Mapping between SFCGAL and PostGIS types * * Throw an error if type is unsupported */ static int SFCGAL_type_to_lwgeom_type(sfcgal_geometry_type_t type) { switch (type) { case SFCGAL_TYPE_POINT: return POINTTYPE; case SFCGAL_TYPE_LINESTRING: return LINETYPE; case SFCGAL_TYPE_POLYGON: return POLYGONTYPE; case SFCGAL_TYPE_MULTIPOINT: return MULTIPOINTTYPE; case SFCGAL_TYPE_MULTILINESTRING: return MULTILINETYPE; case SFCGAL_TYPE_MULTIPOLYGON: return MULTIPOLYGONTYPE; case SFCGAL_TYPE_MULTISOLID: return COLLECTIONTYPE; /* Nota: PolyhedralSurface closed inside aim is to use true solid type as soon as available in OGC SFS */ case SFCGAL_TYPE_GEOMETRYCOLLECTION: return COLLECTIONTYPE; #if 0 case SFCGAL_TYPE_CIRCULARSTRING: return CIRCSTRINGTYPE; case SFCGAL_TYPE_COMPOUNDCURVE: return COMPOUNDTYPE; case SFCGAL_TYPE_CURVEPOLYGON: return CURVEPOLYTYPE; case SFCGAL_TYPE_MULTICURVE: return MULTICURVETYPE; case SFCGAL_TYPE_MULTISURFACE: return MULTISURFACETYPE; #endif case SFCGAL_TYPE_POLYHEDRALSURFACE: return POLYHEDRALSURFACETYPE; case SFCGAL_TYPE_TRIANGULATEDSURFACE: return TINTYPE; case SFCGAL_TYPE_TRIANGLE: return TRIANGLETYPE; default: lwerror("SFCGAL_type_to_lwgeom_type: Unknown Type"); return 0; } } /* * Return a PostGIS pointarray from a simple SFCGAL geometry: * POINT, LINESTRING or TRIANGLE * * Trought an error on others types */ static POINTARRAY* ptarray_from_SFCGAL(const sfcgal_geometry_t* geom, int want3d) { POINT4D point; uint32_t i, npoints; POINTARRAY* pa = NULL; assert(geom); switch (sfcgal_geometry_type_id(geom)) { case SFCGAL_TYPE_POINT: { pa = ptarray_construct(want3d, 0, 1); point.x = sfcgal_point_x(geom); point.y = sfcgal_point_y(geom); if (sfcgal_geometry_is_3d(geom)) point.z = sfcgal_point_z(geom); else if (want3d) point.z = 0.0; ptarray_set_point4d(pa, 0, &point); } break; case SFCGAL_TYPE_LINESTRING: { npoints = sfcgal_linestring_num_points(geom); pa = ptarray_construct(want3d, 0, npoints); for (i = 0; i < npoints; i++) { const sfcgal_geometry_t* pt = sfcgal_linestring_point_n(geom, i); point.x = sfcgal_point_x(pt); point.y = sfcgal_point_y(pt); if (sfcgal_geometry_is_3d(geom)) point.z = sfcgal_point_z(pt); else if (want3d) point.z = 0.0; ptarray_set_point4d(pa, i, &point); } } break; case SFCGAL_TYPE_TRIANGLE: { pa = ptarray_construct(want3d, 0, 4); for (i = 0; i < 4; i++) { const sfcgal_geometry_t* pt = sfcgal_triangle_vertex(geom, (i%3)); point.x = sfcgal_point_x(pt); point.y = sfcgal_point_y(pt); if ( sfcgal_geometry_is_3d(geom)) point.z = sfcgal_point_z(pt); else if (want3d) point.z = 0.0; ptarray_set_point4d(pa, i, &point); } } break; /* Other types should not be called directly ... */ default: lwerror("ptarray_from_SFCGAL: Unknown Type"); break; } return pa; } /* * Convert a PostGIS pointarray to SFCGAL structure * * Used for simple LWGEOM geometry POINT, LINESTRING, TRIANGLE * and POLYGON rings */ static sfcgal_geometry_t* ptarray_to_SFCGAL(const POINTARRAY* pa, int type) { POINT3DZ point; int is_3d; uint32_t i; assert(pa); is_3d = FLAGS_GET_Z(pa->flags) != 0; switch (type) { case POINTTYPE: { getPoint3dz_p(pa, 0, &point); if (is_3d) return sfcgal_point_create_from_xyz(point.x, point.y, point.z); else return sfcgal_point_create_from_xy(point.x, point.y); } break; case LINETYPE: { sfcgal_geometry_t* line = sfcgal_linestring_create(); for (i = 0; i < pa->npoints; i++) { getPoint3dz_p(pa, i, &point); if (is_3d) { sfcgal_linestring_add_point(line, sfcgal_point_create_from_xyz(point.x, point.y, point.z)); } else { sfcgal_linestring_add_point(line, sfcgal_point_create_from_xy(point.x, point.y)); } } return line; } break; case TRIANGLETYPE: { sfcgal_geometry_t* triangle = sfcgal_triangle_create(); getPoint3dz_p(pa, 0, &point); if (is_3d) sfcgal_triangle_set_vertex_from_xyz(triangle, 0, point.x, point.y, point.z); else sfcgal_triangle_set_vertex_from_xy (triangle, 0, point.x, point.y); getPoint3dz_p(pa, 1, &point); if (is_3d) sfcgal_triangle_set_vertex_from_xyz(triangle, 1, point.x, point.y, point.z); else sfcgal_triangle_set_vertex_from_xy (triangle, 1, point.x, point.y); getPoint3dz_p(pa, 2, &point); if (is_3d) sfcgal_triangle_set_vertex_from_xyz(triangle, 2, point.x, point.y, point.z); else sfcgal_triangle_set_vertex_from_xy (triangle, 2, point.x, point.y); return triangle; } break; /* Other SFCGAL types should not be called directly ... */ default: lwerror("ptarray_from_SFCGAL: Unknown Type"); return NULL; } } /* * Convert a SFCGAL structure to PostGIS LWGEOM * * Throws an error on unsupported type */ LWGEOM* SFCGAL2LWGEOM(const sfcgal_geometry_t* geom, int force3D, int srid) { uint32_t ngeoms, nshells; uint32_t i, j, k; int want3d; assert(geom); want3d = force3D || sfcgal_geometry_is_3d(geom); switch (sfcgal_geometry_type_id(geom)) { case SFCGAL_TYPE_POINT: { if (sfcgal_geometry_is_empty(geom)) return (LWGEOM*) lwpoint_construct_empty(srid, want3d, 0); POINTARRAY* pa = ptarray_from_SFCGAL(geom, want3d); return (LWGEOM*) lwpoint_construct(srid, NULL, pa); } case SFCGAL_TYPE_LINESTRING: { if (sfcgal_geometry_is_empty(geom)) return (LWGEOM*) lwline_construct_empty(srid, want3d, 0); POINTARRAY* pa = ptarray_from_SFCGAL(geom, want3d); return (LWGEOM*) lwline_construct(srid, NULL, pa); } case SFCGAL_TYPE_TRIANGLE: { if (sfcgal_geometry_is_empty(geom)) return (LWGEOM*) lwtriangle_construct_empty(srid, want3d, 0); POINTARRAY* pa = ptarray_from_SFCGAL(geom, want3d); return (LWGEOM*) lwtriangle_construct(srid, NULL, pa); } case SFCGAL_TYPE_POLYGON: { if (sfcgal_geometry_is_empty(geom)) return (LWGEOM*) lwpoly_construct_empty(srid, want3d, 0); uint32_t nrings = sfcgal_polygon_num_interior_rings(geom) + 1; POINTARRAY** pa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*) * nrings); pa[0] = ptarray_from_SFCGAL(sfcgal_polygon_exterior_ring(geom), want3d); for (i = 1; i < nrings; i++) pa[i] = ptarray_from_SFCGAL(sfcgal_polygon_interior_ring_n(geom, i-1), want3d); return (LWGEOM*) lwpoly_construct(srid, NULL, nrings, pa); } case SFCGAL_TYPE_MULTIPOINT: case SFCGAL_TYPE_MULTILINESTRING: case SFCGAL_TYPE_MULTIPOLYGON: case SFCGAL_TYPE_MULTISOLID: case SFCGAL_TYPE_GEOMETRYCOLLECTION: { ngeoms = sfcgal_geometry_collection_num_geometries(geom); LWGEOM** geoms = NULL; if (ngeoms) { geoms = (LWGEOM**) lwalloc(sizeof(LWGEOM*) * ngeoms); for (i = 0; i < ngeoms; i++) { const sfcgal_geometry_t* g = sfcgal_geometry_collection_geometry_n(geom, i); geoms[i] = SFCGAL2LWGEOM(g, 0, srid); } geoms = (LWGEOM**) lwrealloc(geoms, sizeof(LWGEOM*) * ngeoms); } return (LWGEOM*) lwcollection_construct(SFCGAL_type_to_lwgeom_type( sfcgal_geometry_type_id(geom)), srid, NULL, ngeoms, geoms); } #if 0 case SFCGAL_TYPE_CIRCULARSTRING: case SFCGAL_TYPE_COMPOUNDCURVE: case SFCGAL_TYPE_CURVEPOLYGON: case SFCGAL_TYPE_MULTICURVE: case SFCGAL_TYPE_MULTISURFACE: case SFCGAL_TYPE_CURVE: case SFCGAL_TYPE_SURFACE: /* TODO curve types handling */ #endif case SFCGAL_TYPE_POLYHEDRALSURFACE: { ngeoms = sfcgal_polyhedral_surface_num_polygons(geom); LWGEOM** geoms = NULL; if (ngeoms) { geoms = (LWGEOM**) lwalloc(sizeof(LWGEOM*) * ngeoms); for (i = 0; i < ngeoms; i++) { const sfcgal_geometry_t* g = sfcgal_polyhedral_surface_polygon_n( geom, i ); geoms[i] = SFCGAL2LWGEOM(g, 0, srid); } } return (LWGEOM*)lwcollection_construct(POLYHEDRALSURFACETYPE, srid, NULL, ngeoms, geoms); } /* Solid is map as a closed PolyhedralSurface (for now) */ case SFCGAL_TYPE_SOLID: { nshells = sfcgal_solid_num_shells(geom); for (ngeoms = 0, i = 0; i < nshells; i++) ngeoms += sfcgal_polyhedral_surface_num_polygons(sfcgal_solid_shell_n(geom, i)); LWGEOM** geoms = 0; if (ngeoms) { geoms = (LWGEOM**) lwalloc( sizeof(LWGEOM*) * ngeoms); for (i = 0, k =0 ; i < nshells; i++) { const sfcgal_geometry_t* shell = sfcgal_solid_shell_n(geom, i); ngeoms = sfcgal_polyhedral_surface_num_polygons(shell); for (j = 0; j < ngeoms; j++) { const sfcgal_geometry_t* g = sfcgal_polyhedral_surface_polygon_n(shell, j); geoms[k] = SFCGAL2LWGEOM(g, 1, srid); k++; } } } LWGEOM* rgeom = (LWGEOM*) lwcollection_construct(POLYHEDRALSURFACETYPE, srid, NULL, ngeoms, geoms); if (ngeoms) FLAGS_SET_SOLID( rgeom->flags, 1); return rgeom; } case SFCGAL_TYPE_TRIANGULATEDSURFACE: { ngeoms = sfcgal_triangulated_surface_num_triangles(geom); LWGEOM** geoms = NULL; if (ngeoms) { geoms = (LWGEOM**) lwalloc(sizeof(LWGEOM*) * ngeoms); for (i = 0; i < ngeoms; i++) { const sfcgal_geometry_t* g = sfcgal_triangulated_surface_triangle_n(geom, i); geoms[i] = SFCGAL2LWGEOM(g, 0, srid); } } return (LWGEOM*) lwcollection_construct(TINTYPE, srid, NULL, ngeoms, geoms); } default: lwerror("SFCGAL2LWGEOM: Unknown Type"); return NULL; } } sfcgal_geometry_t* LWGEOM2SFCGAL(const LWGEOM* geom) { uint32_t i; sfcgal_geometry_t* ret_geom = NULL; assert(geom); switch (geom->type) { case POINTTYPE: { const LWPOINT* lwp = (const LWPOINT*) geom; if (lwgeom_is_empty(geom)) return sfcgal_point_create(); return ptarray_to_SFCGAL(lwp->point, POINTTYPE); } break; case LINETYPE: { const LWLINE* line = (const LWLINE*) geom; if (lwgeom_is_empty(geom)) return sfcgal_linestring_create(); return ptarray_to_SFCGAL(line->points, LINETYPE); } break; case TRIANGLETYPE: { const LWTRIANGLE* triangle = (const LWTRIANGLE*) geom; if (lwgeom_is_empty(geom)) return sfcgal_triangle_create(); return ptarray_to_SFCGAL(triangle->points, TRIANGLETYPE); } break; case POLYGONTYPE: { const LWPOLY* poly = (const LWPOLY*) geom; uint32_t nrings = poly->nrings - 1; if (lwgeom_is_empty(geom)) return sfcgal_polygon_create(); sfcgal_geometry_t* exterior_ring = ptarray_to_SFCGAL(poly->rings[0], LINETYPE); ret_geom = sfcgal_polygon_create_from_exterior_ring(exterior_ring); for (i = 0; i < nrings; i++) { sfcgal_geometry_t* ring = ptarray_to_SFCGAL(poly->rings[i + 1], LINETYPE); sfcgal_polygon_add_interior_ring(ret_geom, ring); } return ret_geom; } break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: { if (geom->type == MULTIPOINTTYPE) ret_geom = sfcgal_multi_point_create(); else if (geom->type == MULTILINETYPE) ret_geom = sfcgal_multi_linestring_create(); else if (geom->type == MULTIPOLYGONTYPE) ret_geom = sfcgal_multi_polygon_create(); else ret_geom = sfcgal_geometry_collection_create(); const LWCOLLECTION* lwc = (const LWCOLLECTION*)geom; for (i = 0; i < lwc->ngeoms; i++) { sfcgal_geometry_t* g = LWGEOM2SFCGAL(lwc->geoms[i]); sfcgal_geometry_collection_add_geometry(ret_geom, g); } return ret_geom; } break; case POLYHEDRALSURFACETYPE: { const LWPSURFACE* lwp = (const LWPSURFACE*) geom; ret_geom = sfcgal_polyhedral_surface_create(); for (i = 0; i < lwp->ngeoms; i++) { sfcgal_geometry_t* g = LWGEOM2SFCGAL((const LWGEOM*) lwp->geoms[i]); sfcgal_polyhedral_surface_add_polygon(ret_geom, g); } /* We treat polyhedral surface as the only exterior shell, since we can't distinguish exterior from interior shells ... */ if (FLAGS_GET_SOLID(lwp->flags)) { return sfcgal_solid_create_from_exterior_shell(ret_geom); } return ret_geom; } break; case TINTYPE: { const LWTIN* lwp = (const LWTIN*) geom; ret_geom = sfcgal_triangulated_surface_create(); for (i = 0; i < lwp->ngeoms; i++) { sfcgal_geometry_t* g = LWGEOM2SFCGAL((const LWGEOM*) lwp->geoms[i]); sfcgal_triangulated_surface_add_triangle(ret_geom, g); } return ret_geom; } break; default: lwerror("LWGEOM2SFCGAL: Unknown geometry type !"); return NULL; } } /* * No Operation SFCGAL function, used (only) for cunit tests * Take a PostGIS geometry, send it to SFCGAL and return it unchanged (in theory) */ LWGEOM* lwgeom_sfcgal_noop(const LWGEOM* geom_in) { sfcgal_geometry_t* converted; assert(geom_in); converted = LWGEOM2SFCGAL(geom_in); assert(converted); LWGEOM* geom_out = SFCGAL2LWGEOM(converted, 0, SRID_UNKNOWN); sfcgal_geometry_delete(converted); /* copy SRID (SFCGAL does not store the SRID) */ geom_out->srid = geom_in->srid; return geom_out; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/g_serialized.txt��������������������������������������������������0000644�0000000�0000000�00000006364�11722777314�020767� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GSERIALIZED FORM ================= The new serialized form, used by GEOGRAPHY, attempts to learn from the lessons of the SERIALIZED_LWGEOM, making slightly different trade-offs between alignment and overall compactness. * It is understood that GSERIALIZED is be used primarily (only) by PostGIS. Other users of the geometry library (for example, the loaders and dumpers) will serialize to WKB or EWKB or various text representations. Therefore, GSERIALIZED includes the uint32 "size" field at the top used by PostgreSQL for varlena types. * Like SERIALIZED_LWGEOM, GSERIALIZED is built to be read and written recursively, so that nested collections of collections (of ...) are possible without restrictions on depth. * GSERIALIZED preserves double alignment of ordinate arrays. This will allow coordinate access without memcpy. * GSERIALIZED includes a mandatory SRID, in recognition of the fact that most production use of PostGIS does actually use an SRID. In SERIALIZED_LWGEOM the SRID is optional. * GSERIALIZED places the dimensionality information, the SRID information and the bounding boxes at the front of the structure, and all sub-components inherit from those parent values. * GSERIALIZED retains the idea of optional bounding boxes, so that small features do not carry the extra storage overhead of a largely redundant bounding box. STRUCTURE --------- Most of the internals of GSERIALIZED are anonymous. One thing that differs from SERIALIZED_LWGEOM is that the geometry type is no longer directly accessible from the structure (it was inside the one byte "type" at the top of the SERIALIZED_LWGEOM). To access the type in GSERIALIZED, you first have to figure out whether there is a an bounding box, how many dimensions that bounding box has, and move the data pointer appropriately before dereferencing. The gserialized_get_type(GSERIALIZED *s) function carries out this operation. typedef struct { uint32 size; /* For PgSQL use, use VAR* macros to manipulate. */ uchar srid[3]; /* 21 bits of SRID (and 3 spare bits) */ uchar flags; /* HasZ, HasM, HasBBox, IsGeodetic */ uchar data[1]; /* See gserialized.txt */ } GSERIALIZED; The standard header is as follows (using <> to denote 4-byte fields and [] to denote 8-byte fields): <size> size /* Used by PgSQL */ <srid /* 3 bytes */ flags> /* 1 byte */ <bbox-xmin> /* bounding box is optional */ <bbox-xmax> /* number of dimensions is variable and indicated in the flags */ <bbox-ymin> <bbox-ymax> After the header comes the recursively searchable geometry representations. Each type is double aligned, so any combination is double aligned, and we start after a double aligned standard header, so we are golden: <pointype> <npoints> /* 0 if empty, 1 otherwise */ [double] [double] [double] <linestringtype> <npoints> /* 0 if empty, N otherwise */ [double] ... [double] <polygontype> <nrings> /* 0 if empty, N otherwise */ <npointsring1> <npointsring2> <?pad?> /* pad if nrings % 2 > 0 */ [double] ... [double] <collectiontype> <ngeoms> /* 0 if empty, N otherwise */ [geom] ... [geom] <circularstringtype> <npoints> /* 0 if empty, N otherwise */ [double] ... [double] <compoundstringtype> <ngeoms> /* 0 if empty, N otherwise */ [geom] ... [geom] ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwout_wkb.c�������������������������������������������������������0000644�0000000�0000000�00000047045�12042305343�017730� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeom_log.h" static uint8_t* lwgeom_to_wkb_buf(const LWGEOM *geom, uint8_t *buf, uint8_t variant); static size_t lwgeom_to_wkb_size(const LWGEOM *geom, uint8_t variant); /* * Look-up table for hex writer */ static char *hexchr = "0123456789ABCDEF"; char* hexbytes_from_bytes(uint8_t *bytes, size_t size) { char *hex; int i; if ( ! bytes || ! size ) { lwerror("hexbutes_from_bytes: invalid input"); return NULL; } hex = lwalloc(size * 2 + 1); hex[2*size] = '\0'; for( i = 0; i < size; i++ ) { /* Top four bits to 0-F */ hex[2*i] = hexchr[bytes[i] >> 4]; /* Bottom four bits to 0-F */ hex[2*i+1] = hexchr[bytes[i] & 0x0F]; } return hex; } /* * Optional SRID */ static int lwgeom_wkb_needs_srid(const LWGEOM *geom, uint8_t variant) { /* Sub-components of collections inherit their SRID from the parent. We force that behavior with the WKB_NO_SRID flag */ if ( variant & WKB_NO_SRID ) return LW_FALSE; /* We can only add an SRID if the geometry has one, and the WKB form is extended */ if ( (variant & WKB_EXTENDED) && lwgeom_has_srid(geom) ) return LW_TRUE; /* Everything else doesn't get an SRID */ return LW_FALSE; } /* * GeometryType */ static uint32_t lwgeom_wkb_type(const LWGEOM *geom, uint8_t variant) { uint32_t wkb_type = 0; switch ( geom->type ) { case POINTTYPE: wkb_type = WKB_POINT_TYPE; break; case LINETYPE: wkb_type = WKB_LINESTRING_TYPE; break; case POLYGONTYPE: wkb_type = WKB_POLYGON_TYPE; break; case MULTIPOINTTYPE: wkb_type = WKB_MULTIPOINT_TYPE; break; case MULTILINETYPE: wkb_type = WKB_MULTILINESTRING_TYPE; break; case MULTIPOLYGONTYPE: wkb_type = WKB_MULTIPOLYGON_TYPE; break; case COLLECTIONTYPE: wkb_type = WKB_GEOMETRYCOLLECTION_TYPE; break; case CIRCSTRINGTYPE: wkb_type = WKB_CIRCULARSTRING_TYPE; break; case COMPOUNDTYPE: wkb_type = WKB_COMPOUNDCURVE_TYPE; break; case CURVEPOLYTYPE: wkb_type = WKB_CURVEPOLYGON_TYPE; break; case MULTICURVETYPE: wkb_type = WKB_MULTICURVE_TYPE; break; case MULTISURFACETYPE: wkb_type = WKB_MULTISURFACE_TYPE; break; case POLYHEDRALSURFACETYPE: wkb_type = WKB_POLYHEDRALSURFACE_TYPE; break; case TINTYPE: wkb_type = WKB_TIN_TYPE; break; case TRIANGLETYPE: wkb_type = WKB_TRIANGLE_TYPE; break; default: lwerror("Unsupported geometry type: %s [%d]", lwtype_name(geom->type), geom->type); } if ( variant & WKB_EXTENDED ) { if ( FLAGS_GET_Z(geom->flags) ) wkb_type |= WKBZOFFSET; if ( FLAGS_GET_M(geom->flags) ) wkb_type |= WKBMOFFSET; /* if ( geom->srid != SRID_UNKNOWN && ! (variant & WKB_NO_SRID) ) */ if ( lwgeom_wkb_needs_srid(geom, variant) ) wkb_type |= WKBSRIDFLAG; } else if ( variant & WKB_ISO ) { /* Z types are in the 1000 range */ if ( FLAGS_GET_Z(geom->flags) ) wkb_type += 1000; /* M types are in the 2000 range */ if ( FLAGS_GET_M(geom->flags) ) wkb_type += 2000; /* ZM types are in the 1000 + 2000 = 3000 range, see above */ } return wkb_type; } /* * Endian */ static uint8_t* endian_to_wkb_buf(uint8_t *buf, uint8_t variant) { if ( variant & WKB_HEX ) { buf[0] = '0'; buf[1] = ((variant & WKB_NDR) ? '1' : '0'); return buf + 2; } else { buf[0] = ((variant & WKB_NDR) ? 1 : 0); return buf + 1; } } /* * SwapBytes? */ static inline int wkb_swap_bytes(uint8_t variant) { /* If requested variant matches machine arch, we don't have to swap! */ if ( ((variant & WKB_NDR) && (getMachineEndian() == NDR)) || ((! (variant & WKB_NDR)) && (getMachineEndian() == XDR)) ) { return LW_FALSE; } return LW_TRUE; } /* * Integer32 */ static uint8_t* integer_to_wkb_buf(const int ival, uint8_t *buf, uint8_t variant) { char *iptr = (char*)(&ival); int i = 0; if ( sizeof(int) != WKB_INT_SIZE ) { lwerror("Machine int size is not %d bytes!", WKB_INT_SIZE); } LWDEBUGF(4, "Writing value '%u'", ival); if ( variant & WKB_HEX ) { int swap = wkb_swap_bytes(variant); /* Machine/request arch mismatch, so flip byte order */ for ( i = 0; i < WKB_INT_SIZE; i++ ) { int j = (swap ? WKB_INT_SIZE - 1 - i : i); uint8_t b = iptr[j]; /* Top four bits to 0-F */ buf[2*i] = hexchr[b >> 4]; /* Bottom four bits to 0-F */ buf[2*i+1] = hexchr[b & 0x0F]; } return buf + (2 * WKB_INT_SIZE); } else { /* Machine/request arch mismatch, so flip byte order */ if ( wkb_swap_bytes(variant) ) { for ( i = 0; i < WKB_INT_SIZE; i++ ) { buf[i] = iptr[WKB_INT_SIZE - 1 - i]; } } /* If machine arch and requested arch match, don't flip byte order */ else { memcpy(buf, iptr, WKB_INT_SIZE); } return buf + WKB_INT_SIZE; } } /* * Float64 */ static uint8_t* double_to_wkb_buf(const double d, uint8_t *buf, uint8_t variant) { char *dptr = (char*)(&d); int i = 0; if ( sizeof(double) != WKB_DOUBLE_SIZE ) { lwerror("Machine double size is not %d bytes!", WKB_DOUBLE_SIZE); } if ( variant & WKB_HEX ) { int swap = wkb_swap_bytes(variant); /* Machine/request arch mismatch, so flip byte order */ for ( i = 0; i < WKB_DOUBLE_SIZE; i++ ) { int j = (swap ? WKB_DOUBLE_SIZE - 1 - i : i); uint8_t b = dptr[j]; /* Top four bits to 0-F */ buf[2*i] = hexchr[b >> 4]; /* Bottom four bits to 0-F */ buf[2*i+1] = hexchr[b & 0x0F]; } return buf + (2 * WKB_DOUBLE_SIZE); } else { /* Machine/request arch mismatch, so flip byte order */ if ( wkb_swap_bytes(variant) ) { for ( i = 0; i < WKB_DOUBLE_SIZE; i++ ) { buf[i] = dptr[WKB_DOUBLE_SIZE - 1 - i]; } } /* If machine arch and requested arch match, don't flip byte order */ else { memcpy(buf, dptr, WKB_DOUBLE_SIZE); } return buf + WKB_DOUBLE_SIZE; } } /* * Empty */ static size_t empty_to_wkb_size(const LWGEOM *geom, uint8_t variant) { size_t size = WKB_BYTE_SIZE + WKB_INT_SIZE + WKB_INT_SIZE; if ( lwgeom_wkb_needs_srid(geom, variant) ) size += WKB_INT_SIZE; return size; } static uint8_t* empty_to_wkb_buf(const LWGEOM *geom, uint8_t *buf, uint8_t variant) { uint32_t wkb_type = lwgeom_wkb_type(geom, variant); if ( geom->type == POINTTYPE ) { /* Change POINT to MULTIPOINT */ wkb_type &= ~WKB_POINT_TYPE; /* clear POINT flag */ wkb_type |= WKB_MULTIPOINT_TYPE; /* set MULTIPOINT flag */ } /* Set the endian flag */ buf = endian_to_wkb_buf(buf, variant); /* Set the geometry type */ buf = integer_to_wkb_buf(wkb_type, buf, variant); /* Set the SRID if necessary */ if ( lwgeom_wkb_needs_srid(geom, variant) ) buf = integer_to_wkb_buf(geom->srid, buf, variant); /* Set nrings/npoints/ngeoms to zero */ buf = integer_to_wkb_buf(0, buf, variant); return buf; } /* * POINTARRAY */ static size_t ptarray_to_wkb_size(const POINTARRAY *pa, uint8_t variant) { int dims = 2; size_t size = 0; if ( variant & (WKB_ISO | WKB_EXTENDED) ) dims = FLAGS_NDIMS(pa->flags); /* Include the npoints if it's not a POINT type) */ if ( ! ( variant & WKB_NO_NPOINTS ) ) size += WKB_INT_SIZE; /* size of the double list */ size += pa->npoints * dims * WKB_DOUBLE_SIZE; return size; } static uint8_t* ptarray_to_wkb_buf(const POINTARRAY *pa, uint8_t *buf, uint8_t variant) { int dims = 2; int pa_dims = FLAGS_NDIMS(pa->flags); int i, j; double *dbl_ptr; /* SFSQL is always 2-d. Extended and ISO use all available dimensions */ if ( (variant & WKB_ISO) || (variant & WKB_EXTENDED) ) dims = pa_dims; /* Set the number of points (if it's not a POINT type) */ if ( ! ( variant & WKB_NO_NPOINTS ) ) buf = integer_to_wkb_buf(pa->npoints, buf, variant); /* Bulk copy the coordinates when: dimensionality matches, output format */ /* is not hex, and output endian matches internal endian. */ if ( (dims == pa_dims) && ! wkb_swap_bytes(variant) && ! (variant & WKB_HEX) ) { size_t size = pa->npoints * dims * WKB_DOUBLE_SIZE; memcpy(buf, getPoint_internal(pa, 0), size); buf += size; } /* Copy coordinates one-by-one otherwise */ else { for ( i = 0; i < pa->npoints; i++ ) { LWDEBUGF(4, "Writing point #%d", i); dbl_ptr = (double*)getPoint_internal(pa, i); for ( j = 0; j < dims; j++ ) { LWDEBUGF(4, "Writing dimension #%d (buf = %p)", j, buf); buf = double_to_wkb_buf(dbl_ptr[j], buf, variant); } } } LWDEBUGF(4, "Done (buf = %p)", buf); return buf; } /* * POINT */ static size_t lwpoint_to_wkb_size(const LWPOINT *pt, uint8_t variant) { /* Endian flag + type number */ size_t size = WKB_BYTE_SIZE + WKB_INT_SIZE; /* Extended WKB needs space for optional SRID integer */ if ( lwgeom_wkb_needs_srid((LWGEOM*)pt, variant) ) size += WKB_INT_SIZE; /* Points */ size += ptarray_to_wkb_size(pt->point, variant | WKB_NO_NPOINTS); return size; } static uint8_t* lwpoint_to_wkb_buf(const LWPOINT *pt, uint8_t *buf, uint8_t variant) { /* Set the endian flag */ LWDEBUGF(4, "Entering function, buf = %p", buf); buf = endian_to_wkb_buf(buf, variant); LWDEBUGF(4, "Endian set, buf = %p", buf); /* Set the geometry type */ buf = integer_to_wkb_buf(lwgeom_wkb_type((LWGEOM*)pt, variant), buf, variant); LWDEBUGF(4, "Type set, buf = %p", buf); /* Set the optional SRID for extended variant */ if ( lwgeom_wkb_needs_srid((LWGEOM*)pt, variant) ) { buf = integer_to_wkb_buf(pt->srid, buf, variant); LWDEBUGF(4, "SRID set, buf = %p", buf); } /* Set the coordinates */ buf = ptarray_to_wkb_buf(pt->point, buf, variant | WKB_NO_NPOINTS); LWDEBUGF(4, "Pointarray set, buf = %p", buf); return buf; } /* * LINESTRING, CIRCULARSTRING */ static size_t lwline_to_wkb_size(const LWLINE *line, uint8_t variant) { /* Endian flag + type number */ size_t size = WKB_BYTE_SIZE + WKB_INT_SIZE; /* Extended WKB needs space for optional SRID integer */ if ( lwgeom_wkb_needs_srid((LWGEOM*)line, variant) ) size += WKB_INT_SIZE; /* Size of point array */ size += ptarray_to_wkb_size(line->points, variant); return size; } static uint8_t* lwline_to_wkb_buf(const LWLINE *line, uint8_t *buf, uint8_t variant) { /* Set the endian flag */ buf = endian_to_wkb_buf(buf, variant); /* Set the geometry type */ buf = integer_to_wkb_buf(lwgeom_wkb_type((LWGEOM*)line, variant), buf, variant); /* Set the optional SRID for extended variant */ if ( lwgeom_wkb_needs_srid((LWGEOM*)line, variant) ) buf = integer_to_wkb_buf(line->srid, buf, variant); /* Set the coordinates */ buf = ptarray_to_wkb_buf(line->points, buf, variant); return buf; } /* * TRIANGLE */ static size_t lwtriangle_to_wkb_size(const LWTRIANGLE *tri, uint8_t variant) { /* endian flag + type number + number of rings */ size_t size = WKB_BYTE_SIZE + WKB_INT_SIZE + WKB_INT_SIZE; /* Extended WKB needs space for optional SRID integer */ if ( lwgeom_wkb_needs_srid((LWGEOM*)tri, variant) ) size += WKB_INT_SIZE; /* How big is this point array? */ size += ptarray_to_wkb_size(tri->points, variant); return size; } static uint8_t* lwtriangle_to_wkb_buf(const LWTRIANGLE *tri, uint8_t *buf, uint8_t variant) { /* Set the endian flag */ buf = endian_to_wkb_buf(buf, variant); /* Set the geometry type */ buf = integer_to_wkb_buf(lwgeom_wkb_type((LWGEOM*)tri, variant), buf, variant); /* Set the optional SRID for extended variant */ if ( lwgeom_wkb_needs_srid((LWGEOM*)tri, variant) ) buf = integer_to_wkb_buf(tri->srid, buf, variant); /* Set the number of rings (only one, it's a triangle, buddy) */ buf = integer_to_wkb_buf(1, buf, variant); /* Write that ring */ buf = ptarray_to_wkb_buf(tri->points, buf, variant); return buf; } /* * POLYGON */ static size_t lwpoly_to_wkb_size(const LWPOLY *poly, uint8_t variant) { /* endian flag + type number + number of rings */ size_t size = WKB_BYTE_SIZE + WKB_INT_SIZE + WKB_INT_SIZE; int i = 0; /* Extended WKB needs space for optional SRID integer */ if ( lwgeom_wkb_needs_srid((LWGEOM*)poly, variant) ) size += WKB_INT_SIZE; for ( i = 0; i < poly->nrings; i++ ) { /* Size of ring point array */ size += ptarray_to_wkb_size(poly->rings[i], variant); } return size; } static uint8_t* lwpoly_to_wkb_buf(const LWPOLY *poly, uint8_t *buf, uint8_t variant) { int i; /* Set the endian flag */ buf = endian_to_wkb_buf(buf, variant); /* Set the geometry type */ buf = integer_to_wkb_buf(lwgeom_wkb_type((LWGEOM*)poly, variant), buf, variant); /* Set the optional SRID for extended variant */ if ( lwgeom_wkb_needs_srid((LWGEOM*)poly, variant) ) buf = integer_to_wkb_buf(poly->srid, buf, variant); /* Set the number of rings */ buf = integer_to_wkb_buf(poly->nrings, buf, variant); for ( i = 0; i < poly->nrings; i++ ) { buf = ptarray_to_wkb_buf(poly->rings[i], buf, variant); } return buf; } /* * MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION * MULTICURVE, COMPOUNDCURVE, MULTISURFACE, CURVEPOLYGON, TIN, * POLYHEDRALSURFACE */ static size_t lwcollection_to_wkb_size(const LWCOLLECTION *col, uint8_t variant) { /* Endian flag + type number + number of subgeoms */ size_t size = WKB_BYTE_SIZE + WKB_INT_SIZE + WKB_INT_SIZE; int i = 0; /* Extended WKB needs space for optional SRID integer */ if ( lwgeom_wkb_needs_srid((LWGEOM*)col, variant) ) size += WKB_INT_SIZE; for ( i = 0; i < col->ngeoms; i++ ) { /* size of subgeom */ size += lwgeom_to_wkb_size((LWGEOM*)col->geoms[i], variant | WKB_NO_SRID); } return size; } static uint8_t* lwcollection_to_wkb_buf(const LWCOLLECTION *col, uint8_t *buf, uint8_t variant) { int i; /* Set the endian flag */ buf = endian_to_wkb_buf(buf, variant); /* Set the geometry type */ buf = integer_to_wkb_buf(lwgeom_wkb_type((LWGEOM*)col, variant), buf, variant); /* Set the optional SRID for extended variant */ if ( lwgeom_wkb_needs_srid((LWGEOM*)col, variant) ) buf = integer_to_wkb_buf(col->srid, buf, variant); /* Set the number of sub-geometries */ buf = integer_to_wkb_buf(col->ngeoms, buf, variant); /* Write the sub-geometries. Sub-geometries do not get SRIDs, they inherit from their parents. */ for ( i = 0; i < col->ngeoms; i++ ) { buf = lwgeom_to_wkb_buf(col->geoms[i], buf, variant | WKB_NO_SRID); } return buf; } /* * GEOMETRY */ static size_t lwgeom_to_wkb_size(const LWGEOM *geom, uint8_t variant) { size_t size = 0; if ( geom == NULL ) return 0; /* Short circuit out empty geometries */ if ( lwgeom_is_empty(geom) ) { return empty_to_wkb_size(geom, variant); } switch ( geom->type ) { case POINTTYPE: size += lwpoint_to_wkb_size((LWPOINT*)geom, variant); break; /* LineString and CircularString both have points elements */ case CIRCSTRINGTYPE: case LINETYPE: size += lwline_to_wkb_size((LWLINE*)geom, variant); break; /* Polygon has nrings and rings elements */ case POLYGONTYPE: size += lwpoly_to_wkb_size((LWPOLY*)geom, variant); break; /* Triangle has one ring of three points */ case TRIANGLETYPE: size += lwtriangle_to_wkb_size((LWTRIANGLE*)geom, variant); break; /* All these Collection types have ngeoms and geoms elements */ case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case COLLECTIONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: size += lwcollection_to_wkb_size((LWCOLLECTION*)geom, variant); break; /* Unknown type! */ default: lwerror("Unsupported geometry type: %s [%d]", lwtype_name(geom->type), geom->type); } return size; } /* TODO handle the TRIANGLE type properly */ static uint8_t* lwgeom_to_wkb_buf(const LWGEOM *geom, uint8_t *buf, uint8_t variant) { if ( lwgeom_is_empty(geom) ) return empty_to_wkb_buf(geom, buf, variant); switch ( geom->type ) { case POINTTYPE: return lwpoint_to_wkb_buf((LWPOINT*)geom, buf, variant); /* LineString and CircularString both have 'points' elements */ case CIRCSTRINGTYPE: case LINETYPE: return lwline_to_wkb_buf((LWLINE*)geom, buf, variant); /* Polygon has 'nrings' and 'rings' elements */ case POLYGONTYPE: return lwpoly_to_wkb_buf((LWPOLY*)geom, buf, variant); /* Triangle has one ring of three points */ case TRIANGLETYPE: return lwtriangle_to_wkb_buf((LWTRIANGLE*)geom, buf, variant); /* All these Collection types have 'ngeoms' and 'geoms' elements */ case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case COLLECTIONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: return lwcollection_to_wkb_buf((LWCOLLECTION*)geom, buf, variant); /* Unknown type! */ default: lwerror("Unsupported geometry type: %s [%d]", lwtype_name(geom->type), geom->type); } /* Return value to keep compiler happy. */ return 0; } /** * Convert LWGEOM to a char* in WKB format. Caller is responsible for freeing * the returned array. * * @param variant. Unsigned bitmask value. Accepts one of: WKB_ISO, WKB_EXTENDED, WKB_SFSQL. * Accepts any of: WKB_NDR, WKB_HEX. For example: Variant = ( WKB_ISO | WKB_NDR ) would * return the little-endian ISO form of WKB. For Example: Variant = ( WKB_EXTENDED | WKB_HEX ) * would return the big-endian extended form of WKB, as hex-encoded ASCII (the "canonical form"). * @param size_out If supplied, will return the size of the returned memory segment, * including the null terminator in the case of ASCII. */ uint8_t* lwgeom_to_wkb(const LWGEOM *geom, uint8_t variant, size_t *size_out) { size_t buf_size; uint8_t *buf = NULL; uint8_t *wkb_out = NULL; /* Initialize output size */ if ( size_out ) *size_out = 0; if ( geom == NULL ) { LWDEBUG(4,"Cannot convert NULL into WKB."); lwerror("Cannot convert NULL into WKB."); return NULL; } /* Calculate the required size of the output buffer */ buf_size = lwgeom_to_wkb_size(geom, variant); LWDEBUGF(4, "WKB output size: %d", buf_size); if ( buf_size == 0 ) { LWDEBUG(4,"Error calculating output WKB buffer size."); lwerror("Error calculating output WKB buffer size."); return NULL; } /* Hex string takes twice as much space as binary + a null character */ if ( variant & WKB_HEX ) { buf_size = 2 * buf_size + 1; LWDEBUGF(4, "Hex WKB output size: %d", buf_size); } /* If neither or both variants are specified, choose the native order */ if ( ! (variant & WKB_NDR || variant & WKB_XDR) || (variant & WKB_NDR && variant & WKB_XDR) ) { if ( getMachineEndian() == NDR ) variant = variant | WKB_NDR; else variant = variant | WKB_XDR; } /* Allocate the buffer */ buf = lwalloc(buf_size); if ( buf == NULL ) { LWDEBUGF(4,"Unable to allocate %d bytes for WKB output buffer.", buf_size); lwerror("Unable to allocate %d bytes for WKB output buffer.", buf_size); return NULL; } /* Retain a pointer to the front of the buffer for later */ wkb_out = buf; /* Write the WKB into the output buffer */ buf = lwgeom_to_wkb_buf(geom, buf, variant); /* Null the last byte if this is a hex output */ if ( variant & WKB_HEX ) { *buf = '\0'; buf++; } LWDEBUGF(4,"buf (%p) - wkb_out (%p) = %d", buf, wkb_out, buf - wkb_out); /* The buffer pointer should now land at the end of the allocated buffer space. Let's check. */ if ( buf_size != (buf - wkb_out) ) { LWDEBUG(4,"Output WKB is not the same size as the allocated buffer."); lwerror("Output WKB is not the same size as the allocated buffer."); lwfree(wkb_out); return NULL; } /* Report output size */ if ( size_out ) *size_out = buf_size; return wkb_out; } char* lwgeom_to_hexwkb(const LWGEOM *geom, uint8_t variant, size_t *size_out) { return (char*)lwgeom_to_wkb(geom, variant | WKB_HEX, size_out); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwlinearreferencing.c���������������������������������������������0000644�0000000�0000000�00000056111�12143123367�021740� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2011 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeom_log.h" static int segment_locate_along(const POINT4D *p1, const POINT4D *p2, double m, double offset, POINT4D *pn) { double m1 = p1->m; double m2 = p2->m; double mprop; /* M is out of range, no new point generated. */ if ( (m < FP_MIN(m1,m2)) || (m > FP_MAX(m1,m2)) ) { return LW_FALSE; } /* We'll just can out on this degenerate case for now. Correct behavior is probably an mprop of 0.5? Still would have to deal with case of true p1==p2. */ if( m1 == m2 ) { lwerror("Zero measure-length line encountered!"); } /* M is in range, new point to be generated. */ mprop = (m - m1) / (m2 - m1); pn->x = p1->x + (p2->x - p1->x) * mprop; pn->y = p1->y + (p2->y - p1->y) * mprop; pn->z = p1->z + (p2->z - p1->z) * mprop; pn->m = m; /* Offset to the left or right, if necessary. */ if ( offset != 0.0 ) { double theta = atan2(p2->y - p1->y, p2->x - p1->x); pn->x -= sin(theta) * offset; pn->y += cos(theta) * offset; } return LW_TRUE; } static POINTARRAY* ptarray_locate_along(const POINTARRAY *pa, double m, double offset) { int i; POINT4D p1, p2, pn; POINTARRAY *dpa = NULL; /* Can't do anything with degenerate point arrays */ if ( ! pa || pa->npoints < 2 ) return NULL; /* Walk through each segment in the point array */ for ( i = 1; i < pa->npoints; i++ ) { getPoint4d_p(pa, i-1, &p1); getPoint4d_p(pa, i, &p2); /* No derived point? Move to next segment. */ if ( segment_locate_along(&p1, &p2, m, offset, &pn) == LW_FALSE ) continue; /* No pointarray, make a fresh one */ if ( dpa == NULL ) dpa = ptarray_construct_empty(ptarray_has_z(pa), ptarray_has_m(pa), 8); /* Add our new point to the array */ ptarray_append_point(dpa, &pn, 0); } return dpa; } static LWMPOINT* lwline_locate_along(const LWLINE *lwline, double m, double offset) { POINTARRAY *opa = NULL; LWMPOINT *mp = NULL; LWGEOM *lwg = lwline_as_lwgeom(lwline); int hasz, hasm, srid; /* Return degenerates upwards */ if ( ! lwline ) return NULL; /* Create empty return shell */ srid = lwgeom_get_srid(lwg); hasz = lwgeom_has_z(lwg); hasm = lwgeom_has_m(lwg); if ( hasm ) { /* Find points along */ opa = ptarray_locate_along(lwline->points, m, offset); } else { LWLINE *lwline_measured = lwline_measured_from_lwline(lwline, 0.0, 1.0); opa = ptarray_locate_along(lwline_measured->points, m, offset); lwline_free(lwline_measured); } /* Return NULL as EMPTY */ if ( ! opa ) return lwmpoint_construct_empty(srid, hasz, hasm); /* Convert pointarray into a multipoint */ mp = lwmpoint_construct(srid, opa); ptarray_free(opa); return mp; } static LWMPOINT* lwmline_locate_along(const LWMLINE *lwmline, double m, double offset) { LWMPOINT *lwmpoint = NULL; LWGEOM *lwg = lwmline_as_lwgeom(lwmline); int i, j; /* Return degenerates upwards */ if ( (!lwmline) || (lwmline->ngeoms < 1) ) return NULL; /* Construct return */ lwmpoint = lwmpoint_construct_empty(lwgeom_get_srid(lwg), lwgeom_has_z(lwg), lwgeom_has_m(lwg)); /* Locate along each sub-line */ for ( i = 0; i < lwmline->ngeoms; i++ ) { LWMPOINT *along = lwline_locate_along(lwmline->geoms[i], m, offset); if ( along ) { if ( ! lwgeom_is_empty((LWGEOM*)along) ) { for ( j = 0; j < along->ngeoms; j++ ) { lwmpoint_add_lwpoint(lwmpoint, along->geoms[j]); } } /* Free the containing geometry, but leave the sub-geometries around */ along->ngeoms = 0; lwmpoint_free(along); } } return lwmpoint; } static LWMPOINT* lwpoint_locate_along(const LWPOINT *lwpoint, double m, double offset) { double point_m = lwpoint_get_m(lwpoint); LWGEOM *lwg = lwpoint_as_lwgeom(lwpoint); LWMPOINT *r = lwmpoint_construct_empty(lwgeom_get_srid(lwg), lwgeom_has_z(lwg), lwgeom_has_m(lwg)); if ( FP_EQUALS(m, point_m) ) { lwmpoint_add_lwpoint(r, lwpoint_clone(lwpoint)); } return r; } static LWMPOINT* lwmpoint_locate_along(const LWMPOINT *lwin, double m, double offset) { LWGEOM *lwg = lwmpoint_as_lwgeom(lwin); LWMPOINT *lwout = NULL; int i; /* Construct return */ lwout = lwmpoint_construct_empty(lwgeom_get_srid(lwg), lwgeom_has_z(lwg), lwgeom_has_m(lwg)); for ( i = 0; i < lwin->ngeoms; i++ ) { double point_m = lwpoint_get_m(lwin->geoms[i]); if ( FP_EQUALS(m, point_m) ) { lwmpoint_add_lwpoint(lwout, lwpoint_clone(lwin->geoms[i])); } } return lwout; } LWGEOM* lwgeom_locate_along(const LWGEOM *lwin, double m, double offset) { if ( ! lwin ) return NULL; if ( ! lwgeom_has_m(lwin) ) lwerror("Input geometry does not have a measure dimension"); switch (lwin->type) { case POINTTYPE: return (LWGEOM*)lwpoint_locate_along((LWPOINT*)lwin, m, offset); case MULTIPOINTTYPE: return (LWGEOM*)lwmpoint_locate_along((LWMPOINT*)lwin, m, offset); case LINETYPE: return (LWGEOM*)lwline_locate_along((LWLINE*)lwin, m, offset); case MULTILINETYPE: return (LWGEOM*)lwmline_locate_along((LWMLINE*)lwin, m, offset); /* Only line types supported right now */ /* TO DO: CurveString, CompoundCurve, MultiCurve */ /* TO DO: Point, MultiPoint */ default: lwerror("Only linear geometries are supported, %s provided.",lwtype_name(lwin->type)); return NULL; } return NULL; } /** * Given a POINT4D and an ordinate number, return * the value of the ordinate. * @param p input point * @param ordinate number (1=x, 2=y, 3=z, 4=m) * @return d value at that ordinate */ double lwpoint_get_ordinate(const POINT4D *p, char ordinate) { if ( ! p ) { lwerror("Null input geometry."); return 0.0; } if ( ! ( ordinate == 'X' || ordinate == 'Y' || ordinate == 'Z' || ordinate == 'M' ) ) { lwerror("Cannot extract %c ordinate.", ordinate); return 0.0; } if ( ordinate == 'X' ) return p->x; if ( ordinate == 'Y' ) return p->y; if ( ordinate == 'Z' ) return p->z; if ( ordinate == 'M' ) return p->m; /* X */ return p->x; } /** * Given a point, ordinate number and value, set that ordinate on the * point. */ void lwpoint_set_ordinate(POINT4D *p, char ordinate, double value) { if ( ! p ) { lwerror("Null input geometry."); return; } if ( ! ( ordinate == 'X' || ordinate == 'Y' || ordinate == 'Z' || ordinate == 'M' ) ) { lwerror("Cannot set %c ordinate.", ordinate); return; } LWDEBUGF(4, " setting ordinate %c to %g", ordinate, value); switch ( ordinate ) { case 'X': p->x = value; return; case 'Y': p->y = value; return; case 'Z': p->z = value; return; case 'M': p->m = value; return; } } /** * Given two points, a dimensionality, an ordinate, and an interpolation value * generate a new point that is proportionally between the input points, * using the values in the provided dimension as the scaling factors. */ int point_interpolate(const POINT4D *p1, const POINT4D *p2, POINT4D *p, int hasz, int hasm, char ordinate, double interpolation_value) { static char* dims = "XYZM"; double p1_value = lwpoint_get_ordinate(p1, ordinate); double p2_value = lwpoint_get_ordinate(p2, ordinate); double proportion; int i = 0; if ( ! ( ordinate == 'X' || ordinate == 'Y' || ordinate == 'Z' || ordinate == 'M' ) ) { lwerror("Cannot set %c ordinate.", ordinate); return 0; } if ( FP_MIN(p1_value, p2_value) > interpolation_value || FP_MAX(p1_value, p2_value) < interpolation_value ) { lwerror("Cannot interpolate to a value (%g) not between the input points (%g, %g).", interpolation_value, p1_value, p2_value); return 0; } proportion = fabs((interpolation_value - p1_value) / (p2_value - p1_value)); for ( i = 0; i < 4; i++ ) { double newordinate = 0.0; if ( dims[i] == 'Z' && ! hasz ) continue; if ( dims[i] == 'M' && ! hasm ) continue; p1_value = lwpoint_get_ordinate(p1, dims[i]); p2_value = lwpoint_get_ordinate(p2, dims[i]); newordinate = p1_value + proportion * (p2_value - p1_value); lwpoint_set_ordinate(p, dims[i], newordinate); LWDEBUGF(4, " clip ordinate(%c) p1_value(%g) p2_value(%g) proportion(%g) newordinate(%g) ", dims[i], p1_value, p2_value, proportion, newordinate ); } return 1; } /** * Clip an input POINT between two values, on any ordinate input. */ LWCOLLECTION* lwpoint_clip_to_ordinate_range(const LWPOINT *point, char ordinate, double from, double to) { LWCOLLECTION *lwgeom_out = NULL; char hasz, hasm; POINT4D p4d; double ordinate_value; /* Nothing to do with NULL */ if ( ! point ) lwerror("Null input geometry."); /* Ensure 'from' is less than 'to'. */ if ( to < from ) { double t = from; from = to; to = t; } /* Read Z/M info */ hasz = lwgeom_has_z(lwpoint_as_lwgeom(point)); hasm = lwgeom_has_m(lwpoint_as_lwgeom(point)); /* Prepare return object */ lwgeom_out = lwcollection_construct_empty(MULTIPOINTTYPE, point->srid, hasz, hasm); /* Test if ordinate is in range */ lwpoint_getPoint4d_p(point, &p4d); ordinate_value = lwpoint_get_ordinate(&p4d, ordinate); if ( from <= ordinate_value && to >= ordinate_value ) { LWPOINT *lwp = lwpoint_clone(point); lwcollection_add_lwgeom(lwgeom_out, lwpoint_as_lwgeom(lwp)); } /* Set the bbox */ lwgeom_drop_bbox((LWGEOM*)lwgeom_out); lwgeom_add_bbox((LWGEOM*)lwgeom_out); return lwgeom_out; } /** * Clip an input MULTIPOINT between two values, on any ordinate input. */ LWCOLLECTION* lwmpoint_clip_to_ordinate_range(const LWMPOINT *mpoint, char ordinate, double from, double to) { LWCOLLECTION *lwgeom_out = NULL; char hasz, hasm; int i; /* Nothing to do with NULL */ if ( ! mpoint ) lwerror("Null input geometry."); /* Ensure 'from' is less than 'to'. */ if ( to < from ) { double t = from; from = to; to = t; } /* Read Z/M info */ hasz = lwgeom_has_z(lwmpoint_as_lwgeom(mpoint)); hasm = lwgeom_has_m(lwmpoint_as_lwgeom(mpoint)); /* Prepare return object */ lwgeom_out = lwcollection_construct_empty(MULTIPOINTTYPE, mpoint->srid, hasz, hasm); /* For each point, is its ordinate value between from and to? */ for ( i = 0; i < mpoint->ngeoms; i ++ ) { POINT4D p4d; double ordinate_value; lwpoint_getPoint4d_p(mpoint->geoms[i], &p4d); ordinate_value = lwpoint_get_ordinate(&p4d, ordinate); if ( from <= ordinate_value && to >= ordinate_value ) { LWPOINT *lwp = lwpoint_clone(mpoint->geoms[i]); lwcollection_add_lwgeom(lwgeom_out, lwpoint_as_lwgeom(lwp)); } } /* Set the bbox */ lwgeom_drop_bbox((LWGEOM*)lwgeom_out); lwgeom_add_bbox((LWGEOM*)lwgeom_out); return lwgeom_out; } /** * Clip an input MULTILINESTRING between two values, on any ordinate input. */ LWCOLLECTION* lwmline_clip_to_ordinate_range(const LWMLINE *mline, char ordinate, double from, double to) { LWCOLLECTION *lwgeom_out = NULL; if ( ! mline ) { lwerror("Null input geometry."); return NULL; } if ( mline->ngeoms == 1) { lwgeom_out = lwline_clip_to_ordinate_range(mline->geoms[0], ordinate, from, to); } else { LWCOLLECTION *col; char hasz = lwgeom_has_z(lwmline_as_lwgeom(mline)); char hasm = lwgeom_has_m(lwmline_as_lwgeom(mline)); int i, j; char homogeneous = 1; size_t geoms_size = 0; lwgeom_out = lwcollection_construct_empty(MULTILINETYPE, mline->srid, hasz, hasm); FLAGS_SET_Z(lwgeom_out->flags, hasz); FLAGS_SET_M(lwgeom_out->flags, hasm); for ( i = 0; i < mline->ngeoms; i ++ ) { col = lwline_clip_to_ordinate_range(mline->geoms[i], ordinate, from, to); if ( col ) { /* Something was left after the clip. */ if ( lwgeom_out->ngeoms + col->ngeoms > geoms_size ) { geoms_size += 16; if ( lwgeom_out->geoms ) { lwgeom_out->geoms = lwrealloc(lwgeom_out->geoms, geoms_size * sizeof(LWGEOM*)); } else { lwgeom_out->geoms = lwalloc(geoms_size * sizeof(LWGEOM*)); } } for ( j = 0; j < col->ngeoms; j++ ) { lwgeom_out->geoms[lwgeom_out->ngeoms] = col->geoms[j]; lwgeom_out->ngeoms++; } if ( col->type != mline->type ) { homogeneous = 0; } /* Shallow free the struct, leaving the geoms behind. */ if ( col->bbox ) lwfree(col->bbox); lwfree(col->geoms); lwfree(col); } } lwgeom_drop_bbox((LWGEOM*)lwgeom_out); lwgeom_add_bbox((LWGEOM*)lwgeom_out); if ( ! homogeneous ) { lwgeom_out->type = COLLECTIONTYPE; } } if ( ! lwgeom_out || lwgeom_out->ngeoms == 0 ) /* Nothing left after clip. */ { return NULL; } return lwgeom_out; } /** * Take in a LINESTRING and return a MULTILINESTRING of those portions of the * LINESTRING between the from/to range for the specified ordinate (XYZM) */ LWCOLLECTION* lwline_clip_to_ordinate_range(const LWLINE *line, char ordinate, double from, double to) { POINTARRAY *pa_in = NULL; LWCOLLECTION *lwgeom_out = NULL; POINTARRAY *dp = NULL; int i; int added_last_point = 0; POINT4D *p = NULL, *q = NULL, *r = NULL; double ordinate_value_p = 0.0, ordinate_value_q = 0.0; char hasz = lwgeom_has_z(lwline_as_lwgeom(line)); char hasm = lwgeom_has_m(lwline_as_lwgeom(line)); char dims = FLAGS_NDIMS(line->flags); /* Null input, nothing we can do. */ if ( ! line ) { lwerror("Null input geometry."); return NULL; } /* Ensure 'from' is less than 'to'. */ if ( to < from ) { double t = from; from = to; to = t; } LWDEBUGF(4, "from = %g, to = %g, ordinate = %c", from, to, ordinate); LWDEBUGF(4, "%s", lwgeom_to_ewkt((LWGEOM*)line)); /* Asking for an ordinate we don't have. Error. */ if ( (ordinate == 'Z' && ! hasz) || (ordinate == 'M' && ! hasm) ) { lwerror("Cannot clip on ordinate %d in a %d-d geometry.", ordinate, dims); return NULL; } /* Prepare our working point objects. */ p = lwalloc(sizeof(POINT4D)); q = lwalloc(sizeof(POINT4D)); r = lwalloc(sizeof(POINT4D)); /* Construct a collection to hold our outputs. */ lwgeom_out = lwcollection_construct_empty(MULTILINETYPE, line->srid, hasz, hasm); /* Get our input point array */ pa_in = line->points; for ( i = 0; i < pa_in->npoints; i++ ) { LWDEBUGF(4, "Point #%d", i); LWDEBUGF(4, "added_last_point %d", added_last_point); if ( i > 0 ) { *q = *p; ordinate_value_q = ordinate_value_p; } getPoint4d_p(pa_in, i, p); ordinate_value_p = lwpoint_get_ordinate(p, ordinate); LWDEBUGF(4, " ordinate_value_p %g (current)", ordinate_value_p); LWDEBUGF(4, " ordinate_value_q %g (previous)", ordinate_value_q); /* Is this point inside the ordinate range? Yes. */ if ( ordinate_value_p >= from && ordinate_value_p <= to ) { LWDEBUGF(4, " inside ordinate range (%g, %g)", from, to); if ( ! added_last_point ) { LWDEBUG(4," new ptarray required"); /* We didn't add the previous point, so this is a new segment. * Make a new point array. */ dp = ptarray_construct_empty(hasz, hasm, 32); /* We're transiting into the range so add an interpolated * point at the range boundary. * If we're on a boundary and crossing from the far side, * we also need an interpolated point. */ if ( i > 0 && ( /* Don't try to interpolate if this is the first point */ ( ordinate_value_p > from && ordinate_value_p < to ) || /* Inside */ ( ordinate_value_p == from && ordinate_value_q > to ) || /* Hopping from above */ ( ordinate_value_p == to && ordinate_value_q < from ) ) ) /* Hopping from below */ { double interpolation_value; (ordinate_value_q > to) ? (interpolation_value = to) : (interpolation_value = from); point_interpolate(q, p, r, hasz, hasm, ordinate, interpolation_value); ptarray_append_point(dp, r, LW_FALSE); LWDEBUGF(4, "[0] interpolating between (%g, %g) with interpolation point (%g)", ordinate_value_q, ordinate_value_p, interpolation_value); } } /* Add the current vertex to the point array. */ ptarray_append_point(dp, p, LW_FALSE); if ( ordinate_value_p == from || ordinate_value_p == to ) { added_last_point = 2; /* Added on boundary. */ } else { added_last_point = 1; /* Added inside range. */ } } /* Is this point inside the ordinate range? No. */ else { LWDEBUGF(4, " added_last_point (%d)", added_last_point); if ( added_last_point == 1 ) { /* We're transiting out of the range, so add an interpolated point * to the point array at the range boundary. */ double interpolation_value; (ordinate_value_p > to) ? (interpolation_value = to) : (interpolation_value = from); point_interpolate(q, p, r, hasz, hasm, ordinate, interpolation_value); ptarray_append_point(dp, r, LW_FALSE); LWDEBUGF(4, " [1] interpolating between (%g, %g) with interpolation point (%g)", ordinate_value_q, ordinate_value_p, interpolation_value); } else if ( added_last_point == 2 ) { /* We're out and the last point was on the boundary. * If the last point was the near boundary, nothing to do. * If it was the far boundary, we need an interpolated point. */ if ( from != to && ( (ordinate_value_q == from && ordinate_value_p > from) || (ordinate_value_q == to && ordinate_value_p < to) ) ) { double interpolation_value; (ordinate_value_p > to) ? (interpolation_value = to) : (interpolation_value = from); point_interpolate(q, p, r, hasz, hasm, ordinate, interpolation_value); ptarray_append_point(dp, r, LW_FALSE); LWDEBUGF(4, " [2] interpolating between (%g, %g) with interpolation point (%g)", ordinate_value_q, ordinate_value_p, interpolation_value); } } else if ( i && ordinate_value_q < from && ordinate_value_p > to ) { /* We just hopped over the whole range, from bottom to top, * so we need to add *two* interpolated points! */ dp = ptarray_construct(hasz, hasm, 2); /* Interpolate lower point. */ point_interpolate(p, q, r, hasz, hasm, ordinate, from); ptarray_set_point4d(dp, 0, r); /* Interpolate upper point. */ point_interpolate(p, q, r, hasz, hasm, ordinate, to); ptarray_set_point4d(dp, 1, r); } else if ( i && ordinate_value_q > to && ordinate_value_p < from ) { /* We just hopped over the whole range, from top to bottom, * so we need to add *two* interpolated points! */ dp = ptarray_construct(hasz, hasm, 2); /* Interpolate upper point. */ point_interpolate(p, q, r, hasz, hasm, ordinate, to); ptarray_set_point4d(dp, 0, r); /* Interpolate lower point. */ point_interpolate(p, q, r, hasz, hasm, ordinate, from); ptarray_set_point4d(dp, 1, r); } /* We have an extant point-array, save it out to a multi-line. */ if ( dp ) { LWDEBUG(4, "saving pointarray to multi-line (1)"); /* Only one point, so we have to make an lwpoint to hold this * and set the overall output type to a generic collection. */ if ( dp->npoints == 1 ) { LWPOINT *opoint = lwpoint_construct(line->srid, NULL, dp); lwgeom_out->type = COLLECTIONTYPE; lwgeom_out = lwcollection_add_lwgeom(lwgeom_out, lwpoint_as_lwgeom(opoint)); } else { LWLINE *oline = lwline_construct(line->srid, NULL, dp); lwgeom_out = lwcollection_add_lwgeom(lwgeom_out, lwline_as_lwgeom(oline)); } /* Pointarray is now owned by lwgeom_out, so drop reference to it */ dp = NULL; } added_last_point = 0; } } /* Still some points left to be saved out. */ if ( dp && dp->npoints > 0 ) { LWDEBUG(4, "saving pointarray to multi-line (2)"); LWDEBUGF(4, "dp->npoints == %d", dp->npoints); LWDEBUGF(4, "lwgeom_out->ngeoms == %d", lwgeom_out->ngeoms); if ( dp->npoints == 1 ) { LWPOINT *opoint = lwpoint_construct(line->srid, NULL, dp); lwgeom_out->type = COLLECTIONTYPE; lwgeom_out = lwcollection_add_lwgeom(lwgeom_out, lwpoint_as_lwgeom(opoint)); } else { LWLINE *oline = lwline_construct(line->srid, NULL, dp); lwgeom_out = lwcollection_add_lwgeom(lwgeom_out, lwline_as_lwgeom(oline)); } /* Pointarray is now owned by lwgeom_out, so drop reference to it */ dp = NULL; } lwfree(p); lwfree(q); lwfree(r); if ( lwgeom_out->ngeoms > 0 ) { lwgeom_drop_bbox((LWGEOM*)lwgeom_out); lwgeom_add_bbox((LWGEOM*)lwgeom_out); } return lwgeom_out; } LWCOLLECTION* lwgeom_clip_to_ordinate_range(const LWGEOM *lwin, char ordinate, double from, double to, double offset) { LWCOLLECTION *out_col; LWCOLLECTION *out_offset; int i; if ( ! lwin ) lwerror("lwgeom_clip_to_ordinate_range: null input geometry!"); switch ( lwin->type ) { case LINETYPE: out_col = lwline_clip_to_ordinate_range((LWLINE*)lwin, ordinate, from, to); break; case MULTILINETYPE: out_col = lwmline_clip_to_ordinate_range((LWMLINE*)lwin, ordinate, from, to); break; case MULTIPOINTTYPE: out_col = lwmpoint_clip_to_ordinate_range((LWMPOINT*)lwin, ordinate, from, to); break; case POINTTYPE: out_col = lwpoint_clip_to_ordinate_range((LWPOINT*)lwin, ordinate, from, to); break; default: lwerror("This function does not accept %s geometries.", lwtype_name(lwin->type)); return NULL;; } /* Stop if result is NULL */ if ( out_col == NULL ) lwerror("lwgeom_clip_to_ordinate_range clipping routine returned NULL"); /* Return if we aren't going to offset the result */ if ( FP_EQUALS(offset, 0.0) || lwgeom_is_empty(lwcollection_as_lwgeom(out_col)) ) return out_col; /* Construct a collection to hold our outputs. */ /* Things get ugly: GEOS offset drops Z's and M's so we have to drop ours */ out_offset = lwcollection_construct_empty(MULTILINETYPE, lwin->srid, 0, 0); /* Try and offset the linear portions of the return value */ for ( i = 0; i < out_col->ngeoms; i++ ) { int type = out_col->geoms[i]->type; if ( type == POINTTYPE ) { lwnotice("lwgeom_clip_to_ordinate_range cannot offset a clipped point"); continue; } else if ( type == LINETYPE ) { /* lwgeom_offsetcurve(line, offset, quadsegs, joinstyle (round), mitrelimit) */ LWGEOM *lwoff = lwgeom_offsetcurve(lwgeom_as_lwline(out_col->geoms[i]), offset, 8, 1, 5.0); if ( ! lwoff ) { lwerror("lwgeom_offsetcurve returned null"); } lwcollection_add_lwgeom(out_offset, lwoff); } else { lwerror("lwgeom_clip_to_ordinate_range found an unexpected type (%s) in the offset routine",lwtype_name(type)); } } return out_offset; } LWCOLLECTION* lwgeom_locate_between(const LWGEOM *lwin, double from, double to, double offset) { if ( ! lwgeom_has_m(lwin) ) lwerror("Input geometry does not have a measure dimension"); return lwgeom_clip_to_ordinate_range(lwin, 'M', from, to, offset); } double lwgeom_interpolate_point(const LWGEOM *lwin, const LWPOINT *lwpt) { POINT4D p, p_proj; double ret = 0.0; if ( ! lwin ) lwerror("lwgeom_interpolate_point: null input geometry!"); if ( ! lwgeom_has_m(lwin) ) lwerror("Input geometry does not have a measure dimension"); if ( lwgeom_is_empty(lwin) || lwpoint_is_empty(lwpt) ) lwerror("Input geometry is empty"); switch ( lwin->type ) { case LINETYPE: { LWLINE *lwline = lwgeom_as_lwline(lwin); lwpoint_getPoint4d_p(lwpt, &p); ret = ptarray_locate_point(lwline->points, &p, NULL, &p_proj); ret = p_proj.m; break; } default: lwerror("This function does not accept %s geometries.", lwtype_name(lwin->type)); } return ret; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwmpoly.c���������������������������������������������������������0000644�0000000�0000000�00000002337�11722777314�017430� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" void lwmpoly_release(LWMPOLY *lwmpoly) { lwgeom_release(lwmpoly_as_lwgeom(lwmpoly)); } LWMPOLY * lwmpoly_construct_empty(int srid, char hasz, char hasm) { LWMPOLY *ret = (LWMPOLY*)lwcollection_construct_empty(MULTIPOLYGONTYPE, srid, hasz, hasm); return ret; } LWMPOLY* lwmpoly_add_lwpoly(LWMPOLY *mobj, const LWPOLY *obj) { return (LWMPOLY*)lwcollection_add_lwgeom((LWCOLLECTION*)mobj, (LWGEOM*)obj); } void lwmpoly_free(LWMPOLY *mpoly) { int i; if ( ! mpoly ) return; if ( mpoly->bbox ) lwfree(mpoly->bbox); for ( i = 0; i < mpoly->ngeoms; i++ ) if ( mpoly->geoms && mpoly->geoms[i] ) lwpoly_free(mpoly->geoms[i]); if ( mpoly->geoms ) lwfree(mpoly->geoms); lwfree(mpoly); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkt.h��������������������������������������������������������0000644�0000000�0000000�00000003675�11766736215�017601� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "liblwgeom_internal.h" /* * Coordinate object to hold information about last coordinate temporarily. * We need to know how many dimensions there are at any given time. */ typedef struct { uint8_t flags; double x; double y; double z; double m; } POINT; /* * Global that holds the final output geometry for the WKT parser. */ extern LWGEOM_PARSER_RESULT global_parser_result; extern const char *parser_error_messages[]; /* * Prototypes for the lexer */ extern void wkt_lexer_init(char *str); extern void wkt_lexer_close(void); /* * Functions called from within the bison parser to construct geometries. */ int wkt_lexer_read_srid(char *str); POINT wkt_parser_coord_2(double c1, double c2); POINT wkt_parser_coord_3(double c1, double c2, double c3); POINT wkt_parser_coord_4(double c1, double c2, double c3, double c4); POINTARRAY* wkt_parser_ptarray_add_coord(POINTARRAY *pa, POINT p); POINTARRAY* wkt_parser_ptarray_new(POINT p); LWGEOM* wkt_parser_point_new(POINTARRAY *pa, char *dimensionality); LWGEOM* wkt_parser_linestring_new(POINTARRAY *pa, char *dimensionality); LWGEOM* wkt_parser_circularstring_new(POINTARRAY *pa, char *dimensionality); LWGEOM* wkt_parser_triangle_new(POINTARRAY *pa, char *dimensionality); LWGEOM* wkt_parser_polygon_new(POINTARRAY *pa, char dimcheck); LWGEOM* wkt_parser_polygon_add_ring(LWGEOM *poly, POINTARRAY *pa, char dimcheck); LWGEOM* wkt_parser_polygon_finalize(LWGEOM *poly, char *dimensionality); LWGEOM* wkt_parser_curvepolygon_new(LWGEOM *ring); LWGEOM* wkt_parser_curvepolygon_add_ring(LWGEOM *poly, LWGEOM *ring); LWGEOM* wkt_parser_curvepolygon_finalize(LWGEOM *poly, char *dimensionality); LWGEOM* wkt_parser_compound_add_geom(LWGEOM *col, LWGEOM *geom); LWGEOM* wkt_parser_collection_new(LWGEOM *geom); LWGEOM* wkt_parser_collection_add_geom(LWGEOM *col, LWGEOM *geom); LWGEOM* wkt_parser_collection_finalize(int lwtype, LWGEOM *col, char *dimensionality); void wkt_parser_geometry_new(LWGEOM *geom, int srid); �������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwout_gml.c�������������������������������������������������������0000644�0000000�0000000�00000122054�11756530407�017732� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwout_gml.c 9772 2012-05-21 21:17:59Z colivier $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2011 Sandro Santilli <strk@keybit.net> * Copyright 2010-2012 Oslandia * Copyright 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /** * @file GML output routines. * **********************************************************************/ #include <string.h> #include "liblwgeom_internal.h" static size_t asgml2_point_size(const LWPOINT *point, const char *srs, int precision, const char *prefix); static char *asgml2_point(const LWPOINT *point, const char *srs, int precision, const char *prefix); static size_t asgml2_line_size(const LWLINE *line, const char *srs, int precision, const char *prefix); static char *asgml2_line(const LWLINE *line, const char *srs, int precision, const char *prefix); static size_t asgml2_poly_size(const LWPOLY *poly, const char *srs, int precision, const char *prefix); static char *asgml2_poly(const LWPOLY *poly, const char *srs, int precision, const char *prefix); static size_t asgml2_multi_size(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix); static char *asgml2_multi(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix); static size_t asgml2_collection_size(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix); static char *asgml2_collection(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix); static size_t pointArray_toGML2(POINTARRAY *pa, char *buf, int precision); static size_t asgml3_point_size(const LWPOINT *point, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_point(const LWPOINT *point, const char *srs, int precision, int opts, const char *prefix, const char *id); static size_t asgml3_line_size(const LWLINE *line, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_line(const LWLINE *line, const char *srs, int precision, int opts, const char *prefix, const char *id); static size_t asgml3_poly_size(const LWPOLY *poly, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_poly(const LWPOLY *poly, const char *srs, int precision, int opts, int is_patch, const char *prefix, const char *id); static size_t asgml3_triangle_size(const LWTRIANGLE *triangle, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_triangle(const LWTRIANGLE *triangle, const char *srs, int precision, int opts, const char *prefix, const char *id); static size_t asgml3_multi_size(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_multi(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_psurface(const LWPSURFACE *psur, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_tin(const LWTIN *tin, const char *srs, int precision, int opts, const char *prefix, const char *id); static size_t asgml3_collection_size(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id); static char *asgml3_collection(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id); static size_t pointArray_toGML3(POINTARRAY *pa, char *buf, int precision, int opts); static size_t pointArray_GMLsize(POINTARRAY *pa, int precision); static char * gbox_to_gml2(const GBOX *bbox, const char *srs, int precision, const char *prefix) { int size; POINT4D pt; POINTARRAY *pa; char *ptr, *output; size_t prefixlen = strlen(prefix); if ( ! bbox ) { size = ( sizeof("<Box>/") + (prefixlen*2) ) * 2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); ptr = output = lwalloc(size); ptr += sprintf(ptr, "<%sBox", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); ptr += sprintf(ptr, "/>"); return output; } pa = ptarray_construct_empty(FLAGS_GET_Z(bbox->flags), 0, 2); pt.x = bbox->xmin; pt.y = bbox->ymin; if (FLAGS_GET_Z(bbox->flags)) pt.z = bbox->zmin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = bbox->xmax; pt.y = bbox->ymax; if (FLAGS_GET_Z(bbox->flags)) pt.z = bbox->zmax; ptarray_append_point(pa, &pt, LW_TRUE); size = pointArray_GMLsize(pa, precision); size += ( sizeof("<Box><coordinates>/") + (prefixlen*2) ) * 2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); ptr = output = lwalloc(size); if ( srs ) ptr += sprintf(ptr, "<%sBox srsName=\"%s\">", prefix, srs); else ptr += sprintf(ptr, "<%sBox>", prefix); ptr += sprintf(ptr, "<%scoordinates>", prefix); ptr += pointArray_toGML2(pa, ptr, precision); ptr += sprintf(ptr, "</%scoordinates></%sBox>", prefix, prefix); ptarray_free(pa); return output; } static char * gbox_to_gml3(const GBOX *bbox, const char *srs, int precision, int opts, const char *prefix) { int size; POINT4D pt; POINTARRAY *pa; char *ptr, *output; size_t prefixlen = strlen(prefix); int dimension = 2; if ( ! bbox ) { size = ( sizeof("<Envelope>/") + (prefixlen*2) ) * 2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); ptr = output = lwalloc(size); ptr += sprintf(ptr, "<%sEnvelope", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); ptr += sprintf(ptr, "/>"); return output; } if (FLAGS_GET_Z(bbox->flags)) dimension = 3; pa = ptarray_construct_empty(FLAGS_GET_Z(bbox->flags), 0, 1); pt.x = bbox->xmin; pt.y = bbox->ymin; if (FLAGS_GET_Z(bbox->flags)) pt.z = bbox->zmin; ptarray_append_point(pa, &pt, LW_TRUE); size = pointArray_GMLsize(pa, precision) * 2; size += ( sizeof("<Envelope><lowerCorner><upperCorner>//") + (prefixlen*3) ) * 2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); if ( IS_DIMS(opts) ) size += sizeof(" srsDimension=. ."); ptr = output = lwalloc(size); ptr += sprintf(ptr, "<%sEnvelope", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if ( IS_DIMS(opts) ) ptr += sprintf(ptr, " srsDimension=\"%d\"", dimension); ptr += sprintf(ptr, ">"); ptr += sprintf(ptr, "<%slowerCorner>", prefix); ptr += pointArray_toGML3(pa, ptr, precision, opts); ptr += sprintf(ptr, "</%slowerCorner>", prefix); ptarray_remove_point(pa, 0); pt.x = bbox->xmax; pt.y = bbox->ymax; if (FLAGS_GET_Z(bbox->flags)) pt.z = bbox->zmax; ptarray_append_point(pa, &pt, LW_TRUE); ptr += sprintf(ptr, "<%supperCorner>", prefix); ptr += pointArray_toGML3(pa, ptr, precision, opts); ptr += sprintf(ptr, "</%supperCorner>", prefix); ptr += sprintf(ptr, "</%sEnvelope>", prefix); ptarray_free(pa); return output; } extern char * lwgeom_extent_to_gml2(const LWGEOM *geom, const char *srs, int precision, const char *prefix) { const GBOX* bbox = lwgeom_get_bbox(geom); /* if ( ! bbox ) { lwerror("lwgeom_extent_to_gml2: empty geometry doesn't have a bounding box"); return NULL; } */ char *ret = gbox_to_gml2(bbox, srs, precision, prefix); return ret; } extern char * lwgeom_extent_to_gml3(const LWGEOM *geom, const char *srs, int precision, int opts, const char *prefix) { const GBOX* bbox = lwgeom_get_bbox(geom); /* if ( ! bbox ) { lwerror("lwgeom_extent_to_gml3: empty geometry doesn't have a bounding box"); return NULL; } */ return gbox_to_gml3(bbox, srs, precision, opts, prefix); } /** * @brief VERSION GML 2 * takes a GEOMETRY and returns a GML2 representation */ extern char * lwgeom_to_gml2(const LWGEOM *geom, const char *srs, int precision, const char* prefix) { int type = geom->type; /* Return null for empty (#1377) */ if ( lwgeom_is_empty(geom) ) return NULL; switch (type) { case POINTTYPE: return asgml2_point((LWPOINT*)geom, srs, precision, prefix); case LINETYPE: return asgml2_line((LWLINE*)geom, srs, precision, prefix); case POLYGONTYPE: return asgml2_poly((LWPOLY*)geom, srs, precision, prefix); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: return asgml2_multi((LWCOLLECTION*)geom, srs, precision, prefix); case COLLECTIONTYPE: return asgml2_collection((LWCOLLECTION*)geom, srs, precision, prefix); case TRIANGLETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: lwerror("Cannot convert %s to GML2. Try ST_AsGML(3, <geometry>) to generate GML3.", lwtype_name(type)); return NULL; default: lwerror("lwgeom_to_gml2: '%s' geometry type not supported", lwtype_name(type)); return NULL; } } static size_t asgml2_point_size(const LWPOINT *point, const char *srs, int precision, const char* prefix) { int size; size_t prefixlen = strlen(prefix); size = pointArray_GMLsize(point->point, precision); size += ( sizeof("<point><coordinates>/") + (prefixlen*2) ) * 2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); return size; } static size_t asgml2_point_buf(const LWPOINT *point, const char *srs, char *output, int precision, const char* prefix) { char *ptr = output; ptr += sprintf(ptr, "<%sPoint", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if ( lwpoint_is_empty(point) ) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); ptr += sprintf(ptr, "<%scoordinates>", prefix); ptr += pointArray_toGML2(point->point, ptr, precision); ptr += sprintf(ptr, "</%scoordinates></%sPoint>", prefix, prefix); return (ptr-output); } static char * asgml2_point(const LWPOINT *point, const char *srs, int precision, const char *prefix) { char *output; int size; size = asgml2_point_size(point, srs, precision, prefix); output = lwalloc(size); asgml2_point_buf(point, srs, output, precision, prefix); return output; } static size_t asgml2_line_size(const LWLINE *line, const char *srs, int precision, const char *prefix) { int size; size_t prefixlen = strlen(prefix); size = pointArray_GMLsize(line->points, precision); size += ( sizeof("<linestring><coordinates>/") + (prefixlen*2) ) * 2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); return size; } static size_t asgml2_line_buf(const LWLINE *line, const char *srs, char *output, int precision, const char *prefix) { char *ptr=output; ptr += sprintf(ptr, "<%sLineString", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if ( lwline_is_empty(line) ) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); ptr += sprintf(ptr, "<%scoordinates>", prefix); ptr += pointArray_toGML2(line->points, ptr, precision); ptr += sprintf(ptr, "</%scoordinates></%sLineString>", prefix, prefix); return (ptr-output); } static char * asgml2_line(const LWLINE *line, const char *srs, int precision, const char *prefix) { char *output; int size; size = asgml2_line_size(line, srs, precision, prefix); output = lwalloc(size); asgml2_line_buf(line, srs, output, precision, prefix); return output; } static size_t asgml2_poly_size(const LWPOLY *poly, const char *srs, int precision, const char *prefix) { size_t size; int i; size_t prefixlen = strlen(prefix); size = sizeof("<polygon></polygon>") + prefixlen*2; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); if ( lwpoly_is_empty(poly) ) return size; size += ( sizeof("<outerboundaryis><linearring><coordinates>/") + ( prefixlen*3) ) * 2; size += ( sizeof("<innerboundaryis><linearring><coordinates>/") + ( prefixlen*2) ) * 2 * poly->nrings; for (i=0; i<poly->nrings; i++) size += pointArray_GMLsize(poly->rings[i], precision); return size; } static size_t asgml2_poly_buf(const LWPOLY *poly, const char *srs, char *output, int precision, const char *prefix) { int i; char *ptr=output; ptr += sprintf(ptr, "<%sPolygon", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if ( lwpoly_is_empty(poly) ) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); ptr += sprintf(ptr, "<%souterBoundaryIs><%sLinearRing><%scoordinates>", prefix, prefix, prefix); ptr += pointArray_toGML2(poly->rings[0], ptr, precision); ptr += sprintf(ptr, "</%scoordinates></%sLinearRing></%souterBoundaryIs>", prefix, prefix, prefix); for (i=1; i<poly->nrings; i++) { ptr += sprintf(ptr, "<%sinnerBoundaryIs><%sLinearRing><%scoordinates>", prefix, prefix, prefix); ptr += pointArray_toGML2(poly->rings[i], ptr, precision); ptr += sprintf(ptr, "</%scoordinates></%sLinearRing></%sinnerBoundaryIs>", prefix, prefix, prefix); } ptr += sprintf(ptr, "</%sPolygon>", prefix); return (ptr-output); } static char * asgml2_poly(const LWPOLY *poly, const char *srs, int precision, const char *prefix) { char *output; int size; size = asgml2_poly_size(poly, srs, precision, prefix); output = lwalloc(size); asgml2_poly_buf(poly, srs, output, precision, prefix); return output; } /* * Compute max size required for GML version of this * inspected geometry. Will recurse when needed. * Don't call this with single-geoms inspected. */ static size_t asgml2_multi_size(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix) { int i; size_t size; size_t prefixlen = strlen(prefix); LWGEOM *subgeom; /* the longest possible multi version */ size = sizeof("<MultiLineString></MultiLineString>"); size += 2*prefixlen; if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; if (subgeom->type == POINTTYPE) { size += ( sizeof("<pointMember>/") + prefixlen ) * 2; size += asgml2_point_size((LWPOINT*)subgeom, 0, precision, prefix); } else if (subgeom->type == LINETYPE) { size += ( sizeof("<lineStringMember>/") + prefixlen ) * 2; size += asgml2_line_size((LWLINE*)subgeom, 0, precision, prefix); } else if (subgeom->type == POLYGONTYPE) { size += ( sizeof("<polygonMember>/") + prefixlen ) * 2; size += asgml2_poly_size((LWPOLY*)subgeom, 0, precision, prefix); } } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asgml2_multi_buf(const LWCOLLECTION *col, const char *srs, char *output, int precision, const char *prefix) { int type = col->type; char *ptr, *gmltype; int i; LWGEOM *subgeom; ptr = output; gmltype=""; if (type == MULTIPOINTTYPE) gmltype = "MultiPoint"; else if (type == MULTILINETYPE) gmltype = "MultiLineString"; else if (type == MULTIPOLYGONTYPE) gmltype = "MultiPolygon"; /* Open outmost tag */ ptr += sprintf(ptr, "<%s%s", prefix, gmltype); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (!col->ngeoms) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; if (subgeom->type == POINTTYPE) { ptr += sprintf(ptr, "<%spointMember>", prefix); ptr += asgml2_point_buf((LWPOINT*)subgeom, 0, ptr, precision, prefix); ptr += sprintf(ptr, "</%spointMember>", prefix); } else if (subgeom->type == LINETYPE) { ptr += sprintf(ptr, "<%slineStringMember>", prefix); ptr += asgml2_line_buf((LWLINE*)subgeom, 0, ptr, precision, prefix); ptr += sprintf(ptr, "</%slineStringMember>", prefix); } else if (subgeom->type == POLYGONTYPE) { ptr += sprintf(ptr, "<%spolygonMember>", prefix); ptr += asgml2_poly_buf((LWPOLY*)subgeom, 0, ptr, precision, prefix); ptr += sprintf(ptr, "</%spolygonMember>", prefix); } } /* Close outmost tag */ ptr += sprintf(ptr, "</%s%s>", prefix, gmltype); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asgml2_multi(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix) { char *gml; size_t size; size = asgml2_multi_size(col, srs, precision, prefix); gml = lwalloc(size); asgml2_multi_buf(col, srs, gml, precision, prefix); return gml; } /* * Don't call this with single-geoms! */ static size_t asgml2_collection_size(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix) { int i; size_t size; size_t prefixlen = strlen(prefix); LWGEOM *subgeom; size = sizeof("<MultiGeometry></MultiGeometry>"); size += (prefixlen * 2); if ( srs ) size += strlen(srs) + sizeof(" srsName=.."); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; size += ( sizeof("<geometryMember>/") + prefixlen ) * 2; if ( subgeom->type == POINTTYPE) { size += asgml2_point_size((LWPOINT*)subgeom, 0, precision, prefix); } else if ( subgeom->type == LINETYPE) { size += asgml2_line_size((LWLINE*)subgeom, 0, precision, prefix); } else if ( subgeom->type == POLYGONTYPE) { size += asgml2_poly_size((LWPOLY*)subgeom, 0, precision, prefix); } else if ( lwgeom_is_collection(subgeom) ) { size += asgml2_collection_size((LWCOLLECTION*)subgeom, 0, precision, prefix); } else lwerror("asgml2_collection_size: Unable to process geometry type!"); } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asgml2_collection_buf(const LWCOLLECTION *col, const char *srs, char *output, int precision, const char *prefix) { char *ptr; int i; LWGEOM *subgeom; ptr = output; /* Open outmost tag */ ptr += sprintf(ptr, "<%sMultiGeometry", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (!col->ngeoms) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; ptr += sprintf(ptr, "<%sgeometryMember>", prefix); if (subgeom->type == POINTTYPE) { ptr += asgml2_point_buf((LWPOINT*)subgeom, 0, ptr, precision, prefix); } else if (subgeom->type == LINETYPE) { ptr += asgml2_line_buf((LWLINE*)subgeom, 0, ptr, precision, prefix); } else if (subgeom->type == POLYGONTYPE) { ptr += asgml2_poly_buf((LWPOLY*)subgeom, 0, ptr, precision, prefix); } else if (lwgeom_is_collection(subgeom)) { if (subgeom->type == COLLECTIONTYPE) ptr += asgml2_collection_buf((LWCOLLECTION*)subgeom, 0, ptr, precision, prefix); else ptr += asgml2_multi_buf((LWCOLLECTION*)subgeom, 0, ptr, precision, prefix); } ptr += sprintf(ptr, "</%sgeometryMember>", prefix); } /* Close outmost tag */ ptr += sprintf(ptr, "</%sMultiGeometry>", prefix); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asgml2_collection(const LWCOLLECTION *col, const char *srs, int precision, const char *prefix) { char *gml; size_t size; size = asgml2_collection_size(col, srs, precision, prefix); gml = lwalloc(size); asgml2_collection_buf(col, srs, gml, precision, prefix); return gml; } static size_t pointArray_toGML2(POINTARRAY *pa, char *output, int precision) { int i; char *ptr; char x[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char y[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char z[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; ptr = output; if ( ! FLAGS_GET_Z(pa->flags) ) { for (i=0; i<pa->npoints; i++) { POINT2D pt; getPoint2d_p(pa, i, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, pt.y); else sprintf(y, "%g", pt.y); trim_trailing_zeros(y); if ( i ) ptr += sprintf(ptr, " "); ptr += sprintf(ptr, "%s,%s", x, y); } } else { for (i=0; i<pa->npoints; i++) { POINT4D pt; getPoint4d_p(pa, i, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, pt.y); else sprintf(y, "%g", pt.y); trim_trailing_zeros(y); if (fabs(pt.z) < OUT_MAX_DOUBLE) sprintf(z, "%.*f", precision, pt.z); else sprintf(z, "%g", pt.z); trim_trailing_zeros(z); if ( i ) ptr += sprintf(ptr, " "); ptr += sprintf(ptr, "%s,%s,%s", x, y, z); } } return ptr-output; } /* * VERSION GML 3.1.1 */ /* takes a GEOMETRY and returns a GML representation */ extern char * lwgeom_to_gml3(const LWGEOM *geom, const char *srs, int precision, int opts, const char *prefix, const char *id) { int type = geom->type; /* Return null for empty (#1377) */ if ( lwgeom_is_empty(geom) ) return NULL; switch (type) { case POINTTYPE: return asgml3_point((LWPOINT*)geom, srs, precision, opts, prefix, id); case LINETYPE: return asgml3_line((LWLINE*)geom, srs, precision, opts, prefix, id); case POLYGONTYPE: return asgml3_poly((LWPOLY*)geom, srs, precision, opts, 0, prefix, id); case TRIANGLETYPE: return asgml3_triangle((LWTRIANGLE*)geom, srs, precision, opts, prefix, id); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: return asgml3_multi((LWCOLLECTION*)geom, srs, precision, opts, prefix, id); case POLYHEDRALSURFACETYPE: return asgml3_psurface((LWPSURFACE*)geom, srs, precision, opts, prefix, id); case TINTYPE: return asgml3_tin((LWTIN*)geom, srs, precision, opts, prefix, id); case COLLECTIONTYPE: return asgml3_collection((LWCOLLECTION*)geom, srs, precision, opts, prefix, id); default: lwerror("lwgeom_to_gml3: '%s' geometry type not supported", lwtype_name(type)); return NULL; } } static size_t asgml3_point_size(const LWPOINT *point, const char *srs, int precision, int opts, const char *prefix, const char *id) { int size; size_t prefixlen = strlen(prefix); size = pointArray_GMLsize(point->point, precision); size += ( sizeof("<point><pos>/") + (prefixlen*2) ) * 2; if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(id) + strlen(prefix) + sizeof(" id=.."); if (IS_DIMS(opts)) size += sizeof(" srsDimension='x'"); return size; } static size_t asgml3_point_buf(const LWPOINT *point, const char *srs, char *output, int precision, int opts, const char *prefix, const char *id) { char *ptr = output; int dimension=2; if (FLAGS_GET_Z(point->flags)) dimension = 3; ptr += sprintf(ptr, "<%sPoint", prefix); if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if ( id ) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); if ( lwpoint_is_empty(point) ) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); if (IS_DIMS(opts)) ptr += sprintf(ptr, "<%spos srsDimension=\"%d\">", prefix, dimension); else ptr += sprintf(ptr, "<%spos>", prefix); ptr += pointArray_toGML3(point->point, ptr, precision, opts); ptr += sprintf(ptr, "</%spos></%sPoint>", prefix, prefix); return (ptr-output); } static char * asgml3_point(const LWPOINT *point, const char *srs, int precision, int opts, const char *prefix, const char *id) { char *output; int size; size = asgml3_point_size(point, srs, precision, opts, prefix, id); output = lwalloc(size); asgml3_point_buf(point, srs, output, precision, opts, prefix, id); return output; } static size_t asgml3_line_size(const LWLINE *line, const char *srs, int precision, int opts, const char *prefix, const char *id) { int size; size_t prefixlen = strlen(prefix); size = pointArray_GMLsize(line->points, precision); if ( opts & LW_GML_SHORTLINE ) { size += ( sizeof("<LineString><posList>/") + ( prefixlen * 2 ) ) * 2; } else { size += ( sizeof("<Curve><segments><LineStringSegment><posList>/") + ( prefixlen * 4 ) ) * 2; } if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(id) + strlen(prefix) + sizeof(" id=.."); if (IS_DIMS(opts)) size += sizeof(" srsDimension='x'"); return size; } static size_t asgml3_line_buf(const LWLINE *line, const char *srs, char *output, int precision, int opts, const char *prefix, const char *id) { char *ptr=output; int dimension=2; int shortline = ( opts & LW_GML_SHORTLINE ); if (FLAGS_GET_Z(line->flags)) dimension = 3; if ( shortline ) { ptr += sprintf(ptr, "<%sLineString", prefix); } else { ptr += sprintf(ptr, "<%sCurve", prefix); } if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (id) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); if ( lwline_is_empty(line) ) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); if ( ! shortline ) { ptr += sprintf(ptr, "<%ssegments>", prefix); ptr += sprintf(ptr, "<%sLineStringSegment>", prefix); } if (IS_DIMS(opts)) { ptr += sprintf(ptr, "<%sposList srsDimension=\"%d\">", prefix, dimension); } else { ptr += sprintf(ptr, "<%sposList>", prefix); } ptr += pointArray_toGML3(line->points, ptr, precision, opts); ptr += sprintf(ptr, "</%sposList>", prefix); if ( shortline ) { ptr += sprintf(ptr, "</%sLineString>", prefix); } else { ptr += sprintf(ptr, "</%sLineStringSegment>", prefix); ptr += sprintf(ptr, "</%ssegments>", prefix); ptr += sprintf(ptr, "</%sCurve>", prefix); } return (ptr-output); } static char * asgml3_line(const LWLINE *line, const char *srs, int precision, int opts, const char *prefix, const char *id) { char *output; int size; size = asgml3_line_size(line, srs, precision, opts, prefix, id); output = lwalloc(size); asgml3_line_buf(line, srs, output, precision, opts, prefix, id); return output; } static size_t asgml3_poly_size(const LWPOLY *poly, const char *srs, int precision, int opts, const char *prefix, const char *id) { size_t size; size_t prefixlen = strlen(prefix); int i; size = ( sizeof("<PolygonPatch><exterior><LinearRing>///") + (prefixlen*3) ) * 2; size += ( sizeof("<interior><LinearRing>//") + (prefixlen*2) ) * 2 * (poly->nrings - 1); size += ( sizeof("<posList></posList>") + (prefixlen*2) ) * poly->nrings; if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(id) + strlen(prefix) + sizeof(" id=.."); if (IS_DIMS(opts)) size += sizeof(" srsDimension='x'") * poly->nrings; for (i=0; i<poly->nrings; i++) size += pointArray_GMLsize(poly->rings[i], precision); return size; } static size_t asgml3_poly_buf(const LWPOLY *poly, const char *srs, char *output, int precision, int opts, int is_patch, const char *prefix, const char *id) { int i; char *ptr=output; int dimension=2; if (FLAGS_GET_Z(poly->flags)) dimension = 3; if (is_patch) { ptr += sprintf(ptr, "<%sPolygonPatch", prefix); } else { ptr += sprintf(ptr, "<%sPolygon", prefix); } if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (id) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); if ( lwpoly_is_empty(poly) ) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); ptr += sprintf(ptr, "<%sexterior><%sLinearRing>", prefix, prefix); if (IS_DIMS(opts)) ptr += sprintf(ptr, "<%sposList srsDimension=\"%d\">", prefix, dimension); else ptr += sprintf(ptr, "<%sposList>", prefix); ptr += pointArray_toGML3(poly->rings[0], ptr, precision, opts); ptr += sprintf(ptr, "</%sposList></%sLinearRing></%sexterior>", prefix, prefix, prefix); for (i=1; i<poly->nrings; i++) { ptr += sprintf(ptr, "<%sinterior><%sLinearRing>", prefix, prefix); if (IS_DIMS(opts)) ptr += sprintf(ptr, "<%sposList srsDimension=\"%d\">", prefix, dimension); else ptr += sprintf(ptr, "<%sposList>", prefix); ptr += pointArray_toGML3(poly->rings[i], ptr, precision, opts); ptr += sprintf(ptr, "</%sposList></%sLinearRing></%sinterior>", prefix, prefix, prefix); } if (is_patch) ptr += sprintf(ptr, "</%sPolygonPatch>", prefix); else ptr += sprintf(ptr, "</%sPolygon>", prefix); return (ptr-output); } static char * asgml3_poly(const LWPOLY *poly, const char *srs, int precision, int opts, int is_patch, const char *prefix, const char *id) { char *output; int size; size = asgml3_poly_size(poly, srs, precision, opts, prefix, id); output = lwalloc(size); asgml3_poly_buf(poly, srs, output, precision, opts, is_patch, prefix, id); return output; } static size_t asgml3_triangle_size(const LWTRIANGLE *triangle, const char *srs, int precision, int opts, const char *prefix, const char *id) { size_t size; size_t prefixlen = strlen(prefix); size = ( sizeof("<Triangle><exterior><LinearRing>///") + (prefixlen*3) ) * 2; size += sizeof("<posList></posList>") + (prefixlen*2); if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(prefix) + strlen(id) + sizeof(" id=.."); if (IS_DIMS(opts)) size += sizeof(" srsDimension='x'"); size += pointArray_GMLsize(triangle->points, precision); return size; } static size_t asgml3_triangle_buf(const LWTRIANGLE *triangle, const char *srs, char *output, int precision, int opts, const char *prefix, const char *id) { char *ptr=output; int dimension=2; if (FLAGS_GET_Z(triangle->flags)) dimension = 3; ptr += sprintf(ptr, "<%sTriangle", prefix); if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (id) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); ptr += sprintf(ptr, ">"); ptr += sprintf(ptr, "<%sexterior><%sLinearRing>", prefix, prefix); if (IS_DIMS(opts)) ptr += sprintf(ptr, "<%sposList srsDimension=\"%d\">", prefix, dimension); else ptr += sprintf(ptr, "<%sposList>", prefix); ptr += pointArray_toGML3(triangle->points, ptr, precision, opts); ptr += sprintf(ptr, "</%sposList></%sLinearRing></%sexterior>", prefix, prefix, prefix); ptr += sprintf(ptr, "</%sTriangle>", prefix); return (ptr-output); } static char * asgml3_triangle(const LWTRIANGLE *triangle, const char *srs, int precision, int opts, const char *prefix, const char *id) { char *output; int size; size = asgml3_triangle_size(triangle, srs, precision, opts, prefix, id); output = lwalloc(size); asgml3_triangle_buf(triangle, srs, output, precision, opts, prefix, id); return output; } /* * Compute max size required for GML version of this * inspected geometry. Will recurse when needed. * Don't call this with single-geoms inspected. */ static size_t asgml3_multi_size(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id) { int i; size_t size; size_t prefixlen = strlen(prefix); LWGEOM *subgeom; /* the longest possible multi version */ size = sizeof("<MultiLineString></MultiLineString>") + prefixlen*2; if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(id) + strlen(prefix) + sizeof(" id=.."); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; if (subgeom->type == POINTTYPE) { size += ( sizeof("<pointMember>/") + prefixlen ) * 2; size += asgml3_point_size((LWPOINT*)subgeom, 0, precision, opts, prefix, id); } else if (subgeom->type == LINETYPE) { size += ( sizeof("<curveMember>/") + prefixlen ) * 2; size += asgml3_line_size((LWLINE*)subgeom, 0, precision, opts, prefix, id); } else if (subgeom->type == POLYGONTYPE) { size += ( sizeof("<surfaceMember>/") + prefixlen ) * 2; size += asgml3_poly_size((LWPOLY*)subgeom, 0, precision, opts, prefix, id); } } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asgml3_multi_buf(const LWCOLLECTION *col, const char *srs, char *output, int precision, int opts, const char *prefix, const char *id) { int type = col->type; char *ptr, *gmltype; int i; LWGEOM *subgeom; ptr = output; gmltype=""; if (type == MULTIPOINTTYPE) gmltype = "MultiPoint"; else if (type == MULTILINETYPE) gmltype = "MultiCurve"; else if (type == MULTIPOLYGONTYPE) gmltype = "MultiSurface"; /* Open outmost tag */ ptr += sprintf(ptr, "<%s%s", prefix, gmltype); if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (id) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); if (!col->ngeoms) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; if (subgeom->type == POINTTYPE) { ptr += sprintf(ptr, "<%spointMember>", prefix); ptr += asgml3_point_buf((LWPOINT*)subgeom, 0, ptr, precision, opts, prefix, id); ptr += sprintf(ptr, "</%spointMember>", prefix); } else if (subgeom->type == LINETYPE) { ptr += sprintf(ptr, "<%scurveMember>", prefix); ptr += asgml3_line_buf((LWLINE*)subgeom, 0, ptr, precision, opts, prefix, id); ptr += sprintf(ptr, "</%scurveMember>", prefix); } else if (subgeom->type == POLYGONTYPE) { ptr += sprintf(ptr, "<%ssurfaceMember>", prefix); ptr += asgml3_poly_buf((LWPOLY*)subgeom, 0, ptr, precision, opts, 0, prefix, id); ptr += sprintf(ptr, "</%ssurfaceMember>", prefix); } } /* Close outmost tag */ ptr += sprintf(ptr, "</%s%s>", prefix, gmltype); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asgml3_multi(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id) { char *gml; size_t size; size = asgml3_multi_size(col, srs, precision, opts, prefix, id); gml = lwalloc(size); asgml3_multi_buf(col, srs, gml, precision, opts, prefix, id); return gml; } static size_t asgml3_psurface_size(const LWPSURFACE *psur, const char *srs, int precision, int opts, const char *prefix, const char *id) { int i; size_t size; size_t prefixlen = strlen(prefix); size = (sizeof("<PolyhedralSurface><polygonPatches>/") + prefixlen*2) * 2; if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(id) + strlen(prefix) + sizeof(" id=.."); for (i=0; i<psur->ngeoms; i++) { size += asgml3_poly_size(psur->geoms[i], 0, precision, opts, prefix, id); } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asgml3_psurface_buf(const LWPSURFACE *psur, const char *srs, char *output, int precision, int opts, const char *prefix, const char *id) { char *ptr; int i; ptr = output; /* Open outmost tag */ ptr += sprintf(ptr, "<%sPolyhedralSurface", prefix); if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (id) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); ptr += sprintf(ptr, "><%spolygonPatches>", prefix); for (i=0; i<psur->ngeoms; i++) { ptr += asgml3_poly_buf(psur->geoms[i], 0, ptr, precision, opts, 1, prefix, id); } /* Close outmost tag */ ptr += sprintf(ptr, "</%spolygonPatches></%sPolyhedralSurface>", prefix, prefix); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asgml3_psurface(const LWPSURFACE *psur, const char *srs, int precision, int opts, const char *prefix, const char *id) { char *gml; size_t size; size = asgml3_psurface_size(psur, srs, precision, opts, prefix, id); gml = lwalloc(size); asgml3_psurface_buf(psur, srs, gml, precision, opts, prefix, id); return gml; } static size_t asgml3_tin_size(const LWTIN *tin, const char *srs, int precision, int opts, const char *prefix, const char *id) { int i; size_t size; size_t prefixlen = strlen(prefix); size = (sizeof("<Tin><trianglePatches>/") + prefixlen*2) * 2; if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(id) + strlen(prefix) + sizeof(" id=.."); for (i=0; i<tin->ngeoms; i++) { size += asgml3_triangle_size(tin->geoms[i], 0, precision, opts, prefix, id); } return size; } /* * Don't call this with single-geoms inspected! */ static size_t asgml3_tin_buf(const LWTIN *tin, const char *srs, char *output, int precision, int opts, const char *prefix, const char *id) { char *ptr; int i; ptr = output; /* Open outmost tag */ ptr += sprintf(ptr, "<%sTin", prefix); if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (id) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); else ptr += sprintf(ptr, "><%strianglePatches>", prefix); for (i=0; i<tin->ngeoms; i++) { ptr += asgml3_triangle_buf(tin->geoms[i], 0, ptr, precision, opts, prefix, id); } /* Close outmost tag */ ptr += sprintf(ptr, "</%strianglePatches></%sTin>", prefix, prefix); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asgml3_tin(const LWTIN *tin, const char *srs, int precision, int opts, const char *prefix, const char *id) { char *gml; size_t size; size = asgml3_tin_size(tin, srs, precision, opts, prefix, id); gml = lwalloc(size); asgml3_tin_buf(tin, srs, gml, precision, opts, prefix, id); return gml; } static size_t asgml3_collection_size(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id) { int i; size_t size; size_t prefixlen = strlen(prefix); LWGEOM *subgeom; size = sizeof("<MultiGeometry></MultiGeometry>") + prefixlen*2; if (srs) size += strlen(srs) + sizeof(" srsName=.."); if (id) size += strlen(id) + strlen(prefix) + sizeof(" id=.."); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; size += ( sizeof("<geometryMember>/") + prefixlen ) * 2; if ( subgeom->type == POINTTYPE ) { size += asgml3_point_size((LWPOINT*)subgeom, 0, precision, opts, prefix, id); } else if ( subgeom->type == LINETYPE ) { size += asgml3_line_size((LWLINE*)subgeom, 0, precision, opts, prefix, id); } else if ( subgeom->type == POLYGONTYPE ) { size += asgml3_poly_size((LWPOLY*)subgeom, 0, precision, opts, prefix, id); } else if ( lwgeom_is_collection(subgeom) ) { size += asgml3_multi_size((LWCOLLECTION*)subgeom, 0, precision, opts, prefix, id); } else lwerror("asgml3_collection_size: unknown geometry type"); } return size; } static size_t asgml3_collection_buf(const LWCOLLECTION *col, const char *srs, char *output, int precision, int opts, const char *prefix, const char *id) { char *ptr; int i; LWGEOM *subgeom; ptr = output; /* Open outmost tag */ ptr += sprintf(ptr, "<%sMultiGeometry", prefix); if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs); if (id) ptr += sprintf(ptr, " %sid=\"%s\"", prefix, id); if (!col->ngeoms) { ptr += sprintf(ptr, "/>"); return (ptr-output); } ptr += sprintf(ptr, ">"); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; ptr += sprintf(ptr, "<%sgeometryMember>", prefix); if ( subgeom->type == POINTTYPE ) { ptr += asgml3_point_buf((LWPOINT*)subgeom, 0, ptr, precision, opts, prefix, id); } else if ( subgeom->type == LINETYPE ) { ptr += asgml3_line_buf((LWLINE*)subgeom, 0, ptr, precision, opts, prefix, id); } else if ( subgeom->type == POLYGONTYPE ) { ptr += asgml3_poly_buf((LWPOLY*)subgeom, 0, ptr, precision, opts, 0, prefix, id); } else if ( lwgeom_is_collection(subgeom) ) { if ( subgeom->type == COLLECTIONTYPE ) ptr += asgml3_collection_buf((LWCOLLECTION*)subgeom, 0, ptr, precision, opts, prefix, id); else ptr += asgml3_multi_buf((LWCOLLECTION*)subgeom, 0, ptr, precision, opts, prefix, id); } else lwerror("asgml3_collection_buf: unknown geometry type"); ptr += sprintf(ptr, "</%sgeometryMember>", prefix); } /* Close outmost tag */ ptr += sprintf(ptr, "</%sMultiGeometry>", prefix); return (ptr-output); } /* * Don't call this with single-geoms inspected! */ static char * asgml3_collection(const LWCOLLECTION *col, const char *srs, int precision, int opts, const char *prefix, const char *id) { char *gml; size_t size; size = asgml3_collection_size(col, srs, precision, opts, prefix, id); gml = lwalloc(size); asgml3_collection_buf(col, srs, gml, precision, opts, prefix, id); return gml; } /* In GML3, inside <posList> or <pos>, coordinates are separated by a space separator * In GML3 also, lat/lon are reversed for geocentric data */ static size_t pointArray_toGML3(POINTARRAY *pa, char *output, int precision, int opts) { int i; char *ptr; char x[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char y[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char z[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; ptr = output; if ( ! FLAGS_GET_Z(pa->flags) ) { for (i=0; i<pa->npoints; i++) { POINT2D pt; getPoint2d_p(pa, i, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, pt.y); else sprintf(y, "%g", pt.y); trim_trailing_zeros(y); if ( i ) ptr += sprintf(ptr, " "); if (IS_DEGREE(opts)) ptr += sprintf(ptr, "%s %s", y, x); else ptr += sprintf(ptr, "%s %s", x, y); } } else { for (i=0; i<pa->npoints; i++) { POINT4D pt; getPoint4d_p(pa, i, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, pt.y); else sprintf(y, "%g", pt.y); trim_trailing_zeros(y); if (fabs(pt.z) < OUT_MAX_DOUBLE) sprintf(z, "%.*f", precision, pt.z); else sprintf(z, "%g", pt.z); trim_trailing_zeros(z); if ( i ) ptr += sprintf(ptr, " "); if (IS_DEGREE(opts)) ptr += sprintf(ptr, "%s %s %s", y, x, z); else ptr += sprintf(ptr, "%s %s %s", x, y, z); } } return ptr-output; } /* * Returns maximum size of rendered pointarray in bytes. */ static size_t pointArray_GMLsize(POINTARRAY *pa, int precision) { if (FLAGS_NDIMS(pa->flags) == 2) return (OUT_MAX_DIGS_DOUBLE + precision + sizeof(", ")) * 2 * pa->npoints; return (OUT_MAX_DIGS_DOUBLE + precision + sizeof(", ")) * 3 * pa->npoints; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom.c����������������������������������������������������������0000644�0000000�0000000�00000107550�12236034214�017204� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" /** Force Right-hand-rule on LWGEOM polygons **/ void lwgeom_force_clockwise(LWGEOM *lwgeom) { LWCOLLECTION *coll; int i; switch (lwgeom->type) { case POLYGONTYPE: lwpoly_force_clockwise((LWPOLY *)lwgeom); return; case TRIANGLETYPE: lwtriangle_force_clockwise((LWTRIANGLE *)lwgeom); return; /* Not handle POLYHEDRALSURFACE and TIN as they are supposed to be well oriented */ case MULTIPOLYGONTYPE: case COLLECTIONTYPE: coll = (LWCOLLECTION *)lwgeom; for (i=0; i<coll->ngeoms; i++) lwgeom_force_clockwise(coll->geoms[i]); return; } } /** Reverse vertex order of LWGEOM **/ void lwgeom_reverse(LWGEOM *lwgeom) { int i; LWCOLLECTION *col; switch (lwgeom->type) { case LINETYPE: lwline_reverse((LWLINE *)lwgeom); return; case POLYGONTYPE: lwpoly_reverse((LWPOLY *)lwgeom); return; case TRIANGLETYPE: lwtriangle_reverse((LWTRIANGLE *)lwgeom); return; case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: col = (LWCOLLECTION *)lwgeom; for (i=0; i<col->ngeoms; i++) lwgeom_reverse(col->geoms[i]); return; } } LWPOINT * lwgeom_as_lwpoint(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == POINTTYPE ) return (LWPOINT *)lwgeom; else return NULL; } LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == LINETYPE ) return (LWLINE *)lwgeom; else return NULL; } LWCIRCSTRING * lwgeom_as_lwcircstring(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == CIRCSTRINGTYPE ) return (LWCIRCSTRING *)lwgeom; else return NULL; } LWCOMPOUND * lwgeom_as_lwcompound(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == COMPOUNDTYPE ) return (LWCOMPOUND *)lwgeom; else return NULL; } LWCURVEPOLY * lwgeom_as_lwcurvepoly(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == CURVEPOLYTYPE ) return (LWCURVEPOLY *)lwgeom; else return NULL; } LWPOLY * lwgeom_as_lwpoly(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == POLYGONTYPE ) return (LWPOLY *)lwgeom; else return NULL; } LWTRIANGLE * lwgeom_as_lwtriangle(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == TRIANGLETYPE ) return (LWTRIANGLE *)lwgeom; else return NULL; } LWCOLLECTION * lwgeom_as_lwcollection(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom_is_collection(lwgeom) ) return (LWCOLLECTION*)lwgeom; else return NULL; } LWMPOINT * lwgeom_as_lwmpoint(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == MULTIPOINTTYPE ) return (LWMPOINT *)lwgeom; else return NULL; } LWMLINE * lwgeom_as_lwmline(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == MULTILINETYPE ) return (LWMLINE *)lwgeom; else return NULL; } LWMPOLY * lwgeom_as_lwmpoly(const LWGEOM *lwgeom) { if ( lwgeom == NULL ) return NULL; if ( lwgeom->type == MULTIPOLYGONTYPE ) return (LWMPOLY *)lwgeom; else return NULL; } LWPSURFACE * lwgeom_as_lwpsurface(const LWGEOM *lwgeom) { if ( lwgeom->type == POLYHEDRALSURFACETYPE ) return (LWPSURFACE *)lwgeom; else return NULL; } LWTIN * lwgeom_as_lwtin(const LWGEOM *lwgeom) { if ( lwgeom->type == TINTYPE ) return (LWTIN *)lwgeom; else return NULL; } LWGEOM *lwtin_as_lwgeom(const LWTIN *obj) { return (LWGEOM *)obj; } LWGEOM *lwpsurface_as_lwgeom(const LWPSURFACE *obj) { return (LWGEOM *)obj; } LWGEOM *lwmpoly_as_lwgeom(const LWMPOLY *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwmline_as_lwgeom(const LWMLINE *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwmpoint_as_lwgeom(const LWMPOINT *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwcollection_as_lwgeom(const LWCOLLECTION *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwcircstring_as_lwgeom(const LWCIRCSTRING *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwcurvepoly_as_lwgeom(const LWCURVEPOLY *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwcompound_as_lwgeom(const LWCOMPOUND *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwpoly_as_lwgeom(const LWPOLY *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwtriangle_as_lwgeom(const LWTRIANGLE *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwline_as_lwgeom(const LWLINE *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } LWGEOM *lwpoint_as_lwgeom(const LWPOINT *obj) { if ( obj == NULL ) return NULL; return (LWGEOM *)obj; } /** ** Look-up for the correct MULTI* type promotion for singleton types. */ static uint8_t MULTITYPE[17] = { 0, MULTIPOINTTYPE, /* 1 */ MULTILINETYPE, /* 2 */ MULTIPOLYGONTYPE, /* 3 */ 0,0,0,0, MULTICURVETYPE, /* 8 */ MULTICURVETYPE, /* 9 */ MULTISURFACETYPE, /* 10 */ POLYHEDRALSURFACETYPE, /* 11 */ 0, 0, TINTYPE, /* 14 */ 0,0 }; /** * Create a new LWGEOM of the appropriate MULTI* type. */ LWGEOM * lwgeom_as_multi(const LWGEOM *lwgeom) { LWGEOM **ogeoms; LWGEOM *ogeom = NULL; GBOX *box = NULL; int type; type = lwgeom->type; if ( ! MULTITYPE[type] ) return lwgeom_clone(lwgeom); if( lwgeom_is_empty(lwgeom) ) { ogeom = (LWGEOM *)lwcollection_construct_empty( MULTITYPE[type], lwgeom->srid, FLAGS_GET_Z(lwgeom->flags), FLAGS_GET_M(lwgeom->flags) ); } else { ogeoms = lwalloc(sizeof(LWGEOM*)); ogeoms[0] = lwgeom_clone(lwgeom); /* Sub-geometries are not allowed to have bboxes or SRIDs, move the bbox to the collection */ box = ogeoms[0]->bbox; ogeoms[0]->bbox = NULL; ogeoms[0]->srid = SRID_UNKNOWN; ogeom = (LWGEOM *)lwcollection_construct(MULTITYPE[type], lwgeom->srid, box, 1, ogeoms); } return ogeom; } /** * Free the containing LWGEOM and the associated BOX. Leave the underlying * geoms/points/point objects intact. Useful for functions that are stripping * out subcomponents of complex objects, or building up new temporary objects * on top of subcomponents. */ void lwgeom_release(LWGEOM *lwgeom) { if ( ! lwgeom ) lwerror("lwgeom_release: someone called on 0x0"); LWDEBUGF(3, "releasing type %s", lwtype_name(lwgeom->type)); /* Drop bounding box (always a copy) */ if ( lwgeom->bbox ) { LWDEBUGF(3, "lwgeom_release: releasing bbox. %p", lwgeom->bbox); lwfree(lwgeom->bbox); } lwfree(lwgeom); } /* @brief Clone LWGEOM object. Serialized point lists are not copied. * * @see ptarray_clone */ LWGEOM * lwgeom_clone(const LWGEOM *lwgeom) { LWDEBUGF(2, "lwgeom_clone called with %p, %s", lwgeom, lwtype_name(lwgeom->type)); switch (lwgeom->type) { case POINTTYPE: return (LWGEOM *)lwpoint_clone((LWPOINT *)lwgeom); case LINETYPE: return (LWGEOM *)lwline_clone((LWLINE *)lwgeom); case CIRCSTRINGTYPE: return (LWGEOM *)lwcircstring_clone((LWCIRCSTRING *)lwgeom); case POLYGONTYPE: return (LWGEOM *)lwpoly_clone((LWPOLY *)lwgeom); case TRIANGLETYPE: return (LWGEOM *)lwtriangle_clone((LWTRIANGLE *)lwgeom); case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return (LWGEOM *)lwcollection_clone((LWCOLLECTION *)lwgeom); default: lwerror("lwgeom_clone: Unknown geometry type: %s", lwtype_name(lwgeom->type)); return NULL; } } /** * Deep-clone an #LWGEOM object. #POINTARRAY <em>are</em> copied. */ LWGEOM * lwgeom_clone_deep(const LWGEOM *lwgeom) { LWDEBUGF(2, "lwgeom_clone called with %p, %s", lwgeom, lwtype_name(lwgeom->type)); switch (lwgeom->type) { case POINTTYPE: case LINETYPE: case CIRCSTRINGTYPE: case TRIANGLETYPE: return (LWGEOM *)lwline_clone_deep((LWLINE *)lwgeom); case POLYGONTYPE: return (LWGEOM *)lwpoly_clone_deep((LWPOLY *)lwgeom); case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return (LWGEOM *)lwcollection_clone_deep((LWCOLLECTION *)lwgeom); default: lwerror("lwgeom_clone_deep: Unknown geometry type: %s", lwtype_name(lwgeom->type)); return NULL; } } /** * Return an alloced string */ char* lwgeom_to_ewkt(const LWGEOM *lwgeom) { char* wkt = NULL; size_t wkt_size = 0; wkt = lwgeom_to_wkt(lwgeom, WKT_EXTENDED, 12, &wkt_size); if ( ! wkt ) { lwerror("Error writing geom %p to WKT", lwgeom); } return wkt; } /** * @brief geom1 same as geom2 * iff * + have same type * + have same # objects * + have same bvol * + each object in geom1 has a corresponding object in geom2 (see above) * @param lwgeom1 * @param lwgeom2 */ char lwgeom_same(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2) { LWDEBUGF(2, "lwgeom_same(%s, %s) called", lwtype_name(lwgeom1->type), lwtype_name(lwgeom2->type)); if ( lwgeom1->type != lwgeom2->type ) { LWDEBUG(3, " type differ"); return LW_FALSE; } if ( FLAGS_GET_ZM(lwgeom1->flags) != FLAGS_GET_ZM(lwgeom2->flags) ) { LWDEBUG(3, " ZM flags differ"); return LW_FALSE; } /* Check boxes if both already computed */ if ( lwgeom1->bbox && lwgeom2->bbox ) { /*lwnotice("bbox1:%p, bbox2:%p", lwgeom1->bbox, lwgeom2->bbox);*/ if ( ! gbox_same(lwgeom1->bbox, lwgeom2->bbox) ) { LWDEBUG(3, " bounding boxes differ"); return LW_FALSE; } } /* geoms have same type, invoke type-specific function */ switch (lwgeom1->type) { case POINTTYPE: return lwpoint_same((LWPOINT *)lwgeom1, (LWPOINT *)lwgeom2); case LINETYPE: return lwline_same((LWLINE *)lwgeom1, (LWLINE *)lwgeom2); case POLYGONTYPE: return lwpoly_same((LWPOLY *)lwgeom1, (LWPOLY *)lwgeom2); case TRIANGLETYPE: return lwtriangle_same((LWTRIANGLE *)lwgeom1, (LWTRIANGLE *)lwgeom2); case CIRCSTRINGTYPE: return lwcircstring_same((LWCIRCSTRING *)lwgeom1, (LWCIRCSTRING *)lwgeom2); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return lwcollection_same((LWCOLLECTION *)lwgeom1, (LWCOLLECTION *)lwgeom2); default: lwerror("lwgeom_same: unsupported geometry type: %s", lwtype_name(lwgeom1->type)); return LW_FALSE; } } int lwpoint_inside_circle(const LWPOINT *p, double cx, double cy, double rad) { POINT2D center; POINT2D pt; if ( ! p || ! p->point ) return LW_FALSE; getPoint2d_p(p->point, 0, &pt); center.x = cx; center.y = cy; if ( distance2d_pt_pt(&pt, ¢er) < rad ) return LW_TRUE; return LW_FALSE; } void lwgeom_drop_bbox(LWGEOM *lwgeom) { if ( lwgeom->bbox ) lwfree(lwgeom->bbox); lwgeom->bbox = NULL; FLAGS_SET_BBOX(lwgeom->flags, 0); } /** * Ensure there's a box in the LWGEOM. * If the box is already there just return, * else compute it. */ void lwgeom_add_bbox(LWGEOM *lwgeom) { /* an empty LWGEOM has no bbox */ if ( lwgeom_is_empty(lwgeom) ) return; if ( lwgeom->bbox ) return; FLAGS_SET_BBOX(lwgeom->flags, 1); lwgeom->bbox = gbox_new(lwgeom->flags); lwgeom_calculate_gbox(lwgeom, lwgeom->bbox); } void lwgeom_add_bbox_deep(LWGEOM *lwgeom, GBOX *gbox) { if ( lwgeom_is_empty(lwgeom) ) return; FLAGS_SET_BBOX(lwgeom->flags, 1); if ( ! ( gbox || lwgeom->bbox ) ) { lwgeom->bbox = gbox_new(lwgeom->flags); lwgeom_calculate_gbox(lwgeom, lwgeom->bbox); } else if ( gbox && ! lwgeom->bbox ) { lwgeom->bbox = gbox_clone(gbox); } if ( lwgeom_is_collection(lwgeom) ) { int i; LWCOLLECTION *lwcol = (LWCOLLECTION*)lwgeom; for ( i = 0; i < lwcol->ngeoms; i++ ) { lwgeom_add_bbox_deep(lwcol->geoms[i], lwgeom->bbox); } } } const GBOX * lwgeom_get_bbox(const LWGEOM *lwg) { /* add it if not already there */ lwgeom_add_bbox((LWGEOM *)lwg); return lwg->bbox; } /** * Calculate the gbox for this goemetry, a cartesian box or * geodetic box, depending on how it is flagged. */ int lwgeom_calculate_gbox(const LWGEOM *lwgeom, GBOX *gbox) { gbox->flags = lwgeom->flags; if( FLAGS_GET_GEODETIC(lwgeom->flags) ) return lwgeom_calculate_gbox_geodetic(lwgeom, gbox); else return lwgeom_calculate_gbox_cartesian(lwgeom, gbox); } void lwgeom_drop_srid(LWGEOM *lwgeom) { lwgeom->srid = SRID_UNKNOWN; /* TODO: To be changed to SRID_UNKNOWN */ } LWGEOM * lwgeom_segmentize2d(LWGEOM *lwgeom, double dist) { switch (lwgeom->type) { case LINETYPE: return (LWGEOM *)lwline_segmentize2d((LWLINE *)lwgeom, dist); case POLYGONTYPE: return (LWGEOM *)lwpoly_segmentize2d((LWPOLY *)lwgeom, dist); case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return (LWGEOM *)lwcollection_segmentize2d( (LWCOLLECTION *)lwgeom, dist); default: return lwgeom_clone(lwgeom); } } LWGEOM* lwgeom_force_2d(const LWGEOM *geom) { return lwgeom_force_dims(geom, 0, 0); } LWGEOM* lwgeom_force_3dz(const LWGEOM *geom) { return lwgeom_force_dims(geom, 1, 0); } LWGEOM* lwgeom_force_3dm(const LWGEOM *geom) { return lwgeom_force_dims(geom, 0, 1); } LWGEOM* lwgeom_force_4d(const LWGEOM *geom) { return lwgeom_force_dims(geom, 1, 1); } LWGEOM* lwgeom_force_dims(const LWGEOM *geom, int hasz, int hasm) { switch(geom->type) { case POINTTYPE: return lwpoint_as_lwgeom(lwpoint_force_dims((LWPOINT*)geom, hasz, hasm)); case CIRCSTRINGTYPE: case LINETYPE: case TRIANGLETYPE: return lwline_as_lwgeom(lwline_force_dims((LWLINE*)geom, hasz, hasm)); case POLYGONTYPE: return lwpoly_as_lwgeom(lwpoly_force_dims((LWPOLY*)geom, hasz, hasm)); case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return lwcollection_as_lwgeom(lwcollection_force_dims((LWCOLLECTION*)geom, hasz, hasm)); default: lwerror("lwgeom_force_2d: unsupported geom type: %s", lwtype_name(geom->type)); return NULL; } } LWGEOM* lwgeom_force_sfs(LWGEOM *geom, int version) { LWCOLLECTION *col; int i; LWGEOM *g; /* SFS 1.2 version */ if (version == 120) { switch(geom->type) { /* SQL/MM types */ case CIRCSTRINGTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: return lwgeom_segmentize(geom, 32); case COLLECTIONTYPE: col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version); return lwcollection_as_lwgeom((LWCOLLECTION*)geom); default: return (LWGEOM *)geom; } } /* SFS 1.1 version */ switch(geom->type) { /* SQL/MM types */ case CIRCSTRINGTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: return lwgeom_segmentize(geom, 32); /* SFS 1.2 types */ case TRIANGLETYPE: g = lwpoly_as_lwgeom(lwpoly_from_lwlines((LWLINE*)geom, 0, NULL)); lwgeom_free(geom); return g; case TINTYPE: col = (LWCOLLECTION*) geom; for ( i = 0; i < col->ngeoms; i++ ) { g = lwpoly_as_lwgeom(lwpoly_from_lwlines((LWLINE*)col->geoms[i], 0, NULL)); lwgeom_free(col->geoms[i]); col->geoms[i] = g; } col->type = COLLECTIONTYPE; return lwmpoly_as_lwgeom((LWMPOLY*)geom); case POLYHEDRALSURFACETYPE: geom->type = COLLECTIONTYPE; return (LWGEOM *)geom; /* Collection */ case COLLECTIONTYPE: col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version); return lwcollection_as_lwgeom((LWCOLLECTION*)geom); default: return (LWGEOM *)geom; } } int32_t lwgeom_get_srid(const LWGEOM *geom) { if ( ! geom ) return SRID_UNKNOWN; return geom->srid; } uint32_t lwgeom_get_type(const LWGEOM *geom) { if ( ! geom ) return 0; return geom->type; } int lwgeom_has_z(const LWGEOM *geom) { if ( ! geom ) return LW_FALSE; return FLAGS_GET_Z(geom->flags); } int lwgeom_has_m(const LWGEOM *geom) { if ( ! geom ) return LW_FALSE; return FLAGS_GET_M(geom->flags); } int lwgeom_ndims(const LWGEOM *geom) { if ( ! geom ) return 0; return FLAGS_NDIMS(geom->flags); } void lwgeom_set_geodetic(LWGEOM *geom, int value) { LWPOINT *pt; LWLINE *ln; LWPOLY *ply; LWCOLLECTION *col; int i; FLAGS_SET_GEODETIC(geom->flags, value); if ( geom->bbox ) FLAGS_SET_GEODETIC(geom->bbox->flags, value); switch(geom->type) { case POINTTYPE: pt = (LWPOINT*)geom; if ( pt->point ) FLAGS_SET_GEODETIC(pt->point->flags, value); break; case LINETYPE: ln = (LWLINE*)geom; if ( ln->points ) FLAGS_SET_GEODETIC(ln->points->flags, value); break; case POLYGONTYPE: ply = (LWPOLY*)geom; for ( i = 0; i < ply->nrings; i++ ) FLAGS_SET_GEODETIC(ply->rings[i]->flags, value); break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) lwgeom_set_geodetic(col->geoms[i], value); break; default: lwerror("lwgeom_set_geodetic: unsupported geom type: %s", lwtype_name(geom->type)); return; } } void lwgeom_longitude_shift(LWGEOM *lwgeom) { int i; switch (lwgeom->type) { LWPOINT *point; LWLINE *line; LWPOLY *poly; LWTRIANGLE *triangle; LWCOLLECTION *coll; case POINTTYPE: point = (LWPOINT *)lwgeom; ptarray_longitude_shift(point->point); return; case LINETYPE: line = (LWLINE *)lwgeom; ptarray_longitude_shift(line->points); return; case POLYGONTYPE: poly = (LWPOLY *)lwgeom; for (i=0; i<poly->nrings; i++) ptarray_longitude_shift(poly->rings[i]); return; case TRIANGLETYPE: triangle = (LWTRIANGLE *)lwgeom; ptarray_longitude_shift(triangle->points); return; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: coll = (LWCOLLECTION *)lwgeom; for (i=0; i<coll->ngeoms; i++) lwgeom_longitude_shift(coll->geoms[i]); return; default: lwerror("lwgeom_longitude_shift: unsupported geom type: %s", lwtype_name(lwgeom->type)); } } int lwgeom_is_closed(const LWGEOM *geom) { int type = geom->type; if( lwgeom_is_empty(geom) ) return LW_FALSE; /* Test linear types for closure */ switch (type) { case LINETYPE: return lwline_is_closed((LWLINE*)geom); case POLYGONTYPE: return lwpoly_is_closed((LWPOLY*)geom); case CIRCSTRINGTYPE: return lwcircstring_is_closed((LWCIRCSTRING*)geom); case COMPOUNDTYPE: return lwcompound_is_closed((LWCOMPOUND*)geom); case TINTYPE: return lwtin_is_closed((LWTIN*)geom); case POLYHEDRALSURFACETYPE: return lwpsurface_is_closed((LWPSURFACE*)geom); } /* Recurse into collections and see if anything is not closed */ if ( lwgeom_is_collection(geom) ) { LWCOLLECTION *col = lwgeom_as_lwcollection(geom); int i; int closed; for ( i = 0; i < col->ngeoms; i++ ) { closed = lwgeom_is_closed(col->geoms[i]); if ( ! closed ) return LW_FALSE; } return LW_TRUE; } /* All non-linear non-collection types we will call closed */ return LW_TRUE; } int lwgeom_is_collection(const LWGEOM *geom) { if( ! geom ) return LW_FALSE; return lwtype_is_collection(geom->type); } /** Return TRUE if the geometry may contain sub-geometries, i.e. it is a MULTI* or COMPOUNDCURVE */ int lwtype_is_collection(uint8_t type) { switch (type) { case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: case CURVEPOLYTYPE: case COMPOUNDTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: return LW_TRUE; break; default: return LW_FALSE; } } /** * Given an lwtype number, what homogeneous collection can hold it? */ int lwtype_get_collectiontype(uint8_t type) { switch (type) { case POINTTYPE: return MULTIPOINTTYPE; case LINETYPE: return MULTILINETYPE; case POLYGONTYPE: return MULTIPOLYGONTYPE; case CIRCSTRINGTYPE: return MULTICURVETYPE; case COMPOUNDTYPE: return MULTICURVETYPE; case CURVEPOLYTYPE: return MULTISURFACETYPE; case TRIANGLETYPE: return TINTYPE; default: return COLLECTIONTYPE; } } void lwgeom_free(LWGEOM *lwgeom) { /* There's nothing here to free... */ if( ! lwgeom ) return; LWDEBUGF(5,"freeing a %s",lwtype_name(lwgeom->type)); switch (lwgeom->type) { case POINTTYPE: lwpoint_free((LWPOINT *)lwgeom); break; case LINETYPE: lwline_free((LWLINE *)lwgeom); break; case POLYGONTYPE: lwpoly_free((LWPOLY *)lwgeom); break; case CIRCSTRINGTYPE: lwcircstring_free((LWCIRCSTRING *)lwgeom); break; case TRIANGLETYPE: lwtriangle_free((LWTRIANGLE *)lwgeom); break; case MULTIPOINTTYPE: lwmpoint_free((LWMPOINT *)lwgeom); break; case MULTILINETYPE: lwmline_free((LWMLINE *)lwgeom); break; case MULTIPOLYGONTYPE: lwmpoly_free((LWMPOLY *)lwgeom); break; case POLYHEDRALSURFACETYPE: lwpsurface_free((LWPSURFACE *)lwgeom); break; case TINTYPE: lwtin_free((LWTIN *)lwgeom); break; case CURVEPOLYTYPE: case COMPOUNDTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case COLLECTIONTYPE: lwcollection_free((LWCOLLECTION *)lwgeom); break; default: lwerror("lwgeom_free called with unknown type (%d) %s", lwgeom->type, lwtype_name(lwgeom->type)); } return; } int lwgeom_needs_bbox(const LWGEOM *geom) { assert(geom); if ( geom->type == POINTTYPE ) { return LW_FALSE; } return LW_TRUE; } /** * Count points in an #LWGEOM. */ int lwgeom_count_vertices(const LWGEOM *geom) { int result = 0; /* Null? Zero. */ if( ! geom ) return 0; LWDEBUGF(4, "lwgeom_count_vertices got type %s", lwtype_name(geom->type)); /* Empty? Zero. */ if( lwgeom_is_empty(geom) ) return 0; switch (geom->type) { case POINTTYPE: result = 1; break; case TRIANGLETYPE: case CIRCSTRINGTYPE: case LINETYPE: result = lwline_count_vertices((LWLINE *)geom); break; case POLYGONTYPE: result = lwpoly_count_vertices((LWPOLY *)geom); break; case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: result = lwcollection_count_vertices((LWCOLLECTION *)geom); break; default: lwerror("lwgeom_count_vertices: unsupported input geometry type: %s", lwtype_name(geom->type)); break; } LWDEBUGF(3, "counted %d vertices", result); return result; } /** * For an #LWGEOM, returns 0 for points, 1 for lines, * 2 for polygons, 3 for volume, and the max dimension * of a collection. */ int lwgeom_dimension(const LWGEOM *geom) { /* Null? Zero. */ if( ! geom ) return -1; LWDEBUGF(4, "lwgeom_dimension got type %s", lwtype_name(geom->type)); /* Empty? Zero. */ /* if( lwgeom_is_empty(geom) ) return 0; */ switch (geom->type) { case POINTTYPE: case MULTIPOINTTYPE: return 0; case CIRCSTRINGTYPE: case LINETYPE: case COMPOUNDTYPE: case MULTICURVETYPE: case MULTILINETYPE: return 1; case TRIANGLETYPE: case POLYGONTYPE: case CURVEPOLYTYPE: case MULTISURFACETYPE: case MULTIPOLYGONTYPE: case TINTYPE: return 2; case POLYHEDRALSURFACETYPE: { /* A closed polyhedral surface contains a volume. */ int closed = lwpsurface_is_closed((LWPSURFACE*)geom); return ( closed ? 3 : 2 ); } case COLLECTIONTYPE: { int maxdim = 0, i; LWCOLLECTION *col = (LWCOLLECTION*)geom; for( i = 0; i < col->ngeoms; i++ ) { int dim = lwgeom_dimension(col->geoms[i]); maxdim = ( dim > maxdim ? dim : maxdim ); } return maxdim; } default: lwerror("lwgeom_dimension: unsupported input geometry type: %s", lwtype_name(geom->type)); } return -1; } /** * Count rings in an #LWGEOM. */ int lwgeom_count_rings(const LWGEOM *geom) { int result = 0; /* Null? Empty? Zero. */ if( ! geom || lwgeom_is_empty(geom) ) return 0; switch (geom->type) { case POINTTYPE: case CIRCSTRINGTYPE: case COMPOUNDTYPE: case MULTICURVETYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case LINETYPE: result = 0; break; case TRIANGLETYPE: result = 1; break; case POLYGONTYPE: result = ((LWPOLY *)geom)->nrings; break; case CURVEPOLYTYPE: result = ((LWCURVEPOLY *)geom)->nrings; break; case MULTISURFACETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: { LWCOLLECTION *col = (LWCOLLECTION*)geom; int i = 0; for( i = 0; i < col->ngeoms; i++ ) result += lwgeom_count_rings(col->geoms[i]); break; } default: lwerror("lwgeom_count_rings: unsupported input geometry type: %s", lwtype_name(geom->type)); break; } LWDEBUGF(3, "counted %d rings", result); return result; } int lwgeom_is_empty(const LWGEOM *geom) { int result = LW_FALSE; LWDEBUGF(4, "lwgeom_is_empty: got type %s", lwtype_name(geom->type)); switch (geom->type) { case POINTTYPE: return lwpoint_is_empty((LWPOINT*)geom); break; case LINETYPE: return lwline_is_empty((LWLINE*)geom); break; case CIRCSTRINGTYPE: return lwcircstring_is_empty((LWCIRCSTRING*)geom); break; case POLYGONTYPE: return lwpoly_is_empty((LWPOLY*)geom); break; case TRIANGLETYPE: return lwtriangle_is_empty((LWTRIANGLE*)geom); break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return lwcollection_is_empty((LWCOLLECTION *)geom); break; default: lwerror("lwgeom_is_empty: unsupported input geometry type: %s", lwtype_name(geom->type)); break; } return result; } int lwgeom_has_srid(const LWGEOM *geom) { if ( geom->srid != SRID_UNKNOWN ) return LW_TRUE; return LW_FALSE; } static int lwcollection_dimensionality(LWCOLLECTION *col) { int i; int dimensionality = 0; for ( i = 0; i < col->ngeoms; i++ ) { int d = lwgeom_dimensionality(col->geoms[i]); if ( d > dimensionality ) dimensionality = d; } return dimensionality; } extern int lwgeom_dimensionality(LWGEOM *geom) { int dim; LWDEBUGF(3, "lwgeom_dimensionality got type %s", lwtype_name(geom->type)); switch (geom->type) { case POINTTYPE: case MULTIPOINTTYPE: return 0; break; case LINETYPE: case CIRCSTRINGTYPE: case MULTILINETYPE: case COMPOUNDTYPE: case MULTICURVETYPE: return 1; break; case POLYGONTYPE: case TRIANGLETYPE: case CURVEPOLYTYPE: case MULTIPOLYGONTYPE: case MULTISURFACETYPE: return 2; break; case POLYHEDRALSURFACETYPE: case TINTYPE: dim = lwgeom_is_closed(geom)?3:2; return dim; break; case COLLECTIONTYPE: return lwcollection_dimensionality((LWCOLLECTION *)geom); break; default: lwerror("lwgeom_dimensionality: unsupported input geometry type: %s", lwtype_name(geom->type)); break; } return 0; } extern LWGEOM* lwgeom_remove_repeated_points(LWGEOM *in) { LWDEBUGF(4, "lwgeom_remove_repeated_points got type %s", lwtype_name(in->type)); switch (in->type) { case MULTIPOINTTYPE: return lwmpoint_remove_repeated_points((LWMPOINT*)in); break; case LINETYPE: return lwline_remove_repeated_points((LWLINE*)in); case MULTILINETYPE: case COLLECTIONTYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: return lwcollection_remove_repeated_points((LWCOLLECTION *)in); case POLYGONTYPE: return lwpoly_remove_repeated_points((LWPOLY *)in); break; case POINTTYPE: case TRIANGLETYPE: case TINTYPE: /* No point is repeated for a single point, or for Triangle or TIN */ return in; case CIRCSTRINGTYPE: case COMPOUNDTYPE: case MULTICURVETYPE: case CURVEPOLYTYPE: case MULTISURFACETYPE: /* Dunno how to handle these, will return untouched */ return in; default: lwnotice("lwgeom_remove_repeated_points: unsupported geometry type: %s", lwtype_name(in->type)); return in; break; } return 0; } LWGEOM* lwgeom_flip_coordinates(LWGEOM *in) { LWCOLLECTION *col; LWPOLY *poly; int i; if ( (!in) || lwgeom_is_empty(in) ) return in; LWDEBUGF(4, "lwgeom_flip_coordinates, got type: %s", lwtype_name(in->type)); switch (in->type) { case POINTTYPE: ptarray_flip_coordinates(lwgeom_as_lwpoint(in)->point); break; case LINETYPE: ptarray_flip_coordinates(lwgeom_as_lwline(in)->points); break; case CIRCSTRINGTYPE: ptarray_flip_coordinates(lwgeom_as_lwcircstring(in)->points); break; case POLYGONTYPE: poly = (LWPOLY *) in; for (i=0; i<poly->nrings; i++) { ptarray_flip_coordinates(poly->rings[i]); } break; case TRIANGLETYPE: ptarray_flip_coordinates(lwgeom_as_lwtriangle(in)->points); break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTISURFACETYPE: case MULTICURVETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: col = (LWCOLLECTION *) in; for (i=0; i<col->ngeoms; i++) { lwgeom_flip_coordinates(col->geoms[i]); } break; default: lwerror("lwgeom_flip_coordinates: unsupported geometry type: %s", lwtype_name(in->type)); return NULL; } lwgeom_drop_bbox(in); lwgeom_add_bbox(in); return in; } void lwgeom_set_srid(LWGEOM *geom, int32_t srid) { int i; LWDEBUGF(4,"entered with srid=%d",srid); geom->srid = srid; if ( lwgeom_is_collection(geom) ) { /* All the children are set to the same SRID value */ LWCOLLECTION *col = lwgeom_as_lwcollection(geom); for ( i = 0; i < col->ngeoms; i++ ) { lwgeom_set_srid(col->geoms[i], srid); } } } LWGEOM* lwgeom_simplify(const LWGEOM *igeom, double dist) { switch (igeom->type) { case POINTTYPE: case MULTIPOINTTYPE: return lwgeom_clone(igeom); case LINETYPE: return (LWGEOM*)lwline_simplify((LWLINE*)igeom, dist); case POLYGONTYPE: return (LWGEOM*)lwpoly_simplify((LWPOLY*)igeom, dist); case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return (LWGEOM*)lwcollection_simplify((LWCOLLECTION *)igeom, dist); default: lwerror("lwgeom_simplify: unsupported geometry type: %s",lwtype_name(igeom->type)); } return NULL; } double lwgeom_area(const LWGEOM *geom) { int type = geom->type; if ( type == POLYGONTYPE ) return lwpoly_area((LWPOLY*)geom); else if ( type == CURVEPOLYTYPE ) return lwcurvepoly_area((LWCURVEPOLY*)geom); else if (type == TRIANGLETYPE ) return lwtriangle_area((LWTRIANGLE*)geom); else if ( lwgeom_is_collection(geom) ) { double area = 0.0; int i; LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) area += lwgeom_area(col->geoms[i]); return area; } else return 0.0; } double lwgeom_perimeter(const LWGEOM *geom) { int type = geom->type; if ( type == POLYGONTYPE ) return lwpoly_perimeter((LWPOLY*)geom); else if ( type == CURVEPOLYTYPE ) return lwcurvepoly_perimeter((LWCURVEPOLY*)geom); else if ( type == TRIANGLETYPE ) return lwtriangle_perimeter((LWTRIANGLE*)geom); else if ( lwgeom_is_collection(geom) ) { double perimeter = 0.0; int i; LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) perimeter += lwgeom_perimeter(col->geoms[i]); return perimeter; } else return 0.0; } double lwgeom_perimeter_2d(const LWGEOM *geom) { int type = geom->type; if ( type == POLYGONTYPE ) return lwpoly_perimeter_2d((LWPOLY*)geom); else if ( type == CURVEPOLYTYPE ) return lwcurvepoly_perimeter_2d((LWCURVEPOLY*)geom); else if ( type == TRIANGLETYPE ) return lwtriangle_perimeter_2d((LWTRIANGLE*)geom); else if ( lwgeom_is_collection(geom) ) { double perimeter = 0.0; int i; LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) perimeter += lwgeom_perimeter_2d(col->geoms[i]); return perimeter; } else return 0.0; } double lwgeom_length(const LWGEOM *geom) { int type = geom->type; if ( type == LINETYPE ) return lwline_length((LWLINE*)geom); else if ( type == CIRCSTRINGTYPE ) return lwcircstring_length((LWCIRCSTRING*)geom); else if ( type == COMPOUNDTYPE ) return lwcompound_length((LWCOMPOUND*)geom); else if ( lwgeom_is_collection(geom) ) { double length = 0.0; int i; LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) length += lwgeom_length(col->geoms[i]); return length; } else return 0.0; } double lwgeom_length_2d(const LWGEOM *geom) { int type = geom->type; if ( type == LINETYPE ) return lwline_length_2d((LWLINE*)geom); else if ( type == CIRCSTRINGTYPE ) return lwcircstring_length_2d((LWCIRCSTRING*)geom); else if ( type == COMPOUNDTYPE ) return lwcompound_length_2d((LWCOMPOUND*)geom); else if ( lwgeom_is_collection(geom) ) { double length = 0.0; int i; LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) length += lwgeom_length_2d(col->geoms[i]); return length; } else return 0.0; } void lwgeom_affine(LWGEOM *geom, const AFFINE *affine) { int type = geom->type; int i; switch(type) { /* Take advantage of fact tht pt/ln/circ/tri have same memory structure */ case POINTTYPE: case LINETYPE: case CIRCSTRINGTYPE: case TRIANGLETYPE: { LWLINE *l = (LWLINE*)geom; ptarray_affine(l->points, affine); break; } case POLYGONTYPE: { LWPOLY *p = (LWPOLY*)geom; for( i = 0; i < p->nrings; i++ ) ptarray_affine(p->rings[i], affine); break; } case CURVEPOLYTYPE: { LWCURVEPOLY *c = (LWCURVEPOLY*)geom; for( i = 0; i < c->nrings; i++ ) lwgeom_affine(c->rings[i], affine); break; } default: { if( lwgeom_is_collection(geom) ) { LWCOLLECTION *c = (LWCOLLECTION*)geom; for( i = 0; i < c->ngeoms; i++ ) { lwgeom_affine(c->geoms[i], affine); } } else { lwerror("lwgeom_affine: unable to handle type '%s'", lwtype_name(type)); } } } } LWGEOM* lwgeom_construct_empty(uint8_t type, int srid, char hasz, char hasm) { switch(type) { case POINTTYPE: return lwpoint_as_lwgeom(lwpoint_construct_empty(srid, hasz, hasm)); case LINETYPE: return lwline_as_lwgeom(lwline_construct_empty(srid, hasz, hasm)); case POLYGONTYPE: return lwpoly_as_lwgeom(lwpoly_construct_empty(srid, hasz, hasm)); case CURVEPOLYTYPE: return lwcurvepoly_as_lwgeom(lwcurvepoly_construct_empty(srid, hasz, hasm)); case CIRCSTRINGTYPE: return lwcircstring_as_lwgeom(lwcircstring_construct_empty(srid, hasz, hasm)); case TRIANGLETYPE: return lwtriangle_as_lwgeom(lwtriangle_construct_empty(srid, hasz, hasm)); case COMPOUNDTYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return lwcollection_as_lwgeom(lwcollection_construct_empty(type, srid, hasz, hasm)); default: lwerror("lwgeom_construct_empty: unsupported geometry type: %s", lwtype_name(type)); return NULL; } } int lwgeom_startpoint(const LWGEOM* lwgeom, POINT4D* pt) { if ( ! lwgeom ) return LW_FAILURE; switch( lwgeom->type ) { case POINTTYPE: return ptarray_startpoint(((LWPOINT*)lwgeom)->point, pt); case TRIANGLETYPE: case CIRCSTRINGTYPE: case LINETYPE: return ptarray_startpoint(((LWLINE*)lwgeom)->points, pt); case POLYGONTYPE: return lwpoly_startpoint((LWPOLY*)lwgeom, pt); case CURVEPOLYTYPE: case COMPOUNDTYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return lwcollection_startpoint((LWCOLLECTION*)lwgeom, pt); default: lwerror("int: unsupported geometry type: %s", lwtype_name(lwgeom->type)); return LW_FAILURE; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkt_parse.c��������������������������������������������������0000644�0000000�0000000�00000311351�12047044677�020754� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.5. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.5" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Using locations. */ #define YYLSP_NEEDED 1 /* Substitute the variable and function names. */ #define yyparse wkt_yyparse #define yylex wkt_yylex #define yyerror wkt_yyerror #define yylval wkt_yylval #define yychar wkt_yychar #define yydebug wkt_yydebug #define yynerrs wkt_yynerrs #define yylloc wkt_yylloc /* Copy the first part of user declarations. */ /* Line 268 of yacc.c */ #line 1 "lwin_wkt_parse.y" /* WKT Parser */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include "lwin_wkt.h" #include "lwin_wkt_parse.h" #include "lwgeom_log.h" /* Prototypes to quiet the compiler */ int wkt_yyparse(void); void wkt_yyerror(const char *str); int wkt_yylex(void); /* Declare the global parser variable */ LWGEOM_PARSER_RESULT global_parser_result; /* Turn on/off verbose parsing (turn off for production) */ int wkt_yydebug = 0; /* * Error handler called by the bison parser. Mostly we will be * catching our own errors and filling out the message and errlocation * from WKT_ERROR in the grammar, but we keep this one * around just in case. */ void wkt_yyerror(const char *str) { /* If we haven't already set a message and location, let's set one now. */ if ( ! global_parser_result.message ) { global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errcode = PARSER_ERROR_OTHER; global_parser_result.errlocation = wkt_yylloc.last_column; } LWDEBUGF(4,"%s", str); } /** * Parse a WKT geometry string into an LWGEOM structure. Note that this * process uses globals and is not re-entrant, so don't call it within itself * (eg, from within other functions in lwin_wkt.c) or from a threaded program. * Note that parser_result.wkinput picks up a reference to wktstr. */ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int parser_check_flags) { int parse_rv = 0; /* Clean up our global parser result. */ lwgeom_parser_result_init(&global_parser_result); /* Set the input text string, and parse checks. */ global_parser_result.wkinput = wktstr; global_parser_result.parser_check_flags = parser_check_flags; wkt_lexer_init(wktstr); /* Lexer ready */ parse_rv = wkt_yyparse(); /* Run the parse */ LWDEBUGF(4,"wkt_yyparse returned %d", parse_rv); wkt_lexer_close(); /* Clean up lexer */ /* A non-zero parser return is an error. */ if ( parse_rv != 0 ) { if( ! global_parser_result.errcode ) { global_parser_result.errcode = PARSER_ERROR_OTHER; global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errlocation = wkt_yylloc.last_column; } LWDEBUGF(5, "error returned by wkt_yyparse() @ %d: [%d] '%s'", global_parser_result.errlocation, global_parser_result.errcode, global_parser_result.message); /* Copy the global values into the return pointer */ *parser_result = global_parser_result; return LW_FAILURE; } /* Copy the global value into the return pointer */ *parser_result = global_parser_result; return LW_SUCCESS; } #define WKT_ERROR() { if ( global_parser_result.errcode != 0 ) { YYERROR; } } /* Line 268 of yacc.c */ #line 173 "lwin_wkt_parse.c" /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { POINT_TOK = 258, LINESTRING_TOK = 259, POLYGON_TOK = 260, MPOINT_TOK = 261, MLINESTRING_TOK = 262, MPOLYGON_TOK = 263, MSURFACE_TOK = 264, MCURVE_TOK = 265, CURVEPOLYGON_TOK = 266, COMPOUNDCURVE_TOK = 267, CIRCULARSTRING_TOK = 268, COLLECTION_TOK = 269, RBRACKET_TOK = 270, LBRACKET_TOK = 271, COMMA_TOK = 272, EMPTY_TOK = 273, SEMICOLON_TOK = 274, TRIANGLE_TOK = 275, TIN_TOK = 276, POLYHEDRALSURFACE_TOK = 277, DOUBLE_TOK = 278, DIMENSIONALITY_TOK = 279, SRID_TOK = 280 }; #endif /* Tokens. */ #define POINT_TOK 258 #define LINESTRING_TOK 259 #define POLYGON_TOK 260 #define MPOINT_TOK 261 #define MLINESTRING_TOK 262 #define MPOLYGON_TOK 263 #define MSURFACE_TOK 264 #define MCURVE_TOK 265 #define CURVEPOLYGON_TOK 266 #define COMPOUNDCURVE_TOK 267 #define CIRCULARSTRING_TOK 268 #define COLLECTION_TOK 269 #define RBRACKET_TOK 270 #define LBRACKET_TOK 271 #define COMMA_TOK 272 #define EMPTY_TOK 273 #define SEMICOLON_TOK 274 #define TRIANGLE_TOK 275 #define TIN_TOK 276 #define POLYHEDRALSURFACE_TOK 277 #define DOUBLE_TOK 278 #define DIMENSIONALITY_TOK 279 #define SRID_TOK 280 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 293 of yacc.c */ #line 98 "lwin_wkt_parse.y" int integervalue; double doublevalue; char *stringvalue; LWGEOM *geometryvalue; POINT coordinatevalue; POINTARRAY *ptarrayvalue; /* Line 293 of yacc.c */ #line 270 "lwin_wkt_parse.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 343 of yacc.c */ #line 295 "lwin_wkt_parse.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 80 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 294 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 26 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 40 /* YYNRULES -- Number of rules. */ #define YYNRULES 136 /* YYNRULES -- Number of states. */ #define YYNSTATES 264 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 280 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 5, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 44, 50, 54, 57, 61, 63, 68, 74, 78, 81, 85, 89, 93, 95, 97, 99, 104, 110, 114, 117, 122, 128, 132, 135, 140, 146, 150, 153, 157, 159, 163, 165, 170, 176, 180, 183, 187, 189, 193, 198, 204, 208, 211, 215, 217, 219, 221, 223, 225, 229, 231, 235, 237, 241, 245, 250, 256, 260, 263, 267, 271, 275, 277, 279, 281, 286, 292, 296, 299, 303, 307, 311, 315, 317, 319, 321, 323, 328, 334, 338, 341, 345, 347, 352, 358, 362, 365, 370, 376, 380, 383, 387, 389, 393, 395, 402, 410, 414, 417, 423, 428, 434, 438, 441, 445, 447, 449, 453, 455, 460, 466, 470, 473, 477, 479, 482, 486 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 27, 0, -1, 28, -1, 25, 19, 28, -1, 63, -1, 55, -1, 54, -1, 48, -1, 38, -1, 41, -1, 60, -1, 52, -1, 35, -1, 31, -1, 50, -1, 33, -1, 34, -1, 58, -1, 29, -1, 14, 16, 30, 15, -1, 14, 24, 16, 30, 15, -1, 14, 24, 18, -1, 14, 18, -1, 30, 17, 28, -1, 28, -1, 9, 16, 32, 15, -1, 9, 24, 16, 32, 15, -1, 9, 24, 18, -1, 9, 18, -1, 32, 17, 38, -1, 32, 17, 41, -1, 32, 17, 39, -1, 38, -1, 41, -1, 39, -1, 21, 16, 57, 15, -1, 21, 24, 16, 57, 15, -1, 21, 24, 18, -1, 21, 18, -1, 22, 16, 37, 15, -1, 22, 24, 16, 37, 15, -1, 22, 24, 18, -1, 22, 18, -1, 8, 16, 36, 15, -1, 8, 24, 16, 36, 15, -1, 8, 24, 18, -1, 8, 18, -1, 36, 17, 39, -1, 39, -1, 37, 17, 40, -1, 40, -1, 5, 16, 45, 15, -1, 5, 24, 16, 45, 15, -1, 5, 24, 18, -1, 5, 18, -1, 16, 45, 15, -1, 18, -1, 16, 44, 15, -1, 11, 16, 42, 15, -1, 11, 24, 16, 42, 15, -1, 11, 24, 18, -1, 11, 18, -1, 42, 17, 43, -1, 43, -1, 56, -1, 55, -1, 48, -1, 54, -1, 44, 17, 46, -1, 46, -1, 45, 17, 47, -1, 47, -1, 16, 64, 15, -1, 16, 64, 15, -1, 12, 16, 49, 15, -1, 12, 24, 16, 49, 15, -1, 12, 24, 18, -1, 12, 18, -1, 49, 17, 54, -1, 49, 17, 55, -1, 49, 17, 56, -1, 54, -1, 55, -1, 56, -1, 10, 16, 51, 15, -1, 10, 24, 16, 51, 15, -1, 10, 24, 18, -1, 10, 18, -1, 51, 17, 54, -1, 51, 17, 48, -1, 51, 17, 55, -1, 51, 17, 56, -1, 54, -1, 48, -1, 55, -1, 56, -1, 7, 16, 53, 15, -1, 7, 24, 16, 53, 15, -1, 7, 24, 18, -1, 7, 18, -1, 53, 17, 56, -1, 56, -1, 13, 16, 64, 15, -1, 13, 24, 16, 64, 15, -1, 13, 24, 18, -1, 13, 18, -1, 4, 16, 64, 15, -1, 4, 24, 16, 64, 15, -1, 4, 24, 18, -1, 4, 18, -1, 16, 64, 15, -1, 18, -1, 57, 17, 59, -1, 59, -1, 20, 16, 16, 64, 15, 15, -1, 20, 24, 16, 16, 64, 15, 15, -1, 20, 24, 18, -1, 20, 18, -1, 16, 16, 64, 15, 15, -1, 6, 16, 61, 15, -1, 6, 24, 16, 61, 15, -1, 6, 24, 18, -1, 6, 18, -1, 61, 17, 62, -1, 62, -1, 65, -1, 16, 65, 15, -1, 18, -1, 3, 16, 64, 15, -1, 3, 24, 16, 64, 15, -1, 3, 24, 18, -1, 3, 18, -1, 64, 17, 65, -1, 65, -1, 23, 23, -1, 23, 23, 23, -1, 23, 23, 23, 23, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 202, 202, 204, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 225, 227, 229, 231, 235, 237, 241, 243, 245, 247, 251, 253, 255, 257, 259, 261, 265, 267, 269, 271, 275, 277, 279, 281, 285, 287, 289, 291, 295, 297, 301, 303, 307, 309, 311, 313, 317, 319, 323, 326, 328, 330, 332, 336, 338, 342, 343, 344, 345, 348, 350, 354, 356, 360, 363, 366, 368, 370, 372, 376, 378, 380, 382, 384, 386, 390, 392, 394, 396, 400, 402, 404, 406, 408, 410, 412, 414, 418, 420, 422, 424, 428, 430, 434, 436, 438, 440, 444, 446, 448, 450, 454, 456, 460, 462, 466, 468, 470, 472, 476, 480, 482, 484, 486, 490, 492, 496, 498, 500, 504, 506, 508, 510, 514, 516, 520, 522, 524 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "POINT_TOK", "LINESTRING_TOK", "POLYGON_TOK", "MPOINT_TOK", "MLINESTRING_TOK", "MPOLYGON_TOK", "MSURFACE_TOK", "MCURVE_TOK", "CURVEPOLYGON_TOK", "COMPOUNDCURVE_TOK", "CIRCULARSTRING_TOK", "COLLECTION_TOK", "RBRACKET_TOK", "LBRACKET_TOK", "COMMA_TOK", "EMPTY_TOK", "SEMICOLON_TOK", "TRIANGLE_TOK", "TIN_TOK", "POLYHEDRALSURFACE_TOK", "DOUBLE_TOK", "DIMENSIONALITY_TOK", "SRID_TOK", "$accept", "geometry", "geometry_no_srid", "geometrycollection", "geometry_list", "multisurface", "surface_list", "tin", "polyhedralsurface", "multipolygon", "polygon_list", "patch_list", "polygon", "polygon_untagged", "patch", "curvepolygon", "curvering_list", "curvering", "patchring_list", "ring_list", "patchring", "ring", "compoundcurve", "compound_list", "multicurve", "curve_list", "multilinestring", "linestring_list", "circularstring", "linestring", "linestring_untagged", "triangle_list", "triangle", "triangle_untagged", "multipoint", "point_list", "point_untagged", "point", "ptarray", "coordinate", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 26, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 37, 37, 38, 38, 38, 38, 39, 39, 40, 41, 41, 41, 41, 42, 42, 43, 43, 43, 43, 44, 44, 45, 45, 46, 47, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 56, 56, 57, 57, 58, 58, 58, 58, 59, 60, 60, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 63, 64, 64, 65, 65, 65 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 3, 2, 3, 1, 4, 5, 3, 2, 3, 3, 3, 1, 1, 1, 4, 5, 3, 2, 4, 5, 3, 2, 4, 5, 3, 2, 3, 1, 3, 1, 4, 5, 3, 2, 3, 1, 3, 4, 5, 3, 2, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 3, 4, 5, 3, 2, 3, 3, 3, 1, 1, 1, 4, 5, 3, 2, 3, 3, 3, 3, 1, 1, 1, 1, 4, 5, 3, 2, 3, 1, 4, 5, 3, 2, 4, 5, 3, 2, 3, 1, 3, 1, 6, 7, 3, 2, 5, 4, 5, 3, 2, 3, 1, 1, 3, 1, 4, 5, 3, 2, 3, 1, 2, 3, 4 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 18, 13, 15, 16, 12, 8, 9, 7, 14, 11, 6, 5, 17, 10, 4, 0, 131, 0, 0, 109, 0, 0, 54, 0, 0, 122, 0, 0, 99, 0, 0, 46, 0, 0, 28, 0, 0, 87, 0, 0, 61, 0, 0, 77, 0, 0, 105, 0, 0, 22, 0, 0, 117, 0, 0, 38, 0, 0, 42, 0, 0, 1, 0, 0, 133, 0, 130, 0, 0, 108, 0, 0, 71, 0, 53, 0, 127, 0, 124, 125, 0, 121, 0, 111, 0, 101, 0, 98, 0, 56, 0, 48, 0, 45, 0, 32, 34, 33, 0, 27, 93, 0, 92, 94, 95, 0, 86, 0, 63, 66, 67, 65, 64, 0, 60, 0, 81, 82, 83, 0, 76, 0, 0, 104, 24, 0, 0, 21, 0, 0, 116, 0, 0, 113, 0, 37, 0, 0, 50, 0, 41, 3, 134, 128, 0, 0, 106, 0, 0, 51, 0, 0, 0, 119, 0, 0, 0, 96, 0, 0, 0, 43, 0, 0, 25, 0, 0, 84, 0, 0, 58, 0, 0, 74, 0, 0, 102, 0, 19, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 69, 39, 0, 0, 135, 132, 129, 107, 73, 70, 52, 126, 123, 120, 110, 100, 97, 55, 47, 44, 29, 31, 30, 26, 89, 88, 90, 91, 85, 62, 59, 78, 79, 80, 75, 103, 23, 20, 0, 0, 0, 112, 36, 0, 57, 0, 49, 40, 136, 114, 0, 0, 72, 68, 115, 118 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 17, 143, 19, 144, 20, 113, 21, 22, 23, 109, 156, 24, 110, 157, 25, 126, 127, 207, 90, 208, 91, 26, 134, 27, 120, 28, 103, 29, 30, 131, 151, 31, 152, 32, 96, 97, 33, 82, 83 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -90 static const yytype_int16 yypact[] = { 109, -2, 16, 23, 26, 36, 39, 40, 52, 53, 74, 79, 83, 84, 108, 137, 7, 46, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 43, -90, 27, 43, -90, 88, 33, -90, 144, 140, -90, 167, 175, -90, 176, 179, -90, 183, 20, -90, 184, 11, -90, 187, 11, -90, 188, 17, -90, 191, 43, -90, 192, 168, -90, 195, 51, -90, 196, 56, -90, 199, 70, -90, 200, 168, -90, 68, 110, -90, 43, -90, 169, 43, -90, 43, 204, -90, 33, -90, 43, -90, 205, -90, -90, 140, -90, 43, -90, 208, -90, 175, -90, 33, -90, 209, -90, 179, -90, 212, -90, -90, -90, 20, -90, -90, 213, -90, -90, -90, 11, -90, 216, -90, -90, -90, -90, -90, 11, -90, 217, -90, -90, -90, 17, -90, 220, 43, -90, -90, 221, 168, -90, 43, 80, -90, 93, 224, -90, 56, -90, 94, 225, -90, 70, -90, -90, 105, -90, 43, 228, -90, 229, 232, -90, 33, 233, 44, -90, 140, 236, 237, -90, 175, 240, 241, -90, 179, 244, -90, 20, 245, -90, 11, 248, -90, 11, 249, -90, 17, 252, -90, 253, -90, 168, 256, 257, 43, 43, -90, 56, 260, 43, 261, -90, -90, 70, 264, 112, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 47, 265, 268, -90, -90, 269, -90, 94, -90, -90, -90, -90, 131, 132, -90, -90, -90, -90 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -90, -90, 0, -90, 5, -90, 37, -90, -90, -90, 48, 6, -39, -33, -42, -32, 55, -21, -90, -89, -57, 118, -50, 150, -90, 165, -90, 185, -51, -49, -44, 138, -90, 89, -90, 193, 121, -90, -36, -6 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint16 yytable[] = { 18, 86, 104, 170, 121, 119, 122, 129, 128, 130, 135, 123, 136, 114, 34, 2, 35, 137, 179, 115, 116, 2, 36, 10, 11, 3, 79, 101, 140, 102, 11, 9, 37, 101, 38, 102, 107, 98, 108, 40, 39, 41, 43, 84, 44, 85, 80, 42, 164, 89, 45, 166, 46, 167, 47, 49, 52, 50, 53, 219, 48, 104, 257, 51, 54, 175, 81, 147, 55, 58, 56, 59, 150, 121, 119, 122, 57, 60, 114, 160, 123, 129, 128, 130, 115, 116, 155, 135, 171, 136, 61, 161, 62, 98, 137, 64, 201, 65, 63, 67, 70, 68, 71, 66, 87, 196, 88, 69, 72, 202, 206, 200, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 73, 162, 74, 163, 212, 13, 14, 15, 75, 223, 16, 256, 233, 232, 234, 129, 128, 130, 239, 235, 240, 228, 262, 263, 226, 241, 199, 229, 230, 76, 185, 77, 94, 213, 95, 182, 92, 78, 93, 81, 211, 247, 248, 98, 254, 237, 251, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 99, 165, 100, 163, 191, 13, 14, 15, 101, 105, 102, 106, 107, 261, 108, 244, 111, 117, 112, 118, 124, 132, 125, 133, 138, 141, 139, 142, 145, 148, 146, 149, 153, 158, 154, 159, 168, 172, 169, 173, 176, 180, 177, 181, 183, 186, 184, 187, 189, 192, 190, 193, 195, 197, 163, 198, 203, 209, 204, 210, 214, 215, 163, 163, 216, 218, 163, 169, 221, 222, 173, 163, 224, 225, 177, 169, 227, 231, 181, 184, 236, 238, 187, 190, 242, 243, 193, 163, 245, 246, 198, 163, 250, 252, 204, 253, 255, 258, 210, 163, 259, 260, 163, 163, 217, 194, 188, 178, 205, 174, 249, 220 }; #define yypact_value_is_default(yystate) \ ((yystate) == (-90)) #define yytable_value_is_error(yytable_value) \ YYID (0) static const yytype_uint8 yycheck[] = { 0, 37, 46, 92, 55, 55, 55, 58, 58, 58, 61, 55, 61, 52, 16, 4, 18, 61, 107, 52, 52, 4, 24, 12, 13, 5, 19, 16, 64, 18, 13, 11, 16, 16, 18, 18, 16, 43, 18, 16, 24, 18, 16, 16, 18, 18, 0, 24, 84, 16, 24, 87, 16, 89, 18, 16, 16, 18, 18, 15, 24, 105, 15, 24, 24, 101, 23, 16, 16, 16, 18, 18, 16, 124, 124, 124, 24, 24, 117, 79, 124, 132, 132, 132, 117, 117, 16, 138, 94, 138, 16, 23, 18, 99, 138, 16, 16, 18, 24, 16, 16, 18, 18, 24, 16, 141, 18, 24, 24, 16, 16, 147, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 15, 18, 17, 23, 20, 21, 22, 24, 177, 25, 23, 187, 187, 187, 190, 190, 190, 193, 187, 193, 184, 15, 15, 181, 193, 145, 184, 184, 16, 117, 18, 16, 163, 18, 111, 16, 24, 18, 23, 158, 201, 202, 173, 210, 190, 206, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 15, 18, 17, 132, 20, 21, 22, 16, 16, 18, 18, 16, 253, 18, 198, 16, 16, 18, 18, 16, 16, 18, 18, 16, 16, 18, 18, 16, 16, 18, 18, 16, 16, 18, 18, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 15, 15, 17, 17, 169, 138, 124, 105, 153, 99, 204, 173 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 21, 22, 25, 27, 28, 29, 31, 33, 34, 35, 38, 41, 48, 50, 52, 54, 55, 58, 60, 63, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 16, 18, 24, 19, 0, 23, 64, 65, 16, 18, 64, 16, 18, 16, 45, 47, 16, 18, 16, 18, 61, 62, 65, 16, 18, 16, 18, 53, 56, 16, 18, 16, 18, 36, 39, 16, 18, 32, 38, 39, 41, 16, 18, 48, 51, 54, 55, 56, 16, 18, 42, 43, 48, 54, 55, 56, 16, 18, 49, 54, 55, 56, 16, 18, 64, 16, 18, 28, 30, 16, 18, 16, 16, 18, 16, 57, 59, 16, 18, 16, 37, 40, 16, 18, 28, 23, 15, 17, 64, 15, 64, 64, 15, 17, 45, 65, 15, 17, 61, 64, 15, 17, 53, 45, 15, 17, 36, 15, 17, 32, 15, 17, 51, 15, 17, 42, 15, 17, 49, 15, 64, 15, 17, 30, 64, 16, 16, 15, 17, 57, 16, 44, 46, 15, 17, 37, 23, 65, 15, 15, 15, 47, 15, 15, 62, 15, 15, 56, 15, 15, 39, 15, 38, 39, 41, 15, 48, 54, 55, 56, 15, 43, 15, 54, 55, 56, 15, 15, 28, 15, 15, 64, 64, 59, 15, 64, 15, 17, 40, 15, 23, 15, 15, 15, 15, 46, 15, 15 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto yyerrlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, Location); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; YYLTYPE const * const yylocationp; #endif { if (!yyvaluep) return; YYUSE (yylocationp); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; YYLTYPE const * const yylocationp; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); YY_LOCATION_PRINT (yyoutput, *yylocationp); YYFPRINTF (yyoutput, ": "); yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule) #else static void yy_reduce_print (yyvsp, yylsp, yyrule) YYSTYPE *yyvsp; YYLTYPE *yylsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, yylsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = 0; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) #else static void yydestruct (yymsg, yytype, yyvaluep, yylocationp) const char *yymsg; int yytype; YYSTYPE *yyvaluep; YYLTYPE *yylocationp; #endif { YYUSE (yyvaluep); YYUSE (yylocationp); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { case 28: /* "geometry_no_srid" */ /* Line 1391 of yacc.c */ #line 180 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1491 "lwin_wkt_parse.c" break; case 29: /* "geometrycollection" */ /* Line 1391 of yacc.c */ #line 181 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1500 "lwin_wkt_parse.c" break; case 31: /* "multisurface" */ /* Line 1391 of yacc.c */ #line 188 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1509 "lwin_wkt_parse.c" break; case 32: /* "surface_list" */ /* Line 1391 of yacc.c */ #line 167 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1518 "lwin_wkt_parse.c" break; case 33: /* "tin" */ /* Line 1391 of yacc.c */ #line 195 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1527 "lwin_wkt_parse.c" break; case 34: /* "polyhedralsurface" */ /* Line 1391 of yacc.c */ #line 194 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1536 "lwin_wkt_parse.c" break; case 35: /* "multipolygon" */ /* Line 1391 of yacc.c */ #line 187 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1545 "lwin_wkt_parse.c" break; case 36: /* "polygon_list" */ /* Line 1391 of yacc.c */ #line 168 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1554 "lwin_wkt_parse.c" break; case 37: /* "patch_list" */ /* Line 1391 of yacc.c */ #line 169 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1563 "lwin_wkt_parse.c" break; case 38: /* "polygon" */ /* Line 1391 of yacc.c */ #line 191 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1572 "lwin_wkt_parse.c" break; case 39: /* "polygon_untagged" */ /* Line 1391 of yacc.c */ #line 193 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1581 "lwin_wkt_parse.c" break; case 40: /* "patch" */ /* Line 1391 of yacc.c */ #line 192 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1590 "lwin_wkt_parse.c" break; case 41: /* "curvepolygon" */ /* Line 1391 of yacc.c */ #line 178 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1599 "lwin_wkt_parse.c" break; case 42: /* "curvering_list" */ /* Line 1391 of yacc.c */ #line 165 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1608 "lwin_wkt_parse.c" break; case 43: /* "curvering" */ /* Line 1391 of yacc.c */ #line 179 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1617 "lwin_wkt_parse.c" break; case 44: /* "patchring_list" */ /* Line 1391 of yacc.c */ #line 175 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1626 "lwin_wkt_parse.c" break; case 45: /* "ring_list" */ /* Line 1391 of yacc.c */ #line 174 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1635 "lwin_wkt_parse.c" break; case 46: /* "patchring" */ /* Line 1391 of yacc.c */ #line 164 "lwin_wkt_parse.y" { ptarray_free((yyvaluep->ptarrayvalue)); }; /* Line 1391 of yacc.c */ #line 1644 "lwin_wkt_parse.c" break; case 47: /* "ring" */ /* Line 1391 of yacc.c */ #line 163 "lwin_wkt_parse.y" { ptarray_free((yyvaluep->ptarrayvalue)); }; /* Line 1391 of yacc.c */ #line 1653 "lwin_wkt_parse.c" break; case 48: /* "compoundcurve" */ /* Line 1391 of yacc.c */ #line 177 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1662 "lwin_wkt_parse.c" break; case 49: /* "compound_list" */ /* Line 1391 of yacc.c */ #line 173 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1671 "lwin_wkt_parse.c" break; case 50: /* "multicurve" */ /* Line 1391 of yacc.c */ #line 184 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1680 "lwin_wkt_parse.c" break; case 51: /* "curve_list" */ /* Line 1391 of yacc.c */ #line 172 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1689 "lwin_wkt_parse.c" break; case 52: /* "multilinestring" */ /* Line 1391 of yacc.c */ #line 185 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1698 "lwin_wkt_parse.c" break; case 53: /* "linestring_list" */ /* Line 1391 of yacc.c */ #line 171 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1707 "lwin_wkt_parse.c" break; case 54: /* "circularstring" */ /* Line 1391 of yacc.c */ #line 176 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1716 "lwin_wkt_parse.c" break; case 55: /* "linestring" */ /* Line 1391 of yacc.c */ #line 182 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1725 "lwin_wkt_parse.c" break; case 56: /* "linestring_untagged" */ /* Line 1391 of yacc.c */ #line 183 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1734 "lwin_wkt_parse.c" break; case 57: /* "triangle_list" */ /* Line 1391 of yacc.c */ #line 166 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1743 "lwin_wkt_parse.c" break; case 58: /* "triangle" */ /* Line 1391 of yacc.c */ #line 196 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1752 "lwin_wkt_parse.c" break; case 59: /* "triangle_untagged" */ /* Line 1391 of yacc.c */ #line 197 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1761 "lwin_wkt_parse.c" break; case 60: /* "multipoint" */ /* Line 1391 of yacc.c */ #line 186 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1770 "lwin_wkt_parse.c" break; case 61: /* "point_list" */ /* Line 1391 of yacc.c */ #line 170 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1779 "lwin_wkt_parse.c" break; case 62: /* "point_untagged" */ /* Line 1391 of yacc.c */ #line 190 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1788 "lwin_wkt_parse.c" break; case 63: /* "point" */ /* Line 1391 of yacc.c */ #line 189 "lwin_wkt_parse.y" { lwgeom_free((yyvaluep->geometryvalue)); }; /* Line 1391 of yacc.c */ #line 1797 "lwin_wkt_parse.c" break; case 64: /* "ptarray" */ /* Line 1391 of yacc.c */ #line 162 "lwin_wkt_parse.y" { ptarray_free((yyvaluep->ptarrayvalue)); }; /* Line 1391 of yacc.c */ #line 1806 "lwin_wkt_parse.c" break; default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Location data for the lookahead symbol. */ YYLTYPE yylloc; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls; YYLTYPE *yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[3]; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yytoken = 0; yyss = yyssa; yyvs = yyvsa; yyls = yylsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; yylsp = yyls; #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = 1; yylloc.first_column = yylloc.last_column = 1; #endif goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; YYLTYPE *yyls1 = yyls; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); yyls = yyls1; yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); YYSTACK_RELOCATE (yyls_alloc, yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; *++yylsp = yylloc; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; /* Default location. */ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: /* Line 1806 of yacc.c */ #line 203 "lwin_wkt_parse.y" { wkt_parser_geometry_new((yyvsp[(1) - (1)].geometryvalue), SRID_UNKNOWN); WKT_ERROR(); } break; case 3: /* Line 1806 of yacc.c */ #line 205 "lwin_wkt_parse.y" { wkt_parser_geometry_new((yyvsp[(3) - (3)].geometryvalue), (yyvsp[(1) - (3)].integervalue)); WKT_ERROR(); } break; case 4: /* Line 1806 of yacc.c */ #line 208 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 5: /* Line 1806 of yacc.c */ #line 209 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 6: /* Line 1806 of yacc.c */ #line 210 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 7: /* Line 1806 of yacc.c */ #line 211 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 8: /* Line 1806 of yacc.c */ #line 212 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 9: /* Line 1806 of yacc.c */ #line 213 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 10: /* Line 1806 of yacc.c */ #line 214 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 11: /* Line 1806 of yacc.c */ #line 215 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 12: /* Line 1806 of yacc.c */ #line 216 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 13: /* Line 1806 of yacc.c */ #line 217 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 14: /* Line 1806 of yacc.c */ #line 218 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 15: /* Line 1806 of yacc.c */ #line 219 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 16: /* Line 1806 of yacc.c */ #line 220 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 17: /* Line 1806 of yacc.c */ #line 221 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 18: /* Line 1806 of yacc.c */ #line 222 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 19: /* Line 1806 of yacc.c */ #line 226 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 20: /* Line 1806 of yacc.c */ #line 228 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 21: /* Line 1806 of yacc.c */ #line 230 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 22: /* Line 1806 of yacc.c */ #line 232 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, NULL); WKT_ERROR(); } break; case 23: /* Line 1806 of yacc.c */ #line 236 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 24: /* Line 1806 of yacc.c */ #line 238 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 25: /* Line 1806 of yacc.c */ #line 242 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 26: /* Line 1806 of yacc.c */ #line 244 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 27: /* Line 1806 of yacc.c */ #line 246 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 28: /* Line 1806 of yacc.c */ #line 248 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, NULL); WKT_ERROR(); } break; case 29: /* Line 1806 of yacc.c */ #line 252 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 30: /* Line 1806 of yacc.c */ #line 254 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 31: /* Line 1806 of yacc.c */ #line 256 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 32: /* Line 1806 of yacc.c */ #line 258 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 33: /* Line 1806 of yacc.c */ #line 260 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 34: /* Line 1806 of yacc.c */ #line 262 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 35: /* Line 1806 of yacc.c */ #line 266 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 36: /* Line 1806 of yacc.c */ #line 268 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 37: /* Line 1806 of yacc.c */ #line 270 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 38: /* Line 1806 of yacc.c */ #line 272 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(TINTYPE, NULL, NULL); WKT_ERROR(); } break; case 39: /* Line 1806 of yacc.c */ #line 276 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 40: /* Line 1806 of yacc.c */ #line 278 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 41: /* Line 1806 of yacc.c */ #line 280 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 42: /* Line 1806 of yacc.c */ #line 282 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, NULL); WKT_ERROR(); } break; case 43: /* Line 1806 of yacc.c */ #line 286 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 44: /* Line 1806 of yacc.c */ #line 288 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 45: /* Line 1806 of yacc.c */ #line 290 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 46: /* Line 1806 of yacc.c */ #line 292 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, NULL); WKT_ERROR(); } break; case 47: /* Line 1806 of yacc.c */ #line 296 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 48: /* Line 1806 of yacc.c */ #line 298 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 49: /* Line 1806 of yacc.c */ #line 302 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 50: /* Line 1806 of yacc.c */ #line 304 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 51: /* Line 1806 of yacc.c */ #line 308 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 52: /* Line 1806 of yacc.c */ #line 310 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize((yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 53: /* Line 1806 of yacc.c */ #line 312 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 54: /* Line 1806 of yacc.c */ #line 314 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); } break; case 55: /* Line 1806 of yacc.c */ #line 318 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(2) - (3)].geometryvalue); } break; case 56: /* Line 1806 of yacc.c */ #line 320 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); } break; case 57: /* Line 1806 of yacc.c */ #line 323 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(2) - (3)].geometryvalue); } break; case 58: /* Line 1806 of yacc.c */ #line 327 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 59: /* Line 1806 of yacc.c */ #line 329 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize((yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 60: /* Line 1806 of yacc.c */ #line 331 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 61: /* Line 1806 of yacc.c */ #line 333 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_finalize(NULL, NULL); WKT_ERROR(); } break; case 62: /* Line 1806 of yacc.c */ #line 337 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 63: /* Line 1806 of yacc.c */ #line 339 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_curvepolygon_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 64: /* Line 1806 of yacc.c */ #line 342 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 65: /* Line 1806 of yacc.c */ #line 343 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 66: /* Line 1806 of yacc.c */ #line 344 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 67: /* Line 1806 of yacc.c */ #line 345 "lwin_wkt_parse.y" { (yyval.geometryvalue) = (yyvsp[(1) - (1)].geometryvalue); } break; case 68: /* Line 1806 of yacc.c */ #line 349 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].ptarrayvalue),'Z'); WKT_ERROR(); } break; case 69: /* Line 1806 of yacc.c */ #line 351 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[(1) - (1)].ptarrayvalue),'Z'); WKT_ERROR(); } break; case 70: /* Line 1806 of yacc.c */ #line 355 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_add_ring((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].ptarrayvalue),'2'); WKT_ERROR(); } break; case 71: /* Line 1806 of yacc.c */ #line 357 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_polygon_new((yyvsp[(1) - (1)].ptarrayvalue),'2'); WKT_ERROR(); } break; case 72: /* Line 1806 of yacc.c */ #line 360 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = (yyvsp[(2) - (3)].ptarrayvalue); } break; case 73: /* Line 1806 of yacc.c */ #line 363 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = (yyvsp[(2) - (3)].ptarrayvalue); } break; case 74: /* Line 1806 of yacc.c */ #line 367 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 75: /* Line 1806 of yacc.c */ #line 369 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 76: /* Line 1806 of yacc.c */ #line 371 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 77: /* Line 1806 of yacc.c */ #line 373 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, NULL); WKT_ERROR(); } break; case 78: /* Line 1806 of yacc.c */ #line 377 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 79: /* Line 1806 of yacc.c */ #line 379 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 80: /* Line 1806 of yacc.c */ #line 381 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_compound_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 81: /* Line 1806 of yacc.c */ #line 383 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 82: /* Line 1806 of yacc.c */ #line 385 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 83: /* Line 1806 of yacc.c */ #line 387 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 84: /* Line 1806 of yacc.c */ #line 391 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 85: /* Line 1806 of yacc.c */ #line 393 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 86: /* Line 1806 of yacc.c */ #line 395 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 87: /* Line 1806 of yacc.c */ #line 397 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, NULL); WKT_ERROR(); } break; case 88: /* Line 1806 of yacc.c */ #line 401 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 89: /* Line 1806 of yacc.c */ #line 403 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 90: /* Line 1806 of yacc.c */ #line 405 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 91: /* Line 1806 of yacc.c */ #line 407 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 92: /* Line 1806 of yacc.c */ #line 409 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 93: /* Line 1806 of yacc.c */ #line 411 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 94: /* Line 1806 of yacc.c */ #line 413 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 95: /* Line 1806 of yacc.c */ #line 415 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 96: /* Line 1806 of yacc.c */ #line 419 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 97: /* Line 1806 of yacc.c */ #line 421 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 98: /* Line 1806 of yacc.c */ #line 423 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 99: /* Line 1806 of yacc.c */ #line 425 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTILINETYPE, NULL, NULL); WKT_ERROR(); } break; case 100: /* Line 1806 of yacc.c */ #line 429 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 101: /* Line 1806 of yacc.c */ #line 431 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 102: /* Line 1806 of yacc.c */ #line 435 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); } break; case 103: /* Line 1806 of yacc.c */ #line 437 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 104: /* Line 1806 of yacc.c */ #line 439 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 105: /* Line 1806 of yacc.c */ #line 441 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_circularstring_new(NULL, NULL); WKT_ERROR(); } break; case 106: /* Line 1806 of yacc.c */ #line 445 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); } break; case 107: /* Line 1806 of yacc.c */ #line 447 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 108: /* Line 1806 of yacc.c */ #line 449 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 109: /* Line 1806 of yacc.c */ #line 451 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); } break; case 110: /* Line 1806 of yacc.c */ #line 455 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new((yyvsp[(2) - (3)].ptarrayvalue), NULL); WKT_ERROR(); } break; case 111: /* Line 1806 of yacc.c */ #line 457 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); } break; case 112: /* Line 1806 of yacc.c */ #line 461 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 113: /* Line 1806 of yacc.c */ #line 463 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 114: /* Line 1806 of yacc.c */ #line 467 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(4) - (6)].ptarrayvalue), NULL); WKT_ERROR(); } break; case 115: /* Line 1806 of yacc.c */ #line 469 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(5) - (7)].ptarrayvalue), (yyvsp[(2) - (7)].stringvalue)); WKT_ERROR(); } break; case 116: /* Line 1806 of yacc.c */ #line 471 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 117: /* Line 1806 of yacc.c */ #line 473 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new(NULL, NULL); WKT_ERROR(); } break; case 118: /* Line 1806 of yacc.c */ #line 477 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_triangle_new((yyvsp[(3) - (5)].ptarrayvalue), NULL); WKT_ERROR(); } break; case 119: /* Line 1806 of yacc.c */ #line 481 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[(3) - (4)].geometryvalue), NULL); WKT_ERROR(); } break; case 120: /* Line 1806 of yacc.c */ #line 483 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, (yyvsp[(4) - (5)].geometryvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 121: /* Line 1806 of yacc.c */ #line 485 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 122: /* Line 1806 of yacc.c */ #line 487 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, NULL); WKT_ERROR(); } break; case 123: /* Line 1806 of yacc.c */ #line 491 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_add_geom((yyvsp[(1) - (3)].geometryvalue),(yyvsp[(3) - (3)].geometryvalue)); WKT_ERROR(); } break; case 124: /* Line 1806 of yacc.c */ #line 493 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_collection_new((yyvsp[(1) - (1)].geometryvalue)); WKT_ERROR(); } break; case 125: /* Line 1806 of yacc.c */ #line 497 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[(1) - (1)].coordinatevalue)),NULL); WKT_ERROR(); } break; case 126: /* Line 1806 of yacc.c */ #line 499 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(wkt_parser_ptarray_new((yyvsp[(2) - (3)].coordinatevalue)),NULL); WKT_ERROR(); } break; case 127: /* Line 1806 of yacc.c */ #line 501 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(NULL, NULL); WKT_ERROR(); } break; case 128: /* Line 1806 of yacc.c */ #line 505 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[(3) - (4)].ptarrayvalue), NULL); WKT_ERROR(); } break; case 129: /* Line 1806 of yacc.c */ #line 507 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new((yyvsp[(4) - (5)].ptarrayvalue), (yyvsp[(2) - (5)].stringvalue)); WKT_ERROR(); } break; case 130: /* Line 1806 of yacc.c */ #line 509 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(NULL, (yyvsp[(2) - (3)].stringvalue)); WKT_ERROR(); } break; case 131: /* Line 1806 of yacc.c */ #line 511 "lwin_wkt_parse.y" { (yyval.geometryvalue) = wkt_parser_point_new(NULL,NULL); WKT_ERROR(); } break; case 132: /* Line 1806 of yacc.c */ #line 515 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = wkt_parser_ptarray_add_coord((yyvsp[(1) - (3)].ptarrayvalue), (yyvsp[(3) - (3)].coordinatevalue)); WKT_ERROR(); } break; case 133: /* Line 1806 of yacc.c */ #line 517 "lwin_wkt_parse.y" { (yyval.ptarrayvalue) = wkt_parser_ptarray_new((yyvsp[(1) - (1)].coordinatevalue)); WKT_ERROR(); } break; case 134: /* Line 1806 of yacc.c */ #line 521 "lwin_wkt_parse.y" { (yyval.coordinatevalue) = wkt_parser_coord_2((yyvsp[(1) - (2)].doublevalue), (yyvsp[(2) - (2)].doublevalue)); WKT_ERROR(); } break; case 135: /* Line 1806 of yacc.c */ #line 523 "lwin_wkt_parse.y" { (yyval.coordinatevalue) = wkt_parser_coord_3((yyvsp[(1) - (3)].doublevalue), (yyvsp[(2) - (3)].doublevalue), (yyvsp[(3) - (3)].doublevalue)); WKT_ERROR(); } break; case 136: /* Line 1806 of yacc.c */ #line 525 "lwin_wkt_parse.y" { (yyval.coordinatevalue) = wkt_parser_coord_4((yyvsp[(1) - (4)].doublevalue), (yyvsp[(2) - (4)].doublevalue), (yyvsp[(3) - (4)].doublevalue), (yyvsp[(4) - (4)].doublevalue)); WKT_ERROR(); } break; /* Line 1806 of yacc.c */ #line 3081 "lwin_wkt_parse.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } yyerror_range[1] = yylloc; if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, &yylloc); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; yyerror_range[1] = yylsp[1-yylen]; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yyerror_range[1] = *yylsp; yydestruct ("Error: popping", yystos[yystate], yyvsp, yylsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; yyerror_range[2] = yylloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, yyerror_range, 2); *++yylsp = yyloc; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, yylsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 2067 of yacc.c */ #line 527 "lwin_wkt_parse.y" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkt_lex.l����������������������������������������������������0000644�0000000�0000000�00000005204�12047044677�020440� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* The lexer */ #include <stdio.h> #include <string.h> #include "lwin_wkt.h" #include "lwin_wkt_parse.h" #include "lwgeom_log.h" static YY_BUFFER_STATE wkt_yy_buf_state; /* * Set up the lexer! */ void wkt_lexer_init(char *src) { wkt_yy_buf_state = wkt_yy_scan_string(src); } /* * Clean up the lexer! */ void wkt_lexer_close() { wkt_yy_delete_buffer(wkt_yy_buf_state); } /* * Handle errors due to unexpected junk in WKT strings. */ static void wkt_lexer_unknown() { /* Set the global error state */ global_parser_result.errcode = PARSER_ERROR_OTHER; global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errlocation = wkt_yylloc.last_column; } /* * This macro is magically run after a rule is found but before the main * action is run. We use it to update the parse location information * so we can report on where things fail. Also optionally to dump * debugging info. */ #define YY_USER_ACTION do { \ wkt_yylloc.first_line = wkt_yylloc.last_line = yylineno; \ wkt_yylloc.first_column = wkt_yylloc.last_column; \ wkt_yylloc.last_column += yyleng; \ LWDEBUGF(5,"lex: %s", wkt_yytext); \ } while (0); %} %option prefix="wkt_yy" %option nounput %option never-interactive %option outfile="lwin_wkt_lex.c" %option noyywrap %% -?(([0-9]+\.?)|([0-9]*\.?[0-9]+)([eE][-+]?[0-9]+)?) { LWDEBUG(5,"DOUBLE"); wkt_yylval.doublevalue = atof(wkt_yytext); return DOUBLE_TOK; } SRID=-?[0-9]+ { LWDEBUG(5,"SRID"); wkt_yylval.integervalue = wkt_lexer_read_srid(wkt_yytext); return SRID_TOK; } GEOMETRYCOLLECTION { return COLLECTION_TOK; } MULTISURFACE { return MSURFACE_TOK; } MULTIPOLYGON { return MPOLYGON_TOK; } MULTICURVE { return MCURVE_TOK; } MULTILINESTRING { return MLINESTRING_TOK; } MULTIPOINT { return MPOINT_TOK; } CURVEPOLYGON { return CURVEPOLYGON_TOK; } POLYGON { return POLYGON_TOK; } COMPOUNDCURVE { return COMPOUNDCURVE_TOK; } CIRCULARSTRING { return CIRCULARSTRING_TOK; } LINESTRING { return LINESTRING_TOK; } POLYHEDRALSURFACE { return POLYHEDRALSURFACE_TOK; } TRIANGLE { return TRIANGLE_TOK; } TIN { return TIN_TOK; } POINT { return POINT_TOK; } EMPTY { return EMPTY_TOK; } Z|M|ZM { LWDEBUG(5,"DIMENSIONALITY"); wkt_yylval.stringvalue = wkt_yytext; return DIMENSIONALITY_TOK; } \( { LWDEBUG(5,"LBRACKET"); return LBRACKET_TOK; } \) { LWDEBUG(5,"RBRACKET"); return RBRACKET_TOK; } , { LWDEBUG(5,"COMMA"); return COMMA_TOK; } \; { LWDEBUG(5,"SEMICOLON"); return SEMICOLON_TOK; } [ \t\n\r]+ { /* ignore whitespace */ LWDEBUG(5,"WHITESPACE"); } . { /* Error out and stop parsing on unknown/unexpected characters */ LWDEBUG(5,"UNKNOWN"); wkt_lexer_unknown(); yyterminate(); } %% ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwcircstring.c����������������������������������������������������0000644�0000000�0000000�00000016657�12236025367�020444� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* basic LWCIRCSTRING functions */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" void printLWCIRCSTRING(LWCIRCSTRING *curve); void lwcircstring_reverse(LWCIRCSTRING *curve); void lwcircstring_release(LWCIRCSTRING *lwcirc); char lwcircstring_same(const LWCIRCSTRING *me, const LWCIRCSTRING *you); LWCIRCSTRING *lwcircstring_from_lwpointarray(int srid, uint32_t npoints, LWPOINT **points); LWCIRCSTRING *lwcircstring_from_lwmpoint(int srid, LWMPOINT *mpoint); LWCIRCSTRING *lwcircstring_addpoint(LWCIRCSTRING *curve, LWPOINT *point, uint32_t where); LWCIRCSTRING *lwcircstring_removepoint(LWCIRCSTRING *curve, uint32_t index); void lwcircstring_setPoint4d(LWCIRCSTRING *curve, uint32_t index, POINT4D *newpoint); /* * Construct a new LWCIRCSTRING. points will *NOT* be copied * use SRID=SRID_UNKNOWN for unknown SRID (will have 8bit type's S = 0) */ LWCIRCSTRING * lwcircstring_construct(int srid, GBOX *bbox, POINTARRAY *points) { LWCIRCSTRING *result; /* * The first arc requires three points. Each additional * arc requires two more points. Thus the minimum point count * is three, and the count must be odd. */ if (points->npoints % 2 != 1 || points->npoints < 3) { lwnotice("lwcircstring_construct: invalid point count %d", points->npoints); } result = (LWCIRCSTRING*) lwalloc(sizeof(LWCIRCSTRING)); result->type = CIRCSTRINGTYPE; result->flags = points->flags; FLAGS_SET_BBOX(result->flags, bbox?1:0); result->srid = srid; result->points = points; result->bbox = bbox; return result; } LWCIRCSTRING * lwcircstring_construct_empty(int srid, char hasz, char hasm) { LWCIRCSTRING *result = lwalloc(sizeof(LWCIRCSTRING)); result->type = CIRCSTRINGTYPE; result->flags = gflags(hasz,hasm,0); result->srid = srid; result->points = ptarray_construct_empty(hasz, hasm, 1); result->bbox = NULL; return result; } void lwcircstring_release(LWCIRCSTRING *lwcirc) { lwgeom_release(lwcircstring_as_lwgeom(lwcirc)); } void lwcircstring_free(LWCIRCSTRING *curve) { if ( ! curve ) return; if ( curve->bbox ) lwfree(curve->bbox); if ( curve->points ) ptarray_free(curve->points); lwfree(curve); } void printLWCIRCSTRING(LWCIRCSTRING *curve) { lwnotice("LWCIRCSTRING {"); lwnotice(" ndims = %i", (int)FLAGS_NDIMS(curve->flags)); lwnotice(" srid = %i", (int)curve->srid); printPA(curve->points); lwnotice("}"); } /* @brief Clone LWCIRCSTRING object. Serialized point lists are not copied. * * @see ptarray_clone */ LWCIRCSTRING * lwcircstring_clone(const LWCIRCSTRING *g) { return (LWCIRCSTRING *)lwline_clone((LWLINE *)g); } void lwcircstring_reverse(LWCIRCSTRING *curve) { ptarray_reverse(curve->points); } /* check coordinate equality */ char lwcircstring_same(const LWCIRCSTRING *me, const LWCIRCSTRING *you) { return ptarray_same(me->points, you->points); } /* * Construct a LWCIRCSTRING from an array of LWPOINTs * LWCIRCSTRING dimensions are large enough to host all input dimensions. */ LWCIRCSTRING * lwcircstring_from_lwpointarray(int srid, uint32_t npoints, LWPOINT **points) { int zmflag=0; uint32_t i; POINTARRAY *pa; uint8_t *newpoints, *ptr; size_t ptsize, size; /* * Find output dimensions, check integrity */ for (i = 0; i < npoints; i++) { if (points[i]->type != POINTTYPE) { lwerror("lwcurve_from_lwpointarray: invalid input type: %s", lwtype_name(points[i]->type)); return NULL; } if (FLAGS_GET_Z(points[i]->flags)) zmflag |= 2; if (FLAGS_GET_M(points[i]->flags)) zmflag |= 1; if (zmflag == 3) break; } if (zmflag == 0) ptsize = 2 * sizeof(double); else if (zmflag == 3) ptsize = 4 * sizeof(double); else ptsize = 3 * sizeof(double); /* * Allocate output points array */ size = ptsize * npoints; newpoints = lwalloc(size); memset(newpoints, 0, size); ptr = newpoints; for (i = 0; i < npoints; i++) { size = ptarray_point_size(points[i]->point); memcpy(ptr, getPoint_internal(points[i]->point, 0), size); ptr += ptsize; } pa = ptarray_construct_reference_data(zmflag&2, zmflag&1, npoints, newpoints); return lwcircstring_construct(srid, NULL, pa); } /* * Construct a LWCIRCSTRING from a LWMPOINT */ LWCIRCSTRING * lwcircstring_from_lwmpoint(int srid, LWMPOINT *mpoint) { uint32_t i; POINTARRAY *pa; char zmflag = FLAGS_GET_ZM(mpoint->flags); size_t ptsize, size; uint8_t *newpoints, *ptr; if (zmflag == 0) ptsize = 2 * sizeof(double); else if (zmflag == 3) ptsize = 4 * sizeof(double); else ptsize = 3 * sizeof(double); /* Allocate space for output points */ size = ptsize * mpoint->ngeoms; newpoints = lwalloc(size); memset(newpoints, 0, size); ptr = newpoints; for (i = 0; i < mpoint->ngeoms; i++) { memcpy(ptr, getPoint_internal(mpoint->geoms[i]->point, 0), ptsize); ptr += ptsize; } pa = ptarray_construct_reference_data(zmflag&2, zmflag&1, mpoint->ngeoms, newpoints); LWDEBUGF(3, "lwcurve_from_lwmpoint: constructed pointarray for %d points, %d zmflag", mpoint->ngeoms, zmflag); return lwcircstring_construct(srid, NULL, pa); } LWCIRCSTRING * lwcircstring_addpoint(LWCIRCSTRING *curve, LWPOINT *point, uint32_t where) { POINTARRAY *newpa; LWCIRCSTRING *ret; newpa = ptarray_addPoint(curve->points, getPoint_internal(point->point, 0), FLAGS_NDIMS(point->flags), where); ret = lwcircstring_construct(curve->srid, NULL, newpa); return ret; } LWCIRCSTRING * lwcircstring_removepoint(LWCIRCSTRING *curve, uint32_t index) { POINTARRAY *newpa; LWCIRCSTRING *ret; newpa = ptarray_removePoint(curve->points, index); ret = lwcircstring_construct(curve->srid, NULL, newpa); return ret; } /* * Note: input will be changed, make sure you have permissions for this. * */ void lwcircstring_setPoint4d(LWCIRCSTRING *curve, uint32_t index, POINT4D *newpoint) { ptarray_set_point4d(curve->points, index, newpoint); } int lwcircstring_is_closed(const LWCIRCSTRING *curve) { if (FLAGS_GET_Z(curve->flags)) return ptarray_is_closed_3d(curve->points); return ptarray_is_closed_2d(curve->points); } int lwcircstring_is_empty(const LWCIRCSTRING *circ) { if ( !circ->points || circ->points->npoints < 1 ) return LW_TRUE; return LW_FALSE; } double lwcircstring_length(const LWCIRCSTRING *circ) { return lwcircstring_length_2d(circ); } double lwcircstring_length_2d(const LWCIRCSTRING *circ) { if ( lwcircstring_is_empty(circ) ) return 0.0; return ptarray_arc_length_2d(circ->points); } /* * Returns freshly allocated #LWPOINT that corresponds to the index where. * Returns NULL if the geometry is empty or the index invalid. */ LWPOINT* lwcircstring_get_lwpoint(LWCIRCSTRING *circ, int where) { POINT4D pt; LWPOINT *lwpoint; POINTARRAY *pa; if ( lwcircstring_is_empty(circ) || where < 0 || where >= circ->points->npoints ) return NULL; pa = ptarray_construct_empty(FLAGS_GET_Z(circ->flags), FLAGS_GET_M(circ->flags), 1); pt = getPoint4d(circ->points, where); ptarray_append_point(pa, &pt, LW_TRUE); lwpoint = lwpoint_construct(circ->srid, NULL, pa); return lwpoint; } ���������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwout_wkt.c�������������������������������������������������������0000644�0000000�0000000�00000044651�12045033704�017754� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeom_log.h" #include "stringbuffer.h" static void lwgeom_to_wkt_sb(const LWGEOM *geom, stringbuffer_t *sb, int precision, uint8_t variant); /* * ISO format uses both Z and M qualifiers. * Extended format only uses an M qualifier for 3DM variants, where it is not * clear what the third dimension represents. * SFSQL format never has more than two dimensions, so no qualifiers. */ static void dimension_qualifiers_to_wkt_sb(const LWGEOM *geom, stringbuffer_t *sb, uint8_t variant) { /* Extended WKT: POINTM(0 0 0) */ #if 0 if ( (variant & WKT_EXTENDED) && ! (variant & WKT_IS_CHILD) && FLAGS_GET_M(geom->flags) && (!FLAGS_GET_Z(geom->flags)) ) #else if ( (variant & WKT_EXTENDED) && FLAGS_GET_M(geom->flags) && (!FLAGS_GET_Z(geom->flags)) ) #endif { stringbuffer_append(sb, "M"); /* "M" */ return; } /* ISO WKT: POINT ZM (0 0 0 0) */ if ( (variant & WKT_ISO) && (FLAGS_NDIMS(geom->flags) > 2) ) { stringbuffer_append(sb, " "); if ( FLAGS_GET_Z(geom->flags) ) stringbuffer_append(sb, "Z"); if ( FLAGS_GET_M(geom->flags) ) stringbuffer_append(sb, "M"); stringbuffer_append(sb, " "); } } /* * Write an empty token out, padding with a space if * necessary. */ static void empty_to_wkt_sb(stringbuffer_t *sb) { if ( ! strchr(" ,(", stringbuffer_lastchar(sb)) ) /* "EMPTY" */ { stringbuffer_append(sb, " "); } stringbuffer_append(sb, "EMPTY"); } /* * Point array is a list of coordinates. Depending on output mode, * we may suppress some dimensions. ISO and Extended formats include * all dimensions. Standard OGC output only includes X/Y coordinates. */ static void ptarray_to_wkt_sb(const POINTARRAY *ptarray, stringbuffer_t *sb, int precision, uint8_t variant) { /* OGC only includes X/Y */ int dimensions = 2; int i, j; /* ISO and extended formats include all dimensions */ if ( variant & ( WKT_ISO | WKT_EXTENDED ) ) dimensions = FLAGS_NDIMS(ptarray->flags); /* Opening paren? */ if ( ! (variant & WKT_NO_PARENS) ) stringbuffer_append(sb, "("); /* Digits and commas */ for (i = 0; i < ptarray->npoints; i++) { double *dbl_ptr = (double*)getPoint_internal(ptarray, i); /* Commas before ever coord but the first */ if ( i > 0 ) stringbuffer_append(sb, ","); for (j = 0; j < dimensions; j++) { /* Spaces before every ordinate but the first */ if ( j > 0 ) stringbuffer_append(sb, " "); stringbuffer_aprintf(sb, "%.*g", precision, dbl_ptr[j]); } } /* Closing paren? */ if ( ! (variant & WKT_NO_PARENS) ) stringbuffer_append(sb, ")"); } /* * A four-dimensional point will have different outputs depending on variant. * ISO: POINT ZM (0 0 0 0) * Extended: POINT(0 0 0 0) * OGC: POINT(0 0) * A three-dimensional m-point will have different outputs too. * ISO: POINT M (0 0 0) * Extended: POINTM(0 0 0) * OGC: POINT(0 0) */ static void lwpoint_to_wkt_sb(const LWPOINT *pt, stringbuffer_t *sb, int precision, uint8_t variant) { if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "POINT"); /* "POINT" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)pt, sb, variant); } if ( lwpoint_is_empty(pt) ) { empty_to_wkt_sb(sb); return; } ptarray_to_wkt_sb(pt->point, sb, precision, variant); } /* * LINESTRING(0 0 0, 1 1 1) */ static void lwline_to_wkt_sb(const LWLINE *line, stringbuffer_t *sb, int precision, uint8_t variant) { if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "LINESTRING"); /* "LINESTRING" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)line, sb, variant); } if ( lwline_is_empty(line) ) { empty_to_wkt_sb(sb); return; } ptarray_to_wkt_sb(line->points, sb, precision, variant); } /* * POLYGON(0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1) */ static void lwpoly_to_wkt_sb(const LWPOLY *poly, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "POLYGON"); /* "POLYGON" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)poly, sb, variant); } if ( lwpoly_is_empty(poly) ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); for ( i = 0; i < poly->nrings; i++ ) { if ( i > 0 ) stringbuffer_append(sb, ","); ptarray_to_wkt_sb(poly->rings[i], sb, precision, variant); } stringbuffer_append(sb, ")"); } /* * CIRCULARSTRING */ static void lwcircstring_to_wkt_sb(const LWCIRCSTRING *circ, stringbuffer_t *sb, int precision, uint8_t variant) { if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "CIRCULARSTRING"); /* "CIRCULARSTRING" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)circ, sb, variant); } if ( lwcircstring_is_empty(circ) ) { empty_to_wkt_sb(sb); return; } ptarray_to_wkt_sb(circ->points, sb, precision, variant); } /* * Multi-points do not wrap their sub-members in parens, unlike other multi-geometries. * MULTPOINT(0 0, 1 1) instead of MULTIPOINT((0 0),(1 1)) */ static void lwmpoint_to_wkt_sb(const LWMPOINT *mpoint, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "MULTIPOINT"); /* "MULTIPOINT" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)mpoint, sb, variant); } if ( mpoint->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ for ( i = 0; i < mpoint->ngeoms; i++ ) { if ( i > 0 ) stringbuffer_append(sb, ","); /* We don't want type strings or parens on our subgeoms */ lwpoint_to_wkt_sb(mpoint->geoms[i], sb, precision, variant | WKT_NO_PARENS | WKT_NO_TYPE ); } stringbuffer_append(sb, ")"); } /* * MULTILINESTRING */ static void lwmline_to_wkt_sb(const LWMLINE *mline, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "MULTILINESTRING"); /* "MULTILINESTRING" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)mline, sb, variant); } if ( mline->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ for ( i = 0; i < mline->ngeoms; i++ ) { if ( i > 0 ) stringbuffer_append(sb, ","); /* We don't want type strings on our subgeoms */ lwline_to_wkt_sb(mline->geoms[i], sb, precision, variant | WKT_NO_TYPE ); } stringbuffer_append(sb, ")"); } /* * MULTIPOLYGON */ static void lwmpoly_to_wkt_sb(const LWMPOLY *mpoly, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "MULTIPOLYGON"); /* "MULTIPOLYGON" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)mpoly, sb, variant); } if ( mpoly->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ for ( i = 0; i < mpoly->ngeoms; i++ ) { if ( i > 0 ) stringbuffer_append(sb, ","); /* We don't want type strings on our subgeoms */ lwpoly_to_wkt_sb(mpoly->geoms[i], sb, precision, variant | WKT_NO_TYPE ); } stringbuffer_append(sb, ")"); } /* * Compound curves provide type information for their curved sub-geometries * but not their linestring sub-geometries. * COMPOUNDCURVE((0 0, 1 1), CURVESTRING(1 1, 2 2, 3 3)) */ static void lwcompound_to_wkt_sb(const LWCOMPOUND *comp, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "COMPOUNDCURVE"); /* "COMPOUNDCURVE" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)comp, sb, variant); } if ( comp->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ for ( i = 0; i < comp->ngeoms; i++ ) { int type = comp->geoms[i]->type; if ( i > 0 ) stringbuffer_append(sb, ","); /* Linestring subgeoms don't get type identifiers */ if ( type == LINETYPE ) { lwline_to_wkt_sb((LWLINE*)comp->geoms[i], sb, precision, variant | WKT_NO_TYPE ); } /* But circstring subgeoms *do* get type identifiers */ else if ( type == CIRCSTRINGTYPE ) { lwcircstring_to_wkt_sb((LWCIRCSTRING*)comp->geoms[i], sb, precision, variant ); } else { lwerror("lwcompound_to_wkt_sb: Unknown type recieved %d - %s", type, lwtype_name(type)); } } stringbuffer_append(sb, ")"); } /* * Curve polygons provide type information for their curved rings * but not their linestring rings. * CURVEPOLYGON((0 0, 1 1, 0 1, 0 0), CURVESTRING(0 0, 1 1, 0 1, 0.5 1, 0 0)) */ static void lwcurvepoly_to_wkt_sb(const LWCURVEPOLY *cpoly, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "CURVEPOLYGON"); /* "CURVEPOLYGON" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)cpoly, sb, variant); } if ( cpoly->nrings < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ for ( i = 0; i < cpoly->nrings; i++ ) { int type = cpoly->rings[i]->type; if ( i > 0 ) stringbuffer_append(sb, ","); switch (type) { case LINETYPE: /* Linestring subgeoms don't get type identifiers */ lwline_to_wkt_sb((LWLINE*)cpoly->rings[i], sb, precision, variant | WKT_NO_TYPE ); break; case CIRCSTRINGTYPE: /* But circstring subgeoms *do* get type identifiers */ lwcircstring_to_wkt_sb((LWCIRCSTRING*)cpoly->rings[i], sb, precision, variant ); break; case COMPOUNDTYPE: /* And compoundcurve subgeoms *do* get type identifiers */ lwcompound_to_wkt_sb((LWCOMPOUND*)cpoly->rings[i], sb, precision, variant ); break; default: lwerror("lwcurvepoly_to_wkt_sb: Unknown type recieved %d - %s", type, lwtype_name(type)); } } stringbuffer_append(sb, ")"); } /* * Multi-curves provide type information for their curved sub-geometries * but not their linear sub-geometries. * MULTICURVE((0 0, 1 1), CURVESTRING(0 0, 1 1, 2 2)) */ static void lwmcurve_to_wkt_sb(const LWMCURVE *mcurv, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "MULTICURVE"); /* "MULTICURVE" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)mcurv, sb, variant); } if ( mcurv->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ for ( i = 0; i < mcurv->ngeoms; i++ ) { int type = mcurv->geoms[i]->type; if ( i > 0 ) stringbuffer_append(sb, ","); switch (type) { case LINETYPE: /* Linestring subgeoms don't get type identifiers */ lwline_to_wkt_sb((LWLINE*)mcurv->geoms[i], sb, precision, variant | WKT_NO_TYPE ); break; case CIRCSTRINGTYPE: /* But circstring subgeoms *do* get type identifiers */ lwcircstring_to_wkt_sb((LWCIRCSTRING*)mcurv->geoms[i], sb, precision, variant ); break; case COMPOUNDTYPE: /* And compoundcurve subgeoms *do* get type identifiers */ lwcompound_to_wkt_sb((LWCOMPOUND*)mcurv->geoms[i], sb, precision, variant ); break; default: lwerror("lwmcurve_to_wkt_sb: Unknown type recieved %d - %s", type, lwtype_name(type)); } } stringbuffer_append(sb, ")"); } /* * Multi-surfaces provide type information for their curved sub-geometries * but not their linear sub-geometries. * MULTISURFACE(((0 0, 1 1, 1 0, 0 0)), CURVEPOLYGON(CURVESTRING(0 0, 1 1, 2 2, 0 1, 0 0))) */ static void lwmsurface_to_wkt_sb(const LWMSURFACE *msurf, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "MULTISURFACE"); /* "MULTISURFACE" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)msurf, sb, variant); } if ( msurf->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ for ( i = 0; i < msurf->ngeoms; i++ ) { int type = msurf->geoms[i]->type; if ( i > 0 ) stringbuffer_append(sb, ","); switch (type) { case POLYGONTYPE: /* Linestring subgeoms don't get type identifiers */ lwpoly_to_wkt_sb((LWPOLY*)msurf->geoms[i], sb, precision, variant | WKT_NO_TYPE ); break; case CURVEPOLYTYPE: /* But circstring subgeoms *do* get type identifiers */ lwcurvepoly_to_wkt_sb((LWCURVEPOLY*)msurf->geoms[i], sb, precision, variant); break; default: lwerror("lwmsurface_to_wkt_sb: Unknown type recieved %d - %s", type, lwtype_name(type)); } } stringbuffer_append(sb, ")"); } /* * Geometry collections provide type information for all their curved sub-geometries * but not their linear sub-geometries. * GEOMETRYCOLLECTION(POLYGON((0 0, 1 1, 1 0, 0 0)), CURVEPOLYGON(CURVESTRING(0 0, 1 1, 2 2, 0 1, 0 0))) */ static void lwcollection_to_wkt_sb(const LWCOLLECTION *collection, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "GEOMETRYCOLLECTION"); /* "GEOMETRYCOLLECTION" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)collection, sb, variant); } if ( collection->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are children */ for ( i = 0; i < collection->ngeoms; i++ ) { if ( i > 0 ) stringbuffer_append(sb, ","); lwgeom_to_wkt_sb((LWGEOM*)collection->geoms[i], sb, precision, variant ); } stringbuffer_append(sb, ")"); } /* * TRIANGLE */ static void lwtriangle_to_wkt_sb(const LWTRIANGLE *tri, stringbuffer_t *sb, int precision, uint8_t variant) { if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "TRIANGLE"); /* "TRIANGLE" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)tri, sb, variant); } if ( lwtriangle_is_empty(tri) ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); /* Triangles have extraneous brackets */ ptarray_to_wkt_sb(tri->points, sb, precision, variant); stringbuffer_append(sb, ")"); } /* * TIN */ static void lwtin_to_wkt_sb(const LWTIN *tin, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "TIN"); /* "TIN" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)tin, sb, variant); } if ( tin->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } stringbuffer_append(sb, "("); for ( i = 0; i < tin->ngeoms; i++ ) { if ( i > 0 ) stringbuffer_append(sb, ","); /* We don't want type strings on our subgeoms */ lwtriangle_to_wkt_sb(tin->geoms[i], sb, precision, variant | WKT_NO_TYPE ); } stringbuffer_append(sb, ")"); } /* * POLYHEDRALSURFACE */ static void lwpsurface_to_wkt_sb(const LWPSURFACE *psurf, stringbuffer_t *sb, int precision, uint8_t variant) { int i = 0; if ( ! (variant & WKT_NO_TYPE) ) { stringbuffer_append(sb, "POLYHEDRALSURFACE"); /* "POLYHEDRALSURFACE" */ dimension_qualifiers_to_wkt_sb((LWGEOM*)psurf, sb, variant); } if ( psurf->ngeoms < 1 ) { empty_to_wkt_sb(sb); return; } variant = variant | WKT_IS_CHILD; /* Inform the sub-geometries they are childre */ stringbuffer_append(sb, "("); for ( i = 0; i < psurf->ngeoms; i++ ) { if ( i > 0 ) stringbuffer_append(sb, ","); /* We don't want type strings on our subgeoms */ lwpoly_to_wkt_sb(psurf->geoms[i], sb, precision, variant | WKT_NO_TYPE ); } stringbuffer_append(sb, ")"); } /* * Generic GEOMETRY */ static void lwgeom_to_wkt_sb(const LWGEOM *geom, stringbuffer_t *sb, int precision, uint8_t variant) { LWDEBUGF(4, "lwgeom_to_wkt_sb: type %s, hasz %d, hasm %d", lwtype_name(geom->type), (geom->type), FLAGS_GET_Z(geom->flags)?1:0, FLAGS_GET_M(geom->flags)?1:0); switch (geom->type) { case POINTTYPE: lwpoint_to_wkt_sb((LWPOINT*)geom, sb, precision, variant); break; case LINETYPE: lwline_to_wkt_sb((LWLINE*)geom, sb, precision, variant); break; case POLYGONTYPE: lwpoly_to_wkt_sb((LWPOLY*)geom, sb, precision, variant); break; case MULTIPOINTTYPE: lwmpoint_to_wkt_sb((LWMPOINT*)geom, sb, precision, variant); break; case MULTILINETYPE: lwmline_to_wkt_sb((LWMLINE*)geom, sb, precision, variant); break; case MULTIPOLYGONTYPE: lwmpoly_to_wkt_sb((LWMPOLY*)geom, sb, precision, variant); break; case COLLECTIONTYPE: lwcollection_to_wkt_sb((LWCOLLECTION*)geom, sb, precision, variant); break; case CIRCSTRINGTYPE: lwcircstring_to_wkt_sb((LWCIRCSTRING*)geom, sb, precision, variant); break; case COMPOUNDTYPE: lwcompound_to_wkt_sb((LWCOMPOUND*)geom, sb, precision, variant); break; case CURVEPOLYTYPE: lwcurvepoly_to_wkt_sb((LWCURVEPOLY*)geom, sb, precision, variant); break; case MULTICURVETYPE: lwmcurve_to_wkt_sb((LWMCURVE*)geom, sb, precision, variant); break; case MULTISURFACETYPE: lwmsurface_to_wkt_sb((LWMSURFACE*)geom, sb, precision, variant); break; case TRIANGLETYPE: lwtriangle_to_wkt_sb((LWTRIANGLE*)geom, sb, precision, variant); break; case TINTYPE: lwtin_to_wkt_sb((LWTIN*)geom, sb, precision, variant); break; case POLYHEDRALSURFACETYPE: lwpsurface_to_wkt_sb((LWPSURFACE*)geom, sb, precision, variant); break; default: lwerror("lwgeom_to_wkt_sb: Type %d - %s unsupported.", geom->type, lwtype_name(geom->type)); } } /** * WKT emitter function. Allocates a new *char and fills it with the WKT * representation. If size_out is not NULL, it will be set to the size of the * allocated *char. * * @param variant Bitmasked value, accepts one of WKT_ISO, WKT_SFSQL, WKT_EXTENDED. * @param precision Number of significant digits in the output doubles. * @param size_out If supplied, will return the size of the returned string, * including the null terminator. */ char* lwgeom_to_wkt(const LWGEOM *geom, uint8_t variant, int precision, size_t *size_out) { stringbuffer_t *sb; char *str = NULL; if ( geom == NULL ) return NULL; sb = stringbuffer_create(); /* Extended mode starts with an "SRID=" section for geoms that have one */ if ( (variant & WKT_EXTENDED) && lwgeom_has_srid(geom) ) { stringbuffer_aprintf(sb, "SRID=%d;", geom->srid); } lwgeom_to_wkt_sb(geom, sb, precision, variant); if ( stringbuffer_getstring(sb) == NULL ) { lwerror("Uh oh"); return NULL; } str = stringbuffer_getstringcopy(sb); if ( size_out ) *size_out = stringbuffer_getlength(sb) + 1; stringbuffer_destroy(sb); return str; } ���������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwout_svg.c�������������������������������������������������������0000644�0000000�0000000�00000034654�11722777314�017765� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwout_svg.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of hte GNU General Public Licence. See the COPYING file. * **********************************************************************/ /** @file * * SVG output routines. * Originally written by: Klaus Förster <klaus@svg.cc> * Refactored by: Olivier Courtin (Camptocamp) * * BNF SVG Path: <http://www.w3.org/TR/SVG/paths.html#PathDataBNF> **********************************************************************/ #include "liblwgeom_internal.h" static char * assvg_point(const LWPOINT *point, int relative, int precision); static char * assvg_line(const LWLINE *line, int relative, int precision); static char * assvg_polygon(const LWPOLY *poly, int relative, int precision); static char * assvg_multipoint(const LWMPOINT *mpoint, int relative, int precision); static char * assvg_multiline(const LWMLINE *mline, int relative, int precision); static char * assvg_multipolygon(const LWMPOLY *mpoly, int relative, int precision); static char * assvg_collection(const LWCOLLECTION *col, int relative, int precision); static size_t assvg_geom_size(const LWGEOM *geom, int relative, int precision); static size_t assvg_geom_buf(const LWGEOM *geom, char *output, int relative, int precision); static size_t pointArray_svg_size(POINTARRAY *pa, int precision); static size_t pointArray_svg_rel(POINTARRAY *pa, char * output, int close_ring, int precision); static size_t pointArray_svg_abs(POINTARRAY *pa, char * output, int close_ring, int precision); /** * Takes a GEOMETRY and returns a SVG representation */ char * lwgeom_to_svg(const LWGEOM *geom, int precision, int relative) { char *ret = NULL; int type = geom->type; /* Empty string for empties */ if( lwgeom_is_empty(geom) ) { ret = lwalloc(1); ret[0] = '\0'; return ret; } switch (type) { case POINTTYPE: ret = assvg_point((LWPOINT*)geom, relative, precision); break; case LINETYPE: ret = assvg_line((LWLINE*)geom, relative, precision); break; case POLYGONTYPE: ret = assvg_polygon((LWPOLY*)geom, relative, precision); break; case MULTIPOINTTYPE: ret = assvg_multipoint((LWMPOINT*)geom, relative, precision); break; case MULTILINETYPE: ret = assvg_multiline((LWMLINE*)geom, relative, precision); break; case MULTIPOLYGONTYPE: ret = assvg_multipolygon((LWMPOLY*)geom, relative, precision); break; case COLLECTIONTYPE: ret = assvg_collection((LWCOLLECTION*)geom, relative, precision); break; default: lwerror("lwgeom_to_svg: '%s' geometry type not supported", lwtype_name(type)); } return ret; } /** * Point Geometry */ static size_t assvg_point_size(const LWPOINT *point, int circle, int precision) { size_t size; size = (OUT_MAX_DIGS_DOUBLE + precision) * 2; if (circle) size += sizeof("cx='' cy=''"); else size += sizeof("x='' y=''"); return size; } static size_t assvg_point_buf(const LWPOINT *point, char * output, int circle, int precision) { char *ptr=output; char x[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char y[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; POINT2D pt; getPoint2d_p(point->point, 0, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); /* SVG Y axis is reversed, an no need to transform 0 into -0 */ if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y); else sprintf(y, "%g", fabs(pt.y) ? pt.y * -1 : pt.y); trim_trailing_zeros(y); if (circle) ptr += sprintf(ptr, "x=\"%s\" y=\"%s\"", x, y); else ptr += sprintf(ptr, "cx=\"%s\" cy=\"%s\"", x, y); return (ptr-output); } static char * assvg_point(const LWPOINT *point, int circle, int precision) { char *output; int size; size = assvg_point_size(point, circle, precision); output = lwalloc(size); assvg_point_buf(point, output, circle, precision); return output; } /** * Line Geometry */ static size_t assvg_line_size(const LWLINE *line, int relative, int precision) { size_t size; size = sizeof("M "); size += pointArray_svg_size(line->points, precision); return size; } static size_t assvg_line_buf(const LWLINE *line, char * output, int relative, int precision) { char *ptr=output; /* Start path with SVG MoveTo */ ptr += sprintf(ptr, "M "); if (relative) ptr += pointArray_svg_rel(line->points, ptr, 1, precision); else ptr += pointArray_svg_abs(line->points, ptr, 1, precision); return (ptr-output); } static char * assvg_line(const LWLINE *line, int relative, int precision) { char *output; int size; size = assvg_line_size(line, relative, precision); output = lwalloc(size); assvg_line_buf(line, output, relative, precision); return output; } /** * Polygon Geometry */ static size_t assvg_polygon_size(const LWPOLY *poly, int relative, int precision) { int i; size_t size=0; for (i=0; i<poly->nrings; i++) size += pointArray_svg_size(poly->rings[i], precision) + sizeof(" "); size += sizeof("M Z") * poly->nrings; return size; } static size_t assvg_polygon_buf(const LWPOLY *poly, char * output, int relative, int precision) { int i; char *ptr=output; for (i=0; i<poly->nrings; i++) { if (i) ptr += sprintf(ptr, " "); /* Space beetween each ring */ ptr += sprintf(ptr, "M "); /* Start path with SVG MoveTo */ if (relative) { ptr += pointArray_svg_rel(poly->rings[i], ptr, 0, precision); ptr += sprintf(ptr, " z"); /* SVG closepath */ } else { ptr += pointArray_svg_abs(poly->rings[i], ptr, 0, precision); ptr += sprintf(ptr, " Z"); /* SVG closepath */ } } return (ptr-output); } static char * assvg_polygon(const LWPOLY *poly, int relative, int precision) { char *output; int size; size = assvg_polygon_size(poly, relative, precision); output = lwalloc(size); assvg_polygon_buf(poly, output, relative, precision); return output; } /** * Multipoint Geometry */ static size_t assvg_multipoint_size(const LWMPOINT *mpoint, int relative, int precision) { const LWPOINT *point; size_t size=0; int i; for (i=0 ; i<mpoint->ngeoms ; i++) { point = mpoint->geoms[i]; size += assvg_point_size(point, relative, precision); } size += sizeof(",") * --i; /* Arbitrary comma separator */ return size; } static size_t assvg_multipoint_buf(const LWMPOINT *mpoint, char *output, int relative, int precision) { const LWPOINT *point; int i; char *ptr=output; for (i=0 ; i<mpoint->ngeoms ; i++) { if (i) ptr += sprintf(ptr, ","); /* Arbitrary comma separator */ point = mpoint->geoms[i]; ptr += assvg_point_buf(point, ptr, relative, precision); } return (ptr-output); } static char * assvg_multipoint(const LWMPOINT *mpoint, int relative, int precision) { char *output; int size; size = assvg_multipoint_size(mpoint, relative, precision); output = lwalloc(size); assvg_multipoint_buf(mpoint, output, relative, precision); return output; } /** * Multiline Geometry */ static size_t assvg_multiline_size(const LWMLINE *mline, int relative, int precision) { const LWLINE *line; size_t size=0; int i; for (i=0 ; i<mline->ngeoms ; i++) { line = mline->geoms[i]; size += assvg_line_size(line, relative, precision); } size += sizeof(" ") * --i; /* SVG whitespace Separator */ return size; } static size_t assvg_multiline_buf(const LWMLINE *mline, char *output, int relative, int precision) { const LWLINE *line; int i; char *ptr=output; for (i=0 ; i<mline->ngeoms ; i++) { if (i) ptr += sprintf(ptr, " "); /* SVG whitespace Separator */ line = mline->geoms[i]; ptr += assvg_line_buf(line, ptr, relative, precision); } return (ptr-output); } static char * assvg_multiline(const LWMLINE *mline, int relative, int precision) { char *output; int size; size = assvg_multiline_size(mline, relative, precision); output = lwalloc(size); assvg_multiline_buf(mline, output, relative, precision); return output; } /* * Multipolygon Geometry */ static size_t assvg_multipolygon_size(const LWMPOLY *mpoly, int relative, int precision) { const LWPOLY *poly; size_t size=0; int i; for (i=0 ; i<mpoly->ngeoms ; i++) { poly = mpoly->geoms[i]; size += assvg_polygon_size(poly, relative, precision); } size += sizeof(" ") * --i; /* SVG whitespace Separator */ return size; } static size_t assvg_multipolygon_buf(const LWMPOLY *mpoly, char *output, int relative, int precision) { const LWPOLY *poly; int i; char *ptr=output; for (i=0 ; i<mpoly->ngeoms ; i++) { if (i) ptr += sprintf(ptr, " "); /* SVG whitespace Separator */ poly = mpoly->geoms[i]; ptr += assvg_polygon_buf(poly, ptr, relative, precision); } return (ptr-output); } static char * assvg_multipolygon(const LWMPOLY *mpoly, int relative, int precision) { char *output; int size; size = assvg_multipolygon_size(mpoly, relative, precision); output = lwalloc(size); assvg_multipolygon_buf(mpoly, output, relative, precision); return output; } /** * Collection Geometry */ static size_t assvg_collection_size(const LWCOLLECTION *col, int relative, int precision) { int i = 0; size_t size=0; const LWGEOM *subgeom; for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; size += assvg_geom_size(subgeom, relative, precision); } if ( i ) /* We have some geometries, so add space for delimiters. */ size += sizeof(";") * --i; if (size == 0) size++; /* GEOMETRYCOLLECTION EMPTY, space for null terminator */ return size; } static size_t assvg_collection_buf(const LWCOLLECTION *col, char *output, int relative, int precision) { int i; char *ptr=output; const LWGEOM *subgeom; /* EMPTY GEOMETRYCOLLECTION */ if (col->ngeoms == 0) *ptr = '\0'; for (i=0; i<col->ngeoms; i++) { if (i) ptr += sprintf(ptr, ";"); subgeom = col->geoms[i]; ptr += assvg_geom_buf(subgeom, ptr, relative, precision); } return (ptr - output); } static char * assvg_collection(const LWCOLLECTION *col, int relative, int precision) { char *output; int size; size = assvg_collection_size(col, relative, precision); output = lwalloc(size); assvg_collection_buf(col, output, relative, precision); return output; } static size_t assvg_geom_buf(const LWGEOM *geom, char *output, int relative, int precision) { int type = geom->type; char *ptr=output; switch (type) { case POINTTYPE: ptr += assvg_point_buf((LWPOINT*)geom, ptr, relative, precision); break; case LINETYPE: ptr += assvg_line_buf((LWLINE*)geom, ptr, relative, precision); break; case POLYGONTYPE: ptr += assvg_polygon_buf((LWPOLY*)geom, ptr, relative, precision); break; case MULTIPOINTTYPE: ptr += assvg_multipoint_buf((LWMPOINT*)geom, ptr, relative, precision); break; case MULTILINETYPE: ptr += assvg_multiline_buf((LWMLINE*)geom, ptr, relative, precision); break; case MULTIPOLYGONTYPE: ptr += assvg_multipolygon_buf((LWMPOLY*)geom, ptr, relative, precision); break; default: lwerror("assvg_geom_buf: '%s' geometry type not supported.", lwtype_name(type)); } return (ptr-output); } static size_t assvg_geom_size(const LWGEOM *geom, int relative, int precision) { int type = geom->type; size_t size = 0; switch (type) { case POINTTYPE: size = assvg_point_size((LWPOINT*)geom, relative, precision); break; case LINETYPE: size = assvg_line_size((LWLINE*)geom, relative, precision); break; case POLYGONTYPE: size = assvg_polygon_size((LWPOLY*)geom, relative, precision); break; case MULTIPOINTTYPE: size = assvg_multipoint_size((LWMPOINT*)geom, relative, precision); break; case MULTILINETYPE: size = assvg_multiline_size((LWMLINE*)geom, relative, precision); break; case MULTIPOLYGONTYPE: size = assvg_multipolygon_size((LWMPOLY*)geom, relative, precision); break; default: lwerror("assvg_geom_size: '%s' geometry type not supported.", lwtype_name(type)); } return size; } static size_t pointArray_svg_rel(POINTARRAY *pa, char *output, int close_ring, int precision) { int i, end; char *ptr; char x[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char y[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; POINT2D pt, lpt; ptr = output; if (close_ring) end = pa->npoints; else end = pa->npoints - 1; /* Starting point */ getPoint2d_p(pa, 0, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y); else sprintf(y, "%g", fabs(pt.y) ? pt.y * -1 : pt.y); trim_trailing_zeros(y); ptr += sprintf(ptr,"%s %s l", x, y); /* All the following ones */ for (i=1 ; i < end ; i++) { lpt = pt; getPoint2d_p(pa, i, &pt); if (fabs(pt.x -lpt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x -lpt.x); else sprintf(x, "%g", pt.x -lpt.x); trim_trailing_zeros(x); /* SVG Y axis is reversed, an no need to transform 0 into -0 */ if (fabs(pt.y -lpt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y)); else sprintf(y, "%g", fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y)); trim_trailing_zeros(y); ptr += sprintf(ptr," %s %s", x, y); } return (ptr-output); } /** * Returns maximum size of rendered pointarray in bytes. */ static size_t pointArray_svg_abs(POINTARRAY *pa, char *output, int close_ring, int precision) { int i, end; char *ptr; char x[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; char y[OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION+1]; POINT2D pt; ptr = output; if (close_ring) end = pa->npoints; else end = pa->npoints - 1; for (i=0 ; i < end ; i++) { getPoint2d_p(pa, i, &pt); if (fabs(pt.x) < OUT_MAX_DOUBLE) sprintf(x, "%.*f", precision, pt.x); else sprintf(x, "%g", pt.x); trim_trailing_zeros(x); /* SVG Y axis is reversed, an no need to transform 0 into -0 */ if (fabs(pt.y) < OUT_MAX_DOUBLE) sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1:pt.y); else sprintf(y, "%g", fabs(pt.y) ? pt.y * -1:pt.y); trim_trailing_zeros(y); if (i == 1) ptr += sprintf(ptr, " L "); else if (i) ptr += sprintf(ptr, " "); ptr += sprintf(ptr,"%s %s", x, y); } return (ptr-output); } /** * Returns maximum size of rendered pointarray in bytes. */ static size_t pointArray_svg_size(POINTARRAY *pa, int precision) { return (OUT_MAX_DIGS_DOUBLE + precision + sizeof(" ")) * 2 * pa->npoints + sizeof(" L "); } ������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_geos_node.c������������������������������������������������0000644�0000000�0000000�00000014424�11722777314�021241� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2011 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * Node a set of linestrings * **********************************************************************/ #include "lwgeom_geos.h" #include "liblwgeom_internal.h" #include <string.h> #include <assert.h> static int lwgeom_ngeoms(const LWGEOM* n) { const LWCOLLECTION* c = lwgeom_as_lwcollection(n); if ( c ) return c->ngeoms; else return 1; } static const LWGEOM* lwgeom_subgeom(const LWGEOM* g, int n) { const LWCOLLECTION* c = lwgeom_as_lwcollection(g); if ( c ) return lwcollection_getsubgeom((LWCOLLECTION*)c, n); else return g; } static void lwgeom_collect_endpoints(const LWGEOM* lwg, LWMPOINT* col) { int i, n; LWLINE* l; switch (lwg->type) { case MULTILINETYPE: for ( i = 0, n = lwgeom_ngeoms(lwg); i < n; ++i ) { lwgeom_collect_endpoints( lwgeom_subgeom(lwg, i), col); } break; case LINETYPE: l = (LWLINE*)lwg; col = lwmpoint_add_lwpoint(col, lwline_get_lwpoint(l, 0)); col = lwmpoint_add_lwpoint(col, lwline_get_lwpoint(l, l->points->npoints-1)); break; default: lwerror("lwgeom_collect_endpoints: invalid type %s", lwtype_name(lwg->type)); break; } } static LWMPOINT* lwgeom_extract_endpoints(const LWGEOM* lwg) { LWMPOINT* col = lwmpoint_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(lwg->flags), FLAGS_GET_M(lwg->flags)); lwgeom_collect_endpoints(lwg, col); return col; } /* Assumes initGEOS was called already */ /* May return LWPOINT or LWMPOINT */ static LWGEOM* lwgeom_extract_unique_endpoints(const LWGEOM* lwg) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this postgis binary " "was compiled against (%d) doesn't support " "'GEOSUnaryUnion' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); return NULL; #else /* POSTGIS_GEOS_VERSION >= 33 */ LWGEOM* ret; GEOSGeometry *gepu; LWMPOINT *epall = lwgeom_extract_endpoints(lwg); GEOSGeometry *gepall = LWGEOM2GEOS((LWGEOM*)epall); lwmpoint_free(epall); if ( ! gepall ) { lwerror("LWGEOM2GEOS: %s", lwgeom_geos_errmsg); return NULL; } /* UnaryUnion to remove duplicates */ /* TODO: do it all within pgis using indices */ gepu = GEOSUnaryUnion(gepall); if ( ! gepu ) { GEOSGeom_destroy(gepall); lwerror("GEOSUnaryUnion: %s", lwgeom_geos_errmsg); return NULL; } GEOSGeom_destroy(gepall); ret = GEOS2LWGEOM(gepu, FLAGS_GET_Z(lwg->flags)); GEOSGeom_destroy(gepu); if ( ! ret ) { lwerror("Error during GEOS2LWGEOM"); return NULL; } return ret; #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /* exported */ extern LWGEOM* lwgeom_node(const LWGEOM* lwgeom_in); LWGEOM* lwgeom_node(const LWGEOM* lwgeom_in) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this postgis binary " "was compiled against (%d) doesn't support " "'GEOSUnaryUnion' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); return NULL; #else /* POSTGIS_GEOS_VERSION >= 33 */ GEOSGeometry *g1, *gu, *gm; LWGEOM *ep, *lines; LWCOLLECTION *col, *tc; int pn, ln, np, nl; if ( lwgeom_dimension(lwgeom_in) != 1 ) { lwerror("Noding geometries of dimension != 1 is unsupported"); return NULL; } initGEOS(lwgeom_geos_error, lwgeom_geos_error); g1 = LWGEOM2GEOS(lwgeom_in); if ( ! g1 ) { lwerror("LWGEOM2GEOS: %s", lwgeom_geos_errmsg); return NULL; } ep = lwgeom_extract_unique_endpoints(lwgeom_in); if ( ! ep ) { GEOSGeom_destroy(g1); lwerror("Error extracting unique endpoints from input"); return NULL; } /* Unary union input to fully node */ gu = GEOSUnaryUnion(g1); GEOSGeom_destroy(g1); if ( ! gu ) { lwgeom_free(ep); lwerror("GEOSUnaryUnion: %s", lwgeom_geos_errmsg); return NULL; } /* Linemerge (in case of overlaps) */ gm = GEOSLineMerge(gu); GEOSGeom_destroy(gu); if ( ! gm ) { lwgeom_free(ep); lwerror("GEOSLineMerge: %s", lwgeom_geos_errmsg); return NULL; } lines = GEOS2LWGEOM(gm, FLAGS_GET_Z(lwgeom_in->flags)); GEOSGeom_destroy(gm); if ( ! lines ) { lwgeom_free(ep); lwerror("Error during GEOS2LWGEOM"); return NULL; } /* * Reintroduce endpoints from input, using split-line-by-point. * Note that by now we can be sure that each point splits at * most _one_ segment as any point shared by multiple segments * would already be a node. Also we can be sure that any of * the segments endpoints won't split any other segment. * We can use the above 2 assertions to early exit the loop. */ col = lwcollection_construct_empty(MULTILINETYPE, lwgeom_in->srid, FLAGS_GET_Z(lwgeom_in->flags), FLAGS_GET_M(lwgeom_in->flags)); np = lwgeom_ngeoms(ep); for (pn=0; pn<np; ++pn) { /* for each point */ const LWPOINT* p = (LWPOINT*)lwgeom_subgeom(ep, pn); nl = lwgeom_ngeoms(lines); for (ln=0; ln<nl; ++ln) { /* for each line */ const LWLINE* l = (LWLINE*)lwgeom_subgeom(lines, ln); int s = lwline_split_by_point_to(l, p, (LWMLINE*)col); if ( ! s ) continue; /* not on this line */ if ( s == 1 ) { /* found on this line, but not splitting it */ break; } /* splits this line */ /* replace this line with the two splits */ if ( lwgeom_is_collection(lines) ) { tc = (LWCOLLECTION*)lines; lwcollection_reserve(tc, nl + 1); while (nl > ln+1) { tc->geoms[nl] = tc->geoms[nl-1]; --nl; } lwgeom_free(tc->geoms[ln]); tc->geoms[ln] = col->geoms[0]; tc->geoms[ln+1] = col->geoms[1]; tc->ngeoms++; } else { lwgeom_free(lines); /* transfer ownership rather than cloning */ lines = (LWGEOM*)lwcollection_clone_deep(col); assert(col->ngeoms == 2); lwgeom_free(col->geoms[0]); lwgeom_free(col->geoms[1]); } /* reset the vector */ assert(col->ngeoms == 2); col->ngeoms = 0; break; } } lwgeom_free(ep); lwcollection_free(col); lines->srid = lwgeom_in->srid; return (LWGEOM*)lines; #endif /* POSTGIS_GEOS_VERSION >= 33 */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwtree.c����������������������������������������������������������0000644�0000000�0000000�00000013061�12230320476�017207� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "liblwgeom_internal.h" #include "lwgeom_log.h" #include "lwtree.h" /** * Internal nodes have their point references set to NULL. */ static int rect_node_is_leaf(const RECT_NODE *node) { return (node->p1 != NULL); } /** * Recurse from top of node tree and free all children. * does not free underlying point array. */ void rect_tree_free(RECT_NODE *node) { if ( node->left_node ) { rect_tree_free(node->left_node); node->left_node = 0; } if ( node->right_node ) { rect_tree_free(node->right_node); node->right_node = 0; } lwfree(node); } /* 0 => no containment */ int rect_tree_contains_point(const RECT_NODE *node, const POINT2D *pt, int *on_boundary) { if ( FP_CONTAINS_INCL(node->ymin, pt->y, node->ymax) ) { if ( rect_node_is_leaf(node) ) { double side = lw_segment_side(node->p1, node->p2, pt); if ( side == 0 ) *on_boundary = LW_TRUE; return (side < 0 ? -1 : 1 ); } else { return rect_tree_contains_point(node->left_node, pt, on_boundary) + rect_tree_contains_point(node->right_node, pt, on_boundary); } } /* printf("NOT in measure range\n"); */ return 0; } int rect_tree_intersects_tree(const RECT_NODE *n1, const RECT_NODE *n2) { LWDEBUGF(4,"n1 (%.9g %.9g,%.9g %.9g) vs n2 (%.9g %.9g,%.9g %.9g)",n1->xmin,n1->ymin,n1->xmax,n1->ymax,n2->xmin,n2->ymin,n2->xmax,n2->ymax); /* There can only be an edge intersection if the rectangles overlap */ if ( ! ( FP_GT(n1->xmin, n2->xmax) || FP_GT(n2->xmin, n1->xmax) || FP_GT(n1->ymin, n2->ymax) || FP_GT(n2->ymin, n1->ymax) ) ) { LWDEBUG(4," interaction found"); /* We can only test for a true intersection if the nodes are both leaf nodes */ if ( rect_node_is_leaf(n1) && rect_node_is_leaf(n2) ) { LWDEBUG(4," leaf node test"); /* Check for true intersection */ if ( lw_segment_intersects(n1->p1, n1->p2, n2->p1, n2->p2) ) return LW_TRUE; else return LW_FALSE; } else { LWDEBUG(4," internal node found, recursing"); /* Recurse to children */ if ( rect_node_is_leaf(n1) ) { if ( rect_tree_intersects_tree(n2->left_node, n1) || rect_tree_intersects_tree(n2->right_node, n1) ) return LW_TRUE; else return LW_FALSE; } else { if ( rect_tree_intersects_tree(n1->left_node, n2) || rect_tree_intersects_tree(n1->right_node, n2) ) return LW_TRUE; else return LW_FALSE; } } } else { LWDEBUG(4," no interaction found"); return LW_FALSE; } } /** * Create a new leaf node, calculating a measure value for each point on the * edge and storing pointers back to the end points for later. */ RECT_NODE* rect_node_leaf_new(const POINTARRAY *pa, int i) { POINT2D *p1, *p2; RECT_NODE *node; p1 = (POINT2D*)getPoint_internal(pa, i); p2 = (POINT2D*)getPoint_internal(pa, i+1); /* Zero length edge, doesn't get a node */ if ( FP_EQUALS(p1->x, p2->x) && FP_EQUALS(p1->y, p2->y) ) return NULL; node = lwalloc(sizeof(RECT_NODE)); node->p1 = p1; node->p2 = p2; node->xmin = FP_MIN(p1->x,p2->x); node->xmax = FP_MAX(p1->x,p2->x); node->ymin = FP_MIN(p1->y,p2->y); node->ymax = FP_MAX(p1->y,p2->y); node->left_node = NULL; node->right_node = NULL; return node; } /** * Create a new internal node, calculating the new measure range for the node, * and storing pointers to the child nodes. */ RECT_NODE* rect_node_internal_new(RECT_NODE *left_node, RECT_NODE *right_node) { RECT_NODE *node = lwalloc(sizeof(RECT_NODE)); node->p1 = NULL; node->p2 = NULL; node->xmin = FP_MIN(left_node->xmin, right_node->xmin); node->xmax = FP_MAX(left_node->xmax, right_node->xmax); node->ymin = FP_MIN(left_node->ymin, right_node->ymin); node->ymax = FP_MAX(left_node->ymax, right_node->ymax); node->left_node = left_node; node->right_node = right_node; return node; } /** * Build a tree of nodes from a point array, one node per edge, and each * with an associated measure range along a one-dimensional space. We * can then search that space as a range tree. */ RECT_NODE* rect_tree_new(const POINTARRAY *pa) { int num_edges, num_children, num_parents; int i, j; RECT_NODE **nodes; RECT_NODE *node; RECT_NODE *tree; if ( pa->npoints < 2 ) { return NULL; } /* ** First create a flat list of nodes, one per edge. ** For each vertex, transform into our one-dimensional measure. ** Hopefully, when projected, the points turn into a fairly ** uniformly distributed collection of measures. */ num_edges = pa->npoints - 1; nodes = lwalloc(sizeof(RECT_NODE*) * pa->npoints); j = 0; for ( i = 0; i < num_edges; i++ ) { node = rect_node_leaf_new(pa, i); if ( node ) /* Not zero length? */ { nodes[j] = node; j++; } } /* ** If we sort the nodelist first, we'll get a more balanced tree ** in the end, but at the cost of sorting. For now, we just ** build the tree knowing that point arrays tend to have a ** reasonable amount of sorting already. */ num_children = j; num_parents = num_children / 2; while ( num_parents > 0 ) { j = 0; while ( j < num_parents ) { /* ** Each new parent includes pointers to the children, so even though ** we are over-writing their place in the list, we still have references ** to them via the tree. */ nodes[j] = rect_node_internal_new(nodes[2*j], nodes[(2*j)+1]); j++; } /* Odd number of children, just copy the last node up a level */ if ( num_children % 2 ) { nodes[j] = nodes[num_children - 1]; num_parents++; } num_children = num_parents; num_parents = num_children / 2; } /* Take a reference to the head of the tree*/ tree = nodes[0]; /* Free the old list structure, leaving the tree in place */ lwfree(nodes); return tree; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwtree.h����������������������������������������������������������0000644�0000000�0000000�00000001242�12230320476�017212� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * Note that p1 and p2 are pointers into an independent POINTARRAY, do not free them. */ typedef struct rect_node { double xmin; double xmax; double ymin; double ymax; struct rect_node *left_node; struct rect_node *right_node; POINT2D *p1; POINT2D *p2; } RECT_NODE; int rect_tree_contains_point(const RECT_NODE *tree, const POINT2D *pt, int *on_boundary); int rect_tree_intersects_tree(const RECT_NODE *tree1, const RECT_NODE *tree2); void rect_tree_free(RECT_NODE *node); RECT_NODE* rect_node_leaf_new(const POINTARRAY *pa, int i); RECT_NODE* rect_node_internal_new(RECT_NODE *left_node, RECT_NODE *right_node); RECT_NODE* rect_tree_new(const POINTARRAY *pa); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016666� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_out_geojson.c��������������������������������������������0000644�0000000�0000000�00000023330�12037514763�022062� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_geojson.c 10451 2012-10-17 11:43:47Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_geojson_test(char * in, char * out, char * srs, int precision, int has_bbox) { LWGEOM *g; char * h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_geojson(g, srs, precision, has_bbox); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_geojson_unsupported(char * in, char * out) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_geojson(g, NULL, 0, 0); if (strcmp(cu_error_msg, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, cu_error_msg, out); CU_ASSERT_STRING_EQUAL(out, cu_error_msg); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void out_geojson_test_precision(void) { /* 0 precision, i.e a round */ do_geojson_test( "POINT(1.1111111111111 1.1111111111111)", "{\"type\":\"Point\",\"coordinates\":[1,1]}", NULL, 0, 0); /* 3 digits precision */ do_geojson_test( "POINT(1.1111111111111 1.1111111111111)", "{\"type\":\"Point\",\"coordinates\":[1.111,1.111]}", NULL, 3, 0); /* 9 digits precision */ do_geojson_test( "POINT(1.2345678901234 1.2345678901234)", "{\"type\":\"Point\",\"coordinates\":[1.23456789,1.23456789]}", NULL, 9, 0); /* huge data */ do_geojson_test( "POINT(1E300 -1E300)", "{\"type\":\"Point\",\"coordinates\":[1e+300,-1e+300]}", NULL, 0, 0); /* huge precision, see http://trac.osgeo.org/postgis/ticket/2052 */ do_geojson_test( "POINT(1 2)", "{\"type\":\"Point\",\"coordinates\":[1,2]}", NULL, 100, 0); /* double precision, see http://trac.osgeo.org/postgis/ticket/2051 */ do_geojson_test( "POINT(59.99 -59.99)", "{\"type\":\"Point\",\"coordinates\":[59.99,-59.99]}", NULL, 15, 0); /* small numbers */ /* NOTE: precision of 300 will be converted to max precision (15) * and being there no significant digit within that range * only zeroes will be returned * See http://trac.osgeo.org/postgis/ticket/2051#comment:11 */ do_geojson_test( "POINT(1E-300 -2E-200)", "{\"type\":\"Point\",\"coordinates\":[0,-0]}", NULL, 300, 0); } static void out_geojson_test_dims(void) { /* 3D */ do_geojson_test( "POINT(0 1 2)", "{\"type\":\"Point\",\"coordinates\":[0,1,2]}", NULL, 0, 0); /* 3DM */ do_geojson_test( "POINTM(0 1 2)", "{\"type\":\"Point\",\"coordinates\":[0,1]}", NULL, 0, 0); /* 4D */ do_geojson_test( "POINT(0 1 2 3)", "{\"type\":\"Point\",\"coordinates\":[0,1,2]}", NULL, 0, 0); } static void out_geojson_test_srid(void) { /* Linestring */ do_geojson_test( "LINESTRING(0 1,2 3,4 5)", "{\"type\":\"LineString\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[0,1],[2,3],[4,5]]}", "EPSG:4326", 0, 0); /* Polygon */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1))", "{\"type\":\"Polygon\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]]]}", "EPSG:4326", 0, 0); /* Polygon - with internal ring */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "{\"type\":\"Polygon\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]],[[6,7],[8,9],[10,11],[6,7]]]}", "EPSG:4326", 0, 0); /* Multiline */ do_geojson_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "{\"type\":\"MultiLineString\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[0,1],[2,3],[4,5]],[[6,7],[8,9],[10,11]]]}", "EPSG:4326", 0, 0); /* MultiPolygon */ do_geojson_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "{\"type\":\"MultiPolygon\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[[0,1],[2,3],[4,5],[0,1]]],[[[6,7],[8,9],[10,11],[6,7]]]]}", "EPSG:4326", 0, 0); /* GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "{\"type\":\"GeometryCollection\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"geometries\":[{\"type\":\"Point\",\"coordinates\":[0,1]},{\"type\":\"LineString\",\"coordinates\":[[2,3],[4,5]]}]}", "EPSG:4326", 0, 0); /* Empty GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION EMPTY", "{\"type\":\"GeometryCollection\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"geometries\":[]}", "EPSG:4326", 0, 0); } static void out_geojson_test_bbox(void) { /* Linestring */ do_geojson_test( "LINESTRING(0 1,2 3,4 5)", "{\"type\":\"LineString\",\"bbox\":[0,1,4,5],\"coordinates\":[[0,1],[2,3],[4,5]]}", NULL, 0, 1); /* Polygon */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1))", "{\"type\":\"Polygon\",\"bbox\":[0,1,4,5],\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]]]}", NULL, 0, 1); /* Polygon - with internal ring */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "{\"type\":\"Polygon\",\"bbox\":[0,1,4,5],\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]],[[6,7],[8,9],[10,11],[6,7]]]}", NULL, 0, 1); /* Multiline */ do_geojson_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "{\"type\":\"MultiLineString\",\"bbox\":[0,1,10,11],\"coordinates\":[[[0,1],[2,3],[4,5]],[[6,7],[8,9],[10,11]]]}", NULL, 0, 1); /* MultiPolygon */ do_geojson_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "{\"type\":\"MultiPolygon\",\"bbox\":[0,1,10,11],\"coordinates\":[[[[0,1],[2,3],[4,5],[0,1]]],[[[6,7],[8,9],[10,11],[6,7]]]]}", NULL, 0, 1); /* GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION(LINESTRING(0 1,-1 3),LINESTRING(2 3,4 5))", "{\"type\":\"GeometryCollection\",\"bbox\":[-1,1,4,5],\"geometries\":[{\"type\":\"LineString\",\"coordinates\":[[0,1],[-1,3]]},{\"type\":\"LineString\",\"coordinates\":[[2,3],[4,5]]}]}", NULL, 0, 1); /* Empty GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION EMPTY", "{\"type\":\"GeometryCollection\",\"geometries\":[]}", NULL, 0, 1); } static void out_geojson_test_geoms(void) { /* Linestring */ do_geojson_test( "LINESTRING(0 1,2 3,4 5)", "{\"type\":\"LineString\",\"coordinates\":[[0,1],[2,3],[4,5]]}", NULL, 0, 0); /* Polygon */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1))", "{\"type\":\"Polygon\",\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]]]}", NULL, 0, 0); /* Polygon - with internal ring */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "{\"type\":\"Polygon\",\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]],[[6,7],[8,9],[10,11],[6,7]]]}", NULL, 0, 0); /* Multiline */ do_geojson_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "{\"type\":\"MultiLineString\",\"coordinates\":[[[0,1],[2,3],[4,5]],[[6,7],[8,9],[10,11]]]}", NULL, 0, 0); /* MultiPolygon */ do_geojson_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "{\"type\":\"MultiPolygon\",\"coordinates\":[[[[0,1],[2,3],[4,5],[0,1]]],[[[6,7],[8,9],[10,11],[6,7]]]]}", NULL, 0, 0); /* GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "{\"type\":\"GeometryCollection\",\"geometries\":[{\"type\":\"Point\",\"coordinates\":[0,1]},{\"type\":\"LineString\",\"coordinates\":[[2,3],[4,5]]}]}", NULL, 0, 0); /* Empty GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION EMPTY", "{\"type\":\"GeometryCollection\",\"geometries\":[]}", NULL, 0, 0); /* Nested GeometryCollection */ do_geojson_unsupported( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "GeoJson: geometry not supported."); /* CircularString */ do_geojson_unsupported( "CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)", "lwgeom_to_geojson: 'CircularString' geometry type not supported"); /* CompoundCurve */ do_geojson_unsupported( "COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))", "lwgeom_to_geojson: 'CompoundCurve' geometry type not supported"); /* CurvePolygon */ do_geojson_unsupported( "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))", "lwgeom_to_geojson: 'CurvePolygon' geometry type not supported"); /* MultiCurve */ do_geojson_unsupported( "MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))", "lwgeom_to_geojson: 'MultiCurve' geometry type not supported"); /* MultiSurface */ do_geojson_unsupported( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "lwgeom_to_geojson: 'MultiSurface' geometry type not supported"); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo out_geojson_tests[] = { PG_TEST(out_geojson_test_precision), PG_TEST(out_geojson_test_dims), PG_TEST(out_geojson_test_srid), PG_TEST(out_geojson_test_bbox), PG_TEST(out_geojson_test_geoms), CU_TEST_INFO_NULL }; CU_SuiteInfo out_geojson_suite = {"GeoJson Out Suite", NULL, NULL, out_geojson_tests}; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_node.c���������������������������������������������������0000644�0000000�0000000�00000004446�11722777314�020466� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2011 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "CUnit/Basic.h" #include "cu_tester.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" static void test_lwgeom_node(void) { #if POSTGIS_GEOS_VERSION >= 33 LWGEOM *in, *out; const char *wkt; char *tmp; /* Because i don't trust that much prior tests... ;) */ cu_error_msg_reset(); wkt = "LINESTRING(0 0,5 5, 10 0)"; in = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); out = lwgeom_node(in); /* printf("%s\n", lwgeom_to_ewkt(out)); */ CU_ASSERT(lwgeom_same(in, out)); lwgeom_free(out); lwgeom_free(in); wkt = "MULTILINESTRING((0 0,0 5),(10 0, -10 5))"; in = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); out = lwgeom_node(in); tmp = lwgeom_to_ewkt(out); CU_ASSERT_STRING_EQUAL("MULTILINESTRING((0 2.5,-10 5),(0 0,0 2.5),(0 2.5,0 5),(10 0,0 2.5))", tmp) lwfree(tmp); lwgeom_free(out); lwgeom_free(in); wkt = "MULTILINESTRING((0 0,5 5,10 0, 11 0, 20 0),(10 0, 12 0, 22 0))"; in = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); out = lwgeom_node(in); tmp = lwgeom_to_ewkt(out); /* printf("%s\n", tmp); */ CU_ASSERT_STRING_EQUAL("MULTILINESTRING((0 0,5 5,10 0),(10 0,11 0,12 0,20 0),(20 0,22 0))", tmp); lwfree(tmp); lwgeom_free(out); lwgeom_free(in); wkt = "MULTILINESTRING((0 0,5 5,10 0, 11 0, 20 0),(22 0, 12 0, 10 0),(0 5, 5 0))"; in = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); out = lwgeom_node(in); tmp = lwgeom_to_ewkt(out); /* printf("%s\n", tmp); */ CU_ASSERT_STRING_EQUAL( "MULTILINESTRING((0 0,2.5 2.5),(0 5,2.5 2.5),(22 0,20 0),(20 0,12 0,11 0,10 0),(10 0,5 5,2.5 2.5),(2.5 2.5,5 0))", tmp); lwfree(tmp); lwgeom_free(out); lwgeom_free(in); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /* ** Used by test harness to register the tests in this file. */ /* ** Used by test harness to register the tests in this file. */ CU_TestInfo node_tests[] = { PG_TEST(test_lwgeom_node), CU_TEST_INFO_NULL }; CU_SuiteInfo node_suite = {"node", NULL, NULL, node_tests}; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_buildarea.c����������������������������������������������0000644�0000000�0000000�00000017722�11755162326�021467� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "CUnit/Basic.h" #include "cu_tester.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" /* * TODO: change lwgeom_same to lwgeom_equals * (requires porting predicates to liblwgeom) */ #define check_geom_equal(gobt, gexp) do { \ char *obt, *exp; \ LWGEOM *ngobt, *ngexp; \ ngobt = lwgeom_normalize(gobt); \ ngexp = lwgeom_normalize(gexp); \ if ( ! lwgeom_same((ngobt), (ngexp)) ) { \ obt = lwgeom_to_wkt((ngobt), WKT_ISO, 8, NULL); \ exp = lwgeom_to_wkt((ngexp), WKT_ISO, 8, NULL); \ printf(" Failure at %s:%d\n", __FILE__, __LINE__); \ printf(" Exp: %s\n", exp); \ printf(" Obt: %s\n", obt); \ free(obt); free(exp); \ lwgeom_free(ngobt); lwgeom_free(ngexp); \ CU_ASSERT(0); \ } else { \ lwgeom_free(ngobt); lwgeom_free(ngexp); \ CU_ASSERT(1); \ } \ } while (0) /* +-----+ | | +-----+-----+ | | +-----+ */ static void buildarea1(void) { LWGEOM *gin, *gout, *gexp; cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING((0 0, 10 0, 10 10, 0 10, 0 0),(10 10, 20 10, 20 20, 10 20, 10 10))", LW_PARSER_CHECK_NONE); CU_ASSERT( gin != NULL ); gexp = lwgeom_from_wkt( "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))", LW_PARSER_CHECK_NONE); CU_ASSERT( gexp != NULL ); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* +-----+-----+ | | | +-----+-----+ */ static void buildarea2(void) { LWGEOM *gin, *gout, *gexp; /* because i don't trust that much prior tests... ;) */ cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING((0 0, 10 0, 10 10, 0 10, 0 0),(10 10, 20 10, 20 0, 10 0, 10 10))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gexp = lwgeom_from_wkt( "POLYGON((0 0,0 10,10 10,20 10,20 0,10 0,0 0))", LW_PARSER_CHECK_NONE); CU_ASSERT(gexp != NULL); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* +-----------+ | +-----+ | | | | | | +-----+ | +-----------+ */ static void buildarea3(void) { LWGEOM *gin, *gout, *gexp; cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING((0 0, 20 0, 20 20, 0 20, 0 0),(2 2, 18 2, 18 18, 2 18, 2 2))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gexp = lwgeom_from_wkt( "POLYGON((0 0,0 20,20 20,20 0,0 0),(2 2,18 2,18 18,2 18,2 2))", LW_PARSER_CHECK_NONE); CU_ASSERT(gexp != NULL); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* +-----------+ | +-----+ | | | +-+ | | | | | | | | | | +-+ | | | +-----+ | +-----------+ */ static void buildarea4(void) { LWGEOM *gin, *gout, *gexp; cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING((0 0, 20 0, 20 20, 0 20, 0 0),(2 2, 18 2, 18 18, 2 18, 2 2),(8 8, 8 12, 12 12, 12 8, 8 8))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gexp = lwgeom_from_wkt( "MULTIPOLYGON(((0 0,0 20,20 20,20 0,0 0),(2 2,18 2,18 18,2 18,2 2)),((8 8,8 12,12 12,12 8,8 8)))", LW_PARSER_CHECK_NONE); CU_ASSERT(gexp != NULL); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* +-----------+ | +-----+ | This time the innermost ring has | | +-+ | | more points than the other (outer) two. | | | | | | | | +-+ | | | +-----+ | +-----------+ */ static void buildarea4b(void) { LWGEOM *gin, *gout, *gexp; cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING((0 0, 20 0, 20 20, 0 20, 0 0),(2 2, 18 2, 18 18, 2 18, 2 2), (8 8, 8 9, 8 10, 8 11, 8 12, 9 12, 10 12, 11 12, 12 12, 12 11, 12 10, 12 9, 12 8, 11 8, 10 8, 9 8, 8 8))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gexp = lwgeom_from_wkt( "MULTIPOLYGON(((0 0,0 20,20 20,20 0,0 0),(2 2,18 2,18 18,2 18,2 2)),((8 8,8 9,8 10,8 11,8 12,9 12,10 12,11 12,12 12,12 11,12 10,12 9,12 8,11 8,10 8,9 8,8 8)))", LW_PARSER_CHECK_NONE); CU_ASSERT(gexp != NULL); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* +---------------+ | +---------+ | | | +--+--+ | | | | | | | | | | | +--+--+ | | | +---------+ | +---------------+ */ static void buildarea5(void) { LWGEOM *gin, *gout, *gexp; cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING((0 0, 20 0, 20 20, 0 20, 0 0),(2 2, 18 2, 18 18, 2 18, 2 2),(8 8, 8 12, 12 12, 12 8, 8 8),(10 8, 10 12))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gexp = lwgeom_from_wkt( "MULTIPOLYGON(((0 0,0 20,20 20,20 0,0 0),(2 2,18 2,18 18,2 18,2 2)),((8 8,8 12,12 12,12 8,8 8)))", LW_PARSER_CHECK_NONE); CU_ASSERT(gexp != NULL); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* +---------------+ | +----+----+ | | | | | | | | | | | | | | | | | +----+----+ | +---------------+ */ static void buildarea6(void) { LWGEOM *gin, *gout, *gexp; cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING((0 0, 20 0, 20 20, 0 20, 0 0),(2 2, 18 2, 18 18, 2 18, 2 2),(10 2, 10 18))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gexp = lwgeom_from_wkt( "POLYGON((0 0,0 20,20 20,20 0,0 0),(2 2,18 2,18 18,2 18,2 2))", LW_PARSER_CHECK_NONE); CU_ASSERT(gexp != NULL); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* +--------------------+ +-------+ | +-----+ +----+ | | +---+ | | | +-+ | | | | | | | | | | | | | +----+ | | +---+ | | | +-+ | | | | | | | | | | | | | | | | | | +-+ | | | | | | | +-----+ +----+ | | | +--------------------+ +-------+ */ static void buildarea7(void) { LWGEOM *gin, *gout, *gexp; cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTILINESTRING( (0 0, 70 0, 70 70, 0 70, 0 0), (10 10, 10 60, 40 60, 40 10, 10 10), (20 20, 20 30, 30 30, 30 20, 20 20), (20 30, 30 30, 30 50, 20 50, 20 30), (50 20, 60 20, 60 40, 50 40, 50 20), (50 40, 60 40, 60 60, 50 60, 50 40), (80 0, 110 0, 110 70, 80 70, 80 0), (90 60, 100 60, 100 50, 90 50, 90 60))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gexp = lwgeom_from_wkt( "MULTIPOLYGON(((80 0,80 70,110 70,110 0,80 0),(90 60,90 50,100 50,100 60,90 60)),((20 20,20 30,20 50,30 50,30 30,30 20,20 20)),((0 0,0 70,70 70,70 0,0 0),(10 10,40 10,40 60,10 60,10 10),(50 20,60 20,60 40,60 60,50 60,50 40,50 20)))", LW_PARSER_CHECK_NONE); CU_ASSERT(gexp != NULL); gout = lwgeom_buildarea(gin); CU_ASSERT(gout != NULL); check_geom_equal(gout, gexp); lwgeom_free(gout); lwgeom_free(gexp); lwgeom_free(gin); } /* ** Used by test harness to register the tests in this file. */ static CU_TestInfo buildarea_tests[] = { PG_TEST(buildarea1), PG_TEST(buildarea2), PG_TEST(buildarea3), PG_TEST(buildarea4), PG_TEST(buildarea4b), PG_TEST(buildarea5), PG_TEST(buildarea6), PG_TEST(buildarea7), CU_TEST_INFO_NULL }; CU_SuiteInfo buildarea_suite = {"buildarea", NULL, NULL, buildarea_tests}; ����������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_split.c��������������������������������������������������0000644�0000000�0000000�00000011753�12236407770�020670� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2011 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "CUnit/Basic.h" #include "cu_tester.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" static void test_lwline_split_by_point_to(void) { #if POSTGIS_GEOS_VERSION >= 33 LWLINE *line; LWPOINT *point; LWMLINE *coll; int ret; /* Because i don't trust that much prior tests... ;) */ cu_error_msg_reset(); coll = lwmline_construct_empty(SRID_UNKNOWN, 0, 0); CU_ASSERT_EQUAL(coll->ngeoms, 0); line = lwgeom_as_lwline(lwgeom_from_wkt("LINESTRING(0 0,5 5, 10 0)", LW_PARSER_CHECK_NONE)); CU_ASSERT(line != NULL); point = lwgeom_as_lwpoint(lwgeom_from_wkt( "POINT(0 0)", LW_PARSER_CHECK_NONE)); ret = lwline_split_by_point_to(line, point, coll); CU_ASSERT_EQUAL(ret, 1); CU_ASSERT_EQUAL(coll->ngeoms, 0); lwpoint_free(point); point = lwgeom_as_lwpoint(lwgeom_from_wkt( "POINT(10 0)", LW_PARSER_CHECK_NONE)); ret = lwline_split_by_point_to(line, point, coll); CU_ASSERT_EQUAL(ret, 1); CU_ASSERT_EQUAL(coll->ngeoms, 0); lwpoint_free(point); point = lwgeom_as_lwpoint(lwgeom_from_wkt( "POINT(5 0)", LW_PARSER_CHECK_NONE)); ret = lwline_split_by_point_to(line, point, coll); CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(coll->ngeoms, 0); lwpoint_free(point); point = lwgeom_as_lwpoint(lwgeom_from_wkt( "POINT(5 5)", LW_PARSER_CHECK_NONE)); ret = lwline_split_by_point_to(line, point, coll); CU_ASSERT_EQUAL(ret, 2); CU_ASSERT_EQUAL(coll->ngeoms, 2); lwpoint_free(point); point = lwgeom_as_lwpoint(lwgeom_from_wkt( "POINT(2 2)", LW_PARSER_CHECK_NONE)); ret = lwline_split_by_point_to(line, point, coll); CU_ASSERT_EQUAL(ret, 2); CU_ASSERT_EQUAL(coll->ngeoms, 4); lwpoint_free(point); lwcollection_free((LWCOLLECTION*)coll); lwline_free(line); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } static void test_lwgeom_split(void) { LWGEOM *geom, *blade, *ret; char *wkt, *in_wkt; geom = lwgeom_from_wkt( "MULTILINESTRING((-5 -2,0 0),(0 0,10 10))", LW_PARSER_CHECK_NONE); CU_ASSERT(geom != NULL); blade = lwgeom_from_wkt( "POINT(0 0)", LW_PARSER_CHECK_NONE); CU_ASSERT(blade != NULL); ret = lwgeom_split(geom, blade); CU_ASSERT(ret != NULL); wkt = lwgeom_to_ewkt(ret); in_wkt = "GEOMETRYCOLLECTION(LINESTRING(-5 -2,0 0),LINESTRING(0 0,10 10))"; if (strcmp(in_wkt, wkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_wkt, wkt); CU_ASSERT_STRING_EQUAL(wkt, in_wkt); lwfree(wkt); lwgeom_free(ret); lwgeom_free(geom); lwgeom_free(blade); /* See #1311 */ geom = lwgeom_from_wkt( "LINESTRING(0 0,10 0,20 4,0 3)", LW_PARSER_CHECK_NONE); CU_ASSERT(geom != NULL); blade = lwgeom_from_wkt("POINT(10 0)", LW_PARSER_CHECK_NONE); ret = lwgeom_split(geom, blade); CU_ASSERT(ret != NULL); wkt = lwgeom_to_ewkt(ret); in_wkt = "GEOMETRYCOLLECTION(LINESTRING(0 0,10 0),LINESTRING(10 0,20 4,0 3))"; if (strcmp(in_wkt, wkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_wkt, wkt); CU_ASSERT_STRING_EQUAL(wkt, in_wkt); lwfree(wkt); lwgeom_free(ret); lwgeom_free(geom); lwgeom_free(blade); /* See #2528 (1) -- memory leak test, needs valgrind to check */ geom = lwgeom_from_wkt("SRID=1;LINESTRING(0 1,10 1)", LW_PARSER_CHECK_NONE); CU_ASSERT(geom != NULL); blade = lwgeom_from_wkt("LINESTRING(7 0,7 3)", LW_PARSER_CHECK_NONE); ret = lwgeom_split(geom, blade); CU_ASSERT(ret != NULL); wkt = lwgeom_to_ewkt(ret); in_wkt = "SRID=1;GEOMETRYCOLLECTION(LINESTRING(0 1,7 1),LINESTRING(7 1,10 1))"; if (strcmp(in_wkt, wkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_wkt, wkt); CU_ASSERT_STRING_EQUAL(wkt, in_wkt); lwfree(wkt); lwgeom_free(ret); lwgeom_free(geom); lwgeom_free(blade); /* See #2528 (2) -- memory leak test, needs valgrind to check */ geom = lwgeom_from_wkt("SRID=1;POLYGON((0 1, 10 1, 10 10, 0 10, 0 1))", LW_PARSER_CHECK_NONE); CU_ASSERT(geom != NULL); blade = lwgeom_from_wkt("LINESTRING(7 0,7 20)", LW_PARSER_CHECK_NONE); ret = lwgeom_split(geom, blade); CU_ASSERT(ret != NULL); wkt = lwgeom_to_ewkt(ret); in_wkt = "SRID=1;GEOMETRYCOLLECTION(POLYGON((7 1,0 1,0 10,7 10,7 1)),POLYGON((7 10,10 10,10 1,7 1,7 10)))"; if (strcmp(in_wkt, wkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_wkt, wkt); CU_ASSERT_STRING_EQUAL(wkt, in_wkt); lwfree(wkt); lwgeom_free(ret); lwgeom_free(geom); lwgeom_free(blade); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo split_tests[] = { PG_TEST(test_lwline_split_by_point_to), PG_TEST(test_lwgeom_split), CU_TEST_INFO_NULL }; CU_SuiteInfo split_suite = {"split", NULL, NULL, split_tests}; ���������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_algorithm.c����������������������������������������������0000644�0000000�0000000�00000062622�12124336643�021520� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_algorithm.c 11212 2013-03-26 15:24:19Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" /* ** Global variables used by tests below */ /* Two-point objects */ POINTARRAY *pa21 = NULL; POINTARRAY *pa22 = NULL; LWLINE *l21 = NULL; LWLINE *l22 = NULL; /* Parsing support */ LWGEOM_PARSER_RESULT parse_result; /* ** The suite initialization function. ** Create any re-used objects. */ static int init_cg_suite(void) { pa21 = ptarray_construct(0, 0, 2); pa22 = ptarray_construct(0, 0, 2); l21 = lwline_construct(SRID_UNKNOWN, NULL, pa21); l22 = lwline_construct(SRID_UNKNOWN, NULL, pa22); return 0; } /* ** The suite cleanup function. ** Frees any global objects. */ static int clean_cg_suite(void) { if ( l21 ) lwline_free(l21); if ( l22 ) lwline_free(l22); return 0; } /* ** Test left/right side. */ static void test_lw_segment_side(void) { int rv = 0; POINT2D p1, p2, q; /* Vertical line at x=0 */ p1.x = 0.0; p1.y = 0.0; p2.x = 0.0; p2.y = 1.0; /* On the left */ q.x = -2.0; q.y = 1.5; rv = lw_segment_side(&p1, &p2, &q); //printf("left %g\n",rv); CU_ASSERT(rv < 0); /* On the right */ q.x = 2.0; rv = lw_segment_side(&p1, &p2, &q); //printf("right %g\n",rv); CU_ASSERT(rv > 0); /* On the line */ q.x = 0.0; rv = lw_segment_side(&p1, &p2, &q); //printf("on line %g\n",rv); CU_ASSERT_EQUAL(rv, 0); } /* ** Test crossings side. */ static void test_lw_segment_intersects(void) { #define setpoint(p, x1, y1) {(p).x = (x1); (p).y = (y1);} POINT2D p1, p2, q1, q2; /* P: Vertical line at x=0 */ setpoint(p1, 0.0, 0.0); p1.x = 0.0; p1.y = 0.0; p2.x = 0.0; p2.y = 1.0; /* Q: Horizontal line crossing left to right */ q1.x = -0.5; q1.y = 0.5; q2.x = 0.5; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_RIGHT ); /* Q: Horizontal line crossing right to left */ q1.x = 0.5; q1.y = 0.5; q2.x = -0.5; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT ); /* Q: Horizontal line not crossing right to left */ q1.x = 0.5; q1.y = 1.5; q2.x = -0.5; q2.y = 1.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION ); /* Q: Horizontal line crossing at second vertex right to left */ q1.x = 0.5; q1.y = 1.0; q2.x = -0.5; q2.y = 1.0; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION ); /* Q: Horizontal line crossing at first vertex right to left */ q1.x = 0.5; q1.y = 0.0; q2.x = -0.5; q2.y = 0.0; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT ); /* Q: Diagonal line with large range crossing at first vertex right to left */ q1.x = 0.5; q1.y = 10.0; q2.x = -0.5; q2.y = -10.0; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT ); /* Q: Diagonal line with large range crossing at second vertex right to left */ q1.x = 0.5; q1.y = 11.0; q2.x = -0.5; q2.y = -9.0; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION ); /* Q: Horizontal touching from left at second vertex*/ q1.x = -0.5; q1.y = 0.5; q2.x = 0.0; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION ); /* Q: Horizontal touching from right at first vertex */ q1.x = 0.0; q1.y = 0.5; q2.x = 0.5; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_RIGHT ); /* Q: Horizontal touching from left and far below on second vertex */ q1.x = -0.5; q1.y = -10.5; q2.x = 0.0; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION ); /* Q: Horizontal touching from right and far above on second vertex */ q1.x = 0.5; q1.y = 10.5; q2.x = 0.0; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION ); /* Q: Co-linear from top */ q1.x = 0.0; q1.y = 10.0; q2.x = 0.0; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR ); /* Q: Co-linear from bottom */ q1.x = 0.0; q1.y = -10.0; q2.x = 0.0; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR ); /* Q: Co-linear contained */ q1.x = 0.0; q1.y = 0.4; q2.x = 0.0; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR ); /* Q: Horizontal touching at end point from left */ q1.x = -0.5; q1.y = 1.0; q2.x = 0.0; q2.y = 1.0; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION ); /* Q: Horizontal touching at end point from right */ q1.x = 0.0; q1.y = 1.0; q2.x = 0.0; q2.y = 0.5; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR ); /* Q: Horizontal touching at start point from left */ q1.x = 0.0; q1.y = 0.0; q2.x = -0.5; q2.y = 0.0; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT ); /* Q: Horizontal touching at start point from right */ q1.x = 0.0; q1.y = 0.0; q2.x = 0.5; q2.y = 0.0; CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_RIGHT ); } static void test_lwline_crossing_short_lines(void) { POINT4D p; /* ** Simple test, two two-point lines */ /* Vertical line from 0,0 to 1,1 */ p.x = 0.0; p.y = 0.0; ptarray_set_point4d(pa21, 0, &p); p.y = 1.0; ptarray_set_point4d(pa21, 1, &p); /* Horizontal, crossing mid-segment */ p.x = -0.5; p.y = 0.5; ptarray_set_point4d(pa22, 0, &p); p.x = 0.5; ptarray_set_point4d(pa22, 1, &p); CU_ASSERT( lwline_crossing_direction(l21, l22) == LINE_CROSS_RIGHT ); /* Horizontal, crossing at top end vertex (end crossings don't count) */ p.x = -0.5; p.y = 1.0; ptarray_set_point4d(pa22, 0, &p); p.x = 0.5; ptarray_set_point4d(pa22, 1, &p); CU_ASSERT( lwline_crossing_direction(l21, l22) == LINE_NO_CROSS ); /* Horizontal, crossing at bottom end vertex */ p.x = -0.5; p.y = 0.0; ptarray_set_point4d(pa22, 0, &p); p.x = 0.5; ptarray_set_point4d(pa22, 1, &p); CU_ASSERT( lwline_crossing_direction(l21, l22) == LINE_CROSS_RIGHT ); /* Horizontal, no crossing */ p.x = -0.5; p.y = 2.0; ptarray_set_point4d(pa22, 0, &p); p.x = 0.5; ptarray_set_point4d(pa22, 1, &p); CU_ASSERT( lwline_crossing_direction(l21, l22) == LINE_NO_CROSS ); /* Vertical, no crossing */ p.x = -0.5; p.y = 0.0; ptarray_set_point4d(pa22, 0, &p); p.y = 1.0; ptarray_set_point4d(pa22, 1, &p); CU_ASSERT( lwline_crossing_direction(l21, l22) == LINE_NO_CROSS ); } static void test_lwline_crossing_long_lines(void) { LWLINE *l51; LWLINE *l52; /* ** More complex test, longer lines and multiple crossings */ /* Vertical line with vertices at y integers */ l51 = (LWLINE*)lwgeom_from_wkt("LINESTRING(0 0, 0 1, 0 2, 0 3, 0 4)", LW_PARSER_CHECK_NONE); /* Two crossings at segment midpoints */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, -1 1.5, 1 3, 1 4, 1 5)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_MULTICROSS_END_SAME_FIRST_LEFT ); lwline_free(l52); /* One crossing at interior vertex */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1, -1 1, -1 2, -1 3)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_CROSS_LEFT ); lwline_free(l52); /* Two crossings at interior vertices */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1, -1 1, 0 3, 1 3)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_MULTICROSS_END_SAME_FIRST_LEFT ); lwline_free(l52); /* Two crossings, one at the first vertex on at interior vertex */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 0, 0 0, -1 1, 0 3, 1 3)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_MULTICROSS_END_SAME_FIRST_LEFT ); lwline_free(l52); /* Two crossings, one at the first vertex on the next interior vertex */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 0, 0 0, -1 1, 0 1, 1 2)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_MULTICROSS_END_SAME_FIRST_LEFT ); lwline_free(l52); /* Three crossings, two at midpoints, one at vertex */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(0.5 1, -1 0.5, 1 2, -1 2, -1 3)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_MULTICROSS_END_LEFT ); lwline_free(l52); /* One mid-point co-linear crossing */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1.5, 0 2.5, -1 3, -1 4)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_CROSS_LEFT ); lwline_free(l52); /* One on-vertices co-linear crossing */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1, 0 2, -1 4, -1 4)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_CROSS_LEFT ); lwline_free(l52); /* No crossing, but end on a co-linearity. */ l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 1 2, 1 3, 0 3, 0 4)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_NO_CROSS ); lwline_free(l52); lwline_free(l51); } static void test_lwline_crossing_bugs(void) { LWLINE *l1; LWLINE *l2; l1 = (LWLINE*)lwgeom_from_wkt("LINESTRING(2.99 90.16,71 74,20 140,171 154)", LW_PARSER_CHECK_NONE); l2 = (LWLINE*)lwgeom_from_wkt("LINESTRING(25 169,89 114,40 70,86 43)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwline_crossing_direction(l1, l2) == LINE_MULTICROSS_END_RIGHT ); lwline_free(l1); lwline_free(l2); } static void test_lwpoint_set_ordinate(void) { POINT4D p; p.x = 0.0; p.y = 0.0; p.z = 0.0; p.m = 0.0; lwpoint_set_ordinate(&p, 'X', 1.5); CU_ASSERT_EQUAL( p.x, 1.5 ); lwpoint_set_ordinate(&p, 'M', 2.5); CU_ASSERT_EQUAL( p.m, 2.5 ); lwpoint_set_ordinate(&p, 'Z', 3.5); CU_ASSERT_EQUAL( p.z, 3.5 ); } static void test_lwpoint_get_ordinate(void) { POINT4D p; p.x = 10.0; p.y = 20.0; p.z = 30.0; p.m = 40.0; CU_ASSERT_EQUAL( lwpoint_get_ordinate(&p, 'X'), 10.0 ); CU_ASSERT_EQUAL( lwpoint_get_ordinate(&p, 'Y'), 20.0 ); CU_ASSERT_EQUAL( lwpoint_get_ordinate(&p, 'Z'), 30.0 ); CU_ASSERT_EQUAL( lwpoint_get_ordinate(&p, 'M'), 40.0 ); } static void test_point_interpolate(void) { POINT4D p, q, r; int rv = 0; p.x = 10.0; p.y = 20.0; p.z = 30.0; p.m = 40.0; q.x = 20.0; q.y = 30.0; q.z = 40.0; q.m = 50.0; rv = point_interpolate(&p, &q, &r, 1, 1, 'Z', 35.0); CU_ASSERT_EQUAL( r.x, 15.0); rv = point_interpolate(&p, &q, &r, 1, 1, 'M', 41.0); CU_ASSERT_EQUAL( r.y, 21.0); rv = point_interpolate(&p, &q, &r, 1, 1, 'M', 50.0); CU_ASSERT_EQUAL( r.y, 30.0); rv = point_interpolate(&p, &q, &r, 1, 1, 'M', 40.0); CU_ASSERT_EQUAL( r.y, 20.0); } static void test_lwline_clip(void) { LWCOLLECTION *c; LWLINE *line = NULL; LWLINE *l51 = NULL; char *ewkt; /* Vertical line with vertices at y integers */ l51 = (LWLINE*)lwgeom_from_wkt("LINESTRING(0 0, 0 1, 0 2, 0 3, 0 4)", LW_PARSER_CHECK_NONE); /* Clip in the middle, mid-range. */ c = lwline_clip_to_ordinate_range(l51, 'Y', 1.5, 2.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 1.5,0 2,0 2.5))"); lwfree(ewkt); lwcollection_free(c); /* Clip off the top. */ c = lwline_clip_to_ordinate_range(l51, 'Y', 3.5, 5.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 3.5,0 4))"); lwfree(ewkt); lwcollection_free(c); /* Clip off the bottom. */ c = lwline_clip_to_ordinate_range(l51, 'Y', -1.5, 2.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 0,0 1,0 2,0 2.5))" ); lwfree(ewkt); lwcollection_free(c); /* Range holds entire object. */ c = lwline_clip_to_ordinate_range(l51, 'Y', -1.5, 5.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 0,0 1,0 2,0 3,0 4))" ); lwfree(ewkt); lwcollection_free(c); /* Clip on vertices. */ c = lwline_clip_to_ordinate_range(l51, 'Y', 1.0, 2.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 1,0 2))" ); lwfree(ewkt); lwcollection_free(c); /* Clip on vertices off the bottom. */ c = lwline_clip_to_ordinate_range(l51, 'Y', -1.0, 2.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 0,0 1,0 2))" ); lwfree(ewkt); lwcollection_free(c); /* Clip on top. */ c = lwline_clip_to_ordinate_range(l51, 'Y', -1.0, 0.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(0 0))" ); lwfree(ewkt); lwcollection_free(c); /* ST_LocateBetweenElevations(ST_GeomFromEWKT('LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)'), 1, 2)) */ line = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)", LW_PARSER_CHECK_NONE); c = lwline_clip_to_ordinate_range(line, 'Z', 1.0, 2.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((2 2 2,1 1 1))" ); lwfree(ewkt); lwcollection_free(c); lwline_free(line); /* ST_LocateBetweenElevations('LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)', 1, 2)) */ line = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)", LW_PARSER_CHECK_NONE); c = lwline_clip_to_ordinate_range(line, 'Z', 1.0, 2.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("a = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((2 2 2,1 1 1))" ); lwfree(ewkt); lwcollection_free(c); lwline_free(line); /* ST_LocateBetweenElevations('LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)', 1, 1)) */ line = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 2 3, 4 5 6, 6 6 6, 1 1 1)", LW_PARSER_CHECK_NONE); c = lwline_clip_to_ordinate_range(line, 'Z', 1.0, 1.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("b = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(1 1 1))" ); lwfree(ewkt); lwcollection_free(c); lwline_free(line); /* ST_LocateBetweenElevations('LINESTRING(1 1 1, 1 2 2)', 1,1) */ line = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1 1, 1 2 2)", LW_PARSER_CHECK_NONE); c = lwline_clip_to_ordinate_range(line, 'Z', 1.0, 1.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(1 1 1))" ); lwfree(ewkt); lwcollection_free(c); lwline_free(line); lwline_free(l51); } static void test_lwmline_clip(void) { LWCOLLECTION *c; char *ewkt; LWMLINE *mline = NULL; LWLINE *line = NULL; /* ** Set up the input line. Trivial one-member case. */ mline = (LWMLINE*)lwgeom_from_wkt("MULTILINESTRING((0 0,0 1,0 2,0 3,0 4))", LW_PARSER_CHECK_NONE); /* Clip in the middle, mid-range. */ c = lwmline_clip_to_ordinate_range(mline, 'Y', 1.5, 2.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0 1.5,0 2,0 2.5))"); lwfree(ewkt); lwcollection_free(c); lwmline_free(mline); /* ** Set up the input line. Two-member case. */ mline = (LWMLINE*)lwgeom_from_wkt("MULTILINESTRING((1 0,1 1,1 2,1 3,1 4), (0 0,0 1,0 2,0 3,0 4))", LW_PARSER_CHECK_NONE); /* Clip off the top. */ c = lwmline_clip_to_ordinate_range(mline, 'Y', 3.5, 5.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((1 3.5,1 4),(0 3.5,0 4))"); lwfree(ewkt); lwcollection_free(c); lwmline_free(mline); /* ** Set up staggered input line to create multi-type output. */ mline = (LWMLINE*)lwgeom_from_wkt("MULTILINESTRING((1 0,1 -1,1 -2,1 -3,1 -4), (0 0,0 1,0 2,0 3,0 4))", LW_PARSER_CHECK_NONE); /* Clip from 0 upwards.. */ c = lwmline_clip_to_ordinate_range(mline, 'Y', 0.0, 2.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(1 0),LINESTRING(0 0,0 1,0 2,0 2.5))"); lwfree(ewkt); lwcollection_free(c); lwmline_free(mline); /* ** Set up input line from MAC */ line = (LWLINE*)lwgeom_from_wkt("LINESTRING(0 0 0 0,1 1 1 1,2 2 2 2,3 3 3 3,4 4 4 4,3 3 3 5,2 2 2 6,1 1 1 7,0 0 0 8)", LW_PARSER_CHECK_NONE); /* Clip from 3 to 3.5 */ c = lwline_clip_to_ordinate_range(line, 'Z', 3.0, 3.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((3 3 3 3,3.5 3.5 3.5 3.5),(3.5 3.5 3.5 4.5,3 3 3 5))"); lwfree(ewkt); lwcollection_free(c); /* Clip from 2 to 3.5 */ c = lwline_clip_to_ordinate_range(line, 'Z', 2.0, 3.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((2 2 2 2,3 3 3 3,3.5 3.5 3.5 3.5),(3.5 3.5 3.5 4.5,3 3 3 5,2 2 2 6))"); lwfree(ewkt); lwcollection_free(c); /* Clip from 3 to 4 */ c = lwline_clip_to_ordinate_range(line, 'Z', 3.0, 4.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((3 3 3 3,4 4 4 4,3 3 3 5))"); lwfree(ewkt); lwcollection_free(c); /* Clip from 2 to 3 */ c = lwline_clip_to_ordinate_range(line, 'Z', 2.0, 3.0); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((2 2 2 2,3 3 3 3),(3 3 3 5,2 2 2 6))"); lwfree(ewkt); lwcollection_free(c); lwline_free(line); } static void test_lwline_clip_big(void) { POINTARRAY *pa = ptarray_construct(1, 0, 3); LWLINE *line = lwline_construct(SRID_UNKNOWN, NULL, pa); LWCOLLECTION *c; char *ewkt; POINT4D p; p.x = 0.0; p.y = 0.0; p.z = 0.0; ptarray_set_point4d(pa, 0, &p); p.x = 1.0; p.y = 1.0; p.z = 1.0; ptarray_set_point4d(pa, 1, &p); p.x = 2.0; p.y = 2.0; p.z = 2.0; ptarray_set_point4d(pa, 2, &p); c = lwline_clip_to_ordinate_range(line, 'Z', 0.5, 1.5); ewkt = lwgeom_to_ewkt((LWGEOM*)c); //printf("c = %s\n", ewkt); CU_ASSERT_STRING_EQUAL(ewkt, "MULTILINESTRING((0.5 0.5 0.5,1 1 1,1.5 1.5 1.5))" ); lwfree(ewkt); lwcollection_free(c); lwline_free(line); } static void test_geohash_precision(void) { GBOX bbox; GBOX bounds; int precision = 0; gbox_init(&bbox); gbox_init(&bounds); bbox.xmin = 23.0; bbox.xmax = 23.0; bbox.ymin = 25.2; bbox.ymax = 25.2; precision = lwgeom_geohash_precision(bbox, &bounds); //printf("\nprecision %d\n",precision); CU_ASSERT_EQUAL(precision, 20); bbox.xmin = 23.0; bbox.ymin = 23.0; bbox.xmax = 23.1; bbox.ymax = 23.1; precision = lwgeom_geohash_precision(bbox, &bounds); //printf("precision %d\n",precision); CU_ASSERT_EQUAL(precision, 3); bbox.xmin = 23.0; bbox.ymin = 23.0; bbox.xmax = 23.0001; bbox.ymax = 23.0001; precision = lwgeom_geohash_precision(bbox, &bounds); //printf("precision %d\n",precision); CU_ASSERT_EQUAL(precision, 7); } static void test_geohash_point(void) { char *geohash; geohash = geohash_point(0, 0, 16); //printf("\ngeohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "s000000000000000"); lwfree(geohash); geohash = geohash_point(90, 0, 16); //printf("\ngeohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "w000000000000000"); lwfree(geohash); geohash = geohash_point(20.012345, -20.012345, 15); //printf("\ngeohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "kkqnpkue9ktbpe5"); lwfree(geohash); } static void test_geohash(void) { LWPOINT *lwpoint = NULL; LWLINE *lwline = NULL; LWMLINE *lwmline = NULL; char *geohash = NULL; lwpoint = (LWPOINT*)lwgeom_from_wkt("POINT(23.0 25.2)", LW_PARSER_CHECK_NONE); geohash = lwgeom_geohash((LWGEOM*)lwpoint,0); //printf("\ngeohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "ss2r77s0du7p2ewb8hmx"); lwpoint_free(lwpoint); lwfree(geohash); lwpoint = (LWPOINT*)lwgeom_from_wkt("POINT(23.0 25.2 2.0)", LW_PARSER_CHECK_NONE); geohash = lwgeom_geohash((LWGEOM*)lwpoint,0); //printf("geohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "ss2r77s0du7p2ewb8hmx"); lwpoint_free(lwpoint); lwfree(geohash); lwline = (LWLINE*)lwgeom_from_wkt("LINESTRING(23.0 23.0,23.1 23.1)", LW_PARSER_CHECK_NONE); geohash = lwgeom_geohash((LWGEOM*)lwline,0); //printf("geohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "ss0"); lwline_free(lwline); lwfree(geohash); lwline = (LWLINE*)lwgeom_from_wkt("LINESTRING(23.0 23.0,23.001 23.001)", LW_PARSER_CHECK_NONE); geohash = lwgeom_geohash((LWGEOM*)lwline,0); //printf("geohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "ss06g7"); lwline_free(lwline); lwfree(geohash); lwmline = (LWMLINE*)lwgeom_from_wkt("MULTILINESTRING((23.0 23.0,23.1 23.1),(23.0 23.0,23.1 23.1))", LW_PARSER_CHECK_NONE); geohash = lwgeom_geohash((LWGEOM*)lwmline,0); //printf("geohash %s\n",geohash); CU_ASSERT_STRING_EQUAL(geohash, "ss0"); lwmline_free(lwmline); lwfree(geohash); } static void test_isclosed(void) { LWGEOM *geom; /* LINESTRING */ /* Not Closed on 2D */ geom = lwgeom_from_wkt("LINESTRING(1 2,3 4)", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwline_is_closed((LWLINE *) geom)); lwgeom_free(geom); /* Closed on 2D */ geom = lwgeom_from_wkt("LINESTRING(1 2,3 4,1 2)", LW_PARSER_CHECK_NONE); CU_ASSERT(lwline_is_closed((LWLINE *) geom)); lwgeom_free(geom); /* Not closed on 3D */ geom = lwgeom_from_wkt("LINESTRING(1 2 3,4 5 6)", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwline_is_closed((LWLINE *) geom)); lwgeom_free(geom); /* Closed on 3D */ geom = lwgeom_from_wkt("LINESTRING(1 2 3,4 5 6,1 2 3)", LW_PARSER_CHECK_NONE); CU_ASSERT(lwline_is_closed((LWLINE *) geom)); lwgeom_free(geom); /* Closed on 4D, even if M is not the same */ geom = lwgeom_from_wkt("LINESTRING(1 2 3 4,5 6 7 8,1 2 3 0)", LW_PARSER_CHECK_NONE); CU_ASSERT(lwline_is_closed((LWLINE *) geom)); lwgeom_free(geom); /* CIRCULARSTRING */ /* Not Closed on 2D */ geom = lwgeom_from_wkt("CIRCULARSTRING(1 2,3 4,5 6)", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwcircstring_is_closed((LWCIRCSTRING *) geom)); lwgeom_free(geom); /* Closed on 2D */ geom = lwgeom_from_wkt("CIRCULARSTRING(1 2,3 4,1 2)", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcircstring_is_closed((LWCIRCSTRING *) geom)); lwgeom_free(geom); /* Not closed on 3D */ geom = lwgeom_from_wkt("CIRCULARSTRING(1 2 3,4 5 6,7 8 9)", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwcircstring_is_closed((LWCIRCSTRING *) geom)); lwgeom_free(geom); /* Closed on 3D */ geom = lwgeom_from_wkt("CIRCULARSTRING(1 2 3,4 5 6,1 2 3)", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcircstring_is_closed((LWCIRCSTRING *) geom)); lwgeom_free(geom); /* Closed on 4D, even if M is not the same */ geom = lwgeom_from_wkt("CIRCULARSTRING(1 2 3 4,5 6 7 8,1 2 3 0)", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcircstring_is_closed((LWCIRCSTRING *) geom)); lwgeom_free(geom); /* COMPOUNDCURVE */ /* Not Closed on 2D */ geom = lwgeom_from_wkt("COMPOUNDCURVE(CIRCULARSTRING(1 2,3 4,1 2),(1 2,7 8,5 6))", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); geom = lwgeom_from_wkt("COMPOUNDCURVE((1 2,3 4,1 2),CIRCULARSTRING(1 2,7 8,5 6))", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); /* Closed on 2D */ geom = lwgeom_from_wkt("COMPOUNDCURVE(CIRCULARSTRING(1 2,3 4,5 6), (5 6,7 8,1 2))", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); geom = lwgeom_from_wkt("COMPOUNDCURVE((1 2,3 4,5 6),CIRCULARSTRING(5 6,7 8,1 2))", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); /* Not Closed on 3D */ geom = lwgeom_from_wkt("COMPOUNDCURVE(CIRCULARSTRING(1 2 3,4 5 6,1 2 3),(1 2 3,7 8 9,10 11 12))", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); geom = lwgeom_from_wkt("COMPOUNDCURVE((1 2 3,4 5 6,1 2 3),CIRCULARSTRING(1 2 3,7 8 9,10 11 12))", LW_PARSER_CHECK_NONE); CU_ASSERT(!lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); /* Closed on 3D */ geom = lwgeom_from_wkt("COMPOUNDCURVE(CIRCULARSTRING(1 2 3,4 5 6,7 8 9),(7 8 9,10 11 12,1 2 3))", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); geom = lwgeom_from_wkt("COMPOUNDCURVE((1 2 3,4 5 6,7 8 9),CIRCULARSTRING(7 8 9,10 11 12,1 2 3))", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); /* Closed on 4D, even if M is not the same */ geom = lwgeom_from_wkt("COMPOUNDCURVE((1 2 3 4,5 6 7 8,9 10 11 12),CIRCULARSTRING(9 10 11 12,13 14 15 16,1 2 3 0))", LW_PARSER_CHECK_NONE); CU_ASSERT(lwcompound_is_closed((LWCOMPOUND *) geom)); lwgeom_free(geom); } static void test_geohash_point_as_int(void) { unsigned int gh; POINT2D p; p.x = 50; p.y = 35; gh = geohash_point_as_int(&p); CU_ASSERT_EQUAL(gh, (unsigned int)3440103613); p.x = 140; p.y = 45; gh = geohash_point_as_int(&p); CU_ASSERT_EQUAL(gh, (unsigned int)3982480893); p.x = 140; p.y = 55; gh = geohash_point_as_int(&p); CU_ASSERT_EQUAL(gh, (unsigned int)4166944232); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo algorithms_tests[] = { PG_TEST(test_lw_segment_side), PG_TEST(test_lw_segment_intersects), PG_TEST(test_lwline_crossing_short_lines), PG_TEST(test_lwline_crossing_long_lines), PG_TEST(test_lwline_crossing_bugs), PG_TEST(test_lwpoint_set_ordinate), PG_TEST(test_lwpoint_get_ordinate), PG_TEST(test_point_interpolate), PG_TEST(test_lwline_clip), PG_TEST(test_lwline_clip_big), PG_TEST(test_lwmline_clip), PG_TEST(test_geohash_point), PG_TEST(test_geohash_precision), PG_TEST(test_geohash), PG_TEST(test_geohash_point_as_int), PG_TEST(test_isclosed), CU_TEST_INFO_NULL }; CU_SuiteInfo algorithms_suite = {"PostGIS Computational Geometry Suite", init_cg_suite, clean_cg_suite, algorithms_tests}; ��������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_force_sfs.c����������������������������������������������0000644�0000000�0000000�00000013463�12143225636�021502� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id:$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2013 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_geom_test(char * in, char * out) { LWGEOM *g, *h; char *tmp; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_force_sfs(g, 110); tmp = lwgeom_to_ewkt(h); if (strcmp(tmp, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nExp: %s\n", in, tmp, out); CU_ASSERT_STRING_EQUAL(tmp, out); lwfree(tmp); lwgeom_free(h); } static void do_type_test(char * in, int type) { LWGEOM *g, *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_force_sfs(g, 110); if(h->type != type) fprintf(stderr, "\nIn: %s\nOut: %s\nExp: %s\n", in, lwtype_name(h->type), lwtype_name(type)); CU_ASSERT_EQUAL(h->type, type); lwgeom_free(h); } static void test_sqlmm(void) { do_type_test("CIRCULARSTRING(-1 0,0 1,0 -1)", LINETYPE); do_type_test("COMPOUNDCURVE(CIRCULARSTRING(-1 0,0 1,0 -1),(0 -1,-1 -1))", LINETYPE); do_type_test("COMPOUNDCURVE((-3 -3,-1 0),CIRCULARSTRING(-1 0,0 1,0 -1),(0 -1,0 -1.5,0 -2),CIRCULARSTRING(0 -2,-1 -3,1 -3),(1 -3,5 5))", LINETYPE); do_type_test("COMPOUNDCURVE(CIRCULARSTRING(-1 0,0 1,0 -1),CIRCULARSTRING(0 -1,-1 -2,1 -2))", LINETYPE); do_type_test("CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING (0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2),(0 1 2, 0 0 2)))", POLYGONTYPE); do_type_test("CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (0 0 2 5,1 1 2 6,1 0 2 5), (1 0 2 3,0 1 2 2), (0 1 2 2,30 1 2 2), CIRCULARSTRING (30 1 2 2,12 1 2 6,1 10 2 5, 1 10 3 5, 0 0 2 5)))", POLYGONTYPE); do_type_test("MULTISURFACE (CURVEPOLYGON (CIRCULARSTRING (-2 0, -1 -1, 0 0, 1 -1, 2 0, 0 2, -2 0), (-1 0, 0 0.5, 1 0, 0 1, -1 0)), ((7 8, 10 10, 6 14, 4 11, 7 8)))", MULTIPOLYGONTYPE); } static void test_sfs_12(void) { do_geom_test("TRIANGLE((1 2,3 4,5 6,1 2))", "POLYGON((1 2,3 4,5 6,1 2))"); do_geom_test("GEOMETRYCOLLECTION(TRIANGLE((1 2,3 4,5 6,1 2)))", "GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)))"); do_geom_test("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(TRIANGLE((1 2,3 4,5 6,1 2))))", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2))))"); do_geom_test("TIN(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))", "GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8)))"); do_geom_test("GEOMETRYCOLLECTION(TIN(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))))", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8))))"); do_geom_test("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(TIN(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))))", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8)))))"); do_geom_test("POLYHEDRALSURFACE(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))", "GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8)))"); do_geom_test("GEOMETRYCOLLECTION(POLYHEDRALSURFACE(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))))", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8))))"); do_geom_test("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8)))))", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8)))))"); } static void test_sfs_11(void) { do_geom_test("POINT(1 2)", "POINT(1 2)"); do_geom_test("LINESTRING(1 2,3 4)", "LINESTRING(1 2,3 4)"); do_geom_test("POLYGON((1 2,3 4,5 6,1 2))", "POLYGON((1 2,3 4,5 6,1 2))"); do_geom_test("POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8))", "POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8))"); do_geom_test("MULTIPOINT(1 2,3 4)", "MULTIPOINT(1 2,3 4)"); do_geom_test("MULTILINESTRING((1 2,3 4),(5 6,7 8))", "MULTILINESTRING((1 2,3 4),(5 6,7 8))"); do_geom_test("MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))"); do_geom_test("MULTIPOLYGON(((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)))"); do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))", "GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))"); do_geom_test("GEOMETRYCOLLECTION EMPTY", "GEOMETRYCOLLECTION EMPTY"); /* SRID */ do_geom_test("SRID=4326;GEOMETRYCOLLECTION EMPTY", "SRID=4326;GEOMETRYCOLLECTION EMPTY"); do_geom_test("SRID=4326;POINT(1 2)", "SRID=4326;POINT(1 2)"); /* 3D and 4D */ /* SFS 1.2 is only 2D but we choose here to keep 3D and 4D, and let the user use force_2d if he want/need it */ do_geom_test("POINT(1 2 3)", "POINT(1 2 3)"); do_geom_test("POINTM(1 2 3)", "POINTM(1 2 3)"); do_geom_test("POINT(1 2 3 4)", "POINT(1 2 3 4)"); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo force_sfs_tests[] = { PG_TEST(test_sfs_11), PG_TEST(test_sfs_12), PG_TEST(test_sqlmm), CU_TEST_INFO_NULL }; CU_SuiteInfo force_sfs_suite = {"force_sfs", NULL, NULL, force_sfs_tests}; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_in_wkb.c�������������������������������������������������0000644�0000000�0000000�00000015714�11722777314�021012� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_wkb.c 6036 2010-10-03 18:14:35Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" /* ** Global variable to hold WKB strings */ char *hex_a; char *hex_b; /* ** The suite initialization function. ** Create any re-used objects. */ static int init_wkb_in_suite(void) { hex_a = NULL; hex_b = NULL; return 0; } /* ** The suite cleanup function. ** Frees any global objects. */ static int clean_wkb_in_suite(void) { if (hex_a) free(hex_a); if (hex_b) free(hex_b); hex_a = NULL; hex_b = NULL; return 0; } static void cu_wkb_malformed_in(char *hex) { LWGEOM_PARSER_RESULT p; int rv = 0; rv = lwgeom_parse_wkt(&p, hex, 0); CU_ASSERT( LW_FAILURE == rv ); CU_ASSERT( p.errcode ); CU_ASSERT( ! p.geom ); lwgeom_parser_result_free(&p); } static void cu_wkb_in(char *wkt) { LWGEOM_PARSER_RESULT pr; LWGEOM *g_a, *g_b; uint8_t *wkb_a, *wkb_b; size_t wkb_size_a, wkb_size_b; /* int i; char *hex; */ if ( hex_a ) free(hex_a); if ( hex_b ) free(hex_b); /* Turn WKT into geom */ lwgeom_parse_wkt(&pr, wkt, LW_PARSER_CHECK_NONE); if ( pr.errcode ) { printf("ERROR: %s\n", pr.message); printf("POSITION: %d\n", pr.errlocation); exit(0); } /* Get the geom */ g_a = pr.geom; /* Turn geom into WKB */ wkb_a = lwgeom_to_wkb(g_a, WKB_NDR | WKB_EXTENDED, &wkb_size_a); /* Turn WKB back into geom */ g_b = lwgeom_from_wkb(wkb_a, wkb_size_a, LW_PARSER_CHECK_NONE); /* Turn geom to WKB again */ wkb_b = lwgeom_to_wkb(g_b, WKB_NDR | WKB_EXTENDED, &wkb_size_b); /* Turn geoms into WKB for comparisons */ hex_a = hexbytes_from_bytes(wkb_a, wkb_size_a); hex_b = hexbytes_from_bytes(wkb_b, wkb_size_b); /* Clean up */ lwfree(wkb_a); lwfree(wkb_b); lwgeom_parser_result_free(&pr); lwgeom_free(g_b); } static void test_wkb_in_point(void) { cu_wkb_in("POINT(0 0 0 0)"); // printf("old: %s\nnew: %s\n",hex_a, hex_b); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("SRID=4;POINTM(1 1 1)"); // printf("old: %s\nnew: %s\n",hex_a, hex_b); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_linestring(void) { cu_wkb_in("LINESTRING(0 0,1 1)"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("LINESTRING(0 0 1,1 1 2,2 2 3)"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_polygon(void) { cu_wkb_in("SRID=4;POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("SRID=14;POLYGON((0 0 0 1,0 1 0 2,1 1 0 3,1 0 0 4,0 0 0 5))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("SRID=4;POLYGON((0 0 0 1,0 1 0 2,1 1 0 3,1 0 0 4,0 0 0 5))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("POLYGON EMPTY"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_multipoint(void) { cu_wkb_in("SRID=4;MULTIPOINT(0 0 0,0 1 0,1 1 0,1 0 0,0 0 1)"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("MULTIPOINT(0 0 0, 0.26794919243112270647255365849413 1 3)"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_multilinestring(void) {} static void test_wkb_in_multipolygon(void) { cu_wkb_in("SRID=14;MULTIPOLYGON(((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((-1 -1 0,-1 2 0,2 2 0,2 -1 0,-1 -1 0),(0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); //printf("old: %s\nnew: %s\n",hex_a, hex_b); } static void test_wkb_in_collection(void) { cu_wkb_in("SRID=14;GEOMETRYCOLLECTION(POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),POINT(1 1 1))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("GEOMETRYCOLLECTION EMPTY"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("SRID=14;GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))),POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),POINT(1 1 1),LINESTRING(0 0 0, 1 1 1))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_circularstring(void) { cu_wkb_in("CIRCULARSTRING(0 -2,-2 0,0 2,2 0,0 -2)"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("CIRCULARSTRING(-5 0 0 4, 0 5 1 3, 5 0 2 2, 10 -5 3 1, 15 0 4 0)"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); cu_wkb_in("SRID=43;CIRCULARSTRING(-5 0 0 4, 0 5 1 3, 5 0 2 2, 10 -5 3 1, 15 0 4 0)"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_compoundcurve(void) { cu_wkb_in("COMPOUNDCURVE(CIRCULARSTRING(0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1),(0.5857864376269049511983112757903 1.4142135623730950488016887242097 1,2 0 0,0 0 0))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_curvpolygon(void) { cu_wkb_in("CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2))"); CU_ASSERT_STRING_EQUAL(hex_a, hex_b); } static void test_wkb_in_multicurve(void) {} static void test_wkb_in_multisurface(void) {} static void test_wkb_in_malformed(void) { /* See http://trac.osgeo.org/postgis/ticket/1445 */ cu_wkb_malformed_in("01060000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F"); cu_wkb_malformed_in("01050000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F"); cu_wkb_malformed_in("01040000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F"); cu_wkb_malformed_in("01030000400200000001040000400100000001010000400000000000000000000000000000000000000000000000000101000040000000000000F03F000000000000F03F000000000000F03F"); /* See http://trac.osgeo.org/postgis/ticket/168 */ cu_wkb_malformed_in("01060000C00100000001030000C00100000003000000E3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFF"); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo wkb_in_tests[] = { PG_TEST(test_wkb_in_point), PG_TEST(test_wkb_in_linestring), PG_TEST(test_wkb_in_polygon), PG_TEST(test_wkb_in_multipoint), PG_TEST(test_wkb_in_multilinestring), PG_TEST(test_wkb_in_multipolygon), PG_TEST(test_wkb_in_collection), PG_TEST(test_wkb_in_circularstring), PG_TEST(test_wkb_in_compoundcurve), PG_TEST(test_wkb_in_curvpolygon), PG_TEST(test_wkb_in_multicurve), PG_TEST(test_wkb_in_multisurface), PG_TEST(test_wkb_in_malformed), CU_TEST_INFO_NULL }; CU_SuiteInfo wkb_in_suite = {"WKB In Suite", init_wkb_in_suite, clean_wkb_in_suite, wkb_in_tests}; ����������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_tester.h�������������������������������������������������0000644�0000000�0000000�00000001274�12064401031�021024� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_tester.h 10860 2012-12-19 18:06:17Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #define PG_TEST(test_func) { #test_func, test_func } #define MAX_CUNIT_ERROR_LENGTH 512 /* Contains the most recent error message generated by lwerror. */ char cu_error_msg[MAX_CUNIT_ERROR_LENGTH+1]; /* Resets cu_error_msg back to blank. */ void cu_error_msg_reset(void); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_out_wkt.c������������������������������������������������0000644�0000000�0000000�00000020766�11722777314�021240� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_wkt.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" /* ** Global variable to hold WKT strings */ char *s = NULL; /* ** The suite initialization function. ** Create any re-used objects. */ static int init_wkt_out_suite(void) { s = NULL; return 0; } /* ** The suite cleanup function. ** Frees any global objects. */ static int clean_wkt_out_suite(void) { if ( s ) free(s); s = NULL; return 0; } static char* cu_wkt(char *wkt, uint8_t variant) { LWGEOM *g = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); if ( s ) free(s); if ( ! g ) { printf("error converting '%s' to lwgeom\n", wkt); exit(0); } s = lwgeom_to_wkt(g, variant, 8, NULL); lwgeom_free(g); return s; } static void test_wkt_out_point(void) { CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(0.1111 0.1111 0.1111 0)",WKT_ISO), "POINT ZM (0.1111 0.1111 0.1111 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(0 0 0 0)",WKT_EXTENDED), "POINT(0 0 0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(0 0 0 0)",WKT_SFSQL), "POINT(0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINTM(0 0 0)",WKT_ISO), "POINT M (0 0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINTM(0 0 0)",WKT_EXTENDED), "POINTM(0 0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINTM(0 0 0)",WKT_SFSQL), "POINT(0 0)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100 100)",WKT_ISO), "POINT(100 100)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100 100)",WKT_EXTENDED), "POINT(100 100)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100 100)",WKT_SFSQL), "POINT(100 100)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100.1 100 12 12)",WKT_ISO), "POINT ZM (100.1 100 12 12)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100.1 100 12 12)",WKT_EXTENDED), "POINT(100.1 100 12 12)"); CU_ASSERT_STRING_EQUAL(cu_wkt("POINT(100.1 100 12 12)",WKT_SFSQL), "POINT(100.1 100)"); CU_ASSERT_STRING_EQUAL(cu_wkt("SRID=100;POINT(100.1 100 12 12)",WKT_SFSQL), "POINT(100.1 100)"); CU_ASSERT_STRING_EQUAL(cu_wkt("SRID=100;POINT(100.1 100 12 12)",WKT_EXTENDED), "SRID=100;POINT(100.1 100 12 12)"); // printf("%s\n",cu_wkt("SRID=100;POINT(100.1 100 12 12)",WKT_EXTENDED)); } static void test_wkt_out_linestring(void) { CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRING(1 2 3 4,5 6 7 8)",WKT_ISO), "LINESTRING ZM (1 2 3 4,5 6 7 8)"); CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRING(1 2 3,5 6 7)",WKT_ISO), "LINESTRING Z (1 2 3,5 6 7)"); CU_ASSERT_STRING_EQUAL(cu_wkt("LINESTRINGM(1 2 3,5 6 7)",WKT_ISO), "LINESTRING M (1 2 3,5 6 7)"); } static void test_wkt_out_polygon(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))",WKT_ISO), "POLYGON Z ((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))" ); CU_ASSERT_STRING_EQUAL( cu_wkt("POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))",WKT_EXTENDED), "POLYGON((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))" ); } static void test_wkt_out_multipoint(void) { CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINT(1 2 3 4,5 6 7 8)",WKT_ISO), "MULTIPOINT ZM (1 2 3 4,5 6 7 8)"); CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINT(1 2 3,5 6 7)",WKT_ISO), "MULTIPOINT Z (1 2 3,5 6 7)"); CU_ASSERT_STRING_EQUAL(cu_wkt("MULTIPOINTM(1 2 3,5 6 7)",WKT_ISO), "MULTIPOINT M (1 2 3,5 6 7)"); } static void test_wkt_out_multilinestring(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("MULTILINESTRING((1 2 3 4,5 6 7 8))",WKT_ISO), "MULTILINESTRING ZM ((1 2 3 4,5 6 7 8))" ); CU_ASSERT_STRING_EQUAL( cu_wkt("MULTILINESTRING((1 2 3,5 6 7))",WKT_ISO), "MULTILINESTRING Z ((1 2 3,5 6 7))" ); CU_ASSERT_STRING_EQUAL( cu_wkt("MULTILINESTRINGM((1 2 3,5 6 7))",WKT_ISO), "MULTILINESTRING M ((1 2 3,5 6 7))" ); } static void test_wkt_out_multipolygon(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)))",WKT_ISO), "MULTIPOLYGON Z (((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)))" ); CU_ASSERT_STRING_EQUAL( cu_wkt("MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)))",WKT_EXTENDED), "MULTIPOLYGON(((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)))" ); } static void test_wkt_out_collection(void) { //printf("%s\n",cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO)); CU_ASSERT_STRING_EQUAL( cu_wkt("GEOMETRYCOLLECTION(POLYGON((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2)),POINT(.5 .5 .5),CIRCULARSTRING(.8 .8 .8,.8 .8 .8,.8 .8 .8))",WKT_ISO), "GEOMETRYCOLLECTION Z (POLYGON Z ((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2)),POINT Z (0.5 0.5 0.5),CIRCULARSTRING Z (0.8 0.8 0.8,0.8 0.8 0.8,0.8 0.8 0.8))" ); CU_ASSERT_STRING_EQUAL( cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO), "GEOMETRYCOLLECTION Z (MULTIPOLYGON Z (((100 100 2,100 200 2,200 200 2,200 100 2,100 100 2))),MULTIPOINT Z (0.5 0.5 0.5,1 1 1),CURVEPOLYGON Z ((0.8 0.8 0.8,0.8 0.8 0.8,0.8 0.8 0.8)))" ); /* See http://trac.osgeo.org/postgis/ticket/724 */ CU_ASSERT_STRING_EQUAL( cu_wkt("GEOMETRYCOLLECTIONM(MULTIPOINTM(0 0 0), POINTM(1 1 1))", WKT_EXTENDED), "GEOMETRYCOLLECTIONM(MULTIPOINTM(0 0 0),POINTM(1 1 1))" ); } static void test_wkt_out_circularstring(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)",WKT_ISO), "CIRCULARSTRING ZM (1 2 3 4,4 5 6 7,7 8 9 0)" ); CU_ASSERT_STRING_EQUAL( cu_wkt("CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)",WKT_EXTENDED), "CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0)" ); //printf("%s\n",cu_wkt("GEOMETRYCOLLECTION(MULTIPOLYGON(((100 100 2, 100 200 2, 200 200 2, 200 100 2, 100 100 2))),MULTIPOINT(.5 .5 .5,1 1 1),CURVEPOLYGON((.8 .8 .8,.8 .8 .8,.8 .8 .8)))",WKT_ISO)); } static void test_wkt_out_compoundcurve(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("COMPOUNDCURVE((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(7 8 9 0,4 3 2 1,1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), "COMPOUNDCURVE ZM ((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (7 8 9 0,4 3 2 1,1 2 3 4,4 5 6 7,7 8 9 0))" ); } static void test_wkt_out_curvpolygon(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("CURVEPOLYGON((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(7 8 9 0,1 2 1 1,1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), "CURVEPOLYGON ZM ((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (7 8 9 0,1 2 1 1,1 2 3 4,4 5 6 7,7 8 9 0))" ); } static void test_wkt_out_multicurve(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("MULTICURVE((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), "MULTICURVE ZM ((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (1 2 3 4,4 5 6 7,7 8 9 0))" ); CU_ASSERT_STRING_EQUAL( cu_wkt("MULTICURVE(COMPOUNDCURVE((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(7 8 9 0,8 9 0 0,1 2 3 4,4 5 6 7,7 8 9 0)),(1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING(1 2 3 4,4 5 6 7,7 8 9 0))",WKT_ISO), "MULTICURVE ZM (COMPOUNDCURVE ZM ((1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (7 8 9 0,8 9 0 0,1 2 3 4,4 5 6 7,7 8 9 0)),(1 2 3 4,4 5 6 7,7 8 9 0),CIRCULARSTRING ZM (1 2 3 4,4 5 6 7,7 8 9 0))" ); } static void test_wkt_out_multisurface(void) { CU_ASSERT_STRING_EQUAL( cu_wkt("MULTISURFACE(((1 2 3 4,4 5 6 7,7 8 9 0)),CURVEPOLYGON((1 2 3 4,4 5 6 7,7 8 9 0)))",WKT_ISO), "MULTISURFACE ZM (((1 2 3 4,4 5 6 7,7 8 9 0)),CURVEPOLYGON ZM ((1 2 3 4,4 5 6 7,7 8 9 0)))" ); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo wkt_out_tests[] = { PG_TEST(test_wkt_out_point), PG_TEST(test_wkt_out_linestring), PG_TEST(test_wkt_out_polygon), PG_TEST(test_wkt_out_multipoint), PG_TEST(test_wkt_out_multilinestring), PG_TEST(test_wkt_out_multipolygon), PG_TEST(test_wkt_out_collection), PG_TEST(test_wkt_out_circularstring), PG_TEST(test_wkt_out_compoundcurve), PG_TEST(test_wkt_out_curvpolygon), PG_TEST(test_wkt_out_multicurve), PG_TEST(test_wkt_out_multisurface), CU_TEST_INFO_NULL }; CU_SuiteInfo wkt_out_suite = {"WKT Out Suite", init_wkt_out_suite, clean_wkt_out_suite, wkt_out_tests}; ����������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_tree.c���������������������������������������������������0000644�0000000�0000000�00000067420�12314237614�020471� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2011 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "lwgeodetic.h" #include "lwgeodetic_tree.h" #include "cu_tester.h" static void test_tree_circ_create(void) { LWLINE *g; CIRC_NODE *c; /* Line with 4 edges */ g = lwgeom_as_lwline(lwgeom_from_wkt("LINESTRING(0 88,0 89,0 90,180 89,180 88)", LW_PARSER_CHECK_NONE)); c = circ_tree_new(g->points); //circ_tree_print(c, 0); if ( CIRC_NODE_SIZE > 4 ) { CU_ASSERT(c->num_nodes == 4); } else { CU_ASSERT(c->num_nodes == ( 4 % CIRC_NODE_SIZE ? 1 : 0 ) + 4 / CIRC_NODE_SIZE); } circ_tree_free(c); lwline_free(g); } static void test_tree_circ_pip(void) { LWLINE *g; CIRC_NODE *c; POINT2D pt, pt_outside; int rv, on_boundary; pt.x = 0.0; pt.y = 0.0; pt_outside.x = -2.0; pt_outside.y = 0.0; /* Point in square */ g = lwgeom_as_lwline(lwgeom_from_wkt("LINESTRING(-1 -1,1 -1,1 1,-1 1,-1 -1)", LW_PARSER_CHECK_NONE)); c = circ_tree_new(g->points); rv = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); CU_ASSERT_EQUAL(rv, 1); /* Point on other side of square */ pt.x = 2.0; pt.y = 0.0; rv = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); CU_ASSERT_EQUAL(rv, 0); /* Clean and do new shape */ circ_tree_free(c); lwline_free(g); /* Point in square, stab passing through vertex */ pt.x = 0.0; pt.y = 0.0; g = lwgeom_as_lwline(lwgeom_from_wkt("LINESTRING(-1 -1,0 -1,1 -1,1 0,1 1,0 1,-1 1,-1 0,-1 -1)", LW_PARSER_CHECK_NONE)); c = circ_tree_new(g->points); //circ_tree_print(c, 0); rv = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); CU_ASSERT_EQUAL(rv, 1); /* Point on other side of square, stab passing through vertex */ pt.x = 2.0; pt.y = 0.0; rv = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); CU_ASSERT_EQUAL(rv, 0); /* Clean and do new shape */ circ_tree_free(c); lwline_free(g); /* Point outside "w" thing, stab passing through vertexes and grazing pointy thing */ pt.x = 2.0; pt.y = 0.0; g = lwgeom_as_lwline(lwgeom_from_wkt("LINESTRING(-1 -1,0 -1,1 -1,1 0,1 1,0 0,-1 1,-1 0,-1 -1)", LW_PARSER_CHECK_NONE)); c = circ_tree_new(g->points); //circ_tree_print(c, 0); rv = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); //printf("rv %d\n", rv); CU_ASSERT_EQUAL(rv, 0); /* Point inside "w" thing, stab passing through vertexes and grazing pointy thing */ pt.x = 0.8; pt.y = 0.0; rv = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); //printf("rv %d\n", rv); CU_ASSERT_EQUAL(rv, 1); /* Clean and do new shape */ circ_tree_free(c); lwline_free(g); } static void test_tree_circ_pip2(void) { LWGEOM* g; LWPOLY* p; LWPOINT* lwpt; int rv_classic, rv_tree, on_boundary; POINT2D pt, pt_outside; GBOX gbox; CIRC_NODE *c; g = lwgeom_from_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", LW_PARSER_CHECK_NONE); p = lwgeom_as_lwpoly(g); pt.x = 0.2; pt.y = 0.1; lwgeom_calculate_gbox_geodetic(g, &gbox); gbox_pt_outside(&gbox, &pt_outside); c = circ_tree_new(p->rings[0]); //circ_tree_print(c, 0); rv_classic = lwpoly_covers_point2d(p, &pt); rv_tree = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); CU_ASSERT_EQUAL(rv_tree, rv_classic); circ_tree_free(c); lwgeom_free(g); g = lwgeom_from_hexwkb("0103000020E6100000010000004700000000000000621119C000000040C70C4B40000000E0CC6C18C0000000A026FF4A4000000040438519C000000000E8F44A40000000000F5318C00000004024C84A4000000060F9E518C0000000A027AD4A40000000805E0D18C0000000C0F5784A4000000040539718C000000080815E4A40000000C026FE19C0000000C0502D4A4000000060127019C000000040EA164A40000000003BFD1BC0000000609E234A4000000080D9011CC000000060B9114A4000000040C8501EC0000000C0D50C4A40000000C05F2C20C000000040C9E749400000006008D820C000000080D6F0494000000080139F20C000000060F3DE4940000000A0B16421C0000000C059C94940000000808FA223C0000000C007B949400000000041E722C000000080C3DC4940000000808F4224C0000000405DCE494000000060752923C000000040A9EF4940000000005CAD24C0000000C036E4494000000040F88624C00000008078FE494000000060558523C00000006025134A40000000403AED24C00000000011174A40000000A05E7D23C0000000E0A41F4A4000000040F0AD23C0000000809A304A4000000040A64E23C000000040C9474A40000000C0FCA221C0000000C030554A40000000805EDD23C0000000E010474A4000000040BFF822C00000008078664A4000000080C98F22C000000040E2914A40000000C036E021C00000002024924A4000000080D9E121C000000000D0A14A4000000040533723C000000040B99D4A40000000204B1E23C0000000C0CCB04A4000000000625A24C0000000A071B44A40000000004A5F24C0000000806FC64A40000000E0DD6523C00000006088CC4A400000004012D023C0000000001AE14A40000000806E1F23C0000000400BEE4A40000000E0A2E123C0000000C017EF4A4000000060449423C00000004003F94A40000000C0DC0624C0000000A0ED1B4B40000000A0803F24C0000000005D0C4B4000000040753924C000000080701D4B400000002021F320C00000000001234B4000000000C65221C000000080792D4B40000000406D6020C0000000001A514B4000000040BF9821C0000000A00E594B400000000031B520C0000000C0726B4B400000002019EA20C000000020977F4B400000000002ED1FC0000000E0B49B4B400000000084CC1EC0000000602D8C4B4000000020BB2A1FC000000060239B4B4000000040AE871EC0000000A0FDA14B400000008077771EC0000000C0E5864B40000000C0AABA1EC000000000B7794B40000000C03EC91DC0000000E020874B4000000000A4301EC0000000C0C49B4B4000000000B5811DC0000000A0A3B04B400000004095BD1BC000000020869E4B400000004091021DC00000004009894B40000000409D361EC000000080A2614B40000000809FB41FC0000000A0AB594B40000000C046021FC0000000C0164C4B40000000C0EC5020C0000000E05A384B4000000040DF3C1EC0000000803F104B4000000000B4221DC0000000C0CD0F4B40000000C0261E1CC00000006067354B4000000080E17A1AC000000080C3044B4000000000621119C000000040C70C4B40", LW_PARSER_CHECK_NONE); p = lwgeom_as_lwpoly(g); lwpt = (LWPOINT*)lwgeom_from_hexwkb("0101000020E610000057B89C28FEB320C09C8102CB3B2B4A40", LW_PARSER_CHECK_NONE); lwpoint_getPoint2d_p(lwpt, &pt); lwgeom_calculate_gbox_geodetic(g, &gbox); gbox_pt_outside(&gbox, &pt_outside); //printf("OUTSIDE POINT(%g %g)\n", pt_outside.x, pt_outside.y); c = circ_tree_new(p->rings[0]); rv_classic = lwpoly_covers_point2d(p, &pt); rv_tree = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); CU_ASSERT_EQUAL(rv_tree, rv_classic); circ_tree_free(c); lwpoint_free(lwpt); lwgeom_free(g); g = lwgeom_from_hexwkb("0103000020E610000001000000CF0100000000000000004EC03943F5FFFF7F56400000000000003E403943F5FFFF7F56400000000000003E401842CEFBFF7F56400000000000003E402F849CF7FF7F56400000000000003E4047C66AF3FF7F56400000000000003E405F0839EFFF7F56400000000000003E40774A07EBFF7F56400000000000003E408F8CD5E6FF7F56400000000000003E40A6CEA3E2FF7F56400000000000003E40D65240DAFF7F56400000000000003E4006D7DCD1FF7F56400000000000003E40355B79C9FF7F56400000000000003E407D21E4BCFF7F56400000000000003E40DC291DACFF7F56400000000000003E403B32569BFF7F56400000000000003E40CABE2B82FF7F56400000000000003E40594B0169FF7F56400000000000003E40309E4143FF7F56400000000000003E401E335019FF7F56400000000000003E403C4CFBE6FE7F56400000000000003E40B96DDFA3FE7F56400000000000003E407E552E54FE7F56400000000000003E40A245B6F3FD7F56400000000000003E403D80457EFD7F56400000000000003E407E8978EBFC7F56400000000000003E407FA31D37FC7F56400000000000003E405510035DFB7F56400000000000003E404A969350FA7F56400000000000003E40BC3D0801F97F56400000000000003E40C3482F6AF77F56400000000000003E40D5011077F57F56400000000000003E406CB3B112F37F56400000000000003E402C2CB81FF07F56400000000000003E40A4F8F884EC7F56400000000000003E40C5AD8218E87F56400000000000003E40C1A6CEA3E27F56400000000000003E40A1BAB9F8DB7F56400000000000003E40401361C3D37F56400000000000003E40639813B4C97F56400000000000003E408D429259BD7F56400000000000003E40B854A52DAE7F56400000000000003E406F9EEA909B7F56400000000000003E403FC6DCB5847F56400000000000003E408FC536A9687F56400000000000003E402975C938467F56400000000000003E403F8D7BF31B7F56400000000000003E40F4311F10E87E56400000000000003E40C1FBAA5CA87E56400000000000003E40D2FF722D5A7E56400000000000003E4009A7052FFA7D56400000000000003E403332C85D847D56400000000000003E40B35F77BAF37C56400000000000003E40253ACB2C427C56400000000000003E40FA7B293C687B56400000000000003E407D3D5FB35C7A56400000000000003E40E3A25A44147956400000000000003E40A0504F1F817756400000000000003E4062855B3E927556400000000000003E40B62BF4C1327356400000000000003E40280D350A497056400000000000003E4061DC0DA2B56C56400000000000003E40B81E85EB516856400000000000003E403237DF88EE6256400000000000003E4041EE224C515C56400000000000003E409EE925C6325456400000000000003E400B2593533B4A56400000000000003E4089CF9D60FF3D56400000000000003E40F04A92E7FA2E56400000000000003E40AC3594DA8B1C56400000000000003E40C9022670EB0556400000000000003E4069A510C825EA55400000000000003E4033DC80CF0FC855400000000000003E40FF907EFB3A9E55400000000000003E404203B16CE66A55400000000000003E40DA39CD02ED2B55400000000000003E4070404B57B0DE54400000000000003E4000000000008054403333333333B33D4000000000008054406666666666663D4000000000008054409999999999193D400000000000805440CCCCCCCCCCCC3C4000000000008054400000000000803C4000000000008054403333333333333C4000000000008054406666666666E63B4000000000008054409999999999993B400000000000805440CCCCCCCCCC4C3B4000000000008054400000000000003B4000000000008054403333333333B33A4000000000008054406666666666663A4000000000008054409999999999193A400000000000805440CCCCCCCCCCCC3940000000000080544000000000008039400000000000805440333333333333394000000000008054406666666666E63840000000000080544099999999999938400000000000805440CCCCCCCCCC4C38400000000000805440000000000000384000000000008054403333333333B3374000000000008054406666666666663740000000000080544099999999991937400000000000805440CDCCCCCCCCCC3640000000000080544000000000008036400000000000805440333333333333364000000000008054406666666666E63540000000000080544099999999999935400000000000805440CDCCCCCCCC4C35400000000000805440000000000000354000000000008054403333333333B3344000000000008054406666666666663440000000000080544099999999991934400000000000805440CDCCCCCCCCCC3340000000000080544000000000008033400000000000805440333333333333334000000000008054406666666666E63240000000000080544099999999999932400000000000805440CDCCCCCCCC4C32400000000000805440000000000000324000000000008054403333333333B3314000000000008054406666666666663140000000000080544099999999991931400000000000805440CDCCCCCCCCCC304000000000008054400000000000803040000000000080544033333333333330400000000000805440CCCCCCCCCCCC2F4000000000008054403333333333332F4000000000008054409999999999992E4000000000008054400000000000002E4000000000008054406666666666662D400000000000805440CCCCCCCCCCCC2C4000000000008054403333333333332C4000000000008054409999999999992B4000000000008054400000000000002B4000000000008054406666666666662A400000000000805440CCCCCCCCCCCC2940000000000080544033333333333329400000000000805440999999999999284000000000008054400000000000002840000000000080544066666666666627400000000000805440CDCCCCCCCCCC2640000000000080544033333333333326400000000000805440999999999999254000000000008054400000000000002540000000000080544066666666666624400000000000805440CDCCCCCCCCCC2340000000000080544033333333333323400000000000805440999999999999224000000000008054400000000000002240000000000080544066666666666621400000000000805440CDCCCCCCCCCC20400000000000805440333333333333204000000000008054403333333333331F4000000000008054400000000000001E400000000000805440CCCCCCCCCCCC1C4000000000008054409999999999991B4000000000008054406666666666661A4000000000008054403333333333331940000000000080544000000000000018400000000000805440CDCCCCCCCCCC1640000000000080544099999999999915400000000000805440666666666666144000000000008054403333333333331340000000000080544000000000000012400000000000805440CDCCCCCCCCCC104000000000008054403333333333330F400000000000805440CCCCCCCCCCCC0C4000000000008054406666666666660A400000000000805440000000000000084000000000008054409999999999990540000000000080544033333333333303400000000000805440CDCCCCCCCCCC00400000000000805440CCCCCCCCCCCCFC3F0000000000805440000000000000F83F0000000000805440333333333333F33F0000000000805440CCCCCCCCCCCCEC3F0000000000805440333333333333E33F0000000000805440333333333333D33F00000000008054400000000000000000000000000080544000000000000000002174D0251C7C54400000000000000000F96871C6307854400000000000000000E6E61BD13D745440000000000000000019726C3D437054400000000000000000F0129CFA406C54400000000000000000CCD1E3F7366854400000000000000000F374AE28256454400000000000000000ACC266800B6054400000000000000000700514EAE95B544000000000000000006EC1525DC057544000000000000000001C412AC58E5354400000000000000000AB083719554F5440000000000000000091628044134B544000000000000000001615713AC94654400000000000000000992842EA7642544000000000000000007AA52C431C3E5440000000000000000000529B38B939544000000000000000008B36C7B94D3554400000000000000000795BE9B5D9305440000000000000000029C93A1C5D2C54400000000000000000E54526E0D72754400000000000000000211CB3EC49235440000000000000000027124C35B31E5440000000000000000055302AA9131A544000000000000000000A7F86376B1554400000000000000000BE4868CBB91054400000000000000000A1116C5CFF0B54400000000000000000406667D13B0754400000000000000000E50CC51D6F0254400000000000000000ED0DBE3099FD53400000000000000000D0B359F5B9F853400000000000000000D6C4025FD1F353400000000000000000768BC058DFEE534000000000000000000E10CCD1E3E953400000000000000000FF5A5EB9DEE453400000000000000000A774B0FECFDF534000000000000000006665FB90B7DA53400000000000000000CBB9145795D55340000000000000000005F6984869D053400000000000000000BCE82B4833CB534000000000000000001E166A4DF3C553400000000000000000A3C85A43A9C053400000000000000000DA8CD31055BB53400000000000000000F3E670ADF6B5534000000000000000007C6308008EB053400000000000000000EC4CA1F31AAB534000000000000000008B69A67B9DA553400000000000000000E945ED7E15A0534000000000000000004CA8E0F0829A53400000000000000000431D56B8E5945340000000000000000045EF54C03D8F534000000000000000009BE447FC8A8953400000000000000000D2890453CD83534000000000000000004BE7C3B3047E5340000000000000000093895B053178534000000000000000000B79043752725340000000000000000012BEF737686C5340000000000000000036E50AEF726653400000000000000000EF3845477260534000000000000000009CC1DF2F665A53400000000000000000CC0BB08F4E5453400000000000000000DE1FEF552B4E53400000000000000000618A7269FC4753400000000000000000B45373B9C141534000000000000000006708C72C7B3B53400000000000000000D9B0A6B228355340000000000000000098D9E731CA2E53400000000000000000340F60915F2853400000000000000000F4177AC4E821534000000000000000007EC2D9AD651B534000000000000000003317B83CD61453400000000000000000A0A2EA573A0E5340000000000000000056F146E6910753400000000000000000B20B06D7DC0053400000000000000000457EFD101BFA524000000000000000008593347F4CF352400000000000000000191A4F0471EC5240000000000000000049D8B79388E552400000000000000000BA9C121093DE52400000000000000000E6B1666490D75240000000000000000059A4897780D0524000000000000000008CBE823463C9524000000000000000000D8D278238C2524000000000000000006B9C4D4700BB524000000000000000001D37FC6EBAB352400000000000000000B3E908E066AC52400000000000000000A4FE7A8505A5524000000000000000009544F641969D52400000000000000000FF05820019965240000000000000000070CFF3A78D8E52400000000000000000772D211FF486524000000000000000008B6A11514C7F52400000000000000000545568209677524000000000000000005F7AFB73D16F524000000000000000002424D236FE675240000000000000000033DFC14F1C6052400000000000000000317A6EA12B5852400000000000000000963FDF162C505240000000000000000008FEB7921D48524000000000000000000000000000405240999999999999C9BF0000000000405240999999999999D9BF0000000000405240333333333333E3BF0000000000405240999999999999E9BF0000000000405240000000000000F0BF0000000000405240333333333333F3BF0000000000405240666666666666F6BF0000000000405240999999999999F9BF0000000000405240CCCCCCCCCCCCFCBF000000000040524000000000000000C0000000000040524099999999999901C0000000000040524033333333333303C00000000000405240CDCCCCCCCCCC04C0000000000040524066666666666606C0000000000040524000000000000008C0000000000040524099999999999909C000000000004052403333333333330BC00000000000405240CCCCCCCCCCCC0CC000000000004052406666666666660EC0000000000040524000000000000010C00000000000405240CDCCCCCCCCCC10C0000000000040524099999999999911C0000000000040524066666666666612C0000000000040524033333333333313C0000000000040524000000000000014C00000000000405240CDCCCCCCCCCC14C0000000000040524099999999999915C0000000000040524066666666666616C0000000000040524033333333333317C0000000000040524000000000000018C00000000000405240CCCCCCCCCCCC18C0000000000040524099999999999919C000000000004052406666666666661AC000000000004052403333333333331BC000000000004052400000000000001CC00000000000405240CCCCCCCCCCCC1CC000000000004052409999999999991DC000000000004052406666666666661EC000000000004052403333333333331FC0000000000040524000000000000020C0000000000040524066666666666620C00000000000405240CDCCCCCCCCCC20C0000000000040524033333333333321C0000000000040524099999999999921C0000000000040524000000000000022C0000000000040524066666666666622C00000000000405240CDCCCCCCCCCC22C0000000000040524033333333333323C0000000000040524099999999999923C0000000000040524000000000000024C0000000000040524066666666666624C00000000000405240CDCCCCCCCCCC24C0000000000040524033333333333325C0000000000040524099999999999925C0000000000040524000000000000026C0000000000040524066666666666626C00000000000405240CDCCCCCCCCCC26C0000000000040524033333333333327C0000000000040524099999999999927C0000000000040524000000000000028C0000000000040524066666666666628C00000000000405240CCCCCCCCCCCC28C0000000000040524033333333333329C0000000000040524099999999999929C000000000004052400000000000002AC000000000004052406666666666662AC00000000000405240CCCCCCCCCCCC2AC000000000004052403333333333332BC000000000004052409999999999992BC000000000004052400000000000002CC000000000004052406666666666662CC00000000000405240CCCCCCCCCCCC2CC000000000004052403333333333332DC000000000004052409999999999992DC000000000004052400000000000002EC000000000004052406666666666662EC00000000000405240CCCCCCCCCCCC2EC000000000004052403333333333332FC000000000004052409999999999992FC0000000000040524000000000000030C0000000000040524033333333333330C0000000000040524066666666666630C0000000000040524099999999999930C00000000000405240CDCCCCCCCCCC30C0000000000040524000000000000031C0000000000040524033333333333331C0000000000040524066666666666631C0000000000040524099999999999931C00000000000405240CDCCCCCCCCCC31C0000000000040524000000000000032C0000000000040524033333333333332C0000000000040524066666666666632C0000000000040524099999999999932C00000000000405240CDCCCCCCCCCC32C0000000000040524000000000000033C0000000000040524033333333333333C0000000000040524066666666666633C0000000000040524099999999999933C00000000000405240CDCCCCCCCCCC33C0000000000040524000000000000034C0000000000040524000000000000034C0000000000080514000000000008043C00000000000C04F4000000000008045C00000000000404D4030116F9D7F8B45C00000000000404D408FA67A32FF9645C00000000000404D40BFB7E9CF7EA245C00000000000404D401E4DF564FEAD45C00000000000404D404E5E64027EB945C00000000000404D40AEF36F97FDC445C00000000000404D40DD04DF347DD045C00000000000404D403D9AEAC9FCDB45C00000000000404D406DAB59677CE745C00000000000404D40CC4065FCFBF245C00000000000404D40FC51D4997BFE45C00000000000404D405BE7DF2EFB0946C00000000000404D408BF84ECC7A1546C00000000000404D40EB8D5A61FA2046C00000000000404D401B9FC9FE792C46C00000000000404D407A34D593F93746C00000000000404D40AA454431794346C00000000000404D40DA56B3CEF84E46C00000000000404D4039ECBE63785A46C00000000000404D4069FD2D01F86546C00000000000404D40C8923996777146C00000000000404D40F8A3A833F77C46C00000000000404D405839B4C8768846C00000000000404D40884A2366F69346C00000000000404D40E7DF2EFB759F46C00000000000404D4017F19D98F5AA46C00000000000404D407686A92D75B646C00000000000404D40A69718CBF4C146C00000000000404D40062D246074CD46C00000000000404D40353E93FDF3D846C00000000000404D4095D39E9273E446C00000000000404D40C5E40D30F3EF46C00000000000404D40247A19C572FB46C00000000000404D40548B8862F20647C00000000000404D40B42094F7711247C00000000000404D40E3310395F11D47C00000000000404D4013437232712947C00000000000404D4073D87DC7F03447C00000000000404D40A2E9EC64704047C00000000000404D40027FF8F9EF4B47C00000000000404D40329067976F5747C00000000000404D409125732CEF6247C00000000000404D40C136E2C96E6E47C00000000000404D4021CCED5EEE7947C00000000000404D4050DD5CFC6D8547C00000000000404D40B0726891ED9047C00000000000404D40E083D72E6D9C47C00000000000404D403F19E3C3ECA747C00000000000404D406F2A52616CB347C00000000000404D40CEBF5DF6EBBE47C00000000000404D40FED0CC936BCA47C00000000000404D405E66D828EBD547C00000000000404D408E7747C66AE147C00000000000404D40BD88B663EAEC47C00000000000404D401D1EC2F869F847C00000000000404D404D2F3196E90348C00000000000404D40ACC43C2B690F48C00000000000404D40DCD5ABC8E81A48C00000000000404D403B6BB75D682648C00000000000404D406B7C26FBE73148C00000000000404D40CB113290673D48C00000000000404D40FB22A12DE74848C00000000000404D405AB8ACC2665448C00000000000404D408AC91B60E65F48C00000000000404D40E95E27F5656B48C00000000000404D4019709692E57648C00000000000404D407905A227658248C00000000000404D40A81611C5E48D48C00000000000404D4008AC1C5A649948C00000000000404D4038BD8BF7E3A448C00000000000404D4068CEFA9463B048C00000000000404D40C763062AE3BB48C00000000000404D40F77475C762C748C00000000000404D40560A815CE2D248C00000000000404D40861BF0F961DE48C00000000000404D40E6B0FB8EE1E948C00000000000404D4015C26A2C61F548C00000000000404D4000000000000049C00000000000404D400000000000E04CC0000000000040504000000000000053C000000000000053400000000000C052C000000000008053400000000000004EC000000000008054400000000000004EC03943F5FFFF7F5640", LW_PARSER_CHECK_NONE); p = lwgeom_as_lwpoly(g); lwpt = (LWPOINT*)lwgeom_from_hexwkb("0101000020E610000031B1F9B836A046C03C889D2974124E40", LW_PARSER_CHECK_NONE); lwpoint_getPoint2d_p(lwpt, &pt); lwgeom_calculate_gbox_geodetic(g, &gbox); gbox_pt_outside(&gbox, &pt_outside); //printf("OUTSIDE POINT(%g %g)\n", pt_outside.x, pt_outside.y); c = circ_tree_new(p->rings[0]); rv_classic = lwpoly_covers_point2d(p, &pt); rv_tree = circ_tree_contains_point(c, &pt, &pt_outside, &on_boundary); CU_ASSERT_EQUAL(rv_tree, rv_classic); circ_tree_free(c); lwpoint_free(lwpt); lwgeom_free(g); } static void test_tree_circ_distance(void) { LWGEOM *lwg1, *lwg2; CIRC_NODE *c1, *c2; SPHEROID s; double d1, d2; double threshold = 0.0; spheroid_init(&s, 1.0, 1.0); /* Ticket #1958 */ lwg1 = lwgeom_from_wkt("LINESTRING(22.88333 41.96667,21.32667 42.13667)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POLYGON((22.94472 41.34667,22.87528 41.99028,22.87389 41.98472,22.87472 41.98333,22.94472 41.34667))", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); // printf("d1 = %g d2 = %g\n", d1 * WGS84_RADIUS, d2 * WGS84_RADIUS); // printf("line\n"); // circ_tree_print(c1, 0); // printf("poly\n"); // circ_tree_print(c2, 0); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.0000001); /* Ticket #1951 */ lwg1 = lwgeom_from_wkt("LINESTRING(0 0, 0 0)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(0.1 0.1)", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.00001); lwg1 = lwgeom_from_wkt("LINESTRING(-1 -1,0 -1,1 -1,1 0,1 1,0 0,-1 1,-1 0,-1 -1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(-2 0)", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.00001); lwg1 = lwgeom_from_wkt("LINESTRING(-1 -1,0 -1,1 -1,1 0,1 1,0 0,-1 1,-1 0,-1 -1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(2 2)", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.00001); lwg1 = lwgeom_from_wkt("LINESTRING(-1 -1,0 -1,1 -1,1 0,1 1,0 0,-1 1,-1 0,-1 -1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(1 1)", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.00001); lwg1 = lwgeom_from_wkt("LINESTRING(-1 -1,0 -1,1 -1,1 0,1 1,0 0,-1 1,-1 0,-1 -1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(1 0.5)", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); // printf("distance_tree %g\n", distance_tree); // printf("distance_geom %g\n", distance_geom); // circ_tree_print(cline, 0); // circ_tree_print(cpoint, 0); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.00001); /* Ticket #2351 */ lwg1 = lwgeom_from_wkt("LINESTRING(149.386990599235 -26.3567415843982,149.386990599247 -26.3567415843965)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(149.386990599235 -26.3567415843982)", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); // printf("d1 = %g d2 = %g\n", d1 * WGS84_RADIUS, d2 * WGS84_RADIUS); // printf("line\n"); // circ_tree_print(c1, 0); // printf("point\n"); // circ_tree_print(c2, 0); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.0000001); /* Ticket #2634 */ lwg1 = lwgeom_from_wkt("MULTIPOINT (-10 40,-10 65,10 40,10 65,30 40,30 65,50 40,50 65)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POLYGON((-9.1111111 40,-9.14954053919354 39.6098193559677,-9.26335203497743 39.2346331352698,-9.4481718753949138.8888595339608,-9.6968975376269 38.5857864376269,-9.99997063396079 38.3370607753949,-10.3457442352698 38.1522409349774,-10.7209304559677 38.0384294391935,-11.1111111 38,-11.5012917440323 38.0384294391935,-11.8764779647302 38.1522409349774,-12.2222515660392 38.3370607753949,-12.5253246623731 38.5857864376269,-12.7740503246051 38.8888595339608,-12.9588701650226 39.2346331352698,-13.0726816608065 39.6098193559677,-13.1111111 40,-13.0726816608065 40.3901806440322,-12.9588701650226 40.7653668647302,-12.7740503246051 41.1111404660392,-12.5253246623731 41.4142135623731,-12.2222515660392 41.6629392246051,-11.8764779647302 41.8477590650226,-11.5012917440323 41.9615705608065,-11.1111111 42,-10.7209304559678 41.9615705608065,-10.3457442352698 41.8477590650226,-9.9999706339608 41.6629392246051,-9.69689753762691 41.4142135623731,-9.44817187539491 41.1111404660392,-9.26335203497743 40.7653668647302,-9.14954053919354 40.3901806440323,-9.1111111 40))", LW_PARSER_CHECK_NONE); c1 = lwgeom_calculate_circ_tree(lwg1); c2 = lwgeom_calculate_circ_tree(lwg2); d1 = circ_tree_distance_tree(c1, c2, &s, threshold); d2 = lwgeom_distance_spheroid(lwg1, lwg2, &s, threshold); // printf("d1 = %g d2 = %g\n", d1 * WGS84_RADIUS, d2 * WGS84_RADIUS); // printf("multipoint\n"); // circ_tree_print(c1, 0); // printf("polygon\n"); // circ_tree_print(c2, 0); circ_tree_free(c1); circ_tree_free(c2); lwgeom_free(lwg1); lwgeom_free(lwg2); CU_ASSERT_DOUBLE_EQUAL(d1, d2, 0.0000001); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo tree_tests[] = { PG_TEST(test_tree_circ_create), PG_TEST(test_tree_circ_pip), PG_TEST(test_tree_circ_pip2), PG_TEST(test_tree_circ_distance), CU_TEST_INFO_NULL }; CU_SuiteInfo tree_suite = {"Internal Spatial Trees", NULL, NULL, tree_tests}; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_out_x3d.c������������������������������������������������0000644�0000000�0000000�00000011761�11722777314�021124� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_x3d.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://www.postgis.org * Copyright 2011 Regina Obe * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_x3d3_test(char * in, char * out, char * srs, int precision) { LWGEOM *g; char * h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_x3d3(g, srs, precision, 0, ""); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_x3d3_unsupported(char * in, char * out) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_x3d3(g, NULL, 0, 0, ""); if (strcmp(cu_error_msg, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, cu_error_msg, out); CU_ASSERT_STRING_EQUAL(out, cu_error_msg); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void out_x3d3_test_precision(void) { /* 0 precision, i.e a round */ do_x3d3_test( "POINT(1.1111111111111 1.1111111111111 2.11111111111111)", "1 1 2", NULL, 0); /* 3 digits precision */ do_x3d3_test( "POINT(1.1111111111111 1.1111111111111 2.11111111111111)", "1.111 1.111 2.111", NULL, 3); /* 9 digits precision */ do_x3d3_test( "POINT(1.2345678901234 1.2345678901234 4.123456789001)", "1.23456789 1.23456789 4.123456789", NULL, 9); /* huge data */ do_x3d3_test( "POINT(1E300 -105E-153 4E300)'", "1e+300 -0 4e+300", NULL, 0); } static void out_x3d3_test_geoms(void) { /* Linestring */ do_x3d3_test( "LINESTRING(0 1 5,2 3 6,4 5 7)", "<LineSet vertexCount='3'><Coordinate point='0 1 5 2 3 6 4 5 7' /></LineSet>", NULL, 0); /* Polygon **/ do_x3d3_test( "POLYGON((15 10 3,13.536 6.464 3,10 5 3,6.464 6.464 3,5 10 3,6.464 13.536 3,10 15 3,13.536 13.536 3,15 10 3))", "<IndexedFaceSet coordIndex='0 1 2 3 4 5 6 7'><Coordinate point='15 10 3 13.536 6.464 3 10 5 3 6.464 6.464 3 5 10 3 6.464 13.536 3 10 15 3 13.536 13.536 3 ' /></IndexedFaceSet>", NULL, 3); /* TODO: Polygon - with internal ring - the answer is clearly wrong */ /** do_x3d3_test( "POLYGON((0 1 3,2 3 3,4 5 3,0 1 3),(6 7 3,8 9 3,10 11 3,6 7 3))", "", NULL, 0); **/ /* 2D MultiPoint */ do_x3d3_test( "MULTIPOINT(0 1,2 3,4 5)", "<Polypoint2D point='0 1 2 3 4 5 ' />", NULL, 0); /* 3D MultiPoint */ do_x3d3_test( "MULTIPOINT Z(0 1 1,2 3 4,4 5 5)", "<PointSet ><Coordinate point='0 1 1 2 3 4 4 5 5 ' /></PointSet>", NULL, 0); /* 3D Multiline */ do_x3d3_test( "MULTILINESTRING Z((0 1 1,2 3 4,4 5 5),(6 7 5,8 9 8,10 11 5))", "<IndexedLineSet coordIndex='0 1 2 -1 3 4 5'><Coordinate point='0 1 1 2 3 4 4 5 5 6 7 5 8 9 8 10 11 5 ' /></IndexedLineSet>", NULL, 0); /* MultiPolygon */ do_x3d3_test( "MULTIPOLYGON(((0 1 1,2 3 1,4 5 1,0 1 1)),((6 7 1,8 9 1,10 11 1,6 7 1)))", "<IndexedFaceSet coordIndex='0 1 2 -1 3 4 5'><Coordinate point='0 1 1 2 3 1 4 5 1 6 7 1 8 9 1 10 11 1 ' /></IndexedFaceSet>", NULL, 0); /* PolyhedralSurface */ do_x3d3_test( "POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )", "<IndexedFaceSet coordIndex='0 1 2 3 -1 4 5 6 7 -1 8 9 10 11 -1 12 13 14 15 -1 16 17 18 19 -1 20 21 22 23'><Coordinate point='0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1' /></IndexedFaceSet>", NULL, 0); /* TODO: returns garbage at moment correctly implement GeometryCollection -- */ /** do_x3d3_test( "GEOMETRYCOLLECTION(POINT(0 1 3),LINESTRING(2 3 3,4 5 3))", "", NULL, 0); **/ /* TODO: Implement Empty GeometryCollection correctly or throw a not-implemented */ /** do_x3d3_test( "GEOMETRYCOLLECTION EMPTY", "", NULL, 0); **/ /* CircularString */ do_x3d3_unsupported( "CIRCULARSTRING(-2 0 1,0 2 1,2 0 1,0 2 1,2 4 1)", "lwgeom_to_x3d3: 'CircularString' geometry type not supported"); /* CompoundCurve */ do_x3d3_unsupported( "COMPOUNDCURVE(CIRCULARSTRING(0 0 1,1 1 1,1 0 1),(1 0 1,0 1 1))", "lwgeom_to_x3d3: 'CompoundCurve' geometry type not supported"); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo out_x3d_tests[] = { PG_TEST(out_x3d3_test_precision), PG_TEST(out_x3d3_test_geoms), CU_TEST_INFO_NULL }; CU_SuiteInfo out_x3d_suite = {"X3D Out Suite", NULL, NULL, out_x3d_tests}; ���������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_tester.c�������������������������������������������������0000644�0000000�0000000�00000016475�12142775451�021051� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_tester.c 11389 2013-05-09 19:38:17Z colivier $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" #include "../postgis_config.h" /* Internal funcs */ static void cu_errorreporter(const char *fmt, va_list ap); /* ADD YOUR SUITE HERE (1 of 2) */ extern CU_SuiteInfo print_suite; extern CU_SuiteInfo algorithms_suite; extern CU_SuiteInfo buildarea_suite; extern CU_SuiteInfo clean_suite; extern CU_SuiteInfo misc_suite; extern CU_SuiteInfo ptarray_suite; extern CU_SuiteInfo measures_suite; extern CU_SuiteInfo node_suite; extern CU_SuiteInfo wkt_out_suite; extern CU_SuiteInfo wkt_in_suite; extern CU_SuiteInfo wkb_out_suite; extern CU_SuiteInfo wkb_in_suite; extern CU_SuiteInfo libgeom_suite; extern CU_SuiteInfo split_suite; extern CU_SuiteInfo geodetic_suite; extern CU_SuiteInfo geos_suite; extern CU_SuiteInfo sfcgal_suite; extern CU_SuiteInfo tree_suite; extern CU_SuiteInfo triangulate_suite; extern CU_SuiteInfo homogenize_suite; extern CU_SuiteInfo force_sfs_suite; extern CU_SuiteInfo in_geojson_suite; extern CU_SuiteInfo stringbuffer_suite; extern CU_SuiteInfo surface_suite; extern CU_SuiteInfo out_gml_suite; extern CU_SuiteInfo out_kml_suite; extern CU_SuiteInfo out_geojson_suite; extern CU_SuiteInfo out_svg_suite; extern CU_SuiteInfo out_x3d_suite; /* ** The main() function for setting up and running the tests. ** Returns a CUE_SUCCESS on successful running, another ** CUnit error code on failure. */ int main(int argc, char *argv[]) { /* ADD YOUR SUITE HERE (2 of 2) */ CU_SuiteInfo suites[] = { print_suite, misc_suite, ptarray_suite, algorithms_suite, buildarea_suite, clean_suite, measures_suite, node_suite, wkt_out_suite, wkt_in_suite, wkb_out_suite, wkb_in_suite, libgeom_suite, split_suite, geodetic_suite, geos_suite, #if HAVE_SFCGAL sfcgal_suite, #endif tree_suite, triangulate_suite, stringbuffer_suite, surface_suite, homogenize_suite, force_sfs_suite, #if HAVE_JSON in_geojson_suite, #endif out_gml_suite, out_kml_suite, out_geojson_suite, out_svg_suite, out_x3d_suite, CU_SUITE_INFO_NULL }; int index; char *suite_name; CU_pSuite suite_to_run; char *test_name; CU_pTest test_to_run; CU_ErrorCode errCode = 0; CU_pTestRegistry registry; int num_run; int num_failed; /* install the custom error handler */ lwgeom_set_handlers(0, 0, 0, cu_errorreporter, 0); /* initialize the CUnit test registry */ if (CUE_SUCCESS != CU_initialize_registry()) { errCode = CU_get_error(); printf(" Error attempting to initialize registry: %d. See CUError.h for error code list.\n", errCode); return errCode; } /* Register all the test suites. */ if (CUE_SUCCESS != CU_register_suites(suites)) { errCode = CU_get_error(); printf(" Error attempting to register test suites: %d. See CUError.h for error code list.\n", errCode); return errCode; } /* Run all tests using the CUnit Basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); if (argc <= 1) { errCode = CU_basic_run_tests(); } else { /* NOTE: The cunit functions used here (CU_get_registry, CU_get_suite_by_name, and CU_get_test_by_name) are * listed with the following warning: "Internal CUnit system functions. Should not be routinely called by users." * However, there didn't seem to be any other way to get tests by name, so we're calling them. */ registry = CU_get_registry(); for (index = 1; index < argc; index++) { suite_name = argv[index]; test_name = NULL; suite_to_run = CU_get_suite_by_name(suite_name, registry); if (NULL == suite_to_run) { /* See if it's a test name instead of a suite name. */ suite_to_run = registry->pSuite; while (suite_to_run != NULL) { test_to_run = CU_get_test_by_name(suite_name, suite_to_run); if (test_to_run != NULL) { /* It was a test name. */ test_name = suite_name; suite_name = suite_to_run->pName; break; } suite_to_run = suite_to_run->pNext; } } if (suite_to_run == NULL) { printf("\n'%s' does not appear to be either a suite name or a test name.\n\n", suite_name); } else { if (test_name != NULL) { /* Run only this test. */ printf("\nRunning test '%s' in suite '%s'.\n", test_name, suite_name); /* This should be CU_basic_run_test, but that method is broken, see: * https://sourceforge.net/tracker/?func=detail&aid=2851925&group_id=32992&atid=407088 * This one doesn't output anything for success, so we have to do it manually. */ errCode = CU_run_test(suite_to_run, test_to_run); if (errCode != CUE_SUCCESS) { printf(" Error attempting to run tests: %d. See CUError.h for error code list.\n", errCode); } else { num_run = CU_get_number_of_asserts(); num_failed = CU_get_number_of_failures(); printf("\n %s - asserts - %3d passed, %3d failed, %3d total.\n\n", (0 == num_failed ? "PASSED" : "FAILED"), (num_run - num_failed), num_failed, num_run); } } else { /* Run all the tests in the suite. */ printf("\nRunning all tests in suite '%s'.\n", suite_name); /* This should be CU_basic_run_suite, but that method is broken, see: * https://sourceforge.net/tracker/?func=detail&aid=2851925&group_id=32992&atid=407088 * This one doesn't output anything for success, so we have to do it manually. */ errCode = CU_run_suite(suite_to_run); if (errCode != CUE_SUCCESS) { printf(" Error attempting to run tests: %d. See CUError.h for error code list.\n", errCode); } else { num_run = CU_get_number_of_tests_run(); num_failed = CU_get_number_of_tests_failed(); printf("\n %s - tests - %3d passed, %3d failed, %3d total.\n", (0 == num_failed ? "PASSED" : "FAILED"), (num_run - num_failed), num_failed, num_run); num_run = CU_get_number_of_asserts(); num_failed = CU_get_number_of_failures(); printf(" - asserts - %3d passed, %3d failed, %3d total.\n\n", (num_run - num_failed), num_failed, num_run); } } } } /* Presumably if the CU_basic_run_[test|suite] functions worked, we wouldn't have to do this. */ CU_basic_show_failures(CU_get_failure_list()); printf("\n\n"); /* basic_show_failures leaves off line breaks. */ } num_failed = CU_get_number_of_failures(); CU_cleanup_registry(); return num_failed; } /** * CUnit error handler * Log message in a global var instead of printing in stderr * * CAUTION: Not stop execution on lwerror case !!! */ static void cu_errorreporter(const char *fmt, va_list ap) { char *msg; /** This is a GNU extension. * Dunno how to handle errors here. */ if (!lw_vasprintf (&msg, fmt, ap)) { va_end (ap); return; } strncpy(cu_error_msg, msg, MAX_CUNIT_ERROR_LENGTH); lwfree(msg); } void cu_error_msg_reset() { memset(cu_error_msg, '\0', MAX_CUNIT_ERROR_LENGTH); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_libgeom.c������������������������������������������������0000644�0000000�0000000�00000067673�12200216706�021153� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_libgeom.c 11738 2013-08-06 16:01:10Z robe $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void test_typmod_macros(void) { int32_t typmod = 0; int srid = 4326; int type = 6; int z = 1; int rv; TYPMOD_SET_SRID(typmod,srid); rv = TYPMOD_GET_SRID(typmod); CU_ASSERT_EQUAL(rv, srid); srid = -5005; TYPMOD_SET_SRID(typmod,srid); rv = TYPMOD_GET_SRID(typmod); CU_ASSERT_EQUAL(rv, srid); srid = SRID_UNKNOWN; TYPMOD_SET_SRID(typmod,srid); rv = TYPMOD_GET_SRID(typmod); CU_ASSERT_EQUAL(rv, srid); srid = 0; TYPMOD_SET_SRID(typmod,srid); rv = TYPMOD_GET_SRID(typmod); CU_ASSERT_EQUAL(rv, srid); srid = 1; TYPMOD_SET_SRID(typmod,srid); rv = TYPMOD_GET_SRID(typmod); CU_ASSERT_EQUAL(rv, srid); TYPMOD_SET_TYPE(typmod,type); rv = TYPMOD_GET_TYPE(typmod); CU_ASSERT_EQUAL(rv,type); TYPMOD_SET_Z(typmod); rv = TYPMOD_GET_Z(typmod); CU_ASSERT_EQUAL(rv,z); rv = TYPMOD_GET_M(typmod); CU_ASSERT_EQUAL(rv,0); } static void test_flags_macros(void) { uint8_t flags = 0; CU_ASSERT_EQUAL(0, FLAGS_GET_Z(flags)); FLAGS_SET_Z(flags, 1); CU_ASSERT_EQUAL(1, FLAGS_GET_Z(flags)); FLAGS_SET_Z(flags, 0); CU_ASSERT_EQUAL(0, FLAGS_GET_Z(flags)); CU_ASSERT_EQUAL(0, FLAGS_GET_BBOX(flags)); CU_ASSERT_EQUAL(0, FLAGS_GET_M(flags)); FLAGS_SET_M(flags, 1); CU_ASSERT_EQUAL(1, FLAGS_GET_M(flags)); CU_ASSERT_EQUAL(0, FLAGS_GET_BBOX(flags)); FLAGS_SET_BBOX(flags, 1); CU_ASSERT_EQUAL(1, FLAGS_GET_BBOX(flags)); CU_ASSERT_EQUAL(0, FLAGS_GET_READONLY(flags)); FLAGS_SET_READONLY(flags, 1); CU_ASSERT_EQUAL(1, FLAGS_GET_READONLY(flags)); FLAGS_SET_READONLY(flags, 0); CU_ASSERT_EQUAL(0, FLAGS_GET_READONLY(flags)); CU_ASSERT_EQUAL(0, FLAGS_GET_GEODETIC(flags)); FLAGS_SET_GEODETIC(flags, 1); CU_ASSERT_EQUAL(1, FLAGS_GET_GEODETIC(flags)); flags = gflags(1, 0, 1); /* z=1, m=0, geodetic=1 */ CU_ASSERT_EQUAL(1, FLAGS_GET_GEODETIC(flags)); CU_ASSERT_EQUAL(1, FLAGS_GET_Z(flags)); CU_ASSERT_EQUAL(0, FLAGS_GET_M(flags)); CU_ASSERT_EQUAL(2, FLAGS_GET_ZM(flags)); flags = gflags(1, 1, 1); /* z=1, m=1, geodetic=1 */ CU_ASSERT_EQUAL(1, FLAGS_GET_GEODETIC(flags)); CU_ASSERT_EQUAL(1, FLAGS_GET_Z(flags)); CU_ASSERT_EQUAL(1, FLAGS_GET_M(flags)); CU_ASSERT_EQUAL(3, FLAGS_GET_ZM(flags)); flags = gflags(0, 1, 0); /* z=0, m=1, geodetic=0 */ CU_ASSERT_EQUAL(0, FLAGS_GET_GEODETIC(flags)); CU_ASSERT_EQUAL(0, FLAGS_GET_Z(flags)); CU_ASSERT_EQUAL(1, FLAGS_GET_M(flags)); CU_ASSERT_EQUAL(1, FLAGS_GET_ZM(flags)); } static void test_serialized_srid(void) { GSERIALIZED s; int32_t srid, rv; srid = 4326; gserialized_set_srid(&s, srid); rv = gserialized_get_srid(&s); CU_ASSERT_EQUAL(rv, srid); srid = -3005; gserialized_set_srid(&s, srid); rv = gserialized_get_srid(&s); //printf("srid=%d rv=%d\n",srid,rv); CU_ASSERT_EQUAL(rv, SRID_UNKNOWN); srid = SRID_UNKNOWN; gserialized_set_srid(&s, srid); rv = gserialized_get_srid(&s); CU_ASSERT_EQUAL(rv, srid); srid = SRID_UNKNOWN; gserialized_set_srid(&s, srid); rv = gserialized_get_srid(&s); CU_ASSERT_EQUAL(rv, srid); srid = 100000; gserialized_set_srid(&s, srid); rv = gserialized_get_srid(&s); CU_ASSERT_EQUAL(rv, srid); } static void test_gserialized_from_lwgeom_size(void) { LWGEOM *g; size_t size = 0; g = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE); size = gserialized_from_lwgeom_size(g); CU_ASSERT_EQUAL( size, 32 ); lwgeom_free(g); g = lwgeom_from_wkt("POINT(0 0 0)", LW_PARSER_CHECK_NONE); size = gserialized_from_lwgeom_size(g); CU_ASSERT_EQUAL( size, 40 ); lwgeom_free(g); g = lwgeom_from_wkt("MULTIPOINT(0 0 0, 1 1 1)", LW_PARSER_CHECK_NONE); size = gserialized_from_lwgeom_size(g); CU_ASSERT_EQUAL( size, 80 ); lwgeom_free(g); g = lwgeom_from_wkt("LINESTRING(0 0, 1 1)", LW_PARSER_CHECK_NONE); size = gserialized_from_lwgeom_size(g); CU_ASSERT_EQUAL( size, 48 ); lwgeom_free(g); g = lwgeom_from_wkt("MULTILINESTRING((0 0, 1 1),(0 0, 1 1))", LW_PARSER_CHECK_NONE); size = gserialized_from_lwgeom_size(g); CU_ASSERT_EQUAL( size, 96 ); lwgeom_free(g); g = lwgeom_from_wkt("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE); size = gserialized_from_lwgeom_size(g); CU_ASSERT_EQUAL( size, 104 ); lwgeom_free(g); g = lwgeom_from_wkt("POLYGON((-1 -1, -1 2, 2 2, 2 -1, -1 -1), (0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE); size = gserialized_from_lwgeom_size(g); CU_ASSERT_EQUAL( size, 184 ); lwgeom_free(g); } static void test_lwgeom_calculate_gbox(void) { LWGEOM *g; GBOX b; g = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_cartesian(g, &b); CU_ASSERT_DOUBLE_EQUAL(b.xmin, 0.0, 0.0000001); lwgeom_free(g); /* Inf = 0x7FF0000000000000 */ /* POINT(0 0) = 00 00000001 0000000000000000 0000000000000000 */ /* POINT(0 Inf) = 00 00000001 0000000000000000 7FF0000000000000 */ g = lwgeom_from_hexwkb("000000000100000000000000007FF0000000000000", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_cartesian(g, &b); CU_ASSERT_DOUBLE_EQUAL(b.xmin, 0.0, 0.0000001); CU_ASSERT(isinf(b.ymax)); lwgeom_free(g); /* LINESTRING(0 0, 0 Inf) = 00 00000002 00000002 0000000000000000 7FF0000000000000 0000000000000000 0000000000000000 */ /* Inf should show up in bbox */ g = lwgeom_from_hexwkb("00000000020000000200000000000000007FF000000000000000000000000000000000000000000000", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_cartesian(g, &b); CU_ASSERT_DOUBLE_EQUAL(b.xmin, 0.0, 0.0000001); CU_ASSERT(isinf(b.ymax)); lwgeom_free(g); /* Geometry with NaN 0101000020E8640000000000000000F8FF000000000000F8FF */ /* NaN should show up in bbox */ g = lwgeom_from_hexwkb("0101000020E8640000000000000000F8FF000000000000F8FF", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_cartesian(g, &b); CU_ASSERT(isnan(b.ymax)); lwgeom_free(g); } static void test_gbox_serialized_size(void) { uint8_t flags = gflags(0, 0, 0); CU_ASSERT_EQUAL(gbox_serialized_size(flags),16); FLAGS_SET_BBOX(flags, 1); CU_ASSERT_EQUAL(gbox_serialized_size(flags),16); FLAGS_SET_Z(flags, 1); CU_ASSERT_EQUAL(gbox_serialized_size(flags),24); FLAGS_SET_M(flags, 1); CU_ASSERT_EQUAL(gbox_serialized_size(flags),32); FLAGS_SET_GEODETIC(flags, 1); CU_ASSERT_EQUAL(gbox_serialized_size(flags),24); } static void test_lwgeom_from_gserialized(void) { LWGEOM *geom; GSERIALIZED *g; char *in_ewkt; char *out_ewkt; int i = 0; char ewkt[][512] = { "POINT EMPTY", "POINT(0 0.2)", "LINESTRING EMPTY", "LINESTRING(-1 -1,-1 2.5,2 2,2 -1)", "MULTIPOINT EMPTY", "MULTIPOINT(0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9)", "SRID=1;MULTILINESTRING EMPTY", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "POLYGON EMPTY", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON EMPTY", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))", "SRID=100000;POLYGON((-1 -1 3,-1 2.5 3,2 2 3,2 -1 3,-1 -1 3),(0 0 3,0 1 3,1 1 3,1 0 3,0 0 3),(-0.5 -0.5 3,-0.5 -0.4 3,-0.4 -0.4 3,-0.4 -0.5 3,-0.5 -0.5 3))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;MULTIPOLYGON EMPTY", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", "SRID=4326;GEOMETRYCOLLECTION EMPTY", "SRID=4326;GEOMETRYCOLLECTION(POINT EMPTY, MULTIPOLYGON EMPTY)", "MULTICURVE((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),CIRCULARSTRING(0 0 0 0,0.26794 1 3 -2,0.5857864 1.414213 1 2))", "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING EMPTY))", }; for ( i = 0; i < 13; i++ ) { LWGEOM* geom2; in_ewkt = ewkt[i]; geom = lwgeom_from_wkt(in_ewkt, LW_PARSER_CHECK_NONE); lwgeom_add_bbox(geom); if ( geom->bbox ) gbox_float_round(geom->bbox); g = gserialized_from_lwgeom(geom, 0, 0); geom2 = lwgeom_from_gserialized(g); out_ewkt = lwgeom_to_ewkt(geom2); /* printf("\n in = %s\nout = %s\n", in_ewkt, out_ewkt); */ CU_ASSERT_STRING_EQUAL(in_ewkt, out_ewkt); /* either both or none of the bboxes are null */ CU_ASSERT( (geom->bbox != NULL) || (geom2->bbox == NULL) ); /* either both are null or they are the same */ CU_ASSERT(geom->bbox == NULL || gbox_same(geom->bbox, geom2->bbox)); lwgeom_free(geom); lwgeom_free(geom2); lwfree(g); lwfree(out_ewkt); } } static void test_geometry_type_from_string(void) { int rv; uint8_t type = 0; int z = 0, m = 0; char *str; str = " POINTZ"; rv = geometry_type_from_string(str, &type, &z, &m); //printf("\n in type: %s\nout type: %d\n out z: %d\n out m: %d", str, type, z, m); CU_ASSERT_EQUAL(rv, LW_SUCCESS); CU_ASSERT_EQUAL(type, POINTTYPE); CU_ASSERT_EQUAL(z, 1); CU_ASSERT_EQUAL(m, 0); str = "LINESTRINGM "; rv = geometry_type_from_string(str, &type, &z, &m); //printf("\n in type: %s\nout type: %d\n out z: %d\n out m: %d", str, type, z, m); CU_ASSERT_EQUAL(rv, LW_SUCCESS); CU_ASSERT_EQUAL(type, LINETYPE); CU_ASSERT_EQUAL(z, 0); CU_ASSERT_EQUAL(m, 1); str = "MULTIPOLYGONZM"; rv = geometry_type_from_string(str, &type, &z, &m); //printf("\n in type: %s\nout type: %d\n out z: %d\n out m: %d", str, type, z, m); CU_ASSERT_EQUAL(rv, LW_SUCCESS); CU_ASSERT_EQUAL(type, MULTIPOLYGONTYPE); CU_ASSERT_EQUAL(z, 1); CU_ASSERT_EQUAL(m, 1); str = " GEOMETRYCOLLECTIONZM "; rv = geometry_type_from_string(str, &type, &z, &m); //printf("\n in type: %s\nout type: %d\n out z: %d\n out m: %d", str, type, z, m); CU_ASSERT_EQUAL(rv, LW_SUCCESS); CU_ASSERT_EQUAL(type, COLLECTIONTYPE); CU_ASSERT_EQUAL(z, 1); CU_ASSERT_EQUAL(m, 1); str = " GEOMERYCOLLECTIONZM "; rv = geometry_type_from_string(str, &type, &z, &m); //printf("\n in type: %s\nout type: %d\n out z: %d\n out m: %d", str, type, z, m); CU_ASSERT_EQUAL(rv, LW_FAILURE); } static void test_lwgeom_count_vertices(void) { LWGEOM *geom; geom = lwgeom_from_wkt("MULTIPOINT(-1 -1,-1 2.5,2 2,2 -1)", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(lwgeom_count_vertices(geom),4); lwgeom_free(geom); geom = lwgeom_from_wkt("SRID=1;MULTILINESTRING((-1 -131,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(lwgeom_count_vertices(geom),16); lwgeom_free(geom); geom = lwgeom_from_wkt("SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,211 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(lwgeom_count_vertices(geom),30); lwgeom_free(geom); } static void test_on_gser_lwgeom_count_vertices(void) { LWGEOM *lwgeom; GSERIALIZED *g_ser1; size_t ret_size; lwgeom = lwgeom_from_wkt("MULTIPOINT(-1 -1,-1 2.5,2 2,2 -1,1 1,2 2,4 5)", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(lwgeom_count_vertices(lwgeom),7); g_ser1 = gserialized_from_lwgeom(lwgeom, 1, &ret_size); lwgeom_free(lwgeom); lwgeom = lwgeom_from_gserialized(g_ser1); CU_ASSERT_EQUAL(lwgeom_count_vertices(lwgeom),7); lwgeom_free(lwgeom); lwgeom = lwgeom_from_gserialized(g_ser1); CU_ASSERT_EQUAL(lwgeom_count_vertices(lwgeom),7); lwgeom_free(lwgeom); lwfree(g_ser1); } static void test_lwcollection_extract(void) { LWGEOM *geom; LWCOLLECTION *col; geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(0 0))", LW_PARSER_CHECK_NONE); col = lwcollection_extract((LWCOLLECTION*)geom, 1); CU_ASSERT_EQUAL(col->type, MULTIPOINTTYPE); lwcollection_free(col); col = lwcollection_extract((LWCOLLECTION*)geom, 2); CU_ASSERT_EQUAL(col->type, MULTILINETYPE); lwcollection_free(col); col = lwcollection_extract((LWCOLLECTION*)geom, 3); CU_ASSERT_EQUAL(col->type, MULTIPOLYGONTYPE); lwcollection_free(col); lwgeom_free(geom); geom = lwgeom_from_wkt("GEOMETRYCOLLECTION EMPTY", LW_PARSER_CHECK_NONE); col = lwcollection_extract((LWCOLLECTION*)geom, 1); CU_ASSERT_EQUAL(col->type, MULTIPOINTTYPE); lwcollection_free(col); col = lwcollection_extract((LWCOLLECTION*)geom, 2); CU_ASSERT_EQUAL(col->type, MULTILINETYPE); lwcollection_free(col); col = lwcollection_extract((LWCOLLECTION*)geom, 3); CU_ASSERT_EQUAL(col->type, MULTIPOLYGONTYPE); lwcollection_free(col); lwgeom_free(geom); } static void test_lwgeom_free(void) { LWGEOM *geom; /* Empty geometries don't seem to free properly (#370) */ geom = lwgeom_from_wkt("GEOMETRYCOLLECTION EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(geom->type, COLLECTIONTYPE); lwgeom_free(geom); /* Empty geometries don't seem to free properly (#370) */ geom = lwgeom_from_wkt("POLYGON EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(geom->type, POLYGONTYPE); lwgeom_free(geom); /* Empty geometries don't seem to free properly (#370) */ geom = lwgeom_from_wkt("LINESTRING EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(geom->type, LINETYPE); lwgeom_free(geom); /* Empty geometries don't seem to free properly (#370) */ geom = lwgeom_from_wkt("POINT EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(geom->type, POINTTYPE); lwgeom_free(geom); } static void do_lwgeom_flip_coordinates(char *in, char *out) { LWGEOM *g; char * t; double xmax, ymax; int testbox; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); lwgeom_add_bbox(g); testbox = (g->bbox != NULL); if ( testbox ) { xmax = g->bbox->xmax; ymax = g->bbox->ymax; } g = lwgeom_flip_coordinates(g); if ( testbox ) { CU_ASSERT_DOUBLE_EQUAL(g->bbox->xmax, ymax, 0.00001); CU_ASSERT_DOUBLE_EQUAL(g->bbox->ymax, xmax, 0.00001); } t = lwgeom_to_wkt(g, WKT_EXTENDED, 8, NULL); if (t == NULL) fprintf(stderr, "In:%s", in); if (strcmp(t, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, t, out); CU_ASSERT_STRING_EQUAL(t, out) lwgeom_free(g); lwfree(t); } static void test_lwgeom_flip_coordinates(void) { /* * 2D geometries types */ do_lwgeom_flip_coordinates( "POINT(1 2)", "POINT(2 1)" ); do_lwgeom_flip_coordinates( "LINESTRING(1 2,3 4)", "LINESTRING(2 1,4 3)" ); do_lwgeom_flip_coordinates( "POLYGON((1 2,3 4,5 6,1 2))", "POLYGON((2 1,4 3,6 5,2 1))" ); do_lwgeom_flip_coordinates( "POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8))", "POLYGON((2 1,4 3,6 5,2 1),(8 7,10 9,12 11,8 7))" ); do_lwgeom_flip_coordinates( "MULTIPOINT(1 2,3 4)", "MULTIPOINT(2 1,4 3)" ); do_lwgeom_flip_coordinates( "MULTILINESTRING((1 2,3 4),(5 6,7 8))", "MULTILINESTRING((2 1,4 3),(6 5,8 7))" ); do_lwgeom_flip_coordinates( "MULTIPOLYGON(((1 2,3 4,5 6,7 8)),((9 10,11 12,13 14,10 9)))", "MULTIPOLYGON(((2 1,4 3,6 5,8 7)),((10 9,12 11,14 13,9 10)))" ); do_lwgeom_flip_coordinates( "GEOMETRYCOLLECTION EMPTY", "GEOMETRYCOLLECTION EMPTY" ); do_lwgeom_flip_coordinates( "GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))", "GEOMETRYCOLLECTION(POINT(2 1),LINESTRING(4 3,6 5))" ); do_lwgeom_flip_coordinates( "GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(LINESTRING(3 4,5 6)))", "GEOMETRYCOLLECTION(POINT(2 1),GEOMETRYCOLLECTION(LINESTRING(4 3,6 5)))" ); do_lwgeom_flip_coordinates( "CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)", "CIRCULARSTRING(0 -2,2 0,0 2,2 0,4 2)" ); do_lwgeom_flip_coordinates( "COMPOUNDCURVE(CIRCULARSTRING(0 1,1 1,1 0),(1 0,0 1))", "COMPOUNDCURVE(CIRCULARSTRING(1 0,1 1,0 1),(0 1,1 0))" ); do_lwgeom_flip_coordinates( "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))", "CURVEPOLYGON(CIRCULARSTRING(0 -2,-1 -1,0 0,-1 1,0 2,2 0,0 -2),(0 -1,0.5 0,0 1,1 0,0 -1))" ); do_lwgeom_flip_coordinates( "MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 3))", "MULTICURVE((5 5,5 3,3 3,3 0),CIRCULARSTRING(0 0,1 2,3 2))" ); do_lwgeom_flip_coordinates( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 -2,-1 -1,0 0,-1 1,0 2,2 0,0 -2),(0 -1,0.5 0,0 1,1 0,0 -1)),((8 7,10 10,14 6,11 4,8 7)))" ); /* * Ndims */ do_lwgeom_flip_coordinates( "POINT(1 2 3)", "POINT(2 1 3)" ); do_lwgeom_flip_coordinates( "POINTM(1 2 3)", "POINTM(2 1 3)" ); do_lwgeom_flip_coordinates( "POINT(1 2 3 4)", "POINT(2 1 3 4)" ); /* * Srid */ do_lwgeom_flip_coordinates( "SRID=4326;POINT(1 2)", "SRID=4326;POINT(2 1)" ); do_lwgeom_flip_coordinates( "SRID=0;POINT(1 2)", "POINT(2 1)" ); } static void test_f2d(void) { double d = 1000000.123456789123456789; float f; double e; f = next_float_down(d); d = next_float_down(f); CU_ASSERT_DOUBLE_EQUAL(f,d, 0.0000001); e = (double)f; CU_ASSERT_DOUBLE_EQUAL(f,e, 0.0000001); f = next_float_down(d); d = next_float_down(f); CU_ASSERT_DOUBLE_EQUAL(f,d, 0.0000001); f = next_float_up(d); d = next_float_up(f); CU_ASSERT_DOUBLE_EQUAL(f,d, 0.0000001); f = next_float_up(d); d = next_float_up(f); CU_ASSERT_DOUBLE_EQUAL(f,d, 0.0000001); } /* * This is a test for memory leaks, can't really test * w/out checking with a leak detector (ie: valgrind) * * See http://trac.osgeo.org/postgis/ticket/1102 */ static void test_lwgeom_clone(void) { int i; char *ewkt[] = { "POINT(0 0.2)", "LINESTRING(-1 -1,-1 2.5,2 2,2 -1)", "MULTIPOINT(0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9)", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))", "SRID=100000;POLYGON((-1 -1 3,-1 2.5 3,2 2 3,2 -1 3,-1 -1 3),(0 0 3,0 1 3,1 1 3,1 0 3,0 0 3),(-0.5 -0.5 3,-0.5 -0.4 3,-0.4 -0.4 3,-0.4 -0.5 3,-0.5 -0.5 3))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", "MULTICURVE((5 5 1 3,3 5 2 2,3 3 3 1,0 3 1 1),CIRCULARSTRING(0 0 0 0,0.26794 1 3 -2,0.5857864 1.414213 1 2))", "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "TIN(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))" }; for ( i = 0; i < (sizeof ewkt/sizeof(char *)); i++ ) { LWGEOM *geom, *cloned; char *in_ewkt; char *out_ewkt; in_ewkt = ewkt[i]; geom = lwgeom_from_wkt(in_ewkt, LW_PARSER_CHECK_NONE); cloned = lwgeom_clone(geom); out_ewkt = lwgeom_to_ewkt(cloned); if (strcmp(in_ewkt, out_ewkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_ewkt, out_ewkt); CU_ASSERT_STRING_EQUAL(in_ewkt, out_ewkt); lwfree(out_ewkt); lwgeom_free(cloned); lwgeom_free(geom); } } /* * Test lwgeom_force_clockwise */ static void test_lwgeom_force_clockwise(void) { LWGEOM *geom; LWGEOM *geom2; char *in_ewkt, *out_ewkt; /* counterclockwise, must be reversed */ geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE); lwgeom_force_clockwise(geom); in_ewkt = "POLYGON((0 0,0 10,10 10,10 0,0 0))"; out_ewkt = lwgeom_to_ewkt(geom); if (strcmp(in_ewkt, out_ewkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_ewkt, out_ewkt); CU_ASSERT_STRING_EQUAL(in_ewkt, out_ewkt); lwfree(out_ewkt); lwgeom_free(geom); /* clockwise, fine as is */ geom = lwgeom_from_wkt("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))", LW_PARSER_CHECK_NONE); lwgeom_force_clockwise(geom); in_ewkt = "POLYGON((0 0,0 10,10 10,10 0,0 0))"; out_ewkt = lwgeom_to_ewkt(geom); if (strcmp(in_ewkt, out_ewkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_ewkt, out_ewkt); CU_ASSERT_STRING_EQUAL(in_ewkt, out_ewkt); lwfree(out_ewkt); lwgeom_free(geom); /* counterclockwise shell (must be reversed), mixed-wise holes */ geom = lwgeom_from_wkt("POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 4,4 2,2 2),(6 2,8 2,8 4,6 2))", LW_PARSER_CHECK_NONE); lwgeom_force_clockwise(geom); in_ewkt = "POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,2 4,2 2),(6 2,8 2,8 4,6 2))"; out_ewkt = lwgeom_to_ewkt(geom); if (strcmp(in_ewkt, out_ewkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_ewkt, out_ewkt); CU_ASSERT_STRING_EQUAL(in_ewkt, out_ewkt); lwfree(out_ewkt); lwgeom_free(geom); /* clockwise shell (fine), mixed-wise holes */ geom = lwgeom_from_wkt("POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,2 4,2 2),(6 2,8 4,8 2,6 2))", LW_PARSER_CHECK_NONE); lwgeom_force_clockwise(geom); in_ewkt = "POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,2 4,2 2),(6 2,8 2,8 4,6 2))"; out_ewkt = lwgeom_to_ewkt(geom); if (strcmp(in_ewkt, out_ewkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_ewkt, out_ewkt); CU_ASSERT_STRING_EQUAL(in_ewkt, out_ewkt); lwfree(out_ewkt); lwgeom_free(geom); /* clockwise narrow ring, fine as-is */ /* NOTE: this is a narrow ring, see ticket #1302 */ in_ewkt = "0103000000010000000500000000917E9BA468294100917E9B8AEA2841C976BE1FA4682941C976BE9F8AEA2841B39ABE1FA46829415ACCC29F8AEA284137894120A4682941C976BE9F8AEA284100917E9BA468294100917E9B8AEA2841"; geom = lwgeom_from_hexwkb(in_ewkt, LW_PARSER_CHECK_NONE); geom2 = lwgeom_from_hexwkb(in_ewkt, LW_PARSER_CHECK_NONE); lwgeom_force_clockwise(geom2); /** use same check instead of strcmp to account for difference in endianness **/ CU_ASSERT( lwgeom_same(geom, geom2) ); lwgeom_free(geom); lwgeom_free(geom2); } /* * Test lwgeom_is_empty */ static void test_lwgeom_is_empty(void) { LWGEOM *geom; geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE); CU_ASSERT( !lwgeom_is_empty(geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("POINT EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_is_empty(geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("LINESTRING EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_is_empty(geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("POLYGON EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_is_empty(geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTIPOINT EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_is_empty(geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTILINESTRING EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_is_empty(geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTIPOLYGON EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_is_empty(geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT EMPTY, LINESTRING EMPTY, POLYGON EMPTY, MULTIPOINT EMPTY, MULTILINESTRING EMPTY, MULTIPOLYGON EMPTY, GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY))", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_is_empty(geom) ); lwgeom_free(geom); } /* * Test lwgeom_same */ static void test_lwgeom_same(void) { LWGEOM *geom, *geom2; geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("LINESTRING(0 0, 2 0)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTILINESTRING((0 0, 2 0))", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTIPOINT((0 0),(4 5))", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("POINT EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("LINESTRING EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_add_bbox(geom); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("POLYGON EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTIPOINT EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTILINESTRING EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("MULTIPOLYGON EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT EMPTY, LINESTRING EMPTY, POLYGON EMPTY, MULTIPOINT EMPTY, MULTILINESTRING EMPTY, MULTIPOLYGON EMPTY, GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY))", LW_PARSER_CHECK_NONE); CU_ASSERT( lwgeom_same(geom, geom) ); lwgeom_free(geom); geom = lwgeom_from_wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", LW_PARSER_CHECK_NONE); geom2 = lwgeom_from_wkt("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY, POINT EMPTY, LINESTRING EMPTY, POLYGON EMPTY, MULTIPOINT EMPTY, MULTILINESTRING EMPTY, MULTIPOLYGON EMPTY, GEOMETRYCOLLECTION(MULTIPOLYGON EMPTY))", LW_PARSER_CHECK_NONE); CU_ASSERT( ! lwgeom_same(geom, geom2) ); lwgeom_free(geom); lwgeom_free(geom2); geom = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE); geom2 = lwgeom_from_wkt("MULTIPOINT((0 0))", LW_PARSER_CHECK_NONE); CU_ASSERT( ! lwgeom_same(geom, geom2) ); lwgeom_free(geom); lwgeom_free(geom2); geom = lwgeom_from_wkt("POINT EMPTY", LW_PARSER_CHECK_NONE); geom2 = lwgeom_from_wkt("POINT Z EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT( ! lwgeom_same(geom, geom2) ); lwgeom_free(geom); lwgeom_free(geom2); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo libgeom_tests[] = { PG_TEST(test_typmod_macros), PG_TEST(test_flags_macros), PG_TEST(test_serialized_srid), PG_TEST(test_gserialized_from_lwgeom_size), PG_TEST(test_gbox_serialized_size), PG_TEST(test_lwgeom_from_gserialized), PG_TEST(test_lwgeom_count_vertices), PG_TEST(test_on_gser_lwgeom_count_vertices), PG_TEST(test_geometry_type_from_string), PG_TEST(test_lwcollection_extract), PG_TEST(test_lwgeom_free), PG_TEST(test_lwgeom_flip_coordinates), PG_TEST(test_f2d), PG_TEST(test_lwgeom_clone), PG_TEST(test_lwgeom_force_clockwise), PG_TEST(test_lwgeom_calculate_gbox), PG_TEST(test_lwgeom_is_empty), PG_TEST(test_lwgeom_same), CU_TEST_INFO_NULL }; CU_SuiteInfo libgeom_suite = {"libgeom", NULL, NULL, libgeom_tests}; ���������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_geodetic.c�����������������������������������������������0000644�0000000�0000000�00000144515�12306464620�021316� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_geodetic.c 12308 2014-03-08 00:51:28Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "lwgeodetic.h" #include "cu_tester.h" #define RANDOM_TEST 0 /** * Convert an edge from degrees to radians. */ static void edge_deg2rad(GEOGRAPHIC_EDGE *e) { (e->start).lat = deg2rad((e->start).lat); (e->end).lat = deg2rad((e->end).lat); (e->start).lon = deg2rad((e->start).lon); (e->end).lon = deg2rad((e->end).lon); } /** * Convert an edge from radians to degrees. static void edge_rad2deg(GEOGRAPHIC_EDGE *e) { (e->start).lat = rad2deg((e->start).lat); (e->end).lat = rad2deg((e->end).lat); (e->start).lon = rad2deg((e->start).lon); (e->end).lon = rad2deg((e->end).lon); } */ /** * Convert a point from degrees to radians. */ static void point_deg2rad(GEOGRAPHIC_POINT *p) { p->lat = latitude_radians_normalize(deg2rad(p->lat)); p->lon = longitude_radians_normalize(deg2rad(p->lon)); } /** * Convert a point from radians to degrees. */ static void point_rad2deg(GEOGRAPHIC_POINT *p) { p->lat = rad2deg(p->lat); p->lon = rad2deg(p->lon); } static void test_signum(void) { CU_ASSERT_EQUAL(signum(-5.0),-1); CU_ASSERT_EQUAL(signum(5.0),1); } static void test_sphere_direction(void) { GEOGRAPHIC_POINT s, e; double dir, dist; geographic_point_init(0, 0, &s); geographic_point_init(1, 0, &e); dist = sphere_distance(&s, &e); dir = sphere_direction(&s, &e, dist); CU_ASSERT_DOUBLE_EQUAL(dir, M_PI / 2.0, 0.0001); geographic_point_init(0, 0, &s); geographic_point_init(0, 1, &e); dist = sphere_distance(&s, &e); dir = sphere_direction(&s, &e, dist); CU_ASSERT_DOUBLE_EQUAL(dir, 0.0, 0.0001); } static void test_sphere_project(void) { GEOGRAPHIC_POINT s, e; double dir1, dist1, dir2, dist2; dir1 = M_PI/2; dist1 = 0.1; geographic_point_init(0, 0, &s); sphere_project(&s, dist1, dir1, &e); dist2 = sphere_distance(&s, &e); dir2 = sphere_direction(&s, &e, dist1); CU_ASSERT_DOUBLE_EQUAL(dist1, dist2, 0.0001); CU_ASSERT_DOUBLE_EQUAL(dir1, dir2, 0.0001); dist1 = sphere_distance(&e, &s); dir1 = sphere_direction(&e, &s, dist1); sphere_project(&e, dist1, dir1, &s); CU_ASSERT_DOUBLE_EQUAL(s.lon, 0.0, 0.0001); CU_ASSERT_DOUBLE_EQUAL(s.lat, 0.0, 0.0001); geographic_point_init(0, 0.2, &e); geographic_point_init(0, 0.4, &s); dist1 = sphere_distance(&s, &e); dir1 = sphere_direction(&e, &s, dist1); CU_ASSERT_DOUBLE_EQUAL(dir1, 0.0, 0.0001); geographic_point_init(0, 1, &s); geographic_point_init(0, 2, &e); dist2 = sphere_distance(&s, &e); dir2 = sphere_direction(&s, &e, dist2); CU_ASSERT_DOUBLE_EQUAL(dir2, 0.0, 0.0001); geographic_point_init(1, 1, &e); dist2 = sphere_distance(&s, &e); dir2 = sphere_direction(&s, &e, dist2); CU_ASSERT_DOUBLE_EQUAL(dir2, 1.57064, 0.0001); geographic_point_init(0, 0, &e); dist2 = sphere_distance(&s, &e); dir2 = sphere_direction(&s, &e, dist2); CU_ASSERT_DOUBLE_EQUAL(dir2, 3.14159, 0.0001); geographic_point_init(-1, 1, &e); dist2 = sphere_distance(&s, &e); dir2 = sphere_direction(&s, &e, dist2); CU_ASSERT_DOUBLE_EQUAL(dir2, -1.57064, 0.0001); geographic_point_init(1, 2, &e); dist2 = sphere_distance(&s, &e); dir2 = sphere_direction(&s, &e, dist2); CU_ASSERT_DOUBLE_EQUAL(dir2, 0.785017, 0.0001); geographic_point_init(-1, 0, &e); dist2 = sphere_distance(&s, &e); dir2 = sphere_direction(&s, &e, dist2); CU_ASSERT_DOUBLE_EQUAL(dir2, -2.35612, 0.0001); } #if 0 /** * Tests the relative numerical stability of the "robust" and * naive cross product calculation methods. */ static void cross_product_stability(void) { POINT2D p1, p2; int i; GEOGRAPHIC_POINT g1, g2; POINT3D A1, A2; POINT3D Nr, Nc; POINT3D Or, Oc; p1.x = 10.0; p1.y = 45.0; p2.x = 10.0; p2.y = 50.0; geographic_point_init(p1.x, p1.y, &g1); ll2cart(&p1, &A1); for ( i = 0; i < 40; i++ ) { geographic_point_init(p2.x, p2.y, &g2); ll2cart(&p2, &A2); /* Skea */ robust_cross_product(&g1, &g2, &Nr); normalize(&Nr); /* Ramsey */ unit_normal(&A1, &A2, &Nc); if ( i > 0 ) { printf("\n- %d -------------------- %.24g ------------------------\n", i, p2.y); printf("Skea: %.24g,%.24g,%.24g\n", Nr.x, Nr.y, Nr.z); printf("Skea Diff: %.24g,%.24g,%.24g\n", Or.x-Nr.x, Or.y-Nr.y, Or.z-Nr.z); printf("Ramsey: %.24g,%.24g,%.24g\n", Nc.x, Nc.y, Nc.z); printf("Ramsey Diff: %.24g,%.24g,%.24g\n", Oc.x-Nc.x, Oc.y-Nc.y, Oc.z-Nc.z); printf("Diff: %.24g,%.24g,%.24g\n", Nr.x-Nc.x, Nr.y-Nc.y, Nr.z-Nc.z); } Or = Nr; Oc = Nc; p2.y += (p1.y - p2.y)/2.0; } } #endif static void test_gbox_from_spherical_coordinates(void) { #if RANDOM_TEST const double gtolerance = 0.000001; const int loops = RANDOM_TEST; int i; double ll[64]; GBOX gbox; GBOX gbox_slow; int rndlat; int rndlon; POINTARRAY *pa; LWGEOM *lwline; ll[0] = -3.083333333333333333333333333333333; ll[1] = 9.83333333333333333333333333333333; ll[2] = 15.5; ll[3] = -5.25; pa = ptarray_construct_reference_data(0, 0, 2, (uint8_t*)ll); lwline = lwline_as_lwgeom(lwline_construct(SRID_UNKNOWN, 0, pa)); FLAGS_SET_GEODETIC(lwline->flags, 1); srandomdev(); for ( i = 0; i < loops; i++ ) { rndlat = (int)(90.0 - 180.0 * (double)random() / pow(2.0, 31.0)); rndlon = (int)(180.0 - 360.0 * (double)random() / pow(2.0, 31.0)); ll[0] = (double)rndlon; ll[1] = (double)rndlat; rndlat = (int)(90.0 - 180.0 * (double)random() / pow(2.0, 31.0)); rndlon = (int)(180.0 - 360.0 * (double)random() / pow(2.0, 31.0)); ll[2] = (double)rndlon; ll[3] = (double)rndlat; gbox_geocentric_slow = LW_FALSE; lwgeom_calculate_gbox_geodetic(lwline, &gbox); gbox_geocentric_slow = LW_TRUE; lwgeom_calculate_gbox_geodetic(lwline, &gbox_slow); gbox_geocentric_slow = LW_FALSE; if ( ( fabs( gbox.xmin - gbox_slow.xmin ) > gtolerance ) || ( fabs( gbox.xmax - gbox_slow.xmax ) > gtolerance ) || ( fabs( gbox.ymin - gbox_slow.ymin ) > gtolerance ) || ( fabs( gbox.ymax - gbox_slow.ymax ) > gtolerance ) || ( fabs( gbox.zmin - gbox_slow.zmin ) > gtolerance ) || ( fabs( gbox.zmax - gbox_slow.zmax ) > gtolerance ) ) { printf("\n-------\n"); printf("If you are seeing this, cut and paste it, it is a randomly generated test case!\n"); printf("LOOP: %d\n", i); printf("SEGMENT (Lon Lat): (%.9g %.9g) (%.9g %.9g)\n", ll[0], ll[1], ll[2], ll[3]); printf("CALC: %s\n", gbox_to_string(&gbox)); printf("SLOW: %s\n", gbox_to_string(&gbox_slow)); printf("-------\n\n"); CU_FAIL_FATAL(Slow (GOOD) and fast (CALC) box calculations returned different values!!); } } lwgeom_free(lwline); #endif /* RANDOM_TEST */ } #include "cu_geodetic_data.h" static void test_gserialized_get_gbox_geocentric(void) { LWGEOM *lwg; GBOX gbox, gbox_slow; int i; for ( i = 0; i < gbox_data_length; i++ ) { #if 0 // if ( i != 0 ) continue; /* skip our bad case */ printf("\n\n------------\n"); printf("%s\n", gbox_data[i]); #endif lwg = lwgeom_from_wkt(gbox_data[i], LW_PARSER_CHECK_NONE); FLAGS_SET_GEODETIC(lwg->flags, 1); gbox_geocentric_slow = LW_FALSE; lwgeom_calculate_gbox(lwg, &gbox); gbox_geocentric_slow = LW_TRUE; lwgeom_calculate_gbox(lwg, &gbox_slow); gbox_geocentric_slow = LW_FALSE; lwgeom_free(lwg); #if 0 printf("\nCALC: %s\n", gbox_to_string(&gbox)); printf("GOOD: %s\n", gbox_to_string(&gbox_slow)); printf("line %d: diff %.9g\n", i, fabs(gbox.xmin - gbox_slow.xmin)+fabs(gbox.ymin - gbox_slow.ymin)+fabs(gbox.zmin - gbox_slow.zmin)); printf("------------\n"); #endif CU_ASSERT_DOUBLE_EQUAL(gbox.xmin, gbox_slow.xmin, 0.00000001); CU_ASSERT_DOUBLE_EQUAL(gbox.ymin, gbox_slow.ymin, 0.00000001); CU_ASSERT_DOUBLE_EQUAL(gbox.zmin, gbox_slow.zmin, 0.00000001); CU_ASSERT_DOUBLE_EQUAL(gbox.xmax, gbox_slow.xmax, 0.00000001); CU_ASSERT_DOUBLE_EQUAL(gbox.ymax, gbox_slow.ymax, 0.00000001); CU_ASSERT_DOUBLE_EQUAL(gbox.zmax, gbox_slow.zmax, 0.00000001); } } /* * Build LWGEOM on top of *aligned* structure so we can use the read-only * point access methods on them. static LWGEOM* lwgeom_over_gserialized(char *wkt) { LWGEOM *lwg; GSERIALIZED *g; lwg = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); g = gserialized_from_lwgeom(lwg, 1, 0); lwgeom_free(lwg); return lwgeom_from_gserialized(g); } */ static void edge_set(double lon1, double lat1, double lon2, double lat2, GEOGRAPHIC_EDGE *e) { e->start.lon = lon1; e->start.lat = lat1; e->end.lon = lon2; e->end.lat = lat2; edge_deg2rad(e); } static void point_set(double lon, double lat, GEOGRAPHIC_POINT *p) { p->lon = lon; p->lat = lat; point_deg2rad(p); } static void test_clairaut(void) { GEOGRAPHIC_POINT gs, ge; POINT3D vs, ve; GEOGRAPHIC_POINT g_out_top, g_out_bottom, v_out_top, v_out_bottom; point_set(-45.0, 60.0, &gs); point_set(135.0, 60.0, &ge); geog2cart(&gs, &vs); geog2cart(&ge, &ve); clairaut_cartesian(&vs, &ve, &v_out_top, &v_out_bottom); clairaut_geographic(&gs, &ge, &g_out_top, &g_out_bottom); CU_ASSERT_DOUBLE_EQUAL(v_out_top.lat, g_out_top.lat, 0.000001); CU_ASSERT_DOUBLE_EQUAL(v_out_top.lon, g_out_top.lon, 0.000001); CU_ASSERT_DOUBLE_EQUAL(v_out_bottom.lat, g_out_bottom.lat, 0.000001); CU_ASSERT_DOUBLE_EQUAL(v_out_bottom.lon, g_out_bottom.lon, 0.000001); gs.lat = 1.3021240033804449; ge.lat = 1.3021240033804449; gs.lon = -1.3387392931438733; ge.lon = 1.80285336044592; geog2cart(&gs, &vs); geog2cart(&ge, &ve); clairaut_cartesian(&vs, &ve, &v_out_top, &v_out_bottom); clairaut_geographic(&gs, &ge, &g_out_top, &g_out_bottom); CU_ASSERT_DOUBLE_EQUAL(v_out_top.lat, g_out_top.lat, 0.000001); CU_ASSERT_DOUBLE_EQUAL(v_out_top.lon, g_out_top.lon, 0.000001); CU_ASSERT_DOUBLE_EQUAL(v_out_bottom.lat, g_out_bottom.lat, 0.000001); CU_ASSERT_DOUBLE_EQUAL(v_out_bottom.lon, g_out_bottom.lon, 0.000001); } static void test_edge_intersection(void) { GEOGRAPHIC_EDGE e1, e2; GEOGRAPHIC_POINT g; int rv; /* Covers case, end-to-end intersection */ edge_set(50, -10.999999999999998224, -10.0, 50.0, &e1); edge_set(-10.0, 50.0, -10.272779983831613393, -16.937003313332997578, &e2); rv = edge_intersection(&e1, &e2, &g); CU_ASSERT_EQUAL(rv, LW_TRUE); /* Medford case, very short segment vs very long one */ e1.start.lat = 0.74123572595649878103; e1.start.lon = -2.1496353191142714145; e1.end.lat = 0.74123631950116664058; e1.end.lon = -2.1496353248304860273; e2.start.lat = 0.73856343764436815924; e2.start.lon = -2.1461493501950630325; e2.end.lat = 0.70971354024834598651; e2.end.lon = 2.1082194552519770703; rv = edge_intersection(&e1, &e2, &g); CU_ASSERT_EQUAL(rv, LW_FALSE); /* Again, this time with a less exact input edge. */ edge_set(-123.165031277506, 42.4696787216231, -123.165031605021, 42.4697127292275, &e1); rv = edge_intersection(&e1, &e2, &g); CU_ASSERT_EQUAL(rv, LW_FALSE); /* Second Medford case, very short segment vs very long one e1.start.lat = 0.73826546728290887156; e1.start.lon = -2.14426380171833042; e1.end.lat = 0.73826545883786642843; e1.end.lon = -2.1442638997530165668; e2.start.lat = 0.73775469118192538165; e2.start.lon = -2.1436035534281718817; e2.end.lat = 0.71021099548296817705; e2.end.lon = 2.1065275171200439353; rv = edge_intersection(e1, e2, &g); CU_ASSERT_EQUAL(rv, LW_FALSE); */ /* Intersection at (0 0) */ edge_set(-1.0, 0.0, 1.0, 0.0, &e1); edge_set(0.0, -1.0, 0.0, 1.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); CU_ASSERT_DOUBLE_EQUAL(g.lat, 0.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(g.lon, 0.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); /* No intersection at (0 0) */ edge_set(-1.0, 0.0, 1.0, 0.0, &e1); edge_set(0.0, -1.0, 0.0, -2.0, &e2); rv = edge_intersection(&e1, &e2, &g); CU_ASSERT_EQUAL(rv, LW_FALSE); /* End touches middle of segment at (0 0) */ edge_set(-1.0, 0.0, 1.0, 0.0, &e1); edge_set(0.0, -1.0, 0.0, 0.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); #if 0 printf("\n"); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e1.start.lon, e1.start.lat, e1.end.lon, e1.end.lat); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e2.start.lon, e2.start.lat, e2.end.lon, e2.end.lat); printf("g = (%.15g %.15g)\n", g.lon, g.lat); printf("rv = %d\n", rv); #endif CU_ASSERT_DOUBLE_EQUAL(g.lon, 0.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); /* End touches end of segment at (0 0) */ edge_set(0.0, 0.0, 1.0, 0.0, &e1); edge_set(0.0, -1.0, 0.0, 0.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); #if 0 printf("\n"); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e1.start.lon, e1.start.lat, e1.end.lon, e1.end.lat); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e2.start.lon, e2.start.lat, e2.end.lon, e2.end.lat); printf("g = (%.15g %.15g)\n", g.lon, g.lat); printf("rv = %d\n", rv); #endif CU_ASSERT_DOUBLE_EQUAL(g.lat, 0.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(g.lon, 0.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); /* Intersection at (180 0) */ edge_set(-179.0, -1.0, 179.0, 1.0, &e1); edge_set(-179.0, 1.0, 179.0, -1.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); CU_ASSERT_DOUBLE_EQUAL(g.lat, 0.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(fabs(g.lon), 180.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); /* Intersection at (180 0) */ edge_set(-170.0, 0.0, 170.0, 0.0, &e1); edge_set(180.0, -10.0, 180.0, 10.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); CU_ASSERT_DOUBLE_EQUAL(g.lat, 0.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(fabs(g.lon), 180.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); /* Intersection at north pole */ edge_set(-180.0, 80.0, 0.0, 80.0, &e1); edge_set(90.0, 80.0, -90.0, 80.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); CU_ASSERT_DOUBLE_EQUAL(g.lat, 90.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); /* Equal edges return true */ edge_set(45.0, 10.0, 50.0, 20.0, &e1); edge_set(45.0, 10.0, 50.0, 20.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); CU_ASSERT_EQUAL(rv, LW_TRUE); /* Parallel edges (same great circle, different end points) return true */ edge_set(40.0, 0.0, 70.0, 0.0, &e1); edge_set(60.0, 0.0, 50.0, 0.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); CU_ASSERT_EQUAL(rv, 2); /* Hack, returning 2 as the 'co-linear' value */ /* End touches arc at north pole */ edge_set(-180.0, 80.0, 0.0, 80.0, &e1); edge_set(90.0, 80.0, -90.0, 90.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); #if 0 printf("\n"); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e1.start.lon, e1.start.lat, e1.end.lon, e1.end.lat); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e2.start.lon, e2.start.lat, e2.end.lon, e2.end.lat); printf("g = (%.15g %.15g)\n", g.lon, g.lat); printf("rv = %d\n", rv); #endif CU_ASSERT_DOUBLE_EQUAL(g.lat, 90.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); /* End touches end at north pole */ edge_set(-180.0, 80.0, 0.0, 90.0, &e1); edge_set(90.0, 80.0, -90.0, 90.0, &e2); rv = edge_intersection(&e1, &e2, &g); point_rad2deg(&g); #if 0 printf("\n"); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e1.start.lon, e1.start.lat, e1.end.lon, e1.end.lat); printf("LINESTRING(%.15g %.15g, %.15g %.15g)\n", e2.start.lon, e2.start.lat, e2.end.lon, e2.end.lat); printf("g = (%.15g %.15g)\n", g.lon, g.lat); printf("rv = %d\n", rv); #endif CU_ASSERT_DOUBLE_EQUAL(g.lat, 90.0, 0.00001); CU_ASSERT_EQUAL(rv, LW_TRUE); } static void line2pts(const char *wkt, POINT3D *A1, POINT3D *A2) { LWLINE *l = (LWLINE*)lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); POINTARRAY *pa; POINT2D p1, p2; GEOGRAPHIC_POINT g1, g2; if ( ! l ) { printf("BAD WKT FOUND in test_edge_intersects:\n %s\n\n", wkt); exit(0); } pa = l->points; getPoint2d_p(pa, 0, &p1); getPoint2d_p(pa, 1, &p2); geographic_point_init(p1.x, p1.y, &g1); geographic_point_init(p2.x, p2.y, &g2); geog2cart(&g1, A1); geog2cart(&g2, A2); lwline_free(l); return; } static void test_edge_intersects(void) { POINT3D A1, A2, B1, B2; GEOGRAPHIC_POINT g; int rv; /* Covers case, end-to-end intersection */ line2pts("LINESTRING(50 -10.999999999999998224, -10.0 50.0)", &A1, &A2); line2pts("LINESTRING(-10.0 50.0, -10.272779983831613393 -16.937003313332997578)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv & PIR_INTERSECTS); /* Medford case, very short segment vs very long one */ g.lat = 0.74123572595649878103; g.lon = -2.1496353191142714145; geog2cart(&g, &A1); g.lat = 0.74123631950116664058; g.lon = -2.1496353248304860273; geog2cart(&g, &A2); g.lat = 0.73856343764436815924; g.lon = -2.1461493501950630325; geog2cart(&g, &B1); g.lat = 0.70971354024834598651; g.lon = 2.1082194552519770703; geog2cart(&g, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == 0); /* Second Medford case, very short segment vs very long one */ g.lat = 0.73826546728290887156; g.lon = -2.14426380171833042; geog2cart(&g, &A1); g.lat = 0.73826545883786642843; g.lon = -2.1442638997530165668; geog2cart(&g, &A2); g.lat = 0.73775469118192538165; g.lon = -2.1436035534281718817; geog2cart(&g, &B1); g.lat = 0.71021099548296817705; g.lon = 2.1065275171200439353; geog2cart(&g, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == PIR_INTERSECTS); /* Again, this time with a less exact input edge. */ line2pts("LINESTRING(-123.165031277506 42.4696787216231, -123.165031605021 42.4697127292275)", &A1, &A2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == 0); /* Intersection at (0 0) */ line2pts("LINESTRING(-1.0 0.0, 1.0 0.0)", &A1, &A2); line2pts("LINESTRING(0.0 -1.0, 0.0 1.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == PIR_INTERSECTS); /* No intersection at (0 0) */ line2pts("LINESTRING(-1.0 0.0, 1.0 0.0)", &A1, &A2); line2pts("LINESTRING(0.0 -1.0, 0.0 -2.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == 0); /* End touches middle of segment at (0 0) */ line2pts("LINESTRING(-1.0 0.0, 1.0 0.0)", &A1, &A2); line2pts("LINESTRING(0.0 -1.0, 0.0 0.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == (PIR_INTERSECTS|PIR_B_TOUCH_RIGHT) ); /* End touches end of segment at (0 0) */ line2pts("LINESTRING(0.0 0.0, 1.0 0.0)", &A1, &A2); line2pts("LINESTRING(0.0 -1.0, 0.0 0.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == (PIR_INTERSECTS|PIR_B_TOUCH_RIGHT|PIR_A_TOUCH_RIGHT) ); /* Intersection at (180 0) */ line2pts("LINESTRING(-179.0 -1.0, 179.0 1.0)", &A1, &A2); line2pts("LINESTRING(-179.0 1.0, 179.0 -1.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == PIR_INTERSECTS); /* Intersection at (180 0) */ line2pts("LINESTRING(-170.0 0.0, 170.0 0.0)", &A1, &A2); line2pts("LINESTRING(180.0 -10.0, 180.0 10.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == PIR_INTERSECTS); /* Intersection at north pole */ line2pts("LINESTRING(-180.0 80.0, 0.0 80.0)", &A1, &A2); line2pts("LINESTRING(90.0 80.0, -90.0 80.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == PIR_INTERSECTS); /* Equal edges return true */ line2pts("LINESTRING(45.0 10.0, 50.0 20.0)", &A1, &A2); line2pts("LINESTRING(45.0 10.0, 50.0 20.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv & PIR_INTERSECTS); /* Parallel edges (same great circle, different end points) return true */ line2pts("LINESTRING(40.0 0.0, 70.0 0.0)", &A1, &A2); line2pts("LINESTRING(60.0 0.0, 50.0 0.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == (PIR_INTERSECTS|PIR_COLINEAR) ); /* End touches arc at north pole */ line2pts("LINESTRING(-180.0 80.0, 0.0 80.0)", &A1, &A2); line2pts("LINESTRING(90.0 80.0, -90.0 90.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == (PIR_INTERSECTS|PIR_B_TOUCH_LEFT) ); /* End touches end at north pole */ line2pts("LINESTRING(-180.0 80.0, 0.0 90.0)", &A1, &A2); line2pts("LINESTRING(90.0 80.0, -90.0 90.0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == (PIR_INTERSECTS|PIR_B_TOUCH_LEFT|PIR_A_TOUCH_RIGHT) ); /* Antipodal straddles. Great circles cross but at opposite */ /* sides of the globe */ /* #2534 */ /* http://www.gcmap.com/mapui?P=60N+90E-20S+90E%0D%0A0N+0E-90.04868865037885W+57.44011727050777S%0D%0A&MS=wls&DU=mi */ line2pts("LINESTRING(90.0 60.0, 90.0 -20.0)", &A1, &A2); line2pts("LINESTRING(0.0 0.0, -90.04868865037885 -57.44011727050777)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == 0); line2pts("LINESTRING(-5 0, 5 0)", &A1, &A2); line2pts("LINESTRING(179 -5, 179 5)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == 0); line2pts("LINESTRING(175 -85, 175 85)", &A1, &A2); line2pts("LINESTRING(65 0, -105 0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == 0); line2pts("LINESTRING(175 -85, 175 85)", &A1, &A2); line2pts("LINESTRING(45 0, -125 0)", &B1, &B2); rv = edge_intersects(&A1, &A2, &B1, &B2); CU_ASSERT(rv == 0); } static void test_edge_distance_to_point(void) { GEOGRAPHIC_EDGE e; GEOGRAPHIC_POINT g; GEOGRAPHIC_POINT closest; double d; /* closest point at origin, one degree away */ edge_set(-50.0, 0.0, 50.0, 0.0, &e); point_set(0.0, 1.0, &g); d = edge_distance_to_point(&e, &g, 0); CU_ASSERT_DOUBLE_EQUAL(d, M_PI / 180.0, 0.00001); /* closest point at origin, one degree away */ edge_set(-50.0, 0.0, 50.0, 0.0, &e); point_set(0.0, 2.0, &g); d = edge_distance_to_point(&e, &g, &closest); #if 0 printf("LINESTRING(%.8g %.8g, %.8g %.8g)\n", e.start.lon, e.start.lat, e.end.lon, e.end.lat); printf("POINT(%.9g %.9g)\n", g.lon, g.lat); printf("\nDISTANCE == %.8g\n", d); #endif CU_ASSERT_DOUBLE_EQUAL(d, M_PI / 90.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(closest.lat, 0.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(closest.lon, 0.0, 0.00001); /* Ticket #2351 */ edge_set(149.386990599235, -26.3567415843982, 149.386990599247, -26.3567415843965, &e); point_set(149.386990599235, -26.3567415843982, &g); d = edge_distance_to_point(&e, &g, &closest); CU_ASSERT_DOUBLE_EQUAL(d, 0.0, 0.00001); // printf("CLOSE POINT(%g %g)\n", closest.lon, closest.lat); // printf(" ORIG POINT(%g %g)\n", g.lon, g.lat); CU_ASSERT_DOUBLE_EQUAL(g.lat, closest.lat, 0.00001); CU_ASSERT_DOUBLE_EQUAL(g.lon, closest.lon, 0.00001); } static void test_edge_distance_to_edge(void) { GEOGRAPHIC_EDGE e1, e2; GEOGRAPHIC_POINT c1, c2; double d; /* closest point at origin, one degree away */ edge_set(-50.0, 0.0, 50.0, 0.0, &e1); edge_set(-5.0, 20.0, 0.0, 1.0, &e2); d = edge_distance_to_edge(&e1, &e2, &c1, &c2); #if 0 printf("LINESTRING(%.8g %.8g, %.8g %.8g)\n", e1.start.lon, e1.start.lat, e1.end.lon, e1.end.lat); printf("LINESTRING(%.8g %.8g, %.8g %.8g)\n", e2.start.lon, e2.start.lat, e2.end.lon, e2.end.lat); printf("\nDISTANCE == %.8g\n", d); #endif CU_ASSERT_DOUBLE_EQUAL(d, M_PI / 180.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(c1.lat, 0.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(c2.lat, M_PI / 180.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(c1.lon, 0.0, 0.00001); CU_ASSERT_DOUBLE_EQUAL(c2.lon, 0.0, 0.00001); } /* * Build LWGEOM on top of *aligned* structure so we can use the read-only * point access methods on them. */ static LWGEOM* lwgeom_over_gserialized(char *wkt, GSERIALIZED **g) { LWGEOM *lwg; lwg = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); FLAGS_SET_GEODETIC(lwg->flags, 1); *g = gserialized_from_lwgeom(lwg, 1, 0); lwgeom_free(lwg); return lwgeom_from_gserialized(*g); } static void test_lwgeom_check_geodetic(void) { LWGEOM *geom; int i = 0; char ewkt[][512] = { "POINT(0 0.2)", "LINESTRING(-1 -1,-1 2.5,2 2,2 -1)", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", "POINT(0 220.2)", "LINESTRING(-1 -1,-1231 2.5,2 2,2 -1)", "SRID=1;MULTILINESTRING((-1 -131,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -133,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,211 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1111 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", }; for ( i = 0; i < 6; i++ ) { GSERIALIZED *g; geom = lwgeom_over_gserialized(ewkt[i], &g); CU_ASSERT_EQUAL(lwgeom_check_geodetic(geom), LW_TRUE); lwgeom_free(geom); lwfree(g); } for ( i = 6; i < 12; i++ ) { GSERIALIZED *g; //char *out_ewkt; geom = lwgeom_over_gserialized(ewkt[i], &g); CU_ASSERT_EQUAL(lwgeom_check_geodetic(geom), LW_FALSE); //out_ewkt = lwgeom_to_ewkt(geom); //printf("%s\n", out_ewkt); lwgeom_free(geom); lwfree(g); } } /* static void test_gbox_calculation(void) { LWGEOM *geom; int i = 0; GBOX *gbox = gbox_new(gflags(0,0,0)); BOX3D *box3d; char ewkt[][512] = { "POINT(0 0.2)", "LINESTRING(-1 -1,-1 2.5,2 2,2 -1)", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", "POINT(0 220.2)", "LINESTRING(-1 -1,-1231 2.5,2 2,2 -1)", "SRID=1;MULTILINESTRING((-1 -131,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -133,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,211 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1111 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", }; for ( i = 0; i < 6; i++ ) { GSERIALIZED *g; geom = lwgeom_over_gserialized(ewkt[i], &g); lwgeom_calculate_gbox_cartesian(geom, gbox); box3d = lwgeom_compute_box3d(geom); //printf("%g %g\n", gbox->xmin, box3d->xmin); CU_ASSERT_EQUAL(gbox->xmin, box3d->xmin); CU_ASSERT_EQUAL(gbox->xmax, box3d->xmax); CU_ASSERT_EQUAL(gbox->ymin, box3d->ymin); CU_ASSERT_EQUAL(gbox->ymax, box3d->ymax); lwgeom_free(geom); lwfree(box3d); lwfree(g); } lwfree(gbox); } */ static void test_gserialized_from_lwgeom(void) { LWGEOM *geom; GSERIALIZED *g; uint32_t type; double *inspect; /* To poke right into the blob. */ geom = lwgeom_from_wkt("POINT(0 0.2)", LW_PARSER_CHECK_NONE); FLAGS_SET_GEODETIC(geom->flags, 1); g = gserialized_from_lwgeom(geom, 1, 0); type = gserialized_get_type(g); CU_ASSERT_EQUAL( type, POINTTYPE ); inspect = (double*)g; CU_ASSERT_EQUAL(inspect[3], 0.2); lwgeom_free(geom); lwfree(g); geom = lwgeom_from_wkt("POLYGON((-1 -1, -1 2.5, 2 2, 2 -1, -1 -1), (0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE); FLAGS_SET_GEODETIC(geom->flags, 1); g = gserialized_from_lwgeom(geom, 1, 0); type = gserialized_get_type(g); CU_ASSERT_EQUAL( type, POLYGONTYPE ); inspect = (double*)g; CU_ASSERT_EQUAL(inspect[9], 2.5); lwgeom_free(geom); lwfree(g); geom = lwgeom_from_wkt("MULTILINESTRING((0 0, 1 1),(0 0.1, 1 1))", LW_PARSER_CHECK_NONE); FLAGS_SET_GEODETIC(geom->flags, 1); g = gserialized_from_lwgeom(geom, 1, 0); type = gserialized_get_type(g); CU_ASSERT_EQUAL( type, MULTILINETYPE ); inspect = (double*)g; CU_ASSERT_EQUAL(inspect[12], 0.1); lwgeom_free(geom); lwfree(g); } static void test_ptarray_contains_point_sphere(void) { LWGEOM *lwg; LWPOLY *poly; POINT2D pt_to_test; POINT2D pt_outside; int result; /* Small polygon and huge distance between outside point and close-but-not-quite-inside point. Should return LW_FALSE. Pretty degenerate case. */ lwg = lwgeom_from_hexwkb("0103000020E61000000100000025000000ACAD6F91DDB65EC03F84A86D57264540CCABC279DDB65EC0FCE6926B57264540B6DEAA62DDB65EC0A79F6B63572645402E0BE84CDDB65EC065677155572645405D0B1D39DDB65EC0316310425726454082B5DB27DDB65EC060A4E12957264540798BB619DDB65EC0C393A10D57264540D4BC160FDDB65EC0BD0320EE56264540D7AC4E08DDB65EC096C862CC56264540AFD29205DDB65EC02A1F68A956264540363AFA06DDB65EC0722E418656264540B63A780CDDB65EC06E9B0064562645409614E215DDB65EC0E09DA84356264540FF71EF22DDB65EC0B48145265626454036033F33DDB65EC081B8A60C5626454066FB4546DDB65EC08A47A6F7552645409061785BDDB65EC0F05AE0E755264540D4B63772DDB65EC05C86CEDD55264540D2E4C689DDB65EC09B6EBFD95526454082E573A1DDB65EC0C90BD5DB552645401ABE85B8DDB65EC06692FCE35526454039844ECEDDB65EC04D8AF6F155264540928319E2DDB65EC0AD8D570556264540D31055F3DDB65EC02D618F1D56264540343B7A01DEB65EC0EB70CF3956264540920A1A0CDEB65EC03B00515956264540911BE212DEB65EC0E43A0E7B56264540E3F69D15DEB65EC017E4089E562645408D903614DEB65EC0F0D42FC1562645402191B80EDEB65EC0586870E35626454012B84E05DEB65EC09166C80357264540215B41F8DDB65EC08F832B21572645408392F7E7DDB65EC01138C13A57264540F999F0D4DDB65EC0E4A9C14F57264540AC3FB8BFDDB65EC0EED6875F57264540D3DCFEA8DDB65EC04F6C996957264540ACAD6F91DDB65EC03F84A86D57264540", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = -122.819436560680316; pt_to_test.y = 42.2702301207017328; pt_outside.x = 120.695136159150778; pt_outside.y = 40.6920926049588516; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_FALSE); lwgeom_free(lwg); /* Point on ring between vertexes case */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.1; pt_to_test.y = 1.05; pt_outside.x = 1.2; pt_outside.y = 1.05; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Simple containment case */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.05; pt_to_test.y = 1.05; pt_outside.x = 1.2; pt_outside.y = 1.15; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Less Simple containment case. */ /* Interior point quite close to boundary and stab line going through bottom edge vertex */ /* This breaks the "extend-it" trick of handling vertex crossings */ /* It should also break the "lowest end" trick. */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.0, 1.05 0.95, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.05; pt_to_test.y = 1.00; pt_outside.x = 1.05; pt_outside.y = 0.5; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Simple noncontainment case */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.05; pt_to_test.y = 1.15; pt_outside.x = 1.2; pt_outside.y = 1.2; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_FALSE); lwgeom_free(lwg); /* Harder noncontainment case */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.05; pt_to_test.y = 0.9; pt_outside.x = 1.2; pt_outside.y = 1.05; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_FALSE); lwgeom_free(lwg); /* Harder containment case */ lwg = lwgeom_from_wkt("POLYGON((0 0, 0 2, 1 2, 0 3, 2 3, 0 4, 3 5, 0 6, 6 10, 6 1, 0 0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.0; pt_to_test.y = 1.0; pt_outside.x = 1.0; pt_outside.y = 10.0; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Point on ring at first vertex case */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.0; pt_to_test.y = 1.0; pt_outside.x = 1.2; pt_outside.y = 1.05; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Point on ring at vertex case */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.0; pt_to_test.y = 1.1; pt_outside.x = 1.2; pt_outside.y = 1.05; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Co-linear crossing case for point-in-polygon test, should return LW_TRUE */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.2, 1.2 1.2, 1.2 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.1; pt_to_test.y = 1.05; pt_outside.x = 1.1; pt_outside.y = 1.3; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Co-linear grazing case for point-in-polygon test, should return LW_FALSE */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.2, 1.2 1.2, 1.2 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.0; pt_to_test.y = 0.0; pt_outside.x = 1.0; pt_outside.y = 2.0; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_FALSE); lwgeom_free(lwg); /* Grazing case for point-in-polygon test, should return LW_FALSE */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 2.0, 1.5 1.5, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.5; pt_to_test.y = 1.0; pt_outside.x = 1.5; pt_outside.y = 2.0; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_FALSE); lwgeom_free(lwg); /* Grazing case at first point for point-in-polygon test, should return LW_FALSE */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 2.0 3.0, 2.0 0.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.0; pt_to_test.y = 0.0; pt_outside.x = 1.0; pt_outside.y = 2.0; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_FALSE); lwgeom_free(lwg); /* Outside multi-crossing case for point-in-polygon test, should return LW_FALSE */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.2, 1.2 1.2, 1.2 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 0.99; pt_to_test.y = 0.99; pt_outside.x = 1.21; pt_outside.y = 1.21; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_FALSE); lwgeom_free(lwg); /* Inside multi-crossing case for point-in-polygon test, should return LW_TRUE */ lwg = lwgeom_from_wkt("POLYGON((1.0 1.0, 1.0 1.1, 1.1 1.1, 1.1 1.2, 1.2 1.2, 1.2 1.0, 1.0 1.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 1.11; pt_to_test.y = 1.11; pt_outside.x = 1.21; pt_outside.y = 1.21; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Point on vertex of ring */ lwg = lwgeom_from_wkt("POLYGON((-9 50,51 -11,-10 50,-9 50))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = -10.0; pt_to_test.y = 50.0; pt_outside.x = -10.2727799838316134; pt_outside.y = -16.9370033133329976; result = ptarray_contains_point_sphere(poly->rings[0], &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); } static void test_lwpoly_covers_point2d(void) { LWPOLY *poly; LWGEOM *lwg; POINT2D pt_to_test; int result; lwg = lwgeom_from_wkt("POLYGON((-9 50,51 -11,-10 50,-9 50))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = -10.0; pt_to_test.y = 50.0; result = lwpoly_covers_point2d(poly, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); /* Great big ring */ lwg = lwgeom_from_wkt("POLYGON((-40.0 52.0, 102.0 -6.0, -67.0 -29.0, -40.0 52.0))", LW_PARSER_CHECK_NONE); poly = (LWPOLY*)lwg; pt_to_test.x = 4.0; pt_to_test.y = 11.0; result = lwpoly_covers_point2d(poly, &pt_to_test); CU_ASSERT_EQUAL(result, LW_TRUE); lwgeom_free(lwg); } static void test_ptarray_contains_point_sphere_iowa(void) { LWGEOM *lwg = lwgeom_from_wkt(iowa_data, LW_PARSER_CHECK_NONE); LWPOLY *poly = (LWPOLY*)lwg; POINTARRAY *pa = poly->rings[0]; POINT2D pt_outside, pt_to_test; int rv; pt_to_test.x = -95.900000000000006; pt_to_test.y = 42.899999999999999; pt_outside.x = -96.381873780830645; pt_outside.y = 40.185394449416371; rv = ptarray_contains_point_sphere(pa, &pt_outside, &pt_to_test); CU_ASSERT_EQUAL(rv, LW_TRUE); lwgeom_free(lwg); } static void test_lwgeom_distance_sphere(void) { LWGEOM *lwg1, *lwg2; double d; SPHEROID s; /* Init and force spherical */ spheroid_init(&s, 6378137.0, 6356752.314245179498); s.a = s.b = s.radius; /* Line/line distance, 1 degree apart */ lwg1 = lwgeom_from_wkt("LINESTRING(-30 10, -20 5, -10 3, 0 1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("LINESTRING(-10 -5, -5 0, 5 0, 10 -5)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, s.radius * M_PI / 180.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Line/line distance, crossing, 0.0 apart */ lwg1 = lwgeom_from_wkt("LINESTRING(-30 10, -20 5, -10 3, 0 1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("LINESTRING(-10 -5, -5 20, 5 0, 10 -5)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 0.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Line/point distance, 1 degree apart */ lwg1 = lwgeom_from_wkt("POINT(-4 1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("LINESTRING(-10 -5, -5 0, 5 0, 10 -5)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, s.radius * M_PI / 180.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); lwg1 = lwgeom_from_wkt("POINT(-4 1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(-4 -1)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, s.radius * M_PI / 90.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Poly/point distance, point inside polygon, 0.0 apart */ lwg1 = lwgeom_from_wkt("POLYGON((-4 1, -3 5, 1 2, 1.5 -5, -4 1))", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(-1 -1)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 0.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Poly/point distance, point inside polygon hole, 1 degree apart */ lwg1 = lwgeom_from_wkt("POLYGON((-4 -4, -4 4, 4 4, 4 -4, -4 -4), (-2 -2, -2 2, 2 2, 2 -2, -2 -2))", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(-1 -1)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 111178.142466, 0.1); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Poly/point distance, point on hole boundary, 0.0 apart */ lwg1 = lwgeom_from_wkt("POLYGON((-4 -4, -4 4, 4 4, 4 -4, -4 -4), (-2 -2, -2 2, 2 2, 2 -2, -2 -2))", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(2 2)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 0.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Medford test case #1 */ lwg1 = lwgeom_from_hexwkb("0105000020E610000001000000010200000002000000EF7B8779C7BD5EC0FD20D94B852845400E539C62B9BD5EC0F0A5BE767C284540", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_hexwkb("0106000020E61000000100000001030000000100000007000000280EC3FB8CCA5EC0A5CDC747233C45402787C8F58CCA5EC0659EA2761E3C45400CED58DF8FCA5EC0C37FAE6E1E3C4540AE97B8E08FCA5EC00346F58B1F3C4540250359FD8ECA5EC05460628E1F3C45403738F4018FCA5EC05DC84042233C4540280EC3FB8CCA5EC0A5CDC747233C4540", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 23630.8003, 0.1); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Ticket #2351 */ lwg1 = lwgeom_from_wkt("LINESTRING(149.386990599235 -26.3567415843982,149.386990599247 -26.3567415843965)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POINT(149.386990599235 -26.3567415843982)", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 0.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Ticket #2638, no "M" */ lwg1 = lwgeom_from_wkt("LINESTRING (-41.0821 50.3036,50 -41)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 0.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); /* Ticket #2638, with "M" */ lwg1 = lwgeom_from_wkt("LINESTRING M (-41.0821 50.3036 1,50 -41 1)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_from_wkt("POLYGON M ((0 0 2,10 0 1,10 10 -2,0 10 -5,0 0 -5),(5 5 6,7 5 6,7 7 6,5 7 10,5 5 -2))", LW_PARSER_CHECK_NONE); d = lwgeom_distance_spheroid(lwg1, lwg2, &s, 0.0); CU_ASSERT_DOUBLE_EQUAL(d, 0.0, 0.00001); lwgeom_free(lwg1); lwgeom_free(lwg2); } static void test_spheroid_distance(void) { GEOGRAPHIC_POINT g1, g2; double d; SPHEROID s; /* Init to WGS84 */ spheroid_init(&s, 6378137.0, 6356752.314245179498); /* One vertical degree */ point_set(0.0, 0.0, &g1); point_set(0.0, 1.0, &g2); d = spheroid_distance(&g1, &g2, &s); CU_ASSERT_DOUBLE_EQUAL(d, 110574.388615329, 0.001); /* Ten horizontal degrees */ point_set(-10.0, 0.0, &g1); point_set(0.0, 0.0, &g2); d = spheroid_distance(&g1, &g2, &s); CU_ASSERT_DOUBLE_EQUAL(d, 1113194.90793274, 0.001); /* One horizonal degree */ point_set(-1.0, 0.0, &g1); point_set(0.0, 0.0, &g2); d = spheroid_distance(&g1, &g2, &s); CU_ASSERT_DOUBLE_EQUAL(d, 111319.490779, 0.001); /* Around world w/ slight bend */ point_set(-180.0, 0.0, &g1); point_set(0.0, 1.0, &g2); d = spheroid_distance(&g1, &g2, &s); CU_ASSERT_DOUBLE_EQUAL(d, 19893357.0704483, 0.001); /* Up to pole */ point_set(-180.0, 0.0, &g1); point_set(0.0, 90.0, &g2); d = spheroid_distance(&g1, &g2, &s); CU_ASSERT_DOUBLE_EQUAL(d, 10001965.7295318, 0.001); } static void test_spheroid_area(void) { LWGEOM *lwg; GBOX gbox; double a1, a2; SPHEROID s; /* Init to WGS84 */ spheroid_init(&s, WGS84_MAJOR_AXIS, WGS84_MINOR_AXIS); gbox.flags = gflags(0, 0, 1); /* Medford lot test polygon */ lwg = lwgeom_from_wkt("POLYGON((-122.848227067007 42.5007249610493,-122.848309475585 42.5007179884263,-122.848327688675 42.500835880696,-122.848245279942 42.5008428533324,-122.848227067007 42.5007249610493))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); a1 = lwgeom_area_sphere(lwg, &s); a2 = lwgeom_area_spheroid(lwg, &s); //printf("\nsphere: %.12g\nspheroid: %.12g\n", a1, a2); CU_ASSERT_DOUBLE_EQUAL(a1, 89.7127703297, 0.1); /* sphere */ CU_ASSERT_DOUBLE_EQUAL(a2, 89.8684316032, 0.1); /* spheroid */ lwgeom_free(lwg); /* Big-ass polygon */ lwg = lwgeom_from_wkt("POLYGON((-2 3, -2 4, -1 4, -1 3, -2 3))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); a1 = lwgeom_area_sphere(lwg, &s); a2 = lwgeom_area_spheroid(lwg, &s); //printf("\nsphere: %.12g\nspheroid: %.12g\n", a1, a2); CU_ASSERT_DOUBLE_EQUAL(a1, 12341436880.1, 10.0); /* sphere */ CU_ASSERT_DOUBLE_EQUAL(a2, 12286574431.9, 10.0); /* spheroid */ lwgeom_free(lwg); /* One-degree square */ lwg = lwgeom_from_wkt("POLYGON((8.5 2,8.5 1,9.5 1,9.5 2,8.5 2))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); a1 = lwgeom_area_sphere(lwg, &s); a2 = lwgeom_area_spheroid(lwg, &s); //printf("\nsphere: %.12g\nspheroid: %.12g\n", a1, a2); CU_ASSERT_DOUBLE_EQUAL(a1, 12360265021.1, 10.0); /* sphere */ CU_ASSERT_DOUBLE_EQUAL(a2, 12304814950.073, 100.0); /* spheroid */ lwgeom_free(lwg); /* One-degree square *near* dateline */ lwg = lwgeom_from_wkt("POLYGON((179.5 2,179.5 1,178.5 1,178.5 2,179.5 2))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); a1 = lwgeom_area_sphere(lwg, &s); a2 = lwgeom_area_spheroid(lwg, &s); //printf("\nsphere: %.12g\nspheroid: %.12g\n", a1, a2); CU_ASSERT_DOUBLE_EQUAL(a1, 12360265021.1, 10.0); /* sphere */ CU_ASSERT_DOUBLE_EQUAL(a2, 12304814950.073, 100.0); /* spheroid */ lwgeom_free(lwg); /* One-degree square *across* dateline */ lwg = lwgeom_from_wkt("POLYGON((179.5 2,179.5 1,-179.5 1,-179.5 2,179.5 2))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); a1 = lwgeom_area_sphere(lwg, &s); a2 = lwgeom_area_spheroid(lwg, &s); //printf("\nsphere: %.12g\nspheroid: %.12g\n", a1, a2); CU_ASSERT_DOUBLE_EQUAL(a1, 12360265021.3679, 10.0); /* sphere */ CU_ASSERT_DOUBLE_EQUAL(a2, 12304814950.073, 100.0); /* spheroid */ lwgeom_free(lwg); } static void test_gbox_utils(void) { LWGEOM *lwg; GBOX gbox; double a1, a2; SPHEROID s; POINT2D pt; /* Init to WGS84 */ spheroid_init(&s, WGS84_MAJOR_AXIS, WGS84_MINOR_AXIS); gbox.flags = gflags(0, 0, 1); /* One-degree square by equator */ lwg = lwgeom_from_wkt("POLYGON((1 20,1 21,2 21,2 20,1 20))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); a1 = gbox_angular_width(&gbox); a2 = gbox_angular_height(&gbox); CU_ASSERT_DOUBLE_EQUAL(a1, 0.0177951, 0.0000001); CU_ASSERT_DOUBLE_EQUAL(a2, 0.017764, 0.0000001); lwgeom_free(lwg); /* One-degree square *across* dateline */ lwg = lwgeom_from_wkt("POLYGON((179.5 2,179.5 1,-179.5 1,-179.5 2,179.5 2))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); a1 = gbox_angular_width(&gbox); a2 = gbox_angular_height(&gbox); //printf("a1=%g a2=%g\n", a1, a2); CU_ASSERT_DOUBLE_EQUAL(a1, 0.0174613, 0.0000001); CU_ASSERT_DOUBLE_EQUAL(a2, 0.0174553, 0.0000001); lwgeom_free(lwg); /* One-degree square *across* dateline */ lwg = lwgeom_from_wkt("POLYGON((178.5 2,178.5 1,-179.5 1,-179.5 2,178.5 2))", LW_PARSER_CHECK_NONE); lwgeom_calculate_gbox_geodetic(lwg, &gbox); gbox_centroid(&gbox, &pt); //printf("POINT(%g %g)\n", pt.x, pt.y); CU_ASSERT_DOUBLE_EQUAL(pt.x, 179.5, 0.0001); CU_ASSERT_DOUBLE_EQUAL(pt.y, 1.50024, 0.0001); lwgeom_free(lwg); } static void test_vector_angle(void) { POINT3D p1, p2; double angle; memset(&p1, 0, sizeof(POINT3D)); memset(&p2, 0, sizeof(POINT3D)); p1.x = 1.0; p2.y = 1.0; angle = vector_angle(&p1, &p2); CU_ASSERT_DOUBLE_EQUAL(angle, M_PI/2, 0.00001); p1.x = p2.y = 0.0; p1.y = 1.0; p2.x = 1.0; angle = vector_angle(&p1, &p2); CU_ASSERT_DOUBLE_EQUAL(angle, M_PI/2, 0.00001); p2.y = p2.x = 1.0; normalize(&p2); angle = vector_angle(&p1, &p2); CU_ASSERT_DOUBLE_EQUAL(angle, M_PI/4, 0.00001); p2.x = p2.y = p2.z = 1.0; normalize(&p2); angle = vector_angle(&p1, &p2); CU_ASSERT_DOUBLE_EQUAL(angle, 0.955317, 0.00001); //printf ("angle = %g\n\n", angle); } static void test_vector_rotate(void) { POINT3D p1, p2, n; double angle; memset(&p1, 0, sizeof(POINT3D)); memset(&p2, 0, sizeof(POINT3D)); memset(&n, 0, sizeof(POINT3D)); p1.x = 1.0; p2.y = 1.0; angle = M_PI/4; vector_rotate(&p1, &p2, angle, &n); //printf("%g %g %g\n\n", n.x, n.y, n.z); CU_ASSERT_DOUBLE_EQUAL(n.x, 0.707107, 0.00001); angle = 2*M_PI/400000000; vector_rotate(&p1, &p2, angle, &n); //printf("%.21g %.21g %.21g\n\n", n.x, n.y, n.z); CU_ASSERT_DOUBLE_EQUAL(n.x, 0.999999999999999888978, 0.0000000000000001); CU_ASSERT_DOUBLE_EQUAL(n.y, 1.57079632679489654446e-08, 0.0000000000000001); angle = 0; vector_rotate(&p1, &p2, angle, &n); //printf("%.16g %.16g %.16g\n\n", n.x, n.y, n.z); CU_ASSERT_DOUBLE_EQUAL(n.x, 1.0, 0.00000001); } static void test_lwgeom_segmentize_sphere(void) { LWGEOM *lwg1, *lwg2; LWLINE *lwl; double max = 100000.0 / WGS84_RADIUS; //char *wkt; /* Simple case */ lwg1 = lwgeom_from_wkt("LINESTRING(0 20, 5 20)", LW_PARSER_CHECK_NONE); lwg2 = lwgeom_segmentize_sphere(lwg1, max); lwl = (LWLINE*)lwg2; //wkt = lwgeom_to_ewkt(lwg2); CU_ASSERT_EQUAL(lwl->points->npoints, 7); lwgeom_free(lwg1); lwgeom_free(lwg2); //lwfree(wkt); return; } static void test_lwgeom_area_sphere(void) { LWGEOM *lwg; double area; SPHEROID s; /* Init to WGS84 */ spheroid_init(&s, WGS84_MAJOR_AXIS, WGS84_MINOR_AXIS); /* Simple case */ lwg = lwgeom_from_wkt("POLYGON((1 1, 1 2, 2 2, 2 1, 1 1))", LW_PARSER_CHECK_NONE); area = lwgeom_area_sphere(lwg, &s); CU_ASSERT_DOUBLE_EQUAL(area, 12360265021.3561, 1.0); lwgeom_free(lwg); return; } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo geodetic_tests[] = { PG_TEST(test_sphere_direction), PG_TEST(test_sphere_project), PG_TEST(test_lwgeom_area_sphere), PG_TEST(test_signum), PG_TEST(test_gbox_from_spherical_coordinates), PG_TEST(test_gserialized_get_gbox_geocentric), PG_TEST(test_clairaut), PG_TEST(test_edge_intersection), PG_TEST(test_edge_intersects), PG_TEST(test_edge_distance_to_point), PG_TEST(test_edge_distance_to_edge), PG_TEST(test_lwgeom_distance_sphere), PG_TEST(test_lwgeom_check_geodetic), PG_TEST(test_gserialized_from_lwgeom), PG_TEST(test_spheroid_distance), PG_TEST(test_spheroid_area), PG_TEST(test_lwpoly_covers_point2d), PG_TEST(test_gbox_utils), PG_TEST(test_vector_angle), PG_TEST(test_vector_rotate), PG_TEST(test_lwgeom_segmentize_sphere), PG_TEST(test_ptarray_contains_point_sphere), PG_TEST(test_ptarray_contains_point_sphere_iowa), CU_TEST_INFO_NULL }; CU_SuiteInfo geodetic_suite = {"Geodetic Suite", NULL, NULL, geodetic_tests}; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_print.c��������������������������������������������������0000644�0000000�0000000�00000031434�11722777314�020672� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_print.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void test_lwprint_assert_format(char * point_wkt, const char * format, const char * expected) { LWPOINT * test_point = (LWPOINT*)lwgeom_from_wkt(point_wkt, LW_PARSER_CHECK_NONE); int num_old_failures, num_new_failures; char * actual; cu_error_msg_reset(); actual = lwpoint_to_latlon(test_point, format); if (0 != strlen(cu_error_msg)) { printf("\nAssert failed:\n\tFormat [%s] generated an error: %s\n", format, cu_error_msg); CU_FAIL(); } num_old_failures = CU_get_number_of_failures(); CU_ASSERT_STRING_EQUAL(actual, expected); num_new_failures = CU_get_number_of_failures(); if (num_new_failures > num_old_failures) { printf("\nAssert failed:\n\t%s\t(actual)\n\t%s\t(expected)\n", actual, expected); } lwfree(actual); lwpoint_free(test_point); } static void test_lwprint_assert_error(char * point_wkt, const char * format) { LWPOINT * test_point = (LWPOINT*)lwgeom_from_wkt(point_wkt, LW_PARSER_CHECK_NONE); cu_error_msg_reset(); char* tmp = lwpoint_to_latlon(test_point, format); lwfree(tmp); if (0 == strlen(cu_error_msg)) { printf("\nAssert failed:\n\tFormat [%s] did not generate an error.\n", format); CU_FAIL(); } else { cu_error_msg_reset(); } lwpoint_free(test_point); } /* ** Test points around the globe using the default format. Null and empty string both mean use the default. */ static void test_lwprint_default_format(void) { test_lwprint_assert_format("POINT(0 0)", NULL, "0\xC2\xB0""0'0.000\"N 0\xC2\xB0""0'0.000\"E"); test_lwprint_assert_format("POINT(45.4545 12.34567)", "" , "12\xC2\xB0""20'44.412\"N 45\xC2\xB0""27'16.200\"E"); test_lwprint_assert_format("POINT(180 90)", NULL, "90\xC2\xB0""0'0.000\"N 180\xC2\xB0""0'0.000\"E"); test_lwprint_assert_format("POINT(181 91)", "" , "89\xC2\xB0""0'0.000\"N 1\xC2\xB0""0'0.000\"E"); test_lwprint_assert_format("POINT(180.0001 90.0001)", NULL, "89\xC2\xB0""59'59.640\"N 0\xC2\xB0""0'0.360\"E"); test_lwprint_assert_format("POINT(45.4545 -12.34567)", "" , "12\xC2\xB0""20'44.412\"S 45\xC2\xB0""27'16.200\"E"); test_lwprint_assert_format("POINT(180 -90)", NULL, "90\xC2\xB0""0'0.000\"S 180\xC2\xB0""0'0.000\"E"); test_lwprint_assert_format("POINT(181 -91)", "" , "89\xC2\xB0""0'0.000\"S 1\xC2\xB0""0'0.000\"E"); test_lwprint_assert_format("POINT(180.0001 -90.0001)", NULL, "89\xC2\xB0""59'59.640\"S 0\xC2\xB0""0'0.360\"E"); test_lwprint_assert_format("POINT(-45.4545 12.34567)", "" , "12\xC2\xB0""20'44.412\"N 45\xC2\xB0""27'16.200\"W"); test_lwprint_assert_format("POINT(-180 90)", NULL, "90\xC2\xB0""0'0.000\"N 180\xC2\xB0""0'0.000\"W"); test_lwprint_assert_format("POINT(-181 91)", "" , "89\xC2\xB0""0'0.000\"N 1\xC2\xB0""0'0.000\"W"); test_lwprint_assert_format("POINT(-180.0001 90.0001)", NULL, "89\xC2\xB0""59'59.640\"N 0\xC2\xB0""0'0.360\"W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "" , "12\xC2\xB0""20'44.412\"S 45\xC2\xB0""27'16.200\"W"); test_lwprint_assert_format("POINT(-180 -90)", NULL, "90\xC2\xB0""0'0.000\"S 180\xC2\xB0""0'0.000\"W"); test_lwprint_assert_format("POINT(-181 -91)", "" , "89\xC2\xB0""0'0.000\"S 1\xC2\xB0""0'0.000\"W"); test_lwprint_assert_format("POINT(-180.0001 -90.0001)", NULL, "89\xC2\xB0""59'59.640\"S 0\xC2\xB0""0'0.360\"W"); test_lwprint_assert_format("POINT(-2348982391.123456 -238749827.34879)", "" , "12\xC2\xB0""39'4.356\"N 31\xC2\xB0""7'24.442\"W"); } /* * Test all possible combinations of the orders of the parameters. */ static void test_lwprint_format_orders(void) { test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "C DD MM SS", "S 12 20 44 W 45 27 16"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "C DD SS MM", "S 12 44 20 W 45 16 27"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "C MM DD SS", "S 20 12 44 W 27 45 16"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "C MM SS DD", "S 20 44 12 W 27 16 45"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "C SS DD MM", "S 44 12 20 W 16 45 27"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "C SS MM DD", "S 44 20 12 W 16 27 45"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD C MM SS", "12 S 20 44 45 W 27 16"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD C SS MM", "12 S 44 20 45 W 16 27"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "MM C DD SS", "20 S 12 44 27 W 45 16"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "MM C SS DD", "20 S 44 12 27 W 16 45"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "SS C DD MM", "44 S 12 20 16 W 45 27"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "SS C MM DD", "44 S 20 12 16 W 27 45"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD MM C SS", "12 20 S 44 45 27 W 16"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD SS C MM", "12 44 S 20 45 16 W 27"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "MM DD C SS", "20 12 S 44 27 45 W 16"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "MM SS C DD", "20 44 S 12 27 16 W 45"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "SS DD C MM", "44 12 S 20 16 45 W 27"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "SS MM C DD", "44 20 S 12 16 27 W 45"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD MM SS C", "12 20 44 S 45 27 16 W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD SS MM C", "12 44 20 S 45 16 27 W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "MM DD SS C", "20 12 44 S 27 45 16 W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "MM SS DD C", "20 44 12 S 27 16 45 W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "SS DD MM C", "44 12 20 S 16 45 27 W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "SS MM DD C", "44 20 12 S 16 27 45 W"); } /* * Test with and without the optional parameters. */ static void test_lwprint_optional_format(void) { test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.DDD", "-12.346 -45.455"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.DDD C", "12.346 S 45.455 W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.DDD MM.MMM", "-12.000 20.740 -45.000 27.270"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.DDD MM.MMM C", "12.000 20.740 S 45.000 27.270 W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.DDD MM.MMM SS.SSS", "-12.000 20.000 44.412 -45.000 27.000 16.200"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.DDD MM.MMM SS.SSS C", "12.000 20.000 44.412 S 45.000 27.000 16.200 W"); } static void test_lwprint_oddball_formats(void) { test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.DDDMM.MMMSS.SSSC", "12.00020.00044.412S 45.00027.00016.200W"); test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DDMM.MMM", "-1220.740 -4527.270"); /* "##." will be printed as "##" */ test_lwprint_assert_format("POINT(-45.4545 -12.34567)", "DD.MM.MMM", "-1220.740 -4527.270"); } /* * Test using formats that should produce errors. */ static void test_lwprint_bad_formats(void) { test_lwprint_assert_error("POINT(1.23456 7.89012)", "DD.DDD SS.SSS"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "MM.MMM SS.SSS"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "DD.DDD SS.SSS DD"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "DD MM SS MM"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "DD MM SS SS"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "C DD.DDD C"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "C \xC2""DD.DDD"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "C DD.DDD \xC2"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "C DD\x80""MM "); test_lwprint_assert_error("POINT(1.23456 7.89012)", "C DD \xFF""MM"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "C DD \xB0""MM"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "DD.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"); test_lwprint_assert_error("POINT(1.23456 7.89012)", "DD.DDD jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj"); } /* ** Used by the test harness to register the tests in this file. */ CU_TestInfo print_tests[] = { PG_TEST(test_lwprint_default_format), PG_TEST(test_lwprint_format_orders), PG_TEST(test_lwprint_optional_format), PG_TEST(test_lwprint_oddball_formats), PG_TEST(test_lwprint_bad_formats), CU_TEST_INFO_NULL }; CU_SuiteInfo print_suite = {"print_suite", NULL, NULL, print_tests }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_stringbuffer.c�������������������������������������������0000644�0000000�0000000�00000002657�12064654150�022233� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2012 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "stringbuffer.h" #include "cu_tester.h" static void test_stringbuffer_append(void) { stringbuffer_t *sb; const char *str; sb = stringbuffer_create_with_size(2); stringbuffer_append(sb, "hello world"); str = stringbuffer_getstring(sb); CU_ASSERT_STRING_EQUAL("hello world", str); stringbuffer_destroy(sb); } static void test_stringbuffer_aprintf(void) { stringbuffer_t *sb; const char *str; sb = stringbuffer_create_with_size(2); stringbuffer_aprintf(sb, "hello %dth world", 14); str = stringbuffer_getstring(sb); CU_ASSERT_STRING_EQUAL("hello 14th world", str); stringbuffer_destroy(sb); } /* TODO: add more... */ /* ** Used by the test harness to register the tests in this file. */ CU_TestInfo stringbuffer_tests[] = { PG_TEST(test_stringbuffer_append), PG_TEST(test_stringbuffer_aprintf), CU_TEST_INFO_NULL }; CU_SuiteInfo stringbuffer_suite = {"stringbuffer", NULL, NULL, stringbuffer_tests }; ���������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_out_gml.c������������������������������������������������0000644�0000000�0000000�00000137737�12047044677�021221� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_gml.c 10661 2012-11-09 00:09:35Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2010 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_gml2_test(char * in, char * out, char * srs, int precision) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml2(g, srs, precision, "gml:"); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_gml2_test_prefix(char * in, char * out, char * srs, int precision, const char *prefix) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml2(g, srs, precision, prefix); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_gml3_test_opts(char * in, char * out, char * srs, int precision, int opts) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml3(g, srs, precision, opts, "gml:", NULL); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_gml3_test(char * in, char * out, char * srs, int precision, int is_geodetic) { LWGEOM *g; char *h; int opts = LW_GML_IS_DIMS; if ( is_geodetic ) opts |= LW_GML_IS_DEGREE; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml3(g, srs, precision, opts, "gml:", NULL); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_gml3_test_prefix(char * in, char * out, char * srs, int precision, int is_geodetic, const char *prefix) { LWGEOM *g; char *h; int opts = LW_GML_IS_DIMS; if ( is_geodetic ) opts |= LW_GML_IS_DEGREE; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml3(g, srs, precision, opts, prefix, NULL); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_gml3_test_nodims(char * in, char * out, char * srs, int precision, int is_geodetic, int is_dims, const char *prefix) { LWGEOM *g; char *h; int opts = 0; if ( is_geodetic ) opts |= LW_GML_IS_DEGREE; if ( is_dims ) opts |= LW_GML_IS_DIMS; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml3(g, srs, precision, opts, prefix, NULL); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_gml2_unsupported(char * in, char * out) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml2(g, NULL, 0, ""); if (strcmp(cu_error_msg, out)) fprintf(stderr, "\nGML 2 - In: %s\nOut: %s\nTheo: %s\n", in, cu_error_msg, out); CU_ASSERT_STRING_EQUAL(out, cu_error_msg); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void do_gml3_unsupported(char * in, char * out) { LWGEOM *g; char *h; int opts = LW_GML_IS_DIMS; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_gml3(g, NULL, 0, opts, "", NULL); if (strcmp(cu_error_msg, out)) fprintf(stderr, "\nGML 3 - In: %s\nOut: %s\nTheo: %s\n", in, cu_error_msg, out); CU_ASSERT_STRING_EQUAL(out, cu_error_msg); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void do_gml2_extent_test(char * in, char * out, char * srs, double precision, char * prefix) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_extent_to_gml2(g, srs, precision, prefix); if ( ! h ) h = strdup(cu_error_msg); if (strcmp(h, out)) fprintf(stderr, "\nEXT GML 2 - In: %s\nObt: %s\nExp: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(out, h); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void do_gml3_extent_test(char * in, char * out, char * srs, double precision, int opts, char* prefix) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_extent_to_gml3(g, srs, precision, opts, prefix); if ( ! h ) h = strdup(cu_error_msg); if (strcmp(h, out)) fprintf(stderr, "\nEXT GML 3 - In: %s\nObt: %s\nExp: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(out, h); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void out_gml_test_precision(void) { /* GML2 - 0 precision, i.e a round */ do_gml2_test( "POINT(1.1111111111111 1.1111111111111)", "<gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point>", NULL, 0); /* GML3 - 0 precision, i.e a round */ do_gml3_test( "POINT(1.1111111111111 1.1111111111111)", "<gml:Point><gml:pos srsDimension=\"2\">1 1</gml:pos></gml:Point>", NULL, 0, 0); /* GML2 - 3 digits precision */ do_gml2_test( "POINT(1.1111111111111 1.1111111111111)", "<gml:Point><gml:coordinates>1.111,1.111</gml:coordinates></gml:Point>", NULL, 3); /* GML3 - 3 digits precision */ do_gml3_test( "POINT(1.1111111111111 1.1111111111111)", "<gml:Point><gml:pos srsDimension=\"2\">1.111 1.111</gml:pos></gml:Point>", NULL, 3, 0); /* GML2 - 9 digits precision */ do_gml2_test( "POINT(1.2345678901234 1.2345678901234)", "<gml:Point><gml:coordinates>1.23456789,1.23456789</gml:coordinates></gml:Point>", NULL, 9); /* GML3 - 9 digits precision */ do_gml3_test( "POINT(1.2345678901234 1.2345678901234)", "<gml:Point><gml:pos srsDimension=\"2\">1.23456789 1.23456789</gml:pos></gml:Point>", NULL, 9, 0); /* GML2 - huge data */ do_gml2_test( "POINT(1E300 -1E300)", "<gml:Point><gml:coordinates>1e+300,-1e+300</gml:coordinates></gml:Point>", NULL, 0); /* GML3 - huge data */ do_gml3_test( "POINT(1E300 -1E300)", "<gml:Point><gml:pos srsDimension=\"2\">1e+300 -1e+300</gml:pos></gml:Point>", NULL, 0, 0); } static void out_gml_test_srid(void) { /* GML2 - Point with SRID */ do_gml2_test( "POINT(0 1)", "<gml:Point srsName=\"EPSG:4326\"><gml:coordinates>0,1</gml:coordinates></gml:Point>", "EPSG:4326", 0); /* GML3 - Point with SRID */ do_gml3_test( "POINT(0 1)", "<gml:Point srsName=\"EPSG:4326\"><gml:pos srsDimension=\"2\">0 1</gml:pos></gml:Point>", "EPSG:4326", 0, 0); /* GML2 - Linestring with SRID */ do_gml2_test( "LINESTRING(0 1,2 3,4 5)", "<gml:LineString srsName=\"EPSG:4326\"><gml:coordinates>0,1 2,3 4,5</gml:coordinates></gml:LineString>", "EPSG:4326", 0); /* GML3 - Linestring with SRID */ do_gml3_test( "LINESTRING(0 1,2 3,4 5)", "<gml:Curve srsName=\"EPSG:4326\"><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">0 1 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>", "EPSG:4326", 0, 0); /* GML3 - Linestring with SRID and short tag*/ do_gml3_test_opts( "LINESTRING(0 1,2 3,4 5)", "<gml:LineString srsName=\"EPSG:4326\"><gml:posList>0 1 2 3 4 5</gml:posList></gml:LineString>", "EPSG:4326", 0, LW_GML_SHORTLINE); /* GML2 Polygon with SRID */ do_gml2_test( "POLYGON((0 1,2 3,4 5,0 1))", "<gml:Polygon srsName=\"EPSG:4326\"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1 2,3 4,5 0,1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>", "EPSG:4326", 0); /* GML3 Polygon with SRID */ do_gml3_test( "POLYGON((0 1,2 3,4 5,0 1))", "<gml:Polygon srsName=\"EPSG:4326\"><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>", "EPSG:4326", 0, 0); /* GML2 MultiPoint with SRID */ do_gml2_test( "MULTIPOINT(0 1,2 3)", "<gml:MultiPoint srsName=\"EPSG:4326\"><gml:pointMember><gml:Point><gml:coordinates>0,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>", "EPSG:4326", 0); /* GML3 MultiPoint with SRID */ do_gml3_test( "MULTIPOINT(0 1,2 3)", "<gml:MultiPoint srsName=\"EPSG:4326\"><gml:pointMember><gml:Point><gml:pos srsDimension=\"2\">0 1</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos srsDimension=\"2\">2 3</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint>", "EPSG:4326", 0, 0); /* GML2 Multiline with SRID */ do_gml2_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<gml:MultiLineString srsName=\"EPSG:4326\"><gml:lineStringMember><gml:LineString><gml:coordinates>0,1 2,3 4,5</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>6,7 8,9 10,11</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>", "EPSG:4326", 0); /* GML3 Multiline with SRID */ do_gml3_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<gml:MultiCurve srsName=\"EPSG:4326\"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">0 1 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">6 7 8 9 10 11</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>", "EPSG:4326", 0, 0); /* GML3 Multiline with SRID and LineString tag */ do_gml3_test_opts( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<gml:MultiCurve srsName=\"EPSG:4326\"><gml:curveMember><gml:LineString><gml:posList>0 1 2 3 4 5</gml:posList></gml:LineString></gml:curveMember><gml:curveMember><gml:LineString><gml:posList>6 7 8 9 10 11</gml:posList></gml:LineString></gml:curveMember></gml:MultiCurve>", "EPSG:4326", 0, LW_GML_SHORTLINE); /* GML2 MultiPolygon with SRID */ do_gml2_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<gml:MultiPolygon srsName=\"EPSG:4326\"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1 2,3 4,5 0,1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,7 8,9 10,11 6,7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>", "EPSG:4326", 0); /* GML3 MultiPolygon with SRID */ do_gml3_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<gml:MultiSurface srsName=\"EPSG:4326\"><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>", "EPSG:4326", 0, 0); /* GML3 PolyhedralSurface with SRID */ do_gml3_test( "POLYHEDRALSURFACE(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<gml:PolyhedralSurface srsName=\"EPSG:4326\"><gml:polygonPatches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</gml:posList></gml:LinearRing></gml:exterior></gml:PolygonPatch></gml:polygonPatches></gml:PolyhedralSurface>", "EPSG:4326", 0, 0); /* GML3 Tin with SRID */ do_gml3_test( "TIN(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<gml:Tin srsName=\"EPSG:4326\"><gml:trianglePatches><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle><gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle></gml:trianglePatches></gml:Tin>", "EPSG:4326", 0, 0); /* GML2 GeometryCollection with SRID */ do_gml2_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<gml:MultiGeometry srsName=\"EPSG:4326\"><gml:geometryMember><gml:Point><gml:coordinates>0,1</gml:coordinates></gml:Point></gml:geometryMember><gml:geometryMember><gml:LineString><gml:coordinates>2,3 4,5</gml:coordinates></gml:LineString></gml:geometryMember></gml:MultiGeometry>", "EPSG:4326", 0); /* GML3 GeometryCollection with SRID */ do_gml3_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<gml:MultiGeometry srsName=\"EPSG:4326\"><gml:geometryMember><gml:Point><gml:pos srsDimension=\"2\">0 1</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember></gml:MultiGeometry>", "EPSG:4326", 0, 0); } static void out_gml_test_geodetic(void) { /* GML3 - Geodetic Point */ do_gml3_test( "POINT(0 1)", "<gml:Point srsName=\"urn:ogc:def:crs:EPSG::4326\"><gml:pos srsDimension=\"2\">1 0</gml:pos></gml:Point>", "urn:ogc:def:crs:EPSG::4326", 0, 1); /* GML3 - 3D Geodetic Point */ do_gml3_test( "POINT(0 1 2)", "<gml:Point srsName=\"urn:ogc:def:crs:EPSG::4326\"><gml:pos srsDimension=\"3\">1 0 2</gml:pos></gml:Point>", "urn:ogc:def:crs:EPSG::4326", 0, 1); } static void out_gml_test_dims(void) { /* GML2 - 3D */ do_gml2_test( "POINT(0 1 2)", "<gml:Point><gml:coordinates>0,1,2</gml:coordinates></gml:Point>", NULL, 0); /* GML3 - 3D */ do_gml3_test( "POINT(0 1 2)", "<gml:Point><gml:pos srsDimension=\"3\">0 1 2</gml:pos></gml:Point>", NULL, 0, 0); /* GML2 - 3DM */ do_gml2_test( "POINTM(0 1 2)", "<gml:Point><gml:coordinates>0,1</gml:coordinates></gml:Point>", NULL, 0); /* GML3 - 3DM */ do_gml3_test( "POINTM(0 1 2)", "<gml:Point><gml:pos srsDimension=\"2\">0 1</gml:pos></gml:Point>", NULL, 0, 0); /* GML2 - 4D */ do_gml2_test( "POINT(0 1 2 3)", "<gml:Point><gml:coordinates>0,1,2</gml:coordinates></gml:Point>", NULL, 0); /* GML3 - 4D */ do_gml3_test( "POINT(0 1 2 3)", "<gml:Point><gml:pos srsDimension=\"3\">0 1 2</gml:pos></gml:Point>", NULL, 0, 0); } static void out_gml_test_geoms(void) { /* GML2 - Linestring */ do_gml2_test( "LINESTRING(0 1,2 3,4 5)", "<gml:LineString><gml:coordinates>0,1 2,3 4,5</gml:coordinates></gml:LineString>", NULL, 0); /* GML3 - Linestring */ do_gml3_test( "LINESTRING(0 1,2 3,4 5)", "<gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">0 1 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>", NULL, 0, 0); /* GML2 Polygon */ do_gml2_test( "POLYGON((0 1,2 3,4 5,0 1))", "<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1 2,3 4,5 0,1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>", NULL, 0); /* GML3 Polygon */ do_gml3_test( "POLYGON((0 1,2 3,4 5,0 1))", "<gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>", NULL, 0, 0); /* GML2 Polygon - with internal ring */ do_gml2_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1 2,3 4,5 0,1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates>6,7 8,9 10,11 6,7</gml:coordinates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>", NULL, 0); /* GML3 Polygon - with internal ring */ do_gml3_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</gml:posList></gml:LinearRing></gml:interior></gml:Polygon>", NULL, 0, 0); /* GML3 Triangle */ do_gml3_test( "TRIANGLE((0 1,2 3,4 5,0 1))", "<gml:Triangle><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior></gml:Triangle>", NULL, 0, 0); /* GML2 MultiPoint */ do_gml2_test( "MULTIPOINT(0 1,2 3)", "<gml:MultiPoint><gml:pointMember><gml:Point><gml:coordinates>0,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>", NULL, 0); /* GML3 MultiPoint */ do_gml3_test( "MULTIPOINT(0 1,2 3)", "<gml:MultiPoint><gml:pointMember><gml:Point><gml:pos srsDimension=\"2\">0 1</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos srsDimension=\"2\">2 3</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint>", NULL, 0, 0); /* GML2 Multiline */ do_gml2_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<gml:MultiLineString><gml:lineStringMember><gml:LineString><gml:coordinates>0,1 2,3 4,5</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>6,7 8,9 10,11</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>", NULL, 0); /* GML3 Multiline */ do_gml3_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<gml:MultiCurve><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">0 1 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">6 7 8 9 10 11</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>", NULL, 0, 0); /* GML2 MultiPolygon */ do_gml2_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<gml:MultiPolygon><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1 2,3 4,5 0,1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,7 8,9 10,11 6,7</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>", NULL, 0); /* GML3 MultiPolygon */ do_gml3_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<gml:MultiSurface><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember></gml:MultiSurface>", NULL, 0, 0); /* GML2 - GeometryCollection */ do_gml2_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:coordinates>0,1</gml:coordinates></gml:Point></gml:geometryMember><gml:geometryMember><gml:LineString><gml:coordinates>2,3 4,5</gml:coordinates></gml:LineString></gml:geometryMember></gml:MultiGeometry>", NULL, 0); /* GML3 - GeometryCollection */ do_gml3_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:pos srsDimension=\"2\">0 1</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember></gml:MultiGeometry>", NULL, 0, 0); /* GML2 - Nested GeometryCollection */ do_gml2_test( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:coordinates>0,1</gml:coordinates></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:LineString><gml:coordinates>2,3 4,5</gml:coordinates></gml:LineString></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>", NULL, 0); /* GML3 - Nested GeometryCollection */ do_gml3_test( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "<gml:MultiGeometry><gml:geometryMember><gml:Point><gml:pos srsDimension=\"2\">0 1</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:MultiGeometry><gml:geometryMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension=\"2\">2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember></gml:MultiGeometry></gml:geometryMember></gml:MultiGeometry>", NULL, 0, 0); /* GML2 - CircularString */ do_gml2_unsupported( "CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)", "lwgeom_to_gml2: 'CircularString' geometry type not supported"); /* GML3 - CircularString */ do_gml3_unsupported( "CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)", "lwgeom_to_gml3: 'CircularString' geometry type not supported"); /* GML2 - CompoundCurve */ do_gml2_unsupported( "COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))", "lwgeom_to_gml2: 'CompoundCurve' geometry type not supported"); /* GML3 - CompoundCurve */ do_gml3_unsupported( "COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))", "lwgeom_to_gml3: 'CompoundCurve' geometry type not supported"); /* GML2 - CurvePolygon */ do_gml2_unsupported( "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))", "lwgeom_to_gml2: 'CurvePolygon' geometry type not supported"); /* GML3 - CurvePolygon */ do_gml3_unsupported( "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))", "lwgeom_to_gml3: 'CurvePolygon' geometry type not supported"); /* GML2 - MultiCurve */ do_gml2_unsupported( "MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))", "lwgeom_to_gml2: 'MultiCurve' geometry type not supported"); /* GML3 - MultiCurve */ do_gml3_unsupported( "MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))", "lwgeom_to_gml3: 'MultiCurve' geometry type not supported"); /* GML2 - MultiSurface */ do_gml2_unsupported( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "lwgeom_to_gml2: 'MultiSurface' geometry type not supported"); /* GML3 - MultiSurface */ do_gml3_unsupported( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "lwgeom_to_gml3: 'MultiSurface' geometry type not supported"); /* GML2 - PolyhedralSurface */ do_gml2_unsupported( "POLYHEDRALSURFACE(((0 1,2 3,4 5,0 1)))", "Cannot convert PolyhedralSurface to GML2. Try ST_AsGML(3, <geometry>) to generate GML3."); /* GML2 - Tin */ do_gml2_unsupported( "TIN(((0 1,2 3,4 5,0 1)))", "Cannot convert Tin to GML2. Try ST_AsGML(3, <geometry>) to generate GML3."); } static void out_gml_test_geoms_prefix(void) { /* GML2 - Linestring */ do_gml2_test_prefix( "LINESTRING(0 1,2 3,4 5)", "<custom:LineString><custom:coordinates>0,1 2,3 4,5</custom:coordinates></custom:LineString>", NULL, 0, "custom:"); /* GML3 - Linestring */ do_gml3_test_prefix( "LINESTRING(0 1,2 3,4 5)", "<custom:Curve><custom:segments><custom:LineStringSegment><custom:posList srsDimension=\"2\">0 1 2 3 4 5</custom:posList></custom:LineStringSegment></custom:segments></custom:Curve>", NULL, 0, 0, "custom:"); /* GML2 Polygon */ do_gml2_test_prefix( "POLYGON((0 1,2 3,4 5,0 1))", "<custom:Polygon><custom:outerBoundaryIs><custom:LinearRing><custom:coordinates>0,1 2,3 4,5 0,1</custom:coordinates></custom:LinearRing></custom:outerBoundaryIs></custom:Polygon>", NULL, 0, "custom:"); /* GML3 Polygon */ do_gml3_test_prefix( "POLYGON((0 1,2 3,4 5,0 1))", "<custom:Polygon><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</custom:posList></custom:LinearRing></custom:exterior></custom:Polygon>", NULL, 0, 0, "custom:"); /* GML2 Polygon - with internal ring */ do_gml2_test_prefix( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<custom:Polygon><custom:outerBoundaryIs><custom:LinearRing><custom:coordinates>0,1 2,3 4,5 0,1</custom:coordinates></custom:LinearRing></custom:outerBoundaryIs><custom:innerBoundaryIs><custom:LinearRing><custom:coordinates>6,7 8,9 10,11 6,7</custom:coordinates></custom:LinearRing></custom:innerBoundaryIs></custom:Polygon>", NULL, 0, "custom:"); /* GML3 Polygon - with internal ring */ do_gml3_test_prefix( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<custom:Polygon><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</custom:posList></custom:LinearRing></custom:exterior><custom:interior><custom:LinearRing><custom:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</custom:posList></custom:LinearRing></custom:interior></custom:Polygon>", NULL, 0, 0, "custom:"); /* GML3 Triangle */ do_gml3_test_prefix( "TRIANGLE((0 1,2 3,4 5,0 1))", "<custom:Triangle><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</custom:posList></custom:LinearRing></custom:exterior></custom:Triangle>", NULL, 0, 0, "custom:"); /* GML2 MultiPoint */ do_gml2_test_prefix( "MULTIPOINT(0 1,2 3)", "<custom:MultiPoint><custom:pointMember><custom:Point><custom:coordinates>0,1</custom:coordinates></custom:Point></custom:pointMember><custom:pointMember><custom:Point><custom:coordinates>2,3</custom:coordinates></custom:Point></custom:pointMember></custom:MultiPoint>", NULL, 0, "custom:"); /* GML3 MultiPoint */ do_gml3_test_prefix( "MULTIPOINT(0 1,2 3)", "<custom:MultiPoint><custom:pointMember><custom:Point><custom:pos srsDimension=\"2\">0 1</custom:pos></custom:Point></custom:pointMember><custom:pointMember><custom:Point><custom:pos srsDimension=\"2\">2 3</custom:pos></custom:Point></custom:pointMember></custom:MultiPoint>", NULL, 0, 0, "custom:"); /* GML2 Multiline */ do_gml2_test_prefix( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<custom:MultiLineString><custom:lineStringMember><custom:LineString><custom:coordinates>0,1 2,3 4,5</custom:coordinates></custom:LineString></custom:lineStringMember><custom:lineStringMember><custom:LineString><custom:coordinates>6,7 8,9 10,11</custom:coordinates></custom:LineString></custom:lineStringMember></custom:MultiLineString>", NULL, 0, "custom:"); /* GML3 Multiline */ do_gml3_test_prefix( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<custom:MultiCurve><custom:curveMember><custom:Curve><custom:segments><custom:LineStringSegment><custom:posList srsDimension=\"2\">0 1 2 3 4 5</custom:posList></custom:LineStringSegment></custom:segments></custom:Curve></custom:curveMember><custom:curveMember><custom:Curve><custom:segments><custom:LineStringSegment><custom:posList srsDimension=\"2\">6 7 8 9 10 11</custom:posList></custom:LineStringSegment></custom:segments></custom:Curve></custom:curveMember></custom:MultiCurve>", NULL, 0, 0, "custom:"); /* GML2 MultiPolygon */ do_gml2_test_prefix( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<custom:MultiPolygon><custom:polygonMember><custom:Polygon><custom:outerBoundaryIs><custom:LinearRing><custom:coordinates>0,1 2,3 4,5 0,1</custom:coordinates></custom:LinearRing></custom:outerBoundaryIs></custom:Polygon></custom:polygonMember><custom:polygonMember><custom:Polygon><custom:outerBoundaryIs><custom:LinearRing><custom:coordinates>6,7 8,9 10,11 6,7</custom:coordinates></custom:LinearRing></custom:outerBoundaryIs></custom:Polygon></custom:polygonMember></custom:MultiPolygon>", NULL, 0, "custom:"); /* GML3 MultiPolygon */ do_gml3_test_prefix( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<custom:MultiSurface><custom:surfaceMember><custom:Polygon><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</custom:posList></custom:LinearRing></custom:exterior></custom:Polygon></custom:surfaceMember><custom:surfaceMember><custom:Polygon><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</custom:posList></custom:LinearRing></custom:exterior></custom:Polygon></custom:surfaceMember></custom:MultiSurface>", NULL, 0, 0, "custom:"); /* GML3 PolyhedralSurface */ do_gml3_test_prefix( "POLYHEDRALSURFACE(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<custom:PolyhedralSurface><custom:polygonPatches><custom:PolygonPatch><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</custom:posList></custom:LinearRing></custom:exterior></custom:PolygonPatch><custom:PolygonPatch><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</custom:posList></custom:LinearRing></custom:exterior></custom:PolygonPatch></custom:polygonPatches></custom:PolyhedralSurface>", NULL, 0, 0, "custom:"); /* GML3 Tin */ do_gml3_test_prefix( "TIN(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<custom:Tin><custom:trianglePatches><custom:Triangle><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">0 1 2 3 4 5 0 1</custom:posList></custom:LinearRing></custom:exterior></custom:Triangle><custom:Triangle><custom:exterior><custom:LinearRing><custom:posList srsDimension=\"2\">6 7 8 9 10 11 6 7</custom:posList></custom:LinearRing></custom:exterior></custom:Triangle></custom:trianglePatches></custom:Tin>", NULL, 0, 0, "custom:"); /* GML2 - GeometryCollection */ do_gml2_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<custom:MultiGeometry><custom:geometryMember><custom:Point><custom:coordinates>0,1</custom:coordinates></custom:Point></custom:geometryMember><custom:geometryMember><custom:LineString><custom:coordinates>2,3 4,5</custom:coordinates></custom:LineString></custom:geometryMember></custom:MultiGeometry>", NULL, 0, "custom:"); /* GML3 - GeometryCollection */ do_gml3_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<custom:MultiGeometry><custom:geometryMember><custom:Point><custom:pos srsDimension=\"2\">0 1</custom:pos></custom:Point></custom:geometryMember><custom:geometryMember><custom:Curve><custom:segments><custom:LineStringSegment><custom:posList srsDimension=\"2\">2 3 4 5</custom:posList></custom:LineStringSegment></custom:segments></custom:Curve></custom:geometryMember></custom:MultiGeometry>", NULL, 0, 0, "custom:"); /* GML2 - Nested GeometryCollection */ do_gml2_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "<custom:MultiGeometry><custom:geometryMember><custom:Point><custom:coordinates>0,1</custom:coordinates></custom:Point></custom:geometryMember><custom:geometryMember><custom:MultiGeometry><custom:geometryMember><custom:LineString><custom:coordinates>2,3 4,5</custom:coordinates></custom:LineString></custom:geometryMember></custom:MultiGeometry></custom:geometryMember></custom:MultiGeometry>", NULL, 0, "custom:"); /* GML3 - Nested GeometryCollection */ do_gml3_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "<custom:MultiGeometry><custom:geometryMember><custom:Point><custom:pos srsDimension=\"2\">0 1</custom:pos></custom:Point></custom:geometryMember><custom:geometryMember><custom:MultiGeometry><custom:geometryMember><custom:Curve><custom:segments><custom:LineStringSegment><custom:posList srsDimension=\"2\">2 3 4 5</custom:posList></custom:LineStringSegment></custom:segments></custom:Curve></custom:geometryMember></custom:MultiGeometry></custom:geometryMember></custom:MultiGeometry>", NULL, 0, 0, "custom:"); /*------------- empty prefixes below ------------------------ */ /* GML2 - Linestring */ do_gml2_test_prefix( "LINESTRING(0 1,2 3,4 5)", "<LineString><coordinates>0,1 2,3 4,5</coordinates></LineString>", NULL, 0, ""); /* GML3 - Linestring */ do_gml3_test_prefix( "LINESTRING(0 1,2 3,4 5)", "<Curve><segments><LineStringSegment><posList srsDimension=\"2\">0 1 2 3 4 5</posList></LineStringSegment></segments></Curve>", NULL, 0, 0, ""); /* GML2 Polygon */ do_gml2_test_prefix( "POLYGON((0 1,2 3,4 5,0 1))", "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs></Polygon>", NULL, 0, ""); /* GML3 Polygon */ do_gml3_test_prefix( "POLYGON((0 1,2 3,4 5,0 1))", "<Polygon><exterior><LinearRing><posList srsDimension=\"2\">0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Polygon>", NULL, 0, 0, ""); /* GML2 Polygon - with internal ring */ do_gml2_test_prefix( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs><innerBoundaryIs><LinearRing><coordinates>6,7 8,9 10,11 6,7</coordinates></LinearRing></innerBoundaryIs></Polygon>", NULL, 0, ""); /* GML3 Polygon - with internal ring */ do_gml3_test_prefix( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<Polygon><exterior><LinearRing><posList srsDimension=\"2\">0 1 2 3 4 5 0 1</posList></LinearRing></exterior><interior><LinearRing><posList srsDimension=\"2\">6 7 8 9 10 11 6 7</posList></LinearRing></interior></Polygon>", NULL, 0, 0, ""); /* GML3 Triangle */ do_gml3_test_prefix( "TRIANGLE((0 1,2 3,4 5,0 1))", "<Triangle><exterior><LinearRing><posList srsDimension=\"2\">0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Triangle>", NULL, 0, 0, ""); /* GML2 MultiPoint */ do_gml2_test_prefix( "MULTIPOINT(0 1,2 3)", "<MultiPoint><pointMember><Point><coordinates>0,1</coordinates></Point></pointMember><pointMember><Point><coordinates>2,3</coordinates></Point></pointMember></MultiPoint>", NULL, 0, ""); /* GML3 MultiPoint */ do_gml3_test_prefix( "MULTIPOINT(0 1,2 3)", "<MultiPoint><pointMember><Point><pos srsDimension=\"2\">0 1</pos></Point></pointMember><pointMember><Point><pos srsDimension=\"2\">2 3</pos></Point></pointMember></MultiPoint>", NULL, 0, 0, ""); /* GML2 Multiline */ do_gml2_test_prefix( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<MultiLineString><lineStringMember><LineString><coordinates>0,1 2,3 4,5</coordinates></LineString></lineStringMember><lineStringMember><LineString><coordinates>6,7 8,9 10,11</coordinates></LineString></lineStringMember></MultiLineString>", NULL, 0, ""); /* GML3 Multiline */ do_gml3_test_prefix( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<MultiCurve><curveMember><Curve><segments><LineStringSegment><posList srsDimension=\"2\">0 1 2 3 4 5</posList></LineStringSegment></segments></Curve></curveMember><curveMember><Curve><segments><LineStringSegment><posList srsDimension=\"2\">6 7 8 9 10 11</posList></LineStringSegment></segments></Curve></curveMember></MultiCurve>", NULL, 0, 0, ""); /* GML2 MultiPolygon */ do_gml2_test_prefix( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<MultiPolygon><polygonMember><Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs></Polygon></polygonMember><polygonMember><Polygon><outerBoundaryIs><LinearRing><coordinates>6,7 8,9 10,11 6,7</coordinates></LinearRing></outerBoundaryIs></Polygon></polygonMember></MultiPolygon>", NULL, 0, ""); /* GML3 MultiPolygon */ do_gml3_test_prefix( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<MultiSurface><surfaceMember><Polygon><exterior><LinearRing><posList srsDimension=\"2\">0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Polygon></surfaceMember><surfaceMember><Polygon><exterior><LinearRing><posList srsDimension=\"2\">6 7 8 9 10 11 6 7</posList></LinearRing></exterior></Polygon></surfaceMember></MultiSurface>", NULL, 0, 0, ""); /* GML3 PolyhedralSurface */ do_gml3_test_prefix( "POLYHEDRALSURFACE(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<PolyhedralSurface><polygonPatches><PolygonPatch><exterior><LinearRing><posList srsDimension=\"2\">0 1 2 3 4 5 0 1</posList></LinearRing></exterior></PolygonPatch><PolygonPatch><exterior><LinearRing><posList srsDimension=\"2\">6 7 8 9 10 11 6 7</posList></LinearRing></exterior></PolygonPatch></polygonPatches></PolyhedralSurface>", NULL, 0, 0, ""); /* GML3 PolyhedralSurface */ do_gml3_test_prefix( "TIN(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<Tin><trianglePatches><Triangle><exterior><LinearRing><posList srsDimension=\"2\">0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Triangle><Triangle><exterior><LinearRing><posList srsDimension=\"2\">6 7 8 9 10 11 6 7</posList></LinearRing></exterior></Triangle></trianglePatches></Tin>", NULL, 0, 0, ""); /* GML2 - GeometryCollection */ do_gml2_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<MultiGeometry><geometryMember><Point><coordinates>0,1</coordinates></Point></geometryMember><geometryMember><LineString><coordinates>2,3 4,5</coordinates></LineString></geometryMember></MultiGeometry>", NULL, 0, ""); /* GML3 - GeometryCollection */ do_gml3_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<MultiGeometry><geometryMember><Point><pos srsDimension=\"2\">0 1</pos></Point></geometryMember><geometryMember><Curve><segments><LineStringSegment><posList srsDimension=\"2\">2 3 4 5</posList></LineStringSegment></segments></Curve></geometryMember></MultiGeometry>", NULL, 0, 0, ""); /* GML2 - Nested GeometryCollection */ do_gml2_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "<MultiGeometry><geometryMember><Point><coordinates>0,1</coordinates></Point></geometryMember><geometryMember><MultiGeometry><geometryMember><LineString><coordinates>2,3 4,5</coordinates></LineString></geometryMember></MultiGeometry></geometryMember></MultiGeometry>", NULL, 0, ""); /* GML3 - Nested GeometryCollection */ do_gml3_test_prefix( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "<MultiGeometry><geometryMember><Point><pos srsDimension=\"2\">0 1</pos></Point></geometryMember><geometryMember><MultiGeometry><geometryMember><Curve><segments><LineStringSegment><posList srsDimension=\"2\">2 3 4 5</posList></LineStringSegment></segments></Curve></geometryMember></MultiGeometry></geometryMember></MultiGeometry>", NULL, 0, 0, ""); } static void out_gml_test_geoms_nodims(void) { /* GML3 - Linestring */ do_gml3_test_nodims( "LINESTRING(0 1,2 3,4 5)", "<Curve><segments><LineStringSegment><posList>0 1 2 3 4 5</posList></LineStringSegment></segments></Curve>", NULL, 0, 0, 0, ""); /* GML3 Polygon */ do_gml3_test_nodims( "POLYGON((0 1,2 3,4 5,0 1))", "<Polygon><exterior><LinearRing><posList>0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Polygon>", NULL, 0, 0, 0, ""); /* GML3 Polygon - with internal ring */ do_gml3_test_nodims( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<Polygon><exterior><LinearRing><posList>0 1 2 3 4 5 0 1</posList></LinearRing></exterior><interior><LinearRing><posList>6 7 8 9 10 11 6 7</posList></LinearRing></interior></Polygon>", NULL, 0, 0, 0, ""); /* GML3 Triangle */ do_gml3_test_nodims( "TRIANGLE((0 1,2 3,4 5,0 1))", "<Triangle><exterior><LinearRing><posList>0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Triangle>", NULL, 0, 0, 0, ""); /* GML3 MultiPoint */ do_gml3_test_nodims( "MULTIPOINT(0 1,2 3)", "<MultiPoint><pointMember><Point><pos>0 1</pos></Point></pointMember><pointMember><Point><pos>2 3</pos></Point></pointMember></MultiPoint>", NULL, 0, 0, 0, ""); /* GML3 Multiline */ do_gml3_test_nodims( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<MultiCurve><curveMember><Curve><segments><LineStringSegment><posList>0 1 2 3 4 5</posList></LineStringSegment></segments></Curve></curveMember><curveMember><Curve><segments><LineStringSegment><posList>6 7 8 9 10 11</posList></LineStringSegment></segments></Curve></curveMember></MultiCurve>", NULL, 0, 0, 0, ""); /* GML3 MultiPolygon */ do_gml3_test_nodims( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<MultiSurface><surfaceMember><Polygon><exterior><LinearRing><posList>0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Polygon></surfaceMember><surfaceMember><Polygon><exterior><LinearRing><posList>6 7 8 9 10 11 6 7</posList></LinearRing></exterior></Polygon></surfaceMember></MultiSurface>", NULL, 0, 0, 0, ""); /* GML3 PolyhedralSurface */ do_gml3_test_nodims( "POLYHEDRALSURFACE(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<PolyhedralSurface><polygonPatches><PolygonPatch><exterior><LinearRing><posList>0 1 2 3 4 5 0 1</posList></LinearRing></exterior></PolygonPatch><PolygonPatch><exterior><LinearRing><posList>6 7 8 9 10 11 6 7</posList></LinearRing></exterior></PolygonPatch></polygonPatches></PolyhedralSurface>", NULL, 0, 0, 0, ""); /* GML3 Tin */ do_gml3_test_nodims( "TIN(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<Tin><trianglePatches><Triangle><exterior><LinearRing><posList>0 1 2 3 4 5 0 1</posList></LinearRing></exterior></Triangle><Triangle><exterior><LinearRing><posList>6 7 8 9 10 11 6 7</posList></LinearRing></exterior></Triangle></trianglePatches></Tin>", NULL, 0, 0, 0, ""); /* GML3 - GeometryCollection */ do_gml3_test_nodims( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "<MultiGeometry><geometryMember><Point><pos>0 1</pos></Point></geometryMember><geometryMember><Curve><segments><LineStringSegment><posList>2 3 4 5</posList></LineStringSegment></segments></Curve></geometryMember></MultiGeometry>", NULL, 0, 0, 0, ""); /* GML3 - Nested GeometryCollection */ do_gml3_test_nodims( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "<MultiGeometry><geometryMember><Point><pos>0 1</pos></Point></geometryMember><geometryMember><MultiGeometry><geometryMember><Curve><segments><LineStringSegment><posList>2 3 4 5</posList></LineStringSegment></segments></Curve></geometryMember></MultiGeometry></geometryMember></MultiGeometry>", NULL, 0, 0, 0, ""); } static void out_gml2_extent(void) { /* GML2: Point */ do_gml2_extent_test( "POINT(-15 60)", "<Box><coordinates>-15,60 -15,60</coordinates></Box>", NULL, 15, ""); do_gml2_extent_test( "POINT(-15 60)", "<gml:Box><gml:coordinates>-15,60 -15,60</gml:coordinates></gml:Box>", NULL, 15, "gml:"); do_gml2_extent_test( "POINT(-15 60)", "<Box srsName=\"urn:ogc:def:crs:EPSG::4326\"><coordinates>-15,60 -15,60</coordinates></Box>", "urn:ogc:def:crs:EPSG::4326", 15, ""); /* GML2: Multipoint */ do_gml2_extent_test( "MULTIPOINT(2 3, -5 -6)", "<Box><coordinates>-5,-6 2,3</coordinates></Box>", NULL, 15, ""); /* GML2: Linestring */ do_gml2_extent_test( "LINESTRING(0 1,2 3,4 5)", "<Box><coordinates>0,1 4,5</coordinates></Box>", NULL, 15, ""); /* GML2: MultiLinestring */ do_gml2_extent_test( "MULTILINESTRING((0 1,2 3),(4 5, 10 6))", "<Box><coordinates>0,1 10,6</coordinates></Box>", NULL, 15, ""); /* GML2: Polygon */ do_gml2_extent_test( "POLYGON((1 7,7 14, 14 7, 1 7))", "<Box><coordinates>1,7 14,14</coordinates></Box>", NULL, 15, ""); /* GML2: MultiPolygon */ do_gml2_extent_test( "MULTIPOLYGON(((1 7,7 14, 14 7, 1 7)),((-4 -6, -15 3, 0 0, -4 -6)))", "<Box><coordinates>-15,-6 14,14</coordinates></Box>", NULL, 15, ""); /* GML2: MultiSurface */ do_gml2_extent_test( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "<Box><coordinates>-2,-1 10,14</coordinates></Box>", NULL, 15, ""); /* GML2: empty */ do_gml2_extent_test( "GEOMETRYCOLLECTION EMPTY", "<Box/>", NULL, 15, ""); /* GML2: empty with srsName */ do_gml2_extent_test( "GEOMETRYCOLLECTION EMPTY", "<Box srsName=\"urn:ogc:def:crs:EPSG::4326\"/>", "urn:ogc:def:crs:EPSG::4326", 15, ""); } static void out_gml3_extent(void) { /* GML3: Point */ do_gml3_extent_test( "POINT(-15 60)", "<Envelope><lowerCorner>-15 60</lowerCorner><upperCorner>-15 60</upperCorner></Envelope>", NULL, 15, 0, ""); do_gml3_extent_test( "POINT(-15 60)", "<gml:Envelope><gml:lowerCorner>-15 60</gml:lowerCorner><gml:upperCorner>-15 60</gml:upperCorner></gml:Envelope>", NULL, 15, 0, "gml:"); do_gml3_extent_test( "POINT(-15 60)", "<Envelope srsName=\"urn:ogc:def:crs:EPSG::4326\"><lowerCorner>-15 60</lowerCorner><upperCorner>-15 60</upperCorner></Envelope>", "urn:ogc:def:crs:EPSG::4326", 15, 0, ""); /* GML3: Multipoint */ do_gml3_extent_test( "MULTIPOINT(2 3, -5 -6)", "<Envelope><lowerCorner>-5 -6</lowerCorner><upperCorner>2 3</upperCorner></Envelope>", NULL, 15, 0, ""); /* GML3: Linestring */ do_gml3_extent_test( "LINESTRING(0 1,2 3,4 5)", "<Envelope><lowerCorner>0 1</lowerCorner><upperCorner>4 5</upperCorner></Envelope>", NULL, 15, 0, ""); /* GML3: MultiLinestring */ do_gml3_extent_test( "MULTILINESTRING((0 1,2 3),(4 5, 10 6))", "<Envelope><lowerCorner>0 1</lowerCorner><upperCorner>10 6</upperCorner></Envelope>", NULL, 15, 0, ""); do_gml3_extent_test( "MULTILINESTRING((0 1,2 3),(4 5, 10 6))", "<Envelope><lowerCorner>1 0</lowerCorner><upperCorner>6 10</upperCorner></Envelope>", NULL, 15, LW_GML_IS_DEGREE, ""); do_gml3_extent_test( "MULTILINESTRING((0 1,2 3),(4 5, 10 6))", "<Envelope srsDimension=\"2\"><lowerCorner>1 0</lowerCorner><upperCorner>6 10</upperCorner></Envelope>", NULL, 15, LW_GML_IS_DEGREE|LW_GML_IS_DIMS, ""); do_gml3_extent_test( "MULTILINESTRING((0 1 10,2 3 30),(4 5 50, 10 6 -70))", "<Envelope srsDimension=\"3\"><lowerCorner>1 0 -70</lowerCorner><upperCorner>6 10 50</upperCorner></Envelope>", NULL, 15, LW_GML_IS_DEGREE|LW_GML_IS_DIMS, ""); /* GML3: Polygon */ do_gml3_extent_test( "POLYGON((1 7,7 14, 14 7, 1 7))", "<Envelope><lowerCorner>1 7</lowerCorner><upperCorner>14 14</upperCorner></Envelope>", NULL, 15, 0, ""); /* GML3: MultiPolygon */ do_gml3_extent_test( "MULTIPOLYGON(((1 7,7 14, 14 7, 1 7)),((-4 -6, -15 3, 0 0, -4 -6)))", "<Envelope><lowerCorner>-15 -6</lowerCorner><upperCorner>14 14</upperCorner></Envelope>", NULL, 15, 0, ""); /* GML3: MultiSurface */ do_gml3_extent_test( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "<Envelope><lowerCorner>-2 -1</lowerCorner><upperCorner>10 14</upperCorner></Envelope>", NULL, 15, 0, ""); /* GML3: empty */ do_gml3_extent_test( "GEOMETRYCOLLECTION EMPTY", "<Envelope/>", NULL, 15, 0, ""); /* GML3: empty with srsName */ do_gml3_extent_test( "GEOMETRYCOLLECTION EMPTY", "<Envelope srsName=\"urn:ogc:def:crs:EPSG::4326\"/>", "urn:ogc:def:crs:EPSG::4326", 15, 0, ""); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo out_gml_tests[] = { PG_TEST(out_gml_test_precision), PG_TEST(out_gml_test_srid), PG_TEST(out_gml_test_dims), PG_TEST(out_gml_test_geodetic), PG_TEST(out_gml_test_geoms), PG_TEST(out_gml_test_geoms_prefix), PG_TEST(out_gml_test_geoms_nodims), PG_TEST(out_gml2_extent), PG_TEST(out_gml3_extent), CU_TEST_INFO_NULL }; CU_SuiteInfo out_gml_suite = {"out_gml", NULL, NULL, out_gml_tests}; ���������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_in_geojson.c���������������������������������������������0000644�0000000�0000000�00000017277�12236031373�021666� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2013 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_geojson_test(const char * exp, char * in, char * exp_srs, int precision, int has_bbox) { LWGEOM *g; char * h = NULL; char * srs = NULL; size_t size; g = lwgeom_from_geojson(in, &srs); if ( ! g ) { fprintf(stderr, "\nIn: %s\nExp: %s\nObt: %s\n", in, exp, cu_error_msg); CU_ASSERT(g != NULL); return; } h = lwgeom_to_wkt(g, WKT_EXTENDED, 15, &size); if (strcmp(h, exp)) { fprintf(stderr, "\nIn: %s\nExp: %s\nObt: %s\n", in, exp, h); CU_ASSERT_STRING_EQUAL(h, exp); } if ( exp_srs ) { if ( ! srs ) { fprintf(stderr, "\nIn: %s\nExp: %s\nObt: (null)\n", in, exp_srs); CU_ASSERT_EQUAL(srs, exp_srs); } else if (strcmp(srs, exp_srs)) { fprintf(stderr, "\nIn: %s\nExp: %s\nObt: %s\n", in, exp_srs, srs); CU_ASSERT_STRING_EQUAL(srs, exp_srs); } } else if ( srs ) { fprintf(stderr, "\nIn: %s\nExp: (null)\nObt: %s\n", in, srs); CU_ASSERT_EQUAL(srs, exp_srs); } lwgeom_free(g); if ( h ) lwfree(h); if ( srs ) lwfree(srs); } #if 0 static void do_geojson_unsupported(char * in, char * exp) { LWGEOM *g; char * h = NULL; char * srs = NULL; size_t size; g = lwgeom_from_geojson(in, &srs); if ( g ) { h = lwgeom_to_wkt(g, WKT_ISO, 1, &size); fprintf(stderr, "\nIn: %s\nExp: %s\nObt: %s\n", in, exp, h); CU_ASSERT(!g); } else { if (strcmp(cu_error_msg, exp)) fprintf(stderr, "\nIn: %s\nExp: %s\nObt: %s\n", in, exp, cu_error_msg); CU_ASSERT_STRING_EQUAL(in, cu_error_msg); } cu_error_msg_reset(); if ( srs ) lwfree(srs); if ( h ) lwfree(h); lwgeom_free(g); } #endif static void in_geojson_test_srid(void) { /* Linestring */ do_geojson_test( "LINESTRING(0 1,2 3,4 5)", "{\"type\":\"LineString\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[0,1],[2,3],[4,5]]}", "EPSG:4326", 0, 0); /* Polygon */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1))", "{\"type\":\"Polygon\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]]]}", "EPSG:4326", 0, 0); /* Polygon - with internal ring */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "{\"type\":\"Polygon\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]],[[6,7],[8,9],[10,11],[6,7]]]}", "EPSG:4326", 0, 0); /* Multiline */ do_geojson_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "{\"type\":\"MultiLineString\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[0,1],[2,3],[4,5]],[[6,7],[8,9],[10,11]]]}", "EPSG:4326", 0, 0); /* MultiPolygon */ do_geojson_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "{\"type\":\"MultiPolygon\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"coordinates\":[[[[0,1],[2,3],[4,5],[0,1]]],[[[6,7],[8,9],[10,11],[6,7]]]]}", "EPSG:4326", 0, 0); /* Empty GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION EMPTY", "{\"type\":\"GeometryCollection\",\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}},\"geometries\":[]}", "EPSG:4326", 0, 0); } static void in_geojson_test_bbox(void) { /* Linestring */ do_geojson_test( "LINESTRING(0 1,2 3,4 5)", "{\"type\":\"LineString\",\"bbox\":[0,1,4,5],\"coordinates\":[[0,1],[2,3],[4,5]]}", NULL, 0, 1); /* Polygon */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1))", "{\"type\":\"Polygon\",\"bbox\":[0,1,4,5],\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]]]}", NULL, 0, 1); /* Polygon - with internal ring */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "{\"type\":\"Polygon\",\"bbox\":[0,1,4,5],\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]],[[6,7],[8,9],[10,11],[6,7]]]}", NULL, 0, 1); /* Multiline */ do_geojson_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "{\"type\":\"MultiLineString\",\"bbox\":[0,1,10,11],\"coordinates\":[[[0,1],[2,3],[4,5]],[[6,7],[8,9],[10,11]]]}", NULL, 0, 1); /* MultiPolygon */ do_geojson_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "{\"type\":\"MultiPolygon\",\"bbox\":[0,1,10,11],\"coordinates\":[[[[0,1],[2,3],[4,5],[0,1]]],[[[6,7],[8,9],[10,11],[6,7]]]]}", NULL, 0, 1); /* GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION(LINESTRING(0 1,-1 3),LINESTRING(2 3,4 5))", "{\"type\":\"GeometryCollection\",\"bbox\":[-1,1,4,5],\"geometries\":[{\"type\":\"LineString\",\"coordinates\":[[0,1],[-1,3]]},{\"type\":\"LineString\",\"coordinates\":[[2,3],[4,5]]}]}", NULL, 0, 1); /* Empty GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION EMPTY", "{\"type\":\"GeometryCollection\",\"geometries\":[]}", NULL, 0, 1); } static void in_geojson_test_geoms(void) { /* Linestring */ do_geojson_test( "LINESTRING(0 1,2 3,4 5)", "{\"type\":\"LineString\",\"coordinates\":[[0,1],[2,3],[4,5]]}", NULL, 0, 0); /* Polygon */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1))", "{\"type\":\"Polygon\",\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]]]}", NULL, 0, 0); /* Polygon - with internal ring */ do_geojson_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "{\"type\":\"Polygon\",\"coordinates\":[[[0,1],[2,3],[4,5],[0,1]],[[6,7],[8,9],[10,11],[6,7]]]}", NULL, 0, 0); /* Multiline */ do_geojson_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "{\"type\":\"MultiLineString\",\"coordinates\":[[[0,1],[2,3],[4,5]],[[6,7],[8,9],[10,11]]]}", NULL, 0, 0); /* MultiPolygon */ do_geojson_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "{\"type\":\"MultiPolygon\",\"coordinates\":[[[[0,1],[2,3],[4,5],[0,1]]],[[[6,7],[8,9],[10,11],[6,7]]]]}", NULL, 0, 0); /* MultiPolygon with internal rings */ /* See http://trac.osgeo.org/postgis/ticket/2216 */ do_geojson_test( "MULTIPOLYGON(((4 0,0 -4,-4 0,0 4,4 0),(2 0,0 2,-2 0,0 -2,2 0)),((24 0,20 -4,16 0,20 4,24 0),(22 0,20 2,18 0,20 -2,22 0)),((44 0,40 -4,36 0,40 4,44 0),(42 0,40 2,38 0,40 -2,42 0)))", "{'type':'MultiPolygon','coordinates':[[[[4,0],[0,-4],[-4,0],[0,4],[4,0]],[[2,0],[0,2],[-2,0],[0,-2],[2,0]]],[[[24,0],[20,-4],[16,0],[20,4],[24,0]],[[22,0],[20,2],[18,0],[20,-2],[22,0]]],[[[44,0],[40,-4],[36,0],[40,4],[44,0]],[[42,0],[40,2],[38,0],[40,-2],[42,0]]]]}", NULL, 0, 0); /* GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "{\"type\":\"GeometryCollection\",\"geometries\":[{\"type\":\"Point\",\"coordinates\":[0,1]},{\"type\":\"LineString\",\"coordinates\":[[2,3],[4,5]]}]}", NULL, 0, 0); /* Empty GeometryCollection */ do_geojson_test( "GEOMETRYCOLLECTION EMPTY", "{\"type\":\"GeometryCollection\",\"geometries\":[]}", NULL, 0, 0); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo in_geojson_tests[] = { PG_TEST(in_geojson_test_srid), PG_TEST(in_geojson_test_bbox), PG_TEST(in_geojson_test_geoms), CU_TEST_INFO_NULL }; CU_SuiteInfo in_geojson_suite = {"in_geojson", NULL, NULL, in_geojson_tests}; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_out_kml.c������������������������������������������������0000644�0000000�0000000�00000017122�11727672212�021202� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_kml.c 9485 2012-03-13 16:23:38Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_kml_test(char * in, char * out, int precision) { LWGEOM *g; char * h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_kml2(g, precision, ""); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_kml_unsupported(char * in, char * out) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_kml2(g, 0, ""); if (strcmp(cu_error_msg, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, cu_error_msg, out); CU_ASSERT_STRING_EQUAL(out, cu_error_msg); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void do_kml_test_prefix(char * in, char * out, int precision, const char *prefix) { LWGEOM *g; char * h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_kml2(g, precision, prefix); if (strcmp(h, out)) fprintf(stderr, "\nPrefix: %s\nIn: %s\nOut: %s\nTheo: %s\n", prefix, in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void out_kml_test_precision(void) { /* 0 precision, i.e a round */ do_kml_test( "POINT(1.1111111111111 1.1111111111111)", "<Point><coordinates>1,1</coordinates></Point>", 0); /* 3 digits precision */ do_kml_test( "POINT(1.1111111111111 1.1111111111111)", "<Point><coordinates>1.111,1.111</coordinates></Point>", 3); /* 9 digits precision */ do_kml_test( "POINT(1.2345678901234 1.2345678901234)", "<Point><coordinates>1.23456789,1.23456789</coordinates></Point>", 8); /* huge data */ do_kml_test( "POINT(1E300 -1E300)", "<Point><coordinates>1e+300,-1e+300</coordinates></Point>", 0); } static void out_kml_test_dims(void) { /* 3D */ do_kml_test( "POINT(0 1 2)", "<Point><coordinates>0,1,2</coordinates></Point>", 0); /* 3DM */ do_kml_test( "POINTM(0 1 2)", "<Point><coordinates>0,1</coordinates></Point>", 0); /* 4D */ do_kml_test( "POINT(0 1 2 3)", "<Point><coordinates>0,1,2</coordinates></Point>", 0); } static void out_kml_test_geoms(void) { /* Linestring */ do_kml_test( "LINESTRING(0 1,2 3,4 5)", "<LineString><coordinates>0,1 2,3 4,5</coordinates></LineString>", 0); /* Polygon */ do_kml_test( "POLYGON((0 1,2 3,4 5,0 1))", "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs></Polygon>", 0); /* Polygon - with internal ring */ do_kml_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs><innerBoundaryIs><LinearRing><coordinates>6,7 8,9 10,11 6,7</coordinates></LinearRing></innerBoundaryIs></Polygon>", 0); /* MultiPoint */ do_kml_test( "MULTIPOINT(0 1,2 3)", "<MultiGeometry><Point><coordinates>0,1</coordinates></Point><Point><coordinates>2,3</coordinates></Point></MultiGeometry>", 0); /* MultiLine */ do_kml_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<MultiGeometry><LineString><coordinates>0,1 2,3 4,5</coordinates></LineString><LineString><coordinates>6,7 8,9 10,11</coordinates></LineString></MultiGeometry>", 0); /* MultiPolygon */ do_kml_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs></Polygon><Polygon><outerBoundaryIs><LinearRing><coordinates>6,7 8,9 10,11 6,7</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>", 0); /* GeometryCollection */ do_kml_unsupported( "GEOMETRYCOLLECTION(POINT(0 1))", "lwgeom_to_kml2: 'GeometryCollection' geometry type not supported"); /* CircularString */ do_kml_unsupported( "CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)", "lwgeom_to_kml2: 'CircularString' geometry type not supported"); /* CompoundCurve */ do_kml_unsupported( "COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))", "lwgeom_to_kml2: 'CompoundCurve' geometry type not supported"); /* CurvePolygon */ do_kml_unsupported( "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))", "lwgeom_to_kml2: 'CurvePolygon' geometry type not supported"); /* MultiCurve */ do_kml_unsupported( "MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))", "lwgeom_to_kml2: 'MultiCurve' geometry type not supported"); /* MultiSurface */ do_kml_unsupported( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "lwgeom_to_kml2: 'MultiSurface' geometry type not supported"); } static void out_kml_test_prefix(void) { /* Linestring */ do_kml_test_prefix( "LINESTRING(0 1,2 3,4 5)", "<kml:LineString><kml:coordinates>0,1 2,3 4,5</kml:coordinates></kml:LineString>", 0, "kml:"); /* Polygon */ do_kml_test_prefix( "POLYGON((0 1,2 3,4 5,0 1))", "<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>0,1 2,3 4,5 0,1</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>", 0, "kml:"); /* Polygon - with internal ring */ do_kml_test_prefix( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>0,1 2,3 4,5 0,1</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>6,7 8,9 10,11 6,7</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>", 0, "kml:"); /* MultiPoint */ do_kml_test_prefix( "MULTIPOINT(0 1,2 3)", "<kml:MultiGeometry><kml:Point><kml:coordinates>0,1</kml:coordinates></kml:Point><kml:Point><kml:coordinates>2,3</kml:coordinates></kml:Point></kml:MultiGeometry>", 0, "kml:"); /* MultiLine */ do_kml_test_prefix( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "<kml:MultiGeometry><kml:LineString><kml:coordinates>0,1 2,3 4,5</kml:coordinates></kml:LineString><kml:LineString><kml:coordinates>6,7 8,9 10,11</kml:coordinates></kml:LineString></kml:MultiGeometry>", 0, "kml:"); /* MultiPolygon */ do_kml_test_prefix( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "<kml:MultiGeometry><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>0,1 2,3 4,5 0,1</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>6,7 8,9 10,11 6,7</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon></kml:MultiGeometry>", 0, "kml:"); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo out_kml_tests[] = { PG_TEST(out_kml_test_precision), PG_TEST(out_kml_test_dims), PG_TEST(out_kml_test_geoms), PG_TEST(out_kml_test_prefix), CU_TEST_INFO_NULL }; CU_SuiteInfo out_kml_suite = {"KML Out Suite", NULL, NULL, out_kml_tests}; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_homogenize.c���������������������������������������������0000644�0000000�0000000�00000022123�12057131312�021655� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_homogenize.c 10783 2012-12-03 14:10:18Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2009 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_geom_test(char * in, char * out) { LWGEOM *g, *h; char *tmp; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_homogenize(g); tmp = lwgeom_to_ewkt(h); if (strcmp(tmp, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nExp: %s\n", in, tmp, out); CU_ASSERT_STRING_EQUAL(tmp, out); lwfree(tmp); lwgeom_free(g); /* See http://trac.osgeo.org/postgis/ticket/1104 */ lwgeom_free(h); } static void test_coll_point(void) { do_geom_test("GEOMETRYCOLLECTION(POINT(1 2))", "POINT(1 2)"); do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),POINT(3 4))", "MULTIPOINT(1 2,3 4)"); do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),POINT(3 4),POINT(5 6))", "MULTIPOINT(1 2,3 4,5 6)"); do_geom_test("GEOMETRYCOLLECTION(MULTIPOINT(1 2,3 4),POINT(5 6))", "MULTIPOINT(1 2,3 4,5 6)"); do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),MULTIPOINT(3 4,5 6))", "MULTIPOINT(1 2,3 4,5 6)"); do_geom_test("GEOMETRYCOLLECTION(MULTIPOINT(1 2,3 4),MULTIPOINT(5 6,7 8))", "MULTIPOINT(1 2,3 4,5 6,7 8)"); } static void test_coll_line(void) { do_geom_test("GEOMETRYCOLLECTION(LINESTRING(1 2,3 4))", "LINESTRING(1 2,3 4)"); do_geom_test("GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),LINESTRING(5 6,7 8))", "MULTILINESTRING((1 2,3 4),(5 6,7 8))"); do_geom_test("GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),LINESTRING(5 6,7 8),LINESTRING(9 10,11 12))", "MULTILINESTRING((1 2,3 4),(5 6,7 8),(9 10,11 12))"); do_geom_test("GEOMETRYCOLLECTION(MULTILINESTRING((1 2,3 4),(5 6,7 8)),LINESTRING(9 10,11 12))", "MULTILINESTRING((1 2,3 4),(5 6,7 8),(9 10,11 12))"); do_geom_test("GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),MULTILINESTRING((5 6,7 8),(9 10,11 12)))", "MULTILINESTRING((1 2,3 4),(5 6,7 8),(9 10,11 12))"); do_geom_test("GEOMETRYCOLLECTION(MULTILINESTRING((1 2,3 4),(5 6,7 8)),MULTILINESTRING((9 10,11 12),(13 14,15 16)))", "MULTILINESTRING((1 2,3 4),(5 6,7 8),(9 10,11 12),(13 14,15 16))"); } static void test_coll_poly(void) { do_geom_test("GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)))", "POLYGON((1 2,3 4,5 6,1 2))"); do_geom_test("GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8)))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))"); do_geom_test("GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),POLYGON((7 8,9 10,11 12,7 8)),POLYGON((13 14,15 16,17 18,13 14)))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)))"); do_geom_test("GEOMETRYCOLLECTION(MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))),POLYGON((13 14,15 16,17 18,13 14)))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)))"); do_geom_test("GEOMETRYCOLLECTION(POLYGON((1 2,3 4,5 6,1 2)),MULTIPOLYGON(((7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14))))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)))"); do_geom_test("GEOMETRYCOLLECTION(MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8))),MULTIPOLYGON(((13 14,15 16,17 18,13 14)),((19 20,21 22,23 24,19 20))))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)),((19 20,21 22,23 24,19 20)))"); } static void test_coll_coll(void) { /* Two different types together must produce a Collection as output */ do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))", "GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))"); do_geom_test("GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),POLYGON((5 6,7 8,9 10,5 6)))", "GEOMETRYCOLLECTION(LINESTRING(1 2,3 4),POLYGON((5 6,7 8,9 10,5 6)))"); /* Ability to produce a single MULTI with same type */ do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6),POINT(7 8))", "GEOMETRYCOLLECTION(MULTIPOINT(1 2,7 8),LINESTRING(3 4,5 6))"); do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6),MULTIPOINT(7 8,9 10))", "GEOMETRYCOLLECTION(MULTIPOINT(1 2,7 8,9 10),LINESTRING(3 4,5 6))"); /* Recursive Collection handle */ do_geom_test("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1 2))))", "POINT(1 2)"); do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),GEOMETRYCOLLECTION(LINESTRING(3 4,5 6)))", "GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))"); /* EMPTY Collection */ do_geom_test("GEOMETRYCOLLECTION EMPTY", "GEOMETRYCOLLECTION EMPTY"); /* Recursive EMPTY Collection */ do_geom_test("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY)", "GEOMETRYCOLLECTION EMPTY"); do_geom_test("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION EMPTY))", "GEOMETRYCOLLECTION EMPTY"); } static void test_coll_curve(void) { /* Two different types together must produce a Collection as output */ do_geom_test("GEOMETRYCOLLECTION(CIRCULARSTRING(0 0,1 1,2 2))", "CIRCULARSTRING(0 0,1 1,2 2)"); do_geom_test("GEOMETRYCOLLECTION(CIRCULARSTRING(0 0,1 1,2 2),CIRCULARSTRING(0 0,1 1,2 2))", "MULTICURVE(CIRCULARSTRING(0 0,1 1,2 2),CIRCULARSTRING(0 0,1 1,2 2))"); } static void test_geom(void) { /* Already simple geometry */ do_geom_test("POINT(1 2)", "POINT(1 2)"); do_geom_test("LINESTRING(1 2,3 4)", "LINESTRING(1 2,3 4)"); do_geom_test("POLYGON((1 2,3 4,5 6,1 2))", "POLYGON((1 2,3 4,5 6,1 2))"); do_geom_test("POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8))", "POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8))"); /* Empty geometry */ do_geom_test("GEOMETRYCOLLECTION EMPTY", "GEOMETRYCOLLECTION EMPTY"); /* A MULTI with a single geometry inside */ do_geom_test("MULTIPOINT(1 2)", "POINT(1 2)"); do_geom_test("MULTILINESTRING((1 2,3 4))", "LINESTRING(1 2,3 4)"); do_geom_test("MULTIPOLYGON(((1 2,3 4,5 6,1 2)))", "POLYGON((1 2,3 4,5 6,1 2))"); do_geom_test("MULTIPOLYGON(((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)))", "POLYGON((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8))"); /* A real MULTI */ do_geom_test("MULTIPOINT(1 2,3 4)", "MULTIPOINT(1 2,3 4)"); do_geom_test("MULTILINESTRING((1 2,3 4),(5 6,7 8))", "MULTILINESTRING((1 2,3 4),(5 6,7 8))"); do_geom_test("MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2)),((7 8,9 10,11 12,7 8)))"); do_geom_test("MULTIPOLYGON(((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)))", "MULTIPOLYGON(((1 2,3 4,5 6,1 2),(7 8,9 10,11 12,7 8)),((13 14,15 16,17 18,13 14)))"); /* A Collection */ do_geom_test("GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))", "GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(3 4,5 6))"); /* SRID */ do_geom_test("SRID=4326;GEOMETRYCOLLECTION EMPTY", "SRID=4326;GEOMETRYCOLLECTION EMPTY"); /* See http://trac.osgeo.org/postgis/ticket/2129 */ do_geom_test("SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT(0 0))", "SRID=4326;POINT(0 0)"); /* See http://trac.osgeo.org/postgis/ticket/2129 */ do_geom_test("SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT(0 0, 1 2))", "SRID=4326;MULTIPOINT(0 0,1 2)"); /* See http://trac.osgeo.org/postgis/ticket/2129 */ do_geom_test("SRID=4326;GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 0))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 0))"); do_geom_test("SRID=4326;POINT(1 2)", "SRID=4326;POINT(1 2)"); do_geom_test("SRID=4326;MULTIPOINT(1 2)", "SRID=4326;POINT(1 2)"); do_geom_test("SRID=4326;MULTIPOINT(1 2,3 4)", "SRID=4326;MULTIPOINT(1 2,3 4)"); do_geom_test("SRID=4326;MULTILINESTRING((1 2,3 4))", "SRID=4326;LINESTRING(1 2,3 4)"); do_geom_test("SRID=4326;MULTILINESTRING((1 2,3 4),(5 6,7 8))", "SRID=4326;MULTILINESTRING((1 2,3 4),(5 6,7 8))"); /* 3D and 4D */ do_geom_test("POINT(1 2 3)", "POINT(1 2 3)"); do_geom_test("POINTM(1 2 3)", "POINTM(1 2 3)"); do_geom_test("POINT(1 2 3 4)", "POINT(1 2 3 4)"); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo homogenize_tests[] = { PG_TEST(test_coll_point), PG_TEST(test_coll_line), PG_TEST(test_coll_poly), PG_TEST(test_coll_coll), PG_TEST(test_geom), PG_TEST(test_coll_curve), CU_TEST_INFO_NULL }; CU_SuiteInfo homogenize_suite = {"homogenize", NULL, NULL, homogenize_tests}; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_ptarray.c������������������������������������������������0000644�0000000�0000000�00000052571�12202632370�021207� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_print.c 6160 2010-11-01 01:28:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2011 Sandro Santilli <strk@keybit.net> * Copyright (C) 2008 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "CUnit/CUnit.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static LWGEOM* lwgeom_from_text(const char *str) { LWGEOM_PARSER_RESULT r; if( LW_FAILURE == lwgeom_parse_wkt(&r, (char*)str, LW_PARSER_CHECK_NONE) ) return NULL; return r.geom; } static char* lwgeom_to_text(const LWGEOM *geom) { return lwgeom_to_wkt(geom, WKT_ISO, 8, NULL); } static void test_ptarray_append_point(void) { LWLINE *line; char *wkt; POINT4D p; line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,1 1)")); p.x = 1; p.y = 1; ptarray_append_point(line->points, &p, LW_TRUE); wkt = lwgeom_to_text(lwline_as_lwgeom(line)); CU_ASSERT_STRING_EQUAL(wkt,"LINESTRING(0 0,1 1,1 1)"); lwfree(wkt); ptarray_append_point(line->points, &p, LW_FALSE); wkt = lwgeom_to_text(lwline_as_lwgeom(line)); CU_ASSERT_STRING_EQUAL(wkt,"LINESTRING(0 0,1 1,1 1)"); lwfree(wkt); lwline_free(line); } static void test_ptarray_insert_point(void) { LWLINE *line; char *wkt; POINT4D p; line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING EMPTY")); p.x = 1; p.y = 1; ptarray_insert_point(line->points, &p, 0); wkt = lwgeom_to_text(lwline_as_lwgeom(line)); CU_ASSERT_STRING_EQUAL(wkt,"LINESTRING(1 1)"); lwfree(wkt); p.x = 2; p.y = 20; ptarray_insert_point(line->points, &p, 0); wkt = lwgeom_to_text(lwline_as_lwgeom(line)); CU_ASSERT_STRING_EQUAL(wkt,"LINESTRING(2 20,1 1)"); lwfree(wkt); p.x = 3; p.y = 30; ptarray_insert_point(line->points, &p, 1); wkt = lwgeom_to_text(lwline_as_lwgeom(line)); CU_ASSERT_STRING_EQUAL(wkt,"LINESTRING(2 20,3 30,1 1)"); lwfree(wkt); p.x = 4; p.y = 40; ptarray_insert_point(line->points, &p, 0); wkt = lwgeom_to_text(lwline_as_lwgeom(line)); CU_ASSERT_STRING_EQUAL(wkt,"LINESTRING(4 40,2 20,3 30,1 1)"); lwfree(wkt); p.x = 5; p.y = 50; ptarray_insert_point(line->points, &p, 4); wkt = lwgeom_to_text(lwline_as_lwgeom(line)); CU_ASSERT_STRING_EQUAL(wkt,"LINESTRING(4 40,2 20,3 30,1 1,5 50)"); lwfree(wkt); lwline_free(line); } static void test_ptarray_append_ptarray(void) { LWLINE *line1, *line2; int ret; char *wkt; /* Empty first line */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING EMPTY")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,0 10,5 5)")); ret = ptarray_append_ptarray(line1->points, line2->points, -1); CU_ASSERT(ret == LW_SUCCESS); wkt = lwgeom_to_text(lwline_as_lwgeom(line1)); CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING(0 0,0 10,5 5)"); lwfree(wkt); lwline_free(line2); lwline_free(line1); /* Empty second line */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0, 5 5, 6 3)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING EMPTY")); ret = ptarray_append_ptarray(line1->points, line2->points, -1); CU_ASSERT(ret == LW_SUCCESS); wkt = lwgeom_to_text(lwline_as_lwgeom(line1)); CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING(0 0,5 5,6 3)"); lwfree(wkt); lwline_free(line2); lwline_free(line1); /* Both lines empty */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING EMPTY")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING EMPTY")); ret = ptarray_append_ptarray(line1->points, line2->points, -1); CU_ASSERT(ret == LW_SUCCESS); wkt = lwgeom_to_text(lwline_as_lwgeom(line1)); CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING EMPTY"); lwfree(wkt); lwline_free(line2); lwline_free(line1); /* Sane sewing */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 4, 0 0,5 7)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(5 7,12 43, 42 15)")); ret = ptarray_append_ptarray(line1->points, line2->points, 0); CU_ASSERT(ret == LW_SUCCESS); wkt = lwgeom_to_text(lwline_as_lwgeom(line1)); CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING(10 4,0 0,5 7,12 43,42 15)"); lwfree(wkt); lwline_free(line2); lwline_free(line1); /* Untolerated sewing */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 4, 0 0,5 7)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(5.5 7,12 43, 42 15)")); ret = ptarray_append_ptarray(line1->points, line2->points, 0); CU_ASSERT(ret == LW_FAILURE); lwline_free(line2); lwline_free(line1); /* Tolerated sewing */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 4, 0 0,5 7)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(5.5 7,12 43, 42 15)")); ret = ptarray_append_ptarray(line1->points, line2->points, .7); CU_ASSERT(ret == LW_SUCCESS); wkt = lwgeom_to_text(lwline_as_lwgeom(line1)); CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING(10 4,0 0,5 7,5.5 7,12 43,42 15)"); lwfree(wkt); lwline_free(line2); lwline_free(line1); /* Check user input trust (creates non-simple line */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,0 10)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,0 10)")); ret = ptarray_append_ptarray(line1->points, line2->points, -1); CU_ASSERT(ret == LW_SUCCESS); wkt = lwgeom_to_text(lwline_as_lwgeom(line1)); CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING(0 0,0 10,0 0,0 10)"); lwfree(wkt); lwline_free(line2); lwline_free(line1); /* Mixed dimensionality is not allowed */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 10 0, 10 0 0)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 0,11 0)")); ret = ptarray_append_ptarray(line1->points, line2->points, -1); CU_ASSERT(ret == LW_FAILURE); lwline_free(line2); lwline_free(line1); /* Appending a read-only pointarray is allowed */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 10, 10 0)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 0,11 0)")); FLAGS_SET_READONLY(line2->points->flags, 1); ret = ptarray_append_ptarray(line1->points, line2->points, -1); CU_ASSERT(ret == LW_SUCCESS); wkt = lwgeom_to_text(lwline_as_lwgeom(line1)); CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING(0 10,10 0,11 0)"); lwfree(wkt); FLAGS_SET_READONLY(line2->points->flags, 0); /* for lwline_free */ lwline_free(line2); lwline_free(line1); /* Appending to a read-only pointarray is forbidden */ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 10, 10 0)")); line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 0,11 0)")); FLAGS_SET_READONLY(line1->points->flags, 1); ret = ptarray_append_ptarray(line1->points, line2->points, -1); CU_ASSERT(ret == LW_FAILURE); lwline_free(line2); FLAGS_SET_READONLY(line1->points->flags, 0); /* for lwline_free */ lwline_free(line1); } static void test_ptarray_locate_point(void) { LWLINE *line; double loc, dist; POINT4D p, l; line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 3,20 4)")); p = getPoint4d(line->points, 0); loc = ptarray_locate_point(line->points, &p, &dist, &l); CU_ASSERT_EQUAL(loc, 0); CU_ASSERT_EQUAL(dist, 0.0); p = getPoint4d(line->points, 1); loc = ptarray_locate_point(line->points, &p, &dist, &l); CU_ASSERT_EQUAL(loc, 1); CU_ASSERT_EQUAL(dist, 0.0); p.x = 21; p.y = 4; loc = ptarray_locate_point(line->points, &p, &dist, NULL); CU_ASSERT_EQUAL(loc, 1); CU_ASSERT_EQUAL(dist, 1.0); p.x = 0; p.y = 2; loc = ptarray_locate_point(line->points, &p, &dist, &l); CU_ASSERT_EQUAL(loc, 0); CU_ASSERT_EQUAL(dist, 1.0); lwline_free(line); line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,20 0,40 0)")); p.x = 20; p.y = 0; loc = ptarray_locate_point(line->points, &p, &dist, &l); CU_ASSERT_EQUAL(loc, 0.5); CU_ASSERT_EQUAL(dist, 0.0); lwline_free(line); line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-40 0,0 0,20 0,40 0)")); p.x = 20; p.y = 0; loc = ptarray_locate_point(line->points, &p, &dist, &l); CU_ASSERT_EQUAL(loc, 0.75); CU_ASSERT_EQUAL(dist, 0.0); lwline_free(line); line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING M (0 0 0, 10 0 20)")); p.x = 5; p.y = 0; loc = ptarray_locate_point(line->points, &p, &dist, &l); CU_ASSERT_EQUAL(loc, 0.5); CU_ASSERT_EQUAL(dist, 0.0); CU_ASSERT_EQUAL(l.m, 10.0); lwline_free(line); } static void test_ptarray_isccw(void) { LWLINE *line; LWPOLY* poly; int ccw; /* clockwise rectangle */ line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,0 10,10 10,10 0, 0 0)")); ccw = ptarray_isccw(line->points); CU_ASSERT_EQUAL(ccw, 0); lwline_free(line); /* clockwise triangle */ line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 3,20 4,20 3, 0 3)")); ccw = ptarray_isccw(line->points); CU_ASSERT_EQUAL(ccw, 0); lwline_free(line); /* counterclockwise triangle */ line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 3,20 3,20 4, 0 3)")); ccw = ptarray_isccw(line->points); CU_ASSERT_EQUAL(ccw, 1); lwline_free(line); /* counterclockwise narrow ring (see ticket #1302) */ line = lwgeom_as_lwline(lwgeom_from_hexwkb("01020000000500000000917E9BA468294100917E9B8AEA284137894120A4682941C976BE9F8AEA2841B39ABE1FA46829415ACCC29F8AEA2841C976BE1FA4682941C976BE9F8AEA284100917E9BA468294100917E9B8AEA2841", LW_PARSER_CHECK_NONE)); ccw = ptarray_isccw(line->points); CU_ASSERT_EQUAL(ccw, 1); lwline_free(line); /* clockwise narrow ring (see ticket #1302) */ line = lwgeom_as_lwline(lwgeom_from_hexwkb("01020000000500000000917E9BA468294100917E9B8AEA2841C976BE1FA4682941C976BE9F8AEA2841B39ABE1FA46829415ACCC29F8AEA284137894120A4682941C976BE9F8AEA284100917E9BA468294100917E9B8AEA2841", LW_PARSER_CHECK_NONE)); ccw = ptarray_isccw(line->points); CU_ASSERT_EQUAL(ccw, 0); lwline_free(line); /* Clockwise narrow ring (see ticket #1302) */ poly = lwgeom_as_lwpoly(lwgeom_from_hexwkb("0103000000010000000500000000917E9BA468294100917E9B8AEA2841C976BE1FA4682941C976BE9F8AEA2841B39ABE1FA46829415ACCC29F8AEA284137894120A4682941C976BE9F8AEA284100917E9BA468294100917E9B8AEA2841", LW_PARSER_CHECK_NONE)); ccw = ptarray_isccw(poly->rings[0]); CU_ASSERT_EQUAL(ccw, 0); lwpoly_free(poly); } static void test_ptarray_signed_area() { LWLINE *line; double area; /* parallelogram */ line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,1 1, 2 1, 1 0, 0 0)")); area = ptarray_signed_area(line->points); CU_ASSERT_DOUBLE_EQUAL(area, 1.0, 0.0000001); lwline_free(line); /* square */ line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,0 2, 2 2, 2 0, 0 0)")); area = ptarray_signed_area(line->points); CU_ASSERT_DOUBLE_EQUAL(area, 4.0, 0.0000001); lwline_free(line); /* square backwares*/ line = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0,2 0, 2 2, 0 2, 0 0)")); area = ptarray_signed_area(line->points); //printf("%g\n",area); CU_ASSERT_DOUBLE_EQUAL(area, -4.0, 0.0000001); lwline_free(line); } static void test_ptarray_desegmentize() { LWGEOM *in, *out; char *str; /* It would be nice if this example returned two arcs (it's the intersection of two circles) but it looks like the intersection itself is too sloppy in generating the derived point to accurately reconstruct the circles. in = lwgeom_from_text("POLYGON((0.5 0,0.471177920604846 -0.292635483024192,0.38581929876693 -0.574025148547634,0.247204418453818 -0.833355349529403,0.0606601717798223 -1.06066017177982,-5.44089437167602e-17 -1.11044268820754,-0.0606601717798188 -1.06066017177982,-0.247204418453816 -0.833355349529406,-0.385819298766929 -0.574025148547639,-0.471177920604845 -0.292635483024197,-0.5 -4.84663372329776e-15,-0.471177920604847 0.292635483024187,-0.385819298766932 0.57402514854763,-0.247204418453821 0.833355349529398,-0.0606601717798256 1.06066017177982,3.45538806345173e-16 1.11044268820754,0.0606601717798183 1.06066017177982,0.247204418453816 0.833355349529407,0.385819298766929 0.574025148547638,0.471177920604845 0.292635483024196,0.5 0))"); out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); printf("%s\n", str); CU_ASSERT_STRING_EQUAL(str, "CIRCULARSTRING(-1 0,0 1,0 -1)"); lwgeom_free(in); lwgeom_free(out); lwfree(str); */ in = lwgeom_from_text("CIRCULARSTRING(-1 0,0 1,0 -1)"); out = lwgeom_segmentize(in,8); lwgeom_free(in); in = out; out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); //printf("%s\n", str); CU_ASSERT_STRING_EQUAL(str, "CIRCULARSTRING(-1 0,0.70710678 0.70710678,0 -1)"); lwgeom_free(in); lwgeom_free(out); lwfree(str); in = lwgeom_from_text("COMPOUNDCURVE(CIRCULARSTRING(-1 0,0 1,0 -1),(0 -1,-1 -1))"); out = lwgeom_segmentize(in,8); lwgeom_free(in); in = out; out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); //printf("%s\n", str); CU_ASSERT_STRING_EQUAL(str, "COMPOUNDCURVE(CIRCULARSTRING(-1 0,0.70710678 0.70710678,0 -1),(0 -1,-1 -1))"); lwgeom_free(in); lwgeom_free(out); lwfree(str); in = lwgeom_from_text("COMPOUNDCURVE((-3 -3,-1 0),CIRCULARSTRING(-1 0,0 1,0 -1),(0 -1,0 -1.5,0 -2),CIRCULARSTRING(0 -2,-1 -3,1 -3),(1 -3,5 5))"); out = lwgeom_segmentize(in,8); lwgeom_free(in); in = out; out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); //printf("%s\n", str); CU_ASSERT_STRING_EQUAL(str, "COMPOUNDCURVE((-3 -3,-1 0),CIRCULARSTRING(-1 0,0.70710678 0.70710678,0 -1),(0 -1,0 -1.5,0 -2),CIRCULARSTRING(0 -2,-0.70710678 -3.7071068,1 -3),(1 -3,5 5))"); lwgeom_free(in); lwgeom_free(out); lwfree(str); in = lwgeom_from_text("COMPOUNDCURVE(CIRCULARSTRING(-1 0,0 1,0 -1),CIRCULARSTRING(0 -1,-1 -2,1 -2))"); out = lwgeom_segmentize(in,8); lwgeom_free(in); in = out; out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); //printf("%s\n", str); CU_ASSERT_STRING_EQUAL(str, "COMPOUNDCURVE(CIRCULARSTRING(-1 0,0.70710678 0.70710678,0 -1),CIRCULARSTRING(0 -1,-0.70710678 -2.7071068,1 -2))"); lwgeom_free(in); lwgeom_free(out); lwfree(str); in = lwgeom_from_text("COMPOUNDCURVE((0 0, 1 1), CIRCULARSTRING(1 1, 2 2, 3 1), (3 1, 4 4))"); out = lwgeom_segmentize(in,8); lwgeom_free(in); in = out; out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); CU_ASSERT_STRING_EQUAL(str, "COMPOUNDCURVE((0 0,1 1),CIRCULARSTRING(1 1,2 2,3 1),(3 1,4 4))"); lwgeom_free(in); lwgeom_free(out); // printf("%s\n", str); lwfree(str); // See http://trac.osgeo.org/postgis/ticket/2425 // and http://trac.osgeo.org/postgis/ticket/2420 in = lwgeom_from_text("LINESTRING(0 0,10 0,10 10,0 10,0 0)"); out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); CU_ASSERT_STRING_EQUAL(str, "LINESTRING(0 0,10 0,10 10,0 10,0 0)"); lwgeom_free(in); lwgeom_free(out); lwfree(str); in = lwgeom_from_text("LINESTRING(10 10,0 10,0 0,10 0)"); out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); CU_ASSERT_STRING_EQUAL(str, "LINESTRING(10 10,0 10,0 0,10 0)"); printf("%s\n", str); lwgeom_free(in); lwgeom_free(out); lwfree(str); in = lwgeom_from_text("LINESTRING(0 0,10 0,10 10,0 10)"); out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); CU_ASSERT_STRING_EQUAL(str, "LINESTRING(0 0,10 0,10 10,0 10)"); printf("%s\n", str); lwgeom_free(in); lwgeom_free(out); lwfree(str); // See http://trac.osgeo.org/postgis/ticket/2412 in = lwgeom_from_text("LINESTRING(0 0, 1 1)"); out = lwgeom_desegmentize(in); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); //printf("%s\n", str); CU_ASSERT_STRING_EQUAL(str, "LINESTRING(0 0,1 1)"); lwgeom_free(in); lwgeom_free(out); lwfree(str); } static void test_ptarray_contains_point() { /* int ptarray_contains_point(const POINTARRAY *pa, const POINT2D *pt, int *winding_number) */ LWLINE *lwline; POINTARRAY *pa; POINT2D pt; int rv; lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)")); pa = lwline->points; /* Point in middle of square */ pt.x = 0.5; pt.y = 0.5; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point on left edge of square */ pt.x = 0; pt.y = 0.5; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_BOUNDARY); /* Point on top edge of square */ pt.x = 0.5; pt.y = 1; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_BOUNDARY); /* Point on bottom left corner of square */ pt.x = 0; pt.y = 0; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_BOUNDARY); /* Point on top left corner of square */ pt.x = 0; pt.y = 1; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_BOUNDARY); /* Point outside top left corner of square */ pt.x = -0.1; pt.y = 1; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /* Point outside top left corner of square */ pt.x = 0; pt.y = 1.1; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /* Point outside left side of square */ pt.x = -0.2; pt.y = 0.5; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0, 1 1, 2 0, 0 0)")); pa = lwline->points; /* Point outside grazing top of triangle */ pt.x = 0; pt.y = 1; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 0, 0 4, 1 4, 2 2, 3 4, 4 4, 4 0, 0 0)")); pa = lwline->points; /* Point outside grazing top of triangle */ pt.x = 1; pt.y = 2; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point outside grazing top of triangle */ pt.x = 3; pt.y = 2; rv = ptarray_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); lwline_free(lwline); } static void test_ptarrayarc_contains_point() { /* int ptarrayarc_contains_point(const POINTARRAY *pa, const POINT2D *pt) */ LWLINE *lwline; POINTARRAY *pa; POINT2D pt; int rv; /*** Collection of semi-circles surrounding unit square ***/ lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 -1, -2 0, -1 1, 0 2, 1 1, 2 0, 1 -1, 0 -2, -1 -1)")); pa = lwline->points; /* Point in middle of square */ pt.x = 0; pt.y = 0; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point in left lobe */ pt.x = -1.1; pt.y = 0.1; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point on boundary of left lobe */ pt.x = -1; pt.y = 0; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point on boundary vertex */ pt.x = -1; pt.y = 1; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_BOUNDARY); /* Point outside */ pt.x = -1.5; pt.y = 1.5; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /*** Two-edge ring made up of semi-circles (really, a circle) ***/ lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 0 1, 1 0, 0 -1, -1 0)")); pa = lwline->points; /* Point outside */ pt.x = -1.5; pt.y = 1.5; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /* Point more outside */ pt.x = 2.5; pt.y = 1.5; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /* Point more outside */ pt.x = 2.5; pt.y = 2.5; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /* Point inside at middle */ pt.x = 0; pt.y = 0; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point inside offset from middle */ pt.x = 0.01; pt.y = 0.01; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point on edge vertex */ pt.x = 0; pt.y = 1; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_BOUNDARY); /*** Two-edge ring, closed ***/ lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(1 6, 6 1, 9 7, 6 10, 1 6)")); pa = lwline->points; /* Point to left of ring */ pt.x = 20; pt.y = 4; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /*** One-edge ring, closed circle ***/ lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 1 0, -1 0)")); pa = lwline->points; /* Point inside */ pt.x = 0; pt.y = 0; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_INSIDE); /* Point outside */ pt.x = 0; pt.y = 2; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_OUTSIDE); /* Point on boundary */ pt.x = 0; pt.y = 1; rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_EQUAL(rv, LW_BOUNDARY); /*** Overshort ring ***/ lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 1 0)")); pa = lwline->points; cu_error_msg_reset(); rv = ptarrayarc_contains_point(pa, &pt); //printf("%s\n", cu_error_msg); CU_ASSERT_STRING_EQUAL("ptarrayarc_contains_point called with even number of points", cu_error_msg); /*** Unclosed ring ***/ lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 1 0, 2 0)")); pa = lwline->points; cu_error_msg_reset(); rv = ptarrayarc_contains_point(pa, &pt); CU_ASSERT_STRING_EQUAL("ptarrayarc_contains_point called on unclosed ring", cu_error_msg); lwline_free(lwline); } /* ** Used by the test harness to register the tests in this file. */ CU_TestInfo ptarray_tests[] = { PG_TEST(test_ptarray_append_point), PG_TEST(test_ptarray_append_ptarray), PG_TEST(test_ptarray_locate_point), PG_TEST(test_ptarray_isccw), PG_TEST(test_ptarray_signed_area), PG_TEST(test_ptarray_desegmentize), PG_TEST(test_ptarray_insert_point), PG_TEST(test_ptarray_contains_point), PG_TEST(test_ptarrayarc_contains_point), CU_TEST_INFO_NULL }; CU_SuiteInfo ptarray_suite = {"ptarray", NULL, NULL, ptarray_tests }; ���������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/README������������������������������������������������������0000644�0000000�0000000�00000014063�11722777314�017562� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TABLE OF CONTENTS 1. HOW TO RUN LIBLWGEOM UNIT TESTS 2. HOW TO ADD A SINGLE TEST 3. HOW TO ADD AN ENTIRE TEST SUITE 4. ABOUT TEST OUTPUT 5. HOW TO ASSERT A FAILURE 1. HOW TO RUN LIBLWGEOM UNIT TESTS NOTE: We use the CUnit test framework, so you will need to have this installed before you will be able to build and run the unit tests. If you have already built the rest of the code, then from the postgis/liblwgeom/cunit directory, run: make ./cu_tester This will run all the tests. To run just one suite: ./cu_tester <suite name> To run just one test: ./cu_tester <test name> To run selected suites or tests (will be run in the order you specify): ./cu_tester <test name> <suite name> <other suite name> <other test name> <etc> Unit tests for the entire system (including both these unit tests and others that require postgresql to be running) can be done by running the following command from the top of the directory tree (postgis directory): make check 2. HOW TO ADD A SINGLE TEST To add a test to an existing suite, follow these steps: 2.1 Create the test: Open the cu_<suite name>.c file, and add your new test function. Test functions must have the following signature: static void <test_name>(void) <test_name> must be unique among all tests. A useful naming convention is: static void test_<suite>_<specific name>(void) Although not all existing tests follow that convention. For information on the various ASSERT macros you can use, see the CUnit documentation: http://cunit.sourceforge.net/doc/writing_tests.html 2.2 Add the test to the suite: At the bottom of the cu_<suite name>.c file, below all the test functions, you will find a block that looks like this (this example is from cu_print.c): /* ** Used by the test harness to register the tests in this file. */ CU_TestInfo print_tests[] = { PG_TEST(test_lwprint_default_format), PG_TEST(test_lwprint_format_orders), PG_TEST(test_lwprint_optional_format), PG_TEST(test_lwprint_oddball_formats), PG_TEST(test_lwprint_bad_formats), CU_TEST_INFO_NULL }; Add a new line for your test: PG_TEST(<your test function name>), The tests will be run in the order they appear in the list. CU_TEST_INFO_NULL must always be the last entry. 2.3 Add any necessary init / cleanup code. If your test needs global data created or any other kind of init done before it runs, or cleanup done after it runs, add the appropriate code to the init_<suite name> or clean_<suite name> functions. If the test suite does not seem to have these functions (they are optional), see below (3.3) for how to create them. Save your changes, run make, and run ./cu_tester, and your test should be executed. 3. HOW TO ADD AN ENTIRE TEST SUITE Do the following steps to create a whole new test suite (new .c file). 3.1 Create the file. Create the new file (remember to add to svn as well). The naming convention is cu_<suite name>.c. Make sure to import: #include "CUnit/Basic.h" #include "cu_tester.h" Now add the file to Makefile.in. Look for "ADD YOUR NEW TEST FILE HERE". Remember that you'll have to re-run "configure" (from the top directory) after modifying a .in file. 3.2 Write the tests. Write the test functions as described in section 2. Then at the bottom of the file, construct the array of tests (example taken from cu_print.c): /* ** Used by the test harness to register the tests in this file. */ CU_TestInfo print_tests[] = { PG_TEST(test_lwprint_default_format), PG_TEST(test_lwprint_format_orders), PG_TEST(test_lwprint_optional_format), PG_TEST(test_lwprint_oddball_formats), PG_TEST(test_lwprint_bad_formats), CU_TEST_INFO_NULL }; Note that each test function must be wrapped with the PG_TEST macro, and the last entry must be CU_TEST_INFO_NULL. The naming convention is generally <suite name>_tests. 3.3 Construct the init / clean functions and the suite struct. Test suites can have initialization and cleanup functions to setup and dispose of any common or global data. They must have the following signature: static int <function name>(void) The naming convention is generally: static int init_<suite name>(void) static int clean_<suite_name>(void) The very last line of the file (after all the functions and the tests array) should look like this: CU_SuiteInfo <suite info name> = {"<suite display name>", <init function>, <clean function>, <test array>}; The naming convention is generally <suite name>_suite. If you do not have an init function, you may pass "NULL" instead. Same with the clean function. 3.4 Add your suite to cu_tester.c. Edit cu_tester.c. Search for "ADD YOUR SUITE HERE" and add new lines in the appropriate places, using the suite info name you used in the last step. Now run make (remember to run configure first), then ./cu_tester and your new suite should run. 4. ABOUT TEST OUTPUT CUnit does not print much about asserts that fail, just the line number within the appropriate file. If you need any more detailed output, it is up to you to printf it. If you discover that all the test suites are full of individual hacks to do this, please consolidate them into cu_tester.h / .c, and/or enter a trac issue suggesting an improvement. 5. HOW TO ASSERT A FAILURE Often you may want to assert that lwerror was called, possibly verifying that a specific error message was generated. There is now a way to do this. The global char array "cu_error_msg" will always contain the most recent error from an lwerror call. You can check it in your test function (either asserting its length is greater than zero, or looking for a specific string). Then call cu_error_msg_reset() to clear it when you're done. It is a good idea to call cu_error_msg_reset prior to your test, in case a previous test has generated an error that was not cleared. Example: cu_error_msg_reset(); <do something here> if (strlen(cu_error_msg) > 0) { printf("\nError: <whatever your test was> generated an error: %s\n", cu_error_msg); CU_FAIL(); /* be nice and clean it up for the next test. */ cu_error_msg_reset(); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/Makefile.in�������������������������������������������������0000644�0000000�0000000�00000004351�12142775451�020743� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * $Id: Makefile.in # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Paul Ramsey, Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** CC=@CC@ CFLAGS=@CFLAGS@ @WARNFLAGS@ @GEOS_CPPFLAGS@ @PROJ_CPPFLAGS@ LDFLAGS = @GEOS_LDFLAGS@ -lgeos_c top_builddir = @top_builddir@ SHELL = @SHELL@ LIBTOOL = @LIBTOOL@ CUNIT_LDFLAGS=@CUNIT_LDFLAGS@ CUNIT_CPPFLAGS=@CUNIT_CPPFLAGS@ -I.. # ADD YOUR NEW TEST FILE HERE (1/1) OBJS= \ cu_algorithm.o \ cu_buildarea.o \ cu_clean.o \ cu_print.o \ cu_misc.o \ cu_ptarray.o \ cu_geodetic.o \ cu_geos.o \ cu_tree.o \ cu_measures.o \ cu_node.o \ cu_libgeom.o \ cu_split.o \ cu_stringbuffer.o \ cu_triangulate.o \ cu_homogenize.o \ cu_force_sfs.o \ cu_out_wkt.o \ cu_out_wkb.o \ cu_out_gml.o \ cu_out_kml.o \ cu_out_geojson.o \ cu_out_svg.o \ cu_surface.o \ cu_out_x3d.o \ cu_in_geojson.o \ cu_in_wkb.o \ cu_in_wkt.o \ cu_tester.o ifeq (@SFCGAL@,sfcgal) CXXFLAGS += @SFCGAL_CPPFLAGS@ LDFLAGS += @SFCGAL_LDFLAGS@ OBJS += cu_sfcgal.o endif # If we couldn't find the cunit library then display a helpful message ifeq ($(CUNIT_LDFLAGS),) all: requirements_not_met_cunit check: requirements_not_met_cunit else # Build the unit tester all: cu_tester # Build and run the unit tester check: cu_tester @./cu_tester endif # Build the main unit test executable cu_tester: ../liblwgeom.la $(OBJS) $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o $@ $(OBJS) ../liblwgeom.la $(CUNIT_LDFLAGS) #$(CC) -o $@ $(OBJS) ../.libs/liblwgeom.a -lm $(CUNIT_LDFLAGS) $(LDFLAGS) # Command to build each of the .o files $(OBJS): %.o: %.c $(CC) $(CFLAGS) $(CUNIT_CPPFLAGS) -c -o $@ $< # Clean target clean: rm -f $(OBJS) rm -f cu_tester distclean: clean rm -f Makefile # Requirements message requirements_not_met_cunit: @echo @echo "WARNING:" @echo @echo "configure was unable to find CUnit which is required for unit testing." @echo "In order to enable unit testing, you must install CUnit and then re-run configure." @echo ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_surface.c������������������������������������������������0000644�0000000�0000000�00000046420�12236031373�021154� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id:$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010-2012 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "cu_surface.h" void triangle_parse(void) { LWGEOM *geom; GSERIALIZED *g; char *tmp; cu_error_msg_reset(); /* Because i don't trust that much prior tests... ;) */ /* 2 dims */ geom = lwgeom_from_wkt("TRIANGLE((0 1,2 3,4 5,0 1))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TRIANGLETYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TRIANGLE((0 1,2 3,4 5,0 1))", tmp); lwfree(tmp); lwgeom_free(geom); /* 3DM */ geom = lwgeom_from_wkt("TRIANGLEM((0 1 2,3 4 5,6 7 8,0 1 2))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TRIANGLETYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TRIANGLEM((0 1 2,3 4 5,6 7 8,0 1 2))", tmp); lwfree(tmp); lwgeom_free(geom); /* ERROR: a missing Z values */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,6 7,0 1 2))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("can not mix dimensionality in a geometry", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed rings */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,6 7 8,0 0 2))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed face in Z dim */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,6 7 8,0 1 3))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed face in Z dim, with a 4D geom */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2 3,4 5 6 7,8 9 10 11,0 1 3 3))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: only 3 points in a face */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,0 1 2))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("triangle must have exactly 4 points", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: more than 4 points in a face */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,6 7 8,9 10 11,0 1 2))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("triangle must have exactly 4 points", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: no interior rings allowed */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,6 7 8,0 1 2),(9 10 11,12 13 14,15 16 17,9 10 11)", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("parse error - invalid geometry", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* EMPTY face */ geom = lwgeom_from_wkt("TRIANGLE EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TRIANGLETYPE); tmp = lwgeom_to_wkt(geom, LW_PARSER_CHECK_NONE, 0, 0); CU_ASSERT_STRING_EQUAL("TRIANGLE EMPTY", tmp); lwfree(tmp); lwgeom_free(geom); /* explicit SRID */ geom = lwgeom_from_wkt("SRID=4326;TRIANGLE((0 1 2,3 4 5,6 7 8,0 1 2))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TRIANGLETYPE); CU_ASSERT_EQUAL(geom->srid, 4326); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("SRID=4326;TRIANGLE((0 1 2,3 4 5,6 7 8,0 1 2))", tmp); lwfree(tmp); lwgeom_free(geom); /* geography support */ geom = lwgeom_from_wkt("TRIANGLE((0 1 2,3 4 5,6 7 8,0 1 2))", LW_PARSER_CHECK_NONE); g = gserialized_from_lwgeom(geom, 1, 0); CU_ASSERT_EQUAL(gserialized_get_type(g), TRIANGLETYPE); lwgeom_free(geom); lwfree(g); } void tin_parse(void) { LWGEOM *geom; GSERIALIZED *g; char *tmp; cu_error_msg_reset(); /* Because i don't trust that much prior tests... ;) */ /* empty */ geom = lwgeom_from_wkt("TIN EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TINTYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TIN EMPTY", tmp); lwfree(tmp); lwgeom_free(geom); /* 2 dims */ geom = lwgeom_from_wkt("TIN(((0 1,2 3,4 5,0 1)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TINTYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TIN(((0 1,2 3,4 5,0 1)))", tmp); lwfree(tmp); lwgeom_free(geom); /* 3DM */ geom = lwgeom_from_wkt("TINM(((0 1 2,3 4 5,6 7 8,0 1 2)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TINTYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TINM(((0 1 2,3 4 5,6 7 8,0 1 2)))", tmp); lwfree(tmp); lwgeom_free(geom); /* ERROR: a missing Z values */ geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,6 7,0 1 2)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("can not mix dimensionality in a geometry", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed rings */ geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,6 7 8,0 0 2)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed face in Z dim */ geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,6 7 8,0 1 3)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed face in Z dim, with a 4D geom */ geom = lwgeom_from_wkt("TIN(((0 1 2 3,4 5 6 7,8 9 10 11,0 1 3 3)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: only 3 points in a face */ geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,0 1 2)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("triangle must have exactly 4 points", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: more than 3 points in a face */ geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,6 7 8,9 10 11,0 1 2)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("triangle must have exactly 4 points", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: use ring for triangle */ geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,6 7 8,0 1 2),(9 10 11,12 13 14,15 16 17,9 10 11)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("parse error - invalid geometry", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* EMPTY face */ geom = lwgeom_from_wkt("TIN EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TINTYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TIN EMPTY", tmp); lwfree(tmp); lwgeom_free(geom); /* A simple tetrahedron */ geom = lwgeom_from_wkt("TIN(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TINTYPE); CU_ASSERT_EQUAL(geom->srid, SRID_UNKNOWN); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TIN(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", tmp); lwfree(tmp); lwgeom_free(geom); /* A 4D tetrahedron */ geom = lwgeom_from_wkt("TIN(((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TINTYPE); CU_ASSERT_EQUAL(FLAGS_GET_M(geom->flags), 1); CU_ASSERT_EQUAL(geom->srid, SRID_UNKNOWN); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("TIN(((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))", tmp); lwfree(tmp); lwgeom_free(geom); /* explicit SRID */ geom = lwgeom_from_wkt("SRID=4326;TIN(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, TINTYPE); CU_ASSERT_EQUAL(geom->srid, 4326); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("SRID=4326;TIN(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", tmp); lwfree(tmp); lwgeom_free(geom); /* geography support */ geom = lwgeom_from_wkt("TIN(((0 1 2,3 4 5,6 7 8,0 1 2)))", LW_PARSER_CHECK_NONE); g = gserialized_from_lwgeom(geom, 1, 0); CU_ASSERT_EQUAL(gserialized_get_type(g), TINTYPE); lwgeom_free(geom); lwfree(g); } void polyhedralsurface_parse(void) { LWGEOM *geom; GSERIALIZED *g; char *tmp; cu_error_msg_reset(); /* Because i don't trust that much prior tests... ;) */ /* 2 dims */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1,2 3,4 5,0 1)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, POLYHEDRALSURFACETYPE); tmp = lwgeom_to_hexwkb(geom, WKB_NDR | WKB_EXTENDED, 0); CU_ASSERT_STRING_EQUAL("010F00000001000000010300000001000000040000000000000000000000000000000000F03F00000000000000400000000000000840000000000000104000000000000014400000000000000000000000000000F03F", tmp); lwfree(tmp); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("POLYHEDRALSURFACE(((0 1,2 3,4 5,0 1)))", tmp); lwfree(tmp); lwgeom_free(geom); /* 3DM */ geom = lwgeom_from_wkt("POLYHEDRALSURFACEM(((0 1 2,3 4 5,6 7 8,0 1 2)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, POLYHEDRALSURFACETYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("POLYHEDRALSURFACEM(((0 1 2,3 4 5,6 7 8,0 1 2)))", tmp); lwfree(tmp); tmp = lwgeom_to_hexwkb(geom, WKB_NDR | WKB_EXTENDED, 0); CU_ASSERT_STRING_EQUAL("010F00004001000000010300004001000000040000000000000000000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400000000000001C4000000000000020400000000000000000000000000000F03F0000000000000040", tmp); lwfree(tmp); lwgeom_free(geom); /* ERROR: a missing Z values */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7,0 1 2)))", LW_PARSER_CHECK_NONE); CU_ASSERT_STRING_EQUAL("can not mix dimensionality in a geometry", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* 1 face with 1 interior ring */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7 8,0 1 2),(9 10 11,12 13 14,15 16 17,9 10 11)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, POLYHEDRALSURFACETYPE); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7 8,0 1 2),(9 10 11,12 13 14,15 16 17,9 10 11)))", tmp); lwfree(tmp); tmp = lwgeom_to_hexwkb(geom, WKB_NDR | WKB_EXTENDED, 0); CU_ASSERT_STRING_EQUAL("010F00008001000000010300008002000000040000000000000000000000000000000000F03F000000000000004000000000000008400000000000001040000000000000144000000000000018400000000000001C4000000000000020400000000000000000000000000000F03F00000000000000400400000000000000000022400000000000002440000000000000264000000000000028400000000000002A400000000000002C400000000000002E4000000000000030400000000000003140000000000000224000000000000024400000000000002640", tmp); lwfree(tmp); lwgeom_free(geom); /* ERROR: non closed rings */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7 8,0 0 2)))", LW_PARSER_CHECK_ALL); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed face in Z dim */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7 8,0 1 3)))", LW_PARSER_CHECK_ALL); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: non closed face in Z dim, with a 4D geom */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2 3,4 5 6 7,8 9 10 11,0 1 3 3)))", LW_PARSER_CHECK_ALL); CU_ASSERT_STRING_EQUAL("geometry contains non-closed rings", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* ERROR: only 3 points in a face */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2,3 4 5,0 1 2)))", LW_PARSER_CHECK_ALL); CU_ASSERT_STRING_EQUAL("geometry requires more points", cu_error_msg); cu_error_msg_reset(); lwgeom_free(geom); /* EMPTY face */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE EMPTY", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, POLYHEDRALSURFACETYPE); tmp = (char*)lwgeom_to_wkb(geom, WKB_HEX | WKB_ISO | WKB_NDR, 0); CU_ASSERT_STRING_EQUAL("010F00000000000000", tmp); lwfree(tmp); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("POLYHEDRALSURFACE EMPTY", tmp); lwfree(tmp); lwgeom_free(geom); /* A simple tetrahedron */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, POLYHEDRALSURFACETYPE); CU_ASSERT_EQUAL(geom->srid, SRID_UNKNOWN); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", tmp); lwfree(tmp); tmp = lwgeom_to_hexwkb(geom, WKB_NDR | WKB_EXTENDED, 0); CU_ASSERT_STRING_EQUAL("010F000080040000000103000080010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000010300008001000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000001030000800100000004000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000001030000800100000004000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F00000000000000000000000000000000", tmp); lwfree(tmp); lwgeom_free(geom); /* A 4D tetrahedron */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, POLYHEDRALSURFACETYPE); CU_ASSERT_EQUAL(FLAGS_GET_M(geom->flags), 1); CU_ASSERT_EQUAL(geom->srid, SRID_UNKNOWN); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("POLYHEDRALSURFACE(((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))", tmp); lwfree(tmp); tmp = lwgeom_to_hexwkb(geom, WKB_NDR | WKB_EXTENDED, 0); CU_ASSERT_STRING_EQUAL("010F0000C00400000001030000C00100000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000F03F00000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000001030000C0010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000001040000000000000000000000000000000000000000000000000000000000000000001030000C001000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000001840000000000000000000000000000000000000000000000000000000000000000001030000C00100000004000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F000000000000000000000000000000000000000000000000", tmp); lwfree(tmp); lwgeom_free(geom); /* explicit SRID */ geom = lwgeom_from_wkt("SRID=4326;POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(geom->type, POLYHEDRALSURFACETYPE); CU_ASSERT_EQUAL(geom->srid, 4326); tmp = lwgeom_to_ewkt(geom); CU_ASSERT_STRING_EQUAL("SRID=4326;POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", tmp); lwfree(tmp); tmp = lwgeom_to_hexwkb(geom, WKB_NDR | WKB_EXTENDED, 0); CU_ASSERT_STRING_EQUAL("010F0000A0E6100000040000000103000080010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000010300008001000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000001030000800100000004000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000001030000800100000004000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F00000000000000000000000000000000", tmp); lwfree(tmp); lwgeom_free(geom); /* geography support */ geom = lwgeom_from_wkt("POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7 8,0 1 2)))", LW_PARSER_CHECK_NONE); g = gserialized_from_lwgeom(geom, 1, 0); CU_ASSERT_EQUAL(gserialized_get_type(g), POLYHEDRALSURFACETYPE); lwgeom_free(geom); lwfree(g); } static void check_dimension(char *ewkt, int dim) { LWGEOM *geom; geom = lwgeom_from_wkt(ewkt, LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(lwgeom_dimensionality(geom), dim); lwgeom_free(geom); } void surface_dimension(void) { /* 2D */ check_dimension("POLYHEDRALSURFACE(((0 0,0 1,1 1,0 0)))", 2); check_dimension("TIN(((0 0,0 1,1 1,0 0)))", 2); /* 3D single face */ check_dimension("POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)))", 2); check_dimension("TIN(((0 0 0,0 0 1,0 1 0,0 0 0)))", 2); /* Tetrahedron */ check_dimension("POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", 3); check_dimension("TIN(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))", 3); } /* ** Used by test harness to register the tests in this file. */ /* ** Used by test harness to register the tests in this file. */ CU_TestInfo surface_tests[] = { PG_TEST(triangle_parse), PG_TEST(tin_parse), PG_TEST(polyhedralsurface_parse), PG_TEST(surface_dimension), CU_TEST_INFO_NULL }; CU_SuiteInfo surface_suite = {"surface", NULL, NULL, surface_tests}; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_misc.c���������������������������������������������������0000644�0000000�0000000�00000011135�11727677440�020471� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_print.c 6160 2010-11-01 01:28:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void test_misc_force_2d(void) { LWGEOM *geom; LWGEOM *geom2d; char *wkt_out; geom = lwgeom_from_wkt("CIRCULARSTRINGM(-5 0 4,0 5 3,5 0 2,10 -5 1,15 0 0)", LW_PARSER_CHECK_NONE); geom2d = lwgeom_force_2d(geom); wkt_out = lwgeom_to_ewkt(geom2d); CU_ASSERT_STRING_EQUAL("CIRCULARSTRING(-5 0,0 5,5 0,10 -5,15 0)",wkt_out); lwgeom_free(geom); lwgeom_free(geom2d); lwfree(wkt_out); geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(0 0 0),LINESTRING(1 1 1,2 2 2),POLYGON((0 0 1,0 1 1,1 1 1,1 0 1,0 0 1)),CURVEPOLYGON(CIRCULARSTRING(0 0 0,1 1 1,2 2 2,1 1 1,0 0 0)))", LW_PARSER_CHECK_NONE); geom2d = lwgeom_force_2d(geom); wkt_out = lwgeom_to_ewkt(geom2d); CU_ASSERT_STRING_EQUAL("GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 1,2 2),POLYGON((0 0,0 1,1 1,1 0,0 0)),CURVEPOLYGON(CIRCULARSTRING(0 0,1 1,2 2,1 1,0 0)))",wkt_out); lwgeom_free(geom); lwgeom_free(geom2d); lwfree(wkt_out); } static void test_misc_simplify(void) { LWGEOM *geom; LWGEOM *geom2d; char *wkt_out; geom = lwgeom_from_wkt("LINESTRING(0 0,0 10,0 51,50 20,30 20,7 32)", LW_PARSER_CHECK_NONE); geom2d = lwgeom_simplify(geom,2); wkt_out = lwgeom_to_ewkt(geom2d); CU_ASSERT_STRING_EQUAL("LINESTRING(0 0,0 51,50 20,30 20,7 32)",wkt_out); lwgeom_free(geom); lwgeom_free(geom2d); lwfree(wkt_out); geom = lwgeom_from_wkt("MULTILINESTRING((0 0,0 10,0 51,50 20,30 20,7 32))", LW_PARSER_CHECK_NONE); geom2d = lwgeom_simplify(geom,2); wkt_out = lwgeom_to_ewkt(geom2d); CU_ASSERT_STRING_EQUAL("MULTILINESTRING((0 0,0 51,50 20,30 20,7 32))",wkt_out); lwgeom_free(geom); lwgeom_free(geom2d); lwfree(wkt_out); } static void test_misc_count_vertices(void) { LWGEOM *geom; int count; geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,1 1),POLYGON((0 0,0 1,1 0,0 0)),CIRCULARSTRING(0 0,0 1,1 1),CURVEPOLYGON(CIRCULARSTRING(0 0,0 1,1 1)))", LW_PARSER_CHECK_NONE); count = lwgeom_count_vertices(geom); CU_ASSERT_EQUAL(count,13); lwgeom_free(geom); geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(CIRCULARSTRING(0 0,0 1,1 1),POINT(0 0),CURVEPOLYGON(CIRCULARSTRING(0 0,0 1,1 1,1 0,0 0)))", LW_PARSER_CHECK_NONE); count = lwgeom_count_vertices(geom); CU_ASSERT_EQUAL(count,9); lwgeom_free(geom); geom = lwgeom_from_wkt("CURVEPOLYGON((0 0,1 0,0 1,0 0),CIRCULARSTRING(0 0,1 0,1 1,1 0,0 0))", LW_PARSER_CHECK_NONE); count = lwgeom_count_vertices(geom); CU_ASSERT_EQUAL(count,9); lwgeom_free(geom); geom = lwgeom_from_wkt("POLYGON((0 0,1 0,0 1,0 0))", LW_PARSER_CHECK_NONE); count = lwgeom_count_vertices(geom); CU_ASSERT_EQUAL(count,4); lwgeom_free(geom); geom = lwgeom_from_wkt("CURVEPOLYGON((0 0,1 0,0 1,0 0),CIRCULARSTRING(0 0,1 0,1 1,1 0,0 0))", LW_PARSER_CHECK_NONE); count = lwgeom_count_vertices(geom); CU_ASSERT_EQUAL(count,9); lwgeom_free(geom); } static void test_misc_area(void) { LWGEOM *geom; double area; geom = lwgeom_from_wkt("LINESTRING EMPTY", LW_PARSER_CHECK_ALL); area = lwgeom_area(geom); CU_ASSERT_DOUBLE_EQUAL(area, 0.0, 0.0001); lwgeom_free(geom); } static void test_misc_wkb(void) { static char *wkb = "010A0000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000"; LWGEOM *geom = lwgeom_from_hexwkb(wkb, LW_PARSER_CHECK_ALL); char *str = lwgeom_to_wkt(geom, WKB_ISO, 8, 0); CU_ASSERT_STRING_EQUAL(str, "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))"); lwfree(str); lwgeom_free(geom); } /* ** Used by the test harness to register the tests in this file. */ CU_TestInfo misc_tests[] = { PG_TEST(test_misc_force_2d), PG_TEST(test_misc_simplify), PG_TEST(test_misc_count_vertices), PG_TEST(test_misc_area), PG_TEST(test_misc_wkb), CU_TEST_INFO_NULL }; CU_SuiteInfo misc_suite = {"misc", NULL, NULL, misc_tests }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_sfcgal.c�������������������������������������������������0000644�0000000�0000000�00000012645�12142775451�020775� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "cu_tester.h" #include "liblwgeom.h" extern LWGEOM* lwgeom_sfcgal_noop( const LWGEOM* geom_in ); static void test_sfcgal_noop(void) { int i; char *ewkt[] = { "POINT(0 0.2)", "LINESTRING(-1 -1,-1 2.5,2 2,2 -1)", "TRIANGLE((0 0,-1 1,0 -1,0 0))", "MULTIPOINT(0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9)", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1 1,-1 2.5 1,2 2 2,2 -1 2,-1 -1 2),(0 0 1,0 1 1,1 1 1,1 0 2,0 0 2))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))", "SRID=100000;POLYGON((-1 -1 3,-1 2.5 3,2 2 3,2 -1 3,-1 -1 3),(0 0 3,0 1 3,1 1 3,1 0 3,0 0 3),(-0.5 -0.5 3,-0.5 -0.4 3,-0.4 -0.4 3,-0.4 -0.5 3,-0.5 -0.5 3))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", "POLYHEDRALSURFACE(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "POLYHEDRALSURFACE(((-1 -1 1,-1 2.5 1,2 2 1,2 -1 1,-1 -1 1),(0 0 1,0 1 1,1 1 1,1 0 1,0 0 1),(-0.5 -0.5 1,-0.5 -0.4 1,-0.4 -0.4 1,-0.4 -0.5 1,-0.5 -0.5 1)),((-1 -1 1,-1 2.5 1,2 2 1,2 -1 1,-1 -1 1),(0 0 1,0 1 1,1 1 1,1 0 1,0 0 1),(-0.5 -0.5 1,-0.5 -0.4 1,-0.4 -0.4 1,-0.4 -0.5 1,-0.5 -0.5 1)))", "TIN(((0 0,0 -1,-1 1,0 0)),((0 0,1 0,0 -1,0 0)))", }; char *expected_ewkt[] = { "POINT(0 0.2)", "LINESTRING(-1 -1,-1 2.5,2 2,2 -1)", "TRIANGLE((0 0,-1 1,0 -1,0 0))", "MULTIPOINT(0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9)", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1 1,-1 2.5 1,2 2 2,2 -1 2,-1 -1 2),(0 0 1,0 1 1,1 1 1,1 0 2,0 0 2))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))", "SRID=100000;POLYGON((-1 -1 3,-1 2.5 3,2 2 3,2 -1 3,-1 -1 3),(0 0 3,0 1 3,1 1 3,1 0 3,0 0 3),(-0.5 -0.5 3,-0.5 -0.4 3,-0.4 -0.4 3,-0.4 -0.5 3,-0.5 -0.5 3))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", "POLYHEDRALSURFACE(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "POLYHEDRALSURFACE(((-1 -1 1,-1 2.5 1,2 2 1,2 -1 1,-1 -1 1),(0 0 1,0 1 1,1 1 1,1 0 1,0 0 1),(-0.5 -0.5 1,-0.5 -0.4 1,-0.4 -0.4 1,-0.4 -0.5 1,-0.5 -0.5 1)),((-1 -1 1,-1 2.5 1,2 2 1,2 -1 1,-1 -1 1),(0 0 1,0 1 1,1 1 1,1 0 1,0 0 1),(-0.5 -0.5 1,-0.5 -0.4 1,-0.4 -0.4 1,-0.4 -0.5 1,-0.5 -0.5 1)))", "TIN(((0 0,0 -1,-1 1,0 0)),((0 0,1 0,0 -1,0 0)))", }; for ( i = 0; i < (sizeof ewkt/sizeof(char *)); i++ ) { LWGEOM *geom_in, *geom_out; char *in_ewkt; char *out_ewkt; in_ewkt = ewkt[i]; geom_in = lwgeom_from_wkt(in_ewkt, LW_PARSER_CHECK_NONE); geom_out = lwgeom_sfcgal_noop(geom_in); if ( ! geom_out ) { fprintf(stderr, "\nNull return from lwgeom_sfcgal_noop with wkt: %s\n", in_ewkt); lwgeom_free(geom_in); continue; } out_ewkt = lwgeom_to_ewkt(geom_out); if (strcmp(expected_ewkt[i], out_ewkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", expected_ewkt[i], out_ewkt); CU_ASSERT_STRING_EQUAL(expected_ewkt[i], out_ewkt); lwfree(out_ewkt); lwgeom_free(geom_out); lwgeom_free(geom_in); } } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo sfcgal_tests[] = { PG_TEST(test_sfcgal_noop), CU_TEST_INFO_NULL }; CU_SuiteInfo sfcgal_suite = {"SFCGAL", NULL, NULL, sfcgal_tests}; �������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_surface.h������������������������������������������������0000644�0000000�0000000�00000001322�12124115154�021145� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id:$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" /* Test functions */ void triangle_parse(void); void tin_parse(void); void polyhedralsurface_parse(void); void surface_dimension(void); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_out_svg.c������������������������������������������������0000644�0000000�0000000�00000017472�11722777314�021232� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_svg.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" static void do_svg_test(char * in, char * out, int precision, int relative) { LWGEOM *g; char * h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_svg(g, precision, relative); if (strcmp(h, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, h, out); CU_ASSERT_STRING_EQUAL(h, out); lwgeom_free(g); lwfree(h); } static void do_svg_unsupported(char * in, char * out) { LWGEOM *g; char *h; g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE); h = lwgeom_to_svg(g, 0, 0); if (strcmp(cu_error_msg, out)) fprintf(stderr, "\nIn: %s\nOut: %s\nTheo: %s\n", in, cu_error_msg, out); CU_ASSERT_STRING_EQUAL(out, cu_error_msg); cu_error_msg_reset(); lwfree(h); lwgeom_free(g); } static void out_svg_test_precision(void) { /* 0 precision, i.e a round - with Circle point */ do_svg_test( "POINT(1.1111111111111 1.1111111111111)", "cx=\"1\" cy=\"-1\"", 0, 0); /* 0 precision, i.e a round - with Point */ do_svg_test( "POINT(1.1111111111111 1.1111111111111)", "x=\"1\" y=\"-1\"", 0, 1); /* 0 precision, i.e a round - with PointArray */ do_svg_test( "LINESTRING(1.1111111111111 1.1111111111111,1.1111111111111 1.1111111111111)", "M 1 -1 L 1 -1", 0, 0); /* 0 precision, i.e a round - with relative PointArray */ do_svg_test( "LINESTRING(1.1111111111111 1.1111111111111,1.1111111111111 1.1111111111111)", "M 1 -1 l 0 0", 0, 1); /* 9 digits precision - with Circle point */ do_svg_test( "POINT(1.2345678901234 1.2345678901234)", "cx=\"1.23456789\" cy=\"-1.23456789\"", 9, 0); /* 9 digits precision - with Point */ do_svg_test( "POINT(1.2345678901234 1.2345678901234)", "x=\"1.23456789\" y=\"-1.23456789\"", 9, 1); /* 9 digits precision - with PointArray */ do_svg_test( "LINESTRING(1.2345678901234 1.2345678901234,2.3456789012345 2.3456789012345)", "M 1.23456789 -1.23456789 L 2.345678901 -2.345678901", 9, 0); /* 9 digits precision - with relative PointArray */ do_svg_test( "LINESTRING(1.2345678901234 1.2345678901234,2.3456789012345 2.3456789012345)", "M 1.23456789 -1.23456789 l 1.111111011 -1.111111011", 9, 1); /* huge data - with Circle point */ do_svg_test( "POINT(1E300 -1E300)", "cx=\"1e+300\" cy=\"1e+300\"", 0, 0); /* huge data - with Point */ do_svg_test( "POINT(1E300 -1E300)", "x=\"1e+300\" y=\"1e+300\"", 0, 1); /* huge data - with PointArray */ do_svg_test( "LINESTRING(1E300 -1E300,1E301 -1E301)", "M 1e+300 1e+300 L 1e+301 1e+301", 0, 0); /* huge data - with relative PointArray */ do_svg_test( "LINESTRING(1E300 -1E300,1E301 -1E301)", "M 1e+300 1e+300 l 9e+300 9e+300", 0, 1); } static void out_svg_test_dims(void) { /* 4D - with Circle point */ do_svg_test( "POINT(0 1 2 3)", "cx=\"0\" cy=\"-1\"", 0, 0); /* 4D - with Point */ do_svg_test( "POINT(0 1 2 3)", "x=\"0\" y=\"-1\"", 0, 1); /* 4D - with PointArray */ do_svg_test( "LINESTRING(0 1 2 3,4 5 6 7)", "M 0 -1 L 4 -5", 0, 0); /* 4D - with relative PointArray */ do_svg_test( "LINESTRING(0 1 2 3,4 5 6 7)", "M 0 -1 l 4 -4", 0, 1); } static void out_svg_test_geoms(void) { /* Linestring */ do_svg_test( "LINESTRING(0 1,2 3,4 5)", "M 0 -1 L 2 -3 4 -5", 0, 0); /* Polygon */ do_svg_test( "POLYGON((0 1,2 3,4 5,0 1))", "M 0 -1 L 2 -3 4 -5 Z", 0, 0); /* Polygon - with internal ring */ do_svg_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "M 0 -1 L 2 -3 4 -5 Z M 6 -7 L 8 -9 10 -11 Z", 0, 0); /* MultiPoint */ do_svg_test( "MULTIPOINT(0 1,2 3)", "cx=\"0\" cy=\"-1\",cx=\"2\" cy=\"-3\"", 0, 0); /* MultiLine */ do_svg_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "M 0 -1 L 2 -3 4 -5 M 6 -7 L 8 -9 10 -11", 0, 0); /* MultiPolygon */ do_svg_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "M 0 -1 L 2 -3 4 -5 Z M 6 -7 L 8 -9 10 -11 Z", 0, 0); /* GeometryCollection */ do_svg_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "cx=\"0\" cy=\"-1\";M 2 -3 L 4 -5", 0, 0); /* Empty GeometryCollection */ do_svg_test( "GEOMETRYCOLLECTION EMPTY", "", 0, 0); /* Nested GeometryCollection */ do_svg_unsupported( "GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))", "assvg_geom_buf: 'GeometryCollection' geometry type not supported."); /* CircularString */ do_svg_unsupported( "CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)", "lwgeom_to_svg: 'CircularString' geometry type not supported"); /* CompoundCurve */ do_svg_unsupported( "COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))", "lwgeom_to_svg: 'CompoundCurve' geometry type not supported"); /* CurvePolygon */ do_svg_unsupported( "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))", "lwgeom_to_svg: 'CurvePolygon' geometry type not supported"); /* MultiCurve */ do_svg_unsupported( "MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))", "lwgeom_to_svg: 'MultiCurve' geometry type not supported"); /* MultiSurface */ do_svg_unsupported( "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))", "lwgeom_to_svg: 'MultiSurface' geometry type not supported"); } static void out_svg_test_relative(void) { /* Linestring */ do_svg_test( "LINESTRING(0 1,2 3,4 5)", "M 0 -1 l 2 -2 2 -2", 0, 1); /* Polygon */ do_svg_test( "POLYGON((0 1,2 3,4 5,0 1))", "M 0 -1 l 2 -2 2 -2 z", 0, 1); /* Polygon - with internal ring */ do_svg_test( "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))", "M 0 -1 l 2 -2 2 -2 z M 6 -7 l 2 -2 2 -2 z", 0, 1); /* MultiPoint */ do_svg_test( "MULTIPOINT(0 1,2 3)", "x=\"0\" y=\"-1\",x=\"2\" y=\"-3\"", 0, 1); /* MultiLine */ do_svg_test( "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))", "M 0 -1 l 2 -2 2 -2 M 6 -7 l 2 -2 2 -2", 0, 1); /* MultiPolygon */ do_svg_test( "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))", "M 0 -1 l 2 -2 2 -2 z M 6 -7 l 2 -2 2 -2 z", 0, 1); /* GeometryCollection */ do_svg_test( "GEOMETRYCOLLECTION(POINT(0 1),LINESTRING(2 3,4 5))", "x=\"0\" y=\"-1\";M 2 -3 l 2 -2", 0, 1); } static void out_svg_test_srid(void) { /* SRID - with Circle point */ do_svg_test( "SRID=4326;POINT(0 1)", "cx=\"0\" cy=\"-1\"", 0, 0); /* SRID - with Point */ do_svg_test( "SRID=4326;POINT(0 1)", "x=\"0\" y=\"-1\"", 0, 1); /* SRID - with PointArray */ do_svg_test( "SRID=4326;LINESTRING(0 1,2 3)", "M 0 -1 L 2 -3", 0, 0); /* SRID - with relative PointArray */ do_svg_test( "SRID=4326;LINESTRING(0 1,2 3)", "M 0 -1 l 2 -2", 0, 1); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo out_svg_tests[] = { PG_TEST(out_svg_test_precision), PG_TEST(out_svg_test_dims), PG_TEST(out_svg_test_relative), PG_TEST(out_svg_test_geoms), PG_TEST(out_svg_test_srid), CU_TEST_INFO_NULL }; CU_SuiteInfo out_svg_suite = {"SVG Out Suite", NULL, NULL, out_svg_tests}; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_in_wkt.c�������������������������������������������������0000644�0000000�0000000�00000023116�11737260727�021030� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_wkt.c 6036 2010-10-03 18:14:35Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" /* ** Globals used by tests */ char *s; char *r; /* ** The suite initialization function. ** Create any re-used objects. */ static int init_wkt_in_suite(void) { return 0; } /* ** The suite cleanup function. ** Frees any global objects. */ static int clean_wkt_in_suite(void) { return 0; } /* * Return a char* that results from taking the input * WKT, creating an LWGEOM, then writing it back out * as an output WKT using the supplied variant. * If there is an error, return that. */ static char* cu_wkt_in(char *wkt, uint8_t variant) { LWGEOM_PARSER_RESULT p; int rv = 0; char *s = 0; rv = lwgeom_parse_wkt(&p, wkt, 0); if( p.errcode ) { return strdup(p.message); } s = lwgeom_to_wkt(p.geom, variant, 8, NULL); lwgeom_parser_result_free(&p); return s; } static void test_wkt_in_point(void) { s = "POINT(1e700 0)"; r = cu_wkt_in(s, WKT_SFSQL); CU_TEST ( ! strcmp(r, "POINT(inf 0)") || ! strcmp(r, "POINT(1.#INF 0)") ); lwfree(r); s = "POINT(0 0)"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "POINT EMPTY"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "POINT M EMPTY"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); //printf("\nIN: %s\nOUT: %s\n",s,r); } static void test_wkt_in_linestring(void) { s = "LINESTRING EMPTY"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "LINESTRING(0 0,1 1)"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "LINESTRING(0 0 0,1 1 1)"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "LINESTRING M (0 0 0,1 1 1)"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "LINESTRING ZM (0 0 0 1,1 1 1 1,2 2 2 2,0.141231 4 5 4)"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "LINESTRINGM(0 0 0,1 1 1)"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "LINESTRING ZM EMPTY"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "LINESTRING Z (0 0 0 1, 0 1 0 1)"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,"can not mix dimensionality in a geometry"); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_polygon(void) { s = "POLYGON((0 0,0 1,1 1,0 0))"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "POLYGON Z ((0 0,0 10,10 10,10 0,0 0),(1 1 1,1 2 1,2 2 1,2 1 1,1 1 1))"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,"can not mix dimensionality in a geometry"); lwfree(r); s = "POLYGON Z ((0 0,0 10,10 10,10 0,0 0),(1 1,1 2,2 2,2 1,1 1))"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,"can not mix dimensionality in a geometry"); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_multipoint(void) { /**I'm remarking this out since it fails on windows because windows returns MULTIPOINT(-1 -2 -3,5.4 6.6 7.77,-5.4 -6.6 -7.77,1000000 1e-006 -1000000,-1.3e-006 -1.4e-005 0) **/ /** @todo TODO: Paul put back in if you care after you do replace mumbo jumbo to replace the extra 0s in Windows */ // s = "MULTIPOINT(-1 -2 -3,5.4 6.6 7.77,-5.4 -6.6 -7.77,1000000 1e-06 -1000000,-1.3e-06 -1.4e-05 0)"; // r = cu_wkt_in(s, WKT_EXTENDED); // CU_ASSERT_STRING_EQUAL(r,s); // printf("\nIN: %s\nOUT: %s\n",s,r); // lwfree(r); s = "MULTIPOINT(0 0)"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); s = "MULTIPOINT(0 0,1 1)"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_multilinestring(void) { s = "MULTILINESTRING((0 0,1 1),(1 1,2 2),(3 3,3 3,3 3,2 2,2 1))"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_multipolygon(void) { s = "MULTIPOLYGON(((0 0,0 1,1 1,0 0)))"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); s = "MULTIPOLYGON(((0 0,0 10,10 10,0 0),(1 1,1 2,2 2,1 1)),((-10 -10,-10 -5,-5 -5,-10 -10)))"; r = cu_wkt_in(s, WKT_SFSQL); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); s = "SRID=4;MULTIPOLYGON(((0 0,0 1,1 1,0 0)))"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_collection(void) { s = "SRID=5;GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 0,0 0),CIRCULARSTRING(0 0,0 1,1 1,0 1,2 2))"; r = cu_wkt_in(s, WKT_EXTENDED); //printf("\nIN: %s\nOUT: %s\n",s,r); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "GEOMETRYCOLLECTION(POINT(0 0),POINT EMPTY,LINESTRING(1 0,0 0),POLYGON EMPTY,CIRCULARSTRING(0 0,0 1,1 1,0 1,2 2))"; r = cu_wkt_in(s, WKT_SFSQL); //printf("\nIN: %s\nOUT: %s\n",s,r); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "GEOMETRYCOLLECTION Z (POINT Z (0 0 0))"; r = cu_wkt_in(s, WKT_ISO); //printf("\nIN: %s\nOUT: %s\n",s,r); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); s = "GEOMETRYCOLLECTION M (MULTILINESTRING M ((0 0 5,2 0 5),(1 1 5,2 2 5)))"; r = cu_wkt_in(s, WKT_ISO); //printf("\nIN: %s\nOUT: %s\n",s,r); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); /* See http://trac.osgeo.org/postgis/ticket/1455#comment:3 */ s = "GEOMETRYCOLLECTION Z (MULTILINESTRING Z ((0 0 5,2 0 5),(1 1 5,2 2 5)))"; r = cu_wkt_in(s, WKT_ISO); //printf("\nIN: %s\nOUT: %s\n",s,r); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); } static void test_wkt_in_circularstring(void) { s = "CIRCULARSTRING(0 0,0 1,1 1,0 1,2 2)"; r = cu_wkt_in(s, WKT_SFSQL); //printf("\nIN: %s\nOUT: %s\n",s,r); CU_ASSERT_STRING_EQUAL(r,s); lwfree(r); } static void test_wkt_in_compoundcurve(void) { s = "SRID=4326;COMPOUNDCURVEM(CIRCULARSTRINGM(0 0 2,1 1 2,1 0 2),(1 0 2,0 1 2))"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); s = "COMPOUNDCURVE Z (CIRCULARSTRING Z (0 0 0,0 1 0,1 1 0,0 0 0,2 2 0),(2 2 0,0 0 1,1 1 1,2 2 1))"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_curvpolygon(void) { s = "CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,0 1,1 1,2 2,0 0),(0 0,1 1,2 2)),CIRCULARSTRING(0 0,0 1,1 1,0 0,2 2),(0 0,1 1,2 1))"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_multicurve(void) { s = "SRID=4326;MULTICURVE(COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)))"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_multisurface(void) { s = "SRID=4326;MULTICURVE(COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)))"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_tin(void) { s = "TIN(((0 1 2,3 4 5,6 7 8,0 1 2)),((0 1 2,3 4 5,6 7 8,9 10 11,0 1 2)))"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,"triangle must have exactly 4 points"); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_polyhedralsurface(void) { s = "POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))"; r = cu_wkt_in(s, WKT_EXTENDED); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); s = "POLYHEDRALSURFACE Z (((0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 0 0,0 0 0)),((0 0 0,1 0 0,0 0 1,0 0 0)),((1 0 0,0 1 0,0 0 1,1 0 0)))"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,s); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); s = "POLYHEDRALSURFACE(((0 1 2,3 4 5,6 7,0 1 2)))"; r = cu_wkt_in(s, WKT_ISO); CU_ASSERT_STRING_EQUAL(r,"can not mix dimensionality in a geometry"); //printf("\nIN: %s\nOUT: %s\n",s,r); lwfree(r); } static void test_wkt_in_errlocation(void) { LWGEOM_PARSER_RESULT p; int rv = 0; char *wkt = 0; wkt = "LINESTRING((0 0 0,1 1)"; lwgeom_parser_result_init(&p); rv = lwgeom_parse_wkt(&p, wkt, LW_PARSER_CHECK_ALL); CU_ASSERT(fabs(12 - p.errlocation) < 1.5); // printf("errlocation %d\n", p.errlocation); // printf("message %s\n", p.message); lwgeom_parser_result_free(&p); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo wkt_in_tests[] = { PG_TEST(test_wkt_in_point), PG_TEST(test_wkt_in_linestring), PG_TEST(test_wkt_in_polygon), PG_TEST(test_wkt_in_multipoint), PG_TEST(test_wkt_in_multilinestring), PG_TEST(test_wkt_in_multipolygon), PG_TEST(test_wkt_in_collection), PG_TEST(test_wkt_in_circularstring), PG_TEST(test_wkt_in_compoundcurve), PG_TEST(test_wkt_in_curvpolygon), PG_TEST(test_wkt_in_multicurve), PG_TEST(test_wkt_in_multisurface), PG_TEST(test_wkt_in_tin), PG_TEST(test_wkt_in_polyhedralsurface), PG_TEST(test_wkt_in_errlocation), CU_TEST_INFO_NULL }; CU_SuiteInfo wkt_in_suite = {"WKT In Suite", init_wkt_in_suite, clean_wkt_in_suite, wkt_in_tests}; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_out_wkb.c������������������������������������������������0000644�0000000�0000000�00000024122�12045033704�021167� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_out_wkb.c 10630 2012-11-02 21:14:44Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" /* ** Global variable to hold hex WKB strings */ char *s; /* ** The suite initialization function. ** Create any re-used objects. */ static int init_wkb_out_suite(void) { s = NULL; return 0; } /* ** The suite cleanup function. ** Frees any global objects. */ static int clean_wkb_out_suite(void) { if (s) free(s); s = NULL; return 0; } /* ** Creating an input from a hexwkb */ static void cu_wkb_from_hexwkb(char *hexwkb) { LWGEOM *g = lwgeom_from_hexwkb(hexwkb, LW_PARSER_CHECK_NONE); if ( s ) free(s); s = (char*)lwgeom_to_wkb(g, WKB_HEX | WKB_XDR | WKB_EXTENDED, 0); lwgeom_free(g); } /* ** Creating an input WKB from a wkb string */ static void cu_wkb(char *wkt) { LWGEOM *g = lwgeom_from_wkt(wkt, LW_PARSER_CHECK_NONE); if ( s ) free(s); s = (char*)lwgeom_to_wkb(g, WKB_HEX | WKB_XDR | WKB_EXTENDED, NULL); lwgeom_free(g); } static void test_wkb_out_point(void) { cu_wkb("POINT(0 0 0 0)"); CU_ASSERT_STRING_EQUAL(s,"00C00000010000000000000000000000000000000000000000000000000000000000000000"); cu_wkb("SRID=4;POINTM(1 1 1)"); CU_ASSERT_STRING_EQUAL(s,"0060000001000000043FF00000000000003FF00000000000003FF0000000000000"); } static void test_wkb_out_linestring(void) { cu_wkb("LINESTRING(0 0,1 1)"); CU_ASSERT_STRING_EQUAL(s,"000000000200000002000000000000000000000000000000003FF00000000000003FF0000000000000"); cu_wkb("LINESTRING(0 0 1,1 1 2,2 2 3)"); CU_ASSERT_STRING_EQUAL(s,"008000000200000003000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000004000000000000000400000000000000040000000000000004008000000000000"); cu_wkb("LINESTRING EMPTY"); CU_ASSERT_STRING_EQUAL(s,"000000000200000000"); } static void test_wkb_out_polygon(void) { cu_wkb("SRID=4;POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))"); CU_ASSERT_STRING_EQUAL(s,"00A000000300000004000000010000000500000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); cu_wkb("SRID=14;POLYGON((0 0 0 1,0 1 0 2,1 1 0 3,1 0 0 4,0 0 0 5))"); CU_ASSERT_STRING_EQUAL(s,"00E00000030000000E00000001000000050000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000040000000000000003FF00000000000003FF0000000000000000000000000000040080000000000003FF00000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004014000000000000"); cu_wkb("SRID=4;POLYGON((0 0 0 1,0 1 0 2,1 1 0 3,1 0 0 4,0 0 0 5))"); CU_ASSERT_STRING_EQUAL(s,"00E00000030000000400000001000000050000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000040000000000000003FF00000000000003FF0000000000000000000000000000040080000000000003FF00000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004014000000000000"); cu_wkb("POLYGON EMPTY"); CU_ASSERT_STRING_EQUAL(s,"000000000300000000"); /* * POLYGON with EMPTY shell * See http://http://trac.osgeo.org/postgis/ticket/937 */ cu_wkb_from_hexwkb("01030000000100000000000000"); CU_ASSERT_STRING_EQUAL(s,"000000000300000000"); } static void test_wkb_out_multipoint(void) { cu_wkb("SRID=4;MULTIPOINT(0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)"); CU_ASSERT_STRING_EQUAL(s,"00A000000400000004000000050080000001000000000000000000000000000000000000000000000000008000000100000000000000003FF0000000000000000000000000000000800000013FF00000000000003FF0000000000000000000000000000000800000013FF0000000000000000000000000000000000000000000000080000001000000000000000000000000000000000000000000000000"); cu_wkb("MULTIPOINT(0 0 0, 0.26794919243112270647255365849413 1 3)"); //printf("WKB: %s",s); CU_ASSERT_STRING_EQUAL(s,"008000000400000002008000000100000000000000000000000000000000000000000000000000800000013FD126145E9ECD563FF00000000000004008000000000000"); } static void test_wkb_out_multilinestring(void) {} static void test_wkb_out_multipolygon(void) { cu_wkb("SRID=14;MULTIPOLYGON(((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),((-1 -1 0,-1 2 0,2 2 0,2 -1 0,-1 -1 0),(0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)))"); CU_ASSERT_STRING_EQUAL(s,"00A00000060000000E000000020080000003000000010000000500000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000030000000200000005BFF0000000000000BFF00000000000000000000000000000BFF0000000000000400000000000000000000000000000004000000000000000400000000000000000000000000000004000000000000000BFF00000000000000000000000000000BFF0000000000000BFF000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); } static void test_wkb_out_collection(void) { cu_wkb("SRID=14;GEOMETRYCOLLECTION(POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),POINT(1 1 1))"); CU_ASSERT_STRING_EQUAL(s,"00A00000070000000E000000020080000003000000010000000500000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000013FF00000000000003FF00000000000003FF0000000000000"); cu_wkb("GEOMETRYCOLLECTION EMPTY"); CU_ASSERT_STRING_EQUAL(s,"000000000700000000"); } static void test_wkb_out_circularstring(void) { cu_wkb("CIRCULARSTRING(0 -2,-2 0,0 2,2 0,0 -2)"); CU_ASSERT_STRING_EQUAL(s,"0000000008000000050000000000000000C000000000000000C000000000000000000000000000000000000000000000004000000000000000400000000000000000000000000000000000000000000000C000000000000000"); cu_wkb("CIRCULARSTRING(-5 0 0 4, 0 5 1 3, 5 0 2 2, 10 -5 3 1, 15 0 4 0)"); CU_ASSERT_STRING_EQUAL(s,"00C000000800000005C014000000000000000000000000000000000000000000004010000000000000000000000000000040140000000000003FF0000000000000400800000000000040140000000000000000000000000000400000000000000040000000000000004024000000000000C01400000000000040080000000000003FF0000000000000402E000000000000000000000000000040100000000000000000000000000000"); cu_wkb("SRID=43;CIRCULARSTRING(-5 0 0 4, 0 5 1 3, 5 0 2 2, 10 -5 3 1, 15 0 4 0)"); CU_ASSERT_STRING_EQUAL(s,"00E00000080000002B00000005C014000000000000000000000000000000000000000000004010000000000000000000000000000040140000000000003FF0000000000000400800000000000040140000000000000000000000000000400000000000000040000000000000004024000000000000C01400000000000040080000000000003FF0000000000000402E000000000000000000000000000040100000000000000000000000000000"); } static void test_wkb_out_compoundcurve(void) { cu_wkb("COMPOUNDCURVE(CIRCULARSTRING(0 0 0, 0.26794919243112270647255365849413 1 3, 0.5857864376269049511983112757903 1.4142135623730950488016887242097 1),(0.5857864376269049511983112757903 1.4142135623730950488016887242097 1,2 0 0,0 0 0))"); CU_ASSERT_STRING_EQUAL(s,"0080000009000000020080000008000000030000000000000000000000000000000000000000000000003FD126145E9ECD563FF000000000000040080000000000003FE2BEC3330188673FF6A09E667F3BCD3FF00000000000000080000002000000033FE2BEC3330188673FF6A09E667F3BCD3FF0000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); } static void test_wkb_out_curvpolygon(void) { cu_wkb("CURVEPOLYGON(CIRCULARSTRING(-2 0 0 0,-1 -1 1 2,0 0 2 4,1 -1 3 6,2 0 4 8,0 2 2 4,-2 0 0 0),(-1 0 1 2,0 0.5 2 4,1 0 3 6,0 1 3 4,-1 0 1 2))"); CU_ASSERT_STRING_EQUAL(s,"00C000000A0000000200C000000800000007C000000000000000000000000000000000000000000000000000000000000000BFF0000000000000BFF00000000000003FF0000000000000400000000000000000000000000000000000000000000000400000000000000040100000000000003FF0000000000000BFF00000000000004008000000000000401800000000000040000000000000000000000000000000401000000000000040200000000000000000000000000000400000000000000040000000000000004010000000000000C00000000000000000000000000000000000000000000000000000000000000000C000000200000005BFF000000000000000000000000000003FF0000000000000400000000000000000000000000000003FE0000000000000400000000000000040100000000000003FF000000000000000000000000000004008000000000000401800000000000000000000000000003FF000000000000040080000000000004010000000000000BFF000000000000000000000000000003FF00000000000004000000000000000"); } static void test_wkb_out_multicurve(void) {} static void test_wkb_out_multisurface(void) {} static void test_wkb_out_polyhedralsurface(void) { // cu_wkb("POLYHEDRALSURFACE(((0 0 0 0,0 0 1 0,0 1 0 2,0 0 0 0)),((0 0 0 0,0 1 0 0,1 0 0 4,0 0 0 0)),((0 0 0 0,1 0 0 0,0 0 1 6,0 0 0 0)),((1 0 0 0,0 1 0 0,0 0 1 0,1 0 0 0)))"); // CU_ASSERT_STRING_EQUAL(s, t); // printf("\nnew: %s\nold: %s\n",s,t); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo wkb_out_tests[] = { PG_TEST(test_wkb_out_point), PG_TEST(test_wkb_out_linestring), PG_TEST(test_wkb_out_polygon), PG_TEST(test_wkb_out_multipoint), PG_TEST(test_wkb_out_multilinestring), PG_TEST(test_wkb_out_multipolygon), PG_TEST(test_wkb_out_collection), PG_TEST(test_wkb_out_circularstring), PG_TEST(test_wkb_out_compoundcurve), PG_TEST(test_wkb_out_curvpolygon), PG_TEST(test_wkb_out_multicurve), PG_TEST(test_wkb_out_multisurface), PG_TEST(test_wkb_out_polyhedralsurface), CU_TEST_INFO_NULL }; CU_SuiteInfo wkb_out_suite = {"WKB Out Suite", init_wkb_out_suite, clean_wkb_out_suite, wkb_out_tests}; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_geos.c���������������������������������������������������0000644�0000000�0000000�00000005307�11722777314�020473� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2011 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "lwgeom_geos.h" #include "cu_tester.h" static void test_geos_noop(void) { int i; char *ewkt[] = { "POINT(0 0.2)", "LINESTRING(-1 -1,-1 2.5,2 2,2 -1)", "MULTIPOINT(0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9,0.9 0.9)", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "SRID=1;MULTILINESTRING((-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1),(-1 -1,-1 2.5,2 2,2 -1))", "POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0))", "SRID=4326;POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))", "SRID=100000;POLYGON((-1 -1 3,-1 2.5 3,2 2 3,2 -1 3,-1 -1 3),(0 0 3,0 1 3,1 1 3,1 0 3,0 0 3),(-0.5 -0.5 3,-0.5 -0.4 3,-0.4 -0.4 3,-0.4 -0.5 3,-0.5 -0.5 3))", "SRID=4326;MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)),((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5)))", "SRID=4326;GEOMETRYCOLLECTION(POINT(0 1),POLYGON((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0)),MULTIPOLYGON(((-1 -1,-1 2.5,2 2,2 -1,-1 -1),(0 0,0 1,1 1,1 0,0 0),(-0.5 -0.5,-0.5 -0.4,-0.4 -0.4,-0.4 -0.5,-0.5 -0.5))))", }; for ( i = 0; i < (sizeof ewkt/sizeof(char *)); i++ ) { LWGEOM *geom_in, *geom_out; char *in_ewkt; char *out_ewkt; in_ewkt = ewkt[i]; geom_in = lwgeom_from_wkt(in_ewkt, LW_PARSER_CHECK_NONE); geom_out = lwgeom_geos_noop(geom_in); if ( ! geom_out ) { fprintf(stderr, "\nNull return from lwgeom_geos_noop with wkt: %s\n", in_ewkt); lwgeom_free(geom_in); continue; } out_ewkt = lwgeom_to_ewkt(geom_out); if (strcmp(in_ewkt, out_ewkt)) fprintf(stderr, "\nExp: %s\nObt: %s\n", in_ewkt, out_ewkt); CU_ASSERT_STRING_EQUAL(in_ewkt, out_ewkt); lwfree(out_ewkt); lwgeom_free(geom_out); lwgeom_free(geom_in); } } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo geos_tests[] = { PG_TEST(test_geos_noop), CU_TEST_INFO_NULL }; CU_SuiteInfo geos_suite = {"GEOS", NULL, NULL, geos_tests}; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_measures.c�����������������������������������������������0000644�0000000�0000000�00000060466�12125137775�021370� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_measures.c 11219 2013-03-28 22:11:09Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" #include "liblwgeom_internal.h" #include "cu_tester.h" #include "measures.h" #include "lwtree.h" static LWGEOM* lwgeom_from_text(const char *str) { LWGEOM_PARSER_RESULT r; if( LW_FAILURE == lwgeom_parse_wkt(&r, (char*)str, LW_PARSER_CHECK_NONE) ) return NULL; return r.geom; } #define DIST2DTEST(str1, str2, res) do_test_mindistance2d_tolerance(str1, str2, res, __LINE__) static void do_test_mindistance2d_tolerance(char *in1, char *in2, double expected_res, int line) { LWGEOM *lw1; LWGEOM *lw2; double distance; char *msg1 = "test_mindistance2d_tolerance failed (got %g expected %g) at line %d\n"; char *msg2 = "\n\ndo_test_mindistance2d_tolerance: NULL lwgeom generated from WKT\n %s\n\n"; lw1 = lwgeom_from_wkt(in1, LW_PARSER_CHECK_NONE); lw2 = lwgeom_from_wkt(in2, LW_PARSER_CHECK_NONE); if ( ! lw1 ) { printf(msg2, in1); exit(1); } if ( ! lw2 ) { printf(msg2, in2); exit(1); } distance = lwgeom_mindistance2d_tolerance(lw1, lw2, 0.0); lwgeom_free(lw1); lwgeom_free(lw2); if ( fabs(distance - expected_res) > 0.00001 ) { printf(msg1, distance, expected_res, line); CU_FAIL(); } else { CU_PASS(); } } static void test_mindistance2d_tolerance(void) { /* ** Simple case. */ DIST2DTEST("POINT(0 0)", "MULTIPOINT(0 1.5,0 2,0 2.5)", 1.5); /* ** Point vs Geometry Collection. */ DIST2DTEST("POINT(0 0)", "GEOMETRYCOLLECTION(POINT(3 4))", 5.0); /* ** Point vs Geometry Collection Collection. */ DIST2DTEST("POINT(0 0)", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4)))", 5.0); /* ** Point vs Geometry Collection Collection Collection. */ DIST2DTEST("POINT(0 0)", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4))))", 5.0); /* ** Point vs Geometry Collection Collection Collection Multipoint. */ DIST2DTEST("POINT(0 0)", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(MULTIPOINT(3 4))))", 5.0); /* ** Geometry Collection vs Geometry Collection */ DIST2DTEST("GEOMETRYCOLLECTION(POINT(0 0))", "GEOMETRYCOLLECTION(POINT(3 4))", 5.0); /* ** Geometry Collection Collection vs Geometry Collection Collection */ DIST2DTEST("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4)))", 5.0); /* ** Geometry Collection Collection Multipoint vs Geometry Collection Collection Multipoint */ DIST2DTEST("GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(MULTIPOINT(0 0)))", "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(MULTIPOINT(3 4)))", 5.0); /* ** Linestring vs its start point */ DIST2DTEST("LINESTRING(-2 0, -0.2 0)", "POINT(-2 0)", 0); /* ** Linestring vs its end point */ DIST2DTEST("LINESTRING(-0.2 0, -2 0)", "POINT(-2 0)", 0); /* ** Linestring vs its start point (tricky number, see #1459) */ DIST2DTEST("LINESTRING(-1e-8 0, -0.2 0)", "POINT(-1e-8 0)", 0); /* ** Linestring vs its end point (tricky number, see #1459) */ DIST2DTEST("LINESTRING(-0.2 0, -1e-8 0)", "POINT(-1e-8 0)", 0); /* * Circular string and point */ DIST2DTEST("CIRCULARSTRING(-1 0, 0 1, 1 0)", "POINT(0 0)", 1); DIST2DTEST("CIRCULARSTRING(-3 0, -2 0, -1 0, 0 1, 1 0)", "POINT(0 0)", 1); /* * Circular string and Circular string */ DIST2DTEST("CIRCULARSTRING(-1 0, 0 1, 1 0)", "CIRCULARSTRING(0 0, 1 -1, 2 0)", 1); /* * CurvePolygon and Point */ static char *cs1 = "CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(1 6, 6 1, 9 7),(9 7, 3 13, 1 6)),COMPOUNDCURVE((3 6, 5 4, 7 4, 7 6),CIRCULARSTRING(7 6,5 8,3 6)))"; DIST2DTEST(cs1, "POINT(3 14)", 1); DIST2DTEST(cs1, "POINT(3 8)", 0); DIST2DTEST(cs1, "POINT(6 5)", 1); DIST2DTEST(cs1, "POINT(6 4)", 0); /* * CurvePolygon and Linestring */ DIST2DTEST(cs1, "LINESTRING(0 0, 50 0)", 0.917484); DIST2DTEST(cs1, "LINESTRING(6 0, 10 7)", 0); DIST2DTEST(cs1, "LINESTRING(4 4, 4 8)", 0); DIST2DTEST(cs1, "LINESTRING(4 7, 5 6, 6 7)", 0.585786); DIST2DTEST(cs1, "LINESTRING(10 0, 10 2, 10 0)", 1.52913); /* * CurvePolygon and Polygon */ DIST2DTEST(cs1, "POLYGON((10 4, 10 8, 13 8, 13 4, 10 4))", 0.58415); DIST2DTEST(cs1, "POLYGON((9 4, 9 8, 12 8, 12 4, 9 4))", 0); DIST2DTEST(cs1, "POLYGON((1 4, 1 8, 4 8, 4 4, 1 4))", 0); /* * CurvePolygon and CurvePolygon */ DIST2DTEST(cs1, "CURVEPOLYGON(CIRCULARSTRING(-1 4, 0 5, 1 4, 0 3, -1 4))", 0.0475666); DIST2DTEST(cs1, "CURVEPOLYGON(CIRCULARSTRING(1 4, 2 5, 3 4, 2 3, 1 4))", 0.0); /* * MultiSurface and CurvePolygon */ static char *cs2 = "MULTISURFACE(POLYGON((0 0,0 4,4 4,4 0,0 0)),CURVEPOLYGON(CIRCULARSTRING(8 2,10 4,12 2,10 0,8 2)))"; DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(5 2,6 3,7 2,6 1,5 2))", 1); DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(4 2,5 3,6 2,5 1,4 2))", 0); DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(5 3,6 2,5 1,4 2,5 3))", 0); DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(4.5 3,5.5 2,4.5 1,3.5 2,4.5 3))", 0); DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(5.5 3,6.5 2,5.5 1,4.5 2,5.5 3))", 0.5); DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(10 3,11 2,10 1,9 2,10 3))", 0); DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(2 3,3 2,2 1,1 2,2 3))", 0); DIST2DTEST(cs2, "CURVEPOLYGON(CIRCULARSTRING(5 7,6 8,7 7,6 6,5 7))", 2.60555); /* * MultiCurve and Linestring */ DIST2DTEST("LINESTRING(0.5 1,0.5 3)", "MULTICURVE(CIRCULARSTRING(2 3,3 2,2 1,1 2,2 3),(0 0, 0 5))", 0.5); } static void test_rect_tree_contains_point(void) { LWPOLY *poly; POINT2D p; RECT_NODE* tree; int result; int boundary = 0; /* square */ poly = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE); tree = rect_tree_new(poly->rings[0]); /* inside square */ boundary = 0; p.x = 0.5; p.y = 0.5; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_NOT_EQUAL(result, 0); /* outside square */ boundary = 0; p.x = 1.5; p.y = 0.5; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(result, 0); rect_tree_free(tree); lwpoly_free(poly); /* ziggy zaggy horizontal saw tooth polygon */ poly = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 1 3, 2 0, 3 3, 4 0, 4 5, 0 5, 0 0))", LW_PARSER_CHECK_NONE); tree = rect_tree_new(poly->rings[0]); /* not in, left side */ boundary = 0; p.x = -0.5; p.y = 0.5; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(result, 0); /* not in, right side */ boundary = 0; p.x = 3.0; p.y = 1.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(result, 0); /* inside */ boundary = 0; p.x = 2.0; p.y = 1.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_NOT_EQUAL(result, 0); /* on left border */ boundary = 0; p.x = 0.0; p.y = 1.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); /* on right border */ boundary = 0; p.x = 4.0; p.y = 0.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); /* on tooth concave */ boundary = 0; p.x = 3.0; p.y = 3.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); /* on tooth convex */ boundary = 0; p.x = 2.0; p.y = 0.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); rect_tree_free(tree); lwpoly_free(poly); /* ziggy zaggy vertical saw tooth polygon */ poly = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 3 1, 0 2, 3 3, 0 4, 3 5, 0 6, 5 6, 5 0, 0 0))", LW_PARSER_CHECK_NONE); tree = rect_tree_new(poly->rings[0]); /* not in, left side */ boundary = 0; p.x = -0.5; p.y = 3.5; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(result, 0); /* not in, right side */ boundary = 0; p.x = 6.0; p.y = 2.2; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(result, 0); /* inside */ boundary = 0; p.x = 3.0; p.y = 2.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_NOT_EQUAL(result, 0); /* on bottom border */ boundary = 0; p.x = 1.0; p.y = 0.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); /* on top border */ boundary = 0; p.x = 3.0; p.y = 6.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); /* on tooth concave */ boundary = 0; p.x = 3.0; p.y = 1.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); /* on tooth convex */ boundary = 0; p.x = 0.0; p.y = 2.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); /* on tooth convex */ boundary = 0; p.x = 0.0; p.y = 6.0; result = rect_tree_contains_point(tree, &p, &boundary); CU_ASSERT_EQUAL(boundary, 1); rect_tree_free(tree); lwpoly_free(poly); } static void test_rect_tree_intersects_tree(void) { LWPOLY *poly1, *poly2; RECT_NODE *tree1, *tree2; int result; /* total overlap, A == B */ poly1 = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 3 1, 0 2, 3 3, 0 4, 3 5, 0 6, 5 6, 5 0, 0 0))", LW_PARSER_CHECK_NONE); poly2 = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 3 1, 0 2, 3 3, 0 4, 3 5, 0 6, 5 6, 5 0, 0 0))", LW_PARSER_CHECK_NONE); tree1 = rect_tree_new(poly1->rings[0]); tree2 = rect_tree_new(poly2->rings[0]); result = rect_tree_intersects_tree(tree1, tree2); CU_ASSERT_EQUAL(result, LW_TRUE); lwpoly_free(poly1); lwpoly_free(poly2); rect_tree_free(tree1); rect_tree_free(tree2); /* hiding between the tines of the comb */ poly1 = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 3 1, 0 2, 3 3, 0 4, 3 5, 0 6, 5 6, 5 0, 0 0))", LW_PARSER_CHECK_NONE); poly2 = (LWPOLY*)lwgeom_from_wkt("POLYGON((0.3 0.7, 0.3 0.8, 0.4 0.8, 0.4 0.7, 0.3 0.7))", LW_PARSER_CHECK_NONE); tree1 = rect_tree_new(poly1->rings[0]); tree2 = rect_tree_new(poly2->rings[0]); result = rect_tree_intersects_tree(tree1, tree2); CU_ASSERT_EQUAL(result, LW_FALSE); lwpoly_free(poly1); lwpoly_free(poly2); rect_tree_free(tree1); rect_tree_free(tree2); /* between the tines, but with a corner overlapping */ poly1 = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 3 1, 0 2, 3 3, 0 4, 3 5, 0 6, 5 6, 5 0, 0 0))", LW_PARSER_CHECK_NONE); poly2 = (LWPOLY*)lwgeom_from_wkt("POLYGON((0.3 0.7, 0.3 0.8, 0.4 0.8, 1.3 0.3, 0.3 0.7))", LW_PARSER_CHECK_NONE); tree1 = rect_tree_new(poly1->rings[0]); tree2 = rect_tree_new(poly2->rings[0]); result = rect_tree_intersects_tree(tree1, tree2); CU_ASSERT_EQUAL(result, LW_TRUE); lwpoly_free(poly1); lwpoly_free(poly2); rect_tree_free(tree1); rect_tree_free(tree2); /* Just touching the top left corner of the comb */ poly1 = (LWPOLY*)lwgeom_from_wkt("POLYGON((0 0, 3 1, 0 2, 3 3, 0 4, 3 5, 0 6, 5 6, 5 0, 0 0))", LW_PARSER_CHECK_NONE); poly2 = (LWPOLY*)lwgeom_from_wkt("POLYGON((-1 5, 0 5, 0 7, -1 7, -1 5))", LW_PARSER_CHECK_NONE); tree1 = rect_tree_new(poly1->rings[0]); tree2 = rect_tree_new(poly2->rings[0]); result = rect_tree_intersects_tree(tree1, tree2); CU_ASSERT_EQUAL(result, LW_TRUE); lwpoly_free(poly1); lwpoly_free(poly2); rect_tree_free(tree1); rect_tree_free(tree2); } static void test_lwgeom_segmentize2d(void) { LWGEOM *linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE); LWGEOM *lineout = lwgeom_segmentize2d(linein, 5); char *strout = lwgeom_to_ewkt(lineout); CU_ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0)"); lwfree(strout); lwgeom_free(linein); lwgeom_free(lineout); } static void test_lwgeom_locate_along(void) { LWGEOM *geom = NULL; LWGEOM *out = NULL; double measure = 105.0; char *str; /* ST_Locatealong(ST_GeomFromText('MULTILINESTRING M ((1 2 3, 5 4 5), (50 50 1, 60 60 200))'), 105) */ geom = lwgeom_from_wkt("MULTILINESTRING M ((1 2 3, 5 4 5), (50 50 1, 60 60 200))", LW_PARSER_CHECK_NONE); out = lwgeom_locate_along(geom, measure, 0.0); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); lwgeom_free(geom); lwgeom_free(out); CU_ASSERT_STRING_EQUAL("MULTIPOINT M (55.226131 55.226131 105)", str); lwfree(str); /* ST_Locatealong(ST_GeomFromText('MULTILINESTRING M ((1 2 3, 5 4 5), (50 50 1, 60 60 200))'), 105) */ geom = lwgeom_from_wkt("MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3), (1 2 3, 5 4 5), (50 50 1, 60 60 200))", LW_PARSER_CHECK_NONE); out = lwgeom_locate_along(geom, measure, 0.0); str = lwgeom_to_wkt(out, WKT_ISO, 8, NULL); lwgeom_free(geom); lwgeom_free(out); CU_ASSERT_STRING_EQUAL("MULTIPOINT M (55.226131 55.226131 105)", str); lwfree(str); } static void test_lw_dist2d_pt_arc(void) { /* int lw_dist2d_pt_arc(const POINT2D* P, const POINT2D* A1, const POINT2D* A2, const POINT2D* A3, DISTPTS* dl) */ DISTPTS dl; POINT2D P, A1, A2, A3; int rv; /* Point within unit semicircle, 0.5 units from arc */ A1.x = -1; A1.y = 0; A2.x = 0 ; A2.y = 1; A3.x = 1 ; A3.y = 0; P.x = 0 ; P.y = 0.5; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); /* Point outside unit semicircle, 0.5 units from arc */ P.x = 0 ; P.y = 1.5; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); /* Point outside unit semicircle, sqrt(2) units from arc end point*/ P.x = 0 ; P.y = -1; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0), 0.000001); /* Point outside unit semicircle, sqrt(2)-1 units from arc end point*/ P.x = 1 ; P.y = 1; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0)-1, 0.000001); /* Point on unit semicircle midpoint */ P.x = 0 ; P.y = 1; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001); /* Point on unit semicircle endpoint */ P.x = 1 ; P.y = 0; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001); /* Point inside closed circle */ P.x = 0 ; P.y = 0.5; A2.x = 1; A2.y = 0; A3 = A1; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl); //printf("distance %g\n", dl.distance); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); } static void test_lw_dist2d_seg_arc(void) { /* int lw_dist2d_seg_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *B1, const POINT2D *B2, const POINT2D *B3, DISTPTS *dl) */ DISTPTS dl; POINT2D A1, A2, B1, B2, B3; int rv; /* Unit semicircle */ B1.x = -1; B1.y = 0; B2.x = 0 ; B2.y = 1; B3.x = 1 ; B3.y = 0; /* Edge above the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -2; A1.y = 2; A2.x = 2 ; A2.y = 2; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Edge to the right of the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = 2; A1.y = -2; A2.x = 2; A2.y = 2; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Edge to the left of the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -2; A1.y = -2; A2.x = -2; A2.y = 2; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Edge within the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = 0; A1.y = 0; A2.x = 0; A2.y = 0.5; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); /* Edge grazing the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -2; A1.y = 1; A2.x = 2; A2.y = 1; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0., 0.000001); /* Line grazing the unit semicircle, but edge not */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = 1; A1.y = 1; A2.x = 2; A2.y = 1; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0)-1, 0.000001); /* Edge intersecting the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = 0; A1.y = 0; A2.x = 2; A2.y = 2; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001); /* Line intersecting the unit semicircle, but edge not */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -1; A1.y = 1; A2.x = -2; A2.y = 2; rv = lw_dist2d_seg_arc(&A1, &A2, &B1, &B2, &B3, &dl); //printf("distance %g\n", dl.distance); CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0)-1, 0.000001); } static void test_lw_dist2d_arc_arc(void) { /* lw_dist2d_arc_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, const POINT2D *B1, const POINT2D *B2, const POINT2D *B3, DISTPTS *dl) */ DISTPTS dl; POINT2D A1, A2, A3, B1, B2, B3; int rv; /* Unit semicircle at 0,0 */ B1.x = -1; B1.y = 0; B2.x = 0 ; B2.y = 1; B3.x = 1 ; B3.y = 0; /* Arc above the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -1; A1.y = 3; A2.x = 0 ; A2.y = 2; A3.x = 1 ; A3.y = 3; rv = lw_dist2d_arc_arc(&A1, &A2, &A3, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Arc grazes the unit semicircle */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -1; A1.y = 2; A2.x = 0 ; A2.y = 1; A3.x = 1 ; A3.y = 2; rv = lw_dist2d_arc_arc(&A1, &A2, &A3, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001); /* Circles intersect, but arcs do not */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -1; A1.y = 1; A2.x = 0; A2.y = 2; A3.x = 1; A3.y = 1; rv = lw_dist2d_arc_arc(&A1, &A2, &A3, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2)-1, 0.000001); /* Circles and arcs intersect */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -1; A1.y = 1; A2.x = 0; A2.y = 0; A3.x = 1; A3.y = 1; rv = lw_dist2d_arc_arc(&A1, &A2, &A3, &B1, &B2, &B3, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001); /* inscribed and closest on arcs */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -0.5; A1.y = 0.0; A2.x = 0.0; A2.y = 0.5; A3.x = 0.5; A3.y = 0.0; rv = lw_dist2d_arc_arc(&A1, &A2, &A3, &B1, &B2, &B3, &dl); //printf("distance %g\n", dl.distance); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); /* inscribed and closest not on arcs */ lw_dist2d_distpts_init(&dl, DIST_MIN); A1.x = -0.5; A1.y = 0.0; A2.x = 0.0; A2.y = -0.5; A3.x = 0.5; A3.y = 0.0; rv = lw_dist2d_arc_arc(&A1, &A2, &A3, &B1, &B2, &B3, &dl); //printf("distance %g\n", dl.distance); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); } static void test_lw_arc_length(void) { /* double lw_arc_length(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3) */ POINT2D A1, A2, A3; double d; /* Unit semicircle at 0,0 */ A1.x = -1; A1.y = 0; A2.x = 0 ; A2.y = 1; A3.x = 1 ; A3.y = 0; /* Arc above the unit semicircle */ d = lw_arc_length(&A1, &A2, &A3); CU_ASSERT_DOUBLE_EQUAL(d, M_PI, 0.000001); d = lw_arc_length(&A3, &A2, &A1); CU_ASSERT_DOUBLE_EQUAL(d, M_PI, 0.000001); /* Unit semicircle at 0,0 */ A1.x = 0; A1.y = 1; A2.x = 1; A2.y = 0; A3.x = 0; A3.y = -1; /* Arc to right of the unit semicircle */ d = lw_arc_length(&A1, &A2, &A3); CU_ASSERT_DOUBLE_EQUAL(d, M_PI, 0.000001); d = lw_arc_length(&A3, &A2, &A1); CU_ASSERT_DOUBLE_EQUAL(d, M_PI, 0.000001); /* Unit 3/4 circle at 0,0 */ A1.x = -1; A1.y = 0; A2.x = 1; A2.y = 0; A3.x = 0; A3.y = -1; /* Arc to right of the unit semicircle */ d = lw_arc_length(&A1, &A2, &A3); CU_ASSERT_DOUBLE_EQUAL(d, 3*M_PI/2, 0.000001); d = lw_arc_length(&A3, &A2, &A1); CU_ASSERT_DOUBLE_EQUAL(d, 3*M_PI/2, 0.000001); } static void test_lw_dist2d_pt_ptarrayarc(void) { /* lw_dist2d_pt_ptarrayarc(const POINT2D *p, const POINTARRAY *pa, DISTPTS *dl) */ DISTPTS dl; int rv; LWLINE *lwline; POINT2D P; /* Unit semi-circle above X axis */ lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 0 1, 1 0)")); /* Point at origin */ P.x = P.y = 0; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Point above arc on Y axis */ P.y = 2; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Point 45 degrees off arc, 2 radii from center */ P.y = P.x = 2 * cos(M_PI/4); lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Four unit semi-circles surrounding the 2x2 box around origin */ lwline_free(lwline); lwline = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 -1, -2 0, -1 1, 0 2, 1 1, 2 0, 1 -1, 0 -2, -1 -1)")); /* Point at origin */ P.x = P.y = 0; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0), 0.000001); /* Point on box edge */ P.x = -1; P.y = 0; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Point within a semicircle lobe */ P.x = -1.5; P.y = 0; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); /* Point outside a semicircle lobe */ P.x = -2.5; P.y = 0; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); /* Point outside a semicircle lobe */ P.y = -2.5; P.x = 0; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); /* Point outside a semicircle lobe */ P.y = 2; P.x = 1; lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_pt_ptarrayarc(&P, lwline->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0)-1.0, 0.000001); /* Clean up */ lwline_free(lwline); } static void test_lw_dist2d_ptarray_ptarrayarc(void) { /* int lw_dist2d_ptarray_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl) */ DISTPTS dl; int rv; LWLINE *lwline1; LWLINE *lwline2; /* Unit semi-circle above X axis */ lwline1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 0, 0 1, 1 0)")); /* Line above top of semi-circle */ lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2 2, -1 2, 1 2, 2 2)")); lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Reversed arguments, should fail */ lw_dist2d_distpts_init(&dl, DIST_MIN); cu_error_msg_reset(); rv = lw_dist2d_ptarray_ptarrayarc(lwline1->points, lwline2->points, &dl); //printf("%s\n", cu_error_msg); CU_ASSERT_STRING_EQUAL("lw_dist2d_ptarray_ptarrayarc called with non-arc input", cu_error_msg); lwline_free(lwline2); /* Line along side of semi-circle */ lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2 -3, -2 -2, -2 2, -2 3)")); lw_dist2d_distpts_init(&dl, DIST_MIN); rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001); /* Four unit semi-circles surrounding the 2x2 box around origin */ lwline_free(lwline1); lwline_free(lwline2); lwline1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-1 -1, -2 0, -1 1, 0 2, 1 1, 2 0, 1 -1, 0 -2, -1 -1)")); lwline2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(-2.5 -3, -2.5 -2, -2.5 2, -2.5 3)")); rv = lw_dist2d_ptarray_ptarrayarc(lwline2->points, lwline1->points, &dl); CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001); lwline_free(lwline2); lwline_free(lwline1); } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo measures_tests[] = { PG_TEST(test_mindistance2d_tolerance), PG_TEST(test_rect_tree_contains_point), PG_TEST(test_rect_tree_intersects_tree), PG_TEST(test_lwgeom_segmentize2d), PG_TEST(test_lwgeom_locate_along), PG_TEST(test_lw_dist2d_pt_arc), PG_TEST(test_lw_dist2d_seg_arc), PG_TEST(test_lw_dist2d_arc_arc), PG_TEST(test_lw_arc_length), PG_TEST(test_lw_dist2d_pt_ptarrayarc), PG_TEST(test_lw_dist2d_ptarray_ptarrayarc), CU_TEST_INFO_NULL }; CU_SuiteInfo measures_suite = {"PostGIS Measures Suite", NULL, NULL, measures_tests}; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_clean.c��������������������������������������������������0000644�0000000�0000000�00000010655�12165521712�020611� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "CUnit/Basic.h" #include "cu_tester.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" /* * TODO: change lwgeom_same to lwgeom_equals * (requires porting predicates to liblwgeom) */ #define check_geom_equal(gobt, gexp) do { \ char *obt, *exp; \ LWGEOM *ngobt, *ngexp; \ ngobt = lwgeom_normalize(gobt); \ ngexp = lwgeom_normalize(gexp); \ if ( ! lwgeom_same((ngobt), (ngexp)) ) { \ obt = lwgeom_to_wkt((ngobt), WKT_ISO, 8, NULL); \ exp = lwgeom_to_wkt((ngexp), WKT_ISO, 8, NULL); \ printf(" Failure at %s:%d\n", __FILE__, __LINE__); \ printf(" Exp: %s\n", exp); \ printf(" Obt: %s\n", obt); \ free(obt); free(exp); \ lwgeom_free(ngobt); lwgeom_free(ngexp); \ CU_ASSERT(0); \ } else { \ lwgeom_free(ngobt); lwgeom_free(ngexp); \ CU_ASSERT(1); \ } \ } while (0) static void test_lwgeom_make_valid(void) { #if POSTGIS_GEOS_VERSION >= 33 LWGEOM *gin, *gout, *gexp; char *ewkt; /* Because i don't trust that much prior tests... ;) */ cu_error_msg_reset(); gin = lwgeom_from_wkt( "MULTIPOLYGON(((1725063 4819121, 1725104 4819067, 1725060 4819087, 1725064.14183882 4819094.70208557,1725064.13656044 4819094.70235069,1725064.14210359 4819094.70227252,1725064.14210362 4819094.70227252,1725064.13656043 4819094.70235069,1725055. 4819094, 1725055 4819094, 1725055 4819094, 1725063 4819121)))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gout = lwgeom_make_valid(gin); /* We're really only interested in avoiding a crash in here. * See http://trac.osgeo.org/postgis/ticket/1738 * TODO: enhance the test if we find a workaround * to the excepion: * See http://trac.osgeo.org/postgis/ticket/1735 */ lwgeom_free(gout); lwgeom_free(gin); /* Test for http://trac.osgeo.org/postgis/ticket/2307 */ gin = lwgeom_from_hexwkb("0106000020E6100000010000000103000000010000000A0000004B7DA956B99844C0DB0790FE8B4D1DC010BA74A9AF9444C049AFFC5B8C4D1DC03FC6CC690D9844C0DD67E5628C4D1DC07117B56B0D9844C0C80ABA67C45E1DC0839166ABAF9444C0387D4568C45E1DC010BA74A9AF9444C049AFFC5B8C4D1DC040C3CD74169444C0362EC0608C4D1DC07C1A3B77169444C0DC3ADB40B2641DC03AAE5F68B99844C0242948DEB1641DC04B7DA956B99844C0DB0790FE8B4D1DC0", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gout = lwgeom_make_valid(gin); CU_ASSERT(gout != NULL); lwgeom_free(gin); /* We're really only interested in avoiding memory problems. * Convertion to ewkt ensures full scan of coordinates thus * triggering the error, if any */ ewkt = lwgeom_to_ewkt(gout); lwgeom_free(gout); lwfree(ewkt); /* Test collection */ gin = lwgeom_from_wkt( "GEOMETRYCOLLECTION(LINESTRING(0 0, 0 0), POLYGON((0 0, 10 10, 10 0, 0 10, 0 0)), LINESTRING(10 0, 10 10))", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gout = lwgeom_make_valid(gin); CU_ASSERT(gout != NULL); ewkt = lwgeom_to_ewkt(gout); /* printf("c = %s\n", ewkt); */ /* TODO: This doesn't work on windows returns in different order. strk figure out why. For now will replace with normalized version */ /* CU_ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(0 0),MULTIPOLYGON(((5 5,0 0,0 10,5 5)),((5 5,10 10,10 0,5 5))),LINESTRING(10 0,10 10))");*/ gexp = lwgeom_from_wkt( "GEOMETRYCOLLECTION(POINT(0 0),MULTIPOLYGON(((5 5,0 0,0 10,5 5)),((5 5,10 10,10 0,5 5))),LINESTRING(10 0,10 10))", LW_PARSER_CHECK_NONE); check_geom_equal(gout, gexp); lwfree(ewkt); lwgeom_free(gout); lwgeom_free(gin); lwgeom_free(gexp); /* Test multipoint */ gin = lwgeom_from_wkt( "MULTIPOINT(0 0,1 1,2 2)", LW_PARSER_CHECK_NONE); CU_ASSERT(gin != NULL); gout = lwgeom_make_valid(gin); CU_ASSERT(gout != NULL); ewkt = lwgeom_to_ewkt(gout); /* printf("c = %s\n", ewkt); */ CU_ASSERT_STRING_EQUAL(ewkt, "MULTIPOINT(0 0,1 1,2 2)"); lwfree(ewkt); lwgeom_free(gout); lwgeom_free(gin); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /* TODO: add more tests ! */ /* ** Used by test harness to register the tests in this file. */ static CU_TestInfo clean_tests[] = { PG_TEST(test_lwgeom_make_valid), CU_TEST_INFO_NULL }; CU_SuiteInfo clean_suite = {"clean", NULL, NULL, clean_tests}; �����������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_geodetic_data.h������������������������������������������0000644�0000000�0000000�00001761215�12042055107�022310� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_geodetic_data.h 10547 2012-10-24 21:14:47Z dustymugs $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ int gbox_data_length = 55; char gbox_data[][512] = { "LINESTRING(-0 40,0 -30)", "LINESTRING(-180 90,180 -80)", "LINESTRING(-0 90,0 -89)", "LINESTRING(0 90,80 -89)", "LINESTRING(0 -5,0 -5)", "LINESTRING(180 -35,180 45)", "LINESTRING(158 -85,-57 86)", "LINESTRING(-3.083333333333333333333333333333333 9.83333333333333333333333333333333,15.5 -5.25)", "LINESTRING(-35.0 52.5,50.0 60.0)", "LINESTRING(-122.5 56.25,-123.5 69.166666)", "LINESTRING(-121.75 42.55,-122.35 43.25)", "LINESTRING(-3.083333333333333333333333333333333 9.83333333333333333333333333333333,15.5 -5.25)", "LINESTRING(86.85 9.85,105.5 -5.25)", "LINESTRING(-120.0 62.55,-120.0 62.55)", "LINESTRING(-135.0 40.0,45.0 -39.0)", "LINESTRING(-120.0 62.55,60.0 73.25)", "LINESTRING(-120.0 -62.55,60.0 -73.25)", "LINESTRING(-120.0 20.0,-120.5 20.0)", "LINESTRING(-120.0 45.0,-120.5 45.0)", "LINESTRING(-120.0 75.0,-120.5 75.0)", "LINESTRING(-120.0 -20.0,-120.5 -20.0)", "LINESTRING(-120.0 -45.0,-120.5 -45.0)", "LINESTRING(-120.0 -75.0,-120.5 -75.0)", "LINESTRING(0.0 60.0,0.0 7.0)", "LINESTRING(0.0 -60.0,0.0 -70.0)", "LINESTRING(180.0 60.0,180.0 70.0)", "LINESTRING(4.0 45.0,-4.0 45.0)", "LINESTRING(-176.0 45.0,176.0 45.0)", "LINESTRING(176.0 45.0,-176.0 45.0)", "LINESTRING(-4.0 45.0,4.0 45.0)", "LINESTRING(-45.0 60.0,135.0 72.0)", "LINESTRING(-45.0 -60.0,135.0 -72.0)", "LINESTRING(-15.0 3.5,15.0 -3.5)", "LINESTRING(75.0 3.5,105.0 -3.5)", "LINESTRING(-75.0 3.5,-105.0 -3.5)", "LINESTRING(-153.11560 24.70504,-9.15580 24.18317)", "LINESTRING(-178.0 45.0,165.0 45.0)", "LINESTRING(10.0 45.0,110.0 45.0)", "LINESTRING(10.0 -45.0,110.0 -45.0)", "LINESTRING(-10.0 45.0,-110.0 45.0)", "LINESTRING(160.0 25.0,-160.0 25.0)", "LINESTRING(170.0 35.0,-160.0 35.0)", "LINESTRING(-10.0 35.0,10.0 -35.0)", "LINESTRING(-80.0 25.0,-60.0 -25.0)", "LINESTRING(-80.0 25.0,-60.0 -45.0)", "LINESTRING(-120.0 70.0,60.0 70.0)", "LINESTRING(-120.0 -70.0,60.0 -70.0)", "LINESTRING(-112.0 45.0,-112.00166666666666666666666666667 45.0)", "LINESTRING(-120.0 -5.0,60.0 80.0)", "LINESTRING(165.0 10.0,-172.0 -5.0)", "LINESTRING(97.87714324162704 46.6879465040995,155.49353589912155 -68.93911854796522)", "LINESTRING(-77.90029319006709 -20.61989357708765,-29.776541043747443 88.24497900223159)", "LINESTRING(12.21419896647646 -2.2758177391540926,149.7713684095024 13.210117902931728)", "LINESTRING(-49.891199414628915 66.72545480471234,-39.418865490450656 -89.97504625275525)", "POLYGON((-40.0 52.0, 102.0 -6.0, -67.0 -29.0, -40.0 52.0))" }; /* Iowa Polygon for use in test case */ char *iowa_data = "POLYGON((-94.015492 40.573914,-94.016088 40.5739,-94.016968 40.57388,-94.018058 40.573856,-94.02663 40.57371,-94.034211 40.573585,-94.038853 40.573525,-94.043491 40.573466,-94.046656 40.573426,-94.060375 40.573209,-94.069402 40.573067,-94.07214 40.573026,-94.079332 40.573147,-94.080122 40.57316,-94.080249 40.573147,-94.080315 40.57314,-94.080401 40.573143,-94.080409 40.573145,-94.080481 40.57314,-94.081532 40.57306,-94.081625 40.573059,-94.081866 40.573056,-94.083211 40.573037,-94.083542 40.573033,-94.083802 40.57303,-94.089019 40.572976,-94.089168 40.572956,-94.090421 40.572936,-94.090962 40.572941,-94.091084 40.572951,-94.091111 40.572956,-94.091169 40.572968,-94.095698 40.572951,-94.095709 40.572951,-94.10931 40.572902,-94.110406 40.572901,-94.118548 40.572903,-94.119918 40.572904,-94.119946 40.572904,-94.120008 40.572903,-94.120097 40.572901,-94.125259 40.57279,-94.128286 40.572768,-94.128303 40.572768,-94.130131 40.572754,-94.137859 40.572698,-94.146244 40.572638,-94.155089 40.572574,-94.163567 40.572508,-94.167509 40.572477,-94.167902 40.572474,-94.175618 40.572406,-94.199871 40.572168,-94.20377 40.572137,-94.213262 40.572061,-94.23224 40.571901,-94.234023 40.57189,-94.237434 40.571873,-94.24315 40.571845,-94.248117 40.571818,-94.248902 40.571814,-94.249265 40.571807,-94.24927 40.571807,-94.250172 40.571789,-94.250708 40.571779,-94.250798 40.571777,-94.25509 40.571693,-94.259163 40.571671,-94.263235 40.571642,-94.266531 40.57162,-94.269827 40.571597,-94.269901 40.571597,-94.270456 40.571531,-94.282994 40.571469,-94.283158 40.571476,-94.287344 40.571656,-94.28745 40.571661,-94.287529 40.571661,-94.287641 40.57166,-94.28809 40.571659,-94.288522 40.571657,-94.288608 40.571657,-94.288944 40.571634,-94.289214 40.571653,-94.289321 40.57166,-94.290732 40.571676,-94.29417 40.571656,-94.294288 40.571632,-94.294671 40.571428,-94.294813 40.571428,-94.294921 40.571428,-94.295172 40.571428,-94.304389 40.571421,-94.304554 40.571422,-94.305829 40.57156,-94.306066 40.571575,-94.306071 40.571575,-94.306569 40.571602,-94.307489 40.571594,-94.30811 40.571617,-94.30853 40.571648,-94.310423 40.57163,-94.311602 40.571647,-94.312491 40.571632,-94.313067 40.571601,-94.313952 40.571595,-94.314865 40.571608,-94.316439 40.571592,-94.31707 40.571589,-94.317923 40.571586,-94.319277 40.57157,-94.319883 40.571575,-94.320623 40.571565,-94.322007 40.571541,-94.324711 40.571542,-94.324765 40.571542,-94.325494 40.57154,-94.326363 40.571559,-94.327626 40.571552,-94.32847 40.571555,-94.334317 40.571548,-94.334461 40.571549,-94.335677 40.571554,-94.33598 40.571555,-94.33652 40.571538,-94.336763 40.57153,-94.33691 40.571528,-94.34602 40.571412,-94.346197 40.571411,-94.353988 40.571377,-94.355216 40.571373,-94.35739 40.571371,-94.358082 40.571371,-94.358236 40.571371,-94.358391 40.571371,-94.360623 40.571356,-94.372032 40.571252,-94.374625 40.57123,-94.374621 40.571316,-94.374651 40.571353,-94.374695 40.571379,-94.374793 40.571391,-94.375009 40.571396,-94.375868 40.571383,-94.376699 40.57138,-94.376782 40.571385,-94.377053 40.571368,-94.384005 40.571279,-94.38401 40.571279,-94.387546 40.571399,-94.389203 40.571453,-94.389206 40.571453,-94.38944 40.571425,-94.389871 40.571402,-94.391457 40.571364,-94.391917 40.571336,-94.392408 40.571326,-94.393203 40.571343,-94.393905 40.571339,-94.394146 40.571341,-94.395375 40.571353,-94.395829 40.571346,-94.396745 40.571331,-94.398112 40.571309,-94.39924 40.571309,-94.399755 40.571316,-94.400829 40.571312,-94.40179 40.57128,-94.402263 40.571295,-94.402582 40.571323,-94.402817 40.571334,-94.403314 40.571339,-94.403388 40.571318,-94.403432 40.571295,-94.403481 40.571312,-94.403549 40.57132,-94.403993 40.571309,-94.405541 40.571294,-94.405543 40.571294,-94.405815 40.571291,-94.40613 40.571286,-94.407294 40.571292,-94.40799 40.57129,-94.409646 40.571286,-94.409938 40.571282,-94.409963 40.571282,-94.412328 40.57125,-94.413798 40.571255,-94.414069 40.571269,-94.417054 40.571279,-94.418513 40.571298,-94.419029 40.571289,-94.419398 40.571273,-94.420664 40.571275,-94.420962 40.571285,-94.421524 40.571304,-94.421591 40.571305,-94.422342 40.571317,-94.423261 40.571306,-94.424308 40.571276,-94.425231 40.571264,-94.426098 40.571265,-94.426758 40.571288,-94.427368 40.571278,-94.427956 40.571256,-94.428728 40.571253,-94.429668 40.571236,-94.432654 40.571029,-94.435031 40.571018,-94.445015 40.570976,-94.456895 40.570934,-94.456954 40.570933,-94.457166 40.570931,-94.457441 40.570928,-94.457486 40.570928,-94.457866 40.570924,-94.458068 40.570938,-94.46047 40.571101,-94.460662 40.571098,-94.462174 40.571078,-94.466122 40.571064,-94.469396 40.571053,-94.469781 40.571049,-94.470406 40.571042,-94.470445 40.571045,-94.470541 40.571022,-94.471213 40.570825,-94.472549 40.570814,-94.473295 40.570808,-94.473459 40.570807,-94.474848 40.570795,-94.482828 40.570729,-94.482994 40.570728,-94.489109 40.570706,-94.489122 40.570857,-94.489131 40.57097,-94.489216 40.570989,-94.48932 40.57099,-94.489634 40.570982,-94.489869 40.570984,-94.490152 40.570969,-94.490223 40.570975,-94.490435 40.571005,-94.490746 40.570994,-94.490997 40.570986,-94.492014 40.570978,-94.49528 40.570977,-94.496069 40.570966,-94.49783 40.570957,-94.501191 40.570969,-94.50196 40.570958,-94.504516 40.570953,-94.504942 40.570948,-94.505838 40.570951,-94.509322 40.570931,-94.50943 40.57093,-94.510163 40.570926,-94.513507 40.570906,-94.51472 40.570895,-94.517605 40.570881,-94.517883 40.570876,-94.518352 40.570888,-94.519045 40.570893,-94.523188 40.570879,-94.524904 40.570868,-94.525489 40.570861,-94.525527 40.570866,-94.525761 40.570866,-94.525862 40.570866,-94.528929 40.57086,-94.52905 40.57086,-94.529166 40.57086,-94.530773 40.570856,-94.532379 40.570852,-94.532834 40.570851,-94.533289 40.57085,-94.533463 40.57085,-94.533925 40.570843,-94.536494 40.570818,-94.536699 40.570819,-94.537194 40.570822,-94.537486 40.57083,-94.537848 40.570836,-94.538315 40.570844,-94.538405 40.570844,-94.539193 40.570845,-94.53965 40.570846,-94.540087 40.570859,-94.540272 40.570854,-94.540766 40.570839,-94.541014 40.570828,-94.541648 40.570825,-94.541828 40.570819,-94.542154 40.570809,-94.544189 40.570816,-94.546014 40.570815,-94.547405 40.57082,-94.552281 40.57084,-94.566853 40.570881,-94.577568 40.570917,-94.577727 40.570918,-94.579041 40.570922,-94.585766 40.57094,-94.586048 40.570941,-94.594196 40.57096,-94.594293 40.571007,-94.594391 40.57103,-94.594951 40.571038,-94.596435 40.57106,-94.603368 40.571089,-94.604207 40.571096,-94.604633 40.571116,-94.604701 40.571113,-94.60497 40.571106,-94.606379 40.571133,-94.606615 40.571138,-94.607238 40.571145,-94.607836 40.57116,-94.608262 40.571152,-94.608944 40.571155,-94.609674 40.571153,-94.610334 40.571156,-94.610694 40.571164,-94.611289 40.571191,-94.61294 40.571187,-94.61377 40.571198,-94.61451 40.5712,-94.615343 40.571213,-94.616156 40.57122,-94.617231 40.571217,-94.61852 40.571224,-94.622442 40.571278,-94.622849 40.57128,-94.622963 40.571289,-94.62771 40.571317,-94.63203 40.571367,-94.63216 40.57137,-94.632954 40.571376,-94.635112 40.571385,-94.637042 40.571415,-94.638869 40.571432,-94.639967 40.571434,-94.640897 40.571429,-94.641472 40.571426,-94.642601 40.571437,-94.642899 40.57144,-94.643706 40.571468,-94.644536 40.571478,-94.645303 40.571476,-94.647342 40.571495,-94.649735 40.571535,-94.65097 40.571545,-94.651276 40.571547,-94.654257 40.571567,-94.654275 40.571568,-94.655334 40.571577,-94.657773 40.571616,-94.659154 40.57163,-94.659156 40.571631,-94.659526 40.571635,-94.65996 40.571629,-94.660619 40.57165,-94.661678 40.571652,-94.662644 40.571643,-94.66463 40.571658,-94.665838 40.571672,-94.667316 40.571711,-94.668784 40.571714,-94.668787 40.571715,-94.669073 40.571716,-94.670127 40.57174,-94.671078 40.571762,-94.671711 40.571769,-94.674848 40.571803,-94.677096 40.571849,-94.679507 40.57188,-94.682589 40.57193,-94.682595 40.57193,-94.682758 40.571933,-94.683078 40.571933,-94.683601 40.571934,-94.686827 40.571965,-94.687087 40.571968,-94.687292 40.57197,-94.688308 40.571995,-94.688331 40.571996,-94.688353 40.571996,-94.688398 40.571998,-94.688759 40.572006,-94.690936 40.572015,-94.692535 40.572046,-94.697806 40.572105,-94.699914 40.572132,-94.701815 40.572166,-94.703362 40.572189,-94.705568 40.57221,-94.706043 40.572218,-94.708066 40.57225,-94.708314 40.572254,-94.70927 40.57227,-94.710707 40.57227,-94.712971 40.572315,-94.71416 40.572318,-94.714512 40.572325,-94.71632 40.572363,-94.716323 40.572363,-94.716535 40.572343,-94.717318 40.572365,-94.717624 40.572366,-94.717629 40.572367,-94.717859 40.572367,-94.717863 40.572368,-94.719147 40.572375,-94.719977 40.572392,-94.720912 40.572399,-94.72212 40.572419,-94.723173 40.572431,-94.72432 40.572456,-94.725211 40.572476,-94.72751 40.572495,-94.728787 40.572514,-94.729918 40.572526,-94.731693 40.572537,-94.733256 40.572564,-94.733616 40.57257,-94.734522 40.572594,-94.736227 40.572618,-94.736881 40.572612,-94.736882 40.572612,-94.738155 40.572635,-94.739925 40.57265,-94.740662 40.572668,-94.742055 40.572685,-94.742677 40.572683,-94.743299 40.572691,-94.74424 40.57271,-94.744818 40.572717,-94.745519 40.572726,-94.747527 40.572752,-94.74844 40.572771,-94.748931 40.572772,-94.749568 40.572782,-94.750042 40.572795,-94.750371 40.572807,-94.751263 40.57284,-94.751841 40.572844,-94.75273 40.572858,-94.752732 40.572859,-94.753375 40.57287,-94.753746 40.572881,-94.754503 40.572861,-94.754644 40.572822,-94.754694 40.572792,-94.754738 40.572793,-94.756165 40.572827,-94.757436 40.572848,-94.75825 40.572862,-94.759063 40.57287,-94.760815 40.572897,-94.762927 40.57294,-94.765223 40.572992,-94.767007 40.57304,-94.767014 40.573039,-94.767014 40.573038,-94.767014 40.573037,-94.767014 40.573036,-94.767014 40.573035,-94.767014 40.573034,-94.767014 40.573033,-94.767014 40.573032,-94.767216 40.573032,-94.768193 40.573071,-94.768627 40.573075,-94.768628 40.573076,-94.769149 40.573082,-94.769487 40.57308,-94.769822 40.573078,-94.769826 40.573077,-94.769966 40.573077,-94.771211 40.573096,-94.77229 40.573096,-94.773895 40.573105,-94.774935 40.573115,-94.78122 40.573174,-94.78203 40.573181,-94.78446 40.573204,-94.78527 40.573212,-94.787684 40.573234,-94.794928 40.573302,-94.797343 40.573325,-94.797358 40.573325,-94.797403 40.573325,-94.797419 40.573326,-94.797423 40.573326,-94.797438 40.573326,-94.797443 40.573326,-94.797461 40.573326,-94.797515 40.573326,-94.797533 40.573327,-94.797631 40.573328,-94.797928 40.573333,-94.798027 40.573335,-94.79957 40.573358,-94.799887 40.573363,-94.801475 40.573387,-94.801484 40.573387,-94.806417 40.573488,-94.811008 40.573581,-94.811085 40.573583,-94.81112 40.573607,-94.811251 40.573629,-94.812439 40.573636,-94.814992 40.573679,-94.815863 40.573683,-94.815993 40.573684,-94.816003 40.573684,-94.818721 40.573724,-94.819756 40.573729,-94.81995 40.573756,-94.821813 40.573768,-94.822887 40.573785,-94.823381 40.573792,-94.823382 40.573792,-94.823453 40.573793,-94.824283 40.573804,-94.826773 40.573837,-94.827604 40.573849,-94.829913 40.57388,-94.836841 40.573973,-94.839151 40.574004,-94.839222 40.574001,-94.839437 40.573995,-94.83951 40.573994,-94.841214 40.574023,-94.846329 40.57411,-94.848034 40.57414,-94.848045 40.57414,-94.848078 40.57414,-94.84809 40.574141,-94.848099 40.574141,-94.848126 40.574141,-94.848135 40.574142,-94.853273 40.57422,-94.858557 40.5743,-94.858567 40.574301,-94.875248 40.574519,-94.878201 40.574563,-94.88578 40.574674,-94.886885 40.574689,-94.887084 40.574694,-94.888998 40.574702,-94.894773 40.574728,-94.896595 40.574737,-94.896699 40.574737,-94.896773 40.574737,-94.896774 40.57474,-94.896819 40.574761,-94.89971 40.5748,-94.90055 40.574815,-94.900572 40.574816,-94.900885 40.574822,-94.901101 40.574859,-94.901107 40.574863,-94.914781 40.575066,-94.914896 40.575068,-94.921114 40.57516,-94.921225 40.575161,-94.933987 40.575352,-94.936634 40.575392,-94.936911 40.575396,-94.948199 40.575567,-94.953271 40.575641,-94.95392 40.575651,-94.955058 40.575668,-94.955134 40.575669,-94.966279 40.575836,-94.966491 40.575839,-94.971223 40.575688,-94.972045 40.575687,-94.991333 40.575692,-94.99166 40.575692,-95.000265 40.575936,-95.000555 40.575939,-95.010169 40.576039,-95.021797 40.57618,-95.021836 40.576181,-95.022769 40.576189,-95.023063 40.576192,-95.030676 40.576263,-95.036265 40.576354,-95.036362 40.576355,-95.038232 40.576341,-95.039152 40.576348,-95.039613 40.576355,-95.040027 40.576362,-95.040328 40.576368,-95.048786 40.57652,-95.048797 40.57652,-95.059337 40.57671,-95.062875 40.576772,-95.062997 40.576774,-95.06872 40.576878,-95.073022 40.576916,-95.073404 40.576919,-95.076369 40.576872,-95.077591 40.576907,-95.077992 40.576889,-95.078377 40.576897,-95.079666 40.576912,-95.084503 40.577032,-95.084525 40.577033,-95.087726 40.577118,-95.097266 40.577161,-95.107098 40.577269,-95.107207 40.577252,-95.107421 40.57724,-95.107973 40.577251,-95.108608 40.577244,-95.109632 40.577244,-95.109949 40.577244,-95.11012 40.577254,-95.110243 40.577281,-95.11041 40.577337,-95.110468 40.577363,-95.112109 40.577318,-95.112135 40.577313,-95.112224 40.577308,-95.112549 40.577306,-95.11398 40.577339,-95.115481 40.577341,-95.116419 40.577361,-95.1207 40.577427,-95.120705 40.577425,-95.120705 40.577424,-95.120825 40.577426,-95.120898 40.577415,-95.120986 40.577417,-95.122047 40.577423,-95.124405 40.577436,-95.125295 40.577443,-95.131592 40.577503,-95.1316 40.577503,-95.135489 40.577561,-95.144886 40.577704,-95.145089 40.577707,-95.145115 40.577707,-95.15441 40.577861,-95.157467 40.577908,-95.157712 40.577912,-95.164008 40.578016,-95.166331 40.578057,-95.167655 40.578066,-95.17062 40.578128,-95.174887 40.578174,-95.176189 40.578175,-95.179176 40.578236,-95.180197 40.57823,-95.183136 40.578265,-95.183459 40.578269,-95.184035 40.578267,-95.18501 40.578265,-95.187398 40.578305,-95.188453 40.57831,-95.188976 40.57833,-95.189023 40.578331,-95.189116 40.578334,-95.189843 40.578336,-95.190467 40.578345,-95.191484 40.578342,-95.193247 40.578374,-95.194188 40.578381,-95.194695 40.578391,-95.195415 40.578404,-95.198186 40.578434,-95.19882 40.578446,-95.199422 40.578451,-95.199854 40.578442,-95.200396 40.57844,-95.200955 40.578467,-95.201447 40.57847,-95.202265 40.578488,-95.203948 40.578517,-95.203983 40.578518,-95.205344 40.578533,-95.206587 40.578556,-95.207125 40.578558,-95.208043 40.578561,-95.209379 40.578594,-95.210074 40.578593,-95.211407 40.578617,-95.21154 40.578619,-95.21159 40.578624,-95.211754 40.57864,-95.211831 40.57866,-95.213318 40.578689,-95.216016 40.578734,-95.217363 40.578758,-95.218692 40.578779,-95.220047 40.578802,-95.221335 40.578824,-95.222796 40.579079,-95.224561 40.57888,-95.224733 40.578883,-95.225308 40.578894,-95.230674 40.578964,-95.232787 40.57899,-95.23279 40.57899,-95.233055 40.578995,-95.249191 40.579206,-95.250258 40.579189,-95.259008 40.579149,-95.25901 40.57915,-95.276644 40.579316,-95.278096 40.579322,-95.278116 40.579322,-95.297183 40.57951,-95.302554 40.57956,-95.308312 40.579614,-95.316264 40.57969,-95.316288 40.57969,-95.335483 40.580018,-95.335485 40.580018,-95.336474 40.580019,-95.337369 40.58003,-95.338082 40.580046,-95.339985 40.58006,-95.340264 40.580064,-95.340607 40.580067,-95.340844 40.580071,-95.341006 40.580073,-95.341176 40.580075,-95.342572 40.580092,-95.343737 40.580106,-95.346438 40.580138,-95.347476 40.580153,-95.349234 40.580171,-95.350431 40.580186,-95.353323 40.580234,-95.354508 40.580245,-95.357022 40.580254,-95.360839 40.580175,-95.364446 40.580263,-95.364651 40.580268,-95.368262 40.580356,-95.370491 40.580414,-95.373923 40.580503,-95.373951 40.580503,-95.375311 40.580626,-95.389268 40.580759,-95.392922 40.580793,-95.392926 40.580793,-95.411932 40.580979,-95.411985 40.58098,-95.412011 40.58098,-95.413824 40.580998,-95.415406 40.581014,-95.429239 40.581148,-95.431075 40.581167,-95.431095 40.581167,-95.44058 40.581259,-95.449753 40.581349,-95.45019 40.581353,-95.450206 40.581353,-95.460657 40.581455,-95.460812 40.581457,-95.469213 40.581548,-95.469255 40.581548,-95.469634 40.581548,-95.470332 40.581558,-95.471381 40.581579,-95.472055 40.581586,-95.473033 40.581583,-95.474974 40.581625,-95.475882 40.581639,-95.476481 40.58167,-95.47695 40.581667,-95.477582 40.581679,-95.480115 40.581665,-95.481354 40.581682,-95.483869 40.581697,-95.483914 40.581698,-95.484021 40.581702,-95.484298 40.581708,-95.485319 40.581724,-95.486088 40.581731,-95.486539 40.581722,-95.488144 40.581733,-95.488196 40.581733,-95.488514 40.581735,-95.490631 40.581777,-95.491616 40.581776,-95.492009 40.581781,-95.493391 40.581803,-95.494819 40.581833,-95.496945 40.581857,-95.498021 40.581881,-95.499155 40.581899,-95.499169 40.5819,-95.500967 40.581927,-95.501912 40.581928,-95.503033 40.581947,-95.503859 40.581952,-95.507142 40.581993,-95.507477 40.582004,-95.509146 40.582035,-95.509764 40.582051,-95.511071 40.582073,-95.512743 40.582083,-95.514244 40.5821,-95.51487 40.582101,-95.517384 40.582146,-95.519145 40.582165,-95.520514 40.582189,-95.521393 40.582198,-95.522252 40.582215,-95.523654 40.582224,-95.523906 40.582233,-95.525098 40.582243,-95.525201 40.582244,-95.525703 40.582232,-95.525873 40.582235,-95.525873 40.582234,-95.526498 40.582234,-95.52653 40.582235,-95.527504 40.582257,-95.528431 40.58227,-95.528858 40.582271,-95.530009 40.582301,-95.530346 40.582305,-95.531491 40.582338,-95.532626 40.582356,-95.533024 40.582358,-95.533115 40.582358,-95.533437 40.582356,-95.534335 40.582371,-95.53528 40.582377,-95.536445 40.582398,-95.538891 40.582449,-95.539424 40.582455,-95.540881 40.582441,-95.541593 40.58245,-95.542548 40.582453,-95.543436 40.582468,-95.54449 40.582469,-95.544932 40.582487,-95.545306 40.5825,-95.545306 40.582517,-95.545737 40.582529,-95.546468 40.58253,-95.547057 40.582543,-95.548209 40.582546,-95.548258 40.582547,-95.548306 40.582547,-95.548915 40.582565,-95.549636 40.582562,-95.550197 40.582573,-95.550914 40.582582,-95.55293 40.582635,-95.554391 40.582649,-95.554826 40.582656,-95.554875 40.582657,-95.556719 40.582677,-95.557384 40.582695,-95.558314 40.582699,-95.559952 40.582724,-95.562275 40.582759,-95.563865 40.582789,-95.565264 40.582814,-95.565364 40.582816,-95.566571 40.582841,-95.570387 40.582889,-95.571762 40.582919,-95.57208 40.582919,-95.572717 40.582939,-95.573954 40.582946,-95.573967 40.582946,-95.58496 40.583113,-95.585048 40.583114,-95.591526 40.583203,-95.593194 40.583228,-95.593195 40.583228,-95.59325 40.583228,-95.593317 40.583231,-95.601397 40.58335,-95.601441 40.583349,-95.602355 40.583365,-95.606904 40.583433,-95.607046 40.583435,-95.610881 40.583491,-95.610928 40.583492,-95.625269 40.583792,-95.630619 40.583901,-95.631692 40.583954,-95.631732 40.583955,-95.632106 40.583974,-95.632177 40.583977,-95.637722 40.584123,-95.637817 40.584127,-95.638063 40.584133,-95.638208 40.584137,-95.638459 40.584142,-95.641662 40.584229,-95.641695 40.584229,-95.647973 40.584398,-95.648534 40.584396,-95.652198 40.584389,-95.652303 40.584389,-95.652775 40.584388,-95.656646 40.584381,-95.657169 40.58438,-95.658705 40.584378,-95.658764 40.584378,-95.658797 40.584377,-95.673127 40.58435,-95.673257 40.58435,-95.685421 40.584327,-95.68631 40.584328,-95.687253 40.58437,-95.687374 40.584375,-95.687432 40.584378,-95.68748 40.584312,-95.687573 40.584295,-95.687694 40.584273,-95.69046 40.584354,-95.694246 40.584425,-95.701831 40.584537,-95.703792 40.584556,-95.705476 40.584575,-95.709173 40.584627,-95.712851 40.584646,-95.716233 40.584686,-95.716291 40.584686,-95.717391 40.584715,-95.720576 40.584753,-95.725782 40.584835,-95.731026 40.584893,-95.734317 40.584919,-95.735283 40.584911,-95.735429 40.584905,-95.735514 40.5849,-95.735606 40.584896,-95.735828 40.584912,-95.737565 40.584927,-95.742848 40.584997,-95.743969 40.585022,-95.744892 40.585029,-95.744937 40.585029,-95.745452 40.585013,-95.745543 40.585001,-95.745769 40.584972,-95.746 40.584959,-95.746165 40.584963,-95.746384 40.585012,-95.746647 40.585039,-95.747247 40.58505,-95.748016 40.585057,-95.749457 40.585014,-95.749776 40.585014,-95.750079 40.585066,-95.750481 40.585073,-95.751872 40.585076,-95.752307 40.585092,-95.752826 40.585079,-95.754648 40.585088,-95.763855 40.585207,-95.764549 40.585208,-95.765645 40.585208,-95.76463 40.585883,-95.758895 40.588973,-95.75524 40.591469,-95.753148 40.59284,-95.751195 40.595253,-95.750274 40.596317,-95.750053 40.597052,-95.749344 40.598803,-95.748858 40.599965,-95.748572 40.601265,-95.748626 40.603355,-95.749028 40.605333,-95.749685 40.606842,-95.750274 40.6076,-95.751271 40.609057,-95.752793 40.6102,-95.753545 40.610764,-95.75534 40.612056,-95.755583 40.612231,-95.758045 40.613759,-95.761683 40.615353,-95.764412 40.61709,-95.766823 40.61878,-95.768926 40.621264,-95.769759 40.622884,-95.770083 40.624425,-95.769671 40.625001,-95.769783 40.625463,-95.769904 40.626044,-95.770082 40.627504,-95.770189 40.628512,-95.770236 40.629117,-95.770293 40.629811,-95.770339 40.631486,-95.770442 40.635285,-95.770559 40.63635,-95.770834 40.63756,-95.771069 40.638456,-95.771296 40.639151,-95.771325 40.639393,-95.77147 40.639788,-95.772832 40.642496,-95.774143 40.644472,-95.774268 40.64466,-95.774598 40.645157,-95.776251 40.647463,-95.778276 40.64961,-95.77975 40.651131,-95.780239 40.651635,-95.781909 40.653272,-95.783822 40.654974,-95.785957 40.656734,-95.786568 40.657253,-95.787474 40.657919,-95.789485 40.659388,-95.793061 40.661227,-95.795489 40.662384,-95.797729 40.663209,-95.798669 40.663536,-95.801472 40.664283,-95.804307 40.664886,-95.805313 40.66502,-95.805641 40.665061,-95.808724 40.66527,-95.811151 40.665418,-95.812762 40.665507,-95.81415 40.66557,-95.815707 40.665779,-95.816491 40.665879,-95.817338 40.66598,-95.818354 40.666106,-95.820047 40.666468,-95.821412 40.666838,-95.822226 40.667083,-95.822913 40.66724,-95.824393 40.667784,-95.824891 40.667969,-95.826199 40.668498,-95.828372 40.669453,-95.82997 40.670224,-95.83074 40.670571,-95.830834 40.670613,-95.830845 40.670618,-95.832397 40.671309,-95.834419 40.672444,-95.836056 40.67343,-95.836365 40.673614,-95.837137 40.674067,-95.837399 40.674205,-95.837788 40.674413,-95.839395 40.675272,-95.840966 40.676295,-95.842316 40.677171,-95.842801 40.677496,-95.843841 40.678589,-95.844481 40.679382,-95.844827 40.679867,-95.844986 40.68012,-95.845172 40.680417,-95.845443 40.681046,-95.845765 40.681806,-95.846034 40.682605,-95.846239 40.68346,-95.846465 40.684324,-95.846712 40.685171,-95.846858 40.686206,-95.846883 40.686381,-95.846949 40.687252,-95.847015 40.688244,-95.84705 40.689211,-95.847116 40.690179,-95.847241 40.691086,-95.847266 40.69126,-95.847428 40.692163,-95.847581 40.692954,-95.847756 40.693583,-95.847931 40.694197,-95.84868 40.695973,-95.849166 40.696893,-95.849828 40.698147,-95.850582 40.699383,-95.851336 40.700523,-95.852615 40.702262,-95.854456 40.704164,-95.856362 40.705769,-95.857901 40.70713,-95.857984 40.707182,-95.859378 40.708055,-95.859875 40.708275,-95.860773 40.708738,-95.861798 40.709242,-95.863034 40.709715,-95.865954 40.710832,-95.868196 40.71164,-95.86954 40.712137,-95.870481 40.71248,-95.871836 40.712832,-95.872937 40.713127,-95.87528 40.71412,-95.877015 40.714287,-95.880993 40.716428,-95.883178 40.717579,-95.885349 40.721093,-95.886573 40.724637,-95.886592 40.724691,-95.887154 40.726317,-95.888907 40.731855,-95.888842 40.733226,-95.888697 40.736292,-95.88669 40.742101,-95.883643 40.747831,-95.881921 40.750001,-95.881529 40.750611,-95.879027 40.753081,-95.876896 40.754913,-95.875281 40.756011,-95.874492 40.756714,-95.873335 40.757616,-95.872281 40.758349,-95.871173 40.758896,-95.869982 40.759645,-95.868618 40.760177,-95.867224 40.76079,-95.865765 40.761299,-95.864349 40.76188,-95.862868 40.76234,-95.861695 40.762871,-95.860202 40.763291,-95.858426 40.76389,-95.856668 40.764319,-95.855051 40.764893,-95.852776 40.765631,-95.851572 40.766179,-95.850144 40.766663,-95.849005 40.767331,-95.847801 40.767943,-95.84662 40.768619,-95.844964 40.769693,-95.84372 40.770467,-95.842824 40.771093,-95.84154 40.772158,-95.840173 40.773392,-95.838879 40.774545,-95.837923 40.775511,-95.837289 40.776111,-95.836903 40.776477,-95.836162 40.777709,-95.835232 40.779151,-95.835178 40.779313,-95.834881 40.78021,-95.834462 40.781811,-95.834156 40.783016,-95.83412 40.783783,-95.834104 40.78413,-95.834065 40.785592,-95.834214 40.786665,-95.834523 40.787778,-95.835207 40.789309,-95.835815 40.79063,-95.83683 40.792288,-95.838578 40.794976,-95.84007 40.797471,-95.841527 40.799821,-95.842317 40.801247,-95.842738 40.801866,-95.843225 40.802816,-95.843745 40.803783,-95.843961 40.805178,-95.844408 40.806274,-95.844704 40.807209,-95.844994 40.808508,-95.845097 40.809108,-95.84522 40.809831,-95.845342 40.811324,-95.845251 40.812818,-95.844968 40.814217,-95.844922 40.814646,-95.844852 40.815307,-95.844397 40.816553,-95.843921 40.817686,-95.842948 40.819217,-95.842081 40.820569,-95.841581 40.821533,-95.841157 40.82204,-95.840437 40.822903,-95.839894 40.823786,-95.839269 40.825057,-95.838601 40.826175,-95.838351 40.826963,-95.8382 40.827437,-95.837665 40.829216,-95.837303 40.831164,-95.837266 40.832755,-95.837146 40.833474,-95.837122 40.834257,-95.837186 40.835347,-95.83757 40.836524,-95.838224 40.838079,-95.838688 40.839804,-95.839201 40.841094,-95.840014 40.842599,-95.840506 40.843953,-95.841309 40.845604,-95.841893 40.846603,-95.842681 40.847713,-95.843523 40.848976,-95.84434 40.849949,-95.845074 40.851035,-95.846076 40.85237,-95.847084 40.854174,-95.8475 40.855407,-95.847972 40.856809,-95.848112 40.857295,-95.84849 40.858607,-95.848565 40.859665,-95.848571 40.860016,-95.848587 40.860888,-95.84859 40.861061,-95.848242 40.862315,-95.847785 40.864328,-95.847397 40.864871,-95.846938 40.865745,-95.845974 40.867034,-95.844913 40.868202,-95.844073 40.869248,-95.842521 40.870266,-95.840788 40.871236,-95.840483 40.871377,-95.838735 40.872191,-95.836996 40.872644,-95.835054 40.872985,-95.833484 40.87326,-95.832103 40.873412,-95.830735 40.873702,-95.827787 40.874444,-95.824989 40.875,-95.824588 40.875158,-95.82328 40.875694,-95.821193 40.876682,-95.81959 40.877439,-95.817897 40.878448,-95.815933 40.879846,-95.81402 40.881808,-95.812083 40.884239,-95.810709 40.886681,-95.809994 40.889149,-95.809474 40.891228,-95.809379 40.893279,-95.809775 40.895447,-95.810886 40.897907,-95.812757 40.900642,-95.813465 40.901693,-95.814302 40.902936,-95.81618 40.904791,-95.818709 40.906818,-95.822081 40.909079,-95.822951 40.909639,-95.824959 40.910933,-95.827905 40.913069,-95.830699 40.915004,-95.833041 40.917243,-95.834906 40.919574,-95.836438 40.921642,-95.837774 40.924712,-95.838417 40.927408,-95.838446 40.927531,-95.83913 40.930341,-95.839743 40.93278,-95.840139 40.93548,-95.840207 40.937021,-95.840253 40.937909,-95.840277 40.938715,-95.840275 40.939942,-95.839979 40.941309,-95.839364 40.944059,-95.838877 40.946105,-95.838446 40.948385,-95.837951 40.950618,-95.836558 40.953205,-95.835095 40.955471,-95.833499 40.957988,-95.833015 40.958724,-95.832004 40.960269,-95.830801 40.962105,-95.829829 40.963857,-95.829507 40.965652,-95.829354 40.96738,-95.828991 40.969248,-95.828665 40.970793,-95.828329 40.972378,-95.828545 40.973901,-95.829074 40.975688,-95.829792 40.977344,-95.830297 40.978332,-95.831118 40.979777,-95.832055 40.98114,-95.833537 40.98266,-95.835434 40.984184,-95.837681 40.985599,-95.838908 40.986484,-95.840144 40.987243,-95.841186 40.987883,-95.842754 40.988812,-95.844351 40.989524,-95.84732 40.990214,-95.849232 40.990688,-95.851413 40.991362,-95.852547 40.991738,-95.854453 40.992479,-95.856071 40.993206,-95.857305 40.99384,-95.858668 40.994521,-95.860116 40.995242,-95.860445 40.995425,-95.8612 40.995845,-95.86248 40.996607,-95.863492 40.99734,-95.864391 40.998284,-95.865096 40.999076,-95.86601 40.999999,-95.86615 41.000015,-95.866423 41.000383,-95.866695 41.000734,-95.866786 41.000899,-95.8669 41.001026,-95.866951 41.001085,-95.867303 41.001645,-95.867305 41.001649,-95.867318 41.001673,-95.867327 41.001689,-95.867662 41.002304,-95.868037 41.003214,-95.86838 41.003753,-95.8687 41.004395,-95.868915 41.005133,-95.869216 41.005988,-95.869495 41.00709,-95.869567 41.007745,-95.869623 41.008432,-95.869526 41.009162,-95.869502 41.009429,-95.869301 41.009868,-95.868924 41.010954,-95.868643 41.011969,-95.868387 41.012727,-95.868002 41.013566,-95.867521 41.01442,-95.866872 41.01537,-95.866287 41.016349,-95.865886 41.017418,-95.865349 41.018164,-95.8647 41.018922,-95.864011 41.019753,-95.863265 41.020607,-95.862329 41.021808,-95.861616 41.022714,-95.860959 41.02362,-95.860786 41.023999,-95.860744 41.024058,-95.860294 41.024691,-95.859918 41.025403,-95.859622 41.026423,-95.859398 41.027787,-95.85919 41.028931,-95.859142 41.030323,-95.859102 41.031599,-95.85919 41.032591,-95.859278 41.033379,-95.859494 41.034467,-95.859654 41.035695,-95.86007 41.037011,-95.860386 41.037699,-95.860462 41.037887,-95.860862 41.038547,-95.861782 41.039427,-95.862686 41.040151,-95.863686 41.040971,-95.865158 41.042215,-95.866454 41.043103,-95.867246 41.043671,-95.86823 41.044271,-95.86923 41.044847,-95.869807 41.045199,-95.869863 41.045251,-95.870903 41.045823,-95.871783 41.046383,-95.872375 41.046955,-95.872903 41.047471,-95.873399 41.048031,-95.874247 41.048879,-95.874711 41.049323,-95.874998 41.049972,-95.875072 41.05014,-95.875147 41.050308,-95.875187 41.050399,-95.875287 41.050599,-95.875498 41.050743,-95.877258 41.051946,-95.877569 41.052135,-95.879462 41.053277,-95.879487 41.053299,-95.879488 41.053313,-95.879497 41.053448,-95.879724 41.053549,-95.879927 41.053639,-95.88082 41.054036,-95.881586 41.054376,-95.881588 41.054378,-95.881173 41.055938,-95.881387 41.056471,-95.881809 41.057521,-95.881939 41.057909,-95.882101 41.058359,-95.882342 41.059419,-95.882394 41.060412,-95.882476 41.06136,-95.882225 41.063539,-95.881768 41.064561,-95.881478 41.065359,-95.881011 41.066303,-95.880234 41.067457,-95.879367 41.068532,-95.877441 41.070357,-95.874998 41.072266,-95.873967 41.073071,-95.873877 41.073136,-95.873762 41.073218,-95.873761 41.073219,-95.87376 41.07322,-95.873757 41.073222,-95.873754 41.073224,-95.873743 41.073232,-95.873733 41.073239,-95.87257 41.07407,-95.871594 41.07495,-95.871464 41.075022,-95.870323 41.075809,-95.866912 41.078855,-95.865835 41.080079,-95.864782 41.081611,-95.864551 41.08216,-95.863843 41.083456,-95.86332 41.084915,-95.862937 41.086178,-95.862427 41.089687,-95.862517 41.090583,-95.862514 41.091123,-95.862587 41.091876,-95.862783 41.09258,-95.863044 41.093195,-95.863097 41.09366,-95.863113 41.093693,-95.863114 41.093695,-95.863115 41.093697,-95.863121 41.093711,-95.863131 41.093733,-95.863304 41.0941,-95.863279 41.094495,-95.863632 41.095392,-95.864396 41.097124,-95.864833 41.098487,-95.865076 41.09899,-95.865273 41.099913,-95.865726 41.1012,-95.86574 41.101263,-95.865862 41.101833,-95.865921 41.102108,-95.866172 41.10328,-95.866173 41.103287,-95.866213 41.103471,-95.866661 41.104975,-95.867072 41.108379,-95.866976 41.108714,-95.867102 41.109116,-95.867099 41.109511,-95.866818 41.110935,-95.8668 41.111074,-95.866397 41.114376,-95.866304 41.115116,-95.866415 41.117416,-95.866425 41.117812,-95.866641 41.119278,-95.867086 41.120603,-95.867228 41.121493,-95.867566 41.122086,-95.868382 41.123886,-95.868546 41.124103,-95.868689 41.124667,-95.868961 41.125166,-95.869092 41.125548,-95.869493 41.126034,-95.869624 41.126234,-95.870021 41.126839,-95.870087 41.127084,-95.870122 41.127135,-95.870716 41.128004,-95.871168 41.128795,-95.872053 41.129731,-95.872412 41.129966,-95.872679 41.130219,-95.872913 41.130571,-95.873121 41.130766,-95.87347 41.131397,-95.873902 41.131731,-95.874549 41.132486,-95.874757 41.132809,-95.874949 41.133025,-95.875633 41.133793,-95.875864 41.134021,-95.876048 41.134132,-95.876386 41.134649,-95.877042 41.135399,-95.877375 41.13586,-95.877476 41.136,-95.877699 41.136176,-95.87802 41.136658,-95.878302 41.136947,-95.878673 41.137685,-95.879316 41.138584,-95.879318 41.138586,-95.87933 41.138603,-95.879686 41.138938,-95.880044 41.139563,-95.880171 41.139947,-95.880609 41.140625,-95.880865 41.140883,-95.881222 41.141665,-95.881313 41.142127,-95.882032 41.143534,-95.882136 41.143994,-95.882138 41.144005,-95.882304 41.144738,-95.882591 41.145722,-95.882755 41.146021,-95.882875 41.146446,-95.882883 41.146657,-95.882776 41.146898,-95.882803 41.147221,-95.882961 41.147821,-95.883129 41.148196,-95.883172 41.148806,-95.883095 41.149342,-95.883346 41.151056,-95.883271 41.151484,-95.88309 41.151855,-95.883203 41.152652,-95.883144 41.153259,-95.882991 41.153674,-95.882944 41.154572,-95.882718 41.154937,-95.882643 41.155061,-95.882626 41.155193,-95.882625 41.155201,-95.88254 41.155881,-95.882392 41.156185,-95.882152 41.156495,-95.881958 41.156935,-95.881477 41.158361,-95.881062 41.158841,-95.880521 41.159874,-95.879959 41.160947,-95.879654 41.161267,-95.879171 41.161968,-95.877368 41.163914,-95.875798 41.165268,-95.875397 41.16552,-95.874398 41.166216,-95.873692 41.166642,-95.87271 41.167003,-95.872066 41.16731,-95.87111 41.167635,-95.870574 41.167784,-95.869178 41.168013,-95.867309 41.168153,-95.865929 41.168129,-95.864852 41.167939,-95.864399 41.167859,-95.863261 41.167495,-95.862345 41.167297,-95.86091 41.166911,-95.860316 41.166685,-95.859258 41.166535,-95.857637 41.166113,-95.856813 41.165935,-95.856296 41.165877,-95.853451 41.165518,-95.850882 41.165674,-95.849855 41.165833,-95.849363 41.165967,-95.848892 41.166018,-95.847938 41.166239,-95.846957 41.166604,-95.845451 41.167423,-95.844378 41.168241,-95.843883 41.168768,-95.843443 41.169096,-95.842731 41.170031,-95.842623 41.170345,-95.842039 41.171367,-95.842015 41.171654,-95.841789 41.172314,-95.841655 41.17317,-95.841611 41.173925,-95.841673 41.17486,-95.841616 41.175469,-95.84171 41.175858,-95.841816 41.175977,-95.841929 41.176256,-95.841956 41.176321,-95.842051 41.176772,-95.842188 41.177421,-95.84241 41.177778,-95.842746 41.178127,-95.843351 41.179677,-95.843657 41.180041,-95.844175 41.180411,-95.844535 41.180791,-95.844842 41.181155,-95.845121 41.181612,-95.845433 41.18193,-95.846295 41.182546,-95.847241 41.183351,-95.848798 41.184296,-95.849358 41.184545,-95.849861 41.18477,-95.850374 41.18509,-95.850757 41.185234,-95.851169 41.185321,-95.851268 41.185365,-95.852314 41.185833,-95.853094 41.185988,-95.854142 41.186411,-95.854836 41.186529,-95.855286 41.186697,-95.856125 41.186949,-95.85688 41.186995,-95.858032 41.18733,-95.858728 41.187375,-95.859224 41.187501,-95.86044 41.187666,-95.86097 41.187826,-95.861659 41.187965,-95.862084 41.188007,-95.862558 41.187993,-95.863797 41.188245,-95.864554 41.188205,-95.865782 41.188296,-95.866304 41.188277,-95.867624 41.188416,-95.868373 41.188324,-95.869538 41.188342,-95.870101 41.188272,-95.871288 41.188324,-95.872031 41.188209,-95.873608 41.188223,-95.873877 41.188153,-95.874537 41.188089,-95.875726 41.188048,-95.876582 41.188067,-95.877133 41.187961,-95.878133 41.187941,-95.878636 41.187836,-95.879586 41.187787,-95.880089 41.187681,-95.880658 41.187663,-95.885516 41.186773,-95.886131 41.186582,-95.886739 41.186496,-95.88784 41.186239,-95.888923 41.186128,-95.889651 41.185962,-95.891187 41.185721,-95.894134 41.185336,-95.898155 41.184775,-95.898962 41.184794,-95.8998 41.184655,-95.90051 41.184609,-95.90089 41.184626,-95.901348 41.184718,-95.901818 41.18466,-95.904169 41.184554,-95.904735 41.184499,-95.905591 41.184528,-95.90758 41.184368,-95.908668 41.184454,-95.910236 41.184403,-95.910787 41.184481,-95.911365 41.184642,-95.911984 41.18467,-95.912506 41.184638,-95.913168 41.184691,-95.913668 41.184809,-95.9142 41.18504,-95.914668 41.185111,-95.915428 41.185145,-95.916119 41.185279,-95.916699 41.185525,-95.9172 41.185907,-95.91891 41.18654,-95.919561 41.186901,-95.919916 41.187239,-95.920178 41.18766,-95.920783 41.188071,-95.92127 41.188401,-95.921454 41.188525,-95.922182 41.189092,-95.922358 41.189305,-95.922531 41.189678,-95.923205 41.190282,-95.923394 41.190532,-95.923548 41.19085,-95.924152 41.191474,-95.924454 41.192078,-95.925086 41.192796,-95.925235 41.19306,-95.925322 41.193376,-95.925901 41.194119,-95.926029 41.194683,-95.926334 41.195211,-95.926694 41.195633,-95.926771 41.196148,-95.92725 41.197086,-95.927296 41.197408,-95.927263 41.197802,-95.927663 41.199025,-95.927738 41.199453,-95.927908 41.199749,-95.927975 41.200069,-95.927932 41.200426,-95.927748 41.200833,-95.927733 41.200866,-95.927739 41.201082,-95.927752 41.201126,-95.927935 41.20175,-95.927985 41.202056,-95.928011 41.202211,-95.928071 41.202569,-95.928047 41.202892,-95.927934 41.20324,-95.928019 41.204895,-95.927988 41.205398,-95.927846 41.205888,-95.927528 41.206327,-95.927523 41.206369,-95.927459 41.206905,-95.927454 41.206947,-95.927453 41.206956,-95.927445 41.207023,-95.927262 41.208554,-95.927183 41.208971,-95.926912 41.20943,-95.926865 41.209585,-95.926838 41.209675,-95.92683 41.209998,-95.926765 41.210218,-95.926736 41.210314,-95.926572 41.210613,-95.92634 41.210885,-95.92628 41.211082,-95.926275 41.211098,-95.926117 41.211619,-95.925932 41.211911,-95.925678 41.212171,-95.92563 41.212284,-95.925461 41.212686,-95.925084 41.213269,-95.924683 41.213555,-95.924618 41.213601,-95.924538 41.213658,-95.924524 41.213668,-95.924522 41.21367,-95.924463 41.213712,-95.924189 41.214119,-95.924179 41.214134,-95.923686 41.214866,-95.923426 41.215369,-95.923045 41.215824,-95.922764 41.216069,-95.922488 41.216231,-95.922426 41.216267,-95.922319 41.216394,-95.922284 41.216436,-95.92228 41.216441,-95.922279 41.216442,-95.922278 41.216443,-95.922277 41.216445,-95.922273 41.21645,-95.922257 41.216469,-95.922225 41.216507,-95.922143 41.216605,-95.921865 41.216936,-95.92096 41.217676,-95.920512 41.218037,-95.920026 41.218428,-95.919342 41.218979,-95.919221 41.219076,-95.919037 41.219224,-95.919026 41.219233,-95.918502 41.219667,-95.91849 41.219677,-95.9173 41.220617,-95.917005 41.221027,-95.915814 41.222105,-95.915556 41.222506,-95.915523 41.222557,-95.914272 41.223858,-95.913843 41.22458,-95.913661 41.224988,-95.912977 41.225895,-95.912763 41.226294,-95.912711 41.226528,-95.912669 41.226719,-95.912374 41.227328,-95.911801 41.228316,-95.911734 41.228457,-95.911496 41.228962,-95.911363 41.22978,-95.91106 41.230461,-95.911053 41.230892,-95.910918 41.231531,-95.910912 41.231546,-95.910879 41.231631,-95.910676 41.23215,-95.910712 41.232685,-95.910666 41.233223,-95.910735 41.233615,-95.910724 41.233993,-95.910724 41.234002,-95.910716 41.234299,-95.910629 41.234579,-95.910712 41.235043,-95.910703 41.23623,-95.910955 41.237769,-95.910955 41.238032,-95.91113 41.23848,-95.911296 41.239442,-95.91164 41.239994,-95.91186 41.241023,-95.912225 41.241566,-95.912472 41.242295,-95.912932 41.242924,-95.913015 41.243098,-95.913109 41.243296,-95.913175 41.243542,-95.913265 41.24365,-95.91329 41.24368,-95.913305 41.243698,-95.913306 41.2437,-95.913308 41.243702,-95.913309 41.243703,-95.913338 41.243738,-95.913508 41.243942,-95.913961 41.244485,-95.914168 41.245,-95.914408 41.245352,-95.915113 41.246075,-95.915389 41.246647,-95.915408 41.246663,-95.915434 41.246685,-95.915793 41.246999,-95.91602 41.247274,-95.916211 41.247755,-95.91642 41.248012,-95.916469 41.248073,-95.916573 41.248201,-95.916732 41.248398,-95.916899 41.248831,-95.917399 41.249685,-95.917438 41.24976,-95.917443 41.249769,-95.917447 41.249778,-95.91745 41.249784,-95.917455 41.249792,-95.917459 41.249801,-95.91747 41.249821,-95.917472 41.249826,-95.917475 41.249832,-95.91748 41.249842,-95.917646 41.250164,-95.918352 41.251532,-95.918526 41.251805,-95.918534 41.251818,-95.918535 41.251819,-95.918587 41.2519,-95.919093 41.252698,-95.919532 41.253724,-95.919564 41.253876,-95.919567 41.253895,-95.919577 41.253943,-95.919582 41.253968,-95.919616 41.254123,-95.920225 41.255296,-95.920265 41.255374,-95.920445 41.255722,-95.920719 41.256712,-95.92134 41.258129,-95.921345 41.258139,-95.921364 41.258181,-95.921427 41.258456,-95.921429 41.258464,-95.92143 41.258469,-95.921432 41.258482,-95.921606 41.259279,-95.921627 41.259412,-95.921629 41.259426,-95.921631 41.25944,-95.921632 41.259444,-95.921633 41.259448,-95.921634 41.259455,-95.921645 41.259527,-95.92166 41.259626,-95.921669 41.259688,-95.92168 41.259763,-95.921692 41.259838,-95.921776 41.260387,-95.922104 41.261399,-95.922113 41.261722,-95.922042 41.262033,-95.922304 41.26302,-95.922308 41.263848,-95.922423 41.264635,-95.922395 41.26546,-95.921704 41.26687,-95.921643 41.267262,-95.921497 41.267604,-95.92056 41.26851,-95.920119 41.269085,-95.920034 41.269143,-95.919867 41.269255,-95.919701 41.269367,-95.918732 41.269824,-95.917927 41.270553,-95.917755 41.270709,-95.917646 41.270782,-95.91747 41.2709,-95.916662 41.271201,-95.916343 41.271468,-95.915741 41.271821,-95.915316 41.271985,-95.915181 41.272014,-95.915121 41.272027,-95.915097 41.272032,-95.914813 41.272092,-95.914671 41.272158,-95.914091 41.272428,-95.914909 41.272559,-95.91573 41.272691,-95.915832 41.272707,-95.915937 41.272725,-95.916045 41.272802,-95.916772 41.273322,-95.917872 41.274085,-95.917914 41.274115,-95.918041 41.274208,-95.918187 41.2743,-95.918585 41.274567,-95.91887 41.274758,-95.924811 41.278741,-95.924835 41.278759,-95.925884 41.27953,-95.925948 41.27957,-95.926036 41.279627,-95.927075 41.280306,-95.927076 41.280307,-95.927102 41.280324,-95.927332 41.280474,-95.927407 41.280523,-95.927453 41.280553,-95.927477 41.280569,-95.927496 41.280581,-95.927497 41.280582,-95.927503 41.280585,-95.927504 41.280586,-95.927526 41.2806,-95.927783 41.280768,-95.928646 41.281332,-95.929619 41.285077,-95.929602 41.290449,-95.929607 41.290629,-95.929651 41.292262,-95.929219 41.29359,-95.929066 41.29406,-95.928968 41.294361,-95.92896 41.294386,-95.928958 41.294392,-95.928957 41.294395,-95.928957 41.294397,-95.928952 41.294413,-95.928936 41.294462,-95.928925 41.294495,-95.92881 41.294849,-95.928341 41.296291,-95.928309 41.29639,-95.928295 41.296432,-95.928294 41.296435,-95.92828 41.296477,-95.928258 41.296545,-95.928128 41.296945,-95.928043 41.297206,-95.92797 41.297431,-95.927965 41.297446,-95.927959 41.297466,-95.927958 41.297469,-95.92795 41.297494,-95.927905 41.297632,-95.927642 41.29844,-95.926393 41.298887,-95.924691 41.299597,-95.92236 41.300392,-95.920247 41.301191,-95.913781 41.301377,-95.913576 41.301383,-95.912055 41.301258,-95.911712 41.301243,-95.911413 41.30123,-95.911305 41.301225,-95.911262 41.301223,-95.911251 41.301223,-95.911248 41.301223,-95.910806 41.301204,-95.910791 41.301203,-95.910788 41.301203,-95.909997 41.301168,-95.90972 41.301157,-95.909566 41.30115,-95.909545 41.301149,-95.909541 41.301149,-95.909539 41.301149,-95.909538 41.301148,-95.909535 41.301148,-95.909514 41.301147,-95.909491 41.301146,-95.909462 41.301145,-95.90944 41.301144,-95.909435 41.301144,-95.909431 41.301144,-95.909424 41.301144,-95.909422 41.301143,-95.90942 41.301143,-95.909418 41.301143,-95.909416 41.301143,-95.90935 41.30114,-95.909302 41.301138,-95.908971 41.301124,-95.908506 41.301103,-95.908387 41.3011,-95.908245 41.301096,-95.908198 41.301095,-95.908137 41.301094,-95.908111 41.301093,-95.908008 41.30109,-95.907557 41.301079,-95.907407 41.301075,-95.907307 41.301073,-95.907302 41.301073,-95.907256 41.301072,-95.907129 41.301069,-95.906079 41.301043,-95.905969 41.30104,-95.90596 41.30104,-95.905958 41.301039,-95.905956 41.301039,-95.905952 41.301039,-95.905939 41.301039,-95.905932 41.301039,-95.905899 41.301038,-95.904865 41.299787,-95.904683 41.299408,-95.904659 41.299359,-95.904518 41.299065,-95.904481 41.298987,-95.90441 41.298839,-95.904393 41.298804,-95.904356 41.298543,-95.904318 41.298275,-95.904241 41.297729,-95.904222 41.297591,-95.904229 41.297497,-95.904235 41.297424,-95.904242 41.297341,-95.904262 41.297102,-95.904262 41.297098,-95.904263 41.29709,-95.904379 41.295672,-95.904383 41.295613,-95.904384 41.295604,-95.90439 41.295536,-95.904392 41.295506,-95.904404 41.295358,-95.90441 41.29528,-95.904421 41.295149,-95.904427 41.295079,-95.904444 41.294873,-95.904444 41.29487,-95.904444 41.294868,-95.904445 41.294867,-95.904445 41.294865,-95.904445 41.294863,-95.904449 41.294821,-95.904457 41.29472,-95.904478 41.294457,-95.904505 41.294127,-95.904514 41.294016,-95.904514 41.294014,-95.904515 41.293999,-95.904518 41.293965,-95.904554 41.293519,-95.904576 41.293255,-95.904825 41.293255,-95.905146 41.293346,-95.905411 41.293176,-95.90539 41.293076,-95.904786 41.292959,-95.90471 41.292883,-95.904766 41.292586,-95.905216 41.291616,-95.905123 41.291341,-95.905322 41.291242,-95.905357 41.291224,-95.905482 41.29123,-95.905952 41.288572,-95.905961 41.288521,-95.905965 41.288502,-95.905965 41.2885,-95.905966 41.288497,-95.905966 41.288494,-95.905967 41.288488,-95.905969 41.288476,-95.905974 41.28845,-95.906144 41.287488,-95.906192 41.287369,-95.906666 41.286195,-95.906668 41.286139,-95.906682 41.286105,-95.906769 41.2859,-95.906814 41.285795,-95.906901 41.285589,-95.906906 41.285577,-95.906912 41.285563,-95.90693 41.285521,-95.907117 41.28508,-95.907118 41.285077,-95.907119 41.285074,-95.907122 41.285067,-95.907131 41.285046,-95.90716 41.284977,-95.907177 41.284938,-95.9074 41.284734,-95.907604 41.284528,-95.907705 41.28442,-95.907751 41.284366,-95.907793 41.284316,-95.908038 41.284069,-95.9082 41.283906,-95.909059 41.283051,-95.909558 41.282551,-95.910543 41.281564,-95.910791 41.281317,-95.910974 41.281134,-95.912581 41.279527,-95.912576 41.279524,-95.909856 41.277913,-95.90866 41.277198,-95.908151 41.276893,-95.90794 41.276767,-95.907121 41.276279,-95.906905 41.276141,-95.906891 41.276132,-95.906837 41.276097,-95.906707 41.276014,-95.906701 41.27601,-95.906695 41.276006,-95.906661 41.275984,-95.906651 41.275978,-95.906562 41.275921,-95.906551 41.275914,-95.906418 41.275829,-95.905998 41.275561,-95.905976 41.275547,-95.905907 41.275503,-95.905724 41.275386,-95.905178 41.275037,-95.90505 41.275,-95.90493 41.274967,-95.904921 41.274964,-95.904719 41.274907,-95.90388 41.274669,-95.9029 41.274391,-95.90284 41.274374,-95.902812 41.274378,-95.902793 41.274381,-95.902709 41.274393,-95.90266 41.2744,-95.902633 41.274404,-95.902618 41.274406,-95.902615 41.274406,-95.902599 41.274408,-95.902538 41.274417,-95.902468 41.274427,-95.902262 41.274456,-95.901985 41.274496,-95.901523 41.274683,-95.899846 41.2752,-95.898441 41.275537,-95.898031 41.27572,-95.897634 41.275977,-95.896875 41.276191,-95.896114 41.276322,-95.89611 41.276324,-95.896067 41.276342,-95.896058 41.276346,-95.896043 41.276352,-95.896026 41.276359,-95.896018 41.276362,-95.896 41.27637,-95.895432 41.276611,-95.893148 41.277348,-95.892506 41.277555,-95.892481 41.277563,-95.892478 41.277564,-95.892476 41.277564,-95.892474 41.277565,-95.892468 41.277567,-95.892446 41.277574,-95.892439 41.277576,-95.892438 41.277577,-95.892435 41.277578,-95.89238 41.277596,-95.891895 41.277752,-95.891849 41.277767,-95.891845 41.277768,-95.891841 41.277769,-95.891828 41.277773,-95.891823 41.277775,-95.89145 41.277895,-95.891214 41.277971,-95.891212 41.277972,-95.891209 41.277973,-95.891201 41.277976,-95.891191 41.277979,-95.891171 41.277985,-95.891155 41.27799,-95.891137 41.277996,-95.891115 41.278003,-95.89109 41.278011,-95.891078 41.278015,-95.891066 41.278019,-95.891 41.27804,-95.887615 41.279366,-95.884495 41.280689,-95.883316 41.281301,-95.881448 41.282171,-95.880659 41.28264,-95.880512 41.282727,-95.880496 41.282736,-95.879619 41.283238,-95.878881 41.283661,-95.878408 41.284016,-95.877481 41.284583,-95.877432 41.284623,-95.877191 41.284818,-95.877137 41.284861,-95.87681 41.285125,-95.876051 41.285739,-95.875593 41.286199,-95.875309 41.286615,-95.874716 41.287032,-95.874324 41.287394,-95.874139 41.287646,-95.874004 41.287953,-95.873723 41.288259,-95.873652 41.288337,-95.873378 41.28886,-95.873317 41.288951,-95.873231 41.289079,-95.872937 41.289517,-95.872917 41.289546,-95.872894 41.289581,-95.872892 41.289584,-95.872872 41.289614,-95.872817 41.289696,-95.872816 41.289698,-95.872814 41.2897,-95.872813 41.289701,-95.872807 41.28971,-95.872806 41.289712,-95.872667 41.289919,-95.872634 41.290019,-95.872631 41.290028,-95.872539 41.290302,-95.872128 41.291145,-95.871809 41.292378,-95.871589 41.292735,-95.871442 41.293408,-95.871483 41.294018,-95.871382 41.294295,-95.871368 41.295054,-95.871367 41.295083,-95.871192 41.296044,-95.871141 41.29669,-95.871304 41.297286,-95.871277 41.298077,-95.871391 41.298572,-95.871395 41.299482,-95.87161 41.300069,-95.871679 41.300967,-95.871819 41.301348,-95.871871 41.301813,-95.872269 41.30307,-95.87247 41.303435,-95.872705 41.30428,-95.873049 41.304871,-95.873404 41.305879,-95.873643 41.306287,-95.874071 41.307466,-95.874184 41.307924,-95.87435 41.308183,-95.874578 41.308414,-95.875109 41.309453,-95.875503 41.309857,-95.875725 41.310293,-95.876461 41.311087,-95.87676 41.311537,-95.877399 41.312071,-95.878292 41.313081,-95.878634 41.313331,-95.879163 41.313571,-95.879868 41.314381,-95.88022 41.314624,-95.880649 41.314825,-95.881868 41.315687,-95.882257 41.316179,-95.882916 41.316647,-95.883313 41.316847,-95.883793 41.317006,-95.884576 41.317417,-95.885554 41.318097,-95.88635 41.318422,-95.886941 41.318567,-95.887214 41.318604,-95.887316 41.318618,-95.887802 41.318833,-95.887808 41.318836,-95.888109 41.318969,-95.888236 41.319025,-95.888244 41.319029,-95.888414 41.319104,-95.888442 41.319116,-95.888481 41.319133,-95.888633 41.3192,-95.888926 41.31933,-95.889251 41.319474,-95.889914 41.319677,-95.890921 41.319902,-95.891506 41.320211,-95.892035 41.320374,-95.893449 41.320536,-95.893817 41.320612,-95.894405 41.320848,-95.894818 41.320937,-95.895244 41.320974,-95.896006 41.320945,-95.896839 41.321103,-95.897284 41.321234,-95.89879 41.321249,-95.899943 41.321481,-95.900878 41.321341,-95.901736 41.321474,-95.902577 41.321347,-95.904145 41.321238,-95.905181 41.321108,-95.907631 41.320656,-95.907696 41.320644,-95.907705 41.320643,-95.907918 41.320604,-95.908814 41.320498,-95.909734 41.320304,-95.910541 41.320286,-95.911457 41.320191,-95.912337 41.320079,-95.912371 41.320075,-95.912736 41.320075,-95.914116 41.320077,-95.914618 41.319962,-95.915091 41.319918,-95.915566 41.319948,-95.916495 41.320113,-95.917705 41.320136,-95.918174 41.320074,-95.918651 41.320079,-95.921378 41.320434,-95.922744 41.320861,-95.925185 41.321355,-95.925835 41.32158,-95.927206 41.322267,-95.927444 41.322386,-95.92779 41.322559,-95.929383 41.32313,-95.931008 41.324236,-95.931717 41.324602,-95.932144 41.324771,-95.932146 41.324772,-95.932859 41.325054,-95.934463 41.32596,-95.934972 41.326173,-95.93573 41.326473,-95.936383 41.326997,-95.93786 41.327853,-95.939024 41.328416,-95.939386 41.32851,-95.939578 41.328597,-95.939605 41.328609,-95.940121 41.328843,-95.940672 41.329337,-95.941778 41.330025,-95.941789 41.330032,-95.942955 41.330756,-95.94365 41.331243,-95.943654 41.331246,-95.944087 41.33155,-95.944843 41.33208,-95.946532 41.333139,-95.947626 41.334084,-95.947645 41.334101,-95.948258 41.334631,-95.950198 41.336221,-95.951208 41.337179,-95.951657 41.337502,-95.952646 41.338692,-95.953418 41.33947,-95.955294 41.341896,-95.955764 41.342633,-95.956038 41.343063,-95.956693 41.344721,-95.956994 41.345521,-95.957008 41.345558,-95.957052 41.345676,-95.957097 41.345794,-95.957137 41.345902,-95.957301 41.347369,-95.957249 41.348879,-95.95713 41.349593,-95.956635 41.350716,-95.956294 41.351062,-95.955671 41.351994,-95.954883 41.352808,-95.954271 41.353508,-95.954171 41.353592,-95.953953 41.353776,-95.953443 41.354042,-95.952317 41.354871,-95.950965 41.355479,-95.950402 41.355677,-95.949894 41.355777,-95.949341 41.355986,-95.948597 41.356115,-95.948268 41.35626,-95.946914 41.356609,-95.945699 41.356801,-95.945121 41.356865,-95.943337 41.357063,-95.943017 41.357135,-95.941359 41.35769,-95.940811 41.357813,-95.940586 41.357904,-95.940055 41.358119,-95.939718 41.358206,-95.939062 41.358375,-95.938294 41.35874,-95.936923 41.359247,-95.936555 41.359475,-95.936258 41.359756,-95.935468 41.360135,-95.935042 41.360521,-95.933642 41.361551,-95.933347 41.361834,-95.933128 41.362153,-95.932184 41.36296,-95.931711 41.363626,-95.931421 41.364035,-95.93135 41.364108,-95.931015 41.364454,-95.930965 41.364495,-95.930767 41.365008,-95.930296 41.365803,-95.930245 41.365889,-95.929681 41.367058,-95.928774 41.37008,-95.928824 41.370545,-95.928768 41.37166,-95.928951 41.372441,-95.929008 41.37316,-95.929173 41.373857,-95.929294 41.374365,-95.929457 41.375182,-95.929486 41.375326,-95.929714 41.375875,-95.929799 41.376228,-95.930281 41.376995,-95.930388 41.377345,-95.930575 41.377676,-95.932246 41.379815,-95.932485 41.379997,-95.93314 41.380875,-95.933878 41.381714,-95.934896 41.383136,-95.935286 41.383811,-95.935407 41.384021,-95.936073 41.385252,-95.936411 41.385876,-95.936644 41.386573,-95.936721 41.38729,-95.93699 41.387834,-95.937237 41.388334,-95.937418 41.389516,-95.937791 41.390752,-95.937666 41.391568,-95.937771 41.392255,-95.937806 41.393201,-95.937676 41.393834,-95.937726 41.394232,-95.937694 41.39477,-95.937272 41.396131,-95.937168 41.396735,-95.936871 41.397342,-95.936752 41.397873,-95.935793 41.399632,-95.935426 41.400135,-95.935062 41.400489,-95.934881 41.400836,-95.93421 41.401834,-95.933153 41.403155,-95.932439 41.404,-95.931587 41.405638,-95.930891 41.407205,-95.930214 41.409021,-95.930141 41.409219,-95.929932 41.410323,-95.929677 41.411071,-95.92961 41.412723,-95.929525 41.41344,-95.929596 41.414157,-95.929549 41.41473,-95.929472 41.415042,-95.929478 41.415329,-95.929875 41.416772,-95.93 41.417557,-95.930473 41.418894,-95.930479 41.418912,-95.930625 41.41924,-95.931224 41.420583,-95.93154 41.421066,-95.931731 41.421549,-95.931788 41.421869,-95.932254 41.423072,-95.932255 41.423073,-95.932519 41.423459,-95.932479 41.424212,-95.932767 41.425159,-95.932994 41.426186,-95.932972 41.42658,-95.933099 41.427219,-95.933135 41.428188,-95.933097 41.428941,-95.932885 41.429603,-95.932882 41.430107,-95.932778 41.430815,-95.932647 41.430946,-95.932525 41.431181,-95.932447 41.431608,-95.932311 41.432071,-95.931942 41.432571,-95.931724 41.433085,-95.931228 41.433613,-95.930921 41.434178,-95.930423 41.434747,-95.930101 41.43496,-95.929514 41.435659,-95.929108 41.435962,-95.928638 41.436501,-95.927326 41.437447,-95.926926 41.43785,-95.925961 41.438439,-95.925571 41.438802,-95.925268 41.438957,-95.924596 41.439519,-95.923285 41.440503,-95.922546 41.44134,-95.922106 41.441665,-95.921971 41.441837,-95.92174 41.44213,-95.921402 41.442838,-95.920857 41.443428,-95.920846 41.443449,-95.920618 41.443937,-95.920279 41.444978,-95.919905 41.445869,-95.91974 41.447373,-95.919537 41.448186,-95.919606 41.448975,-95.919566 41.450015,-95.919801 41.450747,-95.919779 41.451286,-95.919859 41.451494,-95.919989 41.452604,-95.920215 41.452795,-95.920498 41.45324,-95.920678 41.453627,-95.92096 41.454673,-95.921192 41.455138,-95.921655 41.455602,-95.922246 41.456358,-95.922786 41.457306,-95.923867 41.458236,-95.92451 41.458914,-95.924818 41.459127,-95.925384 41.459398,-95.925924 41.459901,-95.926464 41.46025,-95.927081 41.460811,-95.927442 41.461044,-95.927827 41.461257,-95.928419 41.461683,-95.929216 41.461993,-95.930425 41.462748,-95.933537 41.464277,-95.935054 41.464839,-95.935414 41.464936,-95.935903 41.465168,-95.93634 41.465304,-95.937137 41.465381,-95.937626 41.465536,-95.938706 41.465827,-95.939478 41.465982,-95.940481 41.466078,-95.941767 41.466349,-95.94349 41.466388,-95.944544 41.466485,-95.945007 41.466485,-95.946319 41.466272,-95.947142 41.46602,-95.947626 41.465946,-95.948016 41.465827,-95.949589 41.465538,-95.950717 41.46511,-95.952491 41.46451,-95.953829 41.464123,-95.95604 41.4636,-95.957764 41.463367,-95.95791 41.463331,-95.958372 41.463218,-95.95941 41.463154,-95.961363 41.46316,-95.962702 41.463077,-95.965042 41.463212,-95.966688 41.463425,-95.967511 41.463638,-95.968334 41.46389,-95.968745 41.464142,-95.969697 41.464491,-95.970906 41.465071,-95.97124 41.465323,-95.971574 41.465497,-95.972901 41.466082,-95.974223 41.467027,-95.975869 41.467899,-95.976435 41.468286,-95.97785 41.468809,-95.978776 41.469293,-95.979804 41.469719,-95.980499 41.469854,-95.98181 41.4703,-95.984279 41.470939,-95.986465 41.471326,-95.987327 41.471392,-95.987931 41.471481,-95.988497 41.471578,-95.990606 41.471675,-95.991086 41.471789,-95.991661 41.471849,-95.992561 41.47181,-95.993692 41.471675,-95.994207 41.471733,-95.99575 41.471578,-95.996316 41.471597,-95.997482 41.471505,-95.998052 41.47146,-95.998665 41.471528,-95.999668 41.471524,-96.00029 41.471605,-96.000468 41.471629,-96.001612 41.471695,-96.002053 41.471769,-96.004047 41.472146,-96.004936 41.472413,-96.006609 41.473038,-96.007264 41.473435,-96.007354 41.47349,-96.007683 41.473611,-96.00804 41.473742,-96.008519 41.474039,-96.009016 41.47452,-96.009457 41.474795,-96.010588 41.475721,-96.01125 41.476186,-96.011513 41.476443,-96.01176 41.476791,-96.012073 41.477075,-96.013585 41.478469,-96.014116 41.479151,-96.015 41.480048,-96.015386 41.480704,-96.016608 41.481918,-96.017836 41.483584,-96.018563 41.484991,-96.018767 41.485619,-96.019343 41.486926,-96.019532 41.488325,-96.0195 41.490451,-96.019543 41.491592,-96.019054 41.491684,-96.018591 41.491772,-96.017918 41.491976,-96.01738 41.492139,-96.01282 41.494904,-96.000649 41.50254,-96.000319 41.502857,-95.997022 41.506046,-95.996194 41.50696,-95.99328 41.512314,-95.992777 41.514596,-95.993651 41.520178,-95.994308 41.523743,-95.994751 41.524954,-95.995904 41.528152,-95.997233 41.53172,-95.998871 41.536599,-95.999537 41.538283,-95.999966 41.53948,-96.001392 41.540586,-96.003181 41.541825,-96.005112 41.54325,-96.013876 41.545315,-96.01915 41.54514,-96.022811 41.543721,-96.02349 41.543438,-96.024096 41.542833,-96.026657 41.540366,-96.027103 41.538662,-96.027747 41.534663,-96.028381 41.532125,-96.029053 41.529996,-96.02931 41.527981,-96.029915 41.526372,-96.030554 41.524564,-96.031127 41.523004,-96.031705 41.522181,-96.034441 41.521051,-96.033854 41.519935,-96.033675 41.517119,-96.034397 41.514446,-96.03429 41.513036,-96.034353 41.512761,-96.03465 41.512215,-96.034877 41.511704,-96.035076 41.511375,-96.035326 41.510962,-96.035575 41.510549,-96.035881 41.510137,-96.036603 41.509047,-96.037882 41.507899,-96.039046 41.507463,-96.039807 41.507061,-96.040613 41.506893,-96.042895 41.506927,-96.044686 41.506893,-96.046745 41.507061,-96.048311 41.507262,-96.05037 41.507732,-96.052765 41.508436,-96.055048 41.509508,-96.057331 41.511051,-96.060867 41.514101,-96.061717 41.514688,-96.06306 41.515694,-96.063796 41.51623,-96.064267 41.516727,-96.064444 41.516924,-96.064555 41.516934,-96.066842 41.517746,-96.067491 41.518292,-96.068633 41.519113,-96.069067 41.519579,-96.069386 41.519973,-96.069639 41.520284,-96.069893 41.520581,-96.069973 41.520674,-96.070543 41.521246,-96.070636 41.52134,-96.070994 41.521624,-96.071141 41.521741,-96.071384 41.52195,-96.071487 41.522031,-96.071637 41.522149,-96.072478 41.522957,-96.072651 41.523088,-96.073019 41.523299,-96.073389 41.523529,-96.073665 41.52368,-96.074156 41.523947,-96.07457 41.524157,-96.075152 41.52442,-96.075666 41.524633,-96.076761 41.525051,-96.077283 41.525233,-96.077898 41.525432,-96.078343 41.525563,-96.078802 41.52565,-96.079359 41.525781,-96.079922 41.525902,-96.080198 41.525955,-96.081431 41.525966,-96.082253 41.525973,-96.082654 41.525974,-96.084031 41.526875,-96.088305 41.530244,-96.090118 41.531702,-96.090837 41.532644,-96.091908 41.534049,-96.09343 41.537268,-96.094437 41.539463,-96.095109 41.541089,-96.095472 41.542308,-96.095758 41.543269,-96.096586 41.545397,-96.096596 41.545475,-96.096617 41.545626,-96.096359 41.549663,-96.096314 41.550948,-96.096313 41.550979,-96.096313 41.550987,-96.096313 41.550989,-96.095985 41.55164,-96.09587 41.551868,-96.095042 41.554768,-96.094706 41.555556,-96.093654 41.558288,-96.092222 41.560886,-96.091259 41.562244,-96.088842 41.56444,-96.088135 41.565047,-96.087428 41.565654,-96.084859 41.567859,-96.082486 41.571145,-96.081613 41.573274,-96.081188 41.574296,-96.081278 41.577045,-96.08139 41.5779,-96.082285 41.580683,-96.08327 41.582627,-96.083672 41.583197,-96.083963 41.583683,-96.084568 41.584337,-96.085396 41.585092,-96.087186 41.58655,-96.088898 41.58748,-96.089066 41.587572,-96.093453 41.589098,-96.093492 41.589108,-96.094591 41.589379,-96.094638 41.589391,-96.098869 41.590439,-96.101331 41.591411,-96.105296 41.593318,-96.105829 41.593574,-96.107709 41.59525,-96.109455 41.596775,-96.112386 41.600279,-96.11364 41.601955,-96.114647 41.603681,-96.11466 41.603703,-96.115811 41.605659,-96.116795 41.608073,-96.117584 41.610441,-96.118233 41.613291,-96.118277 41.614967,-96.118241 41.615278,-96.118079 41.6167,-96.118009 41.617314,-96.117718 41.618555,-96.116755 41.620901,-96.115995 41.622024,-96.114159 41.623969,-96.113107 41.62536,-96.111339 41.627137,-96.109437 41.62883,-96.108094 41.629568,-96.106796 41.630372,-96.105498 41.631495,-96.104692 41.632065,-96.103864 41.63287,-96.102163 41.634379,-96.100709 41.635451,-96.099411 41.637413,-96.097777 41.639625,-96.095937 41.644616,-96.095534 41.645856,-96.095131 41.647767,-96.095221 41.650114,-96.095254 41.650276,-96.096116 41.654472,-96.09621 41.654669,-96.097683 41.657758,-96.100055 41.661077,-96.103994 41.663223,-96.107186 41.665595,-96.107407 41.665586,-96.108918 41.666039,-96.111156 41.667547,-96.112454 41.668486,-96.114065 41.669961,-96.11505 41.670799,-96.116527 41.67204,-96.117959 41.673314,-96.118631 41.674185,-96.119347 41.674722,-96.120152 41.675694,-96.121048 41.677002,-96.121459 41.678104,-96.120865 41.678227,-96.121309 41.679552,-96.121832 41.681001,-96.122346 41.682489,-96.122578 41.683059,-96.122604 41.68304,-96.121853 41.689205,-96.121636 41.689579,-96.119861 41.692649,-96.118731 41.693781,-96.116161 41.695886,-96.115974 41.696016,-96.114222 41.697234,-96.113461 41.697569,-96.108559 41.699279,-96.107902 41.699274,-96.107695 41.699273,-96.107487 41.699271,-96.107155 41.699268,-96.106408 41.699263,-96.106405 41.699263,-96.105478 41.699345,-96.104887 41.699379,-96.104227 41.6994,-96.103814 41.699403,-96.10328 41.699398,-96.103239 41.699397,-96.102993 41.699391,-96.102981 41.699391,-96.102677 41.699379,-96.102425 41.699365,-96.102423 41.699365,-96.10242 41.699365,-96.102417 41.699365,-96.102416 41.699364,-96.102414 41.699364,-96.102302 41.699358,-96.102164 41.699348,-96.101685 41.699313,-96.101537 41.699298,-96.101052 41.699249,-96.10062 41.699194,-96.100565 41.699187,-96.100563 41.699187,-96.10056 41.699187,-96.100551 41.699186,-96.100546 41.699185,-96.100474 41.699176,-96.100421 41.699169,-96.10038 41.699163,-96.100276 41.699147,-96.100238 41.699141,-96.100236 41.69914,-96.100229 41.699139,-96.100221 41.699138,-96.100195 41.699134,-96.099669 41.699051,-96.099663 41.69905,-96.0996 41.69904,-96.099518 41.699025,-96.0995 41.699022,-96.099396 41.699002,-96.098866 41.698898,-96.098559 41.698831,-96.098172 41.69878,-96.098165 41.698779,-96.098164 41.698778,-96.098162 41.698778,-96.098155 41.698777,-96.098141 41.698775,-96.098047 41.698761,-96.097887 41.698738,-96.097845 41.698732,-96.097595 41.698697,-96.097588 41.698696,-96.097567 41.698693,-96.097505 41.698683,-96.097431 41.698671,-96.097042 41.698609,-96.097025 41.698606,-96.097008 41.698603,-96.096387 41.698495,-96.096374 41.698493,-96.096367 41.698492,-96.096357 41.69849,-96.095984 41.698425,-96.095591 41.698344,-96.095541 41.698333,-96.095539 41.698333,-96.095538 41.698332,-96.095451 41.698313,-96.09515 41.698252,-96.094857 41.698189,-96.094707 41.698156,-96.094705 41.698156,-96.0947 41.698155,-96.094697 41.698154,-96.094688 41.698152,-96.093691 41.697934,-96.093333 41.697845,-96.093013 41.697781,-96.092888 41.697761,-96.092758 41.697737,-96.092731 41.697732,-96.092729 41.697731,-96.092723 41.69773,-96.092721 41.69773,-96.092628 41.697712,-96.092534 41.697697,-96.09251 41.697693,-96.092504 41.697692,-96.092502 41.697692,-96.092495 41.697691,-96.092445 41.697683,-96.092116 41.697633,-96.091997 41.697617,-96.091995 41.697617,-96.091994 41.697616,-96.091992 41.697616,-96.091711 41.697578,-96.0916 41.697564,-96.091569 41.69756,-96.091553 41.697558,-96.091551 41.697558,-96.09149 41.697551,-96.091183 41.697516,-96.091024 41.697503,-96.090991 41.6975,-96.090529 41.697456,-96.090072 41.697425,-96.089913 41.697415,-96.089908 41.697415,-96.089906 41.697414,-96.089904 41.697414,-96.089901 41.697414,-96.089851 41.697412,-96.089819 41.697411,-96.089817 41.697411,-96.089813 41.697411,-96.089781 41.69741,-96.089547 41.697401,-96.089271 41.69739,-96.088831 41.697382,-96.088773 41.697382,-96.088684 41.697382,-96.088682 41.697382,-96.088681 41.697383,-96.088678 41.697383,-96.088672 41.697383,-96.088661 41.697383,-96.088643 41.697383,-96.088619 41.697383,-96.088592 41.697383,-96.088545 41.697383,-96.088529 41.697383,-96.088513 41.697383,-96.088328 41.697383,-96.088247 41.697385,-96.087496 41.697409,-96.087491 41.697409,-96.087483 41.697409,-96.087139 41.69742,-96.086596 41.697467,-96.086576 41.697469,-96.086556 41.697471,-96.086317 41.697492,-96.086307 41.697493,-96.086301 41.697493,-96.086269 41.697496,-96.086123 41.697512,-96.086118 41.697513,-96.085643 41.697565,-96.085628 41.697567,-96.085625 41.697567,-96.085358 41.697596,-96.08486 41.697674,-96.084816 41.697681,-96.08464 41.697709,-96.084391 41.697755,-96.084083 41.697812,-96.084078 41.697813,-96.084076 41.697813,-96.083822 41.69786,-96.083719 41.697884,-96.083717 41.697885,-96.082618 41.698143,-96.082614 41.698144,-96.082612 41.698144,-96.082608 41.698145,-96.082353 41.698205,-96.081315 41.698513,-96.081049 41.698612,-96.081047 41.698613,-96.081046 41.698614,-96.081043 41.698615,-96.081037 41.698617,-96.079875 41.69905,-96.079764 41.699095,-96.079553 41.699185,-96.079257 41.699312,-96.079053 41.699398,-96.078707 41.699544,-96.078302 41.699727,-96.078207 41.699774,-96.077712 41.700022,-96.077331 41.700232,-96.07695 41.700457,-96.076598 41.70068,-96.076248 41.700918,-96.075909 41.701165,-96.075582 41.701421,-96.075267 41.701686,-96.074964 41.701958,-96.074675 41.702238,-96.074398 41.702526,-96.074135 41.70282,-96.073886 41.703122,-96.073651 41.703429,-96.073431 41.703743,-96.073225 41.704062,-96.073128 41.704472,-96.073075 41.704731,-96.072986 41.705251,-96.072922 41.705773,-96.072883 41.706296,-96.072876 41.706517,-96.072867 41.70682,-96.072877 41.707344,-96.0729 41.707736,-96.072936 41.708129,-96.073006 41.70865,-96.073034 41.708817,-96.07305 41.70891,-96.0731 41.709169,-96.073219 41.709686,-96.073287 41.709943,-96.073361 41.710199,-96.073441 41.710454,-96.073527 41.710708,-96.073717 41.711212,-96.07393 41.711711,-96.074046 41.711959,-96.074293 41.712449,-96.074568 41.712938,-96.074707 41.713171,-96.075011 41.713643,-96.075171 41.713876,-96.075508 41.714335,-96.075865 41.714785,-96.075922 41.714853,-96.076052 41.715007,-96.07644 41.715443,-96.076642 41.715657,-96.077061 41.716077,-96.077498 41.716485,-96.077955 41.716882,-96.07819 41.717076,-96.078674 41.717455,-96.078922 41.717639,-96.079432 41.717998,-96.079693 41.718173,-96.079958 41.718344,-96.080226 41.718511,-96.080776 41.718836,-96.081313 41.719171,-96.081849 41.719495,-96.081919 41.719536,-96.081989 41.719577,-96.082135 41.719662,-96.082408 41.719821,-96.082767 41.720023,-96.082967 41.720135,-96.083533 41.720441,-96.084219 41.720798,-96.084564 41.720969,-96.084584 41.720979,-96.084594 41.720984,-96.0846 41.720987,-96.084603 41.720988,-96.084609 41.720991,-96.084685 41.721029,-96.085272 41.721313,-96.085543 41.721439,-96.085653 41.72149,-96.085865 41.721589,-96.08647 41.72186,-96.087287 41.722207,-96.087691 41.722373,-96.088303 41.722615,-96.088656 41.722748,-96.089023 41.722887,-96.089435 41.723036,-96.089524 41.723068,-96.08954 41.723074,-96.089551 41.723078,-96.089554 41.723079,-96.09018 41.723295,-96.090821 41.723508,-96.091481 41.723717,-96.091947 41.723857,-96.091967 41.723863,-96.091993 41.723871,-96.092779 41.724098,-96.093113 41.724186,-96.093205 41.724211,-96.093579 41.72431,-96.093836 41.72438,-96.09463 41.724565,-96.09468 41.724577,-96.09472 41.724586,-96.094814 41.724608,-96.094909 41.72463,-96.094986 41.724648,-96.095062 41.724666,-96.095215 41.724707,-96.095667 41.724826,-96.096118 41.72495,-96.096564 41.725083,-96.097007 41.725219,-96.097711 41.725451,-96.097972 41.725541,-96.099057 41.725935,-96.099441 41.726086,-96.099818 41.726248,-96.100187 41.726419,-96.100547 41.726601,-96.100899 41.72679,-96.101241 41.72699,-96.101576 41.727199,-96.101899 41.727415,-96.101992 41.727482,-96.102212 41.727641,-96.102515 41.727875,-96.102807 41.728116,-96.103087 41.728365,-96.103356 41.728621,-96.103402 41.728668,-96.103407 41.728673,-96.103459 41.728726,-96.103511 41.72878,-96.103512 41.728781,-96.103514 41.728783,-96.103516 41.728785,-96.103519 41.728788,-96.10352 41.72879,-96.103522 41.728792,-96.103562 41.728837,-96.103614 41.728894,-96.103856 41.729154,-96.104088 41.72943,-96.104306 41.729711,-96.104511 41.729998,-96.104702 41.730291,-96.10488 41.730588,-96.105044 41.73089,-96.105194 41.731195,-96.105329 41.731505,-96.10545 41.731818,-96.105556 41.732133,-96.10563 41.73239,-96.105648 41.732452,-96.105688 41.732612,-96.105807 41.732963,-96.105893 41.73324,-96.105973 41.733518,-96.106113 41.734078,-96.106173 41.734358,-96.106273 41.734922,-96.106314 41.735205,-96.106375 41.735772,-96.106409 41.73634,-96.106417 41.736909,-96.106399 41.737478,-96.10638 41.737762,-96.106354 41.738046,-96.106282 41.738612,-96.106237 41.738894,-96.106185 41.739176,-96.106126 41.739457,-96.106061 41.739737,-96.105911 41.740295,-96.105826 41.740572,-96.105735 41.740848,-96.105651 41.741118,-96.105471 41.741546,-96.105469 41.741634,-96.105451 41.74168,-96.105334 41.74195,-96.105211 41.742219,-96.105082 41.742487,-96.104946 41.742753,-96.104805 41.743016,-96.104657 41.743278,-96.104494 41.743552,-96.104338 41.743805,-96.104006 41.744306,-96.103828 41.744557,-96.103443 41.745069,-96.10326 41.745297,-96.102853 41.745777,-96.102396 41.746236,-96.102173 41.746466,-96.101773 41.746857,-96.101583 41.747035,-96.101462 41.747149,-96.101242 41.747346,-96.101057 41.747506,-96.101042 41.747519,-96.101025 41.747534,-96.101012 41.747545,-96.100981 41.747572,-96.100685 41.747752,-96.100313 41.747964,-96.100268 41.747989,-96.099992 41.748134,-96.099973 41.748144,-96.099969 41.748146,-96.099968 41.748147,-96.099811 41.748229,-96.099612 41.748328,-96.099609 41.74833,-96.099606 41.748331,-96.099399 41.748434,-96.099386 41.74844,-96.099384 41.748441,-96.099381 41.748442,-96.098911 41.748657,-96.098866 41.748677,-96.098536 41.748815,-96.098007 41.749023,-96.097702 41.749105,-96.097603 41.749129,-96.097597 41.749131,-96.097595 41.749132,-96.097593 41.749132,-96.097437 41.749181,-96.097331 41.74922,-96.096187 41.749605,-96.096166 41.74961,-96.096158 41.749612,-96.096125 41.74962,-96.095962 41.749659,-96.095954 41.749661,-96.095378 41.749799,-96.09513 41.749853,-96.09507 41.749866,-96.094937 41.749888,-96.09486 41.7499,-96.094782 41.749913,-96.094653 41.749934,-96.094477 41.749977,-96.094465 41.74998,-96.09427 41.750013,-96.093731 41.750093,-96.093375 41.750161,-96.092966 41.750249,-96.092706 41.750305,-96.092375 41.750383,-96.092045 41.750466,-96.091392 41.750644,-96.091293 41.75067,-96.091193 41.750701,-96.091182 41.750704,-96.091069 41.750739,-96.090972 41.750769,-96.090874 41.750798,-96.090828 41.750814,-96.090819 41.750817,-96.090673 41.750869,-96.089803 41.75118,-96.089801 41.751181,-96.089797 41.751182,-96.089794 41.751183,-96.089772 41.751191,-96.089708 41.751214,-96.089285 41.751367,-96.089105 41.751431,-96.088807 41.751546,-96.088219 41.751786,-96.08793 41.751912,-96.087644 41.752042,-96.087361 41.752176,-96.086805 41.752456,-96.086531 41.752601,-96.086261 41.75275,-96.085996 41.752903,-96.085734 41.753059,-96.085221 41.753383,-96.084969 41.753549,-96.08448 41.753893,-96.084008 41.75425,-96.083552 41.754621,-96.083114 41.755002,-96.082903 41.755198,-96.082493 41.755597,-96.082102 41.756008,-96.08173 41.75643,-96.081379 41.756861,-96.081211 41.757081,-96.08089 41.757526,-96.080738 41.757752,-96.080591 41.757981,-96.080313 41.758442,-96.080182 41.758677,-96.080057 41.758912,-96.079823 41.75939,-96.079714 41.75963,-96.079514 41.760117,-96.079337 41.760609,-96.079257 41.760856,-96.079183 41.761105,-96.078772 41.761734,-96.078696 41.761851,-96.078637 41.761939,-96.078635 41.761945,-96.07863 41.761961,-96.078629 41.761963,-96.078497 41.762632,-96.078466 41.76306,-96.078444 41.763488,-96.078432 41.763918,-96.078431 41.764346,-96.07844 41.764775,-96.078466 41.765327,-96.07858 41.766557,-96.078629 41.766914,-96.078697 41.76734,-96.078775 41.767776,-96.078889 41.768938,-96.078929 41.769438,-96.078958 41.769711,-96.07896 41.769838,-96.078964 41.7699,-96.078996 41.770205,-96.079028 41.770593,-96.079039 41.770817,-96.07905 41.771124,-96.07905 41.771455,-96.07905 41.771676,-96.07905 41.771711,-96.07905 41.771737,-96.079039 41.772044,-96.079021 41.77235,-96.078996 41.772654,-96.078979 41.772818,-96.078973 41.772879,-96.078964 41.772962,-96.078925 41.773267,-96.078878 41.773572,-96.078825 41.773876,-96.078764 41.77418,-96.078697 41.774482,-96.078622 41.774784,-96.078452 41.775384,-96.078356 41.775682,-96.078253 41.775979,-96.078144 41.776275,-96.078028 41.776569,-96.077904 41.776861,-96.077564 41.776861,-96.077077 41.776861,-96.077065 41.776901,-96.077223 41.777165,-96.077375 41.7773,-96.077462 41.777377,-96.077546 41.777456,-96.077546 41.777822,-96.077252 41.778171,-96.077026 41.778439,-96.076824 41.778579,-96.076534 41.77908,-96.076469 41.779168,-96.0764 41.779261,-96.075932 41.779904,-96.075091 41.780896,-96.074229 41.781911,-96.073197 41.783008,-96.071871 41.784186,-96.070687 41.78517,-96.069772 41.785953,-96.068319 41.787162,-96.06723 41.788097,-96.067089 41.788272,-96.06703 41.788378,-96.066984 41.78846,-96.06697 41.788485,-96.066849 41.788478,-96.066754 41.788507,-96.066677 41.788601,-96.066409 41.788941,-96.066377 41.788981,-96.066111 41.789491,-96.065243 41.790934,-96.065049 41.791347,-96.064897 41.791673,-96.064863 41.791889,-96.064801 41.792447,-96.064765 41.793006,-96.064757 41.793286,-96.064761 41.793846,-96.064772 41.794126,-96.06479 41.794406,-96.064846 41.794964,-96.064883 41.795243,-96.064978 41.795798,-96.065035 41.796075,-96.065098 41.796351,-96.065168 41.796626,-96.065327 41.797173,-96.065416 41.797445,-96.065613 41.797985,-96.065721 41.798253,-96.065881 41.798623,-96.066138 41.799027,-96.066404 41.799428,-96.066679 41.799824,-96.066964 41.800218,-96.067257 41.800607,-96.06756 41.800993,-96.067872 41.801375,-96.068192 41.801752,-96.068522 41.802125,-96.06886 41.802494,-96.069269 41.802922,-96.069561 41.803218,-96.069924 41.803573,-96.070296 41.803924,-96.070676 41.804269,-96.071063 41.80461,-96.071459 41.804945,-96.071862 41.805275,-96.072273 41.8056,-96.072691 41.805919,-96.073117 41.806233,-96.07355 41.806541,-96.073991 41.806844,-96.074438 41.80714,-96.074892 41.807431,-96.075353 41.807716,-96.07582 41.807995,-96.076294 41.808268,-96.076774 41.808534,-96.07726 41.808794,-96.077753 41.809048,-96.078685 41.80948,-96.079463 41.80974,-96.080072 41.809987,-96.080073 41.809988,-96.080077 41.809989,-96.080161 41.810023,-96.080348 41.810065,-96.081192 41.810254,-96.082219 41.810563,-96.083322 41.810811,-96.085906 41.811237,-96.086438 41.811357,-96.08644 41.811357,-96.086442 41.811358,-96.086643 41.811403,-96.087161 41.811469,-96.087164 41.811469,-96.087169 41.81147,-96.087175 41.811471,-96.087447 41.811506,-96.087519 41.811524,-96.087523 41.811525,-96.088044 41.811659,-96.089136 41.811792,-96.090845 41.812159,-96.091911 41.812311,-96.091932 41.812314,-96.091975 41.812324,-96.092851 41.812521,-96.093006 41.812588,-96.093008 41.812589,-96.093431 41.812773,-96.093924 41.812918,-96.095273 41.813182,-96.096031 41.813493,-96.097038 41.813788,-96.097042 41.813789,-96.09748 41.813917,-96.097696 41.814042,-96.097698 41.814043,-96.097935 41.814181,-96.098639 41.814422,-96.098642 41.814423,-96.098644 41.814424,-96.098722 41.814451,-96.100885 41.815389,-96.101272 41.815603,-96.101538 41.81581,-96.102332 41.816215,-96.103566 41.817072,-96.104224 41.817663,-96.105336 41.81846,-96.106565 41.819613,-96.108714 41.822099,-96.109384 41.823135,-96.109746 41.823992,-96.11056 41.826548,-96.110831 41.827914,-96.110962 41.828827,-96.111005 41.829519,-96.11101 41.829606,-96.111017 41.829726,-96.111029 41.831022,-96.110967 41.831596,-96.110797 41.832157,-96.110155 41.833605,-96.109954 41.834144,-96.10969 41.834853,-96.109514 41.835193,-96.109378 41.835457,-96.10911 41.836043,-96.108969 41.83635,-96.108963 41.83636,-96.108272 41.837698,-96.108271 41.837699,-96.108269 41.837704,-96.108267 41.837709,-96.108265 41.837714,-96.108263 41.837719,-96.108262 41.837721,-96.108171 41.837898,-96.108106 41.838109,-96.108105 41.838112,-96.10794 41.838644,-96.107939 41.838646,-96.10778 41.83916,-96.107617 41.8404,-96.107669 41.841421,-96.107669 41.841423,-96.107669 41.841425,-96.107669 41.841427,-96.107669 41.84143,-96.107669 41.841436,-96.107681 41.841678,-96.107681 41.841682,-96.107685 41.841766,-96.107754 41.842175,-96.107757 41.842194,-96.107894 41.843014,-96.107894 41.843016,-96.107936 41.843266,-96.108287 41.844535,-96.108501 41.845126,-96.108502 41.845127,-96.108503 41.845131,-96.108504 41.845134,-96.108704 41.845687,-96.109312 41.847128,-96.110548 41.849199,-96.111252 41.850229,-96.111631 41.850688,-96.112464 41.851571,-96.11451 41.853572,-96.115498 41.854348,-96.116597 41.855103,-96.120152 41.857188,-96.122354 41.858001,-96.124984 41.858892,-96.125366 41.859095,-96.125367 41.859096,-96.125369 41.859097,-96.125688 41.859266,-96.1312 41.861426,-96.132615 41.862053,-96.13496 41.863252,-96.136525 41.864151,-96.138381 41.865683,-96.138939 41.866212,-96.139008 41.866277,-96.13948 41.8668,-96.140417 41.86784,-96.140982 41.868279,-96.141539 41.868712,-96.141908 41.868999,-96.142694 41.869851,-96.143133 41.870328,-96.144359 41.871971,-96.145026 41.873433,-96.145312 41.873935,-96.145974 41.875093,-96.14605 41.875377,-96.146554 41.877244,-96.14666 41.877636,-96.146763 41.878634,-96.146755 41.880276,-96.146801 41.881998,-96.146927 41.883019,-96.146956 41.883254,-96.147292 41.884896,-96.1473 41.884917,-96.147319 41.884967,-96.147349 41.885043,-96.147379 41.885118,-96.147399 41.885169,-96.147491 41.885405,-96.14777 41.886114,-96.147772 41.88612,-96.147864 41.886351,-96.147919 41.886492,-96.148004 41.886706,-96.148087 41.886918,-96.148144 41.88706,-96.148186 41.887166,-96.148286 41.88734,-96.148757 41.888161,-96.148783 41.888205,-96.148942 41.888417,-96.149641 41.889351,-96.149874 41.889662,-96.150986 41.890934,-96.151979 41.891956,-96.152153 41.892135,-96.152881 41.892694,-96.153049 41.892823,-96.153556 41.893211,-96.1536 41.893245,-96.15372 41.893348,-96.153776 41.893396,-96.153862 41.893469,-96.153947 41.893541,-96.154004 41.89359,-96.154918 41.894368,-96.155198 41.894607,-96.156719 41.895806,-96.157668 41.89669,-96.158198 41.897184,-96.158521 41.897535,-96.158757 41.897791,-96.158926 41.897974,-96.159333 41.898411,-96.159451 41.898536,-96.159471 41.898559,-96.159643 41.898754,-96.1597 41.898823,-96.1602 41.89944,-96.161101 41.900551,-96.161538 41.901398,-96.161756 41.90182,-96.161835 41.902131,-96.162024 41.902881,-96.162067 41.903047,-96.16209 41.904022,-96.162011 41.905194,-96.161988 41.905553,-96.161841 41.90594,-96.161737 41.906214,-96.161501 41.906839,-96.16139 41.90702,-96.161238 41.907271,-96.161193 41.907344,-96.161058 41.907564,-96.161014 41.907638,-96.160943 41.907753,-96.160767 41.908044,-96.160728 41.908098,-96.160649 41.908208,-96.160013 41.909095,-96.159098 41.910057,-96.158617 41.910377,-96.15784 41.910896,-96.156302 41.91166,-96.154301 41.912421,-96.152582 41.912894,-96.150213 41.913361,-96.149332 41.913536,-96.14726 41.913862,-96.147193 41.91388,-96.147094 41.913908,-96.146994 41.913935,-96.146928 41.913954,-96.14669 41.91402,-96.146334 41.914119,-96.145976 41.914217,-96.145739 41.914283,-96.145702 41.914293,-96.145648 41.91431,-96.145592 41.914324,-96.145556 41.914334,-96.14459 41.914603,-96.144364 41.914678,-96.142265 41.915379,-96.140946 41.916115,-96.139863 41.91672,-96.139653 41.916838,-96.139275 41.917238,-96.1383 41.918273,-96.13776 41.919054,-96.137359 41.919637,-96.137321 41.919711,-96.136848 41.920622,-96.136743 41.920826,-96.136133 41.92353,-96.136134 41.923608,-96.136155 41.924635,-96.136158 41.92477,-96.136167 41.925175,-96.13617 41.925311,-96.136246 41.925631,-96.136362 41.926114,-96.136476 41.926594,-96.136553 41.926916,-96.136571 41.926993,-96.136613 41.927167,-96.136641 41.92722,-96.13668 41.92729,-96.137299 41.92842,-96.137672 41.9291,-96.1395 41.931529,-96.139526 41.931572,-96.140192 41.932676,-96.140278 41.932819,-96.140486 41.933163,-96.140549 41.933244,-96.140654 41.933376,-96.141869 41.93492,-96.142034 41.935173,-96.142718 41.936222,-96.143493 41.937387,-96.144041 41.93868,-96.14448 41.940013,-96.14457 41.941351,-96.144583 41.941544,-96.144368 41.942478,-96.143975 41.943522,-96.14366 41.944358,-96.143603 41.944512,-96.142597 41.945908,-96.141965 41.946393,-96.14164 41.946644,-96.141243 41.946918,-96.140988 41.947093,-96.140413 41.947491,-96.140223 41.947614,-96.139964 41.947782,-96.139745 41.947923,-96.139414 41.948138,-96.139173 41.948437,-96.139011 41.94864,-96.138803 41.948899,-96.138781 41.948926,-96.1381 41.949791,-96.137873 41.95008,-96.137743 41.950247,-96.137242 41.950641,-96.137076 41.950773,-96.137027 41.950798,-96.13695 41.95084,-96.136881 41.950876,-96.136833 41.950903,-96.136699 41.950968,-96.136658 41.951003,-96.136227 41.951383,-96.136203 41.951409,-96.136067 41.95156,-96.135876 41.951746,-96.135393 41.952223,-96.135334 41.952328,-96.135205 41.952562,-96.134997 41.952938,-96.134979 41.952966,-96.134241 41.954126,-96.134233 41.954138,-96.134 41.954539,-96.133476 41.955454,-96.133318 41.955732,-96.132293 41.958382,-96.131913 41.959366,-96.131742 41.959808,-96.131578 41.960234,-96.131368 41.960741,-96.131088 41.961053,-96.131034 41.961114,-96.130772 41.961407,-96.13064 41.961603,-96.130442 41.9619,-96.13025 41.962198,-96.130123 41.962398,-96.129978 41.962642,-96.129727 41.96343,-96.129186 41.965136,-96.12908 41.965973,-96.129037 41.96667,-96.128975 41.967689,-96.128971 41.967779,-96.128969 41.967797,-96.128967 41.967852,-96.128967 41.967871,-96.128933 41.968656,-96.128925 41.968883,-96.128902 41.96965,-96.1289 41.969727,-96.129254 41.97093,-96.129505 41.971673,-96.129877 41.972199,-96.130355 41.972863,-96.1312 41.97361,-96.131702 41.974,-96.132077 41.974292,-96.132537 41.974625,-96.133203 41.974944,-96.133321 41.97499,-96.133675 41.975128,-96.133794 41.975174,-96.135151 41.975701,-96.139223 41.977285,-96.140338 41.977719,-96.140581 41.977813,-96.140685 41.977852,-96.140842 41.977913,-96.140998 41.977971,-96.141103 41.978011,-96.141229 41.978063,-96.142715 41.978491,-96.144068 41.978645,-96.144439 41.978688,-96.147035 41.97905,-96.149977 41.979414,-96.15209 41.979661,-96.153136 41.979734,-96.154355 41.979819,-96.15616 41.980082,-96.156559 41.980141,-96.157212 41.980199,-96.158049 41.980275,-96.160382 41.980133,-96.160683 41.980115,-96.161437 41.980037,-96.161999 41.979978,-96.163338 41.979839,-96.16368 41.979769,-96.164234 41.979658,-96.165492 41.979404,-96.165716 41.97936,-96.168074 41.978996,-96.169285 41.978738,-96.170542 41.978472,-96.171888 41.977837,-96.173315 41.977189,-96.174154 41.976864,-96.174827 41.97671,-96.177204 41.976308,-96.177777 41.976298,-96.179567 41.976284,-96.18105 41.976365,-96.181945 41.976412,-96.182224 41.976436,-96.183179 41.976571,-96.183537 41.976663,-96.183909 41.976719,-96.184164 41.976793,-96.187219 41.977946,-96.188746 41.979027,-96.189052 41.979264,-96.189099 41.979301,-96.18925 41.979417,-96.189413 41.979542,-96.189546 41.97965,-96.189724 41.979831,-96.189781 41.979889,-96.190049 41.98016,-96.190476 41.980593,-96.190608 41.980729,-96.190802 41.980998,-96.191029 41.981312,-96.191326 41.981724,-96.191549 41.982032,-96.192141 41.984461,-96.191971 41.985347,-96.191567 41.986061,-96.191146 41.986745,-96.19037 41.987964,-96.190245 41.98816,-96.19006 41.988454,-96.189871 41.988751,-96.189747 41.988948,-96.18963 41.989134,-96.189517 41.989315,-96.189238 41.989664,-96.189102 41.989836,-96.188786 41.990238,-96.188389 41.990757,-96.187605 41.991786,-96.186427 41.993076,-96.186156 41.993441,-96.185573 41.994232,-96.185474 41.994385,-96.185407 41.994487,-96.18521 41.994795,-96.185144 41.994898,-96.184784 41.99546,-96.184255 41.996634,-96.183801 41.99776,-96.183627 41.99904,-96.183608 41.99999,-96.184188 42.001606,-96.184318 42.001831,-96.184327 42.001853,-96.184361 42.001938,-96.184465 42.002193,-96.1845 42.002279,-96.18422 42.002543,-96.184002 42.003063,-96.184258 42.003686,-96.184378 42.003978,-96.18462 42.004578,-96.184711 42.004972,-96.185249 42.005467,-96.185919 42.005914,-96.186823 42.00633,-96.187522 42.006626,-96.18773 42.006656,-96.189336 42.00689,-96.189553 42.006987,-96.189766 42.007082,-96.190207 42.007278,-96.190425 42.007376,-96.190819 42.007552,-96.190913 42.007579,-96.192436 42.008032,-96.192944 42.008183,-96.193002 42.0082,-96.193178 42.008252,-96.193237 42.00827,-96.193313 42.008292,-96.193544 42.008361,-96.193621 42.008384,-96.193714 42.008411,-96.193993 42.008495,-96.194086 42.008523,-96.194556 42.008662,-96.194838 42.008671,-96.200816 42.009196,-96.201487 42.009343,-96.203615 42.009304,-96.204042 42.009309,-96.205032 42.009289,-96.206083 42.009267,-96.207051 42.009064,-96.208486 42.008762,-96.210057 42.008432,-96.212703 42.007533,-96.213317 42.007325,-96.214095 42.007071,-96.215225 42.006701,-96.216496 42.005302,-96.216557 42.005236,-96.217637 42.003862,-96.219867 41.999987,-96.220503 41.999115,-96.22119 41.998152,-96.22161 41.997631,-96.221812 41.997382,-96.222641 41.996451,-96.223369 41.995931,-96.223827 41.995517,-96.223895 41.995457,-96.223964 41.995424,-96.224419 41.995215,-96.224571 41.995145,-96.224812 41.995033,-96.225463 41.994734,-96.225543 41.994715,-96.225802 41.994654,-96.226094 41.994584,-96.226973 41.994378,-96.227172 41.994332,-96.227269 41.994326,-96.227335 41.994321,-96.227436 41.994316,-96.227536 41.994309,-96.227603 41.994305,-96.227706 41.994298,-96.228015 41.994278,-96.228119 41.994272,-96.228197 41.994266,-96.228349 41.994257,-96.228431 41.994266,-96.22851 41.994275,-96.228646 41.99429,-96.229055 41.994335,-96.229192 41.99435,-96.229404 41.994373,-96.229739 41.99441,-96.230037 41.994465,-96.230247 41.994504,-96.230416 41.994535,-96.230671 41.994584,-96.230925 41.994631,-96.231095 41.994663,-96.231215 41.994687,-96.231395 41.994725,-96.231575 41.994761,-96.231696 41.994786,-96.231751 41.994801,-96.23325 41.995178,-96.233878 41.995384,-96.234952 41.995736,-96.236488 41.996429,-96.238183 41.99755,-96.239748 41.998605,-96.239795 41.998641,-96.240713 41.999351,-96.241372 41.999987,-96.241482 42.00014,-96.242035 42.000911,-96.242142 42.001315,-96.242323 42.001996,-96.24238 42.002898,-96.242351 42.004106,-96.242189 42.005382,-96.242162 42.005602,-96.241972 42.006732,-96.24192 42.006963,-96.24144 42.008015,-96.240832 42.009315,-96.239748 42.010889,-96.239303 42.011603,-96.23886 42.012315,-96.238382 42.012602,-96.23818 42.012722,-96.237576 42.013086,-96.237375 42.013207,-96.237365 42.013212,-96.237338 42.013229,-96.237329 42.013235,-96.23711 42.013366,-96.236702 42.013612,-96.236452 42.013755,-96.236232 42.013883,-96.236081 42.013969,-96.23563 42.014231,-96.23548 42.014318,-96.23433 42.014983,-96.232317 42.016148,-96.23087 42.016961,-96.229713 42.017613,-96.22872 42.018171,-96.227867 42.018651,-96.22603 42.020255,-96.225173 42.021005,-96.225007 42.021187,-96.224511 42.021737,-96.224346 42.02192,-96.224198 42.022066,-96.223758 42.022505,-96.223611 42.022652,-96.223101 42.023404,-96.222823 42.023817,-96.221895 42.025844,-96.22173 42.026205,-96.221747 42.026717,-96.22183 42.028262,-96.221901 42.029558,-96.222436 42.030946,-96.223364 42.032554,-96.223822 42.033346,-96.224266 42.033798,-96.224958 42.034505,-96.225656 42.035217,-96.227296 42.036315,-96.227561 42.036493,-96.22816 42.036798,-96.228258 42.036848,-96.228554 42.036999,-96.228653 42.03705,-96.228933 42.037193,-96.22907 42.037288,-96.230143 42.03803,-96.230267 42.038097,-96.230691 42.038328,-96.230973 42.038489,-96.231398 42.038732,-96.231821 42.038974,-96.232104 42.039137,-96.232356 42.039242,-96.232728 42.039398,-96.233112 42.039559,-96.233365 42.039665,-96.233447 42.039688,-96.233571 42.039723,-96.233693 42.039757,-96.233776 42.039781,-96.234027 42.039852,-96.234405 42.039959,-96.234782 42.040065,-96.235034 42.040137,-96.234747 42.040072,-96.23463 42.04004,-96.234021 42.039874,-96.233836 42.039834,-96.233764 42.039823,-96.233504 42.03978,-96.233418 42.039756,-96.233369 42.039743,-96.233151 42.039668,-96.233027 42.039618,-96.232911 42.039571,-96.232852 42.039548,-96.232568 42.03942,-96.232454 42.03937,-96.232256 42.039485,-96.232113 42.039457,-96.23194 42.039404,-96.231699 42.039296,-96.231577 42.039192,-96.231406 42.03914,-96.230775 42.039013,-96.230329 42.038923,-96.230156 42.038871,-96.229993 42.038801,-96.229844 42.038717,-96.229438 42.038429,-96.229005 42.038162,-96.228576 42.037893,-96.228183 42.037596,-96.228001 42.03743,-96.227877 42.037342,-96.227868 42.037328,-96.227871 42.037319,-96.227887 42.037311,-96.22785 42.037291,-96.227808 42.037278,-96.227761 42.037273,-96.227612 42.037273,-96.22742 42.037249,-96.227324 42.037249,-96.227229 42.037264,-96.227185 42.037278,-96.227064 42.037339,-96.227018 42.037349,-96.226977 42.037353,-96.228261 42.038302,-96.229426 42.038866,-96.230253 42.039433,-96.231294 42.039815,-96.233812 42.040553,-96.233954 42.040594,-96.234356 42.040712,-96.234969 42.040778,-96.238392 42.041088,-96.238822 42.041123,-96.24287 42.041455,-96.243104 42.041474,-96.246832 42.041616,-96.248411 42.041207,-96.248764 42.041116,-96.249754 42.040859,-96.250299 42.040718,-96.250662 42.040697,-96.251707 42.040446,-96.252696 42.040039,-96.253019 42.039907,-96.253635 42.039631,-96.254057 42.03952,-96.254489 42.039408,-96.25522 42.038945,-96.25559 42.038712,-96.255711 42.038625,-96.255719 42.038618,-96.256082 42.038305,-96.256203 42.038201,-96.256575 42.03822,-96.257068 42.038247,-96.257694 42.038263,-96.258067 42.038274,-96.258356 42.038338,-96.259223 42.038532,-96.259512 42.038597,-96.259915 42.038687,-96.260358 42.038786,-96.261116 42.038989,-96.261516 42.039097,-96.261663 42.039136,-96.262106 42.039255,-96.262254 42.039295,-96.263448 42.039616,-96.264247 42.039891,-96.265332 42.040266,-96.267195 42.04119,-96.268063 42.041705,-96.269684 42.042893,-96.269785 42.042967,-96.271146 42.044373,-96.271576 42.044904,-96.271969 42.04539,-96.272545 42.046202,-96.272767 42.046571,-96.27312 42.047158,-96.273139 42.04728,-96.273798 42.048283,-96.274393 42.049244,-96.274856 42.050118,-96.274908 42.050215,-96.276213 42.053215,-96.277202 42.056025,-96.277732 42.05753,-96.277907 42.058025,-96.278043 42.058412,-96.278646 42.06117,-96.278838 42.062049,-96.279211 42.064155,-96.279379 42.065495,-96.279536 42.068554,-96.27948 42.070804,-96.279479 42.07088,-96.279201 42.073544,-96.279086 42.07401,-96.278494 42.076404,-96.278484 42.076448,-96.277732 42.079097,-96.276753 42.081696,-96.275982 42.083346,-96.275798 42.083743,-96.274608 42.085386,-96.274559 42.085454,-96.274296 42.085779,-96.273688 42.086534,-96.273341 42.086941,-96.273333 42.086952,-96.273117 42.08739,-96.273045 42.087657,-96.272962 42.087777,-96.272246 42.088825,-96.272168 42.08894,-96.271998 42.089167,-96.271656 42.089621,-96.271492 42.089837,-96.270798 42.090761,-96.270652 42.090998,-96.270355 42.091483,-96.270181 42.091765,-96.26977 42.092437,-96.269677 42.092622,-96.26953 42.09292,-96.269129 42.093728,-96.26838 42.09524,-96.268039 42.096203,-96.267739 42.097055,-96.267439 42.098407,-96.267303 42.099027,-96.266898 42.102178,-96.266893 42.102522,-96.266875 42.103798,-96.26688 42.103907,-96.266972 42.105846,-96.266988 42.106172,-96.267313 42.10889,-96.267486 42.10978,-96.268126 42.111519,-96.26815 42.111585,-96.268618 42.112622,-96.268921 42.113291,-96.269156 42.113695,-96.269459 42.114216,-96.269909 42.114879,-96.270173 42.115267,-96.270376 42.115567,-96.270877 42.116304,-96.270995 42.116461,-96.271213 42.116752,-96.271467 42.117089,-96.272005 42.117695,-96.273001 42.118818,-96.273411 42.11928,-96.27458 42.120334,-96.274584 42.120337,-96.275575 42.121071,-96.276217 42.121547,-96.2764 42.121682,-96.277927 42.122623,-96.278265 42.122795,-96.278978 42.123159,-96.279348 42.123348,-96.2802 42.123783,-96.28047 42.123894,-96.280855 42.124054,-96.281242 42.124214,-96.282218 42.124619,-96.282398 42.124713,-96.28277 42.124909,-96.283002 42.125031,-96.283064 42.125044,-96.283604 42.125164,-96.28401 42.125296,-96.284321 42.125397,-96.285004 42.125618,-96.285952 42.125926,-96.286647 42.126,-96.287106 42.125992,-96.287564 42.125986,-96.287824 42.126007,-96.28791 42.126013,-96.288044 42.126024,-96.288165 42.126054,-96.28825 42.126075,-96.288959 42.126251,-96.289301 42.126292,-96.289532 42.126321,-96.290322 42.126497,-96.290998 42.126485,-96.292148 42.126598,-96.292501 42.126617,-96.293576 42.126675,-96.293861 42.12669,-96.294608 42.12673,-96.294714 42.126759,-96.29499 42.126835,-96.295331 42.126928,-96.295437 42.126988,-96.296035 42.127324,-96.296774 42.127387,-96.297249 42.127429,-96.29807 42.127499,-96.298245 42.127515,-96.299307 42.127552,-96.300154 42.127696,-96.300515 42.127806,-96.300959 42.127941,-96.301299 42.128065,-96.301304 42.128066,-96.30132 42.128072,-96.301326 42.128074,-96.301567 42.128162,-96.302292 42.128426,-96.302534 42.128514,-96.303309 42.128796,-96.303435 42.128842,-96.303989 42.12897,-96.305012 42.129295,-96.305658 42.12956,-96.305731 42.12959,-96.306384 42.129952,-96.308103 42.131058,-96.308681 42.131467,-96.309119 42.131778,-96.309758 42.132101,-96.310355 42.132572,-96.310695 42.132963,-96.311187 42.133308,-96.311612 42.133699,-96.311857 42.134009,-96.312624 42.134655,-96.312909 42.13503,-96.313062 42.135427,-96.314046 42.136449,-96.314488 42.137157,-96.31482 42.137688,-96.315173 42.13851,-96.315585 42.139672,-96.315728 42.140075,-96.315783 42.140282,-96.315925 42.140816,-96.316157 42.141211,-96.316384 42.141947,-96.316465 42.14207,-96.316821 42.142606,-96.316896 42.142784,-96.317121 42.14332,-96.317196 42.143499,-96.317252 42.143633,-96.317282 42.143702,-96.317493 42.143997,-96.317509 42.144019,-96.317597 42.1441,-96.317746 42.144238,-96.317812 42.1443,-96.318058 42.144758,-96.318155 42.144938,-96.318233 42.145084,-96.318333 42.145268,-96.318525 42.145483,-96.318574 42.145537,-96.318648 42.145595,-96.318797 42.145712,-96.318874 42.145772,-96.319144 42.146161,-96.319253 42.146318,-96.319406 42.146539,-96.31956 42.146761,-96.319991 42.147084,-96.320207 42.147246,-96.32074 42.147928,-96.320972 42.148114,-96.321069 42.148192,-96.321596 42.148507,-96.322349 42.149299,-96.322668 42.149519,-96.323148 42.149758,-96.323688 42.150259,-96.323993 42.150542,-96.324672 42.150855,-96.325302 42.151309,-96.325506 42.151456,-96.326415 42.151992,-96.326855 42.152324,-96.32731 42.152447,-96.32806 42.15265,-96.328388 42.152738,-96.328763 42.15284,-96.329333 42.153109,-96.329641 42.153255,-96.329818 42.153339,-96.330381 42.153444,-96.331017 42.153621,-96.331286 42.153697,-96.331773 42.153931,-96.332213 42.154279,-96.333303 42.154567,-96.334899 42.155311,-96.334918 42.155314,-96.33546 42.155419,-96.3363 42.155674,-96.336816 42.155997,-96.337202 42.156452,-96.338025 42.156796,-96.338755 42.157101,-96.339062 42.157331,-96.339305 42.157599,-96.340228 42.158057,-96.340709 42.158505,-96.341571 42.15908,-96.341904 42.159432,-96.342146 42.159938,-96.342666 42.1602,-96.342997 42.160438,-96.343013 42.16045,-96.343614 42.161012,-96.343901 42.161504,-96.344248 42.161754,-96.344431 42.161937,-96.344537 42.162043,-96.344905 42.162376,-96.345177 42.162874,-96.345666 42.163318,-96.346019 42.163789,-96.346203 42.164195,-96.346275 42.164268,-96.346688 42.164686,-96.347084 42.165302,-96.347215 42.165758,-96.347863 42.16664,-96.348015 42.167164,-96.348303 42.167496,-96.348602 42.168027,-96.348712 42.168486,-96.349168 42.169317,-96.349243 42.169815,-96.349688 42.170702,-96.349717 42.171526,-96.350043 42.172267,-96.350063 42.172312,-96.350145 42.17263,-96.350167 42.173205,-96.350101 42.173671,-96.350422 42.175227,-96.35039 42.175469,-96.350312 42.176076,-96.350319 42.176197,-96.350334 42.176442,-96.350343 42.176605,-96.350361 42.176903,-96.350343 42.177095,-96.350329 42.177259,-96.350321 42.177338,-96.350301 42.177575,-96.350294 42.177654,-96.350268 42.177943,-96.350242 42.178029,-96.349922 42.179102,-96.349911 42.179123,-96.349746 42.179466,-96.349676 42.179609,-96.349537 42.179899,-96.349521 42.180055,-96.349506 42.180214,-96.349469 42.180579,-96.349277 42.180908,-96.349206 42.181176,-96.349156 42.181366,-96.348742 42.18221,-96.348626 42.182633,-96.348261 42.183099,-96.348095 42.183398,-96.347936 42.183942,-96.347911 42.18403,-96.34786 42.184496,-96.347598 42.184881,-96.347493 42.185172,-96.347278 42.185774,-96.347251 42.186063,-96.347245 42.186132,-96.347279 42.186371,-96.347306 42.18656,-96.347307 42.186562,-96.347169 42.187119,-96.347123 42.187306,-96.346929 42.188089,-96.346914 42.18815,-96.346944 42.188545,-96.347083 42.189035,-96.346909 42.189996,-96.346927 42.190472,-96.346934 42.190643,-96.347043 42.191066,-96.347149 42.191235,-96.347206 42.191328,-96.347287 42.191457,-96.347278 42.191774,-96.347265 42.192324,-96.347374 42.193075,-96.347543 42.19347,-96.347565 42.193519,-96.347929 42.193899,-96.348097 42.194074,-96.348151 42.194195,-96.34818 42.194258,-96.348347 42.194821,-96.348374 42.19529,-96.348397 42.195665,-96.348406 42.195827,-96.348426 42.195925,-96.348474 42.196146,-96.348764 42.196627,-96.348829 42.196735,-96.348933 42.196824,-96.349057 42.196931,-96.349208 42.19706,-96.349288 42.197344,-96.349334 42.197503,-96.349411 42.197774,-96.349428 42.197834,-96.349567 42.198141,-96.349829 42.198484,-96.349841 42.198493,-96.350062 42.19867,-96.350191 42.198773,-96.350217 42.198809,-96.350583 42.199322,-96.350623 42.199377,-96.350693 42.199501,-96.35076 42.199619,-96.350961 42.199973,-96.351028 42.200092,-96.351109 42.200235,-96.351203 42.200401,-96.351427 42.200606,-96.351549 42.200718,-96.351656 42.200816,-96.351659 42.200818,-96.351935 42.201153,-96.352028 42.201266,-96.352259 42.201489,-96.352953 42.202161,-96.353119 42.202322,-96.353177 42.202393,-96.353394 42.20266,-96.35396 42.203053,-96.354025 42.203118,-96.354505 42.203603,-96.355075 42.20399,-96.355621 42.204494,-96.355919 42.204944,-96.356354 42.20523,-96.356506 42.205363,-96.357041 42.205832,-96.357249 42.206191,-96.357331 42.206333,-96.357639 42.206662,-96.357938 42.206982,-96.358182 42.207334,-96.358301 42.207608,-96.358723 42.208142,-96.358741 42.208165,-96.359029 42.208676,-96.359078 42.208762,-96.359155 42.209029,-96.359159 42.209043,-96.359551 42.209579,-96.359678 42.210016,-96.359714 42.21014,-96.359776 42.210249,-96.359837 42.210357,-96.35987 42.210553,-96.359813 42.21074,-96.35967 42.211213,-96.359345 42.21182,-96.35916 42.212168,-96.358888 42.212682,-96.358146 42.214086,-96.358007 42.21416,-96.357495 42.214436,-96.357469 42.214456,-96.357394 42.214519,-96.357369 42.21454,-96.35735 42.214551,-96.357296 42.214586,-96.357278 42.214598,-96.357264 42.214603,-96.357226 42.214621,-96.357213 42.214627,-96.357213 42.21464,-96.357213 42.21468,-96.357213 42.214694,-96.357171 42.214726,-96.357046 42.214825,-96.357005 42.214859,-96.356963 42.214872,-96.356839 42.214912,-96.356798 42.214926,-96.35675 42.21494,-96.356607 42.214986,-96.35656 42.215002,-96.356591 42.215182,-96.35558 42.215466,-96.35419 42.215714,-96.35326 42.215806,-96.352934 42.215837,-96.352606 42.215868,-96.352324 42.215895,-96.351697 42.215967,-96.351413 42.216014,-96.35062 42.216117,-96.350476 42.216153,-96.350338 42.216187,-96.3502 42.216221,-96.350155 42.216232,-96.350079 42.216251,-96.349143 42.216481,-96.345033 42.217495,-96.337025 42.217463,-96.336998 42.217466,-96.336767 42.217632,-96.336744 42.217674,-96.336598 42.217754,-96.33614 42.218084,-96.335766 42.218354,-96.335528 42.218517,-96.335355 42.21864,-96.335197 42.218737,-96.335043 42.218764,-96.334869 42.218862,-96.334402 42.21927,-96.334361 42.219339,-96.334307 42.219587,-96.334179 42.219872,-96.334052 42.21995,-96.333871 42.220102,-96.333118 42.220781,-96.332648 42.221101,-96.332511 42.221215,-96.332339 42.221318,-96.331149 42.222527,-96.330151 42.223361,-96.330041 42.223485,-96.329456 42.224256,-96.329269 42.224503,-96.329095 42.224733,-96.329003 42.224852,-96.32891 42.224959,-96.328802 42.224926,-96.328521 42.225378,-96.328308 42.225722,-96.328182 42.225795,-96.327368 42.226712,-96.327329 42.22676,-96.327251 42.226843,-96.327051 42.227082,-96.327013 42.227154,-96.326562 42.227862,-96.326256 42.228357,-96.326164 42.228448,-96.325949 42.228661,-96.324924 42.229057,-96.324792 42.229107,-96.32474 42.229128,-96.324546 42.229272,-96.323746 42.22987,-96.323723 42.229887,-96.323531 42.230246,-96.32344 42.230389,-96.323432 42.230436,-96.323368 42.230666,-96.323248 42.230666,-96.322904 42.231296,-96.322902 42.2313,-96.322827 42.231461,-96.32289 42.231655,-96.323054 42.232132,-96.322977 42.232245,-96.322793 42.232522,-96.322761 42.232564,-96.322794 42.23289,-96.322868 42.233637,-96.323032 42.23379,-96.323694 42.234409,-96.323926 42.23495,-96.324572 42.235342,-96.326423 42.236556,-96.326753 42.236949,-96.327016 42.237228,-96.3271 42.237318,-96.327387 42.237628,-96.327893 42.23816,-96.329243 42.23926,-96.329529 42.239461,-96.329545 42.239443,-96.32987 42.239748,-96.330006 42.240225,-96.329763 42.240625,-96.329693 42.241011,-96.329189 42.24158,-96.328958 42.241885,-96.328729 42.242996,-96.32861 42.243456,-96.328364 42.244453,-96.328093 42.245736,-96.328009 42.247082,-96.327982 42.248537,-96.327928 42.248818,-96.327817 42.249405,-96.327706 42.249992,-96.328897 42.254723,-96.331312 42.259408,-96.331991 42.26019,-96.332012 42.260214,-96.335964 42.264777,-96.33829 42.266615,-96.338336 42.266651,-96.339045 42.267212,-96.339801 42.26781,-96.339851 42.26785,-96.341387 42.269087,-96.342912 42.269787,-96.342977 42.269818,-96.342981 42.26982,-96.34905 42.272609,-96.349642 42.27292,-96.349708 42.272955,-96.349723 42.272963,-96.352923 42.274652,-96.355694 42.276115,-96.356023 42.276304,-96.356056 42.276326,-96.35626 42.276448,-96.356366 42.27648,-96.356395 42.276494,-96.356501 42.276562,-96.35655 42.276594,-96.360502 42.27961,-96.360732 42.279786,-96.361015 42.280089,-96.363009 42.282218,-96.365751 42.285814,-96.367453 42.28941,-96.367977 42.290681,-96.368005 42.290779,-96.368026 42.29085,-96.368467 42.292619,-96.36849 42.292822,-96.368514 42.293044,-96.368517 42.2931,-96.368721 42.296599,-96.368723 42.29662,-96.368585 42.301104,-96.368507 42.303622,-96.368675 42.304748,-96.369212 42.308344,-96.369402 42.308983,-96.369969 42.310878,-96.37179 42.314172,-96.373563 42.316189,-96.375307 42.318339,-96.379484 42.322197,-96.384169 42.325874,-96.385717 42.326511,-96.387274 42.327152,-96.390197 42.328354,-96.391863 42.329041,-96.396269 42.330857,-96.40255 42.333955,-96.402957 42.334156,-96.405124 42.335554,-96.40576 42.335964,-96.407979 42.337396,-96.407998 42.337408,-96.411867 42.341335,-96.411956 42.341425,-96.413895 42.343393,-96.415214 42.345936,-96.415251 42.346007,-96.415631 42.34674,-96.415738 42.346947,-96.416194 42.347826,-96.416344 42.348115,-96.417786 42.351449,-96.418168 42.354678,-96.417918 42.3587,-96.417093 42.361443,-96.416858 42.361784,-96.415073 42.364369,-96.413994 42.365932,-96.413887 42.366114,-96.41377 42.366312,-96.411451 42.370249,-96.40959 42.373967,-96.409396 42.374198,-96.40873 42.374993,-96.408436 42.376092,-96.408428 42.37779,-96.408519 42.378551,-96.408532 42.379078,-96.408687 42.379757,-96.409153 42.381491,-96.409539 42.382428,-96.40981 42.383084,-96.410328 42.384258,-96.410663 42.385018,-96.411124 42.38606,-96.411277 42.386305,-96.411752 42.387068,-96.412504 42.388521,-96.413257 42.389927,-96.414074 42.391193,-96.414606 42.392247,-96.41498 42.393442,-96.415348 42.395784,-96.415393 42.396276,-96.415483 42.397294,-96.415554 42.398899,-96.415509 42.400294,-96.415186 42.404203,-96.413609 42.407894,-96.411194 42.411485,-96.411262 42.411563,-96.410307 42.412965,-96.407383 42.415945,-96.403238 42.419181,-96.398808 42.422494,-96.397905 42.4233,-96.396967 42.424138,-96.396814 42.424274,-96.387608 42.432494,-96.384307 42.437294,-96.380705 42.446393,-96.380662 42.446749,-96.38066 42.446768,-96.380656 42.4468,-96.380648 42.446871,-96.380648 42.446873,-96.380629 42.447035,-96.380398 42.448999,-96.380105 42.451494,-96.380574 42.455994,-96.380905 42.459195,-96.381305 42.461695,-96.385407 42.473094,-96.385979 42.474441,-96.386003 42.474496,-96.386013 42.474506,-96.387298 42.475722,-96.392491 42.481243,-96.392648 42.48141,-96.395983 42.484241,-96.396124 42.484361,-96.401962 42.48644,-96.407217 42.487018,-96.407789 42.487168,-96.408361 42.487319,-96.409408 42.487595,-96.411641 42.487792,-96.412225 42.487844,-96.412808 42.487895,-96.41303 42.487916,-96.413217 42.487935,-96.413435 42.487953,-96.413583 42.487966,-96.413722 42.487979,-96.416773 42.488279,-96.417994 42.4884,-96.421678 42.488763,-96.422957 42.488888,-96.423892 42.48898,-96.426592 42.489057,-96.427908 42.489095,-96.428504 42.489126,-96.433808 42.489395,-96.434912 42.489429,-96.440308 42.489595,-96.441385 42.489811,-96.442462 42.490026,-96.443972 42.490328,-96.444908 42.490515,-96.445483 42.49063,-96.445508 42.49063,-96.44555 42.49064,-96.445589 42.490669,-96.445629 42.490691,-96.445819 42.490678,-96.446346 42.490625,-96.447675 42.49047,-96.447918 42.490442,-96.44794 42.490439,-96.447988 42.490439,-96.448128 42.490463,-96.448501 42.490545,-96.448963 42.490661,-96.449282 42.490752,-96.44955 42.490843,-96.449707 42.490896,-96.449728 42.490903,-96.449907 42.490953,-96.449952 42.490962,-96.449999 42.490952,-96.450046 42.490933,-96.450092 42.490925,-96.450182 42.490944,-96.45045 42.491038,-96.450729 42.491108,-96.451141 42.491212,-96.451411 42.491294,-96.452335 42.491617,-96.452595 42.491696,-96.452654 42.491714,-96.452695 42.491726,-96.453288 42.491887,-96.454482 42.492197,-96.454708 42.492263,-96.454969 42.492361,-96.455424 42.492498,-96.455609 42.492542,-96.45575 42.492564,-96.455941 42.492577,-96.456185 42.492576,-96.456291 42.492569,-96.45635 42.492565,-96.456479 42.492556,-96.456735 42.492529,-96.456852 42.492517,-96.456914 42.492511,-96.457204 42.492471,-96.457441 42.492428,-96.45767 42.492371,-96.4578 42.492326,-96.457964 42.492249,-96.458245 42.492101,-96.458371 42.492047,-96.458593 42.491975,-96.459421 42.49176,-96.460149 42.491556,-96.460461 42.491456,-96.460764 42.491341,-96.461481 42.491034,-96.461853 42.490862,-96.462025 42.490796,-96.462251 42.49073,-96.462531 42.490667,-96.462861 42.490604,-96.463243 42.490548,-96.463337 42.490528,-96.463472 42.490474,-96.463512 42.490464,-96.463535 42.490488,-96.463558 42.490524,-96.463629 42.490577,-96.463669 42.490595,-96.463714 42.490604,-96.463765 42.490606,-96.463814 42.490602,-96.463861 42.490593,-96.46418 42.490496,-96.464226 42.490488,-96.464322 42.490485,-96.464466 42.490491,-96.464951 42.49054,-96.465389 42.490572,-96.46558 42.490594,-96.465721 42.490618,-96.465904 42.490665,-96.466352 42.490809,-96.466719 42.490905,-96.467322 42.491046,-96.467698 42.491121,-96.468269 42.491213,-96.468796 42.491283,-96.468984 42.491317,-96.46926 42.49139,-96.469394 42.491437,-96.469474 42.491411,-96.469573 42.491406,-96.469619 42.491396,-96.469663 42.491377,-96.469696 42.491351,-96.469707 42.491318,-96.469708 42.49128,-96.469767 42.491067,-96.469823 42.49093,-96.469854 42.490901,-96.469893 42.49088,-96.469947 42.490886,-96.469969 42.490864,-96.469999 42.490573,-96.469991 42.490501,-96.469939 42.490323,-96.469941 42.490253,-96.469966 42.490184,-96.470047 42.490051,-96.47033 42.489712,-96.470389 42.489655,-96.470458 42.489606,-96.470576 42.489544,-96.470749 42.489473,-96.470926 42.489413,-96.471158 42.489357,-96.471299 42.489331,-96.471348 42.489334,-96.471397 42.489332,-96.471445 42.489323,-96.471505 42.489268,-96.471599 42.489262,-96.471748 42.489265,-96.472622 42.48922,-96.472962 42.48922,-96.473254 42.489234,-96.473496 42.489253,-96.473689 42.48928,-96.473827 42.489312,-96.473914 42.48935,-96.474038 42.489411,-96.474078 42.489423,-96.474114 42.489407,-96.474149 42.489376,-96.474194 42.489369,-96.474294 42.489371,-96.474436 42.489395,-96.475031 42.489533,-96.475413 42.489621,-96.475591 42.489677,-96.475852 42.489775,-96.476104 42.489887,-96.476262 42.489969,-96.476369 42.490043,-96.476461 42.490128,-96.476542 42.490218,-96.476609 42.490355,-96.476632 42.490386,-96.476663 42.490413,-96.476778 42.490482,-96.476812 42.490507,-96.47697 42.49069,-96.47711 42.490881,-96.477186 42.491011,-96.477185 42.491046,-96.477151 42.491155,-96.477121 42.491226,-96.477122 42.491261,-96.477159 42.49135,-96.477164 42.491362,-96.477313 42.49163,-96.477447 42.491901,-96.477614 42.492278,-96.477711 42.492556,-96.477775 42.492805,-96.47782 42.493054,-96.477814 42.493125,-96.477785 42.493233,-96.477785 42.49334,-96.477901 42.494346,-96.477914 42.494597,-96.477908 42.494668,-96.477873 42.494774,-96.477827 42.494877,-96.477782 42.494942,-96.477753 42.494971,-96.477574 42.495096,-96.477545 42.495124,-96.477522 42.495154,-96.477498 42.495213,-96.477489 42.495246,-96.477444 42.49547,-96.477445 42.495503,-96.477445 42.495511,-96.477456 42.495545,-96.47753 42.495659,-96.477541 42.495676,-96.477574 42.495782,-96.477577 42.495801,-96.477584 42.495854,-96.477577 42.495924,-96.477526 42.496084,-96.477498 42.496171,-96.477417 42.496468,-96.477297 42.496912,-96.477207 42.497192,-96.476975 42.497742,-96.476913 42.497879,-96.476744 42.498138,-96.476719 42.498183,-96.47653 42.498542,-96.476467 42.498638,-96.476439 42.498667,-96.476361 42.498711,-96.47632 42.498734,-96.476289 42.498761,-96.476252 42.498825,-96.476168 42.499072,-96.476094 42.499205,-96.475916 42.499467,-96.475634 42.499885,-96.475572 42.499978,-96.475523 42.499992,-96.475301 42.500266,-96.475287 42.500287,-96.474745 42.501095,-96.474712 42.501159,-96.474636 42.501305,-96.474367 42.501825,-96.47424 42.502261,-96.474168 42.502511,-96.47414 42.503179,-96.474138 42.50323,-96.474136 42.503288,-96.473334 42.503536,-96.476048 42.507783,-96.477468 42.509613,-96.478203 42.51021,-96.478784 42.510659,-96.478945 42.510783,-96.479023 42.510843,-96.479088 42.510834,-96.479231 42.510814,-96.479344 42.510799,-96.479517 42.510775,-96.479695 42.510751,-96.479917 42.510721,-96.480145 42.51069,-96.480494 42.510643,-96.480873 42.510591,-96.48263 42.510351,-96.483504 42.51028,-96.484213 42.510306,-96.484379 42.510312,-96.485269 42.510483,-96.4866 42.510739,-96.487669 42.511082,-96.488082 42.511251,-96.488163 42.511284,-96.48875 42.511621,-96.488885 42.511699,-96.488894 42.511704,-96.488971 42.511761,-96.489193 42.511925,-96.489383 42.512065,-96.489466 42.512126,-96.489741 42.512329,-96.490241 42.512697,-96.490306 42.512745,-96.490502 42.512889,-96.490752 42.513073,-96.491431 42.513465,-96.492444 42.514183,-96.493068 42.514821,-96.49357 42.515626,-96.493691 42.516309,-96.493714 42.516629,-96.493722 42.516742,-96.493617 42.517325,-96.493449 42.518259,-96.493188 42.51864,-96.493085 42.518791,-96.492869 42.51906,-96.492687 42.519191,-96.492085 42.519625,-96.492044 42.519649,-96.491557 42.519936,-96.49138 42.520018,-96.491216 42.520094,-96.491119 42.520139,-96.491042 42.520175,-96.490777 42.520239,-96.490646 42.52027,-96.490598 42.520404,-96.487687 42.521436,-96.484691 42.522499,-96.479949 42.524246,-96.479007 42.526394,-96.479041 42.526515,-96.479813 42.529601,-96.477707 42.535596,-96.477409 42.539888,-96.476866 42.544433,-96.476733 42.545383,-96.476834 42.546322,-96.476581 42.546467,-96.476838 42.546626,-96.476952 42.546696,-96.47697 42.549169,-96.476965 42.550348,-96.476948 42.554731,-96.47696 42.555972,-96.477358 42.5561,-96.478541 42.556378,-96.481281 42.556744,-96.486326 42.556961,-96.490128 42.556755,-96.491035 42.556593,-96.493098 42.556354,-96.49554 42.55644,-96.497265 42.556981,-96.498544 42.558116,-96.498835 42.55878,-96.498997 42.560832,-96.487075 42.572245,-96.48661 42.57269,-96.486288 42.573008,-96.486146 42.573149,-96.485742 42.57407,-96.485742 42.57422,-96.485742 42.574673,-96.485751 42.574732,-96.485761 42.574795,-96.485797 42.57502,-96.485863 42.575147,-96.485887 42.575192,-96.485921 42.575257,-96.486198 42.575784,-96.486669 42.576059,-96.487748 42.576365,-96.489903 42.576657,-96.491373 42.577067,-96.491748 42.577243,-96.492455 42.577575,-96.492995 42.577828,-96.493535 42.578082,-96.494107 42.578351,-96.494283 42.57845,-96.495002 42.578853,-96.495654 42.579541,-96.496026 42.580382,-96.495969 42.58175,-96.49597 42.581774,-96.495499 42.582792,-96.494909 42.583536,-96.49369 42.584555,-96.492359 42.585411,-96.491492 42.586103,-96.491336 42.586535,-96.491271 42.586806,-96.491476 42.587251,-96.49152 42.587346,-96.492338 42.587814,-96.493599 42.588141,-96.494289 42.588234,-96.494881 42.588314,-96.495474 42.588394,-96.495712 42.588425,-96.495892 42.588427,-96.497054 42.588444,-96.497851 42.588377,-96.499086 42.588425,-96.500167 42.588638,-96.500514 42.588802,-96.500995 42.589233,-96.501082 42.589311,-96.501127 42.58941,-96.501296 42.589786,-96.501466 42.590161,-96.50148 42.590187,-96.501477 42.590248,-96.501474 42.590327,-96.501477 42.590411,-96.501451 42.590519,-96.501446 42.590541,-96.501438 42.59061,-96.501358 42.59075,-96.501277 42.59089,-96.501146 42.591124,-96.501015 42.591358,-96.50072 42.591884,-96.50043 42.592396,-96.500234 42.59273,-96.500239 42.592841,-96.500216 42.593368,-96.500192 42.593896,-96.500183 42.594104,-96.500284 42.594351,-96.500554 42.595009,-96.500607 42.59514,-96.500824 42.595666,-96.500912 42.595882,-96.501001 42.596097,-96.501194 42.59657,-96.501386 42.597042,-96.503784 42.602876,-96.504624 42.604928,-96.504653 42.604998,-96.504689 42.605054,-96.504833 42.605287,-96.504978 42.60552,-96.506624 42.608166,-96.506842 42.608517,-96.50827 42.610811,-96.508499 42.611178,-96.509323 42.612497,-96.509453 42.612704,-96.510015 42.613211,-96.511842 42.614406,-96.513557 42.615469,-96.515024 42.616183,-96.51658 42.616598,-96.517582 42.616643,-96.517663 42.616647,-96.517712 42.616638,-96.518183 42.616552,-96.51834 42.616522,-96.518654 42.616465,-96.518747 42.616448,-96.518881 42.616398,-96.519169 42.616286,-96.519457 42.616174,-96.519694 42.616083,-96.51983 42.615966,-96.520371 42.615502,-96.521257 42.61457,-96.521318 42.614506,-96.521339 42.614462,-96.52204 42.612995,-96.522361 42.612641,-96.522807 42.612148,-96.523755 42.611252,-96.523876 42.611129,-96.524635 42.610355,-96.525718 42.609276,-96.525739 42.609271,-96.52653 42.60901,-96.527009 42.608946,-96.527026 42.608944,-96.527542 42.608955,-96.527816 42.608961,-96.528121 42.609095,-96.528493 42.609259,-96.528876 42.609425,-96.529169 42.609641,-96.529327 42.609757,-96.529937 42.610471,-96.530177 42.611086,-96.530456 42.611799,-96.530884 42.612795,-96.531023 42.613056,-96.531335 42.613642,-96.53147 42.614472,-96.531483 42.614539,-96.53155 42.614896,-96.531615 42.615318,-96.53147 42.615966,-96.53132 42.616624,-96.531312 42.616647,-96.531281 42.616677,-96.530929 42.617012,-96.53073 42.617266,-96.53059 42.617444,-96.529914 42.617859,-96.529034 42.61824,-96.528726 42.618308,-96.528131 42.61844,-96.527455 42.61834,-96.526844 42.618125,-96.526259 42.617925,-96.525176 42.617776,-96.524001 42.617624,-96.523754 42.617592,-96.522747 42.617578,-96.522581 42.617576,-96.521453 42.617676,-96.521073 42.617854,-96.520709 42.618024,-96.519039 42.618986,-96.518273 42.619673,-96.518114 42.619816,-96.518089 42.619855,-96.517324 42.621028,-96.516828 42.621891,-96.516426 42.622789,-96.516381 42.622941,-96.516245 42.623398,-96.516201 42.623551,-96.51607 42.623837,-96.515681 42.624696,-96.515551 42.624983,-96.5155 42.625261,-96.5155 42.625265,-96.515473 42.625515,-96.515469 42.625906,-96.515463 42.626013,-96.515448 42.626108,-96.515405 42.626388,-96.515368 42.626625,-96.515353 42.626723,-96.515226 42.627333,-96.515178 42.627569,-96.51514 42.628228,-96.515158 42.62837,-96.515335 42.629,-96.515359 42.629069,-96.515607 42.629611,-96.515661 42.629711,-96.515749 42.629838,-96.516084 42.630275,-96.516513 42.630709,-96.51684 42.630975,-96.51788 42.631727,-96.518305 42.632021,-96.518582 42.632273,-96.519159 42.632658,-96.519428 42.632858,-96.51957 42.632964,-96.51967 42.633043,-96.519824 42.633181,-96.520414 42.63375,-96.520796 42.634076,-96.520854 42.634134,-96.521158 42.634413,-96.521532 42.634832,-96.521601 42.634883,-96.521732 42.63493,-96.521779 42.634942,-96.52211 42.635003,-96.522403 42.63502,-96.522542 42.635001,-96.522681 42.634966,-96.523665 42.634649,-96.523801 42.634608,-96.523986 42.634562,-96.524271 42.634511,-96.524466 42.634498,-96.524612 42.634508,-96.524754 42.634534,-96.524799 42.634549,-96.525079 42.634692,-96.525143 42.634746,-96.525167 42.634777,-96.525377 42.635139,-96.525414 42.635242,-96.525422 42.635277,-96.525453 42.635555,-96.525458 42.635598,-96.525448 42.635919,-96.525412 42.636204,-96.525372 42.63638,-96.525248 42.636872,-96.525205 42.63737,-96.52523 42.637869,-96.525337 42.638289,-96.525573 42.639164,-96.525692 42.639474,-96.525802 42.63971,-96.525886 42.639878,-96.525945 42.640014,-96.525977 42.640118,-96.525993 42.640189,-96.526043 42.640363,-96.526188 42.640704,-96.526227 42.640807,-96.526414 42.641213,-96.526456 42.641277,-96.52663 42.64145,-96.527011 42.641675,-96.52708 42.641703,-96.527533 42.64184,-96.527671 42.641875,-96.528915 42.64208,-96.529492 42.64216,-96.529637 42.642176,-96.530267 42.642232,-96.531067 42.642398,-96.531665 42.642557,-96.53211 42.642706,-96.532453 42.642844,-96.532787 42.642994,-96.533272 42.643236,-96.533822 42.643535,-96.534007 42.643641,-96.535361 42.644419,-96.536301 42.644993,-96.536433 42.645098,-96.537075 42.645588,-96.537173 42.645668,-96.537391 42.645861,-96.537472 42.645951,-96.537708 42.646304,-96.537851 42.64657,-96.537917 42.646742,-96.538002 42.646909,-96.538073 42.647154,-96.538164 42.647686,-96.53817 42.6479,-96.538145 42.6484,-96.538116 42.648613,-96.538069 42.648788,-96.538066 42.648824,-96.538063 42.648837,-96.538035 42.648983,-96.538026 42.649032,-96.537989 42.649224,-96.537878 42.649803,-96.537842 42.649996,-96.537803 42.650203,-96.53757 42.651071,-96.537456 42.651501,-96.537413 42.651713,-96.53727 42.652781,-96.537299 42.653138,-96.537344 42.65335,-96.537361 42.653743,-96.537368 42.653815,-96.537495 42.65435,-96.537502 42.654378,-96.537579 42.654584,-96.537767 42.655425,-96.537818 42.6556,-96.537929 42.655874,-96.537976 42.655976,-96.538295 42.656458,-96.538493 42.656694,-96.538525 42.656732,-96.538595 42.656826,-96.538898 42.657193,-96.539248 42.657538,-96.539802 42.658211,-96.540167 42.65859,-96.54036 42.658797,-96.540757 42.659288,-96.540873 42.659485,-96.541012 42.659674,-96.541219 42.659916,-96.541363 42.660059,-96.541393 42.660089,-96.541455 42.660144,-96.541524 42.660194,-96.541754 42.660378,-96.541824 42.660428,-96.542237 42.660827,-96.542365 42.660934,-96.542488 42.661011,-96.542623 42.661097,-96.542858 42.661227,-96.542986 42.661279,-96.543389 42.66141,-96.543482 42.661433,-96.543913 42.661502,-96.544058 42.66152,-96.544349 42.661547,-96.545229 42.661591,-96.545816 42.661579,-96.546302 42.661534,-96.546588 42.661485,-96.547008 42.661387,-96.54712 42.661353,-96.54746 42.661251,-96.54779 42.661182,-96.547834 42.661166,-96.547999 42.661089,-96.548796 42.660816,-96.549386 42.660646,-96.549608 42.660571,-96.550022 42.66038,-96.550325 42.660264,-96.551901 42.659545,-96.5523 42.65934,-96.552591 42.659148,-96.552904 42.658977,-96.553581 42.658689,-96.554316 42.658407,-96.554446 42.658365,-96.554765 42.658274,-96.555483 42.658045,-96.55608 42.657885,-96.556542 42.657768,-96.556778 42.657725,-96.557547 42.657613,-96.557743 42.657605,-96.55833 42.657597,-96.558575 42.6576,-96.558672 42.657608,-96.558909 42.657653,-96.558999 42.657679,-96.559266 42.657769,-96.559388 42.657829,-96.559605 42.657974,-96.559751 42.658117,-96.559868 42.658352,-96.559918 42.658563,-96.559944 42.658848,-96.55994 42.658875,-96.559919 42.659025,-96.559677 42.659797,-96.55946 42.660454,-96.55943 42.660558,-96.559408 42.660664,-96.559401 42.660842,-96.559431 42.661018,-96.55955 42.661401,-96.559609 42.661537,-96.559745 42.661879,-96.559776 42.661946,-96.559797 42.662016,-96.559857 42.66255,-96.559823 42.662834,-96.559808 42.662868,-96.559674 42.663098,-96.559553 42.663254,-96.559454 42.663357,-96.559051 42.663541,-96.558869 42.663595,-96.558822 42.663605,-96.558145 42.66369,-96.557755 42.663715,-96.557021 42.663741,-96.556581 42.663724,-96.556192 42.66375,-96.556096 42.663764,-96.55605 42.663778,-96.555965 42.663812,-96.555808 42.663897,-96.555776 42.663924,-96.555761 42.663958,-96.555747 42.664029,-96.555749 42.664101,-96.55577 42.664207,-96.555867 42.664409,-96.556012 42.664596,-96.556073 42.664651,-96.556305 42.664836,-96.557292 42.665582,-96.557752 42.666045,-96.557907 42.666183,-96.558045 42.666321,-96.558339 42.666616,-96.558486 42.666802,-96.55853 42.666866,-96.558609 42.667219,-96.558672 42.667391,-96.558757 42.66752,-96.558812 42.667579,-96.558959 42.667843,-96.55931 42.668311,-96.559823 42.668834,-96.560019 42.668992,-96.56013 42.669061,-96.560164 42.669086,-96.560278 42.669152,-96.560795 42.669423,-96.561131 42.669567,-96.561306 42.669632,-96.561395 42.669661,-96.561943 42.669817,-96.562334 42.669966,-96.562651 42.670133,-96.562863 42.670276,-96.56326 42.670485,-96.563583 42.670703,-96.563687 42.670778,-96.564297 42.671244,-96.564389 42.671328,-96.564613 42.671604,-96.564741 42.671797,-96.564766 42.671828,-96.56509 42.672142,-96.565262 42.672358,-96.565301 42.672424,-96.565485 42.672676,-96.565504 42.672709,-96.565598 42.672987,-96.56563 42.673054,-96.565867 42.673447,-96.565905 42.673624,-96.565968 42.673796,-96.566003 42.673937,-96.566092 42.674791,-96.566184 42.675287,-96.566332 42.675665,-96.566463 42.675934,-96.566483 42.675967,-96.566532 42.676029,-96.566964 42.676417,-96.567001 42.67644,-96.567044 42.676458,-96.567091 42.676467,-96.567237 42.676477,-96.567384 42.676479,-96.567529 42.676464,-96.567575 42.676453,-96.56801 42.676289,-96.568049 42.676267,-96.568285 42.676086,-96.568508 42.675947,-96.56879 42.675804,-96.568904 42.675736,-96.56907 42.675605,-96.569707 42.67497,-96.569776 42.674875,-96.569895 42.674679,-96.570017 42.674334,-96.570124 42.673803,-96.570293 42.672632,-96.570424 42.672105,-96.570493 42.67201,-96.570575 42.671804,-96.570639 42.671707,-96.570939 42.67134,-96.571055 42.671218,-96.571079 42.671194,-96.571112 42.671167,-96.57122 42.671094,-96.571567 42.670896,-96.571653 42.670863,-96.572067 42.670753,-96.572304 42.670707,-96.572401 42.670697,-96.57279 42.670673,-96.573085 42.670667,-96.573134 42.670669,-96.57357 42.670721,-96.574587 42.670979,-96.57467 42.671018,-96.574716 42.671031,-96.574953 42.671077,-96.576817 42.671375,-96.577395 42.671443,-96.577852 42.671569,-96.578024 42.671636,-96.578365 42.671814,-96.578399 42.67184,-96.578428 42.671869,-96.578474 42.671932,-96.578513 42.671997,-96.578576 42.672207,-96.578574 42.672242,-96.578551 42.672312,-96.578517 42.672379,-96.578471 42.672442,-96.578441 42.67247,-96.578274 42.6726,-96.578236 42.672623,-96.577978 42.672724,-96.577344 42.672916,-96.57647 42.673003,-96.575655 42.673121,-96.575467 42.673163,-96.575336 42.673211,-96.574589 42.67355,-96.574429 42.673631,-96.574354 42.673677,-96.574257 42.673757,-96.573926 42.674017,-96.573863 42.674072,-96.573722 42.674218,-96.573338 42.674674,-96.573173 42.674893,-96.573061 42.675091,-96.572881 42.675223,-96.572745 42.675372,-96.572614 42.675564,-96.572142 42.676463,-96.572111 42.676531,-96.572053 42.676704,-96.571962 42.677055,-96.571944 42.677161,-96.571927 42.677482,-96.571962 42.67791,-96.572008 42.678157,-96.572029 42.678226,-96.57212 42.678429,-96.572141 42.678461,-96.572192 42.678522,-96.572301 42.67872,-96.572416 42.678836,-96.572448 42.678863,-96.572488 42.678884,-96.572623 42.678926,-96.572765 42.678951,-96.572861 42.678963,-96.57291 42.678965,-96.573008 42.678961,-96.57325 42.678931,-96.57353 42.678867,-96.573845 42.67877,-96.573975 42.67872,-96.574679 42.678332,-96.574981 42.67815,-96.575341 42.677964,-96.575428 42.677931,-96.57598 42.677783,-96.576263 42.677726,-96.577041 42.677651,-96.577676 42.67762,-96.577921 42.677632,-96.578016 42.67765,-96.578154 42.677685,-96.578289 42.677727,-96.578455 42.677803,-96.578492 42.677827,-96.578648 42.677964,-96.578722 42.678057,-96.578757 42.678123,-96.578768 42.678158,-96.578803 42.67837,-96.578781 42.678467,-96.578727 42.678567,-96.578704 42.678598,-96.578508 42.678757,-96.578439 42.678807,-96.578211 42.678943,-96.577848 42.679126,-96.577018 42.679432,-96.576932 42.679467,-96.576338 42.679782,-96.576119 42.679862,-96.575992 42.679914,-96.575953 42.679937,-96.575669 42.680133,-96.57523 42.68047,-96.575091 42.68061,-96.574972 42.68073,-96.574907 42.680826,-96.57467 42.681295,-96.574597 42.681502,-96.57458 42.681609,-96.574568 42.681966,-96.574573 42.682002,-96.574594 42.682071,-96.574702 42.682309,-96.574877 42.682524,-96.574906 42.682552,-96.57518 42.682757,-96.575295 42.682823,-96.575693 42.682962,-96.575784 42.682989,-96.576108 42.68307,-96.576252 42.683092,-96.576496 42.68311,-96.576692 42.683109,-96.577913 42.683035,-96.578254 42.683014,-96.578495 42.682982,-96.578691 42.682969,-96.578984 42.682981,-96.579131 42.682974,-96.580049 42.682864,-96.580292 42.682848,-96.580683 42.682872,-96.581365 42.682905,-96.582341 42.68294,-96.582684 42.68294,-96.583024 42.68291,-96.583903 42.682928,-96.584244 42.682959,-96.584635 42.682972,-96.584732 42.682982,-96.584828 42.682997,-96.585153 42.683065,-96.5852 42.683075,-96.585296 42.683088,-96.585443 42.683089,-96.585833 42.683059,-96.585881 42.683065,-96.585928 42.683076,-96.586186 42.683177,-96.586307 42.683289,-96.586332 42.68332,-96.586371 42.683385,-96.586382 42.68342,-96.58643 42.683668,-96.586431 42.683775,-96.586425 42.68381,-96.586307 42.68412,-96.58624 42.684254,-96.586015 42.684649,-96.585895 42.684844,-96.585752 42.685147,-96.585462 42.685829,-96.585451 42.685864,-96.585415 42.686076,-96.585402 42.68629,-96.585428 42.68661,-96.585493 42.687001,-96.58553 42.687141,-96.58566 42.687411,-96.58573 42.687544,-96.58587 42.687772,-96.586132 42.688115,-96.586295 42.688413,-96.586303 42.688448,-96.586252 42.689375,-96.586259 42.689589,-96.586268 42.689624,-96.586342 42.689794,-96.586383 42.689859,-96.586485 42.689981,-96.586516 42.690008,-96.586757 42.690131,-96.586801 42.690147,-96.586848 42.690158,-96.587188 42.690188,-96.587873 42.690174,-96.58797 42.690175,-96.588165 42.690168,-96.588262 42.690177,-96.588592 42.69024,-96.588636 42.690254,-96.588843 42.690348,-96.589185 42.690549,-96.589274 42.690635,-96.589428 42.690816,-96.589491 42.69087,-96.589595 42.690946,-96.589635 42.690966,-96.589721 42.691,-96.589842 42.691041,-96.590133 42.691075,-96.590427 42.691076,-96.590864 42.691039,-96.59105 42.690996,-96.591352 42.690879,-96.591592 42.690759,-96.591768 42.690634,-96.591852 42.690546,-96.591888 42.69048,-96.592014 42.690209,-96.59203 42.690139,-96.592032 42.690032,-96.592026 42.689996,-96.591922 42.689647,-96.59158 42.689055,-96.591547 42.688988,-96.591505 42.688885,-96.591418 42.688498,-96.591422 42.688356,-96.59143 42.688285,-96.591487 42.688111,-96.591656 42.687737,-96.591676 42.687705,-96.591969 42.687375,-96.592001 42.687348,-96.592295 42.68716,-96.592932 42.686893,-96.593062 42.686843,-96.593488 42.68676,-96.593827 42.686722,-96.594022 42.68671,-96.594609 42.686705,-96.595733 42.686736,-96.59666 42.686809,-96.596709 42.68681,-96.597289 42.686745,-96.597826 42.686742,-96.598884 42.686667,-96.598933 42.686672,-96.599315 42.686736,-96.599449 42.686781,-96.599639 42.686893,-96.599927 42.687137,-96.599954 42.687167,-96.599975 42.687199,-96.600042 42.687333,-96.600066 42.687365,-96.600133 42.687499,-96.60015 42.687605,-96.600177 42.687926,-96.600177 42.687997,-96.600172 42.688033,-96.60015 42.688102,-96.600098 42.688203,-96.600003 42.688367,-96.599773 42.688641,-96.599655 42.688754,-96.599621 42.688781,-96.599381 42.688904,-96.599161 42.688982,-96.599022 42.689015,-96.598974 42.689023,-96.598877 42.689031,-96.598637 42.688996,-96.598227 42.688877,-96.598184 42.68886,-96.597883 42.688678,-96.597318 42.688394,-96.596851 42.688287,-96.596754 42.688276,-96.596559 42.688288,-96.596324 42.688337,-96.59628 42.688354,-96.596074 42.688449,-96.595927 42.688544,-96.595614 42.688712,-96.595437 42.688773,-96.595251 42.688818,-96.595203 42.688824,-96.595154 42.688825,-96.594912 42.688844,-96.594828 42.688881,-96.594782 42.688895,-96.594494 42.688936,-96.594208 42.688986,-96.594119 42.689016,-96.594039 42.689057,-96.593936 42.689133,-96.593829 42.689253,-96.593735 42.689378,-96.593715 42.689411,-96.593614 42.689723,-96.593613 42.689794,-96.593663 42.690005,-96.593769 42.690205,-96.593907 42.690394,-96.594056 42.690536,-96.594157 42.690614,-96.594378 42.690755,-96.594499 42.690816,-96.594542 42.690834,-96.594851 42.690941,-96.594943 42.690966,-96.595904 42.691092,-96.596087 42.691145,-96.596125 42.691167,-96.5963 42.691291,-96.596387 42.691377,-96.596453 42.691472,-96.596466 42.691507,-96.596502 42.691647,-96.596539 42.691932,-96.596528 42.692003,-96.596429 42.692242,-96.596408 42.692275,-96.596051 42.692701,-96.596021 42.692729,-96.595922 42.6928,-96.595676 42.692917,-96.595503 42.692984,-96.594969 42.693237,-96.594418 42.693467,-96.594336 42.693505,-96.594292 42.69352,-96.594167 42.693576,-96.593906 42.693788,-96.59388 42.693818,-96.593822 42.693916,-96.593804 42.693986,-96.593829 42.694164,-96.593928 42.694327,-96.593952 42.694358,-96.593986 42.694384,-96.594252 42.694541,-96.594336 42.694579,-96.59452 42.694627,-96.594662 42.694656,-96.595338 42.694738,-96.59553 42.694767,-96.59572 42.694802,-96.595954 42.694854,-96.596635 42.695057,-96.597081 42.695278,-96.597307 42.695415,-96.597624 42.695637,-96.597746 42.695749,-96.597997 42.695968,-96.598234 42.696149,-96.598612 42.696565,-96.599028 42.696963,-96.599142 42.697121,-96.599154 42.697156,-96.59917 42.697439,-96.599115 42.69783,-96.599116 42.697866,-96.599138 42.697971,-96.599162 42.698041,-96.599168 42.698076,-96.599219 42.698214,-96.599263 42.698316,-96.599307 42.698379,-96.599505 42.698705,-96.59955 42.698769,-96.599603 42.698829,-96.599637 42.698854,-96.599858 42.698996,-96.599941 42.699032,-96.599987 42.699045,-96.600604 42.699158,-96.600653 42.699162,-96.600946 42.699159,-96.600994 42.699154,-96.601041 42.699144,-96.60113 42.699114,-96.601342 42.699024,-96.601381 42.699003,-96.601447 42.69895,-96.601494 42.698849,-96.601532 42.698708,-96.601549 42.698422,-96.601534 42.697851,-96.601537 42.697744,-96.601577 42.697641,-96.601651 42.697527,-96.601809 42.69739,-96.60189 42.697301,-96.601993 42.697224,-96.602241 42.697053,-96.602281 42.697033,-96.602555 42.696954,-96.6027 42.696938,-96.602847 42.696932,-96.603285 42.69697,-96.603857 42.697062,-96.603906 42.697065,-96.604003 42.697055,-96.604027 42.697048,-96.604186 42.697003,-96.604312 42.696948,-96.604346 42.696923,-96.604375 42.696894,-96.604523 42.696708,-96.604574 42.696533,-96.604572 42.696426,-96.60456 42.696355,-96.60456 42.69632,-96.604418 42.695903,-96.60442 42.695618,-96.604436 42.695584,-96.604526 42.695457,-96.60468 42.695275,-96.604769 42.695189,-96.604924 42.695051,-96.605265 42.694848,-96.605643 42.694683,-96.605875 42.694624,-96.605923 42.694615,-96.606116 42.694591,-96.60636 42.694572,-96.606801 42.694565,-96.607486 42.694607,-96.607873 42.694653,-96.608018 42.694667,-96.608654 42.694705,-96.608801 42.694706,-96.609143 42.69468,-96.609721 42.694598,-96.610159 42.69456,-96.610208 42.69456,-96.610687 42.694634,-96.610782 42.694652,-96.610922 42.694685,-96.611275 42.694809,-96.61158 42.694988,-96.611622 42.695006,-96.611698 42.69505,-96.611769 42.695099,-96.611795 42.69513,-96.612056 42.695512,-96.612086 42.69558,-96.612109 42.695649,-96.612181 42.695931,-96.612206 42.696108,-96.612199 42.696215,-96.612121 42.696495,-96.612045 42.696623,-96.61179 42.696885,-96.611167 42.697389,-96.611043 42.6975,-96.610583 42.69787,-96.610369 42.698017,-96.61018 42.698131,-96.609624 42.698425,-96.60958 42.698442,-96.609339 42.698473,-96.609192 42.698472,-96.609048 42.698449,-96.608922 42.698394,-96.608429 42.698101,-96.60835 42.69806,-96.608023 42.697906,-96.607896 42.697852,-96.60767 42.697785,-96.607622 42.69778,-96.60748 42.697755,-96.607432 42.69775,-96.606893 42.697733,-96.606358 42.697781,-96.605692 42.697897,-96.605602 42.697924,-96.605515 42.697956,-96.605381 42.697999,-96.605335 42.69801,-96.605247 42.698041,-96.605039 42.698136,-96.604963 42.698181,-96.604726 42.698361,-96.604603 42.698473,-96.604528 42.698565,-96.604419 42.698765,-96.604348 42.699009,-96.604331 42.699152,-96.604328 42.699295,-96.604349 42.699509,-96.604466 42.700038,-96.604683 42.700661,-96.6048 42.701189,-96.604825 42.701258,-96.604912 42.701463,-96.604946 42.70153,-96.605088 42.701694,-96.605147 42.701748,-96.605352 42.701901,-96.605469 42.701966,-96.605596 42.70202,-96.606423 42.702237,-96.60685 42.702317,-96.60787 42.702401,-96.608065 42.702414,-96.608505 42.702432,-96.60913 42.702424,-96.609436 42.702421,-96.609485 42.702416,-96.609577 42.702393,-96.609666 42.702364,-96.609713 42.702353,-96.609801 42.702324,-96.609993 42.702212,-96.610284 42.702082,-96.610426 42.701984,-96.610456 42.701956,-96.610619 42.701825,-96.610648 42.701796,-96.610791 42.70161,-96.610867 42.701519,-96.611134 42.701219,-96.611698 42.700152,-96.611767 42.700058,-96.611851 42.699969,-96.612392 42.699508,-96.612638 42.699333,-96.612956 42.699168,-96.613748 42.698978,-96.614013 42.698887,-96.614504 42.69865,-96.614687 42.698532,-96.614728 42.698513,-96.615002 42.698435,-96.61505 42.698429,-96.615148 42.698433,-96.615241 42.698457,-96.615409 42.69853,-96.615444 42.698554,-96.615508 42.698608,-96.615627 42.698765,-96.615644 42.698798,-96.615639 42.698869,-96.615627 42.698904,-96.615613 42.698975,-96.615617 42.69901,-96.61565 42.699151,-96.615649 42.699187,-96.615516 42.699713,-96.615516 42.699855,-96.615562 42.699994,-96.615722 42.700254,-96.615751 42.700283,-96.615825 42.70033,-96.615945 42.700391,-96.616053 42.700428,-96.616078 42.700437,-96.616169 42.700463,-96.616504 42.700515,-96.616601 42.700523,-96.616846 42.70051,-96.61694 42.700492,-96.616986 42.700479,-96.617294 42.700369,-96.617375 42.700329,-96.617492 42.700264,-96.617676 42.700147,-96.618278 42.69982,-96.618424 42.699742,-96.61847 42.699729,-96.618807 42.699684,-96.618905 42.699682,-96.618995 42.699711,-96.619122 42.699764,-96.619162 42.699786,-96.619194 42.699812,-96.619273 42.699903,-96.619415 42.700091,-96.619545 42.700322,-96.619604 42.700458,-96.619684 42.700663,-96.619723 42.700803,-96.619749 42.700871,-96.619776 42.700976,-96.619767 42.701011,-96.619764 42.701081,-96.619732 42.701329,-96.619726 42.701436,-96.619748 42.701721,-96.619761 42.701827,-96.619815 42.701964,-96.619964 42.702149,-96.619996 42.702176,-96.62045 42.702448,-96.620515 42.702501,-96.620822 42.702731,-96.620902 42.70282,-96.620941 42.702886,-96.620961 42.702943,-96.620991 42.703024,-96.62111 42.703589,-96.621243 42.703934,-96.62129 42.704109,-96.621408 42.704456,-96.621552 42.704768,-96.621642 42.704963,-96.621933 42.705275,-96.622 42.705347,-96.622217 42.705668,-96.622563 42.705971,-96.622666 42.706103,-96.622684 42.706126,-96.622967 42.706541,-96.623038 42.706635,-96.623358 42.70695,-96.623413 42.707009,-96.623881 42.707555,-96.623916 42.707579,-96.623957 42.7076,-96.624216 42.7077,-96.624263 42.707711,-96.624361 42.707717,-96.624497 42.70768,-96.62475 42.707571,-96.624981 42.707439,-96.6251 42.707326,-96.62517 42.707278,-96.625208 42.707253,-96.625287 42.707163,-96.625305 42.707129,-96.625392 42.706814,-96.625395 42.706493,-96.62535 42.706234,-96.625346 42.706209,-96.625275 42.705892,-96.625189 42.705686,-96.625102 42.70552,-96.624955 42.705105,-96.624916 42.704893,-96.624916 42.704822,-96.624991 42.704579,-96.62505 42.704481,-96.625077 42.704451,-96.625208 42.704345,-96.625246 42.704322,-96.625486 42.704198,-96.625529 42.704181,-96.62598 42.704042,-96.626108 42.704024,-96.626365 42.70399,-96.626414 42.703988,-96.626512 42.703995,-96.62675 42.704036,-96.626843 42.704058,-96.626978 42.7041,-96.62702 42.704119,-96.627214 42.704228,-96.627325 42.704297,-96.627406 42.704337,-96.62784 42.704677,-96.62791 42.704727,-96.628095 42.704843,-96.628384 42.704978,-96.628428 42.704995,-96.628521 42.705015,-96.629325 42.705017,-96.629372 42.705025,-96.629511 42.70506,-96.62992 42.705255,-96.630154 42.705438,-96.630207 42.705498,-96.630353 42.705684,-96.630413 42.705857,-96.630443 42.706569,-96.630467 42.706747,-96.630441 42.706888,-96.630299 42.707268,-96.630092 42.707592,-96.629832 42.707936,-96.629749 42.708065,-96.62944 42.708816,-96.629392 42.708918,-96.629333 42.709015,-96.629307 42.709046,-96.629276 42.709074,-96.62917 42.709148,-96.628962 42.709242,-96.62882 42.70927,-96.628706 42.709273,-96.628282 42.709289,-96.62814 42.709315,-96.627858 42.709374,-96.627631 42.709441,-96.627498 42.709486,-96.626888 42.7099,-96.626855 42.709926,-96.626779 42.710018,-96.626539 42.710329,-96.626345 42.710657,-96.626265 42.710747,-96.626043 42.710968,-96.625977 42.711063,-96.625951 42.711132,-96.625936 42.71118,-96.625833 42.711515,-96.625636 42.711881,-96.625448 42.712171,-96.625422 42.71224,-96.625238 42.712645,-96.625222 42.712671,-96.625144 42.712811,-96.625027 42.712924,-96.624904 42.713119,-96.62468 42.713475,-96.624559 42.713707,-96.62442 42.713977,-96.624406 42.714011,-96.624284 42.714468,-96.62426 42.714717,-96.62427 42.714895,-96.624315 42.71518,-96.624373 42.715316,-96.62453 42.715617,-96.624545 42.715643,-96.624568 42.715682,-96.624745 42.715896,-96.624799 42.715955,-96.624834 42.71598,-96.625042 42.716095,-96.625139 42.716148,-96.625186 42.716175,-96.625323 42.716277,-96.625418 42.716329,-96.62544 42.716341,-96.62551 42.716392,-96.625748 42.716771,-96.625773 42.716802,-96.625948 42.716926,-96.626146 42.717032,-96.626278 42.71708,-96.626629 42.717166,-96.626743 42.717194,-96.627141 42.717333,-96.627368 42.7174,-96.627636 42.717488,-96.627719 42.717527,-96.627936 42.717671,-96.627969 42.717697,-96.627992 42.717729,-96.628006 42.717763,-96.628011 42.717798,-96.628001 42.717833,-96.627923 42.718003,-96.627882 42.718068,-96.627826 42.718126,-96.627762 42.71818,-96.627488 42.718382,-96.627258 42.718516,-96.627019 42.718641,-96.626798 42.718718,-96.626593 42.718816,-96.626453 42.718916,-96.626389 42.71897,-96.626092 42.719251,-96.62589 42.719409,-96.625625 42.719617,-96.625498 42.719726,-96.625352 42.719821,-96.624967 42.720276,-96.624882 42.720405,-96.624545 42.720944,-96.624465 42.721113,-96.624402 42.721503,-96.624395 42.721574,-96.624413 42.721967,-96.624434 42.722073,-96.624455 42.722143,-96.624596 42.722485,-96.624745 42.72267,-96.625003 42.722929,-96.625247 42.723104,-96.625332 42.723191,-96.625393 42.723327,-96.625452 42.723609,-96.625454 42.723645,-96.625437 42.723823,-96.625428 42.723858,-96.625309 42.724168,-96.625227 42.724297,-96.624792 42.724729,-96.624755 42.724753,-96.624658 42.724832,-96.624535 42.724944,-96.624466 42.725039,-96.624447 42.725072,-96.624434 42.725106,-96.624414 42.725212,-96.624446 42.725317,-96.624464 42.72535,-96.624691 42.725626,-96.624723 42.725652,-96.624764 42.725673,-96.624937 42.72574,-96.625218 42.725803,-96.625555 42.725861,-96.6256 42.725869,-96.626039 42.725898,-96.627019 42.725934,-96.627503 42.725878,-96.628058 42.725737,-96.628626 42.725629,-96.628918 42.725599,-96.629348 42.725528,-96.629939 42.725351,-96.630466 42.725162,-96.630628 42.725081,-96.630672 42.725067,-96.631406 42.725033,-96.631598 42.725004,-96.631883 42.724951,-96.632164 42.724888,-96.632209 42.724874,-96.632425 42.72479,-96.632931 42.724507,-96.633236 42.724327,-96.63352 42.724188,-96.633703 42.724137,-96.633752 42.724135,-96.633801 42.724138,-96.633896 42.724156,-96.634118 42.724257,-96.634189 42.724306,-96.634278 42.724391,-96.634304 42.724421,-96.634509 42.724706,-96.634642 42.725011,-96.634665 42.725042,-96.6347 42.725108,-96.634812 42.725598,-96.634814 42.725741,-96.634806 42.725847,-96.634769 42.725988,-96.634743 42.726057,-96.634704 42.726122,-96.634363 42.726379,-96.634321 42.726397,-96.633781 42.726567,-96.633378 42.726699,-96.633287 42.726725,-96.633239 42.726733,-96.6331 42.726766,-96.632925 42.726831,-96.632807 42.726895,-96.632771 42.726919,-96.632572 42.727077,-96.632517 42.727136,-96.632476 42.727239,-96.632467 42.727274,-96.632462 42.727381,-96.632465 42.727453,-96.632522 42.728022,-96.632507 42.728129,-96.632376 42.728436,-96.632357 42.728469,-96.632243 42.728586,-96.632178 42.728639,-96.632056 42.728751,-96.632021 42.728776,-96.631897 42.728833,-96.631685 42.728922,-96.631186 42.729073,-96.630978 42.729167,-96.630677 42.72935,-96.630647 42.729378,-96.630623 42.72941,-96.630501 42.729605,-96.630484 42.729639,-96.630434 42.729777,-96.630426 42.729812,-96.630432 42.729919,-96.630522 42.730234,-96.630908 42.730772,-96.630985 42.730863,-96.631321 42.73117,-96.631801 42.731527,-96.632186 42.731851,-96.632289 42.731927,-96.632405 42.732042,-96.632467 42.732097,-96.632493 42.732127,-96.632587 42.732209,-96.632628 42.732228,-96.63302 42.732376,-96.633225 42.73243,-96.633343 42.732462,-96.633392 42.732466,-96.633578 42.732462,-96.634166 42.732492,-96.634509 42.732485,-96.634705 42.732491,-96.635187 42.732557,-96.635467 42.732622,-96.635643 42.732685,-96.635857 42.732773,-96.636077 42.732851,-96.63631 42.732983,-96.636398 42.733014,-96.636438 42.733034,-96.636511 42.733082,-96.636648 42.733183,-96.63672 42.733231,-96.636816 42.733312,-96.637575 42.734013,-96.637641 42.734066,-96.637988 42.734316,-96.638089 42.734394,-96.638325 42.734622,-96.638348 42.734654,-96.638947 42.735764,-96.638959 42.735786,-96.639097 42.736001,-96.639333 42.736367,-96.639364 42.736435,-96.639451 42.736758,-96.639468 42.736821,-96.639485 42.736928,-96.639484 42.736963,-96.639467 42.737034,-96.63941 42.73717,-96.639302 42.73729,-96.63927 42.737317,-96.639155 42.737383,-96.638984 42.737453,-96.638846 42.737491,-96.638749 42.737501,-96.638358 42.737476,-96.638262 42.737464,-96.638025 42.737419,-96.637551 42.737269,-96.636181 42.736838,-96.635159 42.736585,-96.635024 42.736543,-96.634545 42.736294,-96.63436 42.736177,-96.634109 42.735933,-96.634076 42.735907,-96.633715 42.735721,-96.63355 42.735644,-96.633353 42.735537,-96.633095 42.735434,-96.632964 42.735386,-96.632829 42.735343,-96.632365 42.735229,-96.632225 42.735198,-96.632034 42.735166,-96.631987 42.735155,-96.631943 42.735139,-96.631898 42.735128,-96.631751 42.735127,-96.631655 42.735113,-96.631602 42.735107,-96.631462 42.735092,-96.631367 42.735076,-96.631172 42.735078,-96.630886 42.735111,-96.630839 42.735122,-96.630684 42.735207,-96.630622 42.735261,-96.630586 42.735286,-96.630525 42.735341,-96.630436 42.735468,-96.630404 42.735536,-96.630393 42.73557,-96.630366 42.735748,-96.630383 42.735962,-96.630448 42.736171,-96.630489 42.736265,-96.630537 42.736375,-96.630728 42.736665,-96.631073 42.737054,-96.631108 42.73708,-96.631295 42.737195,-96.631808 42.737404,-96.632037 42.737468,-96.632078 42.737488,-96.632152 42.737535,-96.632247 42.737617,-96.632335 42.737703,-96.632643 42.737981,-96.633123 42.738479,-96.633326 42.738764,-96.633443 42.738878,-96.63351 42.738931,-96.633723 42.739079,-96.633876 42.739169,-96.63398 42.739245,-96.634067 42.739331,-96.634242 42.739456,-96.634442 42.73956,-96.634583 42.739659,-96.634809 42.739847,-96.634891 42.739936,-96.635148 42.74024,-96.635466 42.740683,-96.635561 42.740847,-96.635697 42.741299,-96.635728 42.741513,-96.635719 42.741555,-96.635679 42.74176,-96.635668 42.741795,-96.635612 42.741894,-96.635511 42.742017,-96.635456 42.742075,-96.63542 42.7421,-96.635079 42.742303,-96.634833 42.742421,-96.63431 42.74262,-96.633967 42.742759,-96.633875 42.742784,-96.633543 42.742845,-96.632761 42.742894,-96.632664 42.742891,-96.632371 42.742868,-96.632175 42.742868,-96.631592 42.742928,-96.631449 42.742954,-96.631356 42.742976,-96.629712 42.743452,-96.629586 42.743506,-96.629509 42.743551,-96.629479 42.743579,-96.629429 42.743641,-96.629381 42.743742,-96.629353 42.743847,-96.629351 42.743882,-96.629376 42.744024,-96.629387 42.744059,-96.62942 42.744126,-96.629496 42.744218,-96.629531 42.744243,-96.629611 42.744285,-96.629656 42.7443,-96.630407 42.744464,-96.630553 42.744475,-96.630992 42.744497,-96.631041 42.744496,-96.631378 42.744541,-96.631424 42.744554,-96.631727 42.744671,-96.631911 42.744789,-96.631944 42.744815,-96.632026 42.744904,-96.632107 42.745035,-96.632121 42.745069,-96.632155 42.74521,-96.632154 42.745281,-96.632137 42.745459,-96.632096 42.745599,-96.63198 42.745834,-96.631855 42.746028,-96.631701 42.746329,-96.631618 42.746417,-96.631549 42.746468,-96.631369 42.746589,-96.631203 42.746666,-96.631067 42.746706,-96.630408 42.746848,-96.630236 42.746916,-96.630199 42.746939,-96.630133 42.746992,-96.630022 42.747109,-96.630003 42.747142,-96.62987 42.747486,-96.62985 42.747555,-96.629819 42.747804,-96.629835 42.748018,-96.629937 42.74822,-96.629961 42.748251,-96.630294 42.74856,-96.630349 42.748619,-96.630392 42.748683,-96.630539 42.749023,-96.630559 42.749093,-96.630564 42.749129,-96.630559 42.749342,-96.630521 42.749519,-96.630412 42.749793,-96.630405 42.749865,-96.630364 42.750004,-96.630412 42.750136,-96.63042 42.750207,-96.630406 42.750241,-96.630384 42.750273,-96.630082 42.750641,-96.630019 42.750696,-96.629983 42.75072,-96.629856 42.750774,-96.629762 42.750794,-96.629618 42.750815,-96.629521 42.750823,-96.629474 42.750814,-96.629291 42.75076,-96.629024 42.75067,-96.628858 42.750594,-96.628723 42.750552,-96.628675 42.750544,-96.628384 42.750516,-96.628188 42.750518,-96.627994 42.750541,-96.627576 42.750642,-96.627532 42.750657,-96.627313 42.7508,-96.627151 42.750881,-96.627077 42.750928,-96.627046 42.750956,-96.626964 42.751086,-96.62695 42.75112,-96.62689 42.751582,-96.626895 42.751867,-96.62682 42.75211,-96.626634 42.752361,-96.626607 42.75239,-96.62648 42.7525,-96.626438 42.752515,-96.626343 42.752531,-96.626297 42.752544,-96.626255 42.752562,-96.626011 42.752699,-96.625908 42.752758,-96.625785 42.752816,-96.625748 42.752839,-96.625661 42.752926,-96.625626 42.752951,-96.625579 42.752953,-96.625436 42.752927,-96.62525 42.752882,-96.625007 42.752903,-96.624615 42.752901,-96.62408 42.752849,-96.623344 42.752852,-96.623198 42.752868,-96.622914 42.752925,-96.622552 42.753035,-96.622301 42.753147,-96.622072 42.753283,-96.621968 42.753359,-96.62193 42.753381,-96.621764 42.753459,-96.621719 42.753471,-96.621671 42.753477,-96.620887 42.75343,-96.62074 42.753438,-96.620306 42.753499,-96.620213 42.753521,-96.620126 42.753554,-96.6198 42.753713,-96.619695 42.753788,-96.619545 42.75393,-96.619491 42.753989,-96.619471 42.754022,-96.619278 42.754502,-96.619262 42.754609,-96.619269 42.754752,-96.619331 42.754849,-96.619361 42.754918,-96.6194 42.754983,-96.619711 42.755389,-96.619755 42.755453,-96.620005 42.75588,-96.620014 42.755915,-96.620064 42.756235,-96.62007 42.756342,-96.619995 42.756804,-96.619988 42.756946,-96.620004 42.757089,-96.62002 42.75716,-96.620025 42.757173,-96.62009 42.757331,-96.620212 42.757526,-96.620267 42.757585,-96.620702 42.757875,-96.621022 42.75804,-96.621399 42.758207,-96.621487 42.75824,-96.621812 42.758321,-96.622342 42.758397,-96.622391 42.758401,-96.622833 42.758398,-96.62293 42.758388,-96.623023 42.758365,-96.623396 42.758194,-96.623473 42.758149,-96.62369 42.758003,-96.624298 42.757397,-96.624367 42.757303,-96.624471 42.757102,-96.624598 42.75672,-96.624705 42.756298,-96.624878 42.755925,-96.624969 42.755611,-96.624983 42.755577,-96.625107 42.755423,-96.625176 42.755328,-96.625293 42.755095,-96.625369 42.754965,-96.625381 42.75493,-96.625389 42.75486,-96.625423 42.754757,-96.625436 42.754728,-96.625455 42.754691,-96.625503 42.754553,-96.62552 42.75452,-96.625566 42.754457,-96.625601 42.754433,-96.626086 42.754193,-96.626132 42.754179,-96.626421 42.754148,-96.62647 42.754151,-96.626661 42.75418,-96.626944 42.754232,-96.626989 42.754247,-96.627068 42.75429,-96.627243 42.754413,-96.627445 42.754738,-96.627515 42.754892,-96.627558 42.75503,-96.627594 42.755243,-96.627587 42.755314,-96.627567 42.755384,-96.627566 42.755491,-96.627525 42.755847,-96.62755 42.756132,-96.627628 42.756375,-96.627756 42.756662,-96.627811 42.756783,-96.627893 42.756913,-96.628129 42.757185,-96.628368 42.757412,-96.628672 42.757645,-96.628784 42.757714,-96.629563 42.758147,-96.629984 42.758495,-96.630012 42.758525,-96.630796 42.759759,-96.630834 42.759825,-96.630967 42.760094,-96.631022 42.760152,-96.631199 42.760276,-96.631465 42.760541,-96.631518 42.760594,-96.631905 42.760868,-96.632056 42.761009,-96.632157 42.761087,-96.632397 42.761313,-96.632523 42.761507,-96.632784 42.761786,-96.632882 42.761891,-96.633302 42.762215,-96.633557 42.762383,-96.634018 42.76265,-96.635139 42.763227,-96.635409 42.763381,-96.635607 42.76354,-96.6361 42.763986,-96.636353 42.764411,-96.636384 42.764478,-96.636489 42.764753,-96.636498 42.764824,-96.636493 42.76486,-96.636352 42.765126,-96.636275 42.765217,-96.636039 42.765399,-96.636 42.765421,-96.635792 42.765515,-96.635701 42.765542,-96.635512 42.765581,-96.635122 42.765611,-96.634877 42.765601,-96.634828 42.765595,-96.634725 42.765568,-96.634365 42.765476,-96.633799 42.765262,-96.632892 42.764989,-96.632796 42.764975,-96.632551 42.764977,-96.632307 42.764999,-96.632215 42.765023,-96.632046 42.765095,-96.632008 42.765118,-96.631975 42.765144,-96.631756 42.765382,-96.631625 42.765533,-96.631605 42.765565,-96.631551 42.765703,-96.631527 42.765845,-96.631522 42.766095,-96.63161 42.766446,-96.631655 42.766549,-96.632166 42.767631,-96.63223 42.767803,-96.632335 42.768041,-96.632641 42.768528,-96.632686 42.768592,-96.632715 42.76862,-96.63275 42.768645,-96.632904 42.768733,-96.632993 42.768765,-96.633088 42.768782,-96.633137 42.768783,-96.633323 42.768736,-96.63354 42.768653,-96.633622 42.768614,-96.634214 42.768138,-96.634291 42.768093,-96.634415 42.768036,-96.63474 42.767955,-96.634935 42.767938,-96.635081 42.767949,-96.635508 42.768034,-96.635553 42.768048,-96.635924 42.768223,-96.636036 42.768292,-96.636135 42.768371,-96.636344 42.768569,-96.636393 42.768631,-96.636551 42.769006,-96.636549 42.769077,-96.636526 42.769254,-96.636516 42.769396,-96.63647 42.769535,-96.636382 42.76974,-96.636338 42.769803,-96.636055 42.770096,-96.63567 42.770419,-96.635417 42.770589,-96.635176 42.770713,-96.635091 42.770748,-96.634036 42.771129,-96.633582 42.771262,-96.633487 42.771279,-96.633199 42.771319,-96.633054 42.771332,-96.633004 42.771329,-96.632812 42.7713,-96.63277 42.771283,-96.632733 42.77126,-96.632577 42.771122,-96.632511 42.771026,-96.632469 42.770924,-96.632365 42.770467,-96.632373 42.770397,-96.6324 42.770256,-96.632385 42.770185,-96.632312 42.770015,-96.632196 42.769858,-96.632133 42.769803,-96.631959 42.769678,-96.631918 42.769658,-96.631827 42.769631,-96.631682 42.769615,-96.631633 42.769613,-96.631486 42.769616,-96.631309 42.76965,-96.631183 42.769705,-96.631074 42.769778,-96.630961 42.769937,-96.630874 42.770023,-96.630776 42.770146,-96.630707 42.770317,-96.630648 42.770599,-96.630638 42.770669,-96.630583 42.770768,-96.630536 42.770831,-96.630306 42.771105,-96.629937 42.771482,-96.629929 42.77149,-96.629652 42.771815,-96.629587 42.771868,-96.629473 42.771934,-96.629431 42.771953,-96.629339 42.771977,-96.629245 42.771994,-96.629147 42.772001,-96.62905 42.771997,-96.628865 42.77195,-96.62865 42.771865,-96.62809 42.771576,-96.627705 42.77142,-96.627573 42.771372,-96.627126 42.771225,-96.626881 42.771215,-96.626832 42.771216,-96.626785 42.771225,-96.626398 42.77138,-96.626361 42.771403,-96.626223 42.771538,-96.626197 42.771568,-96.626073 42.771801,-96.626052 42.772194,-96.626054 42.77223,-96.626096 42.772442,-96.626264 42.772928,-96.626526 42.773312,-96.626813 42.773844,-96.626839 42.773874,-96.626905 42.773927,-96.626965 42.773983,-96.627055 42.77411,-96.627081 42.774178,-96.627138 42.774532,-96.627143 42.774711,-96.627107 42.774995,-96.627069 42.775135,-96.626985 42.775302,-96.626859 42.775456,-96.626627 42.775686,-96.626595 42.775713,-96.626523 42.775761,-96.626481 42.77578,-96.626219 42.775877,-96.626084 42.775921,-96.625614 42.776023,-96.625565 42.776026,-96.625517 42.776034,-96.625379 42.776071,-96.625216 42.77615,-96.625171 42.776163,-96.624733 42.776206,-96.624537 42.776211,-96.623608 42.776166,-96.623071 42.776202,-96.622975 42.776218,-96.622929 42.77623,-96.622621 42.77634,-96.622422 42.776445,-96.622283 42.776546,-96.622041 42.776771,-96.621985 42.77683,-96.62184 42.777134,-96.621815 42.777203,-96.621777 42.777343,-96.62177 42.777414,-96.621791 42.777628,-96.621949 42.778152,-96.621966 42.778667,-96.621968 42.778724,-96.621958 42.778795,-96.621921 42.778829,-96.621896 42.77886,-96.621767 42.779053,-96.621751 42.779086,-96.621594 42.779609,-96.621512 42.779777,-96.6215 42.779848,-96.621469 42.780132,-96.621469 42.780168,-96.621476 42.780203,-96.621503 42.780272,-96.621544 42.780337,-96.621509 42.780404,-96.621437 42.780575,-96.621191 42.781042,-96.620996 42.78137,-96.620756 42.781839,-96.620711 42.781941,-96.620502 42.782566,-96.620432 42.782737,-96.620331 42.78305,-96.620122 42.783413,-96.619849 42.783792,-96.619791 42.78385,-96.619503 42.784043,-96.619462 42.784064,-96.619285 42.784124,-96.619049 42.784174,-96.618471 42.784257,-96.617806 42.784381,-96.617306 42.784529,-96.617008 42.784653,-96.616487 42.784921,-96.616148 42.785066,-96.616101 42.785074,-96.616052 42.785075,-96.615905 42.785068,-96.615616 42.785026,-96.615569 42.785016,-96.615528 42.784997,-96.61542 42.784924,-96.615358 42.784868,-96.615284 42.784776,-96.61522 42.784603,-96.615201 42.784497,-96.615246 42.784249,-96.615367 42.783939,-96.615489 42.783557,-96.615518 42.783452,-96.615547 42.783238,-96.615549 42.783167,-96.615467 42.782815,-96.615432 42.782749,-96.615264 42.78253,-96.615204 42.782474,-96.615133 42.782425,-96.615051 42.782386,-96.614882 42.782314,-96.6148 42.782275,-96.61471 42.782247,-96.614612 42.782246,-96.614515 42.782254,-96.614326 42.782293,-96.61428 42.782306,-96.614148 42.782354,-96.614111 42.782377,-96.613945 42.782509,-96.61384 42.782629,-96.613716 42.782975,-96.613695 42.783045,-96.613624 42.783363,-96.613462 42.783812,-96.613264 42.784216,-96.613191 42.784309,-96.613073 42.784426,-96.61297 42.784503,-96.61293 42.784524,-96.612887 42.784541,-96.612707 42.784597,-96.612563 42.78462,-96.612465 42.784622,-96.612272 42.784595,-96.612226 42.784582,-96.611972 42.784475,-96.611932 42.784454,-96.61172 42.784306,-96.61169 42.784278,-96.611548 42.784012,-96.61132 42.783316,-96.611276 42.783214,-96.611046 42.782858,-96.610954 42.782775,-96.610918 42.782751,-96.610536 42.782589,-96.610489 42.782578,-96.61015 42.782538,-96.610052 42.782534,-96.610003 42.782536,-96.609907 42.78255,-96.609837 42.782526,-96.609745 42.782502,-96.609697 42.782494,-96.609599 42.78249,-96.609406 42.782518,-96.609363 42.782534,-96.609216 42.782629,-96.609152 42.782683,-96.609071 42.782772,-96.609049 42.782804,-96.609022 42.782873,-96.609014 42.782944,-96.609019 42.783016,-96.609028 42.78305,-96.609092 42.783104,-96.609102 42.783241,-96.609089 42.783384,-96.609109 42.783705,-96.609104 42.783741,-96.609052 42.783879,-96.609001 42.783979,-96.608979 42.784011,-96.608895 42.784099,-96.608791 42.784175,-96.608752 42.784197,-96.608417 42.784346,-96.608279 42.784384,-96.607993 42.784434,-96.607895 42.784441,-96.607846 42.784438,-96.607559 42.784392,-96.607384 42.784328,-96.607345 42.784306,-96.607312 42.784279,-96.60677 42.783726,-96.606719 42.783686,-96.606571 42.783569,-96.606228 42.783366,-96.606067 42.783284,-96.605982 42.783249,-96.605389 42.783078,-96.605008 42.783009,-96.604959 42.783005,-96.604862 42.783015,-96.60444 42.78311,-96.604179 42.783208,-96.60414 42.78323,-96.603964 42.783355,-96.603934 42.783382,-96.603909 42.783414,-96.603831 42.783544,-96.603695 42.783693,-96.603673 42.783725,-96.603619 42.783824,-96.603567 42.783962,-96.603565 42.783997,-96.603582 42.78414,-96.603684 42.784453,-96.603703 42.78456,-96.603859 42.785157,-96.603864 42.785192,-96.603859 42.785514,-96.603852 42.785549,-96.603723 42.785894,-96.603678 42.785996,-96.603275 42.786487,-96.602978 42.786815,-96.602686 42.787188,-96.602404 42.787759,-96.602355 42.788006,-96.602345 42.788113,-96.602358 42.788184,-96.602404 42.788323,-96.602557 42.78874,-96.60302 42.789014,-96.60331 42.789108,-96.603337 42.789138,-96.603704 42.789426,-96.604038 42.789635,-96.604234 42.789795,-96.604311 42.789839,-96.604521 42.789931,-96.604633 42.790049,-96.604682 42.790111,-96.604742 42.790167,-96.604848 42.790242,-96.604943 42.790286,-96.604981 42.790399,-96.605053 42.790532,-96.605066 42.790567,-96.605229 42.791163,-96.605231 42.79127,-96.605196 42.791447,-96.605007 42.791696,-96.60491 42.791776,-96.60484 42.791827,-96.604403 42.792112,-96.604245 42.792195,-96.604155 42.792224,-96.603732 42.792315,-96.603637 42.792332,-96.60354 42.792344,-96.603442 42.792347,-96.60305 42.792344,-96.602759 42.792315,-96.602712 42.792305,-96.602156 42.792077,-96.601761 42.791935,-96.601473 42.791871,-96.601244 42.791821,-96.600909 42.791766,-96.600765 42.791746,-96.600666 42.791749,-96.599882 42.791793,-96.599538 42.791782,-96.599293 42.791768,-96.598116 42.79181,-96.597628 42.791852,-96.597198 42.791924,-96.597108 42.791952,-96.596849 42.792055,-96.596646 42.792155,-96.596495 42.792247,-96.596059 42.792478,-96.595625 42.792645,-96.595343 42.792788,-96.595272 42.792838,-96.595214 42.792896,-96.595052 42.793115,-96.595035 42.793149,-96.595006 42.793254,-96.595003 42.793468,-96.595009 42.79354,-96.595017 42.793575,-96.59511 42.793778,-96.595173 42.793875,-96.595199 42.793906,-96.595378 42.794076,-96.595479 42.794154,-96.595552 42.794202,-96.595636 42.794238,-96.596228 42.794412,-96.596484 42.794517,-96.596596 42.794586,-96.596775 42.794757,-96.5968 42.794788,-96.596855 42.794887,-96.596968 42.795198,-96.596988 42.795268,-96.597001 42.79541,-96.596933 42.795872,-96.596937 42.795944,-96.596964 42.796049,-96.596991 42.796118,-96.597134 42.796422,-96.597175 42.796487,-96.59729 42.796603,-96.597375 42.79666,-96.597702 42.796819,-96.598145 42.796972,-96.599132 42.797372,-96.599298 42.797447,-96.599378 42.797489,-96.59941 42.797516,-96.599522 42.797634,-96.599589 42.797729,-96.599617 42.797798,-96.599637 42.797867,-96.599704 42.798186,-96.599707 42.798257,-96.599683 42.798435,-96.59946 42.798983,-96.599442 42.799016,-96.59921 42.799331,-96.598976 42.799603,-96.598945 42.799631,-96.598627 42.799854,-96.598506 42.799916,-96.598463 42.799932,-96.59827 42.799961,-96.598172 42.799966,-96.598041 42.799918,-96.597963 42.799875,-96.597832 42.799768,-96.597811 42.799736,-96.597802 42.799701,-96.597747 42.79931,-96.597607 42.79882,-96.597481 42.798512,-96.597317 42.798213,-96.597264 42.798153,-96.59688 42.797828,-96.596574 42.797648,-96.59645 42.79759,-96.596045 42.797461,-96.595857 42.79742,-96.595808 42.797415,-96.595465 42.797431,-96.595276 42.797471,-96.59496 42.79757,-96.594919 42.797588,-96.594588 42.797802,-96.594285 42.798037,-96.594076 42.798235,-96.593605 42.798779,-96.593296 42.799187,-96.592812 42.799969,-96.592594 42.800368,-96.592461 42.800637,-96.592432 42.800705,-96.592422 42.800761,-96.592345 42.801201,-96.592353 42.801272,-96.592425 42.801321,-96.592544 42.801434,-96.592598 42.801493,-96.592806 42.801776,-96.592887 42.801944,-96.592906 42.802014,-96.592911 42.802082,-96.593047 42.802178,-96.593105 42.802235,-96.593131 42.802304,-96.59318 42.802516,-96.593179 42.802587,-96.593172 42.802623,-96.593102 42.802794,-96.593005 42.802958,-96.592169 42.803968,-96.591892 42.804347,-96.591749 42.804575,-96.59161 42.804842,-96.591196 42.805451,-96.591057 42.805867,-96.591003 42.806078,-96.590981 42.806399,-96.590997 42.806578,-96.590997 42.806971,-96.590958 42.807074,-96.590884 42.807244,-96.59081 42.807377,-96.590539 42.807988,-96.590469 42.808233,-96.590465 42.808297,-96.590465 42.808304,-96.590485 42.808447,-96.590525 42.80855,-96.590673 42.808775,-96.590776 42.808897,-96.5909 42.809008,-96.591651 42.809622,-96.591968 42.809846,-96.592049 42.809887,-96.592088 42.809908,-96.592441 42.810035,-96.592912 42.810137,-96.593056 42.810159,-96.593154 42.810166,-96.593694 42.810142,-96.593936 42.810112,-96.594078 42.810085,-96.594466 42.810039,-96.594564 42.810036,-96.594613 42.810041,-96.595284 42.810146,-96.59533 42.810158,-96.595493 42.810239,-96.595566 42.810286,-96.595626 42.810343,-96.595697 42.810437,-96.595723 42.810607,-96.595712 42.810929,-96.59567 42.811177,-96.595639 42.811245,-96.595496 42.811433,-96.595263 42.811865,-96.595239 42.811934,-96.595144 42.812358,-96.595118 42.812643,-96.595121 42.812786,-96.595126 42.812822,-96.595214 42.8131,-96.595306 42.813266,-96.595374 42.813353,-96.59562 42.813671,-96.595798 42.813965,-96.595879 42.814171,-96.595962 42.81474,-96.595945 42.814954,-96.595934 42.814989,-96.595902 42.815057,-96.595677 42.815333,-96.595617 42.81539,-96.595409 42.815542,-96.595143 42.8157,-96.594896 42.815817,-96.594807 42.815846,-96.59457 42.815893,-96.594521 42.815898,-96.594375 42.815903,-96.593886 42.815873,-96.593647 42.815833,-96.592423 42.815463,-96.591632 42.81527,-96.591584 42.815262,-96.591437 42.815259,-96.591096 42.815293,-96.590724 42.815383,-96.590641 42.815421,-96.590605 42.815445,-96.590392 42.815642,-96.590165 42.815999,-96.590089 42.816131,-96.589986 42.816372,-96.589829 42.816746,-96.589782 42.816884,-96.589587 42.817913,-96.589495 42.818039,-96.589367 42.818148,-96.589239 42.8183,-96.589209 42.818328,-96.589174 42.818353,-96.588943 42.818487,-96.588824 42.818473,-96.588731 42.818449,-96.588646 42.818414,-96.588281 42.818232,-96.587665 42.817876,-96.587581 42.817839,-96.58749 42.817861,-96.587442 42.817869,-96.587345 42.817877,-96.586856 42.817848,-96.58671 42.817836,-96.58661 42.817833,-96.586415 42.817828,-96.586268 42.817835,-96.586219 42.817834,-96.586122 42.817822,-96.586029 42.8178,-96.585902 42.817847,-96.585819 42.817886,-96.585781 42.817908,-96.585455 42.818126,-96.585385 42.818177,-96.585158 42.818313,-96.585123 42.818338,-96.584813 42.818615,-96.584705 42.818689,-96.584109 42.819005,-96.584075 42.819031,-96.584051 42.819062,-96.583958 42.819339,-96.583955 42.81941,-96.583978 42.819624,-96.583997 42.819693,-96.584104 42.820004,-96.584168 42.8201,-96.584305 42.82029,-96.584446 42.820388,-96.584527 42.820429,-96.584564 42.820452,-96.584632 42.820504,-96.58488 42.820621,-96.585031 42.820712,-96.585097 42.820764,-96.585463 42.821101,-96.585793 42.821456,-96.585957 42.821715,-96.586037 42.821884,-96.586098 42.822057,-96.586131 42.822233,-96.586119 42.822805,-96.586094 42.822946,-96.585971 42.823402,-96.585808 42.823776,-96.585709 42.823899,-96.585589 42.824013,-96.585413 42.824138,-96.585197 42.824222,-96.584514 42.824423,-96.58434 42.824489,-96.583787 42.82472,-96.583652 42.824763,-96.583514 42.8248,-96.583225 42.824841,-96.583128 42.824851,-96.582833 42.824862,-96.582539 42.824859,-96.581515 42.824756,-96.581319 42.824755,-96.581026 42.824784,-96.580598 42.824865,-96.580554 42.82488,-96.580549 42.824882,-96.580231 42.825043,-96.580193 42.825066,-96.579928 42.825276,-96.579865 42.825331,-96.579808 42.825389,-96.579566 42.825699,-96.579514 42.825759,-96.57945 42.825856,-96.57912 42.826537,-96.579041 42.826668,-96.578809 42.826852,-96.578287 42.827119,-96.57825 42.827143,-96.578152 42.827222,-96.577852 42.827505,-96.577654 42.827791,-96.577635 42.827825,-96.577563 42.827995,-96.577531 42.828136,-96.57753 42.828315,-96.577556 42.828492,-96.57783 42.829067,-96.577891 42.829164,-96.578148 42.829469,-96.578355 42.829669,-96.578707 42.829967,-96.57921 42.830253,-96.579246 42.830277,-96.579398 42.830418,-96.579574 42.830542,-96.57961 42.830573,-96.579796 42.830733,-96.579958 42.830912,-96.580033 42.831004,-96.580192 42.831266,-96.580266 42.831436,-96.580396 42.832036,-96.580434 42.832321,-96.580448 42.832392,-96.580532 42.832671,-96.580561 42.83274,-96.580581 42.832772,-96.580643 42.832828,-96.580719 42.832874,-96.5808 42.832913,-96.580846 42.832927,-96.581224 42.833005,-96.581728 42.833146,-96.581815 42.833179,-96.58215 42.833488,-96.582217 42.833583,-96.582305 42.83375,-96.582326 42.833861,-96.582381 42.834139,-96.582391 42.834282,-96.582362 42.834604,-96.582324 42.83478,-96.582304 42.83485,-96.582164 42.835193,-96.582155 42.835228,-96.582135 42.835371,-96.58208 42.83543,-96.581968 42.835589,-96.581512 42.836381,-96.581498 42.836415,-96.581492 42.836446,-96.581481 42.836521,-96.581474 42.836736,-96.581553 42.837412,-96.581544 42.837519,-96.581489 42.837693,-96.58147 42.837726,-96.581443 42.837756,-96.581378 42.83781,-96.581075 42.837992,-96.580993 42.838031,-96.580907 42.838065,-96.580678 42.838131,-96.580583 42.838149,-96.580193 42.838182,-96.580046 42.838189,-96.579406 42.838186,-96.579112 42.83813,-96.579073 42.838123,-96.578793 42.838056,-96.578704 42.838026,-96.578618 42.837991,-96.578459 42.837907,-96.57833 42.837799,-96.578149 42.837586,-96.578079 42.837494,-96.578036 42.837311,-96.57804 42.837132,-96.578049 42.837097,-96.578172 42.836826,-96.578198 42.836795,-96.57829 42.836712,-96.578438 42.836618,-96.578524 42.836583,-96.57931 42.83629,-96.579389 42.836247,-96.579458 42.836197,-96.579485 42.836167,-96.579577 42.83604,-96.579692 42.835767,-96.579717 42.835626,-96.579705 42.835447,-96.579689 42.835377,-96.579676 42.835342,-96.579574 42.835141,-96.579545 42.835112,-96.579447 42.835032,-96.579377 42.834983,-96.579292 42.834947,-96.578887 42.834818,-96.578605 42.834755,-96.578164 42.834727,-96.578115 42.834729,-96.577907 42.834752,-96.577872 42.834756,-96.577682 42.834792,-96.577276 42.83492,-96.576755 42.83512,-96.576309 42.835343,-96.575848 42.835611,-96.575599 42.835783,-96.575409 42.835947,-96.575336 42.83604,-96.575193 42.836306,-96.575163 42.836411,-96.575101 42.837016,-96.575044 42.837335,-96.574937 42.837611,-96.574919 42.837644,-96.574808 42.837762,-96.574747 42.837818,-96.574675 42.837866,-96.574513 42.837948,-96.574424 42.837978,-96.574303 42.837963,-96.574258 42.837949,-96.57413 42.837896,-96.573966 42.837817,-96.573894 42.837768,-96.573444 42.837389,-96.573265 42.837267,-96.573189 42.837222,-96.572942 42.837104,-96.57285 42.837078,-96.572471 42.837002,-96.572375 42.836989,-96.572276 42.836988,-96.571932 42.836996,-96.57145 42.837065,-96.571172 42.837137,-96.570993 42.837196,-96.569579 42.837775,-96.569402 42.837838,-96.569079 42.837923,-96.569031 42.837928,-96.568932 42.837926,-96.568884 42.837919,-96.5686 42.837861,-96.568465 42.837819,-96.568382 42.837781,-96.568343 42.837759,-96.568046 42.837521,-96.567966 42.837431,-96.567948 42.837397,-96.567896 42.837186,-96.567893 42.837008,-96.567915 42.836902,-96.567939 42.836833,-96.567997 42.836734,-96.568117 42.836577,-96.568303 42.836411,-96.568614 42.836182,-96.56915 42.835868,-96.569184 42.835843,-96.569407 42.835652,-96.569535 42.835499,-96.569638 42.835316,-96.569723 42.835169,-96.569737 42.835135,-96.569772 42.83485,-96.569769 42.834814,-96.569714 42.834568,-96.569683 42.8345,-96.569547 42.834309,-96.569311 42.834038,-96.56928 42.83401,-96.56899 42.833817,-96.567876 42.833114,-96.567529 42.832844,-96.567255 42.832592,-96.567033 42.832355,-96.566858 42.83214,-96.56657 42.831749,-96.566185 42.831227,-96.565765 42.830743,-96.565259 42.830216,-96.564937 42.829814,-96.564844 42.829649,-96.564762 42.829481,-96.564715 42.829342,-96.564699 42.829236,-96.56468 42.829051,-96.564671 42.828951,-96.564668 42.82888,-96.564638 42.828775,-96.564609 42.828708,-96.564545 42.828611,-96.564358 42.828401,-96.564324 42.828375,-96.564032 42.828244,-96.563942 42.828215,-96.563895 42.828204,-96.563751 42.828183,-96.563604 42.828174,-96.563555 42.828177,-96.563177 42.828256,-96.563042 42.8283,-96.5624 42.828629,-96.561972 42.828924,-96.56194 42.828951,-96.561604 42.829302,-96.561554 42.829363,-96.561537 42.829397,-96.561518 42.829467,-96.561485 42.829644,-96.561487 42.82968,-96.561507 42.829712,-96.561535 42.829742,-96.561747 42.82989,-96.562147 42.830099,-96.562181 42.830125,-96.562428 42.830347,-96.562513 42.830434,-96.562749 42.830706,-96.562854 42.830907,-96.563012 42.831356,-96.563016 42.831392,-96.563019 42.831785,-96.563012 42.831821,-96.562973 42.831924,-96.562927 42.832026,-96.562645 42.832597,-96.562441 42.833187,-96.562387 42.833398,-96.562381 42.833745,-96.562395 42.833995,-96.562564 42.834609,-96.562646 42.834906,-96.562689 42.83519,-96.562714 42.835259,-96.562823 42.835496,-96.562834 42.835531,-96.562855 42.835673,-96.562862 42.835887,-96.562809 42.836422,-96.562671 42.836839,-96.562537 42.83703,-96.562511 42.83706,-96.562086 42.837455,-96.562029 42.837513,-96.561938 42.837585,-96.561529 42.837907,-96.561359 42.838082,-96.561316 42.838146,-96.56124 42.838427,-96.561219 42.83864,-96.561172 42.838779,-96.561125 42.838881,-96.560976 42.839106,-96.560944 42.839134,-96.56087 42.83918,-96.560405 42.839444,-96.560279 42.839501,-96.560235 42.839515,-96.560179 42.839528,-96.559721 42.839638,-96.559333 42.839681,-96.559284 42.83968,-96.558942 42.83965,-96.558896 42.839639,-96.558543 42.839512,-96.558459 42.839475,-96.558312 42.839381,-96.558205 42.839307,-96.557847 42.839012,-96.557818 42.838984,-96.557622 42.838736,-96.557296 42.838176,-96.557134 42.837839,-96.556877 42.837453,-96.556762 42.837294,-96.55668 42.837259,-96.55652 42.837176,-96.556484 42.837152,-96.556376 42.837038,-96.556289 42.836946,-96.556167 42.836834,-96.556116 42.836773,-96.556072 42.836709,-96.556 42.836538,-96.555787 42.836461,-96.554944 42.836267,-96.553986 42.836106,-96.553503 42.836041,-96.553389 42.836028,-96.553068 42.835992,-96.552826 42.835969,-96.552778 42.835961,-96.552239 42.83598,-96.552191 42.835988,-96.551568 42.836202,-96.551528 42.836222,-96.551381 42.836317,-96.551127 42.836535,-96.551037 42.83662,-96.550875 42.836799,-96.550592 42.837149,-96.550562 42.837178,-96.550322 42.837531,-96.550308 42.837555,-96.549652 42.8388,-96.54945 42.839277,-96.549417 42.839345,-96.549305 42.839543,-96.548963 42.84005,-96.548701 42.84044,-96.54864 42.840537,-96.548627 42.840572,-96.548586 42.840748,-96.548586 42.84082,-96.548598 42.840891,-96.548919 42.841057,-96.548964 42.841073,-96.549243 42.841142,-96.549337 42.841162,-96.549724 42.841214,-96.550631 42.841376,-96.550907 42.841452,-96.551128 42.84153,-96.552045 42.841876,-96.552258 42.841965,-96.552634 42.842133,-96.552714 42.842175,-96.553164 42.842506,-96.553224 42.842562,-96.553537 42.842896,-96.553805 42.843182,-96.553904 42.843306,-96.55425 42.843858,-96.554287 42.843925,-96.55459 42.844642,-96.55463 42.844782,-96.554771 42.845235,-96.554796 42.845377,-96.554815 42.845555,-96.554818 42.845877,-96.554838 42.846378,-96.55494 42.847196,-96.55497 42.847301,-96.555125 42.84764,-96.555301 42.847935,-96.55552 42.848215,-96.555839 42.848487,-96.555938 42.848606,-96.556036 42.84877,-96.556075 42.84891,-96.556081 42.848946,-96.556088 42.849196,-96.556083 42.849231,-96.556071 42.849266,-96.556036 42.849333,-96.555891 42.84952,-96.555828 42.849575,-96.555714 42.849642,-96.555629 42.849678,-96.555497 42.849726,-96.555266 42.849787,-96.555119 42.849791,-96.55507 42.849787,-96.555022 42.849778,-96.554884 42.849741,-96.55475 42.849695,-96.554554 42.849588,-96.554222 42.849325,-96.553577 42.848738,-96.553413 42.848605,-96.553153 42.848441,-96.552809 42.848238,-96.552722 42.848206,-96.551597 42.847848,-96.55077 42.847626,-96.55068 42.847599,-96.550586 42.84758,-96.550537 42.847574,-96.550195 42.847584,-96.549951 42.847605,-96.549764 42.847647,-96.54972 42.847663,-96.549556 42.847742,-96.549519 42.847765,-96.549452 42.847817,-96.549425 42.847847,-96.549321 42.848085,-96.549316 42.848121,-96.549338 42.848335,-96.549348 42.84837,-96.549438 42.848536,-96.549482 42.8486,-96.549541 42.848655,-96.549825 42.848854,-96.550132 42.849032,-96.550162 42.84906,-96.550206 42.84911,-96.550426 42.849362,-96.55047 42.849426,-96.550503 42.849493,-96.550538 42.849634,-96.550564 42.849848,-96.550558 42.850098,-96.550465 42.850302,-96.550423 42.850366,-96.550161 42.850626,-96.55011 42.850687,-96.549997 42.850804,-96.549945 42.850864,-96.549692 42.851083,-96.549657 42.851108,-96.549454 42.851208,-96.549407 42.851218,-96.549165 42.851251,-96.549116 42.851253,-96.548777 42.851211,-96.548733 42.851195,-96.548418 42.851023,-96.548351 42.850971,-96.548083 42.850715,-96.548001 42.850626,-96.547575 42.850063,-96.547548 42.850033,-96.547393 42.849895,-96.547289 42.849824,-96.547177 42.849748,-96.547138 42.849727,-96.547091 42.849715,-96.546615 42.849625,-96.546531 42.849624,-96.546076 42.849621,-96.545978 42.849628,-96.545694 42.849685,-96.545512 42.849739,-96.545262 42.849854,-96.545108 42.849943,-96.544947 42.850078,-96.544857 42.850162,-96.544831 42.850193,-96.544577 42.850657,-96.544469 42.850856,-96.544385 42.851062,-96.544367 42.851095,-96.544193 42.851351,-96.544051 42.851565,-96.543931 42.851837,-96.543759 42.852359,-96.543728 42.852427,-96.543428 42.852916,-96.543273 42.853083,-96.543209 42.853153,-96.543003 42.853477,-96.542912 42.853603,-96.542688 42.854038,-96.542219 42.855131,-96.542136 42.855337,-96.541717 42.856329,-96.541455 42.856868,-96.541357 42.857145,-96.541342 42.857215,-96.541323 42.857358,-96.541168 42.857882,-96.541152 42.857989,-96.541142 42.858167,-96.541152 42.858238,-96.541244 42.858516,-96.541253 42.858535,-96.541464 42.858952,-96.541509 42.859016,-96.541825 42.859378,-96.542108 42.859576,-96.54219 42.859616,-96.542234 42.859631,-96.54262 42.859688,-96.542701 42.859681,-96.542718 42.85968,-96.542763 42.859666,-96.54302 42.859561,-96.543112 42.859504,-96.543177 42.85945,-96.543204 42.85942,-96.543282 42.859289,-96.543315 42.858789,-96.543322 42.858754,-96.543346 42.858685,-96.543559 42.858247,-96.543581 42.858215,-96.543609 42.858185,-96.543768 42.858049,-96.544198 42.857754,-96.544547 42.857556,-96.544831 42.857358,-96.544933 42.85728,-96.54506 42.857171,-96.545212 42.857081,-96.545359 42.857068,-96.545798 42.857103,-96.545941 42.857129,-96.546176 42.857179,-96.546662 42.857352,-96.546784 42.857411,-96.546819 42.857436,-96.546937 42.85755,-96.546984 42.857613,-96.547062 42.85782,-96.547117 42.858139,-96.547117 42.85821,-96.547065 42.858746,-96.547014 42.858957,-96.546948 42.859129,-96.546864 42.859258,-96.546574 42.859632,-96.546534 42.859732,-96.546417 42.859967,-96.546254 42.860187,-96.546214 42.860252,-96.546147 42.860424,-96.546067 42.860667,-96.546035 42.860916,-96.546047 42.860987,-96.546074 42.861092,-96.5461 42.861161,-96.546122 42.861193,-96.546201 42.861283,-96.546409 42.861436,-96.546531 42.861496,-96.546575 42.861512,-96.547026 42.861652,-96.547074 42.861661,-96.54717 42.861675,-96.547318 42.861676,-96.547607 42.861635,-96.547745 42.861598,-96.548033 42.861556,-96.548132 42.861551,-96.548229 42.861561,-96.54847 42.861596,-96.548806 42.861651,-96.548944 42.861689,-96.548986 42.861708,-96.549121 42.861812,-96.549332 42.862053,-96.549989 42.862586,-96.550183 42.862793,-96.550206 42.862824,-96.550346 42.863091,-96.550392 42.863193,-96.550402 42.863228,-96.550451 42.863548,-96.550449 42.863576,-96.550445 42.863655,-96.550438 42.86369,-96.550414 42.863759,-96.550358 42.863859,-96.550289 42.863953,-96.550227 42.864008,-96.550116 42.864079,-96.550031 42.864114,-96.549898 42.864159,-96.54985 42.864168,-96.549801 42.864172,-96.549408 42.864168,-96.549311 42.864163,-96.549027 42.864106,-96.548764 42.864009,-96.548433 42.863854,-96.547998 42.863687,-96.547628 42.863592,-96.547533 42.863572,-96.547389 42.86355,-96.547243 42.863534,-96.547194 42.863533,-96.547097 42.86354,-96.546905 42.863575,-96.546861 42.86359,-96.546786 42.863637,-96.546692 42.863719,-96.546616 42.863811,-96.546573 42.863914,-96.546524 42.864125,-96.546396 42.864942,-96.546237 42.865502,-96.546217 42.86563,-96.546005 42.866291,-96.545984 42.866433,-96.545947 42.866861,-96.545956 42.866968,-96.546024 42.867249,-96.546174 42.867552,-96.546288 42.867711,-96.546405 42.867826,-96.54655 42.867921,-96.546672 42.867982,-96.547794 42.868347,-96.548217 42.86853,-96.548334 42.868595,-96.549422 42.869319,-96.549623 42.869565,-96.54964 42.869599,-96.549682 42.869738,-96.549701 42.86988,-96.549701 42.869916,-96.549674 42.870166,-96.549642 42.870307,-96.549626 42.870341,-96.549486 42.870569,-96.549436 42.87063,-96.549376 42.870687,-96.548849 42.871062,-96.548693 42.871201,-96.548636 42.871259,-96.548395 42.87161,-96.548267 42.871763,-96.547957 42.872249,-96.547733 42.872646,-96.547564 42.873057,-96.547509 42.873157,-96.547366 42.873596,-96.547146 42.873955,-96.547022 42.874065,-96.546964 42.874122,-96.54676 42.874366,-96.546729 42.874394,-96.546561 42.874524,-96.546468 42.874547,-96.546324 42.874573,-96.546226 42.874571,-96.546129 42.874559,-96.545702 42.874474,-96.545606 42.87446,-96.545164 42.874452,-96.544918 42.874468,-96.544588 42.874539,-96.543946 42.874719,-96.543857 42.874749,-96.543219 42.875083,-96.541829 42.876096,-96.541454 42.876428,-96.541426 42.876457,-96.541381 42.87652,-96.541345 42.876587,-96.541263 42.876716,-96.541167 42.87688,-96.540914 42.877143,-96.540852 42.877198,-96.540484 42.877485,-96.540445 42.877507,-96.540189 42.877614,-96.539788 42.87775,-96.539603 42.877798,-96.538938 42.877927,-96.538438 42.878078,-96.537855 42.878344,-96.53767 42.878462,-96.537652 42.878565,-96.537635 42.878743,-96.537636 42.878779,-96.537649 42.878813,-96.537837 42.879104,-96.537961 42.879215,-96.538416 42.879577,-96.538557 42.879689,-96.53881 42.879953,-96.539284 42.880363,-96.53942 42.880466,-96.539474 42.880526,-96.539532 42.880625,-96.539595 42.880658,-96.539627 42.880685,-96.539856 42.880917,-96.540352 42.881534,-96.540465 42.881651,-96.540534 42.881702,-96.540613 42.881745,-96.542392 42.882355,-96.542931 42.882605,-96.543174 42.882782,-96.543206 42.882809,-96.543258 42.88287,-96.543464 42.883233,-96.543485 42.883303,-96.543511 42.883552,-96.543498 42.88373,-96.543485 42.883765,-96.543379 42.883965,-96.543312 42.884061,-96.543284 42.88409,-96.54322 42.884144,-96.543138 42.884184,-96.543095 42.8842,-96.54228 42.884452,-96.540627 42.885007,-96.54024 42.885163,-96.540028 42.885255,-96.539102 42.885726,-96.538815 42.885864,-96.538245 42.886205,-96.537977 42.886414,-96.537885 42.886497,-96.537858 42.886527,-96.537695 42.886748,-96.53768 42.886782,-96.537662 42.886852,-96.537657 42.887066,-96.537663 42.887102,-96.53774 42.887271,-96.537793 42.887372,-96.53803 42.8876,-96.538144 42.887668,-96.538714 42.887856,-96.538826 42.887888,-96.53931 42.888026,-96.539396 42.88806,-96.539678 42.888205,-96.539715 42.888228,-96.540008 42.88847,-96.540353 42.888818,-96.540371 42.888851,-96.540439 42.889096,-96.540443 42.889131,-96.540376 42.889449,-96.540237 42.889596,-96.540204 42.889623,-96.540165 42.889645,-96.539838 42.889803,-96.539748 42.889832,-96.539467 42.889897,-96.539223 42.889921,-96.539075 42.889924,-96.538584 42.889916,-96.538536 42.889911,-96.538154 42.889844,-96.537751 42.889712,-96.537252 42.889484,-96.537074 42.889423,-96.536887 42.889381,-96.536741 42.889367,-96.536593 42.88937,-96.536401 42.8894,-96.536308 42.889423,-96.536221 42.889456,-96.536011 42.889549,-96.535778 42.88968,-96.534955 42.890393,-96.534804 42.890485,-96.534682 42.890546,-96.534598 42.890582,-96.534454 42.890607,-96.534357 42.890616,-96.534014 42.890629,-96.533528 42.890581,-96.533137 42.890554,-96.531661 42.890532,-96.530878 42.89056,-96.529057 42.890568,-96.528883 42.89056,-96.528812 42.890557,-96.528326 42.890502,-96.528265 42.890535,-96.528088 42.890599,-96.528041 42.890609,-96.527992 42.890614,-96.52765 42.890598,-96.527306 42.890604,-96.52721 42.890617,-96.527163 42.890628,-96.526714 42.890773,-96.526627 42.890807,-96.526134 42.8911,-96.52609 42.891117,-96.525907 42.891169,-96.525858 42.891175,-96.52576 42.891179,-96.525662 42.891174,-96.52559 42.891241,-96.525479 42.89136,-96.525435 42.891424,-96.525328 42.891661,-96.525287 42.89191,-96.525309 42.892267,-96.525329 42.892337,-96.525381 42.892437,-96.525478 42.892562,-96.525506 42.892591,-96.525664 42.892728,-96.525739 42.892774,-96.526039 42.892897,-96.526174 42.892939,-96.52627 42.892956,-96.526766 42.893012,-96.527532 42.8931,-96.527628 42.893116,-96.528358 42.893328,-96.529011 42.893578,-96.529168 42.893664,-96.529239 42.893714,-96.529434 42.893875,-96.529518 42.893963,-96.529568 42.894024,-96.529692 42.894218,-96.529781 42.894385,-96.529928 42.894837,-96.529946 42.895015,-96.529951 42.895194,-96.529938 42.895337,-96.530027 42.895419,-96.530076 42.895481,-96.530107 42.895549,-96.530113 42.895585,-96.530112 42.895764,-96.530104 42.895835,-96.530023 42.896004,-96.530003 42.896037,-96.529928 42.896128,-96.529834 42.896211,-96.529759 42.896257,-96.529716 42.896274,-96.529488 42.896342,-96.529149 42.89638,-96.528828 42.89647,-96.528786 42.896489,-96.528675 42.896559,-96.528552 42.896671,-96.528499 42.896731,-96.528375 42.896925,-96.528349 42.896995,-96.528346 42.897173,-96.528376 42.897387,-96.528412 42.897472,-96.528509 42.897636,-96.528536 42.897666,-96.528734 42.897825,-96.528873 42.897926,-96.528987 42.897994,-96.529355 42.898174,-96.529484 42.898226,-96.530627 42.898554,-96.530985 42.898674,-96.531304 42.898842,-96.532246 42.899416,-96.53293 42.899699,-96.533334 42.899902,-96.533458 42.89996,-96.533685 42.900029,-96.534054 42.900129,-96.534197 42.900156,-96.534534 42.900208,-96.534767 42.900266,-96.534854 42.900299,-96.535022 42.900372,-96.535625 42.900736,-96.535666 42.900756,-96.535934 42.900843,-96.536124 42.900879,-96.53637 42.90088,-96.536613 42.900854,-96.536752 42.900817,-96.537081 42.900657,-96.537161 42.900619,-96.537278 42.900554,-96.537685 42.900295,-96.537846 42.90016,-96.538164 42.899937,-96.538202 42.899916,-96.538248 42.899902,-96.538625 42.89982,-96.538771 42.899806,-96.539017 42.899803,-96.539113 42.899816,-96.539347 42.899871,-96.539531 42.899939,-96.539573 42.899958,-96.539761 42.900073,-96.539863 42.900151,-96.539923 42.900207,-96.540054 42.900359,-96.540547 42.901139,-96.540835 42.90171,-96.54091 42.901842,-96.541296 42.902381,-96.541478 42.902594,-96.542048 42.903085,-96.542506 42.90341,-96.542872 42.903699,-96.54293 42.903756,-96.543071 42.904061,-96.543081 42.904096,-96.543088 42.904202,-96.543087 42.904417,-96.543081 42.904438,-96.543069 42.904487,-96.543033 42.904553,-96.542877 42.904736,-96.542686 42.904899,-96.542651 42.904924,-96.542416 42.905054,-96.542325 42.905079,-96.542276 42.905085,-96.54208 42.905097,-96.541883 42.905096,-96.541786 42.905084,-96.541505 42.905019,-96.540642 42.904758,-96.539987 42.904602,-96.539748 42.90456,-96.539553 42.904541,-96.539406 42.904537,-96.538965 42.904571,-96.538675 42.90461,-96.537727 42.904802,-96.537547 42.904858,-96.53746 42.904893,-96.536964 42.905124,-96.536815 42.905218,-96.536601 42.905414,-96.536478 42.905609,-96.536467 42.905643,-96.536491 42.905928,-96.53651 42.905998,-96.536545 42.906065,-96.536588 42.906129,-96.536942 42.906557,-96.536976 42.906584,-96.537138 42.906678,-96.538089 42.907232,-96.538157 42.907283,-96.538421 42.907541,-96.538573 42.907805,-96.538586 42.90784,-96.538624 42.908052,-96.538632 42.908159,-96.53863 42.908195,-96.5386 42.908373,-96.53853 42.908581,-96.538458 42.908771,-96.538308 42.909166,-96.538063 42.909756,-96.537727 42.91057,-96.537733 42.910785,-96.537743 42.91082,-96.537809 42.910954,-96.537832 42.910986,-96.53786 42.911015,-96.53797 42.911098,-96.538207 42.911147,-96.538592 42.911209,-96.538835 42.911232,-96.539174 42.911277,-96.539363 42.911317,-96.539584 42.911395,-96.539625 42.911415,-96.53973 42.911491,-96.539829 42.91157,-96.539885 42.911628,-96.539909 42.91166,-96.540009 42.91201,-96.540014 42.912081,-96.540023 42.912117,-96.5401 42.912318,-96.540063 42.912401,-96.53996 42.912677,-96.539383 42.913626,-96.53926 42.913898,-96.539134 42.914317,-96.53909 42.914709,-96.538943 42.915306,-96.538901 42.915409,-96.538745 42.91571,-96.538688 42.915809,-96.538542 42.915994,-96.538335 42.916206,-96.538257 42.916286,-96.538055 42.916532,-96.537918 42.916761,-96.537847 42.916894,-96.537834 42.916929,-96.537772 42.917175,-96.537759 42.917318,-96.53777 42.917425,-96.537835 42.917634,-96.537874 42.9177,-96.538087 42.917982,-96.538122 42.918004,-96.538215 42.918028,-96.538302 42.918062,-96.538343 42.918082,-96.538571 42.918219,-96.538948 42.918388,-96.539939 42.918603,-96.539984 42.918617,-96.540156 42.918686,-96.540565 42.918886,-96.540862 42.919073,-96.540988 42.919183,-96.541164 42.919406,-96.541205 42.919484,-96.541269 42.919606,-96.541525 42.920261,-96.541675 42.920749,-96.541721 42.920997,-96.541739 42.921391,-96.541737 42.921927,-96.541705 42.922498,-96.541619 42.922922,-96.541451 42.923517,-96.541283 42.923927,-96.541034 42.924356,-96.540963 42.924448,-96.540974 42.924483,-96.540977 42.924519,-96.540966 42.924626,-96.540954 42.924661,-96.540903 42.924761,-96.54088 42.924792,-96.540812 42.924843,-96.540665 42.924938,-96.540595 42.924988,-96.540555 42.925009,-96.540511 42.925025,-96.540463 42.925033,-96.54022 42.925058,-96.540171 42.92506,-96.540073 42.925057,-96.539926 42.925066,-96.539758 42.924973,-96.539674 42.924935,-96.539629 42.92492,-96.539349 42.924852,-96.539258 42.924825,-96.538791 42.924626,-96.538547 42.924505,-96.538282 42.924345,-96.537965 42.924121,-96.537598 42.923831,-96.537298 42.923548,-96.53684 42.923277,-96.5365 42.923132,-96.536409 42.923106,-96.536065 42.923091,-96.535967 42.923092,-96.535679 42.923139,-96.535538 42.923172,-96.534765 42.923401,-96.534543 42.923478,-96.534255 42.923616,-96.534106 42.92371,-96.533294 42.924331,-96.533133 42.924466,-96.532981 42.92465,-96.532953 42.924719,-96.532952 42.924754,-96.532964 42.924861,-96.532975 42.924896,-96.533018 42.92496,-96.533187 42.925136,-96.533254 42.925188,-96.533327 42.925234,-96.533423 42.925251,-96.533469 42.925264,-96.533555 42.925299,-96.533588 42.925325,-96.533828 42.925595,-96.534236 42.925999,-96.534438 42.926244,-96.534475 42.926311,-96.534562 42.926553,-96.534584 42.926659,-96.534604 42.926837,-96.534592 42.92698,-96.534575 42.92705,-96.534468 42.927399,-96.534223 42.927905,-96.534105 42.928102,-96.534061 42.928166,-96.533986 42.928258,-96.533761 42.928492,-96.532509 42.929687,-96.532156 42.930016,-96.531862 42.930303,-96.52967 42.932636,-96.528843 42.933391,-96.527595 42.934253,-96.527457 42.934355,-96.527264 42.934517,-96.526437 42.935078,-96.52597 42.935337,-96.525889 42.935382,-96.525606 42.935525,-96.525312 42.935627,-96.525078 42.935684,-96.524458 42.935798,-96.524164 42.935816,-96.523771 42.935819,-96.523137 42.935756,-96.522854 42.935694,-96.522767 42.93566,-96.522177 42.935402,-96.52178 42.93519,-96.521704 42.935145,-96.521373 42.93488,-96.52132 42.93482,-96.521178 42.934592,-96.520722 42.933958,-96.52058 42.933691,-96.520543 42.933587,-96.52052 42.933445,-96.52053 42.932765,-96.520484 42.932517,-96.52047 42.932482,-96.52045 42.93245,-96.520324 42.932296,-96.520295 42.932267,-96.519884 42.932011,-96.519799 42.931976,-96.51929 42.931841,-96.518607 42.931776,-96.51846 42.931766,-96.518312 42.931762,-96.518245 42.931784,-96.518055 42.931822,-96.517604 42.931965,-96.517176 42.932142,-96.516868 42.932321,-96.516835 42.932347,-96.516685 42.932489,-96.516505 42.932743,-96.51647 42.93281,-96.516415 42.933058,-96.516342 42.933735,-96.516337 42.934343,-96.516347 42.934521,-96.51645 42.9352,-96.51658 42.935507,-96.516745 42.935767,-96.516819 42.93586,-96.517474 42.936293,-96.517725 42.936483,-96.517815 42.936551,-96.518193 42.93678,-96.518234 42.9368,-96.518784 42.936957,-96.519045 42.937057,-96.519123 42.937101,-96.519179 42.937159,-96.519858 42.937989,-96.520073 42.938464,-96.520162 42.938888,-96.520164 42.938924,-96.520089 42.939422,-96.519996 42.939736,-96.51987 42.939969,-96.519824 42.940033,-96.519587 42.940305,-96.519345 42.94053,-96.518928 42.940834,-96.518522 42.941093,-96.517844 42.941518,-96.517285 42.94181,-96.517049 42.941939,-96.516755 42.942129,-96.516503 42.942299,-96.515596 42.942955,-96.514857 42.943531,-96.514775 42.94362,-96.514675 42.943743,-96.514627 42.943845,-96.514575 42.943983,-96.514566 42.944018,-96.514567 42.944054,-96.514608 42.944338,-96.514604 42.944374,-96.514586 42.944444,-96.514529 42.944543,-96.514506 42.944575,-96.51431 42.944781,-96.514276 42.944807,-96.514198 42.944851,-96.513924 42.94493,-96.513875 42.944934,-96.513631 42.944913,-96.513535 42.944896,-96.513442 42.944874,-96.512798 42.94461,-96.512708 42.944582,-96.512431 42.944506,-96.512286 42.944485,-96.511606 42.944404,-96.511312 42.944391,-96.510683 42.944479,-96.510258 42.94457,-96.510079 42.94463,-96.509869 42.944723,-96.50949 42.944951,-96.509426 42.945005,-96.509288 42.945153,-96.509246 42.945217,-96.509138 42.945417,-96.509127 42.945452,-96.509117 42.945523,-96.509126 42.945774,-96.509136 42.945845,-96.509224 42.946012,-96.509247 42.946081,-96.50926 42.946188,-96.509242 42.94651,-96.509222 42.946616,-96.509187 42.94672,-96.50918 42.946729,-96.509081 42.946882,-96.508864 42.947121,-96.50845 42.947475,-96.508224 42.947709,-96.508047 42.947924,-96.508023 42.947971,-96.507931 42.948249,-96.507907 42.948391,-96.507907 42.948427,-96.507962 42.948962,-96.50797 42.948997,-96.508041 42.949168,-96.508082 42.949234,-96.508135 42.949294,-96.5082 42.949348,-96.508216 42.94938,-96.508234 42.949487,-96.508254 42.949556,-96.508343 42.949723,-96.508354 42.949758,-96.508431 42.950183,-96.508558 42.950566,-96.50863 42.950737,-96.509148 42.951818,-96.50921 42.951991,-96.509317 42.952413,-96.509325 42.952514,-96.509323 42.952729,-96.50929 42.952942,-96.509192 42.953256,-96.509031 42.953556,-96.508945 42.953685,-96.508919 42.953715,-96.508886 42.953742,-96.508709 42.953866,-96.508626 42.953901,-96.508449 42.953963,-96.508352 42.953976,-96.508303 42.953978,-96.507752 42.953969,-96.507466 42.953965,-96.506777 42.953987,-96.506729 42.953992,-96.506392 42.954046,-96.506061 42.954114,-96.505647 42.95423,-96.505288 42.954347,-96.504853 42.954514,-96.504731 42.954576,-96.504555 42.954701,-96.504203 42.955045,-96.50415 42.955105,-96.504011 42.955334,-96.50394 42.955467,-96.503759 42.95606,-96.503721 42.956237,-96.503684 42.956341,-96.503646 42.956407,-96.5035 42.956551,-96.503196 42.956785,-96.502744 42.957061,-96.502661 42.957099,-96.502357 42.957216,-96.502261 42.957232,-96.502068 42.957257,-96.501924 42.95728,-96.501317 42.957291,-96.50109 42.957296,-96.500975 42.957295,-96.500337 42.957334,-96.500091 42.957334,-96.499606 42.957393,-96.499559 42.957402,-96.499375 42.957454,-96.499293 42.957494,-96.49922 42.957541,-96.499186 42.957568,-96.498982 42.957769,-96.498963 42.957802,-96.498923 42.957924,-96.498894 42.958011,-96.498878 42.958153,-96.498888 42.95826,-96.498909 42.95833,-96.499012 42.958471,-96.499117 42.958615,-96.499175 42.958672,-96.499283 42.958745,-96.500287 42.959378,-96.500445 42.959492,-96.500531 42.959555,-96.500942 42.959811,-96.501324 42.96009,-96.501552 42.960323,-96.501655 42.960445,-96.501719 42.960542,-96.501839 42.960777,-96.501968 42.961269,-96.502176 42.962547,-96.502234 42.963007,-96.502266 42.963259,-96.50231 42.963974,-96.502314 42.965297,-96.502367 42.966084,-96.502512 42.966787,-96.502682 42.967605,-96.502719 42.967709,-96.502966 42.968214,-96.503005 42.968279,-96.504143 42.969707,-96.504419 42.970045,-96.504755 42.970562,-96.50516 42.971095,-96.50534 42.971265,-96.505375 42.97129,-96.505664 42.971427,-96.505846 42.971482,-96.506136 42.971523,-96.506283 42.971527,-96.506628 42.971522,-96.506726 42.971515,-96.506891 42.971491,-96.506918 42.971464,-96.506951 42.971434,-96.507126 42.971309,-96.507166 42.971287,-96.507246 42.971258,-96.507531 42.971202,-96.507776 42.971192,-96.507825 42.971197,-96.50792 42.971216,-96.507964 42.971233,-96.508044 42.971274,-96.508111 42.971319,-96.508436 42.971289,-96.508535 42.971284,-96.509027 42.971287,-96.509224 42.971292,-96.510422 42.971389,-96.510497 42.971395,-96.510643 42.971412,-96.511368 42.971514,-96.511654 42.971569,-96.512503 42.971753,-96.513242 42.971951,-96.513921 42.972163,-96.51405 42.972215,-96.514386 42.972381,-96.514863 42.972618,-96.515119 42.972706,-96.515351 42.972765,-96.515643 42.972794,-96.515689 42.972806,-96.515773 42.972844,-96.515958 42.972962,-96.515992 42.972988,-96.516174 42.973157,-96.516223 42.973219,-96.516241 42.973253,-96.516353 42.973526,-96.516474 42.974309,-96.516618 42.974834,-96.516657 42.974938,-96.516788 42.975245,-96.516925 42.975435,-96.517021 42.975516,-96.517301 42.975717,-96.517383 42.975757,-96.51785 42.975955,-96.518244 42.976102,-96.518627 42.976264,-96.518746 42.976327,-96.518861 42.976394,-96.519176 42.97662,-96.519307 42.976727,-96.519525 42.976921,-96.51958 42.97698,-96.520053 42.977607,-96.520118 42.977703,-96.520414 42.978271,-96.520564 42.978832,-96.520647 42.979257,-96.520755 42.979642,-96.52082 42.979923,-96.52084 42.980278,-96.520838 42.980314,-96.520828 42.980349,-96.520771 42.980448,-96.520741 42.980476,-96.520703 42.980499,-96.520539 42.980578,-96.5205 42.980601,-96.520431 42.980652,-96.520338 42.980651,-96.52029 42.980646,-96.520052 42.980598,-96.519829 42.980536,-96.519269 42.980383,-96.518881 42.980226,-96.518706 42.980161,-96.518326 42.980085,-96.518277 42.980082,-96.518032 42.980094,-96.517935 42.980106,-96.517795 42.98014,-96.517707 42.980172,-96.517666 42.980192,-96.517409 42.980358,-96.517283 42.980468,-96.517199 42.980556,-96.517041 42.980779,-96.516903 42.980927,-96.516831 42.98102,-96.516702 42.981328,-96.516688 42.981399,-96.516685 42.98166,-96.516683 42.981791,-96.5167 42.981898,-96.516823 42.982131,-96.517 42.982303,-96.517247 42.982477,-96.517282 42.982495,-96.517805 42.982769,-96.517922 42.982834,-96.518379 42.98321,-96.518496 42.983325,-96.518776 42.983661,-96.518798 42.983693,-96.518897 42.983895,-96.518914 42.984038,-96.518906 42.984323,-96.518847 42.984497,-96.518767 42.984665,-96.51861 42.984914,-96.518502 42.985086,-96.518472 42.985114,-96.518364 42.985187,-96.518323 42.985206,-96.518206 42.985272,-96.518113 42.985294,-96.518015 42.9853,-96.517769 42.985296,-96.517672 42.985282,-96.517518 42.985105,-96.517221 42.984866,-96.516622 42.984442,-96.516429 42.984331,-96.516299 42.98428,-96.51598 42.984185,-96.515932 42.984178,-96.515441 42.984143,-96.515342 42.984141,-96.51505 42.984174,-96.514909 42.984205,-96.514819 42.984234,-96.514192 42.984515,-96.513569 42.984865,-96.512657 42.98541,-96.51258 42.985445,-96.512574 42.985449,-96.51243 42.985596,-96.512382 42.985658,-96.512249 42.985849,-96.51198 42.986349,-96.511841 42.986765,-96.51182 42.986871,-96.511832 42.987121,-96.51185 42.987191,-96.512258 42.987958,-96.512366 42.988234,-96.512385 42.98834,-96.512392 42.988626,-96.512364 42.988839,-96.512355 42.988874,-96.512253 42.989076,-96.512159 42.989201,-96.512098 42.989257,-96.51147 42.989759,-96.511406 42.989814,-96.511324 42.989903,-96.51119 42.990133,-96.511176 42.990167,-96.511169 42.990203,-96.511163 42.99031,-96.511182 42.990416,-96.511244 42.990551,-96.511319 42.990644,-96.51135 42.990672,-96.511604 42.990841,-96.51168 42.990886,-96.51176 42.990927,-96.511969 42.991021,-96.512233 42.991117,-96.512322 42.991145,-96.512408 42.99118,-96.512521 42.991248,-96.512562 42.991268,-96.51267 42.99134,-96.512701 42.991368,-96.5128 42.991491,-96.51285 42.991592,-96.512857 42.991627,-96.512834 42.991912,-96.512732 42.992189,-96.512545 42.992409,-96.51249 42.992468,-96.511591 42.993363,-96.511325 42.993665,-96.510564 42.994585,-96.51021 42.994928,-96.50986 42.995228,-96.50951 42.995479,-96.509013 42.995826,-96.50823 42.996259,-96.507866 42.996443,-96.507824 42.996461,-96.507511 42.996565,-96.507373 42.996604,-96.506796 42.996696,-96.50592 42.996793,-96.505662 42.996797,-96.505034 42.996808,-96.504246 42.996804,-96.503856 42.996843,-96.503139 42.996973,-96.502491 42.997144,-96.502215 42.997221,-96.50208 42.997265,-96.501908 42.997333,-96.501161 42.997679,-96.501069 42.997705,-96.50036 42.997857,-96.500239 42.997867,-96.500064 42.997907,-96.500007 42.99792,-96.499863 42.997954,-96.499838 42.997957,-96.499781 42.997964,-96.499523 42.997996,-96.499474 42.997995,-96.499387 42.997989,-96.498818 42.998003,-96.498436 42.998081,-96.498427 42.998079,-96.49831 42.998051,-96.498184 42.998029,-96.498152 42.998033,-96.497866 42.998086,-96.497774 42.998112,-96.497359 42.998276,-96.497342 42.998283,-96.497061 42.998428,-96.496823 42.998609,-96.496757 42.998705,-96.496709 42.998807,-96.496639 42.998901,-96.496619 42.998934,-96.496606 42.998968,-96.496604 42.999039,-96.496638 42.999144,-96.496873 42.999537,-96.49693 42.999756,-96.496947 42.999818,-96.496966 42.999996,-96.496961 43.000068,-96.496907 43.000242,-96.496814 43.000408,-96.49679 43.000439,-96.496643 43.000583,-96.496571 43.000632,-96.495737 43.000941,-96.49561 43.000997,-96.495566 43.001012,-96.495243 43.0011,-96.495072 43.001171,-96.494876 43.001279,-96.494777 43.001359,-96.494588 43.001568,-96.494488 43.001731,-96.494443 43.00187,-96.494416 43.002084,-96.494423 43.002156,-96.494445 43.002225,-96.494534 43.002392,-96.494582 43.00253,-96.494665 43.002883,-96.494675 43.00299,-96.494655 43.003598,-96.494644 43.003633,-96.494468 43.003956,-96.494446 43.003998,-96.494422 43.00403,-96.494393 43.004058,-96.49426 43.004164,-96.494109 43.004256,-96.494074 43.004281,-96.493655 43.004679,-96.493444 43.00492,-96.493056 43.005244,-96.493 43.00532,-96.492811 43.00565,-96.492713 43.006,-96.492685 43.006393,-96.492589 43.006853,-96.492487 43.007166,-96.492206 43.007814,-96.492189 43.007885,-96.492174 43.008171,-96.4921 43.008669,-96.492049 43.008868,-96.492029 43.00895,-96.491991 43.009557,-96.491968 43.009699,-96.491961 43.009771,-96.491987 43.009876,-96.492002 43.009983,-96.491981 43.010197,-96.492116 43.010541,-96.492159 43.010605,-96.492239 43.010696,-96.492564 43.010916,-96.493072 43.011197,-96.493185 43.011266,-96.493421 43.011448,-96.493497 43.01154,-96.493711 43.011901,-96.493764 43.012002,-96.493791 43.01207,-96.493821 43.012248,-96.493874 43.012386,-96.493879 43.012421,-96.493902 43.012994,-96.493929 43.013136,-96.494113 43.013729,-96.494166 43.013829,-96.494762 43.01485,-96.495014 43.015115,-96.495281 43.015456,-96.495639 43.015841,-96.495672 43.015869,-96.495744 43.015917,-96.495935 43.01603,-96.496482 43.016272,-96.496526 43.016288,-96.497019 43.016181,-96.497308 43.016136,-96.497894 43.016082,-96.498535 43.016075,-96.498569 43.016077,-96.498583 43.016079,-96.498678 43.0161,-96.499087 43.016224,-96.499292 43.016323,-96.499358 43.016376,-96.49948 43.016488,-96.499532 43.016548,-96.499638 43.016787,-96.499646 43.016822,-96.499649 43.016893,-96.499594 43.017104,-96.499575 43.017138,-96.499551 43.017169,-96.499441 43.017287,-96.499153 43.017532,-96.49884 43.017896,-96.498775 43.017993,-96.498759 43.018027,-96.498709 43.018201,-96.498688 43.018415,-96.49869 43.018451,-96.498709 43.018557,-96.498799 43.018762,-96.498818 43.018795,-96.498861 43.018851,-96.49901 43.019045,-96.49904 43.019073,-96.499256 43.019219,-96.499452 43.019327,-96.499574 43.019388,-96.499619 43.019403,-96.500093 43.019499,-96.500289 43.019515,-96.500782 43.019528,-96.501125 43.019556,-96.501899 43.019664,-96.501995 43.019681,-96.502644 43.01985,-96.50318 43.02003,-96.503937 43.020366,-96.50399 43.0204,-96.50451 43.020781,-96.505049 43.021272,-96.505493 43.021676,-96.505637 43.021821,-96.505899 43.022034,-96.506122 43.02227,-96.506188 43.022323,-96.506713 43.022648,-96.506793 43.022689,-96.507349 43.022922,-96.508032 43.023332,-96.50811 43.023375,-96.508435 43.023536,-96.508522 43.02357,-96.509247 43.023797,-96.509594 43.023933,-96.510209 43.024229,-96.510318 43.024301,-96.510523 43.024456,-96.510553 43.024484,-96.51076 43.024728,-96.510805 43.024792,-96.511528 43.025516,-96.511698 43.025734,-96.512032 43.026212,-96.512435 43.026865,-96.512467 43.026933,-96.512579 43.027207,-96.51269 43.027444,-96.513173 43.028267,-96.513208 43.028334,-96.513534 43.029047,-96.51359 43.029185,-96.513754 43.029522,-96.513952 43.030075,-96.513958 43.030111,-96.513971 43.030324,-96.513968 43.03036,-96.513927 43.030536,-96.513846 43.030679,-96.513822 43.03071,-96.513732 43.030796,-96.513507 43.030935,-96.513467 43.030955,-96.512894 43.031165,-96.512534 43.031281,-96.511741 43.031569,-96.511694 43.031581,-96.511071 43.031685,-96.511026 43.0317,-96.510984 43.031719,-96.510948 43.031743,-96.510824 43.031855,-96.510666 43.032036,-96.510623 43.032101,-96.510581 43.032203,-96.510416 43.032763,-96.51006 43.034207,-96.509942 43.034516,-96.509731 43.034956,-96.509626 43.035194,-96.509624 43.035199,-96.509498 43.035686,-96.509378 43.036033,-96.509267 43.036455,-96.509138 43.036763,-96.509134 43.036798,-96.509169 43.037011,-96.509191 43.037547,-96.509252 43.037794,-96.509291 43.037898,-96.509308 43.037931,-96.509333 43.037962,-96.509525 43.038125,-96.509596 43.038175,-96.509918 43.03834,-96.510181 43.038438,-96.5103 43.038501,-96.510336 43.038526,-96.510495 43.038663,-96.5106 43.038784,-96.510746 43.03905,-96.510772 43.039119,-96.510831 43.039329,-96.510886 43.039466,-96.510998 43.039665,-96.511048 43.039727,-96.51108 43.039754,-96.511487 43.040013,-96.51165 43.040094,-96.511881 43.040228,-96.512146 43.04044,-96.512222 43.040486,-96.512317 43.040465,-96.512454 43.040426,-96.512502 43.040416,-96.512599 43.040407,-96.51309 43.040377,-96.513233 43.04035,-96.513785 43.040197,-96.513921 43.040155,-96.514052 43.040105,-96.514257 43.039992,-96.514643 43.039782,-96.514904 43.039681,-96.515878 43.039197,-96.516188 43.03902,-96.516307 43.038956,-96.516945 43.038684,-96.517209 43.038587,-96.517849 43.038399,-96.518203 43.038274,\ -96.518522 43.038179,-96.519511 43.037856,-96.5197 43.037816,-96.519941 43.03778,-96.520086 43.037762,-96.520153 43.037765,-96.520874 43.0378,-96.520922 43.037808,-96.521087 43.037846,-96.521335 43.038089,-96.521519 43.038781,-96.521492 43.038889,-96.521302 43.03966,-96.520887 43.040138,-96.520254 43.04024,-96.520201 43.040249,-96.519185 43.040178,-96.518393 43.040105,-96.51799 43.040182,-96.517634 43.040422,-96.517086 43.041064,-96.51655 43.041271,-96.516237 43.041359,-96.515759 43.041383,-96.51531 43.041233,-96.514935 43.041039,-96.514636 43.040943,-96.514573 43.040936,-96.514125 43.040892,-96.513745 43.040912,-96.513393 43.040967,-96.513272 43.040982,-96.51308 43.040999,-96.512735 43.041049,-96.512628 43.041065,-96.512521 43.04108,-96.512553 43.041167,-96.512595 43.041379,-96.512636 43.041481,-96.512705 43.04169,-96.512775 43.041824,-96.5129 43.041978,-96.513015 43.042094,-96.513357 43.042351,-96.513444 43.042438,-96.513663 43.042676,-96.513807 43.04279,-96.513996 43.04294,-96.514325 43.043338,-96.514523 43.043666,-96.514688 43.04404,-96.514818 43.044495,-96.514833 43.044638,-96.514819 43.045103,-96.514812 43.045174,-96.51476 43.045385,-96.514747 43.04542,-96.514588 43.04572,-96.514093 43.0465,-96.513681 43.04703,-96.513604 43.047122,-96.513521 43.047211,-96.513197 43.047526,-96.512844 43.047825,-96.512486 43.04821,-96.51244 43.048245,-96.512283 43.048366,-96.512256 43.048396,-96.512092 43.048617,-96.511572 43.049093,-96.511302 43.049392,-96.510851 43.04977,-96.510523 43.049913,-96.510393 43.049964,-96.510069 43.050049,-96.509882 43.050094,-96.509643 43.050137,-96.509547 43.050151,-96.509154 43.050181,-96.508859 43.050187,-96.50881 43.050183,-96.508347 43.05006,-96.508165 43.050006,-96.507608 43.049773,-96.507566 43.049756,-96.506355 43.049138,-96.506267 43.049105,-96.506035 43.049045,-96.505317 43.048915,-96.504459 43.048749,-96.504363 43.048735,-96.503824 43.048687,-96.503677 43.048677,-96.503332 43.048667,-96.501804 43.048658,-96.501509 43.04868,-96.500978 43.048756,-96.500882 43.048774,-96.500837 43.048788,-96.500493 43.048927,-96.500484 43.048966,-96.500458 43.049035,-96.500439 43.049068,-96.500368 43.049162,-96.50029 43.049332,-96.500115 43.049547,-96.499993 43.049659,-96.499928 43.049713,-96.499791 43.049815,-96.499557 43.049946,-96.499514 43.049965,-96.499288 43.050034,-96.499241 43.050045,-96.498804 43.0501,-96.498226 43.050147,-96.498216 43.050148,-96.496737 43.050184,-96.496048 43.050219,-96.495607 43.050256,-96.495126 43.050334,-96.494868 43.050395,-96.494564 43.050466,-96.493995 43.050584,-96.493752 43.050614,-96.493703 43.050621,-96.493556 43.050621,-96.493164 43.050583,-96.492277 43.050603,-96.492032 43.050621,-96.491595 43.05068,-96.491306 43.050726,-96.49093 43.050812,-96.490522 43.05094,-96.490389 43.05099,-96.489912 43.051172,-96.489581 43.051329,-96.489341 43.05143,-96.48924 43.051472,-96.489201 43.051494,-96.489031 43.051754,-96.488861 43.052014,-96.488825 43.052363,-96.488832 43.052434,-96.48894 43.052734,-96.488957 43.05278,-96.489009 43.05288,-96.489022 43.052914,-96.489035 43.053021,-96.48903 43.053093,-96.489006 43.053162,-96.489001 43.053197,-96.489009 43.05334,-96.488995 43.053482,-96.488967 43.05366,-96.488949 43.05373,-96.488815 43.053961,-96.488727 43.054165,-96.488641 43.054253,-96.488511 43.05436,-96.488362 43.054392,-96.488274 43.054424,-96.488234 43.054445,-96.488092 43.054544,-96.487994 43.054624,-96.487966 43.054654,-96.487877 43.054781,-96.487845 43.054849,-96.487836 43.054884,-96.487686 43.05501,-96.48753 43.055192,-96.487466 43.055247,-96.487408 43.055304,-96.487136 43.055602,-96.486967 43.055779,-96.486833 43.055882,-96.486686 43.055894,-96.486591 43.055913,-96.486546 43.055929,-96.486418 43.055984,-96.486165 43.056093,-96.485825 43.056298,-96.485604 43.056491,-96.485232 43.056725,-96.485198 43.056751,-96.485148 43.056799,-96.485109 43.056836,-96.485038 43.056931,-96.484905 43.0572,-96.484688 43.05748,-96.484659 43.057508,-96.484557 43.057586,-96.484478 43.057629,-96.484391 43.057662,-96.4843 43.057789,-96.484049 43.05801,-96.483872 43.058134,-96.483829 43.058147,-96.483682 43.058143,-96.483632 43.058146,-96.483584 43.058154,-96.483227 43.058275,-96.48321 43.058283,-96.482788 43.058505,-96.482526 43.058719,-96.482313 43.058916,-96.481804 43.059444,-96.481529 43.059697,-96.481463 43.05975,-96.481392 43.0598,-96.480787 43.060167,-96.480472 43.060339,-96.480255 43.060424,-96.479984 43.060509,-96.479795 43.060551,-96.47975 43.060565,-96.479365 43.060725,-96.478548 43.061124,-96.47808 43.061493,-96.477913 43.06167,-96.477815 43.061834,-96.477766 43.061896,-96.477611 43.062035,-96.477474 43.062225,-96.477417 43.062283,-96.477317 43.062362,-96.476966 43.062559,-96.476953 43.062567,-96.476822 43.062657,-96.47674 43.062697,-96.476429 43.062805,-96.475717 43.06301,-96.475405 43.063117,-96.475268 43.063157,-96.475173 43.063179,-96.474503 43.063298,-96.474339 43.063355,-96.473872 43.063518,-96.473846 43.06352,-96.473673 43.063534,-96.473377 43.063645,-96.473191 43.063692,-96.473048 43.063717,-96.472949 43.063721,-96.472753 43.063711,-96.472657 43.063694,-96.47261 43.063681,-96.472435 43.063615,-96.472316 43.063552,-96.472186 43.063463,-96.471455 43.062963,-96.471322 43.062857,-96.470832 43.062504,-96.470641 43.062391,-96.470465 43.062327,-96.4701 43.062219,-96.469298 43.06204,-96.469011 43.06199,-96.468768 43.061959,-96.468326 43.061933,-96.467934 43.061966,-96.46786 43.061962,-96.467491 43.061946,-96.467442 43.061947,-96.467345 43.06196,-96.466704 43.062145,-96.466515 43.062186,-96.466325 43.062231,-96.465859 43.062343,-96.465518 43.062377,-96.465421 43.06239,-96.46501 43.062511,-96.46483 43.06257,-96.464777 43.062556,-96.46468 43.062541,-96.464581 43.062541,-96.464533 43.062548,-96.464167 43.062652,-96.464124 43.062669,-96.463973 43.062761,-96.463939 43.062787,-96.463881 43.062845,-96.463836 43.062909,-96.463184 43.063141,-96.463099 43.063177,-96.462895 43.063277,-96.462592 43.06346,-96.462472 43.063523,-96.461401 43.063963,-96.460958 43.064214,-96.460742 43.064337,-96.460723 43.064392,-96.460689 43.064459,-96.460509 43.064713,-96.46037 43.065018,-96.460353 43.065124,-96.460341 43.065159,-96.460303 43.065225,-96.460394 43.065419,-96.460546 43.065602,-96.460667 43.065836,-96.460675 43.065871,-96.460674 43.065907,-96.460644 43.066084,-96.460572 43.066292,-96.46055 43.066324,-96.460522 43.066354,-96.460323 43.066459,-96.459851 43.066653,-96.459645 43.066751,-96.459559 43.066787,-96.459248 43.066962,-96.459167 43.067003,-96.458882 43.067061,-96.458618 43.067157,-96.458577 43.067177,-96.458405 43.067305,-96.458305 43.067428,-96.458233 43.067561,-96.458185 43.067773,-96.458185 43.067809,-96.458202 43.067951,-96.458234 43.068056,-96.458253 43.068089,-96.458324 43.068183,-96.458406 43.068272,-96.459016 43.068786,-96.459282 43.069044,-96.459307 43.069075,-96.459392 43.069242,-96.459447 43.069489,-96.459445 43.069561,-96.459403 43.069809,-96.459387 43.069843,-96.459337 43.069904,-96.459298 43.069926,-96.458921 43.070096,-96.458842 43.070139,-96.458699 43.070238,-96.458573 43.070264,-96.458483 43.070293,-96.458095 43.07045,-96.457627 43.070766,-96.457566 43.070822,-96.457448 43.070979,-96.457429 43.071012,-96.457375 43.071186,-96.457367 43.071257,-96.457349 43.071757,-96.457358 43.071828,-96.457356 43.072043,-96.457294 43.072252,-96.457213 43.072421,-96.457107 43.072583,-96.457079 43.072612,-96.456942 43.072715,-96.456859 43.072754,-96.456771 43.072838,-96.456669 43.072916,-96.456639 43.072945,-96.456429 43.073187,-96.456398 43.073215,-96.455903 43.073614,-96.455722 43.073908,-96.455677 43.07401,-96.455555 43.074319,-96.45547 43.074743,-96.455455 43.074922,-96.455444 43.074955,-96.45541 43.074982,-96.45536 43.075043,-96.455343 43.075077,-96.455332 43.075112,-96.455328 43.075148,-96.455324 43.075469,-96.455437 43.075963,-96.455454 43.076321,-96.455543 43.076636,-96.455648 43.077203,-96.455671 43.077367,-96.455718 43.077702,-96.455725 43.078167,-96.455719 43.078524,-96.455761 43.079526,-96.455843 43.080059,-96.455798 43.080845,-96.455786 43.080916,-96.455726 43.081127,-96.455654 43.081298,-96.455519 43.081528,-96.455494 43.081558,-96.455408 43.081593,-96.455329 43.081636,-96.455294 43.081662,-96.455206 43.081748,-96.454969 43.081929,-96.454478 43.082421,-96.454407 43.082471,-96.454376 43.082498,-96.454336 43.082555,-96.454259 43.082709,-96.454224 43.08278,-96.454228 43.082851,-96.454223 43.082887,-96.454204 43.082957,-96.454187 43.083063,-96.454155 43.083209,-96.454142 43.083274,-96.45413 43.08338,-96.454118 43.08348,-96.454083 43.083782,-96.45408 43.08381,-96.45408 43.083845,-96.454084 43.083883,-96.454105 43.084059,-96.454126 43.084165,-96.454229 43.084515,-96.454253 43.08462,-96.454266 43.084763,-96.45431 43.085549,-96.454359 43.085976,-96.454401 43.086152,-96.454603 43.086777,-96.454705 43.08709,-96.454779 43.087261,-96.455139 43.087886,-96.455155 43.08792,-96.455432 43.088258,-96.455467 43.088283,-96.455634 43.088359,-96.455948 43.088463,-96.456187 43.088507,-96.456529 43.088539,-96.456575 43.088551,-96.456972 43.088696,-96.457156 43.088746,-96.457381 43.088819,-96.457893 43.088933,-96.458622 43.089016,-96.45872 43.089021,-96.459065 43.089028,-96.459552 43.089082,-96.460753 43.089281,-96.461588 43.089493,-96.461682 43.089512,-96.462274 43.089526,-96.462428 43.089565,-96.462506 43.089586,-96.462672 43.089662,-96.463028 43.089908,-96.463083 43.089967,-96.463168 43.090096,-96.463184 43.090152,-96.463189 43.090331,-96.46316 43.090544,-96.463134 43.09065,-96.463121 43.090684,-96.462777 43.091275,-96.462644 43.091465,-96.462539 43.091703,-96.462535 43.091739,-96.462569 43.091952,-96.462521 43.092116,-96.462484 43.092183,-96.462434 43.092393,-96.462422 43.092464,-96.462407 43.092643,-96.46232 43.092885,-96.462268 43.092985,-96.462243 43.093016,-96.462035 43.093215,-96.461941 43.093297,-96.461752 43.093411,-96.461466 43.093551,-96.461326 43.093652,-96.461264 43.093707,-96.461218 43.09377,-96.461189 43.093838,-96.461095 43.094226,-96.461072 43.094295,-96.461042 43.094363,-96.460935 43.094563,-96.460797 43.094792,-96.460729 43.094887,-96.460498 43.095118,-96.460242 43.095284,-96.460158 43.095321,-96.45987 43.095413,-96.459706 43.095466,-96.459659 43.095477,-96.459562 43.095486,-96.459219 43.095505,-96.458977 43.09554,-96.458782 43.095552,-96.458586 43.095539,-96.458537 43.095541,-96.458244 43.095573,-96.458195 43.095575,-96.458146 43.095572,-96.457907 43.095529,-96.45781 43.095518,-96.457762 43.095523,-96.457483 43.095592,-96.457391 43.095618,-96.45726 43.095667,-96.457053 43.095763,-96.456911 43.095861,-96.456846 43.095915,-96.456798 43.095978,-96.456777 43.096048,-96.456802 43.096369,-96.456819 43.096439,-96.456851 43.096507,-96.457071 43.096827,-96.457115 43.096929,-96.457149 43.096995,-96.457173 43.097064,-96.457166 43.097314,-96.457168 43.097386,-96.457132 43.097489,-96.45705 43.097619,-96.457023 43.097647,-96.456741 43.097789,-96.456697 43.097805,-96.456508 43.097843,-96.456264 43.097864,-96.456215 43.097859,-96.455976 43.097813,-96.455714 43.097714,-96.455381 43.09756,-96.455249 43.097513,-96.455101 43.097501,-96.454855 43.097502,-96.454806 43.097499,-96.454661 43.097476,-96.454492 43.097404,-96.454448 43.097388,-96.454401 43.097377,-96.45416 43.097339,-96.454063 43.097331,-96.453868 43.097355,-96.453591 43.097431,-96.453372 43.097512,-96.453212 43.097596,-96.452696 43.097926,-96.452564 43.098077,-96.452446 43.098139,-96.45241 43.098164,-96.45238 43.098193,-96.45236 43.098225,-96.452314 43.098364,-96.452314 43.0984,-96.452303 43.098471,-96.452311 43.098542,-96.452357 43.098569,-96.452706 43.0987,-96.452946 43.098825,-96.452974 43.098855,-96.453017 43.098919,-96.453115 43.099195,-96.453117 43.099266,-96.45309 43.099515,-96.453021 43.099796,-96.452901 43.100143,-96.452673 43.100575,-96.452567 43.100696,-96.452462 43.100771,-96.45242 43.10079,-96.452371 43.100789,-96.452177 43.100763,-96.45213 43.100753,-96.452086 43.100736,-96.45201 43.100691,-96.451941 43.10064,-96.451832 43.100568,-96.451801 43.100554,-96.451706 43.100512,-96.451617 43.100483,-96.451523 43.100464,-96.451328 43.100484,-96.45123 43.10049,-96.451134 43.100502,-96.450863 43.100586,-96.450576 43.100723,-96.450403 43.10085,-96.450346 43.100908,-96.450254 43.101074,-96.450143 43.101385,-96.450115 43.10149,-96.450079 43.101775,-96.450072 43.101882,-96.450093 43.10206,-96.450104 43.102095,-96.450158 43.102195,-96.450483 43.102595,-96.450576 43.10276,-96.450623 43.102972,-96.450672 43.103399,-96.450601 43.103679,-96.45055 43.103754,-96.450536 43.103775,-96.450408 43.103883,-96.450396 43.103889,-96.45037 43.103906,-96.450161 43.104001,-96.449928 43.104058,-96.449813 43.104074,-96.44961 43.104105,-96.449445 43.10413,-96.449113 43.104196,-96.448803 43.104306,-96.448506 43.104433,-96.448296 43.104584,-96.447994 43.104866,-96.447809 43.105077,-96.447694 43.105145,-96.447652 43.105164,-96.447294 43.105283,-96.447214 43.105324,-96.447046 43.105455,-96.446992 43.105514,-96.44697 43.105546,-96.446944 43.105615,-96.446924 43.105685,-96.446911 43.105828,-96.446928 43.105861,-96.446997 43.105956,-96.447011 43.105991,-96.44707 43.106047,-96.447217 43.106142,-96.447248 43.10617,-96.447355 43.10629,-96.447404 43.106352,-96.447452 43.106454,-96.447358 43.106584,-96.447327 43.106652,-96.447306 43.10683,-96.447231 43.107291,-96.447178 43.107502,-96.447104 43.107709,-96.447085 43.107742,-96.446848 43.108014,-96.446788 43.108112,-96.446774 43.108146,-96.44654 43.108987,-96.446518 43.109093,-96.446495 43.10927,-96.446457 43.109374,-96.446374 43.109542,-96.446367 43.109551,-96.446268 43.109703,-96.446195 43.109796,-96.44604 43.109979,-96.445943 43.110059,-96.445764 43.110182,-96.445725 43.110204,-96.445596 43.110257,-96.44546 43.110299,-96.445413 43.11031,-96.444489 43.110457,-96.44445 43.110464,-96.444125 43.110547,-96.444035 43.110575,-96.443882 43.110666,-96.443784 43.110745,-96.443514 43.111043,-96.443368 43.11123,-96.443037 43.111495,-96.442962 43.111541,-96.442844 43.111605,-96.442453 43.111759,-96.442165 43.111897,-96.441006 43.112505,-96.440932 43.112552,-96.440863 43.112603,-96.439832 43.113423,-96.439668 43.113601,-96.439644 43.113632,-96.438959 43.1147,-96.438916 43.114803,-96.438905 43.114905,-96.43894 43.116047,-96.438936 43.116083,-96.438795 43.116573,-96.438683 43.116772,-96.438492 43.117215,-96.438395 43.117339,-96.438292 43.11746,-96.438245 43.117523,-96.438143 43.117645,-96.437956 43.117896,-96.43727 43.118762,-96.436988 43.119137,-96.43684 43.119361,-96.436567 43.119818,-96.436515 43.119956,-96.436472 43.120166,-96.436473 43.120202,-96.436486 43.120272,-96.436499 43.120414,-96.436555 43.120661,-96.436634 43.120867,-96.436814 43.121161,-96.436951 43.121264,-96.436989 43.121287,-96.437031 43.121305,-96.43767 43.121493,-96.438083 43.12161,-96.438407 43.121697,-96.438689 43.12176,-96.439059 43.121857,-96.439239 43.121916,-96.43932 43.121956,-96.439864 43.122194,-96.440158 43.122434,-96.440268 43.122553,-96.440311 43.122617,-96.440454 43.122996,-96.440598 43.123262,-96.440659 43.123359,-96.441005 43.123834,-96.441429 43.124271,-96.441529 43.12442,-96.441581 43.124496,-96.44165 43.124702,-96.441685 43.124879,-96.441699 43.124986,-96.441658 43.125305,-96.441646 43.12534,-96.441451 43.125668,-96.441405 43.12577,-96.44136 43.125834,-96.441353 43.125866,-96.44136 43.125938,-96.44134 43.126044,-96.441326 43.126078,-96.441059 43.126459,-96.440956 43.126581,-96.440926 43.126609,-96.440743 43.126728,-96.440586 43.126814,-96.440419 43.126945,-96.440233 43.127155,-96.440163 43.127288,-96.440122 43.127391,-96.44013 43.127426,-96.440124 43.12782,-96.440136 43.12807,-96.440191 43.128317,-96.440352 43.128615,-96.44043 43.128706,-96.440581 43.128848,-96.440622 43.128868,-96.440798 43.128933,-96.440845 43.128941,-96.440894 43.128932,-96.440939 43.128918,-96.441215 43.128768,-96.441247 43.128741,-96.441299 43.12868,-96.441329 43.128652,-96.441366 43.128628,-96.441407 43.128608,-96.441709 43.128487,-96.441754 43.128473,-96.441946 43.12844,-96.441995 43.128436,-96.442241 43.128435,-96.442291 43.128439,-96.442484 43.12847,-96.44253 43.128482,-96.442615 43.128519,-96.44269 43.128565,-96.44276 43.128615,-96.44278 43.128648,-96.442906 43.128957,-96.442978 43.129201,-96.442994 43.129271,-96.443022 43.129449,-96.443034 43.129622,-96.443051 43.129841,-96.443046 43.129948,-96.443057 43.130447,-96.443242 43.131364,-96.443236 43.131471,-96.443229 43.131507,-96.443186 43.131968,-96.443096 43.1325,-96.443088 43.132751,-96.443084 43.132928,-96.443098 43.133106,-96.443152 43.133425,-96.443159 43.133496,-96.443128 43.133601,-96.443134 43.133636,-96.443154 43.133669,-96.443185 43.133697,-96.443236 43.133756,-96.443289 43.133817,-96.443324 43.133842,-96.443448 43.1339,-96.443608 43.134115,-96.443646 43.134181,-96.443725 43.13435,-96.443747 43.134382,-96.444009 43.134685,-96.444077 43.134742,-96.444524 43.13512,-96.444858 43.135429,-96.445018 43.13565,-96.44522 43.136015,-96.445409 43.136305,-96.445458 43.136367,-96.445599 43.136513,-96.445678 43.136556,-96.445787 43.136629,-96.445828 43.136649,-96.445875 43.136658,-96.445923 43.136653,-96.446111 43.13661,-96.446198 43.136576,-96.446239 43.136556,-96.446638 43.136191,-96.446785 43.136095,-96.446939 43.136006,-96.446952 43.135999,-96.446981 43.135987,-96.447114 43.13594,-96.447256 43.135908,-96.447304 43.135902,-96.44755 43.135886,-96.447648 43.13589,-96.44798 43.135959,-96.44807 43.135989,-96.448243 43.136022,-96.448356 43.136044,-96.448394 43.136066,-96.448501 43.136141,-96.448562 43.136197,-96.448587 43.136228,-96.448624 43.136294,-96.448706 43.136462,-96.448704 43.136496,-96.44867 43.136601,-96.44849 43.136896,-96.448462 43.136925,-96.448389 43.136973,-96.448011 43.13714,-96.447873 43.137178,-96.447701 43.137246,-96.447386 43.137377,-96.447362 43.137388,-96.447287 43.137434,-96.447157 43.137542,-96.447131 43.137573,-96.447091 43.137637,-96.447056 43.137704,-96.447008 43.137879,-96.447009 43.138093,-96.44708 43.138338,-96.447095 43.138371,-96.447398 43.13874,-96.447533 43.13889,-96.447667 43.138995,-96.448511 43.139543,-96.448577 43.139596,-96.448606 43.139625,-96.448823 43.139864,-96.448991 43.140083,-96.449252 43.140508,-96.44976 43.141242,-96.450057 43.141811,-96.450237 43.142143,-96.450352 43.1423,-96.450381 43.142329,-96.45043 43.14239,-96.450598 43.142521,-96.450956 43.14264,-96.451003 43.142652,-96.451021 43.142655,-96.451099 43.142669,-96.451246 43.14268,-96.451295 43.142677,-96.451917 43.142562,-96.452553 43.142502,-96.453145 43.142491,-96.453381 43.142508,-96.453783 43.142538,-96.453879 43.142553,-96.453964 43.142588,-96.454046 43.142628,-96.45408 43.142654,-96.454138 43.142711,-96.454212 43.142803,-96.454272 43.1429,-96.454535 43.143511,-96.454568 43.143577,-96.45465 43.143707,-96.454753 43.143828,-96.454951 43.143988,-96.455147 43.144096,-96.455231 43.144133,-96.455512 43.144199,-96.455754 43.144235,-96.455852 43.144239,-96.45595 43.144231,-96.456147 43.144224,-96.456245 43.144217,-96.45639 43.144196,-96.456898 43.144062,-96.457533 43.143865,-96.457963 43.143692,-96.458009 43.143668,-96.458328 43.14351,-96.458678 43.143379,-96.458776 43.143369,-96.459318 43.14337,-96.459466 43.143375,-96.459756 43.143419,-96.460039 43.143481,-96.460176 43.143522,-96.460349 43.14359,-96.46043 43.14363,-96.460468 43.143653,-96.460677 43.143804,-96.460708 43.143832,-96.460856 43.144018,-96.460868 43.144075,-96.460858 43.14411,-96.460824 43.144177,-96.460564 43.144522,-96.460544 43.144555,-96.460414 43.144863,-96.460392 43.144933,-96.460382 43.14504,-96.460414 43.145397,-96.460425 43.145431,-96.460451 43.145572,-96.460471 43.145605,-96.4605 43.145634,-96.460575 43.14568,-96.460596 43.14575,-96.460601 43.145821,-96.4606 43.146035,-96.460573 43.146103,-96.460551 43.146135,-96.460405 43.146279,-96.46037 43.146305,-96.46033 43.146326,-96.460192 43.146364,-96.459557 43.14643,-96.459325 43.146491,-96.459208 43.146557,-96.45918 43.146586,-96.459046 43.146778,-96.45902 43.146846,-96.459003 43.146953,-96.459012 43.147024,-96.459036 43.14713,-96.459093 43.147266,-96.459141 43.147328,-96.459248 43.147488,-96.459432 43.147656,-96.459468 43.14768,-96.459511 43.147698,-96.459649 43.147737,-96.459795 43.147753,-96.46019 43.147766,-96.460479 43.147812,-96.460526 43.147823,-96.460658 43.147871,-96.460787 43.147923,-96.460858 43.147973,-96.460887 43.148002,-96.460935 43.148064,-96.460992 43.148163,-96.461069 43.148444,-96.461093 43.148513,-96.461126 43.148579,-96.46118 43.148715,-96.461221 43.14878,-96.461268 43.148842,-96.461286 43.148874,-96.461312 43.148905,-96.461435 43.149015,-96.461514 43.149058,-96.461781 43.149151,-96.461878 43.14916,-96.462075 43.149171,-96.462172 43.14918,-96.462271 43.149177,-96.462547 43.1491,-96.462675 43.149047,-96.462715 43.149025,-96.462785 43.148975,-96.462876 43.148891,-96.46305 43.148634,-96.463052 43.148599,-96.463046 43.148527,-96.463027 43.148473,-96.462939 43.148346,-96.462753 43.148179,-96.46274 43.148144,-96.462737 43.148109,-96.462761 43.147967,-96.462793 43.1479,-96.462814 43.147867,-96.463 43.147701,-96.463074 43.147653,-96.463281 43.147557,-96.463813 43.147368,-96.463859 43.147356,-96.463908 43.14735,-96.464252 43.147329,-96.464645 43.147333,-96.464741 43.147347,-96.465102 43.147458,-96.465144 43.147475,-96.465182 43.147499,-96.465296 43.147614,-96.465357 43.147712,-96.465369 43.147746,-96.465388 43.147853,-96.465387 43.14788,-96.465385 43.148067,-96.465294 43.148599,-96.465298 43.14867,-96.465316 43.148813,-96.465336 43.148919,-96.465459 43.149153,-96.46554 43.149242,-96.466422 43.150013,-96.466482 43.15007,-96.467187 43.150801,-96.467452 43.151014,-96.467867 43.151251,-96.46829 43.151552,-96.468459 43.151823,-96.468482 43.151854,-96.468499 43.151887,-96.468533 43.151984,-96.468559 43.152061,-96.468569 43.152167,-96.468557 43.152237,-96.468545 43.152272,-96.468411 43.152422,-96.46825 43.152505,-96.468203 43.152515,-96.468154 43.15252,-96.467809 43.152517,-96.46776 43.152513,-96.467616 43.152487,-96.46697 43.152311,-96.466876 43.15229,-96.466684 43.152255,-96.46634 43.152239,-96.465946 43.152249,-96.465896 43.152253,-96.465628 43.152342,-96.4655 43.152396,-96.465085 43.152649,-96.464981 43.152726,-96.464963 43.152742,-96.464592 43.153094,-96.464443 43.153279,-96.464422 43.153311,-96.464406 43.153418,-96.464428 43.153882,-96.464421 43.153953,-96.464412 43.153988,-96.464404 43.154059,-96.464285 43.154588,-96.464072 43.155137,-96.463981 43.155489,-96.463957 43.156058,-96.46395 43.156129,-96.463954 43.156165,-96.463968 43.156199,-96.464009 43.156264,-96.464056 43.156326,-96.46412 43.156381,-96.464161 43.156401,-96.464251 43.156429,-96.464544 43.156424,-96.464636 43.15645,-96.464685 43.156456,-96.464734 43.156457,-96.465006 43.156422,-96.465074 43.156413,-96.465639 43.15629,-96.465685 43.156277,-96.465728 43.156259,-96.465793 43.156223,-96.466089 43.156231,-96.466333 43.156205,-96.466383 43.156204,-96.466579 43.156213,-96.466723 43.156236,-96.467044 43.156328,-96.467085 43.156348,-96.467261 43.156473,-96.467326 43.156526,-96.467346 43.156559,-96.467737 43.15737,-96.467758 43.157402,-96.467812 43.157462,-96.46794 43.157571,-96.467994 43.15763,-96.468054 43.157687,-96.468088 43.157713,-96.468127 43.157736,-96.468259 43.157784,-96.468454 43.157893,-96.468498 43.15791,-96.468544 43.157922,-96.468642 43.157934,-96.468685 43.157918,-96.468724 43.157898,-96.468773 43.157901,-96.468872 43.157895,-96.468921 43.157898,-96.468969 43.157906,-96.469108 43.157942,-96.469187 43.157984,-96.469435 43.158159,-96.469545 43.158318,-96.469556 43.158353,-96.46954 43.158384,-96.46951 43.158413,-96.469468 43.158478,-96.469233 43.158661,-96.469151 43.1587,-96.468612 43.158875,-96.468525 43.158909,-96.468446 43.158952,-96.467985 43.159274,-96.467919 43.159305,-96.467452 43.159532,-96.467019 43.159769,-96.466744 43.159975,-96.466465 43.16027,-96.466441 43.160301,-96.466235 43.160626,-96.465955 43.161422,-96.465942 43.161492,-96.465944 43.161635,-96.465989 43.161811,-96.466004 43.161845,-96.466025 43.161877,-96.466365 43.162312,-96.466413 43.162366,-96.466633 43.162613,-96.466993 43.163081,-96.467012 43.163114,-96.467034 43.163184,-96.467054 43.163214,-96.467139 43.163251,-96.467213 43.163298,-96.467242 43.163327,-96.467264 43.163359,-96.467468 43.163603,-96.467514 43.163666,-96.467532 43.163699,-96.467544 43.163734,-96.467557 43.163841,-96.467557 43.163948,-96.46755 43.163983,-96.467478 43.164191,-96.467466 43.164369,-96.467333 43.164515,-96.467304 43.164548,-96.467172 43.164654,-96.467142 43.164683,-96.467053 43.164795,-96.467045 43.164902,-96.467067 43.165008,-96.467163 43.165285,-96.467168 43.165569,-96.467157 43.165819,-96.467158 43.16589,-96.467152 43.165961,-96.467108 43.166063,-96.467085 43.166095,-96.467027 43.166152,-96.466896 43.1674,-96.466881 43.167649,-96.466903 43.168112,-96.466987 43.168354,-96.467011 43.168386,-96.46704 43.168414,-96.467138 43.168494,-96.467226 43.168527,-96.467369 43.168554,-96.467616 43.168564,-96.468157 43.168532,-96.468352 43.168551,-96.468446 43.168574,-96.468663 43.168658,-96.468743 43.1687,-96.468798 43.168759,-96.468931 43.16891,-96.468996 43.169006,-96.469121 43.169314,-96.46913 43.169421,-96.469097 43.16967,-96.469062 43.169774,-96.468841 43.170133,-96.468827 43.170167,-96.46881 43.170274,-96.468781 43.170342,-96.468757 43.170373,-96.468615 43.170468,-96.468577 43.170495,-96.468536 43.170514,-96.468313 43.170591,-96.468173 43.170626,-96.46769 43.170695,-96.467347 43.170726,-96.467002 43.17074,-96.466904 43.170729,-96.466811 43.170704,-96.466689 43.17073,-96.466672 43.170734,-96.466573 43.170742,-96.466329 43.170716,-96.466231 43.170709,-96.466132 43.17071,-96.466083 43.170715,-96.466036 43.170725,-96.466018 43.170734,-96.465997 43.170745,-96.465903 43.170828,-96.465866 43.170852,-96.465738 43.170907,-96.465723 43.17094,-96.465693 43.171081,-96.46568 43.171116,-96.46557 43.171315,-96.465536 43.171454,-96.465351 43.172231,-96.465332 43.172444,-96.465337 43.172837,-96.465343 43.172873,-96.4654 43.17301,-96.465423 43.173041,-96.465479 43.1731,-96.46562 43.1732,-96.466154 43.173458,-96.466422 43.173556,-96.46655 43.173604,-96.466589 43.173626,-96.466691 43.173704,-96.46676 43.173799,-96.466779 43.173832,-96.466857 43.174112,-96.466871 43.174219,-96.466867 43.174276,-96.466859 43.174311,-96.46683 43.17438,-96.466695 43.17457,-96.466567 43.174723,-96.466509 43.174781,-96.466108 43.175145,-96.465933 43.175361,-96.465888 43.175424,-96.465666 43.175782,-96.465541 43.176053,-96.465518 43.176195,-96.46552 43.176445,-96.465526 43.176481,-96.465538 43.176515,-96.46562 43.176645,-96.465672 43.176706,-96.465703 43.176732,-96.46618 43.177143,-96.466287 43.177263,-96.466309 43.177295,-96.466375 43.177429,-96.466386 43.177464,-96.466393 43.177571,-96.46639 43.177678,-96.466375 43.177748,-96.466242 43.178055,-96.466062 43.178348,-96.466034 43.178378,-96.465965 43.178429,-96.465846 43.178491,-96.465413 43.179366,-96.465403 43.179401,-96.465353 43.17972,-96.465344 43.179755,-96.465312 43.179823,-96.465263 43.179885,-96.465135 43.179994,-96.465097 43.180018,-96.465073 43.180046,-96.464883 43.180711,-96.464825 43.181532,-96.464856 43.18196,-96.464893 43.182137,-96.465026 43.182481,-96.465247 43.182916,-96.465285 43.182982,-96.46531 43.183013,-96.465343 43.18304,-96.465427 43.183077,-96.465471 43.183092,-96.465943 43.183194,-96.465987 43.183211,-96.466187 43.183314,-96.466367 43.183436,-96.466487 43.18355,-96.46657 43.18368,-96.466714 43.184014,-96.466895 43.184431,-96.466913 43.184464,-96.466937 43.184495,-96.467196 43.184709,-96.467266 43.18476,-96.467307 43.18478,-96.467352 43.184794,-96.4676 43.184841,-96.467649 43.184834,-96.467696 43.184822,-96.467921 43.18475,-96.468565 43.184484,-96.468657 43.184458,-96.468765 43.184443,-96.468816 43.184504,-96.46888 43.184558,-96.468919 43.184581,-96.469005 43.184616,-96.469125 43.184704,-96.469212 43.184768,-96.469284 43.184816,-96.469386 43.184893,-96.469582 43.185138,-96.469609 43.185207,-96.469629 43.18524,-96.469656 43.185269,-96.469689 43.185296,-96.469744 43.18533,-96.46972 43.185476,-96.46973 43.185583,-96.469769 43.185723,-96.469835 43.185857,-96.469886 43.185918,-96.470159 43.186124,-96.470237 43.186167,-96.470373 43.18621,-96.470617 43.186197,-96.470757 43.186161,-96.470845 43.186129,-96.470882 43.186105,-96.47101 43.185996,-96.471091 43.185956,-96.471149 43.185898,-96.471398 43.18555,-96.471467 43.185498,-96.471546 43.185457,-96.471582 43.185432,-96.471668 43.185397,-96.471716 43.185392,-96.471864 43.185389,-96.471912 43.185395,-96.472011 43.185396,-96.472106 43.185414,-96.472148 43.185432,-96.472487 43.185578,-96.472525 43.185601,-96.4726 43.185693,-96.472861 43.186037,-96.472879 43.18607,-96.472923 43.186246,-96.472924 43.186389,-96.472779 43.186615,-96.472752 43.186645,-96.472604 43.186738,-96.472536 43.18679,-96.472494 43.186854,-96.472385 43.187053,-96.472372 43.187087,-96.472363 43.187158,-96.472372 43.187229,-96.472397 43.187585,-96.47273 43.188102,-96.472758 43.188132,-96.473588 43.188883,-96.47372 43.189034,-96.473789 43.189129,-96.473929 43.189396,-96.474009 43.189639,-96.474109 43.19017,-96.474085 43.190275,-96.47407 43.190309,-96.473588 43.191093,-96.473575 43.191128,-96.473569 43.191163,-96.473565 43.191413,-96.473578 43.191519,-96.473709 43.191863,-96.473766 43.192182,-96.473731 43.192611,-96.473724 43.192646,-96.473606 43.192956,-96.473331 43.193376,-96.473276 43.193475,-96.472899 43.19425,-96.47288 43.19432,-96.472859 43.194534,-96.472906 43.194693,-96.47291 43.194729,-96.472906 43.194943,-96.472911 43.194979,-96.472954 43.195118,-96.47296 43.19519,-96.472939 43.195222,-96.472826 43.195339,-96.472779 43.195402,-96.472742 43.195424,-96.472657 43.195461,-96.472619 43.195484,-96.472454 43.195617,-96.472217 43.195889,-96.472148 43.196023,-96.472136 43.196073,-96.472108 43.196199,-96.472103 43.19627,-96.472106 43.196342,-96.472151 43.196553,-96.472179 43.196622,-96.472396 43.197021,-96.472673 43.197401,-96.4729 43.197678,-96.473015 43.197794,-96.473512 43.198141,-96.473581 43.198193,-96.473731 43.198335,-96.47381 43.198426,-96.473918 43.198586,-96.473977 43.198685,-96.474092 43.198958,-96.474124 43.199063,-96.474189 43.19951,-96.474232 43.199809,-96.474239 43.199963,-96.474264 43.200487,-96.474248 43.200736,-96.474277 43.200913,-96.474328 43.201013,-96.474351 43.201045,-96.47438 43.201074,-96.474564 43.201199,-96.474596 43.201221,-96.47462 43.201251,-96.474785 43.20155,-96.474799 43.201585,-96.474919 43.201932,-96.475007 43.202319,-96.475016 43.202498,-96.475007 43.202569,-96.474976 43.202674,-96.474958 43.202707,-96.474934 43.202738,-96.474896 43.202774,-96.474792 43.202764,-96.474645 43.202778,-96.474596 43.202779,-96.474353 43.202799,-96.474261 43.202825,-96.474218 43.202842,-96.474155 43.202879,-96.474103 43.202909,-96.47402 43.202948,-96.473987 43.202974,-96.473959 43.203004,-96.473913 43.203067,-96.473897 43.203101,-96.473881 43.203172,-96.473881 43.203208,-96.473825 43.203263,-96.473576 43.203572,-96.473547 43.203601,-96.473301 43.203786,-96.472933 43.204065,-96.472896 43.204089,-96.472856 43.204109,-96.471426 43.20468,-96.471304 43.204741,-96.470964 43.204948,-96.470772 43.205112,-96.47075 43.205143,-96.470744 43.205179,-96.470791 43.205463,-96.470803 43.205497,-96.470826 43.205529,-96.470893 43.205581,-96.47097 43.205625,-96.471002 43.205653,-96.471109 43.205773,-96.471147 43.205838,-96.471161 43.205873,-96.471201 43.205938,-96.471233 43.206042,-96.471245 43.206113,-96.471234 43.206255,-96.471222 43.20629,-96.471188 43.206357,-96.471093 43.206482,-96.471073 43.206515,-96.470998 43.206607,-96.470774 43.206842,-96.470681 43.207007,-96.470692 43.207038,-96.470742 43.2071,-96.470757 43.207134,-96.470758 43.207204,-96.470746 43.207239,-96.470721 43.20727,-96.47066 43.207326,-96.470665 43.207359,-96.470779 43.207517,-96.470811 43.207543,-96.471387 43.20775,-96.471634 43.207867,-96.471673 43.207889,-96.471777 43.207965,-96.471859 43.208062,-96.47188 43.208094,-96.47198 43.208333,-96.472 43.208476,-96.472003 43.208868,-96.472065 43.20915,-96.472096 43.209218,-96.472117 43.20925,-96.472315 43.209454,-96.473063 43.210024,-96.473127 43.210078,-96.473182 43.210138,-96.473341 43.210373,-96.473378 43.210426,-96.473487 43.210545,-96.473518 43.210573,-96.473759 43.210752,-96.474493 43.211282,-96.475085 43.211763,-96.475701 43.212275,-96.475906 43.212435,-96.47624 43.212695,-96.47627 43.212723,-96.476404 43.212873,-96.476469 43.212969,-96.476504 43.213073,-96.476548 43.213357,-96.476546 43.213429,-96.476525 43.213535,-96.476408 43.213808,-96.476372 43.213875,-96.476291 43.214005,-96.476088 43.21429,-96.476062 43.214321,-96.47603 43.214348,-96.475851 43.214471,-96.4758 43.214532,-96.475756 43.214596,-96.475655 43.214835,-96.475549 43.215256,-96.475536 43.215327,-96.475493 43.215681,-96.475467 43.215786,-96.475462 43.215793,-96.475315 43.216011,-96.47517 43.216156,-96.47516 43.216191,-96.475104 43.21651,-96.475085 43.216688,-96.475066 43.216758,-96.475018 43.216897,-96.47496 43.217396,-96.474962 43.217431,-96.47525 43.218775,-96.475201 43.218827,-96.475158 43.218891,-96.475146 43.218926,-96.475122 43.219103,-96.475145 43.219354,-96.475157 43.219493,-96.475178 43.219811,-96.475241 43.220123,-96.475292 43.220259,-96.475388 43.220458,-96.475426 43.22052,-96.475644 43.220606,-96.475735 43.220635,-96.475776 43.2207,-96.476217 43.221301,-96.476509 43.221754,-96.476654 43.221941,-96.476729 43.221987,-96.476991 43.222087,-96.47725 43.222192,-96.477296 43.222203,-96.477394 43.222212,-96.477493 43.222204,-96.477584 43.222178,-96.477897 43.222072,-96.478041 43.222047,-96.478337 43.222043,-96.478436 43.222047,-96.478583 43.22206,-96.478965 43.222134,-96.479236 43.222221,-96.479366 43.222273,-96.479491 43.222331,-96.47963 43.222432,-96.480019 43.222801,-96.480339 43.223024,-96.480456 43.22309,-96.480499 43.223108,-96.48112 43.223316,-96.481305 43.223379,-96.481584 43.223451,-96.481632 43.223457,-96.482274 43.223451,-96.482815 43.223409,-96.482963 43.223409,-96.483552 43.22345,-96.483699 43.223464,-96.483937 43.223513,-96.484254 43.223612,-96.484297 43.22363,-96.484333 43.223654,-96.484545 43.223851,-96.484656 43.223922,-96.484884 43.224004,-96.484915 43.224015,-96.485008 43.224049,-96.48504 43.224061,-96.485274 43.224146,-96.485459 43.224197,-96.485575 43.224212,-96.485653 43.224222,-96.4859 43.224222,-96.486241 43.224185,-96.486497 43.224132,-96.486688 43.224094,-96.487112 43.223998,-96.487223 43.223965,-96.487525 43.223878,-96.487762 43.223819,-96.488086 43.223739,-96.488277 43.223698,-96.488749 43.223598,-96.488845 43.223581,-96.489772 43.22348,-96.489849 43.223468,-96.489916 43.223458,-96.490037 43.223345,-96.490074 43.223321,-96.490118 43.223304,-96.490165 43.223296,-96.490263 43.223292,-96.490323 43.223293,-96.490409 43.223295,-96.490458 43.2233,-96.490556 43.223302,-96.490562 43.223303,-96.490604 43.223312,-96.490684 43.223353,-96.490718 43.223379,-96.490762 43.223388,-96.491108 43.223395,-96.491261 43.223386,-96.491451 43.223375,-96.491501 43.223374,-96.491603 43.223372,-96.491673 43.223321,-96.491716 43.223303,-96.4919 43.223257,-96.491949 43.223254,-96.491995 43.223259,-96.492088 43.223249,-96.492135 43.22325,-96.492229 43.223244,-96.492323 43.223232,-96.492371 43.223238,-96.492416 43.223254,-96.492452 43.223278,-96.492502 43.223319,-96.492517 43.223332,-96.492565 43.223322,-96.492806 43.223286,-96.494189 43.223266,-96.494337 43.223272,-96.494775 43.223329,-96.495208 43.223404,-96.495643 43.223446,-96.495648 43.223447,-96.495694 43.223461,-96.495734 43.223481,-96.495888 43.223572,-96.49596 43.223621,-96.496044 43.223658,-96.496091 43.22367,-96.496332 43.223707,-96.496579 43.223718,-96.496639 43.223716,-96.496915 43.223638,-96.49705 43.223595,-96.497117 43.223542,-96.497176 43.223485,-96.497826 43.222811,-96.498716 43.221954,-96.498781 43.2219,-96.499146 43.221648,-96.499956 43.221072,-96.500072 43.221005,-96.500434 43.220819,-96.500599 43.22074,-96.500776 43.220677,-96.501198 43.220574,-96.501296 43.220564,-96.501632 43.22062,-96.501771 43.220657,-96.501856 43.220694,-96.502513 43.221012,-96.50264 43.221067,-96.503161 43.221274,-96.50324 43.221316,-96.503315 43.221363,-96.503393 43.221406,-96.503658 43.221504,-96.503841 43.221557,-96.503935 43.221579,-96.504706 43.221705,-96.504852 43.221723,-96.505226 43.221756,-96.505293 43.221763,-96.505787 43.221782,-96.506721 43.221711,-96.506964 43.22168,-96.507248 43.221617,-96.507568 43.221525,-96.508226 43.221277,-96.508268 43.221258,-96.508551 43.221117,-96.508749 43.220958,-96.508775 43.220928,-96.50883 43.22079,-96.508847 43.220576,-96.508841 43.220469,-96.508771 43.220261,-96.508509 43.219647,-96.508166 43.218975,-96.50811 43.218765,-96.508069 43.218301,-96.508069 43.21823,-96.50809 43.218053,-96.508144 43.217806,-96.508224 43.217601,-96.508244 43.217569,-96.508447 43.217368,-96.508644 43.217262,-96.50886 43.217174,-96.508906 43.217162,-96.50906 43.21716,-96.509204 43.217184,-96.509342 43.217224,-96.510186 43.217521,-96.51111 43.217771,-96.511201 43.2178,-96.511243 43.217818,-96.511357 43.217887,-96.511613 43.218105,-96.511682 43.218156,-96.512166 43.218461,-96.512686 43.218668,-96.512731 43.218683,-96.512826 43.218703,-96.513309 43.218773,-96.513801 43.218806,-96.514294 43.218805,-96.514588 43.218782,-96.515117 43.218691,-96.51539 43.218611,-96.515483 43.218587,-96.515619 43.218544,-96.515873 43.218435,-96.516081 43.218339,-96.516674 43.218163,-96.516837 43.218083,-96.51754 43.217825,-96.51768 43.217788,-96.517971 43.217753,-96.518367 43.217749,-96.519649 43.217778,-96.519748 43.217785,-96.52004 43.21782,-96.520182 43.217848,-96.520417 43.217902,-96.520692 43.217983,-96.520853 43.218065,-96.520891 43.218088,-96.521084 43.218251,-96.521168 43.218333,-96.521213 43.218348,-96.52133 43.218414,-96.521366 43.218439,-96.521394 43.218468,-96.521415 43.218501,-96.521444 43.218569,-96.521518 43.218776,-96.521542 43.218917,-96.521543 43.218953,-96.521523 43.21913,-96.521506 43.219164,-96.521481 43.219195,-96.521414 43.219251,-96.521446 43.219355,-96.521451 43.219391,-96.521415 43.219782,-96.521404 43.219818,-96.521387 43.219851,-96.521348 43.219903,-96.521354 43.219999,-96.521363 43.220034,-96.521451 43.220276,-96.521656 43.220561,-96.521718 43.220617,-96.522098 43.220989,-96.522226 43.221098,-96.522295 43.22115,-96.522481 43.221267,-96.522521 43.221288,-96.522968 43.221441,-96.523338 43.221539,-96.523437 43.221539,-96.523582 43.221562,-96.523671 43.221593,-96.523711 43.221614,-96.523747 43.221639,-96.523777 43.221667,-96.523856 43.221758,-96.523954 43.22196,-96.523966 43.221995,-96.523974 43.222065,-96.524027 43.222125,-96.524307 43.222375,-96.524373 43.222428,-96.525335 43.223095,-96.526012 43.223664,-96.526488 43.224025,-96.526524 43.224052,-96.526635 43.224122,-96.52672 43.224159,-96.526808 43.22419,-96.526997 43.224233,-96.527239 43.224267,-96.527338 43.224264,-96.527583 43.224248,-96.527963 43.224173,-96.52806 43.224159,-96.528207 43.22415,-96.528651 43.224149,-96.528797 43.224167,-96.529363 43.224296,-96.529449 43.224331,-96.530235 43.224703,-96.53095 43.225085,-96.531363 43.22534,-96.531539 43.225466,-96.531665 43.225575,-96.531752 43.225662,-96.531997 43.22593,-96.53215 43.22607,-96.532361 43.226221,-96.532401 43.226242,-96.532573 43.226311,-96.53262 43.226322,-96.532818 43.226329,-96.533063 43.226307,-96.533161 43.226302,-96.53321 43.226307,-96.533257 43.226318,-96.533375 43.226383,-96.533637 43.226546,-96.533669 43.226573,-96.533795 43.226767,-96.533854 43.226915,-96.53397 43.226982,-96.534013 43.227,-96.534107 43.227022,-96.534497 43.227063,-96.534639 43.227095,-96.535172 43.227355,-96.535299 43.227404,-96.535823 43.227606,-96.535915 43.227634,-96.536061 43.227647,-96.536308 43.227643,-96.536357 43.227636,-96.536546 43.227594,-96.536672 43.227538,-96.536711 43.227516,-96.536744 43.22749,-96.536762 43.227457,-96.536807 43.227281,-96.536877 43.227187,-96.53693 43.227127,-96.536952 43.227095,-96.536967 43.227061,-96.53699 43.226919,-96.537 43.226884,-96.537108 43.226764,-96.537144 43.22674,-96.5374 43.226632,-96.537628 43.226564,-96.537721 43.22654,-96.538384 43.226395,-96.538791 43.226267,-96.539183 43.226115,-96.539476 43.225985,-96.539907 43.225747,-96.540119 43.225655,-96.540246 43.225632,-96.540295 43.22563,-96.540345 43.225633,-96.540586 43.22567,-96.540678 43.225695,-96.540972 43.225827,-96.541239 43.22592,-96.541379 43.225956,-96.541661 43.226021,-96.5419 43.226065,-96.542195 43.226086,-96.542491 43.226095,-96.54259 43.226091,-96.54296 43.226056,-96.543323 43.226023,-96.543815 43.225989,-96.544301 43.22593,-96.544695 43.225915,-96.545286 43.225945,-96.54548 43.225973,-96.545838 43.226094,-96.546056 43.226178,-96.546537 43.226428,-96.547043 43.226651,-96.547223 43.226711,-96.547541 43.22681,-96.547914 43.226903,-96.548201 43.226955,-96.548349 43.226965,-96.548497 43.226965,-96.549631 43.226943,-96.550268 43.226992,-96.550413 43.227015,-96.550561 43.227027,-96.551597 43.227028,-96.551889 43.227064,-96.552038 43.227065,-96.552628 43.227045,-96.552725 43.227038,-96.552922 43.227034,-96.553602 43.226956,-96.554566 43.226804,-96.555281 43.226666,-96.555555 43.226587,-96.555946 43.226433,-96.556029 43.226394,-96.556065 43.22637,-96.556146 43.22633,-96.556183 43.226307,-96.556242 43.22625,-96.556322 43.226161,-96.556388 43.226065,-96.556445 43.225928,-96.556472 43.225751,-96.556506 43.225108,-96.55654 43.224895,-96.556604 43.224723,-96.556624 43.22469,-96.556848 43.224414,-96.556903 43.224355,-96.557181 43.224104,-96.557321 43.223958,-96.5574 43.223867,-96.557686 43.223491,-96.557738 43.22343,-96.557795 43.223372,-96.557888 43.223288,-96.558178 43.223094,-96.55834 43.223012,-96.558616 43.222935,-96.558664 43.222925,-96.558989 43.222887,-96.559186 43.222901,-96.559326 43.222934,-96.559491 43.223012,-96.559631 43.223113,-96.559659 43.223142,-96.559696 43.223208,-96.560003 43.223961,-96.560396 43.224727,-96.560409 43.224761,-96.560462 43.224861,-96.560659 43.225148,-96.560708 43.22521,-96.560844 43.225313,-96.561002 43.225397,-96.561194 43.225509,-96.561716 43.225831,-96.562123 43.226143,-96.562751 43.226694,-96.563346 43.227263,-96.5634 43.227323,-96.563508 43.227483,-96.563698 43.227879,-96.563703 43.227888,-96.563748 43.22799,-96.563971 43.228576,-96.564114 43.228842,-96.564344 43.229199,-96.565207 43.230281,-96.56529 43.23037,-96.565431 43.23047,-96.565583 43.230561,-96.56583 43.230679,-96.565876 43.230694,-96.566016 43.230728,-96.566556 43.230758,-96.566847 43.230798,-96.567658 43.231062,-96.567788 43.231113,-96.567957 43.231187,-96.568044 43.23122,-96.568261 43.231314,-96.568289 43.231344,-96.568521 43.23166,-96.568697 43.231916,-96.569178 43.2327,-96.56939 43.233356,-96.569483 43.233641,-96.569513 43.233818,-96.56952 43.233853,-96.569528 43.233924,-96.569531 43.234103,-96.569576 43.234387,-96.569591 43.234457,-96.569594 43.234493,-96.569572 43.23467,-96.569423 43.235231,-96.569405 43.235303,-96.569264 43.235684,-96.56915 43.235991,-96.569027 43.236411,-96.569024 43.236424,-96.56896 43.236764,-96.568974 43.237014,-96.569023 43.237189,-96.569059 43.237256,-96.569291 43.23753,-96.56956 43.23774,-96.5696 43.23776,-96.569913 43.237866,-96.570004 43.237893,-96.570307 43.237972,-96.571061 43.23817,-96.571165 43.238197,-96.571275 43.238253,-96.571316 43.238274,-96.571378 43.23833,-96.571403 43.238361,-96.571486 43.238491,-96.571502 43.238561,-96.571509 43.238633,-96.571486 43.238847,-96.571483 43.238857,-96.571438 43.239022,-96.571414 43.239078,-96.571278 43.239179,-96.569864 43.240181,-96.569712 43.240322,-96.569302 43.240811,-96.569068 43.241126,-96.568762 43.241654,-96.568661 43.241777,-96.568524 43.241926,-96.568163 43.242221,-96.567908 43.24239,-96.567679 43.242577,-96.567152 43.242955,-96.566735 43.243309,-96.566494 43.243489,-96.566244 43.243704,-96.56567 43.244201,-96.565633 43.244226,-96.565191 43.244454,-96.565146 43.244469,-96.565052 43.244492,-96.565004 43.244499,-96.564855 43.244498,-96.564661 43.244472,-96.564568 43.244448,-96.563929 43.244256,-96.563763 43.244178,-96.563604 43.244093,-96.563138 43.24389,-96.562812 43.243806,-96.562425 43.243749,-96.562031 43.243725,-96.561784 43.243724,-96.561537 43.243737,-96.561146 43.243779,-96.560713 43.24385,-96.56049 43.243927,-96.56045 43.243947,-96.560395 43.244007,-96.560335 43.244064,-96.560313 43.244096,-96.560251 43.244231,-96.560241 43.244267,-96.560225 43.244409,-96.560192 43.244513,-96.560085 43.244661,-96.559614 43.245027,-96.559301 43.245201,-96.558977 43.245365,-96.55876 43.245451,-96.558669 43.245479,-96.556862 43.24596,-96.555831 43.246307,-96.555329 43.246459,-96.554934 43.246607,-96.554424 43.246826,-96.553702 43.2472,-96.553367 43.247413,-96.553285 43.247453,-96.553241 43.247469,-96.553103 43.247508,-96.553054 43.247513,-96.552511 43.247512,-96.552166 43.247492,-96.551974 43.247458,-96.551104 43.247202,-96.549883 43.246728,-96.549598 43.246669,-96.5495 43.246663,-96.549402 43.246671,-96.549316 43.246707,-96.549279 43.24673,-96.549187 43.246814,-96.549168 43.246848,-96.549125 43.24695,-96.549109 43.247093,-96.549195 43.247626,-96.54934 43.248005,-96.549534 43.248372,-96.549607 43.248465,-96.549826 43.248659,-96.550009 43.248801,-96.551038 43.249603,-96.551102 43.249658,-96.551248 43.249802,-96.55133 43.249932,-96.551429 43.250172,-96.551387 43.250255,-96.551371 43.250326,-96.551373 43.250361,-96.551425 43.250608,-96.551509 43.250851,-96.551531 43.250883,-96.551621 43.250969,-96.551656 43.250993,-96.551698 43.251013,-96.55174 43.251102,-96.551975 43.251266,-96.552346 43.251637,-96.552537 43.251789,-96.552567 43.251817,-96.55266 43.251943,-96.552689 43.252012,-96.552705 43.252082,-96.552677 43.25226,-96.552591 43.252466,-96.55247 43.252528,-96.552433 43.252551,-96.552337 43.252632,-96.552211 43.252689,-96.552174 43.252712,-96.552045 43.25282,-96.55202 43.252851,-96.551988 43.252918,-96.551911 43.253049,-96.551855 43.253222,-96.551879 43.253507,-96.551919 43.25361,-96.552001 43.25374,-96.552026 43.253771,-96.552336 43.254087,-96.552541 43.254296,-96.552601 43.254352,-96.552665 43.254448,-96.552767 43.25476,-96.55272 43.255044,-96.552722 43.255069,-96.552733 43.255187,-96.552733 43.255579,-96.552699 43.255972,-96.552591 43.256247,-96.552512 43.256378,-96.552422 43.256582,-96.552411 43.256689,-96.552418 43.25676,-96.552463 43.256935,-96.552475 43.257006,-96.552484 43.257291,-96.552514 43.257504,-96.552574 43.257601,-96.552599 43.257632,-96.552657 43.257728,-96.552673 43.257761,-96.552675 43.257795,-96.552662 43.2579,-96.552648 43.25797,-96.552644 43.258042,-96.552658 43.258112,-96.55266 43.258148,-96.552683 43.258179,-96.552774 43.258264,-96.552793 43.258287,-96.552799 43.258294,-96.552879 43.258464,-96.552898 43.258496,-96.553052 43.258585,-96.553143 43.258614,-96.553151 43.258685,-96.553194 43.258786,-96.553198 43.258821,-96.553235 43.258883,-96.553275 43.258903,-96.553391 43.25895,-96.553379 43.259042,-96.553354 43.259111,-96.55338 43.259141,-96.553395 43.259175,-96.553408 43.259282,-96.553484 43.259451,-96.553499 43.259472,-96.553507 43.259482,-96.553536 43.25951,-96.553688 43.259601,-96.55373 43.25962,-96.553777 43.259631,-96.553875 43.25964,-96.553987 43.259641,-96.554118 43.25969,-96.554213 43.259712,-96.554319 43.259717,-96.55442 43.259796,-96.554583 43.259882,-96.554619 43.259901,-96.554664 43.259917,-96.554907 43.259949,-96.554969 43.259951,-96.555006 43.259952,-96.555117 43.259956,-96.555154 43.259958,-96.555541 43.259901,-96.555585 43.259886,-96.555617 43.259859,-96.555717 43.259736,-96.555819 43.259658,-96.556198 43.259329,-96.556485 43.259132,-96.556525 43.259111,-96.556656 43.259062,-96.556747 43.259033,-96.556794 43.259023,-96.55694 43.259006,-96.55699 43.259008,-96.557136 43.259024,-96.557184 43.259034,-96.557231 43.259033,-96.557865 43.258956,-96.558556 43.258944,-96.558852 43.258957,-96.559511 43.259036,-96.560847 43.259198,-96.561514 43.25933,-96.561686 43.259399,-96.561731 43.259414,-96.561815 43.259452,-96.562108 43.259642,-96.562306 43.259749,-96.562435 43.259802,-96.562573 43.259839,-96.563696 43.259973,-96.564535 43.260181,-96.56463 43.260199,-96.564823 43.260227,-96.564955 43.260277,-96.565097 43.260376,-96.56516 43.260431,-96.565306 43.260575,-96.565506 43.260821,-96.565899 43.261318,-96.565986 43.261404,-96.566702 43.261898,-96.566784 43.261936,-96.567085 43.262055,-96.567454 43.262158,-96.567501 43.262168,-96.567988 43.262227,-96.56822 43.262289,-96.568579 43.262452,-96.568863 43.262514,-96.569249 43.26257,-96.569345 43.262587,-96.569529 43.262639,-96.569784 43.262748,-96.569859 43.262794,-96.570334 43.263155,-96.570363 43.263184,-96.570523 43.263318,-96.570581 43.263375,-96.570599 43.263408,-96.570608 43.263444,-96.570692 43.263648,-96.570877 43.263816,-96.570903 43.263846,-96.571079 43.264102,-96.571127 43.264164,-96.571355 43.264353,-96.571504 43.264538,-96.571573 43.264589,-96.571707 43.264677,-96.571719 43.264685,-96.57178 43.264741,-96.571991 43.264891,-96.572065 43.264938,-96.572357 43.265071,-96.572394 43.265095,-96.572489 43.265177,-96.572529 43.265197,-96.572787 43.265302,-96.572921 43.265346,-96.573001 43.265387,-96.573075 43.265433,-96.573695 43.265785,-96.57377 43.265831,-96.574333 43.266232,-96.574397 43.266286,-96.574573 43.266458,-96.574755 43.266711,-96.574805 43.266773,-96.575124 43.267046,-96.575297 43.267263,-96.575393 43.267345,-96.575448 43.267376,-96.575947 43.267823,-96.576411 43.267995,-96.576515 43.268071,-96.576991 43.268259,-96.577037 43.268273,-96.577318 43.268339,-96.577708 43.26839,-96.577807 43.268388,-96.578002 43.268369,-96.578145 43.268344,-96.578585 43.268185,-96.57882 43.268129,-96.578868 43.268122,-96.578917 43.268121,-96.579065 43.268127,-96.579114 43.268122,-96.57945 43.268066,-96.579846 43.268067,-96.580043 43.26808,-96.580386 43.268112,-96.580485 43.268117,-96.581078 43.268103,-96.581322 43.268072,-96.581464 43.268041,-96.581553 43.26801,-96.581634 43.267969,-96.581737 43.267892,-96.581775 43.267869,-96.582096 43.267703,-96.582231 43.26766,-96.582328 43.267645,-96.582601 43.267566,-96.582699 43.267563,-96.582945 43.267568,-96.583569 43.267662,-96.583623 43.267676,-96.58407 43.26783,-96.584229 43.267915,-96.584431 43.268118,-96.584463 43.268145,-96.584644 43.268267,-96.584817 43.268395,-96.585313 43.268839,-96.585341 43.268869,-96.58566 43.269352,-96.585699 43.269455,-96.585724 43.269739,-96.585715 43.269775,-96.585647 43.269946,-96.585615 43.270013,-96.585524 43.27014,-96.585423 43.270219,-96.585407 43.270252,-96.585398 43.270287,-96.585378 43.27032,-96.585348 43.270348,-96.585308 43.270369,-96.585179 43.270422,-96.585145 43.270446,-96.585103 43.270511,-96.58505 43.270684,-96.585046 43.27072,-96.585048 43.270897,-96.58508 43.271074,-96.585112 43.271141,-96.585164 43.271278,-96.585196 43.271346,-96.585241 43.271409,-96.585293 43.271469,-96.58539 43.271594,-96.586096 43.272239,-96.586239 43.272385,-96.586291 43.272445,-96.586335 43.272547,-96.586454 43.273003,-96.586521 43.273429,-96.586534 43.273572,-96.586525 43.273715,-96.586504 43.273784,-96.586463 43.273888,-96.586452 43.273958,-96.586423 43.274027,-96.586337 43.274194,-96.586324 43.274228,-96.586196 43.274417,-96.586149 43.27448,-96.58607 43.27457,-96.585825 43.274794,-96.585722 43.274871,-96.58554 43.274991,-96.585264 43.275141,-96.584932 43.275494,-96.584865 43.27559,-96.5846 43.276013,-96.584194 43.276501,-96.584127 43.276553,-96.583957 43.276626,-96.583765 43.27666,-96.583716 43.27666,-96.583667 43.276655,-96.583573 43.276636,-96.583527 43.276623,-96.583353 43.276556,-96.583312 43.276536,-96.583277 43.27651,-96.583142 43.276361,-96.583125 43.276327,-96.58305 43.276084,-96.583038 43.276013,-96.583033 43.275942,-96.583036 43.275907,-96.58303 43.275836,-96.583124 43.275375,-96.583216 43.275098,-96.58323 43.275027,-96.583234 43.274885,-96.583216 43.274707,-96.583191 43.274638,-96.583171 43.274605,-96.583111 43.274549,-96.582937 43.274422,-96.582575 43.274308,-96.58243 43.274287,-96.582184 43.274282,-96.581943 43.274321,-96.581683 43.274423,-96.581196 43.274669,-96.581159 43.274692,-96.5811 43.274749,-96.580881 43.274941,-96.580846 43.275007,-96.580804 43.275326,-96.5808 43.275397,-96.580775 43.275573,-96.580724 43.275711,-96.580693 43.275779,-96.580522 43.276036,-96.580491 43.276063,-96.580096 43.276332,-96.57999 43.276408,-96.579239 43.277027,-96.578575 43.277604,-96.578339 43.277833,-96.578133 43.278077,-96.57795 43.278169,-96.577916 43.278196,-96.577754 43.278373,-96.577729 43.278477,-96.577726 43.278512,-96.57764 43.278862,-96.577608 43.278929,-96.577597 43.278964,-96.577557 43.279177,-96.57756 43.279212,-96.577592 43.279317,-96.577703 43.279591,-96.577819 43.279938,-96.578016 43.280266,-96.578138 43.280539,-96.578315 43.281424,-96.578319 43.281456,-96.578439 43.282492,-96.578499 43.283383,-96.578532 43.283631,-96.578643 43.283942,-96.578685 43.284044,-96.578776 43.284171,-96.578828 43.284232,-96.57893 43.284309,-96.57909 43.284394,-96.579337 43.284617,-96.579624 43.284908,-96.57985 43.285185,-96.579924 43.285316,-96.580293 43.285699,-96.580753 43.286071,-96.580789 43.286125,-96.580913 43.286396,-96.581042 43.286779,-96.581136 43.287202,-96.581398 43.287815,-96.581416 43.287958,-96.58142 43.288029,-96.581383 43.288742,-96.581351 43.288884,-96.581018 43.289706,-96.580817 43.290073,-96.580637 43.290518,-96.580605 43.290586,-96.580261 43.291217,-96.580235 43.291247,-96.580024 43.291398,-96.579995 43.291427,-96.57996 43.291453,-96.579803 43.291539,-96.57976 43.291556,-96.579666 43.291581,-96.579639 43.291609,-96.579541 43.291734,-96.579457 43.291863,-96.579176 43.292473,-96.579115 43.292863,-96.579145 43.293757,-96.579178 43.293898,-96.579277 43.294211,-96.579495 43.294646,-96.579538 43.294748,-96.579541 43.294783,-96.579511 43.295068,-96.579508 43.295139,-96.579472 43.295243,-96.579411 43.295378,-96.579401 43.295413,-96.57941 43.295448,-96.579428 43.295481,-96.579448 43.29555,-96.579448 43.295621,-96.579454 43.295657,-96.579473 43.295689,-96.579503 43.295718,-96.579543 43.295739,-96.579822 43.29581,-96.57987 43.295819,-96.580113 43.295839,-96.580212 43.295842,-96.580309 43.295834,-96.580405 43.29582,-96.580452 43.295809,-96.580491 43.295787,-96.580526 43.295761,-96.580555 43.295733,-96.580867 43.295722,-96.580964 43.295712,-96.58135 43.295657,-96.581397 43.295645,-96.581528 43.295595,-96.582066 43.29523,-96.582345 43.295035,-96.582757 43.294783,-96.58307 43.294464,-96.583246 43.29425,-96.583378 43.2941,-96.583708 43.293703,-96.583822 43.293586,-96.58402 43.293427,-96.584158 43.293325,-96.584345 43.293209,-96.584547 43.293106,-96.584891 43.292968,-96.585574 43.292758,-96.585761 43.292711,-96.585809 43.292704,-96.586006 43.29269,-96.586103 43.292679,-96.586678 43.292572,-96.587163 43.292507,-96.587645 43.292423,-96.587985 43.292377,-96.588033 43.292379,-96.588272 43.292427,-96.588314 43.292444,-96.588435 43.292505,-96.588465 43.292533,-96.588534 43.292584,-96.588636 43.292706,-96.588676 43.292771,-96.588702 43.292801,-96.588738 43.292868,-96.588876 43.293284,-96.588899 43.293425,-96.588916 43.293496,-96.588918 43.293507,-96.588994 43.29392,-96.589065 43.294128,-96.589069 43.294162,-96.589039 43.294266,-96.589041 43.294512,-96.589059 43.29458,-96.589093 43.294826,-96.589113 43.294932,-96.589192 43.295175,-96.589274 43.295265,-96.589239 43.295325,-96.589213 43.295355,-96.58915 43.29541,-96.589056 43.295687,-96.588999 43.295787,-96.588881 43.295901,-96.588492 43.296175,-96.5882 43.296309,-96.588112 43.296341,-96.58751 43.296502,-96.587462 43.296504,-96.587417 43.296487,-96.587322 43.296468,-96.586879 43.29646,-96.586296 43.296535,-96.585965 43.296607,-96.585779 43.296656,-96.585647 43.296705,-96.584869 43.297015,-96.584791 43.297059,-96.584683 43.297132,-96.584421 43.297392,-96.584367 43.297451,-96.584335 43.297478,-96.584281 43.297538,-96.584249 43.297565,-96.583956 43.297756,-96.583619 43.297904,-96.583311 43.298016,-96.583225 43.298051,-96.582947 43.298125,-96.5828 43.298136,-96.582503 43.298135,-96.582307 43.29812,-96.58221 43.298107,-96.581829 43.298031,-96.58156 43.297941,-96.581176 43.297873,-96.581029 43.297858,-96.580634 43.297853,-96.580437 43.297863,-96.58034 43.297872,-96.579966 43.297968,-96.579924 43.297986,-96.579684 43.298112,-96.579501 43.298165,-96.579262 43.298292,-96.579135 43.298348,-96.578447 43.298547,-96.577842 43.298657,-96.57779 43.298666,-96.577634 43.298694,-96.577583 43.298704,-96.576839 43.298838,-96.57655 43.298883,-96.576501 43.298891,-96.575959 43.298921,-96.575279 43.299014,-96.574591 43.299063,-96.574542 43.299064,-96.574209 43.299047,-96.573902 43.299032,-96.573706 43.299026,-96.573467 43.298987,-96.573422 43.298973,-96.573286 43.298931,-96.573201 43.298895,-96.573026 43.298829,-96.572586 43.2986,-96.572479 43.298526,-96.572179 43.298291,-96.57215 43.298262,-96.571733 43.297736,-96.571625 43.297575,-96.571148 43.29675,-96.571034 43.296592,-96.570786 43.296324,-96.570714 43.296275,-96.570483 43.296141,-96.569938 43.295895,-96.569319 43.295539,-96.569009 43.295427,-96.568764 43.295361,-96.568632 43.295313,-96.568498 43.295269,-96.568357 43.295235,-96.568309 43.295227,-96.568063 43.295209,-96.568013 43.295212,-96.567981 43.295238,-96.567906 43.295322,-96.567821 43.295419,-96.567748 43.295512,-96.567707 43.295577,-96.567527 43.295746,-96.567324 43.295901,-96.567284 43.295923,-96.567014 43.29601,-96.566819 43.296032,-96.566525 43.296048,-96.566475 43.296048,-96.566427 43.296039,-96.566295 43.29599,-96.566168 43.295935,-96.566133 43.295911,-96.565717 43.295556,-96.565297 43.29516,-96.564964 43.294896,-96.564606 43.294709,-96.564518 43.294676,-96.564471 43.294666,-96.56438 43.294639,-96.564282 43.294628,-96.564233 43.294629,-96.563988 43.294649,-96.563698 43.294692,-96.563651 43.294703,-96.563224 43.294883,-96.563067 43.294969,-96.56258 43.295325,-96.562426 43.295414,-96.562383 43.295522,-96.562347 43.295588,-96.562317 43.295617,-96.562243 43.295663,-96.562108 43.295765,-96.562038 43.295813,-96.56186 43.295873,-96.561768 43.295895,-96.561718 43.295897,-96.56167 43.295888,-96.561621 43.295885,-96.561532 43.295933,-96.561488 43.295948,-96.561024 43.296066,-96.560879 43.296087,-96.5596 43.296141,-96.557881 43.296275,-96.557733 43.296281,-96.557294 43.296332,-96.557244 43.296335,-96.557096 43.296332,-96.556359 43.296373,-96.555736 43.296483,-96.55495 43.296547,-96.554902 43.296545,-96.554805 43.296532,-96.554712 43.296509,-96.554669 43.296491,-96.554632 43.296467,-96.554605 43.296437,-96.55459 43.29638,-96.554599 43.296237,-96.554626 43.296168,-96.554646 43.296136,-96.554751 43.296015,-96.555025 43.295764,-96.555092 43.295712,-96.555303 43.295563,-96.555396 43.295481,-96.555442 43.295418,-96.555454 43.295383,-96.555473 43.295241,-96.555466 43.29517,-96.555386 43.294891,-96.555351 43.294751,-96.555323 43.294682,-96.55498 43.294089,-96.554938 43.294025,-96.554738 43.293821,-96.554574 43.29369,-96.554243 43.293426,-96.554139 43.29335,-96.5541 43.293329,-96.55403 43.293279,-96.553955 43.293232,-96.553757 43.293126,-96.553589 43.293053,-96.553305 43.292911,-96.553128 43.292846,-96.553082 43.292835,-96.553036 43.292848,-96.55294 43.292864,-96.552693 43.29287,-96.552351 43.292838,-96.552252 43.292833,-96.552203 43.292834,-96.552056 43.29285,-96.551914 43.292877,-96.551639 43.292958,-96.551251 43.293009,-96.551205 43.29302,-96.550935 43.293108,-96.550896 43.293129,-96.550869 43.293159,-96.550799 43.293254,-96.550765 43.29332,-96.550742 43.293352,-96.550611 43.293696,-96.550579 43.293763,-96.550553 43.293794,-96.550494 43.29385,-96.550367 43.293959,-96.550152 43.294107,-96.550072 43.294148,-96.550035 43.294172,-96.54995 43.294209,-96.549548 43.294343,-96.549501 43.294355,-96.549452 43.29436,-96.549206 43.294371,-96.549058 43.29436,-96.548916 43.294332,-96.547882 43.294102,-96.547495 43.294041,-96.547397 43.294035,-96.547068 43.294052,-96.547053 43.294053,-96.546957 43.29407,-96.546401 43.294221,-96.545832 43.294436,-96.545699 43.294483,-96.545604 43.294502,-96.545411 43.294529,-96.545219 43.294562,-96.544775 43.294573,-96.544727 43.294581,-96.544692 43.294607,-96.544533 43.29469,-96.544485 43.294701,-96.544388 43.294709,-96.544146 43.294742,-96.544096 43.294745,-96.544047 43.294742,-96.54395 43.294729,-96.543821 43.294742,-96.543403 43.294852,-96.541856 43.295222,-96.541387 43.295331,-96.541342 43.295345,-96.541247 43.295365,-96.541156 43.295392,-96.540943 43.29548,-96.54086 43.295519,-96.540815 43.295533,-96.540774 43.295553,-96.540667 43.295626,-96.54057 43.295707,-96.540517 43.295767,-96.540498 43.2958,-96.54035 43.296129,-96.540315 43.296208,-96.540156 43.296507,-96.539655 43.297283,-96.53961 43.297346,-96.539473 43.297495,-96.539425 43.297557,-96.539262 43.297857,-96.539091 43.298184,-96.539053 43.298257,-96.539032 43.29829,-96.538839 43.298498,-96.538764 43.298544,-96.538717 43.298551,-96.538618 43.298555,-96.538569 43.298548,-96.538524 43.298535,-96.538138 43.298375,-96.537905 43.298317,-96.537856 43.29831,-96.537758 43.298309,-96.537512 43.298315,-96.537326 43.298361,-96.53634 43.29859,-96.535612 43.298697,-96.534929 43.298762,-96.53488 43.298764,-96.534588 43.298803,-96.533965 43.298916,-96.532976 43.299137,-96.531296 43.299558,-96.531018 43.299632,-96.530691 43.299713,-96.530467 43.299788,-96.530381 43.299823,-96.530195 43.299941,-96.530145 43.3,-96.530099 43.300063,-96.530082 43.300096,-96.53008 43.300274,-96.530087 43.30031,-96.530154 43.300405,-96.530302 43.300547,-96.530517 43.30073,-96.530718 43.300934,-96.531134 43.301287,-96.531603 43.301701,-96.531723 43.301814,-96.531921 43.30202,-96.532018 43.302144,-96.532058 43.302209,-96.532111 43.302309,-96.532222 43.302546,-96.532255 43.302866,-96.532255 43.302938,-96.532243 43.30308,-96.532175 43.303435,-96.532029 43.303924,-96.531905 43.304233,-96.53186 43.304296,-96.53183 43.304325,-96.531694 43.304428,-96.531654 43.30445,-96.531612 43.304467,-96.53114 43.304571,-96.530947 43.304588,-96.53085 43.304591,-96.530704 43.304607,-96.530221 43.304674,-96.529407 43.304933,-96.529359 43.30494,-96.529163 43.304947,-96.529016 43.304932,-96.528872 43.30491,-96.528827 43.304896,-96.528572 43.30479,-96.528491 43.304752,-96.528214 43.304677,-96.528116 43.304678,-96.527674 43.304701,-96.52763 43.304716,-96.527473 43.304802,-96.527431 43.304821,-96.527355 43.304867,-96.527055 43.305104,-96.527026 43.305132,-96.526962 43.305229,-96.526904 43.305365,-96.526869 43.305469,-96.526861 43.305611,-96.526901 43.305895,-96.526883 43.306037,-96.526885 43.306215,-96.526909 43.306284,-96.527091 43.306538,-96.52721 43.306682,-96.527305 43.306764,-96.527343 43.306787,-96.527588 43.306907,-96.527744 43.306995,-96.527825 43.307035,-96.527871 43.30705,-96.527965 43.307071,-96.52801 43.307086,-96.528086 43.307132,-96.528177 43.3072,-96.528325 43.307312,-96.528353 43.307342,-96.528571 43.307701,-96.52859 43.307878,-96.528598 43.307913,-96.528678 43.308043,-96.528887 43.308284,-96.529158 43.308972,-96.529165 43.309007,-96.529163 43.309042,-96.529154 43.309078,-96.529138 43.309111,-96.529105 43.30913,-96.529011 43.309153,-96.528877 43.309198,-96.528805 43.309247,-96.528761 43.309264,-96.528664 43.309277,-96.528617 43.309273,-96.528091 43.309078,-96.527807 43.309025,-96.527758 43.309026,-96.527713 43.30904,-96.527631 43.309078,-96.527572 43.309215,-96.527565 43.309286,-96.527499 43.30942,-96.527495 43.309455,-96.527458 43.309521,-96.527434 43.309552,-96.527417 43.309586,-96.527382 43.309726,-96.527359 43.309758,-96.527295 43.309812,-96.527217 43.309856,-96.52709 43.30991,-96.527044 43.309922,-96.526995 43.309928,-96.526945 43.309929,-96.526601 43.309903,-96.526527 43.309945,-96.526483 43.309961,-96.526435 43.309971,-96.52605 43.310013,-96.525809 43.310022,-96.525678 43.310045,-96.525475 43.310082,-96.525247 43.310146,-96.525153 43.310168,-96.525103 43.310171,-96.525005 43.310163,-96.524921 43.310205,-96.524596 43.310422,-96.524493 43.310499,-96.524433 43.310555,-96.524224 43.310797,-96.524159 43.310892,-96.524104 43.311029,-96.524057 43.311345,-96.524059 43.311381,-96.524095 43.311557,-96.524175 43.311726,-96.524195 43.311758,-96.524321 43.311911,-96.524485 43.312044,-96.524522 43.312067,-96.524614 43.312091,-96.524708 43.31211,-96.524895 43.312156,-96.525231 43.312209,-96.525373 43.31224,-96.525466 43.312265,-96.5261 43.312464,-96.526538 43.312627,-96.527127 43.312888,-96.527166 43.31291,-96.527383 43.313055,-96.52754 43.313192,-96.527606 43.313244,-96.527635 43.313273,-96.527731 43.313354,-96.527873 43.313453,-96.528114 43.313631,-96.528199 43.313719,-96.528314 43.313875,-96.52842 43.313996,-96.528441 43.314028,-96.528506 43.314236,-96.528532 43.314304,-96.528636 43.314504,-96.528662 43.314609,-96.528669 43.31468,-96.528639 43.314964,-96.528641 43.314999,-96.528682 43.315211,-96.528704 43.315281,-96.528853 43.315657,-96.529005 43.316217,-96.529011 43.316395,-96.529001 43.316428,-96.528942 43.316486,-96.528906 43.316509,-96.528865 43.316529,-96.528819 43.316544,-96.528674 43.316566,-96.528629 43.316559,-96.528508 43.316498,-96.528294 43.31641,-96.52822 43.316364,-96.528141 43.316321,-96.528067 43.316274,-96.527755 43.316045,-96.527683 43.315998,-96.527313 43.315824,-96.527177 43.315785,-96.527083 43.315766,-96.527034 43.315761,-96.526692 43.315794,-96.526646 43.315808,-96.526519 43.315863,-96.526503 43.315893,-96.526507 43.315929,-96.5265 43.315965,-96.526483 43.315998,-96.52645 43.316025,-96.526312 43.316214,-96.526061 43.31664,-96.525976 43.316681,-96.525939 43.316705,-96.52591 43.316734,-96.525866 43.316797,-96.525824 43.316899,-96.525737 43.317359,-96.525664 43.317998,-96.525623 43.318137,-96.525608 43.318208,-96.525603 43.318279,-96.525611 43.318492,-96.525622 43.318563,-96.525639 43.318633,-96.525653 43.318667,-96.525777 43.3189,-96.525801 43.318932,-96.52583 43.31896,-96.525899 43.31901,-96.525938 43.319033,-96.525985 43.319041,-96.526134 43.31904,-96.526277 43.319018,-96.526324 43.319006,-96.52642 43.31899,-96.526464 43.318975,-96.526731 43.318817,-96.526829 43.318828,-96.526879 43.318825,-96.526972 43.318805,-96.527062 43.31878,-96.52711 43.318775,-96.527277 43.318702,-96.527364 43.318673,-96.52741 43.318664,-96.527459 43.318661,-96.527551 43.318645,-96.527695 43.318632,-96.527849 43.318642,-96.527936 43.318648,-96.527985 43.318646,-96.528126 43.318667,-96.528171 43.318677,-96.52821 43.318696,-96.528259 43.318698,-96.528416 43.318762,-96.528464 43.318765,-96.528498 43.318788,-96.528585 43.31881,-96.52862 43.318833,-96.528667 43.318838,-96.528705 43.318857,-96.52884 43.318894,-96.528887 43.318901,-96.528927 43.318922,-96.528973 43.318936,-96.529021 43.318944,-96.529104 43.318947,-96.529206 43.31907,-96.529472 43.31928,-96.529531 43.319337,-96.529843 43.319784,-96.530035 43.31999,-96.530107 43.320039,-96.53019 43.320077,-96.530455 43.320237,-96.53051 43.320296,-96.530752 43.320471,-96.530939 43.320638,-96.530962 43.320669,-96.530975 43.320703,-96.530973 43.320775,-96.530935 43.320878,-96.530912 43.32091,-96.530881 43.320938,-96.530686 43.321044,-96.530495 43.321082,-96.52986 43.321147,-96.529789 43.321195,-96.529725 43.321248,-96.529689 43.321272,-96.529663 43.321303,-96.529647 43.321336,-96.529499 43.321559,-96.529332 43.322005,-96.529189 43.322308,-96.529159 43.322337,-96.529056 43.322413,-96.529009 43.322472,-96.52897 43.322649,-96.52895 43.322718,-96.528933 43.322825,-96.528901 43.323251,-96.528906 43.323892,-96.528959 43.32403,-96.528945 43.324061,-96.528926 43.324097,-96.52888 43.324161,-96.528866 43.324195,-96.528848 43.324337,-96.528865 43.324371,-96.52903 43.32455,-96.529552 43.324979,-96.530019 43.325245,-96.530385 43.325535,-96.530699 43.325857,-96.530798 43.325922,-96.531021 43.326001,-96.531468 43.326225,-96.531573 43.326301,-96.531604 43.326329,-96.531705 43.326453,-96.53181 43.326616,-96.531964 43.32688,-96.532071 43.327042,-96.532106 43.32711,-96.53218 43.32728,-96.532199 43.327313,-96.532607 43.327764,-96.532702 43.327891,-96.533189 43.328714,-96.533218 43.328783,-96.533224 43.328818,-96.533207 43.328962,-96.533187 43.328994,-96.532863 43.329311,-96.532819 43.329375,-96.53273 43.329542,-96.532689 43.329608,-96.532423 43.32999,-96.532375 43.330052,-96.531931 43.330692,-96.531477 43.3316,-96.531464 43.331667,-96.531458 43.331883,-96.531498 43.331986,-96.531604 43.332223,-96.531895 43.332756,-96.532078 43.333048,-96.532123 43.333112,-96.53237 43.333418,-96.532415 43.333481,-96.532491 43.333573,-96.532507 43.333606,-96.532501 43.33382,-96.53242 43.334245,-96.532418 43.334388,-96.532432 43.334458,-96.53245 43.334491,-96.53248 43.33452,-96.532516 43.334545,-96.532559 43.334561,-96.532607 43.334569,-96.532755 43.334576,-96.533396 43.334547,-96.533593 43.334549,-96.533642 43.334553,-96.534073 43.334636,-96.534117 43.334652,-96.534235 43.334716,-96.534429 43.334878,-96.534645 43.335159,-96.534914 43.33562,-96.534949 43.335687,-96.535089 43.336467,-96.535087 43.336502,-96.535074 43.336536,-96.535034 43.336639,-96.535022 43.336674,-96.534515 43.336937,-96.534072 43.337259,-96.533625 43.337408,-96.533494 43.337457,-96.533456 43.33748,-96.533329 43.337588,-96.533058 43.337795,-96.532531 43.33822,-96.532337 43.338406,-96.532324 43.33842,-96.532102 43.338657,-96.531665 43.339335,-96.531596 43.339544,-96.531561 43.339969,-96.531601 43.340143,-96.531632 43.340211,-96.53169 43.340309,-96.531719 43.340377,-96.531736 43.340446,-96.531856 43.340827,-96.531895 43.340931,-96.531936 43.340996,-96.532009 43.341128,-96.532087 43.341219,-96.532119 43.341246,-96.532416 43.341434,-96.53251 43.341517,-96.532631 43.341671,-96.532663 43.341699,-96.532828 43.341778,-96.53287 43.341917,-96.532897 43.341986,-96.532914 43.342092,-96.53292 43.342163,-96.532929 43.342198,-96.532931 43.342268,-96.532892 43.342406,-96.53288 43.342476,-96.532843 43.342616,-96.532829 43.34265,-96.532785 43.342714,-96.532759 43.342744,-96.532362 43.343107,-96.532283 43.34315,-96.532239 43.343166,-96.532146 43.343189,-96.532096 43.343193,-96.531851 43.3432,-96.531731 43.343137,-96.531699 43.343111,-96.531682 43.343077,-96.531658 43.343008,-96.531625 43.342511,-96.531607 43.342405,-96.531596 43.34237,-96.531546 43.342308,-96.531359 43.342143,-96.531058 43.34202,-96.531011 43.342009,-96.530383 43.34191,-96.530339 43.341916,-96.530213 43.341973,-96.530167 43.341986,-96.530118 43.341988,-96.529677 43.342036,-96.529282 43.34205,-96.529177 43.342068,-96.528661 43.342162,-96.528527 43.342207,-96.528444 43.342246,-96.528063 43.342472,-96.527919 43.34257,-96.527798 43.342683,-96.527719 43.342773,-96.527672 43.342835,-96.527643 43.342864,-96.527621 43.342897,-96.527505 43.343243,-96.527478 43.343311,-96.527459 43.343381,-96.527383 43.34377,-96.527372 43.343805,-96.52726 43.344004,-96.52711 43.344187,-96.527008 43.344311,-96.526682 43.3448,-96.526558 43.344987,-96.526276 43.345323,-96.526186 43.345408,-96.52609 43.345489,-96.525461 43.345944,-96.525092 43.34636,-96.524877 43.346605,-96.524567 43.346892,-96.524542 43.346915,-96.524376 43.347134,-96.524354 43.347203,-96.524339 43.347345,-96.524293 43.347388,-96.524279 43.347422,-96.524268 43.347492,-96.52427 43.347527,-96.52426 43.347597,-96.52429 43.347702,-96.52431 43.347735,-96.524337 43.347764,-96.524442 43.347841,-96.524452 43.34793,-96.524516 43.348176,-96.524531 43.34821,-96.524672 43.348356,-96.524706 43.348382,-96.524841 43.348427,-96.524984 43.348454,-96.525033 43.348454,-96.52523 43.348438,-96.525368 43.348399,-96.525411 43.348381,-96.525531 43.348319,-96.52563 43.348239,-96.525843 43.347999,-96.525976 43.347895,-96.526214 43.347767,-96.526259 43.347751,-96.526308 43.347745,-96.526652 43.34775,-96.526847 43.347769,-96.526896 43.347771,-96.527036 43.347807,-96.527126 43.347836,-96.527253 43.347891,-96.527372 43.347955,-96.527442 43.348005,-96.527643 43.348162,-96.527667 43.348194,-96.527704 43.34826,-96.527716 43.348295,-96.527766 43.348543,-96.527766 43.348578,-96.527758 43.348614,-96.527733 43.348682,-96.527593 43.348902,-96.527528 43.349007,-96.527459 43.349046,-96.527427 43.349073,-96.527403 43.349105,-96.527368 43.349171,-96.527288 43.3493,-96.527269 43.349369,-96.527268 43.349405,-96.527277 43.34944,-96.527294 43.349474,-96.527319 43.349505,-96.527337 43.349538,-96.527184 43.350042,-96.527146 43.350253,-96.527105 43.350274,-96.527069 43.350298,-96.527038 43.350326,-96.527015 43.350358,-96.52696 43.350531,-96.526958 43.350567,-96.526966 43.350637,-96.526965 43.350779,-96.52697 43.35085,-96.52698 43.350885,-96.527022 43.35095,-96.527037 43.350981,-96.527017 43.351088,-96.527022 43.351267,-96.527036 43.351299,-96.527064 43.351329,-96.527086 43.351361,-96.527044 43.351463,-96.527004 43.351528,-96.52692 43.351614,-96.52686 43.351668,-96.526718 43.351766,-96.526668 43.351827,-96.526638 43.351856,-96.526581 43.351992,-96.526555 43.352022,-96.526523 43.35205,-96.526486 43.352074,-96.526443 43.352092,-96.526386 43.352226,-96.526365 43.352259,-96.526218 43.3524,-96.526185 43.352426,-96.526035 43.352519,-96.525604 43.352759,-96.525542 43.352814,-96.525313 43.353089,-96.525142 43.353347,-96.525108 43.353472,-96.525105 43.353508,-96.525114 43.353579,-96.525176 43.353752,-96.525195 43.353785,-96.525262 43.353836,-96.525514 43.354006,-96.525582 43.354057,-96.5261 43.354388,-96.526165 43.354442,-96.526256 43.354527,-96.526653 43.354793,-96.527084 43.355138,-96.527145 43.355194,-96.52722 43.355286,-96.527386 43.355623,-96.527415 43.355691,-96.527684 43.35619,-96.527748 43.356325,-96.527826 43.356604,-96.527829 43.356675,-96.527825 43.356711,-96.527825 43.356996,-96.52781 43.357066,-96.527348 43.357974,-96.527304 43.358076,-96.527243 43.358321,-96.5272 43.358642,-96.527464 43.359655,-96.527487 43.359761,-96.527489 43.359796,-96.527475 43.360118,-96.527436 43.360329,-96.527411 43.360434,-96.52735 43.36057,-96.527291 43.360743,-96.52724 43.36099,-96.527233 43.361061,-96.527233 43.361133,-96.527222 43.361275,-96.527228 43.361382,-96.527261 43.361559,-96.527292 43.361664,-96.527557 43.362164,-96.527564 43.362199,-96.527569 43.362556,-96.527575 43.362591,-96.527589 43.362625,-96.527614 43.362657,-96.527644 43.362685,-96.527738 43.362708,-96.527787 43.362714,-96.527836 43.362713,-96.528023 43.362666,-96.528255 43.362532,-96.528428 43.362463,-96.528613 43.362414,-96.528692 43.362401,-96.528804 43.362384,-96.528853 43.362382,-96.529098 43.3624,-96.529143 43.362413,-96.529373 43.36255,-96.52946 43.362636,-96.529522 43.362772,-96.529539 43.36295,-96.529528 43.363057,-96.529507 43.363126,-96.529419 43.363366,-96.529391 43.36347,-96.52936 43.363681,-96.529388 43.364037,-96.529426 43.364248,-96.529439 43.364283,-96.529622 43.364493,-96.529644 43.364525,-96.529676 43.364553,-96.529784 43.364625,-96.52985 43.364677,-96.530344 43.365025,-96.530403 43.365083,-96.530537 43.365232,-96.530676 43.36542,-96.530821 43.365648,-96.530838 43.365681,-96.530867 43.365785,-96.530907 43.365997,-96.530873 43.366887,-96.53088 43.366975,-96.530852 43.36726,-96.530921 43.367685,-96.530936 43.367755,-96.530942 43.367817,-96.530944 43.367826,-96.530968 43.36822,-96.530958 43.368397,-96.530961 43.368433,-96.530874 43.36871,-96.530724 43.368891,-96.530422 43.369072,-96.530217 43.369172,-96.529992 43.369245,-96.529944 43.369253,-96.529401 43.3693,-96.529306 43.369309,-96.528911 43.369317,-96.528715 43.369298,-96.528557 43.369257,-96.528417 43.369197,-96.528271 43.3691,-96.528144 43.368991,-96.528123 43.368959,-96.528108 43.368925,-96.528035 43.368718,-96.52801 43.368612,-96.527996 43.368399,-96.527982 43.368365,-96.527903 43.368274,-96.527872 43.368246,-96.527823 43.368185,-96.52779 43.368159,-96.527747 43.368141,-96.52765 43.368127,-96.527109 43.368107,-96.52692 43.368114,-96.526911 43.368115,-96.526766 43.368136,-96.526718 43.368147,-96.526552 43.368223,-96.526433 43.368286,-96.526365 43.368335,-96.526006 43.368571,-96.52598 43.368601,-96.525963 43.368635,-96.525944 43.368741,-96.525946 43.368776,-96.525937 43.368808,-96.525852 43.368896,-96.52583 43.368928,-96.525802 43.368958,-96.525768 43.368984,-96.525711 43.369042,-96.525559 43.369182,-96.525314 43.369358,-96.525247 43.369411,-96.524841 43.369769,-96.524762 43.369859,-96.524751 43.369929,-96.524751 43.370071,-96.524763 43.370106,-96.524828 43.37024,-96.524887 43.370376,-96.525147 43.370637,-96.525267 43.37075,-96.525323 43.370809,-96.525468 43.370996,-96.525484 43.37103,-96.525493 43.371065,-96.525491 43.371101,-96.525499 43.371208,-96.52549 43.371242,-96.525381 43.371442,-96.525361 43.371548,-96.525343 43.371619,-96.525138 43.372281,-96.52505 43.372485,-96.52501 43.372551,-96.524982 43.37258,-96.524911 43.372629,-96.524796 43.372697,-96.524751 43.372712,-96.524658 43.372735,-96.524509 43.372736,-96.524461 43.372731,-96.524373 43.372698,-96.524333 43.372676,-96.524298 43.372651,-96.524136 43.372509,-96.523697 43.372127,-96.523568 43.372019,-96.523531 43.371996,-96.523464 43.371944,-96.52339 43.371896,-96.5232 43.371784,-96.523165 43.371759,-96.523125 43.371738,-96.523076 43.371733,-96.522829 43.371726,-96.522733 43.371741,-96.522686 43.371752,-96.522463 43.371829,-96.522194 43.371985,-96.522163 43.372013,-96.522059 43.37219,-96.522046 43.372224,-96.52202 43.372403,-96.52204 43.372432,-96.522076 43.372458,-96.522106 43.372486,-96.522124 43.37252,-96.522146 43.372589,-96.52216 43.37273,-96.522175 43.372801,-96.522195 43.372978,-96.522182 43.373192,-96.522155 43.373333,-96.522041 43.373568,-96.521889 43.373946,-96.521834 43.37397,-96.521796 43.373992,-96.521765 43.374021,-96.521725 43.374085,-96.521677 43.374185,-96.52166 43.374254,-96.521644 43.374288,-96.521625 43.374358,-96.521652 43.374499,-96.521686 43.374566,-96.521662 43.374653,-96.521531 43.374922,-96.521519 43.374957,-96.521435 43.375381,-96.521422 43.375415,-96.521349 43.375696,-96.521352 43.375839,-96.521358 43.375874,-96.521383 43.375905,-96.521867 43.376402,-96.521968 43.376481,-96.522006 43.376503,-96.522052 43.376516,-96.522139 43.376549,-96.522178 43.376572,-96.522212 43.376598,-96.522475 43.376758,-96.522701 43.376991,-96.522863 43.377127,-96.523005 43.377273,-96.522999 43.377312,-96.523005 43.377383,-96.523087 43.377551,-96.523112 43.377582,-96.523147 43.377607,-96.523275 43.377661,-96.523367 43.377687,-96.523611 43.377994,-96.523979 43.3785,-96.524027 43.378601,-96.524047 43.378671,-96.524073 43.378739,-96.524133 43.378837,-96.524351 43.379076,-96.524373 43.379108,-96.524405 43.379175,-96.524509 43.379705,-96.524517 43.379776,-96.524512 43.379812,-96.524448 43.379984,-96.524334 43.380182,-96.524309 43.380213,-96.524008 43.380449,-96.523936 43.380497,-96.523813 43.380556,-96.523235 43.380758,-96.522334 43.380951,-96.522289 43.380965,-96.522249 43.380987,-96.522144 43.381062,-96.521999 43.381207,-96.521978 43.381239,-96.521974 43.381274,-96.521983 43.38138,-96.522008 43.381448,-96.522077 43.381544,-96.522104 43.381572,-96.522141 43.381595,-96.522185 43.38161,-96.522233 43.381613,-96.522282 43.381606,-96.522469 43.381565,-96.522818 43.381437,-96.522906 43.381411,-96.522948 43.381391,-96.523038 43.381366,-96.523229 43.381346,-96.523323 43.381331,-96.523421 43.381327,-96.52347 43.381331,-96.523659 43.381367,-96.523751 43.381394,-96.523879 43.381446,-96.524077 43.38155,-96.524152 43.381595,-96.524459 43.381825,-96.524484 43.381856,-96.5245 43.381889,-96.524606 43.382271,-96.524589 43.382377,-96.524504 43.382617,-96.52448 43.382647,-96.524368 43.382717,-96.523968 43.382922,-96.52346 43.383256,-96.52322 43.383378,-96.522992 43.383513,-96.522581 43.383815,-96.522517 43.383867,-96.522441 43.383958,-96.522335 43.384077,-96.522241 43.384201,-96.521938 43.384525,-96.521917 43.384557,-96.521795 43.384711,-96.521747 43.384811,-96.521739 43.384846,-96.521756 43.385022,-96.521757 43.385093,-96.521704 43.385266,-96.521697 43.385301,-96.521671 43.385762,-96.521662 43.385905,-96.521686 43.386151,-96.521698 43.386229,-96.521792 43.386509,-96.521742 43.386612,-96.521722 43.386683,-96.52172 43.386755,-96.521734 43.386862,-96.52175 43.386932,-96.52181 43.38699,-96.521882 43.387085,-96.521912 43.387153,-96.521982 43.387362,-96.522038 43.387462,-96.522162 43.387659,-96.522191 43.387688,-96.522259 43.38774,-96.522251 43.387818,-96.522261 43.388107,-96.522288 43.388357,-96.52233 43.388499,-96.52237 43.388602,-96.522417 43.388704,-96.522459 43.38877,-96.522583 43.388926,-96.522613 43.388955,-96.522683 43.389007,-96.523124 43.389295,-96.523311 43.389416,-96.523377 43.38947,-96.523578 43.389716,-96.523622 43.389732,-96.523746 43.389792,-96.523782 43.389817,-96.523813 43.389845,-96.523861 43.389908,-96.524058 43.390197,-96.524098 43.390262,-96.524113 43.390296,-96.524307 43.391032,-96.524363 43.391132,-96.524434 43.391231,-96.524379 43.391551,-96.524074 43.392858,-96.524005 43.393212,-96.523993 43.393319,-96.523987 43.393499,-96.524 43.393606,-96.524001 43.393677,-96.523996 43.393713,-96.523976 43.393783,-96.524 43.393853,-96.524218 43.394698,-96.524275 43.394835,-96.524447 43.395171,-96.524677 43.395529,-96.524702 43.39556,-96.525149 43.395988,-96.525242 43.396072,-96.525445 43.396176,-96.525576 43.396227,-96.525974 43.396371,-96.526114 43.396406,-96.52706 43.396618,-96.527291 43.396684,-96.527872 43.396885,-96.528236 43.397072,-96.528852 43.397432,-96.529063 43.397526,-96.52924 43.397589,-96.529336 43.397607,-96.529583 43.397624,-96.529828 43.39761,-96.530007 43.397548,-96.530046 43.397527,-96.530138 43.397443,-96.530184 43.39738,-96.530195 43.397345,-96.530199 43.397309,-96.530195 43.397238,-96.530059 43.39669,-96.530016 43.396514,-96.53 43.396408,-96.530015 43.396157,-96.530082 43.395985,-96.530123 43.39592,-96.530174 43.395859,-96.530324 43.395716,-96.530396 43.395667,-96.53064 43.395544,-96.530948 43.395429,-96.531314 43.395321,-96.531362 43.395311,-96.531996 43.395229,-96.533204 43.395094,-96.533269 43.395087,-96.533704 43.395018,-96.534691 43.394942,-96.535519 43.394836,-96.535742 43.394815,-96.536157 43.394777,-96.536552 43.394766,-96.536849 43.394773,-96.537045 43.394794,-96.537235 43.394833,-96.537373 43.394873,-96.537459 43.394909,-96.53771 43.395083,-96.537742 43.39511,-96.53788 43.395258,-96.538608 43.396354,-96.538663 43.396414,-96.53914 43.396825,-96.539527 43.397049,-96.540057 43.397243,-96.540194 43.397285,-96.540334 43.39732,-96.54091 43.397426,-96.540959 43.397432,-96.541205 43.397446,-96.54155 43.397424,-96.54169 43.397391,-96.54173 43.39737,-96.541764 43.397344,-96.541895 43.397193,-96.541972 43.397023,-96.54199 43.396953,-96.542083 43.396567,-96.542096 43.396533,-96.542119 43.396501,-96.542199 43.396411,-96.542449 43.396189,-96.542559 43.396117,-96.542639 43.396074,-96.542765 43.396019,-96.543004 43.395974,-96.543053 43.395968,-96.543399 43.395958,-96.543547 43.395966,-96.543887 43.396015,-96.543935 43.396025,-96.544211 43.396104,-96.544429 43.396189,-96.544716 43.396329,-96.5448 43.396366,-96.544921 43.396428,-96.545372 43.396757,-96.54543 43.396815,-96.545517 43.396943,-96.545588 43.397151,-96.5456 43.397222,-96.545605 43.397293,-96.545595 43.397436,-96.545525 43.39757,-96.545363 43.397831,-96.54515 43.398232,-96.544838 43.398948,-96.544774 43.399302,-96.544783 43.399694,-96.544881 43.400007,-96.54492 43.400073,-96.544948 43.400103,-96.544981 43.400129,-96.545039 43.400187,-96.545219 43.400309,-96.545303 43.400348,-96.545852 43.400509,-96.545896 43.400526,-96.546088 43.400639,-96.546417 43.400855,-96.546588 43.400984,-96.546644 43.401043,-96.546748 43.401165,-96.547117 43.401629,-96.547169 43.40173,-96.547246 43.401937,-96.547295 43.402038,-96.547669 43.402737,-96.547817 43.402963,-96.548043 43.40325,-96.548159 43.403397,-96.548349 43.403605,-96.548408 43.403662,-96.548476 43.403713,-96.548629 43.403802,-96.548702 43.403849,-96.548781 43.403892,-96.548825 43.403908,-96.548917 43.403933,-96.548961 43.403949,-96.549251 43.403993,-96.549336 43.403997,-96.549622 43.40394,-96.550458 43.403715,-96.550506 43.403706,-96.550653 43.40369,-96.550998 43.403692,-96.551691 43.403726,-96.551985 43.403756,-96.552702 43.403897,-96.55298 43.403971,-96.55351 43.404165,-96.553742 43.404226,-96.554241 43.404455,-96.554302 43.404511,-96.554329 43.404556,-96.554362 43.404609,-96.554376 43.404643,-96.554375 43.404786,-96.554353 43.404891,-96.554327 43.404943,-96.554267 43.405065,-96.554221 43.40524,-96.554218 43.405491,-96.554267 43.405738,-96.554432 43.406056,-96.554458 43.406106,-96.554485 43.406136,-96.55452 43.406161,-96.55469 43.406234,-96.554782 43.406258,-96.554924 43.406288,-96.55517 43.406295,-96.555318 43.406292,-96.555462 43.406266,-96.555497 43.40624,-96.555537 43.406219,-96.555582 43.406203,-96.555767 43.406155,-96.556343 43.406052,-96.55649 43.406037,-96.556539 43.406037,-96.556637 43.406027,-96.556686 43.406027,-96.556978 43.406062,-96.557023 43.406076,-96.557234 43.406166,-96.557305 43.406215,-96.557334 43.406244,-96.557385 43.406286,-96.557561 43.406431,-96.557653 43.406557,-96.557678 43.406626,-96.557737 43.406762,-96.557777 43.406902,-96.557847 43.407185,-96.557894 43.407468,-96.55799 43.40778,-96.558061 43.407913,-96.558127 43.408009,-96.558181 43.408069,-96.558335 43.408208,-96.558445 43.40828,-96.558675 43.40841,-96.558677 43.408412,-96.558718 43.408432,-96.559046 43.408648,-96.559246 43.408806,-96.559385 43.408954,-96.559474 43.409081,-96.559627 43.409421,-96.55965 43.40967,-96.55963 43.410741,-96.559689 43.411168,-96.559711 43.411274,-96.559876 43.411795,-96.55989 43.411829,-96.559987 43.411994,-96.560313 43.412352,-96.560425 43.41245,-96.560439 43.412462,-96.560514 43.412508,-96.560682 43.412584,-96.560911 43.412651,-96.560959 43.412659,-96.561301 43.412692,-96.561543 43.412721,-96.561592 43.412723,-96.561943 43.41271,-96.562725 43.412637,-96.56282 43.412618,-96.562918 43.412631,-96.563057 43.412666,-96.563106 43.412673,-96.563205 43.41267,-96.563303 43.412661,-96.563401 43.412658,-96.563779 43.412742,-96.563874 43.412772,-96.564051 43.412828,-96.564138 43.412861,-96.564391 43.412972,-96.564637 43.413094,-96.564793 43.413181,-96.564866 43.413228,-96.565046 43.413398,-96.565678 43.414367,-96.565704 43.414397,-96.566438 43.415116,-96.566691 43.41567,-96.566856 43.415867,-96.567046 43.416046,-96.568012 43.416721,-96.568087 43.416774,-96.568258 43.416903,-96.568584 43.417064,-96.56889 43.417181,-96.568936 43.417194,-96.569129 43.417227,-96.569372 43.417256,-96.569823 43.417397,-96.569873 43.417412,-96.570199 43.41748,-96.570255 43.417539,-96.57029 43.417564,-96.570331 43.417585,-96.571034 43.417843,-96.571158 43.417901,-96.571341 43.417953,-96.57139 43.417959,-96.571494 43.417956,-96.571947 43.418232,-96.572249 43.418354,-96.57273 43.418661,-96.572819 43.418691,-96.572866 43.418702,-96.573364 43.418857,-96.573483 43.41892,-96.573555 43.418969,-96.573585 43.418997,-96.573663 43.419088,-96.573726 43.419185,-96.573746 43.419255,-96.573749 43.419291,-96.573767 43.419361,-96.573764 43.419396,-96.573729 43.419536,-96.573693 43.419603,-96.573645 43.419664,-96.573573 43.419713,-96.573132 43.419942,-96.57305 43.419981,-96.572922 43.420035,-96.572803 43.420099,-96.572771 43.420126,-96.572656 43.420242,-96.572541 43.420589,-96.572522 43.420659,-96.572486 43.421195,-96.572469 43.421301,-96.572446 43.42137,-96.572427 43.421403,-96.572413 43.421439,-96.572403 43.421471,-96.57237 43.421538,-96.572178 43.421787,-96.572037 43.421934,-96.571749 43.422188,-96.5716 43.422414,-96.571545 43.422514,-96.57126 43.42293,-96.571179 43.42306,-96.570891 43.423551,-96.570479 43.424583,-96.570339 43.42485,-96.570136 43.425253,-96.57 43.425633,-96.569839 43.426265,-96.569806 43.426478,-96.569766 43.426799,-96.569794 43.427228,-96.569859 43.427509,-96.56988 43.427578,-96.569894 43.427649,-96.569922 43.428005,-96.569935 43.42804,-96.569986 43.42814,-96.570232 43.42849,-96.570289 43.428547,-96.570512 43.42869,-96.570638 43.428745,-96.570991 43.428874,-96.571085 43.428896,-96.571277 43.428931,-96.571323 43.428944,-96.571662 43.429093,-96.571862 43.429198,-96.57205 43.429313,-96.572128 43.429356,-96.572355 43.429426,-96.57259 43.429481,-96.57281 43.429563,-96.573257 43.429784,-96.573454 43.429891,-96.57352 43.429944,-96.573558 43.429968,-96.573624 43.43002,-96.573828 43.430265,-96.573982 43.430489,-96.574023 43.43054,-96.574009 43.430599,-96.573993 43.430705,-96.574059 43.430798,-96.57411 43.430855,-96.574179 43.430945,-96.574207 43.430972,-96.574252 43.431033,-96.57433 43.43112,-96.574401 43.431165,-96.574477 43.431205,-96.574508 43.43123,-96.57455 43.43125,-96.574645 43.431263,-96.574695 43.431266,-96.574744 43.431264,-96.574956 43.431413,-96.57535 43.431624,-96.575426 43.431669,-96.575593 43.431745,-96.575774 43.431799,-96.576103 43.431874,-96.57615 43.431882,-96.576349 43.431878,-96.576445 43.431863,-96.577348 43.431678,-96.577594 43.431672,-96.577741 43.431689,-96.577827 43.431724,-96.577969 43.431756,-96.578164 43.431777,-96.578312 43.431785,-96.579205 43.431778,-96.579497 43.431814,-96.579594 43.43183,-96.580021 43.431921,-96.580166 43.431945,-96.581091 43.432061,-96.581449 43.432086,-96.581745 43.4321,-96.581844 43.4321,-96.582625 43.432014,-96.582918 43.432039,-96.583216 43.432065,-96.583265 43.432061,-96.583409 43.432036,-96.583456 43.432024,-96.583681 43.43195,-96.58403 43.43175,-96.584321 43.431615,-96.584367 43.431603,-96.58461 43.431575,-96.584659 43.431574,-96.584903 43.431595,-96.585107 43.431696,-96.58515 43.431713,-96.585308 43.431798,-96.585808 43.432086,-96.585886 43.432128,-96.585982 43.432146,-96.586031 43.43215,-96.586223 43.432178,-96.586272 43.432175,-96.586316 43.432158,-96.586407 43.432133,-96.586449 43.432113,-96.586486 43.432089,-96.586884 43.431726,-96.586992 43.431653,-96.587072 43.431611,-96.587256 43.43156,-96.587345 43.43153,-96.587392 43.431518,-96.587703 43.431464,-96.588047 43.431465,-96.588379 43.431531,-96.588424 43.431547,-96.588607 43.431598,-96.588691 43.431636,-96.588921 43.43177,-96.589544 43.432202,-96.589706 43.432314,-96.589827 43.432375,-96.589913 43.43241,-96.590052 43.432445,-96.590171 43.432469,-96.590194 43.432474,-96.590341 43.432487,-96.591325 43.432539,-96.591519 43.432567,-96.592217 43.432741,-96.592501 43.432813,-96.592765 43.43291,-96.592807 43.432929,-96.592874 43.432951,-96.593141 43.433045,-96.593247 43.433101,-96.593339 43.433151,-96.593444 43.433227,-96.593661 43.433422,-96.59391 43.433594,-96.594038 43.433702,-96.594141 43.433824,-96.594168 43.433872,-96.594208 43.433944,-96.594312 43.434249,-96.59438 43.434675,-96.594381 43.434852,-96.594375 43.434887,-96.594299 43.435056,-96.59426 43.435121,-96.594207 43.435195,-96.594224 43.435228,-96.59423 43.435264,-96.594213 43.43537,-96.594115 43.435532,-96.594068 43.435595,-96.594016 43.435655,-96.593948 43.435705,-96.593921 43.435734,-96.593823 43.435814,-96.593781 43.435833,-96.593706 43.435854,-96.593674 43.435915,-96.593596 43.436157,-96.593563 43.436405,-96.593574 43.436654,-96.59363 43.4369,-96.593661 43.436967,-96.593824 43.437187,-96.593999 43.437359,-96.594092 43.437421,-96.594359 43.437602,-96.594439 43.437643,-96.594482 43.43766,-96.594562 43.437702,-96.594687 43.437758,-96.594736 43.437765,-96.595378 43.43778,-96.595428 43.437784,-96.595566 43.437824,-96.596046 43.43801,-96.596086 43.438032,-96.596255 43.438162,-96.596284 43.438191,-96.596324 43.438256,-96.59634 43.438386,-96.596332 43.438457,-96.596306 43.438598,-96.596297 43.438704,-96.596299 43.43874,-96.596291 43.438811,-96.596292 43.438882,-96.596321 43.439131,-96.596367 43.439269,-96.596396 43.439337,-96.596404 43.439372,-96.596456 43.439473,-96.59653 43.439565,-96.596571 43.439586,-96.597303 43.439882,-96.597417 43.439951,-96.597477 43.440008,-96.597499 43.44004,-96.597545 43.440179,-96.597541 43.440214,-96.597522 43.440284,-96.597506 43.440318,-96.597489 43.440387,-96.59747 43.44042,-96.597414 43.440479,-96.597344 43.440528,-96.597085 43.440694,-96.596755 43.44096,-96.596716 43.440982,-96.596508 43.441079,-96.596475 43.441106,-96.596433 43.44117,-96.596363 43.441304,-96.596354 43.441339,-96.596331 43.44148,-96.596344 43.441874,-96.596367 43.442087,-96.596392 43.442156,-96.596416 43.442188,-96.596502 43.442275,-96.59654 43.442298,-96.596584 43.442313,-96.596632 43.442323,-96.59683 43.442326,-96.597027 43.44231,-96.597074 43.442301,-96.597119 43.442286,-96.597201 43.442246,-96.597329 43.442191,-96.597446 43.442127,-96.597713 43.44197,-96.597796 43.441932,-96.597841 43.441917,-96.597981 43.441883,-96.59803 43.441877,-96.598324 43.441879,-96.598422 43.44189,-96.598729 43.442002,-96.59881 43.442041,-96.598888 43.442084,-96.59893 43.442102,-96.598969 43.442124,-96.59904 43.442173,-96.599391 43.442471,-96.599443 43.442527,-96.599446 43.44253,-96.599571 43.442722,-96.599659 43.442888,-96.599671 43.442923,-96.599691 43.443029,-96.5997 43.443279,-96.599671 43.44349,-96.59966 43.443525,-96.599619 43.44359,-96.59957 43.443651,-96.59954 43.443718,-96.599518 43.443787,-96.599397 43.444094,-96.59935 43.444157,-96.599311 43.444179,-96.599089 43.444258,-96.599052 43.444281,-96.598943 43.444441,-96.598921 43.444582,-96.598905 43.444652,-96.598902 43.444794,-96.598906 43.44483,-96.598925 43.444899,-96.598995 43.445069,-96.599043 43.445205,-96.599072 43.445273,-96.599091 43.445306,-96.599166 43.445398,-96.599198 43.445425,-96.599235 43.445449,-96.599276 43.445469,-96.599494 43.44555,-96.599729 43.445633,-96.599809 43.445675,-96.599893 43.445712,-96.600011 43.445776,-96.600076 43.445828,-96.600355 43.446027,-96.600404 43.446088,-96.600422 43.446121,-96.600503 43.446322,-96.600521 43.44639,-96.600605 43.446591,-96.600629 43.446622,-96.600838 43.446814,-96.600888 43.446875,-96.600919 43.446902,-96.600959 43.446954,-96.601159 43.447189,-96.601246 43.447349,-96.601302 43.447443,-96.601328 43.447544,-96.601346 43.447645,-96.601344 43.447679,-96.601355 43.44778,-96.601367 43.447848,-96.601372 43.44795,-96.601366 43.447978,-96.601354 43.448054,-96.601352 43.448125,-96.60145 43.448206,-96.601493 43.44827,-96.601587 43.448353,-96.601623 43.448377,-96.602029 43.448578,-96.602105 43.448624,-96.602138 43.44865,-96.602194 43.448707,-96.602299 43.448826,-96.602342 43.448889,-96.602374 43.448955,-96.602547 43.449249,-96.602679 43.449663,-96.602717 43.449766,-96.60289 43.450168,-96.602942 43.450304,-96.603031 43.450581,-96.603056 43.450793,-96.603051 43.450828,-96.603034 43.450862,-96.602953 43.450951,-96.60291 43.450966,-96.60286 43.450967,-96.602664 43.450944,-96.602578 43.45091,-96.60254 43.450887,-96.602479 43.450833,-96.602452 43.450802,-96.602389 43.450748,-96.602152 43.450477,-96.601998 43.45034,-96.601718 43.450141,-96.601678 43.45012,-96.601635 43.450103,-96.601218 43.44999,-96.601073 43.449972,-96.600975 43.449976,-96.60083 43.449988,-96.600734 43.450002,-96.600651 43.45004,-96.600463 43.450154,-96.600422 43.450174,-96.600259 43.450309,-96.600017 43.450577,-96.599995 43.450609,-96.599889 43.450808,-96.599878 43.450843,-96.599847 43.45091,-96.599776 43.451116,-96.59967 43.451536,-96.599603 43.451706,-96.599587 43.451776,-96.599586 43.451811,-96.599644 43.452058,-96.599644 43.452094,-96.599619 43.452163,-96.599606 43.452233,-96.59973 43.452317,-96.59976 43.452346,-96.599781 43.452377,-96.599813 43.452445,-96.599833 43.452478,-96.599943 43.452547,-96.600062 43.452662,-96.600148 43.452788,-96.600186 43.452854,-96.600318 43.452959,-96.600343 43.45299,-96.600706 43.453372,-96.600719 43.453405,-96.600719 43.453476,-96.600728 43.453512,-96.600806 43.453642,-96.60087 43.453777,-96.600968 43.454125,-96.600983 43.454159,-96.601168 43.454448,-96.60123 43.454584,-96.601238 43.454619,-96.601267 43.454904,-96.601261 43.455046,-96.601246 43.455117,-96.601153 43.455467,-96.601139 43.455537,-96.601038 43.455777,-96.600949 43.455943,-96.600829 43.456099,-96.600718 43.456217,-96.600695 43.456248,-96.600592 43.45645,-96.60057 43.456482,-96.600407 43.456659,-96.600358 43.456719,-96.600148 43.45692,-96.600111 43.456943,-96.60007 43.456963,-96.599931 43.457002,-96.599896 43.457046,-96.599866 43.457075,-96.599832 43.457102,-96.599793 43.457122,-96.599697 43.457137,-96.599648 43.45714,-96.599602 43.457132,-96.599506 43.457131,-96.599409 43.457121,-96.599271 43.457084,-96.599093 43.457028,-96.598775 43.456938,-96.598688 43.456909,-96.59855 43.456872,-96.598403 43.456861,-96.598355 43.456862,-96.598223 43.456912,-96.59814 43.45695,-96.59811 43.456979,-96.59807 43.457045,-96.598044 43.457162,-96.598051 43.457196,-96.598076 43.457226,-96.598092 43.45726,-96.598099 43.457295,-96.598069 43.457472,-96.59805 43.457542,-96.598037 43.457576,-96.597897 43.457765,-96.597743 43.457903,-96.597589 43.458085,-96.597493 43.458207,-96.597433 43.458263,-96.597355 43.458352,-96.597268 43.458438,-96.597139 43.458545,-96.597015 43.458604,-96.596923 43.458629,-96.596742 43.458687,-96.596694 43.458695,-96.5964 43.458716,-96.596353 43.458705,-96.596172 43.45865,-96.596016 43.458564,-96.595974 43.458545,-96.595902 43.458548,-96.595805 43.458545,-96.595757 43.458533,-96.595721 43.458513,-96.595673 43.458506,-96.595596 43.458467,-96.595502 43.458457,-96.595406 43.45844,-96.595165 43.458429,-96.59507 43.458435,-96.594973 43.458434,-96.594924 43.458437,-96.594876 43.458429,-96.594831 43.458415,-96.594747 43.458377,-96.59463 43.458393,-96.594599 43.458427,-96.594555 43.458492,-96.594522 43.458517,-96.594314 43.458611,-96.594238 43.458656,-96.594129 43.458728,-96.594037 43.45881,-96.593999 43.458832,-96.593952 43.458844,-96.593903 43.458851,-96.593853 43.458852,-96.593669 43.459036,-96.59358 43.459163,-96.593601 43.459232,-96.593602 43.459268,-96.593476 43.45965,-96.593428 43.459969,-96.593429 43.459975,-96.59344 43.460183,-96.59348 43.46043,-96.59349 43.460465,-96.5936 43.460702,-96.593625 43.460732,-96.593691 43.460786,-96.593727 43.46081,-96.594069 43.460953,-96.594145 43.460999,-96.594317 43.461127,-96.594342 43.461158,-96.594402 43.461214,-96.594455 43.461274,-96.594687 43.461591,-96.594735 43.461692,-96.594743 43.461805,-96.594653 43.46223,-96.594572 43.46231,-96.594506 43.462363,-96.594351 43.462502,-96.594174 43.462626,-96.594133 43.462646,-96.593675 43.462783,-96.593333 43.462825,-96.59329 43.46284,-96.593251 43.462862,-96.593206 43.462878,-96.593158 43.462888,-96.59306 43.462892,-96.59262 43.462846,-96.592318 43.462802,-96.591501 43.462686,-96.591205 43.46267,-96.591106 43.462675,-96.59079 43.462778,-96.590551 43.462903,-96.590259 43.463235,-96.590203 43.463335,-96.590149 43.463472,-96.590136 43.463543,-96.590134 43.463614,-96.59007 43.463668,-96.590047 43.4637,-96.590035 43.463735,-96.590014 43.463876,-96.590009 43.464267,-96.590031 43.464408,-96.59003 43.464444,-96.590075 43.464545,-96.590095 43.464578,-96.590121 43.464608,-96.590186 43.464663,-96.590201 43.464693,-96.590205 43.464836,-96.590202 43.464907,-96.59006 43.465322,-96.590012 43.465534,-96.589989 43.465603,-96.589919 43.465773,-96.589872 43.465911,-96.589819 43.46601,-96.589705 43.466204,-96.589623 43.466293,-96.589503 43.466404,-96.589436 43.466456,-96.589362 43.466503,-96.589235 43.466557,-96.588836 43.466694,-96.588787 43.466699,-96.58859 43.466689,-96.588542 43.466682,-96.588463 43.466639,-96.588394 43.466587,-96.58837 43.466556,-96.588336 43.466489,-96.588309 43.466383,-96.588313 43.466312,-96.588366 43.466138,-96.588416 43.466038,-96.588745 43.465597,-96.588763 43.465564,-96.588768 43.465528,-96.588767 43.465458,-96.58878 43.465317,-96.588777 43.465246,-96.588769 43.465211,-96.58875 43.465179,-96.588702 43.465116,-96.588526 43.464946,-96.588423 43.464871,-96.588293 43.464821,-96.588194 43.46478,-96.587867 43.464646,-96.587778 43.464616,-96.587684 43.464594,-96.58764 43.464579,-96.587545 43.464559,-96.587205 43.464513,-96.587155 43.464513,-96.587058 43.464503,-96.587008 43.464502,-96.58691 43.464509,-96.586716 43.464538,-96.586577 43.464574,-96.586532 43.464589,-96.586256 43.46474,-96.586175 43.46478,-96.585954 43.464858,-96.585813 43.464891,-96.585765 43.464899,-96.585568 43.464895,-96.585387 43.464949,-96.585259 43.465002,-96.585215 43.465029,-96.585147 43.465081,-96.584969 43.465205,-96.584694 43.465356,-96.584592 43.465434,-96.584564 43.465463,-96.584368 43.465711,-96.584335 43.465737,-96.583858 43.46605,-96.583515 43.466254,-96.583308 43.466352,-96.583265 43.466368,-96.582976 43.466421,-96.582882 43.466442,-96.58267 43.466533,-96.58245 43.466677,-96.582419 43.466706,-96.582402 43.466739,-96.582401 43.466846,-96.582417 43.466953,-96.582427 43.466988,-96.582475 43.467051,-96.582624 43.467193,-96.583118 43.467566,-96.583377 43.467761,-96.583477 43.467841,-96.583879 43.468373,-96.583908 43.468402,-96.58398 43.468495,-96.584186 43.468818,-96.584265 43.468909,-96.584385 43.469022,-96.584373 43.469078,-96.584382 43.46915,-96.58456 43.469482,-96.584656 43.469718,-96.584691 43.46982,-96.58474 43.469882,-96.584852 43.469989,-96.584918 43.470052,-96.584996 43.470097,-96.585083 43.47013,-96.585247 43.470691,-96.585292 43.470974,-96.585302 43.47108,-96.5853 43.471115,-96.585306 43.471186,-96.585319 43.471257,-96.585312 43.4714,-96.585302 43.471435,-96.585285 43.471469,-96.585249 43.471512,-96.585011 43.471624,-96.584917 43.471698,-96.584804 43.471881,-96.584795 43.47191,-96.584794 43.471955,-96.584801 43.472122,-96.58473 43.472221,-96.584348 43.472794,-96.584161 43.473516,-96.583702 43.474302,-96.583685 43.474336,-96.583639 43.474399,-96.583626 43.474434,-96.583622 43.474469,-96.583634 43.474576,-96.583741 43.475106,-96.583783 43.475171,-96.583831 43.475233,-96.58385 43.475266,-96.583875 43.475297,-96.584126 43.475563,-96.584157 43.475591,-96.584409 43.475762,-96.584494 43.475799,-96.584779 43.475939,-96.585076 43.476068,-96.585394 43.476168,-96.585625 43.476302,-96.585771 43.476399,-96.585804 43.476426,-96.586535 43.477145,-96.58672 43.477357,-96.586743 43.477389,-96.586812 43.477523,-96.586864 43.477661,-96.586893 43.477802,-96.586892 43.477873,-96.586865 43.477978,-96.58684 43.478047,-96.58672 43.478258,-96.586709 43.478278,-96.586622 43.478406,-96.58657 43.478466,-96.586549 43.478499,-96.58652 43.478528,-96.586417 43.478604,-96.586306 43.478675,-96.586219 43.478709,-96.58566 43.478856,-96.585464 43.478965,-96.584948 43.479179,-96.58471 43.479307,-96.584492 43.479452,-96.584423 43.479503,-96.584118 43.479782,-96.584004 43.479851,-96.583613 43.480005,-96.58271 43.480197,-96.582647 43.480333,-96.582564 43.480422,-96.582504 43.480477,-96.582469 43.480503,-96.58243 43.480524,-96.582325 43.480598,-96.582198 43.480652,-96.582103 43.480673,-96.581807 43.480673,-96.581711 43.48069,-96.581661 43.480689,-96.581467 43.480817,-96.581246 43.481054,-96.581206 43.481118,-96.58118 43.481149,-96.581084 43.481462,-96.581082 43.481498,-96.581088 43.481569,-96.581198 43.481769,-96.581374 43.481942,-96.581399 43.481972,-96.581808 43.482624,-96.581919 43.482832,-96.582058 43.48309,-96.5822 43.483278,-96.58223 43.483306,-96.58238 43.483399,-96.582422 43.483418,-96.582667 43.483444,-96.582714 43.483431,-96.582889 43.483364,-96.58293 43.483343,-96.583113 43.483224,-96.583153 43.483203,-96.583296 43.483172,-96.583392 43.483157,-96.583689 43.483154,-96.583837 43.483163,-96.584076 43.483208,-96.584727 43.483373,-96.584822 43.483392,-96.585017 43.483414,-96.585311 43.483432,-96.585361 43.48343,-96.585903 43.483435,-96.586002 43.483433,-96.586144 43.483463,-96.586275 43.483514,-96.586358 43.483551,-96.586404 43.483564,-96.586446 43.483584,-96.586599 43.483675,-96.586721 43.483781,-96.586787 43.483833,-96.58683 43.483898,-96.586931 43.484137,-96.587002 43.48427,-96.587166 43.484448,-96.587225 43.484506,-96.587262 43.484572,-96.587293 43.484677,-96.587288 43.484748,-96.587261 43.484853,-96.587213 43.484915,-96.587124 43.485001,-96.587055 43.485052,-96.586977 43.485096,-96.586941 43.485121,-96.586862 43.485164,-96.586409 43.485383,-96.586371 43.485406,-96.58631 43.485462,-96.58625 43.48556,-96.586191 43.485807,-96.586203 43.486021,-96.586242 43.486161,-96.586258 43.486195,-96.586341 43.486325,-96.58651 43.486544,-96.586576 43.486657,-96.586838 43.487041,-96.586995 43.487262,-96.587013 43.487296,-96.587025 43.487367,-96.587002 43.487579,-96.586957 43.487643,-96.586924 43.48767,-96.586814 43.487742,-96.586728 43.487776,-96.586536 43.487811,-96.586438 43.487815,-96.5859 43.487856,-96.585803 43.48787,-96.585565 43.487915,-96.585526 43.487927,-96.58552 43.48793,-96.585436 43.487967,-96.585125 43.488141,-96.58505 43.488187,-96.584958 43.488271,-96.584644 43.488715,-96.584615 43.488783,-96.584593 43.488852,-96.58455 43.489028,-96.584551 43.489099,-96.584589 43.489202,-96.584691 43.489364,-96.58474 43.489426,-96.584858 43.489689,-96.585443 43.490299,-96.585831 43.490503,-96.585954 43.4906,-96.586077 43.490697,-96.586232 43.490819,-96.586435 43.491022,-96.586741 43.491388,-96.586771 43.491417,-96.586915 43.491514,-96.587078 43.491595,-96.587169 43.491622,-96.587601 43.491699,-96.587699 43.491706,-96.587749 43.491705,-96.587995 43.491686,-96.588044 43.491678,-96.588326 43.491611,-96.588573 43.491618,-96.588816 43.491653,-96.589149 43.491723,-96.58959 43.491786,-96.589684 43.4918,-96.589965 43.491864,-96.590008 43.491881,-96.590043 43.491906,-96.590121 43.491949,-96.590156 43.491975,-96.590184 43.492005,-96.590204 43.492037,-96.590235 43.492105,-96.590242 43.492141,-96.59024 43.492176,-96.590208 43.492244,-96.590184 43.492275,-96.590027 43.492413,-96.589991 43.492438,-96.589911 43.492479,-96.589839 43.492529,-96.589815 43.492559,-96.589827 43.492666,-96.589825 43.492702,-96.589751 43.492946,-96.58977 43.49316,-96.589832 43.493403,-96.58983 43.493439,-96.589816 43.493473,-96.5898 43.493543,-96.589798 43.493579,-96.589784 43.493649,-96.5899 43.493806,-96.589954 43.493866,-96.590211 43.494123,-96.590459 43.494296,-96.590621 43.494375,-96.590699 43.494418,-96.590783 43.494453,-96.590877 43.494477,-96.59102 43.494503,-96.591118 43.494505,-96.59126 43.494477,-96.591536 43.494399,-96.592044 43.494264,-96.592378 43.494209,-96.592405 43.494179,-96.592438 43.494152,-96.592478 43.494131,-96.592608 43.494079,-96.592648 43.494059,-96.592734 43.494026,-96.592782 43.494016,-96.592852 43.494009,-96.592919 43.493956,-96.593225 43.493776,-96.593425 43.493671,-96.593711 43.49353,-96.59379 43.493486,-96.593982 43.493278,-96.594049 43.493225,-96.594086 43.493202,-96.594169 43.493162,-96.594213 43.493147,-96.594502 43.493096,-96.594551 43.493095,-96.594797 43.493114,-96.595034 43.493164,-96.595126 43.49319,-96.595521 43.493337,-96.596274 43.493683,-96.596507 43.493816,-96.59663 43.493895,-96.596727 43.49391,-96.596775 43.493921,-96.596819 43.493936,-96.597112 43.494069,-96.597284 43.494139,-96.59733 43.49417,-96.597375 43.494223,-96.597678 43.494344,-96.597723 43.494359,-96.597764 43.49438,-96.597987 43.494515,-96.59803 43.494541,-96.599013 43.495348,-96.59909 43.495439,-96.599206 43.495597,-96.599304 43.495721,-96.599348 43.495785,-96.599375 43.495815,-96.599454 43.495985,-96.599457 43.496068,-96.599452 43.496104,-96.599327 43.496486,-96.599133 43.496775,-96.599121 43.49681,-96.599088 43.497023,-96.599088 43.497273,-96.599011 43.4977,-96.598995 43.497937,-96.59899 43.498019,-96.59899 43.49809,-96.598962 43.498195,-96.598881 43.498436,-96.598874 43.498508,-96.598904 43.498632,-96.598961 43.498864,-96.599012 43.499073,-96.59902 43.499106,-96.59903 43.499356,-96.599036 43.499391,-96.599099 43.499564,-96.599105 43.499707,-96.599116 43.499923,-96.599117 43.499955,-96.599122 43.500054,-96.599124 43.500087,-96.599125 43.500118,-96.599128 43.500171,-96.599137 43.500213,-96.599145 43.500245,-96.59915 43.500266,-96.599165 43.500331,-96.599171 43.500353,-96.599175 43.500373,-96.599186 43.500418,-96.599188 43.500435,-96.599191 43.500456,-96.599137 43.500456,-96.599059 43.500456,-96.598978 43.500456,-96.598926 43.500457,-96.598716 43.500457,-96.598089 43.500459,-96.59788 43.50046,-96.597455 43.500461,-96.596183 43.500464,-96.595759 43.500466,-96.595484 43.500468,-96.59466 43.500476,-96.594386 43.50048,-96.594136 43.500501,-96.593978 43.500515,-96.593723 43.50051,-96.593385 43.500485,-96.593136 43.500467,-96.592765 43.500464,-96.591652 43.500456,-96.591282 43.500454,-96.586367 43.500446,-96.581159 43.50044,-96.577873 43.500444,-96.573946 43.500447,-96.569957 43.500441,-96.566325 43.500437,-96.565917 43.500436,-96.560373 43.500423,-96.555266 43.500422,-96.554527 43.500422,-96.55231 43.500422,-96.551572 43.500422,-96.550547 43.50042,-96.547472 43.500414,-96.546448 43.500413,-96.546432 43.500413,-96.546384 43.500413,-96.546368 43.500413,-96.544262 43.500408,-96.542993 43.500406,-96.539026 43.500423,-96.537948 43.500421,-96.535843 43.50042,-96.535008 43.500419,-96.532701 43.500418,-96.532504 43.500418,-96.53167 43.500421,-96.52648 43.500434,-96.525311 43.500436,-96.522852 43.500412,-96.521272 43.500397,-96.518097 43.500407,-96.513824 43.500395,-96.513087 43.500393,-96.511725 43.500395,-96.509441 43.500397,-96.508257 43.500407,-96.50727 43.500396,-96.504239 43.500403,-96.504007 43.500403,-96.497753 43.500389,-96.496219 43.500385,-96.491748 43.500389,-96.490724 43.500389,-96.487652 43.500391,-96.486629 43.500392,-96.486383 43.500392,-96.485648 43.500392,-96.485403 43.500392,-96.484077 43.500392,-96.480102 43.500394,-96.478777 43.500395,-96.478358 43.500395,-96.473865 43.500393,-96.47187 43.500393,-96.471391 43.500393,-96.471223 43.500393,-96.470722 43.500393,-96.470555 43.500393,-96.466737 43.500393,-96.46541 43.500393,-96.462449 43.500393,-96.454174 43.500427,-96.454074 43.500427,-96.453975 43.500426,-96.45326 43.50039,-96.453255 43.50039,-96.446758 43.500411,-96.445288 43.500403,-96.440878 43.500379,-96.439408 43.500372,-96.437929 43.50036,-96.437617 43.500359,-96.433493 43.500352,-96.43203 43.50035,-96.432015 43.500351,-96.431584 43.500352,-96.43029 43.500356,-96.42986 43.500359,-96.427876 43.500357,-96.427351 43.500357,-96.423819 43.500372,-96.421925 43.500369,-96.419943 43.500367,-96.418366 43.50036,-96.415121 43.500349,-96.413643 43.500349,-96.41207 43.50035,-96.41207 43.500339,-96.411597 43.500338,-96.410176 43.500338,-96.409704 43.500338,-96.407555 43.500337,-96.407354 43.500336,-96.400304 43.500318,-96.400218 43.500318,-96.39799 43.50032,-96.397953 43.50032,-96.396786 43.500321,-96.393285 43.500325,-96.39212 43.50033,-96.39212 43.500323,-96.391716 43.500322,-96.390507 43.500324,-96.390105 43.500325,-96.388165 43.50033,-96.387917 43.500332,-96.384336 43.500329,-96.382347 43.500333,-96.380409 43.500336,-96.378768 43.500331,-96.373849 43.500322,-96.372211 43.500319,-96.37221 43.50033,-96.371848 43.500329,-96.370765 43.500329,-96.370407 43.500331,-96.37035 43.500327,-96.370182 43.500318,-96.370127 43.500316,-96.368888 43.500309,-96.368738 43.500307,-96.364574 43.500299,-96.363187 43.500297,-96.362881 43.500298,-96.361969 43.500304,-96.361901 43.500305,-96.361665 43.500305,-96.361399 43.500303,-96.360603 43.500298,-96.360338 43.500297,-96.35973 43.500293,-96.35791 43.500284,-96.357304 43.500282,-96.35708 43.500283,-96.356415 43.50029,-96.356196 43.500295,-96.355123 43.500256,-96.352764 43.500178,-96.351905 43.500166,-96.351126 43.500158,-96.350845 43.500238,-96.348675 43.500256,-96.346331 43.500277,-96.342168 43.500334,-96.340001 43.500364,-96.33974 43.500364,-96.338958 43.500367,-96.338698 43.500369,-96.33737 43.500378,-96.333389 43.500405,-96.332062 43.500415,-96.332021 43.500414,-96.331898 43.500411,-96.331858 43.500411,-96.331418 43.500388,-96.330099 43.500322,-96.32966 43.5003,-96.326202 43.500285,-96.325227 43.500282,-96.315831 43.500297,-96.314966 43.500298,-96.312373 43.5003,-96.31234 43.5003,-96.310215 43.500307,-96.308656 43.500313,-96.303742 43.50031,-96.301586 43.50031,-96.300798 43.500308,-96.300236 43.500307,-96.298444 43.500303,-96.29766 43.500303,-96.296865 43.500298,-96.2965 43.500296,-96.295477 43.500296,-96.294483 43.500296,-96.293689 43.500297,-96.29343 43.500297,-96.293032 43.500299,-96.292653 43.5003,-96.292395 43.5003,-96.29239 43.5003,-96.290669 43.500295,-96.285497 43.50028,-96.283774 43.500277,-96.282206 43.500274,-96.277896 43.500269,-96.277505 43.500269,-96.275939 43.500271,-96.275379 43.500271,-96.273702 43.500272,-96.273566 43.500273,-96.273143 43.500273,-96.273105 43.500273,-96.272991 43.500273,-96.272954 43.500273,-96.272817 43.500273,-96.272408 43.500273,-96.272272 43.500273,-96.271295 43.500273,-96.270896 43.500274,-96.268366 43.500268,-96.26739 43.500267,-96.264678 43.500261,-96.264301 43.500261,-96.256598 43.500271,-96.256543 43.50027,-96.253832 43.500268,-96.253573 43.500265,-96.252799 43.500261,-96.25255 43.50026,-96.25254 43.500259,-96.250556 43.500252,-96.247406 43.500244,-96.246905 43.500251,-96.24518 43.50025,-96.244608 43.500252,-96.243655 43.500258,-96.242939 43.500241,-96.242627 43.500243,-96.24252 43.500245,-96.242204 43.500251,-96.242099 43.500255,-96.241792 43.500255,-96.24026 43.500252,-96.239154 43.500251,-96.2377 43.500256,-96.236759 43.500245,-96.236326 43.500253,-96.235921 43.500265,-96.234744 43.500259,-96.232906 43.50025,-96.232835 43.500249,-96.232783 43.50025,-96.232629 43.50025,-96.23256 43.50025,-96.23254 43.50025,-96.23208 43.500247,-96.230991 43.500256,-96.230326 43.500257,-96.229199 43.500258,-96.228044 43.500265,-96.226331 43.500258,-96.225576 43.500266,-96.224387 43.500273,-96.223632 43.500265,-96.223028 43.500258,-96.222076 43.500257,-96.221402 43.500261,-96.221396 43.500261,-96.220765 43.500264,-96.219924 43.500264,-96.219313 43.500266,-96.21806 43.500273,-96.216118 43.500275,-96.215491 43.500284,-96.215354 43.500287,-96.214014 43.50029,-96.213688 43.500284,-96.21272 43.50027,-96.212714 43.50027,-96.212389 43.500274,-96.211691 43.500283,-96.211217 43.500289,-96.210484 43.500303,-96.210253 43.500311,-96.2096 43.500341,-96.2094 43.50035,-96.208903 43.500365,-96.208558 43.500349,-96.207208 43.500333,-96.207175 43.500333,-96.202572 43.500315,-96.202121 43.500309,-96.200426 43.500289,-96.200162 43.500287,-96.199851 43.500285,-96.199563 43.500277,-96.199374 43.500275,-96.199275 43.500274,-96.199112 43.500256,-96.199043 43.500263,-96.198983 43.500267,-96.19875 43.500287,-96.198597 43.500289,-96.198469 43.500292,-96.198008 43.500299,-96.197913 43.500298,-96.196245 43.500289,-96.195689 43.500287,-96.195083 43.500279,-96.193324 43.500263,-96.193265 43.500262,-96.19269 43.50026,-96.192659 43.500261,-96.191021 43.500255,-96.190745 43.500254,-96.186111 43.500227,-96.184703 43.500219,-96.18459 43.500218,-96.184479 43.50022,-96.184365 43.500219,-96.18425 43.500219,-96.183695 43.50022,-96.182762 43.50022,-96.177617 43.500224,-96.177511 43.500224,-96.175903 43.500233,-96.175537 43.500228,-96.174439 43.500216,-96.174366 43.500215,-96.17422 43.500213,-96.174074 43.500211,-96.174003 43.50021,-96.17393 43.500209,-96.173785 43.500209,-96.173753 43.500209,-96.172872 43.500209,-96.17279 43.500209,-96.172469 43.500209,-96.17241 43.50021,-96.172344 43.500208,-96.171975 43.500201,-96.171853 43.5002,-96.171205 43.500202,-96.16868 43.5002,-96.164214 43.500199,-96.159165 43.500213,-96.155994 43.500222,-96.155684 43.500214,-96.154757 43.500195,-96.15445 43.50019,-96.154181 43.500189,-96.153377 43.500191,-96.15311 43.500194,-96.15293 43.50019,-96.152758 43.500189,-96.151706 43.50019,-96.151355 43.500191,-96.151342 43.50019,-96.151146 43.50019,-96.15052 43.500189,-96.150312 43.50019,-96.150287 43.50019,-96.148762 43.500187,-96.146913 43.500188,-96.142801 43.500191,-96.139072 43.500202,-96.136719 43.500191,-96.133323 43.50018,-96.133215 43.500179,-96.13317 43.500178,-96.132715 43.500179,-96.132564 43.50018,-96.13253 43.50018,-96.131825 43.500174,-96.13083 43.500171,-96.125628 43.500153,-96.123895 43.50015,-96.123159 43.500148,-96.120957 43.500145,-96.120224 43.500146,-96.120053 43.500153,-96.119541 43.500176,-96.119372 43.500184,-96.11878 43.500183,-96.118125 43.500183,-96.117004 43.500188,-96.116413 43.500191,-96.114193 43.500195,-96.112014 43.5002,-96.109246 43.500172,-96.107538 43.500166,-96.10532 43.50016,-96.10375 43.500163,-96.103495 43.500164,-96.09802 43.500184,-96.096197 43.500191,-96.095883 43.500186,-96.094944 43.500174,-96.094631 43.500171,-96.09462 43.50017,-96.094519 43.500168,-96.094183 43.500165,-96.094071 43.500165,-96.09335 43.50016,-96.092369 43.500155,-96.090864 43.500158,-96.085279 43.500169,-96.082795 43.500185,-96.081246 43.500185,-96.07804 43.500189,-96.077058 43.500183,-96.074115 43.500166,-96.073134 43.500161,-96.07312 43.50016,-96.070084 43.500155,-96.060936 43.500143,-96.057888 43.50014,-96.057436 43.500144,-96.056082 43.500158,-96.055632 43.500164,-96.055593 43.500163,-96.055476 43.500163,-96.055437 43.500163,-96.055027 43.500163,-96.053162 43.500155,-96.053162 43.500121,-96.050687 43.500125,-96.047966 43.500121,-96.046766 43.500118,-96.043445 43.500121,-96.041065 43.500114,-96.038215 43.500115,-96.038215 43.500116,-96.038181 43.500117,-96.036566 43.500106,-96.035696 43.5001,-96.033215 43.500102,-96.032078 43.500104,-96.028702 43.500108,-96.025692 43.500102,-96.02282 43.500108,-96.022223 43.500105,-96.020357 43.500097,-96.018242 43.500098,-96.016207 43.500101,-96.000333 43.500124,-96.000002 43.500126,-95.999002 43.500114,-95.998239 43.500113,-95.997146 43.500111,-95.99603 43.50011,-95.993351 43.500123,-95.993077 43.500124,-95.990095 43.500093,-95.981109 43.500068,-95.979671 43.500068,-95.97954 43.500067,-95.978286 43.500067,-95.978103 43.500067,-95.974901 43.500069,-95.973402 43.500065,-95.97247 43.500063,-95.968367 43.500069,-95.966619 43.500073,-95.964372 43.500077,-95.961302 43.500069,-95.960608 43.500069,-95.960608 43.50007,-95.960604 43.50007,-95.960599 43.500071,-95.958364 43.500077,-95.955872 43.500067,-95.953809 43.500074,-95.95344 43.500102,-95.952329 43.500096,-95.950935 43.500088,-95.950625 43.500086,-95.948335 43.500094,-95.947238 43.50009,-95.945792 43.500085,-95.943752 43.500086,-95.943301 43.500086,-95.94085 43.500106,-95.940504 43.500104,-95.940478 43.500104,-95.938236 43.500091,-95.937497 43.500093,-95.935959 43.50008,-95.935869 43.500079,-95.933729 43.500074,-95.933494 43.500074,-95.93225 43.500055,-95.925605 43.500036,-95.922595 43.500037,-95.920478 43.500042,-95.920478 43.500043,-95.920476 43.500043,-95.920458 43.500044,-95.918301 43.500051,-95.915353 43.500051,-95.912189 43.500039,-95.911659 43.50004,-95.909097 43.500042,-95.9073 43.50004,-95.903591 43.500035,-95.901052 43.500033,-95.90063 43.500033,-95.900622 43.500032,-95.900618 43.500032,-95.898728 43.500032,-95.896558 43.500043,-95.8936 43.500057,-95.88966 43.500049,-95.88855 43.500053,-95.885771 43.500048,-95.882707 43.500056,-95.880867 43.500071,-95.880867 43.500072,-95.880806 43.500073,-95.880136 43.500079,-95.87945 43.50008,-95.878544 43.50008,-95.878544 43.500081,-95.878493 43.500082,-95.878327 43.500082,-95.876243 43.500117,-95.873482 43.500092,-95.869043 43.50009,-95.866462 43.500059,-95.864835 43.500065,-95.863244 43.500043,-95.860947 43.500036,-95.859793 43.50003,-95.858315 43.500027,-95.858266 43.500027,-95.857028 43.500025,-95.855494 43.500017,-95.850959 43.500045,-95.849494 43.500048,-95.849366 43.500048,-95.849318 43.500048,-95.849006 43.500049,-95.844009 43.500024,-95.843998 43.500024,-95.843859 43.500023,-95.843799 43.500023,-95.843636 43.500022,-95.843562 43.500021,-95.843529 43.500021,-95.843495 43.500021,-95.843459 43.500021,-95.842941 43.500017,-95.841098 43.500018,-95.841089 43.500018,-95.839039 43.500023,-95.837089 43.500014,-95.833847 43.500009,-95.833813 43.500009,-95.831704 43.499997,-95.831694 43.499997,-95.831425 43.499996,-95.82977 43.500007,-95.827653 43.499996,-95.824663 43.499975,-95.821146 43.499992,-95.821129 43.499992,-95.820329 43.499994,-95.820294 43.499994,-95.817867 43.500001,-95.816114 43.499997,-95.815911 43.499996,-95.815613 43.499995,-95.815602 43.499995,-95.81543 43.499995,-95.812489 43.500002,-95.802763 43.499975,-95.802742 43.499975,-95.802415 43.499974,-95.802226 43.499963,-95.802199 43.499961,-95.801972 43.499947,-95.80172 43.499904,-95.801228 43.499807,-95.801174 43.499796,-95.801072 43.499747,-95.800982 43.499703,-95.79751 43.499965,-95.797176 43.500012,-95.796847 43.500001,-95.794541 43.49999,-95.793181 43.499983,-95.793051 43.499971,-95.792742 43.499968,-95.790672 43.499946,-95.788061 43.499942,-95.78772 43.499941,-95.784525 43.499939,-95.781374 43.499945,-95.781358 43.499945,-95.779861 43.499941,-95.779718 43.499941,-95.777205 43.499935,-95.77399 43.499938,-95.773976 43.499938,-95.772934 43.499932,-95.772511 43.499931,-95.772352 43.499931,-95.768962 43.499924,-95.768544 43.499925,-95.766446 43.49993,-95.766278 43.49993,-95.76574 43.499931,-95.765499 43.499932,-95.764548 43.499929,-95.764271 43.499928,-95.761325 43.499918,-95.75807 43.499909,-95.756845 43.499902,-95.756658 43.499901,-95.756649 43.499901,-95.756622 43.499901,-95.754738 43.499891,-95.754034 43.499917,-95.754007 43.499918,-95.752708 43.499923,-95.752699 43.499923,-95.752683 43.499923,-95.752638 43.499923,-95.7519 43.499925,-95.750421 43.499925,-95.750373 43.499925,-95.749751 43.499925,-95.749696 43.499925,-95.746444 43.499924,-95.745993 43.49992,-95.745985 43.49992,-95.745977 43.49992,-95.74597 43.49992,-95.74596 43.49992,-95.745946 43.49992,-95.745925 43.49992,-95.745894 43.49992,-95.745845 43.49992,-95.7432 43.499905,-95.74241 43.499907,-95.742386 43.499907,-95.741448 43.49991,-95.741413 43.49991,-95.740838 43.499912,-95.740809 43.499912,-95.739986 43.499915,-95.736292 43.499912,-95.73404 43.49991,-95.732111 43.499918,-95.730162 43.499905,-95.726704 43.499923,-95.726697 43.499923,-95.726683 43.499923,-95.726668 43.499923,-95.726643 43.499923,-95.726402 43.499924,-95.724742 43.499923,-95.724128 43.499922,-95.724116 43.499922,-95.724095 43.499922,-95.724032 43.499922,-95.722669 43.499917,-95.722655 43.499917,-95.718691 43.4999,-95.716281 43.4999,-95.715947 43.4999,-95.714257 43.4999,-95.711143 43.4999,-95.707677 43.49991,-95.707642 43.49991,-95.70458 43.499908,-95.701286 43.499901,-95.698005 43.499899,-95.695787 43.499901,-95.695544 43.499901,-95.695154 43.499892,-95.694249 43.499881,-95.693884 43.499887,-95.693864 43.499888,-95.692673 43.499891,-95.692613 43.499891,-95.689365 43.499881,-95.689309 43.499881,-95.6875 43.499898,-95.684432 43.499892,-95.684344 43.499892,-95.684078 43.499894,-95.684051 43.499894,-95.683605 43.499896,-95.682959 43.499899,-95.682937 43.499899,-95.682505 43.499901,-95.682135 43.499903,-95.682106 43.499903,-95.68167 43.499905,-95.681261 43.499907,-95.677127 43.499896,-95.67323 43.499901,-95.672293 43.499896,-95.672272 43.499896,-95.671346 43.499891,-95.671086 43.49989,-95.669613 43.499883,-95.668164 43.499885,-95.666191 43.499888,-95.663105 43.499884,-95.663098 43.499884,-95.660867 43.499884,-95.660848 43.499884,-95.658205 43.499886,-95.652297 43.499904,-95.649093 43.499891,-95.649038 43.499891,-95.648266 43.499887,-95.643177 43.499885,-95.643156 43.499885,-95.640352 43.499885,-95.636566 43.499884,-95.631728 43.499891,-95.631714 43.499891,-95.631159 43.499892,-95.630566 43.49989,-95.630406 43.499889,-95.628489 43.499883,-95.628482 43.499883,-95.626879 43.499888,-95.626572 43.499889,-95.626552 43.499889,-95.625003 43.499893,-95.623272 43.499905,-95.623257 43.499905,-95.621022 43.499907,-95.6206 43.499903,-95.620584 43.499903,-95.619454 43.499894,-95.618856 43.499889,-95.616768 43.499886,-95.61606 43.499888,-95.614241 43.499895,-95.614226 43.499895,-95.609861 43.499903,-95.609624 43.499903,-95.608619 43.499905,-95.606638 43.499902,-95.604395 43.499914,-95.604366 43.499914,-95.602512 43.499915,-95.60002 43.499901,-95.597618 43.49991,-95.594277 43.499902,-95.594244 43.499902,-95.592499 43.499905,-95.590278 43.499899,-95.588487 43.49991,-95.584545 43.499906,-95.58453 43.499906,-95.57987 43.499908,-95.577327 43.499904,-95.574428 43.499911,-95.574285 43.499911,-95.574273 43.499911,-95.574135 43.499912,-95.570443 43.499927,-95.569395 43.499922,-95.56915 43.499921,-95.569004 43.49992,-95.567655 43.499914,-95.565163 43.499934,-95.565127 43.499934,-95.565013 43.499935,-95.564872 43.499927,-95.564786 43.499926,-95.564744 43.499926,-95.564473 43.499923,-95.562494 43.499941,-95.559951 43.499926,-95.552454 43.499951,-95.549808 43.499925,-95.547574 43.499937,-95.544538 43.499927,-95.544504 43.499927,-95.5354 43.499947,-95.535187 43.499947,-95.524921 43.49997,-95.524788 43.499965,-95.52478 43.499965,-95.524764 43.499961,-95.524755 43.499959,-95.524676 43.499936,-95.524608 43.499917,-95.524576 43.499908,-95.5245 43.499856,-95.521726 43.499992,-95.52067 43.499986,-95.518115 43.499993,-95.517329 43.499986,-95.516169 43.499931,-95.515856 43.499916,-95.514664 43.499867,-95.514656 43.499867,-95.504899 43.499964,-95.502536 43.499967,-95.500283 43.499964,-95.500145 43.499967,-95.499985 43.499971,-95.499306 43.499986,-95.498536 43.500005,-95.498425 43.500008,-95.49835 43.50001,-95.493053 43.500157,-95.492723 43.500164,-95.492711 43.500164,-95.489028 43.500049,-95.488837 43.500043,-95.488773 43.500041,-95.488749 43.50004,-95.488731 43.50004,-95.487389 43.499998,-95.487376 43.499998,-95.486793 43.499995,-95.486552 43.499994,-95.486318 43.499995,-95.484345 43.500001,-95.484295 43.500001,-95.482895 43.5,-95.480367 43.500026,-95.478276 43.500024,-95.477448 43.500301,-95.476738 43.500304,-95.476218 43.500307,-95.475596 43.50031,-95.475421 43.500314,-95.475062 43.500338,-95.474805 43.500331,-95.474776 43.500331,-95.460478 43.500468,-95.460448 43.500469,-95.457975 43.500509,-95.457491 43.500517,-95.456563 43.500532,-95.454706 43.500563,-95.454704 43.500563,-95.454656 43.500564,-95.454608 43.500565,-95.454614 43.500647,-95.454433 43.500646,-95.453048 43.500626,-95.448895 43.500566,-95.447511 43.500546,-95.444858 43.500519,-95.436902 43.500441,-95.43425 43.500415,-95.434244 43.50037,-95.434238 43.500315,-95.434204 43.500257,-95.434193 43.500248,-95.434159 43.50022,-95.434108 43.500177,-95.434025 43.500135,-95.433945 43.500121,-95.433839 43.500113,-95.4338 43.500113,-95.432644 43.500118,-95.432421 43.50012,-95.432259 43.500119,-95.431305 43.500115,-95.428446 43.500103,-95.427494 43.500099,-95.426956 43.500101,-95.425345 43.500111,-95.424809 43.500114,-95.423165 43.500123,-95.418233 43.50015,-95.416589 43.500159,-95.416178 43.50016,-95.414945 43.500167,-95.414535 43.50017,-95.413701 43.50018,-95.41343 43.50018,-95.410115 43.500188,-95.409011 43.500191,-95.406691 43.500195,-95.399734 43.500211,-95.397415 43.500217,-95.397325 43.500217,-95.397059 43.500217,-95.39697 43.500218,-95.396493 43.500218,-95.395064 43.500221,-95.394588 43.500223,-95.393405 43.500224,-95.389859 43.500229,-95.388771 43.500231,-95.388677 43.500231,-95.387787 43.500226,-95.382621 43.500249,-95.376466 43.500248,-95.37539 43.500246,-95.375248 43.500246,-95.374823 43.50025,-95.374682 43.500251,-95.374651 43.500252,-95.374488 43.500251,-95.373911 43.500254,-95.373719 43.500255,-95.373713 43.500255,-95.373326 43.500253,-95.372814 43.500252,-95.370099 43.500246,-95.369195 43.500246,-95.369116 43.500246,-95.368881 43.500246,-95.368803 43.500246,-95.367578 43.500248,-95.364808 43.500264,-95.360275 43.500292,-95.352823 43.500317,-95.351873 43.500321,-95.348829 43.500326,-95.348068 43.500331,-95.345788 43.500349,-95.345028 43.500355,-95.345 43.500356,-95.344347 43.500355,-95.343069 43.500359,-95.337194 43.50038,-95.335315 43.500387,-95.335236 43.500387,-95.33399 43.500384,-95.333456 43.500383,-95.330252 43.500391,-95.329007 43.500395,-95.328426 43.500405,-95.328179 43.500406,-95.325695 43.500422,-95.324868 43.500428,-95.324792 43.500428,-95.323859 43.500421,-95.323218 43.500417,-95.320832 43.500418,-95.319824 43.500419,-95.319672 43.500419,-95.319216 43.500423,-95.319065 43.500424,-95.317741 43.500431,-95.317076 43.500431,-95.311111 43.500438,-95.310972 43.500439,-95.309123 43.500446,-95.308451 43.500456,-95.306442 43.500489,-95.306202 43.500493,-95.305772 43.500465,-95.30559 43.500462,-95.305053 43.500456,-95.304874 43.500455,-95.304868 43.500412,-95.299811 43.500437,-95.284638 43.500511,-95.279583 43.500538,-95.278623 43.500539,-95.275751 43.500548,-95.274794 43.500551,-95.274749 43.500551,-95.273629 43.500549,-95.270133 43.500544,-95.270077 43.500544,-95.268968 43.500548,-95.266128 43.50056,-95.263343 43.500573,-95.25761 43.500579,-95.254771 43.500582,-95.254371 43.500582,-95.254022 43.500584,-95.251776 43.500598,-95.251028 43.500603,-95.251011 43.500597,-95.250963 43.500579,-95.250947 43.500573,-95.250927 43.500565,-95.250899 43.500555,-95.250875 43.500533,-95.25086 43.50052,-95.250365 43.500661,-95.24967 43.500728,-95.24605 43.501079,-95.244844 43.501196,-95.242824 43.50116,-95.238847 43.501092,-95.236769 43.501073,-95.234861 43.501057,-95.234751 43.501056,-95.232277 43.501034,-95.224856 43.50097,-95.222383 43.500949,-95.220752 43.500963,-95.215861 43.501007,-95.21493 43.501016,-95.214233 43.500965,-95.213641 43.500934,-95.21187 43.500844,-95.21128 43.500815,-95.209996 43.500818,-95.208155 43.500826,-95.206147 43.500826,-95.205022 43.500828,-95.204943 43.500828,-95.204865 43.500828,-95.204783 43.500829,-95.204702 43.500829,-95.204343 43.500829,-95.203859 43.500831,-95.200845 43.500849,-95.199841 43.500857,-95.198827 43.500859,-95.196561 43.500865,-95.195791 43.500865,-95.194779 43.500867,-95.194738 43.500867,-95.192461 43.500876,-95.185509 43.500905,-95.183193 43.500916,-95.182537 43.500914,-95.180572 43.50091,-95.179917 43.500909,-95.179306 43.50092,-95.179164 43.50092,-95.177231 43.500931,-95.176996 43.500931,-95.176908 43.500931,-95.176157 43.500933,-95.175833 43.500937,-95.175165 43.500944,-95.174863 43.500949,-95.17454 43.500955,-95.174229 43.500961,-95.173214 43.500964,-95.171657 43.500971,-95.169233 43.501005,-95.168429 43.501017,-95.167907 43.501019,-95.167806 43.501019,-95.167595 43.501021,-95.167506 43.501014,-95.167417 43.501,-95.167408 43.500998,-95.167085 43.500951,-95.166119 43.500813,-95.165798 43.500768,-95.163445 43.500698,-95.161364 43.500637,-95.15693 43.500507,-95.156391 43.500491,-95.154936 43.500448,-95.15404 43.500458,-95.153488 43.500463,-95.151834 43.50048,-95.151283 43.500486,-95.150328 43.500495,-95.147465 43.500524,-95.146511 43.500535,-95.146492 43.500535,-95.144569 43.500554,-95.141331 43.500588,-95.138746 43.500597,-95.136805 43.500604,-95.136799 43.500604,-95.136225 43.500605,-95.134484 43.500611,-95.133906 43.500614,-95.132485 43.500619,-95.128225 43.500636,-95.126806 43.500643,-95.126288 43.500638,-95.125271 43.500631,-95.124751 43.500748,-95.124249 43.500863,-95.12393 43.500886,-95.122981 43.500962,-95.122666 43.500989,-95.122478 43.500989,-95.122377 43.500989,-95.121917 43.500983,-95.12173 43.500981,-95.121689 43.50098,-95.120644 43.500967,-95.120596 43.500966,-95.117194 43.500946,-95.117178 43.500946,-95.11606 43.500945,-95.116001 43.500945,-95.115826 43.500945,-95.115768 43.500945,-95.115561 43.500919,-95.114945 43.500851,-95.114741 43.500829,-95.114606 43.500824,-95.114371 43.500832,-95.113465 43.500834,-95.11313 43.50084,-95.112156 43.500854,-95.106934 43.500851,-95.105686 43.500859,-95.104951 43.500864,-95.104192 43.500902,-95.104178 43.500903,-95.103697 43.500931,-95.102789 43.500952,-95.10266 43.500954,-95.102471 43.500959,-95.102273 43.500957,-95.102145 43.500957,-95.101314 43.500952,-95.099147 43.50094,-95.098823 43.50094,-95.097993 43.500943,-95.097579 43.500943,-95.09714 43.500945,-95.09634 43.500974,-95.095928 43.500989,-95.095541 43.501002,-95.095532 43.501004,-95.094383 43.501008,-95.093997 43.501011,-95.093987 43.501012,-95.093226 43.501012,-95.091859 43.501013,-95.090917 43.501009,-95.090154 43.501009,-95.090149 43.501009,-95.088583 43.501007,-95.086882 43.501007,-95.086071 43.501007,-95.083889 43.501008,-95.082326 43.50101,-95.081235 43.50101,-95.077963 43.50101,-95.077754 43.501011,-95.076873 43.50101,-95.076315 43.501007,-95.074641 43.500998,-95.074104 43.500996,-95.074083 43.500996,-95.072232 43.500987,-95.0701 43.500985,-95.062582 43.500983,-95.058154 43.500975,-95.056368 43.500973,-95.05433 43.500945,-95.054172 43.500955,-95.054056 43.500962,-95.053709 43.500985,-95.053594 43.500993,-95.049635 43.500984,-95.03776 43.500963,-95.033802 43.500955,-95.033563 43.500956,-95.033553 43.500956,-95.032808 43.500949,-95.03256 43.500948,-95.030943 43.500957,-95.02892 43.500972,-95.026095 43.500969,-95.02448 43.500968,-95.024161 43.500968,-95.023808 43.500968,-95.021793 43.500969,-95.021123 43.500971,-95.019721 43.500968,-95.015518 43.500963,-95.014223 43.500962,-95.014117 43.500962,-95.010188 43.500958,-95.008717 43.500957,-95.001886 43.500947,-94.998406 43.500937,-94.997477 43.500935,-94.99448 43.500923,-94.994439 43.500924,-94.991921 43.500936,-94.990525 43.50093,-94.989961 43.500929,-94.988673 43.500933,-94.98588 43.500932,-94.984521 43.500937,-94.979915 43.500934,-94.978661 43.500928,-94.978363 43.500927,-94.974793 43.500923,-94.974707 43.500925,-94.974618 43.500932,-94.974373 43.500953,-94.974353 43.500955,-94.974349 43.500956,-94.974265 43.50096,-94.974198 43.500964,-94.973644 43.500979,-94.972704 43.500981,-94.971334 43.500968,-94.97029 43.500977,-94.968699 43.500992,-94.967597 43.500992,-94.966081 43.500998,-94.965025 43.501007,-94.964417 43.500996,-94.963695 43.500991,-94.96274 43.500975,-94.961549 43.500968,-94.959657 43.500968,-94.958866 43.500956,-94.958364 43.500964,-94.958191 43.500966,-94.956295 43.500953,-94.955018 43.500931,-94.95471 43.500922,-94.95439 43.500926,-94.954333 43.500945,-94.954262 43.500945,-94.953906 43.50095,-94.95388 43.500949,-94.953753 43.500947,-94.952183 43.500915,-94.951411 43.500917,-94.951194 43.500916,-94.949767 43.50091,-94.948856 43.500897,-94.947981 43.500902,-94.945647 43.500903,-94.943517 43.500897,-94.942989 43.500896,-94.941753 43.500895,-94.940959 43.500901,-94.940816 43.500902,-94.939975 43.500897,-94.939691 43.500898,-94.937882 43.500906,-94.936675 43.500917,-94.935892 43.500921,-94.935243 43.500924,-94.934626 43.500931,-94.934528 43.500932,-94.934236 43.500939,-94.934139 43.500941,-94.93403 43.500943,-94.932942 43.500951,-94.932784 43.500953,-94.931714 43.500969,-94.930316 43.501007,-94.929698 43.501013,-94.929353 43.501007,-94.929298 43.501007,-94.928563 43.500974,-94.928159 43.500949,-94.92799 43.500937,-94.927434 43.500917,-94.927067 43.500923,-94.926833 43.500926,-94.926238 43.500945,-94.92564 43.500956,-94.925059 43.500952,-94.924485 43.500927,-94.923792 43.500909,-94.923682 43.500907,-94.922701 43.500897,-94.922304 43.500893,-94.92196 43.50089,-94.921116 43.500887,-94.92072 43.500886,-94.919581 43.500882,-94.917793 43.500865,-94.916341 43.500881,-94.915303 43.500884,-94.914921 43.500868,-94.914582 43.500853,-94.914574 43.500872,-94.904034 43.500478,-94.903818 43.50047,-94.889122 43.500499,-94.884418 43.500933,-94.883617 43.500946,-94.882895 43.500929,-94.882116 43.500925,-94.881207 43.500906,-94.880286 43.500921,-94.879146 43.500927,-94.878343 43.500936,-94.876719 43.500934,-94.875339 43.500923,-94.874795 43.500907,-94.874561 43.500924,-94.874418 43.500955,-94.873625 43.500967,-94.872751 43.500988,-94.872682 43.50097,-94.872456 43.500937,-94.872246 43.500917,-94.871695 43.500927,-94.870826 43.500926,-94.869582 43.500944,-94.868771 43.500939,-94.865694 43.500927,-94.86283 43.500926,-94.86178 43.500942,-94.861145 43.500935,-94.86076 43.500898,-94.860491 43.500842,-94.860138 43.500757,-94.859783 43.500617,-94.859696 43.500574,-94.85882 43.500591,-94.858521 43.500799,-94.858354 43.50087,-94.858195 43.500899,-94.857932 43.500924,-94.854566 43.500925,-94.854555 43.500925,-94.850814 43.500937,-94.847566 43.500912,-94.846326 43.500908,-94.844158 43.500918,-94.8424 43.500899,-94.838842 43.500888,-94.837944 43.500881,-94.83749 43.500874,-94.836469 43.500876,-94.834778 43.500868,-94.834413 43.500868,-94.834413 43.500869,-94.834413 43.50087,-94.834413 43.500871,-94.834413 43.500872,-94.834413 43.500873,-94.834413 43.500874,-94.834413 43.500875,-94.834413 43.500876,-94.834413 43.500877,-94.834413 43.500878,-94.834402 43.500879,-94.833922 43.50088,-94.833089 43.500882,-94.826577 43.500882,-94.82561 43.500897,-94.824375 43.500877,-94.821298 43.500922,-94.819236 43.500939,-94.818023 43.500942,-94.816625 43.500949,-94.814036 43.500971,-94.810194 43.500978,-94.808979 43.500975,-94.807898 43.500989,-94.805546 43.501004,-94.804189 43.500993,-94.804084 43.500993,-94.803946 43.500994,-94.801856 43.501002,-94.801022 43.500999,-94.799408 43.500985,-94.798194 43.501001,-94.797932 43.501005,-94.797227 43.501004,-94.796226 43.50102,-94.794387 43.501012,-94.794218 43.501011,-94.792206 43.501039,-94.790385 43.501024,-94.788172 43.501031,-94.785826 43.501025,-94.785071 43.501027,-94.781969 43.501034,-94.77755 43.501032,-94.774407 43.501042,-94.774283 43.501042,-94.773256 43.501046,-94.770068 43.50104,-94.765747 43.501052,-94.761873 43.501049,-94.761265 43.501046,-94.76081 43.501043,-94.758323 43.501033,-94.754238 43.501014,-94.754187 43.501014,-94.752623 43.50103,-94.74944 43.50102,-94.74746 43.501035,-94.74454 43.501023,-94.744535 43.501022,-94.744142 43.501021,-94.739661 43.500985,-94.73837 43.50096,-94.73812 43.500959,-94.734204 43.500936,-94.734179 43.500934,-94.734017 43.500926,-94.732268 43.500927,-94.731463 43.500917,-94.729451 43.500918,-94.729074 43.500923,-94.726893 43.500924,-94.726099 43.500919,-94.725419 43.500928,-94.723779 43.500919,-94.723237 43.500908,-94.722452 43.500901,-94.721784 43.500904,-94.721322 43.500903,-94.720951 43.500902,-94.720731 43.500902,-94.719997 43.500889,-94.718466 43.500885,-94.71821 43.500883,-94.71684 43.500872,-94.7162 43.500873,-94.71458 43.500867,-94.714277 43.500866,-94.714245 43.500865,-94.713386 43.500861,-94.712614 43.500845,-94.711961 43.500846,-94.711056 43.500858,-94.710361 43.500851,-94.706346 43.50085,-94.705118 43.500853,-94.703187 43.500844,-94.701328 43.500849,-94.700303 43.500839,-94.698423 43.500837,-94.698129 43.500839,-94.697713 43.500842,-94.695265 43.500838,-94.694223 43.500831,-94.694182 43.50083,-94.693288 43.500826,-94.68989 43.500819,-94.687758 43.500821,-94.686671 43.500827,-94.685546 43.500825,-94.683567 43.500808,-94.682289 43.500811,-94.681201 43.500797,-94.680159 43.500799,-94.679197 43.500809,-94.678474 43.500808,-94.678041 43.500808,-94.677431 43.5008,-94.67421 43.500797,-94.674191 43.500796,-94.673504 43.500784,-94.671593 43.500793,-94.670274 43.500795,-94.669115 43.500792,-94.668024 43.500784,-94.667615 43.500786,-94.666614 43.500789,-94.664876 43.500777,-94.661583 43.500784,-94.660428 43.50077,-94.658776 43.500762,-94.658045 43.500759,-94.656835 43.500748,-94.654285 43.500746,-94.654278 43.500745,-94.653373 43.500739,-94.652584 43.500733,-94.649709 43.500737,-94.647182 43.500729,-94.645294 43.500732,-94.642594 43.500727,-94.640508 43.500742,-94.640125 43.500734,-94.639491 43.500721,-94.638047 43.500716,-94.636966 43.500721,-94.63427 43.500713,-94.630435 43.500703,-94.630389 43.500702,-94.630195 43.500701,-94.628239 43.500682,-94.625 43.500687,-94.624394 43.500687,-94.624296 43.500687,-94.620603 43.500686,-94.620463 43.500677,-94.620303 43.500653,-94.6202 43.500613,-94.619886 43.500414,-94.61972 43.500506,-94.619514 43.500591,-94.619402 43.500625,-94.619125 43.500684,-94.619071 43.500688,-94.618929 43.500699,-94.616937 43.500698,-94.616723 43.500701,-94.61645 43.500704,-94.616179 43.500726,-94.615697 43.500864,-94.615454 43.500961,-94.615289 43.501036,-94.615158 43.501108,-94.615129 43.501128,-94.61502 43.50111,-94.611635 43.500532,-94.611128 43.500528,-94.609804 43.500521,-94.609697 43.500521,-94.608223 43.500516,-94.607205 43.500513,-94.567272 43.500373,-94.56687 43.500372,-94.566525 43.500354,-94.566087 43.500584,-94.565973 43.500598,-94.565841 43.500599,-94.565102 43.500583,-94.564831 43.500577,-94.564396 43.500567,-94.563081 43.500557,-94.560835 43.500549,-94.557445 43.500525,-94.552345 43.500525,-94.552345 43.500526,-94.552345 43.500527,-94.552345 43.500528,-94.552345 43.500529,-94.552343 43.50053,-94.549149 43.500524,-94.546867 43.50051,-94.544824 43.500514,-94.542522 43.500519,-94.535985 43.500527,-94.532385 43.500534,-94.53238 43.500535,-94.526832 43.5005,-94.52259 43.500494,-94.520215 43.500495,-94.514995 43.500473,-94.514078 43.500472,-94.512393 43.50049,-94.512391 43.500489,-94.508342 43.500465,-94.505798 43.500459,-94.502525 43.500462,-94.501657 43.500456,-94.497644 43.500469,-94.492413 43.500463,-94.49239 43.500462,-94.492241 43.500462,-94.491599 43.50046,-94.490615 43.500456,-94.488232 43.500446,-94.485675 43.500452,-94.482607 43.500443,-94.481887 43.500458,-94.480987 43.500445,-94.479855 43.500443,-94.478373 43.50046,-94.476289 43.500441,-94.475275 43.50045,-94.472935 43.50045,-94.472135 43.500436,-94.471858 43.500431,-94.470957 43.500431,-94.470946 43.500432,-94.470912 43.500432,-94.470807 43.500424,-94.470708 43.500406,-94.470653 43.500384,-94.470585 43.50035,-94.470566 43.500336,-94.470547 43.500321,-94.470413 43.500333,-94.470332 43.50033,-94.463842 43.500358,-94.457341 43.500385,-94.452754 43.500407,-94.448156 43.500429,-94.447424 43.500405,-94.447094 43.500396,-94.445377 43.500404,-94.44285 43.500422,-94.442602 43.500424,-94.439781 43.500387,-94.43893 43.500402,-94.437474 43.500389,-94.437471 43.500389,-94.437325 43.500388,-94.434488 43.500397,-94.432757 43.500371,-94.431547 43.500381,-94.429936 43.500374,-94.427727 43.500341,-94.427146 43.500338,-94.424434 43.500336,-94.423343 43.500333,-94.420397 43.500347,-94.419062 43.500354,-94.415452 43.500345,-94.41444 43.500357,-94.412804 43.500341,-94.411753 43.500317,-94.41033 43.500332,-94.410303 43.500331,-94.408529 43.500312,-94.406276 43.500287,-94.404584 43.500324,-94.403424 43.500322,-94.40339 43.500322,-94.403038 43.500322,-94.400229 43.50032,-94.399727 43.500319,-94.398409 43.500322,-94.393772 43.500299,-94.390776 43.500284,-94.390662 43.500292,-94.390599 43.500317,-94.390555 43.50035,-94.390511 43.500405,-94.390486 43.500468,-94.389248 43.500458,-94.387739 43.500446,-94.386233 43.500437,-94.385241 43.50043,-94.383169 43.500418,-94.382754 43.500415,-94.380106 43.5004,-94.37927 43.500391,-94.378462 43.500385,-94.377961 43.500381,-94.377795 43.50038,-94.377599 43.500379,-94.377466 43.500379,-94.377367 43.500236,-94.377157 43.500235,-94.377049 43.500235,-94.376927 43.500234,-94.376756 43.500233,-94.376537 43.500232,-94.376215 43.50023,-94.376177 43.500229,-94.374965 43.500221,-94.369234 43.500255,-94.36807 43.500243,-94.368066 43.500242,-94.366554 43.500228,-94.365403 43.500241,-94.364213 43.500265,-94.363622 43.500264,-94.35839 43.500251,-94.357708 43.50026,-94.357697 43.500261,-94.357027 43.500249,-94.355819 43.500259,-94.354746 43.500279,-94.352119 43.500254,-94.349308 43.500259,-94.348156 43.50025,-94.347213 43.500248,-94.345278 43.500244,-94.344526 43.500251,-94.343287 43.500253,-94.343016 43.500253,-94.341754 43.50023,-94.339184 43.500238,-94.337406 43.500235,-94.336537 43.500243,-94.334894 43.500237,-94.332953 43.500244,-94.332237 43.50023,-94.33048 43.500224,-94.329679 43.500233,-94.329175 43.500237,-94.327724 43.500225,-94.327237 43.500233,-94.32606 43.500251,-94.323977 43.500237,-94.323298 43.500232,-94.322228 43.500233,-94.320863 43.500266,-94.319947 43.500237,-94.318484 43.500221,-94.316213 43.500216,-94.315406 43.500223,-94.31407 43.500205,-94.311093 43.500197,-94.309481 43.500178,-94.307404 43.500175,-94.306895 43.500185,-94.302612 43.500188,-94.300734 43.500196,-94.298466 43.500181,-94.296353 43.500188,-94.289893 43.500181,-94.288864 43.500192,-94.287774 43.500189,-94.287754 43.500188,-94.287267 43.500182,-94.286242 43.500182,-94.285786 43.500174,-94.283782 43.500171,-94.281445 43.500167,-94.279546 43.500179,-94.278682 43.50017,-94.277143 43.500155,-94.274829 43.500141,-94.272814 43.500152,-94.272475 43.500145,-94.267815 43.500135,-94.267796 43.500135,-94.26739 43.500139,-94.266298 43.500149,-94.265648 43.500138,-94.264561 43.500163,-94.264394 43.500158,-94.263182 43.500123,-94.260751 43.500128,-94.258589 43.50012,-94.255427 43.500128,-94.254526 43.50013,-94.251081 43.50012,-94.250505 43.500118,-94.24959 43.500139,-94.248556 43.500128,-94.247968 43.500133,-94.245416 43.500143,-94.245389 43.500143,-94.23972 43.50012,-94.237771 43.500137,-94.236259 43.500131,-94.234093 43.500138,-94.232244 43.500155,-94.230807 43.500145,-94.22931 43.500153,-94.227969 43.500148,-94.22608 43.500125,-94.225056 43.500136,-94.224689 43.50014,-94.223202 43.500126,-94.220625 43.500157,-94.218938 43.500137,-94.217391 43.500145,-94.215848 43.500131,-94.2127 43.500126,-94.212064 43.500154,-94.212041 43.500155,-94.210486 43.500137,-94.20879 43.500135,-94.208036 43.50015,-94.207027 43.500125,-94.206422 43.500133,-94.204752 43.500126,-94.20296 43.500136,-94.201095 43.500132,-94.200991 43.500131,-94.196025 43.500097,-94.19323 43.500101,-94.192743 43.500102,-94.190219 43.500081,-94.188674 43.500088,-94.188089 43.500091,-94.18803 43.500091,-94.186993 43.500082,-94.186135 43.500093,-94.185762 43.500091,-94.183399 43.500076,-94.182191 43.500078,-94.181288 43.500072,-94.179406 43.500084,-94.178022 43.500092,-94.176763 43.500084,-94.175095 43.500094,-94.172468 43.500083,-94.170926 43.500096,-94.16931 43.500093,-94.167991 43.500106,-94.16723 43.500096,-94.167112 43.500094,-94.166857 43.500091,-94.165964 43.50008,-94.165457 43.500082,-94.163387 43.500088,-94.16059 43.500079,-94.159471 43.500083,-94.157449 43.500091,-94.156733 43.500094,-94.156535 43.500093,-94.154701 43.500088,-94.152104 43.500092,-94.151095 43.500111,-94.150897 43.500105,-94.150388 43.500089,-94.149012 43.50008,-94.147128 43.500088,-94.144988 43.500089,-94.143759 43.50009,-94.142246 43.500099,-94.140461 43.50011,-94.133707 43.500077,-94.132768 43.500101,-94.129974 43.50012,-94.128144 43.500103,-94.125016 43.500104,-94.124122 43.500115,-94.122133 43.500101,-94.120069 43.500104,-94.118322 43.500087,-94.117763 43.500087,-94.117706 43.500087,-94.1163 43.500087,-94.114622 43.500101,-94.113645 43.500102,-94.112881 43.500118,-94.109752 43.500106,-94.108313 43.50011,-94.108152 43.500111,-94.108051 43.500112,-94.107942 43.500114,-94.10779 43.500116,-94.106864 43.500128,-94.106392 43.500105,-94.105009 43.500097,-94.101929 43.500098,-94.098251 43.500082,-94.098084 43.500082,-94.096052 43.500082,-94.094675 43.500074,-94.094656 43.500074,-94.094311 43.500073,-94.094148 43.500073,-94.093594 43.500071,-94.093439 43.500075,-94.09335 43.50009,-94.088586 43.500092,-94.086482 43.500063,-94.085023 43.500051,-94.082891 43.500049,-94.082853 43.500049,-94.079887 43.500042,-94.078227 43.500031,-94.07523 43.500016,-94.07261 43.500021,-94.069231 43.500015,-94.06862 43.500014,-94.068409 43.500013,-94.068271 43.500013,-94.068162 43.500013,-94.067989 43.500013,-94.066204 43.500019,-94.065217 43.500015,-94.064781 43.500013,-94.060935 43.499995,-94.058345 43.500013,-94.053641 43.499992,-94.050801 43.499997,-94.043846 43.499974,-94.043833 43.499974,-94.042451 43.499962,-94.040133 43.499961,-94.034051 43.499957,-94.030804 43.499955,-94.030751 43.499955,-94.029526 43.499951,-94.028194 43.499947,-94.025898 43.499941,-94.023329 43.499944,-94.020781 43.499934,-94.018063 43.499923,-94.016289 43.499925,-94.010752 43.499916,-94.008389 43.49991,-94.008241 43.49991,-94.007876 43.49991,-94.00607 43.499911,-94.002028 43.499913,-94.000441 43.499907,-94.000215 43.499907,-93.999208 43.499903,-93.995154 43.499917,-93.991554 43.499912,-93.990844 43.49992,-93.988231 43.499915,-93.982302 43.499902,-93.981692 43.499901,-93.979328 43.499906,-93.977081 43.49989,-93.973497 43.499885,-93.970762 43.499886,-93.970608 43.499866,-93.968285 43.499873,-93.962102 43.499867,-93.961593 43.499845,-93.952288 43.499874,-93.952286 43.499873,-93.94833 43.499852,-93.94266 43.499855,-93.938465 43.499803,-93.930401 43.499814,-93.930406 43.499825,-93.928585 43.499797,-93.919858 43.499766,-93.919733 43.499766,-93.914717 43.499822,-93.912203 43.499812,-93.912196 43.499811,-93.908599 43.499784,-93.908328 43.499787,-93.905323 43.499781,-93.897069 43.499779,-93.893269 43.499769,-93.893073 43.499769,-93.892288 43.499774,-93.892285 43.499773,-93.88843 43.499769,-93.887961 43.499768,-93.876574 43.499757,-93.875224 43.499728,-93.872447 43.499743,-93.872352 43.499737,-93.872002 43.499722,-93.868404 43.499749,-93.863355 43.499715,-93.852263 43.499742,-93.852262 43.499743,-93.84849 43.499739,-93.835852 43.499749,-93.828496 43.499727,-93.817563 43.499711,-93.813272 43.499699,-93.813269 43.499698,-93.812981 43.49971,-93.808507 43.499697,-93.806438 43.499724,-93.805588 43.499702,-93.801789 43.499677,-93.799286 43.4997,-93.797851 43.499711,-93.797016 43.499697,-93.796428 43.499704,-93.79638 43.499704,-93.796353 43.4997,-93.793979 43.499681,-93.793974 43.49968,-93.793238 43.499686,-93.791251 43.499685,-93.788429 43.499703,-93.785878 43.499689,-93.785875 43.499688,-93.78188 43.499676,-93.780568 43.49967,-93.773734 43.499682,-93.77371 43.49968,-93.769112 43.499695,-93.768498 43.499709,-93.767265 43.499688,-93.767264 43.499687,-93.764461 43.499681,-93.7563 43.499682,-93.753668 43.499678,-93.753655 43.499677,-93.748443 43.499697,-93.743573 43.499689,-93.743568 43.49969,-93.738623 43.499674,-93.738374 43.499673,-93.738007 43.499671,-93.73395 43.499686,-93.733906 43.499685,-93.72846 43.499696,-93.726049 43.499683,-93.722532 43.499676,-93.716122 43.499688,-93.716091 43.499687,-93.708835 43.49967,-93.708489 43.499648,-93.708267 43.499648,-93.704634 43.499661,-93.704623 43.49966,-93.703848 43.499654,-93.700707 43.499683,-93.700306 43.499673,-93.70008 43.499675,-93.697206 43.499675,-93.697206 43.499676,-93.696593 43.49968,-93.694644 43.499672,-93.691067 43.499656,-93.683226 43.49967,-93.677303 43.499687,-93.676303 43.49968,-93.676227 43.499677,-93.668495 43.499675,-93.66785 43.499673,-93.66164 43.499674,-93.656597 43.499664,-93.65656 43.499663,-93.653036 43.499669,-93.651282 43.499667,-93.651281 43.499667,-93.648533 43.49968,-93.648043 43.499677,-93.647542 43.499677,-93.645295 43.49968,-93.644571 43.499682,-93.643581 43.499687,-93.64267 43.499691,-93.64224 43.499689,-93.64132 43.499685,-93.640643 43.499689,-93.638218 43.499682,-93.636878 43.499679,-93.634401 43.499675,-93.633224 43.499679,-93.632771 43.499681,-93.631706 43.499675,-93.629955 43.499684,-93.628325 43.499671,-93.626701 43.499687,-93.624988 43.499668,-93.623015 43.499673,-93.622261 43.499677,-93.621214 43.499683,-93.618609 43.49967,-93.618269 43.499669,-93.617249 43.499666,-93.61691 43.499666,-93.616528 43.499666,-93.615837 43.499659,-93.613431 43.499637,-93.61262 43.49964,-93.611548 43.499646,-93.610148 43.499652,-93.609883 43.499654,-93.605951 43.499641,-93.604833 43.499638,-93.604552 43.499637,-93.602504 43.499627,-93.600839 43.49962,-93.59636 43.499618,-93.594312 43.499618,-93.594096 43.499618,-93.593321 43.499622,-93.5928 43.499626,-93.59035 43.499633,-93.589571 43.499636,-93.58936 43.499635,-93.589185 43.499634,-93.58866 43.499632,-93.588485 43.499632,-93.587638 43.49963,-93.586486 43.499629,-93.584099 43.499633,-93.580836 43.499631,-93.580489 43.499632,-93.578491 43.499639,-93.578097 43.499638,-93.576915 43.499643,-93.576522 43.499644,-93.575796 43.499646,-93.574592 43.49964,-93.572066 43.49963,-93.569053 43.499632,-93.568801 43.499632,-93.566872 43.499638,-93.565206 43.499642,-93.560755 43.499654,-93.560209 43.499651,-93.558544 43.499644,-93.558457 43.499643,-93.558198 43.499643,-93.558112 43.499643,-93.557891 43.499641,-93.557231 43.499638,-93.557011 43.499639,-93.555557 43.499643,-93.554758 43.499646,-93.551197 43.499632,-93.550459 43.499631,-93.549744 43.499633,-93.549506 43.499632,-93.548791 43.499634,-93.548555 43.499635,-93.548126 43.499635,-93.546847 43.499639,-93.546842 43.499638,-93.546414 43.499637,-93.546296 43.499637,-93.54484 43.499632,-93.544045 43.49963,-93.540122 43.499637,-93.538608 43.499641,-93.538549 43.499641,-93.537493 43.499643,-93.535801 43.499647,-93.534326 43.499657,-93.533646 43.499662,-93.533272 43.49966,-93.53305 43.499658,-93.532384 43.499654,-93.532163 43.499653,-93.532107 43.499652,-93.531942 43.499651,-93.531887 43.499651,-93.531408 43.499648,-93.531206 43.499646,-93.529163 43.499642,-93.528483 43.499641,-93.528433 43.49964,-93.528286 43.49964,-93.528237 43.49964,-93.527904 43.499639,-93.526907 43.499636,-93.526575 43.499636,-93.526118 43.499635,-93.525533 43.499637,-93.523831 43.499643,-93.52241 43.499637,-93.52137 43.499633,-93.521255 43.499632,-93.520912 43.499631,-93.520798 43.499631,-93.520246 43.499628,-93.519277 43.499625,-93.51859 43.499625,-93.518039 43.499626,-93.517873 43.499626,-93.517375 43.499626,-93.517209 43.499626,-93.516993 43.499626,-93.516801 43.499626,-93.516382 43.499626,-93.51558 43.49962,-93.515173 43.499618,-93.514654 43.499614,-93.513103 43.499603,-93.512586 43.4996,-93.512304 43.499598,-93.511811 43.499596,-93.509487 43.499587,-93.508713 43.499585,-93.508067 43.499586,-93.507449 43.499588,-93.50613 43.499593,-93.505485 43.499596,-93.505378 43.499596,-93.505057 43.499597,-93.504951 43.499598,-93.504439 43.499599,-93.503775 43.499602,-93.502906 43.499588,-93.502396 43.499581,-93.502165 43.499577,-93.502104 43.499576,-93.501229 43.499586,-93.500939 43.49959,-93.500436 43.499595,-93.500227 43.499598,-93.498927 43.499607,-93.498425 43.499613,-93.49821 43.499614,-93.497567 43.49962,-93.497353 43.499622,-93.492638 43.499612,-93.492146 43.499603,-93.492138 43.499603,-93.491757 43.499597,-93.491391 43.499596,-93.489844 43.49959,-93.489836 43.49959,-93.489327 43.499588,-93.489302 43.499588,-93.488802 43.499583,-93.488765 43.499583,-93.488209 43.499591,-93.487799 43.499578,-93.483151 43.499475,-93.483137 43.499475,-93.483123 43.499475,-93.483087 43.499474,-93.481438 43.499491,-93.478554 43.499489,-93.47854 43.499489,-93.472767 43.499484,-93.472301 43.499466,-93.468321 43.499565,-93.46829 43.499572,-93.467961 43.499574,-93.466793 43.499562,-93.461403 43.499574,-93.458595 43.499579,-93.458583 43.499579,-93.453642 43.499567,-93.453435 43.499567,-93.448679 43.499551,-93.448667 43.499551,-93.445822 43.499546,-93.441911 43.499561,-93.438797 43.499562,-93.43879 43.499562,-93.438119 43.499562,-93.437503 43.499548,-93.434755 43.499535,-93.431223 43.499559,-93.428574 43.499556,-93.428507 43.499556,-93.428138 43.499555,-93.427864 43.499555,-93.427645 43.499555,-93.422931 43.499563,-93.420353 43.499562,-93.418627 43.499562,-93.414451 43.499544,-93.413585 43.499544,-93.413506 43.499544,-93.410613 43.499542,-93.408616 43.499545,-93.403334 43.499554,-93.399042 43.499534,-93.398993 43.499534,-93.398613 43.499532,-93.398583 43.499532,-93.393519 43.499536,-93.39348 43.499536,-93.39109 43.499534,-93.391025 43.499534,-93.390121 43.499534,-93.386356 43.499516,-93.382139 43.499534,-93.381849 43.499533,-93.381688 43.499533,-93.379932 43.499528,-93.379924 43.499528,-93.379545 43.499527,-93.379536 43.499527,-93.378607 43.499525,-93.378579 43.499525,-93.375826 43.499515,-93.375813 43.499515,-93.375212 43.499513,-93.375175 43.499513,-93.374998 43.499512,-93.372084 43.499515,-93.370052 43.499513,-93.370007 43.499513,-93.369066 43.499512,-93.369012 43.499512,-93.367003 43.499509,-93.36261 43.499487,-93.358793 43.499487,-93.358698 43.499487,-93.354921 43.499508,-93.353709 43.499504,-93.353307 43.499502,-93.35297 43.499501,-93.350161 43.499491,-93.350151 43.499491,-93.346711 43.499479,-93.346014 43.499476,-93.345461 43.499478,-93.345298 43.499479,-93.34516 43.499479,-93.344207 43.499481,-93.344041 43.499482,-93.343972 43.499482,-93.34312 43.499485,-93.343096 43.499485,-93.341819 43.499489,-93.340151 43.499484,-93.340139 43.499484,-93.338793 43.49948,-93.337354 43.499476,-93.33713 43.499477,-93.336927 43.499478,-93.333982 43.499492,-93.330244 43.499485,-93.330232 43.499485,-93.328744 43.499485,-93.325799 43.499486,-93.321954 43.499471,-93.321442 43.499477,-93.321411 43.499477,-93.320556 43.499488,-93.317759 43.49948,-93.316846 43.499474,-93.316835 43.499474,-93.31449 43.499459,-93.313897 43.49946,-93.313881 43.49946,-93.312498 43.499461,-93.307152 43.499482,-93.306628 43.49948,-93.306586 43.49948,-93.30387 43.499468,-93.303218 43.499465,-93.302999 43.499464,-93.302813 43.499464,-93.301057 43.499462,-93.300617 43.499461,-93.300584 43.499461,-93.298923 43.499459,-93.298874 43.499459,-93.296303 43.499467,-93.295089 43.499472,-93.290601 43.499467,-93.289043 43.49947,-93.286249 43.499474,-93.281792 43.499492,-93.281766 43.499492,-93.280413 43.499493,-93.276308 43.499493,-93.273899 43.49949,-93.273879 43.49949,-93.272112 43.499496,-93.271831 43.499488,-93.267809 43.499369,-93.267571 43.499362,-93.267531 43.499361,-93.26744 43.499361,-93.267349 43.499361,-93.266987 43.499361,-93.260984 43.499369,-93.250204 43.499386,-93.247786 43.499485,-93.247216 43.499511,-93.247207 43.499511,-93.24608 43.499501,-93.245997 43.4995,-93.244747 43.499505,-93.243588 43.499504,-93.233845 43.499506,-93.228738 43.499508,-93.228659 43.499508,-93.228396 43.49951,-93.228378 43.49951,-93.227905 43.499513,-93.226058 43.499524,-93.220569 43.499531,-93.220555 43.499531,-93.217806 43.499535,-93.21557 43.499535,-93.215542 43.499535,-93.213102 43.499535,-93.210671 43.49953,-93.209696 43.499528,-93.209116 43.499531,-93.20909 43.499531,-93.201098 43.49956,-93.197936 43.499565,-93.193443 43.499566,-93.189138 43.499558,-93.189114 43.499558,-93.187505 43.49957,-93.183794 43.499567,-93.183772 43.499567,-93.176845 43.499559,-93.171999 43.499563,-93.171406 43.499564,-93.169173 43.499571,-93.16914 43.499571,-93.162294 43.499593,-93.161068 43.499588,-93.161056 43.499588,-93.156954 43.499572,-93.155423 43.499576,-93.149191 43.499596,-93.149175 43.499596,-93.144363 43.499611,-93.14122 43.499608,-93.141195 43.499608,-93.137393 43.499605,-93.137375 43.499605,-93.13643 43.499605,-93.132918 43.499618,-93.131713 43.499623,-93.128996 43.499622,-93.127744 43.499621,-93.124281 43.49962,-93.124274 43.49962,-93.12404 43.49962,-93.123593 43.499621,-93.117792 43.499624,-93.116697 43.499629,-93.114068 43.49964,-93.111522 43.49963,-93.110124 43.499644,-93.109339 43.499645,-93.109311 43.499645,-93.107728 43.499646,-93.107366 43.499646,-93.102842 43.499641,-93.100456 43.499642,-93.095208 43.499645,-93.093961 43.499644,-93.093949 43.499644,-93.092362 43.499643,-93.092015 43.499642,-93.091692 43.499642,-93.089294 43.499637,-93.089287 43.499637,-93.086651 43.49963,-93.084283 43.499641,-93.082469 43.499649,-93.082183 43.499649,-93.081882 43.499649,-93.081858 43.499649,-93.078494 43.499651,-93.075636 43.49965,-93.072425 43.499643,-93.071156 43.499641,-93.069321 43.499639,-93.069274 43.499639,-93.06536 43.499643,-93.062479 43.499646,-93.062258 43.499648,-93.062034 43.49965,-93.060461 43.499665,-93.06044 43.499665,-93.059957 43.49967,-93.057505 43.499679,-93.05587 43.499694,-93.055393 43.499694,-93.052766 43.499693,-93.050191 43.499703,-93.050167 43.499703,-93.049192 43.499705,-93.045953 43.499705,-93.044382 43.499717,-93.042809 43.499725,-93.041064 43.499711,-93.039356 43.499703,-93.038827 43.499701,-93.036193 43.499708,-93.03361 43.499724,-93.029556 43.499725,-93.028096 43.49972,-93.024345 43.499733,-93.019507 43.499715,-93.014151 43.499744,-93.009604 43.499746,-93.009545 43.499747,-93.009544 43.499736,-93.008754 43.49974,-93.007706 43.499755,-93.006525 43.499758,-93.002984 43.499768,-93.00199 43.499771,-93.001897 43.499772,-93.001804 43.499772,-93.001722 43.499772,-93.001641 43.499772,-93.001015 43.499774,-92.99982 43.499774,-92.99811 43.499776,-92.993869 43.499767,-92.991956 43.499763,-92.991886 43.499763,-92.991261 43.499763,-92.989388 43.499763,-92.988764 43.499763,-92.988536 43.499763,-92.987852 43.499763,-92.987625 43.499763,-92.987445 43.499763,-92.986907 43.499763,-92.986728 43.499763,-92.985943 43.499763,-92.983591 43.499763,-92.983054 43.499764,-92.982807 43.499764,-92.9826 43.499764,-92.981982 43.499765,-92.981776 43.499766,-92.981625 43.499766,-92.981174 43.499766,-92.981024 43.499767,-92.980928 43.499767,-92.980642 43.499767,-92.980547 43.499768,-92.980338 43.499768,-92.979712 43.499768,-92.979504 43.499769,-92.978397 43.49974,-92.975076 43.499656,-92.973969 43.499628,-92.972338 43.499608,-92.967447 43.499548,-92.965817 43.499529,-92.964046 43.499585,-92.958733 43.499757,-92.956964 43.499815,-92.956413 43.499759,-92.954766 43.499596,-92.954217 43.499542,-92.953292 43.499596,-92.950523 43.499759,-92.9496 43.499814,-92.949549 43.499813,-92.949407 43.499816,-92.949364 43.499815,-92.94946 43.499595,-92.949446 43.499584,-92.949403 43.499552,-92.94939 43.499542,-92.949253 43.499542,-92.948842 43.499542,-92.948706 43.499543,-92.948302 43.499597,-92.947092 43.499761,-92.947017 43.499771,-92.94669 43.499816,-92.946587 43.49976,-92.946282 43.499596,-92.946183 43.499543,-92.945853 43.49959,-92.944866 43.499736,-92.944539 43.499786,-92.94449 43.499784,-92.944345 43.499778,-92.944298 43.499777,-92.943906 43.499739,-92.943806 43.499731,-92.94233 43.499606,-92.941839 43.499566,-92.941726 43.499561,-92.941391 43.499547,-92.941279 43.499544,-92.941227 43.499775,-92.941027 43.499729,-92.940433 43.499597,-92.940236 43.499555,-92.940107 43.499548,-92.939727 43.499529,-92.9396 43.499523,-92.939577 43.499786,-92.937961 43.499786,-92.933125 43.499791,-92.931513 43.499794,-92.931151 43.499751,-92.930067 43.499627,-92.929708 43.499586,-92.929627 43.499805,-92.928733 43.499754,-92.926058 43.499603,-92.925167 43.499554,-92.923811 43.499604,-92.919747 43.499759,-92.918394 43.499812,-92.918355 43.499592,-92.917842 43.499585,-92.916305 43.499564,-92.915793 43.499558,-92.913739 43.499559,-92.907581 43.499562,-92.905528 43.499564,-92.90512 43.499561,-92.9039 43.499554,-92.903494 43.499553,-92.90344 43.499847,-92.902641 43.499845,-92.900249 43.499845,-92.899456 43.499848,-92.899427 43.49958,-92.897621 43.499622,-92.892203 43.499751,-92.890397 43.499796,-92.890283 43.499806,-92.889948 43.49984,-92.889838 43.499853,-92.88965 43.499537,-92.888312 43.499601,-92.884304 43.499797,-92.882969 43.499863,-92.882899 43.499551,-92.882042 43.499554,-92.87947 43.499568,-92.878614 43.499573,-92.878525 43.49987,-92.876869 43.499836,-92.875069 43.499802,-92.871911 43.499635,-92.87026 43.49955,-92.867925 43.499547,-92.860921 43.499541,-92.858588 43.499539,-92.858586 43.499912,-92.858212 43.499908,-92.857096 43.499907,-92.856726 43.499907,-92.856656 43.499535,-92.855236 43.499533,-92.850979 43.499532,-92.849561 43.499534,-92.849466 43.499904,-92.846739 43.499831,-92.838565 43.499623,-92.835841 43.499553,-92.83583 43.499917,-92.834714 43.499843,-92.831371 43.499626,-92.830258 43.499555,-92.829931 43.499549,-92.828954 43.499534,-92.828629 43.499529,-92.828605 43.49992,-92.827231 43.49993,-92.823113 43.499969,-92.821742 43.499982,-92.819447 43.499974,-92.812568 43.499956,-92.810276 43.499951,-92.809946 43.499951,-92.808956 43.499952,-92.808627 43.499953,-92.808608 43.499953,-92.806177 43.499958,-92.804958 43.499962,-92.802246 43.499974,-92.793952 43.499982,-92.790284 43.499986,-92.789954 43.499985,-92.788967 43.499985,-92.788644 43.499985,-92.788638 43.499985,-92.78741 43.499984,-92.783726 43.499984,-92.78367 43.499984,-92.782499 43.499991,-92.781346 43.499998,-92.780775 43.500002,-92.777888 43.499996,-92.776736 43.499995,-92.775343 43.499992,-92.774267 43.49999,-92.771165 43.499998,-92.769773 43.500002,-92.769592 43.500002,-92.769051 43.500004,-92.768871 43.500005,-92.767524 43.500004,-92.763483 43.500003,-92.762137 43.500003,-92.761375 43.500003,-92.760109 43.500006,-92.754027 43.500023,-92.752 43.500029,-92.751634 43.500029,-92.750538 43.500032,-92.750173 43.500034,-92.749988 43.500034,-92.749433 43.500035,-92.749249 43.500036,-92.748941 43.500036,-92.748019 43.500039,-92.747712 43.50004,-92.747599 43.50004,-92.747485 43.500041,-92.747474 43.50004,-92.747261 43.50004,-92.747149 43.50004,-92.744232 43.500034,-92.740278 43.500027,-92.739571 43.500056,-92.737097 43.500045,-92.735484 43.500044,-92.732568 43.500043,-92.732501 43.500043,-92.732302 43.500043,-92.732236 43.500043,-92.732003 43.500043,-92.731556 43.500043,-92.729519 43.500044,-92.72884 43.500045,-92.728652 43.500045,-92.728634 43.500045,-92.72817 43.500045,-92.726487 43.500047,-92.726163 43.500048,-92.725495 43.500051,-92.724954 43.500052,-92.723334 43.500059,-92.722794 43.500062,-92.720721 43.500069,-92.71781 43.500081,-92.714505 43.500079,-92.712433 43.500079,-92.712023 43.500078,-92.710796 43.500078,-92.710387 43.500078,-92.710158 43.500078,-92.709474 43.500078,-92.709246 43.500078,-92.708885 43.500078,-92.708573 43.500078,-92.706556 43.500078,-92.705999 43.500079,-92.705998 43.500079,-92.705884 43.50008,-92.704662 43.500065,-92.703238 43.500073,-92.698329 43.500101,-92.695302 43.500095,-92.693961 43.500093,-92.692657 43.500096,-92.691931 43.500097,-92.689757 43.5001,-92.689032 43.500102,-92.688735 43.500102,-92.688718 43.500102,-92.688717 43.500102,-92.685742 43.500109,-92.676236 43.500132,-92.675872 43.500132,-92.672582 43.500134,-92.672236 43.500134,-92.671202 43.500134,-92.670857 43.500135,-92.670483 43.500135,-92.669362 43.500135,-92.668989 43.500136,-92.668723 43.500136,-92.668717 43.500136,-92.666963 43.500143,-92.660888 43.500171,-92.659117 43.50018,-92.659048 43.50018,-92.658863 43.500182,-92.657727 43.50019,-92.655662 43.500206,-92.65432 43.50021,-92.653185 43.500215,-92.652698 43.500216,-92.652386 43.500213,-92.649991 43.500192,-92.649193 43.500185,-92.648819 43.500182,-92.648798 43.500182,-92.6482 43.500177,-92.64806 43.500176,-92.645221 43.500183,-92.644228 43.500186,-92.64392 43.500186,-92.643751 43.500187,-92.642997 43.500186,-92.64269 43.500186,-92.641358 43.500185,-92.637363 43.500183,-92.636351 43.500183,-92.636032 43.500184,-92.635406 43.500186,-92.633532 43.500193,-92.632907 43.500196,-92.632616 43.500196,-92.631743 43.5002,-92.631453 43.500202,-92.631017 43.500203,-92.629709 43.500208,-92.629274 43.50021,-92.62892 43.500211,-92.628825 43.500211,-92.628789 43.500212,-92.627859 43.500215,-92.627506 43.500217,-92.627502 43.500217,-92.627403 43.500217,-92.627076 43.500213,-92.625786 43.500201,-92.625357 43.500197,-92.624351 43.500187,-92.622932 43.500191,-92.615657 43.500212,-92.614265 43.500217,-92.613233 43.500213,-92.612372 43.500209,-92.609789 43.500198,-92.608928 43.500195,-92.608822 43.500195,-92.60882 43.500195,-92.608311 43.500192,-92.60712 43.500188,-92.606463 43.500191,-92.605847 43.500194,-92.60478 43.500198,-92.60158 43.500212,-92.601476 43.500213,-92.600514 43.500214,-92.599029 43.500215,-92.594574 43.500221,-92.59309 43.500224,-92.592672 43.500224,-92.591421 43.500225,-92.591004 43.500226,-92.590612 43.500226,-92.589437 43.500228,-92.589046 43.500229,-92.588846 43.500229,-92.58883 43.500229,-92.585861 43.500237,-92.582232 43.500247,-92.576309 43.500258,-92.57487 43.500261,-92.573125 43.500261,-92.572282 43.500261,-92.569755 43.500262,-92.568913 43.500263,-92.568899 43.500263,-92.566923 43.500263,-92.56156 43.500266,-92.560956 43.500269,-92.558968 43.500279,-92.558872 43.500279,-92.558031 43.500284,-92.557421 43.500276,-92.553128 43.500218,-92.553128 43.500231,-92.552189 43.500207,-92.549786 43.50019,-92.547619 43.500201,-92.545338 43.500194,-92.543362 43.5002,-92.543274 43.5002,-92.540806 43.500223,-92.538879 43.500223,-92.538844 43.500223,-92.53622 43.50023,-92.53407 43.500228,-92.532116 43.500241,-92.531897 43.500243,-92.528958 43.500234,-92.528934 43.500234,-92.527893 43.500231,-92.525578 43.500242,-92.51471 43.500244,-92.514389 43.500244,-92.508949 43.500245,-92.508018 43.500242,-92.505649 43.500237,-92.505064 43.500243,-92.505036 43.500244,-92.504148 43.500257,-92.504039 43.500257,-92.503833 43.500257,-92.501937 43.500263,-92.500003 43.500262,-92.499169 43.500267,-92.499073 43.500273,-92.498984 43.500295,-92.498977 43.500298,-92.498902 43.500335,-92.498818 43.500382,-92.498817 43.500388,-92.498816 43.500388,-92.498815 43.500388,-92.498802 43.500392,-92.498621 43.500388,-92.497683 43.500383,-92.497544 43.500376,-92.497529 43.500376,-92.497101 43.500364,-92.496897 43.500349,-92.496829 43.500333,-92.496192 43.500285,-92.495537 43.500254,-92.495509 43.500258,-92.495393 43.500276,-92.494918 43.500284,-92.49466 43.500284,-92.489556 43.500287,-92.489339 43.500288,-92.487972 43.500293,-92.487613 43.500295,-92.487469 43.500295,-92.487254 43.500296,-92.484047 43.500309,-92.475706 43.500281,-92.47521 43.50028,-92.473717 43.500282,-92.471011 43.500293,-92.4689 43.500286,-92.467738 43.500288,-92.464712 43.50029,-92.464473 43.50029,-92.464436 43.500286,-92.464386 43.500281,-92.46305 43.500305,-92.462726 43.500311,-92.46174 43.500356,-92.458974 43.500413,-92.457664 43.50041,-92.455542 43.500404,-92.455483 43.500403,-92.454727 43.500416,-92.454599 43.500417,-92.452943 43.500429,-92.452761 43.500431,-92.448948 43.500459,-92.446609 43.500455,-92.445532 43.500478,-92.444491 43.5005,-92.441276 43.500483,-92.439035 43.500534,-92.437649 43.500551,-92.435833 43.500513,-92.435606 43.5005,-92.43553 43.500508,-92.4351 43.500551,-92.432482 43.500551,-92.432202 43.500538,-92.431679 43.500513,-92.431629 43.500514,-92.430806 43.500538,-92.428789 43.500536,-92.426605 43.500581,-92.423699 43.500542,-92.420718 43.500551,-92.418921 43.500606,-92.418841 43.500615,-92.418822 43.500615,-92.416393 43.500568,-92.414187 43.500548,-92.413617 43.500546,-92.41345 43.500546,-92.412302 43.500586,-92.410517 43.500535,-92.409641 43.500587,-92.409227 43.500605,-92.40894 43.500599,-92.40893 43.500599,-92.40892 43.500591,-92.408853 43.500554,-92.408759 43.50053,-92.408616 43.500524,-92.406555 43.50054,-92.406228 43.500543,-92.405959 43.500512,-92.40466 43.500518,-92.402362 43.500539,-92.400735 43.500538,-92.396296 43.500558,-92.395014 43.500565,-92.391775 43.500564,-92.388307 43.500486,-92.38781 43.500486,-92.387773 43.500486,-92.386601 43.500481,-92.386078 43.500504,-92.386019 43.500506,-92.384228 43.500589,-92.384065 43.500593,-92.384008 43.500595,-92.382653 43.500628,-92.381652 43.500643,-92.381278 43.500648,-92.381127 43.500645,-92.38042 43.500629,-92.380036 43.500622,-92.379948 43.500623,-92.379582 43.500623,-92.379289 43.500634,-92.378222 43.50067,-92.37796 43.500684,-92.377876 43.50069,-92.377828 43.500661,-92.377476 43.500633,-92.376803 43.500609,-92.376589 43.500603,-92.376194 43.500603,-92.37518 43.500623,-92.369057 43.500491,-92.368858 43.500519,-92.368032 43.500548,-92.366616 43.500546,-92.36631 43.500545,-92.36176 43.500541,-92.361281 43.50054,-92.35871 43.500537,-92.355731 43.500559,-92.352429 43.500584,-92.351275 43.500582,-92.349768 43.500606,-92.349383 43.500607,-92.34938 43.500607,-92.347494 43.500612,-92.34683 43.500604,-92.346811 43.500604,-92.346192 43.500596,-92.345492 43.500588,-92.343149 43.5006,-92.329381 43.500554,-92.329374 43.500553,-92.328613 43.500551,-92.327558 43.500542,-92.326344 43.500549,-92.325508 43.500553,-92.323193 43.500549,-92.320967 43.500538,-92.320451 43.500539,-92.318606 43.500543,-92.316282 43.500538,-92.316214 43.500538,-92.314296 43.500545,-92.312499 43.500541,-92.310125 43.500551,-92.309347 43.500549,-92.301706 43.500567,-92.301323 43.500564,-92.301187 43.500562,-92.29472 43.500555,-92.28939 43.500555,-92.28855 43.50058,-92.288185 43.500576,-92.288119 43.500576,-92.287322 43.50057,-92.286244 43.500573,-92.285067 43.500591,-92.282894 43.500597,-92.282099 43.500587,-92.279708 43.500599,-92.279473 43.5006,-92.27922 43.500594,-92.27907 43.50059,-92.27892 43.500582,-92.278896 43.500577,-92.278842 43.500565,-92.278778 43.500551,-92.278471 43.500443,-92.278464 43.50044,-92.277505 43.500466,-92.277498 43.500468,-92.277403 43.5005,-92.277212 43.500544,-92.277178 43.500548,-92.277023 43.500565,-92.276898 43.500579,-92.276858 43.500579,-92.275192 43.500593,-92.275019 43.500592,-92.27205 43.500585,-92.271699 43.500596,-92.271669 43.5006,-92.27162 43.500598,-92.271119 43.500582,-92.27024 43.500588,-92.269424 43.500593,-92.266586 43.50058,-92.264362 43.500588,-92.262145 43.500586,-92.261385 43.500588,-92.260896 43.50059,-92.25702 43.500593,-92.257018 43.500594,-92.255848 43.500598,-92.254146 43.500587,-92.252375 43.50061,-92.250977 43.500606,-92.250004 43.500617,-92.249945 43.500617,-92.249369 43.500615,-92.249353 43.500615,-92.247813 43.500611,-92.243719 43.500595,-92.241129 43.500599,-92.239329 43.500592,-92.239307 43.500592,-92.238203 43.500587,-92.237466 43.500582,-92.237314 43.50058,-92.23671 43.500577,-92.234549 43.500591,-92.232801 43.50058,-92.23119 43.500589,-92.231136 43.50059,-92.2307 43.500594,-92.22927 43.500592,-92.227861 43.500596,-92.227197 43.500604,-92.22678 43.500604,-92.226305 43.500603,-92.225956 43.500617,-92.225663 43.500633,-92.225306 43.500633,-92.224874 43.500613,-92.224693 43.500605,-92.224379 43.500601,-92.224169 43.50061,-92.224037 43.500627,-92.22389 43.500657,-92.223696 43.500723,-92.222514 43.500614,-92.2128 43.500525,-92.212735 43.500525,-92.208954 43.500518,-92.201511 43.500539,-92.20144 43.500559,-92.200699 43.500564,-92.200386 43.500572,-92.200242 43.500571,-92.199971 43.500559,-92.199609 43.500551,-92.199207 43.500547,-92.199023 43.500545,-92.198952 43.500544,-92.198875 43.500556,-92.182557 43.500677,-92.182517 43.500677,-92.178863 43.500713,-92.178723 43.500714,-92.1719 43.50078,-92.171899 43.500781,-92.171888 43.500778,-92.171807 43.500763,-92.171616 43.500735,-92.171355 43.500722,-92.171267 43.500718,-92.170091 43.500704,-92.169264 43.500713,-92.168706 43.500728,-92.16789 43.500731,-92.166118 43.500729,-92.16471 43.500743,-92.164145 43.500732,-92.163238 43.50073,-92.16313 43.500733,-92.162965 43.500738,-92.16235 43.500741,-92.159514 43.500725,-92.158845 43.500715,-92.158146 43.500722,-92.157158 43.500724,-92.15689 43.500718,-92.156538 43.500709,-92.156315 43.500704,-92.155701 43.50071,-92.15446 43.500719,-92.151798 43.500714,-92.150666 43.50072,-92.150135 43.500719,-92.149913 43.500727,-92.1499 43.500727,-92.147595 43.50079,-92.147548 43.500791,-92.140197 43.500776,-92.139994 43.500778,-92.139258 43.500782,-92.137138 43.500749,-92.136868 43.500733,-92.136736 43.500715,-92.136463 43.500699,-92.136155 43.5007,-92.134966 43.500701,-92.134439 43.500699,-92.132813 43.500694,-92.132077 43.500692,-92.130374 43.500667,-92.12985 43.500656,-92.129169 43.500665,-92.127838 43.500681,-92.127034 43.500677,-92.124906 43.500707,-92.124265 43.500715,-92.12262 43.500736,-92.11937 43.500779,-92.119243 43.500783,-92.118916 43.500792,-92.118674 43.500798,-92.118499 43.500821,-92.118489 43.50082,-92.117583 43.500806,-92.117376 43.500802,-92.103886 43.500735,-92.10124 43.500722,-92.101065 43.500721,-92.092871 43.500683,-92.092823 43.500683,-92.092391 43.500671,-92.09206 43.500674,-92.090828 43.500684,-92.089973 43.500683,-92.089478 43.500683,-92.087042 43.500697,-92.082925 43.50071,-92.082748 43.500728,-92.082684 43.500769,-92.081222 43.500674,-92.079802 43.500621,-92.079777 43.500636,-92.079469 43.500675,-92.07852 43.500693,-92.077428 43.500684,-92.076851 43.50068,-92.076255 43.50068,-92.074754 43.500731,-92.073968 43.500737,-92.072667 43.500758,-92.071646 43.500745,-92.067914 43.500758,-92.065552 43.500754,-92.062646 43.500771,-92.060569 43.500722,-92.060462 43.500719,-92.060107 43.500718,-92.060001 43.500717,-92.059314 43.500716,-92.058988 43.500711,-92.05886 43.500709,-92.058849 43.500708,-92.057973 43.500695,-92.056941 43.5007,-92.056517 43.500703,-92.055722 43.500718,-92.05415 43.50071,-92.053883 43.500708,-92.053508 43.500706,-92.053501 43.500705,-92.052295 43.5007,-92.051354 43.500718,-92.048969 43.5007,-92.048341 43.500712,-92.04829 43.500713,-92.048253 43.500714,-92.047247 43.500736,-92.042822 43.500711,-92.041213 43.500719,-92.037644 43.500668,-92.037016 43.500662,-92.035947 43.500687,-92.034642 43.500676,-92.032444 43.500637,-92.030688 43.500624,-92.030586 43.500624,-92.029845 43.500621,-92.029679 43.500622,-92.0296 43.500622,-92.02577 43.500638,-92.025008 43.500656,-92.024616 43.500656,-92.024576 43.500656,-92.024213 43.500657,-92.023262 43.500637,-92.021677 43.500642,-92.020136 43.500642,-92.018899 43.500673,-92.017114 43.500681,-92.017095 43.500681,-92.01684 43.500682,-92.015969 43.500656,-92.014479 43.500683,-92.013342 43.500674,-92.013171 43.500676,-92.012506 43.500686,-92.012368 43.500688,-92.012275 43.50069,-92.011151 43.500681,-92.011101 43.50068,-92.011093 43.500679,-92.0102 43.500668,-92.009689 43.500683,-92.00968 43.500683,-92.00934 43.500694,-92.006445 43.500723,-92.005055 43.500749,-92.003959 43.500748,-92.002046 43.500765,-92.000624 43.500758,-92.000083 43.500762,-91.99997 43.500763,-91.998647 43.50074,-91.996169 43.500722,-91.995624 43.500718,-91.991285 43.500687,-91.990863 43.500685,-91.990589 43.500683,-91.989923 43.500687,-91.98985 43.500687,-91.989841 43.500687,-91.989599 43.500688,-91.989577 43.500689,-91.988524 43.500691,-91.987773 43.500675,-91.985337 43.500678,-91.983872 43.500683,-91.98259 43.500672,-91.979335 43.50067,-91.978914 43.500668,-91.978092 43.500666,-91.976486 43.500681,-91.975676 43.500682,-91.974797 43.500682,-91.97322 43.500672,-91.971462 43.500645,-91.970713 43.500645,-91.970359 43.500645,-91.969928 43.500652,-91.969679 43.500655,-91.969639 43.500656,-91.969387 43.500654,-91.968418 43.500675,-91.967015 43.500669,-91.966086 43.500665,-91.962082 43.50067,-91.961928 43.50068,-91.961681 43.500689,-91.96132 43.500711,-91.960671 43.500719,-91.959574 43.500693,-91.958887 43.5007,-91.958567 43.500718,-91.957824 43.500732,-91.957376 43.500723,-91.957009 43.500715,-91.957008 43.500714,-91.956355 43.500693,-91.955574 43.500691,-91.954954 43.500678,-91.954383 43.500659,-91.953803 43.500658,-91.953245 43.500676,-91.952609 43.500679,-91.951935 43.500694,-91.951302 43.500686,-91.9505 43.500673,-91.950264 43.500667,-91.95005 43.500672,-91.95001 43.500674,-91.947548 43.500504,-91.947543 43.500504,-91.941701 43.500705,-91.9417 43.500705,-91.94171 43.500716,-91.941595 43.500703,-91.941265 43.500692,-91.940642 43.500705,-91.940393 43.500702,-91.940385 43.500701,-91.939155 43.50069,-91.938072 43.500699,-91.936704 43.500705,-91.934309 43.500694,-91.930994 43.500716,-91.930795 43.500717,-91.93074 43.500713,-91.930695 43.500711,-91.930499 43.500699,-91.930194 43.500639,-91.930043 43.500895,-91.929845 43.500825,-91.929644 43.500762,-91.92939 43.500734,-91.929186 43.500733,-91.928715 43.500728,-91.922328 43.500765,-91.921429 43.500783,-91.921279 43.500783,-91.920746 43.500782,-91.919506 43.500794,-91.918487 43.500791,-91.917557 43.500793,-91.917396 43.500794,-91.915063 43.500801,-91.914287 43.500799,-91.91331 43.500818,-91.911801 43.500807,-91.911035 43.500815,-91.91071 43.500817,-91.909918 43.500819,-91.90972 43.500819,-91.909708 43.500819,-91.908596 43.500803,-91.908144 43.500797,-91.906802 43.500796,-91.905887 43.500803,-91.905587 43.500799,-91.90328 43.500772,-91.901058 43.500768,-91.899426 43.50075,-91.897334 43.500749,-91.895946 43.500742,-91.894177 43.500727,-91.892278 43.50073,-91.890218 43.500744,-91.889963 43.500743,-91.88982 43.500743,-91.889816 43.500743,-91.88801 43.500742,-91.887626 43.500741,-91.883156 43.500741,-91.881628 43.50076,-91.878468 43.500752,-91.87826 43.500751,-91.87487 43.500742,-91.873325 43.500731,-91.871121 43.500724,-91.87088 43.500713,-91.870643 43.500728,-91.87045 43.500776,-91.870278 43.50084,-91.870238 43.500861,-91.8702 43.500848,-91.870011 43.500787,-91.86978 43.500752,-91.869558 43.500731,-91.869305 43.500719,-91.868244 43.500709,-91.866153 43.500721,-91.863916 43.500715,-91.862172 43.500735,-91.851188 43.500733,-91.850941 43.500719,-91.84986 43.50074,-91.8497 43.50074,-91.8497 43.500741,-91.8497 43.500742,-91.848686 43.500758,-91.846408 43.500753,-91.846386 43.500752,-91.844793 43.500749,-91.842748 43.500782,-91.837725 43.500774,-91.836378 43.50079,-91.836117 43.500789,-91.83595 43.500788,-91.834974 43.500782,-91.830666 43.500731,-91.830608 43.500729,-91.83022 43.500751,-91.830089 43.500758,-91.829682 43.500732,-91.828112 43.50074,-91.828025 43.50074,-91.825303 43.500755,-91.825054 43.50074,-91.824969 43.500729,-91.824949 43.500684,-91.820262 43.500688,-91.820092 43.500688,-91.815625 43.500673,-91.811008 43.500659,-91.807175 43.500647,-91.807093 43.500678,-91.807002 43.500703,-91.806924 43.500716,-91.806827 43.500726,-91.806809 43.500728,-91.80651 43.500735,-91.806312 43.500733,-91.806015 43.500722,-91.805718 43.500699,-91.80562 43.500699,-91.805577 43.500704,-91.798876 43.500688,-91.798844 43.500688,-91.790616 43.5007,-91.782494 43.500712,-91.782124 43.500723,-91.778969 43.500809,-91.77892 43.500809,-91.778914 43.500809,-91.778802 43.500811,-91.778518 43.500827,-91.778221 43.500844,-91.777526 43.500842,-91.777161 43.50083,-91.777002 43.500794,-91.776876 43.500707,-91.761252 43.500829,-91.760797 43.500802,-91.760017 43.500801,-91.759261 43.500782,-91.758876 43.500777,-91.758608 43.500774,-91.758606 43.500774,-91.756934 43.500753,-91.756812 43.500751,-91.754728 43.500725,-91.753756 43.500733,-91.752901 43.500717,-91.749998 43.500696,-91.749302 43.500702,-91.748348 43.5007,-91.746319 43.500716,-91.745681 43.500722,-91.741754 43.500735,-91.741323 43.500743,-91.740479 43.500746,-91.739618 43.500743,-91.738637 43.500751,-91.737529 43.500761,-91.737398 43.500756,-91.737321 43.500739,-91.73726 43.500699,-91.737226 43.500655,-91.737217 43.500548,-91.736558 43.500561,-91.73333 43.500623,-91.7314 43.50066,-91.730879 43.500711,-91.730487 43.50075,-91.73033 43.500769,-91.730217 43.500806,-91.730196 43.500795,-91.730095 43.500753,-91.730068 43.500745,-91.730041 43.500737,-91.729967 43.500736,-91.72568 43.500746,-91.725461 43.500744,-91.720531 43.500695,-91.716017 43.500721,-91.715533 43.500719,-91.715288 43.500722,-91.711846 43.500761,-91.700717 43.500704,-91.680517 43.500631,-91.675275 43.50058,-91.670808 43.500598,-91.663398 43.500628,-91.663364 43.500628,-91.662242 43.500611,-91.662234 43.500611,-91.661723 43.500603,-91.660844 43.50056,-91.658394 43.500532,-91.656019 43.500506,-91.655847 43.500504,-91.651397 43.500454,-91.65074 43.500462,-91.65052 43.500501,-91.650032 43.500538,-91.649537 43.500532,-91.648948 43.500534,-91.648519 43.500544,-91.648452 43.500542,-91.647692 43.500559,-91.646744 43.500562,-91.645711 43.500555,-91.645106 43.500551,-91.645022 43.500564,-91.644942 43.500577,-91.644853 43.50062,-91.644788 43.500652,-91.644603 43.500643,-91.644456 43.500636,-91.643804 43.500638,-91.643263 43.500612,-91.642966 43.500588,-91.642821 43.500539,-91.642704 43.500539,-91.640866 43.500547,-91.640758 43.500563,-91.640678 43.500548,-91.640419 43.500552,-91.640334 43.500554,-91.639681 43.500573,-91.635626 43.500463,-91.634495 43.50044,-91.634369 43.500437,-91.634367 43.500459,-91.634366 43.500481,-91.634244 43.500479,-91.632178 43.500441,-91.631363 43.500481,-91.628625 43.500617,-91.625611 43.500727,-91.625478 43.500704,-91.625145 43.500707,-91.621114 43.500679,-91.620899 43.500678,-91.620225 43.500679,-91.617551 43.500688,-91.617394 43.500628,-91.617276 43.500615,-91.617199 43.500632,-91.617114 43.500663,-91.61578 43.500672,-91.615646 43.500651,-91.61559 43.500642,-91.615519 43.500636,-91.615145 43.500628,-91.614202 43.500621,-91.613181 43.500632,-91.610835 43.500657,-91.610429 43.500679,-91.608269 43.500669,-91.60562 43.500663,-91.603088 43.500671,-91.59446 43.500668,-91.591682 43.50067,-91.591428 43.500671,-91.59098 43.50068,-91.5897 43.500656,-91.573642 43.500554,-91.571002 43.500538,-91.570817 43.500537,-91.570263 43.500537,-91.570079 43.500537,-91.569047 43.500537,-91.565954 43.500537,-91.564923 43.500537,-91.563753 43.500537,-91.560245 43.500537,-91.559076 43.500538,-91.551043 43.500668,-91.550693 43.500675,-91.549274 43.50069,-91.546324 43.500684,-91.545258 43.500686,-91.542352 43.500692,-91.541558 43.500684,-91.533806 43.50056,-91.532847 43.500568,-91.529973 43.500594,-91.529015 43.500604,-91.527462 43.500605,-91.522803 43.500611,-91.521788 43.500613,-91.52125 43.500613,-91.521218 43.500613,-91.521122 43.500613,-91.521091 43.500614,-91.520394 43.500614,-91.518306 43.500616,-91.51761 43.500618,-91.51487 43.500621,-91.506649 43.500631,-91.50391 43.500635,-91.50014 43.50064,-91.499092 43.500659,-91.493896 43.500754,-91.493832 43.500755,-91.493522 43.500777,-91.49104 43.500714,-91.490612 43.500703,-91.48537 43.500704,-91.484196 43.500704,-91.482559 43.500697,-91.480499 43.500689,-91.480106 43.500687,-91.47948 43.500684,-91.479462 43.500684,-91.479452 43.500684,-91.475036 43.500624,-91.471954 43.500685,-91.471895 43.500686,-91.469097 43.500726,-91.465349 43.500686,-91.465287 43.500686,-91.465268 43.500684,-91.464667 43.500612,-91.464014 43.500617,-91.462055 43.500635,-91.461403 43.500642,-91.460591 43.500639,-91.458157 43.50063,-91.457346 43.500628,-91.455647 43.500621,-91.450552 43.500603,-91.448854 43.500598,-91.448219 43.500605,-91.446318 43.500626,-91.445684 43.500633,-91.445642 43.500633,-91.445516 43.500633,-91.445475 43.500633,-91.444766 43.500632,-91.442641 43.500629,-91.442385 43.500629,-91.442164 43.500633,-91.441934 43.500618,-91.441872 43.500629,-91.441162 43.50063,-91.438843 43.500635,-91.438071 43.500637,-91.438035 43.500638,-91.437984 43.500641,-91.43793 43.500643,-91.437895 43.500645,-91.436624 43.500701,-91.436545 43.500705,-91.432808 43.500719,-91.431536 43.500724,-91.429618 43.500732,-91.423866 43.500759,-91.421949 43.500768,-91.419972 43.500776,-91.416064 43.500793,-91.414041 43.5008,-91.412064 43.500808,-91.411155 43.500811,-91.408429 43.500821,-91.407521 43.500825,-91.406908 43.500827,-91.405071 43.500834,-91.404625 43.500836,-91.404459 43.500837,-91.403368 43.500844,-91.400096 43.500869,-91.399006 43.500877,-91.398456 43.500881,-91.397581 43.500885,-91.397319 43.500887,-91.393308 43.500805,-91.391884 43.500777,-91.390655 43.500752,-91.386968 43.500678,-91.38589 43.500657,-91.385739 43.500656,-91.383917 43.500624,-91.378451 43.500531,-91.376629 43.500501,-91.375136 43.500596,-91.372672 43.500577,-91.372029 43.500773,-91.371786 43.500837,-91.371716 43.500856,-91.371542 43.500925,-91.371256 43.500837,-91.369325 43.500827,-91.367422 43.500819,-91.361713 43.500796,-91.35981 43.500789,-91.359742 43.500788,-91.359538 43.500788,-91.359471 43.500788,-91.35915 43.500786,-91.352583 43.500754,-91.352329 43.500753,-91.342974 43.500704,-91.336052 43.500721,-91.331679 43.500731,-91.331163 43.500732,-91.329618 43.500735,-91.329103 43.500737,-91.32907 43.500737,-91.328974 43.500737,-91.328942 43.500737,-91.328908 43.500737,-91.328858 43.500738,-91.328808 43.500738,-91.328775 43.500738,-91.327711 43.50074,-91.324519 43.500747,-91.323456 43.50075,-91.323287 43.50075,-91.322781 43.500752,-91.322613 43.500753,-91.317025 43.500771,-91.300262 43.500825,-91.295077 43.500842,-91.294675 43.500837,-91.294156 43.50083,-91.29356 43.500822,-91.292599 43.500827,-91.29208 43.500831,-91.290606 43.50084,-91.286187 43.50087,-91.284714 43.500881,-91.284651 43.50088,-91.284463 43.500879,-91.284401 43.500879,-91.284271 43.500878,-91.283883 43.500876,-91.283754 43.500876,-91.282878 43.500873,-91.282695 43.500872,-91.282652 43.500871,-91.282523 43.500871,-91.282481 43.500871,-91.280282 43.500877,-91.273688 43.500896,-91.27149 43.500903,-91.271481 43.500903,-91.271465 43.500903,-91.271454 43.500903,-91.271446 43.500903,-91.271339 43.500903,-91.271223 43.500904,-91.271018 43.500905,-91.270912 43.500906,-91.270378 43.500908,-91.268777 43.500916,-91.268244 43.50092,-91.268199 43.50092,-91.268189 43.50092,-91.268025 43.500921,-91.267971 43.500922,-91.267916 43.500922,-91.267834 43.500923,-91.267751 43.500923,-91.267696 43.500923,-91.266534 43.500937,-91.263048 43.500978,-91.261887 43.500993,-91.261852 43.500993,-91.261781 43.500993,-91.261749 43.500994,-91.261715 43.500996,-91.261499 43.501004,-91.261283 43.501013,-91.261184 43.501015,-91.25748 43.500984,-91.253803 43.500901,-91.253729 43.500899,-91.253623 43.500897,-91.25351 43.500894,-91.253437 43.500893,-91.253418 43.50089,-91.253246 43.500865,-91.252673 43.500785,-91.252482 43.500759,-91.252101 43.50074,-91.251812 43.500747,-91.250132 43.50079,-91.249814 43.500697,-91.249353 43.500562,-91.249166 43.500532,-91.248933 43.500527,-91.248586 43.500522,-91.248237 43.500515,-91.248005 43.500511,-91.247728 43.500505,-91.246899 43.50049,-91.246623 43.500485,-91.246522 43.500486,-91.246218 43.500489,-91.246118 43.500491,-91.246016 43.500491,-91.245892 43.500491,-91.245712 43.500491,-91.245611 43.500492,-91.245381 43.500492,-91.24469 43.500494,-91.244461 43.500495,-91.244349 43.500494,-91.244182 43.500494,-91.244015 43.500494,-91.243904 43.500494,-91.243862 43.500493,-91.243799 43.500492,-91.243736 43.500491,-91.243694 43.500491,-91.24351 43.500488,-91.242958 43.500479,-91.242774 43.500476,-91.242615 43.500473,-91.242382 43.50047,-91.242138 43.50047,-91.241979 43.50047,-91.24168 43.500471,-91.241629 43.500471,-91.240582 43.500476,-91.240234 43.500479,-91.239778 43.50048,-91.238412 43.500485,-91.237957 43.500487,-91.236414 43.500491,-91.231786 43.500504,-91.230244 43.500509,-91.229982 43.50051,-91.229197 43.500513,-91.228936 43.500515,-91.228832 43.500516,-91.228519 43.50052,-91.228416 43.500522,-91.228187 43.500515,-91.227679 43.500559,-91.227589 43.500564,-91.227045 43.500562,-91.227026 43.500563,-91.226188 43.500558,-91.225967 43.500556,-91.225479 43.500553,-91.225094 43.50055,-91.224503 43.500543,-91.224473 43.500543,-91.223507 43.50054,-91.22273 43.50055,-91.222371 43.500555,-91.22214 43.500555,-91.22197 43.500555,-91.221716 43.500556,-91.221462 43.500556,-91.221293 43.500557,-91.220995 43.500557,-91.220102 43.500557,-91.219805 43.500557,-91.21945 43.500556,-91.218921 43.500555,-91.218388 43.500552,-91.218035 43.500551,-91.217969 43.50055,-91.21787 43.50055,-91.217771 43.50055,-91.217706 43.50055,-91.21774 43.500401,-91.217839 43.499973,-91.217841 43.499954,-91.217858 43.499803,-91.218008 43.498863,-91.218026 43.498752,-91.218194 43.497701,-91.21827 43.497228,-91.218247 43.497012,-91.218146 43.49605,-91.218144 43.496035,-91.218044 43.495089,-91.218022 43.494879,-91.217956 43.494252,-91.217934 43.494043,-91.217777 43.49255,-91.217615 43.491008,-91.216474 43.488287,-91.216314 43.487905,-91.215925 43.486979,-91.215902 43.486901,-91.215282 43.484798,-91.215508 43.4837,-91.216035 43.481142,-91.216202 43.480764,-91.216676 43.479697,-91.220399 43.471306,-91.223054 43.467641,-91.224586 43.465525,-91.22582 43.464626,-91.226464 43.464158,-91.229503 43.462607,-91.231051 43.461144,-91.232241 43.460018,-91.233187 43.457784,-91.233367 43.455168,-91.233255 43.454735,-91.23323 43.45464,-91.233205 43.454544,-91.232966 43.453618,-91.232802 43.452983,-91.232727 43.452693,-91.232682 43.452522,-91.232638 43.45235,-91.232571 43.452091,-91.232504 43.451832,-91.232276 43.450952,-91.231813 43.45024,-91.23083 43.448732,-91.229848 43.447223,-91.22875 43.445537,-91.223314 43.440179,-91.222734 43.439607,-91.222154 43.439035,-91.22135 43.438242,-91.220546 43.43745,-91.220425 43.437331,-91.218401 43.434946,-91.218182 43.434688,-91.21571 43.432795,-91.213575 43.431159,-91.209049 43.426845,-91.209017 43.426814,-91.208288 43.42612,-91.207145 43.425031,-91.206188 43.423782,-91.20555 43.422949,-91.203144 43.419805,-91.202828 43.419163,-91.202182 43.417852,-91.201537 43.41654,-91.201224 43.415903,-91.200841 43.414486,-91.200359 43.412701,-91.200527 43.408486,-91.199568 43.403812,-91.199561 43.403779,-91.199408 43.403032,-91.198986 43.401851,-91.198962 43.401785,-91.198939 43.401718,-91.198579 43.40071,-91.198219 43.399702,-91.198048 43.399223,-91.197804 43.396708,-91.19767 43.395334,-91.197934 43.394204,-91.198238 43.3929,-91.198542 43.391595,-91.198953 43.389835,-91.199222 43.389235,-91.199283 43.389098,-91.199344 43.388962,-91.19942 43.388792,-91.199497 43.388621,-91.199605 43.388378,-91.199714 43.388134,-91.199741 43.388074,-91.200701 43.38593,-91.201843 43.383983,-91.204831 43.378887,-91.205053 43.378186,-91.205346 43.377262,-91.205679 43.376059,-91.205878 43.375338,-91.206072 43.374976,-91.206165 43.374888,-91.206797 43.374289,-91.207352 43.373676,-91.207367 43.373659,-91.207417 43.373632,-91.208641 43.372971,-91.210233 43.372064,-91.212044 43.371035,-91.212777 43.370512,-91.21336 43.370097,-91.214172 43.369378,-91.214499 43.369033,-91.21473 43.368788,-91.21499 43.368006,-91.215056 43.367185,-91.215062 43.367105,-91.214971 43.366389,-91.21477 43.365874,-91.214453 43.365398,-91.214451 43.365394,-91.213274 43.363628,-91.210497 43.359457,-91.210256 43.359002,-91.209108 43.356838,-91.208646 43.355998,-91.208517 43.355763,-91.208388 43.355529,-91.207574 43.35405,-91.206682 43.352623,-91.20662 43.352524,-91.206601 43.352505,-91.205325 43.351184,-91.20465 43.350478,-91.203964 43.349852,-91.202795 43.349437,-91.20234 43.349277,-91.201847 43.349103,-91.198128 43.348699,-91.194408 43.348296,-91.194274 43.348282,-91.194139 43.348267,-91.188014 43.347602,-91.187595 43.347522,-91.187392 43.347483,-91.187189 43.347445,-91.18666 43.347344,-91.186132 43.347243,-91.185524 43.347127,-91.185474 43.347113,-91.182603 43.346308,-91.181115 43.345926,-91.17935 43.34507,-91.176773 43.34377,-91.175114 43.342934,-91.171493 43.341179,-91.171055 43.340967,-91.169782 43.340512,-91.168288 43.339977,-91.163328 43.338277,-91.154806 43.334826,-91.143678 43.331639,-91.140366 43.330655,-91.140222 43.330612,-91.140077 43.330569,-91.139914 43.33052,-91.13975 43.330472,-91.139546 43.330412,-91.139342 43.330351,-91.137343 43.329757,-91.132813 43.32803,-91.129121 43.32635,-91.127025 43.325076,-91.125129 43.323898,-91.124398 43.323438,-91.122684 43.32236,-91.12097 43.321282,-91.120496 43.321002,-91.120021 43.320723,-91.119959 43.320686,-91.118964 43.3201,-91.11797 43.319514,-91.117661 43.319332,-91.109936 43.315148,-91.109846 43.315099,-91.109755 43.31505,-91.108384 43.314308,-91.107237 43.313645,-91.106579 43.312959,-91.105201 43.311522,-91.102668 43.308934,-91.100283 43.30677,-91.09995 43.306467,-91.098037 43.304182,-91.097769 43.303862,-91.096485 43.302371,-91.095303 43.301264,-91.089124 43.295476,-91.086371 43.292617,-91.085652 43.29187,-91.084309 43.289495,-91.083811 43.288597,-91.083302 43.287678,-91.082792 43.286758,-91.082099 43.285507,-91.081434 43.28469,-91.079875 43.282773,-91.078259 43.280776,-91.077111 43.279177,-91.075679 43.277183,-91.07461 43.27586,-91.07371 43.274746,-91.071724 43.271392,-91.071693 43.26976,-91.071574 43.268193,-91.07193 43.267051,-91.07234 43.265747,-91.072782 43.264363,-91.072863 43.263149,-91.072649 43.262129,-91.071698 43.261014,-91.069937 43.260272,-91.068474 43.259979,-91.067077 43.26011,-91.065456 43.260262,-91.061798 43.259952,-91.05975 43.259074,-91.058644 43.257679,-91.057918 43.255366,-91.057917 43.25524,-91.057914 43.254604,-91.05791 43.253968,-91.059118 43.249979,-91.059684 43.248566,-91.061696 43.244791,-91.061723 43.24474,-91.062132 43.243972,-91.062541 43.243204,-91.062562 43.243165,-91.064438 43.241271,-91.066398 43.239293,-91.067389 43.238543,-91.071857 43.235164,-91.074216 43.232969,-91.079278 43.228259,-91.079573 43.22803,-91.079792 43.227859,-91.080012 43.227688,-91.087456 43.221891,-91.095445 43.216049,-91.096004 43.21564,-91.096562 43.215232,-91.097536 43.21452,-91.097903 43.214252,-91.100436 43.212314,-91.10608 43.207994,-91.10646 43.207704,-91.106839 43.207414,-91.107931 43.206578,-91.109425 43.205635,-91.111198 43.204516,-91.112971 43.203398,-91.113749 43.202908,-91.114281 43.202656,-91.114662 43.202476,-91.115043 43.202295,-91.117057 43.201341,-91.119071 43.200387,-91.119115 43.200366,-91.120391 43.199066,-91.120874 43.198574,-91.121356 43.198083,-91.12217 43.197255,-91.123896 43.193536,-91.124015 43.192277,-91.124217 43.190141,-91.124428 43.187886,-91.124453 43.18786,-91.125129 43.187181,-91.127698 43.183702,-91.134173 43.174405,-91.134364 43.174297,-91.135917 43.173422,-91.138649 43.169993,-91.139002 43.169316,-91.139212 43.168914,-91.139421 43.168513,-91.139692 43.167994,-91.139964 43.167475,-91.139991 43.167422,-91.14116 43.164094,-91.141356 43.163537,-91.141491 43.163037,-91.141662 43.162402,-91.141834 43.161768,-91.142082 43.160853,-91.142329 43.159938,-91.142381 43.159747,-91.142433 43.159557,-91.142504 43.159296,-91.142574 43.159035,-91.142645 43.158772,-91.142716 43.158509,-91.143283 43.156413,-91.144647 43.154539,-91.144972 43.154093,-91.145297 43.153646,-91.145601 43.153228,-91.145905 43.152811,-91.146018 43.152654,-91.1462 43.152405,-91.155859 43.143268,-91.1562 43.142945,-91.160449 43.140575,-91.163576 43.139444,-91.165016 43.138924,-91.169557 43.137618,-91.170372 43.137384,-91.173873 43.135434,-91.175253 43.134665,-91.175394 43.134438,-91.177003 43.131846,-91.177932 43.128875,-91.178251 43.124982,-91.178081 43.124043,-91.178034 43.122379,-91.178018 43.122185,-91.177873 43.120459,-91.177728 43.118733,-91.17772 43.118627,-91.177477 43.117301,-91.177363 43.116498,-91.177243 43.115654,-91.176688 43.111926,-91.176067 43.108326,-91.17567 43.106776,-91.175382 43.10535,-91.175305 43.104968,-91.175193 43.103771,-91.175311 43.102333,-91.175331 43.101248,-91.175471 43.099745,-91.175634 43.09882,-91.175751 43.097181,-91.176021 43.094938,-91.176269 43.092447,-91.17631 43.090743,-91.176307 43.089377,-91.176449 43.088201,-91.176523 43.087584,-91.176889 43.08559,-91.176914 43.085455,-91.177117 43.082026,-91.177169 43.081136,-91.177222 43.080247,-91.177242 43.07893,-91.177236 43.075956,-91.177264 43.072983,-91.177427 43.07242,-91.177832 43.071961,-91.178761 43.070578,-91.179132 43.069637,-91.179382 43.068624,-91.179457 43.067427,-91.17929 43.06643,-91.178982 43.065925,-91.178202 43.064841,-91.177894 43.064206,-91.178087 43.062044,-91.177177 43.055705,-91.176744 43.052523,-91.176608 43.051502,-91.176388 43.04984,-91.176124 43.048107,-91.175658 43.045027,-91.175525 43.044008,-91.175525 43.044004,-91.175395 43.043028,-91.175167 43.041267,-91.174943 43.040063,-91.174692 43.038713,-91.174408 43.038001,-91.174255 43.037619,-91.174208 43.0375,-91.173504 43.035966,-91.172656 43.033468,-91.171873 43.03076,-91.171365 43.028366,-91.170923 43.026052,-91.170718 43.025414,-91.170182 43.023768,-91.169572 43.022153,-91.168722 43.02023,-91.168171 43.019206,-91.167886 43.018679,-91.166997 43.0168,-91.166796 43.016289,-91.166781 43.016251,-91.166726 43.01611,-91.16667 43.01597,-91.166007 43.014286,-91.165202 43.012156,-91.165039 43.011723,-91.164456 43.009988,-91.163246 43.006478,-91.163192 43.006334,-91.162155 43.003561,-91.161118 43.000788,-91.159364 42.996674,-91.158283 42.993675,-91.15749 42.991475,-91.156812 42.98817,-91.156743 42.98783,-91.1568 42.985939,-91.156803 42.985843,-91.156805 42.985775,-91.156806 42.985755,-91.156807 42.985712,-91.156818 42.985346,-91.156829 42.984975,-91.156869 42.983657,-91.156875 42.98282,-91.156892 42.980896,-91.156893 42.980815,-91.156562 42.978226,-91.155519 42.975774,-91.155248 42.975456,-91.153416 42.973303,-91.150906 42.970514,-91.149885 42.969036,-91.149303 42.968192,-91.149122 42.967909,-91.148001 42.966155,-91.147122 42.964454,-91.14655 42.963345,-91.146395 42.962696,-91.146198 42.961871,-91.146003 42.961053,-91.145935 42.96077,-91.14543 42.958211,-91.145488 42.957299,-91.145534 42.956601,-91.14554 42.95651,-91.146528 42.953519,-91.147822 42.949961,-91.14909 42.946554,-91.149555 42.944499,-91.149701 42.943855,-91.14988 42.941955,-91.149784 42.940244,-91.148448 42.937162,-91.147955 42.936134,-91.146939 42.934015,-91.145743 42.930957,-91.145517 42.930378,-91.145165 42.929271,-91.144315 42.926592,-91.144305 42.926517,-91.14425 42.926126,-91.144196 42.925736,-91.144136 42.925301,-91.144075 42.924863,-91.1438 42.922877,-91.143878 42.920646,-91.144287 42.919265,-91.144627 42.918117,-91.144656 42.918043,-91.144755 42.917792,-91.144855 42.917538,-91.145308 42.916388,-91.145761 42.915239,-91.145868 42.914967,-91.145933 42.914421,-91.146182 42.912338,-91.146181 42.911935,-91.146203 42.909868,-91.145615 42.908006,-91.144794 42.905997,-91.143491 42.904698,-91.142221 42.904484,-91.140951 42.904271,-91.140524 42.904199,-91.139427 42.904015,-91.138308 42.903827,-91.138011 42.903777,-91.137699 42.90365,-91.137386 42.903523,-91.132928 42.901713,-91.132802 42.901662,-91.132682 42.901613,-91.132563 42.901565,-91.132281 42.90145,-91.131436 42.901107,-91.131155 42.900993,-91.130937 42.9009,-91.130368 42.900658,-91.130281 42.900631,-91.130055 42.900562,-91.129069 42.900259,-91.126114 42.899352,-91.125129 42.89905,-91.123156 42.898277,-91.120369 42.897187,-91.1184 42.896288,-91.118218 42.896205,-91.118035 42.896122,-91.117741 42.895988,-91.117628 42.895936,-91.117521 42.895887,-91.117411 42.895837,-91.117317 42.895779,-91.117305 42.895772,-91.117186 42.895699,-91.11707 42.895628,-91.116816 42.895472,-91.116164 42.895072,-91.115512 42.894672,-91.114871 42.893939,-91.11462 42.893652,-91.114531 42.893562,-91.114206 42.893231,-91.113182 42.89219,-91.11284 42.891842,-91.112158 42.891149,-91.11115 42.890435,-91.108129 42.888294,-91.107123 42.887581,-91.107111 42.887575,-91.107078 42.887557,-91.107067 42.887551,-91.105659 42.886813,-91.104051 42.885971,-91.101825 42.884033,-91.101038 42.883348,-91.100565 42.883078,-91.100471 42.882833,-91.100374 42.882581,-91.099472 42.88023,-91.09882 42.878528,-91.098238 42.875798,-91.098554 42.872588,-91.098676 42.871345,-91.098681 42.871286,-91.098796 42.870129,-91.09882 42.869881,-91.09882 42.868244,-91.09882 42.866868,-91.09882 42.865627,-91.09882 42.865492,-91.09882 42.864421,-91.097656 42.859871,-91.096768 42.858136,-91.096057 42.856746,-91.095817 42.856276,-91.095577 42.855807,-91.095329 42.85532,-91.094571 42.854431,-91.094162 42.853951,-91.09388 42.853621,-91.093591 42.853282,-91.093493 42.853167,-91.093389 42.853045,-91.092848 42.852411,-91.092307 42.851777,-91.091837 42.851225,-91.091613 42.85052,-91.091555 42.85034,-91.091402 42.84986,-91.091586 42.848664,-91.091885 42.847566,-91.091887 42.847558,-91.092183 42.846475,-91.092628 42.844844,-91.092792 42.844242,-91.092985 42.843536,-91.093094 42.843137,-91.093939 42.840042,-91.093939 42.840039,-91.094511 42.837571,-91.094942 42.835708,-91.095114 42.834966,-91.094855 42.833944,-91.094718 42.833404,-91.09463 42.833059,-91.094542 42.832711,-91.094383 42.832086,-91.094224 42.83146,-91.094085 42.830911,-91.09406 42.830813,-91.093934 42.830754,-91.091064 42.829411,-91.091023 42.829403,-91.090807 42.829362,-91.090159 42.829241,-91.090136 42.829237,-91.089942 42.829263,\ -91.08958 42.829314,-91.089219 42.829362,-91.088818 42.829417,-91.088752 42.829425,-91.087377 42.829614,-91.085718 42.829908,-91.085189 42.829928,-91.084158 42.829969,-91.08399 42.82997,-91.083466 42.829973,-91.08316 42.829975,-91.082947 42.829976,-91.082827 42.829977,-91.08277 42.829977,-91.082525 42.829888,-91.082205 42.829772,-91.082032 42.829602,-91.082009 42.82958,-91.081706 42.829283,-91.081619 42.829236,-91.081357 42.829093,-91.081352 42.829091,-91.081056 42.828931,-91.08077 42.828776,-91.08057 42.828668,-91.080549 42.828657,-91.080309 42.828527,-91.07998 42.828357,-91.078993 42.827847,-91.078665 42.827678,-91.078678 42.826563,-91.078757 42.826184,-91.078959 42.825222,-91.078969 42.825156,-91.07932 42.822977,-91.079314 42.820309,-91.079155 42.817534,-91.079153 42.817497,-91.078894 42.814996,-91.0787 42.813115,-91.078605 42.811441,-91.078587 42.811132,-91.078586 42.811109,-91.078569 42.809626,-91.078377 42.808668,-91.078233 42.807976,-91.078097 42.806526,-91.077643 42.803798,-91.076742 42.800525,-91.07656 42.799723,-91.076171 42.798007,-91.075616 42.795965,-91.075481 42.795466,-91.075443 42.795391,-91.074636 42.793784,-91.074367 42.793248,-91.074337 42.793187,-91.074219 42.792698,-91.073947 42.791562,-91.073867 42.791024,-91.073785 42.79046,-91.07327 42.789191,-91.072447 42.787732,-91.072159 42.786849,-91.072008 42.786382,-91.071938 42.785568,-91.071948 42.784899,-91.071972 42.784455,-91.071911 42.784085,-91.071553 42.783588,-91.071138 42.783004,-91.07083 42.782225,-91.070864 42.781168,-91.07091 42.780096,-91.070724 42.778283,-91.070614 42.777083,-91.070716 42.775502,-91.070725 42.775288,-91.070747 42.774817,-91.070303 42.773829,-91.070202 42.773341,-91.07016 42.773137,-91.069913 42.771575,-91.069879 42.77145,-91.06955 42.770224,-91.069549 42.769628,-91.069369 42.769283,-91.069282 42.769199,-91.068359 42.768309,-91.066477 42.766872,-91.065938 42.766461,-91.064571 42.765063,-91.063254 42.763947,-91.062305 42.763335,-91.061361 42.762973,-91.060676 42.762447,-91.060261 42.761847,-91.060129 42.759986,-91.060471 42.759174,-91.06062 42.75882,-91.061432 42.757974,-91.062271 42.757509,-91.062306 42.75749,-91.06312 42.757273,-91.063894 42.757282,-91.064493 42.757276,-91.064896 42.757272,-91.065265 42.757212,-91.065492 42.757081,-91.065606 42.756766,-91.065577 42.755677,-91.065574 42.755564,-91.06557 42.755396,-91.065789 42.754297,-91.065814 42.753895,-91.065783 42.753387,-91.065422 42.752133,-91.065059 42.751338,-91.064711 42.750949,-91.06468 42.750914,-91.063781 42.750568,-91.06286 42.750541,-91.062309 42.750526,-91.061324 42.750566,-91.061013 42.750578,-91.060172 42.750481,-91.060113 42.750447,-91.059314 42.749991,-91.059402 42.749991,-91.059487 42.749991,-91.059491 42.749991,-91.059835 42.749991,-91.060006 42.749991,-91.060179 42.749991,-91.059509 42.749751,-91.059333 42.749689,-91.058486 42.749387,-91.058091 42.749246,-91.057787 42.748924,-91.05766 42.748789,-91.05748 42.748598,-91.057173 42.748272,-91.056297 42.747341,-91.055867 42.746777,-91.05577 42.74665,-91.055674 42.746523,-91.055127 42.745806,-91.054967 42.745241,-91.05481 42.744686,-91.054834 42.743494,-91.054812 42.742335,-91.054798 42.741628,-91.054797 42.74152,-91.054801 42.740641,-91.054801 42.740529,-91.054467 42.739288,-91.053733 42.738238,-91.052226 42.737396,-91.051275 42.737001,-91.050203 42.736922,-91.049972 42.736905,-91.048 42.736912,-91.046953 42.737099,-91.046571 42.737167,-91.046279 42.737402,-91.046028 42.737604,-91.045625 42.737866,-91.044881 42.738349,-91.044455 42.738496,-91.044139 42.738605,-91.042199 42.738605,-91.040529 42.73853,-91.039383 42.738478,-91.037464 42.738068,-91.036556 42.737745,-91.035986 42.737542,-91.035418 42.73734,-91.03539 42.737322,-91.033389 42.736025,-91.032013 42.734484,-91.030984 42.73255,-91.030956 42.7324,-91.030724 42.731158,-91.030718 42.729684,-91.030638 42.729476,-91.030225 42.72839,-91.029692 42.726774,-91.028713 42.725614,-91.026786 42.724228,-91.024852 42.723439,-91.024821 42.723421,-91.022243 42.721968,-91.021755 42.721693,-91.021394 42.721523,-91.018793 42.720297,-91.017926 42.719889,-91.017393 42.719638,-91.017239 42.719566,-91.016949 42.719503,-91.015687 42.719229,-91.015682 42.719229,-91.015101 42.71932,-91.014085 42.719479,-91.011829 42.71997,-91.010668 42.720246,-91.010572 42.720269,-91.009577 42.720123,-91.007663 42.71939,-91.004267 42.717983,-91.001898 42.716956,-91.000128 42.716189,-90.995536 42.713704,-90.994158 42.712788,-90.992233 42.711508,-90.992096 42.711398,-90.990865 42.710407,-90.989634 42.709415,-90.988776 42.708724,-90.987497 42.7073,-90.985241 42.704787,-90.983478 42.702225,-90.98254 42.701159,-90.980578 42.698932,-90.977735 42.696816,-90.977153 42.69648,-90.976314 42.695996,-90.974237 42.695249,-90.971779 42.694834,-90.968927 42.694331,-90.967659 42.693972,-90.965048 42.693233,-90.96147 42.691587,-90.959824 42.690831,-90.956273 42.688985,-90.955617 42.688644,-90.954448 42.687963,-90.954338 42.687899,-90.952415 42.686778,-90.95034 42.685997,-90.949303 42.685607,-90.94921 42.685569,-90.949083 42.685541,-90.948999 42.685521,-90.94882 42.685481,-90.947268 42.685088,-90.945919 42.684751,-90.945521 42.684652,-90.941567 42.683844,-90.938364 42.683529,-90.937045 42.683399,-90.936927 42.683407,-90.932858 42.683709,-90.932614 42.683727,-90.932371 42.683745,-90.929881 42.684128,-90.92797 42.684534,-90.926307 42.684969,-90.925895 42.685077,-90.923634 42.6855,-90.921155 42.685406,-90.91719 42.684355,-90.916847 42.684228,-90.9134 42.682949,-90.909774 42.681179,-90.908745 42.680587,-90.906147 42.679094,-90.906019 42.679023,-90.904685 42.678286,-90.903351 42.677549,-90.903011 42.677406,-90.901991 42.676979,-90.901652 42.676837,-90.900726 42.676448,-90.900261 42.676254,-90.899073 42.67583,-90.897899 42.675411,-90.897127 42.675137,-90.896951 42.675082,-90.896548 42.674958,-90.896145 42.674833,-90.893847 42.674123,-90.892682 42.673763,-90.88743 42.67247,-90.884379 42.671835,-90.883106 42.671571,-90.881197 42.671184,-90.878237 42.670584,-90.875127 42.66994,-90.873968 42.669803,-90.872863 42.669638,-90.871255 42.669397,-90.870547 42.669282,-90.869962 42.669188,-90.867125 42.668728,-90.864527 42.668146,-90.862493 42.66769,-90.857392 42.666304,-90.852497 42.664822,-90.848727 42.664111,-90.845806 42.66348,-90.84391 42.663071,-90.840163 42.662562,-90.838867 42.662358,-90.837723 42.662179,-90.832702 42.661662,-90.828921 42.660975,-90.828174 42.660771,-90.825957 42.660166,-90.823655 42.659926,-90.821742 42.659728,-90.817679 42.65892,-90.813398 42.658177,-90.810015 42.657634,-90.808561 42.657401,-90.807193 42.65721,-90.806322 42.657088,-90.805452 42.656967,-90.803301 42.656667,-90.80054 42.656273,-90.797017 42.655772,-90.79291 42.655003,-90.788226 42.653888,-90.785914 42.653604,-90.785214 42.653518,-90.781996 42.653123,-90.780985 42.653073,-90.780662 42.653057,-90.779695 42.65301,-90.779373 42.652995,-90.778752 42.652965,-90.775977 42.652483,-90.773818 42.652108,-90.769495 42.651443,-90.765848 42.65058,-90.765018 42.650384,-90.762523 42.649709,-90.760389 42.649131,-90.759365 42.648722,-90.758268 42.648284,-90.757171 42.647846,-90.756946 42.647756,-90.750126 42.647057,-90.748941 42.646782,-90.743677 42.64556,-90.738126 42.644659,-90.73454 42.644103,-90.731132 42.643437,-90.730598 42.64331,-90.72607 42.642237,-90.720209 42.640758,-90.717821 42.639914,-90.715133 42.638904,-90.711749 42.637472,-90.709204 42.636078,-90.708692 42.635741,-90.706303 42.634169,-90.704059 42.63219,-90.702671 42.630756,-90.70183 42.629131,-90.701649 42.62878,-90.700856 42.626445,-90.700757 42.624997,-90.700095 42.622461,-90.699242 42.621336,-90.698978 42.620988,-90.697439 42.618957,-90.693999 42.614509,-90.692568 42.611496,-90.692501 42.611356,-90.692031 42.610366,-90.691061 42.607595,-90.689215 42.602318,-90.688687 42.600964,-90.687999 42.599198,-90.687743 42.59611,-90.687775 42.594606,-90.686975 42.591774,-90.686735 42.591426,-90.685487 42.589614,-90.681967 42.584955,-90.680447 42.582943,-90.680025 42.582376,-90.679375 42.581503,-90.677935 42.580031,-90.677055 42.579215,-90.675752 42.578329,-90.675289 42.578014,-90.674827 42.577699,-90.674319 42.577433,-90.673811 42.577167,-90.672727 42.576599,-90.671991 42.576033,-90.671287 42.575493,-90.666407 42.571746,-90.664143 42.570007,-90.661527 42.567999,-90.661506 42.567912,-90.661444 42.567652,-90.661424 42.567566,-90.660964 42.565632,-90.66041 42.563296,-90.659586 42.559833,-90.659395 42.559027,-90.659261 42.558464,-90.659127 42.5579,-90.657036 42.554554,-90.654127 42.5499,-90.648885 42.546323,-90.645627 42.5441,-90.645287 42.54336,-90.644267 42.54114,-90.643927 42.540401,-90.643822 42.539862,-90.64367 42.539074,-90.64351 42.538248,-90.643413 42.537746,-90.643406 42.53771,-90.64339 42.537628,-90.643342 42.537382,-90.643327 42.537301,-90.643109 42.536528,-90.642457 42.534209,-90.64224 42.533436,-90.641797 42.531862,-90.640627 42.527701,-90.640395 42.527167,-90.639746 42.525668,-90.639014 42.52398,-90.63682 42.518917,-90.636727 42.518702,-90.636785 42.517099,-90.636792 42.516891,-90.636815 42.516267,-90.636823 42.51606,-90.636825 42.515992,-90.636832 42.515791,-90.636835 42.515724,-90.636836 42.515692,-90.636839 42.515595,-90.636841 42.515564,-90.636842 42.515539,-90.636845 42.515468,-90.636845 42.51546,-90.636852 42.515258,-90.636856 42.515151,-90.63686 42.515048,-90.63686 42.515029,-90.636862 42.514975,-90.636863 42.514958,-90.636864 42.514913,-90.636869 42.514777,-90.636871 42.514733,-90.636872 42.514706,-90.636874 42.514627,-90.636876 42.514601,-90.636877 42.514571,-90.636879 42.514483,-90.636881 42.514454,-90.636882 42.514423,-90.636885 42.514329,-90.636887 42.514299,-90.636889 42.51424,-90.636895 42.514063,-90.636898 42.514005,-90.636927 42.513202,-90.63732 42.512719,-90.640025 42.509406,-90.640927 42.508302,-90.641273 42.507843,-90.642312 42.506465,-90.642659 42.506007,-90.643854 42.504422,-90.647439 42.499668,-90.648635 42.498084,-90.650092 42.496808,-90.654466 42.492982,-90.655924 42.491708,-90.656044 42.491207,-90.656406 42.489703,-90.656527 42.489203,-90.656376 42.484997,-90.656327 42.483603,-90.654027 42.478503,-90.649848 42.474725,-90.646727 42.471904,-90.645586 42.471184,-90.642166 42.469024,-90.641027 42.468304,-90.630376 42.462308,-90.624328 42.458904,-90.606328 42.451505,-90.604016 42.450805,-90.597488 42.449477,-90.596344 42.449156,-90.590416 42.447493,-90.584736 42.445365,-90.582128 42.444437,-90.580444 42.444064,-90.575104 42.442885,-90.570736 42.441701,-90.5696 42.441205,-90.567968 42.440389,-90.56761 42.440172,-90.565248 42.438742,-90.564036 42.437506,-90.564059 42.437404,-90.563821 42.43715,-90.562896 42.436161,-90.562588 42.435832,-90.561841 42.435034,-90.561048 42.433881,-90.560439 42.432897,-90.56017 42.43224,-90.560027 42.431889,-90.559451 42.430695,-90.558985 42.429445,-90.558801 42.428517,-90.558542 42.426912,-90.558326 42.425404,-90.558252 42.423718,-90.558298 42.422024,-90.558168 42.420984,-90.557876 42.420097,-90.557667 42.41956,-90.55755 42.419258,-90.55667 42.418114,-90.556149 42.417283,-90.555464 42.416614,-90.555018 42.416138,-90.554974 42.416115,-90.554845 42.416047,-90.554802 42.416025,-90.55281 42.414985,-90.549465 42.413665,-90.548068 42.413115,-90.541954 42.411374,-90.535863 42.409205,-90.532824 42.408191,-90.527282 42.406342,-90.525401 42.40568,-90.522725 42.404801,-90.522232 42.404621,-90.520094 42.403842,-90.517516 42.403019,-90.513504 42.401293,-90.510264 42.400155,-90.507269 42.398966,-90.506829 42.398792,-90.505057 42.397904,-90.502894 42.396984,-90.502419 42.396751,-90.50196 42.396508,-90.500586 42.395781,-90.500128 42.395539,-90.49912 42.394785,-90.497785 42.393822,-90.496809 42.392949,-90.496157 42.392689,-90.495766 42.392406,-90.4952 42.391824,-90.495191 42.391815,-90.494498 42.391015,-90.493642 42.389996,-90.492514 42.388985,-90.491332 42.387894,-90.490334 42.387093,-90.489064 42.386388,-90.488217 42.385814,-90.487154 42.385141,-90.486404 42.384906,-90.485698 42.384662,-90.484621 42.38453,-90.482934 42.384623,-90.481475 42.384684,-90.480148 42.384616,-90.479174 42.384416,-90.479072 42.384396,-90.477941 42.384151,-90.477279 42.383794,-90.475814 42.382839,-90.474891 42.38228,-90.474121 42.381729,-90.473798 42.381458,-90.472446 42.380325,-90.472007 42.379957,-90.471085 42.379116,-90.470273 42.378355,-90.469007 42.376666,-90.468869 42.376464,-90.467875 42.375009,-90.46785 42.374983,-90.467775 42.374906,-90.46775 42.374881,-90.46753 42.374438,-90.466465 42.372475,-90.465879 42.371147,-90.465476 42.370546,-90.464788 42.369452,-90.464053 42.36859,-90.462619 42.367253,-90.461818 42.366688,-90.46103 42.366133,-90.458808 42.364507,-90.456298 42.362548,-90.454646 42.360652,-90.452724 42.359303,-90.450836 42.358527,-90.448685 42.357886,-90.44632 42.357041,-90.445167 42.356441,-90.443874 42.355218,-90.44248 42.353511,-90.441401 42.351774,-90.440264 42.349683,-90.438951 42.34771,-90.438841 42.347585,-90.437726 42.346319,-90.435649 42.343887,-90.433949 42.341701,-90.432562 42.339622,-90.432494 42.33953,-90.432475 42.339504,-90.43242 42.339429,-90.432402 42.339404,-90.431832 42.338623,-90.430546 42.33686,-90.430004 42.336395,-90.429272 42.335766,-90.427989 42.334665,-90.427164 42.334021,-90.425363 42.332615,-90.422758 42.331292,-90.42135 42.330472,-90.420303 42.329586,-90.419027 42.328505,-90.418398 42.327648,-90.416535 42.325109,-90.41616 42.3236,-90.415937 42.322699,-90.4162 42.321314,-90.416626 42.320576,-90.417125 42.319943,-90.417974 42.319234,-90.419017 42.318574,-90.420075 42.317681,-90.420753 42.3168,-90.421047 42.316109,-90.421182 42.315255,-90.420861 42.313759,-90.420303 42.311703,-90.4203 42.31169,-90.419425 42.310189,-90.419008 42.309217,-90.418915 42.308328,-90.419354 42.307429,-90.419878 42.306603,-90.420454 42.305374,-90.420608 42.304976,-90.420954 42.304088,-90.421676 42.302506,-90.42216 42.300937,-90.422675 42.298804,-90.423224 42.297156,-90.423231 42.297138,-90.423744 42.295975,-90.424257 42.294576,-90.42427 42.294326,-90.424312 42.293575,-90.424326 42.293326,-90.425482 42.292298,-90.42556 42.292211,-90.426909 42.290719,-90.42826 42.288064,-90.428426 42.28774,-90.429069 42.286611,-90.429332 42.286147,-90.430124 42.284757,-90.430218 42.284593,-90.430494 42.284388,-90.430735 42.284211,-90.431039 42.282452,-90.431027 42.281399,-90.431012 42.279965,-90.430884 42.27823,-90.429313 42.275588,-90.428204 42.273405,-90.427825 42.272798,-90.426846 42.271228,-90.426156 42.270143,-90.426056 42.269968,-90.425757 42.269443,-90.425658 42.269269,-90.425648 42.269253,-90.425621 42.269205,-90.425612 42.269189,-90.424884 42.267912,-90.424708 42.267566,-90.424098 42.266364,-90.423242 42.264411,-90.422889 42.262883,-90.422836 42.26236,-90.422732 42.261316,-90.422439 42.260563,-90.422181 42.259899,-90.421842 42.259175,-90.421659 42.258781,-90.42098 42.257282,-90.420191 42.255846,-90.419757 42.255155,-90.419326 42.254467,-90.418877 42.253932,-90.418274 42.253215,-90.418257 42.253202,-90.416315 42.251679,-90.415974 42.25146,-90.415169 42.250942,-90.414868 42.250748,-90.414481 42.2505,-90.413951 42.250194,-90.413642 42.250016,-90.412441 42.249098,-90.411397 42.248383,-90.410471 42.247749,-90.408038 42.245681,-90.405023 42.24303,-90.403648 42.241821,-90.402926 42.241211,-90.401872 42.240321,-90.400653 42.239293,-90.399097 42.237283,-90.398253 42.236193,-90.397314 42.23498,-90.395883 42.233133,-90.395276 42.230953,-90.394865 42.229476,-90.394749 42.229059,-90.394654 42.228947,-90.393526 42.227626,-90.393151 42.227186,-90.391177 42.225531,-90.391108 42.225473,-90.386781 42.222967,-90.384655 42.221408,-90.382579 42.219886,-90.382251 42.219646,-90.381094 42.218863,-90.377656 42.216535,-90.376618 42.215827,-90.375129 42.214811,-90.374714 42.214587,-90.372097 42.21354,-90.370925 42.213072,-90.365138 42.210526,-90.363212 42.209299,-90.360626 42.207653,-90.360435 42.207538,-90.356964 42.205445,-90.35177 42.204667,-90.349162 42.204277,-90.338169 42.203321,-90.332177 42.202232,-90.328273 42.201047,-90.324927 42.198727,-90.319838 42.195199,-90.317774 42.193789,-90.317202 42.193572,-90.315141 42.192792,-90.314465 42.192537,-90.308776 42.191032,-90.306647 42.19047,-90.306531 42.190439,-90.304516 42.189725,-90.298442 42.187576,-90.298151 42.187424,-90.296151 42.18638,-90.293905 42.185208,-90.285429 42.180612,-90.282173 42.178846,-90.276623 42.176996,-90.26908 42.1745,-90.262345 42.173451,-90.255456 42.171821,-90.250338 42.171482,-90.250129 42.171469,-90.249216 42.171056,-90.248007 42.170672,-90.244913 42.169362,-90.242132 42.168279,-90.239017 42.167048,-90.234919 42.165431,-90.231127 42.163425,-90.22881 42.162281,-90.224244 42.160028,-90.216107 42.15673,-90.213136 42.15505,-90.211328 42.15401,-90.209479 42.15268,-90.20826 42.15099,-90.207421 42.149109,-90.206369 42.1455,-90.205703 42.141267,-90.20536 42.139079,-90.204614 42.137722,-90.204145 42.136995,-90.203071 42.134733,-90.201404 42.130937,-90.200128 42.130066,-90.197342 42.128163,-90.196171 42.127702,-90.195704 42.127519,-90.194717 42.127185,-90.193865 42.126896,-90.192472 42.126425,-90.191302 42.126058,-90.190467 42.125796,-90.190452 42.125779,-90.187474 42.125423,-90.186456 42.12534,-90.18471 42.125198,-90.174402 42.125198,-90.17097 42.125198,-90.17041 42.125021,-90.169784 42.124518,-90.169641 42.124397,-90.168853 42.123733,-90.167533 42.122475,-90.167459 42.122387,-90.166821 42.121631,-90.166632 42.121406,-90.166104 42.12078,-90.166067 42.120731,-90.165893 42.120496,-90.165444 42.119893,-90.164327 42.11867,-90.163992 42.118303,-90.162895 42.116718,-90.162225 42.11488,-90.161884 42.11378,-90.161622 42.112109,-90.161602 42.111979,-90.161352 42.11017,-90.161326 42.109721,-90.161268 42.10867,-90.161266 42.108647,-90.16116 42.106372,-90.16114 42.105424,-90.16112 42.104404,-90.161125 42.10435,-90.16113 42.104298,-90.161311 42.102674,-90.161325 42.102375,-90.161412 42.100628,-90.161504 42.098912,-90.161779 42.096836,-90.161874 42.096456,-90.162088 42.095607,-90.162326 42.094524,-90.162401 42.094185,-90.162404 42.094126,-90.162487 42.092913,-90.162515 42.092509,-90.162516 42.09248,-90.162521 42.092394,-90.162524 42.092366,-90.162559 42.091838,-90.162615 42.090995,-90.162782 42.090273,-90.162902 42.089758,-90.163034 42.089222,-90.163188 42.088601,-90.163405 42.087613,-90.163406 42.087609,-90.163581 42.087086,-90.163718 42.086674,-90.16414 42.085664,-90.164482 42.08487,-90.164499 42.084826,-90.164814 42.084036,-90.16532 42.082689,-90.16573 42.081751,-90.166512 42.080568,-90.166925 42.079477,-90.167556 42.078316,-90.16759 42.078221,-90.168074 42.076888,-90.168327 42.075898,-90.168358 42.075779,-90.168212 42.074657,-90.168098 42.073524,-90.168054 42.073083,-90.167734 42.071484,-90.16729 42.069705,-90.166874 42.068579,-90.166482 42.067333,-90.166345 42.066583,-90.166204 42.065806,-90.165897 42.064234,-90.165857 42.064028,-90.165668 42.063158,-90.165555 42.062638,-90.165526 42.061518,-90.165765 42.060047,-90.165808 42.059897,-90.166116 42.058842,-90.166251 42.058005,-90.166367 42.057298,-90.166808 42.055933,-90.166825 42.055544,-90.166853 42.05491,-90.166705 42.054758,-90.166495 42.054543,-90.165889 42.05277,-90.165756 42.052368,-90.165294 42.050973,-90.164884 42.048171,-90.164537 42.045007,-90.164528 42.044701,-90.164483 42.043145,-90.164485 42.042105,-90.164337 42.041515,-90.163983 42.040954,-90.163446 42.040407,-90.162807 42.040002,-90.162681 42.039922,-90.161629 42.039248,-90.160073 42.03851,-90.158829 42.037769,-90.156663 42.035412,-90.156169 42.035051,-90.155529 42.034584,-90.154384 42.033305,-90.154221 42.033073,-90.153956 42.032695,-90.153334 42.032066,-90.152488 42.031394,-90.152288 42.031227,-90.151579 42.030633,-90.151279 42.030073,-90.150916 42.02944,-90.150291 42.028046,-90.149733 42.026564,-90.149389 42.025141,-90.149188 42.024058,-90.149182 42.023965,-90.149112 42.022679,-90.148644 42.021488,-90.148603 42.021377,-90.148096 42.020014,-90.147194 42.018479,-90.146639 42.017905,-90.146026 42.017271,-90.145414 42.016747,-90.144683 42.016198,-90.143776 42.014881,-90.143017 42.013227,-90.142306 42.011839,-90.141666 42.010187,-90.141167 42.008931,-90.140966 42.007856,-90.14092 42.007559,-90.140639 42.005733,-90.14027 42.004431,-90.140125 42.003613,-90.140061 42.003252,-90.14012 42.002898,-90.140286 42.001916,-90.140404 42.001015,-90.14044 42.000745,-90.140536 42.000026,-90.140613 41.995999,-90.141249 41.995127,-90.144241 41.991031,-90.146033 41.988139,-90.146399 41.985375,-90.146225 41.981329,-90.146231 41.98132,-90.148599 41.978269,-90.149599 41.977528,-90.150691 41.976718,-90.152107 41.97567,-90.153828 41.974121,-90.153834 41.974116,-90.154381 41.97288,-90.155064 41.971337,-90.156315 41.969113,-90.157597 41.967988,-90.158592 41.967117,-90.160458 41.964016,-90.162141 41.961293,-90.164135 41.956178,-90.164593 41.952001,-90.164939 41.948861,-90.164193 41.946178,-90.163847 41.944934,-90.162905 41.94373,-90.160648 41.940845,-90.156902 41.938181,-90.156785 41.938024,-90.155104 41.935762,-90.154947 41.935551,-90.15431 41.934527,-90.154195 41.934425,-90.152659 41.933058,-90.1516 41.931002,-90.151689 41.930512,-90.15198 41.928917,-90.151988 41.928868,-90.152014 41.928723,-90.152024 41.928675,-90.152138 41.928052,-90.152452 41.924847,-90.153362 41.915593,-90.153374 41.913334,-90.153382 41.912087,-90.153478 41.909483,-90.153507 41.908692,-90.153584 41.906614,-90.153692 41.906342,-90.153986 41.905608,-90.154328 41.90475,-90.155355 41.902179,-90.155698 41.901322,-90.156273 41.899884,-90.156843 41.898459,-90.156871 41.89839,-90.157019 41.898019,-90.157459 41.897239,-90.158321 41.895714,-90.160977 41.891013,-90.163633 41.886312,-90.164029 41.885609,-90.165065 41.883777,-90.166329 41.881799,-90.166629 41.881329,-90.166778 41.881094,-90.166929 41.880859,-90.167865 41.879395,-90.168152 41.879,-90.168645 41.878325,-90.169096 41.877706,-90.169287 41.877446,-90.170041 41.876439,-90.170258 41.875757,-90.170491 41.875028,-90.170566 41.874266,-90.170569 41.874227,-90.17064 41.873505,-90.170763 41.872265,-90.170806 41.871826,-90.170885 41.871025,-90.170903 41.870846,-90.170909 41.870784,-90.170962 41.87031,-90.170984 41.870133,-90.171165 41.869598,-90.17119 41.869527,-90.171577 41.868677,-90.17186 41.868053,-90.171901 41.867964,-90.172101 41.867543,-90.172133 41.867476,-90.172229 41.867275,-90.172261 41.867208,-90.17248 41.866747,-90.172765 41.866149,-90.173019 41.865321,-90.17317 41.864834,-90.173213 41.864693,-90.173237 41.86461,-90.173257 41.864438,-90.173284 41.864024,-90.173329 41.863671,-90.17331 41.863445,-90.173301 41.863341,-90.173225 41.862465,-90.173073 41.861122,-90.173048 41.8609,-90.173046 41.860884,-90.17287 41.858409,-90.173009 41.857393,-90.173918 41.855575,-90.174701 41.854225,-90.174702 41.854225,-90.175057 41.853615,-90.17684 41.85099,-90.178942 41.847898,-90.179184 41.847542,-90.179911 41.846476,-90.180049 41.846276,-90.180169 41.846133,-90.180565 41.845654,-90.181401 41.844647,-90.181583 41.844124,-90.181788 41.843538,-90.181873 41.843293,-90.181901 41.843216,-90.181984 41.842526,-90.182016 41.842269,-90.182028 41.842171,-90.182188 41.841355,-90.182272 41.840932,-90.182593 41.839308,-90.182608 41.839235,-90.18288 41.83867,-90.182955 41.838517,-90.183251 41.837906,-90.183275 41.83783,-90.183283 41.837801,-90.183367 41.83753,-90.183643 41.836631,-90.183736 41.836332,-90.183765 41.83624,-90.18387 41.83517,-90.183883 41.834907,-90.183884 41.834901,-90.183973 41.83307,-90.183693 41.83161,-90.183649 41.831381,-90.183405 41.830679,-90.183187 41.830047,-90.18281 41.829381,-90.182672 41.829138,-90.182535 41.828895,-90.182375 41.828613,-90.182215 41.82833,-90.181889 41.827755,-90.18188 41.827566,-90.181813 41.826077,-90.181904 41.824605,-90.18172 41.822599,-90.181619 41.821603,-90.181599 41.821414,-90.181505 41.82048,-90.181392 41.819368,-90.18122 41.81768,-90.180707 41.812617,-90.180643 41.811979,-90.180772 41.810932,-90.180855 41.810256,-90.180881 41.810019,-90.180954 41.809354,-90.181141 41.808935,-90.181973 41.80707,-90.182866 41.806487,-90.185046 41.805068,-90.187969 41.803163,-90.190437 41.802408,-90.191316 41.802139,-90.192194 41.801871,-90.196165 41.800656,-90.196955 41.800491,-90.202003 41.799439,-90.203131 41.799204,-90.203588 41.799109,-90.206465 41.798294,-90.207573 41.79798,-90.207574 41.79798,-90.207962 41.79787,-90.208115 41.797827,-90.208474 41.797726,-90.208656 41.797673,-90.209087 41.79755,-90.209128 41.797538,-90.209517 41.797426,-90.209659 41.797385,-90.210087 41.797264,-90.21023 41.797224,-90.216889 41.795335,-90.217011 41.795284,-90.219662 41.794199,-90.220354 41.793916,-90.221046 41.793632,-90.221203 41.793568,-90.22136 41.793503,-90.22176 41.793339,-90.222161 41.793175,-90.222263 41.793133,-90.231239 41.788596,-90.236084 41.786146,-90.23681 41.78578,-90.24238 41.782964,-90.243235 41.782531,-90.2458 41.781234,-90.246656 41.780802,-90.246926 41.780666,-90.247197 41.780529,-90.247242 41.780506,-90.248631 41.779805,-90.249014 41.77965,-90.249623 41.779404,-90.249739 41.779357,-90.250087 41.779216,-90.250128 41.7792,-90.25016 41.779185,-90.250202 41.779166,-90.251885 41.778391,-90.256938 41.776069,-90.258622 41.775295,-90.258862 41.775053,-90.259503 41.77464,-90.259846 41.774419,-90.260614 41.773848,-90.260966 41.773588,-90.261623 41.773101,-90.263286 41.772112,-90.264696 41.771475,-90.265838 41.771186,-90.265854 41.771182,-90.267295 41.770867,-90.268279 41.770653,-90.268471 41.770611,-90.268659 41.770569,-90.269694 41.770286,-90.269758 41.770258,-90.271888 41.769561,-90.278478 41.767408,-90.278633 41.767358,-90.280418 41.766162,-90.280451 41.766139,-90.280551 41.766073,-90.280585 41.766051,-90.280596 41.766043,-90.280631 41.766019,-90.280643 41.766012,-90.280893 41.765844,-90.281643 41.765341,-90.281894 41.765174,-90.28191 41.765167,-90.282098 41.765077,-90.282287 41.764987,-90.282329 41.764966,-90.283552 41.764386,-90.283597 41.764302,-90.28383 41.763879,-90.283941 41.76368,-90.284551 41.763082,-90.284845 41.76281,-90.285356 41.762341,-90.286353 41.761562,-90.287697 41.760545,-90.288402 41.760157,-90.289206 41.759715,-90.289732 41.759507,-90.292321 41.757584,-90.294383 41.756054,-90.30016 41.75191,-90.302415 41.750294,-90.302598 41.750162,-90.302782 41.750031,-90.303686 41.749243,-90.304525 41.74861,-90.305275 41.747879,-90.30608 41.747131,-90.30668 41.746595,-90.307244 41.746092,-90.308015 41.745304,-90.308946 41.744403,-90.309074 41.744281,-90.309973 41.74342,-90.310651 41.7426,-90.310878 41.742325,-90.31157 41.741359,-90.312252 41.740402,-90.312609 41.739939,-90.313658 41.737905,-90.31447 41.736485,-90.314647 41.736177,-90.315002 41.735626,-90.315281 41.734994,-90.315549 41.734426,-90.315653 41.734039,-90.315771 41.7336,-90.315907 41.732281,-90.316403 41.729511,-90.316562 41.728928,-90.31613 41.728769,-90.316262 41.728235,-90.316396 41.727701,-90.316581 41.726961,-90.316625 41.726809,-90.317048 41.725355,-90.317243 41.724536,-90.317426 41.723694,-90.317668 41.722689,-90.317538 41.722063,-90.317552 41.721279,-90.317555 41.721079,-90.317566 41.72089,-90.317609 41.720223,-90.317542 41.719563,-90.317474 41.718878,-90.317421 41.718333,-90.316997 41.717294,-90.316543 41.716038,-90.316455 41.715819,-90.316106 41.71495,-90.315491 41.713697,-90.315187 41.713032,-90.314896 41.712396,-90.314278 41.711353,-90.313769 41.710339,-90.31332 41.709494,-90.313166 41.708804,-90.313013 41.708087,-90.312893 41.707528,-90.312817 41.706887,-90.312722 41.70608,-90.312667 41.704581,-90.312783 41.70366,-90.312774 41.702851,-90.31277 41.702426,-90.312861 41.701417,-90.312924 41.700496,-90.312933 41.700431,-90.313052 41.699631,-90.31327 41.698836,-90.313435 41.698082,-90.313824 41.69701,-90.313986 41.696525,-90.314191 41.695913,-90.314687 41.69483,-90.315351 41.693921,-90.315981 41.692989,-90.31639 41.69257,-90.316632 41.692322,-90.317315 41.69167,-90.318346 41.690835,-90.319309 41.690218,-90.319924 41.689721,-90.32037 41.689461,-90.321005 41.689093,-90.322258 41.688486,-90.323234 41.687933,-90.323369 41.687852,-90.323776 41.687611,-90.323912 41.687532,-90.324973 41.686861,-90.325896 41.686292,-90.326957 41.68564,-90.328071 41.685129,-90.328971 41.684717,-90.330222 41.683954,-90.330688 41.68361,-90.331443 41.683054,-90.331875 41.682675,-90.332481 41.682146,-90.333274 41.681322,-90.33353 41.681026,-90.333621 41.68092,-90.333625 41.680917,-90.333857 41.680573,-90.333936 41.680458,-90.333991 41.680376,-90.334525 41.679559,-90.334721 41.678595,-90.334831 41.678056,-90.33509 41.676279,-90.335349 41.674577,-90.335475 41.67325,-90.335502 41.672967,-90.335545 41.672481,-90.335729 41.670432,-90.335915 41.669285,-90.336429 41.666132,-90.336482 41.665847,-90.336696 41.664706,-90.336729 41.664532,-90.337074 41.663492,-90.337185 41.663031,-90.337287 41.662614,-90.337631 41.661494,-90.337653 41.661424,-90.33802 41.660539,-90.338283 41.659963,-90.338508 41.659471,-90.338844 41.658632,-90.339085 41.658163,-90.339332 41.657686,-90.339759 41.656862,-90.339859 41.656599,-90.339933 41.656405,-90.340154 41.655825,-90.340229 41.655632,-90.340404 41.655184,-90.34058 41.654736,-90.341193 41.653169,-90.341743 41.652101,-90.342231 41.650964,-90.342506 41.650056,-90.342872 41.649225,-90.343162 41.648141,-90.343246 41.647797,-90.343452 41.646959,-90.343458 41.646828,-90.343513 41.645692,-90.343498 41.644533,-90.343329 41.643232,-90.34333 41.641075,-90.34333 41.640855,-90.342811 41.638071,-90.342506 41.634317,-90.342277 41.630907,-90.342128 41.629247,-90.342059 41.628472,-90.34199 41.627698,-90.341971 41.627489,-90.342016 41.625124,-90.341999 41.624757,-90.34194 41.623476,-90.341823 41.622677,-90.34165 41.621484,-90.341342 41.619771,-90.341284 41.619447,-90.341131 41.617883,-90.340918 41.616472,-90.340989 41.615096,-90.341008 41.614714,-90.341028 41.614332,-90.341007 41.614115,-90.340986 41.613898,-90.34098 41.61384,-90.340975 41.613782,-90.340971 41.613745,-90.340942 41.613438,-90.340908 41.613095,-90.340826 41.612247,-90.3408 41.611985,-90.340744 41.611399,-90.340728 41.611232,-90.340564 41.609526,-90.340316 41.606936,-90.340078 41.604487,-90.340023 41.60391,-90.339845 41.602038,-90.339827 41.601842,-90.339809 41.601641,-90.339753 41.601058,-90.339723 41.600739,-90.339642 41.599835,-90.339528 41.598633,-90.339652 41.598134,-90.339891 41.597181,-90.340127 41.596236,-90.340835 41.593402,-90.341072 41.592458,-90.341228 41.591835,-90.341383 41.591212,-90.341528 41.590633,-90.342392 41.589208,-90.343228 41.587833,-90.347056 41.586337,-90.351642 41.584544,-90.351928 41.584433,-90.352184 41.584334,-90.354952 41.583267,-90.355189 41.583172,-90.3559 41.58289,-90.356138 41.582797,-90.357647 41.582198,-90.358548 41.581842,-90.360958 41.580888,-90.361966 41.58049,-90.362176 41.580406,-90.362973 41.580091,-90.363329 41.57995,-90.363686 41.579808,-90.364128 41.579633,-90.364566 41.579557,-90.36467 41.579539,-90.365298 41.579428,-90.370998 41.578435,-90.37238 41.578194,-90.372554 41.578163,-90.373762 41.577953,-90.376271 41.577516,-90.377223 41.577349,-90.37878 41.577078,-90.37942 41.576966,-90.380059 41.576855,-90.381329 41.576633,-90.382244 41.57639,-90.382648 41.576283,-90.38367 41.576013,-90.385096 41.575635,-90.387411 41.575021,-90.389726 41.574407,-90.393828 41.57332,-90.394109 41.573245,-90.39793 41.572233,-90.39949 41.571453,-90.399829 41.571283,-90.40417 41.569113,-90.40573 41.568333,-90.407186 41.567716,-90.411554 41.565866,-90.412825 41.565329,-90.412984 41.565206,-90.413546 41.564742,-90.41453 41.563933,-90.415252 41.563377,-90.41583 41.562933,-90.415871 41.562881,-90.415997 41.562727,-90.416039 41.562676,-90.416401 41.56223,-90.416763 41.561783,-90.416871 41.561649,-90.41694 41.561565,-90.417116 41.561347,-90.41883 41.559233,-90.419309 41.558527,-90.420053 41.557435,-90.420641 41.556568,-90.421075 41.555932,-90.422097 41.554429,-90.42223 41.554233,-90.422506 41.554076,-90.423418 41.553561,-90.42364 41.553435,-90.424307 41.553058,-90.42453 41.552933,-90.42457 41.552912,-90.42469 41.552849,-90.424731 41.552829,-90.424814 41.552785,-90.425063 41.552656,-90.425147 41.552613,-90.426023 41.552158,-90.426094 41.552122,-90.42704 41.551632,-90.427231 41.551533,-90.428738 41.550984,-90.429667 41.550647,-90.430582 41.550314,-90.432731 41.549533,-90.433192 41.549095,-90.4339 41.548426,-90.43425 41.548093,-90.435301 41.547097,-90.435652 41.546765,-90.436679 41.545791,-90.436814 41.545664,-90.437975 41.544564,-90.438431 41.544133,-90.439464 41.542898,-90.439608 41.542724,-90.43999 41.542268,-90.440517 41.541638,-90.441119 41.540917,-90.442928 41.538753,-90.443531 41.538033,-90.443871 41.537653,-90.444891 41.536513,-90.445231 41.536133,-90.445438 41.535968,-90.445645 41.535802,-90.446003 41.535514,-90.447731 41.534133,-90.44833 41.533669,-90.449113 41.533064,-90.449474 41.532784,-90.450559 41.531944,-90.450921 41.531665,-90.451132 41.531501,-90.451765 41.531011,-90.451766 41.531011,-90.451978 41.530848,-90.453868 41.529385,-90.456546 41.527314,-90.459541 41.524996,-90.461113 41.52378,-90.461272 41.523656,-90.461432 41.523533,-90.464012 41.522773,-90.471752 41.520492,-90.474332 41.519733,-90.474876 41.51968,-90.475007 41.519667,-90.475421 41.519628,-90.476565 41.519518,-90.477034 41.519472,-90.47771 41.519408,-90.478068 41.519374,-90.478174 41.519363,-90.478425 41.519339,-90.47923 41.519262,-90.479569 41.519229,-90.480034 41.519185,-90.48837 41.518383,-90.489487 41.518277,-90.489933 41.518233,-90.490014 41.518231,-90.491482 41.518203,-90.495283 41.518133,-90.496043 41.518119,-90.496803 41.518105,-90.497476 41.518092,-90.498139 41.51808,-90.499475 41.518055,-90.49955 41.518053,-90.499776 41.518049,-90.499852 41.518048,-90.500307 41.518039,-90.500633 41.518033,-90.50167 41.518101,-90.502125 41.518132,-90.502426 41.518152,-90.503331 41.518212,-90.503633 41.518233,-90.505333 41.518533,-90.505478 41.518551,-90.507634 41.518833,-90.511051 41.519268,-90.512887 41.519502,-90.512909 41.519505,-90.512965 41.519512,-90.513134 41.519533,-90.513189 41.519548,-90.513971 41.519761,-90.516434 41.520433,-90.517157 41.520629,-90.525308 41.52284,-90.528234 41.523633,-90.529065 41.523858,-90.532682 41.524837,-90.532858 41.524885,-90.533035 41.524933,-90.533875 41.525073,-90.536394 41.525493,-90.537235 41.525633,-90.537974 41.525732,-90.540195 41.526032,-90.540935 41.526133,-90.541038 41.526124,-90.541141 41.526115,-90.541855 41.526052,-90.543338 41.525924,-90.544615 41.525812,-90.545535 41.525732,-90.547415 41.525471,-90.553054 41.524691,-90.554935 41.524432,-90.55521 41.52439,-90.555484 41.524348,-90.555592 41.524331,-90.556235 41.524232,-90.55659 41.524019,-90.557387 41.52354,-90.557735 41.523332,-90.557957 41.523197,-90.559574 41.522216,-90.563836 41.519632,-90.564407 41.519243,-90.565972 41.51818,-90.565981 41.518173,-90.566007 41.518155,-90.566017 41.518149,-90.566158 41.518053,-90.566223 41.518008,-90.566238 41.517998,-90.566256 41.517985,-90.566309 41.517949,-90.566328 41.517937,-90.566336 41.517932,-90.566509 41.517855,-90.567054 41.517612,-90.567236 41.517532,-90.568035 41.517285,-90.570434 41.516547,-90.571136 41.516332,-90.571238 41.516321,-90.571505 41.516291,-90.572036 41.516232,-90.572307 41.516204,-90.572575 41.516177,-90.57333 41.516096,-90.573492 41.516079,-90.575596 41.515866,-90.575936 41.515832,-90.576352 41.515787,-90.577591 41.515652,-90.57883 41.515518,-90.579683 41.515425,-90.580536 41.515332,-90.581615 41.515188,-90.582029 41.515133,-90.582767 41.514888,-90.582851 41.51486,-90.582936 41.514832,-90.583632 41.514706,-90.584327 41.514579,-90.584874 41.51448,-90.58542 41.51438,-90.586236 41.514232,-90.586599 41.514125,-90.58848 41.513578,-90.588605 41.513542,-90.58873 41.513505,-90.590079 41.513111,-90.591037 41.512832,-90.591226 41.512738,-90.591448 41.512627,-90.591669 41.512516,-90.591837 41.512432,-90.591868 41.512419,-90.593872 41.511632,-90.594426 41.511415,-90.594541 41.51137,-90.594637 41.511332,-90.595237 41.511032,-90.596115 41.510395,-90.600631 41.507122,-90.601678 41.506365,-90.601908 41.506198,-90.602137 41.506032,-90.602397 41.504892,-90.602681 41.503648,-90.603177 41.501472,-90.603225 41.501263,-90.603331 41.500798,-90.603437 41.500332,-90.603645 41.499471,-90.604237 41.497032,-90.604307 41.496905,-90.604737 41.496132,-90.604935 41.495818,-90.605529 41.494876,-90.605728 41.494563,-90.605936 41.494232,-90.605937 41.494232,-90.606217 41.494026,-90.606533 41.493797,-90.60757 41.49304,-90.608009 41.492719,-90.608606 41.492283,-90.610592 41.490832,-90.61276 41.48925,-90.61655 41.486482,-90.616913 41.486218,-90.617725 41.485625,-90.618537 41.485032,-90.618862 41.484899,-90.619186 41.484766,-90.620737 41.484132,-90.620996 41.484017,-90.621512 41.483791,-90.625968 41.481831,-90.628302 41.480803,-90.630423 41.479871,-90.63058 41.479802,-90.630738 41.479732,-90.630991 41.47959,-90.631373 41.479378,-90.631753 41.479166,-90.632008 41.479025,-90.632032 41.47901,-90.63207 41.47899,-90.632107 41.478968,-90.632133 41.478955,-90.632538 41.478732,-90.638986 41.47421,-90.640238 41.473332,-90.641991 41.471877,-90.643678 41.470477,-90.645364 41.469077,-90.650238 41.465032,-90.655839 41.462132,-90.657919 41.461832,-90.660526 41.461456,-90.664159 41.460932,-90.665213 41.46078,-90.665726 41.460706,-90.666239 41.460632,-90.666779 41.460632,-90.667048 41.460632,-90.668399 41.460632,-90.668939 41.460632,-90.670414 41.460672,-90.67148 41.4607,-90.67189 41.460711,-90.673806 41.460762,-90.675721 41.460813,-90.676439 41.460832,-90.677208 41.460604,-90.678818 41.460126,-90.678997 41.460073,-90.679321 41.459978,-90.681435 41.459352,-90.68211 41.459152,-90.682596 41.459008,-90.682786 41.458952,-90.685013 41.458292,-90.686079 41.457976,-90.68724 41.457632,-90.687826 41.457476,-90.688412 41.45732,-90.690951 41.456643,-90.698254 41.455284,-90.699667 41.45502,-90.701159 41.454743,-90.705475 41.454099,-90.706241 41.453985,-90.707007 41.45387,-90.707858 41.453743,-90.710315 41.453494,-90.711245 41.4534,-90.714802 41.453049,-90.718311 41.452767,-90.720951 41.452416,-90.723275 41.452265,-90.723325 41.452261,-90.723545 41.452248,-90.726093 41.451836,-90.727 41.451733,-90.728382 41.451577,-90.728687 41.451536,-90.730656 41.451272,-90.732639 41.450997,-90.733441 41.450931,-90.735645 41.450448,-90.737302 41.450167,-90.737446 41.450142,-90.737537 41.450127,-90.745946 41.44973,-90.749592 41.449645,-90.749867 41.449638,-90.750142 41.449632,-90.750593 41.449644,-90.75084 41.449652,-90.751538 41.449673,-90.751706 41.449678,-90.751948 41.449692,-90.7524 41.44972,-90.75435 41.44984,-90.758255 41.450098,-90.758375 41.450106,-90.76042 41.450317,-90.762079 41.450405,-90.762252 41.450424,-90.763471 41.450559,-90.76451 41.450583,-90.765484 41.450672,-90.766223 41.450704,-90.767122 41.450737,-90.768021 41.450769,-90.76922 41.450728,-90.770719 41.450745,-90.771672 41.450761,-90.772486 41.450809,-90.773417 41.450882,-90.775591 41.451067,-90.775815 41.451088,-90.777583 41.451261,-90.7783 41.451398,-90.779317 41.451608,-90.780686 41.451839,-90.781147 41.451917,-90.781608 41.451995,-90.78255 41.452132,-90.783107 41.452213,-90.784841 41.452576,-90.78535 41.452692,-90.785819 41.4528,-90.78603 41.452849,-90.786282 41.452888,-90.788203 41.453147,-90.789006 41.453244,-90.789801 41.453341,-90.790516 41.453429,-90.791447 41.453502,-90.793128 41.453631,-90.794497 41.453756,-90.795066 41.453808,-90.795283 41.45382,-90.79725 41.453928,-90.798931 41.454025,-90.800419 41.454096,-90.803319 41.454235,-90.803642 41.45425,-90.803964 41.454266,-90.805634 41.454362,-90.806769 41.454434,-90.807283 41.454466,-90.80845 41.45449,-90.8094 41.454531,-90.809574 41.454538,-90.810035 41.45457,-90.810795 41.45457,-90.810852 41.454569,-90.811319 41.454562,-90.811973 41.454594,-90.813151 41.454505,-90.814211 41.454448,-90.815087 41.454397,-90.815336 41.454383,-90.815416 41.454379,-90.81677 41.454326,-90.817682 41.454342,-90.818055 41.454349,-90.818701 41.454362,-90.819222 41.454373,-90.820689 41.454396,-90.822552 41.454396,-90.823098 41.454411,-90.823751 41.454427,-90.824678 41.454465,-90.824736 41.454467,-90.825636 41.45458,-90.827253 41.454805,-90.82744 41.454843,-90.828516 41.455063,-90.82903 41.455127,-90.830069 41.455183,-90.831215 41.455271,-90.832275 41.455375,-90.832544 41.455398,-90.833817 41.455512,-90.835359 41.455575,-90.836265 41.455596,-90.837414 41.455623,-90.839513 41.455621,-90.840755 41.455621,-90.841547 41.455564,-90.842311 41.455518,-90.843303 41.455458,-90.844749 41.455295,-90.846558 41.455141,-90.846625 41.455132,-90.847458 41.455019,-90.849427 41.454549,-90.849663 41.454515,-90.850157 41.454444,-90.851634 41.454233,-90.85226 41.454132,-90.852886 41.45403,-90.853604 41.453909,-90.853914 41.453804,-90.854942 41.45344,-90.856398 41.453108,-90.857554 41.452751,-90.858485 41.452291,-90.859502 41.451886,-90.860626 41.451393,-90.861079 41.451152,-90.861533 41.450911,-90.862712 41.450285,-90.862754 41.450266,-90.864082 41.449679,-90.865238 41.449073,-90.866501 41.448587,-90.867282 41.448215,-90.86786 41.447884,-90.868352 41.447617,-90.86924 41.447204,-90.869276 41.447176,-90.869818 41.44676,-90.870578 41.446445,-90.871352 41.445981,-90.872129 41.445582,-90.872183 41.445555,-90.87275 41.445256,-90.87352 41.444747,-90.874098 41.444448,-90.874395 41.444269,-90.875145 41.443819,-90.875902 41.443452,-90.876117 41.443349,-90.876958 41.442871,-90.877583 41.442479,-90.877812 41.442336,-90.87808 41.442178,-90.878806 41.441753,-90.878902 41.441697,-90.879778 41.441065,-90.880996 41.440468,-90.881076 41.440421,-90.881395 41.440237,-90.88284 41.439544,-90.883972 41.438946,-90.884759 41.438532,-90.88587 41.437942,-90.887617 41.437115,-90.888138 41.436831,-90.889612 41.43603,-90.890471 41.435593,-90.890676 41.435488,-90.890787 41.435432,-90.89132 41.435242,-90.891537 41.435165,-90.89179 41.435075,-90.892042 41.434985,-90.892143 41.434949,-90.893169 41.434494,-90.893974 41.434138,-90.895623 41.433366,-90.896583 41.432823,-90.897002 41.432645,-90.897959 41.432237,-90.898338 41.432076,-90.899588 41.431552,-90.899764 41.431472,-90.900294 41.431233,-90.900471 41.431154,-90.90116 41.430901,-90.90201 41.4306,-90.902667 41.430313,-90.90315 41.430212,-90.90401 41.430048,-90.905279 41.429685,-90.906804 41.429332,-90.907911 41.429082,-90.908225 41.42902,-90.90935 41.428801,-90.910185 41.428532,-90.91021 41.428524,-90.911263 41.428216,-90.912178 41.427891,-90.91321 41.4276,-90.914662 41.427108,-90.91649 41.426531,-90.917824 41.426047,-90.91829 41.425907,-90.918716 41.425778,-90.919351 41.425589,-90.919803 41.42535,-90.920321 41.425103,-90.920968 41.424679,-90.92181 41.424184,-90.922672 41.423705,-90.923415 41.423411,-90.924343 41.42286,-90.924967 41.42263,-90.925795 41.422337,-90.927041 41.422071,-90.928276 41.421772,-90.929254 41.421544,-90.930016 41.421404,-90.930691 41.421368,-90.930978 41.421396,-90.931386 41.421438,-90.932124 41.421556,-90.932817 41.421827,-90.933802 41.421882,-90.934817 41.422091,-90.936078 41.422423,-90.937061 41.422583,-90.938045 41.422767,-90.938867 41.422927,-90.939668 41.423142,-90.940706 41.42323,-90.941659 41.423341,-90.942482 41.423436,-90.943756 41.423509,-90.944922 41.423638,-90.945452 41.423715,-90.94596 41.42379,-90.946794 41.423933,-90.947682 41.424044,-90.948464 41.424057,-90.949032 41.424053,-90.949791 41.424163,-90.950282 41.42436,-90.951179 41.42456,-90.95214 41.424841,-90.953198 41.425075,-90.95402 41.425339,-90.954735 41.42561,-90.955128 41.425879,-90.955543 41.426124,-90.95629 41.426428,-90.956736 41.426746,-90.957247 41.427016,-90.957833 41.427327,-90.958353 41.42771,-90.958864 41.428029,-90.959461 41.428275,-90.96008 41.428489,-90.960678 41.428695,-90.96131 41.428989,-90.961349 41.429007,-90.962095 41.429327,-90.962533 41.429451,-90.963025 41.42951,-90.963645 41.429652,-90.964167 41.429724,-90.964319 41.429745,-90.965014 41.429847,-90.965838 41.429925,-90.966662 41.430051,-90.967356 41.430225,-90.967879 41.430407,-90.968317 41.430539,-90.968892 41.430809,-90.969554 41.431031,-90.970173 41.431238,-90.970557 41.431394,-90.970995 41.431703,-90.97111 41.431785,-90.971875 41.432404,-90.972255 41.432705,-90.972512 41.432909,-90.972689 41.433022,-90.972701 41.43303,-90.972739 41.433054,-90.972752 41.433062,-90.972834 41.433114,-90.97308 41.433272,-90.973086 41.433276,-90.97317 41.43331,-90.973609 41.43349,-90.974185 41.433712,-90.974858 41.433902,-90.975168 41.433985,-90.975767 41.434029,-90.97673 41.434124,-90.97794 41.434229,-90.978669 41.434264,-90.979815 41.434321,-90.980329 41.434292,-90.981766 41.434221,-90.982913 41.434171,-90.983932 41.434024,-90.984898 41.433869,-90.985886 41.433689,-90.986789 41.433404,-90.987585 41.433054,-90.988436 41.432712,-90.989319 41.432273,-90.989976 41.431962,-90.99088 41.431555,-90.991859 41.431174,-90.992892 41.430752,-90.993969 41.430282,-90.994759 41.430007,-90.995022 41.429917,-90.996205 41.429496,-90.997162 41.429179,-90.998248 41.428854,-90.999257 41.428618,-91.000148 41.428414,-91.000251 41.42838,-91.000354 41.428345,-91.001177 41.428069,-91.003368 41.427337,-91.00422 41.426923,-91.005197 41.426449,-91.005846 41.426135,-91.006024 41.426105,-91.008691 41.425656,-91.009079 41.425591,-91.009445 41.425519,-91.009578 41.425493,-91.01188 41.425043,-91.01198 41.425024,-91.014619 41.424806,-91.018896 41.424514,-91.019426 41.424478,-91.021234 41.424318,-91.023708 41.424099,-91.024136 41.424062,-91.027787 41.423603,-91.030618 41.422464,-91.030886 41.422353,-91.033107 41.421439,-91.033184 41.421409,-91.033492 41.421293,-91.034416 41.420947,-91.034725 41.420832,-91.034991 41.420733,-91.035053 41.420712,-91.036046 41.420379,-91.036378 41.420269,-91.037131 41.420017,-91.03777 41.419669,-91.03824 41.419412,-91.039872 41.418523,-91.041441 41.417471,-91.04158 41.417378,-91.041719 41.417284,-91.042109 41.417023,-91.043497 41.41619,-91.043988 41.415897,-91.045063 41.414872,-91.045464 41.414489,-91.04589 41.414085,-91.046478 41.413183,-91.046581 41.413026,-91.046782 41.412719,-91.047011 41.412368,-91.047034 41.412334,-91.047642 41.41131,-91.047652 41.411286,-91.047818 41.410902,-91.048259 41.409748,-91.048261 41.409736,-91.048628 41.407972,-91.049023 41.406073,-91.049103 41.405692,-91.04931 41.40486,-91.049735 41.403153,-91.049849 41.402579,-91.050067 41.401496,-91.050328 41.400049,-91.050637 41.397327,-91.050749 41.39597,-91.050766 41.395616,-91.050843 41.394104,-91.05087 41.393275,-91.05087 41.392841,-91.050874 41.391539,-91.050875 41.391106,-91.050876 41.390872,-91.050876 41.390639,-91.050876 41.3906,-91.05092 41.389798,-91.050955 41.389187,-91.05101 41.387556,-91.051106 41.386651,-91.051358 41.385921,-91.05158 41.385283,-91.051835 41.384704,-91.051933 41.384482,-91.052512 41.383743,-91.053081 41.383101,-91.053535 41.38259,-91.054651 41.381178,-91.055598 41.380026,-91.056813 41.378928,-91.057129 41.378532,-91.057676 41.377849,-91.05851 41.377036,-91.059607 41.375867,-91.059714 41.375618,-91.059971 41.375028,-91.06109 41.373823,-91.062285 41.372535,-91.063276 41.371309,-91.063714 41.370769,-91.063746 41.370729,-91.064453 41.369851,-91.065058 41.369101,-91.065656 41.367996,-91.066232 41.366367,-91.06652 41.365246,-91.066913 41.363417,-91.066985 41.362941,-91.067105 41.362151,-91.067586 41.359319,-91.068376 41.355852,-91.068962 41.353876,-91.069763 41.350302,-91.070498 41.34627,-91.070642 41.345353,-91.070682 41.345096,-91.070723 41.344838,-91.070766 41.344565,-91.070809 41.344291,-91.070894 41.343749,-91.070979 41.343206,-91.071139 41.34219,-91.071331 41.341016,-91.071555 41.339648,-91.071682 41.338576,-91.071757 41.337615,-91.071853 41.336374,-91.07197 41.334995,-91.072002 41.334116,-91.072045 41.333599,-91.072049 41.333551,-91.072065 41.333408,-91.07207 41.333361,-91.07206 41.33282,-91.072051 41.332279,-91.072038 41.331546,-91.072113 41.32957,-91.07218 41.328537,-91.072316 41.326465,-91.072667 41.322997,-91.072784 41.321417,-91.072871 41.319941,-91.072876 41.319829,-91.073009 41.317094,-91.073147 41.314924,-91.073194 41.314092,-91.073232 41.31344,-91.073553 41.310481,-91.073795 41.309308,-91.073952 41.308543,-91.074149 41.307594,-91.074841 41.305578,-91.075545 41.304433,-91.075992 41.303715,-91.077505 41.301828,-91.079689 41.300079,-91.081553 41.2987,-91.082991 41.29755,-91.084036 41.296717,-91.086379 41.294854,-91.08688 41.294371,-91.087753 41.293129,-91.089212 41.291209,-91.090703 41.289097,-91.092034 41.286911,-91.093503 41.284,-91.094162 41.282605,-91.094652 41.281411,-91.095365 41.279661,-91.096426 41.277251,-91.098035 41.273597,-91.09894 41.271524,-91.100099 41.26904,-91.101142 41.267169,-91.103153 41.264008,-91.104462 41.262104,-91.107325 41.258943,-91.107448 41.258828,-91.109368 41.257056,-91.110304 41.256088,-91.112783 41.252531,-91.113832 41.25066,-91.114186 41.250029,-91.114182 41.249474,-91.114177 41.248814,-91.114172 41.248155,-91.114162 41.24695,-91.114153 41.245744,-91.114137 41.24504,-91.114074 41.244439,-91.114008 41.243808,-91.113934 41.243099,-91.113657 41.241401,-91.113331 41.240617,-91.113062 41.239968,-91.112348 41.239002,-91.111871 41.238573,-91.111836 41.238541,-91.110743 41.237555,-91.110422 41.237281,-91.109582 41.236566,-91.108782 41.235964,-91.107813 41.235434,-91.106215 41.234558,-91.105832 41.234269,-91.104426 41.233272,-91.102997 41.232147,-91.100856 41.230539,-91.100845 41.230531,-91.099993 41.229831,-91.098937 41.228964,-91.097477 41.2275,-91.095675 41.225513,-91.094718 41.224491,-91.09399 41.223712,-91.09303 41.222634,-91.090186 41.220431,-91.087076 41.218222,-91.083497 41.215851,-91.081452 41.214429,-91.079529 41.212776,-91.077767 41.211268,-91.076005 41.209759,-91.075725 41.209518,-91.075445 41.209276,-91.073979 41.20801,-91.072984 41.207151,-91.067832 41.2016,-91.066866 41.200558,-91.065899 41.199517,-91.064819 41.198056,-91.063758 41.19662,-91.061475 41.193756,-91.060343 41.192336,-91.060306 41.19229,-91.060268 41.192243,-91.059847 41.19172,-91.059841 41.191712,-91.059414 41.191181,-91.058362 41.189873,-91.057981 41.1894,-91.057866 41.189259,-91.055068 41.185789,-91.054349 41.184731,-91.05151 41.180553,-91.049815 41.178057,-91.047991 41.175337,-91.046392 41.172954,-91.044756 41.170446,-91.043894 41.169123,-91.041875 41.166484,-91.041557 41.166162,-91.041196 41.166041,-91.038592 41.165551,-91.038408 41.165506,-91.036923 41.165139,-91.036464 41.165009,-91.03588 41.164843,-91.034424 41.164431,-91.032192 41.164004,-91.030045 41.163553,-91.027231 41.163383,-91.025446 41.163464,-91.024086 41.163625,-91.022365 41.164036,-91.020196 41.164646,-91.020021 41.164687,-91.019825 41.164732,-91.01905 41.164912,-91.017839 41.165163,-91.016554 41.165315,-91.015076 41.165516,-91.01445 41.165616,-91.013451 41.165779,-91.01257 41.165924,-91.011463 41.166044,-91.010441 41.166154,-91.009607 41.166245,-91.009435 41.16624,-91.008112 41.166201,-91.007594 41.166187,-91.006486 41.165913,-91.005505 41.165624,-91.004326 41.165108,-91.003475 41.164736,-91.003105 41.164602,-91.001718 41.164084,-91.000813 41.163687,-91.000149 41.163396,-90.997905 41.162562,-90.997054 41.162003,-90.994963 41.16063,-90.994391 41.160119,-90.992551 41.158475,-90.992193 41.158156,-90.990867 41.156872,-90.990612 41.156625,-90.989662 41.155707,-90.987878 41.15327,-90.986069 41.150608,-90.986057 41.15058,-90.985863 41.150174,-90.985526 41.149466,-90.984996 41.148353,-90.984958 41.148274,-90.984657 41.147785,-90.983268 41.145529,-90.983064 41.145229,-90.981597 41.143073,-90.981327 41.142675,-90.979077 41.139775,-90.977542 41.138242,-90.977275 41.137976,-90.977009 41.137711,-90.976429 41.137131,-90.97493 41.13527,-90.97333 41.133285,-90.970856 41.130109,-90.970851 41.130103,-90.970721 41.12988,-90.970384 41.129306,-90.969347 41.127388,-90.968999 41.126382,-90.968851 41.125653,-90.968662 41.125254,-90.968607 41.125138,-90.968552 41.125022,-90.967949 41.123778,-90.967412 41.12267,-90.967346 41.122533,-90.966627 41.121046,-90.965908 41.119559,-90.965218 41.118912,-90.964528 41.118266,-90.963526 41.117327,-90.962708 41.116561,-90.962523 41.116387,-90.961662 41.11558,-90.960802 41.114774,-90.959502 41.11341,-90.958643 41.11251,-90.958201 41.112047,-90.957265 41.111067,-90.954444 41.107426,-90.952739 41.105227,-90.952324 41.104691,-90.950844 41.10274,-90.950453 41.102214,-90.949752 41.101271,-90.949316 41.100611,-90.949178 41.100403,-90.949066 41.100234,-90.948955 41.100065,-90.948815 41.09986,-90.948395 41.099245,-90.948256 41.099041,-90.947722 41.098246,-90.946625 41.096628,-90.946623 41.09662,-90.946444 41.095687,-90.94626 41.09473,-90.946328 41.094448,-90.946731 41.092768,-90.947476 41.090507,-90.9479 41.088106,-90.948027 41.087392,-90.948161 41.085574,-90.948162 41.085563,-90.948178 41.085203,-90.948217 41.084411,-90.948309 41.082693,-90.948397 41.081075,-90.948715 41.078364,-90.948871 41.07737,-90.949064 41.07614,-90.949208 41.075212,-90.949256 41.074909,-90.949322 41.074484,-90.949328 41.074346,-90.94939 41.072783,-90.949381 41.07271,-90.949322 41.072212,-90.949147 41.070721,-90.949135 41.07061,-90.948989 41.07025,-90.947139 41.065713,-90.946024 41.063644,-90.945549 41.06173,-90.945613 41.060336,-90.945933 41.057594,-90.945999 41.056336,-90.944577 41.052255,-90.943652 41.048637,-90.94395 41.045154,-90.943739 41.043101,-90.94297 41.040747,-90.94232 41.038472,-90.942253 41.034702,-90.943232 41.029581,-90.943826 41.026473,-90.943947 41.025842,-90.945324 41.019279,-90.945427 41.015548,-90.945054 41.011917,-90.945949 41.006495,-90.947859 41.001499,-90.948453 41.000036,-90.948763 40.998779,-90.949634 40.995248,-90.951811 40.991407,-90.955201 40.986805,-90.95546 40.986185,-90.958142 40.979767,-90.958089 40.976643,-90.956827 40.973562,-90.955111 40.969858,-90.952715 40.962087,-90.951967 40.958238,-90.952233 40.954047,-90.953542 40.95062,-90.953587 40.950502,-90.953891 40.94991,-90.957215 40.943431,-90.957249 40.94336,-90.959947 40.937736,-90.960462 40.936356,-90.961112 40.933537,-90.961892 40.928473,-90.96256 40.925831,-90.962916 40.924957,-90.965344 40.921633,-90.968995 40.919127,-90.973985 40.917392,-90.97919 40.915522,-90.985462 40.912141,-90.992922 40.909681,-90.995569 40.909136,-90.9985 40.90812,-91.000142 40.90733,-91.001684 40.906385,-91.003536 40.905146,-91.005022 40.904119,-91.007519 40.902092,-91.009536 40.900565,-91.011798 40.898437,-91.011941 40.898302,-91.012135 40.898121,-91.01324 40.896622,-91.013899 40.895619,-91.015008 40.893933,-91.01613 40.892161,-91.0174 40.890224,-91.01758 40.88995,-91.018075 40.889128,-91.019541 40.886675,-91.020013 40.885965,-91.02035 40.885567,-91.02095 40.884834,-91.021562 40.884021,-91.022337 40.883468,-91.023192 40.882775,-91.024518 40.881699,-91.026321 40.880237,-91.026853 40.87964,-91.027489 40.879173,-91.027899 40.87895,-91.028154 40.878812,-91.029075 40.878373,-91.030371 40.877771,-91.031066 40.877466,-91.032459 40.876808,-91.034552 40.876039,-91.036789 40.875038,-91.039097 40.873565,-91.041998 40.871097,-91.044653 40.868356,-91.047344 40.864654,-91.050241 40.858514,-91.051656 40.856038,-91.052778 40.854015,-91.054269 40.851747,-91.05643 40.848387,-91.058749 40.846309,-91.062226 40.844645,-91.067159 40.841997,-91.071451 40.838682,-91.077521 40.833405,-91.078285 40.832838,-91.081307 40.8306,-91.08501 40.828135,-91.090072 40.824638,-91.091569 40.822813,-91.092993 40.821079,-91.093559 40.819862,-91.095367 40.815974,-91.096683 40.812189,-91.096703 40.81213,-91.096713 40.812102,-91.096742 40.812014,-91.096946 40.811403,-91.097456 40.808865,-91.097553 40.808433,-91.097649 40.805575,-91.097319 40.804127,-91.097031 40.802471,-91.095524 40.799348,-91.094728 40.797833,-91.094331 40.797078,-91.093128 40.794841,-91.092256 40.792909,-91.091917 40.791397,-91.091664 40.790265,-91.091607 40.789789,-91.091246 40.786724,-91.091262 40.78306,-91.091332 40.782529,-91.091628 40.780275,-91.091703 40.779708,-91.092476 40.776838,-91.093426 40.774306,-91.093536 40.774016,-91.094773 40.770926,-91.096133 40.767134,-91.098105 40.763233,-91.100485 40.760017,-91.102486 40.757076,-91.105227 40.754107,-91.105473 40.753838,-91.10613 40.753117,-91.107318 40.751981,-91.1082 40.750935,-91.108566 40.750376,-91.108765 40.75004,-91.110424 40.745528,-91.114249 40.730864,-91.115735 40.725168,-91.11569 40.723938,-91.115158 40.721895,-91.114473 40.720624,-91.113885 40.719532,-91.111095 40.708282,-91.110927 40.703262,-91.11194 40.697018,-91.112467 40.696301,-91.113321 40.695142,-91.115407 40.691825,-91.117831 40.683431,-91.119632 40.675892,-91.12082 40.672777,-91.122421 40.670675,-91.123928 40.669152,-91.125144 40.668738,-91.128415 40.666762,-91.133478 40.663678,-91.138055 40.660893,-91.144963 40.657632,-91.154293 40.653596,-91.15912 40.651139,-91.163471 40.648925,-91.1751 40.643027,-91.185295 40.637803,-91.18698 40.637297,-91.192558 40.636508,-91.195505 40.636287,-91.197906 40.636107,-91.202384 40.636594,-91.211352 40.637882,-91.218437 40.638437,-91.2246 40.638473,-91.228188 40.638309,-91.23244 40.638115,-91.247851 40.63839,-91.250148 40.638175,-91.251001 40.63816,-91.251868 40.638113,-91.253074 40.637962,-91.255402 40.63745,-91.256128 40.637273,-91.256788 40.637113,-91.258249 40.636672,-91.259932 40.635981,-91.262528 40.634752,-91.26368 40.634305,-91.263831 40.634246,-91.264326 40.63409,-91.264953 40.633893,-91.26636 40.633588,-91.268116 40.633325,-91.269787 40.633142,-91.271479 40.632951,-91.273139 40.632752,-91.276175 40.63224,-91.279444 40.631503,-91.282205 40.630894,-91.284142 40.63042,-91.28667 40.6299,-91.290351 40.629275,-91.293291 40.628731,-91.295523 40.628347,-91.296037 40.628252,-91.297152 40.628052,-91.297252 40.628034,-91.297394 40.627995,-91.298134 40.627883,-91.300936 40.627372,-91.303486 40.626923,-91.305043 40.626615,-91.306568 40.626219,-91.307937 40.625814,-91.309077 40.625433,-91.310048 40.625041,-91.339719 40.613488,-91.34127 40.612835,-91.348733 40.609695,-91.353989 40.606553,-91.354874 40.605892,-91.357058 40.604263,-91.359873 40.601805,-91.364667 40.595505,-91.364752 40.595395,-91.369661 40.588822,-91.37114 40.586841,-91.374252 40.58259,-91.375152 40.581279,-91.379752 40.57445,-91.381192 40.573234,-91.381964 40.572738,-91.385219 40.570646,-91.388179 40.568608,-91.401482 40.559458,-91.405241 40.554641,-91.406331 40.551934,-91.406373 40.551831,-91.406851 40.547557,-91.406202 40.542698,-91.404125 40.539127,-91.403077 40.538406,-91.400725 40.536789,-91.394475 40.534543,-91.388067 40.533069,-91.384531 40.530948,-91.381857 40.528247,-91.377689 40.523032,-91.375152 40.519858,-91.369059 40.512532,-91.368517 40.511591,-91.367876 40.510479,-91.366846 40.507743,-91.366489 40.506795,-91.364211 40.500043,-91.363879 40.498062,-91.363683 40.494211,-91.363744 40.493124,-91.363748 40.493052,-91.36391 40.490122,-91.364915 40.484168,-91.366463 40.478869,-91.36747 40.476227,-91.368074 40.474642,-91.369572 40.47138,-91.371649 40.468185,-91.373267 40.465495,-91.373855 40.464557,-91.374208 40.463993,-91.375152 40.461983,-91.376695 40.459234,-91.378144 40.456394,-91.379907 40.45211,-91.380037 40.451697,-91.381045 40.44849,-91.381468 40.44604,-91.381769 40.442555,-91.38155 40.438885,-91.381503 40.438092,-91.381457 40.437308,-91.380965 40.435395,-91.380177 40.432904,-91.379635 40.431497,-91.378844 40.429441,-91.377738 40.426622,-91.377625 40.426335,-91.376515 40.424321,-91.375151 40.421656,-91.373721 40.417891,-91.37328 40.416496,-91.372826 40.414279,-91.37245 40.411475,-91.372402 40.408729,-91.372392 40.40726,-91.372379 40.405379,-91.372399 40.4044,-91.372435 40.40277,-91.372554 40.4012,-91.372921 40.399108,-91.372937 40.399065,-91.375151 40.393172,-91.375429 40.392719,-91.375712 40.391925,-91.376397 40.391256,-91.37647 40.391188,-91.376652 40.391018,-91.376736 40.390939,-91.376911 40.390776,-91.377672 40.390213,-91.378422 40.38967,-91.379943 40.388944,-91.381958 40.387632,-91.384201 40.38643,-91.38836 40.384929,-91.390073 40.38446,-91.391613 40.384038,-91.392179 40.383942,-91.396996 40.383127,-91.402392 40.382692,-91.411037 40.382413,-91.413011 40.382277,-91.414338 40.38195,-91.415051 40.381747,-91.415695 40.381381,-91.417066 40.380402,-91.418957 40.3787,-91.419422 40.378264,-91.419979 40.378765,-91.421028 40.37971,-91.421635 40.380286,-91.42218 40.380802,-91.422324 40.380939,-91.422408 40.380991,-91.422419 40.380998,-91.422733 40.381206,-91.423053 40.381414,-91.423282 40.381563,-91.424294 40.381961,-91.424384 40.381997,-91.424582 40.382073,-91.425662 40.382491,-91.42668 40.382601,-91.427819 40.38285,-91.428069 40.382901,-91.428708 40.38303,-91.429762 40.383318,-91.430678 40.383619,-91.43249 40.384212,-91.432699 40.384281,-91.434553 40.384876,-91.435117 40.384973,-91.435124 40.384974,-91.435145 40.384978,-91.435153 40.38498,-91.435507 40.385041,-91.435924 40.385114,-91.436565 40.385263,-91.436792 40.385317,-91.436916 40.385346,-91.437956 40.385588,-91.437979 40.385594,-91.439552 40.38607,-91.439761 40.386133,-91.441076 40.386241,-91.441243 40.386255,-91.441266 40.386237,-91.441843 40.385788,-91.441957 40.385705,-91.442306 40.385449,-91.442748 40.385128,-91.443275 40.384591,-91.443579 40.384283,-91.445168 40.382461,-91.445099 40.380837,-91.445371 40.379388,-91.446627 40.377918,-91.448742 40.376804,-91.451627 40.376019,-91.454535 40.37544,-91.458089 40.375457,-91.460395 40.375472,-91.463322 40.375628,-91.463895 40.375659,-91.465009 40.376223,-91.465619 40.377069,-91.465702 40.377464,-91.465858 40.378201,-91.465891 40.378365,-91.465809 40.378651,-91.46561 40.379314,-91.464681 40.380949,-91.463912 40.381999,-91.463656 40.382348,-91.463514 40.382543,-91.463008 40.384041,-91.463137 40.385052,-91.463146 40.385119,-91.463161 40.385136,-91.463386 40.385394,-91.463494 40.385492,-91.46355 40.385543,-91.463554 40.385547,-91.464017 40.385636,-91.464606 40.385491,-91.464885 40.385362,-91.465116 40.385257,-91.465334 40.385168,-91.467115 40.38444,-91.467855 40.384139,-91.471967 40.382884,-91.472635 40.382788,-91.474378 40.382538,-91.474538 40.382503,-91.474703 40.382468,-91.474789 40.382449,-91.474868 40.382432,-91.475333 40.382333,-91.475545 40.382287,-91.475797 40.382234,-91.476551 40.382072,-91.477735 40.381989,-91.478401 40.381943,-91.480251 40.381783,-91.482322 40.382057,-91.483153 40.382492,-91.483352 40.382745,-91.483804 40.383321,-91.484507 40.3839,-91.484627 40.383991,-91.484738 40.384114,-91.484775 40.384145,-91.484887 40.384241,-91.484925 40.384273,-91.485047 40.384471,-91.485255 40.384657,-91.48537 40.384806,-91.48555 40.385162,-91.48573 40.385574,-91.485866 40.385777,-91.485955 40.385864,-91.485996 40.385904,-91.486118 40.386134,-91.486226 40.386392,-91.486477 40.386689,-91.486542 40.386804,-91.486794 40.387095,-91.486937 40.387238,-91.487167 40.387402,-91.487275 40.387523,-91.487491 40.387852,-91.487634 40.38805,-91.487836 40.388253,-91.487929 40.388379,-91.488001 40.38844,-91.488253 40.388785,-91.488864 40.389521,-91.488971 40.389686,-91.489208 40.389944,-91.489494 40.390351,-91.48964 40.390558,-91.489755 40.390756,-91.489827 40.390943,-91.489999 40.391256,-91.490115 40.391503,-91.490273 40.391711,-91.490416 40.391964,-91.49044 40.392013,-91.49051 40.392157,-91.490721 40.392589,-91.490792 40.392733,-91.490816 40.392782,-91.490888 40.39293,-91.490912 40.39298,-91.491007 40.393706,-91.491037 40.393929,-91.490816 40.395225,-91.490502 40.395804,-91.490153 40.396449,-91.490041 40.396655,-91.490014 40.396706,-91.489875 40.396964,-91.489705 40.397277,-91.489604 40.397465,-91.489596 40.397485,-91.489099 40.398738,-91.488597 40.400009,-91.488334 40.401265,-91.487955 40.402465,-91.487935 40.402598,-91.487818 40.403415,-91.487829 40.403866,-91.487889 40.403906,-91.488166 40.404098,-91.488481 40.404317,-91.4885 40.404318,-91.489108 40.40436,-91.48928 40.404373,-91.48937 40.404375,-91.489445 40.404384,-91.489521 40.404393,-91.489553 40.404398,-91.489742 40.404339,-91.489816 40.404317,-91.490272 40.404061,-91.491641 40.403292,-91.492098 40.403037,-91.492202 40.402982,-91.492498 40.402828,-91.492517 40.402821,-91.492629 40.402782,-91.493644 40.402433,-91.494525 40.402268,-91.494592 40.402256,-91.49619 40.402192,-91.498093 40.401926,-91.498788 40.402111,-91.500156 40.402555,-91.500317 40.402578,-91.502267 40.402862,-91.502757 40.402933,-91.503461 40.403095,-91.504764 40.403395,-91.505272 40.403512,-91.506745 40.404335,-91.506792 40.404431,-91.507202 40.405266,-91.507391 40.405483,-91.507398 40.405491,-91.507419 40.405515,-91.507427 40.405524,-91.50823 40.406138,-91.509063 40.406775,-91.510288 40.407258,-91.510926 40.407458,-91.511891 40.407762,-91.512181 40.407853,-91.512664 40.408005,-91.513042 40.408156,-91.513325 40.40827,-91.513993 40.408537,-91.514297 40.40855,-91.514822 40.408573,-91.516534 40.408567,-91.517369 40.408618,-91.518392 40.408682,-91.518769 40.408753,-91.519755 40.40894,-91.519901 40.40898,-91.520272 40.409082,-91.522333 40.409648,-91.523496 40.410218,-91.524612 40.410765,-91.525309 40.411779,-91.526425 40.413404,-91.527057 40.416689,-91.527043 40.418214,-91.526839 40.418908,-91.526706 40.41936,-91.526573 40.419813,-91.526555 40.419872,-91.525268 40.421599,-91.523164 40.424176,-91.521388 40.426488,-91.521027 40.42715,-91.520884 40.427413,-91.520344 40.428403,-91.519804 40.429392,-91.51966 40.429654,-91.519517 40.429917,-91.519492 40.429951,-91.519366 40.430318,-91.519268 40.430588,-91.51917 40.430859,-91.519012 40.431298,-91.51904 40.431805,-91.519082 40.432558,-91.519086 40.432578,-91.519134 40.432822,-91.519157 40.432847,-91.51974 40.433466,-91.519935 40.433673,-91.521016 40.433719,-91.522551 40.433695,-91.522638 40.433687,-91.525 40.433483,-91.527645 40.433772,-91.529132 40.434272,-91.530355 40.434964,-91.530438 40.435033,-91.531523 40.435938,-91.532603 40.436647,-91.532807 40.436784,-91.532898 40.436911,-91.533471 40.437715,-91.533524 40.437929,-91.533623 40.43832,-91.533589 40.439454,-91.533555 40.440589,-91.533548 40.440804,-91.532837 40.44164,-91.532816 40.441666,-91.531912 40.44273,-91.529613 40.444451,-91.529098 40.444836,-91.527733 40.445657,-91.526108 40.446634,-91.524368 40.44816,-91.524053 40.448437,-91.523271 40.450061,-91.523147 40.451416,-91.523143 40.451459,-91.523131 40.451588,-91.523127 40.451631,-91.523072 40.452254,-91.5231 40.452441,-91.523379 40.454255,-91.523517 40.454847,-91.523703 40.455641,-91.523864 40.456331,-91.524518 40.457139,-91.524956 40.457679,-91.52509 40.457845,-91.526155 40.458625,-91.526783 40.458767,-91.527581 40.458948,-91.5286 40.459002,-91.530534 40.45902,-91.531915 40.458985,-91.533704 40.458942,-91.533761 40.458941,-91.534356 40.458879,-91.53452 40.458862,-91.534615 40.458851,-91.534684 40.458844,-91.535169 40.458793,-91.535394 40.458769,-91.535654 40.458742,-91.538348 40.458402,-91.541324 40.458265,-91.542566 40.458208,-91.543785 40.458149,-91.54694 40.458205,-91.548366 40.45823,-91.550598 40.458508,-91.551625 40.458636,-91.552652 40.458764,-91.552691 40.458769,-91.553752 40.458958,-91.554376 40.459068,-91.556805 40.4595,-91.558266 40.459845,-91.56057 40.460391,-91.563844 40.460988,-91.564485 40.461214,-91.566411 40.461893,-91.566638 40.461973,-91.566998 40.4621,-91.567055 40.462115,-91.567178 40.462146,-91.5673 40.462177,-91.567362 40.462192,-91.567743 40.46229,-91.568088 40.462443,-91.568254 40.462516,-91.568317 40.462544,-91.568545 40.462645,-91.570114 40.463338,-91.570916 40.463693,-91.574594 40.465586,-91.574713 40.465647,-91.574746 40.465664,-91.575598 40.466406,-91.575806 40.466586,-91.576013 40.466767,-91.577875 40.468454,-91.578189 40.468778,-91.580233 40.470889,-91.580355 40.471015,-91.581011 40.472059,-91.581528 40.472876,-91.582437 40.474703,-91.582697 40.476219,-91.582828 40.476979,-91.583315 40.479118,-91.585169 40.483611,-91.585259 40.483802,-91.585733 40.484801,-91.586884 40.487233,-91.589377 40.490898,-91.590817 40.492292,-91.592551 40.493696,-91.594644 40.494997,-91.594913 40.495103,-91.599634 40.49696,-91.599748 40.497005,-91.600155 40.497142,-91.601724 40.497672,-91.602248 40.497849,-91.602267 40.497855,-91.602324 40.497874,-91.602343 40.497881,-91.602634 40.49798,-91.602926 40.498078,-91.603136 40.49815,-91.603346 40.498221,-91.605097 40.498813,-91.608268 40.50001,-91.608347 40.50004,-91.611977 40.501938,-91.612821 40.502377,-91.616357 40.504448,-91.616948 40.504794,-91.619486 40.507134,-91.621181 40.509801,-91.621353 40.510072,-91.621554 40.510928,-91.621576 40.511018,-91.621821 40.512064,-91.622362 40.514362,-91.622192 40.517039,-91.622053 40.517404,-91.621866 40.517921,-91.621762 40.518218,-91.621532 40.518842,-91.621302 40.519467,-91.620414 40.52188,-91.61989 40.523303,-91.619526 40.524294,-91.618793 40.526286,-91.618772 40.526487,-91.618693 40.527294,-91.618608 40.528154,-91.618523 40.529015,-91.618028 40.53403,-91.61818 40.535283,-91.618367 40.536818,-91.618999 40.539084,-91.61907 40.539199,-91.620071 40.540817,-91.620412 40.541092,-91.621902 40.542292,-91.622986 40.54272,-91.623545 40.54294,-91.623906 40.543082,-91.624886 40.543408,-91.625161 40.5435,-91.625252 40.543515,-91.625845 40.543616,-91.626939 40.543807,-91.630293 40.54437,-91.630791 40.544454,-91.631167 40.544563,-91.632783 40.545029,-91.634911 40.545162,-91.635404 40.545221,-91.638082 40.545541,-91.638499 40.545626,-91.639066 40.545742,-91.639633 40.545857,-91.640018 40.545936,-91.640404 40.546014,-91.640557 40.546045,-91.64071 40.546076,-91.641498 40.546236,-91.642285 40.546397,-91.6436 40.546664,-91.64371 40.546687,-91.644995 40.546973,-91.646674 40.547371,-91.647334 40.547528,-91.647995 40.547684,-91.654345 40.549189,-91.656548 40.54942,-91.660063 40.549789,-91.662197 40.550014,-91.664213 40.55023,-91.664265 40.550236,-91.664455 40.550255,-91.664582 40.550263,-91.664886 40.550296,-91.665189 40.550328,-91.666028 40.550416,-91.666867 40.550504,-91.668448 40.55067,-91.67003 40.550836,-91.670993 40.550937,-91.678315 40.55237,-91.681714 40.553035,-91.681742 40.553052,-91.682382 40.55343,-91.683254 40.553944,-91.683943 40.554351,-91.684765 40.554837,-91.685196 40.555092,-91.687328 40.55649,-91.6887 40.55739,-91.689526 40.558373,-91.689948 40.558874,-91.690369 40.559376,-91.690547 40.559588,-91.690804 40.559893,-91.691065 40.560666,-91.691581 40.562223,-91.691563 40.564133,-91.691557 40.564839,-91.691561 40.564867,-91.691538 40.564911,-91.691382 40.565282,-91.691225 40.565652,-91.690761 40.566751,-91.690297 40.567851,-91.689967 40.568632,-91.686638 40.575026,-91.685723 40.576785,-91.685657 40.577193,-91.685381 40.578892,-91.68565 40.579439,-91.686357 40.580875,-91.686754 40.581283,-91.68882 40.583409,-91.696339 40.588135,-91.696359 40.588148,-91.697102 40.588459,-91.701242 40.59019,-91.705382 40.591921,-91.707251 40.592703,-91.707786 40.592968,-91.707932 40.593039,-91.708214 40.593176,-91.708641 40.593385,-91.709902 40.594004,-91.711163 40.594623,-91.712025 40.595046,-91.712199 40.595174,-91.712284 40.595237,-91.712369 40.595301,-91.714569 40.596915,-91.716769 40.59853,-91.720058 40.601527,-91.729115 40.61364,-91.730422 40.613581,-91.730482 40.613578,-91.737047 40.613287,-91.740622 40.613129,-91.740866 40.613119,-91.750164 40.612724,-91.762441 40.612297,-91.763056 40.612276,-91.766085 40.612173,-91.766674 40.612152,-91.769718 40.612046,-91.769735 40.612045,-91.778604 40.611815,-91.779227 40.611801,-91.785899 40.611593,-91.786395 40.611567,-91.786827 40.611545,-91.792952 40.611317,-91.794195 40.611264,-91.794992 40.611241,-91.795 40.611241,-91.795 40.611249,-91.795051 40.611249,-91.79908 40.610989,-91.799241 40.610979,-91.799746 40.610961,-91.800133 40.610949,-91.813828 40.61053,-91.813963 40.610521,-91.824194 40.610298,-91.824199 40.610304,-91.824202 40.6103,-91.824247 40.610265,-91.824309 40.610247,-91.824732 40.61022,-91.825314 40.610198,-91.826155 40.610165,-91.827063 40.610118,-91.829575 40.610021,-91.831016 40.609969,-91.831415 40.609948,-91.831431 40.609948,-91.832162 40.609912,-91.832277 40.609884,-91.832317 40.609866,-91.832343 40.609854,-91.832392 40.609805,-91.83325 40.609759,-91.833369 40.609753,-91.840663 40.6094,-91.840824 40.609392,-91.852849 40.608811,-91.8684 40.608056,-91.868731 40.608048,-91.869553 40.608032,-91.87517 40.607901,-91.883338 40.607636,-91.889747 40.607465,-91.902038 40.607138,-91.905608 40.607043,-91.907348 40.606998,-91.915831 40.606773,-91.915832 40.606772,-91.915957 40.606768,-91.916083 40.606765,-91.916201 40.606762,-91.916319 40.606759,-91.921313 40.606626,-91.922356 40.606599,-91.925396 40.606518,-91.925398 40.606518,-91.925866 40.606505,-91.936804 40.606211,-91.939305 40.606144,-91.939451 40.606146,-91.939676 40.606135,-91.943112 40.605827,-91.944167 40.605731,-91.945621 40.605599,-91.947337 40.605493,-91.947709 40.605471,-91.948153 40.605462,-91.948396 40.605457,-91.948448 40.605455,-91.948605 40.605451,-91.948658 40.605451,-91.949348 40.605437,-91.951418 40.605395,-91.952109 40.605382,-91.961695 40.605191,-91.966754 40.605151,-91.969984 40.605125,-91.970177 40.60516,-91.970755 40.605109,-91.970988 40.605112,-91.9715 40.605106,-91.982346 40.604804,-91.998645 40.604434,-91.998941 40.604436,-91.999832 40.604442,-92.000129 40.604444,-92.000303 40.604445,-92.000828 40.604451,-92.001003 40.604453,-92.006918 40.604419,-92.007824 40.604398,-92.008406 40.604378,-92.009498 40.604365,-92.012646 40.604299,-92.015248 40.604223,-92.017132 40.604157,-92.017757 40.604129,-92.018095 40.604122,-92.020963 40.604058,-92.021131 40.604053,-92.021309 40.604047,-92.022041 40.604023,-92.02345 40.603969,-92.024349 40.603928,-92.025075 40.603901,-92.026131 40.603871,-92.027849 40.603848,-92.029624 40.603819,-92.030235 40.603769,-92.030674 40.603754,-92.03081 40.603747,-92.031235 40.603739,-92.031513 40.603734,-92.031866 40.603727,-92.032276 40.60372,-92.033448 40.603684,-92.034397 40.603657,-92.034629 40.603652,-92.036467 40.603615,-92.036938 40.603595,-92.037385 40.603587,-92.037787 40.603567,-92.038382 40.603543,-92.038868 40.603541,-92.040157 40.603516,-92.04049 40.603507,-92.041501 40.60348,-92.042304 40.603452,-92.043331 40.603407,-92.043787 40.603399,-92.04418 40.603379,-92.04452 40.603376,-92.044837 40.603367,-92.045122 40.603369,-92.04584 40.603358,-92.046002 40.603341,-92.047014 40.603303,-92.049176 40.60325,-92.049817 40.603226,-92.050774 40.603198,-92.05238 40.603176,-92.052735 40.603183,-92.052736 40.603183,-92.052897 40.603186,-92.053067 40.603193,-92.053117 40.603203,-92.053236 40.603229,-92.053398 40.603226,-92.053615 40.603222,-92.053751 40.603187,-92.053773 40.603182,-92.053924 40.603151,-92.054111 40.603104,-92.054386 40.603101,-92.05481 40.603085,-92.05524 40.603089,-92.055478 40.603078,-92.055973 40.603076,-92.056461 40.603063,-92.056978 40.603057,-92.057697 40.603041,-92.058343 40.603041,-92.058702 40.603022,-92.058875 40.602979,-92.059098 40.602932,-92.059315 40.602862,-92.06022 40.60282,-92.061656 40.602794,-92.062092 40.602772,-92.062123 40.60277,-92.062605 40.602774,-92.063316 40.602747,-92.063811 40.602735,-92.063932 40.60273,-92.065464 40.602671,-92.066297 40.602645,-92.067662 40.602618,-92.067884 40.60262,-92.06791 40.602622,-92.067928 40.602623,-92.068601 40.60268,-92.068845 40.602688,-92.069233 40.602691,-92.069779 40.602684,-92.069863 40.602756,-92.069871 40.602755,-92.069872 40.602755,-92.071274 40.60269,-92.082318 40.602177,-92.082345 40.602198,-92.082453 40.602257,-92.08265 40.602268,-92.083172 40.602263,-92.083212 40.602265,-92.083279 40.602267,-92.083289 40.602271,-92.083292 40.602273,-92.08398 40.602228,-92.084961 40.602207,-92.085306 40.602203,-92.086341 40.602195,-92.086687 40.602193,-92.087255 40.602182,-92.088963 40.602152,-92.089532 40.602142,-92.090121 40.602131,-92.09189 40.602097,-92.09248 40.602087,-92.093036 40.602077,-92.093138 40.602064,-92.093155 40.602062,-92.09373 40.602025,-92.09533 40.602032,-92.095968 40.602013,-92.096239 40.602015,-92.09641 40.602005,-92.09652 40.601976,-92.096583 40.601905,-92.096611 40.601831,-92.112642 40.60187,-92.113216 40.601851,-92.114016 40.601826,-92.118141 40.601698,-92.119517 40.601656,-92.119939 40.601642,-92.121205 40.601603,-92.121628 40.60159,-92.122225 40.601571,-92.124019 40.601515,-92.124617 40.601497,-92.12463 40.601496,-92.124669 40.601495,-92.124683 40.601495,-92.125187 40.601481,-92.126458 40.601457,-92.131783 40.601358,-92.133559 40.601326,-92.144198 40.601133,-92.149659 40.601033,-92.149682 40.601033,-92.149745 40.601031,-92.159939 40.600861,-92.160255 40.600856,-92.17535 40.600603,-92.176236 40.600588,-92.178893 40.600543,-92.17978 40.600529,-92.181537 40.600489,-92.181726 40.600485,-92.195084 40.600207,-92.19532 40.600203,-92.195327 40.600203,-92.196162 40.600069,-92.196793 40.600134,-92.198165 40.600125,-92.19876 40.600129,-92.198783 40.600114,-92.198827 40.600086,-92.198951 40.600061,-92.199224 40.600057,-92.200306 40.600052,-92.200943 40.600025,-92.20162 40.600023,-92.201673 40.600018,-92.201744 40.600011,-92.201819 40.59998,-92.204903 40.599974,-92.204926 40.599974,-92.204972 40.599974,-92.205042 40.599974,-92.205114 40.599974,-92.205138 40.599974,-92.205151 40.599974,-92.205158 40.599973,-92.205165 40.599973,-92.205212 40.599973,-92.207443 40.599969,-92.20913 40.599966,-92.209175 40.599966,-92.217414 40.599834,-92.217497 40.599833,-92.217547 40.599832,-92.217555 40.599832,-92.22155 40.599769,-92.222717 40.59975,-92.226877 40.599684,-92.226884 40.599684,-92.226892 40.599684,-92.227199 40.599627,-92.228258 40.599602,-92.228814 40.599583,-92.229544 40.59958,-92.230264 40.599561,-92.231518 40.599569,-92.233368 40.599535,-92.234345 40.599502,-92.23599 40.599489,-92.236474 40.599481,-92.245792 40.59916,-92.246035 40.59915,-92.247669 40.599195,-92.250183 40.599264,-92.255586 40.59916,-92.256219 40.599148,-92.261396 40.599057,-92.265487 40.598985,-92.265861 40.598978,-92.265929 40.598977,-92.265973 40.598976,-92.265988 40.598976,-92.265996 40.598975,-92.266008 40.598975,-92.266113 40.598973,-92.266138 40.598973,-92.266357 40.598969,-92.267142 40.598955,-92.267513 40.598949,-92.267554 40.598948,-92.267581 40.598948,-92.267591 40.598948,-92.26778 40.598945,-92.267815 40.598944,-92.267985 40.598941,-92.269747 40.598909,-92.269758 40.598909,-92.26977 40.598909,-92.269781 40.598908,-92.269791 40.598908,-92.269897 40.598905,-92.270063 40.598904,-92.270076 40.598904,-92.270104 40.598904,-92.270187 40.598903,-92.293333 40.598551,-92.293392 40.59855,-92.293399 40.59855,-92.293411 40.598549,-92.293426 40.598549,-92.29344 40.598549,-92.293593 40.598546,-92.296394 40.598504,-92.29657 40.598502,-92.296747 40.598499,-92.298732 40.598469,-92.298774 40.598468,-92.299454 40.598454,-92.300291 40.598429,-92.300963 40.598415,-92.301448 40.598409,-92.301939 40.598402,-92.302096 40.5984,-92.302386 40.598394,-92.302715 40.598378,-92.302808 40.598379,-92.302973 40.59838,-92.303199 40.598369,-92.304341 40.598352,-92.305772 40.598319,-92.309517 40.598246,-92.311371 40.598204,-92.313685 40.598158,-92.31467 40.598128,-92.317537 40.598058,-92.317546 40.598057,-92.317553 40.598057,-92.317561 40.598057,-92.317816 40.598051,-92.317939 40.598049,-92.317949 40.598049,-92.317957 40.598049,-92.319362 40.59803,-92.32048 40.598007,-92.321051 40.597993,-92.321622 40.597972,-92.32471 40.597919,-92.325852 40.597896,-92.327885 40.59783,-92.328792 40.597812,-92.329699 40.597787,-92.330849 40.59777,-92.331185 40.59776,-92.331354 40.597754,-92.331443 40.597732,-92.331451 40.597729,-92.331492 40.597712,-92.336941 40.597526,-92.341658 40.597365,-92.341668 40.597365,-92.349484 40.597227,-92.350807 40.597275,-92.35089 40.59726,-92.351044 40.597245,-92.351949 40.597224,-92.355999 40.597187,-92.356355 40.597175,-92.358163 40.597117,-92.359074 40.597081,-92.359708 40.597061,-92.360384 40.597032,-92.362206 40.596987,-92.363051 40.596971,-92.368119 40.596844,-92.37539 40.596594,-92.378417 40.596485,-92.379576 40.596469,-92.386009 40.596415,-92.394114 40.596251,-92.399095 40.596151,-92.399715 40.596138,-92.400045 40.596131,-92.405632 40.59602,-92.408879 40.595954,-92.409047 40.59595,-92.415709 40.595819,-92.415802 40.595817,-92.417334 40.595786,-92.421971 40.595693,-92.423827 40.595656,-92.427773 40.595567,-92.433019 40.595451,-92.433046 40.59545,-92.433139 40.595448,-92.433159 40.595448,-92.434602 40.595416,-92.436705 40.59537,-92.438154 40.595338,-92.442055 40.595356,-92.442158 40.595355,-92.44508 40.595331,-92.447871 40.595308,-92.448097 40.595306,-92.448105 40.595306,-92.4482 40.595306,-92.453405 40.595296,-92.453438 40.5953,-92.453667 40.595326,-92.455796 40.595325,-92.456662 40.595331,-92.45824 40.595342,-92.461102 40.59531,-92.461304 40.595316,-92.461408 40.595334,-92.461461 40.595377,-92.462804 40.595275,-92.462826 40.595273,-92.469984 40.59517,-92.470221 40.595173,-92.470311 40.595174,-92.471481 40.595187,-92.473042 40.595153,-92.479345 40.595011,-92.47956 40.595006,-92.480416 40.594988,-92.481114 40.594973,-92.481148 40.594971,-92.481208 40.594968,-92.481223 40.594967,-92.481509 40.59495,-92.481517 40.59495,-92.481525 40.594949,-92.481571 40.594947,-92.481643 40.594963,-92.48183 40.595003,-92.482194 40.595038,-92.482988 40.595059,-92.483981 40.595063,-92.484513 40.595077,-92.484741 40.595083,-92.484947 40.595084,-92.485216 40.595085,-92.486396 40.595032,-92.488658 40.594949,-92.491449 40.594861,-92.492883 40.594842,-92.494075 40.594805,-92.495652 40.59477,-92.4967 40.594766,-92.497105 40.594743,-92.497163 40.59474,-92.499514 40.59461,-92.50107 40.594524,-92.502361 40.594437,-92.502624 40.594429,-92.505935 40.594328,-92.506465 40.594312,-92.508771 40.594229,-92.511275 40.594156,-92.51334 40.594089,-92.51357 40.594082,-92.51913 40.593953,-92.522245 40.593868,-92.523631 40.593829,-92.523643 40.593829,-92.523738 40.593827,-92.526499 40.593765,-92.529224 40.593684,-92.532975 40.593565,-92.535054 40.593511,-92.535141 40.593509,-92.539319 40.593399,-92.540251 40.593376,-92.540356 40.593374,-92.541889 40.59334,-92.542327 40.593342,-92.542422 40.593342,-92.542617 40.593343,-92.54394 40.593323,-92.545639 40.593279,-92.549931 40.593144,-92.552964 40.593064,-92.556693 40.592977,-92.557482 40.592973,-92.557642 40.592972,-92.557664 40.592972,-92.558568 40.592934,-92.559328 40.592909,-92.55937 40.592908,-92.560057 40.592889,-92.560742 40.592833,-92.5613 40.592814,-92.561889 40.592778,-92.562992 40.59274,-92.563776 40.592727,-92.564305 40.592712,-92.564813 40.592688,-92.565276 40.592673,-92.566589 40.592645,-92.568034 40.592608,-92.570306 40.592516,-92.572943 40.592441,-92.575204 40.592366,-92.577058 40.592322,-92.579549 40.592249,-92.579617 40.592247,-92.580025 40.592249,-92.580266 40.592258,-92.580747 40.592237,-92.580883 40.592232,-92.581019 40.592226,-92.587073 40.591966,-92.601171 40.591651,-92.60891 40.591479,-92.610664 40.59144,-92.610685 40.59144,-92.612931 40.59139,-92.615439 40.591334,-92.615565 40.591331,-92.618372 40.591268,-92.625191 40.591044,-92.631441 40.590997,-92.631711 40.590995,-92.631946 40.590994,-92.632282 40.590992,-92.634164 40.590944,-92.634175 40.590944,-92.635043 40.590922,-92.637898 40.590853,-92.639225 40.590829,-92.647773 40.59065,-92.650407 40.590597,-92.657248 40.590429,-92.658187 40.590407,-92.658372 40.590397,-92.659409 40.590341,-92.668484 40.590205,-92.685885 40.589869,-92.686282 40.589861,-92.686693 40.589809,-92.686851 40.589839,-92.688412 40.589922,-92.689074 40.589882,-92.689546 40.5899,-92.690437 40.589852,-92.696639 40.589704,-92.696787 40.589701,-92.696828 40.589701,-92.713177 40.589423,-92.713462 40.589425,-92.714371 40.589431,-92.714596 40.589427,-92.714677 40.589426,-92.714758 40.589424,-92.722891 40.589286,-92.72521 40.589277,-92.729024 40.589261,-92.742316 40.589205,-92.742316 40.589204,-92.742458 40.58917,-92.746547 40.589054,-92.748276 40.589031,-92.748277 40.58903,-92.748755 40.589023,-92.748809 40.589023,-92.752892 40.588968,-92.752893 40.588968,-92.753682 40.588957,-92.757123 40.588909,-92.757123 40.588908,-92.757123 40.588907,-92.757123 40.588906,-92.757123 40.588905,-92.757123 40.588904,-92.757123 40.588903,-92.757123 40.588902,-92.775087 40.588713,-92.775414 40.588708,-92.781167 40.588592,-92.781269 40.58859,-92.781317 40.58859,-92.785411 40.588619,-92.795734 40.588688,-92.795772 40.588688,-92.802642 40.588622,-92.802713 40.588622,-92.816228 40.588542,-92.816429 40.588543,-92.823192 40.588578,-92.823269 40.588578,-92.823346 40.588578,-92.824756 40.588585,-92.827853 40.588602,-92.827845 40.588593,-92.827785 40.58845,-92.828016 40.588468,-92.828719 40.588469,-92.830805 40.588456,-92.831273 40.588465,-92.834058 40.588451,-92.834785 40.588452,-92.834977 40.588451,-92.846811 40.588418,-92.848765 40.588406,-92.854627 40.588374,-92.856445 40.588365,-92.856582 40.588363,-92.857044 40.588358,-92.857045 40.588358,-92.857053 40.588269,-92.857117 40.58822,-92.857219 40.588199,-92.857568 40.588199,-92.857571 40.588199,-92.859457 40.588201,-92.861478 40.588212,-92.86148 40.588213,-92.862452 40.588219,-92.862896 40.588227,-92.863072 40.588213,-92.863192 40.588178,-92.867308 40.588178,-92.8752 40.588392,-92.879178 40.588341,-92.879462 40.588337,-92.886341 40.588248,-92.889746 40.588042,-92.889806 40.588004,-92.889963 40.587978,-92.890181 40.587958,-92.890661 40.587958,-92.891533 40.587966,-92.893618 40.587968,-92.896191 40.587984,-92.899514 40.587973,-92.903081 40.587956,-92.903587 40.587943,-92.903744 40.587924,-92.903899 40.587864,-92.9074 40.587978,-92.916344 40.587863,-92.918038 40.587842,-92.932269 40.587657,-92.932555 40.587654,-92.941592 40.587614,-92.94174 40.587606,-92.94198 40.587611,-92.942651 40.587611,-92.943061 40.587604,-92.943241 40.587649,-92.943361 40.587695,-92.943472 40.587762,-92.943541 40.587695,-92.943701 40.587619,-92.943911 40.587574,-92.944282 40.587558,-92.945632 40.587544,-92.947243 40.587514,-92.948924 40.587492,-92.950395 40.587462,-92.951405 40.587432,-92.952616 40.587425,-92.954437 40.587372,-92.954937 40.587369,-92.955628 40.587365,-92.956595 40.587365,-92.957268 40.587366,-92.957646 40.587361,-92.957827 40.587359,-92.959029 40.587343,-92.96099 40.587336,-92.961591 40.587337,-92.962591 40.587322,-92.963782 40.587292,-92.965283 40.587262,-92.966422 40.587223,-92.966623 40.587216,-92.968604 40.587179,-92.970165 40.587141,-92.971856 40.587108,-92.97192 40.587106,-92.972436 40.587096,-92.973889 40.587074,-92.973891 40.587074,-92.976038 40.587042,-92.97634 40.587037,-92.978169 40.587005,-92.97963 40.586975,-92.980721 40.586957,-92.980869 40.586955,-92.981151 40.586953,-92.982372 40.586931,-92.982872 40.586922,-92.984102 40.586892,-92.985008 40.586887,-92.985385 40.586875,-92.985613 40.586867,-92.985613 40.586866,-92.985773 40.586862,-92.987203 40.586841,-92.990425 40.586786,-92.991896 40.586771,-92.992186 40.586764,-92.997109 40.586649,-92.998349 40.586626,-92.99894 40.586603,-92.99958 40.586588,-93.00034 40.586557,-93.0012 40.586546,-93.00121 40.586546,-93.006463 40.586443,-93.010305 40.586359,-93.011786 40.586336,-93.012156 40.586326,-93.012915 40.586301,-93.0135 40.586297,-93.01722 40.586201,-93.019166 40.586147,-93.023544 40.586045,-93.024413 40.586013,-93.024849 40.585997,-93.028037 40.585908,-93.028741 40.585889,-93.030805 40.585817,-93.031082 40.585809,-93.031175 40.585807,-93.034017 40.585726,-93.034416 40.585722,-93.034488 40.585721,-93.034488 40.58572,-93.0363 40.585702,-93.039012 40.585643,-93.040348 40.585617,-93.040418 40.585614,-93.040542 40.58561,-93.043889 40.585484,-93.044499 40.585461,-93.048712 40.585328,-93.051306 40.585279,-93.053229 40.585248,-93.054941 40.585206,-93.055465 40.585182,-93.056559 40.585116,-93.057098 40.58508,-93.057395 40.585066,-93.057739 40.58505,-93.05883 40.58504,-93.058906 40.585039,-93.059201 40.585037,-93.060562 40.584999,-93.061374 40.584976,-93.064113 40.584862,-93.065435 40.584826,-93.066599 40.5848,-93.067114 40.584789,-93.067921 40.58476,-93.069703 40.584687,-93.070116 40.58466,-93.070993 40.584639,-93.071243 40.584633,-93.07262 40.584607,-93.074186 40.584584,-93.077319 40.584518,-93.07775 40.584513,-93.077788 40.584512,-93.079138 40.584495,-93.083922 40.58437,-93.085272 40.584341,-93.085852 40.584326,-93.089784 40.584262,-93.092044 40.584188,-93.092086 40.584186,-93.092213 40.584182,-93.092256 40.584181,-93.092286 40.58418,-93.092377 40.584176,-93.092408 40.584176,-93.092604 40.584169,-93.09276 40.584163,-93.09285 40.584161,-93.093817 40.584129,-93.09417 40.584118,-93.094795 40.584097,-93.09667 40.584034,-93.097296 40.584014,-93.098529 40.583956,-93.098593 40.583953,-93.101499 40.583874,-93.101566 40.583872,-93.1016 40.583871,-93.101603 40.583871,-93.101615 40.583871,-93.103065 40.583832,-93.103067 40.583832,-93.117909 40.583339,-93.117949 40.583338,-93.117972 40.583337,-93.117977 40.583337,-93.117984 40.583337,-93.117985 40.583336,-93.117988 40.583336,-93.117991 40.583336,-93.117998 40.583336,-93.119806 40.583276,-93.119894 40.583274,-93.119901 40.583274,-93.119905 40.583274,-93.11991 40.583274,-93.119993 40.583272,-93.120004 40.583272,-93.125208 40.583164,-93.127294 40.583103,-93.127315 40.583102,-93.129571 40.583036,-93.129595 40.583036,-93.12981 40.583029,-93.130557 40.583007,-93.130604 40.583006,-93.13253 40.582949,-93.132541 40.582949,-93.132778 40.582942,-93.13278 40.582942,-93.135802 40.582854,-93.141078 40.582793,-93.1444 40.582732,-93.147701 40.58267,-93.147723 40.58267,-93.147776 40.58267,-93.147983 40.582665,-93.14799 40.582665,-93.147997 40.582665,-93.148038 40.582665,-93.157224 40.582497,-93.157602 40.58249,-93.157762 40.582487,-93.157807 40.582486,-93.157833 40.582486,-93.157851 40.582486,-93.157857 40.582486,-93.15792 40.582485,-93.157962 40.582484,-93.159127 40.582463,-93.159222 40.582461,-93.166399 40.58233,-93.166404 40.58233,-93.177659 40.582115,-93.177721 40.582114,-93.177773 40.582113,-93.177778 40.582113,-93.177779 40.582112,-93.177781 40.582112,-93.177788 40.582112,-93.177795 40.582112,-93.1778 40.582112,-93.177833 40.582111,-93.178154 40.582105,-93.183697 40.581999,-93.18371 40.581999,-93.184755 40.581986,-93.185734 40.581973,-93.1858 40.581972,-93.189123 40.58193,-93.189199 40.581929,-93.189208 40.581929,-93.189232 40.581929,-93.189298 40.581928,-93.191332 40.581902,-93.196448 40.581837,-93.196785 40.581833,-93.196877 40.581832,-93.197212 40.58183,-93.197294 40.581829,-93.201236 40.581806,-93.20179 40.581804,-93.204098 40.581765,-93.210739 40.581653,-93.211568 40.581639,-93.212396 40.581625,-93.221626 40.581449,-93.225861 40.581407,-93.230117 40.581363,-93.230848 40.581358,-93.231188 40.581354,-93.231559 40.58135,-93.2316 40.58135,-93.232178 40.581343,-93.232247 40.581342,-93.232261 40.581342,-93.232269 40.581342,-93.232275 40.581342,-93.23228 40.581342,-93.232283 40.581342,-93.232285 40.581341,-93.232307 40.581341,-93.232396 40.58134,-93.232816 40.581335,-93.233744 40.581324,-93.233942 40.581322,-93.233994 40.581321,-93.234372 40.581317,-93.241467 40.58124,-93.241476 40.58124,-93.250552 40.580939,-93.251695 40.580924,-93.258559 40.580838,-93.258566 40.580838,-93.258571 40.580838,-93.258574 40.580838,-93.258577 40.580838,-93.258578 40.580837,-93.258597 40.580837,-93.258613 40.580837,-93.258615 40.580837,-93.258621 40.580837,-93.258627 40.580837,-93.258635 40.580837,-93.258643 40.580837,-93.25865 40.580837,-93.258654 40.580837,-93.258656 40.580836,-93.258658 40.580836,-93.258689 40.580836,-93.260429 40.580814,-93.260444 40.580814,-93.260492 40.580818,-93.260494 40.580818,-93.260496 40.580818,-93.260498 40.580818,-93.2605 40.580818,-93.260502 40.580818,-93.260504 40.580818,-93.260506 40.580818,-93.260508 40.580818,-93.26051 40.580818,-93.260512 40.580818,-93.260514 40.580818,-93.260516 40.580818,-93.260518 40.580818,-93.26052 40.580818,-93.260522 40.580818,-93.260524 40.580818,-93.260526 40.580818,-93.260528 40.580818,-93.26053 40.580818,-93.260532 40.580818,-93.260534 40.580818,-93.260536 40.580818,-93.260538 40.580818,-93.26054 40.580818,-93.260542 40.580818,-93.260544 40.580818,-93.260546 40.580818,-93.260548 40.580818,-93.26055 40.580818,-93.260552 40.580818,-93.260554 40.580818,-93.260556 40.580818,-93.260558 40.580818,-93.260561 40.580818,-93.260564 40.580818,-93.260567 40.580818,-93.26057 40.580818,-93.260573 40.580818,-93.260576 40.580818,-93.260579 40.580818,-93.260582 40.580818,-93.260586 40.580818,-93.26059 40.580818,-93.260594 40.580818,-93.260598 40.580818,-93.260602 40.580818,-93.260607 40.580818,-93.260612 40.580818,-93.260617 40.580818,-93.260623 40.580818,-93.260629 40.580818,-93.260635 40.580818,-93.260642 40.580818,-93.260649 40.580818,-93.260657 40.580818,-93.260665 40.580818,-93.260674 40.580818,-93.260684 40.580818,-93.260695 40.580818,-93.260707 40.580818,-93.26072 40.580818,-93.260734 40.580818,-93.26075 40.580818,-93.260767 40.580818,-93.260786 40.580818,-93.260808 40.580818,-93.260833 40.580818,-93.260861 40.580818,-93.261794 40.580826,-93.262615 40.580817,-93.262637 40.580817,-93.262649 40.580817,-93.262655 40.580817,-93.262656 40.580816,-93.262658 40.580816,-93.262661 40.580816,-93.262706 40.580816,-93.262751 40.580816,-93.262795 40.580816,-93.262837 40.580816,-93.262878 40.580816,-93.262917 40.580816,-93.262955 40.580816,-93.262991 40.580816,-93.263025 40.580816,-93.263057 40.580816,-93.263087 40.580816,-93.263115 40.580816,-93.263141 40.580816,-93.263165 40.580816,-93.263187 40.580816,-93.263207 40.580816,-93.266231 40.580795,-93.266863 40.580794,-93.26687 40.580794,-93.268949 40.580789,-93.268952 40.580789,-93.268963 40.580789,-93.270147 40.580786,-93.271492 40.580781,-93.271494 40.580781,-93.271497 40.580781,-93.271502 40.580781,-93.271512 40.580781,-93.271529 40.580781,-93.271561 40.580781,-93.271622 40.580781,-93.273024 40.580777,-93.273199 40.580778,-93.273211 40.580778,-93.273215 40.580778,-93.273217 40.580778,-93.273541 40.580781,-93.274237 40.580765,-93.275488 40.580748,-93.27782 40.580759,-93.278109 40.580758,-93.278111 40.580758,-93.278118 40.580758,-93.279429 40.580754,-93.279454 40.580754,-93.280406 40.580759,-93.281879 40.58075,-93.281883 40.58075,-93.281901 40.58075,-93.282014 40.580749,-93.282016 40.580749,-93.282018 40.580749,-93.28202 40.580749,-93.282023 40.580749,-93.282027 40.580749,-93.282035 40.580749,-93.282048 40.580749,-93.2829 40.580744,-93.284247 40.580754,-93.284409 40.580755,-93.284542 40.580756,-93.28739 40.580761,-93.287846 40.580762,-93.288331 40.580763,-93.288858 40.580764,-93.288893 40.580774,-93.288897 40.580775,-93.288912 40.580779,-93.288918 40.580781,-93.288971 40.580772,-93.288972 40.580771,-93.288974 40.580771,-93.289082 40.580753,-93.289123 40.580752,-93.28955 40.580746,-93.289678 40.580739,-93.289695 40.580738,-93.289697 40.580738,-93.289702 40.580738,-93.290313 40.580706,-93.290315 40.580706,-93.290317 40.580706,-93.290319 40.580706,-93.29034 40.580705,-93.291041 40.580704,-93.291931 40.580708,-93.291949 40.580715,-93.291951 40.580715,-93.291953 40.580715,-93.291955 40.580715,-93.291957 40.580715,-93.291959 40.580715,-93.291961 40.580715,-93.291963 40.580715,-93.291965 40.580715,-93.291967 40.580715,-93.291969 40.580715,-93.291971 40.580715,-93.291973 40.580715,-93.291975 40.580715,-93.291977 40.580715,-93.291979 40.580715,-93.291981 40.580715,-93.291983 40.580715,-93.291985 40.580715,-93.291987 40.580715,-93.291989 40.580715,-93.291991 40.580715,-93.291993 40.580715,-93.291995 40.580715,-93.291997 40.580715,-93.291999 40.580715,-93.292001 40.580715,-93.292003 40.580715,-93.292006 40.580715,-93.292009 40.580715,-93.292012 40.580715,-93.292015 40.580715,-93.292018 40.580715,-93.292021 40.580715,-93.292024 40.580715,-93.292028 40.580715,-93.292032 40.580715,-93.292036 40.580715,-93.29204 40.580715,-93.292044 40.580715,-93.292049 40.580715,-93.292054 40.580715,-93.292059 40.580715,-93.292064 40.580715,-93.29207 40.580715,-93.292076 40.580715,-93.292082 40.580715,-93.292089 40.580715,-93.292096 40.580715,-93.292103 40.580715,-93.292111 40.580715,-93.292119 40.580715,-93.292128 40.580715,-93.292138 40.580715,-93.292148 40.580715,-93.292159 40.580715,-93.292171 40.580715,-93.292184 40.580715,-93.292198 40.580715,-93.292213 40.580715,-93.29223 40.580715,-93.292248 40.580715,-93.292268 40.580715,-93.293364 40.580736,-93.294442 40.58074,-93.295242 40.580738,-93.295255 40.580738,-93.295296 40.580738,-93.295691 40.580705,-93.296319 40.580712,-93.296325 40.580712,-93.296336 40.580712,-93.2967 40.580716,-93.296734 40.580716,-93.296761 40.580716,-93.296783 40.580716,-93.296801 40.580716,-93.296816 40.580716,-93.296828 40.580716,-93.296838 40.580716,-93.296847 40.580716,-93.296854 40.580716,-93.29686 40.580716,-93.296866 40.580716,-93.296871 40.580716,-93.296875 40.580716,-93.296879 40.580716,-93.296882 40.580716,-93.296885 40.580716,-93.296887 40.580716,-93.296889 40.580716,-93.296891 40.580716,-93.296894 40.580716,-93.296896 40.580716,-93.296898 40.580716,-93.2969 40.580716,-93.296902 40.580716,-93.297272 40.580723,-93.297664 40.580722,-93.297935 40.580731,-93.299702 40.580726,-93.299835 40.580709,-93.300007 40.580687,-93.301175 40.580703,-93.30152 40.580712,-93.30153 40.580712,-93.301535 40.580712,-93.301537 40.580712,-93.301539 40.580712,-93.30154 40.580713,-93.301559 40.580713,-93.302101 40.580726,-93.302934 40.580731,-93.303249 40.580728,-93.303251 40.580728,-93.303254 40.580728,-93.30326 40.580728,-93.303274 40.580728,-93.303807 40.580724,-93.303811 40.580724,-93.305251 40.580713,-93.305439 40.580711,-93.306095 40.58069,-93.307033 40.580715,-93.307037 40.580715,-93.30704 40.580715,-93.307043 40.580715,-93.307045 40.580715,-93.307047 40.580715,-93.307049 40.580715,-93.307051 40.580715,-93.307053 40.580715,-93.307627 40.580731,-93.309059 40.580714,-93.309424 40.580695,-93.309427 40.580695,-93.309431 40.580695,-93.309436 40.580695,-93.309442 40.580695,-93.309449 40.580695,-93.309457 40.580695,-93.30946 40.580695,-93.309462 40.580694,-93.309466 40.580694,-93.309688 40.580681,-93.310441 40.580685,-93.310444 40.580685,-93.310452 40.580685,-93.310475 40.580685,-93.312266 40.580693,-93.312398 40.580688,-93.312456 40.580686,-93.316478 40.58065,-93.317108 40.580653,-93.317278 40.580663,-93.317377 40.58066,-93.317401 40.580659,-93.317404 40.580659,-93.317448 40.580658,-93.317468 40.580657,-93.317486 40.580657,-93.317486 40.580661,-93.317486 40.580674,-93.327761 40.580527,-93.33395 40.580441,-93.334534 40.580442,-93.334628 40.580443,-93.334682 40.580443,-93.334791 40.580443,-93.33837 40.580452,-93.341955 40.580461,-93.345489 40.580514,-93.345496 40.580514,-93.345501 40.580514,-93.345503 40.580514,-93.345529 40.580515,-93.345947 40.580486,-93.345949 40.580486,-93.345952 40.580486,-93.345954 40.580485,-93.345957 40.580485,-93.346392 40.580455,-93.346439 40.580452,-93.346449 40.580458,-93.346451 40.580458,-93.346453 40.580458,-93.346455 40.580458,-93.346457 40.580458,-93.346459 40.580458,-93.346461 40.580458,-93.346463 40.580458,-93.346465 40.580458,-93.346467 40.580458,-93.346469 40.580458,-93.34652 40.580468,-93.346944 40.580464,-93.346946 40.580464,-93.346948 40.580464,-93.34695 40.580464,-93.346952 40.580464,-93.346954 40.580464,-93.346956 40.580464,-93.346958 40.580464,-93.34696 40.580464,-93.346962 40.580464,-93.346964 40.580464,-93.346966 40.580464,-93.346968 40.580464,-93.34697 40.580464,-93.346972 40.580464,-93.346974 40.580464,-93.346976 40.580464,-93.346978 40.580464,-93.346981 40.580464,-93.346984 40.580464,-93.346987 40.580464,-93.34699 40.580464,-93.346993 40.580464,-93.346996 40.580464,-93.347 40.580464,-93.347004 40.580464,-93.347008 40.580464,-93.347012 40.580464,-93.347017 40.580464,-93.347022 40.580464,-93.347027 40.580464,-93.347033 40.580464,-93.347039 40.580464,-93.347046 40.580464,-93.347053 40.580464,-93.347061 40.580464,-93.34707 40.580464,-93.347079 40.580464,-93.347089 40.580464,-93.3471 40.580464,-93.347112 40.580464,-93.347125 40.580464,-93.34714 40.580464,-93.347156 40.580464,-93.347174 40.580464,-93.347194 40.580464,-93.347216 40.580464,-93.347241 40.580464,-93.347269 40.580464,-93.347301 40.580464,-93.347746 40.580462,-93.347929 40.580464,-93.347948 40.580464,-93.347953 40.580464,-93.347954 40.580465,-93.347956 40.580465,-93.347958 40.580465,-93.347967 40.580465,-93.34801 40.580465,-93.348059 40.580465,-93.348114 40.580465,-93.348174 40.580465,-93.348238 40.580465,-93.348305 40.580465,-93.348374 40.580465,-93.348442 40.580465,-93.348476 40.580465,-93.348506 40.580465,-93.348534 40.580465,-93.34856 40.580465,-93.348583 40.580465,-93.348605 40.580465,-93.348625 40.580465,-93.348644 40.580465,-93.348661 40.580465,-93.348677 40.580465,-93.348692 40.580465,-93.348706 40.580465,-93.348719 40.580465,-93.348731 40.580465,-93.348742 40.580465,-93.348753 40.580465,-93.348763 40.580465,-93.348773 40.580465,-93.348782 40.580465,-93.348791 40.580465,-93.348799 40.580465,-93.348807 40.580465,-93.348814 40.580465,-93.348821 40.580465,-93.348827 40.580465,-93.348833 40.580465,-93.348839 40.580465,-93.348845 40.580465,-93.34885 40.580465,-93.348855 40.580465,-93.34886 40.580465,-93.348865 40.580465,-93.348869 40.580465,-93.348873 40.580465,-93.348877 40.580465,-93.348881 40.580465,-93.348885 40.580465,-93.348888 40.580465,-93.348891 40.580465,-93.348894 40.580465,-93.348897 40.580465,-93.3489 40.580465,-93.348903 40.580465,-93.348906 40.580465,-93.348909 40.580465,-93.348911 40.580465,-93.348913 40.580465,-93.348915 40.580465,-93.348917 40.580465,-93.348919 40.580465,-93.348921 40.580465,-93.348923 40.580465,-93.348925 40.580465,-93.348927 40.580465,-93.348929 40.580465,-93.348931 40.580465,-93.348934 40.580465,-93.348936 40.580465,-93.348938 40.580465,-93.34894 40.580465,-93.348942 40.580465,-93.348944 40.580465,-93.348946 40.580465,-93.348948 40.580465,-93.34895 40.580465,-93.348952 40.580465,-93.348954 40.580465,-93.348956 40.580465,-93.348958 40.580465,-93.34896 40.580465,-93.34954 40.580457,-93.350133 40.580444,-93.350884 40.580439,-93.350962 40.58044,-93.351442 40.580446,-93.354122 40.580409,-93.354147 40.580409,-93.354148 40.580408,-93.35415 40.580408,-93.354154 40.580408,-93.354161 40.580408,-93.354171 40.580408,-93.354919 40.580398,-93.355606 40.580398,-93.356633 40.580398,-93.357339 40.580386,-93.357342 40.580386,-93.357344 40.580385,-93.357348 40.580385,-93.357356 40.580385,-93.357369 40.580385,-93.357382 40.580385,-93.358105 40.580372,-93.360776 40.58036,-93.36079 40.58036,-93.360807 40.58036,-93.361701 40.580348,-93.362626 40.580337,-93.363247 40.580329,-93.363268 40.580329,-93.363284 40.580329,-93.363288 40.580329,-93.36329 40.580329,-93.363291 40.580328,-93.363293 40.580328,-93.363302 40.580328,-93.363337 40.580328,-93.363358 40.580328,-93.363453 40.580327,-93.363731 40.580326,-93.363767 40.580326,-93.363795 40.580326,-93.364048 40.580325,-93.364173 40.580324,-93.365978 40.580316,-93.367935 40.580323,-93.36826 40.58032,-93.369436 40.58031,-93.369446 40.58031,-93.369448 40.580311,-93.36945 40.580311,-93.369453 40.580311,-93.369665 40.580331,-93.369667 40.580331,-93.369687 40.580333,-93.369697 40.580335,-93.369699 40.580336,-93.369707 40.580338,-93.36972 40.580341,-93.369736 40.580345,-93.36974 40.580346,-93.369742 40.580347,-93.369746 40.580348,-93.369761 40.580352,-93.369817 40.580366,-93.369917 40.580391,-93.369919 40.580392,-93.369924 40.580393,-93.369958 40.580401,-93.370069 40.580443,-93.370173 40.580501,-93.370181 40.580505,-93.370187 40.580508,-93.370202 40.580527,-93.370336 40.580437,-93.370519 40.580357,-93.370653 40.580327,-93.370858 40.580319,-93.371613 40.580303,-93.372707 40.5803,-93.372956 40.580304,-93.372991 40.580305,-93.373044 40.580306,-93.373066 40.580306,-93.373084 40.580306,-93.373677 40.580315,-93.37419 40.580328,-93.374194 40.580328,-93.37421 40.580328,-93.374257 40.580329,-93.374263 40.580329,-93.374265 40.580329,-93.374268 40.58033,-93.374271 40.58033,-93.37428 40.58033,-93.374286 40.58033,-93.374386 40.580333,-93.375499 40.58036,-93.376185 40.580369,-93.376542 40.580369,-93.376994 40.580333,-93.378484 40.580215,-93.378954 40.580199,-93.379774 40.580214,-93.380262 40.580237,-93.380422 40.580238,-93.381041 40.58023,-93.381312 40.580227,-93.385535 40.580194,-93.385601 40.580193,-93.385893 40.580194,-93.3861 40.580195,-93.386299 40.580223,-93.38657 40.580273,-93.38683 40.580331,-93.387026 40.580346,-93.387346 40.580321,-93.387798 40.580295,-93.388225 40.580289,-93.389032 40.580269,-93.389888 40.580262,-93.390791 40.58027,-93.392543 40.580255,-93.392935 40.580238,-93.393318 40.580204,-93.393716 40.580158,-93.39851 40.580105,-93.398817 40.580106,-93.401005 40.580115,-93.402822 40.580102,-93.404136 40.580104,-93.406476 40.580096,-93.408386 40.580111,-93.409229 40.580097,-93.41003 40.580091,-93.41022 40.58009,-93.410954 40.580084,-93.412247 40.580086,-93.412793 40.580096,-93.412847 40.580113,-93.413102 40.58011,-93.41457 40.580095,-93.416373 40.580092,-93.417482 40.580081,-93.419111 40.580075,-93.420341 40.580066,-93.42199 40.580029,-93.422546 40.580018,-93.424809 40.580017,-93.425074 40.580016,-93.42995 40.580001,-93.432014 40.579979,-93.435348 40.579967,-93.435786 40.579962,-93.4375 40.57994,-93.441647 40.579951,-93.455089 40.580013,-93.465297 40.580164,-93.466887 40.580072,-93.485195 40.580386,-93.488329 40.580384,-93.489046 40.580384,-93.496899 40.580381,-93.4978 40.580351,-93.497877 40.580348,-93.497915 40.580347,-93.500218 40.58027,-93.504584 40.580294,-93.509487 40.580322,-93.509685 40.580346,-93.509896 40.580351,-93.510053 40.580355,-93.510157 40.580358,-93.513635 40.580393,-93.515441 40.580411,-93.5155 40.580412,-93.516593 40.58042,-93.518876 40.58044,-93.520244 40.580439,-93.520549 40.580439,-93.520934 40.580439,-93.521154 40.58044,-93.521651 40.580442,-93.521919 40.580443,-93.5224 40.580445,-93.52274 40.580446,-93.522902 40.580447,-93.523242 40.580455,-93.523307 40.580457,-93.52332 40.580457,-93.523397 40.580459,-93.523939 40.580473,-93.524597 40.580489,-93.525227 40.580505,-93.525695 40.580503,-93.525792 40.580503,-93.526315 40.580502,-93.526709 40.580501,-93.526918 40.580499,-93.526969 40.580499,-93.527057 40.580498,-93.527116 40.580497,-93.527274 40.580496,-93.527331 40.580487,-93.527609 40.580448,-93.528177 40.580367,-93.532717 40.580335,-93.532803 40.580335,-93.53293 40.580335,-93.542464 40.580333,-93.547578 40.580407,-93.54762 40.580394,-93.54765 40.580391,-93.547848 40.580371,-93.547975 40.580368,-93.548615 40.58037,-93.552386 40.580315,-93.55339 40.5803,-93.553417 40.5803,-93.553557 40.580287,-93.553988 40.58028,-93.556899 40.580235,-93.558951 40.580112,-93.55917 40.580148,-93.560029 40.580158,-93.560796 40.580147,-93.565176 40.580087,-93.565657 40.580093,-93.56575 40.580094,-93.565809 40.580095,-93.565951 40.580097,-93.566181 40.580106,-93.566184 40.580106,-93.566186 40.580106,-93.566196 40.580106,-93.566406 40.580115,-93.566414 40.580115,-93.566423 40.580115,-93.566428 40.580115,-93.56643 40.580115,-93.566431 40.580116,-93.566433 40.580116,-93.566519 40.58012,-93.566524 40.58012,-93.566528 40.58012,-93.566975 40.580138,-93.567659 40.580111,-93.567662 40.580111,-93.567666 40.580111,-93.567814 40.580105,-93.567816 40.580105,-93.568517 40.580077,-93.568705 40.580072,-93.573431 40.579957,-93.57344 40.579957,-93.573452 40.579957,-93.573454 40.579957,-93.573456 40.579957,-93.573457 40.579956,-93.573461 40.579956,-93.573468 40.579956,-93.573522 40.579955,-93.573541 40.579955,-93.578183 40.579843,-93.580762 40.579793,-93.58339 40.579734,-93.583392 40.579734,-93.58596 40.579677,-93.586994 40.579662,-93.588063 40.579634,-93.589545 40.579618,-93.591164 40.579568,-93.596292 40.579455,-93.596295 40.579455,-93.596693 40.579446,-93.59713 40.579444,-93.597133 40.579443,-93.597135 40.579443,-93.597137 40.579443,-93.597139 40.579443,-93.597141 40.579443,-93.597144 40.579443,-93.597377 40.579431,-93.597381 40.579431,-93.610511 40.57918,-93.613997 40.579132,-93.616406 40.579099,-93.62316 40.579005,-93.623317 40.579001,-93.625221 40.578812,-93.631012 40.578724,-93.637169 40.578631,-93.64662 40.578493,-93.646992 40.578488,-93.647003 40.578488,-93.656211 40.578352,-93.659272 40.57833,-93.660353 40.578376,-93.661913 40.578354,-93.662538 40.57834,-93.66254 40.57834,-93.662542 40.57834,-93.662546 40.57834,-93.662551 40.57834,-93.662556 40.57834,-93.66256 40.57834,-93.662561 40.578339,-93.662563 40.578339,-93.662786 40.578334,-93.663027 40.578329,-93.666912 40.578242,-93.666985 40.57824,-93.668825 40.578241,-93.668845 40.578241,-93.669106 40.578232,-93.670629 40.578177,-93.671249 40.578173,-93.675748 40.57815,-93.677155 40.578088,-93.677407 40.578095,-93.677567 40.578099,-93.682522 40.578037,-93.682542 40.578037,-93.682567 40.578037,-93.682629 40.578036,-93.682673 40.578035,-93.682897 40.578032,-93.684023 40.578014,-93.684029 40.578014,-93.684031 40.578014,-93.684033 40.578013,-93.684036 40.578013,-93.684047 40.578013,-93.684059 40.578013,-93.684133 40.578012,-93.68422 40.578011,-93.686819 40.577971,-93.690051 40.577899,-93.690216 40.577902,-93.69035 40.5779,-93.694367 40.577841,-93.694461 40.57784,-93.699638 40.577798,-93.699862 40.577796,-93.720223 40.577629,-93.722386 40.577641,-93.72239 40.577641,-93.7224 40.577641,-93.722443 40.577641,-93.725671 40.577589,-93.725884 40.577586,-93.725893 40.577586,-93.725908 40.577586,-93.725923 40.577586,-93.725928 40.577586,-93.725929 40.577585,-93.725931 40.577585,-93.725933 40.577585,-93.725942 40.577585,-93.727214 40.577565,-93.728144 40.57755,-93.728355 40.577547,-93.737259 40.577542,-93.738236 40.577537,-93.741156 40.577525,-93.74182 40.577522,-93.742929 40.577516,-93.742978 40.577489,-93.742996 40.577477,-93.74306 40.577456,-93.74316 40.577448,-93.74324 40.577453,-93.743242 40.577453,-93.743244 40.577453,-93.743247 40.577453,-93.743811 40.577483,-93.743817 40.577483,-93.744285 40.577483,-93.745101 40.577507,-93.745215 40.57751,-93.745669 40.577524,-93.745674 40.577524,-93.74568 40.577524,-93.746218 40.57754,-93.747848 40.577567,-93.747866 40.577567,-93.749506 40.577593,-93.749515 40.577593,-93.750219 40.577605,-93.750225 40.577605,-93.750671 40.577612,-93.751901 40.577606,-93.751924 40.577606,-93.753676 40.577598,-93.757507 40.57758,-93.761462 40.577536,-93.76348 40.577519,-93.763485 40.577519,-93.765968 40.577498,-93.766777 40.577481,-93.76698 40.577489,-93.769341 40.577497,-93.770336 40.577507,-93.770348 40.577507,-93.770358 40.577507,-93.770366 40.577507,-93.770373 40.577507,-93.770378 40.577507,-93.770382 40.577507,-93.770386 40.577507,-93.770389 40.577507,-93.770391 40.577507,-93.770393 40.577507,-93.770395 40.577507,-93.770397 40.577507,-93.770399 40.577507,-93.770401 40.577507,-93.770403 40.577507,-93.774344 40.577548,-93.779954 40.577459,-93.780952 40.577437,-93.781204 40.577432,-93.781219 40.577432,-93.781242 40.577432,-93.781287 40.577431,-93.781391 40.577429,-93.781539 40.577426,-93.783462 40.57739,-93.783652 40.577367,-93.783817 40.577348,-93.783853 40.577344,-93.784062 40.577346,-93.784422 40.577349,-93.784451 40.577349,-93.784503 40.577349,-93.784606 40.57735,-93.784845 40.577352,-93.785302 40.577356,-93.786869 40.577369,-93.789408 40.577391,-93.801249 40.577338,-93.801374 40.577338,-93.802679 40.577334,-93.807953 40.577319,-93.815485 40.577277,-93.815718 40.577263,-93.815749 40.577237,-93.815805 40.577164,-93.816054 40.577124,-93.816667 40.57711,-93.817605 40.577104,-93.818666 40.577081,-93.818857 40.577096,-93.818861 40.577096,-93.819416 40.57714,-93.824774 40.577046,-93.831056 40.576936,-93.84093 40.576791,-93.843248 40.576758,-93.849243 40.576672,-93.853906 40.576605,-93.854319 40.576589,-93.855644 40.576589,-93.856105 40.576577,-93.856121 40.576577,-93.858219 40.576522,-93.859169 40.576505,-93.859461 40.576501,-93.860557 40.576486,-93.860919 40.576476,-93.860924 40.576476,-93.861316 40.576465,-93.861329 40.576465,-93.863007 40.57642,-93.863037 40.57642,-93.866407 40.576375,-93.868983 40.576356,-93.870646 40.576334,-93.871226 40.576332,-93.873322 40.576323,-93.875434 40.576298,-93.877604 40.576279,-93.877648 40.576279,-93.877923 40.576274,-93.880198 40.576233,-93.881885 40.57622,-93.88316 40.576191,-93.883985 40.576156,-93.885285 40.576137,-93.886648 40.576126,-93.887848 40.576088,-93.88851 40.576055,-93.889023 40.576022,-93.889048 40.576021,-93.889054 40.576021,-93.890535 40.575991,-93.89166 40.575983,-93.892448 40.575967,-93.893148 40.575933,-93.894155 40.575919,-93.894189 40.575919,-93.894856 40.57591,-93.895587 40.575905,-93.897491 40.575876,-93.897768 40.575865,-93.898175 40.575849,-93.898361 40.575827,-93.898437 40.575818,-93.899348 40.575799,-93.899542 40.575838,-93.899905 40.575845,-93.900855 40.575815,-93.900857 40.575815,-93.90128 40.575806,-93.902905 40.575793,-93.904643 40.57576,-93.905956 40.57574,-93.907992 40.575717,-93.908025 40.575717,-93.910894 40.575682,-93.911299 40.575671,-93.911336 40.57567,-93.913719 40.575603,-93.914179 40.575596,-93.914227 40.575595,-93.915319 40.575581,-93.915644 40.575597,-93.916132 40.575584,-93.916656 40.575551,-93.917069 40.575538,-93.919456 40.575481,-93.919891 40.575482,-93.919919 40.575482,-93.920482 40.575483,-93.921844 40.575472,-93.924232 40.575424,-93.925288 40.575395,-93.926232 40.57537,-93.926982 40.575354,-93.927521 40.57535,-93.927835 40.575347,-93.928382 40.575343,-93.929095 40.575347,-93.929695 40.575313,-93.930407 40.575298,-93.930826 40.575295,-93.931195 40.575292,-93.93392 40.57526,-93.934476 40.57525,-93.934489 40.57525,-93.934845 40.575243,-93.935445 40.575238,-93.935758 40.575227,-93.935769 40.575227,-93.936028 40.575219,-93.936111 40.575216,-93.936545 40.575201,-93.937106 40.575209,-93.937383 40.575213,-93.937644 40.575207,-93.93765 40.575207,-93.937675 40.575207,-93.93778 40.575205,-93.937989 40.575201,-93.938622 40.57519,-93.938631 40.57519,-93.938838 40.575186,-93.938954 40.575184,-93.938997 40.575183,-93.939024 40.575183,-93.939036 40.575183,-93.939207 40.57518,-93.939235 40.57518,-93.9395 40.575175,-93.939846 40.575186,-93.939856 40.575186,-93.939967 40.57519,-93.9404 40.575168,-93.940987 40.575164,-93.941425 40.57515,-93.942512 40.575142,-93.943 40.575138,-93.943562 40.575114,-93.9452 40.575081,-93.946087 40.575074,-93.946112 40.575074,-93.948088 40.575048,-93.949613 40.575017,-93.949643 40.575017,-93.950438 40.575019,-93.951688 40.57499,-93.954425 40.574949,-93.954551 40.574947,-93.955901 40.574936,-93.957689 40.574912,-93.958789 40.574893,-93.960989 40.574865,-93.962314 40.574835,-93.963743 40.574823,-93.963777 40.574823,-93.964827 40.574795,-93.966002 40.574785,-93.967965 40.574759,-93.970478 40.574718,-93.970515 40.574717,-93.972052 40.574687,-93.97279 40.574681,-93.973815 40.574663,-93.974516 40.57464,-93.974528 40.57464,-93.974621 40.574637,-93.974653 40.574637,-93.97519 40.574632,-93.97533 40.574628,-93.975338 40.574628,-93.975505 40.574623,-93.976115 40.574605,-93.976502 40.574602,-93.976667 40.574633,-93.97677 40.574635,-93.983283 40.574461,-93.987095 40.574364,-93.98743 40.57436,-94.000197 40.574335,-94.001512 40.574229,-94.001546 40.574226,-94.003323 40.574096,-94.011799 40.573961,-94.013902 40.573927,-94.014513 40.573924,-94.014629 40.573923,-94.014743 40.573922,-94.014847 40.573921,-94.015082 40.573918,-94.015492 40.573914))"; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/cunit/cu_triangulate.c��������������������������������������������0000644�0000000�0000000�00000002771�11772614047�022055� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "CUnit/Basic.h" #include "cu_tester.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" static void test_lwgeom_delaunay_triangulation(void) { #if POSTGIS_GEOS_VERSION >= 34 LWGEOM *in, *tmp, *out; char *wkt, *exp_wkt; /* Because i don't trust that much prior tests... ;) */ cu_error_msg_reset(); in = lwgeom_from_wkt("MULTIPOINT(10 0, 20 0, 5 5)", LW_PARSER_CHECK_NONE); tmp = lwgeom_delaunay_triangulation(in, 0, 0); lwgeom_free(in); out = lwgeom_normalize(tmp); lwgeom_free(tmp); wkt = lwgeom_to_ewkt(out); lwgeom_free(out); exp_wkt = "GEOMETRYCOLLECTION(POLYGON((5 5,20 0,10 0,5 5)))"; if ( strcmp(wkt, exp_wkt) ) { fprintf(stderr, "\nExp: %s\nObt: %s\n", exp_wkt, wkt); } CU_ASSERT_STRING_EQUAL(wkt, exp_wkt); lwfree(wkt); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /* ** Used by test harness to register the tests in this file. */ CU_TestInfo triangulate_tests[] = { PG_TEST(test_lwgeom_delaunay_triangulation), CU_TEST_INFO_NULL }; CU_SuiteInfo triangulate_suite = {"triangulate", NULL, NULL, triangulate_tests}; �������postgis-2.1.2+dfsg.orig/liblwgeom/lwline.c����������������������������������������������������������0000644�0000000�0000000�00000025411�12062320470�017176� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* basic LWLINE functions */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" /* * Construct a new LWLINE. points will *NOT* be copied * use SRID=SRID_UNKNOWN for unknown SRID (will have 8bit type's S = 0) */ LWLINE * lwline_construct(int srid, GBOX *bbox, POINTARRAY *points) { LWLINE *result; result = (LWLINE*) lwalloc(sizeof(LWLINE)); LWDEBUG(2, "lwline_construct called."); result->type = LINETYPE; result->flags = points->flags; FLAGS_SET_BBOX(result->flags, bbox?1:0); LWDEBUGF(3, "lwline_construct type=%d", result->type); result->srid = srid; result->points = points; result->bbox = bbox; return result; } LWLINE * lwline_construct_empty(int srid, char hasz, char hasm) { LWLINE *result = lwalloc(sizeof(LWLINE)); result->type = LINETYPE; result->flags = gflags(hasz,hasm,0); result->srid = srid; result->points = ptarray_construct_empty(hasz, hasm, 1); result->bbox = NULL; return result; } void lwline_free (LWLINE *line) { if ( ! line ) return; if ( line->bbox ) lwfree(line->bbox); if ( line->points ) ptarray_free(line->points); lwfree(line); } void printLWLINE(LWLINE *line) { lwnotice("LWLINE {"); lwnotice(" ndims = %i", (int)FLAGS_NDIMS(line->flags)); lwnotice(" srid = %i", (int)line->srid); printPA(line->points); lwnotice("}"); } /* @brief Clone LWLINE object. Serialized point lists are not copied. * * @see ptarray_clone */ LWLINE * lwline_clone(const LWLINE *g) { LWLINE *ret = lwalloc(sizeof(LWLINE)); LWDEBUGF(2, "lwline_clone called with %p", g); memcpy(ret, g, sizeof(LWLINE)); ret->points = ptarray_clone(g->points); if ( g->bbox ) ret->bbox = gbox_copy(g->bbox); return ret; } /* Deep clone LWLINE object. POINTARRAY *is* copied. */ LWLINE * lwline_clone_deep(const LWLINE *g) { LWLINE *ret = lwalloc(sizeof(LWLINE)); LWDEBUGF(2, "lwline_clone_deep called with %p", g); memcpy(ret, g, sizeof(LWLINE)); if ( g->bbox ) ret->bbox = gbox_copy(g->bbox); if ( g->points ) ret->points = ptarray_clone_deep(g->points); FLAGS_SET_READONLY(ret->flags,0); return ret; } void lwline_release(LWLINE *lwline) { lwgeom_release(lwline_as_lwgeom(lwline)); } void lwline_reverse(LWLINE *line) { if ( lwline_is_empty(line) ) return; ptarray_reverse(line->points); } LWLINE * lwline_segmentize2d(LWLINE *line, double dist) { return lwline_construct(line->srid, NULL, ptarray_segmentize2d(line->points, dist)); } /* check coordinate equality */ char lwline_same(const LWLINE *l1, const LWLINE *l2) { return ptarray_same(l1->points, l2->points); } /* * Construct a LWLINE from an array of point and line geometries * LWLINE dimensions are large enough to host all input dimensions. */ LWLINE * lwline_from_lwgeom_array(int srid, uint32_t ngeoms, LWGEOM **geoms) { int i; int hasz = LW_FALSE; int hasm = LW_FALSE; POINTARRAY *pa; LWLINE *line; POINT4D pt; /* * Find output dimensions, check integrity */ for (i=0; i<ngeoms; i++) { if ( FLAGS_GET_Z(geoms[i]->flags) ) hasz = LW_TRUE; if ( FLAGS_GET_M(geoms[i]->flags) ) hasm = LW_TRUE; if ( hasz && hasm ) break; /* Nothing more to learn! */ } /* ngeoms should be a guess about how many points we have in input */ pa = ptarray_construct_empty(hasz, hasm, ngeoms); for ( i=0; i < ngeoms; i++ ) { LWGEOM *g = geoms[i]; if ( lwgeom_is_empty(g) ) continue; if ( g->type == POINTTYPE ) { lwpoint_getPoint4d_p((LWPOINT*)g, &pt); ptarray_append_point(pa, &pt, LW_TRUE); } else if ( g->type == LINETYPE ) { ptarray_append_ptarray(pa, ((LWLINE*)g)->points, -1); } else { ptarray_free(pa); lwerror("lwline_from_ptarray: invalid input type: %s", lwtype_name(g->type)); return NULL; } } if ( pa->npoints > 0 ) line = lwline_construct(srid, NULL, pa); else { /* Is this really any different from the above ? */ ptarray_free(pa); line = lwline_construct_empty(srid, hasz, hasm); } return line; } /* * Construct a LWLINE from an array of LWPOINTs * LWLINE dimensions are large enough to host all input dimensions. */ LWLINE * lwline_from_ptarray(int srid, uint32_t npoints, LWPOINT **points) { int i; int hasz = LW_FALSE; int hasm = LW_FALSE; POINTARRAY *pa; LWLINE *line; POINT4D pt; /* * Find output dimensions, check integrity */ for (i=0; i<npoints; i++) { if ( points[i]->type != POINTTYPE ) { lwerror("lwline_from_ptarray: invalid input type: %s", lwtype_name(points[i]->type)); return NULL; } if ( FLAGS_GET_Z(points[i]->flags) ) hasz = LW_TRUE; if ( FLAGS_GET_M(points[i]->flags) ) hasm = LW_TRUE; if ( hasz && hasm ) break; /* Nothing more to learn! */ } pa = ptarray_construct_empty(hasz, hasm, npoints); for ( i=0; i < npoints; i++ ) { if ( ! lwpoint_is_empty(points[i]) ) { lwpoint_getPoint4d_p(points[i], &pt); ptarray_append_point(pa, &pt, LW_TRUE); } } if ( pa->npoints > 0 ) line = lwline_construct(srid, NULL, pa); else line = lwline_construct_empty(srid, hasz, hasm); return line; } /* * Construct a LWLINE from a LWMPOINT */ LWLINE * lwline_from_lwmpoint(int srid, LWMPOINT *mpoint) { uint32_t i; POINTARRAY *pa; char zmflag = FLAGS_GET_ZM(mpoint->flags); size_t ptsize, size; uint8_t *newpoints, *ptr; if ( zmflag == 0 ) ptsize=2*sizeof(double); else if ( zmflag == 3 ) ptsize=4*sizeof(double); else ptsize=3*sizeof(double); /* Allocate space for output points */ size = ptsize*mpoint->ngeoms; newpoints = lwalloc(size); memset(newpoints, 0, size); ptr=newpoints; for (i=0; i<mpoint->ngeoms; i++) { memcpy(ptr, getPoint_internal(mpoint->geoms[i]->point, 0), ptsize); ptr+=ptsize; } pa = ptarray_construct_reference_data(zmflag&2, zmflag&1, mpoint->ngeoms, newpoints); LWDEBUGF(3, "lwline_from_lwmpoint: constructed pointarray for %d points, %d zmflag", mpoint->ngeoms, zmflag); return lwline_construct(srid, NULL, pa); } /** * Returns freshly allocated #LWPOINT that corresponds to the index where. * Returns NULL if the geometry is empty or the index invalid. */ LWPOINT* lwline_get_lwpoint(LWLINE *line, int where) { POINT4D pt; LWPOINT *lwpoint; POINTARRAY *pa; if ( lwline_is_empty(line) || where < 0 || where >= line->points->npoints ) return NULL; pa = ptarray_construct_empty(FLAGS_GET_Z(line->flags), FLAGS_GET_M(line->flags), 1); pt = getPoint4d(line->points, where); ptarray_append_point(pa, &pt, LW_TRUE); lwpoint = lwpoint_construct(line->srid, NULL, pa); return lwpoint; } int lwline_add_lwpoint(LWLINE *line, LWPOINT *point, int where) { POINT4D pt; getPoint4d_p(point->point, 0, &pt); return ptarray_insert_point(line->points, &pt, where); } LWLINE * lwline_removepoint(LWLINE *line, uint32_t index) { POINTARRAY *newpa; LWLINE *ret; newpa = ptarray_removePoint(line->points, index); ret = lwline_construct(line->srid, NULL, newpa); lwgeom_add_bbox((LWGEOM *) ret); return ret; } /* * Note: input will be changed, make sure you have permissions for this. */ void lwline_setPoint4d(LWLINE *line, uint32_t index, POINT4D *newpoint) { ptarray_set_point4d(line->points, index, newpoint); /* Update the box, if there is one to update */ if ( line->bbox ) { lwgeom_drop_bbox((LWGEOM*)line); lwgeom_add_bbox((LWGEOM*)line); } } /** * Re-write the measure ordinate (or add one, if it isn't already there) interpolating * the measure between the supplied start and end values. */ LWLINE* lwline_measured_from_lwline(const LWLINE *lwline, double m_start, double m_end) { int i = 0; int hasm = 0, hasz = 0; int npoints = 0; double length = 0.0; double length_so_far = 0.0; double m_range = m_end - m_start; double m; POINTARRAY *pa = NULL; POINT3DZ p1, p2; if ( lwline->type != LINETYPE ) { lwerror("lwline_construct_from_lwline: only line types supported"); return NULL; } hasz = FLAGS_GET_Z(lwline->flags); hasm = 1; /* Null points or npoints == 0 will result in empty return geometry */ if ( lwline->points ) { npoints = lwline->points->npoints; length = ptarray_length_2d(lwline->points); getPoint3dz_p(lwline->points, 0, &p1); } pa = ptarray_construct(hasz, hasm, npoints); for ( i = 0; i < npoints; i++ ) { POINT4D q; POINT2D a, b; getPoint3dz_p(lwline->points, i, &p2); a.x = p1.x; a.y = p1.y; b.x = p2.x; b.y = p2.y; length_so_far += distance2d_pt_pt(&a, &b); if ( length > 0.0 ) m = m_start + m_range * length_so_far / length; else m = 0.0; q.x = p2.x; q.y = p2.y; q.z = p2.z; q.m = m; ptarray_set_point4d(pa, i, &q); p1 = p2; } return lwline_construct(lwline->srid, NULL, pa); } LWGEOM* lwline_remove_repeated_points(LWLINE *lwline) { POINTARRAY* npts = ptarray_remove_repeated_points(lwline->points); LWDEBUGF(3, "lwline_remove_repeated_points: npts %p", npts); return (LWGEOM*)lwline_construct(lwline->srid, lwline->bbox ? gbox_copy(lwline->bbox) : 0, npts); } int lwline_is_closed(const LWLINE *line) { if (FLAGS_GET_Z(line->flags)) return ptarray_is_closed_3d(line->points); return ptarray_is_closed_2d(line->points); } LWLINE* lwline_force_dims(const LWLINE *line, int hasz, int hasm) { POINTARRAY *pdims = NULL; LWLINE *lineout; /* Return 2D empty */ if( lwline_is_empty(line) ) { lineout = lwline_construct_empty(line->srid, hasz, hasm); } else { pdims = ptarray_force_dims(line->points, hasz, hasm); lineout = lwline_construct(line->srid, NULL, pdims); } lineout->type = line->type; return lineout; } int lwline_is_empty(const LWLINE *line) { if ( !line->points || line->points->npoints < 1 ) return LW_TRUE; return LW_FALSE; } int lwline_count_vertices(LWLINE *line) { assert(line); if ( ! line->points ) return 0; return line->points->npoints; } LWLINE* lwline_simplify(const LWLINE *iline, double dist) { LWLINE *oline; LWDEBUG(2, "function called"); /* Skip empty case */ if( lwline_is_empty(iline) ) return lwline_clone(iline); static const int minvertices = 0; /* TODO: allow setting this */ oline = lwline_construct(iline->srid, NULL, ptarray_simplify(iline->points, dist, minvertices)); oline->type = iline->type; return oline; } double lwline_length(const LWLINE *line) { if ( lwline_is_empty(line) ) return 0.0; return ptarray_length(line->points); } double lwline_length_2d(const LWLINE *line) { if ( lwline_is_empty(line) ) return 0.0; return ptarray_length_2d(line->points); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/Makefile.in�������������������������������������������������������0000644�0000000�0000000�00000007463�12142775451�017630� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * $Id: Makefile.in # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** CC = @CC@ CFLAGS = @CFLAGS@ @PICFLAGS@ @WARNFLAGS@ @GEOS_CPPFLAGS@ @PROJ_CPPFLAGS@ @JSON_CPPFLAGS@ LDFLAGS = @LDFLAGS@ @GEOS_LDFLAGS@ -lgeos_c @PROJ_LDFLAGS@ -lproj @JSON_LDFLAGS@ NUMERICFLAGS = @NUMERICFLAGS@ top_builddir = @top_builddir@ prefix = @prefix@ exec_prefix = @exec_prefix@ libdir = @libdir@ includedir = @includedir@ SHELL = @SHELL@ INSTALL = $(SHELL) ../install-sh LIBTOOL = @LIBTOOL@ SOVER = @POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@.@POSTGIS_MICRO_VERSION@ YACC=@YACC@ LEX=@LEX@ %c: %l @echo "WARNING: Lexer not generated. Run 'make parse' to manually build lexer/parser." # Standalone LWGEOM objects SA_OBJS = \ stringbuffer.o \ measures.o \ measures3d.o \ box2d.o \ ptarray.o \ lwgeom_api.o \ lwgeom.o \ lwpoint.o \ lwline.o \ lwpoly.o \ lwtriangle.o \ lwmpoint.o \ lwmline.o \ lwmpoly.o \ lwcollection.o \ lwcircstring.o \ lwcompound.o \ lwcurvepoly.o \ lwmcurve.o \ lwmsurface.o \ lwpsurface.o \ lwtin.o \ lwout_wkb.o \ lwin_geojson.o \ lwin_wkb.o \ lwout_wkt.o \ lwin_wkt_parse.o \ lwin_wkt_lex.o \ lwin_wkt.o \ lwutil.o \ lwhomogenize.o \ lwalgorithm.o \ lwsegmentize.o \ lwlinearreferencing.o \ lwprint.o \ vsprintf.o \ g_box.o \ g_serialized.o \ g_util.o \ lwgeodetic.o \ lwgeodetic_tree.o \ lwtree.o \ lwout_gml.o \ lwout_kml.o \ lwout_geojson.o \ lwout_svg.o \ lwout_x3d.o \ lwgeom_debug.o \ lwgeom_geos.o \ lwgeom_geos_clean.o \ lwgeom_geos_node.o \ lwgeom_geos_split.o \ lwgeom_transform.o NM_OBJS = \ lwspheroid.o ifeq (@SFCGAL@,sfcgal) CFLAGS += @SFCGAL_CPPFLAGS@ LDFLAGS += @SFCGAL_LDFLAGS@ SA_OBJS += lwgeom_sfcgal.o endif LT_SA_OBJS = $(SA_OBJS:.o=.lo) LT_NM_OBJS = $(NM_OBJS:.o=.lo) LT_OBJS = $(LT_SA_OBJS) $(LT_NM_OBJS) SA_HEADERS = \ liblwgeom.h \ liblwgeom_internal.h \ lwgeom_log.h \ lwgeom_geos.h all: liblwgeom.la install: install-liblwgeom uninstall: uninstall-liblwgeom install-liblwgeom: liblwgeom.la $(LIBTOOL) --mode=install $(INSTALL) liblwgeom.la "$(DESTDIR)$(libdir)/liblwgeom.la" $(INSTALL) liblwgeom.h "$(DESTDIR)$(includedir)/liblwgeom.h" uninstall-liblwgeom: $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/liblwgeom.la" # Make all objects depend upon postgis_config.h and postgis_svn_revision.h $(LT_OBJS): ../postgis_config.h ../postgis_svn_revision.h ../postgis_svn_revision.h: $(MAKE) -C .. postgis_svn_revision.h #liblwgeom.a: $(SA_OBJS) $(NM_OBJS) $(SA_HEADERS) #ar rs liblwgeom.a $(SA_OBJS) $(NM_OBJS) liblwgeom.la: $(LT_OBJS) $(SA_HEADERS) $(LIBTOOL) --tag=CC --mode=link $(CC) -rpath $(libdir) $(LT_OBJS) -release $(SOVER) $(LDFLAGS) -o $@ maintainer-clean: clean rm -f lwin_wkt_lex.c rm -f lwin_wkt_parse.h rm -f lwin_wkt_parse.c clean: $(MAKE) -C cunit clean rm -f $(LT_OBJS) $(SA_OBJS) $(NM_OBJS) rm -f liblwgeom.la rm -rf .libs distclean: clean $(MAKE) -C cunit distclean rm -f liblwgeom.h Makefile rm -f Makefile check: liblwgeom.la $(MAKE) -C cunit check # Command to build each of the .lo files $(LT_SA_OBJS): %.lo: %.c $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c -o $@ $< $(LT_NM_OBJS): %.lo: %.c $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(NUMERICFLAGS) -c -o $@ $< # Manually generate WKT parser from Flex/Bison inputs # Bison 2.5, Flex 2.5.35 parser: $(YACC) -o'lwin_wkt_parse.c' -d lwin_wkt_parse.y $(LEX) -i lwin_wkt_lex.l # $(YACC) --debug --verbose -o'$@' -d $< # $(YACC) -o'$@' -d $^ # $(LEX) -i $< liblwgeom.h: liblwgeom.h.in cd .. && ./config.status �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwhomogenize.c����������������������������������������������������0000644�0000000�0000000�00000013622�12065037630�020422� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwhomogenize.c 10896 2012-12-21 10:53:12Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdlib.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" typedef struct { int cnt[NUMTYPES]; LWCOLLECTION* buf[NUMTYPES]; } HomogenizeBuffer; static void init_homogenizebuffer(HomogenizeBuffer *buffer) { int i; for ( i = 0; i < NUMTYPES; i++ ) { buffer->cnt[i] = 0; buffer->buf[i] = NULL; } } /* static void free_homogenizebuffer(HomogenizeBuffer *buffer) { int i; for ( i = 0; i < NUMTYPES; i++ ) { if ( buffer->buf[i] ) { lwcollection_free(buffer->buf[i]); } } } */ /* ** Given a generic collection, return the "simplest" form. ** ** eg: GEOMETRYCOLLECTION(MULTILINESTRING()) => MULTILINESTRING() ** ** GEOMETRYCOLLECTION(MULTILINESTRING(), MULTILINESTRING(), POINT()) ** => GEOMETRYCOLLECTION(MULTILINESTRING(), POINT()) ** ** In general, if the subcomponents are homogeneous, return a properly ** typed collection. ** Otherwise, return a generic collection, with the subtypes in minimal ** typed collections. */ static void lwcollection_build_buffer(const LWCOLLECTION *col, HomogenizeBuffer *buffer) { int i; if ( ! col ) return; if ( lwgeom_is_empty(lwcollection_as_lwgeom(col)) ) return; for ( i = 0; i < col->ngeoms; i++ ) { LWGEOM *geom = col->geoms[i]; switch(geom->type) { case POINTTYPE: case LINETYPE: case CIRCSTRINGTYPE: case COMPOUNDTYPE: case TRIANGLETYPE: case CURVEPOLYTYPE: case POLYGONTYPE: { /* Init if necessary */ if ( ! buffer->buf[geom->type] ) { LWCOLLECTION *bufcol = lwcollection_construct_empty(COLLECTIONTYPE, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags)); bufcol->type = lwtype_get_collectiontype(geom->type); buffer->buf[geom->type] = bufcol; } /* Add sub-geom to buffer */ lwcollection_add_lwgeom(buffer->buf[geom->type], lwgeom_clone(geom)); /* Increment count for this singleton type */ buffer->cnt[geom->type] = buffer->cnt[geom->type] + 1; } default: { lwcollection_build_buffer(lwgeom_as_lwcollection(geom), buffer); } } } return; } static LWGEOM* lwcollection_homogenize(const LWCOLLECTION *col) { int i; int ntypes = 0; int type = 0; LWGEOM *outgeom = NULL; HomogenizeBuffer buffer; /* Sort all the parts into a buffer */ init_homogenizebuffer(&buffer); lwcollection_build_buffer(col, &buffer); /* Check for homogeneity */ for ( i = 0; i < NUMTYPES; i++ ) { if ( buffer.cnt[i] > 0 ) { ntypes++; type = i; } } /* No types? Huh. Return empty. */ if ( ntypes == 0 ) { LWCOLLECTION *outcol; outcol = lwcollection_construct_empty(COLLECTIONTYPE, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags)); outgeom = lwcollection_as_lwgeom(outcol); } /* One type, return homogeneous collection */ else if ( ntypes == 1 ) { LWCOLLECTION *outcol; outcol = buffer.buf[type]; if ( outcol->ngeoms == 1 ) { outgeom = outcol->geoms[0]; outcol->ngeoms=0; lwcollection_free(outcol); } else { outgeom = lwcollection_as_lwgeom(outcol); } outgeom->srid = col->srid; } /* Bah, more than out type, return anonymous collection */ else if ( ntypes > 1 ) { int j; LWCOLLECTION *outcol; outcol = lwcollection_construct_empty(COLLECTIONTYPE, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags)); for ( j = 0; j < NUMTYPES; j++ ) { if ( buffer.buf[j] ) { LWCOLLECTION *bcol = buffer.buf[j]; if ( bcol->ngeoms == 1 ) { lwcollection_add_lwgeom(outcol, bcol->geoms[0]); bcol->ngeoms=0; lwcollection_free(bcol); } else { lwcollection_add_lwgeom(outcol, lwcollection_as_lwgeom(bcol)); } } } outgeom = lwcollection_as_lwgeom(outcol); } return outgeom; } /* ** Given a generic geometry, return the "simplest" form. ** ** eg: ** LINESTRING() => LINESTRING() ** ** MULTILINESTRING(with a single line) => LINESTRING() ** ** GEOMETRYCOLLECTION(MULTILINESTRING()) => MULTILINESTRING() ** ** GEOMETRYCOLLECTION(MULTILINESTRING(), MULTILINESTRING(), POINT()) ** => GEOMETRYCOLLECTION(MULTILINESTRING(), POINT()) */ LWGEOM * lwgeom_homogenize(const LWGEOM *geom) { LWGEOM *hgeom; /* EMPTY Geometry */ if (lwgeom_is_empty(geom)) { if( lwgeom_is_collection(geom) ) { return lwcollection_as_lwgeom(lwcollection_construct_empty(geom->type, geom->srid, lwgeom_has_z(geom), lwgeom_has_m(geom))); } return lwgeom_clone(geom); } switch (geom->type) { /* Return simple geometries untouched */ case POINTTYPE: case LINETYPE: case CIRCSTRINGTYPE: case COMPOUNDTYPE: case TRIANGLETYPE: case CURVEPOLYTYPE: case POLYGONTYPE: return lwgeom_clone(geom); /* Process homogeneous geometries lightly */ case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: { LWCOLLECTION *col = (LWCOLLECTION*)geom; /* Strip single-entry multi-geometries down to singletons */ if ( col->ngeoms == 1 ) { hgeom = lwgeom_clone((LWGEOM*)(col->geoms[0])); hgeom->srid = geom->srid; if (geom->bbox) hgeom->bbox = gbox_copy(geom->bbox); return hgeom; } /* Return proper multigeometry untouched */ return lwgeom_clone(geom); } /* Work on anonymous collections separately */ case COLLECTIONTYPE: return lwcollection_homogenize((LWCOLLECTION *) geom); } /* Unknown type */ lwerror("lwgeom_homogenize: Geometry Type not supported (%i)", lwtype_name(geom->type)); return NULL; /* Never get here! */ } ��������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_geojson.c����������������������������������������������������0000644�0000000�0000000�00000033462�12314517750�020417� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * Copyright 2013 Sandro Santilli <strk@keybit.net> * Copyright 2011 Kashif Rasul <kashif.rasul@gmail.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <assert.h> #include "liblwgeom.h" #include "lwgeom_log.h" #include "../postgis_config.h" #ifdef HAVE_LIBJSON #include <json/json.h> #include <json/json_object_private.h> #include <string.h> static void geojson_lwerror(char *msg, int error_code) { LWDEBUGF(3, "lwgeom_from_geojson ERROR %i", error_code); lwerror("%s", msg); } /* Prototype */ static LWGEOM* parse_geojson(json_object *geojson, int *hasz, int root_srid); static json_object* findMemberByName(json_object* poObj, const char* pszName ) { json_object* poTmp; json_object_iter it; poTmp = poObj; if( NULL == pszName || NULL == poObj) return NULL; it.key = NULL; it.val = NULL; it.entry = NULL; if( NULL != json_object_get_object(poTmp) ) { assert( NULL != json_object_get_object(poTmp)->head ); for( it.entry = json_object_get_object(poTmp)->head; ( it.entry ? ( it.key = (char*)it.entry->k, it.val = (json_object*)it.entry->v, it.entry) : 0); it.entry = it.entry->next) { if( strcasecmp((char *)it.key, pszName )==0 ) return it.val; } } return NULL; } static int parse_geojson_coord(json_object *poObj, int *hasz, POINTARRAY *pa) { POINT4D pt; int iType = 0; LWDEBUGF(3, "parse_geojson_coord called for object %s.", json_object_to_json_string( poObj ) ); if( json_type_array == json_object_get_type( poObj ) ) { json_object* poObjCoord = NULL; const int nSize = json_object_array_length( poObj ); LWDEBUGF(3, "parse_geojson_coord called for array size %d.", nSize ); // Read X coordinate poObjCoord = json_object_array_get_idx( poObj, 0 ); pt.x = json_object_get_double( poObjCoord ); LWDEBUGF(3, "parse_geojson_coord pt.x = %f.", pt.x ); // Read Y coordinate poObjCoord = json_object_array_get_idx( poObj, 1 ); pt.y = json_object_get_double( poObjCoord ); LWDEBUGF(3, "parse_geojson_coord pt.y = %f.", pt.y ); if( nSize == 3 ) /* should this be >= 3 ? */ { // Read Z coordinate poObjCoord = json_object_array_get_idx( poObj, 2 ); pt.z = json_object_get_double( poObjCoord ); LWDEBUGF(3, "parse_geojson_coord pt.z = %f.", pt.z ); *hasz = LW_TRUE; } else { *hasz = LW_FALSE; /* Initialize Z coordinate, if required */ if ( FLAGS_GET_Z(pa->flags) ) pt.z = 0.0; } /* TODO: should we account for nSize > 3 ? */ /* Initialize M coordinate, if required */ if ( FLAGS_GET_M(pa->flags) ) pt.m = 0.0; } return ptarray_append_point(pa, &pt, LW_FALSE); } static LWGEOM* parse_geojson_point(json_object *geojson, int *hasz, int root_srid) { LWGEOM *geom; POINTARRAY *pa; json_object* coords = NULL; LWDEBUGF(3, "parse_geojson_point called with root_srid = %d.", root_srid ); coords = findMemberByName( geojson, "coordinates" ); if ( ! coords ) { geojson_lwerror("Unable to find 'coordinates' in GeoJSON string", 4); return NULL; } pa = ptarray_construct_empty(1, 0, 1); parse_geojson_coord(coords, hasz, pa); geom = (LWGEOM *) lwpoint_construct(root_srid, NULL, pa); LWDEBUG(2, "parse_geojson_point finished."); return geom; } static LWGEOM* parse_geojson_linestring(json_object *geojson, int *hasz, int root_srid) { LWGEOM *geom; POINTARRAY *pa; json_object* points = NULL; int i = 0; LWDEBUG(2, "parse_geojson_linestring called."); points = findMemberByName( geojson, "coordinates" ); if ( ! points ) { geojson_lwerror("Unable to find 'coordinates' in GeoJSON string", 4); return NULL; } pa = ptarray_construct_empty(1, 0, 1); if( json_type_array == json_object_get_type( points ) ) { const int nPoints = json_object_array_length( points ); for(i = 0; i < nPoints; ++i) { json_object* coords = NULL; coords = json_object_array_get_idx( points, i ); parse_geojson_coord(coords, hasz, pa); } } geom = (LWGEOM *) lwline_construct(root_srid, NULL, pa); LWDEBUG(2, "parse_geojson_linestring finished."); return geom; } static LWGEOM* parse_geojson_polygon(json_object *geojson, int *hasz, int root_srid) { LWGEOM *geom; POINTARRAY **ppa; json_object* rings = NULL; int i = 0, j = 0; int nRings = 0; int nPoints = 0; rings = findMemberByName( geojson, "coordinates" ); if ( ! rings ) { geojson_lwerror("Unable to find 'coordinates' in GeoJSON string", 4); return NULL; } if ( json_type_array != json_object_get_type(rings) ) { geojson_lwerror("The 'coordinates' in GeoJSON string are not an array", 4); return NULL; } nRings = json_object_array_length( rings ); if ( ! nRings ) { return (LWGEOM *)lwpoly_construct_empty(root_srid, 0, 0); } ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); json_object* points = NULL; ppa[0] = ptarray_construct_empty(1, 0, 1); points = json_object_array_get_idx( rings, 0 ); nPoints = json_object_array_length( points ); for (i=0; i < nPoints; i++ ) { json_object* coords = NULL; coords = json_object_array_get_idx( points, i ); parse_geojson_coord(coords, hasz, ppa[0]); } for(i = 1; i < nRings; ++i) { int nPoints; ppa = (POINTARRAY**) lwrealloc((POINTARRAY *) ppa, sizeof(POINTARRAY*) * (i + 1)); ppa[i] = ptarray_construct_empty(1, 0, 1); points = json_object_array_get_idx( rings, i ); nPoints = json_object_array_length( points ); for (j=0; j < nPoints; j++ ) { json_object* coords = NULL; coords = json_object_array_get_idx( points, j ); parse_geojson_coord(coords, hasz, ppa[i]); } } geom = (LWGEOM *) lwpoly_construct(root_srid, NULL, nRings, ppa); return geom; } static LWGEOM* parse_geojson_multipoint(json_object *geojson, int *hasz, int root_srid) { LWGEOM *geom; int i = 0; json_object* poObjPoints = NULL; if (!root_srid) { geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOINTTYPE, root_srid, 1, 0); } else { geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOINTTYPE, -1, 1, 0); } poObjPoints = findMemberByName( geojson, "coordinates" ); if ( ! poObjPoints ) { geojson_lwerror("Unable to find 'coordinates' in GeoJSON string", 4); return NULL; } if( json_type_array == json_object_get_type( poObjPoints ) ) { const int nPoints = json_object_array_length( poObjPoints ); for( i = 0; i < nPoints; ++i) { POINTARRAY *pa; json_object* poObjCoords = NULL; poObjCoords = json_object_array_get_idx( poObjPoints, i ); pa = ptarray_construct_empty(1, 0, 1); parse_geojson_coord(poObjCoords, hasz, pa); geom = (LWGEOM*)lwmpoint_add_lwpoint((LWMPOINT*)geom, (LWPOINT*)lwpoint_construct(root_srid, NULL, pa)); } } return geom; } static LWGEOM* parse_geojson_multilinestring(json_object *geojson, int *hasz, int root_srid) { LWGEOM *geom = NULL; int i, j; json_object* poObjLines = NULL; if (!root_srid) { geom = (LWGEOM *)lwcollection_construct_empty(MULTILINETYPE, root_srid, 1, 0); } else { geom = (LWGEOM *)lwcollection_construct_empty(MULTILINETYPE, -1, 1, 0); } poObjLines = findMemberByName( geojson, "coordinates" ); if ( ! poObjLines ) { geojson_lwerror("Unable to find 'coordinates' in GeoJSON string", 4); return NULL; } if( json_type_array == json_object_get_type( poObjLines ) ) { const int nLines = json_object_array_length( poObjLines ); for( i = 0; i < nLines; ++i) { POINTARRAY *pa = NULL; json_object* poObjLine = NULL; poObjLine = json_object_array_get_idx( poObjLines, i ); pa = ptarray_construct_empty(1, 0, 1); if( json_type_array == json_object_get_type( poObjLine ) ) { const int nPoints = json_object_array_length( poObjLine ); for(j = 0; j < nPoints; ++j) { json_object* coords = NULL; coords = json_object_array_get_idx( poObjLine, j ); parse_geojson_coord(coords, hasz, pa); } geom = (LWGEOM*)lwmline_add_lwline((LWMLINE*)geom, (LWLINE*)lwline_construct(root_srid, NULL, pa)); } } } return geom; } static LWGEOM* parse_geojson_multipolygon(json_object *geojson, int *hasz, int root_srid) { LWGEOM *geom = NULL; int i, j, k; json_object* poObjPolys = NULL; if (!root_srid) { geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOLYGONTYPE, root_srid, 1, 0); } else { geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOLYGONTYPE, -1, 1, 0); } poObjPolys = findMemberByName( geojson, "coordinates" ); if ( ! poObjPolys ) { geojson_lwerror("Unable to find 'coordinates' in GeoJSON string", 4); return NULL; } if( json_type_array == json_object_get_type( poObjPolys ) ) { const int nPolys = json_object_array_length( poObjPolys ); for(i = 0; i < nPolys; ++i) { POINTARRAY **ppa; json_object* poObjPoly = NULL; poObjPoly = json_object_array_get_idx( poObjPolys, i ); ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); if( json_type_array == json_object_get_type( poObjPoly ) ) { int nPoints; json_object* points = NULL; int ring = json_object_array_length( poObjPoly ); ppa[0] = ptarray_construct_empty(1, 0, 1); points = json_object_array_get_idx( poObjPoly, 0 ); nPoints = json_object_array_length( points ); for (j=0; j < nPoints; j++ ) { json_object* coords = NULL; coords = json_object_array_get_idx( points, j ); parse_geojson_coord(coords, hasz, ppa[0]); } for(j = 1; j < ring; ++j) { int nPoints; ppa = (POINTARRAY**) lwrealloc((POINTARRAY *) ppa, sizeof(POINTARRAY*) * (j + 1)); ppa[j] = ptarray_construct_empty(1, 0, 1); points = json_object_array_get_idx( poObjPoly, j ); nPoints = json_object_array_length( points ); for (k=0; k < nPoints; k++ ) { json_object* coords = NULL; coords = json_object_array_get_idx( points, k ); parse_geojson_coord(coords, hasz, ppa[j]); } } geom = (LWGEOM*)lwmpoly_add_lwpoly((LWMPOLY*)geom, (LWPOLY*)lwpoly_construct(root_srid, NULL, ring, ppa)); } } } return geom; } static LWGEOM* parse_geojson_geometrycollection(json_object *geojson, int *hasz, int root_srid) { LWGEOM *geom = NULL; int i; json_object* poObjGeoms = NULL; if (!root_srid) { geom = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, root_srid, 1, 0); } else { geom = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, -1, 1, 0); } poObjGeoms = findMemberByName( geojson, "geometries" ); if ( ! poObjGeoms ) { geojson_lwerror("Unable to find 'geometries' in GeoJSON string", 4); return NULL; } if( json_type_array == json_object_get_type( poObjGeoms ) ) { const int nGeoms = json_object_array_length( poObjGeoms ); json_object* poObjGeom = NULL; for(i = 0; i < nGeoms; ++i ) { poObjGeom = json_object_array_get_idx( poObjGeoms, i ); geom = (LWGEOM*)lwcollection_add_lwgeom((LWCOLLECTION *)geom, parse_geojson(poObjGeom, hasz, root_srid)); } } return geom; } static LWGEOM* parse_geojson(json_object *geojson, int *hasz, int root_srid) { json_object* type = NULL; const char* name; if( NULL == geojson ) { geojson_lwerror("invalid GeoJSON representation", 2); return NULL; } type = findMemberByName( geojson, "type" ); if( NULL == type ) { geojson_lwerror("unknown GeoJSON type", 3); return NULL; } name = json_object_get_string( type ); if( strcasecmp( name, "Point" )==0 ) return parse_geojson_point(geojson, hasz, root_srid); if( strcasecmp( name, "LineString" )==0 ) return parse_geojson_linestring(geojson, hasz, root_srid); if( strcasecmp( name, "Polygon" )==0 ) return parse_geojson_polygon(geojson, hasz, root_srid); if( strcasecmp( name, "MultiPoint" )==0 ) return parse_geojson_multipoint(geojson, hasz, root_srid); if( strcasecmp( name, "MultiLineString" )==0 ) return parse_geojson_multilinestring(geojson, hasz, root_srid); if( strcasecmp( name, "MultiPolygon" )==0 ) return parse_geojson_multipolygon(geojson, hasz, root_srid); if( strcasecmp( name, "GeometryCollection" )==0 ) return parse_geojson_geometrycollection(geojson, hasz, root_srid); lwerror("invalid GeoJson representation"); return NULL; /* Never reach */ } #endif /* HAVE_LIBJSON */ LWGEOM* lwgeom_from_geojson(const char *geojson, char **srs) { #ifndef HAVE_LIBJSON *srs = NULL; lwerror("You need JSON-C for lwgeom_from_geojson"); return NULL; #else /* HAVE_LIBJSON */ /* size_t geojson_size = strlen(geojson); */ LWGEOM *lwgeom; int hasz=LW_TRUE; json_tokener* jstok = NULL; json_object* poObj = NULL; json_object* poObjSrs = NULL; *srs = NULL; /* Begin to Parse json */ jstok = json_tokener_new(); poObj = json_tokener_parse_ex(jstok, geojson, -1); if( jstok->err != json_tokener_success) { char err[256]; snprintf(err, 256, "%s (at offset %d)", json_tokener_errors[jstok->err], jstok->char_offset); json_tokener_free(jstok); json_object_put(poObj); geojson_lwerror(err, 1); return NULL; } json_tokener_free(jstok); poObjSrs = findMemberByName( poObj, "crs" ); if (poObjSrs != NULL) { json_object* poObjSrsType = findMemberByName( poObjSrs, "type" ); if (poObjSrsType != NULL) { json_object* poObjSrsProps = findMemberByName( poObjSrs, "properties" ); json_object* poNameURL = findMemberByName( poObjSrsProps, "name" ); const char* pszName = json_object_get_string( poNameURL ); *srs = lwalloc(strlen(pszName) + 1); strcpy(*srs, pszName); } } lwgeom = parse_geojson(poObj, &hasz, 0); json_object_put(poObj); lwgeom_add_bbox(lwgeom); if (!hasz) { LWGEOM *tmp = lwgeom_force_2d(lwgeom); lwgeom_free(lwgeom); lwgeom = tmp; LWDEBUG(2, "geom_from_geojson called."); } return lwgeom; #endif /* HAVE_LIBJSON */ } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeodetic_tree.c�������������������������������������������������0000644�0000000�0000000�00000060136�12314566160�021064� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "liblwgeom_internal.h" #include "lwgeodetic_tree.h" #include "lwgeom_log.h" /* Internal prototype */ static CIRC_NODE* circ_nodes_merge(CIRC_NODE** nodes, int num_nodes); static double circ_tree_distance_tree_internal(const CIRC_NODE* n1, const CIRC_NODE* n2, double threshold, double* min_dist, double* max_dist, GEOGRAPHIC_POINT* closest1, GEOGRAPHIC_POINT* closest2); /** * Internal nodes have their point references set to NULL. */ static inline int circ_node_is_leaf(const CIRC_NODE* node) { return (node->num_nodes == 0); } /** * Recurse from top of node tree and free all children. * does not free underlying point array. */ void circ_tree_free(CIRC_NODE* node) { int i; if ( ! node ) return; for ( i = 0; i < node->num_nodes; i++ ) circ_tree_free(node->nodes[i]); if ( node->nodes ) lwfree(node->nodes); lwfree(node); } /** * Create a new leaf node, storing pointers back to the end points for later. */ static CIRC_NODE* circ_node_leaf_new(const POINTARRAY* pa, int i) { POINT2D *p1, *p2; POINT3D q1, q2, c; GEOGRAPHIC_POINT g1, g2, gc; CIRC_NODE *node; double diameter; p1 = (POINT2D*)getPoint_internal(pa, i); p2 = (POINT2D*)getPoint_internal(pa, i+1); geographic_point_init(p1->x, p1->y, &g1); geographic_point_init(p2->x, p2->y, &g2); LWDEBUGF(3,"edge #%d (%g %g, %g %g)", i, p1->x, p1->y, p2->x, p2->y); diameter = sphere_distance(&g1, &g2); /* Zero length edge, doesn't get a node */ if ( FP_EQUALS(diameter, 0.0) ) return NULL; /* Allocate */ node = lwalloc(sizeof(CIRC_NODE)); node->p1 = p1; node->p2 = p2; /* Convert ends to X/Y/Z, sum, and normalize to get mid-point */ geog2cart(&g1, &q1); geog2cart(&g2, &q2); vector_sum(&q1, &q2, &c); normalize(&c); cart2geog(&c, &gc); node->center = gc; node->radius = diameter / 2.0; LWDEBUGF(3,"edge #%d CENTER(%g %g) RADIUS=%g", i, gc.lon, gc.lat, node->radius); /* Leaf has no children */ node->num_nodes = 0; node->nodes = NULL; node->edge_num = i; /* Zero out metadata */ node->pt_outside.x = 0.0; node->pt_outside.y = 0.0; node->geom_type = 0; return node; } /** * Return a point node (zero radius, referencing one point) */ static CIRC_NODE* circ_node_leaf_point_new(const POINTARRAY* pa) { CIRC_NODE* tree = lwalloc(sizeof(CIRC_NODE)); tree->p1 = tree->p2 = (POINT2D*)getPoint_internal(pa, 0); geographic_point_init(tree->p1->x, tree->p1->y, &(tree->center)); tree->radius = 0.0; tree->nodes = NULL; tree->num_nodes = 0; tree->edge_num = 0; tree->geom_type = POINTTYPE; tree->pt_outside.x = 0.0; tree->pt_outside.y = 0.0; return tree; } /** * Comparing on geohash ensures that nearby nodes will be close * to each other in the list. */ static int circ_node_compare(const void* v1, const void* v2) { POINT2D p1, p2; unsigned int u1, u2; CIRC_NODE *c1 = *((CIRC_NODE**)v1); CIRC_NODE *c2 = *((CIRC_NODE**)v2); p1.x = rad2deg((c1->center).lon); p1.y = rad2deg((c1->center).lat); p2.x = rad2deg((c2->center).lon); p2.y = rad2deg((c2->center).lat); u1 = geohash_point_as_int(&p1); u2 = geohash_point_as_int(&p2); if ( u1 < u2 ) return -1; if ( u1 > u2 ) return 1; return 0; } /** * Given the centers of two circles, and the offset distance we want to put the new center between them * (calculated as the distance implied by the radii of the inputs and the distance between the centers) * figure out where the new center point is, by getting the direction from c1 to c2 and projecting * from c1 in that direction by the offset distance. */ static int circ_center_spherical(const GEOGRAPHIC_POINT* c1, const GEOGRAPHIC_POINT* c2, double distance, double offset, GEOGRAPHIC_POINT* center) { /* Direction from c1 to c2 */ double dir = sphere_direction(c1, c2, distance); LWDEBUGF(4,"calculating spherical center", dir); LWDEBUGF(4,"dir is %g", dir); /* Catch sphere_direction when it barfs */ if ( isnan(dir) ) return LW_FAILURE; /* Center of new circle is projection from start point, using offset distance*/ return sphere_project(c1, offset, dir, center); } /** * Where the circ_center_spherical() function fails, we need a fall-back. The failures * happen in short arcs, where the spherical distance between two points is practically * the same as the straight-line distance, so our fallback will be to use the straight-line * between the two to calculate the new projected center. For proportions far from 0.5 * this will be increasingly more incorrect. */ static int circ_center_cartesian(const GEOGRAPHIC_POINT* c1, const GEOGRAPHIC_POINT* c2, double distance, double offset, GEOGRAPHIC_POINT* center) { POINT3D p1, p2; POINT3D p1p2, pc; double proportion = offset/distance; LWDEBUG(4,"calculating cartesian center"); geog2cart(c1, &p1); geog2cart(c2, &p2); /* Difference between p2 and p1 */ p1p2.x = p2.x - p1.x; p1p2.y = p2.y - p1.y; p1p2.z = p2.z - p1.z; /* Scale difference to proportion */ p1p2.x *= proportion; p1p2.y *= proportion; p1p2.z *= proportion; /* Add difference to p1 to get approximate center point */ pc.x = p1.x + p1p2.x; pc.y = p1.y + p1p2.y; pc.z = p1.z + p1p2.z; normalize(&pc); /* Convert center point to geographics */ cart2geog(&pc, center); return LW_SUCCESS; } /** * Create a new internal node, calculating the new measure range for the node, * and storing pointers to the child nodes. */ static CIRC_NODE* circ_node_internal_new(CIRC_NODE** c, int num_nodes) { CIRC_NODE *node = NULL; GEOGRAPHIC_POINT new_center, c1; double new_radius; double offset1, dist, D, r1, ri; int i, new_geom_type; LWDEBUGF(3, "called with %d nodes --", num_nodes); /* Can't do anything w/ empty input */ if ( num_nodes < 1 ) return node; /* Initialize calculation with values of the first circle */ new_center = c[0]->center; new_radius = c[0]->radius; new_geom_type = c[0]->geom_type; /* Merge each remaining circle into the new circle */ for ( i = 1; i < num_nodes; i++ ) { c1 = new_center; r1 = new_radius; dist = sphere_distance(&c1, &(c[i]->center)); ri = c[i]->radius; /* Promote geometry types up the tree, getting more and more collected */ /* Go until we find a value */ if ( ! new_geom_type ) { new_geom_type = c[i]->geom_type; } /* Promote singleton to a multi-type */ else if ( ! lwtype_is_collection(new_geom_type) ) { /* Anonymous collection if types differ */ if ( new_geom_type != c[i]->geom_type ) { new_geom_type = COLLECTIONTYPE; } else { new_geom_type = lwtype_get_collectiontype(new_geom_type); } } /* If we can't add next feature to this collection cleanly, promote again to anonymous collection */ else if ( new_geom_type != lwtype_get_collectiontype(c[i]->geom_type) ) { new_geom_type = COLLECTIONTYPE; } LWDEBUGF(3, "distance between new (%g %g) and %i (%g %g) is %g", c1.lon, c1.lat, i, c[i]->center.lon, c[i]->center.lat, dist); if ( FP_EQUALS(dist, 0) ) { LWDEBUG(3, " distance between centers is zero"); new_radius = r1 + 2*dist; new_center = c1; } else if ( dist < fabs(r1 - ri) ) { /* new contains next */ if ( r1 > ri ) { LWDEBUG(3, " c1 contains ci"); new_center = c1; new_radius = r1; } /* next contains new */ else { LWDEBUG(3, " ci contains c1"); new_center = c[i]->center; new_radius = ri; } } else { LWDEBUG(3, " calculating new center"); /* New circle diameter */ D = dist + r1 + ri; LWDEBUGF(3," D is %g", D); /* New radius */ new_radius = D / 2.0; /* Distance from cn1 center to the new center */ offset1 = ri + (D - (2.0*r1 + 2.0*ri)) / 2.0; LWDEBUGF(3," offset1 is %g", offset1); /* Sometimes the sphere_direction function fails... this causes the center calculation */ /* to fail too. In that case, we're going to fall back ot a cartesian calculation, which */ /* is less exact, so we also have to pad the radius by (hack alert) an arbitrary amount */ /* which is hopefully always big enough to contain the input edges */ if ( circ_center_spherical(&c1, &(c[i]->center), dist, offset1, &new_center) == LW_FAILURE ) { circ_center_cartesian(&c1, &(c[i]->center), dist, offset1, &new_center); new_radius *= 1.1; } } LWDEBUGF(3, " new center is (%g %g) new radius is %g", new_center.lon, new_center.lat, new_radius); } node = lwalloc(sizeof(CIRC_NODE)); node->p1 = NULL; node->p2 = NULL; node->center = new_center; node->radius = new_radius; node->num_nodes = num_nodes; node->nodes = c; node->edge_num = -1; node->geom_type = new_geom_type; node->pt_outside.x = 0.0; node->pt_outside.y = 0.0; return node; } /** * Build a tree of nodes from a point array, one node per edge. */ CIRC_NODE* circ_tree_new(const POINTARRAY* pa) { int num_edges; int i, j; CIRC_NODE **nodes; CIRC_NODE *node; CIRC_NODE *tree; /* Can't do anything with no points */ if ( pa->npoints < 1 ) return NULL; /* Special handling for a single point */ if ( pa->npoints == 1 ) return circ_node_leaf_point_new(pa); /* First create a flat list of nodes, one per edge. */ num_edges = pa->npoints - 1; nodes = lwalloc(sizeof(CIRC_NODE*) * pa->npoints); j = 0; for ( i = 0; i < num_edges; i++ ) { node = circ_node_leaf_new(pa, i); if ( node ) /* Not zero length? */ nodes[j++] = node; } /* Special case: only zero-length edges. Make a point node. */ if ( j == 0 ) { lwfree(nodes); return circ_node_leaf_point_new(pa); } /* Merge the node list pairwise up into a tree */ tree = circ_nodes_merge(nodes, j); /* Free the old list structure, leaving the tree in place */ lwfree(nodes); return tree; } /** * Given a list of nodes, sort them into a spatially consistent * order, then pairwise merge them up into a tree. Should make * handling multipoints and other collections more efficient */ static void circ_nodes_sort(CIRC_NODE** nodes, int num_nodes) { qsort(nodes, num_nodes, sizeof(CIRC_NODE*), circ_node_compare); } static CIRC_NODE* circ_nodes_merge(CIRC_NODE** nodes, int num_nodes) { CIRC_NODE **inodes = NULL; int num_children = num_nodes; int inode_num = 0; int num_parents = 0; int j; // TODO, roll geom_type *up* as tree is built, changing to collection types as simple types are merged // TODO, change the distance algorithm to drive down to simple types first, test pip on poly/other cases, then test edges while( num_children > 1 ) { for ( j = 0; j < num_children; j++ ) { inode_num = (j % CIRC_NODE_SIZE); if ( inode_num == 0 ) inodes = lwalloc(sizeof(CIRC_NODE*)*CIRC_NODE_SIZE); inodes[inode_num] = nodes[j]; if ( inode_num == CIRC_NODE_SIZE-1 ) nodes[num_parents++] = circ_node_internal_new(inodes, CIRC_NODE_SIZE); } /* Clean up any remaining nodes... */ if ( inode_num == 0 ) { /* Promote solo nodes without merging */ nodes[num_parents++] = inodes[0]; lwfree(inodes); } else if ( inode_num < CIRC_NODE_SIZE-1 ) { /* Merge spare nodes */ nodes[num_parents++] = circ_node_internal_new(inodes, inode_num+1); } num_children = num_parents; num_parents = 0; } /* Return a reference to the head of the tree */ return nodes[0]; } /** * Returns a #POINT2D that is a vertex of the input shape */ int circ_tree_get_point(const CIRC_NODE* node, POINT2D* pt) { if ( circ_node_is_leaf(node) ) { pt->x = node->p1->x; pt->y = node->p1->y; return LW_SUCCESS; } else { return circ_tree_get_point(node->nodes[0], pt); } } /** * Walk the tree and count intersections between the stab line and the edges. * odd => containment, even => no containment. * KNOWN PROBLEM: Grazings (think of a sharp point, just touching the * stabline) will be counted for one, which will throw off the count. */ int circ_tree_contains_point(const CIRC_NODE* node, const POINT2D* pt, const POINT2D* pt_outside, int* on_boundary) { GEOGRAPHIC_POINT closest; GEOGRAPHIC_EDGE stab_edge, edge; POINT3D S1, S2, E1, E2; double d; int i, c; /* Construct a stabline edge from our "inside" to our known outside point */ geographic_point_init(pt->x, pt->y, &(stab_edge.start)); geographic_point_init(pt_outside->x, pt_outside->y, &(stab_edge.end)); geog2cart(&(stab_edge.start), &S1); geog2cart(&(stab_edge.end), &S2); LWDEBUG(3, "entered"); /* * If the stabline doesn't cross within the radius of a node, there's no * way it can cross. */ LWDEBUGF(3, "working on node %p, edge_num %d, radius %g, center POINT(%g %g)", node, node->edge_num, node->radius, rad2deg(node->center.lon), rad2deg(node->center.lat)); d = edge_distance_to_point(&stab_edge, &(node->center), &closest); LWDEBUGF(3, "edge_distance_to_point=%g, node_radius=%g", d, node->radius); if ( FP_LTEQ(d, node->radius) ) { LWDEBUGF(3,"entering this branch (%p)", node); /* Return the crossing number of this leaf */ if ( circ_node_is_leaf(node) ) { int inter; LWDEBUGF(3, "leaf node calculation (edge %d)", node->edge_num); geographic_point_init(node->p1->x, node->p1->y, &(edge.start)); geographic_point_init(node->p2->x, node->p2->y, &(edge.end)); geog2cart(&(edge.start), &E1); geog2cart(&(edge.end), &E2); inter = edge_intersects(&S1, &S2, &E1, &E2); if ( inter & PIR_INTERSECTS ) { LWDEBUG(3," got stab line edge_intersection with this edge!"); /* To avoid double counting crossings-at-a-vertex, */ /* always ignore crossings at "lower" ends of edges*/ if ( inter & PIR_B_TOUCH_RIGHT || inter & PIR_COLINEAR ) { LWDEBUG(3," rejecting stab line grazing by left-side edge"); return 0; } else { LWDEBUG(3," accepting stab line intersection"); return 1; } } } /* Or, add up the crossing numbers of all children of this node. */ else { c = 0; for ( i = 0; i < node->num_nodes; i++ ) { LWDEBUG(3,"internal node calculation"); LWDEBUGF(3," calling circ_tree_contains_point on child %d!", i); c += circ_tree_contains_point(node->nodes[i], pt, pt_outside, on_boundary); } return c % 2; } } else { LWDEBUGF(3,"skipping this branch (%p)", node); } return 0; } static double circ_node_min_distance(const CIRC_NODE* n1, const CIRC_NODE* n2) { double d = sphere_distance(&(n1->center), &(n2->center)); double r1 = n1->radius; double r2 = n2->radius; if ( d < r1 + r2 ) return 0.0; return d - r1 - r2; } static double circ_node_max_distance(const CIRC_NODE *n1, const CIRC_NODE *n2) { return sphere_distance(&(n1->center), &(n2->center)) + n1->radius + n2->radius; } double circ_tree_distance_tree(const CIRC_NODE* n1, const CIRC_NODE* n2, const SPHEROID* spheroid, double threshold) { double min_dist = MAXFLOAT; double max_dist = MAXFLOAT; GEOGRAPHIC_POINT closest1, closest2; double threshold_radians = threshold / spheroid->radius; circ_tree_distance_tree_internal(n1, n2, threshold_radians, &min_dist, &max_dist, &closest1, &closest2); /* Spherical case */ if ( spheroid->a == spheroid->b ) { return spheroid->radius * sphere_distance(&closest1, &closest2); } else { return spheroid_distance(&closest1, &closest2, spheroid); } } static double circ_tree_distance_tree_internal(const CIRC_NODE* n1, const CIRC_NODE* n2, double threshold, double* min_dist, double* max_dist, GEOGRAPHIC_POINT* closest1, GEOGRAPHIC_POINT* closest2) { double max; double d, d_min; int i; LWDEBUGF(4, "entered, min_dist=%.8g max_dist=%.8g, type1=%d, type2=%d", *min_dist, *max_dist, n1->geom_type, n2->geom_type); // circ_tree_print(n1, 0); // circ_tree_print(n2, 0); /* Short circuit if we've already hit the minimum */ if( *min_dist <= threshold ) return *min_dist; /* If your minimum is greater than anyone's maximum, you can't hold the winner */ if( circ_node_min_distance(n1, n2) > *max_dist ) { LWDEBUGF(4, "pruning pair %p, %p", n1, n2); return MAXFLOAT; } /* If your maximum is a new low, we'll use that as our new global tolerance */ max = circ_node_max_distance(n1, n2); LWDEBUGF(5, "max %.8g", max); if( max < *max_dist ) *max_dist = max; /* Polygon on one side, primitive type on the other. Check for point-in-polygon */ /* short circuit. */ if ( n1->geom_type == POLYGONTYPE && n2->geom_type && ! lwtype_is_collection(n2->geom_type) ) { POINT2D pt; circ_tree_get_point(n2, &pt); LWDEBUGF(4, "n1 is polygon, testing if contains (%.5g,%.5g)", pt.x, pt.y); if ( circ_tree_contains_point(n1, &pt, &(n1->pt_outside), NULL) ) { LWDEBUG(4, "it does"); *min_dist = 0.0; geographic_point_init(pt.x, pt.y, closest1); geographic_point_init(pt.x, pt.y, closest2); return *min_dist; } } /* Polygon on one side, primitive type on the other. Check for point-in-polygon */ /* short circuit. */ if ( n2->geom_type == POLYGONTYPE && n1->geom_type && ! lwtype_is_collection(n1->geom_type) ) { POINT2D pt; circ_tree_get_point(n1, &pt); LWDEBUGF(4, "n2 is polygon, testing if contains (%.5g,%.5g)", pt.x, pt.y); if ( circ_tree_contains_point(n2, &pt, &(n2->pt_outside), NULL) ) { LWDEBUG(4, "it does"); geographic_point_init(pt.x, pt.y, closest1); geographic_point_init(pt.x, pt.y, closest2); *min_dist = 0.0; return *min_dist; } } /* Both leaf nodes, do a real distance calculation */ if( circ_node_is_leaf(n1) && circ_node_is_leaf(n2) ) { double d; GEOGRAPHIC_POINT close1, close2; LWDEBUGF(4, "testing leaf pair [%d], [%d]", n1->edge_num, n2->edge_num); /* One of the nodes is a point */ if ( n1->p1 == n1->p2 || n2->p1 == n2->p2 ) { GEOGRAPHIC_EDGE e; GEOGRAPHIC_POINT gp1, gp2; /* Both nodes are points! */ if ( n1->p1 == n1->p2 && n2->p1 == n2->p2 ) { geographic_point_init(n1->p1->x, n1->p1->y, &gp1); geographic_point_init(n2->p1->x, n2->p1->y, &gp2); close1 = gp1; close2 = gp2; d = sphere_distance(&gp1, &gp2); } /* Node 1 is a point */ else if ( n1->p1 == n1->p2 ) { geographic_point_init(n1->p1->x, n1->p1->y, &gp1); geographic_point_init(n2->p1->x, n2->p1->y, &(e.start)); geographic_point_init(n2->p2->x, n2->p2->y, &(e.end)); close1 = gp1; d = edge_distance_to_point(&e, &gp1, &close2); } /* Node 2 is a point */ else { geographic_point_init(n2->p1->x, n2->p1->y, &gp1); geographic_point_init(n1->p1->x, n1->p1->y, &(e.start)); geographic_point_init(n1->p2->x, n1->p2->y, &(e.end)); close1 = gp1; d = edge_distance_to_point(&e, &gp1, &close2); } LWDEBUGF(4, " got distance %g", d); } /* Both nodes are edges */ else { GEOGRAPHIC_EDGE e1, e2; GEOGRAPHIC_POINT g; POINT3D A1, A2, B1, B2; geographic_point_init(n1->p1->x, n1->p1->y, &(e1.start)); geographic_point_init(n1->p2->x, n1->p2->y, &(e1.end)); geographic_point_init(n2->p1->x, n2->p1->y, &(e2.start)); geographic_point_init(n2->p2->x, n2->p2->y, &(e2.end)); geog2cart(&(e1.start), &A1); geog2cart(&(e1.end), &A2); geog2cart(&(e2.start), &B1); geog2cart(&(e2.end), &B2); if ( edge_intersects(&A1, &A2, &B1, &B2) ) { d = 0.0; edge_intersection(&e1, &e2, &g); close1 = close2 = g; } else { d = edge_distance_to_edge(&e1, &e2, &close1, &close2); } LWDEBUGF(4, "edge_distance_to_edge returned %g", d); } if ( d < *min_dist ) { *min_dist = d; *closest1 = close1; *closest2 = close2; } return d; } else { d_min = MAXFLOAT; /* Drive the recursion into the COLLECTION types first so we end up with */ /* pairings of primitive geometries that can be forced into the point-in-polygon */ /* tests above. */ if ( n1->geom_type && lwtype_is_collection(n1->geom_type) ) { for ( i = 0; i < n1->num_nodes; i++ ) { d = circ_tree_distance_tree_internal(n1->nodes[i], n2, threshold, min_dist, max_dist, closest1, closest2); d_min = FP_MIN(d_min, d); } } else if ( n2->geom_type && lwtype_is_collection(n2->geom_type) ) { for ( i = 0; i < n2->num_nodes; i++ ) { d = circ_tree_distance_tree_internal(n1, n2->nodes[i], threshold, min_dist, max_dist, closest1, closest2); d_min = FP_MIN(d_min, d); } } else if ( ! circ_node_is_leaf(n1) ) { for ( i = 0; i < n1->num_nodes; i++ ) { d = circ_tree_distance_tree_internal(n1->nodes[i], n2, threshold, min_dist, max_dist, closest1, closest2); d_min = FP_MIN(d_min, d); } } else if ( ! circ_node_is_leaf(n2) ) { for ( i = 0; i < n2->num_nodes; i++ ) { d = circ_tree_distance_tree_internal(n1, n2->nodes[i], threshold, min_dist, max_dist, closest1, closest2); d_min = FP_MIN(d_min, d); } } else { /* Never get here */ } return d_min; } } void circ_tree_print(const CIRC_NODE* node, int depth) { int i; if (circ_node_is_leaf(node)) { printf("%*s[%d] C(%.5g %.5g) R(%.5g) ((%.5g %.5g),(%.5g,%.5g))", 3*depth + 6, "NODE", node->edge_num, node->center.lon, node->center.lat, node->radius, node->p1->x, node->p1->y, node->p2->x, node->p2->y ); if ( node->geom_type ) { printf(" %s", lwtype_name(node->geom_type)); } if ( node->geom_type == POLYGONTYPE ) { printf(" O(%.5g %.5g)", node->pt_outside.x, node->pt_outside.y); } printf("\n"); } else { printf("%*s C(%.5g %.5g) R(%.5g)", 3*depth + 6, "NODE", node->center.lon, node->center.lat, node->radius ); if ( node->geom_type ) { printf(" %s", lwtype_name(node->geom_type)); } if ( node->geom_type == POLYGONTYPE ) { printf(" O(%.5g %.5g)", node->pt_outside.x, node->pt_outside.y); } printf("\n"); } for ( i = 0; i < node->num_nodes; i++ ) { circ_tree_print(node->nodes[i], depth + 1); } return; } static CIRC_NODE* lwpoint_calculate_circ_tree(const LWPOINT* lwpoint) { CIRC_NODE* node; node = circ_tree_new(lwpoint->point); node->geom_type = lwgeom_get_type((LWGEOM*)lwpoint);; return node; } static CIRC_NODE* lwline_calculate_circ_tree(const LWLINE* lwline) { CIRC_NODE* node; node = circ_tree_new(lwline->points); node->geom_type = lwgeom_get_type((LWGEOM*)lwline); return node; } static CIRC_NODE* lwpoly_calculate_circ_tree(const LWPOLY* lwpoly) { int i = 0, j = 0; CIRC_NODE** nodes; CIRC_NODE* node; /* One ring? Handle it like a line. */ if ( lwpoly->nrings == 1 ) { node = circ_tree_new(lwpoly->rings[0]); } else { /* Calculate a tree for each non-trivial ring of the polygon */ nodes = lwalloc(lwpoly->nrings * sizeof(CIRC_NODE*)); for ( i = 0; i < lwpoly->nrings; i++ ) { node = circ_tree_new(lwpoly->rings[i]); if ( node ) nodes[j++] = node; } /* Put the trees into a spatially correlated order */ circ_nodes_sort(nodes, j); /* Merge the trees pairwise up to a parent node and return */ node = circ_nodes_merge(nodes, j); /* Don't need the working list any more */ lwfree(nodes); } /* Metatdata about polygons, we need this to apply P-i-P tests */ /* selectively when doing distance calculations */ node->geom_type = lwgeom_get_type((LWGEOM*)lwpoly); lwpoly_pt_outside(lwpoly, &(node->pt_outside)); return node; } static CIRC_NODE* lwcollection_calculate_circ_tree(const LWCOLLECTION* lwcol) { int i = 0, j = 0; CIRC_NODE** nodes; CIRC_NODE* node; /* One geometry? Done! */ if ( lwcol->ngeoms == 1 ) return lwgeom_calculate_circ_tree(lwcol->geoms[0]); /* Calculate a tree for each sub-geometry*/ nodes = lwalloc(lwcol->ngeoms * sizeof(CIRC_NODE*)); for ( i = 0; i < lwcol->ngeoms; i++ ) { node = lwgeom_calculate_circ_tree(lwcol->geoms[i]); if ( node ) nodes[j++] = node; } /* Put the trees into a spatially correlated order */ circ_nodes_sort(nodes, j); /* Merge the trees pairwise up to a parent node and return */ node = circ_nodes_merge(nodes, j); /* Don't need the working list any more */ lwfree(nodes); node->geom_type = lwgeom_get_type((LWGEOM*)lwcol); return node; } CIRC_NODE* lwgeom_calculate_circ_tree(const LWGEOM* lwgeom) { if ( lwgeom_is_empty(lwgeom) ) return NULL; switch ( lwgeom->type ) { case POINTTYPE: return lwpoint_calculate_circ_tree((LWPOINT*)lwgeom); case LINETYPE: return lwline_calculate_circ_tree((LWLINE*)lwgeom); case POLYGONTYPE: return lwpoly_calculate_circ_tree((LWPOLY*)lwgeom); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return lwcollection_calculate_circ_tree((LWCOLLECTION*)lwgeom); default: lwerror("Unable to calculate spherical index tree for type %s", lwtype_name(lwgeom->type)); return NULL; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/liblwgeom.h.in����������������������������������������������������0000644�0000000�0000000�00000174416�12230320272�020306� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: liblwgeom.h.in 12043 2013-10-18 20:57:30Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * * Copyright 2011 Sandro Santilli <strk@keybit.net> * Copyright 2011 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2007-2008 Mark Cave-Ayland * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef _LIBLWGEOM_H #define _LIBLWGEOM_H 1 #include <stdarg.h> #include <stdio.h> #include <stdint.h> #include "proj_api.h" /** * @file liblwgeom.h * * This library is the generic geometry handling section of PostGIS. The geometry * objects, constructors, destructors, and a set of spatial processing functions, * are implemented here. * * The library is designed for use in non-PostGIS applications if necessary. The * units tests at cunit/cu_tester.c and the loader/dumper programs at * ../loader/shp2pgsql.c are examples of non-PostGIS applications using liblwgeom. * * Programs using this library can install their custom memory managers and error * handlers by calling the lwgeom_set_handlers() function, otherwise the default * ones will be used. */ /** * liblwgeom versions */ #define LIBLWGEOM_VERSION "@POSTGIS_LIB_VERSION@" #define LIBLWGEOM_VERSION_MAJOR "@POSTGIS_MAJOR_VERSION@" #define LIBLWGEOM_VERSION_MINOR "@POSTGIS_MINOR_VERSION@" #define LIBLWGEOM_GEOS_VERSION "@POSTGIS_GEOS_VERSION@" /** * Return types for functions with status returns. */ #define LW_TRUE 1 #define LW_FALSE 0 #define LW_UNKNOWN 2 #define LW_FAILURE 0 #define LW_SUCCESS 1 /** * LWTYPE numbers, used internally by PostGIS */ #define POINTTYPE 1 #define LINETYPE 2 #define POLYGONTYPE 3 #define MULTIPOINTTYPE 4 #define MULTILINETYPE 5 #define MULTIPOLYGONTYPE 6 #define COLLECTIONTYPE 7 #define CIRCSTRINGTYPE 8 #define COMPOUNDTYPE 9 #define CURVEPOLYTYPE 10 #define MULTICURVETYPE 11 #define MULTISURFACETYPE 12 #define POLYHEDRALSURFACETYPE 13 #define TRIANGLETYPE 14 #define TINTYPE 15 #define NUMTYPES 16 /** * Flags applied in EWKB to indicate Z/M dimensions and * presence/absence of SRID and bounding boxes */ #define WKBZOFFSET 0x80000000 #define WKBMOFFSET 0x40000000 #define WKBSRIDFLAG 0x20000000 #define WKBBBOXFLAG 0x10000000 /********************************************************************** ** Spherical radius. ** Moritz, H. (1980). Geodetic Reference System 1980, by resolution of ** the XVII General Assembly of the IUGG in Canberra. ** http://en.wikipedia.org/wiki/Earth_radius ** http://en.wikipedia.org/wiki/World_Geodetic_System */ #define WGS84_MAJOR_AXIS 6378137.0 #define WGS84_INVERSE_FLATTENING 298.257223563 #define WGS84_MINOR_AXIS (WGS84_MAJOR_AXIS - WGS84_MAJOR_AXIS / WGS84_INVERSE_FLATTENING) #define WGS84_RADIUS ((2.0 * WGS84_MAJOR_AXIS + WGS84_MINOR_AXIS ) / 3.0) /** * Macros for manipulating the 'flags' byte. A uint8_t used as follows: * ---RGBMZ * Three unused bits, followed by ReadOnly, Geodetic, HasBBox, HasM and HasZ flags. */ #define FLAGS_GET_Z(flags) ((flags) & 0x01) #define FLAGS_GET_M(flags) (((flags) & 0x02)>>1) #define FLAGS_GET_BBOX(flags) (((flags) & 0x04)>>2) #define FLAGS_GET_GEODETIC(flags) (((flags) & 0x08)>>3) #define FLAGS_GET_READONLY(flags) (((flags) & 0x10)>>4) #define FLAGS_GET_SOLID(flags) (((flags) & 0x20)>>5) #define FLAGS_SET_Z(flags, value) ((flags) = (value) ? ((flags) | 0x01) : ((flags) & 0xFE)) #define FLAGS_SET_M(flags, value) ((flags) = (value) ? ((flags) | 0x02) : ((flags) & 0xFD)) #define FLAGS_SET_BBOX(flags, value) ((flags) = (value) ? ((flags) | 0x04) : ((flags) & 0xFB)) #define FLAGS_SET_GEODETIC(flags, value) ((flags) = (value) ? ((flags) | 0x08) : ((flags) & 0xF7)) #define FLAGS_SET_READONLY(flags, value) ((flags) = (value) ? ((flags) | 0x10) : ((flags) & 0xEF)) #define FLAGS_SET_SOLID(flags, value) ((flags) = (value) ? ((flags) | 0x20) : ((flags) & 0xDF)) #define FLAGS_NDIMS(flags) (2 + FLAGS_GET_Z(flags) + FLAGS_GET_M(flags)) #define FLAGS_GET_ZM(flags) (FLAGS_GET_M(flags) + FLAGS_GET_Z(flags) * 2) #define FLAGS_NDIMS_BOX(flags) (FLAGS_GET_GEODETIC(flags) ? 3 : FLAGS_NDIMS(flags)) /** * Macros for manipulating the 'typemod' int. An int32_t used as follows: * Plus/minus = Top bit. * Spare bits = Next 2 bits. * SRID = Next 21 bits. * TYPE = Next 6 bits. * ZM Flags = Bottom 2 bits. */ #define TYPMOD_GET_SRID(typmod) ((((typmod) & 0x1FFFFF00)<<3)>>11) #define TYPMOD_SET_SRID(typmod, srid) ((typmod) = (((typmod) & 0xE00000FF) | ((srid & 0x001FFFFF)<<8))) #define TYPMOD_GET_TYPE(typmod) ((typmod & 0x000000FC)>>2) #define TYPMOD_SET_TYPE(typmod, type) ((typmod) = (typmod & 0xFFFFFF03) | ((type & 0x0000003F)<<2)) #define TYPMOD_GET_Z(typmod) ((typmod & 0x00000002)>>1) #define TYPMOD_SET_Z(typmod) ((typmod) = typmod | 0x00000002) #define TYPMOD_GET_M(typmod) (typmod & 0x00000001) #define TYPMOD_SET_M(typmod) ((typmod) = typmod | 0x00000001) #define TYPMOD_GET_NDIMS(typmod) (2+TYPMOD_GET_Z(typmod)+TYPMOD_GET_M(typmod)) /** * Maximum allowed SRID value in serialized geometry. * Currently we are using 21 bits (2097152) of storage for SRID. */ #define SRID_MAXIMUM @SRID_MAX@ /** * Maximum valid SRID value for the user * We reserve 1000 values for internal use */ #define SRID_USER_MAXIMUM @SRID_USR_MAX@ /** Unknown SRID value */ #define SRID_UNKNOWN 0 #define SRID_IS_UNKNOWN(x) ((int)x<=0) /* ** EPSG WGS84 geographics, OGC standard default SRS, better be in ** the SPATIAL_REF_SYS table! */ #define SRID_DEFAULT 4326 /** * Return a valid SRID from an arbitrary integer * Raises a notice if what comes out is different from * what went in. * Raises an error if SRID value is out of bounds. */ extern int clamp_srid(int srid); /** * Global functions for memory/logging handlers. */ typedef void* (*lwallocator)(size_t size); typedef void* (*lwreallocator)(void *mem, size_t size); typedef void (*lwfreeor)(void* mem); typedef void (*lwreporter)(const char* fmt, va_list ap); /** * Install custom memory management and error handling functions you want your * application to use. * @ingroup system * @todo take a structure ? */ extern void lwgeom_set_handlers(lwallocator allocator, lwreallocator reallocator, lwfreeor freeor, lwreporter errorreporter, lwreporter noticereporter); /** * Write a notice out to the notice handler. * * Uses standard printf() substitutions. * Use for messages you always want output. * For debugging, use LWDEBUG() or LWDEBUGF(). * @ingroup logging */ void lwnotice(const char *fmt, ...); /** * Write a notice out to the error handler. * * Uses standard printf() substitutions. * Use for errors you always want output. * For debugging, use LWDEBUG() or LWDEBUGF(). * @ingroup logging */ void lwerror(const char *fmt, ...); /* TODO: move these elsewhere */ extern int lw_vasprintf (char **result, const char *format, va_list args); extern int lw_asprintf #if __STDC__ (char **result, const char *format, ...); #else (result, va_alist); char **result; va_dcl #endif /******************************************************************/ typedef struct { double afac, bfac, cfac, dfac, efac, ffac, gfac, hfac, ifac, xoff, yoff, zoff; } AFFINE; /******************************************************************/ typedef struct { double xmin, ymin, zmin; double xmax, ymax, zmax; int32_t srid; } BOX3D; /****************************************************************** * GBOX structure. * We include the flags (information about dimensinality), * so we don't have to constantly pass them * into functions that use the GBOX. */ typedef struct { uint8_t flags; double xmin; double xmax; double ymin; double ymax; double zmin; double zmax; double mmin; double mmax; } GBOX; /****************************************************************** * SPHEROID * * Standard definition of an ellipsoid (what wkt calls a spheroid) * f = (a-b)/a * e_sq = (a*a - b*b)/(a*a) * b = a - fa */ typedef struct { double a; /* semimajor axis */ double b; /* semiminor axis b = (a - fa) */ double f; /* flattening f = (a-b)/a */ double e; /* eccentricity (first) */ double e_sq; /* eccentricity squared (first) e_sq = (a*a-b*b)/(a*a) */ double radius; /* spherical average radius = (2*a+b)/3 */ char name[20]; /* name of ellipse */ } SPHEROID; /****************************************************************** * POINT2D, POINT3D, POINT3DM, POINT4D */ typedef struct { double x, y; } POINT2D; typedef struct { double x, y, z; } POINT3DZ; typedef struct { double x, y, z; } POINT3D; typedef struct { double x, y, m; } POINT3DM; typedef struct { double x, y, z, m; } POINT4D; /****************************************************************** * POINTARRAY * Point array abstracts a lot of the complexity of points and point lists. * It handles 2d/3d translation * (2d points converted to 3d will have z=0 or NaN) * DO NOT MIX 2D and 3D POINTS! EVERYTHING* is either one or the other */ typedef struct { /* Array of POINT 2D, 3D or 4D, possibly missaligned. */ uint8_t *serialized_pointlist; /* Use FLAGS_* macros to handle */ uint8_t flags; int npoints; /* how many points we are currently storing */ int maxpoints; /* how many points we have space for in serialized_pointlist */ } POINTARRAY; /****************************************************************** * GSERIALIZED */ typedef struct { uint32_t size; /* For PgSQL use only, use VAR* macros to manipulate. */ uint8_t srid[3]; /* 24 bits of SRID */ uint8_t flags; /* HasZ, HasM, HasBBox, IsGeodetic, IsReadOnly */ uint8_t data[1]; /* See gserialized.txt */ } GSERIALIZED; /****************************************************************** * LWGEOM (any geometry type) * * Abstract type, note that 'type', 'bbox' and 'srid' are available in * all geometry variants. */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; void *data; } LWGEOM; /* POINTYPE */ typedef struct { uint8_t type; /* POINTTYPE */ uint8_t flags; GBOX *bbox; int32_t srid; POINTARRAY *point; /* hide 2d/3d (this will be an array of 1 point) */ } LWPOINT; /* "light-weight point" */ /* LINETYPE */ typedef struct { uint8_t type; /* LINETYPE */ uint8_t flags; GBOX *bbox; int32_t srid; POINTARRAY *points; /* array of POINT3D */ } LWLINE; /* "light-weight line" */ /* TRIANGLE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; POINTARRAY *points; } LWTRIANGLE; /* CIRCSTRINGTYPE */ typedef struct { uint8_t type; /* CIRCSTRINGTYPE */ uint8_t flags; GBOX *bbox; int32_t srid; POINTARRAY *points; /* array of POINT(3D/3DM) */ } LWCIRCSTRING; /* "light-weight circularstring" */ /* POLYGONTYPE */ typedef struct { uint8_t type; /* POLYGONTYPE */ uint8_t flags; GBOX *bbox; int32_t srid; int nrings; /* how many rings we are currently storing */ int maxrings; /* how many rings we have space for in **rings */ POINTARRAY **rings; /* list of rings (list of points) */ } LWPOLY; /* "light-weight polygon" */ /* MULTIPOINTTYPE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWPOINT **geoms; } LWMPOINT; /* MULTILINETYPE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWLINE **geoms; } LWMLINE; /* MULTIPOLYGONTYPE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWPOLY **geoms; } LWMPOLY; /* COLLECTIONTYPE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWGEOM **geoms; } LWCOLLECTION; /* COMPOUNDTYPE */ typedef struct { uint8_t type; /* COMPOUNDTYPE */ uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWGEOM **geoms; } LWCOMPOUND; /* "light-weight compound line" */ /* CURVEPOLYTYPE */ typedef struct { uint8_t type; /* CURVEPOLYTYPE */ uint8_t flags; GBOX *bbox; int32_t srid; int nrings; /* how many rings we are currently storing */ int maxrings; /* how many rings we have space for in **rings */ LWGEOM **rings; /* list of rings (list of points) */ } LWCURVEPOLY; /* "light-weight polygon" */ /* MULTICURVE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWGEOM **geoms; } LWMCURVE; /* MULTISURFACETYPE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWGEOM **geoms; } LWMSURFACE; /* POLYHEDRALSURFACETYPE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWPOLY **geoms; } LWPSURFACE; /* TINTYPE */ typedef struct { uint8_t type; uint8_t flags; GBOX *bbox; int32_t srid; int ngeoms; /* how many geometries we are currently storing */ int maxgeoms; /* how many geometries we have space for in **geoms */ LWTRIANGLE **geoms; } LWTIN; /* Casts LWGEOM->LW* (return NULL if cast is illegal) */ extern LWMPOLY *lwgeom_as_lwmpoly(const LWGEOM *lwgeom); extern LWMLINE *lwgeom_as_lwmline(const LWGEOM *lwgeom); extern LWMPOINT *lwgeom_as_lwmpoint(const LWGEOM *lwgeom); extern LWCOLLECTION *lwgeom_as_lwcollection(const LWGEOM *lwgeom); extern LWPOLY *lwgeom_as_lwpoly(const LWGEOM *lwgeom); extern LWLINE *lwgeom_as_lwline(const LWGEOM *lwgeom); extern LWPOINT *lwgeom_as_lwpoint(const LWGEOM *lwgeom); extern LWCIRCSTRING *lwgeom_as_lwcircstring(const LWGEOM *lwgeom); extern LWCURVEPOLY *lwgeom_as_lwcurvepoly(const LWGEOM *lwgeom); extern LWCOMPOUND *lwgeom_as_lwcompound(const LWGEOM *lwgeom); extern LWPSURFACE *lwgeom_as_lwpsurface(const LWGEOM *lwgeom); extern LWTRIANGLE *lwgeom_as_lwtriangle(const LWGEOM *lwgeom); extern LWTIN *lwgeom_as_lwtin(const LWGEOM *lwgeom); extern LWGEOM *lwgeom_as_multi(const LWGEOM *lwgeom); /* Casts LW*->LWGEOM (always cast) */ extern LWGEOM *lwtin_as_lwgeom(const LWTIN *obj); extern LWGEOM *lwtriangle_as_lwgeom(const LWTRIANGLE *obj); extern LWGEOM *lwpsurface_as_lwgeom(const LWPSURFACE *obj); extern LWGEOM *lwmpoly_as_lwgeom(const LWMPOLY *obj); extern LWGEOM *lwmline_as_lwgeom(const LWMLINE *obj); extern LWGEOM *lwmpoint_as_lwgeom(const LWMPOINT *obj); extern LWGEOM *lwcollection_as_lwgeom(const LWCOLLECTION *obj); extern LWGEOM *lwcircstring_as_lwgeom(const LWCIRCSTRING *obj); extern LWGEOM *lwcompound_as_lwgeom(const LWCOMPOUND *obj); extern LWGEOM *lwcurvepoly_as_lwgeom(const LWCURVEPOLY *obj); extern LWGEOM *lwpoly_as_lwgeom(const LWPOLY *obj); extern LWGEOM *lwline_as_lwgeom(const LWLINE *obj); extern LWGEOM *lwpoint_as_lwgeom(const LWPOINT *obj); extern LWCOLLECTION* lwcollection_add_lwgeom(LWCOLLECTION *col, const LWGEOM *geom); extern LWMPOINT* lwmpoint_add_lwpoint(LWMPOINT *mobj, const LWPOINT *obj); extern LWMLINE* lwmline_add_lwline(LWMLINE *mobj, const LWLINE *obj); extern LWMPOLY* lwmpoly_add_lwpoly(LWMPOLY *mobj, const LWPOLY *obj); extern LWPSURFACE* lwpsurface_add_lwpoly(LWPSURFACE *mobj, const LWPOLY *obj); extern LWTIN* lwtin_add_lwtriangle(LWTIN *mobj, const LWTRIANGLE *obj); /*********************************************************************** ** Utility functions for flag byte and srid_flag integer. */ /** * Construct a new flags char. */ extern uint8_t gflags(int hasz, int hasm, int geodetic); /** * Extract the geometry type from the serialized form (it hides in * the anonymous data area, so this is a handy function). */ extern uint32_t gserialized_get_type(const GSERIALIZED *g); /** * Extract the SRID from the serialized form (it is packed into * three bytes so this is a handy function). */ extern int32_t gserialized_get_srid(const GSERIALIZED *g); /** * Write the SRID into the serialized form (it is packed into * three bytes so this is a handy function). */ extern void gserialized_set_srid(GSERIALIZED *g, int32_t srid); /** * Check if a #GSERIALIZED is empty without deserializing first. * Only checks if the number of elements of the parent geometry * is zero, will not catch collections of empty, eg: * GEOMETRYCOLLECTION(POINT EMPTY) */ extern int gserialized_is_empty(const GSERIALIZED *g); /** * Check if a #GSERIALIZED has a bounding box without deserializing first. */ extern int gserialized_has_bbox(const GSERIALIZED *gser); /** * Check if a #GSERIALIZED has a Z ordinate. */ extern int gserialized_has_z(const GSERIALIZED *gser); /** * Check if a #GSERIALIZED has an M ordinate. */ extern int gserialized_has_m(const GSERIALIZED *gser); /** * Return a number indicating presence of Z and M coordinates. * 0 = None, 1 = M, 2 = Z, 3 = ZM */ extern int gserialized_get_zm(const GSERIALIZED *gser); /** * Return the number of dimensions (2, 3, 4) in a geometry */ extern int gserialized_ndims(const GSERIALIZED *gser); /** * Call this function to drop BBOX and SRID * from LWGEOM. If LWGEOM type is *not* flagged * with the HASBBOX flag and has a bbox, it * will be released. */ extern void lwgeom_drop_bbox(LWGEOM *lwgeom); extern void lwgeom_drop_srid(LWGEOM *lwgeom); /** * Compute a bbox if not already computed * * After calling this function lwgeom->bbox is only * NULL if the geometry is empty. */ extern void lwgeom_add_bbox(LWGEOM *lwgeom); /** * Compute a box for geom and all sub-geometries, if not already computed */ extern void lwgeom_add_bbox_deep(LWGEOM *lwgeom, GBOX *gbox); /** * Get a non-empty geometry bounding box, computing and * caching it if not already there * * NOTE: empty geometries don't have a bounding box so * you'd still get a NULL for them. */ extern const GBOX *lwgeom_get_bbox(const LWGEOM *lwgeom); /** * Determine whether a LWGEOM can contain sub-geometries or not */ extern int lwgeom_is_collection(const LWGEOM *lwgeom); /******************************************************************/ /* Functions that work on type numbers */ /** * Determine whether a type number is a collection or not */ extern int lwtype_is_collection(uint8_t type); /** * Given an lwtype number, what homogeneous collection can hold it? */ extern int lwtype_get_collectiontype(uint8_t type); /** * Return the type name string associated with a type number * (e.g. Point, LineString, Polygon) */ extern const char *lwtype_name(uint8_t type); /******************************************************************/ /* * copies a point from the point array into the parameter point * will set point's z=0 (or NaN) if pa is 2d * will set point's m=0 (or NaN) if pa is 3d or 2d * NOTE: point is a real POINT3D *not* a pointer */ extern POINT4D getPoint4d(const POINTARRAY *pa, int n); /* * copies a point from the point array into the parameter point * will set point's z=0 (or NaN) if pa is 2d * will set point's m=0 (or NaN) if pa is 3d or 2d * NOTE: this will modify the point4d pointed to by 'point'. */ extern int getPoint4d_p(const POINTARRAY *pa, int n, POINT4D *point); /* * copies a point from the point array into the parameter point * will set point's z=0 (or NaN) if pa is 2d * NOTE: point is a real POINT3D *not* a pointer */ extern POINT3DZ getPoint3dz(const POINTARRAY *pa, int n); extern POINT3DM getPoint3dm(const POINTARRAY *pa, int n); /* * copies a point from the point array into the parameter point * will set point's z=0 (or NaN) if pa is 2d * NOTE: this will modify the point3d pointed to by 'point'. */ extern int getPoint3dz_p(const POINTARRAY *pa, int n, POINT3DZ *point); extern int getPoint3dm_p(const POINTARRAY *pa, int n, POINT3DM *point); /* * copies a point from the point array into the parameter point * z value (if present is not returned) * NOTE: point is a real POINT3D *not* a pointer */ extern POINT2D getPoint2d(const POINTARRAY *pa, int n); /* * copies a point from the point array into the parameter point * z value (if present is not returned) * NOTE: this will modify the point2d pointed to by 'point'. */ extern int getPoint2d_p(const POINTARRAY *pa, int n, POINT2D *point); /** * Returns a pointer into the POINTARRAY serialized_ptlist, * suitable for reading from. This is very high performance * and declared const because you aren't allowed to muck with the * values, only read them. */ extern const POINT2D* getPoint2d_cp(const POINTARRAY *pa, int n); /* * set point N to the given value * NOTE that the pointarray can be of any * dimension, the appropriate ordinate values * will be extracted from it * * N must be a valid point index */ extern void ptarray_set_point4d(POINTARRAY *pa, int n, const POINT4D *p4d); /* * get a pointer to nth point of a POINTARRAY * You'll need to cast it to appropriate dimensioned point. * Note that if you cast to a higher dimensional point you'll * possibly corrupt the POINTARRAY. * * WARNING: Don't cast this to a POINT ! * it would not be reliable due to memory alignment constraints */ extern uint8_t *getPoint_internal(const POINTARRAY *pa, int n); /* * size of point represeneted in the POINTARRAY * 16 for 2d, 24 for 3d, 32 for 4d */ extern int ptarray_point_size(const POINTARRAY *pa); /** * Construct an empty pointarray, allocating storage and setting * the npoints, but not filling in any information. Should be used in conjunction * with ptarray_set_point4d to fill in the information in the array. */ extern POINTARRAY* ptarray_construct(char hasz, char hasm, uint32_t npoints); /** * Construct a new #POINTARRAY, <em>copying</em> in the data from ptlist */ extern POINTARRAY* ptarray_construct_copy_data(char hasz, char hasm, uint32_t npoints, const uint8_t *ptlist); /** * Construct a new #POINTARRAY, <em>referencing</em> to the data from ptlist */ extern POINTARRAY* ptarray_construct_reference_data(char hasz, char hasm, uint32_t npoints, uint8_t *ptlist); /** * Create a new #POINTARRAY with no points. Allocate enough storage * to hold maxpoints vertices before having to reallocate the storage * area. */ extern POINTARRAY* ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints); /** * Append a point to the end of an existing #POINTARRAY * If allow_duplicate is LW_TRUE, then a duplicate point will * not be added. */ extern int ptarray_append_point(POINTARRAY *pa, const POINT4D *pt, int allow_duplicates); /** * Append a #POINTARRAY, pa2 to the end of an existing #POINTARRAY, pa1. * * If gap_tolerance is >= 0 then the end point of pa1 will be checked for * being within gap_tolerance 2d distance from start point of pa2 or an * error will be raised and LW_FAILURE returned. * A gap_tolerance < 0 disables the check. * * If end point of pa1 and start point of pa2 are 2d-equal, then pa2 first * point will not be appended. */ extern int ptarray_append_ptarray(POINTARRAY *pa1, POINTARRAY *pa2, double gap_tolerance); /** * Insert a point into an existing #POINTARRAY. Zero * is the index of the start of the array. */ extern int ptarray_insert_point(POINTARRAY *pa, const POINT4D *p, int where); /** * Remove a point from an existing #POINTARRAY. Zero * is the index of the start of the array. */ extern int ptarray_remove_point(POINTARRAY *pa, int where); extern POINTARRAY *ptarray_addPoint(const POINTARRAY *pa, uint8_t *p, size_t pdims, uint32_t where); extern POINTARRAY *ptarray_removePoint(POINTARRAY *pa, uint32_t where); extern POINTARRAY *ptarray_merge(POINTARRAY *pa1, POINTARRAY *pa2); extern int ptarray_is_closed(const POINTARRAY *pa); extern int ptarray_is_closed_2d(const POINTARRAY *pa); extern int ptarray_is_closed_3d(const POINTARRAY *pa); extern int ptarray_is_closed_z(const POINTARRAY *pa); extern void ptarray_longitude_shift(POINTARRAY *pa); extern void ptarray_reverse(POINTARRAY *pa); extern POINTARRAY* ptarray_flip_coordinates(POINTARRAY *pa); /** * @d1 start location (distance from start / total distance) * @d2 end location (distance from start / total distance) * @param tolerance snap to vertices at locations < tolerance away from given ones */ extern POINTARRAY *ptarray_substring(POINTARRAY *pa, double d1, double d2, double tolerance); /** * Strip out the Z/M components of an #LWGEOM */ extern LWGEOM* lwgeom_force_2d(const LWGEOM *geom); extern LWGEOM* lwgeom_force_3dz(const LWGEOM *geom); extern LWGEOM* lwgeom_force_3dm(const LWGEOM *geom); extern LWGEOM* lwgeom_force_4d(const LWGEOM *geom); extern LWGEOM* lwgeom_simplify(const LWGEOM *igeom, double dist); /* * Force to use SFS 1.1 geometry type * (rather than SFS 1.2 and/or SQL/MM) */ extern LWGEOM* lwgeom_force_sfs(LWGEOM *geom, int version); /*-------------------------------------------------------- * all the base types (point/line/polygon) will have a * basic constructor, basic de-serializer, basic serializer, * bounding box finder and (TODO) serialized form size finder. *--------------------------------------------------------*/ /* * convenience functions to hide the POINTARRAY */ extern int lwpoint_getPoint2d_p(const LWPOINT *point, POINT2D *out); extern int lwpoint_getPoint3dz_p(const LWPOINT *point, POINT3DZ *out); extern int lwpoint_getPoint3dm_p(const LWPOINT *point, POINT3DM *out); extern int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out); /****************************************************************** * LWLINE functions ******************************************************************/ /** * Add a LWPOINT to an LWLINE */ extern int lwline_add_lwpoint(LWLINE *line, LWPOINT *point, int where); /****************************************************************** * LWPOLY functions ******************************************************************/ /** * Add a ring, allocating extra space if necessary. The polygon takes * ownership of the passed point array. */ extern int lwpoly_add_ring(LWPOLY *poly, POINTARRAY *pa); /** * Add a ring, allocating extra space if necessary. The curvepolygon takes * ownership of the passed point array. */ extern int lwcurvepoly_add_ring(LWCURVEPOLY *poly, LWGEOM *ring); /** * Add a component, allocating extra space if necessary. The compoundcurve * takes owership of the passed geometry. */ extern int lwcompound_add_lwgeom(LWCOMPOUND *comp, LWGEOM *geom); /** * Construct an equivalent curve polygon from a polygon. Curve polygons * can have linear rings as their rings, so this works fine (in theory?) */ extern LWCURVEPOLY* lwcurvepoly_construct_from_lwpoly(LWPOLY *lwpoly); /****************************************************************** * LWGEOM functions ******************************************************************/ extern int lwcollection_ngeoms(const LWCOLLECTION *col); /* Given a generic geometry/collection, return the "simplest" form. */ extern LWGEOM *lwgeom_homogenize(const LWGEOM *geom); /****************************************************************** * LWMULTIx and LWCOLLECTION functions ******************************************************************/ LWGEOM *lwcollection_getsubgeom(LWCOLLECTION *col, int gnum); LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type); /****************************************************************** * SERIALIZED FORM functions ******************************************************************/ /** * Set the SRID on an LWGEOM * For collections, only the parent gets an SRID, all * the children get SRID_UNKNOWN. */ extern void lwgeom_set_srid(LWGEOM *geom, int srid); /*------------------------------------------------------ * other stuff * * handle the double-to-float conversion. The results of this * will usually be a slightly bigger box because of the difference * between float8 and float4 representations. */ extern BOX3D* box3d_from_gbox(const GBOX *gbox); extern GBOX* box3d_to_gbox(const BOX3D *b3d); void expand_box3d(BOX3D *box, double d); /**************************************************************** * MEMORY MANAGEMENT ****************************************************************/ /* * The *_free family of functions frees *all* memory associated * with the pointer. When the recursion gets to the level of the * POINTARRAY, the POINTARRAY is only freed if it is not flagged * as "read only". LWGEOMs constructed on top of GSERIALIZED * from PgSQL use read only point arrays. */ extern void ptarray_free(POINTARRAY *pa); extern void lwpoint_free(LWPOINT *pt); extern void lwline_free(LWLINE *line); extern void lwpoly_free(LWPOLY *poly); extern void lwtriangle_free(LWTRIANGLE *triangle); extern void lwmpoint_free(LWMPOINT *mpt); extern void lwmline_free(LWMLINE *mline); extern void lwmpoly_free(LWMPOLY *mpoly); extern void lwpsurface_free(LWPSURFACE *psurf); extern void lwtin_free(LWTIN *tin); extern void lwcollection_free(LWCOLLECTION *col); extern void lwcircstring_free(LWCIRCSTRING *curve); extern void lwgeom_free(LWGEOM *geom); /* * The *_release family of functions frees the LWGEOM structures * surrounding the POINTARRAYs but leaves the POINTARRAYs * intact. Useful when re-shaping geometries between types, * or splicing geometries together. */ extern void lwpoint_release(LWPOINT *lwpoint); extern void lwline_release(LWLINE *lwline); extern void lwpoly_release(LWPOLY *lwpoly); extern void lwtriangle_release(LWTRIANGLE *lwtriangle); extern void lwcircstring_release(LWCIRCSTRING *lwcirc); extern void lwmpoint_release(LWMPOINT *lwpoint); extern void lwmline_release(LWMLINE *lwline); extern void lwmpoly_release(LWMPOLY *lwpoly); extern void lwpsurface_release(LWPSURFACE *lwpsurface); extern void lwtin_release(LWTIN *lwtin); extern void lwcollection_release(LWCOLLECTION *lwcollection); extern void lwgeom_release(LWGEOM *lwgeom); /**************************************************************** * Utility ****************************************************************/ extern void printBOX3D(BOX3D *b); extern void printPA(POINTARRAY *pa); extern void printLWPOINT(LWPOINT *point); extern void printLWLINE(LWLINE *line); extern void printLWPOLY(LWPOLY *poly); extern void printLWTRIANGLE(LWTRIANGLE *triangle); extern void printLWPSURFACE(LWPSURFACE *psurf); extern void printLWTIN(LWTIN *tin); extern float next_float_down(double d); extern float next_float_up(double d); extern double next_double_down(float d); extern double next_double_up(float d); /* general utilities 2D*/ extern double distance2d_pt_pt(const POINT2D *p1, const POINT2D *p2); extern double distance2d_pt_seg(const POINT2D *p, const POINT2D *A, const POINT2D *B); extern LWGEOM *lw_dist2d_distancepoint(LWGEOM *lw1, LWGEOM *lw2,int srid,int mode); extern LWGEOM *lw_dist2d_distanceline(LWGEOM *lw1, LWGEOM *lw2,int srid,int mode); extern double lwgeom_mindistance2d(LWGEOM *lw1, LWGEOM *lw2); extern double lwgeom_mindistance2d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance); extern double lwgeom_maxdistance2d(LWGEOM *lw1, LWGEOM *lw2); extern double lwgeom_maxdistance2d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance); /* 3D*/ extern double distance3d_pt_pt(const POINT3D *p1, const POINT3D *p2); extern double distance3d_pt_seg(const POINT3D *p, const POINT3D *A, const POINT3D *B); extern LWGEOM *lw_dist3d_distancepoint(LWGEOM *lw1, LWGEOM *lw2,int srid,int mode); extern LWGEOM *lw_dist3d_distanceline(LWGEOM *lw1, LWGEOM *lw2,int srid,int mode); extern double lwgeom_mindistance3d(LWGEOM *lw1, LWGEOM *lw2); extern double lwgeom_mindistance3d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance); extern double lwgeom_maxdistance3d(LWGEOM *lw1, LWGEOM *lw2); extern double lwgeom_maxdistance3d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance); extern double lwgeom_area(const LWGEOM *geom); extern double lwgeom_length(const LWGEOM *geom); extern double lwgeom_length_2d(const LWGEOM *geom); extern double lwgeom_perimeter(const LWGEOM *geom); extern double lwgeom_perimeter_2d(const LWGEOM *geom); extern void lwgeom_affine(LWGEOM *geom, const AFFINE *affine); extern int lwgeom_dimension(const LWGEOM *geom); extern LWPOINT* lwline_get_lwpoint(LWLINE *line, int where); extern LWPOINT* lwcircstring_get_lwpoint(LWCIRCSTRING *circ, int where); extern double ptarray_length_2d(const POINTARRAY *pts); extern double ptarray_length(const POINTARRAY *pts); extern double ptarray_arc_length_2d(const POINTARRAY *pts); extern int pt_in_ring_2d(const POINT2D *p, const POINTARRAY *ring); extern int azimuth_pt_pt(const POINT2D *p1, const POINT2D *p2, double *ret); extern int lwpoint_inside_circle(const LWPOINT *p, double cx, double cy, double rad); extern void lwgeom_reverse(LWGEOM *lwgeom); extern void lwline_reverse(LWLINE *line); extern void lwpoly_reverse(LWPOLY *poly); extern void lwtriangle_reverse(LWTRIANGLE *triangle); extern char* lwgeom_summary(const LWGEOM *lwgeom, int offset); extern char* lwpoint_to_latlon(const LWPOINT *p, const char *format); extern int lwgeom_startpoint(const LWGEOM* lwgeom, POINT4D* pt); /** * Ensure the outer ring is clockwise oriented and all inner rings * are counter-clockwise. */ extern void lwgeom_force_clockwise(LWGEOM *lwgeom); extern void lwpoly_force_clockwise(LWPOLY *poly); extern void lwtriangle_force_clockwise(LWTRIANGLE *triangle); extern void interpolate_point4d(POINT4D *A, POINT4D *B, POINT4D *I, double F); void lwgeom_longitude_shift(LWGEOM *lwgeom); /** * @brief Check whether or not a lwgeom is big enough to warrant a bounding box. * * Check whether or not a lwgeom is big enough to warrant a bounding box * when stored in the serialized form on disk. Currently only points are * considered small enough to not require a bounding box, because the * index operations can generate a large number of box-retrieval operations * when scanning keys. */ extern int lwgeom_needs_bbox(const LWGEOM *geom); /** * Count the total number of vertices in any #LWGEOM. */ extern int lwgeom_count_vertices(const LWGEOM *geom); /** * Count the total number of rings in any #LWGEOM. Multipolygons * and other collections get counted, not the same as OGC st_numrings. */ extern int lwgeom_count_rings(const LWGEOM *geom); /** * Return true or false depending on whether a geometry has * a valid SRID set. */ extern int lwgeom_has_srid(const LWGEOM *geom); /** * Return true or false depending on whether a geometry is an "empty" * geometry (no vertices members) */ extern int lwgeom_is_empty(const LWGEOM *geom); /** * Return true or false depending on whether a geometry is a linear * feature that closes on itself. */ extern int lwgeom_is_closed(const LWGEOM *geom); /** * Return the dimensionality (relating to point/line/poly) of an lwgeom */ extern int lwgeom_dimensionality(LWGEOM *geom); /* Is lwgeom1 geometrically equal to lwgeom2 ? */ char lwgeom_same(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2); char ptarray_same(const POINTARRAY *pa1, const POINTARRAY *pa2); char lwpoint_same(const LWPOINT *p1, const LWPOINT *p2); char lwline_same(const LWLINE *p1, const LWLINE *p2); char lwpoly_same(const LWPOLY *p1, const LWPOLY *p2); char lwtriangle_same(const LWTRIANGLE *p1, const LWTRIANGLE *p2); char lwcollection_same(const LWCOLLECTION *p1, const LWCOLLECTION *p2); char lwcircstring_same(const LWCIRCSTRING *p1, const LWCIRCSTRING *p2); /** * @brief Clone LWGEOM object. Serialized point lists are not copied. * * #GBOX are copied * * @see ptarray_clone */ extern LWGEOM *lwgeom_clone(const LWGEOM *lwgeom); /** * Deep clone an LWGEOM, everything is copied */ extern LWGEOM *lwgeom_clone_deep(const LWGEOM *lwgeom); /* TODO Move to Internal */ LWPOINT *lwpoint_clone(const LWPOINT *lwgeom); POINTARRAY *ptarray_clone_deep(const POINTARRAY *ptarray); /* * Geometry constructors. These constructors to not copy the point arrays * passed to them, they just take references, so do not free them out * from underneath the geometries. */ extern LWPOINT* lwpoint_construct(int srid, GBOX *bbox, POINTARRAY *point); extern LWMPOINT *lwmpoint_construct(int srid, const POINTARRAY *pa); extern LWLINE* lwline_construct(int srid, GBOX *bbox, POINTARRAY *points); extern LWCIRCSTRING* lwcircstring_construct(int srid, GBOX *bbox, POINTARRAY *points); extern LWPOLY* lwpoly_construct(int srid, GBOX *bbox, uint32_t nrings, POINTARRAY **points); extern LWCURVEPOLY* lwcurvepoly_construct(int srid, GBOX *bbox, uint32_t nrings, LWGEOM **geoms); extern LWTRIANGLE* lwtriangle_construct(int srid, GBOX *bbox, POINTARRAY *points); extern LWCOLLECTION* lwcollection_construct(uint8_t type, int srid, GBOX *bbox, uint32_t ngeoms, LWGEOM **geoms); /* * Empty geometry constructors. */ extern LWGEOM* lwgeom_construct_empty(uint8_t type, int srid, char hasz, char hasm); extern LWPOINT* lwpoint_construct_empty(int srid, char hasz, char hasm); extern LWLINE* lwline_construct_empty(int srid, char hasz, char hasm); extern LWPOLY* lwpoly_construct_empty(int srid, char hasz, char hasm); extern LWCURVEPOLY* lwcurvepoly_construct_empty(int srid, char hasz, char hasm); extern LWCIRCSTRING* lwcircstring_construct_empty(int srid, char hasz, char hasm); extern LWCOMPOUND* lwcompound_construct_empty(int srid, char hasz, char hasm); extern LWTRIANGLE* lwtriangle_construct_empty(int srid, char hasz, char hasm); extern LWMPOINT* lwmpoint_construct_empty(int srid, char hasz, char hasm); extern LWMLINE* lwmline_construct_empty(int srid, char hasz, char hasm); extern LWMPOLY* lwmpoly_construct_empty(int srid, char hasz, char hasm); extern LWCOLLECTION* lwcollection_construct_empty(uint8_t type, int srid, char hasz, char hasm); /* Other constructors */ extern LWPOINT *lwpoint_make2d(int srid, double x, double y); extern LWPOINT *lwpoint_make3dz(int srid, double x, double y, double z); extern LWPOINT *lwpoint_make3dm(int srid, double x, double y, double m); extern LWPOINT *lwpoint_make4d(int srid, double x, double y, double z, double m); extern LWPOINT *lwpoint_make(int srid, int hasz, int hasm, const POINT4D *p); extern LWLINE *lwline_from_lwgeom_array(int srid, uint32_t ngeoms, LWGEOM **geoms); extern LWLINE *lwline_from_ptarray(int srid, uint32_t npoints, LWPOINT **points); /* TODO: deprecate */ extern LWLINE *lwline_from_lwmpoint(int srid, LWMPOINT *mpoint); extern LWLINE *lwline_addpoint(LWLINE *line, LWPOINT *point, uint32_t where); extern LWLINE *lwline_removepoint(LWLINE *line, uint32_t which); extern void lwline_setPoint4d(LWLINE *line, uint32_t which, POINT4D *newpoint); extern LWPOLY *lwpoly_from_lwlines(const LWLINE *shell, uint32_t nholes, const LWLINE **holes); extern LWTRIANGLE *lwtriangle_from_lwline(const LWLINE *shell); /* Some point accessors */ extern double lwpoint_get_x(const LWPOINT *point); extern double lwpoint_get_y(const LWPOINT *point); extern double lwpoint_get_z(const LWPOINT *point); extern double lwpoint_get_m(const LWPOINT *point); /** * Return SRID number */ extern int32_t lwgeom_get_srid(const LWGEOM *geom); /** * Return LWTYPE number */ extern uint32_t lwgeom_get_type(const LWGEOM *geom); /** * Return #LW_TRUE if geometry has Z ordinates */ extern int lwgeom_has_z(const LWGEOM *geom); /** * Return #LW_TRUE if geometry has M ordinates. */ extern int lwgeom_has_m(const LWGEOM *geom); /** * Return the number of dimensions (2, 3, 4) in a geometry */ extern int lwgeom_ndims(const LWGEOM *geom); /* * Given a point, returns the location of closest point on pointarray * as a fraction of total length (0: first point -- 1: last point). * * If not-null, the third argument will be set to the actual distance * of the point from the pointarray. */ extern double ptarray_locate_point(const POINTARRAY *pa, const POINT4D *pt, double *dist, POINT4D *p_located); /** * Add a measure dimension to a line, interpolating linearly from the start * to the end value. */ extern LWLINE *lwline_measured_from_lwline(const LWLINE *lwline, double m_start, double m_end); extern LWMLINE* lwmline_measured_from_lwmline(const LWMLINE *lwmline, double m_start, double m_end); /** * Determine the location(s) along a measured line where m occurs and * return as a multipoint. Offset to left (positive) or right (negative). */ extern LWGEOM* lwgeom_locate_along(const LWGEOM *lwin, double m, double offset); /** * Determine the segments along a measured line that fall within the m-range * given. Return as a multiline or geometrycollection. * Offset to left (positive) or right (negative). */ extern LWCOLLECTION* lwgeom_locate_between(const LWGEOM *lwin, double from, double to, double offset); /** * Find the measure value at the location on the line closest to the point. */ extern double lwgeom_interpolate_point(const LWGEOM *lwin, const LWPOINT *lwpt); /* * Ensure every segment is at most 'dist' long. * Returned LWGEOM might is unchanged if a POINT. */ extern LWGEOM *lwgeom_segmentize2d(LWGEOM *line, double dist); extern POINTARRAY *ptarray_segmentize2d(const POINTARRAY *ipa, double dist); extern LWLINE *lwline_segmentize2d(LWLINE *line, double dist); extern LWPOLY *lwpoly_segmentize2d(LWPOLY *line, double dist); extern LWCOLLECTION *lwcollection_segmentize2d(LWCOLLECTION *coll, double dist); /** * Calculate the GeoHash (http://geohash.org) string for a geometry. Caller must free. */ char *lwgeom_geohash(const LWGEOM *lwgeom, int precision); unsigned int geohash_point_as_int(POINT2D *pt); /** * The return values of lwline_crossing_direction() */ enum CG_LINE_CROSS_TYPE { LINE_NO_CROSS = 0, LINE_CROSS_LEFT = -1, LINE_CROSS_RIGHT = 1, LINE_MULTICROSS_END_LEFT = -2, LINE_MULTICROSS_END_RIGHT = 2, LINE_MULTICROSS_END_SAME_FIRST_LEFT = -3, LINE_MULTICROSS_END_SAME_FIRST_RIGHT = 3 }; /** * Given two lines, characterize how (and if) they cross each other */ int lwline_crossing_direction(const LWLINE *l1, const LWLINE *l2); /** * Given a geometry clip based on the from/to range of one of its ordinates (x, y, z, m). Use for m- and z- clipping. */ LWCOLLECTION* lwgeom_clip_to_ordinate_range(const LWGEOM *lwin, char ordinate, double from, double to, double offset); /** * Macros for specifying GML options. * @{ */ /** For GML3 only, include srsDimension attribute in output */ #define LW_GML_IS_DIMS (1<<0) /** For GML3 only, declare that datas are lat/lon. Swaps axis order */ #define LW_GML_IS_DEGREE (1<<1) /** For GML3, use <LineString> rather than <Curve> for lines */ #define LW_GML_SHORTLINE (1<<2) /** For GML2 and GML3, output only extent of geometry */ #define LW_GML_EXTENT (1<<4) #define IS_DIMS(x) ((x) & LW_GML_IS_DIMS) #define IS_DEGREE(x) ((x) & LW_GML_IS_DEGREE) /** @} */ extern char* lwgeom_to_gml2(const LWGEOM *geom, const char *srs, int precision, const char *prefix); extern char* lwgeom_extent_to_gml2(const LWGEOM *geom, const char *srs, int precision, const char *prefix); /** * @param opts output options bitfield, see LW_GML macros for meaning */ extern char* lwgeom_extent_to_gml3(const LWGEOM *geom, const char *srs, int precision, int opts, const char *prefix); extern char* lwgeom_to_gml3(const LWGEOM *geom, const char *srs, int precision, int opts, const char *prefix, const char *id); extern char* lwgeom_to_kml2(const LWGEOM *geom, int precision, const char *prefix); extern char* lwgeom_to_geojson(const LWGEOM *geo, char *srs, int precision, int has_bbox); extern char* lwgeom_to_svg(const LWGEOM *geom, int precision, int relative); extern char* lwgeom_to_x3d3(const LWGEOM *geom, char *srs, int precision, int opts, const char *defid); /** * Create an LWGEOM object from a GeoJSON representation * * @param geojson the GeoJSON input * @param srs output parameter. Will be set to a newly allocated * string holding the spatial reference string, or NULL * if no such parameter is found in input. * If not null, the pointer must be freed with lwfree. */ extern LWGEOM* lwgeom_from_geojson(const char *geojson, char **srs); /** * Initialize a spheroid object for use in geodetic functions. */ extern void spheroid_init(SPHEROID *s, double a, double b); /** * Calculate the geodetic distance from lwgeom1 to lwgeom2 on the spheroid. * A spheroid with major axis == minor axis will be treated as a sphere. * Pass in a tolerance in spheroid units. */ extern double lwgeom_distance_spheroid(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2, const SPHEROID *spheroid, double tolerance); /** * Calculate the location of a point on a spheroid, give a start point, bearing and distance. */ extern LWPOINT* lwgeom_project_spheroid(const LWPOINT *r, const SPHEROID *spheroid, double distance, double azimuth); /** * Derive a new geometry with vertices added to ensure no vertex is more * than max_seg_length (in radians) from any other vertex. */ extern LWGEOM* lwgeom_segmentize_sphere(const LWGEOM *lwg_in, double max_seg_length); /** * Calculate the bearing between two points on a spheroid. */ extern double lwgeom_azumith_spheroid(const LWPOINT *r, const LWPOINT *s, const SPHEROID *spheroid); /** * Calculate the geodetic area of a lwgeom on the sphere. The result * will be multiplied by the average radius of the supplied spheroid. */ extern double lwgeom_area_sphere(const LWGEOM *lwgeom, const SPHEROID *spheroid); /** * Calculate the geodetic area of a lwgeom on the spheroid. The result * will have the squared units of the spheroid axes. */ extern double lwgeom_area_spheroid(const LWGEOM *lwgeom, const SPHEROID *spheroid); /** * Calculate the geodetic length of a lwgeom on the unit sphere. The result * will have to by multiplied by the real radius to get the real length. */ extern double lwgeom_length_spheroid(const LWGEOM *geom, const SPHEROID *s); /** * Calculate covers predicate for two lwgeoms on the sphere. Currently * only handles point-in-polygon. */ extern int lwgeom_covers_lwgeom_sphere(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2); /** * Remove repeated points! */ extern LWGEOM* lwgeom_remove_repeated_points(LWGEOM *in); extern char lwtriangle_is_repeated_points(LWTRIANGLE *triangle); /** * Reverse the X and Y coordinate order. Useful for geometries in lat/lon order * than need to be converted to lon/lat order. */ extern LWGEOM* lwgeom_flip_coordinates(LWGEOM *in); /** * Convert a single hex digit into the corresponding char */ extern uint8_t parse_hex(char *str); /** * Convert a char into a human readable hex digit */ extern void deparse_hex(uint8_t str, char *result); /*********************************************************************** ** Functions for managing serialized forms and bounding boxes. */ /** * Calculate the geocentric bounding box directly from the serialized * form of the geodetic coordinates. Only accepts serialized geographies * flagged as geodetic. Caller is responsible for disposing of the GBOX. */ extern GBOX* gserialized_calculate_gbox_geocentric(const GSERIALIZED *g); /** * Calculate the geocentric bounding box directly from the serialized * form of the geodetic coordinates. Only accepts serialized geographies * flagged as geodetic. */ int gserialized_calculate_gbox_geocentric_p(const GSERIALIZED *g, GBOX *g_box); /** * Return a WKT representation of the gserialized geometry. * Caller is responsible for disposing of the char*. */ extern char* gserialized_to_string(const GSERIALIZED *g); /** * Return a copy of the input serialized geometry. */ extern GSERIALIZED* gserialized_copy(const GSERIALIZED *g); /** * Check that coordinates of LWGEOM are all within the geodetic range (-180, -90, 180, 90) */ extern int lwgeom_check_geodetic(const LWGEOM *geom); /** * Gently move coordinates of LWGEOM if they are close enough into geodetic range. */ extern int lwgeom_nudge_geodetic(LWGEOM *geom); /** * Force coordinates of LWGEOM into geodetic range (-180, -90, 180, 90) */ extern int lwgeom_force_geodetic(LWGEOM *geom); /** * Set the FLAGS geodetic bit on geometry an all sub-geometries and pointlists */ extern void lwgeom_set_geodetic(LWGEOM *geom, int value); /** * Calculate the geodetic bounding box for an LWGEOM. Z/M coordinates are * ignored for this calculation. Pass in non-null, geodetic bounding box for function * to fill out. LWGEOM must have been built from a GSERIALIZED to provide * double aligned point arrays. */ extern int lwgeom_calculate_gbox_geodetic(const LWGEOM *geom, GBOX *gbox); /** * Calculate the 2-4D bounding box of a geometry. Z/M coordinates are honored * for this calculation, though for curves they are not included in calculations * of curvature. */ extern int lwgeom_calculate_gbox_cartesian(const LWGEOM *lwgeom, GBOX *gbox); /** * Calculate bounding box of a geometry, automatically taking into account * whether it is cartesian or geodetic. */ extern int lwgeom_calculate_gbox(const LWGEOM *lwgeom, GBOX *gbox); /** * New function to read doubles directly from the double* coordinate array * of an aligned lwgeom #POINTARRAY (built by de-serializing a #GSERIALIZED). */ extern int getPoint2d_p_ro(const POINTARRAY *pa, int n, POINT2D **point); /** * Calculate geodetic (x/y/z) box and add values to gbox. Return #LW_SUCCESS on success. */ extern int ptarray_calculate_gbox_geodetic(const POINTARRAY *pa, GBOX *gbox); /** * Calculate box (x/y) and add values to gbox. Return #LW_SUCCESS on success. */ extern int ptarray_calculate_gbox_cartesian(const POINTARRAY *pa, GBOX *gbox ); /** * Calculate a spherical point that falls outside the geocentric gbox */ void gbox_pt_outside(const GBOX *gbox, POINT2D *pt_outside); /** * Create a new gbox with the dimensionality indicated by the flags. Caller * is responsible for freeing. */ extern GBOX* gbox_new(uint8_t flags); /** * Zero out all the entries in the #GBOX. Useful for cleaning * statically allocated gboxes. */ extern void gbox_init(GBOX *gbox); /** * Update the merged #GBOX to be large enough to include itself and the new box. */ extern int gbox_merge(const GBOX *new_box, GBOX *merged_box); /** * Update the output #GBOX to be large enough to include both inputs. */ extern int gbox_union(const GBOX *g1, const GBOX *g2, GBOX *gout); /** * Move the box minimums down and the maximums up by the distance provided. */ extern void gbox_expand(GBOX *g, double d); /** * Initialize a #GBOX using the values of the point. */ extern int gbox_init_point3d(const POINT3D *p, GBOX *gbox); /** * Update the #GBOX to be large enough to include itself and the new point. */ extern int gbox_merge_point3d(const POINT3D *p, GBOX *gbox); /** * Return true if the point is inside the gbox */ extern int gbox_contains_point3d(const GBOX *gbox, const POINT3D *pt); /** * Allocate a string representation of the #GBOX, based on dimensionality of flags. */ extern char* gbox_to_string(const GBOX *gbox); /** * Return a copy of the #GBOX, based on dimensionality of flags. */ extern GBOX* gbox_copy(const GBOX *gbox); /** * Warning, do not use this function, it is very particular about inputs. */ extern GBOX* gbox_from_string(const char *str); /** * Return #LW_TRUE if the #GBOX overlaps, #LW_FALSE otherwise. */ extern int gbox_overlaps(const GBOX *g1, const GBOX *g2); /** * Return #LW_TRUE if the #GBOX overlaps on the 2d plane, #LW_FALSE otherwise. */ extern int gbox_overlaps_2d(const GBOX *g1, const GBOX *g2); /** * Copy the values of original #GBOX into duplicate. */ extern void gbox_duplicate(const GBOX *original, GBOX *duplicate); /** * Return the number of bytes necessary to hold a #GBOX of this dimension in * serialized form. */ extern size_t gbox_serialized_size(uint8_t flags); /** * Check if 2 given Gbox are the same */ extern int gbox_same(const GBOX *g1, const GBOX *g2); /** * Round given GBOX to float boundaries * * This turns a GBOX into the version it would become * after a serialize/deserialize round trip. */ extern void gbox_float_round(GBOX *gbox); /** * Return false if any of the dimensions is NaN or infinite */ extern int gbox_is_valid(const GBOX *gbox); /** * Utility function to get type number from string. For example, a string 'POINTZ' * would return type of 1 and z of 1 and m of 0. Valid */ extern int geometry_type_from_string(const char *str, uint8_t *type, int *z, int *m); /** * Calculate required memory segment to contain a serialized form of the LWGEOM. * Primarily used internally by the serialization code. Exposed to allow the cunit * tests to exercise it. */ extern size_t gserialized_from_lwgeom_size(const LWGEOM *geom); /** * Allocate a new #GSERIALIZED from an #LWGEOM. For all non-point types, a bounding * box will be calculated and embedded in the serialization. The geodetic flag is used * to control the box calculation (cartesian or geocentric). If set, the size pointer * will contain the size of the final output, which is useful for setting the PgSQL * VARSIZE information. */ extern GSERIALIZED* gserialized_from_lwgeom(LWGEOM *geom, int is_geodetic, size_t *size); /** * Allocate a new #LWGEOM from a #GSERIALIZED. The resulting #LWGEOM will have coordinates * that are double aligned and suitable for direct reading using getPoint2d_p_ro */ extern LWGEOM* lwgeom_from_gserialized(const GSERIALIZED *g); /** * Pull a #GBOX from the header of a #GSERIALIZED, if one is available. If * it is not, calculate it from the geometry. If that doesn't work (null * or empty) return LW_FAILURE. */ extern int gserialized_get_gbox_p(const GSERIALIZED *g, GBOX *gbox); /** * Parser check flags * * @see lwgeom_from_wkb * @see lwgeom_from_hexwkb * @see lwgeom_parse_wkt */ #define LW_PARSER_CHECK_MINPOINTS 1 #define LW_PARSER_CHECK_ODD 2 #define LW_PARSER_CHECK_CLOSURE 4 #define LW_PARSER_CHECK_ZCLOSURE 8 #define LW_PARSER_CHECK_NONE 0 #define LW_PARSER_CHECK_ALL (LW_PARSER_CHECK_MINPOINTS | LW_PARSER_CHECK_ODD | LW_PARSER_CHECK_CLOSURE) /** * Parser result structure: returns the result of attempting to convert * (E)WKT/(E)WKB to LWGEOM */ typedef struct struct_lwgeom_parser_result { const char *wkinput; /* Copy of pointer to input WKT/WKB */ uint8_t *serialized_lwgeom; /* Pointer to serialized LWGEOM */ int size; /* Size of serialized LWGEOM in bytes */ LWGEOM *geom; /* Pointer to LWGEOM struct */ const char *message; /* Error/warning message */ int errcode; /* Error/warning number */ int errlocation; /* Location of error */ int parser_check_flags; /* Bitmask of validity checks run during this parse */ } LWGEOM_PARSER_RESULT; /* * Parser error messages (these must match the message array in lwgparse.c) */ #define PARSER_ERROR_MOREPOINTS 1 #define PARSER_ERROR_ODDPOINTS 2 #define PARSER_ERROR_UNCLOSED 3 #define PARSER_ERROR_MIXDIMS 4 #define PARSER_ERROR_INVALIDGEOM 5 #define PARSER_ERROR_INVALIDWKBTYPE 6 #define PARSER_ERROR_INCONTINUOUS 7 #define PARSER_ERROR_TRIANGLEPOINTS 8 #define PARSER_ERROR_LESSPOINTS 9 #define PARSER_ERROR_OTHER 10 /* * Unparser result structure: returns the result of attempting to convert LWGEOM to (E)WKT/(E)WKB */ typedef struct struct_lwgeom_unparser_result { uint8_t *serialized_lwgeom; /* Copy of pointer to input serialized LWGEOM */ char *wkoutput; /* Pointer to WKT or WKB output */ int size; /* Size of serialized LWGEOM in bytes */ const char *message; /* Error/warning message */ int errlocation; /* Location of error */ } LWGEOM_UNPARSER_RESULT; /* * Unparser error messages (these must match the message array in lwgunparse.c) */ #define UNPARSER_ERROR_MOREPOINTS 1 #define UNPARSER_ERROR_ODDPOINTS 2 #define UNPARSER_ERROR_UNCLOSED 3 /* ** Variants available for WKB and WKT output types */ #define WKB_ISO 0x01 #define WKB_SFSQL 0x02 #define WKB_EXTENDED 0x04 #define WKB_NDR 0x08 #define WKB_XDR 0x10 #define WKB_HEX 0x20 #define WKB_NO_NPOINTS 0x40 /* Internal use only */ #define WKB_NO_SRID 0x80 /* Internal use only */ #define WKT_ISO 0x01 #define WKT_SFSQL 0x02 #define WKT_EXTENDED 0x04 /* ** New parsing and unparsing functions. */ /** * @param lwgeom geometry to convert to WKT * @param variant output format to use (WKT_ISO, WKT_SFSQL, WKT_EXTENDED) */ extern char* lwgeom_to_wkt(const LWGEOM *geom, uint8_t variant, int precision, size_t *size_out); /** * @param lwgeom geometry to convert to WKT * @param variant output format to use * (WKB_ISO, WKB_SFSQL, WKB_EXTENDED, WKB_NDR, WKB_XDR) */ extern uint8_t* lwgeom_to_wkb(const LWGEOM *geom, uint8_t variant, size_t *size_out); /** * @param lwgeom geometry to convert to HEXWKB * @param variant output format to use * (WKB_ISO, WKB_SFSQL, WKB_EXTENDED, WKB_NDR, WKB_XDR) */ extern char* lwgeom_to_hexwkb(const LWGEOM *geom, uint8_t variant, size_t *size_out); /** * @param lwgeom geometry to convert to EWKT */ extern char *lwgeom_to_ewkt(const LWGEOM *lwgeom); /** * @param check parser check flags, see LW_PARSER_CHECK_* macros */ extern LWGEOM* lwgeom_from_wkb(const uint8_t *wkb, const size_t wkb_size, const char check); /** * @param check parser check flags, see LW_PARSER_CHECK_* macros */ extern LWGEOM* lwgeom_from_wkt(const char *wkt, const char check); /** * @param check parser check flags, see LW_PARSER_CHECK_* macros */ extern LWGEOM* lwgeom_from_hexwkb(const char *hexwkb, const char check); extern uint8_t* bytes_from_hexbytes(const char *hexbuf, size_t hexsize); extern char* hexbytes_from_bytes(uint8_t *bytes, size_t size); /* * WKT detailed parsing support */ extern int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int parse_flags); void lwgeom_parser_result_init(LWGEOM_PARSER_RESULT *parser_result); void lwgeom_parser_result_free(LWGEOM_PARSER_RESULT *parser_result); /* Memory management */ extern void *lwalloc(size_t size); extern void *lwrealloc(void *mem, size_t size); extern void lwfree(void *mem); /* Utilities */ extern char *lwmessage_truncate(char *str, int startpos, int endpos, int maxlength, int truncdirection); /******************************************************************************* * SQLMM internal functions - TODO: Move into separate header files ******************************************************************************/ int lwgeom_has_arc(const LWGEOM *geom); LWGEOM *lwgeom_segmentize(LWGEOM *geom, uint32_t perQuad); LWGEOM *lwgeom_desegmentize(LWGEOM *geom); /******************************************************************************* * GEOS proxy functions on LWGEOM ******************************************************************************/ /** Return GEOS version string (not to be freed) */ const char* lwgeom_geos_version(void); /** Convert an LWGEOM to a GEOS Geometry and convert back -- for debug only */ LWGEOM* lwgeom_geos_noop(const LWGEOM *geom) ; LWGEOM *lwgeom_normalize(const LWGEOM *geom); LWGEOM *lwgeom_intersection(const LWGEOM *geom1, const LWGEOM *geom2); LWGEOM *lwgeom_difference(const LWGEOM *geom1, const LWGEOM *geom2); LWGEOM *lwgeom_symdifference(const LWGEOM* geom1, const LWGEOM* geom2); LWGEOM *lwgeom_union(const LWGEOM *geom1, const LWGEOM *geom2); /** * Snap vertices and segments of a geometry to another using a given tolerance. * * @param geom1 the geometry to snap * @param geom2 the geometry to snap to * @param tolerance the distance under which vertices and segments are snapped * * Requires GEOS-3.3.0+ */ LWGEOM* lwgeom_snap(const LWGEOM* geom1, const LWGEOM* geom2, double tolerance); /* * Return the set of paths shared between two linear geometries, * and their direction (same or opposite). * * @param geom1 a lineal geometry * @param geom2 another lineal geometry * * Requires GEOS-3.3.0+ */ LWGEOM* lwgeom_sharedpaths(const LWGEOM* geom1, const LWGEOM* geom2); /* * An offset curve against the input line. * * @param lwline a lineal geometry * @param size offset distance. Offset left if negative and right if positive * @param quadsegs number of quadrature segments in curves (try 8) * @param joinStyle (1 = round, 2 = mitre, 3 = bevel) * @param mitreLimit (try 5.0) * @return derived geometry (linestring or multilinestring) * * Requires GEOS-3.2.0+ */ LWGEOM* lwgeom_offsetcurve(const LWLINE *lwline, double size, int quadsegs, int joinStyle, double mitreLimit); /******************************************************************************* * PROJ4-dependent extra functions on LWGEOM ******************************************************************************/ /** * Get a projection from a string representation * * Eg: "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" */ projPJ lwproj_from_string(const char* txt); /** * Transform (reproject) a geometry in-place. * @param geom the geometry to transform * @param inpj the input (or current, or source) projection * @param outpj the output (or destination) projection */ int lwgeom_transform(LWGEOM *geom, projPJ inpj, projPJ outpj) ; int ptarray_transform(POINTARRAY *geom, projPJ inpj, projPJ outpj) ; int point4d_transform(POINT4D *pt, projPJ srcpj, projPJ dstpj) ; /******************************************************************************* * GEOS-dependent extra functions on LWGEOM ******************************************************************************/ /** * Take a geometry and return an areal geometry * (Polygon or MultiPolygon). * Actually a wrapper around GEOSpolygonize, * transforming the resulting collection into * a valid polygon Geometry. */ LWGEOM* lwgeom_buildarea(const LWGEOM *geom) ; /** * Attempts to make an invalid geometries valid w/out losing points. * * NOTE: this is only available when liblwgeom is built against * GEOS 3.3.0 or higher */ LWGEOM* lwgeom_make_valid(LWGEOM* geom); /* * Split polygon by line, line by line, line by point. * * Returns all components as a collection. * First element of the collection is always the part which * remains after the cut, while the second element is the * part which has been cut out. We arbitrarely take the part * on the *right* of cut lines as the part which has been cut out. * For a line cut by a point the part which remains is the one * from start of the line to the cut point. */ LWGEOM* lwgeom_split(const LWGEOM* lwgeom_in, const LWGEOM* blade_in); /* * Fully node a set of linestrings, using the least nodes preserving * all the input ones. * * Requires GEOS-3.3.0 or higher */ LWGEOM* lwgeom_node(const LWGEOM* lwgeom_in); /** * Take vertices of a geometry and build a delaunay * triangulation on them. * * @param geom the input geometry * @param tolerance an optional snapping tolerance for improved tolerance * @param edgeOnly if non-zero the result will be a MULTILINESTRING, * otherwise it'll be a COLLECTION of polygons. */ LWGEOM* lwgeom_delaunay_triangulation(const LWGEOM *geom, double tolerance, int edgeOnly); #endif /* !defined _LIBLWGEOM_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeodetic.c������������������������������������������������������0000644�0000000�0000000�00000236703�12314517750�020053� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeodetic.c 12358 2014-03-26 09:37:44Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2009 David Skea <David.Skea@gov.bc.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeodetic.h" #include "lwgeom_log.h" /** * For testing geodetic bounding box, we have a magic global variable. * When this is true (when the cunit tests set it), use the slow, but * guaranteed correct, algorithm. Otherwise use the regular one. */ int gbox_geocentric_slow = LW_FALSE; /** * Convert a longitude to the range of -PI,PI */ double longitude_radians_normalize(double lon) { if ( lon == -1.0 * M_PI ) return M_PI; if ( lon == -2.0 * M_PI ) return 0.0; if ( lon > 2.0 * M_PI ) lon = remainder(lon, 2.0 * M_PI); if ( lon < -2.0 * M_PI ) lon = remainder(lon, -2.0 * M_PI); if ( lon > M_PI ) lon = -2.0 * M_PI + lon; if ( lon < -1.0 * M_PI ) lon = 2.0 * M_PI + lon; if ( lon == -2.0 * M_PI ) lon *= -1.0; return lon; } /** * Convert a latitude to the range of -PI/2,PI/2 */ double latitude_radians_normalize(double lat) { if ( lat > 2.0 * M_PI ) lat = remainder(lat, 2.0 * M_PI); if ( lat < -2.0 * M_PI ) lat = remainder(lat, -2.0 * M_PI); if ( lat > M_PI ) lat = M_PI - lat; if ( lat < -1.0 * M_PI ) lat = -1.0 * M_PI - lat; if ( lat > M_PI_2 ) lat = M_PI - lat; if ( lat < -1.0 * M_PI_2 ) lat = -1.0 * M_PI - lat; return lat; } /** * Convert a longitude to the range of -180,180 * @param lon longitude in degrees */ double longitude_degrees_normalize(double lon) { if ( lon > 360.0 ) lon = remainder(lon, 360.0); if ( lon < -360.0 ) lon = remainder(lon, -360.0); if ( lon > 180.0 ) lon = -360.0 + lon; if ( lon < -180.0 ) lon = 360 + lon; if ( lon == -180.0 ) return 180.0; if ( lon == -360.0 ) return 0.0; return lon; } /** * Convert a latitude to the range of -90,90 * @param lat latitude in degrees */ double latitude_degrees_normalize(double lat) { if ( lat > 360.0 ) lat = remainder(lat, 360.0); if ( lat < -360.0 ) lat = remainder(lat, -360.0); if ( lat > 180.0 ) lat = 180.0 - lat; if ( lat < -180.0 ) lat = -180.0 - lat; if ( lat > 90.0 ) lat = 180.0 - lat; if ( lat < -90.0 ) lat = -180.0 - lat; return lat; } /** * Shift a point around by a number of radians */ void point_shift(GEOGRAPHIC_POINT *p, double shift) { double lon = p->lon + shift; if ( lon > M_PI ) p->lon = -1.0 * M_PI + (lon - M_PI); else p->lon = lon; return; } int geographic_point_equals(const GEOGRAPHIC_POINT *g1, const GEOGRAPHIC_POINT *g2) { return FP_EQUALS(g1->lat, g2->lat) && FP_EQUALS(g1->lon, g2->lon); } /** * Initialize a geographic point * @param lon longitude in degrees * @param lat latitude in degrees */ void geographic_point_init(double lon, double lat, GEOGRAPHIC_POINT *g) { g->lat = latitude_radians_normalize(deg2rad(lat)); g->lon = longitude_radians_normalize(deg2rad(lon)); } /** Returns the angular height (latitudinal span) of the box in radians */ double gbox_angular_height(const GBOX* gbox) { double d[6]; int i; double zmin = MAXFLOAT; double zmax = -1 * MAXFLOAT; POINT3D pt; /* Take a copy of the box corners so we can treat them as a list */ /* Elements are xmin, xmax, ymin, ymax, zmin, zmax */ memcpy(d, &(gbox->xmin), 6*sizeof(double)); /* Generate all 8 corner vectors of the box */ for ( i = 0; i < 8; i++ ) { pt.x = d[i / 4]; pt.y = d[2 + (i % 4) / 2]; pt.z = d[4 + (i % 2)]; normalize(&pt); if ( pt.z < zmin ) zmin = pt.z; if ( pt.z > zmax ) zmax = pt.z; } return asin(zmax) - asin(zmin); } /** Returns the angular width (longitudinal span) of the box in radians */ double gbox_angular_width(const GBOX* gbox) { double d[6]; int i, j; POINT3D pt[3]; double maxangle; double magnitude; /* Take a copy of the box corners so we can treat them as a list */ /* Elements are xmin, xmax, ymin, ymax, zmin, zmax */ memcpy(d, &(gbox->xmin), 6*sizeof(double)); /* Start with the bottom corner */ pt[0].x = gbox->xmin; pt[0].y = gbox->ymin; magnitude = sqrt(pt[0].x*pt[0].x + pt[0].y*pt[0].y); pt[0].x /= magnitude; pt[0].y /= magnitude; /* Generate all 8 corner vectors of the box */ /* Find the vector furthest from our seed vector */ for ( j = 0; j < 2; j++ ) { maxangle = -1 * MAXFLOAT; for ( i = 0; i < 4; i++ ) { double angle, dotprod; POINT3D pt_n; pt_n.x = d[i / 2]; pt_n.y = d[2 + (i % 2)]; magnitude = sqrt(pt_n.x*pt_n.x + pt_n.y*pt_n.y); pt_n.x /= magnitude; pt_n.y /= magnitude; pt_n.z = 0.0; dotprod = pt_n.x*pt[j].x + pt_n.y*pt[j].y; angle = acos(dotprod > 1.0 ? 1.0 : dotprod); if ( angle > maxangle ) { pt[j+1] = pt_n; maxangle = angle; } } } /* Return the distance between the two furthest vectors */ return maxangle; } /** Computes the average(ish) center of the box and returns success. */ int gbox_centroid(const GBOX* gbox, POINT2D* out) { double d[6]; GEOGRAPHIC_POINT g; POINT3D pt; int i; /* Take a copy of the box corners so we can treat them as a list */ /* Elements are xmin, xmax, ymin, ymax, zmin, zmax */ memcpy(d, &(gbox->xmin), 6*sizeof(double)); /* Zero out our return vector */ pt.x = pt.y = pt.z = 0.0; for ( i = 0; i < 8; i++ ) { POINT3D pt_n; pt_n.x = d[i / 4]; pt_n.y = d[2 + ((i % 4) / 2)]; pt_n.z = d[4 + (i % 2)]; normalize(&pt_n); pt.x += pt_n.x; pt.y += pt_n.y; pt.z += pt_n.z; } pt.x /= 8.0; pt.y /= 8.0; pt.z /= 8.0; normalize(&pt); cart2geog(&pt, &g); out->x = longitude_degrees_normalize(rad2deg(g.lon)); out->y = latitude_degrees_normalize(rad2deg(g.lat)); return LW_SUCCESS; } /** * Check to see if this geocentric gbox is wrapped around a pole. * Only makes sense if this gbox originated from a polygon, as it's assuming * the box is generated from external edges and there's an "interior" which * contains the pole. * * This function is overdetermined, for very large polygons it might add an * unwarranted pole. STILL NEEDS WORK! */ static int gbox_check_poles(GBOX *gbox) { int rv = LW_FALSE; LWDEBUG(4, "checking poles"); LWDEBUGF(4, "gbox %s", gbox_to_string(gbox)); /* Z axis */ if ( gbox->xmin < 0.0 && gbox->xmax > 0.0 && gbox->ymin < 0.0 && gbox->ymax > 0.0 ) { if ( (gbox->zmin + gbox->zmax) > 0.0 ) { LWDEBUG(4, "enclosed positive z axis"); gbox->zmax = 1.0; } else { LWDEBUG(4, "enclosed negative z axis"); gbox->zmin = -1.0; } rv = LW_TRUE; } /* Y axis */ if ( gbox->xmin < 0.0 && gbox->xmax > 0.0 && gbox->zmin < 0.0 && gbox->zmax > 0.0 ) { if ( gbox->ymin + gbox->ymax > 0.0 ) { LWDEBUG(4, "enclosed positive y axis"); gbox->ymax = 1.0; } else { LWDEBUG(4, "enclosed negative y axis"); gbox->ymin = -1.0; } rv = LW_TRUE; } /* X axis */ if ( gbox->ymin < 0.0 && gbox->ymax > 0.0 && gbox->zmin < 0.0 && gbox->zmax > 0.0 ) { if ( gbox->xmin + gbox->xmax > 0.0 ) { LWDEBUG(4, "enclosed positive x axis"); gbox->xmax = 1.0; } else { LWDEBUG(4, "enclosed negative x axis"); gbox->xmin = -1.0; } rv = LW_TRUE; } return rv; } /** * Convert spherical coordinates to cartesion coordinates on unit sphere */ void geog2cart(const GEOGRAPHIC_POINT *g, POINT3D *p) { p->x = cos(g->lat) * cos(g->lon); p->y = cos(g->lat) * sin(g->lon); p->z = sin(g->lat); } /** * Convert cartesion coordinates on unit sphere to spherical coordinates */ void cart2geog(const POINT3D *p, GEOGRAPHIC_POINT *g) { g->lon = atan2(p->y, p->x); g->lat = asin(p->z); } /** * Convert lon/lat coordinates to cartesion coordinates on unit sphere */ void ll2cart(const POINT2D *g, POINT3D *p) { double x_rad = M_PI * g->x / 180.0; double y_rad = M_PI * g->y / 180.0; double cos_y_rad = cos(y_rad); p->x = cos_y_rad * cos(x_rad); p->y = cos_y_rad * sin(x_rad); p->z = sin(y_rad); } /** * Convert cartesion coordinates on unit sphere to lon/lat coordinates static void cart2ll(const POINT3D *p, POINT2D *g) { g->x = longitude_degrees_normalize(180.0 * atan2(p->y, p->x) / M_PI); g->y = latitude_degrees_normalize(180.0 * asin(p->z) / M_PI); } */ /** * Calculate the dot product of two unit vectors * (-1 == opposite, 0 == orthogonal, 1 == identical) */ static double dot_product(const POINT3D *p1, const POINT3D *p2) { return (p1->x*p2->x) + (p1->y*p2->y) + (p1->z*p2->z); } /** * Calculate the cross product of two vectors */ static void cross_product(const POINT3D *a, const POINT3D *b, POINT3D *n) { n->x = a->y * b->z - a->z * b->y; n->y = a->z * b->x - a->x * b->z; n->z = a->x * b->y - a->y * b->x; return; } /** * Calculate the sum of two vectors */ void vector_sum(const POINT3D *a, const POINT3D *b, POINT3D *n) { n->x = a->x + b->x; n->y = a->y + b->y; n->z = a->z + b->z; return; } /** * Calculate the difference of two vectors */ static void vector_difference(const POINT3D *a, const POINT3D *b, POINT3D *n) { n->x = a->x - b->x; n->y = a->y - b->y; n->z = a->z - b->z; return; } /** * Scale a vector out by a factor */ static void vector_scale(POINT3D *n, double scale) { n->x *= scale; n->y *= scale; n->z *= scale; return; } // static inline double vector_magnitude(const POINT3D* v) // { // return sqrt(v->x*v->x + v->y*v->y + v->z*v->z); // } /** * Angle between two unit vectors */ double vector_angle(const POINT3D* v1, const POINT3D* v2) { POINT3D v3, normal; double angle, x, y; cross_product(v1, v2, &normal); normalize(&normal); cross_product(&normal, v1, &v3); x = dot_product(v1, v2); y = dot_product(v2, &v3); angle = atan2(y, x); return angle; } /** * Normalize to a unit vector. */ static void normalize2d(POINT2D *p) { double d = sqrt(p->x*p->x + p->y*p->y); if (FP_IS_ZERO(d)) { p->x = p->y = 0.0; return; } p->x = p->x / d; p->y = p->y / d; return; } /** * Calculates the unit normal to two vectors, trying to avoid * problems with over-narrow or over-wide cases. */ void unit_normal(const POINT3D *P1, const POINT3D *P2, POINT3D *normal) { double p_dot = dot_product(P1, P2); POINT3D P3; /* If edge is really large, calculate a narrower equivalent angle A1/A3. */ if ( p_dot < 0 ) { vector_sum(P1, P2, &P3); normalize(&P3); } /* If edge is narrow, calculate a wider equivalent angle A1/A3. */ else if ( p_dot > 0.95 ) { vector_difference(P2, P1, &P3); normalize(&P3); } /* Just keep the current angle in A1/A3. */ else { P3 = *P2; } /* Normals to the A-plane and B-plane */ cross_product(P1, &P3, normal); normalize(normal); } /** * Rotates v1 through an angle (in radians) within the plane defined by v1/v2, returns * the rotated vector in n. */ void vector_rotate(const POINT3D* v1, const POINT3D* v2, double angle, POINT3D* n) { POINT3D u; double cos_a = cos(angle); double sin_a = sin(angle); double uxuy, uyuz, uxuz; double ux2, uy2, uz2; double rxx, rxy, rxz, ryx, ryy, ryz, rzx, rzy, rzz; /* Need a unit vector normal to rotate around */ unit_normal(v1, v2, &u); uxuy = u.x * u.y; uxuz = u.x * u.z; uyuz = u.y * u.z; ux2 = u.x * u.x; uy2 = u.y * u.y; uz2 = u.z * u.z; rxx = cos_a + ux2 * (1 - cos_a); rxy = uxuy * (1 - cos_a) - u.z * sin_a; rxz = uxuz * (1 - cos_a) + u.y * sin_a; ryx = uxuy * (1 - cos_a) + u.z * sin_a; ryy = cos_a + uy2 * (1 - cos_a); ryz = uyuz * (1 - cos_a) - u.x * sin_a; rzx = uxuz * (1 - cos_a) - u.y * sin_a; rzy = uyuz * (1 - cos_a) + u.x * sin_a; rzz = cos_a + uz2 * (1 - cos_a); n->x = rxx * v1->x + rxy * v1->y + rxz * v1->z; n->y = ryx * v1->x + ryy * v1->y + ryz * v1->z; n->z = rzx * v1->x + rzy * v1->y + rzz * v1->z; normalize(n); } /** * Normalize to a unit vector. */ void normalize(POINT3D *p) { double d = sqrt(p->x*p->x + p->y*p->y + p->z*p->z); if (FP_IS_ZERO(d)) { p->x = p->y = p->z = 0.0; return; } p->x = p->x / d; p->y = p->y / d; p->z = p->z / d; return; } /** * Computes the cross product of two vectors using their lat, lng representations. * Good even for small distances between p and q. */ void robust_cross_product(const GEOGRAPHIC_POINT *p, const GEOGRAPHIC_POINT *q, POINT3D *a) { double lon_qpp = (q->lon + p->lon) / -2.0; double lon_qmp = (q->lon - p->lon) / 2.0; double sin_p_lat_minus_q_lat = sin(p->lat-q->lat); double sin_p_lat_plus_q_lat = sin(p->lat+q->lat); double sin_lon_qpp = sin(lon_qpp); double sin_lon_qmp = sin(lon_qmp); double cos_lon_qpp = cos(lon_qpp); double cos_lon_qmp = cos(lon_qmp); a->x = sin_p_lat_minus_q_lat * sin_lon_qpp * cos_lon_qmp - sin_p_lat_plus_q_lat * cos_lon_qpp * sin_lon_qmp; a->y = sin_p_lat_minus_q_lat * cos_lon_qpp * cos_lon_qmp + sin_p_lat_plus_q_lat * sin_lon_qpp * sin_lon_qmp; a->z = cos(p->lat) * cos(q->lat) * sin(q->lon-p->lon); } void x_to_z(POINT3D *p) { double tmp = p->z; p->z = p->x; p->x = tmp; } void y_to_z(POINT3D *p) { double tmp = p->z; p->z = p->y; p->y = tmp; } int crosses_dateline(const GEOGRAPHIC_POINT *s, const GEOGRAPHIC_POINT *e) { double sign_s = signum(s->lon); double sign_e = signum(e->lon); double ss = fabs(s->lon); double ee = fabs(e->lon); if ( sign_s == sign_e ) { return LW_FALSE; } else { double dl = ss + ee; if ( dl < M_PI ) return LW_FALSE; else if ( FP_EQUALS(dl, M_PI) ) return LW_FALSE; else return LW_TRUE; } } /** * Returns -1 if the point is to the left of the plane formed * by the edge, 1 if the point is to the right, and 0 if the * point is on the plane. */ static int edge_point_side(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p) { POINT3D normal, pt; double w; /* Normal to the plane defined by e */ robust_cross_product(&(e->start), &(e->end), &normal); normalize(&normal); geog2cart(p, &pt); /* We expect the dot product of with normal with any vector in the plane to be zero */ w = dot_product(&normal, &pt); LWDEBUGF(4,"dot product %.9g",w); if ( FP_IS_ZERO(w) ) { LWDEBUG(4, "point is on plane (dot product is zero)"); return 0; } if ( w < 0 ) return -1; else return 1; } /** * Returns the angle in radians at point B of the triangle formed by A-B-C */ static double sphere_angle(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, const GEOGRAPHIC_POINT *c) { POINT3D normal1, normal2; robust_cross_product(b, a, &normal1); robust_cross_product(b, c, &normal2); normalize(&normal1); normalize(&normal2); return sphere_distance_cartesian(&normal1, &normal2); } /** * Computes the spherical area of a triangle. If C is to the left of A/B, * the area is negative. If C is to the right of A/B, the area is positive. * * @param a The first triangle vertex. * @param b The second triangle vertex. * @param c The last triangle vertex. * @return the signed area in radians. */ static double sphere_signed_area(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, const GEOGRAPHIC_POINT *c) { double angle_a, angle_b, angle_c; double area_radians = 0.0; int side; GEOGRAPHIC_EDGE e; angle_a = sphere_angle(b,a,c); angle_b = sphere_angle(a,b,c); angle_c = sphere_angle(b,c,a); area_radians = angle_a + angle_b + angle_c - M_PI; /* What's the direction of the B/C edge? */ e.start = *a; e.end = *b; side = edge_point_side(&e, c); /* Co-linear points implies no area */ if ( side == 0 ) return 0.0; /* Add the sign to the area */ return side * area_radians; } /** * Returns true if the point p is on the great circle plane. * Forms the scalar triple product of A,B,p and if the volume of the * resulting parallelepiped is near zero the point p is on the * great circle plane. */ int edge_point_on_plane(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p) { int side = edge_point_side(e, p); if ( side == 0 ) return LW_TRUE; return LW_FALSE; } /** * Returns true if the point p is inside the cone defined by the * two ends of the edge e. */ int edge_point_in_cone(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p) { POINT3D vcp, vs, ve, vp; double vs_dot_vcp, vp_dot_vcp; geog2cart(&(e->start), &vs); geog2cart(&(e->end), &ve); /* Antipodal case, everything is inside. */ if ( vs.x == -1.0 * ve.x && vs.y == -1.0 * ve.y && vs.z == -1.0 * ve.z ) return LW_TRUE; geog2cart(p, &vp); /* The normalized sum bisects the angle between start and end. */ vector_sum(&vs, &ve, &vcp); normalize(&vcp); /* The projection of start onto the center defines the minimum similarity */ vs_dot_vcp = dot_product(&vs, &vcp); LWDEBUGF(4,"vs_dot_vcp %.19g",vs_dot_vcp); /* The projection of candidate p onto the center */ vp_dot_vcp = dot_product(&vp, &vcp); LWDEBUGF(4,"vp_dot_vcp %.19g",vp_dot_vcp); /* If p is more similar than start then p is inside the cone */ LWDEBUGF(4,"fabs(vp_dot_vcp - vs_dot_vcp) %.39g",fabs(vp_dot_vcp - vs_dot_vcp)); /* ** We want to test that vp_dot_vcp is >= vs_dot_vcp but there are ** numerical stability issues for values that are very very nearly ** equal. Unfortunately there are also values of vp_dot_vcp that are legitimately ** very close to but still less than vs_dot_vcp which we also need to catch. ** The tolerance of 10-17 seems to do the trick on 32-bit and 64-bit architectures, ** for the test cases here. ** However, tuning the tolerance value feels like a dangerous hack. ** Fundamentally, the problem is that this test is so sensitive. */ /* 1.1102230246251565404236316680908203125e-16 */ if ( vp_dot_vcp > vs_dot_vcp || fabs(vp_dot_vcp - vs_dot_vcp) < 2e-16 ) { LWDEBUG(4, "point is in cone"); return LW_TRUE; } LWDEBUG(4, "point is not in cone"); return LW_FALSE; } /** * True if the longitude of p is within the range of the longitude of the ends of e */ int edge_contains_coplanar_point(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p) { GEOGRAPHIC_EDGE g; GEOGRAPHIC_POINT q; double slon = fabs((e->start).lon) + fabs((e->end).lon); double dlon = fabs(fabs((e->start).lon) - fabs((e->end).lon)); double slat = (e->start).lat + (e->end).lat; LWDEBUGF(4, "e.start == GPOINT(%.6g %.6g) ", (e->start).lat, (e->start).lon); LWDEBUGF(4, "e.end == GPOINT(%.6g %.6g) ", (e->end).lat, (e->end).lon); LWDEBUGF(4, "p == GPOINT(%.6g %.6g) ", p->lat, p->lon); /* Copy values into working registers */ g = *e; q = *p; /* Vertical plane, we need to do this calculation in latitude */ if ( FP_EQUALS( g.start.lon, g.end.lon ) ) { LWDEBUG(4, "vertical plane, we need to do this calculation in latitude"); /* Supposed to be co-planar... */ if ( ! FP_EQUALS( q.lon, g.start.lon ) ) return LW_FALSE; if ( ( g.start.lat <= q.lat && q.lat <= g.end.lat ) || ( g.end.lat <= q.lat && q.lat <= g.start.lat ) ) { return LW_TRUE; } else { return LW_FALSE; } } /* Over the pole, we need normalize latitude and do this calculation in latitude */ if ( FP_EQUALS( slon, M_PI ) && ( signum(g.start.lon) != signum(g.end.lon) || FP_EQUALS(dlon, M_PI) ) ) { LWDEBUG(4, "over the pole..."); /* Antipodal, everything (or nothing?) is inside */ if ( FP_EQUALS( slat, 0.0 ) ) return LW_TRUE; /* Point *is* the north pole */ if ( slat > 0.0 && FP_EQUALS(q.lat, M_PI_2 ) ) return LW_TRUE; /* Point *is* the south pole */ if ( slat < 0.0 && FP_EQUALS(q.lat, -1.0 * M_PI_2) ) return LW_TRUE; LWDEBUG(4, "coplanar?..."); /* Supposed to be co-planar... */ if ( ! FP_EQUALS( q.lon, g.start.lon ) ) return LW_FALSE; LWDEBUG(4, "north or south?..."); /* Over north pole, test based on south pole */ if ( slat > 0.0 ) { LWDEBUG(4, "over the north pole..."); if ( q.lat > FP_MIN(g.start.lat, g.end.lat) ) return LW_TRUE; else return LW_FALSE; } else /* Over south pole, test based on north pole */ { LWDEBUG(4, "over the south pole..."); if ( q.lat < FP_MAX(g.start.lat, g.end.lat) ) return LW_TRUE; else return LW_FALSE; } } /* Dateline crossing, flip everything to the opposite hemisphere */ else if ( slon > M_PI && ( signum(g.start.lon) != signum(g.end.lon) ) ) { LWDEBUG(4, "crosses dateline, flip longitudes..."); if ( g.start.lon > 0.0 ) g.start.lon -= M_PI; else g.start.lon += M_PI; if ( g.end.lon > 0.0 ) g.end.lon -= M_PI; else g.end.lon += M_PI; if ( q.lon > 0.0 ) q.lon -= M_PI; else q.lon += M_PI; } if ( ( g.start.lon <= q.lon && q.lon <= g.end.lon ) || ( g.end.lon <= q.lon && q.lon <= g.start.lon ) ) { LWDEBUG(4, "true, this edge contains point"); return LW_TRUE; } LWDEBUG(4, "false, this edge does not contain point"); return LW_FALSE; } /** * Given two points on a unit sphere, calculate their distance apart in radians. */ double sphere_distance(const GEOGRAPHIC_POINT *s, const GEOGRAPHIC_POINT *e) { double d_lon = e->lon - s->lon; double cos_d_lon = cos(d_lon); double cos_lat_e = cos(e->lat); double sin_lat_e = sin(e->lat); double cos_lat_s = cos(s->lat); double sin_lat_s = sin(s->lat); double a1 = POW2(cos_lat_e * sin(d_lon)); double a2 = POW2(cos_lat_s * sin_lat_e - sin_lat_s * cos_lat_e * cos_d_lon); double a = sqrt(a1 + a2); double b = sin_lat_s * sin_lat_e + cos_lat_s * cos_lat_e * cos_d_lon; return atan2(a, b); } /** * Given two unit vectors, calculate their distance apart in radians. */ double sphere_distance_cartesian(const POINT3D *s, const POINT3D *e) { return acos(dot_product(s, e)); } /** * Given two points on a unit sphere, calculate the direction from s to e. */ double sphere_direction(const GEOGRAPHIC_POINT *s, const GEOGRAPHIC_POINT *e, double d) { double heading = 0.0; double f; /* Starting from the poles? Special case. */ if ( FP_IS_ZERO(cos(s->lat)) ) return (s->lat > 0.0) ? M_PI : 0.0; f = (sin(e->lat) - sin(s->lat) * cos(d)) / (sin(d) * cos(s->lat)); if ( FP_EQUALS(f, 1.0) ) heading = 0.0; else if ( fabs(f) > 1.0 ) { LWDEBUGF(4, "f = %g", f); heading = acos(f); } else heading = acos(f); if ( sin(e->lon - s->lon) < 0.0 ) heading = -1 * heading; return heading; } #if 0 /* unused */ /** * Computes the spherical excess of a spherical triangle defined by * the three vectices A, B, C. Computes on the unit sphere (i.e., divides * edge lengths by the radius, even if the radius is 1.0). The excess is * signed based on the sign of the delta longitude of A and B. * * @param a The first triangle vertex. * @param b The second triangle vertex. * @param c The last triangle vertex. * @return the signed spherical excess. */ static double sphere_excess(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, const GEOGRAPHIC_POINT *c) { double a_dist = sphere_distance(b, c); double b_dist = sphere_distance(c, a); double c_dist = sphere_distance(a, b); double hca = sphere_direction(c, a, b_dist); double hcb = sphere_direction(c, b, a_dist); double sign = signum(hcb-hca); double ss = (a_dist + b_dist + c_dist) / 2.0; double E = tan(ss/2.0)*tan((ss-a_dist)/2.0)*tan((ss-b_dist)/2.0)*tan((ss-c_dist)/2.0); return 4.0 * atan(sqrt(fabs(E))) * sign; } #endif /** * Returns true if the point p is on the minor edge defined by the * end points of e. */ int edge_contains_point(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *p) { if ( edge_point_in_cone(e, p) && edge_point_on_plane(e, p) ) /* if ( edge_contains_coplanar_point(e, p) && edge_point_on_plane(e, p) ) */ { LWDEBUG(4, "point is on edge"); return LW_TRUE; } LWDEBUG(4, "point is not on edge"); return LW_FALSE; } /** * Used in great circle to compute the pole of the great circle. */ double z_to_latitude(double z, int top) { double sign = signum(z); double tlat = acos(z); LWDEBUGF(4, "inputs: z(%.8g) sign(%.8g) tlat(%.8g)", z, sign, tlat); if (FP_IS_ZERO(z)) { if (top) return M_PI_2; else return -1.0 * M_PI_2; } if (fabs(tlat) > M_PI_2 ) { tlat = sign * (M_PI - fabs(tlat)); } else { tlat = sign * tlat; } LWDEBUGF(4, "output: tlat(%.8g)", tlat); return tlat; } /** * Computes the pole of the great circle disk which is the intersection of * the great circle with the line of maximum/minimum gradiant that lies on * the great circle plane. */ int clairaut_cartesian(const POINT3D *start, const POINT3D *end, GEOGRAPHIC_POINT *g_top, GEOGRAPHIC_POINT *g_bottom) { POINT3D t1, t2; GEOGRAPHIC_POINT vN1, vN2; LWDEBUG(4,"entering function"); unit_normal(start, end, &t1); unit_normal(end, start, &t2); LWDEBUGF(4, "unit normal t1 == POINT(%.8g %.8g %.8g)", t1.x, t1.y, t1.z); LWDEBUGF(4, "unit normal t2 == POINT(%.8g %.8g %.8g)", t2.x, t2.y, t2.z); cart2geog(&t1, &vN1); cart2geog(&t2, &vN2); g_top->lat = z_to_latitude(t1.z,LW_TRUE); g_top->lon = vN2.lon; g_bottom->lat = z_to_latitude(t2.z,LW_FALSE); g_bottom->lon = vN1.lon; LWDEBUGF(4, "clairaut top == GPOINT(%.6g %.6g)", g_top->lat, g_top->lon); LWDEBUGF(4, "clairaut bottom == GPOINT(%.6g %.6g)", g_bottom->lat, g_bottom->lon); return LW_SUCCESS; } /** * Computes the pole of the great circle disk which is the intersection of * the great circle with the line of maximum/minimum gradiant that lies on * the great circle plane. */ int clairaut_geographic(const GEOGRAPHIC_POINT *start, const GEOGRAPHIC_POINT *end, GEOGRAPHIC_POINT *g_top, GEOGRAPHIC_POINT *g_bottom) { POINT3D t1, t2; GEOGRAPHIC_POINT vN1, vN2; LWDEBUG(4,"entering function"); robust_cross_product(start, end, &t1); normalize(&t1); robust_cross_product(end, start, &t2); normalize(&t2); LWDEBUGF(4, "unit normal t1 == POINT(%.8g %.8g %.8g)", t1.x, t1.y, t1.z); LWDEBUGF(4, "unit normal t2 == POINT(%.8g %.8g %.8g)", t2.x, t2.y, t2.z); cart2geog(&t1, &vN1); cart2geog(&t2, &vN2); g_top->lat = z_to_latitude(t1.z,LW_TRUE); g_top->lon = vN2.lon; g_bottom->lat = z_to_latitude(t2.z,LW_FALSE); g_bottom->lon = vN1.lon; LWDEBUGF(4, "clairaut top == GPOINT(%.6g %.6g)", g_top->lat, g_top->lon); LWDEBUGF(4, "clairaut bottom == GPOINT(%.6g %.6g)", g_bottom->lat, g_bottom->lon); return LW_SUCCESS; } /** * Returns true if an intersection can be calculated, and places it in *g. * Returns false otherwise. */ int edge_intersection(const GEOGRAPHIC_EDGE *e1, const GEOGRAPHIC_EDGE *e2, GEOGRAPHIC_POINT *g) { POINT3D ea, eb, v; LWDEBUGF(4, "e1 start(%.20g %.20g) end(%.20g %.20g)", e1->start.lat, e1->start.lon, e1->end.lat, e1->end.lon); LWDEBUGF(4, "e2 start(%.20g %.20g) end(%.20g %.20g)", e2->start.lat, e2->start.lon, e2->end.lat, e2->end.lon); LWDEBUGF(4, "e1 start(%.20g %.20g) end(%.20g %.20g)", rad2deg(e1->start.lon), rad2deg(e1->start.lat), rad2deg(e1->end.lon), rad2deg(e1->end.lat)); LWDEBUGF(4, "e2 start(%.20g %.20g) end(%.20g %.20g)", rad2deg(e2->start.lon), rad2deg(e2->start.lat), rad2deg(e2->end.lon), rad2deg(e2->end.lat)); if ( geographic_point_equals(&(e1->start), &(e2->start)) ) { *g = e1->start; return LW_TRUE; } if ( geographic_point_equals(&(e1->end), &(e2->end)) ) { *g = e1->end; return LW_TRUE; } if ( geographic_point_equals(&(e1->end), &(e2->start)) ) { *g = e1->end; return LW_TRUE; } if ( geographic_point_equals(&(e1->start), &(e2->end)) ) { *g = e1->start; return LW_TRUE; } robust_cross_product(&(e1->start), &(e1->end), &ea); normalize(&ea); robust_cross_product(&(e2->start), &(e2->end), &eb); normalize(&eb); LWDEBUGF(4, "e1 cross product == POINT(%.12g %.12g %.12g)", ea.x, ea.y, ea.z); LWDEBUGF(4, "e2 cross product == POINT(%.12g %.12g %.12g)", eb.x, eb.y, eb.z); LWDEBUGF(4, "fabs(dot_product(ea, eb)) == %.14g", fabs(dot_product(&ea, &eb))); if ( FP_EQUALS(fabs(dot_product(&ea, &eb)), 1.0) ) { LWDEBUGF(4, "parallel edges found! dot_product = %.12g", dot_product(&ea, &eb)); /* Parallel (maybe equal) edges! */ /* Hack alert, only returning ONE end of the edge right now, most do better later. */ /* Hack alart #2, returning a value of 2 to indicate a co-linear crossing event. */ if ( edge_contains_point(e1, &(e2->start)) ) { *g = e2->start; return 2; } if ( edge_contains_point(e1, &(e2->end)) ) { *g = e2->end; return 2; } if ( edge_contains_point(e2, &(e1->start)) ) { *g = e1->start; return 2; } if ( edge_contains_point(e2, &(e1->end)) ) { *g = e1->end; return 2; } } unit_normal(&ea, &eb, &v); LWDEBUGF(4, "v == POINT(%.12g %.12g %.12g)", v.x, v.y, v.z); g->lat = atan2(v.z, sqrt(v.x * v.x + v.y * v.y)); g->lon = atan2(v.y, v.x); LWDEBUGF(4, "g == GPOINT(%.12g %.12g)", g->lat, g->lon); LWDEBUGF(4, "g == POINT(%.12g %.12g)", rad2deg(g->lon), rad2deg(g->lat)); if ( edge_contains_point(e1, g) && edge_contains_point(e2, g) ) { return LW_TRUE; } else { LWDEBUG(4, "flipping point to other side of sphere"); g->lat = -1.0 * g->lat; g->lon = g->lon + M_PI; if ( g->lon > M_PI ) { g->lon = -1.0 * (2.0 * M_PI - g->lon); } if ( edge_contains_point(e1, g) && edge_contains_point(e2, g) ) { return LW_TRUE; } } return LW_FALSE; } double edge_distance_to_point(const GEOGRAPHIC_EDGE *e, const GEOGRAPHIC_POINT *gp, GEOGRAPHIC_POINT *closest) { double d1 = 1000000000.0, d2, d3, d_nearest; POINT3D n, p, k; GEOGRAPHIC_POINT gk, g_nearest; /* Zero length edge, */ if ( geographic_point_equals(&(e->start), &(e->end)) ) { *closest = e->start; return sphere_distance(&(e->start), gp); } robust_cross_product(&(e->start), &(e->end), &n); normalize(&n); geog2cart(gp, &p); vector_scale(&n, dot_product(&p, &n)); vector_difference(&p, &n, &k); normalize(&k); cart2geog(&k, &gk); if ( edge_contains_point(e, &gk) ) { d1 = sphere_distance(gp, &gk); } d2 = sphere_distance(gp, &(e->start)); d3 = sphere_distance(gp, &(e->end)); d_nearest = d1; g_nearest = gk; if ( d2 < d_nearest ) { d_nearest = d2; g_nearest = e->start; } if ( d3 < d_nearest ) { d_nearest = d3; g_nearest = e->end; } if (closest) *closest = g_nearest; return d_nearest; } /** * Calculate the distance between two edges. * IMPORTANT: this test does not check for edge intersection!!! (distance == 0) * You have to check for intersection before calling this function. */ double edge_distance_to_edge(const GEOGRAPHIC_EDGE *e1, const GEOGRAPHIC_EDGE *e2, GEOGRAPHIC_POINT *closest1, GEOGRAPHIC_POINT *closest2) { double d; GEOGRAPHIC_POINT gcp1s, gcp1e, gcp2s, gcp2e, c1, c2; double d1s = edge_distance_to_point(e1, &(e2->start), &gcp1s); double d1e = edge_distance_to_point(e1, &(e2->end), &gcp1e); double d2s = edge_distance_to_point(e2, &(e1->start), &gcp2s); double d2e = edge_distance_to_point(e2, &(e1->end), &gcp2e); d = d1s; c1 = gcp1s; c2 = e2->start; if ( d1e < d ) { d = d1e; c1 = gcp1e; c2 = e2->end; } if ( d2s < d ) { d = d2s; c1 = e1->start; c2 = gcp2s; } if ( d2e < d ) { d = d2e; c1 = e1->end; c2 = gcp2e; } if ( closest1 ) *closest1 = c1; if ( closest2 ) *closest2 = c2; return d; } /** * Given a starting location r, a distance and an azimuth * to the new point, compute the location of the projected point on the unit sphere. */ int sphere_project(const GEOGRAPHIC_POINT *r, double distance, double azimuth, GEOGRAPHIC_POINT *n) { double d = distance; double lat1 = r->lat; double lon1 = r->lon; double lat2, lon2; lat2 = asin(sin(lat1)*cos(d) + cos(lat1)*sin(d)*cos(azimuth)); /* If we're going straight up or straight down, we don't need to calculate the longitude */ /* TODO: this isn't quite true, what if we're going over the pole? */ if ( FP_EQUALS(azimuth, M_PI) || FP_EQUALS(azimuth, 0.0) ) { lon2 = r->lon; } else { lon2 = lon1 + atan2(sin(azimuth)*sin(d)*cos(lat1), cos(d)-sin(lat1)*sin(lat2)); } if ( isnan(lat2) || isnan(lon2) ) return LW_FAILURE; n->lat = lat2; n->lon = lon2; return LW_SUCCESS; } int edge_calculate_gbox_slow(const GEOGRAPHIC_EDGE *e, GBOX *gbox) { int steps = 1000000; int i; double dx, dy, dz; double distance = sphere_distance(&(e->start), &(e->end)); POINT3D pn, p, start, end; /* Edge is zero length, just return the naive box */ if ( FP_IS_ZERO(distance) ) { LWDEBUG(4, "edge is zero length. returning"); geog2cart(&(e->start), &start); geog2cart(&(e->end), &end); gbox_init_point3d(&start, gbox); gbox_merge_point3d(&end, gbox); return LW_SUCCESS; } /* Edge is antipodal (one point on each side of the globe), set the box to contain the whole world and return */ if ( FP_EQUALS(distance, M_PI) ) { LWDEBUG(4, "edge is antipodal. setting to maximum size box, and returning"); gbox->xmin = gbox->ymin = gbox->zmin = -1.0; gbox->xmax = gbox->ymax = gbox->zmax = 1.0; return LW_SUCCESS; } /* Walk along the chord between start and end incrementally, normalizing at each step. */ geog2cart(&(e->start), &start); geog2cart(&(e->end), &end); dx = (end.x - start.x)/steps; dy = (end.y - start.y)/steps; dz = (end.z - start.z)/steps; p = start; gbox->xmin = gbox->xmax = p.x; gbox->ymin = gbox->ymax = p.y; gbox->zmin = gbox->zmax = p.z; for ( i = 0; i < steps; i++ ) { p.x += dx; p.y += dy; p.z += dz; pn = p; normalize(&pn); gbox_merge_point3d(&pn, gbox); } return LW_SUCCESS; } /** * The magic function, given an edge in spherical coordinates, calculate a * 3D bounding box that fully contains it, taking into account the curvature * of the sphere on which it is inscribed. * * Any arc on the sphere defines a plane that bisects the sphere. In this plane, * the arc is a portion of a unit circle. * Projecting the end points of the axes (1,0,0), (-1,0,0) etc, into the plane * and normalizing yields potential extrema points. Those points on the * side of the plane-dividing line formed by the end points that is opposite * the origin of the plane are extrema and should be added to the bounding box. */ int edge_calculate_gbox(const POINT3D *A1, const POINT3D *A2, GBOX *gbox) { POINT2D R1, R2, RX, O; POINT3D AN, A3; POINT3D X[6]; int i, o_side; /* Initialize the box with the edge end points */ gbox_init_point3d(A1, gbox); gbox_merge_point3d(A2, gbox); /* Zero length edge, just return! */ if ( p3d_same(A1, A2) ) return LW_SUCCESS; /* Error out on antipodal edge */ if ( FP_EQUALS(A1->x, -1*A2->x) && FP_EQUALS(A1->y, -1*A2->y) && FP_EQUALS(A1->z, -1*A2->z) ) { lwerror("Antipodal (180 degrees long) edge detected!"); return LW_FAILURE; } /* Create A3, a vector in the plane of A1/A2, orthogonal to A1 */ unit_normal(A1, A2, &AN); unit_normal(&AN, A1, &A3); /* Project A1 and A2 into the 2-space formed by the plane A1/A3 */ R1.x = 1.0; R1.y = 0.0; R2.x = dot_product(A2, A1); R2.y = dot_product(A2, &A3); /* Initialize our 3-space axis points (x+, x-, y+, y-, z+, z-) */ memset(X, 0, sizeof(POINT3D) * 6); X[0].x = X[2].y = X[4].z = 1.0; X[1].x = X[3].y = X[5].z = -1.0; /* Initialize a 2-space origin point. */ O.x = O.y = 0.0; /* What side of the line joining R1/R2 is O? */ o_side = lw_segment_side(&R1, &R2, &O); /* Add any extrema! */ for ( i = 0; i < 6; i++ ) { /* Convert 3-space axis points to 2-space unit vectors */ RX.x = dot_product(&(X[i]), A1); RX.y = dot_product(&(X[i]), &A3); normalize2d(&RX); /* Any axis end on the side of R1/R2 opposite the origin */ /* is an extreme point in the arc, so we add the 3-space */ /* version of the point on R1/R2 to the gbox */ if ( lw_segment_side(&R1, &R2, &RX) != o_side ) { POINT3D Xn; Xn.x = RX.x * A1->x + RX.y * A3.x; Xn.y = RX.x * A1->y + RX.y * A3.y; Xn.z = RX.x * A1->z + RX.y * A3.z; gbox_merge_point3d(&Xn, gbox); } } return LW_SUCCESS; } void lwpoly_pt_outside(const LWPOLY *poly, POINT2D *pt_outside) { /* Make sure we have boxes */ if ( poly->bbox ) { gbox_pt_outside(poly->bbox, pt_outside); return; } else { GBOX gbox; lwgeom_calculate_gbox_geodetic((LWGEOM*)poly, &gbox); gbox_pt_outside(&gbox, pt_outside); return; } } /** * Given a unit geocentric gbox, return a lon/lat (degrees) coordinate point point that is * guaranteed to be outside the box (and therefore anything it contains). */ void gbox_pt_outside(const GBOX *gbox, POINT2D *pt_outside) { double grow = M_PI / 180.0 / 60.0; /* one arc-minute */ int i; GBOX ge; POINT3D corners[8]; POINT3D pt; GEOGRAPHIC_POINT g; while ( grow < M_PI ) { /* Assign our box and expand it slightly. */ ge = *gbox; if ( ge.xmin > -1 ) ge.xmin -= grow; if ( ge.ymin > -1 ) ge.ymin -= grow; if ( ge.zmin > -1 ) ge.zmin -= grow; if ( ge.xmax < 1 ) ge.xmax += grow; if ( ge.ymax < 1 ) ge.ymax += grow; if ( ge.zmax < 1 ) ge.zmax += grow; /* Build our eight corner points */ corners[0].x = ge.xmin; corners[0].y = ge.ymin; corners[0].z = ge.zmin; corners[1].x = ge.xmin; corners[1].y = ge.ymax; corners[1].z = ge.zmin; corners[2].x = ge.xmin; corners[2].y = ge.ymin; corners[2].z = ge.zmax; corners[3].x = ge.xmax; corners[3].y = ge.ymin; corners[3].z = ge.zmin; corners[4].x = ge.xmax; corners[4].y = ge.ymax; corners[4].z = ge.zmin; corners[5].x = ge.xmax; corners[5].y = ge.ymin; corners[5].z = ge.zmax; corners[6].x = ge.xmin; corners[6].y = ge.ymax; corners[6].z = ge.zmax; corners[7].x = ge.xmax; corners[7].y = ge.ymax; corners[7].z = ge.zmax; LWDEBUG(4, "trying to use a box corner point..."); for ( i = 0; i < 8; i++ ) { normalize(&(corners[i])); LWDEBUGF(4, "testing corner %d: POINT(%.8g %.8g %.8g)", i, corners[i].x, corners[i].y, corners[i].z); if ( ! gbox_contains_point3d(gbox, &(corners[i])) ) { LWDEBUGF(4, "corner %d is outside our gbox", i); pt = corners[i]; normalize(&pt); cart2geog(&pt, &g); pt_outside->x = rad2deg(g.lon); pt_outside->y = rad2deg(g.lat); LWDEBUGF(4, "returning POINT(%.8g %.8g) as outside point", pt_outside->x, pt_outside->y); return; } } /* Try a wider growth to push the corners outside the original box. */ grow *= 2.0; } /* This should never happen! */ lwerror("BOOM! Could not generate outside point!"); return; } /** * Create a new point array with no segment longer than the input segment length (expressed in radians!) * @param pa_in - input point array pointer * @param max_seg_length - maximum output segment length in radians */ static POINTARRAY* ptarray_segmentize_sphere(const POINTARRAY *pa_in, double max_seg_length) { POINTARRAY *pa_out; int hasz = ptarray_has_z(pa_in); int hasm = ptarray_has_m(pa_in); int pa_in_offset = 0; /* input point offset */ POINT4D p1, p2, p; POINT3D q1, q2, q, qn; GEOGRAPHIC_POINT g1, g2, g; double d; /* Just crap out on crazy input */ if ( ! pa_in ) lwerror("ptarray_segmentize_sphere: null input pointarray"); if ( max_seg_length <= 0.0 ) lwerror("ptarray_segmentize_sphere: maximum segment length must be positive"); /* Empty starting array */ pa_out = ptarray_construct_empty(hasz, hasm, pa_in->npoints); /* Add first point */ getPoint4d_p(pa_in, pa_in_offset, &p1); ptarray_append_point(pa_out, &p1, LW_FALSE); geographic_point_init(p1.x, p1.y, &g1); pa_in_offset++; while ( pa_in_offset < pa_in->npoints ) { getPoint4d_p(pa_in, pa_in_offset, &p2); geographic_point_init(p2.x, p2.y, &g2); /* Skip duplicate points (except in case of 2-point lines!) */ if ( (pa_in->npoints > 2) && p4d_same(&p1, &p2) ) { /* Move one offset forward */ p1 = p2; g1 = g2; pa_in_offset++; continue; } /* How long is this edge? */ d = sphere_distance(&g1, &g2); /* We need to segmentize this edge */ if ( d > max_seg_length ) { int nsegs = 1 + d / max_seg_length; int i; double dx, dy, dz, dzz = 0, dmm = 0; geog2cart(&g1, &q1); geog2cart(&g2, &q2); dx = (q2.x - q1.x) / nsegs; dy = (q2.y - q1.y) / nsegs; dz = (q2.z - q1.z) / nsegs; /* The independent Z/M values on the ptarray */ if ( hasz ) dzz = (p2.z - p1.z) / nsegs; if ( hasm ) dmm = (p2.m - p1.m) / nsegs; q = q1; p = p1; for ( i = 0; i < nsegs - 1; i++ ) { /* Move one increment forwards */ q.x += dx; q.y += dy; q.z += dz; qn = q; normalize(&qn); /* Back to spherical coordinates */ cart2geog(&qn, &g); /* Back to lon/lat */ p.x = rad2deg(g.lon); p.y = rad2deg(g.lat); if ( hasz ) p.z += dzz; if ( hasm ) p.m += dmm; ptarray_append_point(pa_out, &p, LW_FALSE); } ptarray_append_point(pa_out, &p2, LW_FALSE); } /* This edge is already short enough */ else { ptarray_append_point(pa_out, &p2, (pa_in->npoints==2)?LW_TRUE:LW_FALSE); } /* Move one offset forward */ p1 = p2; g1 = g2; pa_in_offset++; } return pa_out; } /** * Create a new, densified geometry where no segment is longer than max_seg_length. * Input geometry is not altered, output geometry must be freed by caller. * @param lwg_in = input geometry * @param max_seg_length = maximum segment length in radians */ LWGEOM* lwgeom_segmentize_sphere(const LWGEOM *lwg_in, double max_seg_length) { POINTARRAY *pa_out; LWLINE *lwline; LWPOLY *lwpoly_in, *lwpoly_out; LWCOLLECTION *lwcol_in, *lwcol_out; int i; /* Reflect NULL */ if ( ! lwg_in ) return NULL; /* Clone empty */ if ( lwgeom_is_empty(lwg_in) ) return lwgeom_clone(lwg_in); switch (lwg_in->type) { case MULTIPOINTTYPE: case POINTTYPE: return lwgeom_clone_deep(lwg_in); break; case LINETYPE: lwline = lwgeom_as_lwline(lwg_in); pa_out = ptarray_segmentize_sphere(lwline->points, max_seg_length); return lwline_as_lwgeom(lwline_construct(lwg_in->srid, NULL, pa_out)); break; case POLYGONTYPE: lwpoly_in = lwgeom_as_lwpoly(lwg_in); lwpoly_out = lwpoly_construct_empty(lwg_in->srid, lwgeom_has_z(lwg_in), lwgeom_has_m(lwg_in)); for ( i = 0; i < lwpoly_in->nrings; i++ ) { pa_out = ptarray_segmentize_sphere(lwpoly_in->rings[i], max_seg_length); lwpoly_add_ring(lwpoly_out, pa_out); } return lwpoly_as_lwgeom(lwpoly_out); break; case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: lwcol_in = lwgeom_as_lwcollection(lwg_in); lwcol_out = lwcollection_construct_empty(lwg_in->type, lwg_in->srid, lwgeom_has_z(lwg_in), lwgeom_has_m(lwg_in)); for ( i = 0; i < lwcol_in->ngeoms; i++ ) { lwcollection_add_lwgeom(lwcol_out, lwgeom_segmentize_sphere(lwcol_in->geoms[i], max_seg_length)); } return lwcollection_as_lwgeom(lwcol_out); break; default: lwerror("lwgeom_segmentize_sphere: unsupported input geometry type: %d - %s", lwg_in->type, lwtype_name(lwg_in->type)); break; } lwerror("lwgeom_segmentize_sphere got to the end of the function, should not happen"); return NULL; } /** * Returns the area of the ring (ring must be closed) in square radians (surface of * the sphere is 4*PI). */ double ptarray_area_sphere(const POINTARRAY *pa) { int i; const POINT2D *p; GEOGRAPHIC_POINT a, b, c; double area = 0.0; /* Return zero on nonsensical inputs */ if ( ! pa || pa->npoints < 4 ) return 0.0; p = getPoint2d_cp(pa, 0); geographic_point_init(p->x, p->y, &a); p = getPoint2d_cp(pa, 1); geographic_point_init(p->x, p->y, &b); for ( i = 2; i < pa->npoints-1; i++ ) { p = getPoint2d_cp(pa, i); geographic_point_init(p->x, p->y, &c); area += sphere_signed_area(&a, &b, &c); b = c; } return fabs(area); } static double ptarray_distance_spheroid(const POINTARRAY *pa1, const POINTARRAY *pa2, const SPHEROID *s, double tolerance, int check_intersection) { GEOGRAPHIC_EDGE e1, e2; GEOGRAPHIC_POINT g1, g2; GEOGRAPHIC_POINT nearest1, nearest2; POINT3D A1, A2, B1, B2; POINT2D p; double distance; int i, j; int use_sphere = (s->a == s->b ? 1 : 0); /* Make result really big, so that everything will be smaller than it */ distance = MAXFLOAT; /* Empty point arrays? Return negative */ if ( pa1->npoints == 0 || pa2->npoints == 0 ) return -1.0; /* Handle point/point case here */ if ( pa1->npoints == 1 && pa2->npoints == 1 ) { getPoint2d_p(pa1, 0, &p); geographic_point_init(p.x, p.y, &g1); getPoint2d_p(pa2, 0, &p); geographic_point_init(p.x, p.y, &g2); /* Sphere special case, axes equal */ distance = s->radius * sphere_distance(&g1, &g2); if ( use_sphere ) return distance; /* Below tolerance, actual distance isn't of interest */ else if ( distance < 0.95 * tolerance ) return distance; /* Close or greater than tolerance, get the real answer to be sure */ else return spheroid_distance(&g1, &g2, s); } /* Handle point/line case here */ if ( pa1->npoints == 1 || pa2->npoints == 1 ) { /* Handle one/many case here */ int i; const POINTARRAY *pa_one; const POINTARRAY *pa_many; if ( pa1->npoints == 1 ) { pa_one = pa1; pa_many = pa2; } else { pa_one = pa2; pa_many = pa1; } /* Initialize our point */ getPoint2d_p(pa_one, 0, &p); geographic_point_init(p.x, p.y, &g1); /* Initialize start of line */ getPoint2d_p(pa_many, 0, &p); geographic_point_init(p.x, p.y, &(e1.start)); /* Iterate through the edges in our line */ for ( i = 1; i < pa_many->npoints; i++ ) { double d; getPoint2d_p(pa_many, i, &p); geographic_point_init(p.x, p.y, &(e1.end)); /* Get the spherical distance between point and edge */ d = s->radius * edge_distance_to_point(&e1, &g1, &g2); /* New shortest distance! Record this distance / location */ if ( d < distance ) { distance = d; nearest2 = g2; } /* We've gotten closer than the tolerance... */ if ( d < tolerance ) { /* Working on a sphere? The answer is correct, return */ if ( use_sphere ) { return d; } /* Far enough past the tolerance that the spheroid calculation won't change things */ else if ( d < tolerance * 0.95 ) { return d; } /* On a spheroid and near the tolerance? Confirm that we are *actually* closer than tolerance */ else { d = spheroid_distance(&g1, &nearest2, s); /* Yes, closer than tolerance, return! */ if ( d < tolerance ) return d; } } e1.start = e1.end; } /* On sphere, return answer */ if ( use_sphere ) return distance; /* On spheroid, calculate final answer based on closest approach */ else return spheroid_distance(&g1, &nearest2, s); } /* Initialize start of line 1 */ getPoint2d_p(pa1, 0, &p); geographic_point_init(p.x, p.y, &(e1.start)); geog2cart(&(e1.start), &A1); /* Handle line/line case */ for ( i = 1; i < pa1->npoints; i++ ) { getPoint2d_p(pa1, i, &p); geographic_point_init(p.x, p.y, &(e1.end)); geog2cart(&(e1.end), &A2); /* Initialize start of line 2 */ getPoint2d_p(pa2, 0, &p); geographic_point_init(p.x, p.y, &(e2.start)); geog2cart(&(e2.start), &B1); for ( j = 1; j < pa2->npoints; j++ ) { double d; getPoint2d_p(pa2, j, &p); geographic_point_init(p.x, p.y, &(e2.end)); geog2cart(&(e2.end), &B2); LWDEBUGF(4, "e1.start == GPOINT(%.6g %.6g) ", e1.start.lat, e1.start.lon); LWDEBUGF(4, "e1.end == GPOINT(%.6g %.6g) ", e1.end.lat, e1.end.lon); LWDEBUGF(4, "e2.start == GPOINT(%.6g %.6g) ", e2.start.lat, e2.start.lon); LWDEBUGF(4, "e2.end == GPOINT(%.6g %.6g) ", e2.end.lat, e2.end.lon); if ( check_intersection && edge_intersects(&A1, &A2, &B1, &B2) ) { LWDEBUG(4,"edge intersection! returning 0.0"); return 0.0; } d = s->radius * edge_distance_to_edge(&e1, &e2, &g1, &g2); LWDEBUGF(4,"got edge_distance_to_edge %.8g", d); if ( d < distance ) { distance = d; nearest1 = g1; nearest2 = g2; } if ( d < tolerance ) { if ( use_sphere ) { return d; } else { d = spheroid_distance(&nearest1, &nearest2, s); if ( d < tolerance ) return d; } } /* Copy end to start to allow a new end value in next iteration */ e2.start = e2.end; B1 = B2; } /* Copy end to start to allow a new end value in next iteration */ e1.start = e1.end; A1 = A2; } LWDEBUGF(4,"finished all loops, returning %.8g", distance); if ( use_sphere ) return distance; else return spheroid_distance(&nearest1, &nearest2, s); } /** * Calculate the area of an LWGEOM. Anything except POLYGON, MULTIPOLYGON * and GEOMETRYCOLLECTION return zero immediately. Multi's recurse, polygons * calculate external ring area and subtract internal ring area. A GBOX is * required to calculate an outside point. */ double lwgeom_area_sphere(const LWGEOM *lwgeom, const SPHEROID *spheroid) { int type; double radius2 = spheroid->radius * spheroid->radius; assert(lwgeom); /* No area in nothing */ if ( lwgeom_is_empty(lwgeom) ) return 0.0; /* Read the geometry type number */ type = lwgeom->type; /* Anything but polygons and collections returns zero */ if ( ! ( type == POLYGONTYPE || type == MULTIPOLYGONTYPE || type == COLLECTIONTYPE ) ) return 0.0; /* Actually calculate area */ if ( type == POLYGONTYPE ) { LWPOLY *poly = (LWPOLY*)lwgeom; int i; double area = 0.0; /* Just in case there's no rings */ if ( poly->nrings < 1 ) return 0.0; /* First, the area of the outer ring */ area += radius2 * ptarray_area_sphere(poly->rings[0]); /* Subtract areas of inner rings */ for ( i = 1; i < poly->nrings; i++ ) { area -= radius2 * ptarray_area_sphere(poly->rings[i]); } return area; } /* Recurse into sub-geometries to get area */ if ( type == MULTIPOLYGONTYPE || type == COLLECTIONTYPE ) { LWCOLLECTION *col = (LWCOLLECTION*)lwgeom; int i; double area = 0.0; for ( i = 0; i < col->ngeoms; i++ ) { area += lwgeom_area_sphere(col->geoms[i], spheroid); } return area; } /* Shouldn't get here. */ return 0.0; } /** * Calculate a projected point given a source point, a distance and a bearing. * @param r - location of first point. * @param spheroid - spheroid definition. * @param distance - distance, in units of the spheroid def'n. * @param azimuth - azimuth in radians. * @return s - location of projected point. * */ LWPOINT* lwgeom_project_spheroid(const LWPOINT *r, const SPHEROID *spheroid, double distance, double azimuth) { GEOGRAPHIC_POINT geo_source, geo_dest; POINT4D pt_dest; double x, y; POINTARRAY *pa; LWPOINT *lwp; /* Check the azimuth validity, convert to radians */ if ( azimuth < -2.0 * M_PI || azimuth > 2.0 * M_PI ) { lwerror("Azimuth must be between -2PI and 2PI"); return NULL; } /* Check the distance validity */ if ( distance < 0.0 || distance > (M_PI * spheroid->radius) ) { lwerror("Distance must be between 0 and %g", M_PI * spheroid->radius); return NULL; } /* Convert to ta geodetic point */ x = lwpoint_get_x(r); y = lwpoint_get_y(r); geographic_point_init(x, y, &geo_source); /* Try the projection */ if( spheroid_project(&geo_source, spheroid, distance, azimuth, &geo_dest) == LW_FAILURE ) { LWDEBUGF(3, "Unable to project from (%g %g) with azimuth %g and distance %g", x, y, azimuth, distance); lwerror("Unable to project from (%g %g) with azimuth %g and distance %g", x, y, azimuth, distance); return NULL; } /* Build the output LWPOINT */ pa = ptarray_construct(0, 0, 1); pt_dest.x = rad2deg(longitude_radians_normalize(geo_dest.lon)); pt_dest.y = rad2deg(latitude_radians_normalize(geo_dest.lat)); pt_dest.z = pt_dest.m = 0.0; ptarray_set_point4d(pa, 0, &pt_dest); lwp = lwpoint_construct(r->srid, NULL, pa); lwgeom_set_geodetic(lwpoint_as_lwgeom(lwp), LW_TRUE); return lwp; } /** * Calculate a bearing (azimuth) given a source and destination point. * @param r - location of first point. * @param s - location of second point. * @param spheroid - spheroid definition. * @return azimuth - azimuth in radians. * */ double lwgeom_azumith_spheroid(const LWPOINT *r, const LWPOINT *s, const SPHEROID *spheroid) { GEOGRAPHIC_POINT g1, g2; double x1, y1, x2, y2; /* Convert r to a geodetic point */ x1 = lwpoint_get_x(r); y1 = lwpoint_get_y(r); geographic_point_init(x1, y1, &g1); /* Convert s to a geodetic point */ x2 = lwpoint_get_x(s); y2 = lwpoint_get_y(s); geographic_point_init(x2, y2, &g2); /* Same point, return NaN */ if ( FP_EQUALS(x1, x2) && FP_EQUALS(y1, y2) ) { return NAN; } /* Do the direction calculation */ return spheroid_direction(&g1, &g2, spheroid); } /** * Calculate the distance between two LWGEOMs, using the coordinates are * longitude and latitude. Return immediately when the calulated distance drops * below the tolerance (useful for dwithin calculations). * Return a negative distance for incalculable cases. */ double lwgeom_distance_spheroid(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2, const SPHEROID *spheroid, double tolerance) { uint8_t type1, type2; int check_intersection = LW_FALSE; GBOX gbox1, gbox2; gbox_init(&gbox1); gbox_init(&gbox2); assert(lwgeom1); assert(lwgeom2); LWDEBUGF(4, "entered function, tolerance %.8g", tolerance); /* What's the distance to an empty geometry? We don't know. Return a negative number so the caller can catch this case. */ if ( lwgeom_is_empty(lwgeom1) || lwgeom_is_empty(lwgeom2) ) { return -1.0; } type1 = lwgeom1->type; type2 = lwgeom2->type; /* Make sure we have boxes */ if ( lwgeom1->bbox ) gbox1 = *(lwgeom1->bbox); else lwgeom_calculate_gbox_geodetic(lwgeom1, &gbox1); /* Make sure we have boxes */ if ( lwgeom2->bbox ) gbox2 = *(lwgeom2->bbox); else lwgeom_calculate_gbox_geodetic(lwgeom2, &gbox2); /* If the boxes aren't disjoint, we have to check for edge intersections */ if ( gbox_overlaps(&gbox1, &gbox2) ) check_intersection = LW_TRUE; /* Point/line combinations can all be handled with simple point array iterations */ if ( ( type1 == POINTTYPE || type1 == LINETYPE ) && ( type2 == POINTTYPE || type2 == LINETYPE ) ) { POINTARRAY *pa1, *pa2; if ( type1 == POINTTYPE ) pa1 = ((LWPOINT*)lwgeom1)->point; else pa1 = ((LWLINE*)lwgeom1)->points; if ( type2 == POINTTYPE ) pa2 = ((LWPOINT*)lwgeom2)->point; else pa2 = ((LWLINE*)lwgeom2)->points; return ptarray_distance_spheroid(pa1, pa2, spheroid, tolerance, check_intersection); } /* Point/Polygon cases, if point-in-poly, return zero, else return distance. */ if ( ( type1 == POLYGONTYPE && type2 == POINTTYPE ) || ( type2 == POLYGONTYPE && type1 == POINTTYPE ) ) { POINT2D p; LWPOLY *lwpoly; LWPOINT *lwpt; double distance = MAXFLOAT; int i; if ( type1 == POINTTYPE ) { lwpt = (LWPOINT*)lwgeom1; lwpoly = (LWPOLY*)lwgeom2; } else { lwpt = (LWPOINT*)lwgeom2; lwpoly = (LWPOLY*)lwgeom1; } getPoint2d_p(lwpt->point, 0, &p); /* Point in polygon implies zero distance */ if ( lwpoly_covers_point2d(lwpoly, &p) ) { return 0.0; } /* Not inside, so what's the actual distance? */ for ( i = 0; i < lwpoly->nrings; i++ ) { double ring_distance = ptarray_distance_spheroid(lwpoly->rings[i], lwpt->point, spheroid, tolerance, check_intersection); if ( ring_distance < distance ) distance = ring_distance; if ( distance < tolerance ) return distance; } return distance; } /* Line/polygon case, if start point-in-poly, return zero, else return distance. */ if ( ( type1 == POLYGONTYPE && type2 == LINETYPE ) || ( type2 == POLYGONTYPE && type1 == LINETYPE ) ) { POINT2D p; LWPOLY *lwpoly; LWLINE *lwline; double distance = MAXFLOAT; int i; if ( type1 == LINETYPE ) { lwline = (LWLINE*)lwgeom1; lwpoly = (LWPOLY*)lwgeom2; } else { lwline = (LWLINE*)lwgeom2; lwpoly = (LWPOLY*)lwgeom1; } getPoint2d_p(lwline->points, 0, &p); LWDEBUG(4, "checking if a point of line is in polygon"); /* Point in polygon implies zero distance */ if ( lwpoly_covers_point2d(lwpoly, &p) ) return 0.0; LWDEBUG(4, "checking ring distances"); /* Not contained, so what's the actual distance? */ for ( i = 0; i < lwpoly->nrings; i++ ) { double ring_distance = ptarray_distance_spheroid(lwpoly->rings[i], lwline->points, spheroid, tolerance, check_intersection); LWDEBUGF(4, "ring[%d] ring_distance = %.8g", i, ring_distance); if ( ring_distance < distance ) distance = ring_distance; if ( distance < tolerance ) return distance; } LWDEBUGF(4, "all rings checked, returning distance = %.8g", distance); return distance; } /* Polygon/polygon case, if start point-in-poly, return zero, else return distance. */ if ( ( type1 == POLYGONTYPE && type2 == POLYGONTYPE ) || ( type2 == POLYGONTYPE && type1 == POLYGONTYPE ) ) { POINT2D p; LWPOLY *lwpoly1 = (LWPOLY*)lwgeom1; LWPOLY *lwpoly2 = (LWPOLY*)lwgeom2; double distance = MAXFLOAT; int i, j; /* Point of 2 in polygon 1 implies zero distance */ getPoint2d_p(lwpoly1->rings[0], 0, &p); if ( lwpoly_covers_point2d(lwpoly2, &p) ) return 0.0; /* Point of 1 in polygon 2 implies zero distance */ getPoint2d_p(lwpoly2->rings[0], 0, &p); if ( lwpoly_covers_point2d(lwpoly1, &p) ) return 0.0; /* Not contained, so what's the actual distance? */ for ( i = 0; i < lwpoly1->nrings; i++ ) { for ( j = 0; j < lwpoly2->nrings; j++ ) { double ring_distance = ptarray_distance_spheroid(lwpoly1->rings[i], lwpoly2->rings[j], spheroid, tolerance, check_intersection); if ( ring_distance < distance ) distance = ring_distance; if ( distance < tolerance ) return distance; } } return distance; } /* Recurse into collections */ if ( lwtype_is_collection(type1) ) { int i; double distance = MAXFLOAT; LWCOLLECTION *col = (LWCOLLECTION*)lwgeom1; for ( i = 0; i < col->ngeoms; i++ ) { double geom_distance = lwgeom_distance_spheroid(col->geoms[i], lwgeom2, spheroid, tolerance); if ( geom_distance < distance ) distance = geom_distance; if ( distance < tolerance ) return distance; } return distance; } /* Recurse into collections */ if ( lwtype_is_collection(type2) ) { int i; double distance = MAXFLOAT; LWCOLLECTION *col = (LWCOLLECTION*)lwgeom2; for ( i = 0; i < col->ngeoms; i++ ) { double geom_distance = lwgeom_distance_spheroid(lwgeom1, col->geoms[i], spheroid, tolerance); if ( geom_distance < distance ) distance = geom_distance; if ( distance < tolerance ) return distance; } return distance; } lwerror("arguments include unsupported geometry type (%s, %s)", lwtype_name(type1), lwtype_name(type1)); return -1.0; } int lwgeom_covers_lwgeom_sphere(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2) { int type1, type2; GBOX gbox1, gbox2; gbox1.flags = gbox2.flags = 0; assert(lwgeom1); assert(lwgeom2); type1 = lwgeom1->type; type2 = lwgeom2->type; /* Currently a restricted implementation */ if ( ! ( (type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE || type1 == COLLECTIONTYPE) && (type2 == POINTTYPE || type2 == MULTIPOINTTYPE || type2 == COLLECTIONTYPE) ) ) { lwerror("lwgeom_covers_lwgeom_sphere: only POLYGON covers POINT tests are currently supported"); return LW_FALSE; } /* Make sure we have boxes */ if ( lwgeom1->bbox ) gbox1 = *(lwgeom1->bbox); else lwgeom_calculate_gbox_geodetic(lwgeom1, &gbox1); /* Make sure we have boxes */ if ( lwgeom2->bbox ) gbox2 = *(lwgeom2->bbox); else lwgeom_calculate_gbox_geodetic(lwgeom2, &gbox2); /* Handle the polygon/point case */ if ( type1 == POLYGONTYPE && type2 == POINTTYPE ) { POINT2D pt_to_test; getPoint2d_p(((LWPOINT*)lwgeom2)->point, 0, &pt_to_test); return lwpoly_covers_point2d((LWPOLY*)lwgeom1, &pt_to_test); } /* If any of the first argument parts covers the second argument, it's true */ if ( lwtype_is_collection( type1 ) ) { int i; LWCOLLECTION *col = (LWCOLLECTION*)lwgeom1; for ( i = 0; i < col->ngeoms; i++ ) { if ( lwgeom_covers_lwgeom_sphere(col->geoms[i], lwgeom2) ) { return LW_TRUE; } } return LW_FALSE; } /* Only if all of the second arguments are covered by the first argument is the condition true */ if ( lwtype_is_collection( type2 ) ) { int i; LWCOLLECTION *col = (LWCOLLECTION*)lwgeom2; for ( i = 0; i < col->ngeoms; i++ ) { if ( ! lwgeom_covers_lwgeom_sphere(lwgeom1, col->geoms[i]) ) { return LW_FALSE; } } return LW_TRUE; } /* Don't get here */ lwerror("lwgeom_covers_lwgeom_sphere: reached end of function without resolution"); return LW_FALSE; } /** * Given a polygon (lon/lat decimal degrees) and point (lon/lat decimal degrees) and * a guaranteed outside point (lon/lat decimal degrees) (calculate with gbox_pt_outside()) * return LW_TRUE if point is inside or on edge of polygon. */ int lwpoly_covers_point2d(const LWPOLY *poly, const POINT2D *pt_to_test) { int i; int in_hole_count = 0; POINT3D p; GEOGRAPHIC_POINT gpt_to_test; POINT2D pt_outside; GBOX gbox; gbox.flags = 0; /* Nulls and empties don't contain anything! */ if ( ! poly || lwgeom_is_empty((LWGEOM*)poly) ) { LWDEBUG(4,"returning false, geometry is empty or null"); return LW_FALSE; } /* Make sure we have boxes */ if ( poly->bbox ) gbox = *(poly->bbox); else lwgeom_calculate_gbox_geodetic((LWGEOM*)poly, &gbox); /* Point not in box? Done! */ geographic_point_init(pt_to_test->x, pt_to_test->y, &gpt_to_test); geog2cart(&gpt_to_test, &p); if ( ! gbox_contains_point3d(&gbox, &p) ) { LWDEBUG(4, "the point is not in the box!"); return LW_FALSE; } /* Calculate our outside point from the gbox */ gbox_pt_outside(&gbox, &pt_outside); LWDEBUGF(4, "pt_outside POINT(%.18g %.18g)", pt_outside.x, pt_outside.y); LWDEBUGF(4, "pt_to_test POINT(%.18g %.18g)", pt_to_test->x, pt_to_test->y); LWDEBUGF(4, "polygon %s", lwgeom_to_ewkt((LWGEOM*)poly)); LWDEBUGF(4, "gbox %s", gbox_to_string(&gbox)); /* Not in outer ring? We're done! */ if ( ! ptarray_contains_point_sphere(poly->rings[0], &pt_outside, pt_to_test) ) { LWDEBUG(4,"returning false, point is outside ring"); return LW_FALSE; } LWDEBUGF(4, "testing %d rings", poly->nrings); /* But maybe point is in a hole... */ for ( i = 1; i < poly->nrings; i++ ) { LWDEBUGF(4, "ring test loop %d", i); /* Count up hole containment. Odd => outside boundary. */ if ( ptarray_contains_point_sphere(poly->rings[i], &pt_outside, pt_to_test) ) in_hole_count++; } LWDEBUGF(4, "in_hole_count == %d", in_hole_count); if ( in_hole_count % 2 ) { LWDEBUG(4,"returning false, inner ring containment count is odd"); return LW_FALSE; } LWDEBUG(4,"returning true, inner ring containment count is even"); return LW_TRUE; } /** * This function can only be used on LWGEOM that is built on top of * GSERIALIZED, otherwise alignment errors will ensue. */ int getPoint2d_p_ro(const POINTARRAY *pa, int n, POINT2D **point) { uint8_t *pa_ptr = NULL; assert(pa); assert(n >= 0); assert(n < pa->npoints); pa_ptr = getPoint_internal(pa, n); /* printf( "pa_ptr[0]: %g\n", *((double*)pa_ptr)); */ *point = (POINT2D*)pa_ptr; return LW_SUCCESS; } int ptarray_calculate_gbox_geodetic(const POINTARRAY *pa, GBOX *gbox) { int i; int first = LW_TRUE; const POINT2D *p; POINT3D A1, A2; GBOX edge_gbox; assert(gbox); assert(pa); edge_gbox.flags = gbox->flags; if ( pa->npoints == 0 ) return LW_FAILURE; if ( pa->npoints == 1 ) { p = getPoint2d_cp(pa, 0); ll2cart(p, &A1); gbox->xmin = gbox->xmax = A1.x; gbox->ymin = gbox->ymax = A1.y; gbox->zmin = gbox->zmax = A1.z; return LW_SUCCESS; } p = getPoint2d_cp(pa, 0); ll2cart(p, &A1); for ( i = 1; i < pa->npoints; i++ ) { p = getPoint2d_cp(pa, i); ll2cart(p, &A2); edge_calculate_gbox(&A1, &A2, &edge_gbox); /* Initialize the box */ if ( first ) { gbox_duplicate(&edge_gbox, gbox); first = LW_FALSE; } /* Expand the box where necessary */ else { gbox_merge(&edge_gbox, gbox); } A1 = A2; } return LW_SUCCESS; } static int lwpoint_calculate_gbox_geodetic(const LWPOINT *point, GBOX *gbox) { assert(point); return ptarray_calculate_gbox_geodetic(point->point, gbox); } static int lwline_calculate_gbox_geodetic(const LWLINE *line, GBOX *gbox) { assert(line); return ptarray_calculate_gbox_geodetic(line->points, gbox); } static int lwpolygon_calculate_gbox_geodetic(const LWPOLY *poly, GBOX *gbox) { GBOX ringbox; int i; int first = LW_TRUE; assert(poly); if ( poly->nrings == 0 ) return LW_FAILURE; ringbox.flags = gbox->flags; for ( i = 0; i < poly->nrings; i++ ) { if ( ptarray_calculate_gbox_geodetic(poly->rings[i], &ringbox) == LW_FAILURE ) return LW_FAILURE; if ( first ) { gbox_duplicate(&ringbox, gbox); first = LW_FALSE; } else { gbox_merge(&ringbox, gbox); } } /* If the box wraps a poly, push that axis to the absolute min/max as appropriate */ gbox_check_poles(gbox); return LW_SUCCESS; } static int lwtriangle_calculate_gbox_geodetic(const LWTRIANGLE *triangle, GBOX *gbox) { assert(triangle); return ptarray_calculate_gbox_geodetic(triangle->points, gbox); } static int lwcollection_calculate_gbox_geodetic(const LWCOLLECTION *coll, GBOX *gbox) { GBOX subbox; int i; int result = LW_FAILURE; int first = LW_TRUE; assert(coll); if ( coll->ngeoms == 0 ) return LW_FAILURE; subbox.flags = gbox->flags; for ( i = 0; i < coll->ngeoms; i++ ) { if ( lwgeom_calculate_gbox_geodetic((LWGEOM*)(coll->geoms[i]), &subbox) == LW_SUCCESS ) { /* Keep a copy of the sub-bounding box for later */ if ( coll->geoms[i]->bbox ) lwfree(coll->geoms[i]->bbox); coll->geoms[i]->bbox = gbox_copy(&subbox); if ( first ) { gbox_duplicate(&subbox, gbox); first = LW_FALSE; } else { gbox_merge(&subbox, gbox); } result = LW_SUCCESS; } } return result; } int lwgeom_calculate_gbox_geodetic(const LWGEOM *geom, GBOX *gbox) { int result = LW_FAILURE; LWDEBUGF(4, "got type %d", geom->type); /* Add a geodetic flag to the incoming gbox */ gbox->flags = gflags(FLAGS_GET_Z(geom->flags),FLAGS_GET_M(geom->flags),1); switch (geom->type) { case POINTTYPE: result = lwpoint_calculate_gbox_geodetic((LWPOINT*)geom, gbox); break; case LINETYPE: result = lwline_calculate_gbox_geodetic((LWLINE *)geom, gbox); break; case POLYGONTYPE: result = lwpolygon_calculate_gbox_geodetic((LWPOLY *)geom, gbox); break; case TRIANGLETYPE: result = lwtriangle_calculate_gbox_geodetic((LWTRIANGLE *)geom, gbox); break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: result = lwcollection_calculate_gbox_geodetic((LWCOLLECTION *)geom, gbox); break; default: lwerror("lwgeom_calculate_gbox_geodetic: unsupported input geometry type: %d - %s", geom->type, lwtype_name(geom->type)); break; } return result; } static int ptarray_check_geodetic(const POINTARRAY *pa) { int t; POINT2D pt; assert(pa); for (t=0; t<pa->npoints; t++) { getPoint2d_p(pa, t, &pt); /* printf( "%d (%g, %g)\n", t, pt.x, pt.y); */ if ( pt.x < -180.0 || pt.y < -90.0 || pt.x > 180.0 || pt.y > 90.0 ) return LW_FALSE; } return LW_TRUE; } static int lwpoint_check_geodetic(const LWPOINT *point) { assert(point); return ptarray_check_geodetic(point->point); } static int lwline_check_geodetic(const LWLINE *line) { assert(line); return ptarray_check_geodetic(line->points); } static int lwpoly_check_geodetic(const LWPOLY *poly) { int i = 0; assert(poly); for ( i = 0; i < poly->nrings; i++ ) { if ( ptarray_check_geodetic(poly->rings[i]) == LW_FALSE ) return LW_FALSE; } return LW_TRUE; } static int lwtriangle_check_geodetic(const LWTRIANGLE *triangle) { assert(triangle); return ptarray_check_geodetic(triangle->points); } static int lwcollection_check_geodetic(const LWCOLLECTION *col) { int i = 0; assert(col); for ( i = 0; i < col->ngeoms; i++ ) { if ( lwgeom_check_geodetic(col->geoms[i]) == LW_FALSE ) return LW_FALSE; } return LW_TRUE; } int lwgeom_check_geodetic(const LWGEOM *geom) { if ( lwgeom_is_empty(geom) ) return LW_TRUE; switch (geom->type) { case POINTTYPE: return lwpoint_check_geodetic((LWPOINT *)geom); case LINETYPE: return lwline_check_geodetic((LWLINE *)geom); case POLYGONTYPE: return lwpoly_check_geodetic((LWPOLY *)geom); case TRIANGLETYPE: return lwtriangle_check_geodetic((LWTRIANGLE *)geom); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return lwcollection_check_geodetic((LWCOLLECTION *)geom); default: lwerror("lwgeom_check_geodetic: unsupported input geometry type: %d - %s", geom->type, lwtype_name(geom->type)); } return LW_FALSE; } static int ptarray_force_geodetic(POINTARRAY *pa) { int t; int changed = LW_FALSE; POINT4D pt; assert(pa); for ( t=0; t < pa->npoints; t++ ) { getPoint4d_p(pa, t, &pt); if ( pt.x < -180.0 || pt.x > 180.0 || pt.y < -90.0 || pt.y > 90.0 ) { pt.x = longitude_degrees_normalize(pt.x); pt.y = latitude_degrees_normalize(pt.y); ptarray_set_point4d(pa, t, &pt); changed = LW_TRUE; } } return changed; } static int lwpoint_force_geodetic(LWPOINT *point) { assert(point); return ptarray_force_geodetic(point->point); } static int lwline_force_geodetic(LWLINE *line) { assert(line); return ptarray_force_geodetic(line->points); } static int lwpoly_force_geodetic(LWPOLY *poly) { int i = 0; int changed = LW_FALSE; assert(poly); for ( i = 0; i < poly->nrings; i++ ) { if ( ptarray_force_geodetic(poly->rings[i]) == LW_TRUE ) changed = LW_TRUE; } return changed; } static int lwcollection_force_geodetic(LWCOLLECTION *col) { int i = 0; int changed = LW_FALSE; assert(col); for ( i = 0; i < col->ngeoms; i++ ) { if ( lwgeom_force_geodetic(col->geoms[i]) == LW_TRUE ) changed = LW_TRUE; } return changed; } int lwgeom_force_geodetic(LWGEOM *geom) { switch ( lwgeom_get_type(geom) ) { case POINTTYPE: return lwpoint_force_geodetic((LWPOINT *)geom); case LINETYPE: return lwline_force_geodetic((LWLINE *)geom); case POLYGONTYPE: return lwpoly_force_geodetic((LWPOLY *)geom); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return lwcollection_force_geodetic((LWCOLLECTION *)geom); default: lwerror("unsupported input geometry type: %d", lwgeom_get_type(geom)); } return LW_FALSE; } double ptarray_length_spheroid(const POINTARRAY *pa, const SPHEROID *s) { GEOGRAPHIC_POINT a, b; double za = 0.0, zb = 0.0; POINT4D p; int i; int hasz = LW_FALSE; double length = 0.0; double seglength = 0.0; /* Return zero on non-sensical inputs */ if ( ! pa || pa->npoints < 2 ) return 0.0; /* See if we have a third dimension */ hasz = FLAGS_GET_Z(pa->flags); /* Initialize first point */ getPoint4d_p(pa, 0, &p); geographic_point_init(p.x, p.y, &a); if ( hasz ) za = p.z; /* Loop and sum the length for each segment */ for ( i = 1; i < pa->npoints; i++ ) { seglength = 0.0; getPoint4d_p(pa, i, &p); geographic_point_init(p.x, p.y, &b); if ( hasz ) zb = p.z; /* Special sphere case */ if ( s->a == s->b ) seglength = s->radius * sphere_distance(&a, &b); /* Spheroid case */ else seglength = spheroid_distance(&a, &b, s); /* Add in the vertical displacement if we're in 3D */ if ( hasz ) seglength = sqrt( (zb-za)*(zb-za) + seglength*seglength ); /* Add this segment length to the total */ length += seglength; /* B gets incremented in the next loop, so we save the value here */ a = b; za = zb; } return length; } double lwgeom_length_spheroid(const LWGEOM *geom, const SPHEROID *s) { int type; int i = 0; double length = 0.0; assert(geom); /* No area in nothing */ if ( lwgeom_is_empty(geom) ) return 0.0; type = geom->type; if ( type == POINTTYPE || type == MULTIPOINTTYPE ) return 0.0; if ( type == LINETYPE ) return ptarray_length_spheroid(((LWLINE*)geom)->points, s); if ( type == POLYGONTYPE ) { LWPOLY *poly = (LWPOLY*)geom; for ( i = 0; i < poly->nrings; i++ ) { length += ptarray_length_spheroid(poly->rings[i], s); } return length; } if ( type == TRIANGLETYPE ) return ptarray_length_spheroid(((LWTRIANGLE*)geom)->points, s); if ( lwtype_is_collection( type ) ) { LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) { length += lwgeom_length_spheroid(col->geoms[i], s); } return length; } lwerror("unsupported type passed to lwgeom_length_sphere"); return 0.0; } /** * When features are snapped or sometimes they are just this way, they are very close to * the geodetic bounds but slightly over. This routine nudges those points, and only * those points, back over to the bounds. * http://trac.osgeo.org/postgis/ticket/1292 */ static int ptarray_nudge_geodetic(POINTARRAY *pa) { int i; POINT4D p; int altered = LW_FALSE; int rv = LW_FALSE; static double tolerance = 1e-10; if ( ! pa ) lwerror("ptarray_nudge_geodetic called with null input"); for(i = 0; i < pa->npoints; i++ ) { getPoint4d_p(pa, i, &p); if ( p.x < -180.0 && (-180.0 - p.x < tolerance) ) { p.x = -180.0; altered = LW_TRUE; } if ( p.x > 180.0 && (p.x - 180.0 < tolerance) ) { p.x = 180.0; altered = LW_TRUE; } if ( p.y < -90.0 && (-90.0 - p.y < tolerance) ) { p.y = -90.0; altered = LW_TRUE; } if ( p.y > 90.0 && (p.y - 90.0 < tolerance) ) { p.y = 90.0; altered = LW_TRUE; } if ( altered == LW_TRUE ) { ptarray_set_point4d(pa, i, &p); altered = LW_FALSE; rv = LW_TRUE; } } return rv; } /** * When features are snapped or sometimes they are just this way, they are very close to * the geodetic bounds but slightly over. This routine nudges those points, and only * those points, back over to the bounds. * http://trac.osgeo.org/postgis/ticket/1292 */ int lwgeom_nudge_geodetic(LWGEOM *geom) { int type; int i = 0; int rv = LW_FALSE; assert(geom); /* No points in nothing */ if ( lwgeom_is_empty(geom) ) return LW_FALSE; type = geom->type; if ( type == POINTTYPE ) return ptarray_nudge_geodetic(((LWPOINT*)geom)->point); if ( type == LINETYPE ) return ptarray_nudge_geodetic(((LWLINE*)geom)->points); if ( type == POLYGONTYPE ) { LWPOLY *poly = (LWPOLY*)geom; for ( i = 0; i < poly->nrings; i++ ) { int n = ptarray_nudge_geodetic(poly->rings[i]); rv = (rv == LW_TRUE ? rv : n); } return rv; } if ( type == TRIANGLETYPE ) return ptarray_nudge_geodetic(((LWTRIANGLE*)geom)->points); if ( lwtype_is_collection( type ) ) { LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) { int n = lwgeom_nudge_geodetic(col->geoms[i]); rv = (rv == LW_TRUE ? rv : n); } return rv; } lwerror("unsupported type (%s) passed to lwgeom_nudge_geodetic", lwtype_name(type)); return rv; } /** * Utility function for checking if P is within the cone defined by A1/A2. */ static int point_in_cone(const POINT3D *A1, const POINT3D *A2, const POINT3D *P) { POINT3D AC; /* Center point of A1/A2 */ double min_similarity, similarity; /* The normalized sum bisects the angle between start and end. */ vector_sum(A1, A2, &AC); normalize(&AC); /* The projection of start onto the center defines the minimum similarity */ min_similarity = dot_product(A1, &AC); /* The projection of candidate p onto the center */ similarity = dot_product(P, &AC); /* If the point is more similar than the end, the point is in the cone */ if ( similarity > min_similarity || fabs(similarity - min_similarity) < 2e-16 ) { return LW_TRUE; } return LW_FALSE; } /** * Utility function for ptarray_contains_point_sphere() */ static int point3d_equals(const POINT3D *p1, const POINT3D *p2) { return FP_EQUALS(p1->x, p2->x) && FP_EQUALS(p1->y, p2->y) && FP_EQUALS(p1->z, p2->z); } /** * Utility function for edge_intersects(), signum with a tolerance * in determining if the value is zero. */ static int dot_product_side(const POINT3D *p, const POINT3D *q) { double dp = dot_product(p, q); if ( FP_IS_ZERO(dp) ) return 0; return dp < 0.0 ? -1 : 1; } /** * Returns non-zero if edges A and B interact. The type of interaction is given in the * return value with the bitmask elements defined above. */ int edge_intersects(const POINT3D *A1, const POINT3D *A2, const POINT3D *B1, const POINT3D *B2) { POINT3D AN, BN, VN; /* Normals to plane A and plane B */ double ab_dot; int a1_side, a2_side, b1_side, b2_side; int rv = PIR_NO_INTERACT; /* Normals to the A-plane and B-plane */ unit_normal(A1, A2, &AN); unit_normal(B1, B2, &BN); /* Are A-plane and B-plane basically the same? */ ab_dot = dot_product(&AN, &BN); if ( FP_EQUALS(fabs(ab_dot), 1.0) ) { /* Co-linear case */ if ( point_in_cone(A1, A2, B1) || point_in_cone(A1, A2, B2) || point_in_cone(B1, B2, A1) || point_in_cone(B1, B2, A2) ) { rv |= PIR_INTERSECTS; rv |= PIR_COLINEAR; } return rv; } /* What side of plane-A and plane-B do the end points */ /* of A and B fall? */ a1_side = dot_product_side(&BN, A1); a2_side = dot_product_side(&BN, A2); b1_side = dot_product_side(&AN, B1); b2_side = dot_product_side(&AN, B2); /* Both ends of A on the same side of plane B. */ if ( a1_side == a2_side && a1_side != 0 ) { /* No intersection. */ return PIR_NO_INTERACT; } /* Both ends of B on the same side of plane A. */ if ( b1_side == b2_side && b1_side != 0 ) { /* No intersection. */ return PIR_NO_INTERACT; } /* A straddles B and B straddles A, so... */ if ( a1_side != a2_side && (a1_side + a2_side) == 0 && b1_side != b2_side && (b1_side + b2_side) == 0 ) { /* Have to check if intersection point is inside both arcs */ unit_normal(&AN, &BN, &VN); if ( point_in_cone(A1, A2, &VN) && point_in_cone(B1, B2, &VN) ) { return PIR_INTERSECTS; } /* Have to check if intersection point is inside both arcs */ vector_scale(&VN, -1); if ( point_in_cone(A1, A2, &VN) && point_in_cone(B1, B2, &VN) ) { return PIR_INTERSECTS; } return PIR_NO_INTERACT; } /* The rest are all intersects variants... */ rv |= PIR_INTERSECTS; /* A touches B */ if ( a1_side == 0 ) { /* Touches at A1, A2 is on what side? */ rv |= (a2_side < 0 ? PIR_A_TOUCH_RIGHT : PIR_A_TOUCH_LEFT); } else if ( a2_side == 0 ) { /* Touches at A2, A1 is on what side? */ rv |= (a1_side < 0 ? PIR_A_TOUCH_RIGHT : PIR_A_TOUCH_LEFT); } /* B touches A */ if ( b1_side == 0 ) { /* Touches at B1, B2 is on what side? */ rv |= (b2_side < 0 ? PIR_B_TOUCH_RIGHT : PIR_B_TOUCH_LEFT); } else if ( b2_side == 0 ) { /* Touches at B2, B1 is on what side? */ rv |= (b1_side < 0 ? PIR_B_TOUCH_RIGHT : PIR_B_TOUCH_LEFT); } return rv; } /** * This routine returns LW_TRUE if the stabline joining the pt_outside and pt_to_test * crosses the ring an odd number of times, or if the pt_to_test is on the ring boundary itself, * returning LW_FALSE otherwise. * The pt_outside *must* be guaranteed to be outside the ring (use the geography_pt_outside() function * to derive one in postgis, or the gbox_pt_outside() function if you don't mind burning CPU cycles * building a gbox first). */ int ptarray_contains_point_sphere(const POINTARRAY *pa, const POINT2D *pt_outside, const POINT2D *pt_to_test) { POINT3D S1, S2; /* Stab line end points */ POINT3D E1, E2; /* Edge end points (3-space) */ POINT2D p; /* Edge end points (lon/lat) */ int count = 0, i, inter; /* Null input, not enough points for a ring? You ain't closed! */ if ( ! pa || pa->npoints < 4 ) return LW_FALSE; /* Set up our stab line */ ll2cart(pt_to_test, &S1); ll2cart(pt_outside, &S2); /* Initialize first point */ getPoint2d_p(pa, 0, &p); ll2cart(&p, &E1); /* Walk every edge and see if the stab line hits it */ for ( i = 1; i < pa->npoints; i++ ) { LWDEBUGF(4, "testing edge (%d)", i); LWDEBUGF(4, " start point == POINT(%.12g %.12g)", p.x, p.y); /* Read next point. */ getPoint2d_p(pa, i, &p); ll2cart(&p, &E2); /* Skip over too-short edges. */ if ( point3d_equals(&E1, &E2) ) { continue; } /* Our test point is on an edge end! Point is "in ring" by our definition */ if ( point3d_equals(&S1, &E1) ) { return LW_TRUE; } /* Calculate relationship between stab line and edge */ inter = edge_intersects(&S1, &S2, &E1, &E2); /* We have some kind of interaction... */ if ( inter & PIR_INTERSECTS ) { /* If the stabline is touching the edge, that implies the test point */ /* is on the edge, so we're done, the point is in (on) the ring. */ if ( (inter & PIR_A_TOUCH_RIGHT) || (inter & PIR_A_TOUCH_LEFT) ) { return LW_TRUE; } /* It's a touching interaction, disregard all the left-side ones. */ /* It's a co-linear intersection, ignore those. */ if ( inter & PIR_B_TOUCH_RIGHT || inter & PIR_COLINEAR ) { /* Do nothing, to avoid double counts. */ LWDEBUGF(4," edge (%d) crossed, disregarding to avoid double count", i, count); } else { /* Increment crossingn count. */ count++; LWDEBUGF(4," edge (%d) crossed, count == %d", i, count); } } else { LWDEBUGF(4," edge (%d) did not cross", i); } /* Increment to next edge */ E1 = E2; } LWDEBUGF(4,"final count == %d", count); /* An odd number of crossings implies containment! */ if ( count % 2 ) { return LW_TRUE; } return LW_FALSE; } �������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/measures3d.c������������������������������������������������������0000644�0000000�0000000�00000071611�12055510714�017766� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� /********************************************************************** * $Id: measures.c 5439 2010-03-16 03:13:33Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2011 Nicklas Avén * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <string.h> #include <stdlib.h> #include "measures3d.h" #include "lwgeom_log.h" /*------------------------------------------------------------------------------------------------------------ Initializing functions The functions starting the distance-calculation processses --------------------------------------------------------------------------------------------------------------*/ /** Function initializing 3dshortestline and 3dlongestline calculations. */ LWGEOM * lw_dist3d_distanceline(LWGEOM *lw1, LWGEOM *lw2,int srid,int mode) { double x1,x2,y1,y2, z1, z2; double initdistance = ( mode == DIST_MIN ? MAXFLOAT : -1.0); DISTPTS3D thedl; LWPOINT *lwpoints[2]; LWGEOM *result; thedl.mode = mode; thedl.distance = initdistance; thedl.tolerance = 0.0; LWDEBUG(2, "lw_dist3d_distanceline is called"); if (!lw_dist3d_recursive(lw1, lw2, &thedl)) { /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } /*if thedl.distance is unchanged there where only empty geometries input*/ if (thedl.distance == initdistance) { LWDEBUG(3, "didn't find geometries to measure between, returning null"); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } else { x1=thedl.p1.x; y1=thedl.p1.y; z1=thedl.p1.z; x2=thedl.p2.x; y2=thedl.p2.y; z2=thedl.p2.z; lwpoints[0] = lwpoint_make3dz(srid, x1, y1, z1); lwpoints[1] = lwpoint_make3dz(srid, x2, y2, z2); result = (LWGEOM *)lwline_from_ptarray(srid, 2, lwpoints); } return result; } /** Function initializing 3dclosestpoint calculations. */ LWGEOM * lw_dist3d_distancepoint(LWGEOM *lw1, LWGEOM *lw2,int srid,int mode) { double x,y,z; DISTPTS3D thedl; double initdistance = MAXFLOAT; LWGEOM *result; thedl.mode = mode; thedl.distance= initdistance; thedl.tolerance = 0; LWDEBUG(2, "lw_dist3d_distancepoint is called"); if (!lw_dist3d_recursive(lw1, lw2, &thedl)) { /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } if (thedl.distance == initdistance) { LWDEBUG(3, "didn't find geometries to measure between, returning null"); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } else { x=thedl.p1.x; y=thedl.p1.y; z=thedl.p1.z; result = (LWGEOM *)lwpoint_make3dz(srid, x, y, z); } return result; } /** Function initialazing 3d max distance calculation */ double lwgeom_maxdistance3d(LWGEOM *lw1, LWGEOM *lw2) { LWDEBUG(2, "lwgeom_maxdistance3d is called"); return lwgeom_maxdistance3d_tolerance( lw1, lw2, 0.0 ); } /** Function handling 3d max distance calculations and dfyllywithin calculations. The difference is just the tolerance. */ double lwgeom_maxdistance3d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance) { /*double thedist;*/ DISTPTS3D thedl; LWDEBUG(2, "lwgeom_maxdistance3d_tolerance is called"); thedl.mode = DIST_MAX; thedl.distance= -1; thedl.tolerance = tolerance; if (lw_dist3d_recursive(lw1, lw2, &thedl)) { return thedl.distance; } /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); return -1; } /** Function initialazing 3d min distance calculation */ double lwgeom_mindistance3d(LWGEOM *lw1, LWGEOM *lw2) { LWDEBUG(2, "lwgeom_mindistance3d is called"); return lwgeom_mindistance3d_tolerance( lw1, lw2, 0.0 ); } /** Function handling 3d min distance calculations and dwithin calculations. The difference is just the tolerance. */ double lwgeom_mindistance3d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance) { DISTPTS3D thedl; LWDEBUG(2, "lwgeom_mindistance3d_tolerance is called"); thedl.mode = DIST_MIN; thedl.distance= MAXFLOAT; thedl.tolerance = tolerance; if (lw_dist3d_recursive(lw1, lw2, &thedl)) { return thedl.distance; } /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); return MAXFLOAT; } /*------------------------------------------------------------------------------------------------------------ End of Initializing functions --------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------ Preprocessing functions Functions preparing geometries for distance-calculations --------------------------------------------------------------------------------------------------------------*/ /** This is a recursive function delivering every possible combinatin of subgeometries */ int lw_dist3d_recursive(const LWGEOM *lwg1,const LWGEOM *lwg2, DISTPTS3D *dl) { int i, j; int n1=1; int n2=1; LWGEOM *g1 = NULL; LWGEOM *g2 = NULL; LWCOLLECTION *c1 = NULL; LWCOLLECTION *c2 = NULL; LWDEBUGF(2, "lw_dist3d_recursive is called with type1=%d, type2=%d", lwg1->type, lwg2->type); if (lwgeom_is_collection(lwg1)) { LWDEBUG(3, "First geometry is collection"); c1 = lwgeom_as_lwcollection(lwg1); n1 = c1->ngeoms; } if (lwgeom_is_collection(lwg2)) { LWDEBUG(3, "Second geometry is collection"); c2 = lwgeom_as_lwcollection(lwg2); n2 = c2->ngeoms; } for ( i = 0; i < n1; i++ ) { if (lwgeom_is_collection(lwg1)) { g1 = c1->geoms[i]; } else { g1 = (LWGEOM*)lwg1; } if (lwgeom_is_empty(g1)) return LW_TRUE; if (lwgeom_is_collection(g1)) { LWDEBUG(3, "Found collection inside first geometry collection, recursing"); if (!lw_dist3d_recursive(g1, lwg2, dl)) return LW_FALSE; continue; } for ( j = 0; j < n2; j++ ) { if (lwgeom_is_collection(lwg2)) { g2 = c2->geoms[j]; } else { g2 = (LWGEOM*)lwg2; } if (lwgeom_is_collection(g2)) { LWDEBUG(3, "Found collection inside second geometry collection, recursing"); if (!lw_dist3d_recursive(g1, g2, dl)) return LW_FALSE; continue; } /*If one of geometries is empty, return. True here only means continue searching. False would have stoped the process*/ if (lwgeom_is_empty(g1)||lwgeom_is_empty(g2)) return LW_TRUE; if (!lw_dist3d_distribute_bruteforce(g1, g2, dl)) return LW_FALSE; if (dl->distance<=dl->tolerance && dl->mode == DIST_MIN) return LW_TRUE; /*just a check if the answer is already given*/ } } return LW_TRUE; } /** This function distributes the brut-force for 3D so far the only type, tasks depending on type */ int lw_dist3d_distribute_bruteforce(LWGEOM *lwg1, LWGEOM *lwg2, DISTPTS3D *dl) { int t1 = lwg1->type; int t2 = lwg2->type; LWDEBUGF(2, "lw_dist3d_distribute_bruteforce is called with typ1=%d, type2=%d", lwg1->type, lwg2->type); if ( t1 == POINTTYPE ) { if ( t2 == POINTTYPE ) { dl->twisted=1; return lw_dist3d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl); } else if ( t2 == LINETYPE ) { dl->twisted=1; return lw_dist3d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl); } else if ( t2 == POLYGONTYPE ) { dl->twisted=1; return lw_dist3d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2,dl); } else { lwerror("Unsupported geometry type: %s", lwtype_name(t2)); return LW_FALSE; } } else if ( t1 == LINETYPE ) { if ( t2 == POINTTYPE ) { dl->twisted=(-1); return lw_dist3d_point_line((LWPOINT *)lwg2,(LWLINE *)lwg1,dl); } else if ( t2 == LINETYPE ) { dl->twisted=1; return lw_dist3d_line_line((LWLINE *)lwg1,(LWLINE *)lwg2,dl); } else if ( t2 == POLYGONTYPE ) { dl->twisted=1; return lw_dist3d_line_poly((LWLINE *)lwg1,(LWPOLY *)lwg2,dl); } else { lwerror("Unsupported geometry type: %s", lwtype_name(t2)); return LW_FALSE; } } else if ( t1 == POLYGONTYPE ) { if ( t2 == POLYGONTYPE ) { dl->twisted=1; return lw_dist3d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2,dl); } else if ( t2 == POINTTYPE ) { dl->twisted=-1; return lw_dist3d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1,dl); } else if ( t2 == LINETYPE ) { dl->twisted=-1; return lw_dist3d_line_poly((LWLINE *)lwg2,(LWPOLY *)lwg1,dl); } else { lwerror("Unsupported geometry type: %s", lwtype_name(t2)); return LW_FALSE; } } else { lwerror("Unsupported geometry type: %s", lwtype_name(t1)); return LW_FALSE; } /*You shouldn't being able to get here*/ lwerror("unspecified error in function lw_dist3d_distribute_bruteforce"); return LW_FALSE; } /*------------------------------------------------------------------------------------------------------------ End of Preprocessing functions --------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------ Brute force functions So far the only way to do 3D-calculations --------------------------------------------------------------------------------------------------------------*/ /** point to point calculation */ int lw_dist3d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS3D *dl) { POINT3DZ p1; POINT3DZ p2; LWDEBUG(2, "lw_dist3d_point_point is called"); getPoint3dz_p(point1->point, 0, &p1); getPoint3dz_p(point2->point, 0, &p2); return lw_dist3d_pt_pt(&p1, &p2,dl); } /** point to line calculation */ int lw_dist3d_point_line(LWPOINT *point, LWLINE *line, DISTPTS3D *dl) { POINT3DZ p; POINTARRAY *pa = line->points; LWDEBUG(2, "lw_dist3d_point_line is called"); getPoint3dz_p(point->point, 0, &p); return lw_dist3d_pt_ptarray(&p, pa, dl); } /** Computes point to polygon distance For mindistance that means: 1)find the plane of the polygon 2)projecting the point to the plane of the polygon 3)finding if that projected point is inside the polygon, if so the distance is measured to that projected point 4) if not in polygon above, check the distance against the boundary of the polygon for max distance it is always point against boundary */ int lw_dist3d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS3D *dl) { POINT3DZ p, projp;/*projp is "point projected on plane"*/ PLANE3D plane; LWDEBUG(2, "lw_dist3d_point_poly is called"); getPoint3dz_p(point->point, 0, &p); /*If we are lookig for max distance, longestline or dfullywithin*/ if (dl->mode == DIST_MAX) { LWDEBUG(3, "looking for maxdistance"); return lw_dist3d_pt_ptarray(&p, poly->rings[0], dl); } /*Find the plane of the polygon, the "holes" have to be on the same plane. so we only care about the boudary*/ if(!define_plane(poly->rings[0], &plane)) return LW_FALSE; /*get our point projected on the plane of the polygon*/ project_point_on_plane(&p, &plane, &projp); return lw_dist3d_pt_poly(&p, poly,&plane, &projp, dl); } /** line to line calculation */ int lw_dist3d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS3D *dl) { POINTARRAY *pa1 = line1->points; POINTARRAY *pa2 = line2->points; LWDEBUG(2, "lw_dist3d_line_line is called"); return lw_dist3d_ptarray_ptarray(pa1, pa2, dl); } /** line to polygon calculation */ int lw_dist3d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS3D *dl) { PLANE3D plane; LWDEBUG(2, "lw_dist3d_line_poly is called"); if (dl->mode == DIST_MAX) { return lw_dist3d_ptarray_ptarray(line->points, poly->rings[0], dl); } if(!define_plane(poly->rings[0], &plane)) return LW_FALSE; return lw_dist3d_ptarray_poly(line->points, poly,&plane, dl); } /** polygon to polygon calculation */ int lw_dist3d_poly_poly(LWPOLY *poly1, LWPOLY *poly2, DISTPTS3D *dl) { PLANE3D plane; LWDEBUG(2, "lw_dist3d_poly_poly is called"); if (dl->mode == DIST_MAX) { return lw_dist3d_ptarray_ptarray(poly1->rings[0], poly2->rings[0], dl); } if(!define_plane(poly2->rings[0], &plane)) return LW_FALSE; /*What we do here is to compare the bondary of one polygon with the other polygon and then take the second boudary comparing with the first polygon*/ dl->twisted=1; if(!lw_dist3d_ptarray_poly(poly1->rings[0], poly2,&plane, dl)) return LW_FALSE; if(dl->distance==0.0) /*Just check if the answer already is given*/ return LW_TRUE; if(!define_plane(poly1->rings[0], &plane)) return LW_FALSE; dl->twisted=-1; /*because we swithc the order of geometries we swithch "twisted" to -1 which will give the right order of points in shortest line.*/ return lw_dist3d_ptarray_poly(poly2->rings[0], poly1,&plane, dl); } /** * search all the segments of pointarray to see which one is closest to p * Returns distance between point and pointarray */ int lw_dist3d_pt_ptarray(POINT3DZ *p, POINTARRAY *pa,DISTPTS3D *dl) { int t; POINT3DZ start, end; int twist = dl->twisted; LWDEBUG(2, "lw_dist3d_pt_ptarray is called"); getPoint3dz_p(pa, 0, &start); for (t=1; t<pa->npoints; t++) { dl->twisted=twist; getPoint3dz_p(pa, t, &end); if (!lw_dist3d_pt_seg(p, &start, &end,dl)) return LW_FALSE; if (dl->distance<=dl->tolerance && dl->mode == DIST_MIN) return LW_TRUE; /*just a check if the answer is already given*/ start = end; } return LW_TRUE; } /** If searching for min distance, this one finds the closest point on segment A-B from p. if searching for max distance it just sends p-A and p-B to pt-pt calculation */ int lw_dist3d_pt_seg(POINT3DZ *p, POINT3DZ *A, POINT3DZ *B, DISTPTS3D *dl) { POINT3DZ c; double r; /*if start==end, then use pt distance */ if ( ( A->x == B->x) && (A->y == B->y) && (A->z == B->z) ) { return lw_dist3d_pt_pt(p,A,dl); } r = ( (p->x-A->x) * (B->x-A->x) + (p->y-A->y) * (B->y-A->y) + ( p->z-A->z) * (B->z-A->z) )/( (B->x-A->x)*(B->x-A->x) +(B->y-A->y)*(B->y-A->y)+(B->z-A->z)*(B->z-A->z) ); /*This is for finding the 3Dmaxdistance. the maxdistance have to be between two vertexes, compared to mindistance which can be between tvo vertexes vertex.*/ if (dl->mode == DIST_MAX) { if (r>=0.5) { return lw_dist3d_pt_pt(p,A,dl); } if (r<0.5) { return lw_dist3d_pt_pt(p,B,dl); } } if (r<0) /*If the first vertex A is closest to the point p*/ { return lw_dist3d_pt_pt(p,A,dl); } if (r>1) /*If the second vertex B is closest to the point p*/ { return lw_dist3d_pt_pt(p,B,dl); } /*else if the point p is closer to some point between a and b then we find that point and send it to lw_dist3d_pt_pt*/ c.x=A->x + r * (B->x-A->x); c.y=A->y + r * (B->y-A->y); c.z=A->z + r * (B->z-A->z); return lw_dist3d_pt_pt(p,&c,dl); } /** Compares incomming points and stores the points closest to each other or most far away from each other depending on dl->mode (max or min) */ int lw_dist3d_pt_pt(POINT3DZ *thep1, POINT3DZ *thep2,DISTPTS3D *dl) { double dx = thep2->x - thep1->x; double dy = thep2->y - thep1->y; double dz = thep2->z - thep1->z; double dist = sqrt ( dx*dx + dy*dy + dz*dz); LWDEBUGF(2, "lw_dist3d_pt_pt called (with points: p1.x=%f, p1.y=%f,p1.z=%f,p2.x=%f, p2.y=%f,p2.z=%f)",thep1->x,thep1->y,thep1->z,thep2->x,thep2->y,thep2->z ); if (((dl->distance - dist)*(dl->mode))>0) /*multiplication with mode to handle mindistance (mode=1) and maxdistance (mode = (-1)*/ { dl->distance = dist; if (dl->twisted>0) /*To get the points in right order. twisted is updated between 1 and (-1) every time the order is changed earlier in the chain*/ { dl->p1 = *thep1; dl->p2 = *thep2; } else { dl->p1 = *thep2; dl->p2 = *thep1; } } return LW_TRUE; } /** Finds all combinationes of segments between two pointarrays */ int lw_dist3d_ptarray_ptarray(POINTARRAY *l1, POINTARRAY *l2,DISTPTS3D *dl) { int t,u; POINT3DZ start, end; POINT3DZ start2, end2; int twist = dl->twisted; LWDEBUGF(2, "lw_dist3d_ptarray_ptarray called (points: %d-%d)",l1->npoints, l2->npoints); if (dl->mode == DIST_MAX)/*If we are searching for maxdistance we go straight to point-point calculation since the maxdistance have to be between two vertexes*/ { for (t=0; t<l1->npoints; t++) /*for each segment in L1 */ { getPoint3dz_p(l1, t, &start); for (u=0; u<l2->npoints; u++) /*for each segment in L2 */ { getPoint3dz_p(l2, u, &start2); lw_dist3d_pt_pt(&start,&start2,dl); LWDEBUGF(4, "maxdist_ptarray_ptarray; seg %i * seg %i, dist = %g\n",t,u,dl->distance); LWDEBUGF(3, " seg%d-seg%d dist: %f, mindist: %f", t, u, dl->distance, dl->tolerance); } } } else { getPoint3dz_p(l1, 0, &start); for (t=1; t<l1->npoints; t++) /*for each segment in L1 */ { getPoint3dz_p(l1, t, &end); getPoint3dz_p(l2, 0, &start2); for (u=1; u<l2->npoints; u++) /*for each segment in L2 */ { getPoint3dz_p(l2, u, &end2); dl->twisted=twist; lw_dist3d_seg_seg(&start, &end, &start2, &end2,dl); LWDEBUGF(4, "mindist_ptarray_ptarray; seg %i * seg %i, dist = %g\n",t,u,dl->distance); LWDEBUGF(3, " seg%d-seg%d dist: %f, mindist: %f", t, u, dl->distance, dl->tolerance); if (dl->distance<=dl->tolerance && dl->mode == DIST_MIN) return LW_TRUE; /*just a check if the answer is already given*/ start2 = end2; } start = end; } } return LW_TRUE; } /** Finds the two closest points on two linesegments */ int lw_dist3d_seg_seg(POINT3DZ *s1p1, POINT3DZ *s1p2, POINT3DZ *s2p1, POINT3DZ *s2p2, DISTPTS3D *dl) { VECTOR3D v1, v2, vl; double s1k, s2k; /*two variables representing where on Line 1 (s1k) and where on Line 2 (s2k) a connecting line between the two lines is perpendicular to both lines*/ POINT3DZ p1, p2; double a, b, c, d, e, D; /*s1p1 and s1p2 are the same point */ if ( ( s1p1->x == s1p2->x) && (s1p1->y == s1p2->y) && (s1p1->z == s1p2->y) ) { return lw_dist3d_pt_seg(s1p1,s2p1,s2p2,dl); } /*s2p1 and s2p2 are the same point */ if ( ( s2p1->x == s2p2->x) && (s2p1->y == s2p2->y) && (s2p1->z == s2p2->y) ) { dl->twisted= ((dl->twisted) * (-1)); return lw_dist3d_pt_seg(s2p1,s1p1,s1p2,dl); } /* Here we use algorithm from softsurfer.com that can be found here http://softsurfer.com/Archive/algorithm_0106/algorithm_0106.htm */ if (!get_3dvector_from_points(s1p1, s1p2, &v1)) return LW_FALSE; if (!get_3dvector_from_points(s2p1, s2p2, &v2)) return LW_FALSE; if (!get_3dvector_from_points(s2p1, s1p1, &vl)) return LW_FALSE; a = DOT(v1,v1); b = DOT(v1,v2); c = DOT(v2,v2); d = DOT(v1,vl); e = DOT(v2,vl); D = a*c - b*b; if (D <0.000000001) { /* the lines are almost parallel*/ s1k = 0.0; /*If the lines are paralell we try by using the startpoint of first segment. If that gives a projected point on the second line outside segment 2 it wil be found that s2k is >1 or <0.*/ if(b>c) /* use the largest denominator*/ { s2k=d/b; } else { s2k =e/c; } } else { s1k = (b*e - c*d) / D; s2k = (a*e - b*d) / D; } /* Now we check if the projected closest point on the infinite lines is outside our segments. If so the combinations with start and end points will be tested*/ if(s1k<0.0||s1k>1.0||s2k<0.0||s2k>1.0) { if(s1k<0.0) { if (!lw_dist3d_pt_seg(s1p1, s2p1, s2p2, dl)) { return LW_FALSE; } } if(s1k>1.0) { if (!lw_dist3d_pt_seg(s1p2, s2p1, s2p2, dl)) { return LW_FALSE; } } if(s2k<0.0) { dl->twisted= ((dl->twisted) * (-1)); if (!lw_dist3d_pt_seg(s2p1, s1p1, s1p2, dl)) { return LW_FALSE; } } if(s2k>1.0) { dl->twisted= ((dl->twisted) * (-1)); if (!lw_dist3d_pt_seg(s2p2, s1p1, s1p2, dl)) { return LW_FALSE; } } } else {/*Find the closest point on the edges of both segments*/ p1.x=s1p1->x+s1k*(s1p2->x-s1p1->x); p1.y=s1p1->y+s1k*(s1p2->y-s1p1->y); p1.z=s1p1->z+s1k*(s1p2->z-s1p1->z); p2.x=s2p1->x+s2k*(s2p2->x-s2p1->x); p2.y=s2p1->y+s2k*(s2p2->y-s2p1->y); p2.z=s2p1->z+s2k*(s2p2->z-s2p1->z); if (!lw_dist3d_pt_pt(&p1,&p2,dl))/* Send the closest points to point-point calculation*/ { return LW_FALSE; } } return LW_TRUE; } /** Checking if the point projected on the plane of the polygon actually is inside that polygon. If so the mindistance is between that projected point and our original point. If not we check from original point to the bounadary. If the projected point is inside a hole of the polygon we check the distance to the boudary of that hole. */ int lw_dist3d_pt_poly(POINT3DZ *p, LWPOLY *poly, PLANE3D *plane,POINT3DZ *projp, DISTPTS3D *dl) { int i; LWDEBUG(2, "lw_dist3d_point_poly called"); if(pt_in_ring_3d(projp, poly->rings[0], plane)) { for (i=1; i<poly->nrings; i++) { /* Inside a hole. Distance = pt -> ring */ if ( pt_in_ring_3d(projp, poly->rings[i], plane )) { LWDEBUG(3, " inside an hole"); return lw_dist3d_pt_ptarray(p, poly->rings[i], dl); } } return lw_dist3d_pt_pt(p,projp,dl);/* If the projected point is inside the polygon the shortest distance is between that point and the inputed point*/ } else { return lw_dist3d_pt_ptarray(p, poly->rings[0], dl); /*If the projected point is outside the polygon we search for the closest distance against the boundarry instead*/ } return LW_TRUE; } /** Computes pointarray to polygon distance */ int lw_dist3d_ptarray_poly(POINTARRAY *pa, LWPOLY *poly,PLANE3D *plane, DISTPTS3D *dl) { int i,j,k; double f, s1, s2; VECTOR3D projp1_projp2; POINT3DZ p1, p2,projp1, projp2, intersectionp; getPoint3dz_p(pa, 0, &p1); s1=project_point_on_plane(&p1, plane, &projp1); /*the sign of s1 tells us on which side of the plane the point is. */ lw_dist3d_pt_poly(&p1, poly, plane,&projp1, dl); for (i=1;i<pa->npoints;i++) { int intersects; getPoint3dz_p(pa, i, &p2); s2=project_point_on_plane(&p2, plane, &projp2); lw_dist3d_pt_poly(&p2, poly, plane,&projp2, dl); /*If s1and s2 has different signs that means they are on different sides of the plane of the polygon. That means that the edge between the points crosses the plane and might intersect with the polygon*/ if((s1*s2)<=0) { f=fabs(s1)/(fabs(s1)+fabs(s2)); /*The size of s1 and s2 is the distance from the point to the plane.*/ get_3dvector_from_points(&projp1, &projp2,&projp1_projp2); /*get the point where the line segment crosses the plane*/ intersectionp.x=projp1.x+f*projp1_projp2.x; intersectionp.y=projp1.y+f*projp1_projp2.y; intersectionp.z=projp1.z+f*projp1_projp2.z; intersects = LW_TRUE; /*We set intersects to true until the opposite is proved*/ if(pt_in_ring_3d(&intersectionp, poly->rings[0], plane)) /*Inside outer ring*/ { for (k=1;k<poly->nrings; k++) { /* Inside a hole, so no intersection with the polygon*/ if ( pt_in_ring_3d(&intersectionp, poly->rings[k], plane )) { intersects=LW_FALSE; break; } } if(intersects) { dl->distance=0.0; dl->p1.x=intersectionp.x; dl->p1.y=intersectionp.y; dl->p1.z=intersectionp.z; dl->p2.x=intersectionp.x; dl->p2.y=intersectionp.y; dl->p2.z=intersectionp.z; return LW_TRUE; } } } projp1=projp2; s1=s2; p1=p2; } /*check or pointarray against boundary and inner boundaries of the polygon*/ for (j=0;j<poly->nrings;j++) { lw_dist3d_ptarray_ptarray(pa, poly->rings[j], dl); } return LW_TRUE; } /** Here we define the plane of a polygon (boundary pointarray of a polygon) the plane is stored as a pont in plane (plane.pop) and a normal vector (plane.pv) */ int define_plane(POINTARRAY *pa, PLANE3D *pl) { int i,j, numberofvectors, pointsinslice; POINT3DZ p, p1, p2; double sumx=0; double sumy=0; double sumz=0; double vl; /*vector length*/ VECTOR3D v1, v2, v; if((pa->npoints-1)==3) /*Triangle is special case*/ { pointsinslice=1; } else { pointsinslice=(int) floor((pa->npoints-1)/4); /*divide the pointarray into 4 slices*/ } /*find the avg point*/ for (i=0;i<(pa->npoints-1);i++) { getPoint3dz_p(pa, i, &p); sumx+=p.x; sumy+=p.y; sumz+=p.z; } pl->pop.x=(sumx/(pa->npoints-1)); pl->pop.y=(sumy/(pa->npoints-1)); pl->pop.z=(sumz/(pa->npoints-1)); sumx=0; sumy=0; sumz=0; numberofvectors= floor((pa->npoints-1)/pointsinslice); /*the number of vectors we try can be 3, 4 or 5*/ getPoint3dz_p(pa, 0, &p1); for (j=pointsinslice;j<pa->npoints;j+=pointsinslice) { getPoint3dz_p(pa, j, &p2); if (!get_3dvector_from_points(&(pl->pop), &p1, &v1) || !get_3dvector_from_points(&(pl->pop), &p2, &v2)) return LW_FALSE; /*perpendicular vector is cross product of v1 and v2*/ if (!get_3dcross_product(&v1,&v2, &v)) return LW_FALSE; vl=VECTORLENGTH(v); sumx+=(v.x/vl); sumy+=(v.y/vl); sumz+=(v.z/vl); p1=p2; } pl->pv.x=(sumx/numberofvectors); pl->pv.y=(sumy/numberofvectors); pl->pv.z=(sumz/numberofvectors); return 1; } /** Finds a point on a plane from where the original point is perpendicular to the plane */ double project_point_on_plane(POINT3DZ *p, PLANE3D *pl, POINT3DZ *p0) { /*In our plane definition we have a point on the plane and a normal vektor (pl.pv), perpendicular to the plane this vector will be paralell to the line between our inputted point above the plane and the point we are searching for on the plane. So, we already have a direction from p to find p0, but we don't know the distance. */ VECTOR3D v1; double f; if (!get_3dvector_from_points(&(pl->pop), p, &v1)) return LW_FALSE; f=-(DOT(pl->pv,v1)/DOT(pl->pv,pl->pv)); p0->x=p->x+pl->pv.x*f; p0->y=p->y+pl->pv.y*f; p0->z=p->z+pl->pv.z*f; return f; } /** * pt_in_ring_3d(): crossing number test for a point in a polygon * input: p = a point, * pa = vertex points of a ring V[n+1] with V[n]=V[0] * plane=the plane that the vertex points are lying on * returns: 0 = outside, 1 = inside * * Our polygons have first and last point the same, * * The difference in 3D variant is that we exclude the dimension that faces the plane least. * That is the dimension with the highest number in pv */ int pt_in_ring_3d(const POINT3DZ *p, const POINTARRAY *ring,PLANE3D *plane) { int cn = 0; /* the crossing number counter */ int i; POINT3DZ v1, v2; POINT3DZ first, last; getPoint3dz_p(ring, 0, &first); getPoint3dz_p(ring, ring->npoints-1, &last); if ( memcmp(&first, &last, sizeof(POINT3DZ)) ) { lwerror("pt_in_ring_3d: V[n] != V[0] (%g %g %g!= %g %g %g)", first.x, first.y, first.z, last.x, last.y, last.z); return LW_FALSE; } LWDEBUGF(2, "pt_in_ring_3d called with point: %g %g %g", p->x, p->y, p->z); /* printPA(ring); */ /* loop through all edges of the polygon */ getPoint3dz_p(ring, 0, &v1); if(fabs(plane->pv.z)>=fabs(plane->pv.x)&&fabs(plane->pv.z)>=fabs(plane->pv.y)) /*If the z vector of the normal vector to the plane is larger than x and y vector we project the ring to the xy-plane*/ { for (i=0; i<ring->npoints-1; i++) { double vt; getPoint3dz_p(ring, i+1, &v2); /* edge from vertex i to vertex i+1 */ if ( /* an upward crossing */ ((v1.y <= p->y) && (v2.y > p->y)) /* a downward crossing */ || ((v1.y > p->y) && (v2.y <= p->y)) ) { vt = (double)(p->y - v1.y) / (v2.y - v1.y); /* P.x <intersect */ if (p->x < v1.x + vt * (v2.x - v1.x)) { /* a valid crossing of y=p.y right of p.x */ ++cn; } } v1 = v2; } } else if(fabs(plane->pv.y)>=fabs(plane->pv.x)&&fabs(plane->pv.y)>=fabs(plane->pv.z)) /*If the y vector of the normal vector to the plane is larger than x and z vector we project the ring to the xz-plane*/ { for (i=0; i<ring->npoints-1; i++) { double vt; getPoint3dz_p(ring, i+1, &v2); /* edge from vertex i to vertex i+1 */ if ( /* an upward crossing */ ((v1.z <= p->z) && (v2.z > p->z)) /* a downward crossing */ || ((v1.z > p->z) && (v2.z <= p->z)) ) { vt = (double)(p->z - v1.z) / (v2.z - v1.z); /* P.x <intersect */ if (p->x < v1.x + vt * (v2.x - v1.x)) { /* a valid crossing of y=p.y right of p.x */ ++cn; } } v1 = v2; } } else /*Hopefully we only have the cases where x part of the normal vector is largest left*/ { for (i=0; i<ring->npoints-1; i++) { double vt; getPoint3dz_p(ring, i+1, &v2); /* edge from vertex i to vertex i+1 */ if ( /* an upward crossing */ ((v1.z <= p->z) && (v2.z > p->z)) /* a downward crossing */ || ((v1.z > p->z) && (v2.z <= p->z)) ) { vt = (double)(p->z - v1.z) / (v2.z - v1.z); /* P.x <intersect */ if (p->y < v1.y + vt * (v2.y - v1.y)) { /* a valid crossing of y=p.y right of p.x */ ++cn; } } v1 = v2; } } LWDEBUGF(3, "pt_in_ring_3d returning %d", cn&1); return (cn&1); /* 0 if even (out), and 1 if odd (in) */ } /*------------------------------------------------------------------------------------------------------------ End of Brute force functions --------------------------------------------------------------------------------------------------------------*/ �����������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeodetic_tree.h�������������������������������������������������0000644�0000000�0000000�00000001660�12314235664�021070� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� #ifndef _LWGEODETIC_TREE_H #define _LWGEODETIC_TREE_H 1 #include "lwgeodetic.h" #define CIRC_NODE_SIZE 8 /** * Note that p1 and p2 are pointers into an independent POINTARRAY, do not free them. */ typedef struct circ_node { GEOGRAPHIC_POINT center; double radius; int num_nodes; struct circ_node** nodes; int edge_num; int geom_type; POINT2D pt_outside; POINT2D* p1; POINT2D* p2; } CIRC_NODE; void circ_tree_print(const CIRC_NODE* node, int depth); CIRC_NODE* circ_tree_new(const POINTARRAY* pa); void circ_tree_free(CIRC_NODE* node); int circ_tree_contains_point(const CIRC_NODE* node, const POINT2D* pt, const POINT2D* pt_outside, int* on_boundary); double circ_tree_distance_tree(const CIRC_NODE* n1, const CIRC_NODE* n2, const SPHEROID *spheroid, double threshold); CIRC_NODE* lwgeom_calculate_circ_tree(const LWGEOM* lwgeom); int circ_tree_get_point(const CIRC_NODE* node, POINT2D* pt); #endif /* _LWGEODETIC_TREE_H */��������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwmsurface.c������������������������������������������������������0000644�0000000�0000000�00000001041�11722777314�020064� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_geos_clean.c�����������������������������������������������0000644�0000000�0000000�00000060417�12165521712�021370� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_geos.c 5258 2010-02-17 21:02:49Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2009-2010 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * ST_MakeValid * * Attempts to make an invalid geometries valid w/out losing * points. * * Polygons may become lines or points or a collection of * polygons lines and points (collapsed ring cases). * * Author: Sandro Santilli <strk@keybit.net> * * Work done for Faunalia (http://www.faunalia.it) with fundings * from Regione Toscana - Sistema Informativo per il Governo * del Territorio e dell'Ambiente (RT-SIGTA). * * Thanks to Dr. Horst Duester for previous work on a plpgsql version * of the cleanup logic [1] * * Thanks to Andrea Peri for recommandations on constraints. * * [1] http://www.sogis1.so.ch/sogis/dl/postgis/cleanGeometry.sql * * **********************************************************************/ #include "liblwgeom.h" #include "lwgeom_geos.h" #include "liblwgeom_internal.h" #include "lwgeom_log.h" #include <string.h> #include <stdlib.h> #include <assert.h> /* #define POSTGIS_DEBUG_LEVEL 4 */ #undef LWGEOM_PROFILE_MAKEVALID /* * Return Nth vertex in GEOSGeometry as a POINT. * May return NULL if the geometry has NO vertexex. */ GEOSGeometry* LWGEOM_GEOS_getPointN(const GEOSGeometry*, uint32_t); GEOSGeometry* LWGEOM_GEOS_getPointN(const GEOSGeometry* g_in, uint32_t n) { uint32_t dims; const GEOSCoordSequence* seq_in; GEOSCoordSeq seq_out; double val; uint32_t sz; int gn; GEOSGeometry* ret; switch ( GEOSGeomTypeId(g_in) ) { case GEOS_MULTIPOINT: case GEOS_MULTILINESTRING: case GEOS_MULTIPOLYGON: case GEOS_GEOMETRYCOLLECTION: { for (gn=0; gn<GEOSGetNumGeometries(g_in); ++gn) { const GEOSGeometry* g = GEOSGetGeometryN(g_in, gn); ret = LWGEOM_GEOS_getPointN(g,n); if ( ret ) return ret; } break; } case GEOS_POLYGON: { ret = LWGEOM_GEOS_getPointN(GEOSGetExteriorRing(g_in), n); if ( ret ) return ret; for (gn=0; gn<GEOSGetNumInteriorRings(g_in); ++gn) { const GEOSGeometry* g = GEOSGetInteriorRingN(g_in, gn); ret = LWGEOM_GEOS_getPointN(g, n); if ( ret ) return ret; } break; } case GEOS_POINT: case GEOS_LINESTRING: case GEOS_LINEARRING: break; } seq_in = GEOSGeom_getCoordSeq(g_in); if ( ! seq_in ) return NULL; if ( ! GEOSCoordSeq_getSize(seq_in, &sz) ) return NULL; if ( ! sz ) return NULL; if ( ! GEOSCoordSeq_getDimensions(seq_in, &dims) ) return NULL; seq_out = GEOSCoordSeq_create(1, dims); if ( ! seq_out ) return NULL; if ( ! GEOSCoordSeq_getX(seq_in, n, &val) ) return NULL; if ( ! GEOSCoordSeq_setX(seq_out, n, val) ) return NULL; if ( ! GEOSCoordSeq_getY(seq_in, n, &val) ) return NULL; if ( ! GEOSCoordSeq_setY(seq_out, n, val) ) return NULL; if ( dims > 2 ) { if ( ! GEOSCoordSeq_getZ(seq_in, n, &val) ) return NULL; if ( ! GEOSCoordSeq_setZ(seq_out, n, val) ) return NULL; } return GEOSGeom_createPoint(seq_out); } LWGEOM * lwcollection_make_geos_friendly(LWCOLLECTION *g); LWGEOM * lwline_make_geos_friendly(LWLINE *line); LWGEOM * lwpoly_make_geos_friendly(LWPOLY *poly); POINTARRAY* ring_make_geos_friendly(POINTARRAY* ring); /* * Ensure the geometry is "structurally" valid * (enough for GEOS to accept it) * May return the input untouched (if already valid). * May return geometries of lower dimension (on collapses) */ static LWGEOM * lwgeom_make_geos_friendly(LWGEOM *geom) { LWDEBUGF(2, "lwgeom_make_geos_friendly enter (type %d)", geom->type); switch (geom->type) { case POINTTYPE: case MULTIPOINTTYPE: /* a point is always valid */ return geom; break; case LINETYPE: /* lines need at least 2 points */ return lwline_make_geos_friendly((LWLINE *)geom); break; case POLYGONTYPE: /* polygons need all rings closed and with npoints > 3 */ return lwpoly_make_geos_friendly((LWPOLY *)geom); break; case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return lwcollection_make_geos_friendly((LWCOLLECTION *)geom); break; case CIRCSTRINGTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTISURFACETYPE: case MULTICURVETYPE: default: lwerror("lwgeom_make_geos_friendly: unsupported input geometry type: %s (%d)", lwtype_name(geom->type), geom->type); break; } return 0; } /* * Close the point array, if not already closed in 2d. * Returns the input if already closed in 2d, or a newly * constructed POINTARRAY. * TODO: move in ptarray.c */ POINTARRAY* ptarray_close2d(POINTARRAY* ring); POINTARRAY* ptarray_close2d(POINTARRAY* ring) { POINTARRAY* newring; /* close the ring if not already closed (2d only) */ if ( ! ptarray_is_closed_2d(ring) ) { /* close it up */ newring = ptarray_addPoint(ring, getPoint_internal(ring, 0), FLAGS_NDIMS(ring->flags), ring->npoints); ring = newring; } return ring; } /* May return the same input or a new one (never zero) */ POINTARRAY* ring_make_geos_friendly(POINTARRAY* ring) { POINTARRAY* closedring; /* close the ring if not already closed (2d only) */ closedring = ptarray_close2d(ring); if (closedring != ring ) { ptarray_free(ring); /* should we do this ? */ ring = closedring; } /* return 0 for collapsed ring (after closeup) */ while ( ring->npoints < 4 ) { LWDEBUGF(4, "ring has %d points, adding another", ring->npoints); /* let's add another... */ ring = ptarray_addPoint(ring, getPoint_internal(ring, 0), FLAGS_NDIMS(ring->flags), ring->npoints); } return ring; } /* Make sure all rings are closed and have > 3 points. * May return the input untouched. */ LWGEOM * lwpoly_make_geos_friendly(LWPOLY *poly) { LWGEOM* ret; POINTARRAY **new_rings; int i; /* If the polygon has no rings there's nothing to do */ if ( ! poly->nrings ) return (LWGEOM*)poly; /* Allocate enough pointers for all rings */ new_rings = lwalloc(sizeof(POINTARRAY*)*poly->nrings); /* All rings must be closed and have > 3 points */ for (i=0; i<poly->nrings; i++) { POINTARRAY* ring_in = poly->rings[i]; POINTARRAY* ring_out = ring_make_geos_friendly(ring_in); if ( ring_in != ring_out ) { LWDEBUGF(3, "lwpoly_make_geos_friendly: ring %d cleaned, now has %d points", i, ring_out->npoints); /* this may come right from * the binary representation lands */ /*ptarray_free(ring_in); */ } else { LWDEBUGF(3, "lwpoly_make_geos_friendly: ring %d untouched", i); } assert ( ring_out ); new_rings[i] = ring_out; } lwfree(poly->rings); poly->rings = new_rings; ret = (LWGEOM*)poly; return ret; } /* Need NO or >1 points. Duplicate first if only one. */ LWGEOM * lwline_make_geos_friendly(LWLINE *line) { LWGEOM *ret; if (line->points->npoints == 1) /* 0 is fine, 2 is fine */ { #if 1 /* Duplicate point */ line->points = ptarray_addPoint(line->points, getPoint_internal(line->points, 0), FLAGS_NDIMS(line->points->flags), line->points->npoints); ret = (LWGEOM*)line; #else /* Turn into a point */ ret = (LWGEOM*)lwpoint_construct(line->srid, 0, line->points); #endif return ret; } else { return (LWGEOM*)line; /* return lwline_clone(line); */ } } LWGEOM * lwcollection_make_geos_friendly(LWCOLLECTION *g) { LWGEOM **new_geoms; uint32_t i, new_ngeoms=0; LWCOLLECTION *ret; /* enough space for all components */ new_geoms = lwalloc(sizeof(LWGEOM *)*g->ngeoms); ret = lwalloc(sizeof(LWCOLLECTION)); memcpy(ret, g, sizeof(LWCOLLECTION)); ret->maxgeoms = g->ngeoms; for (i=0; i<g->ngeoms; i++) { LWGEOM* newg = lwgeom_make_geos_friendly(g->geoms[i]); if ( newg ) new_geoms[new_ngeoms++] = newg; } ret->bbox = NULL; /* recompute later... */ ret->ngeoms = new_ngeoms; if ( new_ngeoms ) { ret->geoms = new_geoms; } else { free(new_geoms); ret->geoms = NULL; ret->maxgeoms = 0; } return (LWGEOM*)ret; } /* * Fully node given linework */ static GEOSGeometry* LWGEOM_GEOS_nodeLines(const GEOSGeometry* lines) { GEOSGeometry* noded; GEOSGeometry* point; /* * Union with first geometry point, obtaining full noding * and dissolving of duplicated repeated points * * TODO: substitute this with UnaryUnion? */ point = LWGEOM_GEOS_getPointN(lines, 0); if ( ! point ) return NULL; LWDEBUGF(3, "Boundary point: %s", lwgeom_to_ewkt(GEOS2LWGEOM(point, 0))); noded = GEOSUnion(lines, point); if ( NULL == noded ) { GEOSGeom_destroy(point); return NULL; } GEOSGeom_destroy(point); LWDEBUGF(3, "LWGEOM_GEOS_nodeLines: in[%s] out[%s]", lwgeom_to_ewkt(GEOS2LWGEOM(lines, 0)), lwgeom_to_ewkt(GEOS2LWGEOM(noded, 0))); return noded; } #if POSTGIS_GEOS_VERSION >= 33 /* * We expect initGEOS being called already. * Will return NULL on error (expect error handler being called by then) * */ static GEOSGeometry* LWGEOM_GEOS_makeValidPolygon(const GEOSGeometry* gin) { GEOSGeom gout; GEOSGeom geos_bound; GEOSGeom geos_cut_edges, geos_area, collapse_points; GEOSGeometry *vgeoms[3]; /* One for area, one for cut-edges */ unsigned int nvgeoms=0; assert (GEOSGeomTypeId(gin) == GEOS_POLYGON || GEOSGeomTypeId(gin) == GEOS_MULTIPOLYGON); geos_bound = GEOSBoundary(gin); if ( NULL == geos_bound ) { return NULL; } LWDEBUGF(3, "Boundaries: %s", lwgeom_to_ewkt(GEOS2LWGEOM(geos_bound, 0))); /* Use noded boundaries as initial "cut" edges */ #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: noding lines"); #endif geos_cut_edges = LWGEOM_GEOS_nodeLines(geos_bound); if ( NULL == geos_cut_edges ) { GEOSGeom_destroy(geos_bound); lwnotice("LWGEOM_GEOS_nodeLines(): %s", lwgeom_geos_errmsg); return NULL; } /* NOTE: the noding process may drop lines collapsing to points. * We want to retrive any of those */ { GEOSGeometry* pi; GEOSGeometry* po; #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: extracting unique points from bounds"); #endif pi = GEOSGeom_extractUniquePoints(geos_bound); if ( NULL == pi ) { GEOSGeom_destroy(geos_bound); lwnotice("GEOSGeom_extractUniquePoints(): %s", lwgeom_geos_errmsg); return NULL; } LWDEBUGF(3, "Boundaries input points %s", lwgeom_to_ewkt(GEOS2LWGEOM(pi, 0))); #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: extracting unique points from cut_edges"); #endif po = GEOSGeom_extractUniquePoints(geos_cut_edges); if ( NULL == po ) { GEOSGeom_destroy(geos_bound); GEOSGeom_destroy(pi); lwnotice("GEOSGeom_extractUniquePoints(): %s", lwgeom_geos_errmsg); return NULL; } LWDEBUGF(3, "Boundaries output points %s", lwgeom_to_ewkt(GEOS2LWGEOM(po, 0))); #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: find collapse points"); #endif collapse_points = GEOSDifference(pi, po); if ( NULL == collapse_points ) { GEOSGeom_destroy(geos_bound); GEOSGeom_destroy(pi); GEOSGeom_destroy(po); lwnotice("GEOSDifference(): %s", lwgeom_geos_errmsg); return NULL; } LWDEBUGF(3, "Collapse points: %s", lwgeom_to_ewkt(GEOS2LWGEOM(collapse_points, 0))); #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: cleanup(1)"); #endif GEOSGeom_destroy(pi); GEOSGeom_destroy(po); } GEOSGeom_destroy(geos_bound); LWDEBUGF(3, "Noded Boundaries: %s", lwgeom_to_ewkt(GEOS2LWGEOM(geos_cut_edges, 0))); /* And use an empty geometry as initial "area" */ geos_area = GEOSGeom_createEmptyPolygon(); if ( ! geos_area ) { lwnotice("GEOSGeom_createEmptyPolygon(): %s", lwgeom_geos_errmsg); GEOSGeom_destroy(geos_cut_edges); return NULL; } /* * See if an area can be build with the remaining edges * and if it can, symdifference with the original area. * Iterate this until no more polygons can be created * with left-over edges. */ while (GEOSGetNumGeometries(geos_cut_edges)) { GEOSGeometry* new_area=0; GEOSGeometry* new_area_bound=0; GEOSGeometry* symdif=0; GEOSGeometry* new_cut_edges=0; #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: building area from %d edges", GEOSGetNumGeometries(geos_cut_edges)); #endif /* * ASSUMPTION: cut_edges should already be fully noded */ new_area = LWGEOM_GEOS_buildArea(geos_cut_edges); if ( ! new_area ) /* must be an exception */ { GEOSGeom_destroy(geos_cut_edges); GEOSGeom_destroy(geos_area); lwnotice("LWGEOM_GEOS_buildArea() threw an error: %s", lwgeom_geos_errmsg); return NULL; } if ( GEOSisEmpty(new_area) ) { /* no more rings can be build with thes edges */ GEOSGeom_destroy(new_area); break; } /* * We succeeded in building a ring ! */ #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: ring built with %d cut edges, saving boundaries", GEOSGetNumGeometries(geos_cut_edges)); #endif /* * Save the new ring boundaries first (to compute * further cut edges later) */ new_area_bound = GEOSBoundary(new_area); if ( ! new_area_bound ) { /* We did check for empty area already so * this must be some other error */ lwnotice("GEOSBoundary('%s') threw an error: %s", lwgeom_to_ewkt(GEOS2LWGEOM(new_area, 0)), lwgeom_geos_errmsg); GEOSGeom_destroy(new_area); GEOSGeom_destroy(geos_area); return NULL; } #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: running SymDifference with new area"); #endif /* * Now symdif new and old area */ symdif = GEOSSymDifference(geos_area, new_area); if ( ! symdif ) /* must be an exception */ { GEOSGeom_destroy(geos_cut_edges); GEOSGeom_destroy(new_area); GEOSGeom_destroy(new_area_bound); GEOSGeom_destroy(geos_area); lwnotice("GEOSSymDifference() threw an error: %s", lwgeom_geos_errmsg); return NULL; } GEOSGeom_destroy(geos_area); GEOSGeom_destroy(new_area); geos_area = symdif; symdif = 0; /* * Now let's re-set geos_cut_edges with what's left * from the original boundary. * ASSUMPTION: only the previous cut-edges can be * left, so we don't need to reconsider * the whole original boundaries * * NOTE: this is an expensive operation. * */ #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: computing new cut_edges (GEOSDifference)"); #endif new_cut_edges = GEOSDifference(geos_cut_edges, new_area_bound); GEOSGeom_destroy(new_area_bound); if ( ! new_cut_edges ) /* an exception ? */ { /* cleanup and throw */ GEOSGeom_destroy(geos_cut_edges); GEOSGeom_destroy(geos_area); /* TODO: Shouldn't this be an lwerror ? */ lwnotice("GEOSDifference() threw an error: %s", lwgeom_geos_errmsg); return NULL; } GEOSGeom_destroy(geos_cut_edges); geos_cut_edges = new_cut_edges; } #ifdef LWGEOM_PROFILE_MAKEVALID lwnotice("ST_MakeValid: final checks"); #endif if ( ! GEOSisEmpty(geos_area) ) { vgeoms[nvgeoms++] = geos_area; } else { GEOSGeom_destroy(geos_area); } if ( ! GEOSisEmpty(geos_cut_edges) ) { vgeoms[nvgeoms++] = geos_cut_edges; } else { GEOSGeom_destroy(geos_cut_edges); } if ( ! GEOSisEmpty(collapse_points) ) { vgeoms[nvgeoms++] = collapse_points; } else { GEOSGeom_destroy(collapse_points); } if ( 1 == nvgeoms ) { /* Return cut edges */ gout = vgeoms[0]; } else { /* Collect areas and lines (if any line) */ gout = GEOSGeom_createCollection(GEOS_GEOMETRYCOLLECTION, vgeoms, nvgeoms); if ( ! gout ) /* an exception again */ { /* cleanup and throw */ /* TODO: Shouldn't this be an lwerror ? */ lwnotice("GEOSGeom_createCollection() threw an error: %s", lwgeom_geos_errmsg); /* TODO: cleanup! */ return NULL; } } return gout; } static GEOSGeometry* LWGEOM_GEOS_makeValidLine(const GEOSGeometry* gin) { GEOSGeometry* noded; noded = LWGEOM_GEOS_nodeLines(gin); return noded; } static GEOSGeometry* LWGEOM_GEOS_makeValidMultiLine(const GEOSGeometry* gin) { GEOSGeometry** lines; GEOSGeometry** points; GEOSGeometry* mline_out=0; GEOSGeometry* mpoint_out=0; GEOSGeometry* gout=0; uint32_t nlines=0, nlines_alloc; uint32_t npoints=0; uint32_t ngeoms=0, nsubgeoms; uint32_t i, j; ngeoms = GEOSGetNumGeometries(gin); nlines_alloc = ngeoms; lines = lwalloc(sizeof(GEOSGeometry*)*nlines_alloc); points = lwalloc(sizeof(GEOSGeometry*)*ngeoms); for (i=0; i<ngeoms; ++i) { const GEOSGeometry* g = GEOSGetGeometryN(gin, i); GEOSGeometry* vg; vg = LWGEOM_GEOS_makeValidLine(g); if ( GEOSisEmpty(vg) ) { /* we don't care about this one */ GEOSGeom_destroy(vg); } if ( GEOSGeomTypeId(vg) == GEOS_POINT ) { points[npoints++] = vg; } else if ( GEOSGeomTypeId(vg) == GEOS_LINESTRING ) { lines[nlines++] = vg; } else if ( GEOSGeomTypeId(vg) == GEOS_MULTILINESTRING ) { nsubgeoms=GEOSGetNumGeometries(vg); nlines_alloc += nsubgeoms; lines = lwrealloc(lines, sizeof(GEOSGeometry*)*nlines_alloc); for (j=0; j<nsubgeoms; ++j) { const GEOSGeometry* gc = GEOSGetGeometryN(vg, j); /* NOTE: ownership of the cloned geoms will be * taken by final collection */ lines[nlines++] = GEOSGeom_clone(gc); } } else { /* NOTE: return from GEOSGeomType will leak * but we really don't expect this to happen */ lwerror("unexpected geom type returned " "by LWGEOM_GEOS_makeValid: %s", GEOSGeomType(vg)); } } if ( npoints ) { if ( npoints > 1 ) { mpoint_out = GEOSGeom_createCollection(GEOS_MULTIPOINT, points, npoints); } else { mpoint_out = points[0]; } } if ( nlines ) { if ( nlines > 1 ) { mline_out = GEOSGeom_createCollection( GEOS_MULTILINESTRING, lines, nlines); } else { mline_out = lines[0]; } } lwfree(lines); if ( mline_out && mpoint_out ) { points[0] = mline_out; points[1] = mpoint_out; gout = GEOSGeom_createCollection(GEOS_GEOMETRYCOLLECTION, points, 2); } else if ( mline_out ) { gout = mline_out; } else if ( mpoint_out ) { gout = mpoint_out; } lwfree(points); return gout; } static GEOSGeometry* LWGEOM_GEOS_makeValid(const GEOSGeometry*); /* * We expect initGEOS being called already. * Will return NULL on error (expect error handler being called by then) */ static GEOSGeometry* LWGEOM_GEOS_makeValidCollection(const GEOSGeometry* gin) { int nvgeoms; GEOSGeometry **vgeoms; GEOSGeom gout; unsigned int i; nvgeoms = GEOSGetNumGeometries(gin); if ( nvgeoms == -1 ) { lwerror("GEOSGetNumGeometries: %s", lwgeom_geos_errmsg); return 0; } vgeoms = lwalloc( sizeof(GEOSGeometry*) * nvgeoms ); if ( ! vgeoms ) { lwerror("LWGEOM_GEOS_makeValidCollection: out of memory"); return 0; } for ( i=0; i<nvgeoms; ++i ) { vgeoms[i] = LWGEOM_GEOS_makeValid( GEOSGetGeometryN(gin, i) ); if ( ! vgeoms[i] ) { while (i--) GEOSGeom_destroy(vgeoms[i]); lwfree(vgeoms); /* we expect lwerror being called already by makeValid */ return NULL; } } /* Collect areas and lines (if any line) */ gout = GEOSGeom_createCollection(GEOS_GEOMETRYCOLLECTION, vgeoms, nvgeoms); lwfree(vgeoms); if ( ! gout ) /* an exception again */ { /* cleanup and throw */ for ( i=0; i<nvgeoms; ++i ) GEOSGeom_destroy(vgeoms[i]); lwerror("GEOSGeom_createCollection() threw an error: %s", lwgeom_geos_errmsg); return NULL; } return gout; } static GEOSGeometry* LWGEOM_GEOS_makeValid(const GEOSGeometry* gin) { GEOSGeometry* gout; char ret_char; /* * Step 2: return what we got so far if already valid */ ret_char = GEOSisValid(gin); if ( ret_char == 2 ) { /* I don't think should ever happen */ lwerror("GEOSisValid(): %s", lwgeom_geos_errmsg); return NULL; } else if ( ret_char ) { LWDEBUGF(3, "Geometry [%s] is valid. ", lwgeom_to_ewkt(GEOS2LWGEOM(gin, 0))); /* It's valid at this step, return what we have */ return GEOSGeom_clone(gin); } LWDEBUGF(3, "Geometry [%s] is still not valid: %s. " "Will try to clean up further.", lwgeom_to_ewkt(GEOS2LWGEOM(gin, 0)), lwgeom_geos_errmsg); /* * Step 3 : make what we got valid */ switch (GEOSGeomTypeId(gin)) { case GEOS_MULTIPOINT: case GEOS_POINT: /* points are always valid, but we might have invalid ordinate values */ lwnotice("PUNTUAL geometry resulted invalid to GEOS -- dunno how to clean that up"); return NULL; break; case GEOS_LINESTRING: gout = LWGEOM_GEOS_makeValidLine(gin); if ( ! gout ) /* an exception or something */ { /* cleanup and throw */ lwerror("%s", lwgeom_geos_errmsg); return NULL; } break; /* we've done */ case GEOS_MULTILINESTRING: gout = LWGEOM_GEOS_makeValidMultiLine(gin); if ( ! gout ) /* an exception or something */ { /* cleanup and throw */ lwerror("%s", lwgeom_geos_errmsg); return NULL; } break; /* we've done */ case GEOS_POLYGON: case GEOS_MULTIPOLYGON: { gout = LWGEOM_GEOS_makeValidPolygon(gin); if ( ! gout ) /* an exception or something */ { /* cleanup and throw */ lwerror("%s", lwgeom_geos_errmsg); return NULL; } break; /* we've done */ } case GEOS_GEOMETRYCOLLECTION: { gout = LWGEOM_GEOS_makeValidCollection(gin); if ( ! gout ) /* an exception or something */ { /* cleanup and throw */ lwerror("%s", lwgeom_geos_errmsg); return NULL; } break; /* we've done */ } default: { char* typname = GEOSGeomType(gin); lwnotice("ST_MakeValid: doesn't support geometry type: %s", typname); GEOSFree(typname); return NULL; break; } } /* * Now check if every point of input is also found * in output, or abort by returning NULL * * Input geometry was lwgeom_in */ { const int paranoia = 2; /* TODO: check if the result is valid */ if (paranoia) { int loss; GEOSGeometry *pi, *po, *pd; /* TODO: handle some errors here... * Lack of exceptions is annoying indeed, * I'm getting old --strk; */ pi = GEOSGeom_extractUniquePoints(gin); po = GEOSGeom_extractUniquePoints(gout); pd = GEOSDifference(pi, po); /* input points - output points */ GEOSGeom_destroy(pi); GEOSGeom_destroy(po); loss = !GEOSisEmpty(pd); GEOSGeom_destroy(pd); if ( loss ) { lwnotice("Vertices lost in LWGEOM_GEOS_makeValid"); /* return NULL */ } } } return gout; } /* Exported. Uses GEOS internally */ LWGEOM* lwgeom_make_valid(LWGEOM* lwgeom_in) { int is3d; GEOSGeom geosgeom; GEOSGeometry* geosout; LWGEOM *lwgeom_out, *lwgeom_tmp; is3d = FLAGS_GET_Z(lwgeom_in->flags); /* * Step 1 : try to convert to GEOS, if impossible, clean that up first * otherwise (adding only duplicates of existing points) */ initGEOS(lwgeom_geos_error, lwgeom_geos_error); lwgeom_out = lwgeom_in; geosgeom = LWGEOM2GEOS(lwgeom_out); if ( ! geosgeom ) { LWDEBUGF(4, "Original geom can't be converted to GEOS (%s)" " - will try cleaning that up first", lwgeom_geos_errmsg); lwgeom_out = lwgeom_make_geos_friendly(lwgeom_out); if ( ! lwgeom_out ) { lwerror("Could not make a valid geometry out of input"); } /* try again as we did cleanup now */ geosgeom = LWGEOM2GEOS(lwgeom_out); if ( ! geosgeom ) { lwerror("Couldn't convert POSTGIS geom to GEOS: %s", lwgeom_geos_errmsg); return NULL; } } else { LWDEBUG(4, "original geom converted to GEOS"); lwgeom_out = lwgeom_in; } geosout = LWGEOM_GEOS_makeValid(geosgeom); GEOSGeom_destroy(geosgeom); if ( ! geosout ) { return NULL; } lwgeom_out = GEOS2LWGEOM(geosout, is3d); GEOSGeom_destroy(geosout); if ( lwgeom_is_collection(lwgeom_in) && ! lwgeom_is_collection(lwgeom_out) ) { LWDEBUG(3, "lwgeom_make_valid: forcing multi"); lwgeom_tmp = lwgeom_as_multi(lwgeom_out); lwfree(lwgeom_out); /* note: only frees the wrapper, not the content */ lwgeom_out = lwgeom_tmp; } lwgeom_out->srid = lwgeom_in->srid; return lwgeom_out; } #endif /* POSTGIS_GEOS_VERSION >= 33 */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwpsurface.c������������������������������������������������������0000644�0000000�0000000�00000010173�11722777314�020075� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" LWPSURFACE* lwpsurface_add_lwpoly(LWPSURFACE *mobj, const LWPOLY *obj) { return (LWPSURFACE*)lwcollection_add_lwgeom((LWCOLLECTION*)mobj, (LWGEOM*)obj); } void lwpsurface_free(LWPSURFACE *psurf) { int i; if ( ! psurf ) return; if ( psurf->bbox ) lwfree(psurf->bbox); for ( i = 0; i < psurf->ngeoms; i++ ) if ( psurf->geoms && psurf->geoms[i] ) lwpoly_free(psurf->geoms[i]); if ( psurf->geoms ) lwfree(psurf->geoms); lwfree(psurf); } void printLWPSURFACE(LWPSURFACE *psurf) { int i, j; LWPOLY *patch; if (psurf->type != POLYHEDRALSURFACETYPE) lwerror("printLWPSURFACE called with something else than a POLYHEDRALSURFACE"); lwnotice("LWPSURFACE {"); lwnotice(" ndims = %i", (int)FLAGS_NDIMS(psurf->flags)); lwnotice(" SRID = %i", (int)psurf->srid); lwnotice(" ngeoms = %i", (int)psurf->ngeoms); for (i=0; i<psurf->ngeoms; i++) { patch = (LWPOLY *) psurf->geoms[i]; for (j=0; j<patch->nrings; j++) { lwnotice(" RING # %i :",j); printPA(patch->rings[j]); } } lwnotice("}"); } /* * TODO rewrite all this stuff to be based on a truly topological model */ struct struct_psurface_arcs { double ax, ay, az; double bx, by, bz; int cnt, face; }; typedef struct struct_psurface_arcs *psurface_arcs; /* We supposed that the geometry is valid we could have wrong result if not */ int lwpsurface_is_closed(const LWPSURFACE *psurface) { int i, j, k; int narcs, carc; int found; psurface_arcs arcs; POINT4D pa, pb; LWPOLY *patch; /* If surface is not 3D, it's can't be closed */ if (!FLAGS_GET_Z(psurface->flags)) return 0; /* If surface is less than 4 faces hard to be closed too */ if (psurface->ngeoms < 4) return 0; /* Max theorical arcs number if no one is shared ... */ for (i=0, narcs=0 ; i < psurface->ngeoms ; i++) { patch = (LWPOLY *) psurface->geoms[i]; narcs += patch->rings[0]->npoints - 1; } arcs = lwalloc(sizeof(struct struct_psurface_arcs) * narcs); for (i=0, carc=0; i < psurface->ngeoms ; i++) { patch = (LWPOLY *) psurface->geoms[i]; for (j=0; j < patch->rings[0]->npoints - 1; j++) { getPoint4d_p(patch->rings[0], j, &pa); getPoint4d_p(patch->rings[0], j+1, &pb); /* remove redundant points if any */ if (pa.x == pb.x && pa.y == pb.y && pa.z == pb.z) continue; /* Make sure to order the 'lower' point first */ if ( (pa.x > pb.x) || (pa.x == pb.x && pa.y > pb.y) || (pa.x == pb.x && pa.y == pb.y && pa.z > pb.z) ) { pa = pb; getPoint4d_p(patch->rings[0], j, &pb); } for (found=0, k=0; k < carc ; k++) { if ( ( arcs[k].ax == pa.x && arcs[k].ay == pa.y && arcs[k].az == pa.z && arcs[k].bx == pb.x && arcs[k].by == pb.y && arcs[k].bz == pb.z && arcs[k].face != i) ) { arcs[k].cnt++; found = 1; /* Look like an invalid PolyhedralSurface anyway not a closed one */ if (arcs[k].cnt > 2) { lwfree(arcs); return 0; } } } if (!found) { arcs[carc].cnt=1; arcs[carc].face=i; arcs[carc].ax = pa.x; arcs[carc].ay = pa.y; arcs[carc].az = pa.z; arcs[carc].bx = pb.x; arcs[carc].by = pb.y; arcs[carc].bz = pb.z; carc++; /* Look like an invalid PolyhedralSurface anyway not a closed one */ if (carc > narcs) { lwfree(arcs); return 0; } } } } /* A polyhedron is closed if each edge is shared by exactly 2 faces */ for (k=0; k < carc ; k++) { if (arcs[k].cnt != 2) { lwfree(arcs); return 0; } } lwfree(arcs); /* Invalid Polyhedral case */ if (carc < psurface->ngeoms) return 0; return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/g_serialized.c����������������������������������������������������0000644�0000000�0000000�00000071127�12050547077�020365� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: g_serialized.c 10667 2012-11-13 22:48:31Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeom_log.h" /*********************************************************************** * GSERIALIZED metadata utility functions. */ int gserialized_has_bbox(const GSERIALIZED *gser) { return FLAGS_GET_BBOX(gser->flags); } int gserialized_has_z(const GSERIALIZED *gser) { return FLAGS_GET_Z(gser->flags); } int gserialized_has_m(const GSERIALIZED *gser) { return FLAGS_GET_M(gser->flags); } int gserialized_get_zm(const GSERIALIZED *gser) { return 2 * FLAGS_GET_Z(gser->flags) + FLAGS_GET_M(gser->flags); } int gserialized_ndims(const GSERIALIZED *gser) { return FLAGS_NDIMS(gser->flags); } uint32_t gserialized_get_type(const GSERIALIZED *s) { uint32_t *ptr; assert(s); ptr = (uint32_t*)(s->data); LWDEBUG(4,"entered"); if ( FLAGS_GET_BBOX(s->flags) ) { LWDEBUGF(4,"skipping forward past bbox (%d bytes)",gbox_serialized_size(s->flags)); ptr += (gbox_serialized_size(s->flags) / sizeof(uint32_t)); } return *ptr; } int32_t gserialized_get_srid(const GSERIALIZED *s) { int32_t srid = 0; srid = srid | (s->srid[0] << 16); srid = srid | (s->srid[1] << 8); srid = srid | s->srid[2]; /* Only the first 21 bits are set. Slide up and back to pull the negative bits down, if we need them. */ srid = (srid<<11)>>11; /* 0 is our internal unknown value. We'll map back and forth here for now */ if ( srid == 0 ) return SRID_UNKNOWN; else return clamp_srid(srid); } void gserialized_set_srid(GSERIALIZED *s, int32_t srid) { LWDEBUGF(3, "Called with srid = %d", srid); srid = clamp_srid(srid); /* 0 is our internal unknown value. * We'll map back and forth here for now */ if ( srid == SRID_UNKNOWN ) srid = 0; s->srid[0] = (srid & 0x001F0000) >> 16; s->srid[1] = (srid & 0x0000FF00) >> 8; s->srid[2] = (srid & 0x000000FF); } GSERIALIZED* gserialized_copy(const GSERIALIZED *g) { GSERIALIZED *g_out = NULL; assert(g); g_out = (GSERIALIZED*)lwalloc(SIZE_GET(g->size)); memcpy((uint8_t*)g_out,(uint8_t*)g,SIZE_GET(g->size)); return g_out; } int gserialized_is_empty(const GSERIALIZED *g) { uint8_t *p = (uint8_t*)g; int i; assert(g); p += 8; /* Skip varhdr and srid/flags */ if( FLAGS_GET_BBOX(g->flags) ) p += gbox_serialized_size(g->flags); /* Skip the box */ p += 4; /* Skip type number */ /* For point/line/circstring this is npoints */ /* For polygons this is nrings */ /* For collections this is ngeoms */ memcpy(&i, p, sizeof(int)); /* If it is non-zero, it's not empty */ if ( i > 0 ) return LW_FALSE; else return LW_TRUE; } char* gserialized_to_string(const GSERIALIZED *g) { return lwgeom_to_wkt(lwgeom_from_gserialized(g), WKT_ISO, 12, 0); } int gserialized_read_gbox_p(const GSERIALIZED *g, GBOX *gbox) { /* Null input! */ if ( ! ( g && gbox ) ) return LW_FAILURE; /* Initialize the flags on the box */ gbox->flags = g->flags; /* Has pre-calculated box */ if ( FLAGS_GET_BBOX(g->flags) ) { int i = 0; float *fbox = (float*)(g->data); gbox->xmin = fbox[i++]; gbox->xmax = fbox[i++]; gbox->ymin = fbox[i++]; gbox->ymax = fbox[i++]; /* Geodetic? Read next dimension (geocentric Z) and return */ if ( FLAGS_GET_GEODETIC(g->flags) ) { gbox->zmin = fbox[i++]; gbox->zmax = fbox[i++]; return LW_SUCCESS; } /* Cartesian? Read extra dimensions (if there) and return */ if ( FLAGS_GET_Z(g->flags) ) { gbox->zmin = fbox[i++]; gbox->zmax = fbox[i++]; } if ( FLAGS_GET_M(g->flags) ) { gbox->mmin = fbox[i++]; gbox->mmax = fbox[i++]; } return LW_SUCCESS; } /* No pre-calculated box, but for cartesian entries we can do some magic */ if ( ! FLAGS_GET_GEODETIC(g->flags) ) { uint32_t type = gserialized_get_type(g); /* Boxes of points are easy peasy */ if ( type == POINTTYPE ) { int i = 1; /* Start past <pointtype><padding> */ double *dptr = (double*)(g->data); /* Read the empty flag */ int *iptr = (int*)(g->data); int isempty = (iptr[1] == 0); /* EMPTY point has no box */ if ( isempty ) return LW_FAILURE; gbox->xmin = gbox->xmax = dptr[i++]; gbox->ymin = gbox->ymax = dptr[i++]; if ( FLAGS_GET_Z(g->flags) ) { gbox->zmin = gbox->zmax = dptr[i++]; } if ( FLAGS_GET_M(g->flags) ) { gbox->mmin = gbox->mmax = dptr[i++]; } gbox_float_round(gbox); return LW_SUCCESS; } /* We can calculate the box of a two-point cartesian line trivially */ else if ( type == LINETYPE ) { int ndims = FLAGS_NDIMS(g->flags); int i = 0; /* Start past <linetype><npoints> */ double *dptr = (double*)(g->data); int *iptr = (int*)(g->data); int npoints = iptr[1]; /* Read the npoints */ /* This only works with 2-point lines */ if ( npoints != 2 ) return LW_FAILURE; /* Advance to X */ i++; gbox->xmin = FP_MIN(dptr[i], dptr[i+ndims]); gbox->xmax = FP_MAX(dptr[i], dptr[i+ndims]); /* Advance to Y */ i++; gbox->ymin = FP_MIN(dptr[i], dptr[i+ndims]); gbox->ymax = FP_MAX(dptr[i], dptr[i+ndims]); if ( FLAGS_GET_Z(g->flags) ) { /* Advance to Z */ i++; gbox->zmin = FP_MIN(dptr[i], dptr[i+ndims]); gbox->zmax = FP_MAX(dptr[i], dptr[i+ndims]); } if ( FLAGS_GET_M(g->flags) ) { /* Advance to M */ i++; gbox->mmin = FP_MIN(dptr[i], dptr[i+ndims]); gbox->mmax = FP_MAX(dptr[i], dptr[i+ndims]); } gbox_float_round(gbox); return LW_SUCCESS; } /* We could also do single-entry multi-points */ else if ( type == MULTIPOINTTYPE ) { /* TODO: Make this actually happen */ return LW_FAILURE; } } return LW_FAILURE; } /** * Read the bounding box off a serialization and calculate one if * it is not already there. */ int gserialized_get_gbox_p(const GSERIALIZED *geom, GBOX *box) { LWGEOM *lwgeom; int ret = gserialized_read_gbox_p(geom, box); if ( LW_FAILURE == ret ) { /* See http://trac.osgeo.org/postgis/ticket/1023 */ lwgeom = lwgeom_from_gserialized(geom); ret = lwgeom_calculate_gbox(lwgeom, box); gbox_float_round(box); lwgeom_free(lwgeom); } return ret; } /*********************************************************************** * Calculate the GSERIALIZED size for an LWGEOM. */ /* Private functions */ static size_t gserialized_from_any_size(const LWGEOM *geom); /* Local prototype */ static size_t gserialized_from_lwpoint_size(const LWPOINT *point) { size_t size = 4; /* Type number. */ assert(point); size += 4; /* Number of points (one or zero (empty)). */ size += point->point->npoints * FLAGS_NDIMS(point->flags) * sizeof(double); LWDEBUGF(3, "point size = %d", size); return size; } static size_t gserialized_from_lwline_size(const LWLINE *line) { size_t size = 4; /* Type number. */ assert(line); size += 4; /* Number of points (zero => empty). */ size += line->points->npoints * FLAGS_NDIMS(line->flags) * sizeof(double); LWDEBUGF(3, "linestring size = %d", size); return size; } static size_t gserialized_from_lwtriangle_size(const LWTRIANGLE *triangle) { size_t size = 4; /* Type number. */ assert(triangle); size += 4; /* Number of points (zero => empty). */ size += triangle->points->npoints * FLAGS_NDIMS(triangle->flags) * sizeof(double); LWDEBUGF(3, "triangle size = %d", size); return size; } static size_t gserialized_from_lwpoly_size(const LWPOLY *poly) { size_t size = 4; /* Type number. */ int i = 0; assert(poly); size += 4; /* Number of rings (zero => empty). */ if ( poly->nrings % 2 ) size += 4; /* Padding to double alignment. */ for ( i = 0; i < poly->nrings; i++ ) { size += 4; /* Number of points in ring. */ size += poly->rings[i]->npoints * FLAGS_NDIMS(poly->flags) * sizeof(double); } LWDEBUGF(3, "polygon size = %d", size); return size; } static size_t gserialized_from_lwcircstring_size(const LWCIRCSTRING *curve) { size_t size = 4; /* Type number. */ assert(curve); size += 4; /* Number of points (zero => empty). */ size += curve->points->npoints * FLAGS_NDIMS(curve->flags) * sizeof(double); LWDEBUGF(3, "circstring size = %d", size); return size; } static size_t gserialized_from_lwcollection_size(const LWCOLLECTION *col) { size_t size = 4; /* Type number. */ int i = 0; assert(col); size += 4; /* Number of sub-geometries (zero => empty). */ for ( i = 0; i < col->ngeoms; i++ ) { size_t subsize = gserialized_from_any_size(col->geoms[i]); size += subsize; LWDEBUGF(3, "lwcollection subgeom(%d) size = %d", i, subsize); } LWDEBUGF(3, "lwcollection size = %d", size); return size; } static size_t gserialized_from_any_size(const LWGEOM *geom) { LWDEBUGF(2, "Input type: %s", lwtype_name(geom->type)); switch (geom->type) { case POINTTYPE: return gserialized_from_lwpoint_size((LWPOINT *)geom); case LINETYPE: return gserialized_from_lwline_size((LWLINE *)geom); case POLYGONTYPE: return gserialized_from_lwpoly_size((LWPOLY *)geom); case TRIANGLETYPE: return gserialized_from_lwtriangle_size((LWTRIANGLE *)geom); case CIRCSTRINGTYPE: return gserialized_from_lwcircstring_size((LWCIRCSTRING *)geom); case CURVEPOLYTYPE: case COMPOUNDTYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTICURVETYPE: case MULTIPOLYGONTYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return gserialized_from_lwcollection_size((LWCOLLECTION *)geom); default: lwerror("Unknown geometry type: %d - %s", geom->type, lwtype_name(geom->type)); return 0; } } /* Public function */ size_t gserialized_from_lwgeom_size(const LWGEOM *geom) { size_t size = 8; /* Header overhead. */ assert(geom); if ( geom->bbox ) size += gbox_serialized_size(geom->flags); size += gserialized_from_any_size(geom); LWDEBUGF(3, "g_serialize size = %d", size); return size; } /*********************************************************************** * Serialize an LWGEOM into GSERIALIZED. */ /* Private functions */ static size_t gserialized_from_lwgeom_any(const LWGEOM *geom, uint8_t *buf); static size_t gserialized_from_lwpoint(const LWPOINT *point, uint8_t *buf) { uint8_t *loc; int ptsize = ptarray_point_size(point->point); int type = POINTTYPE; assert(point); assert(buf); if ( FLAGS_GET_ZM(point->flags) != FLAGS_GET_ZM(point->point->flags) ) lwerror("Dimensions mismatch in lwpoint"); LWDEBUGF(2, "lwpoint_to_gserialized(%p, %p) called", point, buf); loc = buf; /* Write in the type. */ memcpy(loc, &type, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Write in the number of points (0 => empty). */ memcpy(loc, &(point->point->npoints), sizeof(uint32_t)); loc += sizeof(uint32_t); /* Copy in the ordinates. */ if ( point->point->npoints > 0 ) { memcpy(loc, getPoint_internal(point->point, 0), ptsize); loc += ptsize; } return (size_t)(loc - buf); } static size_t gserialized_from_lwline(const LWLINE *line, uint8_t *buf) { uint8_t *loc; int ptsize; size_t size; int type = LINETYPE; assert(line); assert(buf); LWDEBUGF(2, "lwline_to_gserialized(%p, %p) called", line, buf); if ( FLAGS_GET_Z(line->flags) != FLAGS_GET_Z(line->points->flags) ) lwerror("Dimensions mismatch in lwline"); ptsize = ptarray_point_size(line->points); loc = buf; /* Write in the type. */ memcpy(loc, &type, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Write in the npoints. */ memcpy(loc, &(line->points->npoints), sizeof(uint32_t)); loc += sizeof(uint32_t); LWDEBUGF(3, "lwline_to_gserialized added npoints (%d)", line->points->npoints); /* Copy in the ordinates. */ if ( line->points->npoints > 0 ) { size = line->points->npoints * ptsize; memcpy(loc, getPoint_internal(line->points, 0), size); loc += size; } LWDEBUGF(3, "lwline_to_gserialized copied serialized_pointlist (%d bytes)", ptsize * line->points->npoints); return (size_t)(loc - buf); } static size_t gserialized_from_lwpoly(const LWPOLY *poly, uint8_t *buf) { int i; uint8_t *loc; int ptsize; int type = POLYGONTYPE; assert(poly); assert(buf); LWDEBUG(2, "lwpoly_to_gserialized called"); ptsize = sizeof(double) * FLAGS_NDIMS(poly->flags); loc = buf; /* Write in the type. */ memcpy(loc, &type, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Write in the nrings. */ memcpy(loc, &(poly->nrings), sizeof(uint32_t)); loc += sizeof(uint32_t); /* Write in the npoints per ring. */ for ( i = 0; i < poly->nrings; i++ ) { memcpy(loc, &(poly->rings[i]->npoints), sizeof(uint32_t)); loc += sizeof(uint32_t); } /* Add in padding if necessary to remain double aligned. */ if ( poly->nrings % 2 ) { memset(loc, 0, sizeof(uint32_t)); loc += sizeof(uint32_t); } /* Copy in the ordinates. */ for ( i = 0; i < poly->nrings; i++ ) { POINTARRAY *pa = poly->rings[i]; size_t pasize; if ( FLAGS_GET_ZM(poly->flags) != FLAGS_GET_ZM(pa->flags) ) lwerror("Dimensions mismatch in lwpoly"); pasize = pa->npoints * ptsize; memcpy(loc, getPoint_internal(pa, 0), pasize); loc += pasize; } return (size_t)(loc - buf); } static size_t gserialized_from_lwtriangle(const LWTRIANGLE *triangle, uint8_t *buf) { uint8_t *loc; int ptsize; size_t size; int type = TRIANGLETYPE; assert(triangle); assert(buf); LWDEBUGF(2, "lwtriangle_to_gserialized(%p, %p) called", triangle, buf); if ( FLAGS_GET_ZM(triangle->flags) != FLAGS_GET_ZM(triangle->points->flags) ) lwerror("Dimensions mismatch in lwtriangle"); ptsize = ptarray_point_size(triangle->points); loc = buf; /* Write in the type. */ memcpy(loc, &type, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Write in the npoints. */ memcpy(loc, &(triangle->points->npoints), sizeof(uint32_t)); loc += sizeof(uint32_t); LWDEBUGF(3, "lwtriangle_to_gserialized added npoints (%d)", triangle->points->npoints); /* Copy in the ordinates. */ if ( triangle->points->npoints > 0 ) { size = triangle->points->npoints * ptsize; memcpy(loc, getPoint_internal(triangle->points, 0), size); loc += size; } LWDEBUGF(3, "lwtriangle_to_gserialized copied serialized_pointlist (%d bytes)", ptsize * triangle->points->npoints); return (size_t)(loc - buf); } static size_t gserialized_from_lwcircstring(const LWCIRCSTRING *curve, uint8_t *buf) { uint8_t *loc; int ptsize; size_t size; int type = CIRCSTRINGTYPE; assert(curve); assert(buf); if (FLAGS_GET_ZM(curve->flags) != FLAGS_GET_ZM(curve->points->flags)) lwerror("Dimensions mismatch in lwcircstring"); ptsize = ptarray_point_size(curve->points); loc = buf; /* Write in the type. */ memcpy(loc, &type, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Write in the npoints. */ memcpy(loc, &curve->points->npoints, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Copy in the ordinates. */ if ( curve->points->npoints > 0 ) { size = curve->points->npoints * ptsize; memcpy(loc, getPoint_internal(curve->points, 0), size); loc += size; } return (size_t)(loc - buf); } static size_t gserialized_from_lwcollection(const LWCOLLECTION *coll, uint8_t *buf) { size_t subsize = 0; uint8_t *loc; int i; int type; assert(coll); assert(buf); type = coll->type; loc = buf; /* Write in the type. */ memcpy(loc, &type, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Write in the number of subgeoms. */ memcpy(loc, &coll->ngeoms, sizeof(uint32_t)); loc += sizeof(uint32_t); /* Serialize subgeoms. */ for ( i=0; i<coll->ngeoms; i++ ) { if (FLAGS_GET_ZM(coll->flags) != FLAGS_GET_ZM(coll->geoms[i]->flags)) lwerror("Dimensions mismatch in lwcollection"); subsize = gserialized_from_lwgeom_any(coll->geoms[i], loc); loc += subsize; } return (size_t)(loc - buf); } static size_t gserialized_from_lwgeom_any(const LWGEOM *geom, uint8_t *buf) { assert(geom); assert(buf); LWDEBUGF(2, "Input type (%d) %s, hasz: %d hasm: %d", geom->type, lwtype_name(geom->type), FLAGS_GET_Z(geom->flags), FLAGS_GET_M(geom->flags)); LWDEBUGF(2, "LWGEOM(%p) uint8_t(%p)", geom, buf); switch (geom->type) { case POINTTYPE: return gserialized_from_lwpoint((LWPOINT *)geom, buf); case LINETYPE: return gserialized_from_lwline((LWLINE *)geom, buf); case POLYGONTYPE: return gserialized_from_lwpoly((LWPOLY *)geom, buf); case TRIANGLETYPE: return gserialized_from_lwtriangle((LWTRIANGLE *)geom, buf); case CIRCSTRINGTYPE: return gserialized_from_lwcircstring((LWCIRCSTRING *)geom, buf); case CURVEPOLYTYPE: case COMPOUNDTYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTICURVETYPE: case MULTIPOLYGONTYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return gserialized_from_lwcollection((LWCOLLECTION *)geom, buf); default: lwerror("Unknown geometry type: %d - %s", geom->type, lwtype_name(geom->type)); return 0; } return 0; } static size_t gserialized_from_gbox(const GBOX *gbox, uint8_t *buf) { uint8_t *loc = buf; float f; size_t return_size; assert(buf); f = next_float_down(gbox->xmin); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); f = next_float_up(gbox->xmax); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); f = next_float_down(gbox->ymin); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); f = next_float_up(gbox->ymax); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); if ( FLAGS_GET_GEODETIC(gbox->flags) ) { f = next_float_down(gbox->zmin); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); f = next_float_up(gbox->zmax); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); return_size = (size_t)(loc - buf); LWDEBUGF(4, "returning size %d", return_size); return return_size; } if ( FLAGS_GET_Z(gbox->flags) ) { f = next_float_down(gbox->zmin); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); f = next_float_up(gbox->zmax); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); } if ( FLAGS_GET_M(gbox->flags) ) { f = next_float_down(gbox->mmin); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); f = next_float_up(gbox->mmax); memcpy(loc, &f, sizeof(float)); loc += sizeof(float); } return_size = (size_t)(loc - buf); LWDEBUGF(4, "returning size %d", return_size); return return_size; } /* Public function */ GSERIALIZED* gserialized_from_lwgeom(LWGEOM *geom, int is_geodetic, size_t *size) { size_t expected_size = 0; size_t return_size = 0; uint8_t *serialized = NULL; uint8_t *ptr = NULL; GSERIALIZED *g = NULL; assert(geom); /* ** See if we need a bounding box, add one if we don't have one. */ if ( (! geom->bbox) && lwgeom_needs_bbox(geom) && (!lwgeom_is_empty(geom)) ) { lwgeom_add_bbox(geom); } /* ** Harmonize the flags to the state of the lwgeom */ if ( geom->bbox ) FLAGS_SET_BBOX(geom->flags, 1); /* Set up the uint8_t buffer into which we are going to write the serialized geometry. */ expected_size = gserialized_from_lwgeom_size(geom); serialized = lwalloc(expected_size); ptr = serialized; /* Move past size, srid and flags. */ ptr += 8; /* Write in the serialized form of the gbox, if necessary. */ if ( geom->bbox ) ptr += gserialized_from_gbox(geom->bbox, ptr); /* Write in the serialized form of the geometry. */ ptr += gserialized_from_lwgeom_any(geom, ptr); /* Calculate size as returned by data processing functions. */ return_size = ptr - serialized; if ( expected_size != return_size ) /* Uh oh! */ { lwerror("Return size (%d) not equal to expected size (%d)!", return_size, expected_size); return NULL; } if ( size ) /* Return the output size to the caller if necessary. */ *size = return_size; g = (GSERIALIZED*)serialized; /* ** We are aping PgSQL code here, PostGIS code should use ** VARSIZE to set this for real. */ g->size = return_size << 2; /* Set the SRID! */ gserialized_set_srid(g, geom->srid); g->flags = geom->flags; return g; } /*********************************************************************** * De-serialize GSERIALIZED into an LWGEOM. */ static LWGEOM* lwgeom_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size); static LWPOINT* lwpoint_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size) { uint8_t *start_ptr = data_ptr; LWPOINT *point; uint32_t npoints = 0; assert(data_ptr); point = (LWPOINT*)lwalloc(sizeof(LWPOINT)); point->srid = SRID_UNKNOWN; /* Default */ point->bbox = NULL; point->type = POINTTYPE; point->flags = g_flags; data_ptr += 4; /* Skip past the type. */ npoints = lw_get_uint32_t(data_ptr); /* Zero => empty geometry */ data_ptr += 4; /* Skip past the npoints. */ if ( npoints > 0 ) point->point = ptarray_construct_reference_data(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), 1, data_ptr); else point->point = ptarray_construct(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), 0); /* Empty point */ data_ptr += npoints * FLAGS_NDIMS(g_flags) * sizeof(double); if ( g_size ) *g_size = data_ptr - start_ptr; return point; } static LWLINE* lwline_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size) { uint8_t *start_ptr = data_ptr; LWLINE *line; uint32_t npoints = 0; assert(data_ptr); line = (LWLINE*)lwalloc(sizeof(LWLINE)); line->srid = SRID_UNKNOWN; /* Default */ line->bbox = NULL; line->type = LINETYPE; line->flags = g_flags; data_ptr += 4; /* Skip past the type. */ npoints = lw_get_uint32_t(data_ptr); /* Zero => empty geometry */ data_ptr += 4; /* Skip past the npoints. */ if ( npoints > 0 ) line->points = ptarray_construct_reference_data(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), npoints, data_ptr); else line->points = ptarray_construct(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), 0); /* Empty linestring */ data_ptr += FLAGS_NDIMS(g_flags) * npoints * sizeof(double); if ( g_size ) *g_size = data_ptr - start_ptr; return line; } static LWPOLY* lwpoly_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size) { uint8_t *start_ptr = data_ptr; LWPOLY *poly; uint8_t *ordinate_ptr; uint32_t nrings = 0; int i = 0; assert(data_ptr); poly = (LWPOLY*)lwalloc(sizeof(LWPOLY)); poly->srid = SRID_UNKNOWN; /* Default */ poly->bbox = NULL; poly->type = POLYGONTYPE; poly->flags = g_flags; data_ptr += 4; /* Skip past the polygontype. */ nrings = lw_get_uint32_t(data_ptr); /* Zero => empty geometry */ poly->nrings = nrings; LWDEBUGF(4, "nrings = %d", nrings); data_ptr += 4; /* Skip past the nrings. */ ordinate_ptr = data_ptr; /* Start the ordinate pointer. */ if ( nrings > 0) { poly->rings = (POINTARRAY**)lwalloc( sizeof(POINTARRAY*) * nrings ); ordinate_ptr += nrings * 4; /* Move past all the npoints values. */ if ( nrings % 2 ) /* If there is padding, move past that too. */ ordinate_ptr += 4; } else /* Empty polygon */ { poly->rings = NULL; } for ( i = 0; i < nrings; i++ ) { uint32_t npoints = 0; /* Read in the number of points. */ npoints = lw_get_uint32_t(data_ptr); data_ptr += 4; /* Make a point array for the ring, and move the ordinate pointer past the ring ordinates. */ poly->rings[i] = ptarray_construct_reference_data(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), npoints, ordinate_ptr); ordinate_ptr += sizeof(double) * FLAGS_NDIMS(g_flags) * npoints; } if ( g_size ) *g_size = ordinate_ptr - start_ptr; return poly; } static LWTRIANGLE* lwtriangle_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size) { uint8_t *start_ptr = data_ptr; LWTRIANGLE *triangle; uint32_t npoints = 0; assert(data_ptr); triangle = (LWTRIANGLE*)lwalloc(sizeof(LWTRIANGLE)); triangle->srid = SRID_UNKNOWN; /* Default */ triangle->bbox = NULL; triangle->type = TRIANGLETYPE; triangle->flags = g_flags; data_ptr += 4; /* Skip past the type. */ npoints = lw_get_uint32_t(data_ptr); /* Zero => empty geometry */ data_ptr += 4; /* Skip past the npoints. */ if ( npoints > 0 ) triangle->points = ptarray_construct_reference_data(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), npoints, data_ptr); else triangle->points = ptarray_construct(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), 0); /* Empty triangle */ data_ptr += FLAGS_NDIMS(g_flags) * npoints * sizeof(double); if ( g_size ) *g_size = data_ptr - start_ptr; return triangle; } static LWCIRCSTRING* lwcircstring_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size) { uint8_t *start_ptr = data_ptr; LWCIRCSTRING *circstring; uint32_t npoints = 0; assert(data_ptr); circstring = (LWCIRCSTRING*)lwalloc(sizeof(LWCIRCSTRING)); circstring->srid = SRID_UNKNOWN; /* Default */ circstring->bbox = NULL; circstring->type = CIRCSTRINGTYPE; circstring->flags = g_flags; data_ptr += 4; /* Skip past the circstringtype. */ npoints = lw_get_uint32_t(data_ptr); /* Zero => empty geometry */ data_ptr += 4; /* Skip past the npoints. */ if ( npoints > 0 ) circstring->points = ptarray_construct_reference_data(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), npoints, data_ptr); else circstring->points = ptarray_construct(FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), 0); /* Empty circularstring */ data_ptr += FLAGS_NDIMS(g_flags) * npoints * sizeof(double); if ( g_size ) *g_size = data_ptr - start_ptr; return circstring; } static LWCOLLECTION* lwcollection_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size) { uint32_t type; uint8_t *start_ptr = data_ptr; LWCOLLECTION *collection; uint32_t ngeoms = 0; int i = 0; assert(data_ptr); type = lw_get_uint32_t(data_ptr); data_ptr += 4; /* Skip past the type. */ collection = (LWCOLLECTION*)lwalloc(sizeof(LWCOLLECTION)); collection->srid = SRID_UNKNOWN; /* Default */ collection->bbox = NULL; collection->type = type; collection->flags = g_flags; ngeoms = lw_get_uint32_t(data_ptr); collection->ngeoms = ngeoms; /* Zero => empty geometry */ data_ptr += 4; /* Skip past the ngeoms. */ if ( ngeoms > 0 ) collection->geoms = lwalloc(sizeof(LWGEOM*) * ngeoms); else collection->geoms = NULL; /* Sub-geometries are never de-serialized with boxes (#1254) */ FLAGS_SET_BBOX(g_flags, 0); for ( i = 0; i < ngeoms; i++ ) { uint32_t subtype = lw_get_uint32_t(data_ptr); size_t subsize = 0; if ( ! lwcollection_allows_subtype(type, subtype) ) { lwerror("Invalid subtype (%s) for collection type (%s)", lwtype_name(subtype), lwtype_name(type)); lwfree(collection); return NULL; } collection->geoms[i] = lwgeom_from_gserialized_buffer(data_ptr, g_flags, &subsize); data_ptr += subsize; } if ( g_size ) *g_size = data_ptr - start_ptr; return collection; } LWGEOM* lwgeom_from_gserialized_buffer(uint8_t *data_ptr, uint8_t g_flags, size_t *g_size) { uint32_t type; assert(data_ptr); type = lw_get_uint32_t(data_ptr); LWDEBUGF(2, "Got type %d (%s), hasz=%d hasm=%d geodetic=%d hasbox=%d", type, lwtype_name(type), FLAGS_GET_Z(g_flags), FLAGS_GET_M(g_flags), FLAGS_GET_GEODETIC(g_flags), FLAGS_GET_BBOX(g_flags)); switch (type) { case POINTTYPE: return (LWGEOM *)lwpoint_from_gserialized_buffer(data_ptr, g_flags, g_size); case LINETYPE: return (LWGEOM *)lwline_from_gserialized_buffer(data_ptr, g_flags, g_size); case CIRCSTRINGTYPE: return (LWGEOM *)lwcircstring_from_gserialized_buffer(data_ptr, g_flags, g_size); case POLYGONTYPE: return (LWGEOM *)lwpoly_from_gserialized_buffer(data_ptr, g_flags, g_size); case TRIANGLETYPE: return (LWGEOM *)lwtriangle_from_gserialized_buffer(data_ptr, g_flags, g_size); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return (LWGEOM *)lwcollection_from_gserialized_buffer(data_ptr, g_flags, g_size); default: lwerror("Unknown geometry type: %d - %s", type, lwtype_name(type)); return NULL; } } LWGEOM* lwgeom_from_gserialized(const GSERIALIZED *g) { uint8_t g_flags = 0; int32_t g_srid = 0; uint32_t g_type = 0; uint8_t *data_ptr = NULL; LWGEOM *lwgeom = NULL; GBOX bbox; size_t g_size = 0; assert(g); g_srid = gserialized_get_srid(g); g_flags = g->flags; g_type = gserialized_get_type(g); LWDEBUGF(4, "Got type %d (%s), srid=%d", g_type, lwtype_name(g_type), g_srid); data_ptr = (uint8_t*)g->data; if ( FLAGS_GET_BBOX(g_flags) ) data_ptr += gbox_serialized_size(g_flags); lwgeom = lwgeom_from_gserialized_buffer(data_ptr, g_flags, &g_size); if ( ! lwgeom ) lwerror("lwgeom_from_gserialized: unable create geometry"); /* Ooops! */ lwgeom->type = g_type; lwgeom->flags = g_flags; if ( gserialized_read_gbox_p(g, &bbox) == LW_SUCCESS ) { lwgeom->bbox = gbox_copy(&bbox); } else if ( lwgeom_needs_bbox(lwgeom) && (lwgeom_calculate_gbox(lwgeom, &bbox) == LW_SUCCESS) ) { lwgeom->bbox = gbox_copy(&bbox); } else { lwgeom->bbox = NULL; } lwgeom_set_srid(lwgeom, g_srid); return lwgeom; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkt.c��������������������������������������������������������0000644�0000000�0000000�00000050541�12047044677�017563� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * * Copyright (C) 2010 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdlib.h> #include <ctype.h> /* for isspace */ #include "lwin_wkt.h" #include "lwin_wkt_parse.h" #include "lwgeom_log.h" /* * Error messages for failures in the parser. */ const char *parser_error_messages[] = { "", "geometry requires more points", "geometry must have an odd number of points", "geometry contains non-closed rings", "can not mix dimensionality in a geometry", "parse error - invalid geometry", "invalid WKB type", "incontinuous compound curve", "triangle must have exactly 4 points", "geometry has too many points", "parse error - invalid geometry" }; #define SET_PARSER_ERROR(errno) { \ global_parser_result.message = parser_error_messages[(errno)]; \ global_parser_result.errcode = (errno); \ global_parser_result.errlocation = wkt_yylloc.last_column; \ } /** * Read the SRID number from an SRID=<> string */ int wkt_lexer_read_srid(char *str) { char *c = str; long i = 0; int srid; if( ! str ) return SRID_UNKNOWN; c += 5; /* Advance past "SRID=" */ i = strtol(c, NULL, 10); srid = clamp_srid((int)i); /* TODO: warn on explicit UNKNOWN srid ? */ return srid; } static uint8_t wkt_dimensionality(char *dimensionality) { int i = 0; uint8_t flags = 0; if( ! dimensionality ) return flags; /* If there's an explicit dimensionality, we use that */ for( i = 0; i < strlen(dimensionality); i++ ) { if( (dimensionality[i] == 'Z') || (dimensionality[i] == 'z') ) FLAGS_SET_Z(flags,1); else if( (dimensionality[i] == 'M') || (dimensionality[i] == 'm') ) FLAGS_SET_M(flags,1); /* only a space is accepted in between */ else if( ! isspace(dimensionality[i]) ) break; } return flags; } /** * Force the dimensionality of a geometry to match the dimensionality * of a set of flags (usually derived from a ZM WKT tag). */ static int wkt_parser_set_dims(LWGEOM *geom, uint8_t flags) { int hasz = FLAGS_GET_Z(flags); int hasm = FLAGS_GET_M(flags); int i = 0; /* Error on junk */ if( ! geom ) return LW_FAILURE; FLAGS_SET_Z(geom->flags, hasz); FLAGS_SET_M(geom->flags, hasm); if( ! lwgeom_is_empty(geom) ) { if( geom->type == POINTTYPE ) { LWPOINT *pt = (LWPOINT*)geom; FLAGS_SET_Z(pt->point->flags, hasz); FLAGS_SET_M(pt->point->flags, hasm); return LW_SUCCESS; } else if ( (geom->type == TRIANGLETYPE) || (geom->type == CIRCSTRINGTYPE) || (geom->type == LINETYPE) ) { LWLINE *ln = (LWLINE*)geom; FLAGS_SET_Z(ln->points->flags, hasz); FLAGS_SET_M(ln->points->flags, hasm); return LW_SUCCESS; } else if ( geom->type == POLYGONTYPE ) { LWPOLY *poly = (LWPOLY*)geom; for ( i = 0; i < poly->nrings; i++ ) { FLAGS_SET_Z(poly->rings[i]->flags, hasz); FLAGS_SET_M(poly->rings[i]->flags, hasm); } return LW_SUCCESS; } else if ( geom->type == CURVEPOLYTYPE ) { LWCURVEPOLY *poly = (LWCURVEPOLY*)geom; for ( i = 0; i < poly->nrings; i++ ) wkt_parser_set_dims(poly->rings[i], flags); return LW_SUCCESS; } else if ( lwtype_is_collection(geom->type) ) { LWCOLLECTION *col = (LWCOLLECTION*)geom; for ( i = 0; i < col->ngeoms; i++ ) wkt_parser_set_dims(col->geoms[i], flags); return LW_SUCCESS; } else { LWDEBUGF(2,"Unknown geometry type: %d", geom->type); return LW_FAILURE; } } return LW_SUCCESS; } /** * Read the dimensionality from a flag, if provided. Then check that the * dimensionality matches that of the pointarray. If the dimension counts * match, ensure the pointarray is using the right "Z" or "M". */ static int wkt_pointarray_dimensionality(POINTARRAY *pa, uint8_t flags) { int hasz = FLAGS_GET_Z(flags); int hasm = FLAGS_GET_M(flags); int ndims = 2 + hasz + hasm; /* No dimensionality or array means we go with what we have */ if( ! (flags && pa) ) return LW_TRUE; LWDEBUGF(5,"dimensionality ndims == %d", ndims); LWDEBUGF(5,"FLAGS_NDIMS(pa->flags) == %d", FLAGS_NDIMS(pa->flags)); /* * ndims > 2 implies that the flags have something useful to add, * that there is a 'Z' or an 'M' or both. */ if( ndims > 2 ) { /* Mismatch implies a problem */ if ( FLAGS_NDIMS(pa->flags) != ndims ) return LW_FALSE; /* Match means use the explicit dimensionality */ else { FLAGS_SET_Z(pa->flags, hasz); FLAGS_SET_M(pa->flags, hasm); } } return LW_TRUE; } /** * Build a 2d coordinate. */ POINT wkt_parser_coord_2(double c1, double c2) { POINT p; p.flags = 0; p.x = c1; p.y = c2; p.z = p.m = 0.0; FLAGS_SET_Z(p.flags, 0); FLAGS_SET_M(p.flags, 0); return p; } /** * Note, if this is an XYM coordinate we'll have to fix it later when we build * the object itself and have access to the dimensionality token. */ POINT wkt_parser_coord_3(double c1, double c2, double c3) { POINT p; p.flags = 0; p.x = c1; p.y = c2; p.z = c3; p.m = 0; FLAGS_SET_Z(p.flags, 1); FLAGS_SET_M(p.flags, 0); return p; } /** */ POINT wkt_parser_coord_4(double c1, double c2, double c3, double c4) { POINT p; p.flags = 0; p.x = c1; p.y = c2; p.z = c3; p.m = c4; FLAGS_SET_Z(p.flags, 1); FLAGS_SET_M(p.flags, 1); return p; } POINTARRAY* wkt_parser_ptarray_add_coord(POINTARRAY *pa, POINT p) { POINT4D pt; LWDEBUG(4,"entered"); /* Error on trouble */ if( ! pa ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } /* Check that the coordinate has the same dimesionality as the array */ if( FLAGS_NDIMS(p.flags) != FLAGS_NDIMS(pa->flags) ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* While parsing the point arrays, XYM and XMZ points are both treated as XYZ */ pt.x = p.x; pt.y = p.y; if( FLAGS_GET_Z(pa->flags) ) pt.z = p.z; if( FLAGS_GET_M(pa->flags) ) pt.m = p.m; /* If the destination is XYM, we'll write the third coordinate to m */ if( FLAGS_GET_M(pa->flags) && ! FLAGS_GET_Z(pa->flags) ) pt.m = p.z; ptarray_append_point(pa, &pt, LW_TRUE); /* Allow duplicate points in array */ return pa; } /** * Start a point array from the first coordinate. */ POINTARRAY* wkt_parser_ptarray_new(POINT p) { int ndims = FLAGS_NDIMS(p.flags); POINTARRAY *pa = ptarray_construct_empty((ndims>2), (ndims>3), 4); LWDEBUG(4,"entered"); if ( ! pa ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } return wkt_parser_ptarray_add_coord(pa, p); } /** * Create a new point. Null point array implies empty. Null dimensionality * implies no specified dimensionality in the WKT. */ LWGEOM* wkt_parser_point_new(POINTARRAY *pa, char *dimensionality) { uint8_t flags = wkt_dimensionality(dimensionality); LWDEBUG(4,"entered"); /* No pointarray means it is empty */ if( ! pa ) return lwpoint_as_lwgeom(lwpoint_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(flags), FLAGS_GET_M(flags))); /* If the number of dimensions is not consistent, we have a problem. */ if( wkt_pointarray_dimensionality(pa, flags) == LW_FALSE ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Only one point allowed in our point array! */ if( pa->npoints != 1 ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_LESSPOINTS); return NULL; } return lwpoint_as_lwgeom(lwpoint_construct(SRID_UNKNOWN, NULL, pa)); } /** * Create a new linestring. Null point array implies empty. Null dimensionality * implies no specified dimensionality in the WKT. Check for numpoints >= 2 if * requested. */ LWGEOM* wkt_parser_linestring_new(POINTARRAY *pa, char *dimensionality) { uint8_t flags = wkt_dimensionality(dimensionality); LWDEBUG(4,"entered"); /* No pointarray means it is empty */ if( ! pa ) return lwline_as_lwgeom(lwline_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(flags), FLAGS_GET_M(flags))); /* If the number of dimensions is not consistent, we have a problem. */ if( wkt_pointarray_dimensionality(pa, flags) == LW_FALSE ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Apply check for not enough points, if requested. */ if( (global_parser_result.parser_check_flags & LW_PARSER_CHECK_MINPOINTS) && (pa->npoints < 2) ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_MOREPOINTS); return NULL; } return lwline_as_lwgeom(lwline_construct(SRID_UNKNOWN, NULL, pa)); } /** * Create a new circularstring. Null point array implies empty. Null dimensionality * implies no specified dimensionality in the WKT. * Circular strings are just like linestrings, except with slighty different * validity rules (minpoint == 3, numpoints % 2 == 1). */ LWGEOM* wkt_parser_circularstring_new(POINTARRAY *pa, char *dimensionality) { uint8_t flags = wkt_dimensionality(dimensionality); LWDEBUG(4,"entered"); /* No pointarray means it is empty */ if( ! pa ) return lwcircstring_as_lwgeom(lwcircstring_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(flags), FLAGS_GET_M(flags))); /* If the number of dimensions is not consistent, we have a problem. */ if( wkt_pointarray_dimensionality(pa, flags) == LW_FALSE ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Apply check for not enough points, if requested. */ if( (global_parser_result.parser_check_flags & LW_PARSER_CHECK_MINPOINTS) && (pa->npoints < 3) ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_MOREPOINTS); return NULL; } /* Apply check for odd number of points, if requested. */ if( (global_parser_result.parser_check_flags & LW_PARSER_CHECK_ODD) && ((pa->npoints % 2) == 0) ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_ODDPOINTS); return NULL; } return lwcircstring_as_lwgeom(lwcircstring_construct(SRID_UNKNOWN, NULL, pa)); } LWGEOM* wkt_parser_triangle_new(POINTARRAY *pa, char *dimensionality) { uint8_t flags = wkt_dimensionality(dimensionality); LWDEBUG(4,"entered"); /* No pointarray means it is empty */ if( ! pa ) return lwtriangle_as_lwgeom(lwtriangle_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(flags), FLAGS_GET_M(flags))); /* If the number of dimensions is not consistent, we have a problem. */ if( wkt_pointarray_dimensionality(pa, flags) == LW_FALSE ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Triangles need four points. */ if( (pa->npoints != 4) ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_TRIANGLEPOINTS); return NULL; } /* Triangles need closure. */ if( ! ptarray_is_closed(pa) ) { ptarray_free(pa); SET_PARSER_ERROR(PARSER_ERROR_UNCLOSED); return NULL; } return lwtriangle_as_lwgeom(lwtriangle_construct(SRID_UNKNOWN, NULL, pa)); } LWGEOM* wkt_parser_polygon_new(POINTARRAY *pa, char dimcheck) { LWPOLY *poly = NULL; LWDEBUG(4,"entered"); /* No pointarray is a problem */ if( ! pa ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } poly = lwpoly_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(pa->flags), FLAGS_GET_M(pa->flags)); /* Error out if we can't build this polygon. */ if( ! poly ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } wkt_parser_polygon_add_ring(lwpoly_as_lwgeom(poly), pa, dimcheck); return lwpoly_as_lwgeom(poly); } LWGEOM* wkt_parser_polygon_add_ring(LWGEOM *poly, POINTARRAY *pa, char dimcheck) { LWDEBUG(4,"entered"); /* Bad inputs are a problem */ if( ! (pa && poly) ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } /* Rings must agree on dimensionality */ if( FLAGS_NDIMS(poly->flags) != FLAGS_NDIMS(pa->flags) ) { ptarray_free(pa); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Apply check for minimum number of points, if requested. */ if( (global_parser_result.parser_check_flags & LW_PARSER_CHECK_MINPOINTS) && (pa->npoints < 4) ) { ptarray_free(pa); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_MOREPOINTS); return NULL; } /* Apply check for not closed rings, if requested. */ if( (global_parser_result.parser_check_flags & LW_PARSER_CHECK_CLOSURE) && ! (dimcheck == 'Z' ? ptarray_is_closed_z(pa) : ptarray_is_closed_2d(pa)) ) { ptarray_free(pa); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_UNCLOSED); return NULL; } /* If something goes wrong adding a ring, error out. */ if ( LW_FAILURE == lwpoly_add_ring(lwgeom_as_lwpoly(poly), pa) ) { ptarray_free(pa); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } return poly; } LWGEOM* wkt_parser_polygon_finalize(LWGEOM *poly, char *dimensionality) { uint8_t flags = wkt_dimensionality(dimensionality); int flagdims = FLAGS_NDIMS(flags); LWDEBUG(4,"entered"); /* Null input implies empty return */ if( ! poly ) return lwpoly_as_lwgeom(lwpoly_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(flags), FLAGS_GET_M(flags))); /* If the number of dimensions are not consistent, we have a problem. */ if( flagdims > 2 ) { if ( flagdims != FLAGS_NDIMS(poly->flags) ) { lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Harmonize the flags in the sub-components with the wkt flags */ if( LW_FAILURE == wkt_parser_set_dims(poly, flags) ) { lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } } return poly; } LWGEOM* wkt_parser_curvepolygon_new(LWGEOM *ring) { LWGEOM *poly; LWDEBUG(4,"entered"); /* Toss error on null geometry input */ if( ! ring ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } /* Construct poly and add the ring. */ poly = lwcurvepoly_as_lwgeom(lwcurvepoly_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(ring->flags), FLAGS_GET_M(ring->flags))); /* Return the result. */ return wkt_parser_curvepolygon_add_ring(poly,ring); } LWGEOM* wkt_parser_curvepolygon_add_ring(LWGEOM *poly, LWGEOM *ring) { LWDEBUG(4,"entered"); /* Toss error on null input */ if( ! (ring && poly) ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); LWDEBUG(4,"inputs are null"); return NULL; } /* All the elements must agree on dimensionality */ if( FLAGS_NDIMS(poly->flags) != FLAGS_NDIMS(ring->flags) ) { LWDEBUG(4,"dimensionality does not match"); lwgeom_free(ring); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Apply check for minimum number of points, if requested. */ if( (global_parser_result.parser_check_flags & LW_PARSER_CHECK_MINPOINTS) ) { int vertices_needed = 3; if ( ring->type == LINETYPE ) vertices_needed = 4; if (lwgeom_count_vertices(ring) < vertices_needed) { LWDEBUG(4,"number of points is incorrect"); lwgeom_free(ring); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_MOREPOINTS); return NULL; } } /* Apply check for not closed rings, if requested. */ if( (global_parser_result.parser_check_flags & LW_PARSER_CHECK_CLOSURE) ) { int is_closed = 1; LWDEBUG(4,"checking ring closure"); switch ( ring->type ) { case LINETYPE: is_closed = lwline_is_closed(lwgeom_as_lwline(ring)); break; case CIRCSTRINGTYPE: is_closed = lwcircstring_is_closed(lwgeom_as_lwcircstring(ring)); break; case COMPOUNDTYPE: is_closed = lwcompound_is_closed(lwgeom_as_lwcompound(ring)); break; } if ( ! is_closed ) { LWDEBUG(4,"ring is not closed"); lwgeom_free(ring); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_UNCLOSED); return NULL; } } if( LW_FAILURE == lwcurvepoly_add_ring(lwgeom_as_lwcurvepoly(poly), ring) ) { LWDEBUG(4,"failed to add ring"); lwgeom_free(ring); lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } return poly; } LWGEOM* wkt_parser_curvepolygon_finalize(LWGEOM *poly, char *dimensionality) { uint8_t flags = wkt_dimensionality(dimensionality); int flagdims = FLAGS_NDIMS(flags); LWDEBUG(4,"entered"); /* Null input implies empty return */ if( ! poly ) return lwcurvepoly_as_lwgeom(lwcurvepoly_construct_empty(SRID_UNKNOWN, FLAGS_GET_Z(flags), FLAGS_GET_M(flags))); if ( flagdims > 2 ) { /* If the number of dimensions are not consistent, we have a problem. */ if( flagdims != FLAGS_NDIMS(poly->flags) ) { lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Harmonize the flags in the sub-components with the wkt flags */ if( LW_FAILURE == wkt_parser_set_dims(poly, flags) ) { lwgeom_free(poly); SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } } return poly; } LWGEOM* wkt_parser_collection_new(LWGEOM *geom) { LWCOLLECTION *col; LWGEOM **geoms; static int ngeoms = 1; LWDEBUG(4,"entered"); /* Toss error on null geometry input */ if( ! geom ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } /* Create our geometry array */ geoms = lwalloc(sizeof(LWGEOM*) * ngeoms); geoms[0] = geom; /* Make a new collection */ col = lwcollection_construct(COLLECTIONTYPE, SRID_UNKNOWN, NULL, ngeoms, geoms); /* Return the result. */ return lwcollection_as_lwgeom(col); } LWGEOM* wkt_parser_compound_add_geom(LWGEOM *col, LWGEOM *geom) { LWDEBUG(4,"entered"); /* Toss error on null geometry input */ if( ! (geom && col) ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } /* All the elements must agree on dimensionality */ if( FLAGS_NDIMS(col->flags) != FLAGS_NDIMS(geom->flags) ) { lwgeom_free(col); lwgeom_free(geom); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } if( LW_FAILURE == lwcompound_add_lwgeom((LWCOMPOUND*)col, geom) ) { lwgeom_free(col); lwgeom_free(geom); SET_PARSER_ERROR(PARSER_ERROR_INCONTINUOUS); return NULL; } return col; } LWGEOM* wkt_parser_collection_add_geom(LWGEOM *col, LWGEOM *geom) { LWDEBUG(4,"entered"); /* Toss error on null geometry input */ if( ! (geom && col) ) { SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } /* All the elements must agree on dimensionality */ if( FLAGS_NDIMS(col->flags) != FLAGS_NDIMS(geom->flags) ) { lwgeom_free(col); lwgeom_free(geom); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } return lwcollection_as_lwgeom(lwcollection_add_lwgeom(lwgeom_as_lwcollection(col), geom)); } LWGEOM* wkt_parser_collection_finalize(int lwtype, LWGEOM *col, char *dimensionality) { uint8_t flags = wkt_dimensionality(dimensionality); int flagdims = FLAGS_NDIMS(flags); /* No geometry means it is empty */ if( ! col ) { return lwcollection_as_lwgeom(lwcollection_construct_empty(lwtype, SRID_UNKNOWN, FLAGS_GET_Z(flags), FLAGS_GET_M(flags))); } /* There are 'Z' or 'M' tokens in the signature */ if ( flagdims > 2 ) { /* If the number of dimensions are not consistent, we have a problem. */ if( flagdims != FLAGS_NDIMS(col->flags) ) { lwgeom_free(col); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* For GEOMETRYCOLLECTION, the exact type of the dimensions must match too */ if( lwtype == COLLECTIONTYPE && ( (FLAGS_GET_Z(flags) != FLAGS_GET_Z(col->flags)) || (FLAGS_GET_M(flags) != FLAGS_GET_M(col->flags)) ) ) { lwgeom_free(col); SET_PARSER_ERROR(PARSER_ERROR_MIXDIMS); return NULL; } /* Harmonize the collection dimensionality */ if( LW_FAILURE == wkt_parser_set_dims(col, flags) ) { lwgeom_free(col); SET_PARSER_ERROR(PARSER_ERROR_OTHER); return NULL; } } /* Set the collection type */ col->type=lwtype; return col; } void wkt_parser_geometry_new(LWGEOM *geom, int srid) { LWDEBUG(4,"entered"); LWDEBUGF(4,"geom %p",geom); LWDEBUGF(4,"srid %d",srid); if ( geom == NULL ) { lwerror("Parsed geometry is null!"); return; } if ( srid != SRID_UNKNOWN && srid < SRID_MAXIMUM ) lwgeom_set_srid(geom, srid); else lwgeom_set_srid(geom, SRID_UNKNOWN); global_parser_result.geom = geom; } void lwgeom_parser_result_init(LWGEOM_PARSER_RESULT *parser_result) { memset(parser_result, 0, sizeof(LWGEOM_PARSER_RESULT)); } void lwgeom_parser_result_free(LWGEOM_PARSER_RESULT *parser_result) { if ( parser_result->geom ) { lwgeom_free(parser_result->geom); parser_result->geom = 0; } if ( parser_result->serialized_lwgeom ) { lwfree(parser_result->serialized_lwgeom ); parser_result->serialized_lwgeom = 0; } /* We don't free parser_result->message because it is a const *char */ } /* * Public function used for easy access to the parser. */ LWGEOM *lwgeom_from_wkt(const char *wkt, const char check) { LWGEOM_PARSER_RESULT r; if( LW_FAILURE == lwgeom_parse_wkt(&r, (char*)wkt, check) ) { lwerror(r.message); return NULL; } return r.geom; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_debug.c����������������������������������������������������0000644�0000000�0000000�00000007401�12076307722�020355� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2004 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "lwgeom_log.h" #include "liblwgeom.h" #include <stdio.h> #include <string.h> /* Place to hold the ZM string used in other summaries */ static char tflags[6]; static char * lwgeom_flagchars(LWGEOM *lwg) { int flagno = 0; if ( FLAGS_GET_Z(lwg->flags) ) tflags[flagno++] = 'Z'; if ( FLAGS_GET_M(lwg->flags) ) tflags[flagno++] = 'M'; if ( FLAGS_GET_BBOX(lwg->flags) ) tflags[flagno++] = 'B'; if ( FLAGS_GET_GEODETIC(lwg->flags) ) tflags[flagno++] = 'G'; if ( lwg->srid != SRID_UNKNOWN ) tflags[flagno++] = 'S'; tflags[flagno] = '\0'; LWDEBUGF(4, "Flags: %s - returning %p", flags, tflags); return tflags; } /* * Returns an alloced string containing summary for the LWGEOM object */ static char * lwpoint_summary(LWPOINT *point, int offset) { char *result; char *pad=""; char *zmflags = lwgeom_flagchars((LWGEOM*)point); result = (char *)lwalloc(128+offset); sprintf(result, "%*.s%s[%s]", offset, pad, lwtype_name(point->type), zmflags); return result; } static char * lwline_summary(LWLINE *line, int offset) { char *result; char *pad=""; char *zmflags = lwgeom_flagchars((LWGEOM*)line); result = (char *)lwalloc(128+offset); sprintf(result, "%*.s%s[%s] with %d points", offset, pad, lwtype_name(line->type), zmflags, line->points->npoints); return result; } static char * lwcollection_summary(LWCOLLECTION *col, int offset) { size_t size = 128; char *result; char *tmp; int i; static char *nl = "\n"; char *pad=""; char *zmflags = lwgeom_flagchars((LWGEOM*)col); LWDEBUG(2, "lwcollection_summary called"); result = (char *)lwalloc(size); sprintf(result, "%*.s%s[%s] with %d elements\n", offset, pad, lwtype_name(col->type), zmflags, col->ngeoms); for (i=0; i<col->ngeoms; i++) { tmp = lwgeom_summary(col->geoms[i], offset+2); size += strlen(tmp)+1; result = lwrealloc(result, size); LWDEBUGF(4, "Reallocated %d bytes for result", size); if ( i > 0 ) strcat(result,nl); strcat(result, tmp); lwfree(tmp); } LWDEBUG(3, "lwcollection_summary returning"); return result; } static char * lwpoly_summary(LWPOLY *poly, int offset) { char tmp[256]; size_t size = 64*(poly->nrings+1)+128; char *result; int i; char *pad=""; static char *nl = "\n"; char *zmflags = lwgeom_flagchars((LWGEOM*)poly); LWDEBUG(2, "lwpoly_summary called"); result = (char *)lwalloc(size); sprintf(result, "%*.s%s[%s] with %i rings\n", offset, pad, lwtype_name(poly->type), zmflags, poly->nrings); for (i=0; i<poly->nrings; i++) { sprintf(tmp,"%s ring %i has %i points", pad, i, poly->rings[i]->npoints); if ( i > 0 ) strcat(result,nl); strcat(result,tmp); } LWDEBUG(3, "lwpoly_summary returning"); return result; } char * lwgeom_summary(const LWGEOM *lwgeom, int offset) { char *result; switch (lwgeom->type) { case POINTTYPE: return lwpoint_summary((LWPOINT *)lwgeom, offset); case LINETYPE: return lwline_summary((LWLINE *)lwgeom, offset); case POLYGONTYPE: return lwpoly_summary((LWPOLY *)lwgeom, offset); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: return lwcollection_summary((LWCOLLECTION *)lwgeom, offset); default: result = (char *)lwalloc(256); sprintf(result, "Object is of unknown type: %d", lwgeom->type); return result; } return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwcollection.c����������������������������������������������������0000644�0000000�0000000�00000031326�12062320470�020404� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" #define CHECK_LWGEOM_ZM 1 void lwcollection_release(LWCOLLECTION *lwcollection) { lwgeom_release(lwcollection_as_lwgeom(lwcollection)); } LWCOLLECTION * lwcollection_construct(uint8_t type, int srid, GBOX *bbox, uint32_t ngeoms, LWGEOM **geoms) { LWCOLLECTION *ret; int hasz, hasm; #ifdef CHECK_LWGEOM_ZM char zm; uint32_t i; #endif LWDEBUGF(2, "lwcollection_construct called with %d, %d, %p, %d, %p.", type, srid, bbox, ngeoms, geoms); if( ! lwtype_is_collection(type) ) lwerror("Non-collection type specified in collection constructor!"); hasz = 0; hasm = 0; if ( ngeoms > 0 ) { hasz = FLAGS_GET_Z(geoms[0]->flags); hasm = FLAGS_GET_M(geoms[0]->flags); #ifdef CHECK_LWGEOM_ZM zm = FLAGS_GET_ZM(geoms[0]->flags); LWDEBUGF(3, "lwcollection_construct type[0]=%d", geoms[0]->type); for (i=1; i<ngeoms; i++) { LWDEBUGF(3, "lwcollection_construct type=[%d]=%d", i, geoms[i]->type); if ( zm != FLAGS_GET_ZM(geoms[i]->flags) ) lwerror("lwcollection_construct: mixed dimension geometries: %d/%d", zm, FLAGS_GET_ZM(geoms[i]->flags)); } #endif } ret = lwalloc(sizeof(LWCOLLECTION)); ret->type = type; ret->flags = gflags(hasz,hasm,0); FLAGS_SET_BBOX(ret->flags, bbox?1:0); ret->srid = srid; ret->ngeoms = ngeoms; ret->maxgeoms = ngeoms; ret->geoms = geoms; ret->bbox = bbox; return ret; } LWCOLLECTION * lwcollection_construct_empty(uint8_t type, int srid, char hasz, char hasm) { LWCOLLECTION *ret; if( ! lwtype_is_collection(type) ) lwerror("Non-collection type specified in collection constructor!"); ret = lwalloc(sizeof(LWCOLLECTION)); ret->type = type; ret->flags = gflags(hasz,hasm,0); ret->srid = srid; ret->ngeoms = 0; ret->maxgeoms = 1; /* Allocate room for sub-members, just in case. */ ret->geoms = lwalloc(ret->maxgeoms * sizeof(LWGEOM*)); ret->bbox = NULL; return ret; } LWGEOM * lwcollection_getsubgeom(LWCOLLECTION *col, int gnum) { return (LWGEOM *)col->geoms[gnum]; } /** * @brief Clone #LWCOLLECTION object. #POINTARRAY are not copied. * Bbox is cloned if present in input. */ LWCOLLECTION * lwcollection_clone(const LWCOLLECTION *g) { uint32_t i; LWCOLLECTION *ret = lwalloc(sizeof(LWCOLLECTION)); memcpy(ret, g, sizeof(LWCOLLECTION)); if ( g->ngeoms > 0 ) { ret->geoms = lwalloc(sizeof(LWGEOM *)*g->ngeoms); for (i=0; i<g->ngeoms; i++) { ret->geoms[i] = lwgeom_clone(g->geoms[i]); } if ( g->bbox ) ret->bbox = gbox_copy(g->bbox); } else { ret->bbox = NULL; /* empty collection */ ret->geoms = NULL; } return ret; } /** * @brief Deep clone #LWCOLLECTION object. #POINTARRAY are copied. */ LWCOLLECTION * lwcollection_clone_deep(const LWCOLLECTION *g) { uint32_t i; LWCOLLECTION *ret = lwalloc(sizeof(LWCOLLECTION)); memcpy(ret, g, sizeof(LWCOLLECTION)); if ( g->ngeoms > 0 ) { ret->geoms = lwalloc(sizeof(LWGEOM *)*g->ngeoms); for (i=0; i<g->ngeoms; i++) { ret->geoms[i] = lwgeom_clone_deep(g->geoms[i]); } if ( g->bbox ) ret->bbox = gbox_copy(g->bbox); } else { ret->bbox = NULL; /* empty collection */ ret->geoms = NULL; } return ret; } /** * Ensure the collection can hold up at least ngeoms */ void lwcollection_reserve(LWCOLLECTION *col, int ngeoms) { if ( ngeoms <= col->maxgeoms ) return; /* Allocate more space if we need it */ do { col->maxgeoms *= 2; } while ( col->maxgeoms < ngeoms ); col->geoms = lwrealloc(col->geoms, sizeof(LWGEOM*) * col->maxgeoms); } /** * Appends geom to the collection managed by col. Does not copy or * clone, simply takes a reference on the passed geom. */ LWCOLLECTION* lwcollection_add_lwgeom(LWCOLLECTION *col, const LWGEOM *geom) { int i = 0; if ( col == NULL || geom == NULL ) return NULL; if ( col->geoms == NULL && (col->ngeoms || col->maxgeoms) ) { lwerror("Collection is in inconsistent state. Null memory but non-zero collection counts."); return NULL; } /* Check type compatibility */ if ( ! lwcollection_allows_subtype(col->type, geom->type) ) { lwerror("%s cannot contain %s element", lwtype_name(col->type), lwtype_name(geom->type)); return NULL; } /* In case this is a truly empty, make some initial space */ if ( col->geoms == NULL ) { col->maxgeoms = 2; col->ngeoms = 0; col->geoms = lwalloc(col->maxgeoms * sizeof(LWGEOM*)); } /* Allocate more space if we need it */ lwcollection_reserve(col, col->ngeoms + 1); /* Make sure we don't already have a reference to this geom */ /* TODO: drop this check ... */ for ( i = 0; i < col->ngeoms; i++ ) { if ( col->geoms[i] == geom ) { LWDEBUGF(4, "Found duplicate geometry in collection %p == %p", col->geoms[i], geom); return col; } } col->geoms[col->ngeoms] = (LWGEOM*)geom; col->ngeoms++; return col; } LWCOLLECTION * lwcollection_segmentize2d(LWCOLLECTION *col, double dist) { uint32_t i; LWGEOM **newgeoms; if ( ! col->ngeoms ) return lwcollection_clone(col); newgeoms = lwalloc(sizeof(LWGEOM *)*col->ngeoms); for (i=0; i<col->ngeoms; i++) newgeoms[i] = lwgeom_segmentize2d(col->geoms[i], dist); return lwcollection_construct(col->type, col->srid, NULL, col->ngeoms, newgeoms); } /** @brief check for same geometry composition * */ char lwcollection_same(const LWCOLLECTION *c1, const LWCOLLECTION *c2) { uint32_t i; LWDEBUG(2, "lwcollection_same called"); if ( c1->type != c2->type ) return LW_FALSE; if ( c1->ngeoms != c2->ngeoms ) return LW_FALSE; for ( i = 0; i < c1->ngeoms; i++ ) { if ( ! lwgeom_same(c1->geoms[i], c2->geoms[i]) ) return LW_FALSE; } /* Former method allowed out-of-order equality between collections hit = lwalloc(sizeof(uint32_t)*c1->ngeoms); memset(hit, 0, sizeof(uint32_t)*c1->ngeoms); for (i=0; i<c1->ngeoms; i++) { char found=0; for (j=0; j<c2->ngeoms; j++) { if ( hit[j] ) continue; if ( lwgeom_same(c1->geoms[i], c2->geoms[j]) ) { hit[j] = 1; found=1; break; } } if ( ! found ) return LW_FALSE; } */ return LW_TRUE; } int lwcollection_ngeoms(const LWCOLLECTION *col) { int i; int ngeoms = 0; if ( ! col ) { lwerror("Null input geometry."); return 0; } for ( i = 0; i < col->ngeoms; i++ ) { if ( col->geoms[i]) { switch (col->geoms[i]->type) { case POINTTYPE: case LINETYPE: case CIRCSTRINGTYPE: case POLYGONTYPE: ngeoms += 1; break; case MULTIPOINTTYPE: case MULTILINETYPE: case MULTICURVETYPE: case MULTIPOLYGONTYPE: ngeoms += col->ngeoms; break; case COLLECTIONTYPE: ngeoms += lwcollection_ngeoms((LWCOLLECTION*)col->geoms[i]); break; } } } return ngeoms; } void lwcollection_free(LWCOLLECTION *col) { int i; if ( ! col ) return; if ( col->bbox ) { lwfree(col->bbox); } for ( i = 0; i < col->ngeoms; i++ ) { LWDEBUGF(4,"freeing geom[%d]", i); if ( col->geoms && col->geoms[i] ) lwgeom_free(col->geoms[i]); } if ( col->geoms ) { lwfree(col->geoms); } lwfree(col); } /** * Takes a potentially heterogeneous collection and returns a homogeneous * collection consisting only of the specified type. */ LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type) { int i = 0; LWGEOM **geomlist; LWCOLLECTION *outcol; int geomlistsize = 16; int geomlistlen = 0; uint8_t outtype; if ( ! col ) return NULL; switch (type) { case POINTTYPE: outtype = MULTIPOINTTYPE; break; case LINETYPE: outtype = MULTILINETYPE; break; case POLYGONTYPE: outtype = MULTIPOLYGONTYPE; break; default: lwerror("Only POLYGON, LINESTRING and POINT are supported by lwcollection_extract. %s requested.", lwtype_name(type)); return NULL; } geomlist = lwalloc(sizeof(LWGEOM*) * geomlistsize); /* Process each sub-geometry */ for ( i = 0; i < col->ngeoms; i++ ) { int subtype = col->geoms[i]->type; /* Don't bother adding empty sub-geometries */ if ( lwgeom_is_empty(col->geoms[i]) ) { continue; } /* Copy our sub-types into the output list */ if ( subtype == type ) { /* We've over-run our buffer, double the memory segment */ if ( geomlistlen == geomlistsize ) { geomlistsize *= 2; geomlist = lwrealloc(geomlist, sizeof(LWGEOM*) * geomlistsize); } geomlist[geomlistlen] = lwgeom_clone(col->geoms[i]); geomlistlen++; } /* Recurse into sub-collections */ if ( lwtype_is_collection( subtype ) ) { int j = 0; LWCOLLECTION *tmpcol = lwcollection_extract((LWCOLLECTION*)col->geoms[i], type); for ( j = 0; j < tmpcol->ngeoms; j++ ) { /* We've over-run our buffer, double the memory segment */ if ( geomlistlen == geomlistsize ) { geomlistsize *= 2; geomlist = lwrealloc(geomlist, sizeof(LWGEOM*) * geomlistsize); } geomlist[geomlistlen] = tmpcol->geoms[j]; geomlistlen++; } lwfree(tmpcol); } } if ( geomlistlen > 0 ) { GBOX gbox; outcol = lwcollection_construct(outtype, col->srid, NULL, geomlistlen, geomlist); lwgeom_calculate_gbox((LWGEOM *) outcol, &gbox); outcol->bbox = gbox_copy(&gbox); } else { lwfree(geomlist); outcol = lwcollection_construct_empty(outtype, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags)); } return outcol; } LWGEOM* lwcollection_remove_repeated_points(LWCOLLECTION *coll) { uint32_t i; LWGEOM **newgeoms; newgeoms = lwalloc(sizeof(LWGEOM *)*coll->ngeoms); for (i=0; i<coll->ngeoms; i++) { newgeoms[i] = lwgeom_remove_repeated_points(coll->geoms[i]); } return (LWGEOM*)lwcollection_construct(coll->type, coll->srid, coll->bbox ? gbox_copy(coll->bbox) : NULL, coll->ngeoms, newgeoms); } LWCOLLECTION* lwcollection_force_dims(const LWCOLLECTION *col, int hasz, int hasm) { LWCOLLECTION *colout; /* Return 2D empty */ if( lwcollection_is_empty(col) ) { colout = lwcollection_construct_empty(col->type, col->srid, hasz, hasm); } else { int i; LWGEOM **geoms = NULL; geoms = lwalloc(sizeof(LWGEOM*) * col->ngeoms); for( i = 0; i < col->ngeoms; i++ ) { geoms[i] = lwgeom_force_dims(col->geoms[i], hasz, hasm); } colout = lwcollection_construct(col->type, col->srid, NULL, col->ngeoms, geoms); } return colout; } int lwcollection_is_empty(const LWCOLLECTION *col) { int i; if ( (col->ngeoms == 0) || (!col->geoms) ) return LW_TRUE; for( i = 0; i < col->ngeoms; i++ ) { if ( ! lwgeom_is_empty(col->geoms[i]) ) return LW_FALSE; } return LW_TRUE; } int lwcollection_count_vertices(LWCOLLECTION *col) { int i = 0; int v = 0; /* vertices */ assert(col); for ( i = 0; i < col->ngeoms; i++ ) { v += lwgeom_count_vertices(col->geoms[i]); } return v; } LWCOLLECTION* lwcollection_simplify(const LWCOLLECTION *igeom, double dist) { int i; LWCOLLECTION *out = lwcollection_construct_empty(igeom->type, igeom->srid, FLAGS_GET_Z(igeom->flags), FLAGS_GET_M(igeom->flags)); if( lwcollection_is_empty(igeom) ) return out; /* should we return NULL instead ? */ for( i = 0; i < igeom->ngeoms; i++ ) { LWGEOM *ngeom = lwgeom_simplify(igeom->geoms[i], dist); if ( ngeom ) out = lwcollection_add_lwgeom(out, ngeom); } return out; } int lwcollection_allows_subtype(int collectiontype, int subtype) { if ( collectiontype == COLLECTIONTYPE ) return LW_TRUE; if ( collectiontype == MULTIPOINTTYPE && subtype == POINTTYPE ) return LW_TRUE; if ( collectiontype == MULTILINETYPE && subtype == LINETYPE ) return LW_TRUE; if ( collectiontype == MULTIPOLYGONTYPE && subtype == POLYGONTYPE ) return LW_TRUE; if ( collectiontype == COMPOUNDTYPE && (subtype == LINETYPE || subtype == CIRCSTRINGTYPE) ) return LW_TRUE; if ( collectiontype == CURVEPOLYTYPE && (subtype == CIRCSTRINGTYPE || subtype == LINETYPE || subtype == COMPOUNDTYPE) ) return LW_TRUE; if ( collectiontype == MULTICURVETYPE && (subtype == CIRCSTRINGTYPE || subtype == LINETYPE || subtype == COMPOUNDTYPE) ) return LW_TRUE; if ( collectiontype == MULTISURFACETYPE && (subtype == POLYGONTYPE || subtype == CURVEPOLYTYPE) ) return LW_TRUE; if ( collectiontype == POLYHEDRALSURFACETYPE && subtype == POLYGONTYPE ) return LW_TRUE; if ( collectiontype == TINTYPE && subtype == TRIANGLETYPE ) return LW_TRUE; /* Must be a bad combination! */ return LW_FALSE; } int lwcollection_startpoint(const LWCOLLECTION* col, POINT4D* pt) { if ( col->ngeoms < 1 ) return LW_FAILURE; return lwgeom_startpoint(col->geoms[0], pt); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/liblwgeom_internal.h����������������������������������������������0000644�0000000�0000000�00000032335�12140633506�021575� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2011-2012 Sandro Santilli <strk@keybit.net> * Copyright (C) 2011 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright (C) 2007-2008 Mark Cave-Ayland * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef _LIBLWGEOM_INTERNAL_H #define _LIBLWGEOM_INTERNAL_H 1 #include "../postgis_config.h" #include <assert.h> #include <stdarg.h> #include <stdint.h> #include <stdio.h> #include <string.h> #if HAVE_IEEEFP_H #include <ieeefp.h> #endif #include "liblwgeom.h" /** * PI */ #define PI 3.1415926535897932384626433832795 /** * Floating point comparitors. */ #define FP_TOLERANCE 1e-12 #define FP_IS_ZERO(A) (fabs(A) <= FP_TOLERANCE) #define FP_MAX(A, B) (((A) > (B)) ? (A) : (B)) #define FP_MIN(A, B) (((A) < (B)) ? (A) : (B)) #define FP_ABS(a) ((a) < (0) ? -(a) : (a)) #define FP_EQUALS(A, B) (fabs((A)-(B)) <= FP_TOLERANCE) #define FP_NEQUALS(A, B) (fabs((A)-(B)) > FP_TOLERANCE) #define FP_LT(A, B) (((A) + FP_TOLERANCE) < (B)) #define FP_LTEQ(A, B) (((A) - FP_TOLERANCE) <= (B)) #define FP_GT(A, B) (((A) - FP_TOLERANCE) > (B)) #define FP_GTEQ(A, B) (((A) + FP_TOLERANCE) >= (B)) #define FP_CONTAINS_TOP(A, X, B) (FP_LT(A, X) && FP_LTEQ(X, B)) #define FP_CONTAINS_BOTTOM(A, X, B) (FP_LTEQ(A, X) && FP_LT(X, B)) #define FP_CONTAINS_INCL(A, X, B) (FP_LTEQ(A, X) && FP_LTEQ(X, B)) #define FP_CONTAINS_EXCL(A, X, B) (FP_LT(A, X) && FP_LT(X, B)) #define FP_CONTAINS(A, X, B) FP_CONTAINS_EXCL(A, X, B) /** * Largest float value. Should this be from math.h instead? */ #ifndef MAXFLOAT #define MAXFLOAT 3.402823466e+38F #endif /* for the measure functions*/ #define DIST_MAX -1 #define DIST_MIN 1 /* * this will change to NaN when I figure out how to * get NaN in a platform-independent way */ #define NO_VALUE 0.0 #define NO_Z_VALUE NO_VALUE #define NO_M_VALUE NO_VALUE /** * Well-Known Text (WKT) Output Variant Types */ #define WKT_NO_TYPE 0x08 /* Internal use only */ #define WKT_NO_PARENS 0x10 /* Internal use only */ #define WKT_IS_CHILD 0x20 /* Internal use only */ /** * Well-Known Binary (WKB) Output Variant Types */ #define WKB_DOUBLE_SIZE 8 /* Internal use only */ #define WKB_INT_SIZE 4 /* Internal use only */ #define WKB_BYTE_SIZE 1 /* Internal use only */ /** * Well-Known Binary (WKB) Geometry Types */ #define WKB_POINT_TYPE 1 #define WKB_LINESTRING_TYPE 2 #define WKB_POLYGON_TYPE 3 #define WKB_MULTIPOINT_TYPE 4 #define WKB_MULTILINESTRING_TYPE 5 #define WKB_MULTIPOLYGON_TYPE 6 #define WKB_GEOMETRYCOLLECTION_TYPE 7 #define WKB_CIRCULARSTRING_TYPE 8 #define WKB_COMPOUNDCURVE_TYPE 9 #define WKB_CURVEPOLYGON_TYPE 10 #define WKB_MULTICURVE_TYPE 11 #define WKB_MULTISURFACE_TYPE 12 #define WKB_CURVE_TYPE 13 /* from ISO draft, not sure is real */ #define WKB_SURFACE_TYPE 14 /* from ISO draft, not sure is real */ #define WKB_POLYHEDRALSURFACE_TYPE 15 #define WKB_TIN_TYPE 16 #define WKB_TRIANGLE_TYPE 17 /** * Macro for reading the size from the GSERIALIZED size attribute. * Cribbed from PgSQL, top 30 bits are size. Use VARSIZE() when working * internally with PgSQL. */ #define SIZE_GET(varsize) (((varsize) >> 2) & 0x3FFFFFFF) #define SIZE_SET(varsize, size) (((varsize) & 0x00000003)|(((size) & 0x3FFFFFFF) << 2 )) /** * Tolerance used to determine equality. */ #define EPSILON_SQLMM 1e-8 /* * Export functions */ #define OUT_MAX_DOUBLE 1E15 #define OUT_SHOW_DIGS_DOUBLE 20 #define OUT_MAX_DOUBLE_PRECISION 15 #define OUT_MAX_DIGS_DOUBLE (OUT_SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */ /** * Constants for point-in-polygon return values */ #define LW_INSIDE 1 #define LW_BOUNDARY 0 #define LW_OUTSIDE -1 /* * Internal prototypes */ /* Machine endianness */ #define XDR 0 /* big endian */ #define NDR 1 /* little endian */ extern char getMachineEndian(void); /* Raise an lwerror if srids do not match */ void error_if_srid_mismatch(int srid1, int srid2); /* * Force dims */ LWGEOM* lwgeom_force_dims(const LWGEOM *lwgeom, int hasz, int hasm); LWPOINT* lwpoint_force_dims(const LWPOINT *lwpoint, int hasz, int hasm); LWLINE* lwline_force_dims(const LWLINE *lwline, int hasz, int hasm); LWPOLY* lwpoly_force_dims(const LWPOLY *lwpoly, int hasz, int hasm); LWCOLLECTION* lwcollection_force_dims(const LWCOLLECTION *lwcol, int hasz, int hasm); POINTARRAY* ptarray_force_dims(const POINTARRAY *pa, int hasz, int hasm); /* * Is Empty? */ int lwpoly_is_empty(const LWPOLY *poly); int lwcollection_is_empty(const LWCOLLECTION *col); int lwcircstring_is_empty(const LWCIRCSTRING *circ); int lwtriangle_is_empty(const LWTRIANGLE *triangle); int lwline_is_empty(const LWLINE *line); int lwpoint_is_empty(const LWPOINT *point); /* * Number of vertices? */ int lwline_count_vertices(LWLINE *line); int lwpoly_count_vertices(LWPOLY *poly); int lwcollection_count_vertices(LWCOLLECTION *col); /* * Read from byte buffer */ extern uint32_t lw_get_uint32_t(const uint8_t *loc); extern int32_t lw_get_int32_t(const uint8_t *loc); /* * DP simplification */ /** * @param minpts minimun number of points to retain, if possible. */ POINTARRAY* ptarray_simplify(POINTARRAY *inpts, double epsilon, unsigned int minpts); LWLINE* lwline_simplify(const LWLINE *iline, double dist); LWPOLY* lwpoly_simplify(const LWPOLY *ipoly, double dist); LWCOLLECTION* lwcollection_simplify(const LWCOLLECTION *igeom, double dist); /* * Computational geometry */ int signum(double n); /* * The possible ways a pair of segments can interact. Returned by lw_segment_intersects */ enum CG_SEGMENT_INTERSECTION_TYPE { SEG_ERROR = -1, SEG_NO_INTERSECTION = 0, SEG_COLINEAR = 1, SEG_CROSS_LEFT = 2, SEG_CROSS_RIGHT = 3, SEG_TOUCH_LEFT = 4, SEG_TOUCH_RIGHT = 5 }; /* * Do the segments intersect? How? */ int lw_segment_intersects(const POINT2D *p1, const POINT2D *p2, const POINT2D *q1, const POINT2D *q2); /* * Get/Set an enumeratoed ordinate. (x,y,z,m) */ double lwpoint_get_ordinate(const POINT4D *p, char ordinate); void lwpoint_set_ordinate(POINT4D *p, char ordinate, double value); /* * Generate an interpolated coordinate p given an interpolation value and ordinate to apply it to */ int point_interpolate(const POINT4D *p1, const POINT4D *p2, POINT4D *p, int hasz, int hasm, char ordinate, double interpolation_value); /** * Clip a line based on the from/to range of one of its ordinates. Use for m- and z- clipping */ LWCOLLECTION *lwline_clip_to_ordinate_range(const LWLINE *line, char ordinate, double from, double to); /** * Clip a multi-line based on the from/to range of one of its ordinates. Use for m- and z- clipping */ LWCOLLECTION *lwmline_clip_to_ordinate_range(const LWMLINE *mline, char ordinate, double from, double to); /** * Clip a multi-point based on the from/to range of one of its ordinates. Use for m- and z- clipping */ LWCOLLECTION *lwmpoint_clip_to_ordinate_range(const LWMPOINT *mpoint, char ordinate, double from, double to); /** * Clip a point based on the from/to range of one of its ordinates. Use for m- and z- clipping */ LWCOLLECTION *lwpoint_clip_to_ordinate_range(const LWPOINT *mpoint, char ordinate, double from, double to); /* * Geohash */ int lwgeom_geohash_precision(GBOX bbox, GBOX *bounds); char *geohash_point(double longitude, double latitude, int precision); void decode_geohash_bbox(char *geohash, double *lat, double *lon, int precision); /* * Point comparisons */ int p4d_same(const POINT4D *p1, const POINT4D *p2); int p3d_same(const POINT3D *p1, const POINT3D *p2); int p2d_same(const POINT2D *p1, const POINT2D *p2); /* * Area calculations */ double lwpoly_area(const LWPOLY *poly); double lwcurvepoly_area(const LWCURVEPOLY *curvepoly); double lwtriangle_area(const LWTRIANGLE *triangle); /** * Pull a #GBOX from the header of a #GSERIALIZED, if one is available. If * it is not, return LW_FAILURE. */ extern int gserialized_read_gbox_p(const GSERIALIZED *g, GBOX *gbox); /* * Length calculations */ double lwcompound_length(const LWCOMPOUND *comp); double lwcompound_length_2d(const LWCOMPOUND *comp); double lwline_length(const LWLINE *line); double lwline_length_2d(const LWLINE *line); double lwcircstring_length(const LWCIRCSTRING *circ); double lwcircstring_length_2d(const LWCIRCSTRING *circ); double lwpoly_perimeter(const LWPOLY *poly); double lwpoly_perimeter_2d(const LWPOLY *poly); double lwcurvepoly_perimeter(const LWCURVEPOLY *poly); double lwcurvepoly_perimeter_2d(const LWCURVEPOLY *poly); double lwtriangle_perimeter(const LWTRIANGLE *triangle); double lwtriangle_perimeter_2d(const LWTRIANGLE *triangle); /* * Segmentization */ LWLINE *lwcircstring_segmentize(const LWCIRCSTRING *icurve, uint32_t perQuad); LWLINE *lwcompound_segmentize(const LWCOMPOUND *icompound, uint32_t perQuad); LWPOLY *lwcurvepoly_segmentize(const LWCURVEPOLY *curvepoly, uint32_t perQuad); /* * Affine */ void ptarray_affine(POINTARRAY *pa, const AFFINE *affine); /* * PointArray */ int ptarray_isccw(const POINTARRAY *pa); int ptarray_has_z(const POINTARRAY *pa); int ptarray_has_m(const POINTARRAY *pa); double ptarray_signed_area(const POINTARRAY *pa); /* * Clone support */ LWLINE *lwline_clone(const LWLINE *lwgeom); LWPOLY *lwpoly_clone(const LWPOLY *lwgeom); LWTRIANGLE *lwtriangle_clone(const LWTRIANGLE *lwgeom); LWCOLLECTION *lwcollection_clone(const LWCOLLECTION *lwgeom); LWCIRCSTRING *lwcircstring_clone(const LWCIRCSTRING *curve); POINTARRAY *ptarray_clone(const POINTARRAY *ptarray); GBOX *box2d_clone(const GBOX *lwgeom); LWLINE *lwline_clone_deep(const LWLINE *lwgeom); LWPOLY *lwpoly_clone_deep(const LWPOLY *lwgeom); LWCOLLECTION *lwcollection_clone_deep(const LWCOLLECTION *lwgeom); GBOX *gbox_clone(const GBOX *gbox); /* * Startpoint */ int lwpoly_startpoint(const LWPOLY* lwpoly, POINT4D* pt); int ptarray_startpoint(const POINTARRAY* pa, POINT4D* pt); int lwcollection_startpoint(const LWCOLLECTION* col, POINT4D* pt); /* * Write into *ret the coordinates of the closest point on * segment A-B to the reference input point R */ void closest_point_on_segment(const POINT4D *R, const POINT4D *A, const POINT4D *B, POINT4D *ret); /* * Repeated points */ POINTARRAY *ptarray_remove_repeated_points(POINTARRAY *in); LWGEOM* lwmpoint_remove_repeated_points(LWMPOINT *in); LWGEOM* lwline_remove_repeated_points(LWLINE *in); LWGEOM* lwcollection_remove_repeated_points(LWCOLLECTION *in); LWGEOM* lwpoly_remove_repeated_points(LWPOLY *in); /* * Closure test */ int lwline_is_closed(const LWLINE *line); int lwpoly_is_closed(const LWPOLY *poly); int lwcircstring_is_closed(const LWCIRCSTRING *curve); int lwcompound_is_closed(const LWCOMPOUND *curve); int lwpsurface_is_closed(const LWPSURFACE *psurface); int lwtin_is_closed(const LWTIN *tin); /* * What side of the line formed by p1 and p2 does q fall? * Returns -1 for left and 1 for right and 0 for co-linearity */ int lw_segment_side(const POINT2D *p1, const POINT2D *p2, const POINT2D *q); int lw_arc_side(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, const POINT2D *Q); int lw_arc_calculate_gbox_cartesian_2d(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, GBOX *gbox); double lw_arc_center(const POINT2D *p1, const POINT2D *p2, const POINT2D *p3, POINT2D *result); int lw_pt_in_seg(const POINT2D *P, const POINT2D *A1, const POINT2D *A2); int lw_pt_in_arc(const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3); int lw_arc_is_pt(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3); double lw_seg_length(const POINT2D *A1, const POINT2D *A2); double lw_arc_length(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3); int pt_in_ring_2d(const POINT2D *p, const POINTARRAY *ring); int ptarray_contains_point(const POINTARRAY *pa, const POINT2D *pt); int ptarrayarc_contains_point(const POINTARRAY *pa, const POINT2D *pt); int ptarray_contains_point_partial(const POINTARRAY *pa, const POINT2D *pt, int check_closed, int *winding_number); int ptarrayarc_contains_point_partial(const POINTARRAY *pa, const POINT2D *pt, int check_closed, int *winding_number); int lwcompound_contains_point(const LWCOMPOUND *comp, const POINT2D *pt); int lwgeom_contains_point(const LWGEOM *geom, const POINT2D *pt); /** * Split a line by a point and push components to the provided multiline. * If the point doesn't split the line, push nothing to the container. * Returns 0 if the point is off the line. * Returns 1 if the point is on the line boundary (endpoints). * Return 2 if the point is on the interior of the line (only case in which * a split happens). * * NOTE: the components pushed to the output vector have their SRID stripped */ int lwline_split_by_point_to(const LWLINE* ln, const LWPOINT* pt, LWMLINE* to); /** Ensure the collection can hold at least up to ngeoms geometries */ void lwcollection_reserve(LWCOLLECTION *col, int ngeoms); /** Check if subtype is allowed in collectiontype */ extern int lwcollection_allows_subtype(int collectiontype, int subtype); /** GBOX utility functions to figure out coverage/location on the globe */ double gbox_angular_height(const GBOX* gbox); double gbox_angular_width(const GBOX* gbox); int gbox_centroid(const GBOX* gbox, POINT2D* out); /* Utilities */ extern void trim_trailing_zeros(char *num); #endif /* _LIBLWGEOM_INTERNAL_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/measures.c��������������������������������������������������������0000644�0000000�0000000�00000171457�12203471537�017554� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2006 Refractions Research Inc. * Copyright 2010 Nicklas Avén * Copyright 2012 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <string.h> #include <stdlib.h> #include "measures.h" #include "lwgeom_log.h" /*------------------------------------------------------------------------------------------------------------ Initializing functions The functions starting the distance-calculation processses --------------------------------------------------------------------------------------------------------------*/ void lw_dist2d_distpts_init(DISTPTS *dl, int mode) { dl->twisted = -1; dl->p1.x = dl->p1.y = 0.0; dl->p2.x = dl->p2.y = 0.0; dl->mode = mode; dl->tolerance = 0.0; if ( mode == DIST_MIN ) dl->distance = MAXFLOAT; else dl->distance = -1 * MAXFLOAT; } /** Function initializing shortestline and longestline calculations. */ LWGEOM * lw_dist2d_distanceline(LWGEOM *lw1, LWGEOM *lw2, int srid, int mode) { double x1,x2,y1,y2; double initdistance = ( mode == DIST_MIN ? MAXFLOAT : -1.0); DISTPTS thedl; LWPOINT *lwpoints[2]; LWGEOM *result; thedl.mode = mode; thedl.distance = initdistance; thedl.tolerance = 0.0; LWDEBUG(2, "lw_dist2d_distanceline is called"); if (!lw_dist2d_comp( lw1,lw2,&thedl)) { /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } /*if thedl.distance is unchanged there where only empty geometries input*/ if (thedl.distance == initdistance) { LWDEBUG(3, "didn't find geometries to measure between, returning null"); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } else { x1=thedl.p1.x; y1=thedl.p1.y; x2=thedl.p2.x; y2=thedl.p2.y; lwpoints[0] = lwpoint_make2d(srid, x1, y1); lwpoints[1] = lwpoint_make2d(srid, x2, y2); result = (LWGEOM *)lwline_from_ptarray(srid, 2, lwpoints); } return result; } /** Function initializing closestpoint calculations. */ LWGEOM * lw_dist2d_distancepoint(LWGEOM *lw1, LWGEOM *lw2,int srid,int mode) { double x,y; DISTPTS thedl; double initdistance = MAXFLOAT; LWGEOM *result; thedl.mode = mode; thedl.distance= initdistance; thedl.tolerance = 0; LWDEBUG(2, "lw_dist2d_distancepoint is called"); if (!lw_dist2d_comp( lw1,lw2,&thedl)) { /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } if (thedl.distance == initdistance) { LWDEBUG(3, "didn't find geometries to measure between, returning null"); result = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, srid, 0, 0); } else { x=thedl.p1.x; y=thedl.p1.y; result = (LWGEOM *)lwpoint_make2d(srid, x, y); } return result; } /** Function initialazing max distance calculation */ double lwgeom_maxdistance2d(LWGEOM *lw1, LWGEOM *lw2) { LWDEBUG(2, "lwgeom_maxdistance2d is called"); return lwgeom_maxdistance2d_tolerance( lw1, lw2, 0.0 ); } /** Function handling max distance calculations and dfyllywithin calculations. The difference is just the tolerance. */ double lwgeom_maxdistance2d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance) { /*double thedist;*/ DISTPTS thedl; LWDEBUG(2, "lwgeom_maxdistance2d_tolerance is called"); thedl.mode = DIST_MAX; thedl.distance= -1; thedl.tolerance = tolerance; if (lw_dist2d_comp( lw1,lw2,&thedl)) { return thedl.distance; } /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); return -1; } /** Function initialazing min distance calculation */ double lwgeom_mindistance2d(LWGEOM *lw1, LWGEOM *lw2) { LWDEBUG(2, "lwgeom_mindistance2d is called"); return lwgeom_mindistance2d_tolerance( lw1, lw2, 0.0 ); } /** Function handling min distance calculations and dwithin calculations. The difference is just the tolerance. */ double lwgeom_mindistance2d_tolerance(LWGEOM *lw1, LWGEOM *lw2, double tolerance) { DISTPTS thedl; LWDEBUG(2, "lwgeom_mindistance2d_tolerance is called"); thedl.mode = DIST_MIN; thedl.distance= MAXFLOAT; thedl.tolerance = tolerance; if (lw_dist2d_comp( lw1,lw2,&thedl)) { return thedl.distance; } /*should never get here. all cases ought to be error handled earlier*/ lwerror("Some unspecified error."); return MAXFLOAT; } /*------------------------------------------------------------------------------------------------------------ End of Initializing functions --------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------ Preprocessing functions Functions preparing geometries for distance-calculations --------------------------------------------------------------------------------------------------------------*/ /** This function just deserializes geometries Bboxes is not checked here since it is the subgeometries bboxes we will use anyway. */ int lw_dist2d_comp(LWGEOM *lw1, LWGEOM *lw2, DISTPTS *dl) { LWDEBUG(2, "lw_dist2d_comp is called"); return lw_dist2d_recursive(lw1, lw2, dl); } static int lw_dist2d_is_collection(const LWGEOM *g) { switch (g->type) { case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case COMPOUNDTYPE: case POLYHEDRALSURFACETYPE: return LW_TRUE; break; default: return LW_FALSE; } } /** This is a recursive function delivering every possible combinatin of subgeometries */ int lw_dist2d_recursive(const LWGEOM *lwg1, const LWGEOM *lwg2, DISTPTS *dl) { int i, j; int n1=1; int n2=1; LWGEOM *g1 = NULL; LWGEOM *g2 = NULL; LWCOLLECTION *c1 = NULL; LWCOLLECTION *c2 = NULL; LWDEBUGF(2, "lw_dist2d_comp is called with type1=%d, type2=%d", lwg1->type, lwg2->type); if (lw_dist2d_is_collection(lwg1)) { LWDEBUG(3, "First geometry is collection"); c1 = lwgeom_as_lwcollection(lwg1); n1 = c1->ngeoms; } if (lw_dist2d_is_collection(lwg2)) { LWDEBUG(3, "Second geometry is collection"); c2 = lwgeom_as_lwcollection(lwg2); n2 = c2->ngeoms; } for ( i = 0; i < n1; i++ ) { if (lw_dist2d_is_collection(lwg1)) { g1 = c1->geoms[i]; } else { g1 = (LWGEOM*)lwg1; } if (lwgeom_is_empty(g1)) return LW_TRUE; if (lw_dist2d_is_collection(g1)) { LWDEBUG(3, "Found collection inside first geometry collection, recursing"); if (!lw_dist2d_recursive(g1, lwg2, dl)) return LW_FALSE; continue; } for ( j = 0; j < n2; j++ ) { if (lw_dist2d_is_collection(lwg2)) { g2 = c2->geoms[j]; } else { g2 = (LWGEOM*)lwg2; } if (lw_dist2d_is_collection(g2)) { LWDEBUG(3, "Found collection inside second geometry collection, recursing"); if (!lw_dist2d_recursive(g1, g2, dl)) return LW_FALSE; continue; } if ( ! g1->bbox ) { lwgeom_add_bbox(g1); } if ( ! g2->bbox ) { lwgeom_add_bbox(g2); } /*If one of geometries is empty, return. True here only means continue searching. False would have stoped the process*/ if (lwgeom_is_empty(g1)||lwgeom_is_empty(g2)) return LW_TRUE; if ( (dl->mode != DIST_MAX) && (! lw_dist2d_check_overlap(g1, g2)) && (g1->type == LINETYPE || g1->type == POLYGONTYPE) && (g2->type == LINETYPE || g2->type == POLYGONTYPE) ) { if (!lw_dist2d_distribute_fast(g1, g2, dl)) return LW_FALSE; } else { if (!lw_dist2d_distribute_bruteforce(g1, g2, dl)) return LW_FALSE; if (dl->distance<=dl->tolerance && dl->mode == DIST_MIN) return LW_TRUE; /*just a check if the answer is already given*/ } } } return LW_TRUE; } int lw_dist2d_distribute_bruteforce(LWGEOM *lwg1, LWGEOM *lwg2, DISTPTS *dl) { int t1 = lwg1->type; int t2 = lwg2->type; switch ( t1 ) { case POINTTYPE: { dl->twisted = 1; switch ( t2 ) { case POINTTYPE: return lw_dist2d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl); case LINETYPE: return lw_dist2d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl); case POLYGONTYPE: return lw_dist2d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2, dl); case CIRCSTRINGTYPE: return lw_dist2d_point_circstring((LWPOINT *)lwg1, (LWCIRCSTRING *)lwg2, dl); case CURVEPOLYTYPE: return lw_dist2d_point_curvepoly((LWPOINT *)lwg1, (LWCURVEPOLY *)lwg2, dl); default: lwerror("Unsupported geometry type: %s", lwtype_name(t2)); } } case LINETYPE: { dl->twisted = 1; switch ( t2 ) { case POINTTYPE: dl->twisted=(-1); return lw_dist2d_point_line((LWPOINT *)lwg2, (LWLINE *)lwg1, dl); case LINETYPE: return lw_dist2d_line_line((LWLINE *)lwg1, (LWLINE *)lwg2, dl); case POLYGONTYPE: return lw_dist2d_line_poly((LWLINE *)lwg1, (LWPOLY *)lwg2, dl); case CIRCSTRINGTYPE: return lw_dist2d_line_circstring((LWLINE *)lwg1, (LWCIRCSTRING *)lwg2, dl); case CURVEPOLYTYPE: return lw_dist2d_line_curvepoly((LWLINE *)lwg1, (LWCURVEPOLY *)lwg2, dl); default: lwerror("Unsupported geometry type: %s", lwtype_name(t2)); } } case CIRCSTRINGTYPE: { dl->twisted = 1; switch ( t2 ) { case POINTTYPE: dl->twisted = -1; return lw_dist2d_point_circstring((LWPOINT *)lwg2, (LWCIRCSTRING *)lwg1, dl); case LINETYPE: dl->twisted = -1; return lw_dist2d_line_circstring((LWLINE *)lwg2, (LWCIRCSTRING *)lwg1, dl); case POLYGONTYPE: return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg1, (LWPOLY *)lwg2, dl); case CIRCSTRINGTYPE: return lw_dist2d_circstring_circstring((LWCIRCSTRING *)lwg1, (LWCIRCSTRING *)lwg2, dl); case CURVEPOLYTYPE: return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg1, (LWCURVEPOLY *)lwg2, dl); default: lwerror("Unsupported geometry type: %s", lwtype_name(t2)); } } case POLYGONTYPE: { dl->twisted = -1; switch ( t2 ) { case POINTTYPE: return lw_dist2d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1, dl); case LINETYPE: return lw_dist2d_line_poly((LWLINE *)lwg2, (LWPOLY *)lwg1, dl); case CIRCSTRINGTYPE: return lw_dist2d_circstring_poly((LWCIRCSTRING *)lwg2, (LWPOLY *)lwg1, dl); case POLYGONTYPE: dl->twisted = 1; return lw_dist2d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2, dl); case CURVEPOLYTYPE: dl->twisted = 1; return lw_dist2d_poly_curvepoly((LWPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl); default: lwerror("Unsupported geometry type: %s", lwtype_name(t2)); } } case CURVEPOLYTYPE: { dl->twisted = (-1); switch ( t2 ) { case POINTTYPE: return lw_dist2d_point_curvepoly((LWPOINT *)lwg2, (LWCURVEPOLY *)lwg1, dl); case LINETYPE: return lw_dist2d_line_curvepoly((LWLINE *)lwg2, (LWCURVEPOLY *)lwg1, dl); case POLYGONTYPE: return lw_dist2d_poly_curvepoly((LWPOLY *)lwg2, (LWCURVEPOLY *)lwg1, dl); case CIRCSTRINGTYPE: return lw_dist2d_circstring_curvepoly((LWCIRCSTRING *)lwg2, (LWCURVEPOLY *)lwg1, dl); case CURVEPOLYTYPE: dl->twisted = 1; return lw_dist2d_curvepoly_curvepoly((LWCURVEPOLY *)lwg1, (LWCURVEPOLY *)lwg2, dl); default: lwerror("Unsupported geometry type: %s", lwtype_name(t2)); } } default: { lwerror("Unsupported geometry type: %s", lwtype_name(t1)); } } /*You shouldn't being able to get here*/ lwerror("unspecified error in function lw_dist2d_distribute_bruteforce"); return LW_FALSE; } /** We have to check for overlapping bboxes */ int lw_dist2d_check_overlap(LWGEOM *lwg1,LWGEOM *lwg2) { LWDEBUG(2, "lw_dist2d_check_overlap is called"); if ( ! lwg1->bbox ) lwgeom_calculate_gbox(lwg1, lwg1->bbox); if ( ! lwg2->bbox ) lwgeom_calculate_gbox(lwg2, lwg2->bbox); /*Check if the geometries intersect. */ if ((lwg1->bbox->xmax<lwg2->bbox->xmin||lwg1->bbox->xmin>lwg2->bbox->xmax||lwg1->bbox->ymax<lwg2->bbox->ymin||lwg1->bbox->ymin>lwg2->bbox->ymax)) { LWDEBUG(3, "geometries bboxes did not overlap"); return LW_FALSE; } LWDEBUG(3, "geometries bboxes overlap"); return LW_TRUE; } /** Here the geometries are distributed for the new faster distance-calculations */ int lw_dist2d_distribute_fast(LWGEOM *lwg1, LWGEOM *lwg2, DISTPTS *dl) { POINTARRAY *pa1, *pa2; int type1 = lwg1->type; int type2 = lwg2->type; LWDEBUGF(2, "lw_dist2d_distribute_fast is called with typ1=%d, type2=%d", lwg1->type, lwg2->type); switch (type1) { case LINETYPE: pa1 = ((LWLINE *)lwg1)->points; break; case POLYGONTYPE: pa1 = ((LWPOLY *)lwg1)->rings[0]; break; default: lwerror("Unsupported geometry1 type: %s", lwtype_name(type1)); return LW_FALSE; } switch (type2) { case LINETYPE: pa2 = ((LWLINE *)lwg2)->points; break; case POLYGONTYPE: pa2 = ((LWPOLY *)lwg2)->rings[0]; break; default: lwerror("Unsupported geometry2 type: %s", lwtype_name(type1)); return LW_FALSE; } dl->twisted=1; return lw_dist2d_fast_ptarray_ptarray(pa1, pa2, dl, lwg1->bbox, lwg2->bbox); } /*------------------------------------------------------------------------------------------------------------ End of Preprocessing functions --------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------ Brute force functions The old way of calculating distances, now used for: 1) distances to points (because there shouldn't be anything to gain by the new way of doing it) 2) distances when subgeometries geometries bboxes overlaps --------------------------------------------------------------------------------------------------------------*/ /** point to point calculation */ int lw_dist2d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS *dl) { POINT2D p1; POINT2D p2; getPoint2d_p(point1->point, 0, &p1); getPoint2d_p(point2->point, 0, &p2); return lw_dist2d_pt_pt(&p1, &p2,dl); } /** point to line calculation */ int lw_dist2d_point_line(LWPOINT *point, LWLINE *line, DISTPTS *dl) { const POINT2D *p; LWDEBUG(2, "lw_dist2d_point_line is called"); p = getPoint2d_cp(point->point, 0); return lw_dist2d_pt_ptarray(p, line->points, dl); } int lw_dist2d_point_circstring(LWPOINT *point, LWCIRCSTRING *circ, DISTPTS *dl) { const POINT2D *p; p = getPoint2d_cp(point->point, 0); return lw_dist2d_pt_ptarrayarc(p, circ->points, dl); } /** * 1. see if pt in outer boundary. if no, then treat the outer ring like a line * 2. if in the boundary, test to see if its in a hole. * if so, then return dist to hole, else return 0 (point in polygon) */ int lw_dist2d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS *dl) { const POINT2D *p; int i; LWDEBUG(2, "lw_dist2d_point_poly called"); p = getPoint2d_cp(point->point, 0); if (dl->mode == DIST_MAX) { LWDEBUG(3, "looking for maxdistance"); return lw_dist2d_pt_ptarray(p, poly->rings[0], dl); } /* Return distance to outer ring if not inside it */ if ( ptarray_contains_point(poly->rings[0], p) == LW_OUTSIDE ) { LWDEBUG(3, "first point not inside outer-ring"); return lw_dist2d_pt_ptarray(p, poly->rings[0], dl); } /* * Inside the outer ring. * Scan though each of the inner rings looking to * see if its inside. If not, distance==0. * Otherwise, distance = pt to ring distance */ for ( i = 1; i < poly->nrings; i++) { /* Inside a hole. Distance = pt -> ring */ if ( ptarray_contains_point(poly->rings[i], p) != LW_OUTSIDE ) { LWDEBUG(3, " inside an hole"); return lw_dist2d_pt_ptarray(p, poly->rings[i], dl); } } LWDEBUG(3, " inside the polygon"); if (dl->mode == DIST_MIN) { dl->distance = 0.0; dl->p1.x = dl->p2.x = p->x; dl->p1.y = dl->p2.y = p->y; } return LW_TRUE; /* Is inside the polygon */ } int lw_dist2d_point_curvepoly(LWPOINT *point, LWCURVEPOLY *poly, DISTPTS *dl) { const POINT2D *p; int i; p = getPoint2d_cp(point->point, 0); if (dl->mode == DIST_MAX) lwerror("lw_dist2d_point_curvepoly cannot calculate max distance"); /* Return distance to outer ring if not inside it */ if ( lwgeom_contains_point(poly->rings[0], p) == LW_OUTSIDE ) { return lw_dist2d_recursive((LWGEOM*)point, poly->rings[0], dl); } /* * Inside the outer ring. * Scan though each of the inner rings looking to * see if its inside. If not, distance==0. * Otherwise, distance = pt to ring distance */ for ( i = 1; i < poly->nrings; i++) { /* Inside a hole. Distance = pt -> ring */ if ( lwgeom_contains_point(poly->rings[i], p) != LW_OUTSIDE ) { LWDEBUG(3, " inside a hole"); return lw_dist2d_recursive((LWGEOM*)point, poly->rings[i], dl); } } LWDEBUG(3, " inside the polygon"); if (dl->mode == DIST_MIN) { dl->distance = 0.0; dl->p1.x = dl->p2.x = p->x; dl->p1.y = dl->p2.y = p->y; } return LW_TRUE; /* Is inside the polygon */ } /** line to line calculation */ int lw_dist2d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS *dl) { POINTARRAY *pa1 = line1->points; POINTARRAY *pa2 = line2->points; LWDEBUG(2, "lw_dist2d_line_line is called"); return lw_dist2d_ptarray_ptarray(pa1, pa2, dl); } int lw_dist2d_line_circstring(LWLINE *line1, LWCIRCSTRING *line2, DISTPTS *dl) { return lw_dist2d_ptarray_ptarrayarc(line1->points, line2->points, dl); } /** * line to polygon calculation * Brute force. * Test line-ring distance against each ring. * If there's an intersection (distance==0) then return 0 (crosses boundary). * Otherwise, test to see if any point is inside outer rings of polygon, * but not in inner rings. * If so, return 0 (line inside polygon), * otherwise return min distance to a ring (could be outside * polygon or inside a hole) */ int lw_dist2d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS *dl) { const POINT2D *pt; int i; LWDEBUGF(2, "lw_dist2d_line_poly called (%d rings)", poly->nrings); pt = getPoint2d_cp(line->points, 0); if ( ptarray_contains_point(poly->rings[0], pt) == LW_OUTSIDE ) { return lw_dist2d_ptarray_ptarray(line->points, poly->rings[0], dl); } for (i=1; i<poly->nrings; i++) { if (!lw_dist2d_ptarray_ptarray(line->points, poly->rings[i], dl)) return LW_FALSE; LWDEBUGF(3, " distance from ring %d: %f, mindist: %f", i, dl->distance, dl->tolerance); /* just a check if the answer is already given */ if (dl->distance<=dl->tolerance && dl->mode == DIST_MIN) return LW_TRUE; } /* * No intersection, have to check if a point is * inside polygon */ pt = getPoint2d_cp(line->points, 0); /* * Outside outer ring, so min distance to a ring * is the actual min distance if ( ! pt_in_ring_2d(&pt, poly->rings[0]) ) { return ; } */ /* * Its in the outer ring. * Have to check if its inside a hole */ for (i=1; i<poly->nrings; i++) { if ( ptarray_contains_point(poly->rings[i], pt) != LW_OUTSIDE ) { /* * Its inside a hole, then the actual * distance is the min ring distance */ return LW_TRUE; } } if (dl->mode == DIST_MIN) { dl->distance = 0.0; dl->p1.x = dl->p2.x = pt->x; dl->p1.y = dl->p2.y = pt->y; } return LW_TRUE; /* Not in hole, so inside polygon */ } int lw_dist2d_line_curvepoly(LWLINE *line, LWCURVEPOLY *poly, DISTPTS *dl) { const POINT2D *pt = getPoint2d_cp(line->points, 0); int i; if ( lwgeom_contains_point(poly->rings[0], pt) == LW_OUTSIDE ) { return lw_dist2d_recursive((LWGEOM*)line, poly->rings[0], dl); } for ( i = 1; i < poly->nrings; i++ ) { if ( ! lw_dist2d_recursive((LWGEOM*)line, poly->rings[i], dl) ) return LW_FALSE; if ( dl->distance<=dl->tolerance && dl->mode == DIST_MIN ) return LW_TRUE; } for ( i=1; i < poly->nrings; i++ ) { if ( lwgeom_contains_point(poly->rings[i],pt) != LW_OUTSIDE ) { /* Its inside a hole, then the actual */ return LW_TRUE; } } if (dl->mode == DIST_MIN) { dl->distance = 0.0; dl->p1.x = dl->p2.x = pt->x; dl->p1.y = dl->p2.y = pt->y; } return LW_TRUE; /* Not in hole, so inside polygon */ } /** Function handling polygon to polygon calculation 1 if we are looking for maxdistance, just check the outer rings. 2 check if poly1 has first point outside poly2 and vice versa, if so, just check outer rings 3 check if first point of poly2 is in a hole of poly1. If so check outer ring of poly2 against that hole of poly1 4 check if first point of poly1 is in a hole of poly2. If so check outer ring of poly1 against that hole of poly2 5 If we have come all the way here we know that the first point of one of them is inside the other ones outer ring and not in holes so we check wich one is inside. */ int lw_dist2d_poly_poly(LWPOLY *poly1, LWPOLY *poly2, DISTPTS *dl) { const POINT2D *pt; int i; LWDEBUG(2, "lw_dist2d_poly_poly called"); /*1 if we are looking for maxdistance, just check the outer rings.*/ if (dl->mode == DIST_MAX) { return lw_dist2d_ptarray_ptarray(poly1->rings[0], poly2->rings[0], dl); } /* 2 check if poly1 has first point outside poly2 and vice versa, if so, just check outer rings here it would be possible to handle the information about wich one is inside wich one and only search for the smaller ones in the bigger ones holes.*/ pt = getPoint2d_cp(poly1->rings[0], 0); if ( ptarray_contains_point(poly2->rings[0], pt) == LW_OUTSIDE ) { pt = getPoint2d_cp(poly2->rings[0], 0); if ( ptarray_contains_point(poly1->rings[0], pt) == LW_OUTSIDE ) { return lw_dist2d_ptarray_ptarray(poly1->rings[0], poly2->rings[0], dl); } } /*3 check if first point of poly2 is in a hole of poly1. If so check outer ring of poly2 against that hole of poly1*/ pt = getPoint2d_cp(poly2->rings[0], 0); for (i=1; i<poly1->nrings; i++) { /* Inside a hole */ if ( ptarray_contains_point(poly1->rings[i], pt) != LW_OUTSIDE ) { return lw_dist2d_ptarray_ptarray(poly1->rings[i], poly2->rings[0], dl); } } /*4 check if first point of poly1 is in a hole of poly2. If so check outer ring of poly1 against that hole of poly2*/ pt = getPoint2d_cp(poly1->rings[0], 0); for (i=1; i<poly2->nrings; i++) { /* Inside a hole */ if ( ptarray_contains_point(poly2->rings[i], pt) != LW_OUTSIDE ) { return lw_dist2d_ptarray_ptarray(poly1->rings[0], poly2->rings[i], dl); } } /*5 If we have come all the way here we know that the first point of one of them is inside the other ones outer ring and not in holes so we check wich one is inside.*/ pt = getPoint2d_cp(poly1->rings[0], 0); if ( ptarray_contains_point(poly2->rings[0], pt) != LW_OUTSIDE ) { dl->distance = 0.0; dl->p1.x = dl->p2.x = pt->x; dl->p1.y = dl->p2.y = pt->y; return LW_TRUE; } pt = getPoint2d_cp(poly2->rings[0], 0); if ( ptarray_contains_point(poly1->rings[0], pt) != LW_OUTSIDE ) { dl->distance = 0.0; dl->p1.x = dl->p2.x = pt->x; dl->p1.y = dl->p2.y = pt->y; return LW_TRUE; } lwerror("Unspecified error in function lw_dist2d_poly_poly"); return LW_FALSE; } int lw_dist2d_poly_curvepoly(LWPOLY *poly1, LWCURVEPOLY *curvepoly2, DISTPTS *dl) { LWCURVEPOLY *curvepoly1 = lwcurvepoly_construct_from_lwpoly(poly1); int rv = lw_dist2d_curvepoly_curvepoly(curvepoly1, curvepoly2, dl); lwfree(curvepoly1); return rv; } int lw_dist2d_circstring_poly(LWCIRCSTRING *circ, LWPOLY *poly, DISTPTS *dl) { LWCURVEPOLY *curvepoly = lwcurvepoly_construct_from_lwpoly(poly); int rv = lw_dist2d_line_curvepoly((LWLINE*)circ, curvepoly, dl); lwfree(curvepoly); return rv; } int lw_dist2d_circstring_curvepoly(LWCIRCSTRING *circ, LWCURVEPOLY *poly, DISTPTS *dl) { return lw_dist2d_line_curvepoly((LWLINE*)circ, poly, dl); } int lw_dist2d_circstring_circstring(LWCIRCSTRING *line1, LWCIRCSTRING *line2, DISTPTS *dl) { return lw_dist2d_ptarrayarc_ptarrayarc(line1->points, line2->points, dl); } static const POINT2D * lw_curvering_getfirstpoint2d_cp(LWGEOM *geom) { switch( geom->type ) { case LINETYPE: return getPoint2d_cp(((LWLINE*)geom)->points, 0); case CIRCSTRINGTYPE: return getPoint2d_cp(((LWCIRCSTRING*)geom)->points, 0); case COMPOUNDTYPE: { LWCOMPOUND *comp = (LWCOMPOUND*)geom; LWLINE *line = (LWLINE*)(comp->geoms[0]); return getPoint2d_cp(line->points, 0); } default: lwerror("lw_curvering_getfirstpoint2d_cp: unknown type"); } return NULL; } int lw_dist2d_curvepoly_curvepoly(LWCURVEPOLY *poly1, LWCURVEPOLY *poly2, DISTPTS *dl) { const POINT2D *pt; int i; LWDEBUG(2, "lw_dist2d_curvepoly_curvepoly called"); /*1 if we are looking for maxdistance, just check the outer rings.*/ if (dl->mode == DIST_MAX) { return lw_dist2d_recursive(poly1->rings[0], poly2->rings[0], dl); } /* 2 check if poly1 has first point outside poly2 and vice versa, if so, just check outer rings here it would be possible to handle the information about wich one is inside wich one and only search for the smaller ones in the bigger ones holes.*/ pt = lw_curvering_getfirstpoint2d_cp(poly1->rings[0]); if ( lwgeom_contains_point(poly2->rings[0], pt) == LW_OUTSIDE ) { pt = lw_curvering_getfirstpoint2d_cp(poly2->rings[0]); if ( lwgeom_contains_point(poly1->rings[0], pt) == LW_OUTSIDE ) { return lw_dist2d_recursive(poly1->rings[0], poly2->rings[0], dl); } } /*3 check if first point of poly2 is in a hole of poly1. If so check outer ring of poly2 against that hole of poly1*/ pt = lw_curvering_getfirstpoint2d_cp(poly2->rings[0]); for (i = 1; i < poly1->nrings; i++) { /* Inside a hole */ if ( lwgeom_contains_point(poly1->rings[i], pt) != LW_OUTSIDE ) { return lw_dist2d_recursive(poly1->rings[i], poly2->rings[0], dl); } } /*4 check if first point of poly1 is in a hole of poly2. If so check outer ring of poly1 against that hole of poly2*/ pt = lw_curvering_getfirstpoint2d_cp(poly1->rings[0]); for (i = 1; i < poly2->nrings; i++) { /* Inside a hole */ if ( lwgeom_contains_point(poly2->rings[i], pt) != LW_OUTSIDE ) { return lw_dist2d_recursive(poly1->rings[0], poly2->rings[i], dl); } } /*5 If we have come all the way here we know that the first point of one of them is inside the other ones outer ring and not in holes so we check wich one is inside.*/ pt = lw_curvering_getfirstpoint2d_cp(poly1->rings[0]); if ( lwgeom_contains_point(poly2->rings[0], pt) != LW_OUTSIDE ) { dl->distance = 0.0; dl->p1.x = dl->p2.x = pt->x; dl->p1.y = dl->p2.y = pt->y; return LW_TRUE; } pt = lw_curvering_getfirstpoint2d_cp(poly2->rings[0]); if ( lwgeom_contains_point(poly1->rings[0], pt) != LW_OUTSIDE ) { dl->distance = 0.0; dl->p1.x = dl->p2.x = pt->x; dl->p1.y = dl->p2.y = pt->y; return LW_TRUE; } lwerror("Unspecified error in function lw_dist2d_curvepoly_curvepoly"); return LW_FALSE; } /** * search all the segments of pointarray to see which one is closest to p1 * Returns minimum distance between point and pointarray */ int lw_dist2d_pt_ptarray(const POINT2D *p, POINTARRAY *pa,DISTPTS *dl) { int t; const POINT2D *start, *end; int twist = dl->twisted; LWDEBUG(2, "lw_dist2d_pt_ptarray is called"); start = getPoint2d_cp(pa, 0); if ( !lw_dist2d_pt_pt(p, start, dl) ) return LW_FALSE; for (t=1; t<pa->npoints; t++) { dl->twisted=twist; end = getPoint2d_cp(pa, t); if (!lw_dist2d_pt_seg(p, start, end, dl)) return LW_FALSE; if (dl->distance<=dl->tolerance && dl->mode == DIST_MIN) return LW_TRUE; /*just a check if the answer is already given*/ start = end; } return LW_TRUE; } /** * Search all the arcs of pointarray to see which one is closest to p1 * Returns minimum distance between point and arc pointarray. */ int lw_dist2d_pt_ptarrayarc(const POINT2D *p, const POINTARRAY *pa, DISTPTS *dl) { int t; const POINT2D *A1; const POINT2D *A2; const POINT2D *A3; int twist = dl->twisted; LWDEBUG(2, "lw_dist2d_pt_ptarrayarc is called"); if ( pa->npoints % 2 == 0 || pa->npoints < 3 ) { lwerror("lw_dist2d_pt_ptarrayarc called with non-arc input"); return LW_FALSE; } if (dl->mode == DIST_MAX) { lwerror("lw_dist2d_pt_ptarrayarc does not currently support DIST_MAX mode"); return LW_FALSE; } A1 = getPoint2d_cp(pa, 0); if ( ! lw_dist2d_pt_pt(p, A1, dl) ) return LW_FALSE; for ( t=1; t<pa->npoints; t += 2 ) { dl->twisted = twist; A2 = getPoint2d_cp(pa, t); A3 = getPoint2d_cp(pa, t+1); if ( lw_dist2d_pt_arc(p, A1, A2, A3, dl) == LW_FALSE ) return LW_FALSE; if ( dl->distance <= dl->tolerance && dl->mode == DIST_MIN ) return LW_TRUE; /*just a check if the answer is already given*/ A1 = A3; } return LW_TRUE; } /** * test each segment of l1 against each segment of l2. */ int lw_dist2d_ptarray_ptarray(POINTARRAY *l1, POINTARRAY *l2,DISTPTS *dl) { int t,u; POINT2D start, end; POINT2D start2, end2; int twist = dl->twisted; LWDEBUGF(2, "lw_dist2d_ptarray_ptarray called (points: %d-%d)",l1->npoints, l2->npoints); if (dl->mode == DIST_MAX)/*If we are searching for maxdistance we go straight to point-point calculation since the maxdistance have to be between two vertexes*/ { for (t=0; t<l1->npoints; t++) /*for each segment in L1 */ { getPoint2d_p(l1, t, &start); for (u=0; u<l2->npoints; u++) /*for each segment in L2 */ { getPoint2d_p(l2, u, &start2); lw_dist2d_pt_pt(&start,&start2,dl); LWDEBUGF(4, "maxdist_ptarray_ptarray; seg %i * seg %i, dist = %g\n",t,u,dl->distance); LWDEBUGF(3, " seg%d-seg%d dist: %f, mindist: %f", t, u, dl->distance, dl->tolerance); } } } else { getPoint2d_p(l1, 0, &start); for (t=1; t<l1->npoints; t++) /*for each segment in L1 */ { getPoint2d_p(l1, t, &end); getPoint2d_p(l2, 0, &start2); for (u=1; u<l2->npoints; u++) /*for each segment in L2 */ { getPoint2d_p(l2, u, &end2); dl->twisted=twist; lw_dist2d_seg_seg(&start, &end, &start2, &end2,dl); LWDEBUGF(4, "mindist_ptarray_ptarray; seg %i * seg %i, dist = %g\n",t,u,dl->distance); LWDEBUGF(3, " seg%d-seg%d dist: %f, mindist: %f", t, u, dl->distance, dl->tolerance); if (dl->distance<=dl->tolerance && dl->mode == DIST_MIN) return LW_TRUE; /*just a check if the answer is already given*/ start2 = end2; } start = end; } } return LW_TRUE; } /** * Test each segment of pa against each arc of pb for distance. */ int lw_dist2d_ptarray_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl) { int t, u; const POINT2D *A1; const POINT2D *A2; const POINT2D *B1; const POINT2D *B2; const POINT2D *B3; int twist = dl->twisted; LWDEBUGF(2, "lw_dist2d_ptarray_ptarrayarc called (points: %d-%d)",pa->npoints, pb->npoints); if ( pb->npoints % 2 == 0 || pb->npoints < 3 ) { lwerror("lw_dist2d_ptarray_ptarrayarc called with non-arc input"); return LW_FALSE; } if ( dl->mode == DIST_MAX ) { lwerror("lw_dist2d_ptarray_ptarrayarc does not currently support DIST_MAX mode"); return LW_FALSE; } else { A1 = getPoint2d_cp(pa, 0); for ( t=1; t < pa->npoints; t++ ) /* For each segment in pa */ { A2 = getPoint2d_cp(pa, t); B1 = getPoint2d_cp(pb, 0); for ( u=1; u < pb->npoints; u += 2 ) /* For each arc in pb */ { B2 = getPoint2d_cp(pb, u); B3 = getPoint2d_cp(pb, u+1); dl->twisted = twist; lw_dist2d_seg_arc(A1, A2, B1, B2, B3, dl); /* If we've found a distance within tolerance, we're done */ if ( dl->distance <= dl->tolerance && dl->mode == DIST_MIN ) return LW_TRUE; B1 = B3; } A1 = A2; } } return LW_TRUE; } /** * Test each arc of pa against each arc of pb for distance. */ int lw_dist2d_ptarrayarc_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl) { int t, u; const POINT2D *A1; const POINT2D *A2; const POINT2D *A3; const POINT2D *B1; const POINT2D *B2; const POINT2D *B3; int twist = dl->twisted; LWDEBUGF(2, "lw_dist2d_ptarrayarc_ptarrayarc called (points: %d-%d)",pa->npoints, pb->npoints); if (dl->mode == DIST_MAX) { lwerror("lw_dist2d_ptarrayarc_ptarrayarc does not currently support DIST_MAX mode"); return LW_FALSE; } else { A1 = getPoint2d_cp(pa, 0); for ( t=1; t < pa->npoints; t += 2 ) /* For each segment in pa */ { A2 = getPoint2d_cp(pa, t); A3 = getPoint2d_cp(pa, t+1); B1 = getPoint2d_cp(pb, 0); for ( u=1; u < pb->npoints; u += 2 ) /* For each arc in pb */ { B2 = getPoint2d_cp(pb, u); B3 = getPoint2d_cp(pb, u+1); dl->twisted = twist; lw_dist2d_arc_arc(A1, A2, A3, B1, B2, B3, dl); /* If we've found a distance within tolerance, we're done */ if ( dl->distance <= dl->tolerance && dl->mode == DIST_MIN ) return LW_TRUE; B1 = B3; } A1 = A3; } } return LW_TRUE; } /** * Calculate the shortest distance between an arc and an edge. * Line/circle approach from http://stackoverflow.com/questions/1073336/circle-line-collision-detection */ int lw_dist2d_seg_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *B1, const POINT2D *B2, const POINT2D *B3, DISTPTS *dl) { POINT2D C; /* center of arc circle */ double radius_C; /* radius of arc circle */ POINT2D D; /* point on A closest to C */ double dist_C_D; /* distance from C to D */ int pt_in_arc, pt_in_seg; DISTPTS dltmp; /* Bail out on crazy modes */ if ( dl->mode < 0 ) lwerror("lw_dist2d_seg_arc does not support maxdistance mode"); /* What if the "arc" is a point? */ if ( lw_arc_is_pt(B1, B2, B3) ) return lw_dist2d_pt_seg(B1, A1, A2, dl); /* Calculate center and radius of the circle. */ radius_C = lw_arc_center(B1, B2, B3, &C); /* This "arc" is actually a line (B2 is colinear with B1,B3) */ if ( radius_C < 0.0 ) return lw_dist2d_seg_seg(A1, A2, B1, B3, dl); /* Calculate distance between the line and circle center */ lw_dist2d_distpts_init(&dltmp, DIST_MIN); if ( lw_dist2d_pt_seg(&C, A1, A2, &dltmp) == LW_FALSE ) lwerror("lw_dist2d_pt_seg failed in lw_dist2d_seg_arc"); D = dltmp.p1; dist_C_D = dltmp.distance; /* Line intersects circle, maybe arc intersects edge? */ /* If so, that's the closest point. */ /* If not, the closest point is one of the end points of A */ if ( dist_C_D < radius_C ) { double length_A; /* length of the segment A */ POINT2D E, F; /* points of interection of edge A and circle(B) */ double dist_D_EF; /* distance from D to E or F (same distance both ways) */ dist_D_EF = sqrt(radius_C*radius_C - dist_C_D*dist_C_D); length_A = sqrt((A2->x-A1->x)*(A2->x-A1->x)+(A2->y-A1->y)*(A2->y-A1->y)); /* Point of intersection E */ E.x = D.x - (A2->x-A1->x) * dist_D_EF / length_A; E.y = D.y - (A2->y-A1->y) * dist_D_EF / length_A; /* Point of intersection F */ F.x = D.x + (A2->x-A1->x) * dist_D_EF / length_A; F.y = D.y + (A2->y-A1->y) * dist_D_EF / length_A; /* If E is within A and within B then it's an interesction point */ pt_in_arc = lw_pt_in_arc(&E, B1, B2, B3); pt_in_seg = lw_pt_in_seg(&E, A1, A2); if ( pt_in_arc && pt_in_seg ) { dl->distance = 0.0; dl->p1 = E; dl->p2 = E; return LW_TRUE; } /* If F is within A and within B then it's an interesction point */ pt_in_arc = lw_pt_in_arc(&F, B1, B2, B3); pt_in_seg = lw_pt_in_seg(&F, A1, A2); if ( pt_in_arc && pt_in_seg ) { dl->distance = 0.0; dl->p1 = F; dl->p2 = F; return LW_TRUE; } } /* Line grazes circle, maybe arc intersects edge? */ /* If so, grazing point is the closest point. */ /* If not, the closest point is one of the end points of A */ else if ( dist_C_D == radius_C ) { /* Closest point D is also the point of grazing */ pt_in_arc = lw_pt_in_arc(&D, B1, B2, B3); pt_in_seg = lw_pt_in_seg(&D, A1, A2); /* Is D contained in both A and B? */ if ( pt_in_arc && pt_in_seg ) { dl->distance = 0.0; dl->p1 = D; dl->p2 = D; return LW_TRUE; } } /* Line misses circle. */ /* If closest point to A on circle is within B, then that's the closest */ /* Otherwise, the closest point will be an end point of A */ else { POINT2D G; /* Point on circle closest to A */ G.x = C.x + (D.x-C.x) * radius_C / dist_C_D; G.y = C.y + (D.y-C.y) * radius_C / dist_C_D; pt_in_arc = lw_pt_in_arc(&G, B1, B2, B3); pt_in_seg = lw_pt_in_seg(&D, A1, A2); /* Closest point is on the interior of A and B */ if ( pt_in_arc && pt_in_seg ) return lw_dist2d_pt_pt(&D, &G, dl); } /* Now we test the many combinations of end points with either */ /* arcs or edges. Each previous check determined if the closest */ /* potential point was within the arc/segment inscribed on the */ /* line/circle holding the arc/segment. */ /* Closest point is in the arc, but not in the segment, so */ /* one of the segment end points must be the closest. */ if ( pt_in_arc & ! pt_in_seg ) { lw_dist2d_pt_arc(A1, B1, B2, B3, dl); lw_dist2d_pt_arc(A2, B1, B2, B3, dl); return LW_TRUE; } /* or, one of the arc end points is the closest */ else if ( pt_in_seg && ! pt_in_arc ) { lw_dist2d_pt_seg(B1, A1, A2, dl); lw_dist2d_pt_seg(B3, A1, A2, dl); return LW_TRUE; } /* Finally, one of the end-point to end-point combos is the closest. */ else { lw_dist2d_pt_pt(A1, B1, dl); lw_dist2d_pt_pt(A1, B3, dl); lw_dist2d_pt_pt(A2, B1, dl); lw_dist2d_pt_pt(A2, B3, dl); return LW_TRUE; } return LW_FALSE; } int lw_dist2d_pt_arc(const POINT2D* P, const POINT2D* A1, const POINT2D* A2, const POINT2D* A3, DISTPTS* dl) { double radius_A, d; POINT2D C; /* center of circle defined by arc A */ POINT2D X; /* point circle(A) where line from C to P crosses */ if ( dl->mode < 0 ) lwerror("lw_dist2d_pt_arc does not support maxdistance mode"); /* What if the arc is a point? */ if ( lw_arc_is_pt(A1, A2, A3) ) return lw_dist2d_pt_pt(P, A1, dl); /* Calculate centers and radii of circles. */ radius_A = lw_arc_center(A1, A2, A3, &C); /* This "arc" is actually a line (A2 is colinear with A1,A3) */ if ( radius_A < 0.0 ) return lw_dist2d_pt_seg(P, A1, A3, dl); /* Distance from point to center */ d = distance2d_pt_pt(&C, P); /* X is the point on the circle where the line from P to C crosses */ X.x = C.x + (P->x - C.x) * radius_A / d; X.y = C.y + (P->y - C.y) * radius_A / d; /* Is crossing point inside the arc? Or arc is actually circle? */ if ( p2d_same(A1, A3) || lw_pt_in_arc(&X, A1, A2, A3) ) { lw_dist2d_pt_pt(P, &X, dl); } else { /* Distance is the minimum of the distances to the arc end points */ lw_dist2d_pt_pt(A1, P, dl); lw_dist2d_pt_pt(A3, P, dl); } return LW_TRUE; } int lw_dist2d_arc_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, const POINT2D *B1, const POINT2D *B2, const POINT2D *B3, DISTPTS *dl) { POINT2D CA, CB; /* Center points of arcs A and B */ double radius_A, radius_B, d; /* Radii of arcs A and B */ POINT2D P; /* Temporary point P */ POINT2D D; /* Mid-point between the centers CA and CB */ int pt_in_arc_A, pt_in_arc_B; /* Test whether potential intersection point is within the arc */ if ( dl->mode != DIST_MIN ) lwerror("lw_dist2d_arc_arc only supports mindistance"); /* TODO: Handle case where arc is closed circle (A1 = A3) */ /* What if one or both of our "arcs" is actually a point? */ if ( lw_arc_is_pt(B1, B2, B3) && lw_arc_is_pt(A1, A2, A3) ) return lw_dist2d_pt_pt(B1, A1, dl); else if ( lw_arc_is_pt(B1, B2, B3) ) return lw_dist2d_pt_arc(B1, A1, A2, A3, dl); else if ( lw_arc_is_pt(A1, A2, A3) ) return lw_dist2d_pt_arc(A1, B1, B2, B3, dl); /* Calculate centers and radii of circles. */ radius_A = lw_arc_center(A1, A2, A3, &CA); radius_B = lw_arc_center(B1, B2, B3, &CB); /* Two co-linear arcs?!? That's two segments. */ if ( radius_A < 0 && radius_B < 0 ) return lw_dist2d_seg_seg(A1, A3, B1, B3, dl); /* A is co-linear, delegate to lw_dist_seg_arc here. */ if ( radius_A < 0 ) return lw_dist2d_seg_arc(A1, A3, B1, B2, B3, dl); /* B is co-linear, delegate to lw_dist_seg_arc here. */ if ( radius_B < 0 ) return lw_dist2d_seg_arc(B1, B3, A1, A2, A3, dl); /* Make sure that arc "A" has the bigger radius */ if ( radius_B > radius_A ) { const POINT2D *tmp; tmp = B1; B1 = A1; A1 = tmp; tmp = B2; B2 = A2; A2 = tmp; tmp = B3; B3 = A3; A3 = tmp; P = CB; CB = CA; CA = P; d = radius_B; radius_B = radius_A; radius_A = d; } /* Center-center distance */ d = distance2d_pt_pt(&CA, &CB); /* Equal circles. Arcs may intersect at multiple points, or at none! */ if ( FP_EQUALS(d, 0.0) && FP_EQUALS(radius_A, radius_B) ) { lwerror("lw_dist2d_arc_arc can't handle cojoint circles, uh oh"); } /* Circles touch at a point. Is that point within the arcs? */ if ( d == (radius_A + radius_B) ) { D.x = CA.x + (CB.x - CA.x) * radius_A / d; D.y = CA.y + (CB.y - CA.y) * radius_A / d; pt_in_arc_A = lw_pt_in_arc(&D, A1, A2, A3); pt_in_arc_B = lw_pt_in_arc(&D, B1, B2, B3); /* Arcs do touch at D, return it */ if ( pt_in_arc_A && pt_in_arc_B ) { dl->distance = 0.0; dl->p1 = D; dl->p2 = D; return LW_TRUE; } } /* Disjoint or contained circles don't intersect. Closest point may be on */ /* the line joining CA to CB. */ else if ( d > (radius_A + radius_B) /* Disjoint */ || d < (radius_A - radius_B) /* Contained */ ) { POINT2D XA, XB; /* Points where the line from CA to CB cross their circle bounds */ /* Calculate hypothetical nearest points, the places on the */ /* two circles where the center-center line crosses. If both */ /* arcs contain their hypothetical points, that's the crossing distance */ XA.x = CA.x + (CB.x - CA.x) * radius_A / d; XA.y = CA.y + (CB.y - CA.y) * radius_A / d; XB.x = CB.x + (CA.x - CB.x) * radius_B / d; XB.y = CB.y + (CA.y - CB.y) * radius_B / d; pt_in_arc_A = lw_pt_in_arc(&XA, A1, A2, A3); pt_in_arc_B = lw_pt_in_arc(&XB, B1, B2, B3); /* If the nearest points are both within the arcs, that's our answer */ /* the shortest distance is at the nearest points */ if ( pt_in_arc_A && pt_in_arc_B ) { return lw_dist2d_pt_pt(&XA, &XB, dl); } } /* Circles cross at two points, are either of those points in both arcs? */ /* http://paulbourke.net/geometry/2circle/ */ else if ( d < (radius_A + radius_B) ) { POINT2D E, F; /* Points where circle(A) and circle(B) cross */ /* Distance from CA to D */ double a = (radius_A*radius_A - radius_B*radius_B + d*d) / (2*d); /* Distance from D to E or F */ double h = sqrt(radius_A*radius_A - a*a); /* Location of D */ D.x = CA.x + (CB.x - CA.x) * a / d; D.y = CA.y + (CB.y - CA.y) * a / d; /* Start from D and project h units perpendicular to CA-D to get E */ E.x = D.x + (D.y - CA.y) * h / a; E.y = D.y + (D.x - CA.x) * h / a; /* Crossing point E contained in arcs? */ pt_in_arc_A = lw_pt_in_arc(&E, A1, A2, A3); pt_in_arc_B = lw_pt_in_arc(&E, B1, B2, B3); if ( pt_in_arc_A && pt_in_arc_B ) { dl->p1 = dl->p2 = E; dl->distance = 0.0; return LW_TRUE; } /* Start from D and project h units perpendicular to CA-D to get F */ F.x = D.x - (D.y - CA.y) * h / a; F.y = D.y - (D.x - CA.x) * h / a; /* Crossing point F contained in arcs? */ pt_in_arc_A = lw_pt_in_arc(&F, A1, A2, A3); pt_in_arc_B = lw_pt_in_arc(&F, B1, B2, B3); if ( pt_in_arc_A && pt_in_arc_B ) { dl->p1 = dl->p2 = F; dl->distance = 0.0; return LW_TRUE; } } else { lwerror("lw_dist2d_arc_arc: arcs neither touch, intersect nor are disjoint! INCONCEIVABLE!"); return LW_FALSE; } /* Closest point is in the arc A, but not in the arc B, so */ /* one of the B end points must be the closest. */ if ( pt_in_arc_A & ! pt_in_arc_B ) { lw_dist2d_pt_arc(B1, A1, A2, A3, dl); lw_dist2d_pt_arc(B3, A1, A2, A3, dl); return LW_TRUE; } /* Closest point is in the arc B, but not in the arc A, so */ /* one of the A end points must be the closest. */ else if ( pt_in_arc_B && ! pt_in_arc_A ) { lw_dist2d_pt_arc(A1, B1, B2, B3, dl); lw_dist2d_pt_arc(A3, B1, B2, B3, dl); return LW_TRUE; } /* Finally, one of the end-point to end-point combos is the closest. */ else { lw_dist2d_pt_pt(A1, B1, dl); lw_dist2d_pt_pt(A1, B3, dl); lw_dist2d_pt_pt(A2, B1, dl); lw_dist2d_pt_pt(A2, B3, dl); return LW_TRUE; } return LW_TRUE; } /** Finds the shortest distance between two segments. This function is changed so it is not doing any comparasion of distance but just sending every possible combination further to lw_dist2d_pt_seg */ int lw_dist2d_seg_seg(const POINT2D *A, const POINT2D *B, const POINT2D *C, const POINT2D *D, DISTPTS *dl) { double s_top, s_bot,s; double r_top, r_bot,r; LWDEBUGF(2, "lw_dist2d_seg_seg [%g,%g]->[%g,%g] by [%g,%g]->[%g,%g]", A->x,A->y,B->x,B->y, C->x,C->y, D->x, D->y); /*A and B are the same point */ if ( ( A->x == B->x) && (A->y == B->y) ) { return lw_dist2d_pt_seg(A,C,D,dl); } /*U and V are the same point */ if ( ( C->x == D->x) && (C->y == D->y) ) { dl->twisted= ((dl->twisted) * (-1)); return lw_dist2d_pt_seg(D,A,B,dl); } /* AB and CD are line segments */ /* from comp.graphics.algo Solving the above for r and s yields (Ay-Cy)(Dx-Cx)-(Ax-Cx)(Dy-Cy) r = ----------------------------- (eqn 1) (Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx) (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) s = ----------------------------- (eqn 2) (Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx) Let P be the position vector of the intersection point, then P=A+r(B-A) or Px=Ax+r(Bx-Ax) Py=Ay+r(By-Ay) By examining the values of r & s, you can also determine some other limiting conditions: If 0<=r<=1 & 0<=s<=1, intersection exists r<0 or r>1 or s<0 or s>1 line segments do not intersect If the denominator in eqn 1 is zero, AB & CD are parallel If the numerator in eqn 1 is also zero, AB & CD are collinear. */ r_top = (A->y-C->y)*(D->x-C->x) - (A->x-C->x)*(D->y-C->y); r_bot = (B->x-A->x)*(D->y-C->y) - (B->y-A->y)*(D->x-C->x); s_top = (A->y-C->y)*(B->x-A->x) - (A->x-C->x)*(B->y-A->y); s_bot = (B->x-A->x)*(D->y-C->y) - (B->y-A->y)*(D->x-C->x); if ( (r_bot==0) || (s_bot == 0) ) { if ((lw_dist2d_pt_seg(A,C,D,dl)) && (lw_dist2d_pt_seg(B,C,D,dl))) { dl->twisted= ((dl->twisted) * (-1)); /*here we change the order of inputted geometrys and that we notice by changing sign on dl->twisted*/ return ((lw_dist2d_pt_seg(C,A,B,dl)) && (lw_dist2d_pt_seg(D,A,B,dl))); /*if all is successful we return true*/ } else { return LW_FALSE; /* if any of the calls to lw_dist2d_pt_seg goes wrong we return false*/ } } s = s_top/s_bot; r= r_top/r_bot; if (((r<0) || (r>1) || (s<0) || (s>1)) || (dl->mode == DIST_MAX)) { if ((lw_dist2d_pt_seg(A,C,D,dl)) && (lw_dist2d_pt_seg(B,C,D,dl))) { dl->twisted= ((dl->twisted) * (-1)); /*here we change the order of inputted geometrys and that we notice by changing sign on dl->twisted*/ return ((lw_dist2d_pt_seg(C,A,B,dl)) && (lw_dist2d_pt_seg(D,A,B,dl))); /*if all is successful we return true*/ } else { return LW_FALSE; /* if any of the calls to lw_dist2d_pt_seg goes wrong we return false*/ } } else { if (dl->mode == DIST_MIN) /*If there is intersection we identify the intersection point and return it but only if we are looking for mindistance*/ { POINT2D theP; if (((A->x==C->x)&&(A->y==C->y))||((A->x==D->x)&&(A->y==D->y))) { theP.x = A->x; theP.y = A->y; } else if (((B->x==C->x)&&(B->y==C->y))||((B->x==D->x)&&(B->y==D->y))) { theP.x = B->x; theP.y = B->y; } else { theP.x = A->x+r*(B->x-A->x); theP.y = A->y+r*(B->y-A->y); } dl->distance=0.0; dl->p1=theP; dl->p2=theP; } return LW_TRUE; } lwerror("unspecified error in function lw_dist2d_seg_seg"); return LW_FALSE; /*If we have come here something is wrong*/ } /*------------------------------------------------------------------------------------------------------------ End of Brute force functions --------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------ New faster distance calculations --------------------------------------------------------------------------------------------------------------*/ /** The new faster calculation comparing pointarray to another pointarray the arrays can come from both polygons and linestrings. The naming is not good but comes from that it compares a chosen selection of the points not all of them */ int lw_dist2d_fast_ptarray_ptarray(POINTARRAY *l1, POINTARRAY *l2,DISTPTS *dl, GBOX *box1, GBOX *box2) { /*here we define two lists to hold our calculated "z"-values and the order number in the geometry*/ double k, thevalue; float deltaX, deltaY, c1m, c2m; POINT2D theP,c1, c2; float min1X, max1X, max1Y, min1Y,min2X, max2X, max2Y, min2Y; int t; int n1 = l1->npoints; int n2 = l2->npoints; LISTSTRUCT *list1, *list2; list1 = (LISTSTRUCT*)lwalloc(sizeof(LISTSTRUCT)*n1); list2 = (LISTSTRUCT*)lwalloc(sizeof(LISTSTRUCT)*n2); LWDEBUG(2, "lw_dist2d_fast_ptarray_ptarray is called"); max1X = box1->xmax; min1X = box1->xmin; max1Y = box1->ymax; min1Y = box1->ymin; max2X = box2->xmax; min2X = box2->xmin; max2Y = box2->ymax; min2Y = box2->ymin; /*we want the center of the bboxes, and calculate the slope between the centerpoints*/ c1.x = min1X + (max1X-min1X)/2; c1.y = min1Y + (max1Y-min1Y)/2; c2.x = min2X + (max2X-min2X)/2; c2.y = min2Y + (max2Y-min2Y)/2; deltaX=(c2.x-c1.x); deltaY=(c2.y-c1.y); /*Here we calculate where the line perpendicular to the center-center line crosses the axes for each vertex if the center-center line is vertical the perpendicular line will be horizontal and we find it's crossing the Y-axes with z = y-kx */ if ((deltaX*deltaX)<(deltaY*deltaY)) /*North or South*/ { k = -deltaX/deltaY; for (t=0; t<n1; t++) /*for each segment in L1 */ { getPoint2d_p(l1, t, &theP); thevalue = theP.y-(k*theP.x); list1[t].themeasure=thevalue; list1[t].pnr=t; } for (t=0; t<n2; t++) /*for each segment in L2*/ { getPoint2d_p(l2, t, &theP); thevalue = theP.y-(k*theP.x); list2[t].themeasure=thevalue; list2[t].pnr=t; } c1m = c1.y-(k*c1.x); c2m = c2.y-(k*c2.x); } /*if the center-center line is horizontal the perpendicular line will be vertical. To eliminate problems with deviding by zero we are here mirroring the coordinate-system and we find it's crossing the X-axes with z = x-(1/k)y */ else /*West or East*/ { k = -deltaY/deltaX; for (t=0; t<n1; t++) /*for each segment in L1 */ { getPoint2d_p(l1, t, &theP); thevalue = theP.x-(k*theP.y); list1[t].themeasure=thevalue; list1[t].pnr=t; /* lwnotice("l1 %d, measure=%f",t,thevalue ); */ } for (t=0; t<n2; t++) /*for each segment in L2*/ { getPoint2d_p(l2, t, &theP); thevalue = theP.x-(k*theP.y); list2[t].themeasure=thevalue; list2[t].pnr=t; /* lwnotice("l2 %d, measure=%f",t,thevalue ); */ } c1m = c1.x-(k*c1.y); c2m = c2.x-(k*c2.y); } /*we sort our lists by the calculated values*/ qsort(list1, n1, sizeof(LISTSTRUCT), struct_cmp_by_measure); qsort(list2, n2, sizeof(LISTSTRUCT), struct_cmp_by_measure); if (c1m < c2m) { if (!lw_dist2d_pre_seg_seg(l1,l2,list1,list2,k,dl)) { lwfree(list1); lwfree(list2); return LW_FALSE; } } else { dl->twisted= ((dl->twisted) * (-1)); if (!lw_dist2d_pre_seg_seg(l2,l1,list2,list1,k,dl)) { lwfree(list1); lwfree(list2); return LW_FALSE; } } lwfree(list1); lwfree(list2); return LW_TRUE; } int struct_cmp_by_measure(const void *a, const void *b) { LISTSTRUCT *ia = (LISTSTRUCT*)a; LISTSTRUCT *ib = (LISTSTRUCT*)b; return ( ia->themeasure>ib->themeasure ) ? 1 : -1; } /** preparation before lw_dist2d_seg_seg. */ int lw_dist2d_pre_seg_seg(POINTARRAY *l1, POINTARRAY *l2,LISTSTRUCT *list1, LISTSTRUCT *list2,double k, DISTPTS *dl) { POINT2D p1, p2, p3, p4, p01, p02; int pnr1,pnr2,pnr3,pnr4, n1, n2, i, u, r, twist; double maxmeasure; n1= l1->npoints; n2 = l2->npoints; LWDEBUG(2, "lw_dist2d_pre_seg_seg is called"); getPoint2d_p(l1, list1[0].pnr, &p1); getPoint2d_p(l2, list2[0].pnr, &p3); lw_dist2d_pt_pt(&p1, &p3,dl); maxmeasure = sqrt(dl->distance*dl->distance + (dl->distance*dl->distance*k*k)); twist = dl->twisted; /*to keep the incomming order between iterations*/ for (i =(n1-1); i>=0; --i) { /*we break this iteration when we have checked every point closer to our perpendicular "checkline" than our shortest found distance*/ if (((list2[0].themeasure-list1[i].themeasure)) > maxmeasure) break; for (r=-1; r<=1; r +=2) /*because we are not iterating in the original pointorder we have to check the segment before and after every point*/ { pnr1 = list1[i].pnr; getPoint2d_p(l1, pnr1, &p1); if (pnr1+r<0) { getPoint2d_p(l1, (n1-1), &p01); if (( p1.x == p01.x) && (p1.y == p01.y)) pnr2 = (n1-1); else pnr2 = pnr1; /* if it is a line and the last and first point is not the same we avoid the edge between start and end this way*/ } else if (pnr1+r>(n1-1)) { getPoint2d_p(l1, 0, &p01); if (( p1.x == p01.x) && (p1.y == p01.y)) pnr2 = 0; else pnr2 = pnr1; /* if it is a line and the last and first point is not the same we avoid the edge between start and end this way*/ } else pnr2 = pnr1+r; getPoint2d_p(l1, pnr2, &p2); for (u=0; u<n2; ++u) { if (((list2[u].themeasure-list1[i].themeasure)) >= maxmeasure) break; pnr3 = list2[u].pnr; getPoint2d_p(l2, pnr3, &p3); if (pnr3==0) { getPoint2d_p(l2, (n2-1), &p02); if (( p3.x == p02.x) && (p3.y == p02.y)) pnr4 = (n2-1); else pnr4 = pnr3; /* if it is a line and the last and first point is not the same we avoid the edge between start and end this way*/ } else pnr4 = pnr3-1; getPoint2d_p(l2, pnr4, &p4); dl->twisted=twist; if (!lw_dist2d_selected_seg_seg(&p1, &p2, &p3, &p4, dl)) return LW_FALSE; if (pnr3>=(n2-1)) { getPoint2d_p(l2, 0, &p02); if (( p3.x == p02.x) && (p3.y == p02.y)) pnr4 = 0; else pnr4 = pnr3; /* if it is a line and the last and first point is not the same we avoid the edge between start and end this way*/ } else pnr4 = pnr3+1; getPoint2d_p(l2, pnr4, &p4); dl->twisted=twist; /*we reset the "twist" for each iteration*/ if (!lw_dist2d_selected_seg_seg(&p1, &p2, &p3, &p4, dl)) return LW_FALSE; maxmeasure = sqrt(dl->distance*dl->distance + (dl->distance*dl->distance*k*k));/*here we "translate" the found mindistance so it can be compared to our "z"-values*/ } } } return LW_TRUE; } /** This is the same function as lw_dist2d_seg_seg but without any calculations to determine intersection since we already know they do not intersect */ int lw_dist2d_selected_seg_seg(POINT2D *A, POINT2D *B, POINT2D *C, POINT2D *D, DISTPTS *dl) { LWDEBUGF(2, "lw_dist2d_selected_seg_seg [%g,%g]->[%g,%g] by [%g,%g]->[%g,%g]", A->x,A->y,B->x,B->y, C->x,C->y, D->x, D->y); /*A and B are the same point */ if ( ( A->x == B->x) && (A->y == B->y) ) { return lw_dist2d_pt_seg(A,C,D,dl); } /*U and V are the same point */ if ( ( C->x == D->x) && (C->y == D->y) ) { dl->twisted= ((dl->twisted) * (-1)); return lw_dist2d_pt_seg(D,A,B,dl); } if ((lw_dist2d_pt_seg(A,C,D,dl)) && (lw_dist2d_pt_seg(B,C,D,dl))) { dl->twisted= ((dl->twisted) * (-1)); /*here we change the order of inputted geometrys and that we notice by changing sign on dl->twisted*/ return ((lw_dist2d_pt_seg(C,A,B,dl)) && (lw_dist2d_pt_seg(D,A,B,dl))); /*if all is successful we return true*/ } else { return LW_FALSE; /* if any of the calls to lw_dist2d_pt_seg goes wrong we return false*/ } } /*------------------------------------------------------------------------------------------------------------ End of New faster distance calculations --------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------ Functions in common for Brute force and new calculation --------------------------------------------------------------------------------------------------------------*/ /** lw_dist2d_comp from p to line A->B This one is now sending every occation to lw_dist2d_pt_pt Before it was handling occations where r was between 0 and 1 internally and just returning the distance without identifying the points. To get this points it was nessecary to change and it also showed to be about 10%faster. */ int lw_dist2d_pt_seg(const POINT2D *p, const POINT2D *A, const POINT2D *B, DISTPTS *dl) { POINT2D c; double r; /*if start==end, then use pt distance */ if ( ( A->x == B->x) && (A->y == B->y) ) { return lw_dist2d_pt_pt(p,A,dl); } /* * otherwise, we use comp.graphics.algorithms * Frequently Asked Questions method * * (1) AC dot AB * r = --------- * ||AB||^2 * r has the following meaning: * r=0 P = A * r=1 P = B * r<0 P is on the backward extension of AB * r>1 P is on the forward extension of AB * 0<r<1 P is interior to AB */ r = ( (p->x-A->x) * (B->x-A->x) + (p->y-A->y) * (B->y-A->y) )/( (B->x-A->x)*(B->x-A->x) +(B->y-A->y)*(B->y-A->y) ); /*This is for finding the maxdistance. the maxdistance have to be between two vertexes, compared to mindistance which can be between tvo vertexes vertex.*/ if (dl->mode == DIST_MAX) { if (r>=0.5) { return lw_dist2d_pt_pt(p,A,dl); } if (r<0.5) { return lw_dist2d_pt_pt(p,B,dl); } } if (r<0) /*If p projected on the line is outside point A*/ { return lw_dist2d_pt_pt(p,A,dl); } if (r>=1) /*If p projected on the line is outside point B or on point B*/ { return lw_dist2d_pt_pt(p,B,dl); } /*If the point p is on the segment this is a more robust way to find out that*/ if (( ((A->y-p->y)*(B->x-A->x)==(A->x-p->x)*(B->y-A->y) ) ) && (dl->mode == DIST_MIN)) { dl->distance = 0.0; dl->p1 = *p; dl->p2 = *p; } /*If the projection of point p on the segment is between A and B then we find that "point on segment" and send it to lw_dist2d_pt_pt*/ c.x=A->x + r * (B->x-A->x); c.y=A->y + r * (B->y-A->y); return lw_dist2d_pt_pt(p,&c,dl); } /** Compares incomming points and stores the points closest to each other or most far away from each other depending on dl->mode (max or min) */ int lw_dist2d_pt_pt(const POINT2D *thep1, const POINT2D *thep2, DISTPTS *dl) { double hside = thep2->x - thep1->x; double vside = thep2->y - thep1->y; double dist = sqrt ( hside*hside + vside*vside ); if (((dl->distance - dist)*(dl->mode))>0) /*multiplication with mode to handle mindistance (mode=1) and maxdistance (mode = (-1)*/ { dl->distance = dist; if (dl->twisted>0) /*To get the points in right order. twisted is updated between 1 and (-1) every time the order is changed earlier in the chain*/ { dl->p1 = *thep1; dl->p2 = *thep2; } else { dl->p1 = *thep2; dl->p2 = *thep1; } } return LW_TRUE; } /*------------------------------------------------------------------------------------------------------------ End of Functions in common for Brute force and new calculation --------------------------------------------------------------------------------------------------------------*/ /** The old function nessecary for ptarray_segmentize2d in ptarray.c */ double distance2d_pt_pt(const POINT2D *p1, const POINT2D *p2) { double hside = p2->x - p1->x; double vside = p2->y - p1->y; return sqrt ( hside*hside + vside*vside ); } /** The old function nessecary for ptarray_segmentize2d in ptarray.c */ double distance2d_pt_seg(const POINT2D *p, const POINT2D *A, const POINT2D *B) { double r,s; /*if start==end, then use pt distance */ if ( ( A->x == B->x) && (A->y == B->y) ) return distance2d_pt_pt(p,A); /* * otherwise, we use comp.graphics.algorithms * Frequently Asked Questions method * * (1) AC dot AB * r = --------- * ||AB||^2 * r has the following meaning: * r=0 P = A * r=1 P = B * r<0 P is on the backward extension of AB * r>1 P is on the forward extension of AB * 0<r<1 P is interior to AB */ r = ( (p->x-A->x) * (B->x-A->x) + (p->y-A->y) * (B->y-A->y) )/( (B->x-A->x)*(B->x-A->x) +(B->y-A->y)*(B->y-A->y) ); if (r<0) return distance2d_pt_pt(p,A); if (r>1) return distance2d_pt_pt(p,B); /* * (2) * (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) * s = ----------------------------- * L^2 * * Then the distance from C to P = |s|*L. * */ s = ( (A->y-p->y)*(B->x-A->x)- (A->x-p->x)*(B->y-A->y) ) / ( (B->x-A->x)*(B->x-A->x) +(B->y-A->y)*(B->y-A->y) ); return FP_ABS(s) * sqrt( (B->x-A->x)*(B->x-A->x) + (B->y-A->y)*(B->y-A->y) ); } /** * Compute the azimuth of segment AB in radians. * Return 0 on exception (same point), 1 otherwise. */ int azimuth_pt_pt(const POINT2D *A, const POINT2D *B, double *d) { if ( A->x == B->x ) { if ( A->y < B->y ) *d=0.0; else if ( A->y > B->y ) *d=M_PI; else return 0; return 1; } if ( A->y == B->y ) { if ( A->x < B->x ) *d=M_PI/2; else if ( A->x > B->x ) *d=M_PI+(M_PI/2); else return 0; return 1; } if ( A->x < B->x ) { if ( A->y < B->y ) { *d=atan(fabs(A->x - B->x) / fabs(A->y - B->y) ); } else /* ( A->y > B->y ) - equality case handled above */ { *d=atan(fabs(A->y - B->y) / fabs(A->x - B->x) ) + (M_PI/2); } } else /* ( A->x > B->x ) - equality case handled above */ { if ( A->y > B->y ) { *d=atan(fabs(A->x - B->x) / fabs(A->y - B->y) ) + M_PI; } else /* ( A->y < B->y ) - equality case handled above */ { *d=atan(fabs(A->y - B->y) / fabs(A->x - B->x) ) + (M_PI+(M_PI/2)); } } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/measures3d.h������������������������������������������������������0000644�0000000�0000000�00000006266�11722777314�020012� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� /********************************************************************** * $Id: measures.h 4715 2009-11-01 17:58:42Z nicklas $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2011 Nicklas Avén * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #define DOT(u,v) (u.x * v.x + u.y * v.y + u.z * v.z) #define VECTORLENGTH(v) sqrt((v.x * v.x) + (v.y * v.y) + (v.z * v.z)) /** Structure used in distance-calculations */ typedef struct { double distance; /*the distance between p1 and p2*/ POINT3DZ p1; POINT3DZ p2; int mode; /*the direction of looking, if thedir = -1 then we look for 3dmaxdistance and if it is 1 then we look for 3dmindistance*/ int twisted; /*To preserve the order of incoming points to match the first and second point in 3dshortest and 3dlongest line*/ double tolerance; /*the tolerance for 3ddwithin and 3ddfullywithin*/ } DISTPTS3D; typedef struct { double x,y,z; } VECTOR3D; typedef struct { POINT3DZ pop; /*Point On Plane*/ VECTOR3D pv; /*Perpendicular normal vector*/ } PLANE3D; /* Preprocessing functions */ int lw_dist3d_distribute_bruteforce(LWGEOM *lwg1, LWGEOM *lwg2, DISTPTS3D *dl); int lw_dist3d_recursive(const LWGEOM *lwg1,const LWGEOM *lwg2, DISTPTS3D *dl); int lw_dist3d_distribute_fast(LWGEOM *lwg1, LWGEOM *lwg2, DISTPTS3D *dl); /* Brute force functions */ int lw_dist3d_pt_ptarray(POINT3DZ *p, POINTARRAY *pa, DISTPTS3D *dl); int lw_dist3d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS3D *dl); int lw_dist3d_point_line(LWPOINT *point, LWLINE *line, DISTPTS3D *dl); int lw_dist3d_line_line(LWLINE *line1,LWLINE *line2 , DISTPTS3D *dl); int lw_dist3d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS3D *dl); int lw_dist3d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS3D *dl); int lw_dist3d_poly_poly(LWPOLY *poly1, LWPOLY *poly2, DISTPTS3D *dl); int lw_dist3d_ptarray_ptarray(POINTARRAY *l1, POINTARRAY *l2,DISTPTS3D *dl); int lw_dist3d_seg_seg(POINT3DZ *A, POINT3DZ *B, POINT3DZ *C, POINT3DZ *D, DISTPTS3D *dl); int lw_dist3d_pt_pt(POINT3DZ *p1, POINT3DZ *p2, DISTPTS3D *dl); int lw_dist3d_pt_seg(POINT3DZ *p, POINT3DZ *A, POINT3DZ *B, DISTPTS3D *dl); int lw_dist3d_pt_poly(POINT3DZ *p, LWPOLY *poly, PLANE3D *plane,POINT3DZ *projp, DISTPTS3D *dl); int lw_dist3d_ptarray_poly(POINTARRAY *pa, LWPOLY *poly, PLANE3D *plane, DISTPTS3D *dl); double project_point_on_plane(POINT3DZ *p, PLANE3D *pl, POINT3DZ *p0); int define_plane(POINTARRAY *pa, PLANE3D *pl); int pt_in_ring_3d(const POINT3DZ *p, const POINTARRAY *ring,PLANE3D *plane); /* Helper functions */ int get_3dvector_from_points(POINT3DZ *p1,POINT3DZ *p2, VECTOR3D *v); int get_3dcross_product(VECTOR3D *v1,VECTOR3D *v2, VECTOR3D *v); int get_3dvector_from_points(POINT3DZ *p1,POINT3DZ *p2, VECTOR3D *v) { v->x=p2->x-p1->x; v->y=p2->y-p1->y; v->z=p2->z-p1->z; return LW_TRUE; } int get_3dcross_product(VECTOR3D *v1,VECTOR3D *v2, VECTOR3D *v) { v->x=(v1->y*v2->z)-(v1->z*v2->y); v->y=(v1->z*v2->x)-(v1->x*v2->z); v->z=(v1->x*v2->y)-(v1->y*v2->x); return LW_TRUE; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwout_geojson.c���������������������������������������������������0000644�0000000�0000000�00000044602�12153051513�020605� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwout_geojson.c 11511 2013-06-03 08:26:51Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2003 Refractions Research Inc. * Copyright 2009-2010 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of hte GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include <string.h> /* strlen */ #include <assert.h> static char *asgeojson_point(const LWPOINT *point, char *srs, GBOX *bbox, int precision); static char *asgeojson_line(const LWLINE *line, char *srs, GBOX *bbox, int precision); static char *asgeojson_poly(const LWPOLY *poly, char *srs, GBOX *bbox, int precision); static char * asgeojson_multipoint(const LWMPOINT *mpoint, char *srs, GBOX *bbox, int precision); static char * asgeojson_multiline(const LWMLINE *mline, char *srs, GBOX *bbox, int precision); static char * asgeojson_multipolygon(const LWMPOLY *mpoly, char *srs, GBOX *bbox, int precision); static char * asgeojson_collection(const LWCOLLECTION *col, char *srs, GBOX *bbox, int precision); static size_t asgeojson_geom_size(const LWGEOM *geom, GBOX *bbox, int precision); static size_t asgeojson_geom_buf(const LWGEOM *geom, char *output, GBOX *bbox, int precision); static size_t pointArray_to_geojson(POINTARRAY *pa, char *buf, int precision); static size_t pointArray_geojson_size(POINTARRAY *pa, int precision); /** * Takes a GEOMETRY and returns a GeoJson representation */ char * lwgeom_to_geojson(const LWGEOM *geom, char *srs, int precision, int has_bbox) { int type = geom->type; GBOX *bbox = NULL; GBOX tmp; if ( precision > OUT_MAX_DOUBLE_PRECISION ) precision = OUT_MAX_DOUBLE_PRECISION; if (has_bbox) { /* Whether these are geography or geometry, the GeoJSON expects a cartesian bounding box */ lwgeom_calculate_gbox_cartesian(geom, &tmp); bbox = &tmp; } switch (type) { case POINTTYPE: return asgeojson_point((LWPOINT*)geom, srs, bbox, precision); case LINETYPE: return asgeojson_line((LWLINE*)geom, srs, bbox, precision); case POLYGONTYPE: return asgeojson_poly((LWPOLY*)geom, srs, bbox, precision); case MULTIPOINTTYPE: return asgeojson_multipoint((LWMPOINT*)geom, srs, bbox, precision); case MULTILINETYPE: return asgeojson_multiline((LWMLINE*)geom, srs, bbox, precision); case MULTIPOLYGONTYPE: return asgeojson_multipolygon((LWMPOLY*)geom, srs, bbox, precision); case COLLECTIONTYPE: return asgeojson_collection((LWCOLLECTION*)geom, srs, bbox, precision); default: lwerror("lwgeom_to_geojson: '%s' geometry type not supported", lwtype_name(type)); } /* Never get here */ return NULL; } /** * Handle SRS */ static size_t asgeojson_srs_size(char *srs) { int size; size = sizeof("'crs':{'type':'name',"); size += sizeof("'properties':{'name':''}},"); size += strlen(srs) * sizeof(char); return size; } static size_t asgeojson_srs_buf(char *output, char *srs) { char *ptr = output; ptr += sprintf(ptr, "\"crs\":{\"type\":\"name\","); ptr += sprintf(ptr, "\"properties\":{\"name\":\"%s\"}},", srs); return (ptr-output); } /** * Handle Bbox */ static size_t asgeojson_bbox_size(int hasz, int precision) { int size; if (!hasz) { size = sizeof("\"bbox\":[,,,],"); size += 2 * 2 * (OUT_MAX_DIGS_DOUBLE + precision); } else { size = sizeof("\"bbox\":[,,,,,],"); size += 2 * 3 * (OUT_MAX_DIGS_DOUBLE + precision); } return size; } static size_t asgeojson_bbox_buf(char *output, GBOX *bbox, int hasz, int precision) { char *ptr = output; if (!hasz) ptr += sprintf(ptr, "\"bbox\":[%.*f,%.*f,%.*f,%.*f],", precision, bbox->xmin, precision, bbox->ymin, precision, bbox->xmax, precision, bbox->ymax); else ptr += sprintf(ptr, "\"bbox\":[%.*f,%.*f,%.*f,%.*f,%.*f,%.*f],", precision, bbox->xmin, precision, bbox->ymin, precision, bbox->zmin, precision, bbox->xmax, precision, bbox->ymax, precision, bbox->zmax); return (ptr-output); } /** * Point Geometry */ static size_t asgeojson_point_size(const LWPOINT *point, char *srs, GBOX *bbox, int precision) { int size; size = pointArray_geojson_size(point->point, precision); size += sizeof("{'type':'Point',"); size += sizeof("'coordinates':}"); if ( lwpoint_is_empty(point) ) size += 2; /* [] */ if (srs) size += asgeojson_srs_size(srs); if (bbox) size += asgeojson_bbox_size(FLAGS_GET_Z(point->flags), precision); return size; } static size_t asgeojson_point_buf(const LWPOINT *point, char *srs, char *output, GBOX *bbox, int precision) { char *ptr = output; ptr += sprintf(ptr, "{\"type\":\"Point\","); if (srs) ptr += asgeojson_srs_buf(ptr, srs); if (bbox) ptr += asgeojson_bbox_buf(ptr, bbox, FLAGS_GET_Z(point->flags), precision); ptr += sprintf(ptr, "\"coordinates\":"); if ( lwpoint_is_empty(point) ) ptr += sprintf(ptr, "[]"); ptr += pointArray_to_geojson(point->point, ptr, precision); ptr += sprintf(ptr, "}"); return (ptr-output); } static char * asgeojson_point(const LWPOINT *point, char *srs, GBOX *bbox, int precision) { char *output; int size; size = asgeojson_point_size(point, srs, bbox, precision); output = lwalloc(size); asgeojson_point_buf(point, srs, output, bbox, precision); return output; } /** * Line Geometry */ static size_t asgeojson_line_size(const LWLINE *line, char *srs, GBOX *bbox, int precision) { int size; size = sizeof("{'type':'LineString',"); if (srs) size += asgeojson_srs_size(srs); if (bbox) size += asgeojson_bbox_size(FLAGS_GET_Z(line->flags), precision); size += sizeof("'coordinates':[]}"); size += pointArray_geojson_size(line->points, precision); return size; } static size_t asgeojson_line_buf(const LWLINE *line, char *srs, char *output, GBOX *bbox, int precision) { char *ptr=output; ptr += sprintf(ptr, "{\"type\":\"LineString\","); if (srs) ptr += asgeojson_srs_buf(ptr, srs); if (bbox) ptr += asgeojson_bbox_buf(ptr, bbox, FLAGS_GET_Z(line->flags), precision); ptr += sprintf(ptr, "\"coordinates\":["); ptr += pointArray_to_geojson(line->points, ptr, precision); ptr += sprintf(ptr, "]}"); return (ptr-output); } static char * asgeojson_line(const LWLINE *line, char *srs, GBOX *bbox, int precision) { char *output; int size; size = asgeojson_line_size(line, srs, bbox, precision); output = lwalloc(size); asgeojson_line_buf(line, srs, output, bbox, precision); return output; } /** * Polygon Geometry */ static size_t asgeojson_poly_size(const LWPOLY *poly, char *srs, GBOX *bbox, int precision) { size_t size; int i; size = sizeof("{\"type\":\"Polygon\","); if (srs) size += asgeojson_srs_size(srs); if (bbox) size += asgeojson_bbox_size(FLAGS_GET_Z(poly->flags), precision); size += sizeof("\"coordinates\":["); for (i=0, size=0; i<poly->nrings; i++) { size += pointArray_geojson_size(poly->rings[i], precision); size += sizeof("[]"); } size += sizeof(",") * i; size += sizeof("]}"); return size; } static size_t asgeojson_poly_buf(const LWPOLY *poly, char *srs, char *output, GBOX *bbox, int precision) { int i; char *ptr=output; ptr += sprintf(ptr, "{\"type\":\"Polygon\","); if (srs) ptr += asgeojson_srs_buf(ptr, srs); if (bbox) ptr += asgeojson_bbox_buf(ptr, bbox, FLAGS_GET_Z(poly->flags), precision); ptr += sprintf(ptr, "\"coordinates\":["); for (i=0; i<poly->nrings; i++) { if (i) ptr += sprintf(ptr, ","); ptr += sprintf(ptr, "["); ptr += pointArray_to_geojson(poly->rings[i], ptr, precision); ptr += sprintf(ptr, "]"); } ptr += sprintf(ptr, "]}"); return (ptr-output); } static char * asgeojson_poly(const LWPOLY *poly, char *srs, GBOX *bbox, int precision) { char *output; int size; size = asgeojson_poly_size(poly, srs, bbox, precision); output = lwalloc(size); asgeojson_poly_buf(poly, srs, output, bbox, precision); return output; } /** * Multipoint Geometry */ static size_t asgeojson_multipoint_size(const LWMPOINT *mpoint, char *srs, GBOX *bbox, int precision) { LWPOINT * point; int size; int i; size = sizeof("{'type':'MultiPoint',"); if (srs) size += asgeojson_srs_size(srs); if (bbox) size += asgeojson_bbox_size(FLAGS_GET_Z(mpoint->flags), precision); size += sizeof("'coordinates':[]}"); for (i=0; i<mpoint->ngeoms; i++) { point = mpoint->geoms[i]; size += pointArray_geojson_size(point->point, precision); } size += sizeof(",") * i; return size; } static size_t asgeojson_multipoint_buf(const LWMPOINT *mpoint, char *srs, char *output, GBOX *bbox, int precision) { LWPOINT *point; int i; char *ptr=output; ptr += sprintf(ptr, "{\"type\":\"MultiPoint\","); if (srs) ptr += asgeojson_srs_buf(ptr, srs); if (bbox) ptr += asgeojson_bbox_buf(ptr, bbox, FLAGS_GET_Z(mpoint->flags), precision); ptr += sprintf(ptr, "\"coordinates\":["); for (i=0; i<mpoint->ngeoms; i++) { if (i) ptr += sprintf(ptr, ","); point = mpoint->geoms[i]; ptr += pointArray_to_geojson(point->point, ptr, precision); } ptr += sprintf(ptr, "]}"); return (ptr - output); } static char * asgeojson_multipoint(const LWMPOINT *mpoint, char *srs, GBOX *bbox, int precision) { char *output; int size; size = asgeojson_multipoint_size(mpoint, srs, bbox, precision); output = lwalloc(size); asgeojson_multipoint_buf(mpoint, srs, output, bbox, precision); return output; } /** * Multiline Geometry */ static size_t asgeojson_multiline_size(const LWMLINE *mline, char *srs, GBOX *bbox, int precision) { LWLINE * line; int size; int i; size = sizeof("{'type':'MultiLineString',"); if (srs) size += asgeojson_srs_size(srs); if (bbox) size += asgeojson_bbox_size(FLAGS_GET_Z(mline->flags), precision); size += sizeof("'coordinates':[]}"); for (i=0 ; i<mline->ngeoms; i++) { line = mline->geoms[i]; size += pointArray_geojson_size(line->points, precision); size += sizeof("[]"); } size += sizeof(",") * i; return size; } static size_t asgeojson_multiline_buf(const LWMLINE *mline, char *srs, char *output, GBOX *bbox, int precision) { LWLINE *line; int i; char *ptr=output; ptr += sprintf(ptr, "{\"type\":\"MultiLineString\","); if (srs) ptr += asgeojson_srs_buf(ptr, srs); if (bbox) ptr += asgeojson_bbox_buf(ptr, bbox, FLAGS_GET_Z(mline->flags), precision); ptr += sprintf(ptr, "\"coordinates\":["); for (i=0; i<mline->ngeoms; i++) { if (i) ptr += sprintf(ptr, ","); ptr += sprintf(ptr, "["); line = mline->geoms[i]; ptr += pointArray_to_geojson(line->points, ptr, precision); ptr += sprintf(ptr, "]"); } ptr += sprintf(ptr, "]}"); return (ptr - output); } static char * asgeojson_multiline(const LWMLINE *mline, char *srs, GBOX *bbox, int precision) { char *output; int size; size = asgeojson_multiline_size(mline, srs, bbox, precision); output = lwalloc(size); asgeojson_multiline_buf(mline, srs, output, bbox, precision); return output; } /** * MultiPolygon Geometry */ static size_t asgeojson_multipolygon_size(const LWMPOLY *mpoly, char *srs, GBOX *bbox, int precision) { LWPOLY *poly; int size; int i, j; size = sizeof("{'type':'MultiPolygon',"); if (srs) size += asgeojson_srs_size(srs); if (bbox) size += asgeojson_bbox_size(FLAGS_GET_Z(mpoly->flags), precision); size += sizeof("'coordinates':[]}"); for (i=0; i < mpoly->ngeoms; i++) { poly = mpoly->geoms[i]; for (j=0 ; j <poly->nrings ; j++) { size += pointArray_geojson_size(poly->rings[j], precision); size += sizeof("[]"); } size += sizeof("[]"); } size += sizeof(",") * i; size += sizeof("]}"); return size; } static size_t asgeojson_multipolygon_buf(const LWMPOLY *mpoly, char *srs, char *output, GBOX *bbox, int precision) { LWPOLY *poly; int i, j; char *ptr=output; ptr += sprintf(ptr, "{\"type\":\"MultiPolygon\","); if (srs) ptr += asgeojson_srs_buf(ptr, srs); if (bbox) ptr += asgeojson_bbox_buf(ptr, bbox, FLAGS_GET_Z(mpoly->flags), precision); ptr += sprintf(ptr, "\"coordinates\":["); for (i=0; i<mpoly->ngeoms; i++) { if (i) ptr += sprintf(ptr, ","); ptr += sprintf(ptr, "["); poly = mpoly->geoms[i]; for (j=0 ; j < poly->nrings ; j++) { if (j) ptr += sprintf(ptr, ","); ptr += sprintf(ptr, "["); ptr += pointArray_to_geojson(poly->rings[j], ptr, precision); ptr += sprintf(ptr, "]"); } ptr += sprintf(ptr, "]"); } ptr += sprintf(ptr, "]}"); return (ptr - output); } static char * asgeojson_multipolygon(const LWMPOLY *mpoly, char *srs, GBOX *bbox, int precision) { char *output; int size; size = asgeojson_multipolygon_size(mpoly, srs, bbox, precision); output = lwalloc(size); asgeojson_multipolygon_buf(mpoly, srs, output, bbox, precision); return output; } /** * Collection Geometry */ static size_t asgeojson_collection_size(const LWCOLLECTION *col, char *srs, GBOX *bbox, int precision) { int i; int size; LWGEOM *subgeom; size = sizeof("{'type':'GeometryCollection',"); if (srs) size += asgeojson_srs_size(srs); if (bbox) size += asgeojson_bbox_size(FLAGS_GET_Z(col->flags), precision); size += sizeof("'geometries':"); for (i=0; i<col->ngeoms; i++) { subgeom = col->geoms[i]; size += asgeojson_geom_size(subgeom, NULL, precision); } size += sizeof(",") * i; size += sizeof("]}"); return size; } static size_t asgeojson_collection_buf(const LWCOLLECTION *col, char *srs, char *output, GBOX *bbox, int precision) { int i; char *ptr=output; LWGEOM *subgeom; ptr += sprintf(ptr, "{\"type\":\"GeometryCollection\","); if (srs) ptr += asgeojson_srs_buf(ptr, srs); if (col->ngeoms && bbox) ptr += asgeojson_bbox_buf(ptr, bbox, FLAGS_GET_Z(col->flags), precision); ptr += sprintf(ptr, "\"geometries\":["); for (i=0; i<col->ngeoms; i++) { if (i) ptr += sprintf(ptr, ","); subgeom = col->geoms[i]; ptr += asgeojson_geom_buf(subgeom, ptr, NULL, precision); } ptr += sprintf(ptr, "]}"); return (ptr - output); } static char * asgeojson_collection(const LWCOLLECTION *col, char *srs, GBOX *bbox, int precision) { char *output; int size; size = asgeojson_collection_size(col, srs, bbox, precision); output = lwalloc(size); asgeojson_collection_buf(col, srs, output, bbox, precision); return output; } static size_t asgeojson_geom_size(const LWGEOM *geom, GBOX *bbox, int precision) { int type = geom->type; size_t size = 0; switch (type) { case POINTTYPE: size = asgeojson_point_size((LWPOINT*)geom, NULL, bbox, precision); break; case LINETYPE: size = asgeojson_line_size((LWLINE*)geom, NULL, bbox, precision); break; case POLYGONTYPE: size = asgeojson_poly_size((LWPOLY*)geom, NULL, bbox, precision); break; case MULTIPOINTTYPE: size = asgeojson_multipoint_size((LWMPOINT*)geom, NULL, bbox, precision); break; case MULTILINETYPE: size = asgeojson_multiline_size((LWMLINE*)geom, NULL, bbox, precision); break; case MULTIPOLYGONTYPE: size = asgeojson_multipolygon_size((LWMPOLY*)geom, NULL, bbox, precision); break; default: lwerror("GeoJson: geometry not supported."); } return size; } static size_t asgeojson_geom_buf(const LWGEOM *geom, char *output, GBOX *bbox, int precision) { int type = geom->type; char *ptr=output; switch (type) { case POINTTYPE: ptr += asgeojson_point_buf((LWPOINT*)geom, NULL, ptr, bbox, precision); break; case LINETYPE: ptr += asgeojson_line_buf((LWLINE*)geom, NULL, ptr, bbox, precision); break; case POLYGONTYPE: ptr += asgeojson_poly_buf((LWPOLY*)geom, NULL, ptr, bbox, precision); break; case MULTIPOINTTYPE: ptr += asgeojson_multipoint_buf((LWMPOINT*)geom, NULL, ptr, bbox, precision); break; case MULTILINETYPE: ptr += asgeojson_multiline_buf((LWMLINE*)geom, NULL, ptr, bbox, precision); break; case MULTIPOLYGONTYPE: ptr += asgeojson_multipolygon_buf((LWMPOLY*)geom, NULL, ptr, bbox, precision); break; default: if (bbox) lwfree(bbox); lwerror("GeoJson: geometry not supported."); } return (ptr-output); } /* * Print an ordinate value using at most the given number of decimal digits * * The actual number of printed decimal digits may be less than the * requested ones if out of significant digits. * * The function will not write more than maxsize bytes, including the * terminating NULL. Returns the number of bytes that would have been * written if there was enough space (excluding terminating NULL). * So a return of ``bufsize'' or more means that the string was * truncated and misses a terminating NULL. * * TODO: export ? * */ static int lwprint_double(double d, int maxdd, char *buf, size_t bufsize) { double ad = fabs(d); int ndd = ad < 1 ? 0 : floor(log10(ad))+1; /* non-decimal digits */ if (fabs(d) < OUT_MAX_DOUBLE) { if ( maxdd > (OUT_MAX_DOUBLE_PRECISION - ndd) ) maxdd -= ndd; return snprintf(buf, bufsize, "%.*f", maxdd, d); } else { return snprintf(buf, bufsize, "%g", d); } } static size_t pointArray_to_geojson(POINTARRAY *pa, char *output, int precision) { int i; char *ptr; #define BUFSIZE OUT_MAX_DIGS_DOUBLE+OUT_MAX_DOUBLE_PRECISION char x[BUFSIZE+1]; char y[BUFSIZE+1]; char z[BUFSIZE+1]; assert ( precision <= OUT_MAX_DOUBLE_PRECISION ); /* Ensure a terminating NULL at the end of buffers * so that we don't need to check for truncation * inprint_double */ x[BUFSIZE] = '\0'; y[BUFSIZE] = '\0'; z[BUFSIZE] = '\0'; ptr = output; /* TODO: rewrite this loop to be simpler and possibly quicker */ if (!FLAGS_GET_Z(pa->flags)) { for (i=0; i<pa->npoints; i++) { POINT2D pt; getPoint2d_p(pa, i, &pt); lwprint_double(pt.x, precision, x, BUFSIZE); trim_trailing_zeros(x); lwprint_double(pt.y, precision, y, BUFSIZE); trim_trailing_zeros(y); if ( i ) ptr += sprintf(ptr, ","); ptr += sprintf(ptr, "[%s,%s]", x, y); } } else { for (i=0; i<pa->npoints; i++) { POINT4D pt; getPoint4d_p(pa, i, &pt); lwprint_double(pt.x, precision, x, BUFSIZE); trim_trailing_zeros(x); lwprint_double(pt.y, precision, y, BUFSIZE); trim_trailing_zeros(y); lwprint_double(pt.z, precision, z, BUFSIZE); trim_trailing_zeros(z); if ( i ) ptr += sprintf(ptr, ","); ptr += sprintf(ptr, "[%s,%s,%s]", x, y, z); } } return (ptr-output); } /** * Returns maximum size of rendered pointarray in bytes. */ static size_t pointArray_geojson_size(POINTARRAY *pa, int precision) { assert ( precision <= OUT_MAX_DOUBLE_PRECISION ); if (FLAGS_NDIMS(pa->flags) == 2) return (OUT_MAX_DIGS_DOUBLE + precision + sizeof(",")) * 2 * pa->npoints + sizeof(",[]"); return (OUT_MAX_DIGS_DOUBLE + precision + sizeof(",,")) * 3 * pa->npoints + sizeof(",[]"); } ������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkt_parse.y��������������������������������������������������0000644�0000000�0000000�00000046776�12047044677�021022� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* WKT Parser */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include "lwin_wkt.h" #include "lwin_wkt_parse.h" #include "lwgeom_log.h" /* Prototypes to quiet the compiler */ int wkt_yyparse(void); void wkt_yyerror(const char *str); int wkt_yylex(void); /* Declare the global parser variable */ LWGEOM_PARSER_RESULT global_parser_result; /* Turn on/off verbose parsing (turn off for production) */ int wkt_yydebug = 0; /* * Error handler called by the bison parser. Mostly we will be * catching our own errors and filling out the message and errlocation * from WKT_ERROR in the grammar, but we keep this one * around just in case. */ void wkt_yyerror(const char *str) { /* If we haven't already set a message and location, let's set one now. */ if ( ! global_parser_result.message ) { global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errcode = PARSER_ERROR_OTHER; global_parser_result.errlocation = wkt_yylloc.last_column; } LWDEBUGF(4,"%s", str); } /** * Parse a WKT geometry string into an LWGEOM structure. Note that this * process uses globals and is not re-entrant, so don't call it within itself * (eg, from within other functions in lwin_wkt.c) or from a threaded program. * Note that parser_result.wkinput picks up a reference to wktstr. */ int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int parser_check_flags) { int parse_rv = 0; /* Clean up our global parser result. */ lwgeom_parser_result_init(&global_parser_result); /* Set the input text string, and parse checks. */ global_parser_result.wkinput = wktstr; global_parser_result.parser_check_flags = parser_check_flags; wkt_lexer_init(wktstr); /* Lexer ready */ parse_rv = wkt_yyparse(); /* Run the parse */ LWDEBUGF(4,"wkt_yyparse returned %d", parse_rv); wkt_lexer_close(); /* Clean up lexer */ /* A non-zero parser return is an error. */ if ( parse_rv != 0 ) { if( ! global_parser_result.errcode ) { global_parser_result.errcode = PARSER_ERROR_OTHER; global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errlocation = wkt_yylloc.last_column; } LWDEBUGF(5, "error returned by wkt_yyparse() @ %d: [%d] '%s'", global_parser_result.errlocation, global_parser_result.errcode, global_parser_result.message); /* Copy the global values into the return pointer */ *parser_result = global_parser_result; return LW_FAILURE; } /* Copy the global value into the return pointer */ *parser_result = global_parser_result; return LW_SUCCESS; } #define WKT_ERROR() { if ( global_parser_result.errcode != 0 ) { YYERROR; } } %} %locations %error-verbose %name-prefix="wkt_yy" %union { int integervalue; double doublevalue; char *stringvalue; LWGEOM *geometryvalue; POINT coordinatevalue; POINTARRAY *ptarrayvalue; } %token POINT_TOK LINESTRING_TOK POLYGON_TOK %token MPOINT_TOK MLINESTRING_TOK MPOLYGON_TOK %token MSURFACE_TOK MCURVE_TOK CURVEPOLYGON_TOK COMPOUNDCURVE_TOK CIRCULARSTRING_TOK %token COLLECTION_TOK %token RBRACKET_TOK LBRACKET_TOK COMMA_TOK EMPTY_TOK %token SEMICOLON_TOK %token TRIANGLE_TOK TIN_TOK %token POLYHEDRALSURFACE_TOK %token <doublevalue> DOUBLE_TOK %token <stringvalue> DIMENSIONALITY_TOK %token <integervalue> SRID_TOK %type <ptarrayvalue> ring %type <ptarrayvalue> patchring %type <ptarrayvalue> ptarray %type <coordinatevalue> coordinate %type <geometryvalue> circularstring %type <geometryvalue> compoundcurve %type <geometryvalue> compound_list %type <geometryvalue> curve_list %type <geometryvalue> curvepolygon %type <geometryvalue> curvering %type <geometryvalue> curvering_list %type <geometryvalue> geometry %type <geometryvalue> geometry_no_srid %type <geometryvalue> geometry_list %type <geometryvalue> geometrycollection %type <geometryvalue> linestring %type <geometryvalue> linestring_list %type <geometryvalue> linestring_untagged %type <geometryvalue> multicurve %type <geometryvalue> multilinestring %type <geometryvalue> multipoint %type <geometryvalue> multipolygon %type <geometryvalue> multisurface %type <geometryvalue> patch %type <geometryvalue> patch_list %type <geometryvalue> patchring_list %type <geometryvalue> point %type <geometryvalue> point_list %type <geometryvalue> point_untagged %type <geometryvalue> polygon %type <geometryvalue> polygon_list %type <geometryvalue> polygon_untagged %type <geometryvalue> polyhedralsurface %type <geometryvalue> ring_list %type <geometryvalue> surface_list %type <geometryvalue> tin %type <geometryvalue> triangle %type <geometryvalue> triangle_list %type <geometryvalue> triangle_untagged /* These clean up memory on errors and parser aborts. */ %destructor { ptarray_free($$); } ptarray %destructor { ptarray_free($$); } ring %destructor { ptarray_free($$); } patchring %destructor { lwgeom_free($$); } curvering_list %destructor { lwgeom_free($$); } triangle_list %destructor { lwgeom_free($$); } surface_list %destructor { lwgeom_free($$); } polygon_list %destructor { lwgeom_free($$); } patch_list %destructor { lwgeom_free($$); } point_list %destructor { lwgeom_free($$); } linestring_list %destructor { lwgeom_free($$); } curve_list %destructor { lwgeom_free($$); } compound_list %destructor { lwgeom_free($$); } ring_list %destructor { lwgeom_free($$); } patchring_list %destructor { lwgeom_free($$); } circularstring %destructor { lwgeom_free($$); } compoundcurve %destructor { lwgeom_free($$); } curvepolygon %destructor { lwgeom_free($$); } curvering %destructor { lwgeom_free($$); } geometry_no_srid %destructor { lwgeom_free($$); } geometrycollection %destructor { lwgeom_free($$); } linestring %destructor { lwgeom_free($$); } linestring_untagged %destructor { lwgeom_free($$); } multicurve %destructor { lwgeom_free($$); } multilinestring %destructor { lwgeom_free($$); } multipoint %destructor { lwgeom_free($$); } multipolygon %destructor { lwgeom_free($$); } multisurface %destructor { lwgeom_free($$); } point %destructor { lwgeom_free($$); } point_untagged %destructor { lwgeom_free($$); } polygon %destructor { lwgeom_free($$); } patch %destructor { lwgeom_free($$); } polygon_untagged %destructor { lwgeom_free($$); } polyhedralsurface %destructor { lwgeom_free($$); } tin %destructor { lwgeom_free($$); } triangle %destructor { lwgeom_free($$); } triangle_untagged %% geometry: geometry_no_srid { wkt_parser_geometry_new($1, SRID_UNKNOWN); WKT_ERROR(); } | SRID_TOK SEMICOLON_TOK geometry_no_srid { wkt_parser_geometry_new($3, $1); WKT_ERROR(); } ; geometry_no_srid : point { $$ = $1; } | linestring { $$ = $1; } | circularstring { $$ = $1; } | compoundcurve { $$ = $1; } | polygon { $$ = $1; } | curvepolygon { $$ = $1; } | multipoint { $$ = $1; } | multilinestring { $$ = $1; } | multipolygon { $$ = $1; } | multisurface { $$ = $1; } | multicurve { $$ = $1; } | tin { $$ = $1; } | polyhedralsurface { $$ = $1; } | triangle { $$ = $1; } | geometrycollection { $$ = $1; } ; geometrycollection : COLLECTION_TOK LBRACKET_TOK geometry_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(COLLECTIONTYPE, $3, NULL); WKT_ERROR(); } | COLLECTION_TOK DIMENSIONALITY_TOK LBRACKET_TOK geometry_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(COLLECTIONTYPE, $4, $2); WKT_ERROR(); } | COLLECTION_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, $2); WKT_ERROR(); } | COLLECTION_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(COLLECTIONTYPE, NULL, NULL); WKT_ERROR(); } ; geometry_list : geometry_list COMMA_TOK geometry_no_srid { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | geometry_no_srid { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; multisurface : MSURFACE_TOK LBRACKET_TOK surface_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTISURFACETYPE, $3, NULL); WKT_ERROR(); } | MSURFACE_TOK DIMENSIONALITY_TOK LBRACKET_TOK surface_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTISURFACETYPE, $4, $2); WKT_ERROR(); } | MSURFACE_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, $2); WKT_ERROR(); } | MSURFACE_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTISURFACETYPE, NULL, NULL); WKT_ERROR(); } ; surface_list : surface_list COMMA_TOK polygon { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | surface_list COMMA_TOK curvepolygon { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | surface_list COMMA_TOK polygon_untagged { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | polygon { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } | curvepolygon { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } | polygon_untagged { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; tin : TIN_TOK LBRACKET_TOK triangle_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(TINTYPE, $3, NULL); WKT_ERROR(); } | TIN_TOK DIMENSIONALITY_TOK LBRACKET_TOK triangle_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(TINTYPE, $4, $2); WKT_ERROR(); } | TIN_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(TINTYPE, NULL, $2); WKT_ERROR(); } | TIN_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(TINTYPE, NULL, NULL); WKT_ERROR(); } ; polyhedralsurface : POLYHEDRALSURFACE_TOK LBRACKET_TOK patch_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, $3, NULL); WKT_ERROR(); } | POLYHEDRALSURFACE_TOK DIMENSIONALITY_TOK LBRACKET_TOK patch_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, $4, $2); WKT_ERROR(); } | POLYHEDRALSURFACE_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, $2); WKT_ERROR(); } | POLYHEDRALSURFACE_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(POLYHEDRALSURFACETYPE, NULL, NULL); WKT_ERROR(); } ; multipolygon : MPOLYGON_TOK LBRACKET_TOK polygon_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, $3, NULL); WKT_ERROR(); } | MPOLYGON_TOK DIMENSIONALITY_TOK LBRACKET_TOK polygon_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, $4, $2); WKT_ERROR(); } | MPOLYGON_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, $2); WKT_ERROR(); } | MPOLYGON_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTIPOLYGONTYPE, NULL, NULL); WKT_ERROR(); } ; polygon_list : polygon_list COMMA_TOK polygon_untagged { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | polygon_untagged { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; patch_list : patch_list COMMA_TOK patch { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | patch { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; polygon : POLYGON_TOK LBRACKET_TOK ring_list RBRACKET_TOK { $$ = wkt_parser_polygon_finalize($3, NULL); WKT_ERROR(); } | POLYGON_TOK DIMENSIONALITY_TOK LBRACKET_TOK ring_list RBRACKET_TOK { $$ = wkt_parser_polygon_finalize($4, $2); WKT_ERROR(); } | POLYGON_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_polygon_finalize(NULL, $2); WKT_ERROR(); } | POLYGON_TOK EMPTY_TOK { $$ = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); } ; polygon_untagged : LBRACKET_TOK ring_list RBRACKET_TOK { $$ = $2; } | EMPTY_TOK { $$ = wkt_parser_polygon_finalize(NULL, NULL); WKT_ERROR(); }; patch : LBRACKET_TOK patchring_list RBRACKET_TOK { $$ = $2; } ; curvepolygon : CURVEPOLYGON_TOK LBRACKET_TOK curvering_list RBRACKET_TOK { $$ = wkt_parser_curvepolygon_finalize($3, NULL); WKT_ERROR(); } | CURVEPOLYGON_TOK DIMENSIONALITY_TOK LBRACKET_TOK curvering_list RBRACKET_TOK { $$ = wkt_parser_curvepolygon_finalize($4, $2); WKT_ERROR(); } | CURVEPOLYGON_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_curvepolygon_finalize(NULL, $2); WKT_ERROR(); } | CURVEPOLYGON_TOK EMPTY_TOK { $$ = wkt_parser_curvepolygon_finalize(NULL, NULL); WKT_ERROR(); } ; curvering_list : curvering_list COMMA_TOK curvering { $$ = wkt_parser_curvepolygon_add_ring($1,$3); WKT_ERROR(); } | curvering { $$ = wkt_parser_curvepolygon_new($1); WKT_ERROR(); } ; curvering : linestring_untagged { $$ = $1; } | linestring { $$ = $1; } | compoundcurve { $$ = $1; } | circularstring { $$ = $1; } ; patchring_list : patchring_list COMMA_TOK patchring { $$ = wkt_parser_polygon_add_ring($1,$3,'Z'); WKT_ERROR(); } | patchring { $$ = wkt_parser_polygon_new($1,'Z'); WKT_ERROR(); } ; ring_list : ring_list COMMA_TOK ring { $$ = wkt_parser_polygon_add_ring($1,$3,'2'); WKT_ERROR(); } | ring { $$ = wkt_parser_polygon_new($1,'2'); WKT_ERROR(); } ; patchring : LBRACKET_TOK ptarray RBRACKET_TOK { $$ = $2; } ; ring : LBRACKET_TOK ptarray RBRACKET_TOK { $$ = $2; } ; compoundcurve : COMPOUNDCURVE_TOK LBRACKET_TOK compound_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(COMPOUNDTYPE, $3, NULL); WKT_ERROR(); } | COMPOUNDCURVE_TOK DIMENSIONALITY_TOK LBRACKET_TOK compound_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(COMPOUNDTYPE, $4, $2); WKT_ERROR(); } | COMPOUNDCURVE_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, $2); WKT_ERROR(); } | COMPOUNDCURVE_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(COMPOUNDTYPE, NULL, NULL); WKT_ERROR(); } ; compound_list : compound_list COMMA_TOK circularstring { $$ = wkt_parser_compound_add_geom($1,$3); WKT_ERROR(); } | compound_list COMMA_TOK linestring { $$ = wkt_parser_compound_add_geom($1,$3); WKT_ERROR(); } | compound_list COMMA_TOK linestring_untagged { $$ = wkt_parser_compound_add_geom($1,$3); WKT_ERROR(); } | circularstring { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } | linestring { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } | linestring_untagged { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; multicurve : MCURVE_TOK LBRACKET_TOK curve_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTICURVETYPE, $3, NULL); WKT_ERROR(); } | MCURVE_TOK DIMENSIONALITY_TOK LBRACKET_TOK curve_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTICURVETYPE, $4, $2); WKT_ERROR(); } | MCURVE_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, $2); WKT_ERROR(); } | MCURVE_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTICURVETYPE, NULL, NULL); WKT_ERROR(); } ; curve_list : curve_list COMMA_TOK circularstring { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | curve_list COMMA_TOK compoundcurve { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | curve_list COMMA_TOK linestring { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | curve_list COMMA_TOK linestring_untagged { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | circularstring { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } | compoundcurve { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } | linestring { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } | linestring_untagged { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; multilinestring : MLINESTRING_TOK LBRACKET_TOK linestring_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTILINETYPE, $3, NULL); WKT_ERROR(); } | MLINESTRING_TOK DIMENSIONALITY_TOK LBRACKET_TOK linestring_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTILINETYPE, $4, $2); WKT_ERROR(); } | MLINESTRING_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTILINETYPE, NULL, $2); WKT_ERROR(); } | MLINESTRING_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTILINETYPE, NULL, NULL); WKT_ERROR(); } ; linestring_list : linestring_list COMMA_TOK linestring_untagged { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | linestring_untagged { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; circularstring : CIRCULARSTRING_TOK LBRACKET_TOK ptarray RBRACKET_TOK { $$ = wkt_parser_circularstring_new($3, NULL); WKT_ERROR(); } | CIRCULARSTRING_TOK DIMENSIONALITY_TOK LBRACKET_TOK ptarray RBRACKET_TOK { $$ = wkt_parser_circularstring_new($4, $2); WKT_ERROR(); } | CIRCULARSTRING_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_circularstring_new(NULL, $2); WKT_ERROR(); } | CIRCULARSTRING_TOK EMPTY_TOK { $$ = wkt_parser_circularstring_new(NULL, NULL); WKT_ERROR(); } ; linestring : LINESTRING_TOK LBRACKET_TOK ptarray RBRACKET_TOK { $$ = wkt_parser_linestring_new($3, NULL); WKT_ERROR(); } | LINESTRING_TOK DIMENSIONALITY_TOK LBRACKET_TOK ptarray RBRACKET_TOK { $$ = wkt_parser_linestring_new($4, $2); WKT_ERROR(); } | LINESTRING_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_linestring_new(NULL, $2); WKT_ERROR(); } | LINESTRING_TOK EMPTY_TOK { $$ = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); } ; linestring_untagged : LBRACKET_TOK ptarray RBRACKET_TOK { $$ = wkt_parser_linestring_new($2, NULL); WKT_ERROR(); } | EMPTY_TOK { $$ = wkt_parser_linestring_new(NULL, NULL); WKT_ERROR(); }; triangle_list : triangle_list COMMA_TOK triangle_untagged { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | triangle_untagged { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; triangle : TRIANGLE_TOK LBRACKET_TOK LBRACKET_TOK ptarray RBRACKET_TOK RBRACKET_TOK { $$ = wkt_parser_triangle_new($4, NULL); WKT_ERROR(); } | TRIANGLE_TOK DIMENSIONALITY_TOK LBRACKET_TOK LBRACKET_TOK ptarray RBRACKET_TOK RBRACKET_TOK { $$ = wkt_parser_triangle_new($5, $2); WKT_ERROR(); } | TRIANGLE_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_triangle_new(NULL, $2); WKT_ERROR(); } | TRIANGLE_TOK EMPTY_TOK { $$ = wkt_parser_triangle_new(NULL, NULL); WKT_ERROR(); } ; triangle_untagged : LBRACKET_TOK LBRACKET_TOK ptarray RBRACKET_TOK RBRACKET_TOK { $$ = wkt_parser_triangle_new($3, NULL); WKT_ERROR(); } ; multipoint : MPOINT_TOK LBRACKET_TOK point_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTIPOINTTYPE, $3, NULL); WKT_ERROR(); } | MPOINT_TOK DIMENSIONALITY_TOK LBRACKET_TOK point_list RBRACKET_TOK { $$ = wkt_parser_collection_finalize(MULTIPOINTTYPE, $4, $2); WKT_ERROR(); } | MPOINT_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, $2); WKT_ERROR(); } | MPOINT_TOK EMPTY_TOK { $$ = wkt_parser_collection_finalize(MULTIPOINTTYPE, NULL, NULL); WKT_ERROR(); } ; point_list : point_list COMMA_TOK point_untagged { $$ = wkt_parser_collection_add_geom($1,$3); WKT_ERROR(); } | point_untagged { $$ = wkt_parser_collection_new($1); WKT_ERROR(); } ; point_untagged : coordinate { $$ = wkt_parser_point_new(wkt_parser_ptarray_new($1),NULL); WKT_ERROR(); } | LBRACKET_TOK coordinate RBRACKET_TOK { $$ = wkt_parser_point_new(wkt_parser_ptarray_new($2),NULL); WKT_ERROR(); } | EMPTY_TOK { $$ = wkt_parser_point_new(NULL, NULL); WKT_ERROR(); }; point : POINT_TOK LBRACKET_TOK ptarray RBRACKET_TOK { $$ = wkt_parser_point_new($3, NULL); WKT_ERROR(); } | POINT_TOK DIMENSIONALITY_TOK LBRACKET_TOK ptarray RBRACKET_TOK { $$ = wkt_parser_point_new($4, $2); WKT_ERROR(); } | POINT_TOK DIMENSIONALITY_TOK EMPTY_TOK { $$ = wkt_parser_point_new(NULL, $2); WKT_ERROR(); } | POINT_TOK EMPTY_TOK { $$ = wkt_parser_point_new(NULL,NULL); WKT_ERROR(); } ; ptarray : ptarray COMMA_TOK coordinate { $$ = wkt_parser_ptarray_add_coord($1, $3); WKT_ERROR(); } | coordinate { $$ = wkt_parser_ptarray_new($1); WKT_ERROR(); } ; coordinate : DOUBLE_TOK DOUBLE_TOK { $$ = wkt_parser_coord_2($1, $2); WKT_ERROR(); } | DOUBLE_TOK DOUBLE_TOK DOUBLE_TOK { $$ = wkt_parser_coord_3($1, $2, $3); WKT_ERROR(); } | DOUBLE_TOK DOUBLE_TOK DOUBLE_TOK DOUBLE_TOK { $$ = wkt_parser_coord_4($1, $2, $3, $4); WKT_ERROR(); } ; %% ��postgis-2.1.2+dfsg.orig/liblwgeom/measures.h��������������������������������������������������������0000644�0000000�0000000�00000010555�12125375666�017561� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� /********************************************************************** * $Id: measures.h 4715 2009-11-01 17:58:42Z nicklas $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Nicklas Avén * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" /** Structure used in distance-calculations */ typedef struct { double distance; /*the distance between p1 and p2*/ POINT2D p1; POINT2D p2; int mode; /*the direction of looking, if thedir = -1 then we look for maxdistance and if it is 1 then we look for mindistance*/ int twisted; /*To preserve the order of incoming points to match the first and secon point in shortest and longest line*/ double tolerance; /*the tolerance for dwithin and dfullywithin*/ } DISTPTS; typedef struct { double themeasure; /*a value calculated to compare distances*/ int pnr; /*pointnumber. the ordernumber of the point*/ } LISTSTRUCT; /* * Preprocessing functions */ int lw_dist2d_comp(LWGEOM *lw1, LWGEOM *lw2, DISTPTS *dl); int lw_dist2d_distribute_bruteforce(LWGEOM *lwg1, LWGEOM *lwg2, DISTPTS *dl); int lw_dist2d_recursive(const LWGEOM *lwg1, const LWGEOM *lwg2, DISTPTS *dl); int lw_dist2d_check_overlap(LWGEOM *lwg1,LWGEOM *lwg2); int lw_dist2d_distribute_fast(LWGEOM *lwg1, LWGEOM *lwg2, DISTPTS *dl); /* * Brute force functions */ int lw_dist2d_pt_ptarray(const POINT2D *p, POINTARRAY *pa, DISTPTS *dl); int lw_dist2d_pt_ptarrayarc(const POINT2D *p, const POINTARRAY *pa, DISTPTS *dl); int lw_dist2d_ptarray_ptarray(POINTARRAY *l1, POINTARRAY *l2, DISTPTS *dl); int lw_dist2d_ptarray_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl); int lw_dist2d_ptarrayarc_ptarrayarc(const POINTARRAY *pa, const POINTARRAY *pb, DISTPTS *dl); int lw_dist2d_ptarray_poly(POINTARRAY *pa, LWPOLY *poly, DISTPTS *dl); int lw_dist2d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS *dl); int lw_dist2d_point_line(LWPOINT *point, LWLINE *line, DISTPTS *dl); int lw_dist2d_point_circstring(LWPOINT *point, LWCIRCSTRING *circ, DISTPTS *dl); int lw_dist2d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS *dl); int lw_dist2d_point_curvepoly(LWPOINT *point, LWCURVEPOLY *poly, DISTPTS *dl); int lw_dist2d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS *dl); int lw_dist2d_line_circstring(LWLINE *line1, LWCIRCSTRING *line2, DISTPTS *dl); int lw_dist2d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS *dl); int lw_dist2d_line_curvepoly(LWLINE *line, LWCURVEPOLY *poly, DISTPTS *dl); int lw_dist2d_circstring_circstring(LWCIRCSTRING *line1, LWCIRCSTRING *line2, DISTPTS *dl); int lw_dist2d_circstring_poly(LWCIRCSTRING *circ, LWPOLY *poly, DISTPTS *dl); int lw_dist2d_circstring_curvepoly(LWCIRCSTRING *circ, LWCURVEPOLY *poly, DISTPTS *dl); int lw_dist2d_poly_poly(LWPOLY *poly1, LWPOLY *poly2, DISTPTS *dl); int lw_dist2d_poly_curvepoly(LWPOLY *poly1, LWCURVEPOLY *curvepoly2, DISTPTS *dl); int lw_dist2d_curvepoly_curvepoly(LWCURVEPOLY *poly1, LWCURVEPOLY *poly2, DISTPTS *dl); /* * New faster distance calculations */ int lw_dist2d_pre_seg_seg(POINTARRAY *l1, POINTARRAY *l2,LISTSTRUCT *list1, LISTSTRUCT *list2,double k, DISTPTS *dl); int lw_dist2d_selected_seg_seg(POINT2D *A, POINT2D *B, POINT2D *C, POINT2D *D, DISTPTS *dl); int struct_cmp_by_measure(const void *a, const void *b); int lw_dist2d_fast_ptarray_ptarray(POINTARRAY *l1,POINTARRAY *l2, DISTPTS *dl, GBOX *box1, GBOX *box2); /* * Distance calculation primitives. */ int lw_dist2d_pt_pt (const POINT2D *P, const POINT2D *Q, DISTPTS *dl); int lw_dist2d_pt_seg (const POINT2D *P, const POINT2D *A1, const POINT2D *A2, DISTPTS *dl); int lw_dist2d_pt_arc (const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, DISTPTS *dl); int lw_dist2d_seg_seg(const POINT2D *A1, const POINT2D *A2, const POINT2D *B1, const POINT2D *B2, DISTPTS *dl); int lw_dist2d_seg_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *B1, const POINT2D *B2, const POINT2D *B3, DISTPTS *dl); int lw_dist2d_arc_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, const POINT2D *B1, const POINT2D *B2, const POINT2D* B3, DISTPTS *dl); void lw_dist2d_distpts_init(DISTPTS *dl, int mode); /* * Length primitives */ double lw_arc_length(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3); ���������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwsegmentize.c����������������������������������������������������0000644�0000000�0000000�00000053537�12202632370�020434� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwsegmentize.c 11802 2013-08-14 07:42:48Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include "liblwgeom_internal.h" /* #define POSTGIS_DEBUG_LEVEL 4 */ #include "lwgeom_log.h" LWMLINE *lwmcurve_segmentize(LWMCURVE *mcurve, uint32_t perQuad); LWMPOLY *lwmsurface_segmentize(LWMSURFACE *msurface, uint32_t perQuad); LWCOLLECTION *lwcollection_segmentize(LWCOLLECTION *collection, uint32_t perQuad); LWGEOM *pta_desegmentize(POINTARRAY *points, int type, int srid); LWGEOM *lwline_desegmentize(LWLINE *line); LWGEOM *lwpolygon_desegmentize(LWPOLY *poly); LWGEOM *lwmline_desegmentize(LWMLINE *mline); LWGEOM *lwmpolygon_desegmentize(LWMPOLY *mpoly); LWGEOM *lwgeom_desegmentize(LWGEOM *geom); /* * Determines (recursively in the case of collections) whether the geometry * contains at least on arc geometry or segment. */ int lwgeom_has_arc(const LWGEOM *geom) { LWCOLLECTION *col; int i; LWDEBUG(2, "lwgeom_has_arc called."); switch (geom->type) { case POINTTYPE: case LINETYPE: case POLYGONTYPE: case TRIANGLETYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: return LW_FALSE; case CIRCSTRINGTYPE: return LW_TRUE; /* It's a collection that MAY contain an arc */ default: col = (LWCOLLECTION *)geom; for (i=0; i<col->ngeoms; i++) { if (lwgeom_has_arc(col->geoms[i]) == LW_TRUE) return LW_TRUE; } return LW_FALSE; } } /******************************************************************************* * Begin curve segmentize functions ******************************************************************************/ static double interpolate_arc(double angle, double a1, double a2, double a3, double zm1, double zm2, double zm3) { LWDEBUGF(4,"angle %.05g a1 %.05g a2 %.05g a3 %.05g zm1 %.05g zm2 %.05g zm3 %.05g",angle,a1,a2,a3,zm1,zm2,zm3); /* Counter-clockwise sweep */ if ( a1 < a2 ) { if ( angle <= a2 ) return zm1 + (zm2-zm1) * (angle-a1) / (a2-a1); else return zm2 + (zm3-zm2) * (angle-a2) / (a3-a2); } /* Clockwise sweep */ else { if ( angle >= a2 ) return zm1 + (zm2-zm1) * (a1-angle) / (a1-a2); else return zm2 + (zm3-zm2) * (a2-angle) / (a2-a3); } } static POINTARRAY * lwcircle_segmentize(POINT4D *p1, POINT4D *p2, POINT4D *p3, uint32_t perQuad) { POINT2D center; POINT2D *t1 = (POINT2D*)p1; POINT2D *t2 = (POINT2D*)p2; POINT2D *t3 = (POINT2D*)p3; POINT4D pt; int p2_side = 0; int clockwise = LW_TRUE; double radius; /* Arc radius */ double increment; /* Angle per segment */ double a1, a2, a3, angle; POINTARRAY *pa; int is_circle = LW_FALSE; LWDEBUG(2, "lwcircle_calculate_gbox called."); radius = lw_arc_center(t1, t2, t3, ¢er); p2_side = lw_segment_side(t1, t3, t2); /* Matched start/end points imply circle */ if ( p1->x == p3->x && p1->y == p3->y ) is_circle = LW_TRUE; /* Negative radius signals straight line, p1/p2/p3 are colinear */ if ( (radius < 0.0 || p2_side == 0) && ! is_circle ) return NULL; /* The side of the p1/p3 line that p2 falls on dictates the sweep direction from p1 to p3. */ if ( p2_side == -1 ) clockwise = LW_TRUE; else clockwise = LW_FALSE; increment = fabs(M_PI_2 / perQuad); /* Angles of each point that defines the arc section */ a1 = atan2(p1->y - center.y, p1->x - center.x); a2 = atan2(p2->y - center.y, p2->x - center.x); a3 = atan2(p3->y - center.y, p3->x - center.x); /* p2 on left side => clockwise sweep */ if ( clockwise ) { increment *= -1; /* Adjust a3 down so we can decrement from a1 to a3 cleanly */ if ( a3 > a1 ) a3 -= 2.0 * M_PI; if ( a2 > a1 ) a2 -= 2.0 * M_PI; } /* p2 on right side => counter-clockwise sweep */ else { /* Adjust a3 up so we can increment from a1 to a3 cleanly */ if ( a3 < a1 ) a3 += 2.0 * M_PI; if ( a2 < a1 ) a2 += 2.0 * M_PI; } /* Override angles for circle case */ if( is_circle ) { a3 = a1 + 2.0 * M_PI; a2 = a1 + M_PI; increment = fabs(increment); clockwise = LW_FALSE; } /* Initialize point array */ pa = ptarray_construct_empty(1, 1, 32); /* Sweep from a1 to a3 */ ptarray_append_point(pa, p1, LW_FALSE); for ( angle = a1 + increment; clockwise ? angle > a3 : angle < a3; angle += increment ) { pt.x = center.x + radius * cos(angle); pt.y = center.y + radius * sin(angle); pt.z = interpolate_arc(angle, a1, a2, a3, p1->z, p2->z, p3->z); pt.m = interpolate_arc(angle, a1, a2, a3, p1->m, p2->m, p3->m); ptarray_append_point(pa, &pt, LW_FALSE); } return pa; } LWLINE * lwcircstring_segmentize(const LWCIRCSTRING *icurve, uint32_t perQuad) { LWLINE *oline; POINTARRAY *ptarray; POINTARRAY *tmp; uint32_t i, j; POINT4D p1, p2, p3, p4; LWDEBUGF(2, "lwcircstring_segmentize called., dim = %d", icurve->points->flags); ptarray = ptarray_construct_empty(FLAGS_GET_Z(icurve->points->flags), FLAGS_GET_M(icurve->points->flags), 64); for (i = 2; i < icurve->points->npoints; i+=2) { LWDEBUGF(3, "lwcircstring_segmentize: arc ending at point %d", i); getPoint4d_p(icurve->points, i - 2, &p1); getPoint4d_p(icurve->points, i - 1, &p2); getPoint4d_p(icurve->points, i, &p3); tmp = lwcircle_segmentize(&p1, &p2, &p3, perQuad); if (tmp) { LWDEBUGF(3, "lwcircstring_segmentize: generated %d points", tmp->npoints); for (j = 0; j < tmp->npoints; j++) { getPoint4d_p(tmp, j, &p4); ptarray_append_point(ptarray, &p4, LW_TRUE); } ptarray_free(tmp); } else { LWDEBUG(3, "lwcircstring_segmentize: points are colinear, returning curve points as line"); for (j = i - 2 ; j < i ; j++) { getPoint4d_p(icurve->points, j, &p4); ptarray_append_point(ptarray, &p4, LW_TRUE); } } } getPoint4d_p(icurve->points, icurve->points->npoints-1, &p1); ptarray_append_point(ptarray, &p1, LW_TRUE); oline = lwline_construct(icurve->srid, NULL, ptarray); return oline; } LWLINE * lwcompound_segmentize(const LWCOMPOUND *icompound, uint32_t perQuad) { LWGEOM *geom; POINTARRAY *ptarray = NULL, *ptarray_out = NULL; LWLINE *tmp = NULL; uint32_t i, j; POINT4D p; LWDEBUG(2, "lwcompound_segmentize called."); ptarray = ptarray_construct_empty(FLAGS_GET_Z(icompound->flags), FLAGS_GET_M(icompound->flags), 64); for (i = 0; i < icompound->ngeoms; i++) { geom = icompound->geoms[i]; if (geom->type == CIRCSTRINGTYPE) { tmp = lwcircstring_segmentize((LWCIRCSTRING *)geom, perQuad); for (j = 0; j < tmp->points->npoints; j++) { getPoint4d_p(tmp->points, j, &p); ptarray_append_point(ptarray, &p, LW_TRUE); } lwline_free(tmp); } else if (geom->type == LINETYPE) { tmp = (LWLINE *)geom; for (j = 0; j < tmp->points->npoints; j++) { getPoint4d_p(tmp->points, j, &p); ptarray_append_point(ptarray, &p, LW_TRUE); } } else { lwerror("Unsupported geometry type %d found.", geom->type, lwtype_name(geom->type)); return NULL; } } ptarray_out = ptarray_remove_repeated_points(ptarray); ptarray_free(ptarray); return lwline_construct(icompound->srid, NULL, ptarray_out); } LWPOLY * lwcurvepoly_segmentize(const LWCURVEPOLY *curvepoly, uint32_t perQuad) { LWPOLY *ogeom; LWGEOM *tmp; LWLINE *line; POINTARRAY **ptarray; int i; LWDEBUG(2, "lwcurvepoly_segmentize called."); ptarray = lwalloc(sizeof(POINTARRAY *)*curvepoly->nrings); for (i = 0; i < curvepoly->nrings; i++) { tmp = curvepoly->rings[i]; if (tmp->type == CIRCSTRINGTYPE) { line = lwcircstring_segmentize((LWCIRCSTRING *)tmp, perQuad); ptarray[i] = ptarray_clone_deep(line->points); lwfree(line); } else if (tmp->type == LINETYPE) { line = (LWLINE *)tmp; ptarray[i] = ptarray_clone_deep(line->points); } else if (tmp->type == COMPOUNDTYPE) { line = lwcompound_segmentize((LWCOMPOUND *)tmp, perQuad); ptarray[i] = ptarray_clone_deep(line->points); lwfree(line); } else { lwerror("Invalid ring type found in CurvePoly."); return NULL; } } ogeom = lwpoly_construct(curvepoly->srid, NULL, curvepoly->nrings, ptarray); return ogeom; } LWMLINE * lwmcurve_segmentize(LWMCURVE *mcurve, uint32_t perQuad) { LWMLINE *ogeom; LWGEOM *tmp; LWGEOM **lines; int i; LWDEBUGF(2, "lwmcurve_segmentize called, geoms=%d, dim=%d.", mcurve->ngeoms, FLAGS_NDIMS(mcurve->flags)); lines = lwalloc(sizeof(LWGEOM *)*mcurve->ngeoms); for (i = 0; i < mcurve->ngeoms; i++) { tmp = mcurve->geoms[i]; if (tmp->type == CIRCSTRINGTYPE) { lines[i] = (LWGEOM *)lwcircstring_segmentize((LWCIRCSTRING *)tmp, perQuad); } else if (tmp->type == LINETYPE) { lines[i] = (LWGEOM *)lwline_construct(mcurve->srid, NULL, ptarray_clone_deep(((LWLINE *)tmp)->points)); } else if (tmp->type == COMPOUNDTYPE) { lines[i] = (LWGEOM *)lwcompound_segmentize((LWCOMPOUND *)tmp, perQuad); } else { lwerror("Unsupported geometry found in MultiCurve."); return NULL; } } ogeom = (LWMLINE *)lwcollection_construct(MULTILINETYPE, mcurve->srid, NULL, mcurve->ngeoms, lines); return ogeom; } LWMPOLY * lwmsurface_segmentize(LWMSURFACE *msurface, uint32_t perQuad) { LWMPOLY *ogeom; LWGEOM *tmp; LWPOLY *poly; LWGEOM **polys; POINTARRAY **ptarray; int i, j; LWDEBUG(2, "lwmsurface_segmentize called."); polys = lwalloc(sizeof(LWGEOM *)*msurface->ngeoms); for (i = 0; i < msurface->ngeoms; i++) { tmp = msurface->geoms[i]; if (tmp->type == CURVEPOLYTYPE) { polys[i] = (LWGEOM *)lwcurvepoly_segmentize((LWCURVEPOLY *)tmp, perQuad); } else if (tmp->type == POLYGONTYPE) { poly = (LWPOLY *)tmp; ptarray = lwalloc(sizeof(POINTARRAY *)*poly->nrings); for (j = 0; j < poly->nrings; j++) { ptarray[j] = ptarray_clone_deep(poly->rings[j]); } polys[i] = (LWGEOM *)lwpoly_construct(msurface->srid, NULL, poly->nrings, ptarray); } } ogeom = (LWMPOLY *)lwcollection_construct(MULTIPOLYGONTYPE, msurface->srid, NULL, msurface->ngeoms, polys); return ogeom; } LWCOLLECTION * lwcollection_segmentize(LWCOLLECTION *collection, uint32_t perQuad) { LWCOLLECTION *ocol; LWGEOM *tmp; LWGEOM **geoms; int i; LWDEBUG(2, "lwcollection_segmentize called."); geoms = lwalloc(sizeof(LWGEOM *)*collection->ngeoms); for (i=0; i<collection->ngeoms; i++) { tmp = collection->geoms[i]; switch (tmp->type) { case CIRCSTRINGTYPE: geoms[i] = (LWGEOM *)lwcircstring_segmentize((LWCIRCSTRING *)tmp, perQuad); break; case COMPOUNDTYPE: geoms[i] = (LWGEOM *)lwcompound_segmentize((LWCOMPOUND *)tmp, perQuad); break; case CURVEPOLYTYPE: geoms[i] = (LWGEOM *)lwcurvepoly_segmentize((LWCURVEPOLY *)tmp, perQuad); break; case COLLECTIONTYPE: geoms[i] = (LWGEOM *)lwcollection_segmentize((LWCOLLECTION *)tmp, perQuad); break; default: geoms[i] = lwgeom_clone(tmp); break; } } ocol = lwcollection_construct(COLLECTIONTYPE, collection->srid, NULL, collection->ngeoms, geoms); return ocol; } LWGEOM * lwgeom_segmentize(LWGEOM *geom, uint32_t perQuad) { LWGEOM * ogeom = NULL; switch (geom->type) { case CIRCSTRINGTYPE: ogeom = (LWGEOM *)lwcircstring_segmentize((LWCIRCSTRING *)geom, perQuad); break; case COMPOUNDTYPE: ogeom = (LWGEOM *)lwcompound_segmentize((LWCOMPOUND *)geom, perQuad); break; case CURVEPOLYTYPE: ogeom = (LWGEOM *)lwcurvepoly_segmentize((LWCURVEPOLY *)geom, perQuad); break; case MULTICURVETYPE: ogeom = (LWGEOM *)lwmcurve_segmentize((LWMCURVE *)geom, perQuad); break; case MULTISURFACETYPE: ogeom = (LWGEOM *)lwmsurface_segmentize((LWMSURFACE *)geom, perQuad); break; case COLLECTIONTYPE: ogeom = (LWGEOM *)lwcollection_segmentize((LWCOLLECTION *)geom, perQuad); break; default: ogeom = lwgeom_clone(geom); } return ogeom; } /** * Return ABC angle in radians * TODO: move to lwalgorithm */ static double lw_arc_angle(const POINT2D *a, const POINT2D *b, const POINT2D *c) { POINT2D ab, cb; ab.x = b->x - a->x; ab.y = b->y - a->y; cb.x = b->x - c->x; cb.y = b->y - c->y; double dot = (ab.x * cb.x + ab.y * cb.y); /* dot product */ double cross = (ab.x * cb.y - ab.y * cb.x); /* cross product */ double alpha = atan2(cross, dot); return alpha; } /** * Returns LW_TRUE if b is on the arc formed by a1/a2/a3, but not within * that portion already described by a1/a2/a3 */ static int pt_continues_arc(const POINT4D *a1, const POINT4D *a2, const POINT4D *a3, const POINT4D *b) { POINT2D center; POINT2D *t1 = (POINT2D*)a1; POINT2D *t2 = (POINT2D*)a2; POINT2D *t3 = (POINT2D*)a3; POINT2D *tb = (POINT2D*)b; double radius = lw_arc_center(t1, t2, t3, ¢er); double b_distance, diff; /* Co-linear a1/a2/a3 */ if ( radius < 0.0 ) return LW_FALSE; b_distance = distance2d_pt_pt(tb, ¢er); diff = fabs(radius - b_distance); LWDEBUGF(4, "circle_radius=%g, b_distance=%g, diff=%g, percentage=%g", radius, b_distance, diff, diff/radius); /* Is the point b on the circle? */ if ( diff < EPSILON_SQLMM ) { int a2_side = lw_segment_side(t1, t3, t2); int b_side = lw_segment_side(t1, t3, tb); double angle1 = lw_arc_angle(t1, t2, t3); double angle2 = lw_arc_angle(t2, t3, tb); /* Is the angle similar to the previous one ? */ diff = fabs(angle1 - angle2); LWDEBUGF(4, " angle1: %g, angle2: %g, diff:%g", angle1, angle2, diff); if ( diff > EPSILON_SQLMM ) { return LW_FALSE; } /* Is the point b on the same side of a1/a3 as the mid-point a2 is? */ /* If not, it's in the unbounded part of the circle, so it continues the arc, return true. */ if ( b_side != a2_side ) return LW_TRUE; } return LW_FALSE; } static LWGEOM* linestring_from_pa(const POINTARRAY *pa, int srid, int start, int end) { int i = 0, j = 0; POINT4D p; POINTARRAY *pao = ptarray_construct(ptarray_has_z(pa), ptarray_has_m(pa), end-start+2); LWDEBUGF(4, "srid=%d, start=%d, end=%d", srid, start, end); for( i = start; i < end + 2; i++ ) { getPoint4d_p(pa, i, &p); ptarray_set_point4d(pao, j++, &p); } return lwline_as_lwgeom(lwline_construct(srid, NULL, pao)); } static LWGEOM* circstring_from_pa(const POINTARRAY *pa, int srid, int start, int end) { POINT4D p0, p1, p2; POINTARRAY *pao = ptarray_construct(ptarray_has_z(pa), ptarray_has_m(pa), 3); LWDEBUGF(4, "srid=%d, start=%d, end=%d", srid, start, end); getPoint4d_p(pa, start, &p0); ptarray_set_point4d(pao, 0, &p0); getPoint4d_p(pa, (start+end+1)/2, &p1); ptarray_set_point4d(pao, 1, &p1); getPoint4d_p(pa, end+1, &p2); ptarray_set_point4d(pao, 2, &p2); return lwcircstring_as_lwgeom(lwcircstring_construct(srid, NULL, pao)); } static LWGEOM* geom_from_pa(const POINTARRAY *pa, int srid, int is_arc, int start, int end) { LWDEBUGF(4, "srid=%d, is_arc=%d, start=%d, end=%d", srid, is_arc, start, end); if ( is_arc ) return circstring_from_pa(pa, srid, start, end); else return linestring_from_pa(pa, srid, start, end); } LWGEOM* pta_desegmentize(POINTARRAY *points, int type, int srid) { int i = 0, j, k; POINT4D a1, a2, a3, b; POINT4D first, center; char *edges_in_arcs; int found_arc = LW_FALSE; int current_arc = 1; int num_edges; int edge_type; /* non-zero if edge is part of an arc */ int start, end; LWCOLLECTION *outcol; /* Minimum number of edges, per quadrant, required to define an arc */ const unsigned int min_quad_edges = 2; /* Die on null input */ if ( ! points ) lwerror("pta_desegmentize called with null pointarray"); /* Null on empty input? */ if ( points->npoints == 0 ) return NULL; /* We can't desegmentize anything shorter than four points */ if ( points->npoints < 4 ) { /* Return a linestring here*/ lwerror("pta_desegmentize needs implementation for npoints < 4"); } /* Allocate our result array of vertices that are part of arcs */ num_edges = points->npoints - 1; edges_in_arcs = lwalloc(num_edges + 1); memset(edges_in_arcs, 0, num_edges + 1); /* We make a candidate arc of the first two edges, */ /* And then see if the next edge follows it */ while( i < num_edges-2 ) { unsigned int arc_edges; double num_quadrants; double angle; found_arc = LW_FALSE; /* Make candidate arc */ getPoint4d_p(points, i , &a1); getPoint4d_p(points, i+1, &a2); getPoint4d_p(points, i+2, &a3); memcpy(&first, &a1, sizeof(POINT4D)); for( j = i+3; j < num_edges+1; j++ ) { LWDEBUGF(4, "i=%d, j=%d", i, j); getPoint4d_p(points, j, &b); /* Does this point fall on our candidate arc? */ if ( pt_continues_arc(&a1, &a2, &a3, &b) ) { /* Yes. Mark this edge and the two preceding it as arc components */ LWDEBUGF(4, "pt_continues_arc #%d", current_arc); found_arc = LW_TRUE; for ( k = j-1; k > j-4; k-- ) edges_in_arcs[k] = current_arc; } else { /* No. So we're done with this candidate arc */ LWDEBUG(4, "pt_continues_arc = false"); current_arc++; break; } memcpy(&a1, &a2, sizeof(POINT4D)); memcpy(&a2, &a3, sizeof(POINT4D)); memcpy(&a3, &b, sizeof(POINT4D)); } /* Jump past all the edges that were added to the arc */ if ( found_arc ) { /* Check if an arc was composed by enough edges to be * really considered an arc * See http://trac.osgeo.org/postgis/ticket/2420 */ arc_edges = j - 1 - i; LWDEBUGF(4, "arc defined by %d edges found", arc_edges); if ( first.x == b.x && first.y == b.y ) { LWDEBUG(4, "arc is a circle"); num_quadrants = 4; } else { lw_arc_center((POINT2D*)&first, (POINT2D*)&b, (POINT2D*)&a1, (POINT2D*)¢er); angle = lw_arc_angle((POINT2D*)&first, (POINT2D*)¢er, (POINT2D*)&b); int p2_side = lw_segment_side((POINT2D*)&first, (POINT2D*)&a1, (POINT2D*)&b); if ( p2_side >= 0 ) angle = -angle; if ( angle < 0 ) angle = 2 * M_PI + angle; num_quadrants = ( 4 * angle ) / ( 2 * M_PI ); LWDEBUGF(4, "arc angle (%g %g, %g %g, %g %g) is %g (side is %d), quandrants:%g", first.x, first.y, center.x, center.y, b.x, b.y, angle, p2_side, num_quadrants); } /* a1 is first point, b is last point */ if ( arc_edges < min_quad_edges * num_quadrants ) { LWDEBUGF(4, "Not enough edges for a %g quadrants arc, %g needed", num_quadrants, min_quad_edges * num_quadrants); for ( k = j-1; k >= i; k-- ) edges_in_arcs[k] = 0; } i = j-1; } else { /* Mark this edge as a linear edge */ edges_in_arcs[i] = 0; i = i+1; } } #if POSTGIS_DEBUG_LEVEL > 3 { char *edgestr = lwalloc(num_edges+1); for ( i = 0; i < num_edges; i++ ) { if ( edges_in_arcs[i] ) edgestr[i] = 48 + edges_in_arcs[i]; else edgestr[i] = '.'; } edgestr[num_edges] = 0; LWDEBUGF(3, "edge pattern %s", edgestr); lwfree(edgestr); } #endif start = 0; edge_type = edges_in_arcs[0]; outcol = lwcollection_construct_empty(COMPOUNDTYPE, srid, ptarray_has_z(points), ptarray_has_m(points)); for( i = 1; i < num_edges; i++ ) { if( edge_type != edges_in_arcs[i] ) { end = i - 1; lwcollection_add_lwgeom(outcol, geom_from_pa(points, srid, edge_type, start, end)); start = i; edge_type = edges_in_arcs[i]; } } lwfree(edges_in_arcs); /* not needed anymore */ /* Roll out last item */ end = num_edges - 1; lwcollection_add_lwgeom(outcol, geom_from_pa(points, srid, edge_type, start, end)); /* Strip down to singleton if only one entry */ if ( outcol->ngeoms == 1 ) { LWGEOM *outgeom = outcol->geoms[0]; outcol->ngeoms = 0; lwcollection_free(outcol); return outgeom; } return lwcollection_as_lwgeom(outcol); } LWGEOM * lwline_desegmentize(LWLINE *line) { LWDEBUG(2, "lwline_desegmentize called."); if ( line->points->npoints < 4 ) return lwline_as_lwgeom(lwline_clone(line)); else return pta_desegmentize(line->points, line->flags, line->srid); } LWGEOM * lwpolygon_desegmentize(LWPOLY *poly) { LWGEOM **geoms; int i, hascurve = 0; LWDEBUG(2, "lwpolygon_desegmentize called."); geoms = lwalloc(sizeof(LWGEOM *)*poly->nrings); for (i=0; i<poly->nrings; i++) { geoms[i] = pta_desegmentize(poly->rings[i], poly->flags, poly->srid); if (geoms[i]->type == CIRCSTRINGTYPE || geoms[i]->type == COMPOUNDTYPE) { hascurve = 1; } } if (hascurve == 0) { for (i=0; i<poly->nrings; i++) { lwfree(geoms[i]); } return lwgeom_clone((LWGEOM *)poly); } return (LWGEOM *)lwcollection_construct(CURVEPOLYTYPE, poly->srid, NULL, poly->nrings, geoms); } LWGEOM * lwmline_desegmentize(LWMLINE *mline) { LWGEOM **geoms; int i, hascurve = 0; LWDEBUG(2, "lwmline_desegmentize called."); geoms = lwalloc(sizeof(LWGEOM *)*mline->ngeoms); for (i=0; i<mline->ngeoms; i++) { geoms[i] = lwline_desegmentize((LWLINE *)mline->geoms[i]); if (geoms[i]->type == CIRCSTRINGTYPE || geoms[i]->type == COMPOUNDTYPE) { hascurve = 1; } } if (hascurve == 0) { for (i=0; i<mline->ngeoms; i++) { lwfree(geoms[i]); } return lwgeom_clone((LWGEOM *)mline); } return (LWGEOM *)lwcollection_construct(MULTICURVETYPE, mline->srid, NULL, mline->ngeoms, geoms); } LWGEOM * lwmpolygon_desegmentize(LWMPOLY *mpoly) { LWGEOM **geoms; int i, hascurve = 0; LWDEBUG(2, "lwmpoly_desegmentize called."); geoms = lwalloc(sizeof(LWGEOM *)*mpoly->ngeoms); for (i=0; i<mpoly->ngeoms; i++) { geoms[i] = lwpolygon_desegmentize((LWPOLY *)mpoly->geoms[i]); if (geoms[i]->type == CURVEPOLYTYPE) { hascurve = 1; } } if (hascurve == 0) { for (i=0; i<mpoly->ngeoms; i++) { lwfree(geoms[i]); } return lwgeom_clone((LWGEOM *)mpoly); } return (LWGEOM *)lwcollection_construct(MULTISURFACETYPE, mpoly->srid, NULL, mpoly->ngeoms, geoms); } LWGEOM * lwgeom_desegmentize(LWGEOM *geom) { LWDEBUG(2, "lwgeom_desegmentize called."); switch (geom->type) { case LINETYPE: return lwline_desegmentize((LWLINE *)geom); case POLYGONTYPE: return lwpolygon_desegmentize((LWPOLY *)geom); case MULTILINETYPE: return lwmline_desegmentize((LWMLINE *)geom); case MULTIPOLYGONTYPE: return lwmpolygon_desegmentize((LWMPOLY *)geom); default: return lwgeom_clone(geom); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwgeom_sfcgal.h���������������������������������������������������0000644�0000000�0000000�00000001777�12142775451�020547� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Wrapper around SFCGAL for 3D functions * * Copyright 2012-2013 Oslandia <infos@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom.h" #include <SFCGAL/capi/sfcgal_c.h> /* return SFCGAL version string */ const char* lwgeom_sfcgal_version(); /* Convert SFCGAL structure to lwgeom PostGIS */ LWGEOM* SFCGAL2LWGEOM(const sfcgal_geometry_t* geom, int force3D, int SRID); /* Convert lwgeom PostGIS to SFCGAL structure */ sfcgal_geometry_t* LWGEOM2SFCGAL(const LWGEOM* geom); /* No Operation SFCGAL function, used (only) for cunit tests * Take a PostGIS geometry, send it to SFCGAL and return it unchanged */ LWGEOM* lwgeom_sfcgal_noop(const LWGEOM* geom_in); �postgis-2.1.2+dfsg.orig/liblwgeom/lwmcurve.c��������������������������������������������������������0000644�0000000�0000000�00000001072�11722777314�017564� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwmcurve.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkt_lex.c����������������������������������������������������0000644�0000000�0000000�00000156426�12047044677�020444� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 2 "lwin_wkt_lex.c" #line 4 "lwin_wkt_lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer wkt_yy_create_buffer #define yy_delete_buffer wkt_yy_delete_buffer #define yy_flex_debug wkt_yy_flex_debug #define yy_init_buffer wkt_yy_init_buffer #define yy_flush_buffer wkt_yy_flush_buffer #define yy_load_buffer_state wkt_yy_load_buffer_state #define yy_switch_to_buffer wkt_yy_switch_to_buffer #define yyin wkt_yyin #define yyleng wkt_yyleng #define yylex wkt_yylex #define yylineno wkt_yylineno #define yyout wkt_yyout #define yyrestart wkt_yyrestart #define yytext wkt_yytext #define yywrap wkt_yywrap #define yyalloc wkt_yyalloc #define yyrealloc wkt_yyrealloc #define yyfree wkt_yyfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include <inttypes.h> typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE wkt_yyrestart(wkt_yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t wkt_yyleng; extern FILE *wkt_yyin, *wkt_yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up wkt_yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up wkt_yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via wkt_yyrestart()), so that the user can continue scanning by * just pointing wkt_yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when wkt_yytext is formed. */ static char yy_hold_char; static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ yy_size_t wkt_yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow wkt_yywrap()'s to do buffer switches * instead of setting up a fresh wkt_yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void wkt_yyrestart (FILE *input_file ); void wkt_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE wkt_yy_create_buffer (FILE *file,int size ); void wkt_yy_delete_buffer (YY_BUFFER_STATE b ); void wkt_yy_flush_buffer (YY_BUFFER_STATE b ); void wkt_yypush_buffer_state (YY_BUFFER_STATE new_buffer ); void wkt_yypop_buffer_state (void ); static void wkt_yyensure_buffer_stack (void ); static void wkt_yy_load_buffer_state (void ); static void wkt_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER wkt_yy_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE wkt_yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE wkt_yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE wkt_yy_scan_bytes (yyconst char *bytes,yy_size_t len ); void *wkt_yyalloc (yy_size_t ); void *wkt_yyrealloc (void *,yy_size_t ); void wkt_yyfree (void * ); #define yy_new_buffer wkt_yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ wkt_yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wkt_yy_create_buffer(wkt_yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ wkt_yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wkt_yy_create_buffer(wkt_yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define wkt_yywrap(n) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; FILE *wkt_yyin = (FILE *) 0, *wkt_yyout = (FILE *) 0; typedef int yy_state_type; extern int wkt_yylineno; int wkt_yylineno = 1; extern char *wkt_yytext; #define yytext_ptr wkt_yytext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up wkt_yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ wkt_yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 26 #define YY_END_OF_BUFFER 27 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[172] = { 0, 0, 0, 27, 25, 24, 24, 20, 21, 22, 25, 25, 1, 23, 25, 25, 25, 25, 19, 25, 25, 25, 19, 24, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 5, 4, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 7, 0, 0, 0, 0, 14, 3, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 4, 5, 1, 6, 7, 8, 9, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 11, 1, 12, 1, 1, 1, 13, 1, 14, 15, 16, 17, 18, 19, 20, 1, 1, 21, 22, 23, 24, 25, 1, 26, 27, 28, 29, 30, 1, 1, 31, 32, 1, 1, 1, 1, 1, 1, 33, 1, 34, 35, 36, 37, 38, 39, 40, 1, 1, 41, 42, 43, 44, 45, 1, 46, 47, 48, 49, 50, 1, 1, 51, 52, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[53] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[172] = { 0, 0, 0, 353, 366, 51, 53, 366, 366, 366, 48, 342, 50, 366, 41, 40, 47, 44, 38, 44, 43, 51, 50, 71, 341, 84, 85, 340, 70, 53, 74, 72, 77, 79, 81, 84, 86, 88, 86, 90, 366, 339, 338, 97, 87, 83, 86, 93, 101, 91, 113, 107, 125, 366, 128, 113, 119, 128, 114, 130, 120, 128, 121, 132, 335, 129, 132, 125, 130, 366, 129, 131, 166, 366, 152, 162, 173, 164, 171, 162, 162, 162, 163, 161, 172, 170, 166, 174, 184, 336, 65, 180, 177, 201, 197, 189, 202, 198, 202, 206, 202, 366, 203, 214, 204, 218, 202, 220, 212, 207, 223, 218, 212, 239, 245, 366, 232, 233, 246, 241, 248, 251, 241, 241, 252, 258, 251, 247, 248, 251, 256, 366, 366, 251, 366, 257, 269, 269, 278, 270, 279, 283, 279, 283, 291, 279, 286, 294, 366, 295, 292, 366, 366, 287, 296, 366, 301, 294, 302, 366, 293, 305, 323, 318, 366, 326, 318, 328, 322, 366, 366, 366 } ; static yyconst flex_int16_t yy_def[172] = { 0, 171, 1, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0 } ; static yyconst flex_int16_t yy_nxt[419] = { 0, 4, 5, 6, 7, 8, 4, 9, 10, 11, 12, 13, 4, 4, 14, 4, 15, 4, 16, 4, 4, 17, 18, 4, 4, 19, 4, 20, 21, 4, 4, 4, 22, 4, 14, 4, 15, 4, 16, 4, 4, 17, 18, 4, 4, 19, 4, 20, 21, 4, 4, 4, 22, 23, 23, 23, 23, 24, 25, 27, 25, 29, 32, 33, 34, 30, 28, 35, 36, 37, 31, 38, 40, 23, 23, 90, 41, 39, 41, 43, 42, 29, 32, 33, 34, 30, 28, 35, 36, 37, 31, 38, 40, 27, 25, 26, 44, 39, 45, 43, 28, 28, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 44, 60, 45, 61, 28, 28, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 62, 60, 63, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 62, 81, 63, 82, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 87, 81, 88, 82, 83, 89, 91, 90, 92, 93, 94, 84, 95, 96, 97, 85, 98, 86, 99, 100, 87, 101, 88, 102, 83, 103, 91, 104, 92, 93, 94, 84, 95, 96, 97, 85, 98, 86, 99, 100, 105, 101, 106, 102, 107, 103, 108, 104, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 105, 121, 106, 122, 107, 123, 108, 124, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 125, 121, 126, 122, 127, 123, 128, 124, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 125, 141, 126, 142, 127, 143, 128, 144, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 145, 141, 146, 142, 147, 143, 148, 144, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 145, 161, 146, 162, 147, 163, 148, 164, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 165, 161, 166, 162, 167, 163, 168, 164, 169, 170, 90, 76, 42, 42, 26, 26, 26, 171, 171, 171, 165, 171, 166, 171, 167, 171, 168, 171, 169, 170, 3, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171 } ; static yyconst flex_int16_t yy_chk[419] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 6, 6, 10, 10, 12, 12, 14, 15, 16, 17, 14, 12, 18, 19, 20, 14, 21, 22, 23, 23, 90, 28, 21, 28, 29, 28, 14, 15, 16, 17, 14, 12, 18, 19, 20, 14, 21, 22, 25, 25, 26, 30, 21, 31, 29, 25, 26, 32, 33, 34, 35, 36, 36, 37, 38, 39, 43, 44, 45, 46, 47, 30, 48, 31, 49, 25, 26, 32, 33, 34, 35, 36, 36, 37, 38, 39, 43, 44, 45, 46, 47, 50, 48, 51, 49, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 63, 65, 66, 67, 68, 50, 70, 51, 71, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 63, 65, 66, 67, 68, 74, 70, 75, 71, 72, 76, 77, 76, 78, 79, 80, 72, 81, 82, 83, 72, 84, 72, 85, 86, 74, 87, 75, 88, 72, 91, 77, 92, 78, 79, 80, 72, 81, 82, 83, 72, 84, 72, 85, 86, 93, 87, 94, 88, 95, 91, 96, 92, 97, 98, 99, 99, 100, 102, 103, 104, 105, 106, 107, 108, 93, 109, 94, 110, 95, 111, 96, 112, 97, 98, 99, 99, 100, 102, 103, 104, 105, 106, 107, 108, 113, 109, 114, 110, 116, 111, 117, 112, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 113, 130, 114, 133, 116, 135, 117, 136, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 137, 130, 138, 133, 139, 135, 140, 136, 141, 142, 143, 144, 145, 146, 147, 149, 150, 153, 154, 156, 137, 157, 138, 158, 139, 160, 140, 161, 141, 142, 143, 144, 145, 146, 147, 149, 150, 153, 154, 156, 162, 157, 163, 158, 165, 160, 166, 161, 167, 168, 89, 64, 42, 41, 27, 24, 11, 3, 0, 0, 162, 0, 163, 0, 165, 0, 166, 0, 167, 168, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int wkt_yy_flex_debug; int wkt_yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *wkt_yytext; #line 1 "lwin_wkt_lex.l" #line 2 "lwin_wkt_lex.l" /* The lexer */ #include <stdio.h> #include <string.h> #include "lwin_wkt.h" #include "lwin_wkt_parse.h" #include "lwgeom_log.h" static YY_BUFFER_STATE wkt_yy_buf_state; /* * Set up the lexer! */ void wkt_lexer_init(char *src) { wkt_yy_buf_state = wkt_yy_scan_string(src); } /* * Clean up the lexer! */ void wkt_lexer_close() { wkt_yy_delete_buffer(wkt_yy_buf_state); } /* * Handle errors due to unexpected junk in WKT strings. */ static void wkt_lexer_unknown() { /* Set the global error state */ global_parser_result.errcode = PARSER_ERROR_OTHER; global_parser_result.message = parser_error_messages[PARSER_ERROR_OTHER]; global_parser_result.errlocation = wkt_yylloc.last_column; } /* * This macro is magically run after a rule is found but before the main * action is run. We use it to update the parse location information * so we can report on where things fail. Also optionally to dump * debugging info. */ #define YY_USER_ACTION do { \ wkt_yylloc.first_line = wkt_yylloc.last_line = wkt_yylineno; \ wkt_yylloc.first_column = wkt_yylloc.last_column; \ wkt_yylloc.last_column += wkt_yyleng; \ LWDEBUGF(5,"lex: %s", wkt_yytext); \ } while (0); #line 676 "lwin_wkt_lex.c" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include <unistd.h> #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int wkt_yylex_destroy (void ); int wkt_yyget_debug (void ); void wkt_yyset_debug (int debug_flag ); YY_EXTRA_TYPE wkt_yyget_extra (void ); void wkt_yyset_extra (YY_EXTRA_TYPE user_defined ); FILE *wkt_yyget_in (void ); void wkt_yyset_in (FILE * in_str ); FILE *wkt_yyget_out (void ); void wkt_yyset_out (FILE * out_str ); yy_size_t wkt_yyget_leng (void ); char *wkt_yyget_text (void ); int wkt_yyget_lineno (void ); void wkt_yyset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int wkt_yywrap (void ); #else extern int wkt_yywrap (void ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO fwrite( wkt_yytext, wkt_yyleng, 1, wkt_yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( wkt_yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( wkt_yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, wkt_yyin))==0 && ferror(wkt_yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(wkt_yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int wkt_yylex (void); #define YY_DECL int wkt_yylex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after wkt_yytext and wkt_yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 64 "lwin_wkt_lex.l" #line 859 "lwin_wkt_lex.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! wkt_yyin ) wkt_yyin = stdin; if ( ! wkt_yyout ) wkt_yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { wkt_yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wkt_yy_create_buffer(wkt_yyin,YY_BUF_SIZE ); } wkt_yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of wkt_yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 172 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 171 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 66 "lwin_wkt_lex.l" { LWDEBUG(5,"DOUBLE"); wkt_yylval.doublevalue = atof(wkt_yytext); return DOUBLE_TOK; } YY_BREAK case 2: YY_RULE_SETUP #line 72 "lwin_wkt_lex.l" { LWDEBUG(5,"SRID"); wkt_yylval.integervalue = wkt_lexer_read_srid(wkt_yytext); return SRID_TOK; } YY_BREAK case 3: YY_RULE_SETUP #line 78 "lwin_wkt_lex.l" { return COLLECTION_TOK; } YY_BREAK case 4: YY_RULE_SETUP #line 79 "lwin_wkt_lex.l" { return MSURFACE_TOK; } YY_BREAK case 5: YY_RULE_SETUP #line 80 "lwin_wkt_lex.l" { return MPOLYGON_TOK; } YY_BREAK case 6: YY_RULE_SETUP #line 81 "lwin_wkt_lex.l" { return MCURVE_TOK; } YY_BREAK case 7: YY_RULE_SETUP #line 82 "lwin_wkt_lex.l" { return MLINESTRING_TOK; } YY_BREAK case 8: YY_RULE_SETUP #line 83 "lwin_wkt_lex.l" { return MPOINT_TOK; } YY_BREAK case 9: YY_RULE_SETUP #line 84 "lwin_wkt_lex.l" { return CURVEPOLYGON_TOK; } YY_BREAK case 10: YY_RULE_SETUP #line 85 "lwin_wkt_lex.l" { return POLYGON_TOK; } YY_BREAK case 11: YY_RULE_SETUP #line 86 "lwin_wkt_lex.l" { return COMPOUNDCURVE_TOK; } YY_BREAK case 12: YY_RULE_SETUP #line 87 "lwin_wkt_lex.l" { return CIRCULARSTRING_TOK; } YY_BREAK case 13: YY_RULE_SETUP #line 88 "lwin_wkt_lex.l" { return LINESTRING_TOK; } YY_BREAK case 14: YY_RULE_SETUP #line 89 "lwin_wkt_lex.l" { return POLYHEDRALSURFACE_TOK; } YY_BREAK case 15: YY_RULE_SETUP #line 90 "lwin_wkt_lex.l" { return TRIANGLE_TOK; } YY_BREAK case 16: YY_RULE_SETUP #line 91 "lwin_wkt_lex.l" { return TIN_TOK; } YY_BREAK case 17: YY_RULE_SETUP #line 92 "lwin_wkt_lex.l" { return POINT_TOK; } YY_BREAK case 18: YY_RULE_SETUP #line 93 "lwin_wkt_lex.l" { return EMPTY_TOK; } YY_BREAK case 19: YY_RULE_SETUP #line 95 "lwin_wkt_lex.l" { LWDEBUG(5,"DIMENSIONALITY"); wkt_yylval.stringvalue = wkt_yytext; return DIMENSIONALITY_TOK; } YY_BREAK case 20: YY_RULE_SETUP #line 101 "lwin_wkt_lex.l" { LWDEBUG(5,"LBRACKET"); return LBRACKET_TOK; } YY_BREAK case 21: YY_RULE_SETUP #line 102 "lwin_wkt_lex.l" { LWDEBUG(5,"RBRACKET"); return RBRACKET_TOK; } YY_BREAK case 22: YY_RULE_SETUP #line 103 "lwin_wkt_lex.l" { LWDEBUG(5,"COMMA"); return COMMA_TOK; } YY_BREAK case 23: YY_RULE_SETUP #line 104 "lwin_wkt_lex.l" { LWDEBUG(5,"SEMICOLON"); return SEMICOLON_TOK; } YY_BREAK case 24: /* rule 24 can match eol */ YY_RULE_SETUP #line 106 "lwin_wkt_lex.l" { /* ignore whitespace */ LWDEBUG(5,"WHITESPACE"); } YY_BREAK case 25: YY_RULE_SETUP #line 108 "lwin_wkt_lex.l" { /* Error out and stop parsing on unknown/unexpected characters */ LWDEBUG(5,"UNKNOWN"); wkt_lexer_unknown(); yyterminate(); } YY_BREAK case 26: YY_RULE_SETUP #line 114 "lwin_wkt_lex.l" ECHO; YY_BREAK #line 1085 "lwin_wkt_lex.c" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed wkt_yyin at a new source and called * wkt_yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = wkt_yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( wkt_yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * wkt_yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of wkt_yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ wkt_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; wkt_yyrestart(wkt_yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) wkt_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 172 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 172 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 171); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ wkt_yyrestart(wkt_yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( wkt_yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve wkt_yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void wkt_yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ wkt_yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wkt_yy_create_buffer(wkt_yyin,YY_BUF_SIZE ); } wkt_yy_init_buffer(YY_CURRENT_BUFFER,input_file ); wkt_yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void wkt_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * wkt_yypop_buffer_state(); * wkt_yypush_buffer_state(new_buffer); */ wkt_yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; wkt_yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (wkt_yywrap()) processing, but the only time this flag * is looked at is after wkt_yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void wkt_yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; wkt_yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE wkt_yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) wkt_yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wkt_yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) wkt_yyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in wkt_yy_create_buffer()" ); b->yy_is_our_buffer = 1; wkt_yy_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with wkt_yy_create_buffer() * */ void wkt_yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) wkt_yyfree((void *) b->yy_ch_buf ); wkt_yyfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a wkt_yyrestart() or at EOF. */ static void wkt_yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; wkt_yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then wkt_yy_init_buffer was _probably_ * called from wkt_yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void wkt_yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) wkt_yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void wkt_yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; wkt_yyensure_buffer_stack(); /* This block is copied from wkt_yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from wkt_yy_switch_to_buffer. */ wkt_yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void wkt_yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; wkt_yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { wkt_yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void wkt_yyensure_buffer_stack (void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)wkt_yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wkt_yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)wkt_yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wkt_yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wkt_yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) wkt_yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wkt_yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; wkt_yy_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to wkt_yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * wkt_yy_scan_bytes() instead. */ YY_BUFFER_STATE wkt_yy_scan_string (yyconst char * yystr ) { return wkt_yy_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to wkt_yylex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wkt_yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) wkt_yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in wkt_yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = wkt_yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in wkt_yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up wkt_yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ wkt_yytext[wkt_yyleng] = (yy_hold_char); \ (yy_c_buf_p) = wkt_yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ wkt_yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int wkt_yyget_lineno (void) { return wkt_yylineno; } /** Get the input stream. * */ FILE *wkt_yyget_in (void) { return wkt_yyin; } /** Get the output stream. * */ FILE *wkt_yyget_out (void) { return wkt_yyout; } /** Get the length of the current token. * */ yy_size_t wkt_yyget_leng (void) { return wkt_yyleng; } /** Get the current token. * */ char *wkt_yyget_text (void) { return wkt_yytext; } /** Set the current line number. * @param line_number * */ void wkt_yyset_lineno (int line_number ) { wkt_yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see wkt_yy_switch_to_buffer */ void wkt_yyset_in (FILE * in_str ) { wkt_yyin = in_str ; } void wkt_yyset_out (FILE * out_str ) { wkt_yyout = out_str ; } int wkt_yyget_debug (void) { return wkt_yy_flex_debug; } void wkt_yyset_debug (int bdebug ) { wkt_yy_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from wkt_yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT wkt_yyin = stdin; wkt_yyout = stdout; #else wkt_yyin = (FILE *) 0; wkt_yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * wkt_yylex_init() */ return 0; } /* wkt_yylex_destroy is for both reentrant and non-reentrant scanners. */ int wkt_yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ wkt_yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; wkt_yypop_buffer_state(); } /* Destroy the stack itself. */ wkt_yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * wkt_yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *wkt_yyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *wkt_yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void wkt_yyfree (void * ptr ) { free( (char *) ptr ); /* see wkt_yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 114 "lwin_wkt_lex.l" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwpoint.c���������������������������������������������������������0000644�0000000�0000000�00000013216�12045033704�017402� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" /* * Convenience functions to hide the POINTARRAY * TODO: obsolete this */ int lwpoint_getPoint2d_p(const LWPOINT *point, POINT2D *out) { return getPoint2d_p(point->point, 0, out); } /* convenience functions to hide the POINTARRAY */ int lwpoint_getPoint3dz_p(const LWPOINT *point, POINT3DZ *out) { return getPoint3dz_p(point->point,0,out); } int lwpoint_getPoint3dm_p(const LWPOINT *point, POINT3DM *out) { return getPoint3dm_p(point->point,0,out); } int lwpoint_getPoint4d_p(const LWPOINT *point, POINT4D *out) { return getPoint4d_p(point->point,0,out); } double lwpoint_get_x(const LWPOINT *point) { POINT4D pt; if ( lwpoint_is_empty(point) ) lwerror("lwpoint_get_x called with empty geometry"); getPoint4d_p(point->point, 0, &pt); return pt.x; } double lwpoint_get_y(const LWPOINT *point) { POINT4D pt; if ( lwpoint_is_empty(point) ) lwerror("lwpoint_get_y called with empty geometry"); getPoint4d_p(point->point, 0, &pt); return pt.y; } double lwpoint_get_z(const LWPOINT *point) { POINT4D pt; if ( lwpoint_is_empty(point) ) lwerror("lwpoint_get_z called with empty geometry"); if ( ! FLAGS_GET_Z(point->flags) ) lwerror("lwpoint_get_z called without z dimension"); getPoint4d_p(point->point, 0, &pt); return pt.z; } double lwpoint_get_m(const LWPOINT *point) { POINT4D pt; if ( lwpoint_is_empty(point) ) lwerror("lwpoint_get_m called with empty geometry"); if ( ! FLAGS_GET_M(point->flags) ) lwerror("lwpoint_get_m called without m dimension"); getPoint4d_p(point->point, 0, &pt); return pt.m; } /* * Construct a new point. point will not be copied * use SRID=SRID_UNKNOWN for unknown SRID (will have 8bit type's S = 0) */ LWPOINT * lwpoint_construct(int srid, GBOX *bbox, POINTARRAY *point) { LWPOINT *result; uint8_t flags = 0; if (point == NULL) return NULL; /* error */ result = lwalloc(sizeof(LWPOINT)); result->type = POINTTYPE; FLAGS_SET_Z(flags, FLAGS_GET_Z(point->flags)); FLAGS_SET_M(flags, FLAGS_GET_M(point->flags)); FLAGS_SET_BBOX(flags, bbox?1:0); result->flags = flags; result->srid = srid; result->point = point; result->bbox = bbox; return result; } LWPOINT * lwpoint_construct_empty(int srid, char hasz, char hasm) { LWPOINT *result = lwalloc(sizeof(LWPOINT)); result->type = POINTTYPE; result->flags = gflags(hasz, hasm, 0); result->srid = srid; result->point = ptarray_construct(hasz, hasm, 0); result->bbox = NULL; return result; } LWPOINT * lwpoint_make2d(int srid, double x, double y) { POINT4D p = {x, y, 0.0, 0.0}; POINTARRAY *pa = ptarray_construct_empty(0, 0, 1); ptarray_append_point(pa, &p, LW_TRUE); return lwpoint_construct(srid, NULL, pa); } LWPOINT * lwpoint_make3dz(int srid, double x, double y, double z) { POINT4D p = {x, y, z, 0.0}; POINTARRAY *pa = ptarray_construct_empty(1, 0, 1); ptarray_append_point(pa, &p, LW_TRUE); return lwpoint_construct(srid, NULL, pa); } LWPOINT * lwpoint_make3dm(int srid, double x, double y, double m) { POINT4D p = {x, y, 0.0, m}; POINTARRAY *pa = ptarray_construct_empty(0, 1, 1); ptarray_append_point(pa, &p, LW_TRUE); return lwpoint_construct(srid, NULL, pa); } LWPOINT * lwpoint_make4d(int srid, double x, double y, double z, double m) { POINT4D p = {x, y, z, m}; POINTARRAY *pa = ptarray_construct_empty(1, 1, 1); ptarray_append_point(pa, &p, LW_TRUE); return lwpoint_construct(srid, NULL, pa); } LWPOINT * lwpoint_make(int srid, int hasz, int hasm, const POINT4D *p) { POINTARRAY *pa = ptarray_construct_empty(hasz, hasm, 1); ptarray_append_point(pa, p, LW_TRUE); return lwpoint_construct(srid, NULL, pa); } void lwpoint_free(LWPOINT *pt) { if ( ! pt ) return; if ( pt->bbox ) lwfree(pt->bbox); if ( pt->point ) ptarray_free(pt->point); lwfree(pt); } void printLWPOINT(LWPOINT *point) { lwnotice("LWPOINT {"); lwnotice(" ndims = %i", (int)FLAGS_NDIMS(point->flags)); lwnotice(" BBOX = %i", FLAGS_GET_BBOX(point->flags) ? 1 : 0 ); lwnotice(" SRID = %i", (int)point->srid); printPA(point->point); lwnotice("}"); } /* @brief Clone LWPOINT object. Serialized point lists are not copied. * * @see ptarray_clone */ LWPOINT * lwpoint_clone(const LWPOINT *g) { LWPOINT *ret = lwalloc(sizeof(LWPOINT)); LWDEBUG(2, "lwpoint_clone called"); memcpy(ret, g, sizeof(LWPOINT)); ret->point = ptarray_clone(g->point); if ( g->bbox ) ret->bbox = gbox_copy(g->bbox); return ret; } void lwpoint_release(LWPOINT *lwpoint) { lwgeom_release(lwpoint_as_lwgeom(lwpoint)); } /* check coordinate equality */ char lwpoint_same(const LWPOINT *p1, const LWPOINT *p2) { return ptarray_same(p1->point, p2->point); } LWPOINT* lwpoint_force_dims(const LWPOINT *point, int hasz, int hasm) { POINTARRAY *pdims = NULL; LWPOINT *pointout; /* Return 2D empty */ if( lwpoint_is_empty(point) ) { pointout = lwpoint_construct_empty(point->srid, hasz, hasm); } else { /* Always we duplicate the ptarray and return */ pdims = ptarray_force_dims(point->point, hasz, hasm); pointout = lwpoint_construct(point->srid, NULL, pdims); } pointout->type = point->type; return pointout; } int lwpoint_is_empty(const LWPOINT *point) { if ( ! point->point || point->point->npoints < 1 ) return LW_TRUE; return LW_FALSE; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwalgorithm.c�����������������������������������������������������0000644�0000000�0000000�00000046435�12230320272�020243� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwalgorithm.c 12043 2013-10-18 20:57:30Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "liblwgeom_internal.h" #include "lwgeom_log.h" #include <ctype.h> /* for tolower */ /** * Returns -1 if n < 0.0 and 1 if n > 0.0 */ int signum(double n) { if( n < 0 ) return -1; if( n > 0 ) return 1; return 0; } int p4d_same(const POINT4D *p1, const POINT4D *p2) { if( FP_EQUALS(p1->x,p2->x) && FP_EQUALS(p1->y,p2->y) && FP_EQUALS(p1->z,p2->z) && FP_EQUALS(p1->m,p2->m) ) return LW_TRUE; else return LW_FALSE; } int p3d_same(const POINT3D *p1, const POINT3D *p2) { if( FP_EQUALS(p1->x,p2->x) && FP_EQUALS(p1->y,p2->y) && FP_EQUALS(p1->z,p2->z) ) return LW_TRUE; else return LW_FALSE; } int p2d_same(const POINT2D *p1, const POINT2D *p2) { if( FP_EQUALS(p1->x,p2->x) && FP_EQUALS(p1->y,p2->y) ) return LW_TRUE; else return LW_FALSE; } /** * lw_segment_side() * * Return -1 if point Q is left of segment P * Return 1 if point Q is right of segment P * Return 0 if point Q in on segment P */ int lw_segment_side(const POINT2D *p1, const POINT2D *p2, const POINT2D *q) { double side = ( (q->x - p1->x) * (p2->y - p1->y) - (p2->x - p1->x) * (q->y - p1->y) ); if ( side == 0.0 ) return 0; else return signum(side); } /** * Returns the length of a linear segment */ double lw_seg_length(const POINT2D *A1, const POINT2D *A2) { return sqrt((A1->x-A2->x)*(A1->x-A2->x)+(A1->y-A2->y)*(A1->y-A2->y)); } /** * Returns true if P is on the same side of the plane partition * defined by A1/A3 as A2 is. Only makes sense if P has already been * determined to be on the circle defined by A1/A2/A3. */ int lw_pt_in_arc(const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3) { return lw_segment_side(A1, A3, A2) == lw_segment_side(A1, A3, P); } /** * Returns true if P is between A1/A2. Only makes sense if P has already been * deterined to be on the line defined by A1/A2. */ int lw_pt_in_seg(const POINT2D *P, const POINT2D *A1, const POINT2D *A2) { return ((A1->x <= P->x && P->x < A2->x) || (A1->x >= P->x && P->x > A2->x)) || ((A1->y <= P->y && P->y < A2->y) || (A1->y >= P->y && P->y > A2->y)); } /** * Returns true if arc A is actually a point (all vertices are the same) . */ int lw_arc_is_pt(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3) { if ( A1->x == A2->x && A2->x == A3->x && A1->y == A2->y && A2->y == A3->y ) return LW_TRUE; else return LW_FALSE; } /** * Returns the length of a circular arc segment */ double lw_arc_length(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3) { POINT2D C; double radius_A, circumference_A; int a2_side, clockwise; double a1, a3; double angle; if ( lw_arc_is_pt(A1, A2, A3) ) return 0.0; radius_A = lw_arc_center(A1, A2, A3, &C); /* Co-linear! Return linear distance! */ if ( radius_A < 0 ) { double dx = A1->x - A3->x; double dy = A1->y - A3->y; return sqrt(dx*dx + dy*dy); } /* Closed circle! Return the circumference! */ circumference_A = M_PI * 2 * radius_A; if ( p2d_same(A1, A3) ) return circumference_A; /* Determine the orientation of the arc */ a2_side = lw_segment_side(A1, A3, A2); /* The side of the A1/A3 line that A2 falls on dictates the sweep direction from A1 to A3. */ if ( a2_side == -1 ) clockwise = LW_TRUE; else clockwise = LW_FALSE; /* Angles of each point that defines the arc section */ a1 = atan2(A1->y - C.y, A1->x - C.x); a3 = atan2(A3->y - C.y, A3->x - C.x); /* What's the sweep from A1 to A3? */ if ( clockwise ) { if ( a1 > a3 ) angle = a1 - a3; else angle = 2*M_PI + a1 - a3; } else { if ( a3 > a1 ) angle = a3 - a1; else angle = 2*M_PI + a3 - a1; } /* Length as proportion of circumference */ return circumference_A * (angle / (2*M_PI)); } int lw_arc_side(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, const POINT2D *Q) { POINT2D C; double radius_A; double side_Q, side_A2; double d; side_Q = lw_segment_side(A1, A3, Q); radius_A = lw_arc_center(A1, A2, A3, &C); side_A2 = lw_segment_side(A1, A3, A2); /* Linear case */ if ( radius_A < 0 ) return side_Q; d = distance2d_pt_pt(Q, &C); /* Q is on the arc boundary */ if ( d == radius_A && side_Q == side_A2 ) { return 0; } /* Q on A1-A3 line, so its on opposite side to A2 */ if ( side_Q == 0 ) { return -1 * side_A2; } /* * Q is inside the arc boundary, so it's not on the side we * might think from examining only the end points */ if ( d < radius_A && side_Q == side_A2 ) { side_Q *= -1; } return side_Q; } /** * Determines the center of the circle defined by the three given points. * In the event the circle is complete, the midpoint of the segment defined * by the first and second points is returned. If the points are colinear, * as determined by equal slopes, then NULL is returned. If the interior * point is coincident with either end point, they are taken as colinear. */ double lw_arc_center(const POINT2D *p1, const POINT2D *p2, const POINT2D *p3, POINT2D *result) { POINT2D c; double cx, cy, cr; double temp, bc, cd, det; c.x = c.y = 0.0; LWDEBUGF(2, "lw_arc_center called (%.16f,%.16f), (%.16f,%.16f), (%.16f,%.16f).", p1->x, p1->y, p2->x, p2->y, p3->x, p3->y); /* Closed circle */ if (fabs(p1->x - p3->x) < EPSILON_SQLMM && fabs(p1->y - p3->y) < EPSILON_SQLMM) { cx = p1->x + (p2->x - p1->x) / 2.0; cy = p1->y + (p2->y - p1->y) / 2.0; c.x = cx; c.y = cy; *result = c; cr = sqrt(pow(cx - p1->x, 2.0) + pow(cy - p1->y, 2.0)); return cr; } temp = p2->x*p2->x + p2->y*p2->y; bc = (p1->x*p1->x + p1->y*p1->y - temp) / 2.0; cd = (temp - p3->x*p3->x - p3->y*p3->y) / 2.0; det = (p1->x - p2->x)*(p2->y - p3->y)-(p2->x - p3->x)*(p1->y - p2->y); /* Check colinearity */ if (fabs(det) < EPSILON_SQLMM) return -1.0; det = 1.0 / det; cx = (bc*(p2->y - p3->y)-cd*(p1->y - p2->y))*det; cy = ((p1->x - p2->x)*cd-(p2->x - p3->x)*bc)*det; c.x = cx; c.y = cy; *result = c; cr = sqrt((cx-p1->x)*(cx-p1->x)+(cy-p1->y)*(cy-p1->y)); LWDEBUGF(2, "lw_arc_center center is (%.16f,%.16f)", result->x, result->y); return cr; } int pt_in_ring_2d(const POINT2D *p, const POINTARRAY *ring) { int cn = 0; /* the crossing number counter */ int i; POINT2D v1, v2; POINT2D first, last; getPoint2d_p(ring, 0, &first); getPoint2d_p(ring, ring->npoints-1, &last); if ( memcmp(&first, &last, sizeof(POINT2D)) ) { lwerror("pt_in_ring_2d: V[n] != V[0] (%g %g != %g %g)", first.x, first.y, last.x, last.y); return LW_FALSE; } LWDEBUGF(2, "pt_in_ring_2d called with point: %g %g", p->x, p->y); /* printPA(ring); */ /* loop through all edges of the polygon */ getPoint2d_p(ring, 0, &v1); for (i=0; i<ring->npoints-1; i++) { double vt; getPoint2d_p(ring, i+1, &v2); /* edge from vertex i to vertex i+1 */ if ( /* an upward crossing */ ((v1.y <= p->y) && (v2.y > p->y)) /* a downward crossing */ || ((v1.y > p->y) && (v2.y <= p->y)) ) { vt = (double)(p->y - v1.y) / (v2.y - v1.y); /* P.x <intersect */ if (p->x < v1.x + vt * (v2.x - v1.x)) { /* a valid crossing of y=p.y right of p.x */ ++cn; } } v1 = v2; } LWDEBUGF(3, "pt_in_ring_2d returning %d", cn&1); return (cn&1); /* 0 if even (out), and 1 if odd (in) */ } static int lw_seg_interact(const POINT2D *p1, const POINT2D *p2, const POINT2D *q1, const POINT2D *q2) { double minq=FP_MIN(q1->x,q2->x); double maxq=FP_MAX(q1->x,q2->x); double minp=FP_MIN(p1->x,p2->x); double maxp=FP_MAX(p1->x,p2->x); if (FP_GT(minp,maxq) || FP_LT(maxp,minq)) return LW_FALSE; minq=FP_MIN(q1->y,q2->y); maxq=FP_MAX(q1->y,q2->y); minp=FP_MIN(p1->y,p2->y); maxp=FP_MAX(p1->y,p2->y); if (FP_GT(minp,maxq) || FP_LT(maxp,minq)) return LW_FALSE; return LW_TRUE; } /** ** @brief returns the kind of #CG_SEGMENT_INTERSECTION_TYPE behavior of lineseg 1 (constructed from p1 and p2) and lineseg 2 (constructed from q1 and q2) ** @param p1 start point of first straight linesegment ** @param p2 end point of first straight linesegment ** @param q1 start point of second line segment ** @param q2 end point of second line segment ** @return a #CG_SEGMENT_INTERSECTION_TYPE ** Returns one of ** SEG_ERROR = -1, ** SEG_NO_INTERSECTION = 0, ** SEG_COLINEAR = 1, ** SEG_CROSS_LEFT = 2, ** SEG_CROSS_RIGHT = 3, */ int lw_segment_intersects(const POINT2D *p1, const POINT2D *p2, const POINT2D *q1, const POINT2D *q2) { int pq1, pq2, qp1, qp2; /* No envelope interaction => we are done. */ if (!lw_seg_interact(p1, p2, q1, p2)) { return SEG_NO_INTERSECTION; } /* Are the start and end points of q on the same side of p? */ pq1=lw_segment_side(p1,p2,q1); pq2=lw_segment_side(p1,p2,q2); if ((pq1>0 && pq2>0) || (pq1<0 && pq2<0)) { return SEG_NO_INTERSECTION; } /* Are the start and end points of p on the same side of q? */ qp1=lw_segment_side(q1,q2,p1); qp2=lw_segment_side(q1,q2,p2); if ( (qp1 > 0.0 && qp2 > 0.0) || (qp1 < 0.0 && qp2 < 0.0) ) { return SEG_NO_INTERSECTION; } /* Nobody is on one side or another? Must be colinear. */ if ( pq1 == 0.0 && pq2 == 0.0 && qp1 == 0.0 && qp2 == 0.0 ) { return SEG_COLINEAR; } /* ** When one end-point touches, the sidedness is determined by the ** location of the other end-point. Only touches by the first point ** will be considered "real" to avoid double counting. */ LWDEBUGF(4, "pq1=%.15g pq2=%.15g", pq1, pq2); LWDEBUGF(4, "qp1=%.15g qp2=%.15g", qp1, qp2); /* Second point of p or q touches, it's not a crossing. */ if ( pq2 == 0 || qp2 == 0 ) { return SEG_NO_INTERSECTION; } /* First point of p touches, it's a "crossing". */ if ( pq1 == 0 ) { if ( pq2 > 0 ) return SEG_CROSS_RIGHT; else return SEG_CROSS_LEFT; } /* First point of q touches, it's a crossing. */ if ( qp1 == 0 ) { if ( pq1 < pq2 ) return SEG_CROSS_RIGHT; else return SEG_CROSS_LEFT; } /* The segments cross, what direction is the crossing? */ if ( pq1 < pq2 ) return SEG_CROSS_RIGHT; else return SEG_CROSS_LEFT; /* This should never happen! */ return SEG_ERROR; } /** ** @brief lwline_crossing_direction: returns the kind of #CG_LINE_CROSS_TYPE behavior of 2 linestrings ** @param l1 first line string ** @param l2 second line string ** @return a #CG_LINE_CROSS_TYPE ** LINE_NO_CROSS = 0 ** LINE_CROSS_LEFT = -1 ** LINE_CROSS_RIGHT = 1 ** LINE_MULTICROSS_END_LEFT = -2 ** LINE_MULTICROSS_END_RIGHT = 2 ** LINE_MULTICROSS_END_SAME_FIRST_LEFT = -3 ** LINE_MULTICROSS_END_SAME_FIRST_RIGHT = 3 ** */ int lwline_crossing_direction(const LWLINE *l1, const LWLINE *l2) { int i = 0, j = 0; POINT2D p1, p2, q1, q2; POINTARRAY *pa1 = NULL, *pa2 = NULL; int cross_left = 0; int cross_right = 0; int first_cross = 0; int this_cross = 0; pa1 = (POINTARRAY*)l1->points; pa2 = (POINTARRAY*)l2->points; /* One-point lines can't intersect (and shouldn't exist). */ if ( pa1->npoints < 2 || pa2->npoints < 2 ) return LINE_NO_CROSS; LWDEBUGF(4, "l1 = %s", lwgeom_to_ewkt((LWGEOM*)l1)); LWDEBUGF(4, "l2 = %s", lwgeom_to_ewkt((LWGEOM*)l2)); /* Initialize first point of q */ getPoint2d_p(pa2, 0, &q1); for ( i = 1; i < pa2->npoints; i++ ) { /* Update second point of q to next value */ getPoint2d_p(pa2, i, &q2); /* Initialize first point of p */ getPoint2d_p(pa1, 0, &p1); for ( j = 1; j < pa1->npoints; j++ ) { /* Update second point of p to next value */ getPoint2d_p(pa1, j, &p2); this_cross = lw_segment_intersects(&p1, &p2, &q1, &q2); LWDEBUGF(4, "i=%d, j=%d (%.8g %.8g, %.8g %.8g)", this_cross, i, j, p1.x, p1.y, p2.x, p2.y); if ( this_cross == SEG_CROSS_LEFT ) { LWDEBUG(4,"this_cross == SEG_CROSS_LEFT"); cross_left++; if ( ! first_cross ) first_cross = SEG_CROSS_LEFT; } if ( this_cross == SEG_CROSS_RIGHT ) { LWDEBUG(4,"this_cross == SEG_CROSS_RIGHT"); cross_right++; if ( ! first_cross ) first_cross = SEG_CROSS_LEFT; } /* ** Crossing at a co-linearity can be turned handled by extending ** segment to next vertext and seeing if the end points straddle ** the co-linear segment. */ if ( this_cross == SEG_COLINEAR ) { LWDEBUG(4,"this_cross == SEG_COLINEAR"); /* TODO: Add logic here and in segment_intersects() continue; */ } LWDEBUG(4,"this_cross == SEG_NO_INTERSECTION"); /* Turn second point of p into first point */ p1 = p2; } /* Turn second point of q into first point */ q1 = q2; } LWDEBUGF(4, "first_cross=%d, cross_left=%d, cross_right=%d", first_cross, cross_left, cross_right); if ( !cross_left && !cross_right ) return LINE_NO_CROSS; if ( !cross_left && cross_right == 1 ) return LINE_CROSS_RIGHT; if ( !cross_right && cross_left == 1 ) return LINE_CROSS_LEFT; if ( cross_left - cross_right == 1 ) return LINE_MULTICROSS_END_LEFT; if ( cross_left - cross_right == -1 ) return LINE_MULTICROSS_END_RIGHT; if ( cross_left - cross_right == 0 && first_cross == SEG_CROSS_LEFT ) return LINE_MULTICROSS_END_SAME_FIRST_LEFT; if ( cross_left - cross_right == 0 && first_cross == SEG_CROSS_RIGHT ) return LINE_MULTICROSS_END_SAME_FIRST_RIGHT; return LINE_NO_CROSS; } static char *base32 = "0123456789bcdefghjkmnpqrstuvwxyz"; /* ** Calculate the geohash, iterating downwards and gaining precision. ** From geohash-native.c, (c) 2008 David Troy <dave@roundhousetech.com> ** Released under the MIT License. */ char *geohash_point(double longitude, double latitude, int precision) { int is_even=1, i=0; double lat[2], lon[2], mid; char bits[] = {16,8,4,2,1}; int bit=0, ch=0; char *geohash = NULL; geohash = lwalloc(precision + 1); lat[0] = -90.0; lat[1] = 90.0; lon[0] = -180.0; lon[1] = 180.0; while (i < precision) { if (is_even) { mid = (lon[0] + lon[1]) / 2; if (longitude >= mid) { ch |= bits[bit]; lon[0] = mid; } else { lon[1] = mid; } } else { mid = (lat[0] + lat[1]) / 2; if (latitude >= mid) { ch |= bits[bit]; lat[0] = mid; } else { lat[1] = mid; } } is_even = !is_even; if (bit < 4) { bit++; } else { geohash[i++] = base32[ch]; bit = 0; ch = 0; } } geohash[i] = 0; return geohash; } /* ** Calculate the geohash, iterating downwards and gaining precision. ** From geohash-native.c, (c) 2008 David Troy <dave@roundhousetech.com> ** Released under the MIT License. */ unsigned int geohash_point_as_int(POINT2D *pt) { int is_even=1; double lat[2], lon[2], mid; int bit=32; unsigned int ch = 0; double longitude = pt->x; double latitude = pt->y; lat[0] = -90.0; lat[1] = 90.0; lon[0] = -180.0; lon[1] = 180.0; while (--bit >= 0) { if (is_even) { mid = (lon[0] + lon[1]) / 2; if (longitude > mid) { ch |= 0x0001 << bit; lon[0] = mid; } else { lon[1] = mid; } } else { mid = (lat[0] + lat[1]) / 2; if (latitude > mid) { ch |= 0x0001 << bit; lat[0] = mid; } else { lat[1] = mid; } } is_even = !is_even; } return ch; } /* ** Decode a GeoHash into a bounding box. The lat and lon arguments should ** both be passed as double arrays of length 2 at a minimum where the values ** set in them will be the southwest and northeast coordinates of the bounding ** box accordingly. A precision less than 0 indicates that the entire length ** of the GeoHash should be used. */ void decode_geohash_bbox(char *geohash, double *lat, double *lon, int precision) { int i, j, hashlen; char c, cd, mask, is_even = 1; static char bits[] = {16, 8, 4, 2, 1}; lat[0] = -90.0; lat[1] = 90.0; lon[0] = -180.0; lon[1] = 180.0; hashlen = strlen(geohash); if (precision < 0 || precision > hashlen) { precision = hashlen; } for (i = 0; i < precision; i++) { c = tolower(geohash[i]); cd = strchr(base32, c) - base32; for (j = 0; j < 5; j++) { mask = bits[j]; if (is_even) { lon[!(cd & mask)] = (lon[0] + lon[1]) / 2; } else { lat[!(cd & mask)] = (lat[0] + lat[1]) / 2; } is_even = !is_even; } } } int lwgeom_geohash_precision(GBOX bbox, GBOX *bounds) { double minx, miny, maxx, maxy; double latmax, latmin, lonmax, lonmin; double lonwidth, latwidth; double latmaxadjust, lonmaxadjust, latminadjust, lonminadjust; int precision = 0; /* Get the bounding box, return error if things don't work out. */ minx = bbox.xmin; miny = bbox.ymin; maxx = bbox.xmax; maxy = bbox.ymax; if ( minx == maxx && miny == maxy ) { /* It's a point. Doubles have 51 bits of precision. ** 2 * 51 / 5 == 20 */ return 20; } lonmin = -180.0; latmin = -90.0; lonmax = 180.0; latmax = 90.0; /* Shrink a world bounding box until one of the edges interferes with the ** bounds of our rectangle. */ while ( 1 ) { lonwidth = lonmax - lonmin; latwidth = latmax - latmin; latmaxadjust = lonmaxadjust = latminadjust = lonminadjust = 0.0; if ( minx > lonmin + lonwidth / 2.0 ) { lonminadjust = lonwidth / 2.0; } else if ( maxx < lonmax - lonwidth / 2.0 ) { lonmaxadjust = -1 * lonwidth / 2.0; } if ( miny > latmin + latwidth / 2.0 ) { latminadjust = latwidth / 2.0; } else if (maxy < latmax - latwidth / 2.0 ) { latmaxadjust = -1 * latwidth / 2.0; } /* Only adjust if adjustments are legal (we haven't crossed any edges). */ if ( (lonminadjust || lonmaxadjust) && (latminadjust || latmaxadjust ) ) { latmin += latminadjust; lonmin += lonminadjust; latmax += latmaxadjust; lonmax += lonmaxadjust; /* Each adjustment cycle corresponds to 2 bits of storage in the ** geohash. */ precision += 2; } else { break; } } /* Save the edges of our bounds, in case someone cares later. */ bounds->xmin = lonmin; bounds->xmax = lonmax; bounds->ymin = latmin; bounds->ymax = latmax; /* Each geohash character (base32) can contain 5 bits of information. ** We are returning the precision in characters, so here we divide. */ return precision / 5; } /* ** Return a geohash string for the geometry. <http://geohash.org> ** Where the precision is non-positive, calculate a precision based on the ** bounds of the feature. Big features have loose precision. ** Small features have tight precision. */ char *lwgeom_geohash(const LWGEOM *lwgeom, int precision) { GBOX gbox; GBOX gbox_bounds; double lat, lon; int result; gbox_init(&gbox); gbox_init(&gbox_bounds); result = lwgeom_calculate_gbox_cartesian(lwgeom, &gbox); if ( result == LW_FAILURE ) return NULL; /* Return error if we are being fed something outside our working bounds */ if ( gbox.xmin < -180 || gbox.ymin < -90 || gbox.xmax > 180 || gbox.ymax > 90 ) { lwerror("Geohash requires inputs in decimal degrees."); return NULL; } /* What is the center of our geometry bounds? We'll use that to ** approximate location. */ lon = gbox.xmin + (gbox.xmax - gbox.xmin) / 2; lat = gbox.ymin + (gbox.ymax - gbox.ymin) / 2; if ( precision <= 0 ) { precision = lwgeom_geohash_precision(gbox, &gbox_bounds); } /* ** Return the geohash of the center, with a precision determined by the ** extent of the bounds. ** Possible change: return the point at the center of the precision bounds? */ return geohash_point(lon, lat, precision); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/stringbuffer.h����������������������������������������������������0000644�0000000�0000000�00000005503�11766736215�020433� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: stringbuffer.h 9916 2012-06-15 22:51:57Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2002 Thamer Alharbash * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * The name of the author may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * **********************************************************************/ #ifndef _STRINGBUFFER_H #define _STRINGBUFFER_H 1 #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <stdio.h> #define STRINGBUFFER_STARTSIZE 128 typedef struct { size_t capacity; char *str_end; char *str_start; } stringbuffer_t; extern stringbuffer_t *stringbuffer_create_with_size(size_t size); extern stringbuffer_t *stringbuffer_create(void); extern void stringbuffer_destroy(stringbuffer_t *sb); extern void stringbuffer_clear(stringbuffer_t *sb); void stringbuffer_set(stringbuffer_t *sb, const char *s); void stringbuffer_copy(stringbuffer_t *sb, stringbuffer_t *src); extern void stringbuffer_append(stringbuffer_t *sb, const char *s); extern int stringbuffer_aprintf(stringbuffer_t *sb, const char *fmt, ...); extern const char *stringbuffer_getstring(stringbuffer_t *sb); extern char *stringbuffer_getstringcopy(stringbuffer_t *sb); extern int stringbuffer_getlength(stringbuffer_t *sb); extern char stringbuffer_lastchar(stringbuffer_t *s); extern int stringbuffer_trim_trailing_white(stringbuffer_t *s); extern int stringbuffer_trim_trailing_zeroes(stringbuffer_t *s); #endif /* _STRINGBUFFER_H */���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwin_wkt_parse.h��������������������������������������������������0000644�0000000�0000000�00000007237�12047044677�020766� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 2.5. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { POINT_TOK = 258, LINESTRING_TOK = 259, POLYGON_TOK = 260, MPOINT_TOK = 261, MLINESTRING_TOK = 262, MPOLYGON_TOK = 263, MSURFACE_TOK = 264, MCURVE_TOK = 265, CURVEPOLYGON_TOK = 266, COMPOUNDCURVE_TOK = 267, CIRCULARSTRING_TOK = 268, COLLECTION_TOK = 269, RBRACKET_TOK = 270, LBRACKET_TOK = 271, COMMA_TOK = 272, EMPTY_TOK = 273, SEMICOLON_TOK = 274, TRIANGLE_TOK = 275, TIN_TOK = 276, POLYHEDRALSURFACE_TOK = 277, DOUBLE_TOK = 278, DIMENSIONALITY_TOK = 279, SRID_TOK = 280 }; #endif /* Tokens. */ #define POINT_TOK 258 #define LINESTRING_TOK 259 #define POLYGON_TOK 260 #define MPOINT_TOK 261 #define MLINESTRING_TOK 262 #define MPOLYGON_TOK 263 #define MSURFACE_TOK 264 #define MCURVE_TOK 265 #define CURVEPOLYGON_TOK 266 #define COMPOUNDCURVE_TOK 267 #define CIRCULARSTRING_TOK 268 #define COLLECTION_TOK 269 #define RBRACKET_TOK 270 #define LBRACKET_TOK 271 #define COMMA_TOK 272 #define EMPTY_TOK 273 #define SEMICOLON_TOK 274 #define TRIANGLE_TOK 275 #define TIN_TOK 276 #define POLYHEDRALSURFACE_TOK 277 #define DOUBLE_TOK 278 #define DIMENSIONALITY_TOK 279 #define SRID_TOK 280 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 2068 of yacc.c */ #line 98 "lwin_wkt_parse.y" int integervalue; double doublevalue; char *stringvalue; LWGEOM *geometryvalue; POINT coordinatevalue; POINTARRAY *ptarrayvalue; /* Line 2068 of yacc.c */ #line 111 "lwin_wkt_parse.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE wkt_yylval; #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif extern YYLTYPE wkt_yylloc; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/lwcompound.c������������������������������������������������������0000644�0000000�0000000�00000011166�12142665475�020115� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "liblwgeom_internal.h" #include "lwgeom_log.h" int lwcompound_is_closed(const LWCOMPOUND *compound) { size_t size; int npoints=0; if ( lwgeom_has_z((LWGEOM*)compound) ) { size = sizeof(POINT3D); } else { size = sizeof(POINT2D); } if ( compound->geoms[compound->ngeoms - 1]->type == CIRCSTRINGTYPE ) { npoints = ((LWCIRCSTRING *)compound->geoms[compound->ngeoms - 1])->points->npoints; } else if (compound->geoms[compound->ngeoms - 1]->type == LINETYPE) { npoints = ((LWLINE *)compound->geoms[compound->ngeoms - 1])->points->npoints; } if ( memcmp(getPoint_internal( (POINTARRAY *)compound->geoms[0]->data, 0), getPoint_internal( (POINTARRAY *)compound->geoms[compound->ngeoms - 1]->data, npoints - 1), size) ) { return LW_FALSE; } return LW_TRUE; } double lwcompound_length(const LWCOMPOUND *comp) { double length = 0.0; LWLINE *line; if ( lwgeom_is_empty((LWGEOM*)comp) ) return 0.0; line = lwcompound_segmentize(comp, 32); length = lwline_length(line); lwline_free(line); return length; } double lwcompound_length_2d(const LWCOMPOUND *comp) { double length = 0.0; LWLINE *line; if ( lwgeom_is_empty((LWGEOM*)comp) ) return 0.0; line = lwcompound_segmentize(comp, 32); length = lwline_length_2d(line); lwline_free(line); return length; } int lwcompound_add_lwgeom(LWCOMPOUND *comp, LWGEOM *geom) { LWCOLLECTION *col = (LWCOLLECTION*)comp; /* Empty things can't continuously join up with other things */ if ( lwgeom_is_empty(geom) ) { LWDEBUG(4, "Got an empty component for a compound curve!"); return LW_FAILURE; } if( col->ngeoms > 0 ) { POINT4D last, first; /* First point of the component we are adding */ LWLINE *newline = (LWLINE*)geom; /* Last point of the previous component */ LWLINE *prevline = (LWLINE*)(col->geoms[col->ngeoms-1]); getPoint4d_p(newline->points, 0, &first); getPoint4d_p(prevline->points, prevline->points->npoints-1, &last); if ( !(FP_EQUALS(first.x,last.x) && FP_EQUALS(first.y,last.y)) ) { LWDEBUG(4, "Components don't join up end-to-end!"); LWDEBUGF(4, "first pt (%g %g %g %g) last pt (%g %g %g %g)", first.x, first.y, first.z, first.m, last.x, last.y, last.z, last.m); return LW_FAILURE; } } col = lwcollection_add_lwgeom(col, geom); return LW_SUCCESS; } LWCOMPOUND * lwcompound_construct_empty(int srid, char hasz, char hasm) { LWCOMPOUND *ret = (LWCOMPOUND*)lwcollection_construct_empty(COMPOUNDTYPE, srid, hasz, hasm); return ret; } int lwgeom_contains_point(const LWGEOM *geom, const POINT2D *pt) { switch( geom->type ) { case LINETYPE: return ptarray_contains_point(((LWLINE*)geom)->points, pt); case CIRCSTRINGTYPE: return ptarrayarc_contains_point(((LWCIRCSTRING*)geom)->points, pt); case COMPOUNDTYPE: return lwcompound_contains_point((LWCOMPOUND*)geom, pt); } lwerror("lwgeom_contains_point failed"); return LW_FAILURE; } int lwcompound_contains_point(const LWCOMPOUND *comp, const POINT2D *pt) { int i; LWLINE *lwline; LWCIRCSTRING *lwcirc; int wn = 0; int winding_number = 0; int result; for ( i = 0; i < comp->ngeoms; i++ ) { LWGEOM *lwgeom = comp->geoms[i]; if ( lwgeom->type == LINETYPE ) { lwline = lwgeom_as_lwline(lwgeom); if ( comp->ngeoms == 1 ) { return ptarray_contains_point(lwline->points, pt); } else { /* Don't check closure while doing p-i-p test */ result = ptarray_contains_point_partial(lwline->points, pt, LW_FALSE, &winding_number); } } else { lwcirc = lwgeom_as_lwcircstring(lwgeom); if ( ! lwcirc ) { lwerror("Unexpected component of type %s in compound curve", lwtype_name(lwgeom->type)); return 0; } if ( comp->ngeoms == 1 ) { return ptarrayarc_contains_point(lwcirc->points, pt); } else { /* Don't check closure while doing p-i-p test */ result = ptarrayarc_contains_point_partial(lwcirc->points, pt, LW_FALSE, &winding_number); } } /* Propogate boundary condition */ if ( result == LW_BOUNDARY ) return LW_BOUNDARY; wn += winding_number; } /* Outside */ if (wn == 0) return LW_OUTSIDE; /* Inside */ return LW_INSIDE; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/liblwgeom/g_box.c�����������������������������������������������������������0000644�0000000�0000000�00000040271�12306006543�017006� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: g_box.c 12296 2014-03-06 05:53:39Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include "liblwgeom_internal.h" #include "lwgeom_log.h" #include <stdlib.h> #include <math.h> GBOX* gbox_new(uint8_t flags) { GBOX *g = (GBOX*)lwalloc(sizeof(GBOX)); gbox_init(g); g->flags = flags; return g; } void gbox_init(GBOX *gbox) { memset(gbox, 0, sizeof(GBOX)); } GBOX* gbox_clone(const GBOX *gbox) { GBOX *g = lwalloc(sizeof(GBOX)); memcpy(g, gbox, sizeof(GBOX)); return g; } /* TODO to be removed */ BOX3D* box3d_from_gbox(const GBOX *gbox) { BOX3D *b; assert(gbox); b = lwalloc(sizeof(BOX3D)); b->xmin = gbox->xmin; b->xmax = gbox->xmax; b->ymin = gbox->ymin; b->ymax = gbox->ymax; if ( FLAGS_GET_Z(gbox->flags) ) { b->zmin = gbox->zmin; b->zmax = gbox->zmax; } else { b->zmin = b->zmax = 0.0; } b->srid = SRID_UNKNOWN; return b; } /* TODO to be removed */ GBOX* box3d_to_gbox(const BOX3D *b3d) { GBOX *b; assert(b3d); b = lwalloc(sizeof(GBOX)); b->xmin = b3d->xmin; b->xmax = b3d->xmax; b->ymin = b3d->ymin; b->ymax = b3d->ymax; b->zmin = b3d->zmin; b->zmax = b3d->zmax; return b; } void gbox_expand(GBOX *g, double d) { g->xmin -= d; g->xmax += d; g->ymin -= d; g->ymax += d; if ( FLAGS_GET_Z(g->flags) ) { g->zmin -= d; g->zmax += d; } if ( FLAGS_GET_M(g->flags) ) { g->mmin -= d; g->mmax += d; } } int gbox_union(const GBOX *g1, const GBOX *g2, GBOX *gout) { if ( ( ! g1 ) && ( ! g2 ) ) return LW_FALSE; if ( ! g1 ) { memcpy(gout, g2, sizeof(GBOX)); return LW_TRUE; } if ( ! g2 ) { memcpy(gout, g1, sizeof(GBOX)); return LW_TRUE; } gout->flags = g1->flags; gout->xmin = FP_MIN(g1->xmin, g2->xmin); gout->xmax = FP_MAX(g1->xmax, g2->xmax); gout->ymin = FP_MIN(g1->ymin, g2->ymin); gout->ymax = FP_MAX(g1->ymax, g2->ymax); gout->zmin = FP_MIN(g1->zmin, g2->zmin); gout->zmax = FP_MAX(g1->zmax, g2->zmax); return LW_TRUE; } int gbox_same(const GBOX *g1, const GBOX *g2) { if (FLAGS_GET_ZM(g1->flags) != FLAGS_GET_ZM(g2->flags)) return LW_FALSE; if ( g1->xmin != g2->xmin || g1->ymin != g2->ymin || g1->xmax != g2->xmax || g1->ymax != g2->ymax ) return LW_FALSE; if (FLAGS_GET_Z(g1->flags) && (g1->zmin != g2->zmin || g1->zmax != g2->zmax)) return LW_FALSE; if (FLAGS_GET_M(g1->flags) && (g1->mmin != g2->mmin || g1->mmax != g2->mmax)) return LW_FALSE; return LW_TRUE; } int gbox_is_valid(const GBOX *gbox) { /* X */ if ( ! isfinite(gbox->xmin) || isnan(gbox->xmin) || ! isfinite(gbox->xmax) || isnan(gbox->xmax) ) return LW_FALSE; /* Y */ if ( ! isfinite(gbox->ymin) || isnan(gbox->ymin) || ! isfinite(gbox->ymax) || isnan(gbox->ymax) ) return LW_FALSE; /* Z */ if ( FLAGS_GET_GEODETIC(gbox->flags) || FLAGS_GET_Z(gbox->flags) ) { if ( ! isfinite(gbox->zmin) || isnan(gbox->zmin) || ! isfinite(gbox->zmax) || isnan(gbox->zmax) ) return LW_FALSE; } /* M */ if ( FLAGS_GET_M(gbox->flags) ) { if ( ! isfinite(gbox->mmin) || isnan(gbox->mmin) || ! isfinite(gbox->mmax) || isnan(gbox->mmax) ) return LW_FALSE; } return LW_TRUE; } int gbox_merge_point3d(const POINT3D *p, GBOX *gbox) { if ( gbox->xmin > p->x ) gbox->xmin = p->x; if ( gbox->ymin > p->y ) gbox->ymin = p->y; if ( gbox->zmin > p->z ) gbox->zmin = p->z; if ( gbox->xmax < p->x ) gbox->xmax = p->x; if ( gbox->ymax < p->y ) gbox->ymax = p->y; if ( gbox->zmax < p->z ) gbox->zmax = p->z; return LW_SUCCESS; } int gbox_init_point3d(const POINT3D *p, GBOX *gbox) { gbox->xmin = gbox->xmax = p->x; gbox->ymin = gbox->ymax = p->y; gbox->zmin = gbox->zmax = p->z; return LW_SUCCESS; } int gbox_contains_point3d(const GBOX *gbox, const POINT3D *pt) { if ( gbox->xmin > pt->x || gbox->ymin > pt->y || gbox->zmin > pt->z || gbox->xmax < pt->x || gbox->ymax < pt->y || gbox->zmax < pt->z ) { return LW_FALSE; } return LW_TRUE; } int gbox_merge(const GBOX *new_box, GBOX *merge_box) { assert(merge_box); if ( FLAGS_GET_ZM(merge_box->flags) != FLAGS_GET_ZM(new_box->flags) ) return LW_FAILURE; if ( new_box->xmin < merge_box->xmin) merge_box->xmin = new_box->xmin; if ( new_box->ymin < merge_box->ymin) merge_box->ymin = new_box->ymin; if ( new_box->xmax > merge_box->xmax) merge_box->xmax = new_box->xmax; if ( new_box->ymax > merge_box->ymax) merge_box->ymax = new_box->ymax; if ( FLAGS_GET_Z(merge_box->flags) || FLAGS_GET_GEODETIC(merge_box->flags) ) { if ( new_box->zmin < merge_box->zmin) merge_box->zmin = new_box->zmin; if ( new_box->zmax > merge_box->zmax) merge_box->zmax = new_box->zmax; } if ( FLAGS_GET_M(merge_box->flags) ) { if ( new_box->mmin < merge_box->mmin) merge_box->mmin = new_box->mmin; if ( new_box->mmax > merge_box->mmax) merge_box->mmax = new_box->mmax; } return LW_SUCCESS; } int gbox_overlaps(const GBOX *g1, const GBOX *g2) { /* Make sure our boxes are consistent */ if ( FLAGS_GET_GEODETIC(g1->flags) != FLAGS_GET_GEODETIC(g2->flags) ) lwerror("gbox_overlaps: cannot compare geodetic and non-geodetic boxes"); /* Check X/Y first */ if ( g1->xmax < g2->xmin || g1->ymax < g2->ymin || g1->xmin > g2->xmax || g1->ymin > g2->ymax ) return LW_FALSE; /* Deal with the geodetic case special: we only compare the geodetic boxes (x/y/z) */ /* Never the M dimension */ if ( FLAGS_GET_GEODETIC(g1->flags) && FLAGS_GET_GEODETIC(g2->flags) ) { if ( g1->zmax < g2->zmin || g1->zmin > g2->zmax ) return LW_FALSE; else return LW_TRUE; } /* If both geodetic or both have Z, check Z */ if ( FLAGS_GET_Z(g1->flags) && FLAGS_GET_Z(g2->flags) ) { if ( g1->zmax < g2->zmin || g1->zmin > g2->zmax ) return LW_FALSE; } /* If both have M, check M */ if ( FLAGS_GET_M(g1->flags) && FLAGS_GET_M(g2->flags) ) { if ( g1->mmax < g2->mmin || g1->mmin > g2->mmax ) return LW_FALSE; } return LW_TRUE; } int gbox_overlaps_2d(const GBOX *g1, const GBOX *g2) { /* Make sure our boxes are consistent */ if ( FLAGS_GET_GEODETIC(g1->flags) != FLAGS_GET_GEODETIC(g2->flags) ) lwerror("gbox_overlaps: cannot compare geodetic and non-geodetic boxes"); /* Check X/Y first */ if ( g1->xmax < g2->xmin || g1->ymax < g2->ymin || g1->xmin > g2->xmax || g1->ymin > g2->ymax ) return LW_FALSE; return LW_TRUE; } /** * Warning, this function is only good for x/y/z boxes, used * in unit testing of geodetic box generation. */ GBOX* gbox_from_string(const char *str) { const char *ptr = str; char *nextptr; char *gbox_start = strstr(str, "GBOX(("); GBOX *gbox = gbox_new(gflags(0,0,1)); if ( ! gbox_start ) return NULL; /* No header found */ ptr += 6; gbox->xmin = strtod(ptr, &nextptr); if ( ptr == nextptr ) return NULL; /* No double found */ ptr = nextptr + 1; gbox->ymin = strtod(ptr, &nextptr); if ( ptr == nextptr ) return NULL; /* No double found */ ptr = nextptr + 1; gbox->zmin = strtod(ptr, &nextptr); if ( ptr == nextptr ) return NULL; /* No double found */ ptr = nextptr + 3; gbox->xmax = strtod(ptr, &nextptr); if ( ptr == nextptr ) return NULL; /* No double found */ ptr = nextptr + 1; gbox->ymax = strtod(ptr, &nextptr); if ( ptr == nextptr ) return NULL; /* No double found */ ptr = nextptr + 1; gbox->zmax = strtod(ptr, &nextptr); if ( ptr == nextptr ) return NULL; /* No double found */ return gbox; } char* gbox_to_string(const GBOX *gbox) { static int sz = 128; char *str = NULL; if ( ! gbox ) return strdup("NULL POINTER"); str = (char*)lwalloc(sz); if ( FLAGS_GET_GEODETIC(gbox->flags) ) { snprintf(str, sz, "GBOX((%.8g,%.8g,%.8g),(%.8g,%.8g,%.8g))", gbox->xmin, gbox->ymin, gbox->zmin, gbox->xmax, gbox->ymax, gbox->zmax); return str; } if ( FLAGS_GET_Z(gbox->flags) && FLAGS_GET_M(gbox->flags) ) { snprintf(str, sz, "GBOX((%.8g,%.8g,%.8g,%.8g),(%.8g,%.8g,%.8g,%.8g))", gbox->xmin, gbox->ymin, gbox->zmin, gbox->mmin, gbox->xmax, gbox->ymax, gbox->zmax, gbox->mmax); return str; } if ( FLAGS_GET_Z(gbox->flags) ) { snprintf(str, sz, "GBOX((%.8g,%.8g,%.8g),(%.8g,%.8g,%.8g))", gbox->xmin, gbox->ymin, gbox->zmin, gbox->xmax, gbox->ymax, gbox->zmax); return str; } if ( FLAGS_GET_M(gbox->flags) ) { snprintf(str, sz, "GBOX((%.8g,%.8g,%.8g),(%.8g,%.8g,%.8g))", gbox->xmin, gbox->ymin, gbox->mmin, gbox->xmax, gbox->ymax, gbox->mmax); return str; } snprintf(str, sz, "GBOX((%.8g,%.8g),(%.8g,%.8g))", gbox->xmin, gbox->ymin, gbox->xmax, gbox->ymax); return str; } GBOX* gbox_copy(const GBOX *box) { GBOX *copy = (GBOX*)lwalloc(sizeof(GBOX)); memcpy(copy, box, sizeof(GBOX)); return copy; } void gbox_duplicate(const GBOX *original, GBOX *duplicate) { assert(duplicate); memcpy(duplicate, original, sizeof(GBOX)); } size_t gbox_serialized_size(uint8_t flags) { if ( FLAGS_GET_GEODETIC(flags) ) return 6 * sizeof(float); else return 2 * FLAGS_NDIMS(flags) * sizeof(float); } /* ******************************************************************************** ** Compute cartesian bounding GBOX boxes from LWGEOM. */ int lw_arc_calculate_gbox_cartesian_2d(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, GBOX *gbox) { POINT2D xmin, ymin, xmax, ymax; POINT2D C; int A2_side; double radius_A; LWDEBUG(2, "lw_arc_calculate_gbox_cartesian_2d called."); radius_A = lw_arc_center(A1, A2, A3, &C); /* Negative radius signals straight line, p1/p2/p3 are colinear */ if (radius_A < 0.0) { gbox->xmin = FP_MIN(A1->x, A3->x); gbox->ymin = FP_MIN(A1->y, A3->y); gbox->xmax = FP_MAX(A1->x, A3->x); gbox->ymax = FP_MAX(A1->y, A3->y); return LW_SUCCESS; } /* Matched start/end points imply circle */ if ( A1->x == A3->x && A1->y == A3->y ) { gbox->xmin = C.x - radius_A; gbox->ymin = C.y - radius_A; gbox->xmax = C.x + radius_A; gbox->ymax = C.y + radius_A; return LW_SUCCESS; } /* First approximation, bounds of start/end points */ gbox->xmin = FP_MIN(A1->x, A3->x); gbox->ymin = FP_MIN(A1->y, A3->y); gbox->xmax = FP_MAX(A1->x, A3->x); gbox->ymax = FP_MAX(A1->y, A3->y); /* Create points for the possible extrema */ xmin.x = C.x - radius_A; xmin.y = C.y; ymin.x = C.x; ymin.y = C.y - radius_A; xmax.x = C.x + radius_A; xmax.y = C.y; ymax.x = C.x; ymax.y = C.y + radius_A; /* Divide the circle into two parts, one on each side of a line joining p1 and p3. The circle extrema on the same side of that line as p2 is on, are also the extrema of the bbox. */ A2_side = lw_segment_side(A1, A3, A2); if ( A2_side == lw_segment_side(A1, A3, &xmin) ) gbox->xmin = xmin.x; if ( A2_side == lw_segment_side(A1, A3, &ymin) ) gbox->ymin = ymin.y; if ( A2_side == lw_segment_side(A1, A3, &xmax) ) gbox->xmax = xmax.x; if ( A2_side == lw_segment_side(A1, A3, &ymax) ) gbox->ymax = ymax.y; return LW_SUCCESS; } static int lw_arc_calculate_gbox_cartesian(const POINT4D *p1, const POINT4D *p2, const POINT4D *p3, GBOX *gbox) { int rv; LWDEBUG(2, "lw_arc_calculate_gbox_cartesian called."); rv = lw_arc_calculate_gbox_cartesian_2d((POINT2D*)p1, (POINT2D*)p2, (POINT2D*)p3, gbox); gbox->zmin = FP_MIN(p1->z, p3->z); gbox->mmin = FP_MIN(p1->m, p3->m); gbox->zmax = FP_MAX(p1->z, p3->z); gbox->mmax = FP_MAX(p1->m, p3->m); return rv; } int ptarray_calculate_gbox_cartesian(const POINTARRAY *pa, GBOX *gbox ) { int i; POINT4D p; int has_z, has_m; if ( ! pa ) return LW_FAILURE; if ( ! gbox ) return LW_FAILURE; if ( pa->npoints < 1 ) return LW_FAILURE; has_z = FLAGS_GET_Z(pa->flags); has_m = FLAGS_GET_M(pa->flags); gbox->flags = gflags(has_z, has_m, 0); LWDEBUGF(4, "ptarray_calculate_gbox Z: %d M: %d", has_z, has_m); getPoint4d_p(pa, 0, &p); gbox->xmin = gbox->xmax = p.x; gbox->ymin = gbox->ymax = p.y; if ( has_z ) gbox->zmin = gbox->zmax = p.z; if ( has_m ) gbox->mmin = gbox->mmax = p.m; for ( i = 1 ; i < pa->npoints; i++ ) { getPoint4d_p(pa, i, &p); gbox->xmin = FP_MIN(gbox->xmin, p.x); gbox->xmax = FP_MAX(gbox->xmax, p.x); gbox->ymin = FP_MIN(gbox->ymin, p.y); gbox->ymax = FP_MAX(gbox->ymax, p.y); if ( has_z ) { gbox->zmin = FP_MIN(gbox->zmin, p.z); gbox->zmax = FP_MAX(gbox->zmax, p.z); } if ( has_m ) { gbox->mmin = FP_MIN(gbox->mmin, p.m); gbox->mmax = FP_MAX(gbox->mmax, p.m); } } return LW_SUCCESS; } static int lwcircstring_calculate_gbox_cartesian(LWCIRCSTRING *curve, GBOX *gbox) { uint8_t flags = gflags(FLAGS_GET_Z(curve->flags), FLAGS_GET_M(curve->flags), 0); GBOX tmp; POINT4D p1, p2, p3; int i; if ( ! curve ) return LW_FAILURE; if ( curve->points->npoints < 3 ) return LW_FAILURE; tmp.flags = flags; /* Initialize */ gbox->xmin = gbox->ymin = gbox->zmin = gbox->mmin = MAXFLOAT; gbox->xmax = gbox->ymax = gbox->zmax = gbox->mmax = -1 * MAXFLOAT; for ( i = 2; i < curve->points->npoints; i += 2 ) { getPoint4d_p(curve->points, i-2, &p1); getPoint4d_p(curve->points, i-1, &p2); getPoint4d_p(curve->points, i, &p3); if (lw_arc_calculate_gbox_cartesian(&p1, &p2, &p3, &tmp) == LW_FAILURE) continue; gbox_merge(&tmp, gbox); } return LW_SUCCESS; } static int lwpoint_calculate_gbox_cartesian(LWPOINT *point, GBOX *gbox) { if ( ! point ) return LW_FAILURE; return ptarray_calculate_gbox_cartesian( point->point, gbox ); } static int lwline_calculate_gbox_cartesian(LWLINE *line, GBOX *gbox) { if ( ! line ) return LW_FAILURE; return ptarray_calculate_gbox_cartesian( line->points, gbox ); } static int lwtriangle_calculate_gbox_cartesian(LWTRIANGLE *triangle, GBOX *gbox) { if ( ! triangle ) return LW_FAILURE; return ptarray_calculate_gbox_cartesian( triangle->points, gbox ); } static int lwpoly_calculate_gbox_cartesian(LWPOLY *poly, GBOX *gbox) { if ( ! poly ) return LW_FAILURE; if ( poly->nrings == 0 ) return LW_FAILURE; /* Just need to check outer ring */ return ptarray_calculate_gbox_cartesian( poly->rings[0], gbox ); } static int lwcollection_calculate_gbox_cartesian(LWCOLLECTION *coll, GBOX *gbox) { GBOX subbox; int i; int result = LW_FAILURE; int first = LW_TRUE; assert(coll); if ( (coll->ngeoms == 0) || !gbox) return LW_FAILURE; subbox.flags = coll->flags; for ( i = 0; i < coll->ngeoms; i++ ) { if ( lwgeom_calculate_gbox_cartesian((LWGEOM*)(coll->geoms[i]), &subbox) == LW_SUCCESS ) { /* Keep a copy of the sub-bounding box for later if ( coll->geoms[i]->bbox ) lwfree(coll->geoms[i]->bbox); coll->geoms[i]->bbox = gbox_copy(&subbox); */ if ( first ) { gbox_duplicate(&subbox, gbox); first = LW_FALSE; } else { gbox_merge(&subbox, gbox); } result = LW_SUCCESS; } } return result; } int lwgeom_calculate_gbox_cartesian(const LWGEOM *lwgeom, GBOX *gbox) { if ( ! lwgeom ) return LW_FAILURE; LWDEBUGF(4, "lwgeom_calculate_gbox got type (%d) - %s", lwgeom->type, lwtype_name(lwgeom->type)); switch (lwgeom->type) { case POINTTYPE: return lwpoint_calculate_gbox_cartesian((LWPOINT *)lwgeom, gbox); case LINETYPE: return lwline_calculate_gbox_cartesian((LWLINE *)lwgeom, gbox); case CIRCSTRINGTYPE: return lwcircstring_calculate_gbox_cartesian((LWCIRCSTRING *)lwgeom, gbox); case POLYGONTYPE: return lwpoly_calculate_gbox_cartesian((LWPOLY *)lwgeom, gbox); case TRIANGLETYPE: return lwtriangle_calculate_gbox_cartesian((LWTRIANGLE *)lwgeom, gbox); case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTICURVETYPE: case MULTIPOLYGONTYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return lwcollection_calculate_gbox_cartesian((LWCOLLECTION *)lwgeom, gbox); } /* Never get here, please. */ lwerror("unsupported type (%d) - %s", lwgeom->type, lwtype_name(lwgeom->type)); return LW_FAILURE; } void gbox_float_round(GBOX *gbox) { gbox->xmin = next_float_down(gbox->xmin); gbox->xmax = next_float_up(gbox->xmax); gbox->ymin = next_float_down(gbox->ymin); gbox->ymax = next_float_up(gbox->ymax); if ( FLAGS_GET_M(gbox->flags) ) { gbox->mmin = next_float_down(gbox->mmin); gbox->mmax = next_float_up(gbox->mmax); } if ( FLAGS_GET_Z(gbox->flags) ) { gbox->zmin = next_float_down(gbox->zmin); gbox->zmax = next_float_up(gbox->zmax); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/�����������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015762� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_extension_helper.sql�������������������������������������0000644�0000000�0000000�00000010151�12304770217�023624� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: postgis_extension_helper.sql 12288 2014-03-03 03:01:35Z robe $ ---- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2011 Regina Obe <lr@pcorp.us> -- Copyright (C) 2005 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe <lr@pcorp.us> -- -- This is a suite of SQL helper functions for use during a PostGIS extension install/upgrade -- The functions get uninstalled after the extention install/upgrade process --------------------------- -- postgis_extension_remove_objects: This function removes objects of a particular class from an extension -- this is needed because there is no ALTER EXTENSION DROP FUNCTION/AGGREGATE command -- and we can't CREATE OR REPALCe functions whose signatures have changed and we can drop them if they are part of an extention -- So we use this to remove it from extension first before we drop CREATE OR REPLACE FUNCTION postgis_extension_remove_objects(param_extension text, param_type text) RETURNS boolean AS $$ DECLARE var_sql text := ''; var_r record; var_result boolean := false; var_class text := ''; var_is_aggregate boolean := false; var_sql_list text := ''; BEGIN var_class := CASE WHEN lower(param_type) = 'function' OR lower(param_type) = 'aggregate' THEN 'pg_proc' ELSE '' END; var_is_aggregate := CASE WHEN lower(param_type) = 'aggregate' THEN true ELSE false END; var_sql_list := 'SELECT ''ALTER EXTENSION '' || e.extname || '' DROP '' || $3 || '' '' || COALESCE(proc.proname || ''('' || oidvectortypes(proc.proargtypes) || '')'',typ.typname, cd.relname, op.oprname, cs.typname || '' AS '' || ct.typname || '') '', opcname, opfname) || '';'' AS remove_command FROM pg_depend As d INNER JOIN pg_extension As e ON d.refobjid = e.oid INNER JOIN pg_class As c ON c.oid = d.classid LEFT JOIN pg_proc AS proc ON proc.oid = d.objid LEFT JOIN pg_type AS typ ON typ.oid = d.objid LEFT JOIN pg_class As cd ON cd.oid = d.objid LEFT JOIN pg_operator As op ON op.oid = d.objid LEFT JOIN pg_cast AS ca ON ca.oid = d.objid LEFT JOIN pg_type AS cs ON ca.castsource = cs.oid LEFT JOIN pg_type AS ct ON ca.casttarget = ct.oid LEFT JOIN pg_opclass As oc ON oc.oid = d.objid LEFT JOIN pg_opfamily As ofa ON ofa.oid = d.objid WHERE d.deptype = ''e'' and e.extname = $1 and c.relname = $2 AND COALESCE(proc.proisagg, false) = $4;'; FOR var_r IN EXECUTE var_sql_list USING param_extension, var_class, param_type, var_is_aggregate LOOP var_sql := var_sql || var_r.remove_command || ';'; END LOOP; IF var_sql > '' THEN EXECUTE var_sql; var_result := true; END IF; RETURN var_result; END; $$ LANGUAGE plpgsql VOLATILE; CREATE OR REPLACE FUNCTION postgis_extension_drop_if_exists(param_extension text, param_statement text) RETURNS boolean AS $$ DECLARE var_sql_ext text := 'ALTER EXTENSION ' || quote_ident(param_extension) || ' ' || replace(param_statement, 'IF EXISTS', ''); var_result boolean := false; BEGIN BEGIN EXECUTE var_sql_ext; var_result := true; EXCEPTION WHEN OTHERS THEN --this is to allow ignoring if the object does not exist in extension var_result := false; END; RETURN var_result; END; $$ LANGUAGE plpgsql VOLATILE; CREATE OR REPLACE FUNCTION postgis_extension_AddToSearchPath(a_schema_name varchar) RETURNS text AS $$ DECLARE var_result text; var_cur_search_path text; BEGIN SELECT reset_val INTO var_cur_search_path FROM pg_settings WHERE name = 'search_path'; IF var_cur_search_path LIKE '%' || quote_ident(a_schema_name) || '%' THEN var_result := a_schema_name || ' already in database search_path'; ELSE EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) || ' SET search_path = ' || var_cur_search_path || ', ' || quote_ident(a_schema_name); var_result := a_schema_name || ' has been added to end of database search_path '; END IF; RETURN var_result; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�021406� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/postgis_topology.control������������������������0000644�0000000�0000000�00000000251�12315456245�026436� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# postgis topology extension comment = 'PostGIS topology spatial types and functions' default_version = '2.1.2' relocatable = false schema = topology requires = postgis �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/META.json���������������������������������������0000644�0000000�0000000�00000002177�12304770217�023036� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "postgis_topology", "abstract": "PostGIS 2.0 Topology OGC/SQL-MM compliant spatial extender for PostgreSQL", "description": "This module provides GIS Topology geometry types and functions", "version": "2.0.0", "release_status": "unstable", "maintainer": "PostGIS Steering Committee", "license": "gpl_2", "provides": { "postgis_raster": { "abstract": "PostGIS SQL/MM Topology types and functions", "version": "2.0.0", "file": "sql/postgis_topology.sql", "docfile": "doc/postgis.md" } } "prereqs": { "runtime": { "requires": { "plpgsql": 0, "PostgreSQL": "8.4.0", "postgis_core": "2.0.0" } } }, "generated_by": "Regina O. Obe", "resources": { "bugtracker": { "web": "http://trac.osgeo.org/postgis" }, "repository": { "url": "svn://svn.osgeo.org/postgis/", "web": "http://postgis.net", "type": "svn" } }, "meta-spec": { "version": "1.0.0", "url": "http://pgxn.org/meta/spec.txt" }, "tags": [ "gis", "spatial", "geometry", "location", "topology", "sql/mm" ] } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/doc/��������������������������������������������0000755�0000000�0000000�00000000000�12317530606�022153� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/doc/postgis.md����������������������������������0000644�0000000�0000000�00000000147�12304770217�024167� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS ============ Extensive documentation can be found at. HTML: http://postgis.net/documentation �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/postgis_topology.control.in���������������������0000644�0000000�0000000�00000000271�11722777314�027051� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# postgis topology extension comment = 'PostGIS topology spatial types and functions' default_version = '@POSTGIS_LIB_VERSION@' relocatable = false schema = topology requires = postgis ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/sql/��������������������������������������������0000755�0000000�0000000�00000000000�12315456214�022205� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/sql_bits/���������������������������������������0000755�0000000�0000000�00000000000�12315456214�023226� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/sql_bits/topology--unpackaged.sql.in������������0000644�0000000�0000000�00000023060�12315455225�030407� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ALTER EXTENSION postgis_topology ADD cast(topology.topogeometry as geometry); ALTER EXTENSION postgis_topology ADD function topology._asgmledge(integer,integer,integer,geometry,regclass,text,integer,integer,text,integer); ALTER EXTENSION postgis_topology ADD function topology._asgmlface(text,integer,regclass,text,integer,integer,text,integer); ALTER EXTENSION postgis_topology ADD function topology._asgmlnode(integer,geometry,text,integer,integer,text,integer); ALTER EXTENSION postgis_topology ADD function topology._st_addfacesplit(character varying,integer,integer,boolean); ALTER EXTENSION postgis_topology ADD function topology._st_adjacentedges(character varying,integer,integer); ALTER EXTENSION postgis_topology ADD function topology._st_mintolerance(character varying,geometry); ALTER EXTENSION postgis_topology ADD function topology._st_mintolerance(geometry); ALTER EXTENSION postgis_topology ADD function topology._st_remedgecheck(character varying,integer,integer,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.addedge(character varying,geometry); ALTER EXTENSION postgis_topology ADD function topology.addface(character varying,geometry,boolean); ALTER EXTENSION postgis_topology ADD function topology.addnode(character varying,geometry); ALTER EXTENSION postgis_topology ADD function topology.addnode(character varying,geometry,boolean,boolean); ALTER EXTENSION postgis_topology ADD function topology.addtopogeometrycolumn(character varying,character varying,character varying,character varying,character varying); ALTER EXTENSION postgis_topology ADD function topology.addtopogeometrycolumn(character varying,character varying,character varying,character varying,character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.addtosearchpath(character varying); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry,regclass); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry,regclass,text); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry,text); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry,text,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry,text,integer,integer,regclass); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry,text,integer,integer,regclass,text); ALTER EXTENSION postgis_topology ADD function topology.asgml(topology.topogeometry,text,integer,integer,regclass,text,integer); ALTER EXTENSION postgis_topology ADD function topology.astopojson(topology.topogeometry,regclass); ALTER EXTENSION postgis_topology ADD function topology.cleartopogeom(topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.copytopology(character varying,character varying); ALTER EXTENSION postgis_topology ADD function topology.createtopogeom(character varying,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.createtopogeom(character varying,integer,integer,topology.topoelementarray); ALTER EXTENSION postgis_topology ADD function topology.createtopology(character varying); ALTER EXTENSION postgis_topology ADD function topology.createtopology(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.createtopology(character varying,integer,double precision); ALTER EXTENSION postgis_topology ADD function topology.createtopology(character varying,integer,double precision,boolean); ALTER EXTENSION postgis_topology ADD function topology.droptopogeometrycolumn(character varying,character varying,character varying); ALTER EXTENSION postgis_topology ADD function topology.droptopology(character varying); ALTER EXTENSION postgis_topology ADD function topology.equals(topology.topogeometry,topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.geometry(topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.geometrytype(topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.getedgebypoint(character varying,geometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.getfacebypoint(character varying,geometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.getnodebypoint(character varying,geometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.getnodeedges(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.getringedges(character varying,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.gettopogeomelementarray(character varying,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.gettopogeomelementarray(topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.gettopogeomelements(character varying,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.gettopogeomelements(topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.gettopologyid(character varying); ALTER EXTENSION postgis_topology ADD function topology.gettopologyname(integer); ALTER EXTENSION postgis_topology ADD function topology.gettopologysrid(character varying); ALTER EXTENSION postgis_topology ADD function topology.intersects(topology.topogeometry,topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.layertrigger(); ALTER EXTENSION postgis_topology ADD function topology.polygonize(character varying); ALTER EXTENSION postgis_topology ADD function topology.postgis_topology_scripts_installed(); ALTER EXTENSION postgis_topology ADD function topology.relationtrigger(); ALTER EXTENSION postgis_topology ADD function topology.st_addedgemodface(character varying,integer,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_addedgenewfaces(character varying,integer,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_addisoedge(character varying,integer,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_addisonode(character varying,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_changeedgegeom(character varying,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_createtopogeo(character varying,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_geometrytype(topology.topogeometry); ALTER EXTENSION postgis_topology ADD function topology.st_getfaceedges(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.st_getfacegeometry(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.st_inittopogeo(character varying); ALTER EXTENSION postgis_topology ADD function topology.st_modedgeheal(character varying,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.st_modedgesplit(character varying,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_moveisonode(character varying,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_newedgeheal(character varying,integer,integer); ALTER EXTENSION postgis_topology ADD function topology.st_newedgessplit(character varying,integer,geometry); ALTER EXTENSION postgis_topology ADD function topology.st_remedgemodface(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.st_remedgenewface(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.st_remisonode(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.st_removeisoedge(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.st_removeisonode(character varying,integer); ALTER EXTENSION postgis_topology ADD function topology.st_simplify(topology.topogeometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.topoelementarray_agg(topology.topoelement); ALTER EXTENSION postgis_topology ADD function topology.topoelementarray_append(topology.topoelementarray,topology.topoelement); ALTER EXTENSION postgis_topology ADD function topology.topogeo_addgeometry(character varying,geometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.topogeo_addlinestring(character varying,geometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.topogeo_addpoint(character varying,geometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.topogeo_addpolygon(character varying,geometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.topologysummary(character varying); ALTER EXTENSION postgis_topology ADD function topology.totopogeom(geometry,character varying,integer,double precision); ALTER EXTENSION postgis_topology ADD function topology.totopogeom(geometry,topology.topogeometry,double precision); ALTER EXTENSION postgis_topology ADD function topology.validatetopology(character varying); ALTER EXTENSION postgis_topology ADD sequence topology.topology_id_seq; ALTER EXTENSION postgis_topology ADD table topology.layer; ALTER EXTENSION postgis_topology ADD table topology.topology; ALTER EXTENSION postgis_topology ADD type topology.getfaceedges_returntype; ALTER EXTENSION postgis_topology ADD type topology.topoelement; ALTER EXTENSION postgis_topology ADD type topology.topoelementarray; ALTER EXTENSION postgis_topology ADD type topology.topogeometry; ALTER EXTENSION postgis_topology ADD type topology.validatetopology_returntype; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/sql_bits/mark_editable_objects.sql.in�����������0000644�0000000�0000000�00000000165�11723356047�030657� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT pg_catalog.pg_extension_config_dump('topology', ''); SELECT pg_catalog.pg_extension_config_dump('layer', ''); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/sql_bits/remove_from_extension.sql.in�����������0000644�0000000�0000000�00000001473�12304770217�030775� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: remove_from_extension.sql.in 12288 2014-03-03 03:01:35Z robe $ ---- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2011 Regina Obe <lr@pcorp.us> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe <lr@pcorp.us> -- -- This drops extension helper functions -- and should be called at the end of the extension upgrade file -- removes all postgis_topology functions from postgis_topology extension since they will be readded -- during upgrade SELECT postgis_extension_remove_objects('postgis_topology', 'FUNCTION'); SELECT postgis_extension_remove_objects('postgis_topology', 'AGGREGATE'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_topology/Makefile.in�������������������������������������0000644�0000000�0000000�00000011167�12133266206�023457� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������include ../upgradeable_versions.mk EXTENSION = postgis_topology EXTVERSION = @POSTGIS_LIB_VERSION@ MINORVERSION = @POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ PGIS_MAJ_MIN=@POSTGIS_MAJOR_VERSION@@POSTGIS_MINOR_VERSION@ GREP=@GREP@ MICRO_NUMBER = $(shell echo $(EXTVERSION) | sed "s/[0-9]\.[0-9]\.\([0-9]*\)[a-zA-Z]*[0-9]*/\1/") PREREL_NUMBER = $(shell echo $(EXTVERSION) | \ sed "s/[0-9]\.[0-9]\.\(.*\)/\1/" | \ $(GREP) "[a-zA-Z]" | \ sed "s/[0-9][a-zA-Z]\([0-9]*\)[a-zA-Z]*/\1/") MICRO_PREV = $(shell if test "$(MICRO_NUMBER)x" != "x"; then expr $(MICRO_NUMBER) - 1; fi) PREREL_PREV = $(shell if test "$(PREREL_NUMBER)x" != "x"; then expr $(PREREL_NUMBER) - 1; fi) PREREL_PREFIX = $(shell echo $(EXTVERSION) | \ sed "s/[0-9]\.[0-9]\.\(.*\)/\1/" | \ $(GREP) "[a-zA-Z]" | \ sed "s/\([0-9][a-zA-Z]*\)[0-9]*/\1/") DATA = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql)) PG_CONFIG = @PG_CONFIG@ PG91 = $(shell $(PG_CONFIG) --version | $(GREP) -qE " 8\.| 9\.0" && echo no || echo yes) SQL_BITS = $(wildcard sql_bits/*.sql) EXTRA_CLEAN += sql/*.sql ${SQL_BITS} ifeq ($(PG91),yes) all: sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql sql/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql sql_minor_upgrade sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql mkdir -p sql cp $< $@ sql/$(EXTENSION).sql: sql_bits/topology.sql sql_bits/mark_editable_objects.sql.in sql_bits/topology_comments.sql mkdir -p sql cat $^ > $@ #this is a cludge to allow upgrading from same SVN to same SVN sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql: ../postgis_extension_helper.sql sql_bits/remove_from_extension.sql.in sql/topology_upgrade_minor.sql sql_bits/mark_editable_objects.sql.in sql_bits/topology_comments.sql ../postgis_extension_helper_uninstall.sql cat $^ > $@ sql/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql: ../postgis_extension_helper.sql sql_bits/remove_from_extension.sql.in sql/topology_upgrade_minor.sql sql_bits/mark_editable_objects.sql.in sql_bits/topology_comments.sql ../postgis_extension_helper_uninstall.sql cat $^ > $@ #strip BEGIN/COMMIT since these are not allowed in extensions #strip CREATE SCHEMA since we force extension # to create schema by setting schema to topology in control sql_bits/topology.sql: ../../topology/topology.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' -e '/^CREATE SCHEMA/d;' $< > $@ ../../doc/topology_comments.sql: $(MAKE) -C ../../doc comments sql_bits/topology_comments.sql: ../../doc/topology_comments.sql cp $< $@ #grep all lines that start with CREATE OR REPLACE FUNCTION, TRIGGER... #then replace CREATE OR REPLACE .. with ALTER EXTENSION..; #then remove default values and extra junk # sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql: ../../topology/topology.sql # sed -e '/^CREATE \(OR REPLACE\|TYPE\|TABLE\|VIEW\|CAST\)/!d;' \ # -e 's/OR REPLACE//g' \ # -e 's/CREATE\(.*\)/ALTER EXTENSION $(EXTENSION) ADD\1;/' \ # -e 's/DEFAULT [\.0-9a-zA-Z]\+//g' \ # -e 's/\(BEFORE\|WITH FUNCTION\)\(.*\)/;/' \ # -e 's/[ \t]+;/;/' \ # -e 's/(;/;/' \ # -e 's/\\(;/;/' \ # -e 's/;;/;/g' $< > $@ #hardcode for now using #the extensions/make_unpackaged.sql script form an install sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql: sql_bits/topology--unpackaged.sql.in mkdir -p sql cp $< $@ #upgrade script should have everything but table, schema, type creation/alter #NOTE: we assume all object definitions end in ; #first expression deletes all non-removable objects defined on same line #second deletes all non-removable defined on multiple lines # the end of the body of object we assume ends in ; #aggregates are special #they can be dropped but we need to remove #them from the extension first sql/topology_upgrade_minor.sql: ../../topology/topology_upgrade_$(PGIS_MAJ_MIN)_minor.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' -e '/^CREATE SCHEMA/d;' $< > $@ sql_minor_upgrade: ../postgis_extension_helper.sql sql_bits/remove_from_extension.sql.in sql/topology_upgrade_minor.sql sql_bits/mark_editable_objects.sql.in sql_bits/topology_comments.sql ../postgis_extension_helper_uninstall.sql for OLD_VERSION in $(UPGRADEABLE_VERSIONS); do \ cat $^ > sql/$(EXTENSION)--$$OLD_VERSION--$(EXTVERSION).sql; \ done DATA = $(wildcard sql/*--*.sql) EXTRA_CLEAN += sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql endif distclean: clean rm Makefile PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/compute_srid_contiguous_ranges.sql�������������������������������0000644�0000000�0000000�00000001643�11764371772�025036� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--this is the query to use to recompute what spatial_refs to exclude from backup --it computes the where clause to put in mark_editable_objects.sql.in WITH s AS -- our series (SELECT srid As n FROM spatial_ref_sys ), -- get start ranges (numbers where next is not next + 1) n1 AS (SELECT n AS start_n FROM s EXCEPT SELECT n + 1 AS start_n FROM s), -- for each start range find the next start range n2 AS (SELECT n1.start_n, lead(start_n) OVER (ORDER BY start_n) As next_set_n FROM n1 GROUP BY n1.start_n), -- determine end range for each start -- end range is the last number that is before start of next range n3 As (SELECT start_n, MAX(COALESCE(s.n,start_n)) As end_n FROM n2 LEFT JOIN s ON( s.n >= n2.start_n AND s.n < n2.next_set_n) GROUP BY start_n, next_set_n ORDER BY start_n) SELECT 'NOT (' || string_agg('srid BETWEEN ' || start_n || ' AND ' || end_n, ' OR ' ORDER BY start_n) || ') ' FROM n3 ;���������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/������������������������������������������0000755�0000000�0000000�00000000000�12317530606�022513� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/META.json���������������������������������0000644�0000000�0000000�00000002230�12304770217�024131� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "postgis_tiger_geocoder", "abstract": "PostGIS Tiger Geocoder", "description": "This module provides loader, geocoder, and reverse geocoder utilizing US Census Tiger data", "version": "2.1.0", "release_status": "unstable", "maintainer": "Leo Hsu and Regina Obe", "license": "gpl_2", "provides": { "postgis_tiger_geocoder": { "abstract": "PostGIS Geocoder functions", "version": "2.1.0", "file": "sql/postgis_tiger_geocoder.sql", "docfile": "doc/postgis_tiger_geocoder.md" } } "prereqs": { "runtime": { "requires": { "plpgsql": 0, "PostgreSQL": "8.4.0", "postgis": "2.0.0", "fuzzystrmatch": 0 } } }, "generated_by": "Regina O. Obe", "resources": { "bugtracker": { "web": "http://trac.osgeo.org/postgis" }, "repository": { "url": "svn://svn.osgeo.org/postgis/", "web": "http://postgis.net", "type": "svn" } }, "meta-spec": { "version": "1.0.0", "url": "http://pgxn.org/meta/spec.txt" }, "tags": [ "gis", "spatial", "geometry", "location", "tiger", "geocoder", "reverse geocoder" ] } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/doc/��������������������������������������0000755�0000000�0000000�00000000000�12317530606�023260� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/doc/postgis_tiger_geocoder.md�������������0000644�0000000�0000000�00000000140�12304770217�030326� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS ============ Extensive documentation can be found at. http://postgis.net/documentation ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control.in���������0000644�0000000�0000000�00000000321�12035376675�031262� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# postgis tiger geocoder extension comment = 'PostGIS tiger geocoder and reverse geocoder' default_version = '@POSTGIS_LIB_VERSION@' relocatable = false schema = tiger requires = 'postgis,fuzzystrmatch' ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control������������0000644�0000000�0000000�00000000301�12315456245�030644� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# postgis tiger geocoder extension comment = 'PostGIS tiger geocoder and reverse geocoder' default_version = '2.1.2' relocatable = false schema = tiger requires = 'postgis,fuzzystrmatch' �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/sql/��������������������������������������0000755�0000000�0000000�00000000000�12315456214�023312� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/sql_bits/���������������������������������0000755�0000000�0000000�00000000000�12315456214�024333� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/sql_bits/tiger_geocoder--unpackaged.sql.in0000644�0000000�0000000�00000020557�12315455225�032631� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ALTER EXTENSION postgis_tiger_geocoder ADD function count_words(character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function create_census_base_tables(); ALTER EXTENSION postgis_tiger_geocoder ADD function cull_null(character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function diff_zip(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function drop_dupe_featnames_generate_script(); ALTER EXTENSION postgis_tiger_geocoder ADD function drop_indexes_generate_script(text); ALTER EXTENSION postgis_tiger_geocoder ADD function drop_nation_tables_generate_script(text); ALTER EXTENSION postgis_tiger_geocoder ADD function drop_state_tables_generate_script(text,text); ALTER EXTENSION postgis_tiger_geocoder ADD function end_soundex(character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function geocode(character varying,integer,geometry); ALTER EXTENSION postgis_tiger_geocoder ADD function geocode(norm_addy,integer,geometry); ALTER EXTENSION postgis_tiger_geocoder ADD function geocode_address(norm_addy,integer,geometry); ALTER EXTENSION postgis_tiger_geocoder ADD function geocode_intersection(text,text,text,text,text,integer); ALTER EXTENSION postgis_tiger_geocoder ADD function geocode_location(norm_addy,geometry); ALTER EXTENSION postgis_tiger_geocoder ADD function get_geocode_setting(text); ALTER EXTENSION postgis_tiger_geocoder ADD function get_last_words(character varying,integer); ALTER EXTENSION postgis_tiger_geocoder ADD function get_tract(geometry,text); ALTER EXTENSION postgis_tiger_geocoder ADD function greatest_hn(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function includes_address(integer,integer,integer,integer,integer); ALTER EXTENSION postgis_tiger_geocoder ADD function install_geocode_settings(); ALTER EXTENSION postgis_tiger_geocoder ADD function install_missing_indexes(); ALTER EXTENSION postgis_tiger_geocoder ADD function install_pagc_tables(); ALTER EXTENSION postgis_tiger_geocoder ADD function interpolate_from_address(integer,character varying,character varying,geometry,character varying,double precision); ALTER EXTENSION postgis_tiger_geocoder ADD function is_pretype(text); ALTER EXTENSION postgis_tiger_geocoder ADD function least_hn(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function levenshtein_ignore_case(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function loader_generate_census_script(text[],text); ALTER EXTENSION postgis_tiger_geocoder ADD function loader_generate_nation_script(text); ALTER EXTENSION postgis_tiger_geocoder ADD function loader_generate_script(text[],text); ALTER EXTENSION postgis_tiger_geocoder ADD function loader_load_staged_data(text,text); ALTER EXTENSION postgis_tiger_geocoder ADD function loader_load_staged_data(text,text,text[]); ALTER EXTENSION postgis_tiger_geocoder ADD function loader_macro_replace(text,text[],text[]); ALTER EXTENSION postgis_tiger_geocoder ADD function location_extract(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function location_extract_countysub_exact(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function location_extract_countysub_fuzzy(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function location_extract_place_exact(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function location_extract_place_fuzzy(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function missing_indexes_generate_script(); ALTER EXTENSION postgis_tiger_geocoder ADD function normalize_address(character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function nullable_levenshtein(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function numeric_streets_equal(character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function pagc_normalize_address(character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function pprint_addy(norm_addy); ALTER EXTENSION postgis_tiger_geocoder ADD function rate_attributes(character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function rate_attributes(character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function reverse_geocode(geometry,boolean); ALTER EXTENSION postgis_tiger_geocoder ADD function set_geocode_setting(text,text); ALTER EXTENSION postgis_tiger_geocoder ADD function setsearchpathforinstall(character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function state_extract(character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function topology_load_tiger(character varying,character varying,character varying); ALTER EXTENSION postgis_tiger_geocoder ADD function utmzone(geometry); ALTER EXTENSION postgis_tiger_geocoder ADD function zip_range(text,integer,integer); ALTER EXTENSION postgis_tiger_geocoder ADD schema tiger_data; ALTER EXTENSION postgis_tiger_geocoder ADD sequence addr_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence addrfeat_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence bg_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence county_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence cousub_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence edges_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence faces_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence featnames_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence pagc_gaz_id_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence pagc_lex_id_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence pagc_rules_id_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence place_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence state_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence tabblock_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence tract_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD sequence zcta5_gid_seq; ALTER EXTENSION postgis_tiger_geocoder ADD table addr; ALTER EXTENSION postgis_tiger_geocoder ADD table addrfeat; ALTER EXTENSION postgis_tiger_geocoder ADD table bg; ALTER EXTENSION postgis_tiger_geocoder ADD table county; ALTER EXTENSION postgis_tiger_geocoder ADD table county_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table countysub_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table cousub; ALTER EXTENSION postgis_tiger_geocoder ADD table direction_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table edges; ALTER EXTENSION postgis_tiger_geocoder ADD table faces; ALTER EXTENSION postgis_tiger_geocoder ADD table featnames; ALTER EXTENSION postgis_tiger_geocoder ADD table geocode_settings; ALTER EXTENSION postgis_tiger_geocoder ADD table loader_lookuptables; ALTER EXTENSION postgis_tiger_geocoder ADD table loader_platform; ALTER EXTENSION postgis_tiger_geocoder ADD table loader_variables; ALTER EXTENSION postgis_tiger_geocoder ADD table pagc_gaz; ALTER EXTENSION postgis_tiger_geocoder ADD table pagc_lex; ALTER EXTENSION postgis_tiger_geocoder ADD table pagc_rules; ALTER EXTENSION postgis_tiger_geocoder ADD table place; ALTER EXTENSION postgis_tiger_geocoder ADD table place_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table secondary_unit_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table state; ALTER EXTENSION postgis_tiger_geocoder ADD table state_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table street_type_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table tabblock; ALTER EXTENSION postgis_tiger_geocoder ADD table tract; ALTER EXTENSION postgis_tiger_geocoder ADD table zcta5; ALTER EXTENSION postgis_tiger_geocoder ADD table zip_lookup; ALTER EXTENSION postgis_tiger_geocoder ADD table zip_lookup_all; ALTER EXTENSION postgis_tiger_geocoder ADD table zip_lookup_base; ALTER EXTENSION postgis_tiger_geocoder ADD table zip_state; ALTER EXTENSION postgis_tiger_geocoder ADD table zip_state_loc; ALTER EXTENSION postgis_tiger_geocoder ADD type norm_addy; �������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/sql_bits/add_search_path.sql.in�����������0000644�0000000�0000000�00000001212�12066577523�030560� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: add_search_path.sql.in 10934 2012-12-26 13:44:51Z robe $ ---- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2012 Regina Obe <lr@pcorp.us> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe <lr@pcorp.us> -- -- This adds the tiger schema to search path -- Functions in tiger are not schema qualified -- so this is needed for them to work SELECT postgis_extension_AddToSearchPath('tiger'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/sql_bits/mark_editable_objects.sql.in�����0000644�0000000�0000000�00000000466�12177230042�031756� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT pg_catalog.pg_extension_config_dump('geocode_settings', ''); SELECT pg_catalog.pg_extension_config_dump('pagc_gaz', 'WHERE is_custom=true'); SELECT pg_catalog.pg_extension_config_dump('pagc_lex', 'WHERE is_custom=true'); SELECT pg_catalog.pg_extension_config_dump('pagc_rules', 'WHERE is_custom=true'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/sql_bits/remove_from_extension.sql.in�����0000644�0000000�0000000�00000001535�12304770217�032101� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: remove_from_extension.sql.in 9324 2012-02-27 22:08:12Z pramsey $ ---- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2011 Regina Obe <lr@pcorp.us> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe <lr@pcorp.us> -- -- This drops extension helper functions -- and should be called at the end of the extension upgrade file -- removes all postgis_topology functions from postgis_topology extension since they will be readded -- during upgrade SELECT postgis_extension_remove_objects('postgis_tiger_geocoder', 'FUNCTION'); SELECT postgis_extension_remove_objects('postgis_tiger_geocoder', 'AGGREGATE'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/sql_bits/norm_addy_create.sql.in����������0000644�0000000�0000000�00000000421�12035377572�030765� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE TYPE norm_addy AS ( address INTEGER, preDirAbbrev VARCHAR, streetName VARCHAR, streetTypeAbbrev VARCHAR, postDirAbbrev VARCHAR, internal VARCHAR, location VARCHAR, stateAbbrev VARCHAR, zip VARCHAR, parsed BOOLEAN); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis_tiger_geocoder/Makefile.in�������������������������������0000644�0000000�0000000�00000022743�12254626357�024601� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������include ../upgradeable_versions.mk EXTENSION = postgis_tiger_geocoder EXTVERSION = @POSTGIS_LIB_VERSION@ MINORVERSION = 2011.@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ MICRO_NUMBER = $(shell echo $(EXTVERSION) | sed "s/[0-9]\.[0-9]\.\([0-9]*\)[a-zA-Z]*[0-9]*/\1/") PREREL_NUMBER = $(shell echo $(EXTVERSION) | \ sed "s/[0-9]\.[0-9]\.\(.*\)/\1/" | \ grep "[a-zA-Z]" | \ sed "s/[0-9][a-zA-Z]\([0-9]*\)[a-zA-Z]*/\1/") MICRO_PREV = $(shell if test "$(MICRO_NUMBER)x" != "x"; then expr $(MICRO_NUMBER) - 1; fi) PREREL_PREV = $(shell if test "$(PREREL_NUMBER)x" != "x"; then expr $(PREREL_NUMBER) - 1; fi) PREREL_PREFIX = $(shell echo $(EXTVERSION) | \ sed "s/[0-9]\.[0-9]\.\(.*\)/\1/" | \ grep "[a-zA-Z]" | \ sed "s/\([0-9][a-zA-Z]*\)[0-9]*/\1/") DATA = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql)) PG_CONFIG = @PG_CONFIG@ PG91 = $(shell $(PG_CONFIG) --version | grep -qE " 8\.| 9\.0" && echo no || echo yes) SQL_BITS = $(wildcard sql_bits/*.sql) EXTRA_CLEAN += sql/*.sql ${SQL_BITS} ifeq ($(PG91),yes) all: sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql sql/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql sql_minor_upgrade sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql mkdir -p sql cp $< $@ sql/$(EXTENSION).sql: sql_bits/tiger_geocoder.sql sql_bits/mark_editable_objects.sql.in sql_bits/tiger_geocoder_comments.sql mkdir -p sql cat $^ > $@ #this is a cludge to allow upgrading from same SVN to same SVN sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql: ../postgis_extension_helper.sql sql_bits/remove_from_extension.sql.in sql/tiger_geocoder_upgrade_minor.sql sql_bits/mark_editable_objects.sql.in sql_bits/tiger_geocoder_comments.sql ../postgis_extension_helper_uninstall.sql mkdir -p sql cat $^ > $@ sql/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql: sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql mkdir -p sql cp $< $@ #strip BEGIN/COMMIT since these are not allowed in extensions #strip CREATE SCHEMA since we force extension # to create schema by setting schema to tiger_geocoder in control sql_bits/tiger_geocoder_minor.sql.in: ../../extras/tiger_geocoder/tiger_2011/utility/set_search_path.sql \ ../../extras/tiger_geocoder/tiger_2011/tiger_loader_2013.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/utmzone.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/cull_null.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/nullable_levenshtein.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/levenshtein_ignore_case.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/end_soundex.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/count_words.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/state_extract.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/get_last_words.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_exact.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_fuzzy.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_place_exact.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_place_fuzzy.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/normalize_address.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/pprint_addy.sql \ ../../extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql \ ../../extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_normalize_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/other_helper_functions.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/rate_attributes.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/includes_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/interpolate_from_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode_location.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode_intersection.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/reverse_geocode.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/census_tracts_functions.sql cat $^ > $@ sql_bits/tiger_geocoder.sql.in: sql_bits/norm_addy_create.sql.in \ ../../extras/tiger_geocoder/tiger_2011/utility/set_search_path.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode_settings.sql \ ../../extras/tiger_geocoder/tiger_2011/tables/lookup_tables_2011.sql \ ../../extras/tiger_geocoder/tiger_2011/tiger_loader_2013.sql \ ../../extras/tiger_geocoder/tiger_2011/census_loader.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/set_search_path.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/utmzone.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/cull_null.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/nullable_levenshtein.sql \ ../../extras/tiger_geocoder/tiger_2011/utility/levenshtein_ignore_case.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/end_soundex.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/count_words.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/state_extract.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/get_last_words.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_exact.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_countysub_fuzzy.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_place_exact.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract_place_fuzzy.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/location_extract.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/normalize_address.sql \ ../../extras/tiger_geocoder/tiger_2011/normalize/pprint_addy.sql \ ../../extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_tables.sql \ ../../extras/tiger_geocoder/tiger_2011/pagc_normalize/pagc_normalize_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/other_helper_functions.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/rate_attributes.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/includes_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/interpolate_from_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode_address.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode_location.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode_intersection.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/geocode.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/reverse_geocode.sql \ ../../extras/tiger_geocoder/tiger_2011/geocode/census_tracts_functions.sql \ ../../extras/tiger_geocoder/tiger_2011/topology/tiger_topology_loader.sql \ ../postgis_extension_helper.sql \ sql_bits/add_search_path.sql \ ../postgis_extension_helper_uninstall.sql cat $^ > $@ sql_bits/tiger_geocoder.sql: sql_bits/tiger_geocoder.sql.in sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' -e '/^CREATE SCHEMA/d;' $< > $@ sql_bits/add_search_path.sql: sql_bits/add_search_path.sql.in cp $< $@ ../../doc/tiger_geocoder_comments.sql: $(MAKE) -C ../../doc comments sql_bits/tiger_geocoder_comments.sql: ../../doc/tiger_geocoder_comments.sql cp $< $@ #grep all lines that start with CREATE OR REPLACE FUNCTION, TRIGGER... #then replace CREATE OR REPLACE .. with ALTER EXTENSION..; #then remove default values and extra junk # sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql: ../../tiger_geocoder/tiger_geocoder.sql # sed -e '/^CREATE \(OR REPLACE\|TYPE\|TABLE\|VIEW\|CAST\)/!d;' \ # -e 's/OR REPLACE//g' \ # -e 's/CREATE\(.*\)/ALTER EXTENSION $(EXTENSION) ADD\1;/' \ # -e 's/DEFAULT [\.0-9a-zA-Z]\+//g' \ # -e 's/\(BEFORE\|WITH FUNCTION\)\(.*\)/;/' \ # -e 's/[ \t]+;/;/' \ # -e 's/(;/;/' \ # -e 's/\\(;/;/' \ # -e 's/;;/;/g' $< > $@ #hardcode for now using #the extensions/make_unpackaged.sql script form an install sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql: sql_bits/tiger_geocoder--unpackaged.sql.in mkdir -p sql cp $< $@ #upgrade script should have everything but table, schema, type creation/alter #NOTE: we assume all object definitions end in ; #first expression deletes all non-removable objects defined on same line #second deletes all non-removable defined on multiple lines # the end of the body of object we assume ends in ; #aggregates are special #they can be dropped but we need to remove #them from the extension first sql/tiger_geocoder_upgrade_minor.sql: sql_bits/tiger_geocoder_minor.sql.in mkdir -p sql sed -e '/^\(CREATE\|ALTER\) \(CAST\|TYPE\|TABLE\|SCHEMA\|DOMAIN\|TRIGGER\).*;/d' \ -e '/^\(CREATE\|ALTER\) \(CAST\|TYPE\|TABLE\|SCHEMA\|DOMAIN\|TRIGGER\)/,/\;/d' \ -e 's/BEGIN;//g' -e 's/COMMIT;//g' \ $< > $@ sql_minor_upgrade: ../postgis_extension_helper.sql sql_bits/remove_from_extension.sql.in sql/tiger_geocoder_upgrade_minor.sql sql_bits/mark_editable_objects.sql.in sql_bits/tiger_geocoder_comments.sql ../postgis_extension_helper_uninstall.sql for OLD_VERSION in $(UPGRADEABLE_VERSIONS); do \ cat $^ > sql/$(EXTENSION)--$$OLD_VERSION--$(EXTVERSION).sql; \ done DATA = $(wildcard sql/*--*.sql) EXTRA_CLEAN += sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql endif distclean: clean rm Makefile PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) �����������������������������postgis-2.1.2+dfsg.orig/extensions/opt_out.sh�������������������������������������������������������0000755�0000000�0000000�00000002256�12031617115�020011� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh test -n "$1" || { echo "Usage: $0 <dbname>" exit 1 } db="$1" psql -XtA ${db} <<'EOF' | psql -XtA ${db} -- for topology SELECT 'ALTER EXTENSION ' || extname || ' DROP ' || regexp_replace( regexp_replace(pg_catalog.pg_describe_object(d.classid, d.objid, 0), E'cast from (.*) to (.*)', E'cast\(\\1 as \\2\)'), E'(.*) for access method (.*)', E'\\1 using \\2') || ';' AS sqladd FROM pg_catalog.pg_depend AS d INNER JOIN pg_extension AS e ON (d.refobjid = e.oid) WHERE d.refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND deptype = 'e' AND e.extname = 'postgis_topology' ORDER BY sqladd; SELECT 'DROP EXTENSION postgis_topology;'; -- for postgis SELECT 'ALTER EXTENSION ' || extname || ' DROP ' || regexp_replace( regexp_replace(pg_catalog.pg_describe_object(d.classid, d.objid, 0), E'cast from (.*) to (.*)', E'cast\(\\1 as \\2\)'), E'(.*) for access method (.*)', E'\\1 using \\2') || ';' AS sqladd FROM pg_catalog.pg_depend AS d INNER JOIN pg_extension AS e ON (d.refobjid = e.oid) WHERE d.refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND deptype = 'e' AND e.extname = 'postgis' ORDER BY sqladd; SELECT 'DROP EXTENSION postgis;'; EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/make_unpackaged.sql����������������������������������������������0000644�0000000�0000000�00000002755�12066577523�021625� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- for postgis SELECT 'ALTER EXTENSION ' || extname || ' ADD ' || regexp_replace( regexp_replace(pg_catalog.pg_describe_object(d.classid, d.objid, 0), E'cast from (.*) to (.*)', E'cast\(\\1 as \\2\)'), E'(.*) for access method (.*)', E'\\1 using \\2') || ';' AS sqladd FROM pg_catalog.pg_depend AS d INNER JOIN pg_extension AS e ON (d.refobjid = e.oid) WHERE d.refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND deptype = 'e' AND e.extname = 'postgis' ORDER BY sqladd; -- for topology SELECT 'ALTER EXTENSION ' || extname || ' ADD ' || regexp_replace( regexp_replace(pg_catalog.pg_describe_object(d.classid, d.objid, 0), E'cast from (.*) to (.*)', E'cast\(\\1 as \\2\)'), E'(.*) for access method (.*)', E'\\1 using \\2') || ';' AS sqladd FROM pg_catalog.pg_depend AS d INNER JOIN pg_extension AS e ON (d.refobjid = e.oid) WHERE d.refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND deptype = 'e' AND e.extname = 'postgis_topology' ORDER BY sqladd; -- for postgis tiger geocoder SELECT 'ALTER EXTENSION ' || extname || ' ADD ' || regexp_replace( regexp_replace(pg_catalog.pg_describe_object(d.classid, d.objid, 0), E'cast from (.*) to (.*)', E'cast\(\\1 as \\2\)'), E'(.*) for access method (.*)', E'\\1 using \\2') || ';' AS sqladd FROM pg_catalog.pg_depend AS d INNER JOIN pg_extension AS e ON (d.refobjid = e.oid) WHERE d.refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND deptype = 'e' AND e.extname = 'postgis_tiger_geocoder' ORDER BY sqladd; �������������������postgis-2.1.2+dfsg.orig/extensions/postgis_extension_helper_uninstall.sql���������������������������0000644�0000000�0000000�00000001354�12304770217�025722� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: postgis_extension_helper_uninstall.sql 12288 2014-03-03 03:01:35Z robe $ ---- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2011 Regina Obe <lr@pcorp.us> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe <lr@pcorp.us> -- -- This drops extension helper functions -- and should be called at the end of the extension upgrade file DROP FUNCTION postgis_extension_remove_objects(text, text); DROP FUNCTION postgis_extension_drop_if_exists(text, text); DROP FUNCTION postgis_extension_AddToSearchPath(varchar); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/README�����������������������������������������������������������0000644�0000000�0000000�00000003657�11734351360�016655� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS Extension for PostgreSQL ================================ PostgreSQL 9.1 (and up) supports PostGIS extensions. A database can easily be extended to use PostGIS using the syntax:: CREATE EXTENSION postgis; -- Includes raster CREATE EXTENSION postgis_topology; -- Depends on postgis Requirements ------------ * PostgreSQL 9.1 or later * PostGIS must be configured and built ``--with-raster`` Building and installing ----------------------- First, make sure you follow the regular configuration and installation steps, completing these steps:: make make install If you are building from the source SVN repository, it is also recommended to make the comments, since the function descriptions will be included:: make comments Making the comments is not necessary if you are building from the tar.gz source distributions, since these include pre-built ``postgis_comments.sql``, ``topology_comments.sql``, and ``raster_comments.sql`` files. Then, to build and install the extensions:: cd extensions make make install The extensions are installed in `SHAREDIR/extension`. (If you're uncertain where `SHAREDIR` is, run ``pg_config --sharedir``.) Then in your PostgreSQL database run:: CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; The dependency logic should warn if you try to install ``postgis_topology`` without ``postgis`` or try to drop ``postgis`` without first dropping ``postgis_topology``. You will also not be able to drop any PostGIS functions installed by the extension. Manual extension installation ----------------------------- If you want to manually install the extensions from one server to another, just copy over the following files to the `SHAREDIR/extension` directory: * PostGIS (including raster); from ``extensions/postgis``: ``postgis.control`` ``sql/*`` * Topology extension; from ``extensions/postgis_topolology``: ``postgis_topology.control`` ``sql/*`` ���������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/Makefile.in������������������������������������������������������0000644�0000000�0000000�00000001455�12035376675�020047� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # # Master makefile used to build extensions # Copyright (C) 2012 Regina Obe and Leo Hsu <lr@pcorp.us> # Copyright (C) 2012 Sandro Santilli <strk@keybit.net> # # This is free software; you can redistribute and/or modify it under # the terms of the GNU General Public Licence. See the COPYING file. # ############################################################################# SUBDIRS = postgis SUBDIRS += postgis_tiger_geocoder ifeq (@TOPOLOGY@,topology) SUBDIRS += postgis_topology endif all clean distclean install uninstall: for DIR in $(SUBDIRS); do \ echo "---- Making $@ in $${DIR}"; \ $(MAKE) -C "$${DIR}" $@; \ done distclean: distclean-local distclean-local: rm -f Makefile check: @echo "Nothing to check" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/upgradeable_versions.mk������������������������������������������0000644�0000000�0000000�00000000466�12315266145�022526� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������UPGRADEABLE_VERSIONS = \ 2.0.0 \ 2.0.1 \ 2.0.2 \ 2.0.3 \ 2.0.4 \ 2.1.0rc1 \ 2.1.0rc2 \ 2.1.0rc3 \ 2.1.0 \ 2.1.1 UPGRADEABLE_VERSIONS_MINOR = \ 2.0.0 \ 2.0.1 \ 2.0.2 \ 2.0.3 \ 2.0.4 UPGRADEABLE_VERSIONS_PATCH = \ 2.1.0rc1 \ 2.1.0rc2 \ 2.1.0rc3 \ 2.1.0 \ 2.1.1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/���������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017452� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/META.json������������������������������������������������0000644�0000000�0000000�00000002770�12304770217�021101� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "postgis", "abstract": "PostGIS 2.0 OGC/SQL-MM compliant spatial extender for PostgreSQL", "description": "This module provides GIS geometry, geography, raster types, functions, and tables", "version": "2.0.0a1", "release_status": "unstable", "maintainer": "PostGIS Steering Committee", "license": "gpl_2", "provides": { "postgis": { "abstract": "PostGIS GIS types, indexes and functions", "version": "2.0.0", "file": "sql/postgis.sql", "docfile": "doc/postgis.md" }, "spatial_ref_sys": { "file": "sql/spatial_ref_sys.sql", "version": "2.0.0", "abstract": "Directory of spatial reference systems needed for geometry transformation between different spatial reference systems" }, "raster": { "file": "sql/rtpostgis.sql", "version": "2.0.0", "abstract": "Raster functions and types" } }, "prereqs": { "runtime": { "requires": { "plpgsql": 0, "PostgreSQL": "8.4.0" } } }, "generated_by": "Regina O. Obe", "resources": { "bugtracker": { "web": "http://trac.osgeo.org/postgis" }, "repository": { "url": "svn://svn.osgeo.org/postgis/", "web": "http://postgis.net", "type": "svn" } }, "meta-spec": { "version": "1.0.0", "url": "http://pgxn.org/meta/spec.txt" }, "tags": [ "gis", "spatial", "geometry","raster", "geography", "location" ] } ��������postgis-2.1.2+dfsg.orig/extensions/postgis/doc/�����������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020217� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/doc/postgis.md�������������������������������������������0000644�0000000�0000000�00000000140�12304770217�022224� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS ============ Extensive documentation can be found at. http://postgis.net/documentation ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/sql/�����������������������������������������������������0000755�0000000�0000000�00000000000�12315456214�020251� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/postgis.control.in���������������������������������������0000644�0000000�0000000�00000000365�11722777314�023165� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# postgis extension comment = 'PostGIS geometry, geography, and raster spatial types and functions' default_version = '@POSTGIS_LIB_VERSION@' module_pathname = '$libdir/postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@' relocatable = true ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/postgis.control������������������������������������������0000644�0000000�0000000�00000000271�12315456244�022547� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# postgis extension comment = 'PostGIS geometry, geography, and raster spatial types and functions' default_version = '2.1.2' module_pathname = '$libdir/postgis-2.1' relocatable = true ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/sql_bits/������������������������������������������������0000755�0000000�0000000�00000000000�12315456214�021272� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/sql_bits/postgis--unpackaged.sql.in����������������������0000644�0000000�0000000�00000267174�12315455225�026307� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ALTER EXTENSION postgis ADD cast(box2d as box3d); ALTER EXTENSION postgis ADD cast(box2d as geometry); ALTER EXTENSION postgis ADD cast(box3d as box); ALTER EXTENSION postgis ADD cast(box3d as box2d); ALTER EXTENSION postgis ADD cast(box3d as geometry); ALTER EXTENSION postgis ADD cast(bytea as geography); ALTER EXTENSION postgis ADD cast(bytea as geometry); ALTER EXTENSION postgis ADD cast(geography as bytea); ALTER EXTENSION postgis ADD cast(geography as geography); ALTER EXTENSION postgis ADD cast(geography as geometry); ALTER EXTENSION postgis ADD cast(geometry as box); ALTER EXTENSION postgis ADD cast(geometry as box2d); ALTER EXTENSION postgis ADD cast(geometry as box3d); ALTER EXTENSION postgis ADD cast(geometry as bytea); ALTER EXTENSION postgis ADD cast(geometry as geography); ALTER EXTENSION postgis ADD cast(geometry as geometry); ALTER EXTENSION postgis ADD cast(geometry as path); ALTER EXTENSION postgis ADD cast(geometry as point); ALTER EXTENSION postgis ADD cast(geometry as polygon); ALTER EXTENSION postgis ADD cast(geometry as text); ALTER EXTENSION postgis ADD cast(path as geometry); ALTER EXTENSION postgis ADD cast(point as geometry); ALTER EXTENSION postgis ADD cast(polygon as geometry); ALTER EXTENSION postgis ADD cast(raster as box3d); ALTER EXTENSION postgis ADD cast(raster as bytea); ALTER EXTENSION postgis ADD cast(raster as geometry); ALTER EXTENSION postgis ADD cast(text as geometry); ALTER EXTENSION postgis ADD function _add_overview_constraint(name,name,name,name,name,name,integer); ALTER EXTENSION postgis ADD function _add_raster_constraint(name,text); ALTER EXTENSION postgis ADD function _add_raster_constraint_alignment(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_blocksize(name,name,name,text); ALTER EXTENSION postgis ADD function _add_raster_constraint_coverage_tile(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_extent(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_nodata_values(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_num_bands(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_out_db(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_pixel_types(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_scale(name,name,name,character); ALTER EXTENSION postgis ADD function _add_raster_constraint_spatially_unique(name,name,name); ALTER EXTENSION postgis ADD function _add_raster_constraint_srid(name,name,name); ALTER EXTENSION postgis ADD function _drop_overview_constraint(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_alignment(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_blocksize(name,name,name,text); ALTER EXTENSION postgis ADD function _drop_raster_constraint_coverage_tile(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_extent(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_nodata_values(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_num_bands(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_out_db(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_pixel_types(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_regular_blocking(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_scale(name,name,name,character); ALTER EXTENSION postgis ADD function _drop_raster_constraint_spatially_unique(name,name,name); ALTER EXTENSION postgis ADD function _drop_raster_constraint_srid(name,name,name); ALTER EXTENSION postgis ADD function _overview_constraint(raster,integer,name,name,name); ALTER EXTENSION postgis ADD function _overview_constraint_info(name,name,name); ALTER EXTENSION postgis ADD function _postgis_deprecate(text,text,text); ALTER EXTENSION postgis ADD function _postgis_join_selectivity(regclass,text,regclass,text,text); ALTER EXTENSION postgis ADD function _postgis_selectivity(regclass,text,geometry,text); ALTER EXTENSION postgis ADD function _postgis_stats(regclass,text,text); ALTER EXTENSION postgis ADD function _raster_constraint_info_alignment(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_blocksize(name,name,name,text); ALTER EXTENSION postgis ADD function _raster_constraint_info_coverage_tile(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_extent(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_nodata_values(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_num_bands(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_out_db(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_pixel_types(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_regular_blocking(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_scale(name,name,name,character); ALTER EXTENSION postgis ADD function _raster_constraint_info_spatially_unique(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_info_srid(name,name,name); ALTER EXTENSION postgis ADD function _raster_constraint_nodata_values(raster); ALTER EXTENSION postgis ADD function _raster_constraint_out_db(raster); ALTER EXTENSION postgis ADD function _raster_constraint_pixel_types(raster); ALTER EXTENSION postgis ADD function _st_3ddfullywithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function _st_3ddwithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function _st_3dintersects(geometry,geometry); ALTER EXTENSION postgis ADD function _st_asgeojson(integer,geography,integer,integer); ALTER EXTENSION postgis ADD function _st_asgeojson(integer,geometry,integer,integer); ALTER EXTENSION postgis ADD function _st_asgml(integer,geography,integer,integer,text,text); ALTER EXTENSION postgis ADD function _st_asgml(integer,geometry,integer,integer,text,text); ALTER EXTENSION postgis ADD function _st_askml(integer,geography,integer,text); ALTER EXTENSION postgis ADD function _st_askml(integer,geometry,integer,text); ALTER EXTENSION postgis ADD function _st_aspect4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function _st_asraster(geometry,double precision,double precision,integer,integer,text[],double precision[],double precision[],double precision,double precision,double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function _st_asx3d(integer,geometry,integer,integer,text); ALTER EXTENSION postgis ADD function _st_bestsrid(geography); ALTER EXTENSION postgis ADD function _st_bestsrid(geography,geography); ALTER EXTENSION postgis ADD function _st_buffer(geometry,double precision,cstring); ALTER EXTENSION postgis ADD function _st_colormap(raster,integer,text,text); ALTER EXTENSION postgis ADD function _st_concavehull(geometry); ALTER EXTENSION postgis ADD function _st_contains(geometry,geometry); ALTER EXTENSION postgis ADD function _st_contains(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_containsproperly(geometry,geometry); ALTER EXTENSION postgis ADD function _st_containsproperly(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_convertarray4ma(double precision[]); ALTER EXTENSION postgis ADD function _st_count(raster,integer,boolean,double precision); ALTER EXTENSION postgis ADD function _st_count(text,text,integer,boolean,double precision); ALTER EXTENSION postgis ADD function _st_coveredby(geometry,geometry); ALTER EXTENSION postgis ADD function _st_coveredby(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_covers(geography,geography); ALTER EXTENSION postgis ADD function _st_covers(geometry,geometry); ALTER EXTENSION postgis ADD function _st_covers(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_crosses(geometry,geometry); ALTER EXTENSION postgis ADD function _st_dfullywithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function _st_dfullywithin(raster,integer,raster,integer,double precision); ALTER EXTENSION postgis ADD function _st_distance(geography,geography,double precision,boolean); ALTER EXTENSION postgis ADD function _st_distancetree(geography,geography); ALTER EXTENSION postgis ADD function _st_distancetree(geography,geography,double precision,boolean); ALTER EXTENSION postgis ADD function _st_distanceuncached(geography,geography); ALTER EXTENSION postgis ADD function _st_distanceuncached(geography,geography,boolean); ALTER EXTENSION postgis ADD function _st_distanceuncached(geography,geography,double precision,boolean); ALTER EXTENSION postgis ADD function _st_dumppoints(geometry,integer[]); ALTER EXTENSION postgis ADD function _st_dwithin(geography,geography,double precision,boolean); ALTER EXTENSION postgis ADD function _st_dwithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function _st_dwithin(raster,integer,raster,integer,double precision); ALTER EXTENSION postgis ADD function _st_dwithinuncached(geography,geography,double precision); ALTER EXTENSION postgis ADD function _st_dwithinuncached(geography,geography,double precision,boolean); ALTER EXTENSION postgis ADD function _st_equals(geometry,geometry); ALTER EXTENSION postgis ADD function _st_expand(geography,double precision); ALTER EXTENSION postgis ADD function _st_gdalwarp(raster,text,double precision,integer,double precision,double precision,double precision,double precision,double precision,double precision,integer,integer); ALTER EXTENSION postgis ADD function _st_geomfromgml(text,integer); ALTER EXTENSION postgis ADD function _st_hillshade4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function _st_histogram(raster,integer,boolean,double precision,integer,double precision[],boolean,double precision,double precision); ALTER EXTENSION postgis ADD function _st_histogram(text,text,integer,boolean,double precision,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function _st_intersects(geometry,geometry); ALTER EXTENSION postgis ADD function _st_intersects(geometry,raster,integer); ALTER EXTENSION postgis ADD function _st_intersects(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_linecrossingdirection(geometry,geometry); ALTER EXTENSION postgis ADD function _st_longestline(geometry,geometry); ALTER EXTENSION postgis ADD function _st_mapalgebra(rastbandarg[],regprocedure,text,integer,integer,text,raster,text[]); ALTER EXTENSION postgis ADD function _st_mapalgebra(rastbandarg[],text,text,text,text,text,double precision); ALTER EXTENSION postgis ADD function _st_maxdistance(geometry,geometry); ALTER EXTENSION postgis ADD function _st_neighborhood(raster,integer,integer,integer,integer,integer,boolean); ALTER EXTENSION postgis ADD function _st_orderingequals(geometry,geometry); ALTER EXTENSION postgis ADD function _st_overlaps(geometry,geometry); ALTER EXTENSION postgis ADD function _st_overlaps(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_pixelaspolygons(raster,integer,integer,integer,boolean); ALTER EXTENSION postgis ADD function _st_pointoutside(geography); ALTER EXTENSION postgis ADD function _st_quantile(raster,integer,boolean,double precision,double precision[]); ALTER EXTENSION postgis ADD function _st_quantile(text,text,integer,boolean,double precision,double precision[]); ALTER EXTENSION postgis ADD function _st_rastertoworldcoord(raster,integer,integer); ALTER EXTENSION postgis ADD function _st_reclass(raster,reclassarg[]); ALTER EXTENSION postgis ADD function _st_roughness4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function _st_samealignment_finalfn(agg_samealignment); ALTER EXTENSION postgis ADD function _st_samealignment_transfn(agg_samealignment,raster); ALTER EXTENSION postgis ADD function _st_setvalues(raster,integer,integer,integer,double precision[],boolean[],boolean,double precision,boolean); ALTER EXTENSION postgis ADD function _st_slope4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function _st_summarystats(raster,integer,boolean,double precision); ALTER EXTENSION postgis ADD function _st_summarystats(text,text,integer,boolean,double precision); ALTER EXTENSION postgis ADD function _st_tile(raster,integer,integer,integer[],boolean,double precision); ALTER EXTENSION postgis ADD function _st_touches(geometry,geometry); ALTER EXTENSION postgis ADD function _st_touches(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_tpi4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function _st_tri4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function _st_union_finalfn(internal); ALTER EXTENSION postgis ADD function _st_union_transfn(internal,raster); ALTER EXTENSION postgis ADD function _st_union_transfn(internal,raster,integer); ALTER EXTENSION postgis ADD function _st_union_transfn(internal,raster,integer,text); ALTER EXTENSION postgis ADD function _st_union_transfn(internal,raster,text); ALTER EXTENSION postgis ADD function _st_union_transfn(internal,raster,unionarg[]); ALTER EXTENSION postgis ADD function _st_valuecount(raster,integer,boolean,double precision[],double precision); ALTER EXTENSION postgis ADD function _st_valuecount(text,text,integer,boolean,double precision[],double precision); ALTER EXTENSION postgis ADD function _st_within(geometry,geometry); ALTER EXTENSION postgis ADD function _st_within(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function _st_worldtorastercoord(raster,double precision,double precision); ALTER EXTENSION postgis ADD function _updaterastersrid(name,name,name,integer); ALTER EXTENSION postgis ADD function addauth(text); ALTER EXTENSION postgis ADD function addgeometrycolumn(character varying,character varying,character varying,character varying,integer,character varying,integer,boolean); ALTER EXTENSION postgis ADD function addgeometrycolumn(character varying,character varying,character varying,integer,character varying,integer,boolean); ALTER EXTENSION postgis ADD function addgeometrycolumn(character varying,character varying,integer,character varying,integer,boolean); ALTER EXTENSION postgis ADD function addoverviewconstraints(name,name,name,name,integer); ALTER EXTENSION postgis ADD function addoverviewconstraints(name,name,name,name,name,name,integer); ALTER EXTENSION postgis ADD function addrasterconstraints(name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean); ALTER EXTENSION postgis ADD function addrasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean); ALTER EXTENSION postgis ADD function addrasterconstraints(name,name,name,text[]); ALTER EXTENSION postgis ADD function addrasterconstraints(name,name,text[]); ALTER EXTENSION postgis ADD function box(box3d); ALTER EXTENSION postgis ADD function box(geometry); ALTER EXTENSION postgis ADD function box2d(box3d); ALTER EXTENSION postgis ADD function box2d(geometry); ALTER EXTENSION postgis ADD function box2d_in(cstring); ALTER EXTENSION postgis ADD function box2d_out(box2d); ALTER EXTENSION postgis ADD function box2df_in(cstring); ALTER EXTENSION postgis ADD function box2df_out(box2df); ALTER EXTENSION postgis ADD function box3d(box2d); ALTER EXTENSION postgis ADD function box3d(geometry); ALTER EXTENSION postgis ADD function box3d(raster); ALTER EXTENSION postgis ADD function box3d_in(cstring); ALTER EXTENSION postgis ADD function box3d_out(box3d); ALTER EXTENSION postgis ADD function box3dtobox(box3d); ALTER EXTENSION postgis ADD function bytea(geography); ALTER EXTENSION postgis ADD function bytea(geometry); ALTER EXTENSION postgis ADD function bytea(raster); ALTER EXTENSION postgis ADD function checkauth(text,text); ALTER EXTENSION postgis ADD function checkauth(text,text,text); ALTER EXTENSION postgis ADD function checkauthtrigger(); ALTER EXTENSION postgis ADD function disablelongtransactions(); ALTER EXTENSION postgis ADD function dropgeometrycolumn(character varying,character varying); ALTER EXTENSION postgis ADD function dropgeometrycolumn(character varying,character varying,character varying); ALTER EXTENSION postgis ADD function dropgeometrycolumn(character varying,character varying,character varying,character varying); ALTER EXTENSION postgis ADD function dropgeometrytable(character varying); ALTER EXTENSION postgis ADD function dropgeometrytable(character varying,character varying); ALTER EXTENSION postgis ADD function dropgeometrytable(character varying,character varying,character varying); ALTER EXTENSION postgis ADD function dropoverviewconstraints(name,name); ALTER EXTENSION postgis ADD function dropoverviewconstraints(name,name,name); ALTER EXTENSION postgis ADD function droprasterconstraints(name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean); ALTER EXTENSION postgis ADD function droprasterconstraints(name,name,name,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean,boolean); ALTER EXTENSION postgis ADD function droprasterconstraints(name,name,name,text[]); ALTER EXTENSION postgis ADD function droprasterconstraints(name,name,text[]); ALTER EXTENSION postgis ADD function enablelongtransactions(); ALTER EXTENSION postgis ADD function equals(geometry,geometry); ALTER EXTENSION postgis ADD function find_srid(character varying,character varying,character varying); ALTER EXTENSION postgis ADD function geography(bytea); ALTER EXTENSION postgis ADD function geography(geography,integer,boolean); ALTER EXTENSION postgis ADD function geography(geometry); ALTER EXTENSION postgis ADD function geography_analyze(internal); ALTER EXTENSION postgis ADD function geography_cmp(geography,geography); ALTER EXTENSION postgis ADD function geography_eq(geography,geography); ALTER EXTENSION postgis ADD function geography_ge(geography,geography); ALTER EXTENSION postgis ADD function geography_gist_compress(internal); ALTER EXTENSION postgis ADD function geography_gist_consistent(internal,geography,integer); ALTER EXTENSION postgis ADD function geography_gist_decompress(internal); ALTER EXTENSION postgis ADD function geography_gist_penalty(internal,internal,internal); ALTER EXTENSION postgis ADD function geography_gist_picksplit(internal,internal); ALTER EXTENSION postgis ADD function geography_gist_same(box2d,box2d,internal); ALTER EXTENSION postgis ADD function geography_gist_union(bytea,internal); ALTER EXTENSION postgis ADD function geography_gt(geography,geography); ALTER EXTENSION postgis ADD function geography_in(cstring,oid,integer); ALTER EXTENSION postgis ADD function geography_le(geography,geography); ALTER EXTENSION postgis ADD function geography_lt(geography,geography); ALTER EXTENSION postgis ADD function geography_out(geography); ALTER EXTENSION postgis ADD function geography_overlaps(geography,geography); ALTER EXTENSION postgis ADD function geography_recv(internal,oid,integer); ALTER EXTENSION postgis ADD function geography_send(geography); ALTER EXTENSION postgis ADD function geography_typmod_in(cstring[]); ALTER EXTENSION postgis ADD function geography_typmod_out(integer); ALTER EXTENSION postgis ADD function geometry(box2d); ALTER EXTENSION postgis ADD function geometry(box3d); ALTER EXTENSION postgis ADD function geometry(bytea); ALTER EXTENSION postgis ADD function geometry(geography); ALTER EXTENSION postgis ADD function geometry(geometry,integer,boolean); ALTER EXTENSION postgis ADD function geometry(path); ALTER EXTENSION postgis ADD function geometry(point); ALTER EXTENSION postgis ADD function geometry(polygon); ALTER EXTENSION postgis ADD function geometry(text); ALTER EXTENSION postgis ADD function geometry_above(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_analyze(internal); ALTER EXTENSION postgis ADD function geometry_below(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_cmp(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_contained_by_raster(geometry,raster); ALTER EXTENSION postgis ADD function geometry_contains(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_distance_box(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_distance_centroid(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_eq(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_ge(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_gist_compress_2d(internal); ALTER EXTENSION postgis ADD function geometry_gist_compress_nd(internal); ALTER EXTENSION postgis ADD function geometry_gist_consistent_2d(internal,geometry,integer); ALTER EXTENSION postgis ADD function geometry_gist_consistent_nd(internal,geometry,integer); ALTER EXTENSION postgis ADD function geometry_gist_decompress_2d(internal); ALTER EXTENSION postgis ADD function geometry_gist_decompress_nd(internal); ALTER EXTENSION postgis ADD function geometry_gist_distance_2d(internal,geometry,integer); ALTER EXTENSION postgis ADD function geometry_gist_penalty_2d(internal,internal,internal); ALTER EXTENSION postgis ADD function geometry_gist_penalty_nd(internal,internal,internal); ALTER EXTENSION postgis ADD function geometry_gist_picksplit_2d(internal,internal); ALTER EXTENSION postgis ADD function geometry_gist_picksplit_nd(internal,internal); ALTER EXTENSION postgis ADD function geometry_gist_same_2d(geometry,geometry,internal); ALTER EXTENSION postgis ADD function geometry_gist_same_nd(geometry,geometry,internal); ALTER EXTENSION postgis ADD function geometry_gist_union_2d(bytea,internal); ALTER EXTENSION postgis ADD function geometry_gist_union_nd(bytea,internal); ALTER EXTENSION postgis ADD function geometry_gt(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_in(cstring); ALTER EXTENSION postgis ADD function geometry_le(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_left(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_lt(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_out(geometry); ALTER EXTENSION postgis ADD function geometry_overabove(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_overbelow(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_overlaps(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_overlaps_nd(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_overleft(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_overright(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_raster_contain(geometry,raster); ALTER EXTENSION postgis ADD function geometry_raster_overlap(geometry,raster); ALTER EXTENSION postgis ADD function geometry_recv(internal); ALTER EXTENSION postgis ADD function geometry_right(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_same(geometry,geometry); ALTER EXTENSION postgis ADD function geometry_send(geometry); ALTER EXTENSION postgis ADD function geometry_typmod_in(cstring[]); ALTER EXTENSION postgis ADD function geometry_typmod_out(integer); ALTER EXTENSION postgis ADD function geometry_within(geometry,geometry); ALTER EXTENSION postgis ADD function geometrytype(geography); ALTER EXTENSION postgis ADD function geometrytype(geometry); ALTER EXTENSION postgis ADD function geomfromewkb(bytea); ALTER EXTENSION postgis ADD function geomfromewkt(text); ALTER EXTENSION postgis ADD function get_proj4_from_srid(integer); ALTER EXTENSION postgis ADD function gettransactionid(); ALTER EXTENSION postgis ADD function gidx_in(cstring); ALTER EXTENSION postgis ADD function gidx_out(gidx); ALTER EXTENSION postgis ADD function gserialized_gist_joinsel_2d(internal,oid,internal,smallint); ALTER EXTENSION postgis ADD function gserialized_gist_joinsel_nd(internal,oid,internal,smallint); ALTER EXTENSION postgis ADD function gserialized_gist_sel_2d(internal,oid,internal,integer); ALTER EXTENSION postgis ADD function gserialized_gist_sel_nd(internal,oid,internal,integer); ALTER EXTENSION postgis ADD function lockrow(text,text,text); ALTER EXTENSION postgis ADD function lockrow(text,text,text,text); ALTER EXTENSION postgis ADD function lockrow(text,text,text,text,timestamp without time zone); ALTER EXTENSION postgis ADD function lockrow(text,text,text,timestamp without time zone); ALTER EXTENSION postgis ADD function longtransactionsenabled(); ALTER EXTENSION postgis ADD function path(geometry); ALTER EXTENSION postgis ADD function pgis_abs_in(cstring); ALTER EXTENSION postgis ADD function pgis_abs_out(pgis_abs); ALTER EXTENSION postgis ADD function pgis_geometry_accum_finalfn(pgis_abs); ALTER EXTENSION postgis ADD function pgis_geometry_accum_transfn(pgis_abs,geometry); ALTER EXTENSION postgis ADD function pgis_geometry_collect_finalfn(pgis_abs); ALTER EXTENSION postgis ADD function pgis_geometry_makeline_finalfn(pgis_abs); ALTER EXTENSION postgis ADD function pgis_geometry_polygonize_finalfn(pgis_abs); ALTER EXTENSION postgis ADD function pgis_geometry_union_finalfn(pgis_abs); ALTER EXTENSION postgis ADD function point(geometry); ALTER EXTENSION postgis ADD function polygon(geometry); ALTER EXTENSION postgis ADD function populate_geometry_columns(boolean); ALTER EXTENSION postgis ADD function populate_geometry_columns(oid,boolean); ALTER EXTENSION postgis ADD function postgis_addbbox(geometry); ALTER EXTENSION postgis ADD function postgis_cache_bbox(); ALTER EXTENSION postgis ADD function postgis_constraint_dims(text,text,text); ALTER EXTENSION postgis ADD function postgis_constraint_srid(text,text,text); ALTER EXTENSION postgis ADD function postgis_constraint_type(text,text,text); ALTER EXTENSION postgis ADD function postgis_dropbbox(geometry); ALTER EXTENSION postgis ADD function postgis_full_version(); ALTER EXTENSION postgis ADD function postgis_gdal_version(); ALTER EXTENSION postgis ADD function postgis_geos_version(); ALTER EXTENSION postgis ADD function postgis_getbbox(geometry); ALTER EXTENSION postgis ADD function postgis_hasbbox(geometry); ALTER EXTENSION postgis ADD function postgis_lib_build_date(); ALTER EXTENSION postgis ADD function postgis_lib_version(); ALTER EXTENSION postgis ADD function postgis_libjson_version(); ALTER EXTENSION postgis ADD function postgis_libxml_version(); ALTER EXTENSION postgis ADD function postgis_noop(geometry); ALTER EXTENSION postgis ADD function postgis_proj_version(); ALTER EXTENSION postgis ADD function postgis_raster_lib_build_date(); ALTER EXTENSION postgis ADD function postgis_raster_lib_version(); ALTER EXTENSION postgis ADD function postgis_raster_scripts_installed(); ALTER EXTENSION postgis ADD function postgis_scripts_build_date(); ALTER EXTENSION postgis ADD function postgis_scripts_installed(); ALTER EXTENSION postgis ADD function postgis_scripts_released(); ALTER EXTENSION postgis ADD function postgis_svn_version(); ALTER EXTENSION postgis ADD function postgis_transform_geometry(geometry,text,text,integer); ALTER EXTENSION postgis ADD function postgis_type_name(character varying,integer,boolean); ALTER EXTENSION postgis ADD function postgis_typmod_dims(integer); ALTER EXTENSION postgis ADD function postgis_typmod_srid(integer); ALTER EXTENSION postgis ADD function postgis_typmod_type(integer); ALTER EXTENSION postgis ADD function postgis_version(); ALTER EXTENSION postgis ADD function raster_above(raster,raster); ALTER EXTENSION postgis ADD function raster_below(raster,raster); ALTER EXTENSION postgis ADD function raster_contain(raster,raster); ALTER EXTENSION postgis ADD function raster_contained(raster,raster); ALTER EXTENSION postgis ADD function raster_contained_by_geometry(raster,geometry); ALTER EXTENSION postgis ADD function raster_eq(raster,raster); ALTER EXTENSION postgis ADD function raster_geometry_contain(raster,geometry); ALTER EXTENSION postgis ADD function raster_geometry_overlap(raster,geometry); ALTER EXTENSION postgis ADD function raster_hash(raster); ALTER EXTENSION postgis ADD function raster_in(cstring); ALTER EXTENSION postgis ADD function raster_left(raster,raster); ALTER EXTENSION postgis ADD function raster_out(raster); ALTER EXTENSION postgis ADD function raster_overabove(raster,raster); ALTER EXTENSION postgis ADD function raster_overbelow(raster,raster); ALTER EXTENSION postgis ADD function raster_overlap(raster,raster); ALTER EXTENSION postgis ADD function raster_overleft(raster,raster); ALTER EXTENSION postgis ADD function raster_overright(raster,raster); ALTER EXTENSION postgis ADD function raster_right(raster,raster); ALTER EXTENSION postgis ADD function raster_same(raster,raster); ALTER EXTENSION postgis ADD function spheroid_in(cstring); ALTER EXTENSION postgis ADD function spheroid_out(spheroid); ALTER EXTENSION postgis ADD function st_3dclosestpoint(geometry,geometry); ALTER EXTENSION postgis ADD function st_3ddfullywithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function st_3ddistance(geometry,geometry); ALTER EXTENSION postgis ADD function st_3ddwithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function st_3dextent(geometry); ALTER EXTENSION postgis ADD function st_3dintersects(geometry,geometry); ALTER EXTENSION postgis ADD function st_3dlength(geometry); ALTER EXTENSION postgis ADD function st_3dlength_spheroid(geometry,spheroid); ALTER EXTENSION postgis ADD function st_3dlongestline(geometry,geometry); ALTER EXTENSION postgis ADD function st_3dmakebox(geometry,geometry); ALTER EXTENSION postgis ADD function st_3dmaxdistance(geometry,geometry); ALTER EXTENSION postgis ADD function st_3dperimeter(geometry); ALTER EXTENSION postgis ADD function st_3dshortestline(geometry,geometry); ALTER EXTENSION postgis ADD function st_accum(geometry); ALTER EXTENSION postgis ADD function st_addband(raster,addbandarg[]); ALTER EXTENSION postgis ADD function st_addband(raster,integer,text,double precision,double precision); ALTER EXTENSION postgis ADD function st_addband(raster,integer,text,integer[],double precision); ALTER EXTENSION postgis ADD function st_addband(raster,raster,integer,integer); ALTER EXTENSION postgis ADD function st_addband(raster,raster[],integer,integer); ALTER EXTENSION postgis ADD function st_addband(raster,text,double precision,double precision); ALTER EXTENSION postgis ADD function st_addband(raster,text,integer[],integer,double precision); ALTER EXTENSION postgis ADD function st_addmeasure(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_addpoint(geometry,geometry); ALTER EXTENSION postgis ADD function st_addpoint(geometry,geometry,integer); ALTER EXTENSION postgis ADD function st_affine(geometry,double precision,double precision,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_affine(geometry,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_approxcount(raster,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxcount(raster,double precision); ALTER EXTENSION postgis ADD function st_approxcount(raster,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxcount(raster,integer,double precision); ALTER EXTENSION postgis ADD function st_approxcount(text,text,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxcount(text,text,double precision); ALTER EXTENSION postgis ADD function st_approxcount(text,text,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxcount(text,text,integer,double precision); ALTER EXTENSION postgis ADD function st_approxhistogram(raster,double precision); ALTER EXTENSION postgis ADD function st_approxhistogram(raster,integer,boolean,double precision,integer,boolean); ALTER EXTENSION postgis ADD function st_approxhistogram(raster,integer,boolean,double precision,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_approxhistogram(raster,integer,double precision); ALTER EXTENSION postgis ADD function st_approxhistogram(raster,integer,double precision,integer,boolean); ALTER EXTENSION postgis ADD function st_approxhistogram(raster,integer,double precision,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_approxhistogram(text,text,double precision); ALTER EXTENSION postgis ADD function st_approxhistogram(text,text,integer,boolean,double precision,integer,boolean); ALTER EXTENSION postgis ADD function st_approxhistogram(text,text,integer,boolean,double precision,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_approxhistogram(text,text,integer,double precision); ALTER EXTENSION postgis ADD function st_approxhistogram(text,text,integer,double precision,integer,boolean); ALTER EXTENSION postgis ADD function st_approxhistogram(text,text,integer,double precision,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_approxquantile(raster,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(raster,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(raster,double precision,double precision[]); ALTER EXTENSION postgis ADD function st_approxquantile(raster,double precision[]); ALTER EXTENSION postgis ADD function st_approxquantile(raster,integer,boolean,double precision,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(raster,integer,boolean,double precision,double precision[]); ALTER EXTENSION postgis ADD function st_approxquantile(raster,integer,double precision,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(raster,integer,double precision,double precision[]); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,double precision,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,double precision,double precision[]); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,double precision[]); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,integer,boolean,double precision,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,integer,boolean,double precision,double precision[]); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,integer,double precision,double precision); ALTER EXTENSION postgis ADD function st_approxquantile(text,text,integer,double precision,double precision[]); ALTER EXTENSION postgis ADD function st_approxsummarystats(raster,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxsummarystats(raster,double precision); ALTER EXTENSION postgis ADD function st_approxsummarystats(raster,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxsummarystats(raster,integer,double precision); ALTER EXTENSION postgis ADD function st_approxsummarystats(text,text,boolean); ALTER EXTENSION postgis ADD function st_approxsummarystats(text,text,double precision); ALTER EXTENSION postgis ADD function st_approxsummarystats(text,text,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_approxsummarystats(text,text,integer,double precision); ALTER EXTENSION postgis ADD function st_area(geography,boolean); ALTER EXTENSION postgis ADD function st_area(geometry); ALTER EXTENSION postgis ADD function st_area(text); ALTER EXTENSION postgis ADD function st_area2d(geometry); ALTER EXTENSION postgis ADD function st_asbinary(geography); ALTER EXTENSION postgis ADD function st_asbinary(geography,text); ALTER EXTENSION postgis ADD function st_asbinary(geometry); ALTER EXTENSION postgis ADD function st_asbinary(geometry,text); ALTER EXTENSION postgis ADD function st_asbinary(raster,boolean); ALTER EXTENSION postgis ADD function st_asewkb(geometry); ALTER EXTENSION postgis ADD function st_asewkb(geometry,text); ALTER EXTENSION postgis ADD function st_asewkt(geography); ALTER EXTENSION postgis ADD function st_asewkt(geometry); ALTER EXTENSION postgis ADD function st_asewkt(text); ALTER EXTENSION postgis ADD function st_asgdalraster(raster,text,text[],integer); ALTER EXTENSION postgis ADD function st_asgeojson(geography,integer,integer); ALTER EXTENSION postgis ADD function st_asgeojson(geometry,integer,integer); ALTER EXTENSION postgis ADD function st_asgeojson(integer,geography,integer,integer); ALTER EXTENSION postgis ADD function st_asgeojson(integer,geometry,integer,integer); ALTER EXTENSION postgis ADD function st_asgeojson(text); ALTER EXTENSION postgis ADD function st_asgml(geography,integer,integer); ALTER EXTENSION postgis ADD function st_asgml(geometry,integer,integer); ALTER EXTENSION postgis ADD function st_asgml(integer,geography,integer,integer,text,text); ALTER EXTENSION postgis ADD function st_asgml(integer,geometry,integer,integer,text,text); ALTER EXTENSION postgis ADD function st_asgml(text); ALTER EXTENSION postgis ADD function st_ashexewkb(geometry); ALTER EXTENSION postgis ADD function st_ashexewkb(geometry,text); ALTER EXTENSION postgis ADD function st_asjpeg(raster,integer,integer); ALTER EXTENSION postgis ADD function st_asjpeg(raster,integer,text[]); ALTER EXTENSION postgis ADD function st_asjpeg(raster,integer[],integer); ALTER EXTENSION postgis ADD function st_asjpeg(raster,integer[],text[]); ALTER EXTENSION postgis ADD function st_asjpeg(raster,text[]); ALTER EXTENSION postgis ADD function st_askml(geography,integer); ALTER EXTENSION postgis ADD function st_askml(geometry,integer); ALTER EXTENSION postgis ADD function st_askml(integer,geography,integer,text); ALTER EXTENSION postgis ADD function st_askml(integer,geometry,integer,text); ALTER EXTENSION postgis ADD function st_askml(text); ALTER EXTENSION postgis ADD function st_aslatlontext(geometry); ALTER EXTENSION postgis ADD function st_aslatlontext(geometry,text); ALTER EXTENSION postgis ADD function st_aspect(raster,integer,raster,text,text,boolean); ALTER EXTENSION postgis ADD function st_aspect(raster,integer,text,text,boolean); ALTER EXTENSION postgis ADD function st_aspng(raster,integer,integer); ALTER EXTENSION postgis ADD function st_aspng(raster,integer,text[]); ALTER EXTENSION postgis ADD function st_aspng(raster,integer[],integer); ALTER EXTENSION postgis ADD function st_aspng(raster,integer[],text[]); ALTER EXTENSION postgis ADD function st_aspng(raster,text[]); ALTER EXTENSION postgis ADD function st_asraster(geometry,double precision,double precision,double precision,double precision,text,double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,double precision,double precision,double precision,double precision,text[],double precision[],double precision[],double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,double precision,double precision,text,double precision,double precision,double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,double precision,double precision,text[],double precision[],double precision[],double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,integer,integer,double precision,double precision,text,double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,integer,integer,double precision,double precision,text[],double precision[],double precision[],double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,integer,integer,text,double precision,double precision,double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,integer,integer,text[],double precision[],double precision[],double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,raster,text,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_asraster(geometry,raster,text[],double precision[],double precision[],boolean); ALTER EXTENSION postgis ADD function st_assvg(geography,integer,integer); ALTER EXTENSION postgis ADD function st_assvg(geometry,integer,integer); ALTER EXTENSION postgis ADD function st_assvg(text); ALTER EXTENSION postgis ADD function st_astext(geography); ALTER EXTENSION postgis ADD function st_astext(geometry); ALTER EXTENSION postgis ADD function st_astext(text); ALTER EXTENSION postgis ADD function st_astiff(raster,integer[],text,integer); ALTER EXTENSION postgis ADD function st_astiff(raster,integer[],text[],integer); ALTER EXTENSION postgis ADD function st_astiff(raster,text,integer); ALTER EXTENSION postgis ADD function st_astiff(raster,text[],integer); ALTER EXTENSION postgis ADD function st_asx3d(geometry,integer,integer); ALTER EXTENSION postgis ADD function st_azimuth(geography,geography); ALTER EXTENSION postgis ADD function st_azimuth(geometry,geometry); ALTER EXTENSION postgis ADD function st_band(raster,integer); ALTER EXTENSION postgis ADD function st_band(raster,integer[]); ALTER EXTENSION postgis ADD function st_band(raster,text,character); ALTER EXTENSION postgis ADD function st_bandisnodata(raster,boolean); ALTER EXTENSION postgis ADD function st_bandisnodata(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_bandmetadata(raster,integer); ALTER EXTENSION postgis ADD function st_bandmetadata(raster,integer[]); ALTER EXTENSION postgis ADD function st_bandnodatavalue(raster,integer); ALTER EXTENSION postgis ADD function st_bandpath(raster,integer); ALTER EXTENSION postgis ADD function st_bandpixeltype(raster,integer); ALTER EXTENSION postgis ADD function st_bdmpolyfromtext(text,integer); ALTER EXTENSION postgis ADD function st_bdpolyfromtext(text,integer); ALTER EXTENSION postgis ADD function st_boundary(geometry); ALTER EXTENSION postgis ADD function st_box2dfromgeohash(text,integer); ALTER EXTENSION postgis ADD function st_buffer(geography,double precision); ALTER EXTENSION postgis ADD function st_buffer(geometry,double precision); ALTER EXTENSION postgis ADD function st_buffer(geometry,double precision,integer); ALTER EXTENSION postgis ADD function st_buffer(geometry,double precision,text); ALTER EXTENSION postgis ADD function st_buffer(text,double precision); ALTER EXTENSION postgis ADD function st_buildarea(geometry); ALTER EXTENSION postgis ADD function st_centroid(geometry); ALTER EXTENSION postgis ADD function st_cleangeometry(geometry); ALTER EXTENSION postgis ADD function st_clip(raster,geometry,boolean); ALTER EXTENSION postgis ADD function st_clip(raster,geometry,double precision,boolean); ALTER EXTENSION postgis ADD function st_clip(raster,geometry,double precision[],boolean); ALTER EXTENSION postgis ADD function st_clip(raster,integer,geometry,boolean); ALTER EXTENSION postgis ADD function st_clip(raster,integer,geometry,double precision,boolean); ALTER EXTENSION postgis ADD function st_clip(raster,integer[],geometry,double precision[],boolean); ALTER EXTENSION postgis ADD function st_closestpoint(geometry,geometry); ALTER EXTENSION postgis ADD function st_collect(geometry); ALTER EXTENSION postgis ADD function st_collect(geometry,geometry); ALTER EXTENSION postgis ADD function st_collect(geometry[]); ALTER EXTENSION postgis ADD function st_collectionextract(geometry,integer); ALTER EXTENSION postgis ADD function st_collectionhomogenize(geometry); ALTER EXTENSION postgis ADD function st_colormap(raster,integer,text,text); ALTER EXTENSION postgis ADD function st_colormap(raster,text,text); ALTER EXTENSION postgis ADD function st_combine_bbox(box2d,geometry); ALTER EXTENSION postgis ADD function st_combine_bbox(box3d,geometry); ALTER EXTENSION postgis ADD function st_concavehull(geometry,double precision,boolean); ALTER EXTENSION postgis ADD function st_contains(geometry,geometry); ALTER EXTENSION postgis ADD function st_contains(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_contains(raster,raster); ALTER EXTENSION postgis ADD function st_containsproperly(geometry,geometry); ALTER EXTENSION postgis ADD function st_containsproperly(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_containsproperly(raster,raster); ALTER EXTENSION postgis ADD function st_convexhull(geometry); ALTER EXTENSION postgis ADD function st_convexhull(raster); ALTER EXTENSION postgis ADD function st_coorddim(geometry); ALTER EXTENSION postgis ADD function st_count(raster,boolean); ALTER EXTENSION postgis ADD function st_count(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_count(text,text,boolean); ALTER EXTENSION postgis ADD function st_count(text,text,integer,boolean); ALTER EXTENSION postgis ADD function st_coveredby(geography,geography); ALTER EXTENSION postgis ADD function st_coveredby(geometry,geometry); ALTER EXTENSION postgis ADD function st_coveredby(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_coveredby(raster,raster); ALTER EXTENSION postgis ADD function st_coveredby(text,text); ALTER EXTENSION postgis ADD function st_covers(geography,geography); ALTER EXTENSION postgis ADD function st_covers(geometry,geometry); ALTER EXTENSION postgis ADD function st_covers(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_covers(raster,raster); ALTER EXTENSION postgis ADD function st_covers(text,text); ALTER EXTENSION postgis ADD function st_crosses(geometry,geometry); ALTER EXTENSION postgis ADD function st_curvetoline(geometry); ALTER EXTENSION postgis ADD function st_curvetoline(geometry,integer); ALTER EXTENSION postgis ADD function st_delaunaytriangles(geometry,double precision,integer); ALTER EXTENSION postgis ADD function st_dfullywithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function st_dfullywithin(raster,integer,raster,integer,double precision); ALTER EXTENSION postgis ADD function st_dfullywithin(raster,raster,double precision); ALTER EXTENSION postgis ADD function st_difference(geometry,geometry); ALTER EXTENSION postgis ADD function st_dimension(geometry); ALTER EXTENSION postgis ADD function st_disjoint(geometry,geometry); ALTER EXTENSION postgis ADD function st_disjoint(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_disjoint(raster,raster); ALTER EXTENSION postgis ADD function st_distance(geography,geography); ALTER EXTENSION postgis ADD function st_distance(geography,geography,boolean); ALTER EXTENSION postgis ADD function st_distance(geometry,geometry); ALTER EXTENSION postgis ADD function st_distance(text,text); ALTER EXTENSION postgis ADD function st_distance_sphere(geometry,geometry); ALTER EXTENSION postgis ADD function st_distance_spheroid(geometry,geometry,spheroid); ALTER EXTENSION postgis ADD function st_distinct4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_distinct4ma(double precision[],text,text[]); ALTER EXTENSION postgis ADD function st_dump(geometry); ALTER EXTENSION postgis ADD function st_dumpaspolygons(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_dumppoints(geometry); ALTER EXTENSION postgis ADD function st_dumprings(geometry); ALTER EXTENSION postgis ADD function st_dumpvalues(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_dumpvalues(raster,integer[],boolean); ALTER EXTENSION postgis ADD function st_dwithin(geography,geography,double precision); ALTER EXTENSION postgis ADD function st_dwithin(geography,geography,double precision,boolean); ALTER EXTENSION postgis ADD function st_dwithin(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function st_dwithin(raster,integer,raster,integer,double precision); ALTER EXTENSION postgis ADD function st_dwithin(raster,raster,double precision); ALTER EXTENSION postgis ADD function st_dwithin(text,text,double precision); ALTER EXTENSION postgis ADD function st_endpoint(geometry); ALTER EXTENSION postgis ADD function st_envelope(geometry); ALTER EXTENSION postgis ADD function st_envelope(raster); ALTER EXTENSION postgis ADD function st_equals(geometry,geometry); ALTER EXTENSION postgis ADD function st_estimated_extent(text,text); ALTER EXTENSION postgis ADD function st_estimated_extent(text,text,text); ALTER EXTENSION postgis ADD function st_estimatedextent(text,text); ALTER EXTENSION postgis ADD function st_estimatedextent(text,text,text); ALTER EXTENSION postgis ADD function st_expand(box2d,double precision); ALTER EXTENSION postgis ADD function st_expand(box3d,double precision); ALTER EXTENSION postgis ADD function st_expand(geometry,double precision); ALTER EXTENSION postgis ADD function st_extent(geometry); ALTER EXTENSION postgis ADD function st_exteriorring(geometry); ALTER EXTENSION postgis ADD function st_find_extent(text,text); ALTER EXTENSION postgis ADD function st_find_extent(text,text,text); ALTER EXTENSION postgis ADD function st_flipcoordinates(geometry); ALTER EXTENSION postgis ADD function st_force2d(geometry); ALTER EXTENSION postgis ADD function st_force3d(geometry); ALTER EXTENSION postgis ADD function st_force3dm(geometry); ALTER EXTENSION postgis ADD function st_force3dz(geometry); ALTER EXTENSION postgis ADD function st_force4d(geometry); ALTER EXTENSION postgis ADD function st_force_2d(geometry); ALTER EXTENSION postgis ADD function st_force_3d(geometry); ALTER EXTENSION postgis ADD function st_force_3dm(geometry); ALTER EXTENSION postgis ADD function st_force_3dz(geometry); ALTER EXTENSION postgis ADD function st_force_4d(geometry); ALTER EXTENSION postgis ADD function st_force_collection(geometry); ALTER EXTENSION postgis ADD function st_forcecollection(geometry); ALTER EXTENSION postgis ADD function st_forcerhr(geometry); ALTER EXTENSION postgis ADD function st_forcesfs(geometry); ALTER EXTENSION postgis ADD function st_forcesfs(geometry,text); ALTER EXTENSION postgis ADD function st_fromgdalraster(bytea,integer); ALTER EXTENSION postgis ADD function st_gdaldrivers(); ALTER EXTENSION postgis ADD function st_geogfromtext(text); ALTER EXTENSION postgis ADD function st_geogfromwkb(bytea); ALTER EXTENSION postgis ADD function st_geographyfromtext(text); ALTER EXTENSION postgis ADD function st_geohash(geography,integer); ALTER EXTENSION postgis ADD function st_geohash(geometry,integer); ALTER EXTENSION postgis ADD function st_geomcollfromtext(text); ALTER EXTENSION postgis ADD function st_geomcollfromtext(text,integer); ALTER EXTENSION postgis ADD function st_geomcollfromwkb(bytea); ALTER EXTENSION postgis ADD function st_geomcollfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_geometryfromtext(text); ALTER EXTENSION postgis ADD function st_geometryfromtext(text,integer); ALTER EXTENSION postgis ADD function st_geometryn(geometry,integer); ALTER EXTENSION postgis ADD function st_geometrytype(geometry); ALTER EXTENSION postgis ADD function st_geomfromewkb(bytea); ALTER EXTENSION postgis ADD function st_geomfromewkt(text); ALTER EXTENSION postgis ADD function st_geomfromgeohash(text,integer); ALTER EXTENSION postgis ADD function st_geomfromgeojson(text); ALTER EXTENSION postgis ADD function st_geomfromgml(text); ALTER EXTENSION postgis ADD function st_geomfromgml(text,integer); ALTER EXTENSION postgis ADD function st_geomfromkml(text); ALTER EXTENSION postgis ADD function st_geomfromtext(text); ALTER EXTENSION postgis ADD function st_geomfromtext(text,integer); ALTER EXTENSION postgis ADD function st_geomfromwkb(bytea); ALTER EXTENSION postgis ADD function st_geomfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_georeference(raster,text); ALTER EXTENSION postgis ADD function st_geotransform(raster); ALTER EXTENSION postgis ADD function st_gmltosql(text); ALTER EXTENSION postgis ADD function st_gmltosql(text,integer); ALTER EXTENSION postgis ADD function st_hasarc(geometry); ALTER EXTENSION postgis ADD function st_hasnoband(raster,integer); ALTER EXTENSION postgis ADD function st_hausdorffdistance(geometry,geometry); ALTER EXTENSION postgis ADD function st_hausdorffdistance(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function st_height(raster); ALTER EXTENSION postgis ADD function st_hillshade(raster,integer,raster,text,double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_hillshade(raster,integer,text,double precision,double precision,double precision,double precision,boolean); ALTER EXTENSION postgis ADD function st_histogram(raster,integer,boolean,integer,boolean); ALTER EXTENSION postgis ADD function st_histogram(raster,integer,boolean,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_histogram(raster,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_histogram(raster,integer,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_histogram(text,text,integer,boolean,integer,boolean); ALTER EXTENSION postgis ADD function st_histogram(text,text,integer,boolean,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_histogram(text,text,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_histogram(text,text,integer,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_interiorringn(geometry,integer); ALTER EXTENSION postgis ADD function st_interpolatepoint(geometry,geometry); ALTER EXTENSION postgis ADD function st_intersection(geography,geography); ALTER EXTENSION postgis ADD function st_intersection(geometry,geometry); ALTER EXTENSION postgis ADD function st_intersection(geometry,raster,integer); ALTER EXTENSION postgis ADD function st_intersection(raster,geometry); ALTER EXTENSION postgis ADD function st_intersection(raster,integer,geometry); ALTER EXTENSION postgis ADD function st_intersection(raster,integer,raster,integer,double precision); ALTER EXTENSION postgis ADD function st_intersection(raster,integer,raster,integer,double precision[]); ALTER EXTENSION postgis ADD function st_intersection(raster,integer,raster,integer,text,double precision); ALTER EXTENSION postgis ADD function st_intersection(raster,integer,raster,integer,text,double precision[]); ALTER EXTENSION postgis ADD function st_intersection(raster,raster,double precision); ALTER EXTENSION postgis ADD function st_intersection(raster,raster,double precision[]); ALTER EXTENSION postgis ADD function st_intersection(raster,raster,text,double precision); ALTER EXTENSION postgis ADD function st_intersection(raster,raster,text,double precision[]); ALTER EXTENSION postgis ADD function st_intersection(text,text); ALTER EXTENSION postgis ADD function st_intersects(geography,geography); ALTER EXTENSION postgis ADD function st_intersects(geometry,geometry); ALTER EXTENSION postgis ADD function st_intersects(geometry,raster,integer); ALTER EXTENSION postgis ADD function st_intersects(raster,geometry,integer); ALTER EXTENSION postgis ADD function st_intersects(raster,integer,geometry); ALTER EXTENSION postgis ADD function st_intersects(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_intersects(raster,raster); ALTER EXTENSION postgis ADD function st_intersects(text,text); ALTER EXTENSION postgis ADD function st_invdistweight4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_isclosed(geometry); ALTER EXTENSION postgis ADD function st_iscollection(geometry); ALTER EXTENSION postgis ADD function st_iscoveragetile(raster,raster,integer,integer); ALTER EXTENSION postgis ADD function st_isempty(geometry); ALTER EXTENSION postgis ADD function st_isempty(raster); ALTER EXTENSION postgis ADD function st_isring(geometry); ALTER EXTENSION postgis ADD function st_issimple(geometry); ALTER EXTENSION postgis ADD function st_isvalid(geometry); ALTER EXTENSION postgis ADD function st_isvalid(geometry,integer); ALTER EXTENSION postgis ADD function st_isvaliddetail(geometry); ALTER EXTENSION postgis ADD function st_isvaliddetail(geometry,integer); ALTER EXTENSION postgis ADD function st_isvalidreason(geometry); ALTER EXTENSION postgis ADD function st_isvalidreason(geometry,integer); ALTER EXTENSION postgis ADD function st_length(geography,boolean); ALTER EXTENSION postgis ADD function st_length(geometry); ALTER EXTENSION postgis ADD function st_length(text); ALTER EXTENSION postgis ADD function st_length2d(geometry); ALTER EXTENSION postgis ADD function st_length2d_spheroid(geometry,spheroid); ALTER EXTENSION postgis ADD function st_length_spheroid(geometry,spheroid); ALTER EXTENSION postgis ADD function st_line_interpolate_point(geometry,double precision); ALTER EXTENSION postgis ADD function st_line_locate_point(geometry,geometry); ALTER EXTENSION postgis ADD function st_line_substring(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_linecrossingdirection(geometry,geometry); ALTER EXTENSION postgis ADD function st_linefrommultipoint(geometry); ALTER EXTENSION postgis ADD function st_linefromtext(text); ALTER EXTENSION postgis ADD function st_linefromtext(text,integer); ALTER EXTENSION postgis ADD function st_linefromwkb(bytea); ALTER EXTENSION postgis ADD function st_linefromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_lineinterpolatepoint(geometry,double precision); ALTER EXTENSION postgis ADD function st_linelocatepoint(geometry,geometry); ALTER EXTENSION postgis ADD function st_linemerge(geometry); ALTER EXTENSION postgis ADD function st_linestringfromwkb(bytea); ALTER EXTENSION postgis ADD function st_linestringfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_linesubstring(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_linetocurve(geometry); ALTER EXTENSION postgis ADD function st_locate_along_measure(geometry,double precision); ALTER EXTENSION postgis ADD function st_locate_between_measures(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_locatealong(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_locatebetween(geometry,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_locatebetweenelevations(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_longestline(geometry,geometry); ALTER EXTENSION postgis ADD function st_m(geometry); ALTER EXTENSION postgis ADD function st_makebox2d(geometry,geometry); ALTER EXTENSION postgis ADD function st_makeemptyraster(integer,integer,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_makeemptyraster(integer,integer,double precision,double precision,double precision,double precision,double precision,double precision,integer); ALTER EXTENSION postgis ADD function st_makeemptyraster(raster); ALTER EXTENSION postgis ADD function st_makeenvelope(double precision,double precision,double precision,double precision,integer); ALTER EXTENSION postgis ADD function st_makeline(geometry); ALTER EXTENSION postgis ADD function st_makeline(geometry,geometry); ALTER EXTENSION postgis ADD function st_makeline(geometry[]); ALTER EXTENSION postgis ADD function st_makepoint(double precision,double precision); ALTER EXTENSION postgis ADD function st_makepoint(double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_makepoint(double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_makepointm(double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_makepolygon(geometry); ALTER EXTENSION postgis ADD function st_makepolygon(geometry,geometry[]); ALTER EXTENSION postgis ADD function st_makevalid(geometry); ALTER EXTENSION postgis ADD function st_mapalgebra(rastbandarg[],regprocedure,text,text,raster,integer,integer,text[]); ALTER EXTENSION postgis ADD function st_mapalgebra(raster,integer,raster,integer,regprocedure,text,text,raster,integer,integer,text[]); ALTER EXTENSION postgis ADD function st_mapalgebra(raster,integer,raster,integer,text,text,text,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebra(raster,integer,regprocedure,text,text,raster,integer,integer,text[]); ALTER EXTENSION postgis ADD function st_mapalgebra(raster,integer,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebra(raster,integer[],regprocedure,text,text,raster,integer,integer,text[]); ALTER EXTENSION postgis ADD function st_mapalgebra(raster,raster,text,text,text,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebra(raster,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebraexpr(raster,integer,raster,integer,text,text,text,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebraexpr(raster,integer,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebraexpr(raster,raster,text,text,text,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebraexpr(raster,text,text,double precision); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,integer,raster,integer,regprocedure,text,text,text[]); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,integer,regprocedure); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,integer,regprocedure,text[]); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,integer,text,regprocedure); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,integer,text,regprocedure,text[]); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,raster,regprocedure,text,text,text[]); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,regprocedure); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,regprocedure,text[]); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,text,regprocedure); ALTER EXTENSION postgis ADD function st_mapalgebrafct(raster,text,regprocedure,text[]); ALTER EXTENSION postgis ADD function st_mapalgebrafctngb(raster,integer,text,integer,integer,regprocedure,text,text[]); ALTER EXTENSION postgis ADD function st_max4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_max4ma(double precision[],text,text[]); ALTER EXTENSION postgis ADD function st_maxdistance(geometry,geometry); ALTER EXTENSION postgis ADD function st_mean4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_mean4ma(double precision[],text,text[]); ALTER EXTENSION postgis ADD function st_mem_size(geometry); ALTER EXTENSION postgis ADD function st_memcollect(geometry); ALTER EXTENSION postgis ADD function st_memunion(geometry); ALTER EXTENSION postgis ADD function st_metadata(raster); ALTER EXTENSION postgis ADD function st_min4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_min4ma(double precision[],text,text[]); ALTER EXTENSION postgis ADD function st_minconvexhull(raster,integer); ALTER EXTENSION postgis ADD function st_mindist4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_minimumboundingcircle(geometry,integer); ALTER EXTENSION postgis ADD function st_minpossiblevalue(text); ALTER EXTENSION postgis ADD function st_mlinefromtext(text); ALTER EXTENSION postgis ADD function st_mlinefromtext(text,integer); ALTER EXTENSION postgis ADD function st_mlinefromwkb(bytea); ALTER EXTENSION postgis ADD function st_mlinefromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_mpointfromtext(text); ALTER EXTENSION postgis ADD function st_mpointfromtext(text,integer); ALTER EXTENSION postgis ADD function st_mpointfromwkb(bytea); ALTER EXTENSION postgis ADD function st_mpointfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_mpolyfromtext(text); ALTER EXTENSION postgis ADD function st_mpolyfromtext(text,integer); ALTER EXTENSION postgis ADD function st_mpolyfromwkb(bytea); ALTER EXTENSION postgis ADD function st_mpolyfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_multi(geometry); ALTER EXTENSION postgis ADD function st_multilinefromwkb(bytea); ALTER EXTENSION postgis ADD function st_multilinestringfromtext(text); ALTER EXTENSION postgis ADD function st_multilinestringfromtext(text,integer); ALTER EXTENSION postgis ADD function st_multipointfromtext(text); ALTER EXTENSION postgis ADD function st_multipointfromwkb(bytea); ALTER EXTENSION postgis ADD function st_multipointfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_multipolyfromwkb(bytea); ALTER EXTENSION postgis ADD function st_multipolyfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_multipolygonfromtext(text); ALTER EXTENSION postgis ADD function st_multipolygonfromtext(text,integer); ALTER EXTENSION postgis ADD function st_ndims(geometry); ALTER EXTENSION postgis ADD function st_nearestvalue(raster,geometry,boolean); ALTER EXTENSION postgis ADD function st_nearestvalue(raster,integer,geometry,boolean); ALTER EXTENSION postgis ADD function st_nearestvalue(raster,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_nearestvalue(raster,integer,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_neighborhood(raster,geometry,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_neighborhood(raster,integer,geometry,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_neighborhood(raster,integer,integer,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_neighborhood(raster,integer,integer,integer,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_node(geometry); ALTER EXTENSION postgis ADD function st_notsamealignmentreason(raster,raster); ALTER EXTENSION postgis ADD function st_npoints(geometry); ALTER EXTENSION postgis ADD function st_nrings(geometry); ALTER EXTENSION postgis ADD function st_numbands(raster); ALTER EXTENSION postgis ADD function st_numgeometries(geometry); ALTER EXTENSION postgis ADD function st_numinteriorring(geometry); ALTER EXTENSION postgis ADD function st_numinteriorrings(geometry); ALTER EXTENSION postgis ADD function st_numpatches(geometry); ALTER EXTENSION postgis ADD function st_numpoints(geometry); ALTER EXTENSION postgis ADD function st_offsetcurve(geometry,double precision,text); ALTER EXTENSION postgis ADD function st_orderingequals(geometry,geometry); ALTER EXTENSION postgis ADD function st_overlaps(geometry,geometry); ALTER EXTENSION postgis ADD function st_overlaps(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_overlaps(raster,raster); ALTER EXTENSION postgis ADD function st_patchn(geometry,integer); ALTER EXTENSION postgis ADD function st_perimeter(geography,boolean); ALTER EXTENSION postgis ADD function st_perimeter(geometry); ALTER EXTENSION postgis ADD function st_perimeter2d(geometry); ALTER EXTENSION postgis ADD function st_pixelascentroid(raster,integer,integer); ALTER EXTENSION postgis ADD function st_pixelascentroids(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_pixelaspoint(raster,integer,integer); ALTER EXTENSION postgis ADD function st_pixelaspoints(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_pixelaspolygon(raster,integer,integer); ALTER EXTENSION postgis ADD function st_pixelaspolygons(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_pixelheight(raster); ALTER EXTENSION postgis ADD function st_pixelofvalue(raster,double precision,boolean); ALTER EXTENSION postgis ADD function st_pixelofvalue(raster,double precision[],boolean); ALTER EXTENSION postgis ADD function st_pixelofvalue(raster,integer,double precision,boolean); ALTER EXTENSION postgis ADD function st_pixelofvalue(raster,integer,double precision[],boolean); ALTER EXTENSION postgis ADD function st_pixelwidth(raster); ALTER EXTENSION postgis ADD function st_point(double precision,double precision); ALTER EXTENSION postgis ADD function st_point_inside_circle(geometry,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_pointfromgeohash(text,integer); ALTER EXTENSION postgis ADD function st_pointfromtext(text); ALTER EXTENSION postgis ADD function st_pointfromtext(text,integer); ALTER EXTENSION postgis ADD function st_pointfromwkb(bytea); ALTER EXTENSION postgis ADD function st_pointfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_pointn(geometry,integer); ALTER EXTENSION postgis ADD function st_pointonsurface(geometry); ALTER EXTENSION postgis ADD function st_polyfromtext(text); ALTER EXTENSION postgis ADD function st_polyfromtext(text,integer); ALTER EXTENSION postgis ADD function st_polyfromwkb(bytea); ALTER EXTENSION postgis ADD function st_polyfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_polygon(geometry,integer); ALTER EXTENSION postgis ADD function st_polygon(raster,integer); ALTER EXTENSION postgis ADD function st_polygonfromtext(text); ALTER EXTENSION postgis ADD function st_polygonfromtext(text,integer); ALTER EXTENSION postgis ADD function st_polygonfromwkb(bytea); ALTER EXTENSION postgis ADD function st_polygonfromwkb(bytea,integer); ALTER EXTENSION postgis ADD function st_polygonize(geometry); ALTER EXTENSION postgis ADD function st_polygonize(geometry[]); ALTER EXTENSION postgis ADD function st_project(geography,double precision,double precision); ALTER EXTENSION postgis ADD function st_quantile(raster,boolean,double precision); ALTER EXTENSION postgis ADD function st_quantile(raster,double precision); ALTER EXTENSION postgis ADD function st_quantile(raster,double precision[]); ALTER EXTENSION postgis ADD function st_quantile(raster,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_quantile(raster,integer,boolean,double precision[]); ALTER EXTENSION postgis ADD function st_quantile(raster,integer,double precision); ALTER EXTENSION postgis ADD function st_quantile(raster,integer,double precision[]); ALTER EXTENSION postgis ADD function st_quantile(text,text,boolean,double precision); ALTER EXTENSION postgis ADD function st_quantile(text,text,double precision); ALTER EXTENSION postgis ADD function st_quantile(text,text,double precision[]); ALTER EXTENSION postgis ADD function st_quantile(text,text,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_quantile(text,text,integer,boolean,double precision[]); ALTER EXTENSION postgis ADD function st_quantile(text,text,integer,double precision); ALTER EXTENSION postgis ADD function st_quantile(text,text,integer,double precision[]); ALTER EXTENSION postgis ADD function st_range4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_range4ma(double precision[],text,text[]); ALTER EXTENSION postgis ADD function st_rastertoworldcoord(raster,integer,integer); ALTER EXTENSION postgis ADD function st_rastertoworldcoordx(raster,integer); ALTER EXTENSION postgis ADD function st_rastertoworldcoordx(raster,integer,integer); ALTER EXTENSION postgis ADD function st_rastertoworldcoordy(raster,integer); ALTER EXTENSION postgis ADD function st_rastertoworldcoordy(raster,integer,integer); ALTER EXTENSION postgis ADD function st_reclass(raster,integer,text,text,double precision); ALTER EXTENSION postgis ADD function st_reclass(raster,reclassarg[]); ALTER EXTENSION postgis ADD function st_reclass(raster,text,text); ALTER EXTENSION postgis ADD function st_relate(geometry,geometry); ALTER EXTENSION postgis ADD function st_relate(geometry,geometry,integer); ALTER EXTENSION postgis ADD function st_relate(geometry,geometry,text); ALTER EXTENSION postgis ADD function st_relatematch(text,text); ALTER EXTENSION postgis ADD function st_removepoint(geometry,integer); ALTER EXTENSION postgis ADD function st_removerepeatedpoints(geometry); ALTER EXTENSION postgis ADD function st_resample(raster,double precision,double precision,double precision,double precision,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_resample(raster,integer,integer,double precision,double precision,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_resample(raster,raster,boolean,text,double precision); ALTER EXTENSION postgis ADD function st_resample(raster,raster,text,double precision,boolean); ALTER EXTENSION postgis ADD function st_rescale(raster,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_rescale(raster,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_resize(raster,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_resize(raster,integer,integer,text,double precision); ALTER EXTENSION postgis ADD function st_resize(raster,text,text,text,double precision); ALTER EXTENSION postgis ADD function st_reskew(raster,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_reskew(raster,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_reverse(geometry); ALTER EXTENSION postgis ADD function st_rotate(geometry,double precision); ALTER EXTENSION postgis ADD function st_rotate(geometry,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_rotate(geometry,double precision,geometry); ALTER EXTENSION postgis ADD function st_rotatex(geometry,double precision); ALTER EXTENSION postgis ADD function st_rotatey(geometry,double precision); ALTER EXTENSION postgis ADD function st_rotatez(geometry,double precision); ALTER EXTENSION postgis ADD function st_rotation(raster); ALTER EXTENSION postgis ADD function st_roughness(raster,integer,raster,text,boolean); ALTER EXTENSION postgis ADD function st_samealignment(double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_samealignment(raster); ALTER EXTENSION postgis ADD function st_samealignment(raster,raster); ALTER EXTENSION postgis ADD function st_scale(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_scale(geometry,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_scalex(raster); ALTER EXTENSION postgis ADD function st_scaley(raster); ALTER EXTENSION postgis ADD function st_segmentize(geography,double precision); ALTER EXTENSION postgis ADD function st_segmentize(geometry,double precision); ALTER EXTENSION postgis ADD function st_setbandisnodata(raster,integer); ALTER EXTENSION postgis ADD function st_setbandnodatavalue(raster,double precision); ALTER EXTENSION postgis ADD function st_setbandnodatavalue(raster,integer,double precision,boolean); ALTER EXTENSION postgis ADD function st_setgeoreference(raster,double precision,double precision,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_setgeoreference(raster,text,text); ALTER EXTENSION postgis ADD function st_setgeotransform(raster,double precision,double precision,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_setpoint(geometry,integer,geometry); ALTER EXTENSION postgis ADD function st_setrotation(raster,double precision); ALTER EXTENSION postgis ADD function st_setscale(raster,double precision); ALTER EXTENSION postgis ADD function st_setscale(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_setskew(raster,double precision); ALTER EXTENSION postgis ADD function st_setskew(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_setsrid(geometry,integer); ALTER EXTENSION postgis ADD function st_setsrid(raster,integer); ALTER EXTENSION postgis ADD function st_setupperleft(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_setvalue(raster,geometry,double precision); ALTER EXTENSION postgis ADD function st_setvalue(raster,integer,geometry,double precision); ALTER EXTENSION postgis ADD function st_setvalue(raster,integer,integer,double precision); ALTER EXTENSION postgis ADD function st_setvalue(raster,integer,integer,integer,double precision); ALTER EXTENSION postgis ADD function st_setvalues(raster,integer,geomval[],boolean); ALTER EXTENSION postgis ADD function st_setvalues(raster,integer,integer,integer,double precision[],boolean[],boolean); ALTER EXTENSION postgis ADD function st_setvalues(raster,integer,integer,integer,double precision[],double precision,boolean); ALTER EXTENSION postgis ADD function st_setvalues(raster,integer,integer,integer,integer,double precision,boolean); ALTER EXTENSION postgis ADD function st_setvalues(raster,integer,integer,integer,integer,integer,double precision,boolean); ALTER EXTENSION postgis ADD function st_sharedpaths(geometry,geometry); ALTER EXTENSION postgis ADD function st_shift_longitude(geometry); ALTER EXTENSION postgis ADD function st_shortestline(geometry,geometry); ALTER EXTENSION postgis ADD function st_simplify(geometry,double precision); ALTER EXTENSION postgis ADD function st_simplifypreservetopology(geometry,double precision); ALTER EXTENSION postgis ADD function st_skewx(raster); ALTER EXTENSION postgis ADD function st_skewy(raster); ALTER EXTENSION postgis ADD function st_slope(raster,integer,raster,text,text,double precision,boolean); ALTER EXTENSION postgis ADD function st_slope(raster,integer,text,text,double precision,boolean); ALTER EXTENSION postgis ADD function st_snap(geometry,geometry,double precision); ALTER EXTENSION postgis ADD function st_snaptogrid(geometry,double precision); ALTER EXTENSION postgis ADD function st_snaptogrid(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_snaptogrid(geometry,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_snaptogrid(geometry,geometry,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_snaptogrid(raster,double precision,double precision,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_snaptogrid(raster,double precision,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_snaptogrid(raster,double precision,double precision,text,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_split(geometry,geometry); ALTER EXTENSION postgis ADD function st_srid(geometry); ALTER EXTENSION postgis ADD function st_srid(raster); ALTER EXTENSION postgis ADD function st_startpoint(geometry); ALTER EXTENSION postgis ADD function st_stddev4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_stddev4ma(double precision[],text,text[]); ALTER EXTENSION postgis ADD function st_sum4ma(double precision[],integer[],text[]); ALTER EXTENSION postgis ADD function st_sum4ma(double precision[],text,text[]); ALTER EXTENSION postgis ADD function st_summary(geography); ALTER EXTENSION postgis ADD function st_summary(geometry); ALTER EXTENSION postgis ADD function st_summary(raster); ALTER EXTENSION postgis ADD function st_summarystats(raster,boolean); ALTER EXTENSION postgis ADD function st_summarystats(raster,integer,boolean); ALTER EXTENSION postgis ADD function st_summarystats(text,text,boolean); ALTER EXTENSION postgis ADD function st_summarystats(text,text,integer,boolean); ALTER EXTENSION postgis ADD function st_symdifference(geometry,geometry); ALTER EXTENSION postgis ADD function st_symmetricdifference(geometry,geometry); ALTER EXTENSION postgis ADD function st_tile(raster,integer,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_tile(raster,integer,integer,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_tile(raster,integer[],integer,integer,boolean,double precision); ALTER EXTENSION postgis ADD function st_touches(geometry,geometry); ALTER EXTENSION postgis ADD function st_touches(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_touches(raster,raster); ALTER EXTENSION postgis ADD function st_tpi(raster,integer,raster,text,boolean); ALTER EXTENSION postgis ADD function st_transform(geometry,integer); ALTER EXTENSION postgis ADD function st_transform(raster,integer,double precision,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_transform(raster,integer,double precision,text,double precision); ALTER EXTENSION postgis ADD function st_transform(raster,integer,text,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_transform(raster,raster,text,double precision); ALTER EXTENSION postgis ADD function st_translate(geometry,double precision,double precision); ALTER EXTENSION postgis ADD function st_translate(geometry,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_transscale(geometry,double precision,double precision,double precision,double precision); ALTER EXTENSION postgis ADD function st_tri(raster,integer,raster,text,boolean); ALTER EXTENSION postgis ADD function st_unaryunion(geometry); ALTER EXTENSION postgis ADD function st_union(geometry); ALTER EXTENSION postgis ADD function st_union(geometry,geometry); ALTER EXTENSION postgis ADD function st_union(geometry[]); ALTER EXTENSION postgis ADD function st_union(raster); ALTER EXTENSION postgis ADD function st_union(raster,integer); ALTER EXTENSION postgis ADD function st_union(raster,integer,text); ALTER EXTENSION postgis ADD function st_union(raster,text); ALTER EXTENSION postgis ADD function st_union(raster,unionarg[]); ALTER EXTENSION postgis ADD function st_upperleftx(raster); ALTER EXTENSION postgis ADD function st_upperlefty(raster); ALTER EXTENSION postgis ADD function st_value(raster,geometry,boolean); ALTER EXTENSION postgis ADD function st_value(raster,integer,geometry,boolean); ALTER EXTENSION postgis ADD function st_value(raster,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_value(raster,integer,integer,integer,boolean); ALTER EXTENSION postgis ADD function st_valuecount(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuecount(raster,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuecount(raster,integer,boolean,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuecount(raster,integer,boolean,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuecount(raster,integer,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuecount(raster,integer,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuecount(text,text,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuecount(text,text,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuecount(text,text,integer,boolean,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuecount(text,text,integer,boolean,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuecount(text,text,integer,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuecount(text,text,integer,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuepercent(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuepercent(raster,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuepercent(raster,integer,boolean,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuepercent(raster,integer,boolean,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuepercent(raster,integer,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuepercent(raster,integer,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuepercent(text,text,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuepercent(text,text,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuepercent(text,text,integer,boolean,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuepercent(text,text,integer,boolean,double precision[],double precision); ALTER EXTENSION postgis ADD function st_valuepercent(text,text,integer,double precision,double precision); ALTER EXTENSION postgis ADD function st_valuepercent(text,text,integer,double precision[],double precision); ALTER EXTENSION postgis ADD function st_width(raster); ALTER EXTENSION postgis ADD function st_within(geometry,geometry); ALTER EXTENSION postgis ADD function st_within(raster,integer,raster,integer); ALTER EXTENSION postgis ADD function st_within(raster,raster); ALTER EXTENSION postgis ADD function st_wkbtosql(bytea); ALTER EXTENSION postgis ADD function st_wkttosql(text); ALTER EXTENSION postgis ADD function st_worldtorastercoord(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_worldtorastercoord(raster,geometry); ALTER EXTENSION postgis ADD function st_worldtorastercoordx(raster,double precision); ALTER EXTENSION postgis ADD function st_worldtorastercoordx(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_worldtorastercoordx(raster,geometry); ALTER EXTENSION postgis ADD function st_worldtorastercoordy(raster,double precision); ALTER EXTENSION postgis ADD function st_worldtorastercoordy(raster,double precision,double precision); ALTER EXTENSION postgis ADD function st_worldtorastercoordy(raster,geometry); ALTER EXTENSION postgis ADD function st_x(geometry); ALTER EXTENSION postgis ADD function st_xmax(box3d); ALTER EXTENSION postgis ADD function st_xmin(box3d); ALTER EXTENSION postgis ADD function st_y(geometry); ALTER EXTENSION postgis ADD function st_ymax(box3d); ALTER EXTENSION postgis ADD function st_ymin(box3d); ALTER EXTENSION postgis ADD function st_z(geometry); ALTER EXTENSION postgis ADD function st_zmax(box3d); ALTER EXTENSION postgis ADD function st_zmflag(geometry); ALTER EXTENSION postgis ADD function st_zmin(box3d); ALTER EXTENSION postgis ADD function text(geometry); ALTER EXTENSION postgis ADD function unlockrows(text); ALTER EXTENSION postgis ADD function updategeometrysrid(character varying,character varying,character varying,character varying,integer); ALTER EXTENSION postgis ADD function updategeometrysrid(character varying,character varying,character varying,integer); ALTER EXTENSION postgis ADD function updategeometrysrid(character varying,character varying,integer); ALTER EXTENSION postgis ADD function updaterastersrid(name,name,integer); ALTER EXTENSION postgis ADD function updaterastersrid(name,name,name,integer); ALTER EXTENSION postgis ADD operator &&&(geometry,geometry); ALTER EXTENSION postgis ADD operator &&(geography,geography); ALTER EXTENSION postgis ADD operator &&(geometry,geometry); ALTER EXTENSION postgis ADD operator &&(geometry,raster); ALTER EXTENSION postgis ADD operator &&(raster,geometry); ALTER EXTENSION postgis ADD operator &&(raster,raster); ALTER EXTENSION postgis ADD operator &<(geometry,geometry); ALTER EXTENSION postgis ADD operator &<(raster,raster); ALTER EXTENSION postgis ADD operator &<|(geometry,geometry); ALTER EXTENSION postgis ADD operator &<|(raster,raster); ALTER EXTENSION postgis ADD operator &>(geometry,geometry); ALTER EXTENSION postgis ADD operator &>(raster,raster); ALTER EXTENSION postgis ADD operator <#>(geometry,geometry); ALTER EXTENSION postgis ADD operator <(geography,geography); ALTER EXTENSION postgis ADD operator <(geometry,geometry); ALTER EXTENSION postgis ADD operator <->(geometry,geometry); ALTER EXTENSION postgis ADD operator <<(geometry,geometry); ALTER EXTENSION postgis ADD operator <<(raster,raster); ALTER EXTENSION postgis ADD operator <<|(geometry,geometry); ALTER EXTENSION postgis ADD operator <<|(raster,raster); ALTER EXTENSION postgis ADD operator <=(geography,geography); ALTER EXTENSION postgis ADD operator <=(geometry,geometry); ALTER EXTENSION postgis ADD operator =(geography,geography); ALTER EXTENSION postgis ADD operator =(geometry,geometry); ALTER EXTENSION postgis ADD operator =(raster,raster); ALTER EXTENSION postgis ADD operator >(geography,geography); ALTER EXTENSION postgis ADD operator >(geometry,geometry); ALTER EXTENSION postgis ADD operator >=(geography,geography); ALTER EXTENSION postgis ADD operator >=(geometry,geometry); ALTER EXTENSION postgis ADD operator >>(geometry,geometry); ALTER EXTENSION postgis ADD operator >>(raster,raster); ALTER EXTENSION postgis ADD operator @(geometry,geometry); ALTER EXTENSION postgis ADD operator @(geometry,raster); ALTER EXTENSION postgis ADD operator @(raster,geometry); ALTER EXTENSION postgis ADD operator @(raster,raster); ALTER EXTENSION postgis ADD operator class btree_geography_ops using btree; ALTER EXTENSION postgis ADD operator class btree_geometry_ops using btree; ALTER EXTENSION postgis ADD operator class gist_geography_ops using gist; ALTER EXTENSION postgis ADD operator class gist_geometry_ops_2d using gist; ALTER EXTENSION postgis ADD operator class gist_geometry_ops_nd using gist; ALTER EXTENSION postgis ADD operator class hash_raster_ops using hash; ALTER EXTENSION postgis ADD operator family btree_geography_ops using btree; ALTER EXTENSION postgis ADD operator family btree_geometry_ops using btree; ALTER EXTENSION postgis ADD operator family gist_geography_ops using gist; ALTER EXTENSION postgis ADD operator family gist_geometry_ops_2d using gist; ALTER EXTENSION postgis ADD operator family gist_geometry_ops_nd using gist; ALTER EXTENSION postgis ADD operator family hash_raster_ops using hash; ALTER EXTENSION postgis ADD operator |&>(geometry,geometry); ALTER EXTENSION postgis ADD operator |&>(raster,raster); ALTER EXTENSION postgis ADD operator |>>(geometry,geometry); ALTER EXTENSION postgis ADD operator |>>(raster,raster); ALTER EXTENSION postgis ADD operator ~(geometry,geometry); ALTER EXTENSION postgis ADD operator ~(geometry,raster); ALTER EXTENSION postgis ADD operator ~(raster,geometry); ALTER EXTENSION postgis ADD operator ~(raster,raster); ALTER EXTENSION postgis ADD operator ~=(geometry,geometry); ALTER EXTENSION postgis ADD operator ~=(raster,raster); ALTER EXTENSION postgis ADD table spatial_ref_sys; ALTER EXTENSION postgis ADD type addbandarg; ALTER EXTENSION postgis ADD type agg_samealignment; ALTER EXTENSION postgis ADD type box2d; ALTER EXTENSION postgis ADD type box2df; ALTER EXTENSION postgis ADD type box3d; ALTER EXTENSION postgis ADD type geography; ALTER EXTENSION postgis ADD type geometry; ALTER EXTENSION postgis ADD type geometry_dump; ALTER EXTENSION postgis ADD type geomval; ALTER EXTENSION postgis ADD type gidx; ALTER EXTENSION postgis ADD type pgis_abs; ALTER EXTENSION postgis ADD type rastbandarg; ALTER EXTENSION postgis ADD type raster; ALTER EXTENSION postgis ADD type reclassarg; ALTER EXTENSION postgis ADD type spheroid; ALTER EXTENSION postgis ADD type unionarg; ALTER EXTENSION postgis ADD type valid_detail; ALTER EXTENSION postgis ADD view geography_columns; ALTER EXTENSION postgis ADD view geometry_columns; ALTER EXTENSION postgis ADD view raster_columns; ALTER EXTENSION postgis ADD view raster_overviews; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/sql_bits/mark_editable_objects.sql.in��������������������0000644�0000000�0000000�00000017754�11764371772�026746� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT pg_catalog.pg_extension_config_dump('spatial_ref_sys', 'WHERE NOT (srid BETWEEN 2000 AND 2180 OR srid BETWEEN 2188 AND 2217 OR srid BETWEEN 2219 AND 2220 OR srid BETWEEN 2222 AND 2292 OR srid BETWEEN 2294 AND 2295 OR srid BETWEEN 2308 AND 2962 OR srid BETWEEN 2964 AND 2973 OR srid BETWEEN 2975 AND 2984 OR srid BETWEEN 2987 AND 3051 OR srid BETWEEN 3054 AND 3138 OR srid BETWEEN 3140 AND 3143 OR srid BETWEEN 3146 AND 3172 OR srid BETWEEN 3174 AND 3294 OR srid BETWEEN 3296 AND 3791 OR srid BETWEEN 3793 AND 3802 OR srid BETWEEN 3812 AND 3812 OR srid BETWEEN 3814 AND 3816 OR srid BETWEEN 3819 AND 3819 OR srid BETWEEN 3821 AND 3821 OR srid BETWEEN 3824 AND 3829 OR srid BETWEEN 3832 AND 3852 OR srid BETWEEN 3854 AND 3854 OR srid BETWEEN 3857 AND 3857 OR srid BETWEEN 3889 AND 3893 OR srid BETWEEN 3906 AND 3912 OR srid BETWEEN 3920 AND 3920 OR srid BETWEEN 3942 AND 3950 OR srid BETWEEN 3968 AND 3970 OR srid BETWEEN 3975 AND 3976 OR srid BETWEEN 3978 AND 3979 OR srid BETWEEN 3985 AND 3989 OR srid BETWEEN 3991 AND 3992 OR srid BETWEEN 3994 AND 3997 OR srid BETWEEN 4001 AND 4016 OR srid BETWEEN 4018 AND 4038 OR srid BETWEEN 4041 AND 4063 OR srid BETWEEN 4071 AND 4071 OR srid BETWEEN 4075 AND 4075 OR srid BETWEEN 4081 AND 4083 OR srid BETWEEN 4093 AND 4096 OR srid BETWEEN 4120 AND 4176 OR srid BETWEEN 4178 AND 4185 OR srid BETWEEN 4188 AND 4216 OR srid BETWEEN 4218 AND 4289 OR srid BETWEEN 4291 AND 4304 OR srid BETWEEN 4306 AND 4319 OR srid BETWEEN 4322 AND 4322 OR srid BETWEEN 4324 AND 4324 OR srid BETWEEN 4326 AND 4326 OR srid BETWEEN 4414 AND 4415 OR srid BETWEEN 4417 AND 4417 OR srid BETWEEN 4434 AND 4434 OR srid BETWEEN 4437 AND 4437 OR srid BETWEEN 4455 AND 4457 OR srid BETWEEN 4462 AND 4463 OR srid BETWEEN 4467 AND 4467 OR srid BETWEEN 4470 AND 4471 OR srid BETWEEN 4474 AND 4475 OR srid BETWEEN 4483 AND 4555 OR srid BETWEEN 4558 AND 4559 OR srid BETWEEN 4568 AND 4589 OR srid BETWEEN 4600 AND 4647 OR srid BETWEEN 4652 AND 4824 OR srid BETWEEN 4826 AND 4826 OR srid BETWEEN 4901 AND 4904 OR srid BETWEEN 20004 AND 20032 OR srid BETWEEN 20064 AND 20092 OR srid BETWEEN 20135 AND 20138 OR srid BETWEEN 20248 AND 20258 OR srid BETWEEN 20348 AND 20358 OR srid BETWEEN 20436 AND 20440 OR srid BETWEEN 20499 AND 20499 OR srid BETWEEN 20538 AND 20539 OR srid BETWEEN 20790 AND 20791 OR srid BETWEEN 20822 AND 20824 OR srid BETWEEN 20934 AND 20936 OR srid BETWEEN 21035 AND 21037 OR srid BETWEEN 21095 AND 21097 OR srid BETWEEN 21100 AND 21100 OR srid BETWEEN 21148 AND 21150 OR srid BETWEEN 21291 AND 21292 OR srid BETWEEN 21413 AND 21423 OR srid BETWEEN 21453 AND 21463 OR srid BETWEEN 21473 AND 21483 OR srid BETWEEN 21500 AND 21500 OR srid BETWEEN 21780 AND 21782 OR srid BETWEEN 21817 AND 21818 OR srid BETWEEN 21891 AND 21894 OR srid BETWEEN 21896 AND 21899 OR srid BETWEEN 22032 AND 22033 OR srid BETWEEN 22091 AND 22092 OR srid BETWEEN 22171 AND 22177 OR srid BETWEEN 22181 AND 22187 OR srid BETWEEN 22191 AND 22197 OR srid BETWEEN 22234 AND 22236 OR srid BETWEEN 22275 AND 22275 OR srid BETWEEN 22277 AND 22277 OR srid BETWEEN 22279 AND 22279 OR srid BETWEEN 22281 AND 22281 OR srid BETWEEN 22283 AND 22283 OR srid BETWEEN 22285 AND 22285 OR srid BETWEEN 22287 AND 22287 OR srid BETWEEN 22289 AND 22289 OR srid BETWEEN 22291 AND 22291 OR srid BETWEEN 22293 AND 22293 OR srid BETWEEN 22300 AND 22300 OR srid BETWEEN 22332 AND 22332 OR srid BETWEEN 22391 AND 22392 OR srid BETWEEN 22521 AND 22525 OR srid BETWEEN 22700 AND 22700 OR srid BETWEEN 22770 AND 22770 OR srid BETWEEN 22780 AND 22780 OR srid BETWEEN 22832 AND 22832 OR srid BETWEEN 22991 AND 22994 OR srid BETWEEN 23028 AND 23038 OR srid BETWEEN 23090 AND 23090 OR srid BETWEEN 23095 AND 23095 OR srid BETWEEN 23239 AND 23240 OR srid BETWEEN 23433 AND 23433 OR srid BETWEEN 23700 AND 23700 OR srid BETWEEN 23830 AND 23853 OR srid BETWEEN 23866 AND 23872 OR srid BETWEEN 23877 AND 23884 OR srid BETWEEN 23886 AND 23894 OR srid BETWEEN 23946 AND 23948 OR srid BETWEEN 24047 AND 24048 OR srid BETWEEN 24100 AND 24100 OR srid BETWEEN 24200 AND 24200 OR srid BETWEEN 24305 AND 24306 OR srid BETWEEN 24311 AND 24313 OR srid BETWEEN 24342 AND 24347 OR srid BETWEEN 24370 AND 24383 OR srid BETWEEN 24500 AND 24500 OR srid BETWEEN 24547 AND 24548 OR srid BETWEEN 24571 AND 24571 OR srid BETWEEN 24600 AND 24600 OR srid BETWEEN 24718 AND 24720 OR srid BETWEEN 24817 AND 24821 OR srid BETWEEN 24877 AND 24882 OR srid BETWEEN 24891 AND 24893 OR srid BETWEEN 25000 AND 25000 OR srid BETWEEN 25231 AND 25231 OR srid BETWEEN 25391 AND 25395 OR srid BETWEEN 25700 AND 25700 OR srid BETWEEN 25828 AND 25838 OR srid BETWEEN 25884 AND 25884 OR srid BETWEEN 25932 AND 25932 OR srid BETWEEN 26191 AND 26195 OR srid BETWEEN 26237 AND 26237 OR srid BETWEEN 26331 AND 26332 OR srid BETWEEN 26391 AND 26393 OR srid BETWEEN 26432 AND 26432 OR srid BETWEEN 26591 AND 26592 OR srid BETWEEN 26632 AND 26632 OR srid BETWEEN 26692 AND 26692 OR srid BETWEEN 26701 AND 26722 OR srid BETWEEN 26729 AND 26760 OR srid BETWEEN 26766 AND 26787 OR srid BETWEEN 26791 AND 26799 OR srid BETWEEN 26801 AND 26803 OR srid BETWEEN 26811 AND 26815 OR srid BETWEEN 26819 AND 26826 OR srid BETWEEN 26830 AND 26837 OR srid BETWEEN 26841 AND 26870 OR srid BETWEEN 26891 AND 26899 OR srid BETWEEN 26901 AND 26923 OR srid BETWEEN 26929 AND 26946 OR srid BETWEEN 26948 AND 26998 OR srid BETWEEN 27037 AND 27040 OR srid BETWEEN 27120 AND 27120 OR srid BETWEEN 27200 AND 27200 OR srid BETWEEN 27205 AND 27232 OR srid BETWEEN 27258 AND 27260 OR srid BETWEEN 27291 AND 27292 OR srid BETWEEN 27391 AND 27398 OR srid BETWEEN 27429 AND 27429 OR srid BETWEEN 27492 AND 27493 OR srid BETWEEN 27500 AND 27500 OR srid BETWEEN 27561 AND 27564 OR srid BETWEEN 27571 AND 27574 OR srid BETWEEN 27581 AND 27584 OR srid BETWEEN 27591 AND 27594 OR srid BETWEEN 27700 AND 27700 OR srid BETWEEN 28191 AND 28193 OR srid BETWEEN 28232 AND 28232 OR srid BETWEEN 28348 AND 28358 OR srid BETWEEN 28402 AND 28432 OR srid BETWEEN 28462 AND 28492 OR srid BETWEEN 28600 AND 28600 OR srid BETWEEN 28991 AND 28992 OR srid BETWEEN 29100 AND 29101 OR srid BETWEEN 29118 AND 29122 OR srid BETWEEN 29168 AND 29172 OR srid BETWEEN 29177 AND 29185 OR srid BETWEEN 29187 AND 29195 OR srid BETWEEN 29220 AND 29221 OR srid BETWEEN 29333 AND 29333 OR srid BETWEEN 29371 AND 29371 OR srid BETWEEN 29373 AND 29373 OR srid BETWEEN 29375 AND 29375 OR srid BETWEEN 29377 AND 29377 OR srid BETWEEN 29379 AND 29379 OR srid BETWEEN 29381 AND 29381 OR srid BETWEEN 29383 AND 29383 OR srid BETWEEN 29385 AND 29385 OR srid BETWEEN 29635 AND 29636 OR srid BETWEEN 29700 AND 29702 OR srid BETWEEN 29738 AND 29739 OR srid BETWEEN 29849 AND 29850 OR srid BETWEEN 29871 AND 29873 OR srid BETWEEN 29900 AND 29903 OR srid BETWEEN 30161 AND 30179 OR srid BETWEEN 30200 AND 30200 OR srid BETWEEN 30339 AND 30340 OR srid BETWEEN 30491 AND 30494 OR srid BETWEEN 30729 AND 30732 OR srid BETWEEN 30791 AND 30792 OR srid BETWEEN 30800 AND 30800 OR srid BETWEEN 31028 AND 31028 OR srid BETWEEN 31121 AND 31121 OR srid BETWEEN 31154 AND 31154 OR srid BETWEEN 31170 AND 31171 OR srid BETWEEN 31251 AND 31259 OR srid BETWEEN 31265 AND 31268 OR srid BETWEEN 31275 AND 31279 OR srid BETWEEN 31281 AND 31297 OR srid BETWEEN 31300 AND 31300 OR srid BETWEEN 31370 AND 31370 OR srid BETWEEN 31461 AND 31469 OR srid BETWEEN 31528 AND 31529 OR srid BETWEEN 31600 AND 31600 OR srid BETWEEN 31700 AND 31700 OR srid BETWEEN 31838 AND 31839 OR srid BETWEEN 31900 AND 31901 OR srid BETWEEN 31965 AND 32003 OR srid BETWEEN 32005 AND 32031 OR srid BETWEEN 32033 AND 32058 OR srid BETWEEN 32061 AND 32062 OR srid BETWEEN 32064 AND 32067 OR srid BETWEEN 32074 AND 32077 OR srid BETWEEN 32081 AND 32086 OR srid BETWEEN 32098 AND 32100 OR srid BETWEEN 32104 AND 32104 OR srid BETWEEN 32107 AND 32130 OR srid BETWEEN 32133 AND 32158 OR srid BETWEEN 32161 AND 32161 OR srid BETWEEN 32164 AND 32167 OR srid BETWEEN 32180 AND 32199 OR srid BETWEEN 32201 AND 32260 OR srid BETWEEN 32301 AND 32360 OR srid BETWEEN 32401 AND 32460 OR srid BETWEEN 32501 AND 32560 OR srid BETWEEN 32601 AND 32662 OR srid BETWEEN 32664 AND 32667 OR srid BETWEEN 32701 AND 32761 OR srid BETWEEN 32766 AND 32766 OR srid BETWEEN 900913 AND 900913)'); ��������������������postgis-2.1.2+dfsg.orig/extensions/postgis/sql_bits/remove_from_extension.sql.in��������������������0000644�0000000�0000000�00000003017�12304770217�027035� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: remove_from_extension.sql.in 12288 2014-03-03 03:01:35Z robe $ ---- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2011 Regina Obe <lr@pcorp.us> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- Author: Regina Obe <lr@pcorp.us> -- -- This drops extension helper functions -- and should be called at the end of the extension upgrade file -- removes all postgis_topology functions from postgis_topology extension since they will be readded -- during upgrade SELECT postgis_extension_remove_objects('postgis', 'FUNCTION'); SELECT postgis_extension_remove_objects('postgis', 'AGGREGATE'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP VIEW raster_columns'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE wktgeomval'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE _wktgeomval'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE raster_columns'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE _raster_columns'); -- these got changed to out paramters in 2.1 SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE summarystats'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE quantile'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE valuecount'); SELECT postgis_extension_drop_if_exists('postgis', 'DROP TYPE histogram'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/extensions/postgis/Makefile.in����������������������������������������������0000644�0000000�0000000�00000017410�12315270322�021514� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������include ../upgradeable_versions.mk EXTENSION = postgis EXTVERSION = @POSTGIS_LIB_VERSION@ MINORVERSION = @POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ GREP = @GREP@ MICRO_NUMBER = $(shell echo $(EXTVERSION) | sed "s/[0-9]\.[0-9]\.\([0-9]*\)[a-zA-Z]*[0-9]*/\1/") PREREL_NUMBER = $(shell echo $(EXTVERSION) | \ sed "s/[0-9]\.[0-9]\.\(.*\)/\1/" | \ $(GREP) "[a-zA-Z]" | \ sed "s/[0-9][a-zA-Z]\([0-9]*\)[a-zA-Z]*/\1/") MICRO_PREV = $(shell if test "$(MICRO_NUMBER)x" != "x"; then expr $(MICRO_NUMBER) - 1; fi) PREREL_PREV = $(shell if test "$(PREREL_NUMBER)x" != "x"; then expr $(PREREL_NUMBER) - 1; fi) PREREL_PREFIX = $(shell echo $(EXTVERSION) | \ sed "s/[0-9]\.[0-9]\.\(.*\)/\1/" | \ $(GREP) "[a-zA-Z]" | \ sed "s/\([0-9][a-zA-Z]*\)[0-9]*/\1/") DATA = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql)) #DOCS = $(wildcard ../../doc/html/*.html) PG_CONFIG = @PG_CONFIG@ PG91 = $(shell $(PG_CONFIG) --version | $(GREP) -qE " 8\.| 9\.0" && echo no || echo yes) SQL_BITS = $(wildcard sql_bits/*.sql) EXTRA_CLEAN += ${SQL_BITS} sql/*.sql ifeq ($(PG91),yes) sql/$(EXTENSION).sql: sql_bits/postgis.sql sql_bits/postgis_comments.sql sql_bits/rtpostgis.sql sql_bits/mark_editable_objects.sql.in sql_bits/raster_comments.sql sql_bits/spatial_ref_sys.sql mkdir -p sql cat $^ > $@ all: sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql sql/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql sql_minor_upgrade sql_patch_upgrade sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql mkdir -p sql cp $< $@ sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql: sql_bits/postgis--unpackaged.sql.in mkdir -p sql cp $< $@ #this is a cludge to allow upgrading from same SVN to same SVN sql/$(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql: sql_bits/extension_upgrade_patch.sql cp $< $@ sql/$(EXTENSION)--$(EXTVERSION)next--$(EXTVERSION).sql: sql_bits/extension_upgrade_patch.sql cp $< $@ #strip BEGIN/COMMIT since these are not allowed in extensions sql_bits/spatial_ref_sys.sql: ../../spatial_ref_sys.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' $< > $@ #strip BEGIN/COMMIT since these are not allowed in extensions sql_bits/postgis.sql: ../../postgis/postgis.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' $< > $@ ../../doc/postgis_comments.sql: $(MAKE) -C ../../doc comments sql_bits/postgis_comments.sql: ../../doc/postgis_comments.sql cp $< $@ #strip BEGIN/COMMIT since these are not allowed in extensions sql_bits/rtpostgis.sql: ../../raster/rt_pg/rtpostgis.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' $< > $@ # we need to also drop this temporary function from the extension # for casts that are being dropped we need to drop them # from extension only if they are in the existension so we use our postgis_extension_drop.. # so that it will silently fail if cast is not in extension sql_bits/rtpostgis_upgrade_20_21.sql: ../../raster/rt_pg/rtpostgis_upgrade_20_21.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' \ -e 's/DROP FUNCTION _rename_raster_tables();/ALTER EXTENSION ${EXTENSION} DROP FUNCTION _rename_raster_tables();DROP FUNCTION _rename_raster_tables();/g' \ -e 's/DROP FUNCTION _drop_st_samealignment();/ALTER EXTENSION ${EXTENSION} DROP FUNCTION _drop_st_samealignment();DROP FUNCTION _drop_st_samealignment();/g' \ -e 's/DROP CAST\(.*\)/SELECT postgis_extension_drop_if_exists('\''$(EXTENSION)'\'', '\''DROP CAST \1'\'');DROP CAST \1/' \ $< > $@ sql_bits/rtpostgis_upgrade_21_minor.sql: ../../raster/rt_pg/rtpostgis_upgrade_21_minor.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' \ -e 's/DROP FUNCTION _rename_raster_tables();/ALTER EXTENSION ${EXTENSION} DROP FUNCTION _rename_raster_tables();DROP FUNCTION _rename_raster_tables();/g' \ -e 's/DROP FUNCTION _drop_st_samealignment();/ALTER EXTENSION ${EXTENSION} DROP FUNCTION _drop_st_samealignment();DROP FUNCTION _drop_st_samealignment();/g' \ -e 's/DROP CAST\(.*\)/SELECT postgis_extension_drop_if_exists('\''$(EXTENSION)'\'', '\''DROP CAST \1'\'');DROP CAST \1/' \ $< > $@ #don't drop casts just yet since we don't have provision to remove from extension yet #need to also drop temporary functions from extenions since it gets auto-added sql_bits/postgis_upgrade_20_21.sql: ../../postgis/postgis_upgrade_20_21.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' \ -e '/^\(DROP\|CREATE\) \(CAST\).*;/d' \ -e '/^\(DROP\|CREATE\) \(CAST\)/,/\;/d' \ -e 's/DROP FUNCTION postgis_major_version_check();/ALTER EXTENSION ${EXTENSION} DROP FUNCTION postgis_major_version_check();DROP FUNCTION postgis_major_version_check();/g' \ $< > $@ sql_bits/postgis_upgrade_21_minor.sql: ../../postgis/postgis_upgrade_21_minor.sql sed -e 's/BEGIN;//g' -e 's/COMMIT;//g' \ -e '/^\(DROP\|CREATE\) \(CAST\).*;/d' \ -e '/^\(DROP\|CREATE\) \(CAST\)/,/\;/d' \ -e 's/DROP FUNCTION postgis_major_version_check();/ALTER EXTENSION ${EXTENSION} DROP FUNCTION postgis_major_version_check();DROP FUNCTION postgis_major_version_check();/g' \ $< > $@ ../../doc/raster_comments.sql: $(MAKE) -C ../../doc comments sql_bits/raster_comments.sql: ../../doc/raster_comments.sql cp $< $@ #extension_upgrade_minor.sql is the one that contains both postgis AND raster #TODO: what about postgis_drop_after.sql ? where does it fit ?? sql_bits/extension_upgrade_minor.sql: ../postgis_extension_helper.sql sql_bits/postgis_upgrade_20_21.sql sql_bits/rtpostgis_upgrade_20_21.sql ../../doc/raster_comments.sql ../../doc/postgis_comments.sql ../postgis_extension_helper_uninstall.sql cat $^ > $@ sql_bits/extension_upgrade_patch.sql: ../postgis_extension_helper.sql sql_bits/postgis_upgrade_21_minor.sql sql_bits/rtpostgis_upgrade_21_minor.sql ../../doc/raster_comments.sql ../../doc/postgis_comments.sql ../postgis_extension_helper_uninstall.sql cat $^ > $@ # sql_bits/rtpostgis--unpackaged.sql: ../../raster/rt_pg/rtpostgis.sql # sed -e 's/^[\t]*//' \ # -e :a -e '$!N; s/,\n/,/; ta' \ # $< > $@ #remove leading white space and tabs #remove line break from a line if it ends in , sql_bits/rtpostgis-filtered.sql: ../../raster/rt_pg/rtpostgis.sql sed \ -e 's/^[\t]*//' \ $< > $@ ## we are going to hard code for now using sql script to generate unpackage script # sql_bits/rtpostgis--unpackaged.sql: ../../raster/rt_pg/rtpostgis.sql # sed \ # -e 's/^[\t]*//' \ # -e '$!N; s/(\n/(/g' \ # -e '/^CREATE \(OR REPLACE FUNCTION\|TRIGGER\|TYPE\|TABLE\|VIEW\)/!d;' \ # -e 's/OR REPLACE//g' \ # -e 's/CREATE\(.*\)/ALTER EXTENSION $(EXTENSION) ADD\1;/' \ # -e 's/DEFAULT [^()]\+//g' \ # -e 's/\(BEFORE\|AS\|RETURNS\)\(.*\)/;/' \ # -e 's/(;/;/' \ # -e 's/\\(;/;/' \ # -e 's/;;/;/g' $< > $@ # sql_bits/postgis--unpackaged.sql: ../../postgis/postgis.sql # sed -e '/^CREATE \(OR REPLACE\|TRIGGER\|TYPE\|TABLE\|VIEW\)/!d;' \ # -e 's/OR REPLACE//g' \ # -e 's/CREATE\(.*\)/ALTER EXTENSION $(EXTENSION) ADD\1;/' \ # -e 's/DEFAULT [\.0-9a-zA-Z]\+//g' \ # -e 's/\(BEFORE\|AS\|RETURNS\)\(.*\)/;/' \ # -e 's/(;/;/' \ # -e 's/\\(;/;/' \ # -e 's/;;/;/g' $< > $@ sql/postgis--unpackaged--$(EXTVERSION).sql: sql_bits/postgis--unpackaged.sql.in sql_minor_upgrade: sql_bits/extension_upgrade_minor.sql for OLD_VERSION in $(UPGRADEABLE_VERSIONS_MINOR); do \ cat $< > sql/$(EXTENSION)--$$OLD_VERSION--$(EXTVERSION).sql; \ done sql_patch_upgrade: sql_bits/extension_upgrade_patch.sql for OLD_VERSION in $(UPGRADEABLE_VERSIONS_PATCH); do \ cat $< > sql/$(EXTENSION)--$$OLD_VERSION--$(EXTVERSION).sql; \ done DATA = $(wildcard sql/*--*.sql) EXTRA_CLEAN += sql/$(EXTENSION)--$(EXTVERSION).sql sql/postgis--unpackaged--$(EXTVERSION).sql endif distclean: clean rm -f Makefile PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/authors.git�����������������������������������������������������������������0000644�0000000�0000000�00000002330�11756655132�015763� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������benjubb = Ben Jubb <benjubb@refractions.net> chodgson = Chris Hodgson <chodgson@refractions.net> colivier = Olivier Courtin <olivier.courtin@camptocamp.com> cvs = No Body <no@body.net> dblasby = David Blasby <dblasby@gmail.com> devrim = Devrim GÜNDÜZ <devrim@gunduz.org> dustymugs = Bborie Park <bkpark at ucdavis.edu> dzwarg = David Zwarg <dzwarg@azavea.com> jeffloun = Jeff Lounsbury <jeffloun@refractions.net> jorgearevalo = Jorge Arévalo <jorge.arevalo at deimos-space.com> kneufeld = Kevin Neufeld <kneufeld.ca@gmail.com> mcayland = Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> mleslie = Mark Leslie <mark.leslie@lisasoft.com> mloskot = Mateusz Loskot <mateusz@loskot.net> mschaber = Markus Schaber <markus@schabi.de> nbarker = Norman Barker <nbarker@ittvis.com> nicklas = Nicklas Avén <nicklas.aven@jordogskog.no> pracine = Pierre Racine <Pierre.Racine@sbf.ulaval.ca> pramsey = Paul Ramsey <pramsey@cleverelephant.ca> rmason = Ralph Mason <ralph.mason@telogis.com> robe = Regina Obe <lr@pcorp.us> snowman = Stephen Frost <sfrost@snowman.net> strk = Sandro Santilli <strk@keybit.net> warmerdam = Frank Warmerdam <warmerdam@pobox.com> xingkth = Xing Lin <solo.lin@gmail.com> yecarrillo = Eduin Carrillo <yecarrillo@yahoo.com> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis_config.h.in���������������������������������������������������������0000644�0000000�0000000�00000011332�11727672212�017362� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* postgis_config.h.in. Generated from configure.ac by autoheader. */ #include "postgis_svn_revision.h" /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if GDALFPolygonize function is available */ #undef GDALFPOLYGONIZE /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define for some functions we are interested in */ #undef HAVE_VASPRINTF #undef HAVE_ASPRINTF #undef HAVE_FSEEKO /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the `iconvctl' function. */ #undef HAVE_ICONVCTL /* ieeefp.h header */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `geos_c' library (-lgeos_c). */ #undef HAVE_LIBGEOS_C /* Define to 1 if you have the `libiconvctl' function. */ #undef HAVE_LIBICONVCTL /* Define to 1 if libjson is present */ #undef HAVE_LIBJSON /* Define to 1 if you have the `pq' library (-lpq). */ #undef HAVE_LIBPQ /* Define to 1 if you have the `proj' library (-lproj). */ #undef HAVE_LIBPROJ /* Define to 1 if you have the `xml2' library (-lxml2). */ #undef HAVE_LIBXML2 /* Define to 1 if you have the <libxml/parser.h> header file. */ #undef HAVE_LIBXML_PARSER_H /* Define to 1 if you have the <libxml/tree.h> header file. */ #undef HAVE_LIBXML_TREE_H /* Define to 1 if you have the <libxml/xpathInternals.h> header file. */ #undef HAVE_LIBXML_XPATHINTERNALS_H /* Define to 1 if you have the <libxml/xpath.h> header file. */ #undef HAVE_LIBXML_XPATH_H /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Location of PostgreSQL locale directory */ #undef PGSQL_LOCALEDIR /* Enable caching of bounding box within geometries */ #undef POSTGIS_AUTOCACHE_BBOX /* PostGIS build date */ #undef POSTGIS_BUILD_DATE /* PostGIS library debug level (0=disabled) */ #undef POSTGIS_DEBUG_LEVEL /* GDAL library version */ #undef POSTGIS_GDAL_VERSION /* GEOS library version */ #undef POSTGIS_GEOS_VERSION /* PostGIS libxml2 version */ #undef POSTGIS_LIBXML2_VERSION /* PostGIS library version */ #undef POSTGIS_LIB_VERSION /* PostGIS major version */ #undef POSTGIS_MAJOR_VERSION /* PostGIS minor version */ #undef POSTGIS_MINOR_VERSION /* PostGIS micro version */ #undef POSTGIS_MICRO_VERSION /* PostgreSQL server version */ #undef POSTGIS_PGSQL_VERSION /* Enable GEOS profiling (0=disabled) */ #undef POSTGIS_PROFILE /* PROJ library version */ #undef POSTGIS_PROJ_VERSION /* PostGIS Raster build date */ #undef POSTGIS_RASTER_BUILD_DATE /* PostGIS Raster library version */ #undef POSTGIS_RASTER_LIB_VERSION /* PostGIS Raster major version */ #undef POSTGIS_RASTER_MAJOR_VERSION /* PostGIS Raster micro version */ #undef POSTGIS_RASTER_MICRO_VERSION /* PostGIS Raster minor version */ #undef POSTGIS_RASTER_MINOR_VERSION /* PostGIS Raster scripts version */ #undef POSTGIS_RASTER_SCRIPTS_VERSION /* PostGIS Raster version */ #undef POSTGIS_RASTER_VERSION /* Define to 1 if a warning is outputted every time a double is truncated */ #undef POSTGIS_RASTER_WARN_ON_TRUNCATION /* PostGIS scripts version */ #undef POSTGIS_SCRIPTS_VERSION /* Enable use of ANALYZE statistics */ #undef POSTGIS_USE_STATS /* PostGIS version */ #undef POSTGIS_VERSION /* Define command to determine the current directory during regression */ #undef PWDREGRESS /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/install-sh������������������������������������������������������������������0000755�0000000�0000000�00000033256�12315456230�015576� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 or substantial portions of the 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/STYLE�����������������������������������������������������������������������0000644�0000000�0000000�00000004504�11722777314�014421� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Coding Style Guidelines for PostGIS ----------------------------------- :Preamble: PostGIS was created over many years, by many different people, some in a hurry. As a result, the existing coding style is all over the map. We recognize this, and understand it will be the work of many years before PostGIS has a consistently named internal set of functions, but, we can dream. If new functions follow this guideline, if we do a little rennovation work from time to time, we will eventually get there. :Formatting: All C code should use an ANSI standard formatting with tabs for block indenting. When not block indenting, use spaces. To convert a file to the standard format use: astyle --style=ansi --indent=tab Do not get too happy with this command. If you want to re-format a file you are working on: a) run astyle on it b) commit c) do your work d) commit e) if you are really finicky run astyle again f) commit The idea is to avoid combining style-only commits and commits that change logic, so the logic commits are easier to read. Macros should be ALL_UPPERCASE. Enumerations should be ALL_UPPERCASE. Comments should be written in C style (/* .... */) and not C++ style (//) When describing a function, the description should be right above the function and should start with /** This is so the function description can be picked up by the doxygen autodocumentor. For example /** * Does something funny */ double funny_function(POINT2D *p1, POINT2D *p2, POINT2D *q){ funny stuff here; } More advanced commenting /** * Does something funny * * @param p1 : first point * @param p2 : second point * @param q : the quiet point * * @return a funny double number */ double funny_function(POINT2D *p1, POINT2D *p2, POINT2D *q){ funny stuff here; } :Naming: For ./liblwgeom: - Files should be named with an lw prefix. - Functions should have an lw prefix (lw_get_point). - Function names should use underscores, not camel case. - Function names should indicate the geometry type of inputs if relevant (lwline_split) For ./postgis: - C functions called by the back-end directly (function(PG_FUNCTION_ARGS)) should be named to match their most likely SQL alias. So the SQL ST_Distance(geometry) maps to the C function ST_Distance(PG_FUNCTION_ARG) - C utility functions should be prefixed with pgis_ (lower case) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/MIGRATION�������������������������������������������������������������������0000644�0000000�0000000�00000016265�11734066153�015054� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS 2.0 Migration Guide =========================== PostGIS 2.0 introduces changes that may affect backwards compatibility for some applications. This document lists those changes. Deprecated Functions Removed ---------------------------- Since PostGIS 1.2, we have been encouraging users to use functions with the ST_ prefix. The ST_ prefixed functions are part of the ISO SQL/MM standard and used by other spatial SQL databases, so we want to conform as closely to the industry usage as we can. At 2.0, we have finally removed the old functions. If you have an application that *still* requires the old function signatures, please look to the legacy_*.sql files to add the old signatures back in. If you are using MapServer, upgrade to the latest versions of the 6.0 or 6.2 releases. For earlier releases, you will have to install the legacy.sql files. Unknown SRID ------------ The "unknown SRID", assigned to geometries when SRID is not specified, is now 0, not -1. ST_SRID will now return 0 when called on a geometry with no known SRID. ST_AsBinary, ST_AsText and 3D ----------------------------- Previous versions of PostGIS returned 2D versions of objects when ST_AsBinary and ST_AsText were called. PostGIS 2.0 returns ISO SQL/MM versions when 3D or 4D objects are used. For example, a 3D point with a Z dimension will return as 'POINT Z (0 0 0)'. A 4D point will return as 'POINT ZM (0 0 0 0)'. For WKB, extra dimensionality is indicated in the type numbers. The Z, M, and ZM type numbers are indicated by adding 1000, 2000, and 3000 respectively to the usual 2D type numbers. So, for example, a 2D Point has a type number of 1. A 4D PointZM has a type number of 3001. A 2D polygon has a type number of 3. A PolygonZ has a type number of 2003. geometry_columns ---------------- In PostGIS 2.0, the ``geometry_columns`` metadata has been changed from a table to a view. * For applications that manage ``geometry_columns`` using the standard AddGeometryColumn() and other methods, there should be no change. * Applications that have inserted directly into ``geometry_columns`` will need to either move to the standard functions, or change their create table syntax to include type/srid/dimensionality information. For example, to specify a 3D feature in WGS84:: CREATE TABLE mytable ( id SERIAL PRIMARY KEY, g Geometry(PointZ,4326) ); * Applications reading metadata from ``geometry_columns`` should expect that the geometry type strings will be mixed case and include the dimensionality modifiers. For example: PointZM, MultiLineStringZ. * If you have views built on tables that were built the old constraint way or that use processing functions to return new geometries, they will not register correctly in geometry_columns. They will all appear as Geometry with srid=0. In order to fix this, you have to cast the geometries in the view. So for example, If you had a view that looked like this: CREATE OR REPLACE VIEW vwparcels AS SELECT gid, parcel_id, ST_Transform(geom, 26986) As geom_26986, -- a transformed geometry geom, --one that used constraints before ST_Centroid(geom) As cent_geom -- one that used processing function FROM parcels; You will need to drop and recreate the view. Sadly CREATE OR REPLACE will not work since the casting makes geometries be treated as a different type as far as CREATE OR REPLACE is concerned. NOTE for this, it might help to lookup in geometry_columns to see the raw table srid/type Alternatively you can convert some of your table columns to typmod, then you would only need to CAST when doing processing. This however still requires you rebuild your dependent views DROP VIEW vwparcels; CREATE OR REPLACE VIEW vwparcels AS SELECT gid, parcel_id, ST_Transform(geom, 26986)::geometry(MultiPolygon,26986) As geom_26986, geom::geometry(MultiPolygon, 2249) As geom, ST_Centroid(geom)::geometry(Point,2249) As cent_geom FROM parcels; Restoring data from prior versions -- GOTCHAS ----------------------------------------------- The populate_geometry_columns() function in PostGIS 1.5 and below, used the deprecated functions ndims() and srid() for defining constraints. As a result these tables will not restore into a fresh PostGIS 2.0 database unless you 1) Drop these contraints before you restore the data or 2) Install the legacy functions srid() and ndims() found in the legacy.sql file before you try to restore these tables. Function is not unique after restore ------------------------------------- After you restore old data into a fresh PostGIS 2.0 database, YOU MUST install the uninstall_legacy.sql file after the restore. If you don't you will run into "function is not unique" errors in your applications. The other issue with having the old functions is the old functions you restore will be bound to the old postgis library which is incompatible with the new postgis geometry structures. If you still require legacy functions, you can install the legacy.sql file after the uninstall_legacy.sql. GOTCHA with uninstall_legacy.sql -------------------------------- The uninstall_legacy.sql will not be able to uninstall functions and will output errors detailing objects using these functions that are currently being used in views and sql functions. If you run it in PgAdmin, the whole script will rollback not uninstalling anything. So you should run it in PSQL mode. If you get errors in uninstall_legacy.sql -- convert those views and sql functions to use the newer equivalent functions and then rerun the script again. BENCHMARK NOTES ------------------------------ Querying a whole geometry_columns table of 200-240 someodd records (tables/views all constraint based)( On windows 9.1beta2) Speed for this set of data I'm okay with though a bit slower I think the main issue why fancy is slower is that to get the fancy name I need to do a double call to get dims since fancy_name needs dims as well This I expect to be much faster using typ_mod SELECT * FROM geometry_columns_v; -- 2063 ms, 1063 ms (using fancy name) SELECT * FROM geometry_columns_v2; -- 656 ms (this is not using fancy name) SELECT * FROM geometry_columns; -- original static table 31ms - 150 ms -- Doing single selects of a table -- constraint based one -- 76ms, 46ms SELECT * FROM geometry_columns_v where f_table_name = 'streets'; -- One I converted to typmod -- 76 ms, 48 ms (first call was slower) SELECT * FROM geometry_columns_v where f_table_name = 'buildings_1995'; --Filter query for schema -- -- these are constraint based (7 rows) -- 76 ms, 240 ms, 68 ms SELECT * FROM geometry_columns_v where f_table_schema = 'tiger'; -- CONVERTING TO Typmod as I feared is slow for tables with data. I think it follows the same model -- as converting varchar(100) to text or varchar(100) to varchar(300) etc. -- This maybe can be remedied somehow in 9.1 since it hasn't been released -- (haven't tried doing this exercise in 8.4, 9.0) -- This took 36,018 ms for table of 350,572 records. I assume it will be linear with number of records. ALTER TABLE buildings_1995 ALTER COLUMN the_geom TYPE geometry(MultiPolygon,2249); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/spatial_ref_sys.sql���������������������������������������������������������0000644�0000000�0000000�00015553352�12044060722�017510� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN; --- --- EPSG 3819 : HD1909 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3819,'EPSG',3819,'GEOGCS["HD1909",DATUM["Hungarian_Datum_1909",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408],AUTHORITY["EPSG","1024"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3819"]]','+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs '); --- --- EPSG 3821 : TWD67 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3821,'EPSG',3821,'GEOGCS["TWD67",DATUM["Taiwan_Datum_1967",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],AUTHORITY["EPSG","1025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3821"]]','+proj=longlat +ellps=aust_SA +no_defs '); --- --- EPSG 3824 : TWD97 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3824,'EPSG',3824,'GEOGCS["TWD97",DATUM["Taiwan_Datum_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1026"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3824"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 3889 : IGRS --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3889,'EPSG',3889,'GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 3906 : MGI 1901 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3906,'EPSG',3906,'GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]]','+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs '); --- --- EPSG 4001 : Unknown datum based upon the Airy 1830 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4001,'EPSG',4001,'GEOGCS["Unknown datum based upon the Airy 1830 ellipsoid",DATUM["Not_specified_based_on_Airy_1830_ellipsoid",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],AUTHORITY["EPSG","6001"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4001"]]','+proj=longlat +ellps=airy +no_defs '); --- --- EPSG 4002 : Unknown datum based upon the Airy Modified 1849 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4002,'EPSG',4002,'GEOGCS["Unknown datum based upon the Airy Modified 1849 ellipsoid",DATUM["Not_specified_based_on_Airy_Modified_1849_ellipsoid",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],AUTHORITY["EPSG","6002"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4002"]]','+proj=longlat +ellps=mod_airy +no_defs '); --- --- EPSG 4003 : Unknown datum based upon the Australian National Spheroid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4003,'EPSG',4003,'GEOGCS["Unknown datum based upon the Australian National Spheroid",DATUM["Not_specified_based_on_Australian_National_Spheroid",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],AUTHORITY["EPSG","6003"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4003"]]','+proj=longlat +ellps=aust_SA +no_defs '); --- --- EPSG 4004 : Unknown datum based upon the Bessel 1841 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4004,'EPSG',4004,'GEOGCS["Unknown datum based upon the Bessel 1841 ellipsoid",DATUM["Not_specified_based_on_Bessel_1841_ellipsoid",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6004"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4004"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4005 : Unknown datum based upon the Bessel Modified ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4005,'EPSG',4005,'GEOGCS["Unknown datum based upon the Bessel Modified ellipsoid",DATUM["Not_specified_based_on_Bessel_Modified_ellipsoid",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],AUTHORITY["EPSG","6005"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4005"]]','+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs '); --- --- EPSG 4006 : Unknown datum based upon the Bessel Namibia ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4006,'EPSG',4006,'GEOGCS["Unknown datum based upon the Bessel Namibia ellipsoid",DATUM["Not_specified_based_on_Bessel_Namibia_ellipsoid",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],AUTHORITY["EPSG","6006"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4006"]]','+proj=longlat +ellps=bess_nam +no_defs '); --- --- EPSG 4007 : Unknown datum based upon the Clarke 1858 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4007,'EPSG',4007,'GEOGCS["Unknown datum based upon the Clarke 1858 ellipsoid",DATUM["Not_specified_based_on_Clarke_1858_ellipsoid",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6007"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4007"]]','+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs '); --- --- EPSG 4008 : Unknown datum based upon the Clarke 1866 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4008,'EPSG',4008,'GEOGCS["Unknown datum based upon the Clarke 1866 ellipsoid",DATUM["Not_specified_based_on_Clarke_1866_ellipsoid",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6008"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4008"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4009 : Unknown datum based upon the Clarke 1866 Michigan ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4009,'EPSG',4009,'GEOGCS["Unknown datum based upon the Clarke 1866 Michigan ellipsoid",DATUM["Not_specified_based_on_Clarke_1866_Michigan_ellipsoid",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6009"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4009"]]','+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs '); --- --- EPSG 4010 : Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4010,'EPSG',4010,'GEOGCS["Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_Benoit_ellipsoid",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],AUTHORITY["EPSG","6010"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4010"]]','+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs '); --- --- EPSG 4011 : Unknown datum based upon the Clarke 1880 (IGN) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4011,'EPSG',4011,'GEOGCS["Unknown datum based upon the Clarke 1880 (IGN) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_IGN_ellipsoid",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6011"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4011"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4012 : Unknown datum based upon the Clarke 1880 (RGS) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4012,'EPSG',4012,'GEOGCS["Unknown datum based upon the Clarke 1880 (RGS) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_RGS_ellipsoid",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6012"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4012"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4013 : Unknown datum based upon the Clarke 1880 (Arc) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4013,'EPSG',4013,'GEOGCS["Unknown datum based upon the Clarke 1880 (Arc) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_Arc_ellipsoid",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],AUTHORITY["EPSG","6013"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4013"]]','+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs '); --- --- EPSG 4014 : Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4014,'EPSG',4014,'GEOGCS["Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_SGA_1922_ellipsoid",SPHEROID["Clarke 1880 (SGA 1922)",6378249.2,293.46598,AUTHORITY["EPSG","7014"]],AUTHORITY["EPSG","6014"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4014"]]','+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs '); --- --- EPSG 4015 : Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4015,'EPSG',4015,'GEOGCS["Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1937_Adjustment_ellipsoid",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],AUTHORITY["EPSG","6015"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4015"]]','+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs '); --- --- EPSG 4016 : Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4016,'EPSG',4016,'GEOGCS["Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1967_Definition_ellipsoid",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],AUTHORITY["EPSG","6016"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4016"]]','+proj=longlat +ellps=evrstSS +no_defs '); --- --- EPSG 4018 : Unknown datum based upon the Everest 1830 Modified ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4018,'EPSG',4018,'GEOGCS["Unknown datum based upon the Everest 1830 Modified ellipsoid",DATUM["Not_specified_based_on_Everest_1830_Modified_ellipsoid",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],AUTHORITY["EPSG","6018"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4018"]]','+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs '); --- --- EPSG 4019 : Unknown datum based upon the GRS 1980 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4019,'EPSG',4019,'GEOGCS["Unknown datum based upon the GRS 1980 ellipsoid",DATUM["Not_specified_based_on_GRS_1980_ellipsoid",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6019"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4019"]]','+proj=longlat +ellps=GRS80 +no_defs '); --- --- EPSG 4020 : Unknown datum based upon the Helmert 1906 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4020,'EPSG',4020,'GEOGCS["Unknown datum based upon the Helmert 1906 ellipsoid",DATUM["Not_specified_based_on_Helmert_1906_ellipsoid",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6020"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4020"]]','+proj=longlat +ellps=helmert +no_defs '); --- --- EPSG 4021 : Unknown datum based upon the Indonesian National Spheroid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4021,'EPSG',4021,'GEOGCS["Unknown datum based upon the Indonesian National Spheroid",DATUM["Not_specified_based_on_Indonesian_National_Spheroid",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],AUTHORITY["EPSG","6021"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4021"]]','+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs '); --- --- EPSG 4022 : Unknown datum based upon the International 1924 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4022,'EPSG',4022,'GEOGCS["Unknown datum based upon the International 1924 ellipsoid",DATUM["Not_specified_based_on_International_1924_ellipsoid",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6022"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4022"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4023 : MOLDREF99 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4023,'EPSG',4023,'GEOGCS["MOLDREF99",DATUM["MOLDREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","1032"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4023"]]','+proj=longlat +ellps=GRS80 +no_defs '); --- --- EPSG 4024 : Unknown datum based upon the Krassowsky 1940 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4024,'EPSG',4024,'GEOGCS["Unknown datum based upon the Krassowsky 1940 ellipsoid",DATUM["Not_specified_based_on_Krassowsky_1940_ellipsoid",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6024"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4024"]]','+proj=longlat +ellps=krass +no_defs '); --- --- EPSG 4025 : Unknown datum based upon the NWL 9D ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4025,'EPSG',4025,'GEOGCS["Unknown datum based upon the NWL 9D ellipsoid",DATUM["Not_specified_based_on_NWL_9D_ellipsoid",SPHEROID["NWL 9D",6378145,298.25,AUTHORITY["EPSG","7025"]],AUTHORITY["EPSG","6025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4025"]]','+proj=longlat +ellps=WGS66 +no_defs '); --- --- EPSG 4027 : Unknown datum based upon the Plessis 1817 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4027,'EPSG',4027,'GEOGCS["Unknown datum based upon the Plessis 1817 ellipsoid",DATUM["Not_specified_based_on_Plessis_1817_ellipsoid",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6027"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4027"]]','+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs '); --- --- EPSG 4028 : Unknown datum based upon the Struve 1860 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4028,'EPSG',4028,'GEOGCS["Unknown datum based upon the Struve 1860 ellipsoid",DATUM["Not_specified_based_on_Struve_1860_ellipsoid",SPHEROID["Struve 1860",6378298.3,294.73,AUTHORITY["EPSG","7028"]],AUTHORITY["EPSG","6028"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4028"]]','+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs '); --- --- EPSG 4029 : Unknown datum based upon the War Office ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4029,'EPSG',4029,'GEOGCS["Unknown datum based upon the War Office ellipsoid",DATUM["Not_specified_based_on_War_Office_ellipsoid",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4029"]]','+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs '); --- --- EPSG 4030 : Unknown datum based upon the WGS 84 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4030,'EPSG',4030,'GEOGCS["Unknown datum based upon the WGS 84 ellipsoid",DATUM["Not_specified_based_on_WGS_84_ellipsoid",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6030"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4030"]]','+proj=longlat +ellps=WGS84 +no_defs '); --- --- EPSG 4031 : Unknown datum based upon the GEM 10C ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4031,'EPSG',4031,'GEOGCS["Unknown datum based upon the GEM 10C ellipsoid",DATUM["Not_specified_based_on_GEM_10C_ellipsoid",SPHEROID["GEM 10C",6378137,298.257223563,AUTHORITY["EPSG","7031"]],AUTHORITY["EPSG","6031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4031"]]','+proj=longlat +ellps=WGS84 +no_defs '); --- --- EPSG 4032 : Unknown datum based upon the OSU86F ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4032,'EPSG',4032,'GEOGCS["Unknown datum based upon the OSU86F ellipsoid",DATUM["Not_specified_based_on_OSU86F_ellipsoid",SPHEROID["OSU86F",6378136.2,298.257223563,AUTHORITY["EPSG","7032"]],AUTHORITY["EPSG","6032"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4032"]]','+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs '); --- --- EPSG 4033 : Unknown datum based upon the OSU91A ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4033,'EPSG',4033,'GEOGCS["Unknown datum based upon the OSU91A ellipsoid",DATUM["Not_specified_based_on_OSU91A_ellipsoid",SPHEROID["OSU91A",6378136.3,298.257223563,AUTHORITY["EPSG","7033"]],AUTHORITY["EPSG","6033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4033"]]','+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs '); --- --- EPSG 4034 : Unknown datum based upon the Clarke 1880 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4034,'EPSG',4034,'GEOGCS["Unknown datum based upon the Clarke 1880 ellipsoid",DATUM["Not_specified_based_on_Clarke_1880_ellipsoid",SPHEROID["Clarke 1880",6378249.144808011,293.4663076556349,AUTHORITY["EPSG","7034"]],AUTHORITY["EPSG","6034"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4034"]]','+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs '); --- --- EPSG 4035 : Unknown datum based upon the Authalic Sphere --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4035,'EPSG',4035,'GEOGCS["Unknown datum based upon the Authalic Sphere",DATUM["Not_specified_based_on_Authalic_Sphere",SPHEROID["Sphere",6371000,0,AUTHORITY["EPSG","7035"]],AUTHORITY["EPSG","6035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4035"]]','+proj=longlat +a=6371000 +b=6371000 +no_defs '); --- --- EPSG 4036 : Unknown datum based upon the GRS 1967 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4036,'EPSG',4036,'GEOGCS["Unknown datum based upon the GRS 1967 ellipsoid",DATUM["Not_specified_based_on_GRS_1967_ellipsoid",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],AUTHORITY["EPSG","6036"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4036"]]','+proj=longlat +ellps=GRS67 +no_defs '); --- --- EPSG 4041 : Unknown datum based upon the Average Terrestrial System 1977 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4041,'EPSG',4041,'GEOGCS["Unknown datum based upon the Average Terrestrial System 1977 ellipsoid",DATUM["Not_specified_based_on_Average_Terrestrial_System_1977_ellipsoid",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6041"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4041"]]','+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs '); --- --- EPSG 4042 : Unknown datum based upon the Everest (1830 Definition) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4042,'EPSG',4042,'GEOGCS["Unknown datum based upon the Everest (1830 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_Definition_ellipsoid",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4042"]]','+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs '); --- --- EPSG 4043 : Unknown datum based upon the WGS 72 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4043,'EPSG',4043,'GEOGCS["Unknown datum based upon the WGS 72 ellipsoid",DATUM["Not_specified_based_on_WGS_72_ellipsoid",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],AUTHORITY["EPSG","6043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4043"]]','+proj=longlat +ellps=WGS72 +no_defs '); --- --- EPSG 4044 : Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4044,'EPSG',4044,'GEOGCS["Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1962_Definition_ellipsoid",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],AUTHORITY["EPSG","6044"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4044"]]','+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs '); --- --- EPSG 4045 : Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4045,'EPSG',4045,'GEOGCS["Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid",DATUM["Not_specified_based_on_Everest_1830_1975_Definition_ellipsoid",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],AUTHORITY["EPSG","6045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4045"]]','+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs '); --- --- EPSG 4046 : RGRDC 2005 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4046,'EPSG',4046,'GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4047 : Unspecified datum based upon the GRS 1980 Authalic Sphere --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4047,'EPSG',4047,'GEOGCS["Unspecified datum based upon the GRS 1980 Authalic Sphere",DATUM["Not_specified_based_on_GRS_1980_Authalic_Sphere",SPHEROID["GRS 1980 Authalic Sphere",6371007,0,AUTHORITY["EPSG","7048"]],AUTHORITY["EPSG","6047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4047"]]','+proj=longlat +a=6371007 +b=6371007 +no_defs '); --- --- EPSG 4052 : Unspecified datum based upon the Clarke 1866 Authalic Sphere --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4052,'EPSG',4052,'GEOGCS["Unspecified datum based upon the Clarke 1866 Authalic Sphere",DATUM["Not_specified_based_on_Clarke_1866_Authalic_Sphere",SPHEROID["Clarke 1866 Authalic Sphere",6370997,0,AUTHORITY["EPSG","7052"]],AUTHORITY["EPSG","6052"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4052"]]','+proj=longlat +a=6370997 +b=6370997 +no_defs '); --- --- EPSG 4053 : Unspecified datum based upon the International 1924 Authalic Sphere --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4053,'EPSG',4053,'GEOGCS["Unspecified datum based upon the International 1924 Authalic Sphere",DATUM["Not_specified_based_on_International_1924_Authalic_Sphere",SPHEROID["International 1924 Authalic Sphere",6371228,0,AUTHORITY["EPSG","7057"]],AUTHORITY["EPSG","6053"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4053"]]','+proj=longlat +a=6371228 +b=6371228 +no_defs '); --- --- EPSG 4054 : Unspecified datum based upon the Hughes 1980 ellipsoid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4054,'EPSG',4054,'GEOGCS["Unspecified datum based upon the Hughes 1980 ellipsoid",DATUM["Not_specified_based_on_Hughes_1980_ellipsoid",SPHEROID["Hughes 1980",6378273,298.279411123061,AUTHORITY["EPSG","7058"]],AUTHORITY["EPSG","6054"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4054"]]','+proj=longlat +a=6378273 +b=6356889.449 +no_defs '); --- --- EPSG 4055 : Popular Visualisation CRS --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4055,'EPSG',4055,'GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]]','+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4075 : SREF98 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4075,'EPSG',4075,'GEOGCS["SREF98",DATUM["Serbian_Reference_Network_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1034"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4075"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4081 : REGCAN95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4081,'EPSG',4081,'GEOGCS["REGCAN95",DATUM["Red_Geodesica_de_Canarias_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4081"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4120 : Greek --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4120,'EPSG',4120,'GEOGCS["Greek",DATUM["Greek",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6120"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4120"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4121 : GGRS87 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4121,'EPSG',4121,'GEOGCS["GGRS87",DATUM["Greek_Geodetic_Reference_System_1987",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-199.87,74.79,246.62,0,0,0,0],AUTHORITY["EPSG","6121"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4121"]]','+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs '); --- --- EPSG 4122 : ATS77 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4122,'EPSG',4122,'GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]]','+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs '); --- --- EPSG 4123 : KKJ --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4123,'EPSG',4123,'GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]]','+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs '); --- --- EPSG 4124 : RT90 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4124,'EPSG',4124,'GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]]','+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs '); --- --- EPSG 4125 : Samboja --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4125,'EPSG',4125,'GEOGCS["Samboja",DATUM["Samboja",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-404.78,685.68,45.47,0,0,0,0],AUTHORITY["EPSG","6125"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4125"]]','+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs '); --- --- EPSG 4126 : LKS94 (ETRS89) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4126,'EPSG',4126,'GEOGCS["LKS94 (ETRS89)",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4126"]]','+proj=longlat +ellps=GRS80 +no_defs '); --- --- EPSG 4127 : Tete --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4127,'EPSG',4127,'GEOGCS["Tete",DATUM["Tete",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104],AUTHORITY["EPSG","6127"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4127"]]','+proj=longlat +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +no_defs '); --- --- EPSG 4128 : Madzansua --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4128,'EPSG',4128,'GEOGCS["Madzansua",DATUM["Madzansua",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6128"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4128"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4129 : Observatario --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4129,'EPSG',4129,'GEOGCS["Observatario",DATUM["Observatario",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6129"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4129"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4130 : Moznet --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4130,'EPSG',4130,'GEOGCS["Moznet",DATUM["Moznet_ITRF94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY["EPSG","6130"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4130"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs '); --- --- EPSG 4131 : Indian 1960 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4131,'EPSG',4131,'GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]]','+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs '); --- --- EPSG 4132 : FD58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4132,'EPSG',4132,'GEOGCS["FD58",DATUM["Final_Datum_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-239.1,-170.02,397.5,0,0,0,0],AUTHORITY["EPSG","6132"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4132"]]','+proj=longlat +ellps=clrk80 +towgs84=-239.1,-170.02,397.5,0,0,0,0 +no_defs '); --- --- EPSG 4133 : EST92 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4133,'EPSG',4133,'GEOGCS["EST92",DATUM["Estonia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014],AUTHORITY["EPSG","6133"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4133"]]','+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs '); --- --- EPSG 4134 : PSD93 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4134,'EPSG',4134,'GEOGCS["PSD93",DATUM["PDO_Survey_Datum_1993",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101],AUTHORITY["EPSG","6134"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4134"]]','+proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs '); --- --- EPSG 4135 : Old Hawaiian --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4135,'EPSG',4135,'GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]]','+proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs '); --- --- EPSG 4136 : St. Lawrence Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4136,'EPSG',4136,'GEOGCS["St. Lawrence Island",DATUM["St_Lawrence_Island",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6136"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4136"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4137 : St. Paul Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4137,'EPSG',4137,'GEOGCS["St. Paul Island",DATUM["St_Paul_Island",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6137"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4137"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4138 : St. George Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4138,'EPSG',4138,'GEOGCS["St. George Island",DATUM["St_George_Island",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6138"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4138"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4139 : Puerto Rico --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4139,'EPSG',4139,'GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]]','+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs '); --- --- EPSG 4140 : NAD83(CSRS98) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4140,'EPSG',4140,'GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4141 : Israel --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4141,'EPSG',4141,'GEOGCS["Israel",DATUM["Israel",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-48,55,52,0,0,0,0],AUTHORITY["EPSG","6141"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4141"]]','+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs '); --- --- EPSG 4142 : Locodjo 1965 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4142,'EPSG',4142,'GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]]','+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs '); --- --- EPSG 4143 : Abidjan 1987 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4143,'EPSG',4143,'GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]]','+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs '); --- --- EPSG 4144 : Kalianpur 1937 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4144,'EPSG',4144,'GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]]','+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +no_defs '); --- --- EPSG 4145 : Kalianpur 1962 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4145,'EPSG',4145,'GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]]','+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs '); --- --- EPSG 4146 : Kalianpur 1975 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4146,'EPSG',4146,'GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]]','+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs '); --- --- EPSG 4147 : Hanoi 1972 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4147,'EPSG',4147,'GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]]','+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs '); --- --- EPSG 4148 : Hartebeesthoek94 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4148,'EPSG',4148,'GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4149 : CH1903 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4149,'EPSG',4149,'GEOGCS["CH1903",DATUM["CH1903",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6149"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4149"]]','+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs '); --- --- EPSG 4150 : CH1903+ --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4150,'EPSG',4150,'GEOGCS["CH1903+",DATUM["CH1903+",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.374,15.056,405.346,0,0,0,0],AUTHORITY["EPSG","6150"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4150"]]','+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs '); --- --- EPSG 4151 : CHTRF95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4151,'EPSG',4151,'GEOGCS["CHTRF95",DATUM["Swiss_Terrestrial_Reference_Frame_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6151"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4151"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4152 : NAD83(HARN) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4152,'EPSG',4152,'GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4153 : Rassadiran --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4153,'EPSG',4153,'GEOGCS["Rassadiran",DATUM["Rassadiran",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133.63,-157.5,-158.62,0,0,0,0],AUTHORITY["EPSG","6153"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4153"]]','+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs '); --- --- EPSG 4154 : ED50(ED77) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4154,'EPSG',4154,'GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]]','+proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs '); --- --- EPSG 4155 : Dabola 1981 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4155,'EPSG',4155,'GEOGCS["Dabola 1981",DATUM["Dabola_1981",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY["EPSG","6155"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4155"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs '); --- --- EPSG 4156 : S-JTSK --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4156,'EPSG',4156,'GEOGCS["S-JTSK",DATUM["Jednotne_Trigonometricke_Site_Katastralni",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6156"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4156"]]','+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs '); --- --- EPSG 4157 : Mount Dillon --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4157,'EPSG',4157,'GEOGCS["Mount Dillon",DATUM["Mount_Dillon",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6157"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4157"]]','+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs '); --- --- EPSG 4158 : Naparima 1955 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4158,'EPSG',4158,'GEOGCS["Naparima 1955",DATUM["Naparima_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-0.465,372.095,171.736,0,0,0,0],AUTHORITY["EPSG","6158"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4158"]]','+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs '); --- --- EPSG 4159 : ELD79 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4159,'EPSG',4159,'GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]]','+proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs '); --- --- EPSG 4160 : Chos Malal 1914 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4160,'EPSG',4160,'GEOGCS["Chos Malal 1914",DATUM["Chos_Malal_1914",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6160"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4160"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4161 : Pampa del Castillo --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4161,'EPSG',4161,'GEOGCS["Pampa del Castillo",DATUM["Pampa_del_Castillo",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[27.5,14,186.4,0,0,0,0],AUTHORITY["EPSG","6161"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4161"]]','+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs '); --- --- EPSG 4162 : Korean 1985 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4162,'EPSG',4162,'GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4163 : Yemen NGN96 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4163,'EPSG',4163,'GEOGCS["Yemen NGN96",DATUM["Yemen_National_Geodetic_Network_1996",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6163"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4163"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4164 : South Yemen --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4164,'EPSG',4164,'GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]]','+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs '); --- --- EPSG 4165 : Bissau --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4165,'EPSG',4165,'GEOGCS["Bissau",DATUM["Bissau",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-173,253,27,0,0,0,0],AUTHORITY["EPSG","6165"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4165"]]','+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs '); --- --- EPSG 4166 : Korean 1995 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4166,'EPSG',4166,'GEOGCS["Korean 1995",DATUM["Korean_Datum_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6166"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4166"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4167 : NZGD2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4167,'EPSG',4167,'GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4168 : Accra --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4168,'EPSG',4168,'GEOGCS["Accra",DATUM["Accra",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],TOWGS84[-199,32,322,0,0,0,0],AUTHORITY["EPSG","6168"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4168"]]','+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs '); --- --- EPSG 4169 : American Samoa 1962 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4169,'EPSG',4169,'GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]]','+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs '); --- --- EPSG 4170 : SIRGAS 1995 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4170,'EPSG',4170,'GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4171 : RGF93 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4171,'EPSG',4171,'GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4172 : POSGAR --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4172,'EPSG',4172,'GEOGCS["POSGAR",DATUM["Posiciones_Geodesicas_Argentinas",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6172"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4172"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4173 : IRENET95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4173,'EPSG',4173,'GEOGCS["IRENET95",DATUM["IRENET95",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6173"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4173"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4174 : Sierra Leone 1924 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4174,'EPSG',4174,'GEOGCS["Sierra Leone 1924",DATUM["Sierra_Leone_Colony_1924",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6174"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4174"]]','+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs '); --- --- EPSG 4175 : Sierra Leone 1968 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4175,'EPSG',4175,'GEOGCS["Sierra Leone 1968",DATUM["Sierra_Leone_1968",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY["EPSG","6175"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4175"]]','+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs '); --- --- EPSG 4176 : Australian Antarctic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4176,'EPSG',4176,'GEOGCS["Australian Antarctic",DATUM["Australian_Antarctic_Datum_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6176"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4176"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4178 : Pulkovo 1942(83) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4178,'EPSG',4178,'GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]]','+proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs '); --- --- EPSG 4179 : Pulkovo 1942(58) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4179,'EPSG',4179,'GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]]','+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs '); --- --- EPSG 4180 : EST97 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4180,'EPSG',4180,'GEOGCS["EST97",DATUM["Estonia_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6180"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4180"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4181 : Luxembourg 1930 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4181,'EPSG',4181,'GEOGCS["Luxembourg 1930",DATUM["Luxembourg_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-193,13.7,-39.3,-0.41,-2.933,2.688,0.43],AUTHORITY["EPSG","6181"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4181"]]','+proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs '); --- --- EPSG 4182 : Azores Occidental 1939 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4182,'EPSG',4182,'GEOGCS["Azores Occidental 1939",DATUM["Azores_Occidental_Islands_1939",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-425,-169,81,0,0,0,0],AUTHORITY["EPSG","6182"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4182"]]','+proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs '); --- --- EPSG 4183 : Azores Central 1948 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4183,'EPSG',4183,'GEOGCS["Azores Central 1948",DATUM["Azores_Central_Islands_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104,167,-38,0,0,0,0],AUTHORITY["EPSG","6183"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4183"]]','+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs '); --- --- EPSG 4184 : Azores Oriental 1940 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4184,'EPSG',4184,'GEOGCS["Azores Oriental 1940",DATUM["Azores_Oriental_Islands_1940",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-203,141,53,0,0,0,0],AUTHORITY["EPSG","6184"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4184"]]','+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs '); --- --- EPSG 4185 : Madeira 1936 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4185,'EPSG',4185,'GEOGCS["Madeira 1936",DATUM["Madeira_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6185"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4185"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4188 : OSNI 1952 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4188,'EPSG',4188,'GEOGCS["OSNI 1952",DATUM["OSNI_1952",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6188"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4188"]]','+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs '); --- --- EPSG 4189 : REGVEN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4189,'EPSG',4189,'GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4190 : POSGAR 98 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4190,'EPSG',4190,'GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4191 : Albanian 1987 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4191,'EPSG',4191,'GEOGCS["Albanian 1987",DATUM["Albanian_1987",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6191"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4191"]]','+proj=longlat +ellps=krass +no_defs '); --- --- EPSG 4192 : Douala 1948 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4192,'EPSG',4192,'GEOGCS["Douala 1948",DATUM["Douala_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY["EPSG","6192"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4192"]]','+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs '); --- --- EPSG 4193 : Manoca 1962 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4193,'EPSG',4193,'GEOGCS["Manoca 1962",DATUM["Manoca_1962",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY["EPSG","6193"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4193"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs '); --- --- EPSG 4194 : Qornoq 1927 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4194,'EPSG',4194,'GEOGCS["Qornoq 1927",DATUM["Qornoq_1927",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[163.511,127.533,-159.789,0,0,0.814,-0.6],AUTHORITY["EPSG","6194"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4194"]]','+proj=longlat +ellps=intl +towgs84=163.511,127.533,-159.789,0,0,0.814,-0.6 +no_defs '); --- --- EPSG 4195 : Scoresbysund 1952 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4195,'EPSG',4195,'GEOGCS["Scoresbysund 1952",DATUM["Scoresbysund_1952",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[105,326,-102.5,0,0,0.814,-0.6],AUTHORITY["EPSG","6195"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4195"]]','+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs '); --- --- EPSG 4196 : Ammassalik 1958 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4196,'EPSG',4196,'GEOGCS["Ammassalik 1958",DATUM["Ammassalik_1958",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-45,417,-3.5,0,0,0.814,-0.6],AUTHORITY["EPSG","6196"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4196"]]','+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs '); --- --- EPSG 4197 : Garoua --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4197,'EPSG',4197,'GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6197"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4197"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4198 : Kousseri --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4198,'EPSG',4198,'GEOGCS["Kousseri",DATUM["Kousseri",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6198"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4198"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4199 : Egypt 1930 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4199,'EPSG',4199,'GEOGCS["Egypt 1930",DATUM["Egypt_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6199"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4199"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4200 : Pulkovo 1995 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4200,'EPSG',4200,'GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]]','+proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +no_defs '); --- --- EPSG 4201 : Adindan --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4201,'EPSG',4201,'GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]]','+proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs '); --- --- EPSG 4202 : AGD66 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4202,'EPSG',4202,'GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]]','+proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs '); --- --- EPSG 4203 : AGD84 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4203,'EPSG',4203,'GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]]','+proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs '); --- --- EPSG 4204 : Ain el Abd --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4204,'EPSG',4204,'GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]]','+proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs '); --- --- EPSG 4205 : Afgooye --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4205,'EPSG',4205,'GEOGCS["Afgooye",DATUM["Afgooye",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-43,-163,45,0,0,0,0],AUTHORITY["EPSG","6205"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4205"]]','+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs '); --- --- EPSG 4206 : Agadez --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4206,'EPSG',4206,'GEOGCS["Agadez",DATUM["Agadez",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6206"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4206"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4207 : Lisbon --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4207,'EPSG',4207,'GEOGCS["Lisbon",DATUM["Lisbon_1937",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6207"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4207"]]','+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs '); --- --- EPSG 4208 : Aratu --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4208,'EPSG',4208,'GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]]','+proj=longlat +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +no_defs '); --- --- EPSG 4209 : Arc 1950 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4209,'EPSG',4209,'GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]]','+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs '); --- --- EPSG 4210 : Arc 1960 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4210,'EPSG',4210,'GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]]','+proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs '); --- --- EPSG 4211 : Batavia --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4211,'EPSG',4211,'GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]]','+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs '); --- --- EPSG 4212 : Barbados 1938 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4212,'EPSG',4212,'GEOGCS["Barbados 1938",DATUM["Barbados_1938",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHORITY["EPSG","6212"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4212"]]','+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs '); --- --- EPSG 4213 : Beduaram --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4213,'EPSG',4213,'GEOGCS["Beduaram",DATUM["Beduaram",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-106,-87,188,0,0,0,0],AUTHORITY["EPSG","6213"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4213"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs '); --- --- EPSG 4214 : Beijing 1954 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4214,'EPSG',4214,'GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]]','+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs '); --- --- EPSG 4215 : Belge 1950 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4215,'EPSG',4215,'GEOGCS["Belge 1950",DATUM["Reseau_National_Belge_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6215"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4215"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4216 : Bermuda 1957 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4216,'EPSG',4216,'GEOGCS["Bermuda 1957",DATUM["Bermuda_1957",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-73,213,296,0,0,0,0],AUTHORITY["EPSG","6216"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4216"]]','+proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs '); --- --- EPSG 4218 : Bogota 1975 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4218,'EPSG',4218,'GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]]','+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs '); --- --- EPSG 4219 : Bukit Rimpah --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4219,'EPSG',4219,'GEOGCS["Bukit Rimpah",DATUM["Bukit_Rimpah",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-384,664,-48,0,0,0,0],AUTHORITY["EPSG","6219"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4219"]]','+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs '); --- --- EPSG 4220 : Camacupa --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4220,'EPSG',4220,'GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]]','+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs '); --- --- EPSG 4221 : Campo Inchauspe --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4221,'EPSG',4221,'GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]]','+proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs '); --- --- EPSG 4222 : Cape --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4222,'EPSG',4222,'GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]]','+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs '); --- --- EPSG 4223 : Carthage --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4223,'EPSG',4223,'GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs '); --- --- EPSG 4224 : Chua --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4224,'EPSG',4224,'GEOGCS["Chua",DATUM["Chua",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-134,229,-29,0,0,0,0],AUTHORITY["EPSG","6224"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4224"]]','+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs '); --- --- EPSG 4225 : Corrego Alegre --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4225,'EPSG',4225,'GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]]','+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs '); --- --- EPSG 4226 : Cote d'Ivoire --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4226,'EPSG',4226,'GEOGCS["Cote d''Ivoire",DATUM["Cote_d_Ivoire",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6226"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4226"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4227 : Deir ez Zor --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4227,'EPSG',4227,'GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs '); --- --- EPSG 4228 : Douala --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4228,'EPSG',4228,'GEOGCS["Douala",DATUM["Douala",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6228"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4228"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4229 : Egypt 1907 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4229,'EPSG',4229,'GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]]','+proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs '); --- --- EPSG 4230 : ED50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4230,'EPSG',4230,'GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]]','+proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs '); --- --- EPSG 4231 : ED87 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4231,'EPSG',4231,'GEOGCS["ED87",DATUM["European_Datum_1987",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218],AUTHORITY["EPSG","6231"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4231"]]','+proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs '); --- --- EPSG 4232 : Fahud --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4232,'EPSG',4232,'GEOGCS["Fahud",DATUM["Fahud",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-346,-1,224,0,0,0,0],AUTHORITY["EPSG","6232"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4232"]]','+proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs '); --- --- EPSG 4233 : Gandajika 1970 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4233,'EPSG',4233,'GEOGCS["Gandajika 1970",DATUM["Gandajika_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133,-321,50,0,0,0,0],AUTHORITY["EPSG","6233"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4233"]]','+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs '); --- --- EPSG 4234 : Garoua --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4234,'EPSG',4234,'GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6234"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4234"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4235 : Guyane Francaise --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4235,'EPSG',4235,'GEOGCS["Guyane Francaise",DATUM["Guyane_Francaise",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6235"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4235"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4236 : Hu Tzu Shan 1950 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4236,'EPSG',4236,'GEOGCS["Hu Tzu Shan 1950",DATUM["Hu_Tzu_Shan_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-637,-549,-203,0,0,0,0],AUTHORITY["EPSG","6236"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4236"]]','+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs '); --- --- EPSG 4237 : HD72 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4237,'EPSG',4237,'GEOGCS["HD72",DATUM["Hungarian_Datum_1972",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[52.17,-71.82,-14.9,0,0,0,0],AUTHORITY["EPSG","6237"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4237"]]','+proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs '); --- --- EPSG 4238 : ID74 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4238,'EPSG',4238,'GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]]','+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs '); --- --- EPSG 4239 : Indian 1954 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4239,'EPSG',4239,'GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]]','+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs '); --- --- EPSG 4240 : Indian 1975 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4240,'EPSG',4240,'GEOGCS["Indian 1975",DATUM["Indian_1975",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[210,814,289,0,0,0,0],AUTHORITY["EPSG","6240"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4240"]]','+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs '); --- --- EPSG 4241 : Jamaica 1875 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4241,'EPSG',4241,'GEOGCS["Jamaica 1875",DATUM["Jamaica_1875",SPHEROID["Clarke 1880",6378249.144808011,293.4663076556349,AUTHORITY["EPSG","7034"]],AUTHORITY["EPSG","6241"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4241"]]','+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs '); --- --- EPSG 4242 : JAD69 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4242,'EPSG',4242,'GEOGCS["JAD69",DATUM["Jamaica_1969",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[70,207,389.5,0,0,0,0],AUTHORITY["EPSG","6242"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4242"]]','+proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs '); --- --- EPSG 4243 : Kalianpur 1880 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4243,'EPSG',4243,'GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]]','+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs '); --- --- EPSG 4244 : Kandawala --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4244,'EPSG',4244,'GEOGCS["Kandawala",DATUM["Kandawala",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[-97,787,86,0,0,0,0],AUTHORITY["EPSG","6244"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4244"]]','+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs '); --- --- EPSG 4245 : Kertau 1968 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4245,'EPSG',4245,'GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]]','+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs '); --- --- EPSG 4246 : KOC --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4246,'EPSG',4246,'GEOGCS["KOC",DATUM["Kuwait_Oil_Company",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-294.7,-200.1,525.5,0,0,0,0],AUTHORITY["EPSG","6246"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4246"]]','+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs '); --- --- EPSG 4247 : La Canoa --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4247,'EPSG',4247,'GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]]','+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs '); --- --- EPSG 4248 : PSAD56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4248,'EPSG',4248,'GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]]','+proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs '); --- --- EPSG 4249 : Lake --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4249,'EPSG',4249,'GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4250 : Leigon --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4250,'EPSG',4250,'GEOGCS["Leigon",DATUM["Leigon",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-130,29,364,0,0,0,0],AUTHORITY["EPSG","6250"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4250"]]','+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs '); --- --- EPSG 4251 : Liberia 1964 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4251,'EPSG',4251,'GEOGCS["Liberia 1964",DATUM["Liberia_1964",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-90,40,88,0,0,0,0],AUTHORITY["EPSG","6251"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4251"]]','+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs '); --- --- EPSG 4252 : Lome --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4252,'EPSG',4252,'GEOGCS["Lome",DATUM["Lome",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6252"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4252"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4253 : Luzon 1911 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4253,'EPSG',4253,'GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]]','+proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs '); --- --- EPSG 4254 : Hito XVIII 1963 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4254,'EPSG',4254,'GEOGCS["Hito XVIII 1963",DATUM["Hito_XVIII_1963",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[16,196,93,0,0,0,0],AUTHORITY["EPSG","6254"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4254"]]','+proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs '); --- --- EPSG 4255 : Herat North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4255,'EPSG',4255,'GEOGCS["Herat North",DATUM["Herat_North",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-333,-222,114,0,0,0,0],AUTHORITY["EPSG","6255"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4255"]]','+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs '); --- --- EPSG 4256 : Mahe 1971 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4256,'EPSG',4256,'GEOGCS["Mahe 1971",DATUM["Mahe_1971",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[41,-220,-134,0,0,0,0],AUTHORITY["EPSG","6256"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4256"]]','+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs '); --- --- EPSG 4257 : Makassar --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4257,'EPSG',4257,'GEOGCS["Makassar",DATUM["Makassar",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6257"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4257"]]','+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs '); --- --- EPSG 4258 : ETRS89 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4258,'EPSG',4258,'GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4259 : Malongo 1987 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4259,'EPSG',4259,'GEOGCS["Malongo 1987",DATUM["Malongo_1987",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-254.1,-5.36,-100.29,0,0,0,0],AUTHORITY["EPSG","6259"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4259"]]','+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs '); --- --- EPSG 4260 : Manoca --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4260,'EPSG',4260,'GEOGCS["Manoca",DATUM["Manoca",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY["EPSG","6260"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4260"]]','+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs '); --- --- EPSG 4261 : Merchich --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4261,'EPSG',4261,'GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs '); --- --- EPSG 4262 : Massawa --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4262,'EPSG',4262,'GEOGCS["Massawa",DATUM["Massawa",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[639,405,60,0,0,0,0],AUTHORITY["EPSG","6262"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4262"]]','+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs '); --- --- EPSG 4263 : Minna --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4263,'EPSG',4263,'GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]]','+proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs '); --- --- EPSG 4264 : Mhast --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4264,'EPSG',4264,'GEOGCS["Mhast",DATUM["Mhast",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-252.95,-4.11,-96.38,0,0,0,0],AUTHORITY["EPSG","6264"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4264"]]','+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs '); --- --- EPSG 4265 : Monte Mario --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4265,'EPSG',4265,'GEOGCS["Monte Mario",DATUM["Monte_Mario",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6265"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4265"]]','+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs '); --- --- EPSG 4266 : M'poraloko --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4266,'EPSG',4266,'GEOGCS["M''poraloko",DATUM["M_poraloko",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-74,-130,42,0,0,0,0],AUTHORITY["EPSG","6266"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4266"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs '); --- --- EPSG 4267 : NAD27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4267,'EPSG',4267,'GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]]','+proj=longlat +datum=NAD27 +no_defs '); --- --- EPSG 4268 : NAD27 Michigan --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4268,'EPSG',4268,'GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]]','+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs '); --- --- EPSG 4269 : NAD83 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4269,'EPSG',4269,'GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4270 : Nahrwan 1967 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4270,'EPSG',4270,'GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]]','+proj=longlat +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +no_defs '); --- --- EPSG 4271 : Naparima 1972 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4271,'EPSG',4271,'GEOGCS["Naparima 1972",DATUM["Naparima_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10,375,165,0,0,0,0],AUTHORITY["EPSG","6271"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4271"]]','+proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs '); --- --- EPSG 4272 : NZGD49 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4272,'EPSG',4272,'GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]]','+proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +no_defs '); --- --- EPSG 4273 : NGO 1948 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4273,'EPSG',4273,'GEOGCS["NGO 1948",DATUM["NGO_1948",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6273"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4273"]]','+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs '); --- --- EPSG 4274 : Datum 73 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4274,'EPSG',4274,'GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]]','+proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs '); --- --- EPSG 4275 : NTF --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4275,'EPSG',4275,'GEOGCS["NTF",DATUM["Nouvelle_Triangulation_Francaise",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6275"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4275"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs '); --- --- EPSG 4276 : NSWC 9Z-2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4276,'EPSG',4276,'GEOGCS["NSWC 9Z-2",DATUM["NSWC_9Z_2",SPHEROID["NWL 9D",6378145,298.25,AUTHORITY["EPSG","7025"]],AUTHORITY["EPSG","6276"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4276"]]','+proj=longlat +ellps=WGS66 +no_defs '); --- --- EPSG 4277 : OSGB 1936 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4277,'EPSG',4277,'GEOGCS["OSGB 1936",DATUM["OSGB_1936",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[446.448,-125.157,542.06,0.15,0.247,0.842,-20.489],AUTHORITY["EPSG","6277"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4277"]]','+proj=longlat +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +no_defs '); --- --- EPSG 4278 : OSGB70 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4278,'EPSG',4278,'GEOGCS["OSGB70",DATUM["OSGB_1970_SN",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],AUTHORITY["EPSG","6278"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4278"]]','+proj=longlat +ellps=airy +no_defs '); --- --- EPSG 4279 : OS(SN)80 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4279,'EPSG',4279,'GEOGCS["OS(SN)80",DATUM["OS_SN_1980",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],AUTHORITY["EPSG","6279"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4279"]]','+proj=longlat +ellps=airy +no_defs '); --- --- EPSG 4280 : Padang --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4280,'EPSG',4280,'GEOGCS["Padang",DATUM["Padang_1884",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6280"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4280"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4281 : Palestine 1923 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4281,'EPSG',4281,'GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]]','+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs '); --- --- EPSG 4282 : Pointe Noire --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4282,'EPSG',4282,'GEOGCS["Pointe Noire",DATUM["Congo_1960_Pointe_Noire",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-148,51,-291,0,0,0,0],AUTHORITY["EPSG","6282"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4282"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs '); --- --- EPSG 4283 : GDA94 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4283,'EPSG',4283,'GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4284 : Pulkovo 1942 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4284,'EPSG',4284,'GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]]','+proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs '); --- --- EPSG 4285 : Qatar 1974 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4285,'EPSG',4285,'GEOGCS["Qatar 1974",DATUM["Qatar_1974",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-128,-283,22,0,0,0,0],AUTHORITY["EPSG","6285"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4285"]]','+proj=longlat +ellps=intl +towgs84=-128,-283,22,0,0,0,0 +no_defs '); --- --- EPSG 4286 : Qatar 1948 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4286,'EPSG',4286,'GEOGCS["Qatar 1948",DATUM["Qatar_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6286"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4286"]]','+proj=longlat +ellps=helmert +no_defs '); --- --- EPSG 4287 : Qornoq --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4287,'EPSG',4287,'GEOGCS["Qornoq",DATUM["Qornoq",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[164,138,-189,0,0,0,0],AUTHORITY["EPSG","6287"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4287"]]','+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs '); --- --- EPSG 4288 : Loma Quintana --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4288,'EPSG',4288,'GEOGCS["Loma Quintana",DATUM["Loma_Quintana",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6288"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4288"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4289 : Amersfoort --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4289,'EPSG',4289,'GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]]','+proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs '); --- --- EPSG 4291 : SAD69 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4291,'EPSG',4291,'GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]]','+proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs '); --- --- EPSG 4292 : Sapper Hill 1943 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4292,'EPSG',4292,'GEOGCS["Sapper Hill 1943",DATUM["Sapper_Hill_1943",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY["EPSG","6292"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4292"]]','+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs '); --- --- EPSG 4293 : Schwarzeck --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4293,'EPSG',4293,'GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]]','+proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs '); --- --- EPSG 4294 : Segora --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4294,'EPSG',4294,'GEOGCS["Segora",DATUM["Segora",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6294"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4294"]]','+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs '); --- --- EPSG 4295 : Serindung --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4295,'EPSG',4295,'GEOGCS["Serindung",DATUM["Serindung",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6295"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4295"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4296 : Sudan --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4296,'EPSG',4296,'GEOGCS["Sudan",DATUM["Sudan",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6296"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4296"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4297 : Tananarive --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4297,'EPSG',4297,'GEOGCS["Tananarive",DATUM["Tananarive_1925",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6297"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4297"]]','+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs '); --- --- EPSG 4298 : Timbalai 1948 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4298,'EPSG',4298,'GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]]','+proj=longlat +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +no_defs '); --- --- EPSG 4299 : TM65 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4299,'EPSG',4299,'GEOGCS["TM65",DATUM["TM65",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6299"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4299"]]','+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs '); --- --- EPSG 4300 : TM75 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4300,'EPSG',4300,'GEOGCS["TM75",DATUM["Geodetic_Datum_of_1965",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6300"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4300"]]','+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs '); --- --- EPSG 4301 : Tokyo --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4301,'EPSG',4301,'GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]]','+proj=longlat +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +no_defs '); --- --- EPSG 4302 : Trinidad 1903 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4302,'EPSG',4302,'GEOGCS["Trinidad 1903",DATUM["Trinidad_1903",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],TOWGS84[-61.702,284.488,472.052,0,0,0,0],AUTHORITY["EPSG","6302"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4302"]]','+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs '); --- --- EPSG 4303 : TC(1948) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4303,'EPSG',4303,'GEOGCS["TC(1948)",DATUM["Trucial_Coast_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6303"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4303"]]','+proj=longlat +ellps=helmert +no_defs '); --- --- EPSG 4304 : Voirol 1875 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4304,'EPSG',4304,'GEOGCS["Voirol 1875",DATUM["Voirol_1875",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6304"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4304"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs '); --- --- EPSG 4306 : Bern 1938 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4306,'EPSG',4306,'GEOGCS["Bern 1938",DATUM["Bern_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6306"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4306"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4307 : Nord Sahara 1959 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4307,'EPSG',4307,'GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]]','+proj=longlat +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +no_defs '); --- --- EPSG 4308 : RT38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4308,'EPSG',4308,'GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4309 : Yacare --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4309,'EPSG',4309,'GEOGCS["Yacare",DATUM["Yacare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-155,171,37,0,0,0,0],AUTHORITY["EPSG","6309"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4309"]]','+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs '); --- --- EPSG 4310 : Yoff --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4310,'EPSG',4310,'GEOGCS["Yoff",DATUM["Yoff",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6310"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4310"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4311 : Zanderij --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4311,'EPSG',4311,'GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]]','+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs '); --- --- EPSG 4312 : MGI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4312,'EPSG',4312,'GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]]','+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs '); --- --- EPSG 4313 : Belge 1972 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4313,'EPSG',4313,'GEOGCS["Belge 1972",DATUM["Reseau_National_Belge_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,1.2747],AUTHORITY["EPSG","6313"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4313"]]','+proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,1.2747 +no_defs '); --- --- EPSG 4314 : DHDN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4314,'EPSG',4314,'GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]]','+proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs '); --- --- EPSG 4315 : Conakry 1905 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4315,'EPSG',4315,'GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs '); --- --- EPSG 4316 : Dealul Piscului 1930 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4316,'EPSG',4316,'GEOGCS["Dealul Piscului 1930",DATUM["Dealul_Piscului_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[103.25,-100.4,-307.19,0,0,0,0],AUTHORITY["EPSG","6316"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4316"]]','+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs '); --- --- EPSG 4317 : Dealul Piscului 1970 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4317,'EPSG',4317,'GEOGCS["Dealul Piscului 1970",DATUM["Dealul_Piscului_1970",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[28,-121,-77,0,0,0,0],AUTHORITY["EPSG","6317"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4317"]]','+proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs '); --- --- EPSG 4318 : NGN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4318,'EPSG',4318,'GEOGCS["NGN",DATUM["National_Geodetic_Network",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-3.2,-5.7,2.8,0,0,0,0],AUTHORITY["EPSG","6318"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4318"]]','+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs '); --- --- EPSG 4319 : KUDAMS --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4319,'EPSG',4319,'GEOGCS["KUDAMS",DATUM["Kuwait_Utility",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-20.8,11.3,2.4,0,0,0,0],AUTHORITY["EPSG","6319"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4319"]]','+proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs '); --- --- EPSG 4322 : WGS 72 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4322,'EPSG',4322,'GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]]','+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs '); --- --- EPSG 4324 : WGS 72BE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4324,'EPSG',4324,'GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]]','+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs '); --- --- EPSG 4326 : WGS 84 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4326,'EPSG',4326,'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]','+proj=longlat +datum=WGS84 +no_defs '); --- --- EPSG 4463 : RGSPM06 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4463,'EPSG',4463,'GEOGCS["RGSPM06",DATUM["Reseau_Geodesique_de_Saint_Pierre_et_Miquelon_2006",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1038"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4463"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4470 : RGM04 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4470,'EPSG',4470,'GEOGCS["RGM04",DATUM["Reseau_Geodesique_de_Mayotte_2004",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1036"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4470"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4475 : Cadastre 1997 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4475,'EPSG',4475,'GEOGCS["Cadastre 1997",DATUM["Cadastre_1997",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-381.788,-57.501,-256.673,0,0,0,0],AUTHORITY["EPSG","1037"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4475"]]','+proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs '); --- --- EPSG 4483 : Mexican Datum of 1993 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4483,'EPSG',4483,'GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4490 : China Geodetic Coordinate System 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4490,'EPSG',4490,'GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]]','+proj=longlat +ellps=GRS80 +no_defs '); --- --- EPSG 4555 : New Beijing --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4555,'EPSG',4555,'GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]]','+proj=longlat +ellps=krass +no_defs '); --- --- EPSG 4558 : RRAF 1991 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4558,'EPSG',4558,'GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4558"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4600 : Anguilla 1957 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4600,'EPSG',4600,'GEOGCS["Anguilla 1957",DATUM["Anguilla_1957",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6600"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4600"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4601 : Antigua 1943 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4601,'EPSG',4601,'GEOGCS["Antigua 1943",DATUM["Antigua_1943",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-255,-15,71,0,0,0,0],AUTHORITY["EPSG","6601"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4601"]]','+proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs '); --- --- EPSG 4602 : Dominica 1945 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4602,'EPSG',4602,'GEOGCS["Dominica 1945",DATUM["Dominica_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[725,685,536,0,0,0,0],AUTHORITY["EPSG","6602"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4602"]]','+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs '); --- --- EPSG 4603 : Grenada 1953 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4603,'EPSG',4603,'GEOGCS["Grenada 1953",DATUM["Grenada_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[72,213.7,93,0,0,0,0],AUTHORITY["EPSG","6603"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4603"]]','+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs '); --- --- EPSG 4604 : Montserrat 1958 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4604,'EPSG',4604,'GEOGCS["Montserrat 1958",DATUM["Montserrat_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[174,359,365,0,0,0,0],AUTHORITY["EPSG","6604"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4604"]]','+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs '); --- --- EPSG 4605 : St. Kitts 1955 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4605,'EPSG',4605,'GEOGCS["St. Kitts 1955",DATUM["St_Kitts_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[9,183,236,0,0,0,0],AUTHORITY["EPSG","6605"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4605"]]','+proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs '); --- --- EPSG 4606 : St. Lucia 1955 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4606,'EPSG',4606,'GEOGCS["St. Lucia 1955",DATUM["St_Lucia_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-149,128,296,0,0,0,0],AUTHORITY["EPSG","6606"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4606"]]','+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs '); --- --- EPSG 4607 : St. Vincent 1945 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4607,'EPSG',4607,'GEOGCS["St. Vincent 1945",DATUM["St_Vincent_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[195.671,332.517,274.607,0,0,0,0],AUTHORITY["EPSG","6607"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4607"]]','+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs '); --- --- EPSG 4608 : NAD27(76) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4608,'EPSG',4608,'GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4609 : NAD27(CGQ77) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4609,'EPSG',4609,'GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]]','+proj=longlat +ellps=clrk66 +no_defs '); --- --- EPSG 4610 : Xian 1980 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4610,'EPSG',4610,'GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]]','+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs '); --- --- EPSG 4611 : Hong Kong 1980 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4611,'EPSG',4611,'GEOGCS["Hong Kong 1980",DATUM["Hong_Kong_1980",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425],AUTHORITY["EPSG","6611"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4611"]]','+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs '); --- --- EPSG 4612 : JGD2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4612,'EPSG',4612,'GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4613 : Segara --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4613,'EPSG',4613,'GEOGCS["Segara",DATUM["Gunung_Segara",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6613"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4613"]]','+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs '); --- --- EPSG 4614 : QND95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4614,'EPSG',4614,'GEOGCS["QND95",DATUM["Qatar_National_Datum_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706],AUTHORITY["EPSG","6614"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4614"]]','+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs '); --- --- EPSG 4615 : Porto Santo --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4615,'EPSG',4615,'GEOGCS["Porto Santo",DATUM["Porto_Santo_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-499,-249,314,0,0,0,0],AUTHORITY["EPSG","6615"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4615"]]','+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs '); --- --- EPSG 4616 : Selvagem Grande --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4616,'EPSG',4616,'GEOGCS["Selvagem Grande",DATUM["Selvagem_Grande",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-289,-124,60,0,0,0,0],AUTHORITY["EPSG","6616"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4616"]]','+proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs '); --- --- EPSG 4617 : NAD83(CSRS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4617,'EPSG',4617,'GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4618 : SAD69 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4618,'EPSG',4618,'GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]]','+proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs '); --- --- EPSG 4619 : SWEREF99 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4619,'EPSG',4619,'GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4620 : Point 58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4620,'EPSG',4620,'GEOGCS["Point 58",DATUM["Point_58",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-106,-129,165,0,0,0,0],AUTHORITY["EPSG","6620"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4620"]]','+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs '); --- --- EPSG 4621 : Fort Marigot --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4621,'EPSG',4621,'GEOGCS["Fort Marigot",DATUM["Fort_Marigot",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[137,248,-430,0,0,0,0],AUTHORITY["EPSG","6621"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4621"]]','+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs '); --- --- EPSG 4622 : Guadeloupe 1948 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4622,'EPSG',4622,'GEOGCS["Guadeloupe 1948",DATUM["Guadeloupe_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-467,-16,-300,0,0,0,0],AUTHORITY["EPSG","6622"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4622"]]','+proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs '); --- --- EPSG 4623 : CSG67 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4623,'EPSG',4623,'GEOGCS["CSG67",DATUM["Centre_Spatial_Guyanais_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-186,230,110,0,0,0,0],AUTHORITY["EPSG","6623"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4623"]]','+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs '); --- --- EPSG 4624 : RGFG95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4624,'EPSG',4624,'GEOGCS["RGFG95",DATUM["Reseau_Geodesique_Francais_Guyane_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY["EPSG","6624"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4624"]]','+proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs '); --- --- EPSG 4625 : Martinique 1938 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4625,'EPSG',4625,'GEOGCS["Martinique 1938",DATUM["Martinique_1938",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[186,482,151,0,0,0,0],AUTHORITY["EPSG","6625"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4625"]]','+proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs '); --- --- EPSG 4626 : Reunion 1947 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4626,'EPSG',4626,'GEOGCS["Reunion 1947",DATUM["Reunion_1947",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[94,-948,-1262,0,0,0,0],AUTHORITY["EPSG","6626"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4626"]]','+proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs '); --- --- EPSG 4627 : RGR92 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4627,'EPSG',4627,'GEOGCS["RGR92",DATUM["Reseau_Geodesique_de_la_Reunion_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6627"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4627"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4628 : Tahiti 52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4628,'EPSG',4628,'GEOGCS["Tahiti 52",DATUM["Tahiti_52",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[162,117,154,0,0,0,0],AUTHORITY["EPSG","6628"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4628"]]','+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs '); --- --- EPSG 4629 : Tahaa 54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4629,'EPSG',4629,'GEOGCS["Tahaa 54",DATUM["Tahaa_54",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746],AUTHORITY["EPSG","6629"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4629"]]','+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs '); --- --- EPSG 4630 : IGN72 Nuku Hiva --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4630,'EPSG',4630,'GEOGCS["IGN72 Nuku Hiva",DATUM["IGN72_Nuku_Hiva",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[84,274,65,0,0,0,0],AUTHORITY["EPSG","6630"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4630"]]','+proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs '); --- --- EPSG 4631 : K0 1949 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4631,'EPSG',4631,'GEOGCS["K0 1949",DATUM["K0_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6631"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4631"]]','+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs '); --- --- EPSG 4632 : Combani 1950 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4632,'EPSG',4632,'GEOGCS["Combani 1950",DATUM["Combani_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-382,-59,-262,0,0,0,0],AUTHORITY["EPSG","6632"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4632"]]','+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs '); --- --- EPSG 4633 : IGN56 Lifou --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4633,'EPSG',4633,'GEOGCS["IGN56 Lifou",DATUM["IGN56_Lifou",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[335.47,222.58,-230.94,0,0,0,0],AUTHORITY["EPSG","6633"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4633"]]','+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs '); --- --- EPSG 4634 : IGN72 Grand Terre --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4634,'EPSG',4634,'GEOGCS["IGN72 Grand Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4634"]]','+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs '); --- --- EPSG 4635 : ST87 Ouvea --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4635,'EPSG',4635,'GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798],AUTHORITY["EPSG","6635"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4635"]]','+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs '); --- --- EPSG 4636 : Petrels 1972 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4636,'EPSG',4636,'GEOGCS["Petrels 1972",DATUM["Petrels_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[365,194,166,0,0,0,0],AUTHORITY["EPSG","6636"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4636"]]','+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs '); --- --- EPSG 4637 : Perroud 1950 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4637,'EPSG',4637,'GEOGCS["Perroud 1950",DATUM["Pointe_Geologie_Perroud_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[325,154,172,0,0,0,0],AUTHORITY["EPSG","6637"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4637"]]','+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs '); --- --- EPSG 4638 : Saint Pierre et Miquelon 1950 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4638,'EPSG',4638,'GEOGCS["Saint Pierre et Miquelon 1950",DATUM["Saint_Pierre_et_Miquelon_1950",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[30,430,368,0,0,0,0],AUTHORITY["EPSG","6638"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4638"]]','+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs '); --- --- EPSG 4639 : MOP78 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4639,'EPSG',4639,'GEOGCS["MOP78",DATUM["MOP78",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[253,-132,-127,0,0,0,0],AUTHORITY["EPSG","6639"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4639"]]','+proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs '); --- --- EPSG 4640 : RRAF 1991 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4640,'EPSG',4640,'GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6640"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4640"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4641 : IGN53 Mare --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4641,'EPSG',4641,'GEOGCS["IGN53 Mare",DATUM["IGN53_Mare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[287.58,177.78,-135.41,0,0,0,0],AUTHORITY["EPSG","6641"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4641"]]','+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs '); --- --- EPSG 4642 : ST84 Ile des Pins --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4642,'EPSG',4642,'GEOGCS["ST84 Ile des Pins",DATUM["ST84_Ile_des_Pins",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6642"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4642"]]','+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs '); --- --- EPSG 4643 : ST71 Belep --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4643,'EPSG',4643,'GEOGCS["ST71 Belep",DATUM["ST71_Belep",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7],AUTHORITY["EPSG","6643"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4643"]]','+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs '); --- --- EPSG 4644 : NEA74 Noumea --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4644,'EPSG',4644,'GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]]','+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs '); --- --- EPSG 4645 : RGNC 1991 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4645,'EPSG',4645,'GEOGCS["RGNC 1991",DATUM["Reseau_Geodesique_Nouvelle_Caledonie_1991",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6645"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4645"]]','+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4646 : Grand Comoros --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4646,'EPSG',4646,'GEOGCS["Grand Comoros",DATUM["Grand_Comoros",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6646"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4646"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4657 : Reykjavik 1900 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4657,'EPSG',4657,'GEOGCS["Reykjavik 1900",DATUM["Reykjavik_1900",SPHEROID["Danish 1876",6377019.27,300,AUTHORITY["EPSG","7051"]],TOWGS84[-28,199,5,0,0,0,0],AUTHORITY["EPSG","6657"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4657"]]','+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs '); --- --- EPSG 4658 : Hjorsey 1955 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4658,'EPSG',4658,'GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]]','+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs '); --- --- EPSG 4659 : ISN93 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4659,'EPSG',4659,'GEOGCS["ISN93",DATUM["Islands_Network_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6659"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4659"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4660 : Helle 1954 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4660,'EPSG',4660,'GEOGCS["Helle 1954",DATUM["Helle_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805],AUTHORITY["EPSG","6660"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4660"]]','+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs '); --- --- EPSG 4661 : LKS92 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4661,'EPSG',4661,'GEOGCS["LKS92",DATUM["Latvia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6661"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4661"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4662 : IGN72 Grande Terre --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4662,'EPSG',4662,'GEOGCS["IGN72 Grande Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-11.64,-348.6,291.98,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4662"]]','+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs '); --- --- EPSG 4663 : Porto Santo 1995 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4663,'EPSG',4663,'GEOGCS["Porto Santo 1995",DATUM["Porto_Santo_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-502.862,-247.438,312.724,0,0,0,0],AUTHORITY["EPSG","6663"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4663"]]','+proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs '); --- --- EPSG 4664 : Azores Oriental 1995 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4664,'EPSG',4664,'GEOGCS["Azores Oriental 1995",DATUM["Azores_Oriental_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-204.619,140.176,55.226,0,0,0,0],AUTHORITY["EPSG","6664"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4664"]]','+proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs '); --- --- EPSG 4665 : Azores Central 1995 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4665,'EPSG',4665,'GEOGCS["Azores Central 1995",DATUM["Azores_Central_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.226,166.366,-37.893,0,0,0,0],AUTHORITY["EPSG","6665"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4665"]]','+proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs '); --- --- EPSG 4666 : Lisbon 1890 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4666,'EPSG',4666,'GEOGCS["Lisbon 1890",DATUM["Lisbon_1890",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[508.088,-191.042,565.223,0,0,0,0],AUTHORITY["EPSG","6666"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4666"]]','+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs '); --- --- EPSG 4667 : IKBD-92 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4667,'EPSG',4667,'GEOGCS["IKBD-92",DATUM["Iraq_Kuwait_Boundary_Datum_1992",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6667"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4667"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4668 : ED79 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4668,'EPSG',4668,'GEOGCS["ED79",DATUM["European_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-86,-98,-119,0,0,0,0],AUTHORITY["EPSG","6668"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4668"]]','+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs '); --- --- EPSG 4669 : LKS94 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4669,'EPSG',4669,'GEOGCS["LKS94",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4669"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4670 : IGM95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4670,'EPSG',4670,'GEOGCS["IGM95",DATUM["Istituto_Geografico_Militaire_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6670"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4670"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4671 : Voirol 1879 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4671,'EPSG',4671,'GEOGCS["Voirol 1879",DATUM["Voirol_1879",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6671"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4671"]]','+proj=longlat +a=6378249.2 +b=6356515 +no_defs '); --- --- EPSG 4672 : Chatham Islands 1971 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4672,'EPSG',4672,'GEOGCS["Chatham Islands 1971",DATUM["Chatham_Islands_Datum_1971",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[175,-38,113,0,0,0,0],AUTHORITY["EPSG","6672"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4672"]]','+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs '); --- --- EPSG 4673 : Chatham Islands 1979 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4673,'EPSG',4673,'GEOGCS["Chatham Islands 1979",DATUM["Chatham_Islands_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[174.05,-25.49,112.57,-0,-0,0.554,0.2263],AUTHORITY["EPSG","6673"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4673"]]','+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs '); --- --- EPSG 4674 : SIRGAS 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4674,'EPSG',4674,'GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4675 : Guam 1963 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4675,'EPSG',4675,'GEOGCS["Guam 1963",DATUM["Guam_1963",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-100,-248,259,0,0,0,0],AUTHORITY["EPSG","6675"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4675"]]','+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs '); --- --- EPSG 4676 : Vientiane 1982 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4676,'EPSG',4676,'GEOGCS["Vientiane 1982",DATUM["Vientiane_1982",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6676"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4676"]]','+proj=longlat +ellps=krass +no_defs '); --- --- EPSG 4677 : Lao 1993 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4677,'EPSG',4677,'GEOGCS["Lao 1993",DATUM["Lao_1993",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6677"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4677"]]','+proj=longlat +ellps=krass +no_defs '); --- --- EPSG 4678 : Lao 1997 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4678,'EPSG',4678,'GEOGCS["Lao 1997",DATUM["Lao_National_Datum_1997",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[44.585,-131.212,-39.544,0,0,0,0],AUTHORITY["EPSG","6678"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4678"]]','+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs '); --- --- EPSG 4679 : Jouik 1961 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4679,'EPSG',4679,'GEOGCS["Jouik 1961",DATUM["Jouik_1961",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-80.01,253.26,291.19,0,0,0,0],AUTHORITY["EPSG","6679"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4679"]]','+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs '); --- --- EPSG 4680 : Nouakchott 1965 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4680,'EPSG',4680,'GEOGCS["Nouakchott 1965",DATUM["Nouakchott_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[124.5,-63.5,-281,0,0,0,0],AUTHORITY["EPSG","6680"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4680"]]','+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs '); --- --- EPSG 4681 : Mauritania 1999 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4681,'EPSG',4681,'GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4682 : Gulshan 303 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4682,'EPSG',4682,'GEOGCS["Gulshan 303",DATUM["Gulshan_303",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[283.7,735.9,261.1,0,0,0,0],AUTHORITY["EPSG","6682"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4682"]]','+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs '); --- --- EPSG 4683 : PRS92 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4683,'EPSG',4683,'GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]]','+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs '); --- --- EPSG 4684 : Gan 1970 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4684,'EPSG',4684,'GEOGCS["Gan 1970",DATUM["Gan_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133,-321,50,0,0,0,0],AUTHORITY["EPSG","6684"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4684"]]','+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs '); --- --- EPSG 4685 : Gandajika --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4685,'EPSG',4685,'GEOGCS["Gandajika",DATUM["Gandajika",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6685"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4685"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4686 : MAGNA-SIRGAS --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4686,'EPSG',4686,'GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4687 : RGPF --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4687,'EPSG',4687,'GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]]','+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs '); --- --- EPSG 4688 : Fatu Iva 72 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4688,'EPSG',4688,'GEOGCS["Fatu Iva 72",DATUM["Fatu_Iva_72",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074],AUTHORITY["EPSG","6688"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4688"]]','+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs '); --- --- EPSG 4689 : IGN63 Hiva Oa --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4689,'EPSG',4689,'GEOGCS["IGN63 Hiva Oa",DATUM["IGN63_Hiva_Oa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311],AUTHORITY["EPSG","6689"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4689"]]','+proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs '); --- --- EPSG 4690 : Tahiti 79 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4690,'EPSG',4690,'GEOGCS["Tahiti 79",DATUM["Tahiti_79",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6690"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4690"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4691 : Moorea 87 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4691,'EPSG',4691,'GEOGCS["Moorea 87",DATUM["Moorea_87",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773],AUTHORITY["EPSG","6691"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4691"]]','+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs '); --- --- EPSG 4692 : Maupiti 83 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4692,'EPSG',4692,'GEOGCS["Maupiti 83",DATUM["Maupiti_83",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[217.037,86.959,23.956,0,0,0,0],AUTHORITY["EPSG","6692"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4692"]]','+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs '); --- --- EPSG 4693 : Nakhl-e Ghanem --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4693,'EPSG',4693,'GEOGCS["Nakhl-e Ghanem",DATUM["Nakhl_e_Ghanem",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,-0.15,0.68,0,0,0,0],AUTHORITY["EPSG","6693"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4693"]]','+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs '); --- --- EPSG 4694 : POSGAR 94 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4694,'EPSG',4694,'GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4695 : Katanga 1955 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4695,'EPSG',4695,'GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]]','+proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs '); --- --- EPSG 4696 : Kasai 1953 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4696,'EPSG',4696,'GEOGCS["Kasai 1953",DATUM["Kasai_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6696"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4696"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4697 : IGC 1962 6th Parallel South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4697,'EPSG',4697,'GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4698 : IGN 1962 Kerguelen --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4698,'EPSG',4698,'GEOGCS["IGN 1962 Kerguelen",DATUM["IGN_1962_Kerguelen",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6698"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4698"]]','+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs '); --- --- EPSG 4699 : Le Pouce 1934 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4699,'EPSG',4699,'GEOGCS["Le Pouce 1934",DATUM["Le_Pouce_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-770.1,158.4,-498.2,0,0,0,0],AUTHORITY["EPSG","6699"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4699"]]','+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs '); --- --- EPSG 4700 : IGN Astro 1960 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4700,'EPSG',4700,'GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4701 : IGCB 1955 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4701,'EPSG',4701,'GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]]','+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs '); --- --- EPSG 4702 : Mauritania 1999 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4702,'EPSG',4702,'GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4703 : Mhast 1951 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4703,'EPSG',4703,'GEOGCS["Mhast 1951",DATUM["Missao_Hidrografico_Angola_y_Sao_Tome_1951",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6703"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4703"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4704 : Mhast (onshore) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4704,'EPSG',4704,'GEOGCS["Mhast (onshore)",DATUM["Mhast_onshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6704"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4704"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4705 : Mhast (offshore) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4705,'EPSG',4705,'GEOGCS["Mhast (offshore)",DATUM["Mhast_offshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6705"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4705"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4706 : Egypt Gulf of Suez S-650 TL --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4706,'EPSG',4706,'GEOGCS["Egypt Gulf of Suez S-650 TL",DATUM["Egypt_Gulf_of_Suez_S_650_TL",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-146.21,112.63,4.05,0,0,0,0],AUTHORITY["EPSG","6706"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4706"]]','+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs '); --- --- EPSG 4707 : Tern Island 1961 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4707,'EPSG',4707,'GEOGCS["Tern Island 1961",DATUM["Tern_Island_1961",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[114,-116,-333,0,0,0,0],AUTHORITY["EPSG","6707"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4707"]]','+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs '); --- --- EPSG 4708 : Cocos Islands 1965 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4708,'EPSG',4708,'GEOGCS["Cocos Islands 1965",DATUM["Cocos_Islands_1965",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-491,-22,435,0,0,0,0],AUTHORITY["EPSG","6708"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4708"]]','+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs '); --- --- EPSG 4709 : Iwo Jima 1945 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4709,'EPSG',4709,'GEOGCS["Iwo Jima 1945",DATUM["Iwo_Jima_1945",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,75,-272,0,0,0,0],AUTHORITY["EPSG","6709"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4709"]]','+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs '); --- --- EPSG 4710 : St. Helena 1971 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4710,'EPSG',4710,'GEOGCS["St. Helena 1971",DATUM["St_Helena_1971",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-320,550,-494,0,0,0,0],AUTHORITY["EPSG","6710"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4710"]]','+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs '); --- --- EPSG 4711 : Marcus Island 1952 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4711,'EPSG',4711,'GEOGCS["Marcus Island 1952",DATUM["Marcus_Island_1952",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[124,-234,-25,0,0,0,0],AUTHORITY["EPSG","6711"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4711"]]','+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs '); --- --- EPSG 4712 : Ascension Island 1958 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4712,'EPSG',4712,'GEOGCS["Ascension Island 1958",DATUM["Ascension_Island_1958",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-205,107,53,0,0,0,0],AUTHORITY["EPSG","6712"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4712"]]','+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs '); --- --- EPSG 4713 : Ayabelle Lighthouse --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4713,'EPSG',4713,'GEOGCS["Ayabelle Lighthouse",DATUM["Ayabelle_Lighthouse",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79,-129,145,0,0,0,0],AUTHORITY["EPSG","6713"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4713"]]','+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs '); --- --- EPSG 4714 : Bellevue --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4714,'EPSG',4714,'GEOGCS["Bellevue",DATUM["Bellevue",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-127,-769,472,0,0,0,0],AUTHORITY["EPSG","6714"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4714"]]','+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs '); --- --- EPSG 4715 : Camp Area Astro --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4715,'EPSG',4715,'GEOGCS["Camp Area Astro",DATUM["Camp_Area_Astro",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104,-129,239,0,0,0,0],AUTHORITY["EPSG","6715"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4715"]]','+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs '); --- --- EPSG 4716 : Phoenix Islands 1966 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4716,'EPSG',4716,'GEOGCS["Phoenix Islands 1966",DATUM["Phoenix_Islands_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[298,-304,-375,0,0,0,0],AUTHORITY["EPSG","6716"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4716"]]','+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs '); --- --- EPSG 4717 : Cape Canaveral --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4717,'EPSG',4717,'GEOGCS["Cape Canaveral",DATUM["Cape_Canaveral",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-2,151,181,0,0,0,0],AUTHORITY["EPSG","6717"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4717"]]','+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs '); --- --- EPSG 4718 : Solomon 1968 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4718,'EPSG',4718,'GEOGCS["Solomon 1968",DATUM["Solomon_1968",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[252,-209,-751,0,0,0,0],AUTHORITY["EPSG","6718"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4718"]]','+proj=longlat +ellps=intl +towgs84=252,-209,-751,0,0,0,0 +no_defs '); --- --- EPSG 4719 : Easter Island 1967 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4719,'EPSG',4719,'GEOGCS["Easter Island 1967",DATUM["Easter_Island_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[211,147,111,0,0,0,0],AUTHORITY["EPSG","6719"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4719"]]','+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs '); --- --- EPSG 4720 : Fiji 1986 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4720,'EPSG',4720,'GEOGCS["Fiji 1986",DATUM["Fiji_Geodetic_Datum_1986",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6720"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4720"]]','+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs '); --- --- EPSG 4721 : Fiji 1956 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4721,'EPSG',4721,'GEOGCS["Fiji 1956",DATUM["Fiji_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[265.025,384.929,-194.046,0,0,0,0],AUTHORITY["EPSG","6721"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4721"]]','+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs '); --- --- EPSG 4722 : South Georgia 1968 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4722,'EPSG',4722,'GEOGCS["South Georgia 1968",DATUM["South_Georgia_1968",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-794,119,-298,0,0,0,0],AUTHORITY["EPSG","6722"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4722"]]','+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs '); --- --- EPSG 4723 : Grand Cayman 1959 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4723,'EPSG',4723,'GEOGCS["Grand Cayman 1959",DATUM["Grand_Cayman_1959",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[67.8,106.1,138.8,0,0,0,0],AUTHORITY["EPSG","6723"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4723"]]','+proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs '); --- --- EPSG 4724 : Diego Garcia 1969 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4724,'EPSG',4724,'GEOGCS["Diego Garcia 1969",DATUM["Diego_Garcia_1969",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[208,-435,-229,0,0,0,0],AUTHORITY["EPSG","6724"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4724"]]','+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs '); --- --- EPSG 4725 : Johnston Island 1961 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4725,'EPSG',4725,'GEOGCS["Johnston Island 1961",DATUM["Johnston_Island_1961",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[189,-79,-202,0,0,0,0],AUTHORITY["EPSG","6725"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4725"]]','+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs '); --- --- EPSG 4726 : Little Cayman 1961 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4726,'EPSG',4726,'GEOGCS["Little Cayman 1961",DATUM["Little_Cayman_1961",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[42,124,147,0,0,0,0],AUTHORITY["EPSG","6726"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4726"]]','+proj=longlat +ellps=clrk66 +towgs84=42,124,147,0,0,0,0 +no_defs '); --- --- EPSG 4727 : Midway 1961 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4727,'EPSG',4727,'GEOGCS["Midway 1961",DATUM["Midway_1961",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[403,-81,277,0,0,0,0],AUTHORITY["EPSG","6727"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4727"]]','+proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs '); --- --- EPSG 4728 : Pico de las Nieves 1984 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4728,'EPSG',4728,'GEOGCS["Pico de las Nieves 1984",DATUM["Pico_de_las_Nieves_1984",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-307,-92,127,0,0,0,0],AUTHORITY["EPSG","6728"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4728"]]','+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs '); --- --- EPSG 4729 : Pitcairn 1967 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4729,'EPSG',4729,'GEOGCS["Pitcairn 1967",DATUM["Pitcairn_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[185,165,42,0,0,0,0],AUTHORITY["EPSG","6729"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4729"]]','+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs '); --- --- EPSG 4730 : Santo 1965 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4730,'EPSG',4730,'GEOGCS["Santo 1965",DATUM["Santo_1965",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[170,42,84,0,0,0,0],AUTHORITY["EPSG","6730"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4730"]]','+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs '); --- --- EPSG 4731 : Viti Levu 1916 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4731,'EPSG',4731,'GEOGCS["Viti Levu 1916",DATUM["Viti_Levu_1916",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6731"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4731"]]','+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs '); --- --- EPSG 4732 : Marshall Islands 1960 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4732,'EPSG',4732,'GEOGCS["Marshall Islands 1960",DATUM["Marshall_Islands_1960",SPHEROID["Hough 1960",6378270,297,AUTHORITY["EPSG","7053"]],TOWGS84[102,52,-38,0,0,0,0],AUTHORITY["EPSG","6732"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4732"]]','+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs '); --- --- EPSG 4733 : Wake Island 1952 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4733,'EPSG',4733,'GEOGCS["Wake Island 1952",DATUM["Wake_Island_1952",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[276,-57,149,0,0,0,0],AUTHORITY["EPSG","6733"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4733"]]','+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs '); --- --- EPSG 4734 : Tristan 1968 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4734,'EPSG',4734,'GEOGCS["Tristan 1968",DATUM["Tristan_1968",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-632,438,-609,0,0,0,0],AUTHORITY["EPSG","6734"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4734"]]','+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs '); --- --- EPSG 4735 : Kusaie 1951 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4735,'EPSG',4735,'GEOGCS["Kusaie 1951",DATUM["Kusaie_1951",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[647,1777,-1124,0,0,0,0],AUTHORITY["EPSG","6735"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4735"]]','+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs '); --- --- EPSG 4736 : Deception Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4736,'EPSG',4736,'GEOGCS["Deception Island",DATUM["Deception_Island",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[260,12,-147,0,0,0,0],AUTHORITY["EPSG","6736"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4736"]]','+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs '); --- --- EPSG 4737 : Korea 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4737,'EPSG',4737,'GEOGCS["Korea 2000",DATUM["Geocentric_datum_of_Korea",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6737"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4737"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4738 : Hong Kong 1963 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4738,'EPSG',4738,'GEOGCS["Hong Kong 1963",DATUM["Hong_Kong_1963",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6738"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4738"]]','+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs '); --- --- EPSG 4739 : Hong Kong 1963(67) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4739,'EPSG',4739,'GEOGCS["Hong Kong 1963(67)",DATUM["Hong_Kong_1963_67",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-156,-271,-189,0,0,0,0],AUTHORITY["EPSG","6739"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4739"]]','+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs '); --- --- EPSG 4740 : PZ-90 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4740,'EPSG',4740,'GEOGCS["PZ-90",DATUM["Parametrop_Zemp_1990",SPHEROID["PZ-90",6378136,298.257839303,AUTHORITY["EPSG","7054"]],TOWGS84[0,0,1.5,-0,-0,0.076,0],AUTHORITY["EPSG","6740"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4740"]]','+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs '); --- --- EPSG 4741 : FD54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4741,'EPSG',4741,'GEOGCS["FD54",DATUM["Faroe_Datum_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6741"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4741"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4742 : GDM2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4742,'EPSG',4742,'GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]]','+proj=longlat +ellps=GRS80 +no_defs '); --- --- EPSG 4743 : Karbala 1979 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4743,'EPSG',4743,'GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]]','+proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs '); --- --- EPSG 4744 : Nahrwan 1934 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4744,'EPSG',4744,'GEOGCS["Nahrwan 1934",DATUM["Nahrwan_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6744"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4744"]]','+proj=longlat +ellps=clrk80 +no_defs '); --- --- EPSG 4745 : RD/83 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4745,'EPSG',4745,'GEOGCS["RD/83",DATUM["Rauenberg_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6745"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4745"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4746 : PD/83 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4746,'EPSG',4746,'GEOGCS["PD/83",DATUM["Potsdam_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6746"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4746"]]','+proj=longlat +ellps=bessel +no_defs '); --- --- EPSG 4747 : GR96 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4747,'EPSG',4747,'GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4748 : Vanua Levu 1915 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4748,'EPSG',4748,'GEOGCS["Vanua Levu 1915",DATUM["Vanua_Levu_1915",SPHEROID["Clarke 1880 (international foot)",6378306.3696,293.4663076556349,AUTHORITY["EPSG","7055"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6748"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4748"]]','+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs '); --- --- EPSG 4749 : RGNC91-93 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4749,'EPSG',4749,'GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4750 : ST87 Ouvea --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4750,'EPSG',4750,'GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-56.263,16.136,-22.856,0,0,0,0],AUTHORITY["EPSG","6750"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4750"]]','+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs '); --- --- EPSG 4751 : Kertau (RSO) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4751,'EPSG',4751,'GEOGCS["Kertau (RSO)",DATUM["Kertau_RSO",SPHEROID["Everest 1830 (RSO 1969)",6377295.664,300.8017,AUTHORITY["EPSG","7056"]],AUTHORITY["EPSG","6751"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4751"]]','+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs '); --- --- EPSG 4752 : Viti Levu 1912 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4752,'EPSG',4752,'GEOGCS["Viti Levu 1912",DATUM["Viti_Levu_1912",SPHEROID["Clarke 1880 (international foot)",6378306.3696,293.4663076556349,AUTHORITY["EPSG","7055"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6752"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4752"]]','+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs '); --- --- EPSG 4753 : fk89 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4753,'EPSG',4753,'GEOGCS["fk89",DATUM["fk89",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6753"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4753"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4754 : LGD2006 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4754,'EPSG',4754,'GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]]','+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs '); --- --- EPSG 4755 : DGN95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4755,'EPSG',4755,'GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4756 : VN-2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4756,'EPSG',4756,'GEOGCS["VN-2000",DATUM["Vietnam_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6756"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4756"]]','+proj=longlat +ellps=WGS84 +no_defs '); --- --- EPSG 4757 : SVY21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4757,'EPSG',4757,'GEOGCS["SVY21",DATUM["SVY21",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6757"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4757"]]','+proj=longlat +ellps=WGS84 +no_defs '); --- --- EPSG 4758 : JAD2001 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4758,'EPSG',4758,'GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4759 : NAD83(NSRS2007) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4759,'EPSG',4759,'GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4760 : WGS 66 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4760,'EPSG',4760,'GEOGCS["WGS 66",DATUM["World_Geodetic_System_1966",SPHEROID["NWL 9D",6378145,298.25,AUTHORITY["EPSG","7025"]],AUTHORITY["EPSG","6760"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4760"]]','+proj=longlat +ellps=WGS66 +no_defs '); --- --- EPSG 4761 : HTRS96 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4761,'EPSG',4761,'GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4762 : BDA2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4762,'EPSG',4762,'GEOGCS["BDA2000",DATUM["Bermuda_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6762"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4762"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4763 : Pitcairn 2006 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4763,'EPSG',4763,'GEOGCS["Pitcairn 2006",DATUM["Pitcairn_2006",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6763"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4763"]]','+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4764 : RSRGD2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4764,'EPSG',4764,'GEOGCS["RSRGD2000",DATUM["Ross_Sea_Region_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6764"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4764"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4765 : Slovenia 1996 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4765,'EPSG',4765,'GEOGCS["Slovenia 1996",DATUM["Slovenia_Geodetic_Datum_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6765"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4765"]]','+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs '); --- --- EPSG 4801 : Bern 1898 (Bern) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4801,'EPSG',4801,'GEOGCS["Bern 1898 (Bern)",DATUM["CH1903_Bern",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6801"]],PRIMEM["Bern",7.439583333333333,AUTHORITY["EPSG","8907"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4801"]]','+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs '); --- --- EPSG 4802 : Bogota 1975 (Bogota) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4802,'EPSG',4802,'GEOGCS["Bogota 1975 (Bogota)",DATUM["Bogota_1975_Bogota",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6802"]],PRIMEM["Bogota",-74.08091666666667,AUTHORITY["EPSG","8904"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4802"]]','+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs '); --- --- EPSG 4803 : Lisbon (Lisbon) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4803,'EPSG',4803,'GEOGCS["Lisbon (Lisbon)",DATUM["Lisbon_1937_Lisbon",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6803"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4803"]]','+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs '); --- --- EPSG 4804 : Makassar (Jakarta) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4804,'EPSG',4804,'GEOGCS["Makassar (Jakarta)",DATUM["Makassar_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6804"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4804"]]','+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs '); --- --- EPSG 4805 : MGI (Ferro) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4805,'EPSG',4805,'GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]]','+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs '); --- --- EPSG 4806 : Monte Mario (Rome) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4806,'EPSG',4806,'GEOGCS["Monte Mario (Rome)",DATUM["Monte_Mario_Rome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6806"]],PRIMEM["Rome",12.45233333333333,AUTHORITY["EPSG","8906"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4806"]]','+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +no_defs '); --- --- EPSG 4807 : NTF (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4807,'EPSG',4807,'GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs '); --- --- EPSG 4808 : Padang (Jakarta) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4808,'EPSG',4808,'GEOGCS["Padang (Jakarta)",DATUM["Padang_1884_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6808"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4808"]]','+proj=longlat +ellps=bessel +pm=jakarta +no_defs '); --- --- EPSG 4809 : Belge 1950 (Brussels) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4809,'EPSG',4809,'GEOGCS["Belge 1950 (Brussels)",DATUM["Reseau_National_Belge_1950_Brussels",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6809"]],PRIMEM["Brussels",4.367975,AUTHORITY["EPSG","8910"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4809"]]','+proj=longlat +ellps=intl +pm=brussels +no_defs '); --- --- EPSG 4810 : Tananarive (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4810,'EPSG',4810,'GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]]','+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs '); --- --- EPSG 4811 : Voirol 1875 (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4811,'EPSG',4811,'GEOGCS["Voirol 1875 (Paris)",DATUM["Voirol_1875_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6811"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4811"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs '); --- --- EPSG 4813 : Batavia (Jakarta) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4813,'EPSG',4813,'GEOGCS["Batavia (Jakarta)",DATUM["Batavia_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6813"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4813"]]','+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs '); --- --- EPSG 4814 : RT38 (Stockholm) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4814,'EPSG',4814,'GEOGCS["RT38 (Stockholm)",DATUM["Stockholm_1938_Stockholm",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6814"]],PRIMEM["Stockholm",18.05827777777778,AUTHORITY["EPSG","8911"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4814"]]','+proj=longlat +ellps=bessel +pm=stockholm +no_defs '); --- --- EPSG 4815 : Greek (Athens) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4815,'EPSG',4815,'GEOGCS["Greek (Athens)",DATUM["Greek_Athens",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6815"]],PRIMEM["Athens",23.7163375,AUTHORITY["EPSG","8912"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4815"]]','+proj=longlat +ellps=bessel +pm=athens +no_defs '); --- --- EPSG 4816 : Carthage (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4816,'EPSG',4816,'GEOGCS["Carthage (Paris)",DATUM["Carthage_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6816"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4816"]]','+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs '); --- --- EPSG 4817 : NGO 1948 (Oslo) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4817,'EPSG',4817,'GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]]','+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs '); --- --- EPSG 4818 : S-JTSK (Ferro) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4818,'EPSG',4818,'GEOGCS["S-JTSK (Ferro)",DATUM["S_JTSK_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6818"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4818"]]','+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs '); --- --- EPSG 4819 : Nord Sahara 1959 (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4819,'EPSG',4819,'GEOGCS["Nord Sahara 1959 (Paris)",DATUM["Nord_Sahara_1959_Paris",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6819"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4819"]]','+proj=longlat +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +pm=paris +no_defs '); --- --- EPSG 4820 : Segara (Jakarta) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4820,'EPSG',4820,'GEOGCS["Segara (Jakarta)",DATUM["Gunung_Segara_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6820"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4820"]]','+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs '); --- --- EPSG 4821 : Voirol 1879 (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4821,'EPSG',4821,'GEOGCS["Voirol 1879 (Paris)",DATUM["Voirol_1879_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6821"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4821"]]','+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs '); --- --- EPSG 4823 : Sao Tome --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4823,'EPSG',4823,'GEOGCS["Sao Tome",DATUM["Sao_Tome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","1044"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4823"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4824 : Principe --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4824,'EPSG',4824,'GEOGCS["Principe",DATUM["Principe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","1046"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4824"]]','+proj=longlat +ellps=intl +no_defs '); --- --- EPSG 4901 : ATF (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4901,'EPSG',4901,'GEOGCS["ATF (Paris)",DATUM["Ancienne_Triangulation_Francaise_Paris",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6901"]],PRIMEM["Paris RGS",2.337208333333333,AUTHORITY["EPSG","8914"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4901"]]','+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs '); --- --- EPSG 4902 : NDG (Paris) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4902,'EPSG',4902,'GEOGCS["NDG (Paris)",DATUM["Nord_de_Guerre_Paris",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6902"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4902"]]','+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs '); --- --- EPSG 4903 : Madrid 1870 (Madrid) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4903,'EPSG',4903,'GEOGCS["Madrid 1870 (Madrid)",DATUM["Madrid_1870_Madrid",SPHEROID["Struve 1860",6378298.3,294.73,AUTHORITY["EPSG","7028"]],AUTHORITY["EPSG","6903"]],PRIMEM["Madrid",-3.687938888888889,AUTHORITY["EPSG","8905"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4903"]]','+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs '); --- --- EPSG 4904 : Lisbon 1890 (Lisbon) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4904,'EPSG',4904,'GEOGCS["Lisbon 1890 (Lisbon)",DATUM["Lisbon_1890_Lisbon",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[508.088,-191.042,565.223,0,0,0,0],AUTHORITY["EPSG","6904"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4904"]]','+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs '); --- --- EPSG 5013 : None --- -- (unable to translate) --- --- EPSG 5132 : None --- -- (unable to translate) --- --- EPSG 5228 : None --- -- (unable to translate) --- --- EPSG 5229 : None --- -- (unable to translate) --- --- EPSG 5233 : None --- -- (unable to translate) --- --- EPSG 5246 : None --- -- (unable to translate) --- --- EPSG 5252 : None --- -- (unable to translate) --- --- EPSG 5264 : None --- -- (unable to translate) --- --- EPSG 5324 : None --- -- (unable to translate) --- --- EPSG 5340 : None --- -- (unable to translate) --- --- EPSG 5354 : None --- -- (unable to translate) --- --- EPSG 5360 : None --- -- (unable to translate) --- --- EPSG 5365 : None --- -- (unable to translate) --- --- EPSG 5371 : None --- -- (unable to translate) --- --- EPSG 5373 : None --- -- (unable to translate) --- --- EPSG 5381 : None --- -- (unable to translate) --- --- EPSG 5393 : None --- -- (unable to translate) --- --- EPSG 5451 : None --- -- (unable to translate) --- --- EPSG 5464 : None --- -- (unable to translate) --- --- EPSG 5467 : None --- -- (unable to translate) --- --- EPSG 5489 : None --- -- (unable to translate) --- --- EPSG 5524 : None --- -- (unable to translate) --- --- EPSG 5527 : None --- -- (unable to translate) --- --- EPSG 5546 : None --- -- (unable to translate) --- --- EPSG 2000 : Anguilla 1957 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2000,'EPSG',2000,'PROJCS["Anguilla 1957 / British West Indies Grid",GEOGCS["Anguilla 1957",DATUM["Anguilla_1957",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6600"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4600"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2000"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 2001 : Antigua 1943 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2001,'EPSG',2001,'PROJCS["Antigua 1943 / British West Indies Grid",GEOGCS["Antigua 1943",DATUM["Antigua_1943",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-255,-15,71,0,0,0,0],AUTHORITY["EPSG","6601"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4601"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2001"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2002 : Dominica 1945 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2002,'EPSG',2002,'PROJCS["Dominica 1945 / British West Indies Grid",GEOGCS["Dominica 1945",DATUM["Dominica_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[725,685,536,0,0,0,0],AUTHORITY["EPSG","6602"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4602"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2002"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2003 : Grenada 1953 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2003,'EPSG',2003,'PROJCS["Grenada 1953 / British West Indies Grid",GEOGCS["Grenada 1953",DATUM["Grenada_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[72,213.7,93,0,0,0,0],AUTHORITY["EPSG","6603"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4603"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2003"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2004 : Montserrat 1958 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2004,'EPSG',2004,'PROJCS["Montserrat 1958 / British West Indies Grid",GEOGCS["Montserrat 1958",DATUM["Montserrat_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[174,359,365,0,0,0,0],AUTHORITY["EPSG","6604"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4604"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2004"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2005 : St. Kitts 1955 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2005,'EPSG',2005,'PROJCS["St. Kitts 1955 / British West Indies Grid",GEOGCS["St. Kitts 1955",DATUM["St_Kitts_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[9,183,236,0,0,0,0],AUTHORITY["EPSG","6605"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4605"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2005"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2006 : St. Lucia 1955 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2006,'EPSG',2006,'PROJCS["St. Lucia 1955 / British West Indies Grid",GEOGCS["St. Lucia 1955",DATUM["St_Lucia_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-149,128,296,0,0,0,0],AUTHORITY["EPSG","6606"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4606"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2006"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2007 : St. Vincent 45 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2007,'EPSG',2007,'PROJCS["St. Vincent 45 / British West Indies Grid",GEOGCS["St. Vincent 1945",DATUM["St_Vincent_1945",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[195.671,332.517,274.607,0,0,0,0],AUTHORITY["EPSG","6607"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4607"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2007"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2008 : NAD27(CGQ77) / SCoPQ zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2008,'EPSG',2008,'PROJCS["NAD27(CGQ77) / SCoPQ zone 2",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2008"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2009 : NAD27(CGQ77) / SCoPQ zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2009,'EPSG',2009,'PROJCS["NAD27(CGQ77) / SCoPQ zone 3",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2009"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2010 : NAD27(CGQ77) / SCoPQ zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2010,'EPSG',2010,'PROJCS["NAD27(CGQ77) / SCoPQ zone 4",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2010"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2011 : NAD27(CGQ77) / SCoPQ zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2011,'EPSG',2011,'PROJCS["NAD27(CGQ77) / SCoPQ zone 5",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2011"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2012 : NAD27(CGQ77) / SCoPQ zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2012,'EPSG',2012,'PROJCS["NAD27(CGQ77) / SCoPQ zone 6",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2012"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2013 : NAD27(CGQ77) / SCoPQ zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2013,'EPSG',2013,'PROJCS["NAD27(CGQ77) / SCoPQ zone 7",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2013"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2014 : NAD27(CGQ77) / SCoPQ zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2014,'EPSG',2014,'PROJCS["NAD27(CGQ77) / SCoPQ zone 8",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2014"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2015 : NAD27(CGQ77) / SCoPQ zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2015,'EPSG',2015,'PROJCS["NAD27(CGQ77) / SCoPQ zone 9",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2015"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2016 : NAD27(CGQ77) / SCoPQ zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2016,'EPSG',2016,'PROJCS["NAD27(CGQ77) / SCoPQ zone 10",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2016"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2017 : NAD27(76) / MTM zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2017,'EPSG',2017,'PROJCS["NAD27(76) / MTM zone 8",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2017"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2018 : NAD27(76) / MTM zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2018,'EPSG',2018,'PROJCS["NAD27(76) / MTM zone 9",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2018"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2019 : NAD27(76) / MTM zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2019,'EPSG',2019,'PROJCS["NAD27(76) / MTM zone 10",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2019"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2020 : NAD27(76) / MTM zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2020,'EPSG',2020,'PROJCS["NAD27(76) / MTM zone 11",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-82.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2020"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2021 : NAD27(76) / MTM zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2021,'EPSG',2021,'PROJCS["NAD27(76) / MTM zone 12",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2021"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2022 : NAD27(76) / MTM zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2022,'EPSG',2022,'PROJCS["NAD27(76) / MTM zone 13",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2022"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2023 : NAD27(76) / MTM zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2023,'EPSG',2023,'PROJCS["NAD27(76) / MTM zone 14",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2023"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2024 : NAD27(76) / MTM zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2024,'EPSG',2024,'PROJCS["NAD27(76) / MTM zone 15",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2024"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2025 : NAD27(76) / MTM zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2025,'EPSG',2025,'PROJCS["NAD27(76) / MTM zone 16",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2025"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2026 : NAD27(76) / MTM zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2026,'EPSG',2026,'PROJCS["NAD27(76) / MTM zone 17",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-96],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2026"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2027 : NAD27(76) / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2027,'EPSG',2027,'PROJCS["NAD27(76) / UTM zone 15N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2027"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2028 : NAD27(76) / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2028,'EPSG',2028,'PROJCS["NAD27(76) / UTM zone 16N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2028"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2029 : NAD27(76) / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2029,'EPSG',2029,'PROJCS["NAD27(76) / UTM zone 17N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2029"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2030 : NAD27(76) / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2030,'EPSG',2030,'PROJCS["NAD27(76) / UTM zone 18N",GEOGCS["NAD27(76)",DATUM["North_American_Datum_1927_1976",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6608"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4608"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2030"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2031 : NAD27(CGQ77) / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2031,'EPSG',2031,'PROJCS["NAD27(CGQ77) / UTM zone 17N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2031"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2032 : NAD27(CGQ77) / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2032,'EPSG',2032,'PROJCS["NAD27(CGQ77) / UTM zone 18N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2033 : NAD27(CGQ77) / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2033,'EPSG',2033,'PROJCS["NAD27(CGQ77) / UTM zone 19N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2034 : NAD27(CGQ77) / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2034,'EPSG',2034,'PROJCS["NAD27(CGQ77) / UTM zone 20N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2034"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2035 : NAD27(CGQ77) / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2035,'EPSG',2035,'PROJCS["NAD27(CGQ77) / UTM zone 21N",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2035"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2036 : NAD83(CSRS98) / New Brunswick Stereo (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2036,'EPSG',2036,'PROJCS["NAD83(CSRS98) / New Brunswick Stereo (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-66.5],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",2500000],PARAMETER["false_northing",7500000],AUTHORITY["EPSG","2036"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2037 : NAD83(CSRS98) / UTM zone 19N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2037,'EPSG',2037,'PROJCS["NAD83(CSRS98) / UTM zone 19N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2038 : NAD83(CSRS98) / UTM zone 20N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2038,'EPSG',2038,'PROJCS["NAD83(CSRS98) / UTM zone 20N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2038"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2039 : Israel / Israeli TM Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2039,'EPSG',2039,'PROJCS["Israel / Israeli TM Grid",GEOGCS["Israel",DATUM["Israel",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-48,55,52,0,0,0,0],AUTHORITY["EPSG","6141"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4141"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31.73439361111111],PARAMETER["central_meridian",35.20451694444445],PARAMETER["scale_factor",1.0000067],PARAMETER["false_easting",219529.584],PARAMETER["false_northing",626907.39],AUTHORITY["EPSG","2039"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2040 : Locodjo 1965 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2040,'EPSG',2040,'PROJCS["Locodjo 1965 / UTM zone 30N",GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2040"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2041 : Abidjan 1987 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2041,'EPSG',2041,'PROJCS["Abidjan 1987 / UTM zone 30N",GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2041"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2042 : Locodjo 1965 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2042,'EPSG',2042,'PROJCS["Locodjo 1965 / UTM zone 29N",GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2042"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2043 : Abidjan 1987 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2043,'EPSG',2043,'PROJCS["Abidjan 1987 / UTM zone 29N",GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2043"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2044 : Hanoi 1972 / Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2044,'EPSG',2044,'PROJCS["Hanoi 1972 / Gauss-Kruger zone 18",GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2044"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2045 : Hanoi 1972 / Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2045,'EPSG',2045,'PROJCS["Hanoi 1972 / Gauss-Kruger zone 19",GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2045"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2046 : Hartebeesthoek94 / Lo15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2046,'EPSG',2046,'PROJCS["Hartebeesthoek94 / Lo15",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2046"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2047 : Hartebeesthoek94 / Lo17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2047,'EPSG',2047,'PROJCS["Hartebeesthoek94 / Lo17",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2047"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2048 : Hartebeesthoek94 / Lo19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2048,'EPSG',2048,'PROJCS["Hartebeesthoek94 / Lo19",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2048"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2049 : Hartebeesthoek94 / Lo21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2049,'EPSG',2049,'PROJCS["Hartebeesthoek94 / Lo21",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2049"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2050 : Hartebeesthoek94 / Lo23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2050,'EPSG',2050,'PROJCS["Hartebeesthoek94 / Lo23",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2050"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2051 : Hartebeesthoek94 / Lo25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2051,'EPSG',2051,'PROJCS["Hartebeesthoek94 / Lo25",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2051"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2052 : Hartebeesthoek94 / Lo27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2052,'EPSG',2052,'PROJCS["Hartebeesthoek94 / Lo27",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2052"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2053 : Hartebeesthoek94 / Lo29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2053,'EPSG',2053,'PROJCS["Hartebeesthoek94 / Lo29",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",29],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2053"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2054 : Hartebeesthoek94 / Lo31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2054,'EPSG',2054,'PROJCS["Hartebeesthoek94 / Lo31",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2054"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2055 : Hartebeesthoek94 / Lo33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2055,'EPSG',2055,'PROJCS["Hartebeesthoek94 / Lo33",GEOGCS["Hartebeesthoek94",DATUM["Hartebeesthoek94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6148"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4148"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2055"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2056 : CH1903+ / LV95 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2056,'EPSG',2056,'PROJCS["CH1903+ / LV95",GEOGCS["CH1903+",DATUM["CH1903+",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.374,15.056,405.346,0,0,0,0],AUTHORITY["EPSG","6150"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4150"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",7.439583333333333],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",2600000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","2056"],AXIS["Y",EAST],AXIS["X",NORTH]]','+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2057 : Rassadiran / Nakhl e Taqi --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2057,'EPSG',2057,'PROJCS["Rassadiran / Nakhl e Taqi",GEOGCS["Rassadiran",DATUM["Rassadiran",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-133.63,-157.5,-158.62,0,0,0,0],AUTHORITY["EPSG","6153"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4153"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",27.51882880555555],PARAMETER["longitude_of_center",52.60353916666667],PARAMETER["azimuth",0.5716611944444444],PARAMETER["rectified_grid_angle",0.5716611944444444],PARAMETER["scale_factor",0.999895934],PARAMETER["false_easting",658377.437],PARAMETER["false_northing",3044969.194],AUTHORITY["EPSG","2057"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +gamma=0.5716611944444444 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2058 : ED50(ED77) / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2058,'EPSG',2058,'PROJCS["ED50(ED77) / UTM zone 38N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2058"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2059 : ED50(ED77) / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2059,'EPSG',2059,'PROJCS["ED50(ED77) / UTM zone 39N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2059"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2060 : ED50(ED77) / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2060,'EPSG',2060,'PROJCS["ED50(ED77) / UTM zone 40N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2060"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2061 : ED50(ED77) / UTM zone 41N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2061,'EPSG',2061,'PROJCS["ED50(ED77) / UTM zone 41N",GEOGCS["ED50(ED77)",DATUM["European_Datum_1950_1977",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-117,-132,-164,0,0,0,0],AUTHORITY["EPSG","6154"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4154"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2061"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2062 : Madrid 1870 (Madrid) / Spain --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2062,'EPSG',2062,'PROJCS["Madrid 1870 (Madrid) / Spain",GEOGCS["Madrid 1870 (Madrid)",DATUM["Madrid_1870_Madrid",SPHEROID["Struve 1860",6378298.3,294.73,AUTHORITY["EPSG","7028"]],AUTHORITY["EPSG","6903"]],PRIMEM["Madrid",-3.687938888888889,AUTHORITY["EPSG","8905"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4903"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.9988085293],PARAMETER["false_easting",600000],PARAMETER["false_northing",600000],AUTHORITY["EPSG","2062"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs '); --- --- EPSG 2063 : Dabola 1981 / UTM zone 28N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2063,'EPSG',2063,'PROJCS["Dabola 1981 / UTM zone 28N (deprecated)",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2063"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2064 : Dabola 1981 / UTM zone 29N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2064,'EPSG',2064,'PROJCS["Dabola 1981 / UTM zone 29N (deprecated)",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2064"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2065 : S-JTSK (Ferro) / Krovak --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2065,'EPSG',2065,'PROJCS["S-JTSK (Ferro) / Krovak",GEOGCS["S-JTSK (Ferro)",DATUM["S_JTSK_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6818"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4818"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Krovak"],PARAMETER["latitude_of_center",49.5],PARAMETER["longitude_of_center",42.5],PARAMETER["azimuth",30.28813972222222],PARAMETER["pseudo_standard_parallel_1",78.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2065"],AXIS["X",SOUTH],AXIS["Y",WEST]]','+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=-0 +y_0=-0 +ellps=bessel +towgs84=570.8,85.7,462.8,4.998,1.587,5.261,3.56 +pm=ferro +to_meter=-1 +no_defs'); --- --- EPSG 2066 : Mount Dillon / Tobago Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2066,'EPSG',2066,'PROJCS["Mount Dillon / Tobago Grid",GEOGCS["Mount Dillon",DATUM["Mount_Dillon",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6157"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4157"]],UNIT["Clarke''s link",0.201166195164,AUTHORITY["EPSG","9039"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",11.25217861111111],PARAMETER["central_meridian",-60.68600888888889],PARAMETER["false_easting",187500],PARAMETER["false_northing",180000],AUTHORITY["EPSG","2066"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs '); --- --- EPSG 2067 : Naparima 1955 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2067,'EPSG',2067,'PROJCS["Naparima 1955 / UTM zone 20N",GEOGCS["Naparima 1955",DATUM["Naparima_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-0.465,372.095,171.736,0,0,0,0],AUTHORITY["EPSG","6158"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4158"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2067"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2068 : ELD79 / Libya zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2068,'EPSG',2068,'PROJCS["ELD79 / Libya zone 5",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2068"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2069 : ELD79 / Libya zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2069,'EPSG',2069,'PROJCS["ELD79 / Libya zone 6",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2069"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2070 : ELD79 / Libya zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2070,'EPSG',2070,'PROJCS["ELD79 / Libya zone 7",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2070"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2071 : ELD79 / Libya zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2071,'EPSG',2071,'PROJCS["ELD79 / Libya zone 8",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2071"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2072 : ELD79 / Libya zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2072,'EPSG',2072,'PROJCS["ELD79 / Libya zone 9",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2072"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2073 : ELD79 / Libya zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2073,'EPSG',2073,'PROJCS["ELD79 / Libya zone 10",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2073"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2074 : ELD79 / Libya zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2074,'EPSG',2074,'PROJCS["ELD79 / Libya zone 11",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2074"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2075 : ELD79 / Libya zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2075,'EPSG',2075,'PROJCS["ELD79 / Libya zone 12",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2075"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2076 : ELD79 / Libya zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2076,'EPSG',2076,'PROJCS["ELD79 / Libya zone 13",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2076"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2077 : ELD79 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2077,'EPSG',2077,'PROJCS["ELD79 / UTM zone 32N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2077"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2078 : ELD79 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2078,'EPSG',2078,'PROJCS["ELD79 / UTM zone 33N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2078"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2079 : ELD79 / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2079,'EPSG',2079,'PROJCS["ELD79 / UTM zone 34N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2079"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2080 : ELD79 / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2080,'EPSG',2080,'PROJCS["ELD79 / UTM zone 35N",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2080"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2081 : Chos Malal 1914 / Argentina zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2081,'EPSG',2081,'PROJCS["Chos Malal 1914 / Argentina zone 2",GEOGCS["Chos Malal 1914",DATUM["Chos_Malal_1914",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6160"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4160"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2081"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs '); --- --- EPSG 2082 : Pampa del Castillo / Argentina zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2082,'EPSG',2082,'PROJCS["Pampa del Castillo / Argentina zone 2",GEOGCS["Pampa del Castillo",DATUM["Pampa_del_Castillo",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[27.5,14,186.4,0,0,0,0],AUTHORITY["EPSG","6161"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4161"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2082"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2083 : Hito XVIII 1963 / Argentina zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2083,'EPSG',2083,'PROJCS["Hito XVIII 1963 / Argentina zone 2",GEOGCS["Hito XVIII 1963",DATUM["Hito_XVIII_1963",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[16,196,93,0,0,0,0],AUTHORITY["EPSG","6254"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4254"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2083"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2084 : Hito XVIII 1963 / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2084,'EPSG',2084,'PROJCS["Hito XVIII 1963 / UTM zone 19S",GEOGCS["Hito XVIII 1963",DATUM["Hito_XVIII_1963",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[16,196,93,0,0,0,0],AUTHORITY["EPSG","6254"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4254"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2084"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2085 : NAD27 / Cuba Norte (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2085,'EPSG',2085,'PROJCS["NAD27 / Cuba Norte (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",22.35],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.99993602],PARAMETER["false_easting",500000],PARAMETER["false_northing",280296.016],AUTHORITY["EPSG","2085"],AXIS["Y",NORTH],AXIS["X",EAST]]','+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 2086 : NAD27 / Cuba Sur (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2086,'EPSG',2086,'PROJCS["NAD27 / Cuba Sur (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",20.71666666666667],PARAMETER["central_meridian",-76.83333333333333],PARAMETER["scale_factor",0.99994848],PARAMETER["false_easting",500000],PARAMETER["false_northing",229126.939],AUTHORITY["EPSG","2086"],AXIS["Y",NORTH],AXIS["X",EAST]]','+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 2087 : ELD79 / TM 12 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2087,'EPSG',2087,'PROJCS["ELD79 / TM 12 NE",GEOGCS["ELD79",DATUM["European_Libyan_Datum_1979",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-115.854,-99.0583,-152.462,0,0,0,0],AUTHORITY["EPSG","6159"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4159"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2087"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2088 : Carthage / TM 11 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2088,'EPSG',2088,'PROJCS["Carthage / TM 11 NE",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2088"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2089 : Yemen NGN96 / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2089,'EPSG',2089,'PROJCS["Yemen NGN96 / UTM zone 38N",GEOGCS["Yemen NGN96",DATUM["Yemen_National_Geodetic_Network_1996",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6163"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4163"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2089"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2090 : Yemen NGN96 / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2090,'EPSG',2090,'PROJCS["Yemen NGN96 / UTM zone 39N",GEOGCS["Yemen NGN96",DATUM["Yemen_National_Geodetic_Network_1996",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6163"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4163"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2090"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2091 : South Yemen / Gauss Kruger zone 8 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2091,'EPSG',2091,'PROJCS["South Yemen / Gauss Kruger zone 8 (deprecated)",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2091"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2092 : South Yemen / Gauss Kruger zone 9 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2092,'EPSG',2092,'PROJCS["South Yemen / Gauss Kruger zone 9 (deprecated)",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2092"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2093 : Hanoi 1972 / GK 106 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2093,'EPSG',2093,'PROJCS["Hanoi 1972 / GK 106 NE",GEOGCS["Hanoi 1972",DATUM["Hanoi_1972",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-17.51,-108.32,-62.39,0,0,0,0],AUTHORITY["EPSG","6147"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4147"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2093"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2094 : WGS 72BE / TM 106 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2094,'EPSG',2094,'PROJCS["WGS 72BE / TM 106 NE",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2094"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 2095 : Bissau / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2095,'EPSG',2095,'PROJCS["Bissau / UTM zone 28N",GEOGCS["Bissau",DATUM["Bissau",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-173,253,27,0,0,0,0],AUTHORITY["EPSG","6165"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4165"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2096 : Korean 1985 / Korea East Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2096,'EPSG',2096,'PROJCS["Korean 1985 / Korea East Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2096"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs '); --- --- EPSG 2097 : Korean 1985 / Korea Central Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2097,'EPSG',2097,'PROJCS["Korean 1985 / Korea Central Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",127],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2097"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs '); --- --- EPSG 2098 : Korean 1985 / Korea West Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2098,'EPSG',2098,'PROJCS["Korean 1985 / Korea West Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4162"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",125],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2098"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs '); --- --- EPSG 2099 : Qatar 1948 / Qatar Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2099,'EPSG',2099,'PROJCS["Qatar 1948 / Qatar Grid",GEOGCS["Qatar 1948",DATUM["Qatar_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6286"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4286"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",25.38236111111111],PARAMETER["central_meridian",50.76138888888889],PARAMETER["false_easting",100000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2099"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs '); --- --- EPSG 2100 : GGRS87 / Greek Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2100,'EPSG',2100,'PROJCS["GGRS87 / Greek Grid",GEOGCS["GGRS87",DATUM["Greek_Geodetic_Reference_System_1987",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-199.87,74.79,246.62,0,0,0,0],AUTHORITY["EPSG","6121"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4121"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2100"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2101 : Lake / Maracaibo Grid M1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2101,'EPSG',2101,'PROJCS["Lake / Maracaibo Grid M1",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-52684.972],AUTHORITY["EPSG","2101"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs '); --- --- EPSG 2102 : Lake / Maracaibo Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2102,'EPSG',2102,'PROJCS["Lake / Maracaibo Grid",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",147315.028],AUTHORITY["EPSG","2102"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs '); --- --- EPSG 2103 : Lake / Maracaibo Grid M3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2103,'EPSG',2103,'PROJCS["Lake / Maracaibo Grid M3",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",447315.028],AUTHORITY["EPSG","2103"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs '); --- --- EPSG 2104 : Lake / Maracaibo La Rosa Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2104,'EPSG',2104,'PROJCS["Lake / Maracaibo La Rosa Grid",GEOGCS["Lake",DATUM["Lake",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6249"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4249"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",10.16666666666667],PARAMETER["central_meridian",-71.60561777777777],PARAMETER["scale_factor",1],PARAMETER["false_easting",-17044],PARAMETER["false_northing",-23139.97],AUTHORITY["EPSG","2104"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs '); --- --- EPSG 2105 : NZGD2000 / Mount Eden 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2105,'EPSG',2105,'PROJCS["NZGD2000 / Mount Eden 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-36.87972222222222],PARAMETER["central_meridian",174.7641666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2105"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2106 : NZGD2000 / Bay of Plenty 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2106,'EPSG',2106,'PROJCS["NZGD2000 / Bay of Plenty 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-37.76111111111111],PARAMETER["central_meridian",176.4661111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2106"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2107 : NZGD2000 / Poverty Bay 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2107,'EPSG',2107,'PROJCS["NZGD2000 / Poverty Bay 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-38.62444444444444],PARAMETER["central_meridian",177.8855555555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2107"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2108 : NZGD2000 / Hawkes Bay 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2108,'EPSG',2108,'PROJCS["NZGD2000 / Hawkes Bay 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.65083333333333],PARAMETER["central_meridian",176.6736111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2108"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2109 : NZGD2000 / Taranaki 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2109,'EPSG',2109,'PROJCS["NZGD2000 / Taranaki 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.13555555555556],PARAMETER["central_meridian",174.2277777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2109"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2110 : NZGD2000 / Tuhirangi 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2110,'EPSG',2110,'PROJCS["NZGD2000 / Tuhirangi 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.51222222222222],PARAMETER["central_meridian",175.64],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2110"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2111 : NZGD2000 / Wanganui 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2111,'EPSG',2111,'PROJCS["NZGD2000 / Wanganui 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.24194444444444],PARAMETER["central_meridian",175.4880555555555],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2111"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2112 : NZGD2000 / Wairarapa 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2112,'EPSG',2112,'PROJCS["NZGD2000 / Wairarapa 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.92527777777777],PARAMETER["central_meridian",175.6472222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2112"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2113 : NZGD2000 / Wellington 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2113,'EPSG',2113,'PROJCS["NZGD2000 / Wellington 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.3011111111111],PARAMETER["central_meridian",174.7763888888889],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2113"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2114 : NZGD2000 / Collingwood 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2114,'EPSG',2114,'PROJCS["NZGD2000 / Collingwood 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.71472222222223],PARAMETER["central_meridian",172.6719444444444],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2114"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2115 : NZGD2000 / Nelson 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2115,'EPSG',2115,'PROJCS["NZGD2000 / Nelson 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.27444444444444],PARAMETER["central_meridian",173.2991666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2115"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2116 : NZGD2000 / Karamea 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2116,'EPSG',2116,'PROJCS["NZGD2000 / Karamea 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.28972222222222],PARAMETER["central_meridian",172.1088888888889],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2116"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2117 : NZGD2000 / Buller 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2117,'EPSG',2117,'PROJCS["NZGD2000 / Buller 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.81055555555555],PARAMETER["central_meridian",171.5811111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2117"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2118 : NZGD2000 / Grey 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2118,'EPSG',2118,'PROJCS["NZGD2000 / Grey 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.33361111111111],PARAMETER["central_meridian",171.5497222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2118"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2119 : NZGD2000 / Amuri 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2119,'EPSG',2119,'PROJCS["NZGD2000 / Amuri 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.68888888888888],PARAMETER["central_meridian",173.01],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2119"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2120 : NZGD2000 / Marlborough 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2120,'EPSG',2120,'PROJCS["NZGD2000 / Marlborough 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.54444444444444],PARAMETER["central_meridian",173.8019444444444],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2120"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2121 : NZGD2000 / Hokitika 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2121,'EPSG',2121,'PROJCS["NZGD2000 / Hokitika 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.88611111111111],PARAMETER["central_meridian",170.9797222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2121"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2122 : NZGD2000 / Okarito 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2122,'EPSG',2122,'PROJCS["NZGD2000 / Okarito 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.11],PARAMETER["central_meridian",170.2608333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2122"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2123 : NZGD2000 / Jacksons Bay 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2123,'EPSG',2123,'PROJCS["NZGD2000 / Jacksons Bay 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.97777777777778],PARAMETER["central_meridian",168.6061111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2123"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2124 : NZGD2000 / Mount Pleasant 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2124,'EPSG',2124,'PROJCS["NZGD2000 / Mount Pleasant 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.59055555555556],PARAMETER["central_meridian",172.7269444444445],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2124"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2125 : NZGD2000 / Gawler 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2125,'EPSG',2125,'PROJCS["NZGD2000 / Gawler 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.74861111111111],PARAMETER["central_meridian",171.3605555555555],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2125"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2126 : NZGD2000 / Timaru 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2126,'EPSG',2126,'PROJCS["NZGD2000 / Timaru 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.40194444444445],PARAMETER["central_meridian",171.0572222222222],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2126"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2127 : NZGD2000 / Lindis Peak 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2127,'EPSG',2127,'PROJCS["NZGD2000 / Lindis Peak 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.735],PARAMETER["central_meridian",169.4675],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2127"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2128 : NZGD2000 / Mount Nicholas 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2128,'EPSG',2128,'PROJCS["NZGD2000 / Mount Nicholas 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.13277777777778],PARAMETER["central_meridian",168.3986111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2128"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2129 : NZGD2000 / Mount York 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2129,'EPSG',2129,'PROJCS["NZGD2000 / Mount York 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.56361111111111],PARAMETER["central_meridian",167.7386111111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2129"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2130 : NZGD2000 / Observation Point 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2130,'EPSG',2130,'PROJCS["NZGD2000 / Observation Point 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.81611111111111],PARAMETER["central_meridian",170.6283333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2130"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2131 : NZGD2000 / North Taieri 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2131,'EPSG',2131,'PROJCS["NZGD2000 / North Taieri 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.86138888888889],PARAMETER["central_meridian",170.2825],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2131"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2132 : NZGD2000 / Bluff 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2132,'EPSG',2132,'PROJCS["NZGD2000 / Bluff 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-46.6],PARAMETER["central_meridian",168.3427777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2132"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2133 : NZGD2000 / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2133,'EPSG',2133,'PROJCS["NZGD2000 / UTM zone 58S",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2133"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2134 : NZGD2000 / UTM zone 59S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2134,'EPSG',2134,'PROJCS["NZGD2000 / UTM zone 59S",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2134"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2135 : NZGD2000 / UTM zone 60S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2135,'EPSG',2135,'PROJCS["NZGD2000 / UTM zone 60S",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2135"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2136 : Accra / Ghana National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2136,'EPSG',2136,'PROJCS["Accra / Ghana National Grid",GEOGCS["Accra",DATUM["Accra",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],TOWGS84[-199,32,322,0,0,0,0],AUTHORITY["EPSG","6168"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4168"]],UNIT["Gold Coast foot",0.3047997101815088,AUTHORITY["EPSG","9094"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.666666666666667],PARAMETER["central_meridian",-1],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2136"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs '); --- --- EPSG 2137 : Accra / TM 1 NW --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2137,'EPSG',2137,'PROJCS["Accra / TM 1 NW",GEOGCS["Accra",DATUM["Accra",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],TOWGS84[-199,32,322,0,0,0,0],AUTHORITY["EPSG","6168"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4168"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-1],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2137"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2138 : NAD27(CGQ77) / Quebec Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2138,'EPSG',2138,'PROJCS["NAD27(CGQ77) / Quebec Lambert",GEOGCS["NAD27(CGQ77)",DATUM["North_American_Datum_1927_CGQ77",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6609"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4609"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",60],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-68.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2138"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs '); --- --- EPSG 2139 : NAD83(CSRS98) / SCoPQ zone 2 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2139,'EPSG',2139,'PROJCS["NAD83(CSRS98) / SCoPQ zone 2 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2139"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2140 : NAD83(CSRS98) / MTM zone 3 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2140,'EPSG',2140,'PROJCS["NAD83(CSRS98) / MTM zone 3 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2140"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2141 : NAD83(CSRS98) / MTM zone 4 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2141,'EPSG',2141,'PROJCS["NAD83(CSRS98) / MTM zone 4 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2141"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2142 : NAD83(CSRS98) / MTM zone 5 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2142,'EPSG',2142,'PROJCS["NAD83(CSRS98) / MTM zone 5 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2142"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2143 : NAD83(CSRS98) / MTM zone 6 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2143,'EPSG',2143,'PROJCS["NAD83(CSRS98) / MTM zone 6 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2143"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2144 : NAD83(CSRS98) / MTM zone 7 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2144,'EPSG',2144,'PROJCS["NAD83(CSRS98) / MTM zone 7 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2144"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2145 : NAD83(CSRS98) / MTM zone 8 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2145,'EPSG',2145,'PROJCS["NAD83(CSRS98) / MTM zone 8 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2145"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2146 : NAD83(CSRS98) / MTM zone 9 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2146,'EPSG',2146,'PROJCS["NAD83(CSRS98) / MTM zone 9 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2146"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2147 : NAD83(CSRS98) / MTM zone 10 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2147,'EPSG',2147,'PROJCS["NAD83(CSRS98) / MTM zone 10 (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2147"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2148 : NAD83(CSRS98) / UTM zone 21N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2148,'EPSG',2148,'PROJCS["NAD83(CSRS98) / UTM zone 21N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2148"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2149 : NAD83(CSRS98) / UTM zone 18N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2149,'EPSG',2149,'PROJCS["NAD83(CSRS98) / UTM zone 18N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2149"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2150 : NAD83(CSRS98) / UTM zone 17N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2150,'EPSG',2150,'PROJCS["NAD83(CSRS98) / UTM zone 17N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2150"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2151 : NAD83(CSRS98) / UTM zone 13N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2151,'EPSG',2151,'PROJCS["NAD83(CSRS98) / UTM zone 13N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2151"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2152 : NAD83(CSRS98) / UTM zone 12N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2152,'EPSG',2152,'PROJCS["NAD83(CSRS98) / UTM zone 12N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2152"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2153 : NAD83(CSRS98) / UTM zone 11N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2153,'EPSG',2153,'PROJCS["NAD83(CSRS98) / UTM zone 11N (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2153"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2154 : RGF93 / Lambert-93 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2154,'EPSG',2154,'PROJCS["RGF93 / Lambert-93",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",44],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",3],PARAMETER["false_easting",700000],PARAMETER["false_northing",6600000],AUTHORITY["EPSG","2154"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2155 : American Samoa 1962 / American Samoa Lambert (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2155,'EPSG',2155,'PROJCS["American Samoa 1962 / American Samoa Lambert (deprecated)",GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-14.26666666666667],PARAMETER["central_meridian",170],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2155"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2156 : NAD83(HARN) / UTM zone 59S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2156,'EPSG',2156,'PROJCS["NAD83(HARN) / UTM zone 59S (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2156"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2157 : IRENET95 / Irish Transverse Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2157,'EPSG',2157,'PROJCS["IRENET95 / Irish Transverse Mercator",GEOGCS["IRENET95",DATUM["IRENET95",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6173"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4173"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",0.99982],PARAMETER["false_easting",600000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","2157"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2158 : IRENET95 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2158,'EPSG',2158,'PROJCS["IRENET95 / UTM zone 29N",GEOGCS["IRENET95",DATUM["IRENET95",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6173"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4173"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2158"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2159 : Sierra Leone 1924 / New Colony Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2159,'EPSG',2159,'PROJCS["Sierra Leone 1924 / New Colony Grid",GEOGCS["Sierra Leone 1924",DATUM["Sierra_Leone_Colony_1924",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6174"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4174"]],UNIT["Gold Coast foot",0.3047997101815088,AUTHORITY["EPSG","9094"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",6.666666666666667],PARAMETER["central_meridian",-12],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2159"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs '); --- --- EPSG 2160 : Sierra Leone 1924 / New War Office Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2160,'EPSG',2160,'PROJCS["Sierra Leone 1924 / New War Office Grid",GEOGCS["Sierra Leone 1924",DATUM["Sierra_Leone_Colony_1924",SPHEROID["War Office",6378300,296,AUTHORITY["EPSG","7029"]],AUTHORITY["EPSG","6174"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4174"]],UNIT["Gold Coast foot",0.3047997101815088,AUTHORITY["EPSG","9094"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",6.666666666666667],PARAMETER["central_meridian",-12],PARAMETER["scale_factor",1],PARAMETER["false_easting",800000],PARAMETER["false_northing",600000],AUTHORITY["EPSG","2160"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs '); --- --- EPSG 2161 : Sierra Leone 1968 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2161,'EPSG',2161,'PROJCS["Sierra Leone 1968 / UTM zone 28N",GEOGCS["Sierra Leone 1968",DATUM["Sierra_Leone_1968",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY["EPSG","6175"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4175"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2161"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2162 : Sierra Leone 1968 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2162,'EPSG',2162,'PROJCS["Sierra Leone 1968 / UTM zone 29N",GEOGCS["Sierra Leone 1968",DATUM["Sierra_Leone_1968",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-88,4,101,0,0,0,0],AUTHORITY["EPSG","6175"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4175"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2162"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2163 : unnamed --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2163,'EPSG',2163,'PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6370997,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","2163"]]','+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs '); --- --- EPSG 2164 : Locodjo 1965 / TM 5 NW --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2164,'EPSG',2164,'PROJCS["Locodjo 1965 / TM 5 NW",GEOGCS["Locodjo 1965",DATUM["Locodjo_1965",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-125,53,467,0,0,0,0],AUTHORITY["EPSG","6142"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4142"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2164"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2165 : Abidjan 1987 / TM 5 NW --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2165,'EPSG',2165,'PROJCS["Abidjan 1987 / TM 5 NW",GEOGCS["Abidjan 1987",DATUM["Abidjan_1987",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-124.76,53,466.79,0,0,0,0],AUTHORITY["EPSG","6143"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4143"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2165"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2166 : Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2166,'EPSG',2166,'PROJCS["Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2166"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2167 : Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2167,'EPSG',2167,'PROJCS["Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2167"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2168 : Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2168,'EPSG',2168,'PROJCS["Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2168"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2169 : Luxembourg 1930 / Gauss --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2169,'EPSG',2169,'PROJCS["Luxembourg 1930 / Gauss",GEOGCS["Luxembourg 1930",DATUM["Luxembourg_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-193,13.7,-39.3,-0.41,-2.933,2.688,0.43],AUTHORITY["EPSG","6181"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4181"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49.83333333333334],PARAMETER["central_meridian",6.166666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",80000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2169"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs '); --- --- EPSG 2170 : MGI / Slovenia Grid (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2170,'EPSG',2170,'PROJCS["MGI / Slovenia Grid (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2170"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 2171 : Pulkovo 1942(58) / Poland zone I (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2171,'EPSG',2171,'PROJCS["Pulkovo 1942(58) / Poland zone I (deprecated)",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",50.625],PARAMETER["central_meridian",21.08333333333333],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",4637000],PARAMETER["false_northing",5647000],AUTHORITY["EPSG","2171"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 2172 : Pulkovo 1942(58) / Poland zone II --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2172,'EPSG',2172,'PROJCS["Pulkovo 1942(58) / Poland zone II",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",53.00194444444445],PARAMETER["central_meridian",21.50277777777778],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",4603000],PARAMETER["false_northing",5806000],AUTHORITY["EPSG","2172"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 2173 : Pulkovo 1942(58) / Poland zone III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2173,'EPSG',2173,'PROJCS["Pulkovo 1942(58) / Poland zone III",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",53.58333333333334],PARAMETER["central_meridian",17.00833333333333],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",3501000],PARAMETER["false_northing",5999000],AUTHORITY["EPSG","2173"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 2174 : Pulkovo 1942(58) / Poland zone IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2174,'EPSG',2174,'PROJCS["Pulkovo 1942(58) / Poland zone IV",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",51.67083333333333],PARAMETER["central_meridian",16.67222222222222],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",3703000],PARAMETER["false_northing",5627000],AUTHORITY["EPSG","2174"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 2175 : Pulkovo 1942(58) / Poland zone V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2175,'EPSG',2175,'PROJCS["Pulkovo 1942(58) / Poland zone V",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.95833333333333],PARAMETER["scale_factor",0.999983],PARAMETER["false_easting",237000],PARAMETER["false_northing",-4700000],AUTHORITY["EPSG","2175"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 2176 : ETRS89 / Poland CS2000 zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2176,'EPSG',2176,'PROJCS["ETRS89 / Poland CS2000 zone 5",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2176"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2177 : ETRS89 / Poland CS2000 zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2177,'EPSG',2177,'PROJCS["ETRS89 / Poland CS2000 zone 6",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2177"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2178 : ETRS89 / Poland CS2000 zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2178,'EPSG',2178,'PROJCS["ETRS89 / Poland CS2000 zone 7",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2178"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2179 : ETRS89 / Poland CS2000 zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2179,'EPSG',2179,'PROJCS["ETRS89 / Poland CS2000 zone 8",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.999923],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2179"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2180 : ETRS89 / Poland CS92 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2180,'EPSG',2180,'PROJCS["ETRS89 / Poland CS92",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",0.9993],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5300000],AUTHORITY["EPSG","2180"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2188 : Azores Occidental 1939 / UTM zone 25N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2188,'EPSG',2188,'PROJCS["Azores Occidental 1939 / UTM zone 25N",GEOGCS["Azores Occidental 1939",DATUM["Azores_Occidental_Islands_1939",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-425,-169,81,0,0,0,0],AUTHORITY["EPSG","6182"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4182"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2188"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2189 : Azores Central 1948 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2189,'EPSG',2189,'PROJCS["Azores Central 1948 / UTM zone 26N",GEOGCS["Azores Central 1948",DATUM["Azores_Central_Islands_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104,167,-38,0,0,0,0],AUTHORITY["EPSG","6183"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4183"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2189"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2190 : Azores Oriental 1940 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2190,'EPSG',2190,'PROJCS["Azores Oriental 1940 / UTM zone 26N",GEOGCS["Azores Oriental 1940",DATUM["Azores_Oriental_Islands_1940",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-203,141,53,0,0,0,0],AUTHORITY["EPSG","6184"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4184"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2190"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2191 : Madeira 1936 / UTM zone 28N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2191,'EPSG',2191,'PROJCS["Madeira 1936 / UTM zone 28N (deprecated)",GEOGCS["Madeira 1936",DATUM["Madeira_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6185"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4185"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=intl +units=m +no_defs '); --- --- EPSG 2192 : ED50 / France EuroLambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2192,'EPSG',2192,'PROJCS["ED50 / France EuroLambert",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.8],PARAMETER["central_meridian",2.337229166666667],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","2192"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2193 : NZGD2000 / New Zealand Transverse Mercator 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2193,'EPSG',2193,'PROJCS["NZGD2000 / New Zealand Transverse Mercator 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",173],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1600000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2193"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2194 : American Samoa 1962 / American Samoa Lambert (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2194,'EPSG',2194,'PROJCS["American Samoa 1962 / American Samoa Lambert (deprecated)",GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-14.26666666666667],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2194"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2195 : NAD83(HARN) / UTM zone 2S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2195,'EPSG',2195,'PROJCS["NAD83(HARN) / UTM zone 2S",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2195"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2196 : ETRS89 / Kp2000 Jutland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2196,'EPSG',2196,'PROJCS["ETRS89 / Kp2000 Jutland",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9.5],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2196"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2197 : ETRS89 / Kp2000 Zealand --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2197,'EPSG',2197,'PROJCS["ETRS89 / Kp2000 Zealand",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2197"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2198 : ETRS89 / Kp2000 Bornholm --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2198,'EPSG',2198,'PROJCS["ETRS89 / Kp2000 Bornholm",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2198"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2199 : Albanian 1987 / Gauss Kruger zone 4 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2199,'EPSG',2199,'PROJCS["Albanian 1987 / Gauss Kruger zone 4 (deprecated)",GEOGCS["Albanian 1987",DATUM["Albanian_1987",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6191"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4191"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2199"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 2200 : ATS77 / New Brunswick Stereographic (ATS77) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2200,'EPSG',2200,'PROJCS["ATS77 / New Brunswick Stereographic (ATS77)",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-66.5],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",300000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2200"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs '); --- --- EPSG 2201 : REGVEN / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2201,'EPSG',2201,'PROJCS["REGVEN / UTM zone 18N",GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2201"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2202 : REGVEN / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2202,'EPSG',2202,'PROJCS["REGVEN / UTM zone 19N",GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2202"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2203 : REGVEN / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2203,'EPSG',2203,'PROJCS["REGVEN / UTM zone 20N",GEOGCS["REGVEN",DATUM["Red_Geodesica_Venezolana",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6189"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4189"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2203"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2204 : NAD27 / Tennessee --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2204,'EPSG',2204,'PROJCS["NAD27 / Tennessee",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.25],PARAMETER["standard_parallel_2",36.41666666666666],PARAMETER["latitude_of_origin",34.66666666666666],PARAMETER["central_meridian",-86],PARAMETER["false_easting",2000000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2204"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 2205 : NAD83 / Kentucky North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2205,'EPSG',2205,'PROJCS["NAD83 / Kentucky North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2205"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2206 : ED50 / 3-degree Gauss-Kruger zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2206,'EPSG',2206,'PROJCS["ED50 / 3-degree Gauss-Kruger zone 9",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2206"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2207 : ED50 / 3-degree Gauss-Kruger zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2207,'EPSG',2207,'PROJCS["ED50 / 3-degree Gauss-Kruger zone 10",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2207"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2208 : ED50 / 3-degree Gauss-Kruger zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2208,'EPSG',2208,'PROJCS["ED50 / 3-degree Gauss-Kruger zone 11",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2208"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2209 : ED50 / 3-degree Gauss-Kruger zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2209,'EPSG',2209,'PROJCS["ED50 / 3-degree Gauss-Kruger zone 12",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2209"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2210 : ED50 / 3-degree Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2210,'EPSG',2210,'PROJCS["ED50 / 3-degree Gauss-Kruger zone 13",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2210"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2211 : ED50 / 3-degree Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2211,'EPSG',2211,'PROJCS["ED50 / 3-degree Gauss-Kruger zone 14",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2211"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2212 : ED50 / 3-degree Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2212,'EPSG',2212,'PROJCS["ED50 / 3-degree Gauss-Kruger zone 15",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2212"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2213 : ETRS89 / TM 30 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2213,'EPSG',2213,'PROJCS["ETRS89 / TM 30 NE",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2213"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2214 : Douala 1948 / AOF west (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2214,'EPSG',2214,'PROJCS["Douala 1948 / AOF west (deprecated)",GEOGCS["Douala 1948",DATUM["Douala_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY["EPSG","6192"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4192"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.5],PARAMETER["scale_factor",0.999],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2214"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2215 : Manoca 1962 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2215,'EPSG',2215,'PROJCS["Manoca 1962 / UTM zone 32N",GEOGCS["Manoca 1962",DATUM["Manoca_1962",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-70.9,-151.8,-41.4,0,0,0,0],AUTHORITY["EPSG","6193"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4193"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2215"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2216 : Qornoq 1927 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2216,'EPSG',2216,'PROJCS["Qornoq 1927 / UTM zone 22N",GEOGCS["Qornoq 1927",DATUM["Qornoq_1927",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[163.511,127.533,-159.789,0,0,0.814,-0.6],AUTHORITY["EPSG","6194"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4194"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2216"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=intl +towgs84=163.511,127.533,-159.789,0,0,0.814,-0.6 +units=m +no_defs '); --- --- EPSG 2217 : Qornoq 1927 / UTM zone 23N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2217,'EPSG',2217,'PROJCS["Qornoq 1927 / UTM zone 23N",GEOGCS["Qornoq 1927",DATUM["Qornoq_1927",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[163.511,127.533,-159.789,0,0,0.814,-0.6],AUTHORITY["EPSG","6194"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4194"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2217"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +ellps=intl +towgs84=163.511,127.533,-159.789,0,0,0.814,-0.6 +units=m +no_defs '); --- --- EPSG 2218 : Scoresbysund 1952 / Greenland zone 5 east --- -- (unable to translate) --- --- EPSG 2219 : ATS77 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2219,'EPSG',2219,'PROJCS["ATS77 / UTM zone 19N",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2219"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs '); --- --- EPSG 2220 : ATS77 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2220,'EPSG',2220,'PROJCS["ATS77 / UTM zone 20N",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs '); --- --- EPSG 2221 : Scoresbysund 1952 / Greenland zone 6 east --- -- (unable to translate) --- --- EPSG 2222 : NAD83 / Arizona East (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2222,'EPSG',2222,'PROJCS["NAD83 / Arizona East (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2222"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2223 : NAD83 / Arizona Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2223,'EPSG',2223,'PROJCS["NAD83 / Arizona Central (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2223"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2224 : NAD83 / Arizona West (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2224,'EPSG',2224,'PROJCS["NAD83 / Arizona West (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2224"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2225 : NAD83 / California zone 1 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2225,'EPSG',2225,'PROJCS["NAD83 / California zone 1 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2225"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2226 : NAD83 / California zone 2 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2226,'EPSG',2226,'PROJCS["NAD83 / California zone 2 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2226"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2227 : NAD83 / California zone 3 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2227,'EPSG',2227,'PROJCS["NAD83 / California zone 3 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2227"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2228 : NAD83 / California zone 4 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2228,'EPSG',2228,'PROJCS["NAD83 / California zone 4 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2228"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2229 : NAD83 / California zone 5 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2229,'EPSG',2229,'PROJCS["NAD83 / California zone 5 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2229"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2230 : NAD83 / California zone 6 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2230,'EPSG',2230,'PROJCS["NAD83 / California zone 6 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2230"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2231 : NAD83 / Colorado North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2231,'EPSG',2231,'PROJCS["NAD83 / Colorado North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2231"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2232 : NAD83 / Colorado Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2232,'EPSG',2232,'PROJCS["NAD83 / Colorado Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2232"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2233 : NAD83 / Colorado South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2233,'EPSG',2233,'PROJCS["NAD83 / Colorado South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2233"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2234 : NAD83 / Connecticut (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2234,'EPSG',2234,'PROJCS["NAD83 / Connecticut (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",1000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2234"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2235 : NAD83 / Delaware (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2235,'EPSG',2235,'PROJCS["NAD83 / Delaware (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2235"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2236 : NAD83 / Florida East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2236,'EPSG',2236,'PROJCS["NAD83 / Florida East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2236"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2237 : NAD83 / Florida West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2237,'EPSG',2237,'PROJCS["NAD83 / Florida West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2237"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2238 : NAD83 / Florida North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2238,'EPSG',2238,'PROJCS["NAD83 / Florida North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2238"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2239 : NAD83 / Georgia East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2239,'EPSG',2239,'PROJCS["NAD83 / Georgia East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2239"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2240 : NAD83 / Georgia West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2240,'EPSG',2240,'PROJCS["NAD83 / Georgia West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2240"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2241 : NAD83 / Idaho East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2241,'EPSG',2241,'PROJCS["NAD83 / Idaho East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2241"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2242 : NAD83 / Idaho Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2242,'EPSG',2242,'PROJCS["NAD83 / Idaho Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2242"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2243 : NAD83 / Idaho West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2243,'EPSG',2243,'PROJCS["NAD83 / Idaho West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",2624666.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2243"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2244 : NAD83 / Indiana East (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2244,'EPSG',2244,'PROJCS["NAD83 / Indiana East (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2244"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2245 : NAD83 / Indiana West (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2245,'EPSG',2245,'PROJCS["NAD83 / Indiana West (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2245"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2246 : NAD83 / Kentucky North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2246,'EPSG',2246,'PROJCS["NAD83 / Kentucky North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2246"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2247 : NAD83 / Kentucky South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2247,'EPSG',2247,'PROJCS["NAD83 / Kentucky South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2247"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2248 : NAD83 / Maryland (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2248,'EPSG',2248,'PROJCS["NAD83 / Maryland (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",1312333.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2248"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2249 : NAD83 / Massachusetts Mainland (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2249,'EPSG',2249,'PROJCS["NAD83 / Massachusetts Mainland (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",2460625],AUTHORITY["EPSG","2249"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2250 : NAD83 / Massachusetts Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2250,'EPSG',2250,'PROJCS["NAD83 / Massachusetts Island (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2250"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2251 : NAD83 / Michigan North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2251,'EPSG',2251,'PROJCS["NAD83 / Michigan North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",26246719.16],PARAMETER["false_northing",0],AUTHORITY["EPSG","2251"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2252 : NAD83 / Michigan Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2252,'EPSG',2252,'PROJCS["NAD83 / Michigan Central (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",19685039.37],PARAMETER["false_northing",0],AUTHORITY["EPSG","2252"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2253 : NAD83 / Michigan South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2253,'EPSG',2253,'PROJCS["NAD83 / Michigan South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",13123359.58],PARAMETER["false_northing",0],AUTHORITY["EPSG","2253"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2254 : NAD83 / Mississippi East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2254,'EPSG',2254,'PROJCS["NAD83 / Mississippi East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2254"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2255 : NAD83 / Mississippi West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2255,'EPSG',2255,'PROJCS["NAD83 / Mississippi West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2255"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2256 : NAD83 / Montana (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2256,'EPSG',2256,'PROJCS["NAD83 / Montana (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2256"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2257 : NAD83 / New Mexico East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2257,'EPSG',2257,'PROJCS["NAD83 / New Mexico East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",541337.5],PARAMETER["false_northing",0],AUTHORITY["EPSG","2257"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2258 : NAD83 / New Mexico Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2258,'EPSG',2258,'PROJCS["NAD83 / New Mexico Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2258"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2259 : NAD83 / New Mexico West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2259,'EPSG',2259,'PROJCS["NAD83 / New Mexico West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",2723091.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2259"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2260 : NAD83 / New York East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2260,'EPSG',2260,'PROJCS["NAD83 / New York East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","2260"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2261 : NAD83 / New York Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2261,'EPSG',2261,'PROJCS["NAD83 / New York Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",820208.3330000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2261"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2262 : NAD83 / New York West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2262,'EPSG',2262,'PROJCS["NAD83 / New York West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1148291.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2262"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2263 : NAD83 / New York Long Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2263,'EPSG',2263,'PROJCS["NAD83 / New York Long Island (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2263"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2264 : NAD83 / North Carolina (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2264,'EPSG',2264,'PROJCS["NAD83 / North Carolina (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2264"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2265 : NAD83 / North Dakota North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2265,'EPSG',2265,'PROJCS["NAD83 / North Dakota North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2265"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2266 : NAD83 / North Dakota South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2266,'EPSG',2266,'PROJCS["NAD83 / North Dakota South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2266"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2267 : NAD83 / Oklahoma North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2267,'EPSG',2267,'PROJCS["NAD83 / Oklahoma North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2267"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2268 : NAD83 / Oklahoma South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2268,'EPSG',2268,'PROJCS["NAD83 / Oklahoma South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2268"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2269 : NAD83 / Oregon North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2269,'EPSG',2269,'PROJCS["NAD83 / Oregon North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",8202099.738],PARAMETER["false_northing",0],AUTHORITY["EPSG","2269"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2270 : NAD83 / Oregon South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2270,'EPSG',2270,'PROJCS["NAD83 / Oregon South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",4921259.843],PARAMETER["false_northing",0],AUTHORITY["EPSG","2270"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2271 : NAD83 / Pennsylvania North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2271,'EPSG',2271,'PROJCS["NAD83 / Pennsylvania North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2271"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2272 : NAD83 / Pennsylvania South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2272,'EPSG',2272,'PROJCS["NAD83 / Pennsylvania South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2272"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2273 : NAD83 / South Carolina (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2273,'EPSG',2273,'PROJCS["NAD83 / South Carolina (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2273"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2274 : NAD83 / Tennessee (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2274,'EPSG',2274,'PROJCS["NAD83 / Tennessee (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2274"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2275 : NAD83 / Texas North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2275,'EPSG',2275,'PROJCS["NAD83 / Texas North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2275"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2276 : NAD83 / Texas North Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2276,'EPSG',2276,'PROJCS["NAD83 / Texas North Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2276"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2277 : NAD83 / Texas Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2277,'EPSG',2277,'PROJCS["NAD83 / Texas Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","2277"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2278 : NAD83 / Texas South Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2278,'EPSG',2278,'PROJCS["NAD83 / Texas South Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",1968500],PARAMETER["false_northing",13123333.333],AUTHORITY["EPSG","2278"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2279 : NAD83 / Texas South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2279,'EPSG',2279,'PROJCS["NAD83 / Texas South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",16404166.667],AUTHORITY["EPSG","2279"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2280 : NAD83 / Utah North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2280,'EPSG',2280,'PROJCS["NAD83 / Utah North (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",3280839.895],AUTHORITY["EPSG","2280"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2281 : NAD83 / Utah Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2281,'EPSG',2281,'PROJCS["NAD83 / Utah Central (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",6561679.79],AUTHORITY["EPSG","2281"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2282 : NAD83 / Utah South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2282,'EPSG',2282,'PROJCS["NAD83 / Utah South (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",9842519.685],AUTHORITY["EPSG","2282"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2283 : NAD83 / Virginia North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2283,'EPSG',2283,'PROJCS["NAD83 / Virginia North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2283"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2284 : NAD83 / Virginia South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2284,'EPSG',2284,'PROJCS["NAD83 / Virginia South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2284"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2285 : NAD83 / Washington North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2285,'EPSG',2285,'PROJCS["NAD83 / Washington North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2285"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2286 : NAD83 / Washington South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2286,'EPSG',2286,'PROJCS["NAD83 / Washington South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2286"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2287 : NAD83 / Wisconsin North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2287,'EPSG',2287,'PROJCS["NAD83 / Wisconsin North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2287"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2288 : NAD83 / Wisconsin Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2288,'EPSG',2288,'PROJCS["NAD83 / Wisconsin Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2288"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2289 : NAD83 / Wisconsin South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2289,'EPSG',2289,'PROJCS["NAD83 / Wisconsin South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2289"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2290 : ATS77 / Prince Edward Isl. Stereographic (ATS77) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2290,'EPSG',2290,'PROJCS["ATS77 / Prince Edward Isl. Stereographic (ATS77)",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",700000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","2290"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs '); --- --- EPSG 2291 : NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2291,'EPSG',2291,'PROJCS["NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2291"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs '); --- --- EPSG 2292 : NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2292,'EPSG',2292,'PROJCS["NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)",GEOGCS["NAD83(CSRS98)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4140"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2292"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2294 : ATS77 / MTM Nova Scotia zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2294,'EPSG',2294,'PROJCS["ATS77 / MTM Nova Scotia zone 4",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2294"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs '); --- --- EPSG 2295 : ATS77 / MTM Nova Scotia zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2295,'EPSG',2295,'PROJCS["ATS77 / MTM Nova Scotia zone 5",GEOGCS["ATS77",DATUM["Average_Terrestrial_System_1977",SPHEROID["Average Terrestrial System 1977",6378135,298.257,AUTHORITY["EPSG","7041"]],AUTHORITY["EPSG","6122"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4122"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2295"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs '); --- --- EPSG 2296 : Ammassalik 1958 / Greenland zone 7 east --- -- (unable to translate) --- --- EPSG 2297 : Qornoq 1927 / Greenland zone 1 east (deprecated) --- -- (unable to translate) --- --- EPSG 2298 : Qornoq 1927 / Greenland zone 2 east (deprecated) --- -- (unable to translate) --- --- EPSG 2299 : Qornoq 1927 / Greenland zone 2 west --- -- (unable to translate) --- --- EPSG 2300 : Qornoq 1927 / Greenland zone 3 east (deprecated) --- -- (unable to translate) --- --- EPSG 2301 : Qornoq 1927 / Greenland zone 3 west --- -- (unable to translate) --- --- EPSG 2302 : Qornoq 1927 / Greenland zone 4 east (deprecated) --- -- (unable to translate) --- --- EPSG 2303 : Qornoq 1927 / Greenland zone 4 west --- -- (unable to translate) --- --- EPSG 2304 : Qornoq 1927 / Greenland zone 5 west --- -- (unable to translate) --- --- EPSG 2305 : Qornoq 1927 / Greenland zone 6 west --- -- (unable to translate) --- --- EPSG 2306 : Qornoq 1927 / Greenland zone 7 west --- -- (unable to translate) --- --- EPSG 2307 : Qornoq 1927 / Greenland zone 8 east --- -- (unable to translate) --- --- EPSG 2308 : Batavia / TM 109 SE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2308,'EPSG',2308,'PROJCS["Batavia / TM 109 SE",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",109],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2308"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2309 : WGS 84 / TM 116 SE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2309,'EPSG',2309,'PROJCS["WGS 84 / TM 116 SE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",116],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2309"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 2310 : WGS 84 / TM 132 SE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2310,'EPSG',2310,'PROJCS["WGS 84 / TM 132 SE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2310"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 2311 : WGS 84 / TM 6 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2311,'EPSG',2311,'PROJCS["WGS 84 / TM 6 NE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",6],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2311"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 2312 : Garoua / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2312,'EPSG',2312,'PROJCS["Garoua / UTM zone 33N",GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6197"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4197"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 2313 : Kousseri / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2313,'EPSG',2313,'PROJCS["Kousseri / UTM zone 33N",GEOGCS["Kousseri",DATUM["Kousseri",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6198"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4198"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 2314 : Trinidad 1903 / Trinidad Grid (ftCla) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2314,'EPSG',2314,'PROJCS["Trinidad 1903 / Trinidad Grid (ftCla)",GEOGCS["Trinidad 1903",DATUM["Trinidad_1903",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],TOWGS84[-61.702,284.488,472.052,0,0,0,0],AUTHORITY["EPSG","6302"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4302"]],UNIT["Clarke''s foot",0.3047972654,AUTHORITY["EPSG","9005"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",10.44166666666667],PARAMETER["central_meridian",-61.33333333333334],PARAMETER["false_easting",283800],PARAMETER["false_northing",214500],AUTHORITY["EPSG","2314"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.3047972654 +no_defs '); --- --- EPSG 2315 : Campo Inchauspe / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2315,'EPSG',2315,'PROJCS["Campo Inchauspe / UTM zone 19S",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2315"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2316 : Campo Inchauspe / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2316,'EPSG',2316,'PROJCS["Campo Inchauspe / UTM zone 20S",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2316"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2317 : PSAD56 / ICN Regional --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2317,'EPSG',2317,'PROJCS["PSAD56 / ICN Regional",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",9],PARAMETER["standard_parallel_2",3],PARAMETER["latitude_of_origin",6],PARAMETER["central_meridian",-66],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2317"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2318 : Ain el Abd / Aramco Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2318,'EPSG',2318,'PROJCS["Ain el Abd / Aramco Lambert",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",17],PARAMETER["standard_parallel_2",33],PARAMETER["latitude_of_origin",25.08951],PARAMETER["central_meridian",48],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2318"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2319 : ED50 / TM27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2319,'EPSG',2319,'PROJCS["ED50 / TM27",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2319"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2320 : ED50 / TM30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2320,'EPSG',2320,'PROJCS["ED50 / TM30",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2320"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2321 : ED50 / TM33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2321,'EPSG',2321,'PROJCS["ED50 / TM33",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2321"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2322 : ED50 / TM36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2322,'EPSG',2322,'PROJCS["ED50 / TM36",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2322"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2323 : ED50 / TM39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2323,'EPSG',2323,'PROJCS["ED50 / TM39",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2323"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2324 : ED50 / TM42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2324,'EPSG',2324,'PROJCS["ED50 / TM42",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2324"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2325 : ED50 / TM45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2325,'EPSG',2325,'PROJCS["ED50 / TM45",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2325"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2326 : Hong Kong 1980 Grid System --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2326,'EPSG',2326,'PROJCS["Hong Kong 1980 Grid System",GEOGCS["Hong Kong 1980",DATUM["Hong_Kong_1980",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425],AUTHORITY["EPSG","6611"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4611"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",22.31213333333334],PARAMETER["central_meridian",114.1785555555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",836694.05],PARAMETER["false_northing",819069.8],AUTHORITY["EPSG","2326"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs '); --- --- EPSG 2327 : Xian 1980 / Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2327,'EPSG',2327,'PROJCS["Xian 1980 / Gauss-Kruger zone 13",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2327"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2328 : Xian 1980 / Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2328,'EPSG',2328,'PROJCS["Xian 1980 / Gauss-Kruger zone 14",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2328"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2329 : Xian 1980 / Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2329,'EPSG',2329,'PROJCS["Xian 1980 / Gauss-Kruger zone 15",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2329"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2330 : Xian 1980 / Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2330,'EPSG',2330,'PROJCS["Xian 1980 / Gauss-Kruger zone 16",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2330"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2331 : Xian 1980 / Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2331,'EPSG',2331,'PROJCS["Xian 1980 / Gauss-Kruger zone 17",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2331"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2332 : Xian 1980 / Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2332,'EPSG',2332,'PROJCS["Xian 1980 / Gauss-Kruger zone 18",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2332"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2333 : Xian 1980 / Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2333,'EPSG',2333,'PROJCS["Xian 1980 / Gauss-Kruger zone 19",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2333"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2334 : Xian 1980 / Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2334,'EPSG',2334,'PROJCS["Xian 1980 / Gauss-Kruger zone 20",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2334"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2335 : Xian 1980 / Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2335,'EPSG',2335,'PROJCS["Xian 1980 / Gauss-Kruger zone 21",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2335"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2336 : Xian 1980 / Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2336,'EPSG',2336,'PROJCS["Xian 1980 / Gauss-Kruger zone 22",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2336"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2337 : Xian 1980 / Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2337,'EPSG',2337,'PROJCS["Xian 1980 / Gauss-Kruger zone 23",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2337"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2338 : Xian 1980 / Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2338,'EPSG',2338,'PROJCS["Xian 1980 / Gauss-Kruger CM 75E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2338"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2339 : Xian 1980 / Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2339,'EPSG',2339,'PROJCS["Xian 1980 / Gauss-Kruger CM 81E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2339"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2340 : Xian 1980 / Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2340,'EPSG',2340,'PROJCS["Xian 1980 / Gauss-Kruger CM 87E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2340"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2341 : Xian 1980 / Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2341,'EPSG',2341,'PROJCS["Xian 1980 / Gauss-Kruger CM 93E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2341"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2342 : Xian 1980 / Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2342,'EPSG',2342,'PROJCS["Xian 1980 / Gauss-Kruger CM 99E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2342"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2343 : Xian 1980 / Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2343,'EPSG',2343,'PROJCS["Xian 1980 / Gauss-Kruger CM 105E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2343"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2344 : Xian 1980 / Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2344,'EPSG',2344,'PROJCS["Xian 1980 / Gauss-Kruger CM 111E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2344"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2345 : Xian 1980 / Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2345,'EPSG',2345,'PROJCS["Xian 1980 / Gauss-Kruger CM 117E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2345"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2346 : Xian 1980 / Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2346,'EPSG',2346,'PROJCS["Xian 1980 / Gauss-Kruger CM 123E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2346"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2347 : Xian 1980 / Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2347,'EPSG',2347,'PROJCS["Xian 1980 / Gauss-Kruger CM 129E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2347"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2348 : Xian 1980 / Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2348,'EPSG',2348,'PROJCS["Xian 1980 / Gauss-Kruger CM 135E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2348"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2349 : Xian 1980 / 3-degree Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2349,'EPSG',2349,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 25",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2349"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2350 : Xian 1980 / 3-degree Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2350,'EPSG',2350,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 26",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2350"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2351 : Xian 1980 / 3-degree Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2351,'EPSG',2351,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 27",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2351"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2352 : Xian 1980 / 3-degree Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2352,'EPSG',2352,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 28",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2352"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2353 : Xian 1980 / 3-degree Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2353,'EPSG',2353,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 29",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2353"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2354 : Xian 1980 / 3-degree Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2354,'EPSG',2354,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 30",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2354"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2355 : Xian 1980 / 3-degree Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2355,'EPSG',2355,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 31",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2355"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2356 : Xian 1980 / 3-degree Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2356,'EPSG',2356,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 32",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2356"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2357 : Xian 1980 / 3-degree Gauss-Kruger zone 33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2357,'EPSG',2357,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 33",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2357"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2358 : Xian 1980 / 3-degree Gauss-Kruger zone 34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2358,'EPSG',2358,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 34",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2358"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2359 : Xian 1980 / 3-degree Gauss-Kruger zone 35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2359,'EPSG',2359,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 35",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2359"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2360 : Xian 1980 / 3-degree Gauss-Kruger zone 36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2360,'EPSG',2360,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 36",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2360"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2361 : Xian 1980 / 3-degree Gauss-Kruger zone 37 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2361,'EPSG',2361,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 37",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2361"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2362 : Xian 1980 / 3-degree Gauss-Kruger zone 38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2362,'EPSG',2362,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 38",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2362"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2363 : Xian 1980 / 3-degree Gauss-Kruger zone 39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2363,'EPSG',2363,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 39",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2363"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2364 : Xian 1980 / 3-degree Gauss-Kruger zone 40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2364,'EPSG',2364,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 40",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2364"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2365 : Xian 1980 / 3-degree Gauss-Kruger zone 41 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2365,'EPSG',2365,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 41",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2365"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2366 : Xian 1980 / 3-degree Gauss-Kruger zone 42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2366,'EPSG',2366,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 42",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2366"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2367 : Xian 1980 / 3-degree Gauss-Kruger zone 43 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2367,'EPSG',2367,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 43",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2367"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2368 : Xian 1980 / 3-degree Gauss-Kruger zone 44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2368,'EPSG',2368,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 44",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2368"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2369 : Xian 1980 / 3-degree Gauss-Kruger zone 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2369,'EPSG',2369,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger zone 45",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2369"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2370 : Xian 1980 / 3-degree Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2370,'EPSG',2370,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2370"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2371 : Xian 1980 / 3-degree Gauss-Kruger CM 78E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2371,'EPSG',2371,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2371"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2372 : Xian 1980 / 3-degree Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2372,'EPSG',2372,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2372"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2373 : Xian 1980 / 3-degree Gauss-Kruger CM 84E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2373,'EPSG',2373,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2373"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2374 : Xian 1980 / 3-degree Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2374,'EPSG',2374,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2374"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2375 : Xian 1980 / 3-degree Gauss-Kruger CM 90E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2375,'EPSG',2375,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2375"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2376 : Xian 1980 / 3-degree Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2376,'EPSG',2376,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2376"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2377 : Xian 1980 / 3-degree Gauss-Kruger CM 96E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2377,'EPSG',2377,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2377"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2378 : Xian 1980 / 3-degree Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2378,'EPSG',2378,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2378"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2379 : Xian 1980 / 3-degree Gauss-Kruger CM 102E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2379,'EPSG',2379,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2379"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2380 : Xian 1980 / 3-degree Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2380,'EPSG',2380,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2380"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2381 : Xian 1980 / 3-degree Gauss-Kruger CM 108E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2381,'EPSG',2381,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2381"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2382 : Xian 1980 / 3-degree Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2382,'EPSG',2382,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2382"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2383 : Xian 1980 / 3-degree Gauss-Kruger CM 114E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2383,'EPSG',2383,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2383"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2384 : Xian 1980 / 3-degree Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2384,'EPSG',2384,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2384"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2385 : Xian 1980 / 3-degree Gauss-Kruger CM 120E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2385,'EPSG',2385,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2385"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2386 : Xian 1980 / 3-degree Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2386,'EPSG',2386,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2386"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2387 : Xian 1980 / 3-degree Gauss-Kruger CM 126E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2387,'EPSG',2387,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2387"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2388 : Xian 1980 / 3-degree Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2388,'EPSG',2388,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2388"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2389 : Xian 1980 / 3-degree Gauss-Kruger CM 132E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2389,'EPSG',2389,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2389"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2390 : Xian 1980 / 3-degree Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2390,'EPSG',2390,'PROJCS["Xian 1980 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Xian 1980",DATUM["Xian_1980",SPHEROID["IAG 1975",6378140,298.257,AUTHORITY["EPSG","7049"]],AUTHORITY["EPSG","6610"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4610"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2390"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs '); --- --- EPSG 2391 : KKJ / Finland zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2391,'EPSG',2391,'PROJCS["KKJ / Finland zone 1",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2391"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs '); --- --- EPSG 2392 : KKJ / Finland zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2392,'EPSG',2392,'PROJCS["KKJ / Finland zone 2",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2392"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs '); --- --- EPSG 2393 : KKJ / Finland Uniform Coordinate System --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2393,'EPSG',2393,'PROJCS["KKJ / Finland Uniform Coordinate System",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2393"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs '); --- --- EPSG 2394 : KKJ / Finland zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2394,'EPSG',2394,'PROJCS["KKJ / Finland zone 4",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2394"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs '); --- --- EPSG 2395 : South Yemen / Gauss-Kruger zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2395,'EPSG',2395,'PROJCS["South Yemen / Gauss-Kruger zone 8",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2395"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2396 : South Yemen / Gauss-Kruger zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2396,'EPSG',2396,'PROJCS["South Yemen / Gauss-Kruger zone 9",GEOGCS["South Yemen",DATUM["South_Yemen",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-76,-138,67,0,0,0,0],AUTHORITY["EPSG","6164"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4164"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2396"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2397 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2397,'EPSG',2397,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2397"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2398 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2398,'EPSG',2398,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2398"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2399 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2399,'EPSG',2399,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2399"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2400 : RT90 2.5 gon W (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2400,'EPSG',2400,'PROJCS["RT90 2.5 gon W (deprecated)",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2400"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs '); --- --- EPSG 2401 : Beijing 1954 / 3-degree Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2401,'EPSG',2401,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 25",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2401"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2402 : Beijing 1954 / 3-degree Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2402,'EPSG',2402,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 26",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2402"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2403 : Beijing 1954 / 3-degree Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2403,'EPSG',2403,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 27",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2403"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2404 : Beijing 1954 / 3-degree Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2404,'EPSG',2404,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 28",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2404"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2405 : Beijing 1954 / 3-degree Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2405,'EPSG',2405,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 29",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2405"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2406 : Beijing 1954 / 3-degree Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2406,'EPSG',2406,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 30",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2406"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2407 : Beijing 1954 / 3-degree Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2407,'EPSG',2407,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 31",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2407"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2408 : Beijing 1954 / 3-degree Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2408,'EPSG',2408,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 32",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2408"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2409 : Beijing 1954 / 3-degree Gauss-Kruger zone 33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2409,'EPSG',2409,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 33",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2409"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2410 : Beijing 1954 / 3-degree Gauss-Kruger zone 34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2410,'EPSG',2410,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 34",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2410"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2411 : Beijing 1954 / 3-degree Gauss-Kruger zone 35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2411,'EPSG',2411,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 35",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2411"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2412 : Beijing 1954 / 3-degree Gauss-Kruger zone 36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2412,'EPSG',2412,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 36",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2412"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2413 : Beijing 1954 / 3-degree Gauss-Kruger zone 37 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2413,'EPSG',2413,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 37",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2413"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2414 : Beijing 1954 / 3-degree Gauss-Kruger zone 38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2414,'EPSG',2414,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 38",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2414"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2415 : Beijing 1954 / 3-degree Gauss-Kruger zone 39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2415,'EPSG',2415,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 39",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2415"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2416 : Beijing 1954 / 3-degree Gauss-Kruger zone 40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2416,'EPSG',2416,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 40",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2416"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2417 : Beijing 1954 / 3-degree Gauss-Kruger zone 41 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2417,'EPSG',2417,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 41",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2417"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2418 : Beijing 1954 / 3-degree Gauss-Kruger zone 42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2418,'EPSG',2418,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 42",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2418"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2419 : Beijing 1954 / 3-degree Gauss-Kruger zone 43 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2419,'EPSG',2419,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 43",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2419"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2420 : Beijing 1954 / 3-degree Gauss-Kruger zone 44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2420,'EPSG',2420,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 44",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2420"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2421 : Beijing 1954 / 3-degree Gauss-Kruger zone 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2421,'EPSG',2421,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger zone 45",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2421"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2422 : Beijing 1954 / 3-degree Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2422,'EPSG',2422,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2422"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2423 : Beijing 1954 / 3-degree Gauss-Kruger CM 78E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2423,'EPSG',2423,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2423"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2424 : Beijing 1954 / 3-degree Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2424,'EPSG',2424,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2424"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2425 : Beijing 1954 / 3-degree Gauss-Kruger CM 84E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2425,'EPSG',2425,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2425"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2426 : Beijing 1954 / 3-degree Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2426,'EPSG',2426,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2426"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2427 : Beijing 1954 / 3-degree Gauss-Kruger CM 90E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2427,'EPSG',2427,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2427"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2428 : Beijing 1954 / 3-degree Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2428,'EPSG',2428,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2428"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2429 : Beijing 1954 / 3-degree Gauss-Kruger CM 96E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2429,'EPSG',2429,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2429"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2430 : Beijing 1954 / 3-degree Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2430,'EPSG',2430,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2430"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2431 : Beijing 1954 / 3-degree Gauss-Kruger CM 102E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2431,'EPSG',2431,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2431"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2432 : Beijing 1954 / 3-degree Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2432,'EPSG',2432,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2432"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2433 : Beijing 1954 / 3-degree Gauss-Kruger CM 108E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2433,'EPSG',2433,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2433"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2434 : Beijing 1954 / 3-degree Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2434,'EPSG',2434,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2434"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2435 : Beijing 1954 / 3-degree Gauss-Kruger CM 114E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2435,'EPSG',2435,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2435"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2436 : Beijing 1954 / 3-degree Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2436,'EPSG',2436,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2436"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2437 : Beijing 1954 / 3-degree Gauss-Kruger CM 120E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2437,'EPSG',2437,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2437"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2438 : Beijing 1954 / 3-degree Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2438,'EPSG',2438,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2438"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2439 : Beijing 1954 / 3-degree Gauss-Kruger CM 126E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2439,'EPSG',2439,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2439"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2440 : Beijing 1954 / 3-degree Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2440,'EPSG',2440,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2440"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2441 : Beijing 1954 / 3-degree Gauss-Kruger CM 132E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2441,'EPSG',2441,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2441"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2442 : Beijing 1954 / 3-degree Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2442,'EPSG',2442,'PROJCS["Beijing 1954 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2442"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2443 : JGD2000 / Japan Plane Rectangular CS I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2443,'EPSG',2443,'PROJCS["JGD2000 / Japan Plane Rectangular CS I",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",129.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2443"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2444 : JGD2000 / Japan Plane Rectangular CS II --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2444,'EPSG',2444,'PROJCS["JGD2000 / Japan Plane Rectangular CS II",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2444"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2445 : JGD2000 / Japan Plane Rectangular CS III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2445,'EPSG',2445,'PROJCS["JGD2000 / Japan Plane Rectangular CS III",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",132.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2445"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2446 : JGD2000 / Japan Plane Rectangular CS IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2446,'EPSG',2446,'PROJCS["JGD2000 / Japan Plane Rectangular CS IV",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",133.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2446"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2447 : JGD2000 / Japan Plane Rectangular CS V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2447,'EPSG',2447,'PROJCS["JGD2000 / Japan Plane Rectangular CS V",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",134.3333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2447"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2448 : JGD2000 / Japan Plane Rectangular CS VI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2448,'EPSG',2448,'PROJCS["JGD2000 / Japan Plane Rectangular CS VI",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2448"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2449 : JGD2000 / Japan Plane Rectangular CS VII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2449,'EPSG',2449,'PROJCS["JGD2000 / Japan Plane Rectangular CS VII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",137.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2449"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2450 : JGD2000 / Japan Plane Rectangular CS VIII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2450,'EPSG',2450,'PROJCS["JGD2000 / Japan Plane Rectangular CS VIII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",138.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2450"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2451 : JGD2000 / Japan Plane Rectangular CS IX --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2451,'EPSG',2451,'PROJCS["JGD2000 / Japan Plane Rectangular CS IX",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",139.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2451"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2452 : JGD2000 / Japan Plane Rectangular CS X --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2452,'EPSG',2452,'PROJCS["JGD2000 / Japan Plane Rectangular CS X",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",140.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2452"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2453 : JGD2000 / Japan Plane Rectangular CS XI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2453,'EPSG',2453,'PROJCS["JGD2000 / Japan Plane Rectangular CS XI",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",140.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2453"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2454 : JGD2000 / Japan Plane Rectangular CS XII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2454,'EPSG',2454,'PROJCS["JGD2000 / Japan Plane Rectangular CS XII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",142.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2454"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2455 : JGD2000 / Japan Plane Rectangular CS XIII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2455,'EPSG',2455,'PROJCS["JGD2000 / Japan Plane Rectangular CS XIII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",144.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2455"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2456 : JGD2000 / Japan Plane Rectangular CS XIV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2456,'EPSG',2456,'PROJCS["JGD2000 / Japan Plane Rectangular CS XIV",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2456"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2457 : JGD2000 / Japan Plane Rectangular CS XV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2457,'EPSG',2457,'PROJCS["JGD2000 / Japan Plane Rectangular CS XV",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",127.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2457"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2458 : JGD2000 / Japan Plane Rectangular CS XVI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2458,'EPSG',2458,'PROJCS["JGD2000 / Japan Plane Rectangular CS XVI",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",124],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2458"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2459 : JGD2000 / Japan Plane Rectangular CS XVII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2459,'EPSG',2459,'PROJCS["JGD2000 / Japan Plane Rectangular CS XVII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2459"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2460 : JGD2000 / Japan Plane Rectangular CS XVIII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2460,'EPSG',2460,'PROJCS["JGD2000 / Japan Plane Rectangular CS XVIII",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2460"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2461 : JGD2000 / Japan Plane Rectangular CS XIX --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2461,'EPSG',2461,'PROJCS["JGD2000 / Japan Plane Rectangular CS XIX",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2461"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2462 : Albanian 1987 / Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2462,'EPSG',2462,'PROJCS["Albanian 1987 / Gauss-Kruger zone 4",GEOGCS["Albanian 1987",DATUM["Albanian_1987",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","6191"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4191"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2462"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 2463 : Pulkovo 1995 / Gauss-Kruger CM 21E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2463,'EPSG',2463,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2463"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2464 : Pulkovo 1995 / Gauss-Kruger CM 27E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2464,'EPSG',2464,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2464"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2465 : Pulkovo 1995 / Gauss-Kruger CM 33E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2465,'EPSG',2465,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2465"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2466 : Pulkovo 1995 / Gauss-Kruger CM 39E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2466,'EPSG',2466,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2466"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2467 : Pulkovo 1995 / Gauss-Kruger CM 45E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2467,'EPSG',2467,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2467"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2468 : Pulkovo 1995 / Gauss-Kruger CM 51E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2468,'EPSG',2468,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2468"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2469 : Pulkovo 1995 / Gauss-Kruger CM 57E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2469,'EPSG',2469,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2469"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2470 : Pulkovo 1995 / Gauss-Kruger CM 63E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2470,'EPSG',2470,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2470"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2471 : Pulkovo 1995 / Gauss-Kruger CM 69E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2471,'EPSG',2471,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2471"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2472 : Pulkovo 1995 / Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2472,'EPSG',2472,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2472"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2473 : Pulkovo 1995 / Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2473,'EPSG',2473,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2473"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2474 : Pulkovo 1995 / Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2474,'EPSG',2474,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2474"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2475 : Pulkovo 1995 / Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2475,'EPSG',2475,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2475"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2476 : Pulkovo 1995 / Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2476,'EPSG',2476,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2476"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2477 : Pulkovo 1995 / Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2477,'EPSG',2477,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2477"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2478 : Pulkovo 1995 / Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2478,'EPSG',2478,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2478"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2479 : Pulkovo 1995 / Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2479,'EPSG',2479,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2479"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2480 : Pulkovo 1995 / Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2480,'EPSG',2480,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2480"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2481 : Pulkovo 1995 / Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2481,'EPSG',2481,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2481"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2482 : Pulkovo 1995 / Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2482,'EPSG',2482,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2482"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2483 : Pulkovo 1995 / Gauss-Kruger CM 141E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2483,'EPSG',2483,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2483"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2484 : Pulkovo 1995 / Gauss-Kruger CM 147E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2484,'EPSG',2484,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2484"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2485 : Pulkovo 1995 / Gauss-Kruger CM 153E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2485,'EPSG',2485,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2485"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2486 : Pulkovo 1995 / Gauss-Kruger CM 159E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2486,'EPSG',2486,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2486"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2487 : Pulkovo 1995 / Gauss-Kruger CM 165E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2487,'EPSG',2487,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2487"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2488 : Pulkovo 1995 / Gauss-Kruger CM 171E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2488,'EPSG',2488,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2488"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2489 : Pulkovo 1995 / Gauss-Kruger CM 177E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2489,'EPSG',2489,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2489"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2490 : Pulkovo 1995 / Gauss-Kruger CM 177W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2490,'EPSG',2490,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2490"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2491 : Pulkovo 1995 / Gauss-Kruger CM 171W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2491,'EPSG',2491,'PROJCS["Pulkovo 1995 / Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2491"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2492 : Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2492,'EPSG',2492,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2492"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2493 : Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2493,'EPSG',2493,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2493"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2494 : Pulkovo 1942 / Gauss-Kruger CM 21E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2494,'EPSG',2494,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2494"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2495 : Pulkovo 1942 / Gauss-Kruger CM 27E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2495,'EPSG',2495,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2495"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2496 : Pulkovo 1942 / Gauss-Kruger CM 33E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2496,'EPSG',2496,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2496"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2497 : Pulkovo 1942 / Gauss-Kruger CM 39E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2497,'EPSG',2497,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2497"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2498 : Pulkovo 1942 / Gauss-Kruger CM 45E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2498,'EPSG',2498,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2498"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2499 : Pulkovo 1942 / Gauss-Kruger CM 51E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2499,'EPSG',2499,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2499"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2500 : Pulkovo 1942 / Gauss-Kruger CM 57E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2500,'EPSG',2500,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2500"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2501 : Pulkovo 1942 / Gauss-Kruger CM 63E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2501,'EPSG',2501,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2501"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2502 : Pulkovo 1942 / Gauss-Kruger CM 69E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2502,'EPSG',2502,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2502"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2503 : Pulkovo 1942 / Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2503,'EPSG',2503,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2503"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2504 : Pulkovo 1942 / Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2504,'EPSG',2504,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2504"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2505 : Pulkovo 1942 / Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2505,'EPSG',2505,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2505"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2506 : Pulkovo 1942 / Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2506,'EPSG',2506,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2506"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2507 : Pulkovo 1942 / Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2507,'EPSG',2507,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2507"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2508 : Pulkovo 1942 / Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2508,'EPSG',2508,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2508"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2509 : Pulkovo 1942 / Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2509,'EPSG',2509,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2509"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2510 : Pulkovo 1942 / Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2510,'EPSG',2510,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2510"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2511 : Pulkovo 1942 / Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2511,'EPSG',2511,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2511"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2512 : Pulkovo 1942 / Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2512,'EPSG',2512,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2512"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2513 : Pulkovo 1942 / Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2513,'EPSG',2513,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2513"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2514 : Pulkovo 1942 / Gauss-Kruger CM 141E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2514,'EPSG',2514,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2514"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2515 : Pulkovo 1942 / Gauss-Kruger CM 147E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2515,'EPSG',2515,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2515"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2516 : Pulkovo 1942 / Gauss-Kruger CM 153E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2516,'EPSG',2516,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2516"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2517 : Pulkovo 1942 / Gauss-Kruger CM 159E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2517,'EPSG',2517,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2517"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2518 : Pulkovo 1942 / Gauss-Kruger CM 165E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2518,'EPSG',2518,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2518"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2519 : Pulkovo 1942 / Gauss-Kruger CM 171E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2519,'EPSG',2519,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2519"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2520 : Pulkovo 1942 / Gauss-Kruger CM 177E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2520,'EPSG',2520,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2520"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2521 : Pulkovo 1942 / Gauss-Kruger CM 177W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2521,'EPSG',2521,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2521"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2522 : Pulkovo 1942 / Gauss-Kruger CM 171W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2522,'EPSG',2522,'PROJCS["Pulkovo 1942 / Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2522"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2523 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2523,'EPSG',2523,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2523"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2524 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2524,'EPSG',2524,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2524"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2525 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2525,'EPSG',2525,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 9",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2525"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2526 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2526,'EPSG',2526,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 10",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2526"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2527 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2527,'EPSG',2527,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 11",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2527"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2528 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2528,'EPSG',2528,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 12",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2528"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2529 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2529,'EPSG',2529,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 13",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2529"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2530 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2530,'EPSG',2530,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 14",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2530"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2531 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2531,'EPSG',2531,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 15",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2531"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2532 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2532,'EPSG',2532,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 16",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2532"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2533 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2533,'EPSG',2533,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 17",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2533"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2534 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2534,'EPSG',2534,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 18",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2534"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2535 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2535,'EPSG',2535,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 19",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2535"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2536 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2536,'EPSG',2536,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 20",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2536"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2537 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2537,'EPSG',2537,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 21",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2537"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2538 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2538,'EPSG',2538,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 22",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2538"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2539 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2539,'EPSG',2539,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 23",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2539"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2540 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2540,'EPSG',2540,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 24",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2540"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2541 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2541,'EPSG',2541,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 25",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2541"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2542 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2542,'EPSG',2542,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 26",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2542"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2543 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2543,'EPSG',2543,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 27",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2543"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2544 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2544,'EPSG',2544,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 28",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2544"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2545 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2545,'EPSG',2545,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 29",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2545"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2546 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2546,'EPSG',2546,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 30",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2546"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2547 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2547,'EPSG',2547,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 31",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2547"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2548 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2548,'EPSG',2548,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 32",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2548"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2549 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2549,'EPSG',2549,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 33",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2549"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2550 : Samboja / UTM zone 50S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2550,'EPSG',2550,'PROJCS["Samboja / UTM zone 50S (deprecated)",GEOGCS["Samboja",DATUM["Samboja",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-404.78,685.68,45.47,0,0,0,0],AUTHORITY["EPSG","6125"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4125"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2550"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2551 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2551,'EPSG',2551,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 34",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2551"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2552 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2552,'EPSG',2552,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 35",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2552"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2553 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2553,'EPSG',2553,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 36",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2553"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2554 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2554,'EPSG',2554,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 37",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2554"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2555 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2555,'EPSG',2555,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 38",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2555"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2556 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2556,'EPSG',2556,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 39",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2556"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2557 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2557,'EPSG',2557,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 40",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2557"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2558 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2558,'EPSG',2558,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 41",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2558"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2559 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2559,'EPSG',2559,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 42",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2559"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2560 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2560,'EPSG',2560,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 43",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2560"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2561 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2561,'EPSG',2561,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 44",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2561"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2562 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2562,'EPSG',2562,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 45",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2562"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2563 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2563,'EPSG',2563,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 46",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",46500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2563"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2564 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2564,'EPSG',2564,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 47",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",47500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2564"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2565 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2565,'EPSG',2565,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 48",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",48500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2565"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2566 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2566,'EPSG',2566,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 49",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",49500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2566"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2567 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2567,'EPSG',2567,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 50",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",50500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2567"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2568 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2568,'EPSG',2568,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 51",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",51500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2568"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2569 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2569,'EPSG',2569,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 52",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",52500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2569"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2570 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2570,'EPSG',2570,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 53",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",53500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2570"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2571 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2571,'EPSG',2571,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 54",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",54500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2571"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2572 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2572,'EPSG',2572,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 55",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",55500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2572"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2573 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2573,'EPSG',2573,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 56",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",56500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2573"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2574 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2574,'EPSG',2574,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 57",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",57500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2574"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2575 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2575,'EPSG',2575,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 58",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",58500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2575"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2576 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2576,'EPSG',2576,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 59",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",59500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2576"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2577 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2577,'EPSG',2577,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2577"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2578 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2578,'EPSG',2578,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 61",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",61500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2578"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2579 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2579,'EPSG',2579,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 62",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",62500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2579"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2580 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2580,'EPSG',2580,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 63",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",63500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2580"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2581 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2581,'EPSG',2581,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 64",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",64500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2581"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2582 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2582,'EPSG',2582,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2582"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2583 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2583,'EPSG',2583,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2583"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2584 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2584,'EPSG',2584,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2584"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2585 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2585,'EPSG',2585,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2585"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2586 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2586,'EPSG',2586,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2586"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2587 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2587,'EPSG',2587,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2587"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2588 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2588,'EPSG',2588,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2588"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2589 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2589,'EPSG',2589,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2589"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2590 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2590,'EPSG',2590,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2590"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2591 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2591,'EPSG',2591,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2591"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2592 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2592,'EPSG',2592,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2592"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2593 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2593,'EPSG',2593,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2593"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2594 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2594,'EPSG',2594,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2594"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2595 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2595,'EPSG',2595,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2595"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2596 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2596,'EPSG',2596,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2596"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2597 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2597,'EPSG',2597,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2597"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2598 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2598,'EPSG',2598,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2598"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2599 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2599,'EPSG',2599,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2599"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2600 : Lietuvos Koordinoei Sistema 1994 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2600,'EPSG',2600,'PROJCS["Lietuvos Koordinoei Sistema 1994 (deprecated)",GEOGCS["LKS94",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4669"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2600"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2601 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2601,'EPSG',2601,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2601"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2602 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2602,'EPSG',2602,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2602"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2603 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2603,'EPSG',2603,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2603"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2604 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2604,'EPSG',2604,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2604"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2605 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2605,'EPSG',2605,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2605"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2606 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2606,'EPSG',2606,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2606"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2607 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2607,'EPSG',2607,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2607"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2608 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2608,'EPSG',2608,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2608"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2609 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2609,'EPSG',2609,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2609"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2610 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2610,'EPSG',2610,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2610"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2611 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2611,'EPSG',2611,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2611"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2612 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2612,'EPSG',2612,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2612"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2613 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2613,'EPSG',2613,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2613"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2614 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2614,'EPSG',2614,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2614"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2615 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2615,'EPSG',2615,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2615"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2616 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2616,'EPSG',2616,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2616"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2617 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2617,'EPSG',2617,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2617"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2618 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2618,'EPSG',2618,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2618"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2619 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2619,'EPSG',2619,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2619"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2620 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2620,'EPSG',2620,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2620"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2621 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2621,'EPSG',2621,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2621"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2622 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2622,'EPSG',2622,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2622"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2623 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2623,'EPSG',2623,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2623"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2624 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2624,'EPSG',2624,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2624"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2625 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2625,'EPSG',2625,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2625"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2626 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2626,'EPSG',2626,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2626"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2627 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2627,'EPSG',2627,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2627"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2628 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2628,'EPSG',2628,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2628"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2629 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2629,'EPSG',2629,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2629"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2630 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2630,'EPSG',2630,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2630"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2631 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2631,'EPSG',2631,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2631"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2632 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2632,'EPSG',2632,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2632"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2633 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2633,'EPSG',2633,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2633"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2634 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2634,'EPSG',2634,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2634"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2635 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2635,'EPSG',2635,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2635"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2636 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2636,'EPSG',2636,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2636"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2637 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2637,'EPSG',2637,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2637"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2638 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2638,'EPSG',2638,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2638"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2639 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2639,'EPSG',2639,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2639"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2640 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2640,'EPSG',2640,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2640"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2641 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2641,'EPSG',2641,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2641"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2642 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2642,'EPSG',2642,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2642"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2643 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2643,'EPSG',2643,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 9",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2643"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2644 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2644,'EPSG',2644,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 10",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2644"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2645 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2645,'EPSG',2645,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 11",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2645"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2646 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2646,'EPSG',2646,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 12",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2646"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2647 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2647,'EPSG',2647,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 13",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2647"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2648 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2648,'EPSG',2648,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 14",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2648"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2649 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2649,'EPSG',2649,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 15",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2649"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2650 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2650,'EPSG',2650,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 16",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2650"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2651 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2651,'EPSG',2651,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 17",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2651"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2652 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2652,'EPSG',2652,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 18",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2652"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2653 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2653,'EPSG',2653,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 19",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2653"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2654 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2654,'EPSG',2654,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 20",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2654"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2655 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2655,'EPSG',2655,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 21",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2655"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2656 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2656,'EPSG',2656,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 22",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2656"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2657 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2657,'EPSG',2657,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 23",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2657"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2658 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2658,'EPSG',2658,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 24",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2658"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2659 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2659,'EPSG',2659,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 25",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2659"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2660 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2660,'EPSG',2660,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 26",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2660"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2661 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2661,'EPSG',2661,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 27",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2661"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2662 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2662,'EPSG',2662,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 28",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2662"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2663 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2663,'EPSG',2663,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 29",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2663"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2664 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2664,'EPSG',2664,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 30",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2664"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2665 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2665,'EPSG',2665,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 31",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2665"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2666 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2666,'EPSG',2666,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 32",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2666"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2667 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2667,'EPSG',2667,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 33",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2667"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2668 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2668,'EPSG',2668,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 34",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2668"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2669 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2669,'EPSG',2669,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 35",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2669"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2670 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2670,'EPSG',2670,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 36",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2670"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2671 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2671,'EPSG',2671,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 37",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2671"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2672 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2672,'EPSG',2672,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 38",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2672"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2673 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2673,'EPSG',2673,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 39",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2673"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2674 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2674,'EPSG',2674,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 40",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2674"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2675 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2675,'EPSG',2675,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 41",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2675"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2676 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2676,'EPSG',2676,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 42",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2676"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2677 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2677,'EPSG',2677,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 43",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2677"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2678 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2678,'EPSG',2678,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 44",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2678"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2679 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2679,'EPSG',2679,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 45",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2679"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2680 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2680,'EPSG',2680,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 46",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",46500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2680"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2681 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2681,'EPSG',2681,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 47",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",47500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2681"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2682 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2682,'EPSG',2682,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 48",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",48500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2682"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2683 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2683,'EPSG',2683,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 49",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",49500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2683"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2684 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2684,'EPSG',2684,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 50",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",50500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2684"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2685 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2685,'EPSG',2685,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 51",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",51500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2685"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2686 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2686,'EPSG',2686,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 52",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",52500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2686"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2687 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2687,'EPSG',2687,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 53",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",53500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2687"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2688 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2688,'EPSG',2688,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 54",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",54500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2688"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2689 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2689,'EPSG',2689,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 55",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",55500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2689"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2690 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2690,'EPSG',2690,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 56",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",56500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2690"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2691 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2691,'EPSG',2691,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 57",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",57500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2691"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2692 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2692,'EPSG',2692,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 58",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",58500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2692"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2693 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2693,'EPSG',2693,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 59",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",59500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2693"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2694 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2694,'EPSG',2694,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2694"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2695 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2695,'EPSG',2695,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 61",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",61500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2695"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2696 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2696,'EPSG',2696,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 62",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",62500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2696"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2697 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2697,'EPSG',2697,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 63",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",63500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2697"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2698 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2698,'EPSG',2698,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 64",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",64500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2698"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2699 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2699,'EPSG',2699,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2699"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2700 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2700,'EPSG',2700,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2700"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2701 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2701,'EPSG',2701,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2701"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2702 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2702,'EPSG',2702,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2702"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2703 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2703,'EPSG',2703,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2703"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2704 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2704,'EPSG',2704,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2704"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2705 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2705,'EPSG',2705,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2705"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2706 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2706,'EPSG',2706,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",42],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2706"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2707 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2707,'EPSG',2707,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2707"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2708 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2708,'EPSG',2708,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2708"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2709 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2709,'EPSG',2709,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2709"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2710 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2710,'EPSG',2710,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",54],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2710"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2711 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2711,'EPSG',2711,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2711"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2712 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2712,'EPSG',2712,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",60],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2712"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2713 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2713,'EPSG',2713,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2713"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2714 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2714,'EPSG',2714,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",66],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2714"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2715 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2715,'EPSG',2715,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2715"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2716 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2716,'EPSG',2716,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",72],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2716"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2717 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2717,'EPSG',2717,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2717"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2718 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2718,'EPSG',2718,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2718"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2719 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2719,'EPSG',2719,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2719"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2720 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2720,'EPSG',2720,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2720"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2721 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2721,'EPSG',2721,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2721"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2722 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2722,'EPSG',2722,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2722"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2723 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2723,'EPSG',2723,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2723"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2724 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2724,'EPSG',2724,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2724"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2725 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2725,'EPSG',2725,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2725"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2726 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2726,'EPSG',2726,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2726"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2727 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2727,'EPSG',2727,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2727"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2728 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2728,'EPSG',2728,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2728"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2729 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2729,'EPSG',2729,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2729"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2730 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2730,'EPSG',2730,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2730"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2731 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2731,'EPSG',2731,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2731"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2732 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2732,'EPSG',2732,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2732"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2733 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2733,'EPSG',2733,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2733"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2734 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2734,'EPSG',2734,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2734"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2735 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2735,'EPSG',2735,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2735"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2736 : Tete / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2736,'EPSG',2736,'PROJCS["Tete / UTM zone 36S",GEOGCS["Tete",DATUM["Tete",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104],AUTHORITY["EPSG","6127"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4127"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2736"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +units=m +no_defs '); --- --- EPSG 2737 : Tete / UTM zone 37S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2737,'EPSG',2737,'PROJCS["Tete / UTM zone 37S",GEOGCS["Tete",DATUM["Tete",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104],AUTHORITY["EPSG","6127"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4127"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2737"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +south +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +units=m +no_defs '); --- --- EPSG 2738 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2738,'EPSG',2738,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2738"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2739 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2739,'EPSG',2739,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2739"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2740 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2740,'EPSG',2740,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",138],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2740"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2741 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2741,'EPSG',2741,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2741"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2742 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2742,'EPSG',2742,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",144],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2742"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2743 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2743,'EPSG',2743,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2743"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2744 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2744,'EPSG',2744,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2744"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2745 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2745,'EPSG',2745,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2745"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2746 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2746,'EPSG',2746,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",156],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2746"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2747 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2747,'EPSG',2747,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2747"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2748 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2748,'EPSG',2748,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",162],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2748"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2749 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2749,'EPSG',2749,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2749"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2750 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2750,'EPSG',2750,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2750"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2751 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2751,'EPSG',2751,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2751"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2752 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2752,'EPSG',2752,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2752"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2753 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2753,'EPSG',2753,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2753"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2754 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2754,'EPSG',2754,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2754"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2755 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2755,'EPSG',2755,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2755"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2756 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2756,'EPSG',2756,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-174],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2756"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2757 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2757,'EPSG',2757,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2757"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2758 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2758,'EPSG',2758,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-168],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2758"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 2759 : NAD83(HARN) / Alabama East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2759,'EPSG',2759,'PROJCS["NAD83(HARN) / Alabama East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2759"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2760 : NAD83(HARN) / Alabama West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2760,'EPSG',2760,'PROJCS["NAD83(HARN) / Alabama West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2760"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2761 : NAD83(HARN) / Arizona East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2761,'EPSG',2761,'PROJCS["NAD83(HARN) / Arizona East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","2761"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2762 : NAD83(HARN) / Arizona Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2762,'EPSG',2762,'PROJCS["NAD83(HARN) / Arizona Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","2762"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2763 : NAD83(HARN) / Arizona West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2763,'EPSG',2763,'PROJCS["NAD83(HARN) / Arizona West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","2763"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2764 : NAD83(HARN) / Arkansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2764,'EPSG',2764,'PROJCS["NAD83(HARN) / Arkansas North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2764"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2765 : NAD83(HARN) / Arkansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2765,'EPSG',2765,'PROJCS["NAD83(HARN) / Arkansas South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","2765"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2766 : NAD83(HARN) / California zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2766,'EPSG',2766,'PROJCS["NAD83(HARN) / California zone 1",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2766"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2767 : NAD83(HARN) / California zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2767,'EPSG',2767,'PROJCS["NAD83(HARN) / California zone 2",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2767"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2768 : NAD83(HARN) / California zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2768,'EPSG',2768,'PROJCS["NAD83(HARN) / California zone 3",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2768"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2769 : NAD83(HARN) / California zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2769,'EPSG',2769,'PROJCS["NAD83(HARN) / California zone 4",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2769"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2770 : NAD83(HARN) / California zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2770,'EPSG',2770,'PROJCS["NAD83(HARN) / California zone 5",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2770"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2771 : NAD83(HARN) / California zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2771,'EPSG',2771,'PROJCS["NAD83(HARN) / California zone 6",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2771"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2772 : NAD83(HARN) / Colorado North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2772,'EPSG',2772,'PROJCS["NAD83(HARN) / Colorado North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","2772"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2773 : NAD83(HARN) / Colorado Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2773,'EPSG',2773,'PROJCS["NAD83(HARN) / Colorado Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","2773"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2774 : NAD83(HARN) / Colorado South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2774,'EPSG',2774,'PROJCS["NAD83(HARN) / Colorado South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","2774"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2775 : NAD83(HARN) / Connecticut --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2775,'EPSG',2775,'PROJCS["NAD83(HARN) / Connecticut",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",304800.6096],PARAMETER["false_northing",152400.3048],AUTHORITY["EPSG","2775"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2776 : NAD83(HARN) / Delaware --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2776,'EPSG',2776,'PROJCS["NAD83(HARN) / Delaware",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2776"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2777 : NAD83(HARN) / Florida East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2777,'EPSG',2777,'PROJCS["NAD83(HARN) / Florida East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2777"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2778 : NAD83(HARN) / Florida West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2778,'EPSG',2778,'PROJCS["NAD83(HARN) / Florida West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2778"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2779 : NAD83(HARN) / Florida North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2779,'EPSG',2779,'PROJCS["NAD83(HARN) / Florida North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2779"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2780 : NAD83(HARN) / Georgia East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2780,'EPSG',2780,'PROJCS["NAD83(HARN) / Georgia East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2780"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2781 : NAD83(HARN) / Georgia West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2781,'EPSG',2781,'PROJCS["NAD83(HARN) / Georgia West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2781"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2782 : NAD83(HARN) / Hawaii zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2782,'EPSG',2782,'PROJCS["NAD83(HARN) / Hawaii zone 1",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",18.83333333333333],PARAMETER["central_meridian",-155.5],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2782"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2783 : NAD83(HARN) / Hawaii zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2783,'EPSG',2783,'PROJCS["NAD83(HARN) / Hawaii zone 2",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20.33333333333333],PARAMETER["central_meridian",-156.6666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2783"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2784 : NAD83(HARN) / Hawaii zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2784,'EPSG',2784,'PROJCS["NAD83(HARN) / Hawaii zone 3",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2784"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2785 : NAD83(HARN) / Hawaii zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2785,'EPSG',2785,'PROJCS["NAD83(HARN) / Hawaii zone 4",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.83333333333333],PARAMETER["central_meridian",-159.5],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2785"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2786 : NAD83(HARN) / Hawaii zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2786,'EPSG',2786,'PROJCS["NAD83(HARN) / Hawaii zone 5",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.66666666666667],PARAMETER["central_meridian",-160.1666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2786"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2787 : NAD83(HARN) / Idaho East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2787,'EPSG',2787,'PROJCS["NAD83(HARN) / Idaho East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2787"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2788 : NAD83(HARN) / Idaho Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2788,'EPSG',2788,'PROJCS["NAD83(HARN) / Idaho Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2788"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2789 : NAD83(HARN) / Idaho West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2789,'EPSG',2789,'PROJCS["NAD83(HARN) / Idaho West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2789"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2790 : NAD83(HARN) / Illinois East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2790,'EPSG',2790,'PROJCS["NAD83(HARN) / Illinois East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2790"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2791 : NAD83(HARN) / Illinois West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2791,'EPSG',2791,'PROJCS["NAD83(HARN) / Illinois West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2791"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2792 : NAD83(HARN) / Indiana East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2792,'EPSG',2792,'PROJCS["NAD83(HARN) / Indiana East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",100000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","2792"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2793 : NAD83(HARN) / Indiana West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2793,'EPSG',2793,'PROJCS["NAD83(HARN) / Indiana West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","2793"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2794 : NAD83(HARN) / Iowa North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2794,'EPSG',2794,'PROJCS["NAD83(HARN) / Iowa North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2794"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2795 : NAD83(HARN) / Iowa South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2795,'EPSG',2795,'PROJCS["NAD83(HARN) / Iowa South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2795"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2796 : NAD83(HARN) / Kansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2796,'EPSG',2796,'PROJCS["NAD83(HARN) / Kansas North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2796"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2797 : NAD83(HARN) / Kansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2797,'EPSG',2797,'PROJCS["NAD83(HARN) / Kansas South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","2797"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2798 : NAD83(HARN) / Kentucky North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2798,'EPSG',2798,'PROJCS["NAD83(HARN) / Kentucky North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2798"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2799 : NAD83(HARN) / Kentucky South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2799,'EPSG',2799,'PROJCS["NAD83(HARN) / Kentucky South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2799"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2800 : NAD83(HARN) / Louisiana North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2800,'EPSG',2800,'PROJCS["NAD83(HARN) / Louisiana North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2800"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2801 : NAD83(HARN) / Louisiana South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2801,'EPSG',2801,'PROJCS["NAD83(HARN) / Louisiana South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2801"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2802 : NAD83(HARN) / Maine East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2802,'EPSG',2802,'PROJCS["NAD83(HARN) / Maine East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2802"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2803 : NAD83(HARN) / Maine West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2803,'EPSG',2803,'PROJCS["NAD83(HARN) / Maine West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2803"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2804 : NAD83(HARN) / Maryland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2804,'EPSG',2804,'PROJCS["NAD83(HARN) / Maryland",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2804"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2805 : NAD83(HARN) / Massachusetts Mainland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2805,'EPSG',2805,'PROJCS["NAD83(HARN) / Massachusetts Mainland",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","2805"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2806 : NAD83(HARN) / Massachusetts Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2806,'EPSG',2806,'PROJCS["NAD83(HARN) / Massachusetts Island",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2806"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2807 : NAD83(HARN) / Michigan North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2807,'EPSG',2807,'PROJCS["NAD83(HARN) / Michigan North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",8000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2807"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2808 : NAD83(HARN) / Michigan Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2808,'EPSG',2808,'PROJCS["NAD83(HARN) / Michigan Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",6000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2808"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2809 : NAD83(HARN) / Michigan South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2809,'EPSG',2809,'PROJCS["NAD83(HARN) / Michigan South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",4000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2809"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2810 : NAD83(HARN) / Minnesota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2810,'EPSG',2810,'PROJCS["NAD83(HARN) / Minnesota North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2810"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2811 : NAD83(HARN) / Minnesota Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2811,'EPSG',2811,'PROJCS["NAD83(HARN) / Minnesota Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2811"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2812 : NAD83(HARN) / Minnesota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2812,'EPSG',2812,'PROJCS["NAD83(HARN) / Minnesota South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2812"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2813 : NAD83(HARN) / Mississippi East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2813,'EPSG',2813,'PROJCS["NAD83(HARN) / Mississippi East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2813"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2814 : NAD83(HARN) / Mississippi West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2814,'EPSG',2814,'PROJCS["NAD83(HARN) / Mississippi West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2814"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2815 : NAD83(HARN) / Missouri East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2815,'EPSG',2815,'PROJCS["NAD83(HARN) / Missouri East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2815"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2816 : NAD83(HARN) / Missouri Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2816,'EPSG',2816,'PROJCS["NAD83(HARN) / Missouri Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2816"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2817 : NAD83(HARN) / Missouri West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2817,'EPSG',2817,'PROJCS["NAD83(HARN) / Missouri West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",850000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2817"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2818 : NAD83(HARN) / Montana --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2818,'EPSG',2818,'PROJCS["NAD83(HARN) / Montana",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2818"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2819 : NAD83(HARN) / Nebraska --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2819,'EPSG',2819,'PROJCS["NAD83(HARN) / Nebraska",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2819"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2820 : NAD83(HARN) / Nevada East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2820,'EPSG',2820,'PROJCS["NAD83(HARN) / Nevada East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",8000000],AUTHORITY["EPSG","2820"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2821 : NAD83(HARN) / Nevada Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2821,'EPSG',2821,'PROJCS["NAD83(HARN) / Nevada Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","2821"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2822 : NAD83(HARN) / Nevada West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2822,'EPSG',2822,'PROJCS["NAD83(HARN) / Nevada West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",800000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","2822"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2823 : NAD83(HARN) / New Hampshire --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2823,'EPSG',2823,'PROJCS["NAD83(HARN) / New Hampshire",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2823"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2824 : NAD83(HARN) / New Jersey --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2824,'EPSG',2824,'PROJCS["NAD83(HARN) / New Jersey",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2824"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2825 : NAD83(HARN) / New Mexico East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2825,'EPSG',2825,'PROJCS["NAD83(HARN) / New Mexico East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",165000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2825"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2826 : NAD83(HARN) / New Mexico Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2826,'EPSG',2826,'PROJCS["NAD83(HARN) / New Mexico Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2826"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2827 : NAD83(HARN) / New Mexico West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2827,'EPSG',2827,'PROJCS["NAD83(HARN) / New Mexico West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",830000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2827"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2828 : NAD83(HARN) / New York East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2828,'EPSG',2828,'PROJCS["NAD83(HARN) / New York East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2828"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2829 : NAD83(HARN) / New York Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2829,'EPSG',2829,'PROJCS["NAD83(HARN) / New York Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2829"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2830 : NAD83(HARN) / New York West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2830,'EPSG',2830,'PROJCS["NAD83(HARN) / New York West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",350000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2830"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2831 : NAD83(HARN) / New York Long Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2831,'EPSG',2831,'PROJCS["NAD83(HARN) / New York Long Island",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2831"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2832 : NAD83(HARN) / North Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2832,'EPSG',2832,'PROJCS["NAD83(HARN) / North Dakota North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2832"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2833 : NAD83(HARN) / North Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2833,'EPSG',2833,'PROJCS["NAD83(HARN) / North Dakota South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2833"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2834 : NAD83(HARN) / Ohio North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2834,'EPSG',2834,'PROJCS["NAD83(HARN) / Ohio North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2834"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2835 : NAD83(HARN) / Ohio South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2835,'EPSG',2835,'PROJCS["NAD83(HARN) / Ohio South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2835"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2836 : NAD83(HARN) / Oklahoma North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2836,'EPSG',2836,'PROJCS["NAD83(HARN) / Oklahoma North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2836"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2837 : NAD83(HARN) / Oklahoma South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2837,'EPSG',2837,'PROJCS["NAD83(HARN) / Oklahoma South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2837"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2838 : NAD83(HARN) / Oregon North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2838,'EPSG',2838,'PROJCS["NAD83(HARN) / Oregon North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2838"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2839 : NAD83(HARN) / Oregon South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2839,'EPSG',2839,'PROJCS["NAD83(HARN) / Oregon South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2839"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2840 : NAD83(HARN) / Rhode Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2840,'EPSG',2840,'PROJCS["NAD83(HARN) / Rhode Island",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2840"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2841 : NAD83(HARN) / South Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2841,'EPSG',2841,'PROJCS["NAD83(HARN) / South Dakota North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2841"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2842 : NAD83(HARN) / South Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2842,'EPSG',2842,'PROJCS["NAD83(HARN) / South Dakota South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2842"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2843 : NAD83(HARN) / Tennessee --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2843,'EPSG',2843,'PROJCS["NAD83(HARN) / Tennessee",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2843"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2844 : NAD83(HARN) / Texas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2844,'EPSG',2844,'PROJCS["NAD83(HARN) / Texas North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2844"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2845 : NAD83(HARN) / Texas North Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2845,'EPSG',2845,'PROJCS["NAD83(HARN) / Texas North Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","2845"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2846 : NAD83(HARN) / Texas Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2846,'EPSG',2846,'PROJCS["NAD83(HARN) / Texas Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",700000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","2846"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2847 : NAD83(HARN) / Texas South Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2847,'EPSG',2847,'PROJCS["NAD83(HARN) / Texas South Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","2847"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2848 : NAD83(HARN) / Texas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2848,'EPSG',2848,'PROJCS["NAD83(HARN) / Texas South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",300000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","2848"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2849 : NAD83(HARN) / Utah North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2849,'EPSG',2849,'PROJCS["NAD83(HARN) / Utah North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2849"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2850 : NAD83(HARN) / Utah Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2850,'EPSG',2850,'PROJCS["NAD83(HARN) / Utah Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","2850"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2851 : NAD83(HARN) / Utah South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2851,'EPSG',2851,'PROJCS["NAD83(HARN) / Utah South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","2851"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2852 : NAD83(HARN) / Vermont --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2852,'EPSG',2852,'PROJCS["NAD83(HARN) / Vermont",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2852"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2853 : NAD83(HARN) / Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2853,'EPSG',2853,'PROJCS["NAD83(HARN) / Virginia North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","2853"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2854 : NAD83(HARN) / Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2854,'EPSG',2854,'PROJCS["NAD83(HARN) / Virginia South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2854"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2855 : NAD83(HARN) / Washington North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2855,'EPSG',2855,'PROJCS["NAD83(HARN) / Washington North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2855"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2856 : NAD83(HARN) / Washington South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2856,'EPSG',2856,'PROJCS["NAD83(HARN) / Washington South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2856"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2857 : NAD83(HARN) / West Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2857,'EPSG',2857,'PROJCS["NAD83(HARN) / West Virginia North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2857"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2858 : NAD83(HARN) / West Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2858,'EPSG',2858,'PROJCS["NAD83(HARN) / West Virginia South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2858"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2859 : NAD83(HARN) / Wisconsin North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2859,'EPSG',2859,'PROJCS["NAD83(HARN) / Wisconsin North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2859"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2860 : NAD83(HARN) / Wisconsin Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2860,'EPSG',2860,'PROJCS["NAD83(HARN) / Wisconsin Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2860"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2861 : NAD83(HARN) / Wisconsin South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2861,'EPSG',2861,'PROJCS["NAD83(HARN) / Wisconsin South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2861"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2862 : NAD83(HARN) / Wyoming East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2862,'EPSG',2862,'PROJCS["NAD83(HARN) / Wyoming East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2862"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2863 : NAD83(HARN) / Wyoming East Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2863,'EPSG',2863,'PROJCS["NAD83(HARN) / Wyoming East Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",400000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2863"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2864 : NAD83(HARN) / Wyoming West Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2864,'EPSG',2864,'PROJCS["NAD83(HARN) / Wyoming West Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2864"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2865 : NAD83(HARN) / Wyoming West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2865,'EPSG',2865,'PROJCS["NAD83(HARN) / Wyoming West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","2865"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2866 : NAD83(HARN) / Puerto Rico and Virgin Is. --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2866,'EPSG',2866,'PROJCS["NAD83(HARN) / Puerto Rico and Virgin Is.",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",200000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","2866"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2867 : NAD83(HARN) / Arizona East (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2867,'EPSG',2867,'PROJCS["NAD83(HARN) / Arizona East (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2867"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2868 : NAD83(HARN) / Arizona Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2868,'EPSG',2868,'PROJCS["NAD83(HARN) / Arizona Central (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2868"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2869 : NAD83(HARN) / Arizona West (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2869,'EPSG',2869,'PROJCS["NAD83(HARN) / Arizona West (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2869"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2870 : NAD83(HARN) / California zone 1 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2870,'EPSG',2870,'PROJCS["NAD83(HARN) / California zone 1 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2870"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2871 : NAD83(HARN) / California zone 2 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2871,'EPSG',2871,'PROJCS["NAD83(HARN) / California zone 2 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2871"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2872 : NAD83(HARN) / California zone 3 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2872,'EPSG',2872,'PROJCS["NAD83(HARN) / California zone 3 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2872"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2873 : NAD83(HARN) / California zone 4 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2873,'EPSG',2873,'PROJCS["NAD83(HARN) / California zone 4 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2873"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2874 : NAD83(HARN) / California zone 5 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2874,'EPSG',2874,'PROJCS["NAD83(HARN) / California zone 5 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2874"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2875 : NAD83(HARN) / California zone 6 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2875,'EPSG',2875,'PROJCS["NAD83(HARN) / California zone 6 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2875"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2876 : NAD83(HARN) / Colorado North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2876,'EPSG',2876,'PROJCS["NAD83(HARN) / Colorado North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2876"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2877 : NAD83(HARN) / Colorado Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2877,'EPSG',2877,'PROJCS["NAD83(HARN) / Colorado Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2877"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2878 : NAD83(HARN) / Colorado South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2878,'EPSG',2878,'PROJCS["NAD83(HARN) / Colorado South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","2878"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2879 : NAD83(HARN) / Connecticut (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2879,'EPSG',2879,'PROJCS["NAD83(HARN) / Connecticut (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",1000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","2879"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2880 : NAD83(HARN) / Delaware (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2880,'EPSG',2880,'PROJCS["NAD83(HARN) / Delaware (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2880"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2881 : NAD83(HARN) / Florida East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2881,'EPSG',2881,'PROJCS["NAD83(HARN) / Florida East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2881"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2882 : NAD83(HARN) / Florida West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2882,'EPSG',2882,'PROJCS["NAD83(HARN) / Florida West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2882"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2883 : NAD83(HARN) / Florida North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2883,'EPSG',2883,'PROJCS["NAD83(HARN) / Florida North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2883"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2884 : NAD83(HARN) / Georgia East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2884,'EPSG',2884,'PROJCS["NAD83(HARN) / Georgia East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2884"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2885 : NAD83(HARN) / Georgia West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2885,'EPSG',2885,'PROJCS["NAD83(HARN) / Georgia West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2885"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2886 : NAD83(HARN) / Idaho East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2886,'EPSG',2886,'PROJCS["NAD83(HARN) / Idaho East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2886"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2887 : NAD83(HARN) / Idaho Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2887,'EPSG',2887,'PROJCS["NAD83(HARN) / Idaho Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2887"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2888 : NAD83(HARN) / Idaho West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2888,'EPSG',2888,'PROJCS["NAD83(HARN) / Idaho West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",2624666.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2888"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2889 : NAD83(HARN) / Indiana East (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2889,'EPSG',2889,'PROJCS["NAD83(HARN) / Indiana East (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2889"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2890 : NAD83(HARN) / Indiana West (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2890,'EPSG',2890,'PROJCS["NAD83(HARN) / Indiana West (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",818125],AUTHORITY["EPSG","2890"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2891 : NAD83(HARN) / Kentucky North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2891,'EPSG',2891,'PROJCS["NAD83(HARN) / Kentucky North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2891"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2892 : NAD83(HARN) / Kentucky South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2892,'EPSG',2892,'PROJCS["NAD83(HARN) / Kentucky South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","2892"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2893 : NAD83(HARN) / Maryland (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2893,'EPSG',2893,'PROJCS["NAD83(HARN) / Maryland (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",1312333.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2893"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2894 : NAD83(HARN) / Massachusetts Mainland (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2894,'EPSG',2894,'PROJCS["NAD83(HARN) / Massachusetts Mainland (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",2460625],AUTHORITY["EPSG","2894"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2895 : NAD83(HARN) / Massachusetts Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2895,'EPSG',2895,'PROJCS["NAD83(HARN) / Massachusetts Island (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2895"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2896 : NAD83(HARN) / Michigan North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2896,'EPSG',2896,'PROJCS["NAD83(HARN) / Michigan North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",26246719.16],PARAMETER["false_northing",0],AUTHORITY["EPSG","2896"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2897 : NAD83(HARN) / Michigan Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2897,'EPSG',2897,'PROJCS["NAD83(HARN) / Michigan Central (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",19685039.37],PARAMETER["false_northing",0],AUTHORITY["EPSG","2897"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2898 : NAD83(HARN) / Michigan South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2898,'EPSG',2898,'PROJCS["NAD83(HARN) / Michigan South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",13123359.58],PARAMETER["false_northing",0],AUTHORITY["EPSG","2898"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2899 : NAD83(HARN) / Mississippi East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2899,'EPSG',2899,'PROJCS["NAD83(HARN) / Mississippi East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2899"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2900 : NAD83(HARN) / Mississippi West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2900,'EPSG',2900,'PROJCS["NAD83(HARN) / Mississippi West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","2900"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2901 : NAD83(HARN) / Montana (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2901,'EPSG',2901,'PROJCS["NAD83(HARN) / Montana (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2901"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2902 : NAD83(HARN) / New Mexico East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2902,'EPSG',2902,'PROJCS["NAD83(HARN) / New Mexico East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",541337.5],PARAMETER["false_northing",0],AUTHORITY["EPSG","2902"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2903 : NAD83(HARN) / New Mexico Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2903,'EPSG',2903,'PROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2903"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2904 : NAD83(HARN) / New Mexico West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2904,'EPSG',2904,'PROJCS["NAD83(HARN) / New Mexico West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",2723091.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2904"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2905 : NAD83(HARN) / New York East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2905,'EPSG',2905,'PROJCS["NAD83(HARN) / New York East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","2905"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2906 : NAD83(HARN) / New York Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2906,'EPSG',2906,'PROJCS["NAD83(HARN) / New York Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",820208.3330000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2906"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2907 : NAD83(HARN) / New York West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2907,'EPSG',2907,'PROJCS["NAD83(HARN) / New York West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1148291.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2907"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2908 : NAD83(HARN) / New York Long Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2908,'EPSG',2908,'PROJCS["NAD83(HARN) / New York Long Island (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","2908"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2909 : NAD83(HARN) / North Dakota North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2909,'EPSG',2909,'PROJCS["NAD83(HARN) / North Dakota North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2909"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2910 : NAD83(HARN) / North Dakota South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2910,'EPSG',2910,'PROJCS["NAD83(HARN) / North Dakota South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","2910"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2911 : NAD83(HARN) / Oklahoma North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2911,'EPSG',2911,'PROJCS["NAD83(HARN) / Oklahoma North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2911"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2912 : NAD83(HARN) / Oklahoma South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2912,'EPSG',2912,'PROJCS["NAD83(HARN) / Oklahoma South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2912"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2913 : NAD83(HARN) / Oregon North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2913,'EPSG',2913,'PROJCS["NAD83(HARN) / Oregon North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",8202099.738],PARAMETER["false_northing",0],AUTHORITY["EPSG","2913"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2914 : NAD83(HARN) / Oregon South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2914,'EPSG',2914,'PROJCS["NAD83(HARN) / Oregon South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",4921259.843],PARAMETER["false_northing",0],AUTHORITY["EPSG","2914"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2915 : NAD83(HARN) / Tennessee (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2915,'EPSG',2915,'PROJCS["NAD83(HARN) / Tennessee (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2915"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2916 : NAD83(HARN) / Texas North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2916,'EPSG',2916,'PROJCS["NAD83(HARN) / Texas North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2916"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2917 : NAD83(HARN) / Texas North Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2917,'EPSG',2917,'PROJCS["NAD83(HARN) / Texas North Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2917"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2918 : NAD83(HARN) / Texas Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2918,'EPSG',2918,'PROJCS["NAD83(HARN) / Texas Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","2918"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2919 : NAD83(HARN) / Texas South Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2919,'EPSG',2919,'PROJCS["NAD83(HARN) / Texas South Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",1968500],PARAMETER["false_northing",13123333.333],AUTHORITY["EPSG","2919"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2920 : NAD83(HARN) / Texas South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2920,'EPSG',2920,'PROJCS["NAD83(HARN) / Texas South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",16404166.667],AUTHORITY["EPSG","2920"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2921 : NAD83(HARN) / Utah North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2921,'EPSG',2921,'PROJCS["NAD83(HARN) / Utah North (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",3280839.895],AUTHORITY["EPSG","2921"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2922 : NAD83(HARN) / Utah Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2922,'EPSG',2922,'PROJCS["NAD83(HARN) / Utah Central (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",6561679.79],AUTHORITY["EPSG","2922"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2923 : NAD83(HARN) / Utah South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2923,'EPSG',2923,'PROJCS["NAD83(HARN) / Utah South (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",9842519.685],AUTHORITY["EPSG","2923"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2924 : NAD83(HARN) / Virginia North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2924,'EPSG',2924,'PROJCS["NAD83(HARN) / Virginia North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","2924"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2925 : NAD83(HARN) / Virginia South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2925,'EPSG',2925,'PROJCS["NAD83(HARN) / Virginia South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","2925"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2926 : NAD83(HARN) / Washington North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2926,'EPSG',2926,'PROJCS["NAD83(HARN) / Washington North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2926"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2927 : NAD83(HARN) / Washington South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2927,'EPSG',2927,'PROJCS["NAD83(HARN) / Washington South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","2927"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2928 : NAD83(HARN) / Wisconsin North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2928,'EPSG',2928,'PROJCS["NAD83(HARN) / Wisconsin North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2928"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2929 : NAD83(HARN) / Wisconsin Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2929,'EPSG',2929,'PROJCS["NAD83(HARN) / Wisconsin Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2929"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2930 : NAD83(HARN) / Wisconsin South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2930,'EPSG',2930,'PROJCS["NAD83(HARN) / Wisconsin South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","2930"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2931 : Beduaram / TM 13 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2931,'EPSG',2931,'PROJCS["Beduaram / TM 13 NE",GEOGCS["Beduaram",DATUM["Beduaram",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-106,-87,188,0,0,0,0],AUTHORITY["EPSG","6213"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4213"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2931"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2932 : QND95 / Qatar National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2932,'EPSG',2932,'PROJCS["QND95 / Qatar National Grid",GEOGCS["QND95",DATUM["Qatar_National_Datum_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706],AUTHORITY["EPSG","6614"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4614"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.45],PARAMETER["central_meridian",51.21666666666667],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",200000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","2932"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs '); --- --- EPSG 2933 : Segara / UTM zone 50S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2933,'EPSG',2933,'PROJCS["Segara / UTM zone 50S",GEOGCS["Segara",DATUM["Gunung_Segara",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6613"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4613"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2933"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2934 : Segara (Jakarta) / NEIEZ (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2934,'EPSG',2934,'PROJCS["Segara (Jakarta) / NEIEZ (deprecated)",GEOGCS["Segara (Jakarta)",DATUM["Gunung_Segara_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6820"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4820"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","2934"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs '); --- --- EPSG 2935 : Pulkovo 1942 / CS63 zone A1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2935,'EPSG',2935,'PROJCS["Pulkovo 1942 / CS63 zone A1",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",41.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",1300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2935"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2936 : Pulkovo 1942 / CS63 zone A2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2936,'EPSG',2936,'PROJCS["Pulkovo 1942 / CS63 zone A2",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",44.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",2300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2936"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2937 : Pulkovo 1942 / CS63 zone A3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2937,'EPSG',2937,'PROJCS["Pulkovo 1942 / CS63 zone A3",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",47.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",3300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2937"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2938 : Pulkovo 1942 / CS63 zone A4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2938,'EPSG',2938,'PROJCS["Pulkovo 1942 / CS63 zone A4",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1166666666666667],PARAMETER["central_meridian",50.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",4300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2938"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2939 : Pulkovo 1942 / CS63 zone K2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2939,'EPSG',2939,'PROJCS["Pulkovo 1942 / CS63 zone K2",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1333333333333333],PARAMETER["central_meridian",50.76666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",2300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2939"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2940 : Pulkovo 1942 / CS63 zone K3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2940,'EPSG',2940,'PROJCS["Pulkovo 1942 / CS63 zone K3",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1333333333333333],PARAMETER["central_meridian",53.76666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",3300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2940"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2941 : Pulkovo 1942 / CS63 zone K4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2941,'EPSG',2941,'PROJCS["Pulkovo 1942 / CS63 zone K4",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1333333333333333],PARAMETER["central_meridian",56.76666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",4300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2941"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 2942 : Porto Santo / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2942,'EPSG',2942,'PROJCS["Porto Santo / UTM zone 28N",GEOGCS["Porto Santo",DATUM["Porto_Santo_1936",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-499,-249,314,0,0,0,0],AUTHORITY["EPSG","6615"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4615"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2942"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2943 : Selvagem Grande / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2943,'EPSG',2943,'PROJCS["Selvagem Grande / UTM zone 28N",GEOGCS["Selvagem Grande",DATUM["Selvagem_Grande",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-289,-124,60,0,0,0,0],AUTHORITY["EPSG","6616"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4616"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2943"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2944 : NAD83(CSRS) / SCoPQ zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2944,'EPSG',2944,'PROJCS["NAD83(CSRS) / SCoPQ zone 2",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2944"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2945 : NAD83(CSRS) / MTM zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2945,'EPSG',2945,'PROJCS["NAD83(CSRS) / MTM zone 3",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2945"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2946 : NAD83(CSRS) / MTM zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2946,'EPSG',2946,'PROJCS["NAD83(CSRS) / MTM zone 4",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2946"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2947 : NAD83(CSRS) / MTM zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2947,'EPSG',2947,'PROJCS["NAD83(CSRS) / MTM zone 5",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2947"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2948 : NAD83(CSRS) / MTM zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2948,'EPSG',2948,'PROJCS["NAD83(CSRS) / MTM zone 6",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2948"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2949 : NAD83(CSRS) / MTM zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2949,'EPSG',2949,'PROJCS["NAD83(CSRS) / MTM zone 7",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2949"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2950 : NAD83(CSRS) / MTM zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2950,'EPSG',2950,'PROJCS["NAD83(CSRS) / MTM zone 8",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2950"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2951 : NAD83(CSRS) / MTM zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2951,'EPSG',2951,'PROJCS["NAD83(CSRS) / MTM zone 9",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2951"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2952 : NAD83(CSRS) / MTM zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2952,'EPSG',2952,'PROJCS["NAD83(CSRS) / MTM zone 10",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","2952"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2953 : NAD83(CSRS) / New Brunswick Stereographic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2953,'EPSG',2953,'PROJCS["NAD83(CSRS) / New Brunswick Stereographic",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-66.5],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",2500000],PARAMETER["false_northing",7500000],AUTHORITY["EPSG","2953"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2954 : NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2954,'EPSG',2954,'PROJCS["NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",47.25],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.999912],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","2954"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2955 : NAD83(CSRS) / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2955,'EPSG',2955,'PROJCS["NAD83(CSRS) / UTM zone 11N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2955"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2956 : NAD83(CSRS) / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2956,'EPSG',2956,'PROJCS["NAD83(CSRS) / UTM zone 12N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2956"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2957 : NAD83(CSRS) / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2957,'EPSG',2957,'PROJCS["NAD83(CSRS) / UTM zone 13N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2957"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2958 : NAD83(CSRS) / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2958,'EPSG',2958,'PROJCS["NAD83(CSRS) / UTM zone 17N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2958"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2959 : NAD83(CSRS) / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2959,'EPSG',2959,'PROJCS["NAD83(CSRS) / UTM zone 18N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2959"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2960 : NAD83(CSRS) / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2960,'EPSG',2960,'PROJCS["NAD83(CSRS) / UTM zone 19N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2960"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2961 : NAD83(CSRS) / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2961,'EPSG',2961,'PROJCS["NAD83(CSRS) / UTM zone 20N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2961"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2962 : NAD83(CSRS) / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2962,'EPSG',2962,'PROJCS["NAD83(CSRS) / UTM zone 21N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2962"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2963 : Lisbon 1890 (Lisbon) / Portugal Bonne --- -- (unable to translate) --- --- EPSG 2964 : NAD27 / Alaska Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2964,'EPSG',2964,'PROJCS["NAD27 / Alaska Albers",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",55],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_center",50],PARAMETER["longitude_of_center",-154],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","2964"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 2965 : NAD83 / Indiana East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2965,'EPSG',2965,'PROJCS["NAD83 / Indiana East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2965"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2966 : NAD83 / Indiana West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2966,'EPSG',2966,'PROJCS["NAD83 / Indiana West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2966"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2967 : NAD83(HARN) / Indiana East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2967,'EPSG',2967,'PROJCS["NAD83(HARN) / Indiana East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2967"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2968 : NAD83(HARN) / Indiana West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2968,'EPSG',2968,'PROJCS["NAD83(HARN) / Indiana West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","2968"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 2969 : Fort Marigot / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2969,'EPSG',2969,'PROJCS["Fort Marigot / UTM zone 20N",GEOGCS["Fort Marigot",DATUM["Fort_Marigot",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[137,248,-430,0,0,0,0],AUTHORITY["EPSG","6621"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4621"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2969"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2970 : Guadeloupe 1948 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2970,'EPSG',2970,'PROJCS["Guadeloupe 1948 / UTM zone 20N",GEOGCS["Guadeloupe 1948",DATUM["Guadeloupe_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-467,-16,-300,0,0,0,0],AUTHORITY["EPSG","6622"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4622"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2970"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2971 : CSG67 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2971,'EPSG',2971,'PROJCS["CSG67 / UTM zone 22N",GEOGCS["CSG67",DATUM["Centre_Spatial_Guyanais_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-186,230,110,0,0,0,0],AUTHORITY["EPSG","6623"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4623"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2971"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2972 : RGFG95 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2972,'EPSG',2972,'PROJCS["RGFG95 / UTM zone 22N",GEOGCS["RGFG95",DATUM["Reseau_Geodesique_Francais_Guyane_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY["EPSG","6624"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4624"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2972"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2973 : Martinique 1938 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2973,'EPSG',2973,'PROJCS["Martinique 1938 / UTM zone 20N",GEOGCS["Martinique 1938",DATUM["Martinique_1938",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[186,482,151,0,0,0,0],AUTHORITY["EPSG","6625"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4625"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2973"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2975 : RGR92 / UTM zone 40S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2975,'EPSG',2975,'PROJCS["RGR92 / UTM zone 40S",GEOGCS["RGR92",DATUM["Reseau_Geodesique_de_la_Reunion_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6627"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4627"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2975"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2976 : Tahiti 52 / UTM zone 6S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2976,'EPSG',2976,'PROJCS["Tahiti 52 / UTM zone 6S",GEOGCS["Tahiti 52",DATUM["Tahiti_52",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[162,117,154,0,0,0,0],AUTHORITY["EPSG","6628"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4628"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2976"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2977 : Tahaa 54 / UTM zone 5S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2977,'EPSG',2977,'PROJCS["Tahaa 54 / UTM zone 5S",GEOGCS["Tahaa 54",DATUM["Tahaa_54",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746],AUTHORITY["EPSG","6629"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4629"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2977"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +south +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +units=m +no_defs '); --- --- EPSG 2978 : IGN72 Nuku Hiva / UTM zone 7S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2978,'EPSG',2978,'PROJCS["IGN72 Nuku Hiva / UTM zone 7S",GEOGCS["IGN72 Nuku Hiva",DATUM["IGN72_Nuku_Hiva",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[84,274,65,0,0,0,0],AUTHORITY["EPSG","6630"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4630"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2978"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2979 : K0 1949 / UTM zone 42S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2979,'EPSG',2979,'PROJCS["K0 1949 / UTM zone 42S (deprecated)",GEOGCS["K0 1949",DATUM["K0_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6631"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4631"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2979"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2980 : Combani 1950 / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2980,'EPSG',2980,'PROJCS["Combani 1950 / UTM zone 38S",GEOGCS["Combani 1950",DATUM["Combani_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-382,-59,-262,0,0,0,0],AUTHORITY["EPSG","6632"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4632"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2980"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2981 : IGN56 Lifou / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2981,'EPSG',2981,'PROJCS["IGN56 Lifou / UTM zone 58S",GEOGCS["IGN56 Lifou",DATUM["IGN56_Lifou",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[335.47,222.58,-230.94,0,0,0,0],AUTHORITY["EPSG","6633"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4633"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2981"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2982 : IGN72 Grand Terre / UTM zone 58S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2982,'EPSG',2982,'PROJCS["IGN72 Grand Terre / UTM zone 58S (deprecated)",GEOGCS["IGN72 Grand Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4634"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2982"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2983 : ST87 Ouvea / UTM zone 58S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2983,'EPSG',2983,'PROJCS["ST87 Ouvea / UTM zone 58S (deprecated)",GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798],AUTHORITY["EPSG","6635"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4635"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2983"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs '); --- --- EPSG 2984 : RGNC 1991 / Lambert New Caledonia (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2984,'EPSG',2984,'PROJCS["RGNC 1991 / Lambert New Caledonia (deprecated)",GEOGCS["RGNC 1991",DATUM["Reseau_Geodesique_Nouvelle_Caledonie_1991",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6645"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4645"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-20.66666666666667],PARAMETER["standard_parallel_2",-22.33333333333333],PARAMETER["latitude_of_origin",-21.5],PARAMETER["central_meridian",166],PARAMETER["false_easting",400000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","2984"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2985 : Petrels 1972 / Terre Adelie Polar Stereographic --- -- (unable to translate) --- --- EPSG 2986 : Perroud 1950 / Terre Adelie Polar Stereographic --- -- (unable to translate) --- --- EPSG 2987 : Saint Pierre et Miquelon 1950 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2987,'EPSG',2987,'PROJCS["Saint Pierre et Miquelon 1950 / UTM zone 21N",GEOGCS["Saint Pierre et Miquelon 1950",DATUM["Saint_Pierre_et_Miquelon_1950",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[30,430,368,0,0,0,0],AUTHORITY["EPSG","6638"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4638"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2987"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2988 : MOP78 / UTM zone 1S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2988,'EPSG',2988,'PROJCS["MOP78 / UTM zone 1S",GEOGCS["MOP78",DATUM["MOP78",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[253,-132,-127,0,0,0,0],AUTHORITY["EPSG","6639"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4639"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2988"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2989 : RRAF 1991 / UTM zone 20N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2989,'EPSG',2989,'PROJCS["RRAF 1991 / UTM zone 20N (deprecated)",GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6640"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4640"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2989"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2990 : Reunion 1947 / TM Reunion (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2990,'EPSG',2990,'PROJCS["Reunion 1947 / TM Reunion (deprecated)",GEOGCS["Reunion 1947",DATUM["Reunion_1947",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[94,-948,-1262,0,0,0,0],AUTHORITY["EPSG","6626"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4626"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-21.11666666666667],PARAMETER["central_meridian",55.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",50000],PARAMETER["false_northing",160000],AUTHORITY["EPSG","2990"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2991 : NAD83 / Oregon Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2991,'EPSG',2991,'PROJCS["NAD83 / Oregon Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2991"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2992 : NAD83 / Oregon Lambert (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2992,'EPSG',2992,'PROJCS["NAD83 / Oregon Lambert (ft)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","2992"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2993 : NAD83(HARN) / Oregon Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2993,'EPSG',2993,'PROJCS["NAD83(HARN) / Oregon Lambert",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","2993"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2994 : NAD83(HARN) / Oregon Lambert (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2994,'EPSG',2994,'PROJCS["NAD83(HARN) / Oregon Lambert (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","2994"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 2995 : IGN53 Mare / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2995,'EPSG',2995,'PROJCS["IGN53 Mare / UTM zone 58S",GEOGCS["IGN53 Mare",DATUM["IGN53_Mare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[287.58,177.78,-135.41,0,0,0,0],AUTHORITY["EPSG","6641"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4641"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2995"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2996 : ST84 Ile des Pins / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2996,'EPSG',2996,'PROJCS["ST84 Ile des Pins / UTM zone 58S",GEOGCS["ST84 Ile des Pins",DATUM["ST84_Ile_des_Pins",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-13,-348,292,0,0,0,0],AUTHORITY["EPSG","6642"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4642"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2996"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2997 : ST71 Belep / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2997,'EPSG',2997,'PROJCS["ST71 Belep / UTM zone 58S",GEOGCS["ST71 Belep",DATUM["ST71_Belep",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7],AUTHORITY["EPSG","6643"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4643"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2997"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs '); --- --- EPSG 2998 : NEA74 Noumea / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2998,'EPSG',2998,'PROJCS["NEA74 Noumea / UTM zone 58S",GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2998"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs '); --- --- EPSG 2999 : Grand Comoros / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (2999,'EPSG',2999,'PROJCS["Grand Comoros / UTM zone 38S",GEOGCS["Grand Comoros",DATUM["Grand_Comoros",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6646"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4646"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2999"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +ellps=intl +units=m +no_defs '); --- --- EPSG 3000 : Segara / NEIEZ --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3000,'EPSG',3000,'PROJCS["Segara / NEIEZ",GEOGCS["Segara",DATUM["Gunung_Segara",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-403,684,41,0,0,0,0],AUTHORITY["EPSG","6613"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4613"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","3000"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3001 : Batavia / NEIEZ --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3001,'EPSG',3001,'PROJCS["Batavia / NEIEZ",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","3001"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3002 : Makassar / NEIEZ --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3002,'EPSG',3002,'PROJCS["Makassar / NEIEZ",GEOGCS["Makassar",DATUM["Makassar",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6257"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4257"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","3002"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3003 : Monte Mario / Italy zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3003,'EPSG',3003,'PROJCS["Monte Mario / Italy zone 1",GEOGCS["Monte Mario",DATUM["Monte_Mario",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6265"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4265"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3003"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs '); --- --- EPSG 3004 : Monte Mario / Italy zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3004,'EPSG',3004,'PROJCS["Monte Mario / Italy zone 2",GEOGCS["Monte Mario",DATUM["Monte_Mario",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6265"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4265"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2520000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3004"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs '); --- --- EPSG 3005 : NAD83 / BC Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3005,'EPSG',3005,'PROJCS["NAD83 / BC Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",58.5],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-126],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3005"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3006 : SWEREF99 TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3006,'EPSG',3006,'PROJCS["SWEREF99 TM",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3006"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3007 : SWEREF99 12 00 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3007,'EPSG',3007,'PROJCS["SWEREF99 12 00",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3007"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3008 : SWEREF99 13 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3008,'EPSG',3008,'PROJCS["SWEREF99 13 30",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3008"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3009 : SWEREF99 15 00 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3009,'EPSG',3009,'PROJCS["SWEREF99 15 00",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3009"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3010 : SWEREF99 16 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3010,'EPSG',3010,'PROJCS["SWEREF99 16 30",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3010"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3011 : SWEREF99 18 00 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3011,'EPSG',3011,'PROJCS["SWEREF99 18 00",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3011"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3012 : SWEREF99 14 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3012,'EPSG',3012,'PROJCS["SWEREF99 14 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3012"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3013 : SWEREF99 15 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3013,'EPSG',3013,'PROJCS["SWEREF99 15 45",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3013"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3014 : SWEREF99 17 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3014,'EPSG',3014,'PROJCS["SWEREF99 17 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3014"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3015 : SWEREF99 18 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3015,'EPSG',3015,'PROJCS["SWEREF99 18 45",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3015"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3016 : SWEREF99 20 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3016,'EPSG',3016,'PROJCS["SWEREF99 20 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3016"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3017 : SWEREF99 21 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3017,'EPSG',3017,'PROJCS["SWEREF99 21 45",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3017"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3018 : SWEREF99 23 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3018,'EPSG',3018,'PROJCS["SWEREF99 23 15",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23.25],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3018"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3019 : RT90 7.5 gon V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3019,'EPSG',3019,'PROJCS["RT90 7.5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3019"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs '); --- --- EPSG 3020 : RT90 5 gon V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3020,'EPSG',3020,'PROJCS["RT90 5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3020"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs '); --- --- EPSG 3021 : RT90 2.5 gon V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3021,'EPSG',3021,'PROJCS["RT90 2.5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3021"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs '); --- --- EPSG 3022 : RT90 0 gon --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3022,'EPSG',3022,'PROJCS["RT90 0 gon",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3022"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs '); --- --- EPSG 3023 : RT90 2.5 gon O --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3023,'EPSG',3023,'PROJCS["RT90 2.5 gon O",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3023"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs '); --- --- EPSG 3024 : RT90 5 gon O --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3024,'EPSG',3024,'PROJCS["RT90 5 gon O",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3024"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs '); --- --- EPSG 3025 : RT38 7.5 gon V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3025,'EPSG',3025,'PROJCS["RT38 7.5 gon V",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3025"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3026 : RT38 5 gon V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3026,'EPSG',3026,'PROJCS["RT38 5 gon V",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3026"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3027 : RT38 2.5 gon V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3027,'EPSG',3027,'PROJCS["RT38 2.5 gon V",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3027"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3028 : RT38 0 gon --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3028,'EPSG',3028,'PROJCS["RT38 0 gon",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3028"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3029 : RT38 2.5 gon O --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3029,'EPSG',3029,'PROJCS["RT38 2.5 gon O",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.30827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3029"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3030 : RT38 5 gon O --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3030,'EPSG',3030,'PROJCS["RT38 5 gon O",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22.55827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3030"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3031 : WGS 84 / Antarctic Polar Stereographic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3031,'EPSG',3031,'PROJCS["WGS 84 / Antarctic Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-71],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3031"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3032 : WGS 84 / Australian Antarctic Polar Stereographic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3032,'EPSG',3032,'PROJCS["WGS 84 / Australian Antarctic Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-71],PARAMETER["central_meridian",70],PARAMETER["scale_factor",1],PARAMETER["false_easting",6000000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3033 : WGS 84 / Australian Antarctic Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3033,'EPSG',3033,'PROJCS["WGS 84 / Australian Antarctic Lambert",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.5],PARAMETER["standard_parallel_2",-74.5],PARAMETER["latitude_of_origin",-50],PARAMETER["central_meridian",70],PARAMETER["false_easting",6000000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3034 : ETRS89 / ETRS-LCC --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3034,'EPSG',3034,'PROJCS["ETRS89 / ETRS-LCC",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",10],PARAMETER["false_easting",4000000],PARAMETER["false_northing",2800000],AUTHORITY["EPSG","3034"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3035 : ETRS89 / ETRS-LAEA --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3035,'EPSG',3035,'PROJCS["ETRS89 / ETRS-LAEA",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",52],PARAMETER["longitude_of_center",10],PARAMETER["false_easting",4321000],PARAMETER["false_northing",3210000],AUTHORITY["EPSG","3035"],AXIS["Y",NORTH],AXIS["X",EAST]]','+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3036 : Moznet / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3036,'EPSG',3036,'PROJCS["Moznet / UTM zone 36S",GEOGCS["Moznet",DATUM["Moznet_ITRF94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY["EPSG","6130"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4130"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3036"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs '); --- --- EPSG 3037 : Moznet / UTM zone 37S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3037,'EPSG',3037,'PROJCS["Moznet / UTM zone 37S",GEOGCS["Moznet",DATUM["Moznet_ITRF94",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY["EPSG","6130"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4130"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs '); --- --- EPSG 3038 : ETRS89 / ETRS-TM26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3038,'EPSG',3038,'PROJCS["ETRS89 / ETRS-TM26",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3038"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3039 : ETRS89 / ETRS-TM27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3039,'EPSG',3039,'PROJCS["ETRS89 / ETRS-TM27",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3039"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3040 : ETRS89 / ETRS-TM28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3040,'EPSG',3040,'PROJCS["ETRS89 / ETRS-TM28",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3040"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3041 : ETRS89 / ETRS-TM29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3041,'EPSG',3041,'PROJCS["ETRS89 / ETRS-TM29",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3041"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3042 : ETRS89 / ETRS-TM30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3042,'EPSG',3042,'PROJCS["ETRS89 / ETRS-TM30",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3042"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3043 : ETRS89 / ETRS-TM31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3043,'EPSG',3043,'PROJCS["ETRS89 / ETRS-TM31",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3043"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3044 : ETRS89 / ETRS-TM32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3044,'EPSG',3044,'PROJCS["ETRS89 / ETRS-TM32",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3044"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3045 : ETRS89 / ETRS-TM33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3045,'EPSG',3045,'PROJCS["ETRS89 / ETRS-TM33",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3045"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3046 : ETRS89 / ETRS-TM34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3046,'EPSG',3046,'PROJCS["ETRS89 / ETRS-TM34",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3046"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3047 : ETRS89 / ETRS-TM35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3047,'EPSG',3047,'PROJCS["ETRS89 / ETRS-TM35",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3047"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3048 : ETRS89 / ETRS-TM36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3048,'EPSG',3048,'PROJCS["ETRS89 / ETRS-TM36",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3048"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3049 : ETRS89 / ETRS-TM37 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3049,'EPSG',3049,'PROJCS["ETRS89 / ETRS-TM37",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3049"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3050 : ETRS89 / ETRS-TM38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3050,'EPSG',3050,'PROJCS["ETRS89 / ETRS-TM38",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3050"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3051 : ETRS89 / ETRS-TM39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3051,'EPSG',3051,'PROJCS["ETRS89 / ETRS-TM39",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3051"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3052 : Reykjavik 1900 / Lambert 1900 --- -- (unable to translate) --- --- EPSG 3053 : Hjorsey 1955 / Lambert 1955 --- -- (unable to translate) --- --- EPSG 3054 : Hjorsey 1955 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3054,'EPSG',3054,'PROJCS["Hjorsey 1955 / UTM zone 26N",GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3054"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3055 : Hjorsey 1955 / UTM zone 27N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3055,'EPSG',3055,'PROJCS["Hjorsey 1955 / UTM zone 27N",GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3055"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3056 : Hjorsey 1955 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3056,'EPSG',3056,'PROJCS["Hjorsey 1955 / UTM zone 28N",GEOGCS["Hjorsey 1955",DATUM["Hjorsey_1955",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-73,46,-86,0,0,0,0],AUTHORITY["EPSG","6658"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4658"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3056"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3057 : ISN93 / Lambert 1993 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3057,'EPSG',3057,'PROJCS["ISN93 / Lambert 1993",GEOGCS["ISN93",DATUM["Islands_Network_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6659"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4659"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",64.25],PARAMETER["standard_parallel_2",65.75],PARAMETER["latitude_of_origin",65],PARAMETER["central_meridian",-19],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3057"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3058 : Helle 1954 / Jan Mayen Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3058,'EPSG',3058,'PROJCS["Helle 1954 / Jan Mayen Grid",GEOGCS["Helle 1954",DATUM["Helle_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805],AUTHORITY["EPSG","6660"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4660"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-8.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",50000],PARAMETER["false_northing",-7800000],AUTHORITY["EPSG","3058"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +units=m +no_defs '); --- --- EPSG 3059 : LKS92 / Latvia TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3059,'EPSG',3059,'PROJCS["LKS92 / Latvia TM",GEOGCS["LKS92",DATUM["Latvia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6661"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4661"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",-6000000],AUTHORITY["EPSG","3059"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3060 : IGN72 Grande Terre / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3060,'EPSG',3060,'PROJCS["IGN72 Grande Terre / UTM zone 58S",GEOGCS["IGN72 Grande Terre",DATUM["IGN72_Grande_Terre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-11.64,-348.6,291.98,0,0,0,0],AUTHORITY["EPSG","6634"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4662"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3060"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3061 : Porto Santo 1995 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3061,'EPSG',3061,'PROJCS["Porto Santo 1995 / UTM zone 28N",GEOGCS["Porto Santo 1995",DATUM["Porto_Santo_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-502.862,-247.438,312.724,0,0,0,0],AUTHORITY["EPSG","6663"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4663"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3061"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3062 : Azores Oriental 1995 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3062,'EPSG',3062,'PROJCS["Azores Oriental 1995 / UTM zone 26N",GEOGCS["Azores Oriental 1995",DATUM["Azores_Oriental_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-204.619,140.176,55.226,0,0,0,0],AUTHORITY["EPSG","6664"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4664"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3062"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3063 : Azores Central 1995 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3063,'EPSG',3063,'PROJCS["Azores Central 1995 / UTM zone 26N",GEOGCS["Azores Central 1995",DATUM["Azores_Central_Islands_1995",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.226,166.366,-37.893,0,0,0,0],AUTHORITY["EPSG","6665"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4665"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3063"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3064 : IGM95 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3064,'EPSG',3064,'PROJCS["IGM95 / UTM zone 32N",GEOGCS["IGM95",DATUM["Istituto_Geografico_Militaire_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6670"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4670"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3064"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3065 : IGM95 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3065,'EPSG',3065,'PROJCS["IGM95 / UTM zone 33N",GEOGCS["IGM95",DATUM["Istituto_Geografico_Militaire_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6670"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4670"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3065"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3066 : ED50 / Jordan TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3066,'EPSG',3066,'PROJCS["ED50 / Jordan TM",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",37],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",500000],PARAMETER["false_northing",-3000000],AUTHORITY["EPSG","3066"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3067 : ETRS89 / ETRS-TM35FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3067,'EPSG',3067,'PROJCS["ETRS89 / ETRS-TM35FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3067"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3068 : DHDN / Soldner Berlin --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3068,'EPSG',3068,'PROJCS["DHDN / Soldner Berlin",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",52.41864827777778],PARAMETER["central_meridian",13.62720366666667],PARAMETER["false_easting",40000],PARAMETER["false_northing",10000],AUTHORITY["EPSG","3068"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 3069 : NAD27 / Wisconsin Transverse Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3069,'EPSG',3069,'PROJCS["NAD27 / Wisconsin Transverse Mercator",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",-4500000],AUTHORITY["EPSG","3069"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3070 : NAD83 / Wisconsin Transverse Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3070,'EPSG',3070,'PROJCS["NAD83 / Wisconsin Transverse Mercator",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",520000],PARAMETER["false_northing",-4480000],AUTHORITY["EPSG","3070"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3071 : NAD83(HARN) / Wisconsin Transverse Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3071,'EPSG',3071,'PROJCS["NAD83(HARN) / Wisconsin Transverse Mercator",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",520000],PARAMETER["false_northing",-4480000],AUTHORITY["EPSG","3071"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3072 : NAD83 / Maine CS2000 East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3072,'EPSG',3072,'PROJCS["NAD83 / Maine CS2000 East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-67.875],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3072"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3073 : NAD83 / Maine CS2000 Central (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3073,'EPSG',3073,'PROJCS["NAD83 / Maine CS2000 Central (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3073"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3074 : NAD83 / Maine CS2000 West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3074,'EPSG',3074,'PROJCS["NAD83 / Maine CS2000 West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.375],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3074"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3075 : NAD83(HARN) / Maine CS2000 East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3075,'EPSG',3075,'PROJCS["NAD83(HARN) / Maine CS2000 East",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-67.875],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3075"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3076 : NAD83(HARN) / Maine CS2000 Central (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3076,'EPSG',3076,'PROJCS["NAD83(HARN) / Maine CS2000 Central (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3076"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3077 : NAD83(HARN) / Maine CS2000 West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3077,'EPSG',3077,'PROJCS["NAD83(HARN) / Maine CS2000 West",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.375],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3077"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3078 : NAD83 / Michigan Oblique Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3078,'EPSG',3078,'PROJCS["NAD83 / Michigan Oblique Mercator",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",45.30916666666666],PARAMETER["longitude_of_center",-86],PARAMETER["azimuth",337.25556],PARAMETER["rectified_grid_angle",337.25556],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2546731.496],PARAMETER["false_northing",-4354009.816],AUTHORITY["EPSG","3078"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3079 : NAD83(HARN) / Michigan Oblique Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3079,'EPSG',3079,'PROJCS["NAD83(HARN) / Michigan Oblique Mercator",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",45.30916666666666],PARAMETER["longitude_of_center",-86],PARAMETER["azimuth",337.25556],PARAMETER["rectified_grid_angle",337.25556],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2546731.496],PARAMETER["false_northing",-4354009.816],AUTHORITY["EPSG","3079"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3080 : NAD27 / Shackleford --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3080,'EPSG',3080,'PROJCS["NAD27 / Shackleford",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.41666666666667],PARAMETER["standard_parallel_2",34.91666666666666],PARAMETER["latitude_of_origin",31.16666666666667],PARAMETER["central_meridian",-100],PARAMETER["false_easting",3000000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3080"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +datum=NAD27 +units=ft +no_defs '); --- --- EPSG 3081 : NAD83 / Texas State Mapping System --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3081,'EPSG',3081,'PROJCS["NAD83 / Texas State Mapping System",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.41666666666667],PARAMETER["standard_parallel_2",34.91666666666666],PARAMETER["latitude_of_origin",31.16666666666667],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3081"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3082 : NAD83 / Texas Centric Lambert Conformal --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3082,'EPSG',3082,'PROJCS["NAD83 / Texas Centric Lambert Conformal",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3082"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3083 : NAD83 / Texas Centric Albers Equal Area --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3083,'EPSG',3083,'PROJCS["NAD83 / Texas Centric Albers Equal Area",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_center",18],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3083"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3084 : NAD83(HARN) / Texas Centric Lambert Conformal --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3084,'EPSG',3084,'PROJCS["NAD83(HARN) / Texas Centric Lambert Conformal",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3084"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3085 : NAD83(HARN) / Texas Centric Albers Equal Area --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3085,'EPSG',3085,'PROJCS["NAD83(HARN) / Texas Centric Albers Equal Area",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_center",18],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3085"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3086 : NAD83 / Florida GDL Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3086,'EPSG',3086,'PROJCS["NAD83 / Florida GDL Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",24],PARAMETER["standard_parallel_2",31.5],PARAMETER["latitude_of_center",24],PARAMETER["longitude_of_center",-84],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3086"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3087 : NAD83(HARN) / Florida GDL Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3087,'EPSG',3087,'PROJCS["NAD83(HARN) / Florida GDL Albers",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",24],PARAMETER["standard_parallel_2",31.5],PARAMETER["latitude_of_center",24],PARAMETER["longitude_of_center",-84],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3087"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3088 : NAD83 / Kentucky Single Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3088,'EPSG',3088,'PROJCS["NAD83 / Kentucky Single Zone",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3088"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3089 : NAD83 / Kentucky Single Zone (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3089,'EPSG',3089,'PROJCS["NAD83 / Kentucky Single Zone (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3089"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3090 : NAD83(HARN) / Kentucky Single Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3090,'EPSG',3090,'PROJCS["NAD83(HARN) / Kentucky Single Zone",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3090"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3091 : NAD83(HARN) / Kentucky Single Zone (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3091,'EPSG',3091,'PROJCS["NAD83(HARN) / Kentucky Single Zone (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3091"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3092 : Tokyo / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3092,'EPSG',3092,'PROJCS["Tokyo / UTM zone 51N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3092"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3093 : Tokyo / UTM zone 52N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3093,'EPSG',3093,'PROJCS["Tokyo / UTM zone 52N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3093"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3094 : Tokyo / UTM zone 53N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3094,'EPSG',3094,'PROJCS["Tokyo / UTM zone 53N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3094"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3095 : Tokyo / UTM zone 54N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3095,'EPSG',3095,'PROJCS["Tokyo / UTM zone 54N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3096 : Tokyo / UTM zone 55N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3096,'EPSG',3096,'PROJCS["Tokyo / UTM zone 55N",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3096"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3097 : JGD2000 / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3097,'EPSG',3097,'PROJCS["JGD2000 / UTM zone 51N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3097"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3098 : JGD2000 / UTM zone 52N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3098,'EPSG',3098,'PROJCS["JGD2000 / UTM zone 52N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3098"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3099 : JGD2000 / UTM zone 53N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3099,'EPSG',3099,'PROJCS["JGD2000 / UTM zone 53N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3099"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3100 : JGD2000 / UTM zone 54N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3100,'EPSG',3100,'PROJCS["JGD2000 / UTM zone 54N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3100"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3101 : JGD2000 / UTM zone 55N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3101,'EPSG',3101,'PROJCS["JGD2000 / UTM zone 55N",GEOGCS["JGD2000",DATUM["Japanese_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6612"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4612"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3101"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3102 : American Samoa 1962 / American Samoa Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3102,'EPSG',3102,'PROJCS["American Samoa 1962 / American Samoa Lambert",GEOGCS["American Samoa 1962",DATUM["American_Samoa_1962",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-115,118,426,0,0,0,0],AUTHORITY["EPSG","6169"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4169"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-14.26666666666667],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",312234.65],AUTHORITY["EPSG","3102"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3103 : Mauritania 1999 / UTM zone 28N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3103,'EPSG',3103,'PROJCS["Mauritania 1999 / UTM zone 28N (deprecated)",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3103"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3104 : Mauritania 1999 / UTM zone 29N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3104,'EPSG',3104,'PROJCS["Mauritania 1999 / UTM zone 29N (deprecated)",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3104"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3105 : Mauritania 1999 / UTM zone 30N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3105,'EPSG',3105,'PROJCS["Mauritania 1999 / UTM zone 30N (deprecated)",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6681"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4681"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3105"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3106 : Gulshan 303 / Bangladesh Transverse Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3106,'EPSG',3106,'PROJCS["Gulshan 303 / Bangladesh Transverse Mercator",GEOGCS["Gulshan 303",DATUM["Gulshan_303",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[283.7,735.9,261.1,0,0,0,0],AUTHORITY["EPSG","6682"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4682"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3106"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3107 : GDA94 / SA Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3107,'EPSG',3107,'PROJCS["GDA94 / SA Lambert",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-28],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_origin",-32],PARAMETER["central_meridian",135],PARAMETER["false_easting",1000000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3107"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3108 : ETRS89 / Guernsey Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3108,'EPSG',3108,'PROJCS["ETRS89 / Guernsey Grid",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49.5],PARAMETER["central_meridian",-2.416666666666667],PARAMETER["scale_factor",0.999997],PARAMETER["false_easting",47000],PARAMETER["false_northing",50000],AUTHORITY["EPSG","3108"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3109 : ETRS89 / Jersey Transverse Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3109,'EPSG',3109,'PROJCS["ETRS89 / Jersey Transverse Mercator",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49.225],PARAMETER["central_meridian",-2.135],PARAMETER["scale_factor",0.9999999],PARAMETER["false_easting",40000],PARAMETER["false_northing",70000],AUTHORITY["EPSG","3109"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3110 : AGD66 / Vicgrid66 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3110,'EPSG',3110,'PROJCS["AGD66 / Vicgrid66",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-36],PARAMETER["standard_parallel_2",-38],PARAMETER["latitude_of_origin",-37],PARAMETER["central_meridian",145],PARAMETER["false_easting",2500000],PARAMETER["false_northing",4500000],AUTHORITY["EPSG","3110"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 3111 : GDA94 / Vicgrid94 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3111,'EPSG',3111,'PROJCS["GDA94 / Vicgrid94",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-36],PARAMETER["standard_parallel_2",-38],PARAMETER["latitude_of_origin",-37],PARAMETER["central_meridian",145],PARAMETER["false_easting",2500000],PARAMETER["false_northing",2500000],AUTHORITY["EPSG","3111"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3112 : GDA94 / Geoscience Australia Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3112,'EPSG',3112,'PROJCS["GDA94 / Geoscience Australia Lambert",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-18],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",134],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3112"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3113 : GDA94 / BCSG02 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3113,'EPSG',3113,'PROJCS["GDA94 / BCSG02",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-28],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",50000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3113"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3114 : MAGNA-SIRGAS / Colombia Far West zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3114,'EPSG',3114,'PROJCS["MAGNA-SIRGAS / Colombia Far West zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-80.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3114"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3115 : MAGNA-SIRGAS / Colombia West zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3115,'EPSG',3115,'PROJCS["MAGNA-SIRGAS / Colombia West zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-77.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3115"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3116 : MAGNA-SIRGAS / Colombia Bogota zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3116,'EPSG',3116,'PROJCS["MAGNA-SIRGAS / Colombia Bogota zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-74.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3116"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3117 : MAGNA-SIRGAS / Colombia East Central zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3117,'EPSG',3117,'PROJCS["MAGNA-SIRGAS / Colombia East Central zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-71.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3117"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3118 : MAGNA-SIRGAS / Colombia East zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3118,'EPSG',3118,'PROJCS["MAGNA-SIRGAS / Colombia East zone",GEOGCS["MAGNA-SIRGAS",DATUM["Marco_Geocentrico_Nacional_de_Referencia",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6686"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4686"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.596200416666666],PARAMETER["central_meridian",-68.07750791666666],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3118"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3119 : Douala 1948 / AEF west --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3119,'EPSG',3119,'PROJCS["Douala 1948 / AEF west",GEOGCS["Douala 1948",DATUM["Douala_1948",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206.1,-174.7,-87.7,0,0,0,0],AUTHORITY["EPSG","6192"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4192"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.5],PARAMETER["scale_factor",0.999],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3119"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3120 : Pulkovo 1942(58) / Poland zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3120,'EPSG',3120,'PROJCS["Pulkovo 1942(58) / Poland zone I",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",50.625],PARAMETER["central_meridian",21.08333333333333],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",4637000],PARAMETER["false_northing",5467000],AUTHORITY["EPSG","3120"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3121 : PRS92 / Philippines zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3121,'EPSG',3121,'PROJCS["PRS92 / Philippines zone 1",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3121"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs '); --- --- EPSG 3122 : PRS92 / Philippines zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3122,'EPSG',3122,'PROJCS["PRS92 / Philippines zone 2",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3122"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs '); --- --- EPSG 3123 : PRS92 / Philippines zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3123,'EPSG',3123,'PROJCS["PRS92 / Philippines zone 3",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3123"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs '); --- --- EPSG 3124 : PRS92 / Philippines zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3124,'EPSG',3124,'PROJCS["PRS92 / Philippines zone 4",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3124"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs '); --- --- EPSG 3125 : PRS92 / Philippines zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3125,'EPSG',3125,'PROJCS["PRS92 / Philippines zone 5",GEOGCS["PRS92",DATUM["Philippine_Reference_System_1992",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06],AUTHORITY["EPSG","6683"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4683"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",125],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3125"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs '); --- --- EPSG 3126 : ETRS89 / ETRS-GK19FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3126,'EPSG',3126,'PROJCS["ETRS89 / ETRS-GK19FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3126"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3127 : ETRS89 / ETRS-GK20FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3127,'EPSG',3127,'PROJCS["ETRS89 / ETRS-GK20FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3127"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3128 : ETRS89 / ETRS-GK21FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3128,'EPSG',3128,'PROJCS["ETRS89 / ETRS-GK21FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3128"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3129 : ETRS89 / ETRS-GK22FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3129,'EPSG',3129,'PROJCS["ETRS89 / ETRS-GK22FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3129"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3130 : ETRS89 / ETRS-GK23FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3130,'EPSG',3130,'PROJCS["ETRS89 / ETRS-GK23FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3130"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3131 : ETRS89 / ETRS-GK24FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3131,'EPSG',3131,'PROJCS["ETRS89 / ETRS-GK24FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3131"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3132 : ETRS89 / ETRS-GK25FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3132,'EPSG',3132,'PROJCS["ETRS89 / ETRS-GK25FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3132"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3133 : ETRS89 / ETRS-GK26FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3133,'EPSG',3133,'PROJCS["ETRS89 / ETRS-GK26FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3133"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3134 : ETRS89 / ETRS-GK27FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3134,'EPSG',3134,'PROJCS["ETRS89 / ETRS-GK27FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3134"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3135 : ETRS89 / ETRS-GK28FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3135,'EPSG',3135,'PROJCS["ETRS89 / ETRS-GK28FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3135"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3136 : ETRS89 / ETRS-GK29FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3136,'EPSG',3136,'PROJCS["ETRS89 / ETRS-GK29FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",29],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3136"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3137 : ETRS89 / ETRS-GK30FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3137,'EPSG',3137,'PROJCS["ETRS89 / ETRS-GK30FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3137"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3138 : ETRS89 / ETRS-GK31FIN --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3138,'EPSG',3138,'PROJCS["ETRS89 / ETRS-GK31FIN",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3138"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3139 : Vanua Levu 1915 / Vanua Levu Grid --- -- (unable to translate) --- --- EPSG 3140 : Viti Levu 1912 / Viti Levu Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3140,'EPSG',3140,'PROJCS["Viti Levu 1912 / Viti Levu Grid",GEOGCS["Viti Levu 1912",DATUM["Viti_Levu_1912",SPHEROID["Clarke 1880 (international foot)",6378306.3696,293.4663076556349,AUTHORITY["EPSG","7055"]],TOWGS84[51,391,-36,0,0,0,0],AUTHORITY["EPSG","6752"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4752"]],UNIT["link",0.201168,AUTHORITY["EPSG","9098"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",-18],PARAMETER["central_meridian",178],PARAMETER["false_easting",544000],PARAMETER["false_northing",704000],AUTHORITY["EPSG","3140"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs '); --- --- EPSG 3141 : Fiji 1956 / UTM zone 60S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3141,'EPSG',3141,'PROJCS["Fiji 1956 / UTM zone 60S",GEOGCS["Fiji 1956",DATUM["Fiji_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[265.025,384.929,-194.046,0,0,0,0],AUTHORITY["EPSG","6721"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4721"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3141"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3142 : Fiji 1956 / UTM zone 1S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3142,'EPSG',3142,'PROJCS["Fiji 1956 / UTM zone 1S",GEOGCS["Fiji 1956",DATUM["Fiji_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[265.025,384.929,-194.046,0,0,0,0],AUTHORITY["EPSG","6721"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4721"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3142"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3143 : Fiji 1986 / Fiji Map Grid (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3143,'EPSG',3143,'PROJCS["Fiji 1986 / Fiji Map Grid (deprecated)",GEOGCS["Fiji 1986",DATUM["Fiji_Geodetic_Datum_1986",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6720"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4720"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-17],PARAMETER["central_meridian",178.75],PARAMETER["scale_factor",0.99985],PARAMETER["false_easting",2000000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3143"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 3144 : FD54 / Faroe Lambert --- -- (unable to translate) --- --- EPSG 3145 : ETRS89 / Faroe Lambert --- -- (unable to translate) --- --- EPSG 3146 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3146,'EPSG',3146,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3146"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 3147 : Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3147,'EPSG',3147,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3147"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 3148 : Indian 1960 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3148,'EPSG',3148,'PROJCS["Indian 1960 / UTM zone 48N",GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3148"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3149 : Indian 1960 / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3149,'EPSG',3149,'PROJCS["Indian 1960 / UTM zone 49N",GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3149"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3150 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3150,'EPSG',3150,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3150"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 3151 : Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3151,'EPSG',3151,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3151"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 3152 : ST74 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3152,'EPSG',3152,'PROJCS["ST74",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05779],PARAMETER["scale_factor",0.99999425],PARAMETER["false_easting",100178.1808],PARAMETER["false_northing",-6500614.7836],AUTHORITY["EPSG","3152"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3153 : NAD83(CSRS) / BC Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3153,'EPSG',3153,'PROJCS["NAD83(CSRS) / BC Albers",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",58.5],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-126],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3153"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3154 : NAD83(CSRS) / UTM zone 7N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3154,'EPSG',3154,'PROJCS["NAD83(CSRS) / UTM zone 7N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3154"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3155 : NAD83(CSRS) / UTM zone 8N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3155,'EPSG',3155,'PROJCS["NAD83(CSRS) / UTM zone 8N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3155"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3156 : NAD83(CSRS) / UTM zone 9N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3156,'EPSG',3156,'PROJCS["NAD83(CSRS) / UTM zone 9N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3156"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3157 : NAD83(CSRS) / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3157,'EPSG',3157,'PROJCS["NAD83(CSRS) / UTM zone 10N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3157"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3158 : NAD83(CSRS) / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3158,'EPSG',3158,'PROJCS["NAD83(CSRS) / UTM zone 14N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3158"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3159 : NAD83(CSRS) / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3159,'EPSG',3159,'PROJCS["NAD83(CSRS) / UTM zone 15N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3159"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3160 : NAD83(CSRS) / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3160,'EPSG',3160,'PROJCS["NAD83(CSRS) / UTM zone 16N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3160"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3161 : NAD83 / Ontario MNR Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3161,'EPSG',3161,'PROJCS["NAD83 / Ontario MNR Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.5],PARAMETER["standard_parallel_2",53.5],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-85],PARAMETER["false_easting",930000],PARAMETER["false_northing",6430000],AUTHORITY["EPSG","3161"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3162 : NAD83(CSRS) / Ontario MNR Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3162,'EPSG',3162,'PROJCS["NAD83(CSRS) / Ontario MNR Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.5],PARAMETER["standard_parallel_2",53.5],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-85],PARAMETER["false_easting",930000],PARAMETER["false_northing",6430000],AUTHORITY["EPSG","3162"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3163 : RGNC91-93 / Lambert New Caledonia --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3163,'EPSG',3163,'PROJCS["RGNC91-93 / Lambert New Caledonia",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-20.66666666666667],PARAMETER["standard_parallel_2",-22.33333333333333],PARAMETER["latitude_of_origin",-21.5],PARAMETER["central_meridian",166],PARAMETER["false_easting",400000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","3163"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3164 : ST87 Ouvea / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3164,'EPSG',3164,'PROJCS["ST87 Ouvea / UTM zone 58S",GEOGCS["ST87 Ouvea",DATUM["ST87_Ouvea",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-56.263,16.136,-22.856,0,0,0,0],AUTHORITY["EPSG","6750"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4750"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3164"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3165 : NEA74 Noumea / Noumea Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3165,'EPSG',3165,'PROJCS["NEA74 Noumea / Noumea Lambert",GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-22.24469175],PARAMETER["standard_parallel_2",-22.29469175],PARAMETER["latitude_of_origin",-22.26969175],PARAMETER["central_meridian",166.44242575],PARAMETER["false_easting",0.66],PARAMETER["false_northing",1.02],AUTHORITY["EPSG","3165"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3166 : NEA74 Noumea / Noumea Lambert 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3166,'EPSG',3166,'PROJCS["NEA74 Noumea / Noumea Lambert 2",GEOGCS["NEA74 Noumea",DATUM["NEA74_Noumea",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10.18,-350.43,291.37,0,0,0,0],AUTHORITY["EPSG","6644"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4644"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-22.24472222222222],PARAMETER["standard_parallel_2",-22.29472222222222],PARAMETER["latitude_of_origin",-22.26972222222222],PARAMETER["central_meridian",166.4425],PARAMETER["false_easting",8.313],PARAMETER["false_northing",-2.354],AUTHORITY["EPSG","3166"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3167 : Kertau (RSO) / RSO Malaya (ch) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3167,'EPSG',3167,'PROJCS["Kertau (RSO) / RSO Malaya (ch)",GEOGCS["Kertau (RSO)",DATUM["Kertau_RSO",SPHEROID["Everest 1830 (RSO 1969)",6377295.664,300.8017,AUTHORITY["EPSG","7056"]],AUTHORITY["EPSG","6751"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4751"]],UNIT["British chain (Sears 1922 truncated)",20.116756,AUTHORITY["EPSG","9301"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257905],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",1988.392164223695],PARAMETER["false_northing",0],AUTHORITY["EPSG","3167"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs '); --- --- EPSG 3168 : Kertau (RSO) / RSO Malaya (m) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3168,'EPSG',3168,'PROJCS["Kertau (RSO) / RSO Malaya (m)",GEOGCS["Kertau (RSO)",DATUM["Kertau_RSO",SPHEROID["Everest 1830 (RSO 1969)",6377295.664,300.8017,AUTHORITY["EPSG","7056"]],AUTHORITY["EPSG","6751"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4751"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257905],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",804670.24],PARAMETER["false_northing",0],AUTHORITY["EPSG","3168"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs '); --- --- EPSG 3169 : RGNC91-93 / UTM zone 57S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3169,'EPSG',3169,'PROJCS["RGNC91-93 / UTM zone 57S",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3169"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3170 : RGNC91-93 / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3170,'EPSG',3170,'PROJCS["RGNC91-93 / UTM zone 58S",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3170"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3171 : RGNC91-93 / UTM zone 59S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3171,'EPSG',3171,'PROJCS["RGNC91-93 / UTM zone 59S",GEOGCS["RGNC91-93",DATUM["Reseau_Geodesique_de_Nouvelle_Caledonie_91_93",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6749"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4749"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3171"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3172 : IGN53 Mare / UTM zone 59S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3172,'EPSG',3172,'PROJCS["IGN53 Mare / UTM zone 59S",GEOGCS["IGN53 Mare",DATUM["IGN53_Mare",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[287.58,177.78,-135.41,0,0,0,0],AUTHORITY["EPSG","6641"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4641"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3172"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3173 : fk89 / Faroe Lambert FK89 --- -- (unable to translate) --- --- EPSG 3174 : NAD83 / Great Lakes Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3174,'EPSG',3174,'PROJCS["NAD83 / Great Lakes Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",42.122774],PARAMETER["standard_parallel_2",49.01518],PARAMETER["latitude_of_center",45.568977],PARAMETER["longitude_of_center",-84.455955],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3174"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3175 : NAD83 / Great Lakes and St Lawrence Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3175,'EPSG',3175,'PROJCS["NAD83 / Great Lakes and St Lawrence Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",42.122774],PARAMETER["standard_parallel_2",49.01518],PARAMETER["latitude_of_center",45.568977],PARAMETER["longitude_of_center",-83.248627],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3175"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3176 : Indian 1960 / TM 106 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3176,'EPSG',3176,'PROJCS["Indian 1960 / TM 106 NE",GEOGCS["Indian 1960",DATUM["Indian_1960",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[198,881,317,0,0,0,0],AUTHORITY["EPSG","6131"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4131"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3176"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3177 : LGD2006 / Libya TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3177,'EPSG',3177,'PROJCS["LGD2006 / Libya TM",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",0.9965],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3177"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3178 : GR96 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3178,'EPSG',3178,'PROJCS["GR96 / UTM zone 18N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3178"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3179 : GR96 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3179,'EPSG',3179,'PROJCS["GR96 / UTM zone 19N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3179"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3180 : GR96 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3180,'EPSG',3180,'PROJCS["GR96 / UTM zone 20N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3180"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3181 : GR96 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3181,'EPSG',3181,'PROJCS["GR96 / UTM zone 21N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3181"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3182 : GR96 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3182,'EPSG',3182,'PROJCS["GR96 / UTM zone 22N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3182"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3183 : GR96 / UTM zone 23N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3183,'EPSG',3183,'PROJCS["GR96 / UTM zone 23N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3183"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3184 : GR96 / UTM zone 24N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3184,'EPSG',3184,'PROJCS["GR96 / UTM zone 24N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3184"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3185 : GR96 / UTM zone 25N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3185,'EPSG',3185,'PROJCS["GR96 / UTM zone 25N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3185"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3186 : GR96 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3186,'EPSG',3186,'PROJCS["GR96 / UTM zone 26N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3186"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3187 : GR96 / UTM zone 27N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3187,'EPSG',3187,'PROJCS["GR96 / UTM zone 27N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3187"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3188 : GR96 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3188,'EPSG',3188,'PROJCS["GR96 / UTM zone 28N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3188"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3189 : GR96 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3189,'EPSG',3189,'PROJCS["GR96 / UTM zone 29N",GEOGCS["GR96",DATUM["Greenland_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6747"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4747"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3189"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3190 : LGD2006 / Libya TM zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3190,'EPSG',3190,'PROJCS["LGD2006 / Libya TM zone 5",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3190"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3191 : LGD2006 / Libya TM zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3191,'EPSG',3191,'PROJCS["LGD2006 / Libya TM zone 6",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3191"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3192 : LGD2006 / Libya TM zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3192,'EPSG',3192,'PROJCS["LGD2006 / Libya TM zone 7",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3192"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3193 : LGD2006 / Libya TM zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3193,'EPSG',3193,'PROJCS["LGD2006 / Libya TM zone 8",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3193"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3194 : LGD2006 / Libya TM zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3194,'EPSG',3194,'PROJCS["LGD2006 / Libya TM zone 9",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3194"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3195 : LGD2006 / Libya TM zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3195,'EPSG',3195,'PROJCS["LGD2006 / Libya TM zone 10",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3195"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3196 : LGD2006 / Libya TM zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3196,'EPSG',3196,'PROJCS["LGD2006 / Libya TM zone 11",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3196"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3197 : LGD2006 / Libya TM zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3197,'EPSG',3197,'PROJCS["LGD2006 / Libya TM zone 12",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3197"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3198 : LGD2006 / Libya TM zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3198,'EPSG',3198,'PROJCS["LGD2006 / Libya TM zone 13",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3198"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3199 : LGD2006 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3199,'EPSG',3199,'PROJCS["LGD2006 / UTM zone 32N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3199"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3200 : FD58 / Iraq zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3200,'EPSG',3200,'PROJCS["FD58 / Iraq zone",GEOGCS["FD58",DATUM["Final_Datum_1958",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-239.1,-170.02,397.5,0,0,0,0],AUTHORITY["EPSG","6132"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4132"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9987864078],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1166200],AUTHORITY["EPSG","3200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-239.1,-170.02,397.5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3201 : LGD2006 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3201,'EPSG',3201,'PROJCS["LGD2006 / UTM zone 33N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3201"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3202 : LGD2006 / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3202,'EPSG',3202,'PROJCS["LGD2006 / UTM zone 34N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3202"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3203 : LGD2006 / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3203,'EPSG',3203,'PROJCS["LGD2006 / UTM zone 35N",GEOGCS["LGD2006",DATUM["Libyan_Geodetic_Datum_2006",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-208.406,-109.878,-2.5764,0,0,0,0],AUTHORITY["EPSG","6754"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4754"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3203"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3204 : WGS 84 / SCAR IMW SP19-20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3204,'EPSG',3204,'PROJCS["WGS 84 / SCAR IMW SP19-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-60.66666666666666],PARAMETER["standard_parallel_2",-63.33333333333334],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3204"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3205 : WGS 84 / SCAR IMW SP21-22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3205,'EPSG',3205,'PROJCS["WGS 84 / SCAR IMW SP21-22",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-60.66666666666666],PARAMETER["standard_parallel_2",-63.33333333333334],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3205"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3206 : WGS 84 / SCAR IMW SP23-24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3206,'EPSG',3206,'PROJCS["WGS 84 / SCAR IMW SP23-24",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-60.66666666666666],PARAMETER["standard_parallel_2",-63.33333333333334],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-42],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3206"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3207 : WGS 84 / SCAR IMW SQ01-02 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3207,'EPSG',3207,'PROJCS["WGS 84 / SCAR IMW SQ01-02",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-174],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3207"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3208 : WGS 84 / SCAR IMW SQ19-20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3208,'EPSG',3208,'PROJCS["WGS 84 / SCAR IMW SQ19-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3208"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3209 : WGS 84 / SCAR IMW SQ21-22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3209,'EPSG',3209,'PROJCS["WGS 84 / SCAR IMW SQ21-22",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3209"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3210 : WGS 84 / SCAR IMW SQ37-38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3210,'EPSG',3210,'PROJCS["WGS 84 / SCAR IMW SQ37-38",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",42],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3210"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3211 : WGS 84 / SCAR IMW SQ39-40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3211,'EPSG',3211,'PROJCS["WGS 84 / SCAR IMW SQ39-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3211"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3212 : WGS 84 / SCAR IMW SQ41-42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3212,'EPSG',3212,'PROJCS["WGS 84 / SCAR IMW SQ41-42",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3212"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3213 : WGS 84 / SCAR IMW SQ43-44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3213,'EPSG',3213,'PROJCS["WGS 84 / SCAR IMW SQ43-44",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",78],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3213"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3214 : WGS 84 / SCAR IMW SQ45-46 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3214,'EPSG',3214,'PROJCS["WGS 84 / SCAR IMW SQ45-46",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3214"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3215 : WGS 84 / SCAR IMW SQ47-48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3215,'EPSG',3215,'PROJCS["WGS 84 / SCAR IMW SQ47-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",102],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3215"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3216 : WGS 84 / SCAR IMW SQ49-50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3216,'EPSG',3216,'PROJCS["WGS 84 / SCAR IMW SQ49-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",114],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3216"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3217 : WGS 84 / SCAR IMW SQ51-52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3217,'EPSG',3217,'PROJCS["WGS 84 / SCAR IMW SQ51-52",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",126],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3217"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3218 : WGS 84 / SCAR IMW SQ53-54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3218,'EPSG',3218,'PROJCS["WGS 84 / SCAR IMW SQ53-54",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",138],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3218"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3219 : WGS 84 / SCAR IMW SQ55-56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3219,'EPSG',3219,'PROJCS["WGS 84 / SCAR IMW SQ55-56",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",150],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3219"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3220 : WGS 84 / SCAR IMW SQ57-58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3220,'EPSG',3220,'PROJCS["WGS 84 / SCAR IMW SQ57-58",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-64.66666666666667],PARAMETER["standard_parallel_2",-67.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",162],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3221 : WGS 84 / SCAR IMW SR13-14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3221,'EPSG',3221,'PROJCS["WGS 84 / SCAR IMW SR13-14",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-102],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3221"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3222 : WGS 84 / SCAR IMW SR15-16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3222,'EPSG',3222,'PROJCS["WGS 84 / SCAR IMW SR15-16",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3222"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3223 : WGS 84 / SCAR IMW SR17-18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3223,'EPSG',3223,'PROJCS["WGS 84 / SCAR IMW SR17-18",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-78],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3223"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3224 : WGS 84 / SCAR IMW SR19-20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3224,'EPSG',3224,'PROJCS["WGS 84 / SCAR IMW SR19-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3224"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3225 : WGS 84 / SCAR IMW SR27-28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3225,'EPSG',3225,'PROJCS["WGS 84 / SCAR IMW SR27-28",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-18],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3225"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3226 : WGS 84 / SCAR IMW SR29-30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3226,'EPSG',3226,'PROJCS["WGS 84 / SCAR IMW SR29-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-6],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3226"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3227 : WGS 84 / SCAR IMW SR31-32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3227,'EPSG',3227,'PROJCS["WGS 84 / SCAR IMW SR31-32",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",6],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3227"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3228 : WGS 84 / SCAR IMW SR33-34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3228,'EPSG',3228,'PROJCS["WGS 84 / SCAR IMW SR33-34",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",18],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3228"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3229 : WGS 84 / SCAR IMW SR35-36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3229,'EPSG',3229,'PROJCS["WGS 84 / SCAR IMW SR35-36",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",30],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3229"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3230 : WGS 84 / SCAR IMW SR37-38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3230,'EPSG',3230,'PROJCS["WGS 84 / SCAR IMW SR37-38",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",42],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3230"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3231 : WGS 84 / SCAR IMW SR39-40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3231,'EPSG',3231,'PROJCS["WGS 84 / SCAR IMW SR39-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",54],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3231"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3232 : WGS 84 / SCAR IMW SR41-42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3232,'EPSG',3232,'PROJCS["WGS 84 / SCAR IMW SR41-42",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",66],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3232"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3233 : WGS 84 / SCAR IMW SR43-44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3233,'EPSG',3233,'PROJCS["WGS 84 / SCAR IMW SR43-44",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",78],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3233"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3234 : WGS 84 / SCAR IMW SR45-46 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3234,'EPSG',3234,'PROJCS["WGS 84 / SCAR IMW SR45-46",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3234"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3235 : WGS 84 / SCAR IMW SR47-48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3235,'EPSG',3235,'PROJCS["WGS 84 / SCAR IMW SR47-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",102],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3235"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3236 : WGS 84 / SCAR IMW SR49-50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3236,'EPSG',3236,'PROJCS["WGS 84 / SCAR IMW SR49-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",114],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3236"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3237 : WGS 84 / SCAR IMW SR51-52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3237,'EPSG',3237,'PROJCS["WGS 84 / SCAR IMW SR51-52",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",126],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3237"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3238 : WGS 84 / SCAR IMW SR53-54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3238,'EPSG',3238,'PROJCS["WGS 84 / SCAR IMW SR53-54",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",138],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3238"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3239 : WGS 84 / SCAR IMW SR55-56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3239,'EPSG',3239,'PROJCS["WGS 84 / SCAR IMW SR55-56",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",150],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3239"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3240 : WGS 84 / SCAR IMW SR57-58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3240,'EPSG',3240,'PROJCS["WGS 84 / SCAR IMW SR57-58",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",162],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3240"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3241 : WGS 84 / SCAR IMW SR59-60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3241,'EPSG',3241,'PROJCS["WGS 84 / SCAR IMW SR59-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-68.66666666666667],PARAMETER["standard_parallel_2",-71.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",174],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3241"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3242 : WGS 84 / SCAR IMW SS04-06 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3242,'EPSG',3242,'PROJCS["WGS 84 / SCAR IMW SS04-06",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-153],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3242"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3243 : WGS 84 / SCAR IMW SS07-09 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3243,'EPSG',3243,'PROJCS["WGS 84 / SCAR IMW SS07-09",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-135],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3243"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3244 : WGS 84 / SCAR IMW SS10-12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3244,'EPSG',3244,'PROJCS["WGS 84 / SCAR IMW SS10-12",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-117],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3244"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3245 : WGS 84 / SCAR IMW SS13-15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3245,'EPSG',3245,'PROJCS["WGS 84 / SCAR IMW SS13-15",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-99],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3245"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3246 : WGS 84 / SCAR IMW SS16-18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3246,'EPSG',3246,'PROJCS["WGS 84 / SCAR IMW SS16-18",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-81],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3246"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3247 : WGS 84 / SCAR IMW SS19-21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3247,'EPSG',3247,'PROJCS["WGS 84 / SCAR IMW SS19-21",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3247"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3248 : WGS 84 / SCAR IMW SS25-27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3248,'EPSG',3248,'PROJCS["WGS 84 / SCAR IMW SS25-27",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-27],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3248"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3249 : WGS 84 / SCAR IMW SS28-30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3249,'EPSG',3249,'PROJCS["WGS 84 / SCAR IMW SS28-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-9],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3249"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3250 : WGS 84 / SCAR IMW SS31-33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3250,'EPSG',3250,'PROJCS["WGS 84 / SCAR IMW SS31-33",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",9],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3250"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3251 : WGS 84 / SCAR IMW SS34-36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3251,'EPSG',3251,'PROJCS["WGS 84 / SCAR IMW SS34-36",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",27],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3251"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3252 : WGS 84 / SCAR IMW SS37-39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3252,'EPSG',3252,'PROJCS["WGS 84 / SCAR IMW SS37-39",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",45],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3252"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3253 : WGS 84 / SCAR IMW SS40-42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3253,'EPSG',3253,'PROJCS["WGS 84 / SCAR IMW SS40-42",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",63],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3253"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3254 : WGS 84 / SCAR IMW SS43-45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3254,'EPSG',3254,'PROJCS["WGS 84 / SCAR IMW SS43-45",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",81],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3254"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3255 : WGS 84 / SCAR IMW SS46-48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3255,'EPSG',3255,'PROJCS["WGS 84 / SCAR IMW SS46-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",99],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3255"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3256 : WGS 84 / SCAR IMW SS49-51 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3256,'EPSG',3256,'PROJCS["WGS 84 / SCAR IMW SS49-51",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",117],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3256"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3257 : WGS 84 / SCAR IMW SS52-54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3257,'EPSG',3257,'PROJCS["WGS 84 / SCAR IMW SS52-54",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",135],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3257"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3258 : WGS 84 / SCAR IMW SS55-57 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3258,'EPSG',3258,'PROJCS["WGS 84 / SCAR IMW SS55-57",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",153],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3259 : WGS 84 / SCAR IMW SS58-60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3259,'EPSG',3259,'PROJCS["WGS 84 / SCAR IMW SS58-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-72.66666666666667],PARAMETER["standard_parallel_2",-75.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",171],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3259"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3260 : WGS 84 / SCAR IMW ST01-04 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3260,'EPSG',3260,'PROJCS["WGS 84 / SCAR IMW ST01-04",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-168],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3260"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3261 : WGS 84 / SCAR IMW ST05-08 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3261,'EPSG',3261,'PROJCS["WGS 84 / SCAR IMW ST05-08",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-144],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3261"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3262 : WGS 84 / SCAR IMW ST09-12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3262,'EPSG',3262,'PROJCS["WGS 84 / SCAR IMW ST09-12",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3262"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3263 : WGS 84 / SCAR IMW ST13-16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3263,'EPSG',3263,'PROJCS["WGS 84 / SCAR IMW ST13-16",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-96],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3263"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3264 : WGS 84 / SCAR IMW ST17-20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3264,'EPSG',3264,'PROJCS["WGS 84 / SCAR IMW ST17-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3264"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3265 : WGS 84 / SCAR IMW ST21-24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3265,'EPSG',3265,'PROJCS["WGS 84 / SCAR IMW ST21-24",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-48],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3265"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3266 : WGS 84 / SCAR IMW ST25-28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3266,'EPSG',3266,'PROJCS["WGS 84 / SCAR IMW ST25-28",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-24],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3266"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3267 : WGS 84 / SCAR IMW ST29-32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3267,'EPSG',3267,'PROJCS["WGS 84 / SCAR IMW ST29-32",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3267"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3268 : WGS 84 / SCAR IMW ST33-36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3268,'EPSG',3268,'PROJCS["WGS 84 / SCAR IMW ST33-36",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",24],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3268"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3269 : WGS 84 / SCAR IMW ST37-40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3269,'EPSG',3269,'PROJCS["WGS 84 / SCAR IMW ST37-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",48],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3269"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3270 : WGS 84 / SCAR IMW ST41-44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3270,'EPSG',3270,'PROJCS["WGS 84 / SCAR IMW ST41-44",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",72],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3270"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3271 : WGS 84 / SCAR IMW ST45-48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3271,'EPSG',3271,'PROJCS["WGS 84 / SCAR IMW ST45-48",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",96],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3271"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3272 : WGS 84 / SCAR IMW ST49-52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3272,'EPSG',3272,'PROJCS["WGS 84 / SCAR IMW ST49-52",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",120],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3272"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3273 : WGS 84 / SCAR IMW ST53-56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3273,'EPSG',3273,'PROJCS["WGS 84 / SCAR IMW ST53-56",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",144],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3273"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3274 : WGS 84 / SCAR IMW ST57-60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3274,'EPSG',3274,'PROJCS["WGS 84 / SCAR IMW ST57-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",168],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3274"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3275 : WGS 84 / SCAR IMW SU01-05 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3275,'EPSG',3275,'PROJCS["WGS 84 / SCAR IMW SU01-05",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3275"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3276 : WGS 84 / SCAR IMW SU06-10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3276,'EPSG',3276,'PROJCS["WGS 84 / SCAR IMW SU06-10",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3276"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3277 : WGS 84 / SCAR IMW SU11-15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3277,'EPSG',3277,'PROJCS["WGS 84 / SCAR IMW SU11-15",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3277"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3278 : WGS 84 / SCAR IMW SU16-20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3278,'EPSG',3278,'PROJCS["WGS 84 / SCAR IMW SU16-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3278"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3279 : WGS 84 / SCAR IMW SU21-25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3279,'EPSG',3279,'PROJCS["WGS 84 / SCAR IMW SU21-25",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3279"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3280 : WGS 84 / SCAR IMW SU26-30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3280,'EPSG',3280,'PROJCS["WGS 84 / SCAR IMW SU26-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3280"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3281 : WGS 84 / SCAR IMW SU31-35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3281,'EPSG',3281,'PROJCS["WGS 84 / SCAR IMW SU31-35",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3281"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3282 : WGS 84 / SCAR IMW SU36-40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3282,'EPSG',3282,'PROJCS["WGS 84 / SCAR IMW SU36-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3282"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3283 : WGS 84 / SCAR IMW SU41-45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3283,'EPSG',3283,'PROJCS["WGS 84 / SCAR IMW SU41-45",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3283"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3284 : WGS 84 / SCAR IMW SU46-50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3284,'EPSG',3284,'PROJCS["WGS 84 / SCAR IMW SU46-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3284"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3285 : WGS 84 / SCAR IMW SU51-55 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3285,'EPSG',3285,'PROJCS["WGS 84 / SCAR IMW SU51-55",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3285"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3286 : WGS 84 / SCAR IMW SU56-60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3286,'EPSG',3286,'PROJCS["WGS 84 / SCAR IMW SU56-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3286"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3287 : WGS 84 / SCAR IMW SV01-10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3287,'EPSG',3287,'PROJCS["WGS 84 / SCAR IMW SV01-10",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3287"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3288 : WGS 84 / SCAR IMW SV11-20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3288,'EPSG',3288,'PROJCS["WGS 84 / SCAR IMW SV11-20",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3288"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3289 : WGS 84 / SCAR IMW SV21-30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3289,'EPSG',3289,'PROJCS["WGS 84 / SCAR IMW SV21-30",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",-30],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3289"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3290 : WGS 84 / SCAR IMW SV31-40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3290,'EPSG',3290,'PROJCS["WGS 84 / SCAR IMW SV31-40",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3290"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3291 : WGS 84 / SCAR IMW SV41-50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3291,'EPSG',3291,'PROJCS["WGS 84 / SCAR IMW SV41-50",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3291"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3292 : WGS 84 / SCAR IMW SV51-60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3292,'EPSG',3292,'PROJCS["WGS 84 / SCAR IMW SV51-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3292"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3293 : WGS 84 / SCAR IMW SW01-60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3293,'EPSG',3293,'PROJCS["WGS 84 / SCAR IMW SW01-60",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-80.23861111111111],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3293"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3294 : WGS 84 / USGS Transantarctic Mountains --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3294,'EPSG',3294,'PROJCS["WGS 84 / USGS Transantarctic Mountains",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-78],PARAMETER["central_meridian",162],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3294"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3295 : Guam 1963 / Yap Islands --- -- (unable to translate) --- --- EPSG 3296 : RGPF / UTM zone 5S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3296,'EPSG',3296,'PROJCS["RGPF / UTM zone 5S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3296"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs '); --- --- EPSG 3297 : RGPF / UTM zone 6S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3297,'EPSG',3297,'PROJCS["RGPF / UTM zone 6S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3297"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs '); --- --- EPSG 3298 : RGPF / UTM zone 7S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3298,'EPSG',3298,'PROJCS["RGPF / UTM zone 7S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3298"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs '); --- --- EPSG 3299 : RGPF / UTM zone 8S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3299,'EPSG',3299,'PROJCS["RGPF / UTM zone 8S",GEOGCS["RGPF",DATUM["Reseau_Geodesique_de_la_Polynesie_Francaise",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093],AUTHORITY["EPSG","6687"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4687"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3299"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs '); --- --- EPSG 3300 : Estonian Coordinate System of 1992 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3300,'EPSG',3300,'PROJCS["Estonian Coordinate System of 1992",GEOGCS["EST92",DATUM["Estonia_1992",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014],AUTHORITY["EPSG","6133"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4133"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",59.33333333333334],PARAMETER["standard_parallel_2",58],PARAMETER["latitude_of_origin",57.51755393055556],PARAMETER["central_meridian",24],PARAMETER["false_easting",500000],PARAMETER["false_northing",6375000],AUTHORITY["EPSG","3300"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs '); --- --- EPSG 3301 : Estonian Coordinate System of 1997 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3301,'EPSG',3301,'PROJCS["Estonian Coordinate System of 1997",GEOGCS["EST97",DATUM["Estonia_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6180"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4180"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",59.33333333333334],PARAMETER["standard_parallel_2",58],PARAMETER["latitude_of_origin",57.51755393055556],PARAMETER["central_meridian",24],PARAMETER["false_easting",500000],PARAMETER["false_northing",6375000],AUTHORITY["EPSG","3301"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3302 : IGN63 Hiva Oa / UTM zone 7S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3302,'EPSG',3302,'PROJCS["IGN63 Hiva Oa / UTM zone 7S",GEOGCS["IGN63 Hiva Oa",DATUM["IGN63_Hiva_Oa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311],AUTHORITY["EPSG","6689"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4689"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3302"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +south +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +units=m +no_defs '); --- --- EPSG 3303 : Fatu Iva 72 / UTM zone 7S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3303,'EPSG',3303,'PROJCS["Fatu Iva 72 / UTM zone 7S",GEOGCS["Fatu Iva 72",DATUM["Fatu_Iva_72",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074],AUTHORITY["EPSG","6688"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4688"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3303"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs '); --- --- EPSG 3304 : Tahiti 79 / UTM zone 6S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3304,'EPSG',3304,'PROJCS["Tahiti 79 / UTM zone 6S",GEOGCS["Tahiti 79",DATUM["Tahiti_79",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6690"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4690"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3304"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +south +ellps=intl +units=m +no_defs '); --- --- EPSG 3305 : Moorea 87 / UTM zone 6S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3305,'EPSG',3305,'PROJCS["Moorea 87 / UTM zone 6S",GEOGCS["Moorea 87",DATUM["Moorea_87",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773],AUTHORITY["EPSG","6691"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4691"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3305"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs '); --- --- EPSG 3306 : Maupiti 83 / UTM zone 5S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3306,'EPSG',3306,'PROJCS["Maupiti 83 / UTM zone 5S",GEOGCS["Maupiti 83",DATUM["Maupiti_83",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[217.037,86.959,23.956,0,0,0,0],AUTHORITY["EPSG","6692"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4692"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3306"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3307 : Nakhl-e Ghanem / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3307,'EPSG',3307,'PROJCS["Nakhl-e Ghanem / UTM zone 39N",GEOGCS["Nakhl-e Ghanem",DATUM["Nakhl_e_Ghanem",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,-0.15,0.68,0,0,0,0],AUTHORITY["EPSG","6693"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4693"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3307"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3308 : GDA94 / NSW Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3308,'EPSG',3308,'PROJCS["GDA94 / NSW Lambert",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-30.75],PARAMETER["standard_parallel_2",-35.75],PARAMETER["latitude_of_origin",-33.25],PARAMETER["central_meridian",147],PARAMETER["false_easting",9300000],PARAMETER["false_northing",4500000],AUTHORITY["EPSG","3308"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3309 : NAD27 / California Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3309,'EPSG',3309,'PROJCS["NAD27 / California Albers",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3309"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3310 : NAD83 / California Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3310,'EPSG',3310,'PROJCS["NAD83 / California Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3310"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3311 : NAD83(HARN) / California Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3311,'EPSG',3311,'PROJCS["NAD83(HARN) / California Albers",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3311"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3312 : CSG67 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3312,'EPSG',3312,'PROJCS["CSG67 / UTM zone 21N",GEOGCS["CSG67",DATUM["Centre_Spatial_Guyanais_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-186,230,110,0,0,0,0],AUTHORITY["EPSG","6623"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4623"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3313 : RGFG95 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3313,'EPSG',3313,'PROJCS["RGFG95 / UTM zone 21N",GEOGCS["RGFG95",DATUM["Reseau_Geodesique_Francais_Guyane_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[2,2,-2,0,0,0,0],AUTHORITY["EPSG","6624"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4624"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3314 : Katanga 1955 / Katanga Lambert (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3314,'EPSG',3314,'PROJCS["Katanga 1955 / Katanga Lambert (deprecated)",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-6.5],PARAMETER["standard_parallel_2",-11.5],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3314"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3315 : Katanga 1955 / Katanga TM (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3315,'EPSG',3315,'PROJCS["Katanga 1955 / Katanga TM (deprecated)",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",26],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3315"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3316 : Kasai 1953 / Congo TM zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3316,'EPSG',3316,'PROJCS["Kasai 1953 / Congo TM zone 22",GEOGCS["Kasai 1953",DATUM["Kasai_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6696"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4696"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3316"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3317 : Kasai 1953 / Congo TM zone 24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3317,'EPSG',3317,'PROJCS["Kasai 1953 / Congo TM zone 24",GEOGCS["Kasai 1953",DATUM["Kasai_1953",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6696"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4696"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3317"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3318 : IGC 1962 / Congo TM zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3318,'EPSG',3318,'PROJCS["IGC 1962 / Congo TM zone 12",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3318"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3319 : IGC 1962 / Congo TM zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3319,'EPSG',3319,'PROJCS["IGC 1962 / Congo TM zone 14",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3319"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3320 : IGC 1962 / Congo TM zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3320,'EPSG',3320,'PROJCS["IGC 1962 / Congo TM zone 16",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3320"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3321 : IGC 1962 / Congo TM zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3321,'EPSG',3321,'PROJCS["IGC 1962 / Congo TM zone 18",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3321"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3322 : IGC 1962 / Congo TM zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3322,'EPSG',3322,'PROJCS["IGC 1962 / Congo TM zone 20",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3322"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3323 : IGC 1962 / Congo TM zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3323,'EPSG',3323,'PROJCS["IGC 1962 / Congo TM zone 22",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3323"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3324 : IGC 1962 / Congo TM zone 24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3324,'EPSG',3324,'PROJCS["IGC 1962 / Congo TM zone 24",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3324"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3325 : IGC 1962 / Congo TM zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3325,'EPSG',3325,'PROJCS["IGC 1962 / Congo TM zone 26",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3325"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3326 : IGC 1962 / Congo TM zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3326,'EPSG',3326,'PROJCS["IGC 1962 / Congo TM zone 28",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3326"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3327 : IGC 1962 / Congo TM zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3327,'EPSG',3327,'PROJCS["IGC 1962 / Congo TM zone 30",GEOGCS["IGC 1962 6th Parallel South",DATUM["IGC_1962_Arc_of_the_6th_Parallel_South",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6697"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4697"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3327"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3328 : Pulkovo 1942(58) / GUGiK-80 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3328,'EPSG',3328,'PROJCS["Pulkovo 1942(58) / GUGiK-80",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.16666666666666],PARAMETER["central_meridian",19.16666666666667],PARAMETER["scale_factor",0.999714],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3328"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3329 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3329,'EPSG',3329,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3329"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3330 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3330,'EPSG',3330,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3330"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3331 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3331,'EPSG',3331,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3331"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3332 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3332,'EPSG',3332,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3332"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3333 : Pulkovo 1942(58) / Gauss-Kruger zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3333,'EPSG',3333,'PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3333"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3334 : Pulkovo 1942(58) / Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3334,'EPSG',3334,'PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3334"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3335 : Pulkovo 1942(58) / Gauss-Kruger zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3335,'EPSG',3335,'PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3335"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3336 : IGN 1962 Kerguelen / UTM zone 42S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3336,'EPSG',3336,'PROJCS["IGN 1962 Kerguelen / UTM zone 42S",GEOGCS["IGN 1962 Kerguelen",DATUM["IGN_1962_Kerguelen",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[145,-187,103,0,0,0,0],AUTHORITY["EPSG","6698"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4698"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3336"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3337 : Le Pouce 1934 / Mauritius Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3337,'EPSG',3337,'PROJCS["Le Pouce 1934 / Mauritius Grid",GEOGCS["Le Pouce 1934",DATUM["Le_Pouce_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-770.1,158.4,-498.2,0,0,0,0],AUTHORITY["EPSG","6699"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4699"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",-20.19506944444445],PARAMETER["central_meridian",57.52182777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3337"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3338 : NAD83 / Alaska Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3338,'EPSG',3338,'PROJCS["NAD83 / Alaska Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",55],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_center",50],PARAMETER["longitude_of_center",-154],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3338"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3339 : IGCB 1955 / Congo TM zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3339,'EPSG',3339,'PROJCS["IGCB 1955 / Congo TM zone 12",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3339"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3340 : IGCB 1955 / Congo TM zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3340,'EPSG',3340,'PROJCS["IGCB 1955 / Congo TM zone 14",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3340"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3341 : IGCB 1955 / Congo TM zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3341,'EPSG',3341,'PROJCS["IGCB 1955 / Congo TM zone 16",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3341"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3342 : IGCB 1955 / UTM zone 33S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3342,'EPSG',3342,'PROJCS["IGCB 1955 / UTM zone 33S",GEOGCS["IGCB 1955",DATUM["Institut_Geographique_du_Congo_Belge_1955",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-79.9,-158,-168.9,0,0,0,0],AUTHORITY["EPSG","6701"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4701"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3342"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3343 : Mauritania 1999 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3343,'EPSG',3343,'PROJCS["Mauritania 1999 / UTM zone 28N",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3343"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3344 : Mauritania 1999 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3344,'EPSG',3344,'PROJCS["Mauritania 1999 / UTM zone 29N",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3344"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3345 : Mauritania 1999 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3345,'EPSG',3345,'PROJCS["Mauritania 1999 / UTM zone 30N",GEOGCS["Mauritania 1999",DATUM["Mauritania_1999",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6702"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4702"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3345"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3346 : LKS94 / Lithuania TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3346,'EPSG',3346,'PROJCS["LKS94 / Lithuania TM",GEOGCS["LKS94",DATUM["Lithuania_1994_ETRS89",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6126"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4669"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3346"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3347 : NAD83 / Statistics Canada Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3347,'EPSG',3347,'PROJCS["NAD83 / Statistics Canada Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",63.390675],PARAMETER["central_meridian",-91.86666666666666],PARAMETER["false_easting",6200000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3347"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3348 : NAD83(CSRS) / Statistics Canada Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3348,'EPSG',3348,'PROJCS["NAD83(CSRS) / Statistics Canada Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",63.390675],PARAMETER["central_meridian",-91.86666666666666],PARAMETER["false_easting",6200000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3349 : WGS 84 / PDC Mercator (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3349,'EPSG',3349,'PROJCS["WGS 84 / PDC Mercator (deprecated)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3350 : Pulkovo 1942 / CS63 zone C0 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3350,'EPSG',3350,'PROJCS["Pulkovo 1942 / CS63 zone C0",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1],PARAMETER["central_meridian",21.95],PARAMETER["scale_factor",1],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3350"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 3351 : Pulkovo 1942 / CS63 zone C1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3351,'EPSG',3351,'PROJCS["Pulkovo 1942 / CS63 zone C1",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1],PARAMETER["central_meridian",24.95],PARAMETER["scale_factor",1],PARAMETER["false_easting",1250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3351"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 3352 : Pulkovo 1942 / CS63 zone C2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3352,'EPSG',3352,'PROJCS["Pulkovo 1942 / CS63 zone C2",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.1],PARAMETER["central_meridian",27.95],PARAMETER["scale_factor",1],PARAMETER["false_easting",2250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3352"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 3353 : Mhast (onshore) / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3353,'EPSG',3353,'PROJCS["Mhast (onshore) / UTM zone 32S",GEOGCS["Mhast (onshore)",DATUM["Mhast_onshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6704"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4704"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs '); --- --- EPSG 3354 : Mhast (offshore) / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3354,'EPSG',3354,'PROJCS["Mhast (offshore) / UTM zone 32S",GEOGCS["Mhast (offshore)",DATUM["Mhast_offshore",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6705"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4705"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs '); --- --- EPSG 3355 : Egypt Gulf of Suez S-650 TL / Red Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3355,'EPSG',3355,'PROJCS["Egypt Gulf of Suez S-650 TL / Red Belt",GEOGCS["Egypt Gulf of Suez S-650 TL",DATUM["Egypt_Gulf_of_Suez_S_650_TL",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-146.21,112.63,4.05,0,0,0,0],AUTHORITY["EPSG","6706"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4706"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",615000],PARAMETER["false_northing",810000],AUTHORITY["EPSG","3355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3356 : Grand Cayman 1959 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3356,'EPSG',3356,'PROJCS["Grand Cayman 1959 / UTM zone 17N",GEOGCS["Grand Cayman 1959",DATUM["Grand_Cayman_1959",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[67.8,106.1,138.8,0,0,0,0],AUTHORITY["EPSG","6723"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4723"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3357 : Little Cayman 1961 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3357,'EPSG',3357,'PROJCS["Little Cayman 1961 / UTM zone 17N",GEOGCS["Little Cayman 1961",DATUM["Little_Cayman_1961",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[42,124,147,0,0,0,0],AUTHORITY["EPSG","6726"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4726"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=clrk66 +towgs84=42,124,147,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3358 : NAD83(HARN) / North Carolina --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3358,'EPSG',3358,'PROJCS["NAD83(HARN) / North Carolina",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",609601.22],PARAMETER["false_northing",0],AUTHORITY["EPSG","3358"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3359 : NAD83(HARN) / North Carolina (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3359,'EPSG',3359,'PROJCS["NAD83(HARN) / North Carolina (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000004.000008],PARAMETER["false_northing",0],AUTHORITY["EPSG","3359"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3360 : NAD83(HARN) / South Carolina --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3360,'EPSG',3360,'PROJCS["NAD83(HARN) / South Carolina",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",609600],PARAMETER["false_northing",0],AUTHORITY["EPSG","3360"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3361 : NAD83(HARN) / South Carolina (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3361,'EPSG',3361,'PROJCS["NAD83(HARN) / South Carolina (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3361"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3362 : NAD83(HARN) / Pennsylvania North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3362,'EPSG',3362,'PROJCS["NAD83(HARN) / Pennsylvania North",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3362"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3363 : NAD83(HARN) / Pennsylvania North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3363,'EPSG',3363,'PROJCS["NAD83(HARN) / Pennsylvania North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3363"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3364 : NAD83(HARN) / Pennsylvania South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3364,'EPSG',3364,'PROJCS["NAD83(HARN) / Pennsylvania South",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3364"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3365 : NAD83(HARN) / Pennsylvania South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3365,'EPSG',3365,'PROJCS["NAD83(HARN) / Pennsylvania South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3365"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3366 : Hong Kong 1963 Grid System (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3366,'EPSG',3366,'PROJCS["Hong Kong 1963 Grid System (deprecated)",GEOGCS["Hong Kong 1963",DATUM["Hong_Kong_1963",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6738"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4738"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",22.31213333333334],PARAMETER["central_meridian",114.1785555555556],PARAMETER["false_easting",40243.57775604237],PARAMETER["false_northing",19069.93351512578],AUTHORITY["EPSG","3366"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs '); --- --- EPSG 3367 : IGN Astro 1960 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3367,'EPSG',3367,'PROJCS["IGN Astro 1960 / UTM zone 28N",GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3367"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3368 : IGN Astro 1960 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3368,'EPSG',3368,'PROJCS["IGN Astro 1960 / UTM zone 29N",GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3368"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3369 : IGN Astro 1960 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3369,'EPSG',3369,'PROJCS["IGN Astro 1960 / UTM zone 30N",GEOGCS["IGN Astro 1960",DATUM["IGN_Astro_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6700"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4700"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3369"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3370 : NAD27 / UTM zone 59N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3370,'EPSG',3370,'PROJCS["NAD27 / UTM zone 59N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3370"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3371 : NAD27 / UTM zone 60N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3371,'EPSG',3371,'PROJCS["NAD27 / UTM zone 60N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3371"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3372 : NAD83 / UTM zone 59N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3372,'EPSG',3372,'PROJCS["NAD83 / UTM zone 59N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3372"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3373 : NAD83 / UTM zone 60N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3373,'EPSG',3373,'PROJCS["NAD83 / UTM zone 60N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3373"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3374 : FD54 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3374,'EPSG',3374,'PROJCS["FD54 / UTM zone 29N",GEOGCS["FD54",DATUM["Faroe_Datum_1954",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6741"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4741"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3374"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=intl +units=m +no_defs '); --- --- EPSG 3375 : GDM2000 / Peninsula RSO --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3375,'EPSG',3375,'PROJCS["GDM2000 / Peninsula RSO",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257964666666],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",804671],PARAMETER["false_northing",0],AUTHORITY["EPSG","3375"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +gamma=323.1301023611111 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3376 : GDM2000 / East Malaysia BRSO --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3376,'EPSG',3376,'PROJCS["GDM2000 / East Malaysia BRSO",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31580995],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3376"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3377 : GDM2000 / Johor Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3377,'EPSG',3377,'PROJCS["GDM2000 / Johor Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",2.121679744444445],PARAMETER["central_meridian",103.4279362361111],PARAMETER["false_easting",-14810.562],PARAMETER["false_northing",8758.32],AUTHORITY["EPSG","3377"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3378 : GDM2000 / Sembilan and Melaka Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3378,'EPSG',3378,'PROJCS["GDM2000 / Sembilan and Melaka Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",2.682347636111111],PARAMETER["central_meridian",101.9749050416667],PARAMETER["false_easting",3673.785],PARAMETER["false_northing",-4240.573],AUTHORITY["EPSG","3378"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3379 : GDM2000 / PahangGrid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3379,'EPSG',3379,'PROJCS["GDM2000 / PahangGrid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",3.769388088888889],PARAMETER["central_meridian",102.3682989833333],PARAMETER["false_easting",-7368.228],PARAMETER["false_northing",6485.858],AUTHORITY["EPSG","3379"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3380 : GDM2000 / Selangor Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3380,'EPSG',3380,'PROJCS["GDM2000 / Selangor Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",3.68464905],PARAMETER["central_meridian",101.3891079138889],PARAMETER["false_easting",-34836.161],PARAMETER["false_northing",56464.049],AUTHORITY["EPSG","3380"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3381 : GDM2000 / Terengganu Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3381,'EPSG',3381,'PROJCS["GDM2000 / Terengganu Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",4.9762852],PARAMETER["central_meridian",103.070275625],PARAMETER["false_easting",19594.245],PARAMETER["false_northing",3371.895],AUTHORITY["EPSG","3381"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3382 : GDM2000 / Pinang Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3382,'EPSG',3382,'PROJCS["GDM2000 / Pinang Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",5.421517541666667],PARAMETER["central_meridian",100.3443769638889],PARAMETER["false_easting",-23.414],PARAMETER["false_northing",62.283],AUTHORITY["EPSG","3382"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3383 : GDM2000 / Kedah and Perlis Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3383,'EPSG',3383,'PROJCS["GDM2000 / Kedah and Perlis Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",5.964672713888889],PARAMETER["central_meridian",100.6363711111111],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3383"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3384 : GDM2000 / Perak Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3384,'EPSG',3384,'PROJCS["GDM2000 / Perak Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",4.859063022222222],PARAMETER["central_meridian",100.8154105861111],PARAMETER["false_easting",-1.769],PARAMETER["false_northing",133454.779],AUTHORITY["EPSG","3384"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3385 : GDM2000 / Kelantan Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3385,'EPSG',3385,'PROJCS["GDM2000 / Kelantan Grid",GEOGCS["GDM2000",DATUM["Geodetic_Datum_of_Malaysia_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6742"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4742"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",5.972543658333334],PARAMETER["central_meridian",102.2952416694444],PARAMETER["false_easting",13227.851],PARAMETER["false_northing",8739.894],AUTHORITY["EPSG","3385"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 3386 : KKJ / Finland zone 0 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3386,'EPSG',3386,'PROJCS["KKJ / Finland zone 0",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3386"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs '); --- --- EPSG 3387 : KKJ / Finland zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3387,'EPSG',3387,'PROJCS["KKJ / Finland zone 5",GEOGCS["KKJ",DATUM["Kartastokoordinaattijarjestelma_1966",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496],AUTHORITY["EPSG","6123"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4123"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3387"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs '); --- --- EPSG 3388 : Pulkovo 1942 / Caspian Sea Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3388,'EPSG',3388,'PROJCS["Pulkovo 1942 / Caspian Sea Mercator",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_2SP"],PARAMETER["standard_parallel_1",42],PARAMETER["central_meridian",51],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3388"],AXIS["none",NORTH],AXIS["none",EAST]]','+proj=merc +lon_0=51 +lat_ts=42 +x_0=0 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 3389 : Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3389,'EPSG',3389,'PROJCS["Pulkovo 1942 / 3-degree Gauss-Kruger zone 60",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3389"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 3390 : Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3390,'EPSG',3390,'PROJCS["Pulkovo 1995 / 3-degree Gauss-Kruger zone 60",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",180],PARAMETER["scale_factor",1],PARAMETER["false_easting",60500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3390"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 3391 : Karbala 1979 / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3391,'EPSG',3391,'PROJCS["Karbala 1979 / UTM zone 37N",GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3391"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3392 : Karbala 1979 / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3392,'EPSG',3392,'PROJCS["Karbala 1979 / UTM zone 38N",GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3392"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3393 : Karbala 1979 / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3393,'EPSG',3393,'PROJCS["Karbala 1979 / UTM zone 39N",GEOGCS["Karbala 1979",DATUM["Karbala_1979",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[84.1,-320.1,218.7,0,0,0,0],AUTHORITY["EPSG","6743"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4743"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3393"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3394 : Nahrwan 1934 / Iraq zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3394,'EPSG',3394,'PROJCS["Nahrwan 1934 / Iraq zone",GEOGCS["Nahrwan 1934",DATUM["Nahrwan_1934",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],AUTHORITY["EPSG","6744"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4744"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9987864078],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1166200],AUTHORITY["EPSG","3394"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs '); --- --- EPSG 3395 : WGS 84 / World Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3395,'EPSG',3395,'PROJCS["WGS 84 / World Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3395"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3396 : PD/83 / 3-degree Gauss-Kruger zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3396,'EPSG',3396,'PROJCS["PD/83 / 3-degree Gauss-Kruger zone 3",GEOGCS["PD/83",DATUM["Potsdam_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6746"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4746"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3396"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3397 : PD/83 / 3-degree Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3397,'EPSG',3397,'PROJCS["PD/83 / 3-degree Gauss-Kruger zone 4",GEOGCS["PD/83",DATUM["Potsdam_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6746"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4746"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3397"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3398 : RD/83 / 3-degree Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3398,'EPSG',3398,'PROJCS["RD/83 / 3-degree Gauss-Kruger zone 4",GEOGCS["RD/83",DATUM["Rauenberg_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6745"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4745"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3398"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3399 : RD/83 / 3-degree Gauss-Kruger zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3399,'EPSG',3399,'PROJCS["RD/83 / 3-degree Gauss-Kruger zone 5",GEOGCS["RD/83",DATUM["Rauenberg_Datum_83",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6745"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4745"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3399"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 3400 : NAD83 / Alberta 10-TM (Forest) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3400,'EPSG',3400,'PROJCS["NAD83 / Alberta 10-TM (Forest)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3400"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3401 : NAD83 / Alberta 10-TM (Resource) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3401,'EPSG',3401,'PROJCS["NAD83 / Alberta 10-TM (Resource)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3401"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3402 : NAD83(CSRS) / Alberta 10-TM (Forest) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3402,'EPSG',3402,'PROJCS["NAD83(CSRS) / Alberta 10-TM (Forest)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3402"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3403 : NAD83(CSRS) / Alberta 10-TM (Resource) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3403,'EPSG',3403,'PROJCS["NAD83(CSRS) / Alberta 10-TM (Resource)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-115],PARAMETER["scale_factor",0.9992],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3403"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3404 : NAD83(HARN) / North Carolina (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3404,'EPSG',3404,'PROJCS["NAD83(HARN) / North Carolina (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3404"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3405 : VN-2000 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3405,'EPSG',3405,'PROJCS["VN-2000 / UTM zone 48N",GEOGCS["VN-2000",DATUM["Vietnam_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6756"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4756"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3405"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs '); --- --- EPSG 3406 : VN-2000 / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3406,'EPSG',3406,'PROJCS["VN-2000 / UTM zone 49N",GEOGCS["VN-2000",DATUM["Vietnam_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6756"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4756"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3406"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs '); --- --- EPSG 3407 : Hong Kong 1963 Grid System --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3407,'EPSG',3407,'PROJCS["Hong Kong 1963 Grid System",GEOGCS["Hong Kong 1963",DATUM["Hong_Kong_1963",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],AUTHORITY["EPSG","6738"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4738"]],UNIT["Clarke''s foot",0.3047972654,AUTHORITY["EPSG","9005"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",22.31213333333334],PARAMETER["central_meridian",114.1785555555556],PARAMETER["false_easting",132033.92],PARAMETER["false_northing",62565.96],AUTHORITY["EPSG","3407"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs '); --- --- EPSG 3408 : unnamed --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3408,'EPSG',3408,'PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6371228,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","3408"]]','+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs '); --- --- EPSG 3409 : unnamed --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3409,'EPSG',3409,'PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6371228,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",-90],PARAMETER["longitude_of_center",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","3409"]]','+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs '); --- --- EPSG 3410 : NSIDC EASE-Grid Global --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3410,'EPSG',3410,'PROJCS["NSIDC EASE-Grid Global",GEOGCS["Unspecified datum based upon the International 1924 Authalic Sphere",DATUM["Not_specified_based_on_International_1924_Authalic_Sphere",SPHEROID["International 1924 Authalic Sphere",6371228,0,AUTHORITY["EPSG","7057"]],AUTHORITY["EPSG","6053"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4053"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["standard_parallel_1",30],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3410"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs '); --- --- EPSG 3411 : NSIDC Sea Ice Polar Stereographic North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3411,'EPSG',3411,'PROJCS["NSIDC Sea Ice Polar Stereographic North",GEOGCS["Unspecified datum based upon the Hughes 1980 ellipsoid",DATUM["Not_specified_based_on_Hughes_1980_ellipsoid",SPHEROID["Hughes 1980",6378273,298.279411123061,AUTHORITY["EPSG","7058"]],AUTHORITY["EPSG","6054"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4054"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",70],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3411"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs '); --- --- EPSG 3412 : NSIDC Sea Ice Polar Stereographic South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3412,'EPSG',3412,'PROJCS["NSIDC Sea Ice Polar Stereographic South",GEOGCS["Unspecified datum based upon the Hughes 1980 ellipsoid",DATUM["Not_specified_based_on_Hughes_1980_ellipsoid",SPHEROID["Hughes 1980",6378273,298.279411123061,AUTHORITY["EPSG","7058"]],AUTHORITY["EPSG","6054"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4054"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-70],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3412"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs '); --- --- EPSG 3413 : WGS 84 / NSIDC Sea Ice Polar Stereographic North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3413,'EPSG',3413,'PROJCS["WGS 84 / NSIDC Sea Ice Polar Stereographic North",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",70],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3413"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3414 : SVY21 / Singapore TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3414,'EPSG',3414,'PROJCS["SVY21 / Singapore TM",GEOGCS["SVY21",DATUM["SVY21",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6757"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4757"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",1.366666666666667],PARAMETER["central_meridian",103.8333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",28001.642],PARAMETER["false_northing",38744.572],AUTHORITY["EPSG","3414"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs '); --- --- EPSG 3415 : WGS 72BE / South China Sea Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3415,'EPSG',3415,'PROJCS["WGS 72BE / South China Sea Lambert",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18],PARAMETER["standard_parallel_2",24],PARAMETER["latitude_of_origin",21],PARAMETER["central_meridian",114],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3415"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 3416 : ETRS89 / Austria Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3416,'EPSG',3416,'PROJCS["ETRS89 / Austria Lambert",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",47.5],PARAMETER["central_meridian",13.33333333333333],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","3416"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3417 : NAD83 / Iowa North (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3417,'EPSG',3417,'PROJCS["NAD83 / Iowa North (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3417"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3418 : NAD83 / Iowa South (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3418,'EPSG',3418,'PROJCS["NAD83 / Iowa South (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3418"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3419 : NAD83 / Kansas North (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3419,'EPSG',3419,'PROJCS["NAD83 / Kansas North (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3419"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3420 : NAD83 / Kansas South (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3420,'EPSG',3420,'PROJCS["NAD83 / Kansas South (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3420"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3421 : NAD83 / Nevada East (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3421,'EPSG',3421,'PROJCS["NAD83 / Nevada East (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",26246666.66670001],AUTHORITY["EPSG","3421"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3422 : NAD83 / Nevada Central (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3422,'EPSG',3422,'PROJCS["NAD83 / Nevada Central (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",19685000],AUTHORITY["EPSG","3422"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3423 : NAD83 / Nevada West (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3423,'EPSG',3423,'PROJCS["NAD83 / Nevada West (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",13123333.3333],AUTHORITY["EPSG","3423"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3424 : NAD83 / New Jersey (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3424,'EPSG',3424,'PROJCS["NAD83 / New Jersey (ft US)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3424"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3425 : NAD83(HARN) / Iowa North (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3425,'EPSG',3425,'PROJCS["NAD83(HARN) / Iowa North (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3425"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3426 : NAD83(HARN) / Iowa South (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3426,'EPSG',3426,'PROJCS["NAD83(HARN) / Iowa South (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3426"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3427 : NAD83(HARN) / Kansas North (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3427,'EPSG',3427,'PROJCS["NAD83(HARN) / Kansas North (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3427"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3428 : NAD83(HARN) / Kansas South (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3428,'EPSG',3428,'PROJCS["NAD83(HARN) / Kansas South (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3428"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3429 : NAD83(HARN) / Nevada East (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3429,'EPSG',3429,'PROJCS["NAD83(HARN) / Nevada East (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",26246666.66670001],AUTHORITY["EPSG","3429"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3430 : NAD83(HARN) / Nevada Central (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3430,'EPSG',3430,'PROJCS["NAD83(HARN) / Nevada Central (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",19685000],AUTHORITY["EPSG","3430"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3431 : NAD83(HARN) / Nevada West (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3431,'EPSG',3431,'PROJCS["NAD83(HARN) / Nevada West (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",13123333.3333],AUTHORITY["EPSG","3431"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3432 : NAD83(HARN) / New Jersey (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3432,'EPSG',3432,'PROJCS["NAD83(HARN) / New Jersey (ft US)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3432"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3433 : NAD83 / Arkansas North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3433,'EPSG',3433,'PROJCS["NAD83 / Arkansas North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3433"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3434 : NAD83 / Arkansas South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3434,'EPSG',3434,'PROJCS["NAD83 / Arkansas South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3434"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3435 : NAD83 / Illinois East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3435,'EPSG',3435,'PROJCS["NAD83 / Illinois East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3435"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3436 : NAD83 / Illinois West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3436,'EPSG',3436,'PROJCS["NAD83 / Illinois West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",2296583.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3436"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3437 : NAD83 / New Hampshire (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3437,'EPSG',3437,'PROJCS["NAD83 / New Hampshire (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3437"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3438 : NAD83 / Rhode Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3438,'EPSG',3438,'PROJCS["NAD83 / Rhode Island (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",328083.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3438"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3439 : PSD93 / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3439,'EPSG',3439,'PROJCS["PSD93 / UTM zone 39N",GEOGCS["PSD93",DATUM["PDO_Survey_Datum_1993",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101],AUTHORITY["EPSG","6134"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4134"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3439"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs '); --- --- EPSG 3440 : PSD93 / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3440,'EPSG',3440,'PROJCS["PSD93 / UTM zone 40N",GEOGCS["PSD93",DATUM["PDO_Survey_Datum_1993",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101],AUTHORITY["EPSG","6134"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4134"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3440"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs '); --- --- EPSG 3441 : NAD83(HARN) / Arkansas North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3441,'EPSG',3441,'PROJCS["NAD83(HARN) / Arkansas North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3441"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3442 : NAD83(HARN) / Arkansas South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3442,'EPSG',3442,'PROJCS["NAD83(HARN) / Arkansas South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3442"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3443 : NAD83(HARN) / Illinois East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3443,'EPSG',3443,'PROJCS["NAD83(HARN) / Illinois East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3443"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3444 : NAD83(HARN) / Illinois West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3444,'EPSG',3444,'PROJCS["NAD83(HARN) / Illinois West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",2296583.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3444"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3445 : NAD83(HARN) / New Hampshire (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3445,'EPSG',3445,'PROJCS["NAD83(HARN) / New Hampshire (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3445"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3446 : NAD83(HARN) / Rhode Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3446,'EPSG',3446,'PROJCS["NAD83(HARN) / Rhode Island (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",328083.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3446"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3447 : ETRS89 / Belgian Lambert 2005 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3447,'EPSG',3447,'PROJCS["ETRS89 / Belgian Lambert 2005",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",50.797815],PARAMETER["central_meridian",4.359215833333333],PARAMETER["false_easting",150328],PARAMETER["false_northing",166262],AUTHORITY["EPSG","3447"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3448 : JAD2001 / Jamaica Metric Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3448,'EPSG',3448,'PROJCS["JAD2001 / Jamaica Metric Grid",GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-77],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",650000],AUTHORITY["EPSG","3448"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3449 : JAD2001 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3449,'EPSG',3449,'PROJCS["JAD2001 / UTM zone 17N",GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3449"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3450 : JAD2001 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3450,'EPSG',3450,'PROJCS["JAD2001 / UTM zone 18N",GEOGCS["JAD2001",DATUM["Jamaica_2001",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6758"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4758"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3450"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3451 : NAD83 / Louisiana North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3451,'EPSG',3451,'PROJCS["NAD83 / Louisiana North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3451"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3452 : NAD83 / Louisiana South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3452,'EPSG',3452,'PROJCS["NAD83 / Louisiana South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3452"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3453 : NAD83 / Louisiana Offshore (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3453,'EPSG',3453,'PROJCS["NAD83 / Louisiana Offshore (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3453"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3454 : NAD83 / South Dakota North (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3454,'EPSG',3454,'PROJCS["NAD83 / South Dakota North (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3454"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3455 : NAD83 / South Dakota South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3455,'EPSG',3455,'PROJCS["NAD83 / South Dakota South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3455"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3456 : NAD83(HARN) / Louisiana North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3456,'EPSG',3456,'PROJCS["NAD83(HARN) / Louisiana North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3456"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3457 : NAD83(HARN) / Louisiana South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3457,'EPSG',3457,'PROJCS["NAD83(HARN) / Louisiana South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3457"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3458 : NAD83(HARN) / South Dakota North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3458,'EPSG',3458,'PROJCS["NAD83(HARN) / South Dakota North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3458"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3459 : NAD83(HARN) / South Dakota South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3459,'EPSG',3459,'PROJCS["NAD83(HARN) / South Dakota South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3459"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3460 : Fiji 1986 / Fiji Map Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3460,'EPSG',3460,'PROJCS["Fiji 1986 / Fiji Map Grid",GEOGCS["Fiji 1986",DATUM["Fiji_Geodetic_Datum_1986",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6720"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4720"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-17],PARAMETER["central_meridian",178.75],PARAMETER["scale_factor",0.99985],PARAMETER["false_easting",2000000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3460"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 3461 : Dabola 1981 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3461,'EPSG',3461,'PROJCS["Dabola 1981 / UTM zone 28N",GEOGCS["Dabola 1981",DATUM["Dabola_1981",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY["EPSG","6155"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4155"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3461"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3462 : Dabola 1981 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3462,'EPSG',3462,'PROJCS["Dabola 1981 / UTM zone 29N",GEOGCS["Dabola 1981",DATUM["Dabola_1981",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-83,37,124,0,0,0,0],AUTHORITY["EPSG","6155"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4155"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3462"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3463 : NAD83 / Maine CS2000 Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3463,'EPSG',3463,'PROJCS["NAD83 / Maine CS2000 Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.5],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3463"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3464 : NAD83(HARN) / Maine CS2000 Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3464,'EPSG',3464,'PROJCS["NAD83(HARN) / Maine CS2000 Central",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.5],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3464"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3465 : NAD83(NSRS2007) / Alabama East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3465,'EPSG',3465,'PROJCS["NAD83(NSRS2007) / Alabama East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3465"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3466 : NAD83(NSRS2007) / Alabama West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3466,'EPSG',3466,'PROJCS["NAD83(NSRS2007) / Alabama West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3466"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3467 : NAD83(NSRS2007) / Alaska Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3467,'EPSG',3467,'PROJCS["NAD83(NSRS2007) / Alaska Albers",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",55],PARAMETER["standard_parallel_2",65],PARAMETER["latitude_of_center",50],PARAMETER["longitude_of_center",-154],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3467"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3468 : NAD83(NSRS2007) / Alaska zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3468,'EPSG',3468,'PROJCS["NAD83(NSRS2007) / Alaska zone 1",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",57],PARAMETER["longitude_of_center",-133.6666666666667],PARAMETER["azimuth",323.1301023611111],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5000000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3468"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3469 : NAD83(NSRS2007) / Alaska zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3469,'EPSG',3469,'PROJCS["NAD83(NSRS2007) / Alaska zone 2",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3469"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3470 : NAD83(NSRS2007) / Alaska zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3470,'EPSG',3470,'PROJCS["NAD83(NSRS2007) / Alaska zone 3",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-146],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3470"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3471 : NAD83(NSRS2007) / Alaska zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3471,'EPSG',3471,'PROJCS["NAD83(NSRS2007) / Alaska zone 4",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3471"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3472 : NAD83(NSRS2007) / Alaska zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3472,'EPSG',3472,'PROJCS["NAD83(NSRS2007) / Alaska zone 5",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3472"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3473 : NAD83(NSRS2007) / Alaska zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3473,'EPSG',3473,'PROJCS["NAD83(NSRS2007) / Alaska zone 6",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3473"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3474 : NAD83(NSRS2007) / Alaska zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3474,'EPSG',3474,'PROJCS["NAD83(NSRS2007) / Alaska zone 7",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-162],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3474"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3475 : NAD83(NSRS2007) / Alaska zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3475,'EPSG',3475,'PROJCS["NAD83(NSRS2007) / Alaska zone 8",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-166],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3475"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3476 : NAD83(NSRS2007) / Alaska zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3476,'EPSG',3476,'PROJCS["NAD83(NSRS2007) / Alaska zone 9",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3476"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3477 : NAD83(NSRS2007) / Alaska zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3477,'EPSG',3477,'PROJCS["NAD83(NSRS2007) / Alaska zone 10",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",53.83333333333334],PARAMETER["standard_parallel_2",51.83333333333334],PARAMETER["latitude_of_origin",51],PARAMETER["central_meridian",-176],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3477"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3478 : NAD83(NSRS2007) / Arizona Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3478,'EPSG',3478,'PROJCS["NAD83(NSRS2007) / Arizona Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","3478"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3479 : NAD83(NSRS2007) / Arizona Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3479,'EPSG',3479,'PROJCS["NAD83(NSRS2007) / Arizona Central (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3479"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3480 : NAD83(NSRS2007) / Arizona East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3480,'EPSG',3480,'PROJCS["NAD83(NSRS2007) / Arizona East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","3480"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3481 : NAD83(NSRS2007) / Arizona East (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3481,'EPSG',3481,'PROJCS["NAD83(NSRS2007) / Arizona East (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3481"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3482 : NAD83(NSRS2007) / Arizona West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3482,'EPSG',3482,'PROJCS["NAD83(NSRS2007) / Arizona West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","3482"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3483 : NAD83(NSRS2007) / Arizona West (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3483,'EPSG',3483,'PROJCS["NAD83(NSRS2007) / Arizona West (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3483"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3484 : NAD83(NSRS2007) / Arkansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3484,'EPSG',3484,'PROJCS["NAD83(NSRS2007) / Arkansas North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3484"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3485 : NAD83(NSRS2007) / Arkansas North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3485,'EPSG',3485,'PROJCS["NAD83(NSRS2007) / Arkansas North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3485"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3486 : NAD83(NSRS2007) / Arkansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3486,'EPSG',3486,'PROJCS["NAD83(NSRS2007) / Arkansas South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","3486"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3487 : NAD83(NSRS2007) / Arkansas South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3487,'EPSG',3487,'PROJCS["NAD83(NSRS2007) / Arkansas South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3487"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3488 : NAD83(NSRS2007) / California Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3488,'EPSG',3488,'PROJCS["NAD83(NSRS2007) / California Albers",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3488"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3489 : NAD83(NSRS2007) / California zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3489,'EPSG',3489,'PROJCS["NAD83(NSRS2007) / California zone 1",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3489"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3490 : NAD83(NSRS2007) / California zone 1 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3490,'EPSG',3490,'PROJCS["NAD83(NSRS2007) / California zone 1 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3490"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3491 : NAD83(NSRS2007) / California zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3491,'EPSG',3491,'PROJCS["NAD83(NSRS2007) / California zone 2",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3491"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3492 : NAD83(NSRS2007) / California zone 2 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3492,'EPSG',3492,'PROJCS["NAD83(NSRS2007) / California zone 2 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3492"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3493 : NAD83(NSRS2007) / California zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3493,'EPSG',3493,'PROJCS["NAD83(NSRS2007) / California zone 3",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3493"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3494 : NAD83(NSRS2007) / California zone 3 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3494,'EPSG',3494,'PROJCS["NAD83(NSRS2007) / California zone 3 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3494"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3495 : NAD83(NSRS2007) / California zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3495,'EPSG',3495,'PROJCS["NAD83(NSRS2007) / California zone 4",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3495"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3496 : NAD83(NSRS2007) / California zone 4 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3496,'EPSG',3496,'PROJCS["NAD83(NSRS2007) / California zone 4 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3496"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3497 : NAD83(NSRS2007) / California zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3497,'EPSG',3497,'PROJCS["NAD83(NSRS2007) / California zone 5",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3497"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3498 : NAD83(NSRS2007) / California zone 5 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3498,'EPSG',3498,'PROJCS["NAD83(NSRS2007) / California zone 5 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3498"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3499 : NAD83(NSRS2007) / California zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3499,'EPSG',3499,'PROJCS["NAD83(NSRS2007) / California zone 6",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3499"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3500 : NAD83(NSRS2007) / California zone 6 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3500,'EPSG',3500,'PROJCS["NAD83(NSRS2007) / California zone 6 (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",6561666.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3500"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3501 : NAD83(NSRS2007) / Colorado Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3501,'EPSG',3501,'PROJCS["NAD83(NSRS2007) / Colorado Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","3501"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3502 : NAD83(NSRS2007) / Colorado Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3502,'EPSG',3502,'PROJCS["NAD83(NSRS2007) / Colorado Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3502"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3503 : NAD83(NSRS2007) / Colorado North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3503,'EPSG',3503,'PROJCS["NAD83(NSRS2007) / Colorado North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","3503"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3504 : NAD83(NSRS2007) / Colorado North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3504,'EPSG',3504,'PROJCS["NAD83(NSRS2007) / Colorado North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3504"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3505 : NAD83(NSRS2007) / Colorado South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3505,'EPSG',3505,'PROJCS["NAD83(NSRS2007) / Colorado South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","3505"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3506 : NAD83(NSRS2007) / Colorado South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3506,'EPSG',3506,'PROJCS["NAD83(NSRS2007) / Colorado South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3506"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3507 : NAD83(NSRS2007) / Connecticut --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3507,'EPSG',3507,'PROJCS["NAD83(NSRS2007) / Connecticut",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",304800.6096],PARAMETER["false_northing",152400.3048],AUTHORITY["EPSG","3507"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3508 : NAD83(NSRS2007) / Connecticut (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3508,'EPSG',3508,'PROJCS["NAD83(NSRS2007) / Connecticut (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",1000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3508"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3509 : NAD83(NSRS2007) / Delaware --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3509,'EPSG',3509,'PROJCS["NAD83(NSRS2007) / Delaware",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3509"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3510 : NAD83(NSRS2007) / Delaware (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3510,'EPSG',3510,'PROJCS["NAD83(NSRS2007) / Delaware (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3510"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3511 : NAD83(NSRS2007) / Florida East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3511,'EPSG',3511,'PROJCS["NAD83(NSRS2007) / Florida East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3511"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3512 : NAD83(NSRS2007) / Florida East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3512,'EPSG',3512,'PROJCS["NAD83(NSRS2007) / Florida East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3512"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3513 : NAD83(NSRS2007) / Florida GDL Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3513,'EPSG',3513,'PROJCS["NAD83(NSRS2007) / Florida GDL Albers",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",24],PARAMETER["standard_parallel_2",31.5],PARAMETER["latitude_of_center",24],PARAMETER["longitude_of_center",-84],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3513"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3514 : NAD83(NSRS2007) / Florida North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3514,'EPSG',3514,'PROJCS["NAD83(NSRS2007) / Florida North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3514"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3515 : NAD83(NSRS2007) / Florida North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3515,'EPSG',3515,'PROJCS["NAD83(NSRS2007) / Florida North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3515"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3516 : NAD83(NSRS2007) / Florida West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3516,'EPSG',3516,'PROJCS["NAD83(NSRS2007) / Florida West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3516"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3517 : NAD83(NSRS2007) / Florida West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3517,'EPSG',3517,'PROJCS["NAD83(NSRS2007) / Florida West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3517"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3518 : NAD83(NSRS2007) / Georgia East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3518,'EPSG',3518,'PROJCS["NAD83(NSRS2007) / Georgia East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3518"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3519 : NAD83(NSRS2007) / Georgia East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3519,'EPSG',3519,'PROJCS["NAD83(NSRS2007) / Georgia East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3519"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3520 : NAD83(NSRS2007) / Georgia West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3520,'EPSG',3520,'PROJCS["NAD83(NSRS2007) / Georgia West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3520"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3521 : NAD83(NSRS2007) / Georgia West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3521,'EPSG',3521,'PROJCS["NAD83(NSRS2007) / Georgia West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3521"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3522 : NAD83(NSRS2007) / Idaho Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3522,'EPSG',3522,'PROJCS["NAD83(NSRS2007) / Idaho Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3522"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3523 : NAD83(NSRS2007) / Idaho Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3523,'EPSG',3523,'PROJCS["NAD83(NSRS2007) / Idaho Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3523"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3524 : NAD83(NSRS2007) / Idaho East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3524,'EPSG',3524,'PROJCS["NAD83(NSRS2007) / Idaho East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3524"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3525 : NAD83(NSRS2007) / Idaho East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3525,'EPSG',3525,'PROJCS["NAD83(NSRS2007) / Idaho East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3525"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3526 : NAD83(NSRS2007) / Idaho West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3526,'EPSG',3526,'PROJCS["NAD83(NSRS2007) / Idaho West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3526"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3527 : NAD83(NSRS2007) / Idaho West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3527,'EPSG',3527,'PROJCS["NAD83(NSRS2007) / Idaho West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",2624666.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3527"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3528 : NAD83(NSRS2007) / Illinois East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3528,'EPSG',3528,'PROJCS["NAD83(NSRS2007) / Illinois East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3528"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3529 : NAD83(NSRS2007) / Illinois East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3529,'EPSG',3529,'PROJCS["NAD83(NSRS2007) / Illinois East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3529"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3530 : NAD83(NSRS2007) / Illinois West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3530,'EPSG',3530,'PROJCS["NAD83(NSRS2007) / Illinois West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3530"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3531 : NAD83(NSRS2007) / Illinois West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3531,'EPSG',3531,'PROJCS["NAD83(NSRS2007) / Illinois West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",2296583.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3531"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3532 : NAD83(NSRS2007) / Indiana East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3532,'EPSG',3532,'PROJCS["NAD83(NSRS2007) / Indiana East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",100000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","3532"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3533 : NAD83(NSRS2007) / Indiana East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3533,'EPSG',3533,'PROJCS["NAD83(NSRS2007) / Indiana East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",328083.333],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","3533"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3534 : NAD83(NSRS2007) / Indiana West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3534,'EPSG',3534,'PROJCS["NAD83(NSRS2007) / Indiana West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","3534"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3535 : NAD83(NSRS2007) / Indiana West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3535,'EPSG',3535,'PROJCS["NAD83(NSRS2007) / Indiana West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",820208.3330000002],AUTHORITY["EPSG","3535"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3536 : NAD83(NSRS2007) / Iowa North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3536,'EPSG',3536,'PROJCS["NAD83(NSRS2007) / Iowa North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3536"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3537 : NAD83(NSRS2007) / Iowa North (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3537,'EPSG',3537,'PROJCS["NAD83(NSRS2007) / Iowa North (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3537"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3538 : NAD83(NSRS2007) / Iowa South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3538,'EPSG',3538,'PROJCS["NAD83(NSRS2007) / Iowa South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3538"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3539 : NAD83(NSRS2007) / Iowa South (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3539,'EPSG',3539,'PROJCS["NAD83(NSRS2007) / Iowa South (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3539"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3540 : NAD83(NSRS2007) / Kansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3540,'EPSG',3540,'PROJCS["NAD83(NSRS2007) / Kansas North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3540"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3541 : NAD83(NSRS2007) / Kansas North (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3541,'EPSG',3541,'PROJCS["NAD83(NSRS2007) / Kansas North (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3541"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3542 : NAD83(NSRS2007) / Kansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3542,'EPSG',3542,'PROJCS["NAD83(NSRS2007) / Kansas South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","3542"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3543 : NAD83(NSRS2007) / Kansas South (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3543,'EPSG',3543,'PROJCS["NAD83(NSRS2007) / Kansas South (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",1312333.3333],AUTHORITY["EPSG","3543"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3544 : NAD83(NSRS2007) / Kentucky North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3544,'EPSG',3544,'PROJCS["NAD83(NSRS2007) / Kentucky North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3544"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3545 : NAD83(NSRS2007) / Kentucky North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3545,'EPSG',3545,'PROJCS["NAD83(NSRS2007) / Kentucky North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3545"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3546 : NAD83(NSRS2007) / Kentucky Single Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3546,'EPSG',3546,'PROJCS["NAD83(NSRS2007) / Kentucky Single Zone",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3546"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3547 : NAD83(NSRS2007) / Kentucky Single Zone (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3547,'EPSG',3547,'PROJCS["NAD83(NSRS2007) / Kentucky Single Zone (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.08333333333334],PARAMETER["standard_parallel_2",38.66666666666666],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",4921250],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3547"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3548 : NAD83(NSRS2007) / Kentucky South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3548,'EPSG',3548,'PROJCS["NAD83(NSRS2007) / Kentucky South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3548"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3549 : NAD83(NSRS2007) / Kentucky South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3549,'EPSG',3549,'PROJCS["NAD83(NSRS2007) / Kentucky South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",1640416.667],AUTHORITY["EPSG","3549"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3550 : NAD83(NSRS2007) / Louisiana North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3550,'EPSG',3550,'PROJCS["NAD83(NSRS2007) / Louisiana North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3550"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3551 : NAD83(NSRS2007) / Louisiana North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3551,'EPSG',3551,'PROJCS["NAD83(NSRS2007) / Louisiana North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3551"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3552 : NAD83(NSRS2007) / Louisiana South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3552,'EPSG',3552,'PROJCS["NAD83(NSRS2007) / Louisiana South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3552"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3553 : NAD83(NSRS2007) / Louisiana South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3553,'EPSG',3553,'PROJCS["NAD83(NSRS2007) / Louisiana South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",3280833.333300001],PARAMETER["false_northing",0],AUTHORITY["EPSG","3553"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3554 : NAD83(NSRS2007) / Maine CS2000 Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3554,'EPSG',3554,'PROJCS["NAD83(NSRS2007) / Maine CS2000 Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.5],PARAMETER["central_meridian",-69.125],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3554"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3555 : NAD83(NSRS2007) / Maine CS2000 East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3555,'EPSG',3555,'PROJCS["NAD83(NSRS2007) / Maine CS2000 East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-67.875],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3555"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3556 : NAD83(NSRS2007) / Maine CS2000 West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3556,'EPSG',3556,'PROJCS["NAD83(NSRS2007) / Maine CS2000 West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.375],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3556"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3557 : NAD83(NSRS2007) / Maine East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3557,'EPSG',3557,'PROJCS["NAD83(NSRS2007) / Maine East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3557"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3558 : NAD83(NSRS2007) / Maine West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3558,'EPSG',3558,'PROJCS["NAD83(NSRS2007) / Maine West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3558"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3559 : NAD83(NSRS2007) / Maryland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3559,'EPSG',3559,'PROJCS["NAD83(NSRS2007) / Maryland",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3559"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3560 : NAD83 / Utah North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3560,'EPSG',3560,'PROJCS["NAD83 / Utah North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3560"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3561 : Old Hawaiian / Hawaii zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3561,'EPSG',3561,'PROJCS["Old Hawaiian / Hawaii zone 1",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",18.83333333333333],PARAMETER["central_meridian",-155.5],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3561"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3562 : Old Hawaiian / Hawaii zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3562,'EPSG',3562,'PROJCS["Old Hawaiian / Hawaii zone 2",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20.33333333333333],PARAMETER["central_meridian",-156.6666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3562"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3563 : Old Hawaiian / Hawaii zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3563,'EPSG',3563,'PROJCS["Old Hawaiian / Hawaii zone 3",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3563"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3564 : Old Hawaiian / Hawaii zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3564,'EPSG',3564,'PROJCS["Old Hawaiian / Hawaii zone 4",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.83333333333333],PARAMETER["central_meridian",-159.5],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3564"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3565 : Old Hawaiian / Hawaii zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3565,'EPSG',3565,'PROJCS["Old Hawaiian / Hawaii zone 5",GEOGCS["Old Hawaiian",DATUM["Old_Hawaiian",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[61,-285,-181,0,0,0,0],AUTHORITY["EPSG","6135"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4135"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.66666666666667],PARAMETER["central_meridian",-160.1666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3565"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3566 : NAD83 / Utah Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3566,'EPSG',3566,'PROJCS["NAD83 / Utah Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",6561666.666700001],AUTHORITY["EPSG","3566"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3567 : NAD83 / Utah South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3567,'EPSG',3567,'PROJCS["NAD83 / Utah South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3567"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3568 : NAD83(HARN) / Utah North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3568,'EPSG',3568,'PROJCS["NAD83(HARN) / Utah North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3568"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3569 : NAD83(HARN) / Utah Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3569,'EPSG',3569,'PROJCS["NAD83(HARN) / Utah Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",6561666.666700001],AUTHORITY["EPSG","3569"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3570 : NAD83(HARN) / Utah South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3570,'EPSG',3570,'PROJCS["NAD83(HARN) / Utah South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3570"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3571 : WGS 84 / North Pole LAEA Bering Sea --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3571,'EPSG',3571,'PROJCS["WGS 84 / North Pole LAEA Bering Sea",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",180],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3571"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3572 : WGS 84 / North Pole LAEA Alaska --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3572,'EPSG',3572,'PROJCS["WGS 84 / North Pole LAEA Alaska",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",-150],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3572"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3573 : WGS 84 / North Pole LAEA Canada --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3573,'EPSG',3573,'PROJCS["WGS 84 / North Pole LAEA Canada",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3573"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3574 : WGS 84 / North Pole LAEA Atlantic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3574,'EPSG',3574,'PROJCS["WGS 84 / North Pole LAEA Atlantic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",-40],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3574"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3575 : WGS 84 / North Pole LAEA Europe --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3575,'EPSG',3575,'PROJCS["WGS 84 / North Pole LAEA Europe",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",10],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3575"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3576 : WGS 84 / North Pole LAEA Russia --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3576,'EPSG',3576,'PROJCS["WGS 84 / North Pole LAEA Russia",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",90],PARAMETER["longitude_of_center",90],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3576"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3577 : GDA94 / Australian Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3577,'EPSG',3577,'PROJCS["GDA94 / Australian Albers",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",-18],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",132],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3577"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3578 : NAD83 / Yukon Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3578,'EPSG',3578,'PROJCS["NAD83 / Yukon Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",61.66666666666666],PARAMETER["standard_parallel_2",68],PARAMETER["latitude_of_center",59],PARAMETER["longitude_of_center",-132.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3578"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3579 : NAD83(CSRS) / Yukon Albers --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3579,'EPSG',3579,'PROJCS["NAD83(CSRS) / Yukon Albers",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",61.66666666666666],PARAMETER["standard_parallel_2",68],PARAMETER["latitude_of_center",59],PARAMETER["longitude_of_center",-132.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3579"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3580 : NAD83 / NWT Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3580,'EPSG',3580,'PROJCS["NAD83 / NWT Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",62],PARAMETER["standard_parallel_2",70],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-112],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3580"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3581 : NAD83(CSRS) / NWT Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3581,'EPSG',3581,'PROJCS["NAD83(CSRS) / NWT Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",62],PARAMETER["standard_parallel_2",70],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-112],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3581"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3582 : NAD83(NSRS2007) / Maryland (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3582,'EPSG',3582,'PROJCS["NAD83(NSRS2007) / Maryland (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",1312333.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3582"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3583 : NAD83(NSRS2007) / Massachusetts Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3583,'EPSG',3583,'PROJCS["NAD83(NSRS2007) / Massachusetts Island",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3583"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3584 : NAD83(NSRS2007) / Massachusetts Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3584,'EPSG',3584,'PROJCS["NAD83(NSRS2007) / Massachusetts Island (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3584"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3585 : NAD83(NSRS2007) / Massachusetts Mainland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3585,'EPSG',3585,'PROJCS["NAD83(NSRS2007) / Massachusetts Mainland",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","3585"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3586 : NAD83(NSRS2007) / Massachusetts Mainland (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3586,'EPSG',3586,'PROJCS["NAD83(NSRS2007) / Massachusetts Mainland (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",2460625],AUTHORITY["EPSG","3586"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3587 : NAD83(NSRS2007) / Michigan Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3587,'EPSG',3587,'PROJCS["NAD83(NSRS2007) / Michigan Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",6000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3587"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3588 : NAD83(NSRS2007) / Michigan Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3588,'EPSG',3588,'PROJCS["NAD83(NSRS2007) / Michigan Central (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",19685039.37],PARAMETER["false_northing",0],AUTHORITY["EPSG","3588"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3589 : NAD83(NSRS2007) / Michigan North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3589,'EPSG',3589,'PROJCS["NAD83(NSRS2007) / Michigan North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",8000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3589"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3590 : NAD83(NSRS2007) / Michigan North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3590,'EPSG',3590,'PROJCS["NAD83(NSRS2007) / Michigan North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",26246719.16],PARAMETER["false_northing",0],AUTHORITY["EPSG","3590"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3591 : NAD83(NSRS2007) / Michigan Oblique Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3591,'EPSG',3591,'PROJCS["NAD83(NSRS2007) / Michigan Oblique Mercator",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",45.30916666666666],PARAMETER["longitude_of_center",-86],PARAMETER["azimuth",337.25556],PARAMETER["rectified_grid_angle",337.25556],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2546731.496],PARAMETER["false_northing",-4354009.816],AUTHORITY["EPSG","3591"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3592 : NAD83(NSRS2007) / Michigan South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3592,'EPSG',3592,'PROJCS["NAD83(NSRS2007) / Michigan South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",4000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3592"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3593 : NAD83(NSRS2007) / Michigan South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3593,'EPSG',3593,'PROJCS["NAD83(NSRS2007) / Michigan South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",13123359.58],PARAMETER["false_northing",0],AUTHORITY["EPSG","3593"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3594 : NAD83(NSRS2007) / Minnesota Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3594,'EPSG',3594,'PROJCS["NAD83(NSRS2007) / Minnesota Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3594"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3595 : NAD83(NSRS2007) / Minnesota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3595,'EPSG',3595,'PROJCS["NAD83(NSRS2007) / Minnesota North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3595"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3596 : NAD83(NSRS2007) / Minnesota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3596,'EPSG',3596,'PROJCS["NAD83(NSRS2007) / Minnesota South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3596"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3597 : NAD83(NSRS2007) / Mississippi East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3597,'EPSG',3597,'PROJCS["NAD83(NSRS2007) / Mississippi East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3597"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3598 : NAD83(NSRS2007) / Mississippi East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3598,'EPSG',3598,'PROJCS["NAD83(NSRS2007) / Mississippi East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3598"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3599 : NAD83(NSRS2007) / Mississippi West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3599,'EPSG',3599,'PROJCS["NAD83(NSRS2007) / Mississippi West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3599"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3600 : NAD83(NSRS2007) / Mississippi West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3600,'EPSG',3600,'PROJCS["NAD83(NSRS2007) / Mississippi West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3600"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3601 : NAD83(NSRS2007) / Missouri Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3601,'EPSG',3601,'PROJCS["NAD83(NSRS2007) / Missouri Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3601"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3602 : NAD83(NSRS2007) / Missouri East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3602,'EPSG',3602,'PROJCS["NAD83(NSRS2007) / Missouri East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3602"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3603 : NAD83(NSRS2007) / Missouri West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3603,'EPSG',3603,'PROJCS["NAD83(NSRS2007) / Missouri West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",850000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3603"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3604 : NAD83(NSRS2007) / Montana --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3604,'EPSG',3604,'PROJCS["NAD83(NSRS2007) / Montana",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3604"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3605 : NAD83(NSRS2007) / Montana (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3605,'EPSG',3605,'PROJCS["NAD83(NSRS2007) / Montana (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","3605"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3606 : NAD83(NSRS2007) / Nebraska --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3606,'EPSG',3606,'PROJCS["NAD83(NSRS2007) / Nebraska",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3606"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3607 : NAD83(NSRS2007) / Nevada Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3607,'EPSG',3607,'PROJCS["NAD83(NSRS2007) / Nevada Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3607"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3608 : NAD83(NSRS2007) / Nevada Central (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3608,'EPSG',3608,'PROJCS["NAD83(NSRS2007) / Nevada Central (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",19685000],AUTHORITY["EPSG","3608"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3609 : NAD83(NSRS2007) / Nevada East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3609,'EPSG',3609,'PROJCS["NAD83(NSRS2007) / Nevada East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",8000000],AUTHORITY["EPSG","3609"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3610 : NAD83(NSRS2007) / Nevada East (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3610,'EPSG',3610,'PROJCS["NAD83(NSRS2007) / Nevada East (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",26246666.66670001],AUTHORITY["EPSG","3610"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3611 : NAD83(NSRS2007) / Nevada West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3611,'EPSG',3611,'PROJCS["NAD83(NSRS2007) / Nevada West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",800000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3611"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3612 : NAD83(NSRS2007) / Nevada West (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3612,'EPSG',3612,'PROJCS["NAD83(NSRS2007) / Nevada West (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",13123333.3333],AUTHORITY["EPSG","3612"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3613 : NAD83(NSRS2007) / New Hampshire --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3613,'EPSG',3613,'PROJCS["NAD83(NSRS2007) / New Hampshire",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3613"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3614 : NAD83(NSRS2007) / New Hampshire (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3614,'EPSG',3614,'PROJCS["NAD83(NSRS2007) / New Hampshire (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3614"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3615 : NAD83(NSRS2007) / New Jersey --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3615,'EPSG',3615,'PROJCS["NAD83(NSRS2007) / New Jersey",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3615"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3616 : NAD83(NSRS2007) / New Jersey (ft US) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3616,'EPSG',3616,'PROJCS["NAD83(NSRS2007) / New Jersey (ft US)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3616"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3617 : NAD83(NSRS2007) / New Mexico Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3617,'EPSG',3617,'PROJCS["NAD83(NSRS2007) / New Mexico Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3617"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3618 : NAD83(NSRS2007) / New Mexico Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3618,'EPSG',3618,'PROJCS["NAD83(NSRS2007) / New Mexico Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3618"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3619 : NAD83(NSRS2007) / New Mexico East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3619,'EPSG',3619,'PROJCS["NAD83(NSRS2007) / New Mexico East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",165000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3619"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3620 : NAD83(NSRS2007) / New Mexico East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3620,'EPSG',3620,'PROJCS["NAD83(NSRS2007) / New Mexico East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",541337.5],PARAMETER["false_northing",0],AUTHORITY["EPSG","3620"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3621 : NAD83(NSRS2007) / New Mexico West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3621,'EPSG',3621,'PROJCS["NAD83(NSRS2007) / New Mexico West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",830000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3621"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3622 : NAD83(NSRS2007) / New Mexico West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3622,'EPSG',3622,'PROJCS["NAD83(NSRS2007) / New Mexico West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",2723091.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3622"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3623 : NAD83(NSRS2007) / New York Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3623,'EPSG',3623,'PROJCS["NAD83(NSRS2007) / New York Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3623"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3624 : NAD83(NSRS2007) / New York Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3624,'EPSG',3624,'PROJCS["NAD83(NSRS2007) / New York Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",820208.3330000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3624"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3625 : NAD83(NSRS2007) / New York East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3625,'EPSG',3625,'PROJCS["NAD83(NSRS2007) / New York East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3625"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3626 : NAD83(NSRS2007) / New York East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3626,'EPSG',3626,'PROJCS["NAD83(NSRS2007) / New York East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",492125],PARAMETER["false_northing",0],AUTHORITY["EPSG","3626"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3627 : NAD83(NSRS2007) / New York Long Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3627,'EPSG',3627,'PROJCS["NAD83(NSRS2007) / New York Long Island",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3627"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3628 : NAD83(NSRS2007) / New York Long Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3628,'EPSG',3628,'PROJCS["NAD83(NSRS2007) / New York Long Island (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","3628"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3629 : NAD83(NSRS2007) / New York West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3629,'EPSG',3629,'PROJCS["NAD83(NSRS2007) / New York West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",350000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3629"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3630 : NAD83(NSRS2007) / New York West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3630,'EPSG',3630,'PROJCS["NAD83(NSRS2007) / New York West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1148291.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3630"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3631 : NAD83(NSRS2007) / North Carolina --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3631,'EPSG',3631,'PROJCS["NAD83(NSRS2007) / North Carolina",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",609601.22],PARAMETER["false_northing",0],AUTHORITY["EPSG","3631"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3632 : NAD83(NSRS2007) / North Carolina (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3632,'EPSG',3632,'PROJCS["NAD83(NSRS2007) / North Carolina (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3632"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3633 : NAD83(NSRS2007) / North Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3633,'EPSG',3633,'PROJCS["NAD83(NSRS2007) / North Dakota North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3633"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3634 : NAD83(NSRS2007) / North Dakota North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3634,'EPSG',3634,'PROJCS["NAD83(NSRS2007) / North Dakota North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","3634"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3635 : NAD83(NSRS2007) / North Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3635,'EPSG',3635,'PROJCS["NAD83(NSRS2007) / North Dakota South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3635"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3636 : NAD83(NSRS2007) / North Dakota South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3636,'EPSG',3636,'PROJCS["NAD83(NSRS2007) / North Dakota South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",1968503.937],PARAMETER["false_northing",0],AUTHORITY["EPSG","3636"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3637 : NAD83(NSRS2007) / Ohio North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3637,'EPSG',3637,'PROJCS["NAD83(NSRS2007) / Ohio North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3637"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3638 : NAD83(NSRS2007) / Ohio South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3638,'EPSG',3638,'PROJCS["NAD83(NSRS2007) / Ohio South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3638"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3639 : NAD83(NSRS2007) / Oklahoma North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3639,'EPSG',3639,'PROJCS["NAD83(NSRS2007) / Oklahoma North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3639"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3640 : NAD83(NSRS2007) / Oklahoma North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3640,'EPSG',3640,'PROJCS["NAD83(NSRS2007) / Oklahoma North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3640"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3641 : NAD83(NSRS2007) / Oklahoma South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3641,'EPSG',3641,'PROJCS["NAD83(NSRS2007) / Oklahoma South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3641"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3642 : NAD83(NSRS2007) / Oklahoma South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3642,'EPSG',3642,'PROJCS["NAD83(NSRS2007) / Oklahoma South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3642"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3643 : NAD83(NSRS2007) / Oregon Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3643,'EPSG',3643,'PROJCS["NAD83(NSRS2007) / Oregon Lambert",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3643"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3644 : NAD83(NSRS2007) / Oregon Lambert (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3644,'EPSG',3644,'PROJCS["NAD83(NSRS2007) / Oregon Lambert (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","3644"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3645 : NAD83(NSRS2007) / Oregon North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3645,'EPSG',3645,'PROJCS["NAD83(NSRS2007) / Oregon North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3645"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3646 : NAD83(NSRS2007) / Oregon North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3646,'EPSG',3646,'PROJCS["NAD83(NSRS2007) / Oregon North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",8202099.738],PARAMETER["false_northing",0],AUTHORITY["EPSG","3646"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3647 : NAD83(NSRS2007) / Oregon South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3647,'EPSG',3647,'PROJCS["NAD83(NSRS2007) / Oregon South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3647"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3648 : NAD83(NSRS2007) / Oregon South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3648,'EPSG',3648,'PROJCS["NAD83(NSRS2007) / Oregon South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",4921259.843],PARAMETER["false_northing",0],AUTHORITY["EPSG","3648"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3649 : NAD83(NSRS2007) / Pennsylvania North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3649,'EPSG',3649,'PROJCS["NAD83(NSRS2007) / Pennsylvania North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3649"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3650 : NAD83(NSRS2007) / Pennsylvania North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3650,'EPSG',3650,'PROJCS["NAD83(NSRS2007) / Pennsylvania North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3650"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3651 : NAD83(NSRS2007) / Pennsylvania South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3651,'EPSG',3651,'PROJCS["NAD83(NSRS2007) / Pennsylvania South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3651"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3652 : NAD83(NSRS2007) / Pennsylvania South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3652,'EPSG',3652,'PROJCS["NAD83(NSRS2007) / Pennsylvania South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3652"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3653 : NAD83(NSRS2007) / Rhode Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3653,'EPSG',3653,'PROJCS["NAD83(NSRS2007) / Rhode Island",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3653"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3654 : NAD83(NSRS2007) / Rhode Island (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3654,'EPSG',3654,'PROJCS["NAD83(NSRS2007) / Rhode Island (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",328083.3333],PARAMETER["false_northing",0],AUTHORITY["EPSG","3654"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3655 : NAD83(NSRS2007) / South Carolina --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3655,'EPSG',3655,'PROJCS["NAD83(NSRS2007) / South Carolina",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",609600],PARAMETER["false_northing",0],AUTHORITY["EPSG","3655"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3656 : NAD83(NSRS2007) / South Carolina (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3656,'EPSG',3656,'PROJCS["NAD83(NSRS2007) / South Carolina (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3656"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3657 : NAD83(NSRS2007) / South Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3657,'EPSG',3657,'PROJCS["NAD83(NSRS2007) / South Dakota North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3657"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3658 : NAD83(NSRS2007) / South Dakota North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3658,'EPSG',3658,'PROJCS["NAD83(NSRS2007) / South Dakota North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3658"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3659 : NAD83(NSRS2007) / South Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3659,'EPSG',3659,'PROJCS["NAD83(NSRS2007) / South Dakota South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3659"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3660 : NAD83(NSRS2007) / South Dakota South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3660,'EPSG',3660,'PROJCS["NAD83(NSRS2007) / South Dakota South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3660"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3661 : NAD83(NSRS2007) / Tennessee --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3661,'EPSG',3661,'PROJCS["NAD83(NSRS2007) / Tennessee",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3661"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3662 : NAD83(NSRS2007) / Tennessee (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3662,'EPSG',3662,'PROJCS["NAD83(NSRS2007) / Tennessee (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3662"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3663 : NAD83(NSRS2007) / Texas Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3663,'EPSG',3663,'PROJCS["NAD83(NSRS2007) / Texas Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",700000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3663"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3664 : NAD83(NSRS2007) / Texas Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3664,'EPSG',3664,'PROJCS["NAD83(NSRS2007) / Texas Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2296583.333],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3664"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3665 : NAD83(NSRS2007) / Texas Centric Albers Equal Area --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3665,'EPSG',3665,'PROJCS["NAD83(NSRS2007) / Texas Centric Albers Equal Area",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_center",18],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","3665"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3666 : NAD83(NSRS2007) / Texas Centric Lambert Conformal --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3666,'EPSG',3666,'PROJCS["NAD83(NSRS2007) / Texas Centric Lambert Conformal",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.5],PARAMETER["standard_parallel_2",35],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1500000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3666"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3667 : NAD83(NSRS2007) / Texas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3667,'EPSG',3667,'PROJCS["NAD83(NSRS2007) / Texas North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3667"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3668 : NAD83(NSRS2007) / Texas North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3668,'EPSG',3668,'PROJCS["NAD83(NSRS2007) / Texas North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",656166.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3668"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3669 : NAD83(NSRS2007) / Texas North Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3669,'EPSG',3669,'PROJCS["NAD83(NSRS2007) / Texas North Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3669"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3670 : NAD83(NSRS2007) / Texas North Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3670,'EPSG',3670,'PROJCS["NAD83(NSRS2007) / Texas North Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","3670"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3671 : NAD83(NSRS2007) / Texas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3671,'EPSG',3671,'PROJCS["NAD83(NSRS2007) / Texas South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",300000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","3671"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3672 : NAD83(NSRS2007) / Texas South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3672,'EPSG',3672,'PROJCS["NAD83(NSRS2007) / Texas South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",16404166.667],AUTHORITY["EPSG","3672"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3673 : NAD83(NSRS2007) / Texas South Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3673,'EPSG',3673,'PROJCS["NAD83(NSRS2007) / Texas South Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","3673"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3674 : NAD83(NSRS2007) / Texas South Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3674,'EPSG',3674,'PROJCS["NAD83(NSRS2007) / Texas South Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",1968500],PARAMETER["false_northing",13123333.333],AUTHORITY["EPSG","3674"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3675 : NAD83(NSRS2007) / Utah Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3675,'EPSG',3675,'PROJCS["NAD83(NSRS2007) / Utah Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3675"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3676 : NAD83(NSRS2007) / Utah Central (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3676,'EPSG',3676,'PROJCS["NAD83(NSRS2007) / Utah Central (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",6561679.79],AUTHORITY["EPSG","3676"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3677 : NAD83(NSRS2007) / Utah Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3677,'EPSG',3677,'PROJCS["NAD83(NSRS2007) / Utah Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",6561666.666700001],AUTHORITY["EPSG","3677"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3678 : NAD83(NSRS2007) / Utah North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3678,'EPSG',3678,'PROJCS["NAD83(NSRS2007) / Utah North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3678"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3679 : NAD83(NSRS2007) / Utah North (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3679,'EPSG',3679,'PROJCS["NAD83(NSRS2007) / Utah North (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",3280839.895],AUTHORITY["EPSG","3679"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3680 : NAD83(NSRS2007) / Utah North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3680,'EPSG',3680,'PROJCS["NAD83(NSRS2007) / Utah North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",3280833.333300001],AUTHORITY["EPSG","3680"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3681 : NAD83(NSRS2007) / Utah South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3681,'EPSG',3681,'PROJCS["NAD83(NSRS2007) / Utah South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","3681"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3682 : NAD83(NSRS2007) / Utah South (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3682,'EPSG',3682,'PROJCS["NAD83(NSRS2007) / Utah South (ft)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640419.948],PARAMETER["false_northing",9842519.685],AUTHORITY["EPSG","3682"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs '); --- --- EPSG 3683 : NAD83(NSRS2007) / Utah South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3683,'EPSG',3683,'PROJCS["NAD83(NSRS2007) / Utah South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",9842500.000000002],AUTHORITY["EPSG","3683"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3684 : NAD83(NSRS2007) / Vermont --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3684,'EPSG',3684,'PROJCS["NAD83(NSRS2007) / Vermont",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3684"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3685 : NAD83(NSRS2007) / Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3685,'EPSG',3685,'PROJCS["NAD83(NSRS2007) / Virginia North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","3685"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3686 : NAD83(NSRS2007) / Virginia North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3686,'EPSG',3686,'PROJCS["NAD83(NSRS2007) / Virginia North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",6561666.667],AUTHORITY["EPSG","3686"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3687 : NAD83(NSRS2007) / Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3687,'EPSG',3687,'PROJCS["NAD83(NSRS2007) / Virginia South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","3687"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3688 : NAD83(NSRS2007) / Virginia South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3688,'EPSG',3688,'PROJCS["NAD83(NSRS2007) / Virginia South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",11482916.667],PARAMETER["false_northing",3280833.333],AUTHORITY["EPSG","3688"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3689 : NAD83(NSRS2007) / Washington North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3689,'EPSG',3689,'PROJCS["NAD83(NSRS2007) / Washington North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3689"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3690 : NAD83(NSRS2007) / Washington North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3690,'EPSG',3690,'PROJCS["NAD83(NSRS2007) / Washington North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3690"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3691 : NAD83(NSRS2007) / Washington South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3691,'EPSG',3691,'PROJCS["NAD83(NSRS2007) / Washington South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3691"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3692 : NAD83(NSRS2007) / Washington South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3692,'EPSG',3692,'PROJCS["NAD83(NSRS2007) / Washington South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3692"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3693 : NAD83(NSRS2007) / West Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3693,'EPSG',3693,'PROJCS["NAD83(NSRS2007) / West Virginia North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3693"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3694 : NAD83(NSRS2007) / West Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3694,'EPSG',3694,'PROJCS["NAD83(NSRS2007) / West Virginia South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3694"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3695 : NAD83(NSRS2007) / Wisconsin Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3695,'EPSG',3695,'PROJCS["NAD83(NSRS2007) / Wisconsin Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3695"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3696 : NAD83(NSRS2007) / Wisconsin Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3696,'EPSG',3696,'PROJCS["NAD83(NSRS2007) / Wisconsin Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3696"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3697 : NAD83(NSRS2007) / Wisconsin North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3697,'EPSG',3697,'PROJCS["NAD83(NSRS2007) / Wisconsin North",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3697"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3698 : NAD83(NSRS2007) / Wisconsin North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3698,'EPSG',3698,'PROJCS["NAD83(NSRS2007) / Wisconsin North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3698"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3699 : NAD83(NSRS2007) / Wisconsin South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3699,'EPSG',3699,'PROJCS["NAD83(NSRS2007) / Wisconsin South",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3699"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3700 : NAD83(NSRS2007) / Wisconsin South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3700,'EPSG',3700,'PROJCS["NAD83(NSRS2007) / Wisconsin South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3700"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3701 : NAD83(NSRS2007) / Wisconsin Transverse Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3701,'EPSG',3701,'PROJCS["NAD83(NSRS2007) / Wisconsin Transverse Mercator",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",520000],PARAMETER["false_northing",-4480000],AUTHORITY["EPSG","3701"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3702 : NAD83(NSRS2007) / Wyoming East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3702,'EPSG',3702,'PROJCS["NAD83(NSRS2007) / Wyoming East",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3702"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3703 : NAD83(NSRS2007) / Wyoming East Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3703,'EPSG',3703,'PROJCS["NAD83(NSRS2007) / Wyoming East Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",400000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3703"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3704 : NAD83(NSRS2007) / Wyoming West Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3704,'EPSG',3704,'PROJCS["NAD83(NSRS2007) / Wyoming West Central",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3704"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3705 : NAD83(NSRS2007) / Wyoming West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3705,'EPSG',3705,'PROJCS["NAD83(NSRS2007) / Wyoming West",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3705"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3706 : NAD83(NSRS2007) / UTM zone 59N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3706,'EPSG',3706,'PROJCS["NAD83(NSRS2007) / UTM zone 59N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3706"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3707 : NAD83(NSRS2007) / UTM zone 60N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3707,'EPSG',3707,'PROJCS["NAD83(NSRS2007) / UTM zone 60N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3707"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3708 : NAD83(NSRS2007) / UTM zone 1N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3708,'EPSG',3708,'PROJCS["NAD83(NSRS2007) / UTM zone 1N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3708"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3709 : NAD83(NSRS2007) / UTM zone 2N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3709,'EPSG',3709,'PROJCS["NAD83(NSRS2007) / UTM zone 2N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3709"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3710 : NAD83(NSRS2007) / UTM zone 3N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3710,'EPSG',3710,'PROJCS["NAD83(NSRS2007) / UTM zone 3N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3710"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3711 : NAD83(NSRS2007) / UTM zone 4N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3711,'EPSG',3711,'PROJCS["NAD83(NSRS2007) / UTM zone 4N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3711"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3712 : NAD83(NSRS2007) / UTM zone 5N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3712,'EPSG',3712,'PROJCS["NAD83(NSRS2007) / UTM zone 5N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3712"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3713 : NAD83(NSRS2007) / UTM zone 6N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3713,'EPSG',3713,'PROJCS["NAD83(NSRS2007) / UTM zone 6N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3713"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3714 : NAD83(NSRS2007) / UTM zone 7N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3714,'EPSG',3714,'PROJCS["NAD83(NSRS2007) / UTM zone 7N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3714"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3715 : NAD83(NSRS2007) / UTM zone 8N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3715,'EPSG',3715,'PROJCS["NAD83(NSRS2007) / UTM zone 8N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3715"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3716 : NAD83(NSRS2007) / UTM zone 9N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3716,'EPSG',3716,'PROJCS["NAD83(NSRS2007) / UTM zone 9N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3716"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3717 : NAD83(NSRS2007) / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3717,'EPSG',3717,'PROJCS["NAD83(NSRS2007) / UTM zone 10N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3717"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3718 : NAD83(NSRS2007) / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3718,'EPSG',3718,'PROJCS["NAD83(NSRS2007) / UTM zone 11N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3719 : NAD83(NSRS2007) / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3719,'EPSG',3719,'PROJCS["NAD83(NSRS2007) / UTM zone 12N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3720 : NAD83(NSRS2007) / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3720,'EPSG',3720,'PROJCS["NAD83(NSRS2007) / UTM zone 13N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3721 : NAD83(NSRS2007) / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3721,'EPSG',3721,'PROJCS["NAD83(NSRS2007) / UTM zone 14N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3721"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3722 : NAD83(NSRS2007) / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3722,'EPSG',3722,'PROJCS["NAD83(NSRS2007) / UTM zone 15N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3722"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3723 : NAD83(NSRS2007) / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3723,'EPSG',3723,'PROJCS["NAD83(NSRS2007) / UTM zone 16N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3723"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3724 : NAD83(NSRS2007) / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3724,'EPSG',3724,'PROJCS["NAD83(NSRS2007) / UTM zone 17N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3724"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3725 : NAD83(NSRS2007) / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3725,'EPSG',3725,'PROJCS["NAD83(NSRS2007) / UTM zone 18N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3725"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3726 : NAD83(NSRS2007) / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3726,'EPSG',3726,'PROJCS["NAD83(NSRS2007) / UTM zone 19N",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3726"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3727 : Reunion 1947 / TM Reunion --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3727,'EPSG',3727,'PROJCS["Reunion 1947 / TM Reunion",GEOGCS["Reunion 1947",DATUM["Reunion_1947",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[94,-948,-1262,0,0,0,0],AUTHORITY["EPSG","6626"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4626"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-21.11666666666667],PARAMETER["central_meridian",55.53333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",160000],PARAMETER["false_northing",50000],AUTHORITY["EPSG","3727"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3728 : NAD83(NSRS2007) / Ohio North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3728,'EPSG',3728,'PROJCS["NAD83(NSRS2007) / Ohio North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3728"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3729 : NAD83(NSRS2007) / Ohio South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3729,'EPSG',3729,'PROJCS["NAD83(NSRS2007) / Ohio South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3729"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3730 : NAD83(NSRS2007) / Wyoming East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3730,'EPSG',3730,'PROJCS["NAD83(NSRS2007) / Wyoming East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3730"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3731 : NAD83(NSRS2007) / Wyoming East Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3731,'EPSG',3731,'PROJCS["NAD83(NSRS2007) / Wyoming East Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3731"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3732 : NAD83(NSRS2007) / Wyoming West Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3732,'EPSG',3732,'PROJCS["NAD83(NSRS2007) / Wyoming West Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3732"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3733 : NAD83(NSRS2007) / Wyoming West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3733,'EPSG',3733,'PROJCS["NAD83(NSRS2007) / Wyoming West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3733"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3734 : NAD83 / Ohio North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3734,'EPSG',3734,'PROJCS["NAD83 / Ohio North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3734"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3735 : NAD83 / Ohio South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3735,'EPSG',3735,'PROJCS["NAD83 / Ohio South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3735"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3736 : NAD83 / Wyoming East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3736,'EPSG',3736,'PROJCS["NAD83 / Wyoming East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3736"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3737 : NAD83 / Wyoming East Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3737,'EPSG',3737,'PROJCS["NAD83 / Wyoming East Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3737"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3738 : NAD83 / Wyoming West Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3738,'EPSG',3738,'PROJCS["NAD83 / Wyoming West Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3738"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3739 : NAD83 / Wyoming West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3739,'EPSG',3739,'PROJCS["NAD83 / Wyoming West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3739"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3740 : NAD83(HARN) / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3740,'EPSG',3740,'PROJCS["NAD83(HARN) / UTM zone 10N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3740"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3741 : NAD83(HARN) / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3741,'EPSG',3741,'PROJCS["NAD83(HARN) / UTM zone 11N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3741"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3742 : NAD83(HARN) / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3742,'EPSG',3742,'PROJCS["NAD83(HARN) / UTM zone 12N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3742"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3743 : NAD83(HARN) / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3743,'EPSG',3743,'PROJCS["NAD83(HARN) / UTM zone 13N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3743"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3744 : NAD83(HARN) / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3744,'EPSG',3744,'PROJCS["NAD83(HARN) / UTM zone 14N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3744"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3745 : NAD83(HARN) / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3745,'EPSG',3745,'PROJCS["NAD83(HARN) / UTM zone 15N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3745"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3746 : NAD83(HARN) / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3746,'EPSG',3746,'PROJCS["NAD83(HARN) / UTM zone 16N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3746"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3747 : NAD83(HARN) / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3747,'EPSG',3747,'PROJCS["NAD83(HARN) / UTM zone 17N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3747"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3748 : NAD83(HARN) / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3748,'EPSG',3748,'PROJCS["NAD83(HARN) / UTM zone 18N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3748"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3749 : NAD83(HARN) / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3749,'EPSG',3749,'PROJCS["NAD83(HARN) / UTM zone 19N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3749"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3750 : NAD83(HARN) / UTM zone 4N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3750,'EPSG',3750,'PROJCS["NAD83(HARN) / UTM zone 4N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3750"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3751 : NAD83(HARN) / UTM zone 5N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3751,'EPSG',3751,'PROJCS["NAD83(HARN) / UTM zone 5N",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3751"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3752 : WGS 84 / Mercator 41 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3752,'EPSG',3752,'PROJCS["WGS 84 / Mercator 41 (deprecated)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["latitude_of_origin",-41],PARAMETER["central_meridian",100],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3752"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3753 : NAD83(HARN) / Ohio North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3753,'EPSG',3753,'PROJCS["NAD83(HARN) / Ohio North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3753"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3754 : NAD83(HARN) / Ohio South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3754,'EPSG',3754,'PROJCS["NAD83(HARN) / Ohio South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3754"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3755 : NAD83(HARN) / Wyoming East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3755,'EPSG',3755,'PROJCS["NAD83(HARN) / Wyoming East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",656166.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3755"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3756 : NAD83(HARN) / Wyoming East Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3756,'EPSG',3756,'PROJCS["NAD83(HARN) / Wyoming East Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1312333.3333],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3756"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3757 : NAD83(HARN) / Wyoming West Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3757,'EPSG',3757,'PROJCS["NAD83(HARN) / Wyoming West Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","3757"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3758 : NAD83(HARN) / Wyoming West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3758,'EPSG',3758,'PROJCS["NAD83(HARN) / Wyoming West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","3758"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3759 : NAD83 / Hawaii zone 3 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3759,'EPSG',3759,'PROJCS["NAD83 / Hawaii zone 3 (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3759"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3760 : NAD83(HARN) / Hawaii zone 3 (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3760,'EPSG',3760,'PROJCS["NAD83(HARN) / Hawaii zone 3 (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","3760"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3761 : NAD83(CSRS) / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3761,'EPSG',3761,'PROJCS["NAD83(CSRS) / UTM zone 22N",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3761"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3762 : WGS 84 / South Georgia Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3762,'EPSG',3762,'PROJCS["WGS 84 / South Georgia Lambert",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-54],PARAMETER["standard_parallel_2",-54.75],PARAMETER["latitude_of_origin",-55],PARAMETER["central_meridian",-37],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3762"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3763 : ETRS89 / Portugal TM06 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3763,'EPSG',3763,'PROJCS["ETRS89 / Portugal TM06",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66825833333333],PARAMETER["central_meridian",-8.133108333333334],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3763"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3764 : NZGD2000 / Chatham Island Circuit 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3764,'EPSG',3764,'PROJCS["NZGD2000 / Chatham Island Circuit 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44],PARAMETER["central_meridian",-176.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","3764"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3765 : HTRS96 / Croatia TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3765,'EPSG',3765,'PROJCS["HTRS96 / Croatia TM",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3765"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3766 : HTRS96 / Croatia LCC --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3766,'EPSG',3766,'PROJCS["HTRS96 / Croatia LCC",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.91666666666666],PARAMETER["standard_parallel_2",43.08333333333334],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3766"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3767 : HTRS96 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3767,'EPSG',3767,'PROJCS["HTRS96 / UTM zone 33N",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3767"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3768 : HTRS96 / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3768,'EPSG',3768,'PROJCS["HTRS96 / UTM zone 34N",GEOGCS["HTRS96",DATUM["Croatian_Terrestrial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6761"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4761"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3768"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3769 : Bermuda 1957 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3769,'EPSG',3769,'PROJCS["Bermuda 1957 / UTM zone 20N",GEOGCS["Bermuda 1957",DATUM["Bermuda_1957",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-73,213,296,0,0,0,0],AUTHORITY["EPSG","6216"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4216"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3769"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3770 : BDA2000 / Bermuda 2000 National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3770,'EPSG',3770,'PROJCS["BDA2000 / Bermuda 2000 National Grid",GEOGCS["BDA2000",DATUM["Bermuda_2000",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6762"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4762"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32],PARAMETER["central_meridian",-64.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",550000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3770"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3771 : NAD27 / Alberta 3TM ref merid 111 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3771,'EPSG',3771,'PROJCS["NAD27 / Alberta 3TM ref merid 111 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3771"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3772 : NAD27 / Alberta 3TM ref merid 114 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3772,'EPSG',3772,'PROJCS["NAD27 / Alberta 3TM ref merid 114 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3772"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3773 : NAD27 / Alberta 3TM ref merid 117 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3773,'EPSG',3773,'PROJCS["NAD27 / Alberta 3TM ref merid 117 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3773"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3774 : NAD27 / Alberta 3TM ref merid 120 W (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3774,'EPSG',3774,'PROJCS["NAD27 / Alberta 3TM ref merid 120 W (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3774"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3775 : NAD83 / Alberta 3TM ref merid 111 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3775,'EPSG',3775,'PROJCS["NAD83 / Alberta 3TM ref merid 111 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3775"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3776 : NAD83 / Alberta 3TM ref merid 114 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3776,'EPSG',3776,'PROJCS["NAD83 / Alberta 3TM ref merid 114 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3776"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3777 : NAD83 / Alberta 3TM ref merid 117 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3777,'EPSG',3777,'PROJCS["NAD83 / Alberta 3TM ref merid 117 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3777"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3778 : NAD83 / Alberta 3TM ref merid 120 W (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3778,'EPSG',3778,'PROJCS["NAD83 / Alberta 3TM ref merid 120 W (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3778"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3779 : NAD83(CSRS) / Alberta 3TM ref merid 111 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3779,'EPSG',3779,'PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 111 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3779"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3780 : NAD83(CSRS) / Alberta 3TM ref merid 114 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3780,'EPSG',3780,'PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 114 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3780"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3781 : NAD83(CSRS) / Alberta 3TM ref merid 117 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3781,'EPSG',3781,'PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 117 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3781"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3782 : NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3782,'EPSG',3782,'PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated)",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3782"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3783 : Pitcairn 2006 / Pitcairn TM 2006 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3783,'EPSG',3783,'PROJCS["Pitcairn 2006 / Pitcairn TM 2006",GEOGCS["Pitcairn 2006",DATUM["Pitcairn_2006",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6763"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4763"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-25.06855261111111],PARAMETER["central_meridian",-130.1129671111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",14200],PARAMETER["false_northing",15500],AUTHORITY["EPSG","3783"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3784 : Pitcairn 1967 / UTM zone 9S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3784,'EPSG',3784,'PROJCS["Pitcairn 1967 / UTM zone 9S",GEOGCS["Pitcairn 1967",DATUM["Pitcairn_1967",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[185,165,42,0,0,0,0],AUTHORITY["EPSG","6729"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4729"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3784"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3785 : Popular Visualisation CRS / Mercator (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3785,'EPSG',3785,'PROJCS["Popular Visualisation CRS / Mercator (deprecated)",GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3785"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs'); --- --- EPSG 3786 : World Equidistant Cylindrical (Sphere) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3786,'EPSG',3786,'PROJCS["World Equidistant Cylindrical (Sphere) (deprecated)",GEOGCS["Unspecified datum based upon the GRS 1980 Authalic Sphere",DATUM["Not_specified_based_on_GRS_1980_Authalic_Sphere",SPHEROID["GRS 1980 Authalic Sphere",6371007,0,AUTHORITY["EPSG","7048"]],AUTHORITY["EPSG","6047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4047"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Equirectangular"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3786"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs '); --- --- EPSG 3787 : MGI / Slovene National Grid (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3787,'EPSG',3787,'PROJCS["MGI / Slovene National Grid (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3787"],AXIS["Y",EAST],AXIS["X",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 3788 : NZGD2000 / Auckland Islands TM 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3788,'EPSG',3788,'PROJCS["NZGD2000 / Auckland Islands TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",166],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3788"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3789 : NZGD2000 / Campbell Island TM 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3789,'EPSG',3789,'PROJCS["NZGD2000 / Campbell Island TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",169],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3789"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3790 : NZGD2000 / Antipodes Islands TM 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3790,'EPSG',3790,'PROJCS["NZGD2000 / Antipodes Islands TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",179],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3790"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3791 : NZGD2000 / Raoul Island TM 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3791,'EPSG',3791,'PROJCS["NZGD2000 / Raoul Island TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-178],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3791"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3793 : NZGD2000 / Chatham Islands TM 2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3793,'EPSG',3793,'PROJCS["NZGD2000 / Chatham Islands TM 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-176.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","3793"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3794 : Slovenia 1996 / Slovene National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3794,'EPSG',3794,'PROJCS["Slovenia 1996 / Slovene National Grid",GEOGCS["Slovenia 1996",DATUM["Slovenia_Geodetic_Datum_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6765"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4765"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3794"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3795 : NAD27 / Cuba Norte --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3795,'EPSG',3795,'PROJCS["NAD27 / Cuba Norte",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",23],PARAMETER["standard_parallel_2",21.7],PARAMETER["latitude_of_origin",22.35],PARAMETER["central_meridian",-81],PARAMETER["false_easting",500000],PARAMETER["false_northing",280296.016],AUTHORITY["EPSG","3795"],AXIS["Y",NORTH],AXIS["X",EAST]]','+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3796 : NAD27 / Cuba Sur --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3796,'EPSG',3796,'PROJCS["NAD27 / Cuba Sur",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",21.3],PARAMETER["standard_parallel_2",20.13333333333333],PARAMETER["latitude_of_origin",20.71666666666667],PARAMETER["central_meridian",-76.83333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",229126.939],AUTHORITY["EPSG","3796"],AXIS["Y",NORTH],AXIS["X",EAST]]','+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3797 : NAD27 / MTQ Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3797,'EPSG',3797,'PROJCS["NAD27 / MTQ Lambert",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-70],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3797"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3798 : NAD83 / MTQ Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3798,'EPSG',3798,'PROJCS["NAD83 / MTQ Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-70],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3798"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3799 : NAD83(CSRS) / MTQ Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3799,'EPSG',3799,'PROJCS["NAD83(CSRS) / MTQ Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",50],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-70],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3799"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3800 : NAD27 / Alberta 3TM ref merid 120 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3800,'EPSG',3800,'PROJCS["NAD27 / Alberta 3TM ref merid 120 W",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3800"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 3801 : NAD83 / Alberta 3TM ref merid 120 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3801,'EPSG',3801,'PROJCS["NAD83 / Alberta 3TM ref merid 120 W",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3801"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3802 : NAD83(CSRS) / Alberta 3TM ref merid 120 W --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3802,'EPSG',3802,'PROJCS["NAD83(CSRS) / Alberta 3TM ref merid 120 W",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-120],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3802"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3812 : ETRS89 / Belgian Lambert 2008 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3812,'EPSG',3812,'PROJCS["ETRS89 / Belgian Lambert 2008",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",50.797815],PARAMETER["central_meridian",4.359215833333333],PARAMETER["false_easting",649328],PARAMETER["false_northing",665262],AUTHORITY["EPSG","3812"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3814 : NAD83 / Mississippi TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3814,'EPSG',3814,'PROJCS["NAD83 / Mississippi TM",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",-89.75],PARAMETER["scale_factor",0.9998335],PARAMETER["false_easting",500000],PARAMETER["false_northing",1300000],AUTHORITY["EPSG","3814"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3815 : NAD83(HARN) / Mississippi TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3815,'EPSG',3815,'PROJCS["NAD83(HARN) / Mississippi TM",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",-89.75],PARAMETER["scale_factor",0.9998335],PARAMETER["false_easting",500000],PARAMETER["false_northing",1300000],AUTHORITY["EPSG","3815"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3816 : NAD83(NSRS2007) / Mississippi TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3816,'EPSG',3816,'PROJCS["NAD83(NSRS2007) / Mississippi TM",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",-89.75],PARAMETER["scale_factor",0.9998335],PARAMETER["false_easting",500000],PARAMETER["false_northing",1300000],AUTHORITY["EPSG","3816"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3825 : TWD97 / TM2 zone 119 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3825,'EPSG',3825,'PROJCS["TWD97 / TM2 zone 119",GEOGCS["TWD97",DATUM["Taiwan_Datum_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1026"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3824"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3825"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3826 : TWD97 / TM2 zone 121 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3826,'EPSG',3826,'PROJCS["TWD97 / TM2 zone 121",GEOGCS["TWD97",DATUM["Taiwan_Datum_1997",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1026"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3824"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3826"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3827 : TWD67 / TM2 zone 119 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3827,'EPSG',3827,'PROJCS["TWD67 / TM2 zone 119",GEOGCS["TWD67",DATUM["Taiwan_Datum_1967",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],AUTHORITY["EPSG","1025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3821"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3827"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs '); --- --- EPSG 3828 : TWD67 / TM2 zone 121 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3828,'EPSG',3828,'PROJCS["TWD67 / TM2 zone 121",GEOGCS["TWD67",DATUM["Taiwan_Datum_1967",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],AUTHORITY["EPSG","1025"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3821"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3828"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs '); --- --- EPSG 3829 : Hu Tzu Shan / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3829,'EPSG',3829,'PROJCS["Hu Tzu Shan / UTM zone 51N",GEOGCS["Hu Tzu Shan 1950",DATUM["Hu_Tzu_Shan_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-637,-549,-203,0,0,0,0],AUTHORITY["EPSG","6236"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4236"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3829"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3832 : WGS 84 / PDC Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3832,'EPSG',3832,'PROJCS["WGS 84 / PDC Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",150],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3833 : Pulkovo 1942(58) / Gauss-Kruger zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3833,'EPSG',3833,'PROJCS["Pulkovo 1942(58) / Gauss-Kruger zone 2",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3833"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3834 : Pulkovo 1942(83) / Gauss-Kruger zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3834,'EPSG',3834,'PROJCS["Pulkovo 1942(83) / Gauss-Kruger zone 2",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3834"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3835 : Pulkovo 1942(83) / Gauss-Kruger zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3835,'EPSG',3835,'PROJCS["Pulkovo 1942(83) / Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3835"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3836 : Pulkovo 1942(83) / Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3836,'EPSG',3836,'PROJCS["Pulkovo 1942(83) / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3836"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3837 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3837,'EPSG',3837,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3837"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3838 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3838,'EPSG',3838,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3838"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3839 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3839,'EPSG',3839,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3839"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3840 : Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3840,'EPSG',3840,'PROJCS["Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3840"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs '); --- --- EPSG 3841 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3841,'EPSG',3841,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3841"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3842 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3842,'EPSG',3842,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3842"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3843 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3843,'EPSG',3843,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 (deprecated)",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3843"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3844 : Pulkovo 1942(58) / Stereo70 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3844,'EPSG',3844,'PROJCS["Pulkovo 1942(58) / Stereo70",GEOGCS["Pulkovo 1942(58)",DATUM["Pulkovo_1942_58",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[2.329,-147.042,-92.08,0.309,-0.325,-0.497,5.69],AUTHORITY["EPSG","6179"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4179"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3844"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=2.329,-147.042,-92.08,0.309,-0.325,-0.497,5.69 +units=m +no_defs '); --- --- EPSG 3845 : SWEREF99 / RT90 7.5 gon V emulation --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3845,'EPSG',3845,'PROJCS["SWEREF99 / RT90 7.5 gon V emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.30625],PARAMETER["scale_factor",1.000006],PARAMETER["false_easting",1500025.141],PARAMETER["false_northing",-667.282],AUTHORITY["EPSG","3845"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3846 : SWEREF99 / RT90 5 gon V emulation --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3846,'EPSG',3846,'PROJCS["SWEREF99 / RT90 5 gon V emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.55626666666667],PARAMETER["scale_factor",1.0000058],PARAMETER["false_easting",1500044.695],PARAMETER["false_northing",-667.13],AUTHORITY["EPSG","3846"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3847 : SWEREF99 / RT90 2.5 gon V emulation --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3847,'EPSG',3847,'PROJCS["SWEREF99 / RT90 2.5 gon V emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80628452944445],PARAMETER["scale_factor",1.00000561024],PARAMETER["false_easting",1500064.274],PARAMETER["false_northing",-667.711],AUTHORITY["EPSG","3847"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3848 : SWEREF99 / RT90 0 gon emulation --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3848,'EPSG',3848,'PROJCS["SWEREF99 / RT90 0 gon emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.0563],PARAMETER["scale_factor",1.0000054],PARAMETER["false_easting",1500083.521],PARAMETER["false_northing",-668.844],AUTHORITY["EPSG","3848"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3849 : SWEREF99 / RT90 2.5 gon O emulation --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3849,'EPSG',3849,'PROJCS["SWEREF99 / RT90 2.5 gon O emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20.30631666666667],PARAMETER["scale_factor",1.0000052],PARAMETER["false_easting",1500102.765],PARAMETER["false_northing",-670.706],AUTHORITY["EPSG","3849"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3850 : SWEREF99 / RT90 5 gon O emulation --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3850,'EPSG',3850,'PROJCS["SWEREF99 / RT90 5 gon O emulation",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22.55633333333333],PARAMETER["scale_factor",1.0000049],PARAMETER["false_easting",1500121.846],PARAMETER["false_northing",-672.557],AUTHORITY["EPSG","3850"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3851 : NZGD2000 / NZCS2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3851,'EPSG',3851,'PROJCS["NZGD2000 / NZCS2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-37.5],PARAMETER["standard_parallel_2",-44.5],PARAMETER["latitude_of_origin",-41],PARAMETER["central_meridian",173],PARAMETER["false_easting",3000000],PARAMETER["false_northing",7000000],AUTHORITY["EPSG","3851"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3852 : RSRGD2000 / DGLC2000 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3852,'EPSG',3852,'PROJCS["RSRGD2000 / DGLC2000",GEOGCS["RSRGD2000",DATUM["Ross_Sea_Region_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6764"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4764"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-76.66666666666667],PARAMETER["standard_parallel_2",-79.33333333333333],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",157],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3852"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3854 : County ST74 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3854,'EPSG',3854,'PROJCS["County ST74",GEOGCS["SWEREF99",DATUM["SWEREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6619"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4619"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18.05787],PARAMETER["scale_factor",0.99999506],PARAMETER["false_easting",100182.7406],PARAMETER["false_northing",-6500620.1207],AUTHORITY["EPSG","3854"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3857 : WGS 84 / Pseudo-Mercator --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3857,'EPSG',3857,'PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3857"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs'); --- --- EPSG 3873 : None --- -- (unable to translate) --- --- EPSG 3874 : None --- -- (unable to translate) --- --- EPSG 3875 : None --- -- (unable to translate) --- --- EPSG 3876 : None --- -- (unable to translate) --- --- EPSG 3877 : None --- -- (unable to translate) --- --- EPSG 3878 : None --- -- (unable to translate) --- --- EPSG 3879 : None --- -- (unable to translate) --- --- EPSG 3880 : None --- -- (unable to translate) --- --- EPSG 3881 : None --- -- (unable to translate) --- --- EPSG 3882 : None --- -- (unable to translate) --- --- EPSG 3883 : None --- -- (unable to translate) --- --- EPSG 3884 : None --- -- (unable to translate) --- --- EPSG 3885 : None --- -- (unable to translate) --- --- EPSG 3890 : IGRS / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3890,'EPSG',3890,'PROJCS["IGRS / UTM zone 37N",GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3890"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3891 : IGRS / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3891,'EPSG',3891,'PROJCS["IGRS / UTM zone 38N",GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3891"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3892 : IGRS / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3892,'EPSG',3892,'PROJCS["IGRS / UTM zone 39N",GEOGCS["IGRS",DATUM["Iraqi_Geospatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1029"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3889"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3892"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3893 : ED50 / Iraq National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3893,'EPSG',3893,'PROJCS["ED50 / Iraq National Grid",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.02626833333333],PARAMETER["central_meridian",46.5],PARAMETER["scale_factor",0.9994],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3893"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3907 : MGI 1901 / Balkans zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3907,'EPSG',3907,'PROJCS["MGI 1901 / Balkans zone 5",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3907"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3908 : MGI 1901 / Balkans zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3908,'EPSG',3908,'PROJCS["MGI 1901 / Balkans zone 6",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3908"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3909 : MGI 1901 / Balkans zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3909,'EPSG',3909,'PROJCS["MGI 1901 / Balkans zone 7",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3909"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3910 : MGI 1901 / Balkans zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3910,'EPSG',3910,'PROJCS["MGI 1901 / Balkans zone 8",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3910"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3911 : MGI 1901 / Slovenia Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3911,'EPSG',3911,'PROJCS["MGI 1901 / Slovenia Grid",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3911"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3912 : MGI 1901 / Slovene National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3912,'EPSG',3912,'PROJCS["MGI 1901 / Slovene National Grid",GEOGCS["MGI 1901",DATUM["MGI_1901",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","1031"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","3906"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","3912"],AXIS["Y",EAST],AXIS["X",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3920 : Puerto Rico / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3920,'EPSG',3920,'PROJCS["Puerto Rico / UTM zone 20N",GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3920"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3942 : RGF93 / CC42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3942,'EPSG',3942,'PROJCS["RGF93 / CC42",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.25],PARAMETER["standard_parallel_2",42.75],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","3942"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3943 : RGF93 / CC43 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3943,'EPSG',3943,'PROJCS["RGF93 / CC43",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.25],PARAMETER["standard_parallel_2",43.75],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","3943"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3944 : RGF93 / CC44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3944,'EPSG',3944,'PROJCS["RGF93 / CC44",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.25],PARAMETER["standard_parallel_2",44.75],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",3200000],AUTHORITY["EPSG","3944"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3945 : RGF93 / CC45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3945,'EPSG',3945,'PROJCS["RGF93 / CC45",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.25],PARAMETER["standard_parallel_2",45.75],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",4200000],AUTHORITY["EPSG","3945"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3946 : RGF93 / CC46 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3946,'EPSG',3946,'PROJCS["RGF93 / CC46",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.25],PARAMETER["standard_parallel_2",46.75],PARAMETER["latitude_of_origin",46],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",5200000],AUTHORITY["EPSG","3946"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3947 : RGF93 / CC47 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3947,'EPSG',3947,'PROJCS["RGF93 / CC47",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.25],PARAMETER["standard_parallel_2",47.75],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",6200000],AUTHORITY["EPSG","3947"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3948 : RGF93 / CC48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3948,'EPSG',3948,'PROJCS["RGF93 / CC48",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.25],PARAMETER["standard_parallel_2",48.75],PARAMETER["latitude_of_origin",48],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",7200000],AUTHORITY["EPSG","3948"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3949 : RGF93 / CC49 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3949,'EPSG',3949,'PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],AUTHORITY["EPSG","3949"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3950 : RGF93 / CC50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3950,'EPSG',3950,'PROJCS["RGF93 / CC50",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.25],PARAMETER["standard_parallel_2",50.75],PARAMETER["latitude_of_origin",50],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",9200000],AUTHORITY["EPSG","3950"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3968 : NAD83 / Virginia Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3968,'EPSG',3968,'PROJCS["NAD83 / Virginia Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37],PARAMETER["standard_parallel_2",39.5],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3968"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3969 : NAD83(HARN) / Virginia Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3969,'EPSG',3969,'PROJCS["NAD83(HARN) / Virginia Lambert",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37],PARAMETER["standard_parallel_2",39.5],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3969"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3970 : NAD83(NSRS2007) / Virginia Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3970,'EPSG',3970,'PROJCS["NAD83(NSRS2007) / Virginia Lambert",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37],PARAMETER["standard_parallel_2",39.5],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3970"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3973 : WGS 84 / NSIDC EASE-Grid North --- -- (unable to translate) --- --- EPSG 3974 : WGS 84 / NSIDC EASE-Grid South --- -- (unable to translate) --- --- EPSG 3975 : WGS 84 / NSIDC EASE-Grid Global --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3975,'EPSG',3975,'PROJCS["WGS 84 / NSIDC EASE-Grid Global",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["standard_parallel_1",30],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3975"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3976 : WGS 84 / NSIDC Sea Ice Polar Stereographic South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3976,'EPSG',3976,'PROJCS["WGS 84 / NSIDC Sea Ice Polar Stereographic South",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-70],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3976"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3978 : NAD83 / Canada Atlas Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3978,'EPSG',3978,'PROJCS["NAD83 / Canada Atlas Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-95],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3978"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3979 : NAD83(CSRS) / Canada Atlas Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3979,'EPSG',3979,'PROJCS["NAD83(CSRS) / Canada Atlas Lambert",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",77],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-95],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3979"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3985 : Katanga 1955 / Katanga Lambert (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3985,'EPSG',3985,'PROJCS["Katanga 1955 / Katanga Lambert (deprecated)",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-6.5],PARAMETER["standard_parallel_2",-11.5],PARAMETER["latitude_of_origin",9],PARAMETER["central_meridian",26],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3985"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3986 : Katanga 1955 / Katanga Gauss zone A --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3986,'EPSG',3986,'PROJCS["Katanga 1955 / Katanga Gauss zone A",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",30],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3986"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3987 : Katanga 1955 / Katanga Gauss zone B --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3987,'EPSG',3987,'PROJCS["Katanga 1955 / Katanga Gauss zone B",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3987"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3988 : Katanga 1955 / Katanga Gauss zone C --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3988,'EPSG',3988,'PROJCS["Katanga 1955 / Katanga Gauss zone C",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",26],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3988"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3989 : Katanga 1955 / Katanga Gauss zone D --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3989,'EPSG',3989,'PROJCS["Katanga 1955 / Katanga Gauss zone D",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","3989"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 3991 : Puerto Rico State Plane CS of 1927 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3991,'EPSG',3991,'PROJCS["Puerto Rico State Plane CS of 1927",GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3991"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3992 : Puerto Rico / St. Croix --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3992,'EPSG',3992,'PROJCS["Puerto Rico / St. Croix",GEOGCS["Puerto Rico",DATUM["Puerto_Rico",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[11,72,-101,0,0,0,0],AUTHORITY["EPSG","6139"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4139"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",500000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","3992"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 3993 : Guam 1963 / Guam SPCS --- -- (unable to translate) --- --- EPSG 3994 : WGS 84 / Mercator 41 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3994,'EPSG',3994,'PROJCS["WGS 84 / Mercator 41",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_2SP"],PARAMETER["standard_parallel_1",-41],PARAMETER["central_meridian",100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3994"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3995 : WGS 84 / Arctic Polar Stereographic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3995,'EPSG',3995,'PROJCS["WGS 84 / Arctic Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",71],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3995"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3996 : WGS 84 / IBCAO Polar Stereographic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3996,'EPSG',3996,'PROJCS["WGS 84 / IBCAO Polar Stereographic",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",75],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3996"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 3997 : WGS 84 / Dubai Local TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (3997,'EPSG',3997,'PROJCS["WGS 84 / Dubai Local TM",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",55.33333333333334],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3997"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 4026 : MOLDREF99 / Moldova TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4026,'EPSG',4026,'PROJCS["MOLDREF99 / Moldova TM",GEOGCS["MOLDREF99",DATUM["MOLDREF99",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","1032"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4023"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28.4],PARAMETER["scale_factor",0.99994],PARAMETER["false_easting",200000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4026"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4037 : WGS 84 / TMzn35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4037,'EPSG',4037,'PROJCS["WGS 84 / TMzn35N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4037"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 4038 : WGS 84 / TMzn36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4038,'EPSG',4038,'PROJCS["WGS 84 / TMzn36N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4038"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 4048 : RGRDC 2005 / Congo TM zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4048,'EPSG',4048,'PROJCS["RGRDC 2005 / Congo TM zone 12",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4048"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4049 : RGRDC 2005 / Congo TM zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4049,'EPSG',4049,'PROJCS["RGRDC 2005 / Congo TM zone 14",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",14],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4049"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4050 : RGRDC 2005 / Congo TM zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4050,'EPSG',4050,'PROJCS["RGRDC 2005 / Congo TM zone 16",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4050"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4051 : RGRDC 2005 / Congo TM zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4051,'EPSG',4051,'PROJCS["RGRDC 2005 / Congo TM zone 18",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4051"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4056 : RGRDC 2005 / Congo TM zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4056,'EPSG',4056,'PROJCS["RGRDC 2005 / Congo TM zone 20",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",20],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4056"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4057 : RGRDC 2005 / Congo TM zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4057,'EPSG',4057,'PROJCS["RGRDC 2005 / Congo TM zone 22",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",22],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4057"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4058 : RGRDC 2005 / Congo TM zone 24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4058,'EPSG',4058,'PROJCS["RGRDC 2005 / Congo TM zone 24",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4058"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4059 : RGRDC 2005 / Congo TM zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4059,'EPSG',4059,'PROJCS["RGRDC 2005 / Congo TM zone 26",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",26],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4059"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4060 : RGRDC 2005 / Congo TM zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4060,'EPSG',4060,'PROJCS["RGRDC 2005 / Congo TM zone 28",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4060"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4061 : RGRDC 2005 / UTM zone 33S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4061,'EPSG',4061,'PROJCS["RGRDC 2005 / UTM zone 33S",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4061"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4062 : RGRDC 2005 / UTM zone 34S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4062,'EPSG',4062,'PROJCS["RGRDC 2005 / UTM zone 34S",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4062"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4063 : RGRDC 2005 / UTM zone 35S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4063,'EPSG',4063,'PROJCS["RGRDC 2005 / UTM zone 35S",GEOGCS["RGRDC 2005",DATUM["Reseau_Geodesique_de_la_RDC_2005",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1033"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4046"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4063"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4071 : Chua / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4071,'EPSG',4071,'PROJCS["Chua / UTM zone 23S",GEOGCS["Chua",DATUM["Chua",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-134,229,-29,0,0,0,0],AUTHORITY["EPSG","6224"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4224"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4071"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4082 : REGCAN95 / UTM zone 27N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4082,'EPSG',4082,'PROJCS["REGCAN95 / UTM zone 27N",GEOGCS["REGCAN95",DATUM["Red_Geodesica_de_Canarias_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4081"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4082"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4083 : REGCAN95 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4083,'EPSG',4083,'PROJCS["REGCAN95 / UTM zone 28N",GEOGCS["REGCAN95",DATUM["Red_Geodesica_de_Canarias_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1035"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4081"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4083"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4087 : WGS 84 / World Equidistant Cylindrical --- -- (unable to translate) --- --- EPSG 4088 : World Equidistant Cylindrical (Sphere) --- -- (unable to translate) --- --- EPSG 4093 : ETRS89 / DKTM1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4093,'EPSG',4093,'PROJCS["ETRS89 / DKTM1",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",200000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4093"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4094 : ETRS89 / DKTM2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4094,'EPSG',4094,'PROJCS["ETRS89 / DKTM2",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",400000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4094"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=10 +k=0.99998 +x_0=400000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4095 : ETRS89 / DKTM3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4095,'EPSG',4095,'PROJCS["ETRS89 / DKTM3",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.75],PARAMETER["scale_factor",0.99998],PARAMETER["false_easting",600000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=11.75 +k=0.99998 +x_0=600000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4096 : ETRS89 / DKTM4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4096,'EPSG',4096,'PROJCS["ETRS89 / DKTM4",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",800000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","4096"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=800000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4217 : None --- -- (unable to translate) --- --- EPSG 4399 : None --- -- (unable to translate) --- --- EPSG 4400 : None --- -- (unable to translate) --- --- EPSG 4401 : None --- -- (unable to translate) --- --- EPSG 4402 : None --- -- (unable to translate) --- --- EPSG 4403 : None --- -- (unable to translate) --- --- EPSG 4404 : None --- -- (unable to translate) --- --- EPSG 4405 : None --- -- (unable to translate) --- --- EPSG 4406 : None --- -- (unable to translate) --- --- EPSG 4407 : None --- -- (unable to translate) --- --- EPSG 4408 : None --- -- (unable to translate) --- --- EPSG 4409 : None --- -- (unable to translate) --- --- EPSG 4410 : None --- -- (unable to translate) --- --- EPSG 4411 : None --- -- (unable to translate) --- --- EPSG 4412 : None --- -- (unable to translate) --- --- EPSG 4413 : None --- -- (unable to translate) --- --- EPSG 4414 : NAD83(HARN) / Guam Map Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4414,'EPSG',4414,'PROJCS["NAD83(HARN) / Guam Map Grid",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",13.5],PARAMETER["central_meridian",144.75],PARAMETER["scale_factor",1],PARAMETER["false_easting",100000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","4414"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4415 : Katanga 1955 / Katanga Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4415,'EPSG',4415,'PROJCS["Katanga 1955 / Katanga Lambert",GEOGCS["Katanga 1955",DATUM["Katanga_1955",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-103.746,-9.614,-255.95,0,0,0,0],AUTHORITY["EPSG","6695"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4695"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-6.5],PARAMETER["standard_parallel_2",-11.5],PARAMETER["latitude_of_origin",-9],PARAMETER["central_meridian",26],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","4415"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=-9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4417 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4417,'EPSG',4417,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4417"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4418 : None --- -- (unable to translate) --- --- EPSG 4419 : None --- -- (unable to translate) --- --- EPSG 4420 : None --- -- (unable to translate) --- --- EPSG 4421 : None --- -- (unable to translate) --- --- EPSG 4422 : None --- -- (unable to translate) --- --- EPSG 4423 : None --- -- (unable to translate) --- --- EPSG 4424 : None --- -- (unable to translate) --- --- EPSG 4425 : None --- -- (unable to translate) --- --- EPSG 4426 : None --- -- (unable to translate) --- --- EPSG 4427 : None --- -- (unable to translate) --- --- EPSG 4428 : None --- -- (unable to translate) --- --- EPSG 4429 : None --- -- (unable to translate) --- --- EPSG 4430 : None --- -- (unable to translate) --- --- EPSG 4431 : None --- -- (unable to translate) --- --- EPSG 4432 : None --- -- (unable to translate) --- --- EPSG 4433 : None --- -- (unable to translate) --- --- EPSG 4434 : Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4434,'EPSG',4434,'PROJCS["Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942(83)",DATUM["Pulkovo_1942_83",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[26,-121,-78,0,0,0,0],AUTHORITY["EPSG","6178"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4178"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4434"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4437 : NAD83(NSRS2007) / Puerto Rico and Virgin Is. --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4437,'EPSG',4437,'PROJCS["NAD83(NSRS2007) / Puerto Rico and Virgin Is.",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",200000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","4437"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4438 : None --- -- (unable to translate) --- --- EPSG 4439 : None --- -- (unable to translate) --- --- EPSG 4455 : NAD27 / Pennsylvania South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4455,'EPSG',4455,'PROJCS["NAD27 / Pennsylvania South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4455"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 4456 : NAD27 / New York Long Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4456,'EPSG',4456,'PROJCS["NAD27 / New York Long Island",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-74],PARAMETER["false_easting",2000000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","4456"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 4457 : NAD83 / South Dakota North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4457,'EPSG',4457,'PROJCS["NAD83 / South Dakota North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","4457"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 4462 : WGS 84 / Australian Centre for Remote Sensing Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4462,'EPSG',4462,'PROJCS["WGS 84 / Australian Centre for Remote Sensing Lambert",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",-18],PARAMETER["standard_parallel_2",-36],PARAMETER["latitude_of_origin",-27],PARAMETER["central_meridian",132],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","4462"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=-27 +lon_0=132 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 4467 : RGSPM06 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4467,'EPSG',4467,'PROJCS["RGSPM06 / UTM zone 21N",GEOGCS["RGSPM06",DATUM["Reseau_Geodesique_de_Saint_Pierre_et_Miquelon_2006",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1038"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4463"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4467"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4471 : RGM04 / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4471,'EPSG',4471,'PROJCS["RGM04 / UTM zone 38S",GEOGCS["RGM04",DATUM["Reseau_Geodesique_de_Mayotte_2004",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1036"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4470"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4471"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4474 : Cadastre 1997 / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4474,'EPSG',4474,'PROJCS["Cadastre 1997 / UTM zone 38S",GEOGCS["Combani 1950",DATUM["Combani_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-382,-59,-262,0,0,0,0],AUTHORITY["EPSG","6632"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4632"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","4474"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4484 : Mexican Datum of 1993 / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4484,'EPSG',4484,'PROJCS["Mexican Datum of 1993 / UTM zone 11N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4484"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4485 : Mexican Datum of 1993 / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4485,'EPSG',4485,'PROJCS["Mexican Datum of 1993 / UTM zone 12N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4485"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4486 : Mexican Datum of 1993 / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4486,'EPSG',4486,'PROJCS["Mexican Datum of 1993 / UTM zone 13N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4486"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4487 : Mexican Datum of 1993 / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4487,'EPSG',4487,'PROJCS["Mexican Datum of 1993 / UTM zone 14N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4487"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4488 : Mexican Datum of 1993 / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4488,'EPSG',4488,'PROJCS["Mexican Datum of 1993 / UTM zone 15N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4488"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4489 : Mexican Datum of 1993 / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4489,'EPSG',4489,'PROJCS["Mexican Datum of 1993 / UTM zone 16N",GEOGCS["Mexican Datum of 1993",DATUM["Mexican_Datum_of_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1042"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4483"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4489"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4491 : CGCS2000 / Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4491,'EPSG',4491,'PROJCS["CGCS2000 / Gauss-Kruger zone 13",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4491"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4492 : CGCS2000 / Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4492,'EPSG',4492,'PROJCS["CGCS2000 / Gauss-Kruger zone 14",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4492"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4493 : CGCS2000 / Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4493,'EPSG',4493,'PROJCS["CGCS2000 / Gauss-Kruger zone 15",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4493"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4494 : CGCS2000 / Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4494,'EPSG',4494,'PROJCS["CGCS2000 / Gauss-Kruger zone 16",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4494"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4495 : CGCS2000 / Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4495,'EPSG',4495,'PROJCS["CGCS2000 / Gauss-Kruger zone 17",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4495"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4496 : CGCS2000 / Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4496,'EPSG',4496,'PROJCS["CGCS2000 / Gauss-Kruger zone 18",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4496"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4497 : CGCS2000 / Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4497,'EPSG',4497,'PROJCS["CGCS2000 / Gauss-Kruger zone 19",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4497"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4498 : CGCS2000 / Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4498,'EPSG',4498,'PROJCS["CGCS2000 / Gauss-Kruger zone 20",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4498"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4499 : CGCS2000 / Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4499,'EPSG',4499,'PROJCS["CGCS2000 / Gauss-Kruger zone 21",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4499"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4500 : CGCS2000 / Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4500,'EPSG',4500,'PROJCS["CGCS2000 / Gauss-Kruger zone 22",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4500"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4501 : CGCS2000 / Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4501,'EPSG',4501,'PROJCS["CGCS2000 / Gauss-Kruger zone 23",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4501"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4502 : CGCS2000 / Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4502,'EPSG',4502,'PROJCS["CGCS2000 / Gauss-Kruger CM 75E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4502"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4503 : CGCS2000 / Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4503,'EPSG',4503,'PROJCS["CGCS2000 / Gauss-Kruger CM 81E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4503"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4504 : CGCS2000 / Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4504,'EPSG',4504,'PROJCS["CGCS2000 / Gauss-Kruger CM 87E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4504"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4505 : CGCS2000 / Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4505,'EPSG',4505,'PROJCS["CGCS2000 / Gauss-Kruger CM 93E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4505"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4506 : CGCS2000 / Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4506,'EPSG',4506,'PROJCS["CGCS2000 / Gauss-Kruger CM 99E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4506"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4507 : CGCS2000 / Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4507,'EPSG',4507,'PROJCS["CGCS2000 / Gauss-Kruger CM 105E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4507"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4508 : CGCS2000 / Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4508,'EPSG',4508,'PROJCS["CGCS2000 / Gauss-Kruger CM 111E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4508"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4509 : CGCS2000 / Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4509,'EPSG',4509,'PROJCS["CGCS2000 / Gauss-Kruger CM 117E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4509"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4510 : CGCS2000 / Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4510,'EPSG',4510,'PROJCS["CGCS2000 / Gauss-Kruger CM 123E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4510"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4511 : CGCS2000 / Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4511,'EPSG',4511,'PROJCS["CGCS2000 / Gauss-Kruger CM 129E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4511"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4512 : CGCS2000 / Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4512,'EPSG',4512,'PROJCS["CGCS2000 / Gauss-Kruger CM 135E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4512"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4513 : CGCS2000 / 3-degree Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4513,'EPSG',4513,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 25",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4513"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4514 : CGCS2000 / 3-degree Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4514,'EPSG',4514,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 26",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4514"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4515 : CGCS2000 / 3-degree Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4515,'EPSG',4515,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 27",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4515"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4516 : CGCS2000 / 3-degree Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4516,'EPSG',4516,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 28",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4516"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4517 : CGCS2000 / 3-degree Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4517,'EPSG',4517,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 29",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4517"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4518 : CGCS2000 / 3-degree Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4518,'EPSG',4518,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 30",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4518"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4519 : CGCS2000 / 3-degree Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4519,'EPSG',4519,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 31",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4519"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4520 : CGCS2000 / 3-degree Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4520,'EPSG',4520,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 32",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4520"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4521 : CGCS2000 / 3-degree Gauss-Kruger zone 33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4521,'EPSG',4521,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 33",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4521"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4522 : CGCS2000 / 3-degree Gauss-Kruger zone 34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4522,'EPSG',4522,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 34",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4522"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4523 : CGCS2000 / 3-degree Gauss-Kruger zone 35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4523,'EPSG',4523,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 35",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4523"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4524 : CGCS2000 / 3-degree Gauss-Kruger zone 36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4524,'EPSG',4524,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 36",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4524"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4525 : CGCS2000 / 3-degree Gauss-Kruger zone 37 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4525,'EPSG',4525,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 37",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4525"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4526 : CGCS2000 / 3-degree Gauss-Kruger zone 38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4526,'EPSG',4526,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 38",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4526"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4527 : CGCS2000 / 3-degree Gauss-Kruger zone 39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4527,'EPSG',4527,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 39",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4527"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4528 : CGCS2000 / 3-degree Gauss-Kruger zone 40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4528,'EPSG',4528,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 40",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4528"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4529 : CGCS2000 / 3-degree Gauss-Kruger zone 41 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4529,'EPSG',4529,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 41",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4529"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4530 : CGCS2000 / 3-degree Gauss-Kruger zone 42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4530,'EPSG',4530,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 42",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4530"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4531 : CGCS2000 / 3-degree Gauss-Kruger zone 43 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4531,'EPSG',4531,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 43",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4531"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4532 : CGCS2000 / 3-degree Gauss-Kruger zone 44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4532,'EPSG',4532,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 44",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4532"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4533 : CGCS2000 / 3-degree Gauss-Kruger zone 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4533,'EPSG',4533,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 45",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4533"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4534 : CGCS2000 / 3-degree Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4534,'EPSG',4534,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 75E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4534"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4535 : CGCS2000 / 3-degree Gauss-Kruger CM 78E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4535,'EPSG',4535,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 78E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4535"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4536 : CGCS2000 / 3-degree Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4536,'EPSG',4536,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 81E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4536"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4537 : CGCS2000 / 3-degree Gauss-Kruger CM 84E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4537,'EPSG',4537,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 84E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4537"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4538 : CGCS2000 / 3-degree Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4538,'EPSG',4538,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 87E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4538"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4539 : CGCS2000 / 3-degree Gauss-Kruger CM 90E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4539,'EPSG',4539,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 90E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4539"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4540 : CGCS2000 / 3-degree Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4540,'EPSG',4540,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 93E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4540"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4541 : CGCS2000 / 3-degree Gauss-Kruger CM 96E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4541,'EPSG',4541,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 96E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4541"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4542 : CGCS2000 / 3-degree Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4542,'EPSG',4542,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 99E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4542"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4543 : CGCS2000 / 3-degree Gauss-Kruger CM 102E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4543,'EPSG',4543,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 102E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4543"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4544 : CGCS2000 / 3-degree Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4544,'EPSG',4544,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 105E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4544"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4545 : CGCS2000 / 3-degree Gauss-Kruger CM 108E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4545,'EPSG',4545,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 108E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4545"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4546 : CGCS2000 / 3-degree Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4546,'EPSG',4546,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 111E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4546"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4547 : CGCS2000 / 3-degree Gauss-Kruger CM 114E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4547,'EPSG',4547,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 114E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4547"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4548 : CGCS2000 / 3-degree Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4548,'EPSG',4548,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 117E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4548"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4549 : CGCS2000 / 3-degree Gauss-Kruger CM 120E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4549,'EPSG',4549,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 120E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4549"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4550 : CGCS2000 / 3-degree Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4550,'EPSG',4550,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 123E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4550"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4551 : CGCS2000 / 3-degree Gauss-Kruger CM 126E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4551,'EPSG',4551,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 126E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4551"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4552 : CGCS2000 / 3-degree Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4552,'EPSG',4552,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 129E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4552"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4553 : CGCS2000 / 3-degree Gauss-Kruger CM 132E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4553,'EPSG',4553,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 132E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4553"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4554 : CGCS2000 / 3-degree Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4554,'EPSG',4554,'PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 135E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4554"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs '); --- --- EPSG 4559 : RRAF 1991 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4559,'EPSG',4559,'PROJCS["RRAF 1991 / UTM zone 20N",GEOGCS["RRAF 1991",DATUM["Reseau_de_Reference_des_Antilles_Francaises_1991",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","1047"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4558"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4559"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4568 : New Beijing / Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4568,'EPSG',4568,'PROJCS["New Beijing / Gauss-Kruger zone 13",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4568"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4569 : New Beijing / Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4569,'EPSG',4569,'PROJCS["New Beijing / Gauss-Kruger zone 14",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4569"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4570 : New Beijing / Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4570,'EPSG',4570,'PROJCS["New Beijing / Gauss-Kruger zone 15",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4570"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4571 : New Beijing / Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4571,'EPSG',4571,'PROJCS["New Beijing / Gauss-Kruger zone 16",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4571"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4572 : New Beijing / Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4572,'EPSG',4572,'PROJCS["New Beijing / Gauss-Kruger zone 17",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4572"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4573 : New Beijing / Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4573,'EPSG',4573,'PROJCS["New Beijing / Gauss-Kruger zone 18",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4573"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4574 : New Beijing / Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4574,'EPSG',4574,'PROJCS["New Beijing / Gauss-Kruger zone 19",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4574"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4575 : New Beijing / Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4575,'EPSG',4575,'PROJCS["New Beijing / Gauss-Kruger zone 20",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4575"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4576 : New Beijing / Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4576,'EPSG',4576,'PROJCS["New Beijing / Gauss-Kruger zone 21",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4576"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4577 : New Beijing / Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4577,'EPSG',4577,'PROJCS["New Beijing / Gauss-Kruger zone 22",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4577"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4578 : New Beijing / Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4578,'EPSG',4578,'PROJCS["New Beijing / Gauss-Kruger zone 23",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4578"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4579 : New Beijing / Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4579,'EPSG',4579,'PROJCS["New Beijing / Gauss-Kruger CM 75E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4579"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4580 : New Beijing / Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4580,'EPSG',4580,'PROJCS["New Beijing / Gauss-Kruger CM 81E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4580"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4581 : New Beijing / Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4581,'EPSG',4581,'PROJCS["New Beijing / Gauss-Kruger CM 87E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4581"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4582 : New Beijing / Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4582,'EPSG',4582,'PROJCS["New Beijing / Gauss-Kruger CM 93E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4582"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4583 : New Beijing / Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4583,'EPSG',4583,'PROJCS["New Beijing / Gauss-Kruger CM 99E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4583"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4584 : New Beijing / Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4584,'EPSG',4584,'PROJCS["New Beijing / Gauss-Kruger CM 105E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4584"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4585 : New Beijing / Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4585,'EPSG',4585,'PROJCS["New Beijing / Gauss-Kruger CM 111E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4585"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4586 : New Beijing / Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4586,'EPSG',4586,'PROJCS["New Beijing / Gauss-Kruger CM 117E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4586"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4587 : New Beijing / Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4587,'EPSG',4587,'PROJCS["New Beijing / Gauss-Kruger CM 123E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4587"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4588 : New Beijing / Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4588,'EPSG',4588,'PROJCS["New Beijing / Gauss-Kruger CM 129E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4588"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4589 : New Beijing / Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4589,'EPSG',4589,'PROJCS["New Beijing / Gauss-Kruger CM 135E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4589"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4647 : ETRS89 / UTM zone N32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4647,'EPSG',4647,'PROJCS["ETRS89 / UTM zone N32",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4647"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 4652 : New Beijing / 3-degree Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4652,'EPSG',4652,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 25",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4652"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4653 : New Beijing / 3-degree Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4653,'EPSG',4653,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 26",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4653"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4654 : New Beijing / 3-degree Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4654,'EPSG',4654,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 27",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4654"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4655 : New Beijing / 3-degree Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4655,'EPSG',4655,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 28",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4655"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4656 : New Beijing / 3-degree Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4656,'EPSG',4656,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 29",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4656"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4766 : New Beijing / 3-degree Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4766,'EPSG',4766,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 30",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4766"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4767 : New Beijing / 3-degree Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4767,'EPSG',4767,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 31",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4767"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4768 : New Beijing / 3-degree Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4768,'EPSG',4768,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 32",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4768"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4769 : New Beijing / 3-degree Gauss-Kruger zone 33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4769,'EPSG',4769,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 33",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",33500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4769"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4770 : New Beijing / 3-degree Gauss-Kruger zone 34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4770,'EPSG',4770,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 34",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",34500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4770"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4771 : New Beijing / 3-degree Gauss-Kruger zone 35 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4771,'EPSG',4771,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 35",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",35500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4771"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4772 : New Beijing / 3-degree Gauss-Kruger zone 36 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4772,'EPSG',4772,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 36",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",36500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4772"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4773 : New Beijing / 3-degree Gauss-Kruger zone 37 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4773,'EPSG',4773,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 37",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",37500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4773"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4774 : New Beijing / 3-degree Gauss-Kruger zone 38 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4774,'EPSG',4774,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 38",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",38500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4774"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4775 : New Beijing / 3-degree Gauss-Kruger zone 39 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4775,'EPSG',4775,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 39",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",39500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4775"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4776 : New Beijing / 3-degree Gauss-Kruger zone 40 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4776,'EPSG',4776,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 40",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",40500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4776"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4777 : New Beijing / 3-degree Gauss-Kruger zone 41 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4777,'EPSG',4777,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 41",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",41500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4777"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4778 : New Beijing / 3-degree Gauss-Kruger zone 42 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4778,'EPSG',4778,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 42",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",42500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4778"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4779 : New Beijing / 3-degree Gauss-Kruger zone 43 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4779,'EPSG',4779,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 43",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",43500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4779"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4780 : New Beijing / 3-degree Gauss-Kruger zone 44 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4780,'EPSG',4780,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 44",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",44500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4780"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4781 : New Beijing / 3-degree Gauss-Kruger zone 45 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4781,'EPSG',4781,'PROJCS["New Beijing / 3-degree Gauss-Kruger zone 45",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",45500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4781"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4782 : New Beijing / 3-degree Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4782,'EPSG',4782,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 75E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4782"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4783 : New Beijing / 3-degree Gauss-Kruger CM 78E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4783,'EPSG',4783,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 78E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",78],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4783"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4784 : New Beijing / 3-degree Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4784,'EPSG',4784,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 81E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4784"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4785 : New Beijing / 3-degree Gauss-Kruger CM 84E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4785,'EPSG',4785,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 84E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",84],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4785"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4786 : New Beijing / 3-degree Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4786,'EPSG',4786,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 87E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4786"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4787 : New Beijing / 3-degree Gauss-Kruger CM 90E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4787,'EPSG',4787,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 90E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4787"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4788 : New Beijing / 3-degree Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4788,'EPSG',4788,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 93E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4788"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4789 : New Beijing / 3-degree Gauss-Kruger CM 96E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4789,'EPSG',4789,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 96E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",96],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4789"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4790 : New Beijing / 3-degree Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4790,'EPSG',4790,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 99E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4790"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4791 : New Beijing / 3-degree Gauss-Kruger CM 102E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4791,'EPSG',4791,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 102E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",102],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4791"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4792 : New Beijing / 3-degree Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4792,'EPSG',4792,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 105E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4792"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4793 : New Beijing / 3-degree Gauss-Kruger CM 108E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4793,'EPSG',4793,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 108E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",108],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4793"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4794 : New Beijing / 3-degree Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4794,'EPSG',4794,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 111E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4794"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4795 : New Beijing / 3-degree Gauss-Kruger CM 114E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4795,'EPSG',4795,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 114E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",114],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4795"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4796 : New Beijing / 3-degree Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4796,'EPSG',4796,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 117E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4796"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4797 : New Beijing / 3-degree Gauss-Kruger CM 120E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4797,'EPSG',4797,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 120E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4797"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4798 : New Beijing / 3-degree Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4798,'EPSG',4798,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 123E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4798"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4799 : New Beijing / 3-degree Gauss-Kruger CM 126E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4799,'EPSG',4799,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 126E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",126],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4799"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4800 : New Beijing / 3-degree Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4800,'EPSG',4800,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 129E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4800"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4812 : New Beijing / 3-degree Gauss-Kruger CM 132E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4812,'EPSG',4812,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 132E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",132],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4812"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4822 : New Beijing / 3-degree Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4822,'EPSG',4822,'PROJCS["New Beijing / 3-degree Gauss-Kruger CM 135E",GEOGCS["New Beijing",DATUM["New_Beijing",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG","1045"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4555"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","4822"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs '); --- --- EPSG 4826 : WGS 84 / Cape Verde National --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (4826,'EPSG',4826,'PROJCS["WGS 84 / Cape Verde National",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",15],PARAMETER["standard_parallel_2",16.66666666666667],PARAMETER["latitude_of_origin",15.83333333333333],PARAMETER["central_meridian",-24],PARAMETER["false_easting",161587.83],PARAMETER["false_northing",128511.202],AUTHORITY["EPSG","4826"],AXIS["M",EAST],AXIS["P",NORTH]]','+proj=lcc +lat_1=15 +lat_2=16.66666666666667 +lat_0=15.83333333333333 +lon_0=-24 +x_0=161587.83 +y_0=128511.202 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 4839 : None --- -- (unable to translate) --- --- EPSG 4855 : None --- -- (unable to translate) --- --- EPSG 4856 : None --- -- (unable to translate) --- --- EPSG 4857 : None --- -- (unable to translate) --- --- EPSG 4858 : None --- -- (unable to translate) --- --- EPSG 4859 : None --- -- (unable to translate) --- --- EPSG 4860 : None --- -- (unable to translate) --- --- EPSG 4861 : None --- -- (unable to translate) --- --- EPSG 4862 : None --- -- (unable to translate) --- --- EPSG 4863 : None --- -- (unable to translate) --- --- EPSG 4864 : None --- -- (unable to translate) --- --- EPSG 4865 : None --- -- (unable to translate) --- --- EPSG 4866 : None --- -- (unable to translate) --- --- EPSG 4867 : None --- -- (unable to translate) --- --- EPSG 4868 : None --- -- (unable to translate) --- --- EPSG 4869 : None --- -- (unable to translate) --- --- EPSG 4870 : None --- -- (unable to translate) --- --- EPSG 4871 : None --- -- (unable to translate) --- --- EPSG 4872 : None --- -- (unable to translate) --- --- EPSG 4873 : None --- -- (unable to translate) --- --- EPSG 4874 : None --- -- (unable to translate) --- --- EPSG 4875 : None --- -- (unable to translate) --- --- EPSG 4876 : None --- -- (unable to translate) --- --- EPSG 4877 : None --- -- (unable to translate) --- --- EPSG 4878 : None --- -- (unable to translate) --- --- EPSG 4879 : None --- -- (unable to translate) --- --- EPSG 4880 : None --- -- (unable to translate) --- --- EPSG 5014 : None --- -- (unable to translate) --- --- EPSG 5015 : None --- -- (unable to translate) --- --- EPSG 5016 : None --- -- (unable to translate) --- --- EPSG 5017 : None --- -- (unable to translate) --- --- EPSG 5018 : None --- -- (unable to translate) --- --- EPSG 5041 : None --- -- (unable to translate) --- --- EPSG 5042 : None --- -- (unable to translate) --- --- EPSG 5048 : None --- -- (unable to translate) --- --- EPSG 5069 : None --- -- (unable to translate) --- --- EPSG 5070 : None --- -- (unable to translate) --- --- EPSG 5071 : None --- -- (unable to translate) --- --- EPSG 5072 : None --- -- (unable to translate) --- --- EPSG 5105 : None --- -- (unable to translate) --- --- EPSG 5106 : None --- -- (unable to translate) --- --- EPSG 5107 : None --- -- (unable to translate) --- --- EPSG 5108 : None --- -- (unable to translate) --- --- EPSG 5109 : None --- -- (unable to translate) --- --- EPSG 5110 : None --- -- (unable to translate) --- --- EPSG 5111 : None --- -- (unable to translate) --- --- EPSG 5112 : None --- -- (unable to translate) --- --- EPSG 5113 : None --- -- (unable to translate) --- --- EPSG 5114 : None --- -- (unable to translate) --- --- EPSG 5115 : None --- -- (unable to translate) --- --- EPSG 5116 : None --- -- (unable to translate) --- --- EPSG 5117 : None --- -- (unable to translate) --- --- EPSG 5118 : None --- -- (unable to translate) --- --- EPSG 5119 : None --- -- (unable to translate) --- --- EPSG 5120 : None --- -- (unable to translate) --- --- EPSG 5121 : None --- -- (unable to translate) --- --- EPSG 5122 : None --- -- (unable to translate) --- --- EPSG 5123 : None --- -- (unable to translate) --- --- EPSG 5124 : None --- -- (unable to translate) --- --- EPSG 5125 : None --- -- (unable to translate) --- --- EPSG 5126 : None --- -- (unable to translate) --- --- EPSG 5127 : None --- -- (unable to translate) --- --- EPSG 5128 : None --- -- (unable to translate) --- --- EPSG 5129 : None --- -- (unable to translate) --- --- EPSG 5130 : None --- -- (unable to translate) --- --- EPSG 5167 : None --- -- (unable to translate) --- --- EPSG 5168 : None --- -- (unable to translate) --- --- EPSG 5169 : None --- -- (unable to translate) --- --- EPSG 5170 : None --- -- (unable to translate) --- --- EPSG 5171 : None --- -- (unable to translate) --- --- EPSG 5172 : None --- -- (unable to translate) --- --- EPSG 5173 : None --- -- (unable to translate) --- --- EPSG 5174 : None --- -- (unable to translate) --- --- EPSG 5175 : None --- -- (unable to translate) --- --- EPSG 5176 : None --- -- (unable to translate) --- --- EPSG 5177 : None --- -- (unable to translate) --- --- EPSG 5178 : None --- -- (unable to translate) --- --- EPSG 5179 : None --- -- (unable to translate) --- --- EPSG 5180 : None --- -- (unable to translate) --- --- EPSG 5181 : None --- -- (unable to translate) --- --- EPSG 5182 : None --- -- (unable to translate) --- --- EPSG 5183 : None --- -- (unable to translate) --- --- EPSG 5184 : None --- -- (unable to translate) --- --- EPSG 5185 : None --- -- (unable to translate) --- --- EPSG 5186 : None --- -- (unable to translate) --- --- EPSG 5187 : None --- -- (unable to translate) --- --- EPSG 5188 : None --- -- (unable to translate) --- --- EPSG 5221 : None --- -- (unable to translate) --- --- EPSG 5223 : None --- -- (unable to translate) --- --- EPSG 5224 : None --- -- (unable to translate) --- --- EPSG 5225 : None --- -- (unable to translate) --- --- EPSG 5234 : None --- -- (unable to translate) --- --- EPSG 5235 : None --- -- (unable to translate) --- --- EPSG 5243 : None --- -- (unable to translate) --- --- EPSG 5247 : None --- -- (unable to translate) --- --- EPSG 5253 : None --- -- (unable to translate) --- --- EPSG 5254 : None --- -- (unable to translate) --- --- EPSG 5255 : None --- -- (unable to translate) --- --- EPSG 5256 : None --- -- (unable to translate) --- --- EPSG 5257 : None --- -- (unable to translate) --- --- EPSG 5258 : None --- -- (unable to translate) --- --- EPSG 5259 : None --- -- (unable to translate) --- --- EPSG 5266 : None --- -- (unable to translate) --- --- EPSG 5269 : None --- -- (unable to translate) --- --- EPSG 5270 : None --- -- (unable to translate) --- --- EPSG 5271 : None --- -- (unable to translate) --- --- EPSG 5272 : None --- -- (unable to translate) --- --- EPSG 5273 : None --- -- (unable to translate) --- --- EPSG 5274 : None --- -- (unable to translate) --- --- EPSG 5275 : None --- -- (unable to translate) --- --- EPSG 5292 : None --- -- (unable to translate) --- --- EPSG 5293 : None --- -- (unable to translate) --- --- EPSG 5294 : None --- -- (unable to translate) --- --- EPSG 5295 : None --- -- (unable to translate) --- --- EPSG 5296 : None --- -- (unable to translate) --- --- EPSG 5297 : None --- -- (unable to translate) --- --- EPSG 5298 : None --- -- (unable to translate) --- --- EPSG 5299 : None --- -- (unable to translate) --- --- EPSG 5300 : None --- -- (unable to translate) --- --- EPSG 5301 : None --- -- (unable to translate) --- --- EPSG 5302 : None --- -- (unable to translate) --- --- EPSG 5303 : None --- -- (unable to translate) --- --- EPSG 5304 : None --- -- (unable to translate) --- --- EPSG 5305 : None --- -- (unable to translate) --- --- EPSG 5306 : None --- -- (unable to translate) --- --- EPSG 5307 : None --- -- (unable to translate) --- --- EPSG 5308 : None --- -- (unable to translate) --- --- EPSG 5309 : None --- -- (unable to translate) --- --- EPSG 5310 : None --- -- (unable to translate) --- --- EPSG 5311 : None --- -- (unable to translate) --- --- EPSG 5316 : None --- -- (unable to translate) --- --- EPSG 5320 : None --- -- (unable to translate) --- --- EPSG 5321 : None --- -- (unable to translate) --- --- EPSG 5325 : None --- -- (unable to translate) --- --- EPSG 5329 : None --- -- (unable to translate) --- --- EPSG 5330 : None --- -- (unable to translate) --- --- EPSG 5331 : None --- -- (unable to translate) --- --- EPSG 5337 : None --- -- (unable to translate) --- --- EPSG 5343 : None --- -- (unable to translate) --- --- EPSG 5344 : None --- -- (unable to translate) --- --- EPSG 5345 : None --- -- (unable to translate) --- --- EPSG 5346 : None --- -- (unable to translate) --- --- EPSG 5347 : None --- -- (unable to translate) --- --- EPSG 5348 : None --- -- (unable to translate) --- --- EPSG 5349 : None --- -- (unable to translate) --- --- EPSG 5355 : None --- -- (unable to translate) --- --- EPSG 5356 : None --- -- (unable to translate) --- --- EPSG 5357 : None --- -- (unable to translate) --- --- EPSG 5361 : None --- -- (unable to translate) --- --- EPSG 5362 : None --- -- (unable to translate) --- --- EPSG 5367 : None --- -- (unable to translate) --- --- EPSG 5382 : None --- -- (unable to translate) --- --- EPSG 5383 : None --- -- (unable to translate) --- --- EPSG 5387 : None --- -- (unable to translate) --- --- EPSG 5388 : None --- -- (unable to translate) --- --- EPSG 5389 : None --- -- (unable to translate) --- --- EPSG 5396 : None --- -- (unable to translate) --- --- EPSG 5456 : None --- -- (unable to translate) --- --- EPSG 5457 : None --- -- (unable to translate) --- --- EPSG 5458 : None --- -- (unable to translate) --- --- EPSG 5459 : None --- -- (unable to translate) --- --- EPSG 5460 : None --- -- (unable to translate) --- --- EPSG 5461 : None --- -- (unable to translate) --- --- EPSG 5462 : None --- -- (unable to translate) --- --- EPSG 5463 : None --- -- (unable to translate) --- --- EPSG 5466 : None --- -- (unable to translate) --- --- EPSG 5469 : None --- -- (unable to translate) --- --- EPSG 5472 : None --- -- (unable to translate) --- --- EPSG 5479 : None --- -- (unable to translate) --- --- EPSG 5480 : None --- -- (unable to translate) --- --- EPSG 5481 : None --- -- (unable to translate) --- --- EPSG 5482 : None --- -- (unable to translate) --- --- EPSG 5490 : None --- -- (unable to translate) --- --- EPSG 5513 : None --- -- (unable to translate) --- --- EPSG 5514 : None --- -- (unable to translate) --- --- EPSG 5515 : None --- -- (unable to translate) --- --- EPSG 5516 : None --- -- (unable to translate) --- --- EPSG 5518 : None --- -- (unable to translate) --- --- EPSG 5519 : None --- -- (unable to translate) --- --- EPSG 5520 : None --- -- (unable to translate) --- --- EPSG 5523 : None --- -- (unable to translate) --- --- EPSG 5530 : None --- -- (unable to translate) --- --- EPSG 5531 : None --- -- (unable to translate) --- --- EPSG 5532 : None --- -- (unable to translate) --- --- EPSG 5533 : None --- -- (unable to translate) --- --- EPSG 5534 : None --- -- (unable to translate) --- --- EPSG 5535 : None --- -- (unable to translate) --- --- EPSG 5536 : None --- -- (unable to translate) --- --- EPSG 5537 : None --- -- (unable to translate) --- --- EPSG 5538 : None --- -- (unable to translate) --- --- EPSG 5539 : None --- -- (unable to translate) --- --- EPSG 5550 : None --- -- (unable to translate) --- --- EPSG 5551 : None --- -- (unable to translate) --- --- EPSG 5552 : None --- -- (unable to translate) --- --- EPSG 5559 : None --- -- (unable to translate) --- --- EPSG 5819 : EPSG topocentric example A --- -- (unable to translate) --- --- EPSG 5820 : EPSG topocentric example B --- -- (unable to translate) --- --- EPSG 5821 : EPSG vertical perspective example --- -- (unable to translate) --- --- EPSG 20004 : Pulkovo 1995 / Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20004,'EPSG',20004,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20004"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20005 : Pulkovo 1995 / Gauss-Kruger zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20005,'EPSG',20005,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 5",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20005"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20006 : Pulkovo 1995 / Gauss-Kruger zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20006,'EPSG',20006,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 6",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20006"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20007 : Pulkovo 1995 / Gauss-Kruger zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20007,'EPSG',20007,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 7",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20007"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20008 : Pulkovo 1995 / Gauss-Kruger zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20008,'EPSG',20008,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 8",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20008"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20009 : Pulkovo 1995 / Gauss-Kruger zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20009,'EPSG',20009,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 9",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20009"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20010 : Pulkovo 1995 / Gauss-Kruger zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20010,'EPSG',20010,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 10",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20010"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20011 : Pulkovo 1995 / Gauss-Kruger zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20011,'EPSG',20011,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 11",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20011"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20012 : Pulkovo 1995 / Gauss-Kruger zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20012,'EPSG',20012,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 12",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20012"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20013 : Pulkovo 1995 / Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20013,'EPSG',20013,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 13",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20013"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20014 : Pulkovo 1995 / Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20014,'EPSG',20014,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 14",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20014"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20015 : Pulkovo 1995 / Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20015,'EPSG',20015,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 15",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20015"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20016 : Pulkovo 1995 / Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20016,'EPSG',20016,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 16",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20016"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20017 : Pulkovo 1995 / Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20017,'EPSG',20017,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 17",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20017"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20018 : Pulkovo 1995 / Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20018,'EPSG',20018,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 18",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20018"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20019 : Pulkovo 1995 / Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20019,'EPSG',20019,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 19",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20019"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20020 : Pulkovo 1995 / Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20020,'EPSG',20020,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 20",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20020"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20021 : Pulkovo 1995 / Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20021,'EPSG',20021,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 21",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20021"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20022 : Pulkovo 1995 / Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20022,'EPSG',20022,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 22",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20022"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20023 : Pulkovo 1995 / Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20023,'EPSG',20023,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 23",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20023"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20024 : Pulkovo 1995 / Gauss-Kruger zone 24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20024,'EPSG',20024,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 24",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20024"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20025 : Pulkovo 1995 / Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20025,'EPSG',20025,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 25",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20025"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20026 : Pulkovo 1995 / Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20026,'EPSG',20026,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 26",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20026"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20027 : Pulkovo 1995 / Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20027,'EPSG',20027,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 27",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20027"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20028 : Pulkovo 1995 / Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20028,'EPSG',20028,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 28",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20028"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20029 : Pulkovo 1995 / Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20029,'EPSG',20029,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 29",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20029"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20030 : Pulkovo 1995 / Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20030,'EPSG',20030,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 30",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20030"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20031 : Pulkovo 1995 / Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20031,'EPSG',20031,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 31",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20031"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20032 : Pulkovo 1995 / Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20032,'EPSG',20032,'PROJCS["Pulkovo 1995 / Gauss-Kruger zone 32",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20032"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20064 : Pulkovo 1995 / Gauss-Kruger 4N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20064,'EPSG',20064,'PROJCS["Pulkovo 1995 / Gauss-Kruger 4N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20064"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20065 : Pulkovo 1995 / Gauss-Kruger 5N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20065,'EPSG',20065,'PROJCS["Pulkovo 1995 / Gauss-Kruger 5N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20065"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20066 : Pulkovo 1995 / Gauss-Kruger 6N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20066,'EPSG',20066,'PROJCS["Pulkovo 1995 / Gauss-Kruger 6N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20066"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20067 : Pulkovo 1995 / Gauss-Kruger 7N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20067,'EPSG',20067,'PROJCS["Pulkovo 1995 / Gauss-Kruger 7N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20067"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20068 : Pulkovo 1995 / Gauss-Kruger 8N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20068,'EPSG',20068,'PROJCS["Pulkovo 1995 / Gauss-Kruger 8N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20068"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20069 : Pulkovo 1995 / Gauss-Kruger 9N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20069,'EPSG',20069,'PROJCS["Pulkovo 1995 / Gauss-Kruger 9N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20069"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20070 : Pulkovo 1995 / Gauss-Kruger 10N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20070,'EPSG',20070,'PROJCS["Pulkovo 1995 / Gauss-Kruger 10N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20070"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20071 : Pulkovo 1995 / Gauss-Kruger 11N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20071,'EPSG',20071,'PROJCS["Pulkovo 1995 / Gauss-Kruger 11N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20071"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20072 : Pulkovo 1995 / Gauss-Kruger 12N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20072,'EPSG',20072,'PROJCS["Pulkovo 1995 / Gauss-Kruger 12N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20072"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20073 : Pulkovo 1995 / Gauss-Kruger 13N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20073,'EPSG',20073,'PROJCS["Pulkovo 1995 / Gauss-Kruger 13N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20073"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20074 : Pulkovo 1995 / Gauss-Kruger 14N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20074,'EPSG',20074,'PROJCS["Pulkovo 1995 / Gauss-Kruger 14N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20074"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20075 : Pulkovo 1995 / Gauss-Kruger 15N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20075,'EPSG',20075,'PROJCS["Pulkovo 1995 / Gauss-Kruger 15N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20075"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20076 : Pulkovo 1995 / Gauss-Kruger 16N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20076,'EPSG',20076,'PROJCS["Pulkovo 1995 / Gauss-Kruger 16N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20076"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20077 : Pulkovo 1995 / Gauss-Kruger 17N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20077,'EPSG',20077,'PROJCS["Pulkovo 1995 / Gauss-Kruger 17N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20077"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20078 : Pulkovo 1995 / Gauss-Kruger 18N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20078,'EPSG',20078,'PROJCS["Pulkovo 1995 / Gauss-Kruger 18N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20078"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20079 : Pulkovo 1995 / Gauss-Kruger 19N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20079,'EPSG',20079,'PROJCS["Pulkovo 1995 / Gauss-Kruger 19N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20079"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20080 : Pulkovo 1995 / Gauss-Kruger 20N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20080,'EPSG',20080,'PROJCS["Pulkovo 1995 / Gauss-Kruger 20N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20080"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20081 : Pulkovo 1995 / Gauss-Kruger 21N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20081,'EPSG',20081,'PROJCS["Pulkovo 1995 / Gauss-Kruger 21N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20081"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20082 : Pulkovo 1995 / Gauss-Kruger 22N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20082,'EPSG',20082,'PROJCS["Pulkovo 1995 / Gauss-Kruger 22N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20082"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20083 : Pulkovo 1995 / Gauss-Kruger 23N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20083,'EPSG',20083,'PROJCS["Pulkovo 1995 / Gauss-Kruger 23N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20083"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20084 : Pulkovo 1995 / Gauss-Kruger 24N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20084,'EPSG',20084,'PROJCS["Pulkovo 1995 / Gauss-Kruger 24N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20084"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20085 : Pulkovo 1995 / Gauss-Kruger 25N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20085,'EPSG',20085,'PROJCS["Pulkovo 1995 / Gauss-Kruger 25N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20085"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20086 : Pulkovo 1995 / Gauss-Kruger 26N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20086,'EPSG',20086,'PROJCS["Pulkovo 1995 / Gauss-Kruger 26N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20086"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20087 : Pulkovo 1995 / Gauss-Kruger 27N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20087,'EPSG',20087,'PROJCS["Pulkovo 1995 / Gauss-Kruger 27N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20087"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20088 : Pulkovo 1995 / Gauss-Kruger 28N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20088,'EPSG',20088,'PROJCS["Pulkovo 1995 / Gauss-Kruger 28N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20088"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20089 : Pulkovo 1995 / Gauss-Kruger 29N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20089,'EPSG',20089,'PROJCS["Pulkovo 1995 / Gauss-Kruger 29N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20089"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20090 : Pulkovo 1995 / Gauss-Kruger 30N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20090,'EPSG',20090,'PROJCS["Pulkovo 1995 / Gauss-Kruger 30N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20090"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20091 : Pulkovo 1995 / Gauss-Kruger 31N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20091,'EPSG',20091,'PROJCS["Pulkovo 1995 / Gauss-Kruger 31N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20091"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20092 : Pulkovo 1995 / Gauss-Kruger 32N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20092,'EPSG',20092,'PROJCS["Pulkovo 1995 / Gauss-Kruger 32N (deprecated)",GEOGCS["Pulkovo 1995",DATUM["Pulkovo_1995",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[24.82,-131.21,-82.66,-0,-0,0.16,-0.12],AUTHORITY["EPSG","6200"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4200"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20092"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs '); --- --- EPSG 20135 : Adindan / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20135,'EPSG',20135,'PROJCS["Adindan / UTM zone 35N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20135"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20136 : Adindan / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20136,'EPSG',20136,'PROJCS["Adindan / UTM zone 36N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20136"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20137 : Adindan / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20137,'EPSG',20137,'PROJCS["Adindan / UTM zone 37N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20137"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20138 : Adindan / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20138,'EPSG',20138,'PROJCS["Adindan / UTM zone 38N",GEOGCS["Adindan",DATUM["Adindan",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-166,-15,204,0,0,0,0],AUTHORITY["EPSG","6201"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4201"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20138"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20248 : AGD66 / AMG zone 48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20248,'EPSG',20248,'PROJCS["AGD66 / AMG zone 48",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20248"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20249 : AGD66 / AMG zone 49 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20249,'EPSG',20249,'PROJCS["AGD66 / AMG zone 49",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20249"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20250 : AGD66 / AMG zone 50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20250,'EPSG',20250,'PROJCS["AGD66 / AMG zone 50",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20250"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20251 : AGD66 / AMG zone 51 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20251,'EPSG',20251,'PROJCS["AGD66 / AMG zone 51",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20251"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20252 : AGD66 / AMG zone 52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20252,'EPSG',20252,'PROJCS["AGD66 / AMG zone 52",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20252"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20253 : AGD66 / AMG zone 53 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20253,'EPSG',20253,'PROJCS["AGD66 / AMG zone 53",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20253"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20254 : AGD66 / AMG zone 54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20254,'EPSG',20254,'PROJCS["AGD66 / AMG zone 54",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20254"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20255 : AGD66 / AMG zone 55 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20255,'EPSG',20255,'PROJCS["AGD66 / AMG zone 55",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20255"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20256 : AGD66 / AMG zone 56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20256,'EPSG',20256,'PROJCS["AGD66 / AMG zone 56",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20256"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20257 : AGD66 / AMG zone 57 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20257,'EPSG',20257,'PROJCS["AGD66 / AMG zone 57",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20257"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20258 : AGD66 / AMG zone 58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20258,'EPSG',20258,'PROJCS["AGD66 / AMG zone 58",GEOGCS["AGD66",DATUM["Australian_Geodetic_Datum_1966",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29],AUTHORITY["EPSG","6202"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4202"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs '); --- --- EPSG 20348 : AGD84 / AMG zone 48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20348,'EPSG',20348,'PROJCS["AGD84 / AMG zone 48",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20349 : AGD84 / AMG zone 49 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20349,'EPSG',20349,'PROJCS["AGD84 / AMG zone 49",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20350 : AGD84 / AMG zone 50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20350,'EPSG',20350,'PROJCS["AGD84 / AMG zone 50",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20350"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20351 : AGD84 / AMG zone 51 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20351,'EPSG',20351,'PROJCS["AGD84 / AMG zone 51",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20351"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20352 : AGD84 / AMG zone 52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20352,'EPSG',20352,'PROJCS["AGD84 / AMG zone 52",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20352"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20353 : AGD84 / AMG zone 53 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20353,'EPSG',20353,'PROJCS["AGD84 / AMG zone 53",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20354 : AGD84 / AMG zone 54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20354,'EPSG',20354,'PROJCS["AGD84 / AMG zone 54",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20355 : AGD84 / AMG zone 55 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20355,'EPSG',20355,'PROJCS["AGD84 / AMG zone 55",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20356 : AGD84 / AMG zone 56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20356,'EPSG',20356,'PROJCS["AGD84 / AMG zone 56",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20357 : AGD84 / AMG zone 57 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20357,'EPSG',20357,'PROJCS["AGD84 / AMG zone 57",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20358 : AGD84 / AMG zone 58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20358,'EPSG',20358,'PROJCS["AGD84 / AMG zone 58",GEOGCS["AGD84",DATUM["Australian_Geodetic_Datum_1984",SPHEROID["Australian National Spheroid",6378160,298.25,AUTHORITY["EPSG","7003"]],TOWGS84[-134,-48,149,0,0,0,0],AUTHORITY["EPSG","6203"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4203"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20358"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20436 : Ain el Abd / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20436,'EPSG',20436,'PROJCS["Ain el Abd / UTM zone 36N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20436"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20437 : Ain el Abd / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20437,'EPSG',20437,'PROJCS["Ain el Abd / UTM zone 37N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20437"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20438 : Ain el Abd / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20438,'EPSG',20438,'PROJCS["Ain el Abd / UTM zone 38N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20438"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20439 : Ain el Abd / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20439,'EPSG',20439,'PROJCS["Ain el Abd / UTM zone 39N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20439"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20440 : Ain el Abd / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20440,'EPSG',20440,'PROJCS["Ain el Abd / UTM zone 40N",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20440"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20499 : Ain el Abd / Bahrain Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20499,'EPSG',20499,'PROJCS["Ain el Abd / Bahrain Grid",GEOGCS["Ain el Abd",DATUM["Ain_el_Abd_1970",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-143,-236,7,0,0,0,0],AUTHORITY["EPSG","6204"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4204"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20499"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20538 : Afgooye / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20538,'EPSG',20538,'PROJCS["Afgooye / UTM zone 38N",GEOGCS["Afgooye",DATUM["Afgooye",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-43,-163,45,0,0,0,0],AUTHORITY["EPSG","6205"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4205"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20538"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20539 : Afgooye / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20539,'EPSG',20539,'PROJCS["Afgooye / UTM zone 39N",GEOGCS["Afgooye",DATUM["Afgooye",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[-43,-163,45,0,0,0,0],AUTHORITY["EPSG","6205"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4205"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","20539"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20790 : Lisbon (Lisbon) / Portuguese National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20790,'EPSG',20790,'PROJCS["Lisbon (Lisbon) / Portuguese National Grid",GEOGCS["Lisbon (Lisbon)",DATUM["Lisbon_1937_Lisbon",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6803"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4803"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",1],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","20790"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs '); --- --- EPSG 20791 : Lisbon (Lisbon) / Portuguese Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20791,'EPSG',20791,'PROJCS["Lisbon (Lisbon) / Portuguese Grid",GEOGCS["Lisbon (Lisbon)",DATUM["Lisbon_1937_Lisbon",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-304.046,-60.576,103.64,0,0,0,0],AUTHORITY["EPSG","6803"]],PRIMEM["Lisbon",-9.131906111111112,AUTHORITY["EPSG","8902"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4803"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",1],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","20791"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs '); --- --- EPSG 20822 : Aratu / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20822,'EPSG',20822,'PROJCS["Aratu / UTM zone 22S",GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20822"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20823 : Aratu / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20823,'EPSG',20823,'PROJCS["Aratu / UTM zone 23S",GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20823"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20824 : Aratu / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20824,'EPSG',20824,'PROJCS["Aratu / UTM zone 24S",GEOGCS["Aratu",DATUM["Aratu",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-161,308,-142,0,0,0,0],AUTHORITY["EPSG","6208"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4208"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20824"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=intl +towgs84=-161,308,-142,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20934 : Arc 1950 / UTM zone 34S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20934,'EPSG',20934,'PROJCS["Arc 1950 / UTM zone 34S",GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20934"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20935 : Arc 1950 / UTM zone 35S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20935,'EPSG',20935,'PROJCS["Arc 1950 / UTM zone 35S",GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20935"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs '); --- --- EPSG 20936 : Arc 1950 / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (20936,'EPSG',20936,'PROJCS["Arc 1950 / UTM zone 36S",GEOGCS["Arc 1950",DATUM["Arc_1950",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-143,-90,-294,0,0,0,0],AUTHORITY["EPSG","6209"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4209"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","20936"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21035 : Arc 1960 / UTM zone 35S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21035,'EPSG',21035,'PROJCS["Arc 1960 / UTM zone 35S",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21035"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21036 : Arc 1960 / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21036,'EPSG',21036,'PROJCS["Arc 1960 / UTM zone 36S",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21036"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21037 : Arc 1960 / UTM zone 37S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21037,'EPSG',21037,'PROJCS["Arc 1960 / UTM zone 37S",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21095 : Arc 1960 / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21095,'EPSG',21095,'PROJCS["Arc 1960 / UTM zone 35N",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21096 : Arc 1960 / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21096,'EPSG',21096,'PROJCS["Arc 1960 / UTM zone 36N",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21096"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21097 : Arc 1960 / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21097,'EPSG',21097,'PROJCS["Arc 1960 / UTM zone 37N",GEOGCS["Arc 1960",DATUM["Arc_1960",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-160,-6,-302,0,0,0,0],AUTHORITY["EPSG","6210"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4210"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21097"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21100 : Batavia (Jakarta) / NEIEZ (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21100,'EPSG',21100,'PROJCS["Batavia (Jakarta) / NEIEZ (deprecated)",GEOGCS["Batavia (Jakarta)",DATUM["Batavia_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6813"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4813"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","21100"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs '); --- --- EPSG 21148 : Batavia / UTM zone 48S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21148,'EPSG',21148,'PROJCS["Batavia / UTM zone 48S",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21148"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21149 : Batavia / UTM zone 49S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21149,'EPSG',21149,'PROJCS["Batavia / UTM zone 49S",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21149"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21150 : Batavia / UTM zone 50S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21150,'EPSG',21150,'PROJCS["Batavia / UTM zone 50S",GEOGCS["Batavia",DATUM["Batavia",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-377,681,-50,0,0,0,0],AUTHORITY["EPSG","6211"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4211"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","21150"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21291 : Barbados 1938 / British West Indies Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21291,'EPSG',21291,'PROJCS["Barbados 1938 / British West Indies Grid",GEOGCS["Barbados 1938",DATUM["Barbados_1938",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHORITY["EPSG","6212"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4212"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-62],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21291"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21292 : Barbados 1938 / Barbados National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21292,'EPSG',21292,'PROJCS["Barbados 1938 / Barbados National Grid",GEOGCS["Barbados 1938",DATUM["Barbados_1938",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[31.95,300.99,419.19,0,0,0,0],AUTHORITY["EPSG","6212"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4212"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",13.17638888888889],PARAMETER["central_meridian",-59.55972222222222],PARAMETER["scale_factor",0.9999986],PARAMETER["false_easting",30000],PARAMETER["false_northing",75000],AUTHORITY["EPSG","21292"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21413 : Beijing 1954 / Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21413,'EPSG',21413,'PROJCS["Beijing 1954 / Gauss-Kruger zone 13",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21413"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21414 : Beijing 1954 / Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21414,'EPSG',21414,'PROJCS["Beijing 1954 / Gauss-Kruger zone 14",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21414"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21415 : Beijing 1954 / Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21415,'EPSG',21415,'PROJCS["Beijing 1954 / Gauss-Kruger zone 15",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21415"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21416 : Beijing 1954 / Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21416,'EPSG',21416,'PROJCS["Beijing 1954 / Gauss-Kruger zone 16",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21416"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21417 : Beijing 1954 / Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21417,'EPSG',21417,'PROJCS["Beijing 1954 / Gauss-Kruger zone 17",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21417"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21418 : Beijing 1954 / Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21418,'EPSG',21418,'PROJCS["Beijing 1954 / Gauss-Kruger zone 18",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21418"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21419 : Beijing 1954 / Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21419,'EPSG',21419,'PROJCS["Beijing 1954 / Gauss-Kruger zone 19",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21419"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21420 : Beijing 1954 / Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21420,'EPSG',21420,'PROJCS["Beijing 1954 / Gauss-Kruger zone 20",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21420"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21421 : Beijing 1954 / Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21421,'EPSG',21421,'PROJCS["Beijing 1954 / Gauss-Kruger zone 21",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21421"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21422 : Beijing 1954 / Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21422,'EPSG',21422,'PROJCS["Beijing 1954 / Gauss-Kruger zone 22",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21422"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21423 : Beijing 1954 / Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21423,'EPSG',21423,'PROJCS["Beijing 1954 / Gauss-Kruger zone 23",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21423"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21453 : Beijing 1954 / Gauss-Kruger CM 75E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21453,'EPSG',21453,'PROJCS["Beijing 1954 / Gauss-Kruger CM 75E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21453"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21454 : Beijing 1954 / Gauss-Kruger CM 81E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21454,'EPSG',21454,'PROJCS["Beijing 1954 / Gauss-Kruger CM 81E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21454"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21455 : Beijing 1954 / Gauss-Kruger CM 87E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21455,'EPSG',21455,'PROJCS["Beijing 1954 / Gauss-Kruger CM 87E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21455"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21456 : Beijing 1954 / Gauss-Kruger CM 93E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21456,'EPSG',21456,'PROJCS["Beijing 1954 / Gauss-Kruger CM 93E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21456"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21457 : Beijing 1954 / Gauss-Kruger CM 99E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21457,'EPSG',21457,'PROJCS["Beijing 1954 / Gauss-Kruger CM 99E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21457"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21458 : Beijing 1954 / Gauss-Kruger CM 105E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21458,'EPSG',21458,'PROJCS["Beijing 1954 / Gauss-Kruger CM 105E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21458"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21459 : Beijing 1954 / Gauss-Kruger CM 111E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21459,'EPSG',21459,'PROJCS["Beijing 1954 / Gauss-Kruger CM 111E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21459"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21460 : Beijing 1954 / Gauss-Kruger CM 117E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21460,'EPSG',21460,'PROJCS["Beijing 1954 / Gauss-Kruger CM 117E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21460"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21461 : Beijing 1954 / Gauss-Kruger CM 123E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21461,'EPSG',21461,'PROJCS["Beijing 1954 / Gauss-Kruger CM 123E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21461"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21462 : Beijing 1954 / Gauss-Kruger CM 129E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21462,'EPSG',21462,'PROJCS["Beijing 1954 / Gauss-Kruger CM 129E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21462"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21463 : Beijing 1954 / Gauss-Kruger CM 135E --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21463,'EPSG',21463,'PROJCS["Beijing 1954 / Gauss-Kruger CM 135E",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21463"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21473 : Beijing 1954 / Gauss-Kruger 13N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21473,'EPSG',21473,'PROJCS["Beijing 1954 / Gauss-Kruger 13N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21473"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21474 : Beijing 1954 / Gauss-Kruger 14N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21474,'EPSG',21474,'PROJCS["Beijing 1954 / Gauss-Kruger 14N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21474"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21475 : Beijing 1954 / Gauss-Kruger 15N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21475,'EPSG',21475,'PROJCS["Beijing 1954 / Gauss-Kruger 15N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21475"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21476 : Beijing 1954 / Gauss-Kruger 16N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21476,'EPSG',21476,'PROJCS["Beijing 1954 / Gauss-Kruger 16N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21476"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21477 : Beijing 1954 / Gauss-Kruger 17N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21477,'EPSG',21477,'PROJCS["Beijing 1954 / Gauss-Kruger 17N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21477"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21478 : Beijing 1954 / Gauss-Kruger 18N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21478,'EPSG',21478,'PROJCS["Beijing 1954 / Gauss-Kruger 18N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21478"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21479 : Beijing 1954 / Gauss-Kruger 19N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21479,'EPSG',21479,'PROJCS["Beijing 1954 / Gauss-Kruger 19N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21479"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21480 : Beijing 1954 / Gauss-Kruger 20N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21480,'EPSG',21480,'PROJCS["Beijing 1954 / Gauss-Kruger 20N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21480"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21481 : Beijing 1954 / Gauss-Kruger 21N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21481,'EPSG',21481,'PROJCS["Beijing 1954 / Gauss-Kruger 21N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21481"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21482 : Beijing 1954 / Gauss-Kruger 22N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21482,'EPSG',21482,'PROJCS["Beijing 1954 / Gauss-Kruger 22N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21482"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21483 : Beijing 1954 / Gauss-Kruger 23N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21483,'EPSG',21483,'PROJCS["Beijing 1954 / Gauss-Kruger 23N (deprecated)",GEOGCS["Beijing 1954",DATUM["Beijing_1954",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[15.8,-154.4,-82.3,0,0,0,0],AUTHORITY["EPSG","6214"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4214"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21483"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21500 : Belge 1950 (Brussels) / Belge Lambert 50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21500,'EPSG',21500,'PROJCS["Belge 1950 (Brussels) / Belge Lambert 50",GEOGCS["Belge 1950 (Brussels)",DATUM["Reseau_National_Belge_1950_Brussels",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],AUTHORITY["EPSG","6809"]],PRIMEM["Brussels",4.367975,AUTHORITY["EPSG","8910"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4809"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",0],PARAMETER["false_easting",150000],PARAMETER["false_northing",5400000],AUTHORITY["EPSG","21500"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs '); --- --- EPSG 21780 : Bern 1898 (Bern) / LV03C --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21780,'EPSG',21780,'PROJCS["Bern 1898 (Bern) / LV03C",GEOGCS["Bern 1898 (Bern)",DATUM["CH1903_Bern",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6801"]],PRIMEM["Bern",7.439583333333333,AUTHORITY["EPSG","8907"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4801"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",0],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","21780"],AXIS["Y",EAST],AXIS["X",NORTH]]','+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +units=m +no_defs '); --- --- EPSG 21781 : CH1903 / LV03 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21781,'EPSG',21781,'PROJCS["CH1903 / LV03",GEOGCS["CH1903",DATUM["CH1903",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6149"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4149"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",7.439583333333333],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","21781"],AXIS["Y",EAST],AXIS["X",NORTH]]','+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21782 : CH1903 / LV03C-G --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21782,'EPSG',21782,'PROJCS["CH1903 / LV03C-G",GEOGCS["CH1903",DATUM["CH1903",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[674.4,15.1,405.3,0,0,0,0],AUTHORITY["EPSG","6149"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4149"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",46.95240555555556],PARAMETER["longitude_of_center",7.439583333333333],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","21782"],AXIS["Y",EAST],AXIS["X",NORTH]]','+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21817 : Bogota 1975 / UTM zone 17N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21817,'EPSG',21817,'PROJCS["Bogota 1975 / UTM zone 17N (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21817"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21818 : Bogota 1975 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21818,'EPSG',21818,'PROJCS["Bogota 1975 / UTM zone 18N",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","21818"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21891 : Bogota 1975 / Colombia West zone (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21891,'EPSG',21891,'PROJCS["Bogota 1975 / Colombia West zone (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-77.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21891"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21892 : Bogota 1975 / Colombia Bogota zone (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21892,'EPSG',21892,'PROJCS["Bogota 1975 / Colombia Bogota zone (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-74.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21892"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21893 : Bogota 1975 / Colombia East Central zone (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21893,'EPSG',21893,'PROJCS["Bogota 1975 / Colombia East Central zone (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-71.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21893"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21894 : Bogota 1975 / Colombia East (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21894,'EPSG',21894,'PROJCS["Bogota 1975 / Colombia East (deprecated)",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-68.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21894"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21896 : Bogota 1975 / Colombia West zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21896,'EPSG',21896,'PROJCS["Bogota 1975 / Colombia West zone",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-77.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21896"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21897 : Bogota 1975 / Colombia Bogota zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21897,'EPSG',21897,'PROJCS["Bogota 1975 / Colombia Bogota zone",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-74.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21897"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21898 : Bogota 1975 / Colombia East Central zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21898,'EPSG',21898,'PROJCS["Bogota 1975 / Colombia East Central zone",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-71.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21898"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 21899 : Bogota 1975 / Colombia East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (21899,'EPSG',21899,'PROJCS["Bogota 1975 / Colombia East",GEOGCS["Bogota 1975",DATUM["Bogota_1975",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[307,304,-318,0,0,0,0],AUTHORITY["EPSG","6218"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4218"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.599047222222222],PARAMETER["central_meridian",-68.08091666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",1000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","21899"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22032 : Camacupa / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22032,'EPSG',22032,'PROJCS["Camacupa / UTM zone 32S",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22033 : Camacupa / UTM zone 33S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22033,'EPSG',22033,'PROJCS["Camacupa / UTM zone 33S",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22091 : Camacupa / TM 11.30 SE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22091,'EPSG',22091,'PROJCS["Camacupa / TM 11.30 SE",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",11.5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22091"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22092 : Camacupa / TM 12 SE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22092,'EPSG',22092,'PROJCS["Camacupa / TM 12 SE",GEOGCS["Camacupa",DATUM["Camacupa",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-50.9,-347.6,-231,0,0,0,0],AUTHORITY["EPSG","6220"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4220"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22092"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22171 : POSGAR 98 / Argentina 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22171,'EPSG',22171,'PROJCS["POSGAR 98 / Argentina 1",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22171"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22172 : POSGAR 98 / Argentina 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22172,'EPSG',22172,'PROJCS["POSGAR 98 / Argentina 2",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22172"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22173 : POSGAR 98 / Argentina 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22173,'EPSG',22173,'PROJCS["POSGAR 98 / Argentina 3",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22173"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22174 : POSGAR 98 / Argentina 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22174,'EPSG',22174,'PROJCS["POSGAR 98 / Argentina 4",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22174"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22175 : POSGAR 98 / Argentina 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22175,'EPSG',22175,'PROJCS["POSGAR 98 / Argentina 5",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-60],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22175"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22176 : POSGAR 98 / Argentina 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22176,'EPSG',22176,'PROJCS["POSGAR 98 / Argentina 6",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22176"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22177 : POSGAR 98 / Argentina 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22177,'EPSG',22177,'PROJCS["POSGAR 98 / Argentina 7",GEOGCS["POSGAR 98",DATUM["Posiciones_Geodesicas_Argentinas_1998",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6190"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4190"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22177"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22181 : POSGAR 94 / Argentina 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22181,'EPSG',22181,'PROJCS["POSGAR 94 / Argentina 1",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22181"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22182 : POSGAR 94 / Argentina 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22182,'EPSG',22182,'PROJCS["POSGAR 94 / Argentina 2",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22182"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22183 : POSGAR 94 / Argentina 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22183,'EPSG',22183,'PROJCS["POSGAR 94 / Argentina 3",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22183"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22184 : POSGAR 94 / Argentina 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22184,'EPSG',22184,'PROJCS["POSGAR 94 / Argentina 4",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22184"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22185 : POSGAR 94 / Argentina 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22185,'EPSG',22185,'PROJCS["POSGAR 94 / Argentina 5",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-60],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22185"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22186 : POSGAR 94 / Argentina 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22186,'EPSG',22186,'PROJCS["POSGAR 94 / Argentina 6",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22186"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22187 : POSGAR 94 / Argentina 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22187,'EPSG',22187,'PROJCS["POSGAR 94 / Argentina 7",GEOGCS["POSGAR 94",DATUM["Posiciones_Geodesicas_Argentinas_1994",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6694"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4694"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22187"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22191 : Campo Inchauspe / Argentina 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22191,'EPSG',22191,'PROJCS["Campo Inchauspe / Argentina 1",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-72],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22191"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22192 : Campo Inchauspe / Argentina 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22192,'EPSG',22192,'PROJCS["Campo Inchauspe / Argentina 2",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22192"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22193 : Campo Inchauspe / Argentina 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22193,'EPSG',22193,'PROJCS["Campo Inchauspe / Argentina 3",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-66],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22193"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22194 : Campo Inchauspe / Argentina 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22194,'EPSG',22194,'PROJCS["Campo Inchauspe / Argentina 4",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22194"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22195 : Campo Inchauspe / Argentina 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22195,'EPSG',22195,'PROJCS["Campo Inchauspe / Argentina 5",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-60],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22195"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22196 : Campo Inchauspe / Argentina 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22196,'EPSG',22196,'PROJCS["Campo Inchauspe / Argentina 6",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22196"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22197 : Campo Inchauspe / Argentina 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22197,'EPSG',22197,'PROJCS["Campo Inchauspe / Argentina 7",GEOGCS["Campo Inchauspe",DATUM["Campo_Inchauspe",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-148,136,90,0,0,0,0],AUTHORITY["EPSG","6221"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4221"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22197"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22234 : Cape / UTM zone 34S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22234,'EPSG',22234,'PROJCS["Cape / UTM zone 34S",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22234"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22235 : Cape / UTM zone 35S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22235,'EPSG',22235,'PROJCS["Cape / UTM zone 35S",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22235"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22236 : Cape / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22236,'EPSG',22236,'PROJCS["Cape / UTM zone 36S",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22236"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22275 : Cape / Lo15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22275,'EPSG',22275,'PROJCS["Cape / Lo15",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22275"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22277 : Cape / Lo17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22277,'EPSG',22277,'PROJCS["Cape / Lo17",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",17],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22277"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22279 : Cape / Lo19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22279,'EPSG',22279,'PROJCS["Cape / Lo19",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22279"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22281 : Cape / Lo21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22281,'EPSG',22281,'PROJCS["Cape / Lo21",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22281"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22283 : Cape / Lo23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22283,'EPSG',22283,'PROJCS["Cape / Lo23",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22283"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22285 : Cape / Lo25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22285,'EPSG',22285,'PROJCS["Cape / Lo25",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22285"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22287 : Cape / Lo27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22287,'EPSG',22287,'PROJCS["Cape / Lo27",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22287"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22289 : Cape / Lo29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22289,'EPSG',22289,'PROJCS["Cape / Lo29",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",29],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22289"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22291 : Cape / Lo31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22291,'EPSG',22291,'PROJCS["Cape / Lo31",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22291"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22293 : Cape / Lo33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22293,'EPSG',22293,'PROJCS["Cape / Lo33",GEOGCS["Cape",DATUM["Cape",SPHEROID["Clarke 1880 (Arc)",6378249.145,293.4663077,AUTHORITY["EPSG","7013"]],TOWGS84[-136,-108,-292,0,0,0,0],AUTHORITY["EPSG","6222"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4222"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22293"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22300 : Carthage (Paris) / Tunisia Mining Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22300,'EPSG',22300,'PROJCS["Carthage (Paris) / Tunisia Mining Grid",GEOGCS["Carthage (Paris)",DATUM["Carthage_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6816"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4816"]],UNIT["kilometre",1000,AUTHORITY["EPSG","9036"]],PROJECTION["Tunisia_Mining_Grid"],PARAMETER["latitude_of_origin",38.81973],PARAMETER["central_meridian",7.83445],PARAMETER["false_easting",270],PARAMETER["false_northing",582],AUTHORITY["EPSG","22300"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]',''); --- --- EPSG 22332 : Carthage / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22332,'EPSG',22332,'PROJCS["Carthage / UTM zone 32N",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22332"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22391 : Carthage / Nord Tunisie --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22391,'EPSG',22391,'PROJCS["Carthage / Nord Tunisie",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",9.9],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22391"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22392 : Carthage / Sud Tunisie --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22392,'EPSG',22392,'PROJCS["Carthage / Sud Tunisie",GEOGCS["Carthage",DATUM["Carthage",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-263,6,431,0,0,0,0],AUTHORITY["EPSG","6223"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4223"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",9.9],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22392"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22521 : Corrego Alegre / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22521,'EPSG',22521,'PROJCS["Corrego Alegre / UTM zone 21S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22521"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22522 : Corrego Alegre / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22522,'EPSG',22522,'PROJCS["Corrego Alegre / UTM zone 22S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22522"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22523 : Corrego Alegre / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22523,'EPSG',22523,'PROJCS["Corrego Alegre / UTM zone 23S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22523"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22524 : Corrego Alegre / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22524,'EPSG',22524,'PROJCS["Corrego Alegre / UTM zone 24S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22524"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22525 : Corrego Alegre / UTM zone 25S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22525,'EPSG',22525,'PROJCS["Corrego Alegre / UTM zone 25S",GEOGCS["Corrego Alegre",DATUM["Corrego_Alegre",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-206,172,-6,0,0,0,0],AUTHORITY["EPSG","6225"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4225"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","22525"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22700 : Deir ez Zor / Levant Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22700,'EPSG',22700,'PROJCS["Deir ez Zor / Levant Zone",GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",34.65],PARAMETER["central_meridian",37.35],PARAMETER["scale_factor",0.9996256],PARAMETER["false_easting",300000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22700"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22770 : Deir ez Zor / Syria Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22770,'EPSG',22770,'PROJCS["Deir ez Zor / Syria Lambert",GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",34.65],PARAMETER["central_meridian",37.35],PARAMETER["scale_factor",0.9996256],PARAMETER["false_easting",300000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","22770"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22780 : Deir ez Zor / Levant Stereographic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22780,'EPSG',22780,'PROJCS["Deir ez Zor / Levant Stereographic",GEOGCS["Deir ez Zor",DATUM["Deir_ez_Zor",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-190.421,8.532,238.69,0,0,0,0],AUTHORITY["EPSG","6227"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4227"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",34.2],PARAMETER["central_meridian",39.15],PARAMETER["scale_factor",0.9995341],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","22780"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22832 : Douala / UTM zone 32N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22832,'EPSG',22832,'PROJCS["Douala / UTM zone 32N (deprecated)",GEOGCS["Douala",DATUM["Douala",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6228"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4228"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","22832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 22991 : Egypt 1907 / Blue Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22991,'EPSG',22991,'PROJCS["Egypt 1907 / Blue Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",35],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",1100000],AUTHORITY["EPSG","22991"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22992 : Egypt 1907 / Red Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22992,'EPSG',22992,'PROJCS["Egypt 1907 / Red Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",615000],PARAMETER["false_northing",810000],AUTHORITY["EPSG","22992"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22993 : Egypt 1907 / Purple Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22993,'EPSG',22993,'PROJCS["Egypt 1907 / Purple Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",700000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","22993"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs '); --- --- EPSG 22994 : Egypt 1907 / Extended Purple Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (22994,'EPSG',22994,'PROJCS["Egypt 1907 / Extended Purple Belt",GEOGCS["Egypt 1907",DATUM["Egypt_1907",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],TOWGS84[-130,110,-13,0,0,0,0],AUTHORITY["EPSG","6229"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4229"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",700000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","22994"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23028 : ED50 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23028,'EPSG',23028,'PROJCS["ED50 / UTM zone 28N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23028"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23029 : ED50 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23029,'EPSG',23029,'PROJCS["ED50 / UTM zone 29N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23029"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23030 : ED50 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23030,'EPSG',23030,'PROJCS["ED50 / UTM zone 30N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23030"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23031 : ED50 / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23031,'EPSG',23031,'PROJCS["ED50 / UTM zone 31N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23031"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23032 : ED50 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23032,'EPSG',23032,'PROJCS["ED50 / UTM zone 32N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23032"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23033 : ED50 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23033,'EPSG',23033,'PROJCS["ED50 / UTM zone 33N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23033"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23034 : ED50 / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23034,'EPSG',23034,'PROJCS["ED50 / UTM zone 34N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23034"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23035 : ED50 / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23035,'EPSG',23035,'PROJCS["ED50 / UTM zone 35N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23035"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23036 : ED50 / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23036,'EPSG',23036,'PROJCS["ED50 / UTM zone 36N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23036"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23037 : ED50 / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23037,'EPSG',23037,'PROJCS["ED50 / UTM zone 37N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23038 : ED50 / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23038,'EPSG',23038,'PROJCS["ED50 / UTM zone 38N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23038"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23090 : ED50 / TM 0 N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23090,'EPSG',23090,'PROJCS["ED50 / TM 0 N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23090"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23095 : ED50 / TM 5 NE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23095,'EPSG',23095,'PROJCS["ED50 / TM 5 NE",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",5],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23095"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23239 : Fahud / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23239,'EPSG',23239,'PROJCS["Fahud / UTM zone 39N",GEOGCS["Fahud",DATUM["Fahud",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-346,-1,224,0,0,0,0],AUTHORITY["EPSG","6232"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4232"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23239"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23240 : Fahud / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23240,'EPSG',23240,'PROJCS["Fahud / UTM zone 40N",GEOGCS["Fahud",DATUM["Fahud",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-346,-1,224,0,0,0,0],AUTHORITY["EPSG","6232"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4232"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23240"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23433 : Garoua / UTM zone 33N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23433,'EPSG',23433,'PROJCS["Garoua / UTM zone 33N (deprecated)",GEOGCS["Garoua",DATUM["Garoua",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6234"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4234"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23433"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 23700 : HD72 / EOV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23700,'EPSG',23700,'PROJCS["HD72 / EOV",GEOGCS["HD72",DATUM["Hungarian_Datum_1972",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[52.17,-71.82,-14.9,0,0,0,0],AUTHORITY["EPSG","6237"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4237"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",47.14439372222222],PARAMETER["longitude_of_center",19.04857177777778],PARAMETER["azimuth",90],PARAMETER["rectified_grid_angle",90],PARAMETER["scale_factor",0.99993],PARAMETER["false_easting",650000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","23700"],AXIS["Y",EAST],AXIS["X",NORTH]]','+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23830 : DGN95 / Indonesia TM-3 zone 46.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23830,'EPSG',23830,'PROJCS["DGN95 / Indonesia TM-3 zone 46.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",94.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23830"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23831 : DGN95 / Indonesia TM-3 zone 47.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23831,'EPSG',23831,'PROJCS["DGN95 / Indonesia TM-3 zone 47.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",97.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23831"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23832 : DGN95 / Indonesia TM-3 zone 47.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23832,'EPSG',23832,'PROJCS["DGN95 / Indonesia TM-3 zone 47.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",100.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23832"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23833 : DGN95 / Indonesia TM-3 zone 48.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23833,'EPSG',23833,'PROJCS["DGN95 / Indonesia TM-3 zone 48.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",103.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23833"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23834 : DGN95 / Indonesia TM-3 zone 48.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23834,'EPSG',23834,'PROJCS["DGN95 / Indonesia TM-3 zone 48.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",106.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23834"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23835 : DGN95 / Indonesia TM-3 zone 49.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23835,'EPSG',23835,'PROJCS["DGN95 / Indonesia TM-3 zone 49.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",109.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23835"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23836 : DGN95 / Indonesia TM-3 zone 49.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23836,'EPSG',23836,'PROJCS["DGN95 / Indonesia TM-3 zone 49.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",112.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23836"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23837 : DGN95 / Indonesia TM-3 zone 50.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23837,'EPSG',23837,'PROJCS["DGN95 / Indonesia TM-3 zone 50.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",115.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23837"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23838 : DGN95 / Indonesia TM-3 zone 50.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23838,'EPSG',23838,'PROJCS["DGN95 / Indonesia TM-3 zone 50.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",118.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23838"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23839 : DGN95 / Indonesia TM-3 zone 51.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23839,'EPSG',23839,'PROJCS["DGN95 / Indonesia TM-3 zone 51.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23839"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23840 : DGN95 / Indonesia TM-3 zone 51.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23840,'EPSG',23840,'PROJCS["DGN95 / Indonesia TM-3 zone 51.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",124.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23840"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23841 : DGN95 / Indonesia TM-3 zone 52.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23841,'EPSG',23841,'PROJCS["DGN95 / Indonesia TM-3 zone 52.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",127.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23841"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23842 : DGN95 / Indonesia TM-3 zone 52.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23842,'EPSG',23842,'PROJCS["DGN95 / Indonesia TM-3 zone 52.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",130.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23842"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23843 : DGN95 / Indonesia TM-3 zone 53.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23843,'EPSG',23843,'PROJCS["DGN95 / Indonesia TM-3 zone 53.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",133.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23843"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23844 : DGN95 / Indonesia TM-3 zone 53.2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23844,'EPSG',23844,'PROJCS["DGN95 / Indonesia TM-3 zone 53.2",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",136.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23844"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23845 : DGN95 / Indonesia TM-3 zone 54.1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23845,'EPSG',23845,'PROJCS["DGN95 / Indonesia TM-3 zone 54.1",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",139.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",1500000],AUTHORITY["EPSG","23845"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23846 : ID74 / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23846,'EPSG',23846,'PROJCS["ID74 / UTM zone 46N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23846"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23847 : ID74 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23847,'EPSG',23847,'PROJCS["ID74 / UTM zone 47N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23847"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23848 : ID74 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23848,'EPSG',23848,'PROJCS["ID74 / UTM zone 48N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23848"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23849 : ID74 / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23849,'EPSG',23849,'PROJCS["ID74 / UTM zone 49N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23849"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23850 : ID74 / UTM zone 50N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23850,'EPSG',23850,'PROJCS["ID74 / UTM zone 50N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23850"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23851 : ID74 / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23851,'EPSG',23851,'PROJCS["ID74 / UTM zone 51N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23851"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23852 : ID74 / UTM zone 52N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23852,'EPSG',23852,'PROJCS["ID74 / UTM zone 52N",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23852"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23853 : ID74 / UTM zone 53N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23853,'EPSG',23853,'PROJCS["ID74 / UTM zone 53N (deprecated)",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23853"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23866 : DGN95 / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23866,'EPSG',23866,'PROJCS["DGN95 / UTM zone 46N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23866"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23867 : DGN95 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23867,'EPSG',23867,'PROJCS["DGN95 / UTM zone 47N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23867"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23868 : DGN95 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23868,'EPSG',23868,'PROJCS["DGN95 / UTM zone 48N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23868"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23869 : DGN95 / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23869,'EPSG',23869,'PROJCS["DGN95 / UTM zone 49N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23869"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23870 : DGN95 / UTM zone 50N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23870,'EPSG',23870,'PROJCS["DGN95 / UTM zone 50N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23870"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23871 : DGN95 / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23871,'EPSG',23871,'PROJCS["DGN95 / UTM zone 51N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23871"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23872 : DGN95 / UTM zone 52N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23872,'EPSG',23872,'PROJCS["DGN95 / UTM zone 52N",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23872"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23877 : DGN95 / UTM zone 47S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23877,'EPSG',23877,'PROJCS["DGN95 / UTM zone 47S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23877"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23878 : DGN95 / UTM zone 48S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23878,'EPSG',23878,'PROJCS["DGN95 / UTM zone 48S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23878"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23879 : DGN95 / UTM zone 49S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23879,'EPSG',23879,'PROJCS["DGN95 / UTM zone 49S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23879"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23880 : DGN95 / UTM zone 50S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23880,'EPSG',23880,'PROJCS["DGN95 / UTM zone 50S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23880"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23881 : DGN95 / UTM zone 51S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23881,'EPSG',23881,'PROJCS["DGN95 / UTM zone 51S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23881"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23882 : DGN95 / UTM zone 52S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23882,'EPSG',23882,'PROJCS["DGN95 / UTM zone 52S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23882"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23883 : DGN95 / UTM zone 53S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23883,'EPSG',23883,'PROJCS["DGN95 / UTM zone 53S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23883"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23884 : DGN95 / UTM zone 54S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23884,'EPSG',23884,'PROJCS["DGN95 / UTM zone 54S",GEOGCS["DGN95",DATUM["Datum_Geodesi_Nasional_1995",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6755"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4755"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23884"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23886 : ID74 / UTM zone 46S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23886,'EPSG',23886,'PROJCS["ID74 / UTM zone 46S (deprecated)",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23886"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23887 : ID74 / UTM zone 47S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23887,'EPSG',23887,'PROJCS["ID74 / UTM zone 47S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23887"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23888 : ID74 / UTM zone 48S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23888,'EPSG',23888,'PROJCS["ID74 / UTM zone 48S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23888"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23889 : ID74 / UTM zone 49S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23889,'EPSG',23889,'PROJCS["ID74 / UTM zone 49S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23889"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23890 : ID74 / UTM zone 50S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23890,'EPSG',23890,'PROJCS["ID74 / UTM zone 50S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23890"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23891 : ID74 / UTM zone 51S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23891,'EPSG',23891,'PROJCS["ID74 / UTM zone 51S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23891"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23892 : ID74 / UTM zone 52S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23892,'EPSG',23892,'PROJCS["ID74 / UTM zone 52S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23892"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23893 : ID74 / UTM zone 53S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23893,'EPSG',23893,'PROJCS["ID74 / UTM zone 53S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23893"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23894 : ID74 / UTM zone 54S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23894,'EPSG',23894,'PROJCS["ID74 / UTM zone 54S",GEOGCS["ID74",DATUM["Indonesian_Datum_1974",SPHEROID["Indonesian National Spheroid",6378160,298.247,AUTHORITY["EPSG","7021"]],TOWGS84[-24,-15,5,0,0,0,0],AUTHORITY["EPSG","6238"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4238"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","23894"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23946 : Indian 1954 / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23946,'EPSG',23946,'PROJCS["Indian 1954 / UTM zone 46N",GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23946"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23947 : Indian 1954 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23947,'EPSG',23947,'PROJCS["Indian 1954 / UTM zone 47N",GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23947"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs '); --- --- EPSG 23948 : Indian 1954 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (23948,'EPSG',23948,'PROJCS["Indian 1954 / UTM zone 48N",GEOGCS["Indian 1954",DATUM["Indian_1954",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[217,823,299,0,0,0,0],AUTHORITY["EPSG","6239"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4239"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","23948"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24047 : Indian 1975 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24047,'EPSG',24047,'PROJCS["Indian 1975 / UTM zone 47N",GEOGCS["Indian 1975",DATUM["Indian_1975",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[210,814,289,0,0,0,0],AUTHORITY["EPSG","6240"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4240"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24047"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24048 : Indian 1975 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24048,'EPSG',24048,'PROJCS["Indian 1975 / UTM zone 48N",GEOGCS["Indian 1975",DATUM["Indian_1975",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[210,814,289,0,0,0,0],AUTHORITY["EPSG","6240"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4240"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24048"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24100 : Jamaica 1875 / Jamaica (Old Grid) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24100,'EPSG',24100,'PROJCS["Jamaica 1875 / Jamaica (Old Grid)",GEOGCS["Jamaica 1875",DATUM["Jamaica_1875",SPHEROID["Clarke 1880",6378249.144808011,293.4663076556349,AUTHORITY["EPSG","7034"]],AUTHORITY["EPSG","6241"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4241"]],UNIT["Clarke''s foot",0.3047972654,AUTHORITY["EPSG","9005"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-77],PARAMETER["scale_factor",1],PARAMETER["false_easting",550000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","24100"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs '); --- --- EPSG 24200 : JAD69 / Jamaica National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24200,'EPSG',24200,'PROJCS["JAD69 / Jamaica National Grid",GEOGCS["JAD69",DATUM["Jamaica_1969",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[70,207,389.5,0,0,0,0],AUTHORITY["EPSG","6242"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4242"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",18],PARAMETER["central_meridian",-77],PARAMETER["scale_factor",1],PARAMETER["false_easting",250000],PARAMETER["false_northing",150000],AUTHORITY["EPSG","24200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24305 : Kalianpur 1937 / UTM zone 45N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24305,'EPSG',24305,'PROJCS["Kalianpur 1937 / UTM zone 45N",GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24305"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24306 : Kalianpur 1937 / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24306,'EPSG',24306,'PROJCS["Kalianpur 1937 / UTM zone 46N",GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24306"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24311 : Kalianpur 1962 / UTM zone 41N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24311,'EPSG',24311,'PROJCS["Kalianpur 1962 / UTM zone 41N",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24311"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24312 : Kalianpur 1962 / UTM zone 42N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24312,'EPSG',24312,'PROJCS["Kalianpur 1962 / UTM zone 42N",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24313 : Kalianpur 1962 / UTM zone 43N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24313,'EPSG',24313,'PROJCS["Kalianpur 1962 / UTM zone 43N",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24342 : Kalianpur 1975 / UTM zone 42N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24342,'EPSG',24342,'PROJCS["Kalianpur 1975 / UTM zone 42N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24342"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24343 : Kalianpur 1975 / UTM zone 43N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24343,'EPSG',24343,'PROJCS["Kalianpur 1975 / UTM zone 43N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24343"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24344 : Kalianpur 1975 / UTM zone 44N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24344,'EPSG',24344,'PROJCS["Kalianpur 1975 / UTM zone 44N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24344"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24345 : Kalianpur 1975 / UTM zone 45N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24345,'EPSG',24345,'PROJCS["Kalianpur 1975 / UTM zone 45N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24345"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24346 : Kalianpur 1975 / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24346,'EPSG',24346,'PROJCS["Kalianpur 1975 / UTM zone 46N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24346"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24347 : Kalianpur 1975 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24347,'EPSG',24347,'PROJCS["Kalianpur 1975 / UTM zone 47N",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24347"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24370 : Kalianpur 1880 / India zone 0 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24370,'EPSG',24370,'PROJCS["Kalianpur 1880 / India zone 0",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",39.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99846154],PARAMETER["false_easting",2355500],PARAMETER["false_northing",2590000],AUTHORITY["EPSG","24370"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs '); --- --- EPSG 24371 : Kalianpur 1880 / India zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24371,'EPSG',24371,'PROJCS["Kalianpur 1880 / India zone I",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24371"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs '); --- --- EPSG 24372 : Kalianpur 1880 / India zone IIa --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24372,'EPSG',24372,'PROJCS["Kalianpur 1880 / India zone IIa",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",74],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24372"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs '); --- --- EPSG 24373 : Kalianpur 1880 / India zone III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24373,'EPSG',24373,'PROJCS["Kalianpur 1880 / India zone III",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",19],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24373"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs '); --- --- EPSG 24374 : Kalianpur 1880 / India zone IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24374,'EPSG',24374,'PROJCS["Kalianpur 1880 / India zone IV",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",12],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24374"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs '); --- --- EPSG 24375 : Kalianpur 1937 / India zone IIb --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24375,'EPSG',24375,'PROJCS["Kalianpur 1937 / India zone IIb",GEOGCS["Kalianpur 1937",DATUM["Kalianpur_1937",SPHEROID["Everest 1830 (1937 Adjustment)",6377276.345,300.8017,AUTHORITY["EPSG","7015"]],TOWGS84[282,726,254,0,0,0,0],AUTHORITY["EPSG","6144"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4144"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743185.69],PARAMETER["false_northing",914395.23],AUTHORITY["EPSG","24375"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24376 : Kalianpur 1962 / India zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24376,'EPSG',24376,'PROJCS["Kalianpur 1962 / India zone I",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743196.4],PARAMETER["false_northing",914398.8],AUTHORITY["EPSG","24376"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24377 : Kalianpur 1962 / India zone IIa --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24377,'EPSG',24377,'PROJCS["Kalianpur 1962 / India zone IIa",GEOGCS["Kalianpur 1962",DATUM["Kalianpur_1962",SPHEROID["Everest 1830 (1962 Definition)",6377301.243,300.8017255,AUTHORITY["EPSG","7044"]],TOWGS84[283,682,231,0,0,0,0],AUTHORITY["EPSG","6145"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4145"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",74],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743196.4],PARAMETER["false_northing",914398.8],AUTHORITY["EPSG","24377"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24378 : Kalianpur 1975 / India zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24378,'EPSG',24378,'PROJCS["Kalianpur 1975 / India zone I",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",68],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24378"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24379 : Kalianpur 1975 / India zone IIa --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24379,'EPSG',24379,'PROJCS["Kalianpur 1975 / India zone IIa",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",74],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24379"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24380 : Kalianpur 1975 / India zone IIb --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24380,'EPSG',24380,'PROJCS["Kalianpur 1975 / India zone IIb",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24380"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24381 : Kalianpur 1975 / India zone III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24381,'EPSG',24381,'PROJCS["Kalianpur 1975 / India zone III",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",19],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24381"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24382 : Kalianpur 1880 / India zone IIb --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24382,'EPSG',24382,'PROJCS["Kalianpur 1880 / India zone IIb",GEOGCS["Kalianpur 1880",DATUM["Kalianpur_1880",SPHEROID["Everest (1830 Definition)",6377299.36559538,300.8017255433552,AUTHORITY["EPSG","7042"]],AUTHORITY["EPSG","6243"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4243"]],UNIT["Indian yard",0.9143985307444408,AUTHORITY["EPSG","9084"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",90],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",3000000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","24382"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs '); --- --- EPSG 24383 : Kalianpur 1975 / India zone IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24383,'EPSG',24383,'PROJCS["Kalianpur 1975 / India zone IV",GEOGCS["Kalianpur 1975",DATUM["Kalianpur_1975",SPHEROID["Everest 1830 (1975 Definition)",6377299.151,300.8017255,AUTHORITY["EPSG","7045"]],TOWGS84[295,736,257,0,0,0,0],AUTHORITY["EPSG","6146"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4146"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",12],PARAMETER["central_meridian",80],PARAMETER["scale_factor",0.99878641],PARAMETER["false_easting",2743195.5],PARAMETER["false_northing",914398.5],AUTHORITY["EPSG","24383"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24500 : Kertau 1968 / Singapore Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24500,'EPSG',24500,'PROJCS["Kertau 1968 / Singapore Grid",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",1.287646666666667],PARAMETER["central_meridian",103.8530022222222],PARAMETER["false_easting",30000],PARAMETER["false_northing",30000],AUTHORITY["EPSG","24500"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24547 : Kertau 1968 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24547,'EPSG',24547,'PROJCS["Kertau 1968 / UTM zone 47N",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24547"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24548 : Kertau 1968 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24548,'EPSG',24548,'PROJCS["Kertau 1968 / UTM zone 48N",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24548"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24571 : Kertau / R.S.O. Malaya (ch) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24571,'EPSG',24571,'PROJCS["Kertau / R.S.O. Malaya (ch) (deprecated)",GEOGCS["Kertau 1968",DATUM["Kertau_1968",SPHEROID["Everest 1830 Modified",6377304.063,300.8017,AUTHORITY["EPSG","7018"]],TOWGS84[-11,851,5,0,0,0,0],AUTHORITY["EPSG","6245"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4245"]],UNIT["British chain (Benoit 1895 B)",20.11678249437587,AUTHORITY["EPSG","9062"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",102.25],PARAMETER["azimuth",323.0257905],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",40000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24571"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +gamma=323.1301023611111 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs '); --- --- EPSG 24600 : KOC Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24600,'EPSG',24600,'PROJCS["KOC Lambert",GEOGCS["KOC",DATUM["Kuwait_Oil_Company",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-294.7,-200.1,525.5,0,0,0,0],AUTHORITY["EPSG","6246"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4246"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",32.5],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9987864078],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1166200],AUTHORITY["EPSG","24600"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24718 : La Canoa / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24718,'EPSG',24718,'PROJCS["La Canoa / UTM zone 18N",GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24719 : La Canoa / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24719,'EPSG',24719,'PROJCS["La Canoa / UTM zone 19N",GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24720 : La Canoa / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24720,'EPSG',24720,'PROJCS["La Canoa / UTM zone 20N",GEOGCS["La Canoa",DATUM["La_Canoa",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-273.5,110.6,-357.9,0,0,0,0],AUTHORITY["EPSG","6247"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4247"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24817 : PSAD56 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24817,'EPSG',24817,'PROJCS["PSAD56 / UTM zone 17N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24817"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24818 : PSAD56 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24818,'EPSG',24818,'PROJCS["PSAD56 / UTM zone 18N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24818"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24819 : PSAD56 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24819,'EPSG',24819,'PROJCS["PSAD56 / UTM zone 19N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24819"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24820 : PSAD56 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24820,'EPSG',24820,'PROJCS["PSAD56 / UTM zone 20N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24820"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24821 : PSAD56 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24821,'EPSG',24821,'PROJCS["PSAD56 / UTM zone 21N",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","24821"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24877 : PSAD56 / UTM zone 17S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24877,'EPSG',24877,'PROJCS["PSAD56 / UTM zone 17S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24877"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24878 : PSAD56 / UTM zone 18S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24878,'EPSG',24878,'PROJCS["PSAD56 / UTM zone 18S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24878"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24879 : PSAD56 / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24879,'EPSG',24879,'PROJCS["PSAD56 / UTM zone 19S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24879"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24880 : PSAD56 / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24880,'EPSG',24880,'PROJCS["PSAD56 / UTM zone 20S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24880"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24881 : PSAD56 / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24881,'EPSG',24881,'PROJCS["PSAD56 / UTM zone 21S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24881"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24882 : PSAD56 / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24882,'EPSG',24882,'PROJCS["PSAD56 / UTM zone 22S",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","24882"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24891 : PSAD56 / Peru west zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24891,'EPSG',24891,'PROJCS["PSAD56 / Peru west zone",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-6],PARAMETER["central_meridian",-80.5],PARAMETER["scale_factor",0.99983008],PARAMETER["false_easting",222000],PARAMETER["false_northing",1426834.743],AUTHORITY["EPSG","24891"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24892 : PSAD56 / Peru central zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24892,'EPSG',24892,'PROJCS["PSAD56 / Peru central zone",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9.5],PARAMETER["central_meridian",-76],PARAMETER["scale_factor",0.99932994],PARAMETER["false_easting",720000],PARAMETER["false_northing",1039979.159],AUTHORITY["EPSG","24892"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 24893 : PSAD56 / Peru east zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (24893,'EPSG',24893,'PROJCS["PSAD56 / Peru east zone",GEOGCS["PSAD56",DATUM["Provisional_South_American_Datum_1956",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-288,175,-376,0,0,0,0],AUTHORITY["EPSG","6248"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4248"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-9.5],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.99952992],PARAMETER["false_easting",1324000],PARAMETER["false_northing",1040084.558],AUTHORITY["EPSG","24893"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25000 : Leigon / Ghana Metre Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25000,'EPSG',25000,'PROJCS["Leigon / Ghana Metre Grid",GEOGCS["Leigon",DATUM["Leigon",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-130,29,364,0,0,0,0],AUTHORITY["EPSG","6250"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4250"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4.666666666666667],PARAMETER["central_meridian",-1],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",274319.51],PARAMETER["false_northing",0],AUTHORITY["EPSG","25000"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25231 : Lome / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25231,'EPSG',25231,'PROJCS["Lome / UTM zone 31N",GEOGCS["Lome",DATUM["Lome",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6252"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4252"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25231"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 25391 : Luzon 1911 / Philippines zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25391,'EPSG',25391,'PROJCS["Luzon 1911 / Philippines zone I",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25391"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25392 : Luzon 1911 / Philippines zone II --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25392,'EPSG',25392,'PROJCS["Luzon 1911 / Philippines zone II",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25392"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25393 : Luzon 1911 / Philippines zone III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25393,'EPSG',25393,'PROJCS["Luzon 1911 / Philippines zone III",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",121],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25393"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25394 : Luzon 1911 / Philippines zone IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25394,'EPSG',25394,'PROJCS["Luzon 1911 / Philippines zone IV",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25394"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25395 : Luzon 1911 / Philippines zone V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25395,'EPSG',25395,'PROJCS["Luzon 1911 / Philippines zone V",GEOGCS["Luzon 1911",DATUM["Luzon_1911",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],TOWGS84[-133,-77,-51,0,0,0,0],AUTHORITY["EPSG","6253"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4253"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",125],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25395"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25700 : Makassar (Jakarta) / NEIEZ (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25700,'EPSG',25700,'PROJCS["Makassar (Jakarta) / NEIEZ (deprecated)",GEOGCS["Makassar (Jakarta)",DATUM["Makassar_Jakarta",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-587.8,519.75,145.76,0,0,0,0],AUTHORITY["EPSG","6804"]],PRIMEM["Jakarta",106.8077194444444,AUTHORITY["EPSG","8908"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4804"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",110],PARAMETER["scale_factor",0.997],PARAMETER["false_easting",3900000],PARAMETER["false_northing",900000],AUTHORITY["EPSG","25700"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs '); --- --- EPSG 25828 : ETRS89 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25828,'EPSG',25828,'PROJCS["ETRS89 / UTM zone 28N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25828"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25829 : ETRS89 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25829,'EPSG',25829,'PROJCS["ETRS89 / UTM zone 29N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25829"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25830 : ETRS89 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25830,'EPSG',25830,'PROJCS["ETRS89 / UTM zone 30N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25830"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25831 : ETRS89 / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25831,'EPSG',25831,'PROJCS["ETRS89 / UTM zone 31N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25831"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25832 : ETRS89 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25832,'EPSG',25832,'PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25832"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25833 : ETRS89 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25833,'EPSG',25833,'PROJCS["ETRS89 / UTM zone 33N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25833"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25834 : ETRS89 / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25834,'EPSG',25834,'PROJCS["ETRS89 / UTM zone 34N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25834"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25835 : ETRS89 / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25835,'EPSG',25835,'PROJCS["ETRS89 / UTM zone 35N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25835"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25836 : ETRS89 / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25836,'EPSG',25836,'PROJCS["ETRS89 / UTM zone 36N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25836"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25837 : ETRS89 / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25837,'EPSG',25837,'PROJCS["ETRS89 / UTM zone 37N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25837"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25838 : ETRS89 / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25838,'EPSG',25838,'PROJCS["ETRS89 / UTM zone 38N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25838"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25884 : ETRS89 / TM Baltic93 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25884,'EPSG',25884,'PROJCS["ETRS89 / TM Baltic93",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","25884"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 25932 : Malongo 1987 / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (25932,'EPSG',25932,'PROJCS["Malongo 1987 / UTM zone 32S",GEOGCS["Malongo 1987",DATUM["Malongo_1987",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-254.1,-5.36,-100.29,0,0,0,0],AUTHORITY["EPSG","6259"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4259"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","25932"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26191 : Merchich / Nord Maroc --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26191,'EPSG',26191,'PROJCS["Merchich / Nord Maroc",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","26191"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26192 : Merchich / Sud Maroc --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26192,'EPSG',26192,'PROJCS["Merchich / Sud Maroc",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",29.7],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999615596],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","26192"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26193 : Merchich / Sahara (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26193,'EPSG',26193,'PROJCS["Merchich / Sahara (deprecated)",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26.1],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1200000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26193"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26194 : Merchich / Sahara Nord --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26194,'EPSG',26194,'PROJCS["Merchich / Sahara Nord",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",26.1],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999616304],PARAMETER["false_easting",1200000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26194"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26195 : Merchich / Sahara Sud --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26195,'EPSG',26195,'PROJCS["Merchich / Sahara Sud",GEOGCS["Merchich",DATUM["Merchich",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[31,146,47,0,0,0,0],AUTHORITY["EPSG","6261"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4261"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",22.5],PARAMETER["central_meridian",-5.4],PARAMETER["scale_factor",0.999616437],PARAMETER["false_easting",1500000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26195"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26237 : Massawa / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26237,'EPSG',26237,'PROJCS["Massawa / UTM zone 37N",GEOGCS["Massawa",DATUM["Massawa",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[639,405,60,0,0,0,0],AUTHORITY["EPSG","6262"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4262"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26237"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26331 : Minna / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26331,'EPSG',26331,'PROJCS["Minna / UTM zone 31N",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26331"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26332 : Minna / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26332,'EPSG',26332,'PROJCS["Minna / UTM zone 32N",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26332"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26391 : Minna / Nigeria West Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26391,'EPSG',26391,'PROJCS["Minna / Nigeria West Belt",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4],PARAMETER["central_meridian",4.5],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",230738.26],PARAMETER["false_northing",0],AUTHORITY["EPSG","26391"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26392 : Minna / Nigeria Mid Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26392,'EPSG',26392,'PROJCS["Minna / Nigeria Mid Belt",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4],PARAMETER["central_meridian",8.5],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",670553.98],PARAMETER["false_northing",0],AUTHORITY["EPSG","26392"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26393 : Minna / Nigeria East Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26393,'EPSG',26393,'PROJCS["Minna / Nigeria East Belt",GEOGCS["Minna",DATUM["Minna",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-92,-93,122,0,0,0,0],AUTHORITY["EPSG","6263"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4263"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",4],PARAMETER["central_meridian",12.5],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",1110369.7],PARAMETER["false_northing",0],AUTHORITY["EPSG","26393"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26432 : Mhast / UTM zone 32S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26432,'EPSG',26432,'PROJCS["Mhast / UTM zone 32S (deprecated)",GEOGCS["Mhast",DATUM["Mhast",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-252.95,-4.11,-96.38,0,0,0,0],AUTHORITY["EPSG","6264"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4264"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","26432"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26591 : Monte Mario (Rome) / Italy zone 1 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26591,'EPSG',26591,'PROJCS["Monte Mario (Rome) / Italy zone 1 (deprecated)",GEOGCS["Monte Mario (Rome)",DATUM["Monte_Mario_Rome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6806"]],PRIMEM["Rome",12.45233333333333,AUTHORITY["EPSG","8906"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4806"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3.45233333333333],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26591"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs '); --- --- EPSG 26592 : Monte Mario (Rome) / Italy zone 2 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26592,'EPSG',26592,'PROJCS["Monte Mario (Rome) / Italy zone 2 (deprecated)",GEOGCS["Monte Mario (Rome)",DATUM["Monte_Mario_Rome",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68],AUTHORITY["EPSG","6806"]],PRIMEM["Rome",12.45233333333333,AUTHORITY["EPSG","8906"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4806"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",2.54766666666666],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",2520000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26592"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs '); --- --- EPSG 26632 : M'poraloko / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26632,'EPSG',26632,'PROJCS["M''poraloko / UTM zone 32N",GEOGCS["M''poraloko",DATUM["M_poraloko",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-74,-130,42,0,0,0,0],AUTHORITY["EPSG","6266"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4266"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26632"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26692 : M'poraloko / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26692,'EPSG',26692,'PROJCS["M''poraloko / UTM zone 32S",GEOGCS["M''poraloko",DATUM["M_poraloko",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-74,-130,42,0,0,0,0],AUTHORITY["EPSG","6266"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4266"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","26692"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26701 : NAD27 / UTM zone 1N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26701,'EPSG',26701,'PROJCS["NAD27 / UTM zone 1N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26701"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26702 : NAD27 / UTM zone 2N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26702,'EPSG',26702,'PROJCS["NAD27 / UTM zone 2N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26702"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26703 : NAD27 / UTM zone 3N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26703,'EPSG',26703,'PROJCS["NAD27 / UTM zone 3N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26703"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26704 : NAD27 / UTM zone 4N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26704,'EPSG',26704,'PROJCS["NAD27 / UTM zone 4N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26704"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26705 : NAD27 / UTM zone 5N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26705,'EPSG',26705,'PROJCS["NAD27 / UTM zone 5N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26705"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26706 : NAD27 / UTM zone 6N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26706,'EPSG',26706,'PROJCS["NAD27 / UTM zone 6N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26706"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26707 : NAD27 / UTM zone 7N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26707,'EPSG',26707,'PROJCS["NAD27 / UTM zone 7N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26707"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26708 : NAD27 / UTM zone 8N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26708,'EPSG',26708,'PROJCS["NAD27 / UTM zone 8N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26708"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26709 : NAD27 / UTM zone 9N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26709,'EPSG',26709,'PROJCS["NAD27 / UTM zone 9N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26709"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26710 : NAD27 / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26710,'EPSG',26710,'PROJCS["NAD27 / UTM zone 10N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26710"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26711 : NAD27 / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26711,'EPSG',26711,'PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26711"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26712 : NAD27 / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26712,'EPSG',26712,'PROJCS["NAD27 / UTM zone 12N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26712"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26713 : NAD27 / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26713,'EPSG',26713,'PROJCS["NAD27 / UTM zone 13N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26713"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26714 : NAD27 / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26714,'EPSG',26714,'PROJCS["NAD27 / UTM zone 14N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26714"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26715 : NAD27 / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26715,'EPSG',26715,'PROJCS["NAD27 / UTM zone 15N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26715"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26716 : NAD27 / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26716,'EPSG',26716,'PROJCS["NAD27 / UTM zone 16N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26716"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26717 : NAD27 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26717,'EPSG',26717,'PROJCS["NAD27 / UTM zone 17N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26717"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26718 : NAD27 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26718,'EPSG',26718,'PROJCS["NAD27 / UTM zone 18N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26719 : NAD27 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26719,'EPSG',26719,'PROJCS["NAD27 / UTM zone 19N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26720 : NAD27 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26720,'EPSG',26720,'PROJCS["NAD27 / UTM zone 20N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26721 : NAD27 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26721,'EPSG',26721,'PROJCS["NAD27 / UTM zone 21N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26721"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26722 : NAD27 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26722,'EPSG',26722,'PROJCS["NAD27 / UTM zone 22N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26722"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 26729 : NAD27 / Alabama East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26729,'EPSG',26729,'PROJCS["NAD27 / Alabama East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26729"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26730 : NAD27 / Alabama West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26730,'EPSG',26730,'PROJCS["NAD27 / Alabama West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26730"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26731 : NAD27 / Alaska zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26731,'EPSG',26731,'PROJCS["NAD27 / Alaska zone 1",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",57],PARAMETER["longitude_of_center",-133.6666666666667],PARAMETER["azimuth",323.1301023611111],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",16404166.67],PARAMETER["false_northing",-16404166.67],AUTHORITY["EPSG","26731"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +gamma=323.1301023611111 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26732 : NAD27 / Alaska zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26732,'EPSG',26732,'PROJCS["NAD27 / Alaska zone 2",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26732"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26733 : NAD27 / Alaska zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26733,'EPSG',26733,'PROJCS["NAD27 / Alaska zone 3",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-146],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26733"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26734 : NAD27 / Alaska zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26734,'EPSG',26734,'PROJCS["NAD27 / Alaska zone 4",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26734"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26735 : NAD27 / Alaska zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26735,'EPSG',26735,'PROJCS["NAD27 / Alaska zone 5",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26735"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26736 : NAD27 / Alaska zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26736,'EPSG',26736,'PROJCS["NAD27 / Alaska zone 6",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26736"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26737 : NAD27 / Alaska zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26737,'EPSG',26737,'PROJCS["NAD27 / Alaska zone 7",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-162],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26737"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26738 : NAD27 / Alaska zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26738,'EPSG',26738,'PROJCS["NAD27 / Alaska zone 8",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-166],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26738"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26739 : NAD27 / Alaska zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26739,'EPSG',26739,'PROJCS["NAD27 / Alaska zone 9",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26739"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26740 : NAD27 / Alaska zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26740,'EPSG',26740,'PROJCS["NAD27 / Alaska zone 10",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",53.83333333333334],PARAMETER["standard_parallel_2",51.83333333333334],PARAMETER["latitude_of_origin",51],PARAMETER["central_meridian",-176],PARAMETER["false_easting",3000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26740"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26741 : NAD27 / California zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26741,'EPSG',26741,'PROJCS["NAD27 / California zone I",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26741"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26742 : NAD27 / California zone II --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26742,'EPSG',26742,'PROJCS["NAD27 / California zone II",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26742"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26743 : NAD27 / California zone III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26743,'EPSG',26743,'PROJCS["NAD27 / California zone III",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26743"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26744 : NAD27 / California zone IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26744,'EPSG',26744,'PROJCS["NAD27 / California zone IV",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26744"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26745 : NAD27 / California zone V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26745,'EPSG',26745,'PROJCS["NAD27 / California zone V",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26745"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26746 : NAD27 / California zone VI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26746,'EPSG',26746,'PROJCS["NAD27 / California zone VI",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26746"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26747 : NAD27 / California zone VII (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26747,'EPSG',26747,'PROJCS["NAD27 / California zone VII (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.41666666666666],PARAMETER["standard_parallel_2",33.86666666666667],PARAMETER["latitude_of_origin",34.13333333333333],PARAMETER["central_meridian",-118.3333333333333],PARAMETER["false_easting",4186692.58],PARAMETER["false_northing",416926.74],AUTHORITY["EPSG","26747"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26748 : NAD27 / Arizona East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26748,'EPSG',26748,'PROJCS["NAD27 / Arizona East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26748"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26749 : NAD27 / Arizona Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26749,'EPSG',26749,'PROJCS["NAD27 / Arizona Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26749"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26750 : NAD27 / Arizona West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26750,'EPSG',26750,'PROJCS["NAD27 / Arizona West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26750"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26751 : NAD27 / Arkansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26751,'EPSG',26751,'PROJCS["NAD27 / Arkansas North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26751"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26752 : NAD27 / Arkansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26752,'EPSG',26752,'PROJCS["NAD27 / Arkansas South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26752"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26753 : NAD27 / Colorado North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26753,'EPSG',26753,'PROJCS["NAD27 / Colorado North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.71666666666667],PARAMETER["standard_parallel_2",40.78333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26753"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26754 : NAD27 / Colorado Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26754,'EPSG',26754,'PROJCS["NAD27 / Colorado Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26754"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26755 : NAD27 / Colorado South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26755,'EPSG',26755,'PROJCS["NAD27 / Colorado South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26755"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26756 : NAD27 / Connecticut --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26756,'EPSG',26756,'PROJCS["NAD27 / Connecticut",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26756"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26757 : NAD27 / Delaware --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26757,'EPSG',26757,'PROJCS["NAD27 / Delaware",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26757"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26758 : NAD27 / Florida East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26758,'EPSG',26758,'PROJCS["NAD27 / Florida East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26758"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26759 : NAD27 / Florida West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26759,'EPSG',26759,'PROJCS["NAD27 / Florida West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26759"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26760 : NAD27 / Florida North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26760,'EPSG',26760,'PROJCS["NAD27 / Florida North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26760"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26766 : NAD27 / Georgia East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26766,'EPSG',26766,'PROJCS["NAD27 / Georgia East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26766"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26767 : NAD27 / Georgia West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26767,'EPSG',26767,'PROJCS["NAD27 / Georgia West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26767"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26768 : NAD27 / Idaho East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26768,'EPSG',26768,'PROJCS["NAD27 / Idaho East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26768"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26769 : NAD27 / Idaho Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26769,'EPSG',26769,'PROJCS["NAD27 / Idaho Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26769"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26770 : NAD27 / Idaho West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26770,'EPSG',26770,'PROJCS["NAD27 / Idaho West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26770"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26771 : NAD27 / Illinois East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26771,'EPSG',26771,'PROJCS["NAD27 / Illinois East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26771"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26772 : NAD27 / Illinois West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26772,'EPSG',26772,'PROJCS["NAD27 / Illinois West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26772"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26773 : NAD27 / Indiana East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26773,'EPSG',26773,'PROJCS["NAD27 / Indiana East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26773"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26774 : NAD27 / Indiana West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26774,'EPSG',26774,'PROJCS["NAD27 / Indiana West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26774"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26775 : NAD27 / Iowa North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26775,'EPSG',26775,'PROJCS["NAD27 / Iowa North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26775"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26776 : NAD27 / Iowa South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26776,'EPSG',26776,'PROJCS["NAD27 / Iowa South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26776"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26777 : NAD27 / Kansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26777,'EPSG',26777,'PROJCS["NAD27 / Kansas North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26777"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26778 : NAD27 / Kansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26778,'EPSG',26778,'PROJCS["NAD27 / Kansas South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26778"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26779 : NAD27 / Kentucky North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26779,'EPSG',26779,'PROJCS["NAD27 / Kentucky North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",38.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26779"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26780 : NAD27 / Kentucky South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26780,'EPSG',26780,'PROJCS["NAD27 / Kentucky South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.73333333333333],PARAMETER["standard_parallel_2",37.93333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26780"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26781 : NAD27 / Louisiana North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26781,'EPSG',26781,'PROJCS["NAD27 / Louisiana North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.16666666666667],PARAMETER["standard_parallel_2",32.66666666666666],PARAMETER["latitude_of_origin",30.66666666666667],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26781"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26782 : NAD27 / Louisiana South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26782,'EPSG',26782,'PROJCS["NAD27 / Louisiana South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",29.3],PARAMETER["standard_parallel_2",30.7],PARAMETER["latitude_of_origin",28.66666666666667],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26782"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26783 : NAD27 / Maine East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26783,'EPSG',26783,'PROJCS["NAD27 / Maine East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26783"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26784 : NAD27 / Maine West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26784,'EPSG',26784,'PROJCS["NAD27 / Maine West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26784"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26785 : NAD27 / Maryland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26785,'EPSG',26785,'PROJCS["NAD27 / Maryland",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.3],PARAMETER["standard_parallel_2",39.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-77],PARAMETER["false_easting",800000.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26785"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26786 : NAD27 / Massachusetts Mainland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26786,'EPSG',26786,'PROJCS["NAD27 / Massachusetts Mainland",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.71666666666667],PARAMETER["standard_parallel_2",42.68333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26786"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26787 : NAD27 / Massachusetts Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26787,'EPSG',26787,'PROJCS["NAD27 / Massachusetts Island",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.28333333333333],PARAMETER["standard_parallel_2",41.48333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26787"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26791 : NAD27 / Minnesota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26791,'EPSG',26791,'PROJCS["NAD27 / Minnesota North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.03333333333333],PARAMETER["standard_parallel_2",48.63333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26791"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26792 : NAD27 / Minnesota Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26792,'EPSG',26792,'PROJCS["NAD27 / Minnesota Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.61666666666667],PARAMETER["standard_parallel_2",47.05],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26792"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26793 : NAD27 / Minnesota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26793,'EPSG',26793,'PROJCS["NAD27 / Minnesota South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.78333333333333],PARAMETER["standard_parallel_2",45.21666666666667],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26793"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26794 : NAD27 / Mississippi East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26794,'EPSG',26794,'PROJCS["NAD27 / Mississippi East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26794"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26795 : NAD27 / Mississippi West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26795,'EPSG',26795,'PROJCS["NAD27 / Mississippi West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26795"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26796 : NAD27 / Missouri East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26796,'EPSG',26796,'PROJCS["NAD27 / Missouri East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26796"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26797 : NAD27 / Missouri Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26797,'EPSG',26797,'PROJCS["NAD27 / Missouri Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26797"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26798 : NAD27 / Missouri West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26798,'EPSG',26798,'PROJCS["NAD27 / Missouri West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26798"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26799 : NAD27 / California zone VII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26799,'EPSG',26799,'PROJCS["NAD27 / California zone VII",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.41666666666666],PARAMETER["standard_parallel_2",33.86666666666667],PARAMETER["latitude_of_origin",34.13333333333333],PARAMETER["central_meridian",-118.3333333333333],PARAMETER["false_easting",4186692.58],PARAMETER["false_northing",4160926.74],AUTHORITY["EPSG","26799"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 26801 : NAD Michigan / Michigan East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26801,'EPSG',26801,'PROJCS["NAD Michigan / Michigan East",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-83.66666666666667],PARAMETER["scale_factor",0.999942857],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26801"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs '); --- --- EPSG 26802 : NAD Michigan / Michigan Old Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26802,'EPSG',26802,'PROJCS["NAD Michigan / Michigan Old Central",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-85.75],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26802"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs '); --- --- EPSG 26803 : NAD Michigan / Michigan West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26803,'EPSG',26803,'PROJCS["NAD Michigan / Michigan West",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-88.75],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26803"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs '); --- --- EPSG 26811 : NAD Michigan / Michigan North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26811,'EPSG',26811,'PROJCS["NAD Michigan / Michigan North",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.48333333333333],PARAMETER["standard_parallel_2",47.08333333333334],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26811"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs '); --- --- EPSG 26812 : NAD Michigan / Michigan Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26812,'EPSG',26812,'PROJCS["NAD Michigan / Michigan Central",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.18333333333333],PARAMETER["standard_parallel_2",45.7],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26812"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs '); --- --- EPSG 26813 : NAD Michigan / Michigan South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26813,'EPSG',26813,'PROJCS["NAD Michigan / Michigan South",GEOGCS["NAD27 Michigan",DATUM["NAD_Michigan",SPHEROID["Clarke 1866 Michigan",6378450.047548896,294.9786971646739,AUTHORITY["EPSG","7009"]],AUTHORITY["EPSG","6268"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4268"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.1],PARAMETER["standard_parallel_2",43.66666666666666],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26813"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs '); --- --- EPSG 26814 : NAD83 / Maine East (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26814,'EPSG',26814,'PROJCS["NAD83 / Maine East (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26814"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26815 : NAD83 / Maine West (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26815,'EPSG',26815,'PROJCS["NAD83 / Maine West (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26815"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26819 : NAD83 / Minnesota North (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26819,'EPSG',26819,'PROJCS["NAD83 / Minnesota North (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26819"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26820 : NAD83 / Minnesota Central (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26820,'EPSG',26820,'PROJCS["NAD83 / Minnesota Central (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26820"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26821 : NAD83 / Minnesota South (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26821,'EPSG',26821,'PROJCS["NAD83 / Minnesota South (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26821"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26822 : NAD83 / Nebraska (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26822,'EPSG',26822,'PROJCS["NAD83 / Nebraska (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000.0000101601],PARAMETER["false_northing",0],AUTHORITY["EPSG","26822"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26823 : NAD83 / West Virginia North (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26823,'EPSG',26823,'PROJCS["NAD83 / West Virginia North (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26823"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26824 : NAD83 / West Virginia South (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26824,'EPSG',26824,'PROJCS["NAD83 / West Virginia South (ftUS) (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26824"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26825 : NAD83(HARN) / Maine East (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26825,'EPSG',26825,'PROJCS["NAD83(HARN) / Maine East (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26825"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26826 : NAD83(HARN) / Maine West (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26826,'EPSG',26826,'PROJCS["NAD83(HARN) / Maine West (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26826"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26830 : NAD83(HARN) / Minnesota North (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26830,'EPSG',26830,'PROJCS["NAD83(HARN) / Minnesota North (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26830"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26831 : NAD83(HARN) / Minnesota Central (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26831,'EPSG',26831,'PROJCS["NAD83(HARN) / Minnesota Central (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26831"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26832 : NAD83(HARN) / Minnesota South (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26832,'EPSG',26832,'PROJCS["NAD83(HARN) / Minnesota South (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26832"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26833 : NAD83(HARN) / Nebraska (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26833,'EPSG',26833,'PROJCS["NAD83(HARN) / Nebraska (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000.0000101601],PARAMETER["false_northing",0],AUTHORITY["EPSG","26833"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26834 : NAD83(HARN) / West Virginia North (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26834,'EPSG',26834,'PROJCS["NAD83(HARN) / West Virginia North (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26834"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26835 : NAD83(HARN) / West Virginia South (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26835,'EPSG',26835,'PROJCS["NAD83(HARN) / West Virginia South (ftUS) (deprecated)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26835"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26836 : NAD83(NSRS2007) / Maine East (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26836,'EPSG',26836,'PROJCS["NAD83(NSRS2007) / Maine East (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26836"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26837 : NAD83(NSRS2007) / Maine West (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26837,'EPSG',26837,'PROJCS["NAD83(NSRS2007) / Maine West (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26837"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26841 : NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26841,'EPSG',26841,'PROJCS["NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26841"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26842 : NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26842,'EPSG',26842,'PROJCS["NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26842"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26843 : NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26843,'EPSG',26843,'PROJCS["NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000.0000101601],PARAMETER["false_northing",99999.99998984],AUTHORITY["EPSG","26843"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26844 : NAD83(NSRS2007) / Nebraska (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26844,'EPSG',26844,'PROJCS["NAD83(NSRS2007) / Nebraska (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000.0000101601],PARAMETER["false_northing",0],AUTHORITY["EPSG","26844"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26845 : NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26845,'EPSG',26845,'PROJCS["NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26845"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26846 : NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26846,'EPSG',26846,'PROJCS["NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26846"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26847 : NAD83 / Maine East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26847,'EPSG',26847,'PROJCS["NAD83 / Maine East (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26847"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26848 : NAD83 / Maine West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26848,'EPSG',26848,'PROJCS["NAD83 / Maine West (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",0],AUTHORITY["EPSG","26848"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26849 : NAD83 / Minnesota North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26849,'EPSG',26849,'PROJCS["NAD83 / Minnesota North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26849"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26850 : NAD83 / Minnesota Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26850,'EPSG',26850,'PROJCS["NAD83 / Minnesota Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26850"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26851 : NAD83 / Minnesota South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26851,'EPSG',26851,'PROJCS["NAD83 / Minnesota South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26851"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26852 : NAD83 / Nebraska (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26852,'EPSG',26852,'PROJCS["NAD83 / Nebraska (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","26852"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26853 : NAD83 / West Virginia North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26853,'EPSG',26853,'PROJCS["NAD83 / West Virginia North (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26853"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26854 : NAD83 / West Virginia South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26854,'EPSG',26854,'PROJCS["NAD83 / West Virginia South (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26854"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26855 : NAD83(HARN) / Maine East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26855,'EPSG',26855,'PROJCS["NAD83(HARN) / Maine East (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26855"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26856 : NAD83(HARN) / Maine West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26856,'EPSG',26856,'PROJCS["NAD83(HARN) / Maine West (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",0],AUTHORITY["EPSG","26856"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26857 : NAD83(HARN) / Minnesota North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26857,'EPSG',26857,'PROJCS["NAD83(HARN) / Minnesota North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26857"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26858 : NAD83(HARN) / Minnesota Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26858,'EPSG',26858,'PROJCS["NAD83(HARN) / Minnesota Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26858"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26859 : NAD83(HARN) / Minnesota South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26859,'EPSG',26859,'PROJCS["NAD83(HARN) / Minnesota South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26859"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26860 : NAD83(HARN) / Nebraska (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26860,'EPSG',26860,'PROJCS["NAD83(HARN) / Nebraska (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","26860"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26861 : NAD83(HARN) / West Virginia North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26861,'EPSG',26861,'PROJCS["NAD83(HARN) / West Virginia North (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26861"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26862 : NAD83(HARN) / West Virginia South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26862,'EPSG',26862,'PROJCS["NAD83(HARN) / West Virginia South (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26862"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26863 : NAD83(NSRS2007) / Maine East (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26863,'EPSG',26863,'PROJCS["NAD83(NSRS2007) / Maine East (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",984250.0000000002],PARAMETER["false_northing",0],AUTHORITY["EPSG","26863"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26864 : NAD83(NSRS2007) / Maine West (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26864,'EPSG',26864,'PROJCS["NAD83(NSRS2007) / Maine West (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",2952750],PARAMETER["false_northing",0],AUTHORITY["EPSG","26864"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26865 : NAD83(NSRS2007) / Minnesota North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26865,'EPSG',26865,'PROJCS["NAD83(NSRS2007) / Minnesota North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26865"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26866 : NAD83(NSRS2007) / Minnesota Central (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26866,'EPSG',26866,'PROJCS["NAD83(NSRS2007) / Minnesota Central (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26866"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26867 : NAD83(NSRS2007) / Minnesota South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26867,'EPSG',26867,'PROJCS["NAD83(NSRS2007) / Minnesota South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",2624666.6667],PARAMETER["false_northing",328083.3333],AUTHORITY["EPSG","26867"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26868 : NAD83(NSRS2007) / Nebraska (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26868,'EPSG',26868,'PROJCS["NAD83(NSRS2007) / Nebraska (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",1640416.6667],PARAMETER["false_northing",0],AUTHORITY["EPSG","26868"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26869 : NAD83(NSRS2007) / West Virginia North (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26869,'EPSG',26869,'PROJCS["NAD83(NSRS2007) / West Virginia North (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26869"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26870 : NAD83(NSRS2007) / West Virginia South (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26870,'EPSG',26870,'PROJCS["NAD83(NSRS2007) / West Virginia South (ftUS)",GEOGCS["NAD83(NSRS2007)",DATUM["NAD83_National_Spatial_Reference_System_2007",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6759"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4759"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",1968500],PARAMETER["false_northing",0],AUTHORITY["EPSG","26870"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 26891 : NAD83(CSRS) / MTM zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26891,'EPSG',26891,'PROJCS["NAD83(CSRS) / MTM zone 11",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-82.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26891"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26892 : NAD83(CSRS) / MTM zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26892,'EPSG',26892,'PROJCS["NAD83(CSRS) / MTM zone 12",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26892"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26893 : NAD83(CSRS) / MTM zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26893,'EPSG',26893,'PROJCS["NAD83(CSRS) / MTM zone 13",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26893"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26894 : NAD83(CSRS) / MTM zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26894,'EPSG',26894,'PROJCS["NAD83(CSRS) / MTM zone 14",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26894"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26895 : NAD83(CSRS) / MTM zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26895,'EPSG',26895,'PROJCS["NAD83(CSRS) / MTM zone 15",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26895"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26896 : NAD83(CSRS) / MTM zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26896,'EPSG',26896,'PROJCS["NAD83(CSRS) / MTM zone 16",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26896"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26897 : NAD83(CSRS) / MTM zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26897,'EPSG',26897,'PROJCS["NAD83(CSRS) / MTM zone 17",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-96],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26897"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26898 : NAD83(CSRS) / MTM zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26898,'EPSG',26898,'PROJCS["NAD83(CSRS) / MTM zone 1",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-53],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26898"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26899 : NAD83(CSRS) / MTM zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26899,'EPSG',26899,'PROJCS["NAD83(CSRS) / MTM zone 2",GEOGCS["NAD83(CSRS)",DATUM["NAD83_Canadian_Spatial_Reference_System",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6140"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4617"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-56],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","26899"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26901 : NAD83 / UTM zone 1N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26901,'EPSG',26901,'PROJCS["NAD83 / UTM zone 1N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26901"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26902 : NAD83 / UTM zone 2N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26902,'EPSG',26902,'PROJCS["NAD83 / UTM zone 2N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26902"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26903 : NAD83 / UTM zone 3N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26903,'EPSG',26903,'PROJCS["NAD83 / UTM zone 3N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26903"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26904 : NAD83 / UTM zone 4N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26904,'EPSG',26904,'PROJCS["NAD83 / UTM zone 4N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26904"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26905 : NAD83 / UTM zone 5N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26905,'EPSG',26905,'PROJCS["NAD83 / UTM zone 5N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26905"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26906 : NAD83 / UTM zone 6N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26906,'EPSG',26906,'PROJCS["NAD83 / UTM zone 6N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26906"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26907 : NAD83 / UTM zone 7N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26907,'EPSG',26907,'PROJCS["NAD83 / UTM zone 7N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26907"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26908 : NAD83 / UTM zone 8N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26908,'EPSG',26908,'PROJCS["NAD83 / UTM zone 8N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26908"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26909 : NAD83 / UTM zone 9N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26909,'EPSG',26909,'PROJCS["NAD83 / UTM zone 9N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26909"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26910 : NAD83 / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26910,'EPSG',26910,'PROJCS["NAD83 / UTM zone 10N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26910"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26911 : NAD83 / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26911,'EPSG',26911,'PROJCS["NAD83 / UTM zone 11N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26911"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26912 : NAD83 / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26912,'EPSG',26912,'PROJCS["NAD83 / UTM zone 12N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26912"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26913 : NAD83 / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26913,'EPSG',26913,'PROJCS["NAD83 / UTM zone 13N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26913"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26914 : NAD83 / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26914,'EPSG',26914,'PROJCS["NAD83 / UTM zone 14N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26914"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26915 : NAD83 / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26915,'EPSG',26915,'PROJCS["NAD83 / UTM zone 15N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26915"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26916 : NAD83 / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26916,'EPSG',26916,'PROJCS["NAD83 / UTM zone 16N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26916"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26917 : NAD83 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26917,'EPSG',26917,'PROJCS["NAD83 / UTM zone 17N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26917"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26918 : NAD83 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26918,'EPSG',26918,'PROJCS["NAD83 / UTM zone 18N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26918"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26919 : NAD83 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26919,'EPSG',26919,'PROJCS["NAD83 / UTM zone 19N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26919"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26920 : NAD83 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26920,'EPSG',26920,'PROJCS["NAD83 / UTM zone 20N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26920"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26921 : NAD83 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26921,'EPSG',26921,'PROJCS["NAD83 / UTM zone 21N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26921"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26922 : NAD83 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26922,'EPSG',26922,'PROJCS["NAD83 / UTM zone 22N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26922"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26923 : NAD83 / UTM zone 23N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26923,'EPSG',26923,'PROJCS["NAD83 / UTM zone 23N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26923"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26929 : NAD83 / Alabama East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26929,'EPSG',26929,'PROJCS["NAD83 / Alabama East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-85.83333333333333],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26929"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26930 : NAD83 / Alabama West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26930,'EPSG',26930,'PROJCS["NAD83 / Alabama West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-87.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26930"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26931 : NAD83 / Alaska zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26931,'EPSG',26931,'PROJCS["NAD83 / Alaska zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",57],PARAMETER["longitude_of_center",-133.6666666666667],PARAMETER["azimuth",323.1301023611111],PARAMETER["rectified_grid_angle",323.1301023611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5000000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","26931"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26932 : NAD83 / Alaska zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26932,'EPSG',26932,'PROJCS["NAD83 / Alaska zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26932"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26933 : NAD83 / Alaska zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26933,'EPSG',26933,'PROJCS["NAD83 / Alaska zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-146],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26933"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26934 : NAD83 / Alaska zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26934,'EPSG',26934,'PROJCS["NAD83 / Alaska zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-150],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26934"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26935 : NAD83 / Alaska zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26935,'EPSG',26935,'PROJCS["NAD83 / Alaska zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26935"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26936 : NAD83 / Alaska zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26936,'EPSG',26936,'PROJCS["NAD83 / Alaska zone 6",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26936"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26937 : NAD83 / Alaska zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26937,'EPSG',26937,'PROJCS["NAD83 / Alaska zone 7",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-162],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26937"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26938 : NAD83 / Alaska zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26938,'EPSG',26938,'PROJCS["NAD83 / Alaska zone 8",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-166],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26938"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26939 : NAD83 / Alaska zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26939,'EPSG',26939,'PROJCS["NAD83 / Alaska zone 9",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",54],PARAMETER["central_meridian",-170],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26939"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26940 : NAD83 / Alaska zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26940,'EPSG',26940,'PROJCS["NAD83 / Alaska zone 10",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",53.83333333333334],PARAMETER["standard_parallel_2",51.83333333333334],PARAMETER["latitude_of_origin",51],PARAMETER["central_meridian",-176],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26940"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26941 : NAD83 / California zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26941,'EPSG',26941,'PROJCS["NAD83 / California zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.66666666666666],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26941"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26942 : NAD83 / California zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26942,'EPSG',26942,'PROJCS["NAD83 / California zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.83333333333334],PARAMETER["standard_parallel_2",38.33333333333334],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-122],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26942"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26943 : NAD83 / California zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26943,'EPSG',26943,'PROJCS["NAD83 / California zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.06666666666667],PARAMETER["latitude_of_origin",36.5],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26943"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26944 : NAD83 / California zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26944,'EPSG',26944,'PROJCS["NAD83 / California zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.25],PARAMETER["standard_parallel_2",36],PARAMETER["latitude_of_origin",35.33333333333334],PARAMETER["central_meridian",-119],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26944"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26945 : NAD83 / California zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26945,'EPSG',26945,'PROJCS["NAD83 / California zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.46666666666667],PARAMETER["standard_parallel_2",34.03333333333333],PARAMETER["latitude_of_origin",33.5],PARAMETER["central_meridian",-118],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26945"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26946 : NAD83 / California zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26946,'EPSG',26946,'PROJCS["NAD83 / California zone 6",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.88333333333333],PARAMETER["standard_parallel_2",32.78333333333333],PARAMETER["latitude_of_origin",32.16666666666666],PARAMETER["central_meridian",-116.25],PARAMETER["false_easting",2000000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26946"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26948 : NAD83 / Arizona East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26948,'EPSG',26948,'PROJCS["NAD83 / Arizona East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-110.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","26948"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26949 : NAD83 / Arizona Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26949,'EPSG',26949,'PROJCS["NAD83 / Arizona Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-111.9166666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","26949"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26950 : NAD83 / Arizona West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26950,'EPSG',26950,'PROJCS["NAD83 / Arizona West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-113.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",213360],PARAMETER["false_northing",0],AUTHORITY["EPSG","26950"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26951 : NAD83 / Arkansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26951,'EPSG',26951,'PROJCS["NAD83 / Arkansas North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.23333333333333],PARAMETER["standard_parallel_2",34.93333333333333],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26951"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26952 : NAD83 / Arkansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26952,'EPSG',26952,'PROJCS["NAD83 / Arkansas South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.76666666666667],PARAMETER["standard_parallel_2",33.3],PARAMETER["latitude_of_origin",32.66666666666666],PARAMETER["central_meridian",-92],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26952"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26953 : NAD83 / Colorado North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26953,'EPSG',26953,'PROJCS["NAD83 / Colorado North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.78333333333333],PARAMETER["standard_parallel_2",39.71666666666667],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","26953"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26954 : NAD83 / Colorado Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26954,'EPSG',26954,'PROJCS["NAD83 / Colorado Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.75],PARAMETER["standard_parallel_2",38.45],PARAMETER["latitude_of_origin",37.83333333333334],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","26954"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26955 : NAD83 / Colorado South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26955,'EPSG',26955,'PROJCS["NAD83 / Colorado South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.43333333333333],PARAMETER["standard_parallel_2",37.23333333333333],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-105.5],PARAMETER["false_easting",914401.8289],PARAMETER["false_northing",304800.6096],AUTHORITY["EPSG","26955"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26956 : NAD83 / Connecticut --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26956,'EPSG',26956,'PROJCS["NAD83 / Connecticut",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.86666666666667],PARAMETER["standard_parallel_2",41.2],PARAMETER["latitude_of_origin",40.83333333333334],PARAMETER["central_meridian",-72.75],PARAMETER["false_easting",304800.6096],PARAMETER["false_northing",152400.3048],AUTHORITY["EPSG","26956"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26957 : NAD83 / Delaware --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26957,'EPSG',26957,'PROJCS["NAD83 / Delaware",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-75.41666666666667],PARAMETER["scale_factor",0.999995],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26957"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26958 : NAD83 / Florida East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26958,'EPSG',26958,'PROJCS["NAD83 / Florida East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26958"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26959 : NAD83 / Florida West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26959,'EPSG',26959,'PROJCS["NAD83 / Florida West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.33333333333333],PARAMETER["central_meridian",-82],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26959"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26960 : NAD83 / Florida North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26960,'EPSG',26960,'PROJCS["NAD83 / Florida North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.75],PARAMETER["standard_parallel_2",29.58333333333333],PARAMETER["latitude_of_origin",29],PARAMETER["central_meridian",-84.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26960"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26961 : NAD83 / Hawaii zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26961,'EPSG',26961,'PROJCS["NAD83 / Hawaii zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",18.83333333333333],PARAMETER["central_meridian",-155.5],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26961"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26962 : NAD83 / Hawaii zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26962,'EPSG',26962,'PROJCS["NAD83 / Hawaii zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20.33333333333333],PARAMETER["central_meridian",-156.6666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26962"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26963 : NAD83 / Hawaii zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26963,'EPSG',26963,'PROJCS["NAD83 / Hawaii zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.16666666666667],PARAMETER["central_meridian",-158],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26963"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26964 : NAD83 / Hawaii zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26964,'EPSG',26964,'PROJCS["NAD83 / Hawaii zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.83333333333333],PARAMETER["central_meridian",-159.5],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26964"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26965 : NAD83 / Hawaii zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26965,'EPSG',26965,'PROJCS["NAD83 / Hawaii zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",21.66666666666667],PARAMETER["central_meridian",-160.1666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26965"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26966 : NAD83 / Georgia East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26966,'EPSG',26966,'PROJCS["NAD83 / Georgia East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-82.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26966"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26967 : NAD83 / Georgia West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26967,'EPSG',26967,'PROJCS["NAD83 / Georgia West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",30],PARAMETER["central_meridian",-84.16666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26967"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26968 : NAD83 / Idaho East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26968,'EPSG',26968,'PROJCS["NAD83 / Idaho East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-112.1666666666667],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26968"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26969 : NAD83 / Idaho Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26969,'EPSG',26969,'PROJCS["NAD83 / Idaho Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-114],PARAMETER["scale_factor",0.999947368],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26969"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26970 : NAD83 / Idaho West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26970,'EPSG',26970,'PROJCS["NAD83 / Idaho West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-115.75],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",800000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26970"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26971 : NAD83 / Illinois East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26971,'EPSG',26971,'PROJCS["NAD83 / Illinois East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-88.33333333333333],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26971"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26972 : NAD83 / Illinois West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26972,'EPSG',26972,'PROJCS["NAD83 / Illinois West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-90.16666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26972"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26973 : NAD83 / Indiana East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26973,'EPSG',26973,'PROJCS["NAD83 / Indiana East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-85.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",100000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","26973"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26974 : NAD83 / Indiana West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26974,'EPSG',26974,'PROJCS["NAD83 / Indiana West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-87.08333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","26974"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26975 : NAD83 / Iowa North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26975,'EPSG',26975,'PROJCS["NAD83 / Iowa North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.26666666666667],PARAMETER["standard_parallel_2",42.06666666666667],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","26975"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26976 : NAD83 / Iowa South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26976,'EPSG',26976,'PROJCS["NAD83 / Iowa South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.61666666666667],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-93.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26976"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26977 : NAD83 / Kansas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26977,'EPSG',26977,'PROJCS["NAD83 / Kansas North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.78333333333333],PARAMETER["standard_parallel_2",38.71666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26977"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26978 : NAD83 / Kansas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26978,'EPSG',26978,'PROJCS["NAD83 / Kansas South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.56666666666667],PARAMETER["standard_parallel_2",37.26666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","26978"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26979 : NAD83 / Kentucky North (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26979,'EPSG',26979,'PROJCS["NAD83 / Kentucky North (deprecated)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",37.96666666666667],PARAMETER["latitude_of_origin",37.5],PARAMETER["central_meridian",-84.25],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26979"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26980 : NAD83 / Kentucky South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26980,'EPSG',26980,'PROJCS["NAD83 / Kentucky South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.93333333333333],PARAMETER["standard_parallel_2",36.73333333333333],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-85.75],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","26980"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26981 : NAD83 / Louisiana North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26981,'EPSG',26981,'PROJCS["NAD83 / Louisiana North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.66666666666666],PARAMETER["standard_parallel_2",31.16666666666667],PARAMETER["latitude_of_origin",30.5],PARAMETER["central_meridian",-92.5],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26981"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26982 : NAD83 / Louisiana South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26982,'EPSG',26982,'PROJCS["NAD83 / Louisiana South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.7],PARAMETER["standard_parallel_2",29.3],PARAMETER["latitude_of_origin",28.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26982"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26983 : NAD83 / Maine East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26983,'EPSG',26983,'PROJCS["NAD83 / Maine East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-68.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26983"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26984 : NAD83 / Maine West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26984,'EPSG',26984,'PROJCS["NAD83 / Maine West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.83333333333334],PARAMETER["central_meridian",-70.16666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",900000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26984"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26985 : NAD83 / Maryland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26985,'EPSG',26985,'PROJCS["NAD83 / Maryland",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.45],PARAMETER["standard_parallel_2",38.3],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-77],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26985"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26986 : NAD83 / Massachusetts Mainland --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26986,'EPSG',26986,'PROJCS["NAD83 / Massachusetts Mainland",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","26986"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26987 : NAD83 / Massachusetts Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26987,'EPSG',26987,'PROJCS["NAD83 / Massachusetts Island",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.48333333333333],PARAMETER["standard_parallel_2",41.28333333333333],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-70.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26987"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26988 : NAD83 / Michigan North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26988,'EPSG',26988,'PROJCS["NAD83 / Michigan North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.08333333333334],PARAMETER["standard_parallel_2",45.48333333333333],PARAMETER["latitude_of_origin",44.78333333333333],PARAMETER["central_meridian",-87],PARAMETER["false_easting",8000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26988"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26989 : NAD83 / Michigan Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26989,'EPSG',26989,'PROJCS["NAD83 / Michigan Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.7],PARAMETER["standard_parallel_2",44.18333333333333],PARAMETER["latitude_of_origin",43.31666666666667],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",6000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26989"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26990 : NAD83 / Michigan South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26990,'EPSG',26990,'PROJCS["NAD83 / Michigan South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43.66666666666666],PARAMETER["standard_parallel_2",42.1],PARAMETER["latitude_of_origin",41.5],PARAMETER["central_meridian",-84.36666666666666],PARAMETER["false_easting",4000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26990"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26991 : NAD83 / Minnesota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26991,'EPSG',26991,'PROJCS["NAD83 / Minnesota North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.63333333333333],PARAMETER["standard_parallel_2",47.03333333333333],PARAMETER["latitude_of_origin",46.5],PARAMETER["central_meridian",-93.1],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","26991"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26992 : NAD83 / Minnesota Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26992,'EPSG',26992,'PROJCS["NAD83 / Minnesota Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.05],PARAMETER["standard_parallel_2",45.61666666666667],PARAMETER["latitude_of_origin",45],PARAMETER["central_meridian",-94.25],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","26992"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26993 : NAD83 / Minnesota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26993,'EPSG',26993,'PROJCS["NAD83 / Minnesota South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.21666666666667],PARAMETER["standard_parallel_2",43.78333333333333],PARAMETER["latitude_of_origin",43],PARAMETER["central_meridian",-94],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","26993"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26994 : NAD83 / Mississippi East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26994,'EPSG',26994,'PROJCS["NAD83 / Mississippi East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-88.83333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26994"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26995 : NAD83 / Mississippi West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26995,'EPSG',26995,'PROJCS["NAD83 / Mississippi West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",29.5],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99995],PARAMETER["false_easting",700000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26995"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26996 : NAD83 / Missouri East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26996,'EPSG',26996,'PROJCS["NAD83 / Missouri East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-90.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26996"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26997 : NAD83 / Missouri Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26997,'EPSG',26997,'PROJCS["NAD83 / Missouri Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",35.83333333333334],PARAMETER["central_meridian",-92.5],PARAMETER["scale_factor",0.999933333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26997"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 26998 : NAD83 / Missouri West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (26998,'EPSG',26998,'PROJCS["NAD83 / Missouri West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36.16666666666666],PARAMETER["central_meridian",-94.5],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",850000],PARAMETER["false_northing",0],AUTHORITY["EPSG","26998"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27037 : Nahrwan 1967 / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27037,'EPSG',27037,'PROJCS["Nahrwan 1967 / UTM zone 37N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27037"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27038 : Nahrwan 1967 / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27038,'EPSG',27038,'PROJCS["Nahrwan 1967 / UTM zone 38N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27038"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27039 : Nahrwan 1967 / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27039,'EPSG',27039,'PROJCS["Nahrwan 1967 / UTM zone 39N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27039"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27040 : Nahrwan 1967 / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27040,'EPSG',27040,'PROJCS["Nahrwan 1967 / UTM zone 40N",GEOGCS["Nahrwan 1967",DATUM["Nahrwan_1967",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-243,-192,477,0,0,0,0],AUTHORITY["EPSG","6270"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4270"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27040"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27120 : Naparima 1972 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27120,'EPSG',27120,'PROJCS["Naparima 1972 / UTM zone 20N",GEOGCS["Naparima 1972",DATUM["Naparima_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-10,375,165,0,0,0,0],AUTHORITY["EPSG","6271"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4271"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27120"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27200 : NZGD49 / New Zealand Map Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27200,'EPSG',27200,'PROJCS["NZGD49 / New Zealand Map Grid",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["New_Zealand_Map_Grid"],PARAMETER["latitude_of_origin",-41],PARAMETER["central_meridian",173],PARAMETER["false_easting",2510000],PARAMETER["false_northing",6023150],AUTHORITY["EPSG","27200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27205 : NZGD49 / Mount Eden Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27205,'EPSG',27205,'PROJCS["NZGD49 / Mount Eden Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-36.87986527777778],PARAMETER["central_meridian",174.7643393611111],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27205"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27206 : NZGD49 / Bay of Plenty Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27206,'EPSG',27206,'PROJCS["NZGD49 / Bay of Plenty Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-37.76124980555556],PARAMETER["central_meridian",176.46619725],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27206"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27207 : NZGD49 / Poverty Bay Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27207,'EPSG',27207,'PROJCS["NZGD49 / Poverty Bay Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-38.62470277777778],PARAMETER["central_meridian",177.8856362777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27207"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27208 : NZGD49 / Hawkes Bay Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27208,'EPSG',27208,'PROJCS["NZGD49 / Hawkes Bay Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.65092930555556],PARAMETER["central_meridian",176.6736805277778],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27208"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27209 : NZGD49 / Taranaki Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27209,'EPSG',27209,'PROJCS["NZGD49 / Taranaki Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.13575830555556],PARAMETER["central_meridian",174.22801175],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27209"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27210 : NZGD49 / Tuhirangi Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27210,'EPSG',27210,'PROJCS["NZGD49 / Tuhirangi Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39.51247038888889],PARAMETER["central_meridian",175.6400368055556],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27210"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27211 : NZGD49 / Wanganui Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27211,'EPSG',27211,'PROJCS["NZGD49 / Wanganui Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.24194713888889],PARAMETER["central_meridian",175.4880996111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27211"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27212 : NZGD49 / Wairarapa Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27212,'EPSG',27212,'PROJCS["NZGD49 / Wairarapa Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.92553263888889],PARAMETER["central_meridian",175.6473496666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27212"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27213 : NZGD49 / Wellington Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27213,'EPSG',27213,'PROJCS["NZGD49 / Wellington Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.30131963888888],PARAMETER["central_meridian",174.7766231111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27213"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27214 : NZGD49 / Collingwood Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27214,'EPSG',27214,'PROJCS["NZGD49 / Collingwood Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-40.71475905555556],PARAMETER["central_meridian",172.6720465],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27214"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27215 : NZGD49 / Nelson Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27215,'EPSG',27215,'PROJCS["NZGD49 / Nelson Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.27454472222222],PARAMETER["central_meridian",173.2993168055555],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27215"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27216 : NZGD49 / Karamea Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27216,'EPSG',27216,'PROJCS["NZGD49 / Karamea Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.28991152777778],PARAMETER["central_meridian",172.1090281944444],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27216"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27217 : NZGD49 / Buller Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27217,'EPSG',27217,'PROJCS["NZGD49 / Buller Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.81080286111111],PARAMETER["central_meridian",171.5812600555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27217"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27218 : NZGD49 / Grey Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27218,'EPSG',27218,'PROJCS["NZGD49 / Grey Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.33369427777778],PARAMETER["central_meridian",171.5497713055556],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27218"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27219 : NZGD49 / Amuri Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27219,'EPSG',27219,'PROJCS["NZGD49 / Amuri Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.68911658333333],PARAMETER["central_meridian",173.0101333888889],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27219"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27220 : NZGD49 / Marlborough Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27220,'EPSG',27220,'PROJCS["NZGD49 / Marlborough Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.54448666666666],PARAMETER["central_meridian",173.8020741111111],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27220"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27221 : NZGD49 / Hokitika Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27221,'EPSG',27221,'PROJCS["NZGD49 / Hokitika Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-42.88632236111111],PARAMETER["central_meridian",170.9799935],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27221"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27222 : NZGD49 / Okarito Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27222,'EPSG',27222,'PROJCS["NZGD49 / Okarito Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.11012813888889],PARAMETER["central_meridian",170.2609258333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27222"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27223 : NZGD49 / Jacksons Bay Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27223,'EPSG',27223,'PROJCS["NZGD49 / Jacksons Bay Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.97780288888889],PARAMETER["central_meridian",168.606267],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27223"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27224 : NZGD49 / Mount Pleasant Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27224,'EPSG',27224,'PROJCS["NZGD49 / Mount Pleasant Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.59063758333333],PARAMETER["central_meridian",172.7271935833333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27224"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27225 : NZGD49 / Gawler Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27225,'EPSG',27225,'PROJCS["NZGD49 / Gawler Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-43.74871155555556],PARAMETER["central_meridian",171.3607484722222],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27225"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27226 : NZGD49 / Timaru Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27226,'EPSG',27226,'PROJCS["NZGD49 / Timaru Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.40222036111111],PARAMETER["central_meridian",171.0572508333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27226"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27227 : NZGD49 / Lindis Peak Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27227,'EPSG',27227,'PROJCS["NZGD49 / Lindis Peak Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44.73526797222222],PARAMETER["central_meridian",169.4677550833333],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27227"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27228 : NZGD49 / Mount Nicholas Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27228,'EPSG',27228,'PROJCS["NZGD49 / Mount Nicholas Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.13290258333333],PARAMETER["central_meridian",168.3986411944444],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27228"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27229 : NZGD49 / Mount York Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27229,'EPSG',27229,'PROJCS["NZGD49 / Mount York Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.56372616666666],PARAMETER["central_meridian",167.7388617777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27229"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27230 : NZGD49 / Observation Point Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27230,'EPSG',27230,'PROJCS["NZGD49 / Observation Point Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.81619661111111],PARAMETER["central_meridian",170.6285951666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27230"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27231 : NZGD49 / North Taieri Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27231,'EPSG',27231,'PROJCS["NZGD49 / North Taieri Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-45.86151336111111],PARAMETER["central_meridian",170.2825891111111],PARAMETER["scale_factor",0.99996],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],AUTHORITY["EPSG","27231"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27232 : NZGD49 / Bluff Circuit --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27232,'EPSG',27232,'PROJCS["NZGD49 / Bluff Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-46.60000961111111],PARAMETER["central_meridian",168.342872],PARAMETER["scale_factor",1],PARAMETER["false_easting",300002.66],PARAMETER["false_northing",699999.58],AUTHORITY["EPSG","27232"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27258 : NZGD49 / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27258,'EPSG',27258,'PROJCS["NZGD49 / UTM zone 58S",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","27258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27259 : NZGD49 / UTM zone 59S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27259,'EPSG',27259,'PROJCS["NZGD49 / UTM zone 59S",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","27259"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27260 : NZGD49 / UTM zone 60S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27260,'EPSG',27260,'PROJCS["NZGD49 / UTM zone 60S",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","27260"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs '); --- --- EPSG 27291 : NZGD49 / North Island Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27291,'EPSG',27291,'PROJCS["NZGD49 / North Island Grid",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["British yard (Sears 1922)",0.9143984146160287,AUTHORITY["EPSG","9040"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-39],PARAMETER["central_meridian",175.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","27291"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +to_meter=0.9143984146160287 +no_defs '); --- --- EPSG 27292 : NZGD49 / South Island Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27292,'EPSG',27292,'PROJCS["NZGD49 / South Island Grid",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],UNIT["British yard (Sears 1922)",0.9143984146160287,AUTHORITY["EPSG","9040"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-44],PARAMETER["central_meridian",171.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","27292"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +nadgrids=nzgd2kgrid0005.gsb +to_meter=0.9143984146160287 +no_defs '); --- --- EPSG 27391 : NGO 1948 (Oslo) / NGO zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27391,'EPSG',27391,'PROJCS["NGO 1948 (Oslo) / NGO zone I",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",-4.666666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27391"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27392 : NGO 1948 (Oslo) / NGO zone II --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27392,'EPSG',27392,'PROJCS["NGO 1948 (Oslo) / NGO zone II",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",-2.333333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27392"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27393 : NGO 1948 (Oslo) / NGO zone III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27393,'EPSG',27393,'PROJCS["NGO 1948 (Oslo) / NGO zone III",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27393"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27394 : NGO 1948 (Oslo) / NGO zone IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27394,'EPSG',27394,'PROJCS["NGO 1948 (Oslo) / NGO zone IV",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",2.5],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27394"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27395 : NGO 1948 (Oslo) / NGO zone V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27395,'EPSG',27395,'PROJCS["NGO 1948 (Oslo) / NGO zone V",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",6.166666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27395"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27396 : NGO 1948 (Oslo) / NGO zone VI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27396,'EPSG',27396,'PROJCS["NGO 1948 (Oslo) / NGO zone VI",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",10.16666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27396"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27397 : NGO 1948 (Oslo) / NGO zone VII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27397,'EPSG',27397,'PROJCS["NGO 1948 (Oslo) / NGO zone VII",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",14.16666666666667],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27397"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27398 : NGO 1948 (Oslo) / NGO zone VIII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27398,'EPSG',27398,'PROJCS["NGO 1948 (Oslo) / NGO zone VIII",GEOGCS["NGO 1948 (Oslo)",DATUM["NGO_1948_Oslo",SPHEROID["Bessel Modified",6377492.018,299.1528128,AUTHORITY["EPSG","7005"]],TOWGS84[278.3,93,474.5,7.889,0.05,-6.61,6.21],AUTHORITY["EPSG","6817"]],PRIMEM["Oslo",10.72291666666667,AUTHORITY["EPSG","8913"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4817"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",58],PARAMETER["central_meridian",18.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","27398"],AXIS["x",NORTH],AXIS["y",EAST]]','+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs '); --- --- EPSG 27429 : Datum 73 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27429,'EPSG',27429,'PROJCS["Datum 73 / UTM zone 29N",GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","27429"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27492 : Datum 73 / Modified Portuguese Grid (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27492,'EPSG',27492,'PROJCS["Datum 73 / Modified Portuguese Grid (deprecated)",GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-8.131906111111112],PARAMETER["scale_factor",1],PARAMETER["false_easting",180.598],PARAMETER["false_northing",-86.99],AUTHORITY["EPSG","27492"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27493 : Datum 73 / Modified Portuguese Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27493,'EPSG',27493,'PROJCS["Datum 73 / Modified Portuguese Grid",GEOGCS["Datum 73",DATUM["Datum_73",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-223.237,110.193,36.649,0,0,0,0],AUTHORITY["EPSG","6274"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4274"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-8.131906111111112],PARAMETER["scale_factor",1],PARAMETER["false_easting",180.598],PARAMETER["false_northing",-86.99],AUTHORITY["EPSG","27493"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs '); --- --- EPSG 27500 : ATF (Paris) / Nord de Guerre --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27500,'EPSG',27500,'PROJCS["ATF (Paris) / Nord de Guerre",GEOGCS["ATF (Paris)",DATUM["Ancienne_Triangulation_Francaise_Paris",SPHEROID["Plessis 1817",6376523,308.64,AUTHORITY["EPSG","7027"]],AUTHORITY["EPSG","6901"]],PRIMEM["Paris RGS",2.337208333333333,AUTHORITY["EPSG","8914"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4901"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",5.999999999999998],PARAMETER["scale_factor",0.99950908],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","27500"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs '); --- --- EPSG 27561 : NTF (Paris) / Lambert Nord France --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27561,'EPSG',27561,'PROJCS["NTF (Paris) / Lambert Nord France",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27561"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27562 : NTF (Paris) / Lambert Centre France --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27562,'EPSG',27562,'PROJCS["NTF (Paris) / Lambert Centre France",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27562"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27563 : NTF (Paris) / Lambert Sud France --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27563,'EPSG',27563,'PROJCS["NTF (Paris) / Lambert Sud France",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27563"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27564 : NTF (Paris) / Lambert Corse --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27564,'EPSG',27564,'PROJCS["NTF (Paris) / Lambert Corse",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",185861.369],AUTHORITY["EPSG","27564"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27571 : NTF (Paris) / Lambert zone I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27571,'EPSG',27571,'PROJCS["NTF (Paris) / Lambert zone I",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","27571"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27572 : NTF (Paris) / Lambert zone II --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27572,'EPSG',27572,'PROJCS["NTF (Paris) / Lambert zone II",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","27572"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27573 : NTF (Paris) / Lambert zone III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27573,'EPSG',27573,'PROJCS["NTF (Paris) / Lambert zone III",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",3200000],AUTHORITY["EPSG","27573"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27574 : NTF (Paris) / Lambert zone IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27574,'EPSG',27574,'PROJCS["NTF (Paris) / Lambert zone IV",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",4185861.369],AUTHORITY["EPSG","27574"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27581 : NTF (Paris) / France I (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27581,'EPSG',27581,'PROJCS["NTF (Paris) / France I (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",1200000],AUTHORITY["EPSG","27581"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27582 : NTF (Paris) / France II (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27582,'EPSG',27582,'PROJCS["NTF (Paris) / France II (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",2200000],AUTHORITY["EPSG","27582"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27583 : NTF (Paris) / France III (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27583,'EPSG',27583,'PROJCS["NTF (Paris) / France III (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",3200000],AUTHORITY["EPSG","27583"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27584 : NTF (Paris) / France IV (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27584,'EPSG',27584,'PROJCS["NTF (Paris) / France IV (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",4185861.369],AUTHORITY["EPSG","27584"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27591 : NTF (Paris) / Nord France (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27591,'EPSG',27591,'PROJCS["NTF (Paris) / Nord France (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",55],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877341],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27591"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27592 : NTF (Paris) / Centre France (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27592,'EPSG',27592,'PROJCS["NTF (Paris) / Centre France (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",52],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99987742],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27592"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27593 : NTF (Paris) / Sud France (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27593,'EPSG',27593,'PROJCS["NTF (Paris) / Sud France (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.999877499],PARAMETER["false_easting",600000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","27593"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27594 : NTF (Paris) / Corse (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27594,'EPSG',27594,'PROJCS["NTF (Paris) / Corse (deprecated)",GEOGCS["NTF (Paris)",DATUM["Nouvelle_Triangulation_Francaise_Paris",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY["EPSG","6807"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4807"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",46.85],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.99994471],PARAMETER["false_easting",234.358],PARAMETER["false_northing",185861.369],AUTHORITY["EPSG","27594"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 27700 : OSGB 1936 / British National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (27700,'EPSG',27700,'PROJCS["OSGB 1936 / British National Grid",GEOGCS["OSGB 1936",DATUM["OSGB_1936",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[446.448,-125.157,542.06,0.15,0.247,0.842,-20.489],AUTHORITY["EPSG","6277"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4277"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],AUTHORITY["EPSG","27700"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs '); --- --- EPSG 28191 : Palestine 1923 / Palestine Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28191,'EPSG',28191,'PROJCS["Palestine 1923 / Palestine Grid",GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",31.73409694444445],PARAMETER["central_meridian",35.21208055555556],PARAMETER["false_easting",170251.555],PARAMETER["false_northing",126867.909],AUTHORITY["EPSG","28191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs '); --- --- EPSG 28192 : Palestine 1923 / Palestine Belt --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28192,'EPSG',28192,'PROJCS["Palestine 1923 / Palestine Belt",GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31.73409694444445],PARAMETER["central_meridian",35.21208055555556],PARAMETER["scale_factor",1],PARAMETER["false_easting",170251.555],PARAMETER["false_northing",1126867.909],AUTHORITY["EPSG","28192"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs '); --- --- EPSG 28193 : Palestine 1923 / Israeli CS Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28193,'EPSG',28193,'PROJCS["Palestine 1923 / Israeli CS Grid",GEOGCS["Palestine 1923",DATUM["Palestine_1923",SPHEROID["Clarke 1880 (Benoit)",6378300.789,293.4663155389802,AUTHORITY["EPSG","7010"]],TOWGS84[-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1],AUTHORITY["EPSG","6281"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4281"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",31.73409694444445],PARAMETER["central_meridian",35.21208055555556],PARAMETER["false_easting",170251.555],PARAMETER["false_northing",1126867.909],AUTHORITY["EPSG","28193"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs '); --- --- EPSG 28232 : Pointe Noire / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28232,'EPSG',28232,'PROJCS["Pointe Noire / UTM zone 32S",GEOGCS["Pointe Noire",DATUM["Congo_1960_Pointe_Noire",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-148,51,-291,0,0,0,0],AUTHORITY["EPSG","6282"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4282"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28232"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28348 : GDA94 / MGA zone 48 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28348,'EPSG',28348,'PROJCS["GDA94 / MGA zone 48",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28349 : GDA94 / MGA zone 49 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28349,'EPSG',28349,'PROJCS["GDA94 / MGA zone 49",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28350 : GDA94 / MGA zone 50 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28350,'EPSG',28350,'PROJCS["GDA94 / MGA zone 50",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28350"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28351 : GDA94 / MGA zone 51 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28351,'EPSG',28351,'PROJCS["GDA94 / MGA zone 51",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28351"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28352 : GDA94 / MGA zone 52 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28352,'EPSG',28352,'PROJCS["GDA94 / MGA zone 52",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28352"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28353 : GDA94 / MGA zone 53 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28353,'EPSG',28353,'PROJCS["GDA94 / MGA zone 53",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28354 : GDA94 / MGA zone 54 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28354,'EPSG',28354,'PROJCS["GDA94 / MGA zone 54",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28355 : GDA94 / MGA zone 55 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28355,'EPSG',28355,'PROJCS["GDA94 / MGA zone 55",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28356 : GDA94 / MGA zone 56 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28356,'EPSG',28356,'PROJCS["GDA94 / MGA zone 56",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28357 : GDA94 / MGA zone 57 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28357,'EPSG',28357,'PROJCS["GDA94 / MGA zone 57",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28358 : GDA94 / MGA zone 58 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28358,'EPSG',28358,'PROJCS["GDA94 / MGA zone 58",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4283"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","28358"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28402 : Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28402,'EPSG',28402,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28402"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28403 : Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28403,'EPSG',28403,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28403"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28404 : Pulkovo 1942 / Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28404,'EPSG',28404,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 4",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28404"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28405 : Pulkovo 1942 / Gauss-Kruger zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28405,'EPSG',28405,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 5",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28405"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28406 : Pulkovo 1942 / Gauss-Kruger zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28406,'EPSG',28406,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 6",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28406"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28407 : Pulkovo 1942 / Gauss-Kruger zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28407,'EPSG',28407,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 7",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28407"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28408 : Pulkovo 1942 / Gauss-Kruger zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28408,'EPSG',28408,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 8",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28408"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28409 : Pulkovo 1942 / Gauss-Kruger zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28409,'EPSG',28409,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 9",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28409"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28410 : Pulkovo 1942 / Gauss-Kruger zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28410,'EPSG',28410,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 10",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",10500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28410"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28411 : Pulkovo 1942 / Gauss-Kruger zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28411,'EPSG',28411,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 11",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",11500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28411"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28412 : Pulkovo 1942 / Gauss-Kruger zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28412,'EPSG',28412,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 12",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",12500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28412"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28413 : Pulkovo 1942 / Gauss-Kruger zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28413,'EPSG',28413,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 13",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",13500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28413"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28414 : Pulkovo 1942 / Gauss-Kruger zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28414,'EPSG',28414,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 14",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",14500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28414"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28415 : Pulkovo 1942 / Gauss-Kruger zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28415,'EPSG',28415,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 15",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",15500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28415"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28416 : Pulkovo 1942 / Gauss-Kruger zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28416,'EPSG',28416,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 16",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",16500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28416"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28417 : Pulkovo 1942 / Gauss-Kruger zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28417,'EPSG',28417,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 17",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",17500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28417"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28418 : Pulkovo 1942 / Gauss-Kruger zone 18 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28418,'EPSG',28418,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 18",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",18500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28418"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28419 : Pulkovo 1942 / Gauss-Kruger zone 19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28419,'EPSG',28419,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 19",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",19500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28419"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28420 : Pulkovo 1942 / Gauss-Kruger zone 20 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28420,'EPSG',28420,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 20",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",20500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28420"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28421 : Pulkovo 1942 / Gauss-Kruger zone 21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28421,'EPSG',28421,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 21",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",21500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28421"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28422 : Pulkovo 1942 / Gauss-Kruger zone 22 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28422,'EPSG',28422,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 22",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",22500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28422"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28423 : Pulkovo 1942 / Gauss-Kruger zone 23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28423,'EPSG',28423,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 23",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",23500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28423"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28424 : Pulkovo 1942 / Gauss-Kruger zone 24 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28424,'EPSG',28424,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 24",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",24500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28424"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28425 : Pulkovo 1942 / Gauss-Kruger zone 25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28425,'EPSG',28425,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 25",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",25500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28425"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28426 : Pulkovo 1942 / Gauss-Kruger zone 26 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28426,'EPSG',28426,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 26",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",26500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28426"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28427 : Pulkovo 1942 / Gauss-Kruger zone 27 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28427,'EPSG',28427,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 27",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",27500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28427"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28428 : Pulkovo 1942 / Gauss-Kruger zone 28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28428,'EPSG',28428,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 28",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",28500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28428"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28429 : Pulkovo 1942 / Gauss-Kruger zone 29 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28429,'EPSG',28429,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 29",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",29500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28429"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28430 : Pulkovo 1942 / Gauss-Kruger zone 30 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28430,'EPSG',28430,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 30",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",30500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28430"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28431 : Pulkovo 1942 / Gauss-Kruger zone 31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28431,'EPSG',28431,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 31",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",31500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28431"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28432 : Pulkovo 1942 / Gauss-Kruger zone 32 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28432,'EPSG',28432,'PROJCS["Pulkovo 1942 / Gauss-Kruger zone 32",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",32500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28432"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28462 : Pulkovo 1942 / Gauss-Kruger 2N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28462,'EPSG',28462,'PROJCS["Pulkovo 1942 / Gauss-Kruger 2N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28462"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28463 : Pulkovo 1942 / Gauss-Kruger 3N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28463,'EPSG',28463,'PROJCS["Pulkovo 1942 / Gauss-Kruger 3N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28463"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28464 : Pulkovo 1942 / Gauss-Kruger 4N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28464,'EPSG',28464,'PROJCS["Pulkovo 1942 / Gauss-Kruger 4N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28464"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28465 : Pulkovo 1942 / Gauss-Kruger 5N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28465,'EPSG',28465,'PROJCS["Pulkovo 1942 / Gauss-Kruger 5N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28465"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28466 : Pulkovo 1942 / Gauss-Kruger 6N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28466,'EPSG',28466,'PROJCS["Pulkovo 1942 / Gauss-Kruger 6N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28466"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28467 : Pulkovo 1942 / Gauss-Kruger 7N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28467,'EPSG',28467,'PROJCS["Pulkovo 1942 / Gauss-Kruger 7N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28467"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28468 : Pulkovo 1942 / Gauss-Kruger 8N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28468,'EPSG',28468,'PROJCS["Pulkovo 1942 / Gauss-Kruger 8N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28468"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28469 : Pulkovo 1942 / Gauss-Kruger 9N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28469,'EPSG',28469,'PROJCS["Pulkovo 1942 / Gauss-Kruger 9N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28469"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28470 : Pulkovo 1942 / Gauss-Kruger 10N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28470,'EPSG',28470,'PROJCS["Pulkovo 1942 / Gauss-Kruger 10N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28470"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28471 : Pulkovo 1942 / Gauss-Kruger 11N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28471,'EPSG',28471,'PROJCS["Pulkovo 1942 / Gauss-Kruger 11N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28471"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28472 : Pulkovo 1942 / Gauss-Kruger 12N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28472,'EPSG',28472,'PROJCS["Pulkovo 1942 / Gauss-Kruger 12N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28472"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28473 : Pulkovo 1942 / Gauss-Kruger 13N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28473,'EPSG',28473,'PROJCS["Pulkovo 1942 / Gauss-Kruger 13N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28473"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28474 : Pulkovo 1942 / Gauss-Kruger 14N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28474,'EPSG',28474,'PROJCS["Pulkovo 1942 / Gauss-Kruger 14N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28474"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28475 : Pulkovo 1942 / Gauss-Kruger 15N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28475,'EPSG',28475,'PROJCS["Pulkovo 1942 / Gauss-Kruger 15N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28475"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28476 : Pulkovo 1942 / Gauss-Kruger 16N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28476,'EPSG',28476,'PROJCS["Pulkovo 1942 / Gauss-Kruger 16N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28476"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28477 : Pulkovo 1942 / Gauss-Kruger 17N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28477,'EPSG',28477,'PROJCS["Pulkovo 1942 / Gauss-Kruger 17N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28477"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28478 : Pulkovo 1942 / Gauss-Kruger 18N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28478,'EPSG',28478,'PROJCS["Pulkovo 1942 / Gauss-Kruger 18N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28478"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28479 : Pulkovo 1942 / Gauss-Kruger 19N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28479,'EPSG',28479,'PROJCS["Pulkovo 1942 / Gauss-Kruger 19N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28479"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28480 : Pulkovo 1942 / Gauss-Kruger 20N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28480,'EPSG',28480,'PROJCS["Pulkovo 1942 / Gauss-Kruger 20N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28480"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28481 : Pulkovo 1942 / Gauss-Kruger 21N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28481,'EPSG',28481,'PROJCS["Pulkovo 1942 / Gauss-Kruger 21N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28481"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28482 : Pulkovo 1942 / Gauss-Kruger 22N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28482,'EPSG',28482,'PROJCS["Pulkovo 1942 / Gauss-Kruger 22N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28482"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28483 : Pulkovo 1942 / Gauss-Kruger 23N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28483,'EPSG',28483,'PROJCS["Pulkovo 1942 / Gauss-Kruger 23N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28483"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28484 : Pulkovo 1942 / Gauss-Kruger 24N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28484,'EPSG',28484,'PROJCS["Pulkovo 1942 / Gauss-Kruger 24N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28484"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28485 : Pulkovo 1942 / Gauss-Kruger 25N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28485,'EPSG',28485,'PROJCS["Pulkovo 1942 / Gauss-Kruger 25N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28485"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28486 : Pulkovo 1942 / Gauss-Kruger 26N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28486,'EPSG',28486,'PROJCS["Pulkovo 1942 / Gauss-Kruger 26N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28486"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28487 : Pulkovo 1942 / Gauss-Kruger 27N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28487,'EPSG',28487,'PROJCS["Pulkovo 1942 / Gauss-Kruger 27N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28487"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28488 : Pulkovo 1942 / Gauss-Kruger 28N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28488,'EPSG',28488,'PROJCS["Pulkovo 1942 / Gauss-Kruger 28N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28488"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28489 : Pulkovo 1942 / Gauss-Kruger 29N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28489,'EPSG',28489,'PROJCS["Pulkovo 1942 / Gauss-Kruger 29N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28489"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28490 : Pulkovo 1942 / Gauss-Kruger 30N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28490,'EPSG',28490,'PROJCS["Pulkovo 1942 / Gauss-Kruger 30N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28490"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28491 : Pulkovo 1942 / Gauss-Kruger 31N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28491,'EPSG',28491,'PROJCS["Pulkovo 1942 / Gauss-Kruger 31N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28491"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28492 : Pulkovo 1942 / Gauss-Kruger 32N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28492,'EPSG',28492,'PROJCS["Pulkovo 1942 / Gauss-Kruger 32N (deprecated)",GEOGCS["Pulkovo 1942",DATUM["Pulkovo_1942",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[23.92,-141.27,-80.9,-0,0.35,0.82,-0.12],AUTHORITY["EPSG","6284"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4284"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","28492"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs '); --- --- EPSG 28600 : Qatar 1974 / Qatar National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28600,'EPSG',28600,'PROJCS["Qatar 1974 / Qatar National Grid",GEOGCS["Qatar 1974",DATUM["Qatar_1974",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-128,-283,22,0,0,0,0],AUTHORITY["EPSG","6285"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4285"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",24.45],PARAMETER["central_meridian",51.21666666666667],PARAMETER["scale_factor",0.99999],PARAMETER["false_easting",200000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","28600"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-128,-283,22,0,0,0,0 +units=m +no_defs '); --- --- EPSG 28991 : Amersfoort / RD Old --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28991,'EPSG',28991,'PROJCS["Amersfoort / RD Old",GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","28991"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs '); --- --- EPSG 28992 : Amersfoort / RD New --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (28992,'EPSG',28992,'PROJCS["Amersfoort / RD New",GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",155000],PARAMETER["false_northing",463000],AUTHORITY["EPSG","28992"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs '); --- --- EPSG 29100 : SAD69 / Brazil Polyconic (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29100,'EPSG',29100,'PROJCS["SAD69 / Brazil Polyconic (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polyconic"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-54],PARAMETER["false_easting",5000000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29100"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29101 : SAD69 / Brazil Polyconic --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29101,'EPSG',29101,'PROJCS["SAD69 / Brazil Polyconic",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polyconic"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-54],PARAMETER["false_easting",5000000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29101"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29118 : SAD69 / UTM zone 18N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29118,'EPSG',29118,'PROJCS["SAD69 / UTM zone 18N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29118"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29119 : SAD69 / UTM zone 19N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29119,'EPSG',29119,'PROJCS["SAD69 / UTM zone 19N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29119"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29120 : SAD69 / UTM zone 20N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29120,'EPSG',29120,'PROJCS["SAD69 / UTM zone 20N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29120"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29121 : SAD69 / UTM zone 21N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29121,'EPSG',29121,'PROJCS["SAD69 / UTM zone 21N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29121"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29122 : SAD69 / UTM zone 22N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29122,'EPSG',29122,'PROJCS["SAD69 / UTM zone 22N (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29122"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29168 : SAD69 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29168,'EPSG',29168,'PROJCS["SAD69 / UTM zone 18N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29168"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29169 : SAD69 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29169,'EPSG',29169,'PROJCS["SAD69 / UTM zone 19N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29169"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29170 : SAD69 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29170,'EPSG',29170,'PROJCS["SAD69 / UTM zone 20N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29170"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29171 : SAD69 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29171,'EPSG',29171,'PROJCS["SAD69 / UTM zone 21N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29171"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29172 : SAD69 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29172,'EPSG',29172,'PROJCS["SAD69 / UTM zone 22N",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29172"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29177 : SAD69 / UTM zone 17S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29177,'EPSG',29177,'PROJCS["SAD69 / UTM zone 17S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29177"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29178 : SAD69 / UTM zone 18S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29178,'EPSG',29178,'PROJCS["SAD69 / UTM zone 18S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29178"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29179 : SAD69 / UTM zone 19S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29179,'EPSG',29179,'PROJCS["SAD69 / UTM zone 19S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29179"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29180 : SAD69 / UTM zone 20S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29180,'EPSG',29180,'PROJCS["SAD69 / UTM zone 20S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29180"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29181 : SAD69 / UTM zone 21S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29181,'EPSG',29181,'PROJCS["SAD69 / UTM zone 21S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29181"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29182 : SAD69 / UTM zone 22S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29182,'EPSG',29182,'PROJCS["SAD69 / UTM zone 22S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29182"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29183 : SAD69 / UTM zone 23S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29183,'EPSG',29183,'PROJCS["SAD69 / UTM zone 23S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29183"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29184 : SAD69 / UTM zone 24S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29184,'EPSG',29184,'PROJCS["SAD69 / UTM zone 24S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29184"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29185 : SAD69 / UTM zone 25S (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29185,'EPSG',29185,'PROJCS["SAD69 / UTM zone 25S (deprecated)",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967",6378160,298.247167427,AUTHORITY["EPSG","7036"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6291"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4291"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29185"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29187 : SAD69 / UTM zone 17S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29187,'EPSG',29187,'PROJCS["SAD69 / UTM zone 17S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29187"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29188 : SAD69 / UTM zone 18S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29188,'EPSG',29188,'PROJCS["SAD69 / UTM zone 18S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29188"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29189 : SAD69 / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29189,'EPSG',29189,'PROJCS["SAD69 / UTM zone 19S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29189"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29190 : SAD69 / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29190,'EPSG',29190,'PROJCS["SAD69 / UTM zone 20S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29190"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29191 : SAD69 / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29191,'EPSG',29191,'PROJCS["SAD69 / UTM zone 21S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29192 : SAD69 / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29192,'EPSG',29192,'PROJCS["SAD69 / UTM zone 22S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29192"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29193 : SAD69 / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29193,'EPSG',29193,'PROJCS["SAD69 / UTM zone 23S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29193"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29194 : SAD69 / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29194,'EPSG',29194,'PROJCS["SAD69 / UTM zone 24S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29194"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29195 : SAD69 / UTM zone 25S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29195,'EPSG',29195,'PROJCS["SAD69 / UTM zone 25S",GEOGCS["SAD69",DATUM["South_American_Datum_1969",SPHEROID["GRS 1967 Modified",6378160,298.25,AUTHORITY["EPSG","7050"]],TOWGS84[-57,1,-41,0,0,0,0],AUTHORITY["EPSG","6618"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4618"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29195"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29220 : Sapper Hill 1943 / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29220,'EPSG',29220,'PROJCS["Sapper Hill 1943 / UTM zone 20S",GEOGCS["Sapper Hill 1943",DATUM["Sapper_Hill_1943",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY["EPSG","6292"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4292"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29221 : Sapper Hill 1943 / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29221,'EPSG',29221,'PROJCS["Sapper Hill 1943 / UTM zone 21S",GEOGCS["Sapper Hill 1943",DATUM["Sapper_Hill_1943",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-355,21,72,0,0,0,0],AUTHORITY["EPSG","6292"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4292"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29221"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29333 : Schwarzeck / UTM zone 33S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29333,'EPSG',29333,'PROJCS["Schwarzeck / UTM zone 33S",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29333"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29371 : Schwarzeck / Lo22/11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29371,'EPSG',29371,'PROJCS["Schwarzeck / Lo22/11",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",11],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29371"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=11 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29373 : Schwarzeck / Lo22/13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29373,'EPSG',29373,'PROJCS["Schwarzeck / Lo22/13",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",13],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29373"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=13 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29375 : Schwarzeck / Lo22/15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29375,'EPSG',29375,'PROJCS["Schwarzeck / Lo22/15",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29375"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29377 : Schwarzeck / Lo22/17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29377,'EPSG',29377,'PROJCS["Schwarzeck / Lo22/17",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",17],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29377"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29379 : Schwarzeck / Lo22/19 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29379,'EPSG',29379,'PROJCS["Schwarzeck / Lo22/19",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",19],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29379"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29381 : Schwarzeck / Lo22/21 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29381,'EPSG',29381,'PROJCS["Schwarzeck / Lo22/21",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29381"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29383 : Schwarzeck / Lo22/23 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29383,'EPSG',29383,'PROJCS["Schwarzeck / Lo22/23",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",23],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29383"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29385 : Schwarzeck / Lo22/25 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29385,'EPSG',29385,'PROJCS["Schwarzeck / Lo22/25",GEOGCS["Schwarzeck",DATUM["Schwarzeck",SPHEROID["Bessel Namibia (GLM)",6377483.865280419,299.1528128,AUTHORITY["EPSG","7046"]],TOWGS84[616,97,-251,0,0,0,0],AUTHORITY["EPSG","6293"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4293"]],UNIT["German legal metre",1.0000135965,AUTHORITY["EPSG","9031"]],PROJECTION["Transverse_Mercator_South_Orientated"],PARAMETER["latitude_of_origin",-22],PARAMETER["central_meridian",25],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","29385"],AXIS["Y",WEST],AXIS["X",SOUTH]]','+proj=tmerc +lat_0=-22 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs '); --- --- EPSG 29635 : Sudan / UTM zone 35N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29635,'EPSG',29635,'PROJCS["Sudan / UTM zone 35N (deprecated)",GEOGCS["Sudan",DATUM["Sudan",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6296"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4296"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29635"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 29636 : Sudan / UTM zone 36N (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29636,'EPSG',29636,'PROJCS["Sudan / UTM zone 36N (deprecated)",GEOGCS["Sudan",DATUM["Sudan",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6296"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4296"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29636"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 29700 : Tananarive (Paris) / Laborde Grid (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29700,'EPSG',29700,'PROJCS["Tananarive (Paris) / Laborde Grid (deprecated)",GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",-21],PARAMETER["longitude_of_center",49],PARAMETER["azimuth",21],PARAMETER["rectified_grid_angle",21],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","29700"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 29701 : Tananarive (Paris) / Laborde Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29701,'EPSG',29701,'PROJCS["Tananarive (Paris) / Laborde Grid",GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Laborde_Oblique_Mercator"],PARAMETER["latitude_of_center",-21],PARAMETER["longitude_of_center",49],PARAMETER["azimuth",21],PARAMETER["rectified_grid_angle",100],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","29701"],AXIS["X",NORTH],AXIS["Y",EAST]]',''); --- --- EPSG 29702 : Tananarive (Paris) / Laborde Grid approximation --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29702,'EPSG',29702,'PROJCS["Tananarive (Paris) / Laborde Grid approximation",GEOGCS["Tananarive (Paris)",DATUM["Tananarive_1925_Paris",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6810"]],PRIMEM["Paris",2.33722917,AUTHORITY["EPSG","8903"]],UNIT["grad",0.01570796326794897,AUTHORITY["EPSG","9105"]],AUTHORITY["EPSG","4810"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",-21],PARAMETER["longitude_of_center",49],PARAMETER["azimuth",21],PARAMETER["rectified_grid_angle",21],PARAMETER["scale_factor",0.9995],PARAMETER["false_easting",400000],PARAMETER["false_northing",800000],AUTHORITY["EPSG","29702"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs '); --- --- EPSG 29738 : Tananarive / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29738,'EPSG',29738,'PROJCS["Tananarive / UTM zone 38S",GEOGCS["Tananarive",DATUM["Tananarive_1925",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6297"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4297"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29738"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29739 : Tananarive / UTM zone 39S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29739,'EPSG',29739,'PROJCS["Tananarive / UTM zone 39S",GEOGCS["Tananarive",DATUM["Tananarive_1925",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-189,-242,-91,0,0,0,0],AUTHORITY["EPSG","6297"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4297"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","29739"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs '); --- --- EPSG 29849 : Timbalai 1948 / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29849,'EPSG',29849,'PROJCS["Timbalai 1948 / UTM zone 49N",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29849"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs '); --- --- EPSG 29850 : Timbalai 1948 / UTM zone 50N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29850,'EPSG',29850,'PROJCS["Timbalai 1948 / UTM zone 50N",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","29850"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs '); --- --- EPSG 29871 : Timbalai 1948 / RSO Borneo (ch) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29871,'EPSG',29871,'PROJCS["Timbalai 1948 / RSO Borneo (ch)",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["British chain (Sears 1922)",20.11676512155263,AUTHORITY["EPSG","9042"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31582047222222],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",29352.4763],PARAMETER["false_northing",22014.3572],AUTHORITY["EPSG","29871"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +to_meter=20.11676512155263 +no_defs '); --- --- EPSG 29872 : Timbalai 1948 / RSO Borneo (ft) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29872,'EPSG',29872,'PROJCS["Timbalai 1948 / RSO Borneo (ft)",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["British foot (Sears 1922)",0.3047994715386762,AUTHORITY["EPSG","9041"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31582047222222],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",1937263.44],PARAMETER["false_northing",1452947.58],AUTHORITY["EPSG","29872"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +to_meter=0.3047994715386762 +no_defs '); --- --- EPSG 29873 : Timbalai 1948 / RSO Borneo (m) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29873,'EPSG',29873,'PROJCS["Timbalai 1948 / RSO Borneo (m)",GEOGCS["Timbalai 1948",DATUM["Timbalai_1948",SPHEROID["Everest 1830 (1967 Definition)",6377298.556,300.8017,AUTHORITY["EPSG","7016"]],TOWGS84[-533.4,669.2,-52.5,0,0,4.28,9.4],AUTHORITY["EPSG","6298"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4298"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Hotine_Oblique_Mercator"],PARAMETER["latitude_of_center",4],PARAMETER["longitude_of_center",115],PARAMETER["azimuth",53.31582047222222],PARAMETER["rectified_grid_angle",53.13010236111111],PARAMETER["scale_factor",0.99984],PARAMETER["false_easting",590476.87],PARAMETER["false_northing",442857.65],AUTHORITY["EPSG","29873"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs '); --- --- EPSG 29900 : TM65 / Irish National Grid (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29900,'EPSG',29900,'PROJCS["TM65 / Irish National Grid (deprecated)",GEOGCS["TM65",DATUM["TM65",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6299"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4299"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1.000035],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29900"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs '); --- --- EPSG 29901 : OSNI 1952 / Irish National Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29901,'EPSG',29901,'PROJCS["OSNI 1952 / Irish National Grid",GEOGCS["OSNI 1952",DATUM["OSNI_1952",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6188"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4188"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29901"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs '); --- --- EPSG 29902 : TM65 / Irish Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29902,'EPSG',29902,'PROJCS["TM65 / Irish Grid",GEOGCS["TM65",DATUM["TM65",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6299"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4299"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1.000035],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29902"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs '); --- --- EPSG 29903 : TM75 / Irish Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (29903,'EPSG',29903,'PROJCS["TM75 / Irish Grid",GEOGCS["TM75",DATUM["Geodetic_Datum_of_1965",SPHEROID["Airy Modified 1849",6377340.189,299.3249646,AUTHORITY["EPSG","7002"]],TOWGS84[482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15],AUTHORITY["EPSG","6300"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4300"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",53.5],PARAMETER["central_meridian",-8],PARAMETER["scale_factor",1.000035],PARAMETER["false_easting",200000],PARAMETER["false_northing",250000],AUTHORITY["EPSG","29903"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs '); --- --- EPSG 30161 : Tokyo / Japan Plane Rectangular CS I --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30161,'EPSG',30161,'PROJCS["Tokyo / Japan Plane Rectangular CS I",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",129.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30161"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30162 : Tokyo / Japan Plane Rectangular CS II --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30162,'EPSG',30162,'PROJCS["Tokyo / Japan Plane Rectangular CS II",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30162"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30163 : Tokyo / Japan Plane Rectangular CS III --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30163,'EPSG',30163,'PROJCS["Tokyo / Japan Plane Rectangular CS III",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",132.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30163"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30164 : Tokyo / Japan Plane Rectangular CS IV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30164,'EPSG',30164,'PROJCS["Tokyo / Japan Plane Rectangular CS IV",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",133.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30164"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30165 : Tokyo / Japan Plane Rectangular CS V --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30165,'EPSG',30165,'PROJCS["Tokyo / Japan Plane Rectangular CS V",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",134.3333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30165"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30166 : Tokyo / Japan Plane Rectangular CS VI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30166,'EPSG',30166,'PROJCS["Tokyo / Japan Plane Rectangular CS VI",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30166"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30167 : Tokyo / Japan Plane Rectangular CS VII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30167,'EPSG',30167,'PROJCS["Tokyo / Japan Plane Rectangular CS VII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",137.1666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30167"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30168 : Tokyo / Japan Plane Rectangular CS VIII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30168,'EPSG',30168,'PROJCS["Tokyo / Japan Plane Rectangular CS VIII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",138.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30168"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30169 : Tokyo / Japan Plane Rectangular CS IX --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30169,'EPSG',30169,'PROJCS["Tokyo / Japan Plane Rectangular CS IX",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",139.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30169"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30170 : Tokyo / Japan Plane Rectangular CS X --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30170,'EPSG',30170,'PROJCS["Tokyo / Japan Plane Rectangular CS X",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",140.8333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30170"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30171 : Tokyo / Japan Plane Rectangular CS XI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30171,'EPSG',30171,'PROJCS["Tokyo / Japan Plane Rectangular CS XI",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",140.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30171"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30172 : Tokyo / Japan Plane Rectangular CS XII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30172,'EPSG',30172,'PROJCS["Tokyo / Japan Plane Rectangular CS XII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",142.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30172"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30173 : Tokyo / Japan Plane Rectangular CS XIII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30173,'EPSG',30173,'PROJCS["Tokyo / Japan Plane Rectangular CS XIII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",144.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30173"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30174 : Tokyo / Japan Plane Rectangular CS XIV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30174,'EPSG',30174,'PROJCS["Tokyo / Japan Plane Rectangular CS XIV",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",142],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30174"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30175 : Tokyo / Japan Plane Rectangular CS XV --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30175,'EPSG',30175,'PROJCS["Tokyo / Japan Plane Rectangular CS XV",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",127.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30175"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30176 : Tokyo / Japan Plane Rectangular CS XVI --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30176,'EPSG',30176,'PROJCS["Tokyo / Japan Plane Rectangular CS XVI",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",124],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30176"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30177 : Tokyo / Japan Plane Rectangular CS XVII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30177,'EPSG',30177,'PROJCS["Tokyo / Japan Plane Rectangular CS XVII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",131],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30177"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30178 : Tokyo / Japan Plane Rectangular CS XVIII --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30178,'EPSG',30178,'PROJCS["Tokyo / Japan Plane Rectangular CS XVIII",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",20],PARAMETER["central_meridian",136],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30178"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30179 : Tokyo / Japan Plane Rectangular CS XIX --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30179,'EPSG',30179,'PROJCS["Tokyo / Japan Plane Rectangular CS XIX",GEOGCS["Tokyo",DATUM["Tokyo",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-148,507,685,0,0,0,0],AUTHORITY["EPSG","6301"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4301"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",26],PARAMETER["central_meridian",154],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","30179"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-148,507,685,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30200 : Trinidad 1903 / Trinidad Grid --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30200,'EPSG',30200,'PROJCS["Trinidad 1903 / Trinidad Grid",GEOGCS["Trinidad 1903",DATUM["Trinidad_1903",SPHEROID["Clarke 1858",6378293.645208759,294.2606763692569,AUTHORITY["EPSG","7007"]],TOWGS84[-61.702,284.488,472.052,0,0,0,0],AUTHORITY["EPSG","6302"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4302"]],UNIT["Clarke''s link",0.201166195164,AUTHORITY["EPSG","9039"]],PROJECTION["Cassini_Soldner"],PARAMETER["latitude_of_origin",10.44166666666667],PARAMETER["central_meridian",-61.33333333333334],PARAMETER["false_easting",430000],PARAMETER["false_northing",325000],AUTHORITY["EPSG","30200"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.201166195164 +no_defs '); --- --- EPSG 30339 : TC(1948) / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30339,'EPSG',30339,'PROJCS["TC(1948) / UTM zone 39N",GEOGCS["TC(1948)",DATUM["Trucial_Coast_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6303"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4303"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30339"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=helmert +units=m +no_defs '); --- --- EPSG 30340 : TC(1948) / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30340,'EPSG',30340,'PROJCS["TC(1948) / UTM zone 40N",GEOGCS["TC(1948)",DATUM["Trucial_Coast_1948",SPHEROID["Helmert 1906",6378200,298.3,AUTHORITY["EPSG","7020"]],AUTHORITY["EPSG","6303"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4303"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30340"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=helmert +units=m +no_defs '); --- --- EPSG 30491 : Voirol 1875 / Nord Algerie (ancienne) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30491,'EPSG',30491,'PROJCS["Voirol 1875 / Nord Algerie (ancienne)",GEOGCS["Voirol 1875",DATUM["Voirol_1875",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6304"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4304"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30491"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30492 : Voirol 1875 / Sud Algerie (ancienne) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30492,'EPSG',30492,'PROJCS["Voirol 1875 / Sud Algerie (ancienne)",GEOGCS["Voirol 1875",DATUM["Voirol_1875",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-73,-247,227,0,0,0,0],AUTHORITY["EPSG","6304"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4304"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30492"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30493 : Voirol 1879 / Nord Algerie (ancienne) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30493,'EPSG',30493,'PROJCS["Voirol 1879 / Nord Algerie (ancienne)",GEOGCS["Voirol 1879",DATUM["Voirol_1879",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6671"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4671"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30493"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 30494 : Voirol 1879 / Sud Algerie (ancienne) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30494,'EPSG',30494,'PROJCS["Voirol 1879 / Sud Algerie (ancienne)",GEOGCS["Voirol 1879",DATUM["Voirol_1879",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6671"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4671"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500000],PARAMETER["false_northing",300000],AUTHORITY["EPSG","30494"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 30729 : Nord Sahara 1959 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30729,'EPSG',30729,'PROJCS["Nord Sahara 1959 / UTM zone 29N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30729"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30730 : Nord Sahara 1959 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30730,'EPSG',30730,'PROJCS["Nord Sahara 1959 / UTM zone 30N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30730"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30731 : Nord Sahara 1959 / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30731,'EPSG',30731,'PROJCS["Nord Sahara 1959 / UTM zone 31N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30731"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30732 : Nord Sahara 1959 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30732,'EPSG',30732,'PROJCS["Nord Sahara 1959 / UTM zone 32N",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30732"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30791 : Nord Sahara 1959 / Voirol Unifie Nord --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30791,'EPSG',30791,'PROJCS["Nord Sahara 1959 / Voirol Unifie Nord",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",36],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625544],PARAMETER["false_easting",500135],PARAMETER["false_northing",300090],AUTHORITY["EPSG","30791"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30792 : Nord Sahara 1959 / Voirol Unifie Sud --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30792,'EPSG',30792,'PROJCS["Nord Sahara 1959 / Voirol Unifie Sud",GEOGCS["Nord Sahara 1959",DATUM["Nord_Sahara_1959",SPHEROID["Clarke 1880 (RGS)",6378249.145,293.465,AUTHORITY["EPSG","7012"]],TOWGS84[-186,-93,310,0,0,0,0],AUTHORITY["EPSG","6307"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4307"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",33.3],PARAMETER["central_meridian",2.7],PARAMETER["scale_factor",0.999625769],PARAMETER["false_easting",500135],PARAMETER["false_northing",300090],AUTHORITY["EPSG","30792"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs '); --- --- EPSG 30800 : RT38 2.5 gon W (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (30800,'EPSG',30800,'PROJCS["RT38 2.5 gon W (deprecated)",GEOGCS["RT38",DATUM["Stockholm_1938",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6308"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4308"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","30800"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs '); --- --- EPSG 31028 : Yoff / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31028,'EPSG',31028,'PROJCS["Yoff / UTM zone 28N",GEOGCS["Yoff",DATUM["Yoff",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],AUTHORITY["EPSG","6310"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4310"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31028"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs '); --- --- EPSG 31121 : Zanderij / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31121,'EPSG',31121,'PROJCS["Zanderij / UTM zone 21N",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31121"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31154 : Zanderij / TM 54 NW --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31154,'EPSG',31154,'PROJCS["Zanderij / TM 54 NW",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-54],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31154"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31170 : Zanderij / Suriname Old TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31170,'EPSG',31170,'PROJCS["Zanderij / Suriname Old TM",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.68333333333333],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31170"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31171 : Zanderij / Suriname TM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31171,'EPSG',31171,'PROJCS["Zanderij / Suriname TM",GEOGCS["Zanderij",DATUM["Zanderij",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-265,120,-358,0,0,0,0],AUTHORITY["EPSG","6311"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4311"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.68333333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31171"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31251 : MGI (Ferro) / Austria GK West Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31251,'EPSG',31251,'PROJCS["MGI (Ferro) / Austria GK West Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31251"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31252 : MGI (Ferro) / Austria GK Central Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31252,'EPSG',31252,'PROJCS["MGI (Ferro) / Austria GK Central Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31252"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31253 : MGI (Ferro) / Austria GK East Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31253,'EPSG',31253,'PROJCS["MGI (Ferro) / Austria GK East Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31253"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31254 : MGI / Austria GK West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31254,'EPSG',31254,'PROJCS["MGI / Austria GK West",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31254"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31255 : MGI / Austria GK Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31255,'EPSG',31255,'PROJCS["MGI / Austria GK Central",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31255"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31256 : MGI / Austria GK East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31256,'EPSG',31256,'PROJCS["MGI / Austria GK East",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31256"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31257 : MGI / Austria GK M28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31257,'EPSG',31257,'PROJCS["MGI / Austria GK M28",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31257"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31258 : MGI / Austria GK M31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31258,'EPSG',31258,'PROJCS["MGI / Austria GK M31",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31258"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31259 : MGI / Austria GK M34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31259,'EPSG',31259,'PROJCS["MGI / Austria GK M34",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",-5000000],AUTHORITY["EPSG","31259"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31265 : MGI / 3-degree Gauss zone 5 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31265,'EPSG',31265,'PROJCS["MGI / 3-degree Gauss zone 5 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31265"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31266 : MGI / 3-degree Gauss zone 6 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31266,'EPSG',31266,'PROJCS["MGI / 3-degree Gauss zone 6 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",1],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31266"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31267 : MGI / 3-degree Gauss zone 7 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31267,'EPSG',31267,'PROJCS["MGI / 3-degree Gauss zone 7 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",1],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31267"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31268 : MGI / 3-degree Gauss zone 8 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31268,'EPSG',31268,'PROJCS["MGI / 3-degree Gauss zone 8 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",1],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31268"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31275 : MGI / Balkans zone 5 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31275,'EPSG',31275,'PROJCS["MGI / Balkans zone 5 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31275"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31276 : MGI / Balkans zone 6 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31276,'EPSG',31276,'PROJCS["MGI / Balkans zone 6 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",18],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",6500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31276"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31277 : MGI / Balkans zone 7 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31277,'EPSG',31277,'PROJCS["MGI / Balkans zone 7 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31277"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31278 : MGI / Balkans zone 8 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31278,'EPSG',31278,'PROJCS["MGI / Balkans zone 8 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",7500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31278"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31279 : MGI / Balkans zone 8 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31279,'EPSG',31279,'PROJCS["MGI / Balkans zone 8 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",24],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",8500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31279"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31281 : MGI (Ferro) / Austria West Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31281,'EPSG',31281,'PROJCS["MGI (Ferro) / Austria West Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31281"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31282 : MGI (Ferro) / Austria Central Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31282,'EPSG',31282,'PROJCS["MGI (Ferro) / Austria Central Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31282"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31283 : MGI (Ferro) / Austria East Zone --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31283,'EPSG',31283,'PROJCS["MGI (Ferro) / Austria East Zone",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31283"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31284 : MGI / Austria M28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31284,'EPSG',31284,'PROJCS["MGI / Austria M28",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31284"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31285 : MGI / Austria M31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31285,'EPSG',31285,'PROJCS["MGI / Austria M31",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31285"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31286 : MGI / Austria M34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31286,'EPSG',31286,'PROJCS["MGI / Austria M34",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31286"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31287 : MGI / Austria Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31287,'EPSG',31287,'PROJCS["MGI / Austria Lambert",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",47.5],PARAMETER["central_meridian",13.33333333333333],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","31287"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31288 : MGI (Ferro) / M28 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31288,'EPSG',31288,'PROJCS["MGI (Ferro) / M28",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31288"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31289 : MGI (Ferro) / M31 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31289,'EPSG',31289,'PROJCS["MGI (Ferro) / M31",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31289"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31290 : MGI (Ferro) / M34 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31290,'EPSG',31290,'PROJCS["MGI (Ferro) / M34",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31290"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31291 : MGI (Ferro) / Austria West Zone (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31291,'EPSG',31291,'PROJCS["MGI (Ferro) / Austria West Zone (deprecated)",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",28],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31291"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31292 : MGI (Ferro) / Austria Central Zone (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31292,'EPSG',31292,'PROJCS["MGI (Ferro) / Austria Central Zone (deprecated)",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",31],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31292"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31293 : MGI (Ferro) / Austria East Zone (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31293,'EPSG',31293,'PROJCS["MGI (Ferro) / Austria East Zone (deprecated)",GEOGCS["MGI (Ferro)",DATUM["Militar_Geographische_Institut_Ferro",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[682,-203,480,0,0,0,0],AUTHORITY["EPSG","6805"]],PRIMEM["Ferro",-17.66666666666667,AUTHORITY["EPSG","8909"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4805"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",34],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","31293"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs '); --- --- EPSG 31294 : MGI / M28 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31294,'EPSG',31294,'PROJCS["MGI / M28 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",10.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31294"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31295 : MGI / M31 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31295,'EPSG',31295,'PROJCS["MGI / M31 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",450000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31295"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31296 : MGI / M34 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31296,'EPSG',31296,'PROJCS["MGI / M34 (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",16.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",750000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31296"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31297 : MGI / Austria Lambert (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31297,'EPSG',31297,'PROJCS["MGI / Austria Lambert (deprecated)",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[577.326,90.129,463.919,5.137,1.474,5.297,2.4232],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4312"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",47.5],PARAMETER["central_meridian",13.33333333333333],PARAMETER["false_easting",400000],PARAMETER["false_northing",400000],AUTHORITY["EPSG","31297"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs '); --- --- EPSG 31300 : Belge 1972 / Belge Lambert 72 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31300,'EPSG',31300,'PROJCS["Belge 1972 / Belge Lambert 72",GEOGCS["Belge 1972",DATUM["Reseau_National_Belge_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747],AUTHORITY["EPSG","6313"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4313"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP_Belgium"],PARAMETER["standard_parallel_1",49.83333333333334],PARAMETER["standard_parallel_2",51.16666666666666],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",4.356939722222222],PARAMETER["false_easting",150000.01256],PARAMETER["false_northing",5400088.4378],AUTHORITY["EPSG","31300"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747 +units=m +no_defs '); --- --- EPSG 31370 : Belge 1972 / Belgian Lambert 72 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31370,'EPSG',31370,'PROJCS["Belge 1972 / Belgian Lambert 72",GEOGCS["Belge 1972",DATUM["Reseau_National_Belge_1972",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747],AUTHORITY["EPSG","6313"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4313"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",51.16666723333333],PARAMETER["standard_parallel_2",49.8333339],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",4.367486666666666],PARAMETER["false_easting",150000.013],PARAMETER["false_northing",5400088.438],AUTHORITY["EPSG","31370"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.868628,52.297783,-103.723893,0.336570,-0.456955,1.842183,-1.2747 +units=m +no_defs '); --- --- EPSG 31461 : DHDN / 3-degree Gauss zone 1 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31461,'EPSG',31461,'PROJCS["DHDN / 3-degree Gauss zone 1 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31461"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31462 : DHDN / 3-degree Gauss zone 2 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31462,'EPSG',31462,'PROJCS["DHDN / 3-degree Gauss zone 2 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",6],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31462"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31463 : DHDN / 3-degree Gauss zone 3 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31463,'EPSG',31463,'PROJCS["DHDN / 3-degree Gauss zone 3 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31463"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31464 : DHDN / 3-degree Gauss zone 4 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31464,'EPSG',31464,'PROJCS["DHDN / 3-degree Gauss zone 4 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31464"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31465 : DHDN / 3-degree Gauss zone 5 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31465,'EPSG',31465,'PROJCS["DHDN / 3-degree Gauss zone 5 (deprecated)",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31465"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31466 : DHDN / 3-degree Gauss-Kruger zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31466,'EPSG',31466,'PROJCS["DHDN / 3-degree Gauss-Kruger zone 2",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",6],PARAMETER["scale_factor",1],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31466"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31467 : DHDN / 3-degree Gauss-Kruger zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31467,'EPSG',31467,'PROJCS["DHDN / 3-degree Gauss-Kruger zone 3",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31467"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31468 : DHDN / 3-degree Gauss-Kruger zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31468,'EPSG',31468,'PROJCS["DHDN / 3-degree Gauss-Kruger zone 4",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",12],PARAMETER["scale_factor",1],PARAMETER["false_easting",4500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31468"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31469 : DHDN / 3-degree Gauss-Kruger zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31469,'EPSG',31469,'PROJCS["DHDN / 3-degree Gauss-Kruger zone 5",GEOGCS["DHDN",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY["EPSG","6314"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4314"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",1],PARAMETER["false_easting",5500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31469"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs '); --- --- EPSG 31528 : Conakry 1905 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31528,'EPSG',31528,'PROJCS["Conakry 1905 / UTM zone 28N",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31528"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31529 : Conakry 1905 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31529,'EPSG',31529,'PROJCS["Conakry 1905 / UTM zone 29N",GEOGCS["Conakry 1905",DATUM["Conakry_1905",SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,AUTHORITY["EPSG","7011"]],TOWGS84[-23,259,-9,0,0,0,0],AUTHORITY["EPSG","6315"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4315"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31529"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31600 : Dealul Piscului 1930 / Stereo 33 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31600,'EPSG',31600,'PROJCS["Dealul Piscului 1930 / Stereo 33",GEOGCS["Dealul Piscului 1930",DATUM["Dealul_Piscului_1930",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[103.25,-100.4,-307.19,0,0,0,0],AUTHORITY["EPSG","6316"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4316"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",45.9],PARAMETER["central_meridian",25.39246588888889],PARAMETER["scale_factor",0.9996667],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","31600"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31700 : Dealul Piscului 1970/ Stereo 70 (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31700,'EPSG',31700,'PROJCS["Dealul Piscului 1970/ Stereo 70 (deprecated)",GEOGCS["Dealul Piscului 1970",DATUM["Dealul_Piscului_1970",SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],TOWGS84[28,-121,-77,0,0,0,0],AUTHORITY["EPSG","6317"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4317"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",46],PARAMETER["central_meridian",25],PARAMETER["scale_factor",0.99975],PARAMETER["false_easting",500000],PARAMETER["false_northing",500000],AUTHORITY["EPSG","31700"],AXIS["X",NORTH],AXIS["Y",EAST]]','+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31838 : NGN / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31838,'EPSG',31838,'PROJCS["NGN / UTM zone 38N",GEOGCS["NGN",DATUM["National_Geodetic_Network",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-3.2,-5.7,2.8,0,0,0,0],AUTHORITY["EPSG","6318"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4318"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31838"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31839 : NGN / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31839,'EPSG',31839,'PROJCS["NGN / UTM zone 39N",GEOGCS["NGN",DATUM["National_Geodetic_Network",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[-3.2,-5.7,2.8,0,0,0,0],AUTHORITY["EPSG","6318"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4318"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31839"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31900 : KUDAMS / KTM (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31900,'EPSG',31900,'PROJCS["KUDAMS / KTM (deprecated)",GEOGCS["KUDAMS",DATUM["Kuwait_Utility",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-20.8,11.3,2.4,0,0,0,0],AUTHORITY["EPSG","6319"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4319"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31900"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31901 : KUDAMS / KTM --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31901,'EPSG',31901,'PROJCS["KUDAMS / KTM",GEOGCS["KUDAMS",DATUM["Kuwait_Utility",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[-20.8,11.3,2.4,0,0,0,0],AUTHORITY["EPSG","6319"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4319"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",48],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31901"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31965 : SIRGAS 2000 / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31965,'EPSG',31965,'PROJCS["SIRGAS 2000 / UTM zone 11N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31965"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31966 : SIRGAS 2000 / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31966,'EPSG',31966,'PROJCS["SIRGAS 2000 / UTM zone 12N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31966"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31967 : SIRGAS 2000 / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31967,'EPSG',31967,'PROJCS["SIRGAS 2000 / UTM zone 13N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31967"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31968 : SIRGAS 2000 / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31968,'EPSG',31968,'PROJCS["SIRGAS 2000 / UTM zone 14N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31968"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31969 : SIRGAS 2000 / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31969,'EPSG',31969,'PROJCS["SIRGAS 2000 / UTM zone 15N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31969"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31970 : SIRGAS 2000 / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31970,'EPSG',31970,'PROJCS["SIRGAS 2000 / UTM zone 16N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31970"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31971 : SIRGAS 2000 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31971,'EPSG',31971,'PROJCS["SIRGAS 2000 / UTM zone 17N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31971"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31972 : SIRGAS 2000 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31972,'EPSG',31972,'PROJCS["SIRGAS 2000 / UTM zone 18N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31972"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31973 : SIRGAS 2000 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31973,'EPSG',31973,'PROJCS["SIRGAS 2000 / UTM zone 19N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31973"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31974 : SIRGAS 2000 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31974,'EPSG',31974,'PROJCS["SIRGAS 2000 / UTM zone 20N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31974"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31975 : SIRGAS 2000 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31975,'EPSG',31975,'PROJCS["SIRGAS 2000 / UTM zone 21N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31975"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31976 : SIRGAS 2000 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31976,'EPSG',31976,'PROJCS["SIRGAS 2000 / UTM zone 22N",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31976"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31977 : SIRGAS 2000 / UTM zone 17S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31977,'EPSG',31977,'PROJCS["SIRGAS 2000 / UTM zone 17S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31977"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31978 : SIRGAS 2000 / UTM zone 18S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31978,'EPSG',31978,'PROJCS["SIRGAS 2000 / UTM zone 18S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31978"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31979 : SIRGAS 2000 / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31979,'EPSG',31979,'PROJCS["SIRGAS 2000 / UTM zone 19S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31979"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31980 : SIRGAS 2000 / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31980,'EPSG',31980,'PROJCS["SIRGAS 2000 / UTM zone 20S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31980"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31981 : SIRGAS 2000 / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31981,'EPSG',31981,'PROJCS["SIRGAS 2000 / UTM zone 21S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31981"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31982 : SIRGAS 2000 / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31982,'EPSG',31982,'PROJCS["SIRGAS 2000 / UTM zone 22S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31982"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31983 : SIRGAS 2000 / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31983,'EPSG',31983,'PROJCS["SIRGAS 2000 / UTM zone 23S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31983"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31984 : SIRGAS 2000 / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31984,'EPSG',31984,'PROJCS["SIRGAS 2000 / UTM zone 24S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31984"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31985 : SIRGAS 2000 / UTM zone 25S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31985,'EPSG',31985,'PROJCS["SIRGAS 2000 / UTM zone 25S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31985"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31986 : SIRGAS 1995 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31986,'EPSG',31986,'PROJCS["SIRGAS 1995 / UTM zone 17N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31986"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31987 : SIRGAS 1995 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31987,'EPSG',31987,'PROJCS["SIRGAS 1995 / UTM zone 18N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31987"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31988 : SIRGAS 1995 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31988,'EPSG',31988,'PROJCS["SIRGAS 1995 / UTM zone 19N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31988"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31989 : SIRGAS 1995 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31989,'EPSG',31989,'PROJCS["SIRGAS 1995 / UTM zone 20N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31989"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31990 : SIRGAS 1995 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31990,'EPSG',31990,'PROJCS["SIRGAS 1995 / UTM zone 21N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31990"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31991 : SIRGAS 1995 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31991,'EPSG',31991,'PROJCS["SIRGAS 1995 / UTM zone 22N",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","31991"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31992 : SIRGAS 1995 / UTM zone 17S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31992,'EPSG',31992,'PROJCS["SIRGAS 1995 / UTM zone 17S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31992"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31993 : SIRGAS 1995 / UTM zone 18S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31993,'EPSG',31993,'PROJCS["SIRGAS 1995 / UTM zone 18S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31993"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31994 : SIRGAS 1995 / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31994,'EPSG',31994,'PROJCS["SIRGAS 1995 / UTM zone 19S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31994"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31995 : SIRGAS 1995 / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31995,'EPSG',31995,'PROJCS["SIRGAS 1995 / UTM zone 20S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31995"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31996 : SIRGAS 1995 / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31996,'EPSG',31996,'PROJCS["SIRGAS 1995 / UTM zone 21S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31996"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31997 : SIRGAS 1995 / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31997,'EPSG',31997,'PROJCS["SIRGAS 1995 / UTM zone 22S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31997"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31998 : SIRGAS 1995 / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31998,'EPSG',31998,'PROJCS["SIRGAS 1995 / UTM zone 23S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31998"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 31999 : SIRGAS 1995 / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (31999,'EPSG',31999,'PROJCS["SIRGAS 1995 / UTM zone 24S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","31999"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32000 : SIRGAS 1995 / UTM zone 25S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32000,'EPSG',32000,'PROJCS["SIRGAS 1995 / UTM zone 25S",GEOGCS["SIRGAS 1995",DATUM["Sistema_de_Referencia_Geocentrico_para_America_del_Sur_1995",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6170"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4170"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32000"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32001 : NAD27 / Montana North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32001,'EPSG',32001,'PROJCS["NAD27 / Montana North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.71666666666667],PARAMETER["standard_parallel_2",47.85],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32001"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32002 : NAD27 / Montana Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32002,'EPSG',32002,'PROJCS["NAD27 / Montana Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.88333333333333],PARAMETER["standard_parallel_2",46.45],PARAMETER["latitude_of_origin",45.83333333333334],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32002"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32003 : NAD27 / Montana South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32003,'EPSG',32003,'PROJCS["NAD27 / Montana South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.4],PARAMETER["standard_parallel_2",44.86666666666667],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32003"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32005 : NAD27 / Nebraska North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32005,'EPSG',32005,'PROJCS["NAD27 / Nebraska North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.85],PARAMETER["standard_parallel_2",42.81666666666667],PARAMETER["latitude_of_origin",41.33333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32005"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32006 : NAD27 / Nebraska South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32006,'EPSG',32006,'PROJCS["NAD27 / Nebraska South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.28333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-99.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32006"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32007 : NAD27 / Nevada East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32007,'EPSG',32007,'PROJCS["NAD27 / Nevada East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32007"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32008 : NAD27 / Nevada Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32008,'EPSG',32008,'PROJCS["NAD27 / Nevada Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32008"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32009 : NAD27 / Nevada West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32009,'EPSG',32009,'PROJCS["NAD27 / Nevada West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32009"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32010 : NAD27 / New Hampshire --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32010,'EPSG',32010,'PROJCS["NAD27 / New Hampshire",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32010"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32011 : NAD27 / New Jersey --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32011,'EPSG',32011,'PROJCS["NAD27 / New Jersey",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.66666666666667],PARAMETER["scale_factor",0.999975],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32011"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32012 : NAD27 / New Mexico East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32012,'EPSG',32012,'PROJCS["NAD27 / New Mexico East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32012"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32013 : NAD27 / New Mexico Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32013,'EPSG',32013,'PROJCS["NAD27 / New Mexico Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32013"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32014 : NAD27 / New Mexico West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32014,'EPSG',32014,'PROJCS["NAD27 / New Mexico West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32014"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32015 : NAD27 / New York East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32015,'EPSG',32015,'PROJCS["NAD27 / New York East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-74.33333333333333],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32015"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32016 : NAD27 / New York Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32016,'EPSG',32016,'PROJCS["NAD27 / New York Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32016"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32017 : NAD27 / New York West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32017,'EPSG',32017,'PROJCS["NAD27 / New York West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32017"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32018 : NAD27 / New York Long Island (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32018,'EPSG',32018,'PROJCS["NAD27 / New York Long Island (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-74],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32018"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32019 : NAD27 / North Carolina --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32019,'EPSG',32019,'PROJCS["NAD27 / North Carolina",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.33333333333334],PARAMETER["standard_parallel_2",36.16666666666666],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32019"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32020 : NAD27 / North Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32020,'EPSG',32020,'PROJCS["NAD27 / North Dakota North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.43333333333333],PARAMETER["standard_parallel_2",48.73333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32020"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32021 : NAD27 / North Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32021,'EPSG',32021,'PROJCS["NAD27 / North Dakota South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.18333333333333],PARAMETER["standard_parallel_2",47.48333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32021"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32022 : NAD27 / Ohio North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32022,'EPSG',32022,'PROJCS["NAD27 / Ohio North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.43333333333333],PARAMETER["standard_parallel_2",41.7],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32022"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32023 : NAD27 / Ohio South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32023,'EPSG',32023,'PROJCS["NAD27 / Ohio South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.73333333333333],PARAMETER["standard_parallel_2",40.03333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32023"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32024 : NAD27 / Oklahoma North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32024,'EPSG',32024,'PROJCS["NAD27 / Oklahoma North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.56666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32024"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32025 : NAD27 / Oklahoma South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32025,'EPSG',32025,'PROJCS["NAD27 / Oklahoma South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.93333333333333],PARAMETER["standard_parallel_2",35.23333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32025"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32026 : NAD27 / Oregon North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32026,'EPSG',32026,'PROJCS["NAD27 / Oregon North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.33333333333334],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32026"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32027 : NAD27 / Oregon South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32027,'EPSG',32027,'PROJCS["NAD27 / Oregon South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.33333333333334],PARAMETER["standard_parallel_2",44],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32027"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32028 : NAD27 / Pennsylvania North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32028,'EPSG',32028,'PROJCS["NAD27 / Pennsylvania North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.88333333333333],PARAMETER["standard_parallel_2",41.95],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32028"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32029 : NAD27 / Pennsylvania South (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32029,'EPSG',32029,'PROJCS["NAD27 / Pennsylvania South (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.93333333333333],PARAMETER["standard_parallel_2",40.8],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32029"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32030 : NAD27 / Rhode Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32030,'EPSG',32030,'PROJCS["NAD27 / Rhode Island",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.9999938],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32030"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32031 : NAD27 / South Carolina North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32031,'EPSG',32031,'PROJCS["NAD27 / South Carolina North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.76666666666667],PARAMETER["standard_parallel_2",34.96666666666667],PARAMETER["latitude_of_origin",33],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32031"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32033 : NAD27 / South Carolina South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32033,'EPSG',32033,'PROJCS["NAD27 / South Carolina South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.33333333333334],PARAMETER["standard_parallel_2",33.66666666666666],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32033"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32034 : NAD27 / South Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32034,'EPSG',32034,'PROJCS["NAD27 / South Dakota North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.41666666666666],PARAMETER["standard_parallel_2",45.68333333333333],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32034"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32035 : NAD27 / South Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32035,'EPSG',32035,'PROJCS["NAD27 / South Dakota South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.83333333333334],PARAMETER["standard_parallel_2",44.4],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32035"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32036 : NAD27 / Tennessee (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32036,'EPSG',32036,'PROJCS["NAD27 / Tennessee (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.25],PARAMETER["standard_parallel_2",36.41666666666666],PARAMETER["latitude_of_origin",34.66666666666666],PARAMETER["central_meridian",-86],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32036"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32037 : NAD27 / Texas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32037,'EPSG',32037,'PROJCS["NAD27 / Texas North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.65],PARAMETER["standard_parallel_2",36.18333333333333],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32037"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32038 : NAD27 / Texas North Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32038,'EPSG',32038,'PROJCS["NAD27 / Texas North Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",32.13333333333333],PARAMETER["standard_parallel_2",33.96666666666667],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-97.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32038"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32039 : NAD27 / Texas Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32039,'EPSG',32039,'PROJCS["NAD27 / Texas Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.11666666666667],PARAMETER["standard_parallel_2",31.88333333333333],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32039"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32040 : NAD27 / Texas South Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32040,'EPSG',32040,'PROJCS["NAD27 / Texas South Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",28.38333333333333],PARAMETER["standard_parallel_2",30.28333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32040"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32041 : NAD27 / Texas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32041,'EPSG',32041,'PROJCS["NAD27 / Texas South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",26.16666666666667],PARAMETER["standard_parallel_2",27.83333333333333],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32041"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32042 : NAD27 / Utah North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32042,'EPSG',32042,'PROJCS["NAD27 / Utah North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.71666666666667],PARAMETER["standard_parallel_2",41.78333333333333],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32042"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32043 : NAD27 / Utah Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32043,'EPSG',32043,'PROJCS["NAD27 / Utah Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.01666666666667],PARAMETER["standard_parallel_2",40.65],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32043"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32044 : NAD27 / Utah South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32044,'EPSG',32044,'PROJCS["NAD27 / Utah South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.21666666666667],PARAMETER["standard_parallel_2",38.35],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32044"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32045 : NAD27 / Vermont --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32045,'EPSG',32045,'PROJCS["NAD27 / Vermont",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32045"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32046 : NAD27 / Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32046,'EPSG',32046,'PROJCS["NAD27 / Virginia North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.03333333333333],PARAMETER["standard_parallel_2",39.2],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32046"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32047 : NAD27 / Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32047,'EPSG',32047,'PROJCS["NAD27 / Virginia South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",37.96666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32047"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32048 : NAD27 / Washington North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32048,'EPSG',32048,'PROJCS["NAD27 / Washington North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.5],PARAMETER["standard_parallel_2",48.73333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32048"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32049 : NAD27 / Washington South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32049,'EPSG',32049,'PROJCS["NAD27 / Washington South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.83333333333334],PARAMETER["standard_parallel_2",47.33333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32049"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32050 : NAD27 / West Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32050,'EPSG',32050,'PROJCS["NAD27 / West Virginia North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39],PARAMETER["standard_parallel_2",40.25],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32050"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32051 : NAD27 / West Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32051,'EPSG',32051,'PROJCS["NAD27 / West Virginia South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.48333333333333],PARAMETER["standard_parallel_2",38.88333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32051"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32052 : NAD27 / Wisconsin North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32052,'EPSG',32052,'PROJCS["NAD27 / Wisconsin North",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.56666666666667],PARAMETER["standard_parallel_2",46.76666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32052"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32053 : NAD27 / Wisconsin Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32053,'EPSG',32053,'PROJCS["NAD27 / Wisconsin Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.25],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32053"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32054 : NAD27 / Wisconsin South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32054,'EPSG',32054,'PROJCS["NAD27 / Wisconsin South",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.73333333333333],PARAMETER["standard_parallel_2",44.06666666666667],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32054"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32055 : NAD27 / Wyoming East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32055,'EPSG',32055,'PROJCS["NAD27 / Wyoming East",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32055"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32056 : NAD27 / Wyoming East Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32056,'EPSG',32056,'PROJCS["NAD27 / Wyoming East Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32056"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32057 : NAD27 / Wyoming West Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32057,'EPSG',32057,'PROJCS["NAD27 / Wyoming West Central",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32057"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32058 : NAD27 / Wyoming West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32058,'EPSG',32058,'PROJCS["NAD27 / Wyoming West",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.66666666666666],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.999941177],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32058"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32061 : NAD27 / Guatemala Norte --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32061,'EPSG',32061,'PROJCS["NAD27 / Guatemala Norte",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",16.81666666666667],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99992226],PARAMETER["false_easting",500000],PARAMETER["false_northing",292209.579],AUTHORITY["EPSG","32061"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32062 : NAD27 / Guatemala Sur --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32062,'EPSG',32062,'PROJCS["NAD27 / Guatemala Sur",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["latitude_of_origin",14.9],PARAMETER["central_meridian",-90.33333333333333],PARAMETER["scale_factor",0.99989906],PARAMETER["false_easting",500000],PARAMETER["false_northing",325992.681],AUTHORITY["EPSG","32062"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32064 : NAD27 / BLM 14N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32064,'EPSG',32064,'PROJCS["NAD27 / BLM 14N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32064"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32065 : NAD27 / BLM 15N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32065,'EPSG',32065,'PROJCS["NAD27 / BLM 15N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32065"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32066 : NAD27 / BLM 16N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32066,'EPSG',32066,'PROJCS["NAD27 / BLM 16N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32066"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32067 : NAD27 / BLM 17N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32067,'EPSG',32067,'PROJCS["NAD27 / BLM 17N (ftUS)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32067"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32074 : NAD27 / BLM 14N (feet) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32074,'EPSG',32074,'PROJCS["NAD27 / BLM 14N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32074"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32075 : NAD27 / BLM 15N (feet) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32075,'EPSG',32075,'PROJCS["NAD27 / BLM 15N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32075"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32076 : NAD27 / BLM 16N (feet) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32076,'EPSG',32076,'PROJCS["NAD27 / BLM 16N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32076"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32077 : NAD27 / BLM 17N (feet) (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32077,'EPSG',32077,'PROJCS["NAD27 / BLM 17N (feet) (deprecated)",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32077"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32081 : NAD27 / MTM zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32081,'EPSG',32081,'PROJCS["NAD27 / MTM zone 1",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-53],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32081"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32082 : NAD27 / MTM zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32082,'EPSG',32082,'PROJCS["NAD27 / MTM zone 2",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-56],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32082"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32083 : NAD27 / MTM zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32083,'EPSG',32083,'PROJCS["NAD27 / MTM zone 3",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32083"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32084 : NAD27 / MTM zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32084,'EPSG',32084,'PROJCS["NAD27 / MTM zone 4",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32084"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32085 : NAD27 / MTM zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32085,'EPSG',32085,'PROJCS["NAD27 / MTM zone 5",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32085"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32086 : NAD27 / MTM zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32086,'EPSG',32086,'PROJCS["NAD27 / MTM zone 6",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32086"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32098 : NAD27 / Quebec Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32098,'EPSG',32098,'PROJCS["NAD27 / Quebec Lambert",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",60],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-68.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","32098"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs '); --- --- EPSG 32099 : NAD27 / Louisiana Offshore --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32099,'EPSG',32099,'PROJCS["NAD27 / Louisiana Offshore",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",2000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32099"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs '); --- --- EPSG 32100 : NAD83 / Montana --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32100,'EPSG',32100,'PROJCS["NAD83 / Montana",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",49],PARAMETER["standard_parallel_2",45],PARAMETER["latitude_of_origin",44.25],PARAMETER["central_meridian",-109.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32100"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32104 : NAD83 / Nebraska --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32104,'EPSG',32104,'PROJCS["NAD83 / Nebraska",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",40],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32104"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32107 : NAD83 / Nevada East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32107,'EPSG',32107,'PROJCS["NAD83 / Nevada East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-115.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",200000],PARAMETER["false_northing",8000000],AUTHORITY["EPSG","32107"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32108 : NAD83 / Nevada Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32108,'EPSG',32108,'PROJCS["NAD83 / Nevada Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-116.6666666666667],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",6000000],AUTHORITY["EPSG","32108"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32109 : NAD83 / Nevada West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32109,'EPSG',32109,'PROJCS["NAD83 / Nevada West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",34.75],PARAMETER["central_meridian",-118.5833333333333],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",800000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","32109"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32110 : NAD83 / New Hampshire --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32110,'EPSG',32110,'PROJCS["NAD83 / New Hampshire",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-71.66666666666667],PARAMETER["scale_factor",0.999966667],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32110"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32111 : NAD83 / New Jersey --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32111,'EPSG',32111,'PROJCS["NAD83 / New Jersey",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32111"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32112 : NAD83 / New Mexico East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32112,'EPSG',32112,'PROJCS["NAD83 / New Mexico East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-104.3333333333333],PARAMETER["scale_factor",0.999909091],PARAMETER["false_easting",165000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32112"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32113 : NAD83 / New Mexico Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32113,'EPSG',32113,'PROJCS["NAD83 / New Mexico Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32113"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32114 : NAD83 / New Mexico West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32114,'EPSG',32114,'PROJCS["NAD83 / New Mexico West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-107.8333333333333],PARAMETER["scale_factor",0.999916667],PARAMETER["false_easting",830000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32114"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32115 : NAD83 / New York East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32115,'EPSG',32115,'PROJCS["NAD83 / New York East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",38.83333333333334],PARAMETER["central_meridian",-74.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",150000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32115"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32116 : NAD83 / New York Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32116,'EPSG',32116,'PROJCS["NAD83 / New York Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-76.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",250000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32116"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32117 : NAD83 / New York West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32117,'EPSG',32117,'PROJCS["NAD83 / New York West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40],PARAMETER["central_meridian",-78.58333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",350000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32117"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32118 : NAD83 / New York Long Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32118,'EPSG',32118,'PROJCS["NAD83 / New York Long Island",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.03333333333333],PARAMETER["standard_parallel_2",40.66666666666666],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-74],PARAMETER["false_easting",300000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32118"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32119 : NAD83 / North Carolina --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32119,'EPSG',32119,'PROJCS["NAD83 / North Carolina",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",609601.22],PARAMETER["false_northing",0],AUTHORITY["EPSG","32119"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32120 : NAD83 / North Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32120,'EPSG',32120,'PROJCS["NAD83 / North Dakota North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.43333333333333],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32120"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32121 : NAD83 / North Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32121,'EPSG',32121,'PROJCS["NAD83 / North Dakota South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.48333333333333],PARAMETER["standard_parallel_2",46.18333333333333],PARAMETER["latitude_of_origin",45.66666666666666],PARAMETER["central_meridian",-100.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32121"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32122 : NAD83 / Ohio North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32122,'EPSG',32122,'PROJCS["NAD83 / Ohio North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.7],PARAMETER["standard_parallel_2",40.43333333333333],PARAMETER["latitude_of_origin",39.66666666666666],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32122"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32123 : NAD83 / Ohio South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32123,'EPSG',32123,'PROJCS["NAD83 / Ohio South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.03333333333333],PARAMETER["standard_parallel_2",38.73333333333333],PARAMETER["latitude_of_origin",38],PARAMETER["central_meridian",-82.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32123"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32124 : NAD83 / Oklahoma North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32124,'EPSG',32124,'PROJCS["NAD83 / Oklahoma North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.76666666666667],PARAMETER["standard_parallel_2",35.56666666666667],PARAMETER["latitude_of_origin",35],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32124"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32125 : NAD83 / Oklahoma South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32125,'EPSG',32125,'PROJCS["NAD83 / Oklahoma South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",35.23333333333333],PARAMETER["standard_parallel_2",33.93333333333333],PARAMETER["latitude_of_origin",33.33333333333334],PARAMETER["central_meridian",-98],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32125"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32126 : NAD83 / Oregon North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32126,'EPSG',32126,'PROJCS["NAD83 / Oregon North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46],PARAMETER["standard_parallel_2",44.33333333333334],PARAMETER["latitude_of_origin",43.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",2500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32126"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32127 : NAD83 / Oregon South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32127,'EPSG',32127,'PROJCS["NAD83 / Oregon South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44],PARAMETER["standard_parallel_2",42.33333333333334],PARAMETER["latitude_of_origin",41.66666666666666],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32127"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32128 : NAD83 / Pennsylvania North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32128,'EPSG',32128,'PROJCS["NAD83 / Pennsylvania North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.95],PARAMETER["standard_parallel_2",40.88333333333333],PARAMETER["latitude_of_origin",40.16666666666666],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32128"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32129 : NAD83 / Pennsylvania South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32129,'EPSG',32129,'PROJCS["NAD83 / Pennsylvania South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.96666666666667],PARAMETER["standard_parallel_2",39.93333333333333],PARAMETER["latitude_of_origin",39.33333333333334],PARAMETER["central_meridian",-77.75],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32129"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32130 : NAD83 / Rhode Island --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32130,'EPSG',32130,'PROJCS["NAD83 / Rhode Island",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",41.08333333333334],PARAMETER["central_meridian",-71.5],PARAMETER["scale_factor",0.99999375],PARAMETER["false_easting",100000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32130"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32133 : NAD83 / South Carolina --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32133,'EPSG',32133,'PROJCS["NAD83 / South Carolina",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",34.83333333333334],PARAMETER["standard_parallel_2",32.5],PARAMETER["latitude_of_origin",31.83333333333333],PARAMETER["central_meridian",-81],PARAMETER["false_easting",609600],PARAMETER["false_northing",0],AUTHORITY["EPSG","32133"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32134 : NAD83 / South Dakota North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32134,'EPSG',32134,'PROJCS["NAD83 / South Dakota North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.68333333333333],PARAMETER["standard_parallel_2",44.41666666666666],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-100],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32134"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32135 : NAD83 / South Dakota South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32135,'EPSG',32135,'PROJCS["NAD83 / South Dakota South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.4],PARAMETER["standard_parallel_2",42.83333333333334],PARAMETER["latitude_of_origin",42.33333333333334],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32135"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32136 : NAD83 / Tennessee --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32136,'EPSG',32136,'PROJCS["NAD83 / Tennessee",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.41666666666666],PARAMETER["standard_parallel_2",35.25],PARAMETER["latitude_of_origin",34.33333333333334],PARAMETER["central_meridian",-86],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32136"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32137 : NAD83 / Texas North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32137,'EPSG',32137,'PROJCS["NAD83 / Texas North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",36.18333333333333],PARAMETER["standard_parallel_2",34.65],PARAMETER["latitude_of_origin",34],PARAMETER["central_meridian",-101.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","32137"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32138 : NAD83 / Texas North Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32138,'EPSG',32138,'PROJCS["NAD83 / Texas North Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",33.96666666666667],PARAMETER["standard_parallel_2",32.13333333333333],PARAMETER["latitude_of_origin",31.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32138"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32139 : NAD83 / Texas Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32139,'EPSG',32139,'PROJCS["NAD83 / Texas Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",31.88333333333333],PARAMETER["standard_parallel_2",30.11666666666667],PARAMETER["latitude_of_origin",29.66666666666667],PARAMETER["central_meridian",-100.3333333333333],PARAMETER["false_easting",700000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","32139"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32140 : NAD83 / Texas South Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32140,'EPSG',32140,'PROJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","32140"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32141 : NAD83 / Texas South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32141,'EPSG',32141,'PROJCS["NAD83 / Texas South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.66666666666667],PARAMETER["central_meridian",-98.5],PARAMETER["false_easting",300000],PARAMETER["false_northing",5000000],AUTHORITY["EPSG","32141"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32142 : NAD83 / Utah North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32142,'EPSG',32142,'PROJCS["NAD83 / Utah North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",41.78333333333333],PARAMETER["standard_parallel_2",40.71666666666667],PARAMETER["latitude_of_origin",40.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","32142"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32143 : NAD83 / Utah Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32143,'EPSG',32143,'PROJCS["NAD83 / Utah Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.65],PARAMETER["standard_parallel_2",39.01666666666667],PARAMETER["latitude_of_origin",38.33333333333334],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32143"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32144 : NAD83 / Utah South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32144,'EPSG',32144,'PROJCS["NAD83 / Utah South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.35],PARAMETER["standard_parallel_2",37.21666666666667],PARAMETER["latitude_of_origin",36.66666666666666],PARAMETER["central_meridian",-111.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",3000000],AUTHORITY["EPSG","32144"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32145 : NAD83 / Vermont --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32145,'EPSG',32145,'PROJCS["NAD83 / Vermont",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",42.5],PARAMETER["central_meridian",-72.5],PARAMETER["scale_factor",0.999964286],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32145"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32146 : NAD83 / Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32146,'EPSG',32146,'PROJCS["NAD83 / Virginia North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",39.2],PARAMETER["standard_parallel_2",38.03333333333333],PARAMETER["latitude_of_origin",37.66666666666666],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32146"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32147 : NAD83 / Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32147,'EPSG',32147,'PROJCS["NAD83 / Virginia South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",37.96666666666667],PARAMETER["standard_parallel_2",36.76666666666667],PARAMETER["latitude_of_origin",36.33333333333334],PARAMETER["central_meridian",-78.5],PARAMETER["false_easting",3500000],PARAMETER["false_northing",1000000],AUTHORITY["EPSG","32147"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32148 : NAD83 / Washington North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32148,'EPSG',32148,'PROJCS["NAD83 / Washington North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.73333333333333],PARAMETER["standard_parallel_2",47.5],PARAMETER["latitude_of_origin",47],PARAMETER["central_meridian",-120.8333333333333],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32148"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32149 : NAD83 / Washington South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32149,'EPSG',32149,'PROJCS["NAD83 / Washington South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",47.33333333333334],PARAMETER["standard_parallel_2",45.83333333333334],PARAMETER["latitude_of_origin",45.33333333333334],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32149"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32150 : NAD83 / West Virginia North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32150,'EPSG',32150,'PROJCS["NAD83 / West Virginia North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",40.25],PARAMETER["standard_parallel_2",39],PARAMETER["latitude_of_origin",38.5],PARAMETER["central_meridian",-79.5],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32150"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32151 : NAD83 / West Virginia South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32151,'EPSG',32151,'PROJCS["NAD83 / West Virginia South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",38.88333333333333],PARAMETER["standard_parallel_2",37.48333333333333],PARAMETER["latitude_of_origin",37],PARAMETER["central_meridian",-81],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32151"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32152 : NAD83 / Wisconsin North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32152,'EPSG',32152,'PROJCS["NAD83 / Wisconsin North",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",46.76666666666667],PARAMETER["standard_parallel_2",45.56666666666667],PARAMETER["latitude_of_origin",45.16666666666666],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32152"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32153 : NAD83 / Wisconsin Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32153,'EPSG',32153,'PROJCS["NAD83 / Wisconsin Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",45.5],PARAMETER["standard_parallel_2",44.25],PARAMETER["latitude_of_origin",43.83333333333334],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32153"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32154 : NAD83 / Wisconsin South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32154,'EPSG',32154,'PROJCS["NAD83 / Wisconsin South",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",44.06666666666667],PARAMETER["standard_parallel_2",42.73333333333333],PARAMETER["latitude_of_origin",42],PARAMETER["central_meridian",-90],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32154"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32155 : NAD83 / Wyoming East --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32155,'EPSG',32155,'PROJCS["NAD83 / Wyoming East",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-105.1666666666667],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",200000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32155"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32156 : NAD83 / Wyoming East Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32156,'EPSG',32156,'PROJCS["NAD83 / Wyoming East Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-107.3333333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",400000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","32156"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32157 : NAD83 / Wyoming West Central --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32157,'EPSG',32157,'PROJCS["NAD83 / Wyoming West Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-108.75],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",600000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32157"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32158 : NAD83 / Wyoming West --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32158,'EPSG',32158,'PROJCS["NAD83 / Wyoming West",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",40.5],PARAMETER["central_meridian",-110.0833333333333],PARAMETER["scale_factor",0.9999375],PARAMETER["false_easting",800000],PARAMETER["false_northing",100000],AUTHORITY["EPSG","32158"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32161 : NAD83 / Puerto Rico & Virgin Is. --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32161,'EPSG',32161,'PROJCS["NAD83 / Puerto Rico & Virgin Is.",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",18.43333333333333],PARAMETER["standard_parallel_2",18.03333333333333],PARAMETER["latitude_of_origin",17.83333333333333],PARAMETER["central_meridian",-66.43333333333334],PARAMETER["false_easting",200000],PARAMETER["false_northing",200000],AUTHORITY["EPSG","32161"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32164 : NAD83 / BLM 14N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32164,'EPSG',32164,'PROJCS["NAD83 / BLM 14N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32164"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 32165 : NAD83 / BLM 15N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32165,'EPSG',32165,'PROJCS["NAD83 / BLM 15N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32165"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 32166 : NAD83 / BLM 16N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32166,'EPSG',32166,'PROJCS["NAD83 / BLM 16N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32166"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 32167 : NAD83 / BLM 17N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32167,'EPSG',32167,'PROJCS["NAD83 / BLM 17N (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32167"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs '); --- --- EPSG 32180 : NAD83 / SCoPQ zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32180,'EPSG',32180,'PROJCS["NAD83 / SCoPQ zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-55.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32180"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32181 : NAD83 / MTM zone 1 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32181,'EPSG',32181,'PROJCS["NAD83 / MTM zone 1",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-53],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32181"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32182 : NAD83 / MTM zone 2 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32182,'EPSG',32182,'PROJCS["NAD83 / MTM zone 2",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-56],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32182"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32183 : NAD83 / MTM zone 3 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32183,'EPSG',32183,'PROJCS["NAD83 / MTM zone 3",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-58.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32183"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32184 : NAD83 / MTM zone 4 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32184,'EPSG',32184,'PROJCS["NAD83 / MTM zone 4",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-61.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32184"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32185 : NAD83 / MTM zone 5 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32185,'EPSG',32185,'PROJCS["NAD83 / MTM zone 5",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-64.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32185"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32186 : NAD83 / MTM zone 6 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32186,'EPSG',32186,'PROJCS["NAD83 / MTM zone 6",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-67.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32186"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32187 : NAD83 / MTM zone 7 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32187,'EPSG',32187,'PROJCS["NAD83 / MTM zone 7",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-70.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32187"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32188 : NAD83 / MTM zone 8 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32188,'EPSG',32188,'PROJCS["NAD83 / MTM zone 8",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32188"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32189 : NAD83 / MTM zone 9 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32189,'EPSG',32189,'PROJCS["NAD83 / MTM zone 9",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-76.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32189"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32190 : NAD83 / MTM zone 10 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32190,'EPSG',32190,'PROJCS["NAD83 / MTM zone 10",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-79.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32190"],AXIS["E(X)",EAST],AXIS["N(Y)",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32191 : NAD83 / MTM zone 11 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32191,'EPSG',32191,'PROJCS["NAD83 / MTM zone 11",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-82.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32191"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32192 : NAD83 / MTM zone 12 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32192,'EPSG',32192,'PROJCS["NAD83 / MTM zone 12",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32192"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32193 : NAD83 / MTM zone 13 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32193,'EPSG',32193,'PROJCS["NAD83 / MTM zone 13",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-84],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32193"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32194 : NAD83 / MTM zone 14 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32194,'EPSG',32194,'PROJCS["NAD83 / MTM zone 14",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32194"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32195 : NAD83 / MTM zone 15 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32195,'EPSG',32195,'PROJCS["NAD83 / MTM zone 15",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-90],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32195"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32196 : NAD83 / MTM zone 16 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32196,'EPSG',32196,'PROJCS["NAD83 / MTM zone 16",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32196"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32197 : NAD83 / MTM zone 17 --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32197,'EPSG',32197,'PROJCS["NAD83 / MTM zone 17",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-96],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],AUTHORITY["EPSG","32197"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32198 : NAD83 / Quebec Lambert --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32198,'EPSG',32198,'PROJCS["NAD83 / Quebec Lambert",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",60],PARAMETER["standard_parallel_2",46],PARAMETER["latitude_of_origin",44],PARAMETER["central_meridian",-68.5],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","32198"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32199 : NAD83 / Louisiana Offshore --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32199,'EPSG',32199,'PROJCS["NAD83 / Louisiana Offshore",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",27.83333333333333],PARAMETER["standard_parallel_2",26.16666666666667],PARAMETER["latitude_of_origin",25.5],PARAMETER["central_meridian",-91.33333333333333],PARAMETER["false_easting",1000000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32199"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '); --- --- EPSG 32201 : WGS 72 / UTM zone 1N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32201,'EPSG',32201,'PROJCS["WGS 72 / UTM zone 1N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32201"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32202 : WGS 72 / UTM zone 2N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32202,'EPSG',32202,'PROJCS["WGS 72 / UTM zone 2N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32202"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32203 : WGS 72 / UTM zone 3N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32203,'EPSG',32203,'PROJCS["WGS 72 / UTM zone 3N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32203"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32204 : WGS 72 / UTM zone 4N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32204,'EPSG',32204,'PROJCS["WGS 72 / UTM zone 4N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32204"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32205 : WGS 72 / UTM zone 5N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32205,'EPSG',32205,'PROJCS["WGS 72 / UTM zone 5N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32205"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32206 : WGS 72 / UTM zone 6N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32206,'EPSG',32206,'PROJCS["WGS 72 / UTM zone 6N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32206"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32207 : WGS 72 / UTM zone 7N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32207,'EPSG',32207,'PROJCS["WGS 72 / UTM zone 7N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32207"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32208 : WGS 72 / UTM zone 8N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32208,'EPSG',32208,'PROJCS["WGS 72 / UTM zone 8N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32208"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32209 : WGS 72 / UTM zone 9N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32209,'EPSG',32209,'PROJCS["WGS 72 / UTM zone 9N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32209"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32210 : WGS 72 / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32210,'EPSG',32210,'PROJCS["WGS 72 / UTM zone 10N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32210"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32211 : WGS 72 / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32211,'EPSG',32211,'PROJCS["WGS 72 / UTM zone 11N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32211"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32212 : WGS 72 / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32212,'EPSG',32212,'PROJCS["WGS 72 / UTM zone 12N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32212"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32213 : WGS 72 / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32213,'EPSG',32213,'PROJCS["WGS 72 / UTM zone 13N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32213"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32214 : WGS 72 / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32214,'EPSG',32214,'PROJCS["WGS 72 / UTM zone 14N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32214"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32215 : WGS 72 / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32215,'EPSG',32215,'PROJCS["WGS 72 / UTM zone 15N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32215"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32216 : WGS 72 / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32216,'EPSG',32216,'PROJCS["WGS 72 / UTM zone 16N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32216"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32217 : WGS 72 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32217,'EPSG',32217,'PROJCS["WGS 72 / UTM zone 17N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32217"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32218 : WGS 72 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32218,'EPSG',32218,'PROJCS["WGS 72 / UTM zone 18N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32218"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32219 : WGS 72 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32219,'EPSG',32219,'PROJCS["WGS 72 / UTM zone 19N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32219"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32220 : WGS 72 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32220,'EPSG',32220,'PROJCS["WGS 72 / UTM zone 20N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32220"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32221 : WGS 72 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32221,'EPSG',32221,'PROJCS["WGS 72 / UTM zone 21N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32221"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32222 : WGS 72 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32222,'EPSG',32222,'PROJCS["WGS 72 / UTM zone 22N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32222"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32223 : WGS 72 / UTM zone 23N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32223,'EPSG',32223,'PROJCS["WGS 72 / UTM zone 23N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32223"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32224 : WGS 72 / UTM zone 24N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32224,'EPSG',32224,'PROJCS["WGS 72 / UTM zone 24N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32224"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32225 : WGS 72 / UTM zone 25N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32225,'EPSG',32225,'PROJCS["WGS 72 / UTM zone 25N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32225"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32226 : WGS 72 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32226,'EPSG',32226,'PROJCS["WGS 72 / UTM zone 26N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32226"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32227 : WGS 72 / UTM zone 27N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32227,'EPSG',32227,'PROJCS["WGS 72 / UTM zone 27N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32227"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32228 : WGS 72 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32228,'EPSG',32228,'PROJCS["WGS 72 / UTM zone 28N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32228"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32229 : WGS 72 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32229,'EPSG',32229,'PROJCS["WGS 72 / UTM zone 29N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32229"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32230 : WGS 72 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32230,'EPSG',32230,'PROJCS["WGS 72 / UTM zone 30N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32230"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32231 : WGS 72 / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32231,'EPSG',32231,'PROJCS["WGS 72 / UTM zone 31N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32231"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32232 : WGS 72 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32232,'EPSG',32232,'PROJCS["WGS 72 / UTM zone 32N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32232"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32233 : WGS 72 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32233,'EPSG',32233,'PROJCS["WGS 72 / UTM zone 33N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32233"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32234 : WGS 72 / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32234,'EPSG',32234,'PROJCS["WGS 72 / UTM zone 34N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32234"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32235 : WGS 72 / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32235,'EPSG',32235,'PROJCS["WGS 72 / UTM zone 35N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32235"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32236 : WGS 72 / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32236,'EPSG',32236,'PROJCS["WGS 72 / UTM zone 36N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32236"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32237 : WGS 72 / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32237,'EPSG',32237,'PROJCS["WGS 72 / UTM zone 37N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32237"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32238 : WGS 72 / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32238,'EPSG',32238,'PROJCS["WGS 72 / UTM zone 38N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32238"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32239 : WGS 72 / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32239,'EPSG',32239,'PROJCS["WGS 72 / UTM zone 39N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32239"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32240 : WGS 72 / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32240,'EPSG',32240,'PROJCS["WGS 72 / UTM zone 40N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32240"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32241 : WGS 72 / UTM zone 41N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32241,'EPSG',32241,'PROJCS["WGS 72 / UTM zone 41N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32241"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32242 : WGS 72 / UTM zone 42N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32242,'EPSG',32242,'PROJCS["WGS 72 / UTM zone 42N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32242"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32243 : WGS 72 / UTM zone 43N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32243,'EPSG',32243,'PROJCS["WGS 72 / UTM zone 43N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32243"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32244 : WGS 72 / UTM zone 44N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32244,'EPSG',32244,'PROJCS["WGS 72 / UTM zone 44N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32244"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32245 : WGS 72 / UTM zone 45N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32245,'EPSG',32245,'PROJCS["WGS 72 / UTM zone 45N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32245"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32246 : WGS 72 / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32246,'EPSG',32246,'PROJCS["WGS 72 / UTM zone 46N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32246"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32247 : WGS 72 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32247,'EPSG',32247,'PROJCS["WGS 72 / UTM zone 47N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32247"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32248 : WGS 72 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32248,'EPSG',32248,'PROJCS["WGS 72 / UTM zone 48N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32248"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32249 : WGS 72 / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32249,'EPSG',32249,'PROJCS["WGS 72 / UTM zone 49N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32249"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32250 : WGS 72 / UTM zone 50N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32250,'EPSG',32250,'PROJCS["WGS 72 / UTM zone 50N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32250"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32251 : WGS 72 / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32251,'EPSG',32251,'PROJCS["WGS 72 / UTM zone 51N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32251"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32252 : WGS 72 / UTM zone 52N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32252,'EPSG',32252,'PROJCS["WGS 72 / UTM zone 52N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32252"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32253 : WGS 72 / UTM zone 53N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32253,'EPSG',32253,'PROJCS["WGS 72 / UTM zone 53N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32253"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32254 : WGS 72 / UTM zone 54N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32254,'EPSG',32254,'PROJCS["WGS 72 / UTM zone 54N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32254"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32255 : WGS 72 / UTM zone 55N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32255,'EPSG',32255,'PROJCS["WGS 72 / UTM zone 55N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32255"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32256 : WGS 72 / UTM zone 56N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32256,'EPSG',32256,'PROJCS["WGS 72 / UTM zone 56N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32256"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32257 : WGS 72 / UTM zone 57N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32257,'EPSG',32257,'PROJCS["WGS 72 / UTM zone 57N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32257"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32258 : WGS 72 / UTM zone 58N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32258,'EPSG',32258,'PROJCS["WGS 72 / UTM zone 58N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32258"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32259 : WGS 72 / UTM zone 59N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32259,'EPSG',32259,'PROJCS["WGS 72 / UTM zone 59N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32259"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32260 : WGS 72 / UTM zone 60N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32260,'EPSG',32260,'PROJCS["WGS 72 / UTM zone 60N",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32260"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32301 : WGS 72 / UTM zone 1S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32301,'EPSG',32301,'PROJCS["WGS 72 / UTM zone 1S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32301"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32302 : WGS 72 / UTM zone 2S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32302,'EPSG',32302,'PROJCS["WGS 72 / UTM zone 2S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32302"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32303 : WGS 72 / UTM zone 3S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32303,'EPSG',32303,'PROJCS["WGS 72 / UTM zone 3S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32303"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32304 : WGS 72 / UTM zone 4S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32304,'EPSG',32304,'PROJCS["WGS 72 / UTM zone 4S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32304"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32305 : WGS 72 / UTM zone 5S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32305,'EPSG',32305,'PROJCS["WGS 72 / UTM zone 5S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32305"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32306 : WGS 72 / UTM zone 6S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32306,'EPSG',32306,'PROJCS["WGS 72 / UTM zone 6S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32306"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32307 : WGS 72 / UTM zone 7S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32307,'EPSG',32307,'PROJCS["WGS 72 / UTM zone 7S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32307"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32308 : WGS 72 / UTM zone 8S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32308,'EPSG',32308,'PROJCS["WGS 72 / UTM zone 8S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32308"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32309 : WGS 72 / UTM zone 9S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32309,'EPSG',32309,'PROJCS["WGS 72 / UTM zone 9S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32309"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32310 : WGS 72 / UTM zone 10S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32310,'EPSG',32310,'PROJCS["WGS 72 / UTM zone 10S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32310"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32311 : WGS 72 / UTM zone 11S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32311,'EPSG',32311,'PROJCS["WGS 72 / UTM zone 11S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32311"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32312 : WGS 72 / UTM zone 12S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32312,'EPSG',32312,'PROJCS["WGS 72 / UTM zone 12S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32312"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32313 : WGS 72 / UTM zone 13S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32313,'EPSG',32313,'PROJCS["WGS 72 / UTM zone 13S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32313"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32314 : WGS 72 / UTM zone 14S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32314,'EPSG',32314,'PROJCS["WGS 72 / UTM zone 14S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32314"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32315 : WGS 72 / UTM zone 15S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32315,'EPSG',32315,'PROJCS["WGS 72 / UTM zone 15S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32315"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32316 : WGS 72 / UTM zone 16S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32316,'EPSG',32316,'PROJCS["WGS 72 / UTM zone 16S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32316"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32317 : WGS 72 / UTM zone 17S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32317,'EPSG',32317,'PROJCS["WGS 72 / UTM zone 17S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32317"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32318 : WGS 72 / UTM zone 18S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32318,'EPSG',32318,'PROJCS["WGS 72 / UTM zone 18S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32318"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32319 : WGS 72 / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32319,'EPSG',32319,'PROJCS["WGS 72 / UTM zone 19S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32319"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32320 : WGS 72 / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32320,'EPSG',32320,'PROJCS["WGS 72 / UTM zone 20S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32320"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32321 : WGS 72 / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32321,'EPSG',32321,'PROJCS["WGS 72 / UTM zone 21S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32321"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32322 : WGS 72 / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32322,'EPSG',32322,'PROJCS["WGS 72 / UTM zone 22S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32322"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32323 : WGS 72 / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32323,'EPSG',32323,'PROJCS["WGS 72 / UTM zone 23S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32323"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32324 : WGS 72 / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32324,'EPSG',32324,'PROJCS["WGS 72 / UTM zone 24S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32324"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32325 : WGS 72 / UTM zone 25S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32325,'EPSG',32325,'PROJCS["WGS 72 / UTM zone 25S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32325"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32326 : WGS 72 / UTM zone 26S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32326,'EPSG',32326,'PROJCS["WGS 72 / UTM zone 26S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32326"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32327 : WGS 72 / UTM zone 27S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32327,'EPSG',32327,'PROJCS["WGS 72 / UTM zone 27S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32327"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32328 : WGS 72 / UTM zone 28S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32328,'EPSG',32328,'PROJCS["WGS 72 / UTM zone 28S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32328"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32329 : WGS 72 / UTM zone 29S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32329,'EPSG',32329,'PROJCS["WGS 72 / UTM zone 29S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32329"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32330 : WGS 72 / UTM zone 30S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32330,'EPSG',32330,'PROJCS["WGS 72 / UTM zone 30S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32330"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32331 : WGS 72 / UTM zone 31S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32331,'EPSG',32331,'PROJCS["WGS 72 / UTM zone 31S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32331"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32332 : WGS 72 / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32332,'EPSG',32332,'PROJCS["WGS 72 / UTM zone 32S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32332"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32333 : WGS 72 / UTM zone 33S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32333,'EPSG',32333,'PROJCS["WGS 72 / UTM zone 33S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32333"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32334 : WGS 72 / UTM zone 34S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32334,'EPSG',32334,'PROJCS["WGS 72 / UTM zone 34S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32334"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32335 : WGS 72 / UTM zone 35S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32335,'EPSG',32335,'PROJCS["WGS 72 / UTM zone 35S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32335"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32336 : WGS 72 / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32336,'EPSG',32336,'PROJCS["WGS 72 / UTM zone 36S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32336"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32337 : WGS 72 / UTM zone 37S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32337,'EPSG',32337,'PROJCS["WGS 72 / UTM zone 37S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32337"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32338 : WGS 72 / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32338,'EPSG',32338,'PROJCS["WGS 72 / UTM zone 38S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32338"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32339 : WGS 72 / UTM zone 39S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32339,'EPSG',32339,'PROJCS["WGS 72 / UTM zone 39S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32339"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32340 : WGS 72 / UTM zone 40S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32340,'EPSG',32340,'PROJCS["WGS 72 / UTM zone 40S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32340"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32341 : WGS 72 / UTM zone 41S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32341,'EPSG',32341,'PROJCS["WGS 72 / UTM zone 41S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32341"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32342 : WGS 72 / UTM zone 42S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32342,'EPSG',32342,'PROJCS["WGS 72 / UTM zone 42S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32342"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32343 : WGS 72 / UTM zone 43S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32343,'EPSG',32343,'PROJCS["WGS 72 / UTM zone 43S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32343"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32344 : WGS 72 / UTM zone 44S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32344,'EPSG',32344,'PROJCS["WGS 72 / UTM zone 44S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32344"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32345 : WGS 72 / UTM zone 45S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32345,'EPSG',32345,'PROJCS["WGS 72 / UTM zone 45S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32345"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32346 : WGS 72 / UTM zone 46S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32346,'EPSG',32346,'PROJCS["WGS 72 / UTM zone 46S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32346"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32347 : WGS 72 / UTM zone 47S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32347,'EPSG',32347,'PROJCS["WGS 72 / UTM zone 47S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32347"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32348 : WGS 72 / UTM zone 48S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32348,'EPSG',32348,'PROJCS["WGS 72 / UTM zone 48S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32348"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32349 : WGS 72 / UTM zone 49S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32349,'EPSG',32349,'PROJCS["WGS 72 / UTM zone 49S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32349"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32350 : WGS 72 / UTM zone 50S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32350,'EPSG',32350,'PROJCS["WGS 72 / UTM zone 50S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32350"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32351 : WGS 72 / UTM zone 51S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32351,'EPSG',32351,'PROJCS["WGS 72 / UTM zone 51S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32351"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32352 : WGS 72 / UTM zone 52S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32352,'EPSG',32352,'PROJCS["WGS 72 / UTM zone 52S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32352"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32353 : WGS 72 / UTM zone 53S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32353,'EPSG',32353,'PROJCS["WGS 72 / UTM zone 53S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32353"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32354 : WGS 72 / UTM zone 54S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32354,'EPSG',32354,'PROJCS["WGS 72 / UTM zone 54S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32354"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32355 : WGS 72 / UTM zone 55S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32355,'EPSG',32355,'PROJCS["WGS 72 / UTM zone 55S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32355"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32356 : WGS 72 / UTM zone 56S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32356,'EPSG',32356,'PROJCS["WGS 72 / UTM zone 56S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32356"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32357 : WGS 72 / UTM zone 57S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32357,'EPSG',32357,'PROJCS["WGS 72 / UTM zone 57S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32357"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32358 : WGS 72 / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32358,'EPSG',32358,'PROJCS["WGS 72 / UTM zone 58S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32358"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32359 : WGS 72 / UTM zone 59S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32359,'EPSG',32359,'PROJCS["WGS 72 / UTM zone 59S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32359"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32360 : WGS 72 / UTM zone 60S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32360,'EPSG',32360,'PROJCS["WGS 72 / UTM zone 60S",GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,4.5,0,0,0.554,0.2263],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32360"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs '); --- --- EPSG 32401 : WGS 72BE / UTM zone 1N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32401,'EPSG',32401,'PROJCS["WGS 72BE / UTM zone 1N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32401"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32402 : WGS 72BE / UTM zone 2N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32402,'EPSG',32402,'PROJCS["WGS 72BE / UTM zone 2N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32402"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32403 : WGS 72BE / UTM zone 3N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32403,'EPSG',32403,'PROJCS["WGS 72BE / UTM zone 3N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32403"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32404 : WGS 72BE / UTM zone 4N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32404,'EPSG',32404,'PROJCS["WGS 72BE / UTM zone 4N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32404"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32405 : WGS 72BE / UTM zone 5N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32405,'EPSG',32405,'PROJCS["WGS 72BE / UTM zone 5N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32405"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32406 : WGS 72BE / UTM zone 6N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32406,'EPSG',32406,'PROJCS["WGS 72BE / UTM zone 6N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32406"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32407 : WGS 72BE / UTM zone 7N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32407,'EPSG',32407,'PROJCS["WGS 72BE / UTM zone 7N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32407"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32408 : WGS 72BE / UTM zone 8N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32408,'EPSG',32408,'PROJCS["WGS 72BE / UTM zone 8N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32408"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32409 : WGS 72BE / UTM zone 9N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32409,'EPSG',32409,'PROJCS["WGS 72BE / UTM zone 9N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32409"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32410 : WGS 72BE / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32410,'EPSG',32410,'PROJCS["WGS 72BE / UTM zone 10N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32410"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32411 : WGS 72BE / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32411,'EPSG',32411,'PROJCS["WGS 72BE / UTM zone 11N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32411"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32412 : WGS 72BE / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32412,'EPSG',32412,'PROJCS["WGS 72BE / UTM zone 12N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32412"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32413 : WGS 72BE / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32413,'EPSG',32413,'PROJCS["WGS 72BE / UTM zone 13N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32413"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32414 : WGS 72BE / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32414,'EPSG',32414,'PROJCS["WGS 72BE / UTM zone 14N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32414"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32415 : WGS 72BE / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32415,'EPSG',32415,'PROJCS["WGS 72BE / UTM zone 15N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32415"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32416 : WGS 72BE / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32416,'EPSG',32416,'PROJCS["WGS 72BE / UTM zone 16N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32416"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32417 : WGS 72BE / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32417,'EPSG',32417,'PROJCS["WGS 72BE / UTM zone 17N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32417"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32418 : WGS 72BE / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32418,'EPSG',32418,'PROJCS["WGS 72BE / UTM zone 18N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32418"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32419 : WGS 72BE / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32419,'EPSG',32419,'PROJCS["WGS 72BE / UTM zone 19N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32419"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32420 : WGS 72BE / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32420,'EPSG',32420,'PROJCS["WGS 72BE / UTM zone 20N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32420"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32421 : WGS 72BE / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32421,'EPSG',32421,'PROJCS["WGS 72BE / UTM zone 21N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32421"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32422 : WGS 72BE / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32422,'EPSG',32422,'PROJCS["WGS 72BE / UTM zone 22N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32422"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32423 : WGS 72BE / UTM zone 23N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32423,'EPSG',32423,'PROJCS["WGS 72BE / UTM zone 23N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32423"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32424 : WGS 72BE / UTM zone 24N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32424,'EPSG',32424,'PROJCS["WGS 72BE / UTM zone 24N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32424"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32425 : WGS 72BE / UTM zone 25N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32425,'EPSG',32425,'PROJCS["WGS 72BE / UTM zone 25N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32425"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32426 : WGS 72BE / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32426,'EPSG',32426,'PROJCS["WGS 72BE / UTM zone 26N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32426"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32427 : WGS 72BE / UTM zone 27N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32427,'EPSG',32427,'PROJCS["WGS 72BE / UTM zone 27N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32427"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32428 : WGS 72BE / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32428,'EPSG',32428,'PROJCS["WGS 72BE / UTM zone 28N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32428"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32429 : WGS 72BE / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32429,'EPSG',32429,'PROJCS["WGS 72BE / UTM zone 29N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32429"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32430 : WGS 72BE / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32430,'EPSG',32430,'PROJCS["WGS 72BE / UTM zone 30N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32430"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32431 : WGS 72BE / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32431,'EPSG',32431,'PROJCS["WGS 72BE / UTM zone 31N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32431"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32432 : WGS 72BE / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32432,'EPSG',32432,'PROJCS["WGS 72BE / UTM zone 32N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32432"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32433 : WGS 72BE / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32433,'EPSG',32433,'PROJCS["WGS 72BE / UTM zone 33N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32433"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32434 : WGS 72BE / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32434,'EPSG',32434,'PROJCS["WGS 72BE / UTM zone 34N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32434"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32435 : WGS 72BE / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32435,'EPSG',32435,'PROJCS["WGS 72BE / UTM zone 35N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32435"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32436 : WGS 72BE / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32436,'EPSG',32436,'PROJCS["WGS 72BE / UTM zone 36N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32436"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32437 : WGS 72BE / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32437,'EPSG',32437,'PROJCS["WGS 72BE / UTM zone 37N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32437"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32438 : WGS 72BE / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32438,'EPSG',32438,'PROJCS["WGS 72BE / UTM zone 38N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32438"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32439 : WGS 72BE / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32439,'EPSG',32439,'PROJCS["WGS 72BE / UTM zone 39N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32439"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32440 : WGS 72BE / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32440,'EPSG',32440,'PROJCS["WGS 72BE / UTM zone 40N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32440"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32441 : WGS 72BE / UTM zone 41N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32441,'EPSG',32441,'PROJCS["WGS 72BE / UTM zone 41N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32441"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32442 : WGS 72BE / UTM zone 42N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32442,'EPSG',32442,'PROJCS["WGS 72BE / UTM zone 42N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32442"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32443 : WGS 72BE / UTM zone 43N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32443,'EPSG',32443,'PROJCS["WGS 72BE / UTM zone 43N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32443"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32444 : WGS 72BE / UTM zone 44N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32444,'EPSG',32444,'PROJCS["WGS 72BE / UTM zone 44N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32444"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32445 : WGS 72BE / UTM zone 45N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32445,'EPSG',32445,'PROJCS["WGS 72BE / UTM zone 45N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32445"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32446 : WGS 72BE / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32446,'EPSG',32446,'PROJCS["WGS 72BE / UTM zone 46N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32446"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32447 : WGS 72BE / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32447,'EPSG',32447,'PROJCS["WGS 72BE / UTM zone 47N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32447"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32448 : WGS 72BE / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32448,'EPSG',32448,'PROJCS["WGS 72BE / UTM zone 48N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32448"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32449 : WGS 72BE / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32449,'EPSG',32449,'PROJCS["WGS 72BE / UTM zone 49N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32449"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32450 : WGS 72BE / UTM zone 50N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32450,'EPSG',32450,'PROJCS["WGS 72BE / UTM zone 50N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32450"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32451 : WGS 72BE / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32451,'EPSG',32451,'PROJCS["WGS 72BE / UTM zone 51N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32451"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32452 : WGS 72BE / UTM zone 52N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32452,'EPSG',32452,'PROJCS["WGS 72BE / UTM zone 52N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32452"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32453 : WGS 72BE / UTM zone 53N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32453,'EPSG',32453,'PROJCS["WGS 72BE / UTM zone 53N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32453"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32454 : WGS 72BE / UTM zone 54N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32454,'EPSG',32454,'PROJCS["WGS 72BE / UTM zone 54N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32454"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32455 : WGS 72BE / UTM zone 55N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32455,'EPSG',32455,'PROJCS["WGS 72BE / UTM zone 55N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32455"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32456 : WGS 72BE / UTM zone 56N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32456,'EPSG',32456,'PROJCS["WGS 72BE / UTM zone 56N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32456"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32457 : WGS 72BE / UTM zone 57N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32457,'EPSG',32457,'PROJCS["WGS 72BE / UTM zone 57N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32457"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32458 : WGS 72BE / UTM zone 58N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32458,'EPSG',32458,'PROJCS["WGS 72BE / UTM zone 58N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32458"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32459 : WGS 72BE / UTM zone 59N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32459,'EPSG',32459,'PROJCS["WGS 72BE / UTM zone 59N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32459"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32460 : WGS 72BE / UTM zone 60N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32460,'EPSG',32460,'PROJCS["WGS 72BE / UTM zone 60N",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32460"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32501 : WGS 72BE / UTM zone 1S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32501,'EPSG',32501,'PROJCS["WGS 72BE / UTM zone 1S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32501"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32502 : WGS 72BE / UTM zone 2S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32502,'EPSG',32502,'PROJCS["WGS 72BE / UTM zone 2S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32502"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32503 : WGS 72BE / UTM zone 3S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32503,'EPSG',32503,'PROJCS["WGS 72BE / UTM zone 3S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32503"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32504 : WGS 72BE / UTM zone 4S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32504,'EPSG',32504,'PROJCS["WGS 72BE / UTM zone 4S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32504"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32505 : WGS 72BE / UTM zone 5S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32505,'EPSG',32505,'PROJCS["WGS 72BE / UTM zone 5S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32505"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32506 : WGS 72BE / UTM zone 6S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32506,'EPSG',32506,'PROJCS["WGS 72BE / UTM zone 6S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32506"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32507 : WGS 72BE / UTM zone 7S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32507,'EPSG',32507,'PROJCS["WGS 72BE / UTM zone 7S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32507"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32508 : WGS 72BE / UTM zone 8S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32508,'EPSG',32508,'PROJCS["WGS 72BE / UTM zone 8S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32508"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32509 : WGS 72BE / UTM zone 9S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32509,'EPSG',32509,'PROJCS["WGS 72BE / UTM zone 9S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32509"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32510 : WGS 72BE / UTM zone 10S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32510,'EPSG',32510,'PROJCS["WGS 72BE / UTM zone 10S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32510"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32511 : WGS 72BE / UTM zone 11S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32511,'EPSG',32511,'PROJCS["WGS 72BE / UTM zone 11S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32511"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32512 : WGS 72BE / UTM zone 12S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32512,'EPSG',32512,'PROJCS["WGS 72BE / UTM zone 12S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32512"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32513 : WGS 72BE / UTM zone 13S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32513,'EPSG',32513,'PROJCS["WGS 72BE / UTM zone 13S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32513"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32514 : WGS 72BE / UTM zone 14S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32514,'EPSG',32514,'PROJCS["WGS 72BE / UTM zone 14S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32514"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32515 : WGS 72BE / UTM zone 15S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32515,'EPSG',32515,'PROJCS["WGS 72BE / UTM zone 15S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32515"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32516 : WGS 72BE / UTM zone 16S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32516,'EPSG',32516,'PROJCS["WGS 72BE / UTM zone 16S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32516"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32517 : WGS 72BE / UTM zone 17S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32517,'EPSG',32517,'PROJCS["WGS 72BE / UTM zone 17S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32517"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32518 : WGS 72BE / UTM zone 18S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32518,'EPSG',32518,'PROJCS["WGS 72BE / UTM zone 18S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32518"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32519 : WGS 72BE / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32519,'EPSG',32519,'PROJCS["WGS 72BE / UTM zone 19S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32519"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32520 : WGS 72BE / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32520,'EPSG',32520,'PROJCS["WGS 72BE / UTM zone 20S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32520"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32521 : WGS 72BE / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32521,'EPSG',32521,'PROJCS["WGS 72BE / UTM zone 21S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32521"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32522 : WGS 72BE / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32522,'EPSG',32522,'PROJCS["WGS 72BE / UTM zone 22S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32522"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32523 : WGS 72BE / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32523,'EPSG',32523,'PROJCS["WGS 72BE / UTM zone 23S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32523"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32524 : WGS 72BE / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32524,'EPSG',32524,'PROJCS["WGS 72BE / UTM zone 24S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32524"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32525 : WGS 72BE / UTM zone 25S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32525,'EPSG',32525,'PROJCS["WGS 72BE / UTM zone 25S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32525"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32526 : WGS 72BE / UTM zone 26S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32526,'EPSG',32526,'PROJCS["WGS 72BE / UTM zone 26S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32526"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32527 : WGS 72BE / UTM zone 27S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32527,'EPSG',32527,'PROJCS["WGS 72BE / UTM zone 27S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32527"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32528 : WGS 72BE / UTM zone 28S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32528,'EPSG',32528,'PROJCS["WGS 72BE / UTM zone 28S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32528"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32529 : WGS 72BE / UTM zone 29S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32529,'EPSG',32529,'PROJCS["WGS 72BE / UTM zone 29S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32529"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32530 : WGS 72BE / UTM zone 30S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32530,'EPSG',32530,'PROJCS["WGS 72BE / UTM zone 30S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32530"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32531 : WGS 72BE / UTM zone 31S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32531,'EPSG',32531,'PROJCS["WGS 72BE / UTM zone 31S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32531"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32532 : WGS 72BE / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32532,'EPSG',32532,'PROJCS["WGS 72BE / UTM zone 32S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32532"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32533 : WGS 72BE / UTM zone 33S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32533,'EPSG',32533,'PROJCS["WGS 72BE / UTM zone 33S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32533"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32534 : WGS 72BE / UTM zone 34S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32534,'EPSG',32534,'PROJCS["WGS 72BE / UTM zone 34S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32534"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32535 : WGS 72BE / UTM zone 35S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32535,'EPSG',32535,'PROJCS["WGS 72BE / UTM zone 35S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32535"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32536 : WGS 72BE / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32536,'EPSG',32536,'PROJCS["WGS 72BE / UTM zone 36S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32536"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32537 : WGS 72BE / UTM zone 37S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32537,'EPSG',32537,'PROJCS["WGS 72BE / UTM zone 37S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32537"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32538 : WGS 72BE / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32538,'EPSG',32538,'PROJCS["WGS 72BE / UTM zone 38S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32538"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32539 : WGS 72BE / UTM zone 39S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32539,'EPSG',32539,'PROJCS["WGS 72BE / UTM zone 39S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32539"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32540 : WGS 72BE / UTM zone 40S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32540,'EPSG',32540,'PROJCS["WGS 72BE / UTM zone 40S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32540"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32541 : WGS 72BE / UTM zone 41S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32541,'EPSG',32541,'PROJCS["WGS 72BE / UTM zone 41S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32541"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32542 : WGS 72BE / UTM zone 42S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32542,'EPSG',32542,'PROJCS["WGS 72BE / UTM zone 42S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32542"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32543 : WGS 72BE / UTM zone 43S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32543,'EPSG',32543,'PROJCS["WGS 72BE / UTM zone 43S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32543"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32544 : WGS 72BE / UTM zone 44S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32544,'EPSG',32544,'PROJCS["WGS 72BE / UTM zone 44S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32544"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32545 : WGS 72BE / UTM zone 45S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32545,'EPSG',32545,'PROJCS["WGS 72BE / UTM zone 45S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32545"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32546 : WGS 72BE / UTM zone 46S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32546,'EPSG',32546,'PROJCS["WGS 72BE / UTM zone 46S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32546"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32547 : WGS 72BE / UTM zone 47S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32547,'EPSG',32547,'PROJCS["WGS 72BE / UTM zone 47S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32547"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32548 : WGS 72BE / UTM zone 48S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32548,'EPSG',32548,'PROJCS["WGS 72BE / UTM zone 48S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32548"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32549 : WGS 72BE / UTM zone 49S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32549,'EPSG',32549,'PROJCS["WGS 72BE / UTM zone 49S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32549"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32550 : WGS 72BE / UTM zone 50S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32550,'EPSG',32550,'PROJCS["WGS 72BE / UTM zone 50S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32550"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32551 : WGS 72BE / UTM zone 51S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32551,'EPSG',32551,'PROJCS["WGS 72BE / UTM zone 51S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32551"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32552 : WGS 72BE / UTM zone 52S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32552,'EPSG',32552,'PROJCS["WGS 72BE / UTM zone 52S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32552"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32553 : WGS 72BE / UTM zone 53S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32553,'EPSG',32553,'PROJCS["WGS 72BE / UTM zone 53S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32553"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32554 : WGS 72BE / UTM zone 54S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32554,'EPSG',32554,'PROJCS["WGS 72BE / UTM zone 54S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32554"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32555 : WGS 72BE / UTM zone 55S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32555,'EPSG',32555,'PROJCS["WGS 72BE / UTM zone 55S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32555"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32556 : WGS 72BE / UTM zone 56S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32556,'EPSG',32556,'PROJCS["WGS 72BE / UTM zone 56S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32556"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32557 : WGS 72BE / UTM zone 57S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32557,'EPSG',32557,'PROJCS["WGS 72BE / UTM zone 57S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32557"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32558 : WGS 72BE / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32558,'EPSG',32558,'PROJCS["WGS 72BE / UTM zone 58S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32558"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32559 : WGS 72BE / UTM zone 59S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32559,'EPSG',32559,'PROJCS["WGS 72BE / UTM zone 59S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32559"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32560 : WGS 72BE / UTM zone 60S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32560,'EPSG',32560,'PROJCS["WGS 72BE / UTM zone 60S",GEOGCS["WGS 72BE",DATUM["WGS_1972_Transit_Broadcast_Ephemeris",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],TOWGS84[0,0,1.9,0,0,0.814,-0.38],AUTHORITY["EPSG","6324"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4324"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32560"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs '); --- --- EPSG 32600 : WGS 84 / UTM grid system (northern hemisphere) --- -- (unable to translate) --- --- EPSG 32601 : WGS 84 / UTM zone 1N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32601,'EPSG',32601,'PROJCS["WGS 84 / UTM zone 1N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32601"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32602 : WGS 84 / UTM zone 2N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32602,'EPSG',32602,'PROJCS["WGS 84 / UTM zone 2N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32602"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32603 : WGS 84 / UTM zone 3N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32603,'EPSG',32603,'PROJCS["WGS 84 / UTM zone 3N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32603"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32604 : WGS 84 / UTM zone 4N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32604,'EPSG',32604,'PROJCS["WGS 84 / UTM zone 4N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32604"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32605 : WGS 84 / UTM zone 5N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32605,'EPSG',32605,'PROJCS["WGS 84 / UTM zone 5N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32605"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32606 : WGS 84 / UTM zone 6N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32606,'EPSG',32606,'PROJCS["WGS 84 / UTM zone 6N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32606"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32607 : WGS 84 / UTM zone 7N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32607,'EPSG',32607,'PROJCS["WGS 84 / UTM zone 7N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32607"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32608 : WGS 84 / UTM zone 8N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32608,'EPSG',32608,'PROJCS["WGS 84 / UTM zone 8N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32608"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32609 : WGS 84 / UTM zone 9N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32609,'EPSG',32609,'PROJCS["WGS 84 / UTM zone 9N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32609"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32610 : WGS 84 / UTM zone 10N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32610,'EPSG',32610,'PROJCS["WGS 84 / UTM zone 10N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32610"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32611 : WGS 84 / UTM zone 11N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32611,'EPSG',32611,'PROJCS["WGS 84 / UTM zone 11N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32611"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32612 : WGS 84 / UTM zone 12N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32612,'EPSG',32612,'PROJCS["WGS 84 / UTM zone 12N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32612"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32613 : WGS 84 / UTM zone 13N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32613,'EPSG',32613,'PROJCS["WGS 84 / UTM zone 13N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32613"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32614 : WGS 84 / UTM zone 14N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32614,'EPSG',32614,'PROJCS["WGS 84 / UTM zone 14N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32614"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32615 : WGS 84 / UTM zone 15N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32615,'EPSG',32615,'PROJCS["WGS 84 / UTM zone 15N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32615"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32616 : WGS 84 / UTM zone 16N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32616,'EPSG',32616,'PROJCS["WGS 84 / UTM zone 16N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32616"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32617 : WGS 84 / UTM zone 17N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32617,'EPSG',32617,'PROJCS["WGS 84 / UTM zone 17N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32617"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32618 : WGS 84 / UTM zone 18N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32618,'EPSG',32618,'PROJCS["WGS 84 / UTM zone 18N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32618"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32619 : WGS 84 / UTM zone 19N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32619,'EPSG',32619,'PROJCS["WGS 84 / UTM zone 19N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32619"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32620 : WGS 84 / UTM zone 20N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32620,'EPSG',32620,'PROJCS["WGS 84 / UTM zone 20N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32620"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32621 : WGS 84 / UTM zone 21N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32621,'EPSG',32621,'PROJCS["WGS 84 / UTM zone 21N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32621"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32622 : WGS 84 / UTM zone 22N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32622,'EPSG',32622,'PROJCS["WGS 84 / UTM zone 22N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32622"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32623 : WGS 84 / UTM zone 23N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32623,'EPSG',32623,'PROJCS["WGS 84 / UTM zone 23N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32623"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32624 : WGS 84 / UTM zone 24N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32624,'EPSG',32624,'PROJCS["WGS 84 / UTM zone 24N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32624"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32625 : WGS 84 / UTM zone 25N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32625,'EPSG',32625,'PROJCS["WGS 84 / UTM zone 25N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32625"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32626 : WGS 84 / UTM zone 26N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32626,'EPSG',32626,'PROJCS["WGS 84 / UTM zone 26N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32626"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32627 : WGS 84 / UTM zone 27N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32627,'EPSG',32627,'PROJCS["WGS 84 / UTM zone 27N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32627"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32628 : WGS 84 / UTM zone 28N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32628,'EPSG',32628,'PROJCS["WGS 84 / UTM zone 28N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32628"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32629 : WGS 84 / UTM zone 29N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32629,'EPSG',32629,'PROJCS["WGS 84 / UTM zone 29N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32629"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32630 : WGS 84 / UTM zone 30N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32630,'EPSG',32630,'PROJCS["WGS 84 / UTM zone 30N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32630"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32631 : WGS 84 / UTM zone 31N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32631,'EPSG',32631,'PROJCS["WGS 84 / UTM zone 31N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32631"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32632 : WGS 84 / UTM zone 32N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32632,'EPSG',32632,'PROJCS["WGS 84 / UTM zone 32N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32632"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32633 : WGS 84 / UTM zone 33N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32633,'EPSG',32633,'PROJCS["WGS 84 / UTM zone 33N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32633"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32634 : WGS 84 / UTM zone 34N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32634,'EPSG',32634,'PROJCS["WGS 84 / UTM zone 34N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32634"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32635 : WGS 84 / UTM zone 35N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32635,'EPSG',32635,'PROJCS["WGS 84 / UTM zone 35N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32635"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32636 : WGS 84 / UTM zone 36N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32636,'EPSG',32636,'PROJCS["WGS 84 / UTM zone 36N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32636"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32637 : WGS 84 / UTM zone 37N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32637,'EPSG',32637,'PROJCS["WGS 84 / UTM zone 37N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32637"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32638 : WGS 84 / UTM zone 38N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32638,'EPSG',32638,'PROJCS["WGS 84 / UTM zone 38N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32638"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32639 : WGS 84 / UTM zone 39N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32639,'EPSG',32639,'PROJCS["WGS 84 / UTM zone 39N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32639"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32640 : WGS 84 / UTM zone 40N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32640,'EPSG',32640,'PROJCS["WGS 84 / UTM zone 40N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32640"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32641 : WGS 84 / UTM zone 41N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32641,'EPSG',32641,'PROJCS["WGS 84 / UTM zone 41N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32641"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32642 : WGS 84 / UTM zone 42N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32642,'EPSG',32642,'PROJCS["WGS 84 / UTM zone 42N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32642"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32643 : WGS 84 / UTM zone 43N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32643,'EPSG',32643,'PROJCS["WGS 84 / UTM zone 43N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32643"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32644 : WGS 84 / UTM zone 44N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32644,'EPSG',32644,'PROJCS["WGS 84 / UTM zone 44N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32644"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=44 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32645 : WGS 84 / UTM zone 45N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32645,'EPSG',32645,'PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32645"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32646 : WGS 84 / UTM zone 46N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32646,'EPSG',32646,'PROJCS["WGS 84 / UTM zone 46N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32646"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32647 : WGS 84 / UTM zone 47N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32647,'EPSG',32647,'PROJCS["WGS 84 / UTM zone 47N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32647"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32648 : WGS 84 / UTM zone 48N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32648,'EPSG',32648,'PROJCS["WGS 84 / UTM zone 48N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32648"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32649 : WGS 84 / UTM zone 49N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32649,'EPSG',32649,'PROJCS["WGS 84 / UTM zone 49N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32649"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32650 : WGS 84 / UTM zone 50N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32650,'EPSG',32650,'PROJCS["WGS 84 / UTM zone 50N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32650"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32651 : WGS 84 / UTM zone 51N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32651,'EPSG',32651,'PROJCS["WGS 84 / UTM zone 51N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32651"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32652 : WGS 84 / UTM zone 52N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32652,'EPSG',32652,'PROJCS["WGS 84 / UTM zone 52N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32652"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32653 : WGS 84 / UTM zone 53N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32653,'EPSG',32653,'PROJCS["WGS 84 / UTM zone 53N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32653"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32654 : WGS 84 / UTM zone 54N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32654,'EPSG',32654,'PROJCS["WGS 84 / UTM zone 54N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32654"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32655 : WGS 84 / UTM zone 55N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32655,'EPSG',32655,'PROJCS["WGS 84 / UTM zone 55N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32655"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32656 : WGS 84 / UTM zone 56N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32656,'EPSG',32656,'PROJCS["WGS 84 / UTM zone 56N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32656"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32657 : WGS 84 / UTM zone 57N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32657,'EPSG',32657,'PROJCS["WGS 84 / UTM zone 57N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32657"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32658 : WGS 84 / UTM zone 58N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32658,'EPSG',32658,'PROJCS["WGS 84 / UTM zone 58N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32658"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32659 : WGS 84 / UTM zone 59N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32659,'EPSG',32659,'PROJCS["WGS 84 / UTM zone 59N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32659"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32660 : WGS 84 / UTM zone 60N --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32660,'EPSG',32660,'PROJCS["WGS 84 / UTM zone 60N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","32660"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32661 : WGS 84 / UPS North --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32661,'EPSG',32661,'PROJCS["WGS 84 / UPS North",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",90],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.994],PARAMETER["false_easting",2000000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32661"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32662 : WGS 84 / Plate Carree (deprecated) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32662,'EPSG',32662,'PROJCS["WGS 84 / Plate Carree (deprecated)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Equirectangular"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","32662"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32663 : WGS 84 / World Equidistant Cylindrical (deprecated) --- -- (unable to translate) --- --- EPSG 32664 : WGS 84 / BLM 14N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32664,'EPSG',32664,'PROJCS["WGS 84 / BLM 14N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32664"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs '); --- --- EPSG 32665 : WGS 84 / BLM 15N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32665,'EPSG',32665,'PROJCS["WGS 84 / BLM 15N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32665"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs '); --- --- EPSG 32666 : WGS 84 / BLM 16N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32666,'EPSG',32666,'PROJCS["WGS 84 / BLM 16N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32666"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs '); --- --- EPSG 32667 : WGS 84 / BLM 17N (ftUS) --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32667,'EPSG',32667,'PROJCS["WGS 84 / BLM 17N (ftUS)",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1640416.67],PARAMETER["false_northing",0],AUTHORITY["EPSG","32667"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs '); --- --- EPSG 32700 : WGS 84 / UTM grid system (southern hemisphere) --- -- (unable to translate) --- --- EPSG 32701 : WGS 84 / UTM zone 1S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32701,'EPSG',32701,'PROJCS["WGS 84 / UTM zone 1S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32701"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32702 : WGS 84 / UTM zone 2S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32702,'EPSG',32702,'PROJCS["WGS 84 / UTM zone 2S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32702"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32703 : WGS 84 / UTM zone 3S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32703,'EPSG',32703,'PROJCS["WGS 84 / UTM zone 3S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32703"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32704 : WGS 84 / UTM zone 4S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32704,'EPSG',32704,'PROJCS["WGS 84 / UTM zone 4S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32704"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32705 : WGS 84 / UTM zone 5S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32705,'EPSG',32705,'PROJCS["WGS 84 / UTM zone 5S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32705"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32706 : WGS 84 / UTM zone 6S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32706,'EPSG',32706,'PROJCS["WGS 84 / UTM zone 6S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32706"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32707 : WGS 84 / UTM zone 7S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32707,'EPSG',32707,'PROJCS["WGS 84 / UTM zone 7S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32707"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32708 : WGS 84 / UTM zone 8S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32708,'EPSG',32708,'PROJCS["WGS 84 / UTM zone 8S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32708"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32709 : WGS 84 / UTM zone 9S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32709,'EPSG',32709,'PROJCS["WGS 84 / UTM zone 9S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32709"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32710 : WGS 84 / UTM zone 10S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32710,'EPSG',32710,'PROJCS["WGS 84 / UTM zone 10S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32710"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32711 : WGS 84 / UTM zone 11S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32711,'EPSG',32711,'PROJCS["WGS 84 / UTM zone 11S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32711"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32712 : WGS 84 / UTM zone 12S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32712,'EPSG',32712,'PROJCS["WGS 84 / UTM zone 12S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32712"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32713 : WGS 84 / UTM zone 13S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32713,'EPSG',32713,'PROJCS["WGS 84 / UTM zone 13S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32713"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32714 : WGS 84 / UTM zone 14S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32714,'EPSG',32714,'PROJCS["WGS 84 / UTM zone 14S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32714"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32715 : WGS 84 / UTM zone 15S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32715,'EPSG',32715,'PROJCS["WGS 84 / UTM zone 15S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32715"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32716 : WGS 84 / UTM zone 16S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32716,'EPSG',32716,'PROJCS["WGS 84 / UTM zone 16S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32716"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32717 : WGS 84 / UTM zone 17S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32717,'EPSG',32717,'PROJCS["WGS 84 / UTM zone 17S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32717"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32718 : WGS 84 / UTM zone 18S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32718,'EPSG',32718,'PROJCS["WGS 84 / UTM zone 18S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32718"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32719 : WGS 84 / UTM zone 19S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32719,'EPSG',32719,'PROJCS["WGS 84 / UTM zone 19S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32719"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32720 : WGS 84 / UTM zone 20S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32720,'EPSG',32720,'PROJCS["WGS 84 / UTM zone 20S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32720"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32721 : WGS 84 / UTM zone 21S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32721,'EPSG',32721,'PROJCS["WGS 84 / UTM zone 21S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32721"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32722 : WGS 84 / UTM zone 22S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32722,'EPSG',32722,'PROJCS["WGS 84 / UTM zone 22S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32722"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32723 : WGS 84 / UTM zone 23S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32723,'EPSG',32723,'PROJCS["WGS 84 / UTM zone 23S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32723"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32724 : WGS 84 / UTM zone 24S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32724,'EPSG',32724,'PROJCS["WGS 84 / UTM zone 24S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32724"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32725 : WGS 84 / UTM zone 25S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32725,'EPSG',32725,'PROJCS["WGS 84 / UTM zone 25S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32725"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32726 : WGS 84 / UTM zone 26S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32726,'EPSG',32726,'PROJCS["WGS 84 / UTM zone 26S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32726"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32727 : WGS 84 / UTM zone 27S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32727,'EPSG',32727,'PROJCS["WGS 84 / UTM zone 27S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32727"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32728 : WGS 84 / UTM zone 28S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32728,'EPSG',32728,'PROJCS["WGS 84 / UTM zone 28S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32728"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32729 : WGS 84 / UTM zone 29S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32729,'EPSG',32729,'PROJCS["WGS 84 / UTM zone 29S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32729"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32730 : WGS 84 / UTM zone 30S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32730,'EPSG',32730,'PROJCS["WGS 84 / UTM zone 30S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32730"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32731 : WGS 84 / UTM zone 31S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32731,'EPSG',32731,'PROJCS["WGS 84 / UTM zone 31S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32731"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32732 : WGS 84 / UTM zone 32S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32732,'EPSG',32732,'PROJCS["WGS 84 / UTM zone 32S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32732"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32733 : WGS 84 / UTM zone 33S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32733,'EPSG',32733,'PROJCS["WGS 84 / UTM zone 33S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32733"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32734 : WGS 84 / UTM zone 34S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32734,'EPSG',32734,'PROJCS["WGS 84 / UTM zone 34S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",21],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32734"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32735 : WGS 84 / UTM zone 35S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32735,'EPSG',32735,'PROJCS["WGS 84 / UTM zone 35S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",27],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32735"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32736 : WGS 84 / UTM zone 36S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32736,'EPSG',32736,'PROJCS["WGS 84 / UTM zone 36S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",33],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32736"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32737 : WGS 84 / UTM zone 37S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32737,'EPSG',32737,'PROJCS["WGS 84 / UTM zone 37S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32737"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32738 : WGS 84 / UTM zone 38S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32738,'EPSG',32738,'PROJCS["WGS 84 / UTM zone 38S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",45],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32738"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32739 : WGS 84 / UTM zone 39S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32739,'EPSG',32739,'PROJCS["WGS 84 / UTM zone 39S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32739"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32740 : WGS 84 / UTM zone 40S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32740,'EPSG',32740,'PROJCS["WGS 84 / UTM zone 40S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",57],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32740"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32741 : WGS 84 / UTM zone 41S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32741,'EPSG',32741,'PROJCS["WGS 84 / UTM zone 41S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",63],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32741"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32742 : WGS 84 / UTM zone 42S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32742,'EPSG',32742,'PROJCS["WGS 84 / UTM zone 42S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32742"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32743 : WGS 84 / UTM zone 43S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32743,'EPSG',32743,'PROJCS["WGS 84 / UTM zone 43S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32743"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32744 : WGS 84 / UTM zone 44S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32744,'EPSG',32744,'PROJCS["WGS 84 / UTM zone 44S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32744"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32745 : WGS 84 / UTM zone 45S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32745,'EPSG',32745,'PROJCS["WGS 84 / UTM zone 45S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32745"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32746 : WGS 84 / UTM zone 46S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32746,'EPSG',32746,'PROJCS["WGS 84 / UTM zone 46S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32746"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32747 : WGS 84 / UTM zone 47S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32747,'EPSG',32747,'PROJCS["WGS 84 / UTM zone 47S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32747"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32748 : WGS 84 / UTM zone 48S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32748,'EPSG',32748,'PROJCS["WGS 84 / UTM zone 48S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32748"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32749 : WGS 84 / UTM zone 49S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32749,'EPSG',32749,'PROJCS["WGS 84 / UTM zone 49S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",111],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32749"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32750 : WGS 84 / UTM zone 50S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32750,'EPSG',32750,'PROJCS["WGS 84 / UTM zone 50S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32750"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32751 : WGS 84 / UTM zone 51S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32751,'EPSG',32751,'PROJCS["WGS 84 / UTM zone 51S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",123],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32751"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32752 : WGS 84 / UTM zone 52S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32752,'EPSG',32752,'PROJCS["WGS 84 / UTM zone 52S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",129],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32752"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32753 : WGS 84 / UTM zone 53S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32753,'EPSG',32753,'PROJCS["WGS 84 / UTM zone 53S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32753"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32754 : WGS 84 / UTM zone 54S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32754,'EPSG',32754,'PROJCS["WGS 84 / UTM zone 54S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",141],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32754"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32755 : WGS 84 / UTM zone 55S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32755,'EPSG',32755,'PROJCS["WGS 84 / UTM zone 55S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",147],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32755"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32756 : WGS 84 / UTM zone 56S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32756,'EPSG',32756,'PROJCS["WGS 84 / UTM zone 56S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",153],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32756"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32757 : WGS 84 / UTM zone 57S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32757,'EPSG',32757,'PROJCS["WGS 84 / UTM zone 57S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",159],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32757"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32758 : WGS 84 / UTM zone 58S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32758,'EPSG',32758,'PROJCS["WGS 84 / UTM zone 58S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",165],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32758"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32759 : WGS 84 / UTM zone 59S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32759,'EPSG',32759,'PROJCS["WGS 84 / UTM zone 59S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",171],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32759"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32760 : WGS 84 / UTM zone 60S --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32760,'EPSG',32760,'PROJCS["WGS 84 / UTM zone 60S",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",177],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32760"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32761 : WGS 84 / UPS South --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32761,'EPSG',32761,'PROJCS["WGS 84 / UPS South",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",-90],PARAMETER["central_meridian",0],PARAMETER["scale_factor",0.994],PARAMETER["false_easting",2000000],PARAMETER["false_northing",2000000],AUTHORITY["EPSG","32761"],AXIS["Northing",NORTH],AXIS["Easting",EAST]]','+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs '); --- --- EPSG 32766 : WGS 84 / TM 36 SE --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (32766,'EPSG',32766,'PROJCS["WGS 84 / TM 36 SE",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",36],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","32766"],AXIS["Easting",EAST],AXIS["Northing",NORTH]]','+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs '); --- --- Google Maps / Microsoft Maps --- INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (900913,'spatialreferencing.org',900913,'PROJCS["Popular Visualisation CRS / Mercator (deprecated)",GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3785"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs' ); COMMIT; ANALYZE spatial_ref_sys; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/libtool���������������������������������������������������������������������0000755�0000000�0000000�00001110364�12315456246�015170� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # libtool - Provide generalized library-building support services. # Generated automatically by config.status () # Libtool was configured on host Butterfly.local: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=2.4.2 macro_revision=1.3337 # Whether or not to build shared libraries. build_libtool_libs=yes # Whether or not to build static libraries. build_old_libs=yes # What type of objects to build. pic_mode=default # Whether or not to optimize for fast installation. fast_install=needless # Shell to use when invoking shell scripts. SHELL="/bin/sh" # An echo program that protects backslashes. ECHO="printf %s\\n" # The PATH separator for the build system. PATH_SEPARATOR=":" # The host system. host_alias= host=x86_64-apple-darwin13.1.0 host_os=darwin13.1.0 # The build system. build_alias= build=x86_64-apple-darwin13.1.0 build_os=darwin13.1.0 # A sed program that does not truncate output. SED="/usr/bin/sed" # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # A grep program that handles long lines. GREP="/usr/bin/grep" # An ERE matcher. EGREP="/usr/bin/grep -E" # A literal string matcher. FGREP="/usr/bin/grep -F" # A BSD- or MS-compatible name lister. NM="/usr/bin/nm" # Whether we need soft or hard links. LN_S="ln -s" # What is the maximum length of a command? max_cmd_len=196608 # Object file suffix (normally "o"). objext=o # Executable file suffix (normally ""). exeext= # whether the shell understands "unset". lt_unset=unset # turn spaces into newlines. SP2NL="tr \\040 \\012" # turn newlines into spaces. NL2SP="tr \\015\\012 \\040\\040" # convert $build file names to $host format. to_host_file_cmd=func_convert_file_noop # convert $build files to toolchain format. to_tool_file_cmd=func_convert_file_noop # An object symbol dumper. OBJDUMP="false" # Method to check whether dependent libraries are shared objects. deplibs_check_method="pass_all" # Command to use when deplibs_check_method = "file_magic". file_magic_cmd="\$MAGIC_CMD" # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob="" # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob="no" # DLL creation program. DLLTOOL="false" # Command to associate shared and link libraries. sharedlib_from_linklib_cmd="printf %s\\n" # The archiver. AR="ar" # Flags to create an archive. AR_FLAGS="cru" # How to feed a file listing to the archiver. archiver_list_spec="" # A symbol stripping program. STRIP="strip" # Commands used to install an old-style archive. RANLIB="ranlib" old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$tool_oldlib" old_postuninstall_cmds="" # Whether to use a lock for old archive extraction. lock_old_archive_extraction=yes # A C compiler. LTCC="gcc" # LTCC compiler flags. LTCFLAGS="-g -O2" # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe="sed -n -e 's/^.*[ ]\\([BCDEGRST][BCDEGRST]*\\)[ ][ ]*_\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 _\\2 \\2/p' | sed '/ __gnu_lto/d'" # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[BCDEGRST]* .* \\(.*\\)\$/extern char \\1;/p'" # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" # Specify filename containing input files for $NM. nm_file_list_spec="" # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot= # The name of the directory that contains temporary libtool files. objdir=.libs # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=file # Must we lock files when doing compilation? need_locks="no" # Manifest tool. MANIFEST_TOOL=":" # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL="dsymutil" # Tool to change global to local symbols on Mac OS X. NMEDIT="nmedit" # Tool to manipulate fat objects and archives on Mac OS X. LIPO="lipo" # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL="otool" # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=":" # Old archive suffix (normally "a"). libext=a # Shared library suffix (normally ".so"). shrext_cmds="\`test .\$module = .yes && echo .so || echo .dylib\`" # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds="" # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink="PATH DYLD_LIBRARY_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" # Do we need the "lib" prefix for modules? need_lib_prefix=no # Do we need a version for libraries? need_version=no # Library versioning type. version_type=darwin # Shared library runtime path variable. runpath_var= # Shared library path variable. shlibpath_var=DYLD_LIBRARY_PATH # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=yes # Format of library name prefix. libname_spec="lib\$name" # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec="\${libname}\${release}\${major}\$shared_ext \${libname}\$shared_ext" # The coded name of the library, if different from the real name. soname_spec="\${libname}\${release}\${major}\$shared_ext" # Permission mode override for installation of shared libraries. install_override_mode="" # Command to use after installation of a shared archive. postinstall_cmds="" # Command to use after uninstallation of a shared archive. postuninstall_cmds="" # Commands used to finish a libtool library installation in a directory. finish_cmds="" # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval="" # Whether we should hardcode library paths into libraries. hardcode_into_libs=no # Compile-time system search path for libraries. sys_lib_search_path_spec="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1 /usr/local/lib" # Run-time system search path for libraries. sys_lib_dlsearch_path_spec="/usr/local/lib /lib /usr/lib" # Whether dlopen is supported. dlopen_support=unknown # Whether dlopen of programs is supported. dlopen_self=unknown # Whether dlopen of statically linked programs is supported. dlopen_self_static=unknown # Commands to strip libraries. old_striplib="strip -S" striplib="strip -x" # The linker used to build libraries. LD="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LTCC \$LTCFLAGS -nostdlib \${wl}-r -o \$output\$reload_objs" # Commands used to build an old-style archive. old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" # A language specific compiler. CC="gcc" # Is the compiler the GNU compiler? with_gcc=yes # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin -fno-rtti -fno-exceptions" # Additional compiler flags for building library objects. pic_flag=" -fno-common -DPIC" # How to pass a linker flag through the compiler. wl="-Wl," # Compiler flag to prevent dynamic linking. link_static_flag="" # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=no # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=no # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="\`for conv in \$convenience\\\"\\\"; do test -n \\\"\$conv\\\" && new_convenience=\\\"\$new_convenience \${wl}-force_load,\$conv\\\"; done; func_echo_all \\\"\$new_convenience\\\"\`" # Whether the compiler copes with passing no objects directly. compiler_needs_object="no" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds="" # Commands used to build a shared archive. archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module \${wl}-exported_symbols_list,\$output_objdir/\${libname}-symbols.expsym" # Commands used to build a loadable module if different from building # a shared archive. module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags \${wl}-exported_symbols_list,\$output_objdir/\${libname}-symbols.expsym" # Whether we are building with GNU ld or not. with_gnu_ld="no" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="\${wl}-undefined \${wl}dynamic_lookup" # Flag that enforces no undefined symbols. no_undefined_flag="" # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist hardcode_libdir_flag_spec="" # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator="" # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=no # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting ${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=no # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=no # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=unsupported # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=yes # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=no # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=yes # Set to "yes" if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" # Symbols that must always be exported. include_expsyms="" # Commands necessary for linking programs (against libraries) with templates. prelink_cmds="" # Commands necessary for finishing linking programs. postlink_cmds="" # Specify filename containing input files. file_list_spec="" # How to hardcode a shared library path into an executable. hardcode_action=immediate # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs="" # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects="" postdep_objects="" predeps="" postdeps="" # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path="" # ### END LIBTOOL CONFIG # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to <bug-libtool@gnu.org>. # GNU libtool home page: <http://www.gnu.org/software/libtool/>. # General help using GNU software: <http://www.gnu.org/gethelp/>. PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # Extended-shell func_dirname implementation # func_basename file func_basename () { func_basename_result="${1##*/}" } # Extended-shell func_basename implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # Extended-shell func_dirname_and_basename implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # Extended-shell func_stripname implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} } # Extended-shell func_split_short_opt implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=} } # Extended-shell func_split_long_opt implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}+=\${2}" } # Extended-shell func_append implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}+=\\ \$func_quote_for_eval_result" } # Extended-shell func_append_quoted implementation # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # Extended-shell func_arith implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } # Extended-shell func_len implementation # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # Extended-shell func_lo2o implementation # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # Extended-shell func_xform implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false preserve_args+=" $opt" ;; --no-warning|--no-warn) opt_warning=false preserve_args+=" $opt" ;; --no-verbose) opt_verbose=false preserve_args+=" $opt" ;; --silent|--quiet) opt_silent=: preserve_args+=" $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: preserve_args+=" $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" preserve_args+=" $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || preserve_args+=" --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <<EOF # $write_libobj - a libtool object file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object=$write_lobj # Name of the non-PIC object non_pic_object=$write_oldobj EOF $MV "${write_libobj}T" "${write_libobj}" } } ################################################## # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # ################################################## # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, # and $host is mingw, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # # ARG is the $build file name to be converted to w32 format. # Result is available in $func_convert_core_file_wine_to_w32_result, and will # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { $opt_debug func_convert_core_file_wine_to_w32_result="$1" if test -n "$1"; then # Unfortunately, winepath does not exit with a non-zero error code, so we # are forced to check the contents of stdout. On the other hand, if the # command is not found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both error code of # zero AND non-empty stdout, which explains the odd construction: func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_to_host_path_result+="$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) pie_flag+=" $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) later+=" $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. base_compile+=" $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist+=" $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist+=" $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command+=" -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command+=" -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command+="$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir+="/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then libdirs+=" $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then libs+=" $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds+=" $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog+="$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then files+=" $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog+=" $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi install_shared_prog+=" $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" install_shared_prog+=" -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs+=" $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs+=" $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs+=" $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir+="$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs+=" $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen <import library>. $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 </dev/null >/dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags+=" $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat <<EOF /* $cwrappersource - temporary wrapper executable for $objdir/$outputname Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION The $output program cannot be directly executed until all the libtool libraries that it depends on are installed. This wrapper executable should never be moved out of the build directory. If it is, it will not operate correctly. */ EOF cat <<"EOF" #ifdef _MSC_VER # define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include <stdlib.h> #ifdef _MSC_VER # include <direct.h> # include <process.h> # include <io.h> #else # include <unistd.h> # include <stdint.h> # ifdef __CYGWIN__ # include <io.h> # endif #endif #include <malloc.h> #include <stdarg.h> #include <assert.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <<EOF volatile const char * MAGIC_EXE = "$magic_exe"; const char * LIB_PATH_VARNAME = "$shlibpath_var"; EOF if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then func_to_host_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * LIB_PATH_VALUE = ""; EOF fi if test -n "$dllsearchpath"; then func_to_host_path "$dllsearchpath:" cat <<EOF const char * EXE_PATH_VARNAME = "PATH"; const char * EXE_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * EXE_PATH_VARNAME = ""; const char * EXE_PATH_VALUE = ""; EOF fi if test "$fast_install" = yes; then cat <<EOF const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ EOF else cat <<EOF const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ EOF fi cat <<"EOF" #define LTWRAPPER_OPTION_PREFIX "--lt-" static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; int main (int argc, char *argv[]) { char **newargz; int newargc; char *tmp_pathspec; char *actual_cwrapper_path; char *actual_cwrapper_name; char *target_name; char *lt_argv_zero; intptr_t rval = 127; int i; program_name = (char *) xstrdup (base_name (argv[0])); newargz = XMALLOC (char *, argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except * argz[0], which is handled differently */ newargc=0; for (i = 1; i < argc; i++) { if (strcmp (argv[i], dumpscript_opt) == 0) { EOF case "$host" in *mingw* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; esac cat <<"EOF" lt_dump_script (stdout); return 0; } if (strcmp (argv[i], debug_opt) == 0) { lt_debug = 1; continue; } if (strcmp (argv[i], ltwrapper_option_prefix) == 0) { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and have already dealt with, above (inluding dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll need to make LTWRAPPER_OPTION_PREFIX a configure-time option or a configure.ac-settable value. */ lt_fatal (__FILE__, __LINE__, "unrecognized %s option: '%s'", ltwrapper_option_prefix, argv[i]); } /* otherwise ... */ newargz[++newargc] = xstrdup (argv[i]); } newargz[++newargc] = NULL; EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); tmp_pathspec = find_executable (argv[0]); if (tmp_pathspec == NULL) lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (before symlink chase) at: %s\n", tmp_pathspec); actual_cwrapper_path = chase_symlinks (tmp_pathspec); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (after symlink chase) at: %s\n", actual_cwrapper_path); XFREE (tmp_pathspec); actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); strendzap (actual_cwrapper_path, actual_cwrapper_name); /* wrapper name transforms */ strendzap (actual_cwrapper_name, ".exe"); tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); XFREE (actual_cwrapper_name); actual_cwrapper_name = tmp_pathspec; tmp_pathspec = 0; /* target_name transforms -- use actual target program name; might have lt- prefix */ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); strendzap (target_name, ".exe"); tmp_pathspec = lt_extend_str (target_name, ".exe", 1); XFREE (target_name); target_name = tmp_pathspec; tmp_pathspec = 0; lt_debugprintf (__FILE__, __LINE__, "(main) libtool target name: %s\n", target_name); EOF cat <<EOF newargz[0] = XMALLOC (char, (strlen (actual_cwrapper_path) + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); strcpy (newargz[0], actual_cwrapper_path); strcat (newargz[0], "$objdir"); strcat (newargz[0], "/"); EOF cat <<"EOF" /* stop here, and copy so we don't have to do this twice */ tmp_pathspec = xstrdup (newargz[0]); /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ strcat (newargz[0], actual_cwrapper_name); /* DO want the lt- prefix here if it exists, so use target_name */ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); XFREE (tmp_pathspec); tmp_pathspec = NULL; EOF case $host_os in mingw*) cat <<"EOF" { char* p; while ((p = strchr (newargz[0], '\\')) != NULL) { *p = '/'; } while ((p = strchr (lt_argv_zero, '\\')) != NULL) { *p = '/'; } } EOF ;; esac cat <<"EOF" XFREE (target_name); XFREE (actual_cwrapper_path); XFREE (actual_cwrapper_name); lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ lt_setenv ("DUALCASE", "1"); /* for MSK sh */ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) because on Windows, both *_VARNAMEs are PATH but uninstalled libraries must come first. */ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", nonnull (lt_argv_zero)); for (i = 0; i < newargc; i++) { lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", i, nonnull (newargz[i])); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ lt_debugprintf (__FILE__, __LINE__, "(main) failed to launch target \"%s\": %s\n", lt_argv_zero, nonnull (strerror (errno))); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal (__FILE__, __LINE__, "memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result libtool_args+=" $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command+=" @OUTPUT@" finalize_command+=" @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command+=" @SYMFILE@" finalize_command+=" @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles+=" $arg" else dlprefiles+=" $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs+=" $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs+=" $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles+=" $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles+=" $pic_object" prev= fi # A PIC object. libobjs+=" $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects+=" $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects+=" $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result libobjs+=" $pic_object" non_pic_objects+=" $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath+=" $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath+=" $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs+=" $arg" prev= continue ;; xcclinker) linker_flags+=" $qarg" compiler_flags+=" $qarg" prev= compile_command+=" $qarg" finalize_command+=" $qarg" continue ;; xcompiler) compiler_flags+=" $qarg" prev= compile_command+=" $qarg" finalize_command+=" $qarg" continue ;; xlinker) linker_flags+=" $qarg" compiler_flags+=" $wl$qarg" prev= compile_command+=" $wl$qarg" finalize_command+=" $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. compile_command+=" $link_static_flag" finalize_command+=" $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command+=" $arg" finalize_command+=" $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) deplibs+=" $arg" ;; *) deplibs+=" -L$dir" ;; esac lib_search_path+=" $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath+=":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath+=":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs+=" System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs+=" $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) compiler_flags+=" $arg" compile_command+=" $arg" finalize_command+=" $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) compiler_flags+=" $arg" compile_command+=" $arg" finalize_command+=" $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags+=" $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath+=" $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg+=" $func_quote_for_eval_result" compiler_flags+=" $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg+=" $wl$func_quote_for_eval_result" compiler_flags+=" $wl$func_quote_for_eval_result" linker_flags+=" $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin|-stdlib=*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" compile_command+=" $arg" finalize_command+=" $arg" compiler_flags+=" $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs+=" $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles+=" $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles+=" $pic_object" prev= fi # A PIC object. libobjs+=" $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects+=" $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects+=" $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result libobjs+=" $pic_object" non_pic_objects+=" $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs+=" $arg" old_deplibs+=" $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles+=" $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles+=" $func_resolve_sysroot_result" prev= else deplibs+=" $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command+=" $arg" finalize_command+=" $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command+=" $arg" finalize_command+=" $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi libs+=" $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs+=" $pre_post_deps" ;; esac pre_post_deps+=" $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs+=" $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags+=" $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags+=" $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags+=" $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath+=" $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles+=" $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles+=" $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags+=" $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles+=" $dlopen" test -n "$dlpreopen" && dlprefiles+=" $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience+=" $ladir/$objdir/$old_library" old_convenience+=" $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi tmp_libs+=" $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles+=" $lib $dependency_libs" else newdlfiles+=" $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path+=" $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path+=" $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" newdlprefiles+=" $dir/$linklib" else newdlprefiles+=" $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs+=" $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles+=" $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs+=" $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles+=" $dir/$dlname" else newdlprefiles+=" $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path+=" $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" newlib_search_path+=" $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs+=" $deplib" ;; esac fi tmp_libs+=" $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath+="$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath+=" $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs+=" $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs+=" $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath+=" $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir+=" -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath+="$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath+="$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath+="$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir+=" -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath+=" $temp_xrpath";; esac;; *) temp_deplibs+=" $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path+=" $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) specialdeplibs+=" $func_resolve_sysroot_result" ;; esac fi tmp_libs+=" $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags+=" ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags+=" -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path+=" $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs+=" $deplib" ;; esac ;; *) tmp_libs+=" $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs+=" $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs+="$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs+=" $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring+=":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs+=" $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist+=" $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs+=" $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" temp_xrpath+=" -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles+=" $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles+=" $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs+=" System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs+=" -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c <<EOF int main() { return 0; } EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then ldd_output=`ldd conftest` for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) newdeplibs+=" $i" i="" ;; esac fi if test -n "$i" ; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then newdeplibs+=" $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which I believe you do not have" echo "*** because a test_compile did reveal that the linker did not use it for" echo "*** its dynamic dependency list that programs get resolved with at runtime." fi fi ;; *) newdeplibs+=" $i" ;; esac done else # Error occurred in the first compile. Let's try to salvage # the situation: Compile a separate program for each library. for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) newdeplibs+=" $i" i="" ;; esac fi if test -n "$i" ; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then newdeplibs+=" $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because a test_compile did reveal that the linker did not use this one" echo "*** as a dynamic dependency that programs can get resolved with at runtime." fi fi else droppeddeps=yes echo $ECHO "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi ;; *) newdeplibs+=" $i" ;; esac done fi ;; file_magic*) set dummy $deplibs_check_method; shift file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs+=" $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do if test "$want_nocaseglob" = yes; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs+=" $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs+=" $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs+=" $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs+=" $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs+=" $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs+=" -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs+=" $deplib" ;; esac ;; *) new_libs+=" $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath+=" $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath+="$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames+=" $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles+=" $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result delfiles+=" $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles+=" $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs+=" $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $convenience libobjs+=" $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags+=" $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output delfiles+=" $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done delfiles+=" $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then objlist+=" $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles+=" $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles+=" $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $dlprefiles libobjs+=" $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" generated+=" $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command+=" ${wl}-bind_at_load" finalize_command+=" ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs+=" -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs+=" $deplib" ;; esac ;; *) new_libs+=" $deplib" ;; esac done compile_deplibs="$new_libs" compile_command+=" $compile_deplibs" finalize_command+=" $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath+=" $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath+=" $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath+=":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath+=":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs+="$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath+=" $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath+=" $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath+="$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath+="$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs+=" $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $addlibs oldobjs+=" $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_extract_archives $gentop $dlprefiles oldobjs+=" $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated+=" $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs+=" $gentop/$newobj" ;; *) oldobjs+=" $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result objlist+=" $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs+=" ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" newdependency_libs+=" -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" newdependency_libs+=" -R$func_replace_sysroot_result" ;; *) newdependency_libs+=" $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles+=" ${lt_sysroot:+=}$libdir/$name" ;; *) newdlfiles+=" $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles+=" ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles+=" $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles+=" $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM+=" $arg"; rmforce=yes ;; -*) RM+=" $arg" ;; *) files+=" $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) rmdirs+=" $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles+=" $odir/$n" done test -n "$old_library" && rmfiles+=" $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && rmfiles+=" $odir/$dlname" ;; esac test -n "$libdir" && rmfiles+=" $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles+=" $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles+=" $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles+=" $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles+=" $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles+=" $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles+=" $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles+=" $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LTCC \$LTCFLAGS -nostdlib \${wl}-r -o \$output\$reload_objs" # Commands used to build an old-style archive. old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" # A language specific compiler. CC="g++" # Is the compiler the GNU compiler? with_gcc=yes # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin" # Additional compiler flags for building library objects. pic_flag=" -fno-common -DPIC" # How to pass a linker flag through the compiler. wl="-Wl," # Compiler flag to prevent dynamic linking. link_static_flag="" # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=no # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=no # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="\`for conv in \$convenience\\\"\\\"; do test -n \\\"\$conv\\\" && new_convenience=\\\"\$new_convenience \${wl}-force_load,\$conv\\\"; done; func_echo_all \\\"\$new_convenience\\\"\`" # Whether the compiler copes with passing no objects directly. compiler_needs_object="no" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds="" # Commands used to build a shared archive. archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module \${wl}-exported_symbols_list,\$output_objdir/\${libname}-symbols.expsym" # Commands used to build a loadable module if different from building # a shared archive. module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags \${wl}-exported_symbols_list,\$output_objdir/\${libname}-symbols.expsym" # Whether we are building with GNU ld or not. with_gnu_ld="no" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="\${wl}-undefined \${wl}dynamic_lookup" # Flag that enforces no undefined symbols. no_undefined_flag="" # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist hardcode_libdir_flag_spec="" # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator="" # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=no # Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting ${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=no # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=no # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=unsupported # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=yes # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=no # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=yes # Set to "yes" if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" # Symbols that must always be exported. include_expsyms="" # Commands necessary for linking programs (against libraries) with templates. prelink_cmds="" # Commands necessary for finishing linking programs. postlink_cmds="" # Specify filename containing input files. file_list_spec="" # How to hardcode a shared library path into an executable. hardcode_action=immediate # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs="" # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects="" postdep_objects="" predeps="" postdeps="" # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path="" # ### END LIBTOOL TAG CONFIG: CXX ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/��������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015253� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/uninstall_sqlmm.sql.in����������������������������������������������0000644�0000000�0000000�00000006560�12121646322�021626� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: uninstall_sqlmm.sql.in 11175 2013-03-18 17:20:18Z strk $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- Copyright 2001-2003 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for constructing an ST_Geometry -- value given its WTK representation -- (http://edndoc.esri.com/arcsde/9.1/general_topics/storing_geo_in_rdbms.html) ------------------------------------------------------------------------------- DROP FUNCTION ST_WKTToSQL(text); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for constructing an ST_Geometry -- value given its WKB representation ------------------------------------------------------------------------------- DROP FUNCTION ST_WKBToSQL(bytea); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Geometry ------------------------------------------------------------------------------- DROP FUNCTION ST_CoordDim(geometry); DROP FUNCTION ST_OrderingEquals(geometry, geometry); DROP FUNCTION SE_Is3D(geometry); DROP FUNCTION SE_IsMeasured(geometry); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Point ------------------------------------------------------------------------------- -- PostGIS equivalent function: makePoint(float8,float8) DROP FUNCTION ST_Point(float8, float8); DROP FUNCTION SE_Z(geometry); DROP FUNCTION SE_M(geometry); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Polygon ------------------------------------------------------------------------------- DROP FUNCTION ST_Polygon(geometry, int); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions that test spatial relationships ------------------------------------------------------------------------------- DROP FUNCTION SE_EnvelopesIntersect(geometry,geometry); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions that implement spatial operators ------------------------------------------------------------------------------- DROP FUNCTION SE_LocateAlong(geometry, float8); DROP FUNCTION SE_LocateBetween(geometry, float8, float8); ------------------------------------------------------------------------------- -- SQL/MM LRS functions ------------------------------------------------------------------------------- DROP FUNCTION ST_LocateBetween(geometry, float8, float8); DROP FUNCTION ST_LocateAlong(geometry, float8); DROP FUNCTION ST_LocateBetween(geometry, float8, float8, float8); DROP FUNCTION ST_LocateAlong(geometry, float8, float8); ------------------------------------------------------------------------------- -- END ------------------------------------------------------------------------------- ������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_export.c�����������������������������������������������������0000644�0000000�0000000�00000030471�12143123367�020316� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id:$ * * PostGIS - Export functions for PostgreSQL/PostGIS * Copyright 2009-2011 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /** @file * Commons functions for all export functions */ #include "float.h" /* for DBL_DIG */ #include "postgres.h" #include "executor/spi.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "lwgeom_export.h" Datum LWGEOM_asGML(PG_FUNCTION_ARGS); Datum LWGEOM_asKML(PG_FUNCTION_ARGS); Datum LWGEOM_asGeoJson(PG_FUNCTION_ARGS); Datum LWGEOM_asSVG(PG_FUNCTION_ARGS); Datum LWGEOM_asX3D(PG_FUNCTION_ARGS); /* * Retrieve an SRS from a given SRID * Require valid spatial_ref_sys table entry * * Could return SRS as short one (i.e EPSG:4326) * or as long one: (i.e urn:ogc:def:crs:EPSG::4326) */ char * getSRSbySRID(int srid, bool short_crs) { char query[256]; char *srs, *srscopy; int size, err; if (SPI_OK_CONNECT != SPI_connect ()) { elog(NOTICE, "getSRSbySRID: could not connect to SPI manager"); SPI_finish(); return NULL; } if (short_crs) sprintf(query, "SELECT auth_name||':'||auth_srid \ FROM spatial_ref_sys WHERE srid='%d'", srid); else sprintf(query, "SELECT 'urn:ogc:def:crs:'||auth_name||'::'||auth_srid \ FROM spatial_ref_sys WHERE srid='%d'", srid); err = SPI_exec(query, 1); if ( err < 0 ) { elog(NOTICE, "getSRSbySRID: error executing query %d", err); SPI_finish(); return NULL; } /* no entry in spatial_ref_sys */ if (SPI_processed <= 0) { SPI_finish(); return NULL; } /* get result */ srs = SPI_getvalue(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1); /* NULL result */ if ( ! srs ) { SPI_finish(); return NULL; } /* copy result to upper executor context */ size = strlen(srs)+1; srscopy = SPI_palloc(size); memcpy(srscopy, srs, size); /* disconnect from SPI */ SPI_finish(); return srscopy; } /* * Retrieve an SRID from a given SRS * Require valid spatial_ref_sys table entry * */ int getSRIDbySRS(const char* srs) { char query[256]; int srid, err; if (srs == NULL) return 0; if (SPI_OK_CONNECT != SPI_connect ()) { elog(NOTICE, "getSRIDbySRS: could not connect to SPI manager"); SPI_finish(); return 0; } sprintf(query, "SELECT srid \ FROM spatial_ref_sys WHERE auth_name||':'||auth_srid = '%s'", srs); err = SPI_exec(query, 1); if ( err < 0 ) { elog(NOTICE, "getSRIDbySRS: error executing query %d", err); SPI_finish(); return 0; } /* no entry in spatial_ref_sys */ if (SPI_processed <= 0) { sprintf(query, "SELECT srid \ FROM spatial_ref_sys WHERE \ 'urn:ogc:def:crs:'||auth_name||'::'||auth_srid = '%s'", srs); err = SPI_exec(query, 1); if ( err < 0 ) { elog(NOTICE, "getSRIDbySRS: error executing query %d", err); SPI_finish(); return 0; } if (SPI_processed <= 0) { SPI_finish(); return 0; } } srid = atoi(SPI_getvalue(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1)); if ( ! srs ) { SPI_finish(); return 0; } SPI_finish(); return srid; } /** * Encode feature in GML */ PG_FUNCTION_INFO_V1(LWGEOM_asGML); Datum LWGEOM_asGML(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; char *gml = NULL; text *result; int version; char *srs; int srid; int option = 0; int lwopts = LW_GML_IS_DIMS; int precision = DBL_DIG; static const char* default_prefix = "gml:"; /* default prefix */ const char* prefix = default_prefix; const char* gml_id = NULL; char *prefix_buf, *gml_id_buf; text *prefix_text, *gml_id_text; /* Get the version */ version = PG_GETARG_INT32(0); if ( version != 2 && version != 3 ) { elog(ERROR, "Only GML 2 and GML 3 are supported"); PG_RETURN_NULL(); } /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); /* TODO: leave this to liblwgeom ? */ if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } /* retrieve option */ if (PG_NARGS() >3 && !PG_ARGISNULL(3)) option = PG_GETARG_INT32(3); /* retrieve prefix */ if (PG_NARGS() >4 && !PG_ARGISNULL(4)) { prefix_text = PG_GETARG_TEXT_P(4); if ( VARSIZE(prefix_text)-VARHDRSZ == 0 ) { prefix = ""; } else { /* +2 is one for the ':' and one for term null */ prefix_buf = palloc(VARSIZE(prefix_text)-VARHDRSZ+2); memcpy(prefix_buf, VARDATA(prefix_text), VARSIZE(prefix_text)-VARHDRSZ); /* add colon and null terminate */ prefix_buf[VARSIZE(prefix_text)-VARHDRSZ] = ':'; prefix_buf[VARSIZE(prefix_text)-VARHDRSZ+1] = '\0'; prefix = prefix_buf; } } if (PG_NARGS() >5 && !PG_ARGISNULL(5)) { gml_id_text = PG_GETARG_TEXT_P(5); if ( VARSIZE(gml_id_text)-VARHDRSZ == 0 ) { gml_id = ""; } else { gml_id_buf = palloc(VARSIZE(gml_id_text)-VARHDRSZ+1); memcpy(gml_id_buf, VARDATA(gml_id_text), VARSIZE(gml_id_text)-VARHDRSZ); gml_id_buf[VARSIZE(gml_id_text)-VARHDRSZ+1] = '\0'; gml_id = gml_id_buf; } } srid = gserialized_get_srid(geom); if (srid == SRID_UNKNOWN) srs = NULL; else if (option & 1) srs = getSRSbySRID(srid, false); else srs = getSRSbySRID(srid, true); if (option & 2) lwopts &= ~LW_GML_IS_DIMS; if (option & 4) lwopts |= LW_GML_SHORTLINE; if (option & 16) lwopts |= LW_GML_IS_DEGREE; if (option & 32) lwopts |= LW_GML_EXTENT; lwgeom = lwgeom_from_gserialized(geom); if (version == 2 && lwopts & LW_GML_EXTENT) gml = lwgeom_extent_to_gml2(lwgeom, srs, precision, prefix); else if (version == 2) gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix); else if (version == 3 && lwopts & LW_GML_EXTENT) gml = lwgeom_extent_to_gml3(lwgeom, srs, precision, lwopts, prefix); else if (version == 3) gml = lwgeom_to_gml3(lwgeom, srs, precision, lwopts, prefix, gml_id); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 1); /* Return null on null */ if ( ! gml ) PG_RETURN_NULL(); result = cstring2text(gml); lwfree(gml); PG_RETURN_TEXT_P(result); } /** * Encode feature in KML */ PG_FUNCTION_INFO_V1(LWGEOM_asKML); Datum LWGEOM_asKML(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; char *kml; text *result; int version; int precision = DBL_DIG; static const char* default_prefix = ""; /* default prefix */ char *prefixbuf; const char* prefix = default_prefix; text *prefix_text; /* Get the version */ version = PG_GETARG_INT32(0); if ( version != 2) { elog(ERROR, "Only KML 2 is supported"); PG_RETURN_NULL(); } /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { /* TODO: leave this to liblwgeom ? */ precision = PG_GETARG_INT32(2); if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } /* retrieve prefix */ if (PG_NARGS() >3 && !PG_ARGISNULL(3)) { prefix_text = PG_GETARG_TEXT_P(3); if ( VARSIZE(prefix_text)-VARHDRSZ == 0 ) { prefix = ""; } else { /* +2 is one for the ':' and one for term null */ prefixbuf = palloc(VARSIZE(prefix_text)-VARHDRSZ+2); memcpy(prefixbuf, VARDATA(prefix_text), VARSIZE(prefix_text)-VARHDRSZ); /* add colon and null terminate */ prefixbuf[VARSIZE(prefix_text)-VARHDRSZ] = ':'; prefixbuf[VARSIZE(prefix_text)-VARHDRSZ+1] = '\0'; prefix = prefixbuf; } } lwgeom = lwgeom_from_gserialized(geom); kml = lwgeom_to_kml2(lwgeom, precision, prefix); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 1); if( ! kml ) PG_RETURN_NULL(); result = cstring2text(kml); lwfree(kml); PG_RETURN_POINTER(result); } /** * Encode Feature in GeoJson */ PG_FUNCTION_INFO_V1(LWGEOM_asGeoJson); Datum LWGEOM_asGeoJson(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; char *geojson; text *result; int srid; int version; int option = 0; int has_bbox = 0; int precision = DBL_DIG; char * srs = NULL; /* Get the version */ version = PG_GETARG_INT32(0); if ( version != 1) { elog(ERROR, "Only GeoJSON 1 is supported"); PG_RETURN_NULL(); } /* Get the geometry */ if (PG_ARGISNULL(1) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } /* Retrieve output option * 0 = without option (default) * 1 = bbox * 2 = short crs * 4 = long crs */ if (PG_NARGS() >3 && !PG_ARGISNULL(3)) option = PG_GETARG_INT32(3); if (option & 2 || option & 4) { srid = gserialized_get_srid(geom); if ( srid != SRID_UNKNOWN ) { if (option & 2) srs = getSRSbySRID(srid, true); if (option & 4) srs = getSRSbySRID(srid, false); if (!srs) { elog( ERROR, "SRID %i unknown in spatial_ref_sys table", srid); PG_RETURN_NULL(); } } } if (option & 1) has_bbox = 1; lwgeom = lwgeom_from_gserialized(geom); geojson = lwgeom_to_geojson(lwgeom, srs, precision, has_bbox); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 1); if (srs) pfree(srs); result = cstring2text(geojson); lwfree(geojson); PG_RETURN_TEXT_P(result); } /** * SVG features */ PG_FUNCTION_INFO_V1(LWGEOM_asSVG); Datum LWGEOM_asSVG(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; char *svg; text *result; int relative = 0; int precision=DBL_DIG; if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* check for relative path notation */ if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) ) relative = PG_GETARG_INT32(1) ? 1:0; if ( PG_NARGS() > 2 && ! PG_ARGISNULL(2) ) { precision = PG_GETARG_INT32(2); /* TODO: leave this to liblwgeom ? */ if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } lwgeom = lwgeom_from_gserialized(geom); svg = lwgeom_to_svg(lwgeom, precision, relative); result = cstring2text(svg); lwgeom_free(lwgeom); pfree(svg); PG_FREE_IF_COPY(geom, 0); PG_RETURN_TEXT_P(result); } /** * Encode feature as X3D */ PG_FUNCTION_INFO_V1(LWGEOM_asX3D); Datum LWGEOM_asX3D(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; char *x3d; text *result; int version; char *srs; int srid; int option = 0; int precision = DBL_DIG; static const char* default_defid = "x3d:"; /* default defid */ char *defidbuf; const char* defid = default_defid; text *defid_text; /* Get the version */ version = PG_GETARG_INT32(0); if ( version != 3 ) { elog(ERROR, "Only X3D version 3 are supported"); PG_RETURN_NULL(); } /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); /* TODO: leave this to liblwgeom ? */ if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } /* retrieve option */ if (PG_NARGS() >3 && !PG_ARGISNULL(3)) option = PG_GETARG_INT32(3); /* retrieve defid */ if (PG_NARGS() >4 && !PG_ARGISNULL(4)) { defid_text = PG_GETARG_TEXT_P(4); if ( VARSIZE(defid_text)-VARHDRSZ == 0 ) { defid = ""; } else { /* +2 is one for the ':' and one for term null */ defidbuf = palloc(VARSIZE(defid_text)-VARHDRSZ+2); memcpy(defidbuf, VARDATA(defid_text), VARSIZE(defid_text)-VARHDRSZ); /* add colon and null terminate */ defidbuf[VARSIZE(defid_text)-VARHDRSZ] = ':'; defidbuf[VARSIZE(defid_text)-VARHDRSZ+1] = '\0'; defid = defidbuf; } } srid = gserialized_get_srid(geom); if (srid == SRID_UNKNOWN) srs = NULL; else if (option & 1) srs = getSRSbySRID(srid, false); else srs = getSRSbySRID(srid, true); lwgeom = lwgeom_from_gserialized(geom); x3d = lwgeom_to_x3d3(lwgeom, srs, precision,option, defid); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 1); result = cstring2text(x3d); lwfree(x3d); PG_RETURN_TEXT_P(result); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_in_geojson.c�������������������������������������������������0000644�0000000�0000000�00000003254�12113707054�021124� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * Copyright 2011 Kashif Rasul <kashif.rasul@gmail.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <assert.h> #include "postgres.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "lwgeom_export.h" Datum geom_from_geojson(PG_FUNCTION_ARGS); Datum postgis_libjson_version(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(postgis_libjson_version); Datum postgis_libjson_version(PG_FUNCTION_ARGS) { #ifndef HAVE_LIBJSON PG_RETURN_NULL(); #else /* HAVE_LIBJSON */ const char *ver = "UNKNOWN"; text *result = cstring2text(ver); PG_RETURN_POINTER(result); #endif } PG_FUNCTION_INFO_V1(geom_from_geojson); Datum geom_from_geojson(PG_FUNCTION_ARGS) { #ifndef HAVE_LIBJSON elog(ERROR, "You need JSON-C for ST_GeomFromGeoJSON"); PG_RETURN_NULL(); #else /* HAVE_LIBJSON */ GSERIALIZED *geom; LWGEOM *lwgeom; text *geojson_input; char *geojson; char *srs = NULL; /* Get the geojson stream */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); geojson_input = PG_GETARG_TEXT_P(0); geojson = text2cstring(geojson_input); lwgeom = lwgeom_from_geojson(geojson, &srs); if ( ! lwgeom ) { /* Shouldn't get here */ elog(ERROR, "lwgeom_from_geojson returned NULL"); PG_RETURN_NULL(); } if ( srs ) { lwgeom_set_srid(lwgeom, getSRIDbySRS(srs)); lwfree(srs); } geom = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_RETURN_POINTER(geom); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/legacy_minimal.sql.in�����������������������������������������������0000644�0000000�0000000�00000004731�12121646322�021354� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id: legacy_minimal.sql.in 11175 2013-03-18 17:20:18Z strk $ -- Bare minimum Legacy functions -- -- This file that contains what we have determined are -- the most common functions used by older apps -- You should be able to get by with just to support -- older versions of mapserver, geoserver, qgis, gdal, openjump etc. #include "sqldefines.h" -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsBinary(geometry) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_asBinary' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsBinary(geometry,text) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_asBinary' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsText(geometry) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asText' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Estimated_Extent(text,text,text) RETURNS box2d AS 'MODULE_PATHNAME', 'geometry_estimated_extent' LANGUAGE 'c' IMMUTABLE STRICT SECURITY DEFINER; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Estimated_Extent(text,text) RETURNS box2d AS 'MODULE_PATHNAME', 'geometry_estimated_extent' LANGUAGE 'c' IMMUTABLE STRICT SECURITY DEFINER; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromText(text, int4) RETURNS geometry AS 'SELECT ST_GeomFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromText(text) RETURNS geometry AS 'SELECT ST_GeomFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ndims(geometry) RETURNS smallint AS 'MODULE_PATHNAME', 'LWGEOM_ndims' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SetSRID(geometry,int4) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_set_srid' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SRID(geometry) RETURNS int4 AS 'MODULE_PATHNAME','LWGEOM_get_srid' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 -- hack to allow unknown to cast to geometry -- so does not yield function is not unique CREATE OR REPLACE FUNCTION ST_AsBinary(text) RETURNS bytea AS $$ SELECT ST_AsBinary($1::geometry);$$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.5.0 -- hack to allow unknown to cast to geometry -- so does not yield function is not unique CREATE OR REPLACE FUNCTION ST_AsText(bytea) RETURNS text AS $$ SELECT ST_AsText($1::geometry);$$ LANGUAGE 'sql' IMMUTABLE STRICT; ���������������������������������������postgis-2.1.2+dfsg.orig/postgis/Makefile.pgxs�������������������������������������������������������0000644�0000000�0000000�00000005701�11722777314�017706� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # PostGIS PGXS override file for PostgreSQL <= 8.5 # (updates relevant targets for MODULEDIR as per the # PostgreSQL 8.5 PGXS Makefile) # ifdef MODULEDIR datamoduledir = $(MODULEDIR) docmoduledir = $(MODULEDIR) else datamoduledir = contrib docmoduledir = contrib endif install: all installdirs ifneq (,$(DATA)$(DATA_built)) @for file in $(addprefix $(srcdir)/, $(DATA)) $(DATA_built); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'; \ done endif # DATA ifneq (,$(DATA_TSEARCH)) @for file in $(addprefix $(srcdir)/, $(DATA_TSEARCH)); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/tsearch_data'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/tsearch_data'; \ done endif # DATA_TSEARCH ifdef MODULES @for file in $(addsuffix $(DLSUFFIX), $(MODULES)); do \ echo "$(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'"; \ $(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'; \ done endif # MODULES ifdef DOCS ifdef docdir @for file in $(addprefix $(srcdir)/, $(DOCS)); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'; \ done endif # docdir endif # DOCS ifdef PROGRAM $(INSTALL_PROGRAM) $(PROGRAM)$(X) '$(DESTDIR)$(bindir)' endif # PROGRAM ifdef SCRIPTS @for file in $(addprefix $(srcdir)/, $(SCRIPTS)); do \ echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \ $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \ done endif # SCRIPTS ifdef SCRIPTS_built @for file in $(SCRIPTS_built); do \ echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \ $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \ done endif # SCRIPTS_built ifdef MODULE_big $(INSTALL_SHLIB) $(shlib) '$(DESTDIR)$(pkglibdir)/$(MODULE_big)$(DLSUFFIX)' endif # MODULE_big installdirs: ifneq (,$(DATA)$(DATA_built)) $(mkinstalldirs) '$(DESTDIR)$(datadir)/$(datamoduledir)' endif ifneq (,$(DATA_TSEARCH)) $(mkinstalldirs) '$(DESTDIR)$(datadir)/tsearch_data' endif ifneq (,$(MODULES)) $(mkinstalldirs) '$(DESTDIR)$(pkglibdir)' endif ifdef DOCS ifdef docdir $(mkinstalldirs) '$(DESTDIR)$(docdir)/$(docmoduledir)' endif # docdir endif # DOCS ifneq (,$(PROGRAM)$(SCRIPTS)$(SCRIPTS_built)) $(mkinstalldirs) '$(DESTDIR)$(bindir)' endif uninstall: ifneq (,$(DATA)$(DATA_built)) rm -f $(addprefix '$(DESTDIR)$(datadir)/$(datamoduledir)'/, $(notdir $(DATA) $(DATA_built))) endif ifneq (,$(DATA_TSEARCH)) rm -f $(addprefix '$(DESTDIR)$(datadir)/tsearch_data'/, $(notdir $(DATA_TSEARCH))) endif ifdef MODULES rm -f $(addprefix '$(DESTDIR)$(pkglibdir)'/, $(addsuffix $(DLSUFFIX), $(MODULES))) endif ifdef DOCS rm -f $(addprefix '$(DESTDIR)$(docdir)/$(docmoduledir)'/, $(DOCS)) endif ifdef PROGRAM rm -f '$(DESTDIR)$(bindir)/$(PROGRAM)$(X)' endif ifdef SCRIPTS rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS)) endif ifdef SCRIPTS_built rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS_built)) endif ���������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_box3d.c������������������������������������������������������0000644�0000000�0000000�00000024614�11724254504�020020� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * BOX3D IO and conversions * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "utils/elog.h" #include "utils/geo_decls.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #define SHOW_DIGS_DOUBLE 15 #define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 6 + 1 + 3 +1) /* forward defs */ Datum BOX3D_in(PG_FUNCTION_ARGS); Datum BOX3D_out(PG_FUNCTION_ARGS); Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS); Datum BOX3D_to_LWGEOM(PG_FUNCTION_ARGS); Datum BOX3D_expand(PG_FUNCTION_ARGS); Datum BOX3D_to_BOX2D(PG_FUNCTION_ARGS); Datum BOX3D_to_BOX(PG_FUNCTION_ARGS); Datum BOX3D_xmin(PG_FUNCTION_ARGS); Datum BOX3D_ymin(PG_FUNCTION_ARGS); Datum BOX3D_zmin(PG_FUNCTION_ARGS); Datum BOX3D_xmax(PG_FUNCTION_ARGS); Datum BOX3D_ymax(PG_FUNCTION_ARGS); Datum BOX3D_zmax(PG_FUNCTION_ARGS); Datum BOX3D_combine(PG_FUNCTION_ARGS); /** * BOX3D_in - takes a string rep of BOX3D and returns internal rep * * example: * "BOX3D(x1 y1 z1,x2 y2 z2)" * or "BOX3D(x1 y1,x2 y2)" z1 and z2 = 0.0 * * */ PG_FUNCTION_INFO_V1(BOX3D_in); Datum BOX3D_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); int nitems; BOX3D *box = (BOX3D *) palloc(sizeof(BOX3D)); box->zmin = 0; box->zmax = 0; /*printf( "box3d_in gets '%s'\n",str); */ if (strstr(str,"BOX3D(") != str ) { pfree(box); elog(ERROR,"BOX3D parser - doesnt start with BOX3D("); PG_RETURN_NULL(); } nitems = sscanf(str,"BOX3D(%le %le %le ,%le %le %le)", &box->xmin, &box->ymin, &box->zmin, &box->xmax, &box->ymax, &box->zmax); if (nitems != 6 ) { nitems = sscanf(str,"BOX3D(%le %le ,%le %le)", &box->xmin, &box->ymin, &box->xmax, &box->ymax); if (nitems != 4) { pfree(box); elog(ERROR,"BOX3D parser - couldnt parse. It should look like: BOX3D(xmin ymin zmin,xmax ymax zmax) or BOX3D(xmin ymin,xmax ymax)"); PG_RETURN_NULL(); } } if (box->xmin > box->xmax) { float tmp = box->xmin; box->xmin = box->xmax; box->xmax = tmp; } if (box->ymin > box->ymax) { float tmp = box->ymin; box->ymin = box->ymax; box->ymax = tmp; } if (box->zmin > box->zmax) { float tmp = box->zmin; box->zmin = box->zmax; box->zmax = tmp; } box->srid = SRID_UNKNOWN; PG_RETURN_POINTER(box); } /** * Takes an internal rep of a BOX3D and returns a string rep. * * example: * "BOX3D(xmin ymin zmin, xmin ymin zmin)" */ PG_FUNCTION_INFO_V1(BOX3D_out); Datum BOX3D_out(PG_FUNCTION_ARGS) { BOX3D *bbox = (BOX3D *) PG_GETARG_POINTER(0); int size; char *result; if (bbox == NULL) { result = palloc(5); strcat(result,"NULL"); PG_RETURN_CSTRING(result); } /*double digits+ "BOX3D"+ "()" + commas +null */ size = MAX_DIGS_DOUBLE*6+5+2+4+5+1; result = (char *) palloc(size); sprintf(result, "BOX3D(%.15g %.15g %.15g,%.15g %.15g %.15g)", bbox->xmin, bbox->ymin, bbox->zmin, bbox->xmax,bbox->ymax,bbox->zmax); PG_RETURN_CSTRING(result); } PG_FUNCTION_INFO_V1(BOX3D_to_BOX2D); Datum BOX3D_to_BOX2D(PG_FUNCTION_ARGS) { BOX3D *in = (BOX3D *)PG_GETARG_POINTER(0); GBOX *out = box3d_to_gbox(in); PG_RETURN_POINTER(out); } static void box3d_to_box_p(BOX3D *box, BOX *out) { #if PARANOIA_LEVEL > 0 if (box == NULL) return; #endif out->low.x = box->xmin; out->low.y = box->ymin; out->high.x = box->xmax; out->high.y = box->ymax; } PG_FUNCTION_INFO_V1(BOX3D_to_BOX); Datum BOX3D_to_BOX(PG_FUNCTION_ARGS) { BOX3D *in = (BOX3D *)PG_GETARG_POINTER(0); BOX *box = palloc(sizeof(BOX)); box3d_to_box_p(in, box); PG_RETURN_POINTER(box); } PG_FUNCTION_INFO_V1(BOX3D_to_LWGEOM); Datum BOX3D_to_LWGEOM(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); POINTARRAY *pa; GSERIALIZED *result; POINT4D pt; /** * Alter BOX3D cast so that a valid geometry is always * returned depending upon the size of the BOX3D. The * code makes the following assumptions: * - If the BOX3D is a single point then return a * POINT geometry * - If the BOX3D represents either a horizontal or * vertical line, return a LINESTRING geometry * - Otherwise return a POLYGON */ pa = ptarray_construct_empty(0, 0, 5); if ( (box->xmin == box->xmax) && (box->ymin == box->ymax) ) { LWPOINT *lwpt = lwpoint_construct(SRID_UNKNOWN, NULL, pa); pt.x = box->xmin; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); result = geometry_serialize(lwpoint_as_lwgeom(lwpt)); } else if (box->xmin == box->xmax || box->ymin == box->ymax) { LWLINE *lwline = lwline_construct(SRID_UNKNOWN, NULL, pa); pt.x = box->xmin; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmax; pt.y = box->ymax; ptarray_append_point(pa, &pt, LW_TRUE); result = geometry_serialize(lwline_as_lwgeom(lwline)); } else { LWPOLY *lwpoly = lwpoly_construct(SRID_UNKNOWN, NULL, 1, &pa); pt.x = box->xmin; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmin; pt.y = box->ymax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmax; pt.y = box->ymax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmax; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmin; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); result = geometry_serialize(lwpoly_as_lwgeom(lwpoly)); } gserialized_set_srid(result, box->srid); PG_RETURN_POINTER(result); } /** Expand given box of 'd' units in all directions */ void expand_box3d(BOX3D *box, double d) { box->xmin -= d; box->ymin -= d; box->zmin -= d; box->xmax += d; box->ymax += d; box->zmax += d; } PG_FUNCTION_INFO_V1(BOX3D_expand); Datum BOX3D_expand(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); double d = PG_GETARG_FLOAT8(1); BOX3D *result = (BOX3D *)palloc(sizeof(BOX3D)); memcpy(result, box, sizeof(BOX3D)); expand_box3d(result, d); PG_RETURN_POINTER(result); } /** * convert a GSERIALIZED to BOX3D * * NOTE: the bounding box is *always* recomputed as the cache * is a box2d, not a box3d... * */ PG_FUNCTION_INFO_V1(LWGEOM_to_BOX3D); Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); GBOX gbox; BOX3D *result; int rv = lwgeom_calculate_gbox(lwgeom, &gbox); if ( rv == LW_FAILURE ) PG_RETURN_NULL(); result = box3d_from_gbox(&gbox); result->srid = lwgeom->srid; lwgeom_free(lwgeom); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(BOX3D_xmin); Datum BOX3D_xmin(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); PG_RETURN_FLOAT8(Min(box->xmin, box->xmax)); } PG_FUNCTION_INFO_V1(BOX3D_ymin); Datum BOX3D_ymin(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); PG_RETURN_FLOAT8(Min(box->ymin, box->ymax)); } PG_FUNCTION_INFO_V1(BOX3D_zmin); Datum BOX3D_zmin(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); PG_RETURN_FLOAT8(Min(box->zmin, box->zmax)); } PG_FUNCTION_INFO_V1(BOX3D_xmax); Datum BOX3D_xmax(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); PG_RETURN_FLOAT8(Max(box->xmin, box->xmax)); } PG_FUNCTION_INFO_V1(BOX3D_ymax); Datum BOX3D_ymax(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); PG_RETURN_FLOAT8(Max(box->ymin, box->ymax)); } PG_FUNCTION_INFO_V1(BOX3D_zmax); Datum BOX3D_zmax(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D *)PG_GETARG_POINTER(0); PG_RETURN_FLOAT8(Max(box->zmin, box->zmax)); } /** * Used in the ST_Extent and ST_Extent3D aggregates, does not read the * serialized cached bounding box (since that is floating point) * but calculates the box in full from the underlying geometry. */ PG_FUNCTION_INFO_V1(BOX3D_combine); Datum BOX3D_combine(PG_FUNCTION_ARGS) { BOX3D *box = (BOX3D*)PG_GETARG_POINTER(0); GSERIALIZED *geom = PG_ARGISNULL(1) ? NULL : (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_POINTER(1)); LWGEOM *lwgeom = NULL; BOX3D *result = NULL; GBOX gbox; int32_t srid; int rv; /* Can't do anything with null inputs */ if ( (box == NULL) && (geom == NULL) ) PG_RETURN_NULL(); /* Null geometry but non-null box, return the box */ if (geom == NULL) { result = palloc(sizeof(BOX3D)); memcpy(result, box, sizeof(BOX3D)); PG_RETURN_POINTER(result); } /* Deserialize geometry and *calculate* the box */ /* We can't use the cached box because it's float, we *must* calculate */ lwgeom = lwgeom_from_gserialized(geom); srid = lwgeom->srid; rv = lwgeom_calculate_gbox(lwgeom, &gbox); lwgeom_free(lwgeom); /* If we couldn't calculate the box, return what we know */ if ( rv == LW_FAILURE ) { PG_FREE_IF_COPY(geom, 1); /* No geom box, no input box, so null return */ if ( box == NULL ) PG_RETURN_NULL(); result = palloc(sizeof(BOX3D)); memcpy(result, box, sizeof(BOX3D)); PG_RETURN_POINTER(result); } /* Null box and non-null geometry, just return the geometry box */ if ( box == NULL ) { PG_FREE_IF_COPY(geom, 1); result = box3d_from_gbox(&gbox); result->srid = srid; PG_RETURN_POINTER(result); } result = palloc(sizeof(BOX3D)); result->xmax = Max(box->xmax, gbox.xmax); result->ymax = Max(box->ymax, gbox.ymax); result->zmax = Max(box->zmax, gbox.zmax); result->xmin = Min(box->xmin, gbox.xmin); result->ymin = Min(box->ymin, gbox.ymin); result->zmin = Min(box->zmin, gbox.zmin); result->srid = srid; PG_FREE_IF_COPY(geom, 1); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(BOX3D_construct); Datum BOX3D_construct(PG_FUNCTION_ARGS) { GSERIALIZED *min = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *max = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); BOX3D *result = palloc(sizeof(BOX3D)); LWGEOM *minpoint, *maxpoint; POINT3DZ minp, maxp; minpoint = lwgeom_from_gserialized(min); maxpoint = lwgeom_from_gserialized(max); if ( minpoint->type != POINTTYPE || maxpoint->type != POINTTYPE ) { elog(ERROR, "BOX3D_construct: args must be points"); PG_RETURN_NULL(); } error_if_srid_mismatch(minpoint->srid, maxpoint->srid); getPoint3dz_p(((LWPOINT *)minpoint)->point, 0, &minp); getPoint3dz_p(((LWPOINT *)maxpoint)->point, 0, &maxp); result->xmax = maxp.x; result->ymax = maxp.y; result->zmax = maxp.z; result->xmin = minp.x; result->ymin = minp.y; result->zmin = minp.z; result->srid = minpoint->srid; PG_RETURN_POINTER(result); } ��������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_functions_analytic.c�����������������������������������������0000644�0000000�0000000�00000102543�12143117434�022667� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" #include "lwgeom_pg.h" #include "math.h" #include "lwgeom_rtree.h" #include "lwgeom_functions_analytic.h" /*********************************************************************** * Simple Douglas-Peucker line simplification. * No checks are done to avoid introduction of self-intersections. * No topology relations are considered. * * --strk@keybit.net; ***********************************************************************/ /* Prototypes */ Datum LWGEOM_simplify2d(PG_FUNCTION_ARGS); Datum ST_LineCrossingDirection(PG_FUNCTION_ARGS); double determineSide(POINT2D *seg1, POINT2D *seg2, POINT2D *point); int isOnSegment(POINT2D *seg1, POINT2D *seg2, POINT2D *point); int point_in_ring(POINTARRAY *pts, POINT2D *point); int point_in_ring_rtree(RTREE_NODE *root, POINT2D *point); PG_FUNCTION_INFO_V1(LWGEOM_simplify2d); Datum LWGEOM_simplify2d(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; LWGEOM *in = lwgeom_from_gserialized(geom); LWGEOM *out; double dist = PG_GETARG_FLOAT8(1); out = lwgeom_simplify(in, dist); if ( ! out ) PG_RETURN_NULL(); /* COMPUTE_BBOX TAINTING */ if ( in->bbox ) lwgeom_add_bbox(out); result = geometry_serialize(out); lwgeom_free(out); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /*********************************************************************** * --strk@keybit.net; ***********************************************************************/ /*********************************************************************** * Interpolate a point along a line, useful for Geocoding applications * SELECT line_interpolate_point( 'LINESTRING( 0 0, 2 2'::geometry, .5 ) * returns POINT( 1 1 ). * Works in 2d space only. * * Initially written by: jsunday@rochgrp.com * Ported to LWGEOM by: strk@refractions.net ***********************************************************************/ Datum LWGEOM_line_interpolate_point(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_line_interpolate_point); Datum LWGEOM_line_interpolate_point(PG_FUNCTION_ARGS) { GSERIALIZED *gser = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; double distance = PG_GETARG_FLOAT8(1); LWLINE *line; LWGEOM *geom; LWPOINT *point; POINTARRAY *ipa, *opa; POINT4D pt; int nsegs, i; double length, slength, tlength; if ( distance < 0 || distance > 1 ) { elog(ERROR,"line_interpolate_point: 2nd arg isnt within [0,1]"); PG_RETURN_NULL(); } if ( gserialized_get_type(gser) != LINETYPE ) { elog(ERROR,"line_interpolate_point: 1st arg isnt a line"); PG_RETURN_NULL(); } /* Empty.InterpolatePoint == Point Empty */ if ( gserialized_is_empty(gser) ) { point = lwpoint_construct_empty(gserialized_get_srid(gser), gserialized_has_z(gser), gserialized_has_m(gser)); result = geometry_serialize(lwpoint_as_lwgeom(point)); lwpoint_free(point); PG_RETURN_POINTER(result); } geom = lwgeom_from_gserialized(gser); line = lwgeom_as_lwline(geom); ipa = line->points; /* If distance is one of the two extremes, return the point on that * end rather than doing any expensive computations */ if ( distance == 0.0 || distance == 1.0 ) { if ( distance == 0.0 ) getPoint4d_p(ipa, 0, &pt); else getPoint4d_p(ipa, ipa->npoints-1, &pt); opa = ptarray_construct(lwgeom_has_z(geom), lwgeom_has_m(geom), 1); ptarray_set_point4d(opa, 0, &pt); point = lwpoint_construct(line->srid, NULL, opa); PG_RETURN_POINTER(geometry_serialize(lwpoint_as_lwgeom(point))); } /* Interpolate a point on the line */ nsegs = ipa->npoints - 1; length = ptarray_length_2d(ipa); tlength = 0; for ( i = 0; i < nsegs; i++ ) { POINT4D p1, p2; POINT4D *p1ptr=&p1, *p2ptr=&p2; /* don't break * strict-aliasing rules */ getPoint4d_p(ipa, i, &p1); getPoint4d_p(ipa, i+1, &p2); /* Find the relative length of this segment */ slength = distance2d_pt_pt((POINT2D*)p1ptr, (POINT2D*)p2ptr)/length; /* If our target distance is before the total length we've seen * so far. create a new point some distance down the current * segment. */ if ( distance < tlength + slength ) { double dseg = (distance - tlength) / slength; interpolate_point4d(&p1, &p2, &pt, dseg); opa = ptarray_construct(lwgeom_has_z(geom), lwgeom_has_m(geom), 1); ptarray_set_point4d(opa, 0, &pt); point = lwpoint_construct(line->srid, NULL, opa); PG_RETURN_POINTER(geometry_serialize(lwpoint_as_lwgeom(point))); } tlength += slength; } /* Return the last point on the line. This shouldn't happen, but * could if there's some floating point rounding errors. */ getPoint4d_p(ipa, ipa->npoints-1, &pt); opa = ptarray_construct(lwgeom_has_z(geom), lwgeom_has_m(geom), 1); ptarray_set_point4d(opa, 0, &pt); point = lwpoint_construct(line->srid, NULL, opa); PG_FREE_IF_COPY(gser, 0); PG_RETURN_POINTER(geometry_serialize(lwpoint_as_lwgeom(point))); } /*********************************************************************** * --jsunday@rochgrp.com; ***********************************************************************/ /*********************************************************************** * * Grid application function for postgis. * * WHAT IS * ------- * * This is a grid application function for postgis. * You use it to stick all of a geometry points to * a custom grid defined by its origin and cell size * in geometry units. * * Points reduction is obtained by collapsing all * consecutive points falling on the same grid node and * removing all consecutive segments S1,S2 having * S2.startpoint = S1.endpoint and S2.endpoint = S1.startpoint. * * ISSUES * ------ * * Only 2D is contemplated in grid application. * * Consecutive coincident segments removal does not work * on first/last segments (They are not considered consecutive). * * Grid application occurs on a geometry subobject basis, thus no * points reduction occurs for multipoint geometries. * * USAGE TIPS * ---------- * * Run like this: * * SELECT SnapToGrid(<geometry>, <originX>, <originY>, <sizeX>, <sizeY>); * * Grid cells are not visible on a screen as long as the screen * point size is equal or bigger then the grid cell size. * This assumption may be used to reduce the number of points in * a map for a given display scale. * * Keeping multiple resolution versions of the same data may be used * in conjunction with MINSCALE/MAXSCALE keywords of mapserv to speed * up rendering. * * Check also the use of DP simplification to reduce grid visibility. * I'm still researching about the relationship between grid size and * DP epsilon values - please tell me if you know more about this. * * * --strk@keybit.net; * ***********************************************************************/ #define CHECK_RING_IS_CLOSE #define SAMEPOINT(a,b) ((a)->x==(b)->x&&(a)->y==(b)->y) typedef struct gridspec_t { double ipx; double ipy; double ipz; double ipm; double xsize; double ysize; double zsize; double msize; } gridspec; /* Forward declarations */ LWGEOM *lwgeom_grid(LWGEOM *lwgeom, gridspec *grid); LWCOLLECTION *lwcollection_grid(LWCOLLECTION *coll, gridspec *grid); LWPOINT * lwpoint_grid(LWPOINT *point, gridspec *grid); LWPOLY * lwpoly_grid(LWPOLY *poly, gridspec *grid); LWLINE *lwline_grid(LWLINE *line, gridspec *grid); LWCIRCSTRING *lwcirc_grid(LWCIRCSTRING *line, gridspec *grid); POINTARRAY *ptarray_grid(POINTARRAY *pa, gridspec *grid); Datum LWGEOM_snaptogrid(PG_FUNCTION_ARGS); Datum LWGEOM_snaptogrid_pointoff(PG_FUNCTION_ARGS); static int grid_isNull(const gridspec *grid); #if POSTGIS_DEBUG_LEVEL >=4 static void grid_print(const gridspec *grid); #endif /* A NULL grid is a grid in which size in all dimensions is 0 */ static int grid_isNull(const gridspec *grid) { if ( grid->xsize==0 && grid->ysize==0 && grid->zsize==0 && grid->msize==0 ) return 1; else return 0; } #if POSTGIS_DEBUG_LEVEL >= 4 /* Print grid using given reporter */ static void grid_print(const gridspec *grid) { lwnotice("GRID(%g %g %g %g, %g %g %g %g)", grid->ipx, grid->ipy, grid->ipz, grid->ipm, grid->xsize, grid->ysize, grid->zsize, grid->msize); } #endif /* * Stick an array of points to the given gridspec. * Return "gridded" points in *outpts and their number in *outptsn. * * Two consecutive points falling on the same grid cell are collapsed * into one single point. * */ POINTARRAY * ptarray_grid(POINTARRAY *pa, gridspec *grid) { POINT4D pbuf; int ipn; /* input point numbers */ POINTARRAY *dpa; POSTGIS_DEBUGF(2, "ptarray_grid called on %p", pa); dpa = ptarray_construct_empty(FLAGS_GET_Z(pa->flags),FLAGS_GET_M(pa->flags), pa->npoints); for (ipn=0; ipn<pa->npoints; ++ipn) { getPoint4d_p(pa, ipn, &pbuf); if ( grid->xsize ) pbuf.x = rint((pbuf.x - grid->ipx)/grid->xsize) * grid->xsize + grid->ipx; if ( grid->ysize ) pbuf.y = rint((pbuf.y - grid->ipy)/grid->ysize) * grid->ysize + grid->ipy; if ( FLAGS_GET_Z(pa->flags) && grid->zsize ) pbuf.z = rint((pbuf.z - grid->ipz)/grid->zsize) * grid->zsize + grid->ipz; if ( FLAGS_GET_M(pa->flags) && grid->msize ) pbuf.m = rint((pbuf.m - grid->ipm)/grid->msize) * grid->msize + grid->ipm; ptarray_append_point(dpa, &pbuf, LW_FALSE); } return dpa; } LWLINE * lwline_grid(LWLINE *line, gridspec *grid) { LWLINE *oline; POINTARRAY *opa; opa = ptarray_grid(line->points, grid); /* Skip line3d with less then 2 points */ if ( opa->npoints < 2 ) return NULL; /* TODO: grid bounding box... */ oline = lwline_construct(line->srid, NULL, opa); return oline; } LWCIRCSTRING * lwcirc_grid(LWCIRCSTRING *line, gridspec *grid) { LWCIRCSTRING *oline; POINTARRAY *opa; opa = ptarray_grid(line->points, grid); /* Skip line3d with less then 2 points */ if ( opa->npoints < 2 ) return NULL; /* TODO: grid bounding box... */ oline = lwcircstring_construct(line->srid, NULL, opa); return oline; } LWPOLY * lwpoly_grid(LWPOLY *poly, gridspec *grid) { LWPOLY *opoly; int ri; POINTARRAY **newrings = NULL; int nrings = 0; #if 0 /* * TODO: control this assertion * it is assumed that, since the grid size will be a pixel, * a visible ring should show at least a white pixel inside, * thus, for a square, that would be grid_xsize*grid_ysize */ double minvisiblearea = grid->xsize * grid->ysize; #endif nrings = 0; POSTGIS_DEBUGF(3, "grid_polygon3d: applying grid to polygon with %d rings", poly->nrings); for (ri=0; ri<poly->nrings; ri++) { POINTARRAY *ring = poly->rings[ri]; POINTARRAY *newring; #if POSTGIS_DEBUG_LEVEL >= 4 POINT2D p1, p2; getPoint2d_p(ring, 0, &p1); getPoint2d_p(ring, ring->npoints-1, &p2); if ( ! SAMEPOINT(&p1, &p2) ) POSTGIS_DEBUG(4, "Before gridding: first point != last point"); #endif newring = ptarray_grid(ring, grid); /* Skip ring if not composed by at least 4 pts (3 segments) */ if ( newring->npoints < 4 ) { pfree(newring); POSTGIS_DEBUGF(3, "grid_polygon3d: ring%d skipped ( <4 pts )", ri); if ( ri ) continue; else break; /* this is the external ring, no need to work on holes */ } #if POSTGIS_DEBUG_LEVEL >= 4 getPoint2d_p(newring, 0, &p1); getPoint2d_p(newring, newring->npoints-1, &p2); if ( ! SAMEPOINT(&p1, &p2) ) POSTGIS_DEBUG(4, "After gridding: first point != last point"); #endif POSTGIS_DEBUGF(3, "grid_polygon3d: ring%d simplified from %d to %d points", ri, ring->npoints, newring->npoints); /* * Add ring to simplified ring array * (TODO: dinamic allocation of pts_per_ring) */ if ( ! nrings ) { newrings = palloc(sizeof(POINTARRAY *)); } else { newrings = repalloc(newrings, sizeof(POINTARRAY *)*(nrings+1)); } if ( ! newrings ) { elog(ERROR, "Out of virtual memory"); return NULL; } newrings[nrings++] = newring; } POSTGIS_DEBUGF(3, "grid_polygon3d: simplified polygon with %d rings", nrings); if ( ! nrings ) return NULL; opoly = lwpoly_construct(poly->srid, NULL, nrings, newrings); return opoly; } LWPOINT * lwpoint_grid(LWPOINT *point, gridspec *grid) { LWPOINT *opoint; POINTARRAY *opa; opa = ptarray_grid(point->point, grid); /* TODO: grid bounding box ? */ opoint = lwpoint_construct(point->srid, NULL, opa); POSTGIS_DEBUG(2, "lwpoint_grid called"); return opoint; } LWCOLLECTION * lwcollection_grid(LWCOLLECTION *coll, gridspec *grid) { uint32 i; LWGEOM **geoms; uint32 ngeoms=0; geoms = palloc(coll->ngeoms * sizeof(LWGEOM *)); for (i=0; i<coll->ngeoms; i++) { LWGEOM *g = lwgeom_grid(coll->geoms[i], grid); if ( g ) geoms[ngeoms++] = g; } if ( ! ngeoms ) return lwcollection_construct_empty(coll->type, coll->srid, 0, 0); return lwcollection_construct(coll->type, coll->srid, NULL, ngeoms, geoms); } LWGEOM * lwgeom_grid(LWGEOM *lwgeom, gridspec *grid) { switch (lwgeom->type) { case POINTTYPE: return (LWGEOM *)lwpoint_grid((LWPOINT *)lwgeom, grid); case LINETYPE: return (LWGEOM *)lwline_grid((LWLINE *)lwgeom, grid); case POLYGONTYPE: return (LWGEOM *)lwpoly_grid((LWPOLY *)lwgeom, grid); case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: case COMPOUNDTYPE: return (LWGEOM *)lwcollection_grid((LWCOLLECTION *)lwgeom, grid); case CIRCSTRINGTYPE: return (LWGEOM *)lwcirc_grid((LWCIRCSTRING *)lwgeom, grid); default: elog(ERROR, "lwgeom_grid: Unsupported geometry type: %s", lwtype_name(lwgeom->type)); return NULL; } } PG_FUNCTION_INFO_V1(LWGEOM_snaptogrid); Datum LWGEOM_snaptogrid(PG_FUNCTION_ARGS) { Datum datum; GSERIALIZED *in_geom; LWGEOM *in_lwgeom; GSERIALIZED *out_geom = NULL; LWGEOM *out_lwgeom; gridspec grid; /* BOX3D box3d; */ if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); datum = PG_GETARG_DATUM(0); in_geom = (GSERIALIZED *)PG_DETOAST_DATUM(datum); if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); grid.ipx = PG_GETARG_FLOAT8(1); if ( PG_ARGISNULL(2) ) PG_RETURN_NULL(); grid.ipy = PG_GETARG_FLOAT8(2); if ( PG_ARGISNULL(3) ) PG_RETURN_NULL(); grid.xsize = PG_GETARG_FLOAT8(3); if ( PG_ARGISNULL(4) ) PG_RETURN_NULL(); grid.ysize = PG_GETARG_FLOAT8(4); /* Do not support gridding Z and M values for now */ grid.ipz=grid.ipm=grid.zsize=grid.msize=0; /* Return input geometry if grid is null or input geometry is empty */ if ( grid_isNull(&grid) || gserialized_is_empty(in_geom) ) { PG_RETURN_POINTER(in_geom); } in_lwgeom = lwgeom_from_gserialized(in_geom); POSTGIS_DEBUGF(3, "SnapToGrid got a %s", lwtype_name(in_lwgeom->type)); out_lwgeom = lwgeom_grid(in_lwgeom, &grid); if ( out_lwgeom == NULL ) PG_RETURN_NULL(); /* COMPUTE_BBOX TAINTING */ if ( in_lwgeom->bbox ) lwgeom_add_bbox(out_lwgeom); POSTGIS_DEBUGF(3, "SnapToGrid made a %s", lwtype_name(out_lwgeom->type)); out_geom = geometry_serialize(out_lwgeom); PG_RETURN_POINTER(out_geom); } PG_FUNCTION_INFO_V1(LWGEOM_snaptogrid_pointoff); Datum LWGEOM_snaptogrid_pointoff(PG_FUNCTION_ARGS) { Datum datum; GSERIALIZED *in_geom, *in_point; LWGEOM *in_lwgeom; LWPOINT *in_lwpoint; GSERIALIZED *out_geom = NULL; LWGEOM *out_lwgeom; gridspec grid; /* BOX3D box3d; */ POINT4D offsetpoint; if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); datum = PG_GETARG_DATUM(0); in_geom = (GSERIALIZED *)PG_DETOAST_DATUM(datum); if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); datum = PG_GETARG_DATUM(1); in_point = (GSERIALIZED *)PG_DETOAST_DATUM(datum); in_lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(in_point)); if ( in_lwpoint == NULL ) { lwerror("Offset geometry must be a point"); } if ( PG_ARGISNULL(2) ) PG_RETURN_NULL(); grid.xsize = PG_GETARG_FLOAT8(2); if ( PG_ARGISNULL(3) ) PG_RETURN_NULL(); grid.ysize = PG_GETARG_FLOAT8(3); if ( PG_ARGISNULL(4) ) PG_RETURN_NULL(); grid.zsize = PG_GETARG_FLOAT8(4); if ( PG_ARGISNULL(5) ) PG_RETURN_NULL(); grid.msize = PG_GETARG_FLOAT8(5); /* Take offsets from point geometry */ getPoint4d_p(in_lwpoint->point, 0, &offsetpoint); grid.ipx = offsetpoint.x; grid.ipy = offsetpoint.y; if (FLAGS_GET_Z(in_lwpoint->flags) ) grid.ipz = offsetpoint.z; else grid.ipz=0; if (FLAGS_GET_M(in_lwpoint->flags) ) grid.ipm = offsetpoint.m; else grid.ipm=0; #if POSTGIS_DEBUG_LEVEL >= 4 grid_print(&grid); #endif /* Return input geometry if grid is null */ if ( grid_isNull(&grid) ) { PG_RETURN_POINTER(in_geom); } in_lwgeom = lwgeom_from_gserialized(in_geom); POSTGIS_DEBUGF(3, "SnapToGrid got a %s", lwtype_name(in_lwgeom->type)); out_lwgeom = lwgeom_grid(in_lwgeom, &grid); if ( out_lwgeom == NULL ) PG_RETURN_NULL(); /* COMPUTE_BBOX TAINTING */ if ( in_lwgeom->bbox ) lwgeom_add_bbox(out_lwgeom); POSTGIS_DEBUGF(3, "SnapToGrid made a %s", lwtype_name(out_lwgeom->type)); out_geom = geometry_serialize(out_lwgeom); PG_RETURN_POINTER(out_geom); } /* ** crossingDirection(line1, line2) ** ** Determines crossing direction of line2 relative to line1. ** Only accepts LINESTRING as parameters! */ PG_FUNCTION_INFO_V1(ST_LineCrossingDirection); Datum ST_LineCrossingDirection(PG_FUNCTION_ARGS) { int type1, type2, rv; LWLINE *l1 = NULL; LWLINE *l2 = NULL; GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); type1 = gserialized_get_type(geom1); type2 = gserialized_get_type(geom2); if ( type1 != LINETYPE || type2 != LINETYPE ) { elog(ERROR,"This function only accepts LINESTRING as arguments."); PG_RETURN_NULL(); } l1 = lwgeom_as_lwline(lwgeom_from_gserialized(geom1)); l2 = lwgeom_as_lwline(lwgeom_from_gserialized(geom2)); rv = lwline_crossing_direction(l1, l2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_INT32(rv); } /*********************************************************************** * --strk@keybit.net ***********************************************************************/ Datum LWGEOM_line_substring(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_line_substring); Datum LWGEOM_line_substring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); double from = PG_GETARG_FLOAT8(1); double to = PG_GETARG_FLOAT8(2); LWGEOM *olwgeom; POINTARRAY *ipa, *opa; GSERIALIZED *ret; int type = gserialized_get_type(geom); if ( from < 0 || from > 1 ) { elog(ERROR,"line_interpolate_point: 2nd arg isnt within [0,1]"); PG_RETURN_NULL(); } if ( to < 0 || to > 1 ) { elog(ERROR,"line_interpolate_point: 3rd arg isnt within [0,1]"); PG_RETURN_NULL(); } if ( from > to ) { elog(ERROR, "2nd arg must be smaller then 3rd arg"); PG_RETURN_NULL(); } if ( type == LINETYPE ) { LWLINE *iline = lwgeom_as_lwline(lwgeom_from_gserialized(geom)); if ( lwgeom_is_empty((LWGEOM*)iline) ) { /* TODO return empty line */ lwline_release(iline); PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } ipa = iline->points; opa = ptarray_substring(ipa, from, to, 0); if ( opa->npoints == 1 ) /* Point returned */ olwgeom = (LWGEOM *)lwpoint_construct(iline->srid, NULL, opa); else olwgeom = (LWGEOM *)lwline_construct(iline->srid, NULL, opa); } else if ( type == MULTILINETYPE ) { LWMLINE *iline; int i = 0, g = 0; int homogeneous = LW_TRUE; LWGEOM **geoms = NULL; double length = 0.0, sublength = 0.0, minprop = 0.0, maxprop = 0.0; iline = lwgeom_as_lwmline(lwgeom_from_gserialized(geom)); if ( lwgeom_is_empty((LWGEOM*)iline) ) { /* TODO return empty collection */ lwmline_release(iline); PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } /* Calculate the total length of the mline */ for ( i = 0; i < iline->ngeoms; i++ ) { LWLINE *subline = (LWLINE*)iline->geoms[i]; if ( subline->points && subline->points->npoints > 1 ) length += ptarray_length_2d(subline->points); } geoms = lwalloc(sizeof(LWGEOM*) * iline->ngeoms); /* Slice each sub-geometry of the multiline */ for ( i = 0; i < iline->ngeoms; i++ ) { LWLINE *subline = (LWLINE*)iline->geoms[i]; double subfrom = 0.0, subto = 0.0; if ( subline->points && subline->points->npoints > 1 ) sublength += ptarray_length_2d(subline->points); /* Calculate proportions for this subline */ minprop = maxprop; maxprop = sublength / length; /* This subline doesn't reach the lowest proportion requested or is beyond the highest proporton */ if ( from > maxprop || to < minprop ) continue; if ( from <= minprop ) subfrom = 0.0; if ( to >= maxprop ) subto = 1.0; if ( from > minprop && from <= maxprop ) subfrom = (from - minprop) / (maxprop - minprop); if ( to < maxprop && to >= minprop ) subto = (to - minprop) / (maxprop - minprop); opa = ptarray_substring(subline->points, subfrom, subto, 0); if ( opa && opa->npoints > 0 ) { if ( opa->npoints == 1 ) /* Point returned */ { geoms[g] = (LWGEOM *)lwpoint_construct(SRID_UNKNOWN, NULL, opa); homogeneous = LW_FALSE; } else { geoms[g] = (LWGEOM *)lwline_construct(SRID_UNKNOWN, NULL, opa); } g++; } } /* If we got any points, we need to return a GEOMETRYCOLLECTION */ if ( ! homogeneous ) type = COLLECTIONTYPE; olwgeom = (LWGEOM*)lwcollection_construct(type, iline->srid, NULL, g, geoms); } else { elog(ERROR,"line_substring: 1st arg isnt a line"); PG_RETURN_NULL(); } ret = geometry_serialize(olwgeom); lwgeom_free(olwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(ret); } /******************************************************************************* * The following is based on the "Fast Winding Number Inclusion of a Point * in a Polygon" algorithm by Dan Sunday. * http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm#Winding%20Number ******************************************************************************/ /* * returns: >0 for a point to the left of the segment, * <0 for a point to the right of the segment, * 0 for a point on the segment */ double determineSide(POINT2D *seg1, POINT2D *seg2, POINT2D *point) { return ((seg2->x-seg1->x)*(point->y-seg1->y)-(point->x-seg1->x)*(seg2->y-seg1->y)); } /* * This function doesn't test that the point falls on the line defined by * the two points. It assumes that that has already been determined * by having determineSide return within the tolerance. It simply checks * that if the point is on the line, it is within the endpoints. * * returns: 1 if the point is not outside the bounds of the segment * 0 if it is */ int isOnSegment(POINT2D *seg1, POINT2D *seg2, POINT2D *point) { double maxX; double maxY; double minX; double minY; if (seg1->x > seg2->x) { maxX = seg1->x; minX = seg2->x; } else { maxX = seg2->x; minX = seg1->x; } if (seg1->y > seg2->y) { maxY = seg1->y; minY = seg2->y; } else { maxY = seg2->y; minY = seg1->y; } POSTGIS_DEBUGF(3, "maxX minX/maxY minY: %.8f %.8f/%.8f %.8f", maxX, minX, maxY, minY); if (maxX < point->x || minX > point->x) { POSTGIS_DEBUGF(3, "X value %.8f falls outside the range %.8f-%.8f", point->x, minX, maxX); return 0; } else if (maxY < point->y || minY > point->y) { POSTGIS_DEBUGF(3, "Y value %.8f falls outside the range %.8f-%.8f", point->y, minY, maxY); return 0; } return 1; } /* * return -1 iff point is outside ring pts * return 1 iff point is inside ring pts * return 0 iff point is on ring pts */ int point_in_ring_rtree(RTREE_NODE *root, POINT2D *point) { int wn = 0; int i; double side; POINT2D seg1; POINT2D seg2; LWMLINE *lines; POSTGIS_DEBUG(2, "point_in_ring called."); lines = RTreeFindLineSegments(root, point->y); if (!lines) return -1; for (i=0; i<lines->ngeoms; i++) { getPoint2d_p(lines->geoms[i]->points, 0, &seg1); getPoint2d_p(lines->geoms[i]->points, 1, &seg2); side = determineSide(&seg1, &seg2, point); POSTGIS_DEBUGF(3, "segment: (%.8f, %.8f),(%.8f, %.8f)", seg1.x, seg1.y, seg2.x, seg2.y); POSTGIS_DEBUGF(3, "side result: %.8f", side); POSTGIS_DEBUGF(3, "counterclockwise wrap %d, clockwise wrap %d", FP_CONTAINS_BOTTOM(seg1.y,point->y,seg2.y), FP_CONTAINS_BOTTOM(seg2.y,point->y,seg1.y)); /* zero length segments are ignored. */ if (((seg2.x-seg1.x)*(seg2.x-seg1.x)+(seg2.y-seg1.y)*(seg2.y-seg1.y)) < 1e-12*1e-12) { POSTGIS_DEBUG(3, "segment is zero length... ignoring."); continue; } /* a point on the boundary of a ring is not contained. */ /* WAS: if (fabs(side) < 1e-12), see #852 */ if (side == 0.0) { if (isOnSegment(&seg1, &seg2, point) == 1) { POSTGIS_DEBUGF(3, "point on ring boundary between points %d, %d", i, i+1); return 0; } } /* * If the point is to the left of the line, and it's rising, * then the line is to the right of the point and * circling counter-clockwise, so incremement. */ if (FP_CONTAINS_BOTTOM(seg1.y,point->y,seg2.y) && side>0) { POSTGIS_DEBUG(3, "incrementing winding number."); ++wn; } /* * If the point is to the right of the line, and it's falling, * then the line is to the right of the point and circling * clockwise, so decrement. */ else if (FP_CONTAINS_BOTTOM(seg2.y,point->y,seg1.y) && side<0) { POSTGIS_DEBUG(3, "decrementing winding number."); --wn; } } POSTGIS_DEBUGF(3, "winding number %d", wn); if (wn == 0) return -1; return 1; } /* * return -1 iff point is outside ring pts * return 1 iff point is inside ring pts * return 0 iff point is on ring pts */ int point_in_ring(POINTARRAY *pts, POINT2D *point) { int wn = 0; int i; double side; POINT2D seg1; POINT2D seg2; POSTGIS_DEBUG(2, "point_in_ring called."); for (i=0; i<pts->npoints-1; i++) { getPoint2d_p(pts, i, &seg1); getPoint2d_p(pts, i+1, &seg2); side = determineSide(&seg1, &seg2, point); POSTGIS_DEBUGF(3, "segment: (%.8f, %.8f),(%.8f, %.8f)", seg1.x, seg1.y, seg2.x, seg2.y); POSTGIS_DEBUGF(3, "side result: %.8f", side); POSTGIS_DEBUGF(3, "counterclockwise wrap %d, clockwise wrap %d", FP_CONTAINS_BOTTOM(seg1.y,point->y,seg2.y), FP_CONTAINS_BOTTOM(seg2.y,point->y,seg1.y)); /* zero length segments are ignored. */ if (((seg2.x-seg1.x)*(seg2.x-seg1.x)+(seg2.y-seg1.y)*(seg2.y-seg1.y)) < 1e-12*1e-12) { POSTGIS_DEBUG(3, "segment is zero length... ignoring."); continue; } /* a point on the boundary of a ring is not contained. */ /* WAS: if (fabs(side) < 1e-12), see #852 */ if (side == 0.0) { if (isOnSegment(&seg1, &seg2, point) == 1) { POSTGIS_DEBUGF(3, "point on ring boundary between points %d, %d", i, i+1); return 0; } } /* * If the point is to the left of the line, and it's rising, * then the line is to the right of the point and * circling counter-clockwise, so incremement. */ if (FP_CONTAINS_BOTTOM(seg1.y,point->y,seg2.y) && side>0) { POSTGIS_DEBUG(3, "incrementing winding number."); ++wn; } /* * If the point is to the right of the line, and it's falling, * then the line is to the right of the point and circling * clockwise, so decrement. */ else if (FP_CONTAINS_BOTTOM(seg2.y,point->y,seg1.y) && side<0) { POSTGIS_DEBUG(3, "decrementing winding number."); --wn; } } POSTGIS_DEBUGF(3, "winding number %d", wn); if (wn == 0) return -1; return 1; } /* * return 0 iff point outside polygon or on boundary * return 1 iff point inside polygon */ int point_in_polygon_rtree(RTREE_NODE **root, int ringCount, LWPOINT *point) { int i; POINT2D pt; POSTGIS_DEBUGF(2, "point_in_polygon called for %p %d %p.", root, ringCount, point); getPoint2d_p(point->point, 0, &pt); /* assume bbox short-circuit has already been attempted */ if (point_in_ring_rtree(root[0], &pt) != 1) { POSTGIS_DEBUG(3, "point_in_polygon_rtree: outside exterior ring."); return 0; } for (i=1; i<ringCount; i++) { if (point_in_ring_rtree(root[i], &pt) != -1) { POSTGIS_DEBUGF(3, "point_in_polygon_rtree: within hole %d.", i); return 0; } } return 1; } /* * return -1 if point outside polygon * return 0 if point on boundary * return 1 if point inside polygon * * Expected **root order is each exterior ring followed by its holes, eg. EIIEIIEI */ int point_in_multipolygon_rtree(RTREE_NODE **root, int polyCount, int *ringCounts, LWPOINT *point) { int i, p, r, in_ring; POINT2D pt; int result = -1; POSTGIS_DEBUGF(2, "point_in_multipolygon_rtree called for %p %d %p.", root, polyCount, point); getPoint2d_p(point->point, 0, &pt); /* assume bbox short-circuit has already been attempted */ i = 0; /* the current index into the root array */ /* is the point inside any of the sub-polygons? */ for ( p = 0; p < polyCount; p++ ) { in_ring = point_in_ring_rtree(root[i], &pt); POSTGIS_DEBUGF(4, "point_in_multipolygon_rtree: exterior ring (%d), point_in_ring returned %d", p, in_ring); if ( in_ring == -1 ) /* outside the exterior ring */ { POSTGIS_DEBUG(3, "point_in_multipolygon_rtree: outside exterior ring."); } else if ( in_ring == 0 ) /* on the boundary */ { POSTGIS_DEBUGF(3, "point_in_multipolygon_rtree: on edge of exterior ring %d", p); return 0; } else { result = in_ring; for(r=1; r<ringCounts[p]; r++) { in_ring = point_in_ring_rtree(root[i+r], &pt); POSTGIS_DEBUGF(4, "point_in_multipolygon_rtree: interior ring (%d), point_in_ring returned %d", r, in_ring); if (in_ring == 1) /* inside a hole => outside the polygon */ { POSTGIS_DEBUGF(3, "point_in_multipolygon_rtree: within hole %d of exterior ring %d", r, p); result = -1; break; } if (in_ring == 0) /* on the edge of a hole */ { POSTGIS_DEBUGF(3, "point_in_multipolygon_rtree: on edge of hole %d of exterior ring %d", r, p); return 0; } } /* if we have a positive result, we can short-circuit and return it */ if ( result != -1) { return result; } } /* increment the index by the total number of rings in the sub-poly */ /* we do this here in case we short-cutted out of the poly before looking at all the rings */ i += ringCounts[p]; } return result; /* -1 = outside, 0 = boundary, 1 = inside */ } /* * return -1 iff point outside polygon * return 0 iff point on boundary * return 1 iff point inside polygon */ int point_in_polygon(LWPOLY *polygon, LWPOINT *point) { int i, result, in_ring; POINT2D pt; POSTGIS_DEBUG(2, "point_in_polygon called."); getPoint2d_p(point->point, 0, &pt); /* assume bbox short-circuit has already been attempted */ /* everything is outside of an empty polygon */ if ( polygon->nrings == 0 ) return -1; in_ring = point_in_ring(polygon->rings[0], &pt); if ( in_ring == -1) /* outside the exterior ring */ { POSTGIS_DEBUG(3, "point_in_polygon: outside exterior ring."); return -1; } result = in_ring; for (i=1; i<polygon->nrings; i++) { in_ring = point_in_ring(polygon->rings[i], &pt); if (in_ring == 1) /* inside a hole => outside the polygon */ { POSTGIS_DEBUGF(3, "point_in_polygon: within hole %d.", i); return -1; } if (in_ring == 0) /* on the edge of a hole */ { POSTGIS_DEBUGF(3, "point_in_polygon: on edge of hole %d.", i); return 0; } } return result; /* -1 = outside, 0 = boundary, 1 = inside */ } /* * return -1 iff point outside multipolygon * return 0 iff point on multipolygon boundary * return 1 iff point inside multipolygon */ int point_in_multipolygon(LWMPOLY *mpolygon, LWPOINT *point) { int i, j, result, in_ring; POINT2D pt; POSTGIS_DEBUG(2, "point_in_polygon called."); getPoint2d_p(point->point, 0, &pt); /* assume bbox short-circuit has already been attempted */ result = -1; for (j = 0; j < mpolygon->ngeoms; j++ ) { LWPOLY *polygon = mpolygon->geoms[j]; /* everything is outside of an empty polygon */ if ( polygon->nrings == 0 ) continue; in_ring = point_in_ring(polygon->rings[0], &pt); if ( in_ring == -1) /* outside the exterior ring */ { POSTGIS_DEBUG(3, "point_in_polygon: outside exterior ring."); continue; } if ( in_ring == 0 ) { return 0; } result = in_ring; for (i=1; i<polygon->nrings; i++) { in_ring = point_in_ring(polygon->rings[i], &pt); if (in_ring == 1) /* inside a hole => outside the polygon */ { POSTGIS_DEBUGF(3, "point_in_polygon: within hole %d.", i); result = -1; break; } if (in_ring == 0) /* on the edge of a hole */ { POSTGIS_DEBUGF(3, "point_in_polygon: on edge of hole %d.", i); return 0; } } if ( result != -1) { return result; } } return result; } /******************************************************************************* * End of "Fast Winding Number Inclusion of a Point in a Polygon" derivative. ******************************************************************************/ �������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/geography_inout.c���������������������������������������������������0000644�0000000�0000000�00000041310�12142533570�020620� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: geography_inout.c 11384 2013-05-08 20:37:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009-2011 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "../postgis_config.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include "utils/elog.h" #include "utils/array.h" #include "utils/builtins.h" /* for pg_atoi */ #include "lib/stringinfo.h" /* For binary input */ #include "catalog/pg_type.h" /* for CSTRINGOID */ #include "liblwgeom.h" /* For standard geometry types. */ #include "lwgeom_pg.h" /* For debugging macros. */ #include "geography.h" /* For utility functions. */ #include "lwgeom_export.h" /* For export functions. */ #include "lwgeom_transform.h" Datum geography_in(PG_FUNCTION_ARGS); Datum geography_out(PG_FUNCTION_ARGS); Datum geography_as_text(PG_FUNCTION_ARGS); Datum geography_from_text(PG_FUNCTION_ARGS); Datum geography_as_geojson(PG_FUNCTION_ARGS); Datum geography_as_gml(PG_FUNCTION_ARGS); Datum geography_as_kml(PG_FUNCTION_ARGS); Datum geography_as_svg(PG_FUNCTION_ARGS); Datum geography_from_binary(PG_FUNCTION_ARGS); Datum geography_from_geometry(PG_FUNCTION_ARGS); Datum geometry_from_geography(PG_FUNCTION_ARGS); Datum geography_send(PG_FUNCTION_ARGS); Datum geography_recv(PG_FUNCTION_ARGS); GSERIALIZED* gserialized_geography_from_lwgeom(LWGEOM *lwgeom, int32 geog_typmod); /** * The geography type only support POINT, LINESTRING, POLYGON, MULTI* variants * of same, and GEOMETRYCOLLECTION. If the input type is not one of those, shut * down the query. */ void geography_valid_type(uint8_t type) { if ( ! ( type == POINTTYPE || type == LINETYPE || type == POLYGONTYPE || type == MULTIPOINTTYPE || type == MULTILINETYPE || type == MULTIPOLYGONTYPE || type == COLLECTIONTYPE ) ) { ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Geography type does not support %s", lwtype_name(type) ))); } } GSERIALIZED* gserialized_geography_from_lwgeom(LWGEOM *lwgeom, int32 geog_typmod) { GSERIALIZED *g_ser = NULL; /* Set geodetic flag */ lwgeom_set_geodetic(lwgeom, true); /* Check that this is a type we can handle */ geography_valid_type(lwgeom->type); /* Force the geometry to have valid geodetic coordinate range. */ lwgeom_nudge_geodetic(lwgeom); if ( lwgeom_force_geodetic(lwgeom) == LW_TRUE ) { ereport(NOTICE, ( errmsg_internal("Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY" )) ); } /* Force default SRID to the default */ if ( (int)lwgeom->srid <= 0 ) lwgeom->srid = SRID_DEFAULT; /* ** Serialize our lwgeom and set the geodetic flag so subsequent ** functions do the right thing. */ g_ser = geography_serialize(lwgeom); /* Check for typmod agreement */ if ( geog_typmod >= 0 ) { postgis_valid_typmod(g_ser, geog_typmod); POSTGIS_DEBUG(3, "typmod and geometry were consistent"); } else { POSTGIS_DEBUG(3, "typmod was -1"); } return g_ser; } /* ** geography_in(cstring) returns *GSERIALIZED */ PG_FUNCTION_INFO_V1(geography_in); Datum geography_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); /* Datum geog_oid = PG_GETARG_OID(1); Not needed. */ int32 geog_typmod = -1; LWGEOM_PARSER_RESULT lwg_parser_result; LWGEOM *lwgeom = NULL; GSERIALIZED *g_ser = NULL; if ( (PG_NARGS()>2) && (!PG_ARGISNULL(2)) ) { geog_typmod = PG_GETARG_INT32(2); } lwgeom_parser_result_init(&lwg_parser_result); /* Empty string. */ if ( str[0] == '\0' ) ereport(ERROR,(errmsg("parse error - invalid geometry"))); /* WKB? Let's find out. */ if ( str[0] == '0' ) { /* TODO: 20101206: No parser checks! This is inline with current 1.5 behavior, but needs discussion */ lwgeom = lwgeom_from_hexwkb(str, LW_PARSER_CHECK_NONE); /* Error out if something went sideways */ if ( ! lwgeom ) ereport(ERROR,(errmsg("parse error - invalid geometry"))); } /* WKT then. */ else { if ( lwgeom_parse_wkt(&lwg_parser_result, str, LW_PARSER_CHECK_ALL) == LW_FAILURE ) PG_PARSER_ERROR(lwg_parser_result); lwgeom = lwg_parser_result.geom; } /* Error on any SRID != default */ srid_is_latlong(fcinfo, lwgeom->srid); /* Convert to gserialized */ g_ser = gserialized_geography_from_lwgeom(lwgeom, geog_typmod); /* Clean up temporary object */ lwgeom_free(lwgeom); PG_RETURN_POINTER(g_ser); } /* ** geography_out(*GSERIALIZED) returns cstring */ PG_FUNCTION_INFO_V1(geography_out); Datum geography_out(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *g = NULL; char *hexwkb; g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(g); hexwkb = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, 0); lwgeom_free(lwgeom); PG_RETURN_CSTRING(hexwkb); } /* ** geography_as_gml(*GSERIALIZED) returns text */ PG_FUNCTION_INFO_V1(geography_as_gml); Datum geography_as_gml(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *g = NULL; char *gml; text *result; int version; char *srs; int srid = SRID_DEFAULT; int precision = DBL_DIG; int option=0; int lwopts = LW_GML_IS_DIMS; static const char *default_prefix = "gml:"; const char *prefix = default_prefix; char *prefix_buf = ""; text *prefix_text, *id_text = NULL; const char *id=NULL; char *id_buf; /* Get the version */ version = PG_GETARG_INT32(0); if ( version != 2 && version != 3 ) { elog(ERROR, "Only GML 2 and GML 3 are supported"); PG_RETURN_NULL(); } /* Get the geography */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); /* TODO: leave this to liblwgeom */ if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } /* retrieve option */ if (PG_NARGS() >3 && !PG_ARGISNULL(3)) option = PG_GETARG_INT32(3); /* retrieve prefix */ if (PG_NARGS() >4 && !PG_ARGISNULL(4)) { prefix_text = PG_GETARG_TEXT_P(4); if ( VARSIZE(prefix_text)-VARHDRSZ == 0 ) { prefix = ""; } else { /* +2 is one for the ':' and one for term null */ prefix_buf = palloc(VARSIZE(prefix_text)-VARHDRSZ+2); memcpy(prefix_buf, VARDATA(prefix_text), VARSIZE(prefix_text)-VARHDRSZ); /* add colon and null terminate */ prefix_buf[VARSIZE(prefix_text)-VARHDRSZ] = ':'; prefix_buf[VARSIZE(prefix_text)-VARHDRSZ+1] = '\0'; prefix = prefix_buf; } } /* retrieve id */ if (PG_NARGS() >5 && !PG_ARGISNULL(5)) { id_text = PG_GETARG_TEXT_P(5); if ( VARSIZE(id_text)-VARHDRSZ == 0 ) { id = ""; } else { id_buf = palloc(VARSIZE(id_text)-VARHDRSZ+1); memcpy(id_buf, VARDATA(id_text), VARSIZE(id_text)-VARHDRSZ); prefix_buf[VARSIZE(id_text)-VARHDRSZ+1] = '\0'; id = id_buf; } } if (option & 1) srs = getSRSbySRID(srid, false); else srs = getSRSbySRID(srid, true); if (!srs) { elog(ERROR, "SRID %d unknown in spatial_ref_sys table", SRID_DEFAULT); PG_RETURN_NULL(); } /* Revert lat/lon only with long SRS */ if (option & 1) lwopts |= LW_GML_IS_DEGREE; if (option & 2) lwopts &= ~LW_GML_IS_DIMS; if (version == 2) gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix); else gml = lwgeom_to_gml3(lwgeom, srs, precision, lwopts, prefix, id); lwgeom_free(lwgeom); PG_FREE_IF_COPY(g, 1); /* Return null on null */ if ( ! gml ) PG_RETURN_NULL(); /* Turn string result into text for return */ result = cstring2text(gml); lwfree(gml); PG_RETURN_TEXT_P(result); } /* ** geography_as_kml(*GSERIALIZED) returns text */ PG_FUNCTION_INFO_V1(geography_as_kml); Datum geography_as_kml(PG_FUNCTION_ARGS) { GSERIALIZED *g = NULL; LWGEOM *lwgeom = NULL; char *kml; text *result; int version; int precision = DBL_DIG; static const char *default_prefix = ""; char *prefixbuf; const char* prefix = default_prefix; text *prefix_text; /* Get the version */ version = PG_GETARG_INT32(0); if ( version != 2) { elog(ERROR, "Only KML 2 is supported"); PG_RETURN_NULL(); } /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); /* TODO: leave this to liblwgeom */ if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } /* retrieve prefix */ if (PG_NARGS() >3 && !PG_ARGISNULL(3)) { prefix_text = PG_GETARG_TEXT_P(3); if ( VARSIZE(prefix_text)-VARHDRSZ == 0 ) { prefix = ""; } else { /* +2 is one for the ':' and one for term null */ prefixbuf = palloc(VARSIZE(prefix_text)-VARHDRSZ+2); memcpy(prefixbuf, VARDATA(prefix_text), VARSIZE(prefix_text)-VARHDRSZ); /* add colon and null terminate */ prefixbuf[VARSIZE(prefix_text)-VARHDRSZ] = ':'; prefixbuf[VARSIZE(prefix_text)-VARHDRSZ+1] = '\0'; prefix = prefixbuf; } } kml = lwgeom_to_kml2(lwgeom, precision, prefix); lwgeom_free(lwgeom); PG_FREE_IF_COPY(g, 1); if ( ! kml ) PG_RETURN_NULL(); result = cstring2text(kml); lwfree(kml); PG_RETURN_TEXT_P(result); } /* ** geography_as_svg(*GSERIALIZED) returns text */ PG_FUNCTION_INFO_V1(geography_as_svg); Datum geography_as_svg(PG_FUNCTION_ARGS) { GSERIALIZED *g = NULL; LWGEOM *lwgeom = NULL; char *svg; text *result; int relative = 0; int precision=DBL_DIG; if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); /* check for relative path notation */ if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) ) relative = PG_GETARG_INT32(1) ? 1:0; if ( PG_NARGS() > 2 && ! PG_ARGISNULL(2) ) { precision = PG_GETARG_INT32(2); /* TODO: leave this to liblwgeom */ if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } svg = lwgeom_to_svg(lwgeom, precision, relative); lwgeom_free(lwgeom); PG_FREE_IF_COPY(g, 0); result = cstring2text(svg); lwfree(svg); PG_RETURN_TEXT_P(result); } /* ** geography_as_geojson(*GSERIALIZED) returns text */ PG_FUNCTION_INFO_V1(geography_as_geojson); Datum geography_as_geojson(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *g = NULL; char *geojson; text *result; int version; int option = 0; int has_bbox = 0; int precision = DBL_DIG; char * srs = NULL; /* Get the version */ version = PG_GETARG_INT32(0); if ( version != 1) { elog(ERROR, "Only GeoJSON 1 is supported"); PG_RETURN_NULL(); } /* Get the geography */ if (PG_ARGISNULL(1) ) PG_RETURN_NULL(); g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) { precision = PG_GETARG_INT32(2); /* TODO: leave this to liblwgeom */ if ( precision > DBL_DIG ) precision = DBL_DIG; else if ( precision < 0 ) precision = 0; } /* Retrieve output option * 0 = without option (default) * 1 = bbox * 2 = short crs * 4 = long crs */ if (PG_NARGS() >3 && !PG_ARGISNULL(3)) option = PG_GETARG_INT32(3); if (option & 2 || option & 4) { /* Geography only handle srid SRID_DEFAULT */ if (option & 2) srs = getSRSbySRID(SRID_DEFAULT, true); if (option & 4) srs = getSRSbySRID(SRID_DEFAULT, false); if (!srs) { elog(ERROR, "SRID SRID_DEFAULT unknown in spatial_ref_sys table"); PG_RETURN_NULL(); } } if (option & 1) has_bbox = 1; geojson = lwgeom_to_geojson(lwgeom, srs, precision, has_bbox); lwgeom_free(lwgeom); PG_FREE_IF_COPY(g, 1); if (srs) pfree(srs); result = cstring2text(geojson); lwfree(geojson); PG_RETURN_TEXT_P(result); } /* ** geography_from_text(*char) returns *GSERIALIZED ** ** Convert text (varlena) to cstring and then call geography_in(). */ PG_FUNCTION_INFO_V1(geography_from_text); Datum geography_from_text(PG_FUNCTION_ARGS) { LWGEOM_PARSER_RESULT lwg_parser_result; GSERIALIZED *g_ser = NULL; text *wkt_text = PG_GETARG_TEXT_P(0); /* Extract the cstring from the varlena */ char *wkt = text2cstring(wkt_text); /* Pass the cstring to the input parser, and magic occurs! */ if ( lwgeom_parse_wkt(&lwg_parser_result, wkt, LW_PARSER_CHECK_ALL) == LW_FAILURE ) PG_PARSER_ERROR(lwg_parser_result); /* Clean up string */ pfree(wkt); g_ser = gserialized_geography_from_lwgeom(lwg_parser_result.geom, -1); /* Clean up temporary object */ lwgeom_free(lwg_parser_result.geom); PG_RETURN_POINTER(g_ser); } /* ** geography_from_binary(*char) returns *GSERIALIZED */ PG_FUNCTION_INFO_V1(geography_from_binary); Datum geography_from_binary(PG_FUNCTION_ARGS) { char *wkb_bytea = (char*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *gser = NULL; size_t wkb_size = VARSIZE(wkb_bytea); uint8_t *wkb = (uint8_t*)VARDATA(wkb_bytea); LWGEOM *lwgeom = lwgeom_from_wkb(wkb, wkb_size, LW_PARSER_CHECK_NONE); if ( ! lwgeom ) lwerror("Unable to parse WKB"); gser = gserialized_geography_from_lwgeom(lwgeom, 0); lwgeom_free(lwgeom); PG_RETURN_POINTER(gser); } PG_FUNCTION_INFO_V1(geography_from_geometry); Datum geography_from_geometry(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = NULL; GSERIALIZED *g_ser = NULL; geography_valid_type(gserialized_get_type(geom)); lwgeom = lwgeom_from_gserialized(geom); /* Force default SRID */ if ( (int)lwgeom->srid <= 0 ) { lwgeom->srid = SRID_DEFAULT; } /* Error on any SRID != default */ srid_is_latlong(fcinfo, lwgeom->srid); /* Force the geometry to have valid geodetic coordinate range. */ lwgeom_nudge_geodetic(lwgeom); if ( lwgeom_force_geodetic(lwgeom) == LW_TRUE ) { ereport(NOTICE, ( errmsg_internal("Coordinate values were coerced into range [-180 -90, 180 90] for GEOGRAPHY" )) ); } /* ** Serialize our lwgeom and set the geodetic flag so subsequent ** functions do the right thing. */ lwgeom_set_geodetic(lwgeom, true); /* Recalculate the boxes after re-setting the geodetic bit */ lwgeom_drop_bbox(lwgeom); lwgeom_add_bbox(lwgeom); g_ser = geography_serialize(lwgeom); /* ** Replace the unaligned lwgeom with a new aligned one based on GSERIALIZED. */ lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(g_ser); } PG_FUNCTION_INFO_V1(geometry_from_geography); Datum geometry_from_geography(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *ret = NULL; GSERIALIZED *g_ser = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(g_ser); /* Recalculate the boxes after re-setting the geodetic bit */ lwgeom_set_geodetic(lwgeom, false); lwgeom_drop_bbox(lwgeom); lwgeom_add_bbox(lwgeom); /* We want "geometry" to think all our "geography" has an SRID, and the implied SRID is the default, so we fill that in if our SRID is actually unknown. */ if ( (int)lwgeom->srid <= 0 ) lwgeom->srid = SRID_DEFAULT; ret = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_RETURN_POINTER(ret); } PG_FUNCTION_INFO_V1(geography_recv); Datum geography_recv(PG_FUNCTION_ARGS) { StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); int32 geog_typmod = -1; LWGEOM *lwgeom = NULL; GSERIALIZED *g_ser = NULL; if ( (PG_NARGS()>2) && (!PG_ARGISNULL(2)) ) { geog_typmod = PG_GETARG_INT32(2); } lwgeom = lwgeom_from_wkb((uint8_t*)buf->data, buf->len, LW_PARSER_CHECK_ALL); /* Error on any SRID != default */ srid_is_latlong(fcinfo, lwgeom->srid); g_ser = gserialized_geography_from_lwgeom(lwgeom, geog_typmod); /* Clean up temporary object */ lwgeom_free(lwgeom); /* Set cursor to the end of buffer (so the backend is happy) */ buf->cursor = buf->len; PG_RETURN_POINTER(g_ser); } PG_FUNCTION_INFO_V1(geography_send); Datum geography_send(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *g = NULL; size_t size_result; uint8_t *wkb; bytea *result; g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(g); wkb = lwgeom_to_wkb(lwgeom, WKB_EXTENDED, &size_result); lwgeom_free(lwgeom); result = palloc(size_result + VARHDRSZ); SET_VARSIZE(result, size_result + VARHDRSZ); memcpy(VARDATA(result), wkb, size_result); pfree(wkb); PG_RETURN_POINTER(result); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_dumppoints.c�������������������������������������������������0000644�0000000�0000000�00000017606�12141205260�021173� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "postgres.h" #include "fmgr.h" #include "utils/elog.h" #include "utils/array.h" #include "utils/geo_decls.h" #include "utils/lsyscache.h" #include "catalog/pg_type.h" #include "funcapi.h" #include "../postgis_config.h" #if POSTGIS_PGSQL_VERSION > 92 #include "access/htup_details.h" #endif #include "liblwgeom.h" /* ST_DumpPoints for postgis. * By Nathan Wagner, copyright disclaimed, * this entire file is in the public domain */ Datum LWGEOM_dumppoints(PG_FUNCTION_ARGS); struct dumpnode { LWGEOM *geom; int idx; /* which member geom we're working on */ } ; /* 32 is the max depth for st_dump, so it seems reasonable * to use the same here */ #define MAXDEPTH 32 struct dumpstate { LWGEOM *root; int stacklen; /* collections/geoms on stack */ int pathlen; /* polygon rings and such need extra path info */ struct dumpnode stack[MAXDEPTH]; Datum path[34]; /* two more than max depth, for ring and point */ /* used to cache the type attributes for integer arrays */ int16 typlen; bool byval; char align; int ring; /* ring of top polygon */ int pt; /* point of top geom or current ring */ }; PG_FUNCTION_INFO_V1(LWGEOM_dumppoints); Datum LWGEOM_dumppoints(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; MemoryContext oldcontext, newcontext; GSERIALIZED *pglwgeom; LWCOLLECTION *lwcoll; LWGEOM *lwgeom; struct dumpstate *state; struct dumpnode *node; HeapTuple tuple; Datum pathpt[2]; /* used to construct the composite return value */ bool isnull[2] = {0,0}; /* needed to say neither value is null */ Datum result; /* the actual composite return value */ if (SRF_IS_FIRSTCALL()) { funcctx = SRF_FIRSTCALL_INIT(); newcontext = funcctx->multi_call_memory_ctx; oldcontext = MemoryContextSwitchTo(newcontext); /* get a local copy of what we're doing a dump points on */ pglwgeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(pglwgeom); /* return early if nothing to do */ if (!lwgeom || lwgeom_is_empty(lwgeom)) { funcctx = SRF_PERCALL_SETUP(); SRF_RETURN_DONE(funcctx); } /* Create function state */ state = lwalloc(sizeof *state); state->root = lwgeom; state->stacklen = 0; state->pathlen = 0; state->pt = 0; state->ring = 0; funcctx->user_fctx = state; /* * Push a struct dumpnode on the state stack */ state->stack[0].idx = 0; state->stack[0].geom = lwgeom; state->stacklen++; /* * get tuple description for return type */ if (get_call_result_type(fcinfo, 0, &funcctx->tuple_desc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("set-valued function called in context that cannot accept a set"))); } BlessTupleDesc(funcctx->tuple_desc); /* get and cache data for constructing int4 arrays */ get_typlenbyvalalign(INT4OID, &state->typlen, &state->byval, &state->align); MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); newcontext = funcctx->multi_call_memory_ctx; /* get state */ state = funcctx->user_fctx; while (1) { node = &state->stack[state->stacklen-1]; lwgeom = node->geom; /* need to return a point from this geometry */ if (!lwgeom_is_collection(lwgeom)) { /* either return a point, or pop the stack */ /* TODO use a union? would save a tiny amount of stack space. * probably not worth the bother */ LWLINE *line; LWCIRCSTRING *circ; LWPOLY *poly; LWTRIANGLE *tri; LWPOINT *lwpoint = NULL; POINT4D pt; /* * net result of switch should be to set lwpoint to the * next point to return, or leave at NULL if there * are no more points in the geometry */ switch(lwgeom->type) { case TRIANGLETYPE: tri = lwgeom_as_lwtriangle(lwgeom); if (state->pt == 0) { state->path[state->pathlen++] = Int32GetDatum(state->ring+1); } if (state->pt <= 3) { getPoint4d_p(tri->points, state->pt, &pt); lwpoint = lwpoint_make(tri->srid, FLAGS_GET_Z(tri->points->flags), FLAGS_GET_M(tri->points->flags), &pt); } if (state->pt > 3) { state->pathlen--; } break; case POLYGONTYPE: poly = lwgeom_as_lwpoly(lwgeom); if (state->pt == poly->rings[state->ring]->npoints) { state->pt = 0; state->ring++; state->pathlen--; } if (state->pt == 0 && state->ring < poly->nrings) { /* handle new ring */ state->path[state->pathlen] = Int32GetDatum(state->ring+1); state->pathlen++; } if (state->ring == poly->nrings) { } else { /* TODO should be able to directly get the point * into the point array of a fixed lwpoint */ /* can't get the point directly from the ptarray because * it might be aligned wrong, so at least one memcpy * seems unavoidable * It might be possible to pass it directly to gserialized * depending how that works, it might effectively be gserialized * though a brief look at the code indicates not */ getPoint4d_p(poly->rings[state->ring], state->pt, &pt); lwpoint = lwpoint_make(poly->srid, FLAGS_GET_Z(poly->rings[state->ring]->flags), FLAGS_GET_M(poly->rings[state->ring]->flags), &pt); } break; case POINTTYPE: if (state->pt == 0) lwpoint = lwgeom_as_lwpoint(lwgeom); break; case LINETYPE: line = lwgeom_as_lwline(lwgeom); if (line->points && state->pt <= line->points->npoints) { lwpoint = lwline_get_lwpoint((LWLINE*)lwgeom, state->pt); } break; case CIRCSTRINGTYPE: circ = lwgeom_as_lwcircstring(lwgeom); if (circ->points && state->pt <= circ->points->npoints) { lwpoint = lwcircstring_get_lwpoint((LWCIRCSTRING*)lwgeom, state->pt); } break; default: ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), errmsg("Invalid Geometry type %d passed to ST_DumpPoints()", lwgeom->type))); } /* * At this point, lwpoint is either NULL, in which case * we need to pop the geometry stack and get the next * geometry, if amy, or lwpoint is set and we construct * a record type with the integer array of geometry * indexes and the point number, and the actual point * geometry itself */ if (!lwpoint) { /* no point, so pop the geom and look for more */ if (--state->stacklen == 0) SRF_RETURN_DONE(funcctx); state->pathlen--; continue; } else { /* write address of current geom/pt */ state->pt++; state->path[state->pathlen] = Int32GetDatum(state->pt); pathpt[0] = PointerGetDatum(construct_array(state->path, state->pathlen+1, INT4OID, state->typlen, state->byval, state->align)); pathpt[1] = PointerGetDatum(gserialized_from_lwgeom((LWGEOM*)lwpoint,0,0)); tuple = heap_form_tuple(funcctx->tuple_desc, pathpt, isnull); result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } } lwcoll = (LWCOLLECTION*)node->geom; /* if a collection and we have more geoms */ if (node->idx < lwcoll->ngeoms) { /* push the next geom on the path and the stack */ lwgeom = lwcoll->geoms[node->idx++]; state->path[state->pathlen++] = Int32GetDatum(node->idx); node = &state->stack[state->stacklen++]; node->idx = 0; node->geom = lwgeom; state->pt = 0; state->ring = 0; /* loop back to beginning, which will then check whatever node we just pushed */ continue; } /* no more geometries in the current collection */ if (--state->stacklen == 0) SRF_RETURN_DONE(funcctx); state->pathlen--; state->stack[state->stacklen-1].idx++; } } /* * Geometry types of collection types for reference */ #if 0 case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: case CURVEPOLYTYPE: case COMPOUNDTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: #endif ��������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/uninstall_sfcgal.sql.in���������������������������������������������0000644�0000000�0000000�00000001740�12143217372�021732� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--------------------------------------------------------------------------- -- -- PostGIS - SFCGAL functions -- Copyright 2012-2013 Oslandia <infos@oslandia.com> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- --------------------------------------------------------------------------- -- -- New SFCGAL functions (meaning prototype not already provided by GEOS) -- BEGIN; DROP FUNCTION IF EXISTS postgis_sfcgal_version(); DROP FUNCTION IF EXISTS ST_3DIntersection(geom1 geometry, geom2 geometry); DROP FUNCTION IF EXISTS ST_Tesselate(geometry); DROP FUNCTION IF EXISTS ST_3DArea(geometry); DROP FUNCTION IF EXISTS ST_Extrude(geometry, float8, float8, float8); DROP FUNCTION IF EXISTS ST_ForceLHR(geometry); DROP FUNCTION IF EXISTS ST_Orientation(geometry); DROP FUNCTION IF EXISTS ST_MinkowskiSum(geometry, geometry); DROP FUNCTION IF EXISTS ST_StraightSkeleton(geometry); COMMIT; ��������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_geos.h�������������������������������������������������������0000644�0000000�0000000�00000002042�12142775451�017736� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2008 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef LWGEOM_GEOS_H_ #define LWGEOM_GEOS_H_ 1 #include "../liblwgeom/lwgeom_geos.h" /* for GEOSGeom */ #include "liblwgeom.h" /* for GSERIALIZED */ /* ** Public prototypes for GEOS utility functions. */ GSERIALIZED *GEOS2POSTGIS(GEOSGeom geom, char want3d); GEOSGeometry * POSTGIS2GEOS(GSERIALIZED *g); Datum geos_intersects(PG_FUNCTION_ARGS); Datum geos_intersection(PG_FUNCTION_ARGS); Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS); Datum LWGEOM_mindistance2d(PG_FUNCTION_ARGS); Datum LWGEOM_mindistance3d(PG_FUNCTION_ARGS); void errorIfGeometryCollection(GSERIALIZED *g1, GSERIALIZED *g2); #endif /* LWGEOM_GEOS_H_ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/sqldefines.h��������������������������������������������������������0000644�0000000�0000000�00000002031�12315456245�017561� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _LWPGIS_DEFINES #define _LWPGIS_DEFINES #include "../postgis_svn_revision.h" /* * Define just the version numbers; otherwise we get some strange substitutions in postgis.sql.in */ #define POSTGIS_PGSQL_VERSION 92 #define POSTGIS_GEOS_VERSION 34 #define POSTGIS_PROJ_VERSION 48 #define POSTGIS_LIB_VERSION '2.1.2' #define POSTGIS_LIBXML2_VERSION 2.9.0 /* * Define the build date and the version number * (these substitiutions are done with extra quotes sinces CPP * won't substitute within apostrophes) */ #define _POSTGIS_SQL_SELECT_POSTGIS_VERSION 'SELECT ''2.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1''::text AS version' #define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''2014-03-29 05:39:47''::text AS version' #if POSTGIS_SVN_REVISION #define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.1.2'::text || ' r' || POSTGIS_SVN_REVISION::text AS version $$ #else #define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '2.1.2'::text AS version $$ #endif #define SRID_USR_MAX 998999 #endif /* _LWPGIS_DEFINES */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_dump.c�������������������������������������������������������0000644�0000000�0000000�00000015444�11722777314�017756� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_dump.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2009 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <assert.h> #include "postgres.h" #include "fmgr.h" #include "utils/elog.h" #include "utils/array.h" #include "utils/geo_decls.h" #include "funcapi.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" Datum LWGEOM_dump(PG_FUNCTION_ARGS); Datum LWGEOM_dump_rings(PG_FUNCTION_ARGS); typedef struct GEOMDUMPNODE_T { int idx; LWGEOM *geom; } GEOMDUMPNODE; #define MAXDEPTH 32 typedef struct GEOMDUMPSTATE { int stacklen; GEOMDUMPNODE *stack[MAXDEPTH]; LWGEOM *root; } GEOMDUMPSTATE; #define PUSH(x,y) ((x)->stack[(x)->stacklen++]=(y)) #define LAST(x) ((x)->stack[(x)->stacklen-1]) #define POP(x) (--((x)->stacklen)) PG_FUNCTION_INFO_V1(LWGEOM_dump); Datum LWGEOM_dump(PG_FUNCTION_ARGS) { GSERIALIZED *pglwgeom; LWCOLLECTION *lwcoll; LWGEOM *lwgeom; FuncCallContext *funcctx; GEOMDUMPSTATE *state; GEOMDUMPNODE *node; TupleDesc tupdesc; HeapTuple tuple; AttInMetadata *attinmeta; MemoryContext oldcontext, newcontext; Datum result; char address[256]; char *ptr; uint32 i; char *values[2]; if (SRF_IS_FIRSTCALL()) { funcctx = SRF_FIRSTCALL_INIT(); newcontext = funcctx->multi_call_memory_ctx; oldcontext = MemoryContextSwitchTo(newcontext); pglwgeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(pglwgeom); /* Create function state */ state = lwalloc(sizeof(GEOMDUMPSTATE)); state->root = lwgeom; state->stacklen=0; if ( lwgeom_is_collection(lwgeom) ) { /* * Push a GEOMDUMPNODE on the state stack */ node = lwalloc(sizeof(GEOMDUMPNODE)); node->idx=0; node->geom = lwgeom; PUSH(state, node); } funcctx->user_fctx = state; /* * Build a tuple description for an * geometry_dump tuple */ tupdesc = RelationNameGetTupleDesc("geometry_dump"); /* * generate attribute metadata needed later to produce * tuples from raw C strings */ attinmeta = TupleDescGetAttInMetadata(tupdesc); funcctx->attinmeta = attinmeta; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); newcontext = funcctx->multi_call_memory_ctx; /* get state */ state = funcctx->user_fctx; /* Handled simple geometries */ if ( ! state->root ) SRF_RETURN_DONE(funcctx); /* Return nothing for empties */ if ( lwgeom_is_empty(state->root) ) SRF_RETURN_DONE(funcctx); if ( ! lwgeom_is_collection(state->root) ) { values[0] = "{}"; values[1] = lwgeom_to_hexwkb(state->root, WKB_EXTENDED, 0); tuple = BuildTupleFromCStrings(funcctx->attinmeta, values); result = HeapTupleGetDatum(tuple); state->root = NULL; SRF_RETURN_NEXT(funcctx, result); } while (1) { node = LAST(state); lwcoll = (LWCOLLECTION*)node->geom; if ( node->idx < lwcoll->ngeoms ) { lwgeom = lwcoll->geoms[node->idx]; if ( ! lwgeom_is_collection(lwgeom) ) { /* write address of current geom */ ptr=address; *ptr++='{'; for (i=0; i<state->stacklen; i++) { if ( i ) ptr += sprintf(ptr, ","); ptr += sprintf(ptr, "%d", state->stack[i]->idx+1); } *ptr++='}'; *ptr='\0'; break; } /* * It's a collection, increment index * of current node, push a new one on the * stack */ oldcontext = MemoryContextSwitchTo(newcontext); node = lwalloc(sizeof(GEOMDUMPNODE)); node->idx=0; node->geom = lwgeom; PUSH(state, node); MemoryContextSwitchTo(oldcontext); continue; } if ( ! POP(state) ) SRF_RETURN_DONE(funcctx); LAST(state)->idx++; } lwgeom->srid = state->root->srid; values[0] = address; values[1] = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, 0); tuple = BuildTupleFromCStrings(funcctx->attinmeta, values); result = TupleGetDatum(funcctx->slot, tuple); node->idx++; SRF_RETURN_NEXT(funcctx, result); } struct POLYDUMPSTATE { int ringnum; LWPOLY *poly; }; PG_FUNCTION_INFO_V1(LWGEOM_dump_rings); Datum LWGEOM_dump_rings(PG_FUNCTION_ARGS) { GSERIALIZED *pglwgeom; LWGEOM *lwgeom; FuncCallContext *funcctx; struct POLYDUMPSTATE *state; TupleDesc tupdesc; HeapTuple tuple; AttInMetadata *attinmeta; MemoryContext oldcontext, newcontext; Datum result; char address[256]; char *values[2]; if (SRF_IS_FIRSTCALL()) { funcctx = SRF_FIRSTCALL_INIT(); newcontext = funcctx->multi_call_memory_ctx; oldcontext = MemoryContextSwitchTo(newcontext); pglwgeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); if ( gserialized_get_type(pglwgeom) != POLYGONTYPE ) { lwerror("Input is not a polygon"); } lwgeom = lwgeom_from_gserialized(pglwgeom); /* Create function state */ state = lwalloc(sizeof(struct POLYDUMPSTATE)); state->poly = lwgeom_as_lwpoly(lwgeom); assert (state->poly); state->ringnum=0; funcctx->user_fctx = state; /* * Build a tuple description for an * geometry_dump tuple */ tupdesc = RelationNameGetTupleDesc("geometry_dump"); /* * generate attribute metadata needed later to produce * tuples from raw C strings */ attinmeta = TupleDescGetAttInMetadata(tupdesc); funcctx->attinmeta = attinmeta; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); newcontext = funcctx->multi_call_memory_ctx; /* get state */ state = funcctx->user_fctx; /* Loop trough polygon rings */ while (state->ringnum < state->poly->nrings ) { LWPOLY* poly = state->poly; POINTARRAY *ring; LWGEOM* ringgeom; /* Switch to an appropriate memory context for POINTARRAY * cloning and hexwkb allocation */ oldcontext = MemoryContextSwitchTo(newcontext); /* We need a copy of input ring here */ ring = ptarray_clone_deep(poly->rings[state->ringnum]); /* Construct another polygon with shell only */ ringgeom = (LWGEOM*)lwpoly_construct( poly->srid, NULL, /* TODO: could use input bounding box here */ 1, /* one ring */ &ring); /* Write path as ``{ <ringnum> }'' */ sprintf(address, "{%d}", state->ringnum); values[0] = address; values[1] = lwgeom_to_hexwkb(ringgeom, WKB_EXTENDED, 0); MemoryContextSwitchTo(oldcontext); tuple = BuildTupleFromCStrings(funcctx->attinmeta, values); result = HeapTupleGetDatum(tuple); ++state->ringnum; SRF_RETURN_NEXT(funcctx, result); } SRF_RETURN_DONE(funcctx); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/postgis_drop_after.sql����������������������������������������������0000644�0000000�0000000�00000021354�12225010423�021662� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: postgis_drop_after.sql 12010 2013-10-08 14:05:07Z strk $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- -- Copyright (C) 2011-2012 Sandro Santilli <strk@keybit.net> -- Copyright (C) 2010-2012 Regina Obe <lr@pcorp.us> -- Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- This file contains drop commands for obsoleted items that need -- to be dropped _after_ upgrade of old functions. -- Changes to this file affect postgis_upgrade*.sql script. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- First drop old aggregates DROP AGGREGATE IF EXISTS memgeomunion(geometry); DROP AGGREGATE IF EXISTS geomunion(geometry); DROP AGGREGATE IF EXISTS polygonize(geometry); -- Deprecated in 1.2.3, Dropped in 2.0.0 DROP AGGREGATE IF EXISTS collect(geometry); -- Deprecated in 1.2.3, Dropped in 2.0.0 DROP AGGREGATE IF EXISTS st_geomunion(geometry); DROP AGGREGATE IF EXISTS accum_old(geometry); DROP AGGREGATE IF EXISTS st_accum_old(geometry); -- BEGIN Management functions that now have default param for typmod -- DROP FUNCTION IF EXISTS AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer); DROP FUNCTION IF EXISTS AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer); DROP FUNCTION IF EXISTS AddGeometryColumn(varchar,varchar,integer,varchar,integer); DROP FUNCTION IF EXISTS populate_geometry_columns(); DROP FUNCTION IF EXISTS populate_geometry_columns(oid); -- END Management functions now have default parameter for typmod -- -- Then drop old functions DROP FUNCTION IF EXISTS box2d_overleft(box2d, box2d); DROP FUNCTION IF EXISTS box2d_overright(box2d, box2d); DROP FUNCTION IF EXISTS box2d_left(box2d, box2d); DROP FUNCTION IF EXISTS box2d_right(box2d, box2d); DROP FUNCTION IF EXISTS box2d_contain(box2d, box2d); DROP FUNCTION IF EXISTS box2d_contained(box2d, box2d); DROP FUNCTION IF EXISTS box2d_overlap(box2d, box2d); DROP FUNCTION IF EXISTS box2d_same(box2d, box2d); DROP FUNCTION IF EXISTS box2d_intersects(box2d, box2d); DROP FUNCTION IF EXISTS st_area(geography); -- this one changed to use default parameters DROP FUNCTION IF EXISTS ST_AsGeoJson(geometry); -- this one changed to use default args DROP FUNCTION IF EXISTS ST_AsGeoJson(geography); -- this one changed to use default args DROP FUNCTION IF EXISTS ST_AsGeoJson(geometry,int4); -- this one changed to use default args DROP FUNCTION IF EXISTS ST_AsGeoJson(geography,int4); -- this one changed to use default args DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geometry); -- this one changed to use default args DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geography); -- this one changed to use default args DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geometry,int4); -- this one changed to use default args DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geography,int4); -- this one changed to use default args DROP FUNCTION IF EXISTS st_asgml(geometry); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(geometry, int4); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geometry); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geometry, int4); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geometry, int4,int4); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geometry, int4,int4,text); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(geography); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(geography, int4); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geography); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geography, int4); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geography, int4,int4); -- changed to use default args DROP FUNCTION IF EXISTS st_asgml(int4, geography, int4,int4,text); -- changed to use default args DROP FUNCTION IF EXISTS _st_asgml(int4, geometry, int4,int4,text); -- changed to use default args DROP FUNCTION IF EXISTS _st_asgml(int4, geography, int4,int4,text); -- changed to use default args DROP FUNCTION IF EXISTS ST_AsKML(geometry); -- changed to use default args DROP FUNCTION IF EXISTS ST_AsKML(geography); -- changed to use default args DROP FUNCTION IF EXISTS ST_AsKML(int4, geometry, int4); -- changed to use default args DROP FUNCTION IF EXISTS ST_AsKML(int4, geography, int4); -- changed to use default args DROP FUNCTION IF EXISTS st_asx3d(geometry); -- this one changed to use default parameters so full function deals with it DROP FUNCTION IF EXISTS st_asx3d(geometry, int4); -- introduce variant with opts so get rid of other without ops DROP FUNCTION IF EXISTS st_assvg(geometry); -- changed to use default args DROP FUNCTION IF EXISTS st_assvg(geometry,int4); -- changed to use default args DROP FUNCTION IF EXISTS st_assvg(geography); -- changed to use default args DROP FUNCTION IF EXISTS st_assvg(geography,int4); -- changed to use default args DROP FUNCTION IF EXISTS st_box2d_overleft(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_overright(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_left(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_right(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_contain(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_contained(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_overlap(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_same(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_intersects(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_in(cstring); DROP FUNCTION IF EXISTS st_box2d_out(box2d); DROP FUNCTION IF EXISTS st_box2d(geometry); DROP FUNCTION IF EXISTS st_box2d(box3d); DROP FUNCTION IF EXISTS st_box3d(box2d); DROP FUNCTION IF EXISTS st_box(box3d); DROP FUNCTION IF EXISTS st_box3d(geometry); DROP FUNCTION IF EXISTS st_box(geometry); DROP FUNCTION IF EXISTS ST_ConcaveHull(geometry,float); -- this one changed to use default parameters DROP FUNCTION IF EXISTS st_text(geometry); DROP FUNCTION IF EXISTS st_geometry(box2d); DROP FUNCTION IF EXISTS st_geometry(box3d); DROP FUNCTION IF EXISTS st_geometry(text); DROP FUNCTION IF EXISTS st_geometry(bytea); DROP FUNCTION IF EXISTS st_bytea(geometry); DROP FUNCTION IF EXISTS st_addbbox(geometry); DROP FUNCTION IF EXISTS st_dropbbox(geometry); DROP FUNCTION IF EXISTS st_hasbbox(geometry); DROP FUNCTION IF EXISTS cache_bbox(); DROP FUNCTION IF EXISTS st_cache_bbox(); DROP FUNCTION IF EXISTS ST_GeoHash(geometry); -- changed to use default args DROP FUNCTION IF EXISTS st_length(geography); -- this one changed to use default parameters DROP FUNCTION IF EXISTS st_perimeter(geography); -- this one changed to use default parameters DROP FUNCTION IF EXISTS transform_geometry(geometry,text,text,int); DROP FUNCTION IF EXISTS collector(geometry, geometry); DROP FUNCTION IF EXISTS st_collector(geometry, geometry); DROP FUNCTION IF EXISTS geom_accum (geometry[],geometry); DROP FUNCTION IF EXISTS st_geom_accum (geometry[],geometry); DROP FUNCTION IF EXISTS collect_garray (geometry[]); DROP FUNCTION IF EXISTS st_collect_garray (geometry[]); DROP FUNCTION IF EXISTS geosnoop(geometry); DROP FUNCTION IF EXISTS jtsnoop(geometry); DROP FUNCTION IF EXISTS st_noop(geometry); DROP FUNCTION IF EXISTS st_max_distance(geometry, geometry); DROP FUNCTION IF EXISTS ST_MinimumBoundingCircle(geometry); --changed to use default parameters -- Drop internals that should never have existed -- DROP FUNCTION IF EXISTS st_geometry_analyze(internal); DROP FUNCTION IF EXISTS st_geometry_in(cstring); DROP FUNCTION IF EXISTS st_geometry_out(geometry); DROP FUNCTION IF EXISTS st_geometry_recv(internal); DROP FUNCTION IF EXISTS st_geometry_send(geometry); DROP FUNCTION IF EXISTS st_spheroid_in(cstring); DROP FUNCTION IF EXISTS st_spheroid_out(spheroid); DROP FUNCTION IF EXISTS st_geometry_lt(geometry, geometry); DROP FUNCTION IF EXISTS st_geometry_gt(geometry, geometry); DROP FUNCTION IF EXISTS st_geometry_ge(geometry, geometry); DROP FUNCTION IF EXISTS st_geometry_eq(geometry, geometry); DROP FUNCTION IF EXISTS st_geometry_cmp(geometry, geometry); DROP FUNCTION IF EXISTS SnapToGrid(geometry, float8, float8); DROP FUNCTION IF EXISTS geometry_gist_sel_2d (internal, oid, internal, int4); DROP FUNCTION IF EXISTS geometry_gist_joinsel_2d(internal, oid, internal, smallint); DROP FUNCTION IF EXISTS geography_gist_selectivity (internal, oid, internal, int4); DROP FUNCTION IF EXISTS geography_gist_join_selectivity(internal, oid, internal, smallint); DROP FUNCTION IF EXISTS ST_AsBinary(text); -- deprecated in 2.0 DROP FUNCTION IF EXISTS postgis_uses_stats(); -- deprecated in 2.0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/postgis.sql.in������������������������������������������������������0000644�0000000�0000000�00000521037�12302617003�020070� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: postgis.sql.in 12272 2014-02-24 10:25:07Z strk $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- Copyright 2001-2003 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- WARNING: Any change in this file must be evaluated for compatibility. -- Changes cleanly handled by postgis_upgrade.sql are fine, -- other changes will require a bump in Major version. -- Currently only function replaceble by CREATE OR REPLACE -- are cleanly handled. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include "sqldefines.h" SET client_min_messages TO warning; -- INSTALL VERSION: POSTGIS_LIB_VERSION BEGIN; -- Check that no other postgis is installed DO $$ DECLARE rec RECORD; BEGIN FOR rec IN SELECT n.nspname, p.proname FROM pg_proc p, pg_namespace n WHERE p.proname = 'postgis_version' AND p.pronamespace = n.oid LOOP RAISE EXCEPTION 'PostGIS is already installed in schema ''%'', uninstall it first', rec.nspname; END LOOP; END $$ LANGUAGE 'plpgsql'; -- Let the user know about a deprecated signature and its new name, if any CREATE OR REPLACE FUNCTION _postgis_deprecate(oldname text, newname text, version text) RETURNS void AS $$ DECLARE curver_text text; BEGIN -- -- Raises a NOTICE if it was deprecated in this version, -- a WARNING if in a previous version (only up to minor version checked) -- curver_text := POSTGIS_LIB_VERSION; IF split_part(curver_text,'.',1)::int > split_part(version,'.',1)::int OR ( split_part(curver_text,'.',1) = split_part(version,'.',1) AND split_part(curver_text,'.',2) != split_part(version,'.',2) ) THEN RAISE WARNING '% signature was deprecated in %. Please use %', oldname, version, newname; ELSE RAISE DEBUG '% signature was deprecated in %. Please use %', oldname, version, newname; END IF; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------- -- SPHEROID TYPE ------------------------------------------------------------------- CREATE OR REPLACE FUNCTION spheroid_in(cstring) RETURNS spheroid AS 'MODULE_PATHNAME','ellipsoid_in' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION spheroid_out(spheroid) RETURNS cstring AS 'MODULE_PATHNAME','ellipsoid_out' LANGUAGE 'c' IMMUTABLE STRICT; CREATE TYPE spheroid ( alignment = double, internallength = 65, input = spheroid_in, output = spheroid_out ); ------------------------------------------------------------------- -- GEOMETRY TYPE (lwgeom) ------------------------------------------------------------------- CREATE OR REPLACE FUNCTION geometry_in(cstring) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_in' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_out(geometry) RETURNS cstring AS 'MODULE_PATHNAME','LWGEOM_out' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_typmod_in(cstring[]) RETURNS integer AS 'MODULE_PATHNAME','geometry_typmod_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_typmod_out(integer) RETURNS cstring AS 'MODULE_PATHNAME','postgis_typmod_out' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_analyze(internal) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_analyze_nd' LANGUAGE 'c' VOLATILE STRICT; CREATE OR REPLACE FUNCTION geometry_recv(internal) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_recv' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_send(geometry) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_send' LANGUAGE 'c' IMMUTABLE STRICT; CREATE TYPE geometry ( internallength = variable, input = geometry_in, output = geometry_out, send = geometry_send, receive = geometry_recv, typmod_in = geometry_typmod_in, typmod_out = geometry_typmod_out, delimiter = ':', alignment = double, analyze = geometry_analyze, storage = main ); -- Availability: 2.0.0 -- Special cast for enforcing the typmod restrictions CREATE OR REPLACE FUNCTION geometry(geometry, integer, boolean) RETURNS geometry AS 'MODULE_PATHNAME','geometry_enforce_typmod' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE CAST (geometry AS geometry) WITH FUNCTION geometry(geometry, integer, boolean) AS IMPLICIT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION geometry(point) RETURNS geometry AS 'MODULE_PATHNAME','point_to_geometry' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION point(geometry) RETURNS point AS 'MODULE_PATHNAME','geometry_to_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION geometry(path) RETURNS geometry AS 'MODULE_PATHNAME','path_to_geometry' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION path(geometry) RETURNS path AS 'MODULE_PATHNAME','geometry_to_path' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION geometry(polygon) RETURNS geometry AS 'MODULE_PATHNAME','polygon_to_geometry' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION polygon(geometry) RETURNS polygon AS 'MODULE_PATHNAME','geometry_to_polygon' LANGUAGE 'c' IMMUTABLE STRICT; CREATE CAST (geometry AS point) WITH FUNCTION point(geometry); CREATE CAST (point AS geometry) WITH FUNCTION geometry(point); CREATE CAST (geometry AS path) WITH FUNCTION path(geometry); CREATE CAST (path AS geometry) WITH FUNCTION geometry(path); CREATE CAST (geometry AS polygon) WITH FUNCTION polygon(geometry); CREATE CAST (polygon AS geometry) WITH FUNCTION geometry(polygon); ------------------------------------------------------------------- -- BOX3D TYPE -- Point coordinate data access ------------------------------------------- -- PostGIS equivalent function: X(geometry) CREATE OR REPLACE FUNCTION ST_X(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_x_point' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: Y(geometry) CREATE OR REPLACE FUNCTION ST_Y(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_y_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Z(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_z_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_M(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_m_point' LANGUAGE 'c' IMMUTABLE STRICT; ------------------------------------------- ------------------------------------------------------------------- CREATE OR REPLACE FUNCTION box3d_in(cstring) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_in' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d_out(box3d) RETURNS cstring AS 'MODULE_PATHNAME', 'BOX3D_out' LANGUAGE 'c' IMMUTABLE STRICT; CREATE TYPE box3d ( alignment = double, internallength = 52, input = box3d_in, output = box3d_out ); ----------------------------------------------------------------------- -- BOX2D ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION box2d_in(cstring) RETURNS box2d AS 'MODULE_PATHNAME','BOX2D_in' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box2d_out(box2d) RETURNS cstring AS 'MODULE_PATHNAME','BOX2D_out' LANGUAGE 'c' IMMUTABLE STRICT; CREATE TYPE box2d ( internallength = 65, input = box2d_in, output = box2d_out, storage = plain ); ------------------------------------------------------------------- -- BOX2DF TYPE (INTERNAL ONLY) ------------------------------------------------------------------- -- -- Box2Df type is used by the GiST index bindings. -- In/out functions are stubs, as all access should be internal. --- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION box2df_in(cstring) RETURNS box2df AS 'MODULE_PATHNAME','box2df_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION box2df_out(box2df) RETURNS cstring AS 'MODULE_PATHNAME','box2df_out' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE TYPE box2df ( internallength = 16, input = box2df_in, output = box2df_out, storage = plain, alignment = double ); ------------------------------------------------------------------- -- GIDX TYPE (INTERNAL ONLY) ------------------------------------------------------------------- -- -- GIDX type is used by the N-D and GEOGRAPHY GiST index bindings. -- In/out functions are stubs, as all access should be internal. --- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION gidx_in(cstring) RETURNS gidx AS 'MODULE_PATHNAME','gidx_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION gidx_out(gidx) RETURNS cstring AS 'MODULE_PATHNAME','gidx_out' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE TYPE gidx ( internallength = variable, input = gidx_in, output = gidx_out, storage = plain, alignment = double ); ------------------------------------------------------------------- -- BTREE indexes ------------------------------------------------------------------- CREATE OR REPLACE FUNCTION geometry_lt(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_lt' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_le(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_le' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_gt(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_gt' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_ge(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_ge' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_eq(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_eq' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_cmp(geom1 geometry, geom2 geometry) RETURNS integer AS 'MODULE_PATHNAME', 'lwgeom_cmp' LANGUAGE 'c' IMMUTABLE STRICT; -- -- Sorting operators for Btree -- CREATE OPERATOR < ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR <= ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR = ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_eq, COMMUTATOR = '=', -- we might implement a faster negator here RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR >= ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR > ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR CLASS btree_geometry_ops DEFAULT FOR TYPE geometry USING btree AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 geometry_cmp (geom1 geometry, geom2 geometry); ----------------------------------------------------------------------------- -- GiST 2D GEOMETRY-over-GSERIALIZED INDEX ----------------------------------------------------------------------------- -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- GiST Support Functions -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_distance_2d(internal,geometry,int4) RETURNS float8 AS 'MODULE_PATHNAME' ,'gserialized_gist_distance_2d' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_consistent_2d(internal,geometry,int4) RETURNS bool AS 'MODULE_PATHNAME' ,'gserialized_gist_consistent_2d' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_compress_2d(internal) RETURNS internal AS 'MODULE_PATHNAME','gserialized_gist_compress_2d' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_penalty_2d(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_penalty_2d' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_picksplit_2d(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_picksplit_2d' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_union_2d(bytea, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_union_2d' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_same_2d(geom1 geometry, geom2 geometry, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_same_2d' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_decompress_2d(internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_decompress_2d' LANGUAGE 'c'; ----------------------------------------------------------------------------- -- Availability: 2.1.0 -- Given a table, column and query geometry, returns the estimate of what proportion -- of the table would be returned by a query using the &&/&&& operators. The mode -- changes whether the estimate is in x/y only or in all available dimensions. CREATE OR REPLACE FUNCTION _postgis_selectivity(tbl regclass, att_name text, geom geometry, mode text default '2') RETURNS float8 AS 'MODULE_PATHNAME', '_postgis_gserialized_sel' LANGUAGE 'c' STRICT; -- Availability: 2.1.0 -- Given a two tables and columns, returns estimate of the proportion of rows -- a &&/&&& join will return relative to the number of rows an unconstrained -- table join would return. Mode flips result between evaluation in x/y only -- and evaluation in all available dimensions. CREATE OR REPLACE FUNCTION _postgis_join_selectivity(regclass, text, regclass, text, text default '2') RETURNS float8 AS 'MODULE_PATHNAME', '_postgis_gserialized_joinsel' LANGUAGE 'c' STRICT; -- Availability: 2.1.0 -- Given a table and a column, returns the statistics information stored by -- PostgreSQL, in a JSON text form. Mode determines whether the 2D statistics -- or the ND statistics are returned. CREATE OR REPLACE FUNCTION _postgis_stats(tbl regclass, att_name text, text default '2') RETURNS text AS 'MODULE_PATHNAME', '_postgis_gserialized_stats' LANGUAGE 'c' STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION gserialized_gist_sel_2d (internal, oid, internal, int4) RETURNS float8 AS 'MODULE_PATHNAME', 'gserialized_gist_sel_2d' LANGUAGE 'c'; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION gserialized_gist_sel_nd (internal, oid, internal, int4) RETURNS float8 AS 'MODULE_PATHNAME', 'gserialized_gist_sel_nd' LANGUAGE 'c'; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION gserialized_gist_joinsel_2d (internal, oid, internal, smallint) RETURNS float8 AS 'MODULE_PATHNAME', 'gserialized_gist_joinsel_2d' LANGUAGE 'c'; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION gserialized_gist_joinsel_nd (internal, oid, internal, smallint) RETURNS float8 AS 'MODULE_PATHNAME', 'gserialized_gist_joinsel_nd' LANGUAGE 'c'; ----------------------------------------------------------------------------- -- GEOMETRY Operators ----------------------------------------------------------------------------- -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- 2D GEOMETRY Operators -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_overlaps(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME' ,'gserialized_overlaps_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR && ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overlaps, COMMUTATOR = '&&', RESTRICT = gserialized_gist_sel_2d, JOIN = gserialized_gist_joinsel_2d ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_same(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME' ,'gserialized_same_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR ~= ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_same, RESTRICT = contsel, JOIN = contjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_distance_centroid(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME' ,'gserialized_distance_centroid_2d' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_distance_box(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME' ,'gserialized_distance_box_2d' LANGUAGE 'c' IMMUTABLE STRICT; #if POSTGIS_PGSQL_VERSION >= 91 CREATE OPERATOR <-> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_distance_centroid, COMMUTATOR = '<->' ); CREATE OPERATOR <#> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_distance_box, COMMUTATOR = '<#>' ); #endif -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_contains(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_contains_2d' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_within(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_within_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR @ ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_within, COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR ~ ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_contains, COMMUTATOR = '@', RESTRICT = contsel, JOIN = contjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_left(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_left_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR << ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_left, COMMUTATOR = '>>', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_overleft(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_overleft_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR &< ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overleft, COMMUTATOR = '&>', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_below(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_below_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR <<| ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_below, COMMUTATOR = '|>>', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_overbelow(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_overbelow_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR &<| ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overbelow, COMMUTATOR = '|&>', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_overright(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_overright_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR &> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overright, COMMUTATOR = '&<', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_right(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_right_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR >> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_right, COMMUTATOR = '<<', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_overabove(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_overabove_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR |&> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overabove, COMMUTATOR = '&<|', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_above(geom1 geometry, geom2 geometry) RETURNS bool AS 'MODULE_PATHNAME', 'gserialized_above_2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OPERATOR |>> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_above, COMMUTATOR = '<<|', RESTRICT = positionsel, JOIN = positionjoinsel ); -- Availability: 2.0.0 CREATE OPERATOR CLASS gist_geometry_ops_2d DEFAULT FOR TYPE geometry USING GIST AS STORAGE box2df, OPERATOR 1 << , OPERATOR 2 &< , OPERATOR 3 && , OPERATOR 4 &> , OPERATOR 5 >> , OPERATOR 6 ~= , OPERATOR 7 ~ , OPERATOR 8 @ , OPERATOR 9 &<| , OPERATOR 10 <<| , OPERATOR 11 |>> , OPERATOR 12 |&> , #if POSTGIS_PGSQL_VERSION >= 91 OPERATOR 13 <-> FOR ORDER BY pg_catalog.float_ops, OPERATOR 14 <#> FOR ORDER BY pg_catalog.float_ops, FUNCTION 8 geometry_gist_distance_2d (internal, geometry, int4), #endif FUNCTION 1 geometry_gist_consistent_2d (internal, geometry, int4), FUNCTION 2 geometry_gist_union_2d (bytea, internal), FUNCTION 3 geometry_gist_compress_2d (internal), FUNCTION 4 geometry_gist_decompress_2d (internal), FUNCTION 5 geometry_gist_penalty_2d (internal, internal, internal), FUNCTION 6 geometry_gist_picksplit_2d (internal, internal), FUNCTION 7 geometry_gist_same_2d (geom1 geometry, geom2 geometry, internal); ----------------------------------------------------------------------------- -- GiST ND GEOMETRY-over-GSERIALIZED ----------------------------------------------------------------------------- -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- GiST Support Functions -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_consistent_nd(internal,geometry,int4) RETURNS bool AS 'MODULE_PATHNAME' ,'gserialized_gist_consistent' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_compress_nd(internal) RETURNS internal AS 'MODULE_PATHNAME','gserialized_gist_compress' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_penalty_nd(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_penalty' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_picksplit_nd(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_picksplit' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_union_nd(bytea, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_union' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_same_nd(geometry, geometry, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_same' LANGUAGE 'c'; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_gist_decompress_nd(internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_decompress' LANGUAGE 'c'; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- N-D GEOMETRY Operators -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geometry_overlaps_nd(geometry, geometry) RETURNS boolean AS 'MODULE_PATHNAME' ,'gserialized_overlaps' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OPERATOR &&& ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overlaps_nd, COMMUTATOR = '&&&', RESTRICT = gserialized_gist_sel_nd, JOIN = gserialized_gist_joinsel_nd ); -- Availability: 2.0.0 CREATE OPERATOR CLASS gist_geometry_ops_nd FOR TYPE geometry USING GIST AS STORAGE gidx, OPERATOR 3 &&& , -- OPERATOR 6 ~= , -- OPERATOR 7 ~ , -- OPERATOR 8 @ , FUNCTION 1 geometry_gist_consistent_nd (internal, geometry, int4), FUNCTION 2 geometry_gist_union_nd (bytea, internal), FUNCTION 3 geometry_gist_compress_nd (internal), FUNCTION 4 geometry_gist_decompress_nd (internal), FUNCTION 5 geometry_gist_penalty_nd (internal, internal, internal), FUNCTION 6 geometry_gist_picksplit_nd (internal, internal), FUNCTION 7 geometry_gist_same_nd (geometry, geometry, internal); ----------------------------------------------------------------------------- -- Affine transforms ----------------------------------------------------------------------------- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_affine' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8) RETURNS geometry AS 'SELECT ST_Affine($1, $2, $3, 0, $4, $5, 0, 0, 0, 1, $6, $7, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Rotate(geometry,float8) RETURNS geometry AS 'SELECT ST_Affine($1, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0, 1, 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_Rotate(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT ST_Affine($1, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0, 1, $3 - cos($2) * $3 + sin($2) * $4, $4 - sin($2) * $3 - cos($2) * $4, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_Rotate(geometry,float8,geometry) RETURNS geometry AS 'SELECT ST_Affine($1, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0, 1, ST_X($3) - cos($2) * ST_X($3) + sin($2) * ST_Y($3), ST_Y($3) - sin($2) * ST_X($3) - cos($2) * ST_Y($3), 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RotateZ(geometry,float8) RETURNS geometry AS 'SELECT ST_Rotate($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RotateX(geometry,float8) RETURNS geometry AS 'SELECT ST_Affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RotateY(geometry,float8) RETURNS geometry AS 'SELECT ST_Affine($1, cos($2), 0, sin($2), 0, 1, 0, -sin($2), 0, cos($2), 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Translate(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT ST_Affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Translate(geometry,float8,float8) RETURNS geometry AS 'SELECT ST_Translate($1, $2, $3, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Scale(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT ST_Affine($1, $2, 0, 0, 0, $3, 0, 0, 0, $4, 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Scale(geometry,float8,float8) RETURNS geometry AS 'SELECT ST_Scale($1, $2, $3, 1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Transscale(geometry,float8,float8,float8,float8) RETURNS geometry AS 'SELECT ST_Affine($1, $4, 0, 0, 0, $5, 0, 0, 0, 1, $2 * $4, $3 * $5, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Shift_Longitude(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_longitude_shift' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------------- -- BOX3D FUNCTIONS ----------------------------------------------------------------------------- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_XMin(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_xmin' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_YMin(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_ymin' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_ZMin(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_zmin' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_XMax(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_xmax' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_YMax(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_ymax' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_ZMax(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_zmax' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------------- -- BOX2D FUNCTIONS ----------------------------------------------------------------------------- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_expand(box2d,float8) RETURNS box2d AS 'MODULE_PATHNAME', 'BOX2D_expand' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_getbbox(geometry) RETURNS box2d AS 'MODULE_PATHNAME','LWGEOM_to_BOX2D' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakeBox2d(geom1 geometry, geom2 geometry) RETURNS box2d AS 'MODULE_PATHNAME', 'BOX2D_construct' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Combine_BBox(box2d,geometry) RETURNS box2d AS 'MODULE_PATHNAME', 'BOX2D_combine' LANGUAGE 'c' IMMUTABLE; ----------------------------------------------------------------------- -- ST_ESTIMATED_EXTENT( <schema name>, <table name>, <column name> ) ----------------------------------------------------------------------- -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_EstimatedExtent(text,text,text) RETURNS box2d AS 'MODULE_PATHNAME', 'gserialized_estimated_extent' LANGUAGE 'c' IMMUTABLE STRICT SECURITY DEFINER; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_estimated_extent(text,text,text) RETURNS box2d AS $$ SELECT _postgis_deprecate('ST_Estimated_Extent', 'ST_EstimatedExtent', '2.1.0'); -- We use security invoker instead of security definer -- to prevent malicious injection of a different same named function SELECT ST_EstimatedExtent($1, $2, $3); $$ LANGUAGE 'sql' IMMUTABLE STRICT SECURITY INVOKER; ----------------------------------------------------------------------- -- ST_ESTIMATED_EXTENT( <table name>, <column name> ) ----------------------------------------------------------------------- -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_EstimatedExtent(text,text) RETURNS box2d AS 'MODULE_PATHNAME', 'gserialized_estimated_extent' LANGUAGE 'c' IMMUTABLE STRICT SECURITY DEFINER; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_estimated_extent(text,text) RETURNS box2d AS $$ SELECT _postgis_deprecate('ST_Estimated_Extent', 'ST_EstimatedExtent', '2.1.0'); -- We use security invoker instead of security definer -- to prevent malicious injection of a same named different function -- that would be run under elevated permissions SELECT ST_EstimatedExtent($1, $2); $$ LANGUAGE 'sql' IMMUTABLE STRICT SECURITY INVOKER; ----------------------------------------------------------------------- -- FIND_EXTENT( <schema name>, <table name>, <column name> ) ----------------------------------------------------------------------- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_find_extent(text,text,text) RETURNS box2d AS $$ DECLARE schemaname alias for $1; tablename alias for $2; columnname alias for $3; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT ST_Extent("' || columnname || '") As extent FROM "' || schemaname || '"."' || tablename || '"' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- FIND_EXTENT( <table name>, <column name> ) ----------------------------------------------------------------------- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_find_extent(text,text) RETURNS box2d AS $$ DECLARE tablename alias for $1; columnname alias for $2; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT ST_Extent("' || columnname || '") As extent FROM "' || tablename || '"' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------- -- other lwgeom functions ------------------------------------------- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_addbbox(geometry) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_addBBOX' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_dropbbox(geometry) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_dropBBOX' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_hasbbox(geometry) RETURNS bool AS 'MODULE_PATHNAME', 'LWGEOM_hasBBOX' LANGUAGE 'c' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- DEBUG ------------------------------------------------------------------------ -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_mem_size(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_mem_size' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_summary(geometry) RETURNS text AS 'MODULE_PATHNAME', 'LWGEOM_summary' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Npoints(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_npoints' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_nrings(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_nrings' LANGUAGE 'c' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- Measures ------------------------------------------------------------------------ -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_3DLength(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Length2d(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: length2d(geometry) CREATE OR REPLACE FUNCTION ST_Length(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- this is a fake (for back-compatibility) -- uses 3d if 3d is available, 2d otherwise -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_3DLength_spheroid(geometry, spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_length_spheroid(geometry, spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_length2d_spheroid(geometry, spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_3DPerimeter(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_perimeter2d(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: perimeter2d(geometry) CREATE OR REPLACE FUNCTION ST_Perimeter(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 1.3.4 CREATE OR REPLACE FUNCTION ST_area2d(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: area(geometry) CREATE OR REPLACE FUNCTION ST_Area(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME','area' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_distance_spheroid(geom1 geometry, geom2 geometry,spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Minimum distance. 2d only. -- PostGIS equivalent function: distance(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION ST_Distance(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'distance' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_point_inside_circle(geometry,float8,float8,float8) RETURNS bool AS 'MODULE_PATHNAME', 'LWGEOM_inside_circle_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_azimuth(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_azimuth' LANGUAGE 'c' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- MISC ------------------------------------------------------------------------ -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_Force2D(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_2d' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_force_2d(geometry) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Force_2d', 'ST_Force2D', '2.1.0'); SELECT ST_Force2D($1); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_Force3DZ(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_force_3dz(geometry) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Force_3dz', 'ST_Force3DZ', '2.1.0'); SELECT ST_Force3DZ($1); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_Force3D(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_force_3d(geometry) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Force_3d', 'ST_Force3D', '2.1.0'); SELECT ST_Force3D($1); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_Force3DM(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dm' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_force_3dm(geometry) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Force_3dm', 'ST_Force3DM', '2.1.0'); SELECT ST_Force3DM($1); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_Force4D(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_4d' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_force_4d(geometry) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Force_4d', 'ST_Force4D', '2.1.0'); SELECT ST_Force4D($1); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_ForceCollection(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_collection' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_force_collection(geometry) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Force_Collection', 'ST_ForceCollection', '2.1.0'); SELECT ST_ForceCollection($1); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_CollectionExtract(geometry, integer) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_CollectionExtract' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_CollectionHomogenize(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_CollectionHomogenize' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Multi(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_multi' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_ForceSFS(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_sfs' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_ForceSFS(geometry, version text) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_sfs' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Expand(box3d,float8) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_expand' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Expand(geometry,float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_expand' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: envelope(geometry) CREATE OR REPLACE FUNCTION ST_Envelope(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_envelope' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Reverse(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_reverse' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_ForceRHR(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_clockwise_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_noop(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_noop' LANGUAGE 'c' VOLATILE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION ST_zmflag(geometry) RETURNS smallint AS 'MODULE_PATHNAME', 'LWGEOM_zmflag' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_NDims(geometry) RETURNS smallint AS 'MODULE_PATHNAME', 'LWGEOM_ndims' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsEWKT(geometry) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asEWKT' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsEWKB(geometry) RETURNS BYTEA AS 'MODULE_PATHNAME','WKBFromLWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsHEXEWKB(geometry) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsHEXEWKB(geometry, text) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsEWKB(geometry,text) RETURNS bytea AS 'MODULE_PATHNAME','WKBFromLWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_AsLatLonText(geometry, text) RETURNS text AS 'MODULE_PATHNAME','LWGEOM_to_latlon' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_AsLatLonText(geometry) RETURNS text AS $$ SELECT ST_AsLatLonText($1, '') $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromEWKB(bytea) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOMFromWKB' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromEWKB(bytea) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOMFromWKB' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromEWKT(text) RETURNS geometry AS 'MODULE_PATHNAME','parse_WKT_lwgeom' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromEWKT(text) RETURNS geometry AS 'MODULE_PATHNAME','parse_WKT_lwgeom' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_cache_bbox() RETURNS trigger AS 'MODULE_PATHNAME', 'cache_bbox' LANGUAGE 'c'; ------------------------------------------------------------------------ -- CONSTRUCTORS ------------------------------------------------------------------------ -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePoint(float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePoint(float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePoint(float8, float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.3.4 CREATE OR REPLACE FUNCTION ST_MakePointM(float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint3dm' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_3DMakeBox(geom1 geometry, geom2 geometry) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_construct' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_MakeLine (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineFromMultiPoint(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_line_from_mpoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakeLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makeline' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AddPoint(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_addpoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AddPoint(geom1 geometry, geom2 geometry, integer) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_addpoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RemovePoint(geometry, integer) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_removepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SetPoint(geometry, integer, geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_setpoint_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 -- Availability: 2.0.0 - made srid optional CREATE OR REPLACE FUNCTION ST_MakeEnvelope(float8, float8, float8, float8, integer DEFAULT 0) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_MakeEnvelope' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePolygon(geometry, geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoly' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePolygon(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoly' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_BuildArea(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_BuildArea' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_Polygonize (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'polygonize_garray' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineMerge(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'linemerge' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE TYPE geometry_dump AS ( path integer[], geom geometry ); -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Dump(geometry) RETURNS SETOF geometry_dump AS 'MODULE_PATHNAME', 'LWGEOM_dump' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_DumpRings(geometry) RETURNS SETOF geometry_dump AS 'MODULE_PATHNAME', 'LWGEOM_dump_rings' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- _ST_DumpPoints() ----------------------------------------------------------------------- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_DumpPoints(the_geom geometry, cur_path integer[]) RETURNS SETOF geometry_dump AS $$ DECLARE tmp geometry_dump; tmp2 geometry_dump; nb_points integer; nb_geom integer; i integer; j integer; g geometry; BEGIN -- RAISE DEBUG '%,%', cur_path, ST_GeometryType(the_geom); -- Special case collections : iterate and return the DumpPoints of the geometries IF (ST_IsCollection(the_geom)) THEN i = 1; FOR tmp2 IN SELECT (ST_Dump(the_geom)).* LOOP FOR tmp IN SELECT * FROM _ST_DumpPoints(tmp2.geom, cur_path || tmp2.path) LOOP RETURN NEXT tmp; END LOOP; i = i + 1; END LOOP; RETURN; END IF; -- Special case (POLYGON) : return the points of the rings of a polygon IF (ST_GeometryType(the_geom) = 'ST_Polygon') THEN FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP RETURN NEXT tmp; END LOOP; j := ST_NumInteriorRings(the_geom); FOR i IN 1..j LOOP FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_InteriorRingN(the_geom, i), cur_path || ARRAY[i+1]) LOOP RETURN NEXT tmp; END LOOP; END LOOP; RETURN; END IF; -- Special case (TRIANGLE) : return the points of the external rings of a TRIANGLE IF (ST_GeometryType(the_geom) = 'ST_Triangle') THEN FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP RETURN NEXT tmp; END LOOP; RETURN; END IF; -- Special case (POINT) : return the point IF (ST_GeometryType(the_geom) = 'ST_Point') THEN tmp.path = cur_path || ARRAY[1]; tmp.geom = the_geom; RETURN NEXT tmp; RETURN; END IF; -- Use ST_NumPoints rather than ST_NPoints to have a NULL value if the_geom isn't -- a LINESTRING, CIRCULARSTRING. SELECT ST_NumPoints(the_geom) INTO nb_points; -- This should never happen IF (nb_points IS NULL) THEN RAISE EXCEPTION 'Unexpected error while dumping geometry %', ST_AsText(the_geom); END IF; FOR i IN 1..nb_points LOOP tmp.path = cur_path || ARRAY[i]; tmp.geom := ST_PointN(the_geom, i); RETURN NEXT tmp; END LOOP; END $$ LANGUAGE plpgsql; ----------------------------------------------------------------------- -- ST_DumpPoints() ----------------------------------------------------------------------- -- This function mimicks that of ST_Dump for collections, but this function -- that returns a path and all the points that make up a particular geometry. -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_DumpPoints(geometry) RETURNS SETOF geometry_dump AS 'MODULE_PATHNAME', 'LWGEOM_dumppoints' LANGUAGE 'c' IMMUTABLE STRICT; ------------------------------------------------------------------- -- SPATIAL_REF_SYS ------------------------------------------------------------------- CREATE TABLE spatial_ref_sys ( srid integer not null primary key check (srid > 0 and srid <= SRID_USR_MAX), auth_name varchar(256), auth_srid integer, srtext varchar(2048), proj4text varchar(2048) ); ----------------------------------------------------------------------- -- POPULATE_GEOMETRY_COLUMNS() ----------------------------------------------------------------------- -- Truncates and refills the geometry_columns table from all tables and -- views in the database that contain geometry columns. This function -- is a simple wrapper for populate_geometry_columns(oid). In essence, -- this function ensures every geometry column in the database has the -- appropriate spatial contraints (for tables) and exists in the -- geometry_columns table. -- Availability: 1.4.0 -- Revised: 2.0.0 -- no longer deletes from geometry_columns -- Has new use_typmod option that defaults to true. -- If use typmod is set to false will use old constraint behavior. -- Will only touch table missing typmod or geometry constraints ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION populate_geometry_columns(use_typmod boolean DEFAULT true) RETURNS text AS $$ DECLARE inserted integer; oldcount integer; probed integer; stale integer; gcs RECORD; gc RECORD; gsrid integer; gndims integer; gtype text; query text; gc_is_valid boolean; BEGIN SELECT count(*) INTO oldcount FROM geometry_columns; inserted := 0; -- Count the number of geometry columns in all tables and views SELECT count(DISTINCT c.oid) INTO probed FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE (c.relkind = 'r' OR c.relkind = 'v') AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND n.nspname NOT ILIKE 'pg_temp%' AND c.relname != 'raster_columns' ; -- Iterate through all non-dropped geometry columns RAISE DEBUG 'Processing Tables.....'; FOR gcs IN SELECT DISTINCT ON (c.oid) c.oid, n.nspname, c.relname FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE c.relkind = 'r' AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND n.nspname NOT ILIKE 'pg_temp%' AND c.relname != 'raster_columns' LOOP inserted := inserted + populate_geometry_columns(gcs.oid, use_typmod); END LOOP; IF oldcount > inserted THEN stale = oldcount-inserted; ELSE stale = 0; END IF; RETURN 'probed:' ||probed|| ' inserted:'||inserted; END $$ LANGUAGE 'plpgsql' VOLATILE; ----------------------------------------------------------------------- -- POPULATE_GEOMETRY_COLUMNS(tbl_oid oid) ----------------------------------------------------------------------- -- DELETEs from and reINSERTs into the geometry_columns table all entries -- associated with the oid of a particular table or view. -- -- If the provided oid is for a table, this function tries to determine -- the srid, dimension, and geometry type of the all geometries -- in the table, adding contraints as necessary to the table. If -- successful, an appropriate row is inserted into the geometry_columns -- table, otherwise, the exception is caught and an error notice is -- raised describing the problem. (This is so the wrapper function -- populate_geometry_columns() can apply spatial constraints to all -- geometry columns across an entire database at once without erroring -- out) -- -- If the provided oid is for a view, as with a table oid, this function -- tries to determine the srid, dimension, and type of all the geometries -- in the view, inserting appropriate entries into the geometry_columns -- table. -- Availability: 1.4.0 ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION populate_geometry_columns(tbl_oid oid, use_typmod boolean DEFAULT true) RETURNS integer AS $$ DECLARE gcs RECORD; gc RECORD; gc_old RECORD; gsrid integer; gndims integer; gtype text; query text; gc_is_valid boolean; inserted integer; constraint_successful boolean := false; BEGIN inserted := 0; -- Iterate through all geometry columns in this table FOR gcs IN SELECT n.nspname, c.relname, a.attname FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE c.relkind = 'r' AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND n.nspname NOT ILIKE 'pg_temp%' AND c.oid = tbl_oid LOOP RAISE DEBUG 'Processing column %.%.%', gcs.nspname, gcs.relname, gcs.attname; gc_is_valid := true; -- Find the srid, coord_dimension, and type of current geometry -- in geometry_columns -- which is now a view SELECT type, srid, coord_dimension INTO gc_old FROM geometry_columns WHERE f_table_schema = gcs.nspname AND f_table_name = gcs.relname AND f_geometry_column = gcs.attname; IF upper(gc_old.type) = 'GEOMETRY' THEN -- This is an unconstrained geometry we need to do something -- We need to figure out what to set the type by inspecting the data EXECUTE 'SELECT st_srid(' || quote_ident(gcs.attname) || ') As srid, GeometryType(' || quote_ident(gcs.attname) || ') As type, ST_NDims(' || quote_ident(gcs.attname) || ') As dims ' || ' FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1;' INTO gc; IF gc IS NULL THEN -- there is no data so we can not determine geometry type RAISE WARNING 'No data in table %.%, so no information to determine geometry type and srid', gcs.nspname, gcs.relname; RETURN 0; END IF; gsrid := gc.srid; gtype := gc.type; gndims := gc.dims; IF use_typmod THEN BEGIN EXECUTE 'ALTER TABLE ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' ALTER COLUMN ' || quote_ident(gcs.attname) || ' TYPE geometry(' || postgis_type_name(gtype, gndims, true) || ', ' || gsrid::text || ') '; inserted := inserted + 1; EXCEPTION WHEN invalid_parameter_value OR feature_not_supported THEN RAISE WARNING 'Could not convert ''%'' in ''%.%'' to use typmod with srid %, type %: %', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname), gsrid, postgis_type_name(gtype, gndims, true), SQLERRM; gc_is_valid := false; END; ELSE -- Try to apply srid check to column constraint_successful = false; IF (gsrid > 0 AND postgis_constraint_srid(gcs.nspname, gcs.relname,gcs.attname) IS NULL ) THEN BEGIN EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' ADD CONSTRAINT ' || quote_ident('enforce_srid_' || gcs.attname) || ' CHECK (st_srid(' || quote_ident(gcs.attname) || ') = ' || gsrid || ')'; constraint_successful := true; EXCEPTION WHEN check_violation THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not apply constraint CHECK (st_srid(%) = %)', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname), quote_ident(gcs.attname), gsrid; gc_is_valid := false; END; END IF; -- Try to apply ndims check to column IF (gndims IS NOT NULL AND postgis_constraint_dims(gcs.nspname, gcs.relname,gcs.attname) IS NULL ) THEN BEGIN EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' ADD CONSTRAINT ' || quote_ident('enforce_dims_' || gcs.attname) || ' CHECK (st_ndims(' || quote_ident(gcs.attname) || ') = '||gndims||')'; constraint_successful := true; EXCEPTION WHEN check_violation THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not apply constraint CHECK (st_ndims(%) = %)', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname), quote_ident(gcs.attname), gndims; gc_is_valid := false; END; END IF; -- Try to apply geometrytype check to column IF (gtype IS NOT NULL AND postgis_constraint_type(gcs.nspname, gcs.relname,gcs.attname) IS NULL ) THEN BEGIN EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' ADD CONSTRAINT ' || quote_ident('enforce_geotype_' || gcs.attname) || ' CHECK ((geometrytype(' || quote_ident(gcs.attname) || ') = ' || quote_literal(gtype) || ') OR (' || quote_ident(gcs.attname) || ' IS NULL))'; constraint_successful := true; EXCEPTION WHEN check_violation THEN -- No geometry check can be applied. This column contains a number of geometry types. RAISE WARNING 'Could not add geometry type check (%) to table column: %.%.%', gtype, quote_ident(gcs.nspname),quote_ident(gcs.relname),quote_ident(gcs.attname); END; END IF; --only count if we were successful in applying at least one constraint IF constraint_successful THEN inserted := inserted + 1; END IF; END IF; END IF; END LOOP; RETURN inserted; END $$ LANGUAGE 'plpgsql' VOLATILE; ----------------------------------------------------------------------- -- ADDGEOMETRYCOLUMN -- <catalogue>, <schema>, <table>, <column>, <srid>, <type>, <dim> ----------------------------------------------------------------------- -- -- Type can be one of GEOMETRY, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON, -- MULTIPOLYGON, LINESTRING, or MULTILINESTRING. -- -- Geometry types (except GEOMETRY) are checked for consistency using a CHECK constraint. -- Uses an ALTER TABLE command to add the geometry column to the table. -- Addes a row to geometry_columns. -- Addes a constraint on the table that all the geometries MUST have the same -- SRID. Checks the coord_dimension to make sure its between 0 and 3. -- Should also check the precision grid (future expansion). -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION AddGeometryColumn(catalog_name varchar,schema_name varchar,table_name varchar,column_name varchar,new_srid_in integer,new_type varchar,new_dim integer, use_typmod boolean DEFAULT true) RETURNS text AS $$ DECLARE rec RECORD; sr varchar; real_schema name; sql text; new_srid integer; BEGIN -- Verify geometry type IF (postgis_type_name(new_type,new_dim) IS NULL ) THEN RAISE EXCEPTION 'Invalid type name "%(%)" - valid ones are: POINT, MULTIPOINT, LINESTRING, MULTILINESTRING, POLYGON, MULTIPOLYGON, CIRCULARSTRING, COMPOUNDCURVE, MULTICURVE, CURVEPOLYGON, MULTISURFACE, GEOMETRY, GEOMETRYCOLLECTION, POINTM, MULTIPOINTM, LINESTRINGM, MULTILINESTRINGM, POLYGONM, MULTIPOLYGONM, CIRCULARSTRINGM, COMPOUNDCURVEM, MULTICURVEM CURVEPOLYGONM, MULTISURFACEM, TRIANGLE, TRIANGLEM, POLYHEDRALSURFACE, POLYHEDRALSURFACEM, TIN, TINM or GEOMETRYCOLLECTIONM', new_type, new_dim; RETURN 'fail'; END IF; -- Verify dimension IF ( (new_dim >4) OR (new_dim <2) ) THEN RAISE EXCEPTION 'invalid dimension'; RETURN 'fail'; END IF; IF ( (new_type LIKE '%M') AND (new_dim!=3) ) THEN RAISE EXCEPTION 'TypeM needs 3 dimensions'; RETURN 'fail'; END IF; -- Verify SRID IF ( new_srid_in > 0 ) THEN IF new_srid_in > SRID_USR_MAX THEN RAISE EXCEPTION 'AddGeometryColumn() - SRID must be <= %', SRID_USR_MAX; END IF; new_srid := new_srid_in; SELECT SRID INTO sr FROM spatial_ref_sys WHERE SRID = new_srid; IF NOT FOUND THEN RAISE EXCEPTION 'AddGeometryColumn() - invalid SRID'; RETURN 'fail'; END IF; ELSE new_srid := ST_SRID('POINT EMPTY'::geometry); IF ( new_srid_in != new_srid ) THEN RAISE NOTICE 'SRID value % converted to the officially unknown SRID value %', new_srid_in, new_srid; END IF; END IF; -- Verify schema IF ( schema_name IS NOT NULL AND schema_name != '' ) THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE text(nspname) = ' || quote_literal(schema_name) || 'LIMIT 1'; RAISE DEBUG '%', sql; EXECUTE sql INTO real_schema; IF ( real_schema IS NULL ) THEN RAISE EXCEPTION 'Schema % is not a valid schemaname', quote_literal(schema_name); RETURN 'fail'; END IF; END IF; IF ( real_schema IS NULL ) THEN RAISE DEBUG 'Detecting schema'; sql := 'SELECT n.nspname AS schemaname ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' || 'WHERE c.relkind = ' || quote_literal('r') || ' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ')' || ' AND pg_catalog.pg_table_is_visible(c.oid)' || ' AND c.relname = ' || quote_literal(table_name); RAISE DEBUG '%', sql; EXECUTE sql INTO real_schema; IF ( real_schema IS NULL ) THEN RAISE EXCEPTION 'Table % does not occur in the search_path', quote_literal(table_name); RETURN 'fail'; END IF; END IF; -- Add geometry column to table IF use_typmod THEN sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD COLUMN ' || quote_ident(column_name) || ' geometry(' || postgis_type_name(new_type, new_dim) || ', ' || new_srid::text || ')'; RAISE DEBUG '%', sql; ELSE sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD COLUMN ' || quote_ident(column_name) || ' geometry '; RAISE DEBUG '%', sql; END IF; EXECUTE sql; IF NOT use_typmod THEN -- Add table CHECKs sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD CONSTRAINT ' || quote_ident('enforce_srid_' || column_name) || ' CHECK (st_srid(' || quote_ident(column_name) || ') = ' || new_srid::text || ')' ; RAISE DEBUG '%', sql; EXECUTE sql; sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD CONSTRAINT ' || quote_ident('enforce_dims_' || column_name) || ' CHECK (st_ndims(' || quote_ident(column_name) || ') = ' || new_dim::text || ')' ; RAISE DEBUG '%', sql; EXECUTE sql; IF ( NOT (new_type = 'GEOMETRY')) THEN sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD CONSTRAINT ' || quote_ident('enforce_geotype_' || column_name) || ' CHECK (GeometryType(' || quote_ident(column_name) || ')=' || quote_literal(new_type) || ' OR (' || quote_ident(column_name) || ') is null)'; RAISE DEBUG '%', sql; EXECUTE sql; END IF; END IF; RETURN real_schema || '.' || table_name || '.' || column_name || ' SRID:' || new_srid::text || ' TYPE:' || new_type || ' DIMS:' || new_dim::text || ' '; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ---------------------------------------------------------------------------- -- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> ) ---------------------------------------------------------------------------- -- -- This is a wrapper to the real AddGeometryColumn, for use -- when catalogue is undefined -- ---------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION AddGeometryColumn(schema_name varchar,table_name varchar,column_name varchar,new_srid integer,new_type varchar,new_dim integer, use_typmod boolean DEFAULT true) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT AddGeometryColumn('',$1,$2,$3,$4,$5,$6,$7) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; ---------------------------------------------------------------------------- -- ADDGEOMETRYCOLUMN ( <table>, <column>, <srid>, <type>, <dim> ) ---------------------------------------------------------------------------- -- -- This is a wrapper to the real AddGeometryColumn, for use -- when catalogue and schema are undefined -- ---------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION AddGeometryColumn(table_name varchar,column_name varchar,new_srid integer,new_type varchar,new_dim integer, use_typmod boolean DEFAULT true) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT AddGeometryColumn('','',$1,$2,$3,$4,$5, $6) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYCOLUMN -- <catalogue>, <schema>, <table>, <column> ----------------------------------------------------------------------- -- -- Removes geometry column reference from geometry_columns table. -- Drops the column with pgsql >= 73. -- Make some silly enforcements on it for pgsql < 73 -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryColumn(catalog_name varchar, schema_name varchar,table_name varchar,column_name varchar) RETURNS text AS $$ DECLARE myrec RECORD; okay boolean; real_schema name; BEGIN -- Find, check or fix schema_name IF ( schema_name != '' ) THEN okay = false; FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP okay := true; END LOOP; IF ( okay <> true ) THEN RAISE NOTICE 'Invalid schema name - using current_schema()'; SELECT current_schema() into real_schema; ELSE real_schema = schema_name; END IF; ELSE SELECT current_schema() into real_schema; END IF; -- Find out if the column is in the geometry_columns table okay = false; FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP okay := true; END LOOP; IF (okay <> true) THEN RAISE EXCEPTION 'column not found in geometry_columns table'; RETURN false; END IF; -- Remove table column EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' DROP COLUMN ' || quote_ident(column_name); RETURN real_schema || '.' || table_name || '.' || column_name ||' effectively removed.'; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYCOLUMN -- <schema>, <table>, <column> ----------------------------------------------------------------------- -- -- This is a wrapper to the real DropGeometryColumn, for use -- when catalogue is undefined -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryColumn(schema_name varchar, table_name varchar,column_name varchar) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT DropGeometryColumn('',$1,$2,$3) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYCOLUMN -- <table>, <column> ----------------------------------------------------------------------- -- -- This is a wrapper to the real DropGeometryColumn, for use -- when catalogue and schema is undefined. -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryColumn(table_name varchar, column_name varchar) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT DropGeometryColumn('','',$1,$2) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYTABLE -- <catalogue>, <schema>, <table> ----------------------------------------------------------------------- -- -- Drop a table and all its references in geometry_columns -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryTable(catalog_name varchar, schema_name varchar, table_name varchar) RETURNS text AS $$ DECLARE real_schema name; BEGIN IF ( schema_name = '' ) THEN SELECT current_schema() into real_schema; ELSE real_schema = schema_name; END IF; -- TODO: Should we warn if table doesn't exist probably instead just saying dropped -- Remove table EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' RESTRICT'; RETURN real_schema || '.' || table_name ||' dropped.'; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYTABLE -- <schema>, <table> ----------------------------------------------------------------------- -- -- Drop a table and all its references in geometry_columns -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryTable(schema_name varchar, table_name varchar) RETURNS text AS $$ SELECT DropGeometryTable('',$1,$2) $$ LANGUAGE 'sql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYTABLE -- <table> ----------------------------------------------------------------------- -- -- Drop a table and all its references in geometry_columns -- For PG>=73 use current_schema() -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryTable(table_name varchar) RETURNS text AS $$ SELECT DropGeometryTable('','',$1) $$ LANGUAGE 'sql' VOLATILE STRICT; ----------------------------------------------------------------------- -- UPDATEGEOMETRYSRID -- <catalogue>, <schema>, <table>, <column>, <srid> ----------------------------------------------------------------------- -- -- Change SRID of all features in a spatially-enabled table -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION UpdateGeometrySRID(catalogn_name varchar,schema_name varchar,table_name varchar,column_name varchar,new_srid_in integer) RETURNS text AS $$ DECLARE myrec RECORD; okay boolean; cname varchar; real_schema name; unknown_srid integer; new_srid integer := new_srid_in; BEGIN -- Find, check or fix schema_name IF ( schema_name != '' ) THEN okay = false; FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP okay := true; END LOOP; IF ( okay <> true ) THEN RAISE EXCEPTION 'Invalid schema name'; ELSE real_schema = schema_name; END IF; ELSE SELECT INTO real_schema current_schema()::text; END IF; -- Ensure that column_name is in geometry_columns okay = false; FOR myrec IN SELECT type, coord_dimension FROM geometry_columns WHERE f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP okay := true; END LOOP; IF (NOT okay) THEN RAISE EXCEPTION 'column not found in geometry_columns table'; RETURN false; END IF; -- Ensure that new_srid is valid IF ( new_srid > 0 ) THEN IF ( SELECT count(*) = 0 from spatial_ref_sys where srid = new_srid ) THEN RAISE EXCEPTION 'invalid SRID: % not found in spatial_ref_sys', new_srid; RETURN false; END IF; ELSE unknown_srid := ST_SRID('POINT EMPTY'::geometry); IF ( new_srid != unknown_srid ) THEN new_srid := unknown_srid; RAISE NOTICE 'SRID value % converted to the officially unknown SRID value %', new_srid_in, new_srid; END IF; END IF; IF postgis_constraint_srid(schema_name, table_name, column_name) IS NOT NULL THEN -- srid was enforced with constraints before, keep it that way. -- Make up constraint name cname = 'enforce_srid_' || column_name; -- Drop enforce_srid constraint EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' DROP constraint ' || quote_ident(cname); -- Update geometries SRID EXECUTE 'UPDATE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' SET ' || quote_ident(column_name) || ' = ST_SetSRID(' || quote_ident(column_name) || ', ' || new_srid::text || ')'; -- Reset enforce_srid constraint EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD constraint ' || quote_ident(cname) || ' CHECK (st_srid(' || quote_ident(column_name) || ') = ' || new_srid::text || ')'; ELSE -- We will use typmod to enforce if no srid constraints -- We are using postgis_type_name to lookup the new name -- (in case Paul changes his mind and flips geometry_columns to return old upper case name) EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ALTER COLUMN ' || quote_ident(column_name) || ' TYPE geometry(' || postgis_type_name(myrec.type, myrec.coord_dimension, true) || ', ' || new_srid::text || ') USING ST_SetSRID(' || quote_ident(column_name) || ',' || new_srid::text || ');' ; END IF; RETURN real_schema || '.' || table_name || '.' || column_name ||' SRID changed to ' || new_srid::text; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- UPDATEGEOMETRYSRID -- <schema>, <table>, <column>, <srid> ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION UpdateGeometrySRID(varchar,varchar,varchar,integer) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT UpdateGeometrySRID('',$1,$2,$3,$4) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- UPDATEGEOMETRYSRID -- <table>, <column>, <srid> ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION UpdateGeometrySRID(varchar,varchar,integer) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT UpdateGeometrySRID('','',$1,$2,$3) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- FIND_SRID( <schema>, <table>, <geom col> ) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS $$ DECLARE schem text; tabl text; sr int4; BEGIN IF $1 IS NULL THEN RAISE EXCEPTION 'find_srid() - schema is NULL!'; END IF; IF $2 IS NULL THEN RAISE EXCEPTION 'find_srid() - table name is NULL!'; END IF; IF $3 IS NULL THEN RAISE EXCEPTION 'find_srid() - column name is NULL!'; END IF; schem = $1; tabl = $2; -- if the table contains a . and the schema is empty -- split the table into a schema and a table -- otherwise drop through to default behavior IF ( schem = '' and tabl LIKE '%.%' ) THEN schem = substr(tabl,1,strpos(tabl,'.')-1); tabl = substr(tabl,length(schem)+2); ELSE schem = schem || '%'; END IF; select SRID into sr from geometry_columns where f_table_schema like schem and f_table_name = tabl and f_geometry_column = $3; IF NOT FOUND THEN RAISE EXCEPTION 'find_srid() - couldnt find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table? Is there an uppercase/lowercase missmatch?'; END IF; return sr; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; --------------------------------------------------------------- -- PROJ support --------------------------------------------------------------- CREATE OR REPLACE FUNCTION get_proj4_from_srid(integer) RETURNS text AS $$ BEGIN RETURN proj4text::text FROM spatial_ref_sys WHERE srid= $1; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION postgis_transform_geometry(geometry,text,text,int) RETURNS geometry AS 'MODULE_PATHNAME','transform_geom' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent of old function: transform(geometry,integer) CREATE OR REPLACE FUNCTION ST_Transform(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME','transform' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- POSTGIS_VERSION() ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION postgis_version() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_proj_version() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; -- -- IMPORTANT: -- Starting at 1.1.0 this function is used by postgis_proc_upgrade.pl -- to extract version of postgis being installed. -- Do not modify this w/out also changing postgis_proc_upgrade.pl -- CREATE OR REPLACE FUNCTION postgis_scripts_installed() RETURNS text AS _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_lib_version() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; -- a new lib will require a new session -- NOTE: from 1.1.0 to 1.5.x this was the same of postgis_lib_version() -- NOTE: from 2.0.0 up it includes postgis_svn_revision() CREATE OR REPLACE FUNCTION postgis_scripts_released() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_geos_version() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_svn_version() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_libxml_version() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_scripts_build_date() RETURNS text AS _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_lib_build_date() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_full_version() RETURNS text AS $$ DECLARE libver text; svnver text; projver text; geosver text; sfcgalver text; cgalver text; gdalver text; libxmlver text; dbproc text; relproc text; fullver text; rast_lib_ver text; rast_scr_ver text; topo_scr_ver text; json_lib_ver text; BEGIN SELECT postgis_lib_version() INTO libver; SELECT postgis_proj_version() INTO projver; SELECT postgis_geos_version() INTO geosver; SELECT postgis_libjson_version() INTO json_lib_ver; BEGIN SELECT postgis_gdal_version() INTO gdalver; EXCEPTION WHEN undefined_function THEN gdalver := NULL; RAISE NOTICE 'Function postgis_gdal_version() not found. Is raster support enabled and rtpostgis.sql installed?'; END; BEGIN SELECT postgis_sfcgal_version() INTO sfcgalver; EXCEPTION WHEN undefined_function THEN sfcgalver := NULL; END; SELECT postgis_libxml_version() INTO libxmlver; SELECT postgis_scripts_installed() INTO dbproc; SELECT postgis_scripts_released() INTO relproc; select postgis_svn_version() INTO svnver; BEGIN SELECT topology.postgis_topology_scripts_installed() INTO topo_scr_ver; EXCEPTION WHEN undefined_function OR invalid_schema_name THEN topo_scr_ver := NULL; RAISE NOTICE 'Function postgis_topology_scripts_installed() not found. Is topology support enabled and topology.sql installed?'; WHEN insufficient_privilege THEN RAISE NOTICE 'Topology support cannot be inspected. Is current user granted USAGE on schema "topology" ?'; WHEN OTHERS THEN RAISE NOTICE 'Function postgis_topology_scripts_installed() could not be called: % (%)', SQLERRM, SQLSTATE; END; BEGIN SELECT postgis_raster_scripts_installed() INTO rast_scr_ver; EXCEPTION WHEN undefined_function THEN rast_scr_ver := NULL; RAISE NOTICE 'Function postgis_raster_scripts_installed() not found. Is raster support enabled and rtpostgis.sql installed?'; END; BEGIN SELECT postgis_raster_lib_version() INTO rast_lib_ver; EXCEPTION WHEN undefined_function THEN rast_lib_ver := NULL; RAISE NOTICE 'Function postgis_raster_lib_version() not found. Is raster support enabled and rtpostgis.sql installed?'; END; fullver = 'POSTGIS="' || libver; IF svnver IS NOT NULL THEN fullver = fullver || ' r' || svnver; END IF; fullver = fullver || '"'; IF geosver IS NOT NULL THEN fullver = fullver || ' GEOS="' || geosver || '"'; END IF; IF sfcgalver IS NOT NULL THEN fullver = fullver || ' SFCGAL="' || sfcgalver || '"'; END IF; IF projver IS NOT NULL THEN fullver = fullver || ' PROJ="' || projver || '"'; END IF; IF gdalver IS NOT NULL THEN fullver = fullver || ' GDAL="' || gdalver || '"'; END IF; IF libxmlver IS NOT NULL THEN fullver = fullver || ' LIBXML="' || libxmlver || '"'; END IF; IF json_lib_ver IS NOT NULL THEN fullver = fullver || ' LIBJSON="' || json_lib_ver || '"'; END IF; -- fullver = fullver || ' DBPROC="' || dbproc || '"'; -- fullver = fullver || ' RELPROC="' || relproc || '"'; IF dbproc != relproc THEN fullver = fullver || ' (core procs from "' || dbproc || '" need upgrade)'; END IF; IF topo_scr_ver IS NOT NULL THEN fullver = fullver || ' TOPOLOGY'; IF topo_scr_ver != relproc THEN fullver = fullver || ' (topology procs from "' || topo_scr_ver || '" need upgrade)'; END IF; END IF; IF rast_lib_ver IS NOT NULL THEN fullver = fullver || ' RASTER'; IF rast_lib_ver != relproc THEN fullver = fullver || ' (raster lib from "' || rast_lib_ver || '" need upgrade)'; END IF; END IF; IF rast_scr_ver IS NOT NULL AND rast_scr_ver != relproc THEN fullver = fullver || ' (raster procs from "' || rast_scr_ver || '" need upgrade)'; END IF; RETURN fullver; END $$ LANGUAGE 'plpgsql' IMMUTABLE; --------------------------------------------------------------- -- CASTS --------------------------------------------------------------- CREATE OR REPLACE FUNCTION box2d(geometry) RETURNS box2d AS 'MODULE_PATHNAME','LWGEOM_to_BOX2D' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d(geometry) RETURNS box3d AS 'MODULE_PATHNAME','LWGEOM_to_BOX3D' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box(geometry) RETURNS box AS 'MODULE_PATHNAME','LWGEOM_to_BOX' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box2d(box3d) RETURNS box2d AS 'MODULE_PATHNAME','BOX3D_to_BOX2D' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d(box2d) RETURNS box3d AS 'MODULE_PATHNAME','BOX2D_to_BOX3D' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box(box3d) RETURNS box AS 'MODULE_PATHNAME','BOX3D_to_BOX' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION text(geometry) RETURNS text AS 'MODULE_PATHNAME','LWGEOM_to_text' LANGUAGE 'c' IMMUTABLE STRICT; -- this is kept for backward-compatibility -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION box3dtobox(box3d) RETURNS box AS 'SELECT box($1)' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(box2d) RETURNS geometry AS 'MODULE_PATHNAME','BOX2D_to_LWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(box3d) RETURNS geometry AS 'MODULE_PATHNAME','BOX3D_to_LWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(text) RETURNS geometry AS 'MODULE_PATHNAME','parse_WKT_lwgeom' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(bytea) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_bytea' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION bytea(geometry) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_to_bytea' LANGUAGE 'c' IMMUTABLE STRICT; -- 7.3+ explicit casting definitions CREATE CAST (geometry AS box2d) WITH FUNCTION box2d(geometry) AS IMPLICIT; CREATE CAST (geometry AS box3d) WITH FUNCTION box3d(geometry) AS IMPLICIT; -- ticket: 2262 changed 2.1.0 to assignment to prevent PostGIS -- from misusing PostgreSQL geometric functions CREATE CAST (geometry AS box) WITH FUNCTION box(geometry) AS ASSIGNMENT; CREATE CAST (box3d AS box2d) WITH FUNCTION box2d(box3d) AS IMPLICIT; CREATE CAST (box2d AS box3d) WITH FUNCTION box3d(box2d) AS IMPLICIT; CREATE CAST (box2d AS geometry) WITH FUNCTION geometry(box2d) AS IMPLICIT; CREATE CAST (box3d AS box) WITH FUNCTION box(box3d) AS IMPLICIT; CREATE CAST (box3d AS geometry) WITH FUNCTION geometry(box3d) AS IMPLICIT; CREATE CAST (text AS geometry) WITH FUNCTION geometry(text) AS IMPLICIT; CREATE CAST (geometry AS text) WITH FUNCTION text(geometry) AS IMPLICIT; CREATE CAST (bytea AS geometry) WITH FUNCTION geometry(bytea) AS IMPLICIT; CREATE CAST (geometry AS bytea) WITH FUNCTION bytea(geometry) AS IMPLICIT; --------------------------------------------------------------- -- Algorithms --------------------------------------------------------------- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Simplify(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d' LANGUAGE 'c' IMMUTABLE STRICT; -- ST_SnapToGrid(input, xoff, yoff, xsize, ysize) -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8, float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid' LANGUAGE 'c' IMMUTABLE STRICT; -- ST_SnapToGrid(input, xsize, ysize) # offsets=0 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8, float8) RETURNS geometry AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $3)' LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_SnapToGrid(input, size) # xsize=ysize=size, offsets=0 -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8) RETURNS geometry AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize) -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geom1 geometry, geom2 geometry, float8, float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid_pointoff' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Segmentize(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_segmentize2d' LANGUAGE 'c' IMMUTABLE STRICT; --------------------------------------------------------------- -- LRS --------------------------------------------------------------- -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_LineInterpolatePoint(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_line_interpolate_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_line_interpolate_point(geometry, float8) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Line_Interpolate_Point', 'ST_LineInterpolatePoint', '2.1.0'); SELECT ST_LineInterpolatePoint($1, $2); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_LineSubstring(geometry, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_line_substring' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_line_substring(geometry, float8, float8) RETURNS geometry AS $$ SELECT _postgis_deprecate('ST_Line_Substring', 'ST_LineSubstring', '2.1.0'); SELECT ST_LineSubstring($1, $2, $3); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_LineLocatePoint(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_line_locate_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 2.1.0 CREATE OR REPLACE FUNCTION ST_line_locate_point(geom1 geometry, geom2 geometry) RETURNS float8 AS $$ SELECT _postgis_deprecate('ST_Line_Locate_Point', 'ST_LineLocatePoint', '2.1.0'); SELECT ST_LineLocatePoint($1, $2); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_locate_between_measures(geometry, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_locate_along_measure(geometry, float8) RETURNS geometry AS $$ SELECT ST_locate_between_measures($1, $2, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_AddMeasure(geometry, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_AddMeasure' LANGUAGE 'c' IMMUTABLE STRICT; --------------------------------------------------------------- -- GEOS --------------------------------------------------------------- -- PostGIS equivalent function: intersection(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION ST_Intersection(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME','intersection' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: buffer(geometry,float8) CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8) RETURNS geometry AS 'MODULE_PATHNAME','buffer' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 - requires GEOS-3.2 or higher CREATE OR REPLACE FUNCTION _ST_Buffer(geometry,float8,cstring) RETURNS geometry AS 'MODULE_PATHNAME','buffer' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8,integer) RETURNS geometry AS $$ SELECT _ST_Buffer($1, $2, CAST('quad_segs='||CAST($3 AS text) as cstring)) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8,text) RETURNS geometry AS $$ SELECT _ST_Buffer($1, $2, CAST( regexp_replace($3, '^[0123456789]+$', 'quad_segs='||$3) AS cstring) ) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 - requires GEOS-3.2 or higher CREATE OR REPLACE FUNCTION ST_OffsetCurve(line geometry, distance float8, params text DEFAULT '') RETURNS geometry AS 'MODULE_PATHNAME','ST_OffsetCurve' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: convexhull(geometry) CREATE OR REPLACE FUNCTION ST_ConvexHull(geometry) RETURNS geometry AS 'MODULE_PATHNAME','convexhull' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Only accepts LINESTRING as parameters. -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION _ST_LineCrossingDirection(geom1 geometry, geom2 geometry) RETURNS integer AS 'MODULE_PATHNAME', 'ST_LineCrossingDirection' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_LineCrossingDirection(geom1 geometry, geom2 geometry) RETURNS integer AS $$ SELECT CASE WHEN NOT $1 && $2 THEN 0 ELSE _ST_LineCrossingDirection($1,$2) END $$ LANGUAGE 'sql' IMMUTABLE; -- Requires GEOS >= 3.0.0 -- Availability: 1.3.3 CREATE OR REPLACE FUNCTION ST_SimplifyPreserveTopology(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME','topologypreservesimplify' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.1.0 -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_IsValidReason(geometry) RETURNS text AS 'MODULE_PATHNAME', 'isvalidreason' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 2.0.0 CREATE TYPE valid_detail AS ( valid bool, reason varchar, location geometry ); -- Requires GEOS >= 3.3.0 -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_IsValidDetail(geometry) RETURNS valid_detail AS 'MODULE_PATHNAME', 'isvaliddetail' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.3.0 -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_IsValidDetail(geometry, int4) RETURNS valid_detail AS 'MODULE_PATHNAME', 'isvaliddetail' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.3.0 -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_IsValidReason(geometry, int4) RETURNS text AS $$ SELECT CASE WHEN valid THEN 'Valid Geometry' ELSE reason END FROM ( SELECT (ST_isValidDetail($1, $2)).* ) foo $$ LANGUAGE 'sql' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.3.0 -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_IsValid(geometry, int4) RETURNS boolean AS 'SELECT (ST_isValidDetail($1, $2)).valid' LANGUAGE 'sql' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.2.0 -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_HausdorffDistance(geom1 geometry, geom2 geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'hausdorffdistance' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.2.0 -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_HausdorffDistance(geom1 geometry, geom2 geometry, float8) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'hausdorffdistancedensify' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: difference(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION ST_Difference(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME','difference' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: boundary(geometry) CREATE OR REPLACE FUNCTION ST_Boundary(geometry) RETURNS geometry AS 'MODULE_PATHNAME','boundary' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: symdifference(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION ST_SymDifference(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME','symdifference' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_symmetricdifference(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME','symdifference' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: GeomUnion(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION ST_Union(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME','geomunion' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 -- Requires: GEOS-3.3.0 CREATE OR REPLACE FUNCTION ST_UnaryUnion(geometry) RETURNS geometry AS 'MODULE_PATHNAME','ST_UnaryUnion' LANGUAGE 'c' IMMUTABLE STRICT; -- ST_RemoveRepeatedPoints(in geometry) -- -- Removes duplicate vertices in input. -- Only checks consecutive points for lineal and polygonal geoms. -- Checks all points for multipoint geoms. -- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_RemoveRepeatedPoints(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_RemoveRepeatedPoints' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- ST_CleanGeometry / ST_MakeValid -------------------------------------------------------------------------------- -- ST_MakeValid(in geometry) -- -- Try to make the input valid maintaining the boundary profile. -- May return a collection. -- May return a geometry with inferior dimensions (dimensional collapses). -- May return NULL if can't handle input. -- -- Requires: GEOS-3.3.0 -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_MakeValid(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_MakeValid' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- ST_CleanGeometry(in geometry) -- -- Make input: -- - Simple (lineal components) -- - Valid (polygonal components) -- - Obeying the RHR (if polygonal) -- - Simplified of consecutive duplicated points -- Ensuring: -- - No input vertexes are discarded (except consecutive repeated ones) -- - Output geometry type matches input -- -- Returns NULL on failure. -- -- Requires: GEOS-3.3.0 -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_CleanGeometry(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_CleanGeometry' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- ST_Split -------------------------------------------------------------------------------- -- ST_Split(in geometry, blade geometry) -- -- Split a geometry in parts after cutting it with given blade. -- Returns a collection containing all parts. -- -- Note that multi-part geometries will be returned exploded, -- no matter relation to blade. -- -- Availability: 2.0.0 -- CREATE OR REPLACE FUNCTION ST_Split(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Split' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- ST_SharedPaths -------------------------------------------------------------------------------- -- ST_SharedPaths(lineal1 geometry, lineal1 geometry) -- -- Returns a collection containing paths shared by the two -- input geometries. Those going in the same direction are -- in the first element of the collection, those going in the -- opposite direction are in the second element. -- -- The paths themselves are given in the direction of the -- first geometry. -- -- Availability: 2.0.0 -- Requires GEOS >= 3.3.0 -- CREATE OR REPLACE FUNCTION ST_SharedPaths(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_SharedPaths' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- ST_Snap -------------------------------------------------------------------------------- -- ST_Snap(g1 geometry, g2 geometry, tolerance float8) -- -- Snap first geometry against second. -- -- Availability: 2.0.0 -- Requires GEOS >= 3.3.0 -- CREATE OR REPLACE FUNCTION ST_Snap(geom1 geometry, geom2 geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Snap' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- ST_RelateMatch -------------------------------------------------------------------------------- -- ST_RelateMatch(matrix text, pattern text) -- -- Returns true if pattern 'pattern' matches DE9 intersection matrix 'matrix' -- -- Availability: 2.0.0 -- Requires GEOS >= 3.3.0 -- CREATE OR REPLACE FUNCTION ST_RelateMatch(text, text) RETURNS bool AS 'MODULE_PATHNAME', 'ST_RelateMatch' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- ST_Node -------------------------------------------------------------------------------- -- ST_Node(in geometry) -- -- Fully node lines in input using the least set of nodes while -- preserving each of the input ones. -- Returns a linestring or a multilinestring containing all parts. -- -- Availability: 2.0.0 -- Requires GEOS >= 3.3.0 -- CREATE OR REPLACE FUNCTION ST_Node(g geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_Node' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- ST_DelaunayTriangles -------------------------------------------------------------------------------- -- ST_DelaunayTriangles(g1 geometry, tolerance float8, flags int4) -- -- Builds Delaunay triangulation out of geometry vertices. -- -- Returns a collection of triangular polygons with flags=0 -- or a multilinestring with flags=1 -- -- If a tolerance is given it will be used to snap the input points -- each-other. -- -- -- Availability: 2.1.0 -- Requires GEOS >= 3.4.0 -- CREATE OR REPLACE FUNCTION ST_DelaunayTriangles(g1 geometry, tolerance float8 DEFAULT 0.0, flags int4 DEFAULT 0) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_DelaunayTriangles' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -------------------------------------------------------------------------------- -- Aggregates and their supporting functions -------------------------------------------------------------------------------- ------------------------------------------------------------------------ -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Combine_BBox(box3d,geometry) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_combine' LANGUAGE 'c' IMMUTABLE; -- Availability: 1.2.2 CREATE AGGREGATE ST_Extent( sfunc = ST_combine_bbox, finalfunc = box2d, basetype = geometry, stype = box3d ); -- Availability: 2.0.0 CREATE AGGREGATE ST_3DExtent( sfunc = ST_combine_bbox, basetype = geometry, stype = box3d ); -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Collect(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_collect' LANGUAGE 'c' IMMUTABLE; -- Availability: 1.2.2 CREATE AGGREGATE ST_MemCollect( sfunc = ST_collect, basetype = geometry, stype = geometry ); -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Collect(geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE AGGREGATE ST_MemUnion ( basetype = geometry, sfunc = ST_Union, stype = geometry ); -- -- pgis_abs -- Container type to hold the ArrayBuildState pointer as it passes through -- the geometry array accumulation aggregate. -- CREATE OR REPLACE FUNCTION pgis_abs_in(cstring) RETURNS pgis_abs AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION pgis_abs_out(pgis_abs) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; CREATE TYPE pgis_abs ( internallength = 8, input = pgis_abs_in, output = pgis_abs_out, alignment = double ); -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_accum_transfn(pgis_abs, geometry) RETURNS pgis_abs AS 'MODULE_PATHNAME' LANGUAGE 'c'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_accum_finalfn(pgis_abs) RETURNS geometry[] AS 'MODULE_PATHNAME' LANGUAGE 'c'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_union_finalfn(pgis_abs) RETURNS geometry AS 'MODULE_PATHNAME' LANGUAGE 'c'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_collect_finalfn(pgis_abs) RETURNS geometry AS 'MODULE_PATHNAME' LANGUAGE 'c'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_polygonize_finalfn(pgis_abs) RETURNS geometry AS 'MODULE_PATHNAME' LANGUAGE 'c'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_makeline_finalfn(pgis_abs) RETURNS geometry AS 'MODULE_PATHNAME' LANGUAGE 'c'; -- Availability: 1.2.2 CREATE AGGREGATE ST_Accum ( sfunc = pgis_geometry_accum_transfn, basetype = geometry, stype = pgis_abs, finalfunc = pgis_geometry_accum_finalfn ); -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_Union (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME','pgis_union_geometry_array' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE AGGREGATE ST_Union ( basetype = geometry, sfunc = pgis_geometry_accum_transfn, stype = pgis_abs, finalfunc = pgis_geometry_union_finalfn ); -- Availability: 1.2.2 CREATE AGGREGATE ST_Collect ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_collect_finalfn ); -- Availability: 1.2.2 CREATE AGGREGATE ST_Polygonize ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_polygonize_finalfn ); -- Availability: 1.2.2 CREATE AGGREGATE ST_MakeLine ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_makeline_finalfn ); -------------------------------------------------------------------------------- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Relate(geom1 geometry, geom2 geometry) RETURNS text AS 'MODULE_PATHNAME','relate_full' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 -- Requires GEOS >= 3.3.0 CREATE OR REPLACE FUNCTION ST_Relate(geom1 geometry, geom2 geometry, int4) RETURNS text AS 'MODULE_PATHNAME','relate_full' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: relate(geom1 geometry, geom2 geometry,text) CREATE OR REPLACE FUNCTION ST_Relate(geom1 geometry, geom2 geometry,text) RETURNS boolean AS 'MODULE_PATHNAME','relate_pattern' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: disjoint(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION ST_Disjoint(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','disjoint' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: touches(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION _ST_Touches(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','touches' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Touches(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Touches($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.3.4 CREATE OR REPLACE FUNCTION _ST_DWithin(geom1 geometry, geom2 geometry,float8) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_dwithin' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_DWithin(geom1 geometry, geom2 geometry, float8) RETURNS boolean AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3)' LANGUAGE 'sql' IMMUTABLE; -- PostGIS equivalent function: intersects(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION _ST_Intersects(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','intersects' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Intersects(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- PostGIS equivalent function: crosses(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION _ST_Crosses(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','crosses' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Crosses(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Crosses($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- PostGIS equivalent function: contains(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION _ST_Contains(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','contains' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Contains(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Contains($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION _ST_CoveredBy(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'coveredby' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_CoveredBy(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_CoveredBy($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION _ST_Covers(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'covers' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Covers(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Covers($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION _ST_ContainsProperly(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','containsproperly' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.4.0 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_ContainsProperly(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_ContainsProperly($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- PostGIS equivalent function: overlaps(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION _ST_Overlaps(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','overlaps' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: within(geom1 geometry, geom2 geometry) CREATE OR REPLACE FUNCTION _ST_Within(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT _ST_Contains($2,$1)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Within(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Contains($2,$1)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Overlaps(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Overlaps($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- PostGIS equivalent function: IsValid(geometry) -- TODO: change null returns to true CREATE OR REPLACE FUNCTION ST_IsValid(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'isvalid' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: Centroid(geometry) CREATE OR REPLACE FUNCTION ST_Centroid(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'centroid' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: IsRing(geometry) CREATE OR REPLACE FUNCTION ST_IsRing(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'isring' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: PointOnSurface(geometry) CREATE OR REPLACE FUNCTION ST_PointOnSurface(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'pointonsurface' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: IsSimple(geometry) CREATE OR REPLACE FUNCTION ST_IsSimple(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'issimple' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_IsCollection(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'ST_IsCollection' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Equals(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','ST_Equals' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.2.1 CREATE OR REPLACE FUNCTION ST_Equals(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 ~= $2 AND _ST_Equals($1,$2)' LANGUAGE 'sql' IMMUTABLE; -- Deprecation in 1.2.3 -- TODO: drop in 2.0.0 ! CREATE OR REPLACE FUNCTION Equals(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','ST_Equals' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- GML & KML INPUT ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _ST_GeomFromGML(text, int4) RETURNS geometry AS 'MODULE_PATHNAME','geom_from_gml' LANGUAGE 'c' IMMUTABLE; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_GeomFromGML(text, int4) RETURNS geometry AS 'MODULE_PATHNAME','geom_from_gml' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeomFromGML(text) RETURNS geometry AS 'SELECT _ST_GeomFromGML($1, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GMLToSQL(text) RETURNS geometry AS 'SELECT _ST_GeomFromGML($1, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_GMLToSQL(text, int4) RETURNS geometry AS 'MODULE_PATHNAME','geom_from_gml' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeomFromKML(text) RETURNS geometry AS 'MODULE_PATHNAME','geom_from_kml' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- GEOJSON INPUT ----------------------------------------------------------------------- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_GeomFromGeoJson(text) RETURNS geometry AS 'MODULE_PATHNAME','geom_from_geojson' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION postgis_libjson_version() RETURNS text AS 'MODULE_PATHNAME','postgis_libjson_version' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- SVG OUTPUT ----------------------------------------------------------------------- -- Availability: 1.2.2 -- Changed: 2.0.0 changed to use default args and allow calling by named args CREATE OR REPLACE FUNCTION ST_AsSVG(geom geometry,rel int4 DEFAULT 0,maxdecimaldigits int4 DEFAULT 15) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asSVG' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- GML OUTPUT ----------------------------------------------------------------------- -- _ST_AsGML(version, geom, precision, option, prefix, id) CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geometry, int4, int4, text, text) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asGML' LANGUAGE 'c' IMMUTABLE; -- ST_AsGML(version, geom) / precision=15 -- Availability: 1.3.2 -- ST_AsGML(version, geom, precision) -- Availability: 1.3.2 -- ST_AsGML (geom, precision, option) / version=2 -- Availability: 1.4.0 -- Changed: 2.0.0 to have default args CREATE OR REPLACE FUNCTION ST_AsGML(geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) RETURNS TEXT AS $$ SELECT _ST_AsGML(2, $1, $2, $3, null, null); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsGML(version, geom, precision, option) -- Availability: 1.4.0 -- ST_AsGML(version, geom, precision, option, prefix) -- Availability: 2.0.0 -- Changed: 2.0.0 to use default and named args -- ST_AsGML(version, geom, precision, option, prefix, id) -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_AsGML(version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0, nprefix text DEFAULT null, id text DEFAULT null) RETURNS TEXT AS $$ SELECT _ST_AsGML($1, $2, $3, $4, $5, $6); $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- KML OUTPUT ----------------------------------------------------------------------- -- _ST_AsKML(version, geom, precision, nprefix) CREATE OR REPLACE FUNCTION _ST_AsKML(int4,geometry, int4, text) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asKML' LANGUAGE 'c' IMMUTABLE; -- Availability: 1.2.2 -- Changed: 2.0.0 to use default args and allow named args CREATE OR REPLACE FUNCTION ST_AsKML(geom geometry, maxdecimaldigits int4 DEFAULT 15) RETURNS TEXT AS $$ SELECT _ST_AsKML(2, ST_Transform($1,4326), $2, null); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsKML(version, geom, precision, text) -- Availability: 2.0.0 -- Changed: 2.0.0 allows default args and got rid of other permutations CREATE OR REPLACE FUNCTION ST_AsKML(version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, nprefix text DEFAULT null) RETURNS TEXT AS $$ SELECT _ST_AsKML($1, ST_Transform($2,4326), $3, $4); $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- GEOJSON OUTPUT -- Availability: 1.3.4 ----------------------------------------------------------------------- -- _ST_AsGeoJson(version, geom, precision, options) CREATE OR REPLACE FUNCTION _ST_AsGeoJson(int4, geometry, int4, int4) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asGeoJson' LANGUAGE 'c' IMMUTABLE STRICT; -- ST_AsGeoJson(geom, precision, options) / version=1 -- Changed 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_AsGeoJson(geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) RETURNS TEXT AS $$ SELECT _ST_AsGeoJson(1, $1, $2, $3); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geom, precision,options) -- Changed 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_AsGeoJson(gj_version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) RETURNS TEXT AS $$ SELECT _ST_AsGeoJson($1, $2, $3, $4); $$ LANGUAGE 'sql' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- GeoHash (geohash.org) ------------------------------------------------------------------------ -- Availability 1.4.0 -- Changed 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_GeoHash(geom geometry, maxchars int4 DEFAULT 0) RETURNS TEXT AS 'MODULE_PATHNAME', 'ST_GeoHash' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- GeoHash input -- Availability: 2.0.? ----------------------------------------------------------------------- -- ST_Box2dFromGeoHash(geohash text, precision int4) CREATE OR REPLACE FUNCTION ST_Box2dFromGeoHash(text, int4 DEFAULT NULL) RETURNS box2d AS 'MODULE_PATHNAME','box2d_from_geohash' LANGUAGE 'c' IMMUTABLE; -- ST_PointFromGeoHash(geohash text, precision int4) CREATE OR REPLACE FUNCTION ST_PointFromGeoHash(text, int4 DEFAULT NULL) RETURNS geometry AS 'MODULE_PATHNAME','point_from_geohash' LANGUAGE 'c' IMMUTABLE; -- ST_GeomFromGeoHash(geohash text, precision int4) CREATE OR REPLACE FUNCTION ST_GeomFromGeoHash(text, int4 DEFAULT NULL) RETURNS geometry AS $$ SELECT CAST(ST_Box2dFromGeoHash($1, $2) AS geometry); $$ LANGUAGE 'sql' IMMUTABLE; ------------------------------------------------------------------------ -- OGC defined ------------------------------------------------------------------------ -- PostGIS equivalent function: NumPoints(geometry) CREATE OR REPLACE FUNCTION ST_NumPoints(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_numpoints_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: NumGeometries(geometry) CREATE OR REPLACE FUNCTION ST_NumGeometries(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_numgeometries_collection' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: GeometryN(geometry) CREATE OR REPLACE FUNCTION ST_GeometryN(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_geometryn_collection' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: Dimension(geometry) CREATE OR REPLACE FUNCTION ST_Dimension(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_dimension' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: ExteriorRing(geometry) CREATE OR REPLACE FUNCTION ST_ExteriorRing(geometry) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_exteriorring_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: NumInteriorRings(geometry) CREATE OR REPLACE FUNCTION ST_NumInteriorRings(geometry) RETURNS integer AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_NumInteriorRing(geometry) RETURNS integer AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: InteriorRingN(geometry) CREATE OR REPLACE FUNCTION ST_InteriorRingN(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_interiorringn_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 -- this should not be deprecated (2011-01-04 robe) CREATE OR REPLACE FUNCTION GeometryType(geometry) RETURNS text AS 'MODULE_PATHNAME', 'LWGEOM_getTYPE' LANGUAGE 'c' IMMUTABLE STRICT; -- Not quite equivalent to GeometryType CREATE OR REPLACE FUNCTION ST_GeometryType(geometry) RETURNS text AS 'MODULE_PATHNAME', 'geometry_geometrytype' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: PointN(geometry,integer) CREATE OR REPLACE FUNCTION ST_PointN(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_pointn_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_NumPatches(geometry) RETURNS int4 AS ' SELECT CASE WHEN ST_GeometryType($1) = ''ST_PolyhedralSurface'' THEN ST_NumGeometries($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_PatchN(geometry, integer) RETURNS geometry AS ' SELECT CASE WHEN ST_GeometryType($1) = ''ST_PolyhedralSurface'' THEN ST_GeometryN($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function of old StartPoint(geometry)) CREATE OR REPLACE FUNCTION ST_StartPoint(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_startpoint_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function of old EndPoint(geometry) CREATE OR REPLACE FUNCTION ST_EndPoint(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_endpoint_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: IsClosed(geometry) CREATE OR REPLACE FUNCTION ST_IsClosed(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_isclosed' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: IsEmpty(geometry) CREATE OR REPLACE FUNCTION ST_IsEmpty(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_isempty' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_SRID(geometry) RETURNS int4 AS 'MODULE_PATHNAME','LWGEOM_get_srid' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SetSRID(geometry,int4) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_set_srid' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsBinary(geometry,text) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_asBinary' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent of old function: AsBinary(geometry) CREATE OR REPLACE FUNCTION ST_AsBinary(geometry) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_asBinary' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: AsText(geometry) CREATE OR REPLACE FUNCTION ST_AsText(geometry) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asText' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeometryFromText(text) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeometryFromText(text, int4) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromText(text) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: ST_GeometryFromText(text, int4) CREATE OR REPLACE FUNCTION ST_GeomFromText(text, int4) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: ST_GeometryFromText(text) -- SQL/MM alias for ST_GeomFromText CREATE OR REPLACE FUNCTION ST_WKTToSQL(text) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POINT'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: PointFromText(text, int4) -- TODO: improve this ... by not duplicating constructor time. CREATE OR REPLACE FUNCTION ST_PointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POINT'' THEN ST_GeomFromText($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''LINESTRING'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: LineFromText(text, int4) CREATE OR REPLACE FUNCTION ST_LineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''LINESTRING'' THEN ST_GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POLYGON'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: ST_PolygonFromText(text, int4) CREATE OR REPLACE FUNCTION ST_PolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POLYGON'' THEN ST_GeomFromText($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromText(text, int4) RETURNS geometry AS 'SELECT ST_PolyFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromText(text) RETURNS geometry AS 'SELECT ST_PolyFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: MLineFromText(text, int4) CREATE OR REPLACE FUNCTION ST_MLineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTILINESTRING'' THEN ST_GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MLineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTILINESTRING'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiLineStringFromText(text) RETURNS geometry AS 'SELECT ST_MLineFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiLineStringFromText(text, int4) RETURNS geometry AS 'SELECT ST_MLineFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: MPointFromText(text, int4) CREATE OR REPLACE FUNCTION ST_MPointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTIPOINT'' THEN ST_GeomFromText($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOINT'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPointFromText(text) RETURNS geometry AS 'SELECT ST_MPointFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: MPolyFromText(text, int4) CREATE OR REPLACE FUNCTION ST_MPolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTIPOLYGON'' THEN ST_GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; --Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOLYGON'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolygonFromText(text, int4) RETURNS geometry AS 'SELECT ST_MPolyFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolygonFromText(text) RETURNS geometry AS 'SELECT ST_MPolyFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION'' THEN ST_GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''GEOMETRYCOLLECTION'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromWKB(bytea) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_WKB' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: GeomFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_GeomFromWKB(bytea, int) RETURNS geometry AS 'SELECT ST_SetSRID(ST_GeomFromWKB($1), $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: PointFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_PointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POINT'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POINT'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: LineFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_LineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''LINESTRING'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LinestringFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LinestringFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''LINESTRING'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: PolyFromWKB(text, int) CREATE OR REPLACE FUNCTION ST_PolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POLYGON'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''POLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POLYGON'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: MPointFromWKB(text, int) CREATE OR REPLACE FUNCTION ST_MPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOINT'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''MULTIPOINT'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: MLineFromWKB(text, int) CREATE OR REPLACE FUNCTION ST_MLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 -- PostGIS equivalent function: MPolyFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_MPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''GEOMETRYCOLLECTION'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; --New functions -- Maximum distance between linestrings. -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_MaxDistance(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_maxdistance2d_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_MaxDistance(geom1 geometry, geom2 geometry) RETURNS float8 AS 'SELECT _ST_MaxDistance(ST_ConvexHull($1), ST_ConvexHull($2))' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_ClosestPoint(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_closestpoint' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_ShortestLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_shortestline2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION _ST_LongestLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_longestline2d' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_LongestLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'SELECT _ST_LongestLine(ST_ConvexHull($1), ST_ConvexHull($2))' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION _ST_DFullyWithin(geom1 geometry, geom2 geometry,float8) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_dfullywithin' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_DFullyWithin(geom1 geometry, geom2 geometry, float8) RETURNS boolean AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_DFullyWithin(ST_ConvexHull($1), ST_ConvexHull($2), $3)' LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION ST_FlipCoordinates(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_FlipCoordinates' LANGUAGE 'c' IMMUTABLE STRICT; -- -- SFSQL 1.1 -- -- BdPolyFromText(multiLineStringTaggedText String, SRID Integer): Polygon -- -- Construct a Polygon given an arbitrary -- collection of closed linestrings as a -- MultiLineString text representation. -- -- This is a PLPGSQL function rather then an SQL function -- To avoid double call of BuildArea (one to get GeometryType -- and another to actual return, in a CASE WHEN construct). -- Also, we profit from plpgsql to RAISE exceptions. -- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_BdPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := ST_MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := ST_BuildArea(mline); IF GeometryType(geom) != 'POLYGON' THEN RAISE EXCEPTION 'Input returns more then a single polygon, try using BdMPolyFromText instead'; END IF; RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- -- SFSQL 1.1 -- -- BdMPolyFromText(multiLineStringTaggedText String, SRID Integer): MultiPolygon -- -- Construct a MultiPolygon given an arbitrary -- collection of closed linestrings as a -- MultiLineString text representation. -- -- This is a PLPGSQL function rather then an SQL function -- To raise an exception in case of invalid input. -- -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_BdMPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := ST_MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := ST_Multi(ST_BuildArea(mline)); RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; /* Should we include the .sql directly here ? */ #include "long_xact.sql.in" #include "geography.sql.in" -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_distance_sphere(geom1 geometry, geom2 geometry) RETURNS FLOAT8 AS $$ select st_distance(geography($1),geography($2),false) $$ LANGUAGE 'sql' IMMUTABLE STRICT COST 300; --------------------------------------------------------------- -- GEOMETRY_COLUMNS view support functions --------------------------------------------------------------- -- New helper function so we can keep list of valid geometry types in one place -- -- Maps old names to pramsey beautiful names but can take old name or new name as input -- By default returns new name but can be overridden to return old name for old constraint like support CREATE OR REPLACE FUNCTION postgis_type_name(geomname varchar, coord_dimension integer, use_new_name boolean DEFAULT true) RETURNS varchar AS $$ SELECT CASE WHEN $3 THEN new_name ELSE old_name END As geomname FROM ( VALUES ('GEOMETRY', 'Geometry', 2) , ('GEOMETRY', 'GeometryZ', 3) , ('GEOMETRY', 'GeometryZM', 4) , ('GEOMETRYCOLLECTION', 'GeometryCollection', 2) , ('GEOMETRYCOLLECTION', 'GeometryCollectionZ', 3) , ('GEOMETRYCOLLECTIONM', 'GeometryCollectionM', 3) , ('GEOMETRYCOLLECTION', 'GeometryCollectionZM', 4) , ('POINT', 'Point',2) , ('POINTM','PointM',3) , ('POINT', 'PointZ',3) , ('POINT', 'PointZM',4) , ('MULTIPOINT','MultiPoint',2) , ('MULTIPOINT','MultiPointZ',3) , ('MULTIPOINTM','MultiPointM',3) , ('MULTIPOINT','MultiPointZM',4) , ('POLYGON', 'Polygon',2) , ('POLYGON', 'PolygonZ',3) , ('POLYGONM', 'PolygonM',3) , ('POLYGON', 'PolygonZM',4) , ('MULTIPOLYGON', 'MultiPolygon',2) , ('MULTIPOLYGON', 'MultiPolygonZ',3) , ('MULTIPOLYGONM', 'MultiPolygonM',3) , ('MULTIPOLYGON', 'MultiPolygonZM',4) , ('MULTILINESTRING', 'MultiLineString',2) , ('MULTILINESTRING', 'MultiLineStringZ',3) , ('MULTILINESTRINGM', 'MultiLineStringM',3) , ('MULTILINESTRING', 'MultiLineStringZM',4) , ('LINESTRING', 'LineString',2) , ('LINESTRING', 'LineStringZ',3) , ('LINESTRINGM', 'LineStringM',3) , ('LINESTRING', 'LineStringZM',4) , ('CIRCULARSTRING', 'CircularString',2) , ('CIRCULARSTRING', 'CircularStringZ',3) , ('CIRCULARSTRINGM', 'CircularStringM',3) , ('CIRCULARSTRING', 'CircularStringZM',4) , ('COMPOUNDCURVE', 'CompoundCurve',2) , ('COMPOUNDCURVE', 'CompoundCurveZ',3) , ('COMPOUNDCURVEM', 'CompoundCurveM',3) , ('COMPOUNDCURVE', 'CompoundCurveZM',4) , ('CURVEPOLYGON', 'CurvePolygon',2) , ('CURVEPOLYGON', 'CurvePolygonZ',3) , ('CURVEPOLYGONM', 'CurvePolygonM',3) , ('CURVEPOLYGON', 'CurvePolygonZM',4) , ('MULTICURVE', 'MultiCurve',2 ) , ('MULTICURVE', 'MultiCurveZ',3 ) , ('MULTICURVEM', 'MultiCurveM',3 ) , ('MULTICURVE', 'MultiCurveZM',4 ) , ('MULTISURFACE', 'MultiSurface', 2) , ('MULTISURFACE', 'MultiSurfaceZ', 3) , ('MULTISURFACEM', 'MultiSurfaceM', 3) , ('MULTISURFACE', 'MultiSurfaceZM', 4) , ('POLYHEDRALSURFACE', 'PolyhedralSurface',2) , ('POLYHEDRALSURFACE', 'PolyhedralSurfaceZ',3) , ('POLYHEDRALSURFACEM', 'PolyhedralSurfaceM',3) , ('POLYHEDRALSURFACE', 'PolyhedralSurfaceZM',4) , ('TRIANGLE', 'Triangle',2) , ('TRIANGLE', 'TriangleZ',3) , ('TRIANGLEM', 'TriangleM',3) , ('TRIANGLE', 'TriangleZM',4) , ('TIN', 'Tin', 2), ('TIN', 'TinZ', 3), ('TIN', 'TinM', 3), ('TIN', 'TinZM', 4) ) As g(old_name, new_name, coord_dimension) WHERE (upper(old_name) = upper($1) OR upper(new_name) = upper($1)) AND coord_dimension = $2; $$ LANGUAGE 'sql' IMMUTABLE STRICT COST 200; CREATE OR REPLACE FUNCTION postgis_constraint_srid(geomschema text, geomtable text, geomcolumn text) RETURNS integer AS $$ SELECT replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', '')::integer FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%srid(% = %'; $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION postgis_constraint_dims(geomschema text, geomtable text, geomcolumn text) RETURNS integer AS $$ SELECT replace(split_part(s.consrc, ' = ', 2), ')', '')::integer FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%ndims(% = %'; $$ LANGUAGE 'sql' STABLE STRICT; -- support function to pull out geometry type from constraint check -- will return pretty name instead of ugly name CREATE OR REPLACE FUNCTION postgis_constraint_type(geomschema text, geomtable text, geomcolumn text) RETURNS varchar AS $$ SELECT replace(split_part(s.consrc, '''', 2), ')', '')::varchar FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%geometrytype(% = %'; $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE VIEW geometry_columns AS SELECT current_database()::varchar(256) AS f_table_catalog, n.nspname::varchar(256) AS f_table_schema, c.relname::varchar(256) AS f_table_name, a.attname::varchar(256) AS f_geometry_column, COALESCE(NULLIF(postgis_typmod_dims(a.atttypmod),2), postgis_constraint_dims(n.nspname, c.relname, a.attname), 2) AS coord_dimension, COALESCE(NULLIF(postgis_typmod_srid(a.atttypmod),0), postgis_constraint_srid(n.nspname, c.relname, a.attname), 0) AS srid, -- force to be uppercase with no ZM so is backwards compatible -- with old geometry_columns replace( replace( COALESCE( NULLIF(upper(postgis_typmod_type(a.atttypmod)::text), 'GEOMETRY'), postgis_constraint_type(n.nspname, c.relname, a.attname), 'GEOMETRY' ), 'ZM', '' ), 'Z', '' )::varchar(30) AS type FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE t.typname = 'geometry'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char" OR c.relkind = 'm'::"char" OR c.relkind = 'f'::"char") AND NOT pg_is_other_temp_schema(c.relnamespace) AND NOT ( n.nspname = 'public' AND c.relname = 'raster_columns' ) AND has_table_privilege( c.oid, 'SELECT'::text ); -- TODO: support RETURNING and raise a WARNING CREATE OR REPLACE RULE geometry_columns_insert AS ON INSERT TO geometry_columns DO INSTEAD NOTHING; -- TODO: raise a WARNING CREATE OR REPLACE RULE geometry_columns_update AS ON UPDATE TO geometry_columns DO INSTEAD NOTHING; -- TODO: raise a WARNING CREATE OR REPLACE RULE geometry_columns_delete AS ON DELETE TO geometry_columns DO INSTEAD NOTHING; --------------------------------------------------------------- -- 3D-functions --------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_3DDistance(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'distance3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DMaxDistance(geom1 geometry, geom2 geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_maxdistance3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DClosestPoint(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_closestpoint3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DShortestLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_shortestline3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DLongestLine(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_longestline3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _ST_3DDWithin(geom1 geometry, geom2 geometry,float8) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_dwithin3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DDWithin(geom1 geometry, geom2 geometry,float8) RETURNS boolean AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_3DDWithin($1, $2, $3)' LANGUAGE 'sql' IMMUTABLE COST 100; CREATE OR REPLACE FUNCTION _ST_3DDFullyWithin(geom1 geometry, geom2 geometry,float8) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_dfullywithin3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DDFullyWithin(geom1 geometry, geom2 geometry,float8) RETURNS boolean AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_3DDFullyWithin($1, $2, $3)' LANGUAGE 'sql' IMMUTABLE COST 100; CREATE OR REPLACE FUNCTION _ST_3DIntersects(geom1 geometry, geom2 geometry) RETURNS boolean AS 'MODULE_PATHNAME','intersects3d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DIntersects(geom1 geometry, geom2 geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_3DIntersects($1, $2)' LANGUAGE 'sql' IMMUTABLE COST 100; --------------------------------------------------------------- -- SQL-MM --------------------------------------------------------------- -- PostGIS equivalent function: ST_ndims(geometry) CREATE OR REPLACE FUNCTION ST_CoordDim(Geometry geometry) RETURNS smallint AS 'MODULE_PATHNAME', 'LWGEOM_ndims' LANGUAGE 'c' IMMUTABLE STRICT; -- -- SQL-MM -- -- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer) -- -- Converts a given geometry to a linear geometry. Each curveed -- geometry or segment is converted into a linear approximation using -- the given number of segments per quarter circle. CREATE OR REPLACE FUNCTION ST_CurveToLine(geometry, integer) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_curve_segmentize' LANGUAGE 'c' IMMUTABLE STRICT; -- -- SQL-MM -- -- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer) -- -- Converts a given geometry to a linear geometry. Each curveed -- geometry or segment is converted into a linear approximation using -- the default value of 32 segments per quarter circle CREATE OR REPLACE FUNCTION ST_CurveToLine(geometry) RETURNS geometry AS 'SELECT ST_CurveToLine($1, 32)' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_HasArc(Geometry geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_has_arc' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_LineToCurve(Geometry geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_line_desegmentize' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_OrderingEquals(GeometryA geometry, GeometryB geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_same' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.3.0 CREATE OR REPLACE FUNCTION ST_OrderingEquals(GeometryA geometry, GeometryB geometry) RETURNS boolean AS $$ SELECT $1 ~= $2 AND _ST_OrderingEquals($1, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ------------------------------------------------------------------------------- -- SQL/MM - SQL Functions on type ST_Point ------------------------------------------------------------------------------- -- PostGIS equivalent function: ST_MakePoint(XCoordinate float8,YCoordinate float8) CREATE OR REPLACE FUNCTION ST_Point(float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: ST_MakePolygon(Geometry geometry) CREATE OR REPLACE FUNCTION ST_Polygon(geometry, int) RETURNS geometry AS $$ SELECT ST_SetSRID(ST_MakePolygon($1), $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: GeomFromWKB(WKB bytea)) -- Note: Defaults to an SRID=-1, not 0 as per SQL/MM specs. CREATE OR REPLACE FUNCTION ST_WKBToSQL(WKB bytea) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_WKB' LANGUAGE 'c' IMMUTABLE STRICT; --- -- Linear referencing functions --- -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_LocateBetween(Geometry geometry, FromMeasure float8, ToMeasure float8, LeftRightOffset float8 default 0.0) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_LocateBetween' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_LocateAlong(Geometry geometry, Measure float8, LeftRightOffset float8 default 0.0) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_LocateAlong' LANGUAGE 'c' IMMUTABLE STRICT; -- Only accepts LINESTRING as parameters. -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_LocateBetweenElevations(Geometry geometry, FromElevation float8, ToElevation float8) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_LocateBetweenElevations' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_InterpolatePoint(Line geometry, Point geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'ST_InterpolatePoint' LANGUAGE 'c' IMMUTABLE STRICT; --------------------------------------------------------------- -- END --------------------------------------------------------------- --------------------------------------------------------------- -- USER CONTRIBUTED --------------------------------------------------------------- ----------------------------------------------------------------------- -- ST_MinimumBoundingCircle(inputgeom geometry, segs_per_quarter integer) ----------------------------------------------------------------------- -- Returns the smallest circle polygon that can fully contain a geometry -- Defaults to 48 segs per quarter to approximate a circle -- Contributed by Bruce Rindahl -- Availability: 1.4.0 ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_MinimumBoundingCircle(inputgeom geometry, segs_per_quarter integer DEFAULT 48) RETURNS geometry AS $BODY$ DECLARE hull GEOMETRY; ring GEOMETRY; center GEOMETRY; radius DOUBLE PRECISION; dist DOUBLE PRECISION; d DOUBLE PRECISION; idx1 integer; idx2 integer; l1 GEOMETRY; l2 GEOMETRY; p1 GEOMETRY; p2 GEOMETRY; a1 DOUBLE PRECISION; a2 DOUBLE PRECISION; BEGIN -- First compute the ConvexHull of the geometry hull = ST_ConvexHull(inputgeom); --A point really has no MBC IF ST_GeometryType(hull) = 'ST_Point' THEN RETURN hull; END IF; -- convert the hull perimeter to a linestring so we can manipulate individual points --If its already a linestring force it to a closed linestring ring = CASE WHEN ST_GeometryType(hull) = 'ST_LineString' THEN ST_AddPoint(hull, ST_StartPoint(hull)) ELSE ST_ExteriorRing(hull) END; dist = 0; -- Brute Force - check every pair FOR i in 1 .. (ST_NumPoints(ring)-2) LOOP FOR j in i .. (ST_NumPoints(ring)-1) LOOP d = ST_Distance(ST_PointN(ring,i),ST_PointN(ring,j)); -- Check the distance and update if larger IF (d > dist) THEN dist = d; idx1 = i; idx2 = j; END IF; END LOOP; END LOOP; -- We now have the diameter of the convex hull. The following line returns it if desired. -- RETURN ST_MakeLine(ST_PointN(ring,idx1),ST_PointN(ring,idx2)); -- Now for the Minimum Bounding Circle. Since we know the two points furthest from each -- other, the MBC must go through those two points. Start with those points as a diameter of a circle. -- The radius is half the distance between them and the center is midway between them radius = ST_Distance(ST_PointN(ring,idx1),ST_PointN(ring,idx2)) / 2.0; center = ST_LineInterpolatePoint(ST_MakeLine(ST_PointN(ring,idx1),ST_PointN(ring,idx2)),0.5); -- Loop through each vertex and check if the distance from the center to the point -- is greater than the current radius. FOR k in 1 .. (ST_NumPoints(ring)-1) LOOP IF(k <> idx1 and k <> idx2) THEN dist = ST_Distance(center,ST_PointN(ring,k)); IF (dist > radius) THEN -- We have to expand the circle. The new circle must pass trhough -- three points - the two original diameters and this point. -- Draw a line from the first diameter to this point l1 = ST_Makeline(ST_PointN(ring,idx1),ST_PointN(ring,k)); -- Compute the midpoint p1 = ST_LineInterpolatePoint(l1,0.5); -- Rotate the line 90 degrees around the midpoint (perpendicular bisector) l1 = ST_Rotate(l1,pi()/2,p1); -- Compute the azimuth of the bisector a1 = ST_Azimuth(ST_PointN(l1,1),ST_PointN(l1,2)); -- Extend the line in each direction the new computed distance to insure they will intersect l1 = ST_AddPoint(l1,ST_Makepoint(ST_X(ST_PointN(l1,2))+sin(a1)*dist,ST_Y(ST_PointN(l1,2))+cos(a1)*dist),-1); l1 = ST_AddPoint(l1,ST_Makepoint(ST_X(ST_PointN(l1,1))-sin(a1)*dist,ST_Y(ST_PointN(l1,1))-cos(a1)*dist),0); -- Repeat for the line from the point to the other diameter point l2 = ST_Makeline(ST_PointN(ring,idx2),ST_PointN(ring,k)); p2 = ST_LineInterpolatePoint(l2,0.5); l2 = ST_Rotate(l2,pi()/2,p2); a2 = ST_Azimuth(ST_PointN(l2,1),ST_PointN(l2,2)); l2 = ST_AddPoint(l2,ST_Makepoint(ST_X(ST_PointN(l2,2))+sin(a2)*dist,ST_Y(ST_PointN(l2,2))+cos(a2)*dist),-1); l2 = ST_AddPoint(l2,ST_Makepoint(ST_X(ST_PointN(l2,1))-sin(a2)*dist,ST_Y(ST_PointN(l2,1))-cos(a2)*dist),0); -- The new center is the intersection of the two bisectors center = ST_Intersection(l1,l2); -- The new radius is the distance to any of the three points radius = ST_Distance(center,ST_PointN(ring,idx1)); END IF; END IF; END LOOP; --DONE!! Return the MBC via the buffer command RETURN ST_Buffer(center,radius,segs_per_quarter); END; $BODY$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- ST_ConcaveHull and Helper functions starts here -- ----------------------------------------------------------------------- -- Contributed by Regina Obe and Leo Hsu -- Availability: 2.0.0 ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_concavehull(param_inputgeom geometry) RETURNS geometry AS $$ DECLARE vexhull GEOMETRY; var_resultgeom geometry; var_inputgeom geometry; vexring GEOMETRY; cavering GEOMETRY; cavept geometry[]; seglength double precision; var_tempgeom geometry; scale_factor integer := 1; i integer; BEGIN -- First compute the ConvexHull of the geometry vexhull := ST_ConvexHull(param_inputgeom); var_inputgeom := param_inputgeom; --A point really has no concave hull IF ST_GeometryType(vexhull) = 'ST_Point' OR ST_GeometryType(vexHull) = 'ST_LineString' THEN RETURN vexhull; END IF; -- convert the hull perimeter to a linestring so we can manipulate individual points vexring := CASE WHEN ST_GeometryType(vexhull) = 'ST_LineString' THEN vexhull ELSE ST_ExteriorRing(vexhull) END; IF abs(ST_X(ST_PointN(vexring,1))) < 1 THEN --scale the geometry to prevent stupid precision errors - not sure it works so make low for now scale_factor := 100; vexring := ST_Scale(vexring, scale_factor,scale_factor); var_inputgeom := ST_Scale(var_inputgeom, scale_factor, scale_factor); --RAISE NOTICE 'Scaling'; END IF; seglength := ST_Length(vexring)/least(ST_NPoints(vexring)*2,1000) ; vexring := ST_Segmentize(vexring, seglength); -- find the point on the original geom that is closest to each point of the convex hull and make a new linestring out of it. cavering := ST_Collect( ARRAY( SELECT ST_ClosestPoint(var_inputgeom, pt ) As the_geom FROM ( SELECT ST_PointN(vexring, n ) As pt, n FROM generate_series(1, ST_NPoints(vexring) ) As n ) As pt ) ) ; var_resultgeom := ST_MakeLine(geom) FROM ST_Dump(cavering) As foo; IF ST_IsSimple(var_resultgeom) THEN var_resultgeom := ST_MakePolygon(var_resultgeom); --RAISE NOTICE 'is Simple: %', var_resultgeom; ELSE /** will not result in a valid polygon -- just return convex hull **/ --RAISE NOTICE 'is not Simple: %', var_resultgeom; var_resultgeom := ST_ConvexHull(var_resultgeom); END IF; IF scale_factor > 1 THEN -- scale the result back var_resultgeom := ST_Scale(var_resultgeom, 1/scale_factor, 1/scale_factor); END IF; RETURN var_resultgeom; END; $$ LANGUAGE plpgsql IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_ConcaveHull(param_geom geometry, param_pctconvex float, param_allow_holes boolean DEFAULT false) RETURNS geometry AS $$ DECLARE var_convhull geometry := ST_ConvexHull(param_geom); var_param_geom geometry := param_geom; var_initarea float := ST_Area(var_convhull); var_newarea float := var_initarea; var_div integer := 6; /** this is the 1/var_div is the percent increase we will allow per triangle to keep speed decent **/ var_tempgeom geometry; var_tempgeom2 geometry; var_cent geometry; var_geoms geometry[4]; /** We will cut the current geometry into 4 triangular quadrants along the centroid/extent **/ var_enline geometry; var_resultgeom geometry; var_atempgeoms geometry[]; var_buf float := 1; /**tolerance so that geometries that are right on the extent don't get accidentally clipped off **/ BEGIN -- We start with convex hull as our base var_resultgeom := var_convhull; IF param_pctconvex = 1 THEN return var_resultgeom; ELSIF ST_GeometryType(var_param_geom) = 'ST_Polygon' THEN -- it is as concave as it is going to get IF param_allow_holes THEN -- leave the holes RETURN var_param_geom; ELSE -- remove the holes var_resultgeom := ST_MakePolygon(ST_ExteriorRing(var_param_geom)); RETURN var_resultgeom; END IF; END IF; IF ST_Dimension(var_resultgeom) > 1 AND param_pctconvex BETWEEN 0 and 0.98 THEN -- get linestring that forms envelope of geometry var_enline := ST_Boundary(ST_Envelope(var_param_geom)); var_buf := ST_Length(var_enline)/1000.0; IF ST_GeometryType(var_param_geom) = 'ST_MultiPoint' AND ST_NumGeometries(var_param_geom) BETWEEN 4 and 200 THEN -- we make polygons out of points since they are easier to cave in. -- Note we limit to between 4 and 200 points because this process is slow and gets quadratically slow var_buf := sqrt(ST_Area(var_convhull)*0.8/(ST_NumGeometries(var_param_geom)*ST_NumGeometries(var_param_geom))); var_atempgeoms := ARRAY(SELECT geom FROM ST_DumpPoints(var_param_geom)); -- 5 and 10 and just fudge factors var_tempgeom := ST_Union(ARRAY(SELECT geom FROM ( -- fuse near neighbors together SELECT DISTINCT ON (i) i, ST_Distance(var_atempgeoms[i],var_atempgeoms[j]), ST_Buffer(ST_MakeLine(var_atempgeoms[i], var_atempgeoms[j]) , var_buf*5, 'quad_segs=3') As geom FROM generate_series(1,array_upper(var_atempgeoms, 1)) As i INNER JOIN generate_series(1,array_upper(var_atempgeoms, 1)) As j ON ( NOT ST_Intersects(var_atempgeoms[i],var_atempgeoms[j]) AND ST_DWithin(var_atempgeoms[i],var_atempgeoms[j], var_buf*10) ) UNION ALL -- catch the ones with no near neighbors SELECT i, 0, ST_Buffer(var_atempgeoms[i] , var_buf*10, 'quad_segs=3') As geom FROM generate_series(1,array_upper(var_atempgeoms, 1)) As i LEFT JOIN generate_series(ceiling(array_upper(var_atempgeoms,1)/2)::integer,array_upper(var_atempgeoms, 1)) As j ON ( NOT ST_Intersects(var_atempgeoms[i],var_atempgeoms[j]) AND ST_DWithin(var_atempgeoms[i],var_atempgeoms[j], var_buf*10) ) WHERE j IS NULL ORDER BY 1, 2 ) As foo ) ); IF ST_IsValid(var_tempgeom) AND ST_GeometryType(var_tempgeom) = 'ST_Polygon' THEN var_tempgeom := ST_ForceSFS(ST_Intersection(var_tempgeom, var_convhull)); IF param_allow_holes THEN var_param_geom := var_tempgeom; ELSE var_param_geom := ST_MakePolygon(ST_ExteriorRing(var_tempgeom)); END IF; return var_param_geom; ELSIF ST_IsValid(var_tempgeom) THEN var_param_geom := ST_ForceSFS(ST_Intersection(var_tempgeom, var_convhull)); END IF; END IF; IF ST_GeometryType(var_param_geom) = 'ST_Polygon' THEN IF NOT param_allow_holes THEN var_param_geom := ST_MakePolygon(ST_ExteriorRing(var_param_geom)); END IF; return var_param_geom; END IF; var_cent := ST_Centroid(var_param_geom); IF (ST_XMax(var_enline) - ST_XMin(var_enline) ) > var_buf AND (ST_YMax(var_enline) - ST_YMin(var_enline) ) > var_buf THEN IF ST_Dwithin(ST_Centroid(var_convhull) , ST_Centroid(ST_Envelope(var_param_geom)), var_buf/2) THEN -- If the geometric dimension is > 1 and the object is symettric (cutting at centroid will not work -- offset a bit) var_cent := ST_Translate(var_cent, (ST_XMax(var_enline) - ST_XMin(var_enline))/1000, (ST_YMAX(var_enline) - ST_YMin(var_enline))/1000); ELSE -- uses closest point on geometry to centroid. I can't explain why we are doing this var_cent := ST_ClosestPoint(var_param_geom,var_cent); END IF; IF ST_DWithin(var_cent, var_enline,var_buf) THEN var_cent := ST_centroid(ST_Envelope(var_param_geom)); END IF; -- break envelope into 4 triangles about the centroid of the geometry and returned the clipped geometry in each quadrant FOR i in 1 .. 4 LOOP var_geoms[i] := ST_MakePolygon(ST_MakeLine(ARRAY[ST_PointN(var_enline,i), ST_PointN(var_enline,i+1), var_cent, ST_PointN(var_enline,i)])); var_geoms[i] := ST_ForceSFS(ST_Intersection(var_param_geom, ST_Buffer(var_geoms[i],var_buf))); IF ST_IsValid(var_geoms[i]) THEN ELSE var_geoms[i] := ST_BuildArea(ST_MakeLine(ARRAY[ST_PointN(var_enline,i), ST_PointN(var_enline,i+1), var_cent, ST_PointN(var_enline,i)])); END IF; END LOOP; var_tempgeom := ST_Union(ARRAY[ST_ConvexHull(var_geoms[1]), ST_ConvexHull(var_geoms[2]) , ST_ConvexHull(var_geoms[3]), ST_ConvexHull(var_geoms[4])]); --RAISE NOTICE 'Curr vex % ', ST_AsText(var_tempgeom); IF ST_Area(var_tempgeom) <= var_newarea AND ST_IsValid(var_tempgeom) THEN --AND ST_GeometryType(var_tempgeom) ILIKE '%Polygon' var_tempgeom := ST_Buffer(ST_ConcaveHull(var_geoms[1],least(param_pctconvex + param_pctconvex/var_div),true),var_buf, 'quad_segs=2'); FOR i IN 1 .. 4 LOOP var_geoms[i] := ST_Buffer(ST_ConcaveHull(var_geoms[i],least(param_pctconvex + param_pctconvex/var_div),true), var_buf, 'quad_segs=2'); IF ST_IsValid(var_geoms[i]) Then var_tempgeom := ST_Union(var_tempgeom, var_geoms[i]); ELSE RAISE NOTICE 'Not valid % %', i, ST_AsText(var_tempgeom); var_tempgeom := ST_Union(var_tempgeom, ST_ConvexHull(var_geoms[i])); END IF; END LOOP; --RAISE NOTICE 'Curr concave % ', ST_AsText(var_tempgeom); IF ST_IsValid(var_tempgeom) THEN var_resultgeom := var_tempgeom; END IF; var_newarea := ST_Area(var_resultgeom); ELSIF ST_IsValid(var_tempgeom) THEN var_resultgeom := var_tempgeom; END IF; IF ST_NumGeometries(var_resultgeom) > 1 THEN var_tempgeom := _ST_ConcaveHull(var_resultgeom); IF ST_IsValid(var_tempgeom) AND ST_GeometryType(var_tempgeom) ILIKE 'ST_Polygon' THEN var_resultgeom := var_tempgeom; ELSE var_resultgeom := ST_Buffer(var_tempgeom,var_buf, 'quad_segs=2'); END IF; END IF; IF param_allow_holes = false THEN -- only keep exterior ring since we do not want holes var_resultgeom := ST_MakePolygon(ST_ExteriorRing(var_resultgeom)); END IF; ELSE var_resultgeom := ST_Buffer(var_resultgeom,var_buf); END IF; var_resultgeom := ST_ForceSFS(ST_Intersection(var_resultgeom, ST_ConvexHull(var_param_geom))); ELSE -- dimensions are too small to cut var_resultgeom := _ST_ConcaveHull(var_param_geom); END IF; RETURN var_resultgeom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- ST_ConcaveHull and Helper functions end here -- ----------------------------------------------------------------------- -- X3D OUTPUT ----------------------------------------------------------------------- -- _ST_AsX3D(version, geom, precision, option, attribs) CREATE OR REPLACE FUNCTION _ST_AsX3D(int4, geometry, int4, int4, text) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asX3D' LANGUAGE 'c' IMMUTABLE; -- ST_AsX3D(geom, precision, options) CREATE OR REPLACE FUNCTION ST_AsX3D(geom geometry, maxdecimaldigits integer DEFAULT 15, options integer DEFAULT 0) RETURNS TEXT AS $$SELECT _ST_AsX3D(3,$1,$2,$3,'');$$ LANGUAGE 'sql' IMMUTABLE; -- make views and spatial_ref_sys public viewable -- GRANT SELECT ON TABLE geography_columns TO public; GRANT SELECT ON TABLE geometry_columns TO public; GRANT SELECT ON TABLE spatial_ref_sys TO public; COMMIT; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/uninstall_long_xact.sql.in������������������������������������������0000644�0000000�0000000�00000002251�12121646322�022444� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: uninstall_long_xact.sql.in 11175 2013-03-18 17:20:18Z strk $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- Copyright 2001-2003 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------------------------------------- -- LONG TERM LOCKING ----------------------------------------------------------------------- DROP FUNCTION UnlockRows(text); DROP FUNCTION LockRow(text, text, text, text, timestamp); DROP FUNCTION LockRow(text, text, text, text); DROP FUNCTION LockRow(text, text, text); DROP FUNCTION LockRow(text, text, text, timestamp); DROP FUNCTION AddAuth(text); DROP FUNCTION CheckAuth(text, text, text); DROP FUNCTION CheckAuth(text, text); DROP FUNCTION CheckAuthTrigger(); DROP FUNCTION GetTransactionID(); DROP FUNCTION EnableLongTransactions(); DROP FUNCTION LongTransactionsEnabled(); DROP FUNCTION DisableLongTransactions(); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/sfcgal.sql.in�������������������������������������������������������0000644�0000000�0000000�00000004054�12143217372�017642� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--------------------------------------------------------------------------- -- -- PostGIS - SFCGAL functions -- Copyright 2012-2013 Oslandia <infos@oslandia.com> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- --------------------------------------------------------------------------- -- -- New SFCGAL functions (meaning prototype not already provided by GEOS) -- BEGIN; CREATE OR REPLACE FUNCTION postgis_sfcgal_version() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION ST_3DIntersection(geom1 geometry, geom2 geometry) RETURNS geometry AS 'MODULE_PATHNAME','sfcgal_intersection3D' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_Tesselate(geometry) RETURNS geometry AS 'MODULE_PATHNAME','sfcgal_tesselate' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_3DArea(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME','sfcgal_area3D' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_Extrude(geometry, float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME','sfcgal_extrude' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_ForceLHR(geometry) RETURNS geometry AS 'MODULE_PATHNAME','sfcgal_force_lhr' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_Orientation(geometry) RETURNS INT4 AS 'MODULE_PATHNAME','sfcgal_orientation' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_MinkowskiSum(geometry, geometry) RETURNS geometry AS 'MODULE_PATHNAME','sfcgal_minkowski_sum' LANGUAGE 'c' IMMUTABLE STRICT COST 100; CREATE OR REPLACE FUNCTION ST_StraightSkeleton(geometry) RETURNS geometry AS 'MODULE_PATHNAME','sfcgal_straight_skeleton' LANGUAGE 'c' IMMUTABLE STRICT COST 100; COMMIT; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_geos.c�������������������������������������������������������0000644�0000000�0000000�00000260413�12143123367�017733� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2009-2012 Sandro Santilli <strk@keybit.net> * Copyright 2008 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* TODO: we probaby don't need _all_ these pgsql headers */ #include "postgres.h" #include "fmgr.h" #include "miscadmin.h" #include "utils/array.h" #include "utils/builtins.h" #include "utils/hsearch.h" #include "utils/memutils.h" #include "executor/spi.h" #include "funcapi.h" #include "../postgis_config.h" #include "lwgeom_functions_analytic.h" /* for point_in_polygon */ #include "lwgeom_geos.h" #include "liblwgeom_internal.h" #include "lwgeom_rtree.h" #include "lwgeom_geos_prepared.h" #include <string.h> #include <assert.h> /* ** Prototypes for SQL-bound functions */ Datum relate_full(PG_FUNCTION_ARGS); Datum relate_pattern(PG_FUNCTION_ARGS); Datum disjoint(PG_FUNCTION_ARGS); Datum touches(PG_FUNCTION_ARGS); Datum geos_intersects(PG_FUNCTION_ARGS); Datum crosses(PG_FUNCTION_ARGS); Datum contains(PG_FUNCTION_ARGS); Datum containsproperly(PG_FUNCTION_ARGS); Datum covers(PG_FUNCTION_ARGS); Datum overlaps(PG_FUNCTION_ARGS); Datum isvalid(PG_FUNCTION_ARGS); Datum isvalidreason(PG_FUNCTION_ARGS); Datum isvaliddetail(PG_FUNCTION_ARGS); Datum buffer(PG_FUNCTION_ARGS); Datum geos_intersection(PG_FUNCTION_ARGS); Datum convexhull(PG_FUNCTION_ARGS); Datum topologypreservesimplify(PG_FUNCTION_ARGS); Datum difference(PG_FUNCTION_ARGS); Datum boundary(PG_FUNCTION_ARGS); Datum symdifference(PG_FUNCTION_ARGS); Datum geomunion(PG_FUNCTION_ARGS); Datum issimple(PG_FUNCTION_ARGS); Datum isring(PG_FUNCTION_ARGS); Datum pointonsurface(PG_FUNCTION_ARGS); Datum GEOSnoop(PG_FUNCTION_ARGS); Datum postgis_geos_version(PG_FUNCTION_ARGS); Datum centroid(PG_FUNCTION_ARGS); Datum polygonize_garray(PG_FUNCTION_ARGS); Datum linemerge(PG_FUNCTION_ARGS); Datum coveredby(PG_FUNCTION_ARGS); Datum hausdorffdistance(PG_FUNCTION_ARGS); Datum hausdorffdistancedensify(PG_FUNCTION_ARGS); Datum ST_UnaryUnion(PG_FUNCTION_ARGS); Datum ST_Equals(PG_FUNCTION_ARGS); Datum ST_BuildArea(PG_FUNCTION_ARGS); Datum ST_DelaunayTriangles(PG_FUNCTION_ARGS); Datum pgis_union_geometry_array(PG_FUNCTION_ARGS); /* ** Prototypes end */ PG_FUNCTION_INFO_V1(postgis_geos_version); Datum postgis_geos_version(PG_FUNCTION_ARGS) { const char *ver = lwgeom_geos_version(); text *result = cstring2text(ver); PG_RETURN_POINTER(result); } /** * @brief Compute the Hausdorff distance thanks to the corresponding GEOS function * @example hausdorffdistance {@link #hausdorffdistance} - SELECT st_hausdorffdistance( * 'POLYGON((0 0, 0 2, 1 2, 2 2, 2 0, 0 0))'::geometry, * 'POLYGON((0.5 0.5, 0.5 2.5, 1.5 2.5, 2.5 2.5, 2.5 0.5, 0.5 0.5))'::geometry); */ PG_FUNCTION_INFO_V1(hausdorffdistance); Datum hausdorffdistance(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 32 lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "'ST_HausdorffDistance' function (3.2.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1; GEOSGeometry *g2; double result; int retcode; POSTGIS_DEBUG(2, "hausdorff_distance called"); geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_NULL(); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } retcode = GEOSHausdorffDistance(g1, g2, &result); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (retcode == 0) { lwerror("GEOSHausdorffDistance: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /*never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_FLOAT8(result); #endif } /** * @brief Compute the Hausdorff distance with densification thanks to the corresponding GEOS function * @example hausdorffdistancedensify {@link #hausdorffdistancedensify} - SELECT st_hausdorffdistancedensify( * 'POLYGON((0 0, 0 2, 1 2, 2 2, 2 0, 0 0))'::geometry, * 'POLYGON((0.5 0.5, 0.5 2.5, 1.5 2.5, 2.5 2.5, 2.5 0.5, 0.5 0.5))'::geometry, 0.5); */ PG_FUNCTION_INFO_V1(hausdorffdistancedensify); Datum hausdorffdistancedensify(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 32 lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "'ST_HausdorffDistance' function (3.2.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1; GEOSGeometry *g2; double densifyFrac; double result; int retcode; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); densifyFrac = PG_GETARG_FLOAT8(2); if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_NULL(); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } retcode = GEOSHausdorffDistanceDensify(g1, g2, densifyFrac, &result); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (retcode == 0) { lwerror("GEOSHausdorffDistanceDensify: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /*never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_FLOAT8(result); #endif } /** * @brief This is the final function for GeomUnion * aggregate. Will have as input an array of Geometries. * Will iteratively call GEOSUnion on the GEOS-converted * versions of them and return PGIS-converted version back. * Changing combination order *might* speed up performance. */ PG_FUNCTION_INFO_V1(pgis_union_geometry_array); Datum pgis_union_geometry_array(PG_FUNCTION_ARGS) #if POSTGIS_GEOS_VERSION >= 33 { /* ** For GEOS >= 3.3, use the new UnaryUnion functionality to merge the ** terminal collection from the ST_Union aggregate */ Datum datum; ArrayType *array; int is3d = LW_FALSE, gotsrid = LW_FALSE; int nelems = 0, i = 0, geoms_size = 0, curgeom = 0; GSERIALIZED *gser_out = NULL; GEOSGeometry *g = NULL; GEOSGeometry *g_union = NULL; GEOSGeometry **geoms = NULL; int srid = SRID_UNKNOWN; size_t offset = 0; bits8 *bitmap; int bitmask; int empty_type = 0; datum = PG_GETARG_DATUM(0); /* Null array, null geometry (should be empty?) */ if ( (Pointer *)datum == NULL ) PG_RETURN_NULL(); array = DatumGetArrayTypeP(datum); /* How many things in our array? */ nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array)); /* PgSQL supplies a bitmap of which array entries are null */ bitmap = ARR_NULLBITMAP(array); /* Empty array? Null return */ if ( nelems == 0 ) PG_RETURN_NULL(); /* One-element union is the element itself! */ if ( nelems == 1 ) { /* If the element is a NULL then we need to handle it separately */ if (bitmap && (*bitmap & 1) == 0) PG_RETURN_NULL(); else PG_RETURN_POINTER((GSERIALIZED *)(ARR_DATA_PTR(array))); } /* Ok, we really need GEOS now ;) */ initGEOS(lwnotice, lwgeom_geos_error); /* ** Collect the non-empty inputs and stuff them into a GEOS collection */ geoms_size = nelems; geoms = palloc( sizeof(GEOSGeometry*) * geoms_size ); /* ** We need to convert the array of GSERIALIZED into a GEOS collection. ** First make an array of GEOS geometries. */ offset = 0; bitmap = ARR_NULLBITMAP(array); bitmask = 1; for ( i = 0; i < nelems; i++ ) { /* Only work on non-NULL entries in the array */ if ((bitmap && (*bitmap & bitmask) != 0) || !bitmap) { GSERIALIZED *gser_in = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); /* Check for SRID mismatch in array elements */ if ( gotsrid ) { error_if_srid_mismatch(srid, gserialized_get_srid(gser_in)); } else { /* Initialize SRID/dimensions info */ srid = gserialized_get_srid(gser_in); is3d = gserialized_has_z(gser_in); gotsrid = 1; } /* Don't include empties in the union */ if ( gserialized_is_empty(gser_in) ) { int gser_type = gserialized_get_type(gser_in); if (gser_type > empty_type) { empty_type = gser_type; POSTGIS_DEBUGF(4, "empty_type = %d gser_type = %d", empty_type, gser_type); } } else { g = (GEOSGeometry *)POSTGIS2GEOS(gser_in); /* Uh oh! Exception thrown at construction... */ if ( ! g ) { lwerror("One of the geometries in the set " "could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } /* Ensure we have enough space in our storage array */ if ( curgeom == geoms_size ) { geoms_size *= 2; geoms = repalloc( geoms, sizeof(GEOSGeometry*) * geoms_size ); } geoms[curgeom] = g; curgeom++; } offset += INTALIGN(VARSIZE(gser_in)); } /* Advance NULL bitmap */ if (bitmap) { bitmask <<= 1; if (bitmask == 0x100) { bitmap++; bitmask = 1; } } } /* ** Take our GEOS geometries and turn them into a GEOS collection, ** then pass that into cascaded union. */ if (curgeom > 0) { g = GEOSGeom_createCollection(GEOS_GEOMETRYCOLLECTION, geoms, curgeom); if ( ! g ) { lwerror("Could not create GEOS COLLECTION from geometry array: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g_union = GEOSUnaryUnion(g); GEOSGeom_destroy(g); if ( ! g_union ) { lwerror("GEOSUnaryUnion: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } GEOSSetSRID(g_union, srid); gser_out = GEOS2POSTGIS(g_union, is3d); GEOSGeom_destroy(g_union); } /* No real geometries in our array, any empties? */ else { /* If it was only empties, we'll return the largest type number */ if ( empty_type > 0 ) { PG_RETURN_POINTER(geometry_serialize(lwgeom_construct_empty(empty_type, srid, is3d, 0))); } /* Nothing but NULL, returns NULL */ else { PG_RETURN_NULL(); } } if ( ! gser_out ) { /* Union returned a NULL geometry */ PG_RETURN_NULL(); } PG_RETURN_POINTER(gser_out); } #else { /* For GEOS < 3.3, use the old CascadedUnion function for polygons and brute force two-by-two for other types. */ Datum datum; ArrayType *array; int is3d = 0; int nelems, i; GSERIALIZED *result = NULL; GSERIALIZED *pgis_geom = NULL; GEOSGeometry * g1 = NULL; GEOSGeometry * g2 = NULL; GEOSGeometry * geos_result=NULL; int srid=SRID_UNKNOWN; size_t offset = 0; bits8 *bitmap; int bitmask; #if POSTGIS_DEBUG_LEVEL > 0 static int call=1; #endif int gotsrid = 0; int allpolys=1; #if POSTGIS_DEBUG_LEVEL > 0 call++; POSTGIS_DEBUGF(2, "GEOS incremental union (call %d)", call); #endif datum = PG_GETARG_DATUM(0); /* TODO handle empties */ /* Null array, null geometry (should be empty?) */ if ( (Pointer *)datum == NULL ) PG_RETURN_NULL(); array = DatumGetArrayTypeP(datum); nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array)); bitmap = ARR_NULLBITMAP(array); POSTGIS_DEBUGF(3, "unite_garray: number of elements: %d", nelems); if ( nelems == 0 ) PG_RETURN_NULL(); /* One-element union is the element itself */ if ( nelems == 1 ) { /* If the element is a NULL then we need to handle it separately */ if (bitmap && (*bitmap & 1) == 0) PG_RETURN_NULL(); else PG_RETURN_POINTER((GSERIALIZED *)(ARR_DATA_PTR(array))); } /* Ok, we really need geos now ;) */ initGEOS(lwnotice, lwgeom_geos_error); /* ** First, see if all our elements are POLYGON/MULTIPOLYGON ** If they are, we can use UnionCascaded for faster results. */ offset = 0; bitmask = 1; gotsrid = 0; for ( i = 0; i < nelems; i++ ) { /* Don't do anything for NULL values */ if ((bitmap && (*bitmap & bitmask) != 0) || !bitmap) { GSERIALIZED *pggeom = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); int pgtype = gserialized_get_type(pggeom); offset += INTALIGN(VARSIZE(pggeom)); if ( ! gotsrid ) /* Initialize SRID */ { srid = gserialized_get_srid(pggeom); gotsrid = 1; if ( gserialized_has_z(pggeom) ) is3d = 1; } else { error_if_srid_mismatch(srid, gserialized_get_srid(pggeom)); } if ( pgtype != POLYGONTYPE && pgtype != MULTIPOLYGONTYPE ) { allpolys = 0; break; } } /* Advance NULL bitmap */ if (bitmap) { bitmask <<= 1; if (bitmask == 0x100) { bitmap++; bitmask = 1; } } } if ( allpolys ) { /* ** Everything is polygonal, so let's run the cascaded polygon union! */ int geoms_size = nelems; int curgeom = 0; GEOSGeometry **geoms = NULL; geoms = palloc( sizeof(GEOSGeometry *) * geoms_size ); /* ** We need to convert the array of GSERIALIZED into a GEOS MultiPolygon. ** First make an array of GEOS Polygons. */ offset = 0; bitmap = ARR_NULLBITMAP(array); bitmask = 1; for ( i = 0; i < nelems; i++ ) { GEOSGeometry* g; /* Don't do anything for NULL values */ if ((bitmap && (*bitmap & bitmask) != 0) || !bitmap) { GSERIALIZED *pggeom = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); int pgtype = gserialized_get_type(pggeom); offset += INTALIGN(VARSIZE(pggeom)); if ( pgtype == POLYGONTYPE ) { if ( curgeom == geoms_size ) { geoms_size *= 2; geoms = repalloc( geoms, sizeof(GEOSGeom) * geoms_size ); } g = (GEOSGeometry *)POSTGIS2GEOS(pggeom); if ( 0 == g ) /* exception thrown at construction */ { /* TODO: release GEOS allocated memory ! */ lwerror("One of the geometries in the set " "could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } geoms[curgeom] = g; curgeom++; } if ( pgtype == MULTIPOLYGONTYPE ) { int j = 0; LWMPOLY *lwmpoly = (LWMPOLY*)lwgeom_from_gserialized(pggeom);; for ( j = 0; j < lwmpoly->ngeoms; j++ ) { GEOSGeometry* g; if ( curgeom == geoms_size ) { geoms_size *= 2; geoms = repalloc( geoms, sizeof(GEOSGeom) * geoms_size ); } /* This builds a LWPOLY on top of the serialized form */ g = LWGEOM2GEOS(lwpoly_as_lwgeom(lwmpoly->geoms[j])); if ( 0 == g ) /* exception thrown at construction */ { /* TODO: cleanup all GEOS memory */ lwerror("Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } geoms[curgeom++] = g; } lwmpoly_free(lwmpoly); } } /* Advance NULL bitmap */ if (bitmap) { bitmask <<= 1; if (bitmask == 0x100) { bitmap++; bitmask = 1; } } } /* ** Take our GEOS Polygons and turn them into a GEOS MultiPolygon, ** then pass that into cascaded union. */ if (curgeom > 0) { g1 = GEOSGeom_createCollection(GEOS_MULTIPOLYGON, geoms, curgeom); if ( ! g1 ) { /* TODO: cleanup geoms memory */ lwerror("Could not create MULTIPOLYGON from geometry array: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = GEOSUnionCascaded(g1); GEOSGeom_destroy(g1); if ( ! g2 ) { lwerror("GEOSUnionCascaded: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } GEOSSetSRID(g2, srid); result = GEOS2POSTGIS(g2, is3d); GEOSGeom_destroy(g2); } else { /* All we found were NULLs, so let's return NULL */ PG_RETURN_NULL(); } } else { /* ** Heterogeneous result, let's slog through this one union at a time. */ offset = 0; bitmap = ARR_NULLBITMAP(array); bitmask = 1; for (i=0; i<nelems; i++) { /* Don't do anything for NULL values */ if ((bitmap && (*bitmap & bitmask) != 0) || !bitmap) { GSERIALIZED *geom = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); offset += INTALIGN(VARSIZE(geom)); pgis_geom = geom; POSTGIS_DEBUGF(3, "geom %d @ %p", i, geom); /* Check is3d flag */ if ( gserialized_has_z(geom) ) is3d = 1; /* Check SRID homogeneity and initialize geos result */ if ( ! geos_result ) { geos_result = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( 0 == geos_result ) /* exception thrown at construction */ { lwerror("geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } srid = gserialized_get_srid(geom); POSTGIS_DEBUGF(3, "first geom is a %s", lwtype_name(gserialized_get_type(geom))); } else { error_if_srid_mismatch(srid, gserialized_get_srid(geom)); g1 = POSTGIS2GEOS(pgis_geom); if ( 0 == g1 ) /* exception thrown at construction */ { /* TODO: release GEOS allocated memory ! */ lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } POSTGIS_DEBUGF(3, "unite_garray(%d): adding geom %d to union (%s)", call, i, lwtype_name(gserialized_get_type(geom))); g2 = GEOSUnion(g1, geos_result); if ( g2 == NULL ) { GEOSGeom_destroy((GEOSGeometry *)g1); GEOSGeom_destroy((GEOSGeometry *)geos_result); lwerror("GEOSUnion: %s", lwgeom_geos_errmsg); } GEOSGeom_destroy((GEOSGeometry *)g1); GEOSGeom_destroy((GEOSGeometry *)geos_result); geos_result = g2; } } /* Advance NULL bitmap */ if (bitmap) { bitmask <<= 1; if (bitmask == 0x100) { bitmap++; bitmask = 1; } } } /* If geos_result is set then we found at least one non-NULL geometry */ if (geos_result) { GEOSSetSRID(geos_result, srid); result = GEOS2POSTGIS(geos_result, is3d); GEOSGeom_destroy(geos_result); } else { /* All we found were NULLs, so let's return NULL */ PG_RETURN_NULL(); } } if ( result == NULL ) { /* Union returned a NULL geometry */ PG_RETURN_NULL(); } PG_RETURN_POINTER(result); } #endif /* POSTGIS_GEOS_VERSION >= 33 */ /** * @example ST_UnaryUnion {@link #geomunion} SELECT ST_UnaryUnion( * 'POLYGON((0 0, 10 0, 0 10, 10 10, 0 0))' * ); * */ PG_FUNCTION_INFO_V1(ST_UnaryUnion); Datum ST_UnaryUnion(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 PG_RETURN_NULL(); lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "'GEOSUnaryUnion' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ GSERIALIZED *geom1; int is3d; int srid; GEOSGeometry *g1, *g3; GSERIALIZED *result; POSTGIS_DEBUG(2, "in ST_UnaryUnion"); geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* UnaryUnion(empty) == (empty) */ if ( gserialized_is_empty(geom1) ) PG_RETURN_POINTER(geom1); is3d = ( gserialized_has_z(geom1) ); srid = gserialized_get_srid(geom1); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } POSTGIS_DEBUGF(3, "g1=%s", GEOSGeomToWKT(g1)); g3 = GEOSUnaryUnion(g1); POSTGIS_DEBUGF(3, "g3=%s", GEOSGeomToWKT(g3)); GEOSGeom_destroy(g1); if (g3 == NULL) { lwerror("GEOSUnion: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } GEOSSetSRID(g3, srid); result = GEOS2POSTGIS(g3, is3d); GEOSGeom_destroy(g3); if (result == NULL) { elog(ERROR, "ST_UnaryUnion failed converting GEOS result Geometry to PostGIS format"); PG_RETURN_NULL(); /*never get here */ } /* compressType(result); */ PG_FREE_IF_COPY(geom1, 0); PG_RETURN_POINTER(result); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /** * @example geomunion {@link #geomunion} SELECT geomunion( * 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', * 'POLYGON((5 5, 15 5, 15 7, 5 7, 5 5))' * ); * */ PG_FUNCTION_INFO_V1(geomunion); Datum geomunion(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GSERIALIZED *result; LWGEOM *lwgeom1, *lwgeom2, *lwresult ; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); lwgeom1 = lwgeom_from_gserialized(geom1) ; lwgeom2 = lwgeom_from_gserialized(geom2) ; lwresult = lwgeom_union(lwgeom1, lwgeom2) ; result = geometry_serialize(lwresult) ; lwgeom_free(lwgeom1) ; lwgeom_free(lwgeom2) ; lwgeom_free(lwresult) ; PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** * @example symdifference {@link #symdifference} - SELECT symdifference( * 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', * 'POLYGON((5 5, 15 5, 15 7, 5 7, 5 5))'); */ PG_FUNCTION_INFO_V1(symdifference); Datum symdifference(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GSERIALIZED *result; LWGEOM *lwgeom1, *lwgeom2, *lwresult ; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); lwgeom1 = lwgeom_from_gserialized(geom1) ; lwgeom2 = lwgeom_from_gserialized(geom2) ; lwresult = lwgeom_symdifference(lwgeom1, lwgeom2) ; result = geometry_serialize(lwresult) ; lwgeom_free(lwgeom1) ; lwgeom_free(lwgeom2) ; lwgeom_free(lwresult) ; PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(boundary); Datum boundary(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GEOSGeometry *g1, *g3; GSERIALIZED *result; LWGEOM *lwgeom; int srid; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Empty.Boundary() == Empty */ if ( gserialized_is_empty(geom1) ) PG_RETURN_POINTER(geom1); srid = gserialized_get_srid(geom1); lwgeom = lwgeom_from_gserialized(geom1); if ( ! lwgeom ) { lwerror("POSTGIS2GEOS: unable to deserialize input"); PG_RETURN_NULL(); } /* GEOS doesn't do triangle type, so we special case that here */ if (lwgeom->type == TRIANGLETYPE) { lwgeom->type = LINETYPE; result = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_RETURN_POINTER(result); } initGEOS(lwnotice, lwgeom_geos_error); g1 = LWGEOM2GEOS(lwgeom); lwgeom_free(lwgeom); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g3 = (GEOSGeometry *)GEOSBoundary(g1); if (g3 == NULL) { GEOSGeom_destroy(g1); lwerror("GEOSBoundary: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3)); GEOSSetSRID(g3, srid); result = GEOS2POSTGIS(g3, gserialized_has_z(geom1)); if (result == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g3); elog(NOTICE,"GEOS2POSTGIS threw an error (result postgis geometry formation)!"); PG_RETURN_NULL(); /* never get here */ } GEOSGeom_destroy(g1); GEOSGeom_destroy(g3); PG_FREE_IF_COPY(geom1, 0); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(convexhull); Datum convexhull(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GEOSGeometry *g1, *g3; GSERIALIZED *result; LWGEOM *lwout; int srid; GBOX bbox; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Empty.ConvexHull() == Empty */ if ( gserialized_is_empty(geom1) ) PG_RETURN_POINTER(geom1); srid = gserialized_get_srid(geom1); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g3 = (GEOSGeometry *)GEOSConvexHull(g1); GEOSGeom_destroy(g1); if (g3 == NULL) { lwerror("GEOSConvexHull: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3)); GEOSSetSRID(g3, srid); lwout = GEOS2LWGEOM(g3, gserialized_has_z(geom1)); GEOSGeom_destroy(g3); if (lwout == NULL) { elog(ERROR,"convexhull() failed to convert GEOS geometry to LWGEOM"); PG_RETURN_NULL(); /* never get here */ } /* Copy input bbox if any */ if ( gserialized_get_gbox_p(geom1, &bbox) ) { /* Force the box to have the same dimensionality as the lwgeom */ bbox.flags = lwout->flags; lwout->bbox = gbox_copy(&bbox); } result = geometry_serialize(lwout); lwgeom_free(lwout); if (result == NULL) { elog(ERROR,"GEOS convexhull() threw an error (result postgis geometry formation)!"); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(topologypreservesimplify); Datum topologypreservesimplify(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; double tolerance; GEOSGeometry *g1, *g3; GSERIALIZED *result; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); tolerance = PG_GETARG_FLOAT8(1); /* Empty.Simplify() == Empty */ if ( gserialized_is_empty(geom1) ) PG_RETURN_POINTER(geom1); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g3 = GEOSTopologyPreserveSimplify(g1,tolerance); GEOSGeom_destroy(g1); if (g3 == NULL) { lwerror("GEOSTopologyPreserveSimplify: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3)); GEOSSetSRID(g3, gserialized_get_srid(geom1)); result = GEOS2POSTGIS(g3, gserialized_has_z(geom1)); GEOSGeom_destroy(g3); if (result == NULL) { elog(ERROR,"GEOS topologypreservesimplify() threw an error (result postgis geometry formation)!"); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(buffer); Datum buffer(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; double size; GEOSGeometry *g1, *g3; GSERIALIZED *result; int quadsegs = 8; /* the default */ int nargs; enum { ENDCAP_ROUND = 1, ENDCAP_FLAT = 2, ENDCAP_SQUARE = 3 }; enum { JOIN_ROUND = 1, JOIN_MITRE = 2, JOIN_BEVEL = 3 }; static const double DEFAULT_MITRE_LIMIT = 5.0; static const int DEFAULT_ENDCAP_STYLE = ENDCAP_ROUND; static const int DEFAULT_JOIN_STYLE = JOIN_ROUND; double mitreLimit = DEFAULT_MITRE_LIMIT; int endCapStyle = DEFAULT_ENDCAP_STYLE; int joinStyle = DEFAULT_JOIN_STYLE; char *param; char *params = NULL; LWGEOM *lwg; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); size = PG_GETARG_FLOAT8(1); /* Empty.Buffer() == Empty[polygon] */ if ( gserialized_is_empty(geom1) ) { lwg = lwpoly_as_lwgeom(lwpoly_construct_empty( gserialized_get_srid(geom1), 0, 0)); // buffer wouldn't give back z or m anyway PG_RETURN_POINTER(geometry_serialize(lwg)); } nargs = PG_NARGS(); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } if (nargs > 2) { /* We strdup `cause we're going to modify it */ params = pstrdup(PG_GETARG_CSTRING(2)); POSTGIS_DEBUGF(3, "Params: %s", params); for (param=params; ; param=NULL) { char *key, *val; param = strtok(param, " "); if ( param == NULL ) break; POSTGIS_DEBUGF(3, "Param: %s", param); key = param; val = strchr(key, '='); if ( val == NULL || *(val+1) == '\0' ) { lwerror("Missing value for buffer " "parameter %s", key); break; } *val = '\0'; ++val; POSTGIS_DEBUGF(3, "Param: %s : %s", key, val); if ( !strcmp(key, "endcap") ) { /* Supported end cap styles: * "round", "flat", "square" */ if ( !strcmp(val, "round") ) { endCapStyle = ENDCAP_ROUND; } else if ( !strcmp(val, "flat") || !strcmp(val, "butt") ) { endCapStyle = ENDCAP_FLAT; } else if ( !strcmp(val, "square") ) { endCapStyle = ENDCAP_SQUARE; } else { lwerror("Invalid buffer end cap " "style: %s (accept: " "'round', 'flat', 'butt' " "or 'square'" ")", val); break; } } else if ( !strcmp(key, "join") ) { if ( !strcmp(val, "round") ) { joinStyle = JOIN_ROUND; } else if ( !strcmp(val, "mitre") || !strcmp(val, "miter") ) { joinStyle = JOIN_MITRE; } else if ( !strcmp(val, "bevel") ) { joinStyle = JOIN_BEVEL; } else { lwerror("Invalid buffer end cap " "style: %s (accept: " "'round', 'mitre', 'miter' " " or 'bevel'" ")", val); break; } } else if ( !strcmp(key, "mitre_limit") || !strcmp(key, "miter_limit") ) { /* mitreLimit is a float */ mitreLimit = atof(val); } else if ( !strcmp(key, "quad_segs") ) { /* quadrant segments is an int */ quadsegs = atoi(val); } else { lwerror("Invalid buffer parameter: %s (accept: " "'endcap', 'join', 'mitre_limit', " "'miter_limit and " "'quad_segs')", key); break; } } pfree(params); /* was pstrduped */ POSTGIS_DEBUGF(3, "endCap:%d joinStyle:%d mitreLimit:%g", endCapStyle, joinStyle, mitreLimit); } #if POSTGIS_GEOS_VERSION >= 32 g3 = GEOSBufferWithStyle(g1, size, quadsegs, endCapStyle, joinStyle, mitreLimit); GEOSGeom_destroy(g1); #else /* POSTGIS_GEOS_VERSION < 32 */ if ( mitreLimit != DEFAULT_MITRE_LIMIT || endCapStyle != DEFAULT_ENDCAP_STYLE || joinStyle != DEFAULT_JOIN_STYLE ) { lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "specifying a mitre limit != %d or styles different " "from 'round' (needs 3.2 or higher)", DEFAULT_MITRE_LIMIT, POSTGIS_GEOS_VERSION); } g3 = GEOSBuffer(g1,size,quadsegs); GEOSGeom_destroy(g1); #endif /* POSTGIS_GEOS_VERSION < 32 */ if (g3 == NULL) { lwerror("GEOSBuffer: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3)); GEOSSetSRID(g3, gserialized_get_srid(geom1)); result = GEOS2POSTGIS(g3, gserialized_has_z(geom1)); GEOSGeom_destroy(g3); if (result == NULL) { elog(ERROR,"GEOS buffer() threw an error (result postgis geometry formation)!"); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_RETURN_POINTER(result); } /* * Compute at offset curve to a line */ Datum ST_OffsetCurve(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_OffsetCurve); Datum ST_OffsetCurve(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 32 lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "ST_OffsetCurve function " "(needs 3.2 or higher)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); /* never get here */ #else GSERIALIZED *gser_input; GSERIALIZED *gser_result; LWGEOM *lwgeom_input; LWGEOM *lwgeom_result; double size; int quadsegs = 8; /* the default */ int nargs; enum { JOIN_ROUND = 1, JOIN_MITRE = 2, JOIN_BEVEL = 3 }; static const double DEFAULT_MITRE_LIMIT = 5.0; static const int DEFAULT_JOIN_STYLE = JOIN_ROUND; double mitreLimit = DEFAULT_MITRE_LIMIT; int joinStyle = DEFAULT_JOIN_STYLE; char *param = NULL; char *paramstr = NULL; /* Read SQL arguments */ nargs = PG_NARGS(); gser_input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); size = PG_GETARG_FLOAT8(1); /* Check for a useable type */ if ( gserialized_get_type(gser_input) != LINETYPE ) { lwerror("ST_OffsetCurve only works with LineStrings"); PG_RETURN_NULL(); } /* * For distance == 0, just return the input. * Note that due to a bug, GEOS 3.3.0 would return EMPTY. * See http://trac.osgeo.org/geos/ticket/454 */ if ( size == 0 ) PG_RETURN_POINTER(gser_input); /* Read the lwgeom, check for errors */ lwgeom_input = lwgeom_from_gserialized(gser_input); if ( ! lwgeom_input ) lwerror("ST_OffsetCurve: lwgeom_from_gserialized returned NULL"); /* For empty inputs, just echo them back */ if ( lwgeom_is_empty(lwgeom_input) ) PG_RETURN_POINTER(gser_input); /* Process the optional arguments */ if ( nargs > 2 ) { text *wkttext = PG_GETARG_TEXT_P(2); paramstr = text2cstring(wkttext); POSTGIS_DEBUGF(3, "paramstr: %s", paramstr); for ( param=paramstr; ; param=NULL ) { char *key, *val; param = strtok(param, " "); if ( param == NULL ) break; POSTGIS_DEBUGF(3, "Param: %s", param); key = param; val = strchr(key, '='); if ( val == NULL || *(val+1) == '\0' ) { lwerror("ST_OffsetCurve: Missing value for buffer parameter %s", key); break; } *val = '\0'; ++val; POSTGIS_DEBUGF(3, "Param: %s : %s", key, val); if ( !strcmp(key, "join") ) { if ( !strcmp(val, "round") ) { joinStyle = JOIN_ROUND; } else if ( !(strcmp(val, "mitre") && strcmp(val, "miter")) ) { joinStyle = JOIN_MITRE; } else if ( ! strcmp(val, "bevel") ) { joinStyle = JOIN_BEVEL; } else { lwerror("Invalid buffer end cap style: %s (accept: " "'round', 'mitre', 'miter' or 'bevel')", val); break; } } else if ( !strcmp(key, "mitre_limit") || !strcmp(key, "miter_limit") ) { /* mitreLimit is a float */ mitreLimit = atof(val); } else if ( !strcmp(key, "quad_segs") ) { /* quadrant segments is an int */ quadsegs = atoi(val); } else { lwerror("Invalid buffer parameter: %s (accept: " "'join', 'mitre_limit', 'miter_limit and " "'quad_segs')", key); break; } } POSTGIS_DEBUGF(3, "joinStyle:%d mitreLimit:%g", joinStyle, mitreLimit); pfree(paramstr); /* alloc'ed in text2cstring */ } lwgeom_result = lwgeom_offsetcurve(lwgeom_as_lwline(lwgeom_input), size, quadsegs, joinStyle, mitreLimit); if (lwgeom_result == NULL) lwerror("ST_OffsetCurve: lwgeom_offsetcurve returned NULL"); gser_result = gserialized_from_lwgeom(lwgeom_result, 0, 0); lwgeom_free(lwgeom_input); lwgeom_free(lwgeom_result); PG_RETURN_POINTER(gser_result); #endif /* POSTGIS_GEOS_VERSION < 32 */ } PG_FUNCTION_INFO_V1(geos_intersection); Datum geos_intersection(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GSERIALIZED *result; LWGEOM *lwgeom1, *lwgeom2, *lwresult ; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); lwgeom1 = lwgeom_from_gserialized(geom1) ; lwgeom2 = lwgeom_from_gserialized(geom2) ; lwresult = lwgeom_intersection(lwgeom1, lwgeom2) ; result = geometry_serialize(lwresult) ; lwgeom_free(lwgeom1) ; lwgeom_free(lwgeom2) ; lwgeom_free(lwresult) ; PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** * @example difference {@link #difference} - SELECT difference( * 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', * 'POLYGON((5 5, 15 5, 15 7, 5 7, 5 5))'); */ PG_FUNCTION_INFO_V1(difference); Datum difference(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GSERIALIZED *result; LWGEOM *lwgeom1, *lwgeom2, *lwresult ; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); lwgeom1 = lwgeom_from_gserialized(geom1) ; lwgeom2 = lwgeom_from_gserialized(geom2) ; lwresult = lwgeom_difference(lwgeom1, lwgeom2) ; result = geometry_serialize(lwresult) ; lwgeom_free(lwgeom1) ; lwgeom_free(lwgeom2) ; lwgeom_free(lwresult) ; PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** @example pointonsurface - {@link #pointonsurface} SELECT pointonsurface('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); */ PG_FUNCTION_INFO_V1(pointonsurface); Datum pointonsurface(PG_FUNCTION_ARGS) { GSERIALIZED *geom; GEOSGeometry *g1, *g3; GSERIALIZED *result; geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Empty.PointOnSurface == Point Empty */ if ( gserialized_is_empty(geom) ) { LWPOINT *lwp = lwpoint_construct_empty( gserialized_get_srid(geom), gserialized_has_z(geom), gserialized_has_m(geom)); result = geometry_serialize(lwpoint_as_lwgeom(lwp)); lwpoint_free(lwp); PG_RETURN_POINTER(result); } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( 0 == g1 ) /* exception thrown at construction */ { elog(WARNING, "GEOSPointOnSurface(): %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g3 = GEOSPointOnSurface(g1); if (g3 == NULL) { GEOSGeom_destroy(g1); lwerror("GEOSPointOnSurface: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ; GEOSSetSRID(g3, gserialized_get_srid(geom)); result = GEOS2POSTGIS(g3, gserialized_has_z(geom)); if (result == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g3); elog(ERROR,"GEOS pointonsurface() threw an error (result postgis geometry formation)!"); PG_RETURN_NULL(); /* never get here */ } GEOSGeom_destroy(g1); GEOSGeom_destroy(g3); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(centroid); Datum centroid(PG_FUNCTION_ARGS) { GSERIALIZED *geom, *result; GEOSGeometry *geosgeom, *geosresult; geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Empty.Centroid() == Point Empty */ if ( gserialized_is_empty(geom) ) { LWPOINT *lwp = lwpoint_construct_empty( gserialized_get_srid(geom), gserialized_has_z(geom), gserialized_has_m(geom)); result = geometry_serialize(lwpoint_as_lwgeom(lwp)); lwpoint_free(lwp); PG_RETURN_POINTER(result); } initGEOS(lwnotice, lwgeom_geos_error); geosgeom = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( 0 == geosgeom ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } geosresult = GEOSGetCentroid(geosgeom); if ( geosresult == NULL ) { GEOSGeom_destroy(geosgeom); lwerror("GEOSGetCentroid: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } GEOSSetSRID(geosresult, gserialized_get_srid(geom)); result = GEOS2POSTGIS(geosresult, gserialized_has_z(geom)); if (result == NULL) { GEOSGeom_destroy(geosgeom); GEOSGeom_destroy(geosresult); elog(ERROR,"Error in GEOS-PGIS conversion"); PG_RETURN_NULL(); } GEOSGeom_destroy(geosgeom); GEOSGeom_destroy(geosresult); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /*---------------------------------------------*/ /** * @brief Throws an ereport ERROR if either geometry is a COLLECTIONTYPE. Additionally * displays a HINT of the first 80 characters of the WKT representation of the * problematic geometry so a user knows which parameter and which geometry * is causing the problem. */ void errorIfGeometryCollection(GSERIALIZED *g1, GSERIALIZED *g2) { int t1 = gserialized_get_type(g1); int t2 = gserialized_get_type(g2); char *hintmsg; char *hintwkt; size_t hintsz; LWGEOM *lwgeom; if ( t1 == COLLECTIONTYPE) { lwgeom = lwgeom_from_gserialized(g1); hintwkt = lwgeom_to_wkt(lwgeom, WKT_SFSQL, DBL_DIG, &hintsz); hintmsg = lwmessage_truncate(hintwkt, 0, hintsz-1, 80, 1); ereport(ERROR, (errmsg("Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported."), errhint("Change argument 1: '%s'", hintmsg)) ); pfree(hintwkt); pfree(hintmsg); lwgeom_free(lwgeom); } else if (t2 == COLLECTIONTYPE) { lwgeom = lwgeom_from_gserialized(g2); hintwkt = lwgeom_to_wkt(lwgeom, WKT_SFSQL, DBL_DIG, &hintsz); hintmsg = lwmessage_truncate(hintwkt, 0, hintsz-1, 80, 1); ereport(ERROR, (errmsg("Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported."), errhint("Change argument 2: '%s'", hintmsg)) ); pfree(hintwkt); pfree(hintmsg); lwgeom_free(lwgeom); } } PG_FUNCTION_INFO_V1(isvalid); Datum isvalid(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; LWGEOM *lwgeom; bool result; GEOSGeom g1; #if POSTGIS_GEOS_VERSION < 33 GBOX box1; #endif geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Empty.IsValid() == TRUE */ if ( gserialized_is_empty(geom1) ) PG_RETURN_BOOL(true); #if POSTGIS_GEOS_VERSION < 33 /* Short circuit and return FALSE if we have infinite coordinates */ /* GEOS 3.3+ is supposed to handle this stuff OK */ if ( gserialized_get_gbox_p(geom1, &box1) ) { if ( isinf(box1.xmax) || isinf(box1.ymax) || isinf(box1.xmin) || isinf(box1.ymin) || isnan(box1.xmax) || isnan(box1.ymax) || isnan(box1.xmin) || isnan(box1.ymin) ) { lwnotice("Geometry contains an Inf or NaN coordinate"); PG_RETURN_BOOL(FALSE); } } #endif initGEOS(lwnotice, lwgeom_geos_error); lwgeom = lwgeom_from_gserialized(geom1); if ( ! lwgeom ) { lwerror("unable to deserialize input"); } g1 = LWGEOM2GEOS(lwgeom); lwgeom_free(lwgeom); if ( ! g1 ) { /* should we drop the following * notice now that we have ST_isValidReason ? */ lwnotice("%s", lwgeom_geos_errmsg); PG_RETURN_BOOL(FALSE); } result = GEOSisValid(g1); GEOSGeom_destroy(g1); if (result == 2) { elog(ERROR,"GEOS isvalid() threw an error!"); PG_RETURN_NULL(); /*never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_RETURN_BOOL(result); } /* ** IsValidReason is only available in the GEOS ** C API > version 3.0 */ PG_FUNCTION_INFO_V1(isvalidreason); Datum isvalidreason(PG_FUNCTION_ARGS) { GSERIALIZED *geom = NULL; char *reason_str = NULL; text *result = NULL; const GEOSGeometry *g1 = NULL; #if POSTGIS_GEOS_VERSION < 33 GBOX box; #endif geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); #if POSTGIS_GEOS_VERSION < 33 /* Short circuit and return if we have infinite coordinates */ /* GEOS 3.3+ is supposed to handle this stuff OK */ if ( gserialized_get_gbox_p(geom, &box) ) { if ( isinf(box.xmax) || isinf(box.ymax) || isinf(box.xmin) || isinf(box.ymin) || isnan(box.xmax) || isnan(box.ymax) || isnan(box.xmin) || isnan(box.ymin) ) { const char *rsn = "Geometry contains an Inf or NaN coordinate"; size_t len = strlen(rsn); result = palloc(VARHDRSZ + len); SET_VARSIZE(result, VARHDRSZ + len); memcpy(VARDATA(result), rsn, len); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } } #endif initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( g1 ) { reason_str = GEOSisValidReason(g1); GEOSGeom_destroy((GEOSGeometry *)g1); if (reason_str == NULL) { elog(ERROR,"GEOSisValidReason() threw an error: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } result = cstring2text(reason_str); GEOSFree(reason_str); } else { result = cstring2text(lwgeom_geos_errmsg); } PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /* ** IsValidDetail is only available in the GEOS ** C API >= version 3.3 */ PG_FUNCTION_INFO_V1(isvaliddetail); Datum isvaliddetail(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "'isValidDetail' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ GSERIALIZED *geom = NULL; const GEOSGeometry *g1 = NULL; char *values[3]; /* valid bool, reason text, location geometry */ char *geos_reason = NULL; char *reason = NULL; GEOSGeometry *geos_location = NULL; LWGEOM *location = NULL; char valid = 0; Datum result; TupleDesc tupdesc; HeapTuple tuple; AttInMetadata *attinmeta; int flags = 0; /* * Build a tuple description for a * valid_detail tuple */ tupdesc = RelationNameGetTupleDesc("valid_detail"); if ( ! tupdesc ) { lwerror("TYPE valid_detail not found"); PG_RETURN_NULL(); } /* * generate attribute metadata needed later to produce * tuples from raw C strings */ attinmeta = TupleDescGetAttInMetadata(tupdesc); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) ) { flags = PG_GETARG_INT32(1); } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( g1 ) { valid = GEOSisValidDetail(g1, flags, &geos_reason, &geos_location); GEOSGeom_destroy((GEOSGeometry *)g1); if ( geos_reason ) { reason = pstrdup(geos_reason); GEOSFree(geos_reason); } if ( geos_location ) { location = GEOS2LWGEOM(geos_location, GEOSHasZ(geos_location)); GEOSGeom_destroy((GEOSGeometry *)geos_location); } if (valid == 2) { /* NOTE: should only happen on OOM or similar */ lwerror("GEOS isvaliddetail() threw an exception!"); PG_RETURN_NULL(); /* never gets here */ } } else { /* TODO: check lwgeom_geos_errmsg for validity error */ reason = pstrdup(lwgeom_geos_errmsg); } /* the boolean validity */ values[0] = valid ? "t" : "f"; /* the reason */ values[1] = reason; /* the location */ values[2] = location ? lwgeom_to_hexwkb(location, WKB_EXTENDED, 0) : 0; tuple = BuildTupleFromCStrings(attinmeta, values); result = HeapTupleGetDatum(tuple); PG_RETURN_HEAPTUPLEHEADER(result); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /** * overlaps(GSERIALIZED g1,GSERIALIZED g2) * @param g1 * @param g2 * @return if GEOS::g1->overlaps(g2) returns true * @throw an error (elog(ERROR,...)) if GEOS throws an error */ PG_FUNCTION_INFO_V1(overlaps); Datum overlaps(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; bool result; GBOX box1, box2; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.Overlaps(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); /* * short-circuit 1: if geom2 bounding box does not overlap * geom1 bounding box we can prematurely return FALSE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( gbox_overlaps_2d(&box1, &box2) == LW_FALSE ) { PG_RETURN_BOOL(FALSE); } } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { GEOSGeom_destroy(g1); lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } result = GEOSOverlaps(g1,g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (result == 2) { lwerror("GEOSOverlaps: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(contains); Datum contains(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; GBOX box1, box2; int type1, type2; LWGEOM *lwgeom; LWPOINT *point; RTREE_POLY_CACHE *poly_cache; bool result; PrepGeomCache *prep_cache; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.Contains(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); POSTGIS_DEBUG(3, "contains called."); /* ** short-circuit 1: if geom2 bounding box is not completely inside ** geom1 bounding box we can prematurely return FALSE. ** Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( ( box2.xmin < box1.xmin ) || ( box2.xmax > box1.xmax ) || ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ) ) { PG_RETURN_BOOL(FALSE); } } /* ** short-circuit 2: if geom2 is a point and geom1 is a polygon ** call the point-in-polygon function. */ type1 = gserialized_get_type(geom1); type2 = gserialized_get_type(geom2); if ((type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE) && type2 == POINTTYPE) { POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting."); lwgeom = lwgeom_from_gserialized(geom1); point = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom2)); POSTGIS_DEBUGF(3, "Precall point_in_multipolygon_rtree %p, %p", lwgeom, point); poly_cache = GetRtreeCache(fcinfo, geom1); if ( poly_cache && poly_cache->ringIndices ) { result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCounts, point); } else if ( type1 == POLYGONTYPE ) { result = point_in_polygon((LWPOLY*)lwgeom, point); } else if ( type1 == MULTIPOLYGONTYPE ) { result = point_in_multipolygon((LWMPOLY*)lwgeom, point); } else { /* Gulp! Should not be here... */ elog(ERROR,"Type isn't poly or multipoly!"); PG_RETURN_NULL(); } lwgeom_free(lwgeom); lwpoint_free(point); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( result == 1 ) /* completely inside */ { PG_RETURN_BOOL(TRUE); } else { PG_RETURN_BOOL(FALSE); } } else { POSTGIS_DEBUGF(3, "Contains: type1: %d, type2: %d", type1, type2); } initGEOS(lwnotice, lwgeom_geos_error); prep_cache = GetPrepGeomCache( fcinfo, geom1, 0 ); if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 ) { g1 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } POSTGIS_DEBUG(4, "containsPrepared: cache is live, running preparedcontains"); result = GEOSPreparedContains( prep_cache->prepared_geom, g1); GEOSGeom_destroy(g1); } else { g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } POSTGIS_DEBUG(4, "containsPrepared: cache is not ready, running standard contains"); result = GEOSContains( g1, g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); } if (result == 2) { lwerror("GEOSContains: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(containsproperly); Datum containsproperly(PG_FUNCTION_ARGS) { GSERIALIZED * geom1; GSERIALIZED * geom2; bool result; GBOX box1, box2; PrepGeomCache * prep_cache; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.ContainsProperly(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); /* * short-circuit: if geom2 bounding box is not completely inside * geom1 bounding box we can prematurely return FALSE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if (( box2.xmin < box1.xmin ) || ( box2.xmax > box1.xmax ) || ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax )) PG_RETURN_BOOL(FALSE); } initGEOS(lwnotice, lwgeom_geos_error); prep_cache = GetPrepGeomCache( fcinfo, geom1, 0 ); if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 ) { GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } result = GEOSPreparedContainsProperly( prep_cache->prepared_geom, g); GEOSGeom_destroy(g); } else { GEOSGeometry *g2; GEOSGeometry *g1; g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSRelatePattern( g1, g2, "T**FF*FF*" ); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); } if (result == 2) { lwerror("GEOSContains: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } /* * Described at * http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html */ PG_FUNCTION_INFO_V1(covers); Datum covers(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; bool result; GBOX box1, box2; int type1, type2; LWGEOM *lwgeom; LWPOINT *point; RTREE_POLY_CACHE *poly_cache; PrepGeomCache *prep_cache; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* A.Covers(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* * short-circuit 1: if geom2 bounding box is not completely inside * geom1 bounding box we can prematurely return FALSE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if (( box2.xmin < box1.xmin ) || ( box2.xmax > box1.xmax ) || ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax )) { PG_RETURN_BOOL(FALSE); } } /* * short-circuit 2: if geom2 is a point and geom1 is a polygon * call the point-in-polygon function. */ type1 = gserialized_get_type(geom1); type2 = gserialized_get_type(geom2); if ((type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE) && type2 == POINTTYPE) { POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting."); lwgeom = lwgeom_from_gserialized(geom1); point = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom2)); POSTGIS_DEBUGF(3, "Precall point_in_multipolygon_rtree %p, %p", lwgeom, point); poly_cache = GetRtreeCache(fcinfo, geom1); if ( poly_cache && poly_cache->ringIndices ) { result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCounts, point); } else if ( type1 == POLYGONTYPE ) { result = point_in_polygon((LWPOLY*)lwgeom, point); } else if ( type1 == MULTIPOLYGONTYPE ) { result = point_in_multipolygon((LWMPOLY*)lwgeom, point); } else { /* Gulp! Should not be here... */ elog(ERROR,"Type isn't poly or multipoly!"); PG_RETURN_NULL(); } lwgeom_free(lwgeom); lwpoint_free(point); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( result != -1 ) /* not outside */ { PG_RETURN_BOOL(TRUE); } else { PG_RETURN_BOOL(FALSE); } } else { POSTGIS_DEBUGF(3, "Covers: type1: %d, type2: %d", type1, type2); } initGEOS(lwnotice, lwgeom_geos_error); prep_cache = GetPrepGeomCache( fcinfo, geom1, 0 ); if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 ) { GEOSGeometry *g1 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } result = GEOSPreparedCovers( prep_cache->prepared_geom, g1); GEOSGeom_destroy(g1); } else { GEOSGeometry *g1; GEOSGeometry *g2; g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSRelatePattern( g1, g2, "******FF*" ); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); } if (result == 2) { lwerror("GEOSCovers: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } /** * ST_Within(A, B) => ST_Contains(B, A) so we just delegate this calculation to the * Contains implementation. PG_FUNCTION_INFO_V1(within); Datum within(PG_FUNCTION_ARGS) */ /* * Described at: * http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html */ PG_FUNCTION_INFO_V1(coveredby); Datum coveredby(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; bool result; GBOX box1, box2; LWGEOM *lwgeom; LWPOINT *point; int type1, type2; RTREE_POLY_CACHE *poly_cache; char *patt = "**F**F***"; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.CoveredBy(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); /* * short-circuit 1: if geom1 bounding box is not completely inside * geom2 bounding box we can prematurely return FALSE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( ( box1.xmin < box2.xmin ) || ( box1.xmax > box2.xmax ) || ( box1.ymin < box2.ymin ) || ( box1.ymax > box2.ymax ) ) { PG_RETURN_BOOL(FALSE); } POSTGIS_DEBUG(3, "bounding box short-circuit missed."); } /* * short-circuit 2: if geom1 is a point and geom2 is a polygon * call the point-in-polygon function. */ type1 = gserialized_get_type(geom1); type2 = gserialized_get_type(geom2); if ((type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE) && type1 == POINTTYPE) { POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting."); point = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom1)); lwgeom = lwgeom_from_gserialized(geom2); poly_cache = GetRtreeCache(fcinfo, geom2); if ( poly_cache && poly_cache->ringIndices ) { result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCounts, point); } else if ( type2 == POLYGONTYPE ) { result = point_in_polygon((LWPOLY*)lwgeom, point); } else if ( type2 == MULTIPOLYGONTYPE ) { result = point_in_multipolygon((LWMPOLY*)lwgeom, point); } else { /* Gulp! Should not be here... */ elog(ERROR,"Type isn't poly or multipoly!"); PG_RETURN_NULL(); } lwgeom_free(lwgeom); lwpoint_free(point); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( result != -1 ) /* not outside */ { PG_RETURN_BOOL(TRUE); } else { PG_RETURN_BOOL(FALSE); } } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSRelatePattern(g1,g2,patt); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (result == 2) { lwerror("GEOSCoveredBy: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(crosses); Datum crosses(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; bool result; GBOX box1, box2; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.Crosses(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); /* * short-circuit 1: if geom2 bounding box does not overlap * geom1 bounding box we can prematurely return FALSE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( gbox_overlaps_2d(&box1, &box2) == LW_FALSE ) { PG_RETURN_BOOL(FALSE); } } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSCrosses(g1,g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (result == 2) { lwerror("GEOSCrosses: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(geos_intersects); Datum geos_intersects(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GSERIALIZED *serialized_poly; bool result; GBOX box1, box2; int type1, type2, polytype; LWPOINT *point; LWGEOM *lwgeom; RTREE_POLY_CACHE *poly_cache; PrepGeomCache *prep_cache; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.Intersects(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); /* * short-circuit 1: if geom2 bounding box does not overlap * geom1 bounding box we can prematurely return FALSE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( gbox_overlaps_2d(&box1, &box2) == LW_FALSE ) { PG_RETURN_BOOL(FALSE); } } /* * short-circuit 2: if the geoms are a point and a polygon, * call the point_outside_polygon function. */ type1 = gserialized_get_type(geom1); type2 = gserialized_get_type(geom2); if ( (type1 == POINTTYPE && (type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE)) || (type2 == POINTTYPE && (type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE))) { POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting."); if ( type1 == POINTTYPE ) { point = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom1)); lwgeom = lwgeom_from_gserialized(geom2); serialized_poly = geom2; polytype = type2; } else { point = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom2)); lwgeom = lwgeom_from_gserialized(geom1); serialized_poly = geom1; polytype = type1; } poly_cache = GetRtreeCache(fcinfo, serialized_poly); if ( poly_cache && poly_cache->ringIndices ) { result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCounts, point); } else if ( polytype == POLYGONTYPE ) { result = point_in_polygon((LWPOLY*)lwgeom, point); } else if ( polytype == MULTIPOLYGONTYPE ) { result = point_in_multipolygon((LWMPOLY*)lwgeom, point); } else { /* Gulp! Should not be here... */ elog(ERROR,"Type isn't poly or multipoly!"); PG_RETURN_NULL(); } lwgeom_free(lwgeom); lwpoint_free(point); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( result != -1 ) /* not outside */ { PG_RETURN_BOOL(TRUE); } else { PG_RETURN_BOOL(FALSE); } } initGEOS(lwnotice, lwgeom_geos_error); prep_cache = GetPrepGeomCache( fcinfo, geom1, geom2 ); if ( prep_cache && prep_cache->prepared_geom ) { if ( prep_cache->argnum == 1 ) { GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g ) /* exception thrown at construction */ { lwerror("Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } result = GEOSPreparedIntersects( prep_cache->prepared_geom, g); GEOSGeom_destroy(g); } else { GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g ) /* exception thrown at construction */ { lwerror("Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } result = GEOSPreparedIntersects( prep_cache->prepared_geom, g); GEOSGeom_destroy(g); } } else { GEOSGeometry *g1; GEOSGeometry *g2; g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSIntersects( g1, g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); } if (result == 2) { lwerror("GEOSIntersects: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(touches); Datum touches(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; bool result; GBOX box1, box2; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.Touches(Empty) == FALSE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(false); /* * short-circuit 1: if geom2 bounding box does not overlap * geom1 bounding box we can prematurely return FALSE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( gbox_overlaps_2d(&box1, &box2) == LW_FALSE ) { PG_RETURN_BOOL(FALSE); } } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 ); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2 ); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSTouches(g1,g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (result == 2) { lwerror("GEOSTouches: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(disjoint); Datum disjoint(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; bool result; GBOX box1, box2; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* A.Disjoint(Empty) == TRUE */ if ( gserialized_is_empty(geom1) || gserialized_is_empty(geom2) ) PG_RETURN_BOOL(true); /* * short-circuit 1: if geom2 bounding box does not overlap * geom1 bounding box we can prematurely return TRUE. * Do the test IFF BOUNDING BOX AVAILABLE. */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( gbox_overlaps_2d(&box1, &box2) == LW_FALSE ) { PG_RETURN_BOOL(TRUE); } } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSDisjoint(g1,g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (result == 2) { lwerror("GEOSDisjoint: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(relate_pattern); Datum relate_pattern(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; char *patt; bool result; GEOSGeometry *g1, *g2; int i; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* TODO handle empty */ errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } patt = DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(PG_GETARG_DATUM(2)))); /* ** Need to make sure 't' and 'f' are upper-case before handing to GEOS */ for ( i = 0; i < strlen(patt); i++ ) { if ( patt[i] == 't' ) patt[i] = 'T'; if ( patt[i] == 'f' ) patt[i] = 'F'; } result = GEOSRelatePattern(g1,g2,patt); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); pfree(patt); if (result == 2) { lwerror("GEOSRelatePattern: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(relate_full); Datum relate_full(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; char *relate_str; text *result; #if POSTGIS_GEOS_VERSION >= 33 int bnr = GEOSRELATE_BNR_OGC; #endif POSTGIS_DEBUG(2, "in relate_full()"); /* TODO handle empty */ geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); if ( PG_NARGS() > 2 ) { #if POSTGIS_GEOS_VERSION >= 33 bnr = PG_GETARG_INT32(2); #else lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "specifying a boundary node rule with ST_Relate" " (3.3.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #endif } errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 ); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2 ); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } POSTGIS_DEBUG(3, "constructed geometries "); if ((g1==NULL) || (g2 == NULL)) elog(NOTICE,"g1 or g2 are null"); POSTGIS_DEBUGF(3, "%s", GEOSGeomToWKT(g1)); POSTGIS_DEBUGF(3, "%s", GEOSGeomToWKT(g2)); #if POSTGIS_GEOS_VERSION >= 33 relate_str = GEOSRelateBoundaryNodeRule(g1, g2, bnr); #else relate_str = GEOSRelate(g1, g2); #endif GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (relate_str == NULL) { lwerror("GEOSRelate: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /* never get here */ } result = cstring2text(relate_str); GEOSFree(relate_str); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_TEXT_P(result); } PG_FUNCTION_INFO_V1(ST_Equals); Datum ST_Equals(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GSERIALIZED *geom2; GEOSGeometry *g1, *g2; bool result; GBOX box1, box2; geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); /* Empty == Empty */ if ( gserialized_is_empty(geom1) && gserialized_is_empty(geom2) ) PG_RETURN_BOOL(TRUE); /* * short-circuit: Loose test, if geom2 bounding box does not overlap * geom1 bounding box we can prematurely return FALSE. * * TODO: use gbox_same_2d instead (not available at time of writing) */ if ( gserialized_get_gbox_p(geom1, &box1) && gserialized_get_gbox_p(geom2, &box2) ) { if ( gbox_overlaps_2d(&box1, &box2) == LW_FALSE ) { PG_RETURN_BOOL(FALSE); } } initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); if ( 0 == g2 ) /* exception thrown at construction */ { lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); GEOSGeom_destroy(g1); PG_RETURN_NULL(); } result = GEOSEquals(g1,g2); GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); if (result == 2) { lwerror("GEOSEquals: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /*never get here */ } PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(issimple); Datum issimple(PG_FUNCTION_ARGS) { GSERIALIZED *geom; GEOSGeometry *g1; int result; POSTGIS_DEBUG(2, "issimple called"); geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_is_empty(geom) ) PG_RETURN_BOOL(TRUE); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } result = GEOSisSimple(g1); GEOSGeom_destroy(g1); if (result == 2) { lwerror("GEOSisSimple: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); /*never get here */ } PG_FREE_IF_COPY(geom, 0); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(isring); Datum isring(PG_FUNCTION_ARGS) { GSERIALIZED *geom; GEOSGeometry *g1; int result; geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if (gserialized_get_type(geom) != LINETYPE) { elog(ERROR,"isring() should only be called on a LINE"); } /* Empty things can't close */ if ( gserialized_is_empty(geom) ) PG_RETURN_BOOL(FALSE); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom ); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } result = GEOSisRing(g1); GEOSGeom_destroy(g1); if (result == 2) { lwerror("GEOSisRing: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } PG_FREE_IF_COPY(geom, 0); PG_RETURN_BOOL(result); } GSERIALIZED * GEOS2POSTGIS(GEOSGeom geom, char want3d) { LWGEOM *lwgeom; GSERIALIZED *result; lwgeom = GEOS2LWGEOM(geom, want3d); if ( ! lwgeom ) { lwerror("GEOS2POSTGIS: GEOS2LWGEOM returned NULL"); return NULL; } POSTGIS_DEBUGF(4, "GEOS2POSTGIS: GEOS2LWGEOM returned a %s", lwgeom_summary(lwgeom, 0)); if ( lwgeom_needs_bbox(lwgeom) == LW_TRUE ) { lwgeom_add_bbox(lwgeom); } result = geometry_serialize(lwgeom); lwgeom_free(lwgeom); return result; } /*-----=POSTGIS2GEOS= */ GEOSGeometry * POSTGIS2GEOS(GSERIALIZED *pglwgeom) { GEOSGeometry *ret; LWGEOM *lwgeom = lwgeom_from_gserialized(pglwgeom); if ( ! lwgeom ) { lwerror("POSTGIS2GEOS: unable to deserialize input"); return NULL; } ret = LWGEOM2GEOS(lwgeom); lwgeom_free(lwgeom); if ( ! ret ) { /* lwerror("POSTGIS2GEOS conversion failed"); */ return NULL; } return ret; } PG_FUNCTION_INFO_V1(GEOSnoop); Datum GEOSnoop(PG_FUNCTION_ARGS) { GSERIALIZED *geom; GEOSGeometry *geosgeom; GSERIALIZED *lwgeom_result; #if POSTGIS_DEBUG_LEVEL > 0 int result; LWGEOM_UNPARSER_RESULT lwg_unparser_result; #endif initGEOS(lwnotice, lwgeom_geos_error); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geosgeom = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( ! geosgeom ) PG_RETURN_NULL(); lwgeom_result = GEOS2POSTGIS(geosgeom, gserialized_has_z(geom)); GEOSGeom_destroy(geosgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(lwgeom_result); } PG_FUNCTION_INFO_V1(polygonize_garray); Datum polygonize_garray(PG_FUNCTION_ARGS) { Datum datum; ArrayType *array; int is3d = 0; uint32 nelems, i; GSERIALIZED *result; GEOSGeometry *geos_result; const GEOSGeometry **vgeoms; int srid=SRID_UNKNOWN; size_t offset; #if POSTGIS_DEBUG_LEVEL >= 3 static int call=1; #endif #if POSTGIS_DEBUG_LEVEL >= 3 call++; #endif datum = PG_GETARG_DATUM(0); /* Null array, null geometry (should be empty?) */ if ( (Pointer *)datum == NULL ) PG_RETURN_NULL(); array = DatumGetArrayTypeP(datum); nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array)); POSTGIS_DEBUGF(3, "polygonize_garray: number of elements: %d", nelems); if ( nelems == 0 ) PG_RETURN_NULL(); /* Ok, we really need geos now ;) */ initGEOS(lwnotice, lwgeom_geos_error); vgeoms = palloc(sizeof(GEOSGeometry *)*nelems); offset = 0; for (i=0; i<nelems; i++) { GEOSGeometry* g; GSERIALIZED *geom = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); offset += INTALIGN(VARSIZE(geom)); if ( ! is3d ) is3d = gserialized_has_z(geom); g = (GEOSGeometry *)POSTGIS2GEOS(geom); if ( 0 == g ) /* exception thrown at construction */ { lwerror("Geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } vgeoms[i] = g; if ( ! i ) { srid = gserialized_get_srid(geom); } else { if ( srid != gserialized_get_srid(geom) ) { elog(ERROR, "polygonize: operation on mixed SRID geometries"); PG_RETURN_NULL(); } } } POSTGIS_DEBUG(3, "polygonize_garray: invoking GEOSpolygonize"); geos_result = GEOSPolygonize(vgeoms, nelems); POSTGIS_DEBUG(3, "polygonize_garray: GEOSpolygonize returned"); for (i=0; i<nelems; ++i) GEOSGeom_destroy((GEOSGeometry *)vgeoms[i]); pfree(vgeoms); if ( ! geos_result ) PG_RETURN_NULL(); GEOSSetSRID(geos_result, srid); result = GEOS2POSTGIS(geos_result, is3d); GEOSGeom_destroy(geos_result); if ( result == NULL ) { elog(ERROR, "GEOS2POSTGIS returned an error"); PG_RETURN_NULL(); /*never get here */ } /*compressType(result); */ PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(linemerge); Datum linemerge(PG_FUNCTION_ARGS) { GSERIALIZED *geom1; GEOSGeometry *g1, *g3; GSERIALIZED *result; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); initGEOS(lwnotice, lwgeom_geos_error); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); if ( 0 == g1 ) /* exception thrown at construction */ { lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } g3 = GEOSLineMerge(g1); if (g3 == NULL) { elog(ERROR,"GEOS LineMerge() threw an error!"); GEOSGeom_destroy(g1); PG_RETURN_NULL(); /*never get here */ } POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ; GEOSSetSRID(g3, gserialized_get_srid(geom1)); result = GEOS2POSTGIS(g3, gserialized_has_z(geom1)); if (result == NULL) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g3); elog(ERROR,"GEOS LineMerge() threw an error (result postgis geometry formation)!"); PG_RETURN_NULL(); /*never get here */ } GEOSGeom_destroy(g1); GEOSGeom_destroy(g3); /* compressType(result); */ PG_FREE_IF_COPY(geom1, 0); PG_RETURN_POINTER(result); } /* * Take a geometry and return an areal geometry * (Polygon or MultiPolygon). * Actually a wrapper around GEOSpolygonize, * transforming the resulting collection into * a valid polygon Geometry. */ PG_FUNCTION_INFO_V1(ST_BuildArea); Datum ST_BuildArea(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom; LWGEOM *lwgeom_in, *lwgeom_out; geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom_in = lwgeom_from_gserialized(geom); lwgeom_out = lwgeom_buildarea(lwgeom_in); lwgeom_free(lwgeom_in) ; if ( ! lwgeom_out ) { PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } result = geometry_serialize(lwgeom_out) ; lwgeom_free(lwgeom_out) ; PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /* * Take the vertices of a geometry and builds * Delaunay triangles around them. */ PG_FUNCTION_INFO_V1(ST_DelaunayTriangles); Datum ST_DelaunayTriangles(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom; LWGEOM *lwgeom_in, *lwgeom_out; double tolerance = 0.0; int flags = 0; geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); tolerance = PG_GETARG_FLOAT8(1); flags = PG_GETARG_INT32(2); lwgeom_in = lwgeom_from_gserialized(geom); lwgeom_out = lwgeom_delaunay_triangulation(lwgeom_in, tolerance, flags); lwgeom_free(lwgeom_in) ; if ( ! lwgeom_out ) { PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } result = geometry_serialize(lwgeom_out) ; lwgeom_free(lwgeom_out) ; PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /* * ST_Snap * * Snap a geometry to another with a given tolerance */ Datum ST_Snap(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_Snap); Datum ST_Snap(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "'ST_Snap' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ GSERIALIZED *geom1, *geom2, *result; LWGEOM *lwgeom1, *lwgeom2, *lwresult; double tolerance; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); tolerance = PG_GETARG_FLOAT8(2); lwgeom1 = lwgeom_from_gserialized(geom1); lwgeom2 = lwgeom_from_gserialized(geom2); lwresult = lwgeom_snap(lwgeom1, lwgeom2, tolerance); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); result = geometry_serialize(lwresult); lwgeom_free(lwresult); PG_RETURN_POINTER(result); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /* * ST_Split * * Split polygon by line, line by line, line by point. * Returns at most components as a collection. * First element of the collection is always the part which * remains after the cut, while the second element is the * part which has been cut out. We arbitrarely take the part * on the *right* of cut lines as the part which has been cut out. * For a line cut by a point the part which remains is the one * from start of the line to the cut point. * * * Author: Sandro Santilli <strk@keybit.net> * * Work done for Faunalia (http://www.faunalia.it) with fundings * from Regione Toscana - Sistema Informativo per il Governo * del Territorio e dell'Ambiente (RT-SIGTA). * * Thanks to the PostGIS community for sharing poly/line ideas [1] * * [1] http://trac.osgeo.org/postgis/wiki/UsersWikiSplitPolygonWithLineString * */ Datum ST_Split(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_Split); Datum ST_Split(PG_FUNCTION_ARGS) { GSERIALIZED *in, *blade_in, *out; LWGEOM *lwgeom_in, *lwblade_in, *lwgeom_out; in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom_in = lwgeom_from_gserialized(in); blade_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); lwblade_in = lwgeom_from_gserialized(blade_in); error_if_srid_mismatch(lwgeom_in->srid, lwblade_in->srid); lwgeom_out = lwgeom_split(lwgeom_in, lwblade_in); lwgeom_free(lwgeom_in); lwgeom_free(lwblade_in); if ( ! lwgeom_out ) { PG_FREE_IF_COPY(in, 0); /* possibly referenced by lwgeom_out */ PG_FREE_IF_COPY(blade_in, 1); PG_RETURN_NULL(); } out = geometry_serialize(lwgeom_out); lwgeom_free(lwgeom_out); PG_FREE_IF_COPY(in, 0); /* possibly referenced by lwgeom_out */ PG_FREE_IF_COPY(blade_in, 1); PG_RETURN_POINTER(out); } /********************************************************************** * * ST_SharedPaths * * Return the set of paths shared between two linear geometries, * and their direction (same or opposite). * * Developed by Sandro Santilli (strk@keybit.net) for Faunalia * (http://www.faunalia.it) with funding from Regione Toscana - Sistema * Informativo per la Gestione del Territorio e dell' Ambiente * [RT-SIGTA]". For the project: "Sviluppo strumenti software per il * trattamento di dati geografici basati su QuantumGIS e Postgis (CIG * 0494241492)" * **********************************************************************/ Datum ST_SharedPaths(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_SharedPaths); Datum ST_SharedPaths(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "'ST_SharedPaths' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ GSERIALIZED *geom1, *geom2, *out; LWGEOM *g1, *g2, *lwgeom_out; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); g1 = lwgeom_from_gserialized(geom1); g2 = lwgeom_from_gserialized(geom2); lwgeom_out = lwgeom_sharedpaths(g1, g2); lwgeom_free(g1); lwgeom_free(g2); if ( ! lwgeom_out ) { PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_NULL(); } out = geometry_serialize(lwgeom_out); lwgeom_free(lwgeom_out); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(out); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } /********************************************************************** * * ST_Node * * Fully node a set of lines using the least possible nodes while * preserving all of the input ones. * **********************************************************************/ Datum ST_Node(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_Node); Datum ST_Node(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this PostGIS binary " "was compiled against (%d) doesn't support " "'ST_Node' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ GSERIALIZED *geom1, *out; LWGEOM *g1, *lwgeom_out; geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g1 = lwgeom_from_gserialized(geom1); lwgeom_out = lwgeom_node(g1); lwgeom_free(g1); if ( ! lwgeom_out ) { PG_FREE_IF_COPY(geom1, 0); PG_RETURN_NULL(); } out = geometry_serialize(lwgeom_out); lwgeom_free(lwgeom_out); PG_FREE_IF_COPY(geom1, 0); PG_RETURN_POINTER(out); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/geography_measurement.c���������������������������������������������0000644�0000000�0000000�00000063544�12211135144�022014� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: geography_inout.c 4535 2009-09-28 18:16:21Z colivier $ * * PostGIS - Spatial Types for PostgreSQL * * Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "../postgis_config.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include "liblwgeom.h" /* For standard geometry types. */ #include "liblwgeom_internal.h" /* For FP comparators. */ #include "lwgeom_pg.h" /* For debugging macros. */ #include "geography.h" /* For utility functions. */ #include "geography_measurement_trees.h" /* For circ_tree caching */ #include "lwgeom_transform.h" /* For SRID functions */ Datum geography_distance(PG_FUNCTION_ARGS); Datum geography_distance_uncached(PG_FUNCTION_ARGS); Datum geography_distance_tree(PG_FUNCTION_ARGS); Datum geography_dwithin(PG_FUNCTION_ARGS); Datum geography_dwithin_uncached(PG_FUNCTION_ARGS); Datum geography_area(PG_FUNCTION_ARGS); Datum geography_length(PG_FUNCTION_ARGS); Datum geography_expand(PG_FUNCTION_ARGS); Datum geography_point_outside(PG_FUNCTION_ARGS); Datum geography_covers(PG_FUNCTION_ARGS); Datum geography_bestsrid(PG_FUNCTION_ARGS); Datum geography_perimeter(PG_FUNCTION_ARGS); Datum geography_project(PG_FUNCTION_ARGS); Datum geography_azimuth(PG_FUNCTION_ARGS); Datum geography_segmentize(PG_FUNCTION_ARGS); /* ** geography_distance_uncached(GSERIALIZED *g1, GSERIALIZED *g2, double tolerance, boolean use_spheroid) ** returns double distance in meters */ PG_FUNCTION_INFO_V1(geography_distance_uncached); Datum geography_distance_uncached(PG_FUNCTION_ARGS) { LWGEOM *lwgeom1 = NULL; LWGEOM *lwgeom2 = NULL; GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; double distance; /* double tolerance; */ bool use_spheroid; SPHEROID s; /* Get our geometry objects loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Read our tolerance value. */ /* tolerance = PG_GETARG_FLOAT8(2); */ /* Read our calculation type. */ use_spheroid = PG_GETARG_BOOL(3); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); /* Set to sphere if requested */ if ( ! use_spheroid ) s.a = s.b = s.radius; lwgeom1 = lwgeom_from_gserialized(g1); lwgeom2 = lwgeom_from_gserialized(g2); /* Return NULL on empty arguments. */ if ( lwgeom_is_empty(lwgeom1) || lwgeom_is_empty(lwgeom2) ) { PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_NULL(); } /* Make sure we have boxes attached */ lwgeom_add_bbox_deep(lwgeom1, NULL); lwgeom_add_bbox_deep(lwgeom2, NULL); distance = lwgeom_distance_spheroid(lwgeom1, lwgeom2, &s, FP_TOLERANCE); /* Clean up */ lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); /* Something went wrong, negative return... should already be eloged, return NULL */ if ( distance < 0.0 ) { PG_RETURN_NULL(); } PG_RETURN_FLOAT8(distance); } /* ** geography_distance(GSERIALIZED *g1, GSERIALIZED *g2, double tolerance, boolean use_spheroid) ** returns double distance in meters */ PG_FUNCTION_INFO_V1(geography_distance); Datum geography_distance(PG_FUNCTION_ARGS) { GSERIALIZED* g1 = NULL; GSERIALIZED* g2 = NULL; double distance; double tolerance; bool use_spheroid; SPHEROID s; /* Get our geometry objects loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Read our tolerance value. */ tolerance = PG_GETARG_FLOAT8(2); /* Read our calculation type. */ use_spheroid = PG_GETARG_BOOL(3); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); /* Set to sphere if requested */ if ( ! use_spheroid ) s.a = s.b = s.radius; /* Return NULL on empty arguments. */ if ( gserialized_is_empty(g1) || gserialized_is_empty(g2) ) { PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_NULL(); } /* Do the brute force calculation if the cached calculation doesn't tick over */ if ( LW_FAILURE == geography_distance_cache(fcinfo, g1, g2, &s, &distance) ) { LWGEOM* lwgeom1 = lwgeom_from_gserialized(g1); LWGEOM* lwgeom2 = lwgeom_from_gserialized(g2); distance = lwgeom_distance_spheroid(lwgeom1, lwgeom2, &s, tolerance); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); } /* Clean up */ PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); /* Something went wrong, negative return... should already be eloged, return NULL */ if ( distance < 0.0 ) { elog(ERROR, "distance returned negative!"); PG_RETURN_NULL(); } /* Knock off any funny business at the micrometer level, ticket #2168 */ distance = round(distance * 10e8) / 10e8; PG_RETURN_FLOAT8(distance); } /* ** geography_dwithin(GSERIALIZED *g1, GSERIALIZED *g2, double tolerance, boolean use_spheroid) ** returns double distance in meters */ PG_FUNCTION_INFO_V1(geography_dwithin); Datum geography_dwithin(PG_FUNCTION_ARGS) { GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; double tolerance; double distance; bool use_spheroid; SPHEROID s; int dwithin = LW_FALSE; /* Get our geometry objects loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Read our tolerance value. */ tolerance = PG_GETARG_FLOAT8(2); /* Read our calculation type. */ use_spheroid = PG_GETARG_BOOL(3); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); /* Set to sphere if requested */ if ( ! use_spheroid ) s.a = s.b = s.radius; /* Return FALSE on empty arguments. */ if ( gserialized_is_empty(g1) || gserialized_is_empty(g2) ) { PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_BOOL(FALSE); } /* Do the brute force calculation if the cached calculation doesn't tick over */ if ( LW_FAILURE == geography_dwithin_cache(fcinfo, g1, g2, &s, tolerance, &dwithin) ) { LWGEOM* lwgeom1 = lwgeom_from_gserialized(g1); LWGEOM* lwgeom2 = lwgeom_from_gserialized(g2); distance = lwgeom_distance_spheroid(lwgeom1, lwgeom2, &s, tolerance); /* Something went wrong... */ if ( distance < 0.0 ) elog(ERROR, "lwgeom_distance_spheroid returned negative!"); dwithin = (distance <= tolerance); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); } /* Clean up */ PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_BOOL(dwithin); } /* ** geography_distance_tree(GSERIALIZED *g1, GSERIALIZED *g2, double tolerance, boolean use_spheroid) ** returns double distance in meters */ PG_FUNCTION_INFO_V1(geography_distance_tree); Datum geography_distance_tree(PG_FUNCTION_ARGS) { GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; double tolerance; double distance; bool use_spheroid; SPHEROID s; /* Get our geometry objects loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Return FALSE on empty arguments. */ if ( gserialized_is_empty(g1) || gserialized_is_empty(g2) ) { PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_FLOAT8(0.0); } /* Read our tolerance value. */ tolerance = PG_GETARG_FLOAT8(2); /* Read our calculation type. */ use_spheroid = PG_GETARG_BOOL(3); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); /* Set to sphere if requested */ if ( ! use_spheroid ) s.a = s.b = s.radius; if ( geography_tree_distance(g1, g2, &s, tolerance, &distance) == LW_FAILURE ) { elog(ERROR, "geography_distance_tree failed!"); PG_RETURN_NULL(); } PG_RETURN_FLOAT8(distance); } /* ** geography_dwithin_uncached(GSERIALIZED *g1, GSERIALIZED *g2, double tolerance, boolean use_spheroid) ** returns double distance in meters */ PG_FUNCTION_INFO_V1(geography_dwithin_uncached); Datum geography_dwithin_uncached(PG_FUNCTION_ARGS) { LWGEOM *lwgeom1 = NULL; LWGEOM *lwgeom2 = NULL; GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; double tolerance; double distance; bool use_spheroid; SPHEROID s; /* Get our geometry objects loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Read our tolerance value. */ tolerance = PG_GETARG_FLOAT8(2); /* Read our calculation type. */ use_spheroid = PG_GETARG_BOOL(3); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); /* Set to sphere if requested */ if ( ! use_spheroid ) s.a = s.b = s.radius; lwgeom1 = lwgeom_from_gserialized(g1); lwgeom2 = lwgeom_from_gserialized(g2); /* Return FALSE on empty arguments. */ if ( lwgeom_is_empty(lwgeom1) || lwgeom_is_empty(lwgeom2) ) { PG_RETURN_BOOL(FALSE); } distance = lwgeom_distance_spheroid(lwgeom1, lwgeom2, &s, tolerance); /* Clean up */ lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); /* Something went wrong... should already be eloged, return FALSE */ if ( distance < 0.0 ) { elog(ERROR, "lwgeom_distance_spheroid returned negative!"); PG_RETURN_BOOL(FALSE); } PG_RETURN_BOOL(distance <= tolerance); } /* ** geography_expand(GSERIALIZED *g) returns *GSERIALIZED ** ** warning, this tricky little function does not expand the ** geometry at all, just re-writes bounding box value to be ** a bit bigger. only useful when passing the result along to ** an index operator (&&) */ PG_FUNCTION_INFO_V1(geography_expand); Datum geography_expand(PG_FUNCTION_ARGS) { GSERIALIZED *g = NULL; GSERIALIZED *g_out = NULL; double distance; /* Get a wholly-owned pointer to the geography */ g = (GSERIALIZED*)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); /* Read our distance value and normalize to unit-sphere. */ distance = PG_GETARG_FLOAT8(1) / WGS84_RADIUS; /* Try the expansion */ g_out = gserialized_expand(g, distance); /* If the expansion fails, the return our input */ if ( g_out == NULL ) { PG_RETURN_POINTER(g); } if ( g_out != g ) { pfree(g); } PG_RETURN_POINTER(g_out); } /* ** geography_area(GSERIALIZED *g) ** returns double area in meters square */ PG_FUNCTION_INFO_V1(geography_area); Datum geography_area(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *g = NULL; GBOX gbox; double area; bool use_spheroid = LW_TRUE; SPHEROID s; /* Get our geometry object loaded into memory. */ g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Read our calculation type */ use_spheroid = PG_GETARG_BOOL(1); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g), &s); lwgeom = lwgeom_from_gserialized(g); /* EMPTY things have no area */ if ( lwgeom_is_empty(lwgeom) ) { lwgeom_free(lwgeom); PG_RETURN_FLOAT8(0.0); } if ( lwgeom->bbox ) gbox = *(lwgeom->bbox); else lwgeom_calculate_gbox_geodetic(lwgeom, &gbox); /* Test for cases that are currently not handled by spheroid code */ if ( use_spheroid ) { /* We can't circle the poles right now */ if ( FP_GTEQ(gbox.zmax,1.0) || FP_LTEQ(gbox.zmin,-1.0) ) use_spheroid = LW_FALSE; /* We can't cross the equator right now */ if ( gbox.zmax > 0.0 && gbox.zmin < 0.0 ) use_spheroid = LW_FALSE; } /* User requests spherical calculation, turn our spheroid into a sphere */ if ( ! use_spheroid ) s.a = s.b = s.radius; /* Calculate the area */ if ( use_spheroid ) area = lwgeom_area_spheroid(lwgeom, &s); else area = lwgeom_area_sphere(lwgeom, &s); /* Clean up */ lwgeom_free(lwgeom); PG_FREE_IF_COPY(g, 0); /* Something went wrong... */ if ( area < 0.0 ) { elog(ERROR, "lwgeom_area_spher(oid) returned area < 0.0"); PG_RETURN_NULL(); } PG_RETURN_FLOAT8(area); } /* ** geography_perimeter(GSERIALIZED *g) ** returns double perimeter in meters for area features */ PG_FUNCTION_INFO_V1(geography_perimeter); Datum geography_perimeter(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *g = NULL; double length; bool use_spheroid = LW_TRUE; SPHEROID s; int type; /* Get our geometry object loaded into memory. */ g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Only return for area features. */ type = gserialized_get_type(g); if ( ! (type == POLYGONTYPE || type == MULTIPOLYGONTYPE || type == COLLECTIONTYPE) ) { PG_RETURN_FLOAT8(0.0); } lwgeom = lwgeom_from_gserialized(g); /* EMPTY things have no perimeter */ if ( lwgeom_is_empty(lwgeom) ) { lwgeom_free(lwgeom); PG_RETURN_FLOAT8(0.0); } /* Read our calculation type */ use_spheroid = PG_GETARG_BOOL(1); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g), &s); /* User requests spherical calculation, turn our spheroid into a sphere */ if ( ! use_spheroid ) s.a = s.b = s.radius; /* Calculate the length */ length = lwgeom_length_spheroid(lwgeom, &s); /* Something went wrong... */ if ( length < 0.0 ) { elog(ERROR, "lwgeom_length_spheroid returned length < 0.0"); PG_RETURN_NULL(); } /* Clean up, but not all the way to the point arrays */ lwgeom_free(lwgeom); PG_FREE_IF_COPY(g, 0); PG_RETURN_FLOAT8(length); } /* ** geography_length(GSERIALIZED *g) ** returns double length in meters */ PG_FUNCTION_INFO_V1(geography_length); Datum geography_length(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *g = NULL; double length; bool use_spheroid = LW_TRUE; SPHEROID s; /* Get our geometry object loaded into memory. */ g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(g); /* EMPTY things have no length */ if ( lwgeom_is_empty(lwgeom) || lwgeom->type == POLYGONTYPE || lwgeom->type == MULTIPOLYGONTYPE ) { lwgeom_free(lwgeom); PG_RETURN_FLOAT8(0.0); } /* Read our calculation type */ use_spheroid = PG_GETARG_BOOL(1); /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g), &s); /* User requests spherical calculation, turn our spheroid into a sphere */ if ( ! use_spheroid ) s.a = s.b = s.radius; /* Calculate the length */ length = lwgeom_length_spheroid(lwgeom, &s); /* Something went wrong... */ if ( length < 0.0 ) { elog(ERROR, "lwgeom_length_spheroid returned length < 0.0"); PG_RETURN_NULL(); } /* Clean up */ lwgeom_free(lwgeom); PG_FREE_IF_COPY(g, 0); PG_RETURN_FLOAT8(length); } /* ** geography_point_outside(GSERIALIZED *g) ** returns point outside the object */ PG_FUNCTION_INFO_V1(geography_point_outside); Datum geography_point_outside(PG_FUNCTION_ARGS) { GBOX gbox; GSERIALIZED *g = NULL; GSERIALIZED *g_out = NULL; size_t g_out_size; LWPOINT *lwpoint = NULL; POINT2D pt; /* Get our geometry object loaded into memory. */ g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* We need the bounding box to get an outside point for area algorithm */ if ( gserialized_get_gbox_p(g, &gbox) == LW_FAILURE ) { POSTGIS_DEBUG(4,"gserialized_get_gbox_p returned LW_FAILURE"); elog(ERROR, "Error in gserialized_get_gbox_p calculation."); PG_RETURN_NULL(); } POSTGIS_DEBUGF(4, "got gbox %s", gbox_to_string(&gbox)); /* Get an exterior point, based on this gbox */ gbox_pt_outside(&gbox, &pt); lwpoint = lwpoint_make2d(4326, pt.x, pt.y); g_out = gserialized_from_lwgeom((LWGEOM*)lwpoint, 1, &g_out_size); SET_VARSIZE(g_out, g_out_size); PG_FREE_IF_COPY(g, 0); PG_RETURN_POINTER(g_out); } /* ** geography_covers(GSERIALIZED *g, GSERIALIZED *g) returns boolean ** Only works for (multi)points and (multi)polygons currently. ** Attempts a simple point-in-polygon test on the polygon and point. ** Current algorithm does not distinguish between points on edge ** and points within. */ PG_FUNCTION_INFO_V1(geography_covers); Datum geography_covers(PG_FUNCTION_ARGS) { LWGEOM *lwgeom1 = NULL; LWGEOM *lwgeom2 = NULL; GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; int type1, type2; int result = LW_FALSE; /* Get our geometry objects loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); type1 = gserialized_get_type(g1); type2 = gserialized_get_type(g2); /* Right now we only handle points and polygons */ if ( ! ( (type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE || type1 == COLLECTIONTYPE) && (type2 == POINTTYPE || type2 == MULTIPOINTTYPE || type2 == COLLECTIONTYPE) ) ) { elog(ERROR, "geography_covers: only POLYGON and POINT types are currently supported"); PG_RETURN_NULL(); } /* Construct our working geometries */ lwgeom1 = lwgeom_from_gserialized(g1); lwgeom2 = lwgeom_from_gserialized(g2); /* EMPTY never intersects with another geometry */ if ( lwgeom_is_empty(lwgeom1) || lwgeom_is_empty(lwgeom2) ) { lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_BOOL(false); } /* Calculate answer */ result = lwgeom_covers_lwgeom_sphere(lwgeom1, lwgeom2); /* Clean up */ lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_BOOL(result); } /* ** geography_bestsrid(GSERIALIZED *g, GSERIALIZED *g) returns int ** Utility function. Returns negative SRID numbers that match to the ** numbers handled in code by the transform(lwgeom, srid) function. ** UTM, polar stereographic and mercator as fallback. To be used ** in wrapping existing geometry functions in SQL to provide access ** to them in the geography module. */ PG_FUNCTION_INFO_V1(geography_bestsrid); Datum geography_bestsrid(PG_FUNCTION_ARGS) { GBOX gbox, gbox1, gbox2; GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; int empty1 = LW_FALSE; int empty2 = LW_FALSE; double xwidth, ywidth; POINT2D center; Datum d1 = PG_GETARG_DATUM(0); Datum d2 = PG_GETARG_DATUM(1); /* Get our geometry objects loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(d1); /* Synchronize our box types */ gbox1.flags = g1->flags; /* Calculate if the geometry is empty. */ empty1 = gserialized_is_empty(g1); /* Calculate a geocentric bounds for the objects */ if ( ! empty1 && gserialized_get_gbox_p(g1, &gbox1) == LW_FAILURE ) elog(ERROR, "Error in geography_bestsrid calling gserialized_get_gbox_p(g1, &gbox1)"); POSTGIS_DEBUGF(4, "calculated gbox = %s", gbox_to_string(&gbox1)); /* If we have a unique second argument, fill in all the necessary variables. */ if ( d1 != d2 ) { g2 = (GSERIALIZED*)PG_DETOAST_DATUM(d2); gbox2.flags = g2->flags; empty2 = gserialized_is_empty(g2); if ( ! empty2 && gserialized_get_gbox_p(g2, &gbox2) == LW_FAILURE ) elog(ERROR, "Error in geography_bestsrid calling gserialized_get_gbox_p(g2, &gbox2)"); } /* ** If no unique second argument, copying the box for the first ** argument will give us the right answer for all subsequent tests. */ else { gbox = gbox2 = gbox1; } /* Both empty? We don't have an answer. */ if ( empty1 && empty2 ) PG_RETURN_NULL(); /* One empty? We can use the other argument values as infill. Otherwise merge the boxen */ if ( empty1 ) gbox = gbox2; else if ( empty2 ) gbox = gbox1; else gbox_union(&gbox1, &gbox2, &gbox); gbox_centroid(&gbox, ¢er); /* Width and height in degrees */ xwidth = 180.0 * gbox_angular_width(&gbox) / M_PI; ywidth = 180.0 * gbox_angular_height(&gbox) / M_PI; POSTGIS_DEBUGF(2, "xwidth %g", xwidth); POSTGIS_DEBUGF(2, "ywidth %g", ywidth); POSTGIS_DEBUGF(2, "center POINT(%g %g)", center.x, center.y); /* Are these data arctic? Lambert Azimuthal Equal Area North. */ if ( center.y > 70.0 && ywidth < 45.0 ) { PG_RETURN_INT32(SRID_NORTH_LAMBERT); } /* Are these data antarctic? Lambert Azimuthal Equal Area South. */ if ( center.y < -70.0 && ywidth < 45.0 ) { PG_RETURN_INT32(SRID_SOUTH_LAMBERT); } /* ** Can we fit these data into one UTM zone? ** We will assume we can push things as ** far as a half zone past a zone boundary. ** Note we have no handling for the date line in here. */ if ( xwidth < 6.0 ) { int zone = floor((center.x + 180.0) / 6.0); if ( zone > 59 ) zone = 59; /* Are these data below the equator? UTM South. */ if ( center.y < 0.0 ) { PG_RETURN_INT32( SRID_SOUTH_UTM_START + zone ); } /* Are these data above the equator? UTM North. */ else { PG_RETURN_INT32( SRID_NORTH_UTM_START + zone ); } } /* ** Can we fit into a custom LAEA area? (30 degrees high, variable width) ** We will allow overlap into adjoining areas, but use a slightly narrower test (25) to try ** and minimize the worst case. ** Again, we are hoping the dateline doesn't trip us up much */ if ( ywidth < 25.0 ) { int xzone = -1; int yzone = 3 + floor(center.y / 30.0); /* (range of 0-5) */ /* Equatorial band, 12 zones, 30 degrees wide */ if ( (yzone == 2 || yzone == 3) && xwidth < 30.0 ) { xzone = 6 + floor(center.x / 30.0); } /* Temperate band, 8 zones, 45 degrees wide */ else if ( (yzone == 1 || yzone == 4) && xwidth < 45.0 ) { xzone = 4 + floor(center.x / 45.0); } /* Arctic band, 4 zones, 90 degrees wide */ else if ( (yzone == 0 || yzone == 5) && xwidth < 90.0 ) { xzone = 2 + floor(center.x / 90.0); } /* Did we fit into an appropriate xzone? */ if ( xzone != -1 ) { PG_RETURN_INT32(SRID_LAEA_START + 20 * yzone + xzone); } } /* ** Running out of options... fall-back to Mercator ** and hope for the best. */ PG_RETURN_INT32(SRID_WORLD_MERCATOR); } /* ** geography_project(GSERIALIZED *g, distance, azimuth) ** returns point of projection given start point, ** azimuth in radians (bearing) and distance in meters */ PG_FUNCTION_INFO_V1(geography_project); Datum geography_project(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; LWPOINT *lwp_projected; GSERIALIZED *g = NULL; GSERIALIZED *g_out = NULL; double azimuth, distance; SPHEROID s; uint32_t type; /* Return NULL on NULL distance or geography */ if ( PG_ARGISNULL(0) || PG_ARGISNULL(1) ) PG_RETURN_NULL(); /* Get our geometry object loaded into memory. */ g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Only return for points. */ type = gserialized_get_type(g); if ( type != POINTTYPE ) { elog(ERROR, "ST_Project(geography) is only valid for point inputs"); PG_RETURN_NULL(); } distance = PG_GETARG_FLOAT8(1); /* Distance in Meters */ lwgeom = lwgeom_from_gserialized(g); /* EMPTY things cannot be projected from */ if ( lwgeom_is_empty(lwgeom) ) { lwgeom_free(lwgeom); elog(ERROR, "ST_Project(geography) cannot project from an empty start point"); PG_RETURN_NULL(); } if ( PG_ARGISNULL(2) ) azimuth = 0.0; else azimuth = PG_GETARG_FLOAT8(2); /* Azimuth in Radians */ /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g), &s); /* Handle the zero distance case */ if( FP_EQUALS(distance, 0.0) ) { PG_RETURN_POINTER(g); } /* Calculate the length */ lwp_projected = lwgeom_project_spheroid(lwgeom_as_lwpoint(lwgeom), &s, distance, azimuth); /* Something went wrong... */ if ( lwp_projected == NULL ) { elog(ERROR, "lwgeom_project_spheroid returned null"); PG_RETURN_NULL(); } /* Clean up, but not all the way to the point arrays */ lwgeom_free(lwgeom); g_out = geography_serialize(lwpoint_as_lwgeom(lwp_projected)); lwpoint_free(lwp_projected); PG_FREE_IF_COPY(g, 0); PG_RETURN_POINTER(g_out); } /* ** geography_azimuth(GSERIALIZED *g1, GSERIALIZED *g2) ** returns direction between points (north = 0) ** azimuth (bearing) and distance */ PG_FUNCTION_INFO_V1(geography_azimuth); Datum geography_azimuth(PG_FUNCTION_ARGS) { LWGEOM *lwgeom1 = NULL; LWGEOM *lwgeom2 = NULL; GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; double azimuth; SPHEROID s; uint32_t type1, type2; /* Get our geometry object loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Only return for points. */ type1 = gserialized_get_type(g1); type2 = gserialized_get_type(g2); if ( type1 != POINTTYPE || type2 != POINTTYPE ) { elog(ERROR, "ST_Azimuth(geography, geography) is only valid for point inputs"); PG_RETURN_NULL(); } lwgeom1 = lwgeom_from_gserialized(g1); lwgeom2 = lwgeom_from_gserialized(g2); /* EMPTY things cannot be used */ if ( lwgeom_is_empty(lwgeom1) || lwgeom_is_empty(lwgeom2) ) { lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); elog(ERROR, "ST_Azimuth(geography, geography) cannot work with empty points"); PG_RETURN_NULL(); } /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); /* Calculate the direction */ azimuth = lwgeom_azumith_spheroid(lwgeom_as_lwpoint(lwgeom1), lwgeom_as_lwpoint(lwgeom2), &s); /* Clean up */ lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); /* Return NULL for unknown (same point) azimuth */ if( isnan(azimuth) ) { PG_RETURN_NULL(); } PG_RETURN_FLOAT8(azimuth); } /* ** geography_segmentize(GSERIALIZED *g1, double max_seg_length) ** returns densified geometry with no segment longer than max */ PG_FUNCTION_INFO_V1(geography_segmentize); Datum geography_segmentize(PG_FUNCTION_ARGS) { LWGEOM *lwgeom1 = NULL; LWGEOM *lwgeom2 = NULL; GSERIALIZED *g1 = NULL; GSERIALIZED *g2 = NULL; double max_seg_length; uint32_t type1; /* Get our geometry object loaded into memory. */ g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); type1 = gserialized_get_type(g1); /* Convert max_seg_length from metric units to radians */ max_seg_length = PG_GETARG_FLOAT8(1) / WGS84_RADIUS; /* We can't densify points or points, reflect them back */ if ( type1 == POINTTYPE || type1 == MULTIPOINTTYPE || gserialized_is_empty(g1) ) PG_RETURN_POINTER(g1); /* Deserialize */ lwgeom1 = lwgeom_from_gserialized(g1); /* Calculate the densified geometry */ lwgeom2 = lwgeom_segmentize_sphere(lwgeom1, max_seg_length); g2 = geography_serialize(lwgeom2); /* Clean up */ lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(g1, 0); PG_RETURN_POINTER(g2); } ������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_accum.c������������������������������������������������������0000644�0000000�0000000�00000020240�12024436744�020062� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_accum.c 10281 2012-09-13 20:11:16Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2009 Paul Ramsey <pramsey@opengeo.org> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "funcapi.h" #include "access/tupmacs.h" #include "utils/array.h" #include "utils/lsyscache.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" /* Local prototypes */ Datum PGISDirectFunctionCall1(PGFunction func, Datum arg1); Datum pgis_geometry_accum_transfn(PG_FUNCTION_ARGS); Datum pgis_geometry_accum_finalfn(PG_FUNCTION_ARGS); Datum pgis_geometry_union_finalfn(PG_FUNCTION_ARGS); Datum pgis_geometry_collect_finalfn(PG_FUNCTION_ARGS); Datum pgis_geometry_polygonize_finalfn(PG_FUNCTION_ARGS); Datum pgis_geometry_makeline_finalfn(PG_FUNCTION_ARGS); Datum pgis_abs_in(PG_FUNCTION_ARGS); Datum pgis_abs_out(PG_FUNCTION_ARGS); /* External prototypes */ Datum pgis_union_geometry_array(PG_FUNCTION_ARGS); Datum LWGEOM_collect_garray(PG_FUNCTION_ARGS); Datum polygonize_garray(PG_FUNCTION_ARGS); Datum LWGEOM_makeline_garray(PG_FUNCTION_ARGS); /** @file ** Versions of PostgreSQL < 8.4 perform array accumulation internally using ** pass by value, which is very slow working with large/many geometries. ** Hence PostGIS currently implements its own aggregate for building ** geometry arrays using pass by reference, which is significantly faster and ** similar to the method used in PostgreSQL 8.4. ** ** Hence we can revert this to the original aggregate functions from 1.3 at ** whatever point PostgreSQL 8.4 becomes the minimum version we support :) */ /** ** To pass the internal ArrayBuildState pointer between the ** transfn and finalfn we need to wrap it into a custom type first, ** the pgis_abs type in our case. */ typedef struct { ArrayBuildState *a; } pgis_abs; /** ** We're never going to use this type externally so the in/out ** functions are dummies. */ PG_FUNCTION_INFO_V1(pgis_abs_in); Datum pgis_abs_in(PG_FUNCTION_ARGS) { ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function pgis_abs_in not implemented"))); PG_RETURN_POINTER(NULL); } PG_FUNCTION_INFO_V1(pgis_abs_out); Datum pgis_abs_out(PG_FUNCTION_ARGS) { ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function pgis_abs_out not implemented"))); PG_RETURN_POINTER(NULL); } /** ** The transfer function hooks into the PostgreSQL accumArrayResult() ** function (present since 8.0) to build an array in a side memory ** context. */ PG_FUNCTION_INFO_V1(pgis_geometry_accum_transfn); Datum pgis_geometry_accum_transfn(PG_FUNCTION_ARGS) { Oid arg1_typeid = get_fn_expr_argtype(fcinfo->flinfo, 1); MemoryContext aggcontext; ArrayBuildState *state; pgis_abs *p; Datum elem; if (arg1_typeid == InvalidOid) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("could not determine input data type"))); if (fcinfo->context && IsA(fcinfo->context, AggState)) aggcontext = ((AggState *) fcinfo->context)->aggcontext; else if (fcinfo->context && IsA(fcinfo->context, WindowAggState)) aggcontext = ((WindowAggState *) fcinfo->context)->aggcontext; else { /* cannot be called directly because of dummy-type argument */ elog(ERROR, "array_agg_transfn called in non-aggregate context"); aggcontext = NULL; /* keep compiler quiet */ } if ( PG_ARGISNULL(0) ) { p = (pgis_abs*) palloc(sizeof(pgis_abs)); p->a = NULL; } else { p = (pgis_abs*) PG_GETARG_POINTER(0); } state = p->a; elem = PG_ARGISNULL(1) ? (Datum) 0 : PG_GETARG_DATUM(1); state = accumArrayResult(state, elem, PG_ARGISNULL(1), arg1_typeid, aggcontext); p->a = state; PG_RETURN_POINTER(p); } Datum pgis_accum_finalfn(pgis_abs *p, MemoryContext mctx, FunctionCallInfo fcinfo); /** ** The final function rescues the built array from the side memory context ** using the PostgreSQL built-in function makeMdArrayResult */ Datum pgis_accum_finalfn(pgis_abs *p, MemoryContext mctx, FunctionCallInfo fcinfo) { int dims[1]; int lbs[1]; ArrayBuildState *state; Datum result; /* cannot be called directly because of internal-type argument */ Assert(fcinfo->context && (IsA(fcinfo->context, AggState) || IsA(fcinfo->context, WindowAggState)) ); state = p->a; dims[0] = state->nelems; lbs[0] = 1; result = makeMdArrayResult(state, 1, dims, lbs, mctx, false); return result; } /** ** The "accum" final function just returns the geometry[] */ PG_FUNCTION_INFO_V1(pgis_geometry_accum_finalfn); Datum pgis_geometry_accum_finalfn(PG_FUNCTION_ARGS) { pgis_abs *p; Datum result = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ p = (pgis_abs*) PG_GETARG_POINTER(0); result = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo); PG_RETURN_DATUM(result); } /** * The "accum" final function passes the geometry[] to a union * conversion before returning the result. */ PG_FUNCTION_INFO_V1(pgis_geometry_union_finalfn); Datum pgis_geometry_union_finalfn(PG_FUNCTION_ARGS) { pgis_abs *p; Datum result = 0; Datum geometry_array = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ p = (pgis_abs*) PG_GETARG_POINTER(0); geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo); result = PGISDirectFunctionCall1( pgis_union_geometry_array, geometry_array ); if (!result) PG_RETURN_NULL(); PG_RETURN_DATUM(result); } /** * The "collect" final function passes the geometry[] to a geometrycollection * conversion before returning the result. */ PG_FUNCTION_INFO_V1(pgis_geometry_collect_finalfn); Datum pgis_geometry_collect_finalfn(PG_FUNCTION_ARGS) { pgis_abs *p; Datum result = 0; Datum geometry_array = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ p = (pgis_abs*) PG_GETARG_POINTER(0); geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo); result = PGISDirectFunctionCall1( LWGEOM_collect_garray, geometry_array ); if (!result) PG_RETURN_NULL(); PG_RETURN_DATUM(result); } /** * The "polygonize" final function passes the geometry[] to a polygonization * before returning the result. */ PG_FUNCTION_INFO_V1(pgis_geometry_polygonize_finalfn); Datum pgis_geometry_polygonize_finalfn(PG_FUNCTION_ARGS) { pgis_abs *p; Datum result = 0; Datum geometry_array = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ p = (pgis_abs*) PG_GETARG_POINTER(0); geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo); result = DirectFunctionCall1( polygonize_garray, geometry_array ); PG_RETURN_DATUM(result); } /** * The "makeline" final function passes the geometry[] to a line builder * before returning the result. */ PG_FUNCTION_INFO_V1(pgis_geometry_makeline_finalfn); Datum pgis_geometry_makeline_finalfn(PG_FUNCTION_ARGS) { pgis_abs *p; Datum result = 0; Datum geometry_array = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ p = (pgis_abs*) PG_GETARG_POINTER(0); geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo); result = PGISDirectFunctionCall1( LWGEOM_makeline_garray, geometry_array ); if (!result) PG_RETURN_NULL(); PG_RETURN_DATUM(result); } /** * A modified version of PostgreSQL's DirectFunctionCall1 which allows NULL results; this * is required for aggregates that return NULL. */ Datum PGISDirectFunctionCall1(PGFunction func, Datum arg1) { FunctionCallInfoData fcinfo; Datum result; #if POSTGIS_PGSQL_VERSION > 90 InitFunctionCallInfoData(fcinfo, NULL, 1, InvalidOid, NULL, NULL); #else InitFunctionCallInfoData(fcinfo, NULL, 1, NULL, NULL); #endif fcinfo.arg[0] = arg1; fcinfo.argnull[0] = false; result = (*func) (&fcinfo); /* Check for null result, returning a "NULL" Datum if indicated */ if (fcinfo.isnull) return (Datum) 0; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_transform.c��������������������������������������������������0000644�0000000�0000000�00000012254�11730625371�021012� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_transform.h" Datum transform(PG_FUNCTION_ARGS); Datum transform_geom(PG_FUNCTION_ARGS); Datum postgis_proj_version(PG_FUNCTION_ARGS); /** * transform( GEOMETRY, INT (output srid) ) * tmpPts - if there is a nadgrid error (-38), we re-try the transform * on a copy of points. The transformed points * are in an indeterminate state after the -38 error is thrown. */ PG_FUNCTION_INFO_V1(transform); Datum transform(PG_FUNCTION_ARGS) { GSERIALIZED *geom; GSERIALIZED *result=NULL; LWGEOM *lwgeom; projPJ input_pj, output_pj; int32 output_srid, input_srid; output_srid = PG_GETARG_INT32(1); if (output_srid == SRID_UNKNOWN) { elog(ERROR,"%d is an invalid target SRID",SRID_UNKNOWN); PG_RETURN_NULL(); } geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); input_srid = gserialized_get_srid(geom); if ( input_srid == SRID_UNKNOWN ) { PG_FREE_IF_COPY(geom, 0); elog(ERROR,"Input geometry has unknown (%d) SRID",SRID_UNKNOWN); PG_RETURN_NULL(); } /* * If input SRID and output SRID are equal, return geometry * without transform it */ if ( input_srid == output_srid ) PG_RETURN_POINTER(PG_GETARG_DATUM(0)); if ( GetProjectionsUsingFCInfo(fcinfo, input_srid, output_srid, &input_pj, &output_pj) == LW_FAILURE ) { PG_FREE_IF_COPY(geom, 0); elog(ERROR,"Failure reading projections from spatial_ref_sys."); PG_RETURN_NULL(); } /* now we have a geometry, and input/output PJ structs. */ lwgeom = lwgeom_from_gserialized(geom); lwgeom_transform(lwgeom, input_pj, output_pj); lwgeom->srid = output_srid; /* Re-compute bbox if input had one (COMPUTE_BBOX TAINTING) */ if ( lwgeom->bbox ) { lwgeom_drop_bbox(lwgeom); lwgeom_add_bbox(lwgeom); } result = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); /* new geometry */ } /** * Transform_geom( GEOMETRY, TEXT (input proj4), TEXT (output proj4), * INT (output srid) * * tmpPts - if there is a nadgrid error (-38), we re-try the transform * on a copy of points. The transformed points * are in an indeterminate state after the -38 error is thrown. */ PG_FUNCTION_INFO_V1(transform_geom); Datum transform_geom(PG_FUNCTION_ARGS) { GSERIALIZED *geom; GSERIALIZED *result=NULL; LWGEOM *lwgeom; projPJ input_pj, output_pj; char *input_proj4, *output_proj4; text *input_proj4_text; text *output_proj4_text; int32 result_srid ; char *pj_errstr; result_srid = PG_GETARG_INT32(3); if (result_srid == SRID_UNKNOWN) { elog(ERROR,"tranform: destination SRID = %d",SRID_UNKNOWN); PG_RETURN_NULL(); } geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); if (gserialized_get_srid(geom) == SRID_UNKNOWN) { pfree(geom); elog(ERROR,"transform_geom: source SRID = %d",SRID_UNKNOWN); PG_RETURN_NULL(); } /* Set the search path if we haven't already */ SetPROJ4LibPath(); /* Read the arguments */ input_proj4_text = (PG_GETARG_TEXT_P(1)); output_proj4_text = (PG_GETARG_TEXT_P(2)); /* Convert from text to cstring for libproj */ input_proj4 = text2cstring(input_proj4_text); output_proj4 = text2cstring(output_proj4_text); /* make input and output projection objects */ input_pj = lwproj_from_string(input_proj4); if ( input_pj == NULL ) { pj_errstr = pj_strerrno(*pj_get_errno_ref()); if ( ! pj_errstr ) pj_errstr = ""; /* we need this for error reporting */ /* pfree(input_proj4); */ pfree(output_proj4); pfree(geom); elog(ERROR, "transform_geom: could not parse proj4 string '%s' %s", input_proj4, pj_errstr); PG_RETURN_NULL(); } pfree(input_proj4); output_pj = lwproj_from_string(output_proj4); if ( output_pj == NULL ) { pj_errstr = pj_strerrno(*pj_get_errno_ref()); if ( ! pj_errstr ) pj_errstr = ""; /* we need this for error reporting */ /* pfree(output_proj4); */ pj_free(input_pj); pfree(geom); elog(ERROR, "transform_geom: couldn't parse proj4 output string: '%s': %s", output_proj4, pj_errstr); PG_RETURN_NULL(); } pfree(output_proj4); /* now we have a geometry, and input/output PJ structs. */ lwgeom = lwgeom_from_gserialized(geom); lwgeom_transform(lwgeom, input_pj, output_pj); lwgeom->srid = result_srid; /* clean up */ pj_free(input_pj); pj_free(output_pj); /* Re-compute bbox if input had one (COMPUTE_BBOX TAINTING) */ if ( lwgeom->bbox ) { lwgeom_drop_bbox(lwgeom); lwgeom_add_bbox(lwgeom); } result = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); /* new geometry */ } PG_FUNCTION_INFO_V1(postgis_proj_version); Datum postgis_proj_version(PG_FUNCTION_ARGS) { const char *ver = pj_get_release(); text *result = cstring2text(ver); PG_RETURN_POINTER(result); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_rtree.c������������������������������������������������������0000644�0000000�0000000�00000030072�11767664401�020125� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright (C) 2001-2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <assert.h> #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" /* For FP comparators. */ #include "lwgeom_cache.h" #include "lwgeom_rtree.h" /* Prototypes */ static void RTreeFree(RTREE_NODE* root); /** * Allocate a fresh clean RTREE_POLY_CACHE */ static RTREE_POLY_CACHE* RTreeCacheCreate() { RTREE_POLY_CACHE* result; result = lwalloc(sizeof(RTREE_POLY_CACHE)); memset(result, 0, sizeof(RTREE_POLY_CACHE)); return result; } /** * Recursively frees the child nodes, the interval and the line before * freeing the root node. */ static void RTreeFree(RTREE_NODE* root) { POSTGIS_DEBUGF(2, "RTreeFree called for %p", root); if (root->leftNode) RTreeFree(root->leftNode); if (root->rightNode) RTreeFree(root->rightNode); lwfree(root->interval); if (root->segment) { lwline_free(root->segment); } lwfree(root); } /** * Free the cache object and all the sub-objects properly. */ static void RTreeCacheClear(RTREE_POLY_CACHE* cache) { int g, r, i; POSTGIS_DEBUGF(2, "RTreeCacheClear called for %p", cache); i = 0; for (g = 0; g < cache->polyCount; g++) { for (r = 0; r < cache->ringCounts[g]; r++) { RTreeFree(cache->ringIndices[i]); i++; } } lwfree(cache->ringIndices); lwfree(cache->ringCounts); cache->ringIndices = 0; cache->ringCounts = 0; cache->polyCount = 0; } /** * Returns 1 if min < value <= max, 0 otherwise. */ static uint32 IntervalIsContained(RTREE_INTERVAL* interval, double value) { return FP_CONTAINS_INCL(interval->min, value, interval->max) ? 1 : 0; } /** * Creates an interval with the total extents of the two given intervals. */ static RTREE_INTERVAL* RTreeMergeIntervals(RTREE_INTERVAL *inter1, RTREE_INTERVAL *inter2) { RTREE_INTERVAL *interval; POSTGIS_DEBUGF(2, "RTreeMergeIntervals called with %p, %p", inter1, inter2); interval = lwalloc(sizeof(RTREE_INTERVAL)); interval->max = FP_MAX(inter1->max, inter2->max); interval->min = FP_MIN(inter1->min, inter2->min); POSTGIS_DEBUGF(3, "interval min = %8.3f, max = %8.3f", interval->min, interval->max); return interval; } /** * Creates an interval given the min and max values, in arbitrary order. */ static RTREE_INTERVAL* RTreeCreateInterval(double value1, double value2) { RTREE_INTERVAL *interval; POSTGIS_DEBUGF(2, "RTreeCreateInterval called with %8.3f, %8.3f", value1, value2); interval = lwalloc(sizeof(RTREE_INTERVAL)); interval->max = FP_MAX(value1, value2); interval->min = FP_MIN(value1, value2); POSTGIS_DEBUGF(3, "interval min = %8.3f, max = %8.3f", interval->min, interval->max); return interval; } /** * Creates an interior node given the children. */ static RTREE_NODE* RTreeCreateInteriorNode(RTREE_NODE* left, RTREE_NODE* right) { RTREE_NODE *parent; POSTGIS_DEBUGF(2, "RTreeCreateInteriorNode called for children %p, %p", left, right); parent = lwalloc(sizeof(RTREE_NODE)); parent->leftNode = left; parent->rightNode = right; parent->interval = RTreeMergeIntervals(left->interval, right->interval); parent->segment = NULL; POSTGIS_DEBUGF(3, "RTreeCreateInteriorNode returning %p", parent); return parent; } /** * Creates a leaf node given the pointer to the start point of the segment. */ static RTREE_NODE* RTreeCreateLeafNode(POINTARRAY* pa, int startPoint) { RTREE_NODE *parent; LWLINE *line; double value1; double value2; POINT4D tmp; POINTARRAY *npa; POSTGIS_DEBUGF(2, "RTreeCreateLeafNode called for point %d of %p", startPoint, pa); if (pa->npoints < startPoint + 2) { lwerror("RTreeCreateLeafNode: npoints = %d, startPoint = %d", pa->npoints, startPoint); } /* * The given point array will be part of a geometry that will be freed * independently of the index. Since we may want to cache the index, * we must create independent arrays. */ npa = ptarray_construct_empty(0,0,2); getPoint4d_p(pa, startPoint, &tmp); value1 = tmp.y; ptarray_append_point(npa,&tmp,LW_TRUE); getPoint4d_p(pa, startPoint+1, &tmp); value2 = tmp.y; ptarray_append_point(npa,&tmp,LW_TRUE); line = lwline_construct(SRID_UNKNOWN, NULL, npa); parent = lwalloc(sizeof(RTREE_NODE)); parent->interval = RTreeCreateInterval(value1, value2); parent->segment = line; parent->leftNode = NULL; parent->rightNode = NULL; POSTGIS_DEBUGF(3, "RTreeCreateLeafNode returning %p", parent); return parent; } /** * Creates an rtree given a pointer to the point array. * Must copy the point array. */ static RTREE_NODE* RTreeCreate(POINTARRAY* pointArray) { RTREE_NODE* root; RTREE_NODE** nodes = lwalloc(pointArray->npoints * sizeof(RTREE_NODE*)); int i, nodeCount; int childNodes, parentNodes; POSTGIS_DEBUGF(2, "RTreeCreate called with pointarray %p", pointArray); nodeCount = pointArray->npoints - 1; POSTGIS_DEBUGF(3, "Total leaf nodes: %d", nodeCount); /* * Create a leaf node for every line segment. */ for (i = 0; i < nodeCount; i++) { nodes[i] = RTreeCreateLeafNode(pointArray, i); } /* * Next we group nodes by pairs. If there's an odd number of nodes, * we bring the last node up a level as is. Continue until we have * a single top node. */ childNodes = nodeCount; parentNodes = nodeCount / 2; while (parentNodes > 0) { POSTGIS_DEBUGF(3, "Merging %d children into %d parents.", childNodes, parentNodes); i = 0; while (i < parentNodes) { nodes[i] = RTreeCreateInteriorNode(nodes[i*2], nodes[i*2+1]); i++; } /* * Check for an odd numbered final node. */ if (parentNodes * 2 < childNodes) { POSTGIS_DEBUGF(3, "Shuffling child %d to parent %d", childNodes - 1, i); nodes[i] = nodes[childNodes - 1]; parentNodes++; } childNodes = parentNodes; parentNodes = parentNodes / 2; } root = nodes[0]; lwfree(nodes); POSTGIS_DEBUGF(3, "RTreeCreate returning %p", root); return root; } /** * Merges two multilinestrings into a single multilinestring. */ static LWMLINE* RTreeMergeMultiLines(LWMLINE *line1, LWMLINE *line2) { LWGEOM **geoms; LWCOLLECTION *col; int i, j, ngeoms; POSTGIS_DEBUGF(2, "RTreeMergeMultiLines called on %p, %d, %d; %p, %d, %d", line1, line1->ngeoms, line1->type, line2, line2->ngeoms, line2->type); ngeoms = line1->ngeoms + line2->ngeoms; geoms = lwalloc(sizeof(LWGEOM *) * ngeoms); j = 0; for (i = 0; i < line1->ngeoms; i++, j++) { geoms[j] = lwgeom_clone((LWGEOM *)line1->geoms[i]); } for (i = 0; i < line2->ngeoms; i++, j++) { geoms[j] = lwgeom_clone((LWGEOM *)line2->geoms[i]); } col = lwcollection_construct(MULTILINETYPE, SRID_UNKNOWN, NULL, ngeoms, geoms); POSTGIS_DEBUGF(3, "RTreeMergeMultiLines returning %p, %d, %d", col, col->ngeoms, col->type); return (LWMLINE *)col; } /** * Callback function sent into the GetGeomCache generic caching system. Given a * LWGEOM* this function builds and stores an RTREE_POLY_CACHE into the provided * GeomCache object. */ static int RTreeBuilder(const LWGEOM* lwgeom, GeomCache* cache) { int i, p, r; LWMPOLY *mpoly; LWPOLY *poly; int nrings; RTreeGeomCache* rtree_cache = (RTreeGeomCache*)cache; RTREE_POLY_CACHE* currentCache; if ( ! cache ) return LW_FAILURE; if ( rtree_cache->index ) { lwerror("RTreeBuilder asked to build index where one already exists."); return LW_FAILURE; } if (lwgeom->type == MULTIPOLYGONTYPE) { POSTGIS_DEBUG(2, "RTreeBuilder MULTIPOLYGON"); mpoly = (LWMPOLY *)lwgeom; nrings = 0; /* ** Count the total number of rings. */ currentCache = RTreeCacheCreate(); currentCache->polyCount = mpoly->ngeoms; currentCache->ringCounts = lwalloc(sizeof(int) * mpoly->ngeoms); for ( i = 0; i < mpoly->ngeoms; i++ ) { currentCache->ringCounts[i] = mpoly->geoms[i]->nrings; nrings += mpoly->geoms[i]->nrings; } currentCache->ringIndices = lwalloc(sizeof(RTREE_NODE *) * nrings); /* ** Load the array in geometry order, each outer ring followed by the inner rings ** associated with that outer ring */ i = 0; for ( p = 0; p < mpoly->ngeoms; p++ ) { for ( r = 0; r < mpoly->geoms[p]->nrings; r++ ) { currentCache->ringIndices[i] = RTreeCreate(mpoly->geoms[p]->rings[r]); i++; } } rtree_cache->index = currentCache; } else if ( lwgeom->type == POLYGONTYPE ) { POSTGIS_DEBUG(2, "RTreeBuilder POLYGON"); poly = (LWPOLY *)lwgeom; currentCache = RTreeCacheCreate(); currentCache->polyCount = 1; currentCache->ringCounts = lwalloc(sizeof(int)); currentCache->ringCounts[0] = poly->nrings; /* ** Just load the rings on in order */ currentCache->ringIndices = lwalloc(sizeof(RTREE_NODE *) * poly->nrings); for ( i = 0; i < poly->nrings; i++ ) { currentCache->ringIndices[i] = RTreeCreate(poly->rings[i]); } rtree_cache->index = currentCache; } else { /* Uh oh, shouldn't be here. */ lwerror("RTreeBuilder got asked to build index on non-polygon"); return LW_FAILURE; } return LW_SUCCESS; } /** * Callback function sent into the GetGeomCache generic caching system. On a * cache miss, this function clears the cached index object. */ static int RTreeFreer(GeomCache* cache) { RTreeGeomCache* rtree_cache = (RTreeGeomCache*)cache; if ( ! cache ) return LW_FAILURE; if ( rtree_cache->index ) { RTreeCacheClear(rtree_cache->index); lwfree(rtree_cache->index); rtree_cache->index = 0; rtree_cache->argnum = 0; } return LW_SUCCESS; } static GeomCache* RTreeAllocator(void) { RTreeGeomCache* cache = palloc(sizeof(RTreeGeomCache)); memset(cache, 0, sizeof(RTreeGeomCache)); return (GeomCache*)cache; } static GeomCacheMethods RTreeCacheMethods = { RTREE_CACHE_ENTRY, RTreeBuilder, RTreeFreer, RTreeAllocator }; RTREE_POLY_CACHE* GetRtreeCache(FunctionCallInfoData* fcinfo, GSERIALIZED* g1) { RTreeGeomCache* cache = (RTreeGeomCache*)GetGeomCache(fcinfo, &RTreeCacheMethods, g1, NULL); RTREE_POLY_CACHE* index = NULL; if ( cache ) index = cache->index; return index; } /** * Retrieves a collection of line segments given the root and crossing value. * The collection is a multilinestring consisting of two point lines * representing the segments of the ring that may be crossed by the * horizontal projection line at the given y value. */ LWMLINE *RTreeFindLineSegments(RTREE_NODE *root, double value) { LWMLINE *tmp, *result; LWGEOM **lwgeoms; POSTGIS_DEBUGF(2, "RTreeFindLineSegments called for tree %p and value %8.3f", root, value); result = NULL; if (!IntervalIsContained(root->interval, value)) { POSTGIS_DEBUGF(3, "RTreeFindLineSegments %p: not contained.", root); return NULL; } /* If there is a segment defined for this node, include it. */ if (root->segment) { POSTGIS_DEBUGF(3, "RTreeFindLineSegments %p: adding segment %p %d.", root, root->segment, root->segment->type); lwgeoms = lwalloc(sizeof(LWGEOM *)); lwgeoms[0] = (LWGEOM *)root->segment; POSTGIS_DEBUGF(3, "Found geom %p, type %d, dim %d", root->segment, root->segment->type, FLAGS_GET_Z(root->segment->flags)); result = (LWMLINE *)lwcollection_construct(MULTILINETYPE, SRID_UNKNOWN, NULL, 1, lwgeoms); } /* If there is a left child node, recursively include its results. */ if (root->leftNode) { POSTGIS_DEBUGF(3, "RTreeFindLineSegments %p: recursing left.", root); tmp = RTreeFindLineSegments(root->leftNode, value); if (tmp) { POSTGIS_DEBUGF(3, "Found geom %p, type %d, dim %d", tmp, tmp->type, FLAGS_GET_Z(tmp->flags)); if (result) result = RTreeMergeMultiLines(result, tmp); else result = tmp; } } /* Same for any right child. */ if (root->rightNode) { POSTGIS_DEBUGF(3, "RTreeFindLineSegments %p: recursing right.", root); tmp = RTreeFindLineSegments(root->rightNode, value); if (tmp) { POSTGIS_DEBUGF(3, "Found geom %p, type %d, dim %d", tmp, tmp->type, FLAGS_GET_Z(tmp->flags)); if (result) result = RTreeMergeMultiLines(result, tmp); else result = tmp; } } return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_btree.c������������������������������������������������������0000644�0000000�0000000�00000020225�12130062750�020064� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2010 Olivier Courtin <olivier.courtin@oslandia.com> * Copyright (C) 2010 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * Copyright (C) 2009-2011 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * Comparision function for use in Binary Tree searches * (ORDER BY, GROUP BY, DISTINCT) * ***********************************************************/ #include "postgres.h" #include "fmgr.h" #include "utils/geo_decls.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> Datum lwgeom_lt(PG_FUNCTION_ARGS); Datum lwgeom_le(PG_FUNCTION_ARGS); Datum lwgeom_eq(PG_FUNCTION_ARGS); Datum lwgeom_ge(PG_FUNCTION_ARGS); Datum lwgeom_gt(PG_FUNCTION_ARGS); Datum lwgeom_cmp(PG_FUNCTION_ARGS); #define BTREE_SRID_MISMATCH_SEVERITY ERROR PG_FUNCTION_INFO_V1(lwgeom_lt); Datum lwgeom_lt(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); GBOX box1; GBOX box2; POSTGIS_DEBUG(2, "lwgeom_lt called"); if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2)) { elog(BTREE_SRID_MISMATCH_SEVERITY, "Operation on two GEOMETRIES with different SRIDs\n"); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_NULL(); } POSTGIS_DEBUG(3, "lwgeom_lt passed getSRID test"); gserialized_get_gbox_p(geom1, &box1); gserialized_get_gbox_p(geom2, &box2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); POSTGIS_DEBUG(3, "lwgeom_lt getbox2d_p passed"); if ( ! FPeq(box1.xmin , box2.xmin) ) { if (box1.xmin < box2.xmin) PG_RETURN_BOOL(TRUE); } if ( ! FPeq(box1.ymin , box2.ymin) ) { if (box1.ymin < box2.ymin) PG_RETURN_BOOL(TRUE); } if ( ! FPeq(box1.xmax , box2.xmax) ) { if (box1.xmax < box2.xmax) PG_RETURN_BOOL(TRUE); } if ( ! FPeq(box1.ymax , box2.ymax) ) { if (box1.ymax < box2.ymax) PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(lwgeom_le); Datum lwgeom_le(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); GBOX box1; GBOX box2; POSTGIS_DEBUG(2, "lwgeom_le called"); if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2)) { elog(BTREE_SRID_MISMATCH_SEVERITY, "Operation on two GEOMETRIES with different SRIDs\n"); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_NULL(); } gserialized_get_gbox_p(geom1, &box1); gserialized_get_gbox_p(geom2, &box2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( ! FPeq(box1.xmin , box2.xmin) ) { if (box1.xmin < box2.xmin) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } if ( ! FPeq(box1.ymin , box2.ymin) ) { if (box1.ymin < box2.ymin) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } if ( ! FPeq(box1.xmax , box2.xmax) ) { if (box1.xmax < box2.xmax) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } if ( ! FPeq(box1.ymax , box2.ymax) ) { if (box1.ymax < box2.ymax) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } PG_RETURN_BOOL(TRUE); } PG_FUNCTION_INFO_V1(lwgeom_eq); Datum lwgeom_eq(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); GBOX box1; GBOX box2; bool empty1, empty2; bool result; POSTGIS_DEBUG(2, "lwgeom_eq called"); if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2)) { elog(BTREE_SRID_MISMATCH_SEVERITY, "Operation on two GEOMETRIES with different SRIDs\n"); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_NULL(); } gbox_init(&box1); gbox_init(&box2); empty1 = ( gserialized_get_gbox_p(geom1, &box1) == LW_FAILURE ); empty2 = ( gserialized_get_gbox_p(geom2, &box2) == LW_FAILURE ); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( empty1 != empty2 ) { result = FALSE; } else if ( ! (FPeq(box1.xmin, box2.xmin) && FPeq(box1.ymin, box2.ymin) && FPeq(box1.xmax, box2.xmax) && FPeq(box1.ymax, box2.ymax)) ) { result = FALSE; } else { result = TRUE; } PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(lwgeom_ge); Datum lwgeom_ge(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); GBOX box1; GBOX box2; POSTGIS_DEBUG(2, "lwgeom_ge called"); if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2)) { elog(BTREE_SRID_MISMATCH_SEVERITY, "Operation on two GEOMETRIES with different SRIDs\n"); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_NULL(); } gserialized_get_gbox_p(geom1, &box1); gserialized_get_gbox_p(geom2, &box2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( ! FPeq(box1.xmin , box2.xmin) ) { if (box1.xmin > box2.xmin) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } if ( ! FPeq(box1.ymin , box2.ymin) ) { if (box1.ymin > box2.ymin) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } if ( ! FPeq(box1.xmax , box2.xmax) ) { if (box1.xmax > box2.xmax) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } if ( ! FPeq(box1.ymax , box2.ymax) ) { if (box1.ymax > box2.ymax) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } PG_RETURN_BOOL(TRUE); } PG_FUNCTION_INFO_V1(lwgeom_gt); Datum lwgeom_gt(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); GBOX box1; GBOX box2; POSTGIS_DEBUG(2, "lwgeom_gt called"); if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2)) { elog(BTREE_SRID_MISMATCH_SEVERITY, "Operation on two GEOMETRIES with different SRIDs\n"); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_NULL(); } gserialized_get_gbox_p(geom1, &box1); gserialized_get_gbox_p(geom2, &box2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( ! FPeq(box1.xmin , box2.xmin) ) { if (box1.xmin > box2.xmin) { PG_RETURN_BOOL(TRUE); } } if ( ! FPeq(box1.ymin , box2.ymin) ) { if (box1.ymin > box2.ymin) { PG_RETURN_BOOL(TRUE); } } if ( ! FPeq(box1.xmax , box2.xmax) ) { if (box1.xmax > box2.xmax) { PG_RETURN_BOOL(TRUE); } } if ( ! FPeq(box1.ymax , box2.ymax) ) { if (box1.ymax > box2.ymax) { PG_RETURN_BOOL(TRUE); } } PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(lwgeom_cmp); Datum lwgeom_cmp(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); GBOX box1; GBOX box2; POSTGIS_DEBUG(2, "lwgeom_cmp called"); if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2)) { elog(BTREE_SRID_MISMATCH_SEVERITY, "Operation on two GEOMETRIES with different SRIDs\n"); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_NULL(); } gserialized_get_gbox_p(geom1, &box1); gserialized_get_gbox_p(geom2, &box2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); if ( ! FPeq(box1.xmin , box2.xmin) ) { if (box1.xmin < box2.xmin) { PG_RETURN_INT32(-1); } PG_RETURN_INT32(1); } if ( ! FPeq(box1.ymin , box2.ymin) ) { if (box1.ymin < box2.ymin) { PG_RETURN_INT32(-1); } PG_RETURN_INT32(1); } if ( ! FPeq(box1.xmax , box2.xmax) ) { if (box1.xmax < box2.xmax) { PG_RETURN_INT32(-1); } PG_RETURN_INT32(1); } if ( ! FPeq(box1.ymax , box2.ymax) ) { if (box1.ymax < box2.ymax) { PG_RETURN_INT32(-1); } PG_RETURN_INT32(1); } PG_RETURN_INT32(0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/DEBUG���������������������������������������������������������������0000644�0000000�0000000�00000010200�11020224730�016001� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS debugging information ============================= Written by Mark Cave-Ayland 2008-05-31 Description =========== This document attempts to describe the PostGIS debugging system for new developers to the project. Previously, all debugging was either performed by uncommenting various elog()/lwnotice() statements within the code areas of interest, or using an existing #define to enable debugging within each individual file. The net result of this was that debugging could be quite a painful process, involving searching through each file as necessary and uncommenting the various options. There were also issues regarding levels of verbosity; some sections of code define multiple verbosity levels across many different files, and so getting the information required could be quite frustrating. To this end, a new debugging infrastructure has been added to PostGIS to help make life easier for developers. It is now possible to include debugging information using a set of new macros for the purpose. Each macro also allows a debug level to be specified, allowing output to be generated at the required verbosity level for the task in hand. Debugging is accomplished using four new macros: LWDEBUG(level, "message") - If the current debug level >= level, emit message LWDEBUGF(level, "format message", ...) - If the current debug level >= level, emit formatted message (this allows placeholders and extra arguments in exactly the same way as vasprintf()) POSTGIS_DEBUG(level, "message") - If the current debug level >= level, emit message POSTGIS_DEBUGF(level, "format message", ...) - If the current debug level >= level, emit formatted message (this allows placeholders and extra arguments in exactly the same way as vasprintf()) The two LWDEBUG macros are designed for use within liblwgeom; i.e. geometry routines that may not necessarily be used from PostgreSQL, and make use of the lwnotice() call. Similarly, the POSTGIS_DEBUG macros are designed for code that can *only* be called from within PostgreSQL, i.e. it calls ereport() directly. The trick is, of course, to distinguish between the two. Generally anything within a function declared as returning type Datum should use the POSTGIS_DEBUG macros, as well as code that can only be called from these functions. Similarly, any functions that do not take PostgreSQL-specific datatypes should use the LWDEBUG functions. Note that the debugging macros automatically prefix the current filename, function name and line number to any debugging messages. As well as allowing debug messages to be shorter, it also makes following program flow much easier. Usage ===== The current debug level is set by the POSTGIS_DEBUG_LEVEL #define in postgis_config.h. By default, configure sets POSTGIS_DEBUG_LEVEL to 0 which disables all debugging output. If debugging output is required, it is necessary to either redefine POSTGIS_DEBUG_LEVEL to the required level (and rebuild the shared library), or re-run configure with the --enable-debug option and then rebuild the shared library (currently configure defaults to level 4). A rebuild of the library is required since the output of the debug macros is conditional; if POSTGIS_DEBUG_LEVEL is set to 0 then instead of providing debug output, the macros simply evaluate to (void)0 which can be optimised away by the compiler. Hence adding debugging statements during development will have negligible performance impact during execution when debugging is disabled. Verbosity levels ================ The following verbosity levels have been defined in the initial implementation; obviously these may need to change as experience dictates. By specifying a debug level, output for all levels up to and including the current debug level is generated. It should also be obvious that as the debug level is increased, more complex output is generated. 0 - All debugging output is disable 1 - Reserved 2 - Function entry; for simply announcing when a function has been entered 3 - Normal function debug; output any information of interest to the developer 4 - Verbose function debug; output lots of useful detail 5 - Memory allocation; output all uses of alloc/free within the code ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/long_xact.c���������������������������������������������������������0000644�0000000�0000000�00000011153�11754662532�017406� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "access/xact.h" #include "executor/spi.h" /* this is what you need to work with SPI */ #include "commands/trigger.h" /* ... and triggers */ #include "utils/lsyscache.h" /* for get_namespace_name() */ #include "utils/rel.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #define ABORT_ON_AUTH_FAILURE 1 Datum check_authorization(PG_FUNCTION_ARGS); Datum getTransactionID(PG_FUNCTION_ARGS); /* * This trigger will check for authorization before * allowing UPDATE or DELETE of specific rows. * Rows are identified by the provided column. * Authorization info is extracted by the * "authorization_table" * */ PG_FUNCTION_INFO_V1(check_authorization); Datum check_authorization(PG_FUNCTION_ARGS) { TriggerData *trigdata = (TriggerData *) fcinfo->context; char *colname; HeapTuple rettuple_ok; HeapTuple rettuple_fail; TupleDesc tupdesc; int SPIcode; char query[1024]; const char *pk_id = NULL; SPITupleTable *tuptable; HeapTuple tuple; char *lockcode; char *authtable = "authorization_table"; const char *op; #define ERRMSGLEN 256 char errmsg[ERRMSGLEN]; /* Make sure trigdata is pointing at what I expect */ if ( ! CALLED_AS_TRIGGER(fcinfo) ) { elog(ERROR,"check_authorization: not fired by trigger manager"); } if ( ! TRIGGER_FIRED_BEFORE(trigdata->tg_event) ) { elog(ERROR,"check_authorization: not fired *before* event"); } if ( TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event) ) { rettuple_ok = trigdata->tg_newtuple; rettuple_fail = NULL; op = "UPDATE"; } else if ( TRIGGER_FIRED_BY_DELETE(trigdata->tg_event) ) { rettuple_ok = trigdata->tg_trigtuple; rettuple_fail = NULL; op = "DELETE"; } else { elog(ERROR,"check_authorization: not fired by update or delete"); PG_RETURN_NULL(); } tupdesc = trigdata->tg_relation->rd_att; /* Connect to SPI manager */ SPIcode = SPI_connect(); if (SPIcode != SPI_OK_CONNECT) { elog(ERROR,"check_authorization: could not connect to SPI"); PG_RETURN_NULL() ; } colname = trigdata->tg_trigger->tgargs[0]; pk_id = SPI_getvalue(trigdata->tg_trigtuple, tupdesc, SPI_fnumber(tupdesc, colname)); POSTGIS_DEBUG(3, "check_authorization called"); sprintf(query,"SELECT authid FROM \"%s\" WHERE expires >= now() AND toid = '%d' AND rid = '%s'", authtable, trigdata->tg_relation->rd_id, pk_id); POSTGIS_DEBUGF(3 ,"about to execute :%s", query); SPIcode = SPI_exec(query,0); if (SPIcode !=SPI_OK_SELECT ) elog(ERROR,"couldnt execute to test for lock :%s",query); if (!SPI_processed ) { POSTGIS_DEBUGF(3, "there is NO lock on row '%s'", pk_id); SPI_finish(); return PointerGetDatum(rettuple_ok); } /* there is a lock - check to see if I have rights to it! */ tuptable = SPI_tuptable; tupdesc = tuptable->tupdesc; tuple = tuptable->vals[0]; lockcode = SPI_getvalue(tuple, tupdesc, 1); POSTGIS_DEBUGF(3, "there is a lock on row '%s' (auth: '%s').", pk_id, lockcode); /* * check to see if temp_lock_have_table table exists * (it might not exist if they own no locks) */ sprintf(query,"SELECT * FROM pg_class WHERE relname = 'temp_lock_have_table'"); SPIcode = SPI_exec(query,0); if (SPIcode != SPI_OK_SELECT ) elog(ERROR,"couldnt execute to test for lockkey temp table :%s",query); if (SPI_processed==0) { goto fail; } sprintf(query, "SELECT * FROM temp_lock_have_table WHERE xideq( transid, getTransactionID() ) AND lockcode ='%s'", lockcode); POSTGIS_DEBUGF(3, "about to execute :%s", query); SPIcode = SPI_exec(query,0); if (SPIcode != SPI_OK_SELECT ) elog(ERROR, "couldnt execute to test for lock aquire: %s", query); if (SPI_processed >0) { POSTGIS_DEBUG(3, "I own the lock - I can modify the row"); SPI_finish(); return PointerGetDatum(rettuple_ok); } fail: snprintf(errmsg, ERRMSGLEN, "%s where \"%s\" = '%s' requires authorization '%s'", op, colname, pk_id, lockcode); errmsg[ERRMSGLEN-1] = '\0'; #ifdef ABORT_ON_AUTH_FAILURE elog(ERROR, "%s", errmsg); #else elog(NOTICE, "%s", errmsg); #endif SPI_finish(); return PointerGetDatum(rettuple_fail); } PG_FUNCTION_INFO_V1(getTransactionID); Datum getTransactionID(PG_FUNCTION_ARGS) { TransactionId xid = GetCurrentTransactionId(); PG_RETURN_DATUM( TransactionIdGetDatum(xid) ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_triggers.c���������������������������������������������������0000644�0000000�0000000�00000006240�11754662532�020631� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2004 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "executor/spi.h" /* this is what you need to work with SPI */ #include "commands/trigger.h" /* ... and triggers */ #include "../postgis_config.h" #include "lwgeom_pg.h" #include "utils/rel.h" Datum cache_bbox(PG_FUNCTION_ARGS); /** @file * The intended use for this trigger function is making * a geometry field cache it's bbox. Use like this: * * CREATE TRIGGER <name> BEFORE INSERT OR UPDATE * ON <table> FOR EACH ROW EXECUTE PROCEDURE * cache_bbox(<field>); * */ PG_FUNCTION_INFO_V1(cache_bbox); Datum cache_bbox(PG_FUNCTION_ARGS) { TriggerData *trigdata = (TriggerData *) fcinfo->context; Trigger *trigger; TupleDesc tupdesc; HeapTuple rettuple; bool isnull; Datum in, out; int attno, ret; /* make sure it's called as a trigger at all */ if (!CALLED_AS_TRIGGER(fcinfo)) elog(ERROR, "cache_bbox: not called by trigger manager"); /* * make sure it's called with at least one argument * (the geometry fields) */ if ( trigdata->tg_trigger->tgnargs != 1 ) elog(ERROR, "trigger 'cache_bbox' must be called with one argument"); trigger = trigdata->tg_trigger; /* tuple to return to executor */ if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) rettuple = trigdata->tg_newtuple; else rettuple = trigdata->tg_trigtuple; /* Do nothing when fired by delete, after or for statement */ if (TRIGGER_FIRED_BY_DELETE(trigdata->tg_event)) { elog(NOTICE, "Useless cache_box trigger fired by DELETE"); return PointerGetDatum(rettuple); } if (TRIGGER_FIRED_AFTER(trigdata->tg_event)) { elog(NOTICE, "Useless cache_box trigger fired AFTER"); return PointerGetDatum(rettuple); } if (TRIGGER_FIRED_FOR_STATEMENT(trigdata->tg_event)) { elog(NOTICE, "Useless cache_box trigger fired for STATEMENT"); return PointerGetDatum(rettuple); } tupdesc = trigdata->tg_relation->rd_att; /* Connect to SPI manager */ if ((ret = SPI_connect()) < 0) elog(ERROR, "cache_bbox: SPI_connect returned %d", ret); /* Find number of requested argument */ attno = SPI_fnumber(tupdesc, trigger->tgargs[0]); if ( attno == SPI_ERROR_NOATTRIBUTE ) elog(ERROR, "trigger %s can't find attribute %s", trigger->tgname, trigger->tgargs[0]); /* Find number of requested argument */ if ( strcmp(SPI_gettype(tupdesc, attno), "geometry") ) elog(ERROR, "trigger %s requested to apply to a non-geometry field (%s)", trigger->tgname, trigger->tgargs[0]); /* Get input lwgeom */ in = SPI_getbinval(rettuple, tupdesc, attno, &isnull); if ( ! isnull ) { out = PointerGetDatum(DirectFunctionCall1(LWGEOM_addBBOX, in)); rettuple = SPI_modifytuple(trigdata->tg_relation, rettuple, 1, &attno, &out, NULL); } /* Disconnect from SPI */ SPI_finish(); return PointerGetDatum(rettuple); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/legacy_gist.sql.in��������������������������������������������������0000644�0000000�0000000�00000002327�12052651052�020672� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE OPERATOR CLASS gist_geometry_ops FOR TYPE geometry USING GIST AS STORAGE box2df, OPERATOR 1 << , OPERATOR 2 &< , OPERATOR 3 && , OPERATOR 4 &> , OPERATOR 5 >> , OPERATOR 6 ~= , OPERATOR 7 ~ , OPERATOR 8 @ , OPERATOR 9 &<| , OPERATOR 10 <<| , OPERATOR 11 |>> , OPERATOR 12 |&> , OPERATOR 13 <-> FOR ORDER BY pg_catalog.float_ops, OPERATOR 14 <#> FOR ORDER BY pg_catalog.float_ops, FUNCTION 8 geometry_gist_distance_2d (internal, geometry, int4), FUNCTION 1 geometry_gist_consistent_2d (internal, geometry, int4), FUNCTION 2 geometry_gist_union_2d (bytea, internal), FUNCTION 3 geometry_gist_compress_2d (internal), FUNCTION 4 geometry_gist_decompress_2d (internal), FUNCTION 5 geometry_gist_penalty_2d (internal, internal, internal), FUNCTION 6 geometry_gist_picksplit_2d (internal, internal), FUNCTION 7 geometry_gist_same_2d (geom1 geometry, geom2 geometry, internal);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_in_gml.c�����������������������������������������������������0000644�0000000�0000000�00000140737�12314525005�020244� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_in_gml.c 12362 2014-03-26 10:20:53Z colivier $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2009 - 2010 Oslandia * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /** * @file GML input routines. * Ability to parse GML geometry fragment and to return an LWGEOM * or an error message. * * Implement ISO SQL/MM ST_GMLToSQL method * Cf: ISO 13249-3:2009 -> 5.1.50 (p 134) * * GML versions supported: * - Triangle, Tin and TriangulatedSurface, * and PolyhedralSurface elements * - GML 3.2.1 Namespace * - GML 3.1.1 Simple Features profile SF-2 * (with backward compatibility to GML 3.1.0 and 3.0.0) * - GML 2.1.2 * Cf: <http://www.opengeospatial.org/standards/gml> * * NOTA: this code doesn't (yet ?) support SQL/MM curves * * Written by Olivier Courtin - Oslandia * **********************************************************************/ #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xpath.h> #include <libxml/xpathInternals.h> #include "postgres.h" #include "executor/spi.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "lwgeom_transform.h" Datum geom_from_gml(PG_FUNCTION_ARGS); static LWGEOM* lwgeom_from_gml(const char *wkt); static LWGEOM* parse_gml(xmlNodePtr xnode, bool *hasz, int *root_srid); typedef struct struct_gmlSrs { int srid; bool reverse_axis; } gmlSrs; #define XLINK_NS ((char *) "http://www.w3.org/1999/xlink") #define GML_NS ((char *) "http://www.opengis.net/gml") #define GML32_NS ((char *) "http://www.opengis.net/gml/3.2") static void gml_lwerror(char *msg, int error_code) { POSTGIS_DEBUGF(3, "ST_GeomFromGML ERROR %i", error_code); lwerror("%s", msg); } /** * Ability to parse GML geometry fragment and to return an LWGEOM * or an error message. * * ISO SQL/MM define two error messages: * Cf: ISO 13249-3:2009 -> 5.1.50 (p 134) * - invalid GML representation * - unknown spatial reference system */ PG_FUNCTION_INFO_V1(geom_from_gml); Datum geom_from_gml(PG_FUNCTION_ARGS) { GSERIALIZED *geom; text *xml_input; LWGEOM *lwgeom; char *xml; int root_srid=SRID_UNKNOWN; /* Get the GML stream */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); xml_input = PG_GETARG_TEXT_P(0); xml = text2cstring(xml_input); /* Zero for undefined */ root_srid = PG_GETARG_INT32(1); lwgeom = lwgeom_from_gml(xml); if ( root_srid != SRID_UNKNOWN ) lwgeom->srid = root_srid; geom = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_RETURN_POINTER(geom); } /** * Return false if current element namespace is not a GML one * Return true otherwise. */ static bool is_gml_namespace(xmlNodePtr xnode, bool is_strict) { xmlNsPtr *ns, *p; ns = xmlGetNsList(xnode->doc, xnode); /* * If no namespace is available we could return true anyway * (because we work only on GML fragment, we don't want to * 'oblige' to add namespace on the geometry root node) */ if (ns == NULL) { return !is_strict; } /* * Handle namespaces: * - http://www.opengis.net/gml (GML 3.1.1 and priors) * - http://www.opengis.net/gml/3.2 (GML 3.2.1) */ for (p=ns ; *p ; p++) { if ((*p)->href == NULL || (*p)->prefix == NULL || xnode->ns == NULL || xnode->ns->prefix == NULL) continue; if (!xmlStrcmp(xnode->ns->prefix, (*p)->prefix)) { if ( !strcmp((char *) (*p)->href, GML_NS) || !strcmp((char *) (*p)->href, GML32_NS)) { xmlFree(ns); return true; } else { xmlFree(ns); return false; } } } xmlFree(ns); return !is_strict; /* Same reason here to not return false */ } /** * Retrieve a GML propertie from a node or NULL otherwise * Respect namespaces if presents in the node element */ static xmlChar *gmlGetProp(xmlNodePtr xnode, xmlChar *prop) { xmlChar *value; if (!is_gml_namespace(xnode, true)) return xmlGetProp(xnode, prop); /* * Handle namespaces: * - http://www.opengis.net/gml (GML 3.1.1 and priors) * - http://www.opengis.net/gml/3.2 (GML 3.2.1) */ value = xmlGetNsProp(xnode, prop, (xmlChar *) GML_NS); if (value == NULL) value = xmlGetNsProp(xnode, prop, (xmlChar *) GML32_NS); /* In last case try without explicit namespace */ if (value == NULL) value = xmlGetNoNsProp(xnode, prop); return value; } /** * Return true if current node contains a simple XLink * Return false otherwise. */ static bool is_xlink(xmlNodePtr node) { xmlChar *prop; prop = xmlGetNsProp(node, (xmlChar *)"type", (xmlChar *) XLINK_NS); if (prop == NULL) return false; if (strcmp((char *) prop, "simple")) { xmlFree(prop); return false; } prop = xmlGetNsProp(node, (xmlChar *)"href", (xmlChar *) XLINK_NS); if (prop == NULL) return false; if (prop[0] != '#') { xmlFree(prop); return false; } xmlFree(prop); return true; } /** * Return a xmlNodePtr on a node referenced by a XLink or NULL otherwise */ static xmlNodePtr get_xlink_node(xmlNodePtr xnode) { char *id; xmlNsPtr *ns, *n; xmlXPathContext *ctx; xmlXPathObject *xpath; xmlNodePtr node, ret_node; xmlChar *href, *p, *node_id; href = xmlGetNsProp(xnode, (xmlChar *)"href", (xmlChar *) XLINK_NS); id = lwalloc((xmlStrlen(xnode->ns->prefix) * 2 + xmlStrlen(xnode->name) + xmlStrlen(href) + sizeof("//:[@:id='']") + 1)); p = href; p++; /* ignore '#' first char */ /* XPath pattern look like: //gml:point[@gml:id='p1'] */ sprintf(id, "//%s:%s[@%s:id='%s']", (char *) xnode->ns->prefix, (char *) xnode->name, (char *) xnode->ns->prefix, (char *) p); ctx = xmlXPathNewContext(xnode->doc); if (ctx == NULL) { xmlFree(href); lwfree(id); return NULL; } /* Handle namespaces */ ns = xmlGetNsList(xnode->doc, xnode); for (n=ns ; *n; n++) xmlXPathRegisterNs(ctx, (*n)->prefix, (*n)->href); xmlFree(ns); /* Execute XPath expression */ xpath = xmlXPathEvalExpression((xmlChar *) id, ctx); lwfree(id); if (xpath == NULL || xpath->nodesetval == NULL || xpath->nodesetval->nodeNr != 1) { xmlFree(href); xmlXPathFreeObject(xpath); xmlXPathFreeContext(ctx); return NULL; } ret_node = xpath->nodesetval->nodeTab[0]; xmlXPathFreeObject(xpath); xmlXPathFreeContext(ctx); /* Protection against circular calls */ for (node = xnode ; node != NULL ; node = node->parent) { if (node->type != XML_ELEMENT_NODE) continue; node_id = gmlGetProp(node, (xmlChar *) "id"); if (node_id != NULL) { if (!xmlStrcmp(node_id, p)) gml_lwerror("invalid GML representation", 2); xmlFree(node_id); } } xmlFree(href); return ret_node; } /** * Use Proj4 to reproject a given POINTARRAY */ static POINTARRAY* gml_reproject_pa(POINTARRAY *pa, int srid_in, int srid_out) { int i; POINT4D p; projPJ in_pj, out_pj; char *text_in, *text_out; if (srid_in == SRID_UNKNOWN) return pa; /* nothing to do */ if (srid_out == SRID_UNKNOWN) gml_lwerror("invalid GML representation", 3); text_in = GetProj4StringSPI(srid_in); text_out = GetProj4StringSPI(srid_out); in_pj = lwproj_from_string(text_in); out_pj = lwproj_from_string(text_out); lwfree(text_in); lwfree(text_out); for (i=0 ; i < pa->npoints ; i++) { getPoint4d_p(pa, i, &p); point4d_transform(&p, in_pj, out_pj); ptarray_set_point4d(pa, i, &p); } pj_free(in_pj); pj_free(out_pj); return pa; } /** * Return 1 if given srid is planar (0 otherwise, i.e geocentric srid) * Return -1 if srid is not in spatial_ref_sys */ static int gml_is_srid_planar(int srid) { char *result; char query[256]; int is_planar, err; if (SPI_OK_CONNECT != SPI_connect ()) lwerror("gml_is_srid_planar: could not connect to SPI manager"); /* A way to find if this projection is planar or geocentric */ sprintf(query, "SELECT position('+units=m ' in proj4text) \ FROM spatial_ref_sys WHERE srid='%d'", srid); err = SPI_exec(query, 1); if (err < 0) lwerror("gml_is_srid_planar: error executing query %d", err); /* No entry in spatial_ref_sys */ if (SPI_processed <= 0) { SPI_finish(); return -1; } result = SPI_getvalue(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1); is_planar = atoi(result); SPI_finish(); return is_planar; } /** * Parse gml srsName attribute */ static void parse_gml_srs(xmlNodePtr xnode, gmlSrs *srs) { char *p; int is_planar; xmlNodePtr node; xmlChar *srsname; bool latlon = false; char sep = ':'; node = xnode; srsname = gmlGetProp(node, (xmlChar *) "srsName"); /*printf("srsname %s\n",srsname);*/ if (!srsname) { if (node->parent == NULL) { srs->srid = SRID_UNKNOWN; srs->reverse_axis = false; return; } parse_gml_srs(node->parent, srs); } else { /* Severals srsName formats are available... * cf WFS 1.1.0 -> 9.2 (p36) * cf ISO 19142:2009 -> 7.9.2.4.4 (p34) * cf RFC 5165 <http://tools.ietf.org/html/rfc5165> * cf CITE WFS-1.1 (GetFeature-tc17.2) */ /* SRS pattern like: EPSG:4326 urn:EPSG:geographicCRS:4326 urn:ogc:def:crs:EPSG:4326 urn:ogc:def:crs:EPSG::4326 urn:ogc:def:crs:EPSG:6.6:4326 urn:x-ogc:def:crs:EPSG:6.6:4326 http://www.opengis.net/gml/srs/epsg.xml#4326 http://www.epsg.org/6.11.2/4326 */ if (!strncmp((char *) srsname, "EPSG:", 5)) { sep = ':'; latlon = false; } else if (!strncmp((char *) srsname, "urn:ogc:def:crs:EPSG:", 21) || !strncmp((char *) srsname, "urn:x-ogc:def:crs:EPSG:", 23) || !strncmp((char *) srsname, "urn:EPSG:geographicCRS:", 23)) { sep = ':'; latlon = true; } else if (!strncmp((char *) srsname, "http://www.opengis.net/gml/srs/epsg.xml#", 40)) { sep = '#'; latlon = false; } else gml_lwerror("unknown spatial reference system", 4); /* retrieve the last ':' or '#' char */ for (p = (char *) srsname ; *p ; p++); for (--p ; *p != sep ; p--) if (!isdigit(*p)) gml_lwerror("unknown spatial reference system", 5); srs->srid = atoi(++p); /* Check into spatial_ref_sys that this SRID really exist */ is_planar = gml_is_srid_planar(srs->srid); if (srs->srid == SRID_UNKNOWN || is_planar == -1) gml_lwerror("unknown spatial reference system", 6); /* About lat/lon issue, Cf: http://tinyurl.com/yjpr55z */ srs->reverse_axis = !is_planar && latlon; xmlFree(srsname); return; } } /** * Parse a string supposed to be a double */ static double parse_gml_double(char *d, bool space_before, bool space_after) { char *p; int st; enum states { INIT = 0, NEED_DIG = 1, DIG = 2, NEED_DIG_DEC = 3, DIG_DEC = 4, EXP = 5, NEED_DIG_EXP = 6, DIG_EXP = 7, END = 8 }; /* * Double pattern * [-|\+]?[0-9]+(\.)?([0-9]+)?([Ee](\+|-)?[0-9]+)? * We could also meet spaces before and/or after * this pattern upon parameters */ if (space_before) while (isspace(*d)) d++; for (st = INIT, p = d ; *p ; p++) { if (isdigit(*p)) { if (st == INIT || st == NEED_DIG) st = DIG; else if (st == NEED_DIG_DEC) st = DIG_DEC; else if (st == NEED_DIG_EXP || st == EXP) st = DIG_EXP; else if (st == DIG || st == DIG_DEC || st == DIG_EXP); else gml_lwerror("invalid GML representation", 7); } else if (*p == '.') { if (st == DIG) st = NEED_DIG_DEC; else gml_lwerror("invalid GML representation", 8); } else if (*p == '-' || *p == '+') { if (st == INIT) st = NEED_DIG; else if (st == EXP) st = NEED_DIG_EXP; else gml_lwerror("invalid GML representation", 9); } else if (*p == 'e' || *p == 'E') { if (st == DIG || st == DIG_DEC) st = EXP; else gml_lwerror("invalid GML representation", 10); } else if (isspace(*p)) { if (!space_after) gml_lwerror("invalid GML representation", 11); if (st == DIG || st == DIG_DEC || st == DIG_EXP)st = END; else if (st == NEED_DIG_DEC) st = END; else if (st == END); else gml_lwerror("invalid GML representation", 12); } else gml_lwerror("invalid GML representation", 13); } if (st != DIG && st != NEED_DIG_DEC && st != DIG_DEC && st != DIG_EXP && st != END) gml_lwerror("invalid GML representation", 14); return atof(d); } /** * Parse gml:coordinates */ static POINTARRAY* parse_gml_coordinates(xmlNodePtr xnode, bool *hasz) { xmlChar *gml_coord, *gml_ts, *gml_cs, *gml_dec; char cs, ts, dec; POINTARRAY *dpa; int gml_dims; char *p, *q; bool digit; POINT4D pt; /* We begin to retrieve coordinates string */ gml_coord = xmlNodeGetContent(xnode); p = (char *) gml_coord; /* Default GML coordinates pattern: x1,y1 x2,y2 * x1,y1,z1 x2,y2,z2 * * Cf GML 2.1.2 -> 4.3.1 (p18) */ /* Retrieve separator between coordinates tuples */ gml_ts = gmlGetProp(xnode, (xmlChar *) "ts"); if (gml_ts == NULL) ts = ' '; else { if (xmlStrlen(gml_ts) > 1 || isdigit(gml_ts[0])) gml_lwerror("invalid GML representation", 15); ts = gml_ts[0]; xmlFree(gml_ts); } /* Retrieve separator between each coordinate */ gml_cs = gmlGetProp(xnode, (xmlChar *) "cs"); if (gml_cs == NULL) cs = ','; else { if (xmlStrlen(gml_cs) > 1 || isdigit(gml_cs[0])) gml_lwerror("invalid GML representation", 16); cs = gml_cs[0]; xmlFree(gml_cs); } /* Retrieve decimal separator */ gml_dec = gmlGetProp(xnode, (xmlChar *) "decimal"); if (gml_dec == NULL) dec = '.'; else { if (xmlStrlen(gml_dec) > 1 || isdigit(gml_dec[0])) gml_lwerror("invalid GML representation", 17); dec = gml_dec[0]; xmlFree(gml_dec); } if (cs == ts || cs == dec || ts == dec) gml_lwerror("invalid GML representation", 18); /* HasZ, !HasM, 1 Point */ dpa = ptarray_construct_empty(1, 0, 1); while (isspace(*p)) p++; /* Eat extra whitespaces if any */ for (q = p, gml_dims=0, digit = false ; *p ; p++) { if (isdigit(*p)) digit = true; /* One state parser */ /* Coordinate Separator */ if (*p == cs) { *p = '\0'; gml_dims++; if (*(p+1) == '\0') gml_lwerror("invalid GML representation", 19); if (gml_dims == 1) pt.x = parse_gml_double(q, false, true); else if (gml_dims == 2) pt.y = parse_gml_double(q, false, true); q = p+1; /* Tuple Separator (or end string) */ } else if (digit && (*p == ts || *(p+1) == '\0')) { if (*p == ts) *p = '\0'; gml_dims++; if (gml_dims < 2 || gml_dims > 3) gml_lwerror("invalid GML representation", 20); if (gml_dims == 3) pt.z = parse_gml_double(q, false, true); else { pt.y = parse_gml_double(q, false, true); *hasz = false; } ptarray_append_point(dpa, &pt, LW_FALSE); digit = false; q = p+1; gml_dims = 0; /* Need to put standard decimal separator to atof handle */ } else if (*p == dec && dec != '.') *p = '.'; } xmlFree(gml_coord); return dpa; /* ptarray_clone_deep(dpa); */ } /** * Parse gml:coord */ static POINTARRAY* parse_gml_coord(xmlNodePtr xnode, bool *hasz) { xmlNodePtr xyz; POINTARRAY *dpa; bool x,y,z; xmlChar *c; POINT4D p; /* HasZ?, !HasM, 1 Point */ dpa = ptarray_construct_empty(1, 0, 1); x = y = z = false; for (xyz = xnode->children ; xyz != NULL ; xyz = xyz->next) { if (xyz->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xyz, false)) continue; if (!strcmp((char *) xyz->name, "X")) { if (x) gml_lwerror("invalid GML representation", 21); c = xmlNodeGetContent(xyz); p.x = parse_gml_double((char *) c, true, true); x = true; xmlFree(c); } else if (!strcmp((char *) xyz->name, "Y")) { if (y) gml_lwerror("invalid GML representation", 22); c = xmlNodeGetContent(xyz); p.y = parse_gml_double((char *) c, true, true); y = true; xmlFree(c); } else if (!strcmp((char *) xyz->name, "Z")) { if (z) gml_lwerror("invalid GML representation", 23); c = xmlNodeGetContent(xyz); p.z = parse_gml_double((char *) c, true, true); z = true; xmlFree(c); } } /* Check dimension consistancy */ if (!x || !y) gml_lwerror("invalid GML representation", 24); if (!z) *hasz = false; ptarray_append_point(dpa, &p, LW_FALSE); x = y = z = false; return ptarray_clone_deep(dpa); } /** * Parse gml:pos */ static POINTARRAY* parse_gml_pos(xmlNodePtr xnode, bool *hasz) { xmlChar *dimension, *gmlpos; xmlNodePtr posnode; int dim, gml_dim; POINTARRAY *dpa; char *pos, *p; bool digit; POINT4D pt; /* HasZ, !HasM, 1 Point */ dpa = ptarray_construct_empty(1, 0, 1); for (posnode = xnode ; posnode != NULL ; posnode = posnode->next) { /* We only care about gml:pos element */ if (posnode->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(posnode, false)) continue; if (strcmp((char *) posnode->name, "pos")) continue; dimension = gmlGetProp(xnode, (xmlChar *) "srsDimension"); if (dimension == NULL) /* in GML 3.0.0 it was dimension */ dimension = gmlGetProp(xnode, (xmlChar *) "dimension"); if (dimension == NULL) dim = 2; /* We assume that we are in 2D */ else { dim = atoi((char *) dimension); xmlFree(dimension); if (dim < 2 || dim > 3) gml_lwerror("invalid GML representation", 25); } if (dim == 2) *hasz = false; /* We retrieve gml:pos string */ gmlpos = xmlNodeGetContent(posnode); pos = (char *) gmlpos; while (isspace(*pos)) pos++; /* Eat extra whitespaces if any */ /* gml:pos pattern: x1 y1 * x1 y1 z1 */ for (p=pos, gml_dim=0, digit=false ; *pos ; pos++) { if (isdigit(*pos)) digit = true; if (digit && (*pos == ' ' || *(pos+1) == '\0')) { if (*pos == ' ') *pos = '\0'; gml_dim++; if (gml_dim == 1) pt.x = parse_gml_double(p, true, true); else if (gml_dim == 2) pt.y = parse_gml_double(p, true, true); else if (gml_dim == 3) pt.z = parse_gml_double(p, true, true); p = pos+1; digit = false; } } xmlFree(gmlpos); /* Test again coherent dimensions on each coord */ if (gml_dim == 2) *hasz = false; if (gml_dim < 2 || gml_dim > 3 || gml_dim != dim) gml_lwerror("invalid GML representation", 26); ptarray_append_point(dpa, &pt, LW_FALSE); } return ptarray_clone_deep(dpa); } /** * Parse gml:posList */ static POINTARRAY* parse_gml_poslist(xmlNodePtr xnode, bool *hasz) { xmlChar *dimension, *gmlposlist; char *poslist, *p; int dim, gml_dim; POINTARRAY *dpa; POINT4D pt; bool digit; /* Retrieve gml:srsDimension attribute if any */ dimension = gmlGetProp(xnode, (xmlChar *) "srsDimension"); if (dimension == NULL) /* in GML 3.0.0 it was dimension */ dimension = gmlGetProp(xnode, (xmlChar *) "dimension"); if (dimension == NULL) dim = 2; /* We assume that we are in common 2D */ else { dim = atoi((char *) dimension); xmlFree(dimension); if (dim < 2 || dim > 3) gml_lwerror("invalid GML representation", 27); } if (dim == 2) *hasz = false; /* Retrieve gml:posList string */ gmlposlist = xmlNodeGetContent(xnode); poslist = (char *) gmlposlist; /* HasZ?, !HasM, 1 point */ dpa = ptarray_construct_empty(1, 0, 1); /* gml:posList pattern: x1 y1 x2 y2 * x1 y1 z1 x2 y2 z2 */ while (isspace(*poslist)) poslist++; /* Eat extra whitespaces if any */ for (p=poslist, gml_dim=0, digit=false ; *poslist ; poslist++) { if (isdigit(*poslist)) digit = true; if (digit && (*poslist == ' ' || *(poslist+1) == '\0')) { if (*poslist == ' ') *poslist = '\0'; gml_dim++; if (gml_dim == 1) pt.x = parse_gml_double(p, true, true); else if (gml_dim == 2) pt.y = parse_gml_double(p, true, true); else if (gml_dim == 3) pt.z = parse_gml_double(p, true, true); if (gml_dim == dim) { ptarray_append_point(dpa, &pt, LW_FALSE); gml_dim = 0; } else if (*(poslist+1) == '\0') gml_lwerror("invalid GML representation", 28); p = poslist+1; digit = false; } } xmlFree(gmlposlist); return ptarray_clone_deep(dpa); } /** * Parse data coordinates * * There's several ways to encode data coordinates, who could be mixed * inside a single geometrie: * - gml:pos element * - gml:posList element * - gml:pointProperty * - gml:pointRep (deprecated in 3.1.0) * - gml:coordinate element with tuples string inside (deprecated in 3.1.0) * - gml:coord elements with X,Y(,Z) nested elements (deprecated in 3.0.0) */ static POINTARRAY* parse_gml_data(xmlNodePtr xnode, bool *hasz, int *root_srid) { POINTARRAY *pa = 0, *tmp_pa = 0; xmlNodePtr xa, xb; gmlSrs srs; bool found; pa = NULL; for (xa = xnode ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (xa->name == NULL) continue; if (!strcmp((char *) xa->name, "pos")) { tmp_pa = parse_gml_pos(xa, hasz); if (pa == NULL) pa = tmp_pa; else pa = ptarray_merge(pa, tmp_pa); } else if (!strcmp((char *) xa->name, "posList")) { tmp_pa = parse_gml_poslist(xa, hasz); if (pa == NULL) pa = tmp_pa; else pa = ptarray_merge(pa, tmp_pa); } else if (!strcmp((char *) xa->name, "coordinates")) { tmp_pa = parse_gml_coordinates(xa, hasz); if (pa == NULL) pa = tmp_pa; else pa = ptarray_merge(pa, tmp_pa); } else if (!strcmp((char *) xa->name, "coord")) { tmp_pa = parse_gml_coord(xa, hasz); if (pa == NULL) pa = tmp_pa; else pa = ptarray_merge(pa, tmp_pa); } else if (!strcmp((char *) xa->name, "pointRep") || !strcmp((char *) xa->name, "pointProperty")) { found = false; for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xb, false)) continue; if (!strcmp((char *) xb->name, "Point")) { found = true; break; } } if (!found || xb == NULL) gml_lwerror("invalid GML representation", 29); if (is_xlink(xb)) xb = get_xlink_node(xb); if (xb == NULL || xb->children == NULL) gml_lwerror("invalid GML representation", 30); tmp_pa = parse_gml_data(xb->children, hasz, root_srid); if (tmp_pa->npoints != 1) gml_lwerror("invalid GML representation", 31); parse_gml_srs(xb, &srs); if (srs.reverse_axis) tmp_pa = ptarray_flip_coordinates(tmp_pa); if (*root_srid == SRID_UNKNOWN) *root_srid = srs.srid; else if (srs.srid != *root_srid) gml_reproject_pa(tmp_pa, srs.srid, *root_srid); if (pa == NULL) pa = tmp_pa; else pa = ptarray_merge(pa, tmp_pa); } } if (pa == NULL) gml_lwerror("invalid GML representation", 32); return pa; } /** * Parse GML point (2.1.2, 3.1.1) */ static LWGEOM* parse_gml_point(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; LWGEOM *geom; POINTARRAY *pa; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); if (xnode->children == NULL) return lwpoint_as_lwgeom(lwpoint_construct_empty(*root_srid, 0, 0)); pa = parse_gml_data(xnode->children, hasz, root_srid); if (pa->npoints != 1) gml_lwerror("invalid GML representation", 34); parse_gml_srs(xnode, &srs); if (srs.reverse_axis) pa = ptarray_flip_coordinates(pa); if (!*root_srid) { *root_srid = srs.srid; geom = (LWGEOM *) lwpoint_construct(*root_srid, NULL, pa); } else { if (srs.srid != *root_srid) gml_reproject_pa(pa, srs.srid, *root_srid); geom = (LWGEOM *) lwpoint_construct(SRID_UNKNOWN, NULL, pa); } return geom; } /** * Parse GML lineString (2.1.2, 3.1.1) */ static LWGEOM* parse_gml_line(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; LWGEOM *geom; POINTARRAY *pa; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); if (xnode->children == NULL) return lwline_as_lwgeom(lwline_construct_empty(*root_srid, 0, 0)); pa = parse_gml_data(xnode->children, hasz, root_srid); if (pa->npoints < 2) gml_lwerror("invalid GML representation", 36); parse_gml_srs(xnode, &srs); if (srs.reverse_axis) pa = ptarray_flip_coordinates(pa); if (!*root_srid) { *root_srid = srs.srid; geom = (LWGEOM *) lwline_construct(*root_srid, NULL, pa); } else { if (srs.srid != *root_srid) gml_reproject_pa(pa, srs.srid, *root_srid); geom = (LWGEOM *) lwline_construct(SRID_UNKNOWN, NULL, pa); } return geom; } /** * Parse GML Curve (3.1.1) */ static LWGEOM* parse_gml_curve(xmlNodePtr xnode, bool *hasz, int *root_srid) { xmlNodePtr xa; int lss, last, i; bool found=false; gmlSrs srs; LWGEOM *geom=NULL; POINTARRAY *pa=NULL; POINTARRAY **ppa=NULL; uint32 npoints=0; xmlChar *interpolation=NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); /* Looking for gml:segments */ for (xa = xnode->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (!strcmp((char *) xa->name, "segments")) { found = true; break; } } if (!found) gml_lwerror("invalid GML representation", 37); ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); /* Processing each gml:LineStringSegment */ for (xa = xa->children, lss=0; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "LineStringSegment")) continue; /* GML SF is resticted to linear interpolation */ interpolation = gmlGetProp(xa, (xmlChar *) "interpolation"); if (interpolation != NULL) { if (strcmp((char *) interpolation, "linear")) gml_lwerror("invalid GML representation", 38); xmlFree(interpolation); } if (lss > 0) ppa = (POINTARRAY**) lwrealloc((POINTARRAY *) ppa, sizeof(POINTARRAY*) * (lss + 1)); ppa[lss] = parse_gml_data(xa->children, hasz, root_srid); npoints += ppa[lss]->npoints; if (ppa[lss]->npoints < 2) gml_lwerror("invalid GML representation", 39); lss++; } if (lss == 0) gml_lwerror("invalid GML representation", 40); /* Most common case, a single segment */ if (lss == 1) pa = ppa[0]; /* * "The curve segments are connected to one another, with the end point * of each segment except the last being the start point of the next * segment" from ISO 19107:2003 -> 6.3.16.1 (p43) * * So we must aggregate all the segments into a single one and avoid * to copy the redundants points */ if (lss > 1) { pa = ptarray_construct(1, 0, npoints - (lss - 1)); for (last = npoints = i = 0; i < lss ; i++) { if (i + 1 == lss) last = 1; /* Check if segments are not disjoints */ if (i > 0 && memcmp( getPoint_internal(pa, npoints), getPoint_internal(ppa[i], 0), *hasz?sizeof(POINT3D):sizeof(POINT2D))) gml_lwerror("invalid GML representation", 41); /* Aggregate stuff */ memcpy( getPoint_internal(pa, npoints), getPoint_internal(ppa[i], 0), ptarray_point_size(ppa[i]) * (ppa[i]->npoints + last)); npoints += ppa[i]->npoints - 1; lwfree(ppa[i]); } lwfree(ppa); } parse_gml_srs(xnode, &srs); if (srs.reverse_axis) pa = ptarray_flip_coordinates(pa); if (srs.srid != *root_srid && *root_srid != SRID_UNKNOWN) gml_reproject_pa(pa, srs.srid, *root_srid); geom = (LWGEOM *) lwline_construct(*root_srid, NULL, pa); return geom; } /** * Parse GML LinearRing (3.1.1) */ static LWGEOM* parse_gml_linearring(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; LWGEOM *geom; POINTARRAY **ppa = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); ppa[0] = parse_gml_data(xnode->children, hasz, root_srid); if (ppa[0]->npoints < 4 || (!*hasz && !ptarray_is_closed_2d(ppa[0])) || (*hasz && !ptarray_is_closed_3d(ppa[0]))) gml_lwerror("invalid GML representation", 42); if (srs.reverse_axis) ppa[0] = ptarray_flip_coordinates(ppa[0]); if (srs.srid != *root_srid && *root_srid != SRID_UNKNOWN) gml_reproject_pa(ppa[0], srs.srid, *root_srid); geom = (LWGEOM *) lwpoly_construct(*root_srid, NULL, 1, ppa); return geom; } /** * Parse GML Polygon (2.1.2, 3.1.1) */ static LWGEOM* parse_gml_polygon(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; int i, ring; LWGEOM *geom; xmlNodePtr xa, xb; POINTARRAY **ppa = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); if (xnode->children == NULL) return lwpoly_as_lwgeom(lwpoly_construct_empty(*root_srid, 0, 0)); parse_gml_srs(xnode, &srs); for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* Polygon/outerBoundaryIs -> GML 2.1.2 */ /* Polygon/exterior -> GML 3.1.1 */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "outerBoundaryIs") && strcmp((char *) xa->name, "exterior")) continue; for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xb, false)) continue; if (strcmp((char *) xb->name, "LinearRing")) continue; ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); ppa[0] = parse_gml_data(xb->children, hasz, root_srid); if (ppa[0]->npoints < 4 || (!*hasz && !ptarray_is_closed_2d(ppa[0])) || (*hasz && !ptarray_is_closed_3d(ppa[0]))) gml_lwerror("invalid GML representation", 43); if (srs.reverse_axis) ppa[0] = ptarray_flip_coordinates(ppa[0]); } } /* Found an <exterior> or <outerBoundaryIs> but no rings?!? We're outa here! */ if ( ! ppa ) gml_lwerror("invalid GML representation", 43); for (ring=1, xa = xnode->children ; xa != NULL ; xa = xa->next) { /* Polygon/innerBoundaryIs -> GML 2.1.2 */ /* Polygon/interior -> GML 3.1.1 */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "innerBoundaryIs") && strcmp((char *) xa->name, "interior")) continue; for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xb, false)) continue; if (strcmp((char *) xb->name, "LinearRing")) continue; ppa = (POINTARRAY**) lwrealloc((POINTARRAY *) ppa, sizeof(POINTARRAY*) * (ring + 1)); ppa[ring] = parse_gml_data(xb->children, hasz, root_srid); if (ppa[ring]->npoints < 4 || (!*hasz && !ptarray_is_closed_2d(ppa[ring])) || (*hasz && !ptarray_is_closed_3d(ppa[ring]))) gml_lwerror("invalid GML representation", 43); if (srs.reverse_axis) ppa[ring] = ptarray_flip_coordinates(ppa[ring]); ring++; } } /* Exterior Ring is mandatory */ if (ppa == NULL || ppa[0] == NULL) gml_lwerror("invalid GML representation", 44); if (srs.srid != *root_srid && *root_srid != SRID_UNKNOWN) { for (i=0 ; i < ring ; i++) gml_reproject_pa(ppa[i], srs.srid, *root_srid); } geom = (LWGEOM *) lwpoly_construct(*root_srid, NULL, ring, ppa); return geom; } /** * Parse GML Triangle (3.1.1) */ static LWGEOM* parse_gml_triangle(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; LWGEOM *geom; xmlNodePtr xa, xb; POINTARRAY *pa = NULL; xmlChar *interpolation=NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); if (xnode->children == NULL) return lwtriangle_as_lwgeom(lwtriangle_construct_empty(*root_srid, 0, 0)); /* GML SF is resticted to planar interpolation NOTA: I know Triangle is not part of SF, but we have to be consistent with other surfaces */ interpolation = gmlGetProp(xnode, (xmlChar *) "interpolation"); if (interpolation != NULL) { if (strcmp((char *) interpolation, "planar")) gml_lwerror("invalid GML representation", 45); xmlFree(interpolation); } parse_gml_srs(xnode, &srs); for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* Triangle/exterior */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "exterior")) continue; for (xb = xa->children ; xb != NULL ; xb = xb->next) { /* Triangle/exterior/LinearRing */ if (xb->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xb, false)) continue; if (strcmp((char *) xb->name, "LinearRing")) continue; pa = (POINTARRAY*) lwalloc(sizeof(POINTARRAY)); pa = parse_gml_data(xb->children, hasz, root_srid); if (pa->npoints != 4 || (!*hasz && !ptarray_is_closed_2d(pa)) || (*hasz && !ptarray_is_closed_3d(pa))) gml_lwerror("invalid GML representation", 46); if (srs.reverse_axis) pa = ptarray_flip_coordinates(pa); } } /* Exterior Ring is mandatory */ if (pa == NULL) gml_lwerror("invalid GML representation", 47); if (srs.srid != *root_srid && *root_srid != SRID_UNKNOWN) gml_reproject_pa(pa, srs.srid, *root_srid); geom = (LWGEOM *) lwtriangle_construct(*root_srid, NULL, pa); return geom; } /** * Parse GML PolygonPatch (3.1.1) */ static LWGEOM* parse_gml_patch(xmlNodePtr xnode, bool *hasz, int *root_srid) { xmlChar *interpolation=NULL; POINTARRAY **ppa=NULL; LWGEOM *geom=NULL; xmlNodePtr xa, xb; int i, ring=0; gmlSrs srs; /* PolygonPatch */ if (strcmp((char *) xnode->name, "PolygonPatch")) gml_lwerror("invalid GML representation", 48); /* GML SF is resticted to planar interpolation */ interpolation = gmlGetProp(xnode, (xmlChar *) "interpolation"); if (interpolation != NULL) { if (strcmp((char *) interpolation, "planar")) gml_lwerror("invalid GML representation", 48); xmlFree(interpolation); } parse_gml_srs(xnode, &srs); /* PolygonPatch/exterior */ for (xa = xnode->children ; xa != NULL ; xa = xa->next) { if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "exterior")) continue; /* PolygonPatch/exterior/LinearRing */ for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xb, false)) continue; if (strcmp((char *) xb->name, "LinearRing")) continue; ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); ppa[0] = parse_gml_data(xb->children, hasz, root_srid); if (ppa[0]->npoints < 4 || (!*hasz && !ptarray_is_closed_2d(ppa[0])) || (*hasz && !ptarray_is_closed_3d(ppa[0]))) gml_lwerror("invalid GML representation", 48); if (srs.reverse_axis) ppa[0] = ptarray_flip_coordinates(ppa[0]); } } /* Interior but no Exterior ! */ if ( ! ppa ) gml_lwerror("invalid GML representation", 48); /* PolygonPatch/interior */ for (ring=1, xa = xnode->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "interior")) continue; /* PolygonPatch/interior/LinearRing */ for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb->type != XML_ELEMENT_NODE) continue; if (strcmp((char *) xb->name, "LinearRing")) continue; ppa = (POINTARRAY**) lwrealloc((POINTARRAY *) ppa, sizeof(POINTARRAY*) * (ring + 1)); ppa[ring] = parse_gml_data(xb->children, hasz, root_srid); if (ppa[ring]->npoints < 4 || (!*hasz && !ptarray_is_closed_2d(ppa[ring])) || ( *hasz && !ptarray_is_closed_3d(ppa[ring]))) gml_lwerror("invalid GML representation", 49); if (srs.reverse_axis) ppa[ring] = ptarray_flip_coordinates(ppa[ring]); ring++; } } /* Exterior Ring is mandatory */ if (ppa == NULL || ppa[0] == NULL) gml_lwerror("invalid GML representation", 50); if (srs.srid != *root_srid && *root_srid != SRID_UNKNOWN) { for (i=0 ; i < ring ; i++) gml_reproject_pa(ppa[i], srs.srid, *root_srid); } geom = (LWGEOM *) lwpoly_construct(*root_srid, NULL, ring, ppa); return geom; } /** * Parse GML Surface (3.1.1) */ static LWGEOM* parse_gml_surface(xmlNodePtr xnode, bool *hasz, int *root_srid) { xmlNodePtr xa; int patch; LWGEOM *geom=NULL; bool found=false; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); /* Looking for gml:patches */ for (xa = xnode->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (!strcmp((char *) xa->name, "patches")) { found = true; break; } } if (!found) gml_lwerror("invalid GML representation", 51); /* Processing gml:PolygonPatch */ for (patch=0, xa = xa->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "PolygonPatch")) continue; patch++; /* SQL/MM define ST_CurvePolygon as a single patch only, cf ISO 13249-3:2009 -> 4.2.9 (p27) */ if (patch > 1) gml_lwerror("invalid GML representation", 52); geom = parse_gml_patch(xa, hasz, root_srid); } if (!patch) gml_lwerror("invalid GML representation", 53); return geom; } /** * Parse GML Tin (and TriangulatedSurface) (3.1.1) * * TODO handle also Tin attributes: * - stopLines * - breakLines * - maxLength * - position */ static LWGEOM* parse_gml_tin(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa; LWGEOM *geom=NULL; bool found=false; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(TINTYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; /* Looking for gml:patches or gml:trianglePatches */ for (xa = xnode->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (!strcmp((char *) xa->name, "patches") || !strcmp((char *) xa->name, "trianglePatches")) { found = true; break; } } if (!found) return geom; /* empty one */ /* Processing each gml:Triangle */ for (xa = xa->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "Triangle")) continue; if (xa->children != NULL) geom = (LWGEOM*) lwtin_add_lwtriangle((LWTIN *) geom, (LWTRIANGLE *) parse_gml_triangle(xa, hasz, root_srid)); } return geom; } /** * Parse gml:MultiPoint (2.1.2, 3.1.1) */ static LWGEOM* parse_gml_mpoint(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa, xb; LWGEOM *geom = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOINTTYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* MultiPoint/pointMember */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (!strcmp((char *) xa->name, "pointMembers")) { for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb != NULL) geom = (LWGEOM*)lwmpoint_add_lwpoint((LWMPOINT*)geom, (LWPOINT*)parse_gml(xb, hasz, root_srid)); } } else if (!strcmp((char *) xa->name, "pointMember")) { if (xa->children != NULL) geom = (LWGEOM*)lwmpoint_add_lwpoint((LWMPOINT*)geom, (LWPOINT*)parse_gml(xa->children, hasz, root_srid)); } } return geom; } /** * Parse gml:MultiLineString (2.1.2, 3.1.1) */ static LWGEOM* parse_gml_mline(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa; LWGEOM *geom = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(MULTILINETYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* MultiLineString/lineStringMember */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "lineStringMember")) continue; if (xa->children != NULL) geom = (LWGEOM*)lwmline_add_lwline((LWMLINE*)geom, (LWLINE*)parse_gml(xa->children, hasz, root_srid)); } return geom; } /** * Parse GML MultiCurve (3.1.1) */ static LWGEOM* parse_gml_mcurve(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa, xb; LWGEOM *geom = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(MULTILINETYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* MultiCurve/curveMember */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (!strcmp((char *) xa->name, "curveMembers")) { for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb != NULL) geom = (LWGEOM*)lwmline_add_lwline((LWMLINE*)geom, (LWLINE*)parse_gml(xb, hasz, root_srid)); } } else if (!strcmp((char *) xa->name, "curveMember")) { if (xa->children != NULL) geom = (LWGEOM*)lwmline_add_lwline((LWMLINE*)geom, (LWLINE*)parse_gml(xa->children, hasz, root_srid)); } } return geom; } /** * Parse GML MultiPolygon (2.1.2, 3.1.1) */ static LWGEOM* parse_gml_mpoly(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa; LWGEOM *geom = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOLYGONTYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* MultiPolygon/polygonMember */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "polygonMember")) continue; if (xa->children != NULL) geom = (LWGEOM*)lwmpoly_add_lwpoly((LWMPOLY*)geom, (LWPOLY*)parse_gml(xa->children, hasz, root_srid)); } return geom; } /** * Parse GML MultiSurface (3.1.1) */ static LWGEOM* parse_gml_msurface(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa, xb; LWGEOM *geom = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOLYGONTYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* MultiSurface/surfaceMember */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (!strcmp((char *) xa->name, "surfaceMembers")) { for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb != NULL) geom = (LWGEOM*)lwmpoly_add_lwpoly((LWMPOLY*)geom, (LWPOLY*)parse_gml(xb, hasz, root_srid)); } } else if (!strcmp((char *) xa->name, "surfaceMember")) { if (xa->children != NULL) geom = (LWGEOM*)lwmpoly_add_lwpoly((LWMPOLY*)geom, (LWPOLY*)parse_gml(xa->children, hasz, root_srid)); } } return geom; } /** * Parse GML PolyhedralSurface (3.1.1) * Nota: It's not part of SF-2 */ static LWGEOM* parse_gml_psurface(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa; bool found = false; LWGEOM *geom = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(POLYHEDRALSURFACETYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; /* Looking for gml:polygonPatches */ for (xa = xnode->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (!strcmp((char *) xa->name, "polygonPatches")) { found = true; break; } } if (!found) return geom; for (xa = xa->children ; xa != NULL ; xa = xa->next) { /* PolyhedralSurface/polygonPatches/PolygonPatch */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "PolygonPatch")) continue; geom = (LWGEOM*)lwpsurface_add_lwpoly((LWPSURFACE*)geom, (LWPOLY*)parse_gml_patch(xa, hasz, root_srid)); } return geom; } /** * Parse GML MultiGeometry (2.1.2, 3.1.1) */ static LWGEOM* parse_gml_coll(xmlNodePtr xnode, bool *hasz, int *root_srid) { gmlSrs srs; xmlNodePtr xa; LWGEOM *geom = NULL; if (is_xlink(xnode)) xnode = get_xlink_node(xnode); parse_gml_srs(xnode, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) *root_srid = srs.srid; geom = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, *root_srid, 1, 0); if (xnode->children == NULL) return geom; for (xa = xnode->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_gml_namespace(xa, false)) continue; /* * In GML 2.1.2 pointMember, lineStringMember and * polygonMember are parts of geometryMember * substitution group */ if ( !strcmp((char *) xa->name, "pointMember") || !strcmp((char *) xa->name, "lineStringMember") || !strcmp((char *) xa->name, "polygonMember") || !strcmp((char *) xa->name, "geometryMember")) { if (xa->children == NULL) break; geom = (LWGEOM*)lwcollection_add_lwgeom((LWCOLLECTION *)geom, parse_gml(xa->children, hasz, root_srid)); } } return geom; } /** * Read GML */ static LWGEOM* lwgeom_from_gml(const char* xml) { xmlDocPtr xmldoc; xmlNodePtr xmlroot=NULL; int xml_size = strlen(xml); LWGEOM *lwgeom; bool hasz=true; int root_srid=SRID_UNKNOWN; /* Begin to Parse XML doc */ xmlInitParser(); xmldoc = xmlReadMemory(xml, xml_size, NULL, NULL, XML_PARSE_SAX1); if (!xmldoc || (xmlroot = xmlDocGetRootElement(xmldoc)) == NULL) { xmlFreeDoc(xmldoc); xmlCleanupParser(); gml_lwerror("invalid GML representation", 1); } lwgeom = parse_gml(xmlroot, &hasz, &root_srid); xmlFreeDoc(xmldoc); xmlCleanupParser(); /* shouldn't we be releasing xmldoc too here ? */ if ( root_srid != SRID_UNKNOWN ) lwgeom->srid = root_srid; /* Should we really do this here ? */ lwgeom_add_bbox(lwgeom); /* GML geometries could be either 2 or 3D and can be nested mixed. * Missing Z dimension is even tolerated inside some GML coords * * So we deal with 3D in all structures allocation, and flag hasz * to false if we met once a missing Z dimension * In this case, we force recursive 2D. */ if (!hasz) { LWGEOM *tmp = lwgeom_force_2d(lwgeom); lwgeom_free(lwgeom); lwgeom = tmp; } return lwgeom; } /** * Parse GML */ static LWGEOM* parse_gml(xmlNodePtr xnode, bool *hasz, int *root_srid) { xmlNodePtr xa = xnode; gmlSrs srs; while (xa != NULL && (xa->type != XML_ELEMENT_NODE || !is_gml_namespace(xa, false))) xa = xa->next; if (xa == NULL) gml_lwerror("invalid GML representation", 55); parse_gml_srs(xa, &srs); if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN) { *root_srid = srs.srid; } if (!strcmp((char *) xa->name, "Point")) return parse_gml_point(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "LineString")) return parse_gml_line(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "Curve")) return parse_gml_curve(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "LinearRing")) return parse_gml_linearring(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "Polygon")) return parse_gml_polygon(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "Triangle")) return parse_gml_triangle(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "Surface")) return parse_gml_surface(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "MultiPoint")) return parse_gml_mpoint(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "MultiLineString")) return parse_gml_mline(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "MultiCurve")) return parse_gml_mcurve(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "MultiPolygon")) return parse_gml_mpoly(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "MultiSurface")) return parse_gml_msurface(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "PolyhedralSurface")) return parse_gml_psurface(xa, hasz, root_srid); if ((!strcmp((char *) xa->name, "Tin")) || !strcmp((char *) xa->name, "TriangulatedSurface" )) return parse_gml_tin(xa, hasz, root_srid); if (!strcmp((char *) xa->name, "MultiGeometry")) return parse_gml_coll(xa, hasz, root_srid); gml_lwerror("invalid GML representation", 56); return NULL; /* Never reach */ } ���������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_export.h�����������������������������������������������������0000644�0000000�0000000�00000001053�11722777314�020326� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_export.h 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Export functions for PostgreSQL/PostGIS * Copyright 2009 Olivier Courtin <olivier.courtin@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ char * getSRSbySRID(int SRID, bool short_crs); int getSRIDbySRS(const char* SRS); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_geos_prepared.h����������������������������������������������0000644�0000000�0000000�00000004734�11767664401�021636� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_geos_prepared.h 9929 2012-06-18 17:44:33Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef LWGEOM_GEOS_PREPARED_H_ #define LWGEOM_GEOS_PREPARED_H_ 1 #include "postgres.h" #include "fmgr.h" #include "miscadmin.h" #include "utils/hsearch.h" #include "utils/memutils.h" #include "access/hash.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "lwgeom_geos.h" /* * Cache structure. We use GSERIALIZED as keys so no transformations * are needed before we memcmp them with other keys. We store the * size to avoid having to calculate the size every time. * The argnum gives the number of function arguments we are caching. * Intersects requires that both arguments be checked for cacheability, * while Contains only requires that the containing argument be checked. * Both the Geometry and the PreparedGeometry have to be cached, * because the PreparedGeometry contains a reference to the geometry. * * Note that the first 6 entries are part of the common GeomCache * structure and have to remain in order to allow the overall caching * system to share code (the cache checking code is common between * prepared geometry, circtrees, recttrees, and rtrees). */ typedef struct { int type; // <GeomCache> GSERIALIZED* geom1; // GSERIALIZED* geom2; // size_t geom1_size; // size_t geom2_size; // int32 argnum; // </GeomCache> MemoryContext context_statement; MemoryContext context_callback; const GEOSPreparedGeometry* prepared_geom; const GEOSGeometry* geom; } PrepGeomCache; /* ** Get the current cache, given the input geometries. ** Function will create cache if none exists, and prepare geometries in ** cache if necessary, or pull an existing cache if possible. ** ** If you are only caching one argument (e.g., in contains) supply 0 as the ** value for pg_geom2. */ PrepGeomCache *GetPrepGeomCache(FunctionCallInfoData *fcinfo, GSERIALIZED *pg_geom1, GSERIALIZED *pg_geom2); #endif /* LWGEOM_GEOS_PREPARED_H_ */ ������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_rtree.h������������������������������������������������������0000644�0000000�0000000�00000003010�11767660566�020132� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _LWGEOM_RTREE_H #define _LWGEOM_RTREE_H 1 #include "liblwgeom.h" /** * Representation for the y-axis interval spanned by an edge. */ typedef struct { double min; double max; } RTREE_INTERVAL; /** * The following struct and methods are used for a 1D RTree implementation, * described at: * http://lin-ear-th-inking.blogspot.com/2007/06/packed-1-dimensional-r-tree.html */ typedef struct rtree_node { RTREE_INTERVAL *interval; struct rtree_node *leftNode; struct rtree_node *rightNode; LWLINE *segment; } RTREE_NODE; /** * The tree structure used for fast P-i-P tests by point_in_multipolygon_rtree() */ typedef struct { RTREE_NODE **ringIndices; int* ringCounts; int polyCount; } RTREE_POLY_CACHE; typedef struct { int type; // <GeomCache> GSERIALIZED* geom1; // GSERIALIZED* geom2; // size_t geom1_size; // size_t geom2_size; // int32 argnum; // </GeomCache> RTREE_POLY_CACHE* index; } RTreeGeomCache; /** * Retrieves a collection of line segments given the root and crossing value. */ LWMLINE *RTreeFindLineSegments(RTREE_NODE *root, double value); /** * Checks for a cache hit against the provided geometry and returns * a pre-built index structure (RTREE_POLY_CACHE) if one exists. Otherwise * builds a new one and returns that. */ RTREE_POLY_CACHE* GetRtreeCache(FunctionCallInfoData* fcinfo, GSERIALIZED* g1); #endif /* !defined _LWGEOM_RTREE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_sfcgal.c�����������������������������������������������������0000644�0000000�0000000�00000032017�12143150067�020227� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Wrapper around SFCGAL for 3D functions * * Copyright 2012-2013 Oslandia <infos@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "../liblwgeom/liblwgeom.h" #include "lwgeom_pg.h" #include "lwgeom_sfcgal.h" Datum postgis_sfcgal_version(PG_FUNCTION_ARGS); Datum sfcgal_from_ewkt(PG_FUNCTION_ARGS); Datum sfcgal_distance(PG_FUNCTION_ARGS); Datum sfcgal_distance3D(PG_FUNCTION_ARGS); Datum sfcgal_area(PG_FUNCTION_ARGS); Datum sfcgal_area3D(PG_FUNCTION_ARGS); Datum sfcgal_intersects(PG_FUNCTION_ARGS); Datum sfcgal_intersects3D(PG_FUNCTION_ARGS); Datum sfcgal_intersection(PG_FUNCTION_ARGS); Datum sfcgal_intersection3D(PG_FUNCTION_ARGS); Datum sfcgal_extrude(PG_FUNCTION_ARGS); Datum sfcgal_straight_skeleton(PG_FUNCTION_ARGS); Datum sfcgal_is_planar(PG_FUNCTION_ARGS); Datum sfcgal_orientation(PG_FUNCTION_ARGS); Datum sfcgal_force_lhr(PG_FUNCTION_ARGS); Datum sfcgal_triangulate(PG_FUNCTION_ARGS); Datum sfcgal_tesselate(PG_FUNCTION_ARGS); Datum sfcgal_minkowski_sum(PG_FUNCTION_ARGS); GSERIALIZED *geometry_serialize(LWGEOM *lwgeom); char* text2cstring(const text *textptr); static int __sfcgal_init = 0; void sfcgal_postgis_init(void) { if ( ! __sfcgal_init ) { sfcgal_init(); sfcgal_set_error_handlers((sfcgal_error_handler_t) lwnotice, (sfcgal_error_handler_t) lwerror); sfcgal_set_alloc_handlers(lwalloc, lwfree); __sfcgal_init = 1; } } /* Conversion from GSERIALIZED* to SFCGAL::Geometry */ sfcgal_geometry_t* POSTGIS2SFCGALGeometry(GSERIALIZED *pglwgeom) { sfcgal_geometry_t* g; LWGEOM *lwgeom = lwgeom_from_gserialized(pglwgeom); if (! lwgeom) { lwerror("POSTGIS2SFCGALGeometry: Unable to deserialize input"); } g = LWGEOM2SFCGAL(lwgeom); lwgeom_free(lwgeom); return g; } /* Conversion from GSERIALIZED* to SFCGAL::PreparedGeometry */ sfcgal_prepared_geometry_t* POSTGIS2SFCGALPreparedGeometry(GSERIALIZED *pglwgeom) { sfcgal_geometry_t* g; LWGEOM *lwgeom = lwgeom_from_gserialized(pglwgeom); if (!lwgeom) { lwerror("POSTGIS2SFCGALPreparedGeometry: Unable to deserialize input"); } g = LWGEOM2SFCGAL(lwgeom); lwgeom_free(lwgeom); return sfcgal_prepared_geometry_create_from_geometry(g, gserialized_get_srid(pglwgeom)); } /* Conversion from SFCGAL::Geometry to GSERIALIZED */ GSERIALIZED* SFCGALGeometry2POSTGIS(const sfcgal_geometry_t* geom, int force3D, int SRID) { GSERIALIZED *result; LWGEOM* lwgeom = SFCGAL2LWGEOM(geom, force3D, SRID); if (lwgeom_needs_bbox(lwgeom) == LW_TRUE) lwgeom_add_bbox(lwgeom); result = geometry_serialize(lwgeom); lwgeom_free(lwgeom); return result; } /* Conversion from SFCGAL::PreparedGeometry to GSERIALIZED */ GSERIALIZED* SFCGALPreparedGeometry2POSTGIS(const sfcgal_prepared_geometry_t* geom, int force3D) { return SFCGALGeometry2POSTGIS(sfcgal_prepared_geometry_geometry(geom), force3D, sfcgal_prepared_geometry_srid(geom)); } /* Conversion from EWKT to GSERIALIZED */ PG_FUNCTION_INFO_V1(sfcgal_from_ewkt); Datum sfcgal_from_ewkt(PG_FUNCTION_ARGS) { GSERIALIZED* result; sfcgal_prepared_geometry_t* g; text *wkttext = PG_GETARG_TEXT_P(0); char *cstring = text2cstring(wkttext); sfcgal_postgis_init(); g = sfcgal_io_read_ewkt( cstring, strlen(cstring) ); result = SFCGALPreparedGeometry2POSTGIS( g, 0 ); sfcgal_prepared_geometry_delete( g ); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(sfcgal_area); Datum sfcgal_area(PG_FUNCTION_ARGS) { GSERIALIZED *input; sfcgal_geometry_t *geom; double result; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_area(geom); sfcgal_geometry_delete(geom); PG_FREE_IF_COPY(input, 0); PG_RETURN_FLOAT8(result); } PG_FUNCTION_INFO_V1(sfcgal_area3D); Datum sfcgal_area3D(PG_FUNCTION_ARGS) { GSERIALIZED *input; sfcgal_geometry_t *geom; double result; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_area_3d(geom); sfcgal_geometry_delete(geom); PG_FREE_IF_COPY(input, 0); PG_RETURN_FLOAT8(result); } PG_FUNCTION_INFO_V1(sfcgal_is_planar); Datum sfcgal_is_planar(PG_FUNCTION_ARGS) { GSERIALIZED *input; sfcgal_geometry_t *geom; int result; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_is_planar(geom); sfcgal_geometry_delete(geom); PG_FREE_IF_COPY(input, 0); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(sfcgal_orientation); Datum sfcgal_orientation(PG_FUNCTION_ARGS) { GSERIALIZED *input; sfcgal_geometry_t *geom; int result; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_orientation(geom); sfcgal_geometry_delete(geom); PG_FREE_IF_COPY(input, 0); PG_RETURN_INT32(result); } PG_FUNCTION_INFO_V1(sfcgal_intersects); Datum sfcgal_intersects(PG_FUNCTION_ARGS) { GSERIALIZED *input0, *input1; sfcgal_geometry_t *geom0, *geom1; int result; sfcgal_postgis_init(); input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); PG_FREE_IF_COPY(input1, 1); result = sfcgal_geometry_intersects(geom0, geom1); sfcgal_geometry_delete(geom0); sfcgal_geometry_delete(geom1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(sfcgal_intersects3D); Datum sfcgal_intersects3D(PG_FUNCTION_ARGS) { GSERIALIZED *input0, *input1; sfcgal_geometry_t *geom0, *geom1; int result; sfcgal_postgis_init(); input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); PG_FREE_IF_COPY(input1, 1); result = sfcgal_geometry_intersects_3d(geom0, geom1); sfcgal_geometry_delete(geom0); sfcgal_geometry_delete(geom1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(sfcgal_distance); Datum sfcgal_distance(PG_FUNCTION_ARGS) { GSERIALIZED *input0, *input1; sfcgal_geometry_t *geom0, *geom1; double result; sfcgal_postgis_init(); input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); PG_FREE_IF_COPY(input1, 1); result = sfcgal_geometry_distance(geom0, geom1); sfcgal_geometry_delete(geom0); sfcgal_geometry_delete(geom1); PG_RETURN_FLOAT8(result); } PG_FUNCTION_INFO_V1(sfcgal_distance3D); Datum sfcgal_distance3D(PG_FUNCTION_ARGS) { GSERIALIZED *input0, *input1; sfcgal_geometry_t *geom0, *geom1; double result; sfcgal_postgis_init(); input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); PG_FREE_IF_COPY(input1, 1); result = sfcgal_geometry_distance_3d(geom0, geom1); sfcgal_geometry_delete(geom0); sfcgal_geometry_delete(geom1); PG_RETURN_FLOAT8(result); } PG_FUNCTION_INFO_V1(sfcgal_tesselate); Datum sfcgal_tesselate(PG_FUNCTION_ARGS) { GSERIALIZED *input, *output; sfcgal_geometry_t *geom; sfcgal_geometry_t *result; srid_t srid; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); result = sfcgal_geometry_tesselate(geom); sfcgal_geometry_delete(geom); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(sfcgal_triangulate); Datum sfcgal_triangulate(PG_FUNCTION_ARGS) { GSERIALIZED *input, *output; sfcgal_geometry_t *geom; sfcgal_geometry_t *result; srid_t srid; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); result = sfcgal_geometry_triangulate_2dz(geom); sfcgal_geometry_delete(geom); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(sfcgal_force_lhr); Datum sfcgal_force_lhr(PG_FUNCTION_ARGS) { GSERIALIZED *input, *output; sfcgal_geometry_t *geom; sfcgal_geometry_t *result; srid_t srid; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); result = sfcgal_geometry_force_lhr(geom); sfcgal_geometry_delete(geom); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(sfcgal_straight_skeleton); Datum sfcgal_straight_skeleton(PG_FUNCTION_ARGS) { GSERIALIZED *input, *output; sfcgal_geometry_t *geom; sfcgal_geometry_t *result; srid_t srid; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); result = sfcgal_geometry_straight_skeleton(geom); sfcgal_geometry_delete(geom); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(sfcgal_intersection); Datum sfcgal_intersection(PG_FUNCTION_ARGS) { GSERIALIZED *input0, *input1, *output; sfcgal_geometry_t *geom0, *geom1; sfcgal_geometry_t *result; srid_t srid; sfcgal_postgis_init(); input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input0); input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); PG_FREE_IF_COPY(input1, 1); result = sfcgal_geometry_intersection(geom0, geom1); sfcgal_geometry_delete(geom0); sfcgal_geometry_delete(geom1); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(sfcgal_intersection3D); Datum sfcgal_intersection3D(PG_FUNCTION_ARGS) { GSERIALIZED *input0, *input1, *output; sfcgal_geometry_t *geom0, *geom1; sfcgal_geometry_t *result; srid_t srid; sfcgal_postgis_init(); input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input0); input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); PG_FREE_IF_COPY(input1, 1); result = sfcgal_geometry_intersection_3d(geom0, geom1); sfcgal_geometry_delete(geom0); sfcgal_geometry_delete(geom1); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(sfcgal_minkowski_sum); Datum sfcgal_minkowski_sum(PG_FUNCTION_ARGS) { GSERIALIZED *input0, *input1, *output; sfcgal_geometry_t *geom0, *geom1; sfcgal_geometry_t *result; srid_t srid; sfcgal_postgis_init(); input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input0); input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); PG_FREE_IF_COPY(input1, 1); result = sfcgal_geometry_minkowski_sum(geom0, geom1); sfcgal_geometry_delete(geom0); sfcgal_geometry_delete(geom1); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(sfcgal_extrude); Datum sfcgal_extrude(PG_FUNCTION_ARGS) { GSERIALIZED *input, *output; sfcgal_geometry_t *geom; sfcgal_geometry_t *result; double dx, dy, dz; srid_t srid; sfcgal_postgis_init(); input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); dx = PG_GETARG_FLOAT8(1); dy = PG_GETARG_FLOAT8(2); dz = PG_GETARG_FLOAT8(3); result = sfcgal_geometry_extrude(geom, dx, dy, dz); sfcgal_geometry_delete(geom); output = SFCGALGeometry2POSTGIS(result, 0, srid); sfcgal_geometry_delete(result); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(postgis_sfcgal_version); Datum postgis_sfcgal_version(PG_FUNCTION_ARGS) { const char *ver = lwgeom_sfcgal_version(); text *result = cstring2text(ver); PG_RETURN_POINTER(result); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_ogc.c��������������������������������������������������������0000644�0000000�0000000�00000055777�12153720740�017564� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_ogc.c 11528 2013-06-05 20:38:56Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include "access/gist.h" #include "access/itup.h" #include "fmgr.h" #include "utils/elog.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" /* ---- SRID(geometry) */ Datum LWGEOM_get_srid(PG_FUNCTION_ARGS); /* ---- SetSRID(geometry, integer) */ Datum LWGEOM_set_srid(PG_FUNCTION_ARGS); /* ---- GeometryType(geometry) */ Datum LWGEOM_getTYPE(PG_FUNCTION_ARGS); Datum geometry_geometrytype(PG_FUNCTION_ARGS); /* ---- NumPoints(geometry) */ Datum LWGEOM_numpoints_linestring(PG_FUNCTION_ARGS); /* ---- NumGeometries(geometry) */ Datum LWGEOM_numgeometries_collection(PG_FUNCTION_ARGS); /* ---- GeometryN(geometry, integer) */ Datum LWGEOM_geometryn_collection(PG_FUNCTION_ARGS); /* ---- Dimension(geometry) */ Datum LWGEOM_dimension(PG_FUNCTION_ARGS); /* ---- ExteriorRing(geometry) */ Datum LWGEOM_exteriorring_polygon(PG_FUNCTION_ARGS); /* ---- InteriorRingN(geometry, integer) */ Datum LWGEOM_interiorringn_polygon(PG_FUNCTION_ARGS); /* ---- NumInteriorRings(geometry) */ Datum LWGEOM_numinteriorrings_polygon(PG_FUNCTION_ARGS); /* ---- PointN(geometry, integer) */ Datum LWGEOM_pointn_linestring(PG_FUNCTION_ARGS); /* ---- X(geometry) */ Datum LWGEOM_x_point(PG_FUNCTION_ARGS); /* ---- Y(geometry) */ Datum LWGEOM_y_point(PG_FUNCTION_ARGS); /* ---- Z(geometry) */ Datum LWGEOM_z_point(PG_FUNCTION_ARGS); /* ---- M(geometry) */ Datum LWGEOM_m_point(PG_FUNCTION_ARGS); /* ---- StartPoint(geometry) */ Datum LWGEOM_startpoint_linestring(PG_FUNCTION_ARGS); /* ---- EndPoint(geometry) */ Datum LWGEOM_endpoint_linestring(PG_FUNCTION_ARGS); /* ---- AsText(geometry) */ Datum LWGEOM_asText(PG_FUNCTION_ARGS); /* ---- AsBinary(geometry, [XDR|NDR]) */ Datum LWGEOM_asBinary(PG_FUNCTION_ARGS); /* ---- GeometryFromText(text, integer) */ Datum LWGEOM_from_text(PG_FUNCTION_ARGS); /* ---- GeomFromWKB(bytea, integer) */ Datum LWGEOM_from_WKB(PG_FUNCTION_ARGS); /* ---- IsClosed(geometry) */ Datum LWGEOM_isclosed(PG_FUNCTION_ARGS); /*------------------------------------------------------------------*/ /* getSRID(lwgeom) :: int4 */ PG_FUNCTION_INFO_V1(LWGEOM_get_srid); Datum LWGEOM_get_srid(PG_FUNCTION_ARGS) { GSERIALIZED *geom=(GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); int srid = gserialized_get_srid (geom); PG_FREE_IF_COPY(geom,0); PG_RETURN_INT32(srid); } /* setSRID(lwgeom, int4) :: lwgeom */ PG_FUNCTION_INFO_V1(LWGEOM_set_srid); Datum LWGEOM_set_srid(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); int srid = PG_GETARG_INT32(1); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); lwgeom_set_srid(lwgeom, srid); result = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /* returns a string representation of this geometry's type */ PG_FUNCTION_INFO_V1(LWGEOM_getTYPE); Datum LWGEOM_getTYPE(PG_FUNCTION_ARGS) { GSERIALIZED *lwgeom; char *text_ob; char *result; int32 size; uint8_t type; lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); text_ob = lwalloc(20+VARHDRSZ); result = text_ob+VARHDRSZ; type = gserialized_get_type(lwgeom); memset(VARDATA(text_ob), 0, 20); if (type == POINTTYPE) strcpy(result,"POINT"); else if (type == MULTIPOINTTYPE) strcpy(result,"MULTIPOINT"); else if (type == LINETYPE) strcpy(result,"LINESTRING"); else if (type == CIRCSTRINGTYPE) strcpy(result,"CIRCULARSTRING"); else if (type == COMPOUNDTYPE) strcpy(result, "COMPOUNDCURVE"); else if (type == MULTILINETYPE) strcpy(result,"MULTILINESTRING"); else if (type == MULTICURVETYPE) strcpy(result, "MULTICURVE"); else if (type == POLYGONTYPE) strcpy(result,"POLYGON"); else if (type == TRIANGLETYPE) strcpy(result,"TRIANGLE"); else if (type == CURVEPOLYTYPE) strcpy(result,"CURVEPOLYGON"); else if (type == MULTIPOLYGONTYPE) strcpy(result,"MULTIPOLYGON"); else if (type == MULTISURFACETYPE) strcpy(result, "MULTISURFACE"); else if (type == COLLECTIONTYPE) strcpy(result,"GEOMETRYCOLLECTION"); else if (type == POLYHEDRALSURFACETYPE) strcpy(result,"POLYHEDRALSURFACE"); else if (type == TINTYPE) strcpy(result,"TIN"); else strcpy(result,"UNKNOWN"); if ( gserialized_has_m(lwgeom) && ! gserialized_has_z(lwgeom) ) strcat(result, "M"); size = strlen(result) + VARHDRSZ ; SET_VARSIZE(text_ob, size); /* size of string */ PG_FREE_IF_COPY(lwgeom, 0); PG_RETURN_POINTER(text_ob); } /* returns a string representation of this geometry's type */ PG_FUNCTION_INFO_V1(geometry_geometrytype); Datum geometry_geometrytype(PG_FUNCTION_ARGS) { GSERIALIZED *lwgeom; text *type_text; char *type_str = palloc(32); lwgeom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Make it empty string to start */ *type_str = 0; /* Build up the output string */ strncat(type_str, "ST_", 32); strncat(type_str, lwtype_name(gserialized_get_type(lwgeom)), 32); /* Build a text type to store things in */ type_text = cstring2text(type_str); pfree(type_str); PG_FREE_IF_COPY(lwgeom, 0); PG_RETURN_TEXT_P(type_text); } /** * numpoints(LINESTRING) -- return the number of points in the * linestring, or NULL if it is not a linestring */ PG_FUNCTION_INFO_V1(LWGEOM_numpoints_linestring); Datum LWGEOM_numpoints_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int count = -1; if ( lwgeom->type == LINETYPE || lwgeom->type == CIRCSTRINGTYPE ) count = lwgeom_count_vertices(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); /* OGC says this functions is only valid on LINESTRING */ if ( count < 0 ) PG_RETURN_NULL(); PG_RETURN_INT32(count); } PG_FUNCTION_INFO_V1(LWGEOM_numgeometries_collection); Datum LWGEOM_numgeometries_collection(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom; int32 ret = 1; lwgeom = lwgeom_from_gserialized(geom); if ( lwgeom_is_empty(lwgeom) ) { ret = 0; } else if ( lwgeom_is_collection(lwgeom) ) { LWCOLLECTION *col = lwgeom_as_lwcollection(lwgeom); ret = col->ngeoms; } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_INT32(ret); } /** 1-based offset */ PG_FUNCTION_INFO_V1(LWGEOM_geometryn_collection); Datum LWGEOM_geometryn_collection(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; int type = gserialized_get_type(geom); int32 idx; LWCOLLECTION *coll; LWGEOM *subgeom; POSTGIS_DEBUG(2, "LWGEOM_geometryn_collection called."); /* elog(NOTICE, "GeometryN called"); */ idx = PG_GETARG_INT32(1); idx -= 1; /* index is 1-based */ /* call is valid on multi* geoms only */ if (type==POINTTYPE || type==LINETYPE || type==CIRCSTRINGTYPE || type==COMPOUNDTYPE || type==POLYGONTYPE || type==CURVEPOLYTYPE || type==TRIANGLETYPE) { if ( idx == 0 ) PG_RETURN_POINTER(geom); PG_RETURN_NULL(); } coll = lwgeom_as_lwcollection(lwgeom_from_gserialized(geom)); if ( idx < 0 ) PG_RETURN_NULL(); if ( idx >= coll->ngeoms ) PG_RETURN_NULL(); subgeom = coll->geoms[idx]; subgeom->srid = coll->srid; /* COMPUTE_BBOX==TAINTING */ if ( coll->bbox ) lwgeom_add_bbox(subgeom); result = geometry_serialize(subgeom); lwcollection_free(coll); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /** @brief * returns 0 for points, 1 for lines, 2 for polygons, 3 for volume. * returns max dimension for a collection. */ PG_FUNCTION_INFO_V1(LWGEOM_dimension); Datum LWGEOM_dimension(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int dimension = -1; dimension = lwgeom_dimension(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); if ( dimension < 0 ) { elog(NOTICE, "Could not compute geometry dimensions"); PG_RETURN_NULL(); } PG_RETURN_INT32(dimension); } /** * exteriorRing(GEOMETRY) -- find the first polygon in GEOMETRY * @return its exterior ring (as a linestring). * Return NULL if there is no POLYGON(..) in (first level of) GEOMETRY. */ PG_FUNCTION_INFO_V1(LWGEOM_exteriorring_polygon); Datum LWGEOM_exteriorring_polygon(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; POINTARRAY *extring; LWGEOM *lwgeom; LWLINE *line; GBOX *bbox=NULL; int type = gserialized_get_type(geom); POSTGIS_DEBUG(2, "LWGEOM_exteriorring_polygon called."); if ( (type != POLYGONTYPE) && (type != CURVEPOLYTYPE) && (type != TRIANGLETYPE)) { elog(ERROR, "ExteriorRing: geom is not a polygon"); PG_RETURN_NULL(); } lwgeom = lwgeom_from_gserialized(geom); if( lwgeom_is_empty(lwgeom) ) { line = lwline_construct_empty(lwgeom->srid, lwgeom_has_z(lwgeom), lwgeom_has_m(lwgeom)); result = geometry_serialize(lwline_as_lwgeom(line)); } else if ( lwgeom->type == POLYGONTYPE ) { LWPOLY *poly = lwgeom_as_lwpoly(lwgeom); /* Ok, now we have a polygon. Here is its exterior ring. */ extring = poly->rings[0]; /* * This is a LWLINE constructed by exterior ring POINTARRAY * If the input geom has a bbox, use it for * the output geom, as exterior ring makes it up ! */ if ( poly->bbox ) bbox = gbox_copy(poly->bbox); line = lwline_construct(poly->srid, bbox, extring); result = geometry_serialize((LWGEOM *)line); lwgeom_release((LWGEOM *)line); } else if ( lwgeom->type == TRIANGLETYPE ) { LWTRIANGLE *triangle = lwgeom_as_lwtriangle(lwgeom); /* * This is a LWLINE constructed by exterior ring POINTARRAY * If the input geom has a bbox, use it for * the output geom, as exterior ring makes it up ! */ if ( triangle->bbox ) bbox = gbox_copy(triangle->bbox); line = lwline_construct(triangle->srid, bbox, triangle->points); result = geometry_serialize((LWGEOM *)line); lwgeom_release((LWGEOM *)line); } else { LWCURVEPOLY *curvepoly = lwgeom_as_lwcurvepoly(lwgeom); result = geometry_serialize(curvepoly->rings[0]); } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /** * NumInteriorRings(GEOMETRY) defined for Polygon and * and CurvePolygon. * * @return the number of its interior rings (holes). NULL if not a polygon. */ PG_FUNCTION_INFO_V1(LWGEOM_numinteriorrings_polygon); Datum LWGEOM_numinteriorrings_polygon(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOLY *poly = NULL; LWCURVEPOLY *curvepoly = NULL; int result = -1; if ( lwgeom->type == POLYGONTYPE ) { poly = lwgeom_as_lwpoly(lwgeom); result = poly->nrings - 1; } else if ( lwgeom->type == CURVEPOLYTYPE ) { curvepoly = lwgeom_as_lwcurvepoly(lwgeom); result = curvepoly->nrings - 1; } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); if ( result < 0 ) PG_RETURN_NULL(); PG_RETURN_INT32(result); } /** * InteriorRingN(GEOMETRY) -- find the first polygon in GEOMETRY, Index is 1-based. * @return its Nth interior ring (as a linestring). * Return NULL if there is no POLYGON(..) in (first level of) GEOMETRY. * */ PG_FUNCTION_INFO_V1(LWGEOM_interiorringn_polygon); Datum LWGEOM_interiorringn_polygon(PG_FUNCTION_ARGS) { GSERIALIZED *geom; int32 wanted_index; LWCURVEPOLY *curvepoly = NULL; LWPOLY *poly = NULL; POINTARRAY *ring; LWLINE *line; LWGEOM *lwgeom; GSERIALIZED *result; GBOX *bbox = NULL; int type; POSTGIS_DEBUG(2, "LWGEOM_interierringn_polygon called."); wanted_index = PG_GETARG_INT32(1); if ( wanted_index < 1 ) { /* elog(ERROR, "InteriorRingN: ring number is 1-based"); */ PG_RETURN_NULL(); /* index out of range */ } geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); type = gserialized_get_type(geom); if ( (type != POLYGONTYPE) && (type != CURVEPOLYTYPE) ) { elog(ERROR, "InteriorRingN: geom is not a polygon"); PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } lwgeom = lwgeom_from_gserialized(geom); if( lwgeom_is_empty(lwgeom) ) { lwpoly_free(poly); PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } if ( type == POLYGONTYPE) { poly = lwgeom_as_lwpoly(lwgeom_from_gserialized(geom)); /* Ok, now we have a polygon. Let's see if it has enough holes */ if ( wanted_index >= poly->nrings ) { lwpoly_free(poly); PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } ring = poly->rings[wanted_index]; /* COMPUTE_BBOX==TAINTING */ if ( poly->bbox ) { bbox = lwalloc(sizeof(GBOX)); ptarray_calculate_gbox_cartesian(ring, bbox); } /* This is a LWLINE constructed by interior ring POINTARRAY */ line = lwline_construct(poly->srid, bbox, ring); result = geometry_serialize((LWGEOM *)line); lwline_release(line); lwpoly_free(poly); } else { curvepoly = lwgeom_as_lwcurvepoly(lwgeom_from_gserialized(geom)); if (wanted_index >= curvepoly->nrings) { PG_FREE_IF_COPY(geom, 0); lwgeom_release((LWGEOM *)curvepoly); PG_RETURN_NULL(); } result = geometry_serialize(curvepoly->rings[wanted_index]); lwgeom_free((LWGEOM*)curvepoly); } PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /** * PointN(GEOMETRY,INTEGER) -- find the first linestring in GEOMETRY, * @return the point at index INTEGER (1 is 1st point). Return NULL if * there is no LINESTRING(..) in GEOMETRY or INTEGER is out of bounds. */ PG_FUNCTION_INFO_V1(LWGEOM_pointn_linestring); Datum LWGEOM_pointn_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); int where = PG_GETARG_INT32(1); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOINT *lwpoint = NULL; int type = lwgeom->type; /* Can't handle crazy index! */ if ( where < 1 ) PG_RETURN_NULL(); if ( type == LINETYPE || type == CIRCSTRINGTYPE ) { /* OGC index starts at one, so we substract first. */ lwpoint = lwline_get_lwpoint((LWLINE*)lwgeom, where - 1); } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); if ( ! lwpoint ) PG_RETURN_NULL(); PG_RETURN_POINTER(geometry_serialize(lwpoint_as_lwgeom(lwpoint))); } /** * X(GEOMETRY) -- return X value of the point. * @return an error if input is not a point. */ PG_FUNCTION_INFO_V1(LWGEOM_x_point); Datum LWGEOM_x_point(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; LWPOINT *point = NULL; POINT2D p; geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to X() must be a point"); lwgeom = lwgeom_from_gserialized(geom); point = lwgeom_as_lwpoint(lwgeom); if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); getPoint2d_p(point->point, 0, &p); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(p.x); } /** * Y(GEOMETRY) -- return Y value of the point. * Raise an error if input is not a point. */ PG_FUNCTION_INFO_V1(LWGEOM_y_point); Datum LWGEOM_y_point(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWPOINT *point = NULL; LWGEOM *lwgeom; POINT2D p; geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to Y() must be a point"); lwgeom = lwgeom_from_gserialized(geom); point = lwgeom_as_lwpoint(lwgeom); if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); getPoint2d_p(point->point, 0, &p); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(p.y); } /** * Z(GEOMETRY) -- return Z value of the point. * @return NULL if there is no Z in the point. * Raise an error if input is not a point. */ PG_FUNCTION_INFO_V1(LWGEOM_z_point); Datum LWGEOM_z_point(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWPOINT *point = NULL; LWGEOM *lwgeom; POINT3DZ p; geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to Z() must be a point"); lwgeom = lwgeom_from_gserialized(geom); point = lwgeom_as_lwpoint(lwgeom); if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); /* no Z in input */ if ( ! gserialized_has_z(geom) ) PG_RETURN_NULL(); getPoint3dz_p(point->point, 0, &p); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(p.z); } /** M(GEOMETRY) -- find the first POINT(..) in GEOMETRY, returns its M value. * @return NULL if there is no POINT(..) in GEOMETRY. * Return NULL if there is no M in this geometry. */ PG_FUNCTION_INFO_V1(LWGEOM_m_point); Datum LWGEOM_m_point(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWPOINT *point = NULL; LWGEOM *lwgeom; POINT3DM p; geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to M() must be a point"); lwgeom = lwgeom_from_gserialized(geom); point = lwgeom_as_lwpoint(lwgeom); if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); /* no M in input */ if ( ! FLAGS_GET_M(point->flags) ) PG_RETURN_NULL(); getPoint3dm_p(point->point, 0, &p); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(p.m); } /** * ST_StartPoint(GEOMETRY) * @return the first point of a linestring. * Return NULL if there is no LINESTRING */ PG_FUNCTION_INFO_V1(LWGEOM_startpoint_linestring); Datum LWGEOM_startpoint_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOINT *lwpoint = NULL; int type = lwgeom->type; if ( type == LINETYPE || type == CIRCSTRINGTYPE ) { lwpoint = lwline_get_lwpoint((LWLINE*)lwgeom, 0); } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); if ( ! lwpoint ) PG_RETURN_NULL(); PG_RETURN_POINTER(geometry_serialize(lwpoint_as_lwgeom(lwpoint))); } /** EndPoint(GEOMETRY) -- find the first linestring in GEOMETRY, * @return the last point. * Return NULL if there is no LINESTRING(..) in GEOMETRY */ PG_FUNCTION_INFO_V1(LWGEOM_endpoint_linestring); Datum LWGEOM_endpoint_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOINT *lwpoint = NULL; int type = lwgeom->type; if ( type == LINETYPE || type == CIRCSTRINGTYPE ) { LWLINE *line = (LWLINE*)lwgeom; if ( line->points ) lwpoint = lwline_get_lwpoint((LWLINE*)lwgeom, line->points->npoints - 1); } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); if ( ! lwpoint ) PG_RETURN_NULL(); PG_RETURN_POINTER(geometry_serialize(lwpoint_as_lwgeom(lwpoint))); } /** * @brief Returns a geometry Given an OGC WKT (and optionally a SRID) * @return a geometry. * @note Note that this is a a stricter version * of geometry_in, where we refuse to * accept (HEX)WKB or EWKT. */ PG_FUNCTION_INFO_V1(LWGEOM_from_text); Datum LWGEOM_from_text(PG_FUNCTION_ARGS) { text *wkttext = PG_GETARG_TEXT_P(0); char *wkt = text2cstring(wkttext); LWGEOM_PARSER_RESULT lwg_parser_result; GSERIALIZED *geom_result = NULL; LWGEOM *lwgeom; POSTGIS_DEBUG(2, "LWGEOM_from_text"); POSTGIS_DEBUGF(3, "wkt: [%s]", wkt); if (lwgeom_parse_wkt(&lwg_parser_result, wkt, LW_PARSER_CHECK_ALL) == LW_FAILURE) PG_PARSER_ERROR(lwg_parser_result); lwgeom = lwg_parser_result.geom; if ( lwgeom->srid != SRID_UNKNOWN ) { elog(WARNING, "OGC WKT expected, EWKT provided - use GeomFromEWKT() for this"); } /* read user-requested SRID if any */ if ( PG_NARGS() > 1 ) lwgeom_set_srid(lwgeom, PG_GETARG_INT32(1)); geom_result = geometry_serialize(lwgeom); lwgeom_parser_result_free(&lwg_parser_result); PG_RETURN_POINTER(geom_result); } /** * Given an OGC WKB (and optionally a SRID) * return a geometry. * * @note that this is a wrapper around * lwgeom_from_wkb, where we throw * a warning if ewkb passed in * accept EWKB. */ PG_FUNCTION_INFO_V1(LWGEOM_from_WKB); Datum LWGEOM_from_WKB(PG_FUNCTION_ARGS) { bytea *bytea_wkb = (bytea*)PG_GETARG_BYTEA_P(0); int32 srid = 0; GSERIALIZED *geom; LWGEOM *lwgeom; uint8_t *wkb = (uint8_t*)VARDATA(bytea_wkb); lwgeom = lwgeom_from_wkb(wkb, VARSIZE(bytea_wkb)-VARHDRSZ, LW_PARSER_CHECK_ALL); if ( lwgeom_needs_bbox(lwgeom) ) lwgeom_add_bbox(lwgeom); geom = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(bytea_wkb, 0); if ( gserialized_get_srid(geom) != SRID_UNKNOWN ) { elog(WARNING, "OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this"); } if ( PG_NARGS() > 1 ) { srid = PG_GETARG_INT32(1); if ( srid != gserialized_get_srid(geom) ) gserialized_set_srid(geom, srid); } PG_RETURN_POINTER(geom); } /** convert LWGEOM to wkt (in TEXT format) */ PG_FUNCTION_INFO_V1(LWGEOM_asText); Datum LWGEOM_asText(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; char *wkt; size_t wkt_size; text *result; POSTGIS_DEBUG(2, "Called."); geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(geom); /* Write to WKT and free the geometry */ wkt = lwgeom_to_wkt(lwgeom, WKT_ISO, DBL_DIG, &wkt_size); lwgeom_free(lwgeom); POSTGIS_DEBUGF(3, "WKT size = %u, WKT length = %u", (unsigned int)wkt_size, (unsigned int)strlen(wkt)); /* Write to text and free the WKT */ result = cstring2text(wkt); pfree(wkt); /* Return the text */ PG_FREE_IF_COPY(geom, 0); PG_RETURN_TEXT_P(result); } /** convert LWGEOM to wkb (in BINARY format) */ PG_FUNCTION_INFO_V1(LWGEOM_asBinary); Datum LWGEOM_asBinary(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; uint8_t *wkb; size_t wkb_size; bytea *result; uint8_t variant = WKB_ISO; /* Get a 2D version of the geometry */ geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(geom); /* If user specified endianness, respect it */ if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) ) { text *wkb_endian = PG_GETARG_TEXT_P(1); if ( ! strncmp(VARDATA(wkb_endian), "xdr", 3) || ! strncmp(VARDATA(wkb_endian), "XDR", 3) ) { variant = variant | WKB_XDR; } else { variant = variant | WKB_NDR; } } /* Write to WKB and free the geometry */ wkb = lwgeom_to_wkb(lwgeom, variant, &wkb_size); lwgeom_free(lwgeom); /* Write to text and free the WKT */ result = palloc(wkb_size + VARHDRSZ); memcpy(VARDATA(result), wkb, wkb_size); SET_VARSIZE(result, wkb_size + VARHDRSZ); pfree(wkb); /* Return the text */ PG_FREE_IF_COPY(geom, 0); PG_RETURN_BYTEA_P(result); } /** * @brief IsClosed(GEOMETRY) if geometry is a linestring then returns * startpoint == endpoint. If its not a linestring then return NULL. * If it's a collection containing multiple linestrings, * @return true only if all the linestrings have startpoint=endpoint. */ PG_FUNCTION_INFO_V1(LWGEOM_isclosed); Datum LWGEOM_isclosed(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int closed = lwgeom_is_closed(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_BOOL(closed); } �postgis-2.1.2+dfsg.orig/postgis/lwgeom_geos_relatematch.c�������������������������������������������0000644�0000000�0000000�00000004241�11722777314�022310� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_geos.c 5258 2010-02-17 21:02:49Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2010 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * ST_RelateMatch * * DE9 Intersection Matrix pattern matching * * Developed by Sandro Santilli (strk@keybit.net) for Faunalia * (http://www.faunalia.it) with funding from Regione Toscana - Sistema * Informativo per la Gestione del Territorio e dell' Ambiente * [RT-SIGTA]". For the project: "Sviluppo strumenti software per il * trattamento di dati geografici basati su QuantumGIS e Postgis (CIG * 0494241492)" * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "funcapi.h" #include "../postgis_config.h" #include "lwgeom_geos.h" #include "lwgeom_pg.h" #include <string.h> #include <assert.h> /* #define POSTGIS_DEBUG_LEVEL 4 */ Datum ST_RelateMatch(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_RelateMatch); Datum ST_RelateMatch(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 lwerror("The GEOS version this postgis binary " "was compiled against (%d) doesn't support " "'ST_RelateMatch' function (3.3.0+ required)", POSTGIS_GEOS_VERSION); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ char *mat, *pat; text *mat_text, *pat_text; int result; /* Read the arguments */ mat_text = (PG_GETARG_TEXT_P(0)); pat_text = (PG_GETARG_TEXT_P(1)); /* Convert from text to cstring */ mat = text2cstring(mat_text); pat = text2cstring(pat_text); initGEOS(lwnotice, lwgeom_geos_error); result = GEOSRelatePatternMatch(mat, pat); if (result == 2) { lwfree(mat); lwfree(pat); lwerror("GEOSRelatePatternMatch: %s", lwgeom_geos_errmsg); PG_RETURN_NULL(); } lwfree(mat); lwfree(pat); PG_RETURN_BOOL(result); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_inout.c������������������������������������������������������0000644�0000000�0000000�00000033105�12146376765�020147� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "postgres.h" #include "../postgis_config.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <assert.h> #include "access/gist.h" #include "access/itup.h" #include "fmgr.h" #include "utils/elog.h" #include "mb/pg_wchar.h" # include "lib/stringinfo.h" /* for binary input */ #include "liblwgeom.h" #include "lwgeom_pg.h" #include "geography.h" /* for lwgeom_valid_typmod */ void elog_ERROR(const char* string); Datum LWGEOM_in(PG_FUNCTION_ARGS); Datum LWGEOM_out(PG_FUNCTION_ARGS); Datum LWGEOM_to_text(PG_FUNCTION_ARGS); Datum LWGEOM_to_bytea(PG_FUNCTION_ARGS); Datum LWGEOM_from_bytea(PG_FUNCTION_ARGS); Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS); Datum parse_WKT_lwgeom(PG_FUNCTION_ARGS); Datum LWGEOM_recv(PG_FUNCTION_ARGS); Datum LWGEOM_send(PG_FUNCTION_ARGS); Datum LWGEOM_to_latlon(PG_FUNCTION_ARGS); /* * LWGEOM_in(cstring) * format is '[SRID=#;]wkt|wkb' * LWGEOM_in( 'SRID=99;POINT(0 0)') * LWGEOM_in( 'POINT(0 0)') --> assumes SRID=SRID_UNKNOWN * LWGEOM_in( 'SRID=99;0101000000000000000000F03F000000000000004') * LWGEOM_in( '0101000000000000000000F03F000000000000004') * returns a GSERIALIZED object */ PG_FUNCTION_INFO_V1(LWGEOM_in); Datum LWGEOM_in(PG_FUNCTION_ARGS) { char *input = PG_GETARG_CSTRING(0); int32 geom_typmod = -1; char *str = input; LWGEOM_PARSER_RESULT lwg_parser_result; LWGEOM *lwgeom; GSERIALIZED *ret; int srid = 0; if ( (PG_NARGS()>2) && (!PG_ARGISNULL(2)) ) { geom_typmod = PG_GETARG_INT32(2); } lwgeom_parser_result_init(&lwg_parser_result); /* Empty string. */ if ( str[0] == '\0' ) { ereport(ERROR,(errmsg("parse error - invalid geometry"))); PG_RETURN_NULL(); } /* Starts with "SRID=" */ if( strncasecmp(str,"SRID=",5) == 0 ) { /* Roll forward to semi-colon */ char *tmp = str; while ( tmp && *tmp != ';' ) tmp++; /* Check next character to see if we have WKB */ if ( tmp && *(tmp+1) == '0' ) { /* Null terminate the SRID= string */ *tmp = '\0'; /* Set str to the start of the real WKB */ str = tmp + 1; /* Move tmp to the start of the numeric part */ tmp = input + 5; /* Parse out the SRID number */ srid = atoi(tmp); } } /* WKB? Let's find out. */ if ( str[0] == '0' ) { size_t hexsize = strlen(str); unsigned char *wkb = bytes_from_hexbytes(str, hexsize); /* TODO: 20101206: No parser checks! This is inline with current 1.5 behavior, but needs discussion */ lwgeom = lwgeom_from_wkb(wkb, hexsize/2, LW_PARSER_CHECK_NONE); /* If we picked up an SRID at the head of the WKB set it manually */ if ( srid ) lwgeom_set_srid(lwgeom, srid); /* Add a bbox if necessary */ if ( lwgeom_needs_bbox(lwgeom) ) lwgeom_add_bbox(lwgeom); pfree(wkb); ret = geometry_serialize(lwgeom); lwgeom_free(lwgeom); } /* WKT then. */ else { if ( lwgeom_parse_wkt(&lwg_parser_result, str, LW_PARSER_CHECK_ALL) == LW_FAILURE ) { PG_PARSER_ERROR(lwg_parser_result); PG_RETURN_NULL(); } lwgeom = lwg_parser_result.geom; if ( lwgeom_needs_bbox(lwgeom) ) lwgeom_add_bbox(lwgeom); ret = geometry_serialize(lwgeom); lwgeom_parser_result_free(&lwg_parser_result); } if ( geom_typmod >= 0 ) { postgis_valid_typmod(ret, geom_typmod); POSTGIS_DEBUG(3, "typmod and geometry were consistent"); } else { POSTGIS_DEBUG(3, "typmod was -1"); } /* Don't free the parser result (and hence lwgeom) until we have done */ /* the typemod check with lwgeom */ PG_RETURN_POINTER(ret); } /* * LWGEOM_to_latlon(GEOMETRY, text) * NOTE: Geometry must be a point. It is assumed that the coordinates * of the point are in a lat/lon projection, and they will be * normalized in the output to -90-90 and -180-180. * * The text parameter is a format string containing the format for the * resulting text, similar to a date format string. Valid tokens * are "D" for degrees, "M" for minutes, "S" for seconds, and "C" for * cardinal direction (NSEW). DMS tokens may be repeated to indicate * desired width and precision ("SSS.SSSS" means " 1.0023"). * "M", "S", and "C" are optional. If "C" is omitted, degrees are * shown with a "-" sign if south or west. If "S" is omitted, * minutes will be shown as decimal with as many digits of precision * as you specify. If "M" is omitted, degrees are shown as decimal * with as many digits precision as you specify. * * If the format string is omitted (null or 0-length) a default * format will be used. * * returns text */ PG_FUNCTION_INFO_V1(LWGEOM_to_latlon); Datum LWGEOM_to_latlon(PG_FUNCTION_ARGS) { /* Get the parameters */ GSERIALIZED *pg_lwgeom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); text *format_text = PG_GETARG_TEXT_P(1); LWGEOM *lwgeom; char *format_str = NULL; char * formatted_str; text * formatted_text; char * tmp; /* Only supports points. */ uint8_t geom_type = gserialized_get_type(pg_lwgeom); if (POINTTYPE != geom_type) { lwerror("Only points are supported, you tried type %s.", lwtype_name(geom_type)); } /* Convert to LWGEOM type */ lwgeom = lwgeom_from_gserialized(pg_lwgeom); if (format_text == NULL) { lwerror("ST_AsLatLonText: invalid format string (null"); PG_RETURN_NULL(); } format_str = text2cstring(format_text); assert(format_str != NULL); /* The input string supposedly will be in the database encoding, so convert to UTF-8. */ tmp = (char *)pg_do_encoding_conversion( (uint8_t *)format_str, strlen(format_str), GetDatabaseEncoding(), PG_UTF8); assert(tmp != NULL); if ( tmp != format_str ) { pfree(format_str); format_str = tmp; } /* Produce the formatted string. */ formatted_str = lwpoint_to_latlon((LWPOINT *)lwgeom, format_str); assert(formatted_str != NULL); pfree(format_str); /* Convert the formatted string from UTF-8 back to database encoding. */ tmp = (char *)pg_do_encoding_conversion( (uint8_t *)formatted_str, strlen(formatted_str), PG_UTF8, GetDatabaseEncoding()); assert(tmp != NULL); if ( tmp != formatted_str) { pfree(formatted_str); formatted_str = tmp; } /* Convert to the postgres output string type. */ formatted_text = cstring2text(formatted_str); pfree(formatted_str); PG_RETURN_POINTER(formatted_text); } /* * LWGEOM_out(lwgeom) --> cstring * output is 'SRID=#;<wkb in hex form>' * ie. 'SRID=-99;0101000000000000000000F03F0000000000000040' * WKB is machine endian * if SRID=-1, the 'SRID=-1;' will probably not be present. */ PG_FUNCTION_INFO_V1(LWGEOM_out); Datum LWGEOM_out(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom; char *hexwkb; size_t hexwkb_size; lwgeom = lwgeom_from_gserialized(geom); hexwkb = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, &hexwkb_size); lwgeom_free(lwgeom); PG_RETURN_CSTRING(hexwkb); } /* * AsHEXEWKB(geom, string) */ PG_FUNCTION_INFO_V1(LWGEOM_asHEXEWKB); Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom; char *hexwkb; size_t hexwkb_size; uint8_t variant = 0; text *result; text *type; size_t text_size; /* If user specified endianness, respect it */ if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) ) { type = PG_GETARG_TEXT_P(1); if ( ! strncmp(VARDATA(type), "xdr", 3) || ! strncmp(VARDATA(type), "XDR", 3) ) { variant = variant | WKB_XDR; } else { variant = variant | WKB_NDR; } } /* Create WKB hex string */ lwgeom = lwgeom_from_gserialized(geom); hexwkb = lwgeom_to_hexwkb(lwgeom, variant | WKB_EXTENDED, &hexwkb_size); lwgeom_free(lwgeom); /* Prepare the PgSQL text return type */ text_size = hexwkb_size - 1 + VARHDRSZ; result = palloc(text_size); memcpy(VARDATA(result), hexwkb, hexwkb_size - 1); SET_VARSIZE(result, text_size); /* Clean up and return */ pfree(hexwkb); PG_FREE_IF_COPY(geom, 0); PG_RETURN_TEXT_P(result); } /* * LWGEOM_to_text(lwgeom) --> text * output is 'SRID=#;<wkb in hex form>' * ie. 'SRID=-99;0101000000000000000000F03F0000000000000040' * WKB is machine endian * if SRID=-1, the 'SRID=-1;' will probably not be present. */ PG_FUNCTION_INFO_V1(LWGEOM_to_text); Datum LWGEOM_to_text(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom; char *hexwkb; size_t hexwkb_size; text *result; /* Generate WKB hex text */ lwgeom = lwgeom_from_gserialized(geom); hexwkb = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, &hexwkb_size); lwgeom_free(lwgeom); /* Copy into text obect */ result = cstring2text(hexwkb); pfree(hexwkb); /* Clean up and return */ PG_FREE_IF_COPY(geom, 0); PG_RETURN_TEXT_P(result); } /* * LWGEOMFromWKB(wkb, [SRID] ) * NOTE: wkb is in *binary* not hex form. * * NOTE: this function parses EWKB (extended form) * which also contains SRID info. */ PG_FUNCTION_INFO_V1(LWGEOMFromWKB); Datum LWGEOMFromWKB(PG_FUNCTION_ARGS) { bytea *bytea_wkb = (bytea*)PG_GETARG_BYTEA_P(0); int32 srid = 0; GSERIALIZED *geom; LWGEOM *lwgeom; uint8_t *wkb = (uint8_t*)VARDATA(bytea_wkb); lwgeom = lwgeom_from_wkb(wkb, VARSIZE(bytea_wkb)-VARHDRSZ, LW_PARSER_CHECK_ALL); if ( ( PG_NARGS()>1) && ( ! PG_ARGISNULL(1) )) { srid = PG_GETARG_INT32(1); lwgeom_set_srid(lwgeom, srid); } if ( lwgeom_needs_bbox(lwgeom) ) lwgeom_add_bbox(lwgeom); geom = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(bytea_wkb, 0); PG_RETURN_POINTER(geom); } /* * WKBFromLWGEOM(lwgeom) --> wkb * this will have no 'SRID=#;' */ PG_FUNCTION_INFO_V1(WKBFromLWGEOM); Datum WKBFromLWGEOM(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom; uint8_t *wkb; size_t wkb_size; uint8_t variant = 0; bytea *result; text *type; /* If user specified endianness, respect it */ if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) ) { type = PG_GETARG_TEXT_P(1); if ( ! strncmp(VARDATA(type), "xdr", 3) || ! strncmp(VARDATA(type), "XDR", 3) ) { variant = variant | WKB_XDR; } else { variant = variant | WKB_NDR; } } /* Create WKB hex string */ lwgeom = lwgeom_from_gserialized(geom); wkb = lwgeom_to_wkb(lwgeom, variant | WKB_EXTENDED , &wkb_size); lwgeom_free(lwgeom); /* Prepare the PgSQL text return type */ result = palloc(wkb_size + VARHDRSZ); memcpy(VARDATA(result), wkb, wkb_size); SET_VARSIZE(result, wkb_size+VARHDRSZ); /* Clean up and return */ pfree(wkb); PG_FREE_IF_COPY(geom, 0); PG_RETURN_BYTEA_P(result); } /* puts a bbox inside the geometry */ PG_FUNCTION_INFO_V1(LWGEOM_addBBOX); Datum LWGEOM_addBBOX(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; LWGEOM *lwgeom; lwgeom = lwgeom_from_gserialized(geom); lwgeom_add_bbox(lwgeom); result = geometry_serialize(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /* removes a bbox from a geometry */ PG_FUNCTION_INFO_V1(LWGEOM_dropBBOX); Datum LWGEOM_dropBBOX(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* No box? we're done already! */ if ( ! gserialized_has_bbox(geom) ) PG_RETURN_POINTER(geom); PG_RETURN_POINTER(gserialized_drop_gidx(geom)); } /* for the wkt parser */ void elog_ERROR(const char* string) { elog(ERROR, "%s", string); } /* * This just does the same thing as the _in function, * except it has to handle a 'text' input. First * unwrap the text into a cstring, then call * geometry_in */ PG_FUNCTION_INFO_V1(parse_WKT_lwgeom); Datum parse_WKT_lwgeom(PG_FUNCTION_ARGS) { text *wkt_text = PG_GETARG_TEXT_P(0); char *wkt; Datum result; /* Unwrap the PgSQL text type into a cstring */ wkt = text2cstring(wkt_text); /* Now we call over to the geometry_in function */ result = DirectFunctionCall1(LWGEOM_in, CStringGetDatum(wkt)); /* Return null on null */ if ( ! result ) PG_RETURN_NULL(); PG_RETURN_DATUM(result); } /* * This function must advance the StringInfo.cursor pointer * and leave it at the end of StringInfo.buf. If it fails * to do so the backend will raise an exception with message: * ERROR: incorrect binary data format in bind parameter # * */ PG_FUNCTION_INFO_V1(LWGEOM_recv); Datum LWGEOM_recv(PG_FUNCTION_ARGS) { StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); int32 geom_typmod = -1; GSERIALIZED *geom; LWGEOM *lwgeom; if ( (PG_NARGS()>2) && (!PG_ARGISNULL(2)) ) { geom_typmod = PG_GETARG_INT32(2); } lwgeom = lwgeom_from_wkb((uint8_t*)buf->data, buf->len, LW_PARSER_CHECK_ALL); if ( lwgeom_needs_bbox(lwgeom) ) lwgeom_add_bbox(lwgeom); /* Set cursor to the end of buffer (so the backend is happy) */ buf->cursor = buf->len; geom = geometry_serialize(lwgeom); lwgeom_free(lwgeom); if ( geom_typmod >= 0 ) { postgis_valid_typmod(geom, geom_typmod); POSTGIS_DEBUG(3, "typmod and geometry were consistent"); } else { POSTGIS_DEBUG(3, "typmod was -1"); } PG_RETURN_POINTER(geom); } PG_FUNCTION_INFO_V1(LWGEOM_send); Datum LWGEOM_send(PG_FUNCTION_ARGS) { POSTGIS_DEBUG(2, "LWGEOM_send called"); PG_RETURN_POINTER( DatumGetPointer( DirectFunctionCall1( WKBFromLWGEOM, PG_GETARG_DATUM(0) ))); } PG_FUNCTION_INFO_V1(LWGEOM_to_bytea); Datum LWGEOM_to_bytea(PG_FUNCTION_ARGS) { POSTGIS_DEBUG(2, "LWGEOM_to_bytea called"); PG_RETURN_POINTER( DatumGetPointer( DirectFunctionCall1( WKBFromLWGEOM, PG_GETARG_DATUM(0) ))); } PG_FUNCTION_INFO_V1(LWGEOM_from_bytea); Datum LWGEOM_from_bytea(PG_FUNCTION_ARGS) { GSERIALIZED *result; POSTGIS_DEBUG(2, "LWGEOM_from_bytea start"); result = (GSERIALIZED *)DatumGetPointer(DirectFunctionCall1( LWGEOMFromWKB, PG_GETARG_DATUM(0))); PG_RETURN_POINTER(result); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_functions_analytic.h�����������������������������������������0000644�0000000�0000000�00000001442�11722777314�022703� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2011 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "lwgeom_rtree.h" /* ** Public prototypes for analytic functions. */ int point_in_polygon_rtree(RTREE_NODE **root, int ringCount, LWPOINT *point); int point_in_multipolygon_rtree(RTREE_NODE **root, int polyCount, int *ringCounts, LWPOINT *point); int point_in_polygon(LWPOLY *polygon, LWPOINT *point); int point_in_multipolygon(LWMPOLY *mpolygon, LWPOINT *pont); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/geometry_inout.c����������������������������������������������������0000644�0000000�0000000�00000013243�12031354162�020465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "postgres.h" #include "utils/geo_decls.h" #include "../postgis_config.h" #include "liblwgeom.h" /* For standard geometry types. */ #include "lwgeom_pg.h" /* For debugging macros. */ Datum geometry_to_point(PG_FUNCTION_ARGS); Datum point_to_geometry(PG_FUNCTION_ARGS); Datum geometry_to_path(PG_FUNCTION_ARGS); Datum path_to_geometry(PG_FUNCTION_ARGS); Datum geometry_to_polygon(PG_FUNCTION_ARGS); Datum polygon_to_geometry(PG_FUNCTION_ARGS); /** * Cast a PostgreSQL Point to a PostGIS geometry */ PG_FUNCTION_INFO_V1(point_to_geometry); Datum point_to_geometry(PG_FUNCTION_ARGS) { Point *point; LWPOINT *lwpoint; GSERIALIZED *geom; POSTGIS_DEBUG(2, "point_to_geometry called"); if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); point = PG_GETARG_POINT_P(0); if ( ! point ) PG_RETURN_NULL(); lwpoint = lwpoint_make2d(SRID_UNKNOWN, point->x, point->y); geom = geometry_serialize(lwpoint_as_lwgeom(lwpoint)); lwpoint_free(lwpoint); PG_RETURN_POINTER(geom); } /** * Cast a PostGIS geometry to a PostgreSQL Point */ PG_FUNCTION_INFO_V1(geometry_to_point); Datum geometry_to_point(PG_FUNCTION_ARGS) { Point *point; LWGEOM *lwgeom; LWPOINT *lwpoint; GSERIALIZED *geom; POSTGIS_DEBUG(2, "geometry_to_point called"); if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(geom) != POINTTYPE ) elog(ERROR, "geometry_to_point only accepts Points"); lwgeom = lwgeom_from_gserialized(geom); if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); lwpoint = lwgeom_as_lwpoint(lwgeom); point = (Point*)palloc(sizeof(Point)); point->x = lwpoint_get_x(lwpoint); point->y = lwpoint_get_y(lwpoint); lwpoint_free(lwpoint); PG_FREE_IF_COPY(geom,0); PG_RETURN_POINT_P(point); } PG_FUNCTION_INFO_V1(geometry_to_path); Datum geometry_to_path(PG_FUNCTION_ARGS) { PATH *path; LWLINE *lwline; LWGEOM *lwgeom; GSERIALIZED *geom; POINTARRAY *pa; int i; POINT2D pt; size_t size; POSTGIS_DEBUG(2, "geometry_to_path called"); if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(geom) != LINETYPE ) elog(ERROR, "geometry_to_path only accepts LineStrings"); lwgeom = lwgeom_from_gserialized(geom); if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); lwline = lwgeom_as_lwline(lwgeom); pa = lwline->points; size = offsetof(PATH, p[0]) + sizeof(path->p[0]) * pa->npoints; path = (PATH*)palloc(size); SET_VARSIZE(path, size); path->npts = pa->npoints; path->closed = 0; path->dummy = 0; for ( i = 0; i < pa->npoints; i++ ) { getPoint2d_p(pa, i, &pt); (path->p[i]).x = pt.x; (path->p[i]).y = pt.y; } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom,0); PG_RETURN_PATH_P(path); } PG_FUNCTION_INFO_V1(path_to_geometry); Datum path_to_geometry(PG_FUNCTION_ARGS) { PATH *path; LWLINE *lwline; POINTARRAY *pa; GSERIALIZED *geom; POINT4D pt; Point p; int i; POSTGIS_DEBUG(2, "path_to_geometry called"); if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); path = PG_GETARG_PATH_P(0); if ( ! path ) PG_RETURN_NULL(); pa = ptarray_construct_empty(0, 0, path->npts); for ( i = 0; i < path->npts; i++ ) { p = path->p[i]; pt.x = p.x; pt.y = p.y; ptarray_append_point(pa, &pt, LW_FALSE); } lwline = lwline_construct(SRID_UNKNOWN, NULL, pa); geom = geometry_serialize(lwline_as_lwgeom(lwline)); lwline_free(lwline); PG_RETURN_POINTER(geom); } PG_FUNCTION_INFO_V1(geometry_to_polygon); Datum geometry_to_polygon(PG_FUNCTION_ARGS) { POLYGON *polygon; LWPOLY *lwpoly; LWGEOM *lwgeom; GSERIALIZED *geom; POINTARRAY *pa; GBOX gbox; int i; size_t size; POSTGIS_DEBUG(2, "geometry_to_polygon called"); if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(geom) != POLYGONTYPE ) elog(ERROR, "geometry_to_polygon only accepts Polygons"); lwgeom = lwgeom_from_gserialized(geom); if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); lwpoly = lwgeom_as_lwpoly(lwgeom); pa = lwpoly->rings[0]; size = offsetof(POLYGON, p[0]) + sizeof(polygon->p[0]) * pa->npoints; polygon = (POLYGON*)palloc0(size); /* zero any holes */ SET_VARSIZE(polygon, size); polygon->npts = pa->npoints; lwgeom_calculate_gbox(lwgeom, &gbox); polygon->boundbox.low.x = gbox.xmin; polygon->boundbox.low.y = gbox.ymin; polygon->boundbox.high.x = gbox.xmax; polygon->boundbox.high.y = gbox.ymax; for ( i = 0; i < pa->npoints; i++ ) { POINT2D pt; getPoint2d_p(pa, i, &pt); (polygon->p[i]).x = pt.x; (polygon->p[i]).y = pt.y; } lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom,0); PG_RETURN_POLYGON_P(polygon); } PG_FUNCTION_INFO_V1(polygon_to_geometry); Datum polygon_to_geometry(PG_FUNCTION_ARGS) { POLYGON *polygon; LWPOLY *lwpoly; POINTARRAY *pa; POINTARRAY **ppa; GSERIALIZED *geom; Point p; int i = 0, unclosed = 0; POSTGIS_DEBUG(2, "polygon_to_geometry called"); if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); polygon = PG_GETARG_POLYGON_P(0); if ( ! polygon ) PG_RETURN_NULL(); /* Are first and last points different? If so we need to close this ring */ if ( memcmp( polygon->p, polygon->p + polygon->npts - 1, sizeof(Point) ) ) { unclosed = 1; } pa = ptarray_construct_empty(0, 0, polygon->npts + unclosed); for ( i = 0; i < (polygon->npts+unclosed); i++ ) { POINT4D pt; p = polygon->p[i % polygon->npts]; pt.x = p.x; pt.y = p.y; ptarray_append_point(pa, &pt, LW_FALSE); } ppa = palloc(sizeof(POINTARRAY*)); ppa[0] = pa; lwpoly = lwpoly_construct(SRID_UNKNOWN, NULL, 1, ppa); geom = geometry_serialize(lwpoly_as_lwgeom(lwpoly)); lwpoly_free(lwpoly); PG_RETURN_POINTER(geom); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_box.c��������������������������������������������������������0000644�0000000�0000000�00000032040�11722777314�017570� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_box.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2009 Refractions Research Inc. * Copyright 2009 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "access/gist.h" #include "access/itup.h" #include "fmgr.h" #include "utils/elog.h" #include "utils/geo_decls.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> /* forward defs */ Datum BOX2D_in(PG_FUNCTION_ARGS); Datum BOX2D_out(PG_FUNCTION_ARGS); Datum LWGEOM_to_BOX2D(PG_FUNCTION_ARGS); Datum BOX2D_expand(PG_FUNCTION_ARGS); Datum BOX2D_to_BOX3D(PG_FUNCTION_ARGS); Datum BOX2D_combine(PG_FUNCTION_ARGS); Datum BOX2D_to_LWGEOM(PG_FUNCTION_ARGS); Datum BOX2D_construct(PG_FUNCTION_ARGS); /* parser - "BOX(xmin ymin,xmax ymax)" */ PG_FUNCTION_INFO_V1(BOX2D_in); Datum BOX2D_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); int nitems; double tmp; GBOX box; gbox_init(&box); if (strstr(str,"BOX(") != str ) { elog(ERROR,"box2d parser - doesnt start with BOX("); PG_RETURN_NULL(); } nitems = sscanf(str,"BOX(%lf %lf,%lf %lf)", &box.xmin, &box.ymin, &box.xmax, &box.ymax); if (nitems != 4) { elog(ERROR,"box2d parser - couldnt parse. It should look like: BOX(xmin ymin,xmax ymax)"); PG_RETURN_NULL(); } if (box.xmin > box.xmax) { tmp = box.xmin; box.xmin = box.xmax; box.xmax = tmp; } if (box.ymin > box.ymax) { tmp = box.ymin; box.ymin = box.ymax; box.ymax = tmp; } PG_RETURN_POINTER(gbox_copy(&box)); } /*writer "BOX(xmin ymin,xmax ymax)" */ PG_FUNCTION_INFO_V1(BOX2D_out); Datum BOX2D_out(PG_FUNCTION_ARGS) { GBOX *box = (GBOX *) PG_GETARG_POINTER(0); char tmp[500]; /* big enough */ char *result; int size; size = sprintf(tmp,"BOX(%.15g %.15g,%.15g %.15g)", box->xmin, box->ymin, box->xmax, box->ymax); result= palloc(size+1); /* +1= null term */ memcpy(result,tmp,size+1); result[size] = '\0'; PG_RETURN_CSTRING(result); } /*convert a GSERIALIZED to BOX2D */ PG_FUNCTION_INFO_V1(LWGEOM_to_BOX2D); Datum LWGEOM_to_BOX2D(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); GBOX gbox; /* Cannot box empty! */ if ( lwgeom_is_empty(lwgeom) ) PG_RETURN_NULL(); /* Cannot calculate box? */ if ( lwgeom_calculate_gbox(lwgeom, &gbox) == LW_FAILURE ) PG_RETURN_NULL(); /* Strip out higher dimensions */ FLAGS_SET_Z(gbox.flags, 0); FLAGS_SET_M(gbox.flags, 0); PG_RETURN_POINTER(gbox_copy(&gbox)); } /*---------------------------------------------------------- * Relational operators for BOXes. * <, >, <=, >=, and == are based on box area. *---------------------------------------------------------*/ /* * box_same - are two boxes identical? */ PG_FUNCTION_INFO_V1(BOX2D_same); Datum BOX2D_same(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPeq(box1->xmax, box2->xmax) && FPeq(box1->xmin, box2->xmin) && FPeq(box1->ymax, box2->ymax) && FPeq(box1->ymin, box2->ymin)); } /* * box_overlap - does box1 overlap box2? */ PG_FUNCTION_INFO_V1(BOX2D_overlap); Datum BOX2D_overlap(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); bool result; result = ((FPge(box1->xmax, box2->xmax) && FPle(box1->xmin, box2->xmax)) || (FPge(box2->xmax, box1->xmax) && FPle(box2->xmin, box1->xmax))) && ((FPge(box1->ymax, box2->ymax) && FPle(box1->ymin, box2->ymax)) || (FPge(box2->ymax, box1->ymax) && FPle(box2->ymin, box1->ymax))); PG_RETURN_BOOL(result); } /* * box_overleft - is the right edge of box1 to the left of * the right edge of box2? */ PG_FUNCTION_INFO_V1(BOX2D_overleft); Datum BOX2D_overleft(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPle(box1->xmax, box2->xmax)); } /* * box_left - is box1 strictly left of box2? */ PG_FUNCTION_INFO_V1(BOX2D_left); Datum BOX2D_left(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPlt(box1->xmax, box2->xmin)); } /* * box_right - is box1 strictly right of box2? */ PG_FUNCTION_INFO_V1(BOX2D_right); Datum BOX2D_right(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPgt(box1->xmin, box2->xmax)); } /* * box_overright - is the left edge of box1 to the right of * the left edge of box2? */ PG_FUNCTION_INFO_V1(BOX2D_overright); Datum BOX2D_overright(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPge(box1->xmin, box2->xmin)); } /* * box_overbelow - is the bottom edge of box1 below * the bottom edge of box2? */ PG_FUNCTION_INFO_V1(BOX2D_overbelow); Datum BOX2D_overbelow(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPle(box1->ymax, box2->ymax)); } /* * box_below - is box1 strictly below box2? */ PG_FUNCTION_INFO_V1(BOX2D_below); Datum BOX2D_below(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPlt(box1->ymax, box2->ymin)); } /* * box_above - is box1 strictly above box2? */ PG_FUNCTION_INFO_V1(BOX2D_above); Datum BOX2D_above(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPgt(box1->ymin, box2->ymax)); } /* * box_overabove - the top edge of box1 above * the top edge of box2? */ PG_FUNCTION_INFO_V1(BOX2D_overabove); Datum BOX2D_overabove(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPge(box1->ymin, box2->ymin)); } /* * box_contained - is box1 contained by box2? */ PG_FUNCTION_INFO_V1(BOX2D_contained); Datum BOX2D_contained(PG_FUNCTION_ARGS) { GBOX *box1 =(GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPle(box1->xmax, box2->xmax) && FPge(box1->xmin, box2->xmin) && FPle(box1->ymax, box2->ymax) && FPge(box1->ymin, box2->ymin)); } /* * box_contain - does box1 contain box2? */ PG_FUNCTION_INFO_V1(BOX2D_contain); Datum BOX2D_contain(PG_FUNCTION_ARGS) { GBOX *box1 = (GBOX *) PG_GETARG_POINTER(0); GBOX *box2 = (GBOX *) PG_GETARG_POINTER(1); PG_RETURN_BOOL(FPge(box1->xmax, box2->xmax) && FPle(box1->xmin, box2->xmin) && FPge(box1->ymax, box2->ymax) && FPle(box1->ymin, box2->ymin)); } PG_FUNCTION_INFO_V1(BOX2D_intersects); Datum BOX2D_intersects(PG_FUNCTION_ARGS) { GBOX *a = (GBOX *) PG_GETARG_POINTER(0); GBOX *b = (GBOX *) PG_GETARG_POINTER(1); GBOX *n; n = (GBOX *) palloc(sizeof(GBOX)); n->xmax = Min(a->xmax, b->xmax); n->ymax = Min(a->ymax, b->ymax); n->xmin = Max(a->xmin, b->xmin); n->ymin = Max(a->ymin, b->ymin); if (n->xmax < n->xmin || n->ymax < n->ymin) { pfree(n); /* Indicate "no intersection" by returning NULL pointer */ n = NULL; } PG_RETURN_POINTER(n); } /* * union of two BOX2Ds */ PG_FUNCTION_INFO_V1(BOX2D_union); Datum BOX2D_union(PG_FUNCTION_ARGS) { GBOX *a = (GBOX*) PG_GETARG_POINTER(0); GBOX *b = (GBOX*) PG_GETARG_POINTER(1); GBOX *n; n = (GBOX *) lwalloc(sizeof(GBOX)); if ( ! gbox_union(a,b,n) ) PG_RETURN_NULL(); PG_RETURN_POINTER(n); } PG_FUNCTION_INFO_V1(BOX2D_expand); Datum BOX2D_expand(PG_FUNCTION_ARGS) { GBOX *box = (GBOX *)PG_GETARG_POINTER(0); double d = PG_GETARG_FLOAT8(1); GBOX *result = (GBOX *)palloc(sizeof(GBOX)); memcpy(result, box, sizeof(GBOX)); gbox_expand(result, d); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(BOX2D_to_BOX3D); Datum BOX2D_to_BOX3D(PG_FUNCTION_ARGS) { GBOX *box = (GBOX *)PG_GETARG_POINTER(0); BOX3D *result = box3d_from_gbox(box); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(BOX2D_combine); Datum BOX2D_combine(PG_FUNCTION_ARGS) { Pointer box2d_ptr = PG_GETARG_POINTER(0); Pointer geom_ptr = PG_GETARG_POINTER(1); GBOX *a,*b; GSERIALIZED *lwgeom; GBOX box, *result; if ( (box2d_ptr == NULL) && (geom_ptr == NULL) ) { PG_RETURN_NULL(); /* combine_box2d(null,null) => null */ } result = (GBOX *)palloc(sizeof(GBOX)); if (box2d_ptr == NULL) { lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* empty geom would make getbox2d_p return NULL */ if ( ! gserialized_get_gbox_p(lwgeom, &box) ) PG_RETURN_NULL(); memcpy(result, &box, sizeof(GBOX)); PG_RETURN_POINTER(result); } /* combine_bbox(BOX3D, null) => BOX3D */ if (geom_ptr == NULL) { memcpy(result, (char *)PG_GETARG_DATUM(0), sizeof(GBOX)); PG_RETURN_POINTER(result); } /*combine_bbox(BOX3D, geometry) => union(BOX3D, geometry->bvol) */ lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); if ( ! gserialized_get_gbox_p(lwgeom, &box) ) { /* must be the empty geom */ memcpy(result, (char *)PG_GETARG_DATUM(0), sizeof(GBOX)); PG_RETURN_POINTER(result); } a = (GBOX *)PG_GETARG_DATUM(0); b = &box; result->xmax = Max(a->xmax, b->xmax); result->ymax = Max(a->ymax, b->ymax); result->xmin = Min(a->xmin, b->xmin); result->ymin = Min(a->ymin, b->ymin); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(BOX2D_to_LWGEOM); Datum BOX2D_to_LWGEOM(PG_FUNCTION_ARGS) { GBOX *box = (GBOX *)PG_GETARG_POINTER(0); POINTARRAY *pa = ptarray_construct_empty(0, 0, 5); POINT4D pt; GSERIALIZED *result; /* * Alter BOX2D cast so that a valid geometry is always * returned depending upon the size of the BOX2D. The * code makes the following assumptions: * - If the BOX2D is a single point then return a * POINT geometry * - If the BOX2D represents either a horizontal or * vertical line, return a LINESTRING geometry * - Otherwise return a POLYGON */ if ( (box->xmin == box->xmax) && (box->ymin == box->ymax) ) { /* Construct and serialize point */ LWPOINT *point = lwpoint_make2d(SRID_UNKNOWN, box->xmin, box->ymin); result = geometry_serialize(lwpoint_as_lwgeom(point)); lwpoint_free(point); } else if ( (box->xmin == box->xmax) || (box->ymin == box->ymax) ) { LWLINE *line; /* Assign coordinates to point array */ pt.x = box->xmin; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmax; pt.y = box->ymax; ptarray_append_point(pa, &pt, LW_TRUE); /* Construct and serialize linestring */ line = lwline_construct(SRID_UNKNOWN, NULL, pa); result = geometry_serialize(lwline_as_lwgeom(line)); lwline_free(line); } else { LWPOLY *poly; POINTARRAY **ppa = lwalloc(sizeof(POINTARRAY*)); /* Assign coordinates to point array */ pt.x = box->xmin; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmin; pt.y = box->ymax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmax; pt.y = box->ymax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmax; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box->xmin; pt.y = box->ymin; ptarray_append_point(pa, &pt, LW_TRUE); /* Construct polygon */ ppa[0] = pa; poly = lwpoly_construct(SRID_UNKNOWN, NULL, 1, ppa); result = geometry_serialize(lwpoly_as_lwgeom(poly)); lwpoly_free(poly); } PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(BOX2D_construct); Datum BOX2D_construct(PG_FUNCTION_ARGS) { GSERIALIZED *pgmin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *pgmax = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); GBOX *result; LWPOINT *minpoint, *maxpoint; double min, max, tmp; minpoint = (LWPOINT*)lwgeom_from_gserialized(pgmin); maxpoint = (LWPOINT*)lwgeom_from_gserialized(pgmax); if ( (minpoint->type != POINTTYPE) || (maxpoint->type != POINTTYPE) ) { elog(ERROR, "GBOX_construct: arguments must be points"); PG_RETURN_NULL(); } error_if_srid_mismatch(minpoint->srid, maxpoint->srid); result = gbox_new(gflags(0, 0, 0)); /* Process X min/max */ min = lwpoint_get_x(minpoint); max = lwpoint_get_x(maxpoint); if ( min > max ) { tmp = min; min = max; max = tmp; } result->xmin = min; result->xmax = max; /* Process Y min/max */ min = lwpoint_get_y(minpoint); max = lwpoint_get_y(maxpoint); if ( min > max ) { tmp = min; min = max; max = tmp; } result->ymin = min; result->ymax = max; PG_RETURN_POINTER(result); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_geos_prepared.c����������������������������������������������0000644�0000000�0000000�00000027562�12135573447�021634� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> * Copyright (C) 2008 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright (C) 2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <assert.h> #include "../postgis_config.h" #include "lwgeom_geos_prepared.h" #include "lwgeom_cache.h" /*********************************************************************** ** ** PreparedGeometry implementations that cache intermediate indexed versions ** of geometry in a special MemoryContext for re-used by future function ** invocations. ** ** By creating a memory context to hold the GEOS PreparedGeometry and Geometry ** and making it a child of the fmgr memory context, we can get the memory held ** by the GEOS objects released when the memory context delete callback is ** invoked by the parent context. ** ** Working parts: ** ** PrepGeomCache, the actual struct that holds the keys we compare ** to determine if our cache is stale, and references to the GEOS ** objects used in computations. ** ** PrepGeomHash, a global hash table that uses a MemoryContext as ** key and returns a structure holding references to the GEOS ** objects used in computations. ** ** PreparedCacheContextMethods, a set of callback functions that ** get hooked into a MemoryContext that is in turn used as a ** key in the PrepGeomHash. ** ** All this is to allow us to clean up external malloc'ed objects ** (the GEOS Geometry and PreparedGeometry) before the structure ** that references them (PrepGeomCache) is pfree'd by PgSQL. The ** methods in the PreparedCacheContext are called just before the ** function context is freed, allowing us to look up the references ** in the PrepGeomHash and free them before the function context ** is freed. ** **/ /* ** Backend prepared hash table ** ** The memory context call-backs use a MemoryContext as the parameter ** so we need to map that over to actual references to GEOS objects to ** delete. ** ** This hash table stores a key/value pair of MemoryContext/Geom* objects. */ static HTAB* PrepGeomHash = NULL; #define PREPARED_BACKEND_HASH_SIZE 32 typedef struct { MemoryContext context; const GEOSPreparedGeometry* prepared_geom; const GEOSGeometry* geom; } PrepGeomHashEntry; /* Memory context hash table function prototypes */ uint32 mcxt_ptr_hasha(const void *key, Size keysize); static void CreatePrepGeomHash(void); static void AddPrepGeomHashEntry(PrepGeomHashEntry pghe); static PrepGeomHashEntry *GetPrepGeomHashEntry(MemoryContext mcxt); static void DeletePrepGeomHashEntry(MemoryContext mcxt); /* Memory context cache function prototypes */ static void PreparedCacheInit(MemoryContext context); static void PreparedCacheReset(MemoryContext context); static void PreparedCacheDelete(MemoryContext context); static bool PreparedCacheIsEmpty(MemoryContext context); static void PreparedCacheStats(MemoryContext context, int level); #ifdef MEMORY_CONTEXT_CHECKING static void PreparedCacheCheck(MemoryContext context); #endif /* Memory context definition must match the current version of PostgreSQL */ static MemoryContextMethods PreparedCacheContextMethods = { NULL, NULL, NULL, PreparedCacheInit, PreparedCacheReset, PreparedCacheDelete, NULL, PreparedCacheIsEmpty, PreparedCacheStats #ifdef MEMORY_CONTEXT_CHECKING , PreparedCacheCheck #endif }; static void PreparedCacheInit(MemoryContext context) { /* * Do nothing as the cache is initialised when the transform() * function is first called */ } static void PreparedCacheDelete(MemoryContext context) { PrepGeomHashEntry* pghe; /* Lookup the hash entry pointer in the global hash table so we can free it */ pghe = GetPrepGeomHashEntry(context); if (!pghe) elog(ERROR, "PreparedCacheDelete: Trying to delete non-existant hash entry object with MemoryContext key (%p)", (void *)context); POSTGIS_DEBUGF(3, "deleting geom object (%p) and prepared geom object (%p) with MemoryContext key (%p)", pghe->geom, pghe->prepared_geom, context); /* Free them */ if ( pghe->prepared_geom ) GEOSPreparedGeom_destroy( pghe->prepared_geom ); if ( pghe->geom ) GEOSGeom_destroy( (GEOSGeometry *)pghe->geom ); /* Remove the hash entry as it is no longer needed */ DeletePrepGeomHashEntry(context); } static void PreparedCacheReset(MemoryContext context) { /* * Do nothing, but we must supply a function since this call is mandatory according to tgl * (see postgis-devel archives July 2007) */ } static bool PreparedCacheIsEmpty(MemoryContext context) { /* * Always return false since this call is mandatory according to tgl * (see postgis-devel archives July 2007) */ return FALSE; } static void PreparedCacheStats(MemoryContext context, int level) { /* * Simple stats display function - we must supply a function since this call is mandatory according to tgl * (see postgis-devel archives July 2007) */ fprintf(stderr, "%s: Prepared context\n", context->name); } #ifdef MEMORY_CONTEXT_CHECKING static void PreparedCacheCheck(MemoryContext context) { /* * Do nothing - stub required for when PostgreSQL is compiled * with MEMORY_CONTEXT_CHECKING defined */ } #endif /* TODO: put this in common are for both transform and prepared ** mcxt_ptr_hash ** Build a key from a pointer and a size value. */ uint32 mcxt_ptr_hasha(const void *key, Size keysize) { uint32 hashval; hashval = DatumGetUInt32(hash_any(key, keysize)); return hashval; } static void CreatePrepGeomHash(void) { HASHCTL ctl; ctl.keysize = sizeof(MemoryContext); ctl.entrysize = sizeof(PrepGeomHashEntry); ctl.hash = mcxt_ptr_hasha; PrepGeomHash = hash_create("PostGIS Prepared Geometry Backend MemoryContext Hash", PREPARED_BACKEND_HASH_SIZE, &ctl, (HASH_ELEM | HASH_FUNCTION)); } static void AddPrepGeomHashEntry(PrepGeomHashEntry pghe) { bool found; void **key; PrepGeomHashEntry *he; /* The hash key is the MemoryContext pointer */ key = (void *)&(pghe.context); he = (PrepGeomHashEntry *) hash_search(PrepGeomHash, key, HASH_ENTER, &found); if (!found) { /* Insert the entry into the new hash element */ he->context = pghe.context; he->geom = pghe.geom; he->prepared_geom = pghe.prepared_geom; } else { elog(ERROR, "AddPrepGeomHashEntry: This memory context is already in use! (%p)", (void *)pghe.context); } } static PrepGeomHashEntry* GetPrepGeomHashEntry(MemoryContext mcxt) { void **key; PrepGeomHashEntry *he; /* The hash key is the MemoryContext pointer */ key = (void *)&mcxt; /* Return the projection object from the hash */ he = (PrepGeomHashEntry *) hash_search(PrepGeomHash, key, HASH_FIND, NULL); return he; } static void DeletePrepGeomHashEntry(MemoryContext mcxt) { void **key; PrepGeomHashEntry *he; /* The hash key is the MemoryContext pointer */ key = (void *)&mcxt; /* Delete the projection object from the hash */ he = (PrepGeomHashEntry *) hash_search(PrepGeomHash, key, HASH_REMOVE, NULL); if (!he) { elog(ERROR, "DeletePrepGeomHashEntry: There was an error removing the geometry object from this MemoryContext (%p)", (void *)mcxt); } he->prepared_geom = NULL; he->geom = NULL; } /** * Given a generic GeomCache, and a geometry to prepare, * prepare a PrepGeomCache and stick it into the GeomCache->index * slot. The PrepGeomCache includes the original GEOS geometry, * and the GEOS prepared geometry, and a pointer to the * MemoryContext where the callback functions are registered. * * This function is passed into the generic GetGeomCache function * so that it can build an appropriate indexed structure in the case * of a cache hit when there is no indexed structure yet * available to return. */ static int PrepGeomCacheBuilder(const LWGEOM *lwgeom, GeomCache *cache) { PrepGeomCache* prepcache = (PrepGeomCache*)cache; PrepGeomHashEntry* pghe; /* * First time through? allocate the global hash. */ if (!PrepGeomHash) CreatePrepGeomHash(); /* * No callback entry for this statement context yet? Set it up */ if ( ! prepcache->context_callback ) { PrepGeomHashEntry pghe; prepcache->context_callback = MemoryContextCreate(T_AllocSetContext, 8192, &PreparedCacheContextMethods, prepcache->context_statement, "PostGIS Prepared Geometry Context"); pghe.context = prepcache->context_callback; pghe.geom = 0; pghe.prepared_geom = 0; AddPrepGeomHashEntry( pghe ); } /* * Hum, we shouldn't be asked to build a new cache on top of * an existing one. Error. */ if ( prepcache->argnum || prepcache->geom || prepcache->prepared_geom ) { lwerror("PrepGeomCacheBuilder asked to build new prepcache where one already exists."); return LW_FAILURE; } prepcache->geom = LWGEOM2GEOS( lwgeom ); if ( ! prepcache->geom ) return LW_FAILURE; prepcache->prepared_geom = GEOSPrepare( prepcache->geom ); if ( ! prepcache->prepared_geom ) return LW_FAILURE; prepcache->argnum = cache->argnum; /* * In order to find the objects we need to destroy, we keep * extra references in a global hash object. */ pghe = GetPrepGeomHashEntry(prepcache->context_callback); if ( ! pghe ) { lwerror("PrepGeomCacheBuilder failed to find hash entry for context %p", prepcache->context_callback); return LW_FAILURE; } pghe->geom = prepcache->geom; pghe->prepared_geom = prepcache->prepared_geom; return LW_SUCCESS; } /** * This function is passed into the generic GetGeomCache function * in the case of a cache miss, so that it can free the particular * indexed structure being managed. * * In the case of prepared geometry, we want to leave the actual * PrepGeomCache allocated and in place, but ensure that the * GEOS Geometry and PreparedGeometry are freed so we don't leak * memory as we transition from cache hit to miss to hit, etc. */ static int PrepGeomCacheCleaner(GeomCache *cache) { PrepGeomHashEntry* pghe = 0; PrepGeomCache* prepcache = (PrepGeomCache*)cache; if ( ! prepcache ) return LW_FAILURE; /* * Clear out the references to the soon-to-be-freed GEOS objects * from the callback hash entry */ pghe = GetPrepGeomHashEntry(prepcache->context_callback); if ( ! pghe ) { lwerror("PrepGeomCacheCleaner failed to find hash entry for context %p", prepcache->context_callback); return LW_FAILURE; } pghe->geom = 0; pghe->prepared_geom = 0; /* * Free the GEOS objects and free the index tree */ POSTGIS_DEBUGF(3, "PrepGeomCacheFreeer: freeing %p argnum %d", prepcache, prepcache->argnum); GEOSPreparedGeom_destroy( prepcache->prepared_geom ); GEOSGeom_destroy( (GEOSGeometry *)prepcache->geom ); prepcache->argnum = 0; prepcache->prepared_geom = 0; prepcache->geom = 0; return LW_SUCCESS; } static GeomCache* PrepGeomCacheAllocator() { PrepGeomCache* prepcache = palloc(sizeof(PrepGeomCache)); memset(prepcache, 0, sizeof(PrepGeomCache)); prepcache->context_statement = CurrentMemoryContext; prepcache->type = PREP_CACHE_ENTRY; return (GeomCache*)prepcache; } static GeomCacheMethods PrepGeomCacheMethods = { PREP_CACHE_ENTRY, PrepGeomCacheBuilder, PrepGeomCacheCleaner, PrepGeomCacheAllocator }; /** * Given a couple potential geometries and a function * call context, return a prepared structure for one * of them, if such a structure doesn't already exist. * If it doesn't exist, and there is a cache hit, * ensure that the structure is built for next time. * Most of the work is done by the GetGeomCache generic * function, but we pass in call-backs to handle building * and freeing the GEOS PreparedGeometry structures * we need for this particular caching strategy. */ PrepGeomCache* GetPrepGeomCache(FunctionCallInfoData* fcinfo, GSERIALIZED* g1, GSERIALIZED* g2) { return (PrepGeomCache*)GetGeomCache(fcinfo, &PrepGeomCacheMethods, g1, g2); } ����������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_functions_lrs.c����������������������������������������������0000644�0000000�0000000�00000044613�11722777314�021701� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <math.h> #include "postgres.h" #include "fmgr.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" /* * Add a measure dimension to a line, interpolating linearly from the * start value to the end value. * ST_AddMeasure(Geometry, StartMeasure, EndMeasure) returns Geometry */ Datum ST_AddMeasure(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_AddMeasure); Datum ST_AddMeasure(PG_FUNCTION_ARGS) { GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *gout; double start_measure = PG_GETARG_FLOAT8(1); double end_measure = PG_GETARG_FLOAT8(2); LWGEOM *lwin, *lwout; int type = gserialized_get_type(gin); /* Raise an error if input is not a linestring or multilinestring */ if ( type != LINETYPE && type != MULTILINETYPE ) { lwerror("Only LINESTRING and MULTILINESTRING are supported"); PG_RETURN_NULL(); } lwin = lwgeom_from_gserialized(gin); if ( type == LINETYPE ) lwout = (LWGEOM*)lwline_measured_from_lwline((LWLINE*)lwin, start_measure, end_measure); else lwout = (LWGEOM*)lwmline_measured_from_lwmline((LWMLINE*)lwin, start_measure, end_measure); lwgeom_free(lwin); if ( lwout == NULL ) PG_RETURN_NULL(); gout = geometry_serialize(lwout); lwgeom_free(lwout); PG_RETURN_POINTER(gout); } /* * Locate a point along a feature based on a measure value. * ST_LocateAlong(Geometry, Measure, [Offset]) returns Geometry */ Datum ST_LocateAlong(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_LocateAlong); Datum ST_LocateAlong(PG_FUNCTION_ARGS) { GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *gout; LWGEOM *lwin = NULL, *lwout = NULL; double measure = PG_GETARG_FLOAT8(1); double offset = PG_GETARG_FLOAT8(2);; lwin = lwgeom_from_gserialized(gin); lwout = lwgeom_locate_along(lwin, measure, offset); lwgeom_free(lwin); PG_FREE_IF_COPY(gin, 0); if ( ! lwout ) PG_RETURN_NULL(); gout = geometry_serialize(lwout); lwgeom_free(lwout); PG_RETURN_POINTER(gout); } /* * Locate the portion of a line between the specified measures */ Datum ST_LocateBetween(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_LocateBetween); Datum ST_LocateBetween(PG_FUNCTION_ARGS) { GSERIALIZED *geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); double from = PG_GETARG_FLOAT8(1); double to = PG_GETARG_FLOAT8(2); double offset = PG_GETARG_FLOAT8(3); LWCOLLECTION *geom_out = NULL; LWGEOM *line_in = NULL; static char ordinate = 'M'; /* M */ if ( ! gserialized_has_m(geom_in) ) { elog(ERROR,"This function only accepts geometries that have an M dimension."); PG_RETURN_NULL(); } /* This should be a call to ST_LocateAlong! */ if ( to == from ) { PG_RETURN_DATUM(DirectFunctionCall3(ST_LocateAlong, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PG_GETARG_DATUM(3))); } line_in = lwgeom_from_gserialized(geom_in); geom_out = lwgeom_clip_to_ordinate_range(line_in, ordinate, from, to, offset); lwgeom_free(line_in); PG_FREE_IF_COPY(geom_in, 0); if ( ! geom_out ) { elog(ERROR,"lwline_clip_to_ordinate_range returned null"); PG_RETURN_NULL(); } PG_RETURN_POINTER(geometry_serialize((LWGEOM*)geom_out)); } /* * Locate the portion of a line between the specified elevations */ Datum ST_LocateBetweenElevations(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_LocateBetweenElevations); Datum ST_LocateBetweenElevations(PG_FUNCTION_ARGS) { GSERIALIZED *geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); double from = PG_GETARG_FLOAT8(1); double to = PG_GETARG_FLOAT8(2); LWCOLLECTION *geom_out = NULL; LWGEOM *line_in = NULL; static char ordinate = 'Z'; /* Z */ static double offset = 0.0; if ( ! gserialized_has_z(geom_in) ) { elog(ERROR,"This function only accepts LINESTRING or MULTILINESTRING with Z dimensions."); PG_RETURN_NULL(); } line_in = lwgeom_from_gserialized(geom_in); geom_out = lwgeom_clip_to_ordinate_range(line_in, ordinate, from, to, offset); lwgeom_free(line_in); PG_FREE_IF_COPY(geom_in, 0); if ( ! geom_out ) { elog(ERROR,"lwline_clip_to_ordinate_range returned null"); PG_RETURN_NULL(); } PG_RETURN_POINTER(geometry_serialize((LWGEOM*)geom_out)); } Datum ST_InterpolatePoint(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_InterpolatePoint); Datum ST_InterpolatePoint(PG_FUNCTION_ARGS) { GSERIALIZED *gser_line = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *gser_point = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *lwline; LWPOINT *lwpoint; if ( gserialized_get_type(gser_line) != LINETYPE ) { elog(ERROR,"ST_InterpolatePoint: 1st argument isn't a line"); PG_RETURN_NULL(); } if ( gserialized_get_type(gser_point) != POINTTYPE ) { elog(ERROR,"ST_InterpolatePoint: 2st argument isn't a point"); PG_RETURN_NULL(); } if ( gserialized_get_srid(gser_line) != gserialized_get_srid(gser_point) ) { elog(ERROR, "Operation on two geometries with different SRIDs"); PG_RETURN_NULL(); } if ( ! gserialized_has_m(gser_line) ) { elog(ERROR,"ST_InterpolatePoint only accepts geometries that have an M dimension"); PG_RETURN_NULL(); } lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(gser_point)); lwline = lwgeom_from_gserialized(gser_line); PG_RETURN_FLOAT8(lwgeom_interpolate_point(lwline, lwpoint)); } Datum LWGEOM_line_locate_point(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_line_locate_point); Datum LWGEOM_line_locate_point(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWLINE *lwline; LWPOINT *lwpoint; POINTARRAY *pa; POINT4D p, p_proj; double ret; if ( gserialized_get_type(geom1) != LINETYPE ) { elog(ERROR,"line_locate_point: 1st arg isnt a line"); PG_RETURN_NULL(); } if ( gserialized_get_type(geom2) != POINTTYPE ) { elog(ERROR,"line_locate_point: 2st arg isnt a point"); PG_RETURN_NULL(); } if ( gserialized_get_srid(geom1) != gserialized_get_srid(geom2) ) { elog(ERROR, "Operation on two geometries with different SRIDs"); PG_RETURN_NULL(); } lwline = lwgeom_as_lwline(lwgeom_from_gserialized(geom1)); lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom2)); pa = lwline->points; lwpoint_getPoint4d_p(lwpoint, &p); ret = ptarray_locate_point(pa, &p, NULL, &p_proj); PG_RETURN_FLOAT8(ret); } /*********************************************************************** * LEGACY SUPPORT FOR locate_between_measures and locate_along_measure * Deprecated at PostGIS 2.0. To be removed. */ typedef struct { POINTARRAY **ptarrays; uint32 nptarrays; } POINTARRAYSET; static POINTARRAYSET ptarray_locate_between_m( POINTARRAY *ipa, double m0, double m1); static LWGEOM *lwcollection_locate_between_m( LWCOLLECTION *lwcoll, double m0, double m1); static LWGEOM *lwgeom_locate_between_m( LWGEOM *lwin, double m0, double m1); static LWGEOM *lwline_locate_between_m( LWLINE *lwline_in, double m0, double m1); static LWGEOM *lwpoint_locate_between_m( LWPOINT *lwpoint, double m0, double m1); static int clip_seg_by_m_range( POINT4D *p1, POINT4D *p2, double m0, double m1); /* * Clip a segment by a range of measures. * Z and M values are interpolated in case of clipping. * * Returns a bitfield, flags being: * 0x0001 : segment intersects the range * 0x0010 : first point is modified * 0x0100 : second point is modified * * Values: * - 0 segment fully outside the range, no modifications * - 1 segment fully inside the range, no modifications * - 7 segment crosses the range, both points modified. * - 3 first point out, second in, first point modified * - 5 first point in, second out, second point modified */ static int clip_seg_by_m_range(POINT4D *p1, POINT4D *p2, double m0, double m1) { double dM0, dM1, dX, dY, dZ; POINT4D *tmp; int swapped=0; int ret=0; POSTGIS_DEBUGF(3, "m0: %g m1: %g", m0, m1); /* Handle corner case of m values being the same */ if ( p1->m == p2->m ) { /* out of range, no clipping */ if ( p1->m < m0 || p1->m > m1 ) return 0; /* inside range, no clipping */ return 1; } /* * Order points so that p1 has the smaller M */ if ( p1->m > p2->m ) { tmp=p2; p2=p1; p1=tmp; swapped=1; } /* * The M range is not intersected, segment * fully out of range, no clipping. */ if ( p2->m < m0 || p1->m > m1 ) return 0; /* * The segment is fully inside the range, * no clipping. */ if ( p1->m >= m0 && p2->m <= m1 ) return 1; /* * Segment intersects range, lets compute * the proportional location of the two * measures wrt p1/p2 m range. * * if p1 and p2 have the same measure * this should never be reached (either * both inside or both outside) * */ dM0=(m0-p1->m)/(p2->m-p1->m); /* delta-M0 */ dM1=(m1-p2->m)/(p2->m-p1->m); /* delta-M1 */ dX=p2->x-p1->x; dY=p2->y-p1->y; dZ=p2->z-p1->z; POSTGIS_DEBUGF(3, "dM0:%g dM1:%g", dM0, dM1); POSTGIS_DEBUGF(3, "dX:%g dY:%g dZ:%g", dX, dY, dZ); POSTGIS_DEBUGF(3, "swapped: %d", swapped); /* * First point out of range, project * it on the range */ if ( p1->m < m0 ) { /* * To prevent rounding errors, then if m0==m1 and p2 lies within the range, copy * p1 as a direct copy of p2 */ if (m0 == m1 && p2->m <= m1) { memcpy(p1, p2, sizeof(POINT4D)); POSTGIS_DEBUG(3, "Projected p1 on range (as copy of p2)"); } else { /* Otherwise interpolate coordinates */ p1->x += (dX*dM0); p1->y += (dY*dM0); p1->z += (dZ*dM0); p1->m = m0; POSTGIS_DEBUG(3, "Projected p1 on range"); } if ( swapped ) ret |= 0x0100; else ret |= 0x0010; } /* * Second point out of range, project * it on the range */ if ( p2->m > m1 ) { /* * To prevent rounding errors, then if m0==m1 and p1 lies within the range, copy * p2 as a direct copy of p1 */ if (m0 == m1 && p1->m >= m0) { memcpy(p2, p1, sizeof(POINT4D)); POSTGIS_DEBUG(3, "Projected p2 on range (as copy of p1)"); } else { /* Otherwise interpolate coordinates */ p2->x += (dX*dM1); p2->y += (dY*dM1); p2->z += (dZ*dM1); p2->m = m1; POSTGIS_DEBUG(3, "Projected p2 on range"); } if ( swapped ) ret |= 0x0010; else ret |= 0x0100; } /* Clipping occurred */ return ret; } static POINTARRAYSET ptarray_locate_between_m(POINTARRAY *ipa, double m0, double m1) { POINTARRAYSET ret; POINTARRAY *dpa=NULL; int i; ret.nptarrays=0; /* * We allocate space for as many pointarray as * segments in the input POINTARRAY, as worst * case is for each segment to cross the M range * window. * TODO: rework this to reduce used memory */ ret.ptarrays=lwalloc(sizeof(POINTARRAY *)*ipa->npoints-1); POSTGIS_DEBUGF(2, "ptarray_locate...: called for pointarray %x, m0:%g, m1:%g", ipa, m0, m1); for (i=1; i<ipa->npoints; i++) { POINT4D p1, p2; int clipval; getPoint4d_p(ipa, i-1, &p1); getPoint4d_p(ipa, i, &p2); POSTGIS_DEBUGF(3, " segment %d-%d [ %g %g %g %g - %g %g %g %g ]", i-1, i, p1.x, p1.y, p1.z, p1.m, p2.x, p2.y, p2.z, p2.m); clipval = clip_seg_by_m_range(&p1, &p2, m0, m1); /* segment completely outside, nothing to do */ if (! clipval ) continue; POSTGIS_DEBUGF(3, " clipped to: [ %g %g %g %g - %g %g %g %g ] clipval: %x", p1.x, p1.y, p1.z, p1.m, p2.x, p2.y, p2.z, p2.m, clipval); /* If no points have been accumulated so far, then if clipval != 0 the first point must be the start of the intersection */ if (dpa == NULL) { POSTGIS_DEBUGF(3, " 1 creating new POINTARRAY with first point %g,%g,%g,%g", p1.x, p1.y, p1.z, p1.m); dpa = ptarray_construct_empty(FLAGS_GET_Z(ipa->flags), FLAGS_GET_M(ipa->flags), ipa->npoints-i); ptarray_append_point(dpa, &p1, LW_TRUE); } /* Otherwise always add the next point, avoiding duplicates */ if (dpa) ptarray_append_point(dpa, &p2, LW_FALSE); /* * second point has been clipped */ if ( clipval & 0x0100 || i == ipa->npoints-1 ) { POSTGIS_DEBUGF(3, " closing pointarray %x with %d points", dpa, dpa->npoints); ret.ptarrays[ret.nptarrays++] = dpa; dpa = NULL; } } /* * if dpa!=NULL it means we didn't close it yet. * this should never happen. */ if ( dpa != NULL ) lwerror("Something wrong with algorithm"); return ret; } /* * Point is assumed to have an M value. * Return NULL if point is not in the given range (inclusive) * Return an LWPOINT *copy* otherwise. */ static LWGEOM * lwpoint_locate_between_m(LWPOINT *lwpoint, double m0, double m1) { POINT3DM p3dm; POSTGIS_DEBUGF(2, "lwpoint_locate_between called for lwpoint %x", lwpoint); lwpoint_getPoint3dm_p(lwpoint, &p3dm); if ( p3dm.m >= m0 && p3dm.m <= m1) { POSTGIS_DEBUG(3, " lwpoint... returning a clone of input"); return (LWGEOM *)lwpoint_clone(lwpoint); } else { POSTGIS_DEBUG(3, " lwpoint... returning a clone of input"); return NULL; } } /* * Line is assumed to have an M value. * * Return NULL if no parts of the line are in the given range (inclusive) * * Return an LWCOLLECTION with LWLINES and LWPOINT being consecutive * and isolated points on the line falling in the range. * * X,Y and Z (if present) ordinates are interpolated. * */ static LWGEOM * lwline_locate_between_m(LWLINE *lwline_in, double m0, double m1) { POINTARRAY *ipa=lwline_in->points; int i; LWGEOM **geoms; int ngeoms; int outtype; int typeflag=0; /* see flags below */ const int pointflag=0x01; const int lineflag=0x10; POINTARRAYSET paset=ptarray_locate_between_m(ipa, m0, m1); POSTGIS_DEBUGF(2, "lwline_locate_between called for lwline %x", lwline_in); POSTGIS_DEBUGF(3, " ptarray_locate... returned %d pointarrays", paset.nptarrays); if ( paset.nptarrays == 0 ) { return NULL; } ngeoms=paset.nptarrays; /* TODO: rework this to reduce used memory */ geoms=lwalloc(sizeof(LWGEOM *)*ngeoms); for (i=0; i<ngeoms; i++) { LWPOINT *lwpoint; LWLINE *lwline; POINTARRAY *pa=paset.ptarrays[i]; /* This is a point */ if ( pa->npoints == 1 ) { lwpoint = lwpoint_construct(lwline_in->srid, NULL, pa); geoms[i]=(LWGEOM *)lwpoint; typeflag|=pointflag; } /* This is a line */ else if ( pa->npoints > 1 ) { lwline = lwline_construct(lwline_in->srid, NULL, pa); geoms[i]=(LWGEOM *)lwline; typeflag|=lineflag; } /* This is a bug */ else { lwerror("ptarray_locate_between_m returned a POINARRAY set containing POINTARRAY with 0 points"); } } if ( ngeoms == 1 ) { return geoms[0]; } else { /* Choose best type */ if ( typeflag == 1 ) outtype=MULTIPOINTTYPE; else if ( typeflag == 2 ) outtype=MULTILINETYPE; else outtype = COLLECTIONTYPE; return (LWGEOM *)lwcollection_construct(outtype, lwline_in->srid, NULL, ngeoms, geoms); } } /* * Return a fully new allocated LWCOLLECTION * always tagged as COLLECTIONTYPE. */ static LWGEOM * lwcollection_locate_between_m(LWCOLLECTION *lwcoll, double m0, double m1) { int i; int ngeoms=0; LWGEOM **geoms; POSTGIS_DEBUGF(2, "lwcollection_locate_between_m called for lwcoll %x", lwcoll); geoms=lwalloc(sizeof(LWGEOM *)*lwcoll->ngeoms); for (i=0; i<lwcoll->ngeoms; i++) { LWGEOM *sub=lwgeom_locate_between_m(lwcoll->geoms[i], m0, m1); if ( sub != NULL ) geoms[ngeoms++] = sub; } if ( ngeoms == 0 ) return NULL; return (LWGEOM *)lwcollection_construct(COLLECTIONTYPE, lwcoll->srid, NULL, ngeoms, geoms); } /* * Return a fully allocated LWGEOM containing elements * intersected/interpolated with the given M range. * Return NULL if none of the elements fall in the range. * * m0 is assumed to be less-or-equal to m1. * input LWGEOM is assumed to contain an M value. * */ static LWGEOM * lwgeom_locate_between_m(LWGEOM *lwin, double m0, double m1) { POSTGIS_DEBUGF(2, "lwgeom_locate_between called for lwgeom %x", lwin); switch (lwin->type) { case POINTTYPE: return lwpoint_locate_between_m( (LWPOINT *)lwin, m0, m1); case LINETYPE: return lwline_locate_between_m( (LWLINE *)lwin, m0, m1); case MULTIPOINTTYPE: case MULTILINETYPE: case COLLECTIONTYPE: return lwcollection_locate_between_m( (LWCOLLECTION *)lwin, m0, m1); /* Polygon types are not supported */ case POLYGONTYPE: case MULTIPOLYGONTYPE: lwerror("Areal geometries are not supported by locate_between_measures"); return NULL; } lwerror("Unkonwn geometry type (%s:%d)", __FILE__, __LINE__); return NULL; } /* * Return a derived geometry collection value with elements that match * the specified range of measures inclusively. * * Implements SQL/MM ST_LocateBetween(measure, measure) method. * See ISO/IEC CD 13249-3:200x(E) * */ Datum LWGEOM_locate_between_m(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_locate_between_m); Datum LWGEOM_locate_between_m(PG_FUNCTION_ARGS) { GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *gout; double start_measure = PG_GETARG_FLOAT8(1); double end_measure = PG_GETARG_FLOAT8(2); LWGEOM *lwin, *lwout; int hasz = gserialized_has_z(gin); int hasm = gserialized_has_m(gin); int type; elog(NOTICE,"ST_Locate_Between_Measures and ST_Locate_Along_Measure are deprecated. Use ST_LocateAlong and ST_LocateBetween."); if ( end_measure < start_measure ) { lwerror("locate_between_m: 2nd arg must be bigger then 1st arg"); PG_RETURN_NULL(); } /* * Return error if input doesn't have a measure */ if ( ! hasm ) { lwerror("Geometry argument does not have an 'M' ordinate"); PG_RETURN_NULL(); } /* * Raise an error if input is a polygon, a multipolygon * or a collection */ type = gserialized_get_type(gin); if ( type == POLYGONTYPE || type == MULTIPOLYGONTYPE || type == COLLECTIONTYPE ) { lwerror("Areal or Collection types are not supported"); PG_RETURN_NULL(); } lwin = lwgeom_from_gserialized(gin); lwout = lwgeom_locate_between_m(lwin, start_measure, end_measure); lwgeom_free(lwin); if ( lwout == NULL ) { lwout = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, gserialized_get_srid(gin), hasz, hasm); } gout = geometry_serialize(lwout); lwgeom_free(lwout); PG_RETURN_POINTER(gout); } ���������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_backend_api.h������������������������������������������������0000644�0000000�0000000�00000001123�12142775451�021220� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Wrapper around external librairies functions (GEOS/CGAL...) * * Copyright 2012-2013 Oslandia <infos@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef LWGEOM_BACKEND_API_H_ #define LWGEOM_BACKEND_API_H_ 1 void lwgeom_init_backend(void); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/gserialized_gist_2d.c�����������������������������������������������0000644�0000000�0000000�00000165213�12242777576�021364� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: gserialized_gist_2d.c 6519 2010-12-28 00:54:19Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* ** R-Tree Bibliography ** ** [1] A. Guttman. R-tree: a dynamic index structure for spatial searching. ** Proceedings of the ACM SIGMOD Conference, pp 47-57, June 1984. ** [2] C.-H. Ang and T. C. Tan. New linear node splitting algorithm for ** R-Trees. Advances in Spatial Databases - 5th International Symposium, ** 1997 ** [3] N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger. The R*tree: an ** efficient and robust access method for points and rectangles. ** Proceedings of the ACM SIGMOD Conference. June 1990. ** [4] A. Korotkov, "A new double sorting-based node splitting algorithm for R-tree", ** http://syrcose.ispras.ru/2011/files/SYRCoSE2011_Proceedings.pdf#page=36 */ #include "postgres.h" #include "access/gist.h" /* For GiST */ #include "access/itup.h" #include "access/skey.h" #include "../postgis_config.h" #include "liblwgeom.h" /* For standard geometry types. */ #include "lwgeom_pg.h" /* For debugging macros. */ #include "gserialized_gist.h" /* For utility functions. */ #include "liblwgeom_internal.h" /* For MAXFLOAT */ /* ** When is a node split not so good? If more than 90% of the entries ** end up in one of the children. */ #define LIMIT_RATIO 0.1 /* ** 0 == don't use it ** 1 == use it */ #define KOROTKOV_SPLIT 1 /* ** For debugging */ #if POSTGIS_DEBUG_LEVEL > 0 static int g2d_counter_leaf = 0; static int g2d_counter_internal = 0; #endif /* ** GiST 2D key stubs */ Datum box2df_out(PG_FUNCTION_ARGS); Datum box2df_in(PG_FUNCTION_ARGS); /* ** GiST 2D index function prototypes */ Datum gserialized_gist_consistent_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_compress_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_decompress_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_penalty_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_picksplit_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_union_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_same_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_distance_2d(PG_FUNCTION_ARGS); /* ** GiST 2D operator prototypes */ Datum gserialized_same_2d(PG_FUNCTION_ARGS); Datum gserialized_within_2d(PG_FUNCTION_ARGS); Datum gserialized_contains_2d(PG_FUNCTION_ARGS); Datum gserialized_overlaps_2d(PG_FUNCTION_ARGS); Datum gserialized_left_2d(PG_FUNCTION_ARGS); Datum gserialized_right_2d(PG_FUNCTION_ARGS); Datum gserialized_above_2d(PG_FUNCTION_ARGS); Datum gserialized_below_2d(PG_FUNCTION_ARGS); Datum gserialized_overleft_2d(PG_FUNCTION_ARGS); Datum gserialized_overright_2d(PG_FUNCTION_ARGS); Datum gserialized_overabove_2d(PG_FUNCTION_ARGS); Datum gserialized_overbelow_2d(PG_FUNCTION_ARGS); Datum gserialized_distance_box_2d(PG_FUNCTION_ARGS); Datum gserialized_distance_centroid_2d(PG_FUNCTION_ARGS); /* ** true/false test function type */ typedef bool (*box2df_predicate)(const BOX2DF *a, const BOX2DF *b); #if POSTGIS_DEBUG_LEVEL > 0 static char* box2df_to_string(const BOX2DF *a) { char *rv = NULL; if ( a == NULL ) return pstrdup("<NULLPTR>"); rv = palloc(128); sprintf(rv, "BOX2DF(%.12g %.12g, %.12g %.12g)", a->xmin, a->ymin, a->xmax, a->ymax); return rv; } #endif /* Allocate a new copy of BOX2DF */ static BOX2DF* box2df_copy(BOX2DF *b) { BOX2DF *c = (BOX2DF*)palloc(sizeof(BOX2DF)); memcpy((void*)c, (void*)b, sizeof(BOX2DF)); POSTGIS_DEBUGF(5, "copied box2df (%p) to box2df (%p)", b, c); return c; } /* Enlarge b_union to contain b_new. If b_new contains more dimensions than b_union, expand b_union to contain those dimensions. */ static void box2df_merge(BOX2DF *b_union, BOX2DF *b_new) { POSTGIS_DEBUGF(5, "merging %s with %s", box2df_to_string(b_union), box2df_to_string(b_new)); /* Adjust minimums */ if (b_union->xmin > b_new->xmin || isnan(b_union->xmin)) b_union->xmin = b_new->xmin; if (b_union->ymin > b_new->ymin || isnan(b_union->ymin)) b_union->ymin = b_new->ymin; /* Adjust maximums */ if (b_union->xmax < b_new->xmax || isnan(b_union->xmax)) b_union->xmax = b_new->xmax; if (b_union->ymax < b_new->ymax || isnan(b_union->ymax)) b_union->ymax = b_new->ymax; POSTGIS_DEBUGF(5, "merge complete %s", box2df_to_string(b_union)); return; } #if KOROTKOV_SPLIT < 1 static bool box2df_intersection(const BOX2DF *a, const BOX2DF *b, BOX2DF *n) { POSTGIS_DEBUGF(5, "calculating intersection of %s with %s", box2df_to_string(a), box2df_to_string(b)); if( a == NULL || b == NULL || n == NULL ) return FALSE; n->xmax = Min(a->xmax, b->xmax); n->ymax = Min(a->ymax, b->ymax); n->xmin = Max(a->xmin, b->xmin); n->ymin = Max(a->ymin, b->ymin); POSTGIS_DEBUGF(5, "intersection is %s", box2df_to_string(n)); if ( (n->xmax < n->xmin) || (n->ymax < n->ymin) ) return FALSE; return TRUE; } #endif static float box2df_size(const BOX2DF *a) { float result; if ( a == NULL ) return (float)0.0; if ( (a->xmax <= a->xmin) || (a->ymax <= a->ymin) ) { result = (float) 0.0; } else { result = (((double) a->xmax)-((double) a->xmin)) * (((double) a->ymax)-((double) a->ymin)); } return result; } static float box2df_union_size(const BOX2DF *a, const BOX2DF *b) { float result; POSTGIS_DEBUG(5,"entered function"); if ( a == NULL && b == NULL ) { elog(ERROR, "box2df_union_size received two null arguments"); return 0.0; } if ( a == NULL ) return box2df_size(b); if ( b == NULL ) return box2df_size(a); result = ((double)Max(a->xmax,b->xmax) - (double)Min(a->xmin,b->xmin)) * ((double)Max(a->ymax,b->ymax) - (double)Min(a->ymin,b->ymin)); POSTGIS_DEBUGF(5, "union size of %s and %s is %.8g", box2df_to_string(a), box2df_to_string(b), result); return result; } /* Convert a double-based GBOX into a float-based BOX2DF, ensuring the float box is larger than the double box */ static inline int box2df_from_gbox_p(GBOX *box, BOX2DF *a) { a->xmin = next_float_down(box->xmin); a->xmax = next_float_up(box->xmax); a->ymin = next_float_down(box->ymin); a->ymax = next_float_up(box->ymax); return LW_SUCCESS; } /*********************************************************************** ** BOX3DF tests for 2D index operators. */ /* Ensure all minimums are below maximums. */ static inline void box2df_validate(BOX2DF *b) { float tmp; POSTGIS_DEBUGF(5,"validating box2df (%s)", box2df_to_string(b)); if ( b->xmax < b->xmin ) { tmp = b->xmin; b->xmin = b->xmax; b->xmax = tmp; } if ( b->ymax < b->ymin ) { tmp = b->ymin; b->ymin = b->ymax; b->ymax = tmp; } return; } static bool box2df_overlaps(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ if ( (a->xmin > b->xmax) || (b->xmin > a->xmax) || (a->ymin > b->ymax) || (b->ymin > a->ymax) ) { return FALSE; } return TRUE; } static bool box2df_contains(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ if ( (a->xmin > b->xmin) || (a->xmax < b->xmax) || (a->ymin > b->ymin) || (a->ymax < b->ymax) ) { return FALSE; } return TRUE; } static bool box2df_within(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ POSTGIS_DEBUG(5, "entered function"); return box2df_contains(b,a); } static bool box2df_equals(const BOX2DF *a, const BOX2DF *b) { if ( a && b ) { if ( (a->xmin != b->xmin) || (a->xmax != b->xmax) || (a->ymin != b->ymin) || (a->ymax != b->ymax) ) { return FALSE; } return TRUE; } else if ( a || b ) { /* one empty, one not */ return FALSE; } else { /* both empty */ return TRUE; } } static bool box2df_overleft(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.xmax <= b.xmax */ return a->xmax <= b->xmax; } static bool box2df_left(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.xmax < b.xmin */ return a->xmax < b->xmin; } static bool box2df_right(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.xmin > b.xmax */ return a->xmin > b->xmax; } static bool box2df_overright(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.xmin >= b.xmin */ return a->xmin >= b->xmin; } static bool box2df_overbelow(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.ymax <= b.ymax */ return a->ymax <= b->ymax; } static bool box2df_below(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.ymax < b.ymin */ return a->ymax < b->ymin; } static bool box2df_above(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.ymin > b.ymax */ return a->ymin > b->ymax; } static bool box2df_overabove(const BOX2DF *a, const BOX2DF *b) { if ( ! a || ! b ) return FALSE; /* TODO: might be smarter for EMPTY */ /* a.ymin >= b.ymin */ return a->ymin >= b->ymin; } /** * Calculate the centroid->centroid distance between the boxes. * We return the square distance to avoid a call to sqrt. */ static double box2df_distance_leaf_centroid(const BOX2DF *a, const BOX2DF *b) { /* The centroid->centroid distance between the boxes */ double a_x = (a->xmax + a->xmin) / 2.0; double a_y = (a->ymax + a->ymin) / 2.0; double b_x = (b->xmax + b->xmin) / 2.0; double b_y = (b->ymax + b->ymin) / 2.0; /* This "distance" is only used for comparisons, */ /* so for speed we drop contants and skip the sqrt step. */ return sqrt((a_x - b_x) * (a_x - b_x) + (a_y - b_y) * (a_y - b_y)); } /** * Calculate the The node_box_edge->query_centroid distance * between the boxes. */ static double box2df_distance_node_centroid(const BOX2DF *node, const BOX2DF *query) { BOX2DF q; double qx, qy; double d = 0.0; /* Turn query into point */ q.xmin = q.xmax = (query->xmin + query->xmax) / 2.0; q.ymin = q.ymax = (query->ymin + query->ymax) / 2.0; qx = q.xmin; qy = q.ymin; /* Check for overlap */ if ( box2df_overlaps(node, &q) == LW_TRUE ) return 0.0; /* Above or below */ if ( qx >= node->xmin && qx <= node->xmax ) { if( qy > node->ymax ) d = qy - node->ymax; else if ( qy < node->ymin ) d = node->ymin - qy; return d; } /* Left or right */ else if ( qy >= node->ymin && qy <= node->ymax ) { if ( qx > node->xmax ) d = qx - node->xmax; else if ( qx < node->xmin ) d = node->xmin - qx; return d; } /* Corner quadrants */ else { /* below/left of xmin/ymin */ if ( qx < node->xmin && qy < node->ymin ) { d = (node->xmin - qx) * (node->xmin - qx) + (node->ymin - qy) * (node->ymin - qy); } /* above/left of xmin/ymax */ else if ( qx < node->xmin && qy > node->ymax ) { d = (node->xmin - qx) * (node->xmin - qx) + (node->ymax - qy) * (node->ymax - qy); } /* above/right of xmax/ymax */ else if ( qx > node->xmax && qy > node->ymax ) { d = (node->xmax - qx) * (node->xmax - qx) + (node->ymax - qy) * (node->ymax - qy); } /* below/right of xmax/ymin */ else if ( qx > node->xmin && qy < node->ymin ) { d = (node->xmax - qx) * (node->xmax - qx) + (node->ymin - qy) * (node->ymin - qy); } else { /*ERROR*/ } } return sqrt(d); } /* Quick distance function */ static inline double pt_distance(double ax, double ay, double bx, double by) { return sqrt((ax - bx) * (ax - bx) + (ay - by) * (ay - by)); } /** * Calculate the box->box distance. */ static double box2df_distance(const BOX2DF *a, const BOX2DF *b) { /* Check for overlap */ if ( box2df_overlaps(a, b) ) return 0.0; if ( box2df_left(a, b) ) { if ( box2df_above(a, b) ) return pt_distance(a->xmax, a->ymin, b->xmin, b->ymax); if ( box2df_below(a, b) ) return pt_distance(a->xmax, a->ymax, b->xmin, b->ymin); else return b->xmin - a->xmax; } if ( box2df_right(a, b) ) { if ( box2df_above(a, b) ) return pt_distance(a->xmin, a->ymin, b->xmax, b->ymax); if ( box2df_below(a, b) ) return pt_distance(a->xmin, a->ymax, b->xmax, b->ymin); else return a->xmin - b->xmax; } if ( box2df_above(a, b) ) { if ( box2df_left(a, b) ) return pt_distance(a->xmax, a->ymin, b->xmin, b->ymax); if ( box2df_right(a, b) ) return pt_distance(a->xmin, a->ymin, b->xmax, b->ymax); else return a->ymin - b->ymax; } if ( box2df_below(a, b) ) { if ( box2df_left(a, b) ) return pt_distance(a->xmax, a->ymax, b->xmin, b->ymin); if ( box2df_right(a, b) ) return pt_distance(a->xmin, a->ymax, b->xmax, b->ymin); else return b->ymin - a->ymax; } return MAXFLOAT; } /** * Peak into a #GSERIALIZED datum to find the bounding box. If the * box is there, copy it out and return it. If not, calculate the box from the * full object and return the box based on that. If no box is available, * return #LW_FAILURE, otherwise #LW_SUCCESS. */ static int gserialized_datum_get_box2df_p(Datum gsdatum, BOX2DF *box2df) { GSERIALIZED *gpart; uint8_t flags; int result = LW_SUCCESS; POSTGIS_DEBUG(4, "entered function"); /* ** The most info we need is the 8 bytes of serialized header plus the ** of floats necessary to hold the bounding box. */ if (VARATT_IS_EXTENDED(gsdatum)) { gpart = (GSERIALIZED*)PG_DETOAST_DATUM_SLICE(gsdatum, 0, 8 + sizeof(BOX2DF)); } else { gpart = (GSERIALIZED*)PG_DETOAST_DATUM(gsdatum); } flags = gpart->flags; POSTGIS_DEBUGF(4, "got flags %d", gpart->flags); /* Do we even have a serialized bounding box? */ if ( FLAGS_GET_BBOX(flags) ) { /* Yes! Copy it out into the box! */ POSTGIS_DEBUG(4, "copying box out of serialization"); memcpy(box2df, gpart->data, sizeof(BOX2DF)); result = LW_SUCCESS; } else { /* No, we need to calculate it from the full object. */ GBOX gbox; GSERIALIZED *g = (GSERIALIZED*)PG_DETOAST_DATUM(gsdatum); LWGEOM *lwgeom = lwgeom_from_gserialized(g); if ( lwgeom_calculate_gbox(lwgeom, &gbox) == LW_FAILURE ) { POSTGIS_DEBUG(4, "could not calculate bbox, returning failure"); lwgeom_free(lwgeom); return LW_FAILURE; } lwgeom_free(lwgeom); result = box2df_from_gbox_p(&gbox, box2df); } if ( result == LW_SUCCESS ) { POSTGIS_DEBUGF(4, "got box2df %s", box2df_to_string(box2df)); } return result; } /** * Support function. Based on two datums return true if * they satisfy the predicate and false otherwise. */ static int gserialized_datum_predicate_2d(Datum gs1, Datum gs2, box2df_predicate predicate) { BOX2DF b1, b2, *br1=NULL, *br2=NULL; POSTGIS_DEBUG(3, "entered function"); if (gserialized_datum_get_box2df_p(gs1, &b1) == LW_SUCCESS) br1 = &b1; if (gserialized_datum_get_box2df_p(gs2, &b2) == LW_SUCCESS) br2 = &b2; if ( predicate(br1, br2) ) { POSTGIS_DEBUGF(3, "got boxes %s and %s", br1 ? box2df_to_string(&b1) : "(null)", br2 ? box2df_to_string(&b2) : "(null)"); return LW_TRUE; } return LW_FALSE; } /*********************************************************************** * GiST 2-D Index Operator Functions */ PG_FUNCTION_INFO_V1(gserialized_distance_centroid_2d); Datum gserialized_distance_centroid_2d(PG_FUNCTION_ARGS) { BOX2DF b1, b2; Datum gs1 = PG_GETARG_DATUM(0); Datum gs2 = PG_GETARG_DATUM(1); POSTGIS_DEBUG(3, "entered function"); /* Must be able to build box for each argument (ie, not empty geometry). */ if ( (gserialized_datum_get_box2df_p(gs1, &b1) == LW_SUCCESS) && (gserialized_datum_get_box2df_p(gs2, &b2) == LW_SUCCESS) ) { double distance = box2df_distance_leaf_centroid(&b1, &b2); POSTGIS_DEBUGF(3, "got boxes %s and %s", box2df_to_string(&b1), box2df_to_string(&b2)); PG_RETURN_FLOAT8(distance); } PG_RETURN_FLOAT8(MAXFLOAT); } PG_FUNCTION_INFO_V1(gserialized_distance_box_2d); Datum gserialized_distance_box_2d(PG_FUNCTION_ARGS) { BOX2DF b1, b2; Datum gs1 = PG_GETARG_DATUM(0); Datum gs2 = PG_GETARG_DATUM(1); POSTGIS_DEBUG(3, "entered function"); /* Must be able to build box for each argument (ie, not empty geometry). */ if ( (gserialized_datum_get_box2df_p(gs1, &b1) == LW_SUCCESS) && (gserialized_datum_get_box2df_p(gs2, &b2) == LW_SUCCESS) ) { double distance = box2df_distance(&b1, &b2); POSTGIS_DEBUGF(3, "got boxes %s and %s", box2df_to_string(&b1), box2df_to_string(&b2)); PG_RETURN_FLOAT8(distance); } PG_RETURN_FLOAT8(MAXFLOAT); } PG_FUNCTION_INFO_V1(gserialized_same_2d); Datum gserialized_same_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_equals) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_within_2d); Datum gserialized_within_2d(PG_FUNCTION_ARGS) { POSTGIS_DEBUG(3, "entered function"); if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_within) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_contains_2d); Datum gserialized_contains_2d(PG_FUNCTION_ARGS) { POSTGIS_DEBUG(3, "entered function"); if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_contains) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_overlaps_2d); Datum gserialized_overlaps_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_overlaps) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_left_2d); Datum gserialized_left_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_left) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_right_2d); Datum gserialized_right_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_right) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_above_2d); Datum gserialized_above_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_above) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_below_2d); Datum gserialized_below_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_below) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_overleft_2d); Datum gserialized_overleft_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_overleft) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_overright_2d); Datum gserialized_overright_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_overright) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_overabove_2d); Datum gserialized_overabove_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_overabove) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } PG_FUNCTION_INFO_V1(gserialized_overbelow_2d); Datum gserialized_overbelow_2d(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate_2d(PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), box2df_overbelow) == LW_TRUE ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } /*********************************************************************** * GiST Index Support Functions */ /* ** GiST support function. Given a geography, return a "compressed" ** version. In this case, we convert the geography into a geocentric ** bounding box. If the geography already has the box embedded in it ** we pull that out and hand it back. */ PG_FUNCTION_INFO_V1(gserialized_gist_compress_2d); Datum gserialized_gist_compress_2d(PG_FUNCTION_ARGS) { GISTENTRY *entry_in = (GISTENTRY*)PG_GETARG_POINTER(0); GISTENTRY *entry_out = NULL; BOX2DF bbox_out; int result = LW_SUCCESS; POSTGIS_DEBUG(4, "[GIST] 'compress' function called"); /* ** Not a leaf key? There's nothing to do. ** Return the input unchanged. */ if ( ! entry_in->leafkey ) { POSTGIS_DEBUG(4, "[GIST] non-leafkey entry, returning input unaltered"); PG_RETURN_POINTER(entry_in); } POSTGIS_DEBUG(4, "[GIST] processing leafkey input"); entry_out = palloc(sizeof(GISTENTRY)); /* ** Null key? Make a copy of the input entry and ** return. */ if ( DatumGetPointer(entry_in->key) == NULL ) { POSTGIS_DEBUG(4, "[GIST] leafkey is null"); gistentryinit(*entry_out, (Datum) 0, entry_in->rel, entry_in->page, entry_in->offset, FALSE); POSTGIS_DEBUG(4, "[GIST] returning copy of input"); PG_RETURN_POINTER(entry_out); } /* Extract our index key from the GiST entry. */ result = gserialized_datum_get_box2df_p(entry_in->key, &bbox_out); /* Is the bounding box valid (non-empty, non-infinite)? If not, return input uncompressed. */ if ( result == LW_FAILURE ) { POSTGIS_DEBUG(4, "[GIST] empty geometry!"); PG_RETURN_POINTER(entry_in); } POSTGIS_DEBUGF(4, "[GIST] got entry_in->key: %s", box2df_to_string(&bbox_out)); /* Check all the dimensions for finite values */ if ( ! isfinite(bbox_out.xmax) || ! isfinite(bbox_out.xmin) || ! isfinite(bbox_out.ymax) || ! isfinite(bbox_out.ymin) ) { POSTGIS_DEBUG(4, "[GIST] infinite geometry!"); PG_RETURN_POINTER(entry_in); } /* Enure bounding box has minimums below maximums. */ box2df_validate(&bbox_out); /* Prepare GISTENTRY for return. */ gistentryinit(*entry_out, PointerGetDatum(box2df_copy(&bbox_out)), entry_in->rel, entry_in->page, entry_in->offset, FALSE); /* Return GISTENTRY. */ POSTGIS_DEBUG(4, "[GIST] 'compress' function complete"); PG_RETURN_POINTER(entry_out); } /* ** GiST support function. ** Decompress an entry. Unused for geography, so we return. */ PG_FUNCTION_INFO_V1(gserialized_gist_decompress_2d); Datum gserialized_gist_decompress_2d(PG_FUNCTION_ARGS) { POSTGIS_DEBUG(5, "[GIST] 'decompress' function called"); /* We don't decompress. Just return the input. */ PG_RETURN_POINTER(PG_GETARG_POINTER(0)); } /* ** GiST support function. Called from gserialized_gist_consistent below. */ static inline bool gserialized_gist_consistent_leaf_2d(BOX2DF *key, BOX2DF *query, StrategyNumber strategy) { bool retval; POSTGIS_DEBUGF(4, "[GIST] leaf consistent, strategy [%d], count[%i]", strategy, g2d_counter_leaf++); switch (strategy) { /* Basic overlaps */ case RTOverlapStrategyNumber: retval = (bool) box2df_overlaps(key, query); break; case RTSameStrategyNumber: retval = (bool) box2df_equals(key, query); break; case RTContainsStrategyNumber: case RTOldContainsStrategyNumber: retval = (bool) box2df_contains(key, query); break; case RTContainedByStrategyNumber: case RTOldContainedByStrategyNumber: retval = (bool) box2df_contains(query, key); break; /* To one side */ case RTAboveStrategyNumber: retval = (bool) box2df_above(key, query); break; case RTBelowStrategyNumber: retval = (bool) box2df_below(key, query); break; case RTRightStrategyNumber: retval = (bool) box2df_right(key, query); break; case RTLeftStrategyNumber: retval = (bool) box2df_left(key, query); break; /* Overlapping to one side */ case RTOverAboveStrategyNumber: retval = (bool) box2df_overabove(key, query); break; case RTOverBelowStrategyNumber: retval = (bool) box2df_overbelow(key, query); break; case RTOverRightStrategyNumber: retval = (bool) box2df_overright(key, query); break; case RTOverLeftStrategyNumber: retval = (bool) box2df_overleft(key, query); break; default: retval = FALSE; } return (retval); } /* ** GiST support function. Called from gserialized_gist_consistent below. */ static inline bool gserialized_gist_consistent_internal_2d(BOX2DF *key, BOX2DF *query, StrategyNumber strategy) { bool retval; POSTGIS_DEBUGF(4, "[GIST] internal consistent, strategy [%d], count[%i], query[%s], key[%s]", strategy, g2d_counter_internal++, box2df_to_string(query), box2df_to_string(key) ); switch (strategy) { /* Basic overlaps */ case RTOverlapStrategyNumber: retval = (bool) box2df_overlaps(key, query); break; case RTSameStrategyNumber: case RTContainsStrategyNumber: case RTOldContainsStrategyNumber: retval = (bool) box2df_contains(key, query); break; case RTContainedByStrategyNumber: case RTOldContainedByStrategyNumber: retval = (bool) box2df_overlaps(key, query); break; /* To one side */ case RTAboveStrategyNumber: retval = (bool)(!box2df_overbelow(key, query)); break; case RTBelowStrategyNumber: retval = (bool)(!box2df_overabove(key, query)); break; case RTRightStrategyNumber: retval = (bool)(!box2df_overleft(key, query)); break; case RTLeftStrategyNumber: retval = (bool)(!box2df_overright(key, query)); break; /* Overlapping to one side */ case RTOverAboveStrategyNumber: retval = (bool)(!box2df_below(key, query)); break; case RTOverBelowStrategyNumber: retval = (bool)(!box2df_above(key, query)); break; case RTOverRightStrategyNumber: retval = (bool)(!box2df_left(key, query)); break; case RTOverLeftStrategyNumber: retval = (bool)(!box2df_right(key, query)); break; default: retval = FALSE; } return (retval); } /* ** GiST support function. Take in a query and an entry and see what the ** relationship is, based on the query strategy. */ PG_FUNCTION_INFO_V1(gserialized_gist_consistent_2d); Datum gserialized_gist_consistent_2d(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY*) PG_GETARG_POINTER(0); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); bool result; BOX2DF query_gbox_index; /* PostgreSQL 8.4 and later require the RECHECK flag to be set here, rather than being supplied as part of the operator class definition */ bool *recheck = (bool *) PG_GETARG_POINTER(4); /* We set recheck to false to avoid repeatedly pulling every "possibly matched" geometry out during index scans. For cases when the geometries are large, rechecking can make things twice as slow. */ *recheck = false; POSTGIS_DEBUG(4, "[GIST] 'consistent' function called"); /* Quick sanity check on query argument. */ if ( DatumGetPointer(PG_GETARG_DATUM(1)) == NULL ) { POSTGIS_DEBUG(4, "[GIST] null query pointer (!?!), returning false"); PG_RETURN_BOOL(FALSE); /* NULL query! This is screwy! */ } /* Quick sanity check on entry key. */ if ( DatumGetPointer(entry->key) == NULL ) { POSTGIS_DEBUG(4, "[GIST] null index entry, returning false"); PG_RETURN_BOOL(FALSE); /* NULL entry! */ } /* Null box should never make this far. */ if ( gserialized_datum_get_box2df_p(PG_GETARG_DATUM(1), &query_gbox_index) == LW_FAILURE ) { POSTGIS_DEBUG(4, "[GIST] null query_gbox_index!"); PG_RETURN_BOOL(FALSE); } /* Treat leaf node tests different from internal nodes */ if (GIST_LEAF(entry)) { result = gserialized_gist_consistent_leaf_2d( (BOX2DF*)DatumGetPointer(entry->key), &query_gbox_index, strategy); } else { result = gserialized_gist_consistent_internal_2d( (BOX2DF*)DatumGetPointer(entry->key), &query_gbox_index, strategy); } PG_RETURN_BOOL(result); } /* ** GiST support function. Take in a query and an entry and return the "distance" ** between them. ** ** Given an index entry p and a query value q, this function determines the ** index entry's "distance" from the query value. This function must be ** supplied if the operator class contains any ordering operators. A query ** using the ordering operator will be implemented by returning index entries ** with the smallest "distance" values first, so the results must be consistent ** with the operator's semantics. For a leaf index entry the result just ** represents the distance to the index entry; for an internal tree node, the ** result must be the smallest distance that any child entry could have. ** ** Strategy 13 = centroid-based distance tests ** Strategy 14 = box-based distance tests */ PG_FUNCTION_INFO_V1(gserialized_gist_distance_2d); Datum gserialized_gist_distance_2d(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY*) PG_GETARG_POINTER(0); BOX2DF query_box; BOX2DF *entry_box; StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); double distance; POSTGIS_DEBUG(4, "[GIST] 'distance' function called"); /* We are using '13' as the gist distance-betweeen-centroids strategy number * and '14' as the gist distance-between-boxes strategy number */ if ( strategy != 13 && strategy != 14 ) { elog(ERROR, "unrecognized strategy number: %d", strategy); PG_RETURN_FLOAT8(MAXFLOAT); } /* Null box should never make this far. */ if ( gserialized_datum_get_box2df_p(PG_GETARG_DATUM(1), &query_box) == LW_FAILURE ) { POSTGIS_DEBUG(4, "[GIST] null query_gbox_index!"); PG_RETURN_FLOAT8(MAXFLOAT); } /* Get the entry box */ entry_box = (BOX2DF*)DatumGetPointer(entry->key); /* Box-style distance test */ if ( strategy == 14 ) { distance = (double)box2df_distance(entry_box, &query_box); PG_RETURN_FLOAT8(distance); } /* Treat leaf node tests different from internal nodes */ if (GIST_LEAF(entry)) { /* Calculate distance to leaves */ distance = (double)box2df_distance_leaf_centroid(entry_box, &query_box); } else { /* Calculate distance for internal nodes */ distance = (double)box2df_distance_node_centroid(entry_box, &query_box); } PG_RETURN_FLOAT8(distance); } /* ** GiST support function. Calculate the "penalty" cost of adding this entry into an existing entry. ** Calculate the change in volume of the old entry once the new entry is added. ** TODO: Re-evaluate this in light of R*Tree penalty approaches. */ PG_FUNCTION_INFO_V1(gserialized_gist_penalty_2d); Datum gserialized_gist_penalty_2d(PG_FUNCTION_ARGS) { GISTENTRY *origentry = (GISTENTRY*) PG_GETARG_POINTER(0); GISTENTRY *newentry = (GISTENTRY*) PG_GETARG_POINTER(1); float *result = (float*) PG_GETARG_POINTER(2); BOX2DF *gbox_index_orig, *gbox_index_new; float size_union, size_orig; POSTGIS_DEBUG(4, "[GIST] 'penalty' function called"); gbox_index_orig = (BOX2DF*)DatumGetPointer(origentry->key); gbox_index_new = (BOX2DF*)DatumGetPointer(newentry->key); /* Drop out if we're dealing with null inputs. Shouldn't happen. */ if ( (gbox_index_orig == NULL) && (gbox_index_new == NULL) ) { POSTGIS_DEBUG(4, "[GIST] both inputs NULL! returning penalty of zero"); *result = 0.0; PG_RETURN_FLOAT8(*result); } /* Calculate the size difference of the boxes. */ size_union = box2df_union_size(gbox_index_orig, gbox_index_new); size_orig = box2df_size(gbox_index_orig); *result = size_union - size_orig; POSTGIS_DEBUGF(4, "[GIST] 'penalty', union size (%.12f), original size (%.12f), penalty (%.12f)", size_union, size_orig, *result); PG_RETURN_POINTER(result); } /* ** GiST support function. Merge all the boxes in a page into one master box. */ PG_FUNCTION_INFO_V1(gserialized_gist_union_2d); Datum gserialized_gist_union_2d(PG_FUNCTION_ARGS) { GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0); int *sizep = (int *) PG_GETARG_POINTER(1); /* Size of the return value */ int numranges, i; BOX2DF *box_cur, *box_union; POSTGIS_DEBUG(4, "[GIST] 'union' function called"); numranges = entryvec->n; box_cur = (BOX2DF*) DatumGetPointer(entryvec->vector[0].key); box_union = box2df_copy(box_cur); for ( i = 1; i < numranges; i++ ) { box_cur = (BOX2DF*) DatumGetPointer(entryvec->vector[i].key); box2df_merge(box_union, box_cur); } *sizep = sizeof(BOX2DF); POSTGIS_DEBUGF(4, "[GIST] 'union', numranges(%i), pageunion %s", numranges, box2df_to_string(box_union)); PG_RETURN_POINTER(box_union); } /* ** GiST support function. Test equality of keys. */ PG_FUNCTION_INFO_V1(gserialized_gist_same_2d); Datum gserialized_gist_same_2d(PG_FUNCTION_ARGS) { BOX2DF *b1 = (BOX2DF*)PG_GETARG_POINTER(0); BOX2DF *b2 = (BOX2DF*)PG_GETARG_POINTER(1); bool *result = (bool*)PG_GETARG_POINTER(2); POSTGIS_DEBUG(4, "[GIST] 'same' function called"); *result = box2df_equals(b1, b2); PG_RETURN_POINTER(result); } #if KOROTKOV_SPLIT > 0 /* * Adjust BOX2DF b boundaries with insertion of addon. */ static void adjustBox(BOX2DF *b, BOX2DF *addon) { if (b->xmax < addon->xmax || isnan(b->xmax)) b->xmax = addon->xmax; if (b->xmin > addon->xmin || isnan(b->xmin)) b->xmin = addon->xmin; if (b->ymax < addon->ymax || isnan(b->ymax)) b->ymax = addon->ymax; if (b->ymin > addon->ymin || isnan(b->ymin)) b->ymin = addon->ymin; } /* * Trivial split: half of entries will be placed on one page * and another half - to another */ static void fallbackSplit(GistEntryVector *entryvec, GIST_SPLITVEC *v) { OffsetNumber i, maxoff; BOX2DF *unionL = NULL, *unionR = NULL; int nbytes; maxoff = entryvec->n - 1; nbytes = (maxoff + 2) * sizeof(OffsetNumber); v->spl_left = (OffsetNumber *) palloc(nbytes); v->spl_right = (OffsetNumber *) palloc(nbytes); v->spl_nleft = v->spl_nright = 0; for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { BOX2DF *cur = (BOX2DF *) DatumGetPointer(entryvec->vector[i].key); if (i <= (maxoff - FirstOffsetNumber + 1) / 2) { v->spl_left[v->spl_nleft] = i; if (unionL == NULL) { unionL = (BOX2DF *) palloc(sizeof(BOX2DF)); *unionL = *cur; } else adjustBox(unionL, cur); v->spl_nleft++; } else { v->spl_right[v->spl_nright] = i; if (unionR == NULL) { unionR = (BOX2DF *) palloc(sizeof(BOX2DF)); *unionR = *cur; } else adjustBox(unionR, cur); v->spl_nright++; } } if (v->spl_ldatum_exists) adjustBox(unionL, (BOX2DF *) DatumGetPointer(v->spl_ldatum)); v->spl_ldatum = BoxPGetDatum(unionL); if (v->spl_rdatum_exists) adjustBox(unionR, (BOX2DF *) DatumGetPointer(v->spl_rdatum)); v->spl_rdatum = BoxPGetDatum(unionR); v->spl_ldatum_exists = v->spl_rdatum_exists = false; } /* * Represents information about an entry that can be placed to either group * without affecting overlap over selected axis ("common entry"). */ typedef struct { /* Index of entry in the initial array */ int index; /* Delta between penalties of entry insertion into different groups */ float delta; } CommonEntry; /* * Context for g_box_consider_split. Contains information about currently * selected split and some general information. */ typedef struct { int entriesCount; /* total number of entries being split */ BOX2DF boundingBox; /* minimum bounding box across all entries */ /* Information about currently selected split follows */ bool first; /* true if no split was selected yet */ float leftUpper; /* upper bound of left interval */ float rightLower; /* lower bound of right interval */ float4 ratio; float4 overlap; int dim; /* axis of this split */ float range; /* width of general MBR projection to the * selected axis */ } ConsiderSplitContext; /* * Interval represents projection of box to axis. */ typedef struct { float lower, upper; } SplitInterval; /* * Interval comparison function by lower bound of the interval; */ static int interval_cmp_lower(const void *i1, const void *i2) { float lower1 = ((const SplitInterval *) i1)->lower, lower2 = ((const SplitInterval *) i2)->lower; if (isnan(lower1)) { if (isnan(lower2)) return 0; else return 1; } else if (isnan(lower2)) { return -1; } else { if (lower1 < lower2) return -1; else if (lower1 > lower2) return 1; else return 0; } } /* * Interval comparison function by upper bound of the interval; */ static int interval_cmp_upper(const void *i1, const void *i2) { float upper1 = ((const SplitInterval *) i1)->upper, upper2 = ((const SplitInterval *) i2)->upper; if (isnan(upper1)) { if (isnan(upper2)) return 0; else return -1; } else if (isnan(upper2)) { return 1; } else { if (upper1 < upper2) return -1; else if (upper1 > upper2) return 1; else return 0; } } /* * Replace negative value with zero. */ static inline float non_negative(float val) { if (val >= 0.0f) return val; else return 0.0f; } /* * Consider replacement of currently selected split with the better one. */ static inline void g_box_consider_split(ConsiderSplitContext *context, int dimNum, float rightLower, int minLeftCount, float leftUpper, int maxLeftCount) { int leftCount, rightCount; float4 ratio, overlap; float range; POSTGIS_DEBUGF(5, "consider split: dimNum = %d, rightLower = %f, " "minLeftCount = %d, leftUpper = %f, maxLeftCount = %d ", dimNum, rightLower, minLeftCount, leftUpper, maxLeftCount); /* * Calculate entries distribution ratio assuming most uniform distribution * of common entries. */ if (minLeftCount >= (context->entriesCount + 1) / 2) { leftCount = minLeftCount; } else { if (maxLeftCount <= context->entriesCount / 2) leftCount = maxLeftCount; else leftCount = context->entriesCount / 2; } rightCount = context->entriesCount - leftCount; /* * Ratio of split - quotient between size of lesser group and total * entries count. */ ratio = ((float4) Min(leftCount, rightCount)) / ((float4) context->entriesCount); if (ratio > LIMIT_RATIO) { bool selectthis = false; /* * The ratio is acceptable, so compare current split with previously * selected one. Between splits of one dimension we search for minimal * overlap (allowing negative values) and minimal ration (between same * overlaps. We switch dimension if find less overlap (non-negative) * or less range with same overlap. */ if (dimNum == 0) range = context->boundingBox.xmax - context->boundingBox.xmin; else range = context->boundingBox.ymax - context->boundingBox.ymin; overlap = (leftUpper - rightLower) / range; /* If there is no previous selection, select this */ if (context->first) selectthis = true; else if (context->dim == dimNum) { /* * Within the same dimension, choose the new split if it has a * smaller overlap, or same overlap but better ratio. */ if (overlap < context->overlap || (overlap == context->overlap && ratio > context->ratio)) selectthis = true; } else { /* * Across dimensions, choose the new split if it has a smaller * *non-negative* overlap, or same *non-negative* overlap but * bigger range. This condition differs from the one described in * the article. On the datasets where leaf MBRs don't overlap * themselves, non-overlapping splits (i.e. splits which have zero * *non-negative* overlap) are frequently possible. In this case * splits tends to be along one dimension, because most distant * non-overlapping splits (i.e. having lowest negative overlap) * appears to be in the same dimension as in the previous split. * Therefore MBRs appear to be very prolonged along another * dimension, which leads to bad search performance. Using range * as the second split criteria makes MBRs more quadratic. Using * *non-negative* overlap instead of overlap as the first split * criteria gives to range criteria a chance to matter, because * non-overlapping splits are equivalent in this criteria. */ if (non_negative(overlap) < non_negative(context->overlap) || (range > context->range && non_negative(overlap) <= non_negative(context->overlap))) selectthis = true; } if (selectthis) { /* save information about selected split */ context->first = false; context->ratio = ratio; context->range = range; context->overlap = overlap; context->rightLower = rightLower; context->leftUpper = leftUpper; context->dim = dimNum; POSTGIS_DEBUG(5, "split selected"); } } } /* * Return increase of original BOX2DF area by new BOX2DF area insertion. */ static float box_penalty(BOX2DF *original, BOX2DF *new) { float union_width, union_height; union_width = Max(original->xmax, new->xmax) - Min(original->xmin, new->xmin); union_height = Max(original->ymax, new->ymax) - Min(original->ymin, new->ymin); return union_width * union_height - (original->xmax - original->xmin) * (original->ymax - original->ymin); } /* * Compare common entries by their deltas. */ static int common_entry_cmp(const void *i1, const void *i2) { float delta1 = ((const CommonEntry *) i1)->delta, delta2 = ((const CommonEntry *) i2)->delta; if (delta1 < delta2) return -1; else if (delta1 > delta2) return 1; else return 0; } /* * -------------------------------------------------------------------------- * Double sorting split algorithm. This is used for both boxes and points. * * The algorithm finds split of boxes by considering splits along each axis. * Each entry is first projected as an interval on the X-axis, and different * ways to split the intervals into two groups are considered, trying to * minimize the overlap of the groups. Then the same is repeated for the * Y-axis, and the overall best split is chosen. The quality of a split is * determined by overlap along that axis and some other criteria (see * g_box_consider_split). * * After that, all the entries are divided into three groups: * * 1) Entries which should be placed to the left group * 2) Entries which should be placed to the right group * 3) "Common entries" which can be placed to any of groups without affecting * of overlap along selected axis. * * The common entries are distributed by minimizing penalty. * * For details see: * "A new double sorting-based node splitting algorithm for R-tree", A. Korotkov * http://syrcose.ispras.ru/2011/files/SYRCoSE2011_Proceedings.pdf#page=36 * -------------------------------------------------------------------------- */ PG_FUNCTION_INFO_V1(gserialized_gist_picksplit_2d); Datum gserialized_gist_picksplit_2d(PG_FUNCTION_ARGS) { GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0); GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1); OffsetNumber i, maxoff; ConsiderSplitContext context; BOX2DF *box, *leftBox, *rightBox; int dim, commonEntriesCount; SplitInterval *intervalsLower, *intervalsUpper; CommonEntry *commonEntries; int nentries; POSTGIS_DEBUG(3, "[GIST] 'picksplit' entered"); memset(&context, 0, sizeof(ConsiderSplitContext)); maxoff = entryvec->n - 1; nentries = context.entriesCount = maxoff - FirstOffsetNumber + 1; /* Allocate arrays for intervals along axes */ intervalsLower = (SplitInterval *) palloc(nentries * sizeof(SplitInterval)); intervalsUpper = (SplitInterval *) palloc(nentries * sizeof(SplitInterval)); /* * Calculate the overall minimum bounding box over all the entries. */ for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { box = (BOX2DF *) DatumGetPointer(entryvec->vector[i].key); if (i == FirstOffsetNumber) context.boundingBox = *box; else adjustBox(&context.boundingBox, box); } POSTGIS_DEBUGF(4, "boundingBox is %s", box2df_to_string( &context.boundingBox)); /* * Iterate over axes for optimal split searching. */ context.first = true; /* nothing selected yet */ for (dim = 0; dim < 2; dim++) { float leftUpper, rightLower; int i1, i2; /* Project each entry as an interval on the selected axis. */ for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { box = (BOX2DF *) DatumGetPointer(entryvec->vector[i].key); if (dim == 0) { intervalsLower[i - FirstOffsetNumber].lower = box->xmin; intervalsLower[i - FirstOffsetNumber].upper = box->xmax; } else { intervalsLower[i - FirstOffsetNumber].lower = box->ymin; intervalsLower[i - FirstOffsetNumber].upper = box->ymax; } } /* * Make two arrays of intervals: one sorted by lower bound and another * sorted by upper bound. */ memcpy(intervalsUpper, intervalsLower, sizeof(SplitInterval) * nentries); qsort(intervalsLower, nentries, sizeof(SplitInterval), interval_cmp_lower); qsort(intervalsUpper, nentries, sizeof(SplitInterval), interval_cmp_upper); /*---- * The goal is to form a left and right interval, so that every entry * interval is contained by either left or right interval (or both). * * For example, with the intervals (0,1), (1,3), (2,3), (2,4): * * 0 1 2 3 4 * +-+ * +---+ * +-+ * +---+ * * The left and right intervals are of the form (0,a) and (b,4). * We first consider splits where b is the lower bound of an entry. * We iterate through all entries, and for each b, calculate the * smallest possible a. Then we consider splits where a is the * uppper bound of an entry, and for each a, calculate the greatest * possible b. * * In the above example, the first loop would consider splits: * b=0: (0,1)-(0,4) * b=1: (0,1)-(1,4) * b=2: (0,3)-(2,4) * * And the second loop: * a=1: (0,1)-(1,4) * a=3: (0,3)-(2,4) * a=4: (0,4)-(2,4) */ /* * Iterate over lower bound of right group, finding smallest possible * upper bound of left group. */ i1 = 0; i2 = 0; rightLower = intervalsLower[i1].lower; leftUpper = intervalsUpper[i2].lower; while (true) { /* * Find next lower bound of right group. */ while (i1 < nentries && (rightLower == intervalsLower[i1].lower || isnan(intervalsLower[i1].lower))) { leftUpper = Max(leftUpper, intervalsLower[i1].upper); i1++; } if (i1 >= nentries) break; rightLower = intervalsLower[i1].lower; /* * Find count of intervals which anyway should be placed to the * left group. */ while (i2 < nentries && intervalsUpper[i2].upper <= leftUpper) i2++; /* * Consider found split. */ g_box_consider_split(&context, dim, rightLower, i1, leftUpper, i2); } /* * Iterate over upper bound of left group finding greates possible * lower bound of right group. */ i1 = nentries - 1; i2 = nentries - 1; rightLower = intervalsLower[i1].upper; leftUpper = intervalsUpper[i2].upper; while (true) { /* * Find next upper bound of left group. */ while (i2 >= 0 && (leftUpper == intervalsUpper[i2].upper || isnan(intervalsUpper[i2].upper))) { rightLower = Min(rightLower, intervalsUpper[i2].lower); i2--; } if (i2 < 0) break; leftUpper = intervalsUpper[i2].upper; /* * Find count of intervals which anyway should be placed to the * right group. */ while (i1 >= 0 && intervalsLower[i1].lower >= rightLower) i1--; /* * Consider found split. */ g_box_consider_split(&context, dim, rightLower, i1 + 1, leftUpper, i2 + 1); } } /* * If we failed to find any acceptable splits, use trivial split. */ if (context.first) { POSTGIS_DEBUG(4, "no acceptable splits, trivial split"); fallbackSplit(entryvec, v); PG_RETURN_POINTER(v); } /* * Ok, we have now selected the split across one axis. * * While considering the splits, we already determined that there will be * enough entries in both groups to reach the desired ratio, but we did * not memorize which entries go to which group. So determine that now. */ POSTGIS_DEBUGF(4, "split direction: %d", context.dim); /* Allocate vectors for results */ v->spl_left = (OffsetNumber *) palloc(nentries * sizeof(OffsetNumber)); v->spl_right = (OffsetNumber *) palloc(nentries * sizeof(OffsetNumber)); v->spl_nleft = 0; v->spl_nright = 0; /* Allocate bounding boxes of left and right groups */ leftBox = palloc0(sizeof(BOX2DF)); rightBox = palloc0(sizeof(BOX2DF)); /* * Allocate an array for "common entries" - entries which can be placed to * either group without affecting overlap along selected axis. */ commonEntriesCount = 0; commonEntries = (CommonEntry *) palloc(nentries * sizeof(CommonEntry)); /* Helper macros to place an entry in the left or right group */ #define PLACE_LEFT(box, off) \ do { \ if (v->spl_nleft > 0) \ adjustBox(leftBox, box); \ else \ *leftBox = *(box); \ v->spl_left[v->spl_nleft++] = off; \ } while(0) #define PLACE_RIGHT(box, off) \ do { \ if (v->spl_nright > 0) \ adjustBox(rightBox, box); \ else \ *rightBox = *(box); \ v->spl_right[v->spl_nright++] = off; \ } while(0) /* * Distribute entries which can be distributed unambiguously, and collect * common entries. */ for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { float lower, upper; /* * Get upper and lower bounds along selected axis. */ box = (BOX2DF *) DatumGetPointer(entryvec->vector[i].key); if (context.dim == 0) { lower = box->xmin; upper = box->xmax; } else { lower = box->ymin; upper = box->ymax; } if (upper <= context.leftUpper || isnan(upper)) { /* Fits to the left group */ if (lower >= context.rightLower || isnan(lower)) { /* Fits also to the right group, so "common entry" */ commonEntries[commonEntriesCount++].index = i; } else { /* Doesn't fit to the right group, so join to the left group */ PLACE_LEFT(box, i); } } else { /* * Each entry should fit on either left or right group. Since this * entry didn't fit on the left group, it better fit in the right * group. */ Assert(lower >= context.rightLower); /* Doesn't fit to the left group, so join to the right group */ PLACE_RIGHT(box, i); } } POSTGIS_DEBUGF(4, "leftBox is %s", box2df_to_string(leftBox)); POSTGIS_DEBUGF(4, "rightBox is %s", box2df_to_string(rightBox)); /* * Distribute "common entries", if any. */ if (commonEntriesCount > 0) { /* * Calculate minimum number of entries that must be placed in both * groups, to reach LIMIT_RATIO. */ int m = ceil(LIMIT_RATIO * (double) nentries); /* * Calculate delta between penalties of join "common entries" to * different groups. */ for (i = 0; i < commonEntriesCount; i++) { box = (BOX2DF *) DatumGetPointer(entryvec->vector[ commonEntries[i].index].key); commonEntries[i].delta = Abs(box_penalty(leftBox, box) - box_penalty(rightBox, box)); } /* * Sort "common entries" by calculated deltas in order to distribute * the most ambiguous entries first. */ qsort(commonEntries, commonEntriesCount, sizeof(CommonEntry), common_entry_cmp); /* * Distribute "common entries" between groups. */ for (i = 0; i < commonEntriesCount; i++) { box = (BOX2DF *) DatumGetPointer(entryvec->vector[ commonEntries[i].index].key); /* * Check if we have to place this entry in either group to achieve * LIMIT_RATIO. */ if (v->spl_nleft + (commonEntriesCount - i) <= m) PLACE_LEFT(box, commonEntries[i].index); else if (v->spl_nright + (commonEntriesCount - i) <= m) PLACE_RIGHT(box, commonEntries[i].index); else { /* Otherwise select the group by minimal penalty */ if (box_penalty(leftBox, box) < box_penalty(rightBox, box)) PLACE_LEFT(box, commonEntries[i].index); else PLACE_RIGHT(box, commonEntries[i].index); } } } v->spl_ldatum = PointerGetDatum(leftBox); v->spl_rdatum = PointerGetDatum(rightBox); POSTGIS_DEBUG(4, "[GIST] 'picksplit' completed"); PG_RETURN_POINTER(v); } #else /* !KOROTOV_SPLIT */ typedef struct { BOX2DF *key; int pos; } KBsort; static int compare_KB(const void* a, const void* b) { BOX2DF *abox = ((KBsort*)a)->key; BOX2DF *bbox = ((KBsort*)b)->key; float sa = (abox->xmax - abox->xmin) * (abox->ymax - abox->ymin); float sb = (bbox->xmax - bbox->xmin) * (bbox->ymax - bbox->ymin); if ( sa==sb ) return 0; return ( sa>sb ) ? 1 : -1; } /** ** The GiST PickSplit method ** New linear algorithm, see 'New Linear Node Splitting Algorithm for R-tree', ** C.H.Ang and T.C.Tan */ PG_FUNCTION_INFO_V1(gserialized_gist_picksplit_2d); Datum gserialized_gist_picksplit_2d(PG_FUNCTION_ARGS) { GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0); GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1); OffsetNumber i; OffsetNumber *listL, *listR, *listB, *listT; BOX2DF *unionL, *unionR, *unionB, *unionT; int posL, posR, posB, posT; BOX2DF pageunion; BOX2DF *cur; char direction = ' '; bool allisequal = true; OffsetNumber maxoff; int nbytes; POSTGIS_DEBUG(3, "[GIST] 'picksplit' entered"); posL = posR = posB = posT = 0; maxoff = entryvec->n - 1; cur = (BOX2DF*) DatumGetPointer(entryvec->vector[FirstOffsetNumber].key); memcpy((void *) &pageunion, (void *) cur, sizeof(BOX2DF)); /* find MBR */ for (i = OffsetNumberNext(FirstOffsetNumber); i <= maxoff; i = OffsetNumberNext(i)) { cur = (BOX2DF *) DatumGetPointer(entryvec->vector[i].key); if ( allisequal == true && ( pageunion.xmax != cur->xmax || pageunion.ymax != cur->ymax || pageunion.xmin != cur->xmin || pageunion.ymin != cur->ymin ) ) allisequal = false; if (pageunion.xmax < cur->xmax) pageunion.xmax = cur->xmax; if (pageunion.xmin > cur->xmin) pageunion.xmin = cur->xmin; if (pageunion.ymax < cur->ymax) pageunion.ymax = cur->ymax; if (pageunion.ymin > cur->ymin) pageunion.ymin = cur->ymin; } POSTGIS_DEBUGF(4, "pageunion is %s", box2df_to_string(&pageunion)); nbytes = (maxoff + 2) * sizeof(OffsetNumber); listL = (OffsetNumber *) palloc(nbytes); listR = (OffsetNumber *) palloc(nbytes); unionL = (BOX2DF *) palloc(sizeof(BOX2DF)); unionR = (BOX2DF *) palloc(sizeof(BOX2DF)); if (allisequal) { POSTGIS_DEBUG(4, " AllIsEqual!"); cur = (BOX2DF*) DatumGetPointer(entryvec->vector[OffsetNumberNext(FirstOffsetNumber)].key); if (memcmp((void *) cur, (void *) &pageunion, sizeof(BOX2DF)) == 0) { v->spl_left = listL; v->spl_right = listR; v->spl_nleft = v->spl_nright = 0; memcpy((void *) unionL, (void *) &pageunion, sizeof(BOX2DF)); memcpy((void *) unionR, (void *) &pageunion, sizeof(BOX2DF)); for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { if (i <= (maxoff - FirstOffsetNumber + 1) / 2) { v->spl_left[v->spl_nleft] = i; v->spl_nleft++; } else { v->spl_right[v->spl_nright] = i; v->spl_nright++; } } v->spl_ldatum = PointerGetDatum(unionL); v->spl_rdatum = PointerGetDatum(unionR); PG_RETURN_POINTER(v); } } listB = (OffsetNumber *) palloc(nbytes); listT = (OffsetNumber *) palloc(nbytes); unionB = (BOX2DF *) palloc(sizeof(BOX2DF)); unionT = (BOX2DF *) palloc(sizeof(BOX2DF)); #define ADDLIST( list, unionD, pos, num ) do { \ if ( pos ) { \ if ( unionD->xmax < cur->xmax ) unionD->xmax = cur->xmax; \ if ( unionD->xmin > cur->xmin ) unionD->xmin = cur->xmin; \ if ( unionD->ymax < cur->ymax ) unionD->ymax = cur->ymax; \ if ( unionD->ymin > cur->ymin ) unionD->ymin = cur->ymin; \ } else { \ memcpy( (void*)unionD, (void*) cur, sizeof( BOX2DF ) ); \ } \ list[pos] = num; \ (pos)++; \ } while(0) for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { cur = (BOX2DF*) DatumGetPointer(entryvec->vector[i].key); if (cur->xmin - pageunion.xmin < pageunion.xmax - cur->xmax) ADDLIST(listL, unionL, posL,i); else ADDLIST(listR, unionR, posR,i); if (cur->ymin - pageunion.ymin < pageunion.ymax - cur->ymax) ADDLIST(listB, unionB, posB,i); else ADDLIST(listT, unionT, posT,i); } POSTGIS_DEBUGF(4, "unionL is %s", box2df_to_string(unionL)); POSTGIS_DEBUGF(4, "unionR is %s", box2df_to_string(unionR)); POSTGIS_DEBUGF(4, "unionT is %s", box2df_to_string(unionT)); POSTGIS_DEBUGF(4, "unionB is %s", box2df_to_string(unionB)); /* bad disposition, sort by ascending and resplit */ if ( (posR==0 || posL==0) && (posT==0 || posB==0) ) { KBsort *arr = (KBsort*)palloc( sizeof(KBsort) * maxoff ); posL = posR = posB = posT = 0; for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { arr[i-1].key = (BOX2DF*) DatumGetPointer(entryvec->vector[i].key); arr[i-1].pos = i; } qsort( arr, maxoff, sizeof(KBsort), compare_KB ); for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { cur = arr[i-1].key; if (cur->xmin - pageunion.xmin < pageunion.xmax - cur->xmax) ADDLIST(listL, unionL, posL,arr[i-1].pos); else if ( cur->xmin - pageunion.xmin == pageunion.xmax - cur->xmax ) { if ( posL>posR ) ADDLIST(listR, unionR, posR,arr[i-1].pos); else ADDLIST(listL, unionL, posL,arr[i-1].pos); } else ADDLIST(listR, unionR, posR,arr[i-1].pos); if (cur->ymin - pageunion.ymin < pageunion.ymax - cur->ymax) ADDLIST(listB, unionB, posB,arr[i-1].pos); else if ( cur->ymin - pageunion.ymin == pageunion.ymax - cur->ymax ) { if ( posB>posT ) ADDLIST(listT, unionT, posT,arr[i-1].pos); else ADDLIST(listB, unionB, posB,arr[i-1].pos); } else ADDLIST(listT, unionT, posT,arr[i-1].pos); } pfree(arr); } /* which split more optimal? */ if (Max(posL, posR) < Max(posB, posT)) direction = 'x'; else if (Max(posL, posR) > Max(posB, posT)) direction = 'y'; else { float sizeLR, sizeBT; BOX2DF interLR, interBT; if ( box2df_intersection(unionL, unionR, &interLR) == FALSE ) sizeLR = 0.0; else sizeLR = box2df_size(&interLR); if ( box2df_intersection(unionB, unionT, &interBT) == FALSE ) sizeBT = 0.0; else sizeBT = box2df_size(&interBT); if (sizeLR < sizeBT) direction = 'x'; else direction = 'y'; } POSTGIS_DEBUGF(4, "split direction '%c'", direction); if (direction == 'x') { pfree(unionB); pfree(listB); pfree(unionT); pfree(listT); v->spl_left = listL; v->spl_right = listR; v->spl_nleft = posL; v->spl_nright = posR; v->spl_ldatum = PointerGetDatum(unionL); v->spl_rdatum = PointerGetDatum(unionR); } else { pfree(unionR); pfree(listR); pfree(unionL); pfree(listL); v->spl_left = listB; v->spl_right = listT; v->spl_nleft = posB; v->spl_nright = posT; v->spl_ldatum = PointerGetDatum(unionB); v->spl_rdatum = PointerGetDatum(unionT); } POSTGIS_DEBUG(4, "[GIST] 'picksplit' completed"); PG_RETURN_POINTER(v); } #endif /* ** The BOX32DF key must be defined as a PostgreSQL type, even though it is only ** ever used internally. These no-op stubs are used to bind the type. */ PG_FUNCTION_INFO_V1(box2df_in); Datum box2df_in(PG_FUNCTION_ARGS) { ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function box2df_in not implemented"))); PG_RETURN_POINTER(NULL); } PG_FUNCTION_INFO_V1(box2df_out); Datum box2df_out(PG_FUNCTION_ARGS) { ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function box2df_out not implemented"))); PG_RETURN_POINTER(NULL); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_backend_api.c������������������������������������������������0000644�0000000�0000000�00000011462�12153175752�021222� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Wrapper around external librairies functions (GEOS/CGAL...) * * Copyright 2012-2013 Oslandia <infos@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "../liblwgeom/liblwgeom.h" /* for custom variables */ #include "utils/guc.h" #include "../postgis_config.h" #include "lwgeom_backend_api.h" #include "lwgeom_geos.h" #if HAVE_SFCGAL #include "lwgeom_sfcgal.h" #endif Datum intersects(PG_FUNCTION_ARGS); Datum intersects3d(PG_FUNCTION_ARGS); Datum intersection(PG_FUNCTION_ARGS); Datum area(PG_FUNCTION_ARGS); Datum distance(PG_FUNCTION_ARGS); Datum distance3d(PG_FUNCTION_ARGS); Datum intersects3d_dwithin(PG_FUNCTION_ARGS); struct lwgeom_backend_definition { const char* name; Datum (*intersects_fn) (PG_FUNCTION_ARGS); Datum (*intersects3d_fn) (PG_FUNCTION_ARGS); Datum (*intersection_fn) (PG_FUNCTION_ARGS); Datum (*area_fn) (PG_FUNCTION_ARGS); Datum (*distance_fn) (PG_FUNCTION_ARGS); Datum (*distance3d_fn) (PG_FUNCTION_ARGS); }; #if HAVE_SFCGAL #define LWGEOM_NUM_BACKENDS 2 #else #define LWGEOM_NUM_BACKENDS 1 #endif struct lwgeom_backend_definition lwgeom_backends[LWGEOM_NUM_BACKENDS] = { { .name = "geos", .intersects_fn = geos_intersects, .intersects3d_fn = intersects3d_dwithin, .intersection_fn = geos_intersection, .area_fn = LWGEOM_area_polygon, .distance_fn = LWGEOM_mindistance2d, .distance3d_fn = LWGEOM_mindistance3d }, #if HAVE_SFCGAL { .name = "sfcgal", .intersects_fn = sfcgal_intersects, .intersects3d_fn = sfcgal_intersects3D, .intersection_fn = sfcgal_intersection, .area_fn = sfcgal_area, .distance_fn = sfcgal_distance, .distance3d_fn = sfcgal_distance3D } #endif }; /* Geometry Backend */ char* lwgeom_backend_name; struct lwgeom_backend_definition* lwgeom_backend = &lwgeom_backends[0]; static void lwgeom_backend_switch( const char* newvalue, void* extra ) { int i; if (!newvalue) { return; } for ( i = 0; i < LWGEOM_NUM_BACKENDS; ++i ) { if ( !strcmp(lwgeom_backends[i].name, newvalue) ) { lwgeom_backend = &lwgeom_backends[i]; return; } } lwerror("Can't find %s geometry backend", newvalue ); } void lwgeom_init_backend() { DefineCustomStringVariable( "postgis.backend", /* name */ "Sets the PostGIS Geometry Backend.", /* short_desc */ "Sets the PostGIS Geometry Backend (allowed values are 'geos' or 'sfcgal')", /* long_desc */ &lwgeom_backend_name, /* valueAddr */ (char *)lwgeom_backends[0].name, /* bootValue */ PGC_USERSET, /* GucContext context */ 0, /* int flags */ #if POSTGIS_PGSQL_VERSION >= 91 NULL, /* GucStringCheckHook check_hook */ #endif lwgeom_backend_switch, /* GucStringAssignHook assign_hook */ NULL /* GucShowHook show_hook */ ); } PG_FUNCTION_INFO_V1(intersects); Datum intersects(PG_FUNCTION_ARGS) { return (*lwgeom_backend->intersects_fn)( fcinfo ); } PG_FUNCTION_INFO_V1(intersection); Datum intersection(PG_FUNCTION_ARGS) { return (*lwgeom_backend->intersection_fn)( fcinfo ); } PG_FUNCTION_INFO_V1(area); Datum area(PG_FUNCTION_ARGS) { return (*lwgeom_backend->area_fn)( fcinfo ); } PG_FUNCTION_INFO_V1(distance); Datum distance(PG_FUNCTION_ARGS) { return (*lwgeom_backend->distance_fn)( fcinfo ); } PG_FUNCTION_INFO_V1(distance3d); Datum distance3d(PG_FUNCTION_ARGS) { return (*lwgeom_backend->distance3d_fn)( fcinfo ); } PG_FUNCTION_INFO_V1(intersects3d); Datum intersects3d(PG_FUNCTION_ARGS) { return (*lwgeom_backend->intersects3d_fn)( fcinfo ); } /* intersects3d through dwithin * used by the 'geos' backend */ PG_FUNCTION_INFO_V1(intersects3d_dwithin); Datum intersects3d_dwithin(PG_FUNCTION_ARGS) { double mindist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } mindist = lwgeom_mindistance3d_tolerance(lwgeom1,lwgeom2,0.0); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*empty geometries cases should be right handled since return from underlying functions should be MAXFLOAT which causes false as answer*/ PG_RETURN_BOOL(0.0 == mindist); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/uninstall_legacy.sql.in���������������������������������������������0000644�0000000�0000000�00000000000�12121646322�021720� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/README��������������������������������������������������������������0000644�0000000�0000000�00000005106�11722777314�016145� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Welcome to the Initial version of LWGEOM. More information is available on the PostGIS user's mailing list and the PostGIS developer's mailing list. Differences ----------- The LWGEOM is very much like the original PostGIS GEOMETRY type. The main differences are: a) LWGEOMs are much smaller than the PostGIS GEOMETRY b) LWGEOMs natively support 2d, 3d, and 4d points c) LWGEOMs are indexed using single-precision bounding boxes. This make the indexes significantly smaller than PostGIS GEOMETRY indexes. d) LWGEOMs are internally very similar to OGC WKB e) The "normal" view of LWGEOMs is OGC WKB - PostGIS GEOMETRY is OGC WKT f) PostGIS geometries have a built-in BOX3D. LWGEOMs have an *optional* BOX2D (see below). Also included with the LWGEOMs is a type called 'box2d'. This is very similar to PostGIS BOX3D type: a) BOX2Ds are 2D - BOX3D is 3D b) BOX2Ds are represented by single-precision floating point numbers, while BOX3Ds are double-precision floating point numbers. c) BOX2Ds will sometimes be slightly larger than you might expect. This is because the conversion from double-precision to single-precision is inexact. When this happens, the BOX2D will automatically expand itself. Bounding Boxes -------------- <this section for advanced users. Ignore it if you don't understand what its saying.> Bounding boxes are optional in LWGEOMs. By not having one, you are saving a small amount of space per LWGEOM geometry (16 bytes). Bounding boxes are attached to any non-POINT geometry by default. You can disable this automatic addition setting AUTOCACHE_BBOX to 0 in the top-builddir Makefile.config and read BBOXCACHE_BEHAVIOURS for function-by-function behaviour explanation. Manual control of bbox cache is available using DropBBOX() and AddBBOX(). UPDATE <table> SET <geomcol> = DropBBOX(<geomcol>); UPDATE <table> SET <geomcol> = AddBBOX(<geomcol>); Note that if you don't cache a BBOX spatial operators will be much slower, as they'll need to compute all the boxes at every invokation. If you use GiST indexes you will still note a slow down as a RECHECK clause is specified for GiST operators. Also, GiST index updating will be slower w/out a BBOX cache. Space Saving ------------ LWGEOM indexes are approximately 40% smaller than PostGIS indexes. A LWGEOM 'POINT(0 0)' takes up 21 bytes, a POSTGIS 'POINT(0 0)' takes up 140 bytes. This shows that LWGEOMs have a much smaller overhead. LWGEOMs will store 2D points as 2 double precision numbers (16 bytes) - PostGIS will store 2D points with 3 numbers (24 bytes). This can be another big savings. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/Makefile.in���������������������������������������������������������0000644�0000000�0000000�00000013736�12145532353�017332� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * $Id$ # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** POSTGIS_PGSQL_VERSION=@POSTGIS_PGSQL_VERSION@ MODULE_big=postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ MODULEDIR=contrib/$(MODULE_big) # Files to be copied to the contrib/ directory SQL_built=postgis.sql uninstall_postgis.sql postgis_upgrade_20_21.sql postgis_upgrade_21_minor.sql legacy.sql uninstall_legacy.sql legacy_minimal.sql legacy_gist.sql uninstall_sfcgal.sql DATA=../spatial_ref_sys.sql # SQL objects (files requiring pre-processing) SQL_objs=postgis.sql legacy.sql legacy_minimal.sql GEOM_BACKEND_OBJ = lwgeom_geos.o SFCGAL_BACKEND_OBJ = lwgeom_sfcgal.o ifeq (@SFCGAL@,sfcgal) DATA_built=$(SQL_built) sfcgal.sql SQL_OBJS=$(SQL_objs) sfcgal.sql BACKEND_OBJ=$(GEOM_BACKEND_OBJ) $(SFCGAL_BACKEND_OBJ) else BACKEND_OBJ=$(GEOM_BACKEND_OBJ) DATA_built=$(SQL_built) SQL_OBJS=$(SQL_objs) endif # SQL preprocessor SQLPP = @SQLPP@ # PostgreSQL objects PG_OBJS= \ postgis_module.o \ lwgeom_accum.o \ lwgeom_spheroid.o \ lwgeom_ogc.o \ lwgeom_functions_analytic.o \ lwgeom_inout.o \ lwgeom_functions_basic.o \ lwgeom_btree.o \ lwgeom_box.o \ lwgeom_box3d.o \ $(BACKEND_OBJ) \ lwgeom_backend_api.o \ lwgeom_geos_prepared.o \ lwgeom_geos_clean.o \ lwgeom_geos_relatematch.o \ lwgeom_export.o \ lwgeom_in_gml.o \ lwgeom_in_kml.o \ lwgeom_in_geohash.o \ lwgeom_in_geojson.o \ lwgeom_triggers.o \ lwgeom_dump.o \ lwgeom_dumppoints.o \ lwgeom_functions_lrs.o \ long_xact.o \ lwgeom_sqlmm.o \ lwgeom_rtree.o \ lwgeom_transform.o \ gserialized_typmod.o \ gserialized_gist_2d.o \ gserialized_gist_nd.o \ gserialized_estimate.o \ geography_inout.o \ geography_btree.o \ geography_measurement.o \ geography_measurement_trees.o \ geometry_inout.o # Objects to build using PGXS OBJS=$(PG_OBJS) # Libraries to link into the module (proj, geos) # # Note: we specify liblwgeom.a directly in SHLIB_LINK rather than using # -L... -l options to prevent issues with some platforms trying to link # to an existing liblwgeom.so in the PostgreSQL $libdir supplied by an # older version of PostGIS, rather than with the static liblwgeom.a # supplied with newer versions of PostGIS PG_CPPFLAGS += -I../liblwgeom -I../libpgcommon @CPPFLAGS@ -fPIC SHLIB_LINK_F = ../libpgcommon/libpgcommon.a ../liblwgeom/.libs/liblwgeom.a @SHLIB_LINK@ # Add SFCGAL Flags if defined ifeq (@SFCGAL@,sfcgal) PG_CPPFLAGS += @SFCGAL_CPPFLAGS@ SHLIB_LINK_F += @SFCGAL_LDFLAGS@ endif # Extra files to remove during 'make clean' EXTRA_CLEAN=$(SQL_OBJS) \ uninstall_postgis.sql \ uninstall_legacy.sql \ uninstall_sfcgal.sql \ postgis_upgrade_20_21.sql.in \ postgis_upgrade_20_21.sql \ postgis_upgrade_21_minor.sql # PGXS information PG_CONFIG = @PG_CONFIG@ PGXS := @PGXS@ include $(PGXS) # Set PERL _after_ the include of PGXS PERL=@PERL@ # This is to workaround a bug in PGXS 8.4 win32 link line, # see http://trac.osgeo.org/postgis/ticket/1158#comment:57 SHLIB_LINK := $(SHLIB_LINK_F) $(SHLIB_LINK) # PGXS override feature. The ability to allow PostGIS to install itself # in a versioned directory is only available in PostgreSQL >= 8.5. To # do this by default on older PostgreSQL versions, we need to override # the existing PGXS targets. # # Once PostgreSQL 8.5 becomes the minimum supported version, this entire # section and its associated Makefile.pgxs should be removed. PGXSOVERRIDE = @PGXSOVERRIDE@ ifeq ($(PGXSOVERRIDE),1) include Makefile.pgxs endif # If REGRESS=1 passed as a parameter, change the default install paths # so that no prefix is included. This allows us to relocate to a temporary # directory for regression testing. ifeq ($(REGRESS),1) bindir=/bin pkglibdir=/lib datadir=/share datamoduledir=contrib/postgis endif # Make all PostGIS objects depend upon liblwgeom, so that if an underlying # change is made, a PostGIS rebuild is triggered. # # Also they are all dependent on postgis_config.h # and thus postgis_svn_revision.h # $(PG_OBJS): ../liblwgeom/.libs/liblwgeom.a ../libpgcommon/libpgcommon.a ../postgis_config.h ../postgis_svn_revision.h ../postgis_svn_revision.h: $(MAKE) -C .. postgis_svn_revision.h ../liblwgeom/.libs/liblwgeom.a: make -C ../liblwgeom liblwgeom.la ../libpgcommon/libpgcommon.a: make -C ../libpgcommon libpgcommon.a # Borrow the $libdir substitution from PGXS but customise by running the preprocessor # and adding the version number %.sql: %.sql.in $(SQLPP) -I../libpgcommon $< | grep -v '^#' | \ $(PERL) -lpe "s'MODULE_PATHNAME'\$$libdir/postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@'g" > $@ postgis_upgrade_20_21.sql.in: postgis_drop_before.sql postgis.sql postgis_drop_after.sql cat $^ > $@ postgis_upgrade_20_21.sql: postgis_upgrade_20_21.sql.in ../utils/postgis_proc_upgrade.pl $(PERL) ../utils/postgis_proc_upgrade.pl $< 2.0 > $@ #this is same as 20_21 until we release a 2.1.0 postgis_upgrade_21_minor.sql: postgis_upgrade_20_21.sql cp $< $@ # Generate any .sql.in files from .sql.in.c files by running them through the SQL pre-processor #$(SQL_OBJS): %.in: %.in.c # $(SQLPP) -I../libpgcommon $< | grep -v '^#' > $@ # SQL objects are also dependent on postgis_config.h for PostgreSQL version $(SQL_OBJS): ../postgis_config.h ../postgis_svn_revision.h #postgis.sql.in: sqldefines.h long_xact.sql.in.c geography.sql.in.c uninstall_postgis.sql: postgis.sql ../utils/create_undef.pl $(PERL) ../utils/create_undef.pl $< $(POSTGIS_PGSQL_VERSION) > $@ uninstall_legacy.sql: legacy.sql ../utils/create_undef.pl $(PERL) ../utils/create_undef.pl $< $(POSTGIS_PGSQL_VERSION) > $@ uninstall_sfcgal.sql: sfcgal.sql ../utils/create_undef.pl $(PERL) ../utils/create_undef.pl $< $(POSTGIS_PGSQL_VERSION) > $@ distclean: clean rm -f Makefile ����������������������������������postgis-2.1.2+dfsg.orig/postgis/geography_measurement_trees.h���������������������������������������0000644�0000000�0000000�00000001005�11777341326�023224� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "liblwgeom_internal.h" #include "lwgeodetic_tree.h" #include "lwgeom_cache.h" int geography_dwithin_cache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2, const SPHEROID* s, double tolerance, int* dwithin); int geography_distance_cache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2, const SPHEROID* s, double* distance); int geography_tree_distance(const GSERIALIZED* g1, const GSERIALIZED* g2, const SPHEROID* s, double tolerance, double* distance); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_sqlmm.c������������������������������������������������������0000644�0000000�0000000�00000005740�12236025367�020133� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_sqlmm.c 12083 2013-11-04 23:17:11Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <math.h> #include "postgres.h" #include "fmgr.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" Datum LWGEOM_has_arc(PG_FUNCTION_ARGS); Datum LWGEOM_curve_segmentize(PG_FUNCTION_ARGS); Datum LWGEOM_line_desegmentize(PG_FUNCTION_ARGS); /******************************************************************************* * Begin PG_FUNCTIONs ******************************************************************************/ PG_FUNCTION_INFO_V1(LWGEOM_has_arc); Datum LWGEOM_has_arc(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); uint32 result = lwgeom_has_arc(lwgeom); lwgeom_free(lwgeom); PG_RETURN_BOOL(result == 1); } /* * Converts any curve segments of the geometry into a linear approximation. * Curve centers are determined by projecting the defining points into the 2d * plane. Z and M values are assigned by linear interpolation between * defining points. */ PG_FUNCTION_INFO_V1(LWGEOM_curve_segmentize); Datum LWGEOM_curve_segmentize(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); int32 perQuad = PG_GETARG_INT32(1); GSERIALIZED *ret; LWGEOM *igeom = NULL, *ogeom = NULL; POSTGIS_DEBUG(2, "LWGEOM_curve_segmentize called."); if (perQuad < 0) { elog(ERROR, "2nd argument must be positive."); PG_RETURN_NULL(); } POSTGIS_DEBUGF(3, "perQuad = %d", perQuad); igeom = lwgeom_from_gserialized(geom); ogeom = lwgeom_segmentize(igeom, perQuad); lwgeom_free(igeom); if (ogeom == NULL) PG_RETURN_NULL(); ret = geometry_serialize(ogeom); lwgeom_free(ogeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(ret); } PG_FUNCTION_INFO_V1(LWGEOM_line_desegmentize); Datum LWGEOM_line_desegmentize(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *ret; LWGEOM *igeom = NULL, *ogeom = NULL; POSTGIS_DEBUG(2, "LWGEOM_line_desegmentize."); igeom = lwgeom_from_gserialized(geom); ogeom = lwgeom_desegmentize(igeom); lwgeom_free(igeom); if (ogeom == NULL) { PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); } ret = geometry_serialize(ogeom); lwgeom_free(ogeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(ret); } /******************************************************************************* * End PG_FUNCTIONs ******************************************************************************/ ��������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_in_kml.c�����������������������������������������������������0000644�0000000�0000000�00000031262�12163313207�020241� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id:$ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Oslandia * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /** * @file KML input routines. * Ability to parse KML geometry fragment and to return an LWGEOM * or an error message. * * KML version supported: 2.2.0 * Cf: <http://www.opengeospatial.org/standards/kml> * * Known limitations related to 3D: * - Not support kml:Model geometries * - Don't handle kml:extrude attribute * * Written by Olivier Courtin - Oslandia * **********************************************************************/ #include <libxml/tree.h> #include <libxml/parser.h> #include <errno.h> #include <string.h> #include "postgres.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" /* TODO: - OGC:LonLat84_5773 explicit support (rather than EPSG:4326) - altitudeModeGroup relativeToGround Z Altitude computation upon Geoid */ Datum geom_from_kml(PG_FUNCTION_ARGS); static LWGEOM* parse_kml(xmlNodePtr xnode, bool *hasz); #define KML_NS ((char *) "http://www.opengis.net/kml/2.2") /** * Ability to parse KML geometry fragment and to return an LWGEOM * or an error message. */ PG_FUNCTION_INFO_V1(geom_from_kml); Datum geom_from_kml(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom, *hlwgeom; xmlDocPtr xmldoc; text *xml_input; int xml_size; char *xml; bool hasz=true; xmlNodePtr xmlroot=NULL; /* Get the KML stream */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); xml_input = PG_GETARG_TEXT_P(0); xml = text2cstring(xml_input); xml_size = VARSIZE(xml_input) - VARHDRSZ; /* Begin to Parse XML doc */ xmlInitParser(); xmldoc = xmlReadMemory(xml, xml_size, NULL, NULL, XML_PARSE_SAX1); if (!xmldoc || (xmlroot = xmlDocGetRootElement(xmldoc)) == NULL) { xmlFreeDoc(xmldoc); xmlCleanupParser(); lwerror("invalid KML representation"); } lwgeom = parse_kml(xmlroot, &hasz); /* Homogenize geometry result if needed */ if (lwgeom->type == COLLECTIONTYPE) { hlwgeom = lwgeom_homogenize(lwgeom); lwgeom_release(lwgeom); lwgeom = hlwgeom; } lwgeom_add_bbox(lwgeom); /* KML geometries could be either 2 or 3D * * So we deal with 3D in all structures allocation, and flag hasz * to false if we met once a missing Z dimension * In this case, we force recursive 2D. */ if (!hasz) { LWGEOM *tmp = lwgeom_force_2d(lwgeom); lwgeom_free(lwgeom); lwgeom = tmp; } geom = geometry_serialize(lwgeom); lwgeom_free(lwgeom); xmlFreeDoc(xmldoc); xmlCleanupParser(); PG_RETURN_POINTER(geom); } /** * Return false if current element namespace is not a KML one * Return true otherwise. */ static bool is_kml_namespace(xmlNodePtr xnode, bool is_strict) { xmlNsPtr *ns, *p; ns = xmlGetNsList(xnode->doc, xnode); /* * If no namespace is available we could return true anyway * (because we work only on KML fragment, we don't want to * 'oblige' to add namespace on the geometry root node) */ if (ns == NULL) return !is_strict; for (p=ns ; *p ; p++) { if ((*p)->href == NULL || (*p)->prefix == NULL || xnode->ns == NULL || xnode->ns->prefix == NULL) continue; if (!xmlStrcmp(xnode->ns->prefix, (*p)->prefix)) { if (!strcmp((char *) (*p)->href, KML_NS)) { xmlFree(ns); return true; } else { xmlFree(ns); return false; } } } xmlFree(ns); return !is_strict; /* Same reason here to not return false */; } /* Temporarily disabling unused function. */ #if 0 /** * Retrieve a KML propertie from a node or NULL otherwise * Respect namespaces if presents in the node element */ static xmlChar *kmlGetProp(xmlNodePtr xnode, xmlChar *prop) { xmlChar *value; if (!is_kml_namespace(xnode, true)) return xmlGetProp(xnode, prop); value = xmlGetNsProp(xnode, prop, (xmlChar *) KML_NS); /* In last case try without explicit namespace */ if (value == NULL) value = xmlGetNoNsProp(xnode, prop); return value; } #endif #if 0 /* unused */ /** * Parse a string supposed to be a double */ static double parse_kml_double(char *d, bool space_before, bool space_after) { char *p; int st; enum states { INIT = 0, NEED_DIG = 1, DIG = 2, NEED_DIG_DEC = 3, DIG_DEC = 4, EXP = 5, NEED_DIG_EXP = 6, DIG_EXP = 7, END = 8 }; /* * Double pattern * [-|\+]?[0-9]+(\.)?([0-9]+)?([Ee](\+|-)?[0-9]+)? * We could also meet spaces before and/or after * this pattern upon parameters */ if (space_before) while (isspace(*d)) d++; for (st = INIT, p = d ; *p ; p++) { lwnotice("State: %d, *p=%c", st, *p); if (isdigit(*p)) { if (st == INIT || st == NEED_DIG) st = DIG; else if (st == NEED_DIG_DEC) st = DIG_DEC; else if (st == NEED_DIG_EXP || st == EXP) st = DIG_EXP; else if (st == DIG || st == DIG_DEC || st == DIG_EXP); else lwerror("invalid KML representation"); } else if (*p == '.') { if (st == DIG) st = NEED_DIG_DEC; else lwerror("invalid KML representation"); } else if (*p == '-' || *p == '+') { if (st == INIT) st = NEED_DIG; else if (st == EXP) st = NEED_DIG_EXP; else lwerror("invalid KML representation"); } else if (*p == 'e' || *p == 'E') { if (st == DIG || st == DIG_DEC) st = EXP; else lwerror("invalid KML representation"); } else if (isspace(*p)) { if (!space_after) lwerror("invalid KML representation"); if (st == DIG || st == DIG_DEC || st == DIG_EXP)st = END; else if (st == NEED_DIG_DEC) st = END; else if (st == END); else lwerror("invalid KML representation"); } else lwerror("invalid KML representation"); } if (st != DIG && st != NEED_DIG_DEC && st != DIG_DEC && st != DIG_EXP && st != END) lwerror("invalid KML representation"); return atof(d); } #endif /* unused */ /** * Parse kml:coordinates */ static POINTARRAY* parse_kml_coordinates(xmlNodePtr xnode, bool *hasz) { xmlChar *kml_coord; bool found; POINTARRAY *dpa; int kml_dims; char *p, *q; POINT4D pt; double d; if (xnode == NULL) lwerror("invalid KML representation"); for (found = false ; xnode != NULL ; xnode = xnode->next) { if (xnode->type != XML_ELEMENT_NODE) continue; if (!is_kml_namespace(xnode, false)) continue; if (strcmp((char *) xnode->name, "coordinates")) continue; found = true; break; } if (!found) lwerror("invalid KML representation"); /* We begin to retrieve coordinates string */ kml_coord = xmlNodeGetContent(xnode); p = (char *) kml_coord; /* KML coordinates pattern: x1,y1 x2,y2 * x1,y1,z1 x2,y2,z2 */ /* Now we create PointArray from coordinates values */ /* HasZ, !HasM, 1pt */ dpa = ptarray_construct_empty(1, 0, 1); while (*p && isspace(*p)) ++p; for (kml_dims=0; *p ; p++) { //lwnotice("*p:%c, kml_dims:%d", *p, kml_dims); if ( isdigit(*p) || *p == '+' || *p == '-' || *p == '.' ) { kml_dims++; errno = 0; d = strtod(p, &q); if ( errno != 0 ) { // TODO: destroy dpa, return NULL lwerror("invalid KML representation"); /*: %s", strerror(errno));*/ } if (kml_dims == 1) pt.x = d; else if (kml_dims == 2) pt.y = d; else if (kml_dims == 3) pt.z = d; else { lwerror("invalid KML representation"); /* (more than 3 dimensions)"); */ // TODO: destroy dpa, return NULL } //lwnotice("after strtod d:%f, *q:%c, kml_dims:%d", d, *q, kml_dims); if ( *q && ! isspace(*q) && *q != ',' ) { lwerror("invalid KML representation"); /* (invalid character %c follows ordinate value)", *q); */ } /* Look-ahead to see if we're done reading */ while (*q && isspace(*q)) ++q; if ( isdigit(*q) || *q == '+' || *q == '-' || *q == '.' || ! *q ) { if ( kml_dims < 2 ) lwerror("invalid KML representation"); /* (not enough ordinates)"); */ if ( kml_dims < 3 ) *hasz = false; ptarray_append_point(dpa, &pt, LW_FALSE); kml_dims = 0; } p = q-1; /* will be incrementedon next iteration */ //lwnotice("after look-ahead *p:%c, kml_dims:%d", *p, kml_dims); } else if ( *p != ',' && ! isspace(*p) ) { lwerror("invalid KML representation"); /* (unexpected character %c)", *p); */ } } xmlFree(kml_coord); /* TODO: we shouldn't need to clone here */ return ptarray_clone_deep(dpa); } /** * Parse KML point */ static LWGEOM* parse_kml_point(xmlNodePtr xnode, bool *hasz) { POINTARRAY *pa; if (xnode->children == NULL) lwerror("invalid KML representation"); pa = parse_kml_coordinates(xnode->children, hasz); if (pa->npoints != 1) lwerror("invalid KML representation"); return (LWGEOM *) lwpoint_construct(4326, NULL, pa); } /** * Parse KML lineString */ static LWGEOM* parse_kml_line(xmlNodePtr xnode, bool *hasz) { POINTARRAY *pa; if (xnode->children == NULL) lwerror("invalid KML representation"); pa = parse_kml_coordinates(xnode->children, hasz); if (pa->npoints < 2) lwerror("invalid KML representation"); return (LWGEOM *) lwline_construct(4326, NULL, pa); } /** * Parse KML Polygon */ static LWGEOM* parse_kml_polygon(xmlNodePtr xnode, bool *hasz) { int ring; xmlNodePtr xa, xb; POINTARRAY **ppa = NULL; for (xa = xnode->children ; xa != NULL ; xa = xa->next) { /* Polygon/outerBoundaryIs */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_kml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "outerBoundaryIs")) continue; for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb->type != XML_ELEMENT_NODE) continue; if (!is_kml_namespace(xb, false)) continue; if (strcmp((char *) xb->name, "LinearRing")) continue; ppa = (POINTARRAY**) lwalloc(sizeof(POINTARRAY*)); ppa[0] = parse_kml_coordinates(xb->children, hasz); if (ppa[0]->npoints < 4 || (!*hasz && !ptarray_is_closed_2d(ppa[0])) || (*hasz && !ptarray_is_closed_3d(ppa[0]))) lwerror("invalid KML representation"); } } for (ring=1, xa = xnode->children ; xa != NULL ; xa = xa->next) { /* Polygon/innerBoundaryIs */ if (xa->type != XML_ELEMENT_NODE) continue; if (!is_kml_namespace(xa, false)) continue; if (strcmp((char *) xa->name, "innerBoundaryIs")) continue; for (xb = xa->children ; xb != NULL ; xb = xb->next) { if (xb->type != XML_ELEMENT_NODE) continue; if (!is_kml_namespace(xb, false)) continue; if (strcmp((char *) xb->name, "LinearRing")) continue; ppa = (POINTARRAY**) lwrealloc((POINTARRAY *) ppa, sizeof(POINTARRAY*) * (ring + 1)); ppa[ring] = parse_kml_coordinates(xb->children, hasz); if (ppa[ring]->npoints < 4 || (!*hasz && !ptarray_is_closed_2d(ppa[ring])) || (*hasz && !ptarray_is_closed_3d(ppa[ring]))) lwerror("invalid KML representation"); ring++; } } /* Exterior Ring is mandatory */ if (ppa == NULL || ppa[0] == NULL) lwerror("invalid KML representation"); return (LWGEOM *) lwpoly_construct(4326, NULL, ring, ppa); } /** * Parse KML MultiGeometry */ static LWGEOM* parse_kml_multi(xmlNodePtr xnode, bool *hasz) { LWGEOM *geom; xmlNodePtr xa; geom = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, 4326, 1, 0); for (xa = xnode->children ; xa != NULL ; xa = xa->next) { if (xa->type != XML_ELEMENT_NODE) continue; if (!is_kml_namespace(xa, false)) continue; if ( !strcmp((char *) xa->name, "Point") || !strcmp((char *) xa->name, "LineString") || !strcmp((char *) xa->name, "Polygon") || !strcmp((char *) xa->name, "MultiGeometry")) { if (xa->children == NULL) break; geom = (LWGEOM*)lwcollection_add_lwgeom((LWCOLLECTION*)geom, parse_kml(xa, hasz)); } } return geom; } /** * Parse KML */ static LWGEOM* parse_kml(xmlNodePtr xnode, bool *hasz) { xmlNodePtr xa = xnode; while (xa != NULL && (xa->type != XML_ELEMENT_NODE || !is_kml_namespace(xa, false))) xa = xa->next; if (xa == NULL) lwerror("invalid KML representation"); if (!strcmp((char *) xa->name, "Point")) return parse_kml_point(xa, hasz); if (!strcmp((char *) xa->name, "LineString")) return parse_kml_line(xa, hasz); if (!strcmp((char *) xa->name, "Polygon")) return parse_kml_polygon(xa, hasz); if (!strcmp((char *) xa->name, "MultiGeometry")) return parse_kml_multi(xa, hasz); lwerror("invalid KML representation"); return NULL; /* Never reach */ } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/geography.h���������������������������������������������������������0000644�0000000�0000000�00000001725�11722777314�017426� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: geography.h 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /********************************************************************** ** Useful functions for all GSERIALIZED handlers. ** TODO: Move to common.h in pgcommon */ /* Check that the typmod matches the flags on the lwgeom */ void postgis_valid_typmod(const GSERIALIZED *gser, int32_t typmod); /* Check that the type is legal in geography (no curves please!) */ void geography_valid_type(uint8_t type); /* Expand the embedded bounding box in a #GSERIALIZED */ GSERIALIZED* gserialized_expand(GSERIALIZED *g, double distance); �������������������������������������������postgis-2.1.2+dfsg.orig/postgis/sqldefines.h.in�����������������������������������������������������0000644�0000000�0000000�00000002227�12221326562�020167� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _LWPGIS_DEFINES #define _LWPGIS_DEFINES #include "../postgis_svn_revision.h" /* * Define just the version numbers; otherwise we get some strange substitutions in postgis.sql.in */ #define POSTGIS_PGSQL_VERSION @POSTGIS_PGSQL_VERSION@ #define POSTGIS_GEOS_VERSION @POSTGIS_GEOS_VERSION@ #define POSTGIS_PROJ_VERSION @POSTGIS_PROJ_VERSION@ #define POSTGIS_LIB_VERSION '@POSTGIS_LIB_VERSION@' #define POSTGIS_LIBXML2_VERSION @POSTGIS_LIBXML2_VERSION@ /* * Define the build date and the version number * (these substitiutions are done with extra quotes sinces CPP * won't substitute within apostrophes) */ #define _POSTGIS_SQL_SELECT_POSTGIS_VERSION 'SELECT ''@POSTGIS_VERSION@''::text AS version' #define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''@POSTGIS_BUILD_DATE@''::text AS version' #if POSTGIS_SVN_REVISION #define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '@POSTGIS_SCRIPTS_VERSION@'::text || ' r' || POSTGIS_SVN_REVISION::text AS version $$ #else #define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '@POSTGIS_SCRIPTS_VERSION@'::text AS version $$ #endif #define SRID_USR_MAX @SRID_USR_MAX@ #endif /* _LWPGIS_DEFINES */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/uninstall_geography.sql.in������������������������������������������0000644�0000000�0000000�00000014277�12121646322�022466� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: uninstall_geography.sql.in 11175 2013-03-18 17:20:18Z strk $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.org/ -- Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- metadata table DROP VIEW geography_columns; -- indexes DROP OPERATOR FAMILY gist_geography_ops USING gist CASCADE; DROP OPERATOR FAMILY btree_geography_ops USING btree CASCADE; -- r-tree operator DROP OPERATOR && (geography,geography); -- b-tree operators DROP OPERATOR < (geography,geography); DROP OPERATOR <= (geography,geography); DROP OPERATOR = (geography,geography); DROP OPERATOR >= (geography,geography); DROP OPERATOR > (geography,geography); -- casts DROP CAST IF EXISTS (geography AS geometry); DROP CAST IF EXISTS (geography AS geography); DROP CAST IF EXISTS (geometry AS geography); -- -- Text hacks to over-ride implicit casting issues with GEOMETRY -- TODO Remove for 2.0 -- DROP FUNCTION IF EXISTS ST_AsText(text); DROP FUNCTION IF EXISTS ST_AsBinary(text); DROP FUNCTION IF EXISTS ST_AsSVG(text); DROP FUNCTION IF EXISTS ST_AsGML(text); DROP FUNCTION IF EXISTS ST_AsKML(text); DROP FUNCTION IF EXISTS ST_AsGeoJson(text); DROP FUNCTION IF EXISTS ST_Distance(text, text); DROP FUNCTION IF EXISTS ST_DWithin(text, text, float8); DROP FUNCTION IF EXISTS ST_Area(text); DROP FUNCTION IF EXISTS ST_Length(text); DROP FUNCTION IF EXISTS ST_Covers(text, text); DROP FUNCTION IF EXISTS ST_CoveredBy(text, text); DROP FUNCTION IF EXISTS ST_Intersects(text, text); DROP FUNCTION IF EXISTS ST_Buffer(text, float8); DROP FUNCTION IF EXISTS ST_Intersection(text, text); -- functions DROP FUNCTION IF EXISTS ST_AsText(geography); DROP FUNCTION IF EXISTS ST_GeographyFromText(text); DROP FUNCTION IF EXISTS ST_AsBinary(geography); DROP FUNCTION IF EXISTS ST_GeographyFromBinary(bytea); DROP FUNCTION IF EXISTS geography_typmod_dims(integer); DROP FUNCTION IF EXISTS geography_typmod_srid(integer); DROP FUNCTION IF EXISTS geography_typmod_type(integer); DROP FUNCTION IF EXISTS geography(geometry); DROP FUNCTION IF EXISTS geometry(geography); DROP FUNCTION IF EXISTS geography_gist_consistent(internal,geometry,int4); DROP FUNCTION IF EXISTS geography_gist_compress(internal); DROP FUNCTION IF EXISTS geography_gist_penalty(internal,internal,internal); DROP FUNCTION IF EXISTS geography_gist_picksplit(internal, internal); DROP FUNCTION IF EXISTS geography_gist_union(bytea, internal); DROP FUNCTION IF EXISTS geography_gist_same(box2d, box2d, internal); DROP FUNCTION IF EXISTS geography_gist_decompress(internal); DROP FUNCTION IF EXISTS geography_gist_selectivity (internal, oid, internal, int4); DROP FUNCTION IF EXISTS geography_gist_join_selectivity(internal, oid, internal, smallint); DROP FUNCTION IF EXISTS geography_overlaps(geography, geography); DROP FUNCTION IF EXISTS geography_lt(geography, geography); DROP FUNCTION IF EXISTS geography_le(geography, geography); DROP FUNCTION IF EXISTS geography_gt(geography, geography); DROP FUNCTION IF EXISTS geography_ge(geography, geography); DROP FUNCTION IF EXISTS geography_eq(geography, geography); DROP FUNCTION IF EXISTS geography_cmp(geography, geography); DROP FUNCTION IF EXISTS ST_AsSVG(geography,int4,int4); DROP FUNCTION IF EXISTS ST_AsSVG(geography,int4); DROP FUNCTION IF EXISTS ST_AsSVG(geography); DROP FUNCTION IF EXISTS _ST_AsGML(int4, geography, int4, int4); DROP FUNCTION IF EXISTS ST_AsGML(geography, int4); DROP FUNCTION IF EXISTS ST_AsGML(geography); DROP FUNCTION IF EXISTS ST_AsGML(int4, geography); DROP FUNCTION IF EXISTS ST_AsGML(int4, geography, int4); DROP FUNCTION IF EXISTS ST_AsGML(geography, int4, int4); DROP FUNCTION IF EXISTS ST_AsGML(int4, geography, int4, int4); DROP FUNCTION IF EXISTS _ST_AsKML(int4, geography, int4); DROP FUNCTION IF EXISTS ST_AsKML(geography, int4); DROP FUNCTION IF EXISTS ST_AsKML(geography); DROP FUNCTION IF EXISTS ST_AsKML(int4, geography); DROP FUNCTION IF EXISTS ST_AsKML(int4, geography, int4); DROP FUNCTION IF EXISTS _ST_AsGeoJson(int4, geography, int4, int4); DROP FUNCTION IF EXISTS ST_AsGeoJson(geography, int4); DROP FUNCTION IF EXISTS ST_AsGeoJson(geography); DROP FUNCTION IF EXISTS ST_AsGeoJson(int4, geography); DROP FUNCTION IF EXISTS ST_AsGeoJson(int4, geography, int4); DROP FUNCTION IF EXISTS ST_AsGeoJson(geography, int4, int4); DROP FUNCTION IF EXISTS ST_AsGeoJson(int4, geography, int4, int4); DROP FUNCTION IF EXISTS _ST_Distance(geography, geography, float8, boolean); DROP FUNCTION IF EXISTS _ST_DWithin(geography, geography, float8, boolean); DROP FUNCTION IF EXISTS ST_Distance(geography, geography, boolean); DROP FUNCTION IF EXISTS ST_Distance(geography, geography); DROP FUNCTION IF EXISTS _ST_Expand(geography, float8); DROP FUNCTION IF EXISTS ST_DWithin(geography, geography, float8, boolean); DROP FUNCTION IF EXISTS ST_DWithin(geography, geography, float8); DROP FUNCTION IF EXISTS ST_Area(geography, boolean); DROP FUNCTION IF EXISTS ST_Area(geography); DROP FUNCTION IF EXISTS ST_Length(geography, boolean); DROP FUNCTION IF EXISTS ST_Length(geography); DROP FUNCTION IF EXISTS _ST_PointOutside(geography); DROP FUNCTION IF EXISTS _ST_Covers(geography, geography); DROP FUNCTION IF EXISTS ST_Covers(geography, geography); DROP FUNCTION IF EXISTS ST_CoveredBy(geography, geography); DROP FUNCTION IF EXISTS ST_Intersects(geography, geography); DROP FUNCTION IF EXISTS _ST_BestSRID(geography, geography); DROP FUNCTION IF EXISTS _ST_BestSRID(geography); DROP FUNCTION IF EXISTS ST_Buffer(geography, float8); DROP FUNCTION IF EXISTS ST_Intersection(geography, geography); DROP FUNCTION IF EXISTS geography(geography, integer, boolean); --DROP FUNCTION IF EXISTS geography_in(cstring, oid, integer); --DROP FUNCTION IF EXISTS geography_out(geography); DROP TYPE geography CASCADE; DROP FUNCTION IF EXISTS geography_typmod_in(cstring[]); DROP FUNCTION IF EXISTS geography_typmod_out(integer); DROP FUNCTION IF EXISTS geography_analyze(internal); -- DROP FUNCTION IF EXISTS gidx_in(cstring); -- DROP FUNCTION IF EXISTS gidx_out(gidx); DROP TYPE gidx CASCADE; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_geos_clean.c�������������������������������������������������0000644�0000000�0000000�00000010614�11765606072�021101� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_geos.c 5258 2010-02-17 21:02:49Z strk $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2009-2010 Sandro Santilli <strk@keybit.net> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * ST_MakeValid * * Attempts to make an invalid geometries valid w/out losing * points. * * Polygons may become lines or points or a collection of * polygons lines and points (collapsed ring cases). * * Author: Sandro Santilli <strk@keybit.net> * * Work done for Faunalia (http://www.faunalia.it) with fundings * from Regione Toscana - Sistema Informativo per il Governo * del Territorio e dell'Ambiente (RT-SIGTA). * * Thanks to Dr. Horst Duester for previous work on a plpgsql version * of the cleanup logic [1] * * Thanks to Andrea Peri for recommandations on constraints. * * [1] http://www.sogis1.so.ch/sogis/dl/postgis/cleanGeometry.sql * * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "funcapi.h" #include "../postgis_config.h" #include "lwgeom_geos.h" #include "liblwgeom.h" #include "liblwgeom_internal.h" #include "lwgeom_pg.h" #include <string.h> #include <assert.h> /* #define POSTGIS_DEBUG_LEVEL 4 */ Datum ST_MakeValid(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_MakeValid); Datum ST_MakeValid(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 elog(ERROR, "You need GEOS-3.3.0 or up for ST_MakeValid"); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ GSERIALIZED *in, *out; LWGEOM *lwgeom_in, *lwgeom_out; in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom_in = lwgeom_from_gserialized(in); switch ( lwgeom_in->type ) { case POINTTYPE: case MULTIPOINTTYPE: case LINETYPE: case POLYGONTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: break; default: lwerror("ST_MakeValid: unsupported geometry type %s", lwtype_name(lwgeom_in->type)); PG_RETURN_NULL(); break; } lwgeom_out = lwgeom_make_valid(lwgeom_in); if ( ! lwgeom_out ) { PG_FREE_IF_COPY(in, 0); PG_RETURN_NULL(); } out = geometry_serialize(lwgeom_out); PG_RETURN_POINTER(out); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } #if POSTGIS_GEOS_VERSION >= 33 /* Uses GEOS internally */ static LWGEOM* lwgeom_clean(LWGEOM* lwgeom_in); static LWGEOM* lwgeom_clean(LWGEOM* lwgeom_in) { LWGEOM* lwgeom_out; lwgeom_out = lwgeom_make_valid(lwgeom_in); if ( ! lwgeom_out ) { return NULL; } /* Check dimensionality is the same as input */ if ( lwgeom_dimensionality(lwgeom_in) != lwgeom_dimensionality(lwgeom_out) ) { lwnotice("lwgeom_clean: dimensional collapse (%d to %d)", lwgeom_dimensionality(lwgeom_in), lwgeom_dimensionality(lwgeom_out)); return NULL; } /* Check that the output is not a collection if the input wasn't */ if ( lwgeom_out->type == COLLECTIONTYPE && lwgeom_in->type != COLLECTIONTYPE ) { lwnotice("lwgeom_clean: mixed-type output (%s) " "from single-type input (%s)", lwtype_name(lwgeom_out->type), lwtype_name(lwgeom_in->type)); return NULL; } /* Force right-hand-rule (will only affect polygons) */ /* gout := ST_ForceRHR(gout); */ /* Remove repeated duplicated points ? */ /* gout = ST_RemoveRepeatedPoints(gout); */ return lwgeom_out; } #endif /* POSTGIS_GEOS_VERSION >= 33 */ Datum ST_CleanGeometry(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_CleanGeometry); Datum ST_CleanGeometry(PG_FUNCTION_ARGS) { #if POSTGIS_GEOS_VERSION < 33 elog(ERROR, "You need GEOS-3.3.0 or up for ST_CleanGeometry"); PG_RETURN_NULL(); #else /* POSTGIS_GEOS_VERSION >= 33 */ GSERIALIZED *in, *out; LWGEOM *lwgeom_in, *lwgeom_out; in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom_in = lwgeom_from_gserialized(in); /* Short-circuit: empty geometry are the cleanest ! */ #if 0 if ( lwgeom_is_empty(lwgeom_in) ) { out = geometry_serialize(lwgeom_in); PG_FREE_IF_COPY(in, 0); PG_RETURN_POINTER(out); } #endif lwgeom_out = lwgeom_clean(lwgeom_in); if ( ! lwgeom_out ) { PG_FREE_IF_COPY(in, 0); PG_RETURN_NULL(); } out = geometry_serialize(lwgeom_out); PG_RETURN_POINTER(out); #endif /* POSTGIS_GEOS_VERSION >= 33 */ } ��������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/geography_btree.c���������������������������������������������������0000644�0000000�0000000�00000016252�11722777314�020603� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: geography_btree.c 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "access/hash.h" #include "../postgis_config.h" #include "liblwgeom.h" /* For standard geometry types. */ #include "liblwgeom_internal.h" /* For FP comparators. */ #include "lwgeom_pg.h" /* For debugging macros. */ #include "gserialized_gist.h" #include "geography.h" /* For utility functions. */ Datum geography_lt(PG_FUNCTION_ARGS); Datum geography_le(PG_FUNCTION_ARGS); Datum geography_eq(PG_FUNCTION_ARGS); Datum geography_ge(PG_FUNCTION_ARGS); Datum geography_gt(PG_FUNCTION_ARGS); Datum geography_cmp(PG_FUNCTION_ARGS); /* ** Utility function to return the center point of a ** geocentric bounding box. We don't divide by two ** because we're only using the values for comparison. */ static void geography_gidx_center(GIDX *gidx, POINT3D *p) { p->x = GIDX_GET_MIN(gidx, 0) + GIDX_GET_MAX(gidx, 0); p->y = GIDX_GET_MIN(gidx, 1) + GIDX_GET_MAX(gidx, 1); p->z = GIDX_GET_MIN(gidx, 2) + GIDX_GET_MAX(gidx, 2); } /* ** BTree support function. Based on two geographies return true if ** they are "less than" and false otherwise. */ PG_FUNCTION_INFO_V1(geography_lt); Datum geography_lt(PG_FUNCTION_ARGS) { /* Put aside some stack memory and use it for GIDX pointers. */ char gboxmem1[GIDX_MAX_SIZE]; char gboxmem2[GIDX_MAX_SIZE]; GIDX *gbox1 = (GIDX*)gboxmem1; GIDX *gbox2 = (GIDX*)gboxmem2; POINT3D p1, p2; /* Must be able to build box for each argument (ie, not empty geometry) */ if ( ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(0), gbox1) || ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) { PG_RETURN_BOOL(FALSE); } geography_gidx_center(gbox1, &p1); geography_gidx_center(gbox2, &p2); if ( p1.x < p2.x || p1.y < p2.y || p1.z < p2.z ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } /* ** BTree support function. Based on two geographies return true if ** they are "less than or equal" and false otherwise. */ PG_FUNCTION_INFO_V1(geography_le); Datum geography_le(PG_FUNCTION_ARGS) { /* Put aside some stack memory and use it for GIDX pointers. */ char gboxmem1[GIDX_MAX_SIZE]; char gboxmem2[GIDX_MAX_SIZE]; GIDX *gbox1 = (GIDX*)gboxmem1; GIDX *gbox2 = (GIDX*)gboxmem2; POINT3D p1, p2; /* Must be able to build box for each argument (ie, not empty geometry) */ if ( ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(0), gbox1) || ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) { PG_RETURN_BOOL(FALSE); } geography_gidx_center(gbox1, &p1); geography_gidx_center(gbox2, &p2); if ( p1.x <= p2.x || p1.y <= p2.y || p1.z <= p2.z ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } /* ** BTree support function. Based on two geographies return true if ** they are "greater than" and false otherwise. */ PG_FUNCTION_INFO_V1(geography_gt); Datum geography_gt(PG_FUNCTION_ARGS) { /* Put aside some stack memory and use it for GIDX pointers. */ char gboxmem1[GIDX_MAX_SIZE]; char gboxmem2[GIDX_MAX_SIZE]; GIDX *gbox1 = (GIDX*)gboxmem1; GIDX *gbox2 = (GIDX*)gboxmem2; POINT3D p1, p2; /* Must be able to build box for each argument (ie, not empty geometry) */ if ( ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(0), gbox1) || ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) { PG_RETURN_BOOL(FALSE); } geography_gidx_center(gbox1, &p1); geography_gidx_center(gbox2, &p2); if ( p1.x > p2.x && p1.y > p2.y && p1.z > p2.z ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } /* ** BTree support function. Based on two geographies return true if ** they are "greater than or equal" and false otherwise. */ PG_FUNCTION_INFO_V1(geography_ge); Datum geography_ge(PG_FUNCTION_ARGS) { /* Put aside some stack memory and use it for GIDX pointers. */ char gboxmem1[GIDX_MAX_SIZE]; char gboxmem2[GIDX_MAX_SIZE]; GIDX *gbox1 = (GIDX*)gboxmem1; GIDX *gbox2 = (GIDX*)gboxmem2; POINT3D p1, p2; /* Must be able to build box for each argument (ie, not empty geometry) */ if ( ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(0), gbox1) || ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) { PG_RETURN_BOOL(FALSE); } geography_gidx_center(gbox1, &p1); geography_gidx_center(gbox2, &p2); if ( p1.x >= p2.x && p1.y >= p2.y && p1.z >= p2.z ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } #if 0 /* ** Calculate a hash code based on the geometry data alone */ static uint32 geography_hash(GSERIALIZED *g) { return DatumGetUInt32(hash_any((void*)g, VARSIZE(g))); } /* ** BTree support function. Based on two geographies return true if ** they are "equal" and false otherwise. This version uses a hash ** function to try and shoot for a more exact equality test. */ PG_FUNCTION_INFO_V1(geography_eq); Datum geography_eq(PG_FUNCTION_ARGS) { /* Perfect equals test based on hash */ GSERIALIZED *g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); uint32 h1 = geography_hash(g1); uint32 h2 = geography_hash(g2); PG_FREE_IF_COPY(g1,0); PG_FREE_IF_COPY(g2,0); if ( h1 == h2 ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } #endif /* ** BTree support function. Based on two geographies return true if ** they are "equal" and false otherwise. */ PG_FUNCTION_INFO_V1(geography_eq); Datum geography_eq(PG_FUNCTION_ARGS) { /* Put aside some stack memory and use it for GIDX pointers. */ char gboxmem1[GIDX_MAX_SIZE]; char gboxmem2[GIDX_MAX_SIZE]; GIDX *gbox1 = (GIDX*)gboxmem1; GIDX *gbox2 = (GIDX*)gboxmem2; POINT3D p1, p2; /* Must be able to build box for each argument (ie, not empty geometry) */ if ( ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(0), gbox1) || ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) { PG_RETURN_BOOL(FALSE); } geography_gidx_center(gbox1, &p1); geography_gidx_center(gbox2, &p2); if ( FP_EQUALS(p1.x, p2.x) && FP_EQUALS(p1.y, p2.y) && FP_EQUALS(p1.z, p2.z) ) PG_RETURN_BOOL(TRUE); PG_RETURN_BOOL(FALSE); } /* ** BTree support function. Based on two geographies return true if ** they are "equal" and false otherwise. */ PG_FUNCTION_INFO_V1(geography_cmp); Datum geography_cmp(PG_FUNCTION_ARGS) { /* Put aside some stack memory and use it for GIDX pointers. */ char gboxmem1[GIDX_MAX_SIZE]; char gboxmem2[GIDX_MAX_SIZE]; GIDX *gbox1 = (GIDX*)gboxmem1; GIDX *gbox2 = (GIDX*)gboxmem2; POINT3D p1, p2; /* Must be able to build box for each argument (ie, not empty geometry) */ if ( ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(0), gbox1) || ! gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), gbox2) ) { PG_RETURN_BOOL(FALSE); } geography_gidx_center(gbox1, &p1); geography_gidx_center(gbox2, &p2); if ( p1.x > p2.x && p1.y > p2.y && p1.z > p2.z ) PG_RETURN_INT32(1); if ( FP_EQUALS(p1.x, p2.x) && FP_EQUALS(p1.y, p2.y) && FP_EQUALS(p1.z, p2.z) ) PG_RETURN_INT32(0); PG_RETURN_INT32(-1); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/gserialized_typmod.c������������������������������������������������0000644�0000000�0000000�00000026250�12035117611�021314� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: geography_inout.c 7248 2011-05-25 18:42:16Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "../postgis_config.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include "utils/elog.h" #include "utils/array.h" #include "utils/builtins.h" /* for pg_atoi */ #include "lib/stringinfo.h" /* For binary input */ #include "catalog/pg_type.h" /* for CSTRINGOID */ #include "liblwgeom.h" /* For standard geometry types. */ #include "lwgeom_pg.h" /* For debugging macros. */ #include "geography.h" /* For utility functions. */ #include "lwgeom_export.h" /* For export functions. */ Datum geography_typmod_in(PG_FUNCTION_ARGS); Datum geometry_typmod_in(PG_FUNCTION_ARGS); Datum postgis_typmod_out(PG_FUNCTION_ARGS); Datum postgis_typmod_dims(PG_FUNCTION_ARGS); Datum postgis_typmod_srid(PG_FUNCTION_ARGS); Datum postgis_typmod_type(PG_FUNCTION_ARGS); Datum geography_enforce_typmod(PG_FUNCTION_ARGS); Datum geometry_enforce_typmod(PG_FUNCTION_ARGS); /* ** postgis_typmod_out(int) returns cstring */ PG_FUNCTION_INFO_V1(postgis_typmod_out); Datum postgis_typmod_out(PG_FUNCTION_ARGS) { char *s = (char*)palloc(64); char *str = s; uint32 typmod = PG_GETARG_INT32(0); uint32 srid = TYPMOD_GET_SRID(typmod); uint32 type = TYPMOD_GET_TYPE(typmod); uint32 hasz = TYPMOD_GET_Z(typmod); uint32 hasm = TYPMOD_GET_M(typmod); POSTGIS_DEBUGF(3, "Got typmod(srid = %d, type = %d, hasz = %d, hasm = %d)", srid, type, hasz, hasm); /* No SRID or type or dimensionality? Then no typmod at all. Return empty string. */ if ( ! ( srid || type || hasz || hasz ) ) { *str = '\0'; PG_RETURN_CSTRING(str); } /* Opening bracket. */ str += sprintf(str, "("); /* Has type? */ if ( type ) str += sprintf(str, "%s", lwtype_name(type)); else if ( (!type) && ( srid || hasz || hasm ) ) str += sprintf(str, "Geometry"); /* Has Z? */ if ( hasz ) str += sprintf(str, "%s", "Z"); /* Has M? */ if ( hasm ) str += sprintf(str, "%s", "M"); /* Comma? */ if ( srid ) str += sprintf(str, ","); /* Has SRID? */ if ( srid ) str += sprintf(str, "%d", srid); /* Closing bracket. */ str += sprintf(str, ")"); PG_RETURN_CSTRING(s); } /** * Check the consistency of the metadata we want to enforce in the typmod: * srid, type and dimensionality. If things are inconsistent, shut down the query. */ void postgis_valid_typmod(const GSERIALIZED *gser, int32_t typmod) { int32 geom_srid = gserialized_get_srid(gser); int32 geom_type = gserialized_get_type(gser); int32 geom_z = gserialized_has_z(gser); int32 geom_m = gserialized_has_m(gser); int32 typmod_srid = TYPMOD_GET_SRID(typmod); int32 typmod_type = TYPMOD_GET_TYPE(typmod); int32 typmod_z = TYPMOD_GET_Z(typmod); int32 typmod_m = TYPMOD_GET_M(typmod); POSTGIS_DEBUG(2, "Entered function"); /* No typmod (-1) => no preferences */ if (typmod < 0) return; POSTGIS_DEBUGF(3, "Got geom(type = %d, srid = %d, hasz = %d, hasm = %d)", geom_type, geom_srid, geom_z, geom_m); POSTGIS_DEBUGF(3, "Got typmod(type = %d, srid = %d, hasz = %d, hasm = %d)", typmod_type, typmod_srid, typmod_z, typmod_m); /* Typmod has a preference for SRID? Geometry SRID had better match. */ if ( typmod_srid > 0 && typmod_srid != geom_srid ) { ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Geometry SRID (%d) does not match column SRID (%d)", geom_srid, typmod_srid) )); } /* Typmod has a preference for geometry type. */ if ( typmod_type > 0 && /* GEOMETRYCOLLECTION column can hold any kind of collection */ ((typmod_type == COLLECTIONTYPE && ! (geom_type == COLLECTIONTYPE || geom_type == MULTIPOLYGONTYPE || geom_type == MULTIPOINTTYPE || geom_type == MULTILINETYPE )) || /* Other types must be strictly equal. */ (typmod_type != geom_type)) ) { ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Geometry type (%s) does not match column type (%s)", lwtype_name(geom_type), lwtype_name(typmod_type)) )); } /* Mismatched Z dimensionality. */ if ( typmod_z && ! geom_z ) { ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Column has Z dimension but geometry does not" ))); } /* Mismatched Z dimensionality (other way). */ if ( geom_z && ! typmod_z ) { ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Geometry has Z dimension but column does not" ))); } /* Mismatched M dimensionality. */ if ( typmod_m && ! geom_m ) { ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Column has M dimension but geometry does not" ))); } /* Mismatched M dimensionality (other way). */ if ( geom_m && ! typmod_m ) { ereport(ERROR, ( errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Geometry has M dimension but column does not" ))); } } static uint32 gserialized_typmod_in(ArrayType *arr, int is_geography) { uint32 typmod = 0; Datum *elem_values; int n = 0; int i = 0; if (ARR_ELEMTYPE(arr) != CSTRINGOID) ereport(ERROR, (errcode(ERRCODE_ARRAY_ELEMENT_ERROR), errmsg("typmod array must be type cstring[]"))); if (ARR_NDIM(arr) != 1) ereport(ERROR, (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), errmsg("typmod array must be one-dimensional"))); if (ARR_HASNULL(arr)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("typmod array must not contain nulls"))); deconstruct_array(arr, CSTRINGOID, -2, false, 'c', /* hardwire cstring representation details */ &elem_values, NULL, &n); /* Set the SRID to the default value first */ if ( is_geography) TYPMOD_SET_SRID(typmod, SRID_DEFAULT); else TYPMOD_SET_SRID(typmod, SRID_UNKNOWN); for (i = 0; i < n; i++) { if ( i == 0 ) /* TYPE */ { char *s = DatumGetCString(elem_values[i]); uint8_t type = 0; int z = 0; int m = 0; if ( geometry_type_from_string(s, &type, &z, &m) == LW_FAILURE ) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid geometry type modifier: %s", s))); } else { TYPMOD_SET_TYPE(typmod, type); if ( z ) TYPMOD_SET_Z(typmod); if ( m ) TYPMOD_SET_M(typmod); } } if ( i == 1 ) /* SRID */ { int srid = pg_atoi(DatumGetCString(elem_values[i]), sizeof(int32), '\0'); srid = clamp_srid(srid); POSTGIS_DEBUGF(3, "srid: %d", srid); if ( srid != SRID_UNKNOWN ) { /* TODO: Check that the value * provided is in fact a lonlat * entry in spatial_ref_sysj */ /* For now, we only accept SRID_DEFAULT. */ if ( is_geography && srid != SRID_DEFAULT ) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Currently, only %d is accepted as an SRID for GEOGRAPHY", SRID_DEFAULT))); } else { TYPMOD_SET_SRID(typmod, srid); } } #if 0 /* keep the default instead */ else { if ( is_geography ) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("UNKNOWN SRID is not for GEOGRAPHY"))); } } #endif /* keep the default for unknown */ } } pfree(elem_values); return typmod; } /* ** geography_typmod_in(cstring[]) returns int32 ** ** Modified from ArrayGetIntegerTypmods in PostgreSQL 8.3 */ PG_FUNCTION_INFO_V1(geography_typmod_in); Datum geography_typmod_in(PG_FUNCTION_ARGS) { ArrayType *arr = (ArrayType *) DatumGetPointer(PG_GETARG_DATUM(0)); uint32 typmod = gserialized_typmod_in(arr, LW_TRUE); PG_RETURN_INT32(typmod); } /* ** geometry_typmod_in(cstring[]) returns int32 ** ** Modified from ArrayGetIntegerTypmods in PostgreSQL 8.3 */ PG_FUNCTION_INFO_V1(geometry_typmod_in); Datum geometry_typmod_in(PG_FUNCTION_ARGS) { ArrayType *arr = (ArrayType *) DatumGetPointer(PG_GETARG_DATUM(0)); uint32 typmod = gserialized_typmod_in(arr, LW_FALSE); /* Not a geography */; PG_RETURN_INT32(typmod); } /* ** geography_enforce_typmod(*GSERIALIZED, uint32) returns *GSERIALIZED ** Ensure that an incoming geometry conforms to typmod restrictions on ** type, dims and srid. */ PG_FUNCTION_INFO_V1(geography_enforce_typmod); Datum geography_enforce_typmod(PG_FUNCTION_ARGS) { GSERIALIZED *arg = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); int32 typmod = PG_GETARG_INT32(1); /* We don't need to have different behavior based on explicitness. */ /* bool isExplicit = PG_GETARG_BOOL(2); */ /* Check if geometry typmod is consistent with the supplied one. */ postgis_valid_typmod(arg, typmod); PG_RETURN_POINTER(arg); } /* ** geometry_enforce_typmod(*GSERIALIZED, uint32) returns *GSERIALIZED ** Ensure that an incoming geometry conforms to typmod restrictions on ** type, dims and srid. */ PG_FUNCTION_INFO_V1(geometry_enforce_typmod); Datum geometry_enforce_typmod(PG_FUNCTION_ARGS) { GSERIALIZED *arg = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); int32 typmod = PG_GETARG_INT32(1); /* We don't need to have different behavior based on explicitness. */ /* bool isExplicit = PG_GETARG_BOOL(2); */ /* Check if geometry typmod is consistent with the supplied one. */ postgis_valid_typmod(arg, typmod); PG_RETURN_POINTER(arg); } /* ** postgis_typmod_type(uint32) returns cstring ** Used for geometry_columns and other views on system tables */ PG_FUNCTION_INFO_V1(postgis_typmod_type); Datum postgis_typmod_type(PG_FUNCTION_ARGS) { int32 typmod = PG_GETARG_INT32(0); int32 type = TYPMOD_GET_TYPE(typmod); char *s = (char*)palloc(64); char *ptr = s; text *stext; /* Has type? */ if ( typmod < 0 || type == 0 ) ptr += sprintf(ptr, "Geometry"); else ptr += sprintf(ptr, "%s", lwtype_name(type)); /* Has Z? */ if ( typmod >= 0 && TYPMOD_GET_Z(typmod) ) ptr += sprintf(ptr, "%s", "Z"); /* Has M? */ if ( typmod >= 0 && TYPMOD_GET_M(typmod) ) ptr += sprintf(ptr, "%s", "M"); stext = cstring2text(s); pfree(s); PG_RETURN_TEXT_P(stext); } /* ** postgis_typmod_dims(uint32) returns int ** Used for geometry_columns and other views on system tables */ PG_FUNCTION_INFO_V1(postgis_typmod_dims); Datum postgis_typmod_dims(PG_FUNCTION_ARGS) { int32 typmod = PG_GETARG_INT32(0); int32 dims = 2; if ( typmod < 0 ) PG_RETURN_INT32(dims); if ( TYPMOD_GET_Z(typmod) ) dims++; if ( TYPMOD_GET_M(typmod) ) dims++; PG_RETURN_INT32(dims); } /* ** postgis_typmod_srid(uint32) returns int ** Used for geometry_columns and other views on system tables */ PG_FUNCTION_INFO_V1(postgis_typmod_srid); Datum postgis_typmod_srid(PG_FUNCTION_ARGS) { int32 typmod = PG_GETARG_INT32(0); if ( typmod < 0 ) PG_RETURN_INT32(0); PG_RETURN_INT32(TYPMOD_GET_SRID(typmod)); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/legacy.sql.in�������������������������������������������������������0000644�0000000�0000000�00000155035�12121646322�017652� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id: legacy.sql.in 11175 2013-03-18 17:20:18Z strk $ -- Legacy functions without chip functions -- -- This is the full list including the legacy_minimal.sql (minimal) -- so no need to install both legacy and the minimal #include "legacy_minimal.sql.in" --- start functions that in theory should never have been used or internal like stuff deprecated -- these were superceded by PostGIS_AddBBOX , PostGIS_DropBBOX, PostGIS_HasBBOX in 1.5 -- CREATE OR REPLACE FUNCTION addbbox(geometry) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_addBBOX' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION dropbbox(geometry) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_dropBBOX' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION hasbbox(geometry) RETURNS bool AS 'MODULE_PATHNAME', 'LWGEOM_hasBBOX' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.2.2 -- never deprecated but don't think anyone uses it CREATE OR REPLACE FUNCTION getsrid(geometry) RETURNS int4 AS 'MODULE_PATHNAME','LWGEOM_get_srid' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeometryFromText(text, int4) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeometryFromText(text) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromWKB(bytea) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_WKB' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromWKB(bytea, int) RETURNS geometry AS 'SELECT ST_SetSRID(ST_GeomFromWKB($1), $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION noop(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_noop' LANGUAGE 'c' VOLATILE STRICT; -- ESRI ArcSDE compatibility functions -- -- We are remiving these because we don't -- think ESRI relies on them -- so their existence is pointless -- Availability: 1.5.0 -- PostGIS equivalent function: none CREATE OR REPLACE FUNCTION SE_EnvelopesIntersect(geometry,geometry) RETURNS boolean AS $$ SELECT $1 && $2 $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION SE_Is3D(geometry) RETURNS bool AS 'MODULE_PATHNAME', 'LWGEOM_hasz' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION SE_IsMeasured(geometry) RETURNS bool AS 'MODULE_PATHNAME', 'LWGEOM_hasm' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: Z(geometry) CREATE OR REPLACE FUNCTION SE_Z(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_z_point' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: M(geometry) CREATE OR REPLACE FUNCTION SE_M(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_m_point' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: locate_between_measures(geometry, float8, float8) CREATE OR REPLACE FUNCTION SE_LocateBetween(geometry, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m' LANGUAGE 'c' IMMUTABLE STRICT; -- PostGIS equivalent function: locate_along_measure(geometry, float8) CREATE OR REPLACE FUNCTION SE_LocateAlong(geometry, float8) RETURNS geometry AS $$ SELECT SE_LocateBetween($1, $2, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box2d(geometry) RETURNS box2d AS 'MODULE_PATHNAME','LWGEOM_to_BOX2D' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d(geometry) RETURNS box3d AS 'MODULE_PATHNAME','LWGEOM_to_BOX3D' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box(geometry) RETURNS box AS 'MODULE_PATHNAME','LWGEOM_to_BOX' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box2d(box3d) RETURNS box2d AS 'MODULE_PATHNAME','BOX3D_to_BOX2D' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d(box2d) RETURNS box3d AS 'MODULE_PATHNAME','BOX2D_to_BOX3D' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box(box3d) RETURNS box AS 'MODULE_PATHNAME','BOX3D_to_BOX' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_text(geometry) RETURNS text AS 'MODULE_PATHNAME','LWGEOM_to_text' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(box2d) RETURNS geometry AS 'MODULE_PATHNAME','BOX2D_to_LWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(box3d) RETURNS geometry AS 'MODULE_PATHNAME','BOX3D_to_LWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(text) RETURNS geometry AS 'MODULE_PATHNAME','parse_WKT_lwgeom' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(bytea) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_from_bytea' LANGUAGE 'c' IMMUTABLE STRICT; --- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_bytea(geometry) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_to_bytea' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d_in(cstring) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d_out(box3d) RETURNS cstring AS 'MODULE_PATHNAME', 'BOX3D_out' LANGUAGE 'c' IMMUTABLE STRICT; -- START MANAGEMENT FUNCTIONS -- These are legacy management functions with no place in our 2.0 world ----------------------------------------------------------------------- -- RENAME_GEOMETRY_TABLE_CONSTRAINTS() ----------------------------------------------------------------------- -- This function has been obsoleted for the difficulty in -- finding attribute on which the constraint is applied. -- AddGeometryColumn will name the constraints in a meaningful -- way, but nobody can rely on it since old postgis versions did -- not do that. ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION rename_geometry_table_constraints() RETURNS text AS $$ SELECT 'rename_geometry_table_constraint() is obsoleted'::text $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- FIX_GEOMETRY_COLUMNS() ----------------------------------------------------------------------- -- This function will: -- -- o try to fix the schema of records with an integer one -- (for PG>=73) -- -- o link records to system tables through attrelid and varattnum -- (for PG<75) -- -- o delete all records for which no linking was possible -- (for PG<75) -- -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION fix_geometry_columns() RETURNS text AS $$ DECLARE mislinked record; result text; linked integer; deleted integer; foundschema integer; BEGIN -- Since 7.3 schema support has been added. -- Previous postgis versions used to put the database name in -- the schema column. This needs to be fixed, so we try to -- set the correct schema for each geometry_colums record -- looking at table, column, type and srid. /** UPDATE geometry_columns SET f_table_schema = n.nspname FROM pg_namespace n, pg_class c, pg_attribute a, pg_constraint sridcheck, pg_constraint typecheck WHERE ( f_table_schema is NULL OR f_table_schema = '' OR f_table_schema NOT IN ( SELECT nspname::varchar FROM pg_namespace nn, pg_class cc, pg_attribute aa WHERE cc.relnamespace = nn.oid AND cc.relname = f_table_name::name AND aa.attrelid = cc.oid AND aa.attname = f_geometry_column::name)) AND f_table_name::name = c.relname AND c.oid = a.attrelid AND c.relnamespace = n.oid AND f_geometry_column::name = a.attname AND sridcheck.conrelid = c.oid AND sridcheck.consrc LIKE '(%srid(% = %)' AND sridcheck.consrc ~ textcat(' = ', srid::text) AND typecheck.conrelid = c.oid AND typecheck.consrc LIKE '((geometrytype(%) = ''%''::text) OR (% IS NULL))' AND typecheck.consrc ~ textcat(' = ''', type::text) AND NOT EXISTS ( SELECT oid FROM geometry_columns gc WHERE c.relname::varchar = gc.f_table_name AND n.nspname::varchar = gc.f_table_schema AND a.attname::varchar = gc.f_geometry_column ); GET DIAGNOSTICS foundschema = ROW_COUNT; -- no linkage to system table needed return 'fixed:'||foundschema::text; **/ return 'This function is obsolete now that geometry_columns is a view'; END; $$ LANGUAGE 'plpgsql' VOLATILE; ----------------------------------------------------------------------- -- PROBE_GEOMETRY_COLUMNS() ----------------------------------------------------------------------- -- Fill the geometry_columns table with values probed from the system -- catalogues. This is done by simply looking up constraints previously -- added to a geometry column. If geometry constraints are missing, no -- attempt is made to add the necessary constraints to the geometry -- column, nor is it recorded in the geometry_columns table. -- 3d flag cannot be probed, it defaults to 2 -- -- Note that bogus records already in geometry_columns are not -- overridden (a check for schema.table.column is performed), so -- to have a fresh probe backup your geometry_columns, delete from -- it and probe. ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION probe_geometry_columns() RETURNS text AS $$ DECLARE inserted integer; oldcount integer; probed integer; stale integer; BEGIN /* SELECT count(*) INTO oldcount FROM geometry_columns; SELECT count(*) INTO probed FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, pg_constraint sridcheck, pg_constraint typecheck WHERE t.typname = 'geometry' AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND sridcheck.connamespace = n.oid AND typecheck.connamespace = n.oid AND sridcheck.conrelid = c.oid AND sridcheck.consrc LIKE '(%srid('||a.attname||') = %)' AND typecheck.conrelid = c.oid AND typecheck.consrc LIKE '((geometrytype('||a.attname||') = ''%''::text) OR (% IS NULL))' ; INSERT INTO geometry_columns SELECT ''::varchar as f_table_catalogue, n.nspname::varchar as f_table_schema, c.relname::varchar as f_table_name, a.attname::varchar as f_geometry_column, 2 as coord_dimension, trim(both ' =)' from replace(replace(split_part( sridcheck.consrc, ' = ', 2), ')', ''), '(', ''))::integer AS srid, trim(both ' =)''' from substr(typecheck.consrc, strpos(typecheck.consrc, '='), strpos(typecheck.consrc, '::')- strpos(typecheck.consrc, '=') ))::varchar as type FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, pg_constraint sridcheck, pg_constraint typecheck WHERE t.typname = 'geometry' AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND sridcheck.connamespace = n.oid AND typecheck.connamespace = n.oid AND sridcheck.conrelid = c.oid AND sridcheck.consrc LIKE '(%srid('||a.attname||') = %)' AND typecheck.conrelid = c.oid AND typecheck.consrc LIKE '((geometrytype('||a.attname||') = ''%''::text) OR (% IS NULL))' AND NOT EXISTS ( SELECT oid FROM geometry_columns gc WHERE c.relname::varchar = gc.f_table_name AND n.nspname::varchar = gc.f_table_schema AND a.attname::varchar = gc.f_geometry_column ); GET DIAGNOSTICS inserted = ROW_COUNT; IF oldcount > probed THEN stale = oldcount-probed; ELSE stale = 0; END IF; RETURN 'probed:'||probed::text|| ' inserted:'||inserted::text|| ' conflicts:'||(probed-inserted)::text|| ' stale:'||stale::text;*/ RETURN 'This function is obsolete now that geometry_columns is a view'; END $$ LANGUAGE 'plpgsql' VOLATILE; -- END MANAGEMENT FUNCTIONS -- -- Deprecation in 1.5.0 -- these remarked out functions cause problems and no one uses them directly -- They should not be installed /** CREATE OR REPLACE FUNCTION st_geometry_analyze(internal) RETURNS bool AS 'MODULE_PATHNAME', 'geometry_analyze' LANGUAGE 'c' VOLATILE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_in(cstring) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_out(geometry) RETURNS cstring AS 'MODULE_PATHNAME','LWGEOM_out' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_recv(internal) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_recv' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_send(geometry) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_send' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_spheroid_in(cstring) RETURNS spheroid AS 'MODULE_PATHNAME','ellipsoid_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_spheroid_out(spheroid) RETURNS cstring AS 'MODULE_PATHNAME','ellipsoid_out' LANGUAGE 'c' IMMUTABLE STRICT; **/ -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_lt(geometry, geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_lt' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_le(geometry, geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_le' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_gt(geometry, geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_gt' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_ge(geometry, geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_ge' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_eq(geometry, geometry) RETURNS bool AS 'MODULE_PATHNAME', 'lwgeom_eq' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_cmp(geometry, geometry) RETURNS integer AS 'MODULE_PATHNAME', 'lwgeom_cmp' LANGUAGE 'c' IMMUTABLE STRICT; --- end functions that in theory should never have been used -- begin old ogc (and non-ST) names that have been replaced with new SQL-MM and SQL ST_ Like names -- -- AFFINE Functions -- -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_affine' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8) RETURNS geometry AS 'SELECT st_affine($1, $2, $3, 0, $4, $5, 0, 0, 0, 1, $6, $7, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RotateZ(geometry,float8) RETURNS geometry AS 'SELECT st_affine($1, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0, 1, 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Rotate(geometry,float8) RETURNS geometry AS 'SELECT st_rotateZ($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RotateX(geometry,float8) RETURNS geometry AS 'SELECT st_affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RotateY(geometry,float8) RETURNS geometry AS 'SELECT st_affine($1, cos($2), 0, sin($2), 0, 1, 0, -sin($2), 0, cos($2), 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Scale(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT st_affine($1, $2, 0, 0, 0, $3, 0, 0, 0, $4, 0, 0, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Scale(geometry,float8,float8) RETURNS geometry AS 'SELECT st_scale($1, $2, $3, 1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Translate(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT st_affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Translate(geometry,float8,float8) RETURNS geometry AS 'SELECT st_translate($1, $2, $3, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION TransScale(geometry,float8,float8,float8,float8) RETURNS geometry AS 'SELECT st_affine($1, $4, 0, 0, 0, $5, 0, 0, 0, 1, $2 * $4, $3 * $5, 0)' LANGUAGE 'sql' IMMUTABLE STRICT; -- END Affine functions -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AddPoint(geometry, geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_addpoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AddPoint(geometry, geometry, integer) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_addpoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Area(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_area_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- this is an alias for 'area(geometry)' -- there is nothing such an 'area3d'... -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Area2D(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsEWKB(geometry) RETURNS BYTEA AS 'MODULE_PATHNAME','WKBFromLWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsEWKB(geometry,text) RETURNS bytea AS 'MODULE_PATHNAME','WKBFromLWGEOM' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsEWKT(geometry) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asEWKT' LANGUAGE 'c' IMMUTABLE STRICT; -- AsGML(geom) / precision=15 version=2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsGML(geometry) RETURNS TEXT AS 'SELECT _ST_AsGML(2, $1, 15, 0, null, null)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsGML(geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsGML(2, $1, $2, 0, null, null)' LANGUAGE 'sql' IMMUTABLE STRICT; -- AsKML(geom, precision) / version=2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsKML(geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsKML(2, ST_transform($1,4326), $2, null)' LANGUAGE 'sql' IMMUTABLE STRICT; -- AsKML(geom) / precision=15 version=2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsKML(geometry) RETURNS TEXT AS 'SELECT _ST_AsKML(2, ST_Transform($1,4326), 15, null)' LANGUAGE 'sql' IMMUTABLE STRICT; -- AsKML(version, geom, precision) -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsKML(int4, geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsKML($1, ST_Transform($2,4326), $3, null)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsHEXEWKB(geometry) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsHEXEWKB(geometry, text) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsSVG(geometry) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asSVG' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsSVG(geometry,int4) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asSVG' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsSVG(geometry,int4,int4) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asSVG' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION azimuth(geometry,geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_azimuth' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION BdPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := ST_MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := ST_BuildArea(mline); IF GeometryType(geom) != 'POLYGON' THEN RAISE EXCEPTION 'Input returns more then a single polygon, try using BdMPolyFromText instead'; END IF; RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION BdMPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := ST_MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := ST_Multi(ST_BuildArea(mline)); RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION boundary(geometry) RETURNS geometry AS 'MODULE_PATHNAME','boundary' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION buffer(geometry,float8,integer) RETURNS geometry AS 'SELECT ST_Buffer($1, $2, $3)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION buffer(geometry,float8) RETURNS geometry AS 'MODULE_PATHNAME','buffer' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION BuildArea(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'ST_BuildArea' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- This is also available w/out GEOS CREATE OR REPLACE FUNCTION Centroid(geometry) RETURNS geometry AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Contains(geometry,geometry) RETURNS boolean AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION convexhull(geometry) RETURNS geometry AS 'MODULE_PATHNAME','convexhull' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION crosses(geometry,geometry) RETURNS boolean AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION distance(geometry,geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_mindistance2d' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION difference(geometry,geometry) RETURNS geometry AS 'MODULE_PATHNAME','difference' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Dimension(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_dimension' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION disjoint(geometry,geometry) RETURNS boolean AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION distance_sphere(geometry,geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_distance_sphere' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION distance_spheroid(geometry,geometry,spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Dump(geometry) RETURNS SETOF geometry_dump AS 'MODULE_PATHNAME', 'LWGEOM_dump' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION DumpRings(geometry) RETURNS SETOF geometry_dump AS 'MODULE_PATHNAME', 'LWGEOM_dump_rings' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Envelope(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_envelope' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Expand(box2d,float8) RETURNS box2d AS 'MODULE_PATHNAME', 'BOX2D_expand' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Expand(box3d,float8) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_expand' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Expand(geometry,float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_expand' LANGUAGE 'c' IMMUTABLE STRICT; CREATE AGGREGATE Extent( sfunc = ST_combine_bbox, basetype = geometry, finalfunc = box2d, stype = box3d ); -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Find_Extent(text,text) RETURNS box2d AS $$ DECLARE tablename alias for $1; columnname alias for $2; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT ST_Extent("' || columnname || '") As extent FROM "' || tablename || '"' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Find_Extent(text,text,text) RETURNS box2d AS $$ DECLARE schemaname alias for $1; tablename alias for $2; columnname alias for $3; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT ST_Extent("' || columnname || '") FROM "' || schemaname || '"."' || tablename || '" As extent ' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION EndPoint(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_endpoint_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ExteriorRing(geometry) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_exteriorring_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Force_2d(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_2d' LANGUAGE 'c' IMMUTABLE STRICT; -- an alias for force_3dz -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Force_3d(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Force_3dm(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dm' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Force_3dz(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Force_4d(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_4d' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Force_Collection(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_collection' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ForceRHR(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_clockwise_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeometryN(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_geometryn_collection' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomUnion(geometry,geometry) RETURNS geometry AS 'MODULE_PATHNAME','geomunion' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 -- replaced with postgis_getbbox CREATE OR REPLACE FUNCTION getbbox(geometry) RETURNS box2d AS 'MODULE_PATHNAME','LWGEOM_to_BOX2D' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION intersects(geometry,geometry) RETURNS boolean AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsRing(geometry) RETURNS boolean AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsSimple(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'issimple' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length_spheroid(geometry, spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length2d_spheroid(geometry, spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length3d_spheroid(geometry, spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineMerge(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'linemerge' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION locate_along_measure(geometry, float8) RETURNS geometry AS $$ SELECT ST_locate_between_measures($1, $2, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakeBox2d(geometry, geometry) RETURNS box2d AS 'MODULE_PATHNAME', 'BOX2D_construct' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePolygon(geometry, geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoly' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePolygon(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoly' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION multi(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_force_multi' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION InteriorRingN(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_interiorringn_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION intersection(geometry,geometry) RETURNS geometry AS 'MODULE_PATHNAME','intersection' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsClosed(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_isclosed' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsEmpty(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'LWGEOM_isempty' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsValid(geometry) RETURNS boolean AS 'MODULE_PATHNAME', 'isvalid' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- this is a fake (for back-compatibility) -- uses 3d if 3d is available, 2d otherwise -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length3d(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length2d(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION length(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION line_interpolate_point(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_line_interpolate_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION line_locate_point(geometry, geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_line_locate_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION line_substring(geometry, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_line_substring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromMultiPoint(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_line_from_mpoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineStringFromText(text) RETURNS geometry AS 'SELECT LineFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineStringFromText(text, int4) RETURNS geometry AS 'SELECT LineFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LinestringFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LinestringFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION locate_between_measures(geometry, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION M(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_m_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakeBox3d(geometry, geometry) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_construct' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION makeline_garray (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE AGGREGATE makeline ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_makeline_finalfn ); -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakeLine(geometry, geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makeline' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePoint(float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePoint(float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePoint(float8, float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePointM(float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makepoint3dm' LANGUAGE 'c' IMMUTABLE STRICT; -- This should really be deprecated -- 2011-01-04 robe CREATE OR REPLACE FUNCTION max_distance(geometry,geometry) RETURNS float8 AS 'MODULE_PATHNAME', 'LWGEOM_maxdistance2d_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION mem_size(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_mem_size' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1,$2)) = ''MULTIPOINT'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION MultiLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineStringFromText(text) RETURNS geometry AS 'SELECT ST_MLineFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineStringFromText(text, int4) RETURNS geometry AS 'SELECT MLineFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromText(text) RETURNS geometry AS 'SELECT MPointFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromText(text) RETURNS geometry AS 'SELECT MPointFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromText(text, int4) RETURNS geometry AS 'SELECT MPointFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolygonFromText(text, int4) RETURNS geometry AS 'SELECT MPolyFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolygonFromText(text) RETURNS geometry AS 'SELECT MPolyFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumInteriorRing(geometry) RETURNS integer AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumInteriorRings(geometry) RETURNS integer AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION npoints(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_npoints' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION nrings(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_nrings' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumGeometries(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_numgeometries_collection' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumPoints(geometry) RETURNS int4 AS 'MODULE_PATHNAME', 'LWGEOM_numpoints_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION overlaps(geometry,geometry) RETURNS boolean AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- this is a fake (for back-compatibility) -- uses 3d if 3d is available, 2d otherwise -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION perimeter3d(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION perimeter2d(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION point_inside_circle(geometry,float8,float8,float8) RETURNS bool AS 'MODULE_PATHNAME', 'LWGEOM_inside_circle_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POINT'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointN(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME','LWGEOM_pointn_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointOnSurface(geometry) RETURNS geometry AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromText(text, int4) RETURNS geometry AS 'SELECT PolyFromText($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromText(text) RETURNS geometry AS 'SELECT PolyFromText($1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Polygonize_GArray (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'polygonize_garray' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION relate(geometry,geometry) RETURNS text AS 'MODULE_PATHNAME','relate_full' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION relate(geometry,geometry,text) RETURNS boolean AS 'MODULE_PATHNAME','relate_pattern' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RemovePoint(geometry, integer) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_removepoint' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION reverse(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_reverse' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Segmentize(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_segmentize2d' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SetPoint(geometry, integer, geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_setpoint_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION shift_longitude(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_longitude_shift' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Simplify(geometry, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d' LANGUAGE 'c' IMMUTABLE STRICT; -- SnapToGrid(input, size) # xsize=ysize=size, offsets=0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, float8, float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, float8) RETURNS geometry AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize) -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, geometry, float8, float8, float8, float8) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid_pointoff' LANGUAGE 'c' IMMUTABLE STRICT; -- SnapToGrid(input, xsize, ysize) # offsets=0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, float8, float8) RETURNS geometry AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $3)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 -- this should be deprecated (do not think anyone has ever used it) CREATE OR REPLACE FUNCTION ST_MakeLine_GArray (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION StartPoint(geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_startpoint_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION symdifference(geometry,geometry) RETURNS geometry AS 'MODULE_PATHNAME','symdifference' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION symmetricdifference(geometry,geometry) RETURNS geometry AS 'MODULE_PATHNAME','symdifference' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION summary(geometry) RETURNS text AS 'MODULE_PATHNAME', 'LWGEOM_summary' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION transform(geometry,integer) RETURNS geometry AS 'MODULE_PATHNAME','transform' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION touches(geometry,geometry) RETURNS boolean AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION within(geometry,geometry) RETURNS boolean AS 'SELECT ST_Within($1, $2)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION X(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_x_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION xmax(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_xmax' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION xmin(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_xmin' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Y(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_y_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ymax(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_ymax' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ymin(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_ymin' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Z(geometry) RETURNS float8 AS 'MODULE_PATHNAME','LWGEOM_z_point' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION zmax(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_zmax' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION zmin(box3d) RETURNS FLOAT8 AS 'MODULE_PATHNAME','BOX3D_zmin' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION zmflag(geometry) RETURNS smallint AS 'MODULE_PATHNAME', 'LWGEOM_zmflag' LANGUAGE 'c' IMMUTABLE STRICT; -- end old ogc names that have been replaced with new SQL-MM names -- --- Start Aggregates and supporting functions -- -- Deprecation in: 1.2.3 CREATE AGGREGATE accum ( sfunc = pgis_geometry_accum_transfn, basetype = geometry, stype = pgis_abs, finalfunc = pgis_geometry_accum_finalfn ); -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION collect(geometry, geometry) RETURNS geometry AS 'MODULE_PATHNAME', 'LWGEOM_collect' LANGUAGE 'c' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION combine_bbox(box2d,geometry) RETURNS box2d AS 'MODULE_PATHNAME', 'BOX2D_combine' LANGUAGE 'c' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION combine_bbox(box3d,geometry) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_combine' LANGUAGE 'c' IMMUTABLE; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION ST_Polygonize_GArray (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'polygonize_garray' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Deprecation in 1.4.0 CREATE OR REPLACE FUNCTION ST_unite_garray (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME','pgis_union_geometry_array' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION unite_garray (geometry[]) RETURNS geometry AS 'MODULE_PATHNAME', 'pgis_union_geometry_array' LANGUAGE 'c' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE AGGREGATE Extent3d( sfunc = combine_bbox, basetype = geometry, stype = box3d ); -- Deprecation in 1.2.3 CREATE AGGREGATE memcollect( sfunc = ST_collect, basetype = geometry, stype = geometry ); -- Deprecation in 1.2.3 CREATE AGGREGATE MemGeomUnion ( basetype = geometry, sfunc = geomunion, stype = geometry ); -- End Aggregates and supporting functions -- ------------------------------------------------ --Begin 3D functions -- ------------------------------------------------ -- Renamed in 2.0.0 to ST_3DLength CREATE OR REPLACE FUNCTION ST_Length3D(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring' LANGUAGE 'c' IMMUTABLE STRICT; -- Renamed in 2.0.0 to ST_3DLength_spheroid CREATE OR REPLACE FUNCTION ST_Length_spheroid3D(geometry, spheroid) RETURNS FLOAT8 AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Renamed in 2.0.0 to ST_3DPerimeter CREATE OR REPLACE FUNCTION ST_Perimeter3D(geometry) RETURNS FLOAT8 AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly' LANGUAGE 'c' IMMUTABLE STRICT; -- Renamed in 2.0.0 to ST_3DMakeBox CREATE OR REPLACE FUNCTION ST_MakeBox3D(geometry, geometry) RETURNS box3d AS 'MODULE_PATHNAME', 'BOX3D_construct' LANGUAGE 'c' IMMUTABLE STRICT; -- Renamed in 2.0.0 to ST_3DExtent CREATE AGGREGATE ST_Extent3D( sfunc = ST_combine_bbox, basetype = geometry, stype = box3d ); --END 3D functions-- ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_spheroid.c���������������������������������������������������0000644�0000000�0000000�00000035315�11722777314�020625� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include "access/gist.h" #include "access/itup.h" #include "fmgr.h" #include "utils/elog.h" #include "../postgis_config.h" #include "liblwgeom.h" #include "lwgeom_pg.h" #define SHOW_DIGS_DOUBLE 15 #define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 6 + 1 + 3 +1) /* * distance from -126 49 to -126 49.011096139863 * in 'SPHEROID["GRS_1980",6378137,298.257222101]' * is 1234.000 */ /* PG-exposed */ Datum ellipsoid_in(PG_FUNCTION_ARGS); Datum ellipsoid_out(PG_FUNCTION_ARGS); Datum LWGEOM_length2d_ellipsoid(PG_FUNCTION_ARGS); Datum LWGEOM_length_ellipsoid_linestring(PG_FUNCTION_ARGS); Datum LWGEOM_distance_ellipsoid(PG_FUNCTION_ARGS); Datum LWGEOM_distance_sphere(PG_FUNCTION_ARGS); Datum geometry_distance_spheroid(PG_FUNCTION_ARGS); /* internal */ double distance_sphere_method(double lat1, double long1,double lat2,double long2, SPHEROID *sphere); double distance_ellipse_calculation(double lat1, double long1, double lat2, double long2, SPHEROID *sphere); double distance_ellipse(double lat1, double long1, double lat2, double long2, SPHEROID *sphere); double deltaLongitude(double azimuth, double sigma, double tsm,SPHEROID *sphere); double mu2(double azimuth,SPHEROID *sphere); double bigA(double u2); double bigB(double u2); /* * Use the WKT definition of an ellipsoid * ie. SPHEROID["name",A,rf] or SPHEROID("name",A,rf) * SPHEROID["GRS_1980",6378137,298.257222101] * wkt says you can use "(" or "[" */ PG_FUNCTION_INFO_V1(ellipsoid_in); Datum ellipsoid_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); SPHEROID *sphere = (SPHEROID *) palloc(sizeof(SPHEROID)); int nitems; double rf; memset(sphere,0, sizeof(SPHEROID)); if (strstr(str,"SPHEROID") != str ) { elog(ERROR,"SPHEROID parser - doesnt start with SPHEROID"); pfree(sphere); PG_RETURN_NULL(); } nitems = sscanf(str,"SPHEROID[\"%19[^\"]\",%lf,%lf]", sphere->name, &sphere->a, &rf); if ( nitems==0) nitems = sscanf(str,"SPHEROID(\"%19[^\"]\",%lf,%lf)", sphere->name, &sphere->a, &rf); if (nitems != 3) { elog(ERROR,"SPHEROID parser - couldnt parse the spheroid"); pfree(sphere); PG_RETURN_NULL(); } sphere->f = 1.0/rf; sphere->b = sphere->a - (1.0/rf)*sphere->a; sphere->e_sq = ((sphere->a*sphere->a) - (sphere->b*sphere->b)) / (sphere->a*sphere->a); sphere->e = sqrt(sphere->e_sq); PG_RETURN_POINTER(sphere); } PG_FUNCTION_INFO_V1(ellipsoid_out); Datum ellipsoid_out(PG_FUNCTION_ARGS) { SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(0); char *result; result = palloc(MAX_DIGS_DOUBLE + MAX_DIGS_DOUBLE + 20 + 9 + 2); sprintf(result,"SPHEROID(\"%s\",%.15g,%.15g)", sphere->name, sphere->a, 1.0/sphere->f); PG_RETURN_CSTRING(result); } /* * support function for distance calc * code is taken from David Skea * Geographic Data BC, Province of British Columbia, Canada. * Thanks to GDBC and David Skea for allowing this to be * put in PostGIS. */ double deltaLongitude(double azimuth, double sigma, double tsm,SPHEROID *sphere) { /* compute the expansion C */ double das,C; double ctsm,DL; das = cos(azimuth)*cos(azimuth); C = sphere->f/16.0 * das * (4.0 + sphere->f * (4.0 - 3.0 * das)); /* compute the difference in longitude */ ctsm = cos(tsm); DL = ctsm + C * cos(sigma) * (-1.0 + 2.0 * ctsm*ctsm); DL = sigma + C * sin(sigma) * DL; return (1.0 - C) * sphere->f * sin(azimuth) * DL; } /* * support function for distance calc * code is taken from David Skea * Geographic Data BC, Province of British Columbia, Canada. * Thanks to GDBC and David Skea for allowing this to be * put in PostGIS. */ double mu2(double azimuth,SPHEROID *sphere) { double e2; e2 = sqrt(sphere->a*sphere->a-sphere->b*sphere->b)/sphere->b; return cos(azimuth)*cos(azimuth) * e2*e2; } /* * Support function for distance calc * code is taken from David Skea * Geographic Data BC, Province of British Columbia, Canada. * Thanks to GDBC and David Skea for allowing this to be * put in PostGIS. */ double bigA(double u2) { return 1.0 + u2/256.0 * (64.0 + u2 * (-12.0 + 5.0 * u2)); } /* * Support function for distance calc * code is taken from David Skea * Geographic Data BC, Province of British Columbia, Canada. * Thanks to GDBC and David Skea for allowing this to be * put in PostGIS. */ double bigB(double u2) { return u2/512.0 * (128.0 + u2 * (-64.0 + 37.0 * u2)); } double distance_ellipse(double lat1, double long1, double lat2, double long2, SPHEROID *sphere) { double result = 0; #if POSTGIS_DEBUG_LEVEL >= 4 double result2 = 0; #endif if ( (lat1==lat2) && (long1 == long2) ) { return 0.0; /* same point, therefore zero distance */ } result = distance_ellipse_calculation(lat1,long1,lat2,long2,sphere); #if POSTGIS_DEBUG_LEVEL >= 4 result2 = distance_sphere_method(lat1, long1,lat2,long2, sphere); POSTGIS_DEBUGF(4, "delta = %lf, skae says: %.15lf,2 circle says: %.15lf", (result2-result),result,result2); POSTGIS_DEBUGF(4, "2 circle says: %.15lf",result2); #endif if (result != result) /* NaN check * (x==x for all x except NaN by IEEE definition) */ { result = distance_sphere_method(lat1, long1, lat2,long2, sphere); } return result; } /* * Given 2 lat/longs and ellipse, find the distance * note original r = 1st, s=2nd location */ double distance_ellipse_calculation(double lat1, double long1, double lat2, double long2, SPHEROID *sphere) { /* * Code is taken from David Skea * Geographic Data BC, Province of British Columbia, Canada. * Thanks to GDBC and David Skea for allowing this to be * put in PostGIS. */ double L1,L2,sinU1,sinU2,cosU1,cosU2; double dl,dl1,dl2,dl3,cosdl1,sindl1; double cosSigma,sigma,azimuthEQ,tsm; double u2,A,B; double dsigma; double TEMP; int iterations; L1 = atan((1.0 - sphere->f ) * tan( lat1) ); L2 = atan((1.0 - sphere->f ) * tan( lat2) ); sinU1 = sin(L1); sinU2 = sin(L2); cosU1 = cos(L1); cosU2 = cos(L2); dl = long2- long1; dl1 = dl; cosdl1 = cos(dl); sindl1 = sin(dl); iterations = 0; do { cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosdl1; sigma = acos(cosSigma); azimuthEQ = asin((cosU1 * cosU2 * sindl1)/sin(sigma)); /* * Patch from Patrica Tozer to handle minor * mathematical stability problem */ TEMP = cosSigma - (2.0 * sinU1 * sinU2)/ (cos(azimuthEQ)*cos(azimuthEQ)); if (TEMP > 1) { TEMP = 1; } else if (TEMP < -1) { TEMP = -1; } tsm = acos(TEMP); /* (old code?) tsm = acos(cosSigma - (2.0 * sinU1 * sinU2)/(cos(azimuthEQ)*cos(azimuthEQ))); */ dl2 = deltaLongitude(azimuthEQ, sigma, tsm,sphere); dl3 = dl1 - (dl + dl2); dl1 = dl + dl2; cosdl1 = cos(dl1); sindl1 = sin(dl1); iterations++; } while ( (iterations<999) && (fabs(dl3) > 1.0e-032)); /* compute expansions A and B */ u2 = mu2(azimuthEQ,sphere); A = bigA(u2); B = bigB(u2); /* compute length of geodesic */ dsigma = B * sin(sigma) * (cos(tsm) + (B*cosSigma*(-1.0 + 2.0 * (cos(tsm)*cos(tsm))))/4.0); return sphere->b * (A * (sigma - dsigma)); } /* * Find the "length of a geometry" * length2d_spheroid(point, sphere) = 0 * length2d_spheroid(line, sphere) = length of line * length2d_spheroid(polygon, sphere) = 0 * -- could make sense to return sum(ring perimeter) * uses ellipsoidal math to find the distance * x's are longitude, and y's are latitude - both in decimal degrees */ PG_FUNCTION_INFO_V1(LWGEOM_length2d_ellipsoid); Datum LWGEOM_length2d_ellipsoid(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double dist = lwgeom_length_spheroid(lwgeom, sphere); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(dist); } /* * Find the "length of a geometry" * * length2d_spheroid(point, sphere) = 0 * length2d_spheroid(line, sphere) = length of line * length2d_spheroid(polygon, sphere) = 0 * -- could make sense to return sum(ring perimeter) * uses ellipsoidal math to find the distance * x's are longitude, and y's are latitude - both in decimal degrees */ PG_FUNCTION_INFO_V1(LWGEOM_length_ellipsoid_linestring); Datum LWGEOM_length_ellipsoid_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1); double length = 0.0; /* EMPTY things have no length */ if ( lwgeom_is_empty(lwgeom) ) { lwgeom_free(lwgeom); PG_RETURN_FLOAT8(0.0); } length = lwgeom_length_spheroid(lwgeom, sphere); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); /* Something went wrong... */ if ( length < 0.0 ) { elog(ERROR, "lwgeom_length_spheroid returned length < 0.0"); PG_RETURN_NULL(); } /* Clean up */ PG_RETURN_FLOAT8(length); } /* * For some lat/long points, the above method doesnt calculate the distance very well. * Typically this is for two lat/long points that are very very close together (<10cm). * This gets worse closer to the equator. * * This method works very well for very close together points, not so well if they're * far away (>1km). * * METHOD: * We create two circles (with Radius R and Radius S) and use these to calculate the distance. * * The first (R) is basically a (north-south) line of longitude. * Its radius is approximated by looking at the ellipse. Near the equator R = 'a' (earth's major axis) * near the pole R = 'b' (earth's minor axis). * * The second (S) is basically a (east-west) line of lattitude. * Its radius runs from 'a' (major axis) at the equator, and near 0 at the poles. * * * North pole * * * * * *\--S-- * * R + * * \ + * * A\ + * * ------ \ Equator/centre of earth * * * * * * * * * * * * * South pole * (side view of earth) * * Angle A is lat1 * R is the distance from the centre of the earth to the lat1/long1 point on the surface * of the Earth. * S is the circle-of-lattitude. Its calculated from the right triangle defined by * the angle (90-A), and the hypothenus R. * * * * Once R and S have been calculated, the actual distance between the two points can be * calculated. * * We dissolve the vector from lat1,long1 to lat2,long2 into its X and Y components (called DeltaX,DeltaY). * The actual distance that these angle-based measurements represent is taken from the two * circles we just calculated; R (for deltaY) and S (for deltaX). * * (if deltaX is 1 degrees, then that distance represents 1/360 of a circle of radius S.) * * * Parts taken from PROJ4 - geodetic_to_geocentric() (for calculating Rn) * * remember that lat1/long1/lat2/long2 are comming in a *RADIANS* not degrees. * * By Patricia Tozer and Dave Blasby * * This is also called the "curvature method". */ double distance_sphere_method(double lat1, double long1,double lat2,double long2, SPHEROID *sphere) { double R,S,X,Y,deltaX,deltaY; double distance = 0.0; double sin_lat = sin(lat1); double sin2_lat = sin_lat * sin_lat; double Geocent_a = sphere->a; double Geocent_e2 = sphere->e_sq; R = Geocent_a / (sqrt(1.0e0 - Geocent_e2 * sin2_lat)); /* 90 - lat1, but in radians */ S = R * sin(M_PI/2.0-lat1) ; deltaX = long2 - long1; /* in rads */ deltaY = lat2 - lat1; /* in rads */ /* think: a % of 2*pi*S */ X = deltaX/(2.0*M_PI) * 2 * M_PI * S; Y = deltaY/(2.0*M_PI) * 2 * M_PI * R; distance = sqrt((X * X + Y * Y)); return distance; } /* * distance (geometry,geometry, sphere) */ PG_FUNCTION_INFO_V1(geometry_distance_spheroid); Datum geometry_distance_spheroid(PG_FUNCTION_ARGS) { GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); SPHEROID *sphere = (SPHEROID *)PG_GETARG_POINTER(2); int type1 = gserialized_get_type(geom1); int type2 = gserialized_get_type(geom2); bool use_spheroid = PG_GETARG_BOOL(3); LWGEOM *lwgeom1, *lwgeom2; double distance; /* Calculate some other parameters on the spheroid */ spheroid_init(sphere, sphere->a, sphere->b); /* Catch sphere special case and re-jig spheroid appropriately */ if ( ! use_spheroid ) { sphere->a = sphere->b = sphere->radius; } if ( ! ( type1 == POINTTYPE || type1 == LINETYPE || type1 == POLYGONTYPE || type1 == MULTIPOINTTYPE || type1 == MULTILINETYPE || type1 == MULTIPOLYGONTYPE )) { elog(ERROR, "geometry_distance_spheroid: Only point/line/polygon supported.\n"); PG_RETURN_NULL(); } if ( ! ( type2 == POINTTYPE || type2 == LINETYPE || type2 == POLYGONTYPE || type2 == MULTIPOINTTYPE || type2 == MULTILINETYPE || type2 == MULTIPOLYGONTYPE )) { elog(ERROR, "geometry_distance_spheroid: Only point/line/polygon supported.\n"); PG_RETURN_NULL(); } if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2)) { elog(ERROR, "geometry_distance_spheroid: Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } /* Get #LWGEOM structures */ lwgeom1 = lwgeom_from_gserialized(geom1); lwgeom2 = lwgeom_from_gserialized(geom2); /* We are going to be calculating geodetic distances */ lwgeom_set_geodetic(lwgeom1, LW_TRUE); lwgeom_set_geodetic(lwgeom2, LW_TRUE); distance = lwgeom_distance_spheroid(lwgeom1, lwgeom2, sphere, 0.0); PG_RETURN_FLOAT8(distance); } PG_FUNCTION_INFO_V1(LWGEOM_distance_ellipsoid); Datum LWGEOM_distance_ellipsoid(PG_FUNCTION_ARGS) { PG_RETURN_DATUM(DirectFunctionCall4(geometry_distance_spheroid, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PG_GETARG_DATUM(2), BoolGetDatum(TRUE))); } PG_FUNCTION_INFO_V1(LWGEOM_distance_sphere); Datum LWGEOM_distance_sphere(PG_FUNCTION_ARGS) { SPHEROID s; /* Init to WGS84 */ spheroid_init(&s, 6378137.0, 6356752.314245179498); s.a = s.b = s.radius; PG_RETURN_DATUM(DirectFunctionCall4(geometry_distance_spheroid, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PointerGetDatum(&s), BoolGetDatum(FALSE))); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_in_geohash.c�������������������������������������������������0000644�0000000�0000000�00000005074�12143123367�021102� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * Copyright 2012 J Smith <dark.panda@gmail.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <assert.h> #include "postgres.h" #include "../postgis_config.h" #include "lwgeom_pg.h" #include "liblwgeom.h" #include "liblwgeom_internal.h"/* for decode_geohash_bbox */ Datum box2d_from_geohash(PG_FUNCTION_ARGS); Datum point_from_geohash(PG_FUNCTION_ARGS); static void geohash_lwerror(char *msg, int error_code) { POSTGIS_DEBUGF(3, "ST_Box2dFromGeoHash ERROR %i", error_code); lwerror("%s", msg); } #include "lwgeom_export.h" static GBOX* parse_geohash(char *geohash, int precision) { GBOX *box = NULL; double lat[2], lon[2]; POSTGIS_DEBUG(2, "parse_geohash called."); if (NULL == geohash) { geohash_lwerror("invalid GeoHash representation", 2); } decode_geohash_bbox(geohash, lat, lon, precision); POSTGIS_DEBUGF(2, "ST_Box2dFromGeoHash sw: %.20f, %.20f", lon[0], lat[0]); POSTGIS_DEBUGF(2, "ST_Box2dFromGeoHash ne: %.20f, %.20f", lon[1], lat[1]); box = gbox_new(gflags(0, 0, 1)); box->xmin = lon[0]; box->ymin = lat[0]; box->xmax = lon[1]; box->ymax = lat[1]; POSTGIS_DEBUG(2, "parse_geohash finished."); return box; } PG_FUNCTION_INFO_V1(box2d_from_geohash); Datum box2d_from_geohash(PG_FUNCTION_ARGS) { GBOX *box = NULL; text *geohash_input = NULL; char *geohash = NULL; int precision = -1; if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } if (!PG_ARGISNULL(1)) { precision = PG_GETARG_INT32(1); } geohash_input = PG_GETARG_TEXT_P(0); geohash = text2cstring(geohash_input); box = parse_geohash(geohash, precision); PG_RETURN_POINTER(box); } PG_FUNCTION_INFO_V1(point_from_geohash); Datum point_from_geohash(PG_FUNCTION_ARGS) { GBOX *box = NULL; LWPOINT *point = NULL; GSERIALIZED *result = NULL; text *geohash_input = NULL; char *geohash = NULL; double lon, lat; int precision = -1; if (PG_ARGISNULL(0)) { PG_RETURN_NULL(); } if (!PG_ARGISNULL(1)) { precision = PG_GETARG_INT32(1); } geohash_input = PG_GETARG_TEXT_P(0); geohash = text2cstring(geohash_input); box = parse_geohash(geohash, precision); lon = box->xmin + (box->xmax - box->xmin) / 2; lat = box->ymin + (box->ymax - box->ymin) / 2; point = lwpoint_make2d(SRID_UNKNOWN, lon, lat); result = geometry_serialize((LWGEOM *) point); lwfree(box); PG_RETURN_POINTER(result); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/geography.sql.in����������������������������������������������������0000644�0000000�0000000�00000063063�12146376765�020414� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--------------------------------------------------------------------------- -- $Id: geography.sql.in 11482 2013-05-20 10:41:57Z robe $ -- -- PostGIS - Spatial Types for PostgreSQL -- Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- --------------------------------------------------------------------------- ----------------------------------------------------------------------------- -- GEOGRAPHY TYPE ----------------------------------------------------------------------------- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_typmod_in(cstring[]) RETURNS integer AS 'MODULE_PATHNAME','geography_typmod_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_typmod_out(integer) RETURNS cstring AS 'MODULE_PATHNAME','postgis_typmod_out' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_in(cstring, oid, integer) RETURNS geography AS 'MODULE_PATHNAME','geography_in' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_out(geography) RETURNS cstring AS 'MODULE_PATHNAME','geography_out' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geography_recv(internal, oid, integer) RETURNS geography AS 'MODULE_PATHNAME','geography_recv' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geography_send(geography) RETURNS bytea AS 'MODULE_PATHNAME','geography_send' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_analyze(internal) RETURNS bool AS 'MODULE_PATHNAME','gserialized_analyze_nd' LANGUAGE 'c' VOLATILE STRICT; -- Availability: 1.5.0 CREATE TYPE geography ( internallength = variable, input = geography_in, output = geography_out, receive = geography_recv, send = geography_send, typmod_in = geography_typmod_in, typmod_out = geography_typmod_out, delimiter = ':', analyze = geography_analyze, storage = main, alignment = double ); -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography(geography, integer, boolean) RETURNS geography AS 'MODULE_PATHNAME','geography_enforce_typmod' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE CAST (geography AS geography) WITH FUNCTION geography(geography, integer, boolean) AS IMPLICIT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION geography(bytea) RETURNS geography AS 'MODULE_PATHNAME','LWGEOM_from_bytea' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION bytea(geography) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_to_bytea' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE CAST (bytea AS geography) WITH FUNCTION geography(bytea) AS IMPLICIT; -- Availability: 2.0.0 CREATE CAST (geography AS bytea) WITH FUNCTION bytea(geography) AS IMPLICIT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_AsText(geography) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asText' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_AsText(text) RETURNS text AS $$ SELECT ST_AsText($1::geometry); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeographyFromText(text) RETURNS geography AS 'MODULE_PATHNAME','geography_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeogFromText(text) RETURNS geography AS 'MODULE_PATHNAME','geography_from_text' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeogFromWKB(bytea) RETURNS geography AS 'MODULE_PATHNAME','geography_from_binary' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_typmod_dims(integer) RETURNS integer AS 'MODULE_PATHNAME','postgis_typmod_dims' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_typmod_srid(integer) RETURNS integer AS 'MODULE_PATHNAME','postgis_typmod_srid' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_typmod_type(integer) RETURNS text AS 'MODULE_PATHNAME','postgis_typmod_type' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE VIEW geography_columns AS SELECT current_database() AS f_table_catalog, n.nspname AS f_table_schema, c.relname AS f_table_name, a.attname AS f_geography_column, postgis_typmod_dims(a.atttypmod) AS coord_dimension, postgis_typmod_srid(a.atttypmod) AS srid, postgis_typmod_type(a.atttypmod) AS type FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE t.typname = 'geography' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND NOT pg_is_other_temp_schema(c.relnamespace) AND has_table_privilege( c.oid, 'SELECT'::text ); -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography(geometry) RETURNS geography AS 'MODULE_PATHNAME','geography_from_geometry' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE CAST (geometry AS geography) WITH FUNCTION geography(geometry) AS IMPLICIT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geometry(geography) RETURNS geometry AS 'MODULE_PATHNAME','geometry_from_geography' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE CAST (geography AS geometry) WITH FUNCTION geometry(geography) ; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- GiST Support Functions -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_consistent(internal,geography,int4) RETURNS bool AS 'MODULE_PATHNAME' ,'gserialized_gist_consistent' LANGUAGE 'c'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_compress(internal) RETURNS internal AS 'MODULE_PATHNAME','gserialized_gist_compress' LANGUAGE 'c'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_penalty(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_penalty' LANGUAGE 'c'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_picksplit(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_picksplit' LANGUAGE 'c'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_union(bytea, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_union' LANGUAGE 'c'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_same(box2d, box2d, internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_same' LANGUAGE 'c'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_decompress(internal) RETURNS internal AS 'MODULE_PATHNAME' ,'gserialized_gist_decompress' LANGUAGE 'c'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_overlaps(geography, geography) RETURNS boolean AS 'MODULE_PATHNAME' ,'gserialized_overlaps' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OPERATOR && ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_overlaps, COMMUTATOR = '&&', RESTRICT = gserialized_gist_sel_nd, JOIN = gserialized_gist_joinsel_nd ); -- Availability: 1.5.0 CREATE OPERATOR CLASS gist_geography_ops DEFAULT FOR TYPE geography USING GIST AS STORAGE gidx, OPERATOR 3 && , -- OPERATOR 6 ~= , -- OPERATOR 7 ~ , -- OPERATOR 8 @ , FUNCTION 1 geography_gist_consistent (internal, geography, int4), FUNCTION 2 geography_gist_union (bytea, internal), FUNCTION 3 geography_gist_compress (internal), FUNCTION 4 geography_gist_decompress (internal), FUNCTION 5 geography_gist_penalty (internal, internal, internal), FUNCTION 6 geography_gist_picksplit (internal, internal), FUNCTION 7 geography_gist_same (box2d, box2d, internal); -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- B-Tree Functions -- For sorting and grouping -- Availability: 1.5.0 -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- CREATE OR REPLACE FUNCTION geography_lt(geography, geography) RETURNS bool AS 'MODULE_PATHNAME', 'geography_lt' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_le(geography, geography) RETURNS bool AS 'MODULE_PATHNAME', 'geography_le' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_gt(geography, geography) RETURNS bool AS 'MODULE_PATHNAME', 'geography_gt' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_ge(geography, geography) RETURNS bool AS 'MODULE_PATHNAME', 'geography_ge' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_eq(geography, geography) RETURNS bool AS 'MODULE_PATHNAME', 'geography_eq' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_cmp(geography, geography) RETURNS integer AS 'MODULE_PATHNAME', 'geography_cmp' LANGUAGE 'c' IMMUTABLE STRICT; -- -- Sorting operators for Btree -- CREATE OPERATOR < ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR <= ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR = ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_eq, COMMUTATOR = '=', -- we might implement a faster negator here RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR >= ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR > ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR CLASS btree_geography_ops DEFAULT FOR TYPE geography USING btree AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 geography_cmp (geography, geography); -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Export Functions -- Availability: 1.5.0 -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- -- SVG OUTPUT -- -- ST_AsSVG(geography, rel, precision) -- rel int4 DEFAULT 0, maxdecimaldigits int4 DEFAULT 15 -- Changed 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_AsSVG(geog geography,rel int4 DEFAULT 0,maxdecimaldigits int4 DEFAULT 15) RETURNS text AS 'MODULE_PATHNAME','geography_as_svg' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_AsSVG(text) RETURNS text AS $$ SELECT ST_AsSVG($1::geometry,0,15); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- -- GML OUTPUT -- -- _ST_AsGML(version, geography, precision, option, prefix, id) CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geography, int4, int4, text, text) RETURNS text AS 'MODULE_PATHNAME','geography_as_gml' LANGUAGE 'c' IMMUTABLE; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- Change 2.0.0 to use base function CREATE OR REPLACE FUNCTION ST_AsGML(text) RETURNS text AS $$ SELECT _ST_AsGML(2,$1::geometry,15,0, NULL, NULL); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsGML (geography, precision, option) / version=2 -- Availability: 1.5.0 -- Changed: 2.0.0 to use default args CREATE OR REPLACE FUNCTION ST_AsGML(geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) RETURNS text AS 'SELECT _ST_AsGML(2, $1, $2, $3, null, null)' LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsGML(version, geography, precision, option, prefix) -- Changed: 2.0.0 to use default args and allow named args -- Changed: 2.1.0 enhance to allow id value -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_AsGML(version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0, nprefix text DEFAULT NULL, id text DEFAULT NULL) RETURNS text AS $$ SELECT _ST_AsGML($1, $2, $3, $4, $5, $6);$$ LANGUAGE 'sql' IMMUTABLE; -- -- KML OUTPUT -- -- _ST_AsKML(version, geography, precision) CREATE OR REPLACE FUNCTION _ST_AsKML(int4, geography, int4, text) RETURNS text AS 'MODULE_PATHNAME','geography_as_kml' LANGUAGE 'c' IMMUTABLE; -- AsKML(geography,precision) / version=2 -- Changed: 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_AsKML(geog geography, maxdecimaldigits int4 DEFAULT 15) RETURNS text AS 'SELECT _ST_AsKML(2, $1, $2, null)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- Deprecated 2.0.0 CREATE OR REPLACE FUNCTION ST_AsKML(text) RETURNS text AS $$ SELECT _ST_AsKML(2, $1::geometry, 15, null); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsKML(version, geography, precision, prefix) -- Availability: 2.0.0 nprefix added -- Changed: 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_AsKML(version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, nprefix text DEFAULT null) RETURNS text AS 'SELECT _ST_AsKML($1, $2, $3, $4)' LANGUAGE 'sql' IMMUTABLE; -- -- GeoJson Output -- CREATE OR REPLACE FUNCTION _ST_AsGeoJson(int4, geography, int4, int4) RETURNS text AS 'MODULE_PATHNAME','geography_as_geojson' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- Deprecated in 2.0.0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(text) RETURNS text AS $$ SELECT _ST_AsGeoJson(1, $1::geometry,15,0); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsGeoJson(geography, precision, options) / version=1 -- Changed: 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_AsGeoJson(geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) RETURNS text AS $$ SELECT _ST_AsGeoJson(1, $1, $2, $3); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geography, precision,options) -- Changed: 2.0.0 to use default args and named args CREATE OR REPLACE FUNCTION ST_AsGeoJson(gj_version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) RETURNS text AS $$ SELECT _ST_AsGeoJson($1, $2, $3, $4); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Measurement Functions -- Availability: 1.5.0 -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Stop calculation and return immediately once distance is less than tolerance -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Distance(geography, geography, float8, boolean) RETURNS float8 AS 'MODULE_PATHNAME','geography_distance' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Stop calculation and return immediately once distance is less than tolerance -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_DWithin(geography, geography, float8, boolean) RETURNS boolean AS 'MODULE_PATHNAME','geography_dwithin' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Distance(geography, geography, boolean) RETURNS float8 AS 'SELECT _ST_Distance($1, $2, 0.0, $3)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Currently defaulting to spheroid calculations -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Distance(geography, geography) RETURNS float8 AS 'SELECT _ST_Distance($1, $2, 0.0, true)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_Distance(text, text) RETURNS float8 AS $$ SELECT ST_Distance($1::geometry, $2::geometry); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Only expands the bounding box, the actual geometry will remain unchanged, use with care. -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Expand(geography, float8) RETURNS geography AS 'MODULE_PATHNAME','geography_expand' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8, boolean) RETURNS boolean AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, $4)' LANGUAGE 'sql' IMMUTABLE; -- Currently defaulting to spheroid calculations -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8) RETURNS boolean AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, true)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_DWithin(text, text, float8) RETURNS boolean AS $$ SELECT ST_DWithin($1::geometry, $2::geometry, $3); $$ LANGUAGE 'sql' IMMUTABLE; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Distance/DWithin testing functions for cached operations. -- For developer/tester use only. -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Calculate the distance in geographics *without* using the caching code line or tree code CREATE OR REPLACE FUNCTION _ST_DistanceUnCached(geography, geography, float8, boolean) RETURNS float8 AS 'MODULE_PATHNAME','geography_distance_uncached' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Calculate the distance in geographics *without* using the caching code line or tree code CREATE OR REPLACE FUNCTION _ST_DistanceUnCached(geography, geography, boolean) RETURNS float8 AS 'SELECT _ST_DistanceUnCached($1, $2, 0.0, $3)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Calculate the distance in geographics *without* using the caching code line or tree code CREATE OR REPLACE FUNCTION _ST_DistanceUnCached(geography, geography) RETURNS float8 AS 'SELECT _ST_DistanceUnCached($1, $2, 0.0, true)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Calculate the distance in geographics using the circular tree code, but -- *without* using the caching code line CREATE OR REPLACE FUNCTION _ST_DistanceTree(geography, geography, float8, boolean) RETURNS float8 AS 'MODULE_PATHNAME','geography_distance_tree' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Calculate the distance in geographics using the circular tree code, but -- *without* using the caching code line CREATE OR REPLACE FUNCTION _ST_DistanceTree(geography, geography) RETURNS float8 AS 'SELECT _ST_DistanceTree($1, $2, 0.0, true)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Calculate the dwithin relation *without* using the caching code line or tree code CREATE OR REPLACE FUNCTION _ST_DWithinUnCached(geography, geography, float8, boolean) RETURNS boolean AS 'MODULE_PATHNAME','geography_dwithin_uncached' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Calculate the dwithin relation *without* using the caching code line or tree code CREATE OR REPLACE FUNCTION _ST_DWithinUnCached(geography, geography, float8) RETURNS boolean AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithinUnCached($1, $2, $3, true)' LANGUAGE 'sql' IMMUTABLE; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Area(geog geography, use_spheroid boolean DEFAULT true) RETURNS float8 AS 'MODULE_PATHNAME','geography_area' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_Area(text) RETURNS float8 AS $$ SELECT ST_Area($1::geometry); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Length(geog geography, use_spheroid boolean DEFAULT true) RETURNS float8 AS 'MODULE_PATHNAME','geography_length' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_Length(text) RETURNS float8 AS $$ SELECT ST_Length($1::geometry); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_Project(geog geography, distance float8, azimuth float8) RETURNS geography AS 'MODULE_PATHNAME','geography_project' LANGUAGE 'c' IMMUTABLE COST 100; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_Azimuth(geog1 geography, geog2 geography) RETURNS float8 AS 'MODULE_PATHNAME','geography_azimuth' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_Perimeter(geog geography, use_spheroid boolean DEFAULT true) RETURNS float8 AS 'MODULE_PATHNAME','geography_perimeter' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_PointOutside(geography) RETURNS geography AS 'MODULE_PATHNAME','geography_point_outside' LANGUAGE 'c' IMMUTABLE STRICT; -- Only implemented for polygon-over-point -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Covers(geography, geography) RETURNS boolean AS 'MODULE_PATHNAME','geography_covers' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Only implemented for polygon-over-point -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Covers(geography, geography) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Covers($1, $2)' LANGUAGE 'sql' IMMUTABLE; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_Covers(text, text) RETURNS boolean AS $$ SELECT ST_Covers($1::geometry, $2::geometry); $$ LANGUAGE 'sql' IMMUTABLE ; -- Only implemented for polygon-over-point -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_CoveredBy(geography, geography) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Covers($2, $1)' LANGUAGE 'sql' IMMUTABLE ; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_CoveredBy(text, text) RETURNS boolean AS $$ SELECT ST_CoveredBy($1::geometry, $2::geometry); $$ LANGUAGE 'sql' IMMUTABLE ; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_Segmentize(geog geography, max_segment_length float8) RETURNS geography AS 'MODULE_PATHNAME','geography_segmentize' LANGUAGE 'c' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Intersects(geography, geography) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Distance($1, $2, 0.0, false) < 0.00001' LANGUAGE 'sql' IMMUTABLE ; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_Intersects(text, text) RETURNS boolean AS $$ SELECT ST_Intersects($1::geometry, $2::geometry); $$ LANGUAGE 'sql' IMMUTABLE ; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_BestSRID(geography, geography) RETURNS integer AS 'MODULE_PATHNAME','geography_bestsrid' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_BestSRID(geography) RETURNS integer AS 'SELECT _ST_BestSRID($1,$1)' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8) RETURNS geography AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2), 4326))' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_Buffer(text, float8) RETURNS geometry AS $$ SELECT ST_Buffer($1::geometry, $2); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Intersection(geography, geography) RETURNS geography AS 'SELECT geography(ST_Transform(ST_Intersection(ST_Transform(geometry($1), _ST_BestSRID($1, $2)), ST_Transform(geometry($2), _ST_BestSRID($1, $2))), 4326))' LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_Intersection(text, text) RETURNS geometry AS $$ SELECT ST_Intersection($1::geometry, $2::geometry); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_AsBinary(geography) RETURNS bytea AS 'MODULE_PATHNAME','LWGEOM_asBinary' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_AsBinary(geography,text) RETURNS bytea AS $$ SELECT ST_AsBinary($1::geometry, $2); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_AsEWKT(geography) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asEWKT' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography CREATE OR REPLACE FUNCTION ST_AsEWKT(text) RETURNS text AS $$ SELECT ST_AsEWKT($1::geometry); $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION GeometryType(geography) RETURNS text AS 'MODULE_PATHNAME', 'LWGEOM_getTYPE' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.0.0 CREATE OR REPLACE FUNCTION ST_Summary(geography) RETURNS text AS 'MODULE_PATHNAME', 'LWGEOM_summary' LANGUAGE 'c' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION ST_GeoHash(geog geography, maxchars int4 DEFAULT 0) RETURNS TEXT AS 'MODULE_PATHNAME', 'ST_GeoHash' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------------- �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/postgis_drop_before.sql���������������������������������������������0000644�0000000�0000000�00000006242�12137402700�022027� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id$ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.net -- -- Copyright (C) 2011-2012 Sandro Santilli <strk@keybit.net> -- Copyright (C) 2010-2013 Regina Obe <lr@pcorp.us> -- Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- This file contains drop commands for obsoleted items that need -- to be dropped _before_ upgrade of old functions. -- Changes to this file affect postgis_upgrade*.sql script. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DROP FUNCTION IF EXISTS AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer,boolean); DROP FUNCTION IF EXISTS ST_MakeEnvelope(float8, float8, float8, float8); --changed name of prec arg to be consistent with ST_AsGML/KML DROP FUNCTION IF EXISTS ST_AsX3D(geometry, integer, integer); --changed name of arg: http://trac.osgeo.org/postgis/ticket/1606 DROP FUNCTION IF EXISTS UpdateGeometrySRID(varchar,varchar,varchar,varchar,integer); --deprecated and removed in 2.1 -- Hack to fix 2.0 naming -- We can't just drop it since its bound to opclass -- See ticket 2279 for why we need to do this -- We can get rid of this DO code when 3.0 comes along DO language 'plpgsql' $$ BEGIN -- fix geometry ops -- IF EXISTS(SELECT oprname from pg_operator where oprname = '&&' AND oprrest::text = 'geometry_gist_sel_2d') THEN --it is bound to old name, drop new, rename old to new, install will fix body of code DROP FUNCTION IF EXISTS gserialized_gist_sel_2d(internal, oid, internal, int4) ; ALTER FUNCTION geometry_gist_sel_2d(internal, oid, internal, int4) RENAME TO gserialized_gist_sel_2d; END IF; IF EXISTS(SELECT oprname from pg_operator where oprname = '&&' AND oprjoin::text = 'geometry_gist_joinsel_2d') THEN --it is bound to old name, drop new, rename old to new, install will fix body of code DROP FUNCTION IF EXISTS gserialized_gist_joinsel_2d(internal, oid, internal, smallint) ; ALTER FUNCTION geometry_gist_joinsel_2d(internal, oid, internal, smallint) RENAME TO gserialized_gist_joinsel_2d; END IF; -- fix geography ops -- IF EXISTS(SELECT oprname from pg_operator where oprname = '&&' AND oprrest::text = 'geography_gist_selectivity') THEN --it is bound to old name, drop new, rename old to new, install will fix body of code DROP FUNCTION IF EXISTS gserialized_gist_sel_nd(internal, oid, internal, int4) ; ALTER FUNCTION geography_gist_selectivity(internal, oid, internal, int4) RENAME TO gserialized_gist_sel_nd; END IF; IF EXISTS(SELECT oprname from pg_operator where oprname = '&&' AND oprjoin::text = 'geography_gist_join_selectivity') THEN --it is bound to old name, drop new, rename old to new, install will fix body of code DROP FUNCTION IF EXISTS gserialized_gist_joinsel_nd(internal, oid, internal, smallint) ; ALTER FUNCTION geography_gist_join_selectivity(internal, oid, internal, smallint) RENAME TO gserialized_gist_joinsel_nd; END IF; END; $$ ; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/geography_measurement_trees.c���������������������������������������0000644�0000000�0000000�00000017223�12314235664�023223� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "geography_measurement_trees.h" /* * Specific tree types include all the generic slots and * their own slots for their trees. We put the implementation * for the CircTreeGeomCache here because we can't shove * the PgSQL specific bits of the code (fcinfo) back into * liblwgeom, where most of the circtree logic lives. */ typedef struct { int type; // <GeomCache> GSERIALIZED* geom1; // GSERIALIZED* geom2; // size_t geom1_size; // size_t geom2_size; // int32 argnum; // </GeomCache> CIRC_NODE* index; } CircTreeGeomCache; /** * Builder, freeer and public accessor for cached CIRC_NODE trees */ static int CircTreeBuilder(const LWGEOM* lwgeom, GeomCache* cache) { CircTreeGeomCache* circ_cache = (CircTreeGeomCache*)cache; CIRC_NODE* tree = lwgeom_calculate_circ_tree(lwgeom); if ( circ_cache->index ) { circ_tree_free(circ_cache->index); circ_cache->index = 0; } if ( ! tree ) return LW_FAILURE; circ_cache->index = tree; return LW_SUCCESS; } static int CircTreeFreer(GeomCache* cache) { CircTreeGeomCache* circ_cache = (CircTreeGeomCache*)cache; if ( circ_cache->index ) { circ_tree_free(circ_cache->index); circ_cache->index = 0; circ_cache->argnum = 0; } return LW_SUCCESS; } static GeomCache* CircTreeAllocator(void) { CircTreeGeomCache* cache = palloc(sizeof(CircTreeGeomCache)); memset(cache, 0, sizeof(CircTreeGeomCache)); return (GeomCache*)cache; } static GeomCacheMethods CircTreeCacheMethods = { CIRC_CACHE_ENTRY, CircTreeBuilder, CircTreeFreer, CircTreeAllocator }; static CircTreeGeomCache* GetCircTreeGeomCache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2) { return (CircTreeGeomCache*)GetGeomCache(fcinfo, &CircTreeCacheMethods, g1, g2); } static int CircTreePIP(const CIRC_NODE* tree1, const GSERIALIZED* g1, const POINT4D* in_point) { int tree1_type = gserialized_get_type(g1); GBOX gbox1; GEOGRAPHIC_POINT in_gpoint; POINT3D in_point3d; POSTGIS_DEBUGF(3, "tree1_type=%d", tree1_type); /* If the tree'ed argument is a polygon, do the P-i-P using the tree-based P-i-P */ if ( tree1_type == POLYGONTYPE || tree1_type == MULTIPOLYGONTYPE ) { POSTGIS_DEBUG(3, "tree is a polygon, using tree PiP"); /* Need a gbox to calculate an outside point */ if ( LW_FAILURE == gserialized_get_gbox_p(g1, &gbox1) ) { LWGEOM* lwgeom1 = lwgeom_from_gserialized(g1); POSTGIS_DEBUG(3, "unable to read gbox from gserialized, calculating from scratch"); lwgeom_calculate_gbox_geodetic(lwgeom1, &gbox1); lwgeom_free(lwgeom1); } /* Flip the candidate point into geographics */ geographic_point_init(in_point->x, in_point->y, &in_gpoint); geog2cart(&in_gpoint, &in_point3d); /* If the candidate isn't in the tree box, it's not in the tree area */ if ( ! gbox_contains_point3d(&gbox1, &in_point3d) ) { POSTGIS_DEBUG(3, "in_point3d is not inside the tree gbox, CircTreePIP returning FALSE"); return LW_FALSE; } /* The candidate point is in the box, so it *might* be inside the tree */ else { POINT2D pt2d_outside; /* latlon */ POINT2D pt2d_inside; pt2d_inside.x = in_point->x; pt2d_inside.y = in_point->y; /* Calculate a definitive outside point */ gbox_pt_outside(&gbox1, &pt2d_outside); POSTGIS_DEBUGF(3, "p2d_inside=POINT(%g %g) p2d_outside=POINT(%g %g)", pt2d_inside.x, pt2d_inside.y, pt2d_outside.x, pt2d_outside.y); /* Test the candidate point for strict containment */ POSTGIS_DEBUG(3, "calling circ_tree_contains_point for PiP test"); return circ_tree_contains_point(tree1, &pt2d_inside, &pt2d_outside, NULL); } } else { POSTGIS_DEBUG(3, "tree1 not polygonal, so CircTreePIP returning FALSE"); return LW_FALSE; } } static int geography_distance_cache_tolerance(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2, const SPHEROID* s, double tolerance, double* distance) { CircTreeGeomCache* tree_cache = NULL; int type1 = gserialized_get_type(g1); int type2 = gserialized_get_type(g2); Assert(distance); /* Two points? Get outa here... */ if ( type1 == POINTTYPE && type2 == POINTTYPE ) return LW_FAILURE; /* Fetch/build our cache, if appropriate, etc... */ tree_cache = GetCircTreeGeomCache(fcinfo, g1, g2); /* OK, we have an index at the ready! Use it for the one tree argument and */ /* fill in the other tree argument */ if ( tree_cache && tree_cache->argnum && tree_cache->index ) { CIRC_NODE* circtree_cached = tree_cache->index; CIRC_NODE* circtree = NULL; const GSERIALIZED* g_cached; const GSERIALIZED* g; LWGEOM* lwgeom = NULL; int geomtype_cached; int geomtype; POINT4D p4d; /* We need to dynamically build a tree for the uncached side of the function call */ if ( tree_cache->argnum == 1 ) { g_cached = g1; g = g2; geomtype_cached = type1; geomtype = type2; } else if ( tree_cache->argnum == 2 ) { g_cached = g2; g = g1; geomtype_cached = type2; geomtype = type1; } else { lwerror("geography_distance_cache this cannot happen!"); return LW_FAILURE; } lwgeom = lwgeom_from_gserialized(g); if ( geomtype_cached == POLYGONTYPE || geomtype_cached == MULTIPOLYGONTYPE ) { lwgeom_startpoint(lwgeom, &p4d); if ( CircTreePIP(circtree_cached, g_cached, &p4d) ) { *distance = 0.0; lwgeom_free(lwgeom); return LW_SUCCESS; } } circtree = lwgeom_calculate_circ_tree(lwgeom); if ( geomtype == POLYGONTYPE || geomtype == MULTIPOLYGONTYPE ) { POINT2D p2d; circ_tree_get_point(circtree_cached, &p2d); p4d.x = p2d.x; p4d.y = p2d.y; if ( CircTreePIP(circtree, g, &p4d) ) { *distance = 0.0; circ_tree_free(circtree); lwgeom_free(lwgeom); return LW_SUCCESS; } } *distance = circ_tree_distance_tree(circtree_cached, circtree, s, tolerance); circ_tree_free(circtree); lwgeom_free(lwgeom); return LW_SUCCESS; } else { return LW_FAILURE; } } int geography_distance_cache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2, const SPHEROID* s, double* distance) { return geography_distance_cache_tolerance(fcinfo, g1, g2, s, FP_TOLERANCE, distance); } int geography_dwithin_cache(FunctionCallInfoData* fcinfo, const GSERIALIZED* g1, const GSERIALIZED* g2, const SPHEROID* s, double tolerance, int* dwithin) { double distance; /* TODO!!! Why does the tolerance stopper in the circ_tree_distance_tree_internal arbitrarily screw up? */ /* if ( LW_SUCCESS == geography_distance_cache_tolerance(fcinfo, g1, g2, s, tolerance, &distance) ) */ if ( LW_SUCCESS == geography_distance_cache_tolerance(fcinfo, g1, g2, s, FP_TOLERANCE, &distance) ) { *dwithin = (distance <= (tolerance + FP_TOLERANCE) ? LW_TRUE : LW_FALSE); return LW_SUCCESS; } return LW_FAILURE; } int geography_tree_distance(const GSERIALIZED* g1, const GSERIALIZED* g2, const SPHEROID* s, double tolerance, double* distance) { CIRC_NODE* circ_tree1 = NULL; CIRC_NODE* circ_tree2 = NULL; LWGEOM* lwgeom1 = NULL; LWGEOM* lwgeom2 = NULL; POINT4D pt1, pt2; lwgeom1 = lwgeom_from_gserialized(g1); lwgeom2 = lwgeom_from_gserialized(g2); circ_tree1 = lwgeom_calculate_circ_tree(lwgeom1); circ_tree2 = lwgeom_calculate_circ_tree(lwgeom2); lwgeom_startpoint(lwgeom1, &pt1); lwgeom_startpoint(lwgeom2, &pt2); if ( CircTreePIP(circ_tree1, g1, &pt2) || CircTreePIP(circ_tree2, g2, &pt1) ) { *distance = 0.0; } else { /* Calculate tree/tree distance */ *distance = circ_tree_distance_tree(circ_tree1, circ_tree2, s, tolerance); } circ_tree_free(circ_tree1); circ_tree_free(circ_tree2); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); return LW_SUCCESS; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/gserialized_estimate.c����������������������������������������������0000644�0000000�0000000�00000176077�12303154335�021632� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright 2012 (C) Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /********************************************************************** THEORY OF OPERATION The ANALYZE command hooks to a callback (gserialized_analyze_nd) that calculates (compute_gserialized_stats_mode) two histograms of occurances of features, once for the 2D domain (and the && operator) one for the ND domain (and the &&& operator). Queries in PostgreSQL call into the selectivity sub-system to find out the relative effectiveness of different clauses in sub-setting relations. Queries with constant arguments call gserialized_gist_sel, queries with relations on both sides call gserialized_gist_joinsel. gserialized_gist_sel sums up the values in the histogram that overlap the contant search box. gserialized_gist_joinsel sums up the product of the overlapping cells in each relation's histogram. Depending on the operator and type, the mode of selectivity calculation will be 2D or ND. - geometry && geometry ==> 2D - geometry &&& geometry ==> ND - geography && geography ==> ND The 2D mode is put in effect by retrieving the 2D histogram from the statistics cache and then allowing the generic ND calculations to go to work. TO DO: More testing and examination of the &&& operator and mixed dimensionality cases. (2D geometry) &&& (3D column), etc. **********************************************************************/ #include "postgres.h" #include "executor/spi.h" #include "fmgr.h" #include "commands/vacuum.h" #include "nodes/relation.h" #include "parser/parsetree.h" #include "utils/array.h" #include "utils/lsyscache.h" #include "utils/builtins.h" #include "utils/syscache.h" #include "utils/rel.h" #include "../postgis_config.h" #if POSTGIS_PGSQL_VERSION >= 93 #include "access/htup_details.h" #endif #include "stringbuffer.h" #include "liblwgeom.h" #include "lwgeom_pg.h" /* For debugging macros. */ #include "gserialized_gist.h" /* For index common functions */ #include <math.h> #if HAVE_IEEEFP_H #include <ieeefp.h> #endif #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <ctype.h> /* Prototypes */ Datum gserialized_gist_joinsel(PG_FUNCTION_ARGS); Datum gserialized_gist_joinsel_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_joinsel_nd(PG_FUNCTION_ARGS); Datum gserialized_gist_sel(PG_FUNCTION_ARGS); Datum gserialized_gist_sel_2d(PG_FUNCTION_ARGS); Datum gserialized_gist_sel_nd(PG_FUNCTION_ARGS); Datum gserialized_analyze_nd(PG_FUNCTION_ARGS); Datum gserialized_estimated_extent(PG_FUNCTION_ARGS); Datum _postgis_gserialized_sel(PG_FUNCTION_ARGS); Datum _postgis_gserialized_joinsel(PG_FUNCTION_ARGS); Datum _postgis_gserialized_stats(PG_FUNCTION_ARGS); /* Old Prototype */ Datum geometry_estimated_extent(PG_FUNCTION_ARGS); /** * Assign a number to the n-dimensional statistics kind * * tgl suggested: * * 1-100: reserved for assignment by the core Postgres project * 100-199: reserved for assignment by PostGIS * 200-9999: reserved for other globally-known stats kinds * 10000-32767: reserved for private site-local use */ #define STATISTIC_KIND_ND 102 #define STATISTIC_KIND_2D 103 #define STATISTIC_SLOT_ND 0 #define STATISTIC_SLOT_2D 1 /* * The SD factor restricts the side of the statistics histogram * based on the standard deviation of the extent of the data. * SDFACTOR is the number of standard deviations from the mean * the histogram will extend. */ #define SDFACTOR 3.25 /** * The maximum number of dimensions our code can handle. * We'll use this to statically allocate a bunch of * arrays below. */ #define ND_DIMS 4 /** * Minimum width of a dimension that we'll bother trying to * compute statistics on. Bearing in mind we have no control * over units, but noting that for geographics, 10E-5 is in the * range of meters, we go lower than that. */ #define MIN_DIMENSION_WIDTH 0.000000001 /** * Default geometry selectivity factor */ #define DEFAULT_ND_SEL 0.0001 #define DEFAULT_ND_JOINSEL 0.001 /** * More modest fallback selectivity factor */ #define FALLBACK_ND_SEL 0.2 #define FALLBACK_ND_JOINSEL 0.3 /** * N-dimensional box type for calculations, to avoid doing * explicit axis conversions from GBOX in all calculations * at every step. */ typedef struct ND_BOX_T { float4 min[ND_DIMS]; float4 max[ND_DIMS]; } ND_BOX; /** * N-dimensional box index type */ typedef struct ND_IBOX_T { int min[ND_DIMS]; int max[ND_DIMS]; } ND_IBOX; /** * N-dimensional statistics structure. Well, actually * four-dimensional, but set up to handle arbirary dimensions * if necessary (really, we just want to get the 2,3,4-d cases * into one shared piece of code). */ typedef struct ND_STATS_T { /* Dimensionality of the histogram. */ float4 ndims; /* Size of n-d histogram in each dimension. */ float4 size[ND_DIMS]; /* Lower-left (min) and upper-right (max) spatial bounds of histogram. */ ND_BOX extent; /* How many rows in the table itself? */ float4 table_features; /* How many rows were in the sample that built this histogram? */ float4 sample_features; /* How many not-Null/Empty features were in the sample? */ float4 not_null_features; /* How many features actually got sampled in the histogram? */ float4 histogram_features; /* How many cells in histogram? (sizex*sizey*sizez*sizem) */ float4 histogram_cells; /* How many cells did those histogram features cover? */ /* Since we are pro-rating coverage, this number should */ /* now always equal histogram_features */ float4 cells_covered; /* Variable length # of floats for histogram */ float4 value[1]; } ND_STATS; /** * Given that geodetic boxes are X/Y/Z regardless of the * underlying geometry dimensionality and other boxes * are guided by HAS_Z/HAS_M in their dimesionality, * we have a little utility function to make it easy. */ static int gbox_ndims(const GBOX* gbox) { int dims = 2; if ( FLAGS_GET_GEODETIC(gbox->flags) ) return 3; if ( FLAGS_GET_Z(gbox->flags) ) dims++; if ( FLAGS_GET_M(gbox->flags) ) dims++; return dims; } /** * Utility function to see if the first * letter of the mode argument is 'N'. Used * by the _postgis_* functions. */ static int text_p_get_mode(const text *txt) { int mode = 2; char *modestr = text2cstring(txt); if ( modestr[0] == 'N' ) mode = 0; pfree(modestr); return mode; } /** * Integer comparison function for qsort */ static int cmp_int (const void *a, const void *b) { int ia = *((const int*)a); int ib = *((const int*)b); if ( ia == ib ) return 0; else if ( ia > ib ) return 1; else return -1; } /** * The difference between the fourth and first quintile values, * the "inter-quintile range" */ static int range_quintile(int *vals, int nvals) { qsort(vals, nvals, sizeof(int), cmp_int); return vals[4*nvals/5] - vals[nvals/5]; } /** * Given double array, return sum of values. */ static double total_double(const double *vals, int nvals) { int i; float total = 0; /* Calculate total */ for ( i = 0; i < nvals; i++ ) total += vals[i]; return total; } #if POSTGIS_DEBUG_LEVEL >= 3 /** * Given int array, return sum of values. */ static int total_int(const int *vals, int nvals) { int i; int total = 0; /* Calculate total */ for ( i = 0; i < nvals; i++ ) total += vals[i]; return total; } /** * The average of an array of integers. */ static double avg(const int *vals, int nvals) { int t = total_int(vals, nvals); return (double)t / (double)nvals; } /** * The standard deviation of an array of integers. */ static double stddev(const int *vals, int nvals) { int i; double sigma2 = 0; double mean = avg(vals, nvals); /* Calculate sigma2 */ for ( i = 0; i < nvals; i++ ) { double v = (double)(vals[i]); sigma2 += (mean - v) * (mean - v); } return sqrt(sigma2 / nvals); } #endif /* POSTGIS_DEBUG_LEVEL >= 3 */ /** * Given a position in the n-d histogram (i,j,k) return the * position in the 1-d values array. */ static int nd_stats_value_index(const ND_STATS *stats, int *indexes) { int d; int accum = 1, vdx = 0; /* Calculate the index into the 1-d values array that the (i,j,k,l) */ /* n-d histogram coordinate implies. */ /* index = x + y * sizex + z * sizex * sizey + m * sizex * sizey * sizez */ for ( d = 0; d < (int)(stats->ndims); d++ ) { int size = (int)(stats->size[d]); if ( indexes[d] < 0 || indexes[d] >= size ) { POSTGIS_DEBUGF(3, " bad index at (%d, %d)", indexes[0], indexes[1]); return -1; } vdx += indexes[d] * accum; accum *= size; } return vdx; } /** * Convert an #ND_BOX to a JSON string for printing */ static char* nd_box_to_json(const ND_BOX *nd_box, int ndims) { char *rv; int i; stringbuffer_t *sb = stringbuffer_create(); stringbuffer_append(sb, "{\"min\":["); for ( i = 0; i < ndims; i++ ) { if ( i ) stringbuffer_append(sb, ","); stringbuffer_aprintf(sb, "%.6g", nd_box->min[i]); } stringbuffer_append(sb, "],\"max\":["); for ( i = 0; i < ndims; i++ ) { if ( i ) stringbuffer_append(sb, ","); stringbuffer_aprintf(sb, "%.6g", nd_box->max[i]); } stringbuffer_append(sb, "]}"); rv = stringbuffer_getstringcopy(sb); stringbuffer_destroy(sb); return rv; } /** * Convert an #ND_STATS to a JSON representation for * external use. */ static char* nd_stats_to_json(const ND_STATS *nd_stats) { char *json_extent, *str; int d; stringbuffer_t *sb = stringbuffer_create(); int ndims = (int)roundf(nd_stats->ndims); stringbuffer_append(sb, "{"); stringbuffer_aprintf(sb, "\"ndims\":%d,", ndims); /* Size */ stringbuffer_append(sb, "\"size\":["); for ( d = 0; d < ndims; d++ ) { if ( d ) stringbuffer_append(sb, ","); stringbuffer_aprintf(sb, "%d", (int)roundf(nd_stats->size[d])); } stringbuffer_append(sb, "],"); /* Extent */ json_extent = nd_box_to_json(&(nd_stats->extent), ndims); stringbuffer_aprintf(sb, "\"extent\":%s,", json_extent); pfree(json_extent); stringbuffer_aprintf(sb, "\"table_features\":%d,", (int)roundf(nd_stats->table_features)); stringbuffer_aprintf(sb, "\"sample_features\":%d,", (int)roundf(nd_stats->sample_features)); stringbuffer_aprintf(sb, "\"not_null_features\":%d,", (int)roundf(nd_stats->not_null_features)); stringbuffer_aprintf(sb, "\"histogram_features\":%d,", (int)roundf(nd_stats->histogram_features)); stringbuffer_aprintf(sb, "\"histogram_cells\":%d,", (int)roundf(nd_stats->histogram_cells)); stringbuffer_aprintf(sb, "\"cells_covered\":%d", (int)roundf(nd_stats->cells_covered)); stringbuffer_append(sb, "}"); str = stringbuffer_getstringcopy(sb); stringbuffer_destroy(sb); return str; } /** * Create a printable view of the #ND_STATS histogram. * Caller is responsible for freeing. * Currently only prints first two dimensions. */ // static char* // nd_stats_to_grid(const ND_STATS *stats) // { // char *rv; // int j, k; // int sizex = (int)roundf(stats->size[0]); // int sizey = (int)roundf(stats->size[1]); // stringbuffer_t *sb = stringbuffer_create(); // // for ( k = 0; k < sizey; k++ ) // { // for ( j = 0; j < sizex; j++ ) // { // stringbuffer_aprintf(sb, "%3d ", (int)roundf(stats->value[j + k*sizex])); // } // stringbuffer_append(sb, "\n"); // } // // rv = stringbuffer_getstringcopy(sb); // stringbuffer_destroy(sb); // return rv; // } /** Expand the bounds of target to include source */ static int nd_box_merge(const ND_BOX *source, ND_BOX *target) { int d; for ( d = 0; d < ND_DIMS; d++ ) { target->min[d] = Min(target->min[d], source->min[d]); target->max[d] = Max(target->max[d], source->max[d]); } return TRUE; } /** Zero out an ND_BOX */ static int nd_box_init(ND_BOX *a) { memset(a, 0, sizeof(ND_BOX)); return TRUE; } /** * Prepare an ND_BOX for bounds calculation: * set the maxes to the smallest thing possible and * the mins to the largest. */ static int nd_box_init_bounds(ND_BOX *a) { int d; for ( d = 0; d < ND_DIMS; d++ ) { a->min[d] = FLT_MAX; a->max[d] = -1 * FLT_MAX; } return TRUE; } /** Set the values of an #ND_BOX from a #GBOX */ static void nd_box_from_gbox(const GBOX *gbox, ND_BOX *nd_box) { int d = 0; POSTGIS_DEBUGF(3, " %s", gbox_to_string(gbox)); nd_box_init(nd_box); nd_box->min[d] = gbox->xmin; nd_box->max[d] = gbox->xmax; d++; nd_box->min[d] = gbox->ymin; nd_box->max[d] = gbox->ymax; d++; if ( FLAGS_GET_GEODETIC(gbox->flags) ) { nd_box->min[d] = gbox->zmin; nd_box->max[d] = gbox->zmax; return; } if ( FLAGS_GET_Z(gbox->flags) ) { nd_box->min[d] = gbox->zmin; nd_box->max[d] = gbox->zmax; d++; } if ( FLAGS_GET_M(gbox->flags) ) { nd_box->min[d] = gbox->mmin; nd_box->max[d] = gbox->mmax; d++; } return; } /** * Return TRUE if #ND_BOX a overlaps b, false otherwise. */ static int nd_box_intersects(const ND_BOX *a, const ND_BOX *b, int ndims) { int d; for ( d = 0; d < ndims; d++ ) { if ( (a->min[d] > b->max[d]) || (a->max[d] < b->min[d]) ) return FALSE; } return TRUE; } /** * Return TRUE if #ND_BOX a contains b, false otherwise. */ static int nd_box_contains(const ND_BOX *a, const ND_BOX *b, int ndims) { int d; for ( d = 0; d < ndims; d++ ) { if ( ! ((a->min[d] < b->min[d]) && (a->max[d] > b->max[d])) ) return FALSE; } return TRUE; } /** * Expand an #ND_BOX ever so slightly. Expand parameter is the proportion * of total width to add. */ static int nd_box_expand(ND_BOX *nd_box, double expansion_factor) { int d; double size; for ( d = 0; d < ND_DIMS; d++ ) { size = nd_box->max[d] - nd_box->min[d]; if ( size <= 0 ) continue; nd_box->min[d] -= size * expansion_factor / 2; nd_box->max[d] += size * expansion_factor / 2; } return TRUE; } /** * What stats cells overlap with this ND_BOX? Put the lowest cell * addresses in ND_IBOX->min and the highest in ND_IBOX->max */ static inline int nd_box_overlap(const ND_STATS *nd_stats, const ND_BOX *nd_box, ND_IBOX *nd_ibox) { int d; POSTGIS_DEBUGF(4, " nd_box: %s", nd_box_to_json(nd_box, nd_stats->ndims)); /* Initialize ibox */ memset(nd_ibox, 0, sizeof(ND_IBOX)); /* In each dimension... */ for ( d = 0; d < nd_stats->ndims; d++ ) { double smin = nd_stats->extent.min[d]; double smax = nd_stats->extent.max[d]; double width = smax - smin; int size = roundf(nd_stats->size[d]); /* ... find cells the box overlaps with in this dimension */ nd_ibox->min[d] = floor(size * (nd_box->min[d] - smin) / width); nd_ibox->max[d] = floor(size * (nd_box->max[d] - smin) / width); POSTGIS_DEBUGF(5, " stats: dim %d: min %g: max %g: width %g", d, smin, smax, width); POSTGIS_DEBUGF(5, " overlap: dim %d: (%d, %d)", d, nd_ibox->min[d], nd_ibox->max[d]); /* Push any out-of range values into range */ nd_ibox->min[d] = Max(nd_ibox->min[d], 0); nd_ibox->max[d] = Min(nd_ibox->max[d], size-1); } return TRUE; } /** * Returns the proportion of b2 that is covered by b1. */ static inline double nd_box_ratio(const ND_BOX *b1, const ND_BOX *b2, int ndims) { int d; bool covered = TRUE; double ivol = 1.0; double vol2 = 1.0; double vol1 = 1.0; for ( d = 0 ; d < ndims; d++ ) { if ( b1->max[d] <= b2->min[d] || b1->min[d] >= b2->max[d] ) return 0.0; /* Disjoint */ if ( b1->min[d] > b2->min[d] || b1->max[d] < b2->max[d] ) covered = FALSE; } if ( covered ) return 1.0; for ( d = 0; d < ndims; d++ ) { double width1 = b1->max[d] - b1->min[d]; double width2 = b2->max[d] - b2->min[d]; double imin, imax, iwidth; vol1 *= width1; vol2 *= width2; imin = Max(b1->min[d], b2->min[d]); imax = Min(b1->max[d], b2->max[d]); iwidth = imax - imin; iwidth = Max(0.0, iwidth); ivol *= iwidth; } if ( vol2 == 0.0 ) return vol2; return ivol / vol2; } /** * Calculate how much a set of boxes is homogenously distributed * or contentrated within one dimension, returning the range_quintile of * of the overlap counts per cell in a uniform * partition of the extent of the dimension. * A uniform distribution of counts will have a small range * and will require few cells in a selectivity histogram. * A diverse distribution of counts will have a larger range * and require more cells in a selectivity histogram (to * distinguish between areas of feature density and areas * of feature sparseness. This measurement should help us * identify cases like X/Y/Z data where there is lots of variability * in density in X/Y (diversely in a multi-kilometer range) and far * less in Z (in a few-hundred meter range). */ static int nd_box_array_distribution(const ND_BOX **nd_boxes, int num_boxes, const ND_BOX *extent, int ndims, double *distribution) { /* How many bins shall we use in figuring out the distribution? */ static int num_bins = 50; int d, i, k, range; int counts[num_bins]; double smin, smax; /* Spatial min, spatial max */ double swidth; /* Spatial width of dimension */ #if POSTGIS_DEBUG_LEVEL >= 3 double average, sdev, sdev_ratio; #endif int bmin, bmax; /* Bin min, bin max */ const ND_BOX *ndb; /* For each dimension... */ for ( d = 0; d < ndims; d++ ) { /* Initialize counts for this dimension */ memset(counts, 0, sizeof(int)*num_bins); smin = extent->min[d]; smax = extent->max[d]; swidth = smax - smin; /* Don't try and calculate distribution of overly narrow dimensions */ if ( swidth < MIN_DIMENSION_WIDTH ) { distribution[d] = 0; continue; } /* Sum up the overlaps of each feature with the dimensional bins */ for ( i = 0; i < num_boxes; i++ ) { double minoffset, maxoffset; /* Skip null entries */ ndb = nd_boxes[i]; if ( ! ndb ) continue; /* Where does box fall relative to the working range */ minoffset = ndb->min[d] - smin; maxoffset = ndb->max[d] - smin; /* Skip boxes that our outside our working range */ if ( minoffset < 0 || minoffset > swidth || maxoffset < 0 || maxoffset > swidth ) { continue; } /* What bins does this range correspond to? */ bmin = num_bins * (minoffset) / swidth; bmax = num_bins * (maxoffset) / swidth; POSTGIS_DEBUGF(4, " dimension %d, feature %d: bin %d to bin %d", d, i, bmin, bmax); /* Increment the counts in all the bins this feature overlaps */ for ( k = bmin; k <= bmax; k++ ) { counts[k] += 1; } } /* How dispersed is the distribution of features across bins? */ range = range_quintile(counts, num_bins); #if POSTGIS_DEBUG_LEVEL >= 3 average = avg(counts, num_bins); sdev = stddev(counts, num_bins); sdev_ratio = sdev/average; POSTGIS_DEBUGF(3, " dimension %d: range = %d", d, range); POSTGIS_DEBUGF(3, " dimension %d: average = %.6g", d, average); POSTGIS_DEBUGF(3, " dimension %d: stddev = %.6g", d, sdev); POSTGIS_DEBUGF(3, " dimension %d: stddev_ratio = %.6g", d, sdev_ratio); #endif distribution[d] = range; } return TRUE; } /** * Given an n-d index array (counter), and a domain to increment it * in (ibox) increment it by one, unless it's already at the max of * the domain, in which case return false. */ static inline int nd_increment(ND_IBOX *ibox, int ndims, int *counter) { int d = 0; while ( d < ndims ) { if ( counter[d] < ibox->max[d] ) { counter[d] += 1; break; } counter[d] = ibox->min[d]; d++; } /* That's it, cannot increment any more! */ if ( d == ndims ) return FALSE; /* Increment complete! */ return TRUE; } /** * Pull the stats object from the PgSQL system catalogs. Used * by the selectivity functions and the debugging functions. */ static ND_STATS* pg_get_nd_stats(const Oid table_oid, AttrNumber att_num, int mode) { HeapTuple stats_tuple; float4 *floatptr; ND_STATS *nd_stats; int rv, nvalues; int stats_kind = STATISTIC_KIND_ND; /* First pull the stats tuple */ stats_tuple = SearchSysCache2(STATRELATT, table_oid, att_num); if ( ! stats_tuple ) { POSTGIS_DEBUGF(2, "stats for \"%s\" do not exist", get_rel_name(table_oid)); return NULL; } /* If we're in 2D mode, set the kind appropriately */ if ( mode == 2 ) stats_kind = STATISTIC_KIND_2D; /* Then read the geom status histogram from that */ rv = get_attstatsslot(stats_tuple, 0, 0, stats_kind, InvalidOid, NULL, NULL, NULL, &floatptr, &nvalues); if ( ! rv ) { ReleaseSysCache(stats_tuple); POSTGIS_DEBUGF(2, "histogram for \"%s\" does not exist?", get_rel_name(table_oid)); return NULL; } /* Clone the stats here so we can release the attstatsslot immediately */ nd_stats = palloc(sizeof(float) * nvalues); memcpy(nd_stats, floatptr, sizeof(float) * nvalues); /* Clean up */ free_attstatsslot(0, NULL, 0, floatptr, nvalues); ReleaseSysCache(stats_tuple); return nd_stats; } /** * Pull the stats object from the PgSQL system catalogs. The * debugging functions are taking human input (table names) * and columns, so we have to look those up first. */ static ND_STATS* pg_get_nd_stats_by_name(const Oid table_oid, const text *att_text, int mode) { const char *att_name = text2cstring(att_text); AttrNumber att_num; /* We know the name? Look up the num */ if ( att_text ) { /* Get the attribute number */ att_num = get_attnum(table_oid, att_name); if ( ! att_num ) { elog(ERROR, "attribute \"%s\" does not exist", att_name); return NULL; } } else { elog(ERROR, "attribute name is null"); return NULL; } return pg_get_nd_stats(table_oid, att_num, mode); } /** * Given two statistics histograms, what is the selectivity * of a join driven by the && or &&& operator? * * Join selectivity is defined as the number of rows returned by the * join operator divided by the number of rows that an * unconstrained join would return (nrows1*nrows2). * * To get the estimate of join rows, we walk through the cells * of one histogram, and multiply the cell value by the * proportion of the cells in the other histogram the cell * overlaps: val += val1 * ( val2 * overlap_ratio ) */ static float8 estimate_join_selectivity(const ND_STATS *s1, const ND_STATS *s2) { int ncells1, ncells2; int ndims1, ndims2, ndims; double ntuples_max; double ntuples_not_null1, ntuples_not_null2; ND_BOX extent1, extent2; ND_IBOX ibox1, ibox2; int at1[ND_DIMS]; int at2[ND_DIMS]; double min1[ND_DIMS]; double width1[ND_DIMS]; double cellsize1[ND_DIMS]; int size2[ND_DIMS]; double min2[ND_DIMS]; double width2[ND_DIMS]; double cellsize2[ND_DIMS]; int size1[ND_DIMS]; int d; double val = 0; float8 selectivity; /* Drop out on null inputs */ if ( ! ( s1 && s2 ) ) { elog(NOTICE, " estimate_join_selectivity called with null inputs"); return FALLBACK_ND_SEL; } /* We need to know how many cells each side has... */ ncells1 = (int)roundf(s1->histogram_cells); ncells2 = (int)roundf(s2->histogram_cells); /* ...so that we can drive the summation loop with the smaller histogram. */ if ( ncells1 > ncells2 ) { const ND_STATS *stats_tmp = s1; s1 = s2; s2 = stats_tmp; } POSTGIS_DEBUGF(3, "s1: %s", nd_stats_to_json(s1)); POSTGIS_DEBUGF(3, "s2: %s", nd_stats_to_json(s2)); /* Re-read that info after the swap */ ncells1 = (int)roundf(s1->histogram_cells); ncells2 = (int)roundf(s2->histogram_cells); /* Q: What's the largest possible join size these relations can create? */ /* A: The product of the # of non-null rows in each relation. */ ntuples_not_null1 = s1->table_features * (s1->not_null_features / s1->sample_features); ntuples_not_null2 = s2->table_features * (s2->not_null_features / s2->sample_features); ntuples_max = ntuples_not_null1 * ntuples_not_null2; /* Get the ndims as ints */ ndims1 = (int)roundf(s1->ndims); ndims2 = (int)roundf(s2->ndims); ndims = Max(ndims1, ndims2); /* Get the extents */ extent1 = s1->extent; extent2 = s2->extent; /* If relation stats do not intersect, join is very very selective. */ if ( ! nd_box_intersects(&extent1, &extent2, ndims) ) { POSTGIS_DEBUG(3, "relation stats do not intersect, returning 0"); PG_RETURN_FLOAT8(0.0); } /* * First find the index range of the part of the smaller * histogram that overlaps the larger one. */ if ( ! nd_box_overlap(s1, &extent2, &ibox1) ) { POSTGIS_DEBUG(3, "could not calculate overlap of relations"); PG_RETURN_FLOAT8(FALLBACK_ND_JOINSEL); } /* Initialize counters / constants on s1 */ for ( d = 0; d < ndims1; d++ ) { at1[d] = ibox1.min[d]; min1[d] = s1->extent.min[d]; width1[d] = s1->extent.max[d] - s1->extent.min[d]; size1[d] = (int)roundf(s1->size[d]); cellsize1[d] = width1[d] / size1[d]; } /* Initialize counters / constants on s2 */ for ( d = 0; d < ndims2; d++ ) { min2[d] = s2->extent.min[d]; width2[d] = s2->extent.max[d] - s2->extent.min[d]; size2[d] = (int)roundf(s2->size[d]); cellsize2[d] = width2[d] / size2[d]; } /* For each affected cell of s1... */ do { double val1; /* Construct the bounds of this cell */ ND_BOX nd_cell1; nd_box_init(&nd_cell1); for ( d = 0; d < ndims1; d++ ) { nd_cell1.min[d] = min1[d] + (at1[d]+0) * cellsize1[d]; nd_cell1.max[d] = min1[d] + (at1[d]+1) * cellsize1[d]; } /* Find the cells of s2 that cell1 overlaps.. */ nd_box_overlap(s2, &nd_cell1, &ibox2); /* Initialize counter */ for ( d = 0; d < ndims2; d++ ) { at2[d] = ibox2.min[d]; } POSTGIS_DEBUGF(3, "at1 %d,%d %s", at1[0], at1[1], nd_box_to_json(&nd_cell1, ndims1)); /* Get the value at this cell */ val1 = s1->value[nd_stats_value_index(s1, at1)]; /* For each overlapped cell of s2... */ do { double ratio2; double val2; /* Construct the bounds of this cell */ ND_BOX nd_cell2; nd_box_init(&nd_cell2); for ( d = 0; d < ndims2; d++ ) { nd_cell2.min[d] = min2[d] + (at2[d]+0) * cellsize2[d]; nd_cell2.max[d] = min2[d] + (at2[d]+1) * cellsize2[d]; } POSTGIS_DEBUGF(3, " at2 %d,%d %s", at2[0], at2[1], nd_box_to_json(&nd_cell2, ndims2)); /* Calculate overlap ratio of the cells */ ratio2 = nd_box_ratio(&nd_cell1, &nd_cell2, Max(ndims1, ndims2)); /* Multiply the cell counts, scaled by overlap ratio */ val2 = s2->value[nd_stats_value_index(s2, at2)]; POSTGIS_DEBUGF(3, " val1 %.6g val2 %.6g ratio %.6g", val1, val2, ratio2); val += val1 * (val2 * ratio2); } while ( nd_increment(&ibox2, ndims2, at2) ); } while( nd_increment(&ibox1, ndims1, at1) ); POSTGIS_DEBUGF(3, "val of histogram = %g", val); /* * In order to compare our total cell count "val" to the * ntuples_max, we need to scale val up to reflect a full * table estimate. So, multiply by ratio of table size to * sample size. */ val *= (s1->table_features / s1->sample_features); val *= (s2->table_features / s2->sample_features); POSTGIS_DEBUGF(3, "val scaled to full table size = %g", val); /* * Because the cell counts are over-determined due to * double counting of features that overlap multiple cells * (see the compute_gserialized_stats routine) * we also have to scale our cell count "val" *down* * to adjust for the double counting. */ // val /= (s1->cells_covered / s1->histogram_features); // val /= (s2->cells_covered / s2->histogram_features); /* * Finally, the selectivity is the estimated number of * rows to be returned divided by the maximum possible * number of rows that can be returned. */ selectivity = val / ntuples_max; /* Guard against over-estimates :) */ if ( selectivity > 1.0 ) selectivity = 1.0; return selectivity; } /** * For (geometry &&& geometry) and (geography && geography) * we call into the N-D mode. */ PG_FUNCTION_INFO_V1(gserialized_gist_joinsel_nd); Datum gserialized_gist_joinsel_nd(PG_FUNCTION_ARGS) { PG_RETURN_DATUM(DirectFunctionCall5( gserialized_gist_joinsel, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PG_GETARG_DATUM(2), PG_GETARG_DATUM(3), Int32GetDatum(0) /* ND mode */ )); } /** * For (geometry && geometry) * we call into the 2-D mode. */ PG_FUNCTION_INFO_V1(gserialized_gist_joinsel_2d); Datum gserialized_gist_joinsel_2d(PG_FUNCTION_ARGS) { PG_RETURN_DATUM(DirectFunctionCall5( gserialized_gist_joinsel, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PG_GETARG_DATUM(2), PG_GETARG_DATUM(3), Int32GetDatum(2) /* 2D mode */ )); } /** * Join selectivity of the && operator. The selectivity * is the ratio of the number of rows we think will be * returned divided the maximum number of rows the join * could possibly return (the full combinatoric join). * * joinsel = estimated_nrows / (totalrows1 * totalrows2) */ PG_FUNCTION_INFO_V1(gserialized_gist_joinsel); Datum gserialized_gist_joinsel(PG_FUNCTION_ARGS) { PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); /* Oid operator = PG_GETARG_OID(1); */ List *args = (List *) PG_GETARG_POINTER(2); JoinType jointype = (JoinType) PG_GETARG_INT16(3); int mode = PG_GETARG_INT32(4); Node *arg1, *arg2; Var *var1, *var2; Oid relid1, relid2; ND_STATS *stats1, *stats2; float8 selectivity; /* Only respond to an inner join/unknown context join */ if (jointype != JOIN_INNER) { elog(NOTICE, "gserialized_gist_joinsel: jointype %d not supported", jointype); PG_RETURN_FLOAT8(DEFAULT_ND_JOINSEL); } /* Find Oids of the geometry columns we are working with */ arg1 = (Node*) linitial(args); arg2 = (Node*) lsecond(args); var1 = (Var*) arg1; var2 = (Var*) arg2; /* We only do column joins right now, no functional joins */ /* TODO: handle g1 && ST_Expand(g2) */ if (!IsA(arg1, Var) || !IsA(arg2, Var)) { elog(DEBUG1, "gserialized_gist_joinsel called with arguments that are not column references"); PG_RETURN_FLOAT8(DEFAULT_ND_JOINSEL); } /* What are the Oids of our tables/relations? */ relid1 = getrelid(var1->varno, root->parse->rtable); relid2 = getrelid(var2->varno, root->parse->rtable); POSTGIS_DEBUGF(3, "using relations \"%s\" Oid(%d), \"%s\" Oid(%d)", get_rel_name(relid1), relid1, get_rel_name(relid2), relid2); /* Pull the stats from the stats system. */ stats1 = pg_get_nd_stats(relid1, var1->varattno, mode); stats2 = pg_get_nd_stats(relid2, var2->varattno, mode); /* If we can't get stats, we have to stop here! */ if ( ! stats1 ) { POSTGIS_DEBUGF(3, "unable to retrieve stats for \"%s\" Oid(%d)", get_rel_name(relid1), relid1); PG_RETURN_FLOAT8(DEFAULT_ND_JOINSEL); } else if ( ! stats2 ) { POSTGIS_DEBUGF(3, "unable to retrieve stats for \"%s\" Oid(%d)", get_rel_name(relid2), relid2); PG_RETURN_FLOAT8(DEFAULT_ND_JOINSEL); } selectivity = estimate_join_selectivity(stats1, stats2); POSTGIS_DEBUGF(2, "got selectivity %g", selectivity); pfree(stats1); pfree(stats2); PG_RETURN_FLOAT8(selectivity); } /** * The gserialized_analyze_nd sets this function as a * callback on the stats object when called by the ANALYZE * command. ANALYZE then gathers the requisite number of * sample rows and then calls this function. * * We could also pass stats->extra_data in from * gserialized_analyze_nd (things like the column type or * other stuff from the system catalogs) but so far we * don't use that capability. * * Our job is to build some statistics on the sample data * for use by operator estimators. * * We will populate an n-d histogram using the provided * sample rows. The selectivity estimators (sel and j_oinsel) * can then use the histogram */ static void compute_gserialized_stats_mode(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, int sample_rows, double total_rows, int mode) { MemoryContext old_context; int d, i; /* Counters */ int notnull_cnt = 0; /* # not null rows in the sample */ int null_cnt = 0; /* # null rows in the sample */ int histogram_features = 0; /* # rows that actually got counted in the histogram */ ND_STATS *nd_stats; /* Our histogram */ size_t nd_stats_size; /* Size to allocate */ double total_width = 0; /* # of bytes used by sample */ double total_sample_volume = 0; /* Area/volume coverage of the sample */ double total_cell_count = 0; /* # of cells in histogram affected by sample */ ND_BOX sum; /* Sum of extents of sample boxes */ ND_BOX avg; /* Avg of extents of sample boxes */ ND_BOX stddev; /* StdDev of extents of sample boxes */ const ND_BOX **sample_boxes; /* ND_BOXes for each of the sample features */ ND_BOX sample_extent; /* Extent of the raw sample */ int histo_size[ND_DIMS]; /* histogram nrows, ncols, etc */ ND_BOX histo_extent; /* Spatial extent of the histogram */ ND_BOX histo_extent_new; /* Temporary variable */ int histo_cells_target; /* Number of cells we will shoot for, given the stats target */ int histo_cells; /* Number of cells in the histogram */ int histo_cells_new = 1; /* Temporary variable */ int ndims = 2; /* Dimensionality of the sample */ int histo_ndims = 0; /* Dimensionality of the histogram */ double sample_distribution[ND_DIMS]; /* How homogeneous is distribution of sample in each axis? */ double total_distribution; /* Total of sample_distribution */ int stats_slot; /* What slot is this data going into? (2D vs ND) */ int stats_kind; /* And this is what? (2D vs ND) */ /* Initialize sums */ memset(&sum, 0, sizeof(ND_BOX)); /* * This is where gserialized_analyze_nd * should put its' custom parameters. */ /* void *mystats = stats->extra_data; */ POSTGIS_DEBUG(2, "compute_gserialized_stats called"); POSTGIS_DEBUGF(3, " # sample_rows: %d", sample_rows); POSTGIS_DEBUGF(3, " estimate of total_rows: %.6g", total_rows); /* * We might need less space, but don't think * its worth saving... */ sample_boxes = palloc(sizeof(ND_BOX*) * sample_rows); /* * First scan: * o read boxes * o find dimensionality of the sample * o find extent of the sample * o count null-infinite/not-null values * o compute total_width * o compute total features's box area (for avgFeatureArea) * o sum features box coordinates (for standard deviation) */ for ( i = 0; i < sample_rows; i++ ) { Datum datum; GSERIALIZED *geom; GBOX gbox; ND_BOX *nd_box; bool is_null; datum = fetchfunc(stats, i, &is_null); /* Skip all NULLs. */ if ( is_null ) { POSTGIS_DEBUGF(4, " skipped null geometry %d", i); null_cnt++; continue; } /* Read the bounds from the gserialized. */ geom = (GSERIALIZED *)PG_DETOAST_DATUM(datum); if ( LW_FAILURE == gserialized_get_gbox_p(geom, &gbox) ) { /* Skip empties too. */ POSTGIS_DEBUGF(3, " skipped empty geometry %d", i); continue; } /* Check bounds for validity (finite and not NaN) */ if ( ! gbox_is_valid(&gbox) ) { POSTGIS_DEBUGF(3, " skipped infinite/nan geometry %d", i); continue; } /* * In N-D mode, set the ndims to the maximum dimensionality found * in the sample. Otherwise, leave at ndims == 2. */ if ( mode != 2 ) ndims = Max(gbox_ndims(&gbox), ndims); /* Convert gbox to n-d box */ nd_box = palloc(sizeof(ND_BOX)); nd_box_from_gbox(&gbox, nd_box); /* Cache n-d bounding box */ sample_boxes[notnull_cnt] = nd_box; /* Initialize sample extent before merging first entry */ if ( ! notnull_cnt ) nd_box_init_bounds(&sample_extent); /* Add current sample to overall sample extent */ nd_box_merge(nd_box, &sample_extent); /* How many bytes does this sample use? */ total_width += VARSIZE(geom); /* Add bounds coordinates to sums for stddev calculation */ for ( d = 0; d < ndims; d++ ) { sum.min[d] += nd_box->min[d]; sum.max[d] += nd_box->max[d]; } /* Increment our "good feature" count */ notnull_cnt++; /* Give backend a chance of interrupting us */ vacuum_delay_point(); } /* * We'll build a histogram having stats->attr->attstattarget cells * on each side, within reason... we'll use ndims*10000 as the * maximum number of cells. * Also, if we're sampling a relatively small table, we'll try to ensure that * we have an average of 5 features for each cell so the histogram isn't * so sparse. */ histo_cells_target = (int)pow((double)(stats->attr->attstattarget), (double)ndims); histo_cells_target = Min(histo_cells_target, ndims * 10000); histo_cells_target = Min(histo_cells_target, (int)(total_rows/5)); POSTGIS_DEBUGF(3, " stats->attr->attstattarget: %d", stats->attr->attstattarget); POSTGIS_DEBUGF(3, " target # of histogram cells: %d", histo_cells_target); /* If there's no useful features, we can't work out stats */ if ( ! notnull_cnt ) { elog(NOTICE, "no non-null/empty features, unable to compute statistics"); stats->stats_valid = false; return; } POSTGIS_DEBUGF(3, " sample_extent: %s", nd_box_to_json(&sample_extent, ndims)); /* * Second scan: * o compute standard deviation */ for ( d = 0; d < ndims; d++ ) { /* Calculate average bounds values */ avg.min[d] = sum.min[d] / notnull_cnt; avg.max[d] = sum.max[d] / notnull_cnt; /* Calculate standard deviation for this dimension bounds */ for ( i = 0; i < notnull_cnt; i++ ) { const ND_BOX *ndb = sample_boxes[i]; stddev.min[d] += (ndb->min[d] - avg.min[d]) * (ndb->min[d] - avg.min[d]); stddev.max[d] += (ndb->max[d] - avg.max[d]) * (ndb->max[d] - avg.max[d]); } stddev.min[d] = sqrt(stddev.min[d] / notnull_cnt); stddev.max[d] = sqrt(stddev.max[d] / notnull_cnt); /* Histogram bounds for this dimension bounds is avg +/- SDFACTOR * stdev */ histo_extent.min[d] = Max(avg.min[d] - SDFACTOR * stddev.min[d], sample_extent.min[d]); histo_extent.max[d] = Min(avg.max[d] + SDFACTOR * stddev.max[d], sample_extent.max[d]); } /* * Third scan: * o skip hard deviants * o compute new histogram box */ nd_box_init_bounds(&histo_extent_new); for ( i = 0; i < notnull_cnt; i++ ) { const ND_BOX *ndb = sample_boxes[i]; /* Skip any hard deviants (boxes entirely outside our histo_extent */ if ( ! nd_box_intersects(&histo_extent, ndb, ndims) ) { POSTGIS_DEBUGF(4, " feature %d is a hard deviant, skipped", i); sample_boxes[i] = NULL; continue; } /* Expand our new box to fit all the other features. */ nd_box_merge(ndb, &histo_extent_new); } /* * Expand the box slightly (1%) to avoid edge effects * with objects that are on the boundary */ nd_box_expand(&histo_extent_new, 0.01); histo_extent = histo_extent_new; /* * How should we allocate our histogram cells to the * different dimensions? We can't do it by raw dimensional width, * because in x/y/z space, the z can have different units * from the x/y. Similarly for x/y/t space. * So, we instead calculate how much features overlap * each other in their dimension to figure out which * dimensions have useful selectivity characteristics (more * variability in density) and therefor would find * more cells useful (to distinguish between dense places and * homogeneous places). */ nd_box_array_distribution(sample_boxes, notnull_cnt, &histo_extent, ndims, sample_distribution); /* * The sample_distribution array now tells us how spread out the * data is in each dimension, so we use that data to allocate * the histogram cells we have available. * At this point, histo_cells_target is the approximate target number * of cells. */ /* * Some dimensions have basically a uniform distribution, we want * to allocate no cells to those dimensions, only to dimensions * that have some interesting differences in data distribution. * Here we count up the number of interesting dimensions */ for ( d = 0; d < ndims; d++ ) { if ( sample_distribution[d] > 0 ) histo_ndims++; } if ( histo_ndims == 0 ) { /* Special case: all our dimensions had low variability! */ /* We just divide the cells up evenly */ POSTGIS_DEBUG(3, " special case: no axes have variability"); histo_cells_new = 1; for ( d = 0; d < ndims; d++ ) { histo_size[d] = (int)pow((double)histo_cells_target, 1/(double)ndims); POSTGIS_DEBUGF(3, " histo_size[d]: %d", histo_size[d]); histo_cells_new *= histo_size[d]; } POSTGIS_DEBUGF(3, " histo_cells_new: %d", histo_cells_new); } else { /* * We're going to express the amount of variability in each dimension * as a proportion of the total variability and allocate cells in that * dimension relative to that proportion. */ POSTGIS_DEBUG(3, " allocating histogram axes based on axis variability"); total_distribution = total_double(sample_distribution, ndims); /* First get the total */ POSTGIS_DEBUGF(3, " total_distribution: %.8g", total_distribution); histo_cells_new = 1; /* For the number of cells in the final histogram */ for ( d = 0; d < ndims; d++ ) { if ( sample_distribution[d] == 0 ) /* Uninteresting dimensions don't get any room */ { histo_size[d] = 1; } else /* Interesting dimension */ { /* How does this dims variability compare to the total? */ float edge_ratio = (float)sample_distribution[d] / (float)total_distribution; /* * Scale the target cells number by the # of dims and ratio, * then take the appropriate root to get the estimated number of cells * on this axis (eg, pow(0.5) for 2d, pow(0.333) for 3d, pow(0.25) for 4d) */ histo_size[d] = (int)pow(histo_cells_target * histo_ndims * edge_ratio, 1/(double)histo_ndims); /* If something goes awry, just give this dim one slot */ if ( ! histo_size[d] ) histo_size[d] = 1; } histo_cells_new *= histo_size[d]; } POSTGIS_DEBUGF(3, " histo_cells_new: %d", histo_cells_new); } /* Update histo_cells to the actual number of cells we need to allocate */ histo_cells = histo_cells_new; POSTGIS_DEBUGF(3, " histo_cells: %d", histo_cells); /* * Create the histogram (ND_STATS) in the stats memory context */ old_context = MemoryContextSwitchTo(stats->anl_context); nd_stats_size = sizeof(ND_STATS) + ((histo_cells - 1) * sizeof(float4)); nd_stats = palloc(nd_stats_size); memset(nd_stats, 0, nd_stats_size); /* Initialize all values to 0 */ MemoryContextSwitchTo(old_context); /* Initialize the #ND_STATS objects */ nd_stats->ndims = ndims; nd_stats->extent = histo_extent; nd_stats->sample_features = sample_rows; nd_stats->table_features = total_rows; nd_stats->not_null_features = notnull_cnt; /* Copy in the histogram dimensions */ for ( d = 0; d < ndims; d++ ) nd_stats->size[d] = histo_size[d]; /* * Fourth scan: * o fill histogram values with the proportion of * features' bbox overlaps: a feature's bvol * can fully overlap (1) or partially overlap * (fraction of 1) an histogram cell. * * Note that we are filling each cell with the "portion of * the feature's box that overlaps the cell". So, if we sum * up the values in the histogram, we could get the * histogram feature count. * */ for ( i = 0; i < notnull_cnt; i++ ) { const ND_BOX *nd_box; ND_IBOX nd_ibox; int at[ND_DIMS]; int d; double num_cells = 0; double tmp_volume = 1.0; double min[ND_DIMS]; double max[ND_DIMS]; double cellsize[ND_DIMS]; nd_box = sample_boxes[i]; if ( ! nd_box ) continue; /* Skip Null'ed out hard deviants */ /* Give backend a chance of interrupting us */ vacuum_delay_point(); /* Find the cells that overlap with this box and put them into the ND_IBOX */ nd_box_overlap(nd_stats, nd_box, &nd_ibox); memset(at, 0, sizeof(int)*ND_DIMS); POSTGIS_DEBUGF(3, " feature %d: ibox (%d, %d, %d, %d) (%d, %d, %d, %d)", i, nd_ibox.min[0], nd_ibox.min[1], nd_ibox.min[2], nd_ibox.min[3], nd_ibox.max[0], nd_ibox.max[1], nd_ibox.max[2], nd_ibox.max[3]); for ( d = 0; d < nd_stats->ndims; d++ ) { /* Initialize the starting values */ at[d] = nd_ibox.min[d]; min[d] = nd_stats->extent.min[d]; max[d] = nd_stats->extent.max[d]; cellsize[d] = (max[d] - min[d])/(nd_stats->size[d]); /* What's the volume (area) of this feature's box? */ tmp_volume *= (nd_box->max[d] - nd_box->min[d]); } /* Add feature volume (area) to our total */ total_sample_volume += tmp_volume; /* * Move through all the overlaped histogram cells values and * add the box overlap proportion to them. */ do { ND_BOX nd_cell; double ratio; /* Create a box for this histogram cell */ for ( d = 0; d < nd_stats->ndims; d++ ) { nd_cell.min[d] = min[d] + (at[d]+0) * cellsize[d]; nd_cell.max[d] = min[d] + (at[d]+1) * cellsize[d]; } /* * If a feature box is completely inside one cell the ratio will be * 1.0. If a feature box is 50% in two cells, each cell will get * 0.5 added on. */ ratio = nd_box_ratio(&nd_cell, nd_box, nd_stats->ndims); nd_stats->value[nd_stats_value_index(nd_stats, at)] += ratio; num_cells += ratio; POSTGIS_DEBUGF(3, " ratio (%.8g) num_cells (%.8g)", ratio, num_cells); POSTGIS_DEBUGF(3, " at (%d, %d, %d, %d)", at[0], at[1], at[2], at[3]); } while ( nd_increment(&nd_ibox, nd_stats->ndims, at) ); /* Keep track of overall number of overlaps counted */ total_cell_count += num_cells; /* How many features have we added to this histogram? */ histogram_features++; } POSTGIS_DEBUGF(3, " histogram_features: %d", histogram_features); POSTGIS_DEBUGF(3, " sample_rows: %d", sample_rows); POSTGIS_DEBUGF(3, " table_rows: %.6g", total_rows); /* Error out if we got no sample information */ if ( ! histogram_features ) { POSTGIS_DEBUG(3, " no stats have been gathered"); elog(NOTICE, " no features lie in the stats histogram, invalid stats"); stats->stats_valid = false; return; } nd_stats->histogram_features = histogram_features; nd_stats->histogram_cells = histo_cells; nd_stats->cells_covered = total_cell_count; /* Put this histogram data into the right slot/kind */ if ( mode == 2 ) { stats_slot = STATISTIC_SLOT_2D; stats_kind = STATISTIC_KIND_2D; } else { stats_slot = STATISTIC_SLOT_ND; stats_kind = STATISTIC_KIND_ND; } /* Write the statistics data */ stats->stakind[stats_slot] = stats_kind; stats->staop[stats_slot] = InvalidOid; stats->stanumbers[stats_slot] = (float4*)nd_stats; stats->numnumbers[stats_slot] = nd_stats_size/sizeof(float4); stats->stanullfrac = (float4)null_cnt/sample_rows; stats->stawidth = total_width/notnull_cnt; stats->stadistinct = -1.0; stats->stats_valid = true; POSTGIS_DEBUGF(3, " out: slot 0: kind %d (STATISTIC_KIND_ND)", stats->stakind[0]); POSTGIS_DEBUGF(3, " out: slot 0: op %d (InvalidOid)", stats->staop[0]); POSTGIS_DEBUGF(3, " out: slot 0: numnumbers %d", stats->numnumbers[0]); POSTGIS_DEBUGF(3, " out: null fraction: %f=%d/%d", stats->stanullfrac, null_cnt, sample_rows); POSTGIS_DEBUGF(3, " out: average width: %d bytes", stats->stawidth); POSTGIS_DEBUG (3, " out: distinct values: all (no check done)"); POSTGIS_DEBUGF(3, " out: %s", nd_stats_to_json(nd_stats)); /* POSTGIS_DEBUGF(3, " out histogram:\n%s", nd_stats_to_grid(nd_stats)); */ return; } /** * In order to do useful selectivity calculations in both 2-D and N-D * modes, we actually have to generate two stats objects, one for 2-D * and one for N-D. * You would think that an N-D histogram would be sufficient for 2-D * calculations of selectivity, but you'd be wrong. For features that * overlap multiple cells, the N-D histogram over-estimates the number * of hits, and can't contain the requisite information to correct * that over-estimate. * We use the convenient PgSQL facility of stats slots to store * one 2-D and one N-D stats object, and here in the compute function * we just call the computation twice, once in each mode. * It would be more efficient to have the computation calculate * the two histograms simultaneously, but that would also complicate * the (already complicated) logic in the function, * so we'll take the CPU hit and do the computation twice. */ static void compute_gserialized_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, int sample_rows, double total_rows) { /* 2D Mode */ compute_gserialized_stats_mode(stats, fetchfunc, sample_rows, total_rows, 2); /* ND Mode */ compute_gserialized_stats_mode(stats, fetchfunc, sample_rows, total_rows, 0); } /** * This function will be called when the ANALYZE command is run * on a column of the "geometry" or "geography" type. * * It will need to return a stats builder function reference * and a "minimum" sample rows to feed it. * If we want analisys to be completely skipped we can return * FALSE and leave output vals untouched. * * What we know from this call is: * * o The pg_attribute row referring to the specific column. * Could be used to get reltuples from pg_class (which * might quite inexact though...) and use them to set an * appropriate minimum number of sample rows to feed to * the stats builder. The stats builder will also receive * a more accurate "estimation" of the number or rows. * * o The pg_type row for the specific column. * Could be used to set stat builder / sample rows * based on domain type (when postgis will be implemented * that way). * * Being this experimental we'll stick to a static stat_builder/sample_rows * value for now. * */ PG_FUNCTION_INFO_V1(gserialized_analyze_nd); Datum gserialized_analyze_nd(PG_FUNCTION_ARGS) { VacAttrStats *stats = (VacAttrStats *)PG_GETARG_POINTER(0); Form_pg_attribute attr = stats->attr; POSTGIS_DEBUG(2, "gserialized_analyze_nd called"); /* If the attstattarget column is negative, use the default value */ /* NB: it is okay to scribble on stats->attr since it's a copy */ if (attr->attstattarget < 0) attr->attstattarget = default_statistics_target; POSTGIS_DEBUGF(3, " attribute stat target: %d", attr->attstattarget); /* Setup the minimum rows and the algorithm function */ stats->minrows = 300 * stats->attr->attstattarget; stats->compute_stats = compute_gserialized_stats; POSTGIS_DEBUGF(3, " minrows: %d", stats->minrows); /* Indicate we are done successfully */ PG_RETURN_BOOL(true); } /** * This function returns an estimate of the selectivity * of a search GBOX by looking at data in the ND_STATS * structure. The selectivity is a float from 0-1, that estimates * the proportion of the rows in the table that will be returned * as a result of the search box. * * To get our estimate, * we need "only" sum up the values * the proportion of each cell * in the histogram that falls within the search box, then * divide by the number of features that generated the histogram. */ static float8 estimate_selectivity(const GBOX *box, const ND_STATS *nd_stats, int mode) { int d; /* counter */ float8 selectivity; ND_BOX nd_box; ND_IBOX nd_ibox; int at[ND_DIMS]; double cell_size[ND_DIMS]; double min[ND_DIMS]; double max[ND_DIMS]; double total_count = 0.0; int ndims_max = Max(nd_stats->ndims, gbox_ndims(box)); // int ndims_min = Min(nd_stats->ndims, gbox_ndims(box)); /* Calculate the overlap of the box on the histogram */ if ( ! nd_stats ) { elog(NOTICE, " estimate_selectivity called with null input"); return FALLBACK_ND_SEL; } /* Initialize nd_box. */ nd_box_from_gbox(box, &nd_box); /* * To return 2D stats on an ND sample, we need to make the * 2D box cover the full range of the other dimensions in the * histogram. */ POSTGIS_DEBUGF(3, " mode: %d", mode); if ( mode == 2 ) { POSTGIS_DEBUG(3, " in 2d mode, stripping the computation down to 2d"); ndims_max = 2; } POSTGIS_DEBUGF(3, " nd_stats->extent: %s", nd_box_to_json(&(nd_stats->extent), nd_stats->ndims)); POSTGIS_DEBUGF(3, " nd_box: %s", nd_box_to_json(&(nd_box), gbox_ndims(box))); /* * Search box completely misses histogram extent? * We have to intersect in all N dimensions or else we have * zero interaction under the &&& operator. It's important * to short circuit in this case, as some of the tests below * will return junk results when run on non-intersecting inputs. */ if ( ! nd_box_intersects(&nd_box, &(nd_stats->extent), ndims_max) ) { POSTGIS_DEBUG(3, " search box does not overlap histogram, returning 0"); return 0.0; } /* Search box completely contains histogram extent! */ if ( nd_box_contains(&nd_box, &(nd_stats->extent), ndims_max) ) { POSTGIS_DEBUG(3, " search box contains histogram, returning 1"); return 1.0; } /* Calculate the overlap of the box on the histogram */ if ( ! nd_box_overlap(nd_stats, &nd_box, &nd_ibox) ) { POSTGIS_DEBUG(3, " search box overlap with stats histogram failed"); return FALLBACK_ND_SEL; } /* Work out some measurements of the histogram */ for ( d = 0; d < nd_stats->ndims; d++ ) { /* Cell size in each dim */ min[d] = nd_stats->extent.min[d]; max[d] = nd_stats->extent.max[d]; cell_size[d] = (max[d] - min[d]) / nd_stats->size[d]; POSTGIS_DEBUGF(3, " cell_size[%d] : %.9g", d, cell_size[d]); /* Initialize the counter */ at[d] = nd_ibox.min[d]; } /* Move through all the overlap values and sum them */ do { float cell_count, ratio; ND_BOX nd_cell; /* We have to pro-rate partially overlapped cells. */ for ( d = 0; d < nd_stats->ndims; d++ ) { nd_cell.min[d] = min[d] + (at[d]+0) * cell_size[d]; nd_cell.max[d] = min[d] + (at[d]+1) * cell_size[d]; } ratio = nd_box_ratio(&nd_box, &nd_cell, nd_stats->ndims); cell_count = nd_stats->value[nd_stats_value_index(nd_stats, at)]; /* Add the pro-rated count for this cell to the overall total */ total_count += cell_count * ratio; POSTGIS_DEBUGF(4, " cell (%d,%d), cell value %.6f, ratio %.6f", at[0], at[1], cell_count, ratio); } while ( nd_increment(&nd_ibox, nd_stats->ndims, at) ); /* Scale by the number of features in our histogram to get the proportion */ selectivity = total_count / nd_stats->histogram_features; POSTGIS_DEBUGF(3, " nd_stats->histogram_features = %f", nd_stats->histogram_features); POSTGIS_DEBUGF(3, " nd_stats->histogram_cells = %f", nd_stats->histogram_cells); POSTGIS_DEBUGF(3, " sum(overlapped histogram cells) = %f", total_count); POSTGIS_DEBUGF(3, " selectivity = %f", selectivity); /* Prevent rounding overflows */ if (selectivity > 1.0) selectivity = 1.0; else if (selectivity < 0.0) selectivity = 0.0; return selectivity; } /** * Utility function to print the statistics information for a * given table/column in JSON. Used for debugging the selectivity code. */ PG_FUNCTION_INFO_V1(_postgis_gserialized_stats); Datum _postgis_gserialized_stats(PG_FUNCTION_ARGS) { Oid table_oid = PG_GETARG_OID(0); text *att_text = PG_GETARG_TEXT_P(1); ND_STATS *nd_stats; char *str; text *json; int mode = 2; /* default to 2D mode */ /* Check if we've been asked to not use 2d mode */ if ( ! PG_ARGISNULL(2) ) mode = text_p_get_mode(PG_GETARG_TEXT_P(2)); /* Retrieve the stats object */ nd_stats = pg_get_nd_stats_by_name(table_oid, att_text, mode); if ( ! nd_stats ) elog(ERROR, "stats for \"%s.%s\" do not exist", get_rel_name(table_oid), text2cstring(att_text)); /* Convert to JSON */ str = nd_stats_to_json(nd_stats); json = cstring2text(str); pfree(str); pfree(nd_stats); PG_RETURN_TEXT_P(json); } /** * Utility function to read the calculated selectivity for a given search * box and table/column. Used for debugging the selectivity code. */ PG_FUNCTION_INFO_V1(_postgis_gserialized_sel); Datum _postgis_gserialized_sel(PG_FUNCTION_ARGS) { Oid table_oid = PG_GETARG_OID(0); text *att_text = PG_GETARG_TEXT_P(1); Datum geom_datum = PG_GETARG_DATUM(2); GBOX gbox; /* search box read from gserialized datum */ float8 selectivity = 0; ND_STATS *nd_stats; int mode = 2; /* 2D mode by default */ /* Check if we've been asked to not use 2d mode */ if ( ! PG_ARGISNULL(3) ) mode = text_p_get_mode(PG_GETARG_TEXT_P(3)); /* Retrieve the stats object */ nd_stats = pg_get_nd_stats_by_name(table_oid, att_text, mode); if ( ! nd_stats ) elog(ERROR, "stats for \"%s.%s\" do not exist", get_rel_name(table_oid), text2cstring(att_text)); /* Calculate the gbox */ if ( ! gserialized_datum_get_gbox_p(geom_datum, &gbox) ) elog(ERROR, "unable to calculate bounding box from geometry"); POSTGIS_DEBUGF(3, " %s", gbox_to_string(&gbox)); /* Do the estimation */ selectivity = estimate_selectivity(&gbox, nd_stats, mode); pfree(nd_stats); PG_RETURN_FLOAT8(selectivity); } /** * Utility function to read the calculated join selectivity for a * pair of tables. Used for debugging the selectivity code. */ PG_FUNCTION_INFO_V1(_postgis_gserialized_joinsel); Datum _postgis_gserialized_joinsel(PG_FUNCTION_ARGS) { Oid table_oid1 = PG_GETARG_OID(0); text *att_text1 = PG_GETARG_TEXT_P(1); Oid table_oid2 = PG_GETARG_OID(2); text *att_text2 = PG_GETARG_TEXT_P(3); ND_STATS *nd_stats1, *nd_stats2; float8 selectivity = 0; int mode = 2; /* 2D mode by default */ /* Retrieve the stats object */ nd_stats1 = pg_get_nd_stats_by_name(table_oid1, att_text1, mode); nd_stats2 = pg_get_nd_stats_by_name(table_oid2, att_text2, mode); if ( ! nd_stats1 ) elog(ERROR, "stats for \"%s.%s\" do not exist", get_rel_name(table_oid1), text2cstring(att_text1)); if ( ! nd_stats2 ) elog(ERROR, "stats for \"%s.%s\" do not exist", get_rel_name(table_oid2), text2cstring(att_text2)); /* Check if we've been asked to not use 2d mode */ if ( ! PG_ARGISNULL(4) ) { text *modetxt = PG_GETARG_TEXT_P(4); char *modestr = text2cstring(modetxt); if ( modestr[0] == 'N' ) mode = 0; } /* Do the estimation */ selectivity = estimate_join_selectivity(nd_stats1, nd_stats2); pfree(nd_stats1); pfree(nd_stats2); PG_RETURN_FLOAT8(selectivity); } /** * For (geometry && geometry) * we call into the 2-D mode. */ PG_FUNCTION_INFO_V1(gserialized_gist_sel_2d); Datum gserialized_gist_sel_2d(PG_FUNCTION_ARGS) { PG_RETURN_DATUM(DirectFunctionCall5( gserialized_gist_sel, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PG_GETARG_DATUM(2), PG_GETARG_DATUM(3), Int32GetDatum(2) /* 2-D mode */ )); } /** * For (geometry &&& geometry) and (geography && geography) * we call into the N-D mode. */ PG_FUNCTION_INFO_V1(gserialized_gist_sel_nd); Datum gserialized_gist_sel_nd(PG_FUNCTION_ARGS) { PG_RETURN_DATUM(DirectFunctionCall5( gserialized_gist_sel, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PG_GETARG_DATUM(2), PG_GETARG_DATUM(3), Int32GetDatum(0) /* N-D mode */ )); } /** * This function should return an estimation of the number of * rows returned by a query involving an overlap check * ( it's the restrict function for the && operator ) * * It can make use (if available) of the statistics collected * by the geometry analyzer function. * * Note that the good work is done by estimate_selectivity() above. * This function just tries to find the search_box, loads the statistics * and invoke the work-horse. * */ PG_FUNCTION_INFO_V1(gserialized_gist_sel); Datum gserialized_gist_sel(PG_FUNCTION_ARGS) { PlannerInfo *root = (PlannerInfo *) PG_GETARG_POINTER(0); /* Oid operator_oid = PG_GETARG_OID(1); */ List *args = (List *) PG_GETARG_POINTER(2); /* int varRelid = PG_GETARG_INT32(3); */ int mode = PG_GETARG_INT32(4); Oid relid; ND_STATS *nd_stats; Node *other; Var *self; GBOX search_box; float8 selectivity = 0; POSTGIS_DEBUG(2, "gserialized_gist_sel called"); /* * TODO: This is a big one, * All this statistics code *only* tries to generate a valid * selectivity for && and &&&. That leaves all the other * geometry operators with bad stats! The selectivity * calculation should take account of the incoming operator * type and do the right thing. */ /* Fail if not a binary opclause (probably shouldn't happen) */ if (list_length(args) != 2) { POSTGIS_DEBUG(3, "gserialized_gist_sel: not a binary opclause"); PG_RETURN_FLOAT8(DEFAULT_ND_SEL); } /* Find the constant part */ other = (Node *) linitial(args); if ( ! IsA(other, Const) ) { self = (Var *)other; other = (Node *) lsecond(args); } else { self = (Var *) lsecond(args); } if ( ! IsA(other, Const) ) { POSTGIS_DEBUG(3, " no constant arguments - returning a default selectivity"); PG_RETURN_FLOAT8(DEFAULT_ND_SEL); } /* * We don't have a nice <const> && <var> or <var> && <const> * situation here. <const> && <const> would probably get evaluated * away by PgSQL earlier on. <func> && <const> is harder, and the * case we get often is <const> && ST_Expand(<var>), which does * actually have a subtly different selectivity than a bae * <const> && <var> call. It's calculatable though, by expanding * every cell in the histgram appropriately. * * Discussion: http://trac.osgeo.org/postgis/ticket/1828 * * To do? Do variable selectivity based on the <func> node. */ if ( ! IsA(self, Var) ) { POSTGIS_DEBUG(3, " no bare variable argument ? - returning a moderate selectivity"); PG_RETURN_FLOAT8(FALLBACK_ND_SEL); } /* Convert the constant to a BOX */ if( ! gserialized_datum_get_gbox_p(((Const*)other)->constvalue, &search_box) ) { POSTGIS_DEBUG(3, "search box is EMPTY"); PG_RETURN_FLOAT8(0.0); } POSTGIS_DEBUGF(4, " requested search box is: %s", gbox_to_string(&search_box)); /* Get pg_statistic row */ relid = getrelid(self->varno, root->parse->rtable); nd_stats = pg_get_nd_stats(relid, self->varattno, mode); if ( ! nd_stats ) { POSTGIS_DEBUG(3, " unable to load stats from syscache, not analyzed yet?"); PG_RETURN_FLOAT8(FALLBACK_ND_SEL); } POSTGIS_DEBUGF(4, " got stats:\n%s", nd_stats_to_json(nd_stats)); /* Do the estimation! */ selectivity = estimate_selectivity(&search_box, nd_stats, mode); POSTGIS_DEBUGF(3, " returning computed value: %f", selectivity); pfree(nd_stats); PG_RETURN_FLOAT8(selectivity); } /** * Return the estimated extent of the table * looking at gathered statistics (or NULL if * no statistics have been gathered). */ PG_FUNCTION_INFO_V1(gserialized_estimated_extent); Datum gserialized_estimated_extent(PG_FUNCTION_ARGS) { char *nsp = NULL; char *tbl = NULL; text *col = NULL; char *nsp_tbl = NULL; Oid tbl_oid; ND_STATS *nd_stats; GBOX *gbox; if ( PG_NARGS() == 3 ) { nsp = text2cstring(PG_GETARG_TEXT_P(0)); tbl = text2cstring(PG_GETARG_TEXT_P(1)); col = PG_GETARG_TEXT_P(2); nsp_tbl = palloc(strlen(nsp) + strlen(tbl) + 2); sprintf(nsp_tbl, "%s.%s", nsp, tbl); tbl_oid = DatumGetObjectId(DirectFunctionCall1(regclassin, CStringGetDatum(nsp_tbl))); pfree(nsp_tbl); } else if ( PG_NARGS() == 2 ) { tbl = text2cstring(PG_GETARG_TEXT_P(0)); col = PG_GETARG_TEXT_P(1); tbl_oid = DatumGetObjectId(DirectFunctionCall1(regclassin, CStringGetDatum(tbl))); } else { elog(ERROR, "estimated_extent() called with wrong number of arguments"); PG_RETURN_NULL(); } /* Estimated extent only returns 2D bounds, so use mode 2 */ nd_stats = pg_get_nd_stats_by_name(tbl_oid, col, 2); /* Error out on no stats */ if ( ! nd_stats ) elog(ERROR, "stats for \"%s.%s\" do not exist", tbl, text2cstring(col)); /* Construct the box */ gbox = palloc(sizeof(GBOX)); FLAGS_SET_GEODETIC(gbox->flags, 0); FLAGS_SET_Z(gbox->flags, 0); FLAGS_SET_M(gbox->flags, 0); gbox->xmin = nd_stats->extent.min[0]; gbox->xmax = nd_stats->extent.max[0]; gbox->ymin = nd_stats->extent.min[1]; gbox->ymax = nd_stats->extent.max[1]; pfree(nd_stats); PG_RETURN_POINTER(gbox); } /** * Return the estimated extent of the table * looking at gathered statistics (or NULL if * no statistics have been gathered). */ PG_FUNCTION_INFO_V1(geometry_estimated_extent); Datum geometry_estimated_extent(PG_FUNCTION_ARGS) { if ( PG_NARGS() == 3 ) { PG_RETURN_DATUM( DirectFunctionCall3(gserialized_estimated_extent, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1), PG_GETARG_DATUM(2))); } else if ( PG_NARGS() == 2 ) { PG_RETURN_DATUM( DirectFunctionCall2(gserialized_estimated_extent, PG_GETARG_DATUM(0), PG_GETARG_DATUM(1))); } elog(ERROR, "geometry_estimated_extent() called with wrong number of arguments"); PG_RETURN_NULL(); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/TODO����������������������������������������������������������������0000644�0000000�0000000�00000001336�11722777314�015756� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������- copy bbox on deserializzation (for memory alignment constraints) - lwgeom_clone_deep / lwgeom_release_deep (or maybe should both be always be deep.... ) - LWGEOM editor (insert/append a geom, remove a geom, ....) - Flatten(geometry) - F linemerge(linestring, linestring) - A linemerge(linestring, linestring) - Check spheroid misure functions o can't understand if 3d computation works since I get same result w/ 2d and 3d. o check if distance can be computed in 3d space - Check semantic required by OGC functions working on "first geometry of a given type". Is the first geometry be to be seeked inside collection elements (currently it is not w/ LWGEOM) ? - proj support functions might need 3d sometimes. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_functions_basic.c��������������������������������������������0000644�0000000�0000000�00000205574�12236246642�022163� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: lwgeom_functions_basic.c 12090 2013-11-05 19:57:22Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "utils/elog.h" #include "utils/array.h" #include "utils/geo_decls.h" #include "liblwgeom_internal.h" #include "lwgeom_pg.h" #include <math.h> #include <float.h> #include <string.h> #include <stdio.h> #include <errno.h> Datum LWGEOM_mem_size(PG_FUNCTION_ARGS); Datum LWGEOM_summary(PG_FUNCTION_ARGS); Datum LWGEOM_npoints(PG_FUNCTION_ARGS); Datum LWGEOM_nrings(PG_FUNCTION_ARGS); Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS); Datum postgis_uses_stats(PG_FUNCTION_ARGS); Datum postgis_autocache_bbox(PG_FUNCTION_ARGS); Datum postgis_scripts_released(PG_FUNCTION_ARGS); Datum postgis_version(PG_FUNCTION_ARGS); Datum postgis_lib_version(PG_FUNCTION_ARGS); Datum postgis_svn_version(PG_FUNCTION_ARGS); Datum postgis_libxml_version(PG_FUNCTION_ARGS); Datum postgis_lib_build_date(PG_FUNCTION_ARGS); Datum LWGEOM_length2d_linestring(PG_FUNCTION_ARGS); Datum LWGEOM_length_linestring(PG_FUNCTION_ARGS); Datum LWGEOM_perimeter2d_poly(PG_FUNCTION_ARGS); Datum LWGEOM_perimeter_poly(PG_FUNCTION_ARGS); Datum LWGEOM_maxdistance2d_linestring(PG_FUNCTION_ARGS); Datum LWGEOM_mindistance2d(PG_FUNCTION_ARGS); Datum LWGEOM_closestpoint(PG_FUNCTION_ARGS); Datum LWGEOM_shortestline2d(PG_FUNCTION_ARGS); Datum LWGEOM_longestline2d(PG_FUNCTION_ARGS); Datum LWGEOM_dwithin(PG_FUNCTION_ARGS); Datum LWGEOM_dfullywithin(PG_FUNCTION_ARGS); Datum LWGEOM_maxdistance3d(PG_FUNCTION_ARGS); Datum LWGEOM_mindistance3d(PG_FUNCTION_ARGS); Datum LWGEOM_closestpoint3d(PG_FUNCTION_ARGS); Datum LWGEOM_shortestline3d(PG_FUNCTION_ARGS); Datum LWGEOM_longestline3d(PG_FUNCTION_ARGS); Datum LWGEOM_dwithin3d(PG_FUNCTION_ARGS); Datum LWGEOM_dfullywithin3d(PG_FUNCTION_ARGS); Datum LWGEOM_inside_circle_point(PG_FUNCTION_ARGS); Datum LWGEOM_collect(PG_FUNCTION_ARGS); Datum LWGEOM_collect_garray(PG_FUNCTION_ARGS); Datum LWGEOM_expand(PG_FUNCTION_ARGS); Datum LWGEOM_to_BOX(PG_FUNCTION_ARGS); Datum LWGEOM_envelope(PG_FUNCTION_ARGS); Datum LWGEOM_isempty(PG_FUNCTION_ARGS); Datum LWGEOM_segmentize2d(PG_FUNCTION_ARGS); Datum LWGEOM_reverse(PG_FUNCTION_ARGS); Datum LWGEOM_force_clockwise_poly(PG_FUNCTION_ARGS); Datum LWGEOM_force_sfs(PG_FUNCTION_ARGS); Datum LWGEOM_noop(PG_FUNCTION_ARGS); Datum LWGEOM_zmflag(PG_FUNCTION_ARGS); Datum LWGEOM_hasz(PG_FUNCTION_ARGS); Datum LWGEOM_hasm(PG_FUNCTION_ARGS); Datum LWGEOM_ndims(PG_FUNCTION_ARGS); Datum LWGEOM_makepoint(PG_FUNCTION_ARGS); Datum LWGEOM_makepoint3dm(PG_FUNCTION_ARGS); Datum LWGEOM_makeline_garray(PG_FUNCTION_ARGS); Datum LWGEOM_makeline(PG_FUNCTION_ARGS); Datum LWGEOM_makepoly(PG_FUNCTION_ARGS); Datum LWGEOM_line_from_mpoint(PG_FUNCTION_ARGS); Datum LWGEOM_addpoint(PG_FUNCTION_ARGS); Datum LWGEOM_removepoint(PG_FUNCTION_ARGS); Datum LWGEOM_setpoint_linestring(PG_FUNCTION_ARGS); Datum LWGEOM_asEWKT(PG_FUNCTION_ARGS); Datum LWGEOM_hasBBOX(PG_FUNCTION_ARGS); Datum LWGEOM_azimuth(PG_FUNCTION_ARGS); Datum LWGEOM_affine(PG_FUNCTION_ARGS); Datum LWGEOM_longitude_shift(PG_FUNCTION_ARGS); Datum optimistic_overlap(PG_FUNCTION_ARGS); Datum ST_GeoHash(PG_FUNCTION_ARGS); Datum ST_MakeEnvelope(PG_FUNCTION_ARGS); Datum ST_CollectionExtract(PG_FUNCTION_ARGS); Datum ST_CollectionHomogenize(PG_FUNCTION_ARGS); Datum ST_IsCollection(PG_FUNCTION_ARGS); /*------------------------------------------------------------------*/ /** find the size of geometry */ PG_FUNCTION_INFO_V1(LWGEOM_mem_size); Datum LWGEOM_mem_size(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); size_t size = VARSIZE(geom); PG_FREE_IF_COPY(geom,0); PG_RETURN_INT32(size); } /** get summary info on a GEOMETRY */ PG_FUNCTION_INFO_V1(LWGEOM_summary); Datum LWGEOM_summary(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); char *result; text *mytext; LWGEOM *lwgeom; lwgeom = lwgeom_from_gserialized(geom); result = lwgeom_summary(lwgeom, 0); lwgeom_free(lwgeom); /* create a text obj to return */ mytext = cstring2text(result); pfree(result); PG_FREE_IF_COPY(geom,0); PG_RETURN_TEXT_P(mytext); } PG_FUNCTION_INFO_V1(postgis_version); Datum postgis_version(PG_FUNCTION_ARGS) { char *ver = POSTGIS_VERSION; text *result = cstring2text(ver); PG_RETURN_TEXT_P(result); } PG_FUNCTION_INFO_V1(postgis_lib_version); Datum postgis_lib_version(PG_FUNCTION_ARGS) { char *ver = POSTGIS_LIB_VERSION; text *result = cstring2text(ver); PG_RETURN_TEXT_P(result); } PG_FUNCTION_INFO_V1(postgis_svn_version); Datum postgis_svn_version(PG_FUNCTION_ARGS) { static int rev = POSTGIS_SVN_REVISION; char ver[32]; if ( rev > 0 ) { snprintf(ver, 32, "%d", rev); PG_RETURN_TEXT_P(cstring2text(ver)); } else PG_RETURN_NULL(); } PG_FUNCTION_INFO_V1(postgis_lib_build_date); Datum postgis_lib_build_date(PG_FUNCTION_ARGS) { char *ver = POSTGIS_BUILD_DATE; text *result = cstring2text(ver); PG_RETURN_TEXT_P(result); } PG_FUNCTION_INFO_V1(postgis_scripts_released); Datum postgis_scripts_released(PG_FUNCTION_ARGS) { char ver[64]; text *result; snprintf(ver, 64, "%s r%d", POSTGIS_LIB_VERSION, POSTGIS_SVN_REVISION); ver[63] = '\0'; result = cstring2text(ver); PG_RETURN_TEXT_P(result); } PG_FUNCTION_INFO_V1(postgis_uses_stats); Datum postgis_uses_stats(PG_FUNCTION_ARGS) { PG_RETURN_BOOL(TRUE); } PG_FUNCTION_INFO_V1(postgis_autocache_bbox); Datum postgis_autocache_bbox(PG_FUNCTION_ARGS) { #ifdef POSTGIS_AUTOCACHE_BBOX PG_RETURN_BOOL(TRUE); #else PG_RETURN_BOOL(FALSE); #endif } PG_FUNCTION_INFO_V1(postgis_libxml_version); Datum postgis_libxml_version(PG_FUNCTION_ARGS) { char *ver = POSTGIS_LIBXML2_VERSION; text *result = cstring2text(ver); PG_RETURN_TEXT_P(result); } /** number of points in an object */ PG_FUNCTION_INFO_V1(LWGEOM_npoints); Datum LWGEOM_npoints(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int npoints = 0; npoints = lwgeom_count_vertices(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_INT32(npoints); } /** number of rings in an object */ PG_FUNCTION_INFO_V1(LWGEOM_nrings); Datum LWGEOM_nrings(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int nrings = 0; nrings = lwgeom_count_rings(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_INT32(nrings); } /** * @brief Calculate the area of all the subobj in a polygon * area(point) = 0 * area (line) = 0 * area(polygon) = find its 2d area */ PG_FUNCTION_INFO_V1(LWGEOM_area_polygon); Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double area = 0.0; POSTGIS_DEBUG(2, "in LWGEOM_area_polygon"); area = lwgeom_area(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(area); } /** * @brief find the "length of a geometry" * length2d(point) = 0 * length2d(line) = length of line * length2d(polygon) = 0 -- could make sense to return sum(ring perimeter) * uses euclidian 2d length (even if input is 3d) */ PG_FUNCTION_INFO_V1(LWGEOM_length2d_linestring); Datum LWGEOM_length2d_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double dist = lwgeom_length_2d(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(dist); } /** * @brief find the "length of a geometry" * length(point) = 0 * length(line) = length of line * length(polygon) = 0 -- could make sense to return sum(ring perimeter) * uses euclidian 3d/2d length depending on input dimensions. */ PG_FUNCTION_INFO_V1(LWGEOM_length_linestring); Datum LWGEOM_length_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double dist = lwgeom_length(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(dist); } /** * @brief find the "perimeter of a geometry" * perimeter(point) = 0 * perimeter(line) = 0 * perimeter(polygon) = sum of ring perimeters * uses euclidian 3d/2d computation depending on input dimension. */ PG_FUNCTION_INFO_V1(LWGEOM_perimeter_poly); Datum LWGEOM_perimeter_poly(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double perimeter = 0.0; perimeter = lwgeom_perimeter(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(perimeter); } /** * @brief find the "perimeter of a geometry" * perimeter(point) = 0 * perimeter(line) = 0 * perimeter(polygon) = sum of ring perimeters * uses euclidian 2d computation even if input is 3d */ PG_FUNCTION_INFO_V1(LWGEOM_perimeter2d_poly); Datum LWGEOM_perimeter2d_poly(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double perimeter = 0.0; perimeter = lwgeom_perimeter_2d(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(perimeter); } /* transform input geometry to 2d if not 2d already */ PG_FUNCTION_INFO_V1(LWGEOM_force_2d); Datum LWGEOM_force_2d(PG_FUNCTION_ARGS) { GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; /* already 2d */ if ( gserialized_ndims(pg_geom_in) == 2 ) PG_RETURN_POINTER(pg_geom_in); lwg_in = lwgeom_from_gserialized(pg_geom_in); lwg_out = lwgeom_force_2d(lwg_in); pg_geom_out = geometry_serialize(lwg_out); lwgeom_free(lwg_out); lwgeom_free(lwg_in); PG_FREE_IF_COPY(pg_geom_in, 0); PG_RETURN_POINTER(pg_geom_out); } /* transform input geometry to 3dz if not 3dz already */ PG_FUNCTION_INFO_V1(LWGEOM_force_3dz); Datum LWGEOM_force_3dz(PG_FUNCTION_ARGS) { GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; /* already 3d */ if ( gserialized_ndims(pg_geom_in) == 3 && gserialized_has_z(pg_geom_in) ) PG_RETURN_POINTER(pg_geom_in); lwg_in = lwgeom_from_gserialized(pg_geom_in); lwg_out = lwgeom_force_3dz(lwg_in); pg_geom_out = geometry_serialize(lwg_out); lwgeom_free(lwg_out); lwgeom_free(lwg_in); PG_FREE_IF_COPY(pg_geom_in, 0); PG_RETURN_POINTER(pg_geom_out); } /** transform input geometry to 3dm if not 3dm already */ PG_FUNCTION_INFO_V1(LWGEOM_force_3dm); Datum LWGEOM_force_3dm(PG_FUNCTION_ARGS) { GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; /* already 3d */ if ( gserialized_ndims(pg_geom_in) == 3 && gserialized_has_m(pg_geom_in) ) PG_RETURN_POINTER(pg_geom_in); lwg_in = lwgeom_from_gserialized(pg_geom_in); lwg_out = lwgeom_force_3dm(lwg_in); pg_geom_out = geometry_serialize(lwg_out); lwgeom_free(lwg_out); lwgeom_free(lwg_in); PG_FREE_IF_COPY(pg_geom_in, 0); PG_RETURN_POINTER(pg_geom_out); } /* transform input geometry to 4d if not 4d already */ PG_FUNCTION_INFO_V1(LWGEOM_force_4d); Datum LWGEOM_force_4d(PG_FUNCTION_ARGS) { GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; /* already 4d */ if ( gserialized_ndims(pg_geom_in) == 4 ) PG_RETURN_POINTER(pg_geom_in); lwg_in = lwgeom_from_gserialized(pg_geom_in); lwg_out = lwgeom_force_4d(lwg_in); pg_geom_out = geometry_serialize(lwg_out); lwgeom_free(lwg_out); lwgeom_free(lwg_in); PG_FREE_IF_COPY(pg_geom_in, 0); PG_RETURN_POINTER(pg_geom_out); } /** transform input geometry to a collection type */ PG_FUNCTION_INFO_V1(LWGEOM_force_collection); Datum LWGEOM_force_collection(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; LWGEOM **lwgeoms; LWGEOM *lwgeom; int srid; GBOX *bbox; POSTGIS_DEBUG(2, "LWGEOM_force_collection called"); /* * This funx is a no-op only if a bbox cache is already present * in input. If bbox cache is not there we'll need to handle * automatic bbox addition FOR_COMPLEX_GEOMS. */ if ( gserialized_get_type(geom) == COLLECTIONTYPE && gserialized_has_bbox(geom) ) { PG_RETURN_POINTER(geom); } /* deserialize into lwgeoms[0] */ lwgeom = lwgeom_from_gserialized(geom); /* alread a multi*, just make it a collection */ if ( lwgeom_is_collection(lwgeom) ) { lwgeom->type = COLLECTIONTYPE; } /* single geom, make it a collection */ else { srid = lwgeom->srid; /* We transfer bbox ownership from input to output */ bbox = lwgeom->bbox; lwgeom->srid = SRID_UNKNOWN; lwgeom->bbox = NULL; lwgeoms = palloc(sizeof(LWGEOM*)); lwgeoms[0] = lwgeom; lwgeom = (LWGEOM *)lwcollection_construct(COLLECTIONTYPE, srid, bbox, 1, lwgeoms); } result = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /** transform input geometry to a multi* type */ PG_FUNCTION_INFO_V1(LWGEOM_force_multi); Datum LWGEOM_force_multi(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; LWGEOM *lwgeom; LWGEOM *ogeom; POSTGIS_DEBUG(2, "LWGEOM_force_multi called"); /* ** This funx is a no-op only if a bbox cache is already present ** in input. If bbox cache is not there we'll need to handle ** automatic bbox addition FOR_COMPLEX_GEOMS. */ if ( gserialized_has_bbox(geom) ) { switch (gserialized_get_type(geom)) { case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case COLLECTIONTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case TINTYPE: PG_RETURN_POINTER(geom); default: break; } } /* deserialize into lwgeoms[0] */ lwgeom = lwgeom_from_gserialized(geom); ogeom = lwgeom_as_multi(lwgeom); result = geometry_serialize(ogeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /** transform input geometry to a SFS 1.1 geometry type compliant */ PG_FUNCTION_INFO_V1(LWGEOM_force_sfs); Datum LWGEOM_force_sfs(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *result; LWGEOM *lwgeom; LWGEOM *ogeom; text * ver; int version = 110; /* default version is SFS 1.1 */ POSTGIS_DEBUG(2, "LWGEOM_force_sfs called"); /* If user specified version, respect it */ if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) ) { ver = PG_GETARG_TEXT_P(1); if ( ! strncmp(VARDATA(ver), "1.2", 3)) { version = 120; } } lwgeom = lwgeom_from_gserialized(geom); ogeom = lwgeom_force_sfs(lwgeom, version); result = geometry_serialize(ogeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /** Returns the point in first input geometry that is closest to the second input geometry in 2d */ PG_FUNCTION_INFO_V1(LWGEOM_closestpoint); Datum LWGEOM_closestpoint(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *point; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } point = lw_dist2d_distancepoint(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MIN); if (lwgeom_is_empty(point)) PG_RETURN_NULL(); result = geometry_serialize(point); lwgeom_free(point); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** Returns the shortest 2d line between two geometries */ PG_FUNCTION_INFO_V1(LWGEOM_shortestline2d); Datum LWGEOM_shortestline2d(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } theline = lw_dist2d_distanceline(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MIN); if (lwgeom_is_empty(theline)) PG_RETURN_NULL(); result = geometry_serialize(theline); lwgeom_free(theline); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** Returns the longest 2d line between two geometries */ PG_FUNCTION_INFO_V1(LWGEOM_longestline2d); Datum LWGEOM_longestline2d(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } theline = lw_dist2d_distanceline(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MAX); if (lwgeom_is_empty(theline)) PG_RETURN_NULL(); result = geometry_serialize(theline); lwgeom_free(theline); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** Minimum 2d distance between objects in geom1 and geom2. */ PG_FUNCTION_INFO_V1(LWGEOM_mindistance2d); Datum LWGEOM_mindistance2d(PG_FUNCTION_ARGS) { double mindist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } mindist = lwgeom_mindistance2d(lwgeom1, lwgeom2); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*if called with empty geometries the ingoing mindistance is untouched, and makes us return NULL*/ if (mindist<MAXFLOAT) PG_RETURN_FLOAT8(mindist); PG_RETURN_NULL(); } /** Returns boolean describing if mininimum 2d distance between objects in geom1 and geom2 is shorter than tolerance */ PG_FUNCTION_INFO_V1(LWGEOM_dwithin); Datum LWGEOM_dwithin(PG_FUNCTION_ARGS) { double mindist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if ( tolerance < 0 ) { elog(ERROR,"Tolerance cannot be less than zero\n"); PG_RETURN_NULL(); } if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } mindist = lwgeom_mindistance2d_tolerance(lwgeom1,lwgeom2,tolerance); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*empty geometries cases should be right handled since return from underlying functions should be MAXFLOAT which causes false as answer*/ PG_RETURN_BOOL(tolerance >= mindist); } /** Returns boolean describing if maximum 2d distance between objects in geom1 and geom2 is shorter than tolerance */ PG_FUNCTION_INFO_V1(LWGEOM_dfullywithin); Datum LWGEOM_dfullywithin(PG_FUNCTION_ARGS) { double maxdist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if ( tolerance < 0 ) { elog(ERROR,"Tolerance cannot be less than zero\n"); PG_RETURN_NULL(); } if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } maxdist = lwgeom_maxdistance2d_tolerance(lwgeom1, lwgeom2, tolerance); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*If function is feed with empty geometries we should return false*/ if (maxdist>-1) PG_RETURN_BOOL(tolerance >= maxdist); PG_RETURN_BOOL(LW_FALSE); } /** Maximum 2d distance between objects in geom1 and geom2. */ PG_FUNCTION_INFO_V1(LWGEOM_maxdistance2d_linestring); Datum LWGEOM_maxdistance2d_linestring(PG_FUNCTION_ARGS) { double maxdist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } maxdist = lwgeom_maxdistance2d(lwgeom1, lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*if called with empty geometries the ingoing mindistance is untouched, and makes us return NULL*/ if (maxdist>-1) PG_RETURN_FLOAT8(maxdist); PG_RETURN_NULL(); } /** Returns the point in first input geometry that is closest to the second input geometry in 3D */ PG_FUNCTION_INFO_V1(LWGEOM_closestpoint3d); Datum LWGEOM_closestpoint3d(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *point; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } point = lw_dist3d_distancepoint(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MIN); if (lwgeom_is_empty(point)) PG_RETURN_NULL(); result = geometry_serialize(point); lwgeom_free(point); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** Returns the shortest line between two geometries in 3D */ PG_FUNCTION_INFO_V1(LWGEOM_shortestline3d); Datum LWGEOM_shortestline3d(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } theline = lw_dist3d_distanceline(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MIN); if (lwgeom_is_empty(theline)) PG_RETURN_NULL(); result = geometry_serialize(theline); lwgeom_free(theline); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** Returns the longest line between two geometries in 3D */ PG_FUNCTION_INFO_V1(LWGEOM_longestline3d); Datum LWGEOM_longestline3d(PG_FUNCTION_ARGS) { GSERIALIZED *result; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } theline = lw_dist3d_distanceline(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MAX); if (lwgeom_is_empty(theline)) PG_RETURN_NULL(); result = geometry_serialize(theline); lwgeom_free(theline); lwgeom_free(lwgeom1); lwgeom_free(lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); PG_RETURN_POINTER(result); } /** Minimum 2d distance between objects in geom1 and geom2 in 3D */ PG_FUNCTION_INFO_V1(LWGEOM_mindistance3d); Datum LWGEOM_mindistance3d(PG_FUNCTION_ARGS) { double mindist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } mindist = lwgeom_mindistance3d(lwgeom1, lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*if called with empty geometries the ingoing mindistance is untouched, and makes us return NULL*/ if (mindist<MAXFLOAT) PG_RETURN_FLOAT8(mindist); PG_RETURN_NULL(); } /** Returns boolean describing if mininimum 3d distance between objects in geom1 and geom2 is shorter than tolerance */ PG_FUNCTION_INFO_V1(LWGEOM_dwithin3d); Datum LWGEOM_dwithin3d(PG_FUNCTION_ARGS) { double mindist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if ( tolerance < 0 ) { elog(ERROR,"Tolerance cannot be less than zero\n"); PG_RETURN_NULL(); } if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } mindist = lwgeom_mindistance3d_tolerance(lwgeom1,lwgeom2,tolerance); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*empty geometries cases should be right handled since return from underlying functions should be MAXFLOAT which causes false as answer*/ PG_RETURN_BOOL(tolerance >= mindist); } /** Returns boolean describing if maximum 3d distance between objects in geom1 and geom2 is shorter than tolerance */ PG_FUNCTION_INFO_V1(LWGEOM_dfullywithin3d); Datum LWGEOM_dfullywithin3d(PG_FUNCTION_ARGS) { double maxdist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if ( tolerance < 0 ) { elog(ERROR,"Tolerance cannot be less than zero\n"); PG_RETURN_NULL(); } if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } maxdist = lwgeom_maxdistance3d_tolerance(lwgeom1, lwgeom2, tolerance); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*If function is feed with empty geometries we should return false*/ if (maxdist>-1) PG_RETURN_BOOL(tolerance >= maxdist); PG_RETURN_BOOL(LW_FALSE); } /** Maximum 3d distance between objects in geom1 and geom2. */ PG_FUNCTION_INFO_V1(LWGEOM_maxdistance3d); Datum LWGEOM_maxdistance3d(PG_FUNCTION_ARGS) { double maxdist; GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); if (lwgeom1->srid != lwgeom2->srid) { elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n"); PG_RETURN_NULL(); } maxdist = lwgeom_maxdistance3d(lwgeom1, lwgeom2); PG_FREE_IF_COPY(geom1, 0); PG_FREE_IF_COPY(geom2, 1); /*if called with empty geometries the ingoing mindistance is untouched, and makes us return NULL*/ if (maxdist>-1) PG_RETURN_FLOAT8(maxdist); PG_RETURN_NULL(); } PG_FUNCTION_INFO_V1(LWGEOM_longitude_shift); Datum LWGEOM_longitude_shift(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; GSERIALIZED *ret; POSTGIS_DEBUG(2, "LWGEOM_longitude_shift called."); geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(geom); /* Drop bbox, will be recomputed */ lwgeom_drop_bbox(lwgeom); /* Modify geometry */ lwgeom_longitude_shift(lwgeom); /* Construct GSERIALIZED */ ret = geometry_serialize(lwgeom); /* Release deserialized geometry */ lwgeom_free(lwgeom); /* Release detoasted geometry */ pfree(geom); PG_RETURN_POINTER(ret); } PG_FUNCTION_INFO_V1(LWGEOM_inside_circle_point); Datum LWGEOM_inside_circle_point(PG_FUNCTION_ARGS) { GSERIALIZED *geom; double cx = PG_GETARG_FLOAT8(1); double cy = PG_GETARG_FLOAT8(2); double rr = PG_GETARG_FLOAT8(3); LWPOINT *lwpoint; LWGEOM *lwgeom; int inside; geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(geom); lwpoint = lwgeom_as_lwpoint(lwgeom); if ( lwpoint == NULL || lwgeom_is_empty(lwgeom) ) { PG_FREE_IF_COPY(geom, 0); PG_RETURN_NULL(); /* not a point */ } inside = lwpoint_inside_circle(lwpoint, cx, cy, rr); lwpoint_free(lwpoint); PG_FREE_IF_COPY(geom, 0); PG_RETURN_BOOL(inside); } /** * @brief collect( geom, geom ) returns a geometry which contains * all the sub_objects from both of the argument geometries * @return geometry is the simplest possible, based on the types * of the collected objects * ie. if all are of either X or multiX, then a multiX is returned. */ PG_FUNCTION_INFO_V1(LWGEOM_collect); Datum LWGEOM_collect(PG_FUNCTION_ARGS) { GSERIALIZED *gser1, *gser2, *result; LWGEOM *lwgeoms[2], *outlwg; uint32 type1, type2; uint8_t outtype; int srid; POSTGIS_DEBUG(2, "LWGEOM_collect called."); /* return null if both geoms are null */ if ( PG_ARGISNULL(0) && PG_ARGISNULL(1) ) PG_RETURN_NULL(); /* Return the second geom if the first geom is null */ if (PG_ARGISNULL(0)) PG_RETURN_DATUM(PG_GETARG_DATUM(1)); /* Return the first geom if the second geom is null */ if (PG_ARGISNULL(1)) PG_RETURN_DATUM(PG_GETARG_DATUM(0)); gser1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); gser2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); POSTGIS_DEBUGF(3, "LWGEOM_collect(%s, %s): call", lwtype_name(gserialized_get_type(gser1)), lwtype_name(gserialized_get_type(gser2))); if ( FLAGS_GET_ZM(gser1->flags) != FLAGS_GET_ZM(gser2->flags) ) { elog(ERROR,"Cannot ST_Collect geometries with differing dimensionality."); PG_RETURN_NULL(); } srid = gserialized_get_srid(gser1); error_if_srid_mismatch(srid, gserialized_get_srid(gser2)); lwgeoms[0] = lwgeom_from_gserialized(gser1); lwgeoms[1] = lwgeom_from_gserialized(gser2); type1 = lwgeoms[0]->type; type2 = lwgeoms[1]->type; if ( (type1 == type2) && (!lwgeom_is_collection(lwgeoms[0])) ) outtype = lwtype_get_collectiontype(type1); else outtype = COLLECTIONTYPE; POSTGIS_DEBUGF(3, " outtype = %d", outtype); /* Drop input geometries bbox and SRID */ lwgeom_drop_bbox(lwgeoms[0]); lwgeom_drop_srid(lwgeoms[0]); lwgeom_drop_bbox(lwgeoms[1]); lwgeom_drop_srid(lwgeoms[1]); outlwg = (LWGEOM *)lwcollection_construct(outtype, srid, NULL, 2, lwgeoms); result = geometry_serialize(outlwg); lwgeom_free(lwgeoms[0]); lwgeom_free(lwgeoms[1]); PG_FREE_IF_COPY(gser1, 0); PG_FREE_IF_COPY(gser2, 1); PG_RETURN_POINTER(result); } /** * @brief collect_garray ( GEOMETRY[] ) returns a geometry which contains * all the sub_objects from all of the geometries in given array. * * @return geometry is the simplest possible, based on the types * of the collected objects * ie. if all are of either X or multiX, then a multiX is returned * bboxonly types are treated as null geometries (no sub_objects) */ PG_FUNCTION_INFO_V1(LWGEOM_collect_garray); Datum LWGEOM_collect_garray(PG_FUNCTION_ARGS) { Datum datum; ArrayType *array; int nelems; /*GSERIALIZED **geoms; */ GSERIALIZED *result=NULL; LWGEOM **lwgeoms, *outlwg; uint32 outtype; int i, count; int srid=SRID_UNKNOWN; size_t offset; GBOX *box=NULL; bits8 *bitmap; int bitmask; POSTGIS_DEBUG(2, "LWGEOM_collect_garray called."); /* Get input datum */ datum = PG_GETARG_DATUM(0); /* Return null on null input */ if ( (Pointer *)datum == NULL ) { elog(NOTICE, "NULL input"); PG_RETURN_NULL(); } /* Get actual ArrayType */ array = DatumGetArrayTypeP(datum); POSTGIS_DEBUGF(3, " array is %d-bytes in size, %ld w/out header", ARR_SIZE(array), ARR_SIZE(array)-ARR_OVERHEAD_NONULLS(ARR_NDIM(array))); /* Get number of geometries in array */ nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array)); POSTGIS_DEBUGF(3, "LWGEOM_collect_garray: array has %d elements", nelems); /* Return null on 0-elements input array */ if ( nelems == 0 ) { elog(NOTICE, "0 elements input array"); PG_RETURN_NULL(); } /* * Deserialize all geometries in array into the lwgeoms pointers * array. Check input types to form output type. */ lwgeoms = palloc(sizeof(LWGEOM *)*nelems); count = 0; outtype = 0; offset = 0; bitmap = ARR_NULLBITMAP(array); bitmask = 1; for (i=0; i<nelems; i++) { /* Don't do anything for NULL values */ if ((bitmap && (*bitmap & bitmask) != 0) || !bitmap) { GSERIALIZED *geom = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); uint8_t intype = gserialized_get_type(geom); offset += INTALIGN(VARSIZE(geom)); lwgeoms[count] = lwgeom_from_gserialized(geom); POSTGIS_DEBUGF(3, "LWGEOM_collect_garray: geom %d deserialized", i); if ( ! count ) { /* Get first geometry SRID */ srid = lwgeoms[count]->srid; /* COMPUTE_BBOX WHEN_SIMPLE */ if ( lwgeoms[count]->bbox ) { box = gbox_copy(lwgeoms[count]->bbox); } } else { /* Check SRID homogeneity */ if ( lwgeoms[count]->srid != srid ) { elog(ERROR, "Operation on mixed SRID geometries"); PG_RETURN_NULL(); } /* COMPUTE_BBOX WHEN_SIMPLE */ if ( box ) { if ( lwgeoms[count]->bbox ) { box->xmin = Min(box->xmin, lwgeoms[count]->bbox->xmin); box->ymin = Min(box->ymin, lwgeoms[count]->bbox->ymin); box->xmax = Max(box->xmax, lwgeoms[count]->bbox->xmax); box->ymax = Max(box->ymax, lwgeoms[count]->bbox->ymax); } else { pfree(box); box = NULL; } } } lwgeom_drop_srid(lwgeoms[count]); lwgeom_drop_bbox(lwgeoms[count]); /* Output type not initialized */ if ( ! outtype ) { /* Input is single, make multi */ if ( ! lwtype_is_collection(intype) ) outtype = lwtype_get_collectiontype(intype); /* Input is multi, make collection */ else outtype = COLLECTIONTYPE; } /* Input type not compatible with output */ /* make output type a collection */ else if ( outtype != COLLECTIONTYPE && intype != outtype-3 ) { outtype = COLLECTIONTYPE; } count++; } /* Advance NULL bitmap */ if (bitmap) { bitmask <<= 1; if (bitmask == 0x100) { bitmap++; bitmask = 1; } } } POSTGIS_DEBUGF(3, "LWGEOM_collect_garray: outtype = %d", outtype); /* If we have been passed a complete set of NULLs then return NULL */ if (!outtype) { PG_RETURN_NULL(); } else { outlwg = (LWGEOM *)lwcollection_construct( outtype, srid, box, count, lwgeoms); result = geometry_serialize(outlwg); PG_RETURN_POINTER(result); } } /** * LineFromMultiPoint ( GEOMETRY ) returns a LINE formed by * all the points in the in given multipoint. */ PG_FUNCTION_INFO_V1(LWGEOM_line_from_mpoint); Datum LWGEOM_line_from_mpoint(PG_FUNCTION_ARGS) { GSERIALIZED *ingeom, *result; LWLINE *lwline; LWMPOINT *mpoint; POSTGIS_DEBUG(2, "LWGEOM_line_from_mpoint called"); /* Get input GSERIALIZED and deserialize it */ ingeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(ingeom) != MULTIPOINTTYPE ) { elog(ERROR, "makeline: input must be a multipoint"); PG_RETURN_NULL(); /* input is not a multipoint */ } mpoint = lwgeom_as_lwmpoint(lwgeom_from_gserialized(ingeom)); lwline = lwline_from_lwmpoint(mpoint->srid, mpoint); if ( ! lwline ) { PG_FREE_IF_COPY(ingeom, 0); elog(ERROR, "makeline: lwline_from_lwmpoint returned NULL"); PG_RETURN_NULL(); } result = geometry_serialize(lwline_as_lwgeom(lwline)); PG_FREE_IF_COPY(ingeom, 0); lwline_free(lwline); PG_RETURN_POINTER(result); } /** * @brief makeline_garray ( GEOMETRY[] ) returns a LINE formed by * all the point geometries in given array. * array elements that are NOT points are discarded.. */ PG_FUNCTION_INFO_V1(LWGEOM_makeline_garray); Datum LWGEOM_makeline_garray(PG_FUNCTION_ARGS) { Datum datum; ArrayType *array; int nelems; GSERIALIZED *result=NULL; LWGEOM **geoms; LWGEOM *outlwg; uint32 ngeoms; int i; size_t offset; int srid=SRID_UNKNOWN; bits8 *bitmap; int bitmask; POSTGIS_DEBUG(2, "LWGEOM_makeline_garray called."); /* Get input datum */ datum = PG_GETARG_DATUM(0); /* Return null on null input */ if ( (Pointer *)datum == NULL ) { elog(NOTICE, "NULL input"); PG_RETURN_NULL(); } /* Get actual ArrayType */ array = DatumGetArrayTypeP(datum); POSTGIS_DEBUG(3, "LWGEOM_makeline_garray: array detoasted"); /* Get number of geometries in array */ nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array)); POSTGIS_DEBUGF(3, "LWGEOM_makeline_garray: array has %d elements", nelems); /* Return null on 0-elements input array */ if ( nelems == 0 ) { elog(NOTICE, "0 elements input array"); PG_RETURN_NULL(); } /* * Deserialize all point geometries in array into the * geoms pointers array. * Count actual number of points. */ /* possibly more then required */ geoms = palloc(sizeof(LWGEOM *)*nelems); ngeoms = 0; offset = 0; bitmap = ARR_NULLBITMAP(array); bitmask = 1; for (i=0; i<nelems; i++) { /* Don't do anything for NULL values */ if ((bitmap && (*bitmap & bitmask) != 0) || !bitmap) { GSERIALIZED *geom = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); offset += INTALIGN(VARSIZE(geom)); if ( gserialized_get_type(geom) != POINTTYPE && gserialized_get_type(geom) != LINETYPE ) continue; geoms[ngeoms++] = lwgeom_from_gserialized(geom); /* Check SRID homogeneity */ if ( ngeoms == 1 ) { /* Get first geometry SRID */ srid = geoms[ngeoms-1]->srid; /* TODO: also get ZMflags */ } else { if ( geoms[ngeoms-1]->srid != srid ) { elog(ERROR, "Operation on mixed SRID geometries"); PG_RETURN_NULL(); } } POSTGIS_DEBUGF(3, "LWGEOM_makeline_garray: element %d deserialized", i); } /* Advance NULL bitmap */ if (bitmap) { bitmask <<= 1; if (bitmask == 0x100) { bitmap++; bitmask = 1; } } } /* Return null on 0-points input array */ if ( ngeoms == 0 ) { /* TODO: should we return LINESTRING EMPTY here ? */ elog(NOTICE, "No points or linestrings in input array"); PG_RETURN_NULL(); } POSTGIS_DEBUGF(3, "LWGEOM_makeline_garray: elements: %d", ngeoms); outlwg = (LWGEOM *)lwline_from_lwgeom_array(srid, ngeoms, geoms); result = geometry_serialize(outlwg); PG_RETURN_POINTER(result); } /** * makeline ( GEOMETRY, GEOMETRY ) returns a LINESTRIN segment * formed by the given point geometries. */ PG_FUNCTION_INFO_V1(LWGEOM_makeline); Datum LWGEOM_makeline(PG_FUNCTION_ARGS) { GSERIALIZED *pglwg1, *pglwg2; GSERIALIZED *result=NULL; LWGEOM *lwgeoms[2]; LWLINE *outline; POSTGIS_DEBUG(2, "LWGEOM_makeline called."); /* Get input datum */ pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); if ( (gserialized_get_type(pglwg1) != POINTTYPE && gserialized_get_type(pglwg1) != LINETYPE) || (gserialized_get_type(pglwg2) != POINTTYPE && gserialized_get_type(pglwg2) != LINETYPE) ) { elog(ERROR, "Input geometries must be points or lines"); PG_RETURN_NULL(); } error_if_srid_mismatch(gserialized_get_srid(pglwg1), gserialized_get_srid(pglwg2)); lwgeoms[0] = lwgeom_from_gserialized(pglwg1); lwgeoms[1] = lwgeom_from_gserialized(pglwg2); outline = lwline_from_lwgeom_array(lwgeoms[0]->srid, 2, lwgeoms); result = geometry_serialize((LWGEOM *)outline); PG_FREE_IF_COPY(pglwg1, 0); PG_FREE_IF_COPY(pglwg2, 1); lwgeom_free(lwgeoms[0]); lwgeom_free(lwgeoms[1]); PG_RETURN_POINTER(result); } /** * makepoly( GEOMETRY, GEOMETRY[] ) returns a POLYGON * formed by the given shell and holes geometries. */ PG_FUNCTION_INFO_V1(LWGEOM_makepoly); Datum LWGEOM_makepoly(PG_FUNCTION_ARGS) { GSERIALIZED *pglwg1; ArrayType *array=NULL; GSERIALIZED *result=NULL; const LWLINE *shell=NULL; const LWLINE **holes=NULL; LWPOLY *outpoly; uint32 nholes=0; uint32 i; size_t offset=0; POSTGIS_DEBUG(2, "LWGEOM_makepoly called."); /* Get input shell */ pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_get_type(pglwg1) != LINETYPE ) { lwerror("Shell is not a line"); } shell = lwgeom_as_lwline(lwgeom_from_gserialized(pglwg1)); /* Get input holes if any */ if ( PG_NARGS() > 1 ) { array = PG_GETARG_ARRAYTYPE_P(1); nholes = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array)); holes = lwalloc(sizeof(LWLINE *)*nholes); for (i=0; i<nholes; i++) { GSERIALIZED *g = (GSERIALIZED *)(ARR_DATA_PTR(array)+offset); LWLINE *hole; offset += INTALIGN(VARSIZE(g)); if ( gserialized_get_type(g) != LINETYPE ) { lwerror("Hole %d is not a line", i); } hole = lwgeom_as_lwline(lwgeom_from_gserialized(g)); holes[i] = hole; } } outpoly = lwpoly_from_lwlines(shell, nholes, holes); POSTGIS_DEBUGF(3, "%s", lwgeom_summary((LWGEOM*)outpoly, 0)); result = geometry_serialize((LWGEOM *)outpoly); lwline_free((LWLINE*)shell); PG_FREE_IF_COPY(pglwg1, 0); for (i=0; i<nholes; i++) { lwline_free((LWLINE*)holes[i]); } PG_RETURN_POINTER(result); } /** * makes a polygon of the expanded features bvol - 1st point = LL 3rd=UR * 2d only. (3d might be worth adding). * create new geometry of type polygon, 1 ring, 5 points */ PG_FUNCTION_INFO_V1(LWGEOM_expand); Datum LWGEOM_expand(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double d = PG_GETARG_FLOAT8(1); POINT4D pt; POINTARRAY *pa; POINTARRAY **ppa; LWPOLY *poly; GSERIALIZED *result; GBOX gbox; POSTGIS_DEBUG(2, "LWGEOM_expand called."); /* Can't expand an empty */ if ( lwgeom_is_empty(lwgeom) ) { lwgeom_free(lwgeom); PG_RETURN_POINTER(geom); } /* Can't expand something with no gbox! */ if ( LW_FAILURE == lwgeom_calculate_gbox(lwgeom, &gbox) ) { lwgeom_free(lwgeom); PG_RETURN_POINTER(geom); } gbox_expand(&gbox, d); pa = ptarray_construct_empty(lwgeom_has_z(lwgeom), lwgeom_has_m(lwgeom), 5); /* Assign coordinates to POINT2D array */ pt.x = gbox.xmin; pt.y = gbox.ymin; pt.z = gbox.zmin; pt.m = gbox.mmin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = gbox.xmin; pt.y = gbox.ymax; pt.z = gbox.zmin; pt.m = gbox.mmin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = gbox.xmax; pt.y = gbox.ymax; pt.z = gbox.zmax; pt.m = gbox.mmax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = gbox.xmax; pt.y = gbox.ymin; pt.z = gbox.zmax; pt.m = gbox.mmax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = gbox.xmin; pt.y = gbox.ymin; pt.z = gbox.zmin; pt.m = gbox.mmin; ptarray_append_point(pa, &pt, LW_TRUE); /* Construct point array */ ppa = lwalloc(sizeof(POINTARRAY*)); ppa[0] = pa; /* Construct polygon */ poly = lwpoly_construct(lwgeom->srid, NULL, 1, ppa); lwgeom_add_bbox(lwpoly_as_lwgeom(poly)); /* Construct GSERIALIZED */ result = geometry_serialize(lwpoly_as_lwgeom(poly)); lwgeom_free(lwpoly_as_lwgeom(poly)); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } /** Convert geometry to BOX (internal postgres type) */ PG_FUNCTION_INFO_V1(LWGEOM_to_BOX); Datum LWGEOM_to_BOX(PG_FUNCTION_ARGS) { GSERIALIZED *pg_lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(pg_lwgeom); GBOX gbox; int result; BOX *out = NULL; /* Zero out flags */ gbox_init(&gbox); /* Calculate the GBOX of the geometry */ result = lwgeom_calculate_gbox(lwgeom, &gbox); /* Clean up memory */ lwfree(lwgeom); PG_FREE_IF_COPY(pg_lwgeom, 0); /* Null on failure */ if ( ! result ) PG_RETURN_NULL(); out = lwalloc(sizeof(BOX)); out->low.x = gbox.xmin; out->low.y = gbox.ymin; out->high.x = gbox.xmax; out->high.y = gbox.ymax; PG_RETURN_POINTER(out); } /** * makes a polygon of the features bvol - 1st point = LL 3rd=UR * 2d only. (3d might be worth adding). * create new geometry of type polygon, 1 ring, 5 points */ PG_FUNCTION_INFO_V1(LWGEOM_envelope); Datum LWGEOM_envelope(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int srid = lwgeom->srid; POINT4D pt; GBOX box; POINTARRAY *pa; GSERIALIZED *result; if ( lwgeom_is_empty(lwgeom) ) { /* must be the EMPTY geometry */ PG_RETURN_POINTER(geom); } if ( lwgeom_calculate_gbox(lwgeom, &box) == LW_FAILURE ) { /* must be the EMPTY geometry */ PG_RETURN_POINTER(geom); } /* * Alter envelope type so that a valid geometry is always * returned depending upon the size of the geometry. The * code makes the following assumptions: * - If the bounding box is a single point then return a * POINT geometry * - If the bounding box represents either a horizontal or * vertical line, return a LINESTRING geometry * - Otherwise return a POLYGON */ if ( (box.xmin == box.xmax) && (box.ymin == box.ymax) ) { /* Construct and serialize point */ LWPOINT *point = lwpoint_make2d(srid, box.xmin, box.ymin); result = geometry_serialize(lwpoint_as_lwgeom(point)); lwpoint_free(point); } else if ( (box.xmin == box.xmax) || (box.ymin == box.ymax) ) { LWLINE *line; /* Construct point array */ pa = ptarray_construct_empty(0, 0, 2); /* Assign coordinates to POINT2D array */ pt.x = box.xmin; pt.y = box.ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box.xmax; pt.y = box.ymax; ptarray_append_point(pa, &pt, LW_TRUE); /* Construct and serialize linestring */ line = lwline_construct(srid, NULL, pa); result = geometry_serialize(lwline_as_lwgeom(line)); lwline_free(line); } else { LWPOLY *poly; POINTARRAY **ppa = lwalloc(sizeof(POINTARRAY*)); pa = ptarray_construct_empty(0, 0, 5); ppa[0] = pa; /* Assign coordinates to POINT2D array */ pt.x = box.xmin; pt.y = box.ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box.xmin; pt.y = box.ymax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box.xmax; pt.y = box.ymax; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box.xmax; pt.y = box.ymin; ptarray_append_point(pa, &pt, LW_TRUE); pt.x = box.xmin; pt.y = box.ymin; ptarray_append_point(pa, &pt, LW_TRUE); /* Construct polygon */ poly = lwpoly_construct(srid, NULL, 1, ppa); result = geometry_serialize(lwpoly_as_lwgeom(poly)); lwpoly_free(poly); } PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(LWGEOM_isempty); Datum LWGEOM_isempty(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); bool empty = lwgeom_is_empty(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_BOOL(empty); } /** * @brief Returns a modified geometry so that no segment is * longer then the given distance (computed using 2d). * Every input point is kept. * Z and M values for added points (if needed) are set to 0. */ PG_FUNCTION_INFO_V1(LWGEOM_segmentize2d); Datum LWGEOM_segmentize2d(PG_FUNCTION_ARGS) { GSERIALIZED *outgeom, *ingeom; double dist; LWGEOM *inlwgeom, *outlwgeom; int type; POSTGIS_DEBUG(2, "LWGEOM_segmentize2d called"); ingeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); dist = PG_GETARG_FLOAT8(1); type = gserialized_get_type(ingeom); /* Avoid types we cannot segmentize. */ if ( (type == POINTTYPE) || (type == MULTIPOINTTYPE) || (type == TRIANGLETYPE) || (type == TINTYPE) || (type == POLYHEDRALSURFACETYPE) ) { PG_RETURN_POINTER(ingeom); } if ( dist <= 0 ) { /* Protect from knowingly infinite loops, see #1799 */ /* Note that we'll end out of memory anyway for other small distances */ elog(ERROR, "ST_Segmentize: invalid max_distance %g (must be >= 0)", dist); PG_RETURN_NULL(); } inlwgeom = lwgeom_from_gserialized(ingeom); outlwgeom = lwgeom_segmentize2d(inlwgeom, dist); /* Copy input bounding box if any */ if ( inlwgeom->bbox ) outlwgeom->bbox = gbox_copy(inlwgeom->bbox); outgeom = geometry_serialize(outlwgeom); //lwgeom_free(outlwgeom); /* TODO fix lwgeom_clone / ptarray_clone_deep for consistent semantics */ lwgeom_free(inlwgeom); PG_FREE_IF_COPY(ingeom, 0); PG_RETURN_POINTER(outgeom); } /** Reverse vertex order of geometry */ PG_FUNCTION_INFO_V1(LWGEOM_reverse); Datum LWGEOM_reverse(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; POSTGIS_DEBUG(2, "LWGEOM_reverse called"); geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(geom); lwgeom_reverse(lwgeom); geom = geometry_serialize(lwgeom); PG_RETURN_POINTER(geom); } /** Force polygons of the collection to obey Right-Hand-Rule */ PG_FUNCTION_INFO_V1(LWGEOM_force_clockwise_poly); Datum LWGEOM_force_clockwise_poly(PG_FUNCTION_ARGS) { GSERIALIZED *ingeom, *outgeom; LWGEOM *lwgeom; POSTGIS_DEBUG(2, "LWGEOM_force_clockwise_poly called"); ingeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(ingeom); lwgeom_force_clockwise(lwgeom); outgeom = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(ingeom, 0); PG_RETURN_POINTER(outgeom); } /** Test deserialize/serialize operations */ PG_FUNCTION_INFO_V1(LWGEOM_noop); Datum LWGEOM_noop(PG_FUNCTION_ARGS) { GSERIALIZED *in, *out; LWGEOM *lwgeom; POSTGIS_DEBUG(2, "LWGEOM_noop called"); in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(in); POSTGIS_DEBUGF(3, "Deserialized: %s", lwgeom_summary(lwgeom, 0)); out = geometry_serialize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(in, 0); PG_RETURN_POINTER(out); } /** * @return: * 0==2d * 1==3dm * 2==3dz * 3==4d */ PG_FUNCTION_INFO_V1(LWGEOM_zmflag); Datum LWGEOM_zmflag(PG_FUNCTION_ARGS) { GSERIALIZED *in; int ret = 0; in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( gserialized_has_z(in) ) ret += 2; if ( gserialized_has_m(in) ) ret += 1; PG_FREE_IF_COPY(in, 0); PG_RETURN_INT16(ret); } PG_FUNCTION_INFO_V1(LWGEOM_hasz); Datum LWGEOM_hasz(PG_FUNCTION_ARGS) { GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); PG_RETURN_BOOL(gserialized_has_z(in)); } PG_FUNCTION_INFO_V1(LWGEOM_hasm); Datum LWGEOM_hasm(PG_FUNCTION_ARGS) { GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); PG_RETURN_BOOL(gserialized_has_m(in)); } PG_FUNCTION_INFO_V1(LWGEOM_hasBBOX); Datum LWGEOM_hasBBOX(PG_FUNCTION_ARGS) { GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); char res = gserialized_has_bbox(in); PG_FREE_IF_COPY(in, 0); PG_RETURN_BOOL(res); } /** Return: 2,3 or 4 */ PG_FUNCTION_INFO_V1(LWGEOM_ndims); Datum LWGEOM_ndims(PG_FUNCTION_ARGS) { GSERIALIZED *in; int ret; in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); ret = (gserialized_ndims(in)); PG_FREE_IF_COPY(in, 0); PG_RETURN_INT16(ret); } /** lwgeom_same(lwgeom1, lwgeom2) */ PG_FUNCTION_INFO_V1(LWGEOM_same); Datum LWGEOM_same(PG_FUNCTION_ARGS) { GSERIALIZED *g1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *g2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); LWGEOM *lwg1, *lwg2; bool result; if ( gserialized_get_type(g1) != gserialized_get_type(g2) ) { PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_BOOL(FALSE); /* different types */ } if ( gserialized_get_zm(g1) != gserialized_get_zm(g2) ) { PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_BOOL(FALSE); /* different dimensions */ } /* ok, deserialize. */ lwg1 = lwgeom_from_gserialized(g1); lwg2 = lwgeom_from_gserialized(g2); /* invoke appropriate function */ result = lwgeom_same(lwg1, lwg2); /* Relase memory */ lwgeom_free(lwg1); lwgeom_free(lwg2); PG_FREE_IF_COPY(g1, 0); PG_FREE_IF_COPY(g2, 1); PG_RETURN_BOOL(result); } PG_FUNCTION_INFO_V1(ST_MakeEnvelope); Datum ST_MakeEnvelope(PG_FUNCTION_ARGS) { LWPOLY *poly; GSERIALIZED *result; POINTARRAY **pa; POINT4D p; double x1, y1, x2, y2; int srid = SRID_UNKNOWN; POSTGIS_DEBUG(2, "ST_MakeEnvelope called"); x1 = PG_GETARG_FLOAT8(0); y1 = PG_GETARG_FLOAT8(1); x2 = PG_GETARG_FLOAT8(2); y2 = PG_GETARG_FLOAT8(3); if ( PG_NARGS() > 4 ) { srid = PG_GETARG_INT32(4); } pa = (POINTARRAY**)palloc(sizeof(POINTARRAY**)); pa[0] = ptarray_construct_empty(0, 0, 5); /* 1st point */ p.x = x1; p.y = y1; ptarray_append_point(pa[0], &p, LW_TRUE); /* 2nd point */ p.x = x1; p.y = y2; ptarray_append_point(pa[0], &p, LW_TRUE); /* 3rd point */ p.x = x2; p.y = y2; ptarray_append_point(pa[0], &p, LW_TRUE); /* 4th point */ p.x = x2; p.y = y1; ptarray_append_point(pa[0], &p, LW_TRUE); /* 5th point */ p.x = x1; p.y = y1; ptarray_append_point(pa[0], &p, LW_TRUE); poly = lwpoly_construct(srid, NULL, 1, pa); lwgeom_add_bbox(lwpoly_as_lwgeom(poly)); result = geometry_serialize(lwpoly_as_lwgeom(poly)); lwpoly_free(poly); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(ST_IsCollection); Datum ST_IsCollection(PG_FUNCTION_ARGS) { GSERIALIZED *geom; int type; size_t size; /* Pull only a small amount of the tuple, enough to get the type. */ /* header + srid/flags + bbox? + type number */ size = VARHDRSZ + 8 + 32 + 4; geom = (GSERIALIZED*)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, size); type = gserialized_get_type(geom); PG_RETURN_BOOL(lwtype_is_collection(type)); } PG_FUNCTION_INFO_V1(LWGEOM_makepoint); Datum LWGEOM_makepoint(PG_FUNCTION_ARGS) { double x,y,z,m; LWPOINT *point; GSERIALIZED *result; POSTGIS_DEBUG(2, "LWGEOM_makepoint called"); x = PG_GETARG_FLOAT8(0); y = PG_GETARG_FLOAT8(1); if ( PG_NARGS() == 2 ) point = lwpoint_make2d(SRID_UNKNOWN, x, y); else if ( PG_NARGS() == 3 ) { z = PG_GETARG_FLOAT8(2); point = lwpoint_make3dz(SRID_UNKNOWN, x, y, z); } else if ( PG_NARGS() == 4 ) { z = PG_GETARG_FLOAT8(2); m = PG_GETARG_FLOAT8(3); point = lwpoint_make4d(SRID_UNKNOWN, x, y, z, m); } else { elog(ERROR, "LWGEOM_makepoint: unsupported number of args: %d", PG_NARGS()); PG_RETURN_NULL(); } result = geometry_serialize((LWGEOM *)point); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(LWGEOM_makepoint3dm); Datum LWGEOM_makepoint3dm(PG_FUNCTION_ARGS) { double x,y,m; LWPOINT *point; GSERIALIZED *result; POSTGIS_DEBUG(2, "LWGEOM_makepoint3dm called."); x = PG_GETARG_FLOAT8(0); y = PG_GETARG_FLOAT8(1); m = PG_GETARG_FLOAT8(2); point = lwpoint_make3dm(SRID_UNKNOWN, x, y, m); result = geometry_serialize((LWGEOM *)point); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(LWGEOM_addpoint); Datum LWGEOM_addpoint(PG_FUNCTION_ARGS) { GSERIALIZED *pglwg1, *pglwg2, *result; LWPOINT *point; LWLINE *line, *linecopy; int where = -1; POSTGIS_DEBUG(2, "LWGEOM_addpoint called."); pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); if ( PG_NARGS() > 2 ) { where = PG_GETARG_INT32(2); } if ( gserialized_get_type(pglwg1) != LINETYPE ) { elog(ERROR, "First argument must be a LINESTRING"); PG_RETURN_NULL(); } if ( gserialized_get_type(pglwg2) != POINTTYPE ) { elog(ERROR, "Second argument must be a POINT"); PG_RETURN_NULL(); } line = lwgeom_as_lwline(lwgeom_from_gserialized(pglwg1)); if ( where == -1 ) where = line->points->npoints; else if ( where < 0 || where > line->points->npoints ) { elog(ERROR, "Invalid offset"); PG_RETURN_NULL(); } point = lwgeom_as_lwpoint(lwgeom_from_gserialized(pglwg2)); linecopy = lwgeom_as_lwline(lwgeom_clone_deep(lwline_as_lwgeom(line))); lwline_free(line); if ( lwline_add_lwpoint(linecopy, point, where) == LW_FAILURE ) { elog(ERROR, "Point insert failed"); PG_RETURN_NULL(); } result = geometry_serialize(lwline_as_lwgeom(linecopy)); /* Release memory */ PG_FREE_IF_COPY(pglwg1, 0); PG_FREE_IF_COPY(pglwg2, 1); lwpoint_free(point); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(LWGEOM_removepoint); Datum LWGEOM_removepoint(PG_FUNCTION_ARGS) { GSERIALIZED *pglwg1, *result; LWLINE *line, *outline; uint32 which; POSTGIS_DEBUG(2, "LWGEOM_removepoint called."); pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); which = PG_GETARG_INT32(1); if ( gserialized_get_type(pglwg1) != LINETYPE ) { elog(ERROR, "First argument must be a LINESTRING"); PG_RETURN_NULL(); } line = lwgeom_as_lwline(lwgeom_from_gserialized(pglwg1)); if ( which > line->points->npoints-1 ) { elog(ERROR, "Point index out of range (%d..%d)", 0, line->points->npoints-1); PG_RETURN_NULL(); } if ( line->points->npoints < 3 ) { elog(ERROR, "Can't remove points from a single segment line"); PG_RETURN_NULL(); } outline = lwline_removepoint(line, which); /* Release memory */ lwline_free(line); result = geometry_serialize((LWGEOM *)outline); lwline_free(outline); PG_FREE_IF_COPY(pglwg1, 0); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(LWGEOM_setpoint_linestring); Datum LWGEOM_setpoint_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *pglwg1, *pglwg2, *result; LWGEOM *lwg; LWLINE *line; LWPOINT *lwpoint; POINT4D newpoint; uint32 which; POSTGIS_DEBUG(2, "LWGEOM_setpoint_linestring called."); /* we copy input as we're going to modify it */ pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); which = PG_GETARG_INT32(1); pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(2)); /* Extract a POINT4D from the point */ lwg = lwgeom_from_gserialized(pglwg2); lwpoint = lwgeom_as_lwpoint(lwg); if ( ! lwpoint ) { elog(ERROR, "Third argument must be a POINT"); PG_RETURN_NULL(); } getPoint4d_p(lwpoint->point, 0, &newpoint); lwpoint_free(lwpoint); PG_FREE_IF_COPY(pglwg2, 2); lwg = lwgeom_from_gserialized(pglwg1); line = lwgeom_as_lwline(lwg); if ( ! line ) { elog(ERROR, "First argument must be a LINESTRING"); PG_RETURN_NULL(); } if ( which > line->points->npoints-1 ) { elog(ERROR, "Point index out of range (%d..%d)", 0, line->points->npoints-1); PG_RETURN_NULL(); } /* * This will change pointarray of the serialized pglwg1, */ lwline_setPoint4d(line, which, &newpoint); result = geometry_serialize((LWGEOM *)line); /* Release memory */ lwline_free(line); pfree(pglwg1); /* we forced copy, POINARRAY is released now */ PG_RETURN_POINTER(result); } /* convert LWGEOM to ewkt (in TEXT format) */ PG_FUNCTION_INFO_V1(LWGEOM_asEWKT); Datum LWGEOM_asEWKT(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWGEOM *lwgeom; char *wkt; size_t wkt_size; text *result; POSTGIS_DEBUG(2, "LWGEOM_asEWKT called."); geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwgeom = lwgeom_from_gserialized(geom); /* Write to WKT and free the geometry */ wkt = lwgeom_to_wkt(lwgeom, WKT_EXTENDED, DBL_DIG, &wkt_size); lwgeom_free(lwgeom); /* Write to text and free the WKT */ result = cstring2text(wkt); pfree(wkt); /* Return the text */ PG_FREE_IF_COPY(geom, 0); PG_RETURN_TEXT_P(result); } /** * Compute the azimuth of segment defined by the two * given Point geometries. * @return NULL on exception (same point). * Return radians otherwise. */ PG_FUNCTION_INFO_V1(LWGEOM_azimuth); Datum LWGEOM_azimuth(PG_FUNCTION_ARGS) { GSERIALIZED *geom; LWPOINT *lwpoint; POINT2D p1, p2; double result; int srid; /* Extract first point */ geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom)); if ( ! lwpoint ) { PG_FREE_IF_COPY(geom, 0); lwerror("Argument must be POINT geometries"); PG_RETURN_NULL(); } srid = lwpoint->srid; if ( ! getPoint2d_p(lwpoint->point, 0, &p1) ) { PG_FREE_IF_COPY(geom, 0); lwerror("Error extracting point"); PG_RETURN_NULL(); } lwpoint_free(lwpoint); PG_FREE_IF_COPY(geom, 0); /* Extract second point */ geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom)); if ( ! lwpoint ) { PG_FREE_IF_COPY(geom, 1); lwerror("Argument must be POINT geometries"); PG_RETURN_NULL(); } if ( lwpoint->srid != srid ) { PG_FREE_IF_COPY(geom, 1); lwerror("Operation on mixed SRID geometries"); PG_RETURN_NULL(); } if ( ! getPoint2d_p(lwpoint->point, 0, &p2) ) { PG_FREE_IF_COPY(geom, 1); lwerror("Error extracting point"); PG_RETURN_NULL(); } lwpoint_free(lwpoint); PG_FREE_IF_COPY(geom, 1); /* Standard return value for equality case */ if ( (p1.x == p2.x) && (p1.y == p2.y) ) { PG_RETURN_NULL(); } /* Compute azimuth */ if ( ! azimuth_pt_pt(&p1, &p2, &result) ) { PG_RETURN_NULL(); } PG_RETURN_FLOAT8(result); } /* * optimistic_overlap(Polygon P1, Multipolygon MP2, double dist) * returns true if P1 overlaps MP2 * method: bbox check - * is separation < dist? no - return false (quick) * yes - return distance(P1,MP2) < dist */ PG_FUNCTION_INFO_V1(optimistic_overlap); Datum optimistic_overlap(PG_FUNCTION_ARGS) { GSERIALIZED *pg_geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *pg_geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); double dist = PG_GETARG_FLOAT8(2); GBOX g1_bvol; double calc_dist; LWGEOM *geom1 = lwgeom_from_gserialized(pg_geom1); LWGEOM *geom2 = lwgeom_from_gserialized(pg_geom2); if (geom1->srid != geom2->srid) { elog(ERROR,"optimistic_overlap:Operation on two GEOMETRIES with different SRIDs\\n"); PG_RETURN_NULL(); } if (geom1->type != POLYGONTYPE) { elog(ERROR,"optimistic_overlap: first arg isnt a polygon\n"); PG_RETURN_NULL(); } if (geom2->type != POLYGONTYPE && geom2->type != MULTIPOLYGONTYPE) { elog(ERROR,"optimistic_overlap: 2nd arg isnt a [multi-]polygon\n"); PG_RETURN_NULL(); } /*bbox check */ gserialized_get_gbox_p(pg_geom1, &g1_bvol ); g1_bvol.xmin = g1_bvol.xmin - dist; g1_bvol.ymin = g1_bvol.ymin - dist; g1_bvol.xmax = g1_bvol.xmax + dist; g1_bvol.ymax = g1_bvol.ymax + dist; if ( (g1_bvol.xmin > geom2->bbox->xmax) || (g1_bvol.xmax < geom2->bbox->xmin) || (g1_bvol.ymin > geom2->bbox->ymax) || (g1_bvol.ymax < geom2->bbox->ymin) ) { PG_RETURN_BOOL(FALSE); /*bbox not overlap */ } /* * compute distances * should be a fast calc if they actually do intersect */ calc_dist = DatumGetFloat8 ( DirectFunctionCall2(LWGEOM_mindistance2d, PointerGetDatum( pg_geom1 ), PointerGetDatum( pg_geom2 ))); PG_RETURN_BOOL(calc_dist < dist); } /*affine transform geometry */ PG_FUNCTION_INFO_V1(LWGEOM_affine); Datum LWGEOM_affine(PG_FUNCTION_ARGS) { GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); GSERIALIZED *ret; AFFINE affine; affine.afac = PG_GETARG_FLOAT8(1); affine.bfac = PG_GETARG_FLOAT8(2); affine.cfac = PG_GETARG_FLOAT8(3); affine.dfac = PG_GETARG_FLOAT8(4); affine.efac = PG_GETARG_FLOAT8(5); affine.ffac = PG_GETARG_FLOAT8(6); affine.gfac = PG_GETARG_FLOAT8(7); affine.hfac = PG_GETARG_FLOAT8(8); affine.ifac = PG_GETARG_FLOAT8(9); affine.xoff = PG_GETARG_FLOAT8(10); affine.yoff = PG_GETARG_FLOAT8(11); affine.zoff = PG_GETARG_FLOAT8(12); POSTGIS_DEBUG(2, "LWGEOM_affine called."); lwgeom_affine(lwgeom, &affine); /* COMPUTE_BBOX TAINTING */ lwgeom_drop_bbox(lwgeom); lwgeom_add_bbox(lwgeom); ret = geometry_serialize(lwgeom); /* Release memory */ lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_POINTER(ret); } PG_FUNCTION_INFO_V1(ST_GeoHash); Datum ST_GeoHash(PG_FUNCTION_ARGS) { GSERIALIZED *geom = NULL; int precision = 0; char *geohash = NULL; text *result = NULL; if ( PG_ARGISNULL(0) ) { PG_RETURN_NULL(); } geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); if ( ! PG_ARGISNULL(1) ) { precision = PG_GETARG_INT32(1); } geohash = lwgeom_geohash((LWGEOM*)(lwgeom_from_gserialized(geom)), precision); if ( ! geohash ) PG_RETURN_NULL(); result = cstring2text(geohash); pfree(geohash); PG_RETURN_TEXT_P(result); } PG_FUNCTION_INFO_V1(ST_CollectionExtract); Datum ST_CollectionExtract(PG_FUNCTION_ARGS) { GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *output; LWGEOM *lwgeom = lwgeom_from_gserialized(input); LWGEOM *lwcol = NULL; int type = PG_GETARG_INT32(1); int lwgeom_type = lwgeom->type; /* Ensure the right type was input */ if ( ! ( type == POINTTYPE || type == LINETYPE || type == POLYGONTYPE ) ) { lwgeom_free(lwgeom); elog(ERROR, "ST_CollectionExtract: only point, linestring and polygon may be extracted"); PG_RETURN_NULL(); } /* Mirror non-collections right back */ if ( ! lwgeom_is_collection(lwgeom) ) { /* Non-collections of the matching type go back */ if(lwgeom_type == type) { lwgeom_free(lwgeom); PG_RETURN_POINTER(input); } /* Others go back as EMPTY */ else { lwcol = lwgeom_construct_empty(type, lwgeom->srid, FLAGS_GET_Z(lwgeom->flags), FLAGS_GET_M(lwgeom->flags)); } } else { lwcol = lwcollection_as_lwgeom(lwcollection_extract((LWCOLLECTION*)lwgeom, type)); } #if 0 if (lwgeom_is_empty(lwcollection_as_lwgeom(lwcol))) { lwgeom_free(lwgeom); PG_RETURN_NULL(); } #endif output = geometry_serialize((LWGEOM*)lwcol); lwgeom_free(lwgeom); lwgeom_free(lwcol); PG_RETURN_POINTER(output); } PG_FUNCTION_INFO_V1(ST_CollectionHomogenize); Datum ST_CollectionHomogenize(PG_FUNCTION_ARGS) { GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); GSERIALIZED *output; LWGEOM *lwgeom = lwgeom_from_gserialized(input); LWGEOM *lwoutput = NULL; lwoutput = lwgeom_homogenize(lwgeom); lwgeom_free(lwgeom); PG_FREE_IF_COPY(input, 0); if ( ! lwoutput ) PG_RETURN_NULL(); output = geometry_serialize(lwoutput); lwgeom_free(lwoutput); PG_RETURN_POINTER(output); } Datum ST_RemoveRepeatedPoints(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_RemoveRepeatedPoints); Datum ST_RemoveRepeatedPoints(PG_FUNCTION_ARGS) { GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); GSERIALIZED *output; LWGEOM *lwgeom_in = lwgeom_from_gserialized(input); LWGEOM *lwgeom_out; /* lwnotice("ST_RemoveRepeatedPoints got %p", lwgeom_in); */ lwgeom_out = lwgeom_remove_repeated_points(lwgeom_in); output = geometry_serialize(lwgeom_out); lwgeom_free(lwgeom_in); PG_FREE_IF_COPY(input, 0); PG_RETURN_POINTER(output); } Datum ST_FlipCoordinates(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_FlipCoordinates); Datum ST_FlipCoordinates(PG_FUNCTION_ARGS) { GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); GSERIALIZED *output; LWGEOM *lwgeom_in = lwgeom_from_gserialized(input); LWGEOM *lwgeom_out; lwgeom_out = lwgeom_flip_coordinates(lwgeom_in); output = geometry_serialize(lwgeom_out); lwgeom_free(lwgeom_in); PG_FREE_IF_COPY(input, 0); PG_RETURN_POINTER(output); } ������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/lwgeom_sfcgal.h�����������������������������������������������������0000644�0000000�0000000�00000002705�12142775451�020246� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Wrapper around SFCGAL for 3D functions * * Copyright 2012-2013 Oslandia <infos@oslandia.com> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "../liblwgeom/lwgeom_sfcgal.h" /* Conversion from GSERIALIZED* to SFCGAL::Geometry */ sfcgal_geometry_t* POSTGIS2SFCGALGeometry(GSERIALIZED *pglwgeom); /* Conversion from GSERIALIZED* to SFCGAL::PreparedGeometry */ sfcgal_prepared_geometry_t* POSTGIS2SFCGALPreparedGeometry(GSERIALIZED *pglwgeom); /* Conversion from SFCGAL::Geometry to GSERIALIZED */ GSERIALIZED* SFCGALGeometry2POSTGIS( const sfcgal_geometry_t* geom, int force3D, int SRID ); /* Conversion from SFCGAL::PreparedGeometry to GSERIALIZED */ GSERIALIZED* SFCGALPreparedGeometry2POSTGIS( const sfcgal_prepared_geometry_t* geom, int force3D ); Datum sfcgal_intersects(PG_FUNCTION_ARGS); Datum sfcgal_intersects3D(PG_FUNCTION_ARGS); Datum sfcgal_intersection(PG_FUNCTION_ARGS); Datum sfcgal_triangulate(PG_FUNCTION_ARGS); Datum sfcgal_area(PG_FUNCTION_ARGS); Datum sfcgal_distance(PG_FUNCTION_ARGS); Datum sfcgal_distance3D(PG_FUNCTION_ARGS); /* Initialize sfcgal with PostGIS error handlers */ void sfcgal_postgis_init(void); �����������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/postgis_module.c����������������������������������������������������0000644�0000000�0000000�00000005624�12142775451�020470� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * Copyright (C) 2011 OpenGeo.org * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "postgres.h" #include "fmgr.h" #include "utils/elog.h" #include "utils/guc.h" #include "libpq/pqsignal.h" #include "../postgis_config.h" #include "lwgeom_log.h" #include "lwgeom_pg.h" #include "geos_c.h" #include "lwgeom_backend_api.h" /* * This is required for builds against pgsql */ PG_MODULE_MAGIC; static pqsigfunc coreIntHandler = 0; static void handleInterrupt(int sig); #ifdef WIN32 #if POSTGIS_GEOS_VERSION >= 34 static void geosInterruptCallback() { if (UNBLOCKED_SIGNAL_QUEUE()) pgwin32_dispatch_queued_signals(); } #endif #endif /* * Module load callback */ void _PG_init(void); void _PG_init(void) { coreIntHandler = pqsignal(SIGINT, handleInterrupt); #ifdef WIN32 #if POSTGIS_GEOS_VERSION >= 34 GEOS_interruptRegisterCallback(geosInterruptCallback); #endif #endif #if 0 /* Define custom GUC variables. */ DefineCustomIntVariable( "postgis.debug.level", /* name */ "Sets the debugging level of PostGIS.", /* short_desc */ "This is an experimental configuration.", /* long_desc */ &postgis_debug_level, /* valueAddr */ 0, 8, /* min-max */ 0, /* bootValue */ PGC_SUSET, /* GucContext context */ GUC_UNIT_MS, /* int flags */ #if POSTGIS_PGSQL_VERSION >= 91 NULL, /* GucStringCheckHook check_hook */ #endif NULL, /* GucStringAssignHook assign_hook */ NULL /* GucShowHook show_hook */ ); #endif #if 0 /* Define custom GUC variables. */ DefineCustomStringVariable( "postgis.greeting.string", /* name */ "Sets the greeting string used on postgis module load.", /* short_desc */ "This is an experimental configuration.", /* long_desc */ &greeting, /* valueAddr */ "Welcome to PostGIS " POSTGIS_VERSION, /* bootValue */ PGC_SUSET, /* GucContext context */ GUC_UNIT_MS, /* int flags */ #if POSTGIS_PGSQL_VERSION >= 91 NULL, /* GucStringCheckHook check_hook */ #endif NULL, /* GucStringAssignHook assign_hook */ NULL /* GucShowHook show_hook */ ); #endif /* install PostgreSQL handlers */ pg_install_lwgeom_handlers(); /* initialize geometry backend */ lwgeom_init_backend(); } /* * Module unload callback */ void _PG_fini(void); void _PG_fini(void) { elog(NOTICE, "Goodbye from PostGIS %s", POSTGIS_VERSION); } static void handleInterrupt(int sig) { printf("Interrupt requested\n"); fflush(stdout); #if POSTGIS_GEOS_VERSION >= 34 GEOS_interruptRequest(); #endif /* TODO: request interruption of liblwgeom as well ? */ if ( coreIntHandler ) { (*coreIntHandler)(sig); } } ������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/gserialized_gist_nd.c�����������������������������������������������0000644�0000000�0000000�00000110042�12236025367�021431� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: gserialized_gist_nd.c 6519 2010-12-28 00:54:19Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* ** R-Tree Bibliography ** ** [1] A. Guttman. R-tree: a dynamic index structure for spatial searching. ** Proceedings of the ACM SIGMOD Conference, pp 47-57, June 1984. ** [2] C.-H. Ang and T. C. Tan. New linear node splitting algorithm for ** R-Trees. Advances in Spatial Databases - 5th International Symposium, ** 1997 ** [3] N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger. The R*tree: an ** efficient and robust access method for points and rectangles. ** Proceedings of the ACM SIGMOD Conference. June 1990. */ #include "postgres.h" #include "access/gist.h" /* For GiST */ #include "access/itup.h" #include "access/skey.h" #include "../postgis_config.h" #include "liblwgeom.h" /* For standard geometry types. */ #include "lwgeom_pg.h" /* For debugging macros. */ #include "gserialized_gist.h" /* For utility functions. */ #include "geography.h" /* ** When is a node split not so good? If more than 90% of the entries ** end up in one of the children. */ #define LIMIT_RATIO 0.1 /* ** For debugging */ #if POSTGIS_DEBUG_LEVEL > 0 static int geog_counter_leaf = 0; static int geog_counter_internal = 0; #endif /* ** ND Index key type stub prototypes */ Datum gidx_out(PG_FUNCTION_ARGS); Datum gidx_in(PG_FUNCTION_ARGS); /* ** ND GiST prototypes */ Datum gserialized_gist_consistent(PG_FUNCTION_ARGS); Datum gserialized_gist_compress(PG_FUNCTION_ARGS); Datum gserialized_gist_decompress(PG_FUNCTION_ARGS); Datum gserialized_gist_penalty(PG_FUNCTION_ARGS); Datum gserialized_gist_picksplit(PG_FUNCTION_ARGS); Datum gserialized_gist_union(PG_FUNCTION_ARGS); Datum gserialized_gist_same(PG_FUNCTION_ARGS); /* ** ND Operator prototypes */ Datum gserialized_overlaps(PG_FUNCTION_ARGS); Datum gserialized_contains(PG_FUNCTION_ARGS); Datum gserialized_within(PG_FUNCTION_ARGS); /* ** GIDX true/false test function type */ typedef bool (*gidx_predicate)(GIDX *a, GIDX *b); /* Allocate a new copy of GIDX */ static GIDX* gidx_copy(GIDX *b) { GIDX *c = (GIDX*)palloc(VARSIZE(b)); POSTGIS_DEBUGF(5, "copied gidx (%p) to gidx (%p)", b, c); memcpy((void*)c, (void*)b, VARSIZE(b)); return c; } /* Ensure all minimums are below maximums. */ static inline void gidx_validate(GIDX *b) { int i; Assert(b); POSTGIS_DEBUGF(5,"validating gidx (%s)", gidx_to_string(b)); for ( i = 0; i < GIDX_NDIMS(b); i++ ) { if ( GIDX_GET_MIN(b,i) > GIDX_GET_MAX(b,i) ) { float tmp; tmp = GIDX_GET_MIN(b,i); GIDX_SET_MIN(b,i,GIDX_GET_MAX(b,i)); GIDX_SET_MAX(b,i,tmp); } } return; } /* An "unknown" GIDX is used to represent the bounds of an EMPTY geometry or other-wise unindexable geometry (like one with NaN or Inf bounds) */ static inline bool gidx_is_unknown(const GIDX *a) { size_t size = VARSIZE(a) - VARHDRSZ; /* "unknown" gidx objects have a too-small size of one float */ if ( size <= 0.0 ) return TRUE; return FALSE; } static inline void gidx_set_unknown(GIDX *a) { SET_VARSIZE(a, VARHDRSZ); } /* Enlarge b_union to contain b_new. If b_new contains more dimensions than b_union, expand b_union to contain those dimensions. */ static void gidx_merge(GIDX **b_union, GIDX *b_new) { int i, dims_union, dims_new; Assert(b_union); Assert(*b_union); Assert(b_new); /* Can't merge an unknown into any thing */ if( gidx_is_unknown(b_new) ) return; /* Merge of unknown and known is known */ if( gidx_is_unknown(*b_union) ) { *b_union = b_new; return; } dims_union = GIDX_NDIMS(*b_union); dims_new = GIDX_NDIMS(b_new); POSTGIS_DEBUGF(4, "merging gidx (%s) into gidx (%s)", gidx_to_string(b_new), gidx_to_string(*b_union)); if ( dims_new > dims_union ) { POSTGIS_DEBUGF(5, "reallocating b_union from %d dims to %d dims", dims_union, dims_new); *b_union = (GIDX*)repalloc(*b_union, GIDX_SIZE(dims_new)); SET_VARSIZE(*b_union, VARSIZE(b_new)); dims_union = dims_new; } for ( i = 0; i < dims_new; i++ ) { /* Adjust minimums */ GIDX_SET_MIN(*b_union, i, Min(GIDX_GET_MIN(*b_union,i),GIDX_GET_MIN(b_new,i))); /* Adjust maximums */ GIDX_SET_MAX(*b_union, i, Max(GIDX_GET_MAX(*b_union,i),GIDX_GET_MAX(b_new,i))); } POSTGIS_DEBUGF(5, "merge complete (%s)", gidx_to_string(*b_union)); return; } /* Calculate the volume (in n-d units) of the GIDX */ static float gidx_volume(GIDX *a) { float result; int i; if ( a == NULL || gidx_is_unknown(a) ) { /* elog(ERROR, "gidx_volume received a null argument"); */ return 0.0; } result = GIDX_GET_MAX(a,0) - GIDX_GET_MIN(a,0); for ( i = 1; i < GIDX_NDIMS(a); i++ ) result *= (GIDX_GET_MAX(a,i) - GIDX_GET_MIN(a,i)); POSTGIS_DEBUGF(5, "calculated volume of %s as %.8g", gidx_to_string(a), result); return result; } /* Ensure the first argument has the higher dimensionality. */ static void gidx_dimensionality_check(GIDX **a, GIDX **b) { if ( GIDX_NDIMS(*a) < GIDX_NDIMS(*b) ) { GIDX *tmp = *b; *b = *a; *a = tmp; } } /* Calculate the volume of the union of the boxes. Avoids creating an intermediate box. */ static float gidx_union_volume(GIDX *a, GIDX *b) { float result; int i; int ndims_a, ndims_b; POSTGIS_DEBUG(5,"entered function"); if ( a == NULL && b == NULL ) { elog(ERROR, "gidx_union_volume received two null arguments"); return 0.0; } if ( a == NULL || gidx_is_unknown(a) ) return gidx_volume(b); if ( b == NULL || gidx_is_unknown(b) ) return gidx_volume(a); if ( gidx_is_unknown(a) && gidx_is_unknown(b) ) { return 0.0; } /* Ensure 'a' has the most dimensions. */ gidx_dimensionality_check(&a, &b); ndims_a = GIDX_NDIMS(a); ndims_b = GIDX_NDIMS(b); /* Initialize with maximal length of first dimension. */ result = Max(GIDX_GET_MAX(a,0),GIDX_GET_MAX(b,0)) - Min(GIDX_GET_MIN(a,0),GIDX_GET_MIN(b,0)); /* Multiply by maximal length of remaining dimensions. */ for ( i = 1; i < ndims_b; i++ ) { result *= (Max(GIDX_GET_MAX(a,i),GIDX_GET_MAX(b,i)) - Min(GIDX_GET_MIN(a,i),GIDX_GET_MIN(b,i))); } /* Add in dimensions of higher dimensional box. */ for ( i = ndims_b; i < ndims_a; i++ ) { result *= (GIDX_GET_MAX(a,i) - GIDX_GET_MIN(a,i)); } POSTGIS_DEBUGF(5, "volume( %s union %s ) = %.12g", gidx_to_string(a), gidx_to_string(b), result); return result; } /* Calculate the volume of the intersection of the boxes. */ static float gidx_inter_volume(GIDX *a, GIDX *b) { int i; float result; POSTGIS_DEBUG(5,"entered function"); if ( a == NULL || b == NULL ) { elog(ERROR, "gidx_inter_volume received a null argument"); return 0.0; } if ( gidx_is_unknown(a) || gidx_is_unknown(b) ) { return 0.0; } /* Ensure 'a' has the most dimensions. */ gidx_dimensionality_check(&a, &b); /* Initialize with minimal length of first dimension. */ result = Min(GIDX_GET_MAX(a,0),GIDX_GET_MAX(b,0)) - Max(GIDX_GET_MIN(a,0),GIDX_GET_MIN(b,0)); /* If they are disjoint (max < min) then return zero. */ if ( result < 0.0 ) return 0.0; /* Continue for remaining dimensions. */ for ( i = 1; i < GIDX_NDIMS(b); i++ ) { float width = Min(GIDX_GET_MAX(a,i),GIDX_GET_MAX(b,i)) - Max(GIDX_GET_MIN(a,i),GIDX_GET_MIN(b,i)); if ( width < 0.0 ) return 0.0; /* Multiply by minimal length of remaining dimensions. */ result *= width; } POSTGIS_DEBUGF(5, "volume( %s intersection %s ) = %.12g", gidx_to_string(a), gidx_to_string(b), result); return result; } /* ** Overlapping GIDX box test. ** ** Box(A) Overlap Box(B) IFF (pt(a)LL < pt(B)UR) && (pt(b)LL < pt(a)UR) */ static bool gidx_overlaps(GIDX *a, GIDX *b) { int i; int ndims_b; POSTGIS_DEBUG(5, "entered function"); if ( (a == NULL) || (b == NULL) ) return FALSE; if ( gidx_is_unknown(a) || gidx_is_unknown(b) ) return FALSE; /* Ensure 'a' has the most dimensions. */ gidx_dimensionality_check(&a, &b); ndims_b = GIDX_NDIMS(b); /* compare within the dimensions of (b) */ for ( i = 0; i < ndims_b; i++ ) { if ( GIDX_GET_MIN(a,i) > GIDX_GET_MAX(b,i) ) return FALSE; if ( GIDX_GET_MIN(b,i) > GIDX_GET_MAX(a,i) ) return FALSE; } /* compare to zero those dimensions in (a) absent in (b) */ for ( i = ndims_b; i < GIDX_NDIMS(a); i++ ) { if ( GIDX_GET_MIN(a,i) > 0.0 ) return FALSE; if ( GIDX_GET_MAX(a,i) < 0.0 ) return FALSE; } return TRUE; } /* ** Containment GIDX test. ** ** Box(A) CONTAINS Box(B) IFF (pt(A)LL < pt(B)LL) && (pt(A)UR > pt(B)UR) */ static bool gidx_contains(GIDX *a, GIDX *b) { int i, dims_a, dims_b; POSTGIS_DEBUG(5, "entered function"); if ( (a == NULL) || (b == NULL) ) return FALSE; if ( gidx_is_unknown(a) || gidx_is_unknown(b) ) return FALSE; dims_a = GIDX_NDIMS(a); dims_b = GIDX_NDIMS(b); if ( dims_a < dims_b ) { /* ** If (b) is of higher dimensionality than (a) it can only be contained ** if those higher dimensions are zeroes. */ for (i = dims_a; i < dims_b; i++) { if ( GIDX_GET_MIN(b,i) != 0 ) return FALSE; if ( GIDX_GET_MAX(b,i) != 0 ) return FALSE; } } /* Excess dimensions of (a), don't matter, it just has to contain (b) in (b)'s dimensions */ for (i = 0; i < Min(dims_a, dims_b); i++) { if ( GIDX_GET_MIN(a,i) > GIDX_GET_MIN(b,i) ) return FALSE; if ( GIDX_GET_MAX(a,i) < GIDX_GET_MAX(b,i) ) return FALSE; } return TRUE; } /* ** Equality GIDX test. ** ** Box(A) EQUALS Box(B) IFF (pt(A)LL == pt(B)LL) && (pt(A)UR == pt(B)UR) */ static bool gidx_equals(GIDX *a, GIDX *b) { int i; POSTGIS_DEBUG(5, "entered function"); if ( (a == NULL) && (b == NULL) ) return TRUE; if ( (a == NULL) || (b == NULL) ) return FALSE; if ( gidx_is_unknown(a) && gidx_is_unknown(b) ) return TRUE; if ( gidx_is_unknown(a) || gidx_is_unknown(b) ) return FALSE; /* Ensure 'a' has the most dimensions. */ gidx_dimensionality_check(&a, &b); /* For all shared dimensions min(a) == min(b), max(a) == max(b) */ for (i = 0; i < GIDX_NDIMS(b); i++) { if ( GIDX_GET_MIN(a,i) != GIDX_GET_MIN(b,i) ) return FALSE; if ( GIDX_GET_MAX(a,i) != GIDX_GET_MAX(b,i) ) return FALSE; } /* For all unshared dimensions min(a) == 0.0, max(a) == 0.0 */ for (i = GIDX_NDIMS(b); i < GIDX_NDIMS(a); i++) { if ( GIDX_GET_MIN(a,i) != 0.0 ) return FALSE; if ( GIDX_GET_MAX(a,i) != 0.0 ) return FALSE; } return TRUE; } /** * Support function. Based on two datums return true if * they satisfy the predicate and false otherwise. */ static int gserialized_datum_predicate(Datum gs1, Datum gs2, gidx_predicate predicate) { /* Put aside some stack memory and use it for GIDX pointers. */ char boxmem1[GIDX_MAX_SIZE]; char boxmem2[GIDX_MAX_SIZE]; GIDX *gidx1 = (GIDX*)boxmem1; GIDX *gidx2 = (GIDX*)boxmem2; POSTGIS_DEBUG(3, "entered function"); /* Must be able to build box for each arguement (ie, not empty geometry) and predicate function to return true. */ if ( (gserialized_datum_get_gidx_p(gs1, gidx1) == LW_SUCCESS) && (gserialized_datum_get_gidx_p(gs2, gidx2) == LW_SUCCESS) && predicate(gidx1, gidx2) ) { POSTGIS_DEBUGF(3, "got boxes %s and %s", gidx_to_string(gidx1), gidx_to_string(gidx2)); return LW_TRUE; } return LW_FALSE; } /** * Return a #GSERIALIZED with an expanded bounding box. */ GSERIALIZED* gserialized_expand(GSERIALIZED *g, double distance) { char boxmem[GIDX_MAX_SIZE]; GIDX *gidx = (GIDX*)boxmem; float fdistance = (float)distance; /* Get our bounding box out of the geography, return right away if input is an EMPTY geometry. */ if ( gserialized_get_gidx_p(g, gidx) == LW_FAILURE ) { return g; } gidx_expand(gidx, fdistance); return gserialized_set_gidx(g, gidx); } /*********************************************************************** * GiST N-D Index Operator Functions */ /* ** '~' and operator function. Based on two serialized return true if ** the first is contained by the second. */ PG_FUNCTION_INFO_V1(gserialized_within); Datum gserialized_within(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate(PG_GETARG_DATUM(1), PG_GETARG_DATUM(0), gidx_contains) == LW_TRUE ) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } /* ** '@' and operator function. Based on two serialized return true if ** the first contains the second. */ PG_FUNCTION_INFO_V1(gserialized_contains); Datum gserialized_contains(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate(PG_GETARG_DATUM(0),PG_GETARG_DATUM(1), gidx_contains) == LW_TRUE ) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } /* ** '&&' operator function. Based on two serialized return true if ** they overlap and false otherwise. */ PG_FUNCTION_INFO_V1(gserialized_overlaps); Datum gserialized_overlaps(PG_FUNCTION_ARGS) { if ( gserialized_datum_predicate(PG_GETARG_DATUM(0),PG_GETARG_DATUM(1), gidx_overlaps) == LW_TRUE ) { PG_RETURN_BOOL(TRUE); } PG_RETURN_BOOL(FALSE); } /*********************************************************************** * GiST Index Support Functions */ /* ** GiST support function. Given a geography, return a "compressed" ** version. In this case, we convert the geography into a geocentric ** bounding box. If the geography already has the box embedded in it ** we pull that out and hand it back. */ PG_FUNCTION_INFO_V1(gserialized_gist_compress); Datum gserialized_gist_compress(PG_FUNCTION_ARGS) { GISTENTRY *entry_in = (GISTENTRY*)PG_GETARG_POINTER(0); GISTENTRY *entry_out = NULL; char gidxmem[GIDX_MAX_SIZE]; GIDX *bbox_out = (GIDX*)gidxmem; int result = LW_SUCCESS; int i; POSTGIS_DEBUG(4, "[GIST] 'compress' function called"); /* ** Not a leaf key? There's nothing to do. ** Return the input unchanged. */ if ( ! entry_in->leafkey ) { POSTGIS_DEBUG(4, "[GIST] non-leafkey entry, returning input unaltered"); PG_RETURN_POINTER(entry_in); } POSTGIS_DEBUG(4, "[GIST] processing leafkey input"); entry_out = palloc(sizeof(GISTENTRY)); /* ** Null key? Make a copy of the input entry and ** return. */ if ( DatumGetPointer(entry_in->key) == NULL ) { POSTGIS_DEBUG(4, "[GIST] leafkey is null"); gistentryinit(*entry_out, (Datum) 0, entry_in->rel, entry_in->page, entry_in->offset, FALSE); POSTGIS_DEBUG(4, "[GIST] returning copy of input"); PG_RETURN_POINTER(entry_out); } /* Extract our index key from the GiST entry. */ result = gserialized_datum_get_gidx_p(entry_in->key, bbox_out); /* Is the bounding box valid (non-empty, non-infinite) ? * If not, use the "unknown" GIDX. */ if ( result == LW_FAILURE ) { POSTGIS_DEBUG(4, "[GIST] empty geometry!"); gidx_set_unknown(bbox_out); gistentryinit(*entry_out, PointerGetDatum(gidx_copy(bbox_out)), entry_in->rel, entry_in->page, entry_in->offset, FALSE); PG_RETURN_POINTER(entry_out); } POSTGIS_DEBUGF(4, "[GIST] got entry_in->key: %s", gidx_to_string(bbox_out)); /* Check all the dimensions for finite values. * If not, use the "unknown" GIDX as a key */ for ( i = 0; i < GIDX_NDIMS(bbox_out); i++ ) { if ( ! isfinite(GIDX_GET_MAX(bbox_out, i)) || ! isfinite(GIDX_GET_MIN(bbox_out, i)) ) { gidx_set_unknown(bbox_out); gistentryinit(*entry_out, PointerGetDatum(gidx_copy(bbox_out)), entry_in->rel, entry_in->page, entry_in->offset, FALSE); PG_RETURN_POINTER(entry_out); } } /* Enure bounding box has minimums below maximums. */ gidx_validate(bbox_out); /* Prepare GISTENTRY for return. */ gistentryinit(*entry_out, PointerGetDatum(gidx_copy(bbox_out)), entry_in->rel, entry_in->page, entry_in->offset, FALSE); /* Return GISTENTRY. */ POSTGIS_DEBUG(4, "[GIST] 'compress' function complete"); PG_RETURN_POINTER(entry_out); } /* ** GiST support function. ** Decompress an entry. Unused for geography, so we return. */ PG_FUNCTION_INFO_V1(gserialized_gist_decompress); Datum gserialized_gist_decompress(PG_FUNCTION_ARGS) { POSTGIS_DEBUG(5, "[GIST] 'decompress' function called"); /* We don't decompress. Just return the input. */ PG_RETURN_POINTER(PG_GETARG_POINTER(0)); } /* ** GiST support function. Called from gserialized_gist_consistent below. */ static inline bool gserialized_gist_consistent_leaf(GIDX *key, GIDX *query, StrategyNumber strategy) { bool retval; POSTGIS_DEBUGF(4, "[GIST] leaf consistent, strategy [%d], count[%i]", strategy, geog_counter_leaf++); switch (strategy) { case RTOverlapStrategyNumber: retval = (bool) gidx_overlaps(key, query); break; case RTSameStrategyNumber: retval = (bool) gidx_equals(key, query); break; case RTContainsStrategyNumber: case RTOldContainsStrategyNumber: retval = (bool) gidx_contains(key, query); break; case RTContainedByStrategyNumber: case RTOldContainedByStrategyNumber: retval = (bool) gidx_contains(query, key); break; default: retval = FALSE; } return (retval); } /* ** GiST support function. Called from gserialized_gist_consistent below. */ static inline bool gserialized_gist_consistent_internal(GIDX *key, GIDX *query, StrategyNumber strategy) { bool retval; POSTGIS_DEBUGF(4, "[GIST] internal consistent, strategy [%d], count[%i], query[%s], key[%s]", strategy, geog_counter_internal++, gidx_to_string(query), gidx_to_string(key) ); switch (strategy) { case RTOverlapStrategyNumber: retval = (bool) gidx_overlaps(key, query); break; case RTSameStrategyNumber: case RTContainsStrategyNumber: case RTOldContainsStrategyNumber: retval = (bool) gidx_contains(key, query); break; case RTContainedByStrategyNumber: case RTOldContainedByStrategyNumber: retval = (bool) gidx_overlaps(key, query); break; default: retval = FALSE; } return (retval); } /* ** GiST support function. Take in a query and an entry and see what the ** relationship is, based on the query strategy. */ PG_FUNCTION_INFO_V1(gserialized_gist_consistent); Datum gserialized_gist_consistent(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY*) PG_GETARG_POINTER(0); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); bool result; char gidxmem[GIDX_MAX_SIZE]; GIDX *query_gbox_index = (GIDX*)gidxmem; /* PostgreSQL 8.4 and later require the RECHECK flag to be set here, rather than being supplied as part of the operator class definition */ bool *recheck = (bool *) PG_GETARG_POINTER(4); /* We set recheck to false to avoid repeatedly pulling every "possibly matched" geometry out during index scans. For cases when the geometries are large, rechecking can make things twice as slow. */ *recheck = false; POSTGIS_DEBUG(4, "[GIST] 'consistent' function called"); /* Quick sanity check on query argument. */ if ( DatumGetPointer(PG_GETARG_DATUM(1)) == NULL ) { POSTGIS_DEBUG(4, "[GIST] null query pointer (!?!), returning false"); PG_RETURN_BOOL(FALSE); /* NULL query! This is screwy! */ } /* Quick sanity check on entry key. */ if ( DatumGetPointer(entry->key) == NULL ) { POSTGIS_DEBUG(4, "[GIST] null index entry, returning false"); PG_RETURN_BOOL(FALSE); /* NULL entry! */ } /* Null box should never make this far. */ if ( gserialized_datum_get_gidx_p(PG_GETARG_DATUM(1), query_gbox_index) == LW_FAILURE ) { POSTGIS_DEBUG(4, "[GIST] null query_gbox_index!"); PG_RETURN_BOOL(FALSE); } /* Treat leaf node tests different from internal nodes */ if (GIST_LEAF(entry)) { result = gserialized_gist_consistent_leaf( (GIDX*)DatumGetPointer(entry->key), query_gbox_index, strategy); } else { result = gserialized_gist_consistent_internal( (GIDX*)DatumGetPointer(entry->key), query_gbox_index, strategy); } PG_RETURN_BOOL(result); } /* ** GiST support function. Calculate the "penalty" cost of adding this entry into an existing entry. ** Calculate the change in volume of the old entry once the new entry is added. ** TODO: Re-evaluate this in light of R*Tree penalty approaches. */ PG_FUNCTION_INFO_V1(gserialized_gist_penalty); Datum gserialized_gist_penalty(PG_FUNCTION_ARGS) { GISTENTRY *origentry = (GISTENTRY*) PG_GETARG_POINTER(0); GISTENTRY *newentry = (GISTENTRY*) PG_GETARG_POINTER(1); float *result = (float*) PG_GETARG_POINTER(2); GIDX *gbox_index_orig, *gbox_index_new; float size_union, size_orig; POSTGIS_DEBUG(4, "[GIST] 'penalty' function called"); gbox_index_orig = (GIDX*)DatumGetPointer(origentry->key); gbox_index_new = (GIDX*)DatumGetPointer(newentry->key); /* Drop out if we're dealing with null inputs. Shouldn't happen. */ if ( (gbox_index_orig == NULL) && (gbox_index_new == NULL) ) { POSTGIS_DEBUG(4, "[GIST] both inputs NULL! returning penalty of zero"); *result = 0.0; PG_RETURN_FLOAT8(*result); } /* Calculate the size difference of the boxes (volume difference in this case). */ size_union = gidx_union_volume(gbox_index_orig, gbox_index_new); size_orig = gidx_volume(gbox_index_orig); *result = size_union - size_orig; /* All things being equal, we prefer to expand small boxes rather than large boxes. NOTE: This code seemed to be causing badly balanced trees to be built and therefore has been commented out. Not sure why it didn't work, but it didn't. if( FP_IS_ZERO(*result) ) if( FP_IS_ZERO(size_orig) ) *result = 0.0; else *result = 1.0 - (1.0/(1.0 + size_orig)); else *result += 1.0; */ POSTGIS_DEBUGF(4, "[GIST] union size (%.12f), original size (%.12f), penalty (%.12f)", size_union, size_orig, *result); PG_RETURN_POINTER(result); } /* ** GiST support function. Merge all the boxes in a page into one master box. */ PG_FUNCTION_INFO_V1(gserialized_gist_union); Datum gserialized_gist_union(PG_FUNCTION_ARGS) { GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0); int *sizep = (int *) PG_GETARG_POINTER(1); /* Size of the return value */ int numranges, i; GIDX *box_cur, *box_union; POSTGIS_DEBUG(4, "[GIST] 'union' function called"); numranges = entryvec->n; box_cur = (GIDX*) DatumGetPointer(entryvec->vector[0].key); box_union = gidx_copy(box_cur); for ( i = 1; i < numranges; i++ ) { box_cur = (GIDX*) DatumGetPointer(entryvec->vector[i].key); gidx_merge(&box_union, box_cur); } *sizep = VARSIZE(box_union); POSTGIS_DEBUGF(4, "[GIST] union called, numranges(%i), pageunion %s", numranges, gidx_to_string(box_union)); PG_RETURN_POINTER(box_union); } /* ** GiST support function. Test equality of keys. */ PG_FUNCTION_INFO_V1(gserialized_gist_same); Datum gserialized_gist_same(PG_FUNCTION_ARGS) { GIDX *b1 = (GIDX*)PG_GETARG_POINTER(0); GIDX *b2 = (GIDX*)PG_GETARG_POINTER(1); bool *result = (bool*)PG_GETARG_POINTER(2); POSTGIS_DEBUG(4, "[GIST] 'same' function called"); *result = gidx_equals(b1, b2); PG_RETURN_POINTER(result); } /* ** Utility function to add entries to the axis partition lists in the ** picksplit function. */ static void gserialized_gist_picksplit_addlist(OffsetNumber *list, GIDX **box_union, GIDX *box_current, int *pos, int num) { if ( *pos ) gidx_merge(box_union, box_current); else memcpy((void*)(*box_union), (void*)box_current, VARSIZE(box_current)); list[*pos] = num; (*pos)++; } /* ** Utility function check whether the number of entries two halves of the ** space constitute a "bad ratio" (poor balance). */ static int gserialized_gist_picksplit_badratio(int x, int y) { POSTGIS_DEBUGF(4, "[GIST] checking split ratio (%d, %d)", x, y); if ( (y == 0) || (((float)x / (float)y) < LIMIT_RATIO) || (x == 0) || (((float)y / (float)x) < LIMIT_RATIO) ) return TRUE; return FALSE; } static bool gserialized_gist_picksplit_badratios(int *pos, int dims) { int i; for ( i = 0; i < dims; i++ ) { if ( gserialized_gist_picksplit_badratio(pos[2*i],pos[2*i+1]) == FALSE ) return FALSE; } return TRUE; } /* ** Where the picksplit algorithm cannot find any basis for splitting one way ** or another, we simply split the overflowing node in half. */ static void gserialized_gist_picksplit_fallback(GistEntryVector *entryvec, GIST_SPLITVEC *v) { OffsetNumber i, maxoff; GIDX *unionL = NULL; GIDX *unionR = NULL; int nbytes; POSTGIS_DEBUG(4, "[GIST] in fallback picksplit function"); maxoff = entryvec->n - 1; nbytes = (maxoff + 2) * sizeof(OffsetNumber); v->spl_left = (OffsetNumber*) palloc(nbytes); v->spl_right = (OffsetNumber*) palloc(nbytes); v->spl_nleft = v->spl_nright = 0; for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { GIDX *cur = (GIDX*)DatumGetPointer(entryvec->vector[i].key); if (i <= (maxoff - FirstOffsetNumber + 1) / 2) { v->spl_left[v->spl_nleft] = i; if (unionL == NULL) { unionL = gidx_copy(cur); } else { gidx_merge(&unionL, cur); } v->spl_nleft++; } else { v->spl_right[v->spl_nright] = i; if (unionR == NULL) { unionR = gidx_copy(cur); } else { gidx_merge(&unionR, cur); } v->spl_nright++; } } if (v->spl_ldatum_exists) gidx_merge(&unionL, (GIDX*)DatumGetPointer(v->spl_ldatum)); v->spl_ldatum = PointerGetDatum(unionL); if (v->spl_rdatum_exists) gidx_merge(&unionR, (GIDX*)DatumGetPointer(v->spl_rdatum)); v->spl_rdatum = PointerGetDatum(unionR); v->spl_ldatum_exists = v->spl_rdatum_exists = false; } static void gserialized_gist_picksplit_constructsplit(GIST_SPLITVEC *v, OffsetNumber *list1, int nlist1, GIDX **union1, OffsetNumber *list2, int nlist2, GIDX **union2) { bool firstToLeft = true; POSTGIS_DEBUG(4, "[GIST] picksplit in constructsplit function"); if (v->spl_ldatum_exists || v->spl_rdatum_exists) { if (v->spl_ldatum_exists && v->spl_rdatum_exists) { GIDX *LRl = gidx_copy(*union1); GIDX *LRr = gidx_copy(*union2); GIDX *RLl = gidx_copy(*union2); GIDX *RLr = gidx_copy(*union1); double sizeLR, sizeRL; gidx_merge(&LRl, (GIDX*)DatumGetPointer(v->spl_ldatum)); gidx_merge(&LRr, (GIDX*)DatumGetPointer(v->spl_rdatum)); gidx_merge(&RLl, (GIDX*)DatumGetPointer(v->spl_ldatum)); gidx_merge(&RLr, (GIDX*)DatumGetPointer(v->spl_rdatum)); sizeLR = gidx_inter_volume(LRl,LRr); sizeRL = gidx_inter_volume(RLl,RLr); POSTGIS_DEBUGF(4, "[GIST] sizeLR / sizeRL == %.12g / %.12g", sizeLR, sizeRL); if (sizeLR > sizeRL) firstToLeft = false; } else { float p1, p2; GISTENTRY oldUnion, addon; gistentryinit(oldUnion, (v->spl_ldatum_exists) ? v->spl_ldatum : v->spl_rdatum, NULL, NULL, InvalidOffsetNumber, FALSE); gistentryinit(addon, PointerGetDatum(*union1), NULL, NULL, InvalidOffsetNumber, FALSE); DirectFunctionCall3(gserialized_gist_penalty, PointerGetDatum(&oldUnion), PointerGetDatum(&addon), PointerGetDatum(&p1)); gistentryinit(addon, PointerGetDatum(*union2), NULL, NULL, InvalidOffsetNumber, FALSE); DirectFunctionCall3(gserialized_gist_penalty, PointerGetDatum(&oldUnion), PointerGetDatum(&addon), PointerGetDatum(&p2)); POSTGIS_DEBUGF(4, "[GIST] p1 / p2 == %.12g / %.12g", p1, p2); if ((v->spl_ldatum_exists && p1 > p2) || (v->spl_rdatum_exists && p1 < p2)) firstToLeft = false; } } POSTGIS_DEBUGF(4, "[GIST] firstToLeft == %d", firstToLeft); if (firstToLeft) { v->spl_left = list1; v->spl_right = list2; v->spl_nleft = nlist1; v->spl_nright = nlist2; if (v->spl_ldatum_exists) gidx_merge(union1, (GIDX*)DatumGetPointer(v->spl_ldatum)); v->spl_ldatum = PointerGetDatum(*union1); if (v->spl_rdatum_exists) gidx_merge(union2, (GIDX*)DatumGetPointer(v->spl_rdatum)); v->spl_rdatum = PointerGetDatum(*union2); } else { v->spl_left = list2; v->spl_right = list1; v->spl_nleft = nlist2; v->spl_nright = nlist1; if (v->spl_ldatum_exists) gidx_merge(union2, (GIDX*)DatumGetPointer(v->spl_ldatum)); v->spl_ldatum = PointerGetDatum(*union2); if (v->spl_rdatum_exists) gidx_merge(union1, (GIDX*)DatumGetPointer(v->spl_rdatum)); v->spl_rdatum = PointerGetDatum(*union1); } v->spl_ldatum_exists = v->spl_rdatum_exists = false; } #define BELOW(d) (2*(d)) #define ABOVE(d) ((2*(d))+1) /* ** GiST support function. Split an overflowing node into two new nodes. ** Uses linear algorithm from Ang & Tan [2], dividing node extent into ** four quadrants, and splitting along the axis that most evenly distributes ** entries between the new nodes. ** TODO: Re-evaluate this in light of R*Tree picksplit approaches. */ PG_FUNCTION_INFO_V1(gserialized_gist_picksplit); Datum gserialized_gist_picksplit(PG_FUNCTION_ARGS) { GistEntryVector *entryvec = (GistEntryVector*) PG_GETARG_POINTER(0); GIST_SPLITVEC *v = (GIST_SPLITVEC*) PG_GETARG_POINTER(1); OffsetNumber i; /* One union box for each half of the space. */ GIDX **box_union; /* One offset number list for each half of the space. */ OffsetNumber **list; /* One position index for each half of the space. */ int *pos; GIDX *box_pageunion; GIDX *box_current; int direction = -1; bool all_entries_equal = true; OffsetNumber max_offset; int nbytes, ndims_pageunion, d; int posmax = -1; POSTGIS_DEBUG(4, "[GIST] 'picksplit' function called"); /* ** First calculate the bounding box and maximum number of dimensions in this page. */ max_offset = entryvec->n - 1; box_current = (GIDX*) DatumGetPointer(entryvec->vector[FirstOffsetNumber].key); box_pageunion = gidx_copy(box_current); /* Calculate the containing box (box_pageunion) for the whole page we are going to split. */ for ( i = OffsetNumberNext(FirstOffsetNumber); i <= max_offset; i = OffsetNumberNext(i) ) { box_current = (GIDX*) DatumGetPointer(entryvec->vector[i].key); if ( all_entries_equal == true && ! gidx_equals (box_pageunion, box_current) ) all_entries_equal = false; gidx_merge( &box_pageunion, box_current ); } POSTGIS_DEBUGF(3, "[GIST] box_pageunion: %s", gidx_to_string(box_pageunion)); /* Every box in the page is the same! So, we split and just put half the boxes in each child. */ if ( all_entries_equal ) { POSTGIS_DEBUG(4, "[GIST] picksplit finds all entries equal!"); gserialized_gist_picksplit_fallback(entryvec, v); PG_RETURN_POINTER(v); } /* Initialize memory structures. */ nbytes = (max_offset + 2) * sizeof(OffsetNumber); ndims_pageunion = GIDX_NDIMS(box_pageunion); POSTGIS_DEBUGF(4, "[GIST] ndims_pageunion == %d", ndims_pageunion); pos = palloc(2*ndims_pageunion * sizeof(int)); list = palloc(2*ndims_pageunion * sizeof(OffsetNumber*)); box_union = palloc(2*ndims_pageunion * sizeof(GIDX*)); for ( d = 0; d < ndims_pageunion; d++ ) { list[BELOW(d)] = (OffsetNumber*) palloc(nbytes); list[ABOVE(d)] = (OffsetNumber*) palloc(nbytes); box_union[BELOW(d)] = gidx_new(ndims_pageunion); box_union[ABOVE(d)] = gidx_new(ndims_pageunion); pos[BELOW(d)] = 0; pos[ABOVE(d)] = 0; } /* ** Assign each entry in the node to the volume partitions it belongs to, ** such as "above the x/y plane, left of the y/z plane, below the x/z plane". ** Each entry thereby ends up in three of the six partitions. */ POSTGIS_DEBUG(4, "[GIST] 'picksplit' calculating best split axis"); for ( i = FirstOffsetNumber; i <= max_offset; i = OffsetNumberNext(i) ) { box_current = (GIDX*) DatumGetPointer(entryvec->vector[i].key); for ( d = 0; d < ndims_pageunion; d++ ) { if ( GIDX_GET_MIN(box_current,d)-GIDX_GET_MIN(box_pageunion,d) < GIDX_GET_MAX(box_pageunion,d)-GIDX_GET_MAX(box_current,d) ) { gserialized_gist_picksplit_addlist(list[BELOW(d)], &(box_union[BELOW(d)]), box_current, &(pos[BELOW(d)]), i); } else { gserialized_gist_picksplit_addlist(list[ABOVE(d)], &(box_union[ABOVE(d)]), box_current, &(pos[ABOVE(d)]), i); } } } /* ** "Bad disposition", too many entries fell into one octant of the space, so no matter which ** plane we choose to split on, we're going to end up with a mostly full node. Where the ** data is pretty homogeneous (lots of duplicates) entries that are equidistant from the ** sides of the page union box can occasionally all end up in one place, leading ** to this condition. */ if ( gserialized_gist_picksplit_badratios(pos,ndims_pageunion) == TRUE ) { /* ** Instead we split on center points and see if we do better. ** First calculate the average center point for each axis. */ double *avgCenter = palloc(ndims_pageunion * sizeof(double)); for ( d = 0; d < ndims_pageunion; d++ ) { avgCenter[d] = 0.0; } POSTGIS_DEBUG(4, "[GIST] picksplit can't find good split axis, trying center point method"); for ( i = FirstOffsetNumber; i <= max_offset; i = OffsetNumberNext(i) ) { box_current = (GIDX*) DatumGetPointer(entryvec->vector[i].key); for ( d = 0; d < ndims_pageunion; d++ ) { avgCenter[d] += (GIDX_GET_MAX(box_current,d) + GIDX_GET_MIN(box_current,d)) / 2.0; } } for ( d = 0; d < ndims_pageunion; d++ ) { avgCenter[d] /= max_offset; pos[BELOW(d)] = pos[ABOVE(d)] = 0; /* Re-initialize our counters. */ POSTGIS_DEBUGF(4, "[GIST] picksplit average center point[%d] = %.12g", d, avgCenter[d]); } /* For each of our entries... */ for ( i = FirstOffsetNumber; i <= max_offset; i = OffsetNumberNext(i) ) { double center; box_current = (GIDX*) DatumGetPointer(entryvec->vector[i].key); for ( d = 0; d < ndims_pageunion; d++ ) { center = (GIDX_GET_MIN(box_current,d)+GIDX_GET_MAX(box_current,d))/2.0; if ( center < avgCenter[d] ) gserialized_gist_picksplit_addlist(list[BELOW(d)], &(box_union[BELOW(d)]), box_current, &(pos[BELOW(d)]), i); else if ( FPeq(center, avgCenter[d]) ) if ( pos[BELOW(d)] > pos[ABOVE(d)] ) gserialized_gist_picksplit_addlist(list[ABOVE(d)], &(box_union[ABOVE(d)]), box_current, &(pos[ABOVE(d)]), i); else gserialized_gist_picksplit_addlist(list[BELOW(d)], &(box_union[BELOW(d)]), box_current, &(pos[BELOW(d)]), i); else gserialized_gist_picksplit_addlist(list[ABOVE(d)], &(box_union[ABOVE(d)]), box_current, &(pos[ABOVE(d)]), i); } } /* Do we have a good disposition now? If not, screw it, just cut the node in half. */ if ( gserialized_gist_picksplit_badratios(pos,ndims_pageunion) == TRUE ) { POSTGIS_DEBUG(4, "[GIST] picksplit still cannot find a good split! just cutting the node in half"); gserialized_gist_picksplit_fallback(entryvec, v); PG_RETURN_POINTER(v); } } /* ** Now, what splitting plane gives us the most even ratio of ** entries in our child pages? Since each split region has been apportioned entries ** against the same number of total entries, the axis that has the smallest maximum ** number of entries in its regions is the most evenly distributed. ** TODO: what if the distributions are equal in two or more axes? */ for ( d = 0; d < ndims_pageunion; d++ ) { int posd = Max(pos[ABOVE(d)],pos[BELOW(d)]); if ( posd > posmax ) { direction = d; posmax = posd; } } if ( direction == -1 || posmax == -1 ) { /* ERROR OUT HERE */ elog(ERROR, "Error in building split, unable to determine split direction."); } POSTGIS_DEBUGF(3, "[GIST] 'picksplit' splitting on axis %d", direction); gserialized_gist_picksplit_constructsplit(v, list[BELOW(direction)], pos[BELOW(direction)], &(box_union[BELOW(direction)]), list[ABOVE(direction)], pos[ABOVE(direction)], &(box_union[ABOVE(direction)]) ); POSTGIS_DEBUGF(4, "[GIST] spl_ldatum: %s", gidx_to_string((GIDX*)v->spl_ldatum)); POSTGIS_DEBUGF(4, "[GIST] spl_rdatum: %s", gidx_to_string((GIDX*)v->spl_rdatum)); POSTGIS_DEBUGF(4, "[GIST] axis %d: parent range (%.12g, %.12g) left range (%.12g, %.12g), right range (%.12g, %.12g)", direction, GIDX_GET_MIN(box_pageunion, direction), GIDX_GET_MAX(box_pageunion, direction), GIDX_GET_MIN((GIDX*)v->spl_ldatum, direction), GIDX_GET_MAX((GIDX*)v->spl_ldatum, direction), GIDX_GET_MIN((GIDX*)v->spl_rdatum, direction), GIDX_GET_MAX((GIDX*)v->spl_rdatum, direction) ); PG_RETURN_POINTER(v); } /* ** The GIDX key must be defined as a PostgreSQL type, even though it is only ** ever used internally. These no-op stubs are used to bind the type. */ PG_FUNCTION_INFO_V1(gidx_in); Datum gidx_in(PG_FUNCTION_ARGS) { ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function gidx_in not implemented"))); PG_RETURN_POINTER(NULL); } PG_FUNCTION_INFO_V1(gidx_out); Datum gidx_out(PG_FUNCTION_ARGS) { ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function gidx_out not implemented"))); PG_RETURN_POINTER(NULL); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/postgis/long_xact.sql.in����������������������������������������������������0000644�0000000�0000000�00000016771�12121646322�020367� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: long_xact.sql.in 11175 2013-03-18 17:20:18Z strk $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- Copyright 2001-2003 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include "sqldefines.h" ----------------------------------------------------------------------- -- LONG TERM LOCKING ----------------------------------------------------------------------- -- UnlockRows(authid) -- removes all locks held by the given auth -- returns the number of locks released CREATE OR REPLACE FUNCTION UnlockRows(text) RETURNS int AS $$ DECLARE ret int; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION 'Long transaction support disabled, use EnableLongTransaction() to enable.'; END IF; EXECUTE 'DELETE FROM authorization_table where authid = ' || quote_literal($1); GET DIAGNOSTICS ret = ROW_COUNT; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- LockRow([schema], table, rowid, auth, [expires]) -- Returns 1 if successfully obtained the lock, 0 otherwise CREATE OR REPLACE FUNCTION LockRow(text, text, text, text, timestamp) RETURNS int AS $$ DECLARE myschema alias for $1; mytable alias for $2; myrid alias for $3; authid alias for $4; expires alias for $5; ret int; mytoid oid; myrec RECORD; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION 'Long transaction support disabled, use EnableLongTransaction() to enable.'; END IF; EXECUTE 'DELETE FROM authorization_table WHERE expires < now()'; SELECT c.oid INTO mytoid FROM pg_class c, pg_namespace n WHERE c.relname = mytable AND c.relnamespace = n.oid AND n.nspname = myschema; -- RAISE NOTICE 'toid: %', mytoid; FOR myrec IN SELECT * FROM authorization_table WHERE toid = mytoid AND rid = myrid LOOP IF myrec.authid != authid THEN RETURN 0; ELSE RETURN 1; END IF; END LOOP; EXECUTE 'INSERT INTO authorization_table VALUES ('|| quote_literal(mytoid::text)||','||quote_literal(myrid)|| ','||quote_literal(expires::text)|| ','||quote_literal(authid) ||')'; GET DIAGNOSTICS ret = ROW_COUNT; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- LockRow(schema, table, rid, authid); CREATE OR REPLACE FUNCTION LockRow(text, text, text, text) RETURNS int AS $$ SELECT LockRow($1, $2, $3, $4, now()::timestamp+'1:00'); $$ LANGUAGE 'sql' VOLATILE STRICT; -- LockRow(table, rid, authid); CREATE OR REPLACE FUNCTION LockRow(text, text, text) RETURNS int AS $$ SELECT LockRow(current_schema(), $1, $2, $3, now()::timestamp+'1:00'); $$ LANGUAGE 'sql' VOLATILE STRICT; -- LockRow(schema, table, rid, expires); CREATE OR REPLACE FUNCTION LockRow(text, text, text, timestamp) RETURNS int AS $$ SELECT LockRow(current_schema(), $1, $2, $3, $4); $$ LANGUAGE 'sql' VOLATILE STRICT; CREATE OR REPLACE FUNCTION AddAuth(text) RETURNS BOOLEAN AS $$ DECLARE lockid alias for $1; okay boolean; myrec record; BEGIN -- check to see if table exists -- if not, CREATE TEMP TABLE mylock (transid xid, lockcode text) okay := 'f'; FOR myrec IN SELECT * FROM pg_class WHERE relname = 'temp_lock_have_table' LOOP okay := 't'; END LOOP; IF (okay <> 't') THEN CREATE TEMP TABLE temp_lock_have_table (transid xid, lockcode text); -- this will only work from pgsql7.4 up -- ON COMMIT DELETE ROWS; END IF; -- INSERT INTO mylock VALUES ( $1) -- EXECUTE 'INSERT INTO temp_lock_have_table VALUES ( '|| -- quote_literal(getTransactionID()) || ',' || -- quote_literal(lockid) ||')'; INSERT INTO temp_lock_have_table VALUES (getTransactionID(), lockid); RETURN true::boolean; END; $$ LANGUAGE PLPGSQL; -- CheckAuth( <schema>, <table>, <ridcolumn> ) -- -- Returns 0 -- CREATE OR REPLACE FUNCTION CheckAuth(text, text, text) RETURNS INT AS $$ DECLARE schema text; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION 'Long transaction support disabled, use EnableLongTransaction() to enable.'; END IF; if ( $1 != '' ) THEN schema = $1; ELSE SELECT current_schema() into schema; END IF; -- TODO: check for an already existing trigger ? EXECUTE 'CREATE TRIGGER check_auth BEFORE UPDATE OR DELETE ON ' || quote_ident(schema) || '.' || quote_ident($2) ||' FOR EACH ROW EXECUTE PROCEDURE CheckAuthTrigger(' || quote_literal($3) || ')'; RETURN 0; END; $$ LANGUAGE 'plpgsql'; -- CheckAuth(<table>, <ridcolumn>) CREATE OR REPLACE FUNCTION CheckAuth(text, text) RETURNS INT AS $$ SELECT CheckAuth('', $1, $2) $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION CheckAuthTrigger() RETURNS trigger AS 'MODULE_PATHNAME', 'check_authorization' LANGUAGE C; CREATE OR REPLACE FUNCTION GetTransactionID() RETURNS xid AS 'MODULE_PATHNAME', 'getTransactionID' LANGUAGE C; -- -- Enable Long transactions support -- -- Creates the authorization_table if not already existing -- CREATE OR REPLACE FUNCTION EnableLongTransactions() RETURNS TEXT AS $$ DECLARE "query" text; exists bool; rec RECORD; BEGIN exists = 'f'; FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorization_table' LOOP exists = 't'; END LOOP; IF NOT exists THEN "query" = 'CREATE TABLE authorization_table ( toid oid, -- table oid rid text, -- row id expires timestamp, authid text )'; EXECUTE "query"; END IF; exists = 'f'; FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorized_tables' LOOP exists = 't'; END LOOP; IF NOT exists THEN "query" = 'CREATE VIEW authorized_tables AS ' || 'SELECT ' || 'n.nspname as schema, ' || 'c.relname as table, trim(' || quote_literal(chr(92) || '000') || ' from t.tgargs) as id_column ' || 'FROM pg_trigger t, pg_class c, pg_proc p ' || ', pg_namespace n ' || 'WHERE p.proname = ' || quote_literal('checkauthtrigger') || ' AND c.relnamespace = n.oid' || ' AND t.tgfoid = p.oid and t.tgrelid = c.oid'; EXECUTE "query"; END IF; RETURN 'Long transactions support enabled'; END; $$ LANGUAGE 'plpgsql'; -- -- Check if Long transactions support is enabled -- CREATE OR REPLACE FUNCTION LongTransactionsEnabled() RETURNS bool AS $$ DECLARE rec RECORD; BEGIN FOR rec IN SELECT oid FROM pg_class WHERE relname = 'authorized_tables' LOOP return 't'; END LOOP; return 'f'; END; $$ LANGUAGE 'plpgsql'; -- -- Disable Long transactions support -- -- (1) Drop any long_xact trigger -- (2) Drop the authorization_table -- (3) KEEP the authorized_tables view -- CREATE OR REPLACE FUNCTION DisableLongTransactions() RETURNS TEXT AS $$ DECLARE rec RECORD; BEGIN -- -- Drop all triggers applied by CheckAuth() -- FOR rec IN SELECT c.relname, t.tgname, t.tgargs FROM pg_trigger t, pg_class c, pg_proc p WHERE p.proname = 'checkauthtrigger' and t.tgfoid = p.oid and t.tgrelid = c.oid LOOP EXECUTE 'DROP TRIGGER ' || quote_ident(rec.tgname) || ' ON ' || quote_ident(rec.relname); END LOOP; -- -- Drop the authorization_table table -- FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorization_table' LOOP DROP TABLE authorization_table; END LOOP; -- -- Drop the authorized_tables view -- FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorized_tables' LOOP DROP VIEW authorized_tables; END LOOP; RETURN 'Long transactions support disabled'; END; $$ LANGUAGE 'plpgsql'; --------------------------------------------------------------- -- END --------------------------------------------------------------- �������postgis-2.1.2+dfsg.orig/java/�����������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�014504� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015406� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/build.xml���������������������������������������������������������0000644�0000000�0000000�00000012134�12025606345�017230� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <!-- * build file * * PostGIS JDBC driver * * (C) 2007 Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> * Rewritten on 2012 by Maria Arias de Reyna <delawen@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * Usage: ant build --> <project name="postgis-jdbc-driver" default="all" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant"> <!-- Global properties --> <property name="stubsrc" value="stubs"/> <property name="stubbuild" value="stubbin"/> <property name="src" value="src"/> <property name="build" value="bin"/> <property name="javadocbuild" value="javadoc-build"/> <property name="javadoczip" value="postgis-jdbc-javadoc.zip"/> <property name="regresslog" value="test.log"/> <property name="pgdefaultjar" value="/usr/share/java/postgresql.jar"/> <property name="versioninfo" value="../../Version.config"/> <!-- Environment variables --> <property environment="env"/> <!-- Load in the version information from Version.config --> <property file="${versioninfo}"/> <property name="postgis_version" value="${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}"/> <path id="regressclasspath"> <pathelement path="${pgdefaultjar}"/> <pathelement path="${classpath}"/> <pathelement location="postgis_${postgis_version}.jar"/> </path> <!-- Loading Maven dependencies --> <mkdir dir="lib"/> <get src="http://www.apache.org/dist/maven/ant-tasks/2.1.3/binaries/maven-ant-tasks-2.1.3.jar" dest="lib/maven-ant-tasks-2.1.3.jar"/> <path id="maven-ant-tasks.classpath" path="lib/maven-ant-tasks-2.1.3.jar" /> <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" /> <target name="build"> <artifact:mvn pom="pom.xml"> <arg value="package"/> </artifact:mvn> </target> <target name="all" depends="build"/> <target name="clean"> <artifact:mvn pom="pom.xml"> <arg value="clean"/> </artifact:mvn> </target> <target name="distclean" depends="clean"> <delete dir="${user.home}/.m2/repository/"/> <delete dir="lib"/> </target> <target name="check"> <artifact:mvn pom="pom.xml"> <arg value="test"/> </artifact:mvn> </target> <!-- Extra targets --> <!-- Offline regression tests --> <target name="offline-regression" depends="boxtestoffline-regression, ptestoffline-regression, test-regression"/> <target name="boxtestoffline-regression"> <java classname="examples.TestBoxes" fork="true" output="${regresslog}" error="${regresslog}.err" append="true"> <arg value="offline"/> <classpath refid="regressclasspath"/> </java> <!-- Show any errors --> <loadfile property="stderr" srcfile="${regresslog}.err"/> <echo message="${stderr}"/> <delete> <fileset dir="." includes="${regresslog}.err"/> </delete> </target> <target name="ptestoffline-regression"> <java classname="examples.TestParser" fork="true" output="${regresslog}" error="${regresslog}.err" append="true"> <arg value="offline"/> <classpath refid="regressclasspath"/> </java> <!-- Show any errors --> <loadfile property="stderr" srcfile="${regresslog}.err"/> <echo message="${stderr}"/> <delete> <fileset dir="." includes="${regresslog}.err"/> </delete> </target> <target name="test-regression"> <java classname="examples.Test" fork="true" output="${regresslog}" error="${regresslog}.err" append="true"> <arg value="offline"/> <classpath refid="regressclasspath"/> </java> <!-- Show any errors --> <loadfile property="stderr" srcfile="${regresslog}.err"/> <echo message="${stderr}"/> <delete> <fileset dir="." includes="${regresslog}.err"/> </delete> </target> <!-- Documentation --> <target name="javadoc" depends="build"> <javadoc sourcepath="${src}" destdir="${javadocbuild}"> <package name="org.postgis"/> <package name="org.postgis.jts"/> <package name="org.postgis.binary"/> <package name="org.postgis.java2d"/> <package name="examples"/> </javadoc> </target> <target name="javadoc-compress" depends="javadoc"> <!-- Compress the documentation into a single ZIP file --> <zip basedir="${javadocbuild}" destfile="${javadoczip}"/> </target> </project> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/COPYING_LGPL������������������������������������������������������0000644�0000000�0000000�00000063640�11722777314�017300� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/stubs/������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016546� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/stubs/LICENSE�����������������������������������������������������0000644�0000000�0000000�00000003006�11722777314�017562� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Copyright (c) 1997-2005, PostgreSQL Global Development Group All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the PostgreSQL Global Development Group nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/stubs/org/��������������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�017335� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/stubs/org/postgresql/���������������������������������������������0000755�0000000�0000000�00000000000�12315456223�021540� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/stubs/org/postgresql/PGConnection.java����������������������������0000644�0000000�0000000�00000001412�11722777314�024737� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*------------------------------------------------------------------------- * Derived from org.postgresql.PGConnection from jdbc8.0 which is licensed * under BSD license. * * Copyright (c) 2003-2005, PostgreSQL Global Development Group * Copyright (c) 2005 Markus Schaber <markus.schaber@logix-tt.com> * * IDENTIFICATION * $PostgreSQL: pgjdbc/org/postgresql/PGConnection.java,v 1.13 2005/01/17 09:51:40 jurka Exp $ * *------------------------------------------------------------------------- */ package org.postgresql; import java.sql.SQLException; /** * Stub to compile postgis jdbc against */ public interface PGConnection { public void addDataType(String type, String name); public void addDataType(String type, Class klass) throws SQLException; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/stubs/org/postgresql/Connection.java������������������������������0000644�0000000�0000000�00000001335�11722777314�024514� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*------------------------------------------------------------------------- * Derived from org.postgresql.PGConnection Source from jdbc8.0 as well as * the pgjdbc 7.2 binary jar which both are licensed under BSD license. * * Copyright (c) 2003-2005, PostgreSQL Global Development Group * Copyright (c) 2005 Markus Schaber <markus.schaber@logix-tt.com> * * IDENTIFICATION * $PostgreSQL: pgjdbc/org/postgresql/PGConnection.java,v 1.13 2005/01/17 09:51:40 jurka Exp $ * *------------------------------------------------------------------------- */ package org.postgresql; /** * Stub to compile postgis jdbc against */ public abstract class Connection { public abstract void addDataType(String type, String name); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/�����������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016716� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/�������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017505� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/�����������������������������������������������0000755�0000000�0000000�00000000000�12315456223�021175� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/jts/�������������������������������������������0000755�0000000�0000000�00000000000�12315456223�021775� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/jts/JtsWrapper.java����������������������������0000644�0000000�0000000�00000012205�11722777314�024751� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsWrapper.java * * Allows transparent usage of JTS Geometry classes via PostgreSQL JDBC driver * connected to a PostGIS enabled PostgreSQL server. * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: JtsWrapper.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.jts; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import org.postgresql.Driver; import org.postgresql.PGConnection; /** * DriverWrapper * * Wraps the PostGreSQL Driver to add the JTS/PostGIS Object Classes. * * This method currently works with J2EE DataSource implementations, and with * DriverManager framework. * * Simply replace the "jdbc:postgresql:" with a "jdbc:postgres_jts:" in the jdbc * URL. * * When using the drivermanager, you need to initialize JtsWrapper instead of * (or in addition to) org.postgresql.Driver. When using a J2EE DataSource * implementation, set the driver class property in the datasource config, the * following works for jboss: * * <driver-class>org.postgis.jts.PostGisWrapper</driver-class> * * @author markus.schaber@logix-tt.com * */ public class JtsWrapper extends Driver { protected static final Logger logger = Logger.getLogger("org.postgis.DriverWrapper"); private static final String POSTGRES_PROTOCOL = "jdbc:postgresql:"; private static final String POSTGIS_PROTOCOL = "jdbc:postgres_jts:"; public static final String REVISION = "$Revision: 9324 $"; public JtsWrapper() { super(); } static { try { // Try to register ourself to the DriverManager java.sql.DriverManager.registerDriver(new JtsWrapper()); } catch (SQLException e) { logger.log(Level.WARNING, "Error registering PostgreSQL Jts Wrapper Driver", e); } } /** * Creates a postgresql connection, and then adds the JTS GIS data types to * it calling addpgtypes() * * @param url the URL of the database to connect to * @param info a list of arbitrary tag/value pairs as connection arguments * @return a connection to the URL or null if it isnt us * @exception SQLException if a database access error occurs * * @see java.sql.Driver#connect * @see org.postgresql.Driver */ public java.sql.Connection connect(String url, Properties info) throws SQLException { url = mangleURL(url); Connection result = super.connect(url, info); addGISTypes((PGConnection) result); return result; } /** * adds the JTS/PostGIS Data types to a PG Connection. * @throws SQLException */ public static void addGISTypes(PGConnection pgconn) throws SQLException { pgconn.addDataType("geometry", org.postgis.jts.JtsGeometry.class); } /** * Mangles the PostGIS URL to return the original PostGreSQL URL */ public static String mangleURL(String url) throws SQLException { if (url.startsWith(POSTGIS_PROTOCOL)) { return POSTGRES_PROTOCOL + url.substring(POSTGIS_PROTOCOL.length()); } else { throw new SQLException("Unknown protocol or subprotocol in url " + url); } } /** * Check whether the driver thinks he can handle the given URL. * * @see java.sql.Driver#acceptsURL * @param url the URL of the driver * @return true if this driver accepts the given URL * @exception SQLException Passed through from the underlying PostgreSQL * driver, should not happen. */ public boolean acceptsURL(String url) throws SQLException { try { url = mangleURL(url); } catch (SQLException e) { return false; } return super.acceptsURL(url); } /** * Gets the underlying drivers major version number * * @return the drivers major version number */ public int getMajorVersion() { return super.getMajorVersion(); } /** * Get the underlying drivers minor version number * * @return the drivers minor version number */ public int getMinorVersion() { return super.getMinorVersion(); } /** * Returns our own CVS version plus postgres Version */ public static String getVersion() { return "JtsGisWrapper " + REVISION + ", wrapping " + Driver.getVersion(); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/jts/JTSShape.java������������������������������0000644�0000000�0000000�00000021674�11722777314�024303� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������package org.postgis.jts; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.PathIterator; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LinearRing; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence; public class JTSShape implements Shape { static GeometryFactory fac = new GeometryFactory(); Geometry geom; final static LinearRing[] NOSHELLS = {}; public JTSShape(Geometry _geom) { this.geom = _geom; } public JTSShape(JtsGeometry _geom) { this(_geom.getGeometry()); } public boolean contains(Point2D p) { return contains(p.getX(), p.getY()); } public boolean contains(double x, double y) { Coordinate c = new Coordinate(x, y); Point p = fac.createPoint(c); return geom.contains(p); } public boolean contains(Rectangle2D r) { return contains(r.getMinX(), r.getMinY(), r.getWidth(), r.getHeight()); } public boolean contains(double x, double y, double w, double h) { Polygon p = createRect(x, y, w, h); return geom.contains(p); } protected Polygon createRect(double x, double y, double w, double h) { double[] arr = { x, y, x + w, y, x + w, y + h, x, y + h, x, y }; PackedCoordinateSequence shell = new PackedCoordinateSequence.Double(arr, 2); Polygon p = fac.createPolygon(fac.createLinearRing(shell), NOSHELLS); return p; } public Rectangle2D getBounds2D() { Envelope env = geom.getEnvelopeInternal(); return new Rectangle2D.Double(env.getMinX(), env.getMaxX(), env.getWidth(), env.getHeight()); } public Rectangle getBounds() { // We deal simple code for efficiency here, the getBounds() rounding // rules are ugly... return getBounds2D().getBounds(); } public PathIterator getPathIterator(AffineTransform at) { return getPathIterator(geom, at); } public PathIterator getPathIterator(AffineTransform at, double flatness) { // we don't have much work here, as we only have linear segments, no // "flattening" necessary. return getPathIterator(at); } public boolean intersects(Rectangle2D r) { return intersects(r.getMinX(), r.getMinY(), r.getWidth(), r.getHeight()); } public boolean intersects(double x, double y, double w, double h) { Polygon p = createRect(x, y, w, h); return geom.intersects(p); } public static GeometryPathIterator getPathIterator(Geometry geometry, AffineTransform _at) { if (geometry instanceof Point) { return new PointPathIterator((Point) geometry, _at); } else if (geometry instanceof LineString) { return new LineStringPathIterator((LineString) geometry, _at); } else if (geometry instanceof Polygon) { return new PolygonPathIterator((Polygon) geometry, _at); } else { return new GeometryCollectionPathIterator((GeometryCollection) geometry, _at); } } public static abstract class GeometryPathIterator implements PathIterator { protected final AffineTransform at; protected int index=0; GeometryPathIterator(AffineTransform _at) { this.at = _at; } public final int getWindingRule() { return PathIterator.WIND_EVEN_ODD; } public void next() { index++; } } public static class PointPathIterator extends GeometryPathIterator { final Point p; public PointPathIterator(Point _p, AffineTransform _at) { super(_at); p = _p; } public int currentSegment(float[] coords) { switch (index) { case 0: coords[0] = (float) p.getX(); coords[1] = (float) p.getY(); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_MOVETO; case 1: return PathIterator.SEG_CLOSE; default: throw new IllegalStateException(); } } public int currentSegment(double[] coords) { switch (index) { case 0: coords[0] = p.getX(); coords[1] = p.getY(); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_MOVETO; case 1: return PathIterator.SEG_CLOSE; default: throw new IllegalStateException(); } } public boolean isDone() { return index > 1; } } public static class LineStringPathIterator extends GeometryPathIterator { CoordinateSequence cs; final boolean isRing; public LineStringPathIterator(LineString ls, AffineTransform _at) { super(_at); cs = ls.getCoordinateSequence(); isRing = ls instanceof LinearRing; } /** only to be called from PolygonPathIterator subclass */ protected void reInit(CoordinateSequence _cs) { cs = _cs; index=0; } public int currentSegment(float[] coords) { if (index == 0) { coords[0] = (float) cs.getOrdinate(index, 0); coords[1] = (float) cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_MOVETO; } else if (index < cs.size()) { coords[0] = (float) cs.getOrdinate(index, 0); coords[1] = (float) cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_LINETO; } else if (isRing && index == cs.size()) { return PathIterator.SEG_CLOSE; } else { throw new IllegalStateException(); } } public int currentSegment(double[] coords) { if (index == 0) { coords[0] = cs.getOrdinate(index, 0); coords[1] = cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_MOVETO; } else if (index < cs.size()) { coords[0] = cs.getOrdinate(index, 0); coords[1] = cs.getOrdinate(index, 1); at.transform(coords, 0, coords, 0, 1); return PathIterator.SEG_LINETO; } else if (isRing && index == cs.size()) { return PathIterator.SEG_CLOSE; } else { throw new IllegalStateException(); } } public boolean isDone() { return isRing ? index > cs.size() : index >= cs.size(); } } public static class PolygonPathIterator extends LineStringPathIterator { final Polygon pg; int outerindex=-1; public PolygonPathIterator(Polygon _pg, AffineTransform _at) { super(_pg.getExteriorRing() ,_at); pg=_pg; index = -1; } public boolean isDone() { return outerindex >= pg.getNumInteriorRing(); } public void next() { super.next(); if (super.isDone()) { outerindex++; if (outerindex < pg.getNumInteriorRing()) { super.reInit(pg.getInteriorRingN(outerindex).getCoordinateSequence()); } } } } public static class GeometryCollectionPathIterator extends GeometryPathIterator { final GeometryCollection coll; GeometryPathIterator current; public GeometryCollectionPathIterator(GeometryCollection _coll, AffineTransform _at) { super(_at); coll = _coll; current = getPathIterator(coll.getGeometryN(index), _at); } public boolean isDone() { return index > coll.getNumGeometries(); } public void next() { current.next(); if (current.isDone()) { index++; if (index < coll.getNumGeometries()) { current = getPathIterator(coll.getGeometryN(index), at); } } } public int currentSegment(float[] coords) { return current.currentSegment(coords); } public int currentSegment(double[] coords) { return current.currentSegment(coords); } } } ��������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryWriter.java�����������������������0000644�0000000�0000000�00000033345�11722777314�025762� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsBinaryWriter.java * * PostGIS extension for PostgreSQL JDBC driver - Binary Writer * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: JtsBinaryWriter.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.jts; import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.MultiLineString; import com.vividsolutions.jts.geom.MultiPoint; import com.vividsolutions.jts.geom.MultiPolygon; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; import org.postgis.binary.ByteSetter; import org.postgis.binary.ValueSetter; /** * Create binary representation of geometries. Currently, only text rep (hexed) * implementation is tested. Supports only 2 dimensional geometries. * * It should be easy to add char[] and CharSequence ByteGetter instances, * although the latter one is not compatible with older jdks. * * I did not implement real unsigned 32-bit integers or emulate them with long, * as both java Arrays and Strings currently can have only 2^31-1 elements * (bytes), so we cannot even get or build Geometries with more than approx. * 2^28 coordinates (8 bytes each). * * @author markus.schaber@logi-track.com * */ public class JtsBinaryWriter { /** * Get the appropriate ValueGetter for my endianness * * @param bytes * The appropriate Byte Getter * * @return the ValueGetter */ public static ValueSetter valueSetterForEndian(ByteSetter bytes, byte endian) { if (endian == ValueSetter.XDR.NUMBER) { // XDR return new ValueSetter.XDR(bytes); } else if (endian == ValueSetter.NDR.NUMBER) { return new ValueSetter.NDR(bytes); } else { throw new IllegalArgumentException("Unknown Endian type:" + endian); } } /** * Write a hex encoded geometry * * Currently, geometries with more than 2 dimensions and measures are not * cleanly supported, but SRID is honored. */ public String writeHexed(Geometry geom, byte REP) { int length = estimateBytes(geom); ByteSetter.StringByteSetter bytes = new ByteSetter.StringByteSetter(length); writeGeometry(geom, valueSetterForEndian(bytes, REP)); return bytes.result(); } public String writeHexed(Geometry geom) { return writeHexed(geom, ValueSetter.NDR.NUMBER); } /** * Write a binary encoded geometry. * * Currently, geometries with more than 2 dimensions and measures are not * cleanly supported, but SRID is honored. */ public byte[] writeBinary(Geometry geom, byte REP) { int length = estimateBytes(geom); ByteSetter.BinaryByteSetter bytes = new ByteSetter.BinaryByteSetter(length); writeGeometry(geom, valueSetterForEndian(bytes, REP)); return bytes.result(); } public byte[] writeBinary(Geometry geom) { return writeBinary(geom, ValueSetter.NDR.NUMBER); } /** Parse a geometry starting at offset. */ protected void writeGeometry(Geometry geom, ValueSetter dest) { final int dimension; if (geom == null) { throw new NullPointerException(); } else if (geom.isEmpty()) { // don't set any flag bits dimension = 0; } else { dimension = getCoordDim(geom); if (dimension < 2 || dimension > 4) { throw new IllegalArgumentException("Unsupported geometry dimensionality: " + dimension); } } // write endian flag dest.setByte(dest.endian); // write typeword final int plaintype = getWKBType(geom); int typeword = plaintype; if (dimension == 3 || dimension == 4) { typeword |= 0x80000000; } if (dimension == 4) { typeword |= 0x40000000; } final boolean haveSrid = checkSrid(geom); if (haveSrid) { typeword |= 0x20000000; } dest.setInt(typeword); if (haveSrid) { dest.setInt(geom.getSRID()); } switch (plaintype) { case org.postgis.Geometry.POINT: writePoint((Point) geom, dest); break; case org.postgis.Geometry.LINESTRING: writeLineString((LineString) geom, dest); break; case org.postgis.Geometry.POLYGON: writePolygon((Polygon) geom, dest); break; case org.postgis.Geometry.MULTIPOINT: writeMultiPoint((MultiPoint) geom, dest); break; case org.postgis.Geometry.MULTILINESTRING: writeMultiLineString((MultiLineString) geom, dest); break; case org.postgis.Geometry.MULTIPOLYGON: writeMultiPolygon((MultiPolygon) geom, dest); break; case org.postgis.Geometry.GEOMETRYCOLLECTION: writeCollection((GeometryCollection) geom, dest); break; default: throw new IllegalArgumentException("Unknown Geometry Type: " + plaintype); } } public static int getWKBType(Geometry geom) { // We always write emtpy geometries as emtpy collections - for OpenGIS // conformance if (geom.isEmpty()) { return org.postgis.Geometry.GEOMETRYCOLLECTION; } else if (geom instanceof Point) { return org.postgis.Geometry.POINT; } else if (geom instanceof com.vividsolutions.jts.geom.LineString) { return org.postgis.Geometry.LINESTRING; } else if (geom instanceof com.vividsolutions.jts.geom.Polygon) { return org.postgis.Geometry.POLYGON; } else if (geom instanceof MultiPoint) { return org.postgis.Geometry.MULTIPOINT; } else if (geom instanceof MultiLineString) { return org.postgis.Geometry.MULTILINESTRING; } else if (geom instanceof com.vividsolutions.jts.geom.MultiPolygon) { return org.postgis.Geometry.MULTIPOLYGON; } if (geom instanceof com.vividsolutions.jts.geom.GeometryCollection) { return org.postgis.Geometry.GEOMETRYCOLLECTION; } else { throw new IllegalArgumentException("Unknown Geometry Type: " + geom.getClass().getName()); } } /** * Writes a "slim" Point (without endiannes, srid ant type, only the * ordinates and measure. Used by writeGeometry. */ private void writePoint(Point geom, ValueSetter dest) { writeCoordinates(geom.getCoordinateSequence(), getCoordDim(geom), dest); } /** * Write a Coordinatesequence, part of LinearRing and Linestring, but not * MultiPoint! */ private void writeCoordinates(CoordinateSequence seq, int dims, ValueSetter dest) { for (int i = 0; i < seq.size(); i++) { for (int d = 0; d < dims; d++) { dest.setDouble(seq.getOrdinate(i, d)); } } } private void writeMultiPoint(MultiPoint geom, ValueSetter dest) { dest.setInt(geom.getNumPoints()); for (int i = 0; i < geom.getNumPoints(); i++) { writeGeometry(geom.getGeometryN(i), dest); } } private void writeLineString(LineString geom, ValueSetter dest) { dest.setInt(geom.getNumPoints()); writeCoordinates(geom.getCoordinateSequence(), getCoordDim(geom), dest); } private void writePolygon(Polygon geom, ValueSetter dest) { dest.setInt(geom.getNumInteriorRing() + 1); writeLineString(geom.getExteriorRing(), dest); for (int i = 0; i < geom.getNumInteriorRing(); i++) { writeLineString(geom.getInteriorRingN(i), dest); } } private void writeMultiLineString(MultiLineString geom, ValueSetter dest) { writeGeometryArray(geom, dest); } private void writeMultiPolygon(MultiPolygon geom, ValueSetter dest) { writeGeometryArray(geom, dest); } private void writeCollection(GeometryCollection geom, ValueSetter dest) { writeGeometryArray(geom, dest); } private void writeGeometryArray(Geometry geom, ValueSetter dest) { dest.setInt(geom.getNumGeometries()); for (int i = 0; i < geom.getNumGeometries(); i++) { writeGeometry(geom.getGeometryN(i), dest); } } /** Estimate how much bytes a geometry will need in WKB. */ protected int estimateBytes(Geometry geom) { int result = 0; // write endian flag result += 1; // write typeword result += 4; if (checkSrid(geom)) { result += 4; } switch (getWKBType(geom)) { case org.postgis.Geometry.POINT: result += estimatePoint((Point) geom); break; case org.postgis.Geometry.LINESTRING: result += estimateLineString((LineString) geom); break; case org.postgis.Geometry.POLYGON: result += estimatePolygon((Polygon) geom); break; case org.postgis.Geometry.MULTIPOINT: result += estimateMultiPoint((MultiPoint) geom); break; case org.postgis.Geometry.MULTILINESTRING: result += estimateMultiLineString((MultiLineString) geom); break; case org.postgis.Geometry.MULTIPOLYGON: result += estimateMultiPolygon((MultiPolygon) geom); break; case org.postgis.Geometry.GEOMETRYCOLLECTION: result += estimateCollection((GeometryCollection) geom); break; default: throw new IllegalArgumentException("Unknown Geometry Type: " + getWKBType(geom)); } return result; } private boolean checkSrid(Geometry geom) { final int srid = geom.getSRID(); return (srid > 0); } private int estimatePoint(Point geom) { return 8 * getCoordDim(geom); } /** Write an Array of "full" Geometries */ private int estimateGeometryArray(Geometry container) { int result = 0; for (int i = 0; i < container.getNumGeometries(); i++) { result += estimateBytes(container.getGeometryN(i)); } return result; } /** Estimate an array of "fat" Points */ private int estimateMultiPoint(MultiPoint geom) { // int size int result = 4; if (geom.getNumGeometries() > 0) { // We can shortcut here, compared to estimateGeometryArray, as all // subgeoms have the same fixed size result += geom.getNumGeometries() * estimateBytes(geom.getGeometryN(0)); } return result; } private int estimateLineString(LineString geom) { if (geom == null || geom.getNumGeometries() == 0) { return 0; } else { return 4 + 8 * getCoordSequenceDim(geom.getCoordinateSequence()) * geom.getCoordinateSequence().size(); } } private int estimatePolygon(Polygon geom) { // int length int result = 4; result += estimateLineString(geom.getExteriorRing()); for (int i = 0; i < geom.getNumInteriorRing(); i++) { result += estimateLineString(geom.getInteriorRingN(i)); } return result; } private int estimateMultiLineString(MultiLineString geom) { // 4-byte count + subgeometries return 4 + estimateGeometryArray(geom); } private int estimateMultiPolygon(MultiPolygon geom) { // 4-byte count + subgeometries return 4 + estimateGeometryArray(geom); } private int estimateCollection(GeometryCollection geom) { // 4-byte count + subgeometries return 4 + estimateGeometryArray(geom); } public static final int getCoordDim(Geometry geom) { if (geom.isEmpty()) { return 0; } if (geom instanceof Point) { return getCoordSequenceDim(((Point) geom).getCoordinateSequence()); } else if (geom instanceof LineString) { return getCoordSequenceDim(((LineString) geom).getCoordinateSequence()); } else if (geom instanceof Polygon) { return getCoordSequenceDim(((Polygon) geom).getExteriorRing().getCoordinateSequence()); } else { return getCoordDim(geom.getGeometryN(0)); } } public static final int getCoordSequenceDim(CoordinateSequence coords) { if (coords == null || coords.size() == 0) return 0; // JTS has a really strange way to handle dimensions! // Just have a look at PackedCoordinateSequence and // CoordinateArraySequence int dimensions = coords.getDimension(); if (dimensions == 3) { // CoordinateArraySequence will always return 3, so we have to // check, if // the third ordinate contains NaN, then the geom is actually // 2-dimensional return Double.isNaN(coords.getOrdinate(0, CoordinateSequence.Z)) ? 2 : 3; } else { return dimensions; } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/jts/JtsBinaryParser.java�����������������������0000644�0000000�0000000�00000020770�11722777314�025740� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsBinaryParser.java * * Binary Parser for JTS - relies on org.postgis V1.0.0+ package. * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: JtsBinaryParser.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.jts; import org.postgis.binary.ByteGetter; import org.postgis.binary.ValueGetter; import org.postgis.binary.ByteGetter.BinaryByteGetter; import org.postgis.binary.ByteGetter.StringByteGetter; import com.vividsolutions.jts.geom.*; import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence; /** * Parse binary representation of geometries. Currently, only text rep (hexed) * implementation is tested. * * It should be easy to add char[] and CharSequence ByteGetter instances, * although the latter one is not compatible with older jdks. * * I did not implement real unsigned 32-bit integers or emulate them with long, * as both java Arrays and Strings currently can have only 2^31-1 elements * (bytes), so we cannot even get or build Geometries with more than approx. * 2^28 coordinates (8 bytes each). * * @author Markus Schaber, markus.schaber@logix-tt.com * */ public class JtsBinaryParser { /** * Get the appropriate ValueGetter for my endianness * * @param bytes * The appropriate Byte Getter * * @return the ValueGetter */ public static ValueGetter valueGetterForEndian(ByteGetter bytes) { if (bytes.get(0) == ValueGetter.XDR.NUMBER) { // XDR return new ValueGetter.XDR(bytes); } else if (bytes.get(0) == ValueGetter.NDR.NUMBER) { return new ValueGetter.NDR(bytes); } else { throw new IllegalArgumentException("Unknown Endian type:" + bytes.get(0)); } } /** * Parse a hex encoded geometry */ public Geometry parse(String value) { StringByteGetter bytes = new ByteGetter.StringByteGetter(value); return parseGeometry(valueGetterForEndian(bytes)); } /** * Parse a binary encoded geometry. */ public Geometry parse(byte[] value) { BinaryByteGetter bytes = new ByteGetter.BinaryByteGetter(value); return parseGeometry(valueGetterForEndian(bytes)); } /** Parse a geometry starting at offset. */ protected Geometry parseGeometry(ValueGetter data) { return parseGeometry(data, 0, false); } /** Parse with a known geometry factory */ protected Geometry parseGeometry(ValueGetter data, int srid, boolean inheritSrid) { byte endian = data.getByte(); // skip and test endian flag if (endian != data.endian) { throw new IllegalArgumentException("Endian inconsistency!"); } int typeword = data.getInt(); int realtype = typeword & 0x1FFFFFFF; // cut off high flag bits boolean haveZ = (typeword & 0x80000000) != 0; boolean haveM = (typeword & 0x40000000) != 0; boolean haveS = (typeword & 0x20000000) != 0; if (haveS) { int newsrid = org.postgis.Geometry.parseSRID(data.getInt()); if (inheritSrid && newsrid != srid) { throw new IllegalArgumentException("Inconsistent srids in complex geometry: " + srid + ", " + newsrid); } else { srid = newsrid; } } else if (!inheritSrid) { srid = org.postgis.Geometry.UNKNOWN_SRID; } Geometry result; switch (realtype) { case org.postgis.Geometry.POINT: result = parsePoint(data, haveZ, haveM); break; case org.postgis.Geometry.LINESTRING: result = parseLineString(data, haveZ, haveM); break; case org.postgis.Geometry.POLYGON: result = parsePolygon(data, haveZ, haveM, srid); break; case org.postgis.Geometry.MULTIPOINT: result = parseMultiPoint(data, srid); break; case org.postgis.Geometry.MULTILINESTRING: result = parseMultiLineString(data, srid); break; case org.postgis.Geometry.MULTIPOLYGON: result = parseMultiPolygon(data, srid); break; case org.postgis.Geometry.GEOMETRYCOLLECTION: result = parseCollection(data, srid); break; default: throw new IllegalArgumentException("Unknown Geometry Type!"); } result.setSRID(srid); return result; } private Point parsePoint(ValueGetter data, boolean haveZ, boolean haveM) { double X = data.getDouble(); double Y = data.getDouble(); Point result; if (haveZ) { double Z = data.getDouble(); result = JtsGeometry.geofac.createPoint(new Coordinate(X, Y, Z)); } else { result = JtsGeometry.geofac.createPoint(new Coordinate(X, Y)); } if (haveM) { // skip M value data.getDouble(); } return result; } /** Parse an Array of "full" Geometries */ private void parseGeometryArray(ValueGetter data, Geometry[] container, int srid) { for (int i = 0; i < container.length; i++) { container[i] = parseGeometry(data, srid, true); } } /** * Parse an Array of "slim" Points (without endianness and type, part of * LinearRing and Linestring, but not MultiPoint! * * @param haveZ * @param haveM */ private CoordinateSequence parseCS(ValueGetter data, boolean haveZ, boolean haveM) { int count = data.getInt(); int dims = haveZ ? 3 : 2; CoordinateSequence cs = new PackedCoordinateSequence.Double(count, dims); for (int i = 0; i < count; i++) { for (int d = 0; d < dims; d++) { cs.setOrdinate(i, d, data.getDouble()); } if (haveM) { // skip M value data.getDouble(); } } return cs; } private MultiPoint parseMultiPoint(ValueGetter data, int srid) { Point[] points = new Point[data.getInt()]; parseGeometryArray(data, points, srid); return JtsGeometry.geofac.createMultiPoint(points); } private LineString parseLineString(ValueGetter data, boolean haveZ, boolean haveM) { return JtsGeometry.geofac.createLineString(parseCS(data, haveZ, haveM)); } private LinearRing parseLinearRing(ValueGetter data, boolean haveZ, boolean haveM) { return JtsGeometry.geofac.createLinearRing(parseCS(data, haveZ, haveM)); } private Polygon parsePolygon(ValueGetter data, boolean haveZ, boolean haveM, int srid) { int holecount = data.getInt() - 1; LinearRing[] rings = new LinearRing[holecount]; LinearRing shell = parseLinearRing(data, haveZ, haveM); shell.setSRID(srid); for (int i = 0; i < holecount; i++) { rings[i] = parseLinearRing(data, haveZ, haveM); rings[i].setSRID(srid); } return JtsGeometry.geofac.createPolygon(shell, rings); } private MultiLineString parseMultiLineString(ValueGetter data, int srid) { int count = data.getInt(); LineString[] strings = new LineString[count]; parseGeometryArray(data, strings, srid); return JtsGeometry.geofac.createMultiLineString(strings); } private MultiPolygon parseMultiPolygon(ValueGetter data, int srid) { int count = data.getInt(); Polygon[] polys = new Polygon[count]; parseGeometryArray(data, polys, srid); return JtsGeometry.geofac.createMultiPolygon(polys); } private GeometryCollection parseCollection(ValueGetter data, int srid) { int count = data.getInt(); Geometry[] geoms = new Geometry[count]; parseGeometryArray(data, geoms, srid); return JtsGeometry.geofac.createGeometryCollection(geoms); } } ��������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/jts/JtsGeometry.java���������������������������0000644�0000000�0000000�00000012102�11722777314�025120� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsGeometry.java * * Wrapper for PostgreSQL JDBC driver to allow transparent reading and writing * of JTS geometries * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: JtsGeometry.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.jts; import java.sql.SQLException; import org.postgresql.util.PGobject; import com.vividsolutions.jts.geom.CoordinateSequenceFactory; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Polygon; import com.vividsolutions.jts.geom.PrecisionModel; import com.vividsolutions.jts.geom.impl.PackedCoordinateSequenceFactory; import com.vividsolutions.jts.io.WKTReader; /** * JTS Geometry SQL wrapper. Supports PostGIS 1.x (lwgeom hexwkb) for writing * and both PostGIS 0.x (EWKT) and 1.x (lwgeom hexwkb) for reading. * * @author Markus Schaber */ public class JtsGeometry extends PGobject { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; Geometry geom; final static JtsBinaryParser bp = new JtsBinaryParser(); final static JtsBinaryWriter bw = new JtsBinaryWriter(); final static PrecisionModel prec = new PrecisionModel(); final static CoordinateSequenceFactory csfac = PackedCoordinateSequenceFactory.DOUBLE_FACTORY; final static GeometryFactory geofac = new GeometryFactory(prec, 0, csfac); static final WKTReader reader = new WKTReader(geofac); /** Constructor called by JDBC drivers */ public JtsGeometry() { setType("geometry"); } public JtsGeometry(Geometry geom) { this(); this.geom = geom; } public JtsGeometry(String value) throws SQLException { this(); setValue(value); } public void setValue(String value) throws SQLException { geom = geomFromString(value); } public static Geometry geomFromString(String value) throws SQLException { try { value = value.trim(); if (value.startsWith("00") || value.startsWith("01")) { return bp.parse(value); } else { Geometry result; // no srid := 0 in JTS world int srid = 0; // break up geometry into srid and wkt if (value.startsWith("SRID=")) { String[] temp = value.split(";"); value = temp[1].trim(); srid = Integer.parseInt(temp[0].substring(5)); } result = reader.read(value); setSridRecurse(result, srid); return result; } } catch (Exception E) { E.printStackTrace(); throw new SQLException("Error parsing SQL data:" + E); } } /** Recursively set a srid for the geometry and all subgeometries */ public static void setSridRecurse(final Geometry geom, final int srid) { geom.setSRID(srid); if (geom instanceof GeometryCollection) { final int subcnt = geom.getNumGeometries(); for (int i = 0; i < subcnt; i++) { setSridRecurse(geom.getGeometryN(i), srid); } } else if (geom instanceof Polygon) { Polygon poly = (Polygon) geom; poly.getExteriorRing().setSRID(srid); final int subcnt = poly.getNumInteriorRing(); for (int i = 0; i < subcnt; i++) { poly.getInteriorRingN(i).setSRID(srid); } } } public Geometry getGeometry() { return geom; } public String toString() { return geom.toString(); } public String getValue() { return bw.writeHexed(getGeometry()); } public Object clone() { JtsGeometry obj = new JtsGeometry(geom); obj.setType(type); return obj; } public boolean equals(Object obj) { if ((obj != null) && (obj instanceof JtsGeometry)) { Geometry other = ((JtsGeometry) obj).geom; if (this.geom == other) { // handles identity as well as both // ==null return true; } else if (this.geom != null && other != null) { return other.equals(this.geom); } } return false; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/org/postgis/jts/JtsGisWrapper.java�������������������������0000644�0000000�0000000�00000011644�11722777314�025422� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsWrapper.java * * Allows transparent usage of JTS Geometry classes via PostgreSQL JDBC driver * connected to a PostGIS enabled PostgreSQL server. * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: JtsGisWrapper.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.jts; import org.postgresql.Driver; import org.postgresql.PGConnection; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; /** * JtsGisWrapper * * Wraps the PostGreSQL Driver to add the JTS/PostGIS Object Classes. * * This method currently works with J2EE DataSource implementations, and with * DriverManager framework. * * Simply replace the "jdbc:postgresql:" with a "jdbc:postgresql_JTS" in the * jdbc URL. * * @author markus.schaber@logix-tt.com * */ public class JtsGisWrapper extends Driver { private static final String POSTGRES_PROTOCOL = "jdbc:postgresql:"; private static final String POSTGIS_PROTOCOL = "jdbc:postgresql_JTS:"; public static final String REVISION = "$Revision: 9324 $"; public JtsGisWrapper() { super(); } static { try { // Analogy to org.postgresql.Driver java.sql.DriverManager.registerDriver(new JtsGisWrapper()); } catch (SQLException e) { e.printStackTrace(); } } /** * Creates a postgresql connection, and then adds the PostGIS data types to * it calling addpgtypes() * * @param url the URL of the database to connect to * @param info a list of arbitrary tag/value pairs as connection arguments * @return a connection to the URL or null if it isnt us * @exception SQLException if a database access error occurs * * @see java.sql.Driver#connect * @see org.postgresql.Driver */ public java.sql.Connection connect(String url, Properties info) throws SQLException { url = mangleURL(url); Connection result = super.connect(url, info); addGISTypes((PGConnection) result); return result; } /** * adds the JTS/PostGIS Data types to a PG Connection. * * @throws SQLException */ public static void addGISTypes(PGConnection pgconn) throws SQLException { pgconn.addDataType("geometry", org.postgis.jts.JtsGeometry.class); pgconn.addDataType("box3d", org.postgis.PGbox3d.class); pgconn.addDataType("box2d", org.postgis.PGbox2d.class); } /** * Mangles the PostGIS URL to return the original PostGreSQL URL */ public static String mangleURL(String url) throws SQLException { if (url.startsWith(POSTGIS_PROTOCOL)) { return POSTGRES_PROTOCOL + url.substring(POSTGIS_PROTOCOL.length()); } else { throw new SQLException("Unknown protocol or subprotocol in url " + url); } } /** * Returns true if the driver thinks it can open a connection to the given * URL. Typically, drivers will return true if they understand the * subprotocol specified in the URL and false if they don't. Our protocols * start with jdbc:postgresql_postGIS: * * @see java.sql.Driver#acceptsURL * @param url the URL of the driver * @return true if this driver accepts the given URL * @exception SQLException if a database-access error occurs (Dont know why * it would *shrug*) */ public boolean acceptsURL(String url) throws SQLException { try { url = mangleURL(url); } catch (SQLException e) { return false; } return super.acceptsURL(url); } /** * Gets the underlying drivers major version number * * @return the drivers major version number */ public int getMajorVersion() { return super.getMajorVersion(); } /** * Get the underlying drivers minor version number * * @return the drivers minor version number */ public int getMinorVersion() { return super.getMinorVersion(); } /** * Returns our own CVS version plus postgres Version */ public static String getVersion() { return "JtsGisWrapper " + REVISION + ", wrapping " + Driver.getVersion(); } } ��������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/pom.xml����������������������������������������������������0000644�0000000�0000000�00000010752�12314360331�020231� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.postgis</groupId> <artifactId>postgis-jdbc-jtsparser</artifactId> <version>2.1.2</version> <packaging>jar</packaging> <name>Postgis JDBC Driver JTS Parser</name> <url>http://www.postgis.org</url> <description>Parser between JTS and PostGIS geometry formats.</description> <licenses> <license> <name>GNU Lesser General Public License</name> <url>http://www.gnu.org/licenses/lgpl-2.1.txt</url> <distribution>repo</distribution> </license> </licenses> <developers> <developer> <name>Postgis Development Team</name> </developer> <developer> <name>María Arias de Reyna</name> <email>delawen en gmail.com</email> </developer> </developers> <contributors> <contributor> <name>Hakan Tandogan</name> <email>hakan@gurkensalat.com</email> <url>http://www.gurkensalat.com/</url> <roles> <role>Maven Packager</role> </roles> </contributor> </contributors> <mailingLists> <mailingList> <name>User List</name> <subscribe>postgis-users-subscribe@postgis.refractions.net</subscribe> <unsubscribe>postgis-users-unsubscribe@postgis.refractions.net</unsubscribe> <post>postgis-users@postgis.refractions.net</post> <archive>http://postgis.refractions.net/pipermail/postgis-users/</archive> </mailingList> <mailingList> <name>Developer List</name> <subscribe>postgis-devel-subscribe@postgis.refractions.net</subscribe> <unsubscribe>postgis-devel-unsubscribe@postgis.refractions.net</unsubscribe> <post>postgis-devel@postgis.refractions.net</post> <archive>http://postgis.refractions.net/pipermail/postgis-devel/</archive> </mailingList> </mailingLists> <issueManagement> <system>Trac</system> <url>http://trac.osgeo.org/postgis/</url> </issueManagement> <scm> <url>http://trac.osgeo.org/postgis/browser/tags/2.0.0</url> <connection>scm:svn:http://svn.osgeo.org/postgis/tags/2.0.0/</connection> <developerConnection>scm:svn:http://svn.osgeo.org/postgis/tags/2.0.0/</developerConnection> </scm> <build> <sourceDirectory>${basedir}/org</sourceDirectory> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <phase>verify</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <executions> <execution> <id>attach-javadocs</id> <phase>verify</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.postgis</groupId> <artifactId>postgis-jdbc</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>com.vividsolutions</groupId> <artifactId>jts</artifactId> <version>1.12</version> </dependency> </dependencies> <reporting> <plugins> <plugin> <artifactId>maven-javadoc-plugin</artifactId> </plugin> <plugin> <artifactId>maven-dependency-plugin</artifactId> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> </plugin> <plugin> <artifactId>maven-surefire-report-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>javancss-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jdepend-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jxr-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>taglist-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> </plugin> </plugins> </reporting> <distributionManagement> <repository> <id>sonatype-postgis-releases</id> <name>Sonatype Postgis Releases Repo</name> <url>http://oss.sonatype.org/content/repositories/postgis-releases</url> </repository> </distributionManagement> </project> ����������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/examples/��������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020534� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/jtssrc/examples/JtsTestParser.java��������������������������������0000644�0000000�0000000�00000063717�11722777314�024202� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsTestParser.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: JtsTestParser.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import org.postgis.binary.ValueSetter; import org.postgis.jts.JtsBinaryParser; import org.postgis.jts.JtsBinaryWriter; import org.postgis.jts.JtsGeometry; import org.postgresql.util.PGtokenizer; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LinearRing; import com.vividsolutions.jts.geom.MultiLineString; import com.vividsolutions.jts.geom.MultiPoint; import com.vividsolutions.jts.geom.MultiPolygon; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; public class JtsTestParser { public static String ALL = "ALL", ONLY10 = "ONLY10", EQUAL10 = "EQUAL10"; /** * Our set of geometries to test. */ public static final String[][] testset = new String[][] { { ALL, // 2D "POINT(10 10)" }, { ALL, // 3D with 3rd coordinate set to 0 "POINT(10 10 0)" }, { ALL, // 3D "POINT(10 10 20)" }, { ALL, "MULTIPOINT(11 12, 20 20)" }, { ALL, "MULTIPOINT(11 12 13, 20 20 20)" }, { ALL, "LINESTRING(10 10,20 20,50 50,34 34)" }, { ALL, "LINESTRING(10 10 20,20 20 20,50 50 50,34 34 34)" }, { ALL, "POLYGON((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5))" }, { ALL, "POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))" }, { ALL, "MULTIPOLYGON(((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5)),((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5)))" }, { ALL, "MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))" }, { ALL, "MULTILINESTRING((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5))" }, { ALL, "MULTILINESTRING((10 10 5,20 10 5,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))" }, { ALL, "GEOMETRYCOLLECTION(POINT(10 10),POINT(20 20))" }, { ALL, "GEOMETRYCOLLECTION(POINT(10 10 20),POINT(20 20 20))" }, { ALL, "GEOMETRYCOLLECTION(LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34))" }, { ALL, "GEOMETRYCOLLECTION(POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))" }, { ONLY10, // Cannot be parsed by 0.X servers "GEOMETRYCOLLECTION(MULTIPOINT(10 10 10, 20 20 20),MULTIPOINT(10 10 10, 20 20 20))" }, { EQUAL10, // PostGIs 0.X "flattens" this geometry, so it is not // equal after reparsing. "GEOMETRYCOLLECTION(MULTILINESTRING((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))" }, { EQUAL10,// PostGIs 0.X "flattens" this geometry, so it is not // equal // after reparsing. "GEOMETRYCOLLECTION(MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))),MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))))" }, { ALL, "GEOMETRYCOLLECTION(POINT(10 10 20),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))" }, { ONLY10, // Collections that contain both X and MultiX do not // work on // PostGIS 0.x "GEOMETRYCOLLECTION(POINT(10 10 20),MULTIPOINT(10 10 10, 20 20 20),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))),MULTILINESTRING((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))" }, { ALL,// new (correct) representation "GEOMETRYCOLLECTION EMPTY" }, // end }; /** The srid we use for the srid tests */ public static final int SRID = 4326; /** The string prefix we get for the srid tests */ public static final String SRIDPREFIX = "SRID=" + SRID + ";"; /** How much tests did fail? */ public static int failcount = 0; private static JtsBinaryParser bp = new JtsBinaryParser(); private static final JtsBinaryWriter bw = new JtsBinaryWriter(); /** The actual test method */ public static void test(String WKT, Connection[] conns, String flags) throws SQLException { System.out.println("Original: " + WKT); Geometry geom = JtsGeometry.geomFromString(WKT); String parsed = geom.toString(); if (WKT.startsWith("SRID=")) { parsed = "SRID="+geom.getSRID()+";"+parsed; } System.out.println("Parsed: " + parsed); Geometry regeom = JtsGeometry.geomFromString(parsed); String reparsed = regeom.toString(); if (WKT.startsWith("SRID=")) { reparsed = "SRID="+geom.getSRID()+";"+reparsed; } System.out.println("Re-Parsed: " + reparsed); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else if (geom.getSRID() != regeom.getSRID()) { System.out.println("--- Geometriy SRIDs are not equal!"); failcount++; } else if (!reparsed.equals(parsed)) { System.out.println("--- Text Reps are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } String hexNWKT = bw.writeHexed(geom, ValueSetter.NDR.NUMBER); System.out.println("NDRHex: " + hexNWKT); regeom = JtsGeometry.geomFromString(hexNWKT); System.out.println("ReNDRHex: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } String hexXWKT = bw.writeHexed(geom, ValueSetter.XDR.NUMBER); System.out.println("XDRHex: " + hexXWKT); regeom = JtsGeometry.geomFromString(hexXWKT); System.out.println("ReXDRHex: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } byte[] NWKT = bw.writeBinary(geom, ValueSetter.NDR.NUMBER); regeom = bp.parse(NWKT); System.out.println("NDR: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } byte[] XWKT = bw.writeBinary(geom, ValueSetter.XDR.NUMBER); regeom = bp.parse(XWKT); System.out.println("XDR: " + regeom.toString()); if (!geom.equalsExact(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } Geometry coordArrayGeom = rebuildCS(geom); System.out.println("CoordArray:" + regeom.toString()); if (!geom.equalsExact(coordArrayGeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } String coordArrayWKT = bw.writeHexed(coordArrayGeom, ValueSetter.NDR.NUMBER); System.out.println("HexCArray: " + coordArrayWKT); if (!coordArrayWKT.equals(hexNWKT)) { System.out.println("--- CoordArray HexWKT is not equal: "+bp.parse(coordArrayWKT)); failcount++; } else { System.out.println("HexEquals: yes"); } for (int i = 0; i < conns.length; i++) { Connection connection = conns[i]; Statement statement = connection.createStatement(); int serverPostgisMajor = TestAutoregister.getPostgisMajor(statement); if ((flags == ONLY10) && serverPostgisMajor < 1) { System.out.println("PostGIS server too old, skipping test on connection " + i + ": " + connection.getCatalog()); } else { System.out.println("Testing on connection " + i + ": " + connection.getCatalog()); try { Geometry sqlGeom = viaSQL(WKT, statement); System.out.println("SQLin : " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after SQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq SQL in: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { Geometry sqlreGeom = viaSQL(parsed, statement); System.out.println("SQLout : " + sqlreGeom.toString()); if (!geom.equalsExact(sqlreGeom)) { System.out.println("--- reparsed Geometries after SQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq SQLout: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { Geometry sqlreGeom = viaPrepSQL(geom, connection); System.out.println("Prepared: " + sqlreGeom.toString()); if (!geom.equalsExact(sqlreGeom)) { System.out.println("--- reparsed Geometries after prepared StatementSQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq Prep: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // asEWKT() function is not present on PostGIS 0.X, and the test // is pointless as 0.X uses EWKT as canonical rep so the same // functionality was already tested above. try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = ewktViaSQL(WKT, statement); System.out.println("asEWKT : " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after EWKT SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // asEWKB() function is not present on PostGIS 0.X. try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = ewkbViaSQL(WKT, statement); System.out.println("asEWKB : " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // HexEWKB parsing is not present on PostGIS 0.X. try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = viaSQL(hexNWKT, statement); System.out.println("hexNWKT: " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = viaSQL(hexXWKT, statement); System.out.println("hexXWKT: " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // Canonical binary input is not present before 1.0 try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = binaryViaSQL(NWKT, connection); System.out.println("NWKT: " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = binaryViaSQL(XWKT, connection); System.out.println("XWKT: " + sqlGeom.toString()); if (!geom.equalsExact(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } } statement.close(); } System.out.println("***"); } // Rebuild given Geometry with a CoordinateArraySequence implementation. public static Geometry rebuildCS(Geometry geom) { if (geom instanceof Point) { return rebuildCSPoint((Point)geom); } else if (geom instanceof MultiPoint) { return rebuildCSMP((MultiPoint)geom); } else if (geom instanceof LineString) { return rebuildCSLS((LineString)geom); } else if (geom instanceof MultiLineString) { return rebuildCSMLS((MultiLineString)geom); } else if (geom instanceof Polygon) { return rebuildCSP((Polygon)geom); } else if (geom instanceof MultiPolygon) { return rebuildCSMP((MultiPolygon)geom); } else if (geom instanceof GeometryCollection) { return rebuildCSGC((GeometryCollection)geom); } else { throw new AssertionError(); } } private static Geometry rebuildCSGC(GeometryCollection coll) { Geometry[] geoms = new Geometry[coll.getNumGeometries()]; for (int i = 0; i < coll.getNumGeometries(); i++) { geoms[i] = rebuildCS(coll.getGeometryN(i)); } Geometry result = coll.getFactory().createGeometryCollection(geoms); result.setSRID(coll.getSRID()); return result; } private static MultiPolygon rebuildCSMP(MultiPolygon multipoly) { Polygon[] polygons = new Polygon[multipoly.getNumGeometries()]; for (int i=0; i < polygons.length; i++) { polygons[i] = rebuildCSP((Polygon)multipoly.getGeometryN(i)); } MultiPolygon result = multipoly.getFactory().createMultiPolygon(polygons); result.setSRID(multipoly.getSRID()); return result; } private static Polygon rebuildCSP(Polygon polygon) { LinearRing outer = rebuildLR(polygon.getExteriorRing()); LinearRing[] holes = new LinearRing[polygon.getNumInteriorRing()]; for (int i=0; i < holes.length; i++) { holes[i] = rebuildLR(polygon.getInteriorRingN(i)); } Polygon result = polygon.getFactory().createPolygon(outer, holes); result.setSRID(polygon.getSRID()); return result; } private static LinearRing rebuildLR(LineString ring) { LinearRing result = ring.getFactory().createLinearRing(ring.getCoordinates()); result.setSRID(ring.getSRID()); return result; } private static MultiLineString rebuildCSMLS(MultiLineString multiline) { LineString[] polygons = new LineString[multiline.getNumGeometries()]; for (int i=0; i < polygons.length; i++) { polygons[i] = rebuildCSLS((LineString)multiline.getGeometryN(i)); } MultiLineString result = multiline.getFactory().createMultiLineString(polygons); result.setSRID(multiline.getSRID()); return result; } private static LineString rebuildCSLS(LineString line) { LineString result = line.getFactory().createLineString(line.getCoordinates()); result.setSRID(line.getSRID()); return result; } private static MultiPoint rebuildCSMP(MultiPoint mp) { Point[] points = new Point[mp.getNumGeometries()]; for (int i=0; i < points.length; i++) { points[i] = rebuildCSPoint((Point) mp.getGeometryN(i)); } MultiPoint result = mp.getFactory().createMultiPoint(points); result.setSRID(mp.getSRID()); return result; } private static Point rebuildCSPoint(Point point) { Point result = point.getFactory().createPoint(point.getCoordinate()); result.setSRID(point.getSRID()); return result; } /** Pass a geometry representation through the SQL server */ private static Geometry viaSQL(String rep, Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT geometry_in('" + rep + "')"); rs.next(); return ((JtsGeometry) rs.getObject(1)).getGeometry(); } /** * Pass a geometry representation through the SQL server via prepared * statement */ private static Geometry viaPrepSQL(Geometry geom, Connection conn) throws SQLException { PreparedStatement prep = conn.prepareStatement("SELECT ?::geometry"); JtsGeometry wrapper = new JtsGeometry(geom); prep.setObject(1, wrapper, Types.OTHER); ResultSet rs = prep.executeQuery(); rs.next(); JtsGeometry resultwrapper = ((JtsGeometry) rs.getObject(1)); return resultwrapper.getGeometry(); } /** Pass a geometry representation through the SQL server via EWKT */ private static Geometry ewktViaSQL(String rep, Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT asEWKT(geometry_in('" + rep + "'))"); rs.next(); String resrep = rs.getString(1); return JtsGeometry.geomFromString(resrep); } /** Pass a geometry representation through the SQL server via EWKB */ private static Geometry ewkbViaSQL(String rep, Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT asEWKB(geometry_in('" + rep + "'))"); rs.next(); byte[] resrep = rs.getBytes(1); return bp.parse(resrep); } /** Pass a EWKB geometry representation through the server */ private static Geometry binaryViaSQL(byte[] rep, Connection conn) throws SQLException { PreparedStatement prep = conn.prepareStatement("SELECT ?::bytea::geometry"); prep.setBytes(1, rep); ResultSet rs = prep.executeQuery(); rs.next(); JtsGeometry resultwrapper = ((JtsGeometry) rs.getObject(1)); return resultwrapper.getGeometry(); } /** * Connect to the databases * * We use DriverWrapper here. For alternatives, see the DriverWrapper * Javadoc * * @param dbuser * * @see org.postgis.DriverWrapper * */ public static Connection connect(String url, String dbuser, String dbpass) throws SQLException { Connection conn; conn = DriverManager.getConnection(url, dbuser, dbpass); return conn; } public static void loadDrivers() throws ClassNotFoundException { Class.forName("org.postgis.jts.JtsWrapper"); } /** Our apps entry point */ public static void main(String[] args) throws SQLException, ClassNotFoundException { loadDrivers(); PGtokenizer dburls; String dbuser = null; String dbpass = null; if (args.length == 1 && args[0].equalsIgnoreCase("offline")) { System.out.println("Performing only offline tests"); dburls = new PGtokenizer("", ';'); } else if (args.length == 3) { System.out.println("Performing offline and online tests"); dburls = new PGtokenizer(args[0], ';'); dbuser = args[1]; dbpass = args[2]; } else { System.err.println("Usage: java examples/TestParser dburls user pass [tablename]"); System.err.println(" or: java examples/TestParser offline"); System.err.println(); System.err.println("dburls has one or more jdbc urls separated by ; in the following format"); System.err.println("jdbc:postgresql://HOST:PORT/DATABASENAME"); System.err.println("tablename is 'jdbc_test' by default."); System.exit(1); // Signal the compiler that code flow ends here. return; } Connection[] conns; conns = new Connection[dburls.getSize()]; for (int i = 0; i < dburls.getSize(); i++) { System.out.println("Creating JDBC connection to " + dburls.getToken(i)); conns[i] = connect(dburls.getToken(i), dbuser, dbpass); } System.out.println("Performing tests..."); System.out.println("***"); for (int i = 0; i < testset.length; i++) { test(testset[i][1], conns, testset[i][0]); test(SRIDPREFIX + testset[i][1], conns, testset[i][0]); } System.out.print("cleaning up..."); for (int i = 0; i < conns.length; i++) { conns[i].close(); } System.out.println("Finished, " + failcount + " tests failed!"); System.err.println("Finished, " + failcount + " tests failed!"); System.exit(failcount); } } �������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/Makefile����������������������������������������������������������0000644�0000000�0000000�00000001120�12315456245�017044� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * # * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** ANT=/opt/local/bin/ant all: build build clean distclean check: $(ANT) $@ maintainer-clean: distclean : nothing to do install uninstall: : TODO ! ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/pom.xml�����������������������������������������������������������0000644�0000000�0000000�00000011700�12314360331�016713� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.postgis</groupId> <artifactId>postgis-jdbc</artifactId> <version>${POSTGIS_MAJOR_VERSION}.${POSTGIS_MINOR_VERSION}.${POSTGIS_MICRO_VERSION}</version> <packaging>jar</packaging> <name>Postgis JDBC Driver</name> <url>http://www.postgis.org</url> <description>PostGIS adds support for geographic objects to the PostgreSQL object-relational database.</description> <licenses> <license> <name>GNU Lesser General Public License</name> <url>http://www.gnu.org/licenses/lgpl-2.1.txt</url> <distribution>repo</distribution> </license> </licenses> <developers> <developer> <name>Postgis Development Team</name> </developer> <developer> <name>María Arias de Reyna</name> <email>delawen en gmail.com</email> </developer> </developers> <contributors> <contributor> <name>Hakan Tandogan</name> <email>hakan@gurkensalat.com</email> <url>http://www.gurkensalat.com/</url> <roles> <role>Maven Packager</role> </roles> </contributor> </contributors> <mailingLists> <mailingList> <name>User List</name> <subscribe>postgis-users-subscribe@postgis.refractions.net</subscribe> <unsubscribe>postgis-users-unsubscribe@postgis.refractions.net</unsubscribe> <post>postgis-users@postgis.refractions.net</post> <archive>http://postgis.refractions.net/pipermail/postgis-users/</archive> </mailingList> <mailingList> <name>Developer List</name> <subscribe>postgis-devel-subscribe@postgis.refractions.net</subscribe> <unsubscribe>postgis-devel-unsubscribe@postgis.refractions.net</unsubscribe> <post>postgis-devel@postgis.refractions.net</post> <archive>http://postgis.refractions.net/pipermail/postgis-devel/</archive> </mailingList> </mailingLists> <issueManagement> <system>Trac</system> <url>http://trac.osgeo.org/postgis/</url> </issueManagement> <scm> <url>http://trac.osgeo.org/postgis/browser/tags/2.0.0</url> <connection>scm:svn:http://svn.osgeo.org/postgis/tags/2.0.0/</connection> <developerConnection>scm:svn:http://svn.osgeo.org/postgis/tags/2.0.0/</developerConnection> </scm> <build> <sourceDirectory>${basedir}/src</sourceDirectory> <!-- For the driverconfig property file --> <resources> <resource> <directory>src</directory> <filtering>true</filtering> <includes> <include>**/*.properties</include> </includes> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins><!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <phase>verify</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <executions> <execution> <id>attach-javadocs</id> <phase>verify</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> --> </plugins> </build> <dependencies> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.1-901.jdbc3</version> </dependency> </dependencies> <reporting> <plugins> <plugin> <artifactId>maven-javadoc-plugin</artifactId> </plugin> <plugin> <artifactId>maven-dependency-plugin</artifactId> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> </plugin> <plugin> <artifactId>maven-surefire-report-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>javancss-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jdepend-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jxr-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>taglist-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> </plugin> </plugins> </reporting> <distributionManagement> <repository> <id>sonatype-postgis-releases</id> <name>Sonatype Postgis Releases Repo</name> <url>http://oss.sonatype.org/content/repositories/postgis-releases</url> </repository> </distributionManagement> <properties> <POSTGIS_MAJOR_VERSION>2</POSTGIS_MAJOR_VERSION> <POSTGIS_MINOR_VERSION>1</POSTGIS_MINOR_VERSION> <POSTGIS_MICRO_VERSION>2</POSTGIS_MICRO_VERSION> </properties> </project> ����������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/README������������������������������������������������������������0000644�0000000�0000000�00000024015�11722777314�016300� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� *** PostGIS JDBC Driver extension README / FAQ *** (C) 2005 Markus Schaber <markus.schaber@logix-tt.com> $Id $ * What is it all about? * JDBC is an database driver specification for Java. Like ODBC in the C world, JDBC allows java applications to transparently use different JDBC compliant databases without any source code changes. PostgreSQL, the database PostGIS is written for, comes with a driver that follows this specification. For downloads and more info, see: http://jdbc.postgresql.org/download.html The purpose of the JDBC Driver extension is to give the PostgreSQL JDBC driver some understanding of the PostGIS data types (Geometry, Box3D, Box2D). Without this, the Application can only get byte arrays or strings (binary and text representation, rsp.) and has to parse it on its own. When registering this extension, the Application can simply call getObject(column) on the result of the query, and get a real java object that is modeled after the OpenGIS spec. It also can create or modify this objects itsself and then pass them into the database via the PreparedStatement.setObject() method. Currently, the code is tested with PostGIS 0.8.1, 0.9.1. 0.9.2 and 1.0.0. It supports both the new hex-encoded EWKB canonical text representation used by PostGIS 1.0.0 lwgeom code, and the old, less efficient WKT like representation used by previous releases when reading data from the server. When sending data to the server, it currently always uses the latter form, which is compatible to all PostGIS versions. * Do I need it? * If you happen to write GIS applications, you can propably benefit. In case your applications are PostGIS specific, you can fully exploit the functionality, see "How to I use it" below for instructions and the src/examples directory for some code examples. If you rather prefer to stay OpenGIS compliant, then you cannot use the full driver embedding, as this is PostGIS specific functionality. But you can still use the geometry classes as a lightweight java geometry model if you do not want to use a full-blown GIS implementation like jts. Simply use the asText() and GeometryFromText() OpenGIS SQL functions against whichever OpenGIS compliant server you want, and use the WKT parsing constructors or PGgeometry.geomFromString() as well as Geometry.toString() to convert between WKT strings and geometry objects. * Is it free? * Yes. The actual Driver extension code is licensed under the GNU LGPL, this allows everyone to include the code in his projects. You do not have to pay any license fees, and you can keep your own application code proprietary, but you have to make the PostGIS source code available to any receivers, including any modifications you apply to it. For details, please see the license file COPYING_LGPL. The Build files and examples are licensed under GNU GPL, just like the rest of PostGIS is. This is not LGPL as applications usually do not link against those. * How do I build it? * There are older make files with which you can try to build, but maven is recommended, as it handles dependencies on a better and cleaner way. You have to install maven on your computer to build it. To install maven you can try to search on your software repositories or read the documentation: http://maven.apache.org/download.html To compile your postgis driver, go to the jdbc folder and execute the console command "mvn package". This should create a postgis jar on the target folder inside the jdbc folder. Note that your postgis driver version does not constrain the PostgreSQL server version. As the JDBC drivers are downwards compatible against older servers, and PostgreSQL servers typically accept older clients, you can easily use e. G. a pgjdbc 8.0 against a PostgreSQL 7.3 server. To benefit from optimizations and bugfixes, it is generally suggested to use the newest stable pgjdbc build that is documented to work against your server release. * It is called jdbc2 - does it work with jdbc3, too? * To make it short: The naming does not refer to SUN jdbc standard releases jdbc-1, jdbc-2 or jdbc-3. The current naming is somehow unfortunate. The directory simply is named jdbc2 because it is the successor of Paul Ramsey's original jdbc directory, which used to exist parallel in the CVS repository. As CVS does its best to hinder useful version tracking across file renames, the name was kept even after removal of the original jdbc subproject. Please note that the PostgreSQL JDBC driver itsself is released in several flavours for different JDBC relases and sun JDK releases, but currently, the same postgis.jar should work with all of them. If not, you clearly found a bug, and we kindly ask you to report it. If you run into troubles, make shure that you use the newest pgjdbc build. Especially pre releases are known to contain bugs (that's why they are pre releases), and e. G. 8.0 build 309 contained some problems that are fixed in 8.0 build 313. * How do I use it? * To use the PostGIS types, you need the postgis.jar and the pgjdbc driver in your classpath. The PostGIS extension must be registered within the JDBC driver. There are three ways to do this: - If you use pgjdbc 8.0, the org/postgresql/driverconfig.properties file contained in the postgis.jar autoregisters the PostGIS extension for the PostGIS data types (geometry, box2d, box3d) within the pgjdbc driver. - You can use the org.postgis.DriverWrapper as replacement for the jdbc driver. This class wraps the PostGreSQL Driver to transparently add the PostGIS Object Classes. This method currently works both with J2EE DataSources, and with the older DriverManager framework. I's a thin wrapper around org.postgresql.Driver that simply registers the extension on every new connection created. To use it, you replace the "jdbc:postgresql:" with a "jdbc:postgresql_postGIS" in the jdbc URL, and make your environment aware of the new Driver class. DriverManager users simply register org/postgis/DriverWrapper instead of (or in addition to) org.postgresql.Driver, see examples/TestBoxes.connect() for an working code. DataSource users similarly have to configure their datasource to use the different class. The following works for jboss, put it in your-ds.xml: <driver-class>org.postgis.DriverWrapper</driver-class> - Of course, you can also manually register the Datatypes on your pgjdbc connection. You have to cast your connection to PGConnection and then call: pgconn.addDataType("geometry", "org.postgis.PGgeometry"); pgconn.addDataType("box3d", "org.postgis.PGbox3d"); pgconn.addDataType("box2d", "org.postgis.PGbox2d"); You may need to dig through some wrappers when running in an appserver. E. G. for JBoss, The datasource actually gives you a instance of org.jboss.resource.adapter.jdbc.WrappedConnection and have to call getUnderlyingConnection() on it to get the PGConnection instance.) Also note that the above addDataType() methods known from earlier pgjdbc versions are deprecated in pgjdbc 8.0 (but still work), see the commented code variants in the DriverWrapper.addGisTypes() method for an alternative. Note: Even using pgjdbc 8.0, you may still want to use the second or third approach if you have several pgjdbc extensions that autoregister for the same PostGIS types, as the driver cannot guess which extension it should actually use on which connection. The current pgjdbc implementation simply parses all org/postgresql/driverconfig.properties the classloader can find in his classpath, using the first definition found for each type. * How to I run the tests? Are they allowed to fail? * There are two types of tests provided, offline and online. Offline tests can run without a PostGIS server, the online tests need a PostGIS server to connect to. - Offline Tests The easiest way to run the offline tests is "make offlinetests". The offline tests should always complete without any failure. If you happen to get a failure here, it is a bug in the PostGIS code (or, very unlikely, in the JDK/JRE or Hardware you use). Please contact the PostGIS developer list in this case. - Online tests The online tests can be ran with "make onlinetests", but they need a specially prepared database to connect against, and the pgjdbc driver available in your classpath. The Makefile provides defaults for PGHOST, PGPOR, PGDATABASE, PGUSER and PGPASS, you can override them for your needs. For the jtest, the user needs to create and drop table privileges, the two other tests do not use any table. Make shure you have the PostGIS installed in the database. None of the online tests should report any failure. However, some of the tests are skipped against PostGix 0.X servers as 0.8.X and 0.9.X, those are the box2d tests (because this datatype simply is missing on those releases), as well as 22 skipped tests for some geometry representations that those old releases do not support. This is a PostGIS server side problem as the server fails to parse some OpenGIS compliant WKT representations, and structurally (but not geometrically or topologically) mangles some other geometries. They are unlikely to be fixed in those releases as users should migrate to PostGIS 1.0. The Autoregister Test needs a pgjdbc version 8.0 or newer, and will simply do nothing with older pgjdbc versions. If you get any failure messages in the online tests, check whether your really fulfil the prerequisites above. If yes, please contact the PostGIS developer list. * What about the JTS stuff * There's beta support for the JTS 1.6 geometry implementations instead of the native PostGIS classes on the java client side. Simply add jts_1.6.jar to your CLASSPATH, "make postgis_jts" and use at your own risk. * How can I contact you? * Well, the best place are the official PostGIS mailing lists for PostGIS, subscription information is linked at: http://postgis.refractions.net/support.php If you want to report errors, please try to send us all the details we need to reproduce your problem. A small, self-contained test case would be best. * Phew. That's all? * Yes. For now, at least. Happy Coding! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/Makefile.in�������������������������������������������������������0000644�0000000�0000000�00000001103�11722777314�017456� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * # * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** ANT=@ANT@ all: build build clean distclean check: $(ANT) $@ maintainer-clean: distclean : nothing to do install uninstall: : TODO ! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/��������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016175� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/����������������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�016764� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgresql/�����������������������������������������������0000755�0000000�0000000�00000000000�12315456223�021167� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgresql/driverconfig.properties������������������������0000644�0000000�0000000�00000000352�11722777314�025776� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # This property file is included in the postgis jar and autoregisters the # PostGIS datatypes within the jdbc driver. # datatype.geometry=org.postgis.PGgeometry datatype.box3d=org.postgis.PGbox3d datatype.box2d=org.postgis.PGbox2d ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/��������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020454� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/LinearRing.java�����������������������������������0000644�0000000�0000000�00000005145�11722777314�023366� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * LinearRing.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: LinearRing.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgresql.util.PGtokenizer; import java.sql.SQLException; /** * This represents the LinearRing GIS datatype. This type is used to construct * the polygon types, but is not stored or retrieved directly from the database. */ public class LinearRing extends PointComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public LinearRing(Point[] points) { super(LINEARRING, points); } /** * This is called to construct a LinearRing from the PostGIS string * representation of a ring. * * @param value Definition of this ring in the PostGIS string format. */ public LinearRing(String value) throws SQLException { this(value, false); } /** * @param value The text representation of this LinearRing * @param haveM Hint whether we have a measure. This is given to us by other * "parent" Polygon, and is passed further to our parent. */ protected LinearRing(String value, boolean haveM) throws SQLException { super(LINEARRING); PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(value.trim()), ','); int npoints = t.getSize(); Point[] points = new Point[npoints]; for (int p = 0; p < npoints; p++) { points[p] = new Point(t.getToken(p), haveM); } this.dimension = points[0].dimension; // fetch haveMeasure from subpoint because haveM does only work with // 2d+M, not with 3d+M geometries this.haveMeasure = points[0].haveMeasure; this.subgeoms = points; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/PGgeometryLW.java���������������������������������0000644�0000000�0000000�00000003532�11722777314�023657� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PGgeometryLW.java * * PostGIS extension for PostgreSQL JDBC driver - PGobject LWGeometry Wrapper * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PGgeometryLW.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgis.binary.BinaryWriter; import java.sql.SQLException; /** * This is a subclas of PGgeometry that uses hex encoded EWKB to communicate * with the backend, which is much more efficient, but only works with Lwgeom * enabled PostGIS (1.0.0 and up). */ public class PGgeometryLW extends PGgeometry { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; BinaryWriter bw = new BinaryWriter(); public PGgeometryLW() { super(); } public PGgeometryLW(Geometry geom) { super(geom); } public PGgeometryLW(String value) throws SQLException { super(value); } public String toString() { return geom.toString(); } public String getValue() { return bw.writeHexed(geom); } public Object clone() { return new PGgeometryLW(geom); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/version.properties��������������������������������0000644�0000000�0000000�00000000073�11722777314�024267� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������REL_MAJOR_VERSION=2 REL_MINOR_VERSION=0 REL_MICRO_VERSION=0���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/Point.java����������������������������������������0000644�0000000�0000000�00000017657�11722777314�022440� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Point.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: Point.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgresql.util.PGtokenizer; import java.sql.SQLException; public class Point extends Geometry { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public static final boolean CUTINTS = true; public int hashCode() { return super.hashCode() ^ hashCode(x) ^ hashCode(y) ^ hashCode(z) ^ hashCode(m); } public static int hashCode(double value) { long v = Double.doubleToLongBits(value); return (int) (v ^ (v >>> 32)); } protected boolean equalsintern(Geometry otherg) { Point other = (Point) otherg; return equals(other); } public static boolean double_equals(double a, double b) { if ( Double.isNaN(a) && Double.isNaN(b) ) { return true; } else { return (a == b); } } public final boolean equals(Point other) { boolean xequals = double_equals(x, other.x); boolean yequals = double_equals(y, other.y); boolean zequals = ((dimension == 2) || double_equals(z, other.z)); boolean mequals = ((haveMeasure == false) || double_equals(m,other.m)); boolean result = xequals && yequals && zequals && mequals; return result; } public Point getPoint(int index) { if (index == 0) { return this; } else { throw new ArrayIndexOutOfBoundsException("Point only has a single Point! " + index); } } /** Optimized versions for this special case */ public Point getFirstPoint() { return this; } /** Optimized versions for this special case */ public Point getLastPoint() { return this; } public int numPoints() { return 1; } /** * The X coordinate of the point. * In most long/lat systems, this is the longitude. */ public double x; /** * The Y coordinate of the point. * In most long/lat systems, this is the latitude. */ public double y; /** * The Z coordinate of the point. * In most long/lat systems, this is a radius from the * center of the earth, or the height / elevation over * the ground. */ public double z; /** * The measure of the point. */ public double m = 0.0; public Point() { super(POINT); } /** Constructs a new Point * @param x the longitude / x ordinate * @param y the latitude / y ordinate * @param z the radius / height / elevation / z ordinate */ public Point(double x, double y, double z) { this(); this.x = x; this.y = y; this.z = z; dimension = 3; } /** Constructs a new Point * @param x the longitude / x ordinate * @param y the latitude / y ordinate */ public Point(double x, double y) { this(); this.x = x; this.y = y; this.z = 0.0; dimension = 2; } /** * Construct a Point from EWKT. * * (3D and measures are legal, but SRID is not allowed). */ public Point(String value) throws SQLException { this(value, false); } /** * Construct a Point * * @param value The text representation of this point * @param haveM Hint whether we have a measure. This is used by other * geometries parsing inner points where we only get "1 2 3 4" * like strings without the "POINT(" and ")" stuff. If there * acutally is a POINTM prefix, this overrides the given value. * However, POINT does not set it to false, as they can be * contained in measured collections, as in * "GEOMETRYCOLLECTIONM(POINT(0 0 0))". */ protected Point(String value, boolean haveM) throws SQLException { this(); value = initSRID(value); if (value.indexOf("POINTM") == 0) { haveM = true; value = value.substring(6).trim(); } else if (value.indexOf("POINT") == 0) { value = value.substring(5).trim(); } PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(value), ' '); try { x = Double.valueOf(t.getToken(0)).doubleValue(); y = Double.valueOf(t.getToken(1)).doubleValue(); haveM |= t.getSize() == 4; if ((t.getSize() == 3 && !haveM) || (t.getSize() == 4)) { z = Double.valueOf(t.getToken(2)).doubleValue(); dimension = 3; } else { dimension = 2; } if (haveM) { m = Double.valueOf(t.getToken(dimension)).doubleValue(); } } catch (NumberFormatException e) { throw new SQLException("Error parsing Point: " + e.toString()); } haveMeasure = haveM; } public void innerWKT(StringBuffer sb) { sb.append(x); if (CUTINTS) cutint(sb); sb.append(' '); sb.append(y); if (CUTINTS) cutint(sb); if (dimension == 3) { sb.append(' '); sb.append(z); if (CUTINTS) cutint(sb); } if (haveMeasure) { sb.append(' '); sb.append(m); if (CUTINTS) cutint(sb); } } private static void cutint(StringBuffer sb) { int l = sb.length() - 2; if ((sb.charAt(l + 1) == '0') && (sb.charAt(l) == '.')) { sb.setLength(l); } } public double getX() { return x; } public double getY() { return y; } public double getZ() { return z; } public double getM() { return m; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } public void setZ(double z) { this.z = z; } public void setM(double m) { haveMeasure = true; this.m = m; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public void setZ(int z) { this.z = z; } public double distance(Point other) { double tx, ty, tz; if (this.dimension != other.dimension) { throw new IllegalArgumentException("Points have different dimensions!"); } tx = this.x - other.x; switch (this.dimension) { case 1 : return Math.sqrt(tx * tx); case 2 : ty = this.y - other.y; return Math.sqrt(tx * tx + ty * ty); case 3 : ty = this.y - other.y; tz = this.z - other.z; return Math.sqrt(tx * tx + ty * ty + tz * tz); default : throw new IllegalArgumentException("Illegal dimension of Point" + this.dimension); } } public boolean checkConsistency() { return super.checkConsistency() && (this.dimension == 3 || this.z == 0.0) && (this.haveMeasure || this.m == 0.0); } } ���������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/Polygon.java��������������������������������������0000644�0000000�0000000�00000004004�11722777314�022754� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Polygon.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: Polygon.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; public class Polygon extends ComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public Polygon() { super(POLYGON); } public Polygon(LinearRing[] rings) { super(POLYGON, rings); } public Polygon(String value) throws SQLException { this(value, false); } public Polygon(String value, boolean haveM) throws SQLException { super(POLYGON, value, haveM); } protected Geometry createSubGeomInstance(String token, boolean haveM) throws SQLException { return new LinearRing(token, haveM); } protected Geometry[] createSubGeomArray(int ringcount) { return new LinearRing[ringcount]; } public int numRings() { return subgeoms.length; } public LinearRing getRing(int idx) { if (idx >= 0 & idx < subgeoms.length) { return (LinearRing) subgeoms[idx]; } else { return null; } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/DriverWrapperLW.java������������������������������0000644�0000000�0000000�00000005214�11722777314�024370� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * DriverWrapperLW.java * * PostGIS extension for PostgreSQL JDBC driver - Wrapper utility class * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: DriverWrapperLW.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgresql.Driver; import java.sql.Connection; import java.sql.SQLException; import java.util.logging.Level; /** * DriverWrapperLW * * Wraps the PostGreSQL Driver to transparently add the PostGIS Object Classes. * This avoids the need of explicit addDataType() calls from the driver users * side. * * This DriverWrapper subclass always uses hex encoded EWKB as canonical text * representation, and thus only works against PostGIS 1.x servers and newer. * * For usage notes, see DriverWrapper class, but use "jdbc:postgresql_lwgis:" as * JDBC url prefix and org.postgis.DriverWrapperLW as driver class. * * @author Markus Schaber <markus.schaber@logix-tt.com> * @see DriverWrapper */ public class DriverWrapperLW extends DriverWrapper { public static final String POSTGIS_LWPROTOCOL = "jdbc:postgresql_lwgis:"; public static final String REVISIONLW = "$Revision: 9324 $"; /** * Default constructor. */ public DriverWrapperLW() throws SQLException { super(); } static { try { // Try to register ourself to the DriverManager java.sql.DriverManager.registerDriver(new DriverWrapperLW()); } catch (SQLException e) { logger.log(Level.WARNING, "Error registering PostGIS LW Wrapper Driver", e); } } protected String getProtoString() { return POSTGIS_LWPROTOCOL; } protected boolean useLW(Connection result) { return true; } /** * Returns our own CVS version plus postgres Version */ public static String getVersion() { return "PostGisWrapperLW " + REVISIONLW + ", wrapping " + Driver.getVersion(); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/binary/�������������������������������������������0000755�0000000�0000000�00000000000�12317530606�021740� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/binary/BinaryWriter.java��������������������������0000644�0000000�0000000�00000026621�11722777314�025243� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * BinaryWriter.java * * PostGIS extension for PostgreSQL JDBC driver - Binary Writer * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: BinaryWriter.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.binary; import org.postgis.Geometry; import org.postgis.GeometryCollection; import org.postgis.LineString; import org.postgis.LinearRing; import org.postgis.MultiLineString; import org.postgis.MultiPoint; import org.postgis.MultiPolygon; import org.postgis.Point; import org.postgis.Polygon; /** * Create binary representation of geometries. Currently, only text rep (hexed) * implementation is tested. * * It should be easy to add char[] and CharSequence ByteGetter instances, * although the latter one is not compatible with older jdks. * * I did not implement real unsigned 32-bit integers or emulate them with long, * as both java Arrays and Strings currently can have only 2^31-1 elements * (bytes), so we cannot even get or build Geometries with more than approx. * 2^28 coordinates (8 bytes each). * * @author markus.schaber@logi-track.com * */ public class BinaryWriter { /** * Get the appropriate ValueGetter for my endianness * * @param bytes The appropriate Byte Getter * * @return the ValueGetter */ public static ValueSetter valueSetterForEndian(ByteSetter bytes, byte endian) { if (endian == ValueSetter.XDR.NUMBER) { // XDR return new ValueSetter.XDR(bytes); } else if (endian == ValueSetter.NDR.NUMBER) { return new ValueSetter.NDR(bytes); } else { throw new IllegalArgumentException("Unknown Endian type:" + endian); } } /** * Write a hex encoded geometry * * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) This is a * TODO item. * * The geometry you put in must be consistent, geom.checkConsistency() must * return true. If not, the result may be invalid WKB. * * @see Geometry#checkConsistency() the consistency checker */ public synchronized String writeHexed(Geometry geom, byte REP) { int length = estimateBytes(geom); ByteSetter.StringByteSetter bytes = new ByteSetter.StringByteSetter(length); writeGeometry(geom, valueSetterForEndian(bytes, REP)); return bytes.result(); } public synchronized String writeHexed(Geometry geom) { return writeHexed(geom, ValueSetter.NDR.NUMBER); } /** * Write a binary encoded geometry. * * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) This is a * TODO item. * * The geometry you put in must be consistent, geom.checkConsistency() must * return true. If not, the result may be invalid WKB. * * @see Geometry#checkConsistency() */ public synchronized byte[] writeBinary(Geometry geom, byte REP) { int length = estimateBytes(geom); ByteSetter.BinaryByteSetter bytes = new ByteSetter.BinaryByteSetter(length); writeGeometry(geom, valueSetterForEndian(bytes, REP)); return bytes.result(); } public synchronized byte[] writeBinary(Geometry geom) { return writeBinary(geom, ValueSetter.NDR.NUMBER); } /** Parse a geometry starting at offset. */ protected void writeGeometry(Geometry geom, ValueSetter dest) { // write endian flag dest.setByte(dest.endian); // write typeword int typeword = geom.type; if (geom.dimension == 3) { typeword |= 0x80000000; } if (geom.haveMeasure) { typeword |= 0x40000000; } if (geom.srid != Geometry.UNKNOWN_SRID) { typeword |= 0x20000000; } dest.setInt(typeword); if (geom.srid != Geometry.UNKNOWN_SRID) { dest.setInt(geom.srid); } switch (geom.type) { case Geometry.POINT : writePoint((Point) geom, dest); break; case Geometry.LINESTRING : writeLineString((LineString) geom, dest); break; case Geometry.POLYGON : writePolygon((Polygon) geom, dest); break; case Geometry.MULTIPOINT : writeMultiPoint((MultiPoint) geom, dest); break; case Geometry.MULTILINESTRING : writeMultiLineString((MultiLineString) geom, dest); break; case Geometry.MULTIPOLYGON : writeMultiPolygon((MultiPolygon) geom, dest); break; case Geometry.GEOMETRYCOLLECTION : writeCollection((GeometryCollection) geom, dest); break; default : throw new IllegalArgumentException("Unknown Geometry Type: " + geom.type); } } /** * Writes a "slim" Point (without endiannes, srid ant type, only the * ordinates and measure. Used by writeGeometry as ell as writePointArray. */ private void writePoint(Point geom, ValueSetter dest) { dest.setDouble(geom.x); dest.setDouble(geom.y); if (geom.dimension == 3) { dest.setDouble(geom.z); } if (geom.haveMeasure) { dest.setDouble(geom.m); } } /** Write an Array of "full" Geometries */ private void writeGeometryArray(Geometry[] container, ValueSetter dest) { for (int i = 0; i < container.length; i++) { writeGeometry(container[i], dest); } } /** * Write an Array of "slim" Points (without endianness, srid and type, part * of LinearRing and Linestring, but not MultiPoint! */ private void writePointArray(Point[] geom, ValueSetter dest) { // number of points dest.setInt(geom.length); for (int i = 0; i < geom.length; i++) { writePoint(geom[i], dest); } } private void writeMultiPoint(MultiPoint geom, ValueSetter dest) { dest.setInt(geom.numPoints()); writeGeometryArray(geom.getPoints(), dest); } private void writeLineString(LineString geom, ValueSetter dest) { writePointArray(geom.getPoints(), dest); } private void writeLinearRing(LinearRing geom, ValueSetter dest) { writePointArray(geom.getPoints(), dest); } private void writePolygon(Polygon geom, ValueSetter dest) { dest.setInt(geom.numRings()); for (int i = 0; i < geom.numRings(); i++) { writeLinearRing(geom.getRing(i), dest); } } private void writeMultiLineString(MultiLineString geom, ValueSetter dest) { dest.setInt(geom.numLines()); writeGeometryArray(geom.getLines(), dest); } private void writeMultiPolygon(MultiPolygon geom, ValueSetter dest) { dest.setInt(geom.numPolygons()); writeGeometryArray(geom.getPolygons(), dest); } private void writeCollection(GeometryCollection geom, ValueSetter dest) { dest.setInt(geom.numGeoms()); writeGeometryArray(geom.getGeometries(), dest); } /** Estimate how much bytes a geometry will need in WKB. */ protected int estimateBytes(Geometry geom) { int result = 0; // write endian flag result += 1; // write typeword result += 4; if (geom.srid != Geometry.UNKNOWN_SRID) { result += 4; } switch (geom.type) { case Geometry.POINT : result += estimatePoint((Point) geom); break; case Geometry.LINESTRING : result += estimateLineString((LineString) geom); break; case Geometry.POLYGON : result += estimatePolygon((Polygon) geom); break; case Geometry.MULTIPOINT : result += estimateMultiPoint((MultiPoint) geom); break; case Geometry.MULTILINESTRING : result += estimateMultiLineString((MultiLineString) geom); break; case Geometry.MULTIPOLYGON : result += estimateMultiPolygon((MultiPolygon) geom); break; case Geometry.GEOMETRYCOLLECTION : result += estimateCollection((GeometryCollection) geom); break; default : throw new IllegalArgumentException("Unknown Geometry Type: " + geom.type); } return result; } private int estimatePoint(Point geom) { // x, y both have 8 bytes int result = 16; if (geom.dimension == 3) { result += 8; } if (geom.haveMeasure) { result += 8; } return result; } /** Write an Array of "full" Geometries */ private int estimateGeometryArray(Geometry[] container) { int result = 0; for (int i = 0; i < container.length; i++) { result += estimateBytes(container[i]); } return result; } /** * Write an Array of "slim" Points (without endianness and type, part of * LinearRing and Linestring, but not MultiPoint! */ private int estimatePointArray(Point[] geom) { // number of points int result = 4; // And the amount of the points itsself, in consistent geometries // all points have equal size. if (geom.length > 0) { result += geom.length * estimatePoint(geom[0]); } return result; } private int estimateMultiPoint(MultiPoint geom) { // int size int result = 4; if (geom.numPoints() > 0) { // We can shortcut here, as all subgeoms have the same fixed size result += geom.numPoints() * estimateBytes(geom.getFirstPoint()); } return result; } private int estimateLineString(LineString geom) { return estimatePointArray(geom.getPoints()); } private int estimateLinearRing(LinearRing geom) { return estimatePointArray(geom.getPoints()); } private int estimatePolygon(Polygon geom) { // int length int result = 4; for (int i = 0; i < geom.numRings(); i++) { result += estimateLinearRing(geom.getRing(i)); } return result; } private int estimateMultiLineString(MultiLineString geom) { // 4-byte count + subgeometries return 4 + estimateGeometryArray(geom.getLines()); } private int estimateMultiPolygon(MultiPolygon geom) { // 4-byte count + subgeometries return 4 + estimateGeometryArray(geom.getPolygons()); } private int estimateCollection(GeometryCollection geom) { // 4-byte count + subgeometries return 4 + estimateGeometryArray(geom.getGeometries()); } } ���������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/binary/ValueGetter.java���������������������������0000644�0000000�0000000�00000007023�11722777314�025044� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ValueGetter.java * * PostGIS extension for PostgreSQL JDBC driver - Binary Parser * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: ValueGetter.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.binary; public abstract class ValueGetter { ByteGetter data; int position; public final byte endian; public ValueGetter(ByteGetter data, byte endian) { this.data = data; this.endian = endian; } /** * Get a byte, should be equal for all endians */ public byte getByte() { return (byte) data.get(position++); } public int getInt() { int res = getInt(position); position += 4; return res; } public long getLong() { long res = getLong(position); position += 8; return res; } /** Get a 32-Bit integer */ protected abstract int getInt(int index); /** * Get a long value. This is not needed directly, but as a nice side-effect * from GetDouble. */ protected abstract long getLong(int index); /** * Get a double. */ public double getDouble() { long bitrep = getLong(); return Double.longBitsToDouble(bitrep); } public static class XDR extends ValueGetter { public static final byte NUMBER = 0; public XDR(ByteGetter data) { super(data, NUMBER); } protected int getInt(int index) { return (data.get(index) << 24) + (data.get(index + 1) << 16) + (data.get(index + 2) << 8) + data.get(index + 3); } protected long getLong(int index) { return ((long) data.get(index) << 56) + ((long) data.get(index + 1) << 48) + ((long) data.get(index + 2) << 40) + ((long) data.get(index + 3) << 32) + ((long) data.get(index + 4) << 24) + ((long) data.get(index + 5) << 16) + ((long) data.get(index + 6) << 8) + ((long) data.get(index + 7) << 0); } } public static class NDR extends ValueGetter { public static final byte NUMBER = 1; public NDR(ByteGetter data) { super(data, NUMBER); } protected int getInt(int index) { return (data.get(index + 3) << 24) + (data.get(index + 2) << 16) + (data.get(index + 1) << 8) + data.get(index); } protected long getLong(int index) { return ((long) data.get(index + 7) << 56) + ((long) data.get(index + 6) << 48) + ((long) data.get(index + 5) << 40) + ((long) data.get(index + 4) << 32) + ((long) data.get(index + 3) << 24) + ((long) data.get(index + 2) << 16) + ((long) data.get(index + 1) << 8) + ((long) data.get(index) << 0); } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/binary/ByteSetter.java����������������������������0000644�0000000�0000000�00000004636�11722777314�024716� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ByteGetter.java * * PostGIS extension for PostgreSQL JDBC driver - Binary Parser * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: ByteSetter.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.binary; public abstract class ByteSetter { /** * Set a byte. * */ public abstract void set(byte b, int index); public static class BinaryByteSetter extends ByteSetter { private byte[] array; public BinaryByteSetter(int length) { this.array = new byte[length]; } public void set(byte b, int index) { array[index] = b; // mask out sign-extended bits. } public byte[] result() { return array; } public String toString() { char[] arr = new char[array.length]; for (int i=0; i<array.length; i++) { arr[i] = (char)(array[i]&0xFF); } return new String(arr); } } public static class StringByteSetter extends ByteSetter { protected static final char[] hextypes = "0123456789ABCDEF".toCharArray(); private char[] rep; public StringByteSetter(int length) { this.rep = new char[length * 2]; } public void set(byte b, int index) { index *= 2; rep[index] = hextypes[(b >>> 4) & 0xF]; rep[index + 1] = hextypes[b & 0xF]; } public char[] resultAsArray() { return rep; } public String result() { return new String(rep); } public String toString() { return new String(rep); } } } ��������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/binary/BinaryParser.java��������������������������0000644�0000000�0000000�00000017363�11722777314�025226� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * BinaryParser.java * * PostGIS extension for PostgreSQL JDBC driver - Binary Parser * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: BinaryParser.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.binary; import org.postgis.Geometry; import org.postgis.GeometryCollection; import org.postgis.LineString; import org.postgis.LinearRing; import org.postgis.MultiLineString; import org.postgis.MultiPoint; import org.postgis.MultiPolygon; import org.postgis.Point; import org.postgis.Polygon; import org.postgis.binary.ByteGetter.BinaryByteGetter; import org.postgis.binary.ByteGetter.StringByteGetter; /** * Parse binary representation of geometries. * * It should be easy to add char[] and CharSequence ByteGetter instances, * although the latter one is not compatible with older jdks. * * I did not implement real unsigned 32-bit integers or emulate them with long, * as both java Arrays and Strings currently can have only 2^31-1 elements * (bytes), so we cannot even get or build Geometries with more than approx. * 2^28 coordinates (8 bytes each). * * @author Markus Schaber <markus.schaber@logix-tt.com> * */ public class BinaryParser { /** * Get the appropriate ValueGetter for my endianness * * @param bytes The appropriate Byte Getter * * @return the ValueGetter */ public static ValueGetter valueGetterForEndian(ByteGetter bytes) { if (bytes.get(0) == ValueGetter.XDR.NUMBER) { // XDR return new ValueGetter.XDR(bytes); } else if (bytes.get(0) == ValueGetter.NDR.NUMBER) { return new ValueGetter.NDR(bytes); } else { throw new IllegalArgumentException("Unknown Endian type:" + bytes.get(0)); } } /** * Parse a hex encoded geometry * * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) */ public synchronized Geometry parse(String value) { StringByteGetter bytes = new ByteGetter.StringByteGetter(value); return parseGeometry(valueGetterForEndian(bytes)); } /** * Parse a binary encoded geometry. * * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) */ public synchronized Geometry parse(byte[] value) { BinaryByteGetter bytes = new ByteGetter.BinaryByteGetter(value); return parseGeometry(valueGetterForEndian(bytes)); } /** Parse a geometry starting at offset. */ protected Geometry parseGeometry(ValueGetter data) { byte endian = data.getByte(); // skip and test endian flag if (endian != data.endian) { throw new IllegalArgumentException("Endian inconsistency!"); } int typeword = data.getInt(); int realtype = typeword & 0x1FFFFFFF; // cut off high flag bits boolean haveZ = (typeword & 0x80000000) != 0; boolean haveM = (typeword & 0x40000000) != 0; boolean haveS = (typeword & 0x20000000) != 0; int srid = Geometry.UNKNOWN_SRID; if (haveS) { srid = Geometry.parseSRID(data.getInt()); } Geometry result1; switch (realtype) { case Geometry.POINT : result1 = parsePoint(data, haveZ, haveM); break; case Geometry.LINESTRING : result1 = parseLineString(data, haveZ, haveM); break; case Geometry.POLYGON : result1 = parsePolygon(data, haveZ, haveM); break; case Geometry.MULTIPOINT : result1 = parseMultiPoint(data); break; case Geometry.MULTILINESTRING : result1 = parseMultiLineString(data); break; case Geometry.MULTIPOLYGON : result1 = parseMultiPolygon(data); break; case Geometry.GEOMETRYCOLLECTION : result1 = parseCollection(data); break; default : throw new IllegalArgumentException("Unknown Geometry Type: " + realtype); } Geometry result = result1; if (srid != Geometry.UNKNOWN_SRID) { result.setSrid(srid); } return result; } private Point parsePoint(ValueGetter data, boolean haveZ, boolean haveM) { double X = data.getDouble(); double Y = data.getDouble(); Point result; if (haveZ) { double Z = data.getDouble(); result = new Point(X, Y, Z); } else { result = new Point(X, Y); } if (haveM) { result.setM(data.getDouble()); } return result; } /** Parse an Array of "full" Geometries */ private void parseGeometryArray(ValueGetter data, Geometry[] container) { for (int i = 0; i < container.length; i++) { container[i] = parseGeometry(data); } } /** * Parse an Array of "slim" Points (without endianness and type, part of * LinearRing and Linestring, but not MultiPoint! * * @param haveZ * @param haveM */ private Point[] parsePointArray(ValueGetter data, boolean haveZ, boolean haveM) { int count = data.getInt(); Point[] result = new Point[count]; for (int i = 0; i < count; i++) { result[i] = parsePoint(data, haveZ, haveM); } return result; } private MultiPoint parseMultiPoint(ValueGetter data) { Point[] points = new Point[data.getInt()]; parseGeometryArray(data, points); return new MultiPoint(points); } private LineString parseLineString(ValueGetter data, boolean haveZ, boolean haveM) { Point[] points = parsePointArray(data, haveZ, haveM); return new LineString(points); } private LinearRing parseLinearRing(ValueGetter data, boolean haveZ, boolean haveM) { Point[] points = parsePointArray(data, haveZ, haveM); return new LinearRing(points); } private Polygon parsePolygon(ValueGetter data, boolean haveZ, boolean haveM) { int count = data.getInt(); LinearRing[] rings = new LinearRing[count]; for (int i = 0; i < count; i++) { rings[i] = parseLinearRing(data, haveZ, haveM); } return new Polygon(rings); } private MultiLineString parseMultiLineString(ValueGetter data) { int count = data.getInt(); LineString[] strings = new LineString[count]; parseGeometryArray(data, strings); return new MultiLineString(strings); } private MultiPolygon parseMultiPolygon(ValueGetter data) { int count = data.getInt(); Polygon[] polys = new Polygon[count]; parseGeometryArray(data, polys); return new MultiPolygon(polys); } private GeometryCollection parseCollection(ValueGetter data) { int count = data.getInt(); Geometry[] geoms = new Geometry[count]; parseGeometryArray(data, geoms); return new GeometryCollection(geoms); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/binary/ByteGetter.java����������������������������0000644�0000000�0000000�00000004477�11722777314�024705� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ByteGetter.java * * PostGIS extension for PostgreSQL JDBC driver - Binary Parser * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: ByteGetter.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.binary; public abstract class ByteGetter { /** * Get a byte. * * @return The result is returned as Int to eliminate sign problems when * or'ing several values together. */ public abstract int get(int index); public static class BinaryByteGetter extends ByteGetter { private byte[] array; public BinaryByteGetter(byte[] array) { this.array = array; } public int get(int index) { return array[index] & 0xFF; // mask out sign-extended bits. } } public static class StringByteGetter extends ByteGetter { private String rep; public StringByteGetter(String rep) { this.rep = rep; } public int get(int index) { index *= 2; int high = unhex(rep.charAt(index)); int low = unhex(rep.charAt(index + 1)); return (high << 4) + low; } public static byte unhex(char c) { if (c >= '0' && c <= '9') { return (byte) (c - '0'); } else if (c >= 'A' && c <= 'F') { return (byte) (c - 'A' + 10); } else if (c >= 'a' && c <= 'f') { return (byte) (c - 'a' + 10); } else { throw new IllegalArgumentException("No valid Hex char " + c); } } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/binary/ValueSetter.java���������������������������0000644�0000000�0000000�00000010144�11722777314�025056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ValueGetter.java * * PostGIS extension for PostgreSQL JDBC driver - Binary Parser * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: ValueSetter.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.binary; public abstract class ValueSetter { ByteSetter data; int position=0; public final byte endian; public ValueSetter(ByteSetter data, byte endian) { this.data = data; this.endian = endian; } /** * Get a byte, should be equal for all endians */ public void setByte(byte value) { data.set(value, position); position += 1; } public void setInt(int value) { setInt(value, position); position += 4; } public void setLong(long value) { setLong(value, position); position += 8; } /** Get a 32-Bit integer */ protected abstract void setInt(int value, int index); /** * Get a long value. This is not needed directly, but as a nice side-effect * from GetDouble. */ protected abstract void setLong(long data, int index); /** * Get a double. */ public void setDouble(double data) { long bitrep = Double.doubleToLongBits(data); setLong(bitrep); } public String toString() { String name = getClass().getName(); int pointpos = name.lastIndexOf('.'); String klsName = name.substring(pointpos+1); return klsName+"('"+(data==null?"NULL":data.toString()+"')"); } public static class XDR extends ValueSetter { public static final byte NUMBER = 0; public XDR(ByteSetter data) { super(data, NUMBER); } protected void setInt(int value, int index) { data.set((byte) (value >>> 24), index); data.set((byte) (value >>> 16), index + 1); data.set((byte) (value >>> 8), index + 2); data.set((byte) value, index + 3); } protected void setLong(long value, int index) { data.set((byte) (value >>> 56), index); data.set((byte) (value >>> 48), index + 1); data.set((byte) (value >>> 40), index + 2); data.set((byte) (value >>> 32), index + 3); data.set((byte) (value >>> 24), index + 4); data.set((byte) (value >>> 16), index + 5); data.set((byte) (value >>> 8), index + 6); data.set((byte) value, index + 7); } } public static class NDR extends ValueSetter { public static final byte NUMBER = 1; public NDR(ByteSetter data) { super(data, NUMBER); } protected void setInt(int value, int index) { data.set((byte) (value >>> 24), index + 3); data.set((byte) (value >>> 16), index + 2); data.set((byte) (value >>> 8), index + 1); data.set((byte) value, index); } protected void setLong(long value, int index) { data.set((byte) (value >>> 56), index + 7); data.set((byte) (value >>> 48), index + 6); data.set((byte) (value >>> 40), index + 5); data.set((byte) (value >>> 32), index + 4); data.set((byte) (value >>> 24), index + 3); data.set((byte) (value >>> 16), index + 2); data.set((byte) (value >>> 8), index + 1); data.set((byte) value, index); } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/PGgeometry.java�����������������������������������0000644�0000000�0000000�00000012625�11722777314�023417� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PGgeometry.java * * PostGIS extension for PostgreSQL JDBC driver - PGobject Geometry Wrapper * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PGgeometry.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgis.binary.BinaryParser; import org.postgresql.util.PGobject; import java.sql.SQLException; public class PGgeometry extends PGobject { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; Geometry geom; BinaryParser bp = new BinaryParser(); public PGgeometry() { this.setType("geometry"); } public PGgeometry(Geometry geom) { this(); this.geom = geom; } public PGgeometry(String value) throws SQLException { this(); setValue(value); } public void setValue(String value) throws SQLException { geom = geomFromString(value, bp); } public static Geometry geomFromString(String value) throws SQLException { return geomFromString(value, false); } public static Geometry geomFromString(String value, boolean haveM) throws SQLException { BinaryParser bp = new BinaryParser(); return geomFromString(value, bp, haveM); } /** * Maybe we could add more error checking here? */ public static Geometry geomFromString(String value, BinaryParser bp) throws SQLException { return geomFromString(value, bp, false); } public static Geometry geomFromString(String value, BinaryParser bp, boolean haveM) throws SQLException { value = value.trim(); int srid = Geometry.UNKNOWN_SRID; if (value.startsWith(SRIDPREFIX)) { // break up geometry into srid and wkt String[] parts = PGgeometry.splitSRID(value); value = parts[1].trim(); srid = Geometry.parseSRID(Integer.parseInt(parts[0].substring(5))); } Geometry result; if (value.startsWith("00") || value.startsWith("01")) { result = bp.parse(value); } else if (value.endsWith("EMPTY")) { // We have a standard conforming representation for an empty // geometry which is to be parsed as an empty GeometryCollection. result = new GeometryCollection(); } else if (value.startsWith("MULTIPOLYGON")) { result = new MultiPolygon(value, haveM); } else if (value.startsWith("MULTILINESTRING")) { result = new MultiLineString(value, haveM); } else if (value.startsWith("MULTIPOINT")) { result = new MultiPoint(value, haveM); } else if (value.startsWith("POLYGON")) { result = new Polygon(value, haveM); } else if (value.startsWith("LINESTRING")) { result = new LineString(value, haveM); } else if (value.startsWith("POINT")) { result = new Point(value, haveM); } else if (value.startsWith("GEOMETRYCOLLECTION")) { result = new GeometryCollection(value, haveM); } else { throw new SQLException("Unknown type: " + value); } if (srid != Geometry.UNKNOWN_SRID) { result.srid = srid; } return result; } public Geometry getGeometry() { return geom; } public void setGeometry(Geometry newgeom) { this.geom = newgeom; } public int getGeoType() { return geom.type; } public String toString() { return geom.toString(); } public String getValue() { return geom.toString(); } public Object clone() { return new PGgeometry(geom); } /** The prefix that indicates SRID presence */ public static final String SRIDPREFIX = "SRID="; /** * Splits a String at the first occurrence of border charachter. * * Poor man's String.split() replacement, as String.split() was invented at * jdk1.4, and the Debian PostGIS Maintainer had problems building the woody * backport of his package using DFSG-free compilers. In all the cases we * used split() in the org.postgis package, we only needed to split at the * first occurence, and thus this code could even be faster. * * @throws SQLException */ public static String[] splitSRID(String whole) throws SQLException { int index = whole.indexOf(';', 5); // sridprefix length is 5 if (index == -1) { throw new SQLException("Error parsing Geometry - SRID not delimited with ';' "); } else { return new String[]{ whole.substring(0, index), whole.substring(index + 1)}; } } } �����������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/DriverWrapperAutoprobe.java�����������������������0000644�0000000�0000000�00000007315�11722777314�026012� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * DriverWrapperAutoprobe.java * * PostGIS extension for PostgreSQL JDBC driver - Wrapper utility class * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: DriverWrapperAutoprobe.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgresql.Driver; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; /** * DriverWrapperAutoprobe * * Wraps the PostGreSQL Driver to transparently add the PostGIS Object Classes. * This avoids the need of explicit addDataType() calls from the driver users * side. * * This DriverWrapper tries to autoprobe the installed PostGIS version to decide * whether to use EWKT or hex encoded EWKB as canonical text representation. It * uses the first PostGIS installation found in your namespace search path (aka * schema search path) on the server side, and this works as long as you do not * access incompatible PostGIS versions that reside in other schemas. * * For usage notes, see DriverWrapper class, but use "jdbc:postgresql_autogis:" * as JDBC url prefix and org.postgis.DriverWrapperAutoprobe as driver class. * * @author Markus Schaber <markus.schaber@logix-tt.com> * @see DriverWrapper */ public class DriverWrapperAutoprobe extends DriverWrapper { public static final String POSTGIS_AUTOPROTOCOL = "jdbc:postgresql_autogis:"; public static final String REVISIONAUTO = "$Revision: 9324 $"; /** * Default constructor. */ public DriverWrapperAutoprobe() throws SQLException { super(); } static { try { // Try to register ourself to the DriverManager java.sql.DriverManager.registerDriver(new DriverWrapperAutoprobe()); } catch (SQLException e) { logger.log(Level.WARNING, "Error registering PostGIS LW Wrapper Driver", e); } } protected String getProtoString() { return POSTGIS_AUTOPROTOCOL; } protected boolean useLW(Connection conn) { try { return supportsEWKB(conn); } catch (SQLException e) { // fail safe default return false; } } /** * Returns our own CVS version plus postgres Version */ public static String getVersion() { return "PostGisWrapperAutoprobe " + REVISIONAUTO + ", wrapping " + Driver.getVersion(); } public static boolean supportsEWKB(Connection conn) throws SQLException { Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("SELECT postgis_version()"); rs.next(); String version = rs.getString(1); rs.close(); stat.close(); if (version == null) { throw new SQLException("postgis_version returned NULL!"); } version = version.trim(); int idx = version.indexOf('.'); int majorVersion = Integer.parseInt(version.substring(0, idx)); return majorVersion >= 1; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/MultiPoint.java�����������������������������������0000644�0000000�0000000�00000003037�11722777314�023436� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MultiPoint.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: MultiPoint.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; public class MultiPoint extends PointComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public MultiPoint() { super(MULTIPOINT); } public MultiPoint(Point[] points) { super(MULTIPOINT, points); } public MultiPoint(String value) throws SQLException { this(value, false); } protected MultiPoint(String value, boolean haveM) throws SQLException { super(MULTIPOINT, value, haveM); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/MultiPolygon.java���������������������������������0000644�0000000�0000000�00000004213�11722777314�023771� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MultiPolygon.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: MultiPolygon.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; public class MultiPolygon extends ComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public MultiPolygon() { super(MULTIPOLYGON); } public MultiPolygon(Polygon[] polygons) { super(MULTIPOLYGON, polygons); } public MultiPolygon(String value) throws SQLException { this(value, false); } protected MultiPolygon(String value, boolean haveM) throws SQLException { super(MULTIPOLYGON, value, haveM); } protected Geometry[] createSubGeomArray(int npolygons) { return new Polygon[npolygons]; } protected Geometry createSubGeomInstance(String token, boolean haveM) throws SQLException { return new Polygon(token, haveM); } public int numPolygons() { return subgeoms.length; } public Polygon getPolygon(int idx) { if (idx >= 0 & idx < subgeoms.length) { return (Polygon) subgeoms[idx]; } else { return null; } } public Polygon[] getPolygons() { return (Polygon[]) subgeoms; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/PGbox2d.java��������������������������������������0000644�0000000�0000000�00000003475�11722777314�022605� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PGbox2d.java * * PostGIS extension for PostgreSQL JDBC driver - bounding box model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PGbox2d.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; public class PGbox2d extends PGboxbase { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public PGbox2d() { super(); } public PGbox2d(Point llb, Point urt) { super(llb, urt); } public PGbox2d(String value) throws SQLException { super(value); } public void setValue(String value) throws SQLException { super.setValue(value); if (llb.dimension != 2 || urt.dimension != 2) { throw new SQLException("PGbox2d is only allowed to have 2 dimensions!"); } } public String getPrefix() { return "BOX"; } public String getPGtype() { return "box2d"; } protected PGboxbase newInstance() { return new PGbox2d(); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/ComposedGeom.java���������������������������������0000644�0000000�0000000�00000020411�11722777314�023706� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ComposedGeom.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: ComposedGeom.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgresql.util.PGtokenizer; import java.sql.SQLException; import java.util.Iterator; /** * ComposedGeom - Abstract base class for all Geometries that are composed out * of other Geometries. * * In fact, this currently are all Geometry subclasses except Point. * * @author markus.schaber@logix-tt.com * * */ public abstract class ComposedGeom extends Geometry { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public static final Geometry[] EMPTY = new Geometry[0]; /** * The Array containing the geometries * * This is only to be exposed by concrete subclasses, to retain type safety. */ protected Geometry[] subgeoms = EMPTY; /** * @param type */ public ComposedGeom(int type) { super(type); } public Geometry getSubGeometry(int index) { return subgeoms[index]; } public int numGeoms() { return subgeoms.length; } protected ComposedGeom(int type, Geometry[] geoms) { this(type); this.subgeoms = geoms; if (geoms.length > 0) { dimension = geoms[0].dimension; haveMeasure = geoms[0].haveMeasure; } else { dimension = 0; } } protected ComposedGeom(int type, String value, boolean haveM) throws SQLException { super(type); value = initSRID(value); String typestring = getTypeString(); if (value.indexOf(typestring) == 0) { int pfxlen = typestring.length(); if (value.charAt(pfxlen) == 'M') { pfxlen += 1; haveM = true; } value = value.substring(pfxlen).trim(); } else if (value.charAt(0) != '(') { // we are neigher inner nor outer rep. throw new SQLException("Error parsing a " + typestring + " out of " + value); } if (value.equals("(EMPTY)")) { // Special case for PostGIS 0.X style empty geometry collections // (which are not OpenGIS compliant) return; } PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(value), ','); int subgeomcount = t.getSize(); subgeoms = createSubGeomArray(subgeomcount); for (int p = 0; p < subgeomcount; p++) { subgeoms[p] = createSubGeomInstance(t.getToken(p), haveM); } dimension = subgeoms[0].dimension; // fetch haveMeasure from subpoint because haveM does only work with // 2d+M, not with 3d+M geometries haveMeasure = subgeoms[0].haveMeasure; } /** * Return the appropriate instance of the subgeometry - this encapsulates * subclass specific constructor calls */ protected abstract Geometry createSubGeomInstance(String token, boolean haveM) throws SQLException; /** * Return the appropriate instance of the subgeometry array - this * encapsulates subclass specific array instantiation */ protected abstract Geometry[] createSubGeomArray(int size); protected boolean equalsintern(Geometry other) { // Can be assumed to be the same subclass of Geometry, so it must be a // ComposedGeom, too. ComposedGeom cother = (ComposedGeom) other; if (cother.subgeoms == null && subgeoms == null) { return true; } else if (cother.subgeoms == null || subgeoms == null) { return false; } else if (cother.subgeoms.length != subgeoms.length) { return false; } else if (subgeoms.length == 0) { return true; } else { for (int i = 0; i < subgeoms.length; i++) { if (!cother.subgeoms[i].equalsintern(this.subgeoms[i])) { return false; } } } return true; } public int numPoints() { if ((subgeoms == null) || (subgeoms.length == 0)) { return 0; } else { int result = 0; for (int i = 0; i < subgeoms.length; i++) { result += subgeoms[i].numPoints(); } return result; } } public Point getPoint(int n) { if (n < 0) { throw new ArrayIndexOutOfBoundsException("Negative index not allowed"); } else if ((subgeoms == null) || (subgeoms.length == 0)) { throw new ArrayIndexOutOfBoundsException("Empty Geometry has no Points!"); } else { for (int i = 0; i < subgeoms.length; i++) { Geometry current = subgeoms[i]; int np = current.numPoints(); if (n < np) { return current.getPoint(n); } else { n -= np; } } throw new ArrayIndexOutOfBoundsException("Index too large!"); } } /** * Optimized version */ public Point getLastPoint() { if ((subgeoms == null) || (subgeoms.length == 0)) { throw new ArrayIndexOutOfBoundsException("Empty Geometry has no Points!"); } else { return subgeoms[subgeoms.length - 1].getLastPoint(); } } /** * Optimized version */ public Point getFirstPoint() { if ((subgeoms == null) || (subgeoms.length == 0)) { throw new ArrayIndexOutOfBoundsException("Empty Geometry has no Points!"); } else { return subgeoms[0].getFirstPoint(); } } public Iterator iterator() { return java.util.Arrays.asList(subgeoms).iterator(); } public boolean isEmpty() { return (subgeoms == null) || (subgeoms.length == 0); } protected void mediumWKT(StringBuffer sb) { if ((subgeoms == null) || (subgeoms.length == 0)) { sb.append(" EMPTY"); } else { sb.append('('); innerWKT(sb); sb.append(')'); } } protected void innerWKT(StringBuffer sb) { subgeoms[0].mediumWKT(sb); for (int i = 1; i < subgeoms.length; i++) { sb.append(','); subgeoms[i].mediumWKT(sb); } } // Hashing - still buggy! boolean nohash = true; int hashcode = 0; public int hashCode() { if (nohash) { hashcode = super.hashCode() ^ subgeoms.hashCode(); nohash = false; } return hashcode; } public boolean checkConsistency() { if (super.checkConsistency()) { if (isEmpty()) { return true; } // cache to avoid getMember opcode int _dimension = this.dimension; boolean _haveMeasure = this.haveMeasure; int _srid = this.srid; for (int i = 0; i < subgeoms.length; i++) { Geometry sub = subgeoms[i]; if (!(sub.checkConsistency() && sub.dimension == _dimension && sub.haveMeasure == _haveMeasure && sub.srid == _srid)) { return false; } } return true; } else { return false; } } public void setSrid(int srid) { super.setSrid(srid); for (int i = 0; i < subgeoms.length; i++) { subgeoms[i].setSrid(srid); } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/PGboxbase.java������������������������������������0000644�0000000�0000000�00000012016�11722777314�023201� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PGboxbase.java * * PostGIS extension for PostgreSQL JDBC driver - bounding box model * * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PGboxbase.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import org.postgresql.util.PGobject; import org.postgresql.util.PGtokenizer; import java.sql.SQLException; /* * Updates Oct 2002 - data members made private - getLLB() and getURT() methods * added */ public abstract class PGboxbase extends PGobject { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; /** * The lower left bottom corner of the box. */ protected Point llb; /** * The upper right top corner of the box. */ protected Point urt; /** * The Prefix we have in WKT rep. * * I use an abstract method here so we do not need to replicate the String * object in every instance. * */ public abstract String getPrefix(); /** * The Postgres type we have (same construct as getPrefix()) */ public abstract String getPGtype(); public PGboxbase() { this.setType(getPGtype()); } public PGboxbase(Point llb, Point urt) { this(); this.llb = llb; this.urt = urt; } public PGboxbase(String value) throws SQLException { this(); setValue(value); } public void setValue(String value) throws SQLException { int srid = Geometry.UNKNOWN_SRID; value = value.trim(); if (value.startsWith("SRID=")) { String[] temp = PGgeometry.splitSRID(value); value = temp[1].trim(); srid = Geometry.parseSRID(Integer.parseInt(temp[0].substring(5))); } String myPrefix = getPrefix(); if (value.startsWith(myPrefix)) { value = value.substring(myPrefix.length()).trim(); } PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(value), ','); llb = new Point(t.getToken(0)); urt = new Point(t.getToken(1)); if (srid != Geometry.UNKNOWN_SRID) { llb.setSrid(srid); urt.setSrid(srid); } } public String getValue() { StringBuffer sb = new StringBuffer(); outerWKT(sb); return sb.toString(); } private void outerWKT(StringBuffer sb) { sb.append(getPrefix()); sb.append('('); llb.innerWKT(sb); sb.append(','); urt.innerWKT(sb); sb.append(')'); } /** * Unlike geometries, toString() does _not_ contain the srid, as server-side * PostGIS cannot parse this. */ public String toString() { return getValue(); } /** Returns the lower left bottom corner of the box as a Point object */ public Point getLLB() { return llb; } /** Returns the upper right top corner of the box as a Point object */ public Point getURT() { return urt; } public boolean equals(Object other) { if (other instanceof PGboxbase) { PGboxbase otherbox = (PGboxbase) other; return (compareLazyDim(this.llb, otherbox.llb) && compareLazyDim(this.urt, otherbox.urt)); } return false; } /** * Compare two coordinates with lazy dimension checking. * * As the Server always returns Box3D with three dimensions, z==0 equals * dimensions==2 * */ protected static boolean compareLazyDim(Point first, Point second) { return first.x == second.x && first.y == second.y && (((first.dimension == 2 || first.z == 0.0) && (second.dimension == 2 || second.z == 0)) || (first.z == second.z)); } public Object clone() { PGboxbase obj = newInstance(); obj.llb = this.llb; obj.urt = this.urt; obj.setType(type); return obj; } /** * We could have used this.getClass().newInstance() here, but this forces us * dealing with InstantiationException and IllegalAccessException. Due to * the PGObject.clone() brokennes that does not allow clone() to throw * CloneNotSupportedException, we cannot even pass this exceptions down to * callers in a sane way. */ protected abstract PGboxbase newInstance(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/Geometry.java�������������������������������������0000644�0000000�0000000�00000020302�11722777314�023117� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Geometry.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: Geometry.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.io.Serializable; /** The base class of all geometries */ public abstract class Geometry implements Serializable { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; // OpenGIS Geometry types as defined in the OGC WKB Spec // (May we replace this with an ENUM as soon as JDK 1.5 // has gained widespread usage?) /** Fake type for linear ring */ public static final int LINEARRING = 0; /** * The OGIS geometry type number for points. */ public static final int POINT = 1; /** * The OGIS geometry type number for lines. */ public static final int LINESTRING = 2; /** * The OGIS geometry type number for polygons. */ public static final int POLYGON = 3; /** * The OGIS geometry type number for aggregate points. */ public static final int MULTIPOINT = 4; /** * The OGIS geometry type number for aggregate lines. */ public static final int MULTILINESTRING = 5; /** * The OGIS geometry type number for aggregate polygons. */ public static final int MULTIPOLYGON = 6; /** * The OGIS geometry type number for feature collections. */ public static final int GEOMETRYCOLLECTION = 7; public static final String[] ALLTYPES = new String[] { "", // internally used LinearRing does not have any text in front of // it "POINT", "LINESTRING", "POLYGON", "MULTIPOINT", "MULTILINESTRING", "MULTIPOLYGON", "GEOMETRYCOLLECTION" }; /** * The Text representations of the geometry types */ public static String getTypeString(int type) { if (type >= 0 && type <= 7) { return ALLTYPES[type]; } else { throw new IllegalArgumentException("Unknown Geometry type" + type); } } // Properties common to all geometries /** * The dimensionality of this feature (2,3) */ public int dimension; /** * Do we have a measure (4th dimension) */ public boolean haveMeasure = false; /** * The OGIS geometry type of this feature. this is final as it never * changes, it is bound to the subclass of the instance. */ public final int type; /** * Official UNKNOWN srid value */ public final static int UNKNOWN_SRID = 0; /** * The spacial reference system id of this geometry, default is no srid */ public int srid = UNKNOWN_SRID; /** * Parse a SRID value, anything <= 0 is unknown */ public static int parseSRID(int srid) { if (srid < 0) { /* TODO: raise a warning ? */ srid = 0; } return srid; } /** * Constructor for subclasses * * @param type * has to be given by all subclasses. */ protected Geometry(int type) { this.type = type; } /** * java.lang.Object hashCode implementation */ public int hashCode() { return dimension | (type * 4) | (srid * 32); } /** * java.lang.Object equals implementation */ public boolean equals(Object other) { return (other != null) && (other instanceof Geometry) && equals((Geometry) other); } /** * geometry specific equals implementation - only defined for non-null * values */ public boolean equals(Geometry other) { return (other != null) && (this.dimension == other.dimension) && (this.type == other.type) && (this.srid == other.srid) && (this.haveMeasure == other.haveMeasure) && other.getClass().equals(this.getClass()) && this.equalsintern(other); } /** * Whether test coordinates for geometry - subclass specific code * * Implementors can assume that dimensin, type, srid and haveMeasure are * equal, other != null and other is the same subclass. */ protected abstract boolean equalsintern(Geometry other); /** * Return the number of Points of the geometry */ public abstract int numPoints(); /** * Get the nth Point of the geometry * * @param n * the index of the point, from 0 to numPoints()-1; * @throws ArrayIndexOutOfBoundsException * in case of an emtpy geometry or bad index. */ public abstract Point getPoint(int n); /** * Same as getPoint(0); */ public abstract Point getFirstPoint(); /** * Same as getPoint(numPoints()-1); */ public abstract Point getLastPoint(); /** * The OGIS geometry type number of this geometry. */ public int getType() { return this.type; } /** * Return the Type as String */ public String getTypeString() { return getTypeString(this.type); } /** Returns whether we have a measure */ public boolean isMeasured() { return haveMeasure; } /** * Queries the number of geometric dimensions of this geometry. This does * not include measures, as opposed to the server. * * @return The dimensionality (eg, 2D or 3D) of this geometry. */ public int getDimension() { return this.dimension; } /** * The OGIS geometry type number of this geometry. */ public int getSrid() { return this.srid; } /** * Recursively sets the srid on this geometry and all contained * subgeometries */ public void setSrid(int srid) { this.srid = srid; } public String toString() { StringBuffer sb = new StringBuffer(); if (srid != UNKNOWN_SRID) { sb.append("SRID="); sb.append(srid); sb.append(';'); } outerWKT(sb, true); return sb.toString(); } /** * Render the WKT version of this Geometry (without SRID) into the given * StringBuffer. */ public void outerWKT(StringBuffer sb, boolean putM) { sb.append(getTypeString()); if (putM && haveMeasure && dimension == 2) { sb.append('M'); } mediumWKT(sb); } public final void outerWKT(StringBuffer sb) { outerWKT(sb, true); } /** * Render the WKT without the type name, but including the brackets into the * StringBuffer */ protected void mediumWKT(StringBuffer sb) { sb.append('('); innerWKT(sb); sb.append(')'); } /** * Render the "inner" part of the WKT (inside the brackets) into the * StringBuffer. */ protected abstract void innerWKT(StringBuffer SB); /** * backwards compatibility method */ public String getValue() { StringBuffer sb = new StringBuffer(); mediumWKT(sb); return sb.toString(); } /** * Do some internal consistency checks on the geometry. * * Currently, all Geometries must have a valid dimension (2 or 3) and a * valid type. 2-dimensional Points must have Z=0.0, as well as non-measured * Points must have m=0.0. Composed geometries must have all equal SRID, * dimensionality and measures, as well as that they do not contain NULL or * inconsistent subgeometries. * * BinaryParser and WKTParser should only generate consistent geometries. * BinaryWriter may produce invalid results on inconsistent geometries. * * @return true if all checks are passed. */ public boolean checkConsistency() { return (dimension >= 2 && dimension <= 3) && (type >= 0 && type <= 7); } /** * Splits the SRID=4711; part of a EWKT rep if present and sets the srid. * * @return value without the SRID=4711; part */ protected String initSRID(String value) { value = value.trim(); if (value.startsWith("SRID=")) { int index = value.indexOf(';', 5); // sridprefix length is 5 if (index == -1) { throw new IllegalArgumentException( "Error parsing Geometry - SRID not delimited with ';' "); } else { this.srid = Integer.parseInt(value.substring(5, index)); return value.substring(index + 1).trim(); } } else { return value; } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/DriverWrapper.java��������������������������������0000644�0000000�0000000�00000027140�12017042067�024113� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * DriverWrapper.java * * PostGIS extension for PostgreSQL JDBC driver - Wrapper utility class * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: DriverWrapper.java 10206 2012-08-28 04:08:23Z robe $ */ package org.postgis; import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import org.postgresql.Driver; import org.postgresql.PGConnection; /** * DriverWrapper * * Wraps the PostGreSQL Driver to transparently add the PostGIS Object Classes. * This avoids the need of explicit addDataType() calls from the driver users * side. * * This method currently works with J2EE DataSource implementations, and with * DriverManager framework. * * Simply replace the "jdbc:postgresql:" with a "jdbc:postgresql_postGIS:" in * the jdbc URL. * * When using the drivermanager, you need to initialize DriverWrapper instead of * (or in addition to) org.postgresql.Driver. When using a J2EE DataSource * implementation, set the driver class property in the datasource config, the * following works for jboss: * * <code> * <driver-class>org.postgis.DriverWrapper</driver-class> * </code> * If you don't like or want to use the DriverWrapper, you have two * alternatives, see the README file. * * Also note that the addDataType() methods known from earlier pgjdbc versions * are deprecated in pgjdbc 8.0, see the commented code variants in the * addGisTypes() method. * * This wrapper always uses EWKT as canonical text representation, and thus * works against PostGIS 1.x servers as well as 0.x (tested with 0.8, 0.9 and * 1.0). * * @author Markus Schaber <markus.schaber@logix-tt.com> * @see DriverWrapperLW * @see DriverWrapperAutoprobe */ public class DriverWrapper extends Driver { protected static final Logger logger = Logger.getLogger("org.postgis.DriverWrapper"); public static final String POSTGRES_PROTOCOL = "jdbc:postgresql:"; public static final String POSTGIS_PROTOCOL = "jdbc:postgresql_postGIS:"; public static final String REVISION = "$Revision: 10206 $"; protected static TypesAdder ta72 = null; protected static TypesAdder ta74 = null; protected static TypesAdder ta80 = null; protected TypesAdder typesAdder; /** * Default constructor. * * This also loads the appropriate TypesAdder for our SQL Driver instance. * * @throws SQLException */ public DriverWrapper() throws SQLException { super(); typesAdder = getTypesAdder(this); // The debug method is @since 7.2 if (super.getMajorVersion() > 8 || super.getMinorVersion() > 1) { logger.fine(this.getClass().getName() + " loaded TypesAdder: " + typesAdder.getClass().getName()); } } protected static TypesAdder getTypesAdder(Driver d) throws SQLException { if (d.getMajorVersion() == 7) { if (d.getMinorVersion() >= 3) { if (ta74 == null) { ta74 = loadTypesAdder("74"); } return ta74; } else { if (ta72 == null) { ta72 = loadTypesAdder("72"); } return ta72; } } else { if (ta80 == null) { ta80 = loadTypesAdder("80"); } return ta80; } } private static TypesAdder loadTypesAdder(String version) throws SQLException { try { Class klass = Class.forName("org.postgis.DriverWrapper$TypesAdder" + version); return (TypesAdder) klass.newInstance(); } catch (Exception e) { throw new SQLException("Cannot create TypesAdder instance! " + e.getMessage()); } } static { try { // Try to register ourself to the DriverManager java.sql.DriverManager.registerDriver(new DriverWrapper()); } catch (SQLException e) { logger.log(Level.WARNING, "Error registering PostGIS Wrapper Driver", e); } } /** * Creates a postgresql connection, and then adds the PostGIS data types to * it calling addpgtypes() * * @param url the URL of the database to connect to * @param info a list of arbitrary tag/value pairs as connection arguments * @return a connection to the URL or null if it isnt us * @exception SQLException if a database access error occurs * * @see java.sql.Driver#connect * @see org.postgresql.Driver */ public java.sql.Connection connect(String url, Properties info) throws SQLException { url = mangleURL(url); Connection result = super.connect(url, info); typesAdder.addGT(result, useLW(result)); return result; } /** * Do we have HexWKB as well known text representation - to be overridden by * subclasses. */ protected boolean useLW(Connection result) { if (result == null) { throw new IllegalArgumentException("null is no valid parameter"); } return false; } /** * Check whether the driver thinks he can handle the given URL. * * @see java.sql.Driver#acceptsURL * @param url the URL of the driver * @return true if this driver accepts the given URL * @exception SQLException Passed through from the underlying PostgreSQL * driver, should not happen. */ public boolean acceptsURL(String url) throws SQLException { try { url = mangleURL(url); } catch (SQLException e) { return false; } return super.acceptsURL(url); } /** * Returns our own CVS version plus postgres Version */ public static String getVersion() { return "PostGisWrapper " + REVISION + ", wrapping " + Driver.getVersion(); } /* * Here follows the addGISTypes() stuff. This is a little tricky because the * pgjdbc people had several, partially incompatible API changes during 7.2 * and 8.0. We still want to support all those releases, however. * */ /** * adds the JTS/PostGIS Data types to a PG 7.3+ Connection. If you use * PostgreSQL jdbc drivers V8.0 or newer, those methods are deprecated due * to some class loader problems (but still work for now), and you may want * to use the method below instead. * * @throws SQLException * */ public static void addGISTypes(PGConnection pgconn) throws SQLException { loadTypesAdder("74").addGT((Connection) pgconn, false); } /** * adds the JTS/PostGIS Data types to a PG 8.0+ Connection. */ public static void addGISTypes80(PGConnection pgconn) throws SQLException { loadTypesAdder("80").addGT((Connection) pgconn, false); } /** * adds the JTS/PostGIS Data types to a PG 7.2 Connection. * * @throws SQLException */ public static void addGISTypes72(org.postgresql.PGConnection pgconn) throws SQLException { loadTypesAdder("72").addGT((Connection) pgconn, false); } /** * Mangles the PostGIS URL to return the original PostGreSQL URL */ protected String mangleURL(String url) throws SQLException { String myProgo = getProtoString(); if (url.startsWith(myProgo)) { return POSTGRES_PROTOCOL + url.substring(myProgo.length()); } else { throw new SQLException("Unknown protocol or subprotocol in url " + url); } } protected String getProtoString() { return POSTGIS_PROTOCOL; } /** Base class for the three typewrapper implementations */ protected abstract static class TypesAdder { public final void addGT(java.sql.Connection conn, boolean lw) throws SQLException { if (lw) { addBinaryGeometries(conn); } else { addGeometries(conn); } addBoxen(conn); } public abstract void addGeometries(Connection conn) throws SQLException; public abstract void addBoxen(Connection conn) throws SQLException; public abstract void addBinaryGeometries(Connection conn) throws SQLException; } /** addGISTypes for V7.3 and V7.4 pgjdbc */ protected static final class TypesAdder74 extends TypesAdder { public void addGeometries(Connection conn) throws SQLException { PGConnection pgconn = (PGConnection) conn; pgconn.addDataType("geometry", org.postgis.PGgeometry.class); } public void addBoxen(Connection conn) throws SQLException { PGConnection pgconn = (PGConnection) conn; pgconn.addDataType("box3d", org.postgis.PGbox3d.class); pgconn.addDataType("box2d", org.postgis.PGbox2d.class); } public void addBinaryGeometries(Connection conn) throws SQLException { PGConnection pgconn = (PGConnection) conn; pgconn.addDataType("geometry", org.postgis.PGgeometryLW.class); } } /** addGISTypes for V7.2 pgjdbc */ protected static class TypesAdder72 extends TypesAdder { public void addGeometries(Connection conn) throws SQLException { org.postgresql.PGConnection pgconn = (org.postgresql.PGConnection) conn; pgconn.addDataType("geometry", org.postgis.PGgeometry.class); } public void addBoxen(Connection conn) throws SQLException { org.postgresql.PGConnection pgconn = (org.postgresql.PGConnection) conn; pgconn.addDataType("box3d", org.postgis.PGbox3d.class); pgconn.addDataType("box2d", org.postgis.PGbox2d.class); } public void addBinaryGeometries(Connection conn) throws SQLException { org.postgresql.PGConnection pgconn = (org.postgresql.PGConnection) conn; pgconn.addDataType("geometry", org.postgis.PGgeometryLW.class); } } /** addGISTypes for V8.0 (and hopefully newer) pgjdbc */ protected static class TypesAdder80 extends TypesAdder { public void addGeometries(Connection conn) throws SQLException { PGConnection pgconn = (PGConnection) conn; pgconn.addDataType("geometry", org.postgis.PGgeometry.class); } public void addBoxen(Connection conn) throws SQLException { PGConnection pgconn = (PGConnection) conn; pgconn.addDataType("box3d", org.postgis.PGbox3d.class); pgconn.addDataType("box2d", org.postgis.PGbox2d.class); } public void addBinaryGeometries(Connection conn) throws SQLException { PGConnection pgconn = (PGConnection) conn; pgconn.addDataType("geometry", org.postgis.PGgeometryLW.class); } } public Logger getParentLogger() throws SQLFeatureNotSupportedException { throw new UnsupportedOperationException("Not supported yet."); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/Version.java��������������������������������������0000644�0000000�0000000�00000010125�11722777314�022753� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Version.java * * PostGIS extension for PostgreSQL JDBC driver - current version identification * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: Version.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.io.IOException; import java.util.Properties; /** Corresponds to the appropriate PostGIS that carried this source */ public class Version { /** We read our version information from this resource... */ private static final String RESSOURCENAME = "org/postgis/version.properties"; /** The major version */ public static final int MAJOR; /** The minor version */ public static final int MINOR; /** * The micro version, usually a number including possibly textual suffixes * like RC3. */ public static final String MICRO; static { int major = -1; int minor = -1; String micro = null; try { ClassLoader loader = Version.class.getClassLoader(); Properties prop = new Properties(); try { prop.load(loader.getResourceAsStream(RESSOURCENAME)); } catch (IOException e) { throw new ExceptionInInitializerError("Error initializing PostGIS JDBC version! Cause: Ressource " + RESSOURCENAME + " cannot be read! " + e.getMessage()); } catch (NullPointerException e) { throw new ExceptionInInitializerError("Error initializing PostGIS JDBC version! Cause: Ressource " + RESSOURCENAME + " not found! " + e.getMessage()); } try { major = Integer.parseInt(prop.getProperty("REL_MAJOR_VERSION")); } catch (NullPointerException e) { throw new ExceptionInInitializerError( "Error initializing PostGIS JDBC version! Missing REL_MAJOR_VERSION! " + e.getMessage()); } catch (NumberFormatException e) { throw new ExceptionInInitializerError( "Error initializing PostGIS JDBC version! Error parsing REL_MAJOR_VERSION! " + e.getMessage()); } try { minor = Integer.parseInt(prop.getProperty("REL_MINOR_VERSION")); } catch (NullPointerException e) { throw new ExceptionInInitializerError( "Error initializing PostGIS JDBC version! Missing REL_MINOR_VERSION! " + e.getMessage()); } catch (NumberFormatException e) { throw new ExceptionInInitializerError( "Error initializing PostGIS JDBC version! Error parsing REL_MINOR_VERSION! " + e.getMessage()); } micro = prop.getProperty("REL_MICRO_VERSION"); if (micro == null) { throw new ExceptionInInitializerError( "Error initializing PostGIS JDBC version! Missing REL_MICRO_VERSION! "); } } finally { MAJOR = major; MINOR = minor; MICRO = micro; } } /** Full version for human reading - code should use the constants above */ public static final String FULL = "PostGIS JDBC V" + MAJOR + "." + MINOR + "." + MICRO; public static void main(String[] args) { System.out.println(FULL); } public static String getFullVersion() { return FULL; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/PointComposedGeom.java����������������������������0000644�0000000�0000000�00000005220�11722777314�024721� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ComposedGeom.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PointComposedGeom.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; /** * PointComposedGeom - base class for all composed geoms that contain only * points. * * @author markus.schaber@logix-tt.com * */ public abstract class PointComposedGeom extends ComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; protected PointComposedGeom(int type) { super(type); } protected PointComposedGeom(int type, Point[] points) { super(type, points); } public PointComposedGeom(int type, String value) throws SQLException { this(type, value, false); } public PointComposedGeom(int type, String value, boolean haveM) throws SQLException { super(type, value, haveM); } protected Geometry createSubGeomInstance(String token, boolean haveM) throws SQLException { return new Point(token, haveM); } protected Geometry[] createSubGeomArray(int pointcount) { return new Point[pointcount]; } protected void innerWKT(StringBuffer sb) { subgeoms[0].innerWKT(sb); for (int i = 1; i < subgeoms.length; i++) { sb.append(','); subgeoms[i].innerWKT(sb); } } /** * optimized version */ public int numPoints() { return subgeoms.length; } /** * optimized version */ public Point getPoint(int idx) { if (idx >= 0 & idx < subgeoms.length) { return (Point) subgeoms[idx]; } else { return null; } } /** Get the underlying Point array */ public Point[] getPoints() { return (Point[]) subgeoms; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/java2d/�������������������������������������������0000755�0000000�0000000�00000000000�12317530606�021623� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/java2d/PGShapeGeometry.java�����������������������0000644�0000000�0000000�00000012204�11722777314�025500� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PGShapeGeometry.java * * Allows PostGIS data to be read directly into a java2d shape * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PGShapeGeometry.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.java2d; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.*; import java.sql.SQLException; import org.postgresql.util.PGobject; /** * PostGIS Java2D geometry implementation (read-only). * * Supports PostGIS 1.x (lwgeom hexwkb). * * As the java.awt.Shape methods currently are implemented by using a * java.awt.geom.GeneralPath object, they have the same semantics. * * BUG/TODO: MultiPoints or Points in a Geometry Collection currently don't work * as expected, as some GeneralPath implementations throw away adjacent MoveTo * commands as an optimization (e. G. sun 1.5 and ibm 1.5). Points thus are * translated into MoveTo() followed by a closePath. This may change when we * implement our own path logics. We have to evaluate whether Graphics2D renders * a single MoveTo command as a single "brush tip", or we need the closePath() * command nevertheless to get any drawing. Maybe we need a LineTo() to the same * coordinages instead. * * (Multi)LineStrings are translated into a sequence of a single MoveTo and * multiple LineTo vertices, and Polygon rings into a sequence of a single * MoveTo, multiple LineTo and a closePath command. To allow correct Polygon * filling, our PathIterators have GeneralPath.WIND_EVEN_ODD as winding rule. * * @see java.awt.geom.GeneralPath * @see java.awt.Shape * @see org.postgresql.util.PGobject * * @author Markus Schaber */ public class PGShapeGeometry extends PGobject implements Shape { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; final static ShapeBinaryParser parser = new ShapeBinaryParser(); private final GeneralPath path; private int srid; /** * Constructor called by JDBC drivers. call setValue afterwards to fill with * Geometry data. * */ public PGShapeGeometry() { setType("geometry"); path = new GeneralPath(GeneralPath.WIND_EVEN_ODD); } /** Construct directly from a General Path */ public PGShapeGeometry(GeneralPath path, int srid) { setType("geometry"); this.path = path; this.srid = srid; } /** Reads the HexWKB representation */ public PGShapeGeometry(String value) throws SQLException { this(); setValue(value); } /** * Reads the HexWKB representation - to be called by the jdbc drivers. Be * shure to call this only once and if you used the PGShapeGeometry() * constructor without parameters. In all other cases, behaviour is * undefined. */ public void setValue(String value) throws SQLException { srid = parser.parse(value, path); } public String toString() { return "PGShapeGeometry " + path.toString(); } /** We currently have read-only support, so this method returns null */ public String getValue() { return null; } public boolean equals(Object obj) { if (obj instanceof PGShapeGeometry) return ((PGShapeGeometry) obj).path.equals(path); return false; } /** Return the SRID or Geometry.UNKNOWN_SRID if none was available */ public int getSRID() { return srid; } // following are the java2d Shape method implementations... public boolean contains(double x, double y) { return path.contains(x, y); } public boolean contains(double x, double y, double w, double h) { return path.contains(x, y, w, h); } public boolean intersects(double x, double y, double w, double h) { return path.intersects(x, y, w, h); } public Rectangle getBounds() { return path.getBounds(); } public boolean contains(Point2D p) { return path.contains(p); } public Rectangle2D getBounds2D() { return path.getBounds2D(); } public boolean contains(Rectangle2D r) { return path.contains(r); } public boolean intersects(Rectangle2D r) { return path.intersects(r); } public PathIterator getPathIterator(AffineTransform at) { return path.getPathIterator(at); } public PathIterator getPathIterator(AffineTransform at, double flatness) { return path.getPathIterator(at, flatness); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/java2d/ShapeBinaryParser.java���������������������0000644�0000000�0000000�00000017377�11722777314�026077� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsBinaryParser.java * * Binary Parser for JTS - relies on org.postgis V1.0.0+ package. * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: ShapeBinaryParser.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.java2d; import java.awt.geom.GeneralPath; import org.postgis.Geometry; import org.postgis.binary.ByteGetter; import org.postgis.binary.ValueGetter; import org.postgis.binary.ByteGetter.BinaryByteGetter; import org.postgis.binary.ByteGetter.StringByteGetter; /** * Parse binary representation of geometries. Currently, only text rep (hexed) * implementation is tested. * * It should be easy to add char[] and CharSequence ByteGetter instances, * although the latter one is not compatible with older jdks. * * I did not implement real unsigned 32-bit integers or emulate them with long, * as both java Arrays and Strings currently can have only 2^31-1 elements * (bytes), so we cannot even get or build Geometries with more than approx. * 2^28 coordinates (8 bytes each). * * @author Markus Schaber, markus.schaber@logix-tt.com * */ public class ShapeBinaryParser { /** * Get the appropriate ValueGetter for my endianness * * @param bytes The appropriate Byte Getter * * @return the ValueGetter */ public static ValueGetter valueGetterForEndian(ByteGetter bytes) { if (bytes.get(0) == ValueGetter.XDR.NUMBER) { // XDR return new ValueGetter.XDR(bytes); } else if (bytes.get(0) == ValueGetter.NDR.NUMBER) { return new ValueGetter.NDR(bytes); } else { throw new IllegalArgumentException("Unknown Endian type:" + bytes.get(0)); } } /** * Parse a hex encoded geometry * * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) * * @return a potential SRID or Geometry.UNKNOWN_SRID if not present */ public synchronized int parse(String value, GeneralPath path) { StringByteGetter bytes = new ByteGetter.StringByteGetter(value); return parseGeometry(valueGetterForEndian(bytes), path); } /** * Parse a binary encoded geometry. * * Is synchronized to protect offset counter. (Unfortunately, Java does not * have neither call by reference nor multiple return values.) * * @return a potential SRID or Geometry.UNKNOWN_SRID if not present */ public synchronized int parse(byte[] value, GeneralPath path) { BinaryByteGetter bytes = new ByteGetter.BinaryByteGetter(value); return parseGeometry(valueGetterForEndian(bytes), path); } /** * Parse a geometry starting at offset. * * @param path */ protected int parseGeometry(ValueGetter data, GeneralPath path) { byte endian = data.getByte(); // skip and test endian flag if (endian != data.endian) { throw new IllegalArgumentException("Endian inconsistency!"); } int typeword = data.getInt(); int realtype = typeword & 0x1FFFFFFF; // cut off high flag bits boolean haveZ = (typeword & 0x80000000) != 0; boolean haveM = (typeword & 0x40000000) != 0; boolean haveS = (typeword & 0x20000000) != 0; int srid = Geometry.UNKNOWN_SRID; if (haveS) { srid = Geometry.parseSRID(data.getInt()); } switch (realtype) { case org.postgis.Geometry.POINT : parsePoint(data, haveZ, haveM, path); break; case org.postgis.Geometry.LINESTRING : parseLineString(data, haveZ, haveM, path); break; case org.postgis.Geometry.POLYGON : parsePolygon(data, haveZ, haveM, path); break; case org.postgis.Geometry.MULTIPOINT : parseMultiPoint(data, path); break; case org.postgis.Geometry.MULTILINESTRING : parseMultiLineString(data, path); break; case org.postgis.Geometry.MULTIPOLYGON : parseMultiPolygon(data, path); break; case org.postgis.Geometry.GEOMETRYCOLLECTION : parseCollection(data, path); break; default : throw new IllegalArgumentException("Unknown Geometry Type!"); } return srid; } private void parsePoint(ValueGetter data, boolean haveZ, boolean haveM, GeneralPath path) { path.moveTo((float) data.getDouble(), (float) data.getDouble()); path.closePath(); skipZM(data, haveZ, haveM); } private void skipZM(ValueGetter data, boolean haveZ, boolean haveM) { if (haveZ) { // skip Z value data.getDouble(); } if (haveM) { // skip M value data.getDouble(); } } /** Parse an Array of "full" Geometries */ private void parseGeometryArray(ValueGetter data, int count, GeneralPath path) { for (int i = 0; i < count; i++) { parseGeometry(data, path); } } /** * Parse an Array of "slim" Points (without endianness and type, part of * LinearRing and Linestring, but not MultiPoint! * * @param haveZ * @param haveM */ private void parseCS(ValueGetter data, boolean haveZ, boolean haveM, GeneralPath path) { int count = data.getInt(); if (count > 0) { path.moveTo((float) data.getDouble(), (float) data.getDouble()); skipZM(data, haveZ, haveM); for (int i = 1; i < count; i++) { path.lineTo((float) data.getDouble(), (float) data.getDouble()); skipZM(data, haveZ, haveM); } } } private void parseMultiPoint(ValueGetter data, GeneralPath path) { parseGeometryArray(data, data.getInt(), path); } private void parseLineString(ValueGetter data, boolean haveZ, boolean haveM, GeneralPath path) { parseCS(data, haveZ, haveM, path); } private void parseLinearRing(ValueGetter data, boolean haveZ, boolean haveM, GeneralPath path) { parseCS(data, haveZ, haveM, path); path.closePath(); } private void parsePolygon(ValueGetter data, boolean haveZ, boolean haveM, GeneralPath path) { int holecount = data.getInt() - 1; // parse shell parseLinearRing(data, haveZ, haveM, path); // parse inner rings for (int i = 0; i < holecount; i++) { parseLinearRing(data, haveZ, haveM, path); } } private void parseMultiLineString(ValueGetter data, GeneralPath path) { int count = data.getInt(); parseGeometryArray(data, count, path); } private void parseMultiPolygon(ValueGetter data, GeneralPath path) { int count = data.getInt(); parseGeometryArray(data, count, path); } private void parseCollection(ValueGetter data, GeneralPath path) { int count = data.getInt(); parseGeometryArray(data, count, path); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/java2d/Java2DWrapper.java�������������������������0000644�0000000�0000000�00000012246�12017042067�025077� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * JtsWrapper.java * * Allows transparent usage of JTS Geometry classes via PostgreSQL JDBC driver * connected to a PostGIS enabled PostgreSQL server. * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: Java2DWrapper.java 10206 2012-08-28 04:08:23Z robe $ */ package org.postgis.java2d; import org.postgresql.Driver; import org.postgresql.PGConnection; import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.Properties; import java.util.logging.Logger; /** * Java2DWrapper * * Wraps the PostGreSQL Driver to add transparent readonly support for PostGIS * objects into java2d path objects. * * This method currently works with J2EE DataSource implementations, and with * DriverManager framework. * * Simply replace the "jdbc:postgresql:" with a "jdbc:postgis_j2d" in the * jdbc URL. * * @author markus.schaber@logix-tt.com * */ public class Java2DWrapper extends Driver { private static final String POSTGRES_PROTOCOL = "jdbc:postgresql:"; public static final String POSTGIS_PROTOCOL = "jdbc:postgis_j2d:"; public static final String REVISION = "$Revision: 10206 $"; public Java2DWrapper() { super(); } static { try { // Analogy to org.postgresql.Driver java.sql.DriverManager.registerDriver(new Java2DWrapper()); } catch (SQLException e) { e.printStackTrace(); } } /** * Creates a postgresql connection, and then adds the PostGIS data types to * it calling addpgtypes() * * @param url the URL of the database to connect to * @param info a list of arbitrary tag/value pairs as connection arguments * @return a connection to the URL or null if it isnt us * @exception SQLException if a database access error occurs * * @see java.sql.Driver#connect * @see org.postgresql.Driver */ public java.sql.Connection connect(String url, Properties info) throws SQLException { url = mangleURL(url); Connection result = super.connect(url, info); addGISTypes((PGConnection) result); return result; } /** * adds the JTS/PostGIS Data types to a PG Connection. * @throws SQLException */ public static void addGISTypes(PGConnection pgconn) throws SQLException { pgconn.addDataType("geometry", PGShapeGeometry.class); pgconn.addDataType("box3d", org.postgis.PGbox3d.class); pgconn.addDataType("box2d", org.postgis.PGbox2d.class); } /** * Mangles the PostGIS URL to return the original PostGreSQL URL */ public static String mangleURL(String url) throws SQLException { if (url.startsWith(POSTGIS_PROTOCOL)) { return POSTGRES_PROTOCOL + url.substring(POSTGIS_PROTOCOL.length()); } else { throw new SQLException("Unknown protocol or subprotocol in url " + url); } } /** * Returns true if the driver thinks it can open a connection to the given * URL. Typically, drivers will return true if they understand the * subprotocol specified in the URL and false if they don't. Our protocols * start with jdbc:postgresql_postGIS: * * @see java.sql.Driver#acceptsURL * @param url the URL of the driver * @return true if this driver accepts the given URL * @exception SQLException if a database-access error occurs (Dont know why * it would *shrug*) */ public boolean acceptsURL(String url) throws SQLException { try { url = mangleURL(url); } catch (SQLException e) { return false; } return super.acceptsURL(url); } /** * Gets the underlying drivers major version number * * @return the drivers major version number */ public int getMajorVersion() { return super.getMajorVersion(); } /** * Get the underlying drivers minor version number * * @return the drivers minor version number */ public int getMinorVersion() { return super.getMinorVersion(); } /** * Returns our own CVS version plus postgres Version */ public static String getVersion() { return "Java2DWrapper " + REVISION + ", wrapping " + Driver.getVersion(); } public Logger getParentLogger() throws SQLFeatureNotSupportedException { throw new UnsupportedOperationException("Not supported yet."); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/GeometryCollection.java���������������������������0000644�0000000�0000000�00000004656�12272522454�025143� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GeometryCollection.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: GeometryCollection.java 12202 2014-01-30 19:17:00Z pramsey $ */ package org.postgis; import java.sql.SQLException; /** * Geometry Collection class WARNING: Currently only implements empty * collections * * @author markus.schaber@logix-tt.com * * $Id: GeometryCollection.java 12202 2014-01-30 19:17:00Z pramsey $ */ public class GeometryCollection extends ComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public static final String GeoCollID = "GEOMETRYCOLLECTION"; public GeometryCollection() { super(GEOMETRYCOLLECTION); } public GeometryCollection(Geometry[] geoms) { super(GEOMETRYCOLLECTION, geoms); } public GeometryCollection(String value) throws SQLException { this(value, false); } public GeometryCollection(String value, boolean haveM) throws SQLException { super(GEOMETRYCOLLECTION, value, haveM); } protected Geometry[] createSubGeomArray(int ngeoms) { return new Geometry[ngeoms]; } protected Geometry createSubGeomInstance(String token, boolean haveM) throws SQLException { return PGgeometry.geomFromString(token, haveM); } protected void innerWKT(StringBuffer SB) { subgeoms[0].outerWKT(SB, true); for (int i = 1; i < subgeoms.length; i++) { SB.append(','); subgeoms[i].outerWKT(SB, true); } } public Geometry[] getGeometries() { return subgeoms; } } ����������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/PGbox3d.java��������������������������������������0000644�0000000�0000000�00000003114�11722777314�022574� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PGbox3d.java * * PostGIS extension for PostgreSQL JDBC driver - bounding box model * * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PGbox3d.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; public class PGbox3d extends PGboxbase { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; public PGbox3d() { super(); } public PGbox3d(Point llb, Point urt) { super(llb, urt); } public PGbox3d(String value) throws SQLException { super(value); } public String getPrefix() { return ("BOX3D"); } public String getPGtype() { return ("box3d"); } protected PGboxbase newInstance() { return new PGbox3d(); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/MultiLineString.java������������������������������0000644�0000000�0000000�00000005301�11722777314�024417� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MultiLineString.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: MultiLineString.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; public class MultiLineString extends ComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; double len = -1; public int hashCode() { return super.hashCode() ^ (int) this.length(); } public MultiLineString() { super(MULTILINESTRING); } public MultiLineString(LineString[] lines) { super(MULTILINESTRING, lines); } public MultiLineString(String value) throws SQLException { this(value, false); } public MultiLineString(String value, boolean haveM) throws SQLException { super(MULTILINESTRING, value, haveM); } protected Geometry createSubGeomInstance(String token, boolean haveM) throws SQLException { return new LineString(token, haveM); } protected Geometry[] createSubGeomArray(int nlines) { return new LineString[nlines]; } public int numLines() { return subgeoms.length; } public LineString[] getLines() { return (LineString[]) subgeoms.clone(); } public LineString getLine(int idx) { if (idx >= 0 & idx < subgeoms.length) { return (LineString) subgeoms[idx]; } else { return null; } } public double length() { if (len < 0) { LineString[] lines = (LineString[]) subgeoms; if (lines.length < 1) { len = 0; } else { double sum = 0; for (int i = 0; i < lines.length; i++) { sum += lines[i].length(); } len = sum; } } return len; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/org/postgis/LineString.java�����������������������������������0000644�0000000�0000000�00000006012�11722777314�023404� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * LineString.java * * PostGIS extension for PostgreSQL JDBC driver - geometry model * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: LineString.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis; import java.sql.SQLException; public class LineString extends PointComposedGeom { /* JDK 1.5 Serialization */ private static final long serialVersionUID = 0x100; double len = -1.; public LineString() { super(LINESTRING); } public LineString(Point[] points) { super(LINESTRING, points); } public LineString(String value) throws SQLException { super(LINESTRING, value); } public LineString(String value, boolean haveM) throws SQLException { super(LINESTRING, value, haveM); } public LineString reverse() { Point[] points = this.getPoints(); int l = points.length; int i, j; Point[] p = new Point[l]; for (i = 0, j = l - 1; i < l; i++, j--) { p[i] = points[j]; } return new LineString(p); } public LineString concat(LineString other) { Point[] points = this.getPoints(); Point[] opoints = other.getPoints(); boolean cutPoint = this.getLastPoint() == null || this.getLastPoint().equals(other.getFirstPoint()); int count = points.length + opoints.length - (cutPoint ? 1 : 0); Point[] p = new Point[count]; // Maybe we should use System.arrayCopy here? int i, j; for (i = 0; i < points.length; i++) { p[i] = points[i]; } if (!cutPoint) { p[i++] = other.getFirstPoint(); } for (j = 1; j < opoints.length; j++, i++) { p[i] = opoints[j]; } return new LineString(p); } public double length() { if (len < 0) { Point[] points = this.getPoints(); if ((points == null) || (points.length < 2)) { len = 0; } else { double sum = 0; for (int i = 1; i < points.length; i++) { sum += points[i - 1].distance(points[i]); } len = sum; } } return len; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/�����������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020013� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/VersionPrinter.java����������������������������������0000644�0000000�0000000�00000011160�11722777314�023656� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * VersionPrinter.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: VersionPrinter.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import org.postgis.Version; import org.postgresql.Driver; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * Prints out as much version information as available. */ public class VersionPrinter { public static String[] GISVERSIONS = { "postgis_version", "postgis_proj_version", "postgis_scripts_installed", "postgis_lib_version", "postgis_scripts_released", "postgis_uses_stats", "postgis_geos_version", "postgis_scripts_build_date", "postgis_lib_build_date", "postgis_full_version"}; public static void main(String[] args) { Statement stat = null; Driver d; // Print PostGIS version printHeading("PostGIS jdbc client code"); printVersionString("getFullVersion", Version.getFullVersion()); // Print PGJDBC Versions printHeading("PGJDBC Driver"); printVersionString("getVersion", Driver.getVersion()); try { d = new Driver(); } catch (Exception e) { System.err.println("Cannot create Driver instance: " + e.getMessage()); System.exit(1); return; } printVersionString("getMajorVersion", d.getMajorVersion()); printVersionString("getMinorVersion", d.getMinorVersion()); // Print PostgreSQL server versions if (args.length == 3) { Connection conn = null; try { conn = DriverManager.getConnection(args[0], args[1], args[2]); stat = conn.createStatement(); } catch (SQLException e) { System.err.println("Connection to database failed, aborting."); System.err.println(e.getMessage()); System.exit(1); } } else if (args.length != 0) { System.err.println("Usage: java examples/VersionPrinter dburl user pass"); System.exit(1); // Signal the compiler that code flow ends here. return; } if (stat == null) { System.out.println("No online version available."); } printHeading("PostgreSQL Server"); printVersionString("version", stat); // Print PostGIS versions printHeading("PostGIS Server"); for (int i = 0; i < GISVERSIONS.length; i++) { printVersionString(GISVERSIONS[i], stat); } } public static boolean makeemptyline = false; private static void printHeading(String heading) { if (makeemptyline) { System.out.println(); } System.out.println("** " + heading + " **"); makeemptyline = true; } public static void printVersionString(String function, int value) { printVersionString(function, Integer.toString(value)); } public static void printVersionString(String function, String value) { System.out.println("\t" + function + ": " + value); } public static void printVersionString(String function, Statement stat) { printVersionString(function, getVersionString(function, stat)); } public static String getVersionString(String function, Statement stat) { try { ResultSet rs = stat.executeQuery("SELECT " + function + "()"); if (rs.next()==false) { return "-- no result --"; } String version = rs.getString(1); if (version==null) { return "-- null result --"; } return version.trim(); } catch (SQLException e) { return "-- unavailable -- "; } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/Test.java��������������������������������������������0000644�0000000�0000000�00000007211�11722777314�021606� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Test.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: Test.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import org.postgis.LineString; import org.postgis.LinearRing; import org.postgis.MultiLineString; import org.postgis.MultiPolygon; import org.postgis.PGgeometry; import org.postgis.Point; import org.postgis.Polygon; import java.sql.SQLException; public class Test { public static void main(String[] args) throws SQLException { String mlng_str = "MULTILINESTRING ((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"; String mplg_str = "MULTIPOLYGON (((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"; String plg_str = "POLYGON ((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"; String lng_str = "LINESTRING (10 10 20,20 20 20, 50 50 50, 34 34 34)"; String ptg_str = "POINT(10 10 20)"; String lr_str = "(10 10 20,34 34 34, 23 19 23 , 10 10 11)"; System.out.println("LinearRing Test:"); System.out.println("\t" + lr_str); LinearRing lr = new LinearRing(lr_str); System.out.println("\t" + lr.toString()); System.out.println(); System.out.println("Point Test:"); System.out.println("\t" + ptg_str); Point ptg = new Point(ptg_str); System.out.println("\t" + ptg.toString()); System.out.println(); System.out.println("LineString Test:"); System.out.println("\t" + lng_str); LineString lng = new LineString(lng_str); System.out.println("\t" + lng.toString()); System.out.println(); System.out.println("Polygon Test:"); System.out.println("\t" + plg_str); Polygon plg = new Polygon(plg_str); System.out.println("\t" + plg.toString()); System.out.println(); System.out.println("MultiPolygon Test:"); System.out.println("\t" + mplg_str); MultiPolygon mplg = new MultiPolygon(mplg_str); System.out.println("\t" + mplg.toString()); System.out.println(); System.out.println("MultiLineString Test:"); System.out.println("\t" + mlng_str); MultiLineString mlng = new MultiLineString(mlng_str); System.out.println("\t" + mlng.toString()); System.out.println(); System.out.println("PG Test:"); System.out.println("\t" + mlng_str); PGgeometry pgf = new PGgeometry(mlng_str); System.out.println("\t" + pgf.toString()); System.out.println(); System.out.println("finished"); // If we reached here without any exception, we passed all tests. System.err.println("Test.java finished without errors."); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/TestAutoregister.java��������������������������������0000644�0000000�0000000�00000015063�11722777314�024210� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * TestAutoregister.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: TestAutoregister.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import org.postgis.PGbox2d; import org.postgis.PGbox3d; import org.postgis.PGgeometry; import org.postgresql.Driver; import org.postgresql.util.PGobject; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * This test program tests whether the autoregistration of PostGIS data types * within the pgjdbc driver was successful. This is supposed to work with * pgjdbc.jar version 8.0 and newer, and thus refuses to work with older pgjdbc * versions. (But it will work fine against older servers.) It also checks for * postgis version to know whether box2d is available. */ public class TestAutoregister { public static void main(String[] args) { String dburl = null; String dbuser = null; String dbpass = null; if (args.length == 3) { System.out.println("Testing proper auto-registration"); dburl = args[0]; dbuser = args[1]; dbpass = args[2]; } else { System.err.println("Usage: java examples/TestParser dburl user pass"); System.exit(1); // Signal the compiler that code flow ends here. return; } System.out.println("Driver version: " + Driver.getVersion()); int major; try { major = new Driver().getMajorVersion(); } catch (Exception e) { System.err.println("Cannot create Driver instance: " + e.getMessage()); System.exit(1); return; } if (major < 8) { System.err.println("Your pgdjbc " + major + ".X is too old, it does not support autoregistration!"); return; } System.out.println("Creating JDBC connection to " + dburl); Connection conn = null; Statement stat = null; try { conn = DriverManager.getConnection(dburl, dbuser, dbpass); stat = conn.createStatement(); } catch (SQLException e) { System.err.println("Connection initialization failed, aborting."); e.printStackTrace(); System.exit(1); // signal the compiler that code flow ends here: throw new AssertionError(); } int postgisServerMajor = 0; try { postgisServerMajor = getPostgisMajor(stat); } catch (SQLException e) { System.err.println("Error fetching PostGIS version: " + e.getMessage()); System.err.println("Is PostGIS really installed in the database?"); System.exit(1); // signal the compiler that code flow ends here: throw new AssertionError(); } System.out.println("PostGIS Version: " + postgisServerMajor); PGobject result = null; /* Test geometries */ try { ResultSet rs = stat.executeQuery("SELECT 'POINT(1 2)'::geometry"); rs.next(); result = (PGobject) rs.getObject(1); if (result instanceof PGgeometry) { System.out.println("PGgeometry successful!"); } else { System.out.println("PGgeometry failed!"); } } catch (SQLException e) { System.err.println("Selecting geometry failed: " + e.getMessage()); System.exit(1); // Signal the compiler that code flow ends here. return; } /* Test box3d */ try { ResultSet rs = stat.executeQuery("SELECT 'BOX3D(1 2 3, 4 5 6)'::box3d"); rs.next(); result = (PGobject) rs.getObject(1); if (result instanceof PGbox3d) { System.out.println("Box3d successful!"); } else { System.out.println("Box3d failed!"); } } catch (SQLException e) { System.err.println("Selecting box3d failed: " + e.getMessage()); System.exit(1); // Signal the compiler that code flow ends here. return; } /* Test box2d if appropriate */ if (postgisServerMajor < 1) { System.out.println("PostGIS version is too old, skipping box2ed test"); System.err.println("PostGIS version is too old, skipping box2ed test"); } else { try { ResultSet rs = stat.executeQuery("SELECT 'BOX(1 2,3 4)'::box2d"); rs.next(); result = (PGobject) rs.getObject(1); if (result instanceof PGbox2d) { System.out.println("Box2d successful!"); } else { System.out.println("Box2d failed! " + result.getClass().getName()); } } catch (SQLException e) { System.err.println("Selecting box2d failed: " + e.getMessage()); System.exit(1); // Signal the compiler that code flow ends here. return; } } System.out.println("Finished."); // If we finished up to here without exitting, we passed all tests. System.err.println("TestAutoregister.java finished without errors."); } public static int getPostgisMajor(Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT postgis_version()"); rs.next(); String version = rs.getString(1); if (version == null) { throw new SQLException("postgis_version returned NULL!"); } version = version.trim(); int idx = version.indexOf('.'); return Integer.parseInt(version.substring(0, idx)); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/TestServer.java��������������������������������������0000644�0000000�0000000�00000006560�11722777314�023003� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Test.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: TestServer.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestServer { public static void main(String[] args) { if (args.length != 4 && args.length != 3) { System.err .println("Usage: java examples/TestServer dburl user pass [tablename]"); System.err.println(); System.err.println("dburl has the following format:"); System.err.println("jdbc:postgresql://HOST:PORT/DATABASENAME"); System.err.println("tablename is 'jdbc_test' by default."); System.exit(1); } Connection conn; String dburl = args[0]; String dbuser = args[1]; String dbpass = args[2]; String dbtable = "jdbc_test"; String dropSQL = "drop table " + dbtable; String createSQL = "create table " + dbtable + " (geom geometry, id int4)"; String insertPointSQL = "insert into " + dbtable + " values ('POINT (10 10 10)',1)"; String insertPolygonSQL = "insert into " + dbtable + " values ('POLYGON ((0 0 0,0 10 0,10 10 0,10 0 0,0 0 0))',2)"; try { System.out.println("Creating JDBC connection..."); Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(dburl, dbuser, dbpass); System.out.println("Adding geometric type entries..."); ((org.postgresql.PGConnection) conn).addDataType("geometry", org.postgis.PGgeometry.class); ((org.postgresql.PGConnection) conn).addDataType("box3d", org.postgis.PGbox3d.class); Statement s = conn.createStatement(); System.out.println("Creating table with geometric types..."); // table might not yet exist try { s.execute(dropSQL); } catch (Exception e) { System.out.println("Error dropping old table: " + e.getMessage()); } s.execute(createSQL); System.out.println("Inserting point..."); s.execute(insertPointSQL); System.out.println("Inserting polygon..."); s.execute(insertPolygonSQL); System.out.println("Done."); s = conn.createStatement(); System.out.println("Querying table..."); ResultSet r = s.executeQuery("select asText(geom),id from " + dbtable); while (r.next()) { Object obj = r.getObject(1); int id = r.getInt(2); System.out.println("Row " + id + ":"); System.out.println(obj.toString()); } s.close(); conn.close(); } catch (Exception e) { System.err.println("Aborted due to error:"); e.printStackTrace(); System.exit(1); } } } ������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/TestBoxes.java���������������������������������������0000644�0000000�0000000�00000020737�11722777314�022617� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Test.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: TestBoxes.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import org.postgis.PGbox2d; import org.postgis.PGbox3d; import org.postgresql.util.PGobject; import org.postgresql.util.PGtokenizer; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestBoxes { /** Our test candidates: */ public static final String[] BOXEN3D = new String[]{ "BOX3D(1 2 3,4 5 6)", // 3d variant "BOX3D(1 2,4 5)"// 2d variant }; public static final String[] BOXEN2D = new String[]{"BOX(1 2,3 4)"}; /** The srid we use for the srid tests */ public static final int SRID = 4326; /** The string prefix we get for the srid tests */ public static final String SRIDPREFIX = "SRID=" + SRID + ";"; /** How much tests did fail? */ public static int failcount = 0; /** * The actual test method */ public static void test(String orig, PGobject candidate, Connection[] conns, boolean newPostgisOnly) throws SQLException { System.out.println("Original: " + orig); String redone = candidate.toString(); System.out.println("Parsed: " + redone); if (!orig.equals(redone)) { System.out.println("--- Recreated Text Rep not equal!"); failcount++; } // Let's simulate the way pgjdbc uses to create PGobjects PGobject recreated; try { recreated = (PGobject) candidate.getClass().newInstance(); } catch (Exception e) { System.out.println("--- pgjdbc instantiation failed!"); System.out.println("--- " + e.getMessage()); failcount++; return; } recreated.setValue(redone); String reparsed = recreated.toString(); System.out.println("Re-Parsed: " + reparsed); if (!recreated.equals(candidate)) { System.out.println("--- Recreated boxen are not equal!"); failcount++; } else if (!reparsed.equals(orig)) { System.out.println("--- 2nd generation text reps are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } for (int i = 0; i < conns.length; i++) { System.out.println("Testing on connection " + i + ": " + conns[i].getCatalog()); Statement statement = conns[i].createStatement(); if (newPostgisOnly && TestAutoregister.getPostgisMajor(statement) < 1) { System.out.println("PostGIS version is too old, not testing box2d"); } else { try { PGobject sqlGeom = viaSQL(candidate, statement); System.out.println("SQLin : " + sqlGeom.toString()); if (!candidate.equals(sqlGeom)) { System.out.println("--- Geometries after SQL are not equal!"); failcount++; } else { System.out.println("Eq SQL in: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { PGobject sqlreGeom = viaSQL(recreated, statement); System.out.println("SQLout : " + sqlreGeom.toString()); if (!candidate.equals(sqlreGeom)) { System.out.println("--- reparsed Geometries after SQL are not equal!"); failcount++; } else { System.out.println("Eq SQLout: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } } statement.close(); } System.out.println("***"); } /** Pass a geometry representation through the SQL server */ private static PGobject viaSQL(PGobject obj, Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT '" + obj.toString() + "'::" + obj.getType()); rs.next(); return (PGobject) rs.getObject(1); } /** * Connect to the databases * * We use DriverWrapper here. For alternatives, see the DriverWrapper * Javadoc * * @param dbuser * * @throws ClassNotFoundException * * @see org.postgis.DriverWrapper * */ public static Connection connect(String url, String dbuser, String dbpass) throws SQLException, ClassNotFoundException { Connection conn; Class.forName("org.postgis.DriverWrapper"); conn = DriverManager.getConnection(url, dbuser, dbpass); return conn; } /** Our apps entry point */ public static void main(String[] args) throws SQLException, ClassNotFoundException { PGtokenizer dburls; String dbuser = null; String dbpass = null; if (args.length == 1 && args[0].equalsIgnoreCase("offline")) { System.out.println("Performing only offline tests"); dburls = new PGtokenizer("", ';'); } else if (args.length == 3) { System.out.println("Performing offline and online tests"); dburls = new PGtokenizer(args[0], ';'); dbuser = args[1]; dbpass = args[2]; } else { System.err.println("Usage: java examples/TestParser dburls user pass [tablename]"); System.err.println(" or: java examples/TestParser offline"); System.err.println(); System.err.println("dburls has one or more jdbc urls separated by ; in the following format"); System.err.println("jdbc:postgresql://HOST:PORT/DATABASENAME"); System.err.println("tablename is 'jdbc_test' by default."); System.exit(1); // Signal the compiler that code flow ends here. return; } Connection[] conns; conns = new Connection[dburls.getSize()]; for (int i = 0; i < dburls.getSize(); i++) { System.out.println("Creating JDBC connection to " + dburls.getToken(i)); conns[i] = connect(dburls.getToken(i), dbuser, dbpass); } System.out.println("Performing tests..."); System.out.println("***"); for (int i = 0; i < BOXEN3D.length; i++) { try { PGbox3d candidate = new PGbox3d(BOXEN3D[i]); test(BOXEN3D[i], candidate, conns, false); } catch (SQLException e) { System.out.println("--- Instantiation of " + BOXEN3D[i] + "failed:"); System.out.println("--- " + e.getMessage()); failcount++; } } for (int i = 0; i < BOXEN2D.length; i++) { try { PGbox2d candidate = new PGbox2d(BOXEN2D[i]); test(BOXEN2D[i], candidate, conns, true); } catch (SQLException e) { System.out.println("--- Instantiation of " + BOXEN2D[i] + "failed:"); System.out.println("--- " + e.getMessage()); failcount++; } } System.out.print("cleaning up..."); for (int i = 0; i < conns.length; i++) { conns[i].close(); } System.out.println("Finished, " + failcount + " tests failed!"); System.err.println("Finished, " + failcount + " tests failed!"); System.exit(failcount); } } ���������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/TestJava2d.java��������������������������������������0000644�0000000�0000000�00000013302�11722777314�022634� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Test.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: TestJava2d.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import java.awt.*; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import org.postgis.java2d.Java2DWrapper; public class TestJava2d { private static final boolean DEBUG = true; public static final Shape[] SHAPEARRAY = new Shape[0]; static { new Java2DWrapper(); // make shure our driver is initialized } public static void main(String[] args) throws ClassNotFoundException, SQLException { if (args.length != 5) { System.err.println("Usage: java examples/TestJava2D dburl user pass tablename column"); System.err.println(); System.err.println("dburl has the following format:"); System.err.println(Java2DWrapper.POSTGIS_PROTOCOL + "//HOST:PORT/DATABASENAME"); System.err.println("tablename is 'jdbc_test' by default."); System.exit(1); } Shape[] geometries = read(args[0], args[1], args[2], "SELECT " + args[4] + " FROM " + args[3]); if (geometries.length == 0) { System.err.println("No geometries were found."); return; } System.err.println("Painting..."); Frame window = new Frame("PostGIS java2D demo"); Canvas CV = new GisCanvas(geometries); window.add(CV); window.setSize(500, 500); window.addWindowListener(new EventHandler()); window.setVisible(true); } static Rectangle2D calcbbox(Shape[] geometries) { Rectangle2D bbox = geometries[0].getBounds2D(); for (int i = 1; i < geometries.length; i++) { bbox = bbox.createUnion(geometries[i].getBounds2D()); } return bbox; } private static Shape[] read(String dburl, String dbuser, String dbpass, String query) throws ClassNotFoundException, SQLException { ArrayList geometries = new ArrayList(); System.out.println("Creating JDBC connection..."); Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection(dburl, dbuser, dbpass); System.out.println("fetching geometries"); ResultSet r = conn.createStatement().executeQuery(query); while (r.next()) { final Shape current = (Shape) r.getObject(1); if (current != null) { geometries.add(current); } } conn.close(); return (Shape[]) geometries.toArray(SHAPEARRAY); } public static class GisCanvas extends Canvas { /** Keep java 1.5 compiler happy */ private static final long serialVersionUID = 1L; final Rectangle2D bbox; final Shape[] geometries; public GisCanvas(Shape[] geometries) { this.geometries = geometries; this.bbox = calcbbox(geometries); setBackground(Color.GREEN); } public void paint(Graphics og) { Graphics2D g = (Graphics2D) og; final double scaleX = (super.getWidth() - 10) / bbox.getWidth(); final double scaleY = (super.getHeight() - 10) / bbox.getHeight(); AffineTransform at = new AffineTransform(); at.translate(super.getX() + 5, super.getY() + 5); at.scale(scaleX, scaleY); at.translate(-bbox.getX(), -bbox.getY()); if (DEBUG) { System.err.println(); System.err.println("bbox: " + bbox); System.err.println("trans: " + at); System.err.println("new: " + at.createTransformedShape(bbox).getBounds2D()); System.err.println("visual:" + super.getBounds()); } for (int i = 0; i < geometries.length; i++) { g.setPaint(Color.BLUE); final Shape shape = at.createTransformedShape(geometries[i]); g.fill(shape); g.setPaint(Color.ORANGE); g.draw(shape); } } } public static class EventHandler implements WindowListener { public void windowActivated(WindowEvent e) {// } public void windowClosed(WindowEvent e) {// } public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); System.exit(0); } public void windowDeactivated(WindowEvent e) {// } public void windowDeiconified(WindowEvent e) {// } public void windowIconified(WindowEvent e) {// } public void windowOpened(WindowEvent e) {// } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/src/examples/TestParser.java��������������������������������������0000644�0000000�0000000�00000061410�11722777314�022764� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Test.java * * PostGIS extension for PostgreSQL JDBC driver - example and test classes * * (C) 2004 Paul Ramsey, pramsey@refractions.net * * (C) 2005 Markus Schaber, markus.schaber@logix-tt.com * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: TestParser.java 9324 2012-02-27 22:08:12Z pramsey $ */ package examples; import org.postgis.Geometry; import org.postgis.PGgeometry; import org.postgis.binary.BinaryParser; import org.postgis.binary.BinaryWriter; import org.postgis.binary.ValueSetter; import org.postgresql.util.PGtokenizer; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; public class TestParser { public static String ALL = "ALL", ONLY10 = "ONLY10", EQUAL10 = "EQUAL10"; /** * Our set of geometries to test. */ public static final String[][] testset = new String[][]{ { ALL, // 2D "POINT(10 10)"}, { ALL, // 3D with 3rd coordinate set to 0 "POINT(10 10 0)"}, { ALL, // 3D "POINT(10 10 20)"}, { ALL, // 3D with scientific notation "POINT(1e100 1.2345e-100 -2e-5)"}, { ONLY10, // 2D + Measures "POINTM(10 10 20)"}, { ONLY10, // 3D + Measures "POINT(10 10 20 30)"}, { ALL, // broken format, see http://lists.jump-project.org/pipermail/jts-devel/2006-April/001572.html "MULTIPOINT(11 12, 20 20)"}, { ALL,// broken format "MULTIPOINT(11 12 13, 20 20 20)"}, { ONLY10,// broken format "MULTIPOINTM(11 12 13, 20 20 20)"}, { ONLY10,// broken format "MULTIPOINT(11 12 13 14,20 20 20 20)"}, { ALL, // OGC conforming format "MULTIPOINT((11 12), (20 20))"}, { ALL, "MULTIPOINT((11 12 13), (20 20 20))"}, { ONLY10, "MULTIPOINTM((11 12 13), (20 20 20))"}, { ONLY10, "MULTIPOINT((11 12 13 14),(20 20 20 20))"}, { ALL, "LINESTRING(10 10,20 20,50 50,34 34)"}, { ALL, "LINESTRING(10 10 20,20 20 20,50 50 50,34 34 34)"}, { ONLY10, "LINESTRINGM(10 10 20,20 20 20,50 50 50,34 34 34)"}, { ONLY10, "LINESTRING(10 10 20 20,20 20 20 20,50 50 50 50,34 34 34 50)"}, { ALL, "POLYGON((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5))"}, { ALL, "POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"}, { ONLY10, "POLYGONM((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"}, { ONLY10, "POLYGON((10 10 0 7,20 10 0 7,20 20 0 7,20 10 0 7,10 10 0 7),(5 5 0 7,5 6 0 7,6 6 0 7,6 5 0 7,5 5 0 7))"}, { ALL, "MULTIPOLYGON(((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5)),((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5)))"}, { ALL, "MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ONLY10, "MULTIPOLYGONM(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ONLY10, "MULTIPOLYGON(((10 10 0 7,20 10 0 7,20 20 0 7,20 10 0 7,10 10 0 7),(5 5 0 7,5 6 0 7,6 6 0 7,6 5 0 7,5 5 0 7)),((10 10 0 7,20 10 0 7,20 20 0 7,20 10 0 7,10 10 0 7),(5 5 0 7,5 6 0 7,6 6 0 7,6 5 0 7,5 5 0 7)))"}, { ALL, "MULTILINESTRING((10 10,20 10,20 20,20 10,10 10),(5 5,5 6,6 6,6 5,5 5))"}, { ALL, "MULTILINESTRING((10 10 5,20 10 5,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"}, { ONLY10, "MULTILINESTRINGM((10 10 7,20 10 7,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))"}, { ONLY10, "MULTILINESTRING((10 10 0 7,20 10 0 7,20 20 0 7,20 10 0 7,10 10 0 7),(5 5 0 7,5 6 0 7,6 6 0 7,6 5 0 7,5 5 0 7))"}, { ALL, "GEOMETRYCOLLECTION(POINT(10 10),POINT(20 20))"}, { ALL, "GEOMETRYCOLLECTION(POINT(10 10 20),POINT(20 20 20))"}, { ONLY10, "GEOMETRYCOLLECTIONM(POINT(10 10 20),POINT(20 20 20))"}, { ONLY10, "GEOMETRYCOLLECTION(POINT(10 10 20 7),POINT(20 20 20 7))"}, { ALL, "GEOMETRYCOLLECTION(LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34))"}, { ALL, "GEOMETRYCOLLECTION(POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ONLY10, // Cannot be parsed by 0.X servers, broken format "GEOMETRYCOLLECTION(MULTIPOINT(10 10 10, 20 20 20),MULTIPOINT(10 10 10, 20 20 20))"}, { ONLY10, // Cannot be parsed by 0.X servers, OGC conformant "GEOMETRYCOLLECTION(MULTIPOINT((10 10 10), (20 20 20)),MULTIPOINT((10 10 10), (20 20 20)))"}, { EQUAL10, // PostGIs 0.X "flattens" this geometry, so it is not // equal after reparsing. "GEOMETRYCOLLECTION(MULTILINESTRING((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { EQUAL10,// PostGIs 0.X "flattens" this geometry, so it is not equal // after reparsing. "GEOMETRYCOLLECTION(MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))),MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))))"}, { ALL, "GEOMETRYCOLLECTION(POINT(10 10 20),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ONLY10, // Collections that contain both X and MultiX do not work on // PostGIS 0.x, broken format "GEOMETRYCOLLECTION(POINT(10 10 20),MULTIPOINT(10 10 10, 20 20 20),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))),MULTILINESTRING((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ONLY10, // Collections that contain both X and MultiX do not work on // PostGIS 0.x, OGC conformant "GEOMETRYCOLLECTION(POINT(10 10 20),MULTIPOINT((10 10 10), (20 20 20)),LINESTRING(10 10 20,20 20 20, 50 50 50, 34 34 34),POLYGON((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),MULTIPOLYGON(((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)),((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0))),MULTILINESTRING((10 10 0,20 10 0,20 20 0,20 10 0,10 10 0),(5 5 0,5 6 0,6 6 0,6 5 0,5 5 0)))"}, { ALL, // Old (bad) PostGIS 0.X Representation "GEOMETRYCOLLECTION(EMPTY)"}, { ALL,// new (correct) representation "GEOMETRYCOLLECTION EMPTY"}, { ONLY10,// new (correct) representation - does not work on 0.X "POINT EMPTY"}, { ONLY10,// new (correct) representation - does not work on 0.X "LINESTRING EMPTY"}, { ONLY10,// new (correct) representation - does not work on 0.X "POLYGON EMPTY"}, { ONLY10,// new (correct) representation - does not work on 0.X "MULTIPOINT EMPTY"}, { ONLY10,// new (correct) representation - does not work on 0.X "MULTILINESTRING EMPTY"}, { ONLY10,// new (correct) representation - does not work on 0.X "MULTIPOLYGON EMPTY"}, // end }; /** The srid we use for the srid tests */ public static final int SRID = 4326; /** The string prefix we get for the srid tests */ public static final String SRIDPREFIX = "SRID=" + SRID + ";"; /** How much tests did fail? */ public static int failcount = 0; private static BinaryParser bp = new BinaryParser(); private static final BinaryWriter bw = new BinaryWriter(); /** The actual test method */ public static void test(String WKT, Connection[] conns, String flags) throws SQLException { System.out.println("Original: " + WKT); Geometry geom = PGgeometry.geomFromString(WKT); String parsed = geom.toString(); System.out.println("Parsed: " + parsed); Geometry regeom = PGgeometry.geomFromString(parsed); String reparsed = regeom.toString(); System.out.println("Re-Parsed: " + reparsed); if (!geom.equals(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else if (!reparsed.equals(parsed)) { System.out.println("--- Text Reps are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } String hexNWKT = bw.writeHexed(regeom, ValueSetter.NDR.NUMBER); System.out.println("NDRHex: " + hexNWKT); regeom = PGgeometry.geomFromString(hexNWKT); System.out.println("ReNDRHex: " + regeom.toString()); if (!geom.equals(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } String hexXWKT = bw.writeHexed(regeom, ValueSetter.XDR.NUMBER); System.out.println("XDRHex: " + hexXWKT); regeom = PGgeometry.geomFromString(hexXWKT); System.out.println("ReXDRHex: " + regeom.toString()); if (!geom.equals(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } byte[] NWKT = bw.writeBinary(regeom, ValueSetter.NDR.NUMBER); regeom = bp.parse(NWKT); System.out.println("NDR: " + regeom.toString()); if (!geom.equals(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } byte[] XWKT = bw.writeBinary(regeom, ValueSetter.XDR.NUMBER); regeom = bp.parse(XWKT); System.out.println("XDR: " + regeom.toString()); if (!geom.equals(regeom)) { System.out.println("--- Geometries are not equal!"); failcount++; } else { System.out.println("Equals: yes"); } for (int i = 0; i < conns.length; i++) { Connection connection = conns[i]; Statement statement = connection.createStatement(); int serverPostgisMajor = TestAutoregister.getPostgisMajor(statement); if ((flags == ONLY10) && serverPostgisMajor < 1) { System.out.println("PostGIS server too old, skipping test on connection " + i + ": " + connection.getCatalog()); } else { System.out.println("Testing on connection " + i + ": " + connection.getCatalog()); try { Geometry sqlGeom = viaSQL(WKT, statement); System.out.println("SQLin : " + sqlGeom.toString()); if (!geom.equals(sqlGeom)) { System.out.println("--- Geometries after SQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq SQL in: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { Geometry sqlreGeom = viaSQL(parsed, statement); System.out.println("SQLout : " + sqlreGeom.toString()); if (!geom.equals(sqlreGeom)) { System.out.println("--- reparsed Geometries after SQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq SQLout: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { Geometry sqlreGeom = viaPrepSQL(geom, connection); System.out.println("Prepared: " + sqlreGeom.toString()); if (!geom.equals(sqlreGeom)) { System.out.println("--- reparsed Geometries after prepared StatementSQL are not equal!"); if (flags == EQUAL10 && serverPostgisMajor < 1) { System.out.println("--- This is expected with PostGIS " + serverPostgisMajor + ".X"); } else { failcount++; } } else { System.out.println("Eq Prep: yes"); } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // asEWKT() function is not present on PostGIS 0.X, and the test // is pointless as 0.X uses EWKT as canonical rep so the same // functionality was already tested above. try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = ewktViaSQL(WKT, statement); System.out.println("asEWKT : " + sqlGeom.toString()); if (!geom.equals(sqlGeom)) { System.out.println("--- Geometries after EWKT SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // asEWKB() function is not present on PostGIS 0.X. try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = ewkbViaSQL(WKT, statement); System.out.println("asEWKB : " + sqlGeom.toString()); if (!geom.equals(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // HexEWKB parsing is not present on PostGIS 0.X. try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = viaSQL(hexNWKT, statement); System.out.println("hexNWKT: " + sqlGeom.toString()); if (!geom.equals(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = viaSQL(hexXWKT, statement); System.out.println("hexXWKT: " + sqlGeom.toString()); if (!geom.equals(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } // Canonical binary input is not present before 1.0 try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = binaryViaSQL(NWKT, connection); System.out.println("NWKT: " + sqlGeom.toString()); if (!geom.equals(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } try { if (serverPostgisMajor >= 1) { Geometry sqlGeom = binaryViaSQL(XWKT, connection); System.out.println("XWKT: " + sqlGeom.toString()); if (!geom.equals(sqlGeom)) { System.out.println("--- Geometries after EWKB SQL are not equal!"); failcount++; } else { System.out.println("equal : yes"); } } } catch (SQLException e) { System.out.println("--- Server side error: " + e.toString()); failcount++; } } statement.close(); } System.out.println("***"); } /** Pass a geometry representation through the SQL server */ private static Geometry viaSQL(String rep, Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT geometry_in('" + rep + "')"); rs.next(); return ((PGgeometry) rs.getObject(1)).getGeometry(); } /** * Pass a geometry representation through the SQL server via prepared * statement */ private static Geometry viaPrepSQL(Geometry geom, Connection conn) throws SQLException { PreparedStatement prep = conn.prepareStatement("SELECT ?::geometry"); PGgeometry wrapper = new PGgeometry(geom); prep.setObject(1, wrapper, Types.OTHER); ResultSet rs = prep.executeQuery(); rs.next(); PGgeometry resultwrapper = ((PGgeometry) rs.getObject(1)); return resultwrapper.getGeometry(); } /** Pass a geometry representation through the SQL server via EWKT */ private static Geometry ewktViaSQL(String rep, Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT asEWKT(geometry_in('" + rep + "'))"); rs.next(); String resrep = rs.getString(1); return PGgeometry.geomFromString(resrep); } /** Pass a geometry representation through the SQL server via EWKB */ private static Geometry ewkbViaSQL(String rep, Statement stat) throws SQLException { ResultSet rs = stat.executeQuery("SELECT asEWKB(geometry_in('" + rep + "'))"); rs.next(); byte[] resrep = rs.getBytes(1); return bp.parse(resrep); } /** Pass a EWKB geometry representation through the server */ private static Geometry binaryViaSQL(byte[] rep, Connection conn) throws SQLException { PreparedStatement prep = conn.prepareStatement("SELECT ?::bytea::geometry"); prep.setBytes(1, rep); ResultSet rs = prep.executeQuery(); rs.next(); PGgeometry resultwrapper = ((PGgeometry) rs.getObject(1)); return resultwrapper.getGeometry(); } /** * Connect to the databases * * We use DriverWrapper here. For alternatives, see the DriverWrapper * Javadoc * * @param dbuser * * @see org.postgis.DriverWrapper * */ public static Connection connect(String url, String dbuser, String dbpass) throws SQLException { Connection conn; conn = DriverManager.getConnection(url, dbuser, dbpass); return conn; } public static void loadDrivers() throws ClassNotFoundException { Class.forName("org.postgis.DriverWrapper"); Class.forName("org.postgis.DriverWrapperAutoprobe"); } /** Our apps entry point */ public static void main(String[] args) throws SQLException, ClassNotFoundException { loadDrivers(); PGtokenizer dburls; String dbuser = null; String dbpass = null; if (args.length == 1 && args[0].equalsIgnoreCase("offline")) { System.out.println("Performing only offline tests"); dburls = new PGtokenizer("", ';'); } else if (args.length == 3) { System.out.println("Performing offline and online tests"); dburls = new PGtokenizer(args[0], ';'); dbuser = args[1]; dbpass = args[2]; } else { System.err.println("Usage: java examples/TestParser dburls user pass"); System.err.println(" or: java examples/TestParser offline"); System.err.println(); System.err.println("dburls has one or more jdbc urls separated by ; in the following format"); System.err.println("jdbc:postgresql://HOST:PORT/DATABASENAME"); System.exit(1); // Signal the compiler that code flow ends here. return; } Connection[] conns; conns = new Connection[dburls.getSize()]; for (int i = 0; i < dburls.getSize(); i++) { System.out.println("Creating JDBC connection to " + dburls.getToken(i)); conns[i] = connect(dburls.getToken(i), dbuser, dbpass); } System.out.println("Performing tests..."); System.out.println("***"); for (int i = 0; i < testset.length; i++) { test(testset[i][1], conns, testset[i][0]); test(SRIDPREFIX + testset[i][1], conns, testset[i][0]); } System.out.print("cleaning up..."); for (int i = 0; i < conns.length; i++) { conns[i].close(); } System.out.println("Finished, " + failcount + " tests failed!"); System.err.println("Finished, " + failcount + " tests failed!"); System.exit(failcount); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/jdbc/todo.txt����������������������������������������������������������0000644�0000000�0000000�00000001677�11722777314�017137� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Todo for PostGIS 1.0 compatible JDBC classes $Id: todo.txt 9324 2012-02-27 22:08:12Z pramsey $ - even more Testing, especialy against different postgis, pgjdbc and postgresql releases. - Use JUnit for testing (maven) - Unify the build of app java projects -> maven - Handling of length() - esp. with modifying the geometries - Handling of hashCode() - esp. with modifying the geometries - Test correctness of toString() and getValue() for compatibility reasons - See where the code can be cleaned and leaned. - Finish JTS support - Creating a sane extension interface for pgjdbc that allows binary transfers and convince upstream to use it, then create support for it. - Possibly adding server side code to support plJava http://gborg.postgresql.org/project/pljava/projdisplay.php - Rework the BinaryParser/BinaryWriter to work on SQLInput/SQLOutput instances, as well as reworking ValueGetter/ValueSetter to implment those interfaces. �����������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/Makefile���������������������������������������������������������������0000644�0000000�0000000�00000001207�11722777314�016154� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * # * Copyright (C) 2012 Sandro Santilli <strk@keybit.net> # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** # TODO: add all subdirs SUBDIRS = jdbc all install uninstall clean distclean check maintainer-clean: for s in $(SUBDIRS); do \ echo "---- Making $@ in $${s}"; \ $(MAKE) -C $${s} $@ || exit 1; \ done; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015327� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/jboss/������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016447� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/jboss/ingest-service.xml������������������������������������������0000644�0000000�0000000�00000000430�11722777314�022125� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=ingestQueue"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> </server>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/jboss/geodata-ds.xml����������������������������������������������0000644�0000000�0000000�00000000667�11722777314�021222� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>GeoDataDS</jndi-name> <connection-url>jdbc:postgresql://127.0.0.1:5432/geotest</connection-url> <driver-class>org.postgis.DriverWrapper</driver-class> <user-name>geo</user-name> <password>geo</password> <metadata> <type-mapping>PostgreSQL 8.1</type-mapping> </metadata> </local-tx-datasource> </datasources> �������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/build.xml���������������������������������������������������������0000644�0000000�0000000�00000005375�11722777314�017172� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!-- * build file * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Support * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: build.xml 9324 2012-02-27 22:08:12Z pramsey $ --> <project name="PostGIS EJB3 Tutorial" default="compile" basedir="."> <property name="build.dir" value="bin"/> <property name="lib.dir" value="lib"/> <property name="src.dir" value="src"/> <property name="dist.dir" value="dist"/> <property name="jboss.home" value="C:/jboss-4.0.4.GA"/> <property name="jbossconf" value="jboss"/> <path id="class.path"> <pathelement location="${build.dir}"/> <fileset dir="${lib.dir}" includes="*.jar"/> <fileset dir="${jboss.home}/client"> <include name="*.jar"/> </fileset> <fileset dir="${jboss.home}/server/default/lib" includes="hibernate3.jar"/> </path> <target name="clean" description="Removes all generated files"> <delete dir="${build.dir}"/> <delete dir="${dist.dir}"/> </target> <target name="compile"> <mkdir dir="${build.dir}"/> <javac destdir="${build.dir}" fork="true" classpathref="class.path" source="1.5" target="1.5"> <src path="${src.dir}"/> </javac> <copy todir="${build.dir}"> <fileset dir="${src.dir}" includes="**/images/*,**/*.properties" excludes="**/.svn/*"/> </copy> </target> <target name="dist" depends="clean, compile"> <mkdir dir="${dist.dir}"/> <jar jarfile="${dist.dir}/ingest.jar" basedir="${build.dir}" includes="**/ejb/*, **/mdb/*, **/UserBean/*, **/hibernate/*"> <metainf dir="${src.dir}/META-INF" includes="*.xml"/> </jar> </target> <target name="deploy" description="deploys the service to JBoss" depends="dist"> <copy todir="${jboss.home}/server/default/deploy"> <fileset dir="${dist.dir}" includes="ingest.jar, people.war"/> <fileset dir="${jbossconf}" includes="*.xml"/> </copy> </target> </project> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/.settings/��������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017245� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/.settings/org.eclipse.jdt.core.prefs������������������������������0000644�0000000�0000000�00000000503�11722777314�024235� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#Mon Sep 18 15:14:48 BST 2006 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/README.txt��������������������������������������������������������0000644�0000000�0000000�00000001626�11722777314�017042� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Id: README.txt 9324 2012-02-27 22:08:12Z pramsey $ (This code was contributed by Norman Barker <norman.barker@gmail.com>) Spatial EJB3 Spatial EJB3 is a quick investigation to see if it is possible to integrate the Java 5 annotation approach to mark a property of an object as spatial and to delegate to the EJB3 persistence model to store and retrieve this data. The project utilises JBoss and PostGIS, future iterations will look to remove the dependency on JBoss and Hibernate to incorporate other Application Services. Since it is useful to display screenshots in a tutorial this has been written as an Openoffice Document. For easy viewing and printing, a PDF version is also available. COMPILING: Run "ant" to compile. The postgis.jar, pgjdbc.jar and the other needed libs have to be put in the lib/ subdirectory. If your JBOSS is not installed in C:\jboss-4.0.4.GA, fix the path in the build.xml. ����������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/EJB3Spatial.odt���������������������������������������������������0000644�0000000�0000000�00000156160�11722777314�020061� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK�����Æ~35^Æ2 '���'������mimetypeapplication/vnd.oasis.opendocument.textPK�����Æ~35���������������Configurations2/statusbar/PK���Æ~35������������'���Configurations2/accelerator/current.xml�PK�����������PK�����Æ~35���������������Configurations2/floater/PK�����Æ~35���������������Configurations2/popupmenu/PK�����Æ~35���������������Configurations2/progressbar/PK�����Æ~35���������������Configurations2/menubar/PK�����Æ~35���������������Configurations2/toolbar/PK�����Æ~35���������������Configurations2/images/Bitmaps/PK���Æ~35������������-���Pictures/200000070000301000000934EE663072.svm•Wy4[û·?H+zÝVkj/ŒAµ†ÖìµæjJ„rÕ\-ªŠN.­Y¹ˆ©¦cDP´¨‹ÆT¤HhÍcE í;îûýÖºë½÷Ç{ßµö:û»¿{ïï^gï³?g#o˜šÙp�—�àø›D€.ŽÿN|Š� Ì�Üà&q‚Oq ö_ðr¿Àu³³KTA’i�ÜÚÿíð4`­pØüëüŸË´ü·ü¾ãjÖxðŒ*¯ÖbϘ{ñ±PÉ=ð6Ι]ºnœ?Ýw¢æ·Èñ·9§ã ög¸9ùÉ“ßÓ”·éà®u^Š€:dÓ ZV'!Qà€Š–Qa°Îí¾ýÿ�ê…·©œ}ƒºþY"~OšCyçfSÀq¨îgnåÔg GqÅøÖ/ö±ˆéˆàÍ.#Ð-™G”D…²ÈüÀš8ð¸ÒÏ(©?ÃËÉwÿhþ…G÷;¨cÃÙé¥Àý‹µÔË· Nÿ5$îLûøõÃ`LÀ`^dÊ#ùuq°làÙ ¨©Ä£9óÚ-жçõ„ð.€¼>¥‹+šrSãùÞ)|¹pZƒ Ö~J§!â_ïqz°Úø_ hïÔ%+:Cs>ñfMÂ~v;ñ 8¸ýqâÅŠ0—ç(éÓœï]!v8 ¶A9S/ì´XqUd<E4Ôƒá&wÖîAˆ§B5ÚÎ,M÷•Åç÷„q›ú2þUžGM´R—‘VXv1ÿhx/[ÂË„nà¶±—ouIï阪ï¶"_dGóü€6µÌ™@MâîæRÓ ÞR¡Â4ù™S’|tsZǽH!M÷¼iØ¥þ…˜óé^Ê”–ã•Zå8×^QW¿ãwlÅèuJÏfä\vjŽÿ‘`Tô�A½\@¥¥ÕDØ{'øe냕A²ÇÇžbÑûcæÉuÝkKr›ëË`sc8[[Jw“µ“{×ô‘Ý-Ù°Y42"?Ì>ül“áÎÃ5 f�:h|ò<¤®2/o¶á€Í1 ¤(‰WŒ<ä=ÄSãü0áwJ‘¿ËAuÅÏ}•£IÖL& i¥êäƒï¾ïü£9mïæçBœ|×RBˆB¸˜§l}€:òÿ°ˆÀ*Àüˆ‹H3 °Ëw%Àôa8 =}7^uบ·zh·*r\hÍŸ6ÍhÜ•Œ�±»«ø-tƒ‘ÑŒ¼ö0Ur9Ù[Ö¨(³Gž»^m$¢”ÚÊK#Oyç8ðiiž«~x䥿^kh±]6‡/̲uÐç@:ƒbU«ò|/˜êÚi“Ê·äí< õY—šï×ü\×JDø–ö»<2¸ðiù_-E¡™ùÔ¥3—ÍàÂwW”Êß“õžLøÈÆçZª'UŠ‘IÇà!FH²†/©ñò…•ßJ©ALäõR]O§ F¦YÖzsªv wê~DÁØÑ„SPŸsŠù½«K>-Ô:ͯ-¢\‡õ­Æ“«Š©oÌq…¦w¿¹Ûà.\Ž­tS"4ÞŽø¸í™pÂ5âIlgê°ËÆ4­`«|u7fERïb4>«š\ù 'n°#­\rž‘™—À÷ž½Ò<fÕ™Íw ƒ«¯»y²¾ÀÜÆa$Y¢o z¸8®ãé-LĆV[w�é¹ -åñÅY/±ž›Y")_,°1^B«—ª{ý¦Õ!qƒ VË%Èàëëæ„´KSý¹-6d¢¼†™2“bD`†%¹àüºÎ¾ …wK>MÒ¶z6çàöÌF/¢4LÚßžJÑialÊú«•ææoÓí—îûŸ3Ïzñu÷iÀzìw²/™éò|DtW›c¸\¿Ç¸"þèß>€bôq¶4o8÷38U\Ú"‹ý‹èj¨1êÒ’ÿa¶S@_*è[ѵónkzŸe lsÓçGÀN§«Ð$®Vê‡ æz§öÂ~ŒÿßmPìš#1°«jÜÿCSkÍqÌ®¾Øv,ðè0DûÇ&Ì[gycÛŽv0Ï.z·‹\Ï^Û¡iÝ âšÔüÑ¢ö˜íÅBÜ Ù}@]èök,^™ÅïÈ~qaä. E±¶% _I1„IOÓ£ˆm3‰œ¿/Žn;“Ez–«;Y[NŽ?Ÿ˜Ä0Ìè ê½Óc«yGát¦½£$B%•_ö×<º*$hbXT–‚šnЦt­‰ÅlôÏJ†Ü A§7X†™Ö{¿ô2fÎJu[ìŽÀ”';|lÿTA‘ÖÕc¹–1e5$ÈU%økY^T}á )l~ñQprªÃ §Mø×Ç’‚H‡ã%Æžs6æz?Ë1”'pkë`kQ”ÂÑ-õãŽKµ›S GQüèq=W”¯¶ ¯Ãy1,î½mUüýÒºŒA»EO~“«°†`x¡ª…bÃäeõ ©õÊ úKIbêžsôØaÍKo¢©ØM¯-RZJ܆ùRwFAp¶W‡ÊÓ׳f÷ŽÀºim›à¬‘µìTÆBâÖ/ˆ}Øs¡Í¯}si#ǰT ®ñ7ÆXÊP2"©®RÀ…x‰ööecÖŽò"²ØKR–v”ä:‚cßÖ‚Ò+‡qDd·ɘ’Ó¼'@¾Ô§Ï^'f€· 0ÖÞœKŸôijX‘Y\…•û6é"+]•'kyûå N?Ú»º1/O½©WKÇÜdè§æçóR%Áîçïé{zðŽ8S~ø' û.ÂXÏïï†ïÀûøæ†¨‰"Nl«­²/˜+ + §*±•ÞüLûyVú íµ|BFr_0±Ò}›M—Þ-€£ÆJ­ g+:GØ75 þ5ËG”£À.´£†0…Õâdå¼µ~¡ž…q%µgûœfäêIâ¢è÷Ý3D¢;µrüo㛦ó©y‘ÝÍò·ìUö×Ýp©µÞ-²‘6Oê4ë¶-«Äٔɥ"²?®©W¿¬ŸW3æ®F1/‡ áGÌýòŠÐsL|sR¤ÎéŸrzLŠÏœáî¨"Æù@»€šÒ”rV¡âeÒuO«ý:’|ž+3/LÃÏV›9oØftÇ4Ü®E6ÒQ+LmúéOòL[’ ¶èN±ód–&)Œm&ÔiƲ»ü]#j:S­aÓçxÞ.q(;cNÕ£ ¥ÍíGÌhoë:ÍvaÁ|ôg†…ý MûÓ»J§ŒkeöìøCÉ?4idr›s.ÜJæ›XÊL>|׃}]zR’Ù¤u9„ûâë †¾×¼Ç¬PvmÄá/Jlëc<«öôièá÷Ž…¾¢¥Ëì? A:^cÄû·’•éãÕòá÷û;f~东¦E,üP¦cwÌëB¹D6Ü'sWõ8óKfÇâOu†°ò´‘8z×íÙç.ûgžxÇF„±ê´r ó· À-ŽœÚ÷­&¢u!Íã¼Û‡¥s{ùþøÜ®·|•Ø5¯d“Í¿Mx²wð}ðÓ/„›Û¦ú冊}0õó7ËÝ¥‰“ùùÓ¥¹h£D_¨1†΃À+pÕbK4¢1×J+_ì—ÄxŸíE¨ih°âÕÊbÄMDNÅerÃ{Z«$¥ç\uÅŒ»YªE2Ó˜°¼ÅÞ‡°E«QhTsc¼Ó_ËÈË)î©™ªh¤pÁŸÔÑòö^Ùd/‰È„_,TRŸ#å?·Ã<GW'‡1ÃO±!»$þŽå÷ÚÝ4¯œ¬FŒ†Fü€J¾¨êˆ—X/Ò [ª6„J ÃÕœøíµ~_ߌÆV­OñÒb}j¡pLµûhùÅœ¤åí_ eĈm,B_PÜT#ò5œ€E0Xa73_µ§³²O.¢.6ëÓˆ_=r©'Nh,Q–LåÏ›º‘~z6óqÙòz¥M¡D1Wº|ˆájÛ™’•Ý•tÓÝâ9Éœ­<©›(‰q¾S^‡CZÂâhÊPÑI¯Ù§ÑÒIb*bÕý§¢ÆûŽÑb÷KVµ‹>ìôJëDÖˆå5úÀëzçT ã®ôf»ó™ó¤~ÆH{ów“ø Úõ*5ؾ¨ö‚‰§Ð°sÙ²ËMå:Õr¨ýa_£ÆQÿz7µ+s0º)G0Ä*>ö¡asøÚ_ $ן*Ãñ®Çå±³Ec†áƒ!î4ìP¥Õ|÷Ýáo Ì~^]mEë)#l]¢â½çÏ´‡‘#Ìå‘!j—º'ºÁ´»Cû¢}RÞ_— ¥·eCŸXJn„ÇŒ\²,øÓ0€Æ÷"k††ìüÖ6üRÊŠ©WøËYeõɽ²%øƒI}¿5Ñ7…22 ÕBC5{œ0Õ‡ç#Ñ®QyÕ¨×}9+óVzg"æ„}b̺#[þ÷g¯°âµ\ªèýÕ9oöÊÛ«z쬒±ëÄûIãå…öó;tƒJ-RqäÌ=dV[àONgòËùwØÕmTGé‹·[LfÁìû”d÷•€Â›"‘Сb׿¨ç"¥Ž,óÉQÙ¯©ˆ`‘³rå€?ˆÏœAR÷ne…)gÝ[A t³Œù1ÞoµÿÆ]×A–íü{¸:â<y€ÿul‹þkèúOPK!ÌÒl ����PK���Æ~35������������-���Pictures/2000000700004438000033AEDF6DFD55.svmÌ|wXSßÒ. "EŽt¤w¤W¥wBïUªHKèMé)¢ôÞI@ÅBoÒ‘@PA@À€t©ÞP<ç|ßùÝïsy’Çìd•™Y3ïÌ»ÖÞ+j U011000/ß´ÿù‡ù¿ßJ5·б诰Ðÿ2aÄ_ÂøO>èOá �'Ú;—߈¡ßœèwºÁæÅ€w1 ”00ï_ÿþŸBèž¿÷µþ™{«ÍJöçÎ/&LFBæ‡kwÉ눕”ïÝM"ŠÎÐÆeK{±×¹Éý‚†�ÿ˜¼N¡‹iJMO s­()‚µha>À+@`í°S›hièglpöñ–Wðj£lËÉPUÖQ lU\~æÿ�P¬ÃÀ ½|}þΦY`¾ÅË#§aû ¹7çÏ …êÍùò¤ÊŒ§¿Í#-öúô ÈI𾑳JGÎ1c«G<!m °µàr HÓÿÀØdkéª Ý+3qc ¸GþqšµªW8ç5MðLÏÇ_F¢ûNкG¿¿¶’=œó8é¶¿%äªû¹z· KŒóò–Bj*Rðëgil#߸©[>b—Ö¢î_²:d`ô‹C¥ä»å0°/^ïX1P*†W¿†ÊuàÊÁw—&)±¯~ÎC¾À¼º ÓÒq‰¿ J+ˆÅtù:bÆ@¼ìÔµ¸n fÁ¹ŸÉ=ÈÑàºí¨[׿,‹•¶9Wp•¿j‹ˆ¿ûW@’Pðê Mßu[98É tï,¶ººrÐÉÀÈæôBÇAÇyB‡ý™ãÜñt•zH* µn3ú<þSÁVÊî/5”"¢~âM3èR¾ô.ü¸iFáBõ•Iq’ˆ“]ÔÖ©ŸëÏð§Ú‚Oª–,x«{é¸[ØtRÞ¥P/÷Gl8—«Â!='ðíO´P¼¤™õm›#ýTç_(zeŽgàÖÙ’µRÍTG‚l{æCdFù^2øÌètjïTû¬…ßQ Z<rOž,tS4êÅÒ¡ªCË~ùS"âÐÆfÀk«w¸9¬aàwÜV,ê•Á›w *oŠ706.þÅï0ëñ¹¼Èº4\Ô_vçü페j�wÛëHðjýŒB.ÚpÖ6 áÓý9ëÙ9ân|{í1àïç=‘¢0/JQ×\óG¸ oyBSœk Û)ˆ)¬?)ÀÇn¡Wò{r¨nñJBBÉ/‹ ÍÁq¶­‘�0bèĽØušìp8(`e1›ÁøÞܯQ pw6×5ÐÉhöÁv>Ô1žº|öwJ%…½Dè‹£JTbü¶¦J¸~«uÏÝݰør>´ký¦¥.NïÛ/T:±rý6^ܘ*¶^ydá:œ"rº9¤®:t6öV¹³#MìXh÷ýùJuêÊouS}²;7íÜœ‰ˆh§…ªHÆMgÈôÍÌÙþj>0ÇLcrÁΫälhlW¯þ©úÇý/¹!áO’›é/ù â;è‚~©§:µí ¤£ñ›ç#Ü@›mGMÎ2¡r-¨]y⣹ò©Ím.û¦n'ì¨Ìo¯–±7ÐÝjuÕOþËG­%ì åqE÷”k\ÝÌ  ùŽ<ŒÇÊgŠ_M$ÓÊÚ $žÇÇ´ìÒöƽö‹€¸ÍX/üZ8hL‡î¾-|¬œ ÎO+ط憶ýîgPþÚàs­­Î ÔÏïOâ }khÛš¼œü²O__mÞ!vÄq&b?®çõ¸cá3b@03R„žÞ»&¤Þ�NËpfô‘¥ÓnzºÚêAíJ¯„rõÝ›JB¥ ykAlß:~¦8~wÐóíÕ¶Ž1¯}.tj;>T5L o虜< @©0âb1%©bå@ápx5Üb¨±m.¼<T+[‚š&èj*Ÿ¿ëIœW´á|oÑ2s­VþS䚘é•%íÈ”š¥¿IâRUB(\³°ÒÜXD¤ñüOzzÝwHðD4º”tÍ :uÃwôõ]œùô¹\L%D‹ÄœÓ4ᕺ¿÷o%<,/Þt%X©ÍwZ4  ¢Ê™WÄëØ¯Î27|Ài±F2ægÙ‰ö3s†0ðMRcË¡0@çŽ+ë—…êb˜ß‚Ë4à!™3÷|¹1‚•pÞ¯ÿá-×·ß[šÜvHÒ8Ú¼–…4“Ž­‡;Z{­¼‘B/Ì:n7ÅJO7±ùò£‚ׇuþ¼Å:§áN¾;T%š?" *?ag›=e’à&$«-¬˜\X)==Ü¢G-«v¬$(ª ÑúL¶ŽõVÁƥƆx:ŸþxFíNÑù)»åÛÛÂi½ðg2«Õ³±¶Äß—u‡ÉYô£þíLUà™aÿüƒOµ'ßH ®¦b^©O‚@_[dÛšG=ïâY@µó!#w”&6™ê‰*‘Ù{p¯<*#múÏQáŸ6/¹'ŸÎ<ͪ°Þ :ZÀgƒÕˇSˆüÞ&ºŸ2µ¹jí|:¾jBùn^hõO $øV¢ÞÕéÿëÝ7–[D¿QAw†V•n¢õ ï"P“ˆ0ó‘ô@aH@óò§ Ò–°³ºZÍ!ÖŸ´ßIK<_¡z,û4¨k5Myâ’¨•wÎ}+ 2ðFDÚ®³ubŽ_ªÞ�s-÷Z@îüÌ…úô°Ôû#_É„¦à«’Þ_ËÂô!s‰y).#]¼<Ë•à'.Ë}îéŽÒ‹š²òsùØ\ãv:"  ²ÝÏ™D7|[€Ò‹<¥Êq‡»&PR˜ÃDKAÖDËÆch[ ni—¾‘çBGV?)19;§™ó£9³v8x˜ÙzË èw~.g[àò{ÿ–XÈ.»¬/ïouTú›Oí'ôXr'}|Ž.+Tʯ•Ä×,¨p£ucµ´é|÷]NJJÛÝwbF„° Æë2Ÿ²Þâ‘sg‹-8ø0Ù¢í}ÉHq¸`"~œ™b|8h±²?¸h ·K| 9 ±âˆ_“ÞË K¾EH÷»{eÎý 9»ûYë—9-Af_JDî“,Zø5bÜJ$¡ûЬÑ-‘‡’Åkkð¢ÀZ7 õ˜êó|›Úì@‘òñž›ß§­QÆ0Sm¾và&€ëÎPÍC3´?d3ž ¶Ë&å¤í¨>HÓR>3Óü: s€t‡ˆ2z¿k€—ˆ,œ­²#hhŒS&:udgùqøîœU;NŽUª0H<}wÎÃàïë¡…2Ž ´>z.HÍ#G§@<\ÔæúÆBbÿÀ Eò®6Tl†¶oK¸êwÌxÃbt£`½@Æ×Š[SS¼F„ú/yþv�îaªËÙô6¤j@ÍÖ­ÍK6‡O¹ õHM§½›pïmø¯h‹;ç)ÜãÓV³i}‰ÎtGzcó €™Š³/||:¦æm#¯Î‹· êGÁ¨©š/ ֿ佨ø\Gï>º—9ÅL±F=6ÛÝ<Ã惷?¿waÈä$¸(-è°#ÀÃý1㟕Ôsã!ú!gc¹^Ö?Í~³£Å^‹ý<ÑþuŸBVò,WÚ=Ï ¾B~?ޝ”I˜ÐìEÆXJF– ‡kv;ke>í<³6`S‰®Ãý¶éÌ•ÂùÅ!XCÈšö’ñ§ï¦j€¢r·NHCàž ÏÿúÔ®ÖJýÙɴŻԀžÜúÅÚÞ=snûa&"÷ …•5é_û¸¾ä’v ¼Å … ÆnÉ)õaMi¡ANdž¥ܬP|[–²%Ë&«‡¼9’®EhôVÐ~ìúæï/f&ñOÜÊö³´±ÌÁΛ?ª<€™;c=Uêå«Ý'΃¸l@÷zIw™ï£›ºhËŽ{oï d ¹»éU€Æå´¨–ÍìÖÚ„W°¶¦x¼û噪²åPqNž©mÀÃZó)*§ ·›§gw³ƒÏw_ Ã@pg EÅ¥hã¡uÅõÕ6šG³d‡‡Í>àqXëJ¾ûCÄÙô—#£a!´‡Ý+Z1nàF@/Cç£IÁýCä„… ¼¢ÄçÊ7 zí_°4d�º#í0ÍS+ök-}…ÆýàþI:슬ÐÑMQÐtQË>2ùÐw0üä)2ýD�¾ý[YVê™ÛàÕõgTÖzjz(l«ÓœUˆ‚ZýýsR–»£Y‰ûCþ2†Fšш9éí…¬Dií=n))ã³ÅŒVÅ;Öh߇qÐw>™§Žýñ|SñNðê‰8¿u}4yk)3kVî¸Þ ;%õ ò Ü_ؘ®pÛ˜®&l©^ÛÚ°ü¥2;Acótr:c¼¿KÊÝM× Ö×Xh4-æD£ð5ÚÝegR)Ë!àzÉ˺i¡æÞ6¶? -q q DÁ6_O-ï7|lÝ<=°*“Ä5ÆÌ†„ü™´]ÈîÈ_—Ýâ{X½¦dokPYƒ¤åÚök½,Ù¹éÐ塉×VTÓ3¹`¼$ð—Ý ÐŸ=T}ìc™U\SŠÓé:o~·[Ó Õš'B°γG“8ÆFê´°¾±…˜hü‹¤t„‚ëz—9a gL W”sØQñ½1Þ=ÈÕclÙU¥ê°š“Ë¡$½.“¹ ðì�Y(=öŽfèJ&«–÷ÃC˜òà`Gû}wãœ'¢òyF¸¶#ð‰ÿ(ȹ ÒAT@¢kb@¦ì+FÀÐu}Ý‚&=O‰®™ÈŽ2"W $¿‰éšt TnÿßXËÂÄæ·gÛD£m½çYðýܱÏ“-h$YíÔp.:s£9ÒÓÕÚ/˜ø¨‘)åçÓŸËlcæÇû¨ $îêa_Œzµ�9É çþcxÒŸ'bNÙˆÈ&©u2›�k²8éÔ +«™ µ6 œ‚Džw Òv³2Njƒ':­í€Oœ7…5ocÕŒïödªÑ‘K&¹;­†:\r˜¤`ù£ƒ,¢3Ñ€àÆ�ˆZµâ¹ÃÖ°�rî›ðò;D“ü·¯ž‰‚"VYO㤟+¾ú©Õ¶`›BÑ1 •¸;ìÜÿ3,:æ‚Ó…>“óƒYä$K²;»q´²M ~²2?¾›Gtz\æI Ìb¡kö8”è•rˆ1¶Ø2ÕLuù ‡ý P’B®³Œ— ‚=PŒT/óZà‹îÅY >¿/7ÌCñ¾AÂþÁ¼{ѹùcÄÌNÿ}øY·Þ+x·¯Ü~ÃT:ª&ÜD/?ú‚2}¥×LSƒ‹æïÜjg^´FÝf{ËMêÉzÊã>Z»29nŸ÷À‰pɹ\AQšð4áÊVBòKì}ö”ކcÆè¾\3&]~”˜‰¼¨¨Écuýsé§U…þ« …†¶Xh…ƒ³ùÊï $g-�ÀùLd²õ+/¬ìêI#’¢Gâ19?'5 ’/õšäÐlN( W›Ym=ÐJºt !å<¥ÝÍ´�5/ÿ¾:1û¤Åû±±¯†xÅŸ K*—η¦Å.ËÑ\²Ý›aEP‹Ü¯Nàha½A¡åöîÈj ]‹ºL­d÷AÓL/q­<$<-6ÖÌÂáÖe#VÓ€ ÓU¨ÐE‡*Xµ,é°ÊiÓÕØl±¯È0=Vz)rí©"×µëòcnz&«¶\_Ç£1øw¬kì‰fÁ/cen^_;c?1>Ä݈ï!nùK±XEH±Žäˆ\vpÚÍëøIÆ“ƒ³*ª\srN47«+Ô½¾~¡… §¦º¦órfè  §ü{퀖¬ïGÉuL (` ¬(r’__3“…‚UU¢âþ*B‰nÞðH5ÿ¯"YhE„ZIÝV†Ö>_õ©ˆ–«_}#+À3êö°’\?Ø)�Æ¿™{¥‰ï6ªY+Ó(,,_œô³Å¬ñï›ÛuLјË·I}×Ð-p%(ž½8‹SŸOksá_on¤bx-Ó!ré·M4 O^]Kë^¢ýÑïGm7DäÏI´­(ß 5\ïA„càR2Z¾õ*]”–ËG:Bx&k9¸¯õbFwF¯Á‹ìF­—Êuq¼×àÄôŽËnë÷6sÇe_ ƪÊ…=ºéPß[ßãmöŠ9‰êJ‚AìL ÔHYÿ v¤Ù•ºx÷#Ñ Æ{ 1Ék€½sez‡,´DyÈYæ ÇÙòûÀ+<LâÅ,!–ƒ§v3ôÒL8zÄÈY_ ÂKö*-­íÐÊ+M¡¸²t Û¥x Ÿ—Lí[yµIú®v_’/µyÜ­õÒ±ôCÞÕR7\ЧM@ÒzÙÍ…åwµÓ u©ÍO‰äµ†Ÿ†wE1/ýF-ãR¼~»Dûøµ e&«A2®´¡ç²ÊÈÅ/d¿²S?é#ü°ä³_ç›VÄÓhÑm‡™\õ°Æ½ Y<CŽnfìH½\kØ1&-~vi†´„ËyнäMµ^FŠÆî]èwïyx"hÎÊàÖ/<P21­—Z÷¯Æd@KÁ¶ \6ú«Dx=Ux±&”ÀUt%{ Úˆhò”uÆN5g”ZÒyªaEÙCøŠØ®5Îßå:Õ¨¡õ¦(G¾9ž§—ý³LË„7ä! ˆþ©U R&-mòX–ô“ Ô}|jaÀ‰Í¡ 1(œw;QášL‰ØªpáÄè¦ ÃÃ2áK #åÒ e›à˜ô Shß¾oÕ#)r­'+ZÏÓ×[†T…|D³OnKsDdò/e*Ð\­¼ Ú´ò °“A–­àÓòb38 !"·÷#¶ÎU,•¢FV¿/„asˆýW¿„¤j|ð£Í6ÊZ 'aÌÙšS27KîèT-q¯Ë›º—|ü:`’/†Þò­ð´ÜšëžÌ®ã‹ìµ&C°6®àÿÖ $ŽÄêyõÙI†ú&q‚å¼~›’<ó‚Uˆûkñ„#Ú+WUE»j_ x¢}®ÅwßfZò¿¥*CR4j×pÿ“aJ 9Óý[O1C„r ÓþaéfÇÜüÍ̓ݿ$0ÿƒ†BHoÓÈܯӓ¯ÈþËÅASEké|óEKÿ0¶ãŒ©ÛV¸×MÖPгl²žîâa¸C}±Wm¦„Õƒñ¢» ŒDe×À$׃WDÐ"rcqÒ±/4k ëk�›ä<U„Kä] I€•5µÉMîæ á'¢6$½.´«ZtL4º~ñÃì[†—ÂyÊ3=CXÁ>¢Fºï=Ó¸À¹Y<�¼Òì-údét1¯“Ÿ– $@*Mu›ïb"GŽ$zTMÄÿyÐ$-ÃÙ»¼Ö¨2Eõµñ?X+¯p¿µcžþöÈ›œ‚(ÆKýÃ2h]†¡×*,B¿y@{ï^É DIή&¢K—uáþéÕݶ½ÿð3>êüHà .+Å›×ÿ°¨×O·É(ºHhúþ»wR8Äï;27·’EÍ¢ûñ·ÿ–^Íîd>ÊñcË£z\Üz×ÿ)ºôàîy‘‹íü¼¦è9éÏÈÏs›ÙþÛé&(™ŸâðNV¢ái+äŽç#º2õ?ŒAÔHŒoûýC`޹µ±Iüƒµ_Ô"ßr ñÌûÞrfHdºr¿qޤ°=ìËüèæÞ#[ø•E…ÈÎN{1ƒ¶ŠŒÝW¢^–#ŒIÿ�±]cn2Ñ7Ñh¤xã †H9aà/¿ž…l§pIz|øß Ã×HEeše&CÿmÈ®{ºœ·ûørãVrÔ¿[[Öj sS6xéù¦î‡ø¡Êïy•ENøV•E”.®‚&³¨êG&ƦHÛt‚5ɱ䴰¦òˆ6Z½°SÒ’ Cˆm=§Œb{·í’4Nyøµªf9_ÀÀ‚'‹‘þ°ÝÃdgdEü“·á§WR‘ÕO“XýàÓ¼nD¶´üÐô콪óføŠ¼ös" ‚®·ËÁ”¬2ïÍÈæ=ŸW”7éIŒÅ³ØžJŽõZ³Ç•ûH•Þ‘ÏÆGS"žZ6À§hΨÁùöæãÊC8Â6{üÑpMºÛ@s³.L�_£ŠY? ‘éÌÓpÁ‚±o»…¸hçcœ„ö^o 5½^N±Þ½è“:Niõj¯B -Ÿ¢T¹¤Î<QÃ=÷H5þ%G£ä«….ÜÏ1 ð"sºi Žšñ17§Od“(¥ÍMhÿM›dGÀPƒ² {pg_2ÌÂPÎþ‰±ª ¶£‰¤sáM"³¢RT«ÎÚÆ‚ÌW‘Ç)6¼!GÑ`Í@õk©֥=Z5[ìLD»³’íÀHþLã–¤×dVÔ3nåTn„û.ÖùPîØhTzGNy lýK R&¨CÌ8r.|»™0*dëϳ✠yúáž}Bš)câZêtõhpG;ÎÑެÈ?_Ý1¾™‡WâSÒÿ2Ž âKMW®HP&oä3ó~»Ò><#o¼Y†ŸÝêsö6^“Á#wä¼=Æpõtf¢°á×½»jÉØyHt^’ôGŠu<·Á%Ù±þh¸+Û±VT5ñ1CEÅ ¥i7íô*ÒªMi¯Ê¿¨[%æåÕbÈ¢³"×å•)š„¿ø§¤™Ð¬‘eÕ‡¥|›Àt¡ lj1†l"1Šè2Yá nœ~Рƒ»Þ]Ð8¡~9ΙC²+¾Q¸ùl’Ù!‚Jͼ“0Ìx~Ö}tÉ3?ó÷õ0Å™÷º=G®»‹MÔ÷¦éñq5´ ¿Uà„RßÞ<�FH¾/™š&1ä)²ü¸W‘)žB9´ö=¹„]íó¨ÀSct¢¬Y”L¥‡´bîнí{}R9[üTɶm㜩=º xUž­g9MðjâÈ5<±­®@ÿùHów•í cúl{ ÇsÃÖu¶2$â‰UN K…k®nÔ8÷c¨H€ ÈÛQ>LñŒt»ÿk˜qAƇ'\—ÞrçJì<3³Ðz+V7en0 K7ÝÕiœÒšébŒøõ€B¬xZËëvÿûÏžÏÆ_z¸H-g°+ߨa Qüö¿ó¯ð½L£›¸¶Ï®«mGV ÔsðKÁS]‘+xÅÆE絈:yÊ«B¤¡`tR¼ÌIsÞX˜Îèì¥ð™‰àª5Ú<•–pZYf]Ó.¬Ú7çýª§4«Gò†v’÷4¾uMJ¼ä~ÔBŽ­î OÿôbøâÁ[×ŃØ^"ðÌŸ&x‰5ºªÌJé¶4|NFqQågà²=óÅ8‚T˜?פs$é’„Þw@[J4mÜ—žŠ†¤YÚSÍ€! ü°"]gž*&»ºFº‰"Ræzbç á¹aÛº7›æî ês@×òðˆðêÌ_á>Ç•ã"ûnýu#ê¨Ü<ɴϵü­B&Së; 3i¯X³yÚ=«ªÍ”sÉÏNµ™ÓLu?Æ“çۈ̳LÃ9+‚=À-§qŠV ÖŒ%„,#w½ùt§Þ—®P‰ñN%| Ǧauò•¦¯útgòuh=w6h¨´z  .+==ƒ+ßp:«&X’¿3±K9P¿e‘­ZØ»ÿÜ”§{(¤ ŸhŽÒ¸ÒVMË*~¸Ò¼‚@eÓç±{0ôxzZ¦šƒÀªµ í?Yû‚©f¢âeþ ?×#ôì9}$9ãa;ÆŸÌ~ÃÀPqiô[àDn®úH×+‚’4÷vC!†HµH~ù“öíŸj?ã-œ,†˜‡’îsôÙ%rVØUÄc2Tx´)ÜœH´žM; = \lÚ*s V¡È3Åç”ò”Dà)-࡜*€RýÁZÆðöÜ ¾9Ø\“uú˜°9Sêë[Š^Ä™ÊÜZu]Ö;CêTŠÞ*ØQ ãvÂ"i46䮄Šèôº™½ÀNh¯f(#iE§V£µ´|r•K³˜€˜Oʈb‰„m»ÅÊ]Å Ë]àåö‡Ä ”®ô¸fÅ’¼ØÕ>¦-Ç gˆTÁoä’jó`„~_bóG¢Þocëôúƒ¨~+w€]…ŒªR9‚æÓÓì-<‰ïú Mæd¦'þA¨iø#—9o Êô«-7ý³6jÖá…ECçÞ¼™tz<i«}~ Ÿ.••ŠýœFÇûySQ…ƒ¯D*ä@0;c}>¶¼ÔÀZI';›¤˜äaBhNyÅë’ïp%rzÄ2õ6àKa?¡¨ˆî”mk3I‰L˄ۡZ\mŠ1êþ6û]<¢N邿9vÙñù|Z8àdÍù°ï4*Î]ˆtLòbSÿ!Ä?×ñßp½ñBýs«LàjZßÚé”È覷R–~oP´s3¢¹ŒŒ /ÿíDX½KàÊaP ø†;Î^ýÌITêúÓ¼–_g¸n>]<+ÂõajE¹³ü�…0©VÿR*Þ HAw^j1‹eÏéLòaC[¸Òó‰qíôg"‹‘,.¸<ÎT$–WXváà¦HþO‹›i’mµ9æÈõ†g¥÷k§ùH-6€,uoз rò(QHiÅov …kéʦ¡èàúéàÏ#Ç-CF€8rÜž’¯1G‘¼ñĨ’f2,gºÒÐ480Jw×´’ÆØŽ5•M)F®"D$|'“*[?Õ±«yŸ/¾(®?oÔ!8ŒC§šÁ3aXí¡©òù¦×Ö÷QO(—"PÕ¡":;CŸˆBKO̵Âe24OüŸÔ¿ã£Ô#5Ë·åäµÄ/²¿2Ô{{ˈ¢ˆ¸û¤¥±y/Í Ö–Vó,Ò©s›Æ3/«ðç±'Î<8ÊÈÂ1ФŒ©hÎR7Ê1H*(¼ž§øÅþT¥áÌV”ý $m»Š Þ“µ¤ì•w ½^„$ÿ’7¹“Ù+uc‘A:.C#öm}‰GY.¤U§ìðb³œJ!Ú·zB1Œ Î Ã*Õµ21GÎ <ÿ ކ`K„Œ8ÂÕ Ÿh#¹omдU^̓÷G’±ÞÒ+óí ¯ˆP`¤Ÿ¸A =û¶d¯£m�ëÖϸ–½å!£™òqNÜË–¶’^=÷ms¾‚ãgÍ=öØâ#ê\ÿ|"šþüÂ^&²mų†k™­âyažPEéÝVV~?ºçU_ÒIª6Ìø™©Cò_ˆg=gÁÝÌŒú4²Mÿ¿Káwm9µúÿP`ËÁ—8…dþ»èÅ„þߺð>|{ß±ô@‘€àù}žG×lêËÿ¦èâ@á½öú<¿Û²Wµ÷eªºÆùÿM?B¯ôße|(¸MÍÿpc9ÿ¿ï’?>ôàÃÒº8Éw¯„§¹4¢}Œ°ôÅ^“‡V$:CED_ì…äy_î79Ÿ9ЩX©0óˆOå5Mhn꥛6gSHw×ð6’›Ý*“íí¼ÈËú1eRP9+ ¹! ñÕÛMÀ/Ëo²ëÌaßœ]$\•®Ö óf-zþ¬†5!í*+'£oy’µ’«Ji©¤¯"d×t=×÷b×ê§püS¬ý–,ad8ÔÂb/£Â5æóšÁ5ƒµò›ü²5yØZ£“Ǹ@$t3*D!á/” ð:GtãMãci}ÿU$‚]›ëØr”­¼c¾^xâ°— Á9¡o!è­?~ÿþ;||Øû~‡Þ{ä‘­ûØÏÊÈo×\tæº:µ 91S_vUùÚÝüʼn?Ó@År÷fÂë Æb¨§ö¦°øv–»˜á@ßL¼(!÷jiܰº_¿_¢Ìõ;€$Hofйš{O ©ŒèŽS§}ö6¡Lؘ/ší“b(µ»ÞüÊ”D€Zð™±z<”™LH’`J€}ïúž+Ve¦ÀNÒó{ßÚD©æ”e«7×ÙìÂBÍ:'JobT‡™ú¬ÒÑðЙJî"\àyç6ë²ÀgÌë½ê.ØÉJŽ;ƒÃ‹Ñ·A‡HÈéïmý­çÞgû3©ÀJ d<jh¼S„ºtÙ; ª!2¡“&ÇÊ"=ý`ü¡z“š–JO5™ƒ½9þÍ1þqˆžúá­dœëÝmu5Kxd] Íx›)n9¬N6?6ºŽpÌ M¨ðt€ðN„ÔDTÇ‹1¬3Ž;^ÛÍäƒ~öxžˆ›ÜáÚµ® èbYêZÚŠLf(vQÖlôE‰ºrǸgñ©“õ 5|¯'…Æ¥Šhf•xN °w ®ÿ~?¯Ø?Ék¨slŠeI‰æzçm/ô(ý§;ƒê:ê‚k±o•^u$=T9é¯F*h-ïÀÔxÏÉA+†„õ5nH–ƒAÞ¯Ä:<”6÷ú£[WCæ�³à•HJv/Êtzo·lY£uÖ?éÖ"ÃïÔ›&Gæ\_¦-ÛÔ‘äî•H`vWd9ÙCSÍ9T±ŠVìw‘î\oá2«éÂÕ‹ ’’ÁEv`Þ®„?©më¾�HµÈüôM…x´õS=hFµG©ZZkØXX åÈX³EØ6–yn0®”hö$y=BÉWº7‡¸5×e7&q©š1¼10øNíC×!®lNKWº»çT6{'ëK„•=4ê¡A1‡#Uªó½Â#k.¶ÞÉ–Ï…ò)ââ ªd¹‘.ú�Ù{§O3¸°ð€Ím‹§Ü#ù Ç¯–îjɺ럇Óÿ½1<1o¼�£ßsHß[–0Œ~!rý‹ZŒ?T:MÃIØã?Ú‡‚K ÷ÿ£ ”‘kÈûžè*8¥.©†73añ_Ÿ¿à"ÚÜW„þ’jH%?׿ÞZg¾à"šu×@ItI5rÕþꨓ\p‘Ô¶kßR‹ºœR»(Ÿü*0Š.ù’z7éÏ«)‹/§ä×Å¿’IÿR¦";<ðÕ”ã÷.¦,%sá¼ù×D2é×cK_M¹F|1åD´HÚõaù¥Lå¦×Vó¾œrM‰Fóÿ#38˜ÁKuÞ, ¸1ÿFH{O“ód¨Kýˆ�ü×rA½ôrüÈdU"j!4Š%²¾?Ù„oÕÐÊBmœ¥‚ZÎ7Šýc,Å¿6~^Qðã4ð[âP,º¾ímφr¤}O\¾º8»‹×Ï8jaµ÷.¥£º)ÈAÎùI·{›{µj+# µëÁ>` µ›k½0°f'ÝAì~îúO_²O²þXTÖ¸ˆs¤¿s¥9㙞j7Ó¨ž©R¢ù7pæ �Âv)²•R­ î•Ⱥ(�ôµ럠û9æŸASS¢ÍZÄ ÐKÄùw‰Dð àË. l›ØtWóû/9Š¥è©V;Öb“žh°+ÍçÜDä:åóþËzðîSs­ân7R$ Š•1Sí5¿øA¸>‰ŸòÓ\:–øxòáÿ4' Eãq:|͆«–u@¤´$õëN þc„zigwùÓ¬”ŽØt°*eCjöSùÿ -'˜4À_UtzSú_gðÚòo·z®@9‰éÒÞ? 纒‘üÒë¸"¨c®GI’£„æÔp 3z8!³F2 Ò°­p ®F3Òf"@�^Fæ$R6oòFV”Ø7|¼=|ëoO3¨ÅÂ'¶Í¾ !€xHôyiz©Êv¾ã%,Ò�ºtQÇûW‡ŸºËØúÓnæx¥ªU}3acÖOæÎ;?ðQ$‰Ö? Ós;&†‘;Åö‹5® .è›`¶Ã$©r*ér]!f†ÏçÙ“{ÿcò`¶Ðñ#Ìe±þ»c7‹Ž:¬Û~ˆ^Úȯø¨!°€f™™¢Ä¦ºx4øK¨¼oñÞ“\ÇuS…œóÞ,oƒ…ÿ¡¦#Š==íX ¿ØL®š} ­àxËÝ1Ù*ýxˆ¢ú“]Œ‹¢¤ê.Ÿ]6 ?ÈQ¶_°Z¾…›}ç¢?5kR8¶ñk^QŠÝ‘¹E!e£“«ÙÜ<›Ô¯Þ,Æûé46ºy‡¯û_S–ˆÇ·å<]øÄ f†ª¥a¢^Ûáîõw›3ì¦Üê¿ó3k3œë ÚˆeVÂ%§‡*O9w/¯Ì°¸@â噾„âxâ.5­á|Ö‹\ ìµF›“%ë{ž‚lÖR*_"G²‹_duÜ/)áŠåUn×J˜FMQeu§m9´ã€®ôŸÒb B±[Qná¦6;â—øñ[íðÙ9!Ë�% ä%Ôä«°\C:ua.Ñ ’žbº †}€ÃN[Ë¢AbÇjXðyÓ³ë³Vô@ …¡úpu×e6`à³s˜óìÑÍ,®Ô}šª«Ð7 tiÔq”ô 1ÈwUJöŒ‚ÿž¾~ׄ³¼pRi`Ý5½q¹ÒeNXhìj϶¿íz½ör\Pé3Š5ï=qm®~Âéë£ì¬‹ïËW³ºÆª–«Ñ¤NþúäUWeü… d!‰BÃt*§ežÚ¥CàMâš:U–WJdE‘¸Gƒõ3Ñ+!€ìºR¨é•u§ŽzÍù€;üdŸ IÈÀÛü÷3p'œöv^ hh%ê“ÔÞ(Ì]Tw^Ù{chQ”Uÿ¢·îEoI9£ á(x@µò&* l²+qi¹lR$"à}•ûÏ”pm;/ka|¬ Eö¬ŠLl~ñ16±Gê·ÛX<DÞ­ŠÇ6S¦´MwWßKÏhŸe¤"Å/»8“w6º™¶DÙ}aL9Q2Î\°¦$™À*3—È—Ïl+ƒ‹.Å‹÷¾ÛÕ�R¸Ç+××FÝ|bø:svݸմ׋7cËÅÏXbøE­Æ6w×)@|ò¢½wD×ÇÙaäP‹6¯®ã~ÁT¶}Ö›F»ŽãÛÛ‚Û$ÔP§‘I7#©}ðö[ÃìèÁ^(Ž‹Tzö×_ãá^*Éó­$©—µà åj^·–¥Œe[ZÄAŸƒBá2ióÑC7Ÿòù x2-¿Àsy lmÑ&¬'2™8¿•û\õ)áõ�¡¡é¡“›Go5_Ý<è¦ÛŒÝ_ä©õÔL' (¥uÚ¿ô½y÷Œ5-—²f þ¶�Ð ‰¹ÙšY&©0n¼§­¬´YÕµ¼jkµ£‘qû:›aºmð¼‹pºÿÔwŸa¦hvëŸñ¦n>êÔ)}Sµu3u winÔn\›ð üXÌNOðJO}çf¦d9¶‚_@vbÈšÓ0êð&jâSÙ Øû´â9]»yØ„ûÕq ‹ç›†3k´|§ö«§‘#óãzϺŒP=%‡2¢s¿Ü‡«ÜúR®6W™9«þÕ›ôÚ©Piú Ç­7úÿ>(¢™'³°º/Ë Í™$Mó©eIº~p;»Â�ˋƳO•´wÛ›§ßG†9\gНlh’îdŠã—4`|< g±/ÿcºm1x7¯ò«„²³K[‚ÖuªyDÊY騭~Ø‘.oò5ç r.-i\¬X¼Ç·ÈÆ"T,TñmÑÚ,Ïu©TšE8n§)=Ô‚0Q_ç__<K¸zrqhJSÌ­Úþ;g¬›»)‰¦ß@Í_¹‘ôì K%„ œa¾Ö<Ð9Zeµ+“ØÃâ@;ò¥9™~gwC. ¼% E¨ŒDfq™Gñn‡Ÿì⾸“;^#ŒØE§ã@atj(ó5GqQ}2ˆÏC¦iòV ¶y²k7Wwõ1[ÏêEL_õ)Rg2@ð˜MDi«ÄúÕûn7Ï—Wg BbÆ-‹L`æ©¡S»Hý´åJkšÛ/ÚÏí ‰wSKtô(¯JG²¾4p¬æÈ–/«Ê¼à˜ÊAhã§ÅèÅõÂ>#%µúYwÀ;e¡{³vñ¹çÅØvfÖëo?X>d4:ÇGÕü¼Y}xat$¾[gÈBuú<­¬FëÇÚöûݶ1%í‹ùËÓƒ=]±=E“T©Ñ�ÞRë¦ø>›©†ˆŽX˼4¡ä(èwNV]£+G#»º¯.2ç9%eQ1r1}v/߬.ót\ÕÒ½–Ѿ¢3+ŽrŠåKZ®ÚÍpàëíûrûWîã©„sÊÚÃñ‡"S>²¥iå+q]ýÕÖ XFW7?õI„íÁæx¼(²˜–lCׯLùýÚMsóþ³Ùe²t/溉óEeëFGþï'•žƒWyìô®ŸUB7¦UÅü÷}„ùÈ£Ó¿w¢Kà½kï¸,€;˜)a7¯y…"܃üß2¡kÛÚÊ×2]Nyóï”L°€ó_ï¹:oˆÐ ©qÅà_OÀ4ˆn¹ö" ÃÃçÆ¿ž²B‹oC{ýœÕ…Døÿ¾’5bÒUÐô÷Y*gñ¬?0õX >QŽs]ã÷=ÄÜ’ÃBä&µ'ÔVÂlWíów´éUþŒC©Ú‘z׌£×—íº)¨-a´¢ÞöãñÍZYŸ¥ÏH†·Gã-µ2cs¢öKKÏ=Š'k3ÞñúryB¸è²|ÀYíÔC9ð9—é/ ¨ôM]kUç)¦°×ž©…mNtÜÝmBþTLUÎTYÁÝÎŽoºËÞ陨]3¤-F{2qè#uY,e~õìäf±æKí/¿ï}ÊüØúf)AÂOò€ º»ã$†k¿ž;Ùt3èX3ñÚ~E¤îg³µþæC‡O¢h¡·Ónr®ŽÜ†ù°¬è*~³9ÒUó,\ ¡WÉÍ·‹ªŒô´Ó'Ðlô·K<®¥Ú\/1¤(gN T@Ẽµ_ ³œj!R•¶,É•©iÕñª\[f"â¦tNFs.ëþ¾lpjÛfëFÐ÷ç·©=Ïögh:y[(VúÒ.ÕÃèxFÙ×àú–Ô7â\;Ùôµ,“{ÞÖ'›Œ6“ŸÇÇÇÜÒÝÍeJEäoÎÞË<{>KVaU«ä%¡ÎœÂÍ ò%.`’l¬­”>p–m•)'è]›òölQ¦´‹wq$¸—d$>˜Nt0µ;[i:+W|Ùž–•¨¿ã¡ÎwÓç&åw³Î¾´ nùê`~î½;,žj½ßê€Ú P”-?„]"ôÜîÑmK>æüVµ[µ gÜw©C€K’ÍÓØo¸Â‹í0­W C8ÝP³gh9c«È`ìUèIJòë->]7+ž|‹Ÿ¾ 9%¥¥Xlc!ä+¾‘[ÇXzoùAž§y«‰P1²hüš~%CÕ»¶#Ù'9Rìõ]ë¡5.Íj\ì[ÌdÝ×Ú~¢å±2êx:ö!»µ•é¨Ds†°ˆà»£ïW¶Êg¥&Ákqb$ÜþóQË*¨YÚD×ÛåD”E>æ•êT¸?­#ì£ n)VE°$ÎyÀ §ûç§Bwä6î¹àh9 Äl Èp7`Jãl,hô…fžS¸– Øíç@sJ¾)$»hðËŠ¢s©Æ8(;h"êç¯]öóÀ® \Qªáò7!?4Àðï952Ýms?k<>gð³2ƒš+œ³õ+5ÜÉån|4Øý©&vãÔäO*n ¢Þn|,íú¶r`Ê¢ÖøuÔ,Mrè+Æmši˦e…ö”ä÷‡TºTÎX#íüvüÓãk,ØÙiVÎÍ£ÎÇ£–ç\Þo”^e5É/¢ $•;øzçãî«&^µŽµÁÝÀæGl‰ð<Ù©³‚ÕÇN¼\ŒwÅoigóç˜ó6fj§ùÑÁæöó¿K«éJäwã™Ã$ÍaÕ‚O ôµ×˜ºî?€ª¯ÄÛs‰ÃKæ¹Èí¯OS£ÅÎ’Ù°0kxôÞz­^njЦEBÞS0ê;Œ;{I¿w¹3 _#ÀƒŽºùuätĦÙÅð#—õ%…k_m©~ý9Œ–(oùøáÙÄb9ÇN¸V¸™alÁÜ,­¯ªÙ’wý×R�k_¸"9ÝGœÙæ^ˆÙiIwí3)ºñªî*ëÏ?þ®ŸQ@ø‚’ÀÂQx)åÎØm)É\(JfMÆú»5¢Y5¦© Ú6]-O·JÔ[ý}Zßb[íqÛiŒôó8'>GänàòI#ߟÍz²w�â cA_Vζ8N´šfþ¢ãnåé ØnnùP ¾[±d Zõ"Ü`¥¬ñ,Ï›á}·ëáYò®:V†^µðáÔ™ÏoJ¤s Žä‎.1š3uµ¼5ÅqÈvåÛ|‹ÓµaÚ£&íP?ú|êäOF…Ý^èØzY3–¾ê½t÷ueO~¼Hñô,©*>!ÏcêëÞOèØe�/²»mHŠâ‰ä"K¶Ö]³˜´MìÖª¦„‹~+¶’,—÷Ob È�‡E•%=ä× ¿ù(ÕXD \Ó#54˜M¸ùT˨Ùp³ì6pH®,Êp.Ьlòøemì…ÊW eì2Ð>ùly9] ÄtDí’wRÈ¡ÇC“£‹05ޝÛÚêQ®[û]/¥)ïmvöÚ€W² £÷·î—’‘^$�Ü“s7ºÄë&òðJáÁÏÀZ‡4eøÚ¸GëŸX†wv)§†*qÛ±R |ÌNàS¥Ój{j(ƒi{Ñ`B‡TG/‹Å}dQ¶PÐú~CŸÛÃÂgªƒ ‡J›ÑtV À̱2£¹^auº®*ÇrWo:ÑìÞj”~"`2<cÓ€rÒ˜Z{•‡+èÁÂj"4P€œ¦‚ĬH/BÅ/ò èuß |ø|±}ÃrC%éx›"¾ñã—r“€tpLR=ù…!ao™œØ�æð‰TWÛépÒî´Œçý_p¬-ŒÂ8U G*Tz\H�’~k„šÞñ×Qhªˆg+¿U´ bÊi¶Ôƪe1d‰në„“·ó”«‘¥†¾ª•tJÈ&~A*в×6©ÞY5Šï*ÔyŒœ"²{½[¢/÷§uSvmý(È€KÁ@—l¤ùr~IPõ6!¢¢`ĽDüKC%j!3høÐÄRD¾MN©ãmêxßËÈþÇu}«©·Î”bQ9¯+u¼ó9£=×ôÊ*H¶ÓÄüåñΔþĬ¾™ÐŽâÒ³ÐóãËò]ÃûCòÃZµÌZûûòtÁˆî¤B›þƒ‡‰ß6”ás¶ Ú’ˆI…R!r=½»Psâ&ì¼c&ýBñs¶fh´Ã÷ÞP)µ§!:ÆðáŒvyÓZ¶”ê-—Ã_ïñ:TµÚÀmŸ4»æ$×XJ ‹pßèR_H&÷@Â-ûà¢z…!gtC v«ù-³‚ÌLúÒõèÕ7ƒãFP›LR¬Ü0ÇιȤðà‘ò»±ì¾1ªÙ3�sHõÀ›µC¦ýävh¶œÁ8Ó”ÚýVè£% J®©z©œ*ìœH‹ä'÷Mc…ÃÔ¨,Xø<Ÿûªåzê°Ûg 'p²)·òÉ¢”Eï¤ót©²‡e–Cá.AjEKðné] îŠ;�µ·‘àÁèÆQ¼b”&j°³œÏ‚¼:„€¬ÞÌV*êŸp•ý¹Cë©ÆøÃ{h9傟p¸«ÔŽ‚>p·Š,­¼1ŽŸîêvUòÑÐÕàÑ‚(jñ.„é~þõ´¯FŒ©Ø,/źëé|b‘ôZ'Ï%otÑ·ÍG2c¨é�è‹è›ƒ¦ªdËûÃ3j]N™vÆCøYžßrC‰úYćý ‡]E…Ožyfåššž¨1¦†rSd{ºXA×'òV÷?eb~a˜ðÕªËox\TQR øâ²¹ëT£Å)¡f©å8é–ýU‚3@å;ã1Šh@Ùó¯"íüù"tüšï3¿‰ä?/šm65€šÅŒ¨*oà¹�Å)¨Ð[Xfç?SGøIÓ? û¦èÖò›ø4©„¿KuZ^œm~1µ[úL ÄÀ <6í³Ù}Ľ½aW$ &hù¬a7ƒ-^Qš$D§˜×>å¡…òƧmJweºô²xâI“°ÊÕ ÎÊ’2;»5¹ªžA©Xýˆ›õqïŽ|Ѹ˵uüìèñˆPƒÇÔê‰zhø~œcGncRÙ¨q?øHrO^]­ˆî¨ŽX›H%©àëÇü“6Áß¡V?$âñ'Q@])¯‰´Vc¹ä‚?€Çh€\Âü$¬³zÿòS¦¤‹ ‘³<j Ó*z^4&VŒí“åT‹#Yª‚qv3&i@q—ŽÝ´ÎI7°å..Wé™é°`±±–%n/•÷äÆ ­HBî« h]•«a >.ÓOOsä=g.äsK¥&îV—ƒVìN‰gÉukY2ÁI·/IEÞ"ž/[á$‚ïe‹Ì¼ÖnBreùG¾eùC1¾.§kÕû¨k¦,×M††r|O˜ö‡OÄÑDxûêèÑ_äàÍ3$æ¢::¥sóȉËayb¦‹o…­§ßv†Hñ£á»Råó!¤t? ‹B+OC©Z#;ëPnÿ‚ÐSÐç³ Nà‘7ýŬw±\;34Ò§žH½­h!¯ Ó«V >"|–‡‘Ê�}žAYV@>ÑQèe½2ÕP9?)…],nÿÐ<è»^ eWyåî:¦³™Å¡³jý9¬i:Ä_¶rCx¹)à’Ǩ¢q½’dõ í½æÔYÊ¥&5Zј&ËÙr®l’‰ÒBE¦õšó0ŸÕ¶³˜V´ô²nâcÒÒÝÌÊw{°N¤è%[z¾þhጾðpï„ùÊ13$@ÑŶN4×KPÔ4‰û†¯ßœF_í&Iæ GUr±87Û“̸TTØwÈ«2GáÛtHnÖáÄÙËËU7½èï#”ïÁE2÷`Á[$±ºS#èR q*±µ¥]¤I¥ =}4™ëùÔó;—£j�LšSm¾Ô.*è£TÎGäõUÕ‰j–™µñzžfƬQî1…ÑHg!\™#ª`›Wqh‡j_Ðð†B¤÷®ODÎûáÞBu·EVöž¼3Ð[ËûR 9Ù?Ÿm2&ÑSS¢""MP¨î®”´4àpr|²Ú±ƒ=< «KÇÍÆ5= èÆêuç*`î+™¡—·òH:ÆÆ+£VOû¨b°[C€!£‘›Î·Â+Ù»’Ež•P-bßQí _H6ê-(é cì…xìø_Ôà€>kFÿçä–Û@í}ÅDÁ› n†Wüä5dP«‰´6YŒžK”!ýÚt{ýBš”C´”Ké3…ê³5iê"Š ±§13KêŒ_ö/Ì!L*¥ %Í3E£q"ÃÑòÊ•ÔS”.I…3ÛñÂu} ™jÎû¶Ó2N4Kγ¥@þÜj±¢ºÓbÙ£vM7g³®KL)Í-éqr¢c6¸Z…DÙ9®=î¿ýAHC}×pGg»‡ø(XP•w¦U4–‚.ó²ßÐèg‘¿Ï`ÛÈdŠ•ýáù0ƒdPRáT°5ÍLš³I«#wrEv©Œ–¡ÁBxÕ’ ORa‰ »éªC»Áò4ZzÔ´õ,WžV{¤T¬ø‹èÄLçÔ® ˆ ÑKwMr>!…ÎÃDl”€KèÒ_OžÀ‘V‚ýHÕ©áš«Îz©]0i%å¾Åe­g%m="Î F“÷“îÛÌGVœT‰¤T{1¿¿Ã¢„.ïfÇṴ̈ûd "˜¿K ª»«‰ý_fë„=$u8N#_ËŸhR £«;å—‡gHö[t_‹cãµÌF Éj-Ÿ•8; ä”i£ñ‡EáJïU�ì‚ôŽ“:b§|¶+ó+™i÷w¼ï:ùÀÉâ¨g3K íôN8ú`.òú±µTâ;¡«ÿ¤]§y!)É RSÖÒ~?*}þ4s’m²§)O<bdœCÖNø(­Å<wü»‚Ʋ¨Åë-v«’rè[¦øyù?F÷ô§»]<4xIG;™5GÏÇ%g6^ŒSþÝžùš'o‘s®÷Ÿ”¹Hæ²Ï¬#ÞfFOh«£³¿sHôé†Rô@¤ÙÕLóW3͵©j½^é°iK¨Ã\…7n™M_@0)zH:—fÿŽœŒ÷SYGø<ž¡­Æö<(rÊãDæ.t;\ëÅwÜQGÌoºoÒ?£ ÿ©MO=4@;/«ø†ˆõ“9M°†Þçu%æý¦ôóÝp×’ KI’…/€Ùî{\w´P±–°_Æxš—‘<ÊlÃÁ¦ÏÃ>.­èTäæÅM[¾P{}³òEÙ hZL*.3*ÔüÿÄL6‰YT^FEG]ëÇÁ2;ë¯Ü¦Õ÷6ï×áéjŠ>_~ UQê}‰}x8µ,“@%ßf8}”Ÿ¶.~j¨\TÇ¥ÙÜ8IIjÜ´Q"ü#WôWÕ X,ÕÅþ6`rÏI£¼«<mEX[„écq#Ú¼÷êY'œfHÂAE4%’íkúmeø­ëö7y¯÷Üñ-‹¥”ÉÑᤅê!–:É/Ó–¡?ZÍt2¡ƒFÚÉç9¤·}|žGÓ•Lçc<G‘¶ðàtÔü±g“F§_šÙá[Ú»÷°²ÊŒš¥¾/|{ÉäüCœÙ—ωò’Ôf64úÞâ„J³?1£ÕB[5åFĶç6^âHµNœ·³ ¸çg›pkˆ¦Â,¼ç°Ùø•½ˆÝ¹! ázÌ9Éɹ¦˜ïò»Xí§èø†ìèÌ)D®AÉ‹»8ˆáF醻þ¥¨äe-k3LÐð³•Ðéu3˜t•hŸ.¸ÿg›Eu¦=§Nè:Éð‹&ÞwŒÅ]wž˜~%»ØF˹#¬­^ã¥ä/_øZyýÊþO]ïÕÔÖµ¢ 4)ŠAT¤ƒ€¨ˆtéD^¤%tDºôÞ;¡&MÞ;B¤—„ ”<ç¼÷»?n~í‘1öÞkÍ5糞YÖÜוãI<4ØnšÀš\8€Y&ë£ÊL’úô¿úÒA°X±Í,ª[à8ã.½ õe ÍÍá¿w…üÅŽFª%À³¥ã™)ö4Z."•þzsÝvo>ï‹¿†$üÂClžÜêâúƒÞž‡K{á=f˜HµF \O'9¬~Ý·pïâÃŒŠ)SòSº1ík÷ˆ+LuÊFîè`¾çý=¼me®`o¤™îŽ¡¾÷‰ãÏÍn9·Ç­KÇ8l?ÖårÈU™«lÓ{ë²›Ž¹´ÍóÏLýp±‚Z< R#-´~¿t© VÐDÓ‡ä‘à =Ò@çOÄÎöâj3‡ºBó$ë-ëáæ—Ž\bC”àÞÛ m¿Üsm ü[–À¦A@ï+h•.c¹< ªÿª!|®þõK—ÞV°þßðè?›zÎí†&ñgH3ÿ}ôŠ, «ÒEûOÉEµê?ÞoÚú¿Þ¯°ÚTíQÓ õ×´ßW×­ê_kõ§ŠîÔ*ìÏs­€l88ºP¼¡–¡ðÅK–ÚmkÑ9<*G°ëe f‹Ê8²&§oOBE^ ¡„†^—ÒuÝ™dcûÆ¡°ÿÏhÿœ¯ôàŽØÆpƧ_~'!E©]i}E׺Ѝnô†IØ\³ŒˆgÈÑö,¬¸v7¦Cgz¦µ¥éW->ˆú,ðB¬ÊTXŰ<9,ôF­}Ð:E(Cë&&’q_Ž4[xïzÐ7¡Î€;qþtjº|wŽ7#˜_î¤VW;Qdu2,–z³º,ý' YiÂ6Â3’uÅtW†¸V¬ÆT¢Ã½ãÒgât,–ß–êÿØ÷ÕÕÈ~Ñ9îШĈ2¸Îy6ù°Úû¦Ö+DãϪõ?mqé¿/Ûr¸Ö8Õ Aeì·ç—¦à©z]˘Àô±=9ÊÉà¸aþР䀼¶zäª"± ôä3(Ç;E:í³7ò_>äÞ§ô‰6'<°­,°E”’9×U`F,@·d¾sÉ?©} –¤AxÈí3¯Ä§ÈÒ=)5ÉO4l.‹º2~’4Š=W…¨kØHV®>‹0ËÜ3¹×·Ÿì‚/¸(„'¸ÂÑVúù6P»×¾Ñ¡"å&— SfCÐ…Zê f3Ç‘ƒ(ûBjUÕ´Ìs¹ÜT¼¼çãc4uŠý5嬲ÈÚsnVKª¼JñTMÉ çc[eëHYˆ9g2¿svOzŠ ä-–$ N±«öM›MÑü¯âÊY0ñäNÑ–@k‘ _hÙå¦_†¿G˜‡`×s´j,³‚-~—EÍhµ˜†2ÃÓãrA£YíÙÆŽâWåÇ‚²ÔCÉpð]ÕÕ¦\ýò:ÂEN7E¿˜™­`Þús•š�¬=ë ´DQʸ¬_{×Ñ”)`ÿÿ*ºëã…Ñm>Ÿ'±‘¾É–œ¡gxðÂA%-‰Ø°Òfç}Ó˜};ú;œAy¬åœXad1@�Œâ©ƒGË3‡Z#µjøï¾s`~Ñ@þW*dÖ¤ÅÞ†‡º{Ú¥h„³Q÷¿IMîW”x,1ð"ƒ- ñ;�kÕ àÊWÞ1º©ç=pŲ¨UQôÇæ³q»¸F ¢êvÉÂŽÑuJ¥¿ïTZuûf!MÀµ®—Âf4}|+‹mÚÏú6#o2Ff�­Ü¿”^¥¬Kö>“ù_„xRÁ^6ÑŠ‡íPÿ… %Ú¿Y f?æ¡ÿ ´ÿûefå}á½ÿª²ðÿ‚O¨±\£ “è=ùØþ>ÛR–Ù´]C“V3U¡‚8ë¤äømH e>þ›G¼¬Ýâë@‘ñQ›¤‰ž:®aΚ–€ÞÛ ŠkM'æ&ޏ€©ÌŒÃ°>kt¡I““¢ÖnL�ÛÍ‘gް¾²7¡64Cæ¨L [Ž€4{É ZÕbXß½!‘‹<àb½x„ñdŒ7ò®ê·o ¯ û5,ôÏ<;Ë­hñ›Ø¼LÐèÁ'(ÆÆ}„ôÕç×Ô¤CÔ¯å…þY'Ó»EŸèK±Ìž5»a{ófÛ-^EÏ¿AHL8Ú˜u;YÛ>7}_£ó\M’€^ÛYAN)&Cî 1ƒ fÞøŸŒÍ\šá÷@MP<<4ôì3¹âíM¶,±ž/)؇¢ðpŠCÈí½4+Ùá²É{Ñ›*¶Ì÷ëÍx$õäAÚ9Ÿô©?–„‚î ù]«RGýaINz9=üÁ vý—þTU…¶çðæ�ÛÚ"0�ž.Y4ŽÅ:l˜\ÌíúžèP¾>ªé$µñ«Ç;Fù>kîw¼ÑÁ‡F£ÓÓì© -;³QÈ“Yã¦&L¹¿Ùz'm”„¹Ñ&ñ3:Nôì]1;Ýa YdvÆ6ã, ÏîèOr²úYô¦ëC~Q óxÑ[¶/·<ë‘e¡b›Û,¤õ]·ô•òˆ¯“:R¥ÊêíÂ`z¦X„x4¢B~Ú½U…Þ›¥b„éOÐÃkäÐiUòû ™+™° ôªèµ2Ó"\ Žö¾p:LϬ³Ä]€ñÑ&ÔMèøÙŽE±t| ÆŠ;ŠZ¿}õ–¬;y’©!…\âkH™n@þCq_‚tãaqįFßµÛ´æLå°(Ÿæyµo• 5b¦©Q„½ç½ L¾ ߦÔdÐ,*ˆ”.A€!ÌÓ Ÿýã(2!í’Ýü¾ÄI¡oVŸqcÑý=Õû•³qˆÃ:7U'LêS£\AýÄò„Á4)+IžÈÄð›ÏaŸôøù:JˆË …‰U'yš9µTQï' $åÆ4£¬U ßꜧøÞ¯Cº«î9ÙB'Í‹�$HŽŸ¼wó'1ù̶ 6>@I ö¤áÀa¡E½úe/”�а0—M.¬I•3G†‘ôÅLW4nOHbg†:êvçø±«÷[î(r9{Çw7€)O<ïxÈÇjÑV®ß2ÚPSŠñô+ÑegŒ€gy†'…H\n~~ACÏ'Ó~ånpthç'wo¿n†ÿðTQ¸Jç…!X°áËèΠ냧Ù\Ô3•µjlŠ÷¯ÝñŸX*¡GHA|ÁeÔŸ ¦.ðB=lÂA™%¾Sš@_"/lhªŒúšç÷Z"‹Îÿ•Yìòò¨Àד5�¹í²•½™4/~¡ÝC9*R[5½åú'IP!Ù.Cy#`0E†_ÓçÔ ûæ|I£Û´v(ýÞ—ûµüÍ’På™ÎžøëR§ôcJÕ9Þeƒ'aŠSë½. NýžéÞ&ŸµÌ„ÐEp©²½vÔS—ƒEìÍÆÛõ&±u“À ííèê{´ý… ‡œçÊ{Á—A¼ËüN½[÷:'ÁÓÙ² Š^zèò�åúÚùõÚ:lŠ6…uƒƒ4þxŒt]ºƒÀ1ož; ªî f·^‰§½š ž}À /«²Ó1¥Ùúa@^øvF<rôCwôöõWEÁ–ËëEÁ6î—¡‚³SR„VGΤ=AÀÈ{+.V;iƒ>cù¶®+bÑN¿ò”Zmmªãû'n\eT\ F†½ó7fïwýá)ö�ö’|0, ûcv©×•y&D0tI™]eéͺb¸±œnûõ!¡ñ‘o½ÿÖÄ6þT³AsÎäPŽ–Y6„Ì7†—¿YIrX,ðú¥y­PzÏËj•E ¿‰ÿ/©ÌËBì³ i4Ë×Y —Q§È]³¿TñTfòéÙ8°všì¯aÕ/ú§ÆþU(Y^.'èxGÊ !gÌç°¿RI0¨$ Žv÷Fõ‹]Ý D«¶fÑt©`ç©è±¢ýç^AÂÆò]Ûìºã™ ß|'‘«U§îâÁljï®cÛÞo‰Mõ\ªcM¿ì˜V¨N›môÃÛ?VÆIµ˜+ø&99œ8á(8NWúþB©"DPR‡fW ¯êþ¡ë�òèÜáo¾¿„#48ð¾ ×ô;)ú®Q×)ÒyñÉ·ƒÕåD8ï¼dü>Zœw'|ŸU8÷¥³Ÿñb~ üZ®K0~ÀIðS[ 4ì/ƒƒoˆR8 É©ëɬ+Ìc²ä¡Ó™”o74G \óø¹ÊJ$ÓO÷åû8Ç“ ×…oÔ}—exu£ôä<cd¾/I¦‹òô#7„bdÝš®Û\ÑË\aoy’Û¦OjÛ­ßÎáÒ¯M¢â?ûLå^@‹¢UÛ l “Õ–ú®]X&C?n]äóÞFî Å®Â;%tBb‘žìýSŽ+ž¨ýO²>OŠT+öo¦^šËܽ¹P|ðR?êÞ~i=+µ²ÿ×™Š`7°È­²†Î)=à(ßwkøžãsƒkO‹Ùs\w¤}™#"Þû>òÕ5%´É¨Ét¹�er§ÎBEšß %û»S‰•çNYQ¶ýÏÀÌzñBÜûö§)—2%§oôü`ùÌŠŠ ¥kÍ©Z×îWÊøÈnxrI5•(+»1«¯Ó³¯+&Ü’ó�ùø‹þj.j›Ô¿6!öÞêÈ&)hÄ.z«!HËì“PdÐ(ú õ٫ަ迫§˜î?U2¢Šé˜]%î·’„…ÿË0£ºŽD\ù¾++‰˜£vG?§=eç\iëBÎŽÕÁzüŸzìnÖñ¬…+Ó=|ÜPø—M´úϵÌT óÂà«sJ{Ÿêëjè0>BºnÜËß±–\µY=Ò’$àNwIƋ҃ÎÑÔ‡°¥=ˆê›âwºÖÚ¨Ç{ž¼[À"Ò£@ýÍ ‡gCGüt½”«Ï9‹È_4”±³BŒF¯z~=šÿø‹÷.A™KÌ›ÆÓ� ¶(÷ÃÇ’j·Ó2º^— xÔÜÉÏ&­ï(t–w‘÷Kðû©N©ÆùKHË O¶#Ä 6¦÷¬A¨­ž•ÊÙ©™Ÿžºa°+EP¶ÔÇCzŒ!m­^IÙ™M4Q½QqÄLÀ‰i©h¯é×ñÌ.ÃK´.o™Ö+zGO¾ªüzœª¹Ì=JƒÔ»›Ù%>S×eBÄ,ÝéZÔ*[/ãBGpåølR·×±gÃjšpCͬÄRAa¾‡lòïô D[Š»C‰A]`ìøÏ/cýâï‘g`áò$¨þÛ�ÛA®y.3¾îç°¾„k="Ñ‚t,�X³Û ´aÚµ%«BâbÈ ìdÿ;0j*TÆssB¯&"Ò:ÅLÐJ!üq™€^óƒ§ ôzõùC{Y/w€&·<S–쟀@—˜ÌÍñHßÜþ—>o¨•H‹ÔÃüú]6æB_OcÅ&Ðó_x¬$þÑÁHÈE:¬ûç®c“Ì¢âhÅYžòÂÆlØ|¾öp œþäQbQ|oïe–‡°$ˆ»t©a%A€}°©dä¾)y‘BÞª·ÙôC¥Œü]®% r«´’‚‘¶:Ž™kú/4?‘bbÚÕÚÕJ†ÌW×!©åòc$¸ÔDàX\òÞ®ÃÎ7—ª‘ßs÷‰çösB Š3‚>€þê4Hžr"TLbU_MG£ä ’àpäJÔùy èj\ÖP4`g}ü€Ãü,µ³!€.i"vƒ÷ʰ&:ãäWµ\e ß"Ú»o˜Y,‡›bX(çã$‰™Ê‘5zºý”v¹ƒÙX›> ¨!äš‹þÆþ ¨WŸ†+_Z‹J,–ÜRz馆}LÚyœNx¬q¬ÞÉT£kçÔ‹äFãô`Á¾É‚er¨wù=¾Œ1_q(YÈÔ%:¤µ5„‰ lº’ö³@CIY©Æ5Nk€dt“o+^ˆ+ûè< 6ð©/ôŠ™wàQ“àòEçIÛ–LèÇÀSz ;Þ:ýåú®ðOwÓoû)O5D‘ùÊN¦©Knß„3,oð<ú[¨pMÚsø¹Å¼zQû|Í¢*¢Â'Ç'}MØ&�{¦RcåÄ9 '䃬 ¶š #8®·Ò¤¨{ò~s!âoÿ°¢ü·pô•<$õ›AIíi56G¶’ú”+–Æ,ûÙ~¡]˜lã[]Êα¥vê—Ÿ_IIÇf½5l*PÃN'âЗú ý9Ryj•>E«òðÿ¦©Ò<DzÀÅðZmíÌHkpÓc% i•y{-ôäjÛ|½�¥ $caKGHBï�tøžD‰h”m @Žòú߆jþ%—µÙµ"èûõûçV­KV"’#ÊnÚRõš0Î9CžD¼1Æ[NõÖKWR¢úðu=)/Šñ0É4l$Ãûî¿§ ê9?pÀ•-›6R\»8+{õË:îýzòè÷¢§3_a€·U{ÖMì'´<ÆrV;çCV`‘w=Ùqïgl»{__­0ïÚ»ö¿Rãÿ…=o)kT¨k¬ýqíÐ×î ÇzÐÅ%®5I¢n*} ÝŒàƒN–SFé»»êrýê©’…3ÄÈk²ú’4¢o=LD¯–eã‚Hž ç‹¿Œ ¿&A7,p ªÃÏ ¬ìi¼Òë9‘û…܉ MÌ:‰#‚†O¼2-Ÿfªc|KîÜx$„½Ìü»W+€Ùžx=ÅûM&BuÓYö÷éQt/Ei>ò³âL{ýÝ¢h¾ÈŸú>ssLouL1à{hc$i¥h†Í§Uuå⟩@`8M‘—`°ï¸$'•­ç„ÅpÜY]Q-Eœ&ŒœS¹Jè8Ò;ûž^X1®l¾ª¡½~U`/à Ül~NY¿¬É)</ù©JÍÓn¯g/ &ûÎ"�‹í¼# yi tåêÞi«°ÒçPGÜí УêŠnç1—¡r²åß›Êڼѡ[a‹¬@PgÓ,bAáñòÑÍk˜½nAM?Õ ¢Ä± æë*ü)_£ôΟŸ)ÒX‡†µX¨ˆ„”J ú—âŒG C>YåúK›†=iæõ^f!EÅM`/÷¬ƒµIaÏ¥^~ßÔÀæý 2Ãîã츛m#¯„̆qY‹m×ýîXPÛ‰““êVLµM²n°_j²7:ÒPDÀ, Õ/ßµQ¿N®ÍYýÍ `ÚE AudX,Ãè´35ÛõÎóEBäW·ÈÕb·ý›N¦³ÁLîE§ïÉ£â9ÔtÙ Kà úBò|ƒ_{¥Nóýù£Ì „™ÊÕcwª_%ý@!×Uõ§Œ×Ðnßô÷o™—·z°?°Øxl ¿é2n‰XŠ~/p¨¹”²¬w'ne_g`×ûC Öž2±éȬiE’3þøXÓ=)ŸOûе7 ¨—s½‰ù0¨ðœàñ¼ƒY“KÊ8Œ(„§j¦ ï$ÐM|Ÿ¢µYLÂbµ»NE÷sê«ëçà|\•2.ýl…0¼w) ©Ó—ßñ!%Æ}½¥ì$Ÿ@Ÿâ”‚­óuIyª?DR˜@Ì"ÅEŠÙo¢½ÒÚ‡S¦ÄÓ*m Úö¶ý¢iŸŠCÞÄaâÃoYcá@X°ðI[!³é@KœBbb)ö c¢»BŠíñ¨<ÄÌØ¾ÑáìN®ƒJ²RûõÅ\ÇøùoŒº†|upín˜í'Ü©Egß茱sáþÌ<TÄ~Ó><O–Òïíš=û­¼WYOàÊ?Ï–)œS|¼)øÞÓî·2¤�Çâ×à|f£?ˆÚ»ÔšwT„~N8¸tÚ¤Û |HÀRÞ“ýý ZÅõRPdµõq$ ôTLñŠþ›#º Ñøðëõ¢—È£FÈ¡gnÿÃêdcð˺1rβvÙ)‚ú²óPö0SQ„eÀþ-AúÙ÷†W.o¬Œ=™Ljœûê^k #©`/ëÜy¹'Úó·¡³Âå¦n+Ò#ž g¨`w¾÷±Hø]ü÷öݺb„–[ïìæÛ ö[@ÉÿÔ!/ÇË[SÈzhžÿm¼ãIM…m1Å-Ôèç±rϵÚ\+[÷*• /f’«þ[E×bßŪ½5àå˶…†ÆÔµHYw÷%2,¿Ï˦m_žï¢¦ ðuM>žîÕ^(Q‘éŸ J6ˆ×¹Aˆ)·Iýxœàˆv7—ÌT }æ¹(ß4μ ÊRZÙ=Y̬Y3-u¾zû‘– Ñ�×U2âoþ:Ïzs`àlL«]bp¼å&í±[‚ ¸ýRãõýìÆ&õy× â鲨НZIѾºÃv£ÑS]@ïŒmôš'öKlãk~ݧôyçdQ`a§¥ò5 ¯—<ëø-‘é×çÛ›²zàÔ§š{Xß³ÉÇÃ$_nºå'Z%Ǩ¤fpçüœ:/c)ÌCŽ*Éœ È…¾}ÕùU§yL©ìsÛ¨‰S{Ùૃ ²q4˜À$úzÛpŽÐò,¹‘,Ö¦›—Œyo Ð__ ø°²baƒs%È×mì‹p)&Œ½t8¨ê|Q²¢R%¨…ûîÄuÇ¥ýN²ÉŸów—°Ÿˆ*þƱµ”ª$š²Õ-äAtxÛ˜t/•Œ/™f±t؉Fb‚´MÑ%DèÁê›rEæhag #hÉŸ]˜ÙUzó·L74§bfV ϳÿÆðæ`¤í'DÜ.(pG´!S¯{¦â× Á©T–*ÀµG n²W0ön[ùš¸÷°‰ù‰´'‰¢°Î‘¸{WT AÊ2cÅ·0!vŒ©±Í÷’l6•;º&O#þ…+è§Å7åžg”ú„”ì9?#Ós‹ó'óàý‡6ÀÌp¾©vP§ÌH[Z£DÂ:Ĺ/’Kÿç›L4À–W elO¥Às“ÉVÁ1pK©‰Ð¨h$N³†A$¬:f熒SIAk“tF§Í‚ýÅÍ«ËAõªßãÀäÏYb/[d½¾ÿËýròmD³ž§6xHœÅS—f ýïwt>hÝççu:¹’ Œ]Öl£_ÈÜÛ[·¨òDšäD ¯¾×�\Æíê>é±2|Ôö ŒNV2òæõz¤#­1À]XÇQïbØËtýôhýÛŽ9’,ý"Y'»-TH-îœ,'( ÇÜ“Dv)*¾Ÿ¢½+¶Ð´²®Qã;U·¶ƒýg˜¶ilž]»b$ñà³N…£©êG!Sy¦~X!M¨ï÷�ª'˜rqú ¶³YhÅ4½ýï=Š%Ž“”#ˆÄÑã,ëÙ¾É$4Ū Zã²\ç¯Ü“9âa£K¤wY?^»lÖ™—F<Ÿ`ÉÚ!X¢÷²cÝ?+ yÙeK¹ÇSbìØ‡òõÜ*ì_Ÿ¿zï~pëL‘{ú‡uų›ål_U˜ø_‘ܼNF\aüvVÑHÁ”ùÕ½)×ëM]�‘¸ýïËȰ}j…É&‘€)M;Sr÷ÿ 7µaÉ17þ=cô*ëï\®RÖü×tö!Aì·üÿMË_¹ÉMKLhkÛ“Å}'¬ìÛ¦ÿõ…VxK7zXùü¿OÑp<$B?¥ÕMú¯»î­Ën»dOúÿkJÐeE ™ÿß׫Ã,OUMgü™ f”Í<µ,µNÞ{­ÊD힌ö=KÝ=—¸rNâÿ–ìTBôsÜ"%Ùo®Êâ¥[Fá›ï¿¿:í°åï'·íáé}JŽá܉%’IÓ p%»¾ÎÛÚá<ãá3`>é&ì'®³Tÿtsü8C{ÍŽ-ú¹¿%o$¤k"§‚!b®.bÌ÷òé÷ãŒòÍìO_‡ýù¦‹3ïÊ3E8Âõ•ÌOÜ5 ¢áôÆE¿©Êç0PÈ ?øñÌ5Ýh=­2hÚ󩧣˃-§C=Šë¶vf‹ž“Iëõ«=·tEš¿R‘ü䈶ûÞvì6yšÞVñ:R«ÞSõ™k¦þºDþ°ŸSî3I3JÉ® ¼ÉÎ Ò k'èp‰b¿âý˜¡“­´:R í v{'s:+æK ?|üC¨g3Ô ÔÁ‘Z 1A¶Í +Í¥Õæ”™ûç‘wßdº\—o•‡|^¾À+M1bã–F¶Ì+99unkŒ“†0ÜIWE.:[yÂé?ö@·@…Æ8¡-*Æ{–µüRÆ+ó¥ôùiµÍcЭ·£ð¸Ûœ³ÌÚ:Ÿ|WjäQ”pÀÿZ rÃÜrWþp“<uŒS3ußóìsàÙøÔZ*;¨?/tlÔÐÑÚ©Ìý¿T·„ÿ¼´ápý—UJ.¿]V“™Ãäv©£ñVÏÅmt†èÖUV©ýdö`)¯£è5jäáq;Ôc¡ò×sõ„‹ÉÌbP…Ýá–×;쨸ßõú<ºÉ [çºcÍš!b3Pa/é·/Œ ÷EJäB³Ÿ1AAŒá,à/ûÚØÈ“Šk]UÖ’65Ç!Œ«‘,£N¨|-¾É°ØÇÕÆZU–Cœ=®ˆ—ÚÎ^À9B‘M¬pÜ|6^ò¹k iÈ T-^ <`ÉÂrº!…ã³ù¤Ž‡-2ÝÁÛ;-çabUA·ÓÝ«üT:ku˜|] ,´¦�ÎTÎ’çÈ$;çø`qú²Ýògì•ÿtÌɺ»?ê”ixÉVìò-[ÝG$dŠÙÍèy=•Þ[Z:,º 5¨KG žë"êШ¡{úÀN<JÑpžwQr·if6„‘…µ‰RyBÄ'›2tòeoÚ>EÕǯoƒÕNÊ1;¼*,ÌxqÔ³“T_õ;9Vk-æöÕcP›Qç1¶> }ßÈÝk<ú¼EiÞµ¼‚‰•kÛÿ*"Øf‚1 ›MǾtîìŠJªêŠ�J|š :Ÿ^pJ»b†cöæ¥?a&MRp&™™°™æ ¯ —Ä@LaJŸP£BÑ ’ˆ:—Mÿ!x¢ˆŠQI8hf•Y—GæVÝzMºÉ…áhô¢ÅÔ{ŠWšZñšH•á«<›wF2Bßx=®õ:ÍŠ©¸«å¾ØwàBªÌ»f•I aÚ–¤án˜®†AD>í"„šc&\7ãçÐ CwG|g3œf÷Óø‹ðq›/j –(YÕ£áÊ“óǾUèQ דã¹é||fµÝÑôçvUãÃäØD¬d­Åt(^|¶îäö&ªdö°Ô-ºqúõsÐÐ Ï–SfÂ5ýxˈ JÎ4b[0Þ/źµlo·îê§S1;6õC)„½cÊg*ÎPx¤f‡Ï˜ø1Gª}–ýâ*bÍ^ÈgyRS9ÐÔMð´½{,‡°j9Ò0Ï~¶_Q»·Ò.2£÷¥íO/%˜Œ�±[$mb²'/oq—Ì÷̤I”­¡Ú½ÊÔ±ì'å,#ø ê­³ÕDO.Ÿ*¬þÀ¥q|àç’xÎ+ݰ9Jsh²ßœ±c0™Yw\Ã.œÛ˜Óc{.\¿¶Œ;H«7¢Ù88–À)M»-Õ*⾥ÆÅk§’ìMkŽS^ÆjÍ^Cð†50¨¡Ëaä¥MM}ˆÝ¤„[µ(Ry²VÂj§Ò,‘JÚú8qP—ÿ“!ú{-Í}|¾“›É}(Rï SÜl¥Rã@¬x'×ìž´»ÒžÚvÚù-z53:“1Æ]ñyV±Ðáõ{­Ö¸å½RÕaÛ·Qâ<ºâ¢"ö±'æ #ÄüjHè„6e‘¥ªÔà§wug…†&«C Žä2ëþx·#Ë “š,Ñ%>˘‡-Ï�åFØpÜÆš•[T.F¨öÞQ1ô¿tµ…׿›Öƒ®Ó+ï%å0ÛýÓ«Áß¼B?bw‹Ûg-±o¸ŸœÁÛ<'±ñEo[Z>ë5!Äj"d]¨¥ãã>ÁÅŠ9¢â¹ÅÎxS5>Mø¥ÏùìÖ"–¬~({6uõJÏ-Ï7¨²Ž‹ú F úÅÌk2¤U l7Ä]ªkÛ»92Å|‡ Öë!QRÈ7^ÍâÙçÑäìƒÒæâñŽÓøþΨLí¸‘ÇQ¸¦‹¢NܤýqPøâ7ò@ä¾:Ar½…óc ž ã£@…ïŠü(êêDŸt2@s£ cãnµÙj ¤é÷óÎ2iÝ2˜h³îxÖF0ÖÒÓ×·ÔL’V\œb×ûF3¼–÷f‡…öèå+?¾és®²lÏIÜPD3U¨+œŒêì-vƒDÆûï¯Ûåý6ÿîO­vØ“ý™|ÇÔ�0õû”MÈ—`<G\ U+,¦Kä%*6ÙÏGl ´Š—h× }5"‘ùÝÆÍ_=é\4/½ ÷×Ó¶ÉoaÊ)¥F<~e¤Ó»Vzu}3,:fš)ßÛz°o»fm�bîY ¥™ÉA•÷,¾{^]»· ØòņŠ7Â8Ù“rßWíìcùËíÓøLièÂØ’𠟈¯ÕfÚô�+±:ôø~þ(™]àæ¼cÇ /Pèä3òªuWÅC3X¬*˜ug§Î‡üÆcÌq`jA¾ ÌÕÅQOë, •`£Øó5j>í!„àЗÛÓ¥Ö+Ûi—”?5Ü1↜H¢1¼½g'Í*'ZV¸Sµ@! ðf¨1QçŒYú½u£#•ãïÇ_q_•E\Û+}·o쥉<ÈEÃ}…:gØŒ³X�ºe3÷,Ñé²3\¬$]V¤SvŽç¦5uI "k–ÚšÞ§K<.5kãšBÖ %õ‡f!è¹tøàLöÙÞåík/n1èr¨Ùµ ´d©þÜ•É Œä~7iõËûw½œ‘®ÈÉÏ~dQb¼Ø~N<©²îq Ó2‹¾0ò¼.8[n’ú¸÷Ô^ÊhÜáÁܾ!¤ëp>±Î8Ši¨êø¼ç?Åú¬<¢bÃxªîºú˜5E½ïæ*‰[ö;uÿØÙD–ÉœÄ6LsCð’óÓ¯ú”ìÔ+ ØÅ)7—Ìl°¦ÊŤ”Zc�&Ý i]"…KúõP¹ïñÅÄÆ^ïpPÂaÂôˆoéo,õÑ믩þ Eòèïû†•ªX(5 YoƦ—B}ÍÁj>HÉ,ÌüÞŒ’Bú â¹Ð3~g:Þe£Ìžœ˜ÊÝ-t¦Ä.±,yç‘$NÕAÍn¿æÛhßflψy³9ø%µßtÐ(i08›»’fdЉö<¤YÚOÞ©Á Tgj?oè{7ä†Ìå…¤SpuíÐT+À½^1•ùe¦—î™Çi>¶÷œ7ÈpX†DçGEXO›Ž÷2G#·RÏOMá-ÞæN9||¼Q¯ n‡ ‚ß‘Žùâ(XišUjú‘âOÅ$Ž=^i•¾—„[om”»n1_ƒY‘VD3¨:ÑvÑ"<!ìr¾ŒS…#—peÅ[¯†yqïíàæÁ t¹˜/¯Â°ó,‡ä“ªÝ¡ß|©~'ðÿm0ð£{ ‡:;¬òÉ¿8‹Å;Þ7ÐÜFÉøà‹šQÔhØjV³#‰PÅ™@,/èaFµfHÀVrÙ™˜„Šôæ›8¸Q7är‚ÀyáÊ©j­ñQñ$¥4A–/M3W÷m¤,‡V]­Ä¼¦j�vb.! cP[1Pb€Ë/kç7͸7šØ1r®`%²ÇU!… M¤¼P—±!pt…WµùÓÊtÓû_rF»Þ”=³.[½Ýú¥õf¹ ¬ûÜæ¨$\öý0ö˘™ÚÆ-¡à˜€šºà³Ë­^…Æs¸Gǵ½BŒ ÊtÝbn 77—Vñ]Åû#2Ï¿ ¿n6„X¨¬p4ˆ²|z(ƒÌ•Îõ©ì¹,&Ø26+í*{ן%*F!K.f “¦ç†S³²H­š#c ·è?¦­K0íæý0‘ûÈ‹@?÷{g³ÀvräÝ :ÆçÂë=6Ø«b¾Û«J¦%A˜XüÉ p#£Îà¬&éµ§s{Ê»¼*�´I®Tí Ê´®ß®ÉT^C¹+[bgp5�kq³®‚1©Q×^€2—ßw_û—ÖݽtÒuvû¤&LÇÈ¿4% 3ÏMQ=ü¢5oäEg¯F¹(º$X£\×£-ÿ —s’µ8 >þØÍ+CŠOjH—›@¿(q€ŽÁ˜%ñCŒŒ4™õ: þ’að³ý‹Û~ÙGÛ.ž±d’=†Ü»­oZf·sQu^PG÷Åóé=ܬC¶cï¢jY8k•àe)µöXži)D0ÁÀÊLMè¡Ñ—u¯¼"Ä~2Å´>”áõc*] 9ÆacêóíßÏ\°e]îÌñ¤ÊR  .˃‹£'?±ÍL*[øÁõyÛÈ­³ÉM:~õ¸Þ3¯gxM,Gæzj²vh öšêhßb>ܪb‡#|±Ë™Ù7¯× 0Ò‚Š×|JœN#–í^Úâ:Ç€Ö¢ö]ÁR£ÏÛ#¸¨øŒ|ÛB6U¦zÖÑÆ’æ³ÒJO›Ÿ.Oç<aqü1Vî j«Þ®‡$HTA_¸‚õì�÷TŸNü(tÉw¤.ïMûŒÿ051ÚJªg=û¤FðäËäaÖóghAa‘Ÿ¦ÚÒXÜu?-÷‡JŸú‰¼¶NEz›¶¯O]/oÂÉ94âÓ8 °~å>ãϯ ó¶È ÕªP¯ ó“ó۞ʼ›6'fµy…ýÊ3–©ìµ ww®ý¯É{=Ï Ü÷óÔΊ“™ú3if¤ôqø96}ˆXovdžñ: ÈÏ»~môÌ«å|c>LzÆk¡ËëÙt®ÍÔˆ­å5o<tÏßË«ð�íðÒRwlJzê¥ÓEA˜4T64_ºÓ/ɤ‚lZ7ÒÎh4k——L;Z¦ûpÔñ:= “s¼ØíƉœš¾hú”*\ øý­agJ0ÍˈøÌ«s‚ŠË¨aã¾ÈÙ[‘HrDÞP—ÜÄ–¯Ý@¥šW„^íÔ…#v.0¥aW”Å|\ Ž \´½_Zóá•Ì[™'?^ÈzP¨«‘c ¯Ü»]üuÑÌz’ÔèI%¸,^‘ªÄ€ËKkglÓµ/¦Av¡=ÊÎŽý”·«‘í¿ï)~–…åv«¬.¯®ÞjöÞõJsyØ’ZµoÖëð•©Øù7‚z«SêSäÖùžW§*rÞM‹ÉŬuéµIk" {9uΉ_&õ,ˆU¹•ýõÛÁɃÁóõÐ$pp<yÞâ…ÞÖ'6Óý7ÄÉ2Þ@\KdsÐ;¡š¸ ¹-ÁU"—¯b­÷?ROK¼š±÷áÕO·=ó þÜ2^ÕÚ+¿³ùECí»<ËÛ‚(ûá÷”ê9åd‡»¨ŒûÏžN,UÄ„ÌøTÎFc+†(‡õN#àÓ ·Æ'×›€Òòðü°Y=~ÿ.ŒÄz狎Ç{ Ƹn¾™çáŽP«x¹ð^[Ð(ûæj¾å¶‚Õ°ýÆöü'§kEb%+”vLc+âcJ†Ÿ¬Ý´¹[+[09HO÷ê‡ÚØt+ñ#Þ‘ÇKÖÉÂÔ¹½_ýŠSãçüÄÇEûä-Ÿ½ò i¢I&ڪáô‘O^ø…ä,õWö"Ô.ÛønÛ‡{b·“³ã¶:Êí²c£aZYÌ6œ´f9·hÖ/³þÜ›ŒŒ­y»zà±üäjÙ/ YOraK^"éæJ߷Ư\Õt¨cüžäë¯X°\ð’ƒ&t>xŠúÎWGÚ0µ™”‰ Ã/·ëäÑŒÒãyrk]% ¿k=diô¢¿Êz¯X3å1cå·žTN‚_;Kæ„;™ãXŸ!”`Â7‘V{°9V?ôizí’Ñ[.)›¬8ÖP„ê Z­9Ý(íïÒ='M"ÎuúZéåXvÐÄ<‰ë+ÃvƒBjÞ¯6~ªÜ4º÷™‡ZÈÞÈš¤y8ü…tn?£b!`íèKqÔ´dw:õrÍË œ¦xãó]º™å@ßey¼…Tuqk:¢s—9d¶¯dv…ôFbEêüý„„*©wH /ésô«l°"ޱ\çø7ÄCV¢:uµÿ—ÓQgÉ÷ζ¼ã.'\à˜DÙÈݚtÓ¶=ì<“Xx=l©Ý¶&kÔž8öI„Îåc?ó+™P±çµÔlcÝûý¯¦Ï:ƒç5ð^CšúQñtÞ:kúóJÐûÑ?›…Æ›Bñ²I½mü¤sšà6Ý;Óì{…îÞµôCùçsÅ\ƒFŸg? @²\õÞó¸âù$Õ§“¸�R>}äes QÿVä Óc“ÊEs§&¾JÀQNéØ`˜ÒFà8݉õƒæîž î½ZEr°ûéûnàtÔ¤i0Cø¡]è×ýmúžû<|w¢º9§8¨Ü9º£%~#âá.E"Ê šë½ ÑÔw5ѧÐê•“*(zo“ÚIdZ²ÖÏpˆ ‹D.‹m÷›…|!¯Ñü¼ŸQŠÂ+J’9Hê=O®f_u9Æh*~¦Ðùî0RoS°áíçößñ!Ñ©¾}-,H’ÿ¤©êµüðÏ?ÒщÇ(gF[—SðL˜à]ÊzAG·…ú›å I³ "(ü—Äg&çñ[‘1àw1ïzƒb¨lî= ‡mÁ’<î†[9óâ(¬däØ=íü…_èÐýì<æšs£qtÖ{{Hû&øþVóÑâ‡ÁûÉ.•øÔøŸï 3ÍqCŽä%± ßßyFylw<=šߎ“jšùœiIzžAJúJƒn²,õ”.®òÕ4•Tÿ‡^ûSÞûèTœ¹·ÐÅÓ_†´ŽóLf<”oÖ5:M˜ø)¸ÐxNäÅÙáÊ "¦-êùQ²6`€»§nÕ |¾ †&ö‘Â}±ÍDÊ<ųˆoböNc-4™ÞÞ)Õ ºæ¸ÃÞót¡.ϦĪcН™zO‰æä%Ü7¨¥²¿G=ïX¶m¯"kò™â] >y›†°muhÕ7é<ܺÞ<+|Ë¿û5Õvùñ¦'¡Üž7¹Ö5ÒHÒnH&HRÙ)ý]ÔK$=ÊͪØš룠ŸR’Ž¡¨¨Þ›C™`o”óÃãÝÜoãPfJ@¬R¨emÝæb\3—»´.ÜŽ’ =™;~½ªøúÄñ(®Þ{ó¥”G$µB (~pÒ.íGÿãô‚Hë°óP]roIÀä š'™W½mK_`í%­Þ?¥Ÿìs[70ˆ-Ö‹o{ð¦ùe¨ÕŒ…˜ÛøÚñïâ¹Ü¸ëƒ0[»ÄqàÃØj¦X˜VjóuçúóZ™ͨƒe7ÕÈ·qÄ]?94§‡¿ìr•úOêºfèÈü‡®‹ió­Ì¬*ðÞÀ¡6—¨%ù}Ù #VäEìâù̃ƒ4­WˆÀÍÝ·w#äBÜâ*?°:JË;Ô{Ó ä~VÕÜY:Þ4ÙU€ZΓ±D +Ì Î]‡íð²™R4Ìg™L…ˆ|LrŸ{,òîãIè'%íÉ¡ÿC¼~ÿCAËîèE%çñÐ¥¬.K­°|Þ”¹h•±­ïeü×n¤/ß¼.ò†¬yÄT¥Åë+âû:­Ó˜`ÝÆ8zQ»Ôé­O¼®Áëw ‹2âwĹ3‡MDc2z~ÿ}üy&óh1~~ÒÎÉ+¯å“é889صLÊéjûß} {&0 «ç²þ²6ð¨:‚Ñ{× ¿/Ô)Ða´Á Kþ›9}[ïíÑ,YèûÊo{ÕŠaV“®ö£VËOõºè QÚk’Î$ýoFC5Ä9è…ü#yW©ÉÍ~hª¹wŸ?í(çî]üÙsvîÁÖ»AãÜu¥ùŠÙ C<_ÉŽ8ýkÈ ¤QÃl4¤·&®ÓN€î¨í“p®¶N‹o 8ŠÞtù“H@UG5€Ðj«ê.-écñб®kãâß_·˜ï¾™!y’ €øË]8¤óÖûøZîí&(âõ¥u²¶•<圎1+T,@>Du˜9f�7Žl”|¼B#œ¬! MÕ¬69-ÞÛä9cÝï?"Á†éh½Þï_åÜznvÓQ¶KµãWDcU7ƒíÔΧWÂG‘lr•ˆ;Œ ß®`~†<|tò¡ú°Ø¾Õ¢â‚(BÙþ!Ñ¿?Ñ·DDKDDDWˆ®þýçÿ½ '\]þþPKâ*c¢y��ƒ��PK���Æ~35������������ ���layout-cachecd`d(˜ÇÀÀà& $˜äBN†N{ +\ Ü R_€B@ 䳈À´3!C C1ÃRU†¸È€< Ô/Vˆ” T»”ácÂ3 �PKuDÉ>`���¢���PK���Æ~35������������ ���content.xmlí=ÙrÛÆ–ïó¸º5)¹FW­‰•H–ËW²“çV¥ÊÕš$l� cÅ{k¾`æmæu¾m¾dÎén,\Qsë&"Ðè>ûÒËéŸ~~tlíúÅÜ—{u½¶§Q×`¦åö_î}ì¼®œìý|þ/?±^Ï2è™ÉŒÈ¡nX1˜Â5øÚ ÎÄÛ—{‘ïž1XÁ™Kœ…Æó¨u–m}ÆÇO‚pdþœ7Î~ÒǰèÇØvì[Ò->2oœýÚôɰèÇØˆšý¼ÇŠ~üØ•ª; ­ (mËýúro†ÞYµ:õaSg~¿Z?==­ò· ÀFÒ΋|›·2*µ)Tëz½·uhHŠÂ‡m³ ¹‘Ó¥~aÒLq5xè–ˆ‡þÒâ– Þxœ½M³8{›fö[‡„ƒ9<9©ÞÁKþ¯»ÛT|§èXØvŒT†oy…Ñ­³ß3ÆPñ¡ ÜF­ÖªŠß™ÖÅ͇¾R?ÓÜXØÜ ¶‘Pœ9³ˆíêUhQ¡(¦‰à#!‚94ªâuÒ80çvýûÝmÛP‡¤­üÆË Bâ"e¤I³£ç±ÑªÉƒÏJ´bRÃΟ<ÖÄodâ˽vHüöÈé2{OA[9–=šx™v‚’PˆÇJ ÞVÒ!æúŒÄ›¼ï/|‹Ø³>ç/Æ`o*}êRßɆVäõ–I´6qí£k¢3ûx,øqF[ñbe`¼bnÀì\d³ƒ{Vh€uèYÔÌó‹|‹úÚ;:œ;`¦MT ˆï–¨cmÁ¡´ î\ &Ú�Ì—ýMÁõ@@ŒÀ´Ã%¤pÙ¡cyÓîÚsÉ2Ù°ˆlŽ‚:Ë@w×Öî,×°¹`%-6´*sÍÍò£WçÙZùœD! ZF…÷“aþï1XïëÉXHø¤ïo¿€óñÕmGAèÃÌÝ‹;O>¬x>¸B?´@CzŒG¥b[}pô„ÞS|ñ:±z£J�¡#ô=d>x±±dæ4Ê Ð˜>7jŸ»Ì%p@Çaç–¼ÆkD—”wÁ{ŒÞlú˜´(Ž[sS¸¹LL‘1Üæ¾Op“-ŠãÖZ7Ù̶‚ñF·õ-Fûp}h7¶í£§@;ÿ‚H+!Žõhrâ…{è…ýÅäš¿ehÇmy÷ tçã$d/4RÒzöXåyx\†‡Ä»&ñÍÅn"Ã?ô]G Nw7ãlgµÁl‰ø_kðÏImŠpê R«?×Êq1ĆX.+Ïó“­ãù$ëŠ*ÚŠát}Æ«™â:càzmëÈŸU¹Ú*Uys 7{˜5©¬¸œÕKãß›¶ÕKEôú“ÚÉÎϬÅÏÔK¥:«`zQ�—ÏWòe‡ø}Ë­„Ì{¹W3œ½Ì³. Cœ=®éz^)À]*áØzR¯­Õ‡ˆî7ãDæUÚ‹”ʵž–ãcóÀKsz|Vy^8Âú8»Æ LÙþÌf¶:gWÉÃÒLRàA©Œè %¸é�]ACz«Ñ\Ì |õ•R¯2´ÂAÅåûˆ=$£@Mra‚A­“!ñ4§’Ff§èçð²µhfdÆÜª’¾Î˜yŸ‚ÙÃONÝ®R™Ke•UæŒå>jáÿÊXîg¦ß5¦Ü) lÚ §øâ EŠŸf×M‚ø ),›$ßY® 0ÊÎÄgè°+c/å7eœú÷/kÌÅŸ¥¥[©ìýéücQ´V··"´`/•º®ÃÓì2Æ9&ìi3ÆÆŸiŽ`…Sn9<_ñœ[.ו'Ý˯ÊîŒÃwn:Sq²`ÑNƒt²\,ÊæR5‡KÂ?…¿6þj«÷˪jg*üX– O‚ÅT Rœ'ۃŔ·,ŠÅq¯V;îm S¶_E/fÚÙxŸ´¢ÇM¶W—ö£ó{(Ož©©VU³¡æ†V¬8�YšŠS“¥K Y!*.å¸Wê›—t^Ss„*ôCSó'§ßôšâ~³ÌRÿwªÆÓS6£ÇßKÇ¢qä0ŒÉ¡rLÏü,K¼=-A·ÒÑ/R­¼üÞÄo‰ð»Œ7Ùmö[ÈÒiÄnÚšv¡u¦·Î¬×ÏíxR€'Keb»-Ê+¶Z¥3:åfi嘋¬^/掲F•(ž,59ñݤ…Ó›<6CÀï, œÞ#¡:Ÿ»##’qmi់ŒKd‰*BIråSCÕÒ™JÌá¡ÊP¥ÓIU…¡JGßrw¢ÂP¥ƒÊ©Õz=•¡–žêÔÒц¶§F YÚÛ#ý n–öˆ½ž¢¶4—ZØ62rÅ?xŠúfi“ýgÙÜi.5iWî°Ís#Qi%ùŸ€Dj®uŠ»ã!>Òi.5íUv²~·n>CJÇqËÌ×ïö°æ±e©-»­ÅkbKk©˜{·wåæ«U:3)9qº¾‰ûÓ MÜÏg ­X"g+³‘ag¬Š±e‰ÝÕܵ+ U:;Ù¦-Ð-å”ëÉaîùSXIÃög]^ûðŸ-Ù¾üQÎ"§aÒ“0CNž‘OpTƒØ@ræM½ð©=ãÏ€ùÖ?€ˆñ—ãeX3o'?ø<bŠûb€»Ì7±ü½ÚÁО?eûòÉÿ«h,âÀ’ŠŽåû,Ɖkmí}j„û€·–ùÿ‹= o;8³#Çr±@:Pæ_å3¼8Â'A˜yäS3ó«ïSêf~wí(û}Ÿ8A —é´¿b¹IñuyV—¿´Ò§æà G3>ÃZØṵ̈8§§À«)ƒ¸^­S[üš|õ±Ö7óiþvÍ¢ÊÔó™SÉרønyšÅ»AärE/í)WÉdWÁ€˜x;AöÙŸSpÑ¿dŠ)Ž /¯þ›6°éµ¥ v#Û¦¡&^âszOüÌJò%o†GÅíIét7r*AÔëYà~tù¡è“_Jðrïÿþç¿ñÏŒžÑ�1žl¬t)J)ž<j"Ûù;•ƒtá«¡eâ-ñëâ¥2÷& åÑBRSê?Õ)U×ÇÛO¨æj õßÿ[†P§µg R­§W¾†~ØÚ~B>½î5õúñ3©£§W¾¦~Rß~B?½îµôVëˆÔÉÓ+ß¡^;Ù~B>½îêÇõg Rx,ñ©µïH¨3óºHHߨ…ô»~Ò?‘Ú…ô»~ÒïBúí¦Ô.¤ß…ô»þICúæ.¤ß…ô»þˆÔ.¤ß…ô»~Òo7¥v!ý.¤ß…ôOÒ·æ†ô@›.õ'Cú”n=Ü˾Ü+BŸ”¦…;„ø>&½É­ù|” ð5¶¾æ–Ã×Úrø·¾£-‡ïxËá;ÙrøN·¾´rîfœö9UNÕ÷–!^ç?ÉxEò?—hô[DaøŠI ;˜õP� `z6UXÚ–K+’±÷ÞíÆ¶£ ôa|æ"KuÖ!]›.ß ü¹t'W>Zn?åÌLª ¦¡Ì•MñôÜÄ@õ½óë·—M­íÕˆ­u€xŽ\4}{Ó}#fé#ñ÷¼3+Јö-²Œ¯n.B«Ïy¢…L (Õ¬žf…ØÊcA`™ñ…冴¼ƒª½%D;Ôˆë²P|K<bb ´ bú´' ƒ?¨ÏŪ`@w}æ*Ä5+ÄŽè^ÒT¢eŦ¶wžý©Õ')íÏ�\‡ø_K©X#õ�Xu¿P#ÔDu’ 02bgR›ö9rŒãÇéäá¾ë Ä~5ÜNms(ÿ̧¡o›à •IB¢Kh¼‚l©eßO|cwOÒˆ=ÞÙ¦üTš9pËÁ’�~%ytüÌÆCÿLFÀõ†~Ôà·ÇðNþÁï4{D!—ãòˆ¸Ëùá°Ly gJpšr>÷õ\Øc°ËøÍ¿è ưÁÃÃãiœš1<|û¼öºöõl�B°ZFù4¨6ÄñÙcüW³V¿N›­ë룣fí¸¡ЯøT�Xx *~ ð„[lÆt Òõr¹·ŒˆÝø)YÎóÅ 9&øãJ–«5sͰx Ùàclx–mðo3“ €fRóÎÏ´_)s@'FÚEbR̪c¢¤Š9µé€&ƒà:…xDp°o/Áªq¾gAøëMû@ëEÈy0zT hC˶5›±¯¨ò>u؃°{&õ(Þøg€Eq3]½±ÀóºÒ€X®Á|qcÉà+_»ð<Û2çÚÔǺ¦ˆ5Ç&”ö_�ØCÜ¡žÖ‰ÿö#Ëä0ôi‚kÑøm‡ÔÔðâ>aÕÜØ¤Œ Ðæ“ ˆ B$äøF@?�{i[aŽà«Ë†65AuÀ N9DJ Q=¿·) ¨ÆOÅXÝHÑ%ÆWa_Ñ\2FrC؈E>4uðI jE9a2ýa†Ä†¡ÄI&Ž'ÀÁ‰m³!G‹ÿÂÀæƒ#~¡c †ÕáW–ï-!ø­dxÀ9È ‘šlÓ¥ÂC˜c.ṳ́Èñæ] O†`7xÚ±Û·ùð̘gP\‹}]â•ïß¿} ‹Ò.B:à.§5"ßoèƒÒZ�äЃQ8�ÁŒE [¶…Ä$©ÜªËëMù Òó€ìº6X> vrÆ ‹ `ÀzåĤHWó#×EÑ%��è›ÍF´È²YåSÞSF³ðÈ[ÏêGÒJö,›rqÆéÚþ;Ò3š ë I¾Ð"Œ@Pœet3+Ó±%èÛ‡Po–ôÑJ!¶C}Ÿ¶»ÕNôºþø—‰ÑGŽÙ‘c FCZrüóƒÆ{øêBÿ£ôi»…a!Òý¯u‰T7ˆ‹F(œ¦¿,C¤¢`d Ÿ ˜ÒP×ÞD® ²  ëÜ£žn1‡PÍåÁD,0v S;bÆ1Ú\þ [Œ(ñ)޹(úIG _ÕU‡!µ¡Ø©(ÔÀÂ"˜ºvrD0jcRåšãå5õÖ¨vÂp=KàB()ÄÏHxãLbŒÑk†>±[³à±KÁàCB“Äý.xX ¬€xèotZïÒžr–\£ò|+67‰’øõ)«ÄÑs >ø<;2é䘘„N;q¾ü®³�ÆÖÞù¯™1{”poΣ€ 9‚›qi™àcæ`…ÑõqÌ"RÆ â³ô¹ˆ;5�À‚¼" Il{WF[ïÍ¥C..IJfŽ B+f">O¤âpiûo/.Ú/V]Ç'n�Z"4¹yÿ„+ê;NZE˜ý—½¦˼´Œ‹õUЛpOŠTbÀý˜ÕA¨$# ’‘c ÂÐ;«Vá»@ÿÒE—TER»Ê ûʽs¥æyr.’4xÀP�4%ƒRK¯é-Mž,æÁï?Õö6dÄF˜&ÃÌâ É)žâã㼤~2·iœio¯ïÚÚMLìYI~(8½ U¸o–É« ‰é‘~zz:ƒÖóòjÈhOŽ–M¬›3ë"ðcî¯×j­8§‰ßø÷~"AôÓE5q=›'8eÇïƒØt’J ÅL½ÕjžðŒ½yq}õúèêõÕááê3õò9x} 9xc:Ÿ©8K§ß¨+¯Æ"ë6&T½}CÅÛâHžî!ˆ¸8øf§f Ý&m}0q_Ì®Rc¡!•'"éàó�¹?ø{pÑÜRŠG""ýä=Ùá¶Õ]…˜¯ ~rq^P£iüÄ“B°Õœ‡Lhºžz£ØF÷&«øë÷»[ôö˜Ö3ì´bŽ­í�øbÅôùÀg„ Ä ¼D”èÐôE&Å|‚PË‘ñ€Äý`‡?þK´Zü0†.Ü„L+Üâé½TúY¸1ðô‡o ¬ë5ñÇÚðÀd³¹5#ò±óºr¢ˆ °üçú,Çb’n•KT*±Af°E¢z’#ª©(‹—ØËÓÌM.âÇBÖm†õkÂÇJ â|r<9´_\Óâ¦`Ìò«+@ðª­:buþÛC°Ž.å©I%òmUÚ 9‹Ë7âñzã¢çš^?;l5U°É! BeÒ倵ú” Ÿp±Ã&A J=æ÷ué¯õ+ÞÏ'4½4¦/L®…Pl°áÔr)1R¦ÉüÁ¶Gz<à×ùæ&è1w¬í!‡CC‚Îd3 6j%@ÄT©â€–BL¢Êµñ¹le.z{˜XÝ,ëÇe`\Mìr<œÆ^UÚä…[Éu‹êrŸ'‰*YT7ËðÅœ@¸æÌ’¨\ …w¼¢£E|±xÈ¥ÖÈ›±Àw€»ip‰ç婨zÝô";¡ãoöç‡Ã¡ùdÈ\t­8/ø³¬†ø™ã$îg¥VO¦•¾Jf'“Ç9y~S%Ï?Fù—ÈÑúrµËWÅ"™Œ¬´}æk>ÏfÅ"|ÜÌr“ß2Ë&]ö@ÍiÊPòTôdZ'”4qÿp}ѹ.ž‡Õ0§ÏÕê\\Þ®}œ:H˜GȪ¢uÁñf‘r¿È·õ¼ùŠו"a™ŠÔSé Jº›oÕ�÷߽בּ󷷅ۃΨ ÇfŒ®‘Åøô; Rù;Bå¢Ñˆ'Û0øÂøAu¾M™j}¹éî¹S-­ÛoO×eoÑÞÜ]·;w÷ÏœZ@¼×î|¸¸y§jàÅóRÎý³÷•4eîܸ¹»øð÷ E»VEA^öÕ„¾¸¸Cß/vˆë%=ÁþgÓr‚ϱ¡]ŸX¾zsýêoÛ".."½¦î—u^(Ÿë£Sñ/E'ÚÌ,¤ïtPQß2·T•ñRVFD~§‹«íº¢¤¸Åg˜§²½1„³ÉË~PΆêÓMçÍû1ïoV’ˆªsÒeIpqÛ¹þðϹ­Ð1"'?½S¦˜ ¡Þo‚J*+‰e¤±±p›i½™çý[³¥UuŠø°ŽöÎoÞ]]ÿ®8Jÿ2{Œ]Ùg¾Ås]ã5ß¿ÛÕT•Oí›w¿n“¾¥°}Ec¥°çdÙù3îÅ".»¨(ŽV¤‡d· kŠ™ó|xØ-=ÔG´·wmí[D#~rÓÇløFd[l!c¸É7&çVlHùÉ"\†ä9,rCÜÎÏ¿R~ Oà¥Bç4pÅé PûA§ü¨#.KÊóû?j¿!$AÒ9ö€;´ÅY×€óåL¬¯„'Mê0—ïV¦æä¾üÅoÎ&8˜Ì„&ª”ŽW]¾kO�ÆË‰‚Œy.wÅÆ+ˆo/ß·ÛŸß¼¿»ž½3·€È[3¬Ÿªîž=VÛ=ÛPr¾ºúþY¡xäßh”ßA«Ž‹òڲȔÚE{ºpí\™’;9„H®ogl£Ì6¦.%j’£ÆO4‘kç%nN窜oº ²þÅyÔ¹œÁãå©ß˜1ÓÓR!CuÁ²,mº˜üL:wzgÒt¾ä:àߣ:by’´‘íSJŽ÷¼òBÅgZÕ%\¨#v…„òœoe#Œ½JùyG\Ò˲<ßr8 S"@Ó@¨2¨*9´¡}”¥6 ¢,oö«JvÿxqÚ!(þ'Ì!äKÃN+Ð2z,ªBÈà±Ïøq$Q bB’`$ëC‰hÕ³‰WD"¦æÐ �†âYr9ŽCœ=ų¤EŽnÆ�‡C–ïà½Å§žùæ<Ÿ‡Ìx¼Ul »ƒk|«¹«]´ý»«Ë¢¤ |žàãSƒZéŽ2µ(“Á+hȾéïÐÌŸa ÜŸÆk¾ôù_²³UEÁ3ðQ‡?MðшwÝYâÈø†C2ÉçUvé°¤ÊvóÛrRA0-?ò½’‡ØH¶ØÌp`©Ì 6ø–i&'”±ª¸¸X£_º•/ÄÑz/©\²ÂR[ùNñ‹ä„`Äú–ðý'’ØÆª4+ÿÏÂy»ó”0úåb¥{Y“­<׃YýPµ¸ºÜ;¿­´|’ºíLÖyª±V‰m,›%á¿cõ¿uÓMÕ#DøÁÜ?gPå¥ß†=K [V»ò£ºæ÷ê" «å³Ç6~ßÚHŒ¤Öà3wþ® /¢U2„\vI´ípïü?ŠÔš¨ç›h@èE]Û2² h¹ßðóÁcŸ¤ÉMîÇü¸/B9ÖƒŒýoy¹1êkÿ,H þ)Ö4/w¿ëÙÂcñÊx¢`¥%++Š\;^øá�‹¼/Mo3ÁËËŠs˜Î̧Þƒ©ùø2”3‚$ýŒ7®cÁ,—&2¸e¼|lÅ«(xƒ‰|Ã\³OIJ4<u©(¯'«ÉÉü+OŠ…7^]“ò"s0õã<¡>«}Q\¥A[~¹O Þ½Â3{ §%pÜ},Ô‡–[Á’ǖ䞯u«®âÀ¨/”·7åÒð¤$ OÑú¢gV˜cŵîk.Ÿrš²øo³†«R™O•FUÞ„bÿ‰$å…“2µ !+8‡eò"Ef¼ê™©Âšù€Ï´ìãlŸ8Sù¢À\Ö}ýdîÊ9Ö£•4,8Å‘¹à…lÅYÏ&¨‰¶,1*´÷�«×dQ@9›oYùXÌ ñoÄš7VELÅnŽÄŸAöyvª ‹ÿ .|[N2oJ©o`}'+”%‰,’[‘±òð‰¡Ã3½ÁA\78Œ°à0/õKܯ¢Àpv†,6×}4˜Úù_c¾ÅgŒß^]¾’õ¯ä„,ÎÍ2’  ¿žhY´Z`žø… jÉ-i¼ÒÖHQ«ŠaŽFÕ„FáÖRèƒ›è ”óTU5,Î'Á„OKÿü†$)ƒ`ûúöúUG»ºiwnÞÁï/ßÂï}ï…öúÃû;Mà.MЧ}zsýáZÛß÷t¾ºñRã5ö^hï®4x(.âsùç‹ÚûW×´Ë¿kžŽ~;DétVÀ›ïž”àTtœßÿµUg˜ë­BËR2ŒM^RFT Å®#\h€¸0ö_ÝÑ´©”K€ÇõÛËÊo·—>±Ð# ±ðÐ^”|­fªögcE)l5œ‚/Û²?‹ªÛ_íűdŠ¿EbÏW–âgÚK*Q@T‹%ÒÅ"\ «#K(ÑUÄn"ÀÛð°<´ {ùƒL-Xî ;Ìc6ë´vd…ôçÕ ù†<à qùY¢Q2'¹)g²y ý”ûÒÉÉà#ŽÜyûÈÓ°J{¼7B;rxMZ’tùäa:â¤æ0.�óTÂPf«k bêYên…e[†œ¯87ãXKn:ånU #¯ʯŒ(@̹g͵’~,¹=‚ô[Ɉýe<Î °ó¾¸áá3‰kŒã_¸ð095o«W·¥ãrD†·â9‚tžñHešq¹ÄS—èî{Üï«n¦^” ¶ß_Ügëó Ç£~¢ÂåyüÂ’ƒÌñ…%ãéXȯarR7Ó$±‚Aý’JH¿L–lˆŽý)niÓX|g4ÎHø¾í¬RhrSÀŠ~‹ßÚ‚áÆ§¶œáŠ~©¬LNg]å”ãù,HN´ø*BvºØ-cê×1õ¤A°CfúíÊ{ÔLõ沑4«—é@ û|íšFÈïêéAUÊS<Î!ñÁ®b¦*¢¿RèË"b™¨£J¿t«A<Q‹Ÿ 1¤:½+-b:ô5žcRÝ=¹¾i´—�’Ò.xÔAþD‰G˜—Mo㽸7ÇñáþÕ.7ŸÕ¬yjÍ^å*>Úê°®a*à¦'Ssðºò°q _‰;V°úå�¬ÔÙIí¤&nKÕôR•Ùï%"x‹ŠØò*î“G†Vƒf|“O¼ý‘˜¦˜Ôˆ<ˆ/“ëº b±‹MxÄñó:Å‚àÂô ™IF:îÒ]VAÚ«n•Ã1 *u¬v­ÿz‘P¯Pë„–«!Æ_q¸$g.¸Êˆãoû8@ "X(FËùM•¬ºbD‹jf•_h[οHþoµä¥oâæ×‘{QÜX4[e°o&ô|ˆåMÕKZ‹‘Ÿ•«4æŸ÷”w".òÃünr¡Ö˜“ùÈ>ºIo¶ðê= ôëd³4J7^6åG†Hpm¯@øß¡c÷«Ù�¬kZ×ÜEŽ¥C¬W ñ>i÷sœ†Tå5Xú tì±Ú²Ê_«Ø¤0‚DàzžGOù¥xK+_ÌGZM^¢¸jZJ!“0OÏ ë<«*aªÖôc½‘§è G@ΔÒG°Yáäæ{~äX^ãíãm†Üh¢oË\ZÄlæU3h‚ûxŠ+î‰J Ô<¡§W|­Mq€c ¥·×­ ƒ{Ÿ=ª"!žÏŸZÿNªaßR:µ¦Øw=¹½”ѱ+0WJÕJ¨ÛH K›õûÁúhës¤XëÆ^[ ET.ªÚ*ŠÔÖCÈW¸l{’¨Ðì<Rì[L§ÄÖ¦an<•÷=qîŒâúŒ8_x†´+> DÅ"ªª'ö^ü�Œ:¾ê²Ž)ï]_ƒÜ  s§qì52V)vQ”ä2ݯSpTC5utËŒ°NŒU/ulU{_+¦ U L{WžwÃã-‹{¼Fôåâæ-%u8Ë”é¹ß¤[O³ßíç~7©#9¸,NäVMˆi. ß¼<ªÐ t‘©Ï·ÜuÎDxªr›VéšO@M_bŒ›(yáß ÄÎ œ´‹Oð‰;¹e±Ð6‡Ü=”@=±‘xäS¨ÿ¼‰ ik€Ù6·xt¨Ây)õ¨J¹ú´ÓÈâ =§4›‰{æ×iAÔÊ "Þª]ã(×èÜ?ÔñQƤÒ&?Nh`}™ì$­=¾[Zì âeYËÕ¬liR/¬hÍOì#<[Moï˜ï�—ÄÿŠ{Ú\þSïòŸ¿ôbÙx·Ÿâ‚A‹¶Ë}f7%K#) Se½žeÐ3l˜þ·é/“n‰¨ÈëÏÿPKI6å^~ ��ù&�PK���Æ~35������������ ���styles.xmlÍZM“Û¸½çW°´•Ü(‘Òx3Òz¼•¸jWyrÈØç-ˆ„$dA€€#i}_$H‘GšÝ’¶…n4º €>4zÅBΞ&é4™D˜e<'lû4ùþí—øqòó§¿|ä› Éð*çYU`¦b©ŽË:3¹²Â§I%ØŠ#I䊡Ë•ÊV¼ÄÌwZ…Ú+3”m1ÆÆv7Êao…jlg­Ûê‹ÖãG6Êaï\ ýØÎZ|vßð±’Æg¼(‘"JØoO“Råj6Ûï÷ÓýbÊÅv–.—Ë™‘Ö€³Z¯¬5Zy6ÃëÁä,¦3¯[`…ÆâÓº!$Vk,F»)tUùº͈×í€k²£¹a”Ûá]äãûÈþR»˜<ΞAhþzþÚpAcÇÒº-We‚”£§iµÃþœóªî`¨;O’‡™ýhïϪïQXêÙYõ Ѭö8/úœzé 4büªi:‰\ i¥­O>Gm8ä§ ÊpœãŒÊO-·êæÈþÖ>zš¼($^ŽÅšÓI<òZ¡Çް1¢‰"18üK+äÚñ¥=#XÉ¥þÿѾîFÐÂf%ñ3,8^—ì­2’£è1}g²?îìo¨äò§]+x7Ÿ9“œ^DàÔz/‰Ê`ñmÈç—ÆüÌ+A°ˆþƒ÷ƒ:#¦Z€G»Ð7KWý˜ÁAuôF�ÎÞ ®W4‚Ì9І7°ðÖ¡=ߢç—A·tÇpó(.nA÷ü=–íø ¬ZãOÁã²Ê`º¹}ôÙP®uí¶<ô(s¼AuE£·ì m*w$›x]÷;.lB ¹.Vr‡r¾Á>¤Þøð4I¦‹ pö!dqC„cY¢ аxÇù #ªUçg•_5ŒìTvÖ±VOT{l:·P˜Çž¨]lËÚ ¢2ˆw‰2 ýcEZ?F•âz É1·ªˆ–»:èÆZ`%£Trå%zßÖØt{šP«u‹„åX—ºü'ãAzŒP&C¤y)5O†a×ê÷Él*‰Á LGÕr((•¨`cØp‹H’ßi:/•i£ˆm+´…&ÌLCÆ+¦ÐáûKk&º_ …b¾·ó3àe¸N—Î’ôÙÓ(Ň‹µôÔf-«ËZkfÌBª}<9KpËîXî0ƒj™³˜¢¶«Ø`yš0‘-H $§ÊŠeª²÷ †æ Ô¸L:O–8'°ô˜$Î?¤ÍŠhÓ²g6Ëá îaØpoe—6ë‰Ò³oýq44×lêÉõïÇÓFØ'€.·.a¦\ö›Ÿ(••ÜuTnXæˆf"ŠC~Øüš ÍyM(HÀÀŠJ©ÙzëÀ±àûÎàÐÒY}¿a\ÆŠo±Úé#²^]—¬-,G"Ÿ &<Фx°PšesjïÈ'¿®y~ô]aE–ãF# ŃCBC}C÷à Q]ÊVJÀcVš¶5WJŸaMç jÜxÁ}ÿÆ(ÒÓ-Sa:… }®¼z¾Ó‡ùâüœkJ™¢™¢Ñ=:ÊKi2È®‚ïd¾‡&?œ$¶°äÈh½Ýßžtÿ·FT;>í'°ÓˆÒk¢Þ!Ì›ƒî¹ÕÍ+e¶DŠ_u J'C‘êD$ýð×&J{L¶;ˆöšÓ|8 ¦K ´½¼¸¿oƒÞµ‚éMæçƒ4¿¿ ÍÇéÁ ¶M÷€Â pÈycìº+ÈNÆI½É«cÛo½–Û¿=ú‹óÑ_Ü_ôWEÿº0ßÆÛ‚ôÊðk¼Æ»T›¹u÷‡t<òϨÔå;–'�U 7î×ͦ<´_›'(û@bŽÑ².ŸÄοŸ$Ã{øÀ)¥/é ñnþÆôÒ qŒ3ft„¿PZÁé]æCZQ>Sÿ"àÍí æ`ßú’—Q‹º:ï´†.‚üÂr|xGîcï,÷߉Èï—þYQŠí£Í@ ¬ZÔÑ©ra~±p_ˆÚ+ry¦xxW go÷Ú5ç ÔJË·ÔÏ_€¶‚YïÙã>×y­(Tå9s_b®a~HàÏcÒºbª€mÂÞ)ÚÔ%9%ù€ÊžäúmÕœû5ÜHÍåÏx?˜UÜÙˆ;jCy¤D"VÇ·ßëvup§WýÿãÉI–â2{D’¶Â=¿átÛƒ 'i]£é{9 Ø_ÓÆ-_-,qטåé] Ö‰uz㕨WºùÛì¸äºšâå‰@èªÉ".KzµæâÜZÈ03/È'Ò!30ûåö›•dš~p±=º)I`ï «"CÀ$ωÙpŸ¤Š?ŠaÀgW»ùF÷ž:ÈÌÆÆ}m¦Xv÷cvð܆o±þ|§k¿éÑuíº®Ðk­AÒÜ'ÓÅcên{†F‰k~§¸wŠëáNq}¸S\?Þ)®¿ß)®Ç;ŵ¼S\iòçk‹B´Œ+,õ¦¼!ÛÊÓ¢Z»ƒÅ†s¥÷OÝÑÁ>¿"ZiT®Ñw”z#Ê|÷e^Ã>¶žÑÏ…ÚžÿòMÏh<BÌò!€¤ 7¯=Ò èfð´d?]07þËeSôyÇi¼ ‹G'#,æ[Nƒï4Œµæó ];ƒM¨U¼ÀŸó¶mt„è¶* ²H'=:ßH\u>O¦K;/ع»°ùrúã™)ºAÀƒ*†Ê¦‚\¬¹€30Q'5ðÀ…˼¯Âž÷V×ó¡×æÎG–€qõltÁÖ|Œã$.½9ë (@ÓÇf¿äâ5†™}S·†õz­ƒ6P¬õª ü•T6Ú–¶ʸ: Íý}xüjU¿ýõ“Úa¤KÍY8Ó ñÔPüSª9Adm£Í5jK-vo)BÌ EÂw¬Ïú¿_ÿôPK<ÜÓ)›��ÿ.��PK�����Æ~35kþ=¬í��í�����meta.xml<?xml version="1.0" encoding="UTF-8"?> <office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:ooo="http://openoffice.org/2004/office" office:version="1.0"><office:meta><meta:generator>OpenOffice.org/2.0$Win32 OpenOffice.org_project/680m7$Build-9044</meta:generator><meta:initial-creator>Norman Barker</meta:initial-creator><meta:creation-date>2006-09-18T11:07:45</meta:creation-date><dc:creator>Norman Barker</dc:creator><dc:date>2006-09-19T16:54:13</dc:date><meta:printed-by>Norman Barker</meta:printed-by><meta:print-date>2006-09-19T16:45:59</meta:print-date><dc:language>en-US</dc:language><meta:editing-cycles>68</meta:editing-cycles><meta:editing-duration>PT14H33M11S</meta:editing-duration><meta:user-defined meta:name="Info 1"/><meta:user-defined meta:name="Info 2"/><meta:user-defined meta:name="Info 3"/><meta:user-defined meta:name="Info 4"/><meta:document-statistic meta:table-count="0" meta:image-count="2" meta:object-count="0" meta:page-count="6" meta:paragraph-count="139" meta:word-count="1250" meta:character-count="8879"/></office:meta></office:document-meta>PK���Æ~35���������������Thumbnails/thumbnail.pnguwuTз.* Ò]Št3À ""5tŒ00ˆ€ Ý HIw Ý ]CK ©Ä C))ÂÐ\î{o½?³Ö>{}ì³öZ{ïoŸ/Rç­ !#!‰šªâ»{ïroyø÷·S‡_MñÍ{Ϭ½lí-æšÁÍ i{=­iP"c›úû÷òÄÛ½°`¢»e%º}ê?Õia-“´õŸèx©M·Æµþ²Áq“?Xqܾùñš=d#NS R¨‹ùñYvë—õe)ÛËycìê$sAHzcl4[êËÆ¨ÌÝ~ëfN¦WJmËìéwaJ ©@Å~ÒgðGªŠ»8ÿ–*õ;w^pz"'d° Kp›Áã\ÿK“Fý—_ìþ¡\ö‰˜šÁçw?è,ÖLµýnÍáÇ$9…rl—Ûèb­LÏ¿hgžnýL…¡]ª©«ÚÚ.wÝÐÌ]ßy¹Óý·$7';àö¢• Ãn"gw#Óy|¶Úì)Áõ0W®­Äâg½³C 0×Û¬!ÁÎó?×§s@ç%&YBÙXÖ€k—B_y¦Æ‚žÙ*“TÄÑÀSÉPë»ó£ÕßLBÌPTís)×5UÔÝ1RèQ|“órâx„¯ðõaPØéÎÜã‡;6“âxº}³©Ú´Î]7gÝ?·"ÁyuaxÛè´u<:ÓIŸóß_‘ã3yµ˜t ZøYcD›üÁÑ`ÑZ^^Þ5ÊÉG+›Ø=)Ϙ[3J§×‚B hÈýò¢$×?Ãìó”Æäc+‡ÏÝ V÷“«-:EÀ並ëöUíâ×¹+sµ[/¹N„WÔì8'HÀdû]Âè1Ø �’rmŸŸZ¸‰¿)†Éõü\ö9@0y ßÑ™{>74¶ý‹]`¥fk2U@4¤¾ ã«é�(ÄÃH¸5ËãV¥¿®½â¦n k9•ì²0UÏ´òU·°]­„Õ=fñÌ3äöŒHŠÞ”9è8ÁÇŽK,ûŠN4©JkE;Îæû´¼è!QóêáG°*é5Žºõúd¡õ§åÑÛÍ:7ôAmýâŽòÚy2¼ >~ƒùËÏ gÜ9<)�ïjØ^ÈÉ­W˜<Ϩ]O•….âÉ¡5‹Ï.Üwu &¿äÐ]žÉHpÓÂûoSŒžEÞVŠxWÞ_ë‡îËŸúHÐRTÛÓ~Çd,Ò/·Šv ¦~:Ú“!êº&‰¦õʰ—;5dÅ#÷Ä\]¤µÍ3mç#Í:3U R¿Øþ…Ì›Ê]æß¤ÂÅ/í×2[7ÿ®{§ 'øÆ —FN&iOA±Ë]¯Gª6ÔïÜ÷Pp›ZçÎ5ó€Ì ·& c´C×Ç<!  Ÿô4Ÿ“YSÉÀ<û9‹öÕ·+Òä @°;HjVV»RÀ9¼8­#àeþ!¤%³ûUÿ¬nŽïñðî~ûi/ˆ0(‰ÎèÅz Š,‡™‡£¶ó±]À7½–¾ºž0(¶ï¡¶Ô^Ãa®wKª>@§Å2¨¶µï+Ùã&‚öèá"A-EUð³Ú4{c¡œã0…Ýᔡ%óƒc(ª®µÉhF]ŽñÇÖÿœÜZýbÎût£ÓÓÆFÚ¾‡=ëír¼8¡D˜O[YÌ»§Þ!7È«š? Xˆé¾yüë×j’ã‹»3cÚ 0 Їwä£}” »a^ÖIùÛa·KV)ý;Xí{�<ÆY¿Ï òPˆÑ †²G‹œ*8—…Ý»çô œÝ1"|£Ù9·i~Æ`¡¶ý¨“Óè£Ä ü‡Á­”GôF»JìNZ§÷Õ©‰±ñ™<BZ&R}ÁåýðÒÆûΠç뛈¶Éçc8Ù‹¤x8Û#¦¸Åû ç¤$/z±´L|ÿùζÿ˜ÂEÓùW ý„ %6âÉi|êÁhF„ÆVá6Ë;íÿÏdyõж9êcµÃ-׋¸ØÜ€i@ìâ—å°'¸ÄnY+–ŽÒØ7tŒÄ½µõÞ5é†$ùïŸþHÿÙ*«„ gnúôjj-�¼*ƒÈzÇ|á)}\,—¬ÌX…ôžU*GŒÏ½î•Ϻ˜`6#Ó„Y"#˜åج¿Ï‹ÍçÿÁIu–L—­“v·P¡?L,°ø;_Ù3£H–e]/ûÀ:{r)‡z=a’L[ǹj’««³=¤¸¾É¯–ágA_-Ë›Æ ‚æÀw·7¿ñD“;â²®¸÷¼ˆ“NpÂ4 h^}ðnÅö¢¤Å€©1�Ga°Ù³ &ÈH’Kz|$Íåp¥çûið‚«ÿ¹Õ€˜»´êÂW»&c�ô#sÞÕöÅ^ƒçH¹Œ–ýƒû‰µèšP(àgÔGóøV½”¾ ¤.MhoÒVn*é è n„ñ [~[d¢WË»J è*T°<™²¤Nììå‹TtÉû¤åFP½øÚÑR%Ex’ ”œKJ}öùtƬΉ»>Ì(ÒˆÒ3ôU}‚в"^éŸôi¨x£WÒ N cª”S ö ~^-³™å†_6å$U CÖ'èDE¤EÛ„@Géï#ßjý/îöá¡ Áàzò.ú:wŸ¬:Ç3UNåÇÂTT}ÈÂä$µ‘ßÌ“…Ô(D”’Ìæ{Îð÷ŽšOê{Î[ÝçÌP&éú¿ÑsîC¼ ¤Æú Å“ mât:j *¯4²MõÒ_½Yƒk,H|’wüð”h÷¼ìLþ8÷Ò>qìów[8¯föóÖŠMÎõÍÍÜ�–íw/Ú:¥ØsÝc›´E¥#SMKnÍØ™q¯O,{ïTõ 6¢-n³ÖxÁPíZ@¢®wìàZév]z5ÎqnC¦ºò¨YzC¾ÂD›z6Ïš—ìt5ï…)]£xÛñýÃ/ (€õE†äàÜ“J MíÕ]»²2ažŠ†”ÂvìÓ ù¢„ùí ¼Œãèþ¦¦æ£„ýŽ“ñë)V§$UÚ-¼U¨ŽÉ–‹)Ræo6"xª«ØÒ-[³ö.òR,ã¿›è’r©µ°Zas·ó ¥âqçéuíøƒ»@8ûAÓè‡ë-»Iò£·sÆZs†)ߨ’>UÆ‹eüâ¬Òž‡<¾/–=ŸG _DöˆeóHð¸[ö;{J—õ$} Gÿ£t_ë„9“ ¦ÚèóFk H/ðƒ~#âCtxEÖ“'}ª» Òž0rb¨þ1à%ýÆLxY´Ÿ£°ÿ,ë½[mä~´@ÝÝõÉÄI^OSR4¸’ôu±…Ô£‚±™Ù¬Éyš„ÁwW"F!WŸr|àFéâΟ†0Ž»ó ŒíkL@NROTÇ»6”+£©?s›Ý¸=k“ò`’gÙíú!ÚyæDÖ¹÷Éz¯8¥ŠÞ-»MÈ̾<ÐOa0Ìã#g&¤×[¾¯ä§�öS¾0iŠŽÞÞ1=¢À5̪6nt˜Q }S©Õ°ËœT53Uˆeƒ™1„×d׈ÅðþýÕì§+¡ðØië%Ú&êÓ²¯˜=Ç“åi7…ÎÊl&öTØyJ¤+¯øÉ{&—ühÍZú0·¹Ò ' ®XÁ¹¾Ï9x¸’FX2º†„ÊN›7þ¨nԌҋŠ8‹ú9g®’É”=?\vŠáiÞ£ˆù‡¬ãˆúÕ?3®F5„yÞ\çòæRÚ™‡@qCö^ÒŠ8+õ ÖS²ÑŽèdfƒ,¸+¡˜&'áÀfJH_]a‘Oƒ1PæØýcZ+;ÞÃuÓí`ÿ´ Pj@_º Jq¬‘×Xõ´ë*`Qƒ8¸ZD OVµÌ·¯>x™ƒðþÄš<é"Õ»RÒ}áq¹™¦èȯ×ë+lh’Ö ý$3#t=Ö¦iI'Hó°(ß~SÞ ¬Û*w«et|Ýë*PA«ñn%9<o­ ±bHO¥±ñíï:˜K^’”ìù:l˜#`�7E&ì~ÿÖ5ײRZ Je‡;¹G®'Ëhü:‡A–´œ–yú4Âà˜|Žq«ØOâ`+¯Qµ0$�àº7™bý©#œPÊïb=UÅÔ¬­9¼™úï îweèAþ«5~?ú«ocñöµ P×* ¡¶»Fë7GŠ×*k‡£"ºzfUM˜*‡ Ã˜RÆÚÊ•)¼.n0ME4ÃÜF_z¢ÚÌ4ºi ˆÂÂìrŠ;yгàÇî(L]ˆ€g: Ë$³¬wû�­ÍrõÃÓßÚw�æoxQ/U†;Äø‰Úð4Ï ²úýÓíô¿¹ÌV"™¯UEcœ»²#³¯šXþÎ�@'¨qÿ?­ çüÂÉpÖ_¤6ŽÄfËõô;ÇÒðMŠÅSñÌL45X·‚Ñ`GfÌ&2HT»0þ†Ô²úÅ•S^Ùˆìp¥M¯6Õù{¦Šš[*­¸W"bÑñ~¬:й†8<fL¼ûؤþŠÀ¢AšËåÜN õ(‘†M%©Añ•ոхäÇY—Ñ_¶HŒˆÜ~dVò0F`°Í*K y·yÚ£-SgL1 Ñaâ[GI˜uî'ãJÐ=Me’Øñ¤lÝÃ@(2$„ØÓÿïvmŒ0Zš¾«;i)4غ¨»ÿÑõ1±{„»†èÆ&<µSY)\Rx$Äð ð“µÑ”¨#<u’¸Íúšx÷„ƒþäQ4ÝŸ@NÛ7ëä—ž29ÞÛeµÊlƒÔV¡Ü´¢ù’÷»‘ŠïA†‰qèÓ§À†„66IÍM`¾O“úé‚e}©ÄóXeŬY)]ì%˜1ÆHyš“­2á{÷½Ú<öí$Ÿã¬ q†Tz=y‘ô…Õ†YIÕEâÛÐl@&«Ž?vÑÓ‰\ÉD/Ö¼†øø†bP-PŽ!†}ENg ¶ad¹†™¢c+_¼±caÜ;Ü;SK«u|þVHÖ¦mÂT¤\y¢ã™‡1ôõÖ³^"ÏÍïÚ•í¼™èew2²I·ãIaNƒo=2ÓÒá] nèéž% â{=å“`F¨Dðø µøôq@ å'·$!À–´6 ŽI~Ε‰ª:†C¬c˜~Õ Î@i´›nó“²ó•OäL‘õ¾W{Í!‘¯§52¡„šÈ`H&ç^©Sâ7Z¸wÇ6#ÈzÇ»A^^âÒ”½¿P;º±éÖ‡—f|Ì^35¡)¹qv�~.ÀÇ(hwãÚ}bB#·üoc1K([V?xåØ;œäàÞ¡=ƒHŽgR«ÌqÈ/‰W'‰á½]!2pÖ­I*:öŒ3¦FEëÀ'quO_!4·‘'î§ÜZ °S¢n9ÞÜ|ûy­lrCˆ½Š„ëüvF1m…FO¶ÇŸ”ý"r¤áì¸Iû„ê¤Ä OKMÝTçžN%ç~~eB ÷L¬WEë•Jƒõ¡¾& ¢ü‚óN´FøEV„Æ‹>÷|ßèÓð0ƒæ<Ç Tôf$Ò.È:¨ËlRDrUæK©÷È6ƒT©CÈùÀËu{;ÆIåšS^ÒRƒìòý wÒ©nƒ‘\ð²y%wïÛ)¢ ¯”ª8ÇšöèHCêò]9à¶3áGc#ZMrW·³«î¨f?\þñÅ µˆ&ÎÚ0ÞÐWgàÐ]¿Ç©û@cì-§Âj™“uEmˆ c¡QU°#ôÄÛçJ'¨Ç5{XwöÌv7Á±•ì;ó–^‚©çï0ûˆ õÞy(é{©®¾ù4­¤h%Ëí2§§è_Ïlª«é‰t-?E‹c¨šh4Ä£MíÄûëâªP»h¾ú¡ÃèD+^ó½Cbj‚Šçó»ïÔ…óÊœ»×*¬$°"YP5TÞ_[Ù7ef¹¼gLÉÛik•9ìñ›ï¿ù£]dvë·÷¥;¥QPäØb «¶¤ümÓ“Õ„:d¶Ð¿mþ׫j3\&}66Ù²Ü L`ô¶¯�Ü8M´Ù`Aœì{ ì5Q9ÌÓYÓR�ˆ+,tx*-ÂSy¿ëîöÁóôvg©«-êÊ‘¦uI.gò×ë '|9<"Ù0æÄ2Пnΰ®ÕX©^jÇ iàØÇþûçºøãŽJ‰cõ‡¹Û-DpߣÃÓ¤c‡ß·÷E$m†<ï*£*bTãôÀ©BöC Ã^CÂá1 ¼TWÈ#\ÌÈ|È,iCÔwÍW›s(þÂrKðÒˆm•· Š’8–­ *�ÊôQº$×À+õñ:¦É G{‡ÜȯŽ}¸,×å»§o¹yŸÅ‘ÜbèDþf°Õ/tÆ­&»µÅ\ ‰š üàKÐÜÅ%F"…sÒuNe­]ÓŽg+!¶¯›9©©³µÆG /Øy ~?Jã´9Œt.{ξN‚E®‹ÃÉ’u›8ÏžsõǬ/êʨ‡"ñsÒ¹£5Žÿd©½,×ùŽ»Z8ç�mç…­)«îÊÿJ8a©‘þI:Ÿ 1…ÌQèoZ»}¨%8ÍçË=F/àê sÙ‹p9H ½u¤oký¸V8=ÂôÙ ÷ðÔß© MÜ® .”Ó²hLñ#5ÐüãM1á“MQ¨ ?cÕ°âi) À ‹7`á?I[¸7c w4?÷,6òÛÇdSŠEµk!I‡ITÚáSþ…&H?î™àù ›ëD-ÂÖßüOõÓ“W~‚žü‰ N´ÅFe$ ÿPj9*Ÿ·™È”®É>xŸO äà¨fk§W3~e·`˜ñ2XRWüzmÑ #+˜8¶uÑ·ØOëî(M‘Ð#LµE‚\yY@‡ª‚´^íÒÔG +™ÙYSãa™öÌxÄô·¨6Ý<(~•»Rz«ÏÔï’º!gr·öd~1Éó‰¯V €ÏÎy«gD¤%e{ðP’(9>À žKtæº=M6ݳ17+0.j¨-À¶?ú¦ò˹ïî…ÊaÛ <ÁB‰½)¶téâí<×ð–úr[ ÌWÍg„êé)é²êKGç+¼¶Œ»“Àtx™59ÌðേjÝÖœoOŒ "þÕ _ß] înMåºn¯Ò»ëþî«$T/<; ¤=?xãÓôñÆÏjþºÂ²Bå[Ž«YÏÒÒ0O³Ußayé7&;ê^!*û9‰&ää²uƒÏ &¯ŸV«g­7ë'HŸ’C‘ýûæÛÊeÁ÷yhFŠƒög»�n;Ú®\¢Þì §å[WYÐÆësÎê¡«]çDlî¹¢ûVV©›„•3Õ_:>.¶MоŒ…¦þµ¡eybâ­¨O?PXiênïÛõ±0)æq 8êºÂ?¡ó}ô¯(¿R8¼ôߋw¾¾@Î3Dœ>Báí#¹ìþ™IÒΕAÖ�iŸ?‘\ø#ß:ý%™’< åT™‚`ý ß@š­Æ<’Û ãF#¥B¨ÖJ·µWÿÍÄ{\•8fìÏÖ‰¿a#† ²þ¡èÃÕÿ&óÿ3ì¾{Ðéï¨1ƒµÂ¹?jJo«å-ƒÿ PKE(°��?��PK���Æ~35������������ ���settings.xmlÝZ[oâ8~ß_x]u¸v·E-#'@J !@§£y1É!dqìÈv˜_¿v€ª¥0ÃÞ•6„$öw.>7Ÿpóy‘Ü p2z›/}*æs@=æ‡4¸Í†­‹«üçúo7l: =¨ùÌK" òB€”jˆÈ©éTÔVoó §5†E(jG jÒ«±èfZííèZFlugAB:¿ÍϤŒk…Bš¦ŸÒÊ'ƃBéúúº=Ý õ†Á¡¤V£ß’bŒ½ÒVÌdÄÊÅbµ°ºÎçÖL¾SM}£‡øõ›5Õé"”iÝäÖ·5k·yE²öBúªµü®yïçŒÕxÄYœß<‘ËX= ©Ì×KåëËjñ¦ðæpè.Lå.ìaŸB_Îvá–/¯.˧a0˜ídºT½*]îÎX:�_Ø3L[&ŒÀ4_—<ãh´©ÅY*àù°}Љ8þ"ÂñEH}X€ÿQW»-,›£|ƒ/ÓxÛßbUH®Ì7_ׯ|ÂJî3¼R±\9vŸ«T®«•ëcaE8!pvOÉP¸v†<Øç%ÚOƒ¶˜”,ÚíÕÊåŸÇc,*¨m{›1~¼š5h {’ñݰ¥â‘ÀmáO‚ßâêÆþ¼ãæ[çÜ÷xíﻨärx:ZÝH8–*¹ý“¼„|¿9be nŒ=Î-û*ÌÈèÜ Û1è¸pù¿—Hí»Šyøâ1‰&À"Ì ÔºªzÅ>–»¢ÿÆOPT3Šå²Íä­€2­ ©Ä€¶2@*ÛÔ¤ºTæÊkÛ,Š9]~=6dŠs•�:l²Wq'ˆ±ZñW ¢˜¨ßˆdbôq \rA&Û)åT”Ïg®7ªHaBY™:Ë2ãuy×çLª¸­ ê–ÛT°€?ªVH1_æ ²œ…Aüj(‘leE†"¬ÍTºaÄ�ÿ<ðùVÏõ èÿ^(-¼yìŒGBŽšƒÆ×æÌi73¯<^ºÑ¸Øn8éC#uŸÆ?Ðxøe’xëeRN5ô ¡&Z¢öæÚBhæªsÓW_¥Aoœ6‘,ïk«3tÇãnwl5Ò¢=²­‡ç¯Ä›ÇÄ·QQÉž¶[zj9®‡lÇnT¼;¯~bû‡Óþ–á_)¢mKßWg[u†Î’YÏ(8F#ëØî¼å 2žÔ¬?ÈÓ__Vô<¨6c^Ù´æ[xwgáêÿx´„K¢»òR¥áf}s¬Š2*4 ¬tWDÏŽ•ü×lþ+Ç«;ZííG¶£1»Ýїǹ½=¥ŠRÉB ê[Ó¹h1® */!Yn*­"J™Ì(ì/?¬¢º ûÀ>£äC:=OÝ¡÷ëmÆeÙÖb"c)ZÍ…JY“®’ÈȶÅ1YŽð–øüð-½“1Y4¸øÆ«~hÚ„ %­&rGØ“ƺ•«÷O&ŠÎ¶¸WëDˆi?¡žLL¹!"a@•ñº’Å}&Ÿ‘9¡f$aŒÄëî QOù6øO\ å-²ÌJxz´ÎÕ2i£ÖÅ>»,áÞ‡X³êP[7Ø#“6Že¡ÁqÚ›ü%zTï °ŸE•KïLlžÖ¥ðãÇFѦ›úýûÀmî/ú ûû—~®«tÈ; sÕb±˜sÕ6Ä ¤[x±Ÿök¡6 "ôa!Ÿ8Ž{T­†²bSªÊz—¦º¢‹'ðXLìú¨ÌA–ÜÑ;=3¾íÂ!éJµi<¿Ò^EÚX@lF¦Ìé @jÑ”\IIÔbF–jÕ;áLÄàÿSúš…ž‰‚…–f4:lbcê1SÞ‡v›E¦þŽnÜ)¯C²…ï$B†Ó¥vñÊÙ¦ &<7é¦*–©Õß$e3†½Î�ºwª_PëŠ/Y²ms›t0Sð‚ƒ`$Ñ<-`ø&Û´ëÖc�öæg ÝÛ©?·ýË2žuA‘½ì0ÓõRÛ;o®CÖ1rï{‡?öý%£þ7PK%OÍè��Ô!��PK���Æ~35���������������META-INF/manifest.xmlµ–Ánã @ïý ‹»M§ikÅ©ÚMrî¡û2v0 ¢úï§jÓݪf×ø€@‚÷†‹‡×Net^]³ëbÂ2ÔÂì¤nköóe“ß±‡åÕ¢-ôT½W²8Nûf͂ӕ/}¥¡C_‘¨ŒE½3"t¨©ú½5˜–WÙ ÜH…yìèúì$Äœz‹5k•@1N~лâè*>+ ÂWb§ÑMP*·@ûšqÆ/’§ü0º‘mpÇ ü”{ ~ . „@…±iÁ¹aŠ1‹É]I2@˜n 6nïLëЧ[é!ôdp2F%ƒËZôüIRÖ'u\Èþó¼ðAOd!> ¾Ã({–‚BÜH|:9~·CQN®ßZ÷ål½žÏËÉí´ð‡.q6+ïŽæòq½ÚÌW›ÕÍÍøÆÿX®­Ôàúó|½ ” {¼P1\|8@ς㦠;a¿æzêúѱŒv¼ìC·Õ •çô^-¬ndž›X$Н”Ô.ø_”å/PK¹H‰Ÿ��ß��PK������Æ~35^Æ2 '���'��������������������mimetypePK������Æ~35�������������������������M���Configurations2/statusbar/PK����Æ~35�����������'�������������…���Configurations2/accelerator/current.xmlPK������Æ~35�������������������������Ü���Configurations2/floater/PK������Æ~35���������������������������Configurations2/popupmenu/PK������Æ~35�������������������������J��Configurations2/progressbar/PK������Æ~35�������������������������„��Configurations2/menubar/PK������Æ~35�������������������������º��Configurations2/toolbar/PK������Æ~35�������������������������ð��Configurations2/images/Bitmaps/PK����Æ~35!ÌÒl ����-�������������-��Pictures/200000070000301000000934EE663072.svmPK����Æ~35â*c¢y��ƒ��-�������������ô��Pictures/2000000700004438000033AEDF6DFD55.svmPK����Æ~35uDÉ>`���¢��� �������������ñ‰��layout-cachePK����Æ~35I6å^~ ��ù&� �������������‹Š��content.xmlPK����Æ~35<ÜÓ)›��ÿ.�� �������������B«��styles.xmlPK������Æ~35kþ=¬í��í���������������´��meta.xmlPK����Æ~35E(°��?���������������(¹��Thumbnails/thumbnail.pngPK����Æ~35%OÍè��Ô!�� �������������ŠÏ��settings.xmlPK����Æ~35¹H‰Ÿ��ß���������������¬Õ��META-INF/manifest.xmlPK������Þ��|×��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/.project����������������������������������������������������������0000644�0000000�0000000�00000000725�10504201720�016766� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>PostGISTutorial</name> <comment></comment> <projects> </projects> <buildSpec> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> </buildSpec> <natures> <nature>org.jboss.ide.eclipse.ejb3.wizards.core.EJB3ProjectNature</nature> <nature>org.eclipse.jdt.core.javanature</nature> </natures> </projectDescription> �������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/.classpath��������������������������������������������������������0000644�0000000�0000000�00000001305�10504201720�017275� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.jboss.ide.eclipse.jdt.aop.core.classpath.AOP_15_CONTAINER"/> <classpathentry kind="con" path="org.jboss.ide.eclipse.jdt.ejb3.wizards.core.classpath.EJB3_CONTAINER/JBoss-4.0.4.GA"/> <classpathentry kind="lib" path="C:/jboss-4.0.4.GA/server/default/lib/postgis_1.1.0.jar"/> <classpathentry kind="lib" path="C:/jboss-4.0.4.GA/client/jbossws-client.jar"/> <classpathentry kind="lib" path="C:/jboss-4.0.4.GA/client/jboss-jaxrpc.jar"/> <classpathentry kind="output" path="bin"/> </classpath> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/��������������������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�016116� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/����������������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�016705� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/��������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�020375� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/ejb/����������������������������������������������0000755�0000000�0000000�00000000000�12317530606�021135� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/ejb/mdb/������������������������������������������0000755�0000000�0000000�00000000000�12317530606�021677� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/ejb/mdb/IngestMDB.java����������������������������0000644�0000000�0000000�00000005767�11722777314�024345� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * IngestMDB.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: IngestMDB.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.ejb.mdb; import java.util.Date; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageListener; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.postgis.Point; import org.postgis.ejb.PersonEntity; @MessageDriven(activationConfig={ @ActivationConfigProperty( propertyName="destinationType", propertyValue="javax.jms.Queue"), @ActivationConfigProperty( propertyName="destination", propertyValue="queue/ingestQueue"), @ActivationConfigProperty( propertyName="messageSelector", propertyValue="MessageFormat ='Person'"), @ActivationConfigProperty( propertyName="acknowledgeMode", propertyValue="Auto-acknowledge") }) /** * implements a listener interface to ingest people data */ public class IngestMDB implements MessageListener { public static final String NAME = "NAME"; public static final String SURNAME = "SURNAME"; public static final String LATITUDE = "LAT"; public static final String LONGITUDE = "LON"; @PersistenceContext(unitName="People") private EntityManager entityManager; /** * Implements a message listener for Person ingest requests * @see javax.jms.MessageListener#onMessage(javax.jms.Message) */ public void onMessage(Message msg) { if (msg instanceof MapMessage) { try { MapMessage m = (MapMessage)msg; String name = m.getString(IngestMDB.NAME); String surname = m.getString(IngestMDB.SURNAME); Double lat = m.getDouble(IngestMDB.LATITUDE); Double lon = m.getDouble(IngestMDB.LONGITUDE); PersonEntity person = new PersonEntity(); person.setName(name); person.setSurname(surname); person.setLocation(new Point(lon, lat)); person.setDate(new Date()); entityManager.persist(person); // for tutorial info System.out.println("INGESTED " + name + " " + surname + " into PostGIS"); } catch (JMSException e) { e.printStackTrace(); } } } } ���������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/ejb/PersonEntity.java�����������������������������0000644�0000000�0000000�00000005022�11722777314�024452� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PersonEntity.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PersonEntity.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.ejb; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.hibernate.annotations.Type; import org.postgis.Geometry; @Entity @Table(name="people") @NamedQuery(name="findPerson", query="SELECT DISTINCT OBJECT(p) FROM PersonEntity p WHERE ((p.name = :name) AND (p.surname = :surname)) ORDER BY p.date") public class PersonEntity { private long id; private String name; private String surname; private Geometry location; private Date date; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") public long getId() { return id; } public void setId(long id) { this.id = id; } @Type(type = "org.postgis.hibernate.GeometryType") @Column(name="location", columnDefinition="Geometry") public Geometry getLocation() { return location; } public void setLocation(Geometry location) { this.location = location; } @Column(name="name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name="surname") public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } @Column(name="ingested") @Temporal(TemporalType.TIMESTAMP) public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/ejb/UserBeanRemote.java���������������������������0000644�0000000�0000000�00000002422�11722777314�024670� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * UserBeanRemote.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: UserBeanRemote.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.ejb; import java.rmi.RemoteException; import javax.ejb.Remote; import javax.jws.WebParam; @Remote public interface UserBeanRemote { public void ingest(String name, String surname, double lat, double lon) throws RemoteException; public String[] findPerson(String name, String surname) throws RemoteException; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/ejb/UserBean.java���������������������������������0000644�0000000�0000000�00000007476�11722777314�023532� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * UserBean.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: UserBean.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.ejb; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.annotation.Resource; import javax.annotation.security.RunAs; import javax.ejb.EJBException; import javax.ejb.Stateless; import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.jboss.annotation.security.SecurityDomain; @Stateless @WebService( name = "EndpointInterface", targetNamespace = "http://org.postgis/ejb/UserBean", serviceName = "PeopleFinder") @SOAPBinding(style = SOAPBinding.Style.RPC) public class UserBean implements UserBeanRemote{ @PersistenceContext(unitName="People") private EntityManager entityManager; @Resource(mappedName = "java:/ConnectionFactory") private QueueConnectionFactory connectionFactory; @Resource(mappedName = "queue/ingestQueue") private Queue queue; @WebMethod public void ingest(@WebParam(name = "name") String name,@WebParam(name = "surname") String surname,@WebParam(name = "lat") double lat, @WebParam(name = "lon") double lon){ // place message on a queue try { QueueConnection qConn = connectionFactory.createQueueConnection(); QueueSession qSession = qConn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); QueueSender qSender = qSession.createSender(queue); // create a message MapMessage message = qSession.createMapMessage(); message.setStringProperty("MessageFormat", "Person"); message.setString("NAME", name); message.setString("SURNAME", surname); message.setDouble("LAT", lat); message.setDouble("LON", lon); qSender.send(message); qSession.close(); qConn.close(); } catch (JMSException e) { throw new EJBException(e.getMessage()); } } @WebMethod @WebResult(name="positions") public String[] findPerson(@WebParam(name = "name") String name, @WebParam(name = "surname") String surname) { Query query = entityManager.createNamedQuery("findPerson"); query.setParameter("name", name); query.setParameter("surname", surname); List list = query.getResultList(); if (list != null) { Iterator itr = list.iterator(); ArrayList<String> resultList = new ArrayList<String>(); while (itr.hasNext()) { PersonEntity person = (PersonEntity) itr.next(); resultList.add(person.getLocation().getValue() + "," + person.getDate() + "\r\n"); } String[] result = (String[])(resultList.toArray(new String[resultList.size()])); return result; } else { return null; } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/hibernate/����������������������������������������0000755�0000000�0000000�00000000000�12315456223�022336� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/hibernate/WithinExpression.java�������������������0000644�0000000�0000000�00000005442�11722777314�026540� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * WithinExpression.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: WithinExpression.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.hibernate; import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.EntityMode; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.criterion.CriteriaQuery; import org.hibernate.criterion.Criterion; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.function.StandardSQLFunction; import org.hibernate.engine.TypedValue; import org.postgis.Geometry; /** * @author nbarker * */ public class WithinExpression implements Criterion{ private static final long serialVersionUID = 1L; private String propertyName; private Geometry geom; public WithinExpression(String propertyName, Geometry geom) { this.propertyName = propertyName; this.geom = geom; } public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { return new TypedValue[]{new TypedValue(Hibernate.custom(GeometryType.class), geom, EntityMode.POJO)}; } public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { Dialect dialect = criteriaQuery.getFactory().getDialect(); String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName); if (columns.length != 1) throw new HibernateException("\"within\" may only be used with single-column properties"); if ( dialect instanceof PostGISDialect) { StandardSQLFunction function = (StandardSQLFunction)dialect.getFunctions().get(PostGISDialect.NAMESPACE + "within"); List args = new ArrayList(); args.add(columns[0]); args.add("?"); return function.render(args, criteriaQuery.getFactory()); } else { throw new HibernateException("\"within\" may only be used with a spatial hibernate dialect"); } } public String toString() { return propertyName + " within " + geom; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/hibernate/ContainsExpression.java�����������������0000644�0000000�0000000�00000005462�11722777314�027056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ContainsExpression.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: ContainsExpression.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.hibernate; import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.EntityMode; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.criterion.CriteriaQuery; import org.hibernate.criterion.Criterion; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.function.StandardSQLFunction; import org.hibernate.engine.TypedValue; import org.postgis.Geometry; /** * @author nbarker * */ public class ContainsExpression implements Criterion{ private static final long serialVersionUID = 1L; private String propertyName; private Geometry geom; public ContainsExpression(String propertyName, Geometry geom) { this.propertyName = propertyName; this.geom = geom; } public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { return new TypedValue[]{new TypedValue(Hibernate.custom(GeometryType.class), geom, EntityMode.POJO)}; } public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { Dialect dialect = criteriaQuery.getFactory().getDialect(); String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName); if (columns.length != 1) throw new HibernateException("\"contains\" may only be used with single-column properties"); if ( dialect instanceof PostGISDialect) { StandardSQLFunction function = (StandardSQLFunction)dialect.getFunctions().get(PostGISDialect.NAMESPACE + "contains"); List args = new ArrayList(); args.add(columns[0]); args.add("?"); return function.render(args, criteriaQuery.getFactory()); } else { throw new HibernateException("\"contains\" may only be used with a spatial hibernate dialect"); } } public String toString() { return propertyName + " contains " + geom; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/hibernate/GeometryType.java�����������������������0000644�0000000�0000000�00000010301�11722777314�025641� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GeometryType.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: GeometryType.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.hibernate; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.Serializable; import java.sql.Blob; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import org.hibernate.HibernateException; import org.hibernate.usertype.UserType; import java.io.InputStream; import org.postgis.Geometry; import org.postgis.binary.BinaryParser; import org.postgis.binary.BinaryWriter; /** * @author nbarker $date 16/8/06 */ public class GeometryType implements UserType { private static final int[] SQL_TYPES = { Types.BLOB }; /** * @see org.hibernate.usertype.UserType#deepCopy(java.lang.Object) */ public Object deepCopy(Object value) throws HibernateException { return value; } /** * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) */ public boolean equals(Object x, Object y) throws HibernateException { if (x == y) { return true; } else if (x == null || y == null) { return false; } else { return x.equals(y); } } /** * @see org.hibernate.usertype.UserType#hashCode(java.lang.Object) */ public int hashCode(Object arg0) throws HibernateException { // TODO Auto-generated method stub return 0; } /** * @see org.hibernate.usertype.UserType#isMutable() */ public boolean isMutable() { return false; } /**) * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], java.lang.Object) */ public Object nullSafeGet(ResultSet resultSet, String[] names, Object owner) throws HibernateException, SQLException { Geometry result = null; String geom = resultSet.getString(names[0]); if(geom != null ) { BinaryParser parser = new BinaryParser(); result = parser.parse(geom); } return result; } /** * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int) */ public void nullSafeSet(PreparedStatement statement, Object value, int index) throws HibernateException, SQLException { if (value == null) { statement.setBytes(index, null); } else { BinaryWriter bw = new BinaryWriter(); byte[] bytes = bw.writeBinary((Geometry)value); statement.setBytes(index, bytes); } } /* (non-Javadoc) * @see org.hibernate.usertype.UserType#replace(java.lang.Object, java.lang.Object, java.lang.Object) */ public Object replace(Object original, Object target, Object owner) throws HibernateException { return original; } /* (non-Javadoc) * @see org.hibernate.usertype.UserType#returnedClass() */ public Class returnedClass() { return Geometry.class; } /** * @see org.hibernate.usertype.UserType#sqlTypes() */ public int[] sqlTypes() { return GeometryType.SQL_TYPES; } /** * @see org.hibernate.usertype.UserType#assemble(java.io.Serializable, java.lang.Object) */ public Object assemble(Serializable cached, Object owner) throws HibernateException { return cached; } /** * @see org.hibernate.usertype.UserType#disassemble(java.lang.Object) */ public Serializable disassemble(Object value) throws HibernateException { return (Serializable)value; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/hibernate/PostGISDialect.java���������������������0000644�0000000�0000000�00000011734�11722777314�025775� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGISDialect.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: PostGISDialect.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.hibernate; import java.sql.Types; import org.hibernate.Hibernate; import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.dialect.function.StandardSQLFunction; import org.postgis.hibernate.GeometryType; /** * @author nbarker * */ public class PostGISDialect extends PostgreSQLDialect{ public static String NAMESPACE = "spatial."; public PostGISDialect() { super(); registerColumnType(Types.BLOB, "geometry"); registerFunction( PostGISDialect.NAMESPACE + "dimension", new StandardSQLFunction("dimension", Hibernate.INTEGER)); registerFunction( PostGISDialect.NAMESPACE + "geometrytype", new StandardSQLFunction("geometrytype", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "srid", new StandardSQLFunction("srid", Hibernate.INTEGER)); registerFunction( PostGISDialect.NAMESPACE + "envelope", new StandardSQLFunction("envelope", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "astext", new StandardSQLFunction("astext", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "asbinary", new StandardSQLFunction("asbinary", Hibernate.BINARY)); registerFunction( PostGISDialect.NAMESPACE + "isempty", new StandardSQLFunction("isempty", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "issimple", new StandardSQLFunction("issimple", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "boundary", new StandardSQLFunction("boundary", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "equals", new StandardSQLFunction("equals", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "disjoint", new StandardSQLFunction("disjoint", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "intersects", new StandardSQLFunction("intersects", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "touches", new StandardSQLFunction("touches", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "crosses", new StandardSQLFunction("crosses", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "within", new StandardSQLFunction("within", Hibernate.BOOLEAN)); registerFunction( PostGISDialect.NAMESPACE + "contains", new StandardSQLFunction("contains", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "overlaps", new StandardSQLFunction("overlaps", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "relate", new StandardSQLFunction("relate", Hibernate.STRING)); registerFunction( PostGISDialect.NAMESPACE + "distance", new StandardSQLFunction("distance", Hibernate.DOUBLE)); registerFunction( PostGISDialect.NAMESPACE + "buffer", new StandardSQLFunction("buffer", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "convexhull", new StandardSQLFunction("convexhull", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "intersection", new StandardSQLFunction("intersection", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "union", new StandardSQLFunction("geomunion", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "difference", new StandardSQLFunction("difference", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "symdifference", new StandardSQLFunction("symdifference", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "numgeometries", new StandardSQLFunction("numgeometries", Hibernate.custom(GeometryType.class))); registerFunction( PostGISDialect.NAMESPACE + "geometryn", new StandardSQLFunction("geometryn", Hibernate.INTEGER)); registerFunction( PostGISDialect.NAMESPACE + "x", new StandardSQLFunction("x", Hibernate.DOUBLE)); registerFunction( PostGISDialect.NAMESPACE + "y", new StandardSQLFunction("y", Hibernate.DOUBLE)); registerFunction( PostGISDialect.NAMESPACE + "geometryfromewtk", new StandardSQLFunction("geometryfromewtk", Hibernate.custom(GeometryType.class))); } } ������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/org/postgis/hibernate/IntersectsExpression.java���������������0000644�0000000�0000000�00000005502�11722777314�027416� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * IntersectsExpression.java * * PostGIS extension for PostgreSQL JDBC driver - EJB3 Tutorial * * (C) 2006 Norman Barker <norman.barker@gmail.com> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * * $Id: IntersectsExpression.java 9324 2012-02-27 22:08:12Z pramsey $ */ package org.postgis.hibernate; import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.EntityMode; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.criterion.CriteriaQuery; import org.hibernate.criterion.Criterion; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.function.StandardSQLFunction; import org.hibernate.engine.TypedValue; import org.postgis.Geometry; /** * @author nbarker * */ public class IntersectsExpression implements Criterion{ private static final long serialVersionUID = 1L; private String propertyName; private Geometry geom; public IntersectsExpression(String propertyName, Geometry geom) { this.propertyName = propertyName; this.geom = geom; } public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { return new TypedValue[]{new TypedValue(Hibernate.custom(GeometryType.class), geom, EntityMode.POJO)}; } public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { Dialect dialect = criteriaQuery.getFactory().getDialect(); String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName); if (columns.length != 1) throw new HibernateException("\"intersects\" may only be used with single-column properties"); if ( dialect instanceof PostGISDialect) { StandardSQLFunction function = (StandardSQLFunction)dialect.getFunctions().get(PostGISDialect.NAMESPACE + "intersects"); List args = new ArrayList(); args.add(columns[0]); args.add("?"); return function.render(args, criteriaQuery.getFactory()); } else { throw new HibernateException("\"intersects\" may only be used with a spatial hibernate dialect"); } } public String toString() { return propertyName + " intersects " + geom; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/META-INF/�����������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017256� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/META-INF/persistence.xml��������������������������������������0000644�0000000�0000000�00000000210�11722777314�022325� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<persistence> <persistence-unit name="People"> <jta-data-source>java:/GeoDataDS</jta-data-source> </persistence-unit> </persistence>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb3/src/jndi.properties�����������������������������������������������0000644�0000000�0000000�00000000255�11722777314�021172� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost:1099 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015326� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/build.xml���������������������������������������������������������0000644�0000000�0000000�00000022421�11722777314�017160� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <project name="postgis-ejb2-poc" default="clean" basedir="."> <description>Using PostGIS Geometry Types with EJB2 - Proof of Concept</description> <!-- ENVIROMENT VARIABLES --> <property environment="env"/> <!-- JBOSS PROPERTIES --> <property name="jboss.home" value="${env.JBOSS_HOME}"/> <property name="jboss.server.config" value="default"/> <property name="jboss.server.lib" value="${jboss.home}/server/default/lib"/> <property name="jboss.config.dir" value="${jboss.home}/server/default/conf"/> <property name="jboss.deploy.dir" value="${jboss.home}/server/default/deploy"/> <!-- REGULAR DIRECTORIES --> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="distro.dir" value="distro"/> <property name="resources.dir" value="resources"/> <property name="lib.dir" value="lib"/> <property name="compiletime.lib.dir" value="${lib.dir}/compiletimelib"/> <property name="common.jar.dir" value="common"/> <property name="common.lib.dir" value="${lib.dir}/commonlib"/> <property name="merge.dir" value="merge"/> <property name="ejb.jar.dir" value="ejbjars"/> <property name="javadoc.dir" value="javadoc"/> <!-- GENERATED DIRECTORIES --> <property name="gen.src.dir" value="gensrc"/> <property name="generated.dir" value="generated"/> <property name="ejb.deployment.dir" value="${generated.dir}/ejbdeploy"/> <!-- WHERE TO DEPLOY THE FINISHED EAR FILE --> <property name="deploy.path" value="${jboss.home}/server/${jboss.server.config}/deploy"/> <!-- WHERE XDOCLET JARS ARE --> <property name="xdoclet.lib.dir" value="${lib.dir}/xdocletlib"/> <!-- PATH DEFINITION --> <path id="classpath"> <fileset dir="${lib.dir}" includes="*.jar"/> <fileset dir="${compiletime.lib.dir}" includes="*.jar"/> <fileset dir="${common.lib.dir}" includes="*.jar"/> <fileset dir="${xdoclet.lib.dir}" includes="*.jar"/> <fileset dir="${jboss.server.lib}" includes="*.jar"/> <fileset dir="${jboss.home}/client" includes="**/*.jar"/> <pathelement location="${resources.dir}/jndi"/> <pathelement location="${build.dir}"/> </path> <!-- LOAD USER DEFINED PROPERTIES --> <!-- You can add your variables and/or properties in this file --> <property file="${resources.dir}/build.properties" /> <!-- DATABASE RELATED PROPERTIES --> <property name="datasource.name" value="postgis-ejb2-ds"/> <property name="datasource.file.name" value="postgis-ejb2-ds.xml"/> <property name="database.connection.port" value="5432"/> <property name="database.driver" value="org.postgresql.Driver"/> <property name="database.connection.url" value="jdbc:postgresql://${database.host}:${database.connection.port}/${database.name}"/> <!-- IMPORT RELATED BUILD FILES --> <import file="${basedir}/prepare-jboss.xml" /> <target name="clean" description="Delete all temporary directories and files created in the build."> <echo message="Delete all temporary directories and files created in the build."/> <delete dir="${gen.src.dir}"/> <delete dir="${ejb.deployment.dir}"/> <delete dir="${ejb.jar.dir}"/> <delete dir="${common.jar.dir}"/> <delete dir="${build.dir}"/> <delete dir="${distro.dir}"/> <delete dir="${generated.dir}"/> <delete dir="${javadoc.dir}"/> <delete> <fileset dir="${basedir}" includes="**/*.bak"/> </delete> </target> <target name="deploy" description="Deploy the application into JBOSS." depends="build-ear"> <echo message="Deploy EAR file."/> <copy file="${distro.dir}/${ant.project.name}.ear" todir="${deploy.path}"/> </target> <target name="undeploy" description="Undeploy the Application." > <echo message="Undeploy EAR file."/> <delete file="${deploy.path}/${ant.project.name}.ear" /> </target> <target name="generate-ejb"> <echo message="Generate files with XDoclet."/> <taskdef name="ejbdoclet" classname="xdoclet.modules.ejb.EjbDocletTask" classpathref="classpath"/> <!-- Generate EJB "stuff" --> <ejbdoclet destdir="${gen.src.dir}" mergeDir="${merge.dir}" ejbSpec="2.1"> <packageSubstitution packages="ejb" substituteWith="interfaces"/> <fileset dir="${src.dir}"> <include name="**/*Bean.java" /> <include name="**/*Service.java" /> </fileset> <!-- Generate a deployment descriptor file, including all beans processed. --> <deploymentdescriptor destdir="${ejb.deployment.dir}"/> <!-- Generate JBOSS specific files --> <jboss destdir="${ejb.deployment.dir}" version="4.0" /> <!-- Generate all of the home and logical interfaces, unless told otherwise in the meta-information. --> <homeinterface/> <remoteinterface/> <localinterface/> <localhomeinterface/> <!-- Generate a value object if the bean has a @ejb.value-object tag.--> <valueobject> <packageSubstitution packages="ejb" substituteWith="value"/> </valueobject> <!-- Generate a utility object for each EJB. --> <utilobject includeGUID="true" cacheHomes="true" kind="physical"> <packageSubstitution packages="ejb" substituteWith="util"/> </utilobject> <!-- Generate complete entity and session classes (including ejbXXX() methods) based on the implementation class. --> <entitybmp/> <entitycmp/> <session/> <entitypk> <packageSubstitution packages="ejb" substituteWith="pk"/> </entitypk> <dao pattern="{0}Dao"> <packageSubstitution packages="ejb" substituteWith="dao"/> </dao> </ejbdoclet> </target> <target name="build-common-jar" > <mkdir dir="${common.jar.dir}"/> <jar destfile="${common.jar.dir}/common.jar"> <fileset dir="${common.lib.dir}" includes="*.jar"/> </jar> </target> <target name="build-ear" depends="build-ejb-jar,build-common-jar" description="Build .ear file and put it into distro dir."> <mkdir dir="${distro.dir}"/> <ear destfile="${distro.dir}/${ant.project.name}.ear" appxml="${resources.dir}/application.xml"> <fileset dir="${ejb.jar.dir}" includes="*.jar"/> <fileset dir="${common.jar.dir}" includes="*.jar"/> </ear> </target> <target name="build-ejb-jar" depends="compile" > <mkdir dir="${ejb.jar.dir}"/> <jar jarfile="${ejb.jar.dir}/ejb.jar"> <fileset dir="${build.dir}"> <include name="**/ejb/*.class"/> <include name="**/exception/*.class"/> <include name="**/util/*.class"/> <include name="**/dao/*.class"/> <include name="**/value/*.class"/> <include name="**/interfaces/*.class"/> <exclude name="**/client/*.class"/> </fileset> <metainf dir="${ejb.deployment.dir}"> <include name="ejb-jar.xml"/> <include name="jboss.xml"/> <include name="jbosscmp-jdbc.xml"/> </metainf> </jar> </target> <target name="compile" depends="clean,generate-ejb" description="Compile EJB source code."> <echo message="Compile source code."/> <mkdir dir="${build.dir}"/> <javac debug="on" deprecation="on" optimize="on" encoding="iso-8859-1" listfiles="no" destdir="${build.dir}" classpathref="classpath"> <src path="${gen.src.dir};${src.dir}"/> <exclude name="**/client/*.java"/> </javac> </target> <target name="compile-client" depends="compile" description="Compile Client source code."> <echo message="Compile Client source code."/> <delete> <fileset dir="${build.dir}" includes="**/client/*.*"/> </delete> <mkdir dir="${build.dir}"/> <javac debug="on" deprecation="on" optimize="on" encoding="iso-8859-1" listfiles="no" destdir="${build.dir}" classpathref="classpath"> <src path="${gen.src.dir};${src.dir}"/> <include name="**/client/*.java"/> </javac> </target> <target name="run-client" description="Execute Client." depends="compile-client"> <java classname="com.geodetix.geo.client.Client" dir="." fork="true" classpathref="classpath" /> </target> <target name="javadoc" depends="compile" description="Create Project API documentation."> <delete dir="${javadoc.dir}" /> <mkdir dir="${javadoc.dir}"/> <javadoc destdir="${javadoc.dir}" sourcepath="${gen.src.dir};${src.dir}"> <classpath refid="classpath"/> <packageset dir="${gen.src.dir}" defaultexcludes="yes"> <include name="**"/> <exclude name="**/ejb/**"/> </packageset> <packageset dir="${src.dir}" defaultexcludes="yes"> <include name="**/exception/**"/> <include name="**/client/**"/> <include name="**/dao/**"/> <exclude name="**/ejb/**"/> </packageset> <doctitle><![CDATA[<h1>Using PostGIS Geometry Types with EJB2 <br> Proof of Concept</h1>]]></doctitle> <bottom><![CDATA[<i>Copyright © 2006 <a href="http://www.geodetix.it" target="_new">Geodetix S.r.l.</a> All Rights Reserved.</i>]]></bottom> </javadoc> </target> </project> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/COPYING_LGPL������������������������������������������������������0000644�0000000�0000000�00000063640�11722777314�017220� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/COPYING�����������������������������������������������������������0000644�0000000�0000000�00000043130�11722777314�016372� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) 19yy <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/lib/��������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016074� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/lib/xdocletlib/���������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�020225� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/lib/commonlib/����������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�020053� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/lib/compiletimelib/�����������������������������������������������0000755�0000000�0000000�00000000000�12315456223�021072� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/prepare-jboss.xml�������������������������������������������������0000644�0000000�0000000�00000002573�11722777314�020643� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <project basedir="."> <!-- PROPERTY DEFINITIONS --> <property name="tmp.dir" value="tmp"/> <target name="install-DataSource" description="Copy DataSource definition file into JBOSS deploy dir." > <echo message="Copy DataSource definition file into JBOSS deploy dir"/> <copy file="${resources.dir}/${datasource.file.name}" todir="${tmp.dir}"/> <mkdir dir="${tmp.dir}"/> <replace file="${tmp.dir}/${datasource.file.name}"> <replacefilter token="@datasource.name@" value="${datasource.name}"/> <replacefilter token="@database.connection.url@" value="${database.connection.url}"/> <replacefilter token="@database.driver@" value="${database.driver}"/> <replacefilter token="@database.login@" value="${database.login}"/> <replacefilter token="@database.password@" value="${database.password}"/> </replace> <copy file="${tmp.dir}/${datasource.file.name}" todir="${jboss.deploy.dir}"/> <delete dir="${tmp.dir}" /> </target> <target name="install-JDBC-driver" description="Copy Postgresql JDBC Driver into JBOSS deploy dir." > <echo message="Postgresql JDBC Driver into JBOSS deploy dir"/> <copy todir="${jboss.deploy.dir}"> <fileset dir="${compiletime.lib.dir}"> <include name="postgres*.jar"/> </fileset> </copy> </target> </project> �������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/CHANGES�����������������������������������������������������������0000644�0000000�0000000�00000000140�10475250150�016310� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS-EJB2-POC 1.0 2006/08/29 - Initial release! - EJB 2.x support - XDoclet code generation ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/resources/��������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017340� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/resources/application.xml�����������������������������������������0000644�0000000�0000000�00000000726�11722777314�022402� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'> <application> <display-name>postgis-ejb2-poc</display-name> <description>Using PostGIS Geometry Types with EJB2 - Proof of Concept</description> <module> <ejb>ejb.jar</ejb> </module> <module> <java>common.jar</java> </module> </application> ������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/resources/build.properties����������������������������������������0000644�0000000�0000000�00000000640�11722777314�022565� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# You can change these properties to fit your environment. # This should be the only file to modify. # Note that you should NOT leave spaces after a property value # Name of the created database database.name=ejb2poc # User owner of the database tables database.login=CHANGEIT # Password for the db user database.password=CHANGEIT # IP or hostname of the machine running the database server database.host=127.0.0.1 ������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/resources/postgis-ejb2-ds.xml�������������������������������������0000644�0000000�0000000�00000001137�11722777314�023010� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!-- ================================================== --> <!-- Datasource config for Postgres --> <!-- DO NOT EDIT, it is a template configuration file! --> <!-- ================================================== --> <datasources> <local-tx-datasource> <jndi-name>@datasource.name@</jndi-name> <connection-url>@database.connection.url@</connection-url> <driver-class>@database.driver@</driver-class> <user-name>@database.login@</user-name> <password>@database.password@</password> </local-tx-datasource> </datasources>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/resources/jndi/���������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020264� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/resources/jndi/jndi.properties������������������������������������0000644�0000000�0000000�00000000250�11722777314�023333� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/README������������������������������������������������������������0000644�0000000�0000000�00000013565�11722777314�016230� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Using PostGIS Geometry Types with EJB2 -- Proof of Concept ---------------------------------------------------------- Copyright (C) 2006 by the Geodetix s.r.l. Company. See http://www.geodetix.it/ for further information. Version 1.0.0 (2006/08/29) Table of Contents ----------------- 0. Licensing 1. Introduction 2. Directory Contents 3. Software Requirements 4. Installation 5. Running 6. Code Details 0. Licensing ------------ The "Using PostGIS Geometry Types with EJB2 -- Proof of Concept" software is a short collection of examples related to the use of PostGIS Java API with the EJB 2.x technology. Copyright (C) 2006 by the Geodetix s.r.l. Company. See http://www.geodetix.it/ for further information. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1. Introduction --------------- Our software is a simple proof-of-concept application illustrating how the PostGIS provided Java geometric types could be integrated with a set of Enterprise Java Bean 2.x components. To achieve such a goal, an attribute of type org.postgis.Geometry has been added to a BMP (Bean managed Persistence) Entity Bean. Furthermore, by using the DAO (Data Access Object) Pattern, the persistence code has been clearly separated from the business logic. Not to add further complexity, some proper programming behaviours were omitted. For example the use of PostGIS geometric types directly inside the Entity Bean code could be avoided by using a WKT compliant string attribute. Another issue is about security: table creational methods exposed in the com.geodetix.geo.ejb.GeometryBean home interface should be protected by a proper role-base security policy, to avoid normal users deleting database tables. Nevertheless our application, even if quite simple, still holds a lot of generality and some of the implemented patterns or components are readily usable in real-world applications. 2. Directory Contents --------------------- ./ Build scripts (build.*), README and licensing information ./src Java source packages and files ./resources EJB specific configuration files ./lib JAR libraries needed to compile and run 3. Software Requirements ------------------------ We here list all third-party libraries with their versions tested to work with the application. PostGIS JDBC driver version 1.1.3 http://www.postgis.org/ PostgreSQL JDBC driver version 8.1-404 jdbc3 http://jdbc.postgresql.org/ XDoclet lib version 1.2.3 http://xdoclet.sourceforge.net Apache ANT version 1.6.5 http://ant.apache.org/ JBOSS Application Server version 4.0.4.GA-Patch1 http://www.jboss.org/ Note that our tool is application server agnostic and could be easily ported to any EJB 2.x compliant Container by modifying the provided deployment ant file which is, in turn, written for the JBoss Application Server. 4. Installation --------------- After downloading (and compiling, if necessary) all of the required software, follow these steps: - copy the PostGIS driver (postgis_1.1.3.jar) into the ./lib/commonlib directory - copy the PostgreSQL driver (postgresql-8.1-404.jdbc3.jar) into the ./lib/compiletimelib directory - copy the XDoclet libraries (contained in xdoclet-lib-1.2.3.tgz) into the ./lib/xdocletlib directory - install Apache ANT (follow the installation istructions provided with the tool) - install the JBoss Application Server - make sure that your JBOSS_HOME environment variable correctly points to the JBoss installation directory (i.e. /opt/jboss-4.0.4.GA) - create a new PostGIS database according to what specified in the ./resources/build.properties with the "database.name", "database.login", "database.password" properties (eventually change them to fit your needs). 5. Running ---------- Start the JBoss application server with the provided scripts (run.bat or run.sh). From the main application directory (./) execute these commands: > ant install-JDBC-driver This command installs the PostgreSQL driver into JBoss > ant install-DataSource This command installs the DataSource Connector into JBoss > ant javadoc This command generates the application API documentation into the ./javadoc directory (use index.html to start). > ant deploy Installs the application into JBoss > ant run-client Allows to test the installed application 6. Code Details --------------- The main components made available in the application are: - GeometryBean.java It is an entity bean containing a geometrical attribute of org.postgis.Geometry type which could contain every geometrical type (i.e. POINT, LINESTRING, etc.). The user can choose wether to create a NON-OpenGIS or an OpenGIS-compliant bean. The first ones can contain different geometric types in the same table with undefined SRID (-1), while the second ones can only contain object of the same type and SRID in one table; - PostgisGeometryDaoIml.java A DAO (Data Access Object) implementing persistence operations for the GeometryBean EJB in a PostGIS database; - GeometryFacadeBean.java A stateless session bean implementing the interface between the geometric entity beans and the client applications; - Client.java It is a simple client executing some tests thus illustrating the use of the provided API. Further informations could be gathered from the source code and by reading the javadoc API documentation. �������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/��������������������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�016115� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/����������������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�016673� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/�������������������������������������������������0000755�0000000�0000000�00000000000�12315456223�020503� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/���������������������������������������������0000755�0000000�0000000�00000000000�12315456223�021255� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/dao/�����������������������������������������0000755�0000000�0000000�00000000000�12317530606�022020� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/dao/PostGisGeometryDAOImpl.java��������������0000644�0000000�0000000�00000040253�11722777314�027151� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGisGeometryDAOImpl.java * * Using PostGIS Geometry Types with EJB2 - Proof of Concept * * Copyright 2006, Geodetix S.r.l. (http://www.geodetix.it) * and individual contributors as indicated by the @authors tag. * * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * */ package com.geodetix.geo.dao; import org.apache.commons.logging.*; import org.postgis.*; import java.sql.*; import java.util.*; import javax.ejb.*; import javax.naming.*; import javax.sql.*; import java.io.*; /** * * PostGis DAO Implementation for * {@link com.geodetix.geo.ejb.GeometryBean} BMP Persistence. * * @author <a href="mailto:antonio.pace@geodetix.it">antonio.pace</a> * */ public class PostGisGeometryDAOImpl implements PostGisGeometryDAO { private DataSource dataSource; private Context jndiCntx; /** * Creates a new instance of PostGisPointDAO. */ public PostGisGeometryDAOImpl() {} /** Initializes the bean. */ public void init() { try { jndiCntx = new InitialContext(); dataSource = (DataSource) jndiCntx.lookup(PostGisGeometryDAO.DATASOURCE_NAME); } catch (NamingException ne) { throw new EJBException(ne); } } /* =========== Create Methods ============ */ /** * PostGIS implementation of the * {@link com.geodetix.geo.ejb.GeometryBean#ejbCreate(org.postgis.Geometry, java.lang.String)} * method. * * @return the primary key of the persisted bean. * @param ejb the bean to persist. * @throws javax.ejb.CreateException launched if an EJB creation error is encountered. * @throws javax.ejb.EJBException launched if a generic EJB error is encountered. */ public java.lang.Integer create(com.geodetix.geo.ejb.GeometryBean ejb) throws javax.ejb.CreateException, javax.ejb.EJBException { PreparedStatement pstm = null; Connection con = null; try { con = this.dataSource.getConnection(); pstm = con.prepareStatement(PostGisGeometryDAO.EJB_CREATE_STATEMENT); pstm.setInt(1, ejb.getId()); pstm.setObject(2, new PGgeometry((Geometry)ejb.getGeometry())); pstm.setString(3,ejb.getDescription()); if (pstm.executeUpdate() != 1) { throw new CreateException( "Failed to add EJB to database"); } return ejb.getId(); } catch (SQLException se) { throw new EJBException(se); } finally { try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } /* ============ Finder Methods ============== */ /** * PostGIS implementation of the * {@link com.geodetix.geo.interfaces.GeometryLocalHome#findByPrimaryKey(java.lang.Integer)} * method * * * @return the found bean's prymary key. * @param primaryKey primary key of searching bean. * @throws javax.ejb.FinderException launched if an error occours during the search operation. */ public java.lang.Integer findByPrimaryKey(java.lang.Integer primaryKey) throws javax.ejb.FinderException { PreparedStatement pstm = null; Connection con = null; ResultSet result = null; try { con = this.dataSource.getConnection(); pstm = con.prepareStatement(PostGisGeometryDAO.FIND_BY_PRIMARY_KEY_STATEMENT); pstm.setInt(1, primaryKey.intValue()); result = pstm.executeQuery(); if (!result.next()) { throw new ObjectNotFoundException( "Cannot find Geometry Bean with id = " + primaryKey); } } catch (SQLException se) { throw new EJBException(se); } finally { try { if (result != null) { result.close(); } } catch (Exception e) {} try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } return primaryKey; } /** * PostGIS implementation of the * {@link com.geodetix.geo.interfaces.GeometryLocalHome#findByPolygon(org.postgis.Polygon)} * method * * @return a collection of bean's primary key beeing found. * @param polygon the {@link org.postgis.Polygon} to search in. * @throws javax.ejb.FinderException launched if an error occours during the search operation. */ public java.util.Collection findByPolygon(org.postgis.Polygon polygon) throws javax.ejb.FinderException { PreparedStatement pstm = null; Connection con = null; ResultSet result = null; try { con = this.dataSource.getConnection(); pstm = con.prepareStatement(PostGisGeometryDAO.FIND_BY_POLYGON_STATEMENT); pstm.setObject(1, new PGgeometry(polygon)); result = pstm.executeQuery(); Vector keys = new Vector(); while (result.next()) { keys.addElement(result.getObject("id")); } return keys; } catch (SQLException se) { throw new EJBException(se); } finally { try { if (result != null) { result.close(); } } catch (Exception e) {} try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } /* =========== Bean's Life Cycle Methods ============= */ /** * PostGIS implementation of the entity bean's life cycle method * <code>ejbLoad()</code>. * * @param pk the primary key of the bean to load. * @param ejb the ejb whose data must be loaded. * @throws javax.ejb.EJBException launched if a generic EJB error is encountered. */ public void load(java.lang.Integer pk, com.geodetix.geo.ejb.GeometryBean ejb) throws javax.ejb.EJBException { PreparedStatement pstm = null; Connection con = null; ResultSet result = null; try { con = this.dataSource.getConnection(); pstm = con.prepareStatement(PostGisGeometryDAO.EJB_LOAD_STATEMENT); pstm.setInt(1, pk.intValue()); result = pstm.executeQuery(); if (result.next()) { ejb.setId(pk); ejb.setGeometry(((PGgeometry) result.getObject("geometry")).getGeometry()); ejb.setDescription((String) result.getString("description")); } else { throw new EJBException("ejbLoad unable to load EJB."); } } catch (SQLException se) { throw new EJBException(se); } finally { try { if (result != null) { result.close(); } } catch (Exception e) {} try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } /** * PostGIS implementation of the entity bean's lifecicle method * <code>ejbStore()</code>. * * @param ejb the ejb whose data must be stored. * @throws javax.ejb.EJBException launched if a generic EJB error is encountered. */ public void store(com.geodetix.geo.ejb.GeometryBean ejb) throws javax.ejb.EJBException { PreparedStatement pstm = null; Connection con = null; try { con = this.dataSource.getConnection(); pstm = con.prepareStatement(PostGisGeometryDAO.EJB_STORE_STATEMENT); pstm.setObject(1, new PGgeometry(ejb.getGeometry())); pstm.setString(2,ejb.getDescription()); pstm.setInt(3, ejb.getId().intValue()); if (pstm.executeUpdate() != 1) { throw new EJBException("ejbStore unable to update EJB."); } } catch (SQLException se) { throw new EJBException(se); } finally { try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } /** * PostGIS implementation of the entity bean's lifecicle method * <code>ejbRemove()</code>. * * * @param pk primary key of the bean that must be removed . * @throws javax.ejb.RemoveException launched if an error during * EJB remove operation is encountered. * @throws javax.ejb.EJBException launched if a generic EJB error is encountered. */ public void remove(java.lang.Integer pk) throws javax.ejb.RemoveException, javax.ejb.EJBException { PreparedStatement pstm = null; Connection con = null; try { con = this.dataSource.getConnection(); pstm = con.prepareStatement(PostGisGeometryDAO.EJB_REMOVE_STATEMENT); pstm.setInt(1, pk.intValue()); if (pstm.executeUpdate() != 1) { throw new EJBException("ejbRemove unable to remove EJB."); } } catch (SQLException se) { throw new EJBException(se); } finally { try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } /* =========== Home Interface Utility Methods ============ */ /** * PostGIS implementation of the * {@link com.geodetix.geo.interfaces.GeometryLocalHome#makeDbTable(java.lang.String, int, int)} * method creating a NON-OpenGis compliant table in the PostGIS database. * The table will contain the geometry EJBs. */ public void makeDbTable() { PreparedStatement pstm = null; Connection con = null; try { con = this.dataSource.getConnection(); System.out.println("Creating non-OpenGIG Bean table... "); pstm = con.prepareStatement(PostGisGeometryDAO.HOME_CREATE_NON_OPENGIS_TABLE_STATEMENT); pstm.execute(); System.out.println("...done!"); } catch (SQLException e) { throw new EJBException(e); } finally { try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } /** * PostGIS implementation of the * {@link com.geodetix.geo.interfaces.GeometryLocalHome#makeDbTable(java.lang.String, int, int)} * method creating an OpenGIS compliant table in the PostGIS database. * The table will contain the geometry EJBs. * * @param gemetryType the string that rapresent a valid PostGIS * geometry type (i.e.: POINT, LINESTRING, POLYGON etc.). * @param srid the SRID of the geometry. * @param geometryDimension the dimension of the geometry. */ public void makeDbTable(String gemetryType, int srid, int geometryDimension) { PreparedStatement pstm = null; Connection con = null; try { con = this.dataSource.getConnection(); System.out.println("Creating OpenGIS Bean table..."); pstm = con.prepareStatement(PostGisGeometryDAO.HOME_CREATE_OPENGIS_TABLE_STATEMENT); pstm.execute(); pstm = con.prepareStatement(PostGisGeometryDAO.ADD_OPEN_GIS_GEOMETRY_COLUMN_STATEMENT); pstm.setInt(1,srid); pstm.setString(2,gemetryType); pstm.setInt(3,geometryDimension); pstm.execute(); System.out.println("...done!"); } catch (SQLException e) { throw new EJBException(e); } finally { try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } /** * PostGIS implementation of the * {@link com.geodetix.geo.interfaces.GeometryLocalHome#dropDbTable()} * method removing the table related to the EJBs. */ public void dropDbTable() { PreparedStatement pstm = null; Connection con = null; try { con = this.dataSource.getConnection(); System.out.println("Dropping Bean Table... "); pstm = con.prepareStatement(PostGisGeometryDAO.DROP_TABLE_STATEMENT); pstm.execute(); System.out.println("...done!"); } catch (SQLException e) { throw new EJBException(e); } finally { try { if (pstm != null) { pstm.close(); } } catch (Exception e) {} try { if (con != null) { con.close(); } } catch (Exception e) {} } } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/dao/PostGisGeometryDAO.java������������������0000644�0000000�0000000�00000012622�11722777314�026326� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGisGeometryDAO.java * * Using PostGIS Geometry Types with EJB2 - Proof of Concept * * Copyright 2006, Geodetix S.r.l. (http://www.geodetix.it) * and individual contributors as indicated by the @authors tag. * * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * */ package com.geodetix.geo.dao; /** * This is the DAO (Data Access Object) interface customized for * the PostGIS database which extends the XDoclet's auto-generated * GeometryDao interface and contains all of the SQL query statements. * * @author <a href="mailto:antonio.pace@geodetix.it">Antonio Pace</a> * */ public interface PostGisGeometryDAO extends GeometryDao { /* ========== Constants Definition ============ */ /** DataSource Lookup String */ public static final String DATASOURCE_NAME = "java:/postgis-ejb2-ds"; /* ========== SQL Queries Definition ============ */ /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.ejb.GeometryBean#ejbCreate(org.postgis.Geometry, java.lang.String)} * is called. */ public static final String EJB_CREATE_STATEMENT = "INSERT INTO geometries (id,geometry,description) VALUES (?,?,?)"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.interfaces.GeometryLocalHome#findByPrimaryKey(java.lang.Integer)} * is called. */ public static final String FIND_BY_PRIMARY_KEY_STATEMENT = "SELECT id FROM geometries WHERE id = ?"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.interfaces.GeometryLocalHome#findByPolygon(org.postgis.Polygon)} * is called. */ public static final String FIND_BY_POLYGON_STATEMENT = "SELECT id FROM geometries WHERE contains(?,geometry)"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.interfaces.GeometryLocalHome#makeDbTable()} * is called. */ public static final String HOME_CREATE_NON_OPENGIS_TABLE_STATEMENT = "CREATE TABLE geometries (id INT PRIMARY KEY, description TEXT, geometry GEOMETRY)"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.interfaces.GeometryLocalHome#makeDbTable(java.lang.String, int, int)} * is called for create initial table. */ public static final String HOME_CREATE_OPENGIS_TABLE_STATEMENT = "CREATE TABLE geometries (id INT PRIMARY KEY, description TEXT)"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.interfaces.GeometryLocalHome#makeDbTable(java.lang.String, int, int)} * is called for adding geometry column. */ public static final String ADD_OPEN_GIS_GEOMETRY_COLUMN_STATEMENT = "SELECT AddGeometryColumn('','geometries','geometry',?,?,?)"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.interfaces.GeometryLocalHome#dropDbTable()} * is called for adding geometry column. */ public static final String DROP_TABLE_STATEMENT = "DROP TABLE geometries"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.ejb.GeometryBMP#ejbLoad()} * is called from the container. */ public static final String EJB_LOAD_STATEMENT = "SELECT id,geometry,description FROM geometries WHERE id=?"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.ejb.GeometryBMP#ejbStore()} * is called from the container. */ public static final String EJB_STORE_STATEMENT = "UPDATE geometries SET geometry=?, description=? WHERE id=?"; /** * Query executed from * {@link com.geodetix.geo.dao.PostGisGeometryDAOImpl} * on PostGIS when the method * {@link com.geodetix.geo.ejb.GeometryBean#ejbRemove()} * is called from the container. */ public static final String EJB_REMOVE_STATEMENT = "DELETE FROM geometries WHERE id = ?"; } // end PostGisGeometryDAO ��������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/ejb/�����������������������������������������0000755�0000000�0000000�00000000000�12317530606�022015� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/ejb/GeometryFacadeBean.java������������������0000644�0000000�0000000�00000015744�11722777314�026350� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GeometryFacadeBean.java * * Using PostGIS Geometry Types with EJB2 - Proof of Concept * * Copyright 2006, Geodetix S.r.l. (http://www.geodetix.it) * and individual contributors as indicated by the @authors tag. * * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * */ package com.geodetix.geo.ejb; import com.geodetix.geo.exception.ApplicationGeoLayerException; import com.geodetix.geo.interfaces.GeometryLocalHome; import com.geodetix.geo.interfaces.GeometryLocal; import com.geodetix.geo.util.GeometryUtil; import com.geodetix.geo.value.GeometryValue; import org.apache.commons.logging.*; import org.postgis.*; import java.rmi.*; import java.util.*; import javax.ejb.*; import javax.naming.*; /** * A SessionFacade for managing Geometry beans. * * @ejb.bean * name="GeometryFacade" * jndi-name="geodetix/geo/GeometryFacade" * local-jndi-name="geodetix/geo/GeometryFacadeLocal" * type="Stateless" * view-type="both" * transaction-type="Container" * * @ejb.ejb-ref * ejb-name="Geometry" * view-type="local" * ref-name="ejb/GeometryLocal" * * @author <a href="mailto:antonio.pace@geodetix.it">Antonio Pace</a> */ public abstract class GeometryFacadeBean implements SessionBean { private SessionContext ctx; /** * EJB Initializer. * * @ejb.create-method */ public void ejbCreate() throws CreateException {} /** * Called after the EJB creation. */ public void ejbPostCreate() throws CreateException {} /** * Save the EJB session context. */ public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException { this.ctx = ctx; } /* ============ Finder Methods ============== */ /** * Find all of the geometry beans contained in a <code>Polygon</code>. * * @ejb.interface-method * * @param polygon The Polygon to search in. */ public Collection findByPolygon(org.postgis.Polygon polygon) throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); Collection geometries = geometryHome.findByPolygon(polygon); List result = new ArrayList(); for (Iterator iter = geometries.iterator(); iter.hasNext(); ) { GeometryLocal geometry = (GeometryLocal) iter.next(); result.add(geometry.getGeometryValue()); } return result; } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (FinderException e) { throw new ApplicationGeoLayerException(e); } } /* =============== Business Iinterfaces Methods ============= */ /** * Creates a new Geometry Bean. * * @ejb.interface-method * * @param geometry the <code>org.postgis.Geometry</code> that has to be * included in this EJB. * @param description the textual description of this bean. * @return a value object representing the created EJB. */ public GeometryValue createGeometry(org.postgis.Geometry geometry, String description) throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); GeometryLocal geometryLocal = geometryHome.create(geometry,description); return geometryLocal.getGeometryValue(); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (CreateException e) { throw new ApplicationGeoLayerException(e); } } /* ================== BMP Utility Methods ================= */ /** * Create a non-OpenGIS DataBase table used to persist the Geometry Beans. * <em>Note that in a real-world application this method should be protected * by using a role-based security policy.</em> * * @ejb.interface-method * * @throws ApplicationGeoLayerException thrown if an error occours * during table creation. */ public void createGeometryTable() throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); geometryHome.makeDbTable(); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (Exception e) { throw new ApplicationGeoLayerException(e); } } /** * Create an OpenGIS compliant database table used to persist the * Geometry Beans. * <em>Note that in a real-world application this method should be protected * by using a role-based security policy.</em> * * @ejb.interface-method * * @throws ApplicationGeoLayerException thrown if an error occours * during table creation. */ public void createGeometryTable(String gemetryType, int srid, int geometryDimension ) throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); geometryHome.makeDbTable(gemetryType, srid, geometryDimension); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (Exception e) { throw new ApplicationGeoLayerException(e); } } /** * Remove the EJB's persistence table from the database. * <em>Note that in a real-world application this method should be protected * by using a role-based security policy.</em> * * @ejb.interface-method * * @throws ApplicationGeoLayerException thrown if an error occours * during table creation. */ public void dropGeometryTable() throws ApplicationGeoLayerException { try { GeometryLocalHome geometryHome = GeometryUtil.getLocalHome(); geometryHome.dropDbTable(); } catch (NamingException e) { throw new ApplicationGeoLayerException(e); } catch (Exception e) { throw new ApplicationGeoLayerException(e); } } } ����������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/ejb/GeometryBean.java������������������������0000644�0000000�0000000�00000016260�11722777314�025256� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GeometryBean.java * * Using PostGIS Geometry Types with EJB2 - Proof of Concept * * Copyright 2006, Geodetix S.r.l. (http://www.geodetix.it) * and individual contributors as indicated by the @authors tag. * * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * */ package com.geodetix.geo.ejb; import javax.ejb.*; import java.util.*; import org.postgis.*; import com.geodetix.geo.value.GeometryValue; /** * This BMP (Bean Managed Persistence) entity bean stores information * about geometrical description of a choosen entity in some application * domain. It stores geometrical infos in the <code>geometry</code> attribute * of type <code>org.postgis.Geometry</code>. Note that such an attribute could * even be implemented as a pure text (i.e. Java <code>String</code>) field * following the WKT format, thus leaving geometric details to the PostGIS * api classes (see <code>README</code> file for further details). * * @ejb.bean * name="Geometry" * jndi-name="geodetix/geo/Geometry" * local-jndi-name="geodetix/geo/GeometryLocal" * type="BMP" * view-type="local" * primkey-field="id" * * @ejb.dao * impl-class="com.geodetix.geo.dao.PostGisGeometryDAOImpl" * * * @ejb.transaction * type="RequiresNew" * * * @ejb.value-object * name="Geometry" * match="value" * * @author <a href="mailto:antonio.pace@geodetix.it">Antonio Pace</a> * */ public abstract class GeometryBean implements javax.ejb.EntityBean { /* TEMPORARY (NOT FOR REAL WORLD) PRIMARY KEY GENERATOR */ private static final int SIMPLE_ID_GENERATOR = (int) System.currentTimeMillis(); private static int actualId = SIMPLE_ID_GENERATOR; /* BMP fields */ private Integer id; private String description; private Geometry geometry; /* CREATE METHODS */ /** * Creates a new Geometry Bean. * * @ejb.create-method * * @param geometry the <code>org.postgis.Geometry</code> that has to be * included in this EJB. * @param description the textual description of this bean. * @throws CreateException lauched if an error occours during the * EJB creation. * @return the EJB's primary key. */ public Integer ejbCreate(org.postgis.Geometry geometry,String description) throws CreateException { this.id = (new Integer(actualId++)); this.geometry = geometry; this.description=description; /* For now return null, this will be overrided in the DAO implementation of this method */ return null; } /** * This method is called by the container after the EJB creation. * * @param geometry the <code>org.postgis.Geometry</code> that has to be * included in this EJB. */ public void ejbPostCreate(org.postgis.Geometry geometry) { // Do something with Relationship. } /* ========== Finder Methods =========== */ /** * Find a Geometry Bean from his primary key. * * @param primaryKey the primary key of the bean to found. * @throws FinderException lauched if an error occours during the * EJB search operation. */ public abstract Integer ejbFindByPrimaryKey(Integer primaryKey) throws FinderException; /** * Find all of the geometry beans contained in a <code>Polygon</code>. * * @param polygon the Polygon to search in. */ public abstract Collection ejbFindByPolygon(org.postgis.Polygon polygon) throws FinderException; /* ============== BMP Fields Accessor Methods ============ */ /** * Returns the EJB's id field. * * @ejb.pk-field * @ejb.interface-method * @ejb.value-object match="value" */ public Integer getId() { return this.id; } /** * Modifies the id field. */ public void setId(Integer id) { this.id = id; this.makeDirty(); } /** * Returns the EJB's textual description. * * @ejb.interface-method * @ejb.value-object match="value" * @return the Geometry Bean description. */ public String getDescription() { return this.description; } /** * Modifies the EJB's textual description. * * @ejb.interface-method * @param description the Geometry Bean description. */ public void setDescription(String description) { this.description = description; this.makeDirty(); } /** * Returns the EJB's geometrical description. * * @ejb.interface-method * @ejb.value-object match="value" * @return the org.postgis.Geometry included in this bean. */ public org.postgis.Geometry getGeometry() { return this.geometry; } /** * Modifies the EJB's geometrical description. * * @ejb.interface-method * @param geometry the <code>org.postgis.Geometry</code> that has to * be included in this EJB. */ public void setGeometry(org.postgis.Geometry geometry) { this.geometry = geometry; this.makeDirty(); } /* HOME INTERFACE BMP UTILITY METHODS */ /** * Create a non-OpenGIS DataBase table, used to persist the Geometry Beans. * * @ejb.home-method * * @dao.call */ public abstract void ejbHomeMakeDbTable(); /** * Create OpenGIS DataBase table, used to persist the Geometry Beans. * * @ejb.home-method * * @dao.call */ public abstract void ejbHomeMakeDbTable(String gemetryType, int srid, int geometryDimension); /** * Remove Bean's Persistence Teable of the DataBase. * * @ejb.home-method * * @dao.call */ public abstract void ejbHomeDropDbTable(); /* VALUE OBJECTS */ /** * This is an abstract method to allow XDoclet to expose * value object functionalities in the local/remote interface. * * @ejb.interface-method * * @return a value object for this GeometryBean. */ public abstract GeometryValue getGeometryValue(); /* XDOCLET BMP METHODS RELATED STUFF */ /** * @see com.geodetix.geo.ejb.GeometryBMP source. */ protected abstract void makeDirty(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/exception/�����������������������������������0000755�0000000�0000000�00000000000�12315456223�023253� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/exception/ApplicationGeoLayerException.java��0000644�0000000�0000000�00000003660�11722777314�031705� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ApplicationGeoLayerException.java * * Using PostGIS Geometry Types with EJB2 - Proof of Concept * * Copyright 2006, Geodetix S.r.l. (http://www.geodetix.it) * and individual contributors as indicated by the @authors tag. * * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * */ package com.geodetix.geo.exception; /** * Generic Application Exception. * * @author <a href="mailto:antonio.pace@geodetix.it">Antonio Pace</a> * */ public class ApplicationGeoLayerException extends Exception { /** * Creates a new ApplicationGeoLayerException object. */ public ApplicationGeoLayerException() { super("unknown"); } // end ApplicationGeoLayerException() /** * Creates a new ApplicationGeoLayerException object. * * @param e the wrapped Exception. */ public ApplicationGeoLayerException(Exception e) { super(e.getMessage()); } // end ApplicationGeoLayerException() /** * Creates a new ApplicationGeoLayerException object. * * @param msg the wrapped Message. */ public ApplicationGeoLayerException(String msg) { super(msg); } // end ApplicationGeoLayerException() } // end ApplicationGeoLayerException ��������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/client/��������������������������������������0000755�0000000�0000000�00000000000�12317530606�022533� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/java/ejb2/src/com/geodetix/geo/client/Client.java���������������������������0000644�0000000�0000000�00000017313�11722777314�024631� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Client.java * * Using PostGIS Geometry Types with EJB2 - Proof of Concept * * Copyright 2006, Geodetix S.r.l. (http://www.geodetix.it) * and individual contributors as indicated by the @authors tag. * * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 2.1 of the License. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or visit the web at * http://www.gnu.org. * */ package com.geodetix.geo.client; import com.geodetix.geo.exception.ApplicationGeoLayerException; import com.geodetix.geo.interfaces.GeometryFacade; import com.geodetix.geo.interfaces.GeometryFacadeHome; import com.geodetix.geo.util.GeometryFacadeUtil; import com.geodetix.geo.value.GeometryValue; import java.rmi.RemoteException; import javax.naming.InitialContext; import javax.naming.Context; import javax.naming.NamingException; import javax.rmi.PortableRemoteObject; import java.util.*; import org.postgis.*; /** * A client executing a simple Test Case and illustrating the Geometry Bean Usage. * * @author <a href="mailto:antonio.pace@geodetix.it">Antonio Pace</a> */ public class Client { private GeometryFacade geometryFacade; private Point p1; private Point p2; private LineString fromP1toP2; private Polygon searchPolygon; /** * Initializer method. * * @param geometryFacade the geometry facade object used to interact * with the EJBs */ public Client(GeometryFacade geometryFacade) { this.geometryFacade=geometryFacade; this.init(); } private void init(){ // Create geometry stuff // City Stadium this.p1= new Point(16.23034006,39.31054320); // City Train Station this.p2= new Point(16.26002601,39.31920668); this.fromP1toP2= new LineString(new Point[] {p1,p2}); // Create search polygon Point[] points = new Point[]{ new Point(16.16399297, 39.40109388), new Point(16.32368776, 39.39596998), new Point(16.32397242, 39.25335486), new Point(16.16399297, 39.25534748), new Point(16.16399297, 39.40109388), }; LinearRing[] linearRings = { new LinearRing(points) }; // City Area Extension this.searchPolygon = new Polygon(linearRings); } private void executeNonOpenGisTest() throws ApplicationGeoLayerException, RemoteException { System.out.println("Execute some Tests on NON-OpenGIS Geometry EJBs"); geometryFacade.createGeometryTable(); System.out.println("create some geometry stuff..."); this.showGeometry(p1); GeometryValue gv1 = geometryFacade.createGeometry(p1,"[ City Stadium ]"); this.showGeometry(p2); GeometryValue gv2 = geometryFacade.createGeometry(p2,"[ City Train Station ]"); this.showGeometry(fromP1toP2); GeometryValue gv3 = geometryFacade.createGeometry(fromP1toP2,"Line from " + gv1.getDescription() + " to " + gv2.getDescription()); System.out.println("Searching created geometries in City Area Perimeter: "); this.showGeometry(searchPolygon); Collection<GeometryValue> findResults = (Collection<GeometryValue>) geometryFacade.findByPolygon(searchPolygon); System.out.println("Search Results:"); for (GeometryValue geometry : findResults ) { this.showGeometry(geometry); } geometryFacade.dropGeometryTable(); } private void executeOpenGisTest() throws ApplicationGeoLayerException, RemoteException { System.out.println("Execute some Tests on OpenGIS Geometry EJBs"); geometryFacade.createGeometryTable("POINT",4326,2); System.out.println("Create some Points ...."); // Setting SRID this.p1.setSrid(4326); this.p2.setSrid(4326); this.searchPolygon.setSrid(4326); this.showGeometry(p1); GeometryValue gv1 = geometryFacade.createGeometry(p1,"[ City Stadium ]"); this.showGeometry(p2); GeometryValue gv2 = geometryFacade.createGeometry(p2,"[ City Train Station ]"); System.out.println(); System.out.println("Searching created Points in City Area Perimeter: "); this.showGeometry(searchPolygon); // Note the use of geometricFacade finder method Collection<GeometryValue> findResults = (Collection<GeometryValue>) geometryFacade.findByPolygon(searchPolygon); System.out.println("Search Results:"); for (GeometryValue geometry : findResults ) { this.showGeometry(geometry); } geometryFacade.dropGeometryTable(); } private void showGeometry(Geometry geometry) { System.out.println("Geometry: "+geometry.getTypeString()+geometry.getValue() + " SRID: "+geometry.getSrid()); } private void showGeometry(GeometryValue geometryValue) { System.out.println("EJB Id: "+geometryValue.getId()); System.out.println("Description: "+geometryValue.getDescription()); this.showGeometry(geometryValue.getGeometry()); } /** * Main client method. * * @param args arguments from the command line */ public static void main(String [] args) { try { GeometryFacadeHome geometryFacadeHome= GeometryFacadeUtil.getHome(); GeometryFacade geometryFacade= geometryFacadeHome.create(); Client client = new Client(geometryFacade); System.out.println("==============================="); System.out.println("== TEST 1 ====================="); System.out.println("==============================="); client.executeNonOpenGisTest(); System.out.println("==============================="); System.out.println("== TEST 2 ====================="); System.out.println("==============================="); client.executeOpenGisTest(); System.out.println("==============================="); System.out.println("DONE."); } catch (ApplicationGeoLayerException ae) { ae.printStackTrace(); } catch (java.rmi.RemoteException re) { re.printStackTrace(); } catch (javax.naming.NamingException ne) { ne.printStackTrace(); } catch (javax.ejb.CreateException ce) { ce.printStackTrace(); } } private static Context getInitialContext() throws javax.naming.NamingException { return new javax.naming.InitialContext(); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/authors.svn�����������������������������������������������������������������0000644�0000000�0000000�00000002244�11756655132�016012� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������benjubb:Ben Jubb <benjubb@refractions.net> chodgson:Chris Hodgson <chodgson@refractions.net> colivier:Olivier Courtin <olivier.courtin@camptocamp.com> cvs:No Body <no@body.net> dblasby:David Blasby <dblasby@gmail.com> devrim:Devrim GÜNDÜZ <devrim@gunduz.org> dustymugs:Bborie Park <bkpark at ucdavis.edu> dzwarg:David Zwarg <dzwarg@azavea.com> jeffloun:Jeff Lounsbury <jeffloun@refractions.net> jorgearevalo:Jorge Arévalo <jorge.arevalo at deimos-space.com> kneufeld:Kevin Neufeld <kneufeld.ca@gmail.com> mcayland:Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> mleslie:Mark Leslie <mark.leslie@lisasoft.com> mloskot:Mateusz Loskot <mateusz@loskot.net> mschaber:Markus Schaber <markus@schabi.de> nbarker:Norman Barker <nbarker@ittvis.com> nicklas:Nicklas Avén <nicklas.aven@jordogskog.no> pracine:Pierre Racine <Pierre.Racine@sbf.ulaval.ca> pramsey:Paul Ramsey <pramsey@cleverelephant.ca> rmason:Ralph Mason <ralph.mason@telogis.com> robe:Regina Obe <lr@pcorp.us> snowman:Stephen Frost <sfrost@snowman.net> strk:Sandro Santilli <strk@keybit.net> warmerdam:Frank Warmerdam <warmerdam@pobox.com> xingkth:Xing Lin <solo.lin@gmail.com> yecarrillo:Eduin Carrillo <yecarrillo@yahoo.com> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/configure�������������������������������������������������������������������0000755�0000000�0000000�00002544523�12315456234�015513� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # ifdef HAVE_STDLIB_H # include <stdlib.h> # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" gt_needs= ac_subst_vars='LTLIBOBJS LIBOBJS EXTENSIONS RT_POSTGIS_SQL RT_LOADER RT_PG_LIB RT_CORE_LIB RASTER GDALFPOLYGONIZE LIBGDAL_DEPLIBS_LDFLAGS LIBGDAL_LDFLAGS LIBGDAL_CFLAGS POSTGIS_GDAL_VERSION GDAL_CONFIG POSTGIS_RASTER_SCRIPTS_VERSION POSTGIS_RASTER_BUILD_DATE POSTGIS_RASTER_LIB_VERSION POSTGIS_RASTER_VERSION POSTGIS_RASTER_MICRO_VERSION POSTGIS_RASTER_MINOR_VERSION POSTGIS_RASTER_MAJOR_VERSION SRID_USR_MAX SRID_MAX TOPOLOGY SHLIB_LINK POSTGIS_SCRIPTS_VERSION POSTGIS_BUILD_DATE POSTGIS_LIB_VERSION POSTGIS_VERSION GTK_BUILD GTK_WIN32_RES GTK_WIN32_FLAGS IGE_MAC_LIBS IGE_MAC_CFLAGS GTK_LIBS GTK_CFLAGS PKG_CONFIG HAVE_JSON JSON_LDFLAGS JSON_CPPFLAGS PROJ_LDFLAGS PROJ_CPPFLAGS POSTGIS_PROJ_VERSION GETTEXT_LDFLAGS GETTEXT_CFLAGS POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS mkdir_p MKDIR_P INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM SET_MAKE HAVE_SFCGAL SFCGAL SFCGAL_OBJS SFCGAL_LDFLAGS SFCGAL_CPPFLAGS SFCGAL_VERSION SFCGAL_CONFIG GEOS_NUMERIC_VERSION POSTGIS_GEOS_VERSION GEOS_CPPFLAGS GEOS_LDFLAGS GEOSCONFIG POSTGIS_LIBXML2_VERSION XML2CONFIG POSTGIS_PGSQL_VERSION PGSQL_SHAREDIR PGSQL_BINDIR PGSQL_MANDIR PGSQL_DOCDIR PGSQL_BE_CPPFLAGS PGSQL_FE_CPPFLAGS PGSQL_FE_LDFLAGS PGXSOVERRIDE PGXS PG_CONFIG ICONV_CFLAGS ICONV_LDFLAGS CUNIT_LDFLAGS CUNIT_CPPFLAGS MATHML2_DTD XSLBASE DBLATEX XMLLINT XSLTPROC IMAGEMAGICK PERL MINGWBUILD YFLAGS YACC LEXLIB LEX_OUTPUT_ROOT LEX POSTGIS_MICRO_VERSION POSTGIS_MINOR_VERSION POSTGIS_MAJOR_VERSION EXESUFFIX NUMERICFLAGS WARNFLAGS PICFLAGS SQLPP GPP CPPBIN ANT CXXCPP ac_ct_CXX CXXFLAGS CXX CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL AWK RANLIB STRIP ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_xsldir with_mathmldtd with_libiconv with_pgconfig with_xml2config with_geosconfig with_sfcgal with_gettext enable_nls enable_rpath with_libiconv_prefix with_libintl_prefix with_projdir with_json with_jsondir with_gui enable_gtktest enable_debug enable_profile with_topology with_raster with_raster_dblwarning with_gdalconfig ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP YACC YFLAGS PG_CONFIG' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --disable-gtktest do not try to compile and run a test GTK+ program --enable-debug Enable verbose debugging messages --enable-profile Enable GEOS profiling messages Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-xsldir=PATH specify the directory containing the docbook.xsl stylesheet --with-mathmldtd=PATH specify the dtd path for mathml2.dtd --with-libiconv=PATH specify a path to non-default libiconv installation --with-pgconfig=FILE specify an alternative pg_config file --with-xml2config=FILE specify an alternative xml2-config file --with-geosconfig=FILE specify an alternative geos-config file --with-sfcgal=PATH Add SFCGAL support. ARG allows to specify an alternate PATH to sfcgal-config --with-gettext=PATH specify a path to non-default gettext installation --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-projdir=PATH specify the PROJ.4 installation directory --without-json build without json-c support --with-jsondir=PATH specify the json-c installation directory --with-gui compile the data import GUI (requires GTK+2.0) --without-topology Disable the topology extension --without-raster Disable the raster extension --with-raster-dblwarning output double truncation warnings. Only used with --with-raster --with-gdalconfig=[ARG] specify location of gdal-config (ARG=path). Only used with --with-raster Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. PG_CONFIG PostgreSQL configure command to determine Postgres version to bulid against. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers postgis_config.h" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$lt_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #include <stdlib.h> #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$lt_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" # Extract the first word of "ant", so it can be a program name with args. set dummy ant; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ANT+:} false; then : $as_echo_n "(cached) " >&6 else case $ANT in [\\/]* | ?:[\\/]*) ac_cv_path_ANT="$ANT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ANT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ANT=$ac_cv_path_ANT if test -n "$ANT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ANT" >&5 $as_echo "$ANT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "cpp", so it can be a program name with args. set dummy cpp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CPPBIN+:} false; then : $as_echo_n "(cached) " >&6 else case $CPPBIN in [\\/]* | ?:[\\/]*) ac_cv_path_CPPBIN="$CPPBIN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CPPBIN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CPPBIN=$ac_cv_path_CPPBIN if test -n "$CPPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPPBIN" >&5 $as_echo "$CPPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$CPPBIN" != "x"; then SQLPP="${CPPBIN} -w -traditional-cpp -P" else # Extract the first word of "gpp_", so it can be a program name with args. set dummy gpp_; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GPP+:} false; then : $as_echo_n "(cached) " >&6 else case $GPP in [\\/]* | ?:[\\/]*) ac_cv_path_GPP="$GPP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GPP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GPP=$ac_cv_path_GPP if test -n "$GPP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPP" >&5 $as_echo "$GPP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$GPP" != "x"; then SQLPP="${GPP} -C -s \'" else if test "x${CPP}" != "x"; then SQLPP="${CPP} -w -traditional-cpp" else as_fn_error $? "Required \"cpp\" command not found" "$LINENO" 5 fi fi fi PICFLAGS="$lt_prog_compiler_pic" WARNFLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -Wall" >&5 $as_echo_n "checking if $compiler supports -Wall... " >&6; } if ${_cv_wall+:} false; then : $as_echo_n "(cached) " >&6 else _cv_wall=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-Wall" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then _cv_wall=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_wall" >&5 $as_echo "$_cv_wall" >&6; } if test x"$_cv_wall" = xyes; then WARNFLAGS="$WARNFLAGS -Wall" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -Wmissing-prototypes" >&5 $as_echo_n "checking if $compiler supports -Wmissing-prototypes... " >&6; } if ${_cv_misprot+:} false; then : $as_echo_n "(cached) " >&6 else _cv_misprot=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-Wmissing-prototypes" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then _cv_misprot=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_misprot" >&5 $as_echo "$_cv_misprot" >&6; } if test x"$_cv_misprot" = xyes; then WARNFLAGS="$WARNFLAGS -Wmissing-prototypes" else : fi NUMERICFLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -ffloat-store" >&5 $as_echo_n "checking if $compiler supports -ffloat-store... " >&6; } if ${dummy_cv_ffloat_store+:} false; then : $as_echo_n "(cached) " >&6 else dummy_cv_ffloat_store=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-ffloat-store" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then dummy_cv_ffloat_store=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dummy_cv_ffloat_store" >&5 $as_echo "$dummy_cv_ffloat_store" >&6; } if test x"$dummy_cv_ffloat_store" = xyes; then NUMERICFLAGS="$NUMERICFLAGS -ffloat-store" else : fi EXESUFFIX="$ac_cv_exeext" POSTGIS_MAJOR_VERSION=`cat Version.config | grep POSTGIS_MAJOR_VERSION | sed 's/[^=]*=\([0-9]\)/\1/g'` POSTGIS_MINOR_VERSION=`cat Version.config | grep POSTGIS_MINOR_VERSION | sed 's/[^=]*=\([0-9]\)/\1/g'` POSTGIS_MICRO_VERSION=`cat Version.config | grep POSTGIS_MICRO_VERSION | sed 's/[^=]*=\([0-9]\)/\1/g'` cat >>confdefs.h <<_ACEOF #define POSTGIS_MAJOR_VERSION "$POSTGIS_MAJOR_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_MINOR_VERSION "$POSTGIS_MINOR_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_MICRO_VERSION "$POSTGIS_MICRO_VERSION" _ACEOF for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" ac_fn_c_check_header_mongrel "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default" if test "x$ac_cv_header_ieeefp_h" = xyes; then : HAVE_IEEEFP_H=1 else HAVE_IEEEFP_H=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_IEEEFP_H $HAVE_IEEEFP_H _ACEOF ac_fn_c_check_header_mongrel "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" if test "x$ac_cv_header_termios_h" = xyes; then : HAVE_TERMIOS_H=1 else HAVE_TERMIOS_H=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_TERMIOS_H $HAVE_TERMIOS_H _ACEOF ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" if test "x$ac_cv_func_vasprintf" = xyes; then : HAVE_VASPRINTF=1 else HAVE_VASPRINTF=0 fi $as_echo "#define HAVE_VASPRINTF 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf" if test "x$ac_cv_func_asprintf" = xyes; then : HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi $as_echo "#define HAVE_ASPRINTF 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* for off_t */ #include <stdio.h> int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include <sys/types.h> /* for off_t */ #include <stdio.h> int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi case $host_os in *mingw*) MINGWBUILD=1 ;; *) MINGWBUILD=0 ;; esac # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PERL" = "x"; then as_fn_error $? "Perl was not found. Building PostGIS requires Perl." "$LINENO" 5 fi # Extract the first word of "convert", so it can be a program name with args. set dummy convert; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_IMAGEMAGICK+:} false; then : $as_echo_n "(cached) " >&6 else case $IMAGEMAGICK in [\\/]* | ?:[\\/]*) ac_cv_path_IMAGEMAGICK="$IMAGEMAGICK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_IMAGEMAGICK="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi IMAGEMAGICK=$ac_cv_path_IMAGEMAGICK if test -n "$IMAGEMAGICK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IMAGEMAGICK" >&5 $as_echo "$IMAGEMAGICK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$IMAGEMAGICK" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ImageMagick does not seem to be installed. Documentation cannot be built" >&5 $as_echo "$as_me: WARNING: ImageMagick does not seem to be installed. Documentation cannot be built" >&2;} fi # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XSLTPROC" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xsltproc is not installed so documentation cannot be built" >&5 $as_echo "$as_me: WARNING: xsltproc is not installed so documentation cannot be built" >&2;} fi # Extract the first word of "xmllint", so it can be a program name with args. set dummy xmllint; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XMLLINT+:} false; then : $as_echo_n "(cached) " >&6 else case $XMLLINT in [\\/]* | ?:[\\/]*) ac_cv_path_XMLLINT="$XMLLINT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XMLLINT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XMLLINT=$ac_cv_path_XMLLINT if test -n "$XMLLINT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5 $as_echo "$XMLLINT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XMLLINT" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmllint is not installed so documentation cannot be checked" >&5 $as_echo "$as_me: WARNING: xmllint is not installed so documentation cannot be checked" >&2;} fi # Extract the first word of "dblatex", so it can be a program name with args. set dummy dblatex; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DBLATEX+:} false; then : $as_echo_n "(cached) " >&6 else case $DBLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_DBLATEX="$DBLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DBLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DBLATEX=$ac_cv_path_DBLATEX if test -n "$DBLATEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DBLATEX" >&5 $as_echo "$DBLATEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$DBLATEX" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dblatex is not installed so PDF documentation cannot be built" >&5 $as_echo "$as_me: WARNING: dblatex is not installed so PDF documentation cannot be built" >&2;} fi # Check whether --with-xsldir was given. if test "${with_xsldir+set}" = set; then : withval=$with_xsldir; XSLBASE="$withval" else XSLBASE="" fi XSLBASE_AUTO="" if test "x$XSLBASE" = "x"; then SEARCHPATH=" /usr/share/sgml/docbook/xsl-stylesheets /usr/share/xml/docbook/stylesheet/nwalsh /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /opt/local/share/xsl/docbook-xsl /usr/local/share/xsl/docbook-xsl /usr/share/xsl/docbook-xsl " for p in ${SEARCHPATH}; do if test -r "${p}"/html/docbook.xsl; then XSLBASE_AUTO="${p}" break fi done if test "x$XSLBASE_AUTO" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not locate Docbook stylesheets required to build the documentation" >&5 $as_echo "$as_me: WARNING: could not locate Docbook stylesheets required to build the documentation" >&2;} fi else if test ! -d "$XSLBASE"; then as_fn_error $? "the docbook stylesheet directory specified using --with-xsldir does not exist" "$LINENO" 5 fi if test ! -f "$XSLBASE/html/docbook.xsl"; then as_fn_error $? "the docbook stylesheet directory specified using --with-xsldir does not contain the html/docbook.xsl file" "$LINENO" 5 fi fi if test "x$XSLBASE" = "x"; then if test ! "x$XSLBASE_AUTO" = "x"; then XSLBASE="$XSLBASE_AUTO" fi fi # Check whether --with-mathmldtd was given. if test "${with_mathmldtd+set}" = set; then : withval=$with_mathmldtd; MATHML2_DTD="$withval" else MATHML2_DTD="" fi if test "x$MATHML2_DTD" = "x"; then MATHML2_DTD="http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" SEARCHPATH=" /usr/share/xml/schema/w3c/mathml/dtd " for p in ${SEARCHPATH}; do if test -r "${p}"/mathml2.dtd; then MATHML2_DTD="${p}/mathml2.dtd" break fi done fi CUNIT_LDFLAGS="" ac_fn_c_check_header_mongrel "$LINENO" "CUnit/CUnit.h" "ac_cv_header_CUnit_CUnit_h" "$ac_includes_default" if test "x$ac_cv_header_CUnit_CUnit_h" = xyes; then : CUNIT_CPPFLAGS="$CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CU_initialize_registry in -lcunit" >&5 $as_echo_n "checking for CU_initialize_registry in -lcunit... " >&6; } if ${ac_cv_lib_cunit_CU_initialize_registry+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcunit $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char CU_initialize_registry (); int main () { return CU_initialize_registry (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cunit_CU_initialize_registry=yes else ac_cv_lib_cunit_CU_initialize_registry=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cunit_CU_initialize_registry" >&5 $as_echo "$ac_cv_lib_cunit_CU_initialize_registry" >&6; } if test "x$ac_cv_lib_cunit_CU_initialize_registry" = xyes; then : CUNIT_LDFLAGS="$LDFLAGS -lcunit" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not locate CUnit required for unit tests" >&5 $as_echo "$as_me: WARNING: could not locate CUnit required for unit tests" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not locate CUnit required for unit tests" >&5 $as_echo "$as_me: WARNING: could not locate CUnit required for unit tests" >&2;} fi ICONV_CFLAGS="" ICONV_LDFLAGS="" # Check whether --with-libiconv was given. if test "${with_libiconv+set}" = set; then : withval=$with_libiconv; LIBICONV_PATH="$withval" else LIBICONV_PATH="" fi LDFLAGS_SAVE="$LDFLAGS" CFLAGS_SAVE="$CFLAGS" if test "x$LIBICONV_PATH" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking user-specified libiconv location: $LIBICONV_PATH" >&5 $as_echo "checking user-specified libiconv location: $LIBICONV_PATH" >&6; } ICONV_CFLAGS="-I$LIBICONV_PATH/include" ICONV_LDFLAGS="-L$LIBICONV_PATH/lib" LDFLAGS="$ICONV_LDFLAGS $LDFLAGS" CFLAGS="$ICONV_CFLAGS $CFLAGS" fi HAVE_ICONV_H=0 ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" if test "x$ac_cv_header_iconv_h" = xyes; then : HAVE_ICONV_H=1 fi if test "x$HAVE_ICONV_H" = "x1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiconv_open in -liconv" >&5 $as_echo_n "checking for libiconv_open in -liconv... " >&6; } if ${ac_cv_lib_iconv_libiconv_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char libiconv_open (); int main () { return libiconv_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_iconv_libiconv_open=yes else ac_cv_lib_iconv_libiconv_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iconv_libiconv_open" >&5 $as_echo "$ac_cv_lib_iconv_libiconv_open" >&6; } if test "x$ac_cv_lib_iconv_libiconv_open" = xyes; then : ICONV_LDFLAGS="$ICONV_LDFLAGS -liconv" HAVE_ICONV=1 fi if test "x$HAVE_ICONV" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv_open in -lc" >&5 $as_echo_n "checking for iconv_open in -lc... " >&6; } if ${ac_cv_lib_c_iconv_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char iconv_open (); int main () { return iconv_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_iconv_open=yes else ac_cv_lib_c_iconv_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_iconv_open" >&5 $as_echo "$ac_cv_lib_c_iconv_open" >&6; } if test "x$ac_cv_lib_c_iconv_open" = xyes; then : ICONV_LDFLAGS="$ICONV_LDFLAGS -lc" HAVE_ICONV=1 fi if test "x$HAVE_ICONV" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv_open in -liconv" >&5 $as_echo_n "checking for iconv_open in -liconv... " >&6; } if ${ac_cv_lib_iconv_iconv_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char iconv_open (); int main () { return iconv_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_iconv_iconv_open=yes else ac_cv_lib_iconv_iconv_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iconv_iconv_open" >&5 $as_echo "$ac_cv_lib_iconv_iconv_open" >&6; } if test "x$ac_cv_lib_iconv_iconv_open" = xyes; then : ICONV_LDFLAGS="$ICONV_LDFLAGS -liconv" HAVE_ICONV=1 fi if test "x$HAVE_ICONV" = "x"; then as_fn_error $? "Could not find libiconv. Please install libiconv and libiconv-devel." "$LINENO" 5 fi fi fi else as_fn_error $? "Could not find iconv.h header. Please install libiconv and libiconv-devel." "$LINENO" 5 fi for ac_func in iconvctl libiconvctl do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done LDFLAGS="$LDFLAGS_SAVE" CFLAGS="$CFLAGS_SAVE" if test "x$HAVE_ICONV" != "x"; then cat >>confdefs.h <<_ACEOF #define HAVE_ICONV $HAVE_ICONV _ACEOF fi # Check whether --with-pgconfig was given. if test "${with_pgconfig+set}" = set; then : withval=$with_pgconfig; PG_CONFIG="$withval" fi if test "x$PG_CONFIG" = "xno"; then as_fn_error $? "Cannot disable pg_config." "$LINENO" 5 elif test "x$PG_CONFIG" = "x"; then # Extract the first word of "pg_config", so it can be a program name with args. set dummy pg_config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PG_CONFIG="$PG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PG_CONFIG=$ac_cv_path_PG_CONFIG if test -n "$PG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PG_CONFIG" >&5 $as_echo "$PG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PG_CONFIG" = "x"; then as_fn_error $? "could not find pg_config within the current path. You may need to try re-running configure with a --with-pg_config parameter." "$LINENO" 5 fi else if test "x$PG_CONFIG" = "xyes"; then as_fn_error $? "you must specify a parameter to --with-pgconfig, e.g. --with-pgconfig=/path/to/pg_config" "$LINENO" 5 else if test -f $PG_CONFIG; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using user-specified pg_config file: $PG_CONFIG" >&5 $as_echo "Using user-specified pg_config file: $PG_CONFIG" >&6; } else as_fn_error $? "the user-specified pg_config file $PG_CONFIG does not exist" "$LINENO" 5 fi fi fi PGXS=`$PG_CONFIG --pgxs` if test ! -f $PGXS; then as_fn_error $? "the PGXS Makefile $PGXS cannot be found. Please install the PostgreSQL server development packages and re-run configure." "$LINENO" 5 fi PGSQL_MAJOR_VERSION=`$PG_CONFIG --version | sed 's/[^0-9]*\([0-9]\)\.\([0-9]\).*/\1/'` PGSQL_MINOR_VERSION=`$PG_CONFIG --version | sed 's/[^0-9]*\([0-9]\)\.\([0-9]\).*/\2/'` PGSQL_FULL_VERSION=`$PG_CONFIG --version` POSTGIS_PGSQL_VERSION="$PGSQL_MAJOR_VERSION$PGSQL_MINOR_VERSION" PGSQL_PKGLIBDIR=`$PG_CONFIG --pkglibdir` PGSQL_LIBDIR=`$PG_CONFIG --libdir` PGSQL_SHAREDIR=`$PG_CONFIG --sharedir` { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking PostgreSQL version... $PGSQL_FULL_VERSION" >&5 $as_echo "checking PostgreSQL version... $PGSQL_FULL_VERSION" >&6; } if test ! "$PGSQL_MAJOR_VERSION" -ge 9; then as_fn_error $? "PostGIS requires PostgreSQL >= 9.0" "$LINENO" 5 fi PGXSOVERRIDE=0 if test ! "$PGSQL_MAJOR_VERSION" -ge 9; then PGXSOVERRIDE=1 fi PGSQL_FE_LDFLAGS=-L`$PG_CONFIG --libdir`" -lpq" PGSQL_FE_CPPFLAGS=-I`$PG_CONFIG --includedir` PGSRV_INC=`$PG_CONFIG --includedir-server` PGSQL_BE_CPPFLAGS="-I${PGSRV_INC}" case $host in *mingw32*) PGSQL_BE_CPPFLAGS="${PGSQL_BE_CPPFLAGS} -I${PGSRV_INC}/port/win32" ;; esac PGSQL_DOCDIR=`$PG_CONFIG --docdir` PGSQL_MANDIR=`$PG_CONFIG --mandir` PGSQL_LOCALEDIR=`$PG_CONFIG --localedir` cat >>confdefs.h <<_ACEOF #define PGSQL_LOCALEDIR "$PGSQL_LOCALEDIR" _ACEOF PGSQL_BINDIR=`$PG_CONFIG --bindir` PGSQL_SHAREDIR=`$PG_CONFIG --sharedir` CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$PGSQL_FE_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "libpq-fe.h" "ac_cv_header_libpq_fe_h" "$ac_includes_default" if test "x$ac_cv_header_libpq_fe_h" = xyes; then : else as_fn_error $? "could not find libpq-fe.h" "$LINENO" 5 fi CPPFLAGS="$CPPFLAGS_SAVE" LIBS_SAVE="$LIBS" LIBS="$PGSQL_FE_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQserverVersion in -lpq" >&5 $as_echo_n "checking for PQserverVersion in -lpq... " >&6; } if ${ac_cv_lib_pq_PQserverVersion+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpq $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PQserverVersion (); int main () { return PQserverVersion (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pq_PQserverVersion=yes else ac_cv_lib_pq_PQserverVersion=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQserverVersion" >&5 $as_echo "$ac_cv_lib_pq_PQserverVersion" >&6; } if test "x$ac_cv_lib_pq_PQserverVersion" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPQ 1 _ACEOF LIBS="-lpq $LIBS" else as_fn_error $? "could not find libpq" "$LINENO" 5 fi LIBS="$LIBS_SAVE" cat >>confdefs.h <<_ACEOF #define POSTGIS_PGSQL_VERSION $POSTGIS_PGSQL_VERSION _ACEOF if test "$prefix" != "NONE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ------------------------------------------------------------------------" >&5 $as_echo "------------------------------------------------------------------------" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: WARNING: You have set the --prefix to '$prefix'. But we mostly " >&5 $as_echo " WARNING: You have set the --prefix to '$prefix'. But we mostly " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ignore the --prefix. For your info, using the values determined from " >&5 $as_echo " ignore the --prefix. For your info, using the values determined from " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PG_CONFIG we will be installing: " >&5 $as_echo " $PG_CONFIG we will be installing: " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: * postgis shared library in $PGSQL_LIBDIR " >&5 $as_echo " * postgis shared library in $PGSQL_LIBDIR " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: * postgis SQL files in $PGSQL_SHAREDIR/contrib/postgis-$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION " >&5 $as_echo " * postgis SQL files in $PGSQL_SHAREDIR/contrib/postgis-$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: * postgis executables in $PGSQL_BINDIR " >&5 $as_echo " * postgis executables in $PGSQL_BINDIR " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ------------------------------------------------------------------------" >&5 $as_echo "------------------------------------------------------------------------" >&6; } fi # Check whether --with-xml2config was given. if test "${with_xml2config+set}" = set; then : withval=$with_xml2config; XML2CONFIG="$withval" else XML2CONFIG="" fi if test "x$XML2CONFIG" = "x"; then # Extract the first word of "xml2-config", so it can be a program name with args. set dummy xml2-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XML2CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $XML2CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_XML2CONFIG="$XML2CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XML2CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XML2CONFIG=$ac_cv_path_XML2CONFIG if test -n "$XML2CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XML2CONFIG" >&5 $as_echo "$XML2CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XML2CONFIG" = "x"; then as_fn_error $? "could not find xml2-config from libxml2 within the current path. You may need to try re-running configure with a --with-xml2config parameter." "$LINENO" 5 fi else if test "x$XML2CONFIG" = "xyes"; then as_fn_error $? "you must specify a parameter to --with-xml2config, e.g. --with-xml2config=/path/to/xml2-config" "$LINENO" 5 else if test -f $XML2CONFIG; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using user-specified xml2-config file: $XML2CONFIG" >&5 $as_echo "Using user-specified xml2-config file: $XML2CONFIG" >&6; } else as_fn_error $? "the user-specified xml2-config file $XML2CONFIG does not exist" "$LINENO" 5 fi fi fi XML2_LDFLAGS=`$XML2CONFIG --libs` XML2_CPPFLAGS=`$XML2CONFIG --cflags` POSTGIS_LIBXML2_VERSION=`$XML2CONFIG --version` CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$XML2_CPPFLAGS" for ac_header in libxml/tree.h libxml/parser.h libxml/xpath.h libxml/xpathInternals.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else as_fn_error $? "could not find headers include related to libxml2" "$LINENO" 5 fi done CPPFLAGS="$CPPFLAGS_SAVE" LIBS_SAVE="$LIBS" LIBS="$XML2_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5 $as_echo_n "checking for xmlInitParser in -lxml2... " >&6; } if ${ac_cv_lib_xml2_xmlInitParser+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxml2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char xmlInitParser (); int main () { return xmlInitParser (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xml2_xmlInitParser=yes else ac_cv_lib_xml2_xmlInitParser=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5 $as_echo "$ac_cv_lib_xml2_xmlInitParser" >&6; } if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXML2 1 _ACEOF LIBS="-lxml2 $LIBS" else as_fn_error $? "could not find libxml2" "$LINENO" 5 fi LIBS="$LIBS_SAVE" cat >>confdefs.h <<_ACEOF #define POSTGIS_LIBXML2_VERSION "$POSTGIS_LIBXML2_VERSION" _ACEOF # Check whether --with-geosconfig was given. if test "${with_geosconfig+set}" = set; then : withval=$with_geosconfig; GEOSCONFIG="$withval" else GEOSCONFIG="" fi if test "x$GEOSCONFIG" = "x"; then # Extract the first word of "geos-config", so it can be a program name with args. set dummy geos-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GEOSCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GEOSCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GEOSCONFIG="$GEOSCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GEOSCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GEOSCONFIG=$ac_cv_path_GEOSCONFIG if test -n "$GEOSCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GEOSCONFIG" >&5 $as_echo "$GEOSCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$GEOSCONFIG" = "x"; then as_fn_error $? "could not find geos-config within the current path. You may need to try re-running configure with a --with-geosconfig parameter." "$LINENO" 5 fi else if test "x$GEOSCONFIG" = "xyes"; then as_fn_error $? "you must specify a parameter to --with-geosconfig, e.g. --with-geosconfig=/path/to/geos-config" "$LINENO" 5 else if test -f $GEOSCONFIG; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using user-specified geos-config file: $GEOSCONFIG" >&5 $as_echo "Using user-specified geos-config file: $GEOSCONFIG" >&6; } else as_fn_error $? "the user-specified geos-config file $GEOSCONFIG does not exist" "$LINENO" 5 fi fi fi GEOS_MAJOR_VERSION=`$GEOSCONFIG --version | cut -d. -f1 | sed 's/[^0-9]//g'` GEOS_MINOR_VERSION=`$GEOSCONFIG --version | cut -d. -f2 | sed 's/[^0-9]//g'` GEOS_PATCH_VERSION=`$GEOSCONFIG --version | cut -d. -f3 | sed 's/[^0-9]//g'` if test "x$GEOS_PATCH_VERSION" = "x"; then GEOS_PATCH_VERSION="0"; fi GEOS_FULL_VERSION=`$GEOSCONFIG --version` POSTGIS_GEOS_VERSION="$GEOS_MAJOR_VERSION$GEOS_MINOR_VERSION" GEOS_NUMERIC_PATCH_VERSION=`printf "%02d" $GEOS_PATCH_VERSION` GEOS_NUMERIC_MINOR_VERSION=`printf "%02d" $GEOS_MINOR_VERSION` GEOS_NUMERIC_VERSION="$GEOS_MAJOR_VERSION$GEOS_NUMERIC_MINOR_VERSION$GEOS_NUMERIC_PATCH_VERSION" { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking GEOS version... $GEOS_FULL_VERSION" >&5 $as_echo "checking GEOS version... $GEOS_FULL_VERSION" >&6; } if test ! "$GEOS_NUMERIC_VERSION" -ge 30300; then as_fn_error $? "PostGIS requires GEOS >= 3.3.0" "$LINENO" 5 fi GEOS_LDFLAGS=`$GEOSCONFIG --ldflags` GEOS_CPPFLAGS=-I`$GEOSCONFIG --includes` CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$GEOS_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "geos_c.h" "ac_cv_header_geos_c_h" "$ac_includes_default" if test "x$ac_cv_header_geos_c_h" = xyes; then : else as_fn_error $? "could not find geos_c.h - you may need to specify the directory of a geos-config file using --with-geosconfig" "$LINENO" 5 fi CPPFLAGS="$CPPFLAGS_SAVE" LIBS_SAVE="$LIBS" LIBS="$GEOS_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initGEOS in -lgeos_c" >&5 $as_echo_n "checking for initGEOS in -lgeos_c... " >&6; } if ${ac_cv_lib_geos_c_initGEOS+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgeos_c $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initGEOS (); int main () { return initGEOS (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_geos_c_initGEOS=yes else ac_cv_lib_geos_c_initGEOS=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_geos_c_initGEOS" >&5 $as_echo "$ac_cv_lib_geos_c_initGEOS" >&6; } if test "x$ac_cv_lib_geos_c_initGEOS" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEOS_C 1 _ACEOF LIBS="-lgeos_c $LIBS" else as_fn_error $? "could not find libgeos_c - you may need to specify the directory of a geos-config file using --with-geosconfig" "$LINENO" 5 fi LIBS="$LIBS_SAVE" cat >>confdefs.h <<_ACEOF #define POSTGIS_GEOS_VERSION $POSTGIS_GEOS_VERSION _ACEOF # Check whether --with-sfcgal was given. if test "${with_sfcgal+set}" = set; then : withval=$with_sfcgal; SFCGAL_CONFIG="$withval" else # Extract the first word of "sfcgal-config", so it can be a program name with args. set dummy sfcgal-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SFCGAL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SFCGAL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SFCGAL_CONFIG="$SFCGAL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SFCGAL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SFCGAL_CONFIG=$ac_cv_path_SFCGAL_CONFIG if test -n "$SFCGAL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SFCGAL_CONFIG" >&5 $as_echo "$SFCGAL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi HAVE_SFCGAL="no" if test "x$with_sfcgal" != "xno"; then if test -x "$SFCGAL_CONFIG"; then SFCGAL_VERSION=`$SFCGAL_CONFIG --version` SFCGAL_LDFLAGS=`$SFCGAL_CONFIG --libs` SFCGAL_CPPFLAGS=`$SFCGAL_CONFIG --cflags`" -DHAVE_SFCGAL" SFCGAL_STATIC=`$SFCGAL_CONFIG --static` if test "x$SFCGAL_STATIC" = "xON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The SFCGAL version found is not installed as a dynamic library." >&5 $as_echo "$as_me: WARNING: The SFCGAL version found is not installed as a dynamic library." >&2;} else SFCGAL="sfcgal" HAVE_SFCGAL="yes" fi else if test "x$with_sfcgal" != "x"; then as_fn_error $? "sfcgal-config cannot be found. Please install sfcgal" "$LINENO" 5 fi fi fi GETTEXT_CFLAGS="" GETTEXT_LDFLAGS="" # Check whether --with-gettext was given. if test "${with_gettext+set}" = set; then : withval=$with_gettext; GETTEXT_PATH="$withval" else GETTEXT_PATH="yes" fi LDFLAGS_SAVE="$LDFLAGS" CFLAGS_SAVE="$CFLAGS" if test "x$GETTEXT_PATH" != "xno"; then if test "x$GETTEXT_PATH" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking user-specified gettext location: $GETTEXT_PATH" >&5 $as_echo "checking user-specified gettext location: $GETTEXT_PATH" >&6; } GETTEXT_CFLAGS="-I$GETTEXT_PATH/include" GETTEXT_LDFLAGS="-L$GETTEXT_PATH/lib" LDFLAGS="$GETTEXT_LDFLAGS $LDFLAGS" CFLAGS="$GETTEXT_CFLAGS $CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.17 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBICONV_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFPreferences.h> int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFLocale.h> int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iconv.h> #include <string.h> int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBINTL_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" if test "x$LIBINTL" = "x"; then USE_NLS=no fi fi LDFLAGS="$LDFLAGS_SAVE" CFLAGS="$CFLAGS_SAVE" # Check whether --with-projdir was given. if test "${with_projdir+set}" = set; then : withval=$with_projdir; PROJDIR="$withval" else PROJDIR="" fi if test ! "x$PROJDIR" = "x"; then if test "x$PROJDIR" = "xyes"; then as_fn_error $? "you must specify a parameter to --with-projdir, e.g. --with-projdir=/path/to" "$LINENO" 5 else if test -d "$PROJDIR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using user-specified proj directory: $PROJDIR" >&5 $as_echo "Using user-specified proj directory: $PROJDIR" >&6; } PROJ_CPPFLAGS="-I$PROJDIR/include" PROJ_LDFLAGS="-L$PROJDIR/lib" else as_fn_error $? "the --with-projdir directory \"$PROJDIR\" cannot be found" "$LINENO" 5 fi fi fi CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$PROJ_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "proj_api.h" "ac_cv_header_proj_api_h" "$ac_includes_default" if test "x$ac_cv_header_proj_api_h" = xyes; then : else as_fn_error $? "could not find proj_api.h - you may need to specify the directory of a PROJ.4 installation using --with-projdir" "$LINENO" 5 fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_STDINT_H #include <stdio.h> #endif #include "proj_api.h" int main () { FILE *fp; fp = fopen("conftest.out", "w"); fprintf(fp, "%d\n", PJ_VERSION); fclose(fp) ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : POSTGIS_PROJ_VERSION=`cat conftest.out | sed 's/\([0-9]\)\([0-9]\)\([0-9]\)/\1\2/'` else POSTGIS_PROJ_VERSION="" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi cat >>confdefs.h <<_ACEOF #define POSTGIS_PROJ_VERSION $POSTGIS_PROJ_VERSION _ACEOF CPPFLAGS="$CPPFLAGS_SAVE" if test ! "$POSTGIS_PROJ_VERSION" -ge 46; then as_fn_error $? "PostGIS requires PROJ >= 4.6.0" "$LINENO" 5 fi LIBS_SAVE="$LIBS" LIBS="$PROJ_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pj_get_release in -lproj" >&5 $as_echo_n "checking for pj_get_release in -lproj... " >&6; } if ${ac_cv_lib_proj_pj_get_release+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lproj $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pj_get_release (); int main () { return pj_get_release (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_proj_pj_get_release=yes else ac_cv_lib_proj_pj_get_release=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_proj_pj_get_release" >&5 $as_echo "$ac_cv_lib_proj_pj_get_release" >&6; } if test "x$ac_cv_lib_proj_pj_get_release" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPROJ 1 _ACEOF LIBS="-lproj $LIBS" else as_fn_error $? "could not find libproj - you may need to specify the directory of a PROJ.4 installation using --with-projdir" "$LINENO" 5 fi LIBS="$LIBS_SAVE" CHECK_JSON=yes HAVE_JSON=no # Check whether --with-json was given. if test "${with_json+set}" = set; then : withval=$with_json; CHECK_JSON="$withval" fi if test "$CHECK_JSON" != "no"; then # Check whether --with-jsondir was given. if test "${with_jsondir+set}" = set; then : withval=$with_jsondir; JSONDIR="$withval" else JSONDIR= fi if test ! "x$JSONDIR" = "x"; then if test "x$JSONDIR" = "xyes"; then as_fn_error $? "you must specify a parameter to --with-jsondir, e.g. --with-jsondir=/path/to" "$LINENO" 5 else if test ! -e "${JSONDIR}/include/json/json.h" -o \ ! \( -e "${JSONDIR}/lib/libjson.so" -o \ -e "${JSONDIR}/lib/libjson.dll" -o \ -e "${JSONDIR}/lib/libjson.dylib" -o \ -e "${JSONDIR}/bin/libjson.dll" -o \ -e "${JSONDIR}/lib/libjson.a" \) then as_fn_error $? "Cannot find json dev files in \"$JSONDIR\"" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using user-specified json-c directory: $JSONDIR" >&5 $as_echo "Using user-specified json-c directory: $JSONDIR" >&6; } JSON_CPPFLAGS="-I$JSONDIR/include" JSON_LDFLAGS="-L$JSONDIR/lib" fi fi CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$JSON_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "json-c/json.h" "ac_cv_header_json_c_json_h" "$ac_includes_default" if test "x$ac_cv_header_json_c_json_h" = xyes; then : HAVE_JSON=yes else ac_fn_c_check_header_mongrel "$LINENO" "json/json.h" "ac_cv_header_json_json_h" "$ac_includes_default" if test "x$ac_cv_header_json_json_h" = xyes; then : HAVE_JSON=yes fi fi CPPFLAGS="$CPPFLAGS_SAVE" LIBS_SAVE="$LIBS" LIBS="$JSON_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for json_object_get in -ljson-c" >&5 $as_echo_n "checking for json_object_get in -ljson-c... " >&6; } if ${ac_cv_lib_json_c_json_object_get+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljson-c $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char json_object_get (); int main () { return json_object_get (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_json_c_json_object_get=yes else ac_cv_lib_json_c_json_object_get=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_json_c_json_object_get" >&5 $as_echo "$ac_cv_lib_json_c_json_object_get" >&6; } if test "x$ac_cv_lib_json_c_json_object_get" = xyes; then : HAVE_JSON=yes; JSON_LDFLAGS="${JSON_LDFLAGS} -ljson-c" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for json_object_get in -ljson" >&5 $as_echo_n "checking for json_object_get in -ljson... " >&6; } if ${ac_cv_lib_json_json_object_get+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljson $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char json_object_get (); int main () { return json_object_get (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_json_json_object_get=yes else ac_cv_lib_json_json_object_get=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_json_json_object_get" >&5 $as_echo "$ac_cv_lib_json_json_object_get" >&6; } if test "x$ac_cv_lib_json_json_object_get" = xyes; then : HAVE_JSON=yes; JSON_LDFLAGS="${JSON_LDFLAGS} -ljson" fi fi LIBS="$LIBS_SAVE" if test "$HAVE_JSON" = "yes"; then $as_echo "#define HAVE_LIBJSON 1" >>confdefs.h fi fi # Check whether --with-gui was given. if test "${with_gui+set}" = set; then : withval=$with_gui; GUI="yes" else GUI="no" fi if test "x$GUI" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: GUI: Build requested, checking for dependencies (GKT+2.0)" >&5 $as_echo "GUI: Build requested, checking for dependencies (GKT+2.0)" >&6; } # Check whether --enable-gtktest was given. if test "${enable_gtktest+set}" = set; then : enableval=$enable_gtktest; else enable_gtktest=yes fi pkg_config_args=gtk+-2.0 for module in . do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo "*** pkg-config too old; version 0.7 or better required." no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=2.8.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK+ - version >= $min_gtk_version" >&5 $as_echo_n "checking for GTK+ - version >= $min_gtk_version... " >&6; } if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <gtk/gtk.h> #include <stdio.h> #include <stdlib.h> int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_gtk=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&5 $as_echo "yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6; } GTK_BUILD="gui" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <gtk/gtk.h> #include <stdio.h> int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed." fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" GTK_BUILD="" fi _gdk_tgt=`$PKG_CONFIG --variable=target gdk-2.0` if test "x$_gdk_tgt" = xquartz; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ige-mac-integration" >&5 $as_echo_n "checking for ige-mac-integration... " >&6; } if $PKG_CONFIG --exists "ige-mac-integration" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IGE_MAC_CFLAGS" >&5 $as_echo_n "checking for IGE_MAC_CFLAGS... " >&6; } IGE_MAC_CFLAGS=`$PKG_CONFIG --cflags "ige-mac-integration"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IGE_MAC_CFLAGS" >&5 $as_echo "$IGE_MAC_CFLAGS" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IGE_MAC_LIBS" >&5 $as_echo_n "checking for IGE_MAC_LIBS... " >&6; } IGE_MAC_LIBS=`$PKG_CONFIG --libs "ige-mac-integration"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IGE_MAC_LIBS" >&5 $as_echo "$IGE_MAC_LIBS" >&6; } else IGE_MAC_CFLAGS="" IGE_MAC_LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi rm -f conf.gtktest case $host in *mingw32*) GTK_WIN32_FLAGS=-mwindows GTK_WIN32_RES=shp2pgsql-gui.res GTK_WIN32_BUILD=gui-win32 ;; esac fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; POSTGIS_DEBUG_LEVEL=4 else POSTGIS_DEBUG_LEVEL=0 fi cat >>confdefs.h <<_ACEOF #define POSTGIS_DEBUG_LEVEL $POSTGIS_DEBUG_LEVEL _ACEOF # Check whether --enable-profile was given. if test "${enable_profile+set}" = set; then : enableval=$enable_profile; POSTGIS_PROFILE=1 else POSTGIS_PROFILE=0 fi cat >>confdefs.h <<_ACEOF #define POSTGIS_PROFILE $POSTGIS_PROFILE _ACEOF POSTGIS_VERSION="$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION USE_GEOS=1 USE_PROJ=1 USE_STATS=1" if test "$HAVE_LIBXML2" = "1"; then POSTGIS_VERSION="$POSTGIS_VERSION USE_LIBXML2=1" fi POSTGIS_LIB_VERSION="$POSTGIS_MAJOR_VERSION.$POSTGIS_MINOR_VERSION.$POSTGIS_MICRO_VERSION" POSTGIS_BUILD_DATE=`date -u "+%Y-%m-%d %H:%M:%S"` POSTGIS_SCRIPTS_VERSION="$POSTGIS_LIB_VERSION" cat >>confdefs.h <<_ACEOF #define POSTGIS_VERSION "$POSTGIS_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_LIB_VERSION "$POSTGIS_LIB_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_BUILD_DATE "$POSTGIS_BUILD_DATE" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_SCRIPTS_VERSION "$POSTGIS_SCRIPTS_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_AUTOCACHE_BBOX 1 _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_USE_STATS 1 _ACEOF CPPFLAGS="$PGSQL_CPPFLAGS $GEOS_CPPFLAGS $PROJ_CPPFLAGS $XML2_CPPFLAGS $SFCGAL_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: CPPFLAGS: $CPPFLAGS" >&5 $as_echo "CPPFLAGS: $CPPFLAGS" >&6; } SHLIB_LINK="$PGSQL_LDFLAGS $GEOS_LDFLAGS $PROJ_LDFLAGS -lgeos_c -lproj $JSON_LDFLAGS $XML2_LDFLAGS $SFCGAL_LDFLAGS" # Check whether --with-topology was given. if test "${with_topology+set}" = set; then : withval=$with_topology; fi if test "x$with_topology" != "xno"; then TOPOLOGY="topology" { $as_echo "$as_me:${as_lineno-$LINENO}: result: TOPOLOGY: Topology support requested" >&5 $as_echo "TOPOLOGY: Topology support requested" >&6; } if test "$GEOS_NUMERIC_VERSION" -lt 30302; then as_fn_error $? "Topology requires GEOS version >= 3.3.2. Use --without-topology or install a newer GEOS." "$LINENO" 5 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: TOPOLOGY: Topology support disabled" >&5 $as_echo "TOPOLOGY: Topology support disabled" >&6; } fi SRID_MAX=999999 SRID_USR_MAX=998999 # Check whether --with-raster was given. if test "${with_raster+set}" = set; then : withval=$with_raster; fi if test "x$with_raster" != "xno"; then RASTER="raster" { $as_echo "$as_me:${as_lineno-$LINENO}: result: RASTER: Raster support requested" >&5 $as_echo "RASTER: Raster support requested" >&6; } ac_config_headers="$ac_config_headers raster/raster_config.h" POSTGIS_RASTER_MAJOR_VERSION=`cat raster/Version.config | grep POSTGIS_RASTER_MAJOR_VERSION | sed 's/[^=]*=\([0-9]\)/\1/g'` POSTGIS_RASTER_MINOR_VERSION=`cat raster/Version.config | grep POSTGIS_RASTER_MINOR_VERSION | sed 's/[^=]*=\([0-9]\)/\1/g'` POSTGIS_RASTER_MICRO_VERSION=`cat raster/Version.config | grep POSTGIS_RASTER_MICRO_VERSION | sed 's/[^=]*=\([0-9]\)/\1/g'` cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_MAJOR_VERSION "$POSTGIS_RASTER_MAJOR_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_MINOR_VERSION "$POSTGIS_RASTER_MINOR_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_MICRO_VERSION "$POSTGIS_RASTER_MICRO_VERSION" _ACEOF POSTGIS_RASTER_VERSION="$POSTGIS_RASTER_MAJOR_VERSION.$POSTGIS_RASTER_MINOR_VERSION" POSTGIS_RASTER_LIB_VERSION="$POSTGIS_RASTER_MAJOR_VERSION.$POSTGIS_RASTER_MINOR_VERSION.$POSTGIS_RASTER_MICRO_VERSION" POSTGIS_RASTER_BUILD_DATE=`date -u "+%Y-%m-%d %H:%M:%S"` POSTGIS_RASTER_SCRIPTS_VERSION="$POSTGIS_RASTER_LIB_VERSION" cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_VERSION "$POSTGIS_RASTER_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_LIB_VERSION "$POSTGIS_RASTER_LIB_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_BUILD_DATE "$POSTGIS_RASTER_BUILD_DATE" _ACEOF cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_SCRIPTS_VERSION "$POSTGIS_RASTER_SCRIPTS_VERSION" _ACEOF # Check whether --with-raster-dblwarning was given. if test "${with_raster_dblwarning+set}" = set; then : withval=$with_raster_dblwarning; POSTGIS_RASTER_WARN_ON_TRUNCATION=1 else POSTGIS_RASTER_WARN_ON_TRUNCATION=0 fi cat >>confdefs.h <<_ACEOF #define POSTGIS_RASTER_WARN_ON_TRUNCATION $POSTGIS_RASTER_WARN_ON_TRUNCATION _ACEOF USE_GDAL_SOURCE_TREE="no" LIBGDAL_CFLAGS="" LIBGDAL_LDFLAGS="" LIBGDAL_DEPLIBS_LDFLAGS="" GDAL_MIN_VERSION=1.8.0 GDAL_MIN_VERSION_NUMBER=180 # Check whether --with-gdalconfig was given. if test "${with_gdalconfig+set}" = set; then : withval=$with_gdalconfig; GDAL_CONFIG="$withval" else # Extract the first word of "gdal-config", so it can be a program name with args. set dummy gdal-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GDAL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GDAL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GDAL_CONFIG="$GDAL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GDAL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GDAL_CONFIG=$ac_cv_path_GDAL_CONFIG if test -n "$GDAL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDAL_CONFIG" >&5 $as_echo "$GDAL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking GDAL version" >&5 $as_echo_n "checking GDAL version... " >&6; } if test -x "$GDAL_CONFIG"; then GDAL_MAJOR_VERSION=`$GDAL_CONFIG --version | cut -d. -f1 | sed 's/[^0-9]//g'` GDAL_MINOR_VERSION=`$GDAL_CONFIG --version | cut -d. -f2 | sed 's/[^0-9]//g'` GDAL_PATCH_VERSION=`$GDAL_CONFIG --version | cut -d. -f3 | sed 's/[^0-9]//g'` GDAL_FULL_VERSION=`$GDAL_CONFIG --version` POSTGIS_GDAL_VERSION="$GDAL_MAJOR_VERSION$GDAL_MINOR_VERSION" GDAL_VERSION_NUMBER="$GDAL_MAJOR_VERSION$GDAL_MINOR_VERSION$GDAL_PATCH_VERSION" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDAL_FULL_VERSION" >&5 $as_echo "$GDAL_FULL_VERSION" >&6; } if test ! "$GDAL_VERSION_NUMBER" -ge "$GDAL_MIN_VERSION_NUMBER" ; then as_fn_error $? "PostGIS raster requires GDAL >= $GDAL_MIN_VERSION. Use --without-raster to build without raster support." "$LINENO" 5 fi cat >>confdefs.h <<_ACEOF #define POSTGIS_GDAL_VERSION $POSTGIS_GDAL_VERSION _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OGR enabled" >&5 $as_echo_n "checking for OGR enabled... " >&6; } OGR_ENABLED=`$GDAL_CONFIG --ogr-enabled` if test "x$OGR_ENABLED" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OGR_ENABLED" >&5 $as_echo "$OGR_ENABLED" >&6; } as_fn_error $? "PostGIS raster requires OGR to be enabled in GDAL. Use --without-raster to build without raster support." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OGR_ENABLED" >&5 $as_echo "$OGR_ENABLED" >&6; } LIBGDAL_LDFLAGS=`$GDAL_CONFIG --libs` LIBGDAL_CFLAGS=`$GDAL_CONFIG --cflags` CPPFLAGS_SAVE="$CPPFLAGS" CPPFLAGS="$LIBGDAL_CFLAGS" CFLAGS_SAVE="$CFLAGS" CFLAGS="" LIBS_SAVE="$LIBS" LIBS="$LIBGDAL_LDFLAGS" for ac_header in gdal.h ogr_api.h cpl_conv.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else as_fn_error $? "could not find GDAL headers" "$LINENO" 5 fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GDALAllRegister" >&5 $as_echo_n "checking for library containing GDALAllRegister... " >&6; } if ${ac_cv_search_GDALAllRegister+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GDALAllRegister (); int main () { return GDALAllRegister (); ; return 0; } _ACEOF for ac_lib in '' gdal; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GDALAllRegister=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GDALAllRegister+:} false; then : break fi done if ${ac_cv_search_GDALAllRegister+:} false; then : else ac_cv_search_GDALAllRegister=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GDALAllRegister" >&5 $as_echo "$ac_cv_search_GDALAllRegister" >&6; } ac_res=$ac_cv_search_GDALAllRegister if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "could not find GDAL" "$LINENO" 5 fi LIBS="$LIBGDAL_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing OGRRegisterAll" >&5 $as_echo_n "checking for library containing OGRRegisterAll... " >&6; } if ${ac_cv_search_OGRRegisterAll+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char OGRRegisterAll (); int main () { return OGRRegisterAll (); ; return 0; } _ACEOF for ac_lib in '' gdal; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_OGRRegisterAll=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_OGRRegisterAll+:} false; then : break fi done if ${ac_cv_search_OGRRegisterAll+:} false; then : else ac_cv_search_OGRRegisterAll=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_OGRRegisterAll" >&5 $as_echo "$ac_cv_search_OGRRegisterAll" >&6; } ac_res=$ac_cv_search_OGRRegisterAll if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "could not find OGR" "$LINENO" 5 fi LIBS="$LIBGDAL_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GDALFPolygonize" >&5 $as_echo_n "checking for library containing GDALFPolygonize... " >&6; } if ${ac_cv_search_GDALFPolygonize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GDALFPolygonize (); int main () { return GDALFPolygonize (); ; return 0; } _ACEOF for ac_lib in '' gdal; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GDALFPolygonize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GDALFPolygonize+:} false; then : break fi done if ${ac_cv_search_GDALFPolygonize+:} false; then : else ac_cv_search_GDALFPolygonize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GDALFPolygonize" >&5 $as_echo "$ac_cv_search_GDALFPolygonize" >&6; } ac_res=$ac_cv_search_GDALFPolygonize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" cat >>confdefs.h <<_ACEOF #define GDALFPOLYGONIZE 1 _ACEOF fi CPPFLAGS="$CPPFLAGS_SAVE" CFLAGS="$CFLAGS_SAVE" LIBS="$LIBS_SAVE" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } as_fn_error $? "gdal-config not found. Use --without-raster or try --with-gdalconfig=<path to gdal-config>" "$LINENO" 5 fi RT_CORE_LIB=corelib RT_PG_LIB=pglib RT_LOADER=rtloader RT_POSTGIS_SQL=rtpostgis.sql RT_MAKEFILE_LIST=" raster/Makefile \ raster/rt_core/Makefile \ raster/rt_pg/Makefile \ raster/loader/Makefile \ raster/test/Makefile \ raster/test/cunit/Makefile \ raster/test/regress/Makefile \ raster/scripts/Makefile \ raster/scripts/python/Makefile" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: RASTER: Raster support disabled" >&5 $as_echo "RASTER: Raster support disabled" >&6; } RT_MAKEFILE_LIST="raster/Makefile" fi EXTENSIONS="" if test $POSTGIS_PGSQL_VERSION -ge 91; then if test \ "x$XSLTPROC" != "x" -o \ -e doc/postgis_comments.sql -a \ -e doc/raster_comments.sql; then if test "x$RASTER" = "xraster"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabling PostgreSQL extension support..." >&5 $as_echo "enabling PostgreSQL extension support..." >&6; } EXTENSIONS=extensions fi fi fi ac_config_files="$ac_config_files GNUmakefile extensions/Makefile extensions/postgis/Makefile extensions/postgis/postgis.control extensions/postgis_topology/Makefile extensions/postgis_topology/postgis_topology.control extensions/postgis_tiger_geocoder/Makefile extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control liblwgeom/Makefile liblwgeom/cunit/Makefile liblwgeom/liblwgeom.h libpgcommon/Makefile libpgcommon/cunit/Makefile postgis/Makefile postgis/sqldefines.h loader/Makefile loader/cunit/Makefile topology/Makefile topology/test/Makefile regress/Makefile doc/Makefile doc/Makefile.comments doc/html/image_src/Makefile utils/Makefile java/jdbc/Makefile $RT_MAKEFILE_LIST" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "postgis_config.h") CONFIG_HEADERS="$CONFIG_HEADERS postgis_config.h" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "raster/raster_config.h") CONFIG_HEADERS="$CONFIG_HEADERS raster/raster_config.h" ;; "GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;; "extensions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Makefile" ;; "extensions/postgis/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/postgis/Makefile" ;; "extensions/postgis/postgis.control") CONFIG_FILES="$CONFIG_FILES extensions/postgis/postgis.control" ;; "extensions/postgis_topology/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/postgis_topology/Makefile" ;; "extensions/postgis_topology/postgis_topology.control") CONFIG_FILES="$CONFIG_FILES extensions/postgis_topology/postgis_topology.control" ;; "extensions/postgis_tiger_geocoder/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/postgis_tiger_geocoder/Makefile" ;; "extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control") CONFIG_FILES="$CONFIG_FILES extensions/postgis_tiger_geocoder/postgis_tiger_geocoder.control" ;; "liblwgeom/Makefile") CONFIG_FILES="$CONFIG_FILES liblwgeom/Makefile" ;; "liblwgeom/cunit/Makefile") CONFIG_FILES="$CONFIG_FILES liblwgeom/cunit/Makefile" ;; "liblwgeom/liblwgeom.h") CONFIG_FILES="$CONFIG_FILES liblwgeom/liblwgeom.h" ;; "libpgcommon/Makefile") CONFIG_FILES="$CONFIG_FILES libpgcommon/Makefile" ;; "libpgcommon/cunit/Makefile") CONFIG_FILES="$CONFIG_FILES libpgcommon/cunit/Makefile" ;; "postgis/Makefile") CONFIG_FILES="$CONFIG_FILES postgis/Makefile" ;; "postgis/sqldefines.h") CONFIG_FILES="$CONFIG_FILES postgis/sqldefines.h" ;; "loader/Makefile") CONFIG_FILES="$CONFIG_FILES loader/Makefile" ;; "loader/cunit/Makefile") CONFIG_FILES="$CONFIG_FILES loader/cunit/Makefile" ;; "topology/Makefile") CONFIG_FILES="$CONFIG_FILES topology/Makefile" ;; "topology/test/Makefile") CONFIG_FILES="$CONFIG_FILES topology/test/Makefile" ;; "regress/Makefile") CONFIG_FILES="$CONFIG_FILES regress/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/Makefile.comments") CONFIG_FILES="$CONFIG_FILES doc/Makefile.comments" ;; "doc/html/image_src/Makefile") CONFIG_FILES="$CONFIG_FILES doc/html/image_src/Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "java/jdbc/Makefile") CONFIG_FILES="$CONFIG_FILES java/jdbc/Makefile" ;; "$RT_MAKEFILE_LIST") CONFIG_FILES="$CONFIG_FILES $RT_MAKEFILE_LIST" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' <confdefs.h | sed ' s/'"$ac_delim"'/"\\\ "/g' >>$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostGIS is now configured for ${host}" >&5 $as_echo " PostGIS is now configured for ${host}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: -------------- Compiler Info ------------- " >&5 $as_echo " -------------- Compiler Info ------------- " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: C compiler: ${CC} ${CFLAGS}" >&5 $as_echo " C compiler: ${CC} ${CFLAGS}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: C++ compiler: ${CXX} ${CXXFLAGS}" >&5 $as_echo " C++ compiler: ${CXX} ${CXXFLAGS}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: SQL preprocessor: ${SQLPP}" >&5 $as_echo " SQL preprocessor: ${SQLPP}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: -------------- Dependencies -------------- " >&5 $as_echo " -------------- Dependencies -------------- " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: GEOS config: ${GEOSCONFIG}" >&5 $as_echo " GEOS config: ${GEOSCONFIG}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: GEOS version: ${GEOS_FULL_VERSION}" >&5 $as_echo " GEOS version: ${GEOS_FULL_VERSION}" >&6; } if test "x$RASTER" = "xraster"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: GDAL config: ${GDAL_CONFIG}" >&5 $as_echo " GDAL config: ${GDAL_CONFIG}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: GDAL version: ${GDAL_FULL_VERSION}" >&5 $as_echo " GDAL version: ${GDAL_FULL_VERSION}" >&6; } fi if test "x$SFCGAL" = "xsfcgal"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: SFCGAL config: ${SFCGAL_CONFIG}" >&5 $as_echo " SFCGAL config: ${SFCGAL_CONFIG}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: SFCGAL version: ${SFCGAL_VERSION}" >&5 $as_echo " SFCGAL version: ${SFCGAL_VERSION}" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostgreSQL config: ${PG_CONFIG}" >&5 $as_echo " PostgreSQL config: ${PG_CONFIG}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostgreSQL version: ${PGSQL_FULL_VERSION}" >&5 $as_echo " PostgreSQL version: ${PGSQL_FULL_VERSION}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: PROJ4 version: ${POSTGIS_PROJ_VERSION}" >&5 $as_echo " PROJ4 version: ${POSTGIS_PROJ_VERSION}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Libxml2 config: ${XML2CONFIG}" >&5 $as_echo " Libxml2 config: ${XML2CONFIG}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Libxml2 version: ${POSTGIS_LIBXML2_VERSION}" >&5 $as_echo " Libxml2 version: ${POSTGIS_LIBXML2_VERSION}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: JSON-C support: ${HAVE_JSON}" >&5 $as_echo " JSON-C support: ${HAVE_JSON}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostGIS debug level: ${POSTGIS_DEBUG_LEVEL}" >&5 $as_echo " PostGIS debug level: ${POSTGIS_DEBUG_LEVEL}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Perl: ${PERL}" >&5 $as_echo " Perl: ${PERL}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: --------------- Extensions --------------- " >&5 $as_echo " --------------- Extensions --------------- " >&6; } if test "x$RASTER" = "xraster"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostGIS Raster: enabled" >&5 $as_echo " PostGIS Raster: enabled" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostGIS Raster: disabled" >&5 $as_echo " PostGIS Raster: disabled" >&6; } fi if test "x$TOPOLOGY" = "xtopology"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostGIS Topology: enabled" >&5 $as_echo " PostGIS Topology: enabled" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostGIS Topology: disabled" >&5 $as_echo " PostGIS Topology: disabled" >&6; } fi if test "x$SFCGAL" = "xsfcgal"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: SFCGAL support: enabled" >&5 $as_echo " SFCGAL support: enabled" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: SFCGAL support: disabled" >&5 $as_echo " SFCGAL support: disabled" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: -------- Documentation Generation -------- " >&5 $as_echo " -------- Documentation Generation -------- " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: xsltproc: ${XSLTPROC}" >&5 $as_echo " xsltproc: ${XSLTPROC}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: xsl style sheets: ${XSLBASE}" >&5 $as_echo " xsl style sheets: ${XSLBASE}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: dblatex: ${DBLATEX}" >&5 $as_echo " dblatex: ${DBLATEX}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: convert: ${IMAGEMAGICK}" >&5 $as_echo " convert: ${IMAGEMAGICK}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: mathml2.dtd: ${MATHML2_DTD}" >&5 $as_echo " mathml2.dtd: ${MATHML2_DTD}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } if test "$GEOS_NUMERIC_VERSION" -lt 30302; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: --------- GEOS VERSION NOTICE ------------ " >&5 $as_echo " --------- GEOS VERSION NOTICE ------------ " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: You are building against GEOS ${GEOS_FULL_VERSION} " >&5 $as_echo " You are building against GEOS ${GEOS_FULL_VERSION} " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: To take advantage of all the features of " >&5 $as_echo " To take advantage of all the features of " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: PostGIS we recommend you build using " >&5 $as_echo " PostGIS we recommend you build using " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: GEOS 3.3.2 or higher. You can download " >&5 $as_echo " GEOS 3.3.2 or higher. You can download " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: the latest versions from " >&5 $as_echo " the latest versions from " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: http://trac.osgeo.org/geos " >&5 $as_echo " http://trac.osgeo.org/geos " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/���������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015063� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/���������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016176� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/rtpostgis_upgrade_cleanup.sql.in�������������������������������0000644�0000000�0000000�00000015070�12236725100�024576� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: rtpostgis_upgrade.sql.in.c 8448 2011-12-16 22:07:26Z dustymugs $ -- -- PostGIS Raster - Raster Type for PostGIS -- http://trac.osgeo.org/postgis/wiki/WKTRaster -- -- Copyright (c) 2011 Regina Obe <lr@pcorp.us> -- Copyright (C) 2011 Regents of the University of California -- <bkpark@ucdavis.edu> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- WARNING: Any change in this file must be evaluated for compatibility. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- This section is take add / drop things like CASTS, TYPES etc. that have changed -- Since these are normally excluded from sed upgrade generator -- they must be explicitly added -- So that they can immediately be recreated. -- It is not run thru the sed processor to prevent it from being stripped -- Note: We put these in separate file from drop since the extension module has -- to add additional logic to drop them from the extension as well #include "sqldefines.h" /** -- GIST operator functions -- these don't seem necessary DROP OPERATOR IF EXISTS << (raster, raster); DROP FUNCTION IF EXISTS st_left(raster, raster); DROP OPERATOR IF EXISTS &< (raster, raster); DROP FUNCTION IF EXISTS st_overleft(raster, raster); DROP OPERATOR IF EXISTS <<| (raster, raster); DROP FUNCTION IF EXISTS st_below(raster, raster); DROP OPERATOR IF EXISTS &<| (raster, raster); DROP FUNCTION IF EXISTS st_overbelow(raster, raster); DROP OPERATOR IF EXISTS && (raster, raster); DROP FUNCTION IF EXISTS st_overlap(raster, raster); DROP OPERATOR IF EXISTS &> (raster, raster); DROP FUNCTION IF EXISTS st_overright(raster, raster); DROP OPERATOR IF EXISTS >> (raster, raster); DROP FUNCTION IF EXISTS st_right(raster, raster); DROP OPERATOR IF EXISTS |&> (raster, raster); DROP FUNCTION IF EXISTS st_overabove(raster, raster); DROP OPERATOR IF EXISTS |>> (raster, raster); DROP FUNCTION IF EXISTS st_above(raster, raster); DROP OPERATOR IF EXISTS ~= (raster, raster); DROP FUNCTION IF EXISTS st_same(raster, raster); DROP OPERATOR IF EXISTS @ (raster, raster); DROP FUNCTION IF EXISTS st_contained(raster, raster); DROP OPERATOR IF EXISTS ~ (raster, raster); DROP FUNCTION IF EXISTS st_contain(raster, raster); **/ -- drop st_bytea DROP CAST IF EXISTS (raster AS bytea); DROP FUNCTION IF EXISTS st_bytea(raster); CREATE OR REPLACE FUNCTION bytea(raster) RETURNS bytea AS 'MODULE_PATHNAME', 'RASTER_to_bytea' LANGUAGE 'c' IMMUTABLE STRICT; CREATE CAST (raster AS bytea) WITH FUNCTION bytea(raster) AS ASSIGNMENT; -- drop box2d DROP CAST IF EXISTS (raster AS box2d); DROP FUNCTION IF EXISTS box2d(raster); -- If we are running 9.0+ we can use DO plpgsql to check -- and only create if not exists so no need to force a drop -- that way if people are using it, we will not mess them up DO language 'plpgsql' $$ BEGIN -- create raster box3d cast if it does not exist IF NOT EXISTS(SELECT cs.typname AS source FROM pg_cast AS ca INNER JOIN pg_type AS cs ON ca.castsource = cs.oid INNER JOIN pg_type AS ct ON ca.casttarget = ct.oid WHERE cs.typname = 'raster' AND ct.typname = 'box3d') THEN CREATE OR REPLACE FUNCTION box3d(raster) RETURNS box3d AS 'SELECT box3d(st_convexhull($1))' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE CAST (raster AS box3d) WITH FUNCTION box3d(raster) AS ASSIGNMENT; END IF; -- create addbandarg type if it does not exist IF NOT EXISTS(SELECT typname FROM pg_type WHERE typname = 'addbandarg') THEN CREATE TYPE addbandarg AS ( index int, pixeltype text, initialvalue float8, nodataval float8 ); END IF; -- create agg_samealignment type if it does not exist IF NOT EXISTS(SELECT typname FROM pg_type WHERE typname = 'agg_samealignment') THEN CREATE TYPE agg_samealignment AS ( refraster raster, aligned boolean ); END IF; -- create unionarg type if it does not exist IF NOT EXISTS(SELECT typname FROM pg_type WHERE typname = 'unionarg') THEN CREATE TYPE unionarg AS (nband integer, uniontype text); END IF; -- create rastbandarg type if it does not exist IF NOT EXISTS(SELECT typname FROM pg_type WHERE typname = 'rastbandarg') THEN CREATE TYPE rastbandarg AS ( rast raster, nband integer ); END IF; END$$; -- make geometry cast ASSIGNMENT DROP CAST IF EXISTS (raster AS geometry); CREATE CAST (raster AS geometry) WITH FUNCTION st_convexhull(raster) AS ASSIGNMENT; -- add missing OPERATORs DO LANGUAGE 'plpgsql' $$ BEGIN IF NOT EXISTS ( SELECT proname FROM pg_proc f JOIN pg_type r ON r.typname = 'raster' AND (f.proargtypes::oid[])[0] = r.oid JOIN pg_type g ON g.typname = 'geometry' AND (f.proargtypes::oid[])[1] = g.oid WHERE proname = 'raster_contained_by_geometry' ) THEN CREATE OR REPLACE FUNCTION raster_contained_by_geometry(raster, geometry) RETURNS bool AS 'select $1::geometry @ $2' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OPERATOR @ ( LEFTARG = raster, RIGHTARG = geometry, PROCEDURE = raster_contained_by_geometry, COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel ); END IF; IF NOT EXISTS ( SELECT proname FROM pg_proc f JOIN pg_type r ON r.typname = 'raster' AND (f.proargtypes::oid[])[1] = r.oid JOIN pg_type g ON g.typname = 'geometry' AND (f.proargtypes::oid[])[0] = g.oid WHERE proname = 'geometry_contained_by_raster' ) THEN CREATE OR REPLACE FUNCTION geometry_contained_by_raster(geometry, raster) RETURNS bool AS 'select $1 @ $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OPERATOR @ ( LEFTARG = geometry, RIGHTARG = raster, PROCEDURE = geometry_contained_by_raster, COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel ); END IF; END; $$; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/rtpostgis.sql.in�����������������������������������������������0000644�0000000�0000000�00001020033�12313210671�021352� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- -- PostGIS Raster - Raster Type for PostGIS -- http://trac.osgeo.org/postgis/wiki/WKTRaster -- -- Copyright (c) 2009-2012 Sandro Santilli <strk@keybit.net> -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- Copyright (c) 2009-2010 Jorge Arevalo <jorge.arevalo@deimos-space.com> -- Copyright (c) 2009-2010 Mateusz Loskot <mateusz@loskot.net> -- Copyright (c) 2010 David Zwarg <dzwarg@azavea.com> -- Copyright (C) 2011-2013 Regents of the University of California -- <bkpark@ucdavis.edu> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- WARNING: Any change in this file must be evaluated for compatibility. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include "../../postgis/sqldefines.h" SET client_min_messages TO warning; -- INSTALL VERSION: POSTGIS_LIB_VERSION BEGIN; ------------------------------------------------------------------------------ -- RASTER Type ------------------------------------------------------------------------------ CREATE OR REPLACE FUNCTION raster_in(cstring) RETURNS raster AS 'MODULE_PATHNAME','RASTER_in' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_out(raster) RETURNS cstring AS 'MODULE_PATHNAME','RASTER_out' LANGUAGE 'c' IMMUTABLE STRICT; CREATE TYPE raster ( alignment = double, internallength = variable, input = raster_in, output = raster_out, storage = extended ); ------------------------------------------------------------------------------ -- FUNCTIONS ------------------------------------------------------------------------------ ----------------------------------------------------------------------- -- Raster Version ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION postgis_raster_lib_version() RETURNS text AS 'MODULE_PATHNAME', 'RASTER_lib_version' LANGUAGE 'c' IMMUTABLE; -- a new lib will require a new session CREATE OR REPLACE FUNCTION postgis_raster_scripts_installed() RETURNS text AS _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_raster_lib_build_date() RETURNS text AS 'MODULE_PATHNAME', 'RASTER_lib_build_date' LANGUAGE 'c' IMMUTABLE; -- a new lib will require a new session CREATE OR REPLACE FUNCTION postgis_gdal_version() RETURNS text AS 'MODULE_PATHNAME', 'RASTER_gdal_version' LANGUAGE 'c' IMMUTABLE; ----------------------------------------------------------------------- -- generic composite type of a raster and its band index ----------------------------------------------------------------------- CREATE TYPE rastbandarg AS ( rast raster, nband integer ); ----------------------------------------------------------------------- -- generic composite type of a geometry and value ----------------------------------------------------------------------- CREATE TYPE geomval AS ( geom geometry, val double precision ); ----------------------------------------------------------------------- -- Raster Accessors ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_convexhull(raster) RETURNS geometry AS 'MODULE_PATHNAME','RASTER_convex_hull' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_minconvexhull( rast raster, nband integer DEFAULT NULL ) RETURNS geometry AS 'MODULE_PATHNAME','RASTER_convex_hull' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION box3d(raster) RETURNS box3d AS 'select box3d(st_convexhull($1))' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_envelope(raster) RETURNS geometry AS 'select st_envelope(st_convexhull($1))' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_height(raster) RETURNS integer AS 'MODULE_PATHNAME','RASTER_getHeight' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_numbands(raster) RETURNS integer AS 'MODULE_PATHNAME','RASTER_getNumBands' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_scalex(raster) RETURNS float8 AS 'MODULE_PATHNAME','RASTER_getXScale' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_scaley(raster) RETURNS float8 AS 'MODULE_PATHNAME','RASTER_getYScale' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_skewx(raster) RETURNS float8 AS 'MODULE_PATHNAME','RASTER_getXSkew' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_skewy(raster) RETURNS float8 AS 'MODULE_PATHNAME','RASTER_getYSkew' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_srid(raster) RETURNS integer AS 'MODULE_PATHNAME','RASTER_getSRID' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_upperleftx(raster) RETURNS float8 AS 'MODULE_PATHNAME','RASTER_getXUpperLeft' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_upperlefty(raster) RETURNS float8 AS 'MODULE_PATHNAME','RASTER_getYUpperLeft' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_width(raster) RETURNS integer AS 'MODULE_PATHNAME','RASTER_getWidth' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_pixelwidth(raster) RETURNS float8 AS 'MODULE_PATHNAME', 'RASTER_getPixelWidth' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_pixelheight(raster) RETURNS float8 AS 'MODULE_PATHNAME', 'RASTER_getPixelHeight' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_geotransform(raster, OUT imag double precision, OUT jmag double precision, OUT theta_i double precision, OUT theta_ij double precision, OUT xoffset double precision, OUT yoffset double precision) AS 'MODULE_PATHNAME', 'RASTER_getGeotransform' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_rotation(raster) RETURNS float8 AS $$ SELECT (ST_Geotransform($1)).theta_i $$ LANGUAGE 'sql' VOLATILE; CREATE OR REPLACE FUNCTION st_metadata( rast raster, OUT upperleftx double precision, OUT upperlefty double precision, OUT width int, OUT height int, OUT scalex double precision, OUT scaley double precision, OUT skewx double precision, OUT skewy double precision, OUT srid int, OUT numbands int ) AS 'MODULE_PATHNAME', 'RASTER_metadata' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_summary(rast raster) RETURNS text AS $$ DECLARE extent box2d; metadata record; bandmetadata record; msg text; msgset text[]; BEGIN extent := ST_Extent(rast::geometry); metadata := ST_Metadata(rast); msg := 'Raster of ' || metadata.width || 'x' || metadata.height || ' pixels has ' || metadata.numbands || ' '; IF metadata.numbands = 1 THEN msg := msg || 'band '; ELSE msg := msg || 'bands '; END IF; msg := msg || 'and extent of ' || extent; IF metadata.skewx::numeric(16, 10) <> 0::numeric(16, 10) OR metadata.skewy::numeric(16, 10) <> 0::numeric(16, 10) THEN msg := 'Skewed ' || overlay(msg placing 'r' from 1 for 1); END IF; msgset := Array[]::text[] || msg; FOR bandmetadata IN SELECT * FROM ST_BandMetadata(rast, ARRAY[]::int[]) LOOP msg := 'band ' || bandmetadata.bandnum || ' of pixtype ' || bandmetadata.pixeltype || ' is '; IF bandmetadata.isoutdb IS FALSE THEN msg := msg || 'in-db '; ELSE msg := msg || 'out-db '; END IF; msg := msg || 'with '; IF bandmetadata.nodatavalue IS NOT NULL THEN msg := msg || 'NODATA value of ' || bandmetadata.nodatavalue; ELSE msg := msg || 'no NODATA value'; END IF; msgset := msgset || (' ' || msg); END LOOP; RETURN array_to_string(msgset, E'\n'); END; $$ LANGUAGE 'plpgsql' STABLE STRICT; ----------------------------------------------------------------------- -- Constructor ST_MakeEmptyRaster ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_makeemptyraster(width int, height int, upperleftx float8, upperlefty float8, scalex float8, scaley float8, skewx float8, skewy float8, srid int4 DEFAULT 0) RETURNS RASTER AS 'MODULE_PATHNAME', 'RASTER_makeEmpty' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_makeemptyraster(width int, height int, upperleftx float8, upperlefty float8, pixelsize float8) RETURNS raster AS $$ SELECT st_makeemptyraster($1, $2, $3, $4, $5, -($5), 0, 0, ST_SRID('POINT(0 0)'::geometry)) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_makeemptyraster(rast raster) RETURNS raster AS $$ DECLARE w int; h int; ul_x double precision; ul_y double precision; scale_x double precision; scale_y double precision; skew_x double precision; skew_y double precision; sr_id int; BEGIN SELECT width, height, upperleftx, upperlefty, scalex, scaley, skewx, skewy, srid INTO w, h, ul_x, ul_y, scale_x, scale_y, skew_x, skew_y, sr_id FROM ST_Metadata(rast); RETURN st_makeemptyraster(w, h, ul_x, ul_y, scale_x, scale_y, skew_x, skew_y, sr_id); END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- Constructor ST_AddBand ----------------------------------------------------------------------- CREATE TYPE addbandarg AS ( index int, pixeltype text, initialvalue float8, nodataval float8 ); CREATE OR REPLACE FUNCTION st_addband(rast raster, addbandargset addbandarg[]) RETURNS RASTER AS 'MODULE_PATHNAME', 'RASTER_addBand' LANGUAGE 'c' IMMUTABLE STRICT; -- This function can not be STRICT, because nodataval can be NULL indicating that no nodata value should be set CREATE OR REPLACE FUNCTION st_addband( rast raster, index int, pixeltype text, initialvalue float8 DEFAULT 0., nodataval float8 DEFAULT NULL ) RETURNS raster AS $$ SELECT st_addband($1, ARRAY[ROW($2, $3, $4, $5)]::addbandarg[]) $$ LANGUAGE 'sql' IMMUTABLE; -- This function can not be STRICT, because nodataval can be NULL indicating that no nodata value should be set CREATE OR REPLACE FUNCTION st_addband( rast raster, pixeltype text, initialvalue float8 DEFAULT 0., nodataval float8 DEFAULT NULL ) RETURNS raster AS $$ SELECT st_addband($1, ARRAY[ROW(NULL, $2, $3, $4)]::addbandarg[]) $$ LANGUAGE 'sql' IMMUTABLE; -- This function can not be STRICT, because torastindex can not be determined (could be st_numbands(raster) though) CREATE OR REPLACE FUNCTION st_addband( torast raster, fromrast raster, fromband int DEFAULT 1, torastindex int DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_copyBand' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_addband( torast raster, fromrasts raster[], fromband integer DEFAULT 1, torastindex int DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_addBandRasterArray' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_addband( rast raster, index int, outdbfile text, outdbindex int[], nodataval double precision DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_addBandOutDB' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_addband( rast raster, outdbfile text, outdbindex int[], index int DEFAULT NULL, nodataval double precision DEFAULT NULL ) RETURNS raster AS $$ SELECT ST_AddBand($1, $4, $2, $3, $5) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- Constructor ST_Band ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_band(rast raster, nbands int[] DEFAULT ARRAY[1]) RETURNS RASTER AS 'MODULE_PATHNAME', 'RASTER_band' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_band(rast raster, nband int) RETURNS RASTER AS $$ SELECT st_band($1, ARRAY[$2]) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_band(rast raster, nbands text, delimiter char DEFAULT ',') RETURNS RASTER AS $$ SELECT st_band($1, regexp_split_to_array(regexp_replace($2, '[[:space:]]', '', 'g'), $3)::int[]) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_SummaryStats and ST_ApproxSummaryStats ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_summarystats( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS 'MODULE_PATHNAME','RASTER_summaryStats' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_summarystats( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, $3, 1) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_summarystats( rast raster, exclude_nodata_value boolean, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, 1, $2, 1) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rast raster, nband int, sample_percent double precision, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, TRUE, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rast raster, exclude_nodata_value boolean, sample_percent double precision DEFAULT 0.1, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, 1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rast raster, sample_percent double precision, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, 1, TRUE, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION _st_summarystats( rastertable text, rastercolumn text, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS 'MODULE_PATHNAME','RASTER_summaryStatsCoverage' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_summarystats( rastertable text, rastercolumn text, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, $3, $4, 1) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_summarystats( rastertable text, rastercolumn text, exclude_nodata_value boolean, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, 1, $3, 1) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rastertable text, rastercolumn text, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, $3, $4, $5) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rastertable text, rastercolumn text, nband integer, sample_percent double precision, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, $3, TRUE, $4) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rastertable text, rastercolumn text, exclude_nodata_value boolean, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, 1, $3, 0.1) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxsummarystats( rastertable text, rastercolumn text, sample_percent double precision, OUT count bigint, OUT sum double precision, OUT mean double precision, OUT stddev double precision, OUT min double precision, OUT max double precision ) AS $$ SELECT _st_summarystats($1, $2, 1, TRUE, $3) $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Count and ST_ApproxCount ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_count(rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1) RETURNS bigint AS $$ DECLARE rtn bigint; BEGIN IF exclude_nodata_value IS FALSE THEN SELECT width * height INTO rtn FROM ST_Metadata(rast); ELSE SELECT count INTO rtn FROM _st_summarystats($1, $2, $3, $4); END IF; RETURN rtn; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_count(rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE) RETURNS bigint AS $$ SELECT _st_count($1, $2, $3, 1) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_count(rast raster, exclude_nodata_value boolean) RETURNS bigint AS $$ SELECT _st_count($1, 1, $2, 1) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1) RETURNS bigint AS $$ SELECT _st_count($1, $2, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rast raster, nband int, sample_percent double precision) RETURNS bigint AS $$ SELECT _st_count($1, $2, TRUE, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rast raster, exclude_nodata_value boolean, sample_percent double precision DEFAULT 0.1) RETURNS bigint AS $$ SELECT _st_count($1, 1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rast raster, sample_percent double precision) RETURNS bigint AS $$ SELECT _st_count($1, 1, TRUE, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION _st_count(rastertable text, rastercolumn text, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1) RETURNS bigint AS $$ DECLARE curs refcursor; ctable text; ccolumn text; rast raster; rtn bigint; tmp bigint; BEGIN -- nband IF nband < 1 THEN RAISE WARNING 'Invalid band index (must use 1-based). Returning NULL'; RETURN NULL; END IF; -- sample percent IF sample_percent < 0 OR sample_percent > 1 THEN RAISE WARNING 'Invalid sample percentage (must be between 0 and 1). Returning NULL'; RETURN NULL; END IF; -- exclude_nodata_value IS TRUE IF exclude_nodata_value IS TRUE THEN SELECT count INTO rtn FROM _st_summarystats($1, $2, $3, $4, $5); RETURN rtn; END IF; -- clean rastertable and rastercolumn ctable := quote_ident(rastertable); ccolumn := quote_ident(rastercolumn); BEGIN OPEN curs FOR EXECUTE 'SELECT ' || ccolumn || ' FROM ' || ctable || ' WHERE ' || ccolumn || ' IS NOT NULL'; EXCEPTION WHEN OTHERS THEN RAISE WARNING 'Invalid table or column name. Returning NULL'; RETURN NULL; END; rtn := 0; LOOP FETCH curs INTO rast; EXIT WHEN NOT FOUND; SELECT (width * height) INTO tmp FROM ST_Metadata(rast); rtn := rtn + tmp; END LOOP; CLOSE curs; RETURN rtn; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_count(rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE) RETURNS bigint AS $$ SELECT _st_count($1, $2, $3, $4, 1) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_count(rastertable text, rastercolumn text, exclude_nodata_value boolean) RETURNS bigint AS $$ SELECT _st_count($1, $2, 1, $3, 1) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1) RETURNS bigint AS $$ SELECT _st_count($1, $2, $3, $4, $5) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rastertable text, rastercolumn text, nband int, sample_percent double precision) RETURNS bigint AS $$ SELECT _st_count($1, $2, $3, TRUE, $4) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rastertable text, rastercolumn text, exclude_nodata_value boolean, sample_percent double precision DEFAULT 0.1) RETURNS bigint AS $$ SELECT _st_count($1, $2, 1, $3, $4) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxcount(rastertable text, rastercolumn text, sample_percent double precision) RETURNS bigint AS $$ SELECT _st_count($1, $2, 1, TRUE, $3) $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Histogram and ST_ApproxHistogram ----------------------------------------------------------------------- -- Cannot be strict as "width", "min" and "max" can be NULL CREATE OR REPLACE FUNCTION _st_histogram( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1, bins int DEFAULT 0, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, min double precision DEFAULT NULL, max double precision DEFAULT NULL, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS 'MODULE_PATHNAME','RASTER_histogram' LANGUAGE 'c' IMMUTABLE; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION st_histogram( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, bins int DEFAULT 0, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, $3, 1, $4, $5, $6) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_histogram( rast raster, nband int, exclude_nodata_value boolean, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, $3, 1, $4, NULL, $5) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION st_histogram( rast raster, nband int, bins int, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, TRUE, 1, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_histogram( rast raster, nband int, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, TRUE, 1, $3, NULL, $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION st_approxhistogram( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1, bins int DEFAULT 0, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, $3, $4, $5, $6, $7) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_approxhistogram( rast raster, nband int, exclude_nodata_value boolean, sample_percent double precision, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, $3, $4, $5, NULL, $6) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxhistogram( rast raster, nband int, sample_percent double precision, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, TRUE, $3, 0, NULL, FALSE) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxhistogram( rast raster, sample_percent double precision, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, 1, TRUE, $2, 0, NULL, FALSE) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION st_approxhistogram( rast raster, nband int, sample_percent double precision, bins int, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, TRUE, $3, $4, $5, $6) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxhistogram( rast raster, nband int, sample_percent double precision, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT min, max, count, percent FROM _st_histogram($1, $2, TRUE, $3, $4, NULL, $5) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION _st_histogram( rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1, bins int DEFAULT 0, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS 'MODULE_PATHNAME','RASTER_histogramCoverage' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_histogram( rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, bins int DEFAULT 0, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, $4, 1, $5, $6, $7) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_histogram( rastertable text, rastercolumn text, nband int, exclude_nodata_value boolean, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, $4, 1, $5, NULL, $6) $$ LANGUAGE 'sql' STABLE STRICT; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION st_histogram( rastertable text, rastercolumn text, nband int, bins int, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, TRUE, 1, $4, $5, $6) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_histogram( rastertable text, rastercolumn text, nband int, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, TRUE, 1, $4, NULL, $5) $$ LANGUAGE 'sql' STABLE STRICT; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION st_approxhistogram( rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1, bins int DEFAULT 0, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, $4, $5, $6, $7, $8) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_approxhistogram( rastertable text, rastercolumn text, nband int, exclude_nodata_value boolean, sample_percent double precision, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, $4, $5, $6, NULL, $7) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxhistogram( rastertable text, rastercolumn text, nband int, sample_percent double precision, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, TRUE, $4, 0, NULL, FALSE) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxhistogram( rastertable text, rastercolumn text, sample_percent double precision, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, 1, TRUE, $3, 0, NULL, FALSE) $$ LANGUAGE 'sql' STABLE STRICT; -- Cannot be strict as "width" can be NULL CREATE OR REPLACE FUNCTION st_approxhistogram( rastertable text, rastercolumn text, nband int, sample_percent double precision, bins int, width double precision[] DEFAULT NULL, right boolean DEFAULT FALSE, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, TRUE, $4, $5, $6, $7) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxhistogram( rastertable text, rastercolumn text, nband int, sample_percent double precision, bins int, right boolean, OUT min double precision, OUT max double precision, OUT count bigint, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT _st_histogram($1, $2, $3, TRUE, $4, $5, NULL, $6) $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Quantile and ST_ApproxQuantile ----------------------------------------------------------------------- -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION _st_quantile( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS 'MODULE_PATHNAME','RASTER_quantile' LANGUAGE 'c' IMMUTABLE; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_quantile( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, $3, 1, $4) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_quantile( rast raster, nband int, quantiles double precision[], OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, TRUE, 1, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_quantile( rast raster, quantiles double precision[], OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, 1, TRUE, 1, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_quantile(rast raster, nband int, exclude_nodata_value boolean, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, $3, 1, ARRAY[$4]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_quantile(rast raster, nband int, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, TRUE, 1, ARRAY[$3]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Cannot be strict as "quantile" can be NULL CREATE OR REPLACE FUNCTION st_quantile(rast raster, exclude_nodata_value boolean, quantile double precision DEFAULT NULL) RETURNS double precision AS $$ SELECT (_st_quantile($1, 1, $2, 1, ARRAY[$3]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_quantile(rast raster, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, 1, TRUE, 1, ARRAY[$2]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile( rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile( rast raster, nband int, sample_percent double precision, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, TRUE, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile( rast raster, sample_percent double precision, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, 1, TRUE, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_approxquantile( rast raster, quantiles double precision[], OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, 1, TRUE, 0.1, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxquantile(rast raster, nband int, exclude_nodata_value boolean, sample_percent double precision, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, $3, $4, ARRAY[$5]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxquantile(rast raster, nband int, sample_percent double precision, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, TRUE, $3, ARRAY[$4]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_approxquantile(rast raster, sample_percent double precision, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, 1, TRUE, $2, ARRAY[$3]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Cannot be strict as "quantile" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile(rast raster, exclude_nodata_value boolean, quantile double precision DEFAULT NULL) RETURNS double precision AS $$ SELECT (_st_quantile($1, 1, $2, 0.1, ARRAY[$3]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_approxquantile(rast raster, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, 1, TRUE, 0.1, ARRAY[$2]::double precision[])).value $$ LANGUAGE 'sql' IMMUTABLE; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION _st_quantile( rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS 'MODULE_PATHNAME','RASTER_quantileCoverage' LANGUAGE 'c' STABLE; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_quantile( rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, $3, $4, 1, $5) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_quantile( rastertable text, rastercolumn text, nband int, quantiles double precision[], OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, $3, TRUE, 1, $4) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_quantile( rastertable text, rastercolumn text, quantiles double precision[], OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, 1, TRUE, 1, $3) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_quantile(rastertable text, rastercolumn text, nband int, exclude_nodata_value boolean, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, $3, $4, 1, ARRAY[$5]::double precision[])).value $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_quantile(rastertable text, rastercolumn text, nband int, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, $3, TRUE, 1, ARRAY[$4]::double precision[])).value $$ LANGUAGE 'sql' STABLE STRICT; -- Cannot be strict as "quantile" can be NULL CREATE OR REPLACE FUNCTION st_quantile(rastertable text, rastercolumn text, exclude_nodata_value boolean, quantile double precision DEFAULT NULL) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, 1, $3, 1, ARRAY[$4]::double precision[])).value $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_quantile(rastertable text, rastercolumn text, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, 1, TRUE, 1, ARRAY[$3]::double precision[])).value $$ LANGUAGE 'sql' STABLE STRICT; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile( rastertable text, rastercolumn text, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 0.1, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, $3, $4, $5, $6) $$ LANGUAGE 'sql' STABLE; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile( rastertable text, rastercolumn text, nband int, sample_percent double precision, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, $3, TRUE, $4, $5) $$ LANGUAGE 'sql' STABLE; -- Cannot be strict as "quantiles" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile( rastertable text, rastercolumn text, sample_percent double precision, quantiles double precision[] DEFAULT NULL, OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, 1, TRUE, $3, $4) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_approxquantile( rastertable text, rastercolumn text, quantiles double precision[], OUT quantile double precision, OUT value double precision ) RETURNS SETOF record AS $$ SELECT _st_quantile($1, $2, 1, TRUE, 0.1, $3) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxquantile(rastertable text, rastercolumn text, nband int, exclude_nodata_value boolean, sample_percent double precision, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, $3, $4, $5, ARRAY[$6]::double precision[])).value $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxquantile(rastertable text, rastercolumn text, nband int, sample_percent double precision, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, $3, TRUE, $4, ARRAY[$5]::double precision[])).value $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_approxquantile(rastertable text, rastercolumn text, sample_percent double precision, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, 1, TRUE, $3, ARRAY[$4]::double precision[])).value $$ LANGUAGE 'sql' STABLE STRICT; -- Cannot be strict as "quantile" can be NULL CREATE OR REPLACE FUNCTION st_approxquantile(rastertable text, rastercolumn text, exclude_nodata_value boolean, quantile double precision DEFAULT NULL) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, 1, $3, 0.1, ARRAY[$4]::double precision[])).value $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_approxquantile(rastertable text, rastercolumn text, quantile double precision) RETURNS double precision AS $$ SELECT (_st_quantile($1, $2, 1, TRUE, 0.1, ARRAY[$3]::double precision[])).value $$ LANGUAGE 'sql' STABLE; ----------------------------------------------------------------------- -- ST_ValueCount and ST_ValuePercent ----------------------------------------------------------------------- -- None of the "valuecount" functions with "searchvalues" can be strict as "searchvalues" and "roundto" can be NULL -- Allowing "searchvalues" to be NULL instructs the function to count all values CREATE OR REPLACE FUNCTION _st_valuecount( rast raster, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT count integer, OUT percent double precision ) RETURNS SETOF record AS 'MODULE_PATHNAME', 'RASTER_valueCount' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_valuecount( rast raster, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT count integer ) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, $2, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count integer) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, $2, TRUE, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count integer) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, 1, TRUE, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, exclude_nodata_value boolean, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS integer AS $$ SELECT (_st_valuecount($1, $2, $3, ARRAY[$4]::double precision[], $5)).count $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS integer AS $$ SELECT (_st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], $4)).count $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS integer AS $$ SELECT (_st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], $3)).count $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_valuepercent( rast raster, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, $2, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, $2, TRUE, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, 1, TRUE, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, exclude_nodata_value boolean, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS double precision AS $$ SELECT (_st_valuecount($1, $2, $3, ARRAY[$4]::double precision[], $5)).percent $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS double precision AS $$ SELECT (_st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], $4)).percent $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS double precision AS $$ SELECT (_st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], $3)).percent $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION _st_valuecount( rastertable text, rastercolumn text, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT count integer, OUT percent double precision ) RETURNS SETOF record AS 'MODULE_PATHNAME', 'RASTER_valueCountCoverage' LANGUAGE 'c' STABLE; CREATE OR REPLACE FUNCTION st_valuecount( rastertable text, rastercolumn text, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT count integer ) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, $2, $3, $4, $5, $6) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count integer) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, $2, $3, TRUE, $4, $5) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count integer) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, $2, 1, TRUE, $3, $4) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, exclude_nodata_value boolean, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS integer AS $$ SELECT (_st_valuecount($1, $2, $3, $4, ARRAY[$5]::double precision[], $6)).count $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS integer AS $$ SELECT (_st_valuecount($1, $2, $3, TRUE, ARRAY[$4]::double precision[], $5)).count $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS integer AS $$ SELECT (_st_valuecount($1, $2, 1, TRUE, ARRAY[$3]::double precision[], $4)).count $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_valuepercent( rastertable text, rastercolumn text, nband integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision ) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, $2, $3, $4, $5, $6) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, $2, $3, TRUE, $4, $5) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, $2, 1, TRUE, $3, $4) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, exclude_nodata_value boolean, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS double precision AS $$ SELECT (_st_valuecount($1, $2, $3, $4, ARRAY[$5]::double precision[], $6)).percent $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS double precision AS $$ SELECT (_st_valuecount($1, $2, $3, TRUE, ARRAY[$4]::double precision[], $5)).percent $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision DEFAULT 0) RETURNS double precision AS $$ SELECT (_st_valuecount($1, $2, 1, TRUE, ARRAY[$3]::double precision[], $4)).percent $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Reclass ----------------------------------------------------------------------- CREATE TYPE reclassarg AS ( nband int, reclassexpr text, pixeltype text, nodataval double precision ); CREATE OR REPLACE FUNCTION _st_reclass(rast raster, VARIADIC reclassargset reclassarg[]) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_reclass' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_reclass(rast raster, VARIADIC reclassargset reclassarg[]) RETURNS raster AS $$ DECLARE i int; expr text; BEGIN -- for each reclassarg, validate elements as all except nodataval cannot be NULL FOR i IN SELECT * FROM generate_subscripts($2, 1) LOOP IF $2[i].nband IS NULL OR $2[i].reclassexpr IS NULL OR $2[i].pixeltype IS NULL THEN RAISE WARNING 'Values are required for the nband, reclassexpr and pixeltype attributes.'; RETURN rast; END IF; END LOOP; RETURN _st_reclass($1, VARIADIC $2); END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Cannot be strict as "nodataval" can be NULL CREATE OR REPLACE FUNCTION st_reclass(rast raster, nband int, reclassexpr text, pixeltype text, nodataval double precision DEFAULT NULL) RETURNS raster AS $$ SELECT st_reclass($1, ROW($2, $3, $4, $5)) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_reclass(rast raster, reclassexpr text, pixeltype text) RETURNS raster AS $$ SELECT st_reclass($1, ROW(1, $2, $3, NULL)) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_ColorMap ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_colormap( rast raster, nband int, colormap text, method text DEFAULT 'INTERPOLATE' ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_colorMap' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_colormap( rast raster, nband int DEFAULT 1, colormap text DEFAULT 'grayscale', method text DEFAULT 'INTERPOLATE' ) RETURNS raster AS $$ DECLARE _ismap boolean; _colormap text; _element text[]; BEGIN _ismap := TRUE; -- clean colormap to see what it is _colormap := split_part(colormap, E'\n', 1); _colormap := regexp_replace(_colormap, E':+', ' ', 'g'); _colormap := regexp_replace(_colormap, E',+', ' ', 'g'); _colormap := regexp_replace(_colormap, E'\\t+', ' ', 'g'); _colormap := regexp_replace(_colormap, E' +', ' ', 'g'); _element := regexp_split_to_array(_colormap, ' '); -- treat as colormap IF (array_length(_element, 1) > 1) THEN _colormap := colormap; -- treat as keyword ELSE method := 'INTERPOLATE'; CASE lower(trim(both from _colormap)) WHEN 'grayscale', 'greyscale' THEN _colormap := ' 100% 0 0% 254 nv 255 '; WHEN 'pseudocolor' THEN _colormap := ' 100% 255 0 0 255 50% 0 255 0 255 0% 0 0 255 255 nv 0 0 0 0 '; WHEN 'fire' THEN _colormap := ' 100% 243 255 221 255 93.75% 242 255 178 255 87.5% 255 255 135 255 81.25% 255 228 96 255 75% 255 187 53 255 68.75% 255 131 7 255 62.5% 255 84 0 255 56.25% 255 42 0 255 50% 255 0 0 255 43.75% 255 42 0 255 37.5% 224 74 0 255 31.25% 183 91 0 255 25% 140 93 0 255 18.75% 99 82 0 255 12.5% 58 58 1 255 6.25% 12 15 0 255 0% 0 0 0 255 nv 0 0 0 0 '; WHEN 'bluered' THEN _colormap := ' 100.00% 165 0 33 255 94.12% 216 21 47 255 88.24% 247 39 53 255 82.35% 255 61 61 255 76.47% 255 120 86 255 70.59% 255 172 117 255 64.71% 255 214 153 255 58.82% 255 241 188 255 52.94% 255 255 234 255 47.06% 234 255 255 255 41.18% 188 249 255 255 35.29% 153 234 255 255 29.41% 117 211 255 255 23.53% 86 176 255 255 17.65% 61 135 255 255 11.76% 40 87 255 255 5.88% 24 28 247 255 0.00% 36 0 216 255 nv 0 0 0 0 '; ELSE RAISE EXCEPTION 'Unknown colormap keyword: %', colormap; END CASE; END IF; RETURN _st_colormap($1, $2, _colormap, $4); END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_colormap( rast raster, colormap text, method text DEFAULT 'INTERPOLATE' ) RETURNS RASTER AS $$ SELECT ST_ColorMap($1, 1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_FromGDALRaster ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_fromgdalraster(gdaldata bytea, srid integer DEFAULT NULL) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_fromGDALRaster' LANGUAGE 'c' IMMUTABLE; ----------------------------------------------------------------------- -- ST_AsGDALRaster and supporting functions ----------------------------------------------------------------------- -- returns set of available and usable GDAL drivers CREATE OR REPLACE FUNCTION st_gdaldrivers(OUT idx int, OUT short_name text, OUT long_name text, OUT create_options text) RETURNS SETOF record AS 'MODULE_PATHNAME', 'RASTER_getGDALDrivers' LANGUAGE 'c' IMMUTABLE STRICT; -- Cannot be strict as "options" and "srid" can be NULL CREATE OR REPLACE FUNCTION st_asgdalraster(rast raster, format text, options text[] DEFAULT NULL, srid integer DEFAULT NULL) RETURNS bytea AS 'MODULE_PATHNAME', 'RASTER_asGDALRaster' LANGUAGE 'c' IMMUTABLE; ----------------------------------------------------------------------- -- ST_AsTIFF ----------------------------------------------------------------------- -- Cannot be strict as "options" and "srid" can be NULL CREATE OR REPLACE FUNCTION st_astiff(rast raster, options text[] DEFAULT NULL, srid integer DEFAULT NULL) RETURNS bytea AS $$ DECLARE i int; num_bands int; nodata double precision; last_nodata double precision; BEGIN IF rast IS NULL THEN RETURN NULL; END IF; num_bands := st_numbands($1); -- TIFF only allows one NODATA value for ALL bands FOR i IN 1..num_bands LOOP nodata := st_bandnodatavalue($1, i); IF last_nodata IS NULL THEN last_nodata := nodata; ELSEIF nodata != last_nodata THEN RAISE NOTICE 'The TIFF format only permits one NODATA value for all bands. The value used will be the last band with a NODATA value.'; END IF; END LOOP; RETURN st_asgdalraster($1, 'GTiff', $2, $3); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Cannot be strict as "options" and "srid" can be NULL CREATE OR REPLACE FUNCTION st_astiff(rast raster, nbands int[], options text[] DEFAULT NULL, srid integer DEFAULT NULL) RETURNS bytea AS $$ SELECT st_astiff(st_band($1, $2), $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; -- Cannot be strict as "srid" can be NULL CREATE OR REPLACE FUNCTION st_astiff(rast raster, compression text, srid integer DEFAULT NULL) RETURNS bytea AS $$ DECLARE compression2 text; c_type text; c_level int; i int; num_bands int; options text[]; BEGIN IF rast IS NULL THEN RETURN NULL; END IF; compression2 := trim(both from upper(compression)); IF length(compression2) > 0 THEN -- JPEG IF position('JPEG' in compression2) != 0 THEN c_type := 'JPEG'; c_level := substring(compression2 from '[0-9]+$'); IF c_level IS NOT NULL THEN IF c_level > 100 THEN c_level := 100; ELSEIF c_level < 1 THEN c_level := 1; END IF; options := array_append(options, 'JPEG_QUALITY=' || c_level); END IF; -- per band pixel type check num_bands := st_numbands($1); FOR i IN 1..num_bands LOOP IF st_bandpixeltype($1, i) != '8BUI' THEN RAISE EXCEPTION 'The pixel type of band % in the raster is not 8BUI. JPEG compression can only be used with the 8BUI pixel type.', i; END IF; END LOOP; -- DEFLATE ELSEIF position('DEFLATE' in compression2) != 0 THEN c_type := 'DEFLATE'; c_level := substring(compression2 from '[0-9]+$'); IF c_level IS NOT NULL THEN IF c_level > 9 THEN c_level := 9; ELSEIF c_level < 1 THEN c_level := 1; END IF; options := array_append(options, 'ZLEVEL=' || c_level); END IF; ELSE c_type := compression2; -- CCITT IF position('CCITT' in compression2) THEN -- per band pixel type check num_bands := st_numbands($1); FOR i IN 1..num_bands LOOP IF st_bandpixeltype($1, i) != '1BB' THEN RAISE EXCEPTION 'The pixel type of band % in the raster is not 1BB. CCITT compression can only be used with the 1BB pixel type.', i; END IF; END LOOP; END IF; END IF; -- compression type check IF ARRAY[c_type] <@ ARRAY['JPEG', 'LZW', 'PACKBITS', 'DEFLATE', 'CCITTRLE', 'CCITTFAX3', 'CCITTFAX4', 'NONE'] THEN options := array_append(options, 'COMPRESS=' || c_type); ELSE RAISE NOTICE 'Unknown compression type: %. The outputted TIFF will not be COMPRESSED.', c_type; END IF; END IF; RETURN st_astiff($1, options, $3); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Cannot be strict as "srid" can be NULL CREATE OR REPLACE FUNCTION st_astiff(rast raster, nbands int[], compression text, srid integer DEFAULT NULL) RETURNS bytea AS $$ SELECT st_astiff(st_band($1, $2), $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_AsJPEG ----------------------------------------------------------------------- -- Cannot be strict as "options" can be NULL CREATE OR REPLACE FUNCTION st_asjpeg(rast raster, options text[] DEFAULT NULL) RETURNS bytea AS $$ DECLARE rast2 raster; num_bands int; i int; BEGIN IF rast IS NULL THEN RETURN NULL; END IF; num_bands := st_numbands($1); -- JPEG allows 1 or 3 bands IF num_bands <> 1 AND num_bands <> 3 THEN RAISE NOTICE 'The JPEG format only permits one or three bands. The first band will be used.'; rast2 := st_band(rast, ARRAY[1]); num_bands := st_numbands(rast); ELSE rast2 := rast; END IF; -- JPEG only supports 8BUI pixeltype FOR i IN 1..num_bands LOOP IF st_bandpixeltype(rast, i) != '8BUI' THEN RAISE EXCEPTION 'The pixel type of band % in the raster is not 8BUI. The JPEG format can only be used with the 8BUI pixel type.', i; END IF; END LOOP; RETURN st_asgdalraster(rast2, 'JPEG', $2, NULL); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Cannot be strict as "options" can be NULL CREATE OR REPLACE FUNCTION st_asjpeg(rast raster, nbands int[], options text[] DEFAULT NULL) RETURNS bytea AS $$ SELECT st_asjpeg(st_band($1, $2), $3) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_asjpeg(rast raster, nbands int[], quality int) RETURNS bytea AS $$ DECLARE quality2 int; options text[]; BEGIN IF quality IS NOT NULL THEN IF quality > 100 THEN quality2 := 100; ELSEIF quality < 10 THEN quality2 := 10; ELSE quality2 := quality; END IF; options := array_append(options, 'QUALITY=' || quality2); END IF; RETURN st_asjpeg(st_band($1, $2), options); END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Cannot be strict as "options" can be NULL CREATE OR REPLACE FUNCTION st_asjpeg(rast raster, nband int, options text[] DEFAULT NULL) RETURNS bytea AS $$ SELECT st_asjpeg(st_band($1, $2), $3) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_asjpeg(rast raster, nband int, quality int) RETURNS bytea AS $$ SELECT st_asjpeg($1, ARRAY[$2], $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_AsPNG ----------------------------------------------------------------------- -- Cannot be strict as "options" can be NULL CREATE OR REPLACE FUNCTION st_aspng(rast raster, options text[] DEFAULT NULL) RETURNS bytea AS $$ DECLARE rast2 raster; num_bands int; i int; pt text; BEGIN IF rast IS NULL THEN RETURN NULL; END IF; num_bands := st_numbands($1); -- PNG allows 1, 3 or 4 bands IF num_bands <> 1 AND num_bands <> 3 AND num_bands <> 4 THEN RAISE NOTICE 'The PNG format only permits one, three or four bands. The first band will be used.'; rast2 := st_band($1, ARRAY[1]); num_bands := st_numbands(rast2); ELSE rast2 := rast; END IF; -- PNG only supports 8BUI and 16BUI pixeltype FOR i IN 1..num_bands LOOP pt = st_bandpixeltype(rast, i); IF pt != '8BUI' AND pt != '16BUI' THEN RAISE EXCEPTION 'The pixel type of band % in the raster is not 8BUI or 16BUI. The PNG format can only be used with 8BUI and 16BUI pixel types.', i; END IF; END LOOP; RETURN st_asgdalraster(rast2, 'PNG', $2, NULL); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Cannot be strict as "options" can be NULL CREATE OR REPLACE FUNCTION st_aspng(rast raster, nbands int[], options text[] DEFAULT NULL) RETURNS bytea AS $$ SELECT st_aspng(st_band($1, $2), $3) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_aspng(rast raster, nbands int[], compression int) RETURNS bytea AS $$ DECLARE compression2 int; options text[]; BEGIN IF compression IS NOT NULL THEN IF compression > 9 THEN compression2 := 9; ELSEIF compression < 1 THEN compression2 := 1; ELSE compression2 := compression; END IF; options := array_append(options, 'ZLEVEL=' || compression2); END IF; RETURN st_aspng(st_band($1, $2), options); END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_aspng(rast raster, nband int, options text[] DEFAULT NULL) RETURNS bytea AS $$ SELECT st_aspng(st_band($1, $2), $3) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_aspng(rast raster, nband int, compression int) RETURNS bytea AS $$ SELECT st_aspng($1, ARRAY[$2], $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_AsRaster ----------------------------------------------------------------------- -- None of the ST_AsRaster can be strict as some parameters can be NULL CREATE OR REPLACE FUNCTION _st_asraster( geom geometry, scalex double precision DEFAULT 0, scaley double precision DEFAULT 0, width integer DEFAULT 0, height integer DEFAULT 0, pixeltype text[] DEFAULT ARRAY['8BUI']::text[], value double precision[] DEFAULT ARRAY[1]::double precision[], nodataval double precision[] DEFAULT ARRAY[0]::double precision[], upperleftx double precision DEFAULT NULL, upperlefty double precision DEFAULT NULL, gridx double precision DEFAULT NULL, gridy double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_asRaster' LANGUAGE 'c' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, scalex double precision, scaley double precision, gridx double precision DEFAULT NULL, gridy double precision DEFAULT NULL, pixeltype text[] DEFAULT ARRAY['8BUI']::text[], value double precision[] DEFAULT ARRAY[1]::double precision[], nodataval double precision[] DEFAULT ARRAY[0]::double precision[], skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, $2, $3, NULL, NULL, $6, $7, $8, NULL, NULL, $4, $5, $9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, scalex double precision, scaley double precision, pixeltype text[], value double precision[] DEFAULT ARRAY[1]::double precision[], nodataval double precision[] DEFAULT ARRAY[0]::double precision[], upperleftx double precision DEFAULT NULL, upperlefty double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, $2, $3, NULL, NULL, $4, $5, $6, $7, $8, NULL, NULL, $9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, width integer, height integer, gridx double precision DEFAULT NULL, gridy double precision DEFAULT NULL, pixeltype text[] DEFAULT ARRAY['8BUI']::text[], value double precision[] DEFAULT ARRAY[1]::double precision[], nodataval double precision[] DEFAULT ARRAY[0]::double precision[], skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, NULL, NULL, $2, $3, $6, $7, $8, NULL, NULL, $4, $5, $9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, width integer, height integer, pixeltype text[], value double precision[] DEFAULT ARRAY[1]::double precision[], nodataval double precision[] DEFAULT ARRAY[0]::double precision[], upperleftx double precision DEFAULT NULL, upperlefty double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, NULL, NULL, $2, $3, $4, $5, $6, $7, $8, NULL, NULL, $9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, scalex double precision, scaley double precision, gridx double precision, gridy double precision, pixeltype text, value double precision DEFAULT 1, nodataval double precision DEFAULT 0, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, $2, $3, NULL, NULL, ARRAY[$6]::text[], ARRAY[$7]::double precision[], ARRAY[$8]::double precision[], NULL, NULL, $4, $5, $9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, scalex double precision, scaley double precision, pixeltype text, value double precision DEFAULT 1, nodataval double precision DEFAULT 0, upperleftx double precision DEFAULT NULL, upperlefty double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, $2, $3, NULL, NULL, ARRAY[$4]::text[], ARRAY[$5]::double precision[], ARRAY[$6]::double precision[], $7, $8, NULL, NULL, $9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, width integer, height integer, gridx double precision, gridy double precision, pixeltype text, value double precision DEFAULT 1, nodataval double precision DEFAULT 0, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, NULL, NULL, $2, $3, ARRAY[$6]::text[], ARRAY[$7]::double precision[], ARRAY[$8]::double precision[], NULL, NULL, $4, $5, $9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, width integer, height integer, pixeltype text, value double precision DEFAULT 1, nodataval double precision DEFAULT 0, upperleftx double precision DEFAULT NULL, upperlefty double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_asraster($1, NULL, NULL, $2, $3, ARRAY[$4]::text[], ARRAY[$5]::double precision[], ARRAY[$6]::double precision[], $7, $8, NULL, NULL,$9, $10, $11) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, ref raster, pixeltype text[] DEFAULT ARRAY['8BUI']::text[], value double precision[] DEFAULT ARRAY[1]::double precision[], nodataval double precision[] DEFAULT ARRAY[0]::double precision[], touched boolean DEFAULT FALSE ) RETURNS raster AS $$ DECLARE g geometry; g_srid integer; ul_x double precision; ul_y double precision; scale_x double precision; scale_y double precision; skew_x double precision; skew_y double precision; sr_id integer; BEGIN SELECT upperleftx, upperlefty, scalex, scaley, skewx, skewy, srid INTO ul_x, ul_y, scale_x, scale_y, skew_x, skew_y, sr_id FROM ST_Metadata(ref); --RAISE NOTICE '%, %, %, %, %, %, %', ul_x, ul_y, scale_x, scale_y, skew_x, skew_y, sr_id; -- geometry and raster has different SRID g_srid := ST_SRID(geom); IF g_srid != sr_id THEN RAISE NOTICE 'The geometry''s SRID (%) is not the same as the raster''s SRID (%). The geometry will be transformed to the raster''s projection', g_srid, sr_id; g := ST_Transform(geom, sr_id); ELSE g := geom; END IF; RETURN _st_asraster(g, scale_x, scale_y, NULL, NULL, $3, $4, $5, NULL, NULL, ul_x, ul_y, skew_x, skew_y, $6); END; $$ LANGUAGE 'plpgsql' STABLE; CREATE OR REPLACE FUNCTION st_asraster( geom geometry, ref raster, pixeltype text, value double precision DEFAULT 1, nodataval double precision DEFAULT 0, touched boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT st_asraster($1, $2, ARRAY[$3]::text[], ARRAY[$4]::double precision[], ARRAY[$5]::double precision[], $6) $$ LANGUAGE 'sql' STABLE; ----------------------------------------------------------------------- -- ST_GDALWarp -- has no public functions ----------------------------------------------------------------------- -- cannot be strict as almost all parameters can be NULL CREATE OR REPLACE FUNCTION _st_gdalwarp( rast raster, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125, srid integer DEFAULT NULL, scalex double precision DEFAULT 0, scaley double precision DEFAULT 0, gridx double precision DEFAULT NULL, gridy double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, width integer DEFAULT NULL, height integer DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_GDALWarp' LANGUAGE 'c' STABLE; ----------------------------------------------------------------------- -- ST_Resample ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_resample( rast raster, scalex double precision DEFAULT 0, scaley double precision DEFAULT 0, gridx double precision DEFAULT NULL, gridy double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $8, $9, NULL, $2, $3, $4, $5, $6, $7) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_resample( rast raster, width integer, height integer, gridx double precision DEFAULT NULL, gridy double precision DEFAULT NULL, skewx double precision DEFAULT 0, skewy double precision DEFAULT 0, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $8, $9, NULL, NULL, NULL, $4, $5, $6, $7, $2, $3) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_resample( rast raster, ref raster, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125, usescale boolean DEFAULT TRUE ) RETURNS raster AS $$ DECLARE rastsrid int; _srid int; _dimx int; _dimy int; _scalex double precision; _scaley double precision; _gridx double precision; _gridy double precision; _skewx double precision; _skewy double precision; BEGIN SELECT srid, width, height, scalex, scaley, upperleftx, upperlefty, skewx, skewy INTO _srid, _dimx, _dimy, _scalex, _scaley, _gridx, _gridy, _skewx, _skewy FROM st_metadata($2); rastsrid := ST_SRID($1); -- both rasters must have the same SRID IF (rastsrid != _srid) THEN RAISE EXCEPTION 'The raster to be resampled has a different SRID from the reference raster'; RETURN NULL; END IF; IF usescale IS TRUE THEN _dimx := NULL; _dimy := NULL; ELSE _scalex := NULL; _scaley := NULL; END IF; RETURN _st_gdalwarp($1, $3, $4, NULL, _scalex, _scaley, _gridx, _gridy, _skewx, _skewy, _dimx, _dimy); END; $$ LANGUAGE 'plpgsql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_resample( rast raster, ref raster, usescale boolean, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ SELECT st_resample($1, $2, $4, $5, $3) $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Transform ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_transform(rast raster, srid integer, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125, scalex double precision DEFAULT 0, scaley double precision DEFAULT 0) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $3, $4, $2, $5, $6) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_transform(rast raster, srid integer, scalex double precision, scaley double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $5, $6, $2, $3, $4) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_transform(rast raster, srid integer, scalexy double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $4, $5, $2, $3, $3) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_transform( rast raster, alignto raster, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ DECLARE _srid integer; _scalex double precision; _scaley double precision; _gridx double precision; _gridy double precision; _skewx double precision; _skewy double precision; BEGIN SELECT srid, scalex, scaley, upperleftx, upperlefty, skewx, skewy INTO _srid, _scalex, _scaley, _gridx, _gridy, _skewx, _skewy FROM st_metadata($2); RETURN _st_gdalwarp($1, $3, $4, _srid, _scalex, _scaley, _gridx, _gridy, _skewx, _skewy, NULL, NULL); END; $$ LANGUAGE 'plpgsql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Rescale ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_rescale(rast raster, scalex double precision, scaley double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $4, $5, NULL, $2, $3) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_rescale(rast raster, scalexy double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $3, $4, NULL, $2, $2) $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Reskew ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_reskew(rast raster, skewx double precision, skewy double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $4, $5, NULL, 0, 0, NULL, NULL, $2, $3) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_reskew(rast raster, skewxy double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $3, $4, NULL, 0, 0, NULL, NULL, $2, $2) $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_SnapToGrid ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_snaptogrid( rast raster, gridx double precision, gridy double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125, scalex double precision DEFAULT 0, scaley double precision DEFAULT 0 ) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $4, $5, NULL, $6, $7, $2, $3) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_snaptogrid( rast raster, gridx double precision, gridy double precision, scalex double precision, scaley double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $6, $7, NULL, $4, $5, $2, $3) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_snaptogrid( rast raster, gridx double precision, gridy double precision, scalexy double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $5, $6, NULL, $4, $4, $2, $3) $$ LANGUAGE 'sql' STABLE STRICT; ----------------------------------------------------------------------- -- ST_Resize ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_resize( rast raster, width text, height text, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ DECLARE i integer; wh text[2]; whi integer[2]; whd double precision[2]; _width integer; _height integer; BEGIN wh[1] := trim(both from $2); wh[2] := trim(both from $3); -- see if width and height are percentages FOR i IN 1..2 LOOP IF position('%' in wh[i]) > 0 THEN BEGIN wh[i] := (regexp_matches(wh[i], E'^(\\d*.?\\d*)%{1}$'))[1]; IF length(wh[i]) < 1 THEN RAISE invalid_parameter_value; END IF; whd[i] := wh[i]::double precision * 0.01; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION 'Invalid percentage value provided for width/height'; RETURN NULL; END; ELSE BEGIN whi[i] := abs(wh[i]::integer); EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION 'Non-integer value provided for width/height'; RETURN NULL; END; END IF; END LOOP; IF whd[1] IS NOT NULL OR whd[2] IS NOT NULL THEN SELECT foo.width, foo.height INTO _width, _height FROM ST_Metadata($1) AS foo; IF whd[1] IS NOT NULL THEN whi[1] := round(_width::double precision * whd[1])::integer; END IF; IF whd[2] IS NOT NULL THEN whi[2] := round(_height::double precision * whd[2])::integer; END IF; END IF; -- should NEVER be here IF whi[1] IS NULL OR whi[2] IS NULL THEN RAISE EXCEPTION 'Unable to determine appropriate width or height'; RETURN NULL; END IF; FOR i IN 1..2 LOOP IF whi[i] < 1 THEN whi[i] = 1; END IF; END LOOP; RETURN _st_gdalwarp( $1, $4, $5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, whi[1], whi[2] ); END; $$ LANGUAGE 'plpgsql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_resize( rast raster, width integer, height integer, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ SELECT _st_gdalwarp($1, $4, $5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, abs($2), abs($3)) $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION st_resize( rast raster, percentwidth double precision, percentheight double precision, algorithm text DEFAULT 'NearestNeighbour', maxerr double precision DEFAULT 0.125 ) RETURNS raster AS $$ DECLARE _width integer; _height integer; BEGIN -- range check IF $2 <= 0. OR $2 > 1. OR $3 <= 0. OR $3 > 1. THEN RAISE EXCEPTION 'Percentages must be a value greater than zero and less than or equal to one, e.g. 0.5 for 50%%'; END IF; SELECT width, height INTO _width, _height FROM ST_Metadata($1); _width := round(_width::double precision * $2)::integer; _height:= round(_height::double precision * $3)::integer; IF _width < 1 THEN _width := 1; END IF; IF _height < 1 THEN _height := 1; END IF; RETURN _st_gdalwarp( $1, $4, $5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, _width, _height ); END; $$ LANGUAGE 'plpgsql' STABLE STRICT; ----------------------------------------------------------------------- -- One Raster ST_MapAlgebra ----------------------------------------------------------------------- -- This function can not be STRICT, because nodataval can be NULL -- or pixeltype can not be determined (could be st_bandpixeltype(raster, band) though) CREATE OR REPLACE FUNCTION st_mapalgebraexpr(rast raster, band integer, pixeltype text, expression text, nodataval double precision DEFAULT NULL) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_mapAlgebraExpr' LANGUAGE 'c' IMMUTABLE; -- This function can not be STRICT, because nodataval can be NULL -- or pixeltype can not be determined (could be st_bandpixeltype(raster, band) though) CREATE OR REPLACE FUNCTION st_mapalgebraexpr(rast raster, pixeltype text, expression text, nodataval double precision DEFAULT NULL) RETURNS raster AS $$ SELECT st_mapalgebraexpr($1, 1, $2, $3, $4) $$ LANGUAGE 'sql'; -- All arguments supplied, use the C implementation. CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, band integer, pixeltype text, onerastuserfunc regprocedure, variadic args text[]) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_mapAlgebraFct' LANGUAGE 'c' IMMUTABLE; -- Variant 1: missing user args CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, band integer, pixeltype text, onerastuserfunc regprocedure) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, $2, $3, $4, NULL) $$ LANGUAGE 'sql'; -- Variant 2: missing pixeltype; default to pixeltype of rast CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, band integer, onerastuserfunc regprocedure, variadic args text[]) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, $2, NULL, $3, VARIADIC $4) $$ LANGUAGE 'sql'; -- Variant 3: missing pixeltype and user args; default to pixeltype of rast CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, band integer, onerastuserfunc regprocedure) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, $2, NULL, $3, NULL) $$ LANGUAGE 'sql'; -- Variant 4: missing band; default to band 1 CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, pixeltype text, onerastuserfunc regprocedure, variadic args text[]) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, 1, $2, $3, VARIADIC $4) $$ LANGUAGE 'sql'; -- Variant 5: missing band and user args; default to band 1 CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, pixeltype text, onerastuserfunc regprocedure) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, 1, $2, $3, NULL) $$ LANGUAGE 'sql'; -- Variant 6: missing band, and pixeltype; default to band 1, pixeltype of rast. CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, onerastuserfunc regprocedure, variadic args text[]) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, 1, NULL, $2, VARIADIC $3) $$ LANGUAGE 'sql'; -- Variant 7: missing band, pixeltype, and user args; default to band 1, pixeltype of rast. CREATE OR REPLACE FUNCTION st_mapalgebrafct(rast raster, onerastuserfunc regprocedure) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, 1, NULL, $2, NULL) $$ LANGUAGE 'sql'; ----------------------------------------------------------------------- -- Two Raster ST_MapAlgebra ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_mapalgebraexpr( rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', nodata1expr text DEFAULT NULL, nodata2expr text DEFAULT NULL, nodatanodataval double precision DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_mapAlgebra2' LANGUAGE 'c' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebraexpr( rast1 raster, rast2 raster, expression text, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', nodata1expr text DEFAULT NULL, nodata2expr text DEFAULT NULL, nodatanodataval double precision DEFAULT NULL ) RETURNS raster AS $$ SELECT st_mapalgebraexpr($1, 1, $2, 1, $3, $4, $5, $6, $7, $8) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebrafct( rast1 raster, band1 integer, rast2 raster, band2 integer, tworastuserfunc regprocedure, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_mapAlgebra2' LANGUAGE 'c' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebrafct( rast1 raster, rast2 raster, tworastuserfunc regprocedure, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS $$ SELECT st_mapalgebrafct($1, 1, $2, 1, $3, $4, $5, VARIADIC $6) $$ LANGUAGE 'sql' STABLE; ----------------------------------------------------------------------- -- Neighborhood single raster map algebra ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_mapalgebrafctngb( rast raster, band integer, pixeltype text, ngbwidth integer, ngbheight integer, onerastngbuserfunc regprocedure, nodatamode text, variadic args text[] ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_mapAlgebraFctNgb' LANGUAGE 'c' IMMUTABLE; ----------------------------------------------------------------------- -- ST_MapAlgebraFctNgb() Neighborhood MapAlgebra processing functions. ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_max4ma(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE _matrix float[][]; max float; BEGIN _matrix := matrix; max := '-Infinity'::float; FOR x in array_lower(_matrix, 1)..array_upper(_matrix, 1) LOOP FOR y in array_lower(_matrix, 2)..array_upper(_matrix, 2) LOOP IF _matrix[x][y] IS NULL THEN IF NOT nodatamode = 'ignore' THEN _matrix[x][y] := nodatamode::float; END IF; END IF; IF max < _matrix[x][y] THEN max := _matrix[x][y]; END IF; END LOOP; END LOOP; RETURN max; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_min4ma(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE _matrix float[][]; min float; BEGIN _matrix := matrix; min := 'Infinity'::float; FOR x in array_lower(_matrix, 1)..array_upper(_matrix, 1) LOOP FOR y in array_lower(_matrix, 2)..array_upper(_matrix, 2) LOOP IF _matrix[x][y] IS NULL THEN IF NOT nodatamode = 'ignore' THEN _matrix[x][y] := nodatamode::float; END IF; END IF; IF min > _matrix[x][y] THEN min := _matrix[x][y]; END IF; END LOOP; END LOOP; RETURN min; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_sum4ma(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE _matrix float[][]; sum float; BEGIN _matrix := matrix; sum := 0; FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP IF _matrix[x][y] IS NULL THEN IF nodatamode = 'ignore' THEN _matrix[x][y] := 0; ELSE _matrix[x][y] := nodatamode::float; END IF; END IF; sum := sum + _matrix[x][y]; END LOOP; END LOOP; RETURN sum; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_mean4ma(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE _matrix float[][]; sum float; count float; BEGIN _matrix := matrix; sum := 0; count := 0; FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP IF _matrix[x][y] IS NULL THEN IF nodatamode = 'ignore' THEN _matrix[x][y] := 0; ELSE _matrix[x][y] := nodatamode::float; count := count + 1; END IF; ELSE count := count + 1; END IF; sum := sum + _matrix[x][y]; END LOOP; END LOOP; IF count = 0 THEN RETURN NULL; END IF; RETURN sum / count; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_range4ma(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE _matrix float[][]; min float; max float; BEGIN _matrix := matrix; min := 'Infinity'::float; max := '-Infinity'::float; FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP IF _matrix[x][y] IS NULL THEN IF NOT nodatamode = 'ignore' THEN _matrix[x][y] := nodatamode::float; END IF; END IF; IF min > _matrix[x][y] THEN min = _matrix[x][y]; END IF; IF max < _matrix[x][y] THEN max = _matrix[x][y]; END IF; END LOOP; END LOOP; IF max = '-Infinity'::float OR min = 'Infinity'::float THEN RETURN NULL; END IF; RETURN max - min; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_distinct4ma(matrix float[][], nodatamode TEXT, VARIADIC args TEXT[]) RETURNS float AS $$ SELECT COUNT(DISTINCT unnest)::float FROM unnest($1) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_stddev4ma(matrix float[][], nodatamode TEXT, VARIADIC args TEXT[]) RETURNS float AS $$ SELECT stddev(unnest) FROM unnest($1) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- n-Raster ST_MapAlgebra ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_mapalgebra( rastbandargset rastbandarg[], callbackfunc regprocedure, pixeltype text DEFAULT NULL, distancex integer DEFAULT 0, distancey integer DEFAULT 0, extenttype text DEFAULT 'INTERSECTION', customextent raster DEFAULT NULL, VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_nMapAlgebra' LANGUAGE 'c' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rastbandargset rastbandarg[], callbackfunc regprocedure, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', customextent raster DEFAULT NULL, distancex integer DEFAULT 0, distancey integer DEFAULT 0, VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS $$ SELECT _ST_MapAlgebra($1, $2, $3, $6, $7, $4, $5, VARIADIC $8) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rast raster, nband int[], callbackfunc regprocedure, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'FIRST', customextent raster DEFAULT NULL, distancex integer DEFAULT 0, distancey integer DEFAULT 0, VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS $$ DECLARE x int; argset rastbandarg[]; BEGIN IF $2 IS NULL OR array_ndims($2) < 1 OR array_length($2, 1) < 1 THEN RAISE EXCEPTION 'Populated 1D array must be provided for nband'; RETURN NULL; END IF; FOR x IN array_lower($2, 1)..array_upper($2, 1) LOOP IF $2[x] IS NULL THEN CONTINUE; END IF; argset := argset || ROW($1, $2[x])::rastbandarg; END LOOP; IF array_length(argset, 1) < 1 THEN RAISE EXCEPTION 'Populated 1D array must be provided for nband'; RETURN NULL; END IF; RETURN _ST_MapAlgebra(argset, $3, $4, $7, $8, $5, $6, VARIADIC $9); END; $$ LANGUAGE 'plpgsql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rast raster, nband int, callbackfunc regprocedure, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'FIRST', customextent raster DEFAULT NULL, distancex integer DEFAULT 0, distancey integer DEFAULT 0, VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS $$ SELECT _ST_MapAlgebra(ARRAY[ROW($1, $2)]::rastbandarg[], $3, $4, $7, $8, $5, $6, VARIADIC $9) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rast1 raster, nband1 int, rast2 raster, nband2 int, callbackfunc regprocedure, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', customextent raster DEFAULT NULL, distancex integer DEFAULT 0, distancey integer DEFAULT 0, VARIADIC userargs text[] DEFAULT NULL ) RETURNS raster AS $$ SELECT _ST_MapAlgebra(ARRAY[ROW($1, $2), ROW($3, $4)]::rastbandarg[], $5, $6, $9, $10, $7, $8, VARIADIC $11) $$ LANGUAGE 'sql' STABLE; ----------------------------------------------------------------------- -- 1 or 2-Raster ST_MapAlgebra with expressions ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_mapalgebra( rastbandargset rastbandarg[], expression text, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', nodata1expr text DEFAULT NULL, nodata2expr text DEFAULT NULL, nodatanodataval double precision DEFAULT NULL ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_nMapAlgebraExpr' LANGUAGE 'c' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rast raster, nband integer, pixeltype text, expression text, nodataval double precision DEFAULT NULL ) RETURNS raster AS $$ SELECT _st_mapalgebra(ARRAY[ROW($1, $2)]::rastbandarg[], $4, $3, 'FIRST', $5::text) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rast raster, pixeltype text, expression text, nodataval double precision DEFAULT NULL ) RETURNS raster AS $$ SELECT st_mapalgebra($1, 1, $2, $3, $4) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', nodata1expr text DEFAULT NULL, nodata2expr text DEFAULT NULL, nodatanodataval double precision DEFAULT NULL ) RETURNS raster AS $$ SELECT _st_mapalgebra(ARRAY[ROW($1, $2), ROW($3, $4)]::rastbandarg[], $5, $6, $7, $8, $9, $10) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_mapalgebra( rast1 raster, rast2 raster, expression text, pixeltype text DEFAULT NULL, extenttype text DEFAULT 'INTERSECTION', nodata1expr text DEFAULT NULL, nodata2expr text DEFAULT NULL, nodatanodataval double precision DEFAULT NULL ) RETURNS raster AS $$ SELECT st_mapalgebra($1, 1, $2, 1, $3, $4, $5, $6, $7, $8) $$ LANGUAGE 'sql' STABLE; ----------------------------------------------------------------------- -- ST_MapAlgebra callback functions -- Should be called with values for distancex and distancey -- These functions are meant for one raster ----------------------------------------------------------------------- -- helper function to convert 2D array to 3D array CREATE OR REPLACE FUNCTION _st_convertarray4ma(value double precision[][]) RETURNS double precision[][][] AS $$ DECLARE _value double precision[][][]; x int; y int; BEGIN IF array_ndims(value) != 2 THEN RAISE EXCEPTION 'Function parameter must be a 2-dimension array'; END IF; _value := array_fill(NULL::double precision, ARRAY[1, array_length(value, 1), array_length(value, 2)]::int[], ARRAY[1, array_lower(value, 1), array_lower(value, 2)]::int[]); -- row FOR y IN array_lower(value, 1)..array_upper(value, 1) LOOP -- column FOR x IN array_lower(value, 2)..array_upper(value, 2) LOOP _value[1][y][x] = value[y][x]; END LOOP; END LOOP; RETURN _value; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_max4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _value double precision[][][]; max double precision; x int; y int; z int; ndims int; BEGIN max := '-Infinity'::double precision; ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- raster FOR z IN array_lower(_value, 1)..array_upper(_value, 1) LOOP -- row FOR y IN array_lower(_value, 2)..array_upper(_value, 2) LOOP -- column FOR x IN array_lower(_value, 3)..array_upper(_value, 3) LOOP IF _value[z][y][x] IS NULL THEN IF array_length(userargs, 1) > 0 THEN _value[z][y][x] = userargs[array_lower(userargs, 1)]::double precision; ELSE CONTINUE; END IF; END IF; IF _value[z][y][x] > max THEN max := _value[z][y][x]; END IF; END LOOP; END LOOP; END LOOP; IF max = '-Infinity'::double precision THEN RETURN NULL; END IF; RETURN max; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_min4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _value double precision[][][]; min double precision; x int; y int; z int; ndims int; BEGIN min := 'Infinity'::double precision; ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- raster FOR z IN array_lower(_value, 1)..array_upper(_value, 1) LOOP -- row FOR y IN array_lower(_value, 2)..array_upper(_value, 2) LOOP -- column FOR x IN array_lower(_value, 3)..array_upper(_value, 3) LOOP IF _value[z][y][x] IS NULL THEN IF array_length(userargs, 1) > 0 THEN _value[z][y][x] = userargs[array_lower(userargs, 1)]::double precision; ELSE CONTINUE; END IF; END IF; IF _value[z][y][x] < min THEN min := _value[z][y][x]; END IF; END LOOP; END LOOP; END LOOP; IF min = 'Infinity'::double precision THEN RETURN NULL; END IF; RETURN min; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_sum4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _value double precision[][][]; sum double precision; x int; y int; z int; ndims int; BEGIN sum := 0; ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- raster FOR z IN array_lower(_value, 1)..array_upper(_value, 1) LOOP -- row FOR y IN array_lower(_value, 2)..array_upper(_value, 2) LOOP -- column FOR x IN array_lower(_value, 3)..array_upper(_value, 3) LOOP IF _value[z][y][x] IS NULL THEN IF array_length(userargs, 1) > 0 THEN _value[z][y][x] = userargs[array_lower(userargs, 1)]::double precision; ELSE CONTINUE; END IF; END IF; sum := sum + _value[z][y][x]; END LOOP; END LOOP; END LOOP; RETURN sum; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_mean4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _value double precision[][][]; sum double precision; count int; x int; y int; z int; ndims int; BEGIN sum := 0; count := 0; ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- raster FOR z IN array_lower(_value, 1)..array_upper(_value, 1) LOOP -- row FOR y IN array_lower(_value, 2)..array_upper(_value, 2) LOOP -- column FOR x IN array_lower(_value, 3)..array_upper(_value, 3) LOOP IF _value[z][y][x] IS NULL THEN IF array_length(userargs, 1) > 0 THEN _value[z][y][x] = userargs[array_lower(userargs, 1)]::double precision; ELSE CONTINUE; END IF; END IF; sum := sum + _value[z][y][x]; count := count + 1; END LOOP; END LOOP; END LOOP; IF count < 1 THEN RETURN NULL; END IF; RETURN sum / count::double precision; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_range4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _value double precision[][][]; min double precision; max double precision; x int; y int; z int; ndims int; BEGIN min := 'Infinity'::double precision; max := '-Infinity'::double precision; ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- raster FOR z IN array_lower(_value, 1)..array_upper(_value, 1) LOOP -- row FOR y IN array_lower(_value, 2)..array_upper(_value, 2) LOOP -- column FOR x IN array_lower(_value, 3)..array_upper(_value, 3) LOOP IF _value[z][y][x] IS NULL THEN IF array_length(userargs, 1) > 0 THEN _value[z][y][x] = userargs[array_lower(userargs, 1)]::double precision; ELSE CONTINUE; END IF; END IF; IF _value[z][y][x] < min THEN min := _value[z][y][x]; END IF; IF _value[z][y][x] > max THEN max := _value[z][y][x]; END IF; END LOOP; END LOOP; END LOOP; IF max = '-Infinity'::double precision OR min = 'Infinity'::double precision THEN RETURN NULL; END IF; RETURN max - min; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_distinct4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ SELECT COUNT(DISTINCT unnest)::double precision FROM unnest($1) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_stddev4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ SELECT stddev(unnest) FROM unnest($1) $$ LANGUAGE 'sql' IMMUTABLE; -- Inverse distance weight equation is based upon Equation 3.51 from the book -- Spatial Analysis A Guide for Ecologists -- by Marie-Josee Fortin and Mark Dale -- published by Cambridge University Press -- ISBN 0-521-00973-1 CREATE OR REPLACE FUNCTION st_invdistweight4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _value double precision[][][]; ndims int; k double precision DEFAULT 1.; _k double precision DEFAULT 1.; z double precision[]; d double precision[]; _d double precision; z0 double precision; _z integer; x integer; y integer; cx integer; cy integer; cv double precision; cw double precision DEFAULT NULL; w integer; h integer; max_dx double precision; max_dy double precision; BEGIN -- RAISE NOTICE 'value = %', value; -- RAISE NOTICE 'userargs = %', userargs; ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; _z := array_lower(_value, 1); -- width and height (0-based) h := array_upper(_value, 2) - array_lower(_value, 2); w := array_upper(_value, 3) - array_lower(_value, 3); -- max distance from center pixel max_dx := w / 2; max_dy := h / 2; -- RAISE NOTICE 'max_dx, max_dy = %, %', max_dx, max_dy; -- correct width and height (1-based) w := w + 1; h := h + 1; -- RAISE NOTICE 'w, h = %, %', w, h; -- width and height should be odd numbers IF w % 2. != 1 THEN RAISE EXCEPTION 'Width of neighborhood array does not permit for a center pixel'; END IF; IF h % 2. != 1 THEN RAISE EXCEPTION 'Height of neighborhood array does not permit for a center pixel'; END IF; -- center pixel's coordinates cy := max_dy + array_lower(_value, 2); cx := max_dx + array_lower(_value, 3); -- RAISE NOTICE 'cx, cy = %, %', cx, cy; -- if userargs provided, only use the first two args IF userargs IS NOT NULL AND array_ndims(userargs) = 1 THEN -- first arg is power factor k := userargs[array_lower(userargs, 1)]::double precision; IF k IS NULL THEN k := _k; ELSEIF k < 0. THEN RAISE NOTICE 'Power factor (< 0) must be between 0 and 1. Defaulting to 0'; k := 0.; ELSEIF k > 1. THEN RAISE NOTICE 'Power factor (> 1) must be between 0 and 1. Defaulting to 1'; k := 1.; END IF; -- second arg is what to do if center pixel has a value -- this will be a weight to apply for the center pixel IF array_length(userargs, 1) > 1 THEN cw := abs(userargs[array_lower(userargs, 1) + 1]::double precision); IF cw IS NOT NULL THEN IF cw < 0. THEN RAISE NOTICE 'Weight (< 0) of center pixel value must be between 0 and 1. Defaulting to 0'; cw := 0.; ELSEIF cw > 1 THEN RAISE NOTICE 'Weight (> 1) of center pixel value must be between 0 and 1. Defaulting to 1'; cw := 1.; END IF; END IF; END IF; END IF; -- RAISE NOTICE 'k = %', k; k = abs(k) * -1; -- center pixel value cv := _value[_z][cy][cx]; -- check to see if center pixel has value -- RAISE NOTICE 'cw = %', cw; IF cw IS NULL AND cv IS NOT NULL THEN RETURN cv; END IF; FOR y IN array_lower(_value, 2)..array_upper(_value, 2) LOOP FOR x IN array_lower(_value, 3)..array_upper(_value, 3) LOOP -- RAISE NOTICE 'value[%][%][%] = %', _z, y, x, _value[_z][y][x]; -- skip NODATA values and center pixel IF _value[_z][y][x] IS NULL OR (x = cx AND y = cy) THEN CONTINUE; END IF; z := z || _value[_z][y][x]; -- use pythagorean theorem _d := sqrt(power(cx - x, 2) + power(cy - y, 2)); -- RAISE NOTICE 'distance = %', _d; d := d || _d; END LOOP; END LOOP; -- RAISE NOTICE 'z = %', z; -- RAISE NOTICE 'd = %', d; -- neighborhood is NODATA IF z IS NULL OR array_length(z, 1) < 1 THEN -- center pixel has value IF cv IS NOT NULL THEN RETURN cv; ELSE RETURN NULL; END IF; END IF; z0 := 0; _d := 0; FOR x IN array_lower(z, 1)..array_upper(z, 1) LOOP d[x] := power(d[x], k); z[x] := z[x] * d[x]; _d := _d + d[x]; z0 := z0 + z[x]; END LOOP; z0 := z0 / _d; -- RAISE NOTICE 'z0 = %', z0; -- apply weight for center pixel if center pixel has value IF cv IS NOT NULL THEN z0 := (cw * cv) + ((1 - cw) * z0); -- RAISE NOTICE '*z0 = %', z0; END IF; RETURN z0; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_mindist4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _value double precision[][][]; ndims int; d double precision DEFAULT NULL; _d double precision; z integer; x integer; y integer; cx integer; cy integer; cv double precision; w integer; h integer; max_dx double precision; max_dy double precision; BEGIN ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; z := array_lower(_value, 1); -- width and height (0-based) h := array_upper(_value, 2) - array_lower(_value, 2); w := array_upper(_value, 3) - array_lower(_value, 3); -- max distance from center pixel max_dx := w / 2; max_dy := h / 2; -- correct width and height (1-based) w := w + 1; h := h + 1; -- width and height should be odd numbers IF w % 2. != 1 THEN RAISE EXCEPTION 'Width of neighborhood array does not permit for a center pixel'; END IF; IF h % 2. != 1 THEN RAISE EXCEPTION 'Height of neighborhood array does not permit for a center pixel'; END IF; -- center pixel's coordinates cy := max_dy + array_lower(_value, 2); cx := max_dx + array_lower(_value, 3); -- center pixel value cv := _value[z][cy][cx]; -- check to see if center pixel has value IF cv IS NOT NULL THEN RETURN 0.; END IF; FOR y IN array_lower(_value, 2)..array_upper(_value, 2) LOOP FOR x IN array_lower(_value, 3)..array_upper(_value, 3) LOOP -- skip NODATA values and center pixel IF _value[z][y][x] IS NULL OR (x = cx AND y = cy) THEN CONTINUE; END IF; -- use pythagorean theorem _d := sqrt(power(cx - x, 2) + power(cy - y, 2)); -- RAISE NOTICE 'distance = %', _d; IF d IS NULL OR _d < d THEN d := _d; END IF; END LOOP; END LOOP; -- RAISE NOTICE 'd = %', d; RETURN d; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_Slope -- http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=How%20Hillshade%20works ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_slope4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE x integer; y integer; z integer; _pixwidth double precision; _pixheight double precision; _width double precision; _height double precision; _units text; _scale double precision; dz_dx double precision; dz_dy double precision; slope double precision; _value double precision[][][]; ndims int; BEGIN ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; z := array_lower(_value, 1); IF ( array_lower(_value, 2) != 1 OR array_upper(_value, 2) != 3 OR array_lower(_value, 3) != 1 OR array_upper(_value, 3) != 3 ) THEN RAISE EXCEPTION 'First parameter of function must be a 1x3x3 array with each of the lower bounds starting from 1'; END IF; IF array_length(userargs, 1) < 6 THEN RAISE EXCEPTION 'At least six elements must be provided for the third parameter'; END IF; _pixwidth := userargs[1]::double precision; _pixheight := userargs[2]::double precision; _width := userargs[3]::double precision; _height := userargs[4]::double precision; _units := userargs[5]; _scale := userargs[6]::double precision; /* ArcGIS returns values for edge pixels -- check that pixel is not edge pixel IF (pos[1][1] = 1 OR pos[1][2] = 1) OR (pos[1][1] = _width OR pos[1][2] = _height) THEN RETURN NULL; ELSEIF _value[z][2][2] IS NULL THEN */ -- check that center pixel isn't NODATA IF _value[z][2][2] IS NULL THEN RETURN NULL; -- substitute center pixel for any neighbor pixels that are NODATA ELSE FOR y IN 1..3 LOOP FOR x IN 1..3 LOOP IF _value[z][y][x] IS NULL THEN _value[z][y][x] = _value[z][2][2]; END IF; END LOOP; END LOOP; END IF; dz_dy := ((_value[z][3][1] + _value[z][3][2] + _value[z][3][2] + _value[z][3][3]) - (_value[z][1][1] + _value[z][1][2] + _value[z][1][2] + _value[z][1][3])) / _pixheight; dz_dx := ((_value[z][1][3] + _value[z][2][3] + _value[z][2][3] + _value[z][3][3]) - (_value[z][1][1] + _value[z][2][1] + _value[z][2][1] + _value[z][3][1])) / _pixwidth; slope := sqrt(dz_dx * dz_dx + dz_dy * dz_dy) / (8 * _scale); -- output depends on user preference CASE substring(upper(trim(leading from _units)) for 3) -- percentages WHEN 'PER' THEN slope := 100.0 * slope; -- radians WHEN 'rad' THEN slope := atan(slope); -- degrees (default) ELSE slope := degrees(atan(slope)); END CASE; RETURN slope; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_slope( rast raster, nband integer, customextent raster, pixeltype text DEFAULT '32BF', units text DEFAULT 'DEGREES', scale double precision DEFAULT 1.0, interpolate_nodata boolean DEFAULT FALSE ) RETURNS raster AS $$ DECLARE _rast raster; _nband integer; _pixtype text; _pixwidth double precision; _pixheight double precision; _width integer; _height integer; _customextent raster; _extenttype text; BEGIN _customextent := customextent; IF _customextent IS NULL THEN _extenttype := 'FIRST'; ELSE _extenttype := 'CUSTOM'; END IF; IF interpolate_nodata IS TRUE THEN _rast := ST_MapAlgebra( ARRAY[ROW(rast, nband)]::rastbandarg[], 'st_invdistweight4ma(double precision[][][], integer[][], text[])'::regprocedure, pixeltype, 'FIRST', NULL, 1, 1 ); _nband := 1; _pixtype := NULL; ELSE _rast := rast; _nband := nband; _pixtype := pixeltype; END IF; -- get properties _pixwidth := ST_PixelWidth(_rast); _pixheight := ST_PixelHeight(_rast); SELECT width, height INTO _width, _height FROM ST_Metadata(_rast); RETURN ST_MapAlgebra( ARRAY[ROW(_rast, _nband)]::rastbandarg[], '_st_slope4ma(double precision[][][], integer[][], text[])'::regprocedure, _pixtype, _extenttype, _customextent, 1, 1, _pixwidth::text, _pixheight::text, _width::text, _height::text, units::text, scale::text ); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_slope( rast raster, nband integer DEFAULT 1, pixeltype text DEFAULT '32BF', units text DEFAULT 'DEGREES', scale double precision DEFAULT 1.0, interpolate_nodata boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT st_slope($1, $2, NULL::raster, $3, $4, $5, $6) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_Aspect -- http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=How%20Hillshade%20works ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_aspect4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE x integer; y integer; z integer; _width double precision; _height double precision; _units text; dz_dx double precision; dz_dy double precision; aspect double precision; halfpi double precision; _value double precision[][][]; ndims int; BEGIN ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; IF ( array_lower(_value, 2) != 1 OR array_upper(_value, 2) != 3 OR array_lower(_value, 3) != 1 OR array_upper(_value, 3) != 3 ) THEN RAISE EXCEPTION 'First parameter of function must be a 1x3x3 array with each of the lower bounds starting from 1'; END IF; IF array_length(userargs, 1) < 3 THEN RAISE EXCEPTION 'At least three elements must be provided for the third parameter'; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; z := array_lower(_value, 1); _width := userargs[1]::double precision; _height := userargs[2]::double precision; _units := userargs[3]; /* ArcGIS returns values for edge pixels -- check that pixel is not edge pixel IF (pos[1][1] = 1 OR pos[1][2] = 1) OR (pos[1][1] = _width OR pos[1][2] = _height) THEN RETURN NULL; ELSEIF _value[z][2][2] IS NULL THEN */ -- check that center pixel isn't NODATA IF _value[z][2][2] IS NULL THEN RETURN NULL; -- substitute center pixel for any neighbor pixels that are NODATA ELSE FOR y IN 1..3 LOOP FOR x IN 1..3 LOOP IF _value[z][y][x] IS NULL THEN _value[z][y][x] = _value[z][2][2]; END IF; END LOOP; END LOOP; END IF; dz_dy := ((_value[z][3][1] + _value[z][3][2] + _value[z][3][2] + _value[z][3][3]) - (_value[z][1][1] + _value[z][1][2] + _value[z][1][2] + _value[z][1][3])); dz_dx := ((_value[z][1][3] + _value[z][2][3] + _value[z][2][3] + _value[z][3][3]) - (_value[z][1][1] + _value[z][2][1] + _value[z][2][1] + _value[z][3][1])); -- aspect is flat IF abs(dz_dx) = 0::double precision AND abs(dz_dy) = 0::double precision THEN RETURN -1; END IF; -- aspect is in radians aspect := atan2(dz_dy, -dz_dx); -- north = 0, pi/2 = east, 3pi/2 = west halfpi := pi() / 2.0; IF aspect > halfpi THEN aspect := (5.0 * halfpi) - aspect; ELSE aspect := halfpi - aspect; END IF; IF aspect = 2 * pi() THEN aspect := 0.; END IF; -- output depends on user preference CASE substring(upper(trim(leading from _units)) for 3) -- radians WHEN 'rad' THEN RETURN aspect; -- degrees (default) ELSE RETURN degrees(aspect); END CASE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_aspect( rast raster, nband integer, customextent raster, pixeltype text DEFAULT '32BF', units text DEFAULT 'DEGREES', interpolate_nodata boolean DEFAULT FALSE ) RETURNS raster AS $$ DECLARE _rast raster; _nband integer; _pixtype text; _width integer; _height integer; _customextent raster; _extenttype text; BEGIN _customextent := customextent; IF _customextent IS NULL THEN _extenttype := 'FIRST'; ELSE _extenttype := 'CUSTOM'; END IF; IF interpolate_nodata IS TRUE THEN _rast := ST_MapAlgebra( ARRAY[ROW(rast, nband)]::rastbandarg[], 'st_invdistweight4ma(double precision[][][], integer[][], text[])'::regprocedure, pixeltype, 'FIRST', NULL, 1, 1 ); _nband := 1; _pixtype := NULL; ELSE _rast := rast; _nband := nband; _pixtype := pixeltype; END IF; -- get properties SELECT width, height INTO _width, _height FROM ST_Metadata(_rast); RETURN ST_MapAlgebra( ARRAY[ROW(_rast, _nband)]::rastbandarg[], '_st_aspect4ma(double precision[][][], integer[][], text[])'::regprocedure, _pixtype, _extenttype, _customextent, 1, 1, _width::text, _height::text, units::text ); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_aspect( rast raster, nband integer DEFAULT 1, pixeltype text DEFAULT '32BF', units text DEFAULT 'DEGREES', interpolate_nodata boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT st_aspect($1, $2, NULL::raster, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_HillShade -- http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=How%20Hillshade%20works ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_hillshade4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE _pixwidth double precision; _pixheight double precision; _width double precision; _height double precision; _azimuth double precision; _altitude double precision; _bright double precision; _scale double precision; dz_dx double precision; dz_dy double precision; azimuth double precision; zenith double precision; slope double precision; aspect double precision; shade double precision; _value double precision[][][]; ndims int; z int; BEGIN ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; IF ( array_lower(_value, 2) != 1 OR array_upper(_value, 2) != 3 OR array_lower(_value, 3) != 1 OR array_upper(_value, 3) != 3 ) THEN RAISE EXCEPTION 'First parameter of function must be a 1x3x3 array with each of the lower bounds starting from 1'; END IF; IF array_length(userargs, 1) < 8 THEN RAISE EXCEPTION 'At least eight elements must be provided for the third parameter'; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; z := array_lower(_value, 1); _pixwidth := userargs[1]::double precision; _pixheight := userargs[2]::double precision; _width := userargs[3]::double precision; _height := userargs[4]::double precision; _azimuth := userargs[5]::double precision; _altitude := userargs[6]::double precision; _bright := userargs[7]::double precision; _scale := userargs[8]::double precision; -- check that pixel is not edge pixel IF (pos[1][1] = 1 OR pos[1][2] = 1) OR (pos[1][1] = _width OR pos[1][2] = _height) THEN RETURN NULL; END IF; -- clamp azimuth IF _azimuth < 0. THEN RAISE NOTICE 'Clamping provided azimuth value % to 0', _azimuth; _azimuth := 0.; ELSEIF _azimuth >= 360. THEN RAISE NOTICE 'Converting provided azimuth value % to be between 0 and 360', _azimuth; _azimuth := _azimuth - (360. * floor(_azimuth / 360.)); END IF; azimuth := 360. - _azimuth + 90.; IF azimuth >= 360. THEN azimuth := azimuth - 360.; END IF; azimuth := radians(azimuth); --RAISE NOTICE 'azimuth = %', azimuth; -- clamp altitude IF _altitude < 0. THEN RAISE NOTICE 'Clamping provided altitude value % to 0', _altitude; _altitude := 0.; ELSEIF _altitude > 90. THEN RAISE NOTICE 'Clamping provided altitude value % to 90', _altitude; _altitude := 90.; END IF; zenith := radians(90. - _altitude); --RAISE NOTICE 'zenith = %', zenith; -- clamp bright IF _bright < 0. THEN RAISE NOTICE 'Clamping provided bright value % to 0', _bright; _bright := 0.; ELSEIF _bright > 255. THEN RAISE NOTICE 'Clamping provided bright value % to 255', _bright; _bright := 255.; END IF; dz_dy := ((_value[z][3][1] + _value[z][3][2] + _value[z][3][2] + _value[z][3][3]) - (_value[z][1][1] + _value[z][1][2] + _value[z][1][2] + _value[z][1][3])) / (8 * _pixheight); dz_dx := ((_value[z][1][3] + _value[z][2][3] + _value[z][2][3] + _value[z][3][3]) - (_value[z][1][1] + _value[z][2][1] + _value[z][2][1] + _value[z][3][1])) / (8 * _pixwidth); slope := atan(sqrt(dz_dx * dz_dx + dz_dy * dz_dy) / _scale); IF dz_dx != 0. THEN aspect := atan2(dz_dy, -dz_dx); IF aspect < 0. THEN aspect := aspect + (2.0 * pi()); END IF; ELSE IF dz_dy > 0. THEN aspect := pi() / 2.; ELSEIF dz_dy < 0. THEN aspect := (2. * pi()) - (pi() / 2.); -- set to pi as that is the expected PostgreSQL answer in Linux ELSE aspect := pi(); END IF; END IF; shade := _bright * ((cos(zenith) * cos(slope)) + (sin(zenith) * sin(slope) * cos(azimuth - aspect))); IF shade < 0. THEN shade := 0; END IF; RETURN shade; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_hillshade( rast raster, nband integer, customextent raster, pixeltype text DEFAULT '32BF', azimuth double precision DEFAULT 315.0, altitude double precision DEFAULT 45.0, max_bright double precision DEFAULT 255.0, scale double precision DEFAULT 1.0, interpolate_nodata boolean DEFAULT FALSE ) RETURNS RASTER AS $$ DECLARE _rast raster; _nband integer; _pixtype text; _pixwidth double precision; _pixheight double precision; _width integer; _height integer; _customextent raster; _extenttype text; BEGIN _customextent := customextent; IF _customextent IS NULL THEN _extenttype := 'FIRST'; ELSE _extenttype := 'CUSTOM'; END IF; IF interpolate_nodata IS TRUE THEN _rast := ST_MapAlgebra( ARRAY[ROW(rast, nband)]::rastbandarg[], 'st_invdistweight4ma(double precision[][][], integer[][], text[])'::regprocedure, pixeltype, 'FIRST', NULL, 1, 1 ); _nband := 1; _pixtype := NULL; ELSE _rast := rast; _nband := nband; _pixtype := pixeltype; END IF; -- get properties _pixwidth := ST_PixelWidth(_rast); _pixheight := ST_PixelHeight(_rast); SELECT width, height, scalex INTO _width, _height FROM ST_Metadata(_rast); RETURN ST_MapAlgebra( ARRAY[ROW(_rast, _nband)]::rastbandarg[], '_st_hillshade4ma(double precision[][][], integer[][], text[])'::regprocedure, _pixtype, _extenttype, _customextent, 1, 1, _pixwidth::text, _pixheight::text, _width::text, _height::text, $5::text, $6::text, $7::text, $8::text ); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_hillshade( rast raster, nband integer DEFAULT 1, pixeltype text DEFAULT '32BF', azimuth double precision DEFAULT 315.0, altitude double precision DEFAULT 45.0, max_bright double precision DEFAULT 255.0, scale double precision DEFAULT 1.0, interpolate_nodata boolean DEFAULT FALSE ) RETURNS RASTER AS $$ SELECT st_hillshade($1, $2, NULL::raster, $3, $4, $5, $6, $7, $8) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_TPI ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_tpi4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE x integer; y integer; z integer; Z1 double precision; Z2 double precision; Z3 double precision; Z4 double precision; Z5 double precision; Z6 double precision; Z7 double precision; Z8 double precision; Z9 double precision; tpi double precision; mean double precision; _value double precision[][][]; ndims int; BEGIN ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; z := array_lower(_value, 1); IF ( array_lower(_value, 2) != 1 OR array_upper(_value, 2) != 3 OR array_lower(_value, 3) != 1 OR array_upper(_value, 3) != 3 ) THEN RAISE EXCEPTION 'First parameter of function must be a 1x3x3 array with each of the lower bounds starting from 1'; END IF; -- check that center pixel isn't NODATA IF _value[z][2][2] IS NULL THEN RETURN NULL; -- substitute center pixel for any neighbor pixels that are NODATA ELSE FOR y IN 1..3 LOOP FOR x IN 1..3 LOOP IF _value[z][y][x] IS NULL THEN _value[z][y][x] = _value[z][2][2]; END IF; END LOOP; END LOOP; END IF; ------------------------------------------------- --| Z1= Z(-1,1) | Z2= Z(0,1) | Z3= Z(1,1) |-- ------------------------------------------------- --| Z4= Z(-1,0) | Z5= Z(0,0) | Z6= Z(1,0) |-- ------------------------------------------------- --| Z7= Z(-1,-1)| Z8= Z(0,-1)| Z9= Z(1,-1)|-- ------------------------------------------------- Z1 := _value[z][1][1]; Z2 := _value[z][2][1]; Z3 := _value[z][3][1]; Z4 := _value[z][1][2]; Z5 := _value[z][2][2]; Z6 := _value[z][3][2]; Z7 := _value[z][1][3]; Z8 := _value[z][2][3]; Z9 := _value[z][3][3]; mean := (Z1 + Z2 + Z3 + Z4 + Z6 + Z7 + Z8 + Z9)/8; tpi := Z5-mean; return tpi; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_tpi( rast raster, nband integer, customextent raster, pixeltype text DEFAULT '32BF', interpolate_nodata boolean DEFAULT FALSE ) RETURNS raster AS $$ DECLARE _rast raster; _nband integer; _pixtype text; _pixwidth double precision; _pixheight double precision; _width integer; _height integer; _customextent raster; _extenttype text; BEGIN _customextent := customextent; IF _customextent IS NULL THEN _extenttype := 'FIRST'; ELSE _extenttype := 'CUSTOM'; END IF; IF interpolate_nodata IS TRUE THEN _rast := ST_MapAlgebra( ARRAY[ROW(rast, nband)]::rastbandarg[], 'st_invdistweight4ma(double precision[][][], integer[][], text[])'::regprocedure, pixeltype, 'FIRST', NULL, 1, 1 ); _nband := 1; _pixtype := NULL; ELSE _rast := rast; _nband := nband; _pixtype := pixeltype; END IF; -- get properties _pixwidth := ST_PixelWidth(_rast); _pixheight := ST_PixelHeight(_rast); SELECT width, height INTO _width, _height FROM ST_Metadata(_rast); RETURN ST_MapAlgebra( ARRAY[ROW(_rast, _nband)]::rastbandarg[], '_st_tpi4ma(double precision[][][], integer[][], text[])'::regprocedure, _pixtype, _extenttype, _customextent, 1, 1); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_Roughness ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_roughness4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE x integer; y integer; z integer; minimum double precision; maximum double precision; _value double precision[][][]; ndims int; BEGIN ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; z := array_lower(_value, 1); IF ( array_lower(_value, 2) != 1 OR array_upper(_value, 2) != 3 OR array_lower(_value, 3) != 1 OR array_upper(_value, 3) != 3 ) THEN RAISE EXCEPTION 'First parameter of function must be a 1x3x3 array with each of the lower bounds starting from 1'; END IF; -- check that center pixel isn't NODATA IF _value[z][2][2] IS NULL THEN RETURN NULL; -- substitute center pixel for any neighbor pixels that are NODATA ELSE FOR y IN 1..3 LOOP FOR x IN 1..3 LOOP IF _value[z][y][x] IS NULL THEN _value[z][y][x] = _value[z][2][2]; END IF; END LOOP; END LOOP; END IF; minimum := _value[z][1][1]; maximum := _value[z][1][1]; FOR Y IN 1..3 LOOP FOR X IN 1..3 LOOP IF _value[z][y][x] < minimum THEN minimum := _value[z][y][x]; ELSIF _value[z][y][x] > maximum THEN maximum := _value[z][y][x]; END IF; END LOOP; END LOOP; RETURN maximum - minimum; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_roughness( rast raster, nband integer, customextent raster, pixeltype text DEFAULT '32BF', interpolate_nodata boolean DEFAULT FALSE ) RETURNS raster AS $$ DECLARE _rast raster; _nband integer; _pixtype text; _pixwidth double precision; _pixheight double precision; _width integer; _height integer; _customextent raster; _extenttype text; BEGIN _customextent := customextent; IF _customextent IS NULL THEN _extenttype := 'FIRST'; ELSE _extenttype := 'CUSTOM'; END IF; IF interpolate_nodata IS TRUE THEN _rast := ST_MapAlgebra( ARRAY[ROW(rast, nband)]::rastbandarg[], 'st_invdistweight4ma(double precision[][][], integer[][], text[])'::regprocedure, pixeltype, 'FIRST', NULL, 1, 1 ); _nband := 1; _pixtype := NULL; ELSE _rast := rast; _nband := nband; _pixtype := pixeltype; END IF; RETURN ST_MapAlgebra( ARRAY[ROW(_rast, _nband)]::rastbandarg[], '_st_roughness4ma(double precision[][][], integer[][], text[])'::regprocedure, _pixtype, _extenttype, _customextent, 1, 1); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_TRI ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_tri4ma(value double precision[][][], pos integer[][], VARIADIC userargs text[] DEFAULT NULL) RETURNS double precision AS $$ DECLARE x integer; y integer; z integer; Z1 double precision; Z2 double precision; Z3 double precision; Z4 double precision; Z5 double precision; Z6 double precision; Z7 double precision; Z8 double precision; Z9 double precision; tri double precision; _value double precision[][][]; ndims int; BEGIN ndims := array_ndims(value); -- add a third dimension if 2-dimension IF ndims = 2 THEN _value := _st_convertarray4ma(value); ELSEIF ndims != 3 THEN RAISE EXCEPTION 'First parameter of function must be a 3-dimension array'; ELSE _value := value; END IF; -- only use the first raster passed to this function IF array_length(_value, 1) > 1 THEN RAISE NOTICE 'Only using the values from the first raster'; END IF; z := array_lower(_value, 1); IF ( array_lower(_value, 2) != 1 OR array_upper(_value, 2) != 3 OR array_lower(_value, 3) != 1 OR array_upper(_value, 3) != 3 ) THEN RAISE EXCEPTION 'First parameter of function must be a 1x3x3 array with each of the lower bounds starting from 1'; END IF; -- check that center pixel isn't NODATA IF _value[z][2][2] IS NULL THEN RETURN NULL; -- substitute center pixel for any neighbor pixels that are NODATA ELSE FOR y IN 1..3 LOOP FOR x IN 1..3 LOOP IF _value[z][y][x] IS NULL THEN _value[z][y][x] = _value[z][2][2]; END IF; END LOOP; END LOOP; END IF; ------------------------------------------------- --| Z1= Z(-1,1) | Z2= Z(0,1) | Z3= Z(1,1) |-- ------------------------------------------------- --| Z4= Z(-1,0) | Z5= Z(0,0) | Z6= Z(1,0) |-- ------------------------------------------------- --| Z7= Z(-1,-1)| Z8= Z(0,-1)| Z9= Z(1,-1)|-- ------------------------------------------------- -- _scale width and height units / z units to make z units equal to height width units Z1 := _value[z][1][1]; Z2 := _value[z][2][1]; Z3 := _value[z][3][1]; Z4 := _value[z][1][2]; Z5 := _value[z][2][2]; Z6 := _value[z][3][2]; Z7 := _value[z][1][3]; Z8 := _value[z][2][3]; Z9 := _value[z][3][3]; tri := ( abs(Z1 - Z5 ) + abs( Z2 - Z5 ) + abs( Z3 - Z5 ) + abs( Z4 - Z5 ) + abs( Z6 - Z5 ) + abs( Z7 - Z5 ) + abs( Z8 - Z5 ) + abs ( Z9 - Z5 )) / 8; return tri; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_tri( rast raster, nband integer, customextent raster, pixeltype text DEFAULT '32BF', interpolate_nodata boolean DEFAULT FALSE ) RETURNS raster AS $$ DECLARE _rast raster; _nband integer; _pixtype text; _pixwidth double precision; _pixheight double precision; _width integer; _height integer; _customextent raster; _extenttype text; BEGIN _customextent := customextent; IF _customextent IS NULL THEN _extenttype := 'FIRST'; ELSE _extenttype := 'CUSTOM'; END IF; IF interpolate_nodata IS TRUE THEN _rast := ST_MapAlgebra( ARRAY[ROW(rast, nband)]::rastbandarg[], 'st_invdistweight4ma(double precision[][][], integer[][], text[])'::regprocedure, pixeltype, 'FIRST', NULL, 1, 1 ); _nband := 1; _pixtype := NULL; ELSE _rast := rast; _nband := nband; _pixtype := pixeltype; END IF; -- get properties _pixwidth := ST_PixelWidth(_rast); _pixheight := ST_PixelHeight(_rast); SELECT width, height INTO _width, _height FROM ST_Metadata(_rast); RETURN ST_MapAlgebra( ARRAY[ROW(_rast, _nband)]::rastbandarg[], '_st_tri4ma(double precision[][][], integer[][], text[])'::regprocedure, _pixtype, _extenttype, _customextent, 1, 1); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; ----------------------------------------------------------------------- -- Get information about the raster ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_isempty(rast raster) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_isEmpty' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_hasnoband(rast raster, nband int DEFAULT 1) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_hasNoBand' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- Raster Band Accessors ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_bandnodatavalue(rast raster, band integer DEFAULT 1) RETURNS double precision AS 'MODULE_PATHNAME','RASTER_getBandNoDataValue' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_bandisnodata(rast raster, band integer DEFAULT 1, forceChecking boolean DEFAULT FALSE) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_bandIsNoData' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_bandisnodata(rast raster, forceChecking boolean) RETURNS boolean AS $$ SELECT st_bandisnodata($1, 1, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_bandpath(rast raster, band integer DEFAULT 1) RETURNS text AS 'MODULE_PATHNAME','RASTER_getBandPath' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_bandpixeltype(rast raster, band integer DEFAULT 1) RETURNS text AS 'MODULE_PATHNAME','RASTER_getBandPixelTypeName' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_bandmetadata( rast raster, band int[], OUT bandnum int, OUT pixeltype text, OUT nodatavalue double precision, OUT isoutdb boolean, OUT path text ) AS 'MODULE_PATHNAME','RASTER_bandmetadata' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_bandmetadata( rast raster, band int DEFAULT 1, OUT pixeltype text, OUT nodatavalue double precision, OUT isoutdb boolean, OUT path text ) AS $$ SELECT pixeltype, nodatavalue, isoutdb, path FROM st_bandmetadata($1, ARRAY[$2]::int[]) LIMIT 1 $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- Raster Pixel Accessors ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_value(rast raster, band integer, x integer, y integer, exclude_nodata_value boolean DEFAULT TRUE) RETURNS float8 AS 'MODULE_PATHNAME','RASTER_getPixelValue' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_value(rast raster, x integer, y integer, exclude_nodata_value boolean DEFAULT TRUE) RETURNS float8 AS $$ SELECT st_value($1, 1, $2, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_value(rast raster, band integer, pt geometry, exclude_nodata_value boolean DEFAULT TRUE) RETURNS float8 AS $$ DECLARE x float8; y float8; gtype text; BEGIN gtype := st_geometrytype(pt); IF ( gtype != 'ST_Point' ) THEN RAISE EXCEPTION 'Attempting to get the value of a pixel with a non-point geometry'; END IF; IF ST_SRID(pt) != ST_SRID(rast) THEN RAISE EXCEPTION 'Raster and geometry do not have the same SRID'; END IF; x := st_x(pt); y := st_y(pt); RETURN st_value(rast, band, st_worldtorastercoordx(rast, x, y), st_worldtorastercoordy(rast, x, y), exclude_nodata_value); END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_value(rast raster, pt geometry, exclude_nodata_value boolean DEFAULT TRUE) RETURNS float8 AS $$ SELECT st_value($1, 1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_PixelOfValue() ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_pixelofvalue( rast raster, nband integer, search double precision[], exclude_nodata_value boolean DEFAULT TRUE, OUT val double precision, OUT x integer, OUT y integer ) RETURNS SETOF record AS 'MODULE_PATHNAME', 'RASTER_pixelOfValue' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_pixelofvalue( rast raster, search double precision[], exclude_nodata_value boolean DEFAULT TRUE, OUT val double precision, OUT x integer, OUT y integer ) RETURNS SETOF record AS $$ SELECT val, x, y FROM st_pixelofvalue($1, 1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_pixelofvalue( rast raster, nband integer, search double precision, exclude_nodata_value boolean DEFAULT TRUE, OUT x integer, OUT y integer ) RETURNS SETOF record AS $$ SELECT x, y FROM st_pixelofvalue($1, $2, ARRAY[$3], $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_pixelofvalue( rast raster, search double precision, exclude_nodata_value boolean DEFAULT TRUE, OUT x integer, OUT y integer ) RETURNS SETOF record AS $$ SELECT x, y FROM st_pixelofvalue($1, 1, ARRAY[$2], $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- Raster Accessors ST_Georeference() ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_georeference(rast raster, format text DEFAULT 'GDAL') RETURNS text AS $$ DECLARE scale_x numeric; scale_y numeric; skew_x numeric; skew_y numeric; ul_x numeric; ul_y numeric; result text; BEGIN SELECT scalex::numeric, scaley::numeric, skewx::numeric, skewy::numeric, upperleftx::numeric, upperlefty::numeric INTO scale_x, scale_y, skew_x, skew_y, ul_x, ul_y FROM ST_Metadata(rast); -- scale x result := trunc(scale_x, 10) || E'\n'; -- skew y result := result || trunc(skew_y, 10) || E'\n'; -- skew x result := result || trunc(skew_x, 10) || E'\n'; -- scale y result := result || trunc(scale_y, 10) || E'\n'; IF format = 'ESRI' THEN -- upper left x result := result || trunc((ul_x + scale_x * 0.5), 10) || E'\n'; -- upper left y result = result || trunc((ul_y + scale_y * 0.5), 10) || E'\n'; ELSE -- IF format = 'GDAL' THEN -- upper left x result := result || trunc(ul_x, 10) || E'\n'; -- upper left y result := result || trunc(ul_y, 10) || E'\n'; END IF; RETURN result; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- WITH (isstrict); ----------------------------------------------------------------------- -- Raster Editors ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_setscale(rast raster, scale float8) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setScale' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_setscale(rast raster, scalex float8, scaley float8) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setScaleXY' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_setskew(rast raster, skew float8) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setSkew' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_setskew(rast raster, skewx float8, skewy float8) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setSkewXY' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_setsrid(rast raster, srid integer) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setSRID' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_setupperleft(rast raster, upperleftx float8, upperlefty float8) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setUpperLeftXY' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_setrotation(rast raster, rotation float8) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setRotation' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_setgeotransform(rast raster, imag double precision, jmag double precision, theta_i double precision, theta_ij double precision, xoffset double precision, yoffset double precision) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setGeotransform' LANGUAGE 'c' IMMUTABLE; ----------------------------------------------------------------------- -- Raster Editors ST_SetGeoreference() ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_setgeoreference(rast raster, georef text, format text DEFAULT 'GDAL') RETURNS raster AS $$ DECLARE params text[]; rastout raster; BEGIN IF rast IS NULL THEN RAISE WARNING 'Cannot set georeferencing on a null raster in st_setgeoreference.'; RETURN rastout; END IF; SELECT regexp_matches(georef, E'(-?\\d+(?:\\.\\d+)?)\\s(-?\\d+(?:\\.\\d+)?)\\s(-?\\d+(?:\\.\\d+)?)\\s' || E'(-?\\d+(?:\\.\\d+)?)\\s(-?\\d+(?:\\.\\d+)?)\\s(-?\\d+(?:\\.\\d+)?)') INTO params; IF NOT FOUND THEN RAISE EXCEPTION 'st_setgeoreference requires a string with 6 floating point values.'; END IF; IF format = 'ESRI' THEN -- params array is now: -- {scalex, skewy, skewx, scaley, upperleftx, upperlefty} rastout := st_setscale(rast, params[1]::float8, params[4]::float8); rastout := st_setskew(rastout, params[3]::float8, params[2]::float8); rastout := st_setupperleft(rastout, params[5]::float8 - (params[1]::float8 * 0.5), params[6]::float8 - (params[4]::float8 * 0.5)); ELSE IF format != 'GDAL' THEN RAISE WARNING 'Format ''%'' is not recognized, defaulting to GDAL format.', format; END IF; -- params array is now: -- {scalex, skewy, skewx, scaley, upperleftx, upperlefty} rastout := st_setscale(rast, params[1]::float8, params[4]::float8); rastout := st_setskew( rastout, params[3]::float8, params[2]::float8); rastout := st_setupperleft(rastout, params[5]::float8, params[6]::float8); END IF; RETURN rastout; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- WITH (isstrict); CREATE OR REPLACE FUNCTION st_setgeoreference( rast raster, upperleftx double precision, upperlefty double precision, scalex double precision, scaley double precision, skewx double precision, skewy double precision ) RETURNS raster AS $$ SELECT st_setgeoreference($1, array_to_string(ARRAY[$4, $7, $6, $5, $2, $3], ' ')) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_Tile(raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_tile( rast raster, width integer, height integer, nband integer[] DEFAULT NULL, padwithnodata boolean DEFAULT FALSE, nodataval double precision DEFAULT NULL ) RETURNS SETOF raster AS 'MODULE_PATHNAME','RASTER_tile' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_tile( rast raster, nband integer[], width integer, height integer, padwithnodata boolean DEFAULT FALSE, nodataval double precision DEFAULT NULL ) RETURNS SETOF raster AS $$ SELECT _st_tile($1, $3, $4, $2, $5, $6) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_tile( rast raster, nband integer, width integer, height integer, padwithnodata boolean DEFAULT FALSE, nodataval double precision DEFAULT NULL ) RETURNS SETOF raster AS $$ SELECT _st_tile($1, $3, $4, ARRAY[$2]::integer[], $5, $6) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_tile( rast raster, width integer, height integer, padwithnodata boolean DEFAULT FALSE, nodataval double precision DEFAULT NULL ) RETURNS SETOF raster AS $$ SELECT _st_tile($1, $2, $3, NULL::integer[], $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- Raster Band Editors ----------------------------------------------------------------------- -- This function can not be STRICT, because nodatavalue can be NULL indicating that no nodata value should be set CREATE OR REPLACE FUNCTION st_setbandnodatavalue(rast raster, band integer, nodatavalue float8, forceChecking boolean DEFAULT FALSE) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setBandNoDataValue' LANGUAGE 'c' IMMUTABLE; -- This function can not be STRICT, because nodatavalue can be NULL indicating that no nodata value should be set CREATE OR REPLACE FUNCTION st_setbandnodatavalue(rast raster, nodatavalue float8) RETURNS raster AS $$ SELECT st_setbandnodatavalue($1, 1, $2, FALSE) $$ LANGUAGE 'sql'; CREATE OR REPLACE FUNCTION st_setbandisnodata(rast raster, band integer DEFAULT 1) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_setBandIsNoData' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- Raster Pixel Editors ----------------------------------------------------------------------- ----------------------------------------------------------------------- -- ST_SetValues (set one or more pixels to a one or more values) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_setvalues( rast raster, nband integer, x integer, y integer, newvalueset double precision[][], noset boolean[][] DEFAULT NULL, hasnosetvalue boolean DEFAULT FALSE, nosetvalue double precision DEFAULT NULL, keepnodata boolean DEFAULT FALSE ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_setPixelValuesArray' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_setvalues( rast raster, nband integer, x integer, y integer, newvalueset double precision[][], noset boolean[][] DEFAULT NULL, keepnodata boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_setvalues($1, $2, $3, $4, $5, $6, FALSE, NULL, $7) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_setvalues( rast raster, nband integer, x integer, y integer, newvalueset double precision[][], nosetvalue double precision, keepnodata boolean DEFAULT FALSE ) RETURNS raster AS $$ SELECT _st_setvalues($1, $2, $3, $4, $5, NULL, TRUE, $6, $7) $$ LANGUAGE 'sql' IMMUTABLE; -- cannot be STRICT as newvalue can be NULL CREATE OR REPLACE FUNCTION st_setvalues( rast raster, nband integer, x integer, y integer, width integer, height integer, newvalue double precision, keepnodata boolean DEFAULT FALSE ) RETURNS raster AS $$ BEGIN IF width <= 0 OR height <= 0 THEN RAISE EXCEPTION 'Values for width and height must be greater than zero'; RETURN NULL; END IF; RETURN _st_setvalues($1, $2, $3, $4, array_fill($7, ARRAY[$6, $5]::int[]), NULL, FALSE, NULL, $8); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- cannot be STRICT as newvalue can be NULL CREATE OR REPLACE FUNCTION st_setvalues( rast raster, x integer, y integer, width integer, height integer, newvalue double precision, keepnodata boolean DEFAULT FALSE ) RETURNS raster AS $$ BEGIN IF width <= 0 OR height <= 0 THEN RAISE EXCEPTION 'Values for width and height must be greater than zero'; RETURN NULL; END IF; RETURN _st_setvalues($1, 1, $2, $3, array_fill($6, ARRAY[$5, $4]::int[]), NULL, FALSE, NULL, $7); END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- cannot be STRICT as newvalue can be NULL CREATE OR REPLACE FUNCTION st_setvalues( rast raster, nband integer, geomvalset geomval[], keepnodata boolean DEFAULT FALSE ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_setPixelValuesGeomval' LANGUAGE 'c' IMMUTABLE; ----------------------------------------------------------------------- -- ST_SetValue (set one or more pixels to a single value) ----------------------------------------------------------------------- -- This function can not be STRICT, because newvalue can be NULL for nodata CREATE OR REPLACE FUNCTION st_setvalue(rast raster, band integer, x integer, y integer, newvalue float8) RETURNS raster AS 'MODULE_PATHNAME','RASTER_setPixelValue' LANGUAGE 'c' IMMUTABLE; -- This function can not be STRICT, because newvalue can be NULL for nodata CREATE OR REPLACE FUNCTION st_setvalue(rast raster, x integer, y integer, newvalue float8) RETURNS raster AS $$ SELECT st_setvalue($1, 1, $2, $3, $4) $$ LANGUAGE 'sql'; -- cannot be STRICT as newvalue can be NULL CREATE OR REPLACE FUNCTION st_setvalue( rast raster, nband integer, geom geometry, newvalue double precision ) RETURNS raster AS $$ SELECT st_setvalues($1, $2, ARRAY[ROW($3, $4)]::geomval[], FALSE) $$ LANGUAGE 'sql' IMMUTABLE; -- cannot be STRICT as newvalue can be NULL CREATE OR REPLACE FUNCTION st_setvalue( rast raster, geom geometry, newvalue double precision ) RETURNS raster AS $$ SELECT st_setvalues($1, 1, ARRAY[ROW($2, $3)]::geomval[], FALSE) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- Raster Processing Functions ----------------------------------------------------------------------- ----------------------------------------------------------------------- -- ST_DumpAsPolygons ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_dumpaspolygons(rast raster, band integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE) RETURNS SETOF geomval AS 'MODULE_PATHNAME','RASTER_dumpAsPolygons' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_DumpValues ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_dumpvalues( rast raster, nband integer[] DEFAULT NULL, exclude_nodata_value boolean DEFAULT TRUE, OUT nband integer, OUT valarray double precision[][] ) RETURNS SETOF record AS 'MODULE_PATHNAME','RASTER_dumpValues' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_dumpvalues(rast raster, nband integer, exclude_nodata_value boolean DEFAULT TRUE) RETURNS double precision[][] AS $$ SELECT valarray FROM st_dumpvalues($1, ARRAY[$2]::integer[], $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_Polygon ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_polygon(rast raster, band integer DEFAULT 1) RETURNS geometry AS 'MODULE_PATHNAME','RASTER_getPolygon' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_PixelAsPolygons -- Return all the pixels of a raster as a geom, val, x, y record -- Should be called like this: -- SELECT (gv).geom, (gv).val FROM (SELECT ST_PixelAsPolygons(rast) gv FROM mytable) foo ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_pixelaspolygons( rast raster, band integer DEFAULT 1, columnx integer DEFAULT NULL, rowy integer DEFAULT NULL, exclude_nodata_value boolean DEFAULT TRUE, OUT geom geometry, OUT val double precision, OUT x integer, OUT y integer ) RETURNS SETOF record AS 'MODULE_PATHNAME', 'RASTER_getPixelPolygons' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_pixelaspolygons( rast raster, band integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, OUT geom geometry, OUT val double precision, OUT x int, OUT y int ) RETURNS SETOF record AS $$ SELECT geom, val, x, y FROM _st_pixelaspolygons($1, $2, NULL, NULL, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_PixelAsPolygon ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_pixelaspolygon(rast raster, x integer, y integer) RETURNS geometry AS $$ SELECT geom FROM _st_pixelaspolygons($1, NULL, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_PixelAsPoints ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_pixelaspoints( rast raster, band integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, OUT geom geometry, OUT val double precision, OUT x int, OUT y int ) RETURNS SETOF record AS $$ SELECT ST_PointN(ST_ExteriorRing(geom), 1), val, x, y FROM _st_pixelaspolygons($1, $2, NULL, NULL, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_PixelAsPoint ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_pixelaspoint(rast raster, x integer, y integer) RETURNS geometry AS $$ SELECT ST_PointN(ST_ExteriorRing(geom), 1) FROM _st_pixelaspolygons($1, NULL, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_PixelAsCentroids ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_pixelascentroids( rast raster, band integer DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, OUT geom geometry, OUT val double precision, OUT x int, OUT y int ) RETURNS SETOF record AS $$ SELECT ST_Centroid(geom), val, x, y FROM _st_pixelaspolygons($1, $2, NULL, NULL, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_PixelAsCentroid ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_pixelascentroid(rast raster, x integer, y integer) RETURNS geometry AS $$ SELECT ST_Centroid(geom) FROM _st_pixelaspolygons($1, NULL, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- Raster Utility Functions ----------------------------------------------------------------------- ----------------------------------------------------------------------- -- ST_WorldToRasterCoord ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_worldtorastercoord( rast raster, longitude double precision DEFAULT NULL, latitude double precision DEFAULT NULL, OUT columnx integer, OUT rowy integer ) AS 'MODULE_PATHNAME', 'RASTER_worldToRasterCoord' LANGUAGE 'c' IMMUTABLE; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoord(rast raster, longitude float8, latitude float8) -- Returns the pixel column and row covering the provided X and Y world -- coordinates. -- This function works even if the world coordinates are outside the raster extent. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoord( rast raster, longitude double precision, latitude double precision, OUT columnx integer, OUT rowy integer ) AS $$ SELECT columnx, rowy FROM _st_worldtorastercoord($1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoordX(rast raster, pt geometry) -- Returns the pixel column and row covering the provided point geometry. -- This function works even if the point is outside the raster extent. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoord( rast raster, pt geometry, OUT columnx integer, OUT rowy integer ) AS $$ DECLARE rx integer; ry integer; BEGIN IF st_geometrytype(pt) != 'ST_Point' THEN RAISE EXCEPTION 'Attempting to compute raster coordinate with a non-point geometry'; END IF; IF ST_SRID(rast) != ST_SRID(pt) THEN RAISE EXCEPTION 'Raster and geometry do not have the same SRID'; END IF; SELECT rc.columnx AS x, rc.rowy AS y INTO columnx, rowy FROM _st_worldtorastercoord($1, st_x(pt), st_y(pt)) AS rc; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoordX(rast raster, xw float8, yw float8) -- Returns the column number of the pixel covering the provided X and Y world -- coordinates. -- This function works even if the world coordinates are outside the raster extent. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoordx(rast raster, xw float8, yw float8) RETURNS int AS $$ SELECT columnx FROM _st_worldtorastercoord($1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoordX(rast raster, xw float8) -- Returns the column number of the pixels covering the provided world X coordinate -- for a non-rotated raster. -- This function works even if the world coordinate is outside the raster extent. -- This function returns an error if the raster is rotated. In this case you must -- also provide a Y. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoordx(rast raster, xw float8) RETURNS int AS $$ SELECT columnx FROM _st_worldtorastercoord($1, $2, NULL) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoordX(rast raster, pt geometry) -- Returns the column number of the pixel covering the provided point geometry. -- This function works even if the point is outside the raster extent. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoordx(rast raster, pt geometry) RETURNS int AS $$ DECLARE xr integer; BEGIN IF ( st_geometrytype(pt) != 'ST_Point' ) THEN RAISE EXCEPTION 'Attempting to compute raster coordinate with a non-point geometry'; END IF; IF ST_SRID(rast) != ST_SRID(pt) THEN RAISE EXCEPTION 'Raster and geometry do not have the same SRID'; END IF; SELECT columnx INTO xr FROM _st_worldtorastercoord($1, st_x(pt), st_y(pt)); RETURN xr; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoordY(rast raster, xw float8, yw float8) -- Returns the row number of the pixel covering the provided X and Y world -- coordinates. -- This function works even if the world coordinates are outside the raster extent. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoordy(rast raster, xw float8, yw float8) RETURNS int AS $$ SELECT rowy FROM _st_worldtorastercoord($1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoordY(rast raster, yw float8) -- Returns the row number of the pixels covering the provided world Y coordinate -- for a non-rotated raster. -- This function works even if the world coordinate is outside the raster extent. -- This function returns an error if the raster is rotated. In this case you must -- also provide an X. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoordy(rast raster, yw float8) RETURNS int AS $$ SELECT rowy FROM _st_worldtorastercoord($1, NULL, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_WorldToRasterCoordY(rast raster, pt geometry) -- Returns the row number of the pixel covering the provided point geometry. -- This function works even if the point is outside the raster extent. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_worldtorastercoordy(rast raster, pt geometry) RETURNS int AS $$ DECLARE yr integer; BEGIN IF ( st_geometrytype(pt) != 'ST_Point' ) THEN RAISE EXCEPTION 'Attempting to compute raster coordinate with a non-point geometry'; END IF; IF ST_SRID(rast) != ST_SRID(pt) THEN RAISE EXCEPTION 'Raster and geometry do not have the same SRID'; END IF; SELECT rowy INTO yr FROM _st_worldtorastercoord($1, st_x(pt), st_y(pt)); RETURN yr; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_RasterToWorldCoord --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_rastertoworldcoord( rast raster, columnx integer DEFAULT NULL, rowy integer DEFAULT NULL, OUT longitude double precision, OUT latitude double precision ) AS 'MODULE_PATHNAME', 'RASTER_rasterToWorldCoord' LANGUAGE 'c' IMMUTABLE; --------------------------------------------------------------------------------- -- ST_RasterToWorldCoordX(rast raster, xr int, yr int) -- Returns the longitude and latitude of the upper left corner of the pixel -- located at the provided pixel column and row. -- This function works even if the provided raster column and row are beyond or -- below the raster width and height. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_rastertoworldcoord( rast raster, columnx integer, rowy integer, OUT longitude double precision, OUT latitude double precision ) AS $$ SELECT longitude, latitude FROM _st_rastertoworldcoord($1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_RasterToWorldCoordX(rast raster, xr int, yr int) -- Returns the X world coordinate of the upper left corner of the pixel located at -- the provided column and row numbers. -- This function works even if the provided raster column and row are beyond or -- below the raster width and height. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_rastertoworldcoordx(rast raster, xr int, yr int) RETURNS float8 AS $$ SELECT longitude FROM _st_rastertoworldcoord($1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_RasterToWorldCoordX(rast raster, xr int) -- Returns the X world coordinate of the upper left corner of the pixel located at -- the provided column number for a non-rotated raster. -- This function works even if the provided raster column is beyond or below the -- raster width. -- This function returns an error if the raster is rotated. In this case you must -- also provide a Y. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_rastertoworldcoordx(rast raster, xr int) RETURNS float8 AS $$ SELECT longitude FROM _st_rastertoworldcoord($1, $2, NULL) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_RasterToWorldCoordY(rast raster, xr int, yr int) -- Returns the Y world coordinate of the upper left corner of the pixel located at -- the provided column and row numbers. -- This function works even if the provided raster column and row are beyond or -- below the raster width and height. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_rastertoworldcoordy(rast raster, xr int, yr int) RETURNS float8 AS $$ SELECT latitude FROM _st_rastertoworldcoord($1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; --------------------------------------------------------------------------------- -- ST_RasterToWorldCoordY(rast raster, yr int) -- Returns the Y world coordinate of the upper left corner of the pixel located at -- the provided row number for a non-rotated raster. -- This function works even if the provided raster row is beyond or below the -- raster height. -- This function returns an error if the raster is rotated. In this case you must -- also provide an X. --------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_rastertoworldcoordy(rast raster, yr int) RETURNS float8 AS $$ SELECT latitude FROM _st_rastertoworldcoord($1, NULL, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_MinPossibleValue(pixeltype text) -- Return the smallest value for a given pixeltyp. -- Should be called like this: -- SELECT ST_MinPossibleValue(ST_BandPixelType(rast, band)) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_minpossiblevalue(pixeltype text) RETURNS double precision AS 'MODULE_PATHNAME', 'RASTER_minPossibleValue' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- Raster Outputs ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_asbinary(raster, outasin boolean DEFAULT FALSE) RETURNS bytea AS 'MODULE_PATHNAME', 'RASTER_to_binary' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION bytea(raster) RETURNS bytea AS 'MODULE_PATHNAME', 'RASTER_to_bytea' LANGUAGE 'c' IMMUTABLE STRICT; ------------------------------------------------------------------------------ -- Casts ------------------------------------------------------------------------------ CREATE CAST (raster AS box3d) WITH FUNCTION box3d(raster) AS ASSIGNMENT; CREATE CAST (raster AS geometry) WITH FUNCTION st_convexhull(raster) AS ASSIGNMENT; CREATE CAST (raster AS bytea) WITH FUNCTION bytea(raster) AS ASSIGNMENT; ------------------------------------------------------------------- -- HASH operators ------------------------------------------------------------------- -- call PostgreSQL's hashvarlena() function -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION raster_hash(raster) RETURNS integer AS 'hashvarlena' LANGUAGE 'internal' IMMUTABLE STRICT; -- use raster_hash() to compare -- Availability: 2.1.0 CREATE OR REPLACE FUNCTION raster_eq(raster, raster) RETURNS bool AS $$ SELECT raster_hash($1) = raster_hash($2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE OPERATOR = ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_eq, COMMUTATOR = '=', RESTRICT = eqsel, JOIN = eqjoinsel ); -- Availability: 2.1.0 CREATE OPERATOR CLASS hash_raster_ops DEFAULT FOR TYPE raster USING hash AS OPERATOR 1 = , FUNCTION 1 raster_hash (raster); ------------------------------------------------------------------------------ -- GiST index OPERATOR support functions ------------------------------------------------------------------------------ -- raster/raster functions CREATE OR REPLACE FUNCTION raster_overleft(raster, raster) RETURNS bool AS 'select $1::geometry &< $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_overright(raster, raster) RETURNS bool AS 'select $1::geometry &> $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_left(raster, raster) RETURNS bool AS 'select $1::geometry << $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_right(raster, raster) RETURNS bool AS 'select $1::geometry >> $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_overabove(raster, raster) RETURNS bool AS 'select $1::geometry |&> $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_overbelow(raster, raster) RETURNS bool AS 'select $1::geometry &<| $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_above(raster, raster) RETURNS bool AS 'select $1::geometry |>> $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_below(raster, raster) RETURNS bool AS 'select $1::geometry <<| $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_same(raster, raster) RETURNS bool AS 'select $1::geometry ~= $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_contained(raster, raster) RETURNS bool AS 'select $1::geometry @ $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_contain(raster, raster) RETURNS bool AS 'select $1::geometry ~ $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_overlap(raster, raster) RETURNS bool AS 'select $1::geometry && $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; -- raster/geometry functions CREATE OR REPLACE FUNCTION raster_geometry_contain(raster, geometry) RETURNS bool AS 'select $1::geometry ~ $2' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_contained_by_geometry(raster, geometry) RETURNS bool AS 'select $1::geometry @ $2' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION raster_geometry_overlap(raster, geometry) RETURNS bool AS 'select $1::geometry && $2' LANGUAGE 'sql' IMMUTABLE STRICT; -- geometry/raster functions CREATE OR REPLACE FUNCTION geometry_raster_contain(geometry, raster) RETURNS bool AS 'select $1 ~ $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_contained_by_raster(geometry, raster) RETURNS bool AS 'select $1 @ $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_raster_overlap(geometry, raster) RETURNS bool AS 'select $1 && $2::geometry' LANGUAGE 'sql' IMMUTABLE STRICT; ------------------------------------------------------------------------------ -- GiST index OPERATORs ------------------------------------------------------------------------------ -- raster/raster operators CREATE OPERATOR << ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_left, COMMUTATOR = '>>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR &< ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_overleft, COMMUTATOR = '&>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR <<| ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_below, COMMUTATOR = '|>>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR &<| ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_overbelow, COMMUTATOR = '|&>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR && ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_overlap, COMMUTATOR = '&&', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR &> ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_overright, COMMUTATOR = '&<', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR >> ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_right, COMMUTATOR = '<<', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR |&> ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_overabove, COMMUTATOR = '&<|', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR |>> ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_above, COMMUTATOR = '<<|', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR ~= ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_same, COMMUTATOR = '~=', RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE OPERATOR @ ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_contained, COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR ~ ( LEFTARG = raster, RIGHTARG = raster, PROCEDURE = raster_contain, COMMUTATOR = '@', RESTRICT = contsel, JOIN = contjoinsel ); -- raster/geometry operators CREATE OPERATOR ~ ( LEFTARG = raster, RIGHTARG = geometry, PROCEDURE = raster_geometry_contain, -- COMMUTATOR = '@', -- see http://trac.osgeo.org/postgis/ticket/2532 RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR @ ( LEFTARG = raster, RIGHTARG = geometry, PROCEDURE = raster_contained_by_geometry, COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR && ( LEFTARG = raster, RIGHTARG = geometry, PROCEDURE = raster_geometry_overlap, COMMUTATOR = '&&', RESTRICT = contsel, JOIN = contjoinsel ); -- geometry/raster operators CREATE OPERATOR ~ ( LEFTARG = geometry, RIGHTARG = raster, PROCEDURE = geometry_raster_contain, -- COMMUTATOR = '@', -- see http://trac.osgeo.org/postgis/ticket/2532 RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR @ ( LEFTARG = geometry, RIGHTARG = raster, PROCEDURE = geometry_contained_by_raster, COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR && ( LEFTARG = geometry, RIGHTARG = raster, PROCEDURE = geometry_raster_overlap, COMMUTATOR = '&&', RESTRICT = contsel, JOIN = contjoinsel ); ----------------------------------------------------------------------- -- Raster/Raster Spatial Relationship ----------------------------------------------------------------------- ----------------------------------------------------------------------- -- ST_SameAlignment ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_samealignment(rast1 raster, rast2 raster) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_sameAlignment' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_samealignment( ulx1 double precision, uly1 double precision, scalex1 double precision, scaley1 double precision, skewx1 double precision, skewy1 double precision, ulx2 double precision, uly2 double precision, scalex2 double precision, scaley2 double precision, skewx2 double precision, skewy2 double precision ) RETURNS boolean AS $$ SELECT st_samealignment(st_makeemptyraster(1, 1, $1, $2, $3, $4, $5, $6), st_makeemptyraster(1, 1, $7, $8, $9, $10, $11, $12)) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE TYPE agg_samealignment AS ( refraster raster, aligned boolean ); CREATE OR REPLACE FUNCTION _st_samealignment_transfn(agg agg_samealignment, rast raster) RETURNS agg_samealignment AS $$ DECLARE m record; aligned boolean; BEGIN IF agg IS NULL THEN agg.refraster := NULL; agg.aligned := NULL; END IF; IF rast IS NULL THEN agg.aligned := NULL; ELSE IF agg.refraster IS NULL THEN m := ST_Metadata(rast); agg.refraster := ST_MakeEmptyRaster(1, 1, m.upperleftx, m.upperlefty, m.scalex, m.scaley, m.skewx, m.skewy, m.srid); agg.aligned := TRUE; ELSE IF agg.aligned IS TRUE THEN agg.aligned := ST_SameAlignment(agg.refraster, rast); END IF; END IF; END IF; RETURN agg; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION _st_samealignment_finalfn(agg agg_samealignment) RETURNS boolean AS $$ SELECT $1.aligned $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 2.1.0 CREATE AGGREGATE st_samealignment(raster) ( SFUNC = _st_samealignment_transfn, STYPE = agg_samealignment, FINALFUNC = _st_samealignment_finalfn ); ----------------------------------------------------------------------- -- ST_NotSameAlignmentReason ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_notsamealignmentreason(rast1 raster, rast2 raster) RETURNS text AS 'MODULE_PATHNAME', 'RASTER_notSameAlignmentReason' LANGUAGE 'c' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_IsCoverageTile ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_iscoveragetile(rast raster, coverage raster, tilewidth integer, tileheight integer) RETURNS boolean AS $$ DECLARE _rastmeta record; _covmeta record; cr record; max integer[]; tile integer[]; edge integer[]; BEGIN IF NOT ST_SameAlignment(rast, coverage) THEN RAISE NOTICE 'Raster and coverage are not aligned'; RETURN FALSE; END IF; _rastmeta := ST_Metadata(rast); _covmeta := ST_Metadata(coverage); -- get coverage grid coordinates of upper-left of rast cr := ST_WorldToRasterCoord(coverage, _rastmeta.upperleftx, _rastmeta.upperlefty); -- rast is not part of coverage IF (cr.columnx < 1 OR cr.columnx > _covmeta.width) OR (cr.rowy < 1 OR cr.rowy > _covmeta.height) THEN RAISE NOTICE 'Raster is not in the coverage'; RETURN FALSE; END IF; -- rast isn't on the coverage's grid IF ((cr.columnx - 1) % tilewidth != 0) OR ((cr.rowy - 1) % tileheight != 0) THEN RAISE NOTICE 'Raster is not aligned to tile grid of coverage'; RETURN FALSE; END IF; -- max # of tiles on X and Y for coverage max[0] := ceil(_covmeta.width::double precision / tilewidth::double precision)::integer; max[1] := ceil(_covmeta.height::double precision / tileheight::double precision)::integer; -- tile # of rast in coverge tile[0] := (cr.columnx / tilewidth) + 1; tile[1] := (cr.rowy / tileheight) + 1; -- inner tile IF tile[0] < max[0] AND tile[1] < max[1] THEN IF (_rastmeta.width != tilewidth) OR (_rastmeta.height != tileheight) THEN RAISE NOTICE 'Raster width/height is invalid for interior tile of coverage'; RETURN FALSE; ELSE RETURN TRUE; END IF; END IF; -- edge tile -- edge tile may have same size as inner tile IF (_rastmeta.width = tilewidth) AND (_rastmeta.height = tileheight) THEN RETURN TRUE; END IF; -- get edge tile width and height edge[0] := _covmeta.width - ((max[0] - 1) * tilewidth); edge[1] := _covmeta.height - ((max[1] - 1) * tileheight); -- edge tile not of expected tile size -- right and bottom IF tile[0] = max[0] AND tile[1] = max[1] THEN IF _rastmeta.width != edge[0] OR _rastmeta.height != edge[1] THEN RAISE NOTICE 'Raster width/height is invalid for right-most AND bottom-most tile of coverage'; RETURN FALSE; END IF; ELSEIF tile[0] = max[0] THEN IF _rastmeta.width != edge[0] OR _rastmeta.height != tileheight THEN RAISE NOTICE 'Raster width/height is invalid for right-most tile of coverage'; RETURN FALSE; END IF; ELSE IF _rastmeta.width != tilewidth OR _rastmeta.height != edge[1] THEN RAISE NOTICE 'Raster width/height is invalid for bottom-most tile of coverage'; RETURN FALSE; END IF; END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_Intersects(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_intersects(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_intersects' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_intersects(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_intersects(st_convexhull($1), st_convexhull($3)) ELSE _st_intersects($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_intersects(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_intersects($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Intersects(geometry, raster) ----------------------------------------------------------------------- -- This function can not be STRICT CREATE OR REPLACE FUNCTION _st_intersects(geom geometry, rast raster, nband integer DEFAULT NULL) RETURNS boolean AS $$ DECLARE hasnodata boolean := TRUE; nodata float8 := 0.0; convexhull geometry; geomintersect geometry; x1w double precision := 0.0; x2w double precision := 0.0; y1w double precision := 0.0; y2w double precision := 0.0; x1 integer := 0; x2 integer := 0; x3 integer := 0; x4 integer := 0; y1 integer := 0; y2 integer := 0; y3 integer := 0; y4 integer := 0; x integer := 0; y integer := 0; xinc integer := 0; yinc integer := 0; pixelval double precision; bintersect boolean := FALSE; gtype text; scale float8; w int; h int; BEGIN IF ST_SRID(rast) != ST_SRID(geom) THEN RAISE EXCEPTION 'Raster and geometry do not have the same SRID'; END IF; convexhull := ST_ConvexHull(rast); IF nband IS NOT NULL THEN SELECT CASE WHEN bmd.nodatavalue IS NULL THEN FALSE ELSE NULL END INTO hasnodata FROM ST_BandMetaData(rast, nband) AS bmd; END IF; IF ST_Intersects(geom, convexhull) IS NOT TRUE THEN RETURN FALSE; ELSEIF nband IS NULL OR hasnodata IS FALSE THEN RETURN TRUE; END IF; -- Get the intersection between with the geometry. -- We will search for withvalue pixel only in this area. geomintersect := st_intersection(geom, convexhull); --RAISE NOTICE 'geomintersect=%', st_astext(geomintersect); -- If the intersection is empty, return false IF st_isempty(geomintersect) THEN RETURN FALSE; END IF; -- We create a minimalistic buffer around the intersection in order to scan every pixels -- that would touch the edge or intersect with the geometry SELECT sqrt(scalex * scalex + skewy * skewy), width, height INTO scale, w, h FROM ST_Metadata(rast); IF scale != 0 THEN geomintersect := st_buffer(geomintersect, scale / 1000000); END IF; --RAISE NOTICE 'geomintersect2=%', st_astext(geomintersect); -- Find the world coordinates of the bounding box of the intersecting area x1w := st_xmin(geomintersect); y1w := st_ymin(geomintersect); x2w := st_xmax(geomintersect); y2w := st_ymax(geomintersect); nodata := st_bandnodatavalue(rast, nband); --RAISE NOTICE 'x1w=%, y1w=%, x2w=%, y2w=%', x1w, y1w, x2w, y2w; -- Convert world coordinates to raster coordinates x1 := st_worldtorastercoordx(rast, x1w, y1w); y1 := st_worldtorastercoordy(rast, x1w, y1w); x2 := st_worldtorastercoordx(rast, x2w, y1w); y2 := st_worldtorastercoordy(rast, x2w, y1w); x3 := st_worldtorastercoordx(rast, x1w, y2w); y3 := st_worldtorastercoordy(rast, x1w, y2w); x4 := st_worldtorastercoordx(rast, x2w, y2w); y4 := st_worldtorastercoordy(rast, x2w, y2w); --RAISE NOTICE 'x1=%, y1=%, x2=%, y2=%, x3=%, y3=%, x4=%, y4=%', x1, y1, x2, y2, x3, y3, x4, y4; -- Order the raster coordinates for the upcoming FOR loop. x1 := int4smaller(int4smaller(int4smaller(x1, x2), x3), x4); y1 := int4smaller(int4smaller(int4smaller(y1, y2), y3), y4); x2 := int4larger(int4larger(int4larger(x1, x2), x3), x4); y2 := int4larger(int4larger(int4larger(y1, y2), y3), y4); -- Make sure the range is not lower than 1. -- This can happen when world coordinate are exactly on the left border -- of the raster and that they do not span on more than one pixel. x1 := int4smaller(int4larger(x1, 1), w); y1 := int4smaller(int4larger(y1, 1), h); -- Also make sure the range does not exceed the width and height of the raster. -- This can happen when world coordinate are exactly on the lower right border -- of the raster. x2 := int4smaller(x2, w); y2 := int4smaller(y2, h); --RAISE NOTICE 'x1=%, y1=%, x2=%, y2=%', x1, y1, x2, y2; -- Search exhaustively for withvalue pixel on a moving 3x3 grid -- (very often more efficient than searching on a mere 1x1 grid) FOR xinc in 0..2 LOOP FOR yinc in 0..2 LOOP FOR x IN x1+xinc..x2 BY 3 LOOP FOR y IN y1+yinc..y2 BY 3 LOOP -- Check first if the pixel intersects with the geometry. Often many won't. bintersect := NOT st_isempty(st_intersection(st_pixelaspolygon(rast, x, y), geom)); IF bintersect THEN -- If the pixel really intersects, check its value. Return TRUE if with value. pixelval := st_value(rast, nband, x, y); IF pixelval != nodata THEN RETURN TRUE; END IF; END IF; END LOOP; END LOOP; END LOOP; END LOOP; RETURN FALSE; END; $$ LANGUAGE 'plpgsql' IMMUTABLE COST 1000; -- This function can not be STRICT CREATE OR REPLACE FUNCTION st_intersects(geom geometry, rast raster, nband integer DEFAULT NULL) RETURNS boolean AS $$ SELECT $1 && $2::geometry AND _st_intersects($1, $2, $3); $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Intersects(raster, geometry) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_intersects(rast raster, geom geometry, nband integer DEFAULT NULL) RETURNS boolean AS $$ SELECT $1::geometry && $2 AND _st_intersects($2, $1, $3) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_intersects(rast raster, nband integer, geom geometry) RETURNS boolean AS $$ SELECT $1::geometry && $3 AND _st_intersects($3, $1, $2) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Overlaps(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_overlaps(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_overlaps' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_overlaps(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_overlaps(st_convexhull($1), st_convexhull($3)) ELSE _st_overlaps($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_overlaps(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_overlaps($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Touches(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_touches(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_touches' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_touches(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_touches(st_convexhull($1), st_convexhull($3)) ELSE _st_touches($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_touches(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_touches($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Contains(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_contains(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_contains' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_contains(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_contains(st_convexhull($1), st_convexhull($3)) ELSE _st_contains($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_contains(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_contains($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_ContainsProperly(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_containsproperly(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_containsProperly' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_containsproperly(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_containsproperly(st_convexhull($1), st_convexhull($3)) ELSE _st_containsproperly($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_containsproperly(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_containsproperly($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Covers(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_covers(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_covers' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_covers(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_covers(st_convexhull($1), st_convexhull($3)) ELSE _st_covers($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_covers(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_covers($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_CoveredBy(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_coveredby(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_coveredby' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_coveredby(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_coveredby(st_convexhull($1), st_convexhull($3)) ELSE _st_coveredby($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_coveredby(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_coveredby($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Within(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_within(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT _st_contains($3, $4, $1, $2) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_within(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT $1 && $3 AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_within(st_convexhull($1), st_convexhull($3)) ELSE _st_contains($3, $4, $1, $2) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_within(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_within($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_DWithin(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_dwithin(rast1 raster, nband1 integer, rast2 raster, nband2 integer, distance double precision) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_dwithin' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_dwithin(rast1 raster, nband1 integer, rast2 raster, nband2 integer, distance double precision) RETURNS boolean AS $$ SELECT $1::geometry && ST_Expand(ST_ConvexHull($3), $5) AND $3::geometry && ST_Expand(ST_ConvexHull($1), $5) AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_dwithin(st_convexhull($1), st_convexhull($3), $5) ELSE _st_dwithin($1, $2, $3, $4, $5) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_dwithin(rast1 raster, rast2 raster, distance double precision) RETURNS boolean AS $$ SELECT st_dwithin($1, NULL::integer, $2, NULL::integer, $3) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_DFullyWithin(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_dfullywithin(rast1 raster, nband1 integer, rast2 raster, nband2 integer, distance double precision) RETURNS boolean AS 'MODULE_PATHNAME', 'RASTER_dfullywithin' LANGUAGE 'c' IMMUTABLE STRICT COST 1000; CREATE OR REPLACE FUNCTION st_dfullywithin(rast1 raster, nband1 integer, rast2 raster, nband2 integer, distance double precision) RETURNS boolean AS $$ SELECT $1::geometry && ST_Expand(ST_ConvexHull($3), $5) AND $3::geometry && ST_Expand(ST_ConvexHull($1), $5) AND CASE WHEN $2 IS NULL OR $4 IS NULL THEN _st_dfullywithin(st_convexhull($1), st_convexhull($3), $5) ELSE _st_dfullywithin($1, $2, $3, $4, $5) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_dfullywithin(rast1 raster, rast2 raster, distance double precision) RETURNS boolean AS $$ SELECT st_dfullywithin($1, NULL::integer, $2, NULL::integer, $3) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Disjoint(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_disjoint(rast1 raster, nband1 integer, rast2 raster, nband2 integer) RETURNS boolean AS $$ SELECT CASE WHEN $2 IS NULL OR $4 IS NULL THEN st_disjoint(st_convexhull($1), st_convexhull($3)) ELSE NOT _st_intersects($1, $2, $3, $4) END $$ LANGUAGE 'sql' IMMUTABLE COST 1000; CREATE OR REPLACE FUNCTION st_disjoint(rast1 raster, rast2 raster) RETURNS boolean AS $$ SELECT st_disjoint($1, NULL::integer, $2, NULL::integer) $$ LANGUAGE 'sql' IMMUTABLE COST 1000; ----------------------------------------------------------------------- -- ST_Intersection(geometry, raster) in geometry-space ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_intersection(geomin geometry, rast raster, band integer DEFAULT 1) RETURNS SETOF geomval AS $$ DECLARE intersects boolean := FALSE; BEGIN intersects := ST_Intersects(geomin, rast, band); IF intersects THEN -- Return the intersections of the geometry with the vectorized parts of -- the raster and the values associated with those parts, if really their -- intersection is not empty. RETURN QUERY SELECT intgeom, val FROM ( SELECT ST_Intersection((gv).geom, geomin) AS intgeom, (gv).val FROM ST_DumpAsPolygons(rast, band) gv WHERE ST_Intersects((gv).geom, geomin) ) foo WHERE NOT ST_IsEmpty(intgeom); ELSE -- If the geometry does not intersect with the raster, return an empty -- geometry and a null value RETURN QUERY SELECT emptygeom, NULL::float8 FROM ST_GeomCollFromText('GEOMETRYCOLLECTION EMPTY', ST_SRID($1)) emptygeom; END IF; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_intersection(rast raster, band integer, geomin geometry) RETURNS SETOF geomval AS $$ SELECT st_intersection($3, $1, $2) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_intersection(rast raster, geomin geometry) RETURNS SETOF geomval AS $$ SELECT st_intersection($2, $1, 1) $$ LANGUAGE 'sql' STABLE; ----------------------------------------------------------------------- -- ST_Intersection(raster, raster) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, band1 int, rast2 raster, band2 int, returnband text DEFAULT 'BOTH', nodataval double precision[] DEFAULT NULL ) RETURNS raster AS $$ DECLARE rtn raster; _returnband text; newnodata1 float8; newnodata2 float8; BEGIN IF ST_SRID(rast1) != ST_SRID(rast2) THEN RAISE EXCEPTION 'The two rasters do not have the same SRID'; END IF; newnodata1 := coalesce(nodataval[1], ST_BandNodataValue(rast1, band1), ST_MinPossibleValue(ST_BandPixelType(rast1, band1))); newnodata2 := coalesce(nodataval[2], ST_BandNodataValue(rast2, band2), ST_MinPossibleValue(ST_BandPixelType(rast2, band2))); _returnband := upper(returnband); rtn := NULL; CASE WHEN _returnband = 'BAND1' THEN rtn := ST_MapAlgebraExpr(rast1, band1, rast2, band2, '[rast1.val]', ST_BandPixelType(rast1, band1), 'INTERSECTION', newnodata1::text, newnodata1::text, newnodata1); rtn := ST_SetBandNodataValue(rtn, 1, newnodata1); WHEN _returnband = 'BAND2' THEN rtn := ST_MapAlgebraExpr(rast1, band1, rast2, band2, '[rast2.val]', ST_BandPixelType(rast2, band2), 'INTERSECTION', newnodata2::text, newnodata2::text, newnodata2); rtn := ST_SetBandNodataValue(rtn, 1, newnodata2); WHEN _returnband = 'BOTH' THEN rtn := ST_MapAlgebraExpr(rast1, band1, rast2, band2, '[rast1.val]', ST_BandPixelType(rast1, band1), 'INTERSECTION', newnodata1::text, newnodata1::text, newnodata1); rtn := ST_SetBandNodataValue(rtn, 1, newnodata1); rtn := ST_AddBand(rtn, ST_MapAlgebraExpr(rast1, band1, rast2, band2, '[rast2.val]', ST_BandPixelType(rast2, band2), 'INTERSECTION', newnodata2::text, newnodata2::text, newnodata2)); rtn := ST_SetBandNodataValue(rtn, 2, newnodata2); ELSE RAISE EXCEPTION 'Unknown value provided for returnband: %', returnband; RETURN NULL; END CASE; RETURN rtn; END; $$ LANGUAGE 'plpgsql' STABLE; CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, band1 int, rast2 raster, band2 int, returnband text, nodataval double precision ) RETURNS raster AS $$ SELECT st_intersection($1, $2, $3, $4, $5, ARRAY[$6, $6]) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, band1 int, rast2 raster, band2 int, nodataval double precision[] ) RETURNS raster AS $$ SELECT st_intersection($1, $2, $3, $4, 'BOTH', $5) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, band1 int, rast2 raster, band2 int, nodataval double precision ) RETURNS raster AS $$ SELECT st_intersection($1, $2, $3, $4, 'BOTH', ARRAY[$5, $5]) $$ LANGUAGE 'sql' STABLE; -- Variants without band number CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, rast2 raster, returnband text DEFAULT 'BOTH', nodataval double precision[] DEFAULT NULL ) RETURNS raster AS $$ SELECT st_intersection($1, 1, $2, 1, $3, $4) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, rast2 raster, returnband text, nodataval double precision ) RETURNS raster AS $$ SELECT st_intersection($1, 1, $2, 1, $3, ARRAY[$4, $4]) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, rast2 raster, nodataval double precision[] ) RETURNS raster AS $$ SELECT st_intersection($1, 1, $2, 1, 'BOTH', $3) $$ LANGUAGE 'sql' STABLE; CREATE OR REPLACE FUNCTION st_intersection( rast1 raster, rast2 raster, nodataval double precision ) RETURNS raster AS $$ SELECT st_intersection($1, 1, $2, 1, 'BOTH', ARRAY[$3, $3]) $$ LANGUAGE 'sql' STABLE; ----------------------------------------------------------------------- -- ST_Union aggregate ----------------------------------------------------------------------- CREATE TYPE unionarg AS ( nband int, uniontype text ); CREATE OR REPLACE FUNCTION _st_union_finalfn(internal) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_union_finalfn' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION _st_union_transfn(internal, raster, unionarg[]) RETURNS internal AS 'MODULE_PATHNAME', 'RASTER_union_transfn' LANGUAGE 'c' IMMUTABLE; -- Availability: 2.1.0 CREATE AGGREGATE st_union(raster, unionarg[]) ( SFUNC = _st_union_transfn, STYPE = internal, FINALFUNC = _st_union_finalfn ); CREATE OR REPLACE FUNCTION _st_union_transfn(internal, raster, integer, text) RETURNS internal AS 'MODULE_PATHNAME', 'RASTER_union_transfn' LANGUAGE 'c' IMMUTABLE; -- Availability: 2.0.0 -- Changed: 2.1.0 changed definition CREATE AGGREGATE st_union(raster, integer, text) ( SFUNC = _st_union_transfn, STYPE = internal, FINALFUNC = _st_union_finalfn ); CREATE OR REPLACE FUNCTION _st_union_transfn(internal, raster, integer) RETURNS internal AS 'MODULE_PATHNAME', 'RASTER_union_transfn' LANGUAGE 'c' IMMUTABLE; -- Availability: 2.0.0 -- Changed: 2.1.0 changed definition CREATE AGGREGATE st_union(raster, integer) ( SFUNC = _st_union_transfn, STYPE = internal, FINALFUNC = _st_union_finalfn ); CREATE OR REPLACE FUNCTION _st_union_transfn(internal, raster) RETURNS internal AS 'MODULE_PATHNAME', 'RASTER_union_transfn' LANGUAGE 'c' IMMUTABLE; -- Availability: 2.0.0 -- Changed: 2.1.0 changed definition CREATE AGGREGATE st_union(raster) ( SFUNC = _st_union_transfn, STYPE = internal, FINALFUNC = _st_union_finalfn ); CREATE OR REPLACE FUNCTION _st_union_transfn(internal, raster, text) RETURNS internal AS 'MODULE_PATHNAME', 'RASTER_union_transfn' LANGUAGE 'c' IMMUTABLE; -- Availability: 2.0.0 -- Changed: 2.1.0 changed definition CREATE AGGREGATE st_union(raster, text) ( SFUNC = _st_union_transfn, STYPE = internal, FINALFUNC = _st_union_finalfn ); ----------------------------------------------------------------------- -- ST_Clip ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_clip( rast raster, nband integer[], geom geometry, nodataval double precision[] DEFAULT NULL, crop boolean DEFAULT TRUE ) RETURNS raster AS 'MODULE_PATHNAME', 'RASTER_clip' LANGUAGE 'c' IMMUTABLE; CREATE OR REPLACE FUNCTION st_clip( rast raster, nband integer, geom geometry, nodataval double precision, crop boolean DEFAULT TRUE ) RETURNS raster AS $$ SELECT ST_Clip($1, ARRAY[$2]::integer[], $3, ARRAY[$4]::double precision[], $5) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_clip( rast raster, nband integer, geom geometry, crop boolean ) RETURNS raster AS $$ SELECT ST_Clip($1, ARRAY[$2]::integer[], $3, null::double precision[], $4) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_clip( rast raster, geom geometry, nodataval double precision[] DEFAULT NULL, crop boolean DEFAULT TRUE ) RETURNS raster AS $$ SELECT ST_Clip($1, NULL, $2, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_clip( rast raster, geom geometry, nodataval double precision, crop boolean DEFAULT TRUE ) RETURNS raster AS $$ SELECT ST_Clip($1, NULL, $2, ARRAY[$3]::double precision[], $4) $$ LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION st_clip( rast raster, geom geometry, crop boolean ) RETURNS raster AS $$ SELECT ST_Clip($1, NULL, $2, null::double precision[], $3) $$ LANGUAGE 'sql' IMMUTABLE; ----------------------------------------------------------------------- -- ST_NearestValue ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION st_nearestvalue( rast raster, band integer, pt geometry, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision AS 'MODULE_PATHNAME', 'RASTER_nearestValue' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_nearestvalue( rast raster, pt geometry, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision AS $$ SELECT st_nearestvalue($1, 1, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_nearestvalue( rast raster, band integer, columnx integer, rowy integer, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision AS $$ SELECT st_nearestvalue($1, $2, st_setsrid(st_makepoint(st_rastertoworldcoordx($1, $3, $4), st_rastertoworldcoordy($1, $3, $4)), st_srid($1)), $5) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_nearestvalue( rast raster, columnx integer, rowy integer, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision AS $$ SELECT st_nearestvalue($1, 1, st_setsrid(st_makepoint(st_rastertoworldcoordx($1, $2, $3), st_rastertoworldcoordy($1, $2, $3)), st_srid($1)), $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- ST_Neighborhood ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _st_neighborhood( rast raster, band integer, columnx integer, rowy integer, distancex integer, distancey integer, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision[][] AS 'MODULE_PATHNAME', 'RASTER_neighborhood' LANGUAGE 'c' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_neighborhood( rast raster, band integer, columnx integer, rowy integer, distancex integer, distancey integer, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision[][] AS $$ SELECT _st_neighborhood($1, $2, $3, $4, $5, $6, $7) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_neighborhood( rast raster, columnx integer, rowy integer, distancex integer, distancey integer, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision[][] AS $$ SELECT _st_neighborhood($1, 1, $2, $3, $4, $5, $6) $$ LANGUAGE 'sql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_neighborhood( rast raster, band integer, pt geometry, distancex integer, distancey integer, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision[][] AS $$ DECLARE wx double precision; wy double precision; rtn double precision[][]; BEGIN IF (st_geometrytype($3) != 'ST_Point') THEN RAISE EXCEPTION 'Attempting to get the neighbor of a pixel with a non-point geometry'; END IF; IF ST_SRID(rast) != ST_SRID(pt) THEN RAISE EXCEPTION 'Raster and geometry do not have the same SRID'; END IF; wx := st_x($3); wy := st_y($3); SELECT _st_neighborhood( $1, $2, st_worldtorastercoordx(rast, wx, wy), st_worldtorastercoordy(rast, wx, wy), $4, $5, $6 ) INTO rtn; RETURN rtn; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION st_neighborhood( rast raster, pt geometry, distancex integer, distancey integer, exclude_nodata_value boolean DEFAULT TRUE ) RETURNS double precision[][] AS $$ SELECT st_neighborhood($1, 1, $2, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE STRICT; ------------------------------------------------------------------------------ -- raster constraint functions ------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _add_raster_constraint(cn name, sql text) RETURNS boolean AS $$ BEGIN BEGIN EXECUTE sql; EXCEPTION WHEN duplicate_object THEN RAISE NOTICE 'The constraint "%" already exists. To replace the existing constraint, delete the constraint and call ApplyRasterConstraints again', cn; WHEN OTHERS THEN RAISE NOTICE 'Unable to add constraint: %', cn; RAISE NOTICE 'SQL used for failed constraint: %', sql; RAISE NOTICE 'Returned error message: %', SQLERRM; RETURN FALSE; END; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint(rastschema name, rasttable name, cn name) RETURNS boolean AS $$ DECLARE fqtn text; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); BEGIN EXECUTE 'ALTER TABLE ' || fqtn || ' DROP CONSTRAINT ' || quote_ident(cn); RETURN TRUE; EXCEPTION WHEN undefined_object THEN RAISE NOTICE 'The constraint "%" does not exist. Skipping', cn; WHEN OTHERS THEN RAISE NOTICE 'Unable to drop constraint "%"', cn; RETURN FALSE; END; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_srid(rastschema name, rasttable name, rastcolumn name) RETURNS integer AS $$ SELECT replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', '')::integer FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%st_srid(% = %'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_srid(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr int; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_srid_' || $3; sql := 'SELECT st_srid(' || quote_ident($3) || ') FROM ' || fqtn || ' LIMIT 1'; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the SRID of a sample raster'; RETURN FALSE; END; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (st_srid(' || quote_ident($3) || ') = ' || attr || ')'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_srid(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_srid_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_scale(rastschema name, rasttable name, rastcolumn name, axis char) RETURNS double precision AS $$ SELECT replace(replace(split_part(split_part(s.consrc, ' = ', 2), '::', 1), ')', ''), '(', '')::double precision FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%st_scale' || $4 || '(% = %'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_scale(rastschema name, rasttable name, rastcolumn name, axis char) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr double precision; BEGIN IF lower($4) != 'x' AND lower($4) != 'y' THEN RAISE EXCEPTION 'axis must be either "x" or "y"'; RETURN FALSE; END IF; fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_scale' || $4 || '_' || $3; sql := 'SELECT st_scale' || $4 || '(' || quote_ident($3) || ') FROM ' || fqtn || ' LIMIT 1'; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the %-scale of a sample raster', upper($4); RETURN FALSE; END; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (st_scale' || $4 || '(' || quote_ident($3) || ')::numeric(16,10) = (' || attr || ')::numeric(16,10))'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_scale(rastschema name, rasttable name, rastcolumn name, axis char) RETURNS boolean AS $$ BEGIN IF lower($4) != 'x' AND lower($4) != 'y' THEN RAISE EXCEPTION 'axis must be either "x" or "y"'; RETURN FALSE; END IF; RETURN _drop_raster_constraint($1, $2, 'enforce_scale' || $4 || '_' || $3); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_blocksize(rastschema name, rasttable name, rastcolumn name, axis text) RETURNS integer AS $$ SELECT CASE WHEN strpos(s.consrc, 'ANY (ARRAY[') > 0 THEN split_part((regexp_matches(s.consrc, E'ARRAY\\[(.*?){1}\\]'))[1], ',', 1)::integer ELSE replace(replace(split_part(s.consrc, '= ', 2), ')', ''), '(', '')::integer END FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%st_' || $4 || '(%= %'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_blocksize(rastschema name, rasttable name, rastcolumn name, axis text) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attrset integer[]; attr integer; BEGIN IF lower($4) != 'width' AND lower($4) != 'height' THEN RAISE EXCEPTION 'axis must be either "width" or "height"'; RETURN FALSE; END IF; fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_' || $4 || '_' || $3; sql := 'SELECT st_' || $4 || '(' || quote_ident($3) || ') FROM ' || fqtn || ' GROUP BY 1 ORDER BY count(*) DESC'; BEGIN attrset := ARRAY[]::integer[]; FOR attr IN EXECUTE sql LOOP attrset := attrset || attr; END LOOP; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the % of a sample raster', $4; RETURN FALSE; END; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (st_' || $4 || '(' || quote_ident($3) || ') IN (' || array_to_string(attrset, ',') || '))'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_blocksize(rastschema name, rasttable name, rastcolumn name, axis text) RETURNS boolean AS $$ BEGIN IF lower($4) != 'width' AND lower($4) != 'height' THEN RAISE EXCEPTION 'axis must be either "width" or "height"'; RETURN FALSE; END IF; RETURN _drop_raster_constraint($1, $2, 'enforce_' || $4 || '_' || $3); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_extent(rastschema name, rasttable name, rastcolumn name) RETURNS geometry AS $$ SELECT trim(both '''' from split_part(trim(split_part(s.consrc, ',', 2)), '::', 1))::geometry FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%st_coveredby(st_convexhull(%'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_extent(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr text; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_max_extent_' || $3; sql := 'SELECT st_ashexewkb(st_union(st_convexhull(' || quote_ident($3) || '))) FROM ' || fqtn; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the extent of the raster column. Attempting memory efficient (slower) approach'; sql := 'SELECT st_ashexewkb(st_memunion(st_convexhull(' || quote_ident($3) || '))) FROM ' || fqtn; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Still unable to get the extent of the raster column. Cannot add extent constraint'; RETURN FALSE; END; END; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (st_coveredby(st_convexhull(' || quote_ident($3) || '), ''' || attr || '''::geometry))'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_extent(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_max_extent_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_alignment(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT TRUE FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%st_samealignment(%'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_alignment(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr text; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_same_alignment_' || $3; sql := 'SELECT st_makeemptyraster(1, 1, upperleftx, upperlefty, scalex, scaley, skewx, skewy, srid) FROM st_metadata((SELECT ' || quote_ident($3) || ' FROM ' || fqtn || ' LIMIT 1))'; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the alignment of a sample raster'; RETURN FALSE; END; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (st_samealignment(' || quote_ident($3) || ', ''' || attr || '''::raster))'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_alignment(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_same_alignment_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_spatially_unique(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT TRUE FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s, pg_index idx, pg_operator op WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND s.contype = 'x' AND 0::smallint = ANY (s.conkey) AND idx.indexrelid = s.conindid AND pg_get_indexdef(idx.indexrelid, 1, true) LIKE '(' || quote_ident($3) || '::geometry)' AND s.conexclop[1] = op.oid AND op.oprname = '='; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_spatially_unique(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr text; meta record; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_spatially_unique_' || quote_ident($2) || '_'|| $3; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' EXCLUDE ((' || quote_ident($3) || '::geometry) WITH =)'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_spatially_unique(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE cn text; BEGIN SELECT s.conname INTO cn FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s, pg_index idx, pg_operator op WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND s.contype = 'x' AND 0::smallint = ANY (s.conkey) AND idx.indexrelid = s.conindid AND pg_get_indexdef(idx.indexrelid, 1, true) LIKE '(' || quote_ident($3) || '::geometry)' AND s.conexclop[1] = op.oid AND op.oprname = '='; RETURN _drop_raster_constraint($1, $2, cn); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_coverage_tile(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT TRUE FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%st_iscoveragetile(%'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_coverage_tile(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; _scalex double precision; _scaley double precision; _skewx double precision; _skewy double precision; _tilewidth integer; _tileheight integer; _alignment boolean; _covextent geometry; _covrast raster; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_coverage_tile_' || $3; -- metadata BEGIN sql := 'WITH foo AS (SELECT ST_Metadata(' || quote_ident($3) || ') AS meta, ST_ConvexHull(' || quote_ident($3) || ') AS hull FROM ' || fqtn || ') SELECT max((meta).scalex), max((meta).scaley), max((meta).skewx), max((meta).skewy), max((meta).width), max((meta).height), ST_Union(hull) FROM foo'; EXECUTE sql INTO _scalex, _scaley, _skewx, _skewy, _tilewidth, _tileheight, _covextent; EXCEPTION WHEN OTHERS THEN END; -- rasterize extent BEGIN _covrast := ST_AsRaster(_covextent, _scalex, _scaley, '8BUI', 1, 0, NULL, NULL, _skewx, _skewy); IF _covrast IS NULL THEN RAISE NOTICE 'Unable to create coverage raster. Cannot add coverage tile constraint'; RETURN FALSE; END IF; -- remove band _covrast := ST_MakeEmptyRaster(_covrast); EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to create coverage raster. Cannot add coverage tile constraint'; RETURN FALSE; END; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (st_iscoveragetile(' || quote_ident($3) || ', ''' || _covrast || '''::raster, ' || _tilewidth || ', ' || _tileheight || '))'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_coverage_tile(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_coverage_tile_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_regular_blocking(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE covtile boolean; spunique boolean; BEGIN -- check existance of constraints -- coverage tile constraint covtile := COALESCE(_raster_constraint_info_coverage_tile($1, $2, $3), FALSE); -- spatially unique constraint spunique := COALESCE(_raster_constraint_info_spatially_unique($1, $2, $3), FALSE); RETURN (covtile AND spunique); END; $$ LANGUAGE 'plpgsql' STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_regular_blocking(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_regular_blocking_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_num_bands(rastschema name, rasttable name, rastcolumn name) RETURNS integer AS $$ SELECT replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', '')::integer FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%st_numbands(%'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_raster_constraint_num_bands(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr int; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_num_bands_' || $3; sql := 'SELECT st_numbands(' || quote_ident($3) || ') FROM ' || fqtn || ' LIMIT 1'; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the number of bands of a sample raster'; RETURN FALSE; END; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (st_numbands(' || quote_ident($3) || ') = ' || attr || ')'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_num_bands(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_num_bands_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_pixel_types(rastschema name, rasttable name, rastcolumn name) RETURNS text[] AS $$ SELECT trim(both '''' from split_part(replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', ''), '::', 1))::text[] FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%_raster_constraint_pixel_types(%'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_pixel_types(rast raster) RETURNS text[] AS $$ SELECT array_agg(pixeltype)::text[] FROM st_bandmetadata($1, ARRAY[]::int[]); $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION _add_raster_constraint_pixel_types(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr text[]; max int; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_pixel_types_' || $3; sql := 'SELECT _raster_constraint_pixel_types(' || quote_ident($3) || ') FROM ' || fqtn || ' LIMIT 1'; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the pixel types of a sample raster'; RETURN FALSE; END; max := array_length(attr, 1); IF max < 1 OR max IS NULL THEN RAISE NOTICE 'Unable to get the pixel types of a sample raster'; RETURN FALSE; END IF; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (_raster_constraint_pixel_types(' || quote_ident($3) || ') = ''{'; FOR x in 1..max LOOP sql := sql || '"' || attr[x] || '"'; IF x < max THEN sql := sql || ','; END IF; END LOOP; sql := sql || '}''::text[])'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_pixel_types(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_pixel_types_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_nodata_values(rastschema name, rasttable name, rastcolumn name) RETURNS double precision[] AS $$ SELECT trim(both '''' from split_part(replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', ''), '::', 1))::double precision[] FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%_raster_constraint_nodata_values(%'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_nodata_values(rast raster) RETURNS double precision[] AS $$ SELECT array_agg(nodatavalue)::double precision[] FROM st_bandmetadata($1, ARRAY[]::int[]); $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION _add_raster_constraint_nodata_values(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr double precision[]; max int; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_nodata_values_' || $3; sql := 'SELECT _raster_constraint_nodata_values(' || quote_ident($3) || ') FROM ' || fqtn || ' LIMIT 1'; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the nodata values of a sample raster'; RETURN FALSE; END; max := array_length(attr, 1); IF max < 1 OR max IS NULL THEN RAISE NOTICE 'Unable to get the nodata values of a sample raster'; RETURN FALSE; END IF; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (_raster_constraint_nodata_values(' || quote_ident($3) || ')::numeric(16,10)[] = ''{'; FOR x in 1..max LOOP IF attr[x] IS NULL THEN sql := sql || 'NULL'; ELSE sql := sql || attr[x]; END IF; IF x < max THEN sql := sql || ','; END IF; END LOOP; sql := sql || '}''::numeric(16,10)[])'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_nodata_values(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_nodata_values_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_info_out_db(rastschema name, rasttable name, rastcolumn name) RETURNS boolean[] AS $$ SELECT trim(both '''' from split_part(replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', ''), '::', 1))::boolean[] FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%_raster_constraint_out_db(%'; $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _raster_constraint_out_db(rast raster) RETURNS boolean[] AS $$ SELECT array_agg(isoutdb)::boolean[] FROM st_bandmetadata($1, ARRAY[]::int[]); $$ LANGUAGE 'sql' STABLE STRICT; CREATE OR REPLACE FUNCTION _add_raster_constraint_out_db(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; attr boolean[]; max int; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_out_db_' || $3; sql := 'SELECT _raster_constraint_out_db(' || quote_ident($3) || ') FROM ' || fqtn || ' LIMIT 1'; BEGIN EXECUTE sql INTO attr; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Unable to get the out-of-database bands of a sample raster'; RETURN FALSE; END; max := array_length(attr, 1); IF max < 1 OR max IS NULL THEN RAISE NOTICE 'Unable to get the out-of-database bands of a sample raster'; RETURN FALSE; END IF; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (_raster_constraint_out_db(' || quote_ident($3) || ') = ''{'; FOR x in 1..max LOOP IF attr[x] IS FALSE THEN sql := sql || 'FALSE'; ELSE sql := sql || 'TRUE'; END IF; IF x < max THEN sql := sql || ','; END IF; END LOOP; sql := sql || '}''::boolean[])'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_raster_constraint_out_db(rastschema name, rasttable name, rastcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_out_db_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; ------------------------------------------------------------------------------ -- AddRasterConstraints ------------------------------------------------------------------------------ CREATE OR REPLACE FUNCTION AddRasterConstraints ( rastschema name, rasttable name, rastcolumn name, VARIADIC constraints text[] ) RETURNS boolean AS $$ DECLARE max int; cnt int; sql text; schema name; x int; kw text; rtn boolean; BEGIN cnt := 0; max := array_length(constraints, 1); IF max < 1 THEN RAISE NOTICE 'No constraints indicated to be added. Doing nothing'; RETURN TRUE; END IF; -- validate schema schema := NULL; IF length($1) > 0 THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The value provided for schema is invalid'; RETURN FALSE; END IF; END IF; IF schema IS NULL THEN sql := 'SELECT n.nspname AS schemaname ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' || 'WHERE c.relkind = ' || quote_literal('r') || ' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ') AND pg_catalog.pg_table_is_visible(c.oid)' || ' AND c.relname = ' || quote_literal($2); EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The table % does not occur in the search_path', quote_literal($2); RETURN FALSE; END IF; END IF; <<kwloop>> FOR x in 1..max LOOP kw := trim(both from lower(constraints[x])); BEGIN CASE WHEN kw = 'srid' THEN RAISE NOTICE 'Adding SRID constraint'; rtn := _add_raster_constraint_srid(schema, $2, $3); WHEN kw IN ('scale_x', 'scalex') THEN RAISE NOTICE 'Adding scale-X constraint'; rtn := _add_raster_constraint_scale(schema, $2, $3, 'x'); WHEN kw IN ('scale_y', 'scaley') THEN RAISE NOTICE 'Adding scale-Y constraint'; rtn := _add_raster_constraint_scale(schema, $2, $3, 'y'); WHEN kw = 'scale' THEN RAISE NOTICE 'Adding scale-X constraint'; rtn := _add_raster_constraint_scale(schema, $2, $3, 'x'); RAISE NOTICE 'Adding scale-Y constraint'; rtn := _add_raster_constraint_scale(schema, $2, $3, 'y'); WHEN kw IN ('blocksize_x', 'blocksizex', 'width') THEN RAISE NOTICE 'Adding blocksize-X constraint'; rtn := _add_raster_constraint_blocksize(schema, $2, $3, 'width'); WHEN kw IN ('blocksize_y', 'blocksizey', 'height') THEN RAISE NOTICE 'Adding blocksize-Y constraint'; rtn := _add_raster_constraint_blocksize(schema, $2, $3, 'height'); WHEN kw = 'blocksize' THEN RAISE NOTICE 'Adding blocksize-X constraint'; rtn := _add_raster_constraint_blocksize(schema, $2, $3, 'width'); RAISE NOTICE 'Adding blocksize-Y constraint'; rtn := _add_raster_constraint_blocksize(schema, $2, $3, 'height'); WHEN kw IN ('same_alignment', 'samealignment', 'alignment') THEN RAISE NOTICE 'Adding alignment constraint'; rtn := _add_raster_constraint_alignment(schema, $2, $3); WHEN kw IN ('regular_blocking', 'regularblocking') THEN RAISE NOTICE 'Adding coverage tile constraint required for regular blocking'; rtn := _add_raster_constraint_coverage_tile(schema, $2, $3); IF rtn IS NOT FALSE THEN RAISE NOTICE 'Adding spatially unique constraint required for regular blocking'; rtn := _add_raster_constraint_spatially_unique(schema, $2, $3); END IF; WHEN kw IN ('num_bands', 'numbands') THEN RAISE NOTICE 'Adding number of bands constraint'; rtn := _add_raster_constraint_num_bands(schema, $2, $3); WHEN kw IN ('pixel_types', 'pixeltypes') THEN RAISE NOTICE 'Adding pixel type constraint'; rtn := _add_raster_constraint_pixel_types(schema, $2, $3); WHEN kw IN ('nodata_values', 'nodatavalues', 'nodata') THEN RAISE NOTICE 'Adding nodata value constraint'; rtn := _add_raster_constraint_nodata_values(schema, $2, $3); WHEN kw IN ('out_db', 'outdb') THEN RAISE NOTICE 'Adding out-of-database constraint'; rtn := _add_raster_constraint_out_db(schema, $2, $3); WHEN kw = 'extent' THEN RAISE NOTICE 'Adding maximum extent constraint'; rtn := _add_raster_constraint_extent(schema, $2, $3); ELSE RAISE NOTICE 'Unknown constraint: %. Skipping', quote_literal(constraints[x]); CONTINUE kwloop; END CASE; END; IF rtn IS FALSE THEN cnt := cnt + 1; RAISE WARNING 'Unable to add constraint: %. Skipping', quote_literal(constraints[x]); END IF; END LOOP kwloop; IF cnt = max THEN RAISE EXCEPTION 'None of the constraints specified could be added. Is the schema name, table name or column name incorrect?'; RETURN FALSE; END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION AddRasterConstraints ( rasttable name, rastcolumn name, VARIADIC constraints text[] ) RETURNS boolean AS $$ SELECT AddRasterConstraints('', $1, $2, VARIADIC $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION AddRasterConstraints ( rastschema name, rasttable name, rastcolumn name, srid boolean DEFAULT TRUE, scale_x boolean DEFAULT TRUE, scale_y boolean DEFAULT TRUE, blocksize_x boolean DEFAULT TRUE, blocksize_y boolean DEFAULT TRUE, same_alignment boolean DEFAULT TRUE, regular_blocking boolean DEFAULT FALSE, -- false as regular_blocking is an enhancement num_bands boolean DEFAULT TRUE, pixel_types boolean DEFAULT TRUE, nodata_values boolean DEFAULT TRUE, out_db boolean DEFAULT TRUE, extent boolean DEFAULT TRUE ) RETURNS boolean AS $$ DECLARE constraints text[]; BEGIN IF srid IS TRUE THEN constraints := constraints || 'srid'::text; END IF; IF scale_x IS TRUE THEN constraints := constraints || 'scale_x'::text; END IF; IF scale_y IS TRUE THEN constraints := constraints || 'scale_y'::text; END IF; IF blocksize_x IS TRUE THEN constraints := constraints || 'blocksize_x'::text; END IF; IF blocksize_y IS TRUE THEN constraints := constraints || 'blocksize_y'::text; END IF; IF same_alignment IS TRUE THEN constraints := constraints || 'same_alignment'::text; END IF; IF regular_blocking IS TRUE THEN constraints := constraints || 'regular_blocking'::text; END IF; IF num_bands IS TRUE THEN constraints := constraints || 'num_bands'::text; END IF; IF pixel_types IS TRUE THEN constraints := constraints || 'pixel_types'::text; END IF; IF nodata_values IS TRUE THEN constraints := constraints || 'nodata_values'::text; END IF; IF out_db IS TRUE THEN constraints := constraints || 'out_db'::text; END IF; IF extent IS TRUE THEN constraints := constraints || 'extent'::text; END IF; RETURN AddRasterConstraints($1, $2, $3, VARIADIC constraints); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION AddRasterConstraints ( rasttable name, rastcolumn name, srid boolean DEFAULT TRUE, scale_x boolean DEFAULT TRUE, scale_y boolean DEFAULT TRUE, blocksize_x boolean DEFAULT TRUE, blocksize_y boolean DEFAULT TRUE, same_alignment boolean DEFAULT TRUE, regular_blocking boolean DEFAULT FALSE, -- false as regular_blocking is an enhancement num_bands boolean DEFAULT TRUE, pixel_types boolean DEFAULT TRUE, nodata_values boolean DEFAULT TRUE, out_db boolean DEFAULT TRUE, extent boolean DEFAULT TRUE ) RETURNS boolean AS $$ SELECT AddRasterConstraints('', $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; ------------------------------------------------------------------------------ -- DropRasterConstraints ------------------------------------------------------------------------------ CREATE OR REPLACE FUNCTION DropRasterConstraints ( rastschema name, rasttable name, rastcolumn name, VARIADIC constraints text[] ) RETURNS boolean AS $$ DECLARE max int; x int; schema name; sql text; kw text; rtn boolean; cnt int; BEGIN cnt := 0; max := array_length(constraints, 1); IF max < 1 THEN RAISE NOTICE 'No constraints indicated to be dropped. Doing nothing'; RETURN TRUE; END IF; -- validate schema schema := NULL; IF length($1) > 0 THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The value provided for schema is invalid'; RETURN FALSE; END IF; END IF; IF schema IS NULL THEN sql := 'SELECT n.nspname AS schemaname ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' || 'WHERE c.relkind = ' || quote_literal('r') || ' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ') AND pg_catalog.pg_table_is_visible(c.oid)' || ' AND c.relname = ' || quote_literal($2); EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The table % does not occur in the search_path', quote_literal($2); RETURN FALSE; END IF; END IF; <<kwloop>> FOR x in 1..max LOOP kw := trim(both from lower(constraints[x])); BEGIN CASE WHEN kw = 'srid' THEN RAISE NOTICE 'Dropping SRID constraint'; rtn := _drop_raster_constraint_srid(schema, $2, $3); WHEN kw IN ('scale_x', 'scalex') THEN RAISE NOTICE 'Dropping scale-X constraint'; rtn := _drop_raster_constraint_scale(schema, $2, $3, 'x'); WHEN kw IN ('scale_y', 'scaley') THEN RAISE NOTICE 'Dropping scale-Y constraint'; rtn := _drop_raster_constraint_scale(schema, $2, $3, 'y'); WHEN kw = 'scale' THEN RAISE NOTICE 'Dropping scale-X constraint'; rtn := _drop_raster_constraint_scale(schema, $2, $3, 'x'); RAISE NOTICE 'Dropping scale-Y constraint'; rtn := _drop_raster_constraint_scale(schema, $2, $3, 'y'); WHEN kw IN ('blocksize_x', 'blocksizex', 'width') THEN RAISE NOTICE 'Dropping blocksize-X constraint'; rtn := _drop_raster_constraint_blocksize(schema, $2, $3, 'width'); WHEN kw IN ('blocksize_y', 'blocksizey', 'height') THEN RAISE NOTICE 'Dropping blocksize-Y constraint'; rtn := _drop_raster_constraint_blocksize(schema, $2, $3, 'height'); WHEN kw = 'blocksize' THEN RAISE NOTICE 'Dropping blocksize-X constraint'; rtn := _drop_raster_constraint_blocksize(schema, $2, $3, 'width'); RAISE NOTICE 'Dropping blocksize-Y constraint'; rtn := _drop_raster_constraint_blocksize(schema, $2, $3, 'height'); WHEN kw IN ('same_alignment', 'samealignment', 'alignment') THEN RAISE NOTICE 'Dropping alignment constraint'; rtn := _drop_raster_constraint_alignment(schema, $2, $3); WHEN kw IN ('regular_blocking', 'regularblocking') THEN rtn := _drop_raster_constraint_regular_blocking(schema, $2, $3); RAISE NOTICE 'Dropping coverage tile constraint required for regular blocking'; rtn := _drop_raster_constraint_coverage_tile(schema, $2, $3); IF rtn IS NOT FALSE THEN RAISE NOTICE 'Dropping spatially unique constraint required for regular blocking'; rtn := _drop_raster_constraint_spatially_unique(schema, $2, $3); END IF; WHEN kw IN ('num_bands', 'numbands') THEN RAISE NOTICE 'Dropping number of bands constraint'; rtn := _drop_raster_constraint_num_bands(schema, $2, $3); WHEN kw IN ('pixel_types', 'pixeltypes') THEN RAISE NOTICE 'Dropping pixel type constraint'; rtn := _drop_raster_constraint_pixel_types(schema, $2, $3); WHEN kw IN ('nodata_values', 'nodatavalues', 'nodata') THEN RAISE NOTICE 'Dropping nodata value constraint'; rtn := _drop_raster_constraint_nodata_values(schema, $2, $3); WHEN kw IN ('out_db', 'outdb') THEN RAISE NOTICE 'Dropping out-of-database constraint'; rtn := _drop_raster_constraint_out_db(schema, $2, $3); WHEN kw = 'extent' THEN RAISE NOTICE 'Dropping maximum extent constraint'; rtn := _drop_raster_constraint_extent(schema, $2, $3); ELSE RAISE NOTICE 'Unknown constraint: %. Skipping', quote_literal(constraints[x]); CONTINUE kwloop; END CASE; END; IF rtn IS FALSE THEN cnt := cnt + 1; RAISE WARNING 'Unable to drop constraint: %. Skipping', quote_literal(constraints[x]); END IF; END LOOP kwloop; IF cnt = max THEN RAISE EXCEPTION 'None of the constraints specified could be dropped. Is the schema name, table name or column name incorrect?'; RETURN FALSE; END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION DropRasterConstraints ( rasttable name, rastcolumn name, VARIADIC constraints text[] ) RETURNS boolean AS $$ SELECT DropRasterConstraints('', $1, $2, VARIADIC $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION DropRasterConstraints ( rastschema name, rasttable name, rastcolumn name, srid boolean DEFAULT TRUE, scale_x boolean DEFAULT TRUE, scale_y boolean DEFAULT TRUE, blocksize_x boolean DEFAULT TRUE, blocksize_y boolean DEFAULT TRUE, same_alignment boolean DEFAULT TRUE, regular_blocking boolean DEFAULT TRUE, num_bands boolean DEFAULT TRUE, pixel_types boolean DEFAULT TRUE, nodata_values boolean DEFAULT TRUE, out_db boolean DEFAULT TRUE, extent boolean DEFAULT TRUE ) RETURNS boolean AS $$ DECLARE constraints text[]; BEGIN IF srid IS TRUE THEN constraints := constraints || 'srid'::text; END IF; IF scale_x IS TRUE THEN constraints := constraints || 'scale_x'::text; END IF; IF scale_y IS TRUE THEN constraints := constraints || 'scale_y'::text; END IF; IF blocksize_x IS TRUE THEN constraints := constraints || 'blocksize_x'::text; END IF; IF blocksize_y IS TRUE THEN constraints := constraints || 'blocksize_y'::text; END IF; IF same_alignment IS TRUE THEN constraints := constraints || 'same_alignment'::text; END IF; IF regular_blocking IS TRUE THEN constraints := constraints || 'regular_blocking'::text; END IF; IF num_bands IS TRUE THEN constraints := constraints || 'num_bands'::text; END IF; IF pixel_types IS TRUE THEN constraints := constraints || 'pixel_types'::text; END IF; IF nodata_values IS TRUE THEN constraints := constraints || 'nodata_values'::text; END IF; IF out_db IS TRUE THEN constraints := constraints || 'out_db'::text; END IF; IF extent IS TRUE THEN constraints := constraints || 'extent'::text; END IF; RETURN DropRasterConstraints($1, $2, $3, VARIADIC constraints); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION DropRasterConstraints ( rasttable name, rastcolumn name, srid boolean DEFAULT TRUE, scale_x boolean DEFAULT TRUE, scale_y boolean DEFAULT TRUE, blocksize_x boolean DEFAULT TRUE, blocksize_y boolean DEFAULT TRUE, same_alignment boolean DEFAULT TRUE, regular_blocking boolean DEFAULT TRUE, num_bands boolean DEFAULT TRUE, pixel_types boolean DEFAULT TRUE, nodata_values boolean DEFAULT TRUE, out_db boolean DEFAULT TRUE, extent boolean DEFAULT TRUE ) RETURNS boolean AS $$ SELECT DropRasterConstraints('', $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; ------------------------------------------------------------------------------ -- raster_columns -- -- The metadata is documented in the PostGIS Raster specification: -- http://trac.osgeo.org/postgis/wiki/WKTRaster/SpecificationFinal01 ------------------------------------------------------------------------------ CREATE OR REPLACE VIEW raster_columns AS SELECT current_database() AS r_table_catalog, n.nspname AS r_table_schema, c.relname AS r_table_name, a.attname AS r_raster_column, COALESCE(_raster_constraint_info_srid(n.nspname, c.relname, a.attname), (SELECT ST_SRID('POINT(0 0)'::geometry))) AS srid, _raster_constraint_info_scale(n.nspname, c.relname, a.attname, 'x') AS scale_x, _raster_constraint_info_scale(n.nspname, c.relname, a.attname, 'y') AS scale_y, _raster_constraint_info_blocksize(n.nspname, c.relname, a.attname, 'width') AS blocksize_x, _raster_constraint_info_blocksize(n.nspname, c.relname, a.attname, 'height') AS blocksize_y, COALESCE(_raster_constraint_info_alignment(n.nspname, c.relname, a.attname), FALSE) AS same_alignment, COALESCE(_raster_constraint_info_regular_blocking(n.nspname, c.relname, a.attname), FALSE) AS regular_blocking, _raster_constraint_info_num_bands(n.nspname, c.relname, a.attname) AS num_bands, _raster_constraint_info_pixel_types(n.nspname, c.relname, a.attname) AS pixel_types, _raster_constraint_info_nodata_values(n.nspname, c.relname, a.attname) AS nodata_values, _raster_constraint_info_out_db(n.nspname, c.relname, a.attname) AS out_db, _raster_constraint_info_extent(n.nspname, c.relname, a.attname) AS extent FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND c.relkind = ANY(ARRAY['r'::char, 'v'::char, 'm'::char, 'f'::char]) AND NOT pg_is_other_temp_schema(c.relnamespace); ------------------------------------------------------------------------------ -- overview constraint functions ------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _overview_constraint(ov raster, factor integer, refschema name, reftable name, refcolumn name) RETURNS boolean AS $$ SELECT COALESCE((SELECT TRUE FROM raster_columns WHERE r_table_catalog = current_database() AND r_table_schema = $3 AND r_table_name = $4 AND r_raster_column = $5), FALSE) $$ LANGUAGE 'sql' STABLE COST 100; CREATE OR REPLACE FUNCTION _overview_constraint_info( ovschema name, ovtable name, ovcolumn name, OUT refschema name, OUT reftable name, OUT refcolumn name, OUT factor integer ) AS $$ SELECT split_part(split_part(s.consrc, '''::name', 1), '''', 2)::name, split_part(split_part(s.consrc, '''::name', 2), '''', 2)::name, split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name, trim(both from split_part(s.consrc, ',', 2))::integer FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = $1 AND c.relname = $2 AND a.attname = $3 AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%_overview_constraint(%' $$ LANGUAGE sql STABLE STRICT COST 100; CREATE OR REPLACE FUNCTION _add_overview_constraint( ovschema name, ovtable name, ovcolumn name, refschema name, reftable name, refcolumn name, factor integer ) RETURNS boolean AS $$ DECLARE fqtn text; cn name; sql text; BEGIN fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); cn := 'enforce_overview_' || $3; sql := 'ALTER TABLE ' || fqtn || ' ADD CONSTRAINT ' || quote_ident(cn) || ' CHECK (_overview_constraint(' || quote_ident($3) || ',' || $7 || ',' || quote_literal($4) || ',' || quote_literal($5) || ',' || quote_literal($6) || '))'; RETURN _add_raster_constraint(cn, sql); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION _drop_overview_constraint(ovschema name, ovtable name, ovcolumn name) RETURNS boolean AS $$ SELECT _drop_raster_constraint($1, $2, 'enforce_overview_' || $3) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; ------------------------------------------------------------------------------ -- RASTER_OVERVIEWS ------------------------------------------------------------------------------ CREATE OR REPLACE VIEW raster_overviews AS SELECT current_database() AS o_table_catalog, n.nspname AS o_table_schema, c.relname AS o_table_name, a.attname AS o_raster_column, current_database() AS r_table_catalog, split_part(split_part(s.consrc, '''::name', 1), '''', 2)::name AS r_table_schema, split_part(split_part(s.consrc, '''::name', 2), '''', 2)::name AS r_table_name, split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_raster_column, trim(both from split_part(s.consrc, ',', 2))::integer AS overview_factor FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, pg_constraint s WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND c.relkind = ANY(ARRAY['r'::char, 'v'::char, 'm'::char, 'f'::char]) AND s.connamespace = n.oid AND s.conrelid = c.oid AND s.consrc LIKE '%_overview_constraint(%' AND NOT pg_is_other_temp_schema(c.relnamespace); ------------------------------------------------------------------------------ -- AddOverviewConstraints ------------------------------------------------------------------------------ CREATE OR REPLACE FUNCTION AddOverviewConstraints ( ovschema name, ovtable name, ovcolumn name, refschema name, reftable name, refcolumn name, ovfactor int ) RETURNS boolean AS $$ DECLARE x int; s name; t name; oschema name; rschema name; sql text; rtn boolean; BEGIN FOR x IN 1..2 LOOP s := ''; IF x = 1 THEN s := $1; t := $2; ELSE s := $4; t := $5; END IF; -- validate user-provided schema IF length(s) > 0 THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal(s) || 'LIMIT 1'; EXECUTE sql INTO s; IF s IS NULL THEN RAISE EXCEPTION 'The value % is not a valid schema', quote_literal(s); RETURN FALSE; END IF; END IF; -- no schema, determine what it could be using the table IF length(s) < 1 THEN sql := 'SELECT n.nspname AS schemaname ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' || 'WHERE c.relkind = ' || quote_literal('r') || ' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ') AND pg_catalog.pg_table_is_visible(c.oid)' || ' AND c.relname = ' || quote_literal(t); EXECUTE sql INTO s; IF s IS NULL THEN RAISE EXCEPTION 'The table % does not occur in the search_path', quote_literal(t); RETURN FALSE; END IF; END IF; IF x = 1 THEN oschema := s; ELSE rschema := s; END IF; END LOOP; -- reference raster rtn := _add_overview_constraint(oschema, $2, $3, rschema, $5, $6, $7); IF rtn IS FALSE THEN RAISE EXCEPTION 'Unable to add the overview constraint. Is the schema name, table name or column name incorrect?'; RETURN FALSE; END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION AddOverviewConstraints ( ovtable name, ovcolumn name, reftable name, refcolumn name, ovfactor int ) RETURNS boolean AS $$ SELECT AddOverviewConstraints('', $1, $2, '', $3, $4, $5) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; ------------------------------------------------------------------------------ -- DropOverviewConstraints ------------------------------------------------------------------------------ CREATE OR REPLACE FUNCTION DropOverviewConstraints ( ovschema name, ovtable name, ovcolumn name ) RETURNS boolean AS $$ DECLARE schema name; sql text; rtn boolean; BEGIN -- validate schema schema := NULL; IF length($1) > 0 THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The value provided for schema is invalid'; RETURN FALSE; END IF; END IF; IF schema IS NULL THEN sql := 'SELECT n.nspname AS schemaname ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' || 'WHERE c.relkind = ' || quote_literal('r') || ' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ') AND pg_catalog.pg_table_is_visible(c.oid)' || ' AND c.relname = ' || quote_literal($2); EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The table % does not occur in the search_path', quote_literal($2); RETURN FALSE; END IF; END IF; rtn := _drop_overview_constraint(schema, $2, $3); IF rtn IS FALSE THEN RAISE EXCEPTION 'Unable to drop the overview constraint . Is the schema name, table name or column name incorrect?'; RETURN FALSE; END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT COST 100; CREATE OR REPLACE FUNCTION DropOverviewConstraints ( ovtable name, ovcolumn name ) RETURNS boolean AS $$ SELECT DropOverviewConstraints('', $1, $2) $$ LANGUAGE 'sql' VOLATILE STRICT COST 100; ------------------------------------------------------------------------------ -- UpdateRasterSRID ------------------------------------------------------------------------------ CREATE OR REPLACE FUNCTION _UpdateRasterSRID( schema_name name, table_name name, column_name name, new_srid integer ) RETURNS boolean AS $$ DECLARE fqtn text; schema name; sql text; srid integer; ct boolean; BEGIN -- validate schema schema := NULL; IF length($1) > 0 THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The value provided for schema is invalid'; RETURN FALSE; END IF; END IF; IF schema IS NULL THEN sql := 'SELECT n.nspname AS schemaname ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' || 'WHERE c.relkind = ' || quote_literal('r') || ' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ') AND pg_catalog.pg_table_is_visible(c.oid)' || ' AND c.relname = ' || quote_literal($2); EXECUTE sql INTO schema; IF schema IS NULL THEN RAISE EXCEPTION 'The table % does not occur in the search_path', quote_literal($2); RETURN FALSE; END IF; END IF; -- clamp SRID IF new_srid < 0 THEN srid := ST_SRID('POINT EMPTY'::geometry); RAISE NOTICE 'SRID % converted to the officially unknown SRID %', new_srid, srid; ELSE srid := new_srid; END IF; -- drop coverage tile constraint -- done separately just in case constraint doesn't exist ct := _raster_constraint_info_coverage_tile(schema, $2, $3); IF ct IS TRUE THEN PERFORM _drop_raster_constraint_coverage_tile(schema, $2, $3); END IF; -- drop SRID, extent, alignment constraints PERFORM DropRasterConstraints(schema, $2, $3, 'extent', 'alignment', 'srid'); fqtn := ''; IF length($1) > 0 THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); -- update SRID sql := 'UPDATE ' || fqtn || ' SET ' || quote_ident($3) || ' = ST_SetSRID(' || quote_ident($3) || '::raster, ' || srid || ')'; RAISE NOTICE 'sql = %', sql; EXECUTE sql; -- add SRID constraint PERFORM AddRasterConstraints(schema, $2, $3, 'srid', 'extent', 'alignment'); -- add coverage tile constraint if needed IF ct IS TRUE THEN PERFORM _add_raster_constraint_coverage_tile(schema, $2, $3); END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql' VOLATILE; CREATE OR REPLACE FUNCTION UpdateRasterSRID( schema_name name, table_name name, column_name name, new_srid integer ) RETURNS boolean AS $$ SELECT _UpdateRasterSRID($1, $2, $3, $4) $$ LANGUAGE 'sql' VOLATILE STRICT; CREATE OR REPLACE FUNCTION UpdateRasterSRID( table_name name, column_name name, new_srid integer ) RETURNS boolean AS $$ SELECT _UpdateRasterSRID('', $1, $2, $3) $$ LANGUAGE 'sql' VOLATILE STRICT; ------------------------------------------------------------------- -- END ------------------------------------------------------------------- -- make views public viewable -- GRANT SELECT ON TABLE raster_columns TO public; GRANT SELECT ON TABLE raster_overviews TO public; COMMIT; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/Makefile.pgxs��������������������������������������������������0000644�0000000�0000000�00000005701�11722777314�020631� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # PostGIS PGXS override file for PostgreSQL <= 8.5 # (updates relevant targets for MODULEDIR as per the # PostgreSQL 8.5 PGXS Makefile) # ifdef MODULEDIR datamoduledir = $(MODULEDIR) docmoduledir = $(MODULEDIR) else datamoduledir = contrib docmoduledir = contrib endif install: all installdirs ifneq (,$(DATA)$(DATA_built)) @for file in $(addprefix $(srcdir)/, $(DATA)) $(DATA_built); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'; \ done endif # DATA ifneq (,$(DATA_TSEARCH)) @for file in $(addprefix $(srcdir)/, $(DATA_TSEARCH)); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/tsearch_data'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/tsearch_data'; \ done endif # DATA_TSEARCH ifdef MODULES @for file in $(addsuffix $(DLSUFFIX), $(MODULES)); do \ echo "$(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'"; \ $(INSTALL_SHLIB) $$file '$(DESTDIR)$(pkglibdir)'; \ done endif # MODULES ifdef DOCS ifdef docdir @for file in $(addprefix $(srcdir)/, $(DOCS)); do \ echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'"; \ $(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'; \ done endif # docdir endif # DOCS ifdef PROGRAM $(INSTALL_PROGRAM) $(PROGRAM)$(X) '$(DESTDIR)$(bindir)' endif # PROGRAM ifdef SCRIPTS @for file in $(addprefix $(srcdir)/, $(SCRIPTS)); do \ echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \ $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \ done endif # SCRIPTS ifdef SCRIPTS_built @for file in $(SCRIPTS_built); do \ echo "$(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'"; \ $(INSTALL_SCRIPT) $$file '$(DESTDIR)$(bindir)'; \ done endif # SCRIPTS_built ifdef MODULE_big $(INSTALL_SHLIB) $(shlib) '$(DESTDIR)$(pkglibdir)/$(MODULE_big)$(DLSUFFIX)' endif # MODULE_big installdirs: ifneq (,$(DATA)$(DATA_built)) $(mkinstalldirs) '$(DESTDIR)$(datadir)/$(datamoduledir)' endif ifneq (,$(DATA_TSEARCH)) $(mkinstalldirs) '$(DESTDIR)$(datadir)/tsearch_data' endif ifneq (,$(MODULES)) $(mkinstalldirs) '$(DESTDIR)$(pkglibdir)' endif ifdef DOCS ifdef docdir $(mkinstalldirs) '$(DESTDIR)$(docdir)/$(docmoduledir)' endif # docdir endif # DOCS ifneq (,$(PROGRAM)$(SCRIPTS)$(SCRIPTS_built)) $(mkinstalldirs) '$(DESTDIR)$(bindir)' endif uninstall: ifneq (,$(DATA)$(DATA_built)) rm -f $(addprefix '$(DESTDIR)$(datadir)/$(datamoduledir)'/, $(notdir $(DATA) $(DATA_built))) endif ifneq (,$(DATA_TSEARCH)) rm -f $(addprefix '$(DESTDIR)$(datadir)/tsearch_data'/, $(notdir $(DATA_TSEARCH))) endif ifdef MODULES rm -f $(addprefix '$(DESTDIR)$(pkglibdir)'/, $(addsuffix $(DLSUFFIX), $(MODULES))) endif ifdef DOCS rm -f $(addprefix '$(DESTDIR)$(docdir)/$(docmoduledir)'/, $(DOCS)) endif ifdef PROGRAM rm -f '$(DESTDIR)$(bindir)/$(PROGRAM)$(X)' endif ifdef SCRIPTS rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS)) endif ifdef SCRIPTS_built rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(SCRIPTS_built)) endif ���������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/rtpostgis_legacy.sql.in����������������������������������������0000644�0000000�0000000�00000013217�12233537203�022707� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������------------------------------------------------------------------------------- -- -- $Id: rtpostgis_legacy.sql.in 12060 2013-10-28 19:44:03Z dustymugs $ -- -- PostGIS Raster - Raster Type for PostGIS -- http://trac.osgeo.org/postgis/wiki/WKTRaster -- -- Copyright (C) 2012 Regents of the University of California -- <bkpark@ucdavis.edu> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -- ------------------------------------------------------------------------------- -- -- For legacy access to OLD versions of raster_columns AND raster_overviews -- -- raster_columns and raster_overviews tables no longer exist -- if tables found, rename tables DROP FUNCTION IF EXISTS _rename_raster_tables(); CREATE OR REPLACE FUNCTION _rename_raster_tables() RETURNS void AS $$ DECLARE cnt int; BEGIN SELECT count(*) INTO cnt FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relname = 'raster_columns' AND c.relkind = 'r'::char AND NOT pg_is_other_temp_schema(c.relnamespace); IF cnt > 0 THEN EXECUTE 'ALTER TABLE raster_columns RENAME TO deprecated_raster_columns'; END IF; SELECT count(*) INTO cnt FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relname = 'raster_overviews' AND c.relkind = 'r'::char AND NOT pg_is_other_temp_schema(c.relnamespace); IF cnt > 0 THEN EXECUTE 'ALTER TABLE raster_overviews RENAME TO deprecated_raster_overviews'; END IF; END; $$ LANGUAGE 'plpgsql' VOLATILE; SELECT _rename_raster_tables(); DROP FUNCTION _rename_raster_tables(); CREATE OR REPLACE VIEW raster_columns AS SELECT current_database() AS r_table_catalog, n.nspname AS r_table_schema, c.relname AS r_table_name, a.attname AS r_raster_column, COALESCE(_raster_constraint_info_srid(n.nspname, c.relname, a.attname), (SELECT ST_SRID('POINT(0 0)'::geometry))) AS srid, _raster_constraint_info_scale(n.nspname, c.relname, a.attname, 'x') AS scale_x, _raster_constraint_info_scale(n.nspname, c.relname, a.attname, 'y') AS scale_y, _raster_constraint_info_blocksize(n.nspname, c.relname, a.attname, 'width') AS blocksize_x, _raster_constraint_info_blocksize(n.nspname, c.relname, a.attname, 'height') AS blocksize_y, COALESCE(_raster_constraint_info_alignment(n.nspname, c.relname, a.attname), FALSE) AS same_alignment, COALESCE(_raster_constraint_info_regular_blocking(n.nspname, c.relname, a.attname), FALSE) AS regular_blocking, _raster_constraint_info_num_bands(n.nspname, c.relname, a.attname) AS num_bands, _raster_constraint_info_pixel_types(n.nspname, c.relname, a.attname) AS pixel_types, _raster_constraint_info_nodata_values(n.nspname, c.relname, a.attname) AS nodata_values, _raster_constraint_info_out_db(n.nspname, c.relname, a.attname) AS out_db, _raster_constraint_info_extent(n.nspname, c.relname, a.attname) AS extent, a.attname AS r_column FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char") AND NOT pg_is_other_temp_schema(c.relnamespace); CREATE OR REPLACE VIEW raster_overviews AS SELECT current_database() AS o_table_catalog, n.nspname AS o_table_schema, c.relname AS o_table_name, a.attname AS o_raster_column, current_database() AS r_table_catalog, split_part(split_part(s.consrc, '''::name', 1), '''', 2)::name AS r_table_schema, split_part(split_part(s.consrc, '''::name', 2), '''', 2)::name AS r_table_name, split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_raster_column, trim(both from split_part(s.consrc, ',', 2))::integer AS overview_factor, a.attname AS o_column, split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_column, rc.out_db AS out_db FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, pg_constraint s, raster_columns rc WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char") AND s.connamespace = n.oid AND s.conrelid = c.oid AND n.nspname = rc.r_table_schema AND c.relname = rc.r_table_name AND a.attname = rc.r_raster_column AND s.consrc LIKE '%_overview_constraint(%' AND NOT pg_is_other_temp_schema(c.relnamespace); -- -- Add rules to catch INSERT, UPDATE and DELETE -- CREATE OR REPLACE RULE raster_columns_insert AS ON INSERT TO raster_columns DO INSTEAD NOTHING; CREATE OR REPLACE RULE raster_columns_update AS ON UPDATE TO raster_columns DO INSTEAD NOTHING; CREATE OR REPLACE RULE raster_columns_delete AS ON DELETE TO raster_columns DO INSTEAD NOTHING; CREATE OR REPLACE RULE raster_overviews_insert AS ON INSERT TO raster_overviews DO INSTEAD NOTHING; CREATE OR REPLACE RULE raster_overviews_update AS ON UPDATE TO raster_overviews DO INSTEAD NOTHING; CREATE OR REPLACE RULE raster_overviews_delete AS ON DELETE TO raster_overviews DO INSTEAD NOTHING; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/rt_pg.h��������������������������������������������������������0000644�0000000�0000000�00000005740�12233537203�017465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * $Id: rt_pg.h 12060 2013-10-28 19:44:03Z dustymugs $ * * WKTRaster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2010-2011 Jorge Arevalo <jorge.arevalo@deimos-space.com> * Copyright (C) 2010-2011 David Zwarg <dzwarg@azavea.com> * Copyright (C) 2009-2011 Pierre Racine <pierre.racine@sbf.ulaval.ca> * Copyright (C) 2009-2011 Mateusz Loskot <mateusz@loskot.net> * Copyright (C) 2008-2009 Sandro Santilli <strk@keybit.net> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef RT_PG_H_INCLUDED #define RT_PG_H_INCLUDED #include <stdint.h> /* for int16_t and friends */ #include "rt_api.h" #include "../../postgis_config.h" #include "../raster_config.h" /* Debugging macros */ #if POSTGIS_DEBUG_LEVEL > 0 /* Display a simple message at NOTICE level */ #define POSTGIS_RT_DEBUG(level, msg) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ ereport(NOTICE, (errmsg_internal("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__))); \ } while (0); /* Display a formatted message at NOTICE level (like printf, with variadic arguments) */ #define POSTGIS_RT_DEBUGF(level, msg, ...) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ ereport(NOTICE, (errmsg_internal("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__, __VA_ARGS__))); \ } while (0); #else /* Empty prototype that can be optimised away by the compiler for non-debug builds */ #define POSTGIS_RT_DEBUG(level, msg) \ ((void) 0) /* Empty prototype that can be optimised away by the compiler for non-debug builds */ #define POSTGIS_RT_DEBUGF(level, msg, ...) \ ((void) 0) #endif typedef struct rt_pgband8_t { uint8_t pixtype; uint8_t data[1]; } rt_pgband8; typedef struct rt_pgband16_t { uint8_t pixtype; uint8_t pad; uint8_t data[1]; } rt_pgband16; typedef struct rt_pgband32_t { uint8_t pixtype; uint8_t pad0; uint8_t pad1; uint8_t pad2; uint8_t data[1]; } rt_pgband32; typedef struct rt_pgband64_t { uint8_t pixtype; uint8_t pad[7]; uint8_t data[1]; } rt_pgband64; typedef struct rt_pgband_t { uint8_t pixtype; uint8_t data[1]; } rt_pgband; /* Header of PostgreSQL-stored RASTER value, * and binary representation of it */ typedef struct rt_raster_serialized_t rt_pgraster; #endif /* RT_PG_H_INCLUDED */ ��������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/rtpostgis_drop.sql.in������������������������������������������0000644�0000000�0000000�00000067151�12233537203�022415� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: rtpostgis_drop.sql.in.c 7884 2011-09-22 15:07:25Z robe $ -- -- PostGIS Raster - Raster Type for PostGIS -- http://trac.osgeo.org/postgis/wiki/WKTRaster -- -- Copyright (C) 2011 Regina Obe <lr@pcorp.us> -- Copyright (C) 2011-2012 Regents of the University of California -- <bkpark@ucdavis.edu> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- WARNING: Any change in this file must be evaluated for compatibility. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- This file will be used to drop obselete functions and other objects. -- It will be used for both upgrade and uninstall -- Drop obsolete functions -- (which fully obsolete, changed to take default args, or outp params changed) -- -- drop aggregates DROP AGGREGATE IF EXISTS ST_Union(raster, text, text, text, double precision, text, text, text, double precision, text, text, text, double precision); DROP AGGREGATE IF EXISTS ST_Union(raster, text, text, text); DROP AGGREGATE IF EXISTS ST_Union(raster, text, text, text, double precision, text, text, text, double precision); DROP AGGREGATE IF EXISTS ST_Union(raster, text, text); DROP AGGREGATE IF EXISTS ST_Union(raster, text, text, text, double precision); DROP AGGREGATE IF EXISTS ST_Union(raster, text); DROP AGGREGATE IF EXISTS ST_Union(raster, integer); DROP AGGREGATE IF EXISTS ST_Union(raster, unionarg[]); DROP AGGREGATE IF EXISTS ST_Union(raster, record[]); DROP AGGREGATE IF EXISTS ST_Union(raster); DROP AGGREGATE IF EXISTS st_samealignment(raster); DROP FUNCTION IF EXISTS ST_Intersects(raster,boolean,geometry); DROP FUNCTION IF EXISTS ST_Intersects(geometry,raster,boolean); DROP FUNCTION IF EXISTS ST_Intersects(raster,geometry); DROP FUNCTION IF EXISTS ST_Intersects(geometry,raster); DROP FUNCTION IF EXISTS ST_Intersects(raster, integer, boolean , geometry); DROP FUNCTION IF EXISTS ST_Intersects(geometry , raster, integer , boolean); DROP FUNCTION IF EXISTS ST_Intersection(raster,raster, integer, integer); DROP FUNCTION IF EXISTS ST_Intersection(geometry,raster); DROP FUNCTION IF EXISTS ST_Intersection(raster, geometry); DROP FUNCTION IF EXISTS ST_Intersection(raster, integer, geometry); --these were renamed to ST_MapAlgebraExpr or argument names changed -- DROP FUNCTION IF EXISTS ST_MapAlgebra(raster, integer, text, text, nodatavaluerepl text); DROP FUNCTION IF EXISTS ST_MapAlgebra(raster, pixeltype text, expression text, nodatavaluerepl text); --signatures or arg names changed DROP FUNCTION IF EXISTS ST_MapAlgebraExpr(raster, integer, text, text, text); DROP FUNCTION IF EXISTS ST_MapAlgebraExpr(raster, text, text, text); DROP FUNCTION IF EXISTS ST_MapalgebraFct(raster, regprocedure); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, text, regprocedure, VARIADIC text[]); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, text, regprocedure); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, regprocedure, VARIADIC text[]); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, integer, regprocedure, variadic text[]); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, integer, text, regprocedure, VARIADIC text[]); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, integer, text, regprocedure); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, integer, regprocedure, variadic text[]); DROP FUNCTION IF EXISTS ST_MapalgebraFct(raster, integer, regprocedure); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, raster, regprocedure, text, text, VARIADIC text[]); DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, integer, raster, integer, regprocedure, text, text, VARIADIC text[]); DROP FUNCTION IF EXISTS ST_MapAlgebraFctNgb(raster, integer, text, integer, integer, regprocedure, text, VARIADIC text[]); --dropped functions DROP FUNCTION IF EXISTS ST_MapAlgebraFct(raster, raster, regprocedure, VARIADIC text[]); --added extra parameter so these are obsolete -- DROP FUNCTION IF EXISTS ST_AsRaster(geometry , integer , integer , double precision , double precision , text , double precision , double precision , double precision , double precision ); DROP FUNCTION IF EXISTS ST_AsRaster(geometry , integer , integer , text[] , double precision[] , double precision[] , double precision , double precision , double precision , double precision ); DROP FUNCTION IF EXISTS ST_AsRaster(geometry , integer , integer , text , double precision , double precision , double precision , double precision , double precision , double precision ); DROP FUNCTION IF EXISTS ST_AsRaster(geometry , integer , integer , double precision , double precision , text[] , double precision[] , double precision[] , double precision , double precision ); DROP FUNCTION IF EXISTS ST_AsRaster(geometry , integer , integer , double precision , double precision , text[] , double precision[] , double precision[] , double precision , double precision ); DROP FUNCTION IF EXISTS ST_AsRaster(geometry , double precision , double precision , text , double precision , double precision , double precision , double precision , double precision , double precision ); DROP FUNCTION IF EXISTS ST_AsRaster(geometry , raster , text , double precision , double precision ); DROP FUNCTION IF EXISTS _ST_AsRaster(geometry,double precision , double precision, integer , integer,text[] , double precision[] ,double precision[] , double precision, double precision, double precision,double precision, double precision, double precision,touched boolean); -- arg names changed DROP FUNCTION IF EXISTS _ST_Resample(raster, text, double precision, integer, double precision, double precision, double precision, double precision, double precision, double precision); -- signature changed DROP FUNCTION IF EXISTS ST_Resample(raster, raster, text, double precision); -- default parameters added DROP FUNCTION IF EXISTS ST_HasNoBand(raster); --function out parameters changed so can not just create or replace DROP FUNCTION IF EXISTS ST_BandMetaData(raster, integer); --function out parameter changed DROP FUNCTION IF EXISTS ST_BandNoDataValue(raster, integer); --function no longer exists DROP FUNCTION IF EXISTS ST_BandNoDataValue(raster); --function no longer exists DROP FUNCTION IF EXISTS ST_SetGeoReference(raster, text); -- signature changed DROP FUNCTION IF EXISTS ST_SetGeoReference(raster, text, text); --function no longer exists DROP FUNCTION IF EXISTS st_setbandisnodata(raster); -- signature changed DROP FUNCTION IF EXISTS st_setbandisnodata(raster, integer); --function no longer exists DROP FUNCTION IF EXISTS st_setbandnodatavalue(raster, integer, double precision); -- signature changed DROP FUNCTION IF EXISTS st_setbandnodatavalue(raster, integer, double precision, boolean); --function no longer exists DROP FUNCTION IF EXISTS st_dumpaspolygons(raster); -- signature changed DROP FUNCTION IF EXISTS st_dumpaspolygons(raster, integer); --function no longer exists DROP FUNCTION IF EXISTS st_polygon(raster); -- signature changed DROP FUNCTION IF EXISTS st_polygon(raster, integer); -- function no longer exists DROP FUNCTION IF EXISTS st_makeemptyraster(int, int, float8, float8, float8, float8, float8, float8); -- signature changed DROP FUNCTION IF EXISTS st_makeemptyraster(int, int, float8, float8, float8, float8, float8, float8, int4); -- function no longer exists DROP FUNCTION IF EXISTS st_addband(raster, text); DROP FUNCTION IF EXISTS st_addband(raster, text, float8); DROP FUNCTION IF EXISTS st_addband(raster, int, text); DROP FUNCTION IF EXISTS st_addband(raster, int, text, float8); DROP FUNCTION IF EXISTS st_addband(raster, raster, int); DROP FUNCTION IF EXISTS st_addband(raster, raster); -- signature changed DROP FUNCTION IF EXISTS st_addband(raster, text, float8, float8); DROP FUNCTION IF EXISTS st_addband(raster, int, text, float8, float8); DROP FUNCTION IF EXISTS st_addband(raster, raster, int, int); -- function no longer exists DROP FUNCTION IF EXISTS st_bandisnodata(raster); DROP FUNCTION IF EXISTS st_bandisnodata(raster, integer); -- signature changed DROP FUNCTION IF EXISTS st_bandisnodata(raster, integer, boolean); -- function no longer exists DROP FUNCTION IF EXISTS st_bandpath(raster); -- signature changed DROP FUNCTION IF EXISTS st_bandpath(raster, integer); -- function no longer exists DROP FUNCTION IF EXISTS st_bandpixeltype(raster); -- signature changed DROP FUNCTION IF EXISTS st_bandpixeltype(raster, integer); -- signature changed and some functions dropped -- -- Note: I am only including the surviving variants -- since some people may be using the dead ones which are in scripts -- and we do not have a replace for those DROP AGGREGATE IF EXISTS ST_Union(raster); DROP AGGREGATE IF EXISTS ST_Union(raster, integer, text); -- function no longer exists DROP FUNCTION IF EXISTS st_value(raster, integer, integer, integer); DROP FUNCTION IF EXISTS st_value(raster, integer, integer); DROP FUNCTION IF EXISTS st_value(raster, integer, geometry); DROP FUNCTION IF EXISTS st_value(raster, geometry); -- signature changed DROP FUNCTION IF EXISTS st_value(raster, integer, integer, integer, boolean); DROP FUNCTION IF EXISTS st_value(raster, integer, integer, boolean); DROP FUNCTION IF EXISTS st_value(raster, integer, geometry, boolean); DROP FUNCTION IF EXISTS st_value(raster, geometry, boolean); DROP FUNCTION IF EXISTS st_value(raster, integer, geometry, double precision); DROP FUNCTION IF EXISTS st_value(raster, geometry, double precision); -- function no longer exists DROP FUNCTION IF EXISTS st_georeference(raster); -- signature changed DROP FUNCTION IF EXISTS st_georeference(raster, text); -- function name change DROP FUNCTION IF EXISTS dumpaswktpolygons(raster, integer); -- signature changed DROP FUNCTION IF EXISTS st_bandmetadata(raster, VARIADIC int[]); --change to use default parameters DROP FUNCTION IF EXISTS ST_PixelAsPolygons(raster); DROP FUNCTION IF EXISTS ST_PixelAsPolygons(raster,integer); -- remove TYPE summarystats DROP FUNCTION IF EXISTS st_summarystats(raster,int, boolean); DROP FUNCTION IF EXISTS st_summarystats(raster, boolean); DROP FUNCTION IF EXISTS st_approxsummarystats(raster,int, boolean, double precision); DROP FUNCTION IF EXISTS st_approxsummarystats(raster,int, double precision); DROP FUNCTION IF EXISTS st_approxsummarystats(raster, boolean, double precision); DROP FUNCTION IF EXISTS st_approxsummarystats(raster, double precision); DROP FUNCTION IF EXISTS st_summarystats(text, text,integer, boolean); DROP FUNCTION IF EXISTS st_summarystats(text, text, boolean); DROP FUNCTION IF EXISTS st_approxsummarystats(text, text,integer, boolean, double precision); DROP FUNCTION IF EXISTS st_approxsummarystats(text, text,integer, double precision); DROP FUNCTION IF EXISTS st_approxsummarystats(text, text, boolean); DROP FUNCTION IF EXISTS st_approxsummarystats(text, text, double precision); DROP FUNCTION IF EXISTS _st_summarystats(raster,int, boolean, double precision); DROP FUNCTION IF EXISTS _st_summarystats(text, text,integer, boolean, double precision); DROP TYPE IF EXISTS summarystats; -- remove TYPE quantile DROP FUNCTION IF EXISTS st_quantile(raster, int, boolean, double precision[]); DROP FUNCTION IF EXISTS st_quantile(raster, int, double precision[]); DROP FUNCTION IF EXISTS st_quantile(raster, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(raster, int, boolean, double precision, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(raster, int, double precision, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(raster, double precision, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(raster, double precision[]); DROP FUNCTION IF EXISTS st_quantile(text, text, int, boolean, double precision[]); DROP FUNCTION IF EXISTS st_quantile(text, text, int, double precision[]); DROP FUNCTION IF EXISTS st_quantile(text, text, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(text, text, int, boolean, double precision, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(text, text, int, double precision, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(text, text, double precision, double precision[]); DROP FUNCTION IF EXISTS st_approxquantile(text, text, double precision[]); DROP FUNCTION IF EXISTS _st_quantile(raster, int, boolean, double precision, double precision[]); DROP FUNCTION IF EXISTS _st_quantile(text, text, int, boolean, double precision, double precision[]); DROP TYPE IF EXISTS quantile; -- remove TYPE valuecount DROP FUNCTION IF EXISTS st_valuecount(text, text, integer, double precision, double precision); DROP FUNCTION IF EXISTS st_valuecount(text, text, integer, boolean, double precision[], double precision); DROP FUNCTION IF EXISTS st_valuecount(text, text, double precision[], double precision); DROP FUNCTION IF EXISTS st_valuecount(text, text, integer, double precision[], double precision); DROP FUNCTION IF EXISTS st_valuecount(text, text, integer, boolean, double precision, double precision); DROP FUNCTION IF EXISTS st_valuecount(text, text, double precision, double precision); DROP FUNCTION IF EXISTS st_valuecount(raster, integer, boolean, double precision[], double precision); DROP FUNCTION IF EXISTS st_valuecount(raster, integer, double precision[], double precision); DROP FUNCTION IF EXISTS st_valuecount(raster, double precision[], double precision); DROP FUNCTION IF EXISTS _st_valuecount(text, text, integer, boolean, double precision[], double precision); DROP FUNCTION IF EXISTS _st_valuecount(raster, integer, boolean, double precision[], double precision); DROP TYPE IF EXISTS valuecount; -- remove TYPE histogram DROP FUNCTION IF EXISTS st_histogram(raster, int, boolean, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_histogram(raster, int, boolean, int, boolean); DROP FUNCTION IF EXISTS st_histogram(raster, int, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_histogram(raster, int, int, boolean); DROP FUNCTION IF EXISTS st_approxhistogram( raster, int, boolean, double precision, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_approxhistogram(raster, int, boolean, double precision, int, boolean); DROP FUNCTION IF EXISTS st_approxhistogram(raster, int, double precision); DROP FUNCTION IF EXISTS st_approxhistogram(raster, double precision); DROP FUNCTION IF EXISTS st_approxhistogram(raster, int, double precision, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_approxhistogram(raster, int, double precision, int, boolean); DROP FUNCTION IF EXISTS st_histogram(text, text, int, boolean, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_histogram(text, text, int, boolean, int, boolean); DROP FUNCTION IF EXISTS st_histogram(text, text, int, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_histogram(text, text, int, int, boolean); DROP FUNCTION IF EXISTS st_approxhistogram( text, text, int, boolean, double precision, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_approxhistogram(text, text, int, boolean, double precision, int, boolean); DROP FUNCTION IF EXISTS st_approxhistogram(text, text, int, double precision); DROP FUNCTION IF EXISTS st_approxhistogram(text, text, double precision); DROP FUNCTION IF EXISTS st_approxhistogram(text, text, int, double precision, int, double precision[], boolean); DROP FUNCTION IF EXISTS st_approxhistogram(text, text, int, double precision, int, boolean); DROP FUNCTION IF EXISTS _st_histogram( raster, int, boolean, double precision, int, double precision[], boolean, double precision, double precision); DROP FUNCTION IF EXISTS _st_histogram( text, text, int, boolean, double precision, int, double precision[], boolean); DROP TYPE IF EXISTS histogram; -- no longer needed functions changed to use out parameters DROP TYPE IF EXISTS bandmetadata; DROP TYPE IF EXISTS geomvalxy; -- raster_columns and raster_overviews tables are deprecated DROP FUNCTION IF EXISTS _rename_raster_tables(); CREATE OR REPLACE FUNCTION _rename_raster_tables() RETURNS void AS $$ DECLARE cnt int; BEGIN SELECT count(*) INTO cnt FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relname = 'raster_columns' AND c.relkind = 'r'::char AND NOT pg_is_other_temp_schema(c.relnamespace); IF cnt > 0 THEN EXECUTE 'ALTER TABLE raster_columns RENAME TO deprecated_raster_columns'; END IF; SELECT count(*) INTO cnt FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relname = 'raster_overviews' AND c.relkind = 'r'::char AND NOT pg_is_other_temp_schema(c.relnamespace); IF cnt > 0 THEN EXECUTE 'ALTER TABLE raster_overviews RENAME TO deprecated_raster_overviews'; END IF; END; $$ LANGUAGE 'plpgsql' VOLATILE; SELECT _rename_raster_tables(); DROP FUNCTION _rename_raster_tables(); -- inserted new column into view DROP VIEW IF EXISTS raster_columns; -- functions no longer supported DROP FUNCTION IF EXISTS AddRasterColumn(varchar, varchar, varchar, varchar, integer, varchar[], boolean, boolean, double precision[], double precision, double precision, integer, integer, geometry); DROP FUNCTION IF EXISTS AddRasterColumn(varchar, varchar, varchar, integer, varchar[], boolean, boolean, double precision[], double precision, double precision, integer, integer, geometry); DROP FUNCTION IF EXISTS AddRasterColumn(varchar, varchar, integer, varchar[], boolean, boolean, double precision[], double precision, double precision, integer, integer, geometry); DROP FUNCTION IF EXISTS DropRasterColumn(varchar, varchar, varchar, varchar); DROP FUNCTION IF EXISTS DropRasterColumn(varchar, varchar, varchar); DROP FUNCTION IF EXISTS DropRasterColumn(varchar, varchar); DROP FUNCTION IF EXISTS DropRasterTable(varchar, varchar, varchar); DROP FUNCTION IF EXISTS DropRasterTable(varchar, varchar); DROP FUNCTION IF EXISTS DropRasterTable(varchar); -- function parameters added DROP FUNCTION IF EXISTS AddRasterConstraints(name, name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean); DROP FUNCTION IF EXISTS AddRasterConstraints(name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean); DROP FUNCTION IF EXISTS DropRasterConstraints(name, name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean); DROP FUNCTION IF EXISTS DropRasterConstraints(name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean); -- function parameters renamed CREATE OR REPLACE FUNCTION _drop_st_samealignment() RETURNS void AS $$ DECLARE cnt int; BEGIN SELECT count(*) INTO cnt FROM pg_proc WHERE lower(proname) = 'st_samealignment' AND pronargs = 2 AND ( proargnames = '{rasta,rastb}'::text[] OR proargnames = '{rastA,rastB}'::text[] ); IF cnt > 0 THEN RAISE NOTICE 'Dropping ST_SameAlignment(raster, raster) due to parameter name changes. Unfortunately, this is a DROP ... CASCADE as the alignment raster constraint uses ST_SameAlignment(raster, raster). You will need to reapply AddRasterConstraint(''SCHEMA'', ''TABLE'', ''COLUMN'', ''alignment'') to any raster column that requires this constraint.'; DROP FUNCTION IF EXISTS st_samealignment(raster, raster) CASCADE; END IF; END; $$ LANGUAGE 'plpgsql' VOLATILE; SELECT _drop_st_samealignment(); DROP FUNCTION _drop_st_samealignment(); DROP FUNCTION IF EXISTS _st_intersects(raster, integer, raster, integer); DROP FUNCTION IF EXISTS st_intersects(raster, integer, raster, integer); DROP FUNCTION IF EXISTS st_intersects(raster, raster); -- functions have changed dramatically DROP FUNCTION IF EXISTS st_intersection(raster, integer, geometry); DROP FUNCTION IF EXISTS st_intersection(raster, geometry); -- function was renamed DROP FUNCTION IF EXISTS st_minpossibleval(text); -- function deprecated previously DROP FUNCTION IF EXISTS st_pixelaspolygon(raster, integer, integer, integer); -- function signatures changed DROP FUNCTION IF EXISTS st_intersection(raster, int, geometry, text, regprocedure); DROP FUNCTION IF EXISTS st_intersection(raster, int, geometry, regprocedure); DROP FUNCTION IF EXISTS st_intersection(raster, geometry, text, regprocedure); DROP FUNCTION IF EXISTS st_intersection(raster, geometry, regprocedure); DROP FUNCTION IF EXISTS st_clip(raster, integer, geometry, boolean); DROP FUNCTION IF EXISTS st_clip(raster, geometry, float8, boolean); DROP FUNCTION IF EXISTS st_clip(raster, geometry, boolean); DROP FUNCTION IF EXISTS st_clip(raster, int, geometry, float8, boolean); DROP FUNCTION IF EXISTS st_clip(raster, geometry, float8[], boolean); DROP FUNCTION IF EXISTS st_clip(raster, integer, geometry, float8[], boolean); -- refactoring of functions DROP FUNCTION IF EXISTS _st_dumpaswktpolygons(raster, integer); DROP TYPE IF EXISTS wktgeomval; -- function parameter names changed DROP FUNCTION IF EXISTS st_nearestvalue(raster, integer, integer, integer, boolean); DROP FUNCTION IF EXISTS st_nearestvalue(raster, integer, integer, boolean); DROP FUNCTION IF EXISTS st_neighborhood(raster, integer, integer, integer, integer, boolean); DROP FUNCTION IF EXISTS st_neighborhood(raster, integer, integer, integer, boolean); DROP FUNCTION IF EXISTS st_neighborhood(raster, integer, geometry, integer, boolean); DROP FUNCTION IF EXISTS st_neighborhood(raster, geometry, integer, boolean); -- variants of st_intersection with regprocedure no longer exist DROP FUNCTION IF EXISTS st_intersection(raster, integer, raster, integer, text, regprocedure); DROP FUNCTION IF EXISTS st_intersection(raster, integer, raster, integer, regprocedure); DROP FUNCTION IF EXISTS st_intersection(raster, raster, text, regprocedure); DROP FUNCTION IF EXISTS st_intersection(raster, raster, regprocedure); -- function deprecated DROP FUNCTION IF EXISTS st_pixelaspolygons(raster, integer); -- function deprecated DROP FUNCTION IF EXISTS st_bandsurface(raster, integer); -- function no longer exist or refactored DROP FUNCTION IF EXISTS st_intersects(raster, integer, geometry); DROP FUNCTION IF EXISTS st_intersects(raster, geometry, integer); DROP FUNCTION IF EXISTS st_intersects(geometry, raster, integer); DROP FUNCTION IF EXISTS _st_intersects(raster, geometry, integer); DROP FUNCTION IF EXISTS _st_intersects(geometry, raster, integer); -- function no longer exists DROP FUNCTION IF EXISTS st_overlaps(geometry, raster, integer); DROP FUNCTION IF EXISTS st_overlaps(raster, integer, geometry); DROP FUNCTION IF EXISTS st_overlaps(raster, geometry, integer); DROP FUNCTION IF EXISTS _st_overlaps(raster, geometry, integer); DROP FUNCTION IF EXISTS _st_overlaps(geometry, raster, integer); -- function no longer exists DROP FUNCTION IF EXISTS st_touches(geometry, raster, integer); DROP FUNCTION IF EXISTS st_touches(raster, geometry, integer); DROP FUNCTION IF EXISTS st_touches(raster, integer, geometry); DROP FUNCTION IF EXISTS _st_touches(geometry, raster, integer); DROP FUNCTION IF EXISTS _st_touches(raster, geometry, integer); -- function no longer exists DROP FUNCTION IF EXISTS st_contains(raster, geometry, integer); DROP FUNCTION IF EXISTS st_contains(raster, integer, geometry); DROP FUNCTION IF EXISTS st_contains(geometry, raster, integer); DROP FUNCTION IF EXISTS _st_contains(raster, geometry, integer); DROP FUNCTION IF EXISTS _st_contains(geometry, raster, integer); -- function signature changed DROP FUNCTION IF EXISTS st_addband(raster, raster[], integer); -- function signatures changed DROP FUNCTION IF EXISTS st_slope(raster, integer, text, text, double precision, boolean); DROP FUNCTION IF EXISTS st_slope(raster, integer, text, boolean); DROP FUNCTION IF EXISTS st_slope(raster, integer, text); DROP FUNCTION IF EXISTS st_aspect(raster, integer, text, text, boolean); DROP FUNCTION IF EXISTS st_aspect(raster, integer, text, boolean); DROP FUNCTION IF EXISTS st_aspect(raster, integer, text); DROP FUNCTION IF EXISTS st_hillshade(raster, integer, text, double precision, double precision, double precision, double precision, boolean); DROP FUNCTION IF EXISTS st_hillshade(raster, integer, text, float, float, float, float, boolean); DROP FUNCTION IF EXISTS st_hillshade(raster, integer, text, float, float, float, float); -- function no longer exists DROP FUNCTION IF EXISTS st_tile(raster, integer, integer, integer[]); DROP FUNCTION IF EXISTS st_tile(raster, integer, integer, integer); -- function signatures changed DROP FUNCTION IF EXISTS st_setvalue(raster, integer, geometry, double precision); DROP FUNCTION IF EXISTS st_setvalue(raster, geometry, double precision); -- function name change DROP FUNCTION IF EXISTS st_world2rastercoord(raster, double precision, double precision); DROP FUNCTION IF EXISTS st_world2rastercoord(raster, geometry); DROP FUNCTION IF EXISTS _st_world2rastercoord(raster, double precision, double precision); DROP FUNCTION IF EXISTS st_world2rastercoordx(raster, float8, float8); DROP FUNCTION IF EXISTS st_world2rastercoordx(raster, float8); DROP FUNCTION IF EXISTS st_world2rastercoordx(raster, geometry); DROP FUNCTION IF EXISTS st_world2rastercoordy(raster, float8, float8); DROP FUNCTION IF EXISTS st_world2rastercoordy(raster, float8); DROP FUNCTION IF EXISTS st_world2rastercoordy(raster, geometry); DROP FUNCTION IF EXISTS st_raster2worldcoord( raster, integer, integer); DROP FUNCTION IF EXISTS _st_raster2worldcoord(raster, integer, integer); DROP FUNCTION IF EXISTS st_raster2worldcoordx(raster, int, int); DROP FUNCTION IF EXISTS st_raster2worldcoordx(raster, int); DROP FUNCTION IF EXISTS st_raster2worldcoordy(raster, int, int); DROP FUNCTION IF EXISTS st_raster2worldcoordy(raster, int); -- function name change DROP FUNCTION IF EXISTS _st_resample(raster, text, double precision, integer, double precision, double precision, double precision, double precision, double precision, double precision, integer, integer); -- function signatures changed DROP FUNCTION IF EXISTS st_resample(raster, integer, double precision, double precision, double precision, double precision, double precision, double precision, text, double precision); DROP FUNCTION IF EXISTS st_resample(raster, integer, integer, integer, double precision, double precision, double precision, double precision, text, double precision); -- function signatures changed DROP FUNCTION IF EXISTS _st_tile(raster, integer, integer, int[]); DROP FUNCTION IF EXISTS st_tile(raster, integer[], integer, integer); DROP FUNCTION IF EXISTS st_tile(raster, integer, integer, integer); DROP FUNCTION IF EXISTS st_tile(raster, integer, integer); -- function no longer exists DROP FUNCTION IF EXISTS _add_raster_constraint_regular_blocking(name, name, name); -- function signature changed DROP FUNCTION IF EXISTS st_asbinary(raster); DROP FUNCTION IF EXISTS _st_aspect4ma(float8[], text, text[]); DROP FUNCTION IF EXISTS _st_hillshade4ma(float8[], text, text[]); DROP FUNCTION IF EXISTS _st_mapalgebra4unionfinal1(raster); DROP FUNCTION IF EXISTS _st_mapalgebra4unionstate(raster, raster, int4); DROP FUNCTION IF EXISTS _st_mapalgebra4unionstate(raster, raster); DROP FUNCTION IF EXISTS _st_mapalgebra4unionstate(raster, raster, text); DROP FUNCTION IF EXISTS _st_mapalgebra4unionstate(raster, raster, int4, text); DROP FUNCTION IF EXISTS _st_mapalgebra4unionstate(raster, raster, text, text, text, float8, text, text, text, float8); DROP FUNCTION IF EXISTS _st_slope4ma(float8[], text, text[]); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/Makefile.in����������������������������������������������������0000644�0000000�0000000�00000012017�12314303024�020231� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id: Makefile.in 12349 2014-03-25 13:35:16Z strk $ # # Copyright (c) 2009-2011 Sandro Santilli <strk@keybit.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# POSTGIS_PGSQL_VERSION=@POSTGIS_PGSQL_VERSION@ MODULE_big=rtpostgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ MODULEDIR=contrib/postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ # Files to be copied to the contrib/ directory DATA_built=rtpostgis.sql rtpostgis_upgrade_20_21.sql rtpostgis_upgrade_21_minor.sql uninstall_rtpostgis.sql rtpostgis_legacy.sql DATA= # SQL preprocessor SQLPP = @SQLPP@ # SQL objects (files requiring pre-processing) SQL_OBJS=rtpostgis.sql rtpostgis_drop.sql rtpostgis_upgrade_cleanup.sql rtpostgis_legacy.sql # Objects to build using PGXS OBJS=rt_pg.o # Libraries to link into the module (proj, geos) # # Note: we specify liblwgeom.a directly in SHLIB_LINK rather than using # -L... -l options to prevent issues with some platforms trying to link # to an existing liblwgeom.so in the PostgreSQL $libdir supplied by an # older version of PostGIS, rather than with the static liblwgeom.a # supplied with newer versions of PostGIS # LIBLWGEOM_LDFLAGS=../../liblwgeom/.libs/liblwgeom.a LIBLWGEOM_CFLAGS="-I../../liblwgeom" LIBPGCOMMON_CFLAGS="-I../../libpgcommon" LIBPGCOMMON_LDFLAGS=../../libpgcommon/libpgcommon.a LIBGDAL_CFLAGS=@LIBGDAL_CFLAGS@ LIBGDAL_LDFLAGS=@LIBGDAL_LDFLAGS@ LIBPROJ_CFLAGS=@PROJ_CPPFLAGS@ PG_CPPFLAGS+=@CPPFLAGS@ $(LIBLWGEOM_CFLAGS) $(LIBGDAL_CFLAGS) $(LIBPGCOMMON_CFLAGS) $(LIBPROJ_CFLAGS) -I../rt_core SHLIB_LINK_F = ../rt_core/librtcore.a $(LIBLWGEOM_LDFLAGS) $(LIBPGCOMMON_LDFLAGS) $(LIBGDAL_LDFLAGS) @SHLIB_LINK@ # Extra files to remove during 'make clean' EXTRA_CLEAN=$(SQL_OBJS) $(DATA_built) rtpostgis_upgrade.sql # PGXS information PG_CONFIG = @PG_CONFIG@ PGXS := @PGXS@ include $(PGXS) # Set PERL _after_ the include of PGXS PERL=@PERL@ # This is to workaround a bug in PGXS 8.4 win32 link line, # see http://trac.osgeo.org/postgis/ticket/1158#comment:57 SHLIB_LINK := $(SHLIB_LINK_F) $(SHLIB_LINK) # PGXS override feature. The ability to allow PostGIS to install itself # in a versioned directory is only available in PostgreSQL >= 8.5. To # do this by default on older PostgreSQL versions, we need to override # the existing PGXS targets. # # Once PostgreSQL 8.5 becomes the minimum supported version, this entire # section and its associated Makefile.pgxs should be removed. PGXSOVERRIDE = @PGXSOVERRIDE@ ifeq ($(PGXSOVERRIDE),1) include Makefile.pgxs endif # If REGRESS=1 passed as a parameter, change the default install paths # so that no prefix is included. This allows us to relocate to a temporary # directory for regression testing. ifeq ($(REGRESS),1) bindir=/bin pkglibdir=/lib datadir=/share datamoduledir=contrib/postgis endif # Borrow the $libdir substitution from PGXS but customise by running the preprocessor # and adding the version number %.sql: %.sql.in $(SQLPP) -I../../postgis/ -I../../ $< | grep -v '^#' | \ $(PERL) -lpe "s'MODULE_PATHNAME'\$$libdir/rtpostgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@'g" > $@ # Objects dependencies $(OBJS): ../../liblwgeom/.libs/liblwgeom.a ../../libpgcommon/libpgcommon.a ../../postgis_config.h ../../postgis_svn_revision.h # Generate any .sql.in files from .sql.in.c files by running them through the SQL pre-processor #$(SQL_OBJS): %.in: %.in.c # $(SQLPP) -I../../postgis/ -I../../ $< | grep -v '^#' > $@ # SQL objects deps here $(SQL_OBJS): ../../postgis/sqldefines.h ../../postgis_svn_revision.h #remove all create object types since these can't be done cleanly in an upgrade rtpostgis_upgrade.sql: rtpostgis.sql ../../utils/postgis_proc_upgrade.pl $(PERL) ../../utils/postgis_proc_upgrade.pl $< 2.0 > $@ #$(PERL) -0777 -ne 's/^(CREATE|ALTER) (CAST|OPERATOR|TYPE|TABLE|SCHEMA|DOMAIN|TRIGGER).*?;//msg;print;' $< > $@ rtpostgis_upgrade_20_21.sql: rtpostgis_upgrade_cleanup.sql rtpostgis_drop.sql rtpostgis_upgrade.sql cat $^ > $@ rtpostgis_upgrade_21_minor.sql: rtpostgis.sql ../../utils/postgis_proc_upgrade.pl $(PERL) ../../utils/postgis_proc_upgrade.pl rtpostgis.sql 2.1 > $@ uninstall_rtpostgis.sql: rtpostgis.sql ../../utils/create_undef.pl $(PERL) ../../utils/create_undef.pl $< $(POSTGIS_PGSQL_VERSION) > $@ distclean: clean rm -f Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_pg/rt_pg.c��������������������������������������������������������0000644�0000000�0000000�00001750301�12250631624�017462� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * $Id: rt_pg.c 12153 2013-12-07 14:41:24Z dustymugs $ * * WKTRaster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2011-2013 Regents of the University of California * <bkpark@ucdavis.edu> * Copyright (C) 2010-2011 Jorge Arevalo <jorge.arevalo@deimos-space.com> * Copyright (C) 2010-2011 David Zwarg <dzwarg@azavea.com> * Copyright (C) 2009-2011 Pierre Racine <pierre.racine@sbf.ulaval.ca> * Copyright (C) 2009-2011 Mateusz Loskot <mateusz@loskot.net> * Copyright (C) 2008-2009 Sandro Santilli <strk@keybit.net> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include <math.h> #include <string.h> #include <stdio.h> #include <stdlib.h> /* for strtod in RASTER_reclass */ #include <errno.h> #include <assert.h> #include <ctype.h> /* for isspace */ #include <postgres.h> /* for palloc */ #include <access/gist.h> #include <access/itup.h> #include <fmgr.h> #include <utils/elog.h> #include <utils/builtins.h> #include <executor/spi.h> #include <executor/executor.h> /* for GetAttributeByName in RASTER_reclass */ #include <funcapi.h> #include "../../postgis_config.h" #include "lwgeom_pg.h" #include "rt_pg.h" #include "pgsql_compat.h" #include "utils/lsyscache.h" /* for get_typlenbyvalalign */ #include "utils/array.h" /* for ArrayType */ #include "catalog/pg_type.h" /* for INT2OID, INT4OID, FLOAT4OID, FLOAT8OID and TEXTOID */ #if POSTGIS_PGSQL_VERSION > 92 #include "access/htup_details.h" #endif /* maximum char length required to hold any double or long long value */ #define MAX_DBL_CHARLEN (3 + DBL_MANT_DIG - DBL_MIN_EXP) #define MAX_INT_CHARLEN 32 /* * This is required for builds against pgsql */ PG_MODULE_MAGIC; /* * Module load callback */ void _PG_init(void); void _PG_init(void) { /* Install liblwgeom handlers */ pg_install_lwgeom_handlers(); /* TODO: Install raster callbacks (see rt_init_allocators) */ } /*************************************************************** * Internal functions must be prefixed with rtpg_. This is * keeping inline with the use of pgis_ for ./postgis C utility * functions. ****************************************************************/ /* Internal funcs */ static char *rtpg_strreplace( const char *str, const char *oldstr, const char *newstr, int *count ); static char *rtpg_strtoupper(char *str); static char *rtpg_chartrim(const char* input, char *remove); static char **rtpg_strsplit(const char *str, const char *delimiter, int *n); static char *rtpg_removespaces(char *str); static char *rtpg_trim(const char* input); static char *rtpg_getSR(int srid); /*************************************************************** * Some rules for returning NOTICE or ERROR... * * Send an ERROR like: * * elog(ERROR, "RASTER_out: Could not deserialize raster"); * * only when: * * -something wrong happen with memory, * -a function got an invalid argument ('3BUI' as pixel type) so that no row can * be processed * * *** IMPORTANT: elog(ERROR, ...) does NOT return to calling function *** * * Send a NOTICE like: * * elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); * * when arguments (e.g. x, y, band) are NULL or out of range so that some or * most rows can be processed anyway * * in this case, * for SET functions or function normally returning a modified raster, return * the original raster * for GET functions, return NULL * try to deduce a valid parameter value if it makes sence (e.g. out of range * index for addBand) * * Do not put the name of the faulty function for NOTICEs, only with ERRORs. * ****************************************************************/ /****************************************************************************** * Some notes on memory management... * * Every time a SQL function is called, PostgreSQL creates a new memory context. * So, all the memory allocated with palloc/repalloc in that context is * automatically free'd at the end of the function. If you want some data to * live between function calls, you have 2 options: * * - Use fcinfo->flinfo->fn_mcxt contex to store the data (by pointing the * data you want to keep with fcinfo->flinfo->fn_extra) * - Use SRF funcapi, and storing the data at multi_call_memory_ctx (by pointing * the data you want to keep with funcctx->user_fctx. funcctx is created by * funcctx = SPI_FIRSTCALL_INIT()). Recommended way in functions returning rows, * like RASTER_dumpAsPolygons (see section 34.9.9 at * http://www.postgresql.org/docs/8.4/static/xfunc-c.html). * * But raster code follows the same philosophy than the rest of PostGIS: keep * memory as clean as possible. So, we free all allocated memory. * * TODO: In case of functions returning NULL, we should free the memory too. *****************************************************************************/ /****************************************************************************** * Notes for use of PG_DETOAST_DATUM(), PG_DETOAST_DATUM_SLICE() * and PG_DETOAST_DATUM_COPY() * * When ONLY getting raster (not band) metadata, use PG_DETOAST_DATUM_SLICE() * as it is generally quicker to get only the chunk of memory that contains * the raster metadata. * * Example: PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, * sizeof(struct rt_raster_serialized_t)) * * When ONLY setting raster or band(s) metadata OR reading band data, use * PG_DETOAST_DATUM() as rt_raster_deserialize() allocates local memory * for the raster and band(s) metadata. * * Example: PG_DETOAST_DATUM(PG_GETARG_DATUM(0)) * * When SETTING band pixel values, use PG_DETOAST_DATUM_COPY(). This is * because band data (not metadata) is just a pointer to the correct * memory location in the detoasted datum. What is returned from * PG_DETOAST_DATUM() may or may not be a copy of the input datum. * * From the comments in postgresql/src/include/fmgr.h... * * pg_detoast_datum() gives you either the input datum (if not toasted) * or a detoasted copy allocated with palloc(). * * From the mouth of Tom Lane... * http://archives.postgresql.org/pgsql-hackers/2002-01/msg01289.php * * PG_DETOAST_DATUM_COPY guarantees to give you a copy, even if the * original wasn't toasted. This allows you to scribble on the input, * in case that happens to be a useful way of forming your result. * Without a forced copy, a routine for a pass-by-ref datatype must * NEVER, EVER scribble on its input ... because very possibly it'd * be scribbling on a valid tuple in a disk buffer, or a valid entry * in the syscache. * * The key detail above is that the raster datatype is a varlena, a * passed by reference datatype. * * Example: PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)) * * If in doubt, use PG_DETOAST_DATUM_COPY() as that guarantees that the input * datum is copied for use. *****************************************************************************/ /* Prototypes */ /* Utility functions */ Datum RASTER_lib_version(PG_FUNCTION_ARGS); Datum RASTER_lib_build_date(PG_FUNCTION_ARGS); Datum RASTER_gdal_version(PG_FUNCTION_ARGS); Datum RASTER_minPossibleValue(PG_FUNCTION_ARGS); /* Input/output and format conversions */ Datum RASTER_in(PG_FUNCTION_ARGS); Datum RASTER_out(PG_FUNCTION_ARGS); Datum RASTER_to_bytea(PG_FUNCTION_ARGS); Datum RASTER_to_binary(PG_FUNCTION_ARGS); /* Raster as geometry operations */ Datum RASTER_convex_hull(PG_FUNCTION_ARGS); Datum RASTER_dumpAsPolygons(PG_FUNCTION_ARGS); /* Get all the properties of a raster */ Datum RASTER_getSRID(PG_FUNCTION_ARGS); Datum RASTER_getWidth(PG_FUNCTION_ARGS); Datum RASTER_getHeight(PG_FUNCTION_ARGS); Datum RASTER_getNumBands(PG_FUNCTION_ARGS); Datum RASTER_getXScale(PG_FUNCTION_ARGS); Datum RASTER_getYScale(PG_FUNCTION_ARGS); Datum RASTER_getXSkew(PG_FUNCTION_ARGS); Datum RASTER_getYSkew(PG_FUNCTION_ARGS); Datum RASTER_getXUpperLeft(PG_FUNCTION_ARGS); Datum RASTER_getYUpperLeft(PG_FUNCTION_ARGS); Datum RASTER_getPixelWidth(PG_FUNCTION_ARGS); Datum RASTER_getPixelHeight(PG_FUNCTION_ARGS); Datum RASTER_getGeotransform(PG_FUNCTION_ARGS); /* Set all the properties of a raster */ Datum RASTER_setSRID(PG_FUNCTION_ARGS); Datum RASTER_setScale(PG_FUNCTION_ARGS); Datum RASTER_setScaleXY(PG_FUNCTION_ARGS); Datum RASTER_setSkew(PG_FUNCTION_ARGS); Datum RASTER_setSkewXY(PG_FUNCTION_ARGS); Datum RASTER_setUpperLeftXY(PG_FUNCTION_ARGS); Datum RASTER_setRotation(PG_FUNCTION_ARGS); Datum RASTER_setGeotransform(PG_FUNCTION_ARGS); /* Get all the properties of a raster band */ Datum RASTER_getBandPixelType(PG_FUNCTION_ARGS); Datum RASTER_getBandPixelTypeName(PG_FUNCTION_ARGS); Datum RASTER_getBandNoDataValue(PG_FUNCTION_ARGS); Datum RASTER_getBandPath(PG_FUNCTION_ARGS); Datum RASTER_bandIsNoData(PG_FUNCTION_ARGS); Datum RASTER_isEmpty(PG_FUNCTION_ARGS); Datum RASTER_hasNoBand(PG_FUNCTION_ARGS); /* Set all the properties of a raster band */ Datum RASTER_setBandIsNoData(PG_FUNCTION_ARGS); Datum RASTER_setBandNoDataValue(PG_FUNCTION_ARGS); /* Get pixel value */ Datum RASTER_getPixelValue(PG_FUNCTION_ARGS); Datum RASTER_dumpValues(PG_FUNCTION_ARGS); /* Set pixel value(s) */ Datum RASTER_setPixelValue(PG_FUNCTION_ARGS); Datum RASTER_setPixelValuesArray(PG_FUNCTION_ARGS); Datum RASTER_setPixelValuesGeomval(PG_FUNCTION_ARGS); /* Get pixel geographical shape */ Datum RASTER_getPixelPolygons(PG_FUNCTION_ARGS); /* Get raster band's polygon */ Datum RASTER_getPolygon(PG_FUNCTION_ARGS); /* Get pixels of value */ Datum RASTER_pixelOfValue(PG_FUNCTION_ARGS); /* Get nearest value to a point */ Datum RASTER_nearestValue(PG_FUNCTION_ARGS); /* Get the neighborhood around a pixel */ Datum RASTER_neighborhood(PG_FUNCTION_ARGS); /* Raster and band creation */ Datum RASTER_makeEmpty(PG_FUNCTION_ARGS); Datum RASTER_addBand(PG_FUNCTION_ARGS); Datum RASTER_copyBand(PG_FUNCTION_ARGS); Datum RASTER_addBandRasterArray(PG_FUNCTION_ARGS); Datum RASTER_addBandOutDB(PG_FUNCTION_ARGS); Datum RASTER_tile(PG_FUNCTION_ARGS); /* create new raster from existing raster's bands */ Datum RASTER_band(PG_FUNCTION_ARGS); /* Get summary stats */ Datum RASTER_summaryStats(PG_FUNCTION_ARGS); Datum RASTER_summaryStatsCoverage(PG_FUNCTION_ARGS); /* get histogram */ Datum RASTER_histogram(PG_FUNCTION_ARGS); Datum RASTER_histogramCoverage(PG_FUNCTION_ARGS); /* get quantiles */ Datum RASTER_quantile(PG_FUNCTION_ARGS); Datum RASTER_quantileCoverage(PG_FUNCTION_ARGS); /* get counts of values */ Datum RASTER_valueCount(PG_FUNCTION_ARGS); Datum RASTER_valueCountCoverage(PG_FUNCTION_ARGS); /* reclassify specified bands of a raster */ Datum RASTER_reclass(PG_FUNCTION_ARGS); /* apply colormap to specified band of a raster */ Datum RASTER_colorMap(PG_FUNCTION_ARGS); /* convert GDAL raster to raster */ Datum RASTER_fromGDALRaster(PG_FUNCTION_ARGS); /* convert raster to GDAL raster */ Datum RASTER_asGDALRaster(PG_FUNCTION_ARGS); Datum RASTER_getGDALDrivers(PG_FUNCTION_ARGS); /* rasterize a geometry */ Datum RASTER_asRaster(PG_FUNCTION_ARGS); /* warp a raster using GDAL Warp API */ Datum RASTER_GDALWarp(PG_FUNCTION_ARGS); /* get raster's meta data */ Datum RASTER_metadata(PG_FUNCTION_ARGS); /* get raster band's meta data */ Datum RASTER_bandmetadata(PG_FUNCTION_ARGS); /* convert pixel/line to spatial coordinates */ Datum RASTER_rasterToWorldCoord(PG_FUNCTION_ARGS); /* convert spatial coordinates to pixel/line*/ Datum RASTER_worldToRasterCoord(PG_FUNCTION_ARGS); /* determine if two rasters intersect */ Datum RASTER_intersects(PG_FUNCTION_ARGS); /* determine if two rasters overlap */ Datum RASTER_overlaps(PG_FUNCTION_ARGS); /* determine if two rasters touch */ Datum RASTER_touches(PG_FUNCTION_ARGS); /* determine if the first raster contains the second raster */ Datum RASTER_contains(PG_FUNCTION_ARGS); /* determine if the first raster contains properly the second raster */ Datum RASTER_containsProperly(PG_FUNCTION_ARGS); /* determine if the first raster covers the second raster */ Datum RASTER_covers(PG_FUNCTION_ARGS); /* determine if the first raster is covered by the second raster */ Datum RASTER_coveredby(PG_FUNCTION_ARGS); /* determine if the two rasters are within the specified distance of each other */ Datum RASTER_dwithin(PG_FUNCTION_ARGS); /* determine if the two rasters are fully within the specified distance of each other */ Datum RASTER_dfullywithin(PG_FUNCTION_ARGS); /* determine if two rasters are aligned */ Datum RASTER_sameAlignment(PG_FUNCTION_ARGS); Datum RASTER_notSameAlignmentReason(PG_FUNCTION_ARGS); /* one-raster MapAlgebra */ Datum RASTER_mapAlgebraExpr(PG_FUNCTION_ARGS); Datum RASTER_mapAlgebraFct(PG_FUNCTION_ARGS); /* one-raster neighborhood MapAlgebra */ Datum RASTER_mapAlgebraFctNgb(PG_FUNCTION_ARGS); /* two-raster MapAlgebra */ Datum RASTER_mapAlgebra2(PG_FUNCTION_ARGS); /* n-raster MapAlgebra */ Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS); Datum RASTER_nMapAlgebraExpr(PG_FUNCTION_ARGS); /* raster union aggregate */ Datum RASTER_union_transfn(PG_FUNCTION_ARGS); Datum RASTER_union_finalfn(PG_FUNCTION_ARGS); /* raster clip */ Datum RASTER_clip(PG_FUNCTION_ARGS); /* string replacement function taken from * http://ubuntuforums.org/showthread.php?s=aa6f015109fd7e4c7e30d2fd8b717497&t=141670&page=3 */ /* --------------------------------------------------------------------------- Name : replace - Search & replace a substring by another one. Creation : Thierry Husson, Sept 2010 Parameters : str : Big string where we search oldstr : Substring we are looking for newstr : Substring we want to replace with count : Optional pointer to int (input / output value). NULL to ignore. Input: Maximum replacements to be done. NULL or < 1 to do all. Output: Number of replacements done or -1 if not enough memory. Returns : Pointer to the new string or NULL if error. Notes : - Case sensitive - Otherwise, replace functions "strstr" by "strcasestr" - Always allocates memory for the result. --------------------------------------------------------------------------- */ static char* rtpg_strreplace( const char *str, const char *oldstr, const char *newstr, int *count ) { const char *tmp = str; char *result; int found = 0; int length, reslen; int oldlen = strlen(oldstr); int newlen = strlen(newstr); int limit = (count != NULL && *count > 0) ? *count : -1; tmp = str; while ((tmp = strstr(tmp, oldstr)) != NULL && found != limit) found++, tmp += oldlen; length = strlen(str) + found * (newlen - oldlen); if ((result = (char *) palloc(length + 1)) == NULL) { fprintf(stderr, "Not enough memory\n"); found = -1; } else { tmp = str; limit = found; /* Countdown */ reslen = 0; /* length of current result */ /* Replace each old string found with new string */ while ((limit-- > 0) && (tmp = strstr(tmp, oldstr)) != NULL) { length = (tmp - str); /* Number of chars to keep intouched */ strncpy(result + reslen, str, length); /* Original part keeped */ strcpy(result + (reslen += length), newstr); /* Insert new string */ reslen += newlen; tmp += oldlen; str = tmp; } strcpy(result + reslen, str); /* Copies last part and ending null char */ } if (count != NULL) *count = found; return result; } static char * rtpg_strtoupper(char * str) { int j; for (j = strlen(str) - 1; j >= 0; j--) str[j] = toupper(str[j]); return str; } static char* rtpg_chartrim(const char *input, char *remove) { char *rtn = NULL; char *ptr = NULL; uint32_t offset = 0; if (!input) return NULL; else if (!*input) return (char *) input; /* trim left */ while (strchr(remove, *input) != NULL) input++; /* trim right */ ptr = ((char *) input) + strlen(input); while (strchr(remove, *--ptr) != NULL) offset++; rtn = palloc(sizeof(char) * (strlen(input) - offset + 1)); if (rtn == NULL) { fprintf(stderr, "Not enough memory\n"); return NULL; } strncpy(rtn, input, strlen(input) - offset); rtn[strlen(input) - offset] = '\0'; return rtn; } /* split a string based on a delimiter */ static char** rtpg_strsplit(const char *str, const char *delimiter, int *n) { char *tmp = NULL; char **rtn = NULL; char *token = NULL; *n = 0; if (!str) return NULL; /* copy str to tmp as strtok will mangle the string */ tmp = palloc(sizeof(char) * (strlen(str) + 1)); if (NULL == tmp) { fprintf(stderr, "Not enough memory\n"); return NULL; } strcpy(tmp, str); if (!strlen(tmp) || !delimiter || !strlen(delimiter)) { *n = 1; rtn = (char **) palloc(*n * sizeof(char *)); if (NULL == rtn) { fprintf(stderr, "Not enough memory\n"); return NULL; } rtn[0] = (char *) palloc(sizeof(char) * (strlen(tmp) + 1)); if (NULL == rtn[0]) { fprintf(stderr, "Not enough memory\n"); return NULL; } strcpy(rtn[0], tmp); pfree(tmp); return rtn; } token = strtok(tmp, delimiter); while (token != NULL) { if (*n < 1) { rtn = (char **) palloc(sizeof(char *)); } else { rtn = (char **) repalloc(rtn, (*n + 1) * sizeof(char *)); } if (NULL == rtn) { fprintf(stderr, "Not enough memory\n"); return NULL; } rtn[*n] = NULL; rtn[*n] = (char *) palloc(sizeof(char) * (strlen(token) + 1)); if (NULL == rtn[*n]) { fprintf(stderr, "Not enough memory\n"); return NULL; } strcpy(rtn[*n], token); *n = *n + 1; token = strtok(NULL, delimiter); } pfree(tmp); return rtn; } static char * rtpg_removespaces(char *str) { char *rtn; char *tmp; rtn = rtpg_strreplace(str, " ", "", NULL); tmp = rtpg_strreplace(rtn, "\n", "", NULL); pfree(rtn); rtn = rtpg_strreplace(tmp, "\t", "", NULL); pfree(tmp); tmp = rtpg_strreplace(rtn, "\f", "", NULL); pfree(rtn); rtn = rtpg_strreplace(tmp, "\r", "", NULL); pfree(tmp); return rtn; } static char* rtpg_trim(const char *input) { char *rtn; char *ptr; uint32_t offset = 0; int inputlen = 0; if (!input) return NULL; else if (!*input) return (char *) input; /* trim left */ while (isspace(*input) && *input != '\0') input++; /* trim right */ inputlen = strlen(input); if (inputlen) { ptr = ((char *) input) + inputlen; while (isspace(*--ptr)) offset++; } rtn = palloc(sizeof(char) * (inputlen - offset + 1)); if (rtn == NULL) { fprintf(stderr, "Not enough memory\n"); return NULL; } strncpy(rtn, input, inputlen - offset); rtn[inputlen - offset] = '\0'; return rtn; } /* * reverse string search function from * http://stackoverflow.com/a/1634398 */ static char * rtpg_strrstr(const char *s1, const char *s2) { int s1len = strlen(s1); int s2len = strlen(s2); char *s; if (s2len > s1len) return NULL; s = (char *) (s1 + s1len - s2len); for (; s >= s1; --s) if (strncmp(s, s2, s2len) == 0) return s; return NULL; } static char* rtpg_getSR(int srid) { int i = 0; int len = 0; char *sql = NULL; int spi_result; TupleDesc tupdesc; SPITupleTable *tuptable = NULL; HeapTuple tuple; char *tmp = NULL; char *srs = NULL; /* SELECT CASE WHEN (upper(auth_name) = 'EPSG' OR upper(auth_name) = 'EPSGA') AND length(COALESCE(auth_srid::text, '')) > 0 THEN upper(auth_name) || ':' || auth_srid WHEN length(COALESCE(auth_name, '') || COALESCE(auth_srid::text, '')) > 0 THEN COALESCE(auth_name, '') || COALESCE(auth_srid::text, '') ELSE '' END, proj4text, srtext FROM spatial_ref_sys WHERE srid = X LIMIT 1 */ len = sizeof(char) * (strlen("SELECT CASE WHEN (upper(auth_name) = 'EPSG' OR upper(auth_name) = 'EPSGA') AND length(COALESCE(auth_srid::text, '')) > 0 THEN upper(auth_name) || ':' || auth_srid WHEN length(COALESCE(auth_name, '') || COALESCE(auth_srid::text, '')) > 0 THEN COALESCE(auth_name, '') || COALESCE(auth_srid::text, '') ELSE '' END, proj4text, srtext FROM spatial_ref_sys WHERE srid = LIMIT 1") + MAX_INT_CHARLEN + 1); sql = (char *) palloc(len); if (NULL == sql) { elog(ERROR, "rtpg_getSR: Could not allocate memory for sql\n"); return NULL; } spi_result = SPI_connect(); if (spi_result != SPI_OK_CONNECT) { pfree(sql); elog(ERROR, "rtpg_getSR: Could not connect to database using SPI\n"); return NULL; } /* execute query */ snprintf(sql, len, "SELECT CASE WHEN (upper(auth_name) = 'EPSG' OR upper(auth_name) = 'EPSGA') AND length(COALESCE(auth_srid::text, '')) > 0 THEN upper(auth_name) || ':' || auth_srid WHEN length(COALESCE(auth_name, '') || COALESCE(auth_srid::text, '')) > 0 THEN COALESCE(auth_name, '') || COALESCE(auth_srid::text, '') ELSE '' END, proj4text, srtext FROM spatial_ref_sys WHERE srid = %d LIMIT 1", srid); POSTGIS_RT_DEBUGF(4, "SRS query: %s", sql); spi_result = SPI_execute(sql, TRUE, 0); SPI_pfree(sql); if (spi_result != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); elog(ERROR, "rtpg_getSR: Cannot find SRID (%d) in spatial_ref_sys", srid); return NULL; } tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; /* which column to use? */ for (i = 1; i < 4; i++) { tmp = SPI_getvalue(tuple, tupdesc, i); /* value AND GDAL supports this SR */ if ( SPI_result != SPI_ERROR_NOATTRIBUTE && SPI_result != SPI_ERROR_NOOUTFUNC && tmp != NULL && strlen(tmp) && rt_util_gdal_supported_sr(tmp) ) { POSTGIS_RT_DEBUGF(4, "Value for column %d is %s", i, tmp); len = strlen(tmp) + 1; srs = SPI_palloc(sizeof(char) * len); if (NULL == srs) { pfree(tmp); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); elog(ERROR, "rtpg_getSR: Could not allocate memory for spatial reference text\n"); return NULL; } strncpy(srs, tmp, len); pfree(tmp); break; } if (tmp != NULL) pfree(tmp); continue; } if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); /* unable to get SR info */ if (srs == NULL) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); elog(ERROR, "rtpg_getSR: Could not find a viable spatial reference for SRID (%d)", srid); return NULL; } return srs; } PG_FUNCTION_INFO_V1(RASTER_lib_version); Datum RASTER_lib_version(PG_FUNCTION_ARGS) { char ver[64]; text *result; snprintf(ver, 64, "%s r%d", POSTGIS_LIB_VERSION, POSTGIS_SVN_REVISION); ver[63] = '\0'; result = cstring2text(ver); PG_RETURN_TEXT_P(result); } PG_FUNCTION_INFO_V1(RASTER_lib_build_date); Datum RASTER_lib_build_date(PG_FUNCTION_ARGS) { char *ver = POSTGIS_BUILD_DATE; text *result; result = palloc(VARHDRSZ + strlen(ver)); SET_VARSIZE(result, VARHDRSZ + strlen(ver)); memcpy(VARDATA(result), ver, strlen(ver)); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(RASTER_gdal_version); Datum RASTER_gdal_version(PG_FUNCTION_ARGS) { const char *ver = rt_util_gdal_version("--version"); text *result; /* add indicator if GDAL isn't configured right */ if (!rt_util_gdal_configured()) { char *rtn = NULL; rtn = palloc(strlen(ver) + strlen(" GDAL_DATA not found") + 1); if (!rtn) result = cstring2text(ver); else { sprintf(rtn, "%s GDAL_DATA not found", ver); result = cstring2text(rtn); pfree(rtn); } } else result = cstring2text(ver); PG_RETURN_POINTER(result); } PG_FUNCTION_INFO_V1(RASTER_minPossibleValue); Datum RASTER_minPossibleValue(PG_FUNCTION_ARGS) { text *pixeltypetext = NULL; char *pixeltypechar = NULL; rt_pixtype pixtype = PT_END; double pixsize = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pixeltypetext = PG_GETARG_TEXT_P(0); pixeltypechar = text_to_cstring(pixeltypetext); pixtype = rt_pixtype_index_from_name(pixeltypechar); if (pixtype == PT_END) { elog(ERROR, "RASTER_minPossibleValue: Invalid pixel type: %s", pixeltypechar); PG_RETURN_NULL(); } pixsize = rt_pixtype_get_min_value(pixtype); /* correct pixsize of unsigned pixel types example: for PT_8BUI, the value is CHAR_MIN but if char is signed, the value returned is -127 instead of 0. */ switch (pixtype) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BUI: case PT_16BUI: case PT_32BUI: pixsize = 0; break; default: break; } PG_RETURN_FLOAT8(pixsize); } /** * Input is a string with hex chars in it. * Convert to binary and put in the result */ PG_FUNCTION_INFO_V1(RASTER_in); Datum RASTER_in(PG_FUNCTION_ARGS) { rt_raster raster; char *hexwkb = PG_GETARG_CSTRING(0); void *result = NULL; POSTGIS_RT_DEBUG(3, "Starting"); raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); if (raster == NULL) PG_RETURN_NULL(); result = rt_raster_serialize(raster); rt_raster_destroy(raster); if (result == NULL) PG_RETURN_NULL(); SET_VARSIZE(result, ((rt_pgraster*)result)->size); PG_RETURN_POINTER(result); } /** * Given a RASTER structure, convert it to Hex and put it in a string */ PG_FUNCTION_INFO_V1(RASTER_out); Datum RASTER_out(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; uint32_t hexwkbsize = 0; char *hexwkb = NULL; POSTGIS_RT_DEBUG(3, "Starting"); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_out: Could not deserialize raster"); PG_RETURN_NULL(); } hexwkb = rt_raster_to_hexwkb(raster, FALSE, &hexwkbsize); if (!hexwkb) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_out: Could not HEX-WKBize raster"); PG_RETURN_NULL(); } /* Free the raster objects used */ rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_CSTRING(hexwkb); } /** * Return bytea object with raster in Well-Known-Binary form. */ PG_FUNCTION_INFO_V1(RASTER_to_bytea); Datum RASTER_to_bytea(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; uint8_t *wkb = NULL; uint32_t wkb_size = 0; bytea *result = NULL; int result_size = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Get raster object */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_to_bytea: Could not deserialize raster"); PG_RETURN_NULL(); } /* Parse raster to wkb object */ wkb = rt_raster_to_wkb(raster, FALSE, &wkb_size); if (!wkb) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_to_bytea: Could not allocate and generate WKB data"); PG_RETURN_NULL(); } /* Create varlena object */ result_size = wkb_size + VARHDRSZ; result = (bytea *)palloc(result_size); SET_VARSIZE(result, result_size); memcpy(VARDATA(result), wkb, VARSIZE(result) - VARHDRSZ); /* Free raster objects used */ rt_raster_destroy(raster); pfree(wkb); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_POINTER(result); } /** * Return bytea object with raster in Well-Known-Binary form requested using ST_AsBinary function. */ PG_FUNCTION_INFO_V1(RASTER_to_binary); Datum RASTER_to_binary(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; uint8_t *wkb = NULL; uint32_t wkb_size = 0; char *result = NULL; int result_size = 0; int outasin = FALSE; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Get raster object */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_to_binary: Could not deserialize raster"); PG_RETURN_NULL(); } if (!PG_ARGISNULL(1)) outasin = PG_GETARG_BOOL(1); /* Parse raster to wkb object */ wkb = rt_raster_to_wkb(raster, outasin, &wkb_size); if (!wkb) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_to_binary: Could not allocate and generate WKB data"); PG_RETURN_NULL(); } /* Create varlena object */ result_size = wkb_size + VARHDRSZ; result = (char *)palloc(result_size); SET_VARSIZE(result, result_size); memcpy(VARDATA(result), wkb, VARSIZE(result) - VARHDRSZ); /* Free raster objects used */ rt_raster_destroy(raster); pfree(wkb); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_POINTER(result); } /** * Return the convex hull of this raster */ PG_FUNCTION_INFO_V1(RASTER_convex_hull); Datum RASTER_convex_hull(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; LWGEOM *geom = NULL; GSERIALIZED* gser = NULL; size_t gser_size; int err = ES_NONE; bool minhull = FALSE; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* # of args */ if (PG_NARGS() > 1) minhull = TRUE; if (!minhull) { pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); } else { pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); } if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_convex_hull: Could not deserialize raster"); PG_RETURN_NULL(); } if (!minhull) err = rt_raster_get_convex_hull(raster, &geom); else { int nband = -1; /* get arg 1 */ if (!PG_ARGISNULL(1)) { nband = PG_GETARG_INT32(1); if (!rt_raster_has_band(raster, nband - 1)) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } nband = nband - 1; } err = rt_raster_get_perimeter(raster, nband, &geom); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (err != ES_NONE) { elog(ERROR, "RASTER_convex_hull: Could not get raster's convex hull"); PG_RETURN_NULL(); } else if (geom == NULL) { elog(NOTICE, "Raster's convex hull is NULL"); PG_RETURN_NULL(); } gser = gserialized_from_lwgeom(geom, 0, &gser_size); lwgeom_free(geom); SET_VARSIZE(gser, gser_size); PG_RETURN_POINTER(gser); } PG_FUNCTION_INFO_V1(RASTER_dumpAsPolygons); Datum RASTER_dumpAsPolygons(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; rt_geomval geomval; rt_geomval geomval2; int call_cntr; int max_calls; /* stuff done only on the first call of the function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; int numbands; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; int nband; bool exclude_nodata_value = TRUE; int nElements; POSTGIS_RT_DEBUG(2, "RASTER_dumpAsPolygons first call"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* Get input arguments */ if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); ereport(ERROR, ( errcode(ERRCODE_OUT_OF_MEMORY), errmsg("Could not deserialize raster") )); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } if (!PG_ARGISNULL(1)) nband = PG_GETARG_UINT32(1); else nband = 1; /* By default, first band */ POSTGIS_RT_DEBUGF(3, "band %d", nband); numbands = rt_raster_get_num_bands(raster); if (nband < 1 || nband > numbands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } if (!PG_ARGISNULL(2)) exclude_nodata_value = PG_GETARG_BOOL(2); /* see if band is NODATA */ if (rt_band_get_isnodata_flag(rt_raster_get_band(raster, nband - 1))) { POSTGIS_RT_DEBUGF(3, "Band at index %d is NODATA. Returning NULL", nband); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* Polygonize raster */ /** * Dump raster */ geomval = rt_raster_gdal_polygonize(raster, nband - 1, exclude_nodata_value, &nElements); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (NULL == geomval) { ereport(ERROR, ( errcode(ERRCODE_NO_DATA_FOUND), errmsg("Could not polygonize raster") )); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "raster dump, %d elements returned", nElements); /* Store needed information */ funcctx->user_fctx = geomval; /* total number of tuples to be returned */ funcctx->max_calls = nElements; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function returning record called in context that cannot accept type record") )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; geomval2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 2; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; GSERIALIZED *gser = NULL; size_t gser_size = 0; POSTGIS_RT_DEBUGF(3, "call number %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); /* convert LWGEOM to GSERIALIZED */ gser = gserialized_from_lwgeom(lwpoly_as_lwgeom(geomval2[call_cntr].geom), 0, &gser_size); lwgeom_free(lwpoly_as_lwgeom(geomval2[call_cntr].geom)); values[0] = PointerGetDatum(gser); values[1] = Float8GetDatum(geomval2[call_cntr].val); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(geomval2); SRF_RETURN_DONE(funcctx); } } /** * Make a new raster with no bands */ PG_FUNCTION_INFO_V1(RASTER_makeEmpty); Datum RASTER_makeEmpty(PG_FUNCTION_ARGS) { uint16 width = 0, height = 0; double ipx = 0, ipy = 0, scalex = 0, scaley = 0, skewx = 0, skewy = 0; int32_t srid = SRID_UNKNOWN; rt_pgraster *pgraster = NULL; rt_raster raster; if (PG_NARGS() < 9) { elog(ERROR, "RASTER_makeEmpty: ST_MakeEmptyRaster requires 9 args"); PG_RETURN_NULL(); } if (!PG_ARGISNULL(0)) width = PG_GETARG_UINT16(0); if (!PG_ARGISNULL(1)) height = PG_GETARG_UINT16(1); if (!PG_ARGISNULL(2)) ipx = PG_GETARG_FLOAT8(2); if (!PG_ARGISNULL(3)) ipy = PG_GETARG_FLOAT8(3); if (!PG_ARGISNULL(4)) scalex = PG_GETARG_FLOAT8(4); if (!PG_ARGISNULL(5)) scaley = PG_GETARG_FLOAT8(5); if (!PG_ARGISNULL(6)) skewx = PG_GETARG_FLOAT8(6); if (!PG_ARGISNULL(7)) skewy = PG_GETARG_FLOAT8(7); if (!PG_ARGISNULL(8)) srid = PG_GETARG_INT32(8); POSTGIS_RT_DEBUGF(4, "%dx%d, ip:%g,%g, scale:%g,%g, skew:%g,%g srid:%d", width, height, ipx, ipy, scalex, scaley, skewx, skewy, srid); raster = rt_raster_new(width, height); if (raster == NULL) PG_RETURN_NULL(); /* error was supposedly printed already */ rt_raster_set_scale(raster, scalex, scaley); rt_raster_set_offsets(raster, ipx, ipy); rt_raster_set_skews(raster, skewx, skewy); rt_raster_set_srid(raster, srid); pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } /** * Return the SRID associated with the raster. */ PG_FUNCTION_INFO_V1(RASTER_getSRID); Datum RASTER_getSRID(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; int32_t srid; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getSRID: Could not deserialize raster"); PG_RETURN_NULL(); } srid = rt_raster_get_srid(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_INT32(srid); } /** * Set the SRID associated with the raster. */ PG_FUNCTION_INFO_V1(RASTER_setSRID); Datum RASTER_setSRID(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; int32_t newSRID = PG_GETARG_INT32(1); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setSRID: Could not deserialize raster"); PG_RETURN_NULL(); } rt_raster_set_srid(raster, newSRID); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Return the width of the raster. */ PG_FUNCTION_INFO_V1(RASTER_getWidth); Datum RASTER_getWidth(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; uint16_t width; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getWidth: Could not deserialize raster"); PG_RETURN_NULL(); } width = rt_raster_get_width(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_INT32(width); } /** * Return the height of the raster. */ PG_FUNCTION_INFO_V1(RASTER_getHeight); Datum RASTER_getHeight(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; uint16_t height; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getHeight: Could not deserialize raster"); PG_RETURN_NULL(); } height = rt_raster_get_height(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_INT32(height); } /** * Return the number of bands included in the raster. */ PG_FUNCTION_INFO_V1(RASTER_getNumBands); Datum RASTER_getNumBands(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; int32_t num_bands; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getNumBands: Could not deserialize raster"); PG_RETURN_NULL(); } num_bands = rt_raster_get_num_bands(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_INT32(num_bands); } /** * Return X scale from georeference of the raster. */ PG_FUNCTION_INFO_V1(RASTER_getXScale); Datum RASTER_getXScale(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double xsize; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getXScale: Could not deserialize raster"); PG_RETURN_NULL(); } xsize = rt_raster_get_x_scale(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(xsize); } /** * Return Y scale from georeference of the raster. */ PG_FUNCTION_INFO_V1(RASTER_getYScale); Datum RASTER_getYScale(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double ysize; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getYScale: Could not deserialize raster"); PG_RETURN_NULL(); } ysize = rt_raster_get_y_scale(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(ysize); } /** * Set the scale of the raster. */ PG_FUNCTION_INFO_V1(RASTER_setScale); Datum RASTER_setScale(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; double size = PG_GETARG_FLOAT8(1); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setScale: Could not deserialize raster"); PG_RETURN_NULL(); } rt_raster_set_scale(raster, size, size); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Set the pixel size of the raster. */ PG_FUNCTION_INFO_V1(RASTER_setScaleXY); Datum RASTER_setScaleXY(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; double xscale = PG_GETARG_FLOAT8(1); double yscale = PG_GETARG_FLOAT8(2); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setScaleXY: Could not deserialize raster"); PG_RETURN_NULL(); } rt_raster_set_scale(raster, xscale, yscale); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Return value of the raster skew about the X axis. */ PG_FUNCTION_INFO_V1(RASTER_getXSkew); Datum RASTER_getXSkew(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double xskew; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getXSkew: Could not deserialize raster"); PG_RETURN_NULL(); } xskew = rt_raster_get_x_skew(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(xskew); } /** * Return value of the raster skew about the Y axis. */ PG_FUNCTION_INFO_V1(RASTER_getYSkew); Datum RASTER_getYSkew(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double yskew; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getYSkew: Could not deserialize raster"); PG_RETURN_NULL(); } yskew = rt_raster_get_y_skew(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(yskew); } /** * Set the skew of the raster. */ PG_FUNCTION_INFO_V1(RASTER_setSkew); Datum RASTER_setSkew(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; double skew = PG_GETARG_FLOAT8(1); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setSkew: Could not deserialize raster"); PG_RETURN_NULL(); } rt_raster_set_skews(raster, skew, skew); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Set the skew of the raster. */ PG_FUNCTION_INFO_V1(RASTER_setSkewXY); Datum RASTER_setSkewXY(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; double xskew = PG_GETARG_FLOAT8(1); double yskew = PG_GETARG_FLOAT8(2); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setSkewXY: Could not deserialize raster"); PG_RETURN_NULL(); } rt_raster_set_skews(raster, xskew, yskew); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Return value of the raster offset in the X dimension. */ PG_FUNCTION_INFO_V1(RASTER_getXUpperLeft); Datum RASTER_getXUpperLeft(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double xul; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getXUpperLeft: Could not deserialize raster"); PG_RETURN_NULL(); } xul = rt_raster_get_x_offset(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(xul); } /** * Return value of the raster offset in the Y dimension. */ PG_FUNCTION_INFO_V1(RASTER_getYUpperLeft); Datum RASTER_getYUpperLeft(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double yul; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getYUpperLeft: Could not deserialize raster"); PG_RETURN_NULL(); } yul = rt_raster_get_y_offset(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(yul); } /** * Set the raster offset in the X and Y dimension. */ PG_FUNCTION_INFO_V1(RASTER_setUpperLeftXY); Datum RASTER_setUpperLeftXY(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; double xoffset = PG_GETARG_FLOAT8(1); double yoffset = PG_GETARG_FLOAT8(2); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setUpperLeftXY: Could not deserialize raster"); PG_RETURN_NULL(); } rt_raster_set_offsets(raster, xoffset, yoffset); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Return the pixel width of the raster. The pixel width is * a read-only, dynamically computed value derived from the * X Scale and the Y Skew. * * Pixel Width = sqrt( X Scale * X Scale + Y Skew * Y Skew ) */ PG_FUNCTION_INFO_V1(RASTER_getPixelWidth); Datum RASTER_getPixelWidth(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double xscale; double yskew; double pwidth; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getPixelWidth: Could not deserialize raster"); PG_RETURN_NULL(); } xscale = rt_raster_get_x_scale(raster); yskew = rt_raster_get_y_skew(raster); pwidth = sqrt(xscale*xscale + yskew*yskew); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(pwidth); } /** * Return the pixel height of the raster. The pixel height is * a read-only, dynamically computed value derived from the * Y Scale and the X Skew. * * Pixel Height = sqrt( Y Scale * Y Scale + X Skew * X Skew ) */ PG_FUNCTION_INFO_V1(RASTER_getPixelHeight); Datum RASTER_getPixelHeight(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_raster raster; double yscale; double xskew; double pheight; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getPixelHeight: Could not deserialize raster"); PG_RETURN_NULL(); } yscale = rt_raster_get_y_scale(raster); xskew = rt_raster_get_x_skew(raster); pheight = sqrt(yscale*yscale + xskew*xskew); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(pheight); } /** * Set the geotransform of the supplied raster. Returns the raster. */ PG_FUNCTION_INFO_V1(RASTER_setGeotransform); Datum RASTER_setGeotransform(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; float8 imag, jmag, theta_i, theta_ij, xoffset, yoffset; if ( PG_ARGISNULL(0) || PG_ARGISNULL(1) || PG_ARGISNULL(2) || PG_ARGISNULL(3) || PG_ARGISNULL(4) || PG_ARGISNULL(5) || PG_ARGISNULL(6) ) { PG_RETURN_NULL(); } /* get the inputs */ pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); imag = PG_GETARG_FLOAT8(1); jmag = PG_GETARG_FLOAT8(2); theta_i = PG_GETARG_FLOAT8(3); theta_ij = PG_GETARG_FLOAT8(4); xoffset = PG_GETARG_FLOAT8(5); yoffset = PG_GETARG_FLOAT8(6); raster = rt_raster_deserialize(pgraster, TRUE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setGeotransform: Could not deserialize raster"); PG_RETURN_NULL(); } /* store the new geotransform */ rt_raster_set_phys_params(raster, imag,jmag,theta_i,theta_ij); rt_raster_set_offsets(raster, xoffset, yoffset); /* prep the return value */ pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Calculates the physically relevant parameters of the supplied raster's * geotransform. Returns them as a set. */ PG_FUNCTION_INFO_V1(RASTER_getGeotransform); Datum RASTER_getGeotransform(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; double imag; double jmag; double theta_i; double theta_ij; /* double xoffset; double yoffset; */ TupleDesc result_tuple; /* for returning a composite */ int values_length = 6; Datum values[values_length]; bool nulls[values_length]; HeapTuple heap_tuple ; /* instance of the tuple to return */ Datum result; POSTGIS_RT_DEBUG(3, "RASTER_getGeotransform: Starting"); /* get argument */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); /* raster */ raster = rt_raster_deserialize(pgraster, TRUE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getGeotransform: Could not deserialize raster"); PG_RETURN_NULL(); } /* do the calculation */ rt_raster_calc_phys_params( rt_raster_get_x_scale(raster), rt_raster_get_x_skew(raster), rt_raster_get_y_skew(raster), rt_raster_get_y_scale(raster), &imag, &jmag, &theta_i, &theta_ij) ; rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* setup the return value infrastructure */ if (get_call_result_type(fcinfo, NULL, &result_tuple) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("RASTER_getGeotransform(): function returning record called in context that cannot accept type record" ) )); PG_RETURN_NULL(); } BlessTupleDesc(result_tuple); /* get argument */ /* prep the composite return value */ /* construct datum array */ values[0] = Float8GetDatum(imag); values[1] = Float8GetDatum(jmag); values[2] = Float8GetDatum(theta_i); values[3] = Float8GetDatum(theta_ij); values[4] = Float8GetDatum(rt_raster_get_x_offset(raster)); values[5] = Float8GetDatum(rt_raster_get_y_offset(raster)); memset(nulls, FALSE, sizeof(bool) * values_length); /* stick em on the heap */ heap_tuple = heap_form_tuple(result_tuple, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(heap_tuple); PG_RETURN_DATUM(result); } /** * Set the rotation of the raster. This method will change the X Scale, * Y Scale, X Skew and Y Skew properties all at once to keep the rotations * about the X and Y axis uniform. * * This method will set the rotation about the X axis and Y axis based on * the pixel size. This pixel size may not be uniform if rasters have different * skew values (the raster cells are diamond-shaped). If a raster has different * skew values has a rotation set upon it, this method will remove the * diamond distortions of the cells, as each axis will have the same rotation. */ PG_FUNCTION_INFO_V1(RASTER_setRotation); Datum RASTER_setRotation(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster; double rotation = PG_GETARG_FLOAT8(1); double imag, jmag, theta_i, theta_ij; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setRotation: Could not deserialize raster"); PG_RETURN_NULL(); } /* preserve all defining characteristics of the grid except for rotation */ rt_raster_get_phys_params(raster, &imag, &jmag, &theta_i, &theta_ij); rt_raster_set_phys_params(raster, imag, jmag, rotation, theta_ij); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Return pixel type of the specified band of raster. * Band index is 1-based. */ PG_FUNCTION_INFO_V1(RASTER_getBandPixelType); Datum RASTER_getBandPixelType(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; rt_pixtype pixtype; int32_t bandindex; /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Index is 1-based */ bandindex = PG_GETARG_INT32(1); if ( bandindex < 1 ) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } raster = rt_raster_deserialize(pgraster, FALSE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getBandPixelType: Could not deserialize raster"); PG_RETURN_NULL(); } /* Fetch requested band and its pixel type */ band = rt_raster_get_band(raster, bandindex - 1); if ( ! band ) { elog(NOTICE, "Could not find raster band of index %d when getting pixel type. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } pixtype = rt_band_get_pixtype(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_INT32(pixtype); } /** * Return name of pixel type of the specified band of raster. * Band index is 1-based. * NOTE: This is unofficial utility not included in the spec. */ PG_FUNCTION_INFO_V1(RASTER_getBandPixelTypeName); Datum RASTER_getBandPixelTypeName(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; rt_pixtype pixtype; int32_t bandindex; const size_t name_size = 8; /* size of type name */ size_t size = 0; char *ptr = NULL; text *result = NULL; /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Index is 1-based */ bandindex = PG_GETARG_INT32(1); if ( bandindex < 1 ) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } raster = rt_raster_deserialize(pgraster, FALSE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getBandPixelTypeName: Could not deserialize raster"); PG_RETURN_NULL(); } /* Fetch requested band and its pixel type */ band = rt_raster_get_band(raster, bandindex - 1); if ( ! band ) { elog(NOTICE, "Could not find raster band of index %d when getting pixel type name. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } pixtype = rt_band_get_pixtype(band); result = palloc(VARHDRSZ + name_size); /* We don't need to check for NULL pointer, because if out of memory, palloc * exit via elog(ERROR). It never returns NULL. */ memset(VARDATA(result), 0, name_size); ptr = (char *)result + VARHDRSZ; strcpy(ptr, rt_pixtype_name(pixtype)); size = VARHDRSZ + strlen(ptr); SET_VARSIZE(result, size); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_TEXT_P(result); } /** * Return nodata value of the specified band of raster. * The value is always returned as FLOAT32 even if the pixel type is INTEGER. */ PG_FUNCTION_INFO_V1(RASTER_getBandNoDataValue); Datum RASTER_getBandNoDataValue(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex; double nodata; /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Index is 1-based */ bandindex = PG_GETARG_INT32(1); if ( bandindex < 1 ) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } raster = rt_raster_deserialize(pgraster, FALSE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getBandNoDataValue: Could not deserialize raster"); PG_RETURN_NULL(); } /* Fetch requested band and its nodata value */ band = rt_raster_get_band(raster, bandindex - 1); if ( ! band ) { elog(NOTICE, "Could not find raster band of index %d when getting band nodata value. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } if ( ! rt_band_get_hasnodata_flag(band) ) { /* Raster does not have a nodata value set so we return NULL */ rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } rt_band_get_nodata(band, &nodata); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(nodata); } /** * Set the nodata value of the specified band of raster. */ PG_FUNCTION_INFO_V1(RASTER_setBandNoDataValue); Datum RASTER_setBandNoDataValue(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_band band = NULL; double nodata; int32_t bandindex; bool forcechecking = FALSE; bool skipset = FALSE; /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Check index is not NULL or smaller than 1 */ if (PG_ARGISNULL(1)) bandindex = -1; else bandindex = PG_GETARG_INT32(1); if (bandindex < 1) { elog(NOTICE, "Invalid band index (must use 1-based). Nodata value not set. Returning original raster"); skipset = TRUE; } raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setBandNoDataValue: Could not deserialize raster"); PG_RETURN_NULL(); } if (!skipset) { /* Fetch requested band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find raster band of index %d when setting pixel value. Nodata value not set. Returning original raster", bandindex); } else { if (!PG_ARGISNULL(3)) forcechecking = PG_GETARG_BOOL(3); if (PG_ARGISNULL(2)) { /* Set the hasnodata flag to FALSE */ rt_band_set_hasnodata_flag(band, FALSE); POSTGIS_RT_DEBUGF(3, "Raster band %d does not have a nodata value", bandindex); } else { /* Get the nodata value */ nodata = PG_GETARG_FLOAT8(2); /* Set the band's nodata value */ rt_band_set_nodata(band, nodata, NULL); /* Recheck all pixels if requested */ if (forcechecking) rt_band_check_is_nodata(band); } } } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } PG_FUNCTION_INFO_V1(RASTER_setBandIsNoData); Datum RASTER_setBandIsNoData(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setBandIsNoData: Could not deserialize raster"); PG_RETURN_NULL(); } /* Check index is not NULL or smaller than 1 */ if (PG_ARGISNULL(1)) bandindex = -1; else bandindex = PG_GETARG_INT32(1); if (bandindex < 1) elog(NOTICE, "Invalid band index (must use 1-based). Isnodata flag not set. Returning original raster"); else { /* Fetch requested band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) elog(NOTICE, "Could not find raster band of index %d. Isnodata flag not set. Returning original raster", bandindex); else { if (!rt_band_get_hasnodata_flag(band)) { elog(NOTICE, "Band of index %d has no NODATA so cannot be NODATA. Returning original raster", bandindex); } /* Set the band's nodata value */ else { rt_band_set_isnodata_flag(band, 1); } } } /* Serialize raster again */ pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } PG_FUNCTION_INFO_V1(RASTER_bandIsNoData); Datum RASTER_bandIsNoData(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex; bool forcechecking = FALSE; bool bandisnodata = FALSE; /* Index is 1-based */ bandindex = PG_GETARG_INT32(1); if ( bandindex < 1 ) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); PG_RETURN_NULL(); } /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_bandIsNoData: Could not deserialize raster"); PG_RETURN_NULL(); } /* Fetch requested band and its nodata value */ band = rt_raster_get_band(raster, bandindex - 1); if ( ! band ) { elog(NOTICE, "Could not find raster band of index %d when determining if band is nodata. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } forcechecking = PG_GETARG_BOOL(2); bandisnodata = (forcechecking) ? rt_band_check_is_nodata(band) : rt_band_get_isnodata_flag(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_BOOL(bandisnodata); } /** * Return the path of the raster for out-db raster. */ PG_FUNCTION_INFO_V1(RASTER_getBandPath); Datum RASTER_getBandPath(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex; const char *bandpath; text *result; /* Index is 1-based */ bandindex = PG_GETARG_INT32(1); if ( bandindex < 1 ) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); PG_RETURN_NULL(); } /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if ( ! raster ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getBandPath: Could not deserialize raster"); PG_RETURN_NULL(); } /* Fetch requested band and its nodata value */ band = rt_raster_get_band(raster, bandindex - 1); if ( ! band ) { elog(NOTICE, "Could not find raster band of index %d when getting band path. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } bandpath = rt_band_get_ext_path(band); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if ( ! bandpath ) { PG_RETURN_NULL(); } result = (text *) palloc(VARHDRSZ + strlen(bandpath) + 1); SET_VARSIZE(result, VARHDRSZ + strlen(bandpath) + 1); strcpy((char *) VARDATA(result), bandpath); PG_RETURN_TEXT_P(result); } /** * Return value of a single pixel. * Pixel location is specified by 1-based index of Nth band of raster and * X,Y coordinates (X <= RT_Width(raster) and Y <= RT_Height(raster)). * * TODO: Should we return NUMERIC instead of FLOAT8 ? */ PG_FUNCTION_INFO_V1(RASTER_getPixelValue); Datum RASTER_getPixelValue(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; double pixvalue = 0; int32_t bandindex = 0; int32_t x = 0; int32_t y = 0; int result = 0; bool exclude_nodata_value = TRUE; int isnodata = 0; /* Index is 1-based */ bandindex = PG_GETARG_INT32(1); if ( bandindex < 1 ) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); PG_RETURN_NULL(); } x = PG_GETARG_INT32(2); y = PG_GETARG_INT32(3); exclude_nodata_value = PG_GETARG_BOOL(4); POSTGIS_RT_DEBUGF(3, "Pixel coordinates (%d, %d)", x, y); /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getPixelValue: Could not deserialize raster"); PG_RETURN_NULL(); } /* Fetch Nth band using 0-based internal index */ band = rt_raster_get_band(raster, bandindex - 1); if (! band) { elog(NOTICE, "Could not find raster band of index %d when getting pixel " "value. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* Fetch pixel using 0-based coordinates */ result = rt_band_get_pixel(band, x - 1, y - 1, &pixvalue, &isnodata); /* If the result is -1 or the value is nodata and we take nodata into account * then return nodata = NULL */ if (result != ES_NONE || (exclude_nodata_value && isnodata)) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_FLOAT8(pixvalue); } /* ---------------------------------------------------------------- */ /* ST_DumpValues function */ /* ---------------------------------------------------------------- */ typedef struct rtpg_dumpvalues_arg_t *rtpg_dumpvalues_arg; struct rtpg_dumpvalues_arg_t { int numbands; int rows; int columns; int *nbands; /* 0-based */ Datum **values; bool **nodata; }; static rtpg_dumpvalues_arg rtpg_dumpvalues_arg_init() { rtpg_dumpvalues_arg arg = NULL; arg = palloc(sizeof(struct rtpg_dumpvalues_arg_t)); if (arg == NULL) { elog(ERROR, "rtpg_dumpvalues_arg_init: Could not allocate memory for arguments"); return NULL; } arg->numbands = 0; arg->rows = 0; arg->columns = 0; arg->nbands = NULL; arg->values = NULL; arg->nodata = NULL; return arg; } static void rtpg_dumpvalues_arg_destroy(rtpg_dumpvalues_arg arg) { int i = 0; if (arg->numbands) { if (arg->nbands != NULL) pfree(arg->nbands); for (i = 0; i < arg->numbands; i++) { if (arg->values[i] != NULL) pfree(arg->values[i]); if (arg->nodata[i] != NULL) pfree(arg->nodata[i]); } if (arg->values != NULL) pfree(arg->values); if (arg->nodata != NULL) pfree(arg->nodata); } pfree(arg); } PG_FUNCTION_INFO_V1(RASTER_dumpValues); Datum RASTER_dumpValues(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int call_cntr; int max_calls; int i = 0; int x = 0; int y = 0; int z = 0; int16 typlen; bool typbyval; char typalign; rtpg_dumpvalues_arg arg1 = NULL; rtpg_dumpvalues_arg arg2 = NULL; /* stuff done only on the first call of the function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int numbands = 0; int j = 0; bool exclude_nodata_value = TRUE; ArrayType *array; Oid etype; Datum *e; bool *nulls; double val = 0; int isnodata = 0; POSTGIS_RT_DEBUG(2, "RASTER_dumpValues first call"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* Get input arguments */ if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); ereport(ERROR, ( errcode(ERRCODE_OUT_OF_MEMORY), errmsg("Could not deserialize raster") )); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* check that raster is not empty */ /* if (rt_raster_is_empty(raster)) { elog(NOTICE, "Raster provided is empty"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } */ /* raster has bands */ numbands = rt_raster_get_num_bands(raster); if (!numbands) { elog(NOTICE, "Raster provided has no bands"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* initialize arg1 */ arg1 = rtpg_dumpvalues_arg_init(); if (arg1 == NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not initialize argument structure"); SRF_RETURN_DONE(funcctx); } /* nband, array */ if (!PG_ARGISNULL(1)) { array = PG_GETARG_ARRAYTYPE_P(1); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case INT2OID: case INT4OID: break; default: rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Invalid data type for band indexes"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &(arg1->numbands)); arg1->nbands = palloc(sizeof(int) * arg1->numbands); if (arg1->nbands == NULL) { rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not allocate memory for band indexes"); SRF_RETURN_DONE(funcctx); } for (i = 0, j = 0; i < arg1->numbands; i++) { if (nulls[i]) continue; switch (etype) { case INT2OID: arg1->nbands[j] = DatumGetInt16(e[i]) - 1; break; case INT4OID: arg1->nbands[j] = DatumGetInt32(e[i]) - 1; break; } j++; } if (j < arg1->numbands) { arg1->nbands = repalloc(arg1->nbands, sizeof(int) * j); if (arg1->nbands == NULL) { rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not reallocate memory for band indexes"); SRF_RETURN_DONE(funcctx); } arg1->numbands = j; } /* validate nbands */ for (i = 0; i < arg1->numbands; i++) { if (!rt_raster_has_band(raster, arg1->nbands[i])) { elog(NOTICE, "Band at index %d not found in raster", arg1->nbands[i] + 1); rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } } } else { arg1->numbands = numbands; arg1->nbands = palloc(sizeof(int) * arg1->numbands); if (arg1->nbands == NULL) { rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not allocate memory for band indexes"); SRF_RETURN_DONE(funcctx); } for (i = 0; i < arg1->numbands; i++) { arg1->nbands[i] = i; POSTGIS_RT_DEBUGF(4, "arg1->nbands[%d] = %d", arg1->nbands[i], i); } } arg1->rows = rt_raster_get_height(raster); arg1->columns = rt_raster_get_width(raster); /* exclude_nodata_value */ if (!PG_ARGISNULL(2)) exclude_nodata_value = PG_GETARG_BOOL(2); POSTGIS_RT_DEBUGF(4, "exclude_nodata_value = %d", exclude_nodata_value); /* allocate memory for each band's values and nodata flags */ arg1->values = palloc(sizeof(Datum *) * arg1->numbands); arg1->nodata = palloc(sizeof(bool *) * arg1->numbands); if (arg1->values == NULL || arg1->nodata == NULL) { rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not allocate memory for pixel values"); SRF_RETURN_DONE(funcctx); } memset(arg1->values, 0, sizeof(Datum *) * arg1->numbands); memset(arg1->nodata, 0, sizeof(bool *) * arg1->numbands); /* get each band and dump data */ for (z = 0; z < arg1->numbands; z++) { /* shortcut if raster is empty */ if (rt_raster_is_empty(raster)) break; band = rt_raster_get_band(raster, arg1->nbands[z]); if (!band) { int nband = arg1->nbands[z] + 1; rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not get band at index %d", nband); SRF_RETURN_DONE(funcctx); } /* allocate memory for values and nodata flags */ arg1->values[z] = palloc(sizeof(Datum) * arg1->rows * arg1->columns); arg1->nodata[z] = palloc(sizeof(bool) * arg1->rows * arg1->columns); if (arg1->values[z] == NULL || arg1->nodata[z] == NULL) { rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not allocate memory for pixel values"); SRF_RETURN_DONE(funcctx); } memset(arg1->values[z], 0, sizeof(Datum) * arg1->rows * arg1->columns); memset(arg1->nodata[z], 0, sizeof(bool) * arg1->rows * arg1->columns); i = 0; /* shortcut if band is NODATA */ if (rt_band_get_isnodata_flag(band)) { for (i = (arg1->rows * arg1->columns) - 1; i >= 0; i--) arg1->nodata[z][i] = TRUE; continue; } for (y = 0; y < arg1->rows; y++) { for (x = 0; x < arg1->columns; x++) { /* get pixel */ if (rt_band_get_pixel(band, x, y, &val, &isnodata) != ES_NONE) { int nband = arg1->nbands[z] + 1; rtpg_dumpvalues_arg_destroy(arg1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not pixel (%d, %d) of band %d", x, y, nband); SRF_RETURN_DONE(funcctx); } arg1->values[z][i] = Float8GetDatum(val); POSTGIS_RT_DEBUGF(5, "arg1->values[z][i] = %f", DatumGetFloat8(arg1->values[z][i])); POSTGIS_RT_DEBUGF(5, "clamped is?: %d", rt_band_clamped_value_is_nodata(band, val)); if (exclude_nodata_value && isnodata) { arg1->nodata[z][i] = TRUE; POSTGIS_RT_DEBUG(5, "nodata = 1"); } else POSTGIS_RT_DEBUG(5, "nodata = 0"); i++; } } } /* cleanup */ rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Store needed information */ funcctx->user_fctx = arg1; /* total number of tuples to be returned */ funcctx->max_calls = arg1->numbands; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { MemoryContextSwitchTo(oldcontext); ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; arg2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 2; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; ArrayType *mdValues = NULL; int ndim = 2; int dim[2] = {arg2->rows, arg2->columns}; int lbound[2] = {1, 1}; POSTGIS_RT_DEBUGF(3, "call number %d", call_cntr); POSTGIS_RT_DEBUGF(4, "dim = %d, %d", dim[0], dim[1]); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Int32GetDatum(arg2->nbands[call_cntr] + 1); /* info about the type of item in the multi-dimensional array (float8). */ get_typlenbyvalalign(FLOAT8OID, &typlen, &typbyval, &typalign); /* if values is NULL, return empty raster */ if (arg2->values[call_cntr] == NULL) ndim = 0; /* assemble 3-dimension array of values */ mdValues = construct_md_array( arg2->values[call_cntr], arg2->nodata[call_cntr], ndim, dim, lbound, FLOAT8OID, typlen, typbyval, typalign ); values[1] = PointerGetDatum(mdValues); /* build a tuple and datum */ tuple = heap_form_tuple(tupdesc, values, nulls); result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { rtpg_dumpvalues_arg_destroy(arg2); SRF_RETURN_DONE(funcctx); } } /** * Write value of raster sample on given position and in specified band. */ PG_FUNCTION_INFO_V1(RASTER_setPixelValue); Datum RASTER_setPixelValue(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_band band = NULL; double pixvalue = 0; int32_t bandindex = 0; int32_t x = 0; int32_t y = 0; bool skipset = FALSE; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* Check index is not NULL or < 1 */ if (PG_ARGISNULL(1)) bandindex = -1; else bandindex = PG_GETARG_INT32(1); if (bandindex < 1) { elog(NOTICE, "Invalid band index (must use 1-based). Value not set. Returning original raster"); skipset = TRUE; } /* Validate pixel coordinates are not null */ if (PG_ARGISNULL(2)) { elog(NOTICE, "X coordinate can not be NULL when setting pixel value. Value not set. Returning original raster"); skipset = TRUE; } else x = PG_GETARG_INT32(2); if (PG_ARGISNULL(3)) { elog(NOTICE, "Y coordinate can not be NULL when setting pixel value. Value not set. Returning original raster"); skipset = TRUE; } else y = PG_GETARG_INT32(3); POSTGIS_RT_DEBUGF(3, "Pixel coordinates (%d, %d)", x, y); /* Deserialize raster */ pgraster = (rt_pgraster *) PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValue: Could not deserialize raster"); PG_RETURN_NULL(); } if (!skipset) { /* Fetch requested band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find raster band of index %d when setting " "pixel value. Value not set. Returning original raster", bandindex); PG_RETURN_POINTER(pgraster); } else { /* Set the pixel value */ if (PG_ARGISNULL(4)) { if (!rt_band_get_hasnodata_flag(band)) { elog(NOTICE, "Raster do not have a nodata value defined. " "Set band nodata value first. Nodata value not set. " "Returning original raster"); PG_RETURN_POINTER(pgraster); } else { rt_band_get_nodata(band, &pixvalue); rt_band_set_pixel(band, x - 1, y - 1, pixvalue, NULL); } } else { pixvalue = PG_GETARG_FLOAT8(4); rt_band_set_pixel(band, x - 1, y - 1, pixvalue, NULL); } } } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Set pixels to value from array */ PG_FUNCTION_INFO_V1(RASTER_setPixelValuesArray); Datum RASTER_setPixelValuesArray(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_band band = NULL; int numbands = 0; int nband = 0; int width = 0; int height = 0; ArrayType *array; Oid etype; Datum *elements; bool *nulls; int16 typlen; bool typbyval; char typalign; int ndims = 1; int *dims; int num = 0; int ul[2] = {0}; struct pixelvalue { int x; int y; bool noset; bool nodata; double value; }; struct pixelvalue *pixval = NULL; int numpixval = 0; int dimpixval[2] = {1, 1}; int dimnoset[2] = {1, 1}; int hasnodata = FALSE; double nodataval = 0; bool keepnodata = FALSE; bool hasnosetval = FALSE; bool nosetvalisnull = FALSE; double nosetval = 0; int rtn = 0; double val = 0; int isnodata = 0; int i = 0; int j = 0; int x = 0; int y = 0; /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesArray: Could not deserialize raster"); PG_RETURN_NULL(); } /* raster attributes */ numbands = rt_raster_get_num_bands(raster); width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); /* nband */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Band index cannot be NULL. Value must be 1-based. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } nband = PG_GETARG_INT32(1); if (nband < 1 || nband > numbands) { elog(NOTICE, "Band index is invalid. Value must be 1-based. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* x, y */ for (i = 2, j = 0; i < 4; i++, j++) { if (PG_ARGISNULL(i)) { elog(NOTICE, "%s cannot be NULL. Value must be 1-based. Returning original raster", j < 1 ? "X" : "Y"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } ul[j] = PG_GETARG_INT32(i); if ( (ul[j] < 1) || ( (j < 1 && ul[j] > width) || (j > 0 && ul[j] > height) ) ) { elog(NOTICE, "%s is invalid. Value must be 1-based. Returning original raster", j < 1 ? "X" : "Y"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* force 0-based from 1-based */ ul[j] -= 1; } /* new value set */ if (PG_ARGISNULL(4)) { elog(NOTICE, "No values to set. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } array = PG_GETARG_ARRAYTYPE_P(4); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesArray: Invalid data type for new values"); PG_RETURN_NULL(); break; } ndims = ARR_NDIM(array); dims = ARR_DIMS(array); POSTGIS_RT_DEBUGF(4, "ndims = %d", ndims); if (ndims < 1 || ndims > 2) { elog(NOTICE, "New values array must be of 1 or 2 dimensions. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* outer element, then inner element */ /* i = 0, y */ /* i = 1, x */ if (ndims != 2) dimpixval[1] = dims[0]; else { dimpixval[0] = dims[0]; dimpixval[1] = dims[1]; } POSTGIS_RT_DEBUGF(4, "dimpixval = (%d, %d)", dimpixval[0], dimpixval[1]); deconstruct_array( array, etype, typlen, typbyval, typalign, &elements, &nulls, &num ); /* # of elements doesn't match dims */ if (num < 1 || num != (dimpixval[0] * dimpixval[1])) { if (num) { pfree(elements); pfree(nulls); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesArray: Could not deconstruct new values array"); PG_RETURN_NULL(); } /* allocate memory for pixval */ numpixval = num; pixval = palloc(sizeof(struct pixelvalue) * numpixval); if (pixval == NULL) { pfree(elements); pfree(nulls); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesArray: Could not allocate memory for new pixel values"); PG_RETURN_NULL(); } /* load new values into pixval */ i = 0; for (y = 0; y < dimpixval[0]; y++) { for (x = 0; x < dimpixval[1]; x++) { /* 0-based */ pixval[i].x = ul[0] + x; pixval[i].y = ul[1] + y; pixval[i].noset = FALSE; pixval[i].nodata = FALSE; pixval[i].value = 0; if (nulls[i]) pixval[i].nodata = TRUE; else { switch (etype) { case FLOAT4OID: pixval[i].value = DatumGetFloat4(elements[i]); break; case FLOAT8OID: pixval[i].value = DatumGetFloat8(elements[i]); break; } } i++; } } pfree(elements); pfree(nulls); /* now load noset flags */ if (!PG_ARGISNULL(5)) { array = PG_GETARG_ARRAYTYPE_P(5); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case BOOLOID: break; default: pfree(pixval); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesArray: Invalid data type for noset flags"); PG_RETURN_NULL(); break; } ndims = ARR_NDIM(array); dims = ARR_DIMS(array); POSTGIS_RT_DEBUGF(4, "ndims = %d", ndims); if (ndims < 1 || ndims > 2) { elog(NOTICE, "Noset flags array must be of 1 or 2 dimensions. Returning original raster"); pfree(pixval); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* outer element, then inner element */ /* i = 0, y */ /* i = 1, x */ if (ndims != 2) dimnoset[1] = dims[0]; else { dimnoset[0] = dims[0]; dimnoset[1] = dims[1]; } POSTGIS_RT_DEBUGF(4, "dimnoset = (%d, %d)", dimnoset[0], dimnoset[1]); deconstruct_array( array, etype, typlen, typbyval, typalign, &elements, &nulls, &num ); /* # of elements doesn't match dims */ if (num < 1 || num != (dimnoset[0] * dimnoset[1])) { pfree(pixval); if (num) { pfree(elements); pfree(nulls); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesArray: Could not deconstruct noset flags array"); PG_RETURN_NULL(); } i = 0; j = 0; for (y = 0; y < dimnoset[0]; y++) { if (y >= dimpixval[0]) break; for (x = 0; x < dimnoset[1]; x++) { /* fast forward noset elements */ if (x >= dimpixval[1]) { i += (dimnoset[1] - dimpixval[1]); break; } if (!nulls[i] && DatumGetBool(elements[i])) pixval[j].noset = TRUE; i++; j++; } /* fast forward pixval */ if (x < dimpixval[1]) j += (dimpixval[1] - dimnoset[1]); } pfree(elements); pfree(nulls); } /* hasnosetvalue and nosetvalue */ else if (!PG_ARGISNULL(6) & PG_GETARG_BOOL(6)) { hasnosetval = TRUE; if (PG_ARGISNULL(7)) nosetvalisnull = TRUE; else nosetval = PG_GETARG_FLOAT8(7); } #if POSTGIS_DEBUG_LEVEL > 0 for (i = 0; i < numpixval; i++) { POSTGIS_RT_DEBUGF(4, "pixval[%d](x, y, noset, nodata, value) = (%d, %d, %d, %d, %f)", i, pixval[i].x, pixval[i].y, pixval[i].noset, pixval[i].nodata, pixval[i].value ); } #endif /* keepnodata flag */ if (!PG_ARGISNULL(8)) keepnodata = PG_GETARG_BOOL(8); /* get band */ band = rt_raster_get_band(raster, nband - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning original raster", nband); pfree(pixval); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* get band nodata info */ /* has NODATA, use NODATA */ hasnodata = rt_band_get_hasnodata_flag(band); if (hasnodata) rt_band_get_nodata(band, &nodataval); /* no NODATA, use min possible value */ else nodataval = rt_band_get_min_value(band); /* set pixels */ for (i = 0; i < numpixval; i++) { /* noset = true, skip */ if (pixval[i].noset) continue; /* check against nosetval */ else if (hasnosetval) { /* pixel = NULL AND nosetval = NULL */ if (pixval[i].nodata && nosetvalisnull) continue; /* pixel value = nosetval */ else if (!pixval[i].nodata && !nosetvalisnull && FLT_EQ(pixval[i].value, nosetval)) continue; } /* if pixel is outside bounds, skip */ if ( (pixval[i].x < 0 || pixval[i].x >= width) || (pixval[i].y < 0 || pixval[i].y >= height) ) { elog(NOTICE, "Cannot set value for pixel (%d, %d) outside raster bounds: %d x %d", pixval[i].x + 1, pixval[i].y + 1, width, height ); continue; } /* if hasnodata = TRUE and keepnodata = TRUE, inspect pixel value */ if (hasnodata && keepnodata) { rtn = rt_band_get_pixel(band, pixval[i].x, pixval[i].y, &val, &isnodata); if (rtn != ES_NONE) { pfree(pixval); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "Cannot get value of pixel"); PG_RETURN_NULL(); } /* pixel value = NODATA, skip */ if (isnodata) { continue; } } if (pixval[i].nodata) rt_band_set_pixel(band, pixval[i].x, pixval[i].y, nodataval, NULL); else rt_band_set_pixel(band, pixval[i].x, pixval[i].y, pixval[i].value, NULL); } pfree(pixval); /* serialize new raster */ pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* ---------------------------------------------------------------- */ /* ST_SetValues using geomval array */ /* ---------------------------------------------------------------- */ typedef struct rtpg_setvaluesgv_arg_t *rtpg_setvaluesgv_arg; typedef struct rtpg_setvaluesgv_geomval_t *rtpg_setvaluesgv_geomval; struct rtpg_setvaluesgv_arg_t { int ngv; rtpg_setvaluesgv_geomval gv; bool keepnodata; }; struct rtpg_setvaluesgv_geomval_t { struct { int nodata; double value; } pixval; LWGEOM *geom; rt_raster mask; }; static rtpg_setvaluesgv_arg rtpg_setvaluesgv_arg_init() { rtpg_setvaluesgv_arg arg = palloc(sizeof(struct rtpg_setvaluesgv_arg_t)); if (arg == NULL) { elog(ERROR, "rtpg_setvaluesgv_arg_init: Could not allocate memory for function arguments"); return NULL; } arg->ngv = 0; arg->gv = NULL; arg->keepnodata = 0; return arg; } static void rtpg_setvaluesgv_arg_destroy(rtpg_setvaluesgv_arg arg) { int i = 0; if (arg->gv != NULL) { for (i = 0; i < arg->ngv; i++) { if (arg->gv[i].geom != NULL) lwgeom_free(arg->gv[i].geom); if (arg->gv[i].mask != NULL) rt_raster_destroy(arg->gv[i].mask); } pfree(arg->gv); } pfree(arg); } static int rtpg_setvalues_geomval_callback( rt_iterator_arg arg, void *userarg, double *value, int *nodata ) { rtpg_setvaluesgv_arg funcarg = (rtpg_setvaluesgv_arg) userarg; int i = 0; int j = 0; *value = 0; *nodata = 0; POSTGIS_RT_DEBUGF(4, "keepnodata = %d", funcarg->keepnodata); /* keepnodata = TRUE */ if (funcarg->keepnodata && arg->nodata[0][0][0]) { POSTGIS_RT_DEBUG(3, "keepnodata = 1 AND source raster pixel is NODATA"); *nodata = 1; return 1; } for (i = arg->rasters - 1, j = funcarg->ngv - 1; i > 0; i--, j--) { POSTGIS_RT_DEBUGF(4, "checking raster %d", i); /* mask is NODATA */ if (arg->nodata[i][0][0]) continue; /* mask is NOT NODATA */ else { POSTGIS_RT_DEBUGF(4, "Using information from geometry %d", j); if (funcarg->gv[j].pixval.nodata) *nodata = 1; else *value = funcarg->gv[j].pixval.value; return 1; } } POSTGIS_RT_DEBUG(4, "Using information from source raster"); /* still here */ if (arg->nodata[0][0][0]) *nodata = 1; else *value = arg->values[0][0][0]; return 1; } PG_FUNCTION_INFO_V1(RASTER_setPixelValuesGeomval); Datum RASTER_setPixelValuesGeomval(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_band band = NULL; rt_raster _raster = NULL; rt_band _band = NULL; int nband = 0; /* 1-based */ int numbands = 0; int width = 0; int height = 0; int srid = 0; double gt[6] = {0}; rt_pixtype pixtype = PT_END; int hasnodata = 0; double nodataval = 0; rtpg_setvaluesgv_arg arg = NULL; int allpoint = 0; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; HeapTupleHeader tup; bool isnull; Datum tupv; GSERIALIZED *gser = NULL; uint8_t gtype; unsigned char *wkb = NULL; size_t wkb_len; int i = 0; int j = 0; int noerr = 1; /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not deserialize raster"); PG_RETURN_NULL(); } /* raster attributes */ numbands = rt_raster_get_num_bands(raster); width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); srid = clamp_srid(rt_raster_get_srid(raster)); rt_raster_get_geotransform_matrix(raster, gt); /* nband */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Band index cannot be NULL. Value must be 1-based. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } nband = PG_GETARG_INT32(1); if (nband < 1 || nband > numbands) { elog(NOTICE, "Band index is invalid. Value must be 1-based. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* get band attributes */ band = rt_raster_get_band(raster, nband - 1); pixtype = rt_band_get_pixtype(band); hasnodata = rt_band_get_hasnodata_flag(band); if (hasnodata) rt_band_get_nodata(band, &nodataval); /* array of geomval (2) */ if (PG_ARGISNULL(2)) { elog(NOTICE, "No values to set. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } array = PG_GETARG_ARRAYTYPE_P(2); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); deconstruct_array( array, etype, typlen, typbyval, typalign, &e, &nulls, &n ); if (!n) { elog(NOTICE, "No values to set. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* init arg */ arg = rtpg_setvaluesgv_arg_init(); if (arg == NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not intialize argument structure"); PG_RETURN_NULL(); } arg->gv = palloc(sizeof(struct rtpg_setvaluesgv_geomval_t) * n); if (arg->gv == NULL) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not allocate memory for geomval array"); PG_RETURN_NULL(); } /* process each element */ arg->ngv = 0; for (i = 0; i < n; i++) { if (nulls[i]) continue; arg->gv[arg->ngv].pixval.nodata = 0; arg->gv[arg->ngv].pixval.value = 0; arg->gv[arg->ngv].geom = NULL; arg->gv[arg->ngv].mask = NULL; /* each element is a tuple */ tup = (HeapTupleHeader) DatumGetPointer(e[i]); if (NULL == tup) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Invalid argument for geomval at index %d", i); PG_RETURN_NULL(); } /* first element, geometry */ POSTGIS_RT_DEBUG(4, "Processing first element (geometry)"); tupv = GetAttributeByName(tup, "geom", &isnull); if (isnull) { elog(NOTICE, "First argument (geom) of geomval at index %d is NULL. Skipping", i); continue; } gser = (GSERIALIZED *) PG_DETOAST_DATUM(tupv); arg->gv[arg->ngv].geom = lwgeom_from_gserialized(gser); if (arg->gv[arg->ngv].geom == NULL) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not deserialize geometry of geomval at index %d", i); PG_RETURN_NULL(); } /* empty geometry */ if (lwgeom_is_empty(arg->gv[arg->ngv].geom)) { elog(NOTICE, "First argument (geom) of geomval at index %d is an empty geometry. Skipping", i); continue; } /* check SRID */ if (clamp_srid(gserialized_get_srid(gser)) != srid) { elog(NOTICE, "Geometry provided for geomval at index %d does not have the same SRID as the raster: %d. Returning original raster", i, srid); rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* Get a 2D version of the geometry if necessary */ if (lwgeom_ndims(arg->gv[arg->ngv].geom) > 2) { LWGEOM *geom2d = lwgeom_force_2d(arg->gv[arg->ngv].geom); lwgeom_free(arg->gv[arg->ngv].geom); arg->gv[arg->ngv].geom = geom2d; } /* filter for types */ gtype = gserialized_get_type(gser); /* shortcuts for POINT and MULTIPOINT */ if (gtype == POINTTYPE || gtype == MULTIPOINTTYPE) allpoint++; /* get wkb of geometry */ POSTGIS_RT_DEBUG(3, "getting wkb of geometry"); wkb = lwgeom_to_wkb(arg->gv[arg->ngv].geom, WKB_SFSQL, &wkb_len); /* rasterize geometry */ arg->gv[arg->ngv].mask = rt_raster_gdal_rasterize( wkb, wkb_len, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &(gt[1]), &(gt[5]), NULL, NULL, &(gt[0]), &(gt[3]), &(gt[2]), &(gt[4]), NULL ); pfree(wkb); if (gtype != POINTTYPE && gtype != MULTIPOINTTYPE) { lwgeom_free(arg->gv[arg->ngv].geom); arg->gv[arg->ngv].geom = NULL; } if (arg->gv[arg->ngv].mask == NULL) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not rasterize geometry of geomval at index %d", i); PG_RETURN_NULL(); } /* set SRID */ rt_raster_set_srid(arg->gv[arg->ngv].mask, srid); /* second element, value */ POSTGIS_RT_DEBUG(4, "Processing second element (val)"); tupv = GetAttributeByName(tup, "val", &isnull); if (isnull) { elog(NOTICE, "Second argument (val) of geomval at index %d is NULL. Treating as NODATA", i); arg->gv[arg->ngv].pixval.nodata = 1; } else arg->gv[arg->ngv].pixval.value = DatumGetFloat8(tupv); (arg->ngv)++; } /* redim arg->gv if needed */ if (arg->ngv < n) { arg->gv = repalloc(arg->gv, sizeof(struct rtpg_setvaluesgv_geomval_t) * arg->ngv); if (arg->gv == NULL) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not reallocate memory for geomval array"); PG_RETURN_NULL(); } } /* keepnodata */ if (!PG_ARGISNULL(3)) arg->keepnodata = PG_GETARG_BOOL(3); POSTGIS_RT_DEBUGF(3, "keepnodata = %d", arg->keepnodata); /* keepnodata = TRUE and band is NODATA */ if (arg->keepnodata && rt_band_get_isnodata_flag(band)) { POSTGIS_RT_DEBUG(3, "keepnodata = TRUE and band is NODATA. Not doing anything"); } /* all elements are points */ else if (allpoint == arg->ngv) { double igt[6] = {0}; double xy[2] = {0}; double value = 0; int isnodata = 0; LWCOLLECTION *coll = NULL; LWPOINT *point = NULL; POINT2D p; POSTGIS_RT_DEBUG(3, "all geometries are points, using direct to pixel method"); /* cache inverse gretransform matrix */ rt_raster_get_inverse_geotransform_matrix(NULL, gt, igt); /* process each geometry */ for (i = 0; i < arg->ngv; i++) { /* convert geometry to collection */ coll = lwgeom_as_lwcollection(lwgeom_as_multi(arg->gv[i].geom)); /* process each point in collection */ for (j = 0; j < coll->ngeoms; j++) { point = lwgeom_as_lwpoint(coll->geoms[j]); getPoint2d_p(point->point, 0, &p); if (rt_raster_geopoint_to_cell(raster, p.x, p.y, &(xy[0]), &(xy[1]), igt) != ES_NONE) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not process coordinates of point"); PG_RETURN_NULL(); } /* skip point if outside raster */ if ( (xy[0] < 0 || xy[0] >= width) || (xy[1] < 0 || xy[1] >= height) ) { elog(NOTICE, "Point is outside raster extent. Skipping"); continue; } /* get pixel value */ if (rt_band_get_pixel(band, xy[0], xy[1], &value, &isnodata) != ES_NONE) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not get pixel value"); PG_RETURN_NULL(); } /* keepnodata = TRUE AND pixel value is NODATA */ if (arg->keepnodata && isnodata) continue; /* set pixel */ if (arg->gv[i].pixval.nodata) noerr = rt_band_set_pixel(band, xy[0], xy[1], nodataval, NULL); else noerr = rt_band_set_pixel(band, xy[0], xy[1], arg->gv[i].pixval.value, NULL); if (noerr != ES_NONE) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not set pixel value"); PG_RETURN_NULL(); } } } } /* run iterator otherwise */ else { rt_iterator itrset; POSTGIS_RT_DEBUG(3, "a mix of geometries, using iterator method"); /* init itrset */ itrset = palloc(sizeof(struct rt_iterator_t) * (arg->ngv + 1)); if (itrset == NULL) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not allocate memory for iterator arguments"); PG_RETURN_NULL(); } /* set first raster's info */ itrset[0].raster = raster; itrset[0].nband = nband - 1; itrset[0].nbnodata = 1; /* set other raster's info */ for (i = 0, j = 1; i < arg->ngv; i++, j++) { itrset[j].raster = arg->gv[i].mask; itrset[j].nband = 0; itrset[j].nbnodata = 1; } /* pass to iterator */ noerr = rt_raster_iterator( itrset, arg->ngv + 1, ET_FIRST, NULL, pixtype, hasnodata, nodataval, 0, 0, arg, rtpg_setvalues_geomval_callback, &_raster ); pfree(itrset); if (noerr != ES_NONE) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not run raster iterator function"); PG_RETURN_NULL(); } /* copy band from _raster to raster */ _band = rt_raster_get_band(_raster, 0); if (_band == NULL) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(_raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not get band from working raster"); PG_RETURN_NULL(); } _band = rt_raster_replace_band(raster, _band, nband - 1); if (_band == NULL) { rtpg_setvaluesgv_arg_destroy(arg); rt_raster_destroy(_raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_setPixelValuesGeomval: Could not replace band in output raster"); PG_RETURN_NULL(); } rt_band_destroy(_band); rt_raster_destroy(_raster); } rtpg_setvaluesgv_arg_destroy(arg); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); POSTGIS_RT_DEBUG(3, "Finished"); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Return the geographical shape of all pixels */ PG_FUNCTION_INFO_V1(RASTER_getPixelPolygons); Datum RASTER_getPixelPolygons(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; rt_pixel pix = NULL; rt_pixel pix2; int call_cntr; int max_calls; int i = 0; /* stuff done only on the first call of the function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int nband = 1; int numbands; bool hasband = TRUE; bool exclude_nodata_value = TRUE; bool nocolumnx = FALSE; bool norowy = FALSE; int x = 0; int y = 0; int bounds[4] = {0}; int pixcount = 0; double value = 0; int isnodata = 0; LWPOLY *poly; POSTGIS_RT_DEBUG(3, "RASTER_getPixelPolygons first call"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* band */ if (PG_ARGISNULL(1)) hasband = FALSE; else { nband = PG_GETARG_INT32(1); hasband = TRUE; } /* column */ if (PG_ARGISNULL(2)) nocolumnx = TRUE; else { bounds[0] = PG_GETARG_INT32(2); bounds[1] = bounds[0]; } /* row */ if (PG_ARGISNULL(3)) norowy = TRUE; else { bounds[2] = PG_GETARG_INT32(3); bounds[3] = bounds[2]; } /* exclude NODATA */ if (!PG_ARGISNULL(4)) exclude_nodata_value = PG_GETARG_BOOL(4); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); ereport(ERROR, ( errcode(ERRCODE_OUT_OF_MEMORY), errmsg("Could not deserialize raster") )); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* raster empty, return NULL */ if (rt_raster_is_empty(raster)) { elog(NOTICE, "Raster is empty. Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* band specified, load band and info */ if (hasband) { numbands = rt_raster_get_num_bands(raster); POSTGIS_RT_DEBUGF(3, "band %d", nband); POSTGIS_RT_DEBUGF(3, "# of bands %d", numbands); if (nband < 1 || nband > numbands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } band = rt_raster_get_band(raster, nband - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", nband); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } if (!rt_band_get_hasnodata_flag(band)) exclude_nodata_value = FALSE; } /* set bounds if columnx, rowy not set */ if (nocolumnx) { bounds[0] = 1; bounds[1] = rt_raster_get_width(raster); } if (norowy) { bounds[2] = 1; bounds[3] = rt_raster_get_height(raster); } POSTGIS_RT_DEBUGF(3, "bounds (min x, max x, min y, max y) = (%d, %d, %d, %d)", bounds[0], bounds[1], bounds[2], bounds[3]); /* rowy */ pixcount = 0; for (y = bounds[2]; y <= bounds[3]; y++) { /* columnx */ for (x = bounds[0]; x <= bounds[1]; x++) { value = 0; isnodata = TRUE; if (hasband) { if (rt_band_get_pixel(band, x - 1, y - 1, &value, &isnodata) != ES_NONE) { for (i = 0; i < pixcount; i++) lwgeom_free(pix[i].geom); if (pixcount) pfree(pix); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_getPixelPolygons: Could not get pixel value"); SRF_RETURN_DONE(funcctx); } /* don't continue if pixel is NODATA and to exclude NODATA */ if (isnodata && exclude_nodata_value) { POSTGIS_RT_DEBUG(5, "pixel value is NODATA and exclude_nodata_value = TRUE"); continue; } } /* geometry */ poly = rt_raster_pixel_as_polygon(raster, x - 1, y - 1); if (!poly) { for (i = 0; i < pixcount; i++) lwgeom_free(pix[i].geom); if (pixcount) pfree(pix); if (hasband) rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_getPixelPolygons: Could not get pixel polygon"); SRF_RETURN_DONE(funcctx); } if (!pixcount) pix = palloc(sizeof(struct rt_pixel_t) * (pixcount + 1)); else pix = repalloc(pix, sizeof(struct rt_pixel_t) * (pixcount + 1)); if (pix == NULL) { lwpoly_free(poly); if (hasband) rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_getPixelPolygons: Could not allocate memory for storing pixel polygons"); SRF_RETURN_DONE(funcctx); } pix[pixcount].geom = (LWGEOM *) poly; POSTGIS_RT_DEBUGF(5, "poly @ %p", poly); POSTGIS_RT_DEBUGF(5, "geom @ %p", pix[pixcount].geom); /* x, y */ pix[pixcount].x = x; pix[pixcount].y = y; /* value */ pix[pixcount].value = value; /* NODATA */ if (hasband) { if (exclude_nodata_value) pix[pixcount].nodata = isnodata; else pix[pixcount].nodata = FALSE; } else { pix[pixcount].nodata = isnodata; } pixcount++; } } if (hasband) rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* shortcut if no pixcount */ if (pixcount < 1) { elog(NOTICE, "No pixels found for band %d", nband); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* Store needed information */ funcctx->user_fctx = pix; /* total number of tuples to be returned */ funcctx->max_calls = pixcount; POSTGIS_RT_DEBUGF(3, "pixcount = %d", pixcount); /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("function returning record called in context that cannot accept type record") )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; pix2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 4; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; GSERIALIZED *gser = NULL; size_t gser_size = 0; POSTGIS_RT_DEBUGF(3, "call number %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); /* convert LWGEOM to GSERIALIZED */ gser = gserialized_from_lwgeom(pix2[call_cntr].geom, 0, &gser_size); lwgeom_free(pix2[call_cntr].geom); values[0] = PointerGetDatum(gser); if (pix2[call_cntr].nodata) nulls[1] = TRUE; else values[1] = Float8GetDatum(pix2[call_cntr].value); values[2] = Int32GetDatum(pix2[call_cntr].x); values[3] = Int32GetDatum(pix2[call_cntr].y); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(pix2); SRF_RETURN_DONE(funcctx); } } /** * Get raster band's polygon */ PG_FUNCTION_INFO_V1(RASTER_getPolygon); Datum RASTER_getPolygon(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; int num_bands = 0; int nband = 1; int err; LWMPOLY *surface = NULL; GSERIALIZED *rtn = NULL; /* raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_getPolygon: Could not deserialize raster"); PG_RETURN_NULL(); } /* num_bands */ num_bands = rt_raster_get_num_bands(raster); if (num_bands < 1) { elog(NOTICE, "Raster provided has no bands"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* band index is 1-based */ if (!PG_ARGISNULL(1)) nband = PG_GETARG_INT32(1); if (nband < 1 || nband > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* get band surface */ err = rt_raster_surface(raster, nband - 1, &surface); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (err != ES_NONE) { elog(ERROR, "RASTER_getPolygon: Could not get raster band's surface"); PG_RETURN_NULL(); } else if (surface == NULL) { elog(NOTICE, "Raster is empty or all pixels of band are NODATA. Returning NULL"); PG_RETURN_NULL(); } rtn = geometry_serialize(lwmpoly_as_lwgeom(surface)); lwmpoly_free(surface); PG_RETURN_POINTER(rtn); } /** * Get pixels of value */ PG_FUNCTION_INFO_V1(RASTER_pixelOfValue); Datum RASTER_pixelOfValue(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; rt_pixel pixels = NULL; rt_pixel pixels2 = NULL; int count = 0; int i = 0; int n = 0; int call_cntr; int max_calls; if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int nband = 1; int num_bands = 0; double *search = NULL; int nsearch = 0; double val; bool exclude_nodata_value = TRUE; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_pixelOfValue: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* num_bands */ num_bands = rt_raster_get_num_bands(raster); if (num_bands < 1) { elog(NOTICE, "Raster provided has no bands"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* band index is 1-based */ if (!PG_ARGISNULL(1)) nband = PG_GETARG_INT32(1); if (nband < 1 || nband > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* search values */ array = PG_GETARG_ARRAYTYPE_P(2); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_pixelOfValue: Invalid data type for pixel values"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); search = palloc(sizeof(double) * n); for (i = 0, nsearch = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case FLOAT4OID: val = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: val = (double) DatumGetFloat8(e[i]); break; } search[nsearch] = val; POSTGIS_RT_DEBUGF(3, "search[%d] = %f", nsearch, search[nsearch]); nsearch++; } /* not searching for anything */ if (nsearch < 1) { elog(NOTICE, "No search values provided. Returning NULL"); pfree(search); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } else if (nsearch < n) search = repalloc(search, sizeof(double) * nsearch); /* exclude_nodata_value flag */ if (!PG_ARGISNULL(3)) exclude_nodata_value = PG_GETARG_BOOL(3); /* get band */ band = rt_raster_get_band(raster, nband - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", nband); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get pixels of values */ count = rt_band_get_pixel_of_value( band, exclude_nodata_value, search, nsearch, &pixels ); pfree(search); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (count < 1) { /* error */ if (count < 0) elog(NOTICE, "Could not get the pixels of search values for band at index %d", nband); /* no nearest pixel */ else elog(NOTICE, "No pixels of search values found for band at index %d", nband); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* Store needed information */ funcctx->user_fctx = pixels; /* total number of tuples to be returned */ funcctx->max_calls = count; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; pixels2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 3; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; memset(nulls, FALSE, sizeof(bool) * values_length); /* 0-based to 1-based */ pixels2[call_cntr].x += 1; pixels2[call_cntr].y += 1; values[0] = Float8GetDatum(pixels2[call_cntr].value); values[1] = Int32GetDatum(pixels2[call_cntr].x); values[2] = Int32GetDatum(pixels2[call_cntr].y); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } else { pfree(pixels2); SRF_RETURN_DONE(funcctx); } } /** * Return nearest value to a point */ PG_FUNCTION_INFO_V1(RASTER_nearestValue); Datum RASTER_nearestValue(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int bandindex = 1; int num_bands = 0; GSERIALIZED *geom; bool exclude_nodata_value = TRUE; LWGEOM *lwgeom; LWPOINT *point = NULL; POINT2D p; double x; double y; int count; rt_pixel npixels = NULL; double value = 0; int hasvalue = 0; int isnodata = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_nearestValue: Could not deserialize raster"); PG_RETURN_NULL(); } /* band index is 1-based */ if (!PG_ARGISNULL(1)) bandindex = PG_GETARG_INT32(1); num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* point */ geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(2)); if (gserialized_get_type(geom) != POINTTYPE) { elog(NOTICE, "Geometry provided must be a point"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_FREE_IF_COPY(geom, 2); PG_RETURN_NULL(); } /* exclude_nodata_value flag */ if (!PG_ARGISNULL(3)) exclude_nodata_value = PG_GETARG_BOOL(3); /* SRIDs of raster and geometry must match */ if (clamp_srid(gserialized_get_srid(geom)) != clamp_srid(rt_raster_get_srid(raster))) { elog(NOTICE, "SRIDs of geometry and raster do not match"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_FREE_IF_COPY(geom, 2); PG_RETURN_NULL(); } /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_FREE_IF_COPY(geom, 2); PG_RETURN_NULL(); } /* process geometry */ lwgeom = lwgeom_from_gserialized(geom); if (lwgeom_is_empty(lwgeom)) { elog(NOTICE, "Geometry provided cannot be empty"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_FREE_IF_COPY(geom, 2); PG_RETURN_NULL(); } /* Get a 2D version of the geometry if necessary */ if (lwgeom_ndims(lwgeom) > 2) { LWGEOM *lwgeom2d = lwgeom_force_2d(lwgeom); lwgeom_free(lwgeom); lwgeom = lwgeom2d; } point = lwgeom_as_lwpoint(lwgeom); getPoint2d_p(point->point, 0, &p); if (rt_raster_geopoint_to_cell( raster, p.x, p.y, &x, &y, NULL ) != ES_NONE) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 2); elog(ERROR, "RASTER_nearestValue: Could not compute pixel coordinates from spatial coordinates"); PG_RETURN_NULL(); } /* get value at point */ if ( (x >= 0 && x < rt_raster_get_width(raster)) && (y >= 0 && y < rt_raster_get_height(raster)) ) { if (rt_band_get_pixel(band, x, y, &value, &isnodata) != ES_NONE) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 2); elog(ERROR, "RASTER_nearestValue: Could not get pixel value for band at index %d", bandindex); PG_RETURN_NULL(); } /* value at point, return value */ if (!exclude_nodata_value || !isnodata) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 2); PG_RETURN_FLOAT8(value); } } /* get neighborhood */ count = rt_band_get_nearest_pixel( band, x, y, 0, 0, exclude_nodata_value, &npixels ); rt_band_destroy(band); /* error or no neighbors */ if (count < 1) { /* error */ if (count < 0) elog(NOTICE, "Could not get the nearest value for band at index %d", bandindex); /* no nearest pixel */ else elog(NOTICE, "No nearest value found for band at index %d", bandindex); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 2); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* more than one nearest value, see which one is closest */ if (count > 1) { int i = 0; LWPOLY *poly = NULL; double lastdist = -1; double dist; for (i = 0; i < count; i++) { /* convex-hull of pixel */ poly = rt_raster_pixel_as_polygon(raster, npixels[i].x, npixels[i].y); if (!poly) { lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 2); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_nearestValue: Could not get polygon of neighboring pixel"); PG_RETURN_NULL(); } /* distance between convex-hull and point */ dist = lwgeom_mindistance2d(lwpoly_as_lwgeom(poly), lwgeom); if (lastdist < 0 || dist < lastdist) { value = npixels[i].value; hasvalue = 1; } lastdist = dist; lwpoly_free(poly); } } else { value = npixels[0].value; hasvalue = 1; } pfree(npixels); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 2); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (hasvalue) PG_RETURN_FLOAT8(value); else PG_RETURN_NULL(); } /** * Return the neighborhood around a pixel */ PG_FUNCTION_INFO_V1(RASTER_neighborhood); Datum RASTER_neighborhood(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int bandindex = 1; int num_bands = 0; int x = 0; int y = 0; int _x = 0; int _y = 0; int distance[2] = {0}; bool exclude_nodata_value = TRUE; double pixval; int isnodata = 0; rt_pixel npixels = NULL; int count; double **value2D = NULL; int **nodata2D = NULL; int i = 0; int j = 0; int k = 0; Datum *value1D = NULL; bool *nodata1D = NULL; int dim[2] = {0}; int lbound[2] = {1, 1}; ArrayType *mdArray = NULL; int16 typlen; bool typbyval; char typalign; /* pgraster is null, return nothing */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_neighborhood: Could not deserialize raster"); PG_RETURN_NULL(); } /* band index is 1-based */ if (!PG_ARGISNULL(1)) bandindex = PG_GETARG_INT32(1); num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* pixel column, 1-based */ x = PG_GETARG_INT32(2); _x = x - 1; /* pixel row, 1-based */ y = PG_GETARG_INT32(3); _y = y - 1; /* distance X axis */ distance[0] = PG_GETARG_INT32(4); if (distance[0] < 0) { elog(NOTICE, "Invalid value for distancex (must be >= zero). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } distance[0] = (uint16_t) distance[0]; /* distance Y axis */ distance[1] = PG_GETARG_INT32(5); if (distance[1] < 0) { elog(NOTICE, "Invalid value for distancey (must be >= zero). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } distance[1] = (uint16_t) distance[1]; /* exclude_nodata_value flag */ if (!PG_ARGISNULL(6)) exclude_nodata_value = PG_GETARG_BOOL(6); /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* get neighborhood */ count = 0; npixels = NULL; if (distance[0] > 0 || distance[1] > 0) { count = rt_band_get_nearest_pixel( band, _x, _y, distance[0], distance[1], exclude_nodata_value, &npixels ); /* error */ if (count < 0) { elog(NOTICE, "Could not get the pixel's neighborhood for band at index %d", bandindex); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } } /* get pixel's value */ if ( (_x >= 0 && _x < rt_band_get_width(band)) && (_y >= 0 && _y < rt_band_get_height(band)) ) { if (rt_band_get_pixel( band, _x, _y, &pixval, &isnodata ) != ES_NONE) { elog(NOTICE, "Could not get the pixel of band at index %d. Returning NULL", bandindex); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } } /* outside band extent, set to NODATA */ else { /* has NODATA, use NODATA */ if (rt_band_get_hasnodata_flag(band)) rt_band_get_nodata(band, &pixval); /* no NODATA, use min possible value */ else pixval = rt_band_get_min_value(band); isnodata = 1; } POSTGIS_RT_DEBUGF(4, "pixval: %f", pixval); /* add pixel to neighborhood */ count++; if (count > 1) npixels = (rt_pixel) repalloc(npixels, sizeof(struct rt_pixel_t) * count); else npixels = (rt_pixel) palloc(sizeof(struct rt_pixel_t)); if (npixels == NULL) { rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_neighborhood: Could not reallocate memory for neighborhood"); PG_RETURN_NULL(); } npixels[count - 1].x = _x; npixels[count - 1].y = _y; npixels[count - 1].nodata = 1; npixels[count - 1].value = pixval; /* set NODATA */ if (!exclude_nodata_value || !isnodata) { npixels[count - 1].nodata = 0; } /* free unnecessary stuff */ rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* convert set of rt_pixel to 2D array */ /* dim is passed with element 0 being Y-axis and element 1 being X-axis */ count = rt_pixel_set_to_array( npixels, count, _x, _y, distance[0], distance[1], &value2D, &nodata2D, &(dim[1]), &(dim[0]) ); pfree(npixels); if (count != ES_NONE) { elog(NOTICE, "Could not create 2D array of neighborhood"); PG_RETURN_NULL(); } /* 1D arrays for values and nodata from 2D arrays */ value1D = palloc(sizeof(Datum) * dim[0] * dim[1]); nodata1D = palloc(sizeof(bool) * dim[0] * dim[1]); if (value1D == NULL || nodata1D == NULL) { for (i = 0; i < dim[0]; i++) { pfree(value2D[i]); pfree(nodata2D[i]); } pfree(value2D); pfree(nodata2D); elog(ERROR, "RASTER_neighborhood: Could not allocate memory for return 2D array"); PG_RETURN_NULL(); } /* copy values from 2D arrays to 1D arrays */ k = 0; /* Y-axis */ for (i = 0; i < dim[0]; i++) { /* X-axis */ for (j = 0; j < dim[1]; j++) { nodata1D[k] = (bool) nodata2D[i][j]; if (!nodata1D[k]) value1D[k] = Float8GetDatum(value2D[i][j]); else value1D[k] = PointerGetDatum(NULL); k++; } } /* no more need for 2D arrays */ for (i = 0; i < dim[0]; i++) { pfree(value2D[i]); pfree(nodata2D[i]); } pfree(value2D); pfree(nodata2D); /* info about the type of item in the multi-dimensional array (float8). */ get_typlenbyvalalign(FLOAT8OID, &typlen, &typbyval, &typalign); mdArray = construct_md_array( value1D, nodata1D, 2, dim, lbound, FLOAT8OID, typlen, typbyval, typalign ); pfree(value1D); pfree(nodata1D); PG_RETURN_ARRAYTYPE_P(mdArray); } /** * Add band(s) to the given raster at the given position(s). */ PG_FUNCTION_INFO_V1(RASTER_addBand); Datum RASTER_addBand(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; int bandindex = 0; int maxbandindex = 0; int numbands = 0; int lastnumbands = 0; text *text_pixtype = NULL; char *char_pixtype = NULL; struct addbandarg { int index; bool append; rt_pixtype pixtype; double initialvalue; bool hasnodata; double nodatavalue; }; struct addbandarg *arg = NULL; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; HeapTupleHeader tup; bool isnull; Datum tupv; int i = 0; /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Could not deserialize raster"); PG_RETURN_NULL(); } /* process set of addbandarg */ POSTGIS_RT_DEBUG(3, "Processing Arg 1 (addbandargset)"); array = PG_GETARG_ARRAYTYPE_P(1); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); if (!n) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Invalid argument for addbandargset"); PG_RETURN_NULL(); } /* allocate addbandarg */ arg = (struct addbandarg *) palloc(sizeof(struct addbandarg) * n); if (arg == NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Could not allocate memory for addbandarg"); PG_RETURN_NULL(); } /* process each element of addbandargset each element is the index of where to add the new band, new band's pixeltype, the new band's initial value and the new band's NODATA value if NOT NULL */ for (i = 0; i < n; i++) { if (nulls[i]) continue; POSTGIS_RT_DEBUGF(4, "Processing addbandarg at index %d", i); /* each element is a tuple */ tup = (HeapTupleHeader) DatumGetPointer(e[i]); if (NULL == tup) { pfree(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Invalid argument for addbandargset"); PG_RETURN_NULL(); } /* new band index, 1-based */ arg[i].index = 0; arg[i].append = TRUE; tupv = GetAttributeByName(tup, "index", &isnull); if (!isnull) { arg[i].index = DatumGetInt32(tupv); arg[i].append = FALSE; } /* for now, only check that band index is 1-based */ if (!arg[i].append && arg[i].index < 1) { pfree(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Invalid argument for addbandargset. Invalid band index (must be 1-based) for addbandarg of index %d", i); PG_RETURN_NULL(); } /* new band pixeltype */ arg[i].pixtype = PT_END; tupv = GetAttributeByName(tup, "pixeltype", &isnull); if (isnull) { pfree(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Invalid argument for addbandargset. Pixel type cannot be NULL for addbandarg of index %d", i); PG_RETURN_NULL(); } text_pixtype = (text *) DatumGetPointer(tupv); if (text_pixtype == NULL) { pfree(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Invalid argument for addbandargset. Pixel type cannot be NULL for addbandarg of index %d", i); PG_RETURN_NULL(); } char_pixtype = text_to_cstring(text_pixtype); arg[i].pixtype = rt_pixtype_index_from_name(char_pixtype); pfree(char_pixtype); if (arg[i].pixtype == PT_END) { pfree(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Invalid argument for addbandargset. Invalid pixel type for addbandarg of index %d", i); PG_RETURN_NULL(); } /* new band initialvalue */ arg[i].initialvalue = 0; tupv = GetAttributeByName(tup, "initialvalue", &isnull); if (!isnull) arg[i].initialvalue = DatumGetFloat8(tupv); /* new band NODATA value */ arg[i].hasnodata = FALSE; arg[i].nodatavalue = 0; tupv = GetAttributeByName(tup, "nodataval", &isnull); if (!isnull) { arg[i].hasnodata = TRUE; arg[i].nodatavalue = DatumGetFloat8(tupv); } } /* add new bands to raster */ lastnumbands = rt_raster_get_num_bands(raster); for (i = 0; i < n; i++) { if (nulls[i]) continue; POSTGIS_RT_DEBUGF(3, "%d bands in old raster", lastnumbands); maxbandindex = lastnumbands + 1; /* check that new band's index doesn't exceed maxbandindex */ if (!arg[i].append) { if (arg[i].index > maxbandindex) { elog(NOTICE, "Band index for addbandarg of index %d exceeds possible value. Adding band at index %d", i, maxbandindex); arg[i].index = maxbandindex; } } /* append, so use maxbandindex */ else arg[i].index = maxbandindex; POSTGIS_RT_DEBUGF(4, "new band (index, pixtype, initialvalue, hasnodata, nodatavalue) = (%d, %s, %f, %s, %f)", arg[i].index, rt_pixtype_name(arg[i].pixtype), arg[i].initialvalue, arg[i].hasnodata ? "TRUE" : "FALSE", arg[i].nodatavalue ); bandindex = rt_raster_generate_new_band( raster, arg[i].pixtype, arg[i].initialvalue, arg[i].hasnodata, arg[i].nodatavalue, arg[i].index - 1 ); numbands = rt_raster_get_num_bands(raster); if (numbands == lastnumbands || bandindex == -1) { pfree(arg); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBand: Could not add band defined by addbandarg of index %d to raster", i); PG_RETURN_NULL(); } lastnumbands = numbands; POSTGIS_RT_DEBUGF(3, "%d bands in new raster", lastnumbands); } pfree(arg); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Add bands from array of rasters to a destination raster */ PG_FUNCTION_INFO_V1(RASTER_addBandRasterArray); Datum RASTER_addBandRasterArray(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgsrc = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_raster src = NULL; int srcnband = 1; bool appendband = FALSE; int dstnband = 1; int srcnumbands = 0; int dstnumbands = 0; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; int rtn = 0; int i = 0; /* destination raster */ if (!PG_ARGISNULL(0)) { pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandRasterArray: Could not deserialize destination raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUG(4, "destination raster isn't NULL"); } /* source rasters' band index, 1-based */ if (!PG_ARGISNULL(2)) srcnband = PG_GETARG_INT32(2); if (srcnband < 1) { elog(NOTICE, "Invalid band index for source rasters (must be 1-based). Returning original raster"); if (raster != NULL) { rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } else PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "srcnband = %d", srcnband); /* destination raster's band index, 1-based */ if (!PG_ARGISNULL(3)) { dstnband = PG_GETARG_INT32(3); appendband = FALSE; if (dstnband < 1) { elog(NOTICE, "Invalid band index for destination raster (must be 1-based). Returning original raster"); if (raster != NULL) { rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } else PG_RETURN_NULL(); } } else appendband = TRUE; /* additional processing of dstnband */ if (raster != NULL) { dstnumbands = rt_raster_get_num_bands(raster); if (dstnumbands < 1) { appendband = TRUE; dstnband = 1; } else if (appendband) dstnband = dstnumbands + 1; else if (dstnband > dstnumbands) { elog(NOTICE, "Band index provided for destination raster is greater than the number of bands in the raster. Bands will be appended"); appendband = TRUE; dstnband = dstnumbands + 1; } } POSTGIS_RT_DEBUGF(4, "appendband = %d", appendband); POSTGIS_RT_DEBUGF(4, "dstnband = %d", dstnband); /* process set of source rasters */ POSTGIS_RT_DEBUG(3, "Processing array of source rasters"); array = PG_GETARG_ARRAYTYPE_P(1); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); /* decrement srcnband and dstnband by 1, now 0-based */ srcnband--; dstnband--; POSTGIS_RT_DEBUGF(4, "0-based nband (src, dst) = (%d, %d)", srcnband, dstnband); /* time to copy bands */ for (i = 0; i < n; i++) { if (nulls[i]) continue; src = NULL; pgsrc = (rt_pgraster *) PG_DETOAST_DATUM(e[i]); src = rt_raster_deserialize(pgsrc, FALSE); if (src == NULL) { pfree(nulls); pfree(e); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandRasterArray: Could not deserialize source raster at index %d", i + 1); PG_RETURN_NULL(); } srcnumbands = rt_raster_get_num_bands(src); POSTGIS_RT_DEBUGF(4, "source raster %d has %d bands", i + 1, srcnumbands); /* band index isn't valid */ if (srcnband > srcnumbands - 1) { elog(NOTICE, "Invalid band index for source raster at index %d. Returning original raster", i + 1); pfree(nulls); pfree(e); rt_raster_destroy(src); if (raster != NULL) { rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } else PG_RETURN_NULL(); } /* destination raster is empty, new raster */ if (raster == NULL) { uint32_t srcnbands[1] = {srcnband}; POSTGIS_RT_DEBUG(4, "empty destination raster, using rt_raster_from_band"); raster = rt_raster_from_band(src, srcnbands, 1); rt_raster_destroy(src); if (raster == NULL) { pfree(nulls); pfree(e); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandRasterArray: Could not create raster from source raster at index %d", i + 1); PG_RETURN_NULL(); } } /* copy band */ else { rtn = rt_raster_copy_band( raster, src, srcnband, dstnband ); rt_raster_destroy(src); if (rtn == -1 || rt_raster_get_num_bands(raster) == dstnumbands) { elog(NOTICE, "Could not add band from source raster at index %d to destination raster. Returning original raster", i + 1); rt_raster_destroy(raster); pfree(nulls); pfree(e); if (pgraster != NULL) PG_RETURN_POINTER(pgraster); else PG_RETURN_NULL(); } } dstnband++; dstnumbands++; } if (raster != NULL) { pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } PG_RETURN_NULL(); } /** * Add out-db band to the given raster at the given position */ PG_FUNCTION_INFO_V1(RASTER_addBandOutDB); Datum RASTER_addBandOutDB(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_band band = NULL; int numbands = 0; int dstnband = 1; /* 1-based */ int appendband = FALSE; char *outdbfile = NULL; int *srcnband = NULL; /* 1-based */ int numsrcnband = 0; int allbands = FALSE; int hasnodata = FALSE; double nodataval = 0.; uint16_t width = 0; uint16_t height = 0; char *authname = NULL; char *authcode = NULL; int i = 0; int j = 0; GDALDatasetH hdsOut; GDALRasterBandH hbandOut; GDALDataType gdpixtype; rt_pixtype pt = PT_END; double gt[6] = {0.}; double ogt[6] = {0.}; rt_raster _rast = NULL; int aligned = 0; int err = 0; /* destination raster */ if (!PG_ARGISNULL(0)) { pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandOutDB: Could not deserialize destination raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUG(4, "destination raster isn't NULL"); } /* destination band index (1) */ if (!PG_ARGISNULL(1)) dstnband = PG_GETARG_INT32(1); else appendband = TRUE; /* outdb file (2) */ if (PG_ARGISNULL(2)) { elog(NOTICE, "Out-db raster file not provided. Returning original raster"); if (pgraster != NULL) { rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } else PG_RETURN_NULL(); } else { outdbfile = text_to_cstring(PG_GETARG_TEXT_P(2)); if (!strlen(outdbfile)) { elog(NOTICE, "Out-db raster file not provided. Returning original raster"); if (pgraster != NULL) { rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } else PG_RETURN_NULL(); } } /* outdb band index (3) */ if (!PG_ARGISNULL(3)) { ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; allbands = FALSE; array = PG_GETARG_ARRAYTYPE_P(3); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case INT2OID: case INT4OID: break; default: if (pgraster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); } elog(ERROR, "RASTER_addBandOutDB: Invalid data type for band indexes"); PG_RETURN_NULL(); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &numsrcnband); srcnband = palloc(sizeof(int) * numsrcnband); if (srcnband == NULL) { if (pgraster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); } elog(ERROR, "RASTER_addBandOutDB: Could not allocate memory for band indexes"); PG_RETURN_NULL(); } for (i = 0, j = 0; i < numsrcnband; i++) { if (nulls[i]) continue; switch (etype) { case INT2OID: srcnband[j] = DatumGetInt16(e[i]); break; case INT4OID: srcnband[j] = DatumGetInt32(e[i]); break; } j++; } if (j < numsrcnband) { srcnband = repalloc(srcnband, sizeof(int) * j); if (srcnband == NULL) { if (pgraster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); } elog(ERROR, "RASTER_addBandOutDB: Could not reallocate memory for band indexes"); PG_RETURN_NULL(); } numsrcnband = j; } } else allbands = TRUE; /* nodataval (4) */ if (!PG_ARGISNULL(4)) { hasnodata = TRUE; nodataval = PG_GETARG_FLOAT8(4); } else hasnodata = FALSE; /* validate input */ /* make sure dstnband is valid */ if (raster != NULL) { numbands = rt_raster_get_num_bands(raster); if (!appendband) { if (dstnband < 1) { elog(NOTICE, "Invalid band index %d for adding bands. Using band index 1", dstnband); dstnband = 1; } else if (dstnband > numbands) { elog(NOTICE, "Invalid band index %d for adding bands. Using band index %d", dstnband, numbands); dstnband = numbands + 1; } } else dstnband = numbands + 1; } /* open outdb raster file */ rt_util_gdal_register_all(); hdsOut = GDALOpenShared(outdbfile, GA_ReadOnly); if (hdsOut == NULL) { if (pgraster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); } elog(ERROR, "RASTER_addBandOutDB: Could not open out-db file with GDAL"); PG_RETURN_NULL(); } /* get offline raster's geotransform */ if (GDALGetGeoTransform(hdsOut, ogt) != CE_None) { ogt[0] = 0; ogt[1] = 1; ogt[2] = 0; ogt[3] = 0; ogt[4] = 0; ogt[5] = -1; } /* raster doesn't exist, create it now */ if (raster == NULL) { raster = rt_raster_new(GDALGetRasterXSize(hdsOut), GDALGetRasterYSize(hdsOut)); if (rt_raster_is_empty(raster)) { elog(ERROR, "RASTER_addBandOutDB: Could not create new raster"); PG_RETURN_NULL(); } rt_raster_set_geotransform_matrix(raster, ogt); rt_raster_get_geotransform_matrix(raster, gt); if (rt_util_gdal_sr_auth_info(hdsOut, &authname, &authcode) == ES_NONE) { if ( authname != NULL && strcmp(authname, "EPSG") == 0 && authcode != NULL ) { rt_raster_set_srid(raster, atoi(authcode)); } else elog(INFO, "Unknown SRS auth name and code from out-db file. Defaulting SRID of new raster to %d", SRID_UNKNOWN); } else elog(INFO, "Could not get SRS auth name and code from out-db file. Defaulting SRID of new raster to %d", SRID_UNKNOWN); } /* some raster info */ width = rt_raster_get_width(raster); height = rt_raster_get_width(raster); /* are rasters aligned? */ _rast = rt_raster_new(1, 1); rt_raster_set_geotransform_matrix(_rast, ogt); rt_raster_set_srid(_rast, rt_raster_get_srid(raster)); err = rt_raster_same_alignment(raster, _rast, &aligned, NULL); rt_raster_destroy(_rast); if (err != ES_NONE) { GDALClose(hdsOut); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandOutDB: Could not test alignment of out-db file"); return ES_ERROR; } else if (!aligned) elog(WARNING, "The in-db representation of the out-db raster is not aligned. Band data may be incorrect"); numbands = GDALGetRasterCount(hdsOut); /* build up srcnband */ if (allbands) { numsrcnband = numbands; srcnband = palloc(sizeof(int) * numsrcnband); if (srcnband == NULL) { GDALClose(hdsOut); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandOutDB: Could not allocate memory for band indexes"); PG_RETURN_NULL(); } for (i = 0, j = 1; i < numsrcnband; i++, j++) srcnband[i] = j; } /* check band properties and add band */ for (i = 0, j = dstnband - 1; i < numsrcnband; i++, j++) { /* valid index? */ if (srcnband[i] < 1 || srcnband[i] > numbands) { elog(NOTICE, "Out-db file does not have a band at index %d. Returning original raster", srcnband[i]); GDALClose(hdsOut); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_RETURN_POINTER(pgraster); else PG_RETURN_NULL(); } /* get outdb band */ hbandOut = NULL; hbandOut = GDALGetRasterBand(hdsOut, srcnband[i]); if (NULL == hbandOut) { GDALClose(hdsOut); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandOutDB: Could not get band %d from GDAL dataset", srcnband[i]); PG_RETURN_NULL(); } /* supported pixel type */ gdpixtype = GDALGetRasterDataType(hbandOut); pt = rt_util_gdal_datatype_to_pixtype(gdpixtype); if (pt == PT_END) { elog(NOTICE, "Pixel type %s of band %d from GDAL dataset is not supported. Returning original raster", GDALGetDataTypeName(gdpixtype), srcnband[i]); GDALClose(hdsOut); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_RETURN_POINTER(pgraster); else PG_RETURN_NULL(); } /* use out-db band's nodata value if nodataval not already set */ if (!hasnodata) nodataval = GDALGetRasterNoDataValue(hbandOut, &hasnodata); /* add band */ band = rt_band_new_offline( width, height, pt, hasnodata, nodataval, srcnband[i] - 1, outdbfile ); if (band == NULL) { GDALClose(hdsOut); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandOutDB: Could not create new out-db band"); PG_RETURN_NULL(); } if (rt_raster_add_band(raster, band, j) < 0) { GDALClose(hdsOut); if (raster != NULL) rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_addBandOutDB: Could not add new out-db band to raster"); PG_RETURN_NULL(); } } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); if (pgraster != NULL) PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Break up a raster into smaller tiles. SRF function */ PG_FUNCTION_INFO_V1(RASTER_tile); Datum RASTER_tile(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; int call_cntr; int max_calls; int i = 0; int j = 0; struct tile_arg_t { struct { rt_raster raster; double gt[6]; int srid; int width; int height; } raster; struct { int width; int height; int nx; int ny; } tile; int numbands; int *nbands; struct { int pad; double hasnodata; double nodataval; } pad; }; struct tile_arg_t *arg1 = NULL; struct tile_arg_t *arg2 = NULL; if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; int numbands; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; POSTGIS_RT_DEBUG(2, "RASTER_tile: first call"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* Get input arguments */ if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* allocate arg1 */ arg1 = palloc(sizeof(struct tile_arg_t)); if (arg1 == NULL) { MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_tile: Could not allocate memory for arguments"); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); arg1->raster.raster = rt_raster_deserialize(pgraster, FALSE); if (!arg1->raster.raster) { ereport(ERROR, ( errcode(ERRCODE_OUT_OF_MEMORY), errmsg("Could not deserialize raster") )); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* raster has bands */ numbands = rt_raster_get_num_bands(arg1->raster.raster); /* if (!numbands) { elog(NOTICE, "Raster provided has no bands"); rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } */ /* width (1) */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Width cannot be NULL. Returning NULL"); rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } arg1->tile.width = PG_GETARG_INT32(1); if (arg1->tile.width < 1) { elog(NOTICE, "Width must be greater than zero. Returning NULL"); rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* height (2) */ if (PG_ARGISNULL(2)) { elog(NOTICE, "Height cannot be NULL. Returning NULL"); rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } arg1->tile.height = PG_GETARG_INT32(2); if (arg1->tile.height < 1) { elog(NOTICE, "Height must be greater than zero. Returning NULL"); rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* nband, array (3) */ if (numbands && !PG_ARGISNULL(3)) { array = PG_GETARG_ARRAYTYPE_P(3); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case INT2OID: case INT4OID: break; default: rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_tile: Invalid data type for band indexes"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &(arg1->numbands)); arg1->nbands = palloc(sizeof(int) * arg1->numbands); if (arg1->nbands == NULL) { rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_tile: Could not allocate memory for band indexes"); SRF_RETURN_DONE(funcctx); } for (i = 0, j = 0; i < arg1->numbands; i++) { if (nulls[i]) continue; switch (etype) { case INT2OID: arg1->nbands[j] = DatumGetInt16(e[i]) - 1; break; case INT4OID: arg1->nbands[j] = DatumGetInt32(e[i]) - 1; break; } j++; } if (j < arg1->numbands) { arg1->nbands = repalloc(arg1->nbands, sizeof(int) * j); if (arg1->nbands == NULL) { rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_tile: Could not reallocate memory for band indexes"); SRF_RETURN_DONE(funcctx); } arg1->numbands = j; } /* validate nbands */ for (i = 0; i < arg1->numbands; i++) { if (!rt_raster_has_band(arg1->raster.raster, arg1->nbands[i])) { elog(NOTICE, "Band at index %d not found in raster", arg1->nbands[i] + 1); rt_raster_destroy(arg1->raster.raster); pfree(arg1->nbands); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } } } else { arg1->numbands = numbands; if (numbands) { arg1->nbands = palloc(sizeof(int) * arg1->numbands); if (arg1->nbands == NULL) { rt_raster_destroy(arg1->raster.raster); pfree(arg1); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_dumpValues: Could not allocate memory for pixel values"); SRF_RETURN_DONE(funcctx); } for (i = 0; i < arg1->numbands; i++) { arg1->nbands[i] = i; POSTGIS_RT_DEBUGF(4, "arg1->nbands[%d] = %d", arg1->nbands[i], i); } } } /* pad (4) and padnodata (5) */ if (!PG_ARGISNULL(4)) { arg1->pad.pad = PG_GETARG_BOOL(4) ? 1 : 0; if (arg1->pad.pad && !PG_ARGISNULL(5)) { arg1->pad.hasnodata = 1; arg1->pad.nodataval = PG_GETARG_FLOAT8(5); } else { arg1->pad.hasnodata = 0; arg1->pad.nodataval = 0; } } else { arg1->pad.pad = 0; arg1->pad.hasnodata = 0; arg1->pad.nodataval = 0; } /* store some additional metadata */ arg1->raster.srid = rt_raster_get_srid(arg1->raster.raster); arg1->raster.width = rt_raster_get_width(arg1->raster.raster); arg1->raster.height = rt_raster_get_height(arg1->raster.raster); rt_raster_get_geotransform_matrix(arg1->raster.raster, arg1->raster.gt); /* determine maximum number of tiles from raster */ arg1->tile.nx = ceil(arg1->raster.width / (double) arg1->tile.width); arg1->tile.ny = ceil(arg1->raster.height / (double) arg1->tile.height); POSTGIS_RT_DEBUGF(4, "# of tiles (x, y) = (%d, %d)", arg1->tile.nx, arg1->tile.ny); /* Store needed information */ funcctx->user_fctx = arg1; /* total number of tuples to be returned */ funcctx->max_calls = (arg1->tile.nx * arg1->tile.ny); MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; arg2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { rt_pgraster *pgtile = NULL; rt_raster tile = NULL; rt_band _band = NULL; rt_band band = NULL; rt_pixtype pixtype = PT_END; int hasnodata = 0; double nodataval = 0; int width = 0; int height = 0; int k = 0; int tx = 0; int ty = 0; int rx = 0; int ry = 0; int ex = 0; /* edge tile on right */ int ey = 0; /* edge tile on bottom */ double ulx = 0; double uly = 0; uint16_t len = 0; void *vals = NULL; uint16_t nvals; POSTGIS_RT_DEBUGF(3, "call number %d", call_cntr); /* find offset based upon tile # 0 1 2 3 4 5 6 7 8 */ ty = call_cntr / arg2->tile.nx; tx = call_cntr % arg2->tile.nx; POSTGIS_RT_DEBUGF(4, "tile (x, y) = (%d, %d)", tx, ty); /* edge tile? only important if padding is false */ if (!arg2->pad.pad) { if (ty + 1 == arg2->tile.ny) ey = 1; if (tx + 1 == arg2->tile.nx) ex = 1; } /* upper-left of tile in raster coordinates */ rx = tx * arg2->tile.width; ry = ty * arg2->tile.height; POSTGIS_RT_DEBUGF(4, "raster coordinates = %d, %d", rx, ry); /* determine tile width and height */ /* default to user-defined */ width = arg2->tile.width; height = arg2->tile.height; /* override user-defined if edge tile (only possible if padding is false */ if (ex || ey) { /* right edge */ if (ex) width = arg2->raster.width - rx; /* bottom edge */ if (ey) height = arg2->raster.height - ry; } /* create empty raster */ tile = rt_raster_new(width, height); rt_raster_set_geotransform_matrix(tile, arg2->raster.gt); rt_raster_set_srid(tile, arg2->raster.srid); /* upper-left of tile in spatial coordinates */ if (rt_raster_cell_to_geopoint(arg2->raster.raster, rx, ry, &ulx, &uly, arg2->raster.gt) != ES_NONE) { rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not compute the coordinates of the upper-left corner of the output tile"); SRF_RETURN_DONE(funcctx); } rt_raster_set_offsets(tile, ulx, uly); POSTGIS_RT_DEBUGF(4, "spatial coordinates = %f, %f", ulx, uly); /* compute length of pixel line to read */ len = arg2->tile.width; if (rx + arg2->tile.width >= arg2->raster.width) len = arg2->raster.width - rx; POSTGIS_RT_DEBUGF(3, "read line len = %d", len); /* copy bands to tile */ for (i = 0; i < arg2->numbands; i++) { POSTGIS_RT_DEBUGF(4, "copying band %d to tile %d", arg2->nbands[i], call_cntr); _band = rt_raster_get_band(arg2->raster.raster, arg2->nbands[i]); if (_band == NULL) { int nband = arg2->nbands[i] + 1; rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not get band %d from source raster", nband); SRF_RETURN_DONE(funcctx); } pixtype = rt_band_get_pixtype(_band); hasnodata = rt_band_get_hasnodata_flag(_band); if (hasnodata) rt_band_get_nodata(_band, &nodataval); else if (arg2->pad.pad && arg2->pad.hasnodata) { hasnodata = 1; nodataval = arg2->pad.nodataval; } else nodataval = rt_band_get_min_value(_band); /* inline band */ if (!rt_band_is_offline(_band)) { if (rt_raster_generate_new_band(tile, pixtype, nodataval, hasnodata, nodataval, i) < 0) { rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not add new band to output tile"); SRF_RETURN_DONE(funcctx); } band = rt_raster_get_band(tile, i); if (band == NULL) { rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not get newly added band from output tile"); SRF_RETURN_DONE(funcctx); } /* if isnodata, set flag and continue */ if (rt_band_get_isnodata_flag(_band)) { rt_band_set_isnodata_flag(band, 1); continue; } /* copy data */ for (j = 0; j < arg2->tile.height; j++) { k = ry + j; if (k >= arg2->raster.height) { POSTGIS_RT_DEBUGF(4, "row %d is beyond extent of source raster. skipping", k); continue; } POSTGIS_RT_DEBUGF(4, "getting pixel line %d, %d for %d pixels", rx, k, len); if (rt_band_get_pixel_line(_band, rx, k, len, &vals, &nvals) != ES_NONE) { rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not get pixel line from source raster"); SRF_RETURN_DONE(funcctx); } if (nvals && rt_band_set_pixel_line(band, 0, j, vals, nvals) != ES_NONE) { rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not set pixel line of output tile"); SRF_RETURN_DONE(funcctx); } } } /* offline */ else { uint8_t bandnum = 0; rt_band_get_ext_band_num(_band, &bandnum); band = rt_band_new_offline( width, height, pixtype, hasnodata, nodataval, bandnum, rt_band_get_ext_path(_band) ); if (band == NULL) { rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not create new offline band for output tile"); SRF_RETURN_DONE(funcctx); } if (rt_raster_add_band(tile, band, i) < 0) { rt_band_destroy(band); rt_raster_destroy(tile); rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); elog(ERROR, "RASTER_tile: Could not add new offline band to output tile"); SRF_RETURN_DONE(funcctx); } } } pgtile = rt_raster_serialize(tile); rt_raster_destroy(tile); if (!pgtile) { rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); SRF_RETURN_DONE(funcctx); } SET_VARSIZE(pgtile, pgtile->size); SRF_RETURN_NEXT(funcctx, PointerGetDatum(pgtile)); } /* do when there is no more left */ else { rt_raster_destroy(arg2->raster.raster); if (arg2->numbands) pfree(arg2->nbands); pfree(arg2); SRF_RETURN_DONE(funcctx); } } /** * Copy a band from one raster to another one at the given position. */ PG_FUNCTION_INFO_V1(RASTER_copyBand); Datum RASTER_copyBand(PG_FUNCTION_ARGS) { rt_pgraster *pgto = NULL; rt_pgraster *pgfrom = NULL; rt_pgraster *pgrtn = NULL; rt_raster torast = NULL; rt_raster fromrast = NULL; int toindex = 0; int fromband = 0; int oldtorastnumbands = 0; int newtorastnumbands = 0; int newbandindex = 0; /* Deserialize torast */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgto = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); torast = rt_raster_deserialize(pgto, FALSE); if (!torast) { PG_FREE_IF_COPY(pgto, 0); elog(ERROR, "RASTER_copyBand: Could not deserialize first raster"); PG_RETURN_NULL(); } /* Deserialize fromrast */ if (!PG_ARGISNULL(1)) { pgfrom = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); fromrast = rt_raster_deserialize(pgfrom, FALSE); if (!fromrast) { rt_raster_destroy(torast); PG_FREE_IF_COPY(pgfrom, 1); PG_FREE_IF_COPY(pgto, 0); elog(ERROR, "RASTER_copyBand: Could not deserialize second raster"); PG_RETURN_NULL(); } oldtorastnumbands = rt_raster_get_num_bands(torast); if (PG_ARGISNULL(2)) fromband = 1; else fromband = PG_GETARG_INT32(2); if (PG_ARGISNULL(3)) toindex = oldtorastnumbands + 1; else toindex = PG_GETARG_INT32(3); /* Copy band fromrast torast */ newbandindex = rt_raster_copy_band( torast, fromrast, fromband - 1, toindex - 1 ); newtorastnumbands = rt_raster_get_num_bands(torast); if (newtorastnumbands == oldtorastnumbands || newbandindex == -1) { elog(NOTICE, "RASTER_copyBand: Could not add band to raster. " "Returning original raster." ); } rt_raster_destroy(fromrast); PG_FREE_IF_COPY(pgfrom, 1); } /* Serialize and return torast */ pgrtn = rt_raster_serialize(torast); rt_raster_destroy(torast); PG_FREE_IF_COPY(pgto, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Check if raster is empty or not */ PG_FUNCTION_INFO_V1(RASTER_isEmpty); Datum RASTER_isEmpty(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; bool isempty = FALSE; /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("RASTER_isEmpty: Could not deserialize raster"))); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } isempty = rt_raster_is_empty(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_BOOL(isempty); } /** * Check if the raster has a given band or not */ PG_FUNCTION_INFO_V1(RASTER_hasNoBand); Datum RASTER_hasNoBand(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; int bandindex = 0; bool hasnoband = FALSE; /* Deserialize raster */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); raster = rt_raster_deserialize(pgraster, TRUE); if ( ! raster ) { ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("RASTER_hasNoBand: Could not deserialize raster"))); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* Get band number */ bandindex = PG_GETARG_INT32(1); hasnoband = !rt_raster_has_band(raster, bandindex - 1); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_BOOL(hasnoband); } PG_FUNCTION_INFO_V1(RASTER_mapAlgebraExpr); Datum RASTER_mapAlgebraExpr(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_raster newrast = NULL; rt_band band = NULL; rt_band newband = NULL; int x, y, nband, width, height; double r; double newnodatavalue = 0.0; double newinitialvalue = 0.0; double newval = 0.0; char *newexpr = NULL; char *initexpr = NULL; char *expression = NULL; int hasnodataval = 0; double nodataval = 0.; rt_pixtype newpixeltype; int skipcomputation = 0; int len = 0; const int argkwcount = 3; enum KEYWORDS { kVAL=0, kX=1, kY=2 }; char *argkw[] = {"[rast]", "[rast.x]", "[rast.y]"}; Oid argkwtypes[] = { FLOAT8OID, INT4OID, INT4OID }; int argcount = 0; Oid argtype[] = { FLOAT8OID, INT4OID, INT4OID }; uint8_t argpos[3] = {0}; char place[5]; int idx = 0; int ret = -1; TupleDesc tupdesc; SPIPlanPtr spi_plan = NULL; SPITupleTable * tuptable = NULL; HeapTuple tuple; char * strFromText = NULL; Datum *values = NULL; Datum datum = (Datum)NULL; char *nulls = NULL; bool isnull = FALSE; int i = 0; int j = 0; POSTGIS_RT_DEBUG(2, "RASTER_mapAlgebraExpr: Starting..."); /* Check raster */ if (PG_ARGISNULL(0)) { elog(NOTICE, "Raster is NULL. Returning NULL"); PG_RETURN_NULL(); } /* Deserialize raster */ pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (NULL == raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraExpr: Could not deserialize raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: Getting arguments..."); if (PG_ARGISNULL(1)) nband = 1; else nband = PG_GETARG_INT32(1); if (nband < 1) nband = 1; POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: Creating new empty raster..."); /** * Create a new empty raster with having the same georeference as the * provided raster **/ width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); newrast = rt_raster_new(width, height); if ( NULL == newrast ) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraExpr: Could not create a new raster"); PG_RETURN_NULL(); } rt_raster_set_scale(newrast, rt_raster_get_x_scale(raster), rt_raster_get_y_scale(raster)); rt_raster_set_offsets(newrast, rt_raster_get_x_offset(raster), rt_raster_get_y_offset(raster)); rt_raster_set_skews(newrast, rt_raster_get_x_skew(raster), rt_raster_get_y_skew(raster)); rt_raster_set_srid(newrast, rt_raster_get_srid(raster)); /** * If this new raster is empty (width = 0 OR height = 0) then there is * nothing to compute and we return it right now **/ if (rt_raster_is_empty(newrast)) { elog(NOTICE, "Raster is empty. Returning an empty raster"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraExpr: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: Getting raster band %d...", nband); /** * Check if the raster has the required band. Otherwise, return a raster * without band **/ if (!rt_raster_has_band(raster, nband - 1)) { elog(NOTICE, "Raster does not have the required band. Returning a raster " "without a band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraExpr: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* Get the raster band */ band = rt_raster_get_band(raster, nband - 1); if ( NULL == band ) { elog(NOTICE, "Could not get the required band. Returning a raster " "without a band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraExpr: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* * Get NODATA value */ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: Getting NODATA value for band..."); if (rt_band_get_hasnodata_flag(band)) { rt_band_get_nodata(band, &newnodatavalue); } else { newnodatavalue = rt_band_get_min_value(band); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: NODATA value for band: = %f", newnodatavalue); /** * We set the initial value of the future band to nodata value. If nodata * value is null, then the raster will be initialized to * rt_band_get_min_value but all the values should be recomputed anyway **/ newinitialvalue = newnodatavalue; /** * Set the new pixeltype **/ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: Setting pixeltype..."); if (PG_ARGISNULL(2)) { newpixeltype = rt_band_get_pixtype(band); } else { strFromText = text_to_cstring(PG_GETARG_TEXT_P(2)); newpixeltype = rt_pixtype_index_from_name(strFromText); pfree(strFromText); if (newpixeltype == PT_END) newpixeltype = rt_band_get_pixtype(band); } if (newpixeltype == PT_END) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraExpr: Invalid pixeltype"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: Pixeltype set to %s", rt_pixtype_name(newpixeltype)); /* Construct expression for raster values */ if (!PG_ARGISNULL(3)) { expression = text_to_cstring(PG_GETARG_TEXT_P(3)); len = strlen("SELECT (") + strlen(expression) + strlen(")::double precision"); initexpr = (char *)palloc(len + 1); strncpy(initexpr, "SELECT (", strlen("SELECT (")); strncpy(initexpr + strlen("SELECT ("), expression, strlen(expression)); strncpy(initexpr + strlen("SELECT (") + strlen(expression), ")::double precision", strlen(")::double precision")); initexpr[len] = '\0'; POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: Expression is %s", initexpr); /* We don't need this memory */ /* pfree(expression); expression = NULL; */ } /** * Optimization: If a nodataval is provided, use it for newinitialvalue. * Then, we can initialize the raster with this value and skip the * computation of nodata values one by one in the main computing loop **/ if (!PG_ARGISNULL(4)) { hasnodataval = 1; nodataval = PG_GETARG_FLOAT8(4); newinitialvalue = nodataval; POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: new initial value = %f", newinitialvalue); } else hasnodataval = 0; /** * Optimization: If the raster is only filled with nodata values return * right now a raster filled with the newinitialvalue * TODO: Call rt_band_check_isnodata instead? **/ if (rt_band_get_isnodata_flag(band)) { POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: Band is a nodata band, returning " "a raster filled with nodata"); ret = rt_raster_generate_new_band(newrast, newpixeltype, newinitialvalue, TRUE, newnodatavalue, 0); /* Free memory */ if (initexpr) pfree(initexpr); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraExpr: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Optimization: If expression resume to 'RAST' and hasnodataval is zero, * we can just return the band from the original raster **/ if (initexpr != NULL && ( !strcmp(initexpr, "SELECT [rast]") || !strcmp(initexpr, "SELECT [rast.val]") ) && !hasnodataval) { POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: Expression resumes to RAST. " "Returning raster with band %d from original raster", nband); POSTGIS_RT_DEBUGF(4, "RASTER_mapAlgebraExpr: New raster has %d bands", rt_raster_get_num_bands(newrast)); rt_raster_copy_band(newrast, raster, nband - 1, 0); POSTGIS_RT_DEBUGF(4, "RASTER_mapAlgebraExpr: New raster now has %d bands", rt_raster_get_num_bands(newrast)); if (initexpr) pfree(initexpr); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraExpr: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Optimization: If expression resume to a constant (it does not contain * [rast) **/ if (initexpr != NULL && strstr(initexpr, "[rast") == NULL) { ret = SPI_connect(); if (ret != SPI_OK_CONNECT) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraExpr: Could not connect to the SPI manager"); PG_RETURN_NULL(); }; /* Execute the expresion into newval */ ret = SPI_execute(initexpr, FALSE, 0); if (ret != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { /* Free memory allocated out of the current context */ if (SPI_tuptable) SPI_freetuptable(tuptable); PG_FREE_IF_COPY(pgraster, 0); SPI_finish(); elog(ERROR, "RASTER_mapAlgebraExpr: Invalid construction for expression"); PG_RETURN_NULL(); } tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; newexpr = SPI_getvalue(tuple, tupdesc, 1); if ( ! newexpr ) { POSTGIS_RT_DEBUG(3, "Constant expression evaluated to NULL, keeping initvalue"); newval = newinitialvalue; } else { newval = atof(newexpr); } SPI_freetuptable(tuptable); POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: New raster value = %f", newval); SPI_finish(); skipcomputation = 1; /** * Compute the new value, set it and we will return after creating the * new raster **/ if (!hasnodataval) { newinitialvalue = newval; skipcomputation = 2; } /* Return the new raster as it will be before computing pixel by pixel */ else if (FLT_NEQ(newval, newinitialvalue)) { skipcomputation = 2; } } /** * Create the raster receiving all the computed values. Initialize it to the * new initial value **/ ret = rt_raster_generate_new_band(newrast, newpixeltype, newinitialvalue, TRUE, newnodatavalue, 0); /** * Optimization: If expression is NULL, or all the pixels could be set in * one step, return the initialized raster now **/ /*if (initexpr == NULL || skipcomputation == 2) {*/ if (expression == NULL || skipcomputation == 2) { /* Free memory */ if (initexpr) pfree(initexpr); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraExpr: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } RASTER_DEBUG(3, "RASTER_mapAlgebraExpr: Creating new raster band..."); /* Get the new raster band */ newband = rt_raster_get_band(newrast, 0); if ( NULL == newband ) { elog(NOTICE, "Could not modify band for new raster. Returning new " "raster with the original band"); if (initexpr) pfree(initexpr); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraExpr: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: Main computing loop (%d x %d)", width, height); if (initexpr != NULL) { /* Convert [rast.val] to [rast] */ newexpr = rtpg_strreplace(initexpr, "[rast.val]", "[rast]", NULL); pfree(initexpr); initexpr=newexpr; sprintf(place,"$1"); for (i = 0, j = 1; i < argkwcount; i++) { len = 0; newexpr = rtpg_strreplace(initexpr, argkw[i], place, &len); pfree(initexpr); initexpr=newexpr; if (len > 0) { argtype[argcount] = argkwtypes[i]; argcount++; argpos[i] = j++; sprintf(place, "$%d", j); } else { argpos[i] = 0; } } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: initexpr = %s", initexpr); /* define values */ values = (Datum *) palloc(sizeof(Datum) * argcount); if (values == NULL) { SPI_finish(); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraExpr: Could not allocate memory for value parameters of prepared statement"); PG_RETURN_NULL(); } /* define nulls */ nulls = (char *)palloc(argcount); if (nulls == NULL) { SPI_finish(); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraExpr: Could not allocate memory for null parameters of prepared statement"); PG_RETURN_NULL(); } /* Connect to SPI and prepare the expression */ ret = SPI_connect(); if (ret != SPI_OK_CONNECT) { if (initexpr) pfree(initexpr); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraExpr: Could not connect to the SPI manager"); PG_RETURN_NULL(); }; /* Type of all arguments is FLOAT8OID */ spi_plan = SPI_prepare(initexpr, argcount, argtype); if (spi_plan == NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); SPI_finish(); pfree(initexpr); elog(ERROR, "RASTER_mapAlgebraExpr: Could not prepare expression"); PG_RETURN_NULL(); } } for (x = 0; x < width; x++) { for(y = 0; y < height; y++) { ret = rt_band_get_pixel(band, x, y, &r, NULL); /** * We compute a value only for the withdata value pixel since the * nodata value has already been set by the first optimization **/ if (ret == ES_NONE && FLT_NEQ(r, newnodatavalue)) { if (skipcomputation == 0) { if (initexpr != NULL) { /* Reset the null arg flags. */ memset(nulls, 'n', argcount); for (i = 0; i < argkwcount; i++) { idx = argpos[i]; if (idx < 1) continue; idx--; if (i == kX ) { /* x is 0 based index, but SQL expects 1 based index */ values[idx] = Int32GetDatum(x+1); nulls[idx] = ' '; } else if (i == kY) { /* y is 0 based index, but SQL expects 1 based index */ values[idx] = Int32GetDatum(y+1); nulls[idx] = ' '; } else if (i == kVAL ) { values[idx] = Float8GetDatum(r); nulls[idx] = ' '; } } ret = SPI_execute_plan(spi_plan, values, nulls, FALSE, 0); if (ret != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_freeplan(spi_plan); SPI_finish(); pfree(values); pfree(nulls); pfree(initexpr); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraExpr: Error executing prepared plan"); PG_RETURN_NULL(); } tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isnull); if ( SPI_result == SPI_ERROR_NOATTRIBUTE ) { POSTGIS_RT_DEBUGF(3, "Expression for pixel %d,%d (value %g) errored, skip setting", x+1,y+1,r); newval = newinitialvalue; } else if ( isnull ) { POSTGIS_RT_DEBUGF(3, "Expression for pixel %d,%d (value %g) evaluated to NULL, skip setting", x+1,y+1,r); newval = newinitialvalue; } else { newval = DatumGetFloat8(datum); } SPI_freetuptable(tuptable); } else newval = newinitialvalue; POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraExpr: new value = %f", newval); } rt_band_set_pixel(newband, x, y, newval, NULL); } } } if (initexpr != NULL) { SPI_freeplan(spi_plan); SPI_finish(); pfree(values); pfree(nulls); pfree(initexpr); } else { POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: no SPI cleanup"); } /* The newrast band has been modified */ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: raster modified, serializing it."); /* Serialize created raster */ rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraExpr: raster serialized"); POSTGIS_RT_DEBUG(4, "RASTER_mapAlgebraExpr: returning raster"); PG_RETURN_POINTER(pgrtn); } /* * One raster user function MapAlgebra. */ PG_FUNCTION_INFO_V1(RASTER_mapAlgebraFct); Datum RASTER_mapAlgebraFct(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_raster newrast = NULL; rt_band band = NULL; rt_band newband = NULL; int x, y, nband, width, height; double r; double newnodatavalue = 0.0; double newinitialvalue = 0.0; double newval = 0.0; rt_pixtype newpixeltype; int ret = -1; Oid oid; FmgrInfo cbinfo; FunctionCallInfoData cbdata; Datum tmpnewval; char * strFromText = NULL; int k = 0; POSTGIS_RT_DEBUG(2, "RASTER_mapAlgebraFct: STARTING..."); /* Check raster */ if (PG_ARGISNULL(0)) { elog(WARNING, "Raster is NULL. Returning NULL"); PG_RETURN_NULL(); } /* Deserialize raster */ pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (NULL == raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraFct: Could not deserialize raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: Getting arguments..."); /* Get the rest of the arguments */ if (PG_ARGISNULL(1)) nband = 1; else nband = PG_GETARG_INT32(1); if (nband < 1) nband = 1; POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: Creating new empty raster..."); /** * Create a new empty raster with having the same georeference as the * provided raster **/ width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); newrast = rt_raster_new(width, height); if ( NULL == newrast ) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraFct: Could not create a new raster"); PG_RETURN_NULL(); } rt_raster_set_scale(newrast, rt_raster_get_x_scale(raster), rt_raster_get_y_scale(raster)); rt_raster_set_offsets(newrast, rt_raster_get_x_offset(raster), rt_raster_get_y_offset(raster)); rt_raster_set_skews(newrast, rt_raster_get_x_skew(raster), rt_raster_get_y_skew(raster)); rt_raster_set_srid(newrast, rt_raster_get_srid(raster)); /** * If this new raster is empty (width = 0 OR height = 0) then there is * nothing to compute and we return it right now **/ if (rt_raster_is_empty(newrast)) { elog(NOTICE, "Raster is empty. Returning an empty raster"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFct: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFct: Getting raster band %d...", nband); /** * Check if the raster has the required band. Otherwise, return a raster * without band **/ if (!rt_raster_has_band(raster, nband - 1)) { elog(NOTICE, "Raster does not have the required band. Returning a raster " "without a band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFct: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* Get the raster band */ band = rt_raster_get_band(raster, nband - 1); if ( NULL == band ) { elog(NOTICE, "Could not get the required band. Returning a raster " "without a band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFct: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* * Get NODATA value */ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: Getting NODATA value for band..."); if (rt_band_get_hasnodata_flag(band)) { rt_band_get_nodata(band, &newnodatavalue); } else { newnodatavalue = rt_band_get_min_value(band); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFct: NODATA value for band: %f", newnodatavalue); /** * We set the initial value of the future band to nodata value. If nodata * value is null, then the raster will be initialized to * rt_band_get_min_value but all the values should be recomputed anyway **/ newinitialvalue = newnodatavalue; /** * Set the new pixeltype **/ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: Setting pixeltype..."); if (PG_ARGISNULL(2)) { newpixeltype = rt_band_get_pixtype(band); } else { strFromText = text_to_cstring(PG_GETARG_TEXT_P(2)); newpixeltype = rt_pixtype_index_from_name(strFromText); pfree(strFromText); if (newpixeltype == PT_END) newpixeltype = rt_band_get_pixtype(band); } if (newpixeltype == PT_END) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFct: Invalid pixeltype"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFct: Pixeltype set to %s", rt_pixtype_name(newpixeltype)); /* Get the name of the callback user function for raster values */ if (PG_ARGISNULL(3)) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFct: Required function is missing. Returning NULL"); PG_RETURN_NULL(); } oid = PG_GETARG_OID(3); if (oid == InvalidOid) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFct: Got invalid function object id. Returning NULL"); PG_RETURN_NULL(); } fmgr_info(oid, &cbinfo); /* function cannot return set */ if (cbinfo.fn_retset) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFct: Function provided must return double precision not resultset"); PG_RETURN_NULL(); } /* function should have correct # of args */ else if (cbinfo.fn_nargs < 2 || cbinfo.fn_nargs > 3) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFct: Function does not have two or three input parameters"); PG_RETURN_NULL(); } if (cbinfo.fn_nargs == 2) k = 1; else k = 2; if (func_volatile(oid) == 'v') { elog(NOTICE, "Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE"); } /* prep function call data */ #if POSTGIS_PGSQL_VERSION <= 90 InitFunctionCallInfoData(cbdata, &cbinfo, 2, InvalidOid, NULL); #else InitFunctionCallInfoData(cbdata, &cbinfo, 2, InvalidOid, NULL, NULL); #endif memset(cbdata.argnull, FALSE, sizeof(bool) * cbinfo.fn_nargs); /* check that the function isn't strict if the args are null. */ if (PG_ARGISNULL(4)) { if (cbinfo.fn_strict) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFct: Strict callback functions cannot have null parameters"); PG_RETURN_NULL(); } cbdata.arg[k] = (Datum)NULL; cbdata.argnull[k] = TRUE; } else { cbdata.arg[k] = PG_GETARG_DATUM(4); } /** * Optimization: If the raster is only filled with nodata values return * right now a raster filled with the nodatavalueexpr * TODO: Call rt_band_check_isnodata instead? **/ if (rt_band_get_isnodata_flag(band)) { POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: Band is a nodata band, returning " "a raster filled with nodata"); ret = rt_raster_generate_new_band(newrast, newpixeltype, newinitialvalue, TRUE, newnodatavalue, 0); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFct: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Create the raster receiving all the computed values. Initialize it to the * new initial value **/ ret = rt_raster_generate_new_band(newrast, newpixeltype, newinitialvalue, TRUE, newnodatavalue, 0); /* Get the new raster band */ newband = rt_raster_get_band(newrast, 0); if ( NULL == newband ) { elog(NOTICE, "Could not modify band for new raster. Returning new " "raster with the original band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFct: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFct: Main computing loop (%d x %d)", width, height); for (x = 0; x < width; x++) { for(y = 0; y < height; y++) { ret = rt_band_get_pixel(band, x, y, &r, NULL); /** * We compute a value only for the withdata value pixel since the * nodata value has already been set by the first optimization **/ if (ret == ES_NONE) { if (FLT_EQ(r, newnodatavalue)) { if (cbinfo.fn_strict) { POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: Strict callbacks cannot accept NULL arguments, skipping NODATA cell."); continue; } cbdata.argnull[0] = TRUE; cbdata.arg[0] = (Datum)NULL; } else { cbdata.argnull[0] = FALSE; cbdata.arg[0] = Float8GetDatum(r); } /* Add pixel positions if callback has proper # of args */ if (cbinfo.fn_nargs == 3) { Datum d[2]; ArrayType *a; d[0] = Int32GetDatum(x+1); d[1] = Int32GetDatum(y+1); a = construct_array(d, 2, INT4OID, sizeof(int32), true, 'i'); cbdata.argnull[1] = FALSE; cbdata.arg[1] = PointerGetDatum(a); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFct: (%dx%d), r = %f", x, y, r); tmpnewval = FunctionCallInvoke(&cbdata); if (cbdata.isnull) { newval = newnodatavalue; } else { newval = DatumGetFloat8(tmpnewval); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFct: new value = %f", newval); rt_band_set_pixel(newband, x, y, newval, NULL); } } } /* The newrast band has been modified */ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: raster modified, serializing it."); /* Serialize created raster */ rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) PG_RETURN_NULL(); POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFct: raster serialized"); POSTGIS_RT_DEBUG(4, "RASTER_mapAlgebraFct: returning raster"); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Return new raster from selected bands of existing raster through ST_Band. * second argument is an array of band numbers (1 based) */ PG_FUNCTION_INFO_V1(RASTER_band); Datum RASTER_band(PG_FUNCTION_ARGS) { rt_pgraster *pgraster; rt_pgraster *pgrast; rt_raster raster; rt_raster rast; bool skip = FALSE; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; uint32_t numBands; uint32_t *bandNums; uint32 idx = 0; int n; int i = 0; int j = 0; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_band: Could not deserialize raster"); PG_RETURN_NULL(); } /* process bandNums */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Band number(s) not provided. Returning original raster"); skip = TRUE; } do { if (skip) break; numBands = rt_raster_get_num_bands(raster); array = PG_GETARG_ARRAYTYPE_P(1); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case INT2OID: case INT4OID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_band: Invalid data type for band number(s)"); PG_RETURN_NULL(); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); bandNums = palloc(sizeof(uint32_t) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case INT2OID: idx = (uint32_t) DatumGetInt16(e[i]); break; case INT4OID: idx = (uint32_t) DatumGetInt32(e[i]); break; } POSTGIS_RT_DEBUGF(3, "band idx (before): %d", idx); if (idx > numBands || idx < 1) { elog(NOTICE, "Invalid band index (must use 1-based). Returning original raster"); skip = TRUE; break; } bandNums[j] = idx - 1; POSTGIS_RT_DEBUGF(3, "bandNums[%d] = %d", j, bandNums[j]); j++; } if (skip || j < 1) { pfree(bandNums); skip = TRUE; } } while (0); if (!skip) { rast = rt_raster_from_band(raster, bandNums, j); pfree(bandNums); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!rast) { elog(ERROR, "RASTER_band: Could not create new raster"); PG_RETURN_NULL(); } pgrast = rt_raster_serialize(rast); rt_raster_destroy(rast); if (!pgrast) PG_RETURN_NULL(); SET_VARSIZE(pgrast, pgrast->size); PG_RETURN_POINTER(pgrast); } PG_RETURN_POINTER(pgraster); } /** * Get summary stats of a band */ PG_FUNCTION_INFO_V1(RASTER_summaryStats); Datum RASTER_summaryStats(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex = 1; bool exclude_nodata_value = TRUE; int num_bands = 0; double sample = 0; rt_bandstats stats = NULL; TupleDesc tupdesc; int values_length = 6; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_summaryStats: Could not deserialize raster"); PG_RETURN_NULL(); } /* band index is 1-based */ if (!PG_ARGISNULL(1)) bandindex = PG_GETARG_INT32(1); num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* exclude_nodata_value flag */ if (!PG_ARGISNULL(2)) exclude_nodata_value = PG_GETARG_BOOL(2); /* sample % */ if (!PG_ARGISNULL(3)) { sample = PG_GETARG_FLOAT8(3); if (sample < 0 || sample > 1) { elog(NOTICE, "Invalid sample percentage (must be between 0 and 1). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } else if (FLT_EQ(sample, 0.0)) sample = 1; } else sample = 1; /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } /* we don't need the raw values, hence the zero parameter */ stats = rt_band_get_summary_stats(band, (int) exclude_nodata_value, sample, 0, NULL, NULL, NULL); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (NULL == stats) { elog(NOTICE, "Could not compute summary statistics for band at index %d. Returning NULL", bandindex); PG_RETURN_NULL(); } /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Int64GetDatum(stats->count); if (stats->count > 0) { values[1] = Float8GetDatum(stats->sum); values[2] = Float8GetDatum(stats->mean); values[3] = Float8GetDatum(stats->stddev); values[4] = Float8GetDatum(stats->min); values[5] = Float8GetDatum(stats->max); } else { nulls[1] = TRUE; nulls[2] = TRUE; nulls[3] = TRUE; nulls[4] = TRUE; nulls[5] = TRUE; } /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); /* clean up */ pfree(stats); PG_RETURN_DATUM(result); } /** * Get summary stats of a coverage for a specific band */ PG_FUNCTION_INFO_V1(RASTER_summaryStatsCoverage); Datum RASTER_summaryStatsCoverage(PG_FUNCTION_ARGS) { text *tablenametext = NULL; char *tablename = NULL; text *colnametext = NULL; char *colname = NULL; int32_t bandindex = 1; bool exclude_nodata_value = TRUE; double sample = 0; int len = 0; char *sql = NULL; int spi_result; Portal portal; TupleDesc tupdesc; SPITupleTable *tuptable = NULL; HeapTuple tuple; Datum datum; bool isNull = FALSE; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int num_bands = 0; uint64_t cK = 0; double cM = 0; double cQ = 0; rt_bandstats stats = NULL; rt_bandstats rtn = NULL; int values_length = 6; Datum values[values_length]; bool nulls[values_length]; Datum result; /* tablename is null, return null */ if (PG_ARGISNULL(0)) { elog(NOTICE, "Table name must be provided"); PG_RETURN_NULL(); } tablenametext = PG_GETARG_TEXT_P(0); tablename = text_to_cstring(tablenametext); if (!strlen(tablename)) { elog(NOTICE, "Table name must be provided"); PG_RETURN_NULL(); } /* column name is null, return null */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Column name must be provided"); PG_RETURN_NULL(); } colnametext = PG_GETARG_TEXT_P(1); colname = text_to_cstring(colnametext); if (!strlen(colname)) { elog(NOTICE, "Column name must be provided"); PG_RETURN_NULL(); } /* band index is 1-based */ if (!PG_ARGISNULL(2)) bandindex = PG_GETARG_INT32(2); /* exclude_nodata_value flag */ if (!PG_ARGISNULL(3)) exclude_nodata_value = PG_GETARG_BOOL(3); /* sample % */ if (!PG_ARGISNULL(4)) { sample = PG_GETARG_FLOAT8(4); if (sample < 0 || sample > 1) { elog(NOTICE, "Invalid sample percentage (must be between 0 and 1). Returning NULL"); rt_raster_destroy(raster); PG_RETURN_NULL(); } else if (FLT_EQ(sample, 0.0)) sample = 1; } else sample = 1; /* iterate through rasters of coverage */ /* connect to database */ spi_result = SPI_connect(); if (spi_result != SPI_OK_CONNECT) { pfree(sql); elog(ERROR, "RASTER_summaryStatsCoverage: Could not connect to database using SPI"); PG_RETURN_NULL(); } /* create sql */ len = sizeof(char) * (strlen("SELECT \"\" FROM \"\" WHERE \"\" IS NOT NULL") + (strlen(colname) * 2) + strlen(tablename) + 1); sql = (char *) palloc(len); if (NULL == sql) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); elog(ERROR, "RASTER_summaryStatsCoverage: Could not allocate memory for sql"); PG_RETURN_NULL(); } /* get cursor */ snprintf(sql, len, "SELECT \"%s\" FROM \"%s\" WHERE \"%s\" IS NOT NULL", colname, tablename, colname); portal = SPI_cursor_open_with_args( "coverage", sql, 0, NULL, NULL, NULL, TRUE, 0 ); pfree(sql); /* process resultset */ SPI_cursor_fetch(portal, TRUE, 1); while (SPI_processed == 1 && SPI_tuptable != NULL) { tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isNull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != rtn) pfree(rtn); elog(ERROR, "RASTER_summaryStatsCoverage: Could not get raster of coverage"); PG_RETURN_NULL(); } else if (isNull) { SPI_cursor_fetch(portal, TRUE, 1); continue; } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(datum); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != rtn) pfree(rtn); elog(ERROR, "RASTER_summaryStatsCoverage: Could not deserialize raster"); PG_RETURN_NULL(); } /* inspect number of bands */ num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != rtn) pfree(rtn); PG_RETURN_NULL(); } /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != rtn) pfree(rtn); PG_RETURN_NULL(); } /* we don't need the raw values, hence the zero parameter */ stats = rt_band_get_summary_stats(band, (int) exclude_nodata_value, sample, 0, &cK, &cM, &cQ); rt_band_destroy(band); rt_raster_destroy(raster); if (NULL == stats) { elog(NOTICE, "Could not compute summary statistics for band at index %d. Returning NULL", bandindex); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != rtn) pfree(rtn); PG_RETURN_NULL(); } /* initialize rtn */ if (stats->count > 0) { if (NULL == rtn) { rtn = (rt_bandstats) SPI_palloc(sizeof(struct rt_bandstats_t)); if (NULL == rtn) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); elog(ERROR, "RASTER_summaryStatsCoverage: Could not allocate memory for summary stats of coverage"); PG_RETURN_NULL(); } rtn->sample = stats->sample; rtn->count = stats->count; rtn->min = stats->min; rtn->max = stats->max; rtn->sum = stats->sum; rtn->mean = stats->mean; rtn->stddev = -1; rtn->values = NULL; rtn->sorted = 0; } else { rtn->count += stats->count; rtn->sum += stats->sum; if (stats->min < rtn->min) rtn->min = stats->min; if (stats->max > rtn->max) rtn->max = stats->max; } } pfree(stats); /* next record */ SPI_cursor_fetch(portal, TRUE, 1); } if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL == rtn) { elog(ERROR, "RASTER_summaryStatsCoverage: Could not compute coverage summary stats"); PG_RETURN_NULL(); } /* coverage mean and deviation */ rtn->mean = rtn->sum / rtn->count; /* sample deviation */ if (rtn->sample > 0 && rtn->sample < 1) rtn->stddev = sqrt(cQ / (rtn->count - 1)); /* standard deviation */ else rtn->stddev = sqrt(cQ / rtn->count); /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Int64GetDatum(rtn->count); if (rtn->count > 0) { values[1] = Float8GetDatum(rtn->sum); values[2] = Float8GetDatum(rtn->mean); values[3] = Float8GetDatum(rtn->stddev); values[4] = Float8GetDatum(rtn->min); values[5] = Float8GetDatum(rtn->max); } else { nulls[1] = TRUE; nulls[2] = TRUE; nulls[3] = TRUE; nulls[4] = TRUE; nulls[5] = TRUE; } /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); /* clean up */ pfree(rtn); PG_RETURN_DATUM(result); } /** * Returns histogram for a band */ PG_FUNCTION_INFO_V1(RASTER_histogram); Datum RASTER_histogram(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int i; rt_histogram hist; rt_histogram hist2; int call_cntr; int max_calls; /* first call of function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex = 1; int num_bands = 0; bool exclude_nodata_value = TRUE; double sample = 0; uint32_t bin_count = 0; double *bin_width = NULL; uint32_t bin_width_count = 0; double width = 0; bool right = FALSE; double min = 0; double max = 0; rt_bandstats stats = NULL; uint32_t count; int j; int n; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; POSTGIS_RT_DEBUG(3, "RASTER_histogram: Starting"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* pgraster is null, return nothing */ if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogram: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* band index is 1-based */ if (!PG_ARGISNULL(1)) bandindex = PG_GETARG_INT32(1); num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* exclude_nodata_value flag */ if (!PG_ARGISNULL(2)) exclude_nodata_value = PG_GETARG_BOOL(2); /* sample % */ if (!PG_ARGISNULL(3)) { sample = PG_GETARG_FLOAT8(3); if (sample < 0 || sample > 1) { elog(NOTICE, "Invalid sample percentage (must be between 0 and 1). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } else if (FLT_EQ(sample, 0.0)) sample = 1; } else sample = 1; /* bin_count */ if (!PG_ARGISNULL(4)) { bin_count = PG_GETARG_INT32(4); if (bin_count < 1) bin_count = 0; } /* bin_width */ if (!PG_ARGISNULL(5)) { array = PG_GETARG_ARRAYTYPE_P(5); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogram: Invalid data type for width"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); bin_width = palloc(sizeof(double) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case FLOAT4OID: width = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: width = (double) DatumGetFloat8(e[i]); break; } if (width < 0 || FLT_EQ(width, 0.0)) { elog(NOTICE, "Invalid value for width (must be greater than 0). Returning NULL"); pfree(bin_width); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } bin_width[j] = width; POSTGIS_RT_DEBUGF(5, "bin_width[%d] = %f", j, bin_width[j]); j++; } bin_width_count = j; if (j < 1) { pfree(bin_width); bin_width = NULL; } } /* right */ if (!PG_ARGISNULL(6)) right = PG_GETARG_BOOL(6); /* min */ if (!PG_ARGISNULL(7)) min = PG_GETARG_FLOAT8(7); /* max */ if (!PG_ARGISNULL(8)) max = PG_GETARG_FLOAT8(8); /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get stats */ stats = rt_band_get_summary_stats(band, (int) exclude_nodata_value, sample, 1, NULL, NULL, NULL); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (NULL == stats || NULL == stats->values) { elog(NOTICE, "Could not compute summary statistics for band at index %d", bandindex); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } else if (stats->count < 1) { elog(NOTICE, "Could not compute histogram for band at index %d as the band has no values", bandindex); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get histogram */ hist = rt_band_get_histogram(stats, bin_count, bin_width, bin_width_count, right, min, max, &count); if (bin_width_count) pfree(bin_width); pfree(stats); if (NULL == hist || !count) { elog(NOTICE, "Could not compute histogram for band at index %d", bandindex); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "%d bins returned", count); /* Store needed information */ funcctx->user_fctx = hist; /* total number of tuples to be returned */ funcctx->max_calls = count; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; hist2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 4; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUGF(3, "Result %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Float8GetDatum(hist2[call_cntr].min); values[1] = Float8GetDatum(hist2[call_cntr].max); values[2] = Int64GetDatum(hist2[call_cntr].count); values[3] = Float8GetDatum(hist2[call_cntr].percent); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(hist2); SRF_RETURN_DONE(funcctx); } } /** * Returns histogram of a coverage for a specified band */ PG_FUNCTION_INFO_V1(RASTER_histogramCoverage); Datum RASTER_histogramCoverage(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int i; rt_histogram covhist = NULL; rt_histogram covhist2; int call_cntr; int max_calls; POSTGIS_RT_DEBUG(3, "RASTER_histogramCoverage: Starting"); /* first call of function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; text *tablenametext = NULL; char *tablename = NULL; text *colnametext = NULL; char *colname = NULL; int32_t bandindex = 1; bool exclude_nodata_value = TRUE; double sample = 0; uint32_t bin_count = 0; double *bin_width = NULL; uint32_t bin_width_count = 0; double width = 0; bool right = FALSE; uint32_t count; int len = 0; char *sql = NULL; char *tmp = NULL; double min = 0; double max = 0; int spi_result; Portal portal; SPITupleTable *tuptable = NULL; HeapTuple tuple; Datum datum; bool isNull = FALSE; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int num_bands = 0; rt_bandstats stats = NULL; rt_histogram hist; uint64_t sum = 0; int j; int n; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; POSTGIS_RT_DEBUG(3, "RASTER_histogramCoverage: first call of function"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* tablename is null, return null */ if (PG_ARGISNULL(0)) { elog(NOTICE, "Table name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } tablenametext = PG_GETARG_TEXT_P(0); tablename = text_to_cstring(tablenametext); if (!strlen(tablename)) { elog(NOTICE, "Table name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "RASTER_histogramCoverage: tablename = %s", tablename); /* column name is null, return null */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Column name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } colnametext = PG_GETARG_TEXT_P(1); colname = text_to_cstring(colnametext); if (!strlen(colname)) { elog(NOTICE, "Column name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "RASTER_histogramCoverage: colname = %s", colname); /* band index is 1-based */ if (!PG_ARGISNULL(2)) bandindex = PG_GETARG_INT32(2); /* exclude_nodata_value flag */ if (!PG_ARGISNULL(3)) exclude_nodata_value = PG_GETARG_BOOL(3); /* sample % */ if (!PG_ARGISNULL(4)) { sample = PG_GETARG_FLOAT8(4); if (sample < 0 || sample > 1) { elog(NOTICE, "Invalid sample percentage (must be between 0 and 1). Returning NULL"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } else if (FLT_EQ(sample, 0.0)) sample = 1; } else sample = 1; /* bin_count */ if (!PG_ARGISNULL(5)) { bin_count = PG_GETARG_INT32(5); if (bin_count < 1) bin_count = 0; } /* bin_width */ if (!PG_ARGISNULL(6)) { array = PG_GETARG_ARRAYTYPE_P(6); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Invalid data type for width"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); bin_width = palloc(sizeof(double) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case FLOAT4OID: width = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: width = (double) DatumGetFloat8(e[i]); break; } if (width < 0 || FLT_EQ(width, 0.0)) { elog(NOTICE, "Invalid value for width (must be greater than 0). Returning NULL"); pfree(bin_width); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } bin_width[j] = width; POSTGIS_RT_DEBUGF(5, "bin_width[%d] = %f", j, bin_width[j]); j++; } bin_width_count = j; if (j < 1) { pfree(bin_width); bin_width = NULL; } } /* right */ if (!PG_ARGISNULL(7)) right = PG_GETARG_BOOL(7); /* connect to database */ spi_result = SPI_connect(); if (spi_result != SPI_OK_CONNECT) { if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not connect to database using SPI"); SRF_RETURN_DONE(funcctx); } /* coverage stats */ len = sizeof(char) * (strlen("SELECT min, max FROM _st_summarystats('','',,::boolean,)") + strlen(tablename) + strlen(colname) + (MAX_INT_CHARLEN * 2) + MAX_DBL_CHARLEN + 1); sql = (char *) palloc(len); if (NULL == sql) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not allocate memory for sql"); SRF_RETURN_DONE(funcctx); } /* get stats */ snprintf(sql, len, "SELECT min, max FROM _st_summarystats('%s','%s',%d,%d::boolean,%f)", tablename, colname, bandindex, (exclude_nodata_value ? 1 : 0), sample); POSTGIS_RT_DEBUGF(3, "RASTER_histogramCoverage: %s", sql); spi_result = SPI_execute(sql, TRUE, 0); pfree(sql); if (spi_result != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not get summary stats of coverage"); SRF_RETURN_DONE(funcctx); } tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; tmp = SPI_getvalue(tuple, tupdesc, 1); if (NULL == tmp || !strlen(tmp)) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not get summary stats of coverage"); SRF_RETURN_DONE(funcctx); } min = strtod(tmp, NULL); POSTGIS_RT_DEBUGF(3, "RASTER_histogramCoverage: min = %f", min); pfree(tmp); tmp = SPI_getvalue(tuple, tupdesc, 2); if (NULL == tmp || !strlen(tmp)) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not get summary stats of coverage"); SRF_RETURN_DONE(funcctx); } max = strtod(tmp, NULL); POSTGIS_RT_DEBUGF(3, "RASTER_histogramCoverage: max = %f", max); pfree(tmp); /* iterate through rasters of coverage */ /* create sql */ len = sizeof(char) * (strlen("SELECT \"\" FROM \"\" WHERE \"\" IS NOT NULL") + (strlen(colname) * 2) + strlen(tablename) + 1); sql = (char *) palloc(len); if (NULL == sql) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not allocate memory for sql"); SRF_RETURN_DONE(funcctx); } /* get cursor */ snprintf(sql, len, "SELECT \"%s\" FROM \"%s\" WHERE \"%s\" IS NOT NULL", colname, tablename, colname); POSTGIS_RT_DEBUGF(3, "RASTER_histogramCoverage: %s", sql); portal = SPI_cursor_open_with_args( "coverage", sql, 0, NULL, NULL, NULL, TRUE, 0 ); pfree(sql); /* process resultset */ SPI_cursor_fetch(portal, TRUE, 1); while (SPI_processed == 1 && SPI_tuptable != NULL) { tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isNull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covhist) pfree(covhist); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not get raster of coverage"); SRF_RETURN_DONE(funcctx); } else if (isNull) { SPI_cursor_fetch(portal, TRUE, 1); continue; } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(datum); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covhist) pfree(covhist); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* inspect number of bands*/ num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covhist) pfree(covhist); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covhist) pfree(covhist); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* we need the raw values, hence the non-zero parameter */ stats = rt_band_get_summary_stats(band, (int) exclude_nodata_value, sample, 1, NULL, NULL, NULL); rt_band_destroy(band); rt_raster_destroy(raster); if (NULL == stats) { elog(NOTICE, "Could not compute summary statistics for band at index %d. Returning NULL", bandindex); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covhist) pfree(covhist); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get histogram */ if (stats->count > 0) { hist = rt_band_get_histogram(stats, bin_count, bin_width, bin_width_count, right, min, max, &count); pfree(stats); if (NULL == hist || !count) { elog(NOTICE, "Could not compute histogram for band at index %d", bandindex); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covhist) pfree(covhist); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "%d bins returned", count); /* coverage histogram */ if (NULL == covhist) { covhist = (rt_histogram) SPI_palloc(sizeof(struct rt_histogram_t) * count); if (NULL == covhist) { pfree(hist); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (bin_width_count) pfree(bin_width); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_histogramCoverage: Could not allocate memory for histogram of coverage"); SRF_RETURN_DONE(funcctx); } for (i = 0; i < count; i++) { sum += hist[i].count; covhist[i].count = hist[i].count; covhist[i].percent = 0; covhist[i].min = hist[i].min; covhist[i].max = hist[i].max; } } else { for (i = 0; i < count; i++) { sum += hist[i].count; covhist[i].count += hist[i].count; } } pfree(hist); /* assuming bin_count wasn't set, force consistency */ if (bin_count <= 0) bin_count = count; } /* next record */ SPI_cursor_fetch(portal, TRUE, 1); } if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (bin_width_count) pfree(bin_width); /* finish percent of histogram */ if (sum > 0) { for (i = 0; i < count; i++) covhist[i].percent = covhist[i].count / (double) sum; } /* Store needed information */ funcctx->user_fctx = covhist; /* total number of tuples to be returned */ funcctx->max_calls = count; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; covhist2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 4; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUGF(3, "Result %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Float8GetDatum(covhist2[call_cntr].min); values[1] = Float8GetDatum(covhist2[call_cntr].max); values[2] = Int64GetDatum(covhist2[call_cntr].count); values[3] = Float8GetDatum(covhist2[call_cntr].percent); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(covhist2); SRF_RETURN_DONE(funcctx); } } /** * Returns quantiles for a band */ PG_FUNCTION_INFO_V1(RASTER_quantile); Datum RASTER_quantile(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int i; rt_quantile quant; rt_quantile quant2; int call_cntr; int max_calls; /* first call of function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex = 0; int num_bands = 0; bool exclude_nodata_value = TRUE; double sample = 0; double *quantiles = NULL; uint32_t quantiles_count = 0; double quantile = 0; rt_bandstats stats = NULL; uint32_t count; int j; int n; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* pgraster is null, return nothing */ if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantile: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* band index is 1-based */ bandindex = PG_GETARG_INT32(1); num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* exclude_nodata_value flag */ if (!PG_ARGISNULL(2)) exclude_nodata_value = PG_GETARG_BOOL(2); /* sample % */ if (!PG_ARGISNULL(3)) { sample = PG_GETARG_FLOAT8(3); if (sample < 0 || sample > 1) { elog(NOTICE, "Invalid sample percentage (must be between 0 and 1). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } else if (FLT_EQ(sample, 0.0)) sample = 1; } else sample = 1; /* quantiles */ if (!PG_ARGISNULL(4)) { array = PG_GETARG_ARRAYTYPE_P(4); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantile: Invalid data type for quantiles"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); quantiles = palloc(sizeof(double) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case FLOAT4OID: quantile = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: quantile = (double) DatumGetFloat8(e[i]); break; } if (quantile < 0 || quantile > 1) { elog(NOTICE, "Invalid value for quantile (must be between 0 and 1). Returning NULL"); pfree(quantiles); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } quantiles[j] = quantile; POSTGIS_RT_DEBUGF(5, "quantiles[%d] = %f", j, quantiles[j]); j++; } quantiles_count = j; if (j < 1) { pfree(quantiles); quantiles = NULL; } } /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get stats */ stats = rt_band_get_summary_stats(band, (int) exclude_nodata_value, sample, 1, NULL, NULL, NULL); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (NULL == stats || NULL == stats->values) { elog(NOTICE, "Could not retrieve summary statistics for band at index %d", bandindex); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } else if (stats->count < 1) { elog(NOTICE, "Could not compute quantiles for band at index %d as the band has no values", bandindex); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get quantiles */ quant = rt_band_get_quantiles(stats, quantiles, quantiles_count, &count); if (quantiles_count) pfree(quantiles); pfree(stats); if (NULL == quant || !count) { elog(NOTICE, "Could not compute quantiles for band at index %d", bandindex); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "%d quantiles returned", count); /* Store needed information */ funcctx->user_fctx = quant; /* total number of tuples to be returned */ funcctx->max_calls = count; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; quant2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 2; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUGF(3, "Result %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Float8GetDatum(quant2[call_cntr].quantile); values[1] = Float8GetDatum(quant2[call_cntr].value); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(quant2); SRF_RETURN_DONE(funcctx); } } /** * Returns selected quantiles of a coverage for a specified band */ PG_FUNCTION_INFO_V1(RASTER_quantileCoverage); Datum RASTER_quantileCoverage(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int i; rt_quantile covquant = NULL; rt_quantile covquant2; int call_cntr; int max_calls; POSTGIS_RT_DEBUG(3, "RASTER_quantileCoverage: Starting"); /* first call of function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; text *tablenametext = NULL; char *tablename = NULL; text *colnametext = NULL; char *colname = NULL; int32_t bandindex = 1; bool exclude_nodata_value = TRUE; double sample = 0; double *quantiles = NULL; uint32_t quantiles_count = 0; double quantile = 0; uint32_t count; int len = 0; char *sql = NULL; char *tmp = NULL; uint64_t cov_count = 0; int spi_result; Portal portal; SPITupleTable *tuptable = NULL; HeapTuple tuple; Datum datum; bool isNull = FALSE; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int num_bands = 0; struct quantile_llist *qlls = NULL; uint32_t qlls_count; int j; int n; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; POSTGIS_RT_DEBUG(3, "RASTER_quantileCoverage: first call of function"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* tablename is null, return null */ if (PG_ARGISNULL(0)) { elog(NOTICE, "Table name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } tablenametext = PG_GETARG_TEXT_P(0); tablename = text_to_cstring(tablenametext); if (!strlen(tablename)) { elog(NOTICE, "Table name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "RASTER_quantileCoverage: tablename = %s", tablename); /* column name is null, return null */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Column name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } colnametext = PG_GETARG_TEXT_P(1); colname = text_to_cstring(colnametext); if (!strlen(colname)) { elog(NOTICE, "Column name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "RASTER_quantileCoverage: colname = %s", colname); /* band index is 1-based */ if (!PG_ARGISNULL(2)) bandindex = PG_GETARG_INT32(2); /* exclude_nodata_value flag */ if (!PG_ARGISNULL(3)) exclude_nodata_value = PG_GETARG_BOOL(3); /* sample % */ if (!PG_ARGISNULL(4)) { sample = PG_GETARG_FLOAT8(4); if (sample < 0 || sample > 1) { elog(NOTICE, "Invalid sample percentage (must be between 0 and 1). Returning NULL"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } else if (FLT_EQ(sample, 0.0)) sample = 1; } else sample = 1; /* quantiles */ if (!PG_ARGISNULL(5)) { array = PG_GETARG_ARRAYTYPE_P(5); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Invalid data type for quantiles"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); quantiles = palloc(sizeof(double) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case FLOAT4OID: quantile = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: quantile = (double) DatumGetFloat8(e[i]); break; } if (quantile < 0 || quantile > 1) { elog(NOTICE, "Invalid value for quantile (must be between 0 and 1). Returning NULL"); pfree(quantiles); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } quantiles[j] = quantile; POSTGIS_RT_DEBUGF(5, "quantiles[%d] = %f", j, quantiles[j]); j++; } quantiles_count = j; if (j < 1) { pfree(quantiles); quantiles = NULL; } } /* coverage stats */ /* connect to database */ spi_result = SPI_connect(); if (spi_result != SPI_OK_CONNECT) { MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Could not connect to database using SPI"); SRF_RETURN_DONE(funcctx); } len = sizeof(char) * (strlen("SELECT count FROM _st_summarystats('','',,::boolean,)") + strlen(tablename) + strlen(colname) + (MAX_INT_CHARLEN * 2) + MAX_DBL_CHARLEN + 1); sql = (char *) palloc(len); if (NULL == sql) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Could not allocate memory for sql"); SRF_RETURN_DONE(funcctx); } /* get stats */ snprintf(sql, len, "SELECT count FROM _st_summarystats('%s','%s',%d,%d::boolean,%f)", tablename, colname, bandindex, (exclude_nodata_value ? 1 : 0), sample); POSTGIS_RT_DEBUGF(3, "stats sql: %s", sql); spi_result = SPI_execute(sql, TRUE, 0); pfree(sql); if (spi_result != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Could not get summary stats of coverage"); SRF_RETURN_DONE(funcctx); } tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; tmp = SPI_getvalue(tuple, tupdesc, 1); if (NULL == tmp || !strlen(tmp)) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Could not get summary stats of coverage"); SRF_RETURN_DONE(funcctx); } cov_count = strtol(tmp, NULL, 10); POSTGIS_RT_DEBUGF(3, "covcount = %d", (int) cov_count); pfree(tmp); /* iterate through rasters of coverage */ /* create sql */ len = sizeof(char) * (strlen("SELECT \"\" FROM \"\" WHERE \"\" IS NOT NULL") + (strlen(colname) * 2) + strlen(tablename) + 1); sql = (char *) palloc(len); if (NULL == sql) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Could not allocate memory for sql"); SRF_RETURN_DONE(funcctx); } /* get cursor */ snprintf(sql, len, "SELECT \"%s\" FROM \"%s\" WHERE \"%s\" IS NOT NULL", colname, tablename, colname); POSTGIS_RT_DEBUGF(3, "coverage sql: %s", sql); portal = SPI_cursor_open_with_args( "coverage", sql, 0, NULL, NULL, NULL, TRUE, 0 ); pfree(sql); /* process resultset */ SPI_cursor_fetch(portal, TRUE, 1); while (SPI_processed == 1 && SPI_tuptable != NULL) { if (NULL != covquant) pfree(covquant); tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isNull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Could not get raster of coverage"); SRF_RETURN_DONE(funcctx); } else if (isNull) { SPI_cursor_fetch(portal, TRUE, 1); continue; } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(datum); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_quantileCoverage: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* inspect number of bands*/ num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find raster band of index %d. Returning NULL", bandindex); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } covquant = rt_band_get_quantiles_stream( band, exclude_nodata_value, sample, cov_count, &qlls, &qlls_count, quantiles, quantiles_count, &count ); rt_band_destroy(band); rt_raster_destroy(raster); if (NULL == covquant || !count) { elog(NOTICE, "Could not compute quantiles for band at index %d", bandindex); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* next record */ SPI_cursor_fetch(portal, TRUE, 1); } covquant2 = SPI_palloc(sizeof(struct rt_quantile_t) * count); for (i = 0; i < count; i++) { covquant2[i].quantile = covquant[i].quantile; covquant2[i].has_value = covquant[i].has_value; if (covquant2[i].has_value) covquant2[i].value = covquant[i].value; } if (NULL != covquant) pfree(covquant); quantile_llist_destroy(&qlls, qlls_count); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (quantiles_count) pfree(quantiles); POSTGIS_RT_DEBUGF(3, "%d quantiles returned", count); /* Store needed information */ funcctx->user_fctx = covquant2; /* total number of tuples to be returned */ funcctx->max_calls = count; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; covquant2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 2; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUGF(3, "Result %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Float8GetDatum(covquant2[call_cntr].quantile); if (covquant2[call_cntr].has_value) values[1] = Float8GetDatum(covquant2[call_cntr].value); else nulls[1] = TRUE; /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { POSTGIS_RT_DEBUG(3, "done"); pfree(covquant2); SRF_RETURN_DONE(funcctx); } } /* get counts of values */ PG_FUNCTION_INFO_V1(RASTER_valueCount); Datum RASTER_valueCount(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int i; rt_valuecount vcnts; rt_valuecount vcnts2; int call_cntr; int max_calls; /* first call of function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int32_t bandindex = 0; int num_bands = 0; bool exclude_nodata_value = TRUE; double *search_values = NULL; uint32_t search_values_count = 0; double roundto = 0; uint32_t count; int j; int n; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* pgraster is null, return nothing */ if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCount: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* band index is 1-based */ bandindex = PG_GETARG_INT32(1); num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* exclude_nodata_value flag */ if (!PG_ARGISNULL(2)) exclude_nodata_value = PG_GETARG_BOOL(2); /* search values */ if (!PG_ARGISNULL(3)) { array = PG_GETARG_ARRAYTYPE_P(3); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCount: Invalid data type for values"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); search_values = palloc(sizeof(double) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case FLOAT4OID: search_values[j] = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: search_values[j] = (double) DatumGetFloat8(e[i]); break; } POSTGIS_RT_DEBUGF(5, "search_values[%d] = %f", j, search_values[j]); j++; } search_values_count = j; if (j < 1) { pfree(search_values); search_values = NULL; } } /* roundto */ if (!PG_ARGISNULL(4)) { roundto = PG_GETARG_FLOAT8(4); if (roundto < 0.) roundto = 0; } /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get counts of values */ vcnts = rt_band_get_value_count(band, (int) exclude_nodata_value, search_values, search_values_count, roundto, NULL, &count); rt_band_destroy(band); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (NULL == vcnts || !count) { elog(NOTICE, "Could not count the values for band at index %d", bandindex); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "%d value counts returned", count); /* Store needed information */ funcctx->user_fctx = vcnts; /* total number of tuples to be returned */ funcctx->max_calls = count; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; vcnts2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 3; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUGF(3, "Result %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Float8GetDatum(vcnts2[call_cntr].value); values[1] = UInt32GetDatum(vcnts2[call_cntr].count); values[2] = Float8GetDatum(vcnts2[call_cntr].percent); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(vcnts2); SRF_RETURN_DONE(funcctx); } } /* get counts of values for a coverage */ PG_FUNCTION_INFO_V1(RASTER_valueCountCoverage); Datum RASTER_valueCountCoverage(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int i; uint64_t covcount = 0; uint64_t covtotal = 0; rt_valuecount covvcnts = NULL; rt_valuecount covvcnts2; int call_cntr; int max_calls; POSTGIS_RT_DEBUG(3, "RASTER_valueCountCoverage: Starting"); /* first call of function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; text *tablenametext = NULL; char *tablename = NULL; text *colnametext = NULL; char *colname = NULL; int32_t bandindex = 1; bool exclude_nodata_value = TRUE; double *search_values = NULL; uint32_t search_values_count = 0; double roundto = 0; int len = 0; char *sql = NULL; int spi_result; Portal portal; SPITupleTable *tuptable = NULL; HeapTuple tuple; Datum datum; bool isNull = FALSE; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; int num_bands = 0; uint32_t count; uint32_t total; rt_valuecount vcnts = NULL; int exists = 0; int j; int n; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* tablename is null, return null */ if (PG_ARGISNULL(0)) { elog(NOTICE, "Table name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } tablenametext = PG_GETARG_TEXT_P(0); tablename = text_to_cstring(tablenametext); if (!strlen(tablename)) { elog(NOTICE, "Table name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "tablename = %s", tablename); /* column name is null, return null */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Column name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } colnametext = PG_GETARG_TEXT_P(1); colname = text_to_cstring(colnametext); if (!strlen(colname)) { elog(NOTICE, "Column name must be provided"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "colname = %s", colname); /* band index is 1-based */ if (!PG_ARGISNULL(2)) bandindex = PG_GETARG_INT32(2); /* exclude_nodata_value flag */ if (!PG_ARGISNULL(3)) exclude_nodata_value = PG_GETARG_BOOL(3); /* search values */ if (!PG_ARGISNULL(4)) { array = PG_GETARG_ARRAYTYPE_P(4); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCountCoverage: Invalid data type for values"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); search_values = palloc(sizeof(double) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case FLOAT4OID: search_values[j] = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: search_values[j] = (double) DatumGetFloat8(e[i]); break; } POSTGIS_RT_DEBUGF(5, "search_values[%d] = %f", j, search_values[j]); j++; } search_values_count = j; if (j < 1) { pfree(search_values); search_values = NULL; } } /* roundto */ if (!PG_ARGISNULL(5)) { roundto = PG_GETARG_FLOAT8(5); if (roundto < 0.) roundto = 0; } /* iterate through rasters of coverage */ /* connect to database */ spi_result = SPI_connect(); if (spi_result != SPI_OK_CONNECT) { if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCountCoverage: Could not connect to database using SPI"); SRF_RETURN_DONE(funcctx); } /* create sql */ len = sizeof(char) * (strlen("SELECT \"\" FROM \"\" WHERE \"\" IS NOT NULL") + (strlen(colname) * 2) + strlen(tablename) + 1); sql = (char *) palloc(len); if (NULL == sql) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_finish(); if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCountCoverage: Could not allocate memory for sql"); SRF_RETURN_DONE(funcctx); } /* get cursor */ snprintf(sql, len, "SELECT \"%s\" FROM \"%s\" WHERE \"%s\" IS NOT NULL", colname, tablename, colname); POSTGIS_RT_DEBUGF(3, "RASTER_valueCountCoverage: %s", sql); portal = SPI_cursor_open_with_args( "coverage", sql, 0, NULL, NULL, NULL, TRUE, 0 ); pfree(sql); /* process resultset */ SPI_cursor_fetch(portal, TRUE, 1); while (SPI_processed == 1 && SPI_tuptable != NULL) { tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isNull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covvcnts) pfree(covvcnts); if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCountCoverage: Could not get raster of coverage"); SRF_RETURN_DONE(funcctx); } else if (isNull) { SPI_cursor_fetch(portal, TRUE, 1); continue; } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(datum); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covvcnts) pfree(covvcnts); if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCountCoverage: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* inspect number of bands*/ num_bands = rt_raster_get_num_bands(raster); if (bandindex < 1 || bandindex > num_bands) { elog(NOTICE, "Invalid band index (must use 1-based). Returning NULL"); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covvcnts) pfree(covvcnts); if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get band */ band = rt_raster_get_band(raster, bandindex - 1); if (!band) { elog(NOTICE, "Could not find band at index %d. Returning NULL", bandindex); rt_raster_destroy(raster); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covvcnts) pfree(covvcnts); if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* get counts of values */ vcnts = rt_band_get_value_count(band, (int) exclude_nodata_value, search_values, search_values_count, roundto, &total, &count); rt_band_destroy(band); rt_raster_destroy(raster); if (NULL == vcnts || !count) { elog(NOTICE, "Could not count the values for band at index %d", bandindex); if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (NULL != covvcnts) free(covvcnts); if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "%d value counts returned", count); if (NULL == covvcnts) { covvcnts = (rt_valuecount) SPI_palloc(sizeof(struct rt_valuecount_t) * count); if (NULL == covvcnts) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (search_values_count) pfree(search_values); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCountCoverage: Could not allocate memory for value counts of coverage"); SRF_RETURN_DONE(funcctx); } for (i = 0; i < count; i++) { covvcnts[i].value = vcnts[i].value; covvcnts[i].count = vcnts[i].count; covvcnts[i].percent = -1; } covcount = count; } else { for (i = 0; i < count; i++) { exists = 0; for (j = 0; j < covcount; j++) { if (FLT_EQ(vcnts[i].value, covvcnts[j].value)) { exists = 1; break; } } if (exists) { covvcnts[j].count += vcnts[i].count; } else { covcount++; covvcnts = SPI_repalloc(covvcnts, sizeof(struct rt_valuecount_t) * covcount); if (NULL == covvcnts) { if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (search_values_count) pfree(search_values); if (NULL != covvcnts) free(covvcnts); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_valueCountCoverage: Could not change allocated memory for value counts of coverage"); SRF_RETURN_DONE(funcctx); } covvcnts[covcount - 1].value = vcnts[i].value; covvcnts[covcount - 1].count = vcnts[i].count; covvcnts[covcount - 1].percent = -1; } } } covtotal += total; pfree(vcnts); /* next record */ SPI_cursor_fetch(portal, TRUE, 1); } if (SPI_tuptable) SPI_freetuptable(tuptable); SPI_cursor_close(portal); SPI_finish(); if (search_values_count) pfree(search_values); /* compute percentages */ for (i = 0; i < covcount; i++) { covvcnts[i].percent = (double) covvcnts[i].count / covtotal; } /* Store needed information */ funcctx->user_fctx = covvcnts; /* total number of tuples to be returned */ funcctx->max_calls = covcount; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; covvcnts2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 3; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUGF(3, "Result %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Float8GetDatum(covvcnts2[call_cntr].value); values[1] = UInt32GetDatum(covvcnts2[call_cntr].count); values[2] = Float8GetDatum(covvcnts2[call_cntr].percent); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(covvcnts2); SRF_RETURN_DONE(funcctx); } } /** * Reclassify the specified bands of the raster */ PG_FUNCTION_INFO_V1(RASTER_reclass); Datum RASTER_reclass(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_band band = NULL; rt_band newband = NULL; uint32_t numBands = 0; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; int i = 0; int j = 0; int k = 0; int a = 0; int b = 0; int c = 0; rt_reclassexpr *exprset = NULL; HeapTupleHeader tup; bool isnull; Datum tupv; uint32_t nband = 0; char *expr = NULL; text *exprtext = NULL; double val = 0; char *junk = NULL; int inc_val = 0; int exc_val = 0; char *pixeltype = NULL; text *pixeltypetext = NULL; rt_pixtype pixtype = PT_END; double nodataval = 0; bool hasnodata = FALSE; char **comma_set = NULL; int comma_n = 0; char **colon_set = NULL; int colon_n = 0; char **dash_set = NULL; int dash_n = 0; POSTGIS_RT_DEBUG(3, "RASTER_reclass: Starting"); /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_reclass: Could not deserialize raster"); PG_RETURN_NULL(); } numBands = rt_raster_get_num_bands(raster); POSTGIS_RT_DEBUGF(3, "RASTER_reclass: %d possible bands to be reclassified", numBands); /* process set of reclassarg */ POSTGIS_RT_DEBUG(3, "RASTER_reclass: Processing Arg 1 (reclassargset)"); array = PG_GETARG_ARRAYTYPE_P(1); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); if (!n) { elog(NOTICE, "Invalid argument for reclassargset. Returning original raster"); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* process each element of reclassarg each element is the index of the band to process, the set of reclass ranges and the output band's pixeltype */ for (i = 0; i < n; i++) { if (nulls[i]) continue; /* each element is a tuple */ tup = (HeapTupleHeader) DatumGetPointer(e[i]); if (NULL == tup) { elog(NOTICE, "Invalid argument for reclassargset. Returning original raster"); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* band index (1-based) */ tupv = GetAttributeByName(tup, "nband", &isnull); if (isnull) { elog(NOTICE, "Invalid argument for reclassargset. Missing value of nband for reclassarg of index %d . Returning original raster", i); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } nband = DatumGetInt32(tupv); POSTGIS_RT_DEBUGF(3, "RASTER_reclass: expression for band %d", nband); /* valid band index? */ if (nband < 1 || nband > numBands) { elog(NOTICE, "Invalid argument for reclassargset. Invalid band index (must use 1-based) for reclassarg of index %d . Returning original raster", i); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* reclass expr */ tupv = GetAttributeByName(tup, "reclassexpr", &isnull); if (isnull) { elog(NOTICE, "Invalid argument for reclassargset. Missing value of reclassexpr for reclassarg of index %d . Returning original raster", i); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } exprtext = (text *) DatumGetPointer(tupv); if (NULL == exprtext) { elog(NOTICE, "Invalid argument for reclassargset. Missing value of reclassexpr for reclassarg of index %d . Returning original raster", i); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } expr = text_to_cstring(exprtext); POSTGIS_RT_DEBUGF(5, "RASTER_reclass: expr (raw) %s", expr); expr = rtpg_removespaces(expr); POSTGIS_RT_DEBUGF(5, "RASTER_reclass: expr (clean) %s", expr); /* split string to its components */ /* comma (,) separating rangesets */ comma_set = rtpg_strsplit(expr, ",", &comma_n); if (comma_n < 1) { elog(NOTICE, "Invalid argument for reclassargset. Invalid expression of reclassexpr for reclassarg of index %d . Returning original raster", i); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* set of reclass expressions */ POSTGIS_RT_DEBUGF(5, "RASTER_reclass: %d possible expressions", comma_n); exprset = palloc(comma_n * sizeof(rt_reclassexpr)); for (a = 0, j = 0; a < comma_n; a++) { POSTGIS_RT_DEBUGF(5, "RASTER_reclass: map %s", comma_set[a]); /* colon (:) separating range "src" and "dst" */ colon_set = rtpg_strsplit(comma_set[a], ":", &colon_n); if (colon_n != 2) { elog(NOTICE, "Invalid argument for reclassargset. Invalid expression of reclassexpr for reclassarg of index %d . Returning original raster", i); for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* allocate mem for reclass expression */ exprset[j] = palloc(sizeof(struct rt_reclassexpr_t)); for (b = 0; b < colon_n; b++) { POSTGIS_RT_DEBUGF(5, "RASTER_reclass: range %s", colon_set[b]); /* dash (-) separating "min" and "max" */ dash_set = rtpg_strsplit(colon_set[b], "-", &dash_n); if (dash_n < 1 || dash_n > 3) { elog(NOTICE, "Invalid argument for reclassargset. Invalid expression of reclassexpr for reclassarg of index %d . Returning original raster", i); for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } for (c = 0; c < dash_n; c++) { /* need to handle: (-9999-100 -> "(", "9999", "100" */ if ( c < 1 && strlen(dash_set[c]) == 1 && ( strchr(dash_set[c], '(') != NULL || strchr(dash_set[c], '[') != NULL || strchr(dash_set[c], ')') != NULL || strchr(dash_set[c], ']') != NULL ) ) { junk = palloc(sizeof(char) * (strlen(dash_set[c + 1]) + 2)); if (NULL == junk) { for (k = 0; k <= j; k++) pfree(exprset[k]); pfree(exprset); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_reclass: Could not allocate memory"); PG_RETURN_NULL(); } sprintf(junk, "%s%s", dash_set[c], dash_set[c + 1]); c++; dash_set[c] = repalloc(dash_set[c], sizeof(char) * (strlen(junk) + 1)); strcpy(dash_set[c], junk); pfree(junk); /* rebuild dash_set */ for (k = 1; k < dash_n; k++) { dash_set[k - 1] = repalloc(dash_set[k - 1], (strlen(dash_set[k]) + 1) * sizeof(char)); strcpy(dash_set[k - 1], dash_set[k]); } dash_n--; c--; pfree(dash_set[dash_n]); dash_set = repalloc(dash_set, sizeof(char *) * dash_n); } /* there shouldn't be more than two in dash_n */ if (c < 1 && dash_n > 2) { elog(NOTICE, "Invalid argument for reclassargset. Invalid expression of reclassexpr for reclassarg of index %d . Returning original raster", i); for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* check interval flags */ exc_val = 0; inc_val = 1; /* range */ if (dash_n != 1) { /* min */ if (c < 1) { if ( strchr(dash_set[c], ')') != NULL || strchr(dash_set[c], ']') != NULL ) { exc_val = 1; inc_val = 1; } else if (strchr(dash_set[c], '(') != NULL){ inc_val = 0; } else { inc_val = 1; } } /* max */ else { if ( strrchr(dash_set[c], '(') != NULL || strrchr(dash_set[c], '[') != NULL ) { exc_val = 1; inc_val = 0; } else if (strrchr(dash_set[c], ']') != NULL) { inc_val = 1; } else { inc_val = 0; } } } POSTGIS_RT_DEBUGF(5, "RASTER_reclass: exc_val %d inc_val %d", exc_val, inc_val); /* remove interval flags */ dash_set[c] = rtpg_chartrim(dash_set[c], "()[]"); POSTGIS_RT_DEBUGF(5, "RASTER_reclass: min/max (char) %s", dash_set[c]); /* value from string to double */ errno = 0; val = strtod(dash_set[c], &junk); if (errno != 0 || dash_set[c] == junk) { elog(NOTICE, "Invalid argument for reclassargset. Invalid expression of reclassexpr for reclassarg of index %d . Returning original raster", i); for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } POSTGIS_RT_DEBUGF(5, "RASTER_reclass: min/max (double) %f", val); /* strsplit removes dash (a.k.a. negative sign), compare now to restore */ if (c < 1) junk = strstr(colon_set[b], dash_set[c]); else junk = rtpg_strrstr(colon_set[b], dash_set[c]); /* not beginning of string */ if (junk != colon_set[b]) { /* prior is a dash */ if (*(junk - 1) == '-') { /* prior is beginning of string or prior - 1 char is dash, negative number */ if ( ((junk - 1) == colon_set[b]) || (*(junk - 2) == '-') || (*(junk - 2) == '[') || (*(junk - 2) == '(') ) { val *= -1.; } } } POSTGIS_RT_DEBUGF(5, "RASTER_reclass: min/max (double) %f", val); /* src */ if (b < 1) { /* singular value */ if (dash_n == 1) { exprset[j]->src.exc_min = exprset[j]->src.exc_max = exc_val; exprset[j]->src.inc_min = exprset[j]->src.inc_max = inc_val; exprset[j]->src.min = exprset[j]->src.max = val; } /* min */ else if (c < 1) { exprset[j]->src.exc_min = exc_val; exprset[j]->src.inc_min = inc_val; exprset[j]->src.min = val; } /* max */ else { exprset[j]->src.exc_max = exc_val; exprset[j]->src.inc_max = inc_val; exprset[j]->src.max = val; } } /* dst */ else { /* singular value */ if (dash_n == 1) exprset[j]->dst.min = exprset[j]->dst.max = val; /* min */ else if (c < 1) exprset[j]->dst.min = val; /* max */ else exprset[j]->dst.max = val; } } pfree(dash_set); } pfree(colon_set); POSTGIS_RT_DEBUGF(3, "RASTER_reclass: or: %f - %f nr: %f - %f" , exprset[j]->src.min , exprset[j]->src.max , exprset[j]->dst.min , exprset[j]->dst.max ); j++; } pfree(comma_set); /* pixel type */ tupv = GetAttributeByName(tup, "pixeltype", &isnull); if (isnull) { elog(NOTICE, "Invalid argument for reclassargset. Missing value of pixeltype for reclassarg of index %d . Returning original raster", i); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } pixeltypetext = (text *) DatumGetPointer(tupv); if (NULL == pixeltypetext) { elog(NOTICE, "Invalid argument for reclassargset. Missing value of pixeltype for reclassarg of index %d . Returning original raster", i); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } pixeltype = text_to_cstring(pixeltypetext); POSTGIS_RT_DEBUGF(3, "RASTER_reclass: pixeltype %s", pixeltype); pixtype = rt_pixtype_index_from_name(pixeltype); /* nodata */ tupv = GetAttributeByName(tup, "nodataval", &isnull); if (isnull) { nodataval = 0; hasnodata = FALSE; } else { nodataval = DatumGetFloat8(tupv); hasnodata = TRUE; } POSTGIS_RT_DEBUGF(3, "RASTER_reclass: nodataval %f", nodataval); POSTGIS_RT_DEBUGF(3, "RASTER_reclass: hasnodata %d", hasnodata); /* do reclass */ band = rt_raster_get_band(raster, nband - 1); if (!band) { elog(NOTICE, "Could not find raster band of index %d. Returning original raster", nband); for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } newband = rt_band_reclass(band, pixtype, hasnodata, nodataval, exprset, j); if (!newband) { for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_reclass: Could not reclassify raster band of index %d", nband); PG_RETURN_NULL(); } /* replace old band with new band */ if (rt_raster_replace_band(raster, newband, nband - 1) == NULL) { for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); rt_band_destroy(newband); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_reclass: Could not replace raster band of index %d with reclassified band", nband); PG_RETURN_NULL(); } /* old band is in the variable band */ rt_band_destroy(band); /* free exprset */ for (k = 0; k < j; k++) pfree(exprset[k]); pfree(exprset); } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!pgrtn) PG_RETURN_NULL(); POSTGIS_RT_DEBUG(3, "RASTER_reclass: Finished"); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* ---------------------------------------------------------------- */ /* apply colormap to specified band of a raster */ /* ---------------------------------------------------------------- */ typedef struct rtpg_colormap_arg_t *rtpg_colormap_arg; struct rtpg_colormap_arg_t { rt_raster raster; int nband; /* 1-based */ rt_band band; rt_bandstats bandstats; rt_colormap colormap; int nodataentry; char **entry; int nentry; char **element; int nelement; }; static rtpg_colormap_arg rtpg_colormap_arg_init() { rtpg_colormap_arg arg = NULL; arg = palloc(sizeof(struct rtpg_colormap_arg_t)); if (arg == NULL) { elog(ERROR, "rtpg_colormap_arg: Could not allocate memory for function arguments"); return NULL; } arg->raster = NULL; arg->nband = 1; arg->band = NULL; arg->bandstats = NULL; arg->colormap = palloc(sizeof(struct rt_colormap_t)); if (arg->colormap == NULL) { elog(ERROR, "rtpg_colormap_arg: Could not allocate memory for function arguments"); return NULL; } arg->colormap->nentry = 0; arg->colormap->entry = NULL; arg->colormap->ncolor = 4; /* assume RGBA */ arg->colormap->method = CM_INTERPOLATE; arg->nodataentry = -1; arg->entry = NULL; arg->nentry = 0; arg->element = NULL; arg->nelement = 0; return arg; } static void rtpg_colormap_arg_destroy(rtpg_colormap_arg arg) { int i = 0; if (arg->raster != NULL) rt_raster_destroy(arg->raster); if (arg->bandstats != NULL) pfree(arg->bandstats); if (arg->colormap != NULL) { if (arg->colormap->entry != NULL) pfree(arg->colormap->entry); pfree(arg->colormap); } if (arg->nentry) { for (i = 0; i < arg->nentry; i++) { if (arg->entry[i] != NULL) pfree(arg->entry[i]); } pfree(arg->entry); } if (arg->nelement) { for (i = 0; i < arg->nelement; i++) pfree(arg->element[i]); pfree(arg->element); } pfree(arg); arg = NULL; } PG_FUNCTION_INFO_V1(RASTER_colorMap); Datum RASTER_colorMap(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rtpg_colormap_arg arg = NULL; char *junk = NULL; rt_raster raster = NULL; POSTGIS_RT_DEBUG(3, "RASTER_colorMap: Starting"); /* pgraster is NULL, return NULL */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* init arg */ arg = rtpg_colormap_arg_init(); if (arg == NULL) { elog(ERROR, "RASTER_colorMap: Could not initialize argument structure"); PG_RETURN_NULL(); } /* raster (0) */ pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* raster object */ arg->raster = rt_raster_deserialize(pgraster, FALSE); if (!arg->raster) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not deserialize raster"); PG_RETURN_NULL(); } /* nband (1) */ if (!PG_ARGISNULL(1)) arg->nband = PG_GETARG_INT32(1); POSTGIS_RT_DEBUGF(4, "nband = %d", arg->nband); /* check that band works */ if (!rt_raster_has_band(arg->raster, arg->nband - 1)) { elog(NOTICE, "Raster does not have band at index %d. Returning empty raster", arg->nband); raster = rt_raster_clone(arg->raster, 0); if (raster == NULL) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not create empty raster"); PG_RETURN_NULL(); } rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); if (pgraster == NULL) PG_RETURN_NULL(); SET_VARSIZE(pgraster, ((rt_pgraster*) pgraster)->size); PG_RETURN_POINTER(pgraster); } /* get band */ arg->band = rt_raster_get_band(arg->raster, arg->nband - 1); if (arg->band == NULL) { int nband = arg->nband; rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not get band at index %d", nband); PG_RETURN_NULL(); } /* method (3) */ if (!PG_ARGISNULL(3)) { char *method = NULL; char *tmp = text_to_cstring(PG_GETARG_TEXT_P(3)); POSTGIS_RT_DEBUGF(4, "raw method = %s", tmp); method = rtpg_trim(tmp); pfree(tmp); method = rtpg_strtoupper(method); if (strcmp(method, "INTERPOLATE") == 0) arg->colormap->method = CM_INTERPOLATE; else if (strcmp(method, "EXACT") == 0) arg->colormap->method = CM_EXACT; else if (strcmp(method, "NEAREST") == 0) arg->colormap->method = CM_NEAREST; else { elog(NOTICE, "Unknown value provided for method. Defaulting to INTERPOLATE"); arg->colormap->method = CM_INTERPOLATE; } } /* default to INTERPOLATE */ else arg->colormap->method = CM_INTERPOLATE; POSTGIS_RT_DEBUGF(4, "method = %d", arg->colormap->method); /* colormap (2) */ if (PG_ARGISNULL(2)) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Value must be provided for colormap"); PG_RETURN_NULL(); } else { char *tmp = NULL; char *colormap = text_to_cstring(PG_GETARG_TEXT_P(2)); char *_entry; char *_element; int i = 0; int j = 0; POSTGIS_RT_DEBUGF(4, "colormap = %s", colormap); /* empty string */ if (!strlen(colormap)) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Value must be provided for colormap"); PG_RETURN_NULL(); } arg->entry = rtpg_strsplit(colormap, "\n", &(arg->nentry)); pfree(colormap); if (arg->nentry < 1) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not process the value provided for colormap"); PG_RETURN_NULL(); } /* allocate the max # of colormap entries */ arg->colormap->entry = palloc(sizeof(struct rt_colormap_entry_t) * arg->nentry); if (arg->colormap->entry == NULL) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not allocate memory for colormap entries"); PG_RETURN_NULL(); } memset(arg->colormap->entry, 0, sizeof(struct rt_colormap_entry_t) * arg->nentry); /* each entry */ for (i = 0; i < arg->nentry; i++) { /* substitute space for other delimiters */ tmp = rtpg_strreplace(arg->entry[i], ":", " ", NULL); _entry = rtpg_strreplace(tmp, ",", " ", NULL); pfree(tmp); tmp = rtpg_strreplace(_entry, "\t", " ", NULL); pfree(_entry); _entry = rtpg_trim(tmp); pfree(tmp); POSTGIS_RT_DEBUGF(4, "Processing entry[%d] = %s", i, arg->entry[i]); POSTGIS_RT_DEBUGF(4, "Cleaned entry[%d] = %s", i, _entry); /* empty entry, continue */ if (!strlen(_entry)) { POSTGIS_RT_DEBUGF(3, "Skipping empty entry[%d]", i); pfree(_entry); continue; } arg->element = rtpg_strsplit(_entry, " ", &(arg->nelement)); pfree(_entry); if (arg->nelement < 2) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not process colormap entry %d", i + 1); PG_RETURN_NULL(); } else if (arg->nelement > 5) { elog(NOTICE, "More than five elements in colormap entry %d. Using at most five elements", i + 1); arg->nelement = 5; } /* smallest # of colors */ if ((arg->nelement - 1) < arg->colormap->ncolor) arg->colormap->ncolor = arg->nelement - 1; /* each element of entry */ for (j = 0; j < arg->nelement; j++) { _element = rtpg_trim(arg->element[j]); _element = rtpg_strtoupper(_element); POSTGIS_RT_DEBUGF(4, "Processing entry[%d][%d] = %s", i, j, arg->element[j]); POSTGIS_RT_DEBUGF(4, "Cleaned entry[%d][%d] = %s", i, j, _element); /* first element is ALWAYS a band value, percentage OR "nv" string */ if (j == 0) { char *percent = NULL; /* NODATA */ if ( strcmp(_element, "NV") == 0 || strcmp(_element, "NULL") == 0 || strcmp(_element, "NODATA") == 0 ) { POSTGIS_RT_DEBUG(4, "Processing NODATA string"); if (arg->nodataentry > -1) { elog(NOTICE, "More than one NODATA entry found. Using only the first one"); } else { arg->colormap->entry[arg->colormap->nentry].isnodata = 1; /* no need to set value as value comes from band's NODATA */ arg->colormap->entry[arg->colormap->nentry].value = 0; } } /* percent value */ else if ((percent = strchr(_element, '%')) != NULL) { double value; POSTGIS_RT_DEBUG(4, "Processing percent string"); /* get the band stats */ if (arg->bandstats == NULL) { POSTGIS_RT_DEBUG(4, "Getting band stats"); arg->bandstats = rt_band_get_summary_stats(arg->band, 1, 1, 0, NULL, NULL, NULL); if (arg->bandstats == NULL) { pfree(_element); rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not get band's summary stats to process percentages"); PG_RETURN_NULL(); } } /* get the string before the percent char */ tmp = palloc(sizeof(char) * (percent - _element + 1)); if (tmp == NULL) { pfree(_element); rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not allocate memory for value of percentage"); PG_RETURN_NULL(); } memcpy(tmp, _element, percent - _element); tmp[percent - _element] = '\0'; POSTGIS_RT_DEBUGF(4, "Percent value = %s", tmp); /* get percentage value */ errno = 0; value = strtod(tmp, NULL); pfree(tmp); if (errno != 0 || _element == junk) { pfree(_element); rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not process percent string to value"); PG_RETURN_NULL(); } /* check percentage */ if (value < 0.) { elog(NOTICE, "Percentage values cannot be less than zero. Defaulting to zero"); value = 0.; } else if (value > 100.) { elog(NOTICE, "Percentage values cannot be greater than 100. Defaulting to 100"); value = 100.; } /* get the true pixel value */ /* TODO: should the percentage be quantile based? */ arg->colormap->entry[arg->colormap->nentry].value = ((value / 100.) * (arg->bandstats->max - arg->bandstats->min)) + arg->bandstats->min; } /* straight value */ else { errno = 0; arg->colormap->entry[arg->colormap->nentry].value = strtod(_element, &junk); if (errno != 0 || _element == junk) { pfree(_element); rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not process string to value"); PG_RETURN_NULL(); } } } /* RGB values (0 - 255) */ else { int value = 0; errno = 0; value = (int) strtod(_element, &junk); if (errno != 0 || _element == junk) { pfree(_element); rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not process string to value"); PG_RETURN_NULL(); } if (value > 255) { elog(NOTICE, "RGBA value cannot be greater than 255. Defaulting to 255"); value = 255; } else if (value < 0) { elog(NOTICE, "RGBA value cannot be less than zero. Defaulting to zero"); value = 0; } arg->colormap->entry[arg->colormap->nentry].color[j - 1] = value; } pfree(_element); } POSTGIS_RT_DEBUGF(4, "colormap->entry[%d] (isnodata, value, R, G, B, A) = (%d, %f, %d, %d, %d, %d)", arg->colormap->nentry, arg->colormap->entry[arg->colormap->nentry].isnodata, arg->colormap->entry[arg->colormap->nentry].value, arg->colormap->entry[arg->colormap->nentry].color[0], arg->colormap->entry[arg->colormap->nentry].color[1], arg->colormap->entry[arg->colormap->nentry].color[2], arg->colormap->entry[arg->colormap->nentry].color[3] ); arg->colormap->nentry++; } POSTGIS_RT_DEBUGF(4, "colormap->nentry = %d", arg->colormap->nentry); POSTGIS_RT_DEBUGF(4, "colormap->ncolor = %d", arg->colormap->ncolor); } /* call colormap */ raster = rt_raster_colormap(arg->raster, arg->nband - 1, arg->colormap); if (raster == NULL) { rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_colorMap: Could not create new raster with applied colormap"); PG_RETURN_NULL(); } rtpg_colormap_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); POSTGIS_RT_DEBUG(3, "RASTER_colorMap: Done"); if (pgraster == NULL) PG_RETURN_NULL(); SET_VARSIZE(pgraster, ((rt_pgraster*) pgraster)->size); PG_RETURN_POINTER(pgraster); } /* ---------------------------------------------------------------- */ /* Returns raster from GDAL raster */ /* ---------------------------------------------------------------- */ PG_FUNCTION_INFO_V1(RASTER_fromGDALRaster); Datum RASTER_fromGDALRaster(PG_FUNCTION_ARGS) { bytea *bytea_data; uint8_t *data; int data_len = 0; VSILFILE *vsifp = NULL; GDALDatasetH hdsSrc; int srid = -1; /* -1 for NULL */ rt_pgraster *pgraster = NULL; rt_raster raster; /* NULL if NULL */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* get data */ bytea_data = (bytea *) PG_GETARG_BYTEA_P(0); data = (uint8_t *) VARDATA(bytea_data); data_len = VARSIZE(bytea_data) - VARHDRSZ; /* process srid */ /* NULL srid means try to determine SRID from bytea */ if (!PG_ARGISNULL(1)) srid = clamp_srid(PG_GETARG_INT32(1)); /* create memory "file" */ vsifp = VSIFileFromMemBuffer("/vsimem/in.dat", data, data_len, FALSE); if (vsifp == NULL) { PG_FREE_IF_COPY(bytea_data, 0); elog(ERROR, "RASTER_fromGDALRaster: Could not load bytea into memory file for use by GDAL"); PG_RETURN_NULL(); } /* register all GDAL drivers */ rt_util_gdal_register_all(); /* open GDAL raster */ hdsSrc = GDALOpenShared("/vsimem/in.dat", GA_ReadOnly); if (hdsSrc == NULL) { VSIFCloseL(vsifp); PG_FREE_IF_COPY(bytea_data, 0); elog(ERROR, "RASTER_fromGDALRaster: Could not open bytea with GDAL. Check that the bytea is of a GDAL supported format"); PG_RETURN_NULL(); } #if POSTGIS_DEBUG_LEVEL > 3 { GDALDriverH hdrv = GDALGetDatasetDriver(hdsSrc); POSTGIS_RT_DEBUGF(4, "Input GDAL Raster info: %s, (%d x %d)", GDALGetDriverShortName(hdrv), GDALGetRasterXSize(hdsSrc), GDALGetRasterYSize(hdsSrc) ); } #endif /* convert GDAL raster to raster */ raster = rt_raster_from_gdal_dataset(hdsSrc); GDALClose(hdsSrc); VSIFCloseL(vsifp); PG_FREE_IF_COPY(bytea_data, 0); if (raster == NULL) { elog(ERROR, "RASTER_fromGDALRaster: Could not convert GDAL raster to raster"); PG_RETURN_NULL(); } /* apply SRID if set */ if (srid != -1) rt_raster_set_srid(raster, srid); pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } /** * Returns formatted GDAL raster as bytea object of raster */ PG_FUNCTION_INFO_V1(RASTER_asGDALRaster); Datum RASTER_asGDALRaster(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster; text *formattext = NULL; char *format = NULL; char **options = NULL; text *optiontext = NULL; char *option = NULL; int srid = SRID_UNKNOWN; char *srs = NULL; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; int i = 0; int j = 0; uint8_t *gdal = NULL; uint64_t gdal_size = 0; bytea *result = NULL; uint64_t result_size = 0; POSTGIS_RT_DEBUG(3, "RASTER_asGDALRaster: Starting"); /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_asGDALRaster: Could not deserialize raster"); PG_RETURN_NULL(); } /* format is required */ if (PG_ARGISNULL(1)) { elog(NOTICE, "Format must be provided"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } else { formattext = PG_GETARG_TEXT_P(1); format = text_to_cstring(formattext); } POSTGIS_RT_DEBUGF(3, "RASTER_asGDALRaster: Arg 1 (format) is %s", format); /* process options */ if (!PG_ARGISNULL(2)) { POSTGIS_RT_DEBUG(3, "RASTER_asGDALRaster: Processing Arg 2 (options)"); array = PG_GETARG_ARRAYTYPE_P(2); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case TEXTOID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_asGDALRaster: Invalid data type for options"); PG_RETURN_NULL(); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); if (n) { options = (char **) palloc(sizeof(char *) * (n + 1)); if (options == NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_asGDALRaster: Could not allocate memory for options"); PG_RETURN_NULL(); } /* clean each option */ for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; option = NULL; switch (etype) { case TEXTOID: optiontext = (text *) DatumGetPointer(e[i]); if (NULL == optiontext) break; option = text_to_cstring(optiontext); /* trim string */ option = rtpg_trim(option); POSTGIS_RT_DEBUGF(3, "RASTER_asGDALRaster: option is '%s'", option); break; } if (strlen(option)) { options[j] = (char *) palloc(sizeof(char) * (strlen(option) + 1)); options[j] = option; j++; } } if (j > 0) { /* trim allocation */ options = repalloc(options, (j + 1) * sizeof(char *)); /* add NULL to end */ options[j] = NULL; } else { pfree(options); options = NULL; } } } /* process srid */ /* NULL srid means use raster's srid */ if (PG_ARGISNULL(3)) srid = rt_raster_get_srid(raster); else srid = PG_GETARG_INT32(3); /* get srs from srid */ if (clamp_srid(srid) != SRID_UNKNOWN) { srs = rtpg_getSR(srid); if (NULL == srs) { if (NULL != options) { for (i = j - 1; i >= 0; i--) pfree(options[i]); pfree(options); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_asGDALRaster: Could not find srtext for SRID (%d)", srid); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(3, "RASTER_asGDALRaster: Arg 3 (srs) is %s", srs); } else srs = NULL; POSTGIS_RT_DEBUG(3, "RASTER_asGDALRaster: Generating GDAL raster"); gdal = rt_raster_to_gdal(raster, srs, format, options, &gdal_size); /* free memory */ if (NULL != options) { for (i = j - 1; i >= 0; i--) pfree(options[i]); pfree(options); } if (NULL != srs) pfree(srs); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!gdal) { elog(ERROR, "RASTER_asGDALRaster: Could not allocate and generate GDAL raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(3, "RASTER_asGDALRaster: GDAL raster generated with %d bytes", (int) gdal_size); /* result is a varlena */ result_size = gdal_size + VARHDRSZ; result = (bytea *) palloc(result_size); if (NULL == result) { elog(ERROR, "RASTER_asGDALRaster: Insufficient virtual memory for GDAL raster"); PG_RETURN_NULL(); } SET_VARSIZE(result, result_size); memcpy(VARDATA(result), gdal, VARSIZE(result) - VARHDRSZ); /* for test output FILE *fh = NULL; fh = fopen("/tmp/out.dat", "w"); fwrite(gdal, sizeof(uint8_t), gdal_size, fh); fclose(fh); */ /* free gdal mem buffer */ if (gdal) CPLFree(gdal); POSTGIS_RT_DEBUG(3, "RASTER_asGDALRaster: Returning pointer to GDAL raster"); PG_RETURN_POINTER(result); } /** * Returns available GDAL drivers */ PG_FUNCTION_INFO_V1(RASTER_getGDALDrivers); Datum RASTER_getGDALDrivers(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; uint32_t drv_count; rt_gdaldriver drv_set; rt_gdaldriver drv_set2; int call_cntr; int max_calls; /* first call of function */ if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); drv_set = rt_raster_gdal_drivers(&drv_count, 1); if (NULL == drv_set || !drv_count) { elog(NOTICE, "No GDAL drivers found"); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } POSTGIS_RT_DEBUGF(3, "%d drivers returned", (int) drv_count); /* Store needed information */ funcctx->user_fctx = drv_set; /* total number of tuples to be returned */ funcctx->max_calls = drv_count; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; drv_set2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 4; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUGF(3, "Result %d", call_cntr); memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = Int32GetDatum(drv_set2[call_cntr].idx); values[1] = CStringGetTextDatum(drv_set2[call_cntr].short_name); values[2] = CStringGetTextDatum(drv_set2[call_cntr].long_name); values[3] = CStringGetTextDatum(drv_set2[call_cntr].create_options); POSTGIS_RT_DEBUGF(4, "Result %d, Index %d", call_cntr, drv_set2[call_cntr].idx); POSTGIS_RT_DEBUGF(4, "Result %d, Short Name %s", call_cntr, drv_set2[call_cntr].short_name); POSTGIS_RT_DEBUGF(4, "Result %d, Full Name %s", call_cntr, drv_set2[call_cntr].long_name); POSTGIS_RT_DEBUGF(5, "Result %d, Create Options %s", call_cntr, drv_set2[call_cntr].create_options); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); /* clean up */ pfree(drv_set2[call_cntr].short_name); pfree(drv_set2[call_cntr].long_name); pfree(drv_set2[call_cntr].create_options); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(drv_set2); SRF_RETURN_DONE(funcctx); } } /** * Rasterize a geometry */ PG_FUNCTION_INFO_V1(RASTER_asRaster); Datum RASTER_asRaster(PG_FUNCTION_ARGS) { GSERIALIZED *gser = NULL; LWGEOM *geom = NULL; rt_raster rast = NULL; rt_pgraster *pgrast = NULL; unsigned char *wkb; size_t wkb_len = 0; unsigned char variant = WKB_SFSQL; double scale[2] = {0}; double *scale_x = NULL; double *scale_y = NULL; int dim[2] = {0}; int *dim_x = NULL; int *dim_y = NULL; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; int i = 0; int j = 0; int haserr = 0; text *pixeltypetext = NULL; char *pixeltype = NULL; rt_pixtype pixtype = PT_END; rt_pixtype *pixtypes = NULL; int pixtypes_len = 0; double *values = NULL; int values_len = 0; uint8_t *hasnodatas = NULL; double *nodatavals = NULL; int nodatavals_len = 0; double ulw[2] = {0}; double *ul_xw = NULL; double *ul_yw = NULL; double gridw[2] = {0}; double *grid_xw = NULL; double *grid_yw = NULL; double skew[2] = {0}; double *skew_x = NULL; double *skew_y = NULL; char **options = NULL; int options_len = 0; uint32_t num_bands = 0; int srid = SRID_UNKNOWN; char *srs = NULL; POSTGIS_RT_DEBUG(3, "RASTER_asRaster: Starting"); /* based upon LWGEOM_asBinary function in postgis/lwgeom_ogc.c */ /* Get the geometry */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); gser = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom = lwgeom_from_gserialized(gser); /* Get a 2D version of the geometry if necessary */ if (lwgeom_ndims(geom) > 2) { LWGEOM *geom2d = lwgeom_force_2d(geom); lwgeom_free(geom); geom = geom2d; } /* empty geometry, return empty raster */ if (lwgeom_is_empty(geom)) { POSTGIS_RT_DEBUG(3, "Input geometry is empty. Returning empty raster"); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); rast = rt_raster_new(0, 0); if (rast == NULL) PG_RETURN_NULL(); pgrast = rt_raster_serialize(rast); rt_raster_destroy(rast); if (NULL == pgrast) PG_RETURN_NULL(); SET_VARSIZE(pgrast, pgrast->size); PG_RETURN_POINTER(pgrast); } /* scale x */ if (!PG_ARGISNULL(1)) { scale[0] = PG_GETARG_FLOAT8(1); if (FLT_NEQ(scale[0], 0)) scale_x = &scale[0]; } /* scale y */ if (!PG_ARGISNULL(2)) { scale[1] = PG_GETARG_FLOAT8(2); if (FLT_NEQ(scale[1], 0)) scale_y = &scale[1]; } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: scale (x, y) = %f, %f", scale[0], scale[1]); /* width */ if (!PG_ARGISNULL(3)) { dim[0] = PG_GETARG_INT32(3); if (dim[0] < 0) dim[0] = 0; if (dim[0] != 0) dim_x = &dim[0]; } /* height */ if (!PG_ARGISNULL(4)) { dim[1] = PG_GETARG_INT32(4); if (dim[1] < 0) dim[1] = 0; if (dim[1] != 0) dim_y = &dim[1]; } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: dim (x, y) = %d, %d", dim[0], dim[1]); /* pixeltype */ if (!PG_ARGISNULL(5)) { array = PG_GETARG_ARRAYTYPE_P(5); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case TEXTOID: break; default: lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); elog(ERROR, "RASTER_asRaster: Invalid data type for pixeltype"); PG_RETURN_NULL(); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); if (n) { pixtypes = (rt_pixtype *) palloc(sizeof(rt_pixtype) * n); /* clean each pixeltype */ for (i = 0, j = 0; i < n; i++) { if (nulls[i]) { pixtypes[j++] = PT_64BF; continue; } pixeltype = NULL; switch (etype) { case TEXTOID: pixeltypetext = (text *) DatumGetPointer(e[i]); if (NULL == pixeltypetext) break; pixeltype = text_to_cstring(pixeltypetext); /* trim string */ pixeltype = rtpg_trim(pixeltype); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: pixeltype is '%s'", pixeltype); break; } if (strlen(pixeltype)) { pixtype = rt_pixtype_index_from_name(pixeltype); if (pixtype == PT_END) { pfree(pixtypes); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); elog(ERROR, "RASTER_asRaster: Invalid pixel type provided: %s", pixeltype); PG_RETURN_NULL(); } pixtypes[j] = pixtype; j++; } } if (j > 0) { /* trim allocation */ pixtypes = repalloc(pixtypes, j * sizeof(rt_pixtype)); pixtypes_len = j; } else { pfree(pixtypes); pixtypes = NULL; pixtypes_len = 0; } } } #if POSTGIS_DEBUG_LEVEL > 0 for (i = 0; i < pixtypes_len; i++) POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: pixtypes[%d] = %d", i, (int) pixtypes[i]); #endif /* value */ if (!PG_ARGISNULL(6)) { array = PG_GETARG_ARRAYTYPE_P(6); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: if (pixtypes_len) pfree(pixtypes); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); elog(ERROR, "RASTER_asRaster: Invalid data type for value"); PG_RETURN_NULL(); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); if (n) { values = (double *) palloc(sizeof(double) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) { values[j++] = 1; continue; } switch (etype) { case FLOAT4OID: values[j] = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: values[j] = (double) DatumGetFloat8(e[i]); break; } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: values[%d] = %f", j, values[j]); j++; } if (j > 0) { /* trim allocation */ values = repalloc(values, j * sizeof(double)); values_len = j; } else { pfree(values); values = NULL; values_len = 0; } } } #if POSTGIS_DEBUG_LEVEL > 0 for (i = 0; i < values_len; i++) POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: values[%d] = %f", i, values[i]); #endif /* nodataval */ if (!PG_ARGISNULL(7)) { array = PG_GETARG_ARRAYTYPE_P(7); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: if (pixtypes_len) pfree(pixtypes); if (values_len) pfree(values); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); elog(ERROR, "RASTER_asRaster: Invalid data type for nodataval"); PG_RETURN_NULL(); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); if (n) { nodatavals = (double *) palloc(sizeof(double) * n); hasnodatas = (uint8_t *) palloc(sizeof(uint8_t) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) { hasnodatas[j] = 0; nodatavals[j] = 0; j++; continue; } hasnodatas[j] = 1; switch (etype) { case FLOAT4OID: nodatavals[j] = (double) DatumGetFloat4(e[i]); break; case FLOAT8OID: nodatavals[j] = (double) DatumGetFloat8(e[i]); break; } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: hasnodatas[%d] = %d", j, hasnodatas[j]); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: nodatavals[%d] = %f", j, nodatavals[j]); j++; } if (j > 0) { /* trim allocation */ nodatavals = repalloc(nodatavals, j * sizeof(double)); hasnodatas = repalloc(hasnodatas, j * sizeof(uint8_t)); nodatavals_len = j; } else { pfree(nodatavals); pfree(hasnodatas); nodatavals = NULL; hasnodatas = NULL; nodatavals_len = 0; } } } #if POSTGIS_DEBUG_LEVEL > 0 for (i = 0; i < nodatavals_len; i++) { POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: hasnodatas[%d] = %d", i, hasnodatas[i]); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: nodatavals[%d] = %f", i, nodatavals[i]); } #endif /* upperleftx */ if (!PG_ARGISNULL(8)) { ulw[0] = PG_GETARG_FLOAT8(8); ul_xw = &ulw[0]; } /* upperlefty */ if (!PG_ARGISNULL(9)) { ulw[1] = PG_GETARG_FLOAT8(9); ul_yw = &ulw[1]; } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: upperleft (x, y) = %f, %f", ulw[0], ulw[1]); /* gridx */ if (!PG_ARGISNULL(10)) { gridw[0] = PG_GETARG_FLOAT8(10); grid_xw = &gridw[0]; } /* gridy */ if (!PG_ARGISNULL(11)) { gridw[1] = PG_GETARG_FLOAT8(11); grid_yw = &gridw[1]; } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: grid (x, y) = %f, %f", gridw[0], gridw[1]); /* check dependent variables */ haserr = 0; do { /* only part of scale provided */ if ( (scale_x == NULL && scale_y != NULL) || (scale_x != NULL && scale_y == NULL) ) { elog(NOTICE, "Values must be provided for both X and Y of scale if one is specified"); haserr = 1; break; } /* only part of dimension provided */ if ( (dim_x == NULL && dim_y != NULL) || (dim_x != NULL && dim_y == NULL) ) { elog(NOTICE, "Values must be provided for both width and height if one is specified"); haserr = 1; break; } /* scale and dimension provided */ if ( (scale_x != NULL && scale_y != NULL) && (dim_x != NULL && dim_y != NULL) ) { elog(NOTICE, "Values provided for X and Y of scale and width and height. Using the width and height"); scale_x = NULL; scale_y = NULL; break; } /* neither scale or dimension provided */ if ( (scale_x == NULL && scale_y == NULL) && (dim_x == NULL && dim_y == NULL) ) { elog(NOTICE, "Values must be provided for X and Y of scale or width and height"); haserr = 1; break; } /* only part of upper-left provided */ if ( (ul_xw == NULL && ul_yw != NULL) || (ul_xw != NULL && ul_yw == NULL) ) { elog(NOTICE, "Values must be provided for both X and Y when specifying the upper-left corner"); haserr = 1; break; } /* only part of alignment provided */ if ( (grid_xw == NULL && grid_yw != NULL) || (grid_xw != NULL && grid_yw == NULL) ) { elog(NOTICE, "Values must be provided for both X and Y when specifying the alignment"); haserr = 1; break; } /* upper-left and alignment provided */ if ( (ul_xw != NULL && ul_yw != NULL) && (grid_xw != NULL && grid_yw != NULL) ) { elog(NOTICE, "Values provided for both X and Y of upper-left corner and alignment. Using the values of upper-left corner"); grid_xw = NULL; grid_yw = NULL; break; } } while (0); if (haserr) { if (pixtypes_len) pfree(pixtypes); if (values_len) pfree(values); if (nodatavals_len) { pfree(nodatavals); pfree(hasnodatas); } lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); PG_RETURN_NULL(); } /* skewx */ if (!PG_ARGISNULL(12)) { skew[0] = PG_GETARG_FLOAT8(12); if (FLT_NEQ(skew[0], 0)) skew_x = &skew[0]; } /* skewy */ if (!PG_ARGISNULL(13)) { skew[1] = PG_GETARG_FLOAT8(13); if (FLT_NEQ(skew[1], 0)) skew_y = &skew[1]; } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: skew (x, y) = %f, %f", skew[0], skew[1]); /* all touched */ if (!PG_ARGISNULL(14) && PG_GETARG_BOOL(14) == TRUE) { if (options_len < 1) { options_len = 1; options = (char **) palloc(sizeof(char *) * options_len); } else { options_len++; options = (char **) repalloc(options, sizeof(char *) * options_len); } options[options_len - 1] = palloc(sizeof(char*) * (strlen("ALL_TOUCHED=TRUE") + 1)); options[options_len - 1] = "ALL_TOUCHED=TRUE"; } if (options_len) { options_len++; options = (char **) repalloc(options, sizeof(char *) * options_len); options[options_len - 1] = NULL; } /* get geometry's srid */ srid = gserialized_get_srid(gser); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: srid = %d", srid); if (clamp_srid(srid) != SRID_UNKNOWN) { srs = rtpg_getSR(srid); if (NULL == srs) { if (pixtypes_len) pfree(pixtypes); if (values_len) pfree(values); if (nodatavals_len) { pfree(hasnodatas); pfree(nodatavals); } if (options_len) pfree(options); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); elog(ERROR, "RASTER_asRaster: Could not find srtext for SRID (%d)", srid); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: srs is %s", srs); } else srs = NULL; /* determine number of bands */ /* MIN macro is from GDAL's cpl_port.h */ num_bands = MIN(pixtypes_len, values_len); num_bands = MIN(num_bands, nodatavals_len); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: pixtypes_len = %d", pixtypes_len); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: values_len = %d", values_len); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: nodatavals_len = %d", nodatavals_len); POSTGIS_RT_DEBUGF(3, "RASTER_asRaster: num_bands = %d", num_bands); /* warn of imbalanced number of band elements */ if (!( (pixtypes_len == values_len) && (values_len == nodatavals_len) )) { elog( NOTICE, "Imbalanced number of values provided for pixeltype (%d), value (%d) and nodataval (%d). Using the first %d values of each parameter", pixtypes_len, values_len, nodatavals_len, num_bands ); } /* get wkb of geometry */ POSTGIS_RT_DEBUG(3, "RASTER_asRaster: getting wkb of geometry"); wkb = lwgeom_to_wkb(geom, variant, &wkb_len); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 0); /* rasterize geometry */ POSTGIS_RT_DEBUG(3, "RASTER_asRaster: rasterizing geometry"); /* use nodatavals for the init parameter */ rast = rt_raster_gdal_rasterize(wkb, (uint32_t) wkb_len, srs, num_bands, pixtypes, nodatavals, values, nodatavals, hasnodatas, dim_x, dim_y, scale_x, scale_y, ul_xw, ul_yw, grid_xw, grid_yw, skew_x, skew_y, options ); if (pixtypes_len) pfree(pixtypes); if (values_len) pfree(values); if (nodatavals_len) { pfree(hasnodatas); pfree(nodatavals); } if (options_len) pfree(options); if (!rast) { elog(ERROR, "RASTER_asRaster: Could not rasterize geometry"); PG_RETURN_NULL(); } /* add target srid */ rt_raster_set_srid(rast, srid); pgrast = rt_raster_serialize(rast); rt_raster_destroy(rast); if (NULL == pgrast) PG_RETURN_NULL(); POSTGIS_RT_DEBUG(3, "RASTER_asRaster: done"); SET_VARSIZE(pgrast, pgrast->size); PG_RETURN_POINTER(pgrast); } /** * warp a raster using GDAL Warp API */ PG_FUNCTION_INFO_V1(RASTER_GDALWarp); Datum RASTER_GDALWarp(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrast = NULL; rt_raster raster = NULL; rt_raster rast = NULL; text *algtext = NULL; char *algchar = NULL; GDALResampleAlg alg = GRA_NearestNeighbour; double max_err = 0.125; int src_srid = SRID_UNKNOWN; char *src_srs = NULL; int dst_srid = SRID_UNKNOWN; char *dst_srs = NULL; int no_srid = 0; double scale[2] = {0}; double *scale_x = NULL; double *scale_y = NULL; double gridw[2] = {0}; double *grid_xw = NULL; double *grid_yw = NULL; double skew[2] = {0}; double *skew_x = NULL; double *skew_y = NULL; int dim[2] = {0}; int *dim_x = NULL; int *dim_y = NULL; POSTGIS_RT_DEBUG(3, "RASTER_GDALWarp: Starting"); /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_GDALWarp: Could not deserialize raster"); PG_RETURN_NULL(); } /* resampling algorithm */ if (!PG_ARGISNULL(1)) { algtext = PG_GETARG_TEXT_P(1); algchar = rtpg_trim(rtpg_strtoupper(text_to_cstring(algtext))); alg = rt_util_gdal_resample_alg(algchar); } POSTGIS_RT_DEBUGF(4, "Resampling algorithm: %d", alg); /* max error */ if (!PG_ARGISNULL(2)) { max_err = PG_GETARG_FLOAT8(2); if (max_err < 0.) max_err = 0.; } POSTGIS_RT_DEBUGF(4, "max_err: %f", max_err); /* source SRID */ src_srid = clamp_srid(rt_raster_get_srid(raster)); POSTGIS_RT_DEBUGF(4, "source SRID: %d", src_srid); /* target SRID */ if (!PG_ARGISNULL(3)) { dst_srid = clamp_srid(PG_GETARG_INT32(3)); if (dst_srid == SRID_UNKNOWN) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_GDALWarp: %d is an invalid target SRID", dst_srid); PG_RETURN_NULL(); } } else dst_srid = src_srid; POSTGIS_RT_DEBUGF(4, "destination SRID: %d", dst_srid); /* target SRID != src SRID, error */ if (src_srid == SRID_UNKNOWN && dst_srid != src_srid) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_GDALWarp: Input raster has unknown (%d) SRID", src_srid); PG_RETURN_NULL(); } /* target SRID == src SRID, no reprojection */ else if (dst_srid == src_srid) { no_srid = 1; } /* scale x */ if (!PG_ARGISNULL(4)) { scale[0] = PG_GETARG_FLOAT8(4); if (FLT_NEQ(scale[0], 0)) scale_x = &scale[0]; } /* scale y */ if (!PG_ARGISNULL(5)) { scale[1] = PG_GETARG_FLOAT8(5); if (FLT_NEQ(scale[1], 0)) scale_y = &scale[1]; } /* grid alignment x */ if (!PG_ARGISNULL(6)) { gridw[0] = PG_GETARG_FLOAT8(6); grid_xw = &gridw[0]; } /* grid alignment y */ if (!PG_ARGISNULL(7)) { gridw[1] = PG_GETARG_FLOAT8(7); grid_yw = &gridw[1]; } /* skew x */ if (!PG_ARGISNULL(8)) { skew[0] = PG_GETARG_FLOAT8(8); if (FLT_NEQ(skew[0], 0)) skew_x = &skew[0]; } /* skew y */ if (!PG_ARGISNULL(9)) { skew[1] = PG_GETARG_FLOAT8(9); if (FLT_NEQ(skew[1], 0)) skew_y = &skew[1]; } /* width */ if (!PG_ARGISNULL(10)) { dim[0] = PG_GETARG_INT32(10); if (dim[0] < 0) dim[0] = 0; if (dim[0] > 0) dim_x = &dim[0]; } /* height */ if (!PG_ARGISNULL(11)) { dim[1] = PG_GETARG_INT32(11); if (dim[1] < 0) dim[1] = 0; if (dim[1] > 0) dim_y = &dim[1]; } /* check that at least something is to be done */ if ( (dst_srid == SRID_UNKNOWN) && (scale_x == NULL) && (scale_y == NULL) && (grid_xw == NULL) && (grid_yw == NULL) && (skew_x == NULL) && (skew_y == NULL) && (dim_x == NULL) && (dim_y == NULL) ) { elog(NOTICE, "No resampling parameters provided. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* both values of alignment must be provided if any one is provided */ else if ( (grid_xw != NULL && grid_yw == NULL) || (grid_xw == NULL && grid_yw != NULL) ) { elog(NOTICE, "Values must be provided for both X and Y when specifying the alignment. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* both values of scale must be provided if any one is provided */ else if ( (scale_x != NULL && scale_y == NULL) || (scale_x == NULL && scale_y != NULL) ) { elog(NOTICE, "Values must be provided for both X and Y when specifying the scale. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* scale and width/height provided */ else if ( (scale_x != NULL || scale_y != NULL) && (dim_x != NULL || dim_y != NULL) ) { elog(NOTICE, "Scale X/Y and width/height are mutually exclusive. Only provide one. Returning original raster"); rt_raster_destroy(raster); PG_RETURN_POINTER(pgraster); } /* get srses from srids */ if (!no_srid) { /* source srs */ src_srs = rtpg_getSR(src_srid); if (NULL == src_srs) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_GDALWarp: Input raster has unknown SRID (%d)", src_srid); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "src srs: %s", src_srs); dst_srs = rtpg_getSR(dst_srid); if (NULL == dst_srs) { if (!no_srid) pfree(src_srs); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_GDALWarp: Target SRID (%d) is unknown", dst_srid); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "dst srs: %s", dst_srs); } rast = rt_raster_gdal_warp( raster, src_srs, dst_srs, scale_x, scale_y, dim_x, dim_y, NULL, NULL, grid_xw, grid_yw, skew_x, skew_y, alg, max_err); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); if (!no_srid) { pfree(src_srs); pfree(dst_srs); } if (!rast) { elog(ERROR, "RASTER_band: Could not create transformed raster"); PG_RETURN_NULL(); } /* add target SRID */ rt_raster_set_srid(rast, dst_srid); pgrast = rt_raster_serialize(rast); rt_raster_destroy(rast); if (NULL == pgrast) PG_RETURN_NULL(); POSTGIS_RT_DEBUG(3, "RASTER_GDALWarp: done"); SET_VARSIZE(pgrast, pgrast->size); PG_RETURN_POINTER(pgrast); } /** * Get raster's meta data */ PG_FUNCTION_INFO_V1(RASTER_metadata); Datum RASTER_metadata(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; uint32_t numBands; double scaleX; double scaleY; double ipX; double ipY; double skewX; double skewY; int32_t srid; uint32_t width; uint32_t height; TupleDesc tupdesc; int values_length = 10; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUG(3, "RASTER_metadata: Starting"); /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); /* raster */ raster = rt_raster_deserialize(pgraster, TRUE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_metadata; Could not deserialize raster"); PG_RETURN_NULL(); } /* upper left x, y */ ipX = rt_raster_get_x_offset(raster); ipY = rt_raster_get_y_offset(raster); /* width, height */ width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); /* scale x, y */ scaleX = rt_raster_get_x_scale(raster); scaleY = rt_raster_get_y_scale(raster); /* skew x, y */ skewX = rt_raster_get_x_skew(raster); skewY = rt_raster_get_y_skew(raster); /* srid */ srid = rt_raster_get_srid(raster); /* numbands */ numBands = rt_raster_get_num_bands(raster); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); values[0] = Float8GetDatum(ipX); values[1] = Float8GetDatum(ipY); values[2] = UInt32GetDatum(width); values[3] = UInt32GetDatum(height); values[4] = Float8GetDatum(scaleX); values[5] = Float8GetDatum(scaleY); values[6] = Float8GetDatum(skewX); values[7] = Float8GetDatum(skewY); values[8] = Int32GetDatum(srid); values[9] = UInt32GetDatum(numBands); memset(nulls, FALSE, sizeof(bool) * values_length); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); PG_RETURN_DATUM(result); } /** * Get raster bands' meta data */ PG_FUNCTION_INFO_V1(RASTER_bandmetadata); Datum RASTER_bandmetadata(PG_FUNCTION_ARGS) { FuncCallContext *funcctx; TupleDesc tupdesc; int call_cntr; int max_calls; struct bandmetadata { uint32_t bandnum; char *pixeltype; bool hasnodata; double nodataval; bool isoutdb; char *bandpath; }; struct bandmetadata *bmd = NULL; struct bandmetadata *bmd2 = NULL; HeapTuple tuple; Datum result; if (SRF_IS_FIRSTCALL()) { MemoryContext oldcontext; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_band band = NULL; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int i = 0; int j = 0; int n = 0; uint32_t numBands; uint32_t idx = 1; uint32_t *bandNums = NULL; const char *tmp = NULL; POSTGIS_RT_DEBUG(3, "RASTER_bandmetadata: Starting"); /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); /* switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* pgraster is null, return null */ if (PG_ARGISNULL(0)) { MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* raster */ raster = rt_raster_deserialize(pgraster, FALSE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_bandmetadata: Could not deserialize raster"); SRF_RETURN_DONE(funcctx); } /* numbands */ numBands = rt_raster_get_num_bands(raster); if (numBands < 1) { elog(NOTICE, "Raster provided has no bands"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* band index */ array = PG_GETARG_ARRAYTYPE_P(1); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case INT2OID: case INT4OID: break; default: rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_bandmetadata: Invalid data type for band number(s)"); SRF_RETURN_DONE(funcctx); break; } deconstruct_array(array, etype, typlen, typbyval, typalign, &e, &nulls, &n); bandNums = palloc(sizeof(uint32_t) * n); for (i = 0, j = 0; i < n; i++) { if (nulls[i]) continue; switch (etype) { case INT2OID: idx = (uint32_t) DatumGetInt16(e[i]); break; case INT4OID: idx = (uint32_t) DatumGetInt32(e[i]); break; } POSTGIS_RT_DEBUGF(3, "band idx (before): %d", idx); if (idx > numBands || idx < 1) { elog(NOTICE, "Invalid band index: %d. Indices must be 1-based. Returning NULL", idx); pfree(bandNums); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } bandNums[j] = idx; POSTGIS_RT_DEBUGF(3, "bandNums[%d] = %d", j, bandNums[j]); j++; } if (j < 1) { j = numBands; bandNums = repalloc(bandNums, sizeof(uint32_t) * j); for (i = 0; i < j; i++) bandNums[i] = i + 1; } else if (j < n) bandNums = repalloc(bandNums, sizeof(uint32_t) * j); bmd = (struct bandmetadata *) palloc(sizeof(struct bandmetadata) * j); for (i = 0; i < j; i++) { band = rt_raster_get_band(raster, bandNums[i] - 1); if (NULL == band) { elog(NOTICE, "Could not get raster band at index %d", bandNums[i]); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); MemoryContextSwitchTo(oldcontext); SRF_RETURN_DONE(funcctx); } /* bandnum */ bmd[i].bandnum = bandNums[i]; /* pixeltype */ tmp = rt_pixtype_name(rt_band_get_pixtype(band)); bmd[i].pixeltype = palloc(sizeof(char) * (strlen(tmp) + 1)); strncpy(bmd[i].pixeltype, tmp, strlen(tmp) + 1); /* hasnodatavalue */ if (rt_band_get_hasnodata_flag(band)) bmd[i].hasnodata = TRUE; else bmd[i].hasnodata = FALSE; /* nodatavalue */ if (bmd[i].hasnodata) rt_band_get_nodata(band, &(bmd[i].nodataval)); else bmd[i].nodataval = 0; /* path */ tmp = rt_band_get_ext_path(band); if (tmp) { bmd[i].bandpath = palloc(sizeof(char) * (strlen(tmp) + 1)); strncpy(bmd[i].bandpath, tmp, strlen(tmp) + 1); } else bmd[i].bandpath = NULL; /* isoutdb */ bmd[i].isoutdb = bmd[i].bandpath ? TRUE : FALSE; rt_band_destroy(band); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Store needed information */ funcctx->user_fctx = bmd; /* total number of tuples to be returned */ funcctx->max_calls = j; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { MemoryContextSwitchTo(oldcontext); ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); funcctx->tuple_desc = tupdesc; MemoryContextSwitchTo(oldcontext); } /* stuff done on every call of the function */ funcctx = SRF_PERCALL_SETUP(); call_cntr = funcctx->call_cntr; max_calls = funcctx->max_calls; tupdesc = funcctx->tuple_desc; bmd2 = funcctx->user_fctx; /* do when there is more left to send */ if (call_cntr < max_calls) { int values_length = 5; Datum values[values_length]; bool nulls[values_length]; memset(nulls, FALSE, sizeof(bool) * values_length); values[0] = UInt32GetDatum(bmd2[call_cntr].bandnum); values[1] = CStringGetTextDatum(bmd2[call_cntr].pixeltype); if (bmd2[call_cntr].hasnodata) values[2] = Float8GetDatum(bmd2[call_cntr].nodataval); else nulls[2] = TRUE; values[3] = BoolGetDatum(bmd2[call_cntr].isoutdb); if (bmd2[call_cntr].bandpath && strlen(bmd2[call_cntr].bandpath)) values[4] = CStringGetTextDatum(bmd2[call_cntr].bandpath); else nulls[4] = TRUE; /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); /* clean up */ pfree(bmd2[call_cntr].pixeltype); if (bmd2[call_cntr].bandpath) pfree(bmd2[call_cntr].bandpath); SRF_RETURN_NEXT(funcctx, result); } /* do when there is no more left */ else { pfree(bmd2); SRF_RETURN_DONE(funcctx); } } PG_FUNCTION_INFO_V1(RASTER_rasterToWorldCoord); Datum RASTER_rasterToWorldCoord(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; int i = 0; int cr[2] = {0}; bool skewed[2] = {false, false}; double cw[2] = {0}; TupleDesc tupdesc; int values_length = 2; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUG(3, "RASTER_rasterToWorldCoord: Starting"); /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); /* raster */ raster = rt_raster_deserialize(pgraster, TRUE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_rasterToWorldCoord: Could not deserialize raster"); PG_RETURN_NULL(); } /* raster skewed? */ skewed[0] = FLT_NEQ(rt_raster_get_x_skew(raster), 0) ? true : false; skewed[1] = FLT_NEQ(rt_raster_get_y_skew(raster), 0) ? true : false; /* column and row */ for (i = 1; i <= 2; i++) { if (PG_ARGISNULL(i)) { /* if skewed on same axis, parameter is required */ if (skewed[i - 1]) { elog(NOTICE, "Pixel row and column required for computing longitude and latitude of a rotated raster"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } continue; } cr[i - 1] = PG_GETARG_INT32(i); } /* user-provided value is 1-based but needs to be 0-based */ if (rt_raster_cell_to_geopoint( raster, (double) cr[0] - 1, (double) cr[1] - 1, &(cw[0]), &(cw[1]), NULL ) != ES_NONE) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_rasterToWorldCoord: Could not compute longitude and latitude from pixel row and column"); PG_RETURN_NULL(); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); values[0] = Float8GetDatum(cw[0]); values[1] = Float8GetDatum(cw[1]); memset(nulls, FALSE, sizeof(bool) * values_length); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); PG_RETURN_DATUM(result); } PG_FUNCTION_INFO_V1(RASTER_worldToRasterCoord); Datum RASTER_worldToRasterCoord(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_raster raster = NULL; int i = 0; double cw[2] = {0}; double _cr[2] = {0}; int cr[2] = {0}; bool skewed = false; TupleDesc tupdesc; int values_length = 2; Datum values[values_length]; bool nulls[values_length]; HeapTuple tuple; Datum result; POSTGIS_RT_DEBUG(3, "RASTER_worldToRasterCoord: Starting"); /* pgraster is null, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); pgraster = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, sizeof(struct rt_raster_serialized_t)); /* raster */ raster = rt_raster_deserialize(pgraster, TRUE); if (!raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_worldToRasterCoord: Could not deserialize raster"); PG_RETURN_NULL(); } /* raster skewed? */ skewed = FLT_NEQ(rt_raster_get_x_skew(raster), 0) ? true : false; if (!skewed) skewed = FLT_NEQ(rt_raster_get_y_skew(raster), 0) ? true : false; /* longitude and latitude */ for (i = 1; i <= 2; i++) { if (PG_ARGISNULL(i)) { /* if skewed, parameter is required */ if (skewed) { elog(NOTICE, "Latitude and longitude required for computing pixel row and column of a rotated raster"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); PG_RETURN_NULL(); } continue; } cw[i - 1] = PG_GETARG_FLOAT8(i); } /* return pixel row and column values are 0-based */ if (rt_raster_geopoint_to_cell( raster, cw[0], cw[1], &(_cr[0]), &(_cr[1]), NULL ) != ES_NONE) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_worldToRasterCoord: Could not compute pixel row and column from longitude and latitude"); PG_RETURN_NULL(); } rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* force to integer and add one to make 1-based */ cr[0] = ((int) _cr[0]) + 1; cr[1] = ((int) _cr[1]) + 1; /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) { ereport(ERROR, ( errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( "function returning record called in context " "that cannot accept type record" ) )); } BlessTupleDesc(tupdesc); values[0] = Int32GetDatum(cr[0]); values[1] = Int32GetDatum(cr[1]); memset(nulls, FALSE, sizeof(bool) * values_length); /* build a tuple */ tuple = heap_form_tuple(tupdesc, values, nulls); /* make the tuple into a datum */ result = HeapTupleGetDatum(tuple); PG_RETURN_DATUM(result); } /** * See if two rasters intersect */ PG_FUNCTION_INFO_V1(RASTER_intersects); Datum RASTER_intersects(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_intersects: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_intersects( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_intersects: Could not test for intersection on the two rasters"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if two rasters overlap */ PG_FUNCTION_INFO_V1(RASTER_overlaps); Datum RASTER_overlaps(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_overlaps: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_overlaps( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_overlaps: Could not test for overlap on the two rasters"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if two rasters touch */ PG_FUNCTION_INFO_V1(RASTER_touches); Datum RASTER_touches(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_touches: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_touches( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_touches: Could not test for touch on the two rasters"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if the first raster contains the second raster */ PG_FUNCTION_INFO_V1(RASTER_contains); Datum RASTER_contains(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_contains: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_contains( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_contains: Could not test that the first raster contains the second raster"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if the first raster contains properly the second raster */ PG_FUNCTION_INFO_V1(RASTER_containsProperly); Datum RASTER_containsProperly(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_containsProperly: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_contains_properly( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_containsProperly: Could not test that the first raster contains properly the second raster"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if the first raster covers the second raster */ PG_FUNCTION_INFO_V1(RASTER_covers); Datum RASTER_covers(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_covers: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_covers( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_covers: Could not test that the first raster covers the second raster"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if the first raster is covered by the second raster */ PG_FUNCTION_INFO_V1(RASTER_coveredby); Datum RASTER_coveredby(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_coveredby: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_coveredby( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_coveredby: Could not test that the first raster is covered by the second raster"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if the two rasters are within the specified distance of each other */ PG_FUNCTION_INFO_V1(RASTER_dwithin); Datum RASTER_dwithin(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; double distance = 0; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_dwithin: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* distance */ if (PG_ARGISNULL(4)) { elog(NOTICE, "Distance cannot be NULL. Returning NULL"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } distance = PG_GETARG_FLOAT8(4); if (distance < 0) { elog(NOTICE, "Distance cannot be less than zero. Returning NULL"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_within_distance( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), distance, &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_dwithin: Could not test that the two rasters are within the specified distance of each other"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if the two rasters are fully within the specified distance of each other */ PG_FUNCTION_INFO_V1(RASTER_dfullywithin); Datum RASTER_dfullywithin(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t bandindex[2] = {0}; uint32_t hasbandindex[2] = {0}; double distance = 0; uint32_t i; uint32_t j; uint32_t k; uint32_t numBands; int rtn; int result; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_dfullywithin: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* numbands */ numBands = rt_raster_get_num_bands(rast[i]); if (numBands < 1) { elog(NOTICE, "The %s raster provided has no bands", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); if (bandindex[i] < 1 || bandindex[i] > numBands) { elog(NOTICE, "Invalid band index (must use 1-based) for the %s raster. Returning NULL", i < 1 ? "first" : "second"); if (i > 0) i++; for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } hasbandindex[i] = 1; } else hasbandindex[i] = 0; POSTGIS_RT_DEBUGF(4, "hasbandindex[%d] = %d", i, hasbandindex[i]); POSTGIS_RT_DEBUGF(4, "bandindex[%d] = %d", i, bandindex[i]); j++; } /* distance */ if (PG_ARGISNULL(4)) { elog(NOTICE, "Distance cannot be NULL. Returning NULL"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } distance = PG_GETARG_FLOAT8(4); if (distance < 0) { elog(NOTICE, "Distance cannot be less than zero. Returning NULL"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* hasbandindex must be balanced */ if ( (hasbandindex[0] && !hasbandindex[1]) || (!hasbandindex[0] && hasbandindex[1]) ) { elog(NOTICE, "Missing band index. Band indices must be provided for both rasters if any one is provided"); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* SRID must match */ if (rt_raster_get_srid(rast[0]) != rt_raster_get_srid(rast[1])) { for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "The two rasters provided have different SRIDs"); PG_RETURN_NULL(); } rtn = rt_raster_fully_within_distance( rast[0], (hasbandindex[0] ? bandindex[0] - 1 : -1), rast[1], (hasbandindex[1] ? bandindex[1] - 1 : -1), distance, &result ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_dfullywithin: Could not test that the two rasters are fully within the specified distance of each other"); PG_RETURN_NULL(); } PG_RETURN_BOOL(result); } /** * See if two rasters are aligned */ PG_FUNCTION_INFO_V1(RASTER_sameAlignment); Datum RASTER_sameAlignment(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t i; uint32_t j; uint32_t k; int rtn; int aligned = 0; char *reason = NULL; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(j), 0, sizeof(struct rt_raster_serialized_t)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], TRUE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_sameAlignment: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } } rtn = rt_raster_same_alignment( rast[0], rast[1], &aligned, &reason ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_sameAlignment: Could not test for alignment on the two rasters"); PG_RETURN_NULL(); } /* only output reason if not aligned */ if (reason != NULL && !aligned) elog(NOTICE, "%s", reason); PG_RETURN_BOOL(aligned); } /** * Return a reason why two rasters are not aligned */ PG_FUNCTION_INFO_V1(RASTER_notSameAlignmentReason); Datum RASTER_notSameAlignmentReason(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_raster rast[2] = {NULL}; uint32_t i; uint32_t j; uint32_t k; int rtn; int aligned = 0; char *reason = NULL; text *result = NULL; for (i = 0, j = 0; i < set_count; i++) { /* pgrast is null, return null */ if (PG_ARGISNULL(j)) { for (k = 0; k < i; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(j), 0, sizeof(struct rt_raster_serialized_t)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], TRUE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i) rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_notSameAlignmentReason: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } } rtn = rt_raster_same_alignment( rast[0], rast[1], &aligned, &reason ); for (k = 0; k < set_count; k++) { rt_raster_destroy(rast[k]); PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } if (rtn != ES_NONE) { elog(ERROR, "RASTER_notSameAlignmentReason: Could not test for alignment on the two rasters"); PG_RETURN_NULL(); } result = cstring2text(reason); PG_RETURN_TEXT_P(result); } /** * Two raster MapAlgebra */ PG_FUNCTION_INFO_V1(RASTER_mapAlgebra2); Datum RASTER_mapAlgebra2(PG_FUNCTION_ARGS) { const int set_count = 2; rt_pgraster *pgrast[2]; int pgrastpos[2] = {-1, -1}; rt_pgraster *pgrtn; rt_raster rast[2] = {NULL}; int _isempty[2] = {0}; uint32_t bandindex[2] = {0}; rt_raster _rast[2] = {NULL}; rt_band _band[2] = {NULL}; int _hasnodata[2] = {0}; double _nodataval[2] = {0}; double _offset[4] = {0.}; double _rastoffset[2][4] = {{0.}}; int _haspixel[2] = {0}; double _pixel[2] = {0}; int _pos[2][2] = {{0}}; uint16_t _dim[2][2] = {{0}}; char *pixtypename = NULL; rt_pixtype pixtype = PT_END; char *extenttypename = NULL; rt_extenttype extenttype = ET_INTERSECTION; rt_raster raster = NULL; rt_band band = NULL; uint16_t dim[2] = {0}; int haspixel = 0; double pixel = 0.; double nodataval = 0; double gt[6] = {0.}; Oid calltype = InvalidOid; const int spi_count = 3; uint16_t spi_exprpos[3] = {4, 7, 8}; uint32_t spi_argcount[3] = {0}; char *expr = NULL; char *sql = NULL; SPIPlanPtr spi_plan[3] = {NULL}; uint16_t spi_empty = 0; Oid *argtype = NULL; const int argkwcount = 8; uint8_t argpos[3][8] = {{0}}; char *argkw[] = {"[rast1.x]", "[rast1.y]", "[rast1.val]", "[rast1]", "[rast2.x]", "[rast2.y]", "[rast2.val]", "[rast2]"}; Datum values[argkwcount]; bool nulls[argkwcount]; TupleDesc tupdesc; SPITupleTable *tuptable = NULL; HeapTuple tuple; Datum datum; bool isnull = FALSE; int hasargval[3] = {0}; double argval[3] = {0.}; int hasnodatanodataval = 0; double nodatanodataval = 0; int isnodata = 0; Oid ufc_noid = InvalidOid; FmgrInfo ufl_info; FunctionCallInfoData ufc_info; int ufc_nullcount = 0; int idx = 0; uint32_t i = 0; uint32_t j = 0; uint32_t k = 0; uint32_t x = 0; uint32_t y = 0; int _x = 0; int _y = 0; int err; int aligned = 0; int len = 0; POSTGIS_RT_DEBUG(3, "Starting RASTER_mapAlgebra2"); for (i = 0, j = 0; i < set_count; i++) { if (!PG_ARGISNULL(j)) { pgrast[i] = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(j)); pgrastpos[i] = j; j++; /* raster */ rast[i] = rt_raster_deserialize(pgrast[i], FALSE); if (!rast[i]) { for (k = 0; k <= i; k++) { if (k < i && rast[k] != NULL) rt_raster_destroy(rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: Could not deserialize the %s raster", i < 1 ? "first" : "second"); PG_RETURN_NULL(); } /* empty */ _isempty[i] = rt_raster_is_empty(rast[i]); /* band index */ if (!PG_ARGISNULL(j)) { bandindex[i] = PG_GETARG_INT32(j); } j++; } else { _isempty[i] = 1; j += 2; } POSTGIS_RT_DEBUGF(3, "_isempty[%d] = %d", i, _isempty[i]); } /* both rasters are NULL */ if (rast[0] == NULL && rast[1] == NULL) { elog(NOTICE, "The two rasters provided are NULL. Returning NULL"); for (k = 0; k < set_count; k++) { if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* both rasters are empty */ if (_isempty[0] && _isempty[1]) { elog(NOTICE, "The two rasters provided are empty. Returning empty raster"); raster = rt_raster_new(0, 0); if (raster == NULL) { for (k = 0; k < set_count; k++) { if (rast[k] != NULL) rt_raster_destroy(rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: Could not create empty raster"); PG_RETURN_NULL(); } rt_raster_set_scale(raster, 0, 0); pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* replace the empty or NULL raster with one matching the other */ if ( (rast[0] == NULL || _isempty[0]) || (rast[1] == NULL || _isempty[1]) ) { /* first raster is empty */ if (rast[0] == NULL || _isempty[0]) { i = 0; j = 1; } /* second raster is empty */ else { i = 1; j = 0; } _rast[j] = rast[j]; /* raster is empty, destroy it */ if (_rast[i] != NULL) rt_raster_destroy(_rast[i]); _dim[i][0] = rt_raster_get_width(_rast[j]); _dim[i][1] = rt_raster_get_height(_rast[j]); _dim[j][0] = rt_raster_get_width(_rast[j]); _dim[j][1] = rt_raster_get_height(_rast[j]); _rast[i] = rt_raster_new( _dim[j][0], _dim[j][1] ); if (_rast[i] == NULL) { rt_raster_destroy(_rast[j]); for (k = 0; k < set_count; k++) { if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: Could not create NODATA raster"); PG_RETURN_NULL(); } rt_raster_set_srid(_rast[i], rt_raster_get_srid(_rast[j])); rt_raster_get_geotransform_matrix(_rast[j], gt); rt_raster_set_geotransform_matrix(_rast[i], gt); } else { _rast[0] = rast[0]; _dim[0][0] = rt_raster_get_width(_rast[0]); _dim[0][1] = rt_raster_get_height(_rast[0]); _rast[1] = rast[1]; _dim[1][0] = rt_raster_get_width(_rast[1]); _dim[1][1] = rt_raster_get_height(_rast[1]); } /* SRID must match */ /* if (rt_raster_get_srid(_rast[0]) != rt_raster_get_srid(_rast[1])) { elog(NOTICE, "The two rasters provided have different SRIDs. Returning NULL"); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } */ /* same alignment */ if (rt_raster_same_alignment(_rast[0], _rast[1], &aligned, NULL) != ES_NONE) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: Could not test for alignment on the two rasters"); PG_RETURN_NULL(); } if (!aligned) { elog(NOTICE, "The two rasters provided do not have the same alignment. Returning NULL"); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } PG_RETURN_NULL(); } /* pixel type */ if (!PG_ARGISNULL(5)) { pixtypename = text_to_cstring(PG_GETARG_TEXT_P(5)); /* Get the pixel type index */ pixtype = rt_pixtype_index_from_name(pixtypename); if (pixtype == PT_END ) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: Invalid pixel type: %s", pixtypename); PG_RETURN_NULL(); } } /* extent type */ if (!PG_ARGISNULL(6)) { extenttypename = rtpg_strtoupper(rtpg_trim(text_to_cstring(PG_GETARG_TEXT_P(6)))); extenttype = rt_util_extent_type(extenttypename); } POSTGIS_RT_DEBUGF(3, "extenttype: %d %s", extenttype, extenttypename); /* computed raster from extent type */ err = rt_raster_from_two_rasters( _rast[0], _rast[1], extenttype, &raster, _offset ); if (err != ES_NONE) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: Could not get output raster of correct extent"); PG_RETURN_NULL(); } /* copy offsets */ _rastoffset[0][0] = _offset[0]; _rastoffset[0][1] = _offset[1]; _rastoffset[1][0] = _offset[2]; _rastoffset[1][1] = _offset[3]; /* get output raster dimensions */ dim[0] = rt_raster_get_width(raster); dim[1] = rt_raster_get_height(raster); i = 2; /* handle special cases for extent */ switch (extenttype) { case ET_FIRST: i = 0; case ET_SECOND: if (i > 1) i = 1; if ( _isempty[i] && ( (extenttype == ET_FIRST && i == 0) || (extenttype == ET_SECOND && i == 1) ) ) { elog(NOTICE, "The %s raster is NULL. Returning NULL", (i != 1 ? "FIRST" : "SECOND")); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); PG_RETURN_NULL(); } /* specified band not found */ if (!rt_raster_has_band(_rast[i], bandindex[i] - 1)) { elog(NOTICE, "The %s raster does not have the band at index %d. Returning no band raster of correct extent", (i != 1 ? "FIRST" : "SECOND"), bandindex[i] ); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } break; case ET_UNION: break; case ET_INTERSECTION: /* no intersection */ if ( _isempty[0] || _isempty[1] || !dim[0] || !dim[1] ) { elog(NOTICE, "The two rasters provided have no intersection. Returning no band raster"); /* raster has dimension, replace with no band raster */ if (dim[0] || dim[1]) { rt_raster_destroy(raster); raster = rt_raster_new(0, 0); if (raster == NULL) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: Could not create no band raster"); PG_RETURN_NULL(); } rt_raster_set_scale(raster, 0, 0); rt_raster_set_srid(raster, rt_raster_get_srid(_rast[0])); } for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } break; case ET_LAST: case ET_CUSTOM: for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } elog(ERROR, "RASTER_mapAlgebra2: ET_LAST and ET_CUSTOM are not implemented"); PG_RETURN_NULL(); break; } /* both rasters do not have specified bands */ if ( (!_isempty[0] && !rt_raster_has_band(_rast[0], bandindex[0] - 1)) && (!_isempty[1] && !rt_raster_has_band(_rast[1], bandindex[1] - 1)) ) { elog(NOTICE, "The two rasters provided do not have the respectively specified band indices. Returning no band raster of correct extent"); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* get bands */ for (i = 0; i < set_count; i++) { if (_isempty[i] || !rt_raster_has_band(_rast[i], bandindex[i] - 1)) { _hasnodata[i] = 1; _nodataval[i] = 0; continue; } _band[i] = rt_raster_get_band(_rast[i], bandindex[i] - 1); if (_band[i] == NULL) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not get band %d of the %s raster", bandindex[i], (i < 1 ? "FIRST" : "SECOND") ); PG_RETURN_NULL(); } _hasnodata[i] = rt_band_get_hasnodata_flag(_band[i]); if (_hasnodata[i]) rt_band_get_nodata(_band[i], &(_nodataval[i])); } /* pixtype is PT_END, get pixtype based upon extent */ if (pixtype == PT_END) { if ((extenttype == ET_SECOND && !_isempty[1]) || _isempty[0]) pixtype = rt_band_get_pixtype(_band[1]); else pixtype = rt_band_get_pixtype(_band[0]); } /* nodata value for new band */ if (extenttype == ET_SECOND && !_isempty[1] && _hasnodata[1]) { nodataval = _nodataval[1]; } else if (!_isempty[0] && _hasnodata[0]) { nodataval = _nodataval[0]; } else if (!_isempty[1] && _hasnodata[1]) { nodataval = _nodataval[1]; } else { elog(NOTICE, "Neither raster provided has a NODATA value for the specified band indices. NODATA value set to minimum possible for %s", rt_pixtype_name(pixtype)); nodataval = rt_pixtype_get_min_value(pixtype); } /* add band to output raster */ if (rt_raster_generate_new_band( raster, pixtype, nodataval, 1, nodataval, 0 ) < 0) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not add new band to output raster"); PG_RETURN_NULL(); } /* get output band */ band = rt_raster_get_band(raster, 0); if (band == NULL) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not get newly added band of output raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "offsets = (%d, %d, %d, %d)", (int) _rastoffset[0][0], (int) _rastoffset[0][1], (int) _rastoffset[1][0], (int) _rastoffset[1][1] ); POSTGIS_RT_DEBUGF(4, "metadata = (%f, %f, %d, %d, %f, %f, %f, %f, %d)", rt_raster_get_x_offset(raster), rt_raster_get_y_offset(raster), rt_raster_get_width(raster), rt_raster_get_height(raster), rt_raster_get_x_scale(raster), rt_raster_get_y_scale(raster), rt_raster_get_x_skew(raster), rt_raster_get_y_skew(raster), rt_raster_get_srid(raster) ); /* determine who called this function Arg 4 will either be text or regprocedure */ POSTGIS_RT_DEBUG(3, "checking parameter type for arg 4"); calltype = get_fn_expr_argtype(fcinfo->flinfo, 4); switch(calltype) { case TEXTOID: { POSTGIS_RT_DEBUG(3, "arg 4 is \"expression\"!"); /* connect SPI */ if (SPI_connect() != SPI_OK_CONNECT) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not connect to the SPI manager"); PG_RETURN_NULL(); } /* reset hasargval */ memset(hasargval, 0, sizeof(int) * spi_count); /* process expressions spi_exprpos elements are: 4 - expression => spi_plan[0] 7 - nodata1expr => spi_plan[1] 8 - nodata2expr => spi_plan[2] */ for (i = 0; i < spi_count; i++) { if (!PG_ARGISNULL(spi_exprpos[i])) { char *tmp = NULL; char place[5] = "$1"; expr = text_to_cstring(PG_GETARG_TEXT_P(spi_exprpos[i])); POSTGIS_RT_DEBUGF(3, "raw expr #%d: %s", i, expr); for (j = 0, k = 1; j < argkwcount; j++) { /* attempt to replace keyword with placeholder */ len = 0; tmp = rtpg_strreplace(expr, argkw[j], place, &len); pfree(expr); expr = tmp; if (len) { spi_argcount[i]++; argpos[i][j] = k++; sprintf(place, "$%d", k); } else argpos[i][j] = 0; } len = strlen("SELECT (") + strlen(expr) + strlen(")::double precision"); sql = (char *) palloc(len + 1); if (sql == NULL) { for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not allocate memory for expression parameter %d", spi_exprpos[i]); PG_RETURN_NULL(); } strncpy(sql, "SELECT (", strlen("SELECT (")); strncpy(sql + strlen("SELECT ("), expr, strlen(expr)); strncpy(sql + strlen("SELECT (") + strlen(expr), ")::double precision", strlen(")::double precision")); sql[len] = '\0'; POSTGIS_RT_DEBUGF(3, "sql #%d: %s", i, sql); /* create prepared plan */ if (spi_argcount[i]) { argtype = (Oid *) palloc(spi_argcount[i] * sizeof(Oid)); if (argtype == NULL) { pfree(sql); for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not allocate memory for prepared plan argtypes of expression parameter %d", spi_exprpos[i]); PG_RETURN_NULL(); } /* specify datatypes of parameters */ for (j = 0, k = 0; j < argkwcount; j++) { if (argpos[i][j] < 1) continue; /* positions are INT4 */ if ( (strstr(argkw[j], "[rast1.x]") != NULL) || (strstr(argkw[j], "[rast1.y]") != NULL) || (strstr(argkw[j], "[rast2.x]") != NULL) || (strstr(argkw[j], "[rast2.y]") != NULL) ) { argtype[k] = INT4OID; } /* everything else is FLOAT8 */ else { argtype[k] = FLOAT8OID; } k++; } spi_plan[i] = SPI_prepare(sql, spi_argcount[i], argtype); pfree(argtype); if (spi_plan[i] == NULL) { pfree(sql); for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not create prepared plan of expression parameter %d", spi_exprpos[i]); PG_RETURN_NULL(); } } /* no args, just execute query */ else { err = SPI_execute(sql, TRUE, 0); if (err != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { pfree(sql); for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not evaluate expression parameter %d", spi_exprpos[i]); PG_RETURN_NULL(); } /* get output of prepared plan */ tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isnull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { pfree(sql); if (SPI_tuptable) SPI_freetuptable(tuptable); for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not get result of expression parameter %d", spi_exprpos[i]); PG_RETURN_NULL(); } if (!isnull) { hasargval[i] = 1; argval[i] = DatumGetFloat8(datum); } if (SPI_tuptable) SPI_freetuptable(tuptable); } pfree(sql); } else spi_empty++; } /* nodatanodataval */ if (!PG_ARGISNULL(9)) { hasnodatanodataval = 1; nodatanodataval = PG_GETARG_FLOAT8(9); } else hasnodatanodataval = 0; break; } case REGPROCEDUREOID: { POSTGIS_RT_DEBUG(3, "arg 4 is \"userfunction\"!"); if (!PG_ARGISNULL(4)) { ufc_nullcount = 0; ufc_noid = PG_GETARG_OID(4); /* get function info */ fmgr_info(ufc_noid, &ufl_info); /* function cannot return set */ err = 0; if (ufl_info.fn_retset) { err = 1; } /* function should have correct # of args */ else if (ufl_info.fn_nargs < 3 || ufl_info.fn_nargs > 4) { err = 2; } /* TODO: consider adding checks of the userfunction parameters should be able to use get_fn_expr_argtype() of fmgr.c */ if (err > 0) { for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); if (err > 1) elog(ERROR, "RASTER_mapAlgebra2: Function provided must have three or four input parameters"); else elog(ERROR, "RASTER_mapAlgebra2: Function provided must return double precision not resultset"); PG_RETURN_NULL(); } if (func_volatile(ufc_noid) == 'v') { elog(NOTICE, "Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE"); } /* prep function call data */ #if POSTGIS_PGSQL_VERSION <= 90 InitFunctionCallInfoData(ufc_info, &ufl_info, ufl_info.fn_nargs, InvalidOid, NULL); #else InitFunctionCallInfoData(ufc_info, &ufl_info, ufl_info.fn_nargs, InvalidOid, NULL, NULL); #endif memset(ufc_info.argnull, FALSE, sizeof(bool) * ufl_info.fn_nargs); if (ufl_info.fn_nargs != 4) k = 2; else k = 3; if (!PG_ARGISNULL(7)) { ufc_info.arg[k] = PG_GETARG_DATUM(7); } else { ufc_info.arg[k] = (Datum) NULL; ufc_info.argnull[k] = TRUE; ufc_nullcount++; } } break; } default: for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Invalid data type for expression or userfunction"); PG_RETURN_NULL(); break; } /* loop over pixels */ /* if any expression present, run */ if (( (calltype == TEXTOID) && ( (spi_empty != spi_count) || hasnodatanodataval ) ) || ( (calltype == REGPROCEDUREOID) && (ufc_noid != InvalidOid) )) { for (x = 0; x < dim[0]; x++) { for (y = 0; y < dim[1]; y++) { /* get pixel from each raster */ for (i = 0; i < set_count; i++) { _haspixel[i] = 0; _pixel[i] = 0; /* row/column */ _x = x - (int) _rastoffset[i][0]; _y = y - (int) _rastoffset[i][1]; /* store _x and _y in 1-based */ _pos[i][0] = _x + 1; _pos[i][1] = _y + 1; /* get pixel value */ if (_band[i] == NULL) { if (!_hasnodata[i]) { _haspixel[i] = 1; _pixel[i] = _nodataval[i]; } } else if ( !_isempty[i] && (_x >= 0 && _x < _dim[i][0]) && (_y >= 0 && _y < _dim[i][1]) ) { err = rt_band_get_pixel(_band[i], _x, _y, &(_pixel[i]), &isnodata); if (err != ES_NONE) { if (calltype == TEXTOID) { for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); } for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not get pixel of %s raster", (i < 1 ? "FIRST" : "SECOND")); PG_RETURN_NULL(); } if (!_hasnodata[i] || !isnodata) _haspixel[i] = 1; } POSTGIS_RT_DEBUGF(5, "pixel r%d(%d, %d) = %d, %f", i, _x, _y, _haspixel[i], _pixel[i] ); } haspixel = 0; switch (calltype) { case TEXTOID: { /* which prepared plan to use? */ /* !pixel0 && !pixel1 */ /* use nodatanodataval */ if (!_haspixel[0] && !_haspixel[1]) i = 3; /* pixel0 && !pixel1 */ /* run spi_plan[2] (nodata2expr) */ else if (_haspixel[0] && !_haspixel[1]) i = 2; /* !pixel0 && pixel1 */ /* run spi_plan[1] (nodata1expr) */ else if (!_haspixel[0] && _haspixel[1]) i = 1; /* pixel0 && pixel1 */ /* run spi_plan[0] (expression) */ else i = 0; /* process values */ if (i == 3) { if (hasnodatanodataval) { haspixel = 1; pixel = nodatanodataval; } } /* has an evaluated value */ else if (hasargval[i]) { haspixel = 1; pixel = argval[i]; } /* prepared plan exists */ else if (spi_plan[i] != NULL) { POSTGIS_RT_DEBUGF(4, "Using prepared plan: %d", i); /* expression has argument(s) */ if (spi_argcount[i]) { /* reset values to (Datum) NULL */ memset(values, (Datum) NULL, sizeof(Datum) * argkwcount); /* reset nulls to FALSE */ memset(nulls, FALSE, sizeof(bool) * argkwcount); /* set values and nulls */ for (j = 0; j < argkwcount; j++) { idx = argpos[i][j]; if (idx < 1) continue; idx--; /* 1-based becomes 0-based */ if (strstr(argkw[j], "[rast1.x]") != NULL) { values[idx] = _pos[0][0]; } else if (strstr(argkw[j], "[rast1.y]") != NULL) { values[idx] = _pos[0][1]; } else if ( (strstr(argkw[j], "[rast1.val]") != NULL) || (strstr(argkw[j], "[rast1]") != NULL) ) { if (_isempty[0] || !_haspixel[0]) nulls[idx] = TRUE; else values[idx] = Float8GetDatum(_pixel[0]); } else if (strstr(argkw[j], "[rast2.x]") != NULL) { values[idx] = _pos[1][0]; } else if (strstr(argkw[j], "[rast2.y]") != NULL) { values[idx] = _pos[1][1]; } else if ( (strstr(argkw[j], "[rast2.val]") != NULL) || (strstr(argkw[j], "[rast2]") != NULL) ) { if (_isempty[1] || !_haspixel[1]) nulls[idx] = TRUE; else values[idx] = Float8GetDatum(_pixel[1]); } } } /* run prepared plan */ err = SPI_execute_plan(spi_plan[i], values, nulls, TRUE, 1); if (err != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Unexpected error when running prepared statement %d", i); PG_RETURN_NULL(); } /* get output of prepared plan */ tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isnull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { if (SPI_tuptable) SPI_freetuptable(tuptable); for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not get result of prepared statement %d", i); PG_RETURN_NULL(); } if (!isnull) { haspixel = 1; pixel = DatumGetFloat8(datum); } if (SPI_tuptable) SPI_freetuptable(tuptable); } } break; case REGPROCEDUREOID: { Datum d[4]; ArrayType *a; /* build fcnarg */ for (i = 0; i < set_count; i++) { ufc_info.arg[i] = Float8GetDatum(_pixel[i]); if (_haspixel[i]) { ufc_info.argnull[i] = FALSE; ufc_nullcount--; } else { ufc_info.argnull[i] = TRUE; ufc_nullcount++; } } /* function is strict and null parameter is passed */ /* http://archives.postgresql.org/pgsql-general/2011-11/msg00424.php */ if (ufl_info.fn_strict && ufc_nullcount) break; /* 4 parameters, add position */ if (ufl_info.fn_nargs == 4) { /* Datum of 4 element array */ /* array is (x1, y1, x2, y2) */ for (i = 0; i < set_count; i++) { if (i < 1) { d[0] = Int32GetDatum(_pos[i][0]); d[1] = Int32GetDatum(_pos[i][1]); } else { d[2] = Int32GetDatum(_pos[i][0]); d[3] = Int32GetDatum(_pos[i][1]); } } a = construct_array(d, 4, INT4OID, sizeof(int32), true, 'i'); ufc_info.arg[2] = PointerGetDatum(a); ufc_info.argnull[2] = FALSE; } datum = FunctionCallInvoke(&ufc_info); /* result is not null*/ if (!ufc_info.isnull) { haspixel = 1; pixel = DatumGetFloat8(datum); } } break; } /* burn pixel if haspixel != 0 */ if (haspixel) { if (rt_band_set_pixel(band, x, y, pixel, NULL) != ES_NONE) { if (calltype == TEXTOID) { for (k = 0; k < spi_count; k++) SPI_freeplan(spi_plan[k]); SPI_finish(); } for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } rt_raster_destroy(raster); elog(ERROR, "RASTER_mapAlgebra2: Could not set pixel value of output raster"); PG_RETURN_NULL(); } } POSTGIS_RT_DEBUGF(5, "(x, y, val) = (%d, %d, %f)", x, y, haspixel ? pixel : nodataval); } /* y: height */ } /* x: width */ } /* CLEANUP */ if (calltype == TEXTOID) { for (i = 0; i < spi_count; i++) { if (spi_plan[i] != NULL) SPI_freeplan(spi_plan[i]); } SPI_finish(); } for (k = 0; k < set_count; k++) { if (_rast[k] != NULL) rt_raster_destroy(_rast[k]); if (pgrastpos[k] != -1) PG_FREE_IF_COPY(pgrast[k], pgrastpos[k]); } pgrtn = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgrtn) PG_RETURN_NULL(); POSTGIS_RT_DEBUG(3, "Finished RASTER_mapAlgebra2"); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * One raster neighborhood MapAlgebra */ PG_FUNCTION_INFO_V1(RASTER_mapAlgebraFctNgb); Datum RASTER_mapAlgebraFctNgb(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; rt_pgraster *pgrtn = NULL; rt_raster raster = NULL; rt_raster newrast = NULL; rt_band band = NULL; rt_band newband = NULL; int x, y, nband, width, height, ngbwidth, ngbheight, winwidth, winheight, u, v, nIndex, nNullItems; double r, rpix; double newnodatavalue = 0.0; double newinitialvalue = 0.0; double newval = 0.0; rt_pixtype newpixeltype; int ret = -1; Oid oid; FmgrInfo cbinfo; FunctionCallInfoData cbdata; Datum tmpnewval; ArrayType * neighborDatum; char * strFromText = NULL; text * txtNodataMode = NULL; text * txtCallbackParam = NULL; int intReplace = 0; float fltReplace = 0; bool valuereplace = false, pixelreplace, nNodataOnly = true, nNullSkip = false; Datum * neighborData = NULL; bool * neighborNulls = NULL; int neighborDims[2]; int neighborLbs[2]; int16 typlen; bool typbyval; char typalign; POSTGIS_RT_DEBUG(2, "RASTER_mapAlgebraFctNgb: STARTING..."); /* Check raster */ if (PG_ARGISNULL(0)) { elog(WARNING, "Raster is NULL. Returning NULL"); PG_RETURN_NULL(); } /* Deserialize raster */ pgraster = (rt_pgraster *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); raster = rt_raster_deserialize(pgraster, FALSE); if (NULL == raster) { PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not deserialize raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFctNgb: Getting arguments..."); /* Get the rest of the arguments */ if (PG_ARGISNULL(1)) nband = 1; else nband = PG_GETARG_INT32(1); if (nband < 1) nband = 1; POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFctNgb: Creating new empty raster..."); /** * Create a new empty raster with having the same georeference as the * provided raster **/ width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); newrast = rt_raster_new(width, height); if ( NULL == newrast ) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not create a new raster"); PG_RETURN_NULL(); } rt_raster_set_scale(newrast, rt_raster_get_x_scale(raster), rt_raster_get_y_scale(raster)); rt_raster_set_offsets(newrast, rt_raster_get_x_offset(raster), rt_raster_get_y_offset(raster)); rt_raster_set_skews(newrast, rt_raster_get_x_skew(raster), rt_raster_get_y_skew(raster)); rt_raster_set_srid(newrast, rt_raster_get_srid(raster)); /** * If this new raster is empty (width = 0 OR height = 0) then there is * nothing to compute and we return it right now **/ if (rt_raster_is_empty(newrast)) { elog(NOTICE, "Raster is empty. Returning an empty raster"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFctNgb: Getting raster band %d...", nband); /** * Check if the raster has the required band. Otherwise, return a raster * without band **/ if (!rt_raster_has_band(raster, nband - 1)) { elog(NOTICE, "Raster does not have the required band. Returning a raster " "without a band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* Get the raster band */ band = rt_raster_get_band(raster, nband - 1); if ( NULL == band ) { elog(NOTICE, "Could not get the required band. Returning a raster " "without a band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* * Get NODATA value */ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFctNgb: Getting NODATA value for band..."); if (rt_band_get_hasnodata_flag(band)) { rt_band_get_nodata(band, &newnodatavalue); } else { newnodatavalue = rt_band_get_min_value(band); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFctNgb: NODATA value for band: %f", newnodatavalue); /** * We set the initial value of the future band to nodata value. If nodata * value is null, then the raster will be initialized to * rt_band_get_min_value but all the values should be recomputed anyway **/ newinitialvalue = newnodatavalue; /** * Set the new pixeltype **/ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFctNgb: Setting pixeltype..."); if (PG_ARGISNULL(2)) { newpixeltype = rt_band_get_pixtype(band); } else { strFromText = text_to_cstring(PG_GETARG_TEXT_P(2)); POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFctNgb: Pixeltype parameter: %s", strFromText); newpixeltype = rt_pixtype_index_from_name(strFromText); pfree(strFromText); if (newpixeltype == PT_END) newpixeltype = rt_band_get_pixtype(band); } if (newpixeltype == PT_END) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFctNgb: Invalid pixeltype"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFctNgb: Pixeltype set to %s (%d)", rt_pixtype_name(newpixeltype), newpixeltype); /* Get the name of the callback userfunction */ if (PG_ARGISNULL(5)) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFctNgb: Required function is missing"); PG_RETURN_NULL(); } oid = PG_GETARG_OID(5); if (oid == InvalidOid) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFctNgb: Got invalid function object id"); PG_RETURN_NULL(); } fmgr_info(oid, &cbinfo); /* function cannot return set */ if (cbinfo.fn_retset) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFctNgb: Function provided must return double precision not resultset"); PG_RETURN_NULL(); } /* function should have correct # of args */ else if (cbinfo.fn_nargs != 3) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFctNgb: Function does not have three input parameters"); PG_RETURN_NULL(); } if (func_volatile(oid) == 'v') { elog(NOTICE, "Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE"); } /* prep function call data */ #if POSTGIS_PGSQL_VERSION <= 90 InitFunctionCallInfoData(cbdata, &cbinfo, 3, InvalidOid, NULL); #else InitFunctionCallInfoData(cbdata, &cbinfo, 3, InvalidOid, NULL, NULL); #endif memset(cbdata.argnull, FALSE, sizeof(bool) * 3); /* check that the function isn't strict if the args are null. */ if (PG_ARGISNULL(7)) { if (cbinfo.fn_strict) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); rt_raster_destroy(newrast); elog(ERROR, "RASTER_mapAlgebraFctNgb: Strict callback functions cannot have NULL parameters"); PG_RETURN_NULL(); } cbdata.arg[2] = (Datum)NULL; cbdata.argnull[2] = TRUE; } else { cbdata.arg[2] = PG_GETARG_DATUM(7); } /** * Optimization: If the raster is only filled with nodata values return * right now a raster filled with the nodatavalueexpr * TODO: Call rt_band_check_isnodata instead? **/ if (rt_band_get_isnodata_flag(band)) { POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFctNgb: Band is a nodata band, returning " "a raster filled with nodata"); rt_raster_generate_new_band(newrast, newpixeltype, newinitialvalue, TRUE, newnodatavalue, 0); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /** * Create the raster receiving all the computed values. Initialize it to the * new initial value **/ rt_raster_generate_new_band(newrast, newpixeltype, newinitialvalue, TRUE, newnodatavalue, 0); /* Get the new raster band */ newband = rt_raster_get_band(newrast, 0); if ( NULL == newband ) { elog(NOTICE, "Could not modify band for new raster. Returning new " "raster with the original band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* Get the width of the neighborhood */ if (PG_ARGISNULL(3) || PG_GETARG_INT32(3) <= 0) { elog(NOTICE, "Neighborhood width is NULL or <= 0. Returning new " "raster with the original band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } ngbwidth = PG_GETARG_INT32(3); winwidth = ngbwidth * 2 + 1; /* Get the height of the neighborhood */ if (PG_ARGISNULL(4) || PG_GETARG_INT32(4) <= 0) { elog(NOTICE, "Neighborhood height is NULL or <= 0. Returning new " "raster with the original band"); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } ngbheight = PG_GETARG_INT32(4); winheight = ngbheight * 2 + 1; /* Get the type of NODATA behavior for the neighborhoods. */ if (PG_ARGISNULL(6)) { elog(NOTICE, "Neighborhood NODATA behavior defaulting to 'ignore'"); txtNodataMode = cstring_to_text("ignore"); } else { txtNodataMode = PG_GETARG_TEXT_P(6); } txtCallbackParam = (text*)palloc(VARSIZE(txtNodataMode)); SET_VARSIZE(txtCallbackParam, VARSIZE(txtNodataMode)); memcpy((void *)VARDATA(txtCallbackParam), (void *)VARDATA(txtNodataMode), VARSIZE(txtNodataMode) - VARHDRSZ); /* pass the nodata mode into the user function */ cbdata.arg[1] = CStringGetDatum(txtCallbackParam); strFromText = text_to_cstring(txtNodataMode); strFromText = rtpg_strtoupper(strFromText); if (strcmp(strFromText, "VALUE") == 0) valuereplace = true; else if (strcmp(strFromText, "IGNORE") != 0 && strcmp(strFromText, "NULL") != 0) { /* if the text is not "IGNORE" or "NULL", it may be a numerical value */ if (sscanf(strFromText, "%d", &intReplace) <= 0 && sscanf(strFromText, "%f", &fltReplace) <= 0) { /* the value is NOT an integer NOR a floating point */ elog(NOTICE, "Neighborhood NODATA mode is not recognized. Must be one of 'value', 'ignore', " "'NULL', or a numeric value. Returning new raster with the original band"); /* clean up the nodatamode string */ pfree(txtCallbackParam); pfree(strFromText); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) { elog(ERROR, "RASTER_mapAlgebraFctNgb: Could not serialize raster"); PG_RETURN_NULL(); } SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } } else if (strcmp(strFromText, "NULL") == 0) { /* this setting means that the neighborhood should be skipped if any of the values are null */ nNullSkip = true; } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFctNgb: Main computing loop (%d x %d)", width, height); /* Allocate room for the neighborhood. */ neighborData = (Datum *)palloc(winwidth * winheight * sizeof(Datum)); neighborNulls = (bool *)palloc(winwidth * winheight * sizeof(bool)); /* The dimensions of the neighborhood array, for creating a multi-dimensional array. */ neighborDims[0] = winwidth; neighborDims[1] = winheight; /* The lower bounds for the new multi-dimensional array. */ neighborLbs[0] = 1; neighborLbs[1] = 1; /* Get information about the type of item in the multi-dimensional array (float8). */ get_typlenbyvalalign(FLOAT8OID, &typlen, &typbyval, &typalign); for (x = 0 + ngbwidth; x < width - ngbwidth; x++) { for(y = 0 + ngbheight; y < height - ngbheight; y++) { /* populate an array with the pixel values in the neighborhood */ nIndex = 0; nNullItems = 0; nNodataOnly = true; pixelreplace = false; if (valuereplace) { ret = rt_band_get_pixel(band, x, y, &rpix, NULL); if (ret == ES_NONE && FLT_NEQ(rpix, newnodatavalue)) { pixelreplace = true; } } for (u = x - ngbwidth; u <= x + ngbwidth; u++) { for (v = y - ngbheight; v <= y + ngbheight; v++) { ret = rt_band_get_pixel(band, u, v, &r, NULL); if (ret == ES_NONE) { if (FLT_NEQ(r, newnodatavalue)) { /* If the pixel value for this neighbor cell is not NODATA */ neighborData[nIndex] = Float8GetDatum((double)r); neighborNulls[nIndex] = false; nNodataOnly = false; } else { /* If the pixel value for this neighbor cell is NODATA */ if (valuereplace && pixelreplace) { /* Replace the NODATA value with the currently processing pixel. */ neighborData[nIndex] = Float8GetDatum((double)rpix); neighborNulls[nIndex] = false; /* do not increment nNullItems, since the user requested that the */ /* neighborhood replace NODATA values with the central pixel value */ } else { neighborData[nIndex] = PointerGetDatum(NULL); neighborNulls[nIndex] = true; nNullItems++; } } } else { /* Fill this will NULL if we can't read the raster pixel. */ neighborData[nIndex] = PointerGetDatum(NULL); neighborNulls[nIndex] = true; nNullItems++; } /* Next neighbor position */ nIndex++; } } /** * We compute a value only for the withdata value neighborhood since the * nodata value has already been set by the first optimization **/ if (!(nNodataOnly || /* neighborhood only contains NODATA -- OR -- */ (nNullSkip && nNullItems > 0) || /* neighborhood should skip any NODATA cells, and a NODATA cell was detected -- OR -- */ (valuereplace && nNullItems > 0))) { /* neighborhood should replace NODATA cells with the central pixel value, and a NODATA cell was detected */ POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFctNgb: (%dx%d), %dx%d neighborhood", x, y, winwidth, winheight); neighborDatum = construct_md_array((void *)neighborData, neighborNulls, 2, neighborDims, neighborLbs, FLOAT8OID, typlen, typbyval, typalign); /* Assign the neighbor matrix as the first argument to the user function */ cbdata.arg[0] = PointerGetDatum(neighborDatum); /* Invoke the user function */ tmpnewval = FunctionCallInvoke(&cbdata); /* Get the return value of the user function */ if (cbdata.isnull) { newval = newnodatavalue; } else { newval = DatumGetFloat8(tmpnewval); } POSTGIS_RT_DEBUGF(3, "RASTER_mapAlgebraFctNgb: new value = %f", newval); rt_band_set_pixel(newband, x, y, newval, NULL); } /* reset the number of null items in the neighborhood */ nNullItems = 0; } } /* clean up */ pfree(neighborNulls); pfree(neighborData); pfree(strFromText); pfree(txtCallbackParam); rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 0); /* The newrast band has been modified */ POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFctNgb: raster modified, serializing it."); /* Serialize created raster */ pgrtn = rt_raster_serialize(newrast); rt_raster_destroy(newrast); if (NULL == pgrtn) PG_RETURN_NULL(); POSTGIS_RT_DEBUG(3, "RASTER_mapAlgebraFctNgb: raster serialized"); POSTGIS_RT_DEBUG(4, "RASTER_mapAlgebraFctNgb: returning raster"); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* ---------------------------------------------------------------- */ /* n-raster MapAlgebra */ /* ---------------------------------------------------------------- */ typedef struct { Oid ufc_noid; FmgrInfo ufl_info; FunctionCallInfoData ufc_info; int ufc_nullcount; } rtpg_nmapalgebra_callback_arg; typedef struct rtpg_nmapalgebra_arg_t *rtpg_nmapalgebra_arg; struct rtpg_nmapalgebra_arg_t { int numraster; rt_pgraster **pgraster; rt_raster *raster; uint8_t *isempty; /* flag indicating if raster is empty */ uint8_t *ownsdata; /* is the raster self owned or just a pointer to another raster */ int *nband; /* source raster's band index, 0-based */ uint8_t *hasband; /* does source raster have band at index nband? */ rt_pixtype pixtype; /* output raster band's pixel type */ int hasnodata; /* NODATA flag */ double nodataval; /* NODATA value */ int distance[2]; /* distance in X and Y axis */ rt_extenttype extenttype; /* ouput raster's extent type */ rt_pgraster *pgcextent; /* custom extent of type rt_pgraster */ rt_raster cextent; /* custom extent of type rt_raster */ rtpg_nmapalgebra_callback_arg callback; }; static rtpg_nmapalgebra_arg rtpg_nmapalgebra_arg_init() { rtpg_nmapalgebra_arg arg = NULL; arg = palloc(sizeof(struct rtpg_nmapalgebra_arg_t)); if (arg == NULL) { elog(ERROR, "rtpg_nmapalgebra_arg_init: Could not allocate memory for arguments"); return NULL; } arg->numraster = 0; arg->pgraster = NULL; arg->raster = NULL; arg->isempty = NULL; arg->ownsdata = NULL; arg->nband = NULL; arg->hasband = NULL; arg->pixtype = PT_END; arg->hasnodata = 1; arg->nodataval = 0; arg->distance[0] = 0; arg->distance[1] = 0; arg->extenttype = ET_INTERSECTION; arg->pgcextent = NULL; arg->cextent = NULL; arg->callback.ufc_noid = InvalidOid; arg->callback.ufc_nullcount = 0; return arg; } static void rtpg_nmapalgebra_arg_destroy(rtpg_nmapalgebra_arg arg) { int i = 0; if (arg->raster != NULL) { for (i = 0; i < arg->numraster; i++) { if (arg->raster[i] == NULL || !arg->ownsdata[i]) continue; rt_raster_destroy(arg->raster[i]); } pfree(arg->raster); pfree(arg->pgraster); pfree(arg->isempty); pfree(arg->ownsdata); pfree(arg->nband); } if (arg->cextent != NULL) rt_raster_destroy(arg->cextent); pfree(arg); } static int rtpg_nmapalgebra_rastbandarg_process(rtpg_nmapalgebra_arg arg, ArrayType *array, int *allnull, int *allempty, int *noband) { Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; HeapTupleHeader tup; bool isnull; Datum tupv; int i; int j; int nband; if (arg == NULL || array == NULL) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: NULL values not permitted for parameters"); return 0; } etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); deconstruct_array( array, etype, typlen, typbyval, typalign, &e, &nulls, &n ); if (!n) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: Invalid argument for rastbandarg"); return 0; } /* prep arg */ arg->numraster = n; arg->pgraster = palloc(sizeof(rt_pgraster *) * arg->numraster); arg->raster = palloc(sizeof(rt_raster) * arg->numraster); arg->isempty = palloc(sizeof(uint8_t) * arg->numraster); arg->ownsdata = palloc(sizeof(uint8_t) * arg->numraster); arg->nband = palloc(sizeof(int) * arg->numraster); arg->hasband = palloc(sizeof(uint8_t) * arg->numraster); if ( arg->pgraster == NULL || arg->raster == NULL || arg->isempty == NULL || arg->ownsdata == NULL || arg->nband == NULL || arg->hasband == NULL ) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: Could not allocate memory for processing rastbandarg"); return 0; } *allnull = 0; *allempty = 0; *noband = 0; /* process each element */ for (i = 0; i < n; i++) { if (nulls[i]) { arg->numraster--; continue; } POSTGIS_RT_DEBUGF(4, "Processing rastbandarg at index %d", i); arg->raster[i] = NULL; arg->isempty[i] = 0; arg->ownsdata[i] = 1; arg->nband[i] = 0; arg->hasband[i] = 0; /* each element is a tuple */ tup = (HeapTupleHeader) DatumGetPointer(e[i]); if (NULL == tup) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: Invalid argument for rastbandarg at index %d", i); return 0; } /* first element, raster */ POSTGIS_RT_DEBUG(4, "Processing first element (raster)"); tupv = GetAttributeByName(tup, "rast", &isnull); if (isnull) { elog(NOTICE, "First argument (nband) of rastbandarg at index %d is NULL. Assuming NULL raster", i); arg->isempty[i] = 1; arg->ownsdata[i] = 0; (*allnull)++; (*allempty)++; (*noband)++; continue; } arg->pgraster[i] = (rt_pgraster *) PG_DETOAST_DATUM(tupv); /* see if this is a copy of an existing pgraster */ for (j = 0; j < i; j++) { if (!arg->isempty[j] && (arg->pgraster[i] == arg->pgraster[j])) { POSTGIS_RT_DEBUG(4, "raster matching existing same raster found"); arg->raster[i] = arg->raster[j]; arg->ownsdata[i] = 0; break; } } if (arg->ownsdata[i]) { POSTGIS_RT_DEBUG(4, "deserializing raster"); arg->raster[i] = rt_raster_deserialize(arg->pgraster[i], FALSE); if (arg->raster[i] == NULL) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: Could not deserialize raster at index %d", i); return 0; } } /* is raster empty? */ arg->isempty[i] = rt_raster_is_empty(arg->raster[i]); if (arg->isempty[i]) { (*allempty)++; (*noband)++; continue; } /* second element, nband */ POSTGIS_RT_DEBUG(4, "Processing second element (nband)"); tupv = GetAttributeByName(tup, "nband", &isnull); if (isnull) { nband = 1; elog(NOTICE, "First argument (nband) of rastbandarg at index %d is NULL. Assuming nband = %d", i, nband); } else nband = DatumGetInt32(tupv); if (nband < 1) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: Band number provided for rastbandarg at index %d must be greater than zero (1-based)", i); return 0; } arg->nband[i] = nband - 1; arg->hasband[i] = rt_raster_has_band(arg->raster[i], arg->nband[i]); if (!arg->hasband[i]) { (*noband)++; POSTGIS_RT_DEBUGF(4, "Band at index %d not found in raster", nband); } } if (arg->numraster < n) { arg->pgraster = repalloc(arg->pgraster, sizeof(rt_pgraster *) * arg->numraster); arg->raster = repalloc(arg->raster, sizeof(rt_raster) * arg->numraster); arg->isempty = repalloc(arg->isempty, sizeof(uint8_t) * arg->numraster); arg->ownsdata = repalloc(arg->ownsdata, sizeof(uint8_t) * arg->numraster); arg->nband = repalloc(arg->nband, sizeof(int) * arg->numraster); arg->hasband = repalloc(arg->hasband, sizeof(uint8_t) * arg->numraster); if ( arg->pgraster == NULL || arg->raster == NULL || arg->isempty == NULL || arg->ownsdata == NULL || arg->nband == NULL || arg->hasband == NULL ) { elog(ERROR, "rtpg_nmapalgebra_rastbandarg_process: Could not reallocate memory for processed rastbandarg"); return 0; } } POSTGIS_RT_DEBUGF(4, "arg->numraster = %d", arg->numraster); return 1; } /* Callback for RASTER_nMapAlgebra */ static int rtpg_nmapalgebra_callback( rt_iterator_arg arg, void *userarg, double *value, int *nodata ) { rtpg_nmapalgebra_callback_arg *callback = (rtpg_nmapalgebra_callback_arg *) userarg; int16 typlen; bool typbyval; char typalign; ArrayType *mdValues = NULL; Datum *_values = NULL; bool *_nodata = NULL; ArrayType *mdPos = NULL; Datum *_pos = NULL; bool *_null = NULL; int i = 0; int x = 0; int y = 0; int z = 0; int dim[3] = {0}; int lbound[3] = {1, 1, 1}; Datum datum = (Datum) NULL; if (arg == NULL) return 0; *value = 0; *nodata = 0; dim[0] = arg->rasters; dim[1] = arg->rows; dim[2] = arg->columns; _values = palloc(sizeof(Datum) * arg->rasters * arg->rows * arg->columns); _nodata = palloc(sizeof(bool) * arg->rasters * arg->rows * arg->columns); if (_values == NULL || _nodata == NULL) { elog(ERROR, "rtpg_nmapalgebra_callback: Could not allocate memory for values array"); return 0; } /* build mdValues */ i = 0; /* raster */ for (z = 0; z < arg->rasters; z++) { /* Y axis */ for (y = 0; y < arg->rows; y++) { /* X axis */ for (x = 0; x < arg->columns; x++) { POSTGIS_RT_DEBUGF(4, "(z, y ,x) = (%d, %d, %d)", z, y, x); POSTGIS_RT_DEBUGF(4, "(value, nodata) = (%f, %d)", arg->values[z][y][x], arg->nodata[z][y][x]); _nodata[i] = (bool) arg->nodata[z][y][x]; if (!_nodata[i]) _values[i] = Float8GetDatum(arg->values[z][y][x]); else _values[i] = (Datum) NULL; i++; } } } /* info about the type of item in the multi-dimensional array (float8). */ get_typlenbyvalalign(FLOAT8OID, &typlen, &typbyval, &typalign); /* construct mdValues */ mdValues = construct_md_array( _values, _nodata, 3, dim, lbound, FLOAT8OID, typlen, typbyval, typalign ); pfree(_nodata); pfree(_values); _pos = palloc(sizeof(Datum) * (arg->rasters + 1) * 2); _null = palloc(sizeof(bool) * (arg->rasters + 1) * 2); if (_pos == NULL || _null == NULL) { pfree(mdValues); elog(ERROR, "rtpg_nmapalgebra_callback: Could not allocate memory for position array"); return 0; } memset(_null, 0, sizeof(bool) * (arg->rasters + 1) * 2); /* build mdPos */ i = 0; _pos[i] = arg->dst_pixel[0] + 1; i++; _pos[i] = arg->dst_pixel[1] + 1; i++; for (z = 0; z < arg->rasters; z++) { _pos[i] = arg->src_pixel[z][0] + 1; i++; _pos[i] = arg->src_pixel[z][1] + 1; i++; } /* info about the type of item in the multi-dimensional array (int4). */ get_typlenbyvalalign(INT4OID, &typlen, &typbyval, &typalign); /* reuse dim and lbound, just tweak to what we need */ dim[0] = arg->rasters + 1; dim[1] = 2; lbound[0] = 0; /* construct mdPos */ mdPos = construct_md_array( _pos, _null, 2, dim, lbound, INT4OID, typlen, typbyval, typalign ); pfree(_pos); pfree(_null); callback->ufc_info.arg[0] = PointerGetDatum(mdValues); callback->ufc_info.arg[1] = PointerGetDatum(mdPos); /* function is strict and null parameter is passed */ /* http://archives.postgresql.org/pgsql-general/2011-11/msg00424.php */ if (callback->ufl_info.fn_strict && callback->ufc_nullcount) { *nodata = 1; pfree(mdValues); pfree(mdPos); return 1; } /* call user callback function */ datum = FunctionCallInvoke(&(callback->ufc_info)); pfree(mdValues); pfree(mdPos); /* result is not null*/ if (!callback->ufc_info.isnull) *value = DatumGetFloat8(datum); else *nodata = 1; return 1; } /* ST_MapAlgebra for n rasters */ PG_FUNCTION_INFO_V1(RASTER_nMapAlgebra); Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS) { rtpg_nmapalgebra_arg arg = NULL; rt_iterator itrset; int i = 0; int noerr = 0; int allnull = 0; int allempty = 0; int noband = 0; rt_raster raster = NULL; rt_band band = NULL; rt_pgraster *pgraster = NULL; POSTGIS_RT_DEBUG(3, "Starting..."); if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* init argument struct */ arg = rtpg_nmapalgebra_arg_init(); if (arg == NULL) { elog(ERROR, "RASTER_nMapAlgebra: Could not initialize argument structure"); PG_RETURN_NULL(); } /* let helper function process rastbandarg (0) */ if (!rtpg_nmapalgebra_rastbandarg_process(arg, PG_GETARG_ARRAYTYPE_P(0), &allnull, &allempty, &noband)) { rtpg_nmapalgebra_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: Could not process rastbandarg"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "allnull, allempty, noband = %d, %d, %d", allnull, allempty, noband); /* all rasters are NULL, return NULL */ if (allnull == arg->numraster) { elog(NOTICE, "All input rasters are NULL. Returning NULL"); rtpg_nmapalgebra_arg_destroy(arg); PG_RETURN_NULL(); } /* pixel type (2) */ if (!PG_ARGISNULL(2)) { char *pixtypename = text_to_cstring(PG_GETARG_TEXT_P(2)); /* Get the pixel type index */ arg->pixtype = rt_pixtype_index_from_name(pixtypename); if (arg->pixtype == PT_END) { rtpg_nmapalgebra_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: Invalid pixel type: %s", pixtypename); PG_RETURN_NULL(); } } /* distancex (3) */ if (!PG_ARGISNULL(3)) arg->distance[0] = PG_GETARG_INT32(3); /* distancey (4) */ if (!PG_ARGISNULL(4)) arg->distance[1] = PG_GETARG_INT32(4); if (arg->distance[0] < 0 || arg->distance[1] < 0) { rtpg_nmapalgebra_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: Distance for X and Y axis must be greater than or equal to zero"); PG_RETURN_NULL(); } /* extent type (5) */ if (!PG_ARGISNULL(5)) { char *extenttypename = rtpg_strtoupper(rtpg_trim(text_to_cstring(PG_GETARG_TEXT_P(5)))); arg->extenttype = rt_util_extent_type(extenttypename); } POSTGIS_RT_DEBUGF(4, "extenttype: %d", arg->extenttype); /* custom extent (6) */ if (arg->extenttype == ET_CUSTOM) { if (PG_ARGISNULL(6)) { elog(NOTICE, "Custom extent is NULL. Returning NULL"); rtpg_nmapalgebra_arg_destroy(arg); PG_RETURN_NULL(); } arg->pgcextent = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(6)); /* only need the raster header */ arg->cextent = rt_raster_deserialize(arg->pgcextent, TRUE); if (arg->cextent == NULL) { rtpg_nmapalgebra_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: Could not deserialize custom extent"); PG_RETURN_NULL(); } else if (rt_raster_is_empty(arg->cextent)) { elog(NOTICE, "Custom extent is an empty raster. Returning empty raster"); rtpg_nmapalgebra_arg_destroy(arg); raster = rt_raster_new(0, 0); if (raster == NULL) { elog(ERROR, "RASTER_nMapAlgebra: Could not create empty raster"); PG_RETURN_NULL(); } pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } } noerr = 1; /* all rasters are empty, return empty raster */ if (allempty == arg->numraster) { elog(NOTICE, "All input rasters are empty. Returning empty raster"); noerr = 0; } /* all rasters don't have indicated band, return empty raster */ else if (noband == arg->numraster) { elog(NOTICE, "All input rasters do not have bands at indicated indexes. Returning empty raster"); noerr = 0; } if (!noerr) { rtpg_nmapalgebra_arg_destroy(arg); raster = rt_raster_new(0, 0); if (raster == NULL) { elog(ERROR, "RASTER_nMapAlgebra: Could not create empty raster"); PG_RETURN_NULL(); } pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } /* do regprocedure last (1) */ if (!PG_ARGISNULL(1) || get_fn_expr_argtype(fcinfo->flinfo, 1) == REGPROCEDUREOID) { POSTGIS_RT_DEBUG(4, "processing callbackfunc"); arg->callback.ufc_noid = PG_GETARG_OID(1); /* get function info */ fmgr_info(arg->callback.ufc_noid, &(arg->callback.ufl_info)); /* function cannot return set */ noerr = 0; if (arg->callback.ufl_info.fn_retset) { noerr = 1; } /* function should have correct # of args */ else if (arg->callback.ufl_info.fn_nargs != 3) { noerr = 2; } /* TODO: consider adding checks of the userfunction parameters should be able to use get_fn_expr_argtype() of fmgr.c */ if (noerr > 0) { rtpg_nmapalgebra_arg_destroy(arg); if (noerr > 1) elog(ERROR, "RASTER_nMapAlgebra: Function provided must have three input parameters"); else elog(ERROR, "RASTER_nMapAlgebra: Function provided must return double precision, not resultset"); PG_RETURN_NULL(); } if (func_volatile(arg->callback.ufc_noid) == 'v') elog(NOTICE, "Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE"); /* prep function call data */ #if POSTGIS_PGSQL_VERSION > 90 InitFunctionCallInfoData(arg->callback.ufc_info, &(arg->callback.ufl_info), arg->callback.ufl_info.fn_nargs, InvalidOid, NULL, NULL); #else InitFunctionCallInfoData(arg->callback.ufc_info, &(arg->callback.ufl_info), arg->callback.ufl_info.fn_nargs, NULL, NULL); #endif memset(arg->callback.ufc_info.argnull, FALSE, sizeof(bool) * arg->callback.ufl_info.fn_nargs); /* userargs (7) */ if (!PG_ARGISNULL(7)) arg->callback.ufc_info.arg[2] = PG_GETARG_DATUM(7); else { arg->callback.ufc_info.arg[2] = (Datum) NULL; arg->callback.ufc_info.argnull[2] = TRUE; arg->callback.ufc_nullcount++; } } else { rtpg_nmapalgebra_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: callbackfunc must be provided"); PG_RETURN_NULL(); } /* determine nodataval and possibly pixtype */ /* band to check */ switch (arg->extenttype) { case ET_LAST: i = arg->numraster - 1; break; case ET_SECOND: if (arg->numraster > 1) { i = 1; break; } default: i = 0; break; } /* find first viable band */ if (!arg->hasband[i]) { for (i = 0; i < arg->numraster; i++) { if (arg->hasband[i]) break; } if (i >= arg->numraster) i = arg->numraster - 1; } band = rt_raster_get_band(arg->raster[i], arg->nband[i]); /* set pixel type if PT_END */ if (arg->pixtype == PT_END) arg->pixtype = rt_band_get_pixtype(band); /* set hasnodata and nodataval */ arg->hasnodata = 1; if (rt_band_get_hasnodata_flag(band)) rt_band_get_nodata(band, &(arg->nodataval)); else arg->nodataval = rt_band_get_min_value(band); POSTGIS_RT_DEBUGF(4, "pixtype, hasnodata, nodataval: %s, %d, %f", rt_pixtype_name(arg->pixtype), arg->hasnodata, arg->nodataval); /* init itrset */ itrset = palloc(sizeof(struct rt_iterator_t) * arg->numraster); if (itrset == NULL) { rtpg_nmapalgebra_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: Could not allocate memory for iterator arguments"); PG_RETURN_NULL(); } /* set itrset */ for (i = 0; i < arg->numraster; i++) { itrset[i].raster = arg->raster[i]; itrset[i].nband = arg->nband[i]; itrset[i].nbnodata = 1; } /* pass everything to iterator */ noerr = rt_raster_iterator( itrset, arg->numraster, arg->extenttype, arg->cextent, arg->pixtype, arg->hasnodata, arg->nodataval, arg->distance[0], arg->distance[1], &(arg->callback), rtpg_nmapalgebra_callback, &raster ); /* cleanup */ pfree(itrset); rtpg_nmapalgebra_arg_destroy(arg); if (noerr != ES_NONE) { elog(ERROR, "RASTER_nMapAlgebra: Could not run raster iterator function"); PG_RETURN_NULL(); } else if (raster == NULL) PG_RETURN_NULL(); pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); POSTGIS_RT_DEBUG(3, "Finished"); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } /* ---------------------------------------------------------------- */ /* expression ST_MapAlgebra for n rasters */ /* ---------------------------------------------------------------- */ typedef struct { int exprcount; struct { SPIPlanPtr spi_plan; uint32_t spi_argcount; uint8_t *spi_argpos; int hasval; double val; } expr[3]; struct { int hasval; double val; } nodatanodata; struct { int count; char **val; } kw; } rtpg_nmapalgebraexpr_callback_arg; typedef struct rtpg_nmapalgebraexpr_arg_t *rtpg_nmapalgebraexpr_arg; struct rtpg_nmapalgebraexpr_arg_t { rtpg_nmapalgebra_arg bandarg; rtpg_nmapalgebraexpr_callback_arg callback; }; static rtpg_nmapalgebraexpr_arg rtpg_nmapalgebraexpr_arg_init(int cnt, char **kw) { rtpg_nmapalgebraexpr_arg arg = NULL; int i = 0; arg = palloc(sizeof(struct rtpg_nmapalgebraexpr_arg_t)); if (arg == NULL) { elog(ERROR, "rtpg_nmapalgebraexpr_arg_init: Could not allocate memory for arguments"); return NULL; } arg->bandarg = rtpg_nmapalgebra_arg_init(); if (arg->bandarg == NULL) { elog(ERROR, "rtpg_nmapalgebraexpr_arg_init: Could not allocate memory for arg->bandarg"); return NULL; } arg->callback.kw.count = cnt; arg->callback.kw.val = kw; arg->callback.exprcount = 3; for (i = 0; i < arg->callback.exprcount; i++) { arg->callback.expr[i].spi_plan = NULL; arg->callback.expr[i].spi_argcount = 0; arg->callback.expr[i].spi_argpos = palloc(cnt * sizeof(uint8_t)); if (arg->callback.expr[i].spi_argpos == NULL) { elog(ERROR, "rtpg_nmapalgebraexpr_arg_init: Could not allocate memory for spi_argpos"); return NULL; } memset(arg->callback.expr[i].spi_argpos, 0, sizeof(uint8_t) * cnt); arg->callback.expr[i].hasval = 0; arg->callback.expr[i].val = 0; } arg->callback.nodatanodata.hasval = 0; arg->callback.nodatanodata.val = 0; return arg; } static void rtpg_nmapalgebraexpr_arg_destroy(rtpg_nmapalgebraexpr_arg arg) { int i = 0; rtpg_nmapalgebra_arg_destroy(arg->bandarg); for (i = 0; i < arg->callback.exprcount; i++) { if (arg->callback.expr[i].spi_plan) SPI_freeplan(arg->callback.expr[i].spi_plan); if (arg->callback.kw.count) pfree(arg->callback.expr[i].spi_argpos); } pfree(arg); } static int rtpg_nmapalgebraexpr_callback( rt_iterator_arg arg, void *userarg, double *value, int *nodata ) { rtpg_nmapalgebraexpr_callback_arg *callback = (rtpg_nmapalgebraexpr_callback_arg *) userarg; SPIPlanPtr plan = NULL; int i = 0; int id = -1; if (arg == NULL) return 0; *value = 0; *nodata = 0; /* 2 raster */ if (arg->rasters > 1) { /* nodata1 = 1 AND nodata2 = 1, nodatanodataval */ if (arg->nodata[0][0][0] && arg->nodata[1][0][0]) { if (callback->nodatanodata.hasval) *value = callback->nodatanodata.val; else *nodata = 1; } /* nodata1 = 1 AND nodata2 != 1, nodata1expr */ else if (arg->nodata[0][0][0] && !arg->nodata[1][0][0]) { id = 1; if (callback->expr[id].hasval) *value = callback->expr[id].val; else if (callback->expr[id].spi_plan) plan = callback->expr[id].spi_plan; else *nodata = 1; } /* nodata1 != 1 AND nodata2 = 1, nodata2expr */ else if (!arg->nodata[0][0][0] && arg->nodata[1][0][0]) { id = 2; if (callback->expr[id].hasval) *value = callback->expr[id].val; else if (callback->expr[id].spi_plan) plan = callback->expr[id].spi_plan; else *nodata = 1; } /* expression */ else { id = 0; if (callback->expr[id].hasval) *value = callback->expr[id].val; else if (callback->expr[id].spi_plan) plan = callback->expr[id].spi_plan; else { if (callback->nodatanodata.hasval) *value = callback->nodatanodata.val; else *nodata = 1; } } } /* 1 raster */ else { /* nodata = 1, nodata1expr */ if (arg->nodata[0][0][0]) { id = 1; if (callback->expr[id].hasval) *value = callback->expr[id].val; else if (callback->expr[id].spi_plan) plan = callback->expr[id].spi_plan; else *nodata = 1; } /* expression */ else { id = 0; if (callback->expr[id].hasval) *value = callback->expr[id].val; else if (callback->expr[id].spi_plan) plan = callback->expr[id].spi_plan; else { /* see if nodata1expr is available */ id = 1; if (callback->expr[id].hasval) *value = callback->expr[id].val; else if (callback->expr[id].spi_plan) plan = callback->expr[id].spi_plan; else *nodata = 1; } } } /* run prepared plan */ if (plan != NULL) { Datum values[12]; bool nulls[12]; int err = 0; TupleDesc tupdesc; SPITupleTable *tuptable = NULL; HeapTuple tuple; Datum datum; bool isnull = FALSE; POSTGIS_RT_DEBUGF(4, "Running plan %d", id); /* init values and nulls */ memset(values, (Datum) NULL, sizeof(Datum) * callback->kw.count); memset(nulls, FALSE, sizeof(bool) * callback->kw.count); if (callback->expr[id].spi_argcount) { int idx = 0; for (i = 0; i < callback->kw.count; i++) { idx = callback->expr[id].spi_argpos[i]; if (idx < 1) continue; idx--; /* 1-based now 0-based */ switch (i) { /* [rast.x] */ case 0: values[idx] = Int32GetDatum(arg->src_pixel[0][0] + 1); break; /* [rast.y] */ case 1: values[idx] = Int32GetDatum(arg->src_pixel[0][1] + 1); break; /* [rast.val] */ case 2: /* [rast] */ case 3: if (!arg->nodata[0][0][0]) values[idx] = Float8GetDatum(arg->values[0][0][0]); else nulls[idx] = TRUE; break; /* [rast1.x] */ case 4: values[idx] = Int32GetDatum(arg->src_pixel[0][0] + 1); break; /* [rast1.y] */ case 5: values[idx] = Int32GetDatum(arg->src_pixel[0][1] + 1); break; /* [rast1.val] */ case 6: /* [rast1] */ case 7: if (!arg->nodata[0][0][0]) values[idx] = Float8GetDatum(arg->values[0][0][0]); else nulls[idx] = TRUE; break; /* [rast2.x] */ case 8: values[idx] = Int32GetDatum(arg->src_pixel[1][0] + 1); break; /* [rast2.y] */ case 9: values[idx] = Int32GetDatum(arg->src_pixel[1][1] + 1); break; /* [rast2.val] */ case 10: /* [rast2] */ case 11: if (!arg->nodata[1][0][0]) values[idx] = Float8GetDatum(arg->values[1][0][0]); else nulls[idx] = TRUE; break; } } } /* run prepared plan */ err = SPI_execute_plan(plan, values, nulls, TRUE, 1); if (err != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { elog(ERROR, "rtpg_nmapalgebraexpr_callback: Unexpected error when running prepared statement %d", id); return 0; } /* get output of prepared plan */ tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isnull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { if (SPI_tuptable) SPI_freetuptable(tuptable); elog(ERROR, "rtpg_nmapalgebraexpr_callback: Could not get result of prepared statement %d", id); return 0; } if (!isnull) { *value = DatumGetFloat8(datum); POSTGIS_RT_DEBUG(4, "Getting value from Datum"); } else { /* 2 raster, check nodatanodataval */ if (arg->rasters > 1) { if (callback->nodatanodata.hasval) *value = callback->nodatanodata.val; else *nodata = 1; } /* 1 raster, check nodataval */ else { if (callback->expr[1].hasval) *value = callback->expr[1].val; else *nodata = 1; } } if (SPI_tuptable) SPI_freetuptable(tuptable); } POSTGIS_RT_DEBUGF(4, "(value, nodata) = (%f, %d)", *value, *nodata); return 1; } PG_FUNCTION_INFO_V1(RASTER_nMapAlgebraExpr); Datum RASTER_nMapAlgebraExpr(PG_FUNCTION_ARGS) { MemoryContext mainMemCtx = CurrentMemoryContext; rtpg_nmapalgebraexpr_arg arg = NULL; rt_iterator itrset; uint16_t exprpos[3] = {1, 4, 5}; int i = 0; int j = 0; int k = 0; int numraster = 0; int err = 0; int allnull = 0; int allempty = 0; int noband = 0; int len = 0; TupleDesc tupdesc; SPITupleTable *tuptable = NULL; HeapTuple tuple; Datum datum; bool isnull = FALSE; rt_raster raster = NULL; rt_band band = NULL; rt_pgraster *pgraster = NULL; const int argkwcount = 12; char *argkw[] = { "[rast.x]", "[rast.y]", "[rast.val]", "[rast]", "[rast1.x]", "[rast1.y]", "[rast1.val]", "[rast1]", "[rast2.x]", "[rast2.y]", "[rast2.val]", "[rast2]" }; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* init argument struct */ arg = rtpg_nmapalgebraexpr_arg_init(argkwcount, argkw); if (arg == NULL) { elog(ERROR, "RASTER_nMapAlgebraExpr: Could not initialize argument structure"); PG_RETURN_NULL(); } /* let helper function process rastbandarg (0) */ if (!rtpg_nmapalgebra_rastbandarg_process(arg->bandarg, PG_GETARG_ARRAYTYPE_P(0), &allnull, &allempty, &noband)) { rtpg_nmapalgebraexpr_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebra: Could not process rastbandarg"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "allnull, allempty, noband = %d, %d, %d", allnull, allempty, noband); /* all rasters are NULL, return NULL */ if (allnull == arg->bandarg->numraster) { elog(NOTICE, "All input rasters are NULL. Returning NULL"); rtpg_nmapalgebraexpr_arg_destroy(arg); PG_RETURN_NULL(); } /* only work on one or two rasters */ if (arg->bandarg->numraster > 1) numraster = 2; else numraster = 1; /* pixel type (2) */ if (!PG_ARGISNULL(2)) { char *pixtypename = text_to_cstring(PG_GETARG_TEXT_P(2)); /* Get the pixel type index */ arg->bandarg->pixtype = rt_pixtype_index_from_name(pixtypename); if (arg->bandarg->pixtype == PT_END) { rtpg_nmapalgebraexpr_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebraExpr: Invalid pixel type: %s", pixtypename); PG_RETURN_NULL(); } } POSTGIS_RT_DEBUGF(4, "pixeltype: %d", arg->bandarg->pixtype); /* extent type (3) */ if (!PG_ARGISNULL(3)) { char *extenttypename = rtpg_strtoupper(rtpg_trim(text_to_cstring(PG_GETARG_TEXT_P(3)))); arg->bandarg->extenttype = rt_util_extent_type(extenttypename); } if (arg->bandarg->extenttype == ET_CUSTOM) { if (numraster < 2) { elog(NOTICE, "CUSTOM extent type not supported. Defaulting to FIRST"); arg->bandarg->extenttype = ET_FIRST; } else { elog(NOTICE, "CUSTOM extent type not supported. Defaulting to INTERSECTION"); arg->bandarg->extenttype = ET_INTERSECTION; } } else if (numraster < 2) arg->bandarg->extenttype = ET_FIRST; POSTGIS_RT_DEBUGF(4, "extenttype: %d", arg->bandarg->extenttype); /* nodatanodataval (6) */ if (!PG_ARGISNULL(6)) { arg->callback.nodatanodata.hasval = 1; arg->callback.nodatanodata.val = PG_GETARG_FLOAT8(6); } err = 0; /* all rasters are empty, return empty raster */ if (allempty == arg->bandarg->numraster) { elog(NOTICE, "All input rasters are empty. Returning empty raster"); err = 1; } /* all rasters don't have indicated band, return empty raster */ else if (noband == arg->bandarg->numraster) { elog(NOTICE, "All input rasters do not have bands at indicated indexes. Returning empty raster"); err = 1; } if (err) { rtpg_nmapalgebraexpr_arg_destroy(arg); raster = rt_raster_new(0, 0); if (raster == NULL) { elog(ERROR, "RASTER_nMapAlgebraExpr: Could not create empty raster"); PG_RETURN_NULL(); } pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } /* connect SPI */ if (SPI_connect() != SPI_OK_CONNECT) { rtpg_nmapalgebraexpr_arg_destroy(arg); elog(ERROR, "RASTER_nMapAlgebraExpr: Could not connect to the SPI manager"); PG_RETURN_NULL(); } /* process expressions exprpos elements are: 1 - expression => spi_plan[0] 4 - nodata1expr => spi_plan[1] 5 - nodata2expr => spi_plan[2] */ for (i = 0; i < arg->callback.exprcount; i++) { char *expr = NULL; char *tmp = NULL; char *sql = NULL; char place[5] = "$1"; if (PG_ARGISNULL(exprpos[i])) continue; expr = text_to_cstring(PG_GETARG_TEXT_P(exprpos[i])); POSTGIS_RT_DEBUGF(3, "raw expr of argument #%d: %s", exprpos[i], expr); for (j = 0, k = 1; j < argkwcount; j++) { /* attempt to replace keyword with placeholder */ len = 0; tmp = rtpg_strreplace(expr, argkw[j], place, &len); pfree(expr); expr = tmp; if (len) { POSTGIS_RT_DEBUGF(4, "kw #%d (%s) at pos $%d", j, argkw[j], k); arg->callback.expr[i].spi_argcount++; arg->callback.expr[i].spi_argpos[j] = k++; sprintf(place, "$%d", k); } else arg->callback.expr[i].spi_argpos[j] = 0; } len = strlen("SELECT (") + strlen(expr) + strlen(")::double precision"); sql = (char *) palloc(len + 1); if (sql == NULL) { rtpg_nmapalgebraexpr_arg_destroy(arg); SPI_finish(); elog(ERROR, "RASTER_nMapAlgebraExpr: Could not allocate memory for expression parameter %d", exprpos[i]); PG_RETURN_NULL(); } strncpy(sql, "SELECT (", strlen("SELECT (")); strncpy(sql + strlen("SELECT ("), expr, strlen(expr)); strncpy(sql + strlen("SELECT (") + strlen(expr), ")::double precision", strlen(")::double precision")); sql[len] = '\0'; POSTGIS_RT_DEBUGF(3, "sql #%d: %s", exprpos[i], sql); /* prepared plan */ if (arg->callback.expr[i].spi_argcount) { Oid *argtype = (Oid *) palloc(arg->callback.expr[i].spi_argcount * sizeof(Oid)); POSTGIS_RT_DEBUGF(3, "expression parameter %d is a prepared plan", exprpos[i]); if (argtype == NULL) { pfree(sql); rtpg_nmapalgebraexpr_arg_destroy(arg); SPI_finish(); elog(ERROR, "RASTER_nMapAlgebraExpr: Could not allocate memory for prepared plan argtypes of expression parameter %d", exprpos[i]); PG_RETURN_NULL(); } /* specify datatypes of parameters */ for (j = 0, k = 0; j < argkwcount; j++) { if (arg->callback.expr[i].spi_argpos[j] < 1) continue; /* positions are INT4 */ if ( (strstr(argkw[j], "[rast.x]") != NULL) || (strstr(argkw[j], "[rast.y]") != NULL) || (strstr(argkw[j], "[rast1.x]") != NULL) || (strstr(argkw[j], "[rast1.y]") != NULL) || (strstr(argkw[j], "[rast2.x]") != NULL) || (strstr(argkw[j], "[rast2.y]") != NULL) ) argtype[k] = INT4OID; /* everything else is FLOAT8 */ else argtype[k] = FLOAT8OID; k++; } arg->callback.expr[i].spi_plan = SPI_prepare(sql, arg->callback.expr[i].spi_argcount, argtype); pfree(argtype); pfree(sql); if (arg->callback.expr[i].spi_plan == NULL) { rtpg_nmapalgebraexpr_arg_destroy(arg); SPI_finish(); elog(ERROR, "RASTER_nMapAlgebraExpr: Could not create prepared plan of expression parameter %d", exprpos[i]); PG_RETURN_NULL(); } } /* no args, just execute query */ else { POSTGIS_RT_DEBUGF(3, "expression parameter %d has no args, simply executing", exprpos[i]); err = SPI_execute(sql, TRUE, 0); pfree(sql); if (err != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { rtpg_nmapalgebraexpr_arg_destroy(arg); SPI_finish(); elog(ERROR, "RASTER_nMapAlgebraExpr: Could not evaluate expression parameter %d", exprpos[i]); PG_RETURN_NULL(); } /* get output of prepared plan */ tupdesc = SPI_tuptable->tupdesc; tuptable = SPI_tuptable; tuple = tuptable->vals[0]; datum = SPI_getbinval(tuple, tupdesc, 1, &isnull); if (SPI_result == SPI_ERROR_NOATTRIBUTE) { if (SPI_tuptable) SPI_freetuptable(tuptable); rtpg_nmapalgebraexpr_arg_destroy(arg); SPI_finish(); elog(ERROR, "RASTER_nMapAlgebraExpr: Could not get result of expression parameter %d", exprpos[i]); PG_RETURN_NULL(); } if (!isnull) { arg->callback.expr[i].hasval = 1; arg->callback.expr[i].val = DatumGetFloat8(datum); } if (SPI_tuptable) SPI_freetuptable(tuptable); } } /* determine nodataval and possibly pixtype */ /* band to check */ switch (arg->bandarg->extenttype) { case ET_LAST: case ET_SECOND: if (numraster > 1) i = 1; else i = 0; break; default: i = 0; break; } /* find first viable band */ if (!arg->bandarg->hasband[i]) { for (i = 0; i < numraster; i++) { if (arg->bandarg->hasband[i]) break; } if (i >= numraster) i = numraster - 1; } band = rt_raster_get_band(arg->bandarg->raster[i], arg->bandarg->nband[i]); /* set pixel type if PT_END */ if (arg->bandarg->pixtype == PT_END) arg->bandarg->pixtype = rt_band_get_pixtype(band); /* set hasnodata and nodataval */ arg->bandarg->hasnodata = 1; if (rt_band_get_hasnodata_flag(band)) rt_band_get_nodata(band, &(arg->bandarg->nodataval)); else arg->bandarg->nodataval = rt_band_get_min_value(band); POSTGIS_RT_DEBUGF(4, "pixtype, hasnodata, nodataval: %s, %d, %f", rt_pixtype_name(arg->bandarg->pixtype), arg->bandarg->hasnodata, arg->bandarg->nodataval); /* init itrset */ itrset = palloc(sizeof(struct rt_iterator_t) * numraster); if (itrset == NULL) { rtpg_nmapalgebraexpr_arg_destroy(arg); SPI_finish(); elog(ERROR, "RASTER_nMapAlgebra: Could not allocate memory for iterator arguments"); PG_RETURN_NULL(); } /* set itrset */ for (i = 0; i < numraster; i++) { itrset[i].raster = arg->bandarg->raster[i]; itrset[i].nband = arg->bandarg->nband[i]; itrset[i].nbnodata = 1; } /* pass everything to iterator */ err = rt_raster_iterator( itrset, numraster, arg->bandarg->extenttype, arg->bandarg->cextent, arg->bandarg->pixtype, arg->bandarg->hasnodata, arg->bandarg->nodataval, 0, 0, &(arg->callback), rtpg_nmapalgebraexpr_callback, &raster ); pfree(itrset); rtpg_nmapalgebraexpr_arg_destroy(arg); if (err != ES_NONE) { SPI_finish(); elog(ERROR, "RASTER_nMapAlgebraExpr: Could not run raster iterator function"); PG_RETURN_NULL(); } else if (raster == NULL) { SPI_finish(); PG_RETURN_NULL(); } /* switch to prior memory context to ensure memory allocated in correct context */ MemoryContextSwitchTo(mainMemCtx); pgraster = rt_raster_serialize(raster); rt_raster_destroy(raster); /* finish SPI */ SPI_finish(); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } /* ---------------------------------------------------------------- */ /* ST_Union aggregate functions */ /* ---------------------------------------------------------------- */ typedef enum { UT_LAST = 0, UT_FIRST, UT_MIN, UT_MAX, UT_COUNT, UT_SUM, UT_MEAN, UT_RANGE } rtpg_union_type; /* internal function translating text of UNION type to enum */ static rtpg_union_type rtpg_uniontype_index_from_name(const char *cutype) { assert(cutype && strlen(cutype) > 0); if (strcmp(cutype, "LAST") == 0) return UT_LAST; else if (strcmp(cutype, "FIRST") == 0) return UT_FIRST; else if (strcmp(cutype, "MIN") == 0) return UT_MIN; else if (strcmp(cutype, "MAX") == 0) return UT_MAX; else if (strcmp(cutype, "COUNT") == 0) return UT_COUNT; else if (strcmp(cutype, "SUM") == 0) return UT_SUM; else if (strcmp(cutype, "MEAN") == 0) return UT_MEAN; else if (strcmp(cutype, "RANGE") == 0) return UT_RANGE; return UT_LAST; } typedef struct rtpg_union_band_arg_t *rtpg_union_band_arg; struct rtpg_union_band_arg_t { int nband; /* source raster's band index, 0-based */ rtpg_union_type uniontype; int numraster; rt_raster *raster; }; typedef struct rtpg_union_arg_t *rtpg_union_arg; struct rtpg_union_arg_t { int numband; /* number of bandargs */ rtpg_union_band_arg bandarg; }; static void rtpg_union_arg_destroy(rtpg_union_arg arg) { int i = 0; int j = 0; int k = 0; if (arg->bandarg != NULL) { for (i = 0; i < arg->numband; i++) { if (!arg->bandarg[i].numraster) continue; for (j = 0; j < arg->bandarg[i].numraster; j++) { if (arg->bandarg[i].raster[j] == NULL) continue; for (k = rt_raster_get_num_bands(arg->bandarg[i].raster[j]) - 1; k >= 0; k--) rt_band_destroy(rt_raster_get_band(arg->bandarg[i].raster[j], k)); rt_raster_destroy(arg->bandarg[i].raster[j]); } pfree(arg->bandarg[i].raster); } pfree(arg->bandarg); } pfree(arg); } static int rtpg_union_callback( rt_iterator_arg arg, void *userarg, double *value, int *nodata ) { rtpg_union_type *utype = (rtpg_union_type *) userarg; if (arg == NULL) return 0; if ( arg->rasters != 2 || arg->rows != 1 || arg->columns != 1 ) { elog(ERROR, "rtpg_union_callback: Invalid arguments passed to callback"); return 0; } *value = 0; *nodata = 0; /* handle NODATA situations except for COUNT, which is a special case */ if (*utype != UT_COUNT) { /* both NODATA */ if (arg->nodata[0][0][0] && arg->nodata[1][0][0]) { *nodata = 1; POSTGIS_RT_DEBUGF(4, "value, nodata = %f, %d", *value, *nodata); return 1; } /* second NODATA */ else if (!arg->nodata[0][0][0] && arg->nodata[1][0][0]) { *value = arg->values[0][0][0]; POSTGIS_RT_DEBUGF(4, "value, nodata = %f, %d", *value, *nodata); return 1; } /* first NODATA */ else if (arg->nodata[0][0][0] && !arg->nodata[1][0][0]) { *value = arg->values[1][0][0]; POSTGIS_RT_DEBUGF(4, "value, nodata = %f, %d", *value, *nodata); return 1; } } switch (*utype) { case UT_FIRST: *value = arg->values[0][0][0]; break; case UT_MIN: if (arg->values[0][0][0] < arg->values[1][0][0]) *value = arg->values[0][0][0]; else *value = arg->values[1][0][0]; break; case UT_MAX: if (arg->values[0][0][0] > arg->values[1][0][0]) *value = arg->values[0][0][0]; else *value = arg->values[1][0][0]; break; case UT_COUNT: /* both NODATA */ if (arg->nodata[0][0][0] && arg->nodata[1][0][0]) *value = 0; /* second NODATA */ else if (!arg->nodata[0][0][0] && arg->nodata[1][0][0]) *value = arg->values[0][0][0]; /* first NODATA */ else if (arg->nodata[0][0][0] && !arg->nodata[1][0][0]) *value = 1; /* has value, increment */ else *value = arg->values[0][0][0] + 1; break; case UT_SUM: *value = arg->values[0][0][0] + arg->values[1][0][0]; break; case UT_MEAN: case UT_RANGE: break; case UT_LAST: default: *value = arg->values[1][0][0]; break; } POSTGIS_RT_DEBUGF(4, "value, nodata = %f, %d", *value, *nodata); return 1; } static int rtpg_union_mean_callback( rt_iterator_arg arg, void *userarg, double *value, int *nodata ) { if (arg == NULL) return 0; if ( arg->rasters != 2 || arg->rows != 1 || arg->columns != 1 ) { elog(ERROR, "rtpg_union_mean_callback: Invalid arguments passed to callback"); return 0; } *value = 0; *nodata = 1; POSTGIS_RT_DEBUGF(4, "rast0: %f %d", arg->values[0][0][0], arg->nodata[0][0][0]); POSTGIS_RT_DEBUGF(4, "rast1: %f %d", arg->values[1][0][0], arg->nodata[1][0][0]); if ( !arg->nodata[0][0][0] && FLT_NEQ(arg->values[0][0][0], 0) && !arg->nodata[1][0][0] ) { *value = arg->values[1][0][0] / arg->values[0][0][0]; *nodata = 0; } POSTGIS_RT_DEBUGF(4, "value, nodata = (%f, %d)", *value, *nodata); return 1; } static int rtpg_union_range_callback( rt_iterator_arg arg, void *userarg, double *value, int *nodata ) { if (arg == NULL) return 0; if ( arg->rasters != 2 || arg->rows != 1 || arg->columns != 1 ) { elog(ERROR, "rtpg_union_range_callback: Invalid arguments passed to callback"); return 0; } *value = 0; *nodata = 1; POSTGIS_RT_DEBUGF(4, "rast0: %f %d", arg->values[0][0][0], arg->nodata[0][0][0]); POSTGIS_RT_DEBUGF(4, "rast1: %f %d", arg->values[1][0][0], arg->nodata[1][0][0]); if ( !arg->nodata[0][0][0] && !arg->nodata[1][0][0] ) { *value = arg->values[1][0][0] - arg->values[0][0][0]; *nodata = 0; } POSTGIS_RT_DEBUGF(4, "value, nodata = (%f, %d)", *value, *nodata); return 1; } /* called for ST_Union(raster, unionarg[]) */ static int rtpg_union_unionarg_process(rtpg_union_arg arg, ArrayType *array) { Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int n = 0; HeapTupleHeader tup; bool isnull; Datum tupv; int i; int nband = 1; char *utypename = NULL; rtpg_union_type utype = UT_LAST; etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); deconstruct_array( array, etype, typlen, typbyval, typalign, &e, &nulls, &n ); if (!n) { elog(ERROR, "rtpg_union_unionarg_process: Invalid argument for unionarg"); return 0; } /* prep arg */ arg->numband = n; arg->bandarg = palloc(sizeof(struct rtpg_union_band_arg_t) * arg->numband); if (arg->bandarg == NULL) { elog(ERROR, "rtpg_union_unionarg_process: Could not allocate memory for band information"); return 0; } /* process each element */ for (i = 0; i < n; i++) { if (nulls[i]) { arg->numband--; continue; } POSTGIS_RT_DEBUGF(4, "Processing unionarg at index %d", i); /* each element is a tuple */ tup = (HeapTupleHeader) DatumGetPointer(e[i]); if (NULL == tup) { elog(ERROR, "rtpg_union_unionarg_process: Invalid argument for unionarg"); return 0; } /* first element, bandnum */ tupv = GetAttributeByName(tup, "nband", &isnull); if (isnull) { nband = i + 1; elog(NOTICE, "First argument (nband) of unionarg is NULL. Assuming nband = %d", nband); } else nband = DatumGetInt32(tupv); if (nband < 1) { elog(ERROR, "rtpg_union_unionarg_process: Band number must be greater than zero (1-based)"); return 0; } /* second element, uniontype */ tupv = GetAttributeByName(tup, "uniontype", &isnull); if (isnull) { elog(NOTICE, "Second argument (uniontype) of unionarg is NULL. Assuming uniontype = LAST"); utype = UT_LAST; } else { utypename = text_to_cstring((text *) DatumGetPointer(tupv)); utype = rtpg_uniontype_index_from_name(rtpg_strtoupper(utypename)); } arg->bandarg[i].uniontype = utype; arg->bandarg[i].nband = nband - 1; arg->bandarg[i].raster = NULL; if ( utype != UT_MEAN && utype != UT_RANGE ) { arg->bandarg[i].numraster = 1; } else arg->bandarg[i].numraster = 2; } if (arg->numband < n) { arg->bandarg = repalloc(arg->bandarg, sizeof(struct rtpg_union_band_arg_t) * arg->numband); if (arg->bandarg == NULL) { elog(ERROR, "rtpg_union_unionarg_process: Could not reallocate memory for band information"); return 0; } } return 1; } /* called for ST_Union(raster) */ static int rtpg_union_noarg(rtpg_union_arg arg, rt_raster raster) { int numbands; int i; if (rt_raster_is_empty(raster)) return 1; numbands = rt_raster_get_num_bands(raster); if (numbands <= arg->numband) return 1; /* more bands to process */ POSTGIS_RT_DEBUG(4, "input raster has more bands, adding more bandargs"); if (arg->numband) arg->bandarg = repalloc(arg->bandarg, sizeof(struct rtpg_union_band_arg_t) * numbands); else arg->bandarg = palloc(sizeof(struct rtpg_union_band_arg_t) * numbands); if (arg->bandarg == NULL) { elog(ERROR, "rtpg_union_noarg: Could not reallocate memory for band information"); return 0; } i = arg->numband; arg->numband = numbands; for (; i < arg->numband; i++) { POSTGIS_RT_DEBUGF(4, "Adding bandarg for band at index %d", i); arg->bandarg[i].uniontype = UT_LAST; arg->bandarg[i].nband = i; arg->bandarg[i].numraster = 1; arg->bandarg[i].raster = (rt_raster *) palloc(sizeof(rt_raster) * arg->bandarg[i].numraster); if (arg->bandarg[i].raster == NULL) { elog(ERROR, "rtpg_union_noarg: Could not allocate memory for working rasters"); return 0; } memset(arg->bandarg[i].raster, 0, sizeof(rt_raster) * arg->bandarg[i].numraster); /* add new working rt_raster but only if working raster already exists */ if (!rt_raster_is_empty(arg->bandarg[0].raster[0])) { arg->bandarg[i].raster[0] = rt_raster_clone(arg->bandarg[0].raster[0], 0); /* shallow clone */ if (arg->bandarg[i].raster[0] == NULL) { elog(ERROR, "rtpg_union_noarg: Could not create working raster"); return 0; } } } return 1; } /* UNION aggregate transition function */ PG_FUNCTION_INFO_V1(RASTER_union_transfn); Datum RASTER_union_transfn(PG_FUNCTION_ARGS) { MemoryContext aggcontext; MemoryContext oldcontext; rtpg_union_arg iwr = NULL; int skiparg = 0; rt_pgraster *pgraster = NULL; rt_raster raster = NULL; rt_raster _raster = NULL; rt_band _band = NULL; int nband = 1; int noerr = 1; int isempty[2] = {0}; int hasband[2] = {0}; int nargs = 0; double _offset[4] = {0.}; int nbnodata = 0; /* 1 if adding bands */ int i = 0; int j = 0; int k = 0; rt_iterator itrset; char *utypename = NULL; rtpg_union_type utype = UT_LAST; rt_pixtype pixtype = PT_END; int hasnodata = 1; double nodataval = 0; rt_raster iraster = NULL; rt_band iband = NULL; int reuserast = 0; int y = 0; uint16_t _dim[2] = {0}; void *vals = NULL; uint16_t nvals = 0; POSTGIS_RT_DEBUG(3, "Starting..."); /* cannot be called directly as this is exclusive aggregate function */ if (!AggCheckCallContext(fcinfo, &aggcontext)) { elog(ERROR, "RASTER_union_transfn: Cannot be called in a non-aggregate context"); PG_RETURN_NULL(); } /* switch to aggcontext */ oldcontext = MemoryContextSwitchTo(aggcontext); if (PG_ARGISNULL(0)) { POSTGIS_RT_DEBUG(3, "Creating state variable"); /* allocate container in aggcontext */ iwr = palloc(sizeof(struct rtpg_union_arg_t)); if (iwr == NULL) { MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not allocate memory for state variable"); PG_RETURN_NULL(); } iwr->numband = 0; iwr->bandarg = NULL; skiparg = 0; } else { POSTGIS_RT_DEBUG(3, "State variable already exists"); iwr = (rtpg_union_arg) PG_GETARG_POINTER(0); skiparg = 1; } /* raster arg is NOT NULL */ if (!PG_ARGISNULL(1)) { /* deserialize raster */ pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); /* Get raster object */ raster = rt_raster_deserialize(pgraster, FALSE); if (raster == NULL) { rtpg_union_arg_destroy(iwr); PG_FREE_IF_COPY(pgraster, 1); MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not deserialize raster"); PG_RETURN_NULL(); } } /* process additional args if needed */ nargs = PG_NARGS(); POSTGIS_RT_DEBUGF(4, "nargs = %d", nargs); if (nargs > 2) { POSTGIS_RT_DEBUG(4, "processing additional arguments"); /* if more than 2 arguments, determine the type of argument 3 */ /* band number, UNION type or unionarg */ if (!PG_ARGISNULL(2)) { Oid calltype = get_fn_expr_argtype(fcinfo->flinfo, 2); switch (calltype) { /* UNION type */ case TEXTOID: { int idx = 0; int numband = 0; POSTGIS_RT_DEBUG(4, "Processing arg 3 as UNION type"); nbnodata = 1; utypename = text_to_cstring(PG_GETARG_TEXT_P(2)); utype = rtpg_uniontype_index_from_name(rtpg_strtoupper(utypename)); POSTGIS_RT_DEBUGF(4, "Union type: %s", utypename); POSTGIS_RT_DEBUGF(4, "iwr->numband: %d", iwr->numband); /* see if we need to append new bands */ if (raster) { idx = iwr->numband; numband = rt_raster_get_num_bands(raster); POSTGIS_RT_DEBUGF(4, "numband: %d", numband); /* only worry about appended bands */ if (numband > iwr->numband) iwr->numband = numband; } if (!iwr->numband) iwr->numband = 1; POSTGIS_RT_DEBUGF(4, "iwr->numband: %d", iwr->numband); POSTGIS_RT_DEBUGF(4, "numband, idx: %d, %d", numband, idx); /* bandarg set. only possible after the first call to function */ if (iwr->bandarg) { /* only reallocate if new bands need to be added */ if (numband > idx) { POSTGIS_RT_DEBUG(4, "Reallocating iwr->bandarg"); iwr->bandarg = repalloc(iwr->bandarg, sizeof(struct rtpg_union_band_arg_t) * iwr->numband); } /* prevent initial values step happening below */ else idx = iwr->numband; } /* bandarg not set, first call to function */ else { POSTGIS_RT_DEBUG(4, "Allocating iwr->bandarg"); iwr->bandarg = palloc(sizeof(struct rtpg_union_band_arg_t) * iwr->numband); } if (iwr->bandarg == NULL) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not allocate memory for band information"); PG_RETURN_NULL(); } /* set initial values for bands that are "new" */ for (i = idx; i < iwr->numband; i++) { iwr->bandarg[i].uniontype = utype; iwr->bandarg[i].nband = i; if ( utype == UT_MEAN || utype == UT_RANGE ) { iwr->bandarg[i].numraster = 2; } else iwr->bandarg[i].numraster = 1; iwr->bandarg[i].raster = NULL; } break; } /* band number */ case INT2OID: case INT4OID: if (skiparg) break; POSTGIS_RT_DEBUG(4, "Processing arg 3 as band number"); nband = PG_GETARG_INT32(2); if (nband < 1) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Band number must be greater than zero (1-based)"); PG_RETURN_NULL(); } iwr->numband = 1; iwr->bandarg = palloc(sizeof(struct rtpg_union_band_arg_t) * iwr->numband); if (iwr->bandarg == NULL) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not allocate memory for band information"); PG_RETURN_NULL(); } iwr->bandarg[0].uniontype = UT_LAST; iwr->bandarg[0].nband = nband - 1; iwr->bandarg[0].numraster = 1; iwr->bandarg[0].raster = NULL; break; /* only other type allowed is unionarg */ default: if (skiparg) break; POSTGIS_RT_DEBUG(4, "Processing arg 3 as unionarg"); if (!rtpg_union_unionarg_process(iwr, PG_GETARG_ARRAYTYPE_P(2))) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not process unionarg"); PG_RETURN_NULL(); } break; } } /* UNION type */ if (nargs > 3 && !PG_ARGISNULL(3)) { utypename = text_to_cstring(PG_GETARG_TEXT_P(3)); utype = rtpg_uniontype_index_from_name(rtpg_strtoupper(utypename)); iwr->bandarg[0].uniontype = utype; POSTGIS_RT_DEBUGF(4, "Union type: %s", utypename); if ( utype == UT_MEAN || utype == UT_RANGE ) { iwr->bandarg[0].numraster = 2; } } /* allocate space for pointers to rt_raster */ for (i = 0; i < iwr->numband; i++) { POSTGIS_RT_DEBUGF(4, "iwr->bandarg[%d].raster @ %p", i, iwr->bandarg[i].raster); /* no need to allocate */ if (iwr->bandarg[i].raster != NULL) continue; POSTGIS_RT_DEBUGF(4, "Allocating space for working rasters of band %d", i); iwr->bandarg[i].raster = (rt_raster *) palloc(sizeof(rt_raster) * iwr->bandarg[i].numraster); if (iwr->bandarg[i].raster == NULL) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not allocate memory for working raster(s)"); PG_RETURN_NULL(); } memset(iwr->bandarg[i].raster, 0, sizeof(rt_raster) * iwr->bandarg[i].numraster); /* add new working rt_raster but only if working raster already exists */ if (i > 0 && !rt_raster_is_empty(iwr->bandarg[0].raster[0])) { for (j = 0; j < iwr->bandarg[i].numraster; j++) { iwr->bandarg[i].raster[j] = rt_raster_clone(iwr->bandarg[0].raster[0], 0); /* shallow clone */ if (iwr->bandarg[i].raster[j] == NULL) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not create working raster"); PG_RETURN_NULL(); } } } } } /* only raster, no additional args */ /* only do this if raster isn't empty */ else { POSTGIS_RT_DEBUG(4, "no additional args, checking input raster"); nbnodata = 1; if (!rtpg_union_noarg(iwr, raster)) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not check and balance number of bands"); PG_RETURN_NULL(); } } /* init itrset */ itrset = palloc(sizeof(struct rt_iterator_t) * 2); if (itrset == NULL) { rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not allocate memory for iterator arguments"); PG_RETURN_NULL(); } /* by band to UNION */ for (i = 0; i < iwr->numband; i++) { /* by raster */ for (j = 0; j < iwr->bandarg[i].numraster; j++) { reuserast = 0; /* type of union */ utype = iwr->bandarg[i].uniontype; /* raster flags */ isempty[0] = rt_raster_is_empty(iwr->bandarg[i].raster[j]); isempty[1] = rt_raster_is_empty(raster); if (!isempty[0]) hasband[0] = rt_raster_has_band(iwr->bandarg[i].raster[j], 0); if (!isempty[1]) hasband[1] = rt_raster_has_band(raster, iwr->bandarg[i].nband); /* determine pixtype, hasnodata and nodataval */ _band = NULL; if (!isempty[0] && hasband[0]) _band = rt_raster_get_band(iwr->bandarg[i].raster[j], 0); else if (!isempty[1] && hasband[1]) _band = rt_raster_get_band(raster, iwr->bandarg[i].nband); else { pixtype = PT_64BF; hasnodata = 1; nodataval = rt_pixtype_get_min_value(pixtype); } if (_band != NULL) { pixtype = rt_band_get_pixtype(_band); hasnodata = 1; if (rt_band_get_hasnodata_flag(_band)) rt_band_get_nodata(_band, &nodataval); else nodataval = rt_band_get_min_value(_band); } /* UT_MEAN and UT_RANGE require two passes */ /* UT_MEAN: first for UT_COUNT and second for UT_SUM */ if (iwr->bandarg[i].uniontype == UT_MEAN) { /* first pass, UT_COUNT */ if (j < 1) utype = UT_COUNT; else utype = UT_SUM; } /* UT_RANGE: first for UT_MIN and second for UT_MAX */ else if (iwr->bandarg[i].uniontype == UT_RANGE) { /* first pass, UT_MIN */ if (j < 1) utype = UT_MIN; else utype = UT_MAX; } /* force band settings for UT_COUNT */ if (utype == UT_COUNT) { pixtype = PT_32BUI; hasnodata = 0; nodataval = 0; } POSTGIS_RT_DEBUGF(4, "(pixtype, hasnodata, nodataval) = (%s, %d, %f)", rt_pixtype_name(pixtype), hasnodata, nodataval); /* set itrset */ itrset[0].raster = iwr->bandarg[i].raster[j]; itrset[0].nband = 0; itrset[1].raster = raster; itrset[1].nband = iwr->bandarg[i].nband; /* allow use NODATA to replace missing bands */ if (nbnodata) { itrset[0].nbnodata = 1; itrset[1].nbnodata = 1; } /* missing bands are not ignored */ else { itrset[0].nbnodata = 0; itrset[1].nbnodata = 0; } /* if rasters AND bands are present, use copy approach */ if (!isempty[0] && !isempty[1] && hasband[0] && hasband[1]) { POSTGIS_RT_DEBUG(3, "using line method"); /* generate empty out raster */ if (rt_raster_from_two_rasters( iwr->bandarg[i].raster[j], raster, ET_UNION, &iraster, _offset ) != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not create internal raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "_offset = %f, %f, %f, %f", _offset[0], _offset[1], _offset[2], _offset[3]); /* rasters are spatially the same? */ if ( rt_raster_get_width(iwr->bandarg[i].raster[j]) == rt_raster_get_width(iraster) && rt_raster_get_height(iwr->bandarg[i].raster[j]) == rt_raster_get_height(iraster) ) { double igt[6] = {0}; double gt[6] = {0}; rt_raster_get_geotransform_matrix(iwr->bandarg[i].raster[j], gt); rt_raster_get_geotransform_matrix(iraster, igt); reuserast = rt_util_same_geotransform_matrix(gt, igt); } /* use internal raster */ if (!reuserast) { /* create band of same type */ if (rt_raster_generate_new_band( iraster, pixtype, nodataval, hasnodata, nodataval, 0 ) == -1) { pfree(itrset); rtpg_union_arg_destroy(iwr); rt_raster_destroy(iraster); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not add new band to internal raster"); PG_RETURN_NULL(); } iband = rt_raster_get_band(iraster, 0); /* copy working raster to output raster */ _dim[0] = rt_raster_get_width(iwr->bandarg[i].raster[j]); _dim[1] = rt_raster_get_height(iwr->bandarg[i].raster[j]); for (y = 0; y < _dim[1]; y++) { POSTGIS_RT_DEBUGF(4, "Getting pixel line of working raster at (x, y, length) = (0, %d, %d)", y, _dim[0]); if (rt_band_get_pixel_line( _band, 0, y, _dim[0], &vals, &nvals ) != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); rt_band_destroy(iband); rt_raster_destroy(iraster); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not get pixel line from band of working raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "Setting pixel line at (x, y, length) = (%d, %d, %d)", (int) _offset[0], (int) _offset[1] + y, nvals); if (rt_band_set_pixel_line( iband, (int) _offset[0], (int) _offset[1] + y, vals, nvals ) != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); rt_band_destroy(iband); rt_raster_destroy(iraster); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not set pixel line to band of internal raster"); PG_RETURN_NULL(); } } } else { rt_raster_destroy(iraster); iraster = iwr->bandarg[i].raster[j]; iband = rt_raster_get_band(iraster, 0); } /* run iterator for extent of input raster */ noerr = rt_raster_iterator( itrset, 2, ET_LAST, NULL, pixtype, hasnodata, nodataval, 0, 0, &utype, rtpg_union_callback, &_raster ); if (noerr != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); if (!reuserast) { rt_band_destroy(iband); rt_raster_destroy(iraster); } if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not run raster iterator function"); PG_RETURN_NULL(); } /* with iterator raster, copy data to output raster */ _band = rt_raster_get_band(_raster, 0); _dim[0] = rt_raster_get_width(_raster); _dim[1] = rt_raster_get_height(_raster); for (y = 0; y < _dim[1]; y++) { POSTGIS_RT_DEBUGF(4, "Getting pixel line of iterator raster at (x, y, length) = (0, %d, %d)", y, _dim[0]); if (rt_band_get_pixel_line( _band, 0, y, _dim[0], &vals, &nvals ) != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); if (!reuserast) { rt_band_destroy(iband); rt_raster_destroy(iraster); } if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not get pixel line from band of working raster"); PG_RETURN_NULL(); } POSTGIS_RT_DEBUGF(4, "Setting pixel line at (x, y, length) = (%d, %d, %d)", (int) _offset[2], (int) _offset[3] + y, nvals); if (rt_band_set_pixel_line( iband, (int) _offset[2], (int) _offset[3] + y, vals, nvals ) != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); if (!reuserast) { rt_band_destroy(iband); rt_raster_destroy(iraster); } if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not set pixel line to band of internal raster"); PG_RETURN_NULL(); } } /* free _raster */ rt_band_destroy(_band); rt_raster_destroy(_raster); /* replace working raster with output raster */ _raster = iraster; } else { POSTGIS_RT_DEBUG(3, "using pixel method"); /* pass everything to iterator */ noerr = rt_raster_iterator( itrset, 2, ET_UNION, NULL, pixtype, hasnodata, nodataval, 0, 0, &utype, rtpg_union_callback, &_raster ); if (noerr != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } MemoryContextSwitchTo(oldcontext); elog(ERROR, "RASTER_union_transfn: Could not run raster iterator function"); PG_RETURN_NULL(); } } /* replace working raster */ if (iwr->bandarg[i].raster[j] != NULL && !reuserast) { for (k = rt_raster_get_num_bands(iwr->bandarg[i].raster[j]) - 1; k >= 0; k--) rt_band_destroy(rt_raster_get_band(iwr->bandarg[i].raster[j], k)); rt_raster_destroy(iwr->bandarg[i].raster[j]); } iwr->bandarg[i].raster[j] = _raster; } } pfree(itrset); if (raster != NULL) { rt_raster_destroy(raster); PG_FREE_IF_COPY(pgraster, 1); } /* switch back to local context */ MemoryContextSwitchTo(oldcontext); POSTGIS_RT_DEBUG(3, "Finished"); PG_RETURN_POINTER(iwr); } /* UNION aggregate final function */ PG_FUNCTION_INFO_V1(RASTER_union_finalfn); Datum RASTER_union_finalfn(PG_FUNCTION_ARGS) { rtpg_union_arg iwr; rt_raster _rtn = NULL; rt_raster _raster = NULL; rt_pgraster *pgraster = NULL; int i = 0; int j = 0; rt_iterator itrset = NULL; rt_band _band = NULL; int noerr = 1; int status = 0; rt_pixtype pixtype = PT_END; int hasnodata = 0; double nodataval = 0; POSTGIS_RT_DEBUG(3, "Starting..."); /* cannot be called directly as this is exclusive aggregate function */ if (!AggCheckCallContext(fcinfo, NULL)) { elog(ERROR, "RASTER_union_finalfn: Cannot be called in a non-aggregate context"); PG_RETURN_NULL(); } /* NULL, return null */ if (PG_ARGISNULL(0)) PG_RETURN_NULL(); iwr = (rtpg_union_arg) PG_GETARG_POINTER(0); /* init itrset */ itrset = palloc(sizeof(struct rt_iterator_t) * 2); if (itrset == NULL) { rtpg_union_arg_destroy(iwr); elog(ERROR, "RASTER_union_finalfn: Could not allocate memory for iterator arguments"); PG_RETURN_NULL(); } for (i = 0; i < iwr->numband; i++) { if ( iwr->bandarg[i].uniontype == UT_MEAN || iwr->bandarg[i].uniontype == UT_RANGE ) { /* raster containing the SUM or MAX is at index 1 */ _band = rt_raster_get_band(iwr->bandarg[i].raster[1], 0); pixtype = rt_band_get_pixtype(_band); hasnodata = rt_band_get_hasnodata_flag(_band); if (hasnodata) rt_band_get_nodata(_band, &nodataval); POSTGIS_RT_DEBUGF(4, "(pixtype, hasnodata, nodataval) = (%s, %d, %f)", rt_pixtype_name(pixtype), hasnodata, nodataval); itrset[0].raster = iwr->bandarg[i].raster[0]; itrset[0].nband = 0; itrset[1].raster = iwr->bandarg[i].raster[1]; itrset[1].nband = 0; /* pass everything to iterator */ if (iwr->bandarg[i].uniontype == UT_MEAN) { noerr = rt_raster_iterator( itrset, 2, ET_UNION, NULL, pixtype, hasnodata, nodataval, 0, 0, NULL, rtpg_union_mean_callback, &_raster ); } else if (iwr->bandarg[i].uniontype == UT_RANGE) { noerr = rt_raster_iterator( itrset, 2, ET_UNION, NULL, pixtype, hasnodata, nodataval, 0, 0, NULL, rtpg_union_range_callback, &_raster ); } if (noerr != ES_NONE) { pfree(itrset); rtpg_union_arg_destroy(iwr); if (_rtn != NULL) rt_raster_destroy(_rtn); elog(ERROR, "RASTER_union_finalfn: Could not run raster iterator function"); PG_RETURN_NULL(); } } else _raster = iwr->bandarg[i].raster[0]; /* first band, _rtn doesn't exist */ if (i < 1) { uint32_t bandNums[1] = {0}; _rtn = rt_raster_from_band(_raster, bandNums, 1); status = (_rtn == NULL) ? -1 : 0; } else status = rt_raster_copy_band(_rtn, _raster, 0, i); POSTGIS_RT_DEBUG(4, "destroying source rasters"); /* destroy source rasters */ if ( iwr->bandarg[i].uniontype == UT_MEAN || iwr->bandarg[i].uniontype == UT_RANGE ) { rt_raster_destroy(_raster); } for (j = 0; j < iwr->bandarg[i].numraster; j++) { if (iwr->bandarg[i].raster[j] == NULL) continue; rt_raster_destroy(iwr->bandarg[i].raster[j]); iwr->bandarg[i].raster[j] = NULL; } if (status < 0) { rtpg_union_arg_destroy(iwr); rt_raster_destroy(_rtn); elog(ERROR, "RASTER_union_finalfn: Could not add band to final raster"); PG_RETURN_NULL(); } } /* cleanup */ pfree(itrset); rtpg_union_arg_destroy(iwr); pgraster = rt_raster_serialize(_rtn); rt_raster_destroy(_rtn); POSTGIS_RT_DEBUG(3, "Finished"); if (!pgraster) PG_RETURN_NULL(); SET_VARSIZE(pgraster, pgraster->size); PG_RETURN_POINTER(pgraster); } /* ---------------------------------------------------------------- */ /* Clip raster with geometry */ /* ---------------------------------------------------------------- */ typedef struct rtpg_clip_band_t *rtpg_clip_band; struct rtpg_clip_band_t { int nband; /* band index */ int hasnodata; /* is there a user-specified NODATA? */ double nodataval; /* user-specified NODATA */ }; typedef struct rtpg_clip_arg_t *rtpg_clip_arg; struct rtpg_clip_arg_t { rt_extenttype extenttype; rt_raster raster; rt_raster mask; int numbands; /* number of bandargs */ rtpg_clip_band band; }; static rtpg_clip_arg rtpg_clip_arg_init() { rtpg_clip_arg arg = NULL; arg = palloc(sizeof(struct rtpg_clip_arg_t)); if (arg == NULL) { elog(ERROR, "rtpg_clip_arg_init: Could not allocate memory for function arguments"); return NULL; } arg->extenttype = ET_INTERSECTION; arg->raster = NULL; arg->mask = NULL; arg->numbands = 0; arg->band = NULL; return arg; } static void rtpg_clip_arg_destroy(rtpg_clip_arg arg) { if (arg->band != NULL) pfree(arg->band); if (arg->raster != NULL) rt_raster_destroy(arg->raster); if (arg->mask != NULL) rt_raster_destroy(arg->mask); pfree(arg); } static int rtpg_clip_callback( rt_iterator_arg arg, void *userarg, double *value, int *nodata ) { *value = 0; *nodata = 0; /* either is NODATA, output is NODATA */ if (arg->nodata[0][0][0] || arg->nodata[1][0][0]) *nodata = 1; /* set to value */ else *value = arg->values[0][0][0]; return 1; } PG_FUNCTION_INFO_V1(RASTER_clip); Datum RASTER_clip(PG_FUNCTION_ARGS) { rt_pgraster *pgraster = NULL; LWGEOM *rastgeom = NULL; double gt[6] = {0}; int srid = SRID_UNKNOWN; rt_pgraster *pgrtn = NULL; rt_raster rtn = NULL; GSERIALIZED *gser = NULL; LWGEOM *geom = NULL; unsigned char *wkb = NULL; size_t wkb_len; ArrayType *array; Oid etype; Datum *e; bool *nulls; int16 typlen; bool typbyval; char typalign; int i = 0; int j = 0; int k = 0; rtpg_clip_arg arg = NULL; LWGEOM *tmpgeom = NULL; rt_iterator itrset; rt_raster _raster = NULL; rt_band band = NULL; rt_pixtype pixtype; int hasnodata; double nodataval; int noerr = 0; POSTGIS_RT_DEBUG(3, "Starting..."); /* raster or geometry is NULL, return NULL */ if (PG_ARGISNULL(0) || PG_ARGISNULL(2)) PG_RETURN_NULL(); /* init arg */ arg = rtpg_clip_arg_init(); if (arg == NULL) { elog(ERROR, "RASTER_clip: Could not initialize argument structure"); PG_RETURN_NULL(); } /* raster (0) */ pgraster = (rt_pgraster *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* Get raster object */ arg->raster = rt_raster_deserialize(pgraster, FALSE); if (arg->raster == NULL) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not deserialize raster"); PG_RETURN_NULL(); } /* raster is empty, return empty raster */ if (rt_raster_is_empty(arg->raster)) { elog(NOTICE, "Input raster is empty. Returning empty raster"); rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); rtn = rt_raster_new(0, 0); if (rtn == NULL) { elog(ERROR, "RASTER_clip: Could not create empty raster"); PG_RETURN_NULL(); } pgrtn = rt_raster_serialize(rtn); rt_raster_destroy(rtn); if (NULL == pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* metadata */ rt_raster_get_geotransform_matrix(arg->raster, gt); srid = clamp_srid(rt_raster_get_srid(arg->raster)); /* geometry (2) */ gser = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(2)); geom = lwgeom_from_gserialized(gser); /* Get a 2D version of the geometry if necessary */ if (lwgeom_ndims(geom) > 2) { LWGEOM *geom2d = lwgeom_force_2d(geom); lwgeom_free(geom); geom = geom2d; } /* check that SRIDs match */ if (srid != clamp_srid(gserialized_get_srid(gser))) { elog(NOTICE, "Geometry provided does not have the same SRID as the raster. Returning NULL"); rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 2); PG_RETURN_NULL(); } /* crop (4) */ if (!PG_ARGISNULL(4) && !PG_GETARG_BOOL(4)) arg->extenttype = ET_FIRST; /* get intersection geometry of input raster and input geometry */ if (rt_raster_get_convex_hull(arg->raster, &rastgeom) != ES_NONE) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 2); elog(ERROR, "RASTER_clip: Could not get convex hull of raster"); PG_RETURN_NULL(); } tmpgeom = lwgeom_intersection(rastgeom, geom); lwgeom_free(rastgeom); lwgeom_free(geom); PG_FREE_IF_COPY(gser, 2); geom = tmpgeom; /* intersection is empty AND extent type is INTERSECTION, return empty */ if (lwgeom_is_empty(geom) && arg->extenttype == ET_INTERSECTION) { elog(NOTICE, "The input raster and input geometry do not intersect. Returning empty raster"); rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); rtn = rt_raster_new(0, 0); if (rtn == NULL) { elog(ERROR, "RASTER_clip: Could not create empty raster"); PG_RETURN_NULL(); } pgrtn = rt_raster_serialize(rtn); rt_raster_destroy(rtn); if (NULL == pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* nband (1) */ if (!PG_ARGISNULL(1)) { array = PG_GETARG_ARRAYTYPE_P(1); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case INT2OID: case INT4OID: break; default: rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); elog(ERROR, "RASTER_clip: Invalid data type for band indexes"); PG_RETURN_NULL(); break; } deconstruct_array( array, etype, typlen, typbyval, typalign, &e, &nulls, &(arg->numbands) ); arg->band = palloc(sizeof(struct rtpg_clip_band_t) * arg->numbands); if (arg->band == NULL) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); elog(ERROR, "RASTER_clip: Could not allocate memory for band arguments"); PG_RETURN_NULL(); } for (i = 0, j = 0; i < arg->numbands; i++) { if (nulls[i]) continue; switch (etype) { case INT2OID: arg->band[j].nband = DatumGetInt16(e[i]) - 1; break; case INT4OID: arg->band[j].nband = DatumGetInt32(e[i]) - 1; break; } j++; } if (j < arg->numbands) { arg->band = repalloc(arg->band, sizeof(struct rtpg_clip_band_t) * j); if (arg->band == NULL) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); elog(ERROR, "RASTER_clip: Could not reallocate memory for band arguments"); PG_RETURN_NULL(); } arg->numbands = j; } /* validate band */ for (i = 0; i < arg->numbands; i++) { if (!rt_raster_has_band(arg->raster, arg->band[i].nband)) { elog(NOTICE, "Band at index %d not found in raster", arg->band[i].nband + 1); rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); PG_RETURN_NULL(); } arg->band[i].hasnodata = 0; arg->band[i].nodataval = 0; } } else { arg->numbands = rt_raster_get_num_bands(arg->raster); /* raster may have no bands */ if (arg->numbands) { arg->band = palloc(sizeof(struct rtpg_clip_band_t) * arg->numbands); if (arg->band == NULL) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); elog(ERROR, "RASTER_clip: Could not allocate memory for band arguments"); PG_RETURN_NULL(); } for (i = 0; i < arg->numbands; i++) { arg->band[i].nband = i; arg->band[i].hasnodata = 0; arg->band[i].nodataval = 0; } } } /* nodataval (3) */ if (!PG_ARGISNULL(3)) { array = PG_GETARG_ARRAYTYPE_P(3); etype = ARR_ELEMTYPE(array); get_typlenbyvalalign(etype, &typlen, &typbyval, &typalign); switch (etype) { case FLOAT4OID: case FLOAT8OID: break; default: rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); lwgeom_free(geom); elog(ERROR, "RASTER_clip: Invalid data type for NODATA values"); PG_RETURN_NULL(); break; } deconstruct_array( array, etype, typlen, typbyval, typalign, &e, &nulls, &k ); /* it doesn't matter if there are more nodataval */ for (i = 0, j = 0; i < arg->numbands; i++, j++) { /* cap j to the last nodataval element */ if (j >= k) j = k - 1; if (nulls[j]) continue; arg->band[i].hasnodata = 1; switch (etype) { case FLOAT4OID: arg->band[i].nodataval = DatumGetFloat4(e[j]); break; case FLOAT8OID: arg->band[i].nodataval = DatumGetFloat8(e[j]); break; } } } /* get wkb of geometry */ POSTGIS_RT_DEBUG(3, "getting wkb of geometry"); wkb = lwgeom_to_wkb(geom, WKB_SFSQL, &wkb_len); lwgeom_free(geom); /* rasterize geometry */ arg->mask = rt_raster_gdal_rasterize( wkb, wkb_len, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &(gt[1]), &(gt[5]), NULL, NULL, &(gt[0]), &(gt[3]), &(gt[2]), &(gt[4]), NULL ); pfree(wkb); if (arg->mask == NULL) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not rasterize intersection geometry"); PG_RETURN_NULL(); } /* set SRID */ rt_raster_set_srid(arg->mask, srid); /* run iterator */ /* init itrset */ itrset = palloc(sizeof(struct rt_iterator_t) * 2); if (itrset == NULL) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not allocate memory for iterator arguments"); PG_RETURN_NULL(); } /* one band at a time */ for (i = 0; i < arg->numbands; i++) { POSTGIS_RT_DEBUGF(4, "band arg %d (nband, hasnodata, nodataval) = (%d, %d, %f)", i, arg->band[i].nband, arg->band[i].hasnodata, arg->band[i].nodataval); band = rt_raster_get_band(arg->raster, arg->band[i].nband); /* band metadata */ pixtype = rt_band_get_pixtype(band); if (arg->band[i].hasnodata) { hasnodata = 1; nodataval = arg->band[i].nodataval; } else if (rt_band_get_hasnodata_flag(band)) { hasnodata = 1; rt_band_get_nodata(band, &nodataval); } else { hasnodata = 0; nodataval = rt_band_get_min_value(band); } /* band is NODATA, create NODATA band and continue */ if (rt_band_get_isnodata_flag(band)) { /* create raster */ if (rtn == NULL) { noerr = rt_raster_from_two_rasters(arg->raster, arg->mask, arg->extenttype, &rtn, NULL); if (noerr != ES_NONE) { rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not create output raster"); PG_RETURN_NULL(); } } /* create NODATA band */ if (rt_raster_generate_new_band(rtn, pixtype, nodataval, hasnodata, nodataval, i) < 0) { rt_raster_destroy(rtn); rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not add NODATA band to output raster"); PG_RETURN_NULL(); } continue; } /* raster */ itrset[0].raster = arg->raster; itrset[0].nband = arg->band[i].nband; itrset[0].nbnodata = 1; /* mask */ itrset[1].raster = arg->mask; itrset[1].nband = 0; itrset[1].nbnodata = 1; /* pass to iterator */ noerr = rt_raster_iterator( itrset, 2, arg->extenttype, NULL, pixtype, hasnodata, nodataval, 0, 0, NULL, rtpg_clip_callback, &_raster ); if (noerr != ES_NONE) { pfree(itrset); rtpg_clip_arg_destroy(arg); if (rtn != NULL) rt_raster_destroy(rtn); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not run raster iterator function"); PG_RETURN_NULL(); } /* new raster */ if (rtn == NULL) rtn = _raster; /* copy band */ else { band = rt_raster_get_band(_raster, 0); if (band == NULL) { pfree(itrset); rtpg_clip_arg_destroy(arg); rt_raster_destroy(_raster); rt_raster_destroy(rtn); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not get band from working raster"); PG_RETURN_NULL(); } if (rt_raster_add_band(rtn, band, i) < 0) { pfree(itrset); rtpg_clip_arg_destroy(arg); rt_raster_destroy(_raster); rt_raster_destroy(rtn); PG_FREE_IF_COPY(pgraster, 0); elog(ERROR, "RASTER_clip: Could not add new band to output raster"); PG_RETURN_NULL(); } rt_raster_destroy(_raster); } } pfree(itrset); rtpg_clip_arg_destroy(arg); PG_FREE_IF_COPY(pgraster, 0); pgrtn = rt_raster_serialize(rtn); rt_raster_destroy(rtn); POSTGIS_RT_DEBUG(3, "Finished"); if (!pgrtn) PG_RETURN_NULL(); SET_VARSIZE(pgrtn, pgrtn->size); PG_RETURN_POINTER(pgrtn); } /* ---------------------------------------------------------------- */ /* Memory allocation / error reporting hooks */ /* TODO: reuse the ones in libpgcommon ? */ /* ---------------------------------------------------------------- */ static void * rt_pg_alloc(size_t size) { void * result; POSTGIS_RT_DEBUGF(5, "rt_pgalloc(%ld) called", (long int) size); result = palloc(size); return result; } static void * rt_pg_realloc(void *mem, size_t size) { void * result; POSTGIS_RT_DEBUGF(5, "rt_pg_realloc(%ld) called", (long int) size); if (mem) result = repalloc(mem, size); else result = palloc(size); return result; } static void rt_pg_free(void *ptr) { POSTGIS_RT_DEBUG(5, "rt_pfree called"); pfree(ptr); } static void rt_pg_error(const char *fmt, va_list ap) { #define ERRMSG_MAXLEN 256 char errmsg[ERRMSG_MAXLEN+1]; vsnprintf (errmsg, ERRMSG_MAXLEN, fmt, ap); errmsg[ERRMSG_MAXLEN]='\0'; ereport(ERROR, (errmsg_internal("%s", errmsg))); } static void rt_pg_notice(const char *fmt, va_list ap) { char *msg; /* * This is a GNU extension. * Dunno how to handle errors here. */ if (!lw_vasprintf (&msg, fmt, ap)) { va_end (ap); return; } ereport(NOTICE, (errmsg_internal("%s", msg))); free(msg); } void rt_init_allocators(void) { /* raster callback - install raster handlers */ rt_set_handlers(rt_pg_alloc, rt_pg_realloc, rt_pg_free, rt_pg_error, rt_pg_notice, rt_pg_notice); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/Version.config�������������������������������������������������������0000644�0000000�0000000�00000000406�11722777314�017707� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Version numbering central repository, to be included from various # places during the build process # See HOWTO_RELEASE file in SVN for definitions of those three. POSTGIS_RASTER_MAJOR_VERSION=0 POSTGIS_RASTER_MINOR_VERSION=1 POSTGIS_RASTER_MICRO_VERSION=6d ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/CREDITS��������������������������������������������������������������0000644�0000000�0000000�00000001220�11722777314�016106� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������- The BAM project, University Laval, sponsored project management kick-start. - CadCorp (http://www.cadcorp.com/) sponsored WKB and datum format design and implementation. - The Michigan Tech Research Institute sponsored spatial operators implementation. - Refractions Research Inc. provided svn repository - Pierre Racine designed the functionality - Sandro Santilli wrote the in-memory api, build scripts and postgresql connectors - Deimos Space (http://www.deimos-space.com/UK/index.asp?lang=UK), under "España Virtual" project (http://www.espanavirtual.org/?q=en) sponsored the creation of several core and import/export functions ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/����������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016042� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/��������������������������������������������������������0000755�0000000�0000000�00000000000�12315456267�017524� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelvalue.sql���������������������������������������0000644�0000000�0000000�00000024346�12233537203�023126� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- ----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. ----------------------------------------------------------------------- ----------------------------------------------------------------------- --- Test of "Get" functions for properties of the raster. ----------------------------------------------------------------------- CREATE TABLE rt_band_properties_test ( id numeric, description text, nbband integer, b1pixeltype text, b1hasnodatavalue boolean, b1nodatavalue float4, b1val float4, b2pixeltype text, b2hasnodatavalue boolean, b2nodatavalue float4, b2val float4, geomtxt text, rast raster ); INSERT INTO rt_band_properties_test VALUES ( 1, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 2, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((782325.5 26744042.5,782330.5 26744045.5,782333.5 26744040.5,782328.5 26744037.5,782325.5 26744042.5))', ( '01' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 2) || '0000000000001440' -- scaleX (float64 5) || '00000000000014C0' -- scaleY (float64 -5) || '00000000EBDF2741' -- ipX (float64 782325.5) || '000000A84E817941' -- ipY (float64 26744042.5) || '0000000000000840' -- skewX (float64 3) || '0000000000000840' -- skewY (float64 3) || '27690000' -- SRID (int32 26919 - UTM 19N) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '02' -- pixel(0,0)==2 || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 2, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 2, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '02' -- pixel(0,0)==2 || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 3, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 3, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '6' -- hasnodatavalue and isnodata set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 4, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 3, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true and isnodata set to false (should be updated) || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); ----------------------------------------------------------------------- -- Test 1 - st_value(rast raster, band integer, x integer, y integer) ----------------------------------------------------------------------- SELECT 'test 1.1', id FROM rt_band_properties_test WHERE st_value(rast, 1, 1, 1, TRUE) != b1val; SELECT 'test 1.2', id FROM rt_band_properties_test WHERE st_value(rast, 2, 1, 1, TRUE) != b2val; SELECT 'test 1.3', id FROM rt_band_properties_test WHERE st_value(rast, 1, 1, 1, FALSE) != b1val; SELECT 'test 1.4', id FROM rt_band_properties_test WHERE st_value(rast, 1, 1, 1, NULL) != b1val; SELECT 'test 1.5', id FROM rt_band_properties_test WHERE NOT st_value(rast, 1, 1, NULL, NULL) IS NULL; SELECT 'test 1.6', id FROM rt_band_properties_test WHERE NOT st_value(rast, 1, NULL, 1, NULL) IS NULL; SELECT 'test 1.7', id FROM rt_band_properties_test WHERE NOT st_value(st_setbandnodatavalue(rast, b1val), 1, 1, 1, NULL) IS NULL; SELECT 'test 1.8', id FROM rt_band_properties_test WHERE NOT st_value(st_setbandnodatavalue(rast, b1val), 1, 1, 1, TRUE) IS NULL; SELECT 'test 1.9', id FROM rt_band_properties_test WHERE st_value(st_setbandnodatavalue(rast, b1val), 1, 1, 1, FALSE) != b1val; -- Make sure we return only a warning when getting vlue with out of range pixel coordinates SELECT 'test 1.10', id FROM rt_band_properties_test WHERE NOT st_value(rast, -1, -1) IS NULL; ----------------------------------------------------------------------- -- Test 2 - st_value(rast raster, band integer, pt geometry) ----------------------------------------------------------------------- SELECT 'test 2.1', id FROM rt_band_properties_test WHERE st_value(rast, 1, st_makepoint(st_upperleftx(rast), st_upperlefty(rast))) != b1val; SELECT 'test 2.2', id FROM rt_band_properties_test WHERE st_value(rast, 2, st_makepoint(st_upperleftx(rast), st_upperlefty(rast))) != b2val; ----------------------------------------------------------------------- -- Test 3 - st_pixelaspolygon(rast raster, x integer, y integer) ----------------------------------------------------------------------- SELECT 'test 3.1', id FROM rt_band_properties_test WHERE st_astext(st_pixelaspolygon(rast, 1, 1)) != geomtxt; ----------------------------------------------------------------------- -- Test 4 - st_setvalue(rast raster, band integer, x integer, y integer, val float8) ----------------------------------------------------------------------- SELECT 'test 4.1', id FROM rt_band_properties_test WHERE st_value(st_setvalue(rast, 1, 1, 1, 5), 1, 1, 1) != 5; SELECT 'test 4.2', id FROM rt_band_properties_test WHERE NOT st_value(st_setvalue(rast, 1, 1, 1, NULL), 1, 1, 1) IS NULL; SELECT 'test 4.3', id FROM rt_band_properties_test WHERE st_value(st_setvalue(rast, 1, 1, 1, NULL), 1, 1, 1, FALSE) != st_bandnodatavalue(rast, 1); SELECT 'test 4.4', id FROM rt_band_properties_test WHERE st_value(st_setvalue(st_setbandnodatavalue(rast, NULL), 1, 1, 1, NULL), 1, 1, 1) != b1val; DROP TABLE rt_band_properties_test; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_set_band_properties.sql������������������������������0000644�0000000�0000000�00000016366�12233537203�025006� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 David Zwarg <dzwarg@azavea.com> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- ----------------------------------------------------------------------- --- Test of "Set" functions for properties of a raster band. ----------------------------------------------------------------------- CREATE TABLE rt_band_properties_test ( id numeric, description text, nbband integer, b1pixeltype text, b1hasnodatavalue boolean, b1nodatavalue float4, b1val float4, b2pixeltype text, b2hasnodatavalue boolean, b2nodatavalue float4, b2val float4, geomtxt text, rast raster ); INSERT INTO rt_band_properties_test VALUES ( 1, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 2, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((782325.5 26744042.5,782330.5 26744045.5,782333.5 26744040.5,782328.5 26744037.5,782325.5 26744042.5))', ( '01' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 2) || '0000000000001440' -- scaleX (float64 5) || '00000000000014C0' -- scaleY (float64 -5) || '00000000EBDF2741' -- ipX (float64 782325.5) || '000000A84E817941' -- ipY (float64 26744042.5) || '0000000000000840' -- skewX (float64 3) || '0000000000000840' -- skewY (float64 3) || '27690000' -- SRID (int32 26919 - UTM 19N) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '02' -- pixel(0,0)==2 || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 2, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 2, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '02' -- pixel(0,0)==2 || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 3, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 3, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '6' -- hasnodatavalue and isnodata set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 4, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 3, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true and isnodata set to false (should be updated) || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); ----------------------------------------------------------------------- --- ST_SetBandNoDataValue ----------------------------------------------------------------------- SELECT (b1nodatavalue+1) AS expected, st_bandnodatavalue(st_setbandnodatavalue(rast, 1, b1nodatavalue+1),1) AS obtained FROM rt_band_properties_test WHERE (b1nodatavalue+1) != st_bandnodatavalue(st_setbandnodatavalue(rast, 1, b1nodatavalue+1),1); DROP TABLE rt_band_properties_test; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_intersects_expected����������������������������������0000644�0000000�0000000�00000012004�12003307305�024173� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1.1|0|1|t 1.1|0|2|t 1.1|0|10|t 1.1|0|11|t 1.1|0|12|t 1.1|0|13|t 1.1|0|14|f 1.1|0|15|t 1.1|0|16|t 1.1|0|20|t 1.1|0|21|t 1.1|0|22|t 1.1|0|23|t 1.1|0|30|t 1.1|0|31|t 1.1|0|32|t 1.2|0|1|t 1.2|0|2|t 1.2|0|10|t 1.2|0|11|t 1.2|0|12|t 1.2|0|13|f 1.2|0|14|f 1.2|0|15|t 1.2|0|16|t 1.2|0|20|t 1.2|0|21|t 1.2|0|22|t 1.2|0|23|t 1.2|0|30|t 1.2|0|31|t 1.2|0|32|t 2.1|0|1|ST_Point|t 2.1|0|2|ST_Point|t 2.1|0|3|ST_Point|t 2.1|0|4|ST_Point|t 2.1|0|5|ST_Point|f 2.1|0|6|ST_Point|f 2.1|0|7|ST_Point|f 2.1|0|8|ST_Point|f 2.1|0|11|ST_MultiPoint|t 2.1|0|12|ST_MultiPoint|t 2.1|0|13|ST_MultiPoint|t 2.1|0|14|ST_MultiPoint|f 2.1|0|15|ST_MultiPoint|f 2.1|0|21|ST_LineString|t 2.1|0|22|ST_LineString|t 2.1|0|23|ST_LineString|t 2.1|0|24|ST_LineString|f 2.1|0|25|ST_LineString|f 2.1|0|26|ST_LineString|t 2.1|0|27|ST_LineString|t 2.1|0|28|ST_LineString|t 2.1|0|29|ST_LineString|f 2.1|0|31|ST_Polygon|t 2.1|0|32|ST_Polygon|t 2.1|0|33|ST_Polygon|t 2.1|0|34|ST_Polygon|t 2.1|0|35|ST_Polygon|t 2.1|0|36|ST_Polygon|f 2.1|0|41|ST_MultiPolygon|t 2.1|0|42|ST_MultiPolygon|t 2.1|0|43|ST_MultiPolygon|t 2.1|0|44|ST_MultiPolygon|t 2.1|0|45|ST_MultiPolygon|t 2.1|0|46|ST_MultiPolygon|f 2.2|0|1|ST_Point|t 2.2|0|2|ST_Point|t 2.2|0|3|ST_Point|t 2.2|0|4|ST_Point|t 2.2|0|5|ST_Point|f 2.2|0|6|ST_Point|f 2.2|0|7|ST_Point|f 2.2|0|8|ST_Point|f 2.2|0|11|ST_MultiPoint|t 2.2|0|12|ST_MultiPoint|t 2.2|0|13|ST_MultiPoint|t 2.2|0|14|ST_MultiPoint|f 2.2|0|15|ST_MultiPoint|f 2.2|0|21|ST_LineString|t 2.2|0|22|ST_LineString|t 2.2|0|23|ST_LineString|t 2.2|0|24|ST_LineString|f 2.2|0|25|ST_LineString|f 2.2|0|26|ST_LineString|t 2.2|0|27|ST_LineString|t 2.2|0|28|ST_LineString|t 2.2|0|29|ST_LineString|f 2.2|0|31|ST_Polygon|t 2.2|0|32|ST_Polygon|t 2.2|0|33|ST_Polygon|t 2.2|0|34|ST_Polygon|t 2.2|0|35|ST_Polygon|t 2.2|0|36|ST_Polygon|f 2.2|0|41|ST_MultiPolygon|t 2.2|0|42|ST_MultiPolygon|t 2.2|0|43|ST_MultiPolygon|t 2.2|0|44|ST_MultiPolygon|t 2.2|0|45|ST_MultiPolygon|t 2.2|0|46|ST_MultiPolygon|f 2.3|2|1|ST_Point|t 2.3|2|2|ST_Point|t 2.3|2|3|ST_Point|f 2.3|2|4|ST_Point|f 2.3|2|5|ST_Point|f 2.3|2|6|ST_Point|f 2.3|2|7|ST_Point|f 2.3|2|8|ST_Point|t 2.3|2|11|ST_MultiPoint|t 2.3|2|12|ST_MultiPoint|t 2.3|2|13|ST_MultiPoint|t 2.3|2|14|ST_MultiPoint|t 2.3|2|15|ST_MultiPoint|t 2.3|2|21|ST_LineString|t 2.3|2|22|ST_LineString|t 2.3|2|23|ST_LineString|t 2.3|2|24|ST_LineString|t 2.3|2|25|ST_LineString|t 2.3|2|26|ST_LineString|t 2.3|2|27|ST_LineString|t 2.3|2|28|ST_LineString|t 2.3|2|29|ST_LineString|t 2.3|2|31|ST_Polygon|t 2.3|2|32|ST_Polygon|t 2.3|2|33|ST_Polygon|t 2.3|2|34|ST_Polygon|t 2.3|2|35|ST_Polygon|t 2.3|2|36|ST_Polygon|t 2.3|2|41|ST_MultiPolygon|t 2.3|2|42|ST_MultiPolygon|t 2.3|2|43|ST_MultiPolygon|t 2.3|2|44|ST_MultiPolygon|t 2.3|2|45|ST_MultiPolygon|t 2.3|2|46|ST_MultiPolygon|t 2.4|2|1|ST_Point|t 2.4|2|2|ST_Point|t 2.4|2|3|ST_Point|f 2.4|2|4|ST_Point|f 2.4|2|5|ST_Point|f 2.4|2|6|ST_Point|f 2.4|2|7|ST_Point|f 2.4|2|8|ST_Point|t 2.4|2|11|ST_MultiPoint|t 2.4|2|12|ST_MultiPoint|t 2.4|2|13|ST_MultiPoint|t 2.4|2|14|ST_MultiPoint|t 2.4|2|15|ST_MultiPoint|t 2.4|2|21|ST_LineString|t 2.4|2|22|ST_LineString|t 2.4|2|23|ST_LineString|t 2.4|2|24|ST_LineString|t 2.4|2|25|ST_LineString|t 2.4|2|26|ST_LineString|t 2.4|2|27|ST_LineString|t 2.4|2|28|ST_LineString|t 2.4|2|29|ST_LineString|t 2.4|2|31|ST_Polygon|t 2.4|2|32|ST_Polygon|t 2.4|2|33|ST_Polygon|t 2.4|2|34|ST_Polygon|t 2.4|2|35|ST_Polygon|t 2.4|2|36|ST_Polygon|t 2.4|2|41|ST_MultiPolygon|t 2.4|2|42|ST_MultiPolygon|t 2.4|2|43|ST_MultiPolygon|t 2.4|2|44|ST_MultiPolygon|t 2.4|2|45|ST_MultiPolygon|t 2.4|2|46|ST_MultiPolygon|t 2.5|0|1|ST_Point|t 2.5|0|2|ST_Point|t 2.5|0|3|ST_Point|t 2.5|0|4|ST_Point|t 2.5|0|5|ST_Point|f 2.5|0|6|ST_Point|f 2.5|0|7|ST_Point|f 2.5|0|8|ST_Point|f 2.5|0|11|ST_MultiPoint|t 2.5|0|12|ST_MultiPoint|t 2.5|0|13|ST_MultiPoint|t 2.5|0|14|ST_MultiPoint|f 2.5|0|15|ST_MultiPoint|f 2.5|0|21|ST_LineString|t 2.5|0|22|ST_LineString|t 2.5|0|23|ST_LineString|t 2.5|0|24|ST_LineString|f 2.5|0|25|ST_LineString|f 2.5|0|26|ST_LineString|t 2.5|0|27|ST_LineString|t 2.5|0|28|ST_LineString|t 2.5|0|29|ST_LineString|f 2.5|0|31|ST_Polygon|t 2.5|0|32|ST_Polygon|t 2.5|0|33|ST_Polygon|t 2.5|0|34|ST_Polygon|t 2.5|0|35|ST_Polygon|t 2.5|0|36|ST_Polygon|f 2.5|0|41|ST_MultiPolygon|t 2.5|0|42|ST_MultiPolygon|t 2.5|0|43|ST_MultiPolygon|t 2.5|0|44|ST_MultiPolygon|t 2.5|0|45|ST_MultiPolygon|t 2.5|0|46|ST_MultiPolygon|f 2.6|2|1|ST_Point|t 2.6|2|2|ST_Point|t 2.6|2|3|ST_Point|f 2.6|2|4|ST_Point|f 2.6|2|5|ST_Point|f 2.6|2|6|ST_Point|f 2.6|2|7|ST_Point|f 2.6|2|8|ST_Point|t 2.6|2|11|ST_MultiPoint|t 2.6|2|12|ST_MultiPoint|t 2.6|2|13|ST_MultiPoint|t 2.6|2|14|ST_MultiPoint|t 2.6|2|15|ST_MultiPoint|t 2.6|2|21|ST_LineString|t 2.6|2|22|ST_LineString|t 2.6|2|23|ST_LineString|t 2.6|2|24|ST_LineString|t 2.6|2|25|ST_LineString|t 2.6|2|26|ST_LineString|t 2.6|2|27|ST_LineString|t 2.6|2|28|ST_LineString|t 2.6|2|29|ST_LineString|t 2.6|2|31|ST_Polygon|t 2.6|2|32|ST_Polygon|t 2.6|2|33|ST_Polygon|t 2.6|2|34|ST_Polygon|t 2.6|2|35|ST_Polygon|t 2.6|2|36|ST_Polygon|t 2.6|2|41|ST_MultiPolygon|t 2.6|2|42|ST_MultiPolygon|t 2.6|2|43|ST_MultiPolygon|t 2.6|2|44|ST_MultiPolygon|t 2.6|2|45|ST_MultiPolygon|t 2.6|2|46|ST_MultiPolygon|t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_georeference.sql�������������������������������������0000644�0000000�0000000�00000037336�12233537203�023404� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009-2010 Mateusz Loskot <mateusz@loskot.net>, David Zwarg <dzwarg@azavea.com> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_properties_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_properties_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 10, 10, 20, --- SRID, width, height 2, 3, 0.5, 0.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_properties_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 12, 1, 1, --- SRID, width, height 5, 5, 2.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 1, 1, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '000000000000F03F' -- skewX (float64 1) || '000000000000F03F' -- skewY (float64 1) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 3, 7, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000840' -- skewX (float64 3) || '0000000000001C40' -- skewY (float64 7) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- -- st_georeference (default) ----------------------------------------------------------------------- SELECT replace(st_georeference(rast)::text, E'\n', E'EOL'), replace(st_georeference(rast)::text, E'\n', E'EOL') = '2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL0.5000000000EOL0.5000000000EOL' FROM rt_properties_test WHERE id = 0; SELECT replace(st_georeference(rast)::text, E'\n', E'EOL'), replace(st_georeference(rast)::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL2.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 1; SELECT replace(st_georeference(rast)::text, E'\n', E'EOL'), replace(st_georeference(rast)::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 2; SELECT replace(st_georeference(rast)::text, E'\n', E'EOL'), replace(st_georeference(rast)::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 3; SELECT replace(st_georeference(rast)::text, E'\n', E'EOL'), replace(st_georeference(rast)::text, E'\n', E'EOL') = '5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 4; SELECT replace(st_georeference(rast)::text, E'\n', E'EOL'), replace(st_georeference(rast)::text, E'\n', E'EOL') = '5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 5; ----------------------------------------------------------------------- -- st_georeference (GDAL) ----------------------------------------------------------------------- SELECT replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = '2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL0.5000000000EOL0.5000000000EOL' FROM rt_properties_test WHERE id = 0; SELECT replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL2.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 1; SELECT replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 2; SELECT replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 3; SELECT replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = '5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 4; SELECT replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = '5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' FROM rt_properties_test WHERE id = 5; ----------------------------------------------------------------------- -- st_georeference (ESRI) ----------------------------------------------------------------------- SELECT replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = '2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL1.5000000000EOL2.0000000000EOL' FROM rt_properties_test WHERE id = 0; SELECT replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL5.0000000000EOL5.0000000000EOL' FROM rt_properties_test WHERE id = 1; SELECT replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' FROM rt_properties_test WHERE id = 2; SELECT replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' FROM rt_properties_test WHERE id = 3; SELECT replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = '5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' FROM rt_properties_test WHERE id = 4; SELECT replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = '5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' FROM rt_properties_test WHERE id = 5; ----------------------------------------------------------------------- -- st_setgeoreference (error conditions) ----------------------------------------------------------------------- SELECT -- all 6 parameters must be numeric st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 nodata') IS NULL FROM rt_properties_test WHERE id = 0; SELECT -- must have 6 parameters st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000') IS NULL FROM rt_properties_test WHERE id = 1; SELECT -- any whitespace accepted between parameters as well as ' ' st_setgeoreference(rast,E'2.0000000000 1.0000000000\n2.0000000000\t3.0000000000 1.5000000000 2.0000000000') IS NOT NULL FROM rt_properties_test WHERE id = 2; ----------------------------------------------------------------------- -- st_setgeoreference (warning conditions) ----------------------------------------------------------------------- SELECT -- raster arg is null st_setgeoreference(null,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000') IS NULL FROM rt_properties_test WHERE id = 0; ----------------------------------------------------------------------- -- st_setgeoreference (default) ----------------------------------------------------------------------- SELECT st_scalex(rast) = 2, st_scaley(rast) = 3, st_scalex(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000')) = 4, st_scaley(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000')) = 6 FROM rt_properties_test WHERE id = 0; SELECT st_skewx(rast) = 0, st_skewy(rast) = 0, st_skewx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 2, st_skewy(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 1 FROM rt_properties_test WHERE id = 1; SELECT st_upperleftx(rast) = 7.5, st_upperlefty(rast) = 2.5, st_upperleftx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 1.5, st_upperlefty(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 2.0 FROM rt_properties_test WHERE id = 2; ----------------------------------------------------------------------- -- st_setgeoreference (GDAL) ----------------------------------------------------------------------- SELECT st_scalex(rast) = 2, st_scaley(rast) = 3, st_scalex(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','GDAL')) = 4, st_scaley(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','GDAL')) = 6 FROM rt_properties_test WHERE id = 0; SELECT st_skewx(rast) = 0, st_skewy(rast) = 0, st_skewx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 2, st_skewy(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 1 FROM rt_properties_test WHERE id = 1; SELECT st_upperleftx(rast) = 7.5, st_upperlefty(rast) = 2.5, st_upperleftx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 1.5, st_upperlefty(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 2.0 FROM rt_properties_test WHERE id = 2; ----------------------------------------------------------------------- -- st_setgeoreference (ESRI) ----------------------------------------------------------------------- SELECT st_scalex(rast) = 2, st_scaley(rast) = 3, st_scalex(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','ESRI')) = 4, st_scaley(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','ESRI')) = 6 FROM rt_properties_test WHERE id = 0; SELECT st_skewx(rast) = 0, st_skewy(rast) = 0, st_skewx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','ESRI')) = 2, st_skewy(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','ESRI')) = 1 FROM rt_properties_test WHERE id = 1; SELECT st_upperleftx(rast) = 7.5, st_upperlefty(rast) = 2.5, st_upperleftx(st_setgeoreference(rast,'2.0000000000 0.0000000000 0.0000000000 3.0000000000 1.0000000000 2.5000000000','ESRI')) = 0, st_upperlefty(st_setgeoreference(rast,'2.0000000000 0.0000000000 0.0000000000 3.0000000000 1.0000000000 2.5000000000','ESRI')) = 1 FROM rt_properties_test WHERE id = 2; ----------------------------------------------------------------------- -- ST_SetGeoReference(raster, double precision, ...) ----------------------------------------------------------------------- SELECT id, ST_Metadata(rast), ST_Metadata(ST_SetGeoReference(rast, 0, 0, 1, -1, 0, 0)) FROM rt_properties_test ORDER BY id; SELECT id, ST_Metadata(rast), ST_Metadata(ST_SetGeoReference(rast, 1, 1, 0.1, -0.1, 0, 0)) FROM rt_properties_test ORDER BY id; SELECT id, ST_Metadata(rast), ST_Metadata(ST_SetGeoReference(rast, 0, 0.1, 1, 1, 0, 0)) FROM rt_properties_test ORDER BY id; DROP TABLE rt_properties_test; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_samealignment_expected�������������������������������0000644�0000000�0000000�00000000673�12055010074�024646� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t|The rasters are aligned f|The rasters have different scales on the X axis f|The rasters have different scales on the X axis f|The rasters have different skews on the X axis f|The rasters have different skews on the Y axis f|The rasters have different skews on the X axis t|The rasters are aligned f|The rasters (pixel corner coordinates) are not aligned t|The rasters are aligned f|The rasters have different skews on the Y axis t f f f f f ���������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_dumpvalues.sql���������������������������������������0000644�0000000�0000000�00000005062�12223163471�023130� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_dumpvalues; CREATE TABLE raster_dumpvalues ( rid integer, rast raster ); CREATE OR REPLACE FUNCTION make_raster( rast raster DEFAULT NULL, pixtype text DEFAULT '8BUI', rows integer DEFAULT 3, columns integer DEFAULT 3, nodataval double precision DEFAULT 0, start_val double precision DEFAULT 1, step double precision DEFAULT 1, skip_expr text DEFAULT NULL ) RETURNS raster AS $$ DECLARE x int; y int; value double precision; values double precision[][][]; result boolean; expr text; _rast raster; nband int; BEGIN IF rast IS NULL THEN nband := 1; _rast := ST_AddBand(ST_MakeEmptyRaster(columns, rows, 0, 0, 1, -1, 0, 0, 0), nband, pixtype, 0, nodataval); ELSE nband := ST_NumBands(rast) + 1; _rast := ST_AddBand(rast, nband, pixtype, 0, nodataval); END IF; value := start_val; values := array_fill(NULL::double precision, ARRAY[columns, rows]); FOR y IN 1..columns LOOP FOR x IN 1..rows LOOP IF skip_expr IS NULL OR length(skip_expr) < 1 THEN result := TRUE; ELSE expr := replace(skip_expr, '[v]'::text, value::text); EXECUTE 'SELECT (' || expr || ')::boolean' INTO result; END IF; IF result IS TRUE THEN values[y][x] := value; END IF; value := value + step; END LOOP; END LOOP; _rast := ST_SetValues(_rast, nband, 1, 1, values); RETURN _rast; END; $$ LANGUAGE 'plpgsql'; INSERT INTO raster_dumpvalues SELECT 1, make_raster(NULL, '8BSI', 3, 3, 0, 1) UNION ALL SELECT 2, make_raster(NULL, '8BSI', 3, 3, 0, -1) UNION ALL SELECT 3, make_raster(NULL, '8BSI', 3, 3, 0, 1) UNION ALL SELECT 4, make_raster(NULL, '8BSI', 3, 3, 0, -2) UNION ALL SELECT 5, make_raster(NULL, '8BSI', 3, 3, 0, 2) ; INSERT INTO raster_dumpvalues SELECT rid + 10, make_raster(rast, '16BSI', 3, 3, rid, (rid / 2)::integer) FROM raster_dumpvalues WHERE rid <= 10; INSERT INTO raster_dumpvalues SELECT rid + 10, make_raster(rast, '32BSI', 3, 3, rid, (rid / 2)::integer) FROM raster_dumpvalues WHERE rid BETWEEN 11 AND 20; DROP FUNCTION IF EXISTS make_raster(raster, text, integer, integer, double precision, double precision, double precision, text); SELECT rid, (ST_DumpValues(rast)).* FROM raster_dumpvalues ORDER BY rid; SELECT rid, (ST_DumpValues(rast, ARRAY[3,2,1])).* FROM raster_dumpvalues WHERE rid > 20 ORDER BY rid; DROP TABLE IF EXISTS raster_dumpvalues; -- ticket #2493 SELECT (ST_DumpValues(ST_AddBand(ST_MakeEmptyRaster(0, 0, 0, 0, 1), ARRAY[ROW(NULL, '8BUI', 255, 0),ROW(NULL, '16BUI', 1, 2)]::addbandarg[]))).* ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_asjpeg.sql�������������������������������������������0000644�0000000�0000000�00000003435�12245413746�022225� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_AsJPEG(NULL) IS NULL; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', 123, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 123, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', -123, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 254, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BUI', 1, 255 ) , 2, '8BUI', 11, 0 ) , 3, '8BUI', 111, 127 ) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), ARRAY['QUALITY=90','PROGRESSIVE=ON'] ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), ARRAY[3,1], 50 ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsJPEG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BUI', 111, -1 ), ARRAY[3], 10 ) ) > 0 THEN 1 ELSE 0 END; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_geos_relationships.sql�������������������������������0000644�0000000�0000000�00000013471�12040113104�024630� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- These tests are for raster functions that use GEOS spatial relationship functions SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_geos_rast; CREATE TABLE raster_geos_rast ( rid integer, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', 1, 0); INSERT INTO raster_geos_rast VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(0, 2, 2, -1, -1); SELECT make_test_raster(1, 2, 2); SELECT make_test_raster(2, 3, 3); SELECT make_test_raster(3, 2, 2, -1, -10); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision); INSERT INTO raster_geos_rast VALUES (10, ( SELECT ST_SetValue(rast, 1, 1, 1, 0) FROM raster_geos_rast WHERE rid = 1 )); INSERT INTO raster_geos_rast VALUES (11, ( SELECT ST_SetValue(rast, 1, 2, 1, 0) FROM raster_geos_rast WHERE rid = 1 )); INSERT INTO raster_geos_rast VALUES (12, ( SELECT ST_SetValue( ST_SetValue( ST_SetValue(rast, 1, 1, 1, 0), 1, 2, 1, 0 ), 1, 1, 2, 0 ) FROM raster_geos_rast WHERE rid = 1 )); INSERT INTO raster_geos_rast VALUES (13, ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue(rast, 1, 1, 1, 0), 1, 2, 1, 0 ), 1, 1, 2, 0 ), 1, 2, 2, 0 ) FROM raster_geos_rast WHERE rid = 1 )); INSERT INTO raster_geos_rast VALUES (14, ( SELECT ST_SetUpperLeft(rast, 2, 0) FROM raster_geos_rast WHERE rid = 1 )); INSERT INTO raster_geos_rast VALUES (15, ( SELECT ST_SetScale( ST_SetUpperLeft(rast, 0.1, 0.1), 0.4, 0.4 ) FROM raster_geos_rast WHERE rid = 1 )); INSERT INTO raster_geos_rast VALUES (16, ( SELECT ST_SetScale( ST_SetUpperLeft(rast, -0.1, 0.1), 0.4, 0.4 ) FROM raster_geos_rast WHERE rid = 1 )); INSERT INTO raster_geos_rast VALUES (20, ( SELECT ST_SetUpperLeft(rast, -2, -2) FROM raster_geos_rast WHERE rid = 2 )); INSERT INTO raster_geos_rast VALUES (21, ( SELECT ST_SetValue( ST_SetValue( ST_SetValue(rast, 1, 1, 1, 0), 1, 2, 2, 0 ), 1, 3, 3, 0 ) FROM raster_geos_rast WHERE rid = 20 )); INSERT INTO raster_geos_rast VALUES (22, ( SELECT ST_SetValue( ST_SetValue( rast, 1, 3, 2, 0 ), 1, 2, 3, 0 ) FROM raster_geos_rast WHERE rid = 21 )); INSERT INTO raster_geos_rast VALUES (23, ( SELECT ST_SetValue( ST_SetValue( rast, 1, 3, 1, 0 ), 1, 1, 3, 0 ) FROM raster_geos_rast WHERE rid = 22 )); INSERT INTO raster_geos_rast VALUES (30, ( SELECT ST_SetSkew(rast, -0.5, 0.5) FROM raster_geos_rast WHERE rid = 2 )); INSERT INTO raster_geos_rast VALUES (31, ( SELECT ST_SetSkew(rast, -1, 1) FROM raster_geos_rast WHERE rid = 2 )); INSERT INTO raster_geos_rast VALUES (32, ( SELECT ST_SetSkew(rast, 1, -1) FROM raster_geos_rast WHERE rid = 2 )); SELECT '1.1', r1.rid, r2.rid, ST_Contains(r1.rast, NULL, r2.rast, NULL), ST_ContainsProperly(r1.rast, NULL, r2.rast, NULL), ST_CoveredBy(r1.rast, NULL, r2.rast, NULL), ST_Covers(r1.rast, NULL, r2.rast, NULL), ST_Disjoint(r1.rast, NULL, r2.rast, NULL), ST_Overlaps(r1.rast, NULL, r2.rast, NULL), ST_Touches(r1.rast, NULL, r2.rast, NULL), ST_Within(r1.rast, NULL, r2.rast, NULL), ST_DWithin(r1.rast, NULL, r2.rast, NULL, 0), ST_DWithin(r1.rast, 1, r2.rast, 1, 0), ST_DWithin(r1.rast, 1, r2.rast, 1, 1), ST_DWithin(r1.rast, 1, r2.rast, 1, 2), ST_DWithin(r1.rast, 1, r2.rast, 1, 7), ST_DFullyWithin(r1.rast, NULL, r2.rast, NULL, 0), ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 0), ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 1), ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 2), ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 7) FROM raster_geos_rast r1 CROSS JOIN raster_geos_rast r2 WHERE r1.rid = 0; SELECT '1.2', r1.rid, r2.rid, ST_Contains(r1.rast, 1, r2.rast, 1), ST_ContainsProperly(r1.rast, 1, r2.rast, 1), ST_CoveredBy(r1.rast, 1, r2.rast, 1), ST_Covers(r1.rast, 1, r2.rast, 1), ST_Disjoint(r1.rast, 1, r2.rast, 1), ST_Overlaps(r1.rast, 1, r2.rast, 1), ST_Touches(r1.rast, 1, r2.rast, 1), ST_Within(r1.rast, 1, r2.rast, 1) FROM raster_geos_rast r1 JOIN raster_geos_rast r2 ON r1.rid != r2.rid WHERE r1.rid = 0; SELECT '1.3', r1.rid, r2.rid, ST_Contains(r1.rast, NULL, r2.rast, NULL), ST_ContainsProperly(r1.rast, NULL, r2.rast, NULL), ST_CoveredBy(r1.rast, NULL, r2.rast, NULL), ST_Covers(r1.rast, NULL, r2.rast, NULL), ST_Within(r1.rast, NULL, r2.rast, NULL) FROM raster_geos_rast r1 JOIN raster_geos_rast r2 ON r1.rid != r2.rid WHERE r2.rid = 0; SELECT '1.4', r1.rid, r2.rid, ST_Contains(r1.rast, 1, r2.rast, 1), ST_ContainsProperly(r1.rast, 1, r2.rast, 1), ST_CoveredBy(r1.rast, 1, r2.rast, 1), ST_Covers(r1.rast, 1, r2.rast, 1), ST_Within(r1.rast, 1, r2.rast, 1) FROM raster_geos_rast r1 JOIN raster_geos_rast r2 ON r1.rid != r2.rid WHERE r2.rid = 0; SELECT '2.1', r1.rid, r2.rid, NULL AS distance, ST_DWithin(r1.rast, NULL, r2.rast, NULL, NULL) FROM raster_geos_rast r1 CROSS JOIN raster_geos_rast r2 WHERE r1.rid = 0; SELECT '2.2', r1.rid, r2.rid, -1 AS distance, ST_DWithin(r1.rast, NULL, r2.rast, NULL, -1) FROM raster_geos_rast r1 CROSS JOIN raster_geos_rast r2 WHERE r1.rid = 0; SELECT '2.3', r1.rid, r2.rid, NULL AS distance, ST_DFullyWithin(r1.rast, NULL, r2.rast, NULL, NULL) FROM raster_geos_rast r1 CROSS JOIN raster_geos_rast r2 WHERE r1.rid = 0; SELECT '2.4', r1.rid, r2.rid, -1 AS distance, ST_DFullyWithin(r1.rast, NULL, r2.rast, NULL, -1) FROM raster_geos_rast r1 CROSS JOIN raster_geos_rast r2 WHERE r1.rid = 0; DROP TABLE IF EXISTS raster_geos_rast; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_summarystats_expected��������������������������������0000644�0000000�0000000�00000001306�12042354432�024575� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2|-6.858|-3.429|6.571|-10.000|3.142 100|-6.858|-0.069|1.046|-10.000|3.142 2 100 -3.429|6.571 -0.069|1.046 NOTICE: Invalid band index (must use 1-based). Returning NULL | NOTICE: All pixels of band have the NODATA value (0,,,,,) NOTICE: Band is empty as width and/or height is 0 (0,,,,,) BEGIN 20|-68.584|-3.429|6.571|-10.000|3.142 1000|-68.584|-0.069|1.046|-10.000|3.142 20|-68.584|-3.429|6.571|-10.000|3.142 20|-68.584|-3.429|6.571|-10.000|3.142 SAVEPOINT NOTICE: Invalid band index (must use 1-based). Returning NULL ||||| COMMIT RELEASE SAVEPOINT ERROR: relation "test1" does not exist at character 20 COMMIT RELEASE SAVEPOINT ERROR: column "rast1" does not exist at character 8 COMMIT RELEASE COMMIT ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_asraster_expected������������������������������������0000644�0000000�0000000�00000014032�12062705511�023645� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_asraster_geom" does not exist, skipping NOTICE: table "raster_asraster_rast" does not exist, skipping NOTICE: table "raster_asraster_dst" does not exist, skipping NOTICE: Imbalanced number of values provided for pixeltype (1), value (1) and nodataval (0). Using the first 0 values of each parameter NOTICE: Values must be provided for both X and Y when specifying the upper-left corner NOTICE: The geometry's SRID (993310) is not the same as the raster's SRID (992163). The geometry will be transformed to the raster's projection NOTICE: The geometry's SRID (993310) is not the same as the raster's SRID (992163). The geometry will be transformed to the raster's projection NOTICE: The geometry's SRID (993310) is not the same as the raster's SRID (992163). The geometry will be transformed to the raster's projection NOTICE: The geometry's SRID (993310) is not the same as the raster's SRID (992163). The geometry will be transformed to the raster's projection NOTICE: The geometry's SRID (993310) is not the same as the raster's SRID (992163). The geometry will be transformed to the raster's projection NOTICE: The geometry's SRID (993310) is not the same as the raster's SRID (992163). The geometry will be transformed to the raster's projection NOTICE: The geometry's SRID (993310) is not the same as the raster's SRID (992163). The geometry will be transformed to the raster's projection NOTICE: The rasters have different scales on the X axis NOTICE: The rasters have different scales on the X axis NOTICE: The rasters have different scales on the X axis NOTICE: The rasters have different scales on the X axis 1.0|||||||||||||||| 1.1|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|1.000|1.000| 1.10|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|32BF|0.000|t|1.000|1.000| 1.11|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|8BSI|0.000|t|1.000|1.000| 1.12|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|16BUI|0.000|t|1.000|1.000| 1.13|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|32BF|0.000|t|255.000|255.000| 1.14|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|32BF|1.000|t|255.000|255.000| 1.15|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|1.000|1.000| 1.16|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|32BF||t|0.000|255.000| 1.17|993310|141|87|2|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|32BF||t|0.000|255.000| 1.18|993310|10|10|2|14065.366|-8691.142|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|255.000|255.000| 1.19|993310|141|87|3|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|32BF||t|0.000|255.000| 1.2|993310|1407|869|1|100.000|-100.000|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|1.000|1.000| 1.20|993310|141|87|2|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|1BB|1.000|f||| 1.3|993310|500|500|1|281.307|-173.823|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|1.000|1.000| 1.4|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|1.000|1.000| 1.5|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|8BSI|0.000|t|1.000|1.000| 1.6|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|16BUI|0.000|t|1.000|1.000| 1.7|993310|1407|869|1|100.000|-100.000|0.000|0.000|-175453.086|114987.661|32BF|0.000|t|1.000|1.000| 1.8|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|8BSI|0.000|t|1.000|1.000| 1.9|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-175453.086|114987.661|16BUI|0.000|t|1.000|1.000| 2.0|||||||||||||||| 2.1|||||||||||||||| 2.2|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-175400.000|115000.000|8BUI|0.000|t|255.000|255.000| 2.3|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-170000.000|114988.000|8BUI|0.000|t|255.000|255.000| 2.4|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-170000.000|110000.000|8BUI|0.000|t|255.000|255.000| 2.5|993310|141|87|1|1000.000|-1000.000|0.000|0.000|-179000.000|119000.000|8BUI|0.000|t|255.000|255.000| 2.6|993310|100|100|1|1406.537|-869.114|0.000|0.000|-179000.000|119000.000|8BUI|0.000|t|255.000|255.000| 2.7|993310|100|100|1|1406.537|-869.114|0.000|0.000|-179000.000|119000.000|8BUI|0.000|t|255.000|255.000| 3.0|||||||||||||||| 3.1|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|255.000|255.000| 3.2|993310|100|100|1|1406.537|-869.114|0.000|0.000|-175453.086|114987.661|8BUI|0.000|t|255.000|255.000| 3.3|993310|100|100|1|1406.537|-869.114|1.000|0.000|-175565.609|114987.661|8BUI|0.000|t|255.000|255.000| 3.4|993310|100|100|1|1406.537|-869.114|0.000|1.000|-175453.086|114987.661|8BUI|0.000|t|255.000|255.000| 3.5|993310|101|101|1|1406.537|-869.114|10.000|-5.000|-176465.793|115491.747|8BUI|0.000|t|255.000|255.000| 3.6|993310|100|101|1|1406.537|-869.114|-5.000|10.000|-175453.086|114987.661|8BUI|0.000|t|255.000|255.000| 4.0|||||||||||||||| 4.1|992163|150|117|1|1000.000|-1000.000|0.000|0.000|-1898000.000|-412000.000|8BUI|0.000|t|1.000|1.000|t 4.10|993310|142|88|1|1000.000|-1000.000|0.000|0.000|-176100.000|115100.000|16BUI|0.000|t|13.000|13.000|f 4.11|993310|142|88|1|1000.000|-1000.000|0.000|0.000|-176100.000|115100.000|16BUI|0.000|t|13.000|13.000|f 4.2|992163|150|117|1|1000.000|-1000.000|0.000|0.000|-1898000.000|-412000.000|64BF|0.000|t|1.000|1.000|t 4.3|992163|150|117|1|1000.000|-1000.000|0.000|0.000|-1898000.000|-412000.000|16BUI|0.000|t|13.000|13.000|t 4.4|992163|150|117|1|1000.000|-1000.000|0.000|0.000|-1898000.000|-412000.000|16BUI||t|0.000|13.000|t 4.5|992163|150|117|1|1000.000|-1000.000|0.000|0.000|-1898000.000|-412000.000|16BUI|0.000|t|13.000|13.000|t 4.6|992163|150|117|1|1000.000|-1000.000|0.000|0.000|-1898000.000|-412000.000|16BUI||t|0.000|13.000|t 4.7|992163|150|117|1|1000.000|-1000.000|0.000|0.000|-1898000.000|-412000.000|16BUI|0.000|t|13.000|13.000|t 4.8|993310|142|88|1|1000.000|-1000.000|0.000|0.000|-176000.000|115000.000|16BUI|0.000|t|13.000|13.000|f 4.9|993310|142|88|1|1000.000|-1000.000|0.000|0.000|-176453.000|115987.000|16BUI|0.000|t|13.000|13.000|f ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_valuecount.sql���������������������������������������0000644�0000000�0000000�00000013625�11774707474�023155� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, ARRAY[]::double precision[], 0); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, NULL ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, ARRAY[]::double precision[], 0); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, NULL::double precision[], 0); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, FALSE, NULL::double precision[], 0); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, NULL::double precision[], 0.1); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, ARRAY[3.1], 0.1); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, ARRAY[-10]); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , ARRAY[-10], 0); SELECT round(value::numeric, 3), count FROM ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , ARRAY[-10, 3]); SELECT ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, 3.14, 0.19); SELECT ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, FALSE, 3.14, 0.01); SELECT ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, -10, 0.1); SELECT ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, -10); SELECT ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , -10., 10); SELECT ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 3.14159); SELECT ST_ValueCount( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 2); BEGIN; CREATE TEMP TABLE test ON COMMIT DROP AS SELECT rast.rast FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) AS rast ) AS rast FULL JOIN ( SELECT generate_series(1, 10) AS id ) AS id ON 1 = 1; SELECT round(value::numeric, 3), count FROM ST_ValueCount('test', 'rast', 1, FALSE, NULL::double precision[], 0); SELECT round(value::numeric, 3), count FROM ST_ValueCount('test', 'rast', 1, ARRAY[-10]::double precision[], 0); SELECT round(value::numeric, 3), count FROM ST_ValueCount('test', 'rast', 1, ARRAY[1]::double precision[]); SELECT round(value::numeric, 3), count FROM ST_ValueCount('test', 'rast', NULL::double precision[], 0.1); SELECT round(value::numeric, 3), count FROM ST_ValueCount('test', 'rast', ARRAY[-1, 3.1]::double precision[], 0.1); SELECT ST_ValueCount('test', 'rast', 1, TRUE, NULL::double precision, 0); SELECT ST_ValueCount('test', 'rast', 1, 3.14, 1); SELECT ST_ValueCount('test', 'rast', 1, -1); SELECT ST_ValueCount('test', 'rast', 3.1, 0.1); SELECT ST_ValueCount('test', 'rast', -9.); SAVEPOINT test; SELECT ST_ValueCount('test', 'rast', 2); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT ST_ValueCount('test1', 'rast', 2); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT ST_ValueCount('test', 'rast1', 2); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; ROLLBACK; �����������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_intersection_expected��������������������������������0000644�0000000�0000000�00000016176�12210402370�024532� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|2|8BUI|0.000|1.000|1.000 0|2|1.000|-1.000|1|2|1.000|1.000|0.000|0.000|0|2|8BUI|0.000|1.000|1.000 0|3|1.000|1.000|1|1|1.000|1.000|0.000|0.000|0|2|8BUI|0.000|1.000|1.000 0|4|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10|11|-0.900|-0.900|3|3|1.000|1.000|0.100|0.100|0|2|8BUI|0.000|1.000|1.000 10|12|-1.900|-1.000|2|2|1.000|1.000|0.100|0.100|0|2|8BUI|0.000|1.000|1.000 10|13|0.000|-1.800|2|2|1.000|1.000|0.100|0.100|0|2|8BUI|0.000|1.000|1.000 10|14|||||||||||||| 0|1|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|8BUI|0.000|1.000|1.000 0|2|1.000|-1.000|1|2|1.000|1.000|0.000|0.000|0|1|8BUI|0.000|1.000|1.000 0|3|1.000|1.000|1|1|1.000|1.000|0.000|0.000|0|1|8BUI|0.000|1.000|1.000 0|4|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10|11|-0.900|-0.900|3|3|1.000|1.000|0.100|0.100|0|1|8BUI|0.000|1.000|1.000 10|12|-1.900|-1.000|2|2|1.000|1.000|0.100|0.100|0|1|8BUI|0.000|1.000|1.000 10|13|0.000|-1.800|2|2|1.000|1.000|0.100|0.100|0|1|8BUI|0.000|1.000|1.000 10|14|||||||||||||| 0|1|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|8BUI|0.000|2.000|2.000 0|2|1.000|-1.000|1|2|1.000|1.000|0.000|0.000|0|1|8BUI|0.000|3.000|3.000 0|3|1.000|1.000|1|1|1.000|1.000|0.000|0.000|0|1|8BUI|0.000|4.000|4.000 0|4|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10|11|-0.900|-0.900|3|3|1.000|1.000|0.100|0.100|0|1|8BUI|0.000|2.000|2.000 10|12|-1.900|-1.000|2|2|1.000|1.000|0.100|0.100|0|1|8BUI|0.000|3.000|3.000 10|13|0.000|-1.800|2|2|1.000|1.000|0.100|0.100|0|1|8BUI|0.000|4.000|4.000 10|14|||||||||||||| 0|1|1|1|1|1|POLYGON((0 0,1 0,1 1,0 1,0 0)) 0|1|1|1|1|1|POLYGON((0 0,1 0,1 1,0 1,0 0)) 0|1|1|1|1|2|POLYGON((0 0,1 0,1 1,0 1,0 0)) 0|1|1|1|2|1|POLYGON((0 1,1 1,1 2,0 2,0 1)) 0|1|1|1|2|1|POLYGON((0 1,1 1,1 2,0 2,0 1)) 0|1|1|1|2|2|POLYGON((0 1,1 1,1 2,0 2,0 1)) 0|1|1|2|1|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|1|1|2|1|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|1|1|2|1|2|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|1|1|2|2|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|1|1|2|2|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|1|1|2|2|2|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|1|2|1|1|2|POLYGON((0 0,1 0,1 1,0 1,0 0)) 0|1|2|1|2|2|POLYGON((0 1,1 1,1 2,0 2,0 1)) 0|1|2|2|1|2|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|1|2|2|2|2|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|2|1|1|1|1|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) 0|2|1|1|1|1|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) 0|2|1|1|1|3|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) 0|2|1|1|2|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|2|1|1|2|1|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|2|1|1|2|3|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|2|2|1|1|3|POLYGON((1 -1,2 -1,2 0,1 0,1 -1)) 0|2|2|1|2|3|POLYGON((1 0,2 0,2 1,1 1,1 0)) 0|3|1|1|1|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|3|1|1|1|1|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|3|1|1|1|4|POLYGON((1 1,2 1,2 2,1 2,1 1)) 0|3|2|1|1|4|POLYGON((1 1,2 1,2 2,1 2,1 1)) 10|11|1|1|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|11|1|1|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|11|1|1|1|2|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|11|1|1|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|11|1|1|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|11|1|1|2|2|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|11|1|1|3|1|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|1|1|3|1|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|1|1|3|2|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|1|2|1|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|11|1|2|1|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|11|1|2|1|2|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|11|1|2|2|1|POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) 10|11|1|2|2|1|POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) 10|11|1|2|2|2|POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) 10|11|1|2|3|1|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) 10|11|1|2|3|1|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) 10|11|1|2|3|2|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) 10|11|1|3|1|1|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|11|1|3|1|1|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|11|1|3|1|2|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|11|1|3|2|1|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) 10|11|1|3|2|1|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) 10|11|1|3|2|2|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) 10|11|1|3|3|1|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) 10|11|1|3|3|1|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) 10|11|1|3|3|2|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) 10|11|2|1|1|2|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|11|2|1|2|2|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|11|2|1|3|2|POLYGON((-0.7 1.1,0.3 1.2,0.4 2.2,-0.6 2.1,-0.7 1.1)) 10|11|2|2|1|2|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|11|2|2|2|2|POLYGON((0.2 0.2,1.2 0.3,1.3 1.3,0.3 1.2,0.2 0.2)) 10|11|2|2|3|2|POLYGON((0.3 1.2,1.3 1.3,1.4 2.3,0.4 2.2,0.3 1.2)) 10|11|2|3|1|2|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|11|2|3|2|2|POLYGON((1.2 0.3,2.2 0.4,2.3 1.4,1.3 1.3,1.2 0.3)) 10|11|2|3|3|2|POLYGON((1.3 1.3,2.3 1.4,2.4 2.4,1.4 2.3,1.3 1.3)) 10|12|1|1|1|1|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) 10|12|1|1|1|1|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) 10|12|1|1|1|3|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) 10|12|1|1|2|1|POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) 10|12|1|1|2|1|POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) 10|12|1|1|2|3|POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) 10|12|1|2|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|12|1|2|1|1|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|12|1|2|1|3|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|12|1|2|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|12|1|2|2|1|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|12|1|2|2|3|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|12|2|1|1|3|POLYGON((-1.9 -1,-0.9 -0.9,-0.8 0.1,-1.8 0,-1.9 -1)) 10|12|2|1|2|3|POLYGON((-1.8 0,-0.8 0.1,-0.7 1.1,-1.7 1,-1.8 0)) 10|12|2|2|1|3|POLYGON((-0.9 -0.9,0.1 -0.8,0.2 0.2,-0.8 0.1,-0.9 -0.9)) 10|12|2|2|2|3|POLYGON((-0.8 0.1,0.2 0.2,0.3 1.2,-0.7 1.1,-0.8 0.1)) 10|13|1|1|1|1|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) 10|13|1|1|1|1|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) 10|13|1|1|1|4|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) 10|13|1|1|2|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|13|1|1|2|1|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|13|1|1|2|4|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|13|1|2|1|1|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) 10|13|1|2|1|1|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) 10|13|1|2|1|4|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) 10|13|1|2|2|1|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|13|1|2|2|1|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|13|1|2|2|4|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) 10|13|2|1|1|4|POLYGON((0 -1.8,1 -1.7,1.1 -0.7,0.1 -0.8,0 -1.8)) 10|13|2|1|2|4|POLYGON((0.1 -0.8,1.1 -0.7,1.2 0.3,0.2 0.2,0.1 -0.8)) 10|13|2|2|1|4|POLYGON((1 -1.7,2 -1.6,2.1 -0.6,1.1 -0.7,1 -1.7)) 10|13|2|2|2|4|POLYGON((1.1 -0.7,2.1 -0.6,2.2 0.4,1.2 0.3,1.1 -0.7)) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_utility_expected�������������������������������������0000644�0000000�0000000�00000007042�12136511614�023530� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster test 2.4|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156 test 2.4|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000 ERROR: Raster and geometry do not have the same SRID ERROR: Raster and geometry do not have the same SRID ERROR: Raster and geometry do not have the same SRID NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster test 5.4|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156 test 5.4|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000 ERROR: Raster and geometry do not have the same SRID ERROR: Raster and geometry do not have the same SRID ERROR: Raster and geometry do not have the same SRID NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster test 8.3|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156 test 8.3|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000 NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster test 10.3|2|1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156 test 10.3|4|6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000 test 11.1|t test 11.2|t test 11.3|t test 11.4|t test 11.5|t test 11.6|t test 11.7|t test 11.8|t test 11.9|t test 11.10|t test 11.11|t Raster of 10x10 pixels has 3 bands and extent of BOX(0 -10,10 0) band 1 of pixtype 8BUI is in-db with NODATA value of 0 band 2 of pixtype 32BF is in-db with NODATA value of -9999 band 3 of pixtype 16BSI is in-db with no NODATA value Skewed raster of 10x10 pixels has 1 band and extent of BOX(0 -10,10 0.0001) band 1 of pixtype 8BUI is in-db with NODATA value of 0 1|Raster of 90x90 pixels has 3 bands and extent of BOX(0 -90,90 0) band 1 of pixtype 8BUI is out-db with no NODATA value band 2 of pixtype 8BUI is out-db with no NODATA value band 3 of pixtype 8BUI is out-db with no NODATA value 2|Raster of 90x90 pixels has 3 bands and extent of BOX(0 -90,90 0) band 1 of pixtype 8BUI is out-db with no NODATA value band 2 of pixtype 8BUI is out-db with no NODATA value band 3 of pixtype 8BUI is out-db with no NODATA value 3|Raster of 90x90 pixels has 2 bands and extent of BOX(0 -90,90 0) band 1 of pixtype 8BUI is in-db with NODATA value of 0 band 2 of pixtype 8BUI is out-db with no NODATA value 4|Raster of 90x90 pixels has 2 bands and extent of BOX(0 -90,90 0) band 1 of pixtype 8BUI is out-db with NODATA value of 255 band 2 of pixtype 8BUI is in-db with NODATA value of 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_setvalues_array_expected�����������������������������0000644�0000000�0000000�00000004171�12210402370�025225� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|1|1|10 1|1|2|1 1|1|3|1 1|2|1|1 1|2|2|1 1|2|3|1 1|3|1|1 1|3|2|1 1|3|3|1 1|4|1|1 1|4|2|1 1|4|3|1 1|5|1|1 1|5|2|1 1|5|3|1 2|1|1|1 2|1|2|1 2|1|3|1 2|2|1|10 2|2|2|1 2|2|3|1 2|3|1|1 2|3|2|1 2|3|3|1 2|4|1|1 2|4|2|1 2|4|3|1 2|5|1|1 2|5|2|1 2|5|3|1 3|1|1|1 3|1|2|1 3|1|3|1 3|2|1|1 3|2|2|1 3|2|3|1 3|3|1|10 3|3|2|1 3|3|3|1 3|4|1|1 3|4|2|1 3|4|3|1 3|5|1|1 3|5|2|1 3|5|3|1 4|1|1|10 4|1|2|1 4|1|3|1 4|2|1|10 4|2|2|1 4|2|3|1 4|3|1|1 4|3|2|1 4|3|3|1 4|4|1|1 4|4|2|1 4|4|3|1 4|5|1|1 4|5|2|1 4|5|3|1 5|1|1|1 5|1|2|1 5|1|3|1 5|2|1|1 5|2|2|10 5|2|3|1 5|3|1|1 5|3|2|10 5|3|3|1 5|4|1|1 5|4|2|1 5|4|3|1 5|5|1|1 5|5|2|1 5|5|3|1 6|1|1|1 6|1|2|1 6|1|3|1 6|2|1|1 6|2|2|1 6|2|3|1 6|3|1|1 6|3|2|1 6|3|3|10 6|4|1|1 6|4|2|1 6|4|3|10 6|5|1|1 6|5|2|1 6|5|3|10 7|1|1|1 7|1|2|1 7|1|3|1 7|2|1|1 7|2|2|1 7|2|3|1 7|3|1|1 7|3|2|1 7|3|3|1 7|4|1|1 7|4|2|1 7|4|3|10 7|5|1|1 7|5|2|1 7|5|3|10 8|1|1|1 8|1|2|1 8|1|3|1 8|2|1|5 8|2|2|6 8|2|3|1 8|3|1|5 8|3|2|6 8|3|3|1 8|4|1|5 8|4|2|6 8|4|3|1 8|5|1|5 8|5|2|6 8|5|3|1 9|1|1|1 9|1|2|1 9|1|3|1 9|2|1|5 9|2|2|6 9|2|3|7 9|3|1|5 9|3|2|6 9|3|3|7 9|4|1|5 9|4|2|6 9|4|3|7 9|5|1|5 9|5|2|6 10|1|1|1 10|1|2|1 10|1|3|1 10|2|1|5 10|2|2|6 10|2|3|7 10|3|1|5 10|3|2|6 10|3|3|7 10|4|1|5 10|4|2|6 10|4|3|7 10|5|1|5 10|5|2|6 11|1|1|10 11|1|2|1 11|1|3|1 11|2|1|1 11|2|2|1 11|2|3|1 11|3|1|10 11|3|2|1 11|3|3|1 11|4|1|1 11|4|2|1 11|4|3|1 11|5|1|1 11|5|2|1 11|5|3|1 12|1|2|1 12|1|3|1 12|2|1|10 12|2|2|1 12|2|3|1 12|3|2|1 12|3|3|1 12|4|1|1 12|4|2|1 12|4|3|1 12|5|1|1 12|5|2|1 12|5|3|1 13|1|2|1 13|1|3|1 13|2|1|10 13|2|2|1 13|2|3|1 13|3|1|1 13|3|2|1 13|3|3|1 13|4|1|1 13|4|2|1 13|4|3|1 13|5|1|1 13|5|2|1 13|5|3|1 21|1|1|100 21|1|2|100 21|1|3|100 21|2|1|100 21|2|2|100 21|2|3|100 21|3|1|100 21|3|2|100 21|3|3|100 21|4|1|100 21|4|2|100 21|4|3|100 21|5|1|100 21|5|2|100 21|5|3|100 31|1|1|1 31|1|2|1 31|1|3|1 31|2|1|31 31|2|2|1 31|2|3|1 31|3|1|1 31|3|2|1 31|3|3|1 31|4|1|1 31|4|2|1 31|4|3|1 31|5|1|1 31|5|2|1 31|5|3|1 32|1|1|1 32|1|2|32 32|1|3|1 32|2|1|32 32|2|2|1 32|2|3|1 32|3|1|1 32|3|2|32 32|3|3|1 32|4|1|1 32|4|2|1 32|4|3|1 32|5|1|1 32|5|2|1 32|5|3|1 33|1|1|1 33|1|2|33 33|1|3|1 33|2|1|33 33|2|2|1 33|2|3|1 33|3|1|1 33|3|2|33 33|3|3|1 33|4|1|1 33|4|2|1 33|4|3|1 33|5|1|1 33|5|2|1 33|5|3|1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_metadata.sql�����������������������������������������0000644�0000000�0000000�00000000227�11722777314�022533� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT * FROM ST_MetaData(NULL); SELECT * FROM ST_MetaData( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0) , 1, '64BF', 0, 0 ) ); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_georeference_expected��������������������������������0000644�0000000�0000000�00000005474�12133313450�024460� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL0.5000000000EOL0.5000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL2.5000000000EOL2.5000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL0.5000000000EOL0.5000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL2.5000000000EOL2.5000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL|t 2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL1.5000000000EOL2.0000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL5.0000000000EOL5.0000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL|t 5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL|t 5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL|t 5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL|t ERROR: st_setgeoreference requires a string with 6 floating point values. ERROR: st_setgeoreference requires a string with 6 floating point values. t t t|t|t|t t|t|t|t t|t|t|t t|t|t|t t|t|t|t t|t|t|t t|t|t|t t|t|t|t t|t|t|t 0|(0.5,0.5,10,20,2,3,0,0,10,0)|(0,0,10,20,1,-1,0,0,10,0) 1|(2.5,2.5,1,1,5,5,0,0,12,0)|(0,0,1,1,1,-1,0,0,12,0) 2|(7.5,2.5,1,1,5,5,0,0,0,0)|(0,0,1,1,1,-1,0,0,0,0) 3|(7.5,2.5,1,1,5,5,0,0,0,0)|(0,0,1,1,1,-1,0,0,0,0) 4|(7.5,2.5,1,1,5,5,1,1,0,0)|(0,0,1,1,1,-1,0,0,0,0) 5|(7.5,2.5,1,1,5,5,3,7,0,0)|(0,0,1,1,1,-1,0,0,0,0) 0|(0.5,0.5,10,20,2,3,0,0,10,0)|(1,1,10,20,0.1,-0.1,0,0,10,0) 1|(2.5,2.5,1,1,5,5,0,0,12,0)|(1,1,1,1,0.1,-0.1,0,0,12,0) 2|(7.5,2.5,1,1,5,5,0,0,0,0)|(1,1,1,1,0.1,-0.1,0,0,0,0) 3|(7.5,2.5,1,1,5,5,0,0,0,0)|(1,1,1,1,0.1,-0.1,0,0,0,0) 4|(7.5,2.5,1,1,5,5,1,1,0,0)|(1,1,1,1,0.1,-0.1,0,0,0,0) 5|(7.5,2.5,1,1,5,5,3,7,0,0)|(1,1,1,1,0.1,-0.1,0,0,0,0) 0|(0.5,0.5,10,20,2,3,0,0,10,0)|(0,0.1,10,20,1,1,0,0,10,0) 1|(2.5,2.5,1,1,5,5,0,0,12,0)|(0,0.1,1,1,1,1,0,0,12,0) 2|(7.5,2.5,1,1,5,5,0,0,0,0)|(0,0.1,1,1,1,1,0,0,0,0) 3|(7.5,2.5,1,1,5,5,0,0,0,0)|(0,0.1,1,1,1,1,0,0,0,0) 4|(7.5,2.5,1,1,5,5,1,1,0,0)|(0,0.1,1,1,1,1,0,0,0,0) 5|(7.5,2.5,1,1,5,5,3,7,0,0)|(0,0.1,1,1,1,1,0,0,0,0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_gist_relationships_expected��������������������������0000644�0000000�0000000�00000003433�12040113115�025723� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������raster_above(X, query(1,1))|30|0|9|7|9|BOX(-100 40,100 100) X |>> query(1,1)|30|0|9|7|9|BOX(-100 40,100 100) raster_below(X, query(1,1))|30|0|9|0|2|BOX(-100 -100,100 -40) X <<| query(1,1)|30|0|9|0|2|BOX(-100 -100,100 -40) raster_contained(X, query(1,1))|4|4|5|4|5|BOX(-20 -20,20 20) X @ query(1,1)|4|4|5|4|5|BOX(-20 -20,20 20) raster_contain(query(1,1), X)|4|4|5|4|5|BOX(-20 -20,20 20) raster_geometry_contain(query(1,1), X)|4|4|5|4|5|BOX(-20 -20,20 20) geometry_raster_contain(query(1,1), X)|4|4|5|4|5|BOX(-20 -20,20 20) query(1,1) ~ X|4|4|5|4|5|BOX(-20 -20,20 20) query(1,1) ~ X|4|4|5|4|5|BOX(-20 -20,20 20) query(1,1) ~ X|4|4|5|4|5|BOX(-20 -20,20 20) raster_left(X, query(1,1))|30|0|2|0|9|BOX(-100 -100,-40 100) X << query(1,1)|30|0|2|0|9|BOX(-100 -100,-40 100) raster_overabove(X, query(1,1))|60|0|9|4|9|BOX(-100 -20,100 100) X |&> query(1,1)|60|0|9|4|9|BOX(-100 -20,100 100) raster_overbelow(X, query(1,1))|60|0|9|0|5|BOX(-100 -100,100 20) X &<| query(1,1)|60|0|9|0|5|BOX(-100 -100,100 20) raster_overlap(X, query(1,1))|16|3|6|3|6|BOX(-40 -40,40 40) raster_geometry_overlap(X, query(1,1))|16|3|6|3|6|BOX(-40 -40,40 40) geometry_raster_overlap(X, query(1,1))|16|3|6|3|6|BOX(-40 -40,40 40) X && query(1,1)|16|3|6|3|6|BOX(-40 -40,40 40) X && query(1,1)|16|3|6|3|6|BOX(-40 -40,40 40) X && query(1,1)|16|3|6|3|6|BOX(-40 -40,40 40) raster_overleft(X, query(1,1))|60|0|5|0|9|BOX(-100 -100,20 100) X &< query(1,1)|60|0|5|0|9|BOX(-100 -100,20 100) raster_overright(X, query(1,1))|60|4|9|0|9|BOX(-20 -100,100 100) X &> query(1,1)|60|4|9|0|9|BOX(-20 -100,100 100) raster_right(X, query(1,1))|30|7|9|0|9|BOX(40 -100,100 100) X >> query(1,1)|30|7|9|0|9|BOX(40 -100,100 100) raster_same(X, query(1,1))|0||||| raster_same(X, query(7,7))|1|7|7|7|7|BOX(40 40,60 60) X ~= query(1,1)|0||||| X ~= tile(7,7)|1|7|7|7|7|BOX(40 40,60 60) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_colormap.sql�����������������������������������������0000644�0000000�0000000�00000004761�12143035247�022564� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_colormap_out; CREATE TABLE raster_colormap_out ( testid integer, rid integer, rast raster ); DROP TABLE IF EXISTS raster_colormap_in; CREATE TABLE raster_colormap_in ( rid integer, rast raster ); INSERT INTO raster_colormap_in SELECT 1 AS rid, ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0 ), 1, 1, 1, ARRAY[ [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47, 48, 49], [50, 51, 52, 53, 54, 55, 56, 57, 58, 59], [60, 61, 62, 63, 64, 65, 66, 67, 68, 69], [70, 71, 72, 73, 74, 75, 76, 77, 78, 79], [80, 81, 82, 83, 84, 85, 86, 87, 88, 89], [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] ]::double precision[] ) AS rast UNION ALL SELECT 2 AS rid, ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0 ), 1, 1, 1, ARRAY[ [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ]::double precision[] ) AS rast ; INSERT INTO raster_colormap_out SELECT 1 AS testid, rid, _ST_ColorMap( rast, 1, ' 100% 255:255 255 256 0% 0 0 0 255 nv 0 0 0 0 ' ) AS rast FROM raster_colormap_in UNION ALL SELECT 2 AS testid, rid, _ST_ColorMap( rast, 1, ' 100% 255:255 255 256 75% 127 255 255 255 50% 127, 0,127 255 25% 0 127 0 255 0% 0 0 0 255 nv 0 0 0 0 ' ) AS rast FROM raster_colormap_in UNION ALL SELECT 3 AS testid, rid, _ST_ColorMap( rast, 1, ' 0% 1 127 0 255 ' ) AS rast FROM raster_colormap_in UNION ALL SELECT 4 AS testid, rid, _ST_ColorMap( rast, 1, ' 9 0 0 255 5 0 255 0 4 0 255 0 0 255 0 0 ' ) AS rast FROM raster_colormap_in WHERE rid = 2 UNION ALL SELECT 5 AS testid, rid, ST_ColorMap( rast, 1, 'grayscale' ) AS rast FROM raster_colormap_in WHERE rid = 2 ; SELECT testid rid, (ST_DumpValues(rast)).* FROM raster_colormap_out ORDER BY 1, 2; DROP TABLE IF EXISTS raster_colormap_in; DROP TABLE IF EXISTS raster_colormap_out; ���������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebra_expr.sql����������������������������������0000644�0000000�0000000�00000032741�12037335706�024105� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; CREATE OR REPLACE FUNCTION ST_TestRaster(ulx float8, uly float8, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(10, 10, ulx, uly, 1, 1, 0, 0, 0), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION raster_plus_twenty(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN IF pixel IS NULL THEN RAISE NOTICE 'Pixel value is null.'; END IF; RETURN pixel + 20; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_plus_arg1(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_polynomial(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE m float := 1; b float := 0; BEGIN IF NOT args[1] is NULL THEN m := args[1]::float; END IF; IF NOT args[2] is NULL THEN b := args[2]::float; END IF; RETURN m * pixel + b; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_nullage(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_x_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + pos[1] + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_y_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + pos[2] + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Test NULL raster SELECT ST_MapAlgebra(NULL, 1, NULL, '[rast] + 20', 2) IS NULL FROM ST_TestRaster(0, 0, -1) rast; -- Test empty raster SELECT 'T1', ST_IsEmpty(ST_MapAlgebra(ST_MakeEmptyRaster(0, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, '[rast] + 20', 2)); -- Test hasnoband raster SELECT 'T2', ST_HasNoBand(ST_MapAlgebra(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, '[rast] + 20', 2)); -- Test hasnodata value SELECT 'T3', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(ST_SetBandNoDataValue(rast, NULL), 1, NULL, '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test nodata value SELECT 'T4', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, NULL, '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test 'rast' expression SELECT 'T5', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, NULL, '[rast]', 2), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; SELECT 'T6', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(ST_SetBandNoDataValue(rast, NULL), 1, NULL, '[rast]'), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test pixeltype SELECT 'T7', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, '4BUI', '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, 100) rast; SELECT 'T8', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, '4BUId', '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, 100) rast; SELECT 'T9', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, '2BUI', '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, 101) rast; -- Test '[rast.x]', '[rast.y]' and '[rast.val]' substitutions expression SELECT 'T10.'||x||'.'||y, ST_Value(rast, x, y), ST_Value(ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])'), x, y) FROM ST_TestRaster(0, 0, 10) rast, generate_series(6, 8) as x, generate_series(2, 4) as y ORDER BY x, y; -- Test divide by zero; blows up the whole query, not just the SPI SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, NULL, '[rast]/0'), 1, 1) FROM ST_TestRaster(0, 0, 10) rast; -- Test evaluations to null (see #1523) WITH op AS ( select rast AS rin, ST_MapAlgebra(rast, 1, NULL, 'SELECT g from (SELECT NULL::double precision as g) as foo', 2) AS rout FROM ST_TestRaster(0, 0, 10) rast ) SELECT 'T11.1', ST_Value(rin, 1, 1), ST_Value(rout, 1, 1) FROM op; WITH op AS ( select rast AS rin, ST_MapAlgebra(rast, 1, NULL, 'SELECT g from (select [rast],NULL::double precision as g) as foo', 2) AS rout FROM ST_TestRaster(0, 0, 10) rast ) SELECT 'T11.2', ST_Value(rin, 1, 1), ST_Value(rout, 1, 1) FROM op; -- Test pracine's new bug #1638 SELECT 'T12', ST_Value(rast, 1, 2) = 1, ST_Value(rast, 2, 1) = 2, ST_Value(rast, 4, 3) = 4, ST_Value(rast, 3, 4) = 3 FROM ST_MapAlgebra( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, 0.001, 0, 0, 4269), '8BUI'::text, 1, 0 ), '32BUI', '[rast.x]' ) AS rast; DROP FUNCTION ST_TestRaster(ulx float8, uly float8, val float8); DROP FUNCTION raster_plus_twenty(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_plus_arg1(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_polynomial(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_nullage(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_x_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]); DROP FUNCTION raster_y_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]); DROP TABLE IF EXISTS raster_mapalgebra; CREATE TABLE raster_mapalgebra ( rid integer, rast raster ); DROP TABLE IF EXISTS raster_mapalgebra_out; CREATE TABLE raster_mapalgebra_out ( rid1 integer, rid2 integer, extent varchar, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO raster_mapalgebra VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 4, 4, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); -- skew SELECT make_test_raster(10, 4, 4, -2, -2, 1, -1); SELECT make_test_raster(11, 2, 2, 0, 0, 1, -1, 2); SELECT make_test_raster(12, 2, 2, 1, -1, 1, -1, 3); SELECT make_test_raster(13, 2, 2, 1, 1, 1, -1, 4); SELECT make_test_raster(14, 2, 2, 2, 2, 1, -1, 5); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); -- INTERSECTION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebra( r1.rast, r2.rast, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebra( r1.rast, r2.rast, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'INTERSECTION', st_mapalgebra( NULL::raster, rast, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'INTERSECTION', st_mapalgebra( rast, NULL::raster, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'INTERSECTION', st_mapalgebra( NULL::raster, NULL::raster, '[rast1.val]', '32BF', 'INTERSECTION' ) ; -- UNION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'UNION', st_mapalgebra( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'UNION', st_mapalgebra( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'UNION', st_mapalgebra( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '100', '200', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'UNION', st_mapalgebra( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '100', '200', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'UNION', st_mapalgebra( NULL::raster, rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'UNION', st_mapalgebra( rast, NULL::raster, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'UNION', st_mapalgebra( NULL::raster, NULL::raster, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) ; -- FIRST INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebra( r1.rast, r2.rast, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebra( r1.rast, r2.rast, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'FIRST', st_mapalgebra( NULL::raster, rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'FIRST', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'FIRST', st_mapalgebra( rast, NULL::raster, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'FIRST', st_mapalgebra( NULL::raster, NULL::raster, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) ; -- SECOND INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebra( r1.rast, r2.rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebra( r1.rast, r2.rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'SECOND', st_mapalgebra( NULL::raster, rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'SECOND', st_mapalgebra( rast, NULL::raster, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'SECOND', st_mapalgebra( NULL::raster, NULL::raster, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) ; -- output SELECT rid1, rid2, extent, round(upperleftx::numeric, 3) AS upperleftx, round(upperlefty::numeric, 3) AS upperlefty, width, height, round(scalex::numeric, 3) AS scalex, round(scaley::numeric, 3) AS scaley, round(skewx::numeric, 3) AS skewx, round(skewy::numeric, 3) AS skewy, srid, numbands, pixeltype, round(nodatavalue::numeric, 3) AS nodatavalue, round(firstvalue::numeric, 3) AS firstvalue, round(lastvalue::numeric, 3) AS lastvalue FROM ( SELECT rid1, rid2, extent, (ST_Metadata(rast)).*, (ST_BandMetadata(rast, 1)).*, ST_Value(rast, 1, 1, 1) AS firstvalue, ST_Value(rast, 1, ST_Width(rast), ST_Height(rast)) AS lastvalue FROM raster_mapalgebra_out ) AS r; DROP TABLE IF EXISTS raster_mapalgebra; DROP TABLE IF EXISTS raster_mapalgebra_out; �������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_rotation.sql�����������������������������������������0000644�0000000�0000000�00000017771�12233537203�022613� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net> -- Copyright (c) 2011 David Zwarg <dzwarg@azavea.com> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_properties_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_properties_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 10, 10, 20, --- SRID, width, height 2, 3, 0.5, 0.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_properties_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 12, 1, 1, --- SRID, width, height 5, 5, 2.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 1, 1, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '000000000000F03F' -- skewX (float64 1) || '000000000000F03F' -- skewY (float64 1) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 3, 7, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000840' -- skewX (float64 3) || '0000000000001C40' -- skewY (float64 7) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- -- st_skewx ----------------------------------------------------------------------- SELECT 'T1', id, name, skewx FROM rt_properties_test WHERE st_skewx(rast) != skewx; ----------------------------------------------------------------------- -- st_skewy ----------------------------------------------------------------------- SELECT 'T2', id, name, skewy FROM rt_properties_test WHERE st_skewy(rast) != skewy; ----------------------------------------------------------------------- -- st_setrotation ----------------------------------------------------------------------- SELECT 'T3', id, name, round(st_rotation(rast)*1000000000000) as rotation FROM rt_properties_test WHERE st_rotation(rast) != 0; INSERT INTO rt_properties_test (id, name, srid, width, height, scalex, scaley, ipx, ipy, skewx, skewy, rast) (SELECT id + 100, name, srid, width, height, scalex, scaley, ipx, ipy, skewx, skewy, st_setrotation(rast,0) FROM rt_properties_test WHERE st_rotation(rast) != 0); UPDATE rt_properties_test SET scalex = round(st_scalex(rast)*1000000000000), scaley = round(st_scaley(rast)*1000000000000), skewx = round(st_skewx(rast)*1000000000000), skewy = round(st_skewy(rast)*1000000000000), ipx = round(st_upperleftx(rast)*1000000000000), ipy = round(st_upperlefty(rast)*1000000000000) WHERE id > 100; SELECT 'T4', id, scalex, scaley, abs(skewx), abs(skewy), st_rotation(rast) FROM rt_properties_test WHERE id > 100; UPDATE rt_properties_test SET rast = st_setrotation(rast,pi()/4) WHERE id > 100; UPDATE rt_properties_test SET scalex = round(st_scalex(rast)*1000000000000), scaley = round(st_scaley(rast)*1000000000000), skewx = round(st_skewx(rast)*1000000000000), skewy = round(st_skewy(rast)*1000000000000), ipx = round(st_upperleftx(rast)*1000000000000), ipy = round(st_upperlefty(rast)*1000000000000) WHERE id > 100; SELECT 'T5', id, scalex, scaley, skewx, skewy, round(st_rotation(rast)*1000000000000) FROM rt_properties_test WHERE id > 100; UPDATE rt_properties_test SET rast = st_setrotation(rast,pi()/6) WHERE id > 100; UPDATE rt_properties_test SET scalex = round(st_scalex(rast)*1000000000000), scaley = round(st_scaley(rast)*1000000000000), skewx = round(st_skewx(rast)*1000000000000), skewy = round(st_skewy(rast)*1000000000000), ipx = round(st_upperleftx(rast)*1000000000000), ipy = round(st_upperlefty(rast)*1000000000000) WHERE id > 100; SELECT 'T6', id, scalex, scaley, skewx, skewy, round(st_rotation(rast)*1000000000000) FROM rt_properties_test WHERE id > 100; DELETE FROM rt_properties_test WHERE id > 100; DROP TABLE rt_properties_test; �������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafct_2raster.sql����������������������������0000644�0000000�0000000�00000023524�11727671074�025213� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_mapalgebra; CREATE TABLE raster_mapalgebra ( rid integer, rast raster ); DROP TABLE IF EXISTS raster_mapalgebra_out; CREATE TABLE raster_mapalgebra_out ( rid1 integer, rid2 integer, extent varchar, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO raster_mapalgebra VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 4, 4, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); -- skew SELECT make_test_raster(10, 4, 4, -2, -2, 1, -1); SELECT make_test_raster(11, 2, 2, 0, 0, 1, -1, 2); SELECT make_test_raster(12, 2, 2, 1, -1, 1, -1, 3); SELECT make_test_raster(13, 2, 2, 1, 1, 1, -1, 4); SELECT make_test_raster(14, 2, 2, 2, 2, 1, -1, 5); DROP FUNCTION IF EXISTS make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); CREATE OR REPLACE FUNCTION raster_mapalgebra_intersection( rast1 double precision, rast2 double precision, xy int[], VARIADIC userargs text[] ) RETURNS double precision AS $$ DECLARE BEGIN IF rast1 IS NOT NULL AND rast2 IS NOT NULL THEN RETURN rast1; ELSE RETURN NULL; END IF; RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_mapalgebra_union( rast1 double precision, rast2 double precision, VARIADIC userargs text[] ) RETURNS double precision AS $$ DECLARE BEGIN CASE WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN RETURN ((rast1 + rast2)/2.); WHEN rast1 IS NULL AND rast2 IS NULL THEN RETURN NULL; WHEN rast1 IS NULL THEN RETURN rast2; ELSE RETURN rast1; END CASE; RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_mapalgebra_first( rast1 double precision, rast2 double precision, VARIADIC userargs text[] ) RETURNS double precision AS $$ DECLARE BEGIN CASE WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN RETURN NULL; WHEN rast1 IS NOT NULL THEN RETURN rast1; ELSE RETURN NULL; END CASE; RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_mapalgebra_second( rast1 double precision, rast2 double precision, VARIADIC userargs text[] ) RETURNS double precision AS $$ DECLARE BEGIN CASE WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN RETURN NULL; WHEN rast2 IS NOT NULL THEN RETURN rast2; ELSE RETURN NULL; END CASE; RETURN NULL; END; $$ LANGUAGE 'plpgsql'; -- INTERSECTION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_intersection(double precision, double precision, int[], text[])'::regprocedure, '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_intersection(double precision, double precision, int[], text[])'::regprocedure, '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'INTERSECTION', st_mapalgebrafct( NULL::raster, rast, 'raster_mapalgebra_intersection(double precision, double precision, int[], text[])'::regprocedure, '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'INTERSECTION', st_mapalgebrafct( rast, NULL::raster, 'raster_mapalgebra_intersection(double precision, double precision, int[], text[])'::regprocedure, '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'INTERSECTION', st_mapalgebrafct( NULL::raster, NULL::raster, 'raster_mapalgebra_intersection(double precision, double precision, int[], text[])'::regprocedure, '32BF', 'INTERSECTION' ) ; -- UNION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'UNION', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_union(double precision, double precision, text[])'::regprocedure, '32BF', 'UNION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'UNION', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_union(double precision, double precision, text[])'::regprocedure, '32BF', 'UNION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'UNION', st_mapalgebrafct( NULL::raster, rast, 'raster_mapalgebra_union(double precision, double precision, text[])'::regprocedure, '32BF', 'UNION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'UNION', st_mapalgebrafct( rast, NULL::raster, 'raster_mapalgebra_union(double precision, double precision, text[])'::regprocedure, '32BF', 'UNION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'UNION', st_mapalgebrafct( NULL::raster, NULL::raster, 'raster_mapalgebra_union(double precision, double precision, text[])'::regprocedure, '32BF', 'UNION' ) ; -- FIRST INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_first(double precision, double precision, text[])'::regprocedure, '32BF', 'FIRST' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_first(double precision, double precision, text[])'::regprocedure, '32BF', 'FIRST' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'FIRST', st_mapalgebrafct( NULL::raster, rast, 'raster_mapalgebra_first(double precision, double precision, text[])'::regprocedure, '32BF', 'FIRST' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'FIRST', st_mapalgebrafct( rast, NULL::raster, 'raster_mapalgebra_first(double precision, double precision, text[])'::regprocedure, '32BF', 'FIRST' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'FIRST', st_mapalgebrafct( NULL::raster, NULL::raster, 'raster_mapalgebra_first(double precision, double precision, text[])'::regprocedure, '32BF', 'FIRST' ) ; -- SECOND INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_second(double precision, double precision, text[])'::regprocedure, '32BF', 'SECOND' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebrafct( r1.rast, r2.rast, 'raster_mapalgebra_second(double precision, double precision, text[])'::regprocedure, '32BF', 'SECOND' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'SECOND', st_mapalgebrafct( NULL::raster, rast, 'raster_mapalgebra_second(double precision, double precision, text[])'::regprocedure, '32BF', 'SECOND' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'SECOND', st_mapalgebrafct( rast, NULL::raster, 'raster_mapalgebra_second(double precision, double precision, text[])'::regprocedure, '32BF', 'SECOND' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'SECOND', st_mapalgebrafct( NULL::raster, NULL::raster, 'raster_mapalgebra_second(double precision, double precision, text[])'::regprocedure, '32BF', 'SECOND' ) ; -- output SELECT rid1, rid2, extent, round(upperleftx::numeric, 3) AS upperleftx, round(upperlefty::numeric, 3) AS upperlefty, width, height, round(scalex::numeric, 3) AS scalex, round(scaley::numeric, 3) AS scaley, round(skewx::numeric, 3) AS skewx, round(skewy::numeric, 3) AS skewy, srid, numbands, pixeltype, round(nodatavalue::numeric, 3) AS nodatavalue, round(firstvalue::numeric, 3) AS firstvalue, round(lastvalue::numeric, 3) AS lastvalue FROM ( SELECT rid1, rid2, extent, (ST_Metadata(rast)).*, (ST_BandMetadata(rast, 1)).*, ST_Value(rast, 1, 1, 1) AS firstvalue, ST_Value(rast, 1, ST_Width(rast), ST_Height(rast)) AS lastvalue FROM raster_mapalgebra_out ) AS r; DROP FUNCTION IF EXISTS raster_mapalgebra_intersection(double precision, double precision, int[], VARIADIC text[]); DROP FUNCTION IF EXISTS raster_mapalgebra_union(double precision, double precision, VARIADIC text[]); DROP FUNCTION IF EXISTS raster_mapalgebra_first(double precision, double precision, VARIADIC text[]); DROP FUNCTION IF EXISTS raster_mapalgebra_second(double precision, double precision, VARIADIC text[]); DROP TABLE IF EXISTS raster_mapalgebra; DROP TABLE IF EXISTS raster_mapalgebra_out; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/bug_test_car5.sql���������������������������������������0000644�0000000�0000000�00000006020�12233537203�022756� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id$ -- -- Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- -- -- Test case for mysterious band truncation revealed recently -- on 32-bit platform. The problem was reproduced on 32-bit -- Unix 32-bit system (Linux, Ubuntu 8.10) and was not reproduced on -- Unix 64-bit system (Linux, Ubuntu 9.04). -- -- There is likely a bug related to reaster data alignment. -- Problem leaked in SVN trunk r3951. ----------------------------------------------------------------------- BEGIN; -- DROP TABLE IF EXISTS car5 CASCADE; CREATE TABLE car5 ( rid integer, rast raster ); -- -- Test case: insert the same raster 3 times -- -- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, nodata = 0 -- INSERT INTO car5 (rid,rast) VALUES (1, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEFEFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster ); INSERT INTO car5 (rid,rast) VALUES (2, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEFEFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster ); INSERT INTO car5 (rid,rast) VALUES (3, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEFEFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster ); -- Run test SELECT rid, st_width(rast), st_height(rast), st_bandpixeltype(rast,1), st_bandpixeltype(rast,2), st_bandpixeltype(rast,3) FROM car5; DROP TABLE car5; COMMIT; ----------------------------------------------------------------------- -- Test results ----------------------------------------------------------------------- -- Expected output included in file bug_test_car5_expected. -- In case bug leaks, output includes incorrectly reported -- pixel type, i.e. 1BB (code 0), example: --BEGIN --1|5|5|8BUI|8BUI|8BUI --2|5|5|8BUI|1BB|1BB --3|5|5|8BUI|8BUI|8BUI --COMMIT ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_scale.sql��������������������������������������������0000644�0000000�0000000�00000013224�12233537203�022030� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_properties_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_properties_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 10, 10, 20, --- SRID, width, height 2, 3, 0.5, 0.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_properties_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 12, 1, 1, --- SRID, width, height 5, 5, 2.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 1, 1, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '000000000000F03F' -- skewX (float64 1) || '000000000000F03F' -- skewY (float64 1) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 3, 7, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000840' -- skewX (float64 3) || '0000000000001C40' -- skewY (float64 7) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- -- st_scalex ----------------------------------------------------------------------- SELECT id, name, scalex FROM rt_properties_test WHERE st_scalex(rast) != scalex; ----------------------------------------------------------------------- -- st_scalex ----------------------------------------------------------------------- SELECT id, name, scaley FROM rt_properties_test WHERE st_scaley(rast) != scaley; DROP TABLE rt_properties_test; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/clean.sql�����������������������������������������������0000644�0000000�0000000�00000000167�12147721424�021324� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; -- remove raster_outdb_template table DROP TABLE IF EXISTS raster_outdb_template; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_gist_relationships.sql�������������������������������0000644�0000000�0000000�00000043711�12233537203�024657� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Sandro Santilli <strk@keybit.net> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TYPE tile AS (x int, y int, tile raster); CREATE OR REPLACE FUNCTION makegrid (int, int, box2d, int, int) RETURNS SETOF tile AS ' DECLARE gridCols alias for $1; gridRows alias for $2; extent alias for $3; tileWidth alias for $4; tileHeight alias for $5; rec tile; scalex float8; scaley float8; ipx float8; ipy float8; BEGIN -- compute some sizes -- each tile extent width is extent.width / gridRows scalex = ((ST_xmax(extent)-ST_xmin(extent))/gridCols)/tileWidth; scaley = ((ST_ymax(extent)-ST_ymin(extent))/gridRows)/tileHeight; FOR y IN 0..gridRows-1 LOOP ipy = y*scaley + ST_ymin(extent); FOR x IN 0..gridCols-1 LOOP ipx = x*scalex + ST_xmin(extent); rec.x = x; rec.y = y; rec.tile = st_MakeEmptyRaster(tileWidth, tileHeight, ipx, ipy, scalex, scaley, 0, 0); RETURN NEXT rec; END LOOP; END LOOP; RETURN; END; ' LANGUAGE 'plpgsql'; CREATE TABLE rt_gist_grid_test AS SELECT * FROM makegrid(10, 10, 'BOX(-100 -100, 100 100)', 1, 1); CREATE TABLE rt_gist_query_test AS SELECT * from makegrid(3, 3, 'BOX(-100 -100, 100 100)', 1, 1); ----------------------------------------------------------------------- -- raster_above ----------------------------------------------------------------------- SELECT 'raster_above(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_above(a.tile, b.tile); ----------------------------------------------------------------------- -- Test |>> above ----------------------------------------------------------------------- SELECT 'X |>> query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile |>> b.tile; ----------------------------------------------------------------------- -- raster_below ----------------------------------------------------------------------- SELECT 'raster_below(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_below(a.tile, b.tile); ----------------------------------------------------------------------- -- Test <<| operator (below) ----------------------------------------------------------------------- SELECT 'X <<| query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile <<| b.tile; ----------------------------------------------------------------------- -- raster_contained ----------------------------------------------------------------------- SELECT 'raster_contained(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_contained(a.tile, b.tile); ----------------------------------------------------------------------- -- Test @ operator (contained by) ----------------------------------------------------------------------- SELECT 'X @ query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile @ b.tile; ----------------------------------------------------------------------- -- raster_contain ----------------------------------------------------------------------- SELECT 'raster_contain(query(1,1), X)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_contain(b.tile, a.tile); ----------------------------------------------------------------------- -- raster_geometry_contain ----------------------------------------------------------------------- SELECT 'raster_geometry_contain(query(1,1), X)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_geometry_contain(b.tile, a.tile::geometry); ----------------------------------------------------------------------- -- geometry_raster_contain ----------------------------------------------------------------------- SELECT 'geometry_raster_contain(query(1,1), X)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND geometry_raster_contain(b.tile::geometry, a.tile); ----------------------------------------------------------------------- -- Test ~ operator (raster contains raster) ----------------------------------------------------------------------- SELECT 'query(1,1) ~ X' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND b.tile ~ a.tile; ----------------------------------------------------------------------- -- Test ~ operator (raster contains geometry) ----------------------------------------------------------------------- SELECT 'query(1,1) ~ X' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND b.tile ~ a.tile::geometry; ----------------------------------------------------------------------- -- Test ~ operator (geometry contains raster ) ----------------------------------------------------------------------- SELECT 'query(1,1) ~ X' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND b.tile::geometry ~ a.tile; ----------------------------------------------------------------------- -- raster_left ----------------------------------------------------------------------- SELECT 'raster_left(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_left(a.tile, b.tile); ----------------------------------------------------------------------- -- Test << operator (left) ----------------------------------------------------------------------- SELECT 'X << query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile << b.tile; ----------------------------------------------------------------------- -- raster_overabove ----------------------------------------------------------------------- SELECT 'raster_overabove(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_overabove(a.tile, b.tile); ----------------------------------------------------------------------- -- Test |&> operator (overabove) ----------------------------------------------------------------------- SELECT 'X |&> query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile |&> b.tile; ----------------------------------------------------------------------- -- raster_overbelow ----------------------------------------------------------------------- SELECT 'raster_overbelow(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_overbelow(a.tile, b.tile); ----------------------------------------------------------------------- -- Test &<| operator (overbelow) ----------------------------------------------------------------------- SELECT 'X &<| query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile &<| b.tile; ----------------------------------------------------------------------- -- raster_overlap ----------------------------------------------------------------------- SELECT 'raster_overlap(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_overlap(a.tile, b.tile); ----------------------------------------------------------------------- -- raster_geometry_overlap ----------------------------------------------------------------------- SELECT 'raster_geometry_overlap(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_geometry_overlap(a.tile, b.tile::geometry); ----------------------------------------------------------------------- -- geometry_raster_overlap ----------------------------------------------------------------------- SELECT 'geometry_raster_overlap(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND geometry_raster_overlap(a.tile::geometry, b.tile); ----------------------------------------------------------------------- -- Test && operator (overlap) ----------------------------------------------------------------------- SELECT 'X && query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile && b.tile; ----------------------------------------------------------------------- -- Test && operator (raster overlap geometry) ----------------------------------------------------------------------- SELECT 'X && query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile && b.tile::geometry; ----------------------------------------------------------------------- -- Test && operator (geometry overlap raster) ----------------------------------------------------------------------- SELECT 'X && query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile::geometry && b.tile; ----------------------------------------------------------------------- -- raster_overleft ----------------------------------------------------------------------- SELECT 'raster_overleft(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_overleft(a.tile, b.tile); ----------------------------------------------------------------------- -- Test &< operator (overleft) ----------------------------------------------------------------------- SELECT 'X &< query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile &< b.tile; ----------------------------------------------------------------------- -- raster_overright ----------------------------------------------------------------------- SELECT 'raster_overright(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_overright(a.tile, b.tile); ----------------------------------------------------------------------- -- Test &> operator (overright) ----------------------------------------------------------------------- SELECT 'X &> query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile &> b.tile; ----------------------------------------------------------------------- -- raster_right ----------------------------------------------------------------------- SELECT 'raster_right(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_right(a.tile, b.tile); ----------------------------------------------------------------------- -- Test >> operator (right) ----------------------------------------------------------------------- SELECT 'X >> query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile >> b.tile; ----------------------------------------------------------------------- -- raster_same ----------------------------------------------------------------------- SELECT 'raster_same(X, query(1,1))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND raster_same(a.tile, b.tile); SELECT 'raster_same(X, query(7,7))' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_grid_test b WHERE b.x = 7 and b.y = 7 AND raster_same(a.tile, b.tile); ----------------------------------------------------------------------- -- Test ~= operator (same) ----------------------------------------------------------------------- SELECT 'X ~= query(1,1)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_query_test b WHERE b.x = 1 and b.y = 1 AND a.tile ~= b.tile; SELECT 'X ~= tile(7,7)' as op, count(a.y), min(a.x) as xmin, max(a.x) as xmax, min(a.y) as ymin, max(a.y) as ymax, st_extent(a.tile::geometry) FROM rt_gist_grid_test a, rt_gist_grid_test b WHERE b.x = 7 and b.y = 7 AND a.tile ~= b.tile; DROP FUNCTION makegrid(integer,integer,box2d,integer,integer); DROP table rt_gist_grid_test; DROP table rt_gist_query_test; DROP type tile; �������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelaspoints.sql������������������������������������0000644�0000000�0000000�00000003337�12054737500�023652� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_pixelaspoints; CREATE TABLE raster_pixelaspoints ( rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 10; height int := 10; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0); rast := ST_AddBand(rast, 1, '32BUI', 0, 0); FOR x IN 1..width LOOP FOR y IN 1..height LOOP IF (x + y) % 2 = 1 THEN rast := ST_SetValue(rast, 1, x, y, x + y); END IF; END LOOP; END LOOP; INSERT INTO raster_pixelaspoints VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION make_test_raster(); SELECT (pix).x, (pix).y, ST_RasterToWorldCoordX(rast, (pix).x, (pix).y), ST_RasterToWorldCoordY(rast, (pix).x, (pix).y), (pix).val, ST_AsText((pix).geom) FROM (SELECT rast, ST_PixelAsPoints(rast) AS pix FROM raster_pixelaspoints) foo ORDER BY 1, 2, 3, 4, 6; SELECT (pix).x, (pix).y, ST_RasterToWorldCoordX(rast, (pix).x, (pix).y), ST_RasterToWorldCoordY(rast, (pix).x, (pix).y), (pix).val, ST_AsText((pix).geom) FROM (SELECT rast, ST_PixelAsPoints(rast, NULL) AS pix FROM raster_pixelaspoints) foo ORDER BY 1, 2, 3, 4, 6; SELECT (pix).x, (pix).y, ST_RasterToWorldCoordX(rast, (pix).x, (pix).y), ST_RasterToWorldCoordY(rast, (pix).x, (pix).y), (pix).val, ST_AsText((pix).geom) FROM (SELECT rast, ST_PixelAsPoints(rast, 1, FALSE) AS pix FROM raster_pixelaspoints) foo ORDER BY 1, 2, 3, 4, 6; SELECT ST_AsText(ST_PixelAsPoint(rast, 1, 1)) FROM raster_pixelaspoints; SELECT ST_AsText(ST_PixelAsPoint(rast, 1, 2)) FROM raster_pixelaspoints; SELECT ST_AsText(ST_PixelAsPoint(rast, -1, -1)) FROM raster_pixelaspoints; DROP TABLE IF EXISTS raster_pixelaspoints; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_elevation_functions.sql������������������������������0000644�0000000�0000000�00000017553�12142220116�025017� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; /* 1 1 1 1 1 1 1 1 1 1 2 2 2 1 2 2 2 1 1 2 3 2 2 2 3 2 1 1 2 2 2 1 2 2 2 1 1 1 2 1 3 1 2 1 1 1 2 2 2 1 2 2 2 1 1 2 3 2 2 2 3 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 1 1 */ DROP TABLE IF EXISTS raster_elevation; CREATE TABLE raster_elevation (rid integer, rast raster); DROP TABLE IF EXISTS raster_elevation_out; CREATE TABLE raster_elevation_out (rid integer, functype text, rast raster); INSERT INTO raster_elevation SELECT 0 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(9, 9, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 2, 2, 1, 2, 2, 2, 1], [1, 2, 3, 2, 2, 2, 3, 2, 1], [1, 2, 2, 2, 1, 2, 2, 2, 1], [1, 1, 2, 1, 3, 1, 2, 1, 1], [1, 2, 2, 2, 1, 2, 2, 2, 1], [1, 2, 3, 2, 2, 2, 3, 2, 1], [1, 2, 2, 2, 1, 2, 2, 2, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1] ]::double precision[] ) AS rast ; INSERT INTO raster_elevation SELECT 1 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1], [1, 2, 2], [1, 2, 3] ]::double precision[] ) AS rast UNION ALL SELECT 2 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 2, 2], [1, 1, 2], [1, 2, 2] ]::double precision[] ) AS rast UNION ALL SELECT 3 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 2, 3], [1, 2, 2], [1, 1, 1] ]::double precision[] ) AS rast UNION ALL SELECT 4 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1], [2, 1, 2], [2, 2, 2] ]::double precision[] ) AS rast UNION ALL SELECT 5 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [2, 1, 2], [1, 3, 1], [2, 1, 2] ]::double precision[] ) AS rast UNION ALL SELECT 6 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [2, 2, 2], [2, 1, 2], [1, 1, 1] ]::double precision[] ) AS rast UNION ALL SELECT 7 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1], [2, 2, 1], [3, 2, 1] ]::double precision[] ) AS rast UNION ALL SELECT 8 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [2, 2, 1], [2, 1, 1], [2, 2, 1] ]::double precision[] ) AS rast UNION ALL SELECT 9 AS rid, ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [3, 2, 1], [2, 2, 1], [1, 1, 1] ]::double precision[] ) AS rast ; /* ST_Slope */ INSERT INTO raster_elevation_out SELECT rid, 'slope', ST_Slope(rast) FROM raster_elevation WHERE rid = 0 UNION ALL SELECT rid, 'aspect', ST_Aspect(rast) FROM raster_elevation WHERE rid = 0 UNION ALL SELECT rid, 'hillshade', ST_Hillshade(rast) FROM raster_elevation WHERE rid = 0 ; /* with coverage */ DO $$ BEGIN -- this ONLY works for PostgreSQL version 9.1 or higher IF array_to_string(regexp_matches(split_part(version(), ' ', 2), E'([0-9]+)\.([0-9]+)'), '')::int > 90 THEN INSERT INTO raster_elevation_out ( SELECT t1.rid, 'slope', ST_Slope(ST_Union(t2.rast), 1, t1.rast) AS rast FROM raster_elevation t1 CROSS JOIN raster_elevation t2 WHERE t1.rid != 0 AND t2.rid != 0 AND ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rid, t1.rast ORDER BY t1.rid ) UNION ALL ( SELECT t1.rid, 'aspect', ST_Aspect(ST_Union(t2.rast), 1, t1.rast) AS rast FROM raster_elevation t1 CROSS JOIN raster_elevation t2 WHERE t1.rid != 0 AND t2.rid != 0 AND ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rid, t1.rast ORDER BY t1.rid ) UNION ALL ( SELECT t1.rid, 'hillshade', ST_Hillshade(ST_Union(t2.rast), 1, t1.rast) AS rast FROM raster_elevation t1 CROSS JOIN raster_elevation t2 WHERE t1.rid != 0 AND t2.rid != 0 AND ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rid, t1.rast ORDER BY t1.rid ); ELSE INSERT INTO raster_elevation_out ( WITH foo AS ( SELECT t1.rid, ST_Union(t2.rast) AS rast FROM raster_elevation t1 JOIN raster_elevation t2 ON ST_Intersects(t1.rast, t2.rast) AND t1.rid != 0 AND t2.rid != 0 GROUP BY t1.rid ) SELECT t1.rid, 'slope', ST_Slope(t2.rast, 1, t1.rast) AS rast FROM raster_elevation t1 JOIN foo t2 ON t1.rid = t2.rid ORDER BY t1.rid ) UNION ALL ( WITH foo AS ( SELECT t1.rid, ST_Union(t2.rast) AS rast FROM raster_elevation t1 JOIN raster_elevation t2 ON ST_Intersects(t1.rast, t2.rast) AND t1.rid != 0 AND t2.rid != 0 GROUP BY t1.rid ) SELECT t1.rid, 'aspect', ST_Aspect(t2.rast, 1, t1.rast) AS rast FROM raster_elevation t1 JOIN foo t2 ON t1.rid = t2.rid ORDER BY t1.rid ) UNION ALL ( WITH foo AS ( SELECT t1.rid, ST_Union(t2.rast) AS rast FROM raster_elevation t1 JOIN raster_elevation t2 ON ST_Intersects(t1.rast, t2.rast) AND t1.rid != 0 AND t2.rid != 0 GROUP BY t1.rid ) SELECT t1.rid, 'hillshade', ST_Hillshade(t2.rast, 1, t1.rast) AS rast FROM raster_elevation t1 JOIN foo t2 ON t1.rid = t2.rid ORDER BY t1.rid ); END IF; END $$; WITH foo AS ( SELECT rid, functype, ST_PixelAsPoints(rast) AS papt FROM raster_elevation_out ) SELECT rid, functype, (papt).x, (papt).y, round((papt).val::numeric, 6) AS val FROM foo ORDER BY 2, 1, 4, 3; DROP TABLE IF EXISTS raster_elevation_out; DROP TABLE IF EXISTS raster_elevation; -- ST_TPI DROP TABLE IF EXISTS raster_value_arrays; CREATE TABLE raster_value_arrays ( id integer, val double precision[][] ); CREATE OR REPLACE FUNCTION make_value_array( rows integer DEFAULT 3, columns integer DEFAULT 3, start_val double precision DEFAULT 1, step double precision DEFAULT 1, skip_expr text DEFAULT NULL ) RETURNS double precision[][][] AS $$ DECLARE x int; y int; value double precision; values double precision[][][]; result boolean; expr text; BEGIN value := start_val; values := array_fill(NULL::double precision, ARRAY[1, columns, rows]); FOR y IN 1..columns LOOP FOR x IN 1..rows LOOP IF skip_expr IS NULL OR length(skip_expr) < 1 THEN result := TRUE; ELSE expr := replace(skip_expr, '[v]'::text, value::text); EXECUTE 'SELECT (' || expr || ')::boolean' INTO result; END IF; IF result IS TRUE THEN values[1][y][x] := value; END IF; value := value + step; END LOOP; END LOOP; RETURN values; END; $$ LANGUAGE 'plpgsql'; INSERT INTO raster_value_arrays VALUES (1, make_value_array()), (2, make_value_array(3, 3, 15, -1)), (3, make_value_array(3, 3, 1, 2)), (4, make_value_array(3, 3, 1, 1, '0')), (5, make_value_array(3, 3, 1, 1, '[v] % 2')), (6, make_value_array(3, 3, 1, 1, '([v] % 2) = 0')), (7, make_value_array(3, 3, 1, 2.1, '([v] NOT IN (7.3, 9.4, 15.7, 17.8))')), (8, make_value_array(3, 3, 0, 3.14, '([v] IN (3.14, 12.56, 25.12))')), (9, make_value_array(3, 3, 1, 1, '[v] > 8')), (10,make_value_array(3,3,3.14,12)), (11,make_value_array(3,3,2.11,11)); SELECT id, val, round(_st_tpi4ma(val,NULL,NULL)::numeric, 6) as tpi FROM raster_value_arrays ORDER BY id; SELECT id, val, round(_st_roughness4ma(val,NULL,NULL)::numeric, 6) as roughness FROM raster_value_arrays ORDER BY id; SELECT id, val, round(_st_tri4ma(val,NULL,NULL)::numeric, 6) as tri FROM raster_value_arrays ORDER BY id; DROP TABLE IF EXISTS raster_value_arrays; DROP FUNCTION IF EXISTS make_value_array(integer,integer,double precision, double precision, text); �����������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_bandmetadata.sql�������������������������������������0000644�0000000�0000000�00000004144�11727671074�023363� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE OR REPLACE FUNCTION make_test_raster( width integer DEFAULT 10, height integer DEFAULT 10, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, numbands integer DEFAULT 1, autofill boolean DEFAULT FALSE ) RETURNS raster AS $$ DECLARE i int; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); FOR i IN 1..numbands LOOP rast := ST_AddBand(rast, i, '8BUI', 0, i); IF autofill IS TRUE THEN FOR x IN 1..width LOOP FOR y IN 1..height LOOP rast := ST_SetValue(rast, i, x, y, ((x - 1) * width) + y); END LOOP; END LOOP; END IF; END LOOP; RETURN rast; END; $$ LANGUAGE 'plpgsql'; SELECT pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( ST_SetBandNoDataValue(make_test_raster(10, 10, 0, 0, 0, 0), NULL) ); SELECT pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( make_test_raster(10, 10, 0, 0, 0, 0) ); SELECT pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( make_test_raster(10, 10, 0, 0, 0, 0, 2), 2 ); SELECT pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( make_test_raster(10, 10, 0, 0, 0, 0, 3, TRUE), 3 ); SELECT pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( make_test_raster(10, 10, 0, 0, 0, 0, 5, TRUE), 4 ); SELECT pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( make_test_raster(10, 10, 0, 0, 0, 0, 5, TRUE), 6 ); SELECT bandnum pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( make_test_raster(10, 10, 0, 0, 0, 0, 5, TRUE), ARRAY[1,2,5] ); SELECT bandnum pixeltype, round(nodatavalue::numeric, 3), isoutdb, path FROM ST_BandMetaData( make_test_raster(10, 10, 0, 0, 0, 0, 5, TRUE), ARRAY[]::int[] ); DROP FUNCTION IF EXISTS make_test_raster( integer, integer, double precision, double precision, double precision, double precision, integer, boolean ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_io.sql�����������������������������������������������0000644�0000000�0000000�00000044622�11722777314�021371� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE TABLE rt_io_test ( id numeric, name text, hexwkb_ndr text, hexwkb_xdr text, rast raster ); -- 1x1, no bands, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 0, '1x1 no bands, no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) ) , ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) ) ); -- 1x1, single band of type 1BB, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 1, '1x1 single band (1BB) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '00' -- first band type (1BB) || '00' -- novalue==0 || '01' -- pixel(0,0)==1 ) , ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '00' -- first band type (1BB) || '00' -- novalue==0 || '01' -- pixel(0,0)==1 ) ); -- 1x1, single band of type 2BUI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 2, '1x1 single band (2BUI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '01' -- first band type (2BUI) || '00' -- novalue==0 || '03' -- pixel(0,0)==3 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '01' -- first band type (2BUI) || '00' -- novalue==0 || '03' -- pixel(0,0)==3 ) ); -- 1x1, single band of type 4BUI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 3, '1x1 single band (4BUI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '02' -- first band type (4BUI) || '00' -- novalue==0 || '0F' -- pixel(0,0)==15 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '02' -- first band type (4BUI) || '00' -- novalue==0 || '0F' -- pixel(0,0)==15 ) ); -- 1x1, single band of type 8BSI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 4, '1x1 single band (8BSI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '03' -- first band type (8BSI) || '00' -- novalue==0 || 'FF' -- pixel(0,0)==-1 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '03' -- first band type (8BSI) || '00' -- novalue==0 || 'FF' -- pixel(0,0)==-1 ) ); -- 1x1, single band of type 8BUI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 5, '1x1 single band (8BUI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '04' -- first band type (8BUI) || '00' -- novalue==0 || 'FF' -- pixel(0,0)==255 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '04' -- first band type (8BUI) || '00' -- novalue==0 || 'FF' -- pixel(0,0)==255 ) ); -- 1x1, single band of type 16BSI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 6, '1x1 single band (16BSI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '05' -- first band type (16BSI) || '0000' -- novalue==0 || 'FFFF' -- pixel(0,0)==-1 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '05' -- first band type (16BSI) || '0000' -- novalue==0 || 'FFFF' -- pixel(0,0)==-1 ) ); -- 1x1, single band of type 16BUI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 7, '1x1 single band (16BUI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '06' -- first band type (16BUI) || '0000' -- novalue==0 || 'FFFF' -- pixel(0,0)==65535 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '06' -- first band type (16BUI) || '0000' -- novalue==0 || 'FFFF' -- pixel(0,0)==65535 ) ); -- 1x1, single band of type 32BSI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 8, '1x1 single band (32BSI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '07' -- first band type (32BSI) || '00000000' -- novalue==0 || 'FFFFFFFF' -- pixel(0,0)==-1 ? ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '07' -- first band type (32BSI) || '00000000' -- novalue==0 || 'FFFFFFFF' -- pixel(0,0)==-1 ? ) ); -- 1x1, single band of type 32BUI, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 9, '1x1 single band (32BUI) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '08' -- first band type (32BUI) || '00000000' -- novalue==0 || 'FFFFFFFF' -- pixel(0,0)=4294967295 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '08' -- first band type (32BUI) || '00000000' -- novalue==0 || 'FFFFFFFF' -- pixel(0,0)=4294967295 ) ); -- 1x1, single band of type 32BF, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 11, '1x1 single band (32BF) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '0A' -- first band type (32BF) || '00000000' -- novalue==0 || 'CDCC8C3F' -- pixel(0,0)=1.1 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '0A' -- first band type (32BF) || '00000000' -- novalue==0 || '3F8CCCCD' -- pixel(0,0)=1.1 ) ); -- 1x1, single band of type 64BF, no transform, scale 1:1 INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 11, '1x1 single band (64BF) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '0B' -- first band type (64BF) || '0000000000000000' -- novalue==0 || 'AE47E17A14AE1540' -- pixel(0,0)=5.42 ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '0B' -- first band type (64BF) || '0000000000000000' -- novalue==0 || '4015AE147AE147AE' -- pixel(0,0)=5.42 ) ); -- 1x1, single band of type 64BF (external: 3:/tmp/t.tif), -- no transform, scale 1:1 -- INSERT INTO rt_io_test (id, name, hexwkb_ndr, hexwkb_xdr) VALUES ( 12, '1x1 single band (64BF external) no transform', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0100' -- nBands (uint16 1) || '000000000000F03F' -- scaleX (float64 1) || '000000000000F03F' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '8B' -- first band type (64BF + ext flag) || '0000000000000000' -- novalue==0 || '03' -- ext band num == 3 || '2F746D702F742E74696600' -- "/tmp/t.tif" ), ( '00' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0001' -- nBands (uint16 1) || '3FF0000000000000' -- scaleX (float64 1) || '3FF0000000000000' -- scaleY (float64 1) || '0000000000000000' -- ipX (float64 0) || '0000000000000000' -- ipY (float64 0) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0000000A' -- SRID (int32 10) || '0001' -- width (uint16 1) || '0001' -- height (uint16 1) || '8B' -- first band type (64BF) || '0000000000000000' -- novalue==0 || '03' -- ext band num == 3 || '2F746D702F742E74696600' -- "/tmp/t.tif" ) ); SELECT name, hexwkb_ndr::raster::text = hexwkb_ndr or hexwkb_ndr::raster::text = hexwkb_xdr as ndr_io, hexwkb_xdr::raster::text = hexwkb_ndr or hexwkb_xdr::raster::text = hexwkb_xdr as xdr_io FROM rt_io_test; -- Out of range value for 1BB pixeltype SELECT ( '01' || -- little endian (uint8 ndr) '0000' || -- version (uint16 0) '0100' || -- nBands (uint16 1) '000000000000F03F' || -- scaleX (float64 1) '000000000000F03F' || -- scaleY (float64 1) '0000000000000000' || -- ipX (float64 0) '0000000000000000' || -- ipY (float64 0) '0000000000000000' || -- skewX (float64 0) '0000000000000000' || -- skewY (float64 0) '0A000000' || -- SRID (int32 10) '0100' || -- width (uint16 1) '0100' || -- height (uint16 1) '00' || -- first band type (1BB) '00' ||-- novalue==0 '02' -- pixel(0,0)==2 (out of 0..1 range) )::raster; -- Out of range value for 2BUI pixeltype SELECT ( '01' || -- little endian (uint8 ndr) '0000' || -- version (uint16 0) '0100' || -- nBands (uint16 1) '000000000000F03F' || -- scaleX (float64 1) '000000000000F03F' || -- scaleY (float64 1) '0000000000000000' || -- ipX (float64 0) '0000000000000000' || -- ipY (float64 0) '0000000000000000' || -- skewX (float64 0) '0000000000000000' || -- skewY (float64 0) '0A000000' || -- SRID (int32 10) '0100' || -- width (uint16 1) '0100' || -- height (uint16 1) '01' || -- first band type (2BUI) '00' ||-- novalue==0 '04' -- pixel(0,0)==4 (out of 0..3 range) )::raster; -- Out of range value for 4BUI pixeltype SELECT ( '01' || -- little endian (uint8 ndr) '0000' || -- version (uint16 0) '0100' || -- nBands (uint16 1) '000000000000F03F' || -- scaleX (float64 1) '000000000000F03F' || -- scaleY (float64 1) '0000000000000000' || -- ipX (float64 0) '0000000000000000' || -- ipY (float64 0) '0000000000000000' || -- skewX (float64 0) '0000000000000000' || -- skewY (float64 0) '0A000000' || -- SRID (int32 10) '0100' || -- width (uint16 1) '0100' || -- height (uint16 1) '02' || -- first band type (4BUI) '00' ||-- novalue==0 '10' -- pixel(0,0)==16 (out of 0..15 range) )::raster; DROP TABLE rt_io_test; ��������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_fromgdalraster.sql�����������������������������������0000644�0000000�0000000�00000014163�12123740451�023757� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Driver: PNG/Portable Network Graphics Files: testraster.png Size is 90, 90 Coordinate System is `' Metadata: Comment=Created with GIMP Image Structure Metadata: INTERLEAVE=PIXEL Corner Coordinates: Upper Left ( 0.0, 0.0) Lower Left ( 0.0, 90.0) Upper Right ( 90.0, 0.0) Lower Right ( 90.0, 90.0) Center ( 45.0, 45.0) Band 1 Block=90x1 Type=Byte, ColorInterp=Red Band 2 Block=90x1 Type=Byte, ColorInterp=Green Band 3 Block=90x1 Type=Byte, ColorInterp=Blue */ WITH foo AS ( SELECT ST_FromGDALRaster(E'\\x89504e470d0a1a0a0000000d494844520000005a0000005a0802000000b7cad655000000017352474200aece1ce9000000097048597300000b1300000b1301009a9c180000000774494d4507dc020e16332b734b11150000001d69545874436f6d6d656e7400000000004372656174656420776974682047494d50642e6507000000c14944415478daedd8410ac030080440edffff9cfe607b6a0c61bc8a974161b157c55aa9dfdd71f4c4d9aa34fb94c28103070e1c3870e018a8feca70b60387c28103070e1c3870fc9f4a737b5df72bcdb3b603070e1c3870e0c081632695fa95da0e1c3870e0c08103078ef9549adb7ea58e45e1c08103070e1c3876a452bf52db8103070e1c3870e0c0319f4a73dbafd4b1281c3870e0c08103c78e54ea576a3b70e0c08103070e1c38e65369c550baeabe5fa9ed702c3870e0c08103078ee3ea057386489dc63798000000000049454e44ae426082'::bytea) AS rast ) SELECT ST_Metadata(rast), ST_SummaryStats(rast, 1), ST_SummaryStats(rast, 2), ST_SummaryStats(rast, 3) FROM foo; /* Driver: GTiff/GeoTIFF Files: test4269.tif Size is 10, 10 Coordinate System is: GEOGCS["NAD83", DATUM["North_American_Datum_1983", SPHEROID["GRS 1980",6378137,298.2572221010002, AUTHORITY["EPSG","7019"]], TOWGS84[0,0,0,0,0,0,0], AUTHORITY["EPSG","6269"]], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433], AUTHORITY["EPSG","4269"]] Origin = (-168.000000000000000,85.000000000000000) Pixel Size = (0.083000000000000,-0.083000000000000) Metadata: AREA_OR_POINT=Area TIFFTAG_DATETIME=2012:03:02 09:59:31 TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) TIFFTAG_SOFTWARE=Adobe Photoshop CS Windows TIFFTAG_XRESOLUTION=96 TIFFTAG_YRESOLUTION=96 Image Structure Metadata: INTERLEAVE=PIXEL Corner Coordinates: Upper Left (-168.0000000, 85.0000000) (168d 0' 0.00"W, 85d 0' 0.00"N) Lower Left (-168.0000000, 84.1700000) (168d 0' 0.00"W, 84d10'12.00"N) Upper Right (-167.1700000, 85.0000000) (167d10'12.00"W, 85d 0' 0.00"N) Lower Right (-167.1700000, 84.1700000) (167d10'12.00"W, 84d10'12.00"N) Center (-167.5850000, 84.5850000) (167d35' 6.00"W, 84d35' 6.00"N) Band 1 Block=10x10 Type=Byte, ColorInterp=Red Band 2 Block=10x10 Type=Byte, ColorInterp=Green Band 3 Block=10x10 Type=Byte, ColorInterp=Blue */ WITH foo AS ( SELECT 1 AS rid, ST_FromGDALRaster(E'\\x49492a0008000000150000010300010000000a00000001010300010000000a00000002010300030000001a01000003010300010000000100000006010300010000000200000011010400010000001502000015010300010000000300000016010300010000000a00000017010400010000002c0100001a010500010000000a0100001b01050001000000120100001c0103000100000001000000280103000100000002000000310102001b0000003a0100003201020014000000260100005301030003000000200100000e830c00030000005601000082840c00060000006e010000af870300240000009e010000b0870c0005000000e6010000b1870200070000000e0200000000000060000000010000006000000001000000080008000800010001000100323031323a30333a30322030393a35393a33310041646f62652050686f746f73686f702043532057696e646f77730000736891ed7c3fb53f736891ed7c3fb53f000000000000000000000000000000000000000000000000000000000000000000000000000065c000000000004055400000000000000000010001000000080000040000010002000104000001000100000800000100ad100108b187060000000608000001008e230908b087010001000b08b087010000000e08b08703000200a8f9eb941da4724000000040a65458410000000000000000000000000000000000000000000000004e414438337c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'::bytea) AS rast UNION ALL SELECT 2 AS rid, ST_FromGDALRaster(E'\\x49492a0008000000150000010300010000000a00000001010300010000000a00000002010300030000001a01000003010300010000000100000006010300010000000200000011010400010000001502000015010300010000000300000016010300010000000a00000017010400010000002c0100001a010500010000000a0100001b01050001000000120100001c0103000100000001000000280103000100000002000000310102001b0000003a0100003201020014000000260100005301030003000000200100000e830c00030000005601000082840c00060000006e010000af870300240000009e010000b0870c0005000000e6010000b1870200070000000e0200000000000060000000010000006000000001000000080008000800010001000100323031323a30333a30322030393a35393a33310041646f62652050686f746f73686f702043532057696e646f77730000736891ed7c3fb53f736891ed7c3fb53f000000000000000000000000000000000000000000000000000000000000000000000000000065c000000000004055400000000000000000010001000000080000040000010002000104000001000100000800000100ad100108b187060000000608000001008e230908b087010001000b08b087010000000e08b08703000200a8f9eb941da4724000000040a65458410000000000000000000000000000000000000000000000004e414438337c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'::bytea, 4326) AS rast ) SELECT rid, ST_Metadata(rast), ST_SummaryStats(rast, 1), ST_SummaryStats(rast, 2), ST_SummaryStats(rast, 3) FROM foo ORDER BY rid; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelaspolygons_expected�����������������������������0000644�0000000�0000000�00000025123�12210402370�025254� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_pixelaspolygons" does not exist, skipping 1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|4|5|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|6|7|POLYGON((0 -5,1 -5,1 -6,0 -6,0 -5)) 1|8|9|POLYGON((0 -7,1 -7,1 -8,0 -8,0 -7)) 1|10|11|POLYGON((0 -9,1 -9,1 -10,0 -10,0 -9)) 2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|3|5|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|5|7|POLYGON((1 -4,2 -4,2 -5,1 -5,1 -4)) 2|7|9|POLYGON((1 -6,2 -6,2 -7,1 -7,1 -6)) 2|9|11|POLYGON((1 -8,2 -8,2 -9,1 -9,1 -8)) 3|2|5|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 3|4|7|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|6|9|POLYGON((2 -5,3 -5,3 -6,2 -6,2 -5)) 3|8|11|POLYGON((2 -7,3 -7,3 -8,2 -8,2 -7)) 3|10|13|POLYGON((2 -9,3 -9,3 -10,2 -10,2 -9)) 4|1|5|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|3|7|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|5|9|POLYGON((3 -4,4 -4,4 -5,3 -5,3 -4)) 4|7|11|POLYGON((3 -6,4 -6,4 -7,3 -7,3 -6)) 4|9|13|POLYGON((3 -8,4 -8,4 -9,3 -9,3 -8)) 5|2|7|POLYGON((4 -1,5 -1,5 -2,4 -2,4 -1)) 5|4|9|POLYGON((4 -3,5 -3,5 -4,4 -4,4 -3)) 5|6|11|POLYGON((4 -5,5 -5,5 -6,4 -6,4 -5)) 5|8|13|POLYGON((4 -7,5 -7,5 -8,4 -8,4 -7)) 5|10|15|POLYGON((4 -9,5 -9,5 -10,4 -10,4 -9)) 6|1|7|POLYGON((5 0,6 0,6 -1,5 -1,5 0)) 6|3|9|POLYGON((5 -2,6 -2,6 -3,5 -3,5 -2)) 6|5|11|POLYGON((5 -4,6 -4,6 -5,5 -5,5 -4)) 6|7|13|POLYGON((5 -6,6 -6,6 -7,5 -7,5 -6)) 6|9|15|POLYGON((5 -8,6 -8,6 -9,5 -9,5 -8)) 7|2|9|POLYGON((6 -1,7 -1,7 -2,6 -2,6 -1)) 7|4|11|POLYGON((6 -3,7 -3,7 -4,6 -4,6 -3)) 7|6|13|POLYGON((6 -5,7 -5,7 -6,6 -6,6 -5)) 7|8|15|POLYGON((6 -7,7 -7,7 -8,6 -8,6 -7)) 7|10|17|POLYGON((6 -9,7 -9,7 -10,6 -10,6 -9)) 8|1|9|POLYGON((7 0,8 0,8 -1,7 -1,7 0)) 8|3|11|POLYGON((7 -2,8 -2,8 -3,7 -3,7 -2)) 8|5|13|POLYGON((7 -4,8 -4,8 -5,7 -5,7 -4)) 8|7|15|POLYGON((7 -6,8 -6,8 -7,7 -7,7 -6)) 8|9|17|POLYGON((7 -8,8 -8,8 -9,7 -9,7 -8)) 9|2|11|POLYGON((8 -1,9 -1,9 -2,8 -2,8 -1)) 9|4|13|POLYGON((8 -3,9 -3,9 -4,8 -4,8 -3)) 9|6|15|POLYGON((8 -5,9 -5,9 -6,8 -6,8 -5)) 9|8|17|POLYGON((8 -7,9 -7,9 -8,8 -8,8 -7)) 9|10|19|POLYGON((8 -9,9 -9,9 -10,8 -10,8 -9)) 10|1|11|POLYGON((9 0,10 0,10 -1,9 -1,9 0)) 10|3|13|POLYGON((9 -2,10 -2,10 -3,9 -3,9 -2)) 10|5|15|POLYGON((9 -4,10 -4,10 -5,9 -5,9 -4)) 10|7|17|POLYGON((9 -6,10 -6,10 -7,9 -7,9 -6)) 10|9|19|POLYGON((9 -8,10 -8,10 -9,9 -9,9 -8)) 1|1|0|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|3|0|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|4|5|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|5|0|POLYGON((0 -4,1 -4,1 -5,0 -5,0 -4)) 1|6|7|POLYGON((0 -5,1 -5,1 -6,0 -6,0 -5)) 1|7|0|POLYGON((0 -6,1 -6,1 -7,0 -7,0 -6)) 1|8|9|POLYGON((0 -7,1 -7,1 -8,0 -8,0 -7)) 1|9|0|POLYGON((0 -8,1 -8,1 -9,0 -9,0 -8)) 1|10|11|POLYGON((0 -9,1 -9,1 -10,0 -10,0 -9)) 2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|2|0|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|3|5|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|4|0|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|5|7|POLYGON((1 -4,2 -4,2 -5,1 -5,1 -4)) 2|6|0|POLYGON((1 -5,2 -5,2 -6,1 -6,1 -5)) 2|7|9|POLYGON((1 -6,2 -6,2 -7,1 -7,1 -6)) 2|8|0|POLYGON((1 -7,2 -7,2 -8,1 -8,1 -7)) 2|9|11|POLYGON((1 -8,2 -8,2 -9,1 -9,1 -8)) 2|10|0|POLYGON((1 -9,2 -9,2 -10,1 -10,1 -9)) 3|1|0|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|5|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 3|3|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|4|7|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|5|0|POLYGON((2 -4,3 -4,3 -5,2 -5,2 -4)) 3|6|9|POLYGON((2 -5,3 -5,3 -6,2 -6,2 -5)) 3|7|0|POLYGON((2 -6,3 -6,3 -7,2 -7,2 -6)) 3|8|11|POLYGON((2 -7,3 -7,3 -8,2 -8,2 -7)) 3|9|0|POLYGON((2 -8,3 -8,3 -9,2 -9,2 -8)) 3|10|13|POLYGON((2 -9,3 -9,3 -10,2 -10,2 -9)) 4|1|5|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|0|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|3|7|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|4|0|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|5|9|POLYGON((3 -4,4 -4,4 -5,3 -5,3 -4)) 4|6|0|POLYGON((3 -5,4 -5,4 -6,3 -6,3 -5)) 4|7|11|POLYGON((3 -6,4 -6,4 -7,3 -7,3 -6)) 4|8|0|POLYGON((3 -7,4 -7,4 -8,3 -8,3 -7)) 4|9|13|POLYGON((3 -8,4 -8,4 -9,3 -9,3 -8)) 4|10|0|POLYGON((3 -9,4 -9,4 -10,3 -10,3 -9)) 5|1|0|POLYGON((4 0,5 0,5 -1,4 -1,4 0)) 5|2|7|POLYGON((4 -1,5 -1,5 -2,4 -2,4 -1)) 5|3|0|POLYGON((4 -2,5 -2,5 -3,4 -3,4 -2)) 5|4|9|POLYGON((4 -3,5 -3,5 -4,4 -4,4 -3)) 5|5|0|POLYGON((4 -4,5 -4,5 -5,4 -5,4 -4)) 5|6|11|POLYGON((4 -5,5 -5,5 -6,4 -6,4 -5)) 5|7|0|POLYGON((4 -6,5 -6,5 -7,4 -7,4 -6)) 5|8|13|POLYGON((4 -7,5 -7,5 -8,4 -8,4 -7)) 5|9|0|POLYGON((4 -8,5 -8,5 -9,4 -9,4 -8)) 5|10|15|POLYGON((4 -9,5 -9,5 -10,4 -10,4 -9)) 6|1|7|POLYGON((5 0,6 0,6 -1,5 -1,5 0)) 6|2|0|POLYGON((5 -1,6 -1,6 -2,5 -2,5 -1)) 6|3|9|POLYGON((5 -2,6 -2,6 -3,5 -3,5 -2)) 6|4|0|POLYGON((5 -3,6 -3,6 -4,5 -4,5 -3)) 6|5|11|POLYGON((5 -4,6 -4,6 -5,5 -5,5 -4)) 6|6|0|POLYGON((5 -5,6 -5,6 -6,5 -6,5 -5)) 6|7|13|POLYGON((5 -6,6 -6,6 -7,5 -7,5 -6)) 6|8|0|POLYGON((5 -7,6 -7,6 -8,5 -8,5 -7)) 6|9|15|POLYGON((5 -8,6 -8,6 -9,5 -9,5 -8)) 6|10|0|POLYGON((5 -9,6 -9,6 -10,5 -10,5 -9)) 7|1|0|POLYGON((6 0,7 0,7 -1,6 -1,6 0)) 7|2|9|POLYGON((6 -1,7 -1,7 -2,6 -2,6 -1)) 7|3|0|POLYGON((6 -2,7 -2,7 -3,6 -3,6 -2)) 7|4|11|POLYGON((6 -3,7 -3,7 -4,6 -4,6 -3)) 7|5|0|POLYGON((6 -4,7 -4,7 -5,6 -5,6 -4)) 7|6|13|POLYGON((6 -5,7 -5,7 -6,6 -6,6 -5)) 7|7|0|POLYGON((6 -6,7 -6,7 -7,6 -7,6 -6)) 7|8|15|POLYGON((6 -7,7 -7,7 -8,6 -8,6 -7)) 7|9|0|POLYGON((6 -8,7 -8,7 -9,6 -9,6 -8)) 7|10|17|POLYGON((6 -9,7 -9,7 -10,6 -10,6 -9)) 8|1|9|POLYGON((7 0,8 0,8 -1,7 -1,7 0)) 8|2|0|POLYGON((7 -1,8 -1,8 -2,7 -2,7 -1)) 8|3|11|POLYGON((7 -2,8 -2,8 -3,7 -3,7 -2)) 8|4|0|POLYGON((7 -3,8 -3,8 -4,7 -4,7 -3)) 8|5|13|POLYGON((7 -4,8 -4,8 -5,7 -5,7 -4)) 8|6|0|POLYGON((7 -5,8 -5,8 -6,7 -6,7 -5)) 8|7|15|POLYGON((7 -6,8 -6,8 -7,7 -7,7 -6)) 8|8|0|POLYGON((7 -7,8 -7,8 -8,7 -8,7 -7)) 8|9|17|POLYGON((7 -8,8 -8,8 -9,7 -9,7 -8)) 8|10|0|POLYGON((7 -9,8 -9,8 -10,7 -10,7 -9)) 9|1|0|POLYGON((8 0,9 0,9 -1,8 -1,8 0)) 9|2|11|POLYGON((8 -1,9 -1,9 -2,8 -2,8 -1)) 9|3|0|POLYGON((8 -2,9 -2,9 -3,8 -3,8 -2)) 9|4|13|POLYGON((8 -3,9 -3,9 -4,8 -4,8 -3)) 9|5|0|POLYGON((8 -4,9 -4,9 -5,8 -5,8 -4)) 9|6|15|POLYGON((8 -5,9 -5,9 -6,8 -6,8 -5)) 9|7|0|POLYGON((8 -6,9 -6,9 -7,8 -7,8 -6)) 9|8|17|POLYGON((8 -7,9 -7,9 -8,8 -8,8 -7)) 9|9|0|POLYGON((8 -8,9 -8,9 -9,8 -9,8 -8)) 9|10|19|POLYGON((8 -9,9 -9,9 -10,8 -10,8 -9)) 10|1|11|POLYGON((9 0,10 0,10 -1,9 -1,9 0)) 10|2|0|POLYGON((9 -1,10 -1,10 -2,9 -2,9 -1)) 10|3|13|POLYGON((9 -2,10 -2,10 -3,9 -3,9 -2)) 10|4|0|POLYGON((9 -3,10 -3,10 -4,9 -4,9 -3)) 10|5|15|POLYGON((9 -4,10 -4,10 -5,9 -5,9 -4)) 10|6|0|POLYGON((9 -5,10 -5,10 -6,9 -6,9 -5)) 10|7|17|POLYGON((9 -6,10 -6,10 -7,9 -7,9 -6)) 10|8|0|POLYGON((9 -7,10 -7,10 -8,9 -8,9 -7)) 10|9|19|POLYGON((9 -8,10 -8,10 -9,9 -9,9 -8)) 10|10|0|POLYGON((9 -9,10 -9,10 -10,9 -10,9 -9)) 1|1|0|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|3|0|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|4|5|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|5|0|POLYGON((0 -4,1 -4,1 -5,0 -5,0 -4)) 1|6|7|POLYGON((0 -5,1 -5,1 -6,0 -6,0 -5)) 1|7|0|POLYGON((0 -6,1 -6,1 -7,0 -7,0 -6)) 1|8|9|POLYGON((0 -7,1 -7,1 -8,0 -8,0 -7)) 1|9|0|POLYGON((0 -8,1 -8,1 -9,0 -9,0 -8)) 1|10|11|POLYGON((0 -9,1 -9,1 -10,0 -10,0 -9)) 2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|2|0|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|3|5|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|4|0|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|5|7|POLYGON((1 -4,2 -4,2 -5,1 -5,1 -4)) 2|6|0|POLYGON((1 -5,2 -5,2 -6,1 -6,1 -5)) 2|7|9|POLYGON((1 -6,2 -6,2 -7,1 -7,1 -6)) 2|8|0|POLYGON((1 -7,2 -7,2 -8,1 -8,1 -7)) 2|9|11|POLYGON((1 -8,2 -8,2 -9,1 -9,1 -8)) 2|10|0|POLYGON((1 -9,2 -9,2 -10,1 -10,1 -9)) 3|1|0|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|5|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 3|3|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|4|7|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|5|0|POLYGON((2 -4,3 -4,3 -5,2 -5,2 -4)) 3|6|9|POLYGON((2 -5,3 -5,3 -6,2 -6,2 -5)) 3|7|0|POLYGON((2 -6,3 -6,3 -7,2 -7,2 -6)) 3|8|11|POLYGON((2 -7,3 -7,3 -8,2 -8,2 -7)) 3|9|0|POLYGON((2 -8,3 -8,3 -9,2 -9,2 -8)) 3|10|13|POLYGON((2 -9,3 -9,3 -10,2 -10,2 -9)) 4|1|5|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|0|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|3|7|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|4|0|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|5|9|POLYGON((3 -4,4 -4,4 -5,3 -5,3 -4)) 4|6|0|POLYGON((3 -5,4 -5,4 -6,3 -6,3 -5)) 4|7|11|POLYGON((3 -6,4 -6,4 -7,3 -7,3 -6)) 4|8|0|POLYGON((3 -7,4 -7,4 -8,3 -8,3 -7)) 4|9|13|POLYGON((3 -8,4 -8,4 -9,3 -9,3 -8)) 4|10|0|POLYGON((3 -9,4 -9,4 -10,3 -10,3 -9)) 5|1|0|POLYGON((4 0,5 0,5 -1,4 -1,4 0)) 5|2|7|POLYGON((4 -1,5 -1,5 -2,4 -2,4 -1)) 5|3|0|POLYGON((4 -2,5 -2,5 -3,4 -3,4 -2)) 5|4|9|POLYGON((4 -3,5 -3,5 -4,4 -4,4 -3)) 5|5|0|POLYGON((4 -4,5 -4,5 -5,4 -5,4 -4)) 5|6|11|POLYGON((4 -5,5 -5,5 -6,4 -6,4 -5)) 5|7|0|POLYGON((4 -6,5 -6,5 -7,4 -7,4 -6)) 5|8|13|POLYGON((4 -7,5 -7,5 -8,4 -8,4 -7)) 5|9|0|POLYGON((4 -8,5 -8,5 -9,4 -9,4 -8)) 5|10|15|POLYGON((4 -9,5 -9,5 -10,4 -10,4 -9)) 6|1|7|POLYGON((5 0,6 0,6 -1,5 -1,5 0)) 6|2|0|POLYGON((5 -1,6 -1,6 -2,5 -2,5 -1)) 6|3|9|POLYGON((5 -2,6 -2,6 -3,5 -3,5 -2)) 6|4|0|POLYGON((5 -3,6 -3,6 -4,5 -4,5 -3)) 6|5|11|POLYGON((5 -4,6 -4,6 -5,5 -5,5 -4)) 6|6|0|POLYGON((5 -5,6 -5,6 -6,5 -6,5 -5)) 6|7|13|POLYGON((5 -6,6 -6,6 -7,5 -7,5 -6)) 6|8|0|POLYGON((5 -7,6 -7,6 -8,5 -8,5 -7)) 6|9|15|POLYGON((5 -8,6 -8,6 -9,5 -9,5 -8)) 6|10|0|POLYGON((5 -9,6 -9,6 -10,5 -10,5 -9)) 7|1|0|POLYGON((6 0,7 0,7 -1,6 -1,6 0)) 7|2|9|POLYGON((6 -1,7 -1,7 -2,6 -2,6 -1)) 7|3|0|POLYGON((6 -2,7 -2,7 -3,6 -3,6 -2)) 7|4|11|POLYGON((6 -3,7 -3,7 -4,6 -4,6 -3)) 7|5|0|POLYGON((6 -4,7 -4,7 -5,6 -5,6 -4)) 7|6|13|POLYGON((6 -5,7 -5,7 -6,6 -6,6 -5)) 7|7|0|POLYGON((6 -6,7 -6,7 -7,6 -7,6 -6)) 7|8|15|POLYGON((6 -7,7 -7,7 -8,6 -8,6 -7)) 7|9|0|POLYGON((6 -8,7 -8,7 -9,6 -9,6 -8)) 7|10|17|POLYGON((6 -9,7 -9,7 -10,6 -10,6 -9)) 8|1|9|POLYGON((7 0,8 0,8 -1,7 -1,7 0)) 8|2|0|POLYGON((7 -1,8 -1,8 -2,7 -2,7 -1)) 8|3|11|POLYGON((7 -2,8 -2,8 -3,7 -3,7 -2)) 8|4|0|POLYGON((7 -3,8 -3,8 -4,7 -4,7 -3)) 8|5|13|POLYGON((7 -4,8 -4,8 -5,7 -5,7 -4)) 8|6|0|POLYGON((7 -5,8 -5,8 -6,7 -6,7 -5)) 8|7|15|POLYGON((7 -6,8 -6,8 -7,7 -7,7 -6)) 8|8|0|POLYGON((7 -7,8 -7,8 -8,7 -8,7 -7)) 8|9|17|POLYGON((7 -8,8 -8,8 -9,7 -9,7 -8)) 8|10|0|POLYGON((7 -9,8 -9,8 -10,7 -10,7 -9)) 9|1|0|POLYGON((8 0,9 0,9 -1,8 -1,8 0)) 9|2|11|POLYGON((8 -1,9 -1,9 -2,8 -2,8 -1)) 9|3|0|POLYGON((8 -2,9 -2,9 -3,8 -3,8 -2)) 9|4|13|POLYGON((8 -3,9 -3,9 -4,8 -4,8 -3)) 9|5|0|POLYGON((8 -4,9 -4,9 -5,8 -5,8 -4)) 9|6|15|POLYGON((8 -5,9 -5,9 -6,8 -6,8 -5)) 9|7|0|POLYGON((8 -6,9 -6,9 -7,8 -7,8 -6)) 9|8|17|POLYGON((8 -7,9 -7,9 -8,8 -8,8 -7)) 9|9|0|POLYGON((8 -8,9 -8,9 -9,8 -9,8 -8)) 9|10|19|POLYGON((8 -9,9 -9,9 -10,8 -10,8 -9)) 10|1|11|POLYGON((9 0,10 0,10 -1,9 -1,9 0)) 10|2|0|POLYGON((9 -1,10 -1,10 -2,9 -2,9 -1)) 10|3|13|POLYGON((9 -2,10 -2,10 -3,9 -3,9 -2)) 10|4|0|POLYGON((9 -3,10 -3,10 -4,9 -4,9 -3)) 10|5|15|POLYGON((9 -4,10 -4,10 -5,9 -5,9 -4)) 10|6|0|POLYGON((9 -5,10 -5,10 -6,9 -6,9 -5)) 10|7|17|POLYGON((9 -6,10 -6,10 -7,9 -7,9 -6)) 10|8|0|POLYGON((9 -7,10 -7,10 -8,9 -8,9 -7)) 10|9|19|POLYGON((9 -8,10 -8,10 -9,9 -9,9 -8)) 10|10|0|POLYGON((9 -9,10 -9,10 -10,9 -10,9 -9)) POLYGON((0 0,1 0,1 -1,0 -1,0 0)) POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) POLYGON((-2 2,-1 2,-1 1,-2 1,-2 2)) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_set_band_properties_expected�������������������������0000644�0000000�0000000�00000000000�11722777314�026056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebraexpr_2raster.sql���������������������������0000644�0000000�0000000�00000020164�11727671074�025412� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_mapalgebra; CREATE TABLE raster_mapalgebra ( rid integer, rast raster ); DROP TABLE IF EXISTS raster_mapalgebra_out; CREATE TABLE raster_mapalgebra_out ( rid1 integer, rid2 integer, extent varchar, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO raster_mapalgebra VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 4, 4, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); -- skew SELECT make_test_raster(10, 4, 4, -2, -2, 1, -1); SELECT make_test_raster(11, 2, 2, 0, 0, 1, -1, 2); SELECT make_test_raster(12, 2, 2, 1, -1, 1, -1, 3); SELECT make_test_raster(13, 2, 2, 1, 1, 1, -1, 4); SELECT make_test_raster(14, 2, 2, 2, 2, 1, -1, 5); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); -- INTERSECTION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebraexpr( r1.rast, r2.rast, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'INTERSECTION', st_mapalgebraexpr( r1.rast, r2.rast, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'INTERSECTION', st_mapalgebraexpr( NULL::raster, rast, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'INTERSECTION', st_mapalgebraexpr( rast, NULL::raster, '[rast1.val]', '32BF', 'INTERSECTION' ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'INTERSECTION', st_mapalgebraexpr( NULL::raster, NULL::raster, '[rast1.val]', '32BF', 'INTERSECTION' ) ; -- UNION INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '100', '200', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'UNION', st_mapalgebraexpr( r1.rast, r2.rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '100', '200', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'UNION', st_mapalgebraexpr( NULL::raster, rast, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'UNION', st_mapalgebraexpr( rast, NULL::raster, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'UNION', st_mapalgebraexpr( NULL::raster, NULL::raster, '(([rast1.val] + [rast2.val])/2.)::numeric', '32BF', 'UNION', '[rast2.val]', '[rast1.val]', NULL ) ; -- FIRST INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebraexpr( r1.rast, r2.rast, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'FIRST', st_mapalgebraexpr( r1.rast, r2.rast, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'FIRST', st_mapalgebraexpr( NULL::raster, rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'FIRST', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'FIRST', st_mapalgebraexpr( rast, NULL::raster, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'FIRST', st_mapalgebraexpr( NULL::raster, NULL::raster, 'CASE WHEN [rast2.val] IS NOT NULL THEN NULL ELSE [rast1.val] END', '32BF', 'FIRST', NULL, '[rast1.val]', NULL ) ; -- SECOND INSERT INTO raster_mapalgebra_out (SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebraexpr( r1.rast, r2.rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, 'SECOND', st_mapalgebraexpr( r1.rast, r2.rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra r1 JOIN raster_mapalgebra r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, rid, 'SECOND', st_mapalgebraexpr( NULL::raster, rast, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT rid, NULL AS rid, 'SECOND', st_mapalgebraexpr( rast, NULL::raster, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) FROM raster_mapalgebra ; INSERT INTO raster_mapalgebra_out SELECT NULL AS rid, NULL AS rid, 'SECOND', st_mapalgebraexpr( NULL::raster, NULL::raster, 'CASE WHEN [rast1.val] IS NOT NULL THEN NULL ELSE [rast2.val] END', '32BF', 'SECOND', '[rast2.val]', NULL, NULL ) ; -- output SELECT rid1, rid2, extent, round(upperleftx::numeric, 3) AS upperleftx, round(upperlefty::numeric, 3) AS upperlefty, width, height, round(scalex::numeric, 3) AS scalex, round(scaley::numeric, 3) AS scaley, round(skewx::numeric, 3) AS skewx, round(skewy::numeric, 3) AS skewy, srid, numbands, pixeltype, round(nodatavalue::numeric, 3) AS nodatavalue, round(firstvalue::numeric, 3) AS firstvalue, round(lastvalue::numeric, 3) AS lastvalue FROM ( SELECT rid1, rid2, extent, (ST_Metadata(rast)).*, (ST_BandMetadata(rast, 1)).*, ST_Value(rast, 1, 1, 1) AS firstvalue, ST_Value(rast, 1, ST_Width(rast), ST_Height(rast)) AS lastvalue FROM raster_mapalgebra_out ) AS r; DROP TABLE IF EXISTS raster_mapalgebra; DROP TABLE IF EXISTS raster_mapalgebra_out; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_band.sql���������������������������������������������0000644�0000000�0000000�00000013772�12006552273�021657� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_Value(ST_Band(ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 123.4567, NULL), ARRAY[1]), 3, 3); SELECT ST_Value(ST_Band(ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 1234.567, NULL), 1), 3, 3); SELECT ST_Value(ST_Band(ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 1234.567, NULL)), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0), ARRAY[ ROW(1, '64BF', 1234.5678, NULL), ROW(NULL, '64BF', 987.654321, NULL), ROW(NULL, '64BF', 9876.54321, NULL) ]::addbandarg[] ), ARRAY[1] ), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0), ARRAY[ ROW(1, '64BF', 1234.5678, NULL), ROW(NULL, '64BF', 987.654321, NULL), ROW(NULL, '64BF', 9876.54321, NULL) ]::addbandarg[] ), ARRAY[2] ), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0), ARRAY[ ROW(1, '64BF', 1234.5678, NULL), ROW(NULL, '64BF', 987.654321, NULL), ROW(NULL, '64BF', 9876.54321, NULL) ]::addbandarg[] ), ARRAY[3] ), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0), ARRAY[ ROW(1, '64BF', 1234.5678, NULL), ROW(NULL, '64BF', 987.654321, NULL), ROW(NULL, '64BF', 9876.54321, NULL) ]::addbandarg[] ), 1 ), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), 2 ), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0), ARRAY[ ROW(1, '64BF', 1234.5678, NULL), ROW(NULL, '64BF', 987.654321, NULL), ROW(NULL, '64BF', 9876.54321, NULL) ]::addbandarg[] ), 3 ), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ) ), 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[1,3] ), 1, 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[1,3] ), 2, 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[2,3] ), 1, 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[1,1] ), 2, 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), '1,1' ), 2, 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), '1;1', ';' ), 2, 3, 3); SELECT ST_Value( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ) ), 1, 3, 3); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[1,1,3,3] ) ); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[1,1,3] ) ); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[1,2] ) ); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), ARRAY[3] ) ); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), 2 ) ); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ) ) ); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ) , ARRAY[1,1,3,999]) ); SELECT ST_NumBands( ST_Band( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ) , ARRAY[999]) ); ������postgis-2.1.2+dfsg.orig/raster/test/regress/check_gdal_expected�������������������������������������0000644�0000000�0000000�00000000000�11770700604�023351� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_invdistweight4ma_expected����������������������������0000644�0000000�0000000�00000006253�12036040003�025306� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_value_arrays" does not exist, skipping 1|{{{1,2,3},{4,5,6},{7,8,9}}}|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|0.000000 2|{{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}}|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|0.000000 3|{{{100,101,102,103,104},{105,106,107,108,109},{110,111,112,113,114},{115,116,117,118,119},{120,121,122,123,124}}}|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|112.000000|0.000000 4|{{{15,14,13},{12,11,10},{9,8,7}}}|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|11.000000|0.000000 5|{{{15,14,13,12,11},{10,9,8,7,6},{5,4,3,2,1},{0,-1,-2,-3,-4},{-5,-6,-7,-8,-9}}}|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|3.000000|0.000000 6|{{{1,3,5},{7,9,11},{13,15,17}}}|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|0.000000 7|{{{1,4,7,10,13},{16,19,22,25,28},{31,34,37,40,43},{46,49,52,55,58},{61,64,67,70,73}}}|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|37.000000|0.000000 10|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}}||||||||||||||| 11|{{{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}}||||||||||||||| 12|{{{1,NULL,3},{NULL,5,NULL},{7,NULL,9}}}|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|0.000000 13|{{{1,NULL,3,NULL,5},{NULL,7,NULL,9,NULL},{11,NULL,13,NULL,15},{NULL,17,NULL,19,NULL},{21,NULL,23,NULL,25}}}|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|0.000000 14|{{{NULL,2,NULL},{4,NULL,6},{NULL,8,NULL}}}|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|5.000000|1.000000 15|{{{NULL,2,NULL,4,NULL},{6,NULL,8,NULL,10},{NULL,12,NULL,14,NULL},{16,NULL,18,NULL,20},{NULL,22,NULL,24,NULL}}}|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|13.000000|1.000000 16|{{{1,3.1,5.2},{NULL,NULL,11.5},{13.6,NULL,NULL}}}|6.939697|6.880000|6.909550|6.933641|6.939697|6.933641|6.933641|6.933641|6.933641|6.933641|6.933641|6.933641|6.933641|6.933641|1.000000 17|{{{NULL,3.14,NULL},{NULL,12.56,NULL},{NULL,NULL,25.12}}}|12.560000|12.560000|12.560000|12.560000|12.560000|12.560000|12.546978|12.527446|12.494891|12.462337|12.442804|12.431085|12.429913|12.429783|0.000000 18|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,9}}}|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|9.000000|1.414214 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_metadata_expected������������������������������������0000644�0000000�0000000�00000000042�11722777314�023611� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������||||||||| 10|10|10|10|2|2|0|0|0|1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_astiff.sql�������������������������������������������0000644�0000000�0000000�00000003737�12245413746�022235� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_AsTIFF(NULL) IS NULL; SELECT ST_AsTIFF(NULL, 'JPEG') IS NULL; SELECT CASE WHEN length( ST_AsTIFF( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '64BF', 123.4567, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsTIFF( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsTIFF( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, -9999 ) , '64BF', 987.654321, -9999 ) , '64BF', 9876.54321, -9999 ) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsTIFF( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, -9999 ) , '64BF', 987.654321, -9999 ) , '64BF', 9876.54321, -9999 ) , ARRAY[3] ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsTIFF( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, -9999 ) , '64BF', 987.654321, -9999 ) , '64BF', 9876.54321, -1 ) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsTIFF( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, -1 ) , '64BF', 987.654321, -9999 ) , '64BF', 9876.54321, -9999 ) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsTIFF( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, -9999 ) , '64BF', 987.654321, -9999 ) , '64BF', 9876.54321, -1 ) , 'JPEG90' ) ) > 0 THEN 1 ELSE 0 END; ���������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_fromgdalraster_expected������������������������������0000644�0000000�0000000�00000000562�12123740451�025040� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(0,0,90,90,1,-1,0,0,0,3)|(8100,1479000,182.592592592593,114.982851945091,0,255)|(8100,1479000,182.592592592593,114.982851945091,0,255)|(8100,1453500,179.444444444444,116.438931167192,0,255) 1|(-168,85,10,10,0.083,-0.083,0,0,4269,3)|(100,0,0,0,0,0)|(100,0,0,0,0,0)|(100,0,0,0,0,0) 2|(-168,85,10,10,0.083,-0.083,0,0,4326,3)|(100,0,0,0,0,0)|(100,0,0,0,0,0)|(100,0,0,0,0,0) ����������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/tickets_expected����������������������������������������0000644�0000000�0000000�00000000010�11722777314�022765� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#1485|0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_reclass.sql������������������������������������������0000644�0000000�0000000�00000010013�12250631624�022367� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_Value(t.rast, 1, 2, 10), ST_BandNoDataValue(rast, 1) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', 0, 0 ), 1, 1, 499 ), 10, 10, 12 ), ROW(1, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255) ) AS rast ) AS t; SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_Value(t.rast, 1, 2, 10), ST_BandNoDataValue(rast, 1), ST_Value(t.rast, 2, 1, 1), ST_Value(t.rast, 2, 10, 10), ST_Value(t.rast, 2, 2, 10), ST_BandNoDataValue(rast, 2) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 0, 1 ), 2, '32BUI', 0, 0 ), 2, 1, 1, 499 ), 2, 10, 10, 12 ), ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255) ) AS rast ) AS t; SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_Value(t.rast, 1, 2, 10), ST_BandNoDataValue(rast, 1), ST_Value(t.rast, 2, 1, 1), ST_Value(t.rast, 2, 10, 10), ST_Value(t.rast, 2, 2, 10), ST_BandNoDataValue(rast, 2) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 0, 1 ), 2, '32BUI', 0, 0 ), 2, 1, 1, 499 ), 2, 10, 10, 12 ), ROW(1, '0:1', '8BUI', 255), ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255) ) AS rast ) AS t; SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_BandNoDataValue(rast, 1) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 0, 0 ), 1, 1, 1, 255 ), 1, 10, 10, 0 ), ROW(1, '0-100]:200-255,(100-200]:100-200,(200-255]:0-100', '8BUI', NULL) ) AS rast ) AS t; SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_BandNoDataValue(rast, 1) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(100, 100, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 1, 0 ), 1, 1, 1, 3.14159 ), 1, 10, 10, 2.71828 ), ROW(1, '-10000--100]:1-50,(-100-1000]:50-150,(1000-10000]:150-254', '8BUI', 0) ) AS rast ) AS t; SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_BandNoDataValue(rast, 1) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(100, 100, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 1, 0 ), 1, 1, 1, 3.14159 ), 1, 10, 10, 2.71828 ), ROW(1, '-10000--100]:50-1,(-100-1000]:150-50,(1000-10000]:254-150', '8BUI', 0) ) AS rast ) AS t; SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_BandNoDataValue(rast, 1) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(100, 100, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 1, 0 ), 1, 1, 1, 3.14159 ), 1, 10, 10, 2.71828 ), ROW(1, 'a-100]:50-1,(-100-1000]:150-50,(1000-10000]:254-150', '8BUI', 0) ) AS rast ) AS t; SELECT ST_Value(t.rast, 1, 1, 1), ST_Value(t.rast, 1, 10, 10), ST_BandNoDataValue(rast, 1) FROM ( SELECT ST_Reclass( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(100, 100, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 1, 0 ), 1, 1, 1, 3.14159 ), 1, 10, 10, 2.71828 ), ROW(2, '-10000--100]:50-1,(-100-1000]:150-50,(1000-10000]:254-150', '8BUI', 0) ) AS rast ) AS t; -- ticket #2555 SELECT ST_Value(rast, 1, 2, 2), ST_Value(rast, 1, 3, 3), ST_Value(rast, 1, 4, 4) FROM ( SELECT ST_Reclass( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(5, 5, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 1, -9999 ), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1], [1, 9000, 1, 1, 1], [1, 1, -9000, 1, 1], [1, 1, 1, 9000, 1], [1, 1, 1, 1, 1] ]::double precision[] ), 1, '[-9000-9000]:[-900-900]', '32BF' ) AS rast ) AS t; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_quantile.sql�����������������������������������������0000644�0000000�0000000�00000013551�11774707474�022610� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, FALSE, ARRAY[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]::double precision[] ); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, FALSE, ARRAY[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]::double precision[] ); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, NULL ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, ARRAY[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]::double precision[] ); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, FALSE ); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1 ); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), ARRAY[0.05, 0.95]::double precision[] ); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) ); SELECT round( ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, FALSE, 0.05 )::numeric, 3 ); SELECT round( ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, 0.95 )::numeric, 3 ); SELECT round( ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), FALSE, 0.7 )::numeric, 3 ); SELECT round( ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 0.45 )::numeric, 3 ); SELECT round( ST_Quantile( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 2, 0.45 )::numeric, 3 ); BEGIN; CREATE TEMP TABLE test_quantile ON COMMIT DROP AS SELECT rast.rast FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) AS rast ) AS rast FULL JOIN ( SELECT generate_series(1, 2) AS id ) AS id ON 1 = 1; SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile('test_quantile', 'rast', 1, TRUE, ARRAY[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]::double precision[]); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile('test_quantile', 'rast', 1, TRUE); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile('test_quantile', 'rast', 1, FALSE, ARRAY[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]::double precision[]); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile('test_quantile', 'rast', 1, FALSE); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile('test_quantile', 'rast', 1, ARRAY[0.05, 0.95]::double precision[]); SELECT round(quantile::numeric, 3), round(value::numeric, 3) FROM ST_Quantile('test_quantile', 'rast', ARRAY[0.05, 0.95]::double precision[]); SELECT round(ST_Quantile('test_quantile', 'rast', 1, FALSE, 0.95)::numeric, 3); SELECT round(ST_Quantile('test_quantile', 'rast', 1, 0.95)::numeric, 3); SELECT round(ST_Quantile('test_quantile', 'rast', TRUE, 0.95)::numeric, 3); SELECT round(ST_Quantile('test_quantile', 'rast', 0.5)::numeric, 3); SAVEPOINT test; SELECT round(ST_Quantile('test_quantile', 'rast', 2, 0.5)::numeric, 3); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT round(ST_Quantile('test_quantile1', 'rast', 0.5)::numeric, 3); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT round(ST_Quantile('test_quantile', 'rast2', 1, 0.5)::numeric, 3); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT round(ST_Quantile('test_quantile', 'rast', -1.)::numeric, 3); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; ROLLBACK; �������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_utility.sql������������������������������������������0000644�0000000�0000000�00000036042�12233537203�022447� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_utility_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_utility_test VALUES ( 1, '1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:0,0 srid:9102707 width:1217 height:1156', 26919, 1217, 1156, --- SRID, width, height 5, -5, 782325.5, 26744042.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '00000000000014C0' -- scaleY (float64 -5) || '00000000EBDF2741' -- ipX (float64 782325.5) || '000000A84E817941' -- ipY (float64 26744042.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '27690000' -- SRID (int32 26919 - UTM 19N) || 'C104' -- width (uint16 1217) || '8404' -- height (uint16 1156) )::raster ); INSERT INTO rt_utility_test VALUES ( 2, '1217x1156, ip:782325.5,26744042.5 scale:5,-5 skew:3,3 srid:9102707 width:1217 height:1156', 26919, 1217, 1156, --- SRID, width, height 5, -5, 782325.5, 26744042.5, 3, 3, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '00000000000014C0' -- scaleY (float64 -5) || '00000000EBDF2741' -- ipX (float64 782325.5) || '000000A84E817941' -- ipY (float64 26744042.5) || '0000000000000840' -- skewX (float64 3) || '0000000000000840' -- skewY (float64 3) || '27690000' -- SRID (int32 26919 - UTM 19N) || 'C104' -- width (uint16 1217) || '8404' -- height (uint16 1156) )::raster ); INSERT INTO rt_utility_test VALUES ( 3, '6000x6000, ip:-75,50 scale:0.000833333333333333,-0.000833333333333333 skew:0,0 srid:4326 width:6000 height:6000', 4326, 6000, 6000, --- SRID, width, height 0.000833333333333333, -0.000833333333333333, -75, 50, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '4F1BE8B4814E4B3F' -- scaleX (float64 0.000833333333333333) || '4F1BE8B4814E4BBF' -- scaleY (float64 -0.000833333333333333) || '0000000000C052C0' -- ipX (float64 -75) || '0000000000004940' -- ipY (float64 50) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || 'E6100000' -- SRID (int32 4326) || '7017' -- width (uint16 6000) || '7017' -- height (uint16 6000) )::raster ); INSERT INTO rt_utility_test VALUES ( 4, '6000x6000, ip:-75.5533328537098,49.2824585505576 scale:0.000805965234044584,-0.00080596523404458 skew:0.000211812383858707,0.000211812383858704 srid:4326 width:6000 height:6000', 4326, 6000, 6000, --- SRID, width, height 0.000805965234044584, -0.00080596523404458, -75.5533328537098, 49.2824585505576, 0.000211812383858707, 0.000211812383858704, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '7017' -- width (uint16 6000) || '7017' -- height (uint16 6000) )::raster ); ----------------------------------------------------------------------- -- Test 1 - ST_WorldTorastercoordx(rast raster, xw float8, yw float8) ----------------------------------------------------------------------- SELECT 'test 1.1', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordx(rast, ipx, ipy ), 0) != 1; SELECT 'test 1.2', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordx(rast, scalex * (width - 1) + skewx * (height - 1) + ipx, skewy * (width - 1) + scaley * (height - 1) + ipy ), 0) != width; SELECT 'test 1.3', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordx(rast, scalex * width + skewx * height + ipx, skewy * width + scaley * height + ipy ), 0) != width + 1; ----------------------------------------------------------------------- -- Test 2 - ST_WorldTorastercoordx(rast raster, xw float8) ----------------------------------------------------------------------- SELECT 'test 2.1', id, name FROM rt_utility_test WHERE skewx = 0 and COALESCE(ST_WorldTorastercoordx(rast, ipx ), 0) != 1; SELECT 'test 2.2', id, name FROM rt_utility_test WHERE skewx = 0 and COALESCE(ST_WorldTorastercoordx(rast, scalex * (width - 1) + ipx ), 0) != width; SELECT 'test 2.3', id, name FROM rt_utility_test WHERE skewx = 0 and COALESCE(ST_WorldTorastercoordx(rast, scalex * width + ipx ), 0) != width + 1; SELECT 'test 2.4', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordx(rast, ipx ), 0) != 1; ----------------------------------------------------------------------- -- Test 3 - ST_WorldTorastercoordx(rast raster, pt geometry) ----------------------------------------------------------------------- SELECT 'test 3.1', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordx(rast, st_makepoint( ipx, ipy ) ), 0) != 1; SELECT 'test 3.2', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordx(rast, st_makepoint( scalex * (width - 1) + skewx * (height - 1) + ipx, skewy * (width - 1) + scaley * (height - 1) + ipy ) ), 0) != width; SELECT 'test 3.3', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordx(rast, st_makepoint( scalex * width + skewx * height + ipx, skewy * width + scaley * height + ipy ) ), 0) != width + 1; ----------------------------------------------------------------------- -- Test 4 - ST_WorldTorastercoordy(rast raster, xw float8, yw float8) ----------------------------------------------------------------------- SELECT 'test 4.1', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordy(rast, ipx, ipy ), 0) != 1; SELECT 'test 4.2', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordy(rast, scalex * (width - 1) + skewx * (height - 1) + ipx, skewy * (width - 1) + scaley * (height - 1) + ipy ), 0) != height; SELECT 'test 4.3', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordy(rast, scalex * width + skewx * height + ipx, skewy * width + scaley * height + ipy ), 0) != height + 1; ----------------------------------------------------------------------- -- Test 5 - ST_WorldTorastercoordy(rast raster, yw float8) ----------------------------------------------------------------------- SELECT 'test 5.1', id, name FROM rt_utility_test WHERE skewy = 0 and COALESCE(ST_WorldTorastercoordy(rast, ipy ), 0) != 1; SELECT 'test 5.2', id, name FROM rt_utility_test WHERE skewy = 0 and COALESCE(ST_WorldTorastercoordy(rast, scaley * (height - 1) + ipy ), 0) != height; SELECT 'test 5.3', id, name FROM rt_utility_test WHERE skewy = 0 and COALESCE(ST_WorldTorastercoordy(rast, scaley * height + ipy ), 0) != height + 1; SELECT 'test 5.4', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordy(rast, ipy ), 0) != 1; ----------------------------------------------------------------------- -- Test 6 - ST_WorldTorastercoordy(rast raster, pt geometry) ----------------------------------------------------------------------- SELECT 'test 6.1', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordy(rast, st_makepoint( ipx, ipy ) ), 0) != 1; SELECT 'test 6.2', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordy(rast, st_makepoint( scalex * (width - 1) + skewx * (height - 1) + ipx, skewy * (width - 1) + scaley * (height - 1) + ipy ) ), 0) != height; SELECT 'test 6.3', id, name FROM rt_utility_test WHERE COALESCE(ST_WorldTorastercoordy(rast, st_makepoint( scalex * width + skewx * height + ipx, skewy * width + scaley * height + ipy ) ), 0) != height + 1; ----------------------------------------------------------------------- -- Test 7 - ST_RasterToworldcoordx(rast raster, xr int, yr int) ----------------------------------------------------------------------- SELECT 'test 7.1', id, name FROM rt_utility_test WHERE COALESCE(ST_RasterToworldcoordx(rast, 1, 1), 0)::numeric != ipx::numeric; SELECT 'test 7.2', id, name FROM rt_utility_test WHERE COALESCE(ST_RasterToworldcoordx(rast, width, height), 0)::numeric != (scalex * (width - 1) + skewx * (height - 1) + ipx)::numeric; ----------------------------------------------------------------------- -- Test 8 - ST_RasterToworldcoordx(rast raster, xr int) ----------------------------------------------------------------------- SELECT 'test 8.1', id, name FROM rt_utility_test WHERE skewx = 0 and COALESCE(ST_RasterToworldcoordx(rast, 1), 0)::numeric != ipx::numeric; SELECT 'test 8.2', id, name FROM rt_utility_test WHERE skewx = 0 and COALESCE(ST_RasterToworldcoordx(rast, width), 0)::numeric != (scalex * (width - 1) + ipx)::numeric; SELECT 'test 8.3', id, name FROM rt_utility_test WHERE COALESCE(ST_RasterToworldcoordx(rast, 1), 0)::numeric != ipx::numeric; ----------------------------------------------------------------------- -- Test 9 - ST_RasterToworldcoordy(rast raster, xr int, yr int) ----------------------------------------------------------------------- SELECT 'test 9.1', id, name FROM rt_utility_test WHERE COALESCE(ST_RasterToworldcoordy(rast, 1, 1), 0)::numeric != ipy::numeric; SELECT 'test 9.2', id, name FROM rt_utility_test WHERE round(COALESCE(ST_RasterToworldcoordy(rast, width, height), 0)::numeric, 10) != round((skewy * (width - 1) + scaley * (height - 1) + ipy)::numeric, 10); ----------------------------------------------------------------------- -- Test 10 - ST_RasterToworldcoordy(rast raster, yr int) ----------------------------------------------------------------------- SELECT 'test 10.1', id, name FROM rt_utility_test WHERE skewy = 0 and COALESCE(ST_RasterToworldcoordy(rast, 1, 1), 0)::numeric != ipy::numeric; SELECT 'test 10.2', id, name FROM rt_utility_test WHERE skewy = 0 and COALESCE(ST_RasterToworldcoordy(rast, width, height), 0)::numeric != (scaley * (height - 1) + ipy)::numeric; SELECT 'test 10.3', id, name FROM rt_utility_test WHERE COALESCE(ST_RasterToworldcoordy(rast, 1), 0)::numeric != ipy::numeric; ----------------------------------------------------------------------- -- Test 11 - st_minpossiblevalue(pixtype text) ----------------------------------------------------------------------- SELECT 'test 11.1', st_minpossiblevalue('1BB') = 0.; SELECT 'test 11.2', st_minpossiblevalue('2BUI') = 0.; SELECT 'test 11.3', st_minpossiblevalue('4BUI') = 0.; SELECT 'test 11.4', st_minpossiblevalue('8BUI') = 0.; SELECT 'test 11.5', st_minpossiblevalue('8BSI') < 0.; SELECT 'test 11.6', st_minpossiblevalue('16BUI') = 0.; SELECT 'test 11.7', st_minpossiblevalue('16BSI') < 0.; SELECT 'test 11.8', st_minpossiblevalue('32BUI') = 0.; SELECT 'test 11.9', st_minpossiblevalue('32BSI') < 0.; SELECT 'test 11.10', st_minpossiblevalue('32BF') < 0.; SELECT 'test 11.11', st_minpossiblevalue('64BF') < 0.; DROP TABLE rt_utility_test; ----------------------------------------------------------------------- -- st_summary() ----------------------------------------------------------------------- SELECT ST_Summary( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 1, 0 ) , 2, '32BF', 0, -9999 ) , 3, '16BSI', 0, NULL ) ); SELECT ST_Summary( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0.00001, 0) , 1, '8BUI', 1, 0 ) ); SELECT rid, ST_Summary(rast) FROM raster_outdb_template ORDER BY rid; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_intersects.sql���������������������������������������0000644�0000000�0000000�00000021055�12003307305�023116� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_intersects_rast; DROP TABLE IF EXISTS raster_intersects_geom; CREATE TABLE raster_intersects_rast ( rid integer, rast raster ); CREATE TABLE raster_intersects_geom ( gid integer, geom geometry ); CREATE OR REPLACE FUNCTION make_test_raster(rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', 1, 0); INSERT INTO raster_intersects_rast VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(0, 2, 2, -1, -1); SELECT make_test_raster(1, 2, 2); SELECT make_test_raster(2, 3, 3); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision); INSERT INTO raster_intersects_rast VALUES (10, ( SELECT ST_SetValue(rast, 1, 1, 1, 0) FROM raster_intersects_rast WHERE rid = 1 )); INSERT INTO raster_intersects_rast VALUES (11, ( SELECT ST_SetValue(rast, 1, 2, 1, 0) FROM raster_intersects_rast WHERE rid = 1 )); INSERT INTO raster_intersects_rast VALUES (12, ( SELECT ST_SetValue( ST_SetValue( ST_SetValue(rast, 1, 1, 1, 0), 1, 2, 1, 0 ), 1, 1, 2, 0 ) FROM raster_intersects_rast WHERE rid = 1 )); INSERT INTO raster_intersects_rast VALUES (13, ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue(rast, 1, 1, 1, 0), 1, 2, 1, 0 ), 1, 1, 2, 0 ), 1, 2, 2, 0 ) FROM raster_intersects_rast WHERE rid = 1 )); INSERT INTO raster_intersects_rast VALUES (14, ( SELECT ST_SetUpperLeft(rast, 2, 0) FROM raster_intersects_rast WHERE rid = 1 )); INSERT INTO raster_intersects_rast VALUES (15, ( SELECT ST_SetScale( ST_SetUpperLeft(rast, 0.1, 0.1), 0.4, 0.4 ) FROM raster_intersects_rast WHERE rid = 1 )); INSERT INTO raster_intersects_rast VALUES (16, ( SELECT ST_SetScale( ST_SetUpperLeft(rast, -0.1, 0.1), 0.4, 0.4 ) FROM raster_intersects_rast WHERE rid = 1 )); INSERT INTO raster_intersects_rast VALUES (20, ( SELECT ST_SetUpperLeft(rast, -2, -2) FROM raster_intersects_rast WHERE rid = 2 )); INSERT INTO raster_intersects_rast VALUES (21, ( SELECT ST_SetValue( ST_SetValue( ST_SetValue(rast, 1, 1, 1, 0), 1, 2, 2, 0 ), 1, 3, 3, 0 ) FROM raster_intersects_rast WHERE rid = 20 )); INSERT INTO raster_intersects_rast VALUES (22, ( SELECT ST_SetValue( ST_SetValue( rast, 1, 3, 2, 0 ), 1, 2, 3, 0 ) FROM raster_intersects_rast WHERE rid = 21 )); INSERT INTO raster_intersects_rast VALUES (23, ( SELECT ST_SetValue( ST_SetValue( rast, 1, 3, 1, 0 ), 1, 1, 3, 0 ) FROM raster_intersects_rast WHERE rid = 22 )); INSERT INTO raster_intersects_rast VALUES (30, ( SELECT ST_SetSkew(rast, -0.5, 0.5) FROM raster_intersects_rast WHERE rid = 2 )); INSERT INTO raster_intersects_rast VALUES (31, ( SELECT ST_SetSkew(rast, -1, 1) FROM raster_intersects_rast WHERE rid = 2 )); INSERT INTO raster_intersects_rast VALUES (32, ( SELECT ST_SetSkew(rast, 1, -1) FROM raster_intersects_rast WHERE rid = 2 )); SELECT '1.1', r1.rid, r2.rid, ST_Intersects(r1.rast, NULL, r2.rast, NULL) FROM raster_intersects_rast r1 JOIN raster_intersects_rast r2 ON r1.rid != r2.rid WHERE r1.rid = 0; SELECT '1.2', r1.rid, r2.rid, ST_Intersects(r1.rast, 1, r2.rast, 1) FROM raster_intersects_rast r1 JOIN raster_intersects_rast r2 ON r1.rid != r2.rid WHERE r1.rid = 0; -- point INSERT INTO raster_intersects_geom VALUES ( 1, ( SELECT ST_SetSRID(ST_MakePoint(0, 0), 0) ) ), ( 2, ( SELECT ST_SetSRID(ST_MakePoint(0.1, 0.1), 0) ) ), ( 3, ( SELECT ST_SetSRID(ST_MakePoint(-0.1, -0.1), 0) ) ), ( 4, ( SELECT ST_SetSRID(ST_MakePoint(-1, -1), 0) ) ), ( 5, ( SELECT ST_SetSRID(ST_MakePoint(-1.1, -1), 0) ) ), ( 6, ( SELECT ST_SetSRID(ST_MakePoint(-1, -1.1), 0) ) ), ( 7, ( SELECT ST_SetSRID(ST_MakePoint(-1.5, -1.5), 0) ) ), ( 8, ( SELECT ST_SetSRID(ST_MakePoint(3, 3), 0) ) ); -- multipoint INSERT INTO raster_intersects_geom VALUES ( 11, ( SELECT ST_Collect(geom) FROM raster_intersects_geom WHERE gid BETWEEN 1 AND 10 ) ), ( 12, ( SELECT ST_Collect(geom) FROM raster_intersects_geom WHERE gid BETWEEN 3 AND 10 ) ), ( 13, ( SELECT ST_Collect(geom) FROM raster_intersects_geom WHERE gid BETWEEN 4 AND 10 ) ), ( 14, ( SELECT ST_Collect(geom) FROM raster_intersects_geom WHERE gid BETWEEN 5 AND 10 ) ), ( 15, ( SELECT ST_Collect(geom) FROM raster_intersects_geom WHERE gid BETWEEN 6 AND 10 ) ); -- linestring INSERT INTO raster_intersects_geom VALUES ( 21, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(1, 1), ST_MakePoint(1, 0) ]), 0) ) ), ( 22, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(-1, -1), ST_MakePoint(1, 1), ST_MakePoint(1, 0) ]), 0) ) ), ( 23, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(-1, -1), ST_MakePoint(-1, 1), ST_MakePoint(1, 1), ST_MakePoint(1, -1) ]), 0) ) ), ( 24, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(-1.1, 1.1), ST_MakePoint(1.1, 1.1), ST_MakePoint(1.1, -1.1), ST_MakePoint(-1.1, -1.1), ST_MakePoint(-1.1, 1.1) ]), 0) ) ), ( 25, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(-2, 1), ST_MakePoint(1, 2), ST_MakePoint(2, -1), ST_MakePoint(-1, -2), ST_MakePoint(-2, 1) ]), 0) ) ), ( 26, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(-0.5, 0.5), ST_MakePoint(0, 0.5), ST_MakePoint(0, 0), ST_MakePoint(0, -0.5), ST_MakePoint(-0.5, 0.5) ]), 0) ) ), ( 27, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(0.5, 0.5), ST_MakePoint(1, 1), ST_MakePoint(1, 0), ST_MakePoint(0.5, 0.5) ]), 0) ) ), ( 28, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(1, 1), ST_MakePoint(0, 2), ST_MakePoint(1, 2), ST_MakePoint(1, 1) ]), 0) ) ), ( 29, ( SELECT ST_SetSRID(ST_MakeLine(ARRAY[ ST_MakePoint(0, 2), ST_MakePoint(1, 2), ST_MakePoint(1, 4), ST_MakePoint(0, 2) ]), 0) ) ); -- polygon INSERT INTO raster_intersects_geom VALUES ( 31, ( SELECT ST_MakePolygon(geom) FROM raster_intersects_geom WHERE gid = 24 ) ), ( 32, ( SELECT ST_MakePolygon(geom) FROM raster_intersects_geom WHERE gid = 25 ) ), ( 33, ( SELECT ST_MakePolygon(geom) FROM raster_intersects_geom WHERE gid = 26 ) ), ( 34, ( SELECT ST_MakePolygon(geom) FROM raster_intersects_geom WHERE gid = 27 ) ), ( 35, ( SELECT ST_MakePolygon(geom) FROM raster_intersects_geom WHERE gid = 28 ) ), ( 36, ( SELECT ST_MakePolygon(geom) FROM raster_intersects_geom WHERE gid = 29 ) ); -- multipolygon INSERT INTO raster_intersects_geom VALUES ( 41, ( SELECT ST_Multi(ST_Union(geom)) FROM raster_intersects_geom WHERE gid BETWEEN 31 and 40 ) ), ( 42, ( SELECT ST_Multi(ST_Union(geom)) FROM raster_intersects_geom WHERE gid BETWEEN 32 and 40 ) ), ( 43, ( SELECT ST_Multi(ST_Union(geom)) FROM raster_intersects_geom WHERE gid BETWEEN 33 and 40 ) ), ( 44, ( SELECT ST_Multi(ST_Union(geom)) FROM raster_intersects_geom WHERE gid BETWEEN 34 and 40 ) ), ( 45, ( SELECT ST_Multi(ST_Union(geom)) FROM raster_intersects_geom WHERE gid BETWEEN 35 and 40 ) ), ( 46, ( SELECT ST_Multi(ST_Union(geom)) FROM raster_intersects_geom WHERE gid BETWEEN 36 and 40 ) ); SELECT '2.1', r1.rid, g1.gid, ST_GeometryType(g1.geom), ST_Intersects(r1.rast, g1.geom) FROM raster_intersects_rast r1 CROSS JOIN raster_intersects_geom g1 WHERE r1.rid = 0; SELECT '2.2', r1.rid, g1.gid, ST_GeometryType(g1.geom), ST_Intersects(g1.geom, r1.rast) FROM raster_intersects_rast r1 CROSS JOIN raster_intersects_geom g1 WHERE r1.rid = 0; SELECT '2.3', r1.rid, g1.gid, ST_GeometryType(g1.geom), ST_Intersects(r1.rast, g1.geom) FROM raster_intersects_rast r1 CROSS JOIN raster_intersects_geom g1 WHERE r1.rid = 2; SELECT '2.4', r1.rid, g1.gid, ST_GeometryType(g1.geom), ST_Intersects(g1.geom, r1.rast) FROM raster_intersects_rast r1 CROSS JOIN raster_intersects_geom g1 WHERE r1.rid = 2; SELECT '2.5', r1.rid, g1.gid, ST_GeometryType(g1.geom), ST_Intersects(r1.rast, g1.geom, 1) FROM raster_intersects_rast r1 CROSS JOIN raster_intersects_geom g1 WHERE r1.rid = 0; SELECT '2.6', r1.rid, g1.gid, ST_GeometryType(g1.geom), ST_Intersects(r1.rast, g1.geom, 1) FROM raster_intersects_rast r1 CROSS JOIN raster_intersects_geom g1 WHERE r1.rid = 2; DROP TABLE IF EXISTS raster_intersects_rast; DROP TABLE IF EXISTS raster_intersects_geom; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_histogram_expected�����������������������������������0000644�0000000�0000000�00000004002�11774707474�024035� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-10.000|-3.429|1|0.500 -3.429|3.142|1|0.500 -10.000|-8.357|1|0.010 -8.357|-6.715|0|0.000 -6.715|-5.072|0|0.000 -5.072|-3.429|0|0.000 -3.429|-1.787|0|0.000 -1.787|-0.144|0|0.000 -0.144|1.499|98|0.980 1.499|3.142|1|0.010 -10.000|-8.357|1|0.010 -8.357|-6.715|0|0.000 -6.715|-5.072|0|0.000 -5.072|-3.429|0|0.000 -3.429|-1.787|0|0.000 -1.787|-0.144|0|0.000 -0.144|1.499|98|0.980 1.499|3.142|1|0.010 -10.000|3.142|100|-1.000 -10.000|-7.372|1|0.010 -7.372|-4.743|0|0.000 -4.743|-2.115|0|0.000 -2.115|0.513|98|0.980 0.513|3.142|1|0.010 -10.000|-8.357|1|0.010 -8.357|-6.715|0|0.000 -6.715|-5.072|0|0.000 -5.072|-3.429|0|0.000 -3.429|-1.787|0|0.000 -1.787|-0.144|0|0.000 -0.144|1.499|98|0.980 1.499|3.142|1|0.010 -10.000|-3.429|1|0.500 -3.429|3.142|1|0.500 -10.000|-5.000|1|0.500 -5.000|0.000|0|0.000 0.000|5.000|1|0.500 -10.000|-5.619|1|0.500 -5.619|-1.239|0|0.000 -1.239|3.142|1|0.500 -10.000|-7.372|1|0.500 -7.372|-4.743|0|0.000 -4.743|-2.115|0|0.000 -2.115|0.513|0|0.000 0.513|3.142|1|0.500 NOTICE: Invalid band index (must use 1-based). Returning NULL BEGIN -10.000|-3.429|10|0.500 -3.429|3.142|10|0.500 -10.000|-3.429|10|0.500 -3.429|3.142|10|0.500 -10.000|-8.357|10|0.010 -8.357|-6.715|0|0.000 -6.715|-5.072|0|0.000 -5.072|-3.429|0|0.000 -3.429|-1.787|0|0.000 -1.787|-0.144|0|0.000 -0.144|1.499|980|0.980 1.499|3.142|10|0.010 -10.000|-7.372|10|0.010 -7.372|-4.743|0|0.000 -4.743|-2.115|0|0.000 -2.115|0.513|980|0.980 0.513|3.142|10|0.010 -10.000|-8.686|10|0.500 -8.686|-7.372|0|0.000 -7.372|-6.058|0|0.000 -6.058|-4.743|0|0.000 -4.743|-3.429|0|0.000 -3.429|-2.115|0|0.000 -2.115|-0.801|0|0.000 -0.801|0.513|0|0.000 0.513|1.827|0|0.000 1.827|3.142|10|0.500 -10.000|-5.619|10|0.500 -5.619|-1.239|0|0.000 -1.239|3.142|10|0.500 SAVEPOINT NOTICE: Invalid band index (must use 1-based). Returning NULL ERROR: RASTER_histogramCoverage: Could not get summary stats of coverage COMMIT RELEASE SAVEPOINT ERROR: relation "test1" does not exist at character 20 COMMIT RELEASE SAVEPOINT ERROR: column "rast1" does not exist at character 8 COMMIT RELEASE COMMIT ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelvalue_expected����������������������������������0000644�0000000�0000000�00000001710�12043600701�024170� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: Attempting to get pixel value with out of range raster coordinates: (-2, -2) NOTICE: Attempting to get pixel value with out of range raster coordinates: (-2, -2) NOTICE: Attempting to get pixel value with out of range raster coordinates: (-2, -2) NOTICE: Attempting to get pixel value with out of range raster coordinates: (-2, -2) ERROR: Raster and geometry do not have the same SRID ERROR: Raster and geometry do not have the same SRID NOTICE: Raster do not have a nodata value defined. Set band nodata value first. Nodata value not set. Returning original raster NOTICE: Raster do not have a nodata value defined. Set band nodata value first. Nodata value not set. Returning original raster NOTICE: Raster do not have a nodata value defined. Set band nodata value first. Nodata value not set. Returning original raster NOTICE: Raster do not have a nodata value defined. Set band nodata value first. Nodata value not set. Returning original raster ��������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_nearestvalue_expected��������������������������������0000644�0000000�0000000�00000000164�11774707474�024543� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_nearestvalue" does not exist, skipping 4 0 4 10 10 20 20 4 2 2 2 0 4 4 10 10 18 18 4 4 4 4 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_convexhull.sql���������������������������������������0000644�0000000�0000000�00000006505�12113241772�023134� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS test_raster_convexhull; CREATE TABLE test_raster_convexhull AS SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(9, 9, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0), 2, '8BUI', 1, 0) AS rast; SELECT ST_AsText(ST_ConvexHull(rast)), ST_AsText(ST_MinConvexHull(rast)), ST_AsText(ST_MinConvexHull(rast, 1)), ST_AsText(ST_MinConvexHull(rast, 2)) FROM test_raster_convexhull; UPDATE test_raster_convexhull SET rast = ST_SetValues( rast, 1, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0] ]::double precision[][] ); SELECT ST_AsText(ST_MinConvexHull(rast, 1)) FROM test_raster_convexhull; UPDATE test_raster_convexhull SET rast = ST_SetValues( rast, 1, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0] ]::double precision[][] ); SELECT ST_AsText(ST_MinConvexHull(rast, 1)) FROM test_raster_convexhull; UPDATE test_raster_convexhull SET rast = ST_SetValues( rast, 1, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 1, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0] ]::double precision[][] ); SELECT ST_AsText(ST_MinConvexHull(rast, 1)) FROM test_raster_convexhull; UPDATE test_raster_convexhull SET rast = ST_SetValues( rast, 1, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 1], [0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0] ]::double precision[][] ); SELECT ST_AsText(ST_MinConvexHull(rast, 1)) FROM test_raster_convexhull; UPDATE test_raster_convexhull SET rast = ST_SetValues( rast, 2, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0] ]::double precision[][] ); SELECT ST_AsText(ST_MinConvexHull(rast, 2)), ST_AsText(ST_MinConvexHull(rast)) FROM test_raster_convexhull; UPDATE test_raster_convexhull SET rast = ST_SetValues( rast, 2, 1, 1, ARRAY[ [0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0] ]::double precision[][] ); SELECT ST_AsText(ST_MinConvexHull(rast, 1)), ST_AsText(ST_MinConvexHull(rast, 2)), ST_AsText(ST_MinConvexHull(rast)) FROM test_raster_convexhull; DROP TABLE IF EXISTS test_raster_convexhull; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_tile.sql���������������������������������������������0000644�0000000�0000000�00000006610�12062705632�021702� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_tile; CREATE TABLE raster_tile AS WITH foo AS ( SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast ) SELECT ST_Union(rast) AS rast FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 3, 3, TRUE) AS rast FROM raster_tile ) SELECT 1, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[1], 3, 3, TRUE) AS rast FROM raster_tile ) SELECT 2, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[2, 1], 3, 3, TRUE) AS rast FROM raster_tile ) SELECT 3, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 2, 3, 3, TRUE) AS rast FROM raster_tile ) SELECT 4, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 2, 2, TRUE) AS rast FROM raster_tile ) SELECT 5, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 1, 1, TRUE) AS rast FROM raster_tile ) SELECT 6, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 5, 5, TRUE) AS rast FROM raster_tile ) SELECT 7, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 2, 3, TRUE) AS rast FROM raster_tile ) SELECT 8, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 3, 2, TRUE) AS rast FROM raster_tile ) SELECT 9, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 3, 3) AS rast FROM raster_tile ) SELECT 11, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[1], 3, 3) AS rast FROM raster_tile ) SELECT 12, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[2, 1], 3, 3) AS rast FROM raster_tile ) SELECT 13, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 2, 3, 3) AS rast FROM raster_tile ) SELECT 14, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 2, 2) AS rast FROM raster_tile ) SELECT 15, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 1, 1) AS rast FROM raster_tile ) SELECT 16, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 5, 5) AS rast FROM raster_tile ) SELECT 17, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 2, 3) AS rast FROM raster_tile ) SELECT 18, ST_DumpValues(rast) FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 3, 2) AS rast FROM raster_tile ) SELECT 19, ST_DumpValues(rast) FROM foo; DROP TABLE IF EXISTS raster_tile; ������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_summarystats.sql�������������������������������������0000644�0000000�0000000�00000010636�11774707474�023543� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , TRUE ); SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, NULL ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , TRUE ); SELECT count FROM ST_SummaryStats( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , TRUE ); SELECT count FROM ST_SummaryStats( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , FALSE ); SELECT round(mean::numeric, 3), round(stddev::numeric, 3) FROM ST_SummaryStats( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , TRUE ); SELECT round(mean::numeric, 3), round(stddev::numeric, 3) FROM ST_SummaryStats( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , FALSE ); SELECT round(mean::numeric, 3), round(stddev::numeric, 3) FROM ST_SummaryStats( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 2 ); SELECT ST_ApproxSummaryStats( ST_Clip( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0) , '16BSI'::text, 0, 0 ) , ST_MakeEnvelope(0, 0, 10, 5, 0) ) , 1, true, 0.1 ); SELECT ST_SummaryStats( ST_AddBand( ST_MakeEmptyRaster(10, 0, 0, 0, 1, -1, 0, 0, 0) , '8BUI'::text, 1, 0 ) ); BEGIN; CREATE TEMP TABLE test_summarystats ON COMMIT DROP AS SELECT rast.rast FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) AS rast ) AS rast FULL JOIN ( SELECT generate_series(1, 10) AS id ) AS id ON 1 = 1; SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats('test_summarystats', 'rast', 1, TRUE); SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats('test_summarystats', 'rast', 1, FALSE); SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats('test_summarystats', 'rast', 1); SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats('test_summarystats', 'rast'); SAVEPOINT test; SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats('test_summarystats', 'rast', 2); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats('test1', 'rast'); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT count, round(sum::numeric, 3), round(mean::numeric, 3), round(stddev::numeric, 3), round(min::numeric, 3), round(max::numeric, 3) FROM ST_SummaryStats('test_summarystats', 'rast1'); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; ROLLBACK; ��������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_clip.sql���������������������������������������������0000644�0000000�0000000�00000011606�11766652373�021712� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_clip; CREATE TABLE raster_clip ( rid integer, rast raster ); DROP TABLE IF EXISTS geom_clip; CREATE TABLE geom_clip ( gid integer, geom geometry ); DROP TABLE IF EXISTS raster_clip_out; CREATE TABLE raster_clip_out ( tid integer, rid integer, gid integer, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, -1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO raster_clip VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- Define three rasters -- The first one 1 band with a novalue defined and one pixel set to nodata value SELECT make_test_raster(1, 4, 4, 0, 0, 0, 0, 1, 0); UPDATE raster_clip SET rast = ST_SetValue(rast, 3, 2, NULL) WHERE rid = 1; -- The second one 3 bands with a novalue defined for the first two band but not set for the third band and one pixel set to nodata value in every band SELECT make_test_raster(2, 4, 4, 0, 0, 0, 0, 10, 0); UPDATE raster_clip SET rast = ST_SetValue(rast, 3, 2, NULL) WHERE rid = 2; UPDATE raster_clip SET rast = ST_AddBand(rast, '8BUI'::text, 2, 0) WHERE rid = 2; UPDATE raster_clip SET rast = ST_SetValue(rast, 2, 3, 2, NULL) WHERE rid = 2; UPDATE raster_clip SET rast = ST_AddBand(rast, '8BUI'::text, 3, NULL) WHERE rid = 2; -- The third one 1 band skewed 40 degree, (Can't test this yet as ST_AsRaster() still produces badly aligned raster. See ticket #1574) --SELECT make_test_raster(3, 4, 4, 0, 0, 0, 0, 1, 0); --UPDATE raster_clip SET rast = ST_SetSkew(rast, -0.15, -0.15) WHERE rid = 3; --UPDATE raster_clip SET rast = ST_SetValue(rast, 3, 2, NULL) WHERE rid = 3; -- Add a first polygon small and outside the extent of the raster INSERT INTO geom_clip VALUES (1, ST_Buffer(ST_SetSRID(ST_MakePoint(-1, 1), 0), 0.2)); -- Add a second polygon small, inside the extent of the raster but in the nodata value pixel INSERT INTO geom_clip VALUES (2, ST_Buffer(ST_SetSRID(ST_MakePoint(2.5, -1.5), 0), 0.2)); -- Add a second polygon small but inside the extent of the raster INSERT INTO geom_clip VALUES (3, ST_Buffer(ST_SetSRID(ST_MakePoint(1.5, -1.5), 0), 0.2)); -- Add a third polygon big cutting the raster INSERT INTO geom_clip VALUES (4, ST_Buffer(ST_SetSRID(ST_MakePoint(4, -2.5), 0), 2.8)); -- Add a fourth polygon englobing the two first rasters INSERT INTO geom_clip VALUES (5, ST_Buffer(ST_SetSRID(ST_MakePoint(2, -2), 0), 3)); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); -- Test 1 without trimming, without defining a nodata value INSERT INTO raster_clip_out SELECT 1, rid, gid, ST_Clip(rast, geom, false) FROM raster_clip, geom_clip; -- Test 2 with trimming, without defining a nodata value INSERT INTO raster_clip_out SELECT 2, rid, gid, ST_Clip(rast, geom, true) FROM raster_clip, geom_clip; -- Test 3 without trimming, defining a nodata value INSERT INTO raster_clip_out SELECT 3, rid, gid, ST_Clip(rast, geom, ARRAY[255, 254, 253], false) FROM raster_clip, geom_clip; -- Test 4 with trimming, defining a nodata value INSERT INTO raster_clip_out SELECT 4, rid, gid, ST_Clip(rast, geom, ARRAY[255, 254, 253], true) FROM raster_clip, geom_clip; -- Display the metadata of the resulting rasters SELECT tid, rid, gid, round(upperleftx::numeric, 3) AS upperleftx, round(upperlefty::numeric, 3) AS upperlefty, width, height, round(scalex::numeric, 3) AS scalex, round(scaley::numeric, 3) AS scaley, round(skewx::numeric, 3) AS skewx, round(skewy::numeric, 3) AS skewy, srid, numbands, pixeltype, round(nodatavalue::numeric, 3) AS nodatavalue FROM ( SELECT tid, rid, gid, (ST_Metadata(rast)).*, (ST_BandMetadata(rast, 1)).* FROM raster_clip_out ) AS r; -- Display the pixels and the values of the resulting rasters (raster 1) SELECT tid, rid, gid, (gvxy).x, (gvxy).y, (gvxy).val, ST_AsText((gvxy).geom) geom FROM (SELECT tid, rid, gid, ST_PixelAsPolygons(rast) gvxy FROM raster_clip_out WHERE rid = 1 ) foo ORDER BY 1, 2, 3, 4, 5, 7; -- Display the pixels and the values of the resulting rasters (raster 2, 3 bands) SELECT tid, rid, gid, band, (gvxy).x, (gvxy).y, (gvxy).val, ST_AsText((gvxy).geom) geom FROM (SELECT tid, rid, gid, band, ST_PixelAsPolygons(rast, band) gvxy FROM raster_clip_out, generate_series(1, 3) band WHERE rid = 2 ) foo ORDER BY 1, 2, 3, 4, 5, 6, 8; DROP TABLE IF EXISTS geom_clip; DROP TABLE IF EXISTS raster_clip; DROP TABLE IF EXISTS raster_clip_out; ��������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_asgdalraster_expected��������������������������������0000644�0000000�0000000�00000000040�11722777314�024503� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_samealignment.sql������������������������������������0000644�0000000�0000000�00000010637�12055010074�023564� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0.1) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0.1) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 1, 1, 1, 1, 0, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 1, 1, 1, 1, 0, 0) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0.1, 0.1, 1, 1, 0, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0), ST_MakeEmptyRaster(1, 1, 0.1, 0.1, 1, 1, 0, 0) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1) ) ; SELECT ST_SameAlignment( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0) ), ST_NotSameAlignmentReason( ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1), ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0) ) ; DROP TABLE IF EXISTS raster_alignment_test; CREATE TABLE raster_alignment_test AS (SELECT 1 AS rid, ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 2 AS rid, ST_MakeEmptyRaster(1, 1, 1, 1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 3 AS rid, ST_MakeEmptyRaster(1, 1, 1, -1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 4 AS rid, ST_MakeEmptyRaster(1, 1, -1, 1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 5 AS rid, ST_MakeEmptyRaster(1, 1, -1, -1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 6 AS rid, ST_MakeEmptyRaster(1, 1, 0, -1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 7 AS rid, ST_MakeEmptyRaster(1, 1, 1, 1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 8 AS rid, ST_MakeEmptyRaster(1, 1, 2, 1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 9 AS rid, ST_MakeEmptyRaster(1, 1, 3, 1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 10 AS rid, ST_MakeEmptyRaster(1, 1, 4, 1, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 11 AS rid, ST_MakeEmptyRaster(1, 1, 0.1, 0, 1, 1, 0, 0) AS rast) UNION ALL (SELECT 12 AS rid, ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0) AS rast) UNION ALL (SELECT 13 AS rid, ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, -0.1, 0.1) AS rast) UNION ALL (SELECT 14 AS rid, ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0.1) AS rast) UNION ALL (SELECT 0 AS rid, NULL::raster AS rast) ; SELECT ST_SameAlignment(rast) FROM raster_alignment_test WHERE rid BETWEEN 1 AND 10; SELECT ST_SameAlignment(rast) FROM raster_alignment_test WHERE rid BETWEEN 1 AND 10 OR rid = 11; SELECT ST_SameAlignment(rast) FROM raster_alignment_test WHERE rid BETWEEN 1 AND 10 OR rid = 12; SELECT ST_SameAlignment(rast) FROM raster_alignment_test WHERE rid BETWEEN 1 AND 10 OR rid = 13; SELECT ST_SameAlignment(rast) FROM raster_alignment_test WHERE rid BETWEEN 1 AND 10 OR rid = 14; SELECT ST_SameAlignment(rast) FROM raster_alignment_test WHERE rid != 0; SELECT ST_SameAlignment(rast) FROM raster_alignment_test; DROP TABLE IF EXISTS raster_alignment_test; �������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_invdistweight4ma.sql���������������������������������0000644�0000000�0000000�00000005762�12036040003�024227� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_value_arrays; CREATE TABLE raster_value_arrays ( id integer, val double precision[][] ); CREATE OR REPLACE FUNCTION make_value_array( rows integer DEFAULT 3, columns integer DEFAULT 3, start_val double precision DEFAULT 1, step double precision DEFAULT 1, skip_expr text DEFAULT NULL ) RETURNS double precision[][][] AS $$ DECLARE x int; y int; value double precision; values double precision[][][]; result boolean; expr text; BEGIN value := start_val; values := array_fill(NULL::double precision, ARRAY[1, columns, rows]); FOR y IN 1..columns LOOP FOR x IN 1..rows LOOP IF skip_expr IS NULL OR length(skip_expr) < 1 THEN result := TRUE; ELSE expr := replace(skip_expr, '[v]'::text, value::text); EXECUTE 'SELECT (' || expr || ')::boolean' INTO result; END IF; IF result IS TRUE THEN values[1][y][x] := value; END IF; value := value + step; END LOOP; END LOOP; RETURN values; END; $$ LANGUAGE 'plpgsql'; INSERT INTO raster_value_arrays VALUES (1, make_value_array()), (2, make_value_array(5, 5)), (3, make_value_array(5, 5, 100)), (4, make_value_array(3, 3, 15, -1)), (5, make_value_array(5, 5, 15, -1)), (6, make_value_array(3, 3, 1, 2)), (7, make_value_array(5, 5, 1, 3)), (10, make_value_array(3, 3, 1, 1, '0')), (11, make_value_array(5, 5, 1, 1, '0')), (12, make_value_array(3, 3, 1, 1, '[v] % 2')), (13, make_value_array(5, 5, 1, 1, '[v] % 2')), (14, make_value_array(3, 3, 1, 1, '([v] % 2) = 0')), (15, make_value_array(5, 5, 1, 1, '([v] % 2) = 0')), (16, make_value_array(3, 3, 1, 2.1, '([v] NOT IN (7.3, 9.4, 15.7, 17.8))')), (17, make_value_array(3, 3, 0, 3.14, '([v] IN (3.14, 12.56, 25.12))')), (18, make_value_array(3, 3, 1, 1, '[v] > 8')) ; SELECT id, val, round(st_invdistweight4ma(val, NULL, NULL)::numeric, 6) AS idw1, round(st_invdistweight4ma(val, NULL, '0')::numeric, 6) AS idw2, round(st_invdistweight4ma(val, NULL, '0.5')::numeric, 6) AS idw3, round(st_invdistweight4ma(val, NULL, '0.9')::numeric, 6) AS idw4, round(st_invdistweight4ma(val, NULL, '1')::numeric, 6) AS idw5, round(st_invdistweight4ma(val, NULL, '0.9', '1')::numeric, 6) AS idw6, round(st_invdistweight4ma(val, NULL, '0.9', '0.9')::numeric, 6) AS idw7, round(st_invdistweight4ma(val, NULL, '0.9', '0.75')::numeric, 6) AS idw8, round(st_invdistweight4ma(val, NULL, '0.9', '0.5')::numeric, 6) AS idw9, round(st_invdistweight4ma(val, NULL, '0.9', '0.25')::numeric, 6) AS idw10, round(st_invdistweight4ma(val, NULL, '0.9', '0.1')::numeric, 6) AS idw11, round(st_invdistweight4ma(val, NULL, '0.9', '0.01')::numeric, 6) AS idw12, round(st_invdistweight4ma(val, NULL, '0.9', '0.001')::numeric, 6) AS idw13, round(st_invdistweight4ma(val, NULL, '0.9', '0')::numeric, 6) AS idw14, round(st_mindist4ma(val, NULL)::numeric, 6) AS mindist4ma FROM raster_value_arrays ORDER BY id; DROP TABLE IF EXISTS raster_value_arrays; DROP FUNCTION IF EXISTS make_value_array(integer, integer, double precision, double precision, text); ��������������postgis-2.1.2+dfsg.orig/raster/test/regress/load_outdb-pre.sh���������������������������������������0000755�0000000�0000000�00000002450�12147721424�022755� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" FILERASTER="$DIR/loader/testraster.tif" # special handling for msys CSYS=`uname -o | tr '[:upper:]' '[:lower:]'` if [ "$CSYS" == "msys" ]; then FILERASTER=`cmd //c echo "${FILERASTER}"` fi SQL=" \ DROP TABLE IF EXISTS raster_outdb_template; \ CREATE TABLE raster_outdb_template AS \ SELECT \ 1 AS rid, \ ST_AddBand( \ ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), \ 1, '$FILERASTER'::text, NULL::int[] \ ) AS rast \ UNION ALL \ SELECT \ 2 AS rid, \ ST_AddBand( \ ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), \ '$FILERASTER'::text, NULL::int[] \ ) AS rast \ UNION ALL \ SELECT \ 3 AS rid, \ ST_AddBand( \ ST_AddBand( \ ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), \ 1, '8BUI', 1, 0 \ ), \ '$FILERASTER'::text, ARRAY[2]::int[] \ ) AS rast \ UNION ALL \ SELECT \ 4 AS rid, \ ST_AddBand( \ ST_AddBand( \ ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), \ 1, '8BUI', 1, 0 \ ), \ '$FILERASTER'::text, ARRAY[2]::int[], \ 1, \ 255 \ ) AS rast \ " echo "$SQL" > "$DIR/$TEST-pre.sql" # no longer needed as "clean" test takes care of it #echo "DROP TABLE IF EXISTS raster_outdb_template;" > "$DIR/$TEST-post.sql" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_union_expected���������������������������������������0000644�0000000�0000000�00000016737�12210402370�023157� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_union_in" does not exist, skipping NOTICE: table "raster_union_out" does not exist, skipping COUNT|1|1|1 COUNT|2|1|1 COUNT|3|1|0 COUNT|1|2|1 COUNT|2|2|2 COUNT|3|2|1 COUNT|1|3|0 COUNT|2|3|1 COUNT|3|3|1 FIRST|1|1|1 FIRST|2|1|1 FIRST|1|2|1 FIRST|2|2|1 FIRST|3|2|2 FIRST|2|3|2 FIRST|3|3|2 LAST|1|1|1 LAST|2|1|1 LAST|1|2|1 LAST|2|2|2 LAST|3|2|2 LAST|2|3|2 LAST|3|3|2 MAX|1|1|1 MAX|2|1|1 MAX|1|2|1 MAX|2|2|2 MAX|3|2|2 MAX|2|3|2 MAX|3|3|2 MEAN|1|1|1 MEAN|2|1|1 MEAN|1|2|1 MEAN|2|2|1 MEAN|3|2|2 MEAN|2|3|2 MEAN|3|3|2 MIN|1|1|1 MIN|2|1|1 MIN|1|2|1 MIN|2|2|1 MIN|3|2|2 MIN|2|3|2 MIN|3|3|2 RANGE|2|2|1 SUM|1|1|1 SUM|2|1|1 SUM|1|2|1 SUM|2|2|3 SUM|3|2|2 SUM|2|3|2 SUM|3|3|2 NOTICE: No pixels found for band 1 NOTICE: No pixels found for band 1 NOTICE: No pixels found for band 1 NOTICE: No pixels found for band 1 COUNT|1|1|1 COUNT|2|1|1 COUNT|3|1|1 COUNT|4|1|1 COUNT|5|1|1 COUNT|6|1|1 COUNT|1|2|1 COUNT|2|2|1 COUNT|3|2|1 COUNT|4|2|1 COUNT|5|2|1 COUNT|6|2|1 COUNT|1|3|1 COUNT|2|3|1 COUNT|3|3|1 COUNT|4|3|1 COUNT|5|3|1 COUNT|6|3|1 COUNT|1|4|1 COUNT|2|4|1 COUNT|3|4|1 COUNT|4|4|1 COUNT|5|4|1 COUNT|6|4|1 COUNT|1|5|1 COUNT|2|5|1 COUNT|3|5|1 COUNT|4|5|1 COUNT|5|5|1 COUNT|6|5|1 COUNT|1|6|1 COUNT|2|6|1 COUNT|3|6|1 COUNT|4|6|1 COUNT|5|6|1 COUNT|6|6|1 FIRST|1|1|1 FIRST|2|1|1 FIRST|3|1|1 FIRST|4|1|1 FIRST|5|1|1 FIRST|6|1|1 FIRST|1|2|1 FIRST|2|2|1 FIRST|3|2|1 FIRST|4|2|1 FIRST|5|2|1 FIRST|6|2|1 FIRST|1|3|1 FIRST|2|3|1 FIRST|3|3|1 FIRST|4|3|1 FIRST|5|3|1 FIRST|6|3|1 FIRST|1|4|1 FIRST|2|4|1 FIRST|3|4|1 FIRST|4|4|1 FIRST|5|4|1 FIRST|6|4|1 FIRST|1|5|1 FIRST|2|5|1 FIRST|3|5|1 FIRST|4|5|1 FIRST|5|5|1 FIRST|6|5|1 FIRST|1|6|1 FIRST|2|6|1 FIRST|3|6|1 FIRST|4|6|1 FIRST|5|6|1 FIRST|6|6|1 LAST|1|1|1 LAST|2|1|1 LAST|3|1|1 LAST|4|1|1 LAST|5|1|1 LAST|6|1|1 LAST|1|2|1 LAST|2|2|1 LAST|3|2|1 LAST|4|2|1 LAST|5|2|1 LAST|6|2|1 LAST|1|3|1 LAST|2|3|1 LAST|3|3|1 LAST|4|3|1 LAST|5|3|1 LAST|6|3|1 LAST|1|4|1 LAST|2|4|1 LAST|3|4|1 LAST|4|4|1 LAST|5|4|1 LAST|6|4|1 LAST|1|5|1 LAST|2|5|1 LAST|3|5|1 LAST|4|5|1 LAST|5|5|1 LAST|6|5|1 LAST|1|6|1 LAST|2|6|1 LAST|3|6|1 LAST|4|6|1 LAST|5|6|1 LAST|6|6|1 MAX|1|1|1 MAX|2|1|1 MAX|3|1|1 MAX|4|1|1 MAX|5|1|1 MAX|6|1|1 MAX|1|2|1 MAX|2|2|1 MAX|3|2|1 MAX|4|2|1 MAX|5|2|1 MAX|6|2|1 MAX|1|3|1 MAX|2|3|1 MAX|3|3|1 MAX|4|3|1 MAX|5|3|1 MAX|6|3|1 MAX|1|4|1 MAX|2|4|1 MAX|3|4|1 MAX|4|4|1 MAX|5|4|1 MAX|6|4|1 MAX|1|5|1 MAX|2|5|1 MAX|3|5|1 MAX|4|5|1 MAX|5|5|1 MAX|6|5|1 MAX|1|6|1 MAX|2|6|1 MAX|3|6|1 MAX|4|6|1 MAX|5|6|1 MAX|6|6|1 MEAN|1|1|1 MEAN|2|1|1 MEAN|3|1|1 MEAN|4|1|1 MEAN|5|1|1 MEAN|6|1|1 MEAN|1|2|1 MEAN|2|2|1 MEAN|3|2|1 MEAN|4|2|1 MEAN|5|2|1 MEAN|6|2|1 MEAN|1|3|1 MEAN|2|3|1 MEAN|3|3|1 MEAN|4|3|1 MEAN|5|3|1 MEAN|6|3|1 MEAN|1|4|1 MEAN|2|4|1 MEAN|3|4|1 MEAN|4|4|1 MEAN|5|4|1 MEAN|6|4|1 MEAN|1|5|1 MEAN|2|5|1 MEAN|3|5|1 MEAN|4|5|1 MEAN|5|5|1 MEAN|6|5|1 MEAN|1|6|1 MEAN|2|6|1 MEAN|3|6|1 MEAN|4|6|1 MEAN|5|6|1 MEAN|6|6|1 MIN|1|1|1 MIN|2|1|1 MIN|3|1|1 MIN|4|1|1 MIN|5|1|1 MIN|6|1|1 MIN|1|2|1 MIN|2|2|1 MIN|3|2|1 MIN|4|2|1 MIN|5|2|1 MIN|6|2|1 MIN|1|3|1 MIN|2|3|1 MIN|3|3|1 MIN|4|3|1 MIN|5|3|1 MIN|6|3|1 MIN|1|4|1 MIN|2|4|1 MIN|3|4|1 MIN|4|4|1 MIN|5|4|1 MIN|6|4|1 MIN|1|5|1 MIN|2|5|1 MIN|3|5|1 MIN|4|5|1 MIN|5|5|1 MIN|6|5|1 MIN|1|6|1 MIN|2|6|1 MIN|3|6|1 MIN|4|6|1 MIN|5|6|1 MIN|6|6|1 SUM|1|1|1 SUM|2|1|1 SUM|3|1|1 SUM|4|1|1 SUM|5|1|1 SUM|6|1|1 SUM|1|2|1 SUM|2|2|1 SUM|3|2|1 SUM|4|2|1 SUM|5|2|1 SUM|6|2|1 SUM|1|3|1 SUM|2|3|1 SUM|3|3|1 SUM|4|3|1 SUM|5|3|1 SUM|6|3|1 SUM|1|4|1 SUM|2|4|1 SUM|3|4|1 SUM|4|4|1 SUM|5|4|1 SUM|6|4|1 SUM|1|5|1 SUM|2|5|1 SUM|3|5|1 SUM|4|5|1 SUM|5|5|1 SUM|6|5|1 SUM|1|6|1 SUM|2|6|1 SUM|3|6|1 SUM|4|6|1 SUM|5|6|1 SUM|6|6|1 COUNT|1|1|1 COUNT|2|1|1 COUNT|3|1|0 COUNT|1|2|1 COUNT|2|2|2 COUNT|3|2|1 COUNT|1|3|0 COUNT|2|3|1 COUNT|3|3|1 FIRST|1|1|1 FIRST|2|1|1 FIRST|1|2|1 FIRST|2|2|1 FIRST|3|2|2 FIRST|2|3|2 FIRST|3|3|2 LAST|1|1|1 LAST|2|1|1 LAST|1|2|1 LAST|2|2|2 LAST|3|2|2 LAST|2|3|2 LAST|3|3|2 MAX|1|1|1 MAX|2|1|1 MAX|1|2|1 MAX|2|2|2 MAX|3|2|2 MAX|2|3|2 MAX|3|3|2 MEAN|1|1|1 MEAN|2|1|1 MEAN|1|2|1 MEAN|2|2|1.5 MEAN|3|2|2 MEAN|2|3|2 MEAN|3|3|2 MIN|1|1|1 MIN|2|1|1 MIN|1|2|1 MIN|2|2|1 MIN|3|2|2 MIN|2|3|2 MIN|3|3|2 RANGE|1|1|0 RANGE|2|1|0 RANGE|1|2|0 RANGE|2|2|1 RANGE|3|2|0 RANGE|2|3|0 RANGE|3|3|0 SUM|1|1|1 SUM|2|1|1 SUM|1|2|1 SUM|2|2|3 SUM|3|2|2 SUM|2|3|2 SUM|3|3|2 LAST|1|1|1 LAST|2|1|1 LAST|1|2|1 LAST|2|2|2 LAST|3|2|2 LAST|2|3|2 LAST|3|3|2 COUNT|1|1|1 COUNT|2|1|1 COUNT|3|1|0 COUNT|1|2|1 COUNT|2|2|2 COUNT|3|2|1 COUNT|1|3|0 COUNT|2|3|1 COUNT|3|3|1 FIRST|1|1|1 FIRST|2|1|1 FIRST|1|2|1 FIRST|2|2|1 FIRST|3|2|2 FIRST|2|3|2 FIRST|3|3|2 LAST|1|1|1 LAST|2|1|1 LAST|1|2|1 LAST|2|2|2 LAST|3|2|2 LAST|2|3|2 LAST|3|3|2 MAX|1|1|1 MAX|2|1|1 MAX|1|2|1 MAX|2|2|2 MAX|3|2|2 MAX|2|3|2 MAX|3|3|2 MEAN|1|1|1 MEAN|2|1|1 MEAN|1|2|1 MEAN|2|2|1 MEAN|3|2|2 MEAN|2|3|2 MEAN|3|3|2 MIN|1|1|1 MIN|2|1|1 MIN|1|2|1 MIN|2|2|1 MIN|3|2|2 MIN|2|3|2 MIN|3|3|2 RANGE|2|2|1 SUM|1|1|1 SUM|2|1|1 SUM|1|2|1 SUM|2|2|3 SUM|3|2|2 SUM|2|3|2 SUM|3|3|2 COUNT|1|1|1 COUNT|2|1|1 COUNT|3|1|0 COUNT|1|2|1 COUNT|2|2|2 COUNT|3|2|1 COUNT|1|3|0 COUNT|2|3|1 COUNT|3|3|1 FIRST|1|1|100 FIRST|2|1|100 FIRST|1|2|100 FIRST|2|2|100 FIRST|3|2|200 FIRST|2|3|200 FIRST|3|3|200 LAST|1|1|100 LAST|2|1|100 LAST|1|2|100 LAST|2|2|200 LAST|3|2|200 LAST|2|3|200 LAST|3|3|200 MAX|1|1|100 MAX|2|1|100 MAX|1|2|100 MAX|2|2|200 MAX|3|2|200 MAX|2|3|200 MAX|3|3|200 MEAN|1|1|100 MEAN|2|1|100 MEAN|1|2|100 MEAN|2|2|150 MEAN|3|2|200 MEAN|2|3|200 MEAN|3|3|200 MIN|1|1|100 MIN|2|1|100 MIN|1|2|100 MIN|2|2|100 MIN|3|2|200 MIN|2|3|200 MIN|3|3|200 RANGE|1|1|0 RANGE|2|1|0 RANGE|1|2|0 RANGE|2|2|100 RANGE|3|2|0 RANGE|2|3|0 RANGE|3|3|0 SUM|1|1|100 SUM|2|1|100 SUM|1|2|100 SUM|2|2|300 SUM|3|2|200 SUM|2|3|200 SUM|3|3|200 FIRST-2|-1|1|4|4|1|-1|0|0|0|3 LAST-1|-1|1|4|4|1|-1|0|0|0|3 LAST-2|-1|1|4|4|1|-1|0|0|0|3 MEAN-2|-1|1|4|4|1|-1|0|0|0|3 FIRST-2|1|1|3 FIRST-2|2|1|3 FIRST-2|3|1|4 FIRST-2|4|1|4 FIRST-2|1|2|3 FIRST-2|2|2|1 FIRST-2|3|2|1 FIRST-2|4|2|4 FIRST-2|2|3|1 FIRST-2|3|3|1 FIRST-2|4|3|2 FIRST-2|3|4|2 FIRST-2|4|4|2 LAST-1|1|1|3 LAST-1|2|1|3 LAST-1|3|1|4 LAST-1|4|1|4 LAST-1|1|2|3 LAST-1|2|2|3 LAST-1|3|2|4 LAST-1|4|2|4 LAST-1|2|3|1 LAST-1|3|3|2 LAST-1|4|3|2 LAST-1|3|4|2 LAST-1|4|4|2 LAST-2|1|1|3 LAST-2|2|1|3 LAST-2|3|1|4 LAST-2|4|1|4 LAST-2|1|2|3 LAST-2|2|2|3 LAST-2|3|2|4 LAST-2|4|2|4 LAST-2|2|3|1 LAST-2|3|3|2 LAST-2|4|3|2 LAST-2|3|4|2 LAST-2|4|4|2 MEAN-2|1|1|3 MEAN-2|2|1|3 MEAN-2|3|1|4 MEAN-2|4|1|4 MEAN-2|1|2|3 MEAN-2|2|2|2 MEAN-2|3|2|2 MEAN-2|4|2|4 MEAN-2|2|3|1 MEAN-2|3|3|1 MEAN-2|4|3|2 MEAN-2|3|4|2 MEAN-2|4|4|2 FIRST-2|1|1|300 FIRST-2|2|1|300 FIRST-2|3|1|400 FIRST-2|4|1|400 FIRST-2|1|2|300 FIRST-2|2|2|100 FIRST-2|3|2|100 FIRST-2|4|2|400 FIRST-2|2|3|100 FIRST-2|3|3|100 FIRST-2|4|3|200 FIRST-2|3|4|200 FIRST-2|4|4|200 LAST-1|1|1|300 LAST-1|2|1|300 LAST-1|3|1|400 LAST-1|4|1|400 LAST-1|1|2|300 LAST-1|2|2|300 LAST-1|3|2|400 LAST-1|4|2|400 LAST-1|2|3|100 LAST-1|3|3|200 LAST-1|4|3|200 LAST-1|3|4|200 LAST-1|4|4|200 LAST-2|1|1|300 LAST-2|2|1|300 LAST-2|3|1|400 LAST-2|4|1|400 LAST-2|1|2|300 LAST-2|2|2|300 LAST-2|3|2|400 LAST-2|4|2|400 LAST-2|2|3|100 LAST-2|3|3|200 LAST-2|4|3|200 LAST-2|3|4|200 LAST-2|4|4|200 MEAN-2|1|1|300 MEAN-2|2|1|300 MEAN-2|3|1|400 MEAN-2|4|1|400 MEAN-2|1|2|300 MEAN-2|2|2|200 MEAN-2|3|2|250 MEAN-2|4|2|400 MEAN-2|2|3|100 MEAN-2|3|3|150 MEAN-2|4|3|200 MEAN-2|3|4|200 MEAN-2|4|4|200 FIRST-2|1|1|-1 FIRST-2|2|1|-1 FIRST-2|1|2|-1 FIRST-2|2|2|-1 LAST-1|1|1|-1 LAST-1|2|1|-1 LAST-1|1|2|-1 LAST-1|2|2|-1 LAST-2|1|1|-1 LAST-2|2|1|-1 LAST-2|1|2|-1 LAST-2|2|2|-1 MEAN-2|1|1|-1 MEAN-2|2|1|-1 MEAN-2|1|2|-1 MEAN-2|2|2|-1 -2|4|6|9|1|-1|0|0|0|1 LAST|1|1|5 LAST|2|1|5 LAST|1|2|5 LAST|2|2|5 LAST|3|5|2 LAST|4|5|2 LAST|5|5|3 LAST|6|5|3 LAST|3|6|2 LAST|4|6|2 LAST|5|6|3 LAST|6|6|3 LAST|5|7|1 LAST|6|7|1 LAST|2|8|4 LAST|3|8|4 LAST|5|8|1 LAST|6|8|1 LAST|2|9|4 LAST|3|9|4 ���������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_asraster.sql�����������������������������������������0000644�0000000�0000000�00000030160�11727671074�022577� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_asraster_geom; DROP TABLE IF EXISTS raster_asraster_rast; DROP TABLE IF EXISTS raster_asraster_dst; CREATE TABLE raster_asraster_geom ( geom geometry ); CREATE TABLE raster_asraster_rast ( rast raster ); CREATE TABLE raster_asraster_dst ( rid varchar, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 10; height int := 10; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, -500000, 600000, 1000, -1000, 0, 0, 992163); rast := ST_AddBand(rast, 1, '64BF', 0, 0); FOR x IN 1..width LOOP FOR y IN 1..height LOOP rast := ST_SetValue(rast, 1, x, y, ((x::double precision * y) + (x + y) + (x + y * x)) / (x + y + 1)); END LOOP; END LOOP; INSERT INTO raster_asraster_rast VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION make_test_raster(); DELETE FROM "spatial_ref_sys" WHERE srid = 992163; DELETE FROM "spatial_ref_sys" WHERE srid = 993309; DELETE FROM "spatial_ref_sys" WHERE srid = 993310; DELETE FROM "spatial_ref_sys" WHERE srid = 994269; INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (992163,'EPSG',2163,'PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6370997,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","2163"]]','+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (993309,'EPSG',3309,'PROJCS["NAD27 / California Albers",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3309"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (993310,'EPSG',3310,'PROJCS["NAD83 / California Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3310"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (994269,'EPSG',4269,'GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]','+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs '); INSERT INTO raster_asraster_geom VALUES ( ST_GeomFromText('MULTIPOLYGON(((-172210.499109288 114987.660953018,-175453.086381862 29201.5994536821,-151944.038528546 28257.4637483698,-151755.193144738 64618.6592845297,-129779.244489461 63766.2346307114,-132720.730482521 29365.7452160339,-110176.183408147 28076.2457866343,-113336.283431208 112064.985603184,-135659.619600536 112878.300914729,-134301.95687566 79576.8821948012,-153850.618867315 80395.4252778995,-151346.215838074 112678.410158427,-172210.499109288 114987.660953018)),((-86135.5150847774 77502.7616508612,-87105.1850870571 30678.0039829779,-69362.3449961895 29072.3373203999,-70858.5814585458 78310.0439012805,-86135.5150847774 77502.7616508612)),((-86888.5102830273 96546.8546876945,-86065.7795470885 84169.9977753228,-70801.2145468401 84976.5822106288,-72118.6159803197 97829.7405064492,-86888.5102830273 96546.8546876945)),((-50136.8809020698 111909.445130098,-48631.3614059008 44728.8885465469,-36172.0195739627 45621.806341459,-39695.018962698 109480.225649309,-50136.8809020698 111909.445130098)),((-47695.3501850868 40894.9976787795,-47761.6362577873 29399.0052930373,-34799.4262271112 30293.0638067261,-35717.8219710071 39877.2161100041,-47695.3501850868 40894.9976787795)))', 993310) ); -- scale or width & height, pixtype, value and nodata INSERT INTO raster_asraster_dst (rid, rast) VALUES ( 1.0, (SELECT ST_AsRaster( NULL, 100, 100 )) ), ( 1.1, (SELECT ST_AsRaster( geom, 100, 100 ) FROM raster_asraster_geom) ), ( 1.2, (SELECT ST_AsRaster( geom, 100., -100. ) FROM raster_asraster_geom) ), ( 1.3, (SELECT ST_AsRaster( geom, 500, 500 ) FROM raster_asraster_geom) ), ( 1.4, (SELECT ST_AsRaster( geom, 1000., -1000. ) FROM raster_asraster_geom) ), ( 1.5, (SELECT ST_AsRaster( geom, 1000., -1000., '8BSI' ) FROM raster_asraster_geom) ), ( 1.6, (SELECT ST_AsRaster( geom, 1000., -1000., '16BUI' ) FROM raster_asraster_geom) ), ( 1.7, (SELECT ST_AsRaster( geom, 100., -100., '32BF' ) FROM raster_asraster_geom) ), ( 1.8, (SELECT ST_AsRaster( geom, 1000., -1000., ARRAY['8BSI'] ) FROM raster_asraster_geom) ), ( 1.9, (SELECT ST_AsRaster( geom, 1000., -1000., ARRAY['16BUI'] ) FROM raster_asraster_geom) ), ( 1.10, (SELECT ST_AsRaster( geom, 1000., -1000., ARRAY['32BF'] ) FROM raster_asraster_geom) ), ( 1.11, (SELECT ST_AsRaster( geom, 100, 100, ARRAY['8BSI'] ) FROM raster_asraster_geom) ), ( 1.12, (SELECT ST_AsRaster( geom, 100, 100, '16BUI' ) FROM raster_asraster_geom) ), ( 1.13, (SELECT ST_AsRaster( geom, 100, 100, ARRAY['32BF'], ARRAY[255] ) FROM raster_asraster_geom) ), ( 1.14, (SELECT ST_AsRaster( geom, 100, 100, ARRAY['32BF'], ARRAY[255], ARRAY[1] ) FROM raster_asraster_geom) ), ( 1.15, (SELECT ST_AsRaster( geom, 100, 100, ARRAY['32BF'], ARRAY[255], NULL ) FROM raster_asraster_geom) ), ( 1.16, (SELECT ST_AsRaster( geom, 100, 100, ARRAY['32BF'], ARRAY[255], ARRAY[NULL]::double precision[] ) FROM raster_asraster_geom) ), ( 1.17, (SELECT ST_AsRaster( geom, 1000., -1000., ARRAY['32BF', '16BUI'], ARRAY[255, 1], ARRAY[NULL, 0]::double precision[] ) FROM raster_asraster_geom) ), ( 1.18, (SELECT ST_AsRaster( geom, 10, 10, ARRAY['8BUI', '16BUI'], ARRAY[255, 255], ARRAY[0, NULL]::double precision[] ) FROM raster_asraster_geom) ), ( 1.19, (SELECT ST_AsRaster( geom, 1000., -1000., ARRAY['32BF', '16BUI', '64BF'], ARRAY[255, 1, -1], ARRAY[NULL, 0, NULL]::double precision[] ) FROM raster_asraster_geom) ), ( 1.20, (SELECT ST_AsRaster( geom, 1000., -1000., ARRAY['1BB', '2BUI'], ARRAY[1, 1], ARRAY[1, 0]::double precision[] ) FROM raster_asraster_geom) ); -- upper left INSERT INTO raster_asraster_dst (rid, rast) VALUES ( 2.0, (SELECT ST_AsRaster( NULL, 1000., -1000., '8BUI', 255, 0, -175453 )) ), ( 2.1, (SELECT ST_AsRaster( geom, 1000., -1000., '8BUI', 255, 0, -175453 ) FROM raster_asraster_geom) ), ( 2.2, (SELECT ST_AsRaster( geom, 1000., -1000., '8BUI', 255, 0, -175400, 115000 ) FROM raster_asraster_geom) ), ( 2.3, (SELECT ST_AsRaster( geom, 1000., -1000., '8BUI', 255, 0, -170000, 114988 ) FROM raster_asraster_geom) ), ( 2.4, (SELECT ST_AsRaster( geom, 1000., -1000., '8BUI', 255, 0, -170000, 110000 ) FROM raster_asraster_geom) ), ( 2.5, (SELECT ST_AsRaster( geom, 1000., -1000., '8BUI', 255, 0, -179000, 119000 ) FROM raster_asraster_geom) ), ( 2.6, (SELECT ST_AsRaster( geom, 100, 100, '8BUI', 255, 0, -179000, 119000 ) FROM raster_asraster_geom) ), ( 2.7, (SELECT ST_AsRaster( geom, 100, 100, ARRAY['8BUI'], ARRAY[255], ARRAY[0], -179000, 119000 ) FROM raster_asraster_geom) ); -- skew INSERT INTO raster_asraster_dst (rid, rast) VALUES ( 3.0, (SELECT ST_AsRaster( NULL, 100, 100, '8BUI', 255, 0, NULL, NULL, 0 )) ), ( 3.1, (SELECT ST_AsRaster( geom, 100, 100, '8BUI', 255, 0, NULL, NULL, 0 ) FROM raster_asraster_geom) ), ( 3.2, (SELECT ST_AsRaster( geom, 100, 100, '8BUI', 255, 0, NULL, NULL, 0, 0 ) FROM raster_asraster_geom) ), ( 3.3, (SELECT ST_AsRaster( geom, 100, 100, '8BUI', 255, 0, NULL, NULL, 1, 0 ) FROM raster_asraster_geom) ), ( 3.4, (SELECT ST_AsRaster( geom, 100, 100, '8BUI', 255, 0, NULL, NULL, 0, 1 ) FROM raster_asraster_geom) ), ( 3.5, (SELECT ST_AsRaster( geom, 100, 100, '8BUI', 255, 0, NULL, NULL, 10, -5 ) FROM raster_asraster_geom) ), ( 3.6, (SELECT ST_AsRaster( geom, 100, 100, '8BUI', 255, 0, NULL, NULL, -5, 10 ) FROM raster_asraster_geom) ); -- snap to grid INSERT INTO raster_asraster_dst (rid, rast) VALUES ( 4.0, ( SELECT ST_AsRaster( NULL, rast ) FROM raster_asraster_rast ) ), ( 4.1, ( SELECT ST_AsRaster( geom, rast ) FROM raster_asraster_geom, raster_asraster_rast ) ), ( 4.2, ( SELECT ST_AsRaster( geom, rast, '64BF' ) FROM raster_asraster_geom, raster_asraster_rast ) ), ( 4.3, ( SELECT ST_AsRaster( geom, rast, '16BUI', 13 ) FROM raster_asraster_geom, raster_asraster_rast ) ), ( 4.4, ( SELECT ST_AsRaster( geom, rast, '16BUI', 13, NULL ) FROM raster_asraster_geom, raster_asraster_rast ) ), ( 4.5, ( SELECT ST_AsRaster( geom, rast, ARRAY['16BUI'], ARRAY[13] ) FROM raster_asraster_geom, raster_asraster_rast ) ), ( 4.6, ( SELECT ST_AsRaster( geom, rast, ARRAY['16BUI'], ARRAY[13], ARRAY[NULL]::double precision[] ) FROM raster_asraster_geom, raster_asraster_rast ) ), ( 4.7, ( SELECT ST_AsRaster( geom, rast, ARRAY['16BUI'], ARRAY[13], ARRAY[0] ) FROM raster_asraster_geom, raster_asraster_rast ) ), ( 4.8, (SELECT ST_AsRaster( geom, 1000., -1000., 0, 0, ARRAY['16BUI'], ARRAY[13], ARRAY[0] ) FROM raster_asraster_geom) ), ( 4.9, (SELECT ST_AsRaster( geom, 1000., -1000., -175453, 114987, ARRAY['16BUI'], ARRAY[13], ARRAY[0] ) FROM raster_asraster_geom) ), ( 4.10, (SELECT ST_AsRaster( geom, 1000., -1000., -100, 100, ARRAY['16BUI'], ARRAY[13], ARRAY[0] ) FROM raster_asraster_geom) ), ( 4.11, (SELECT ST_AsRaster( geom, 1000., -1000., -100, 100, '16BUI', 13, 0 ) FROM raster_asraster_geom) ); SELECT rid, srid, width, height, numbands, round(scalex::numeric, 3) AS scalex, round(scaley::numeric, 3) AS scaley, round(skewx::numeric, 3) AS skewx, round(skewy::numeric, 3) AS skewy, round(upperleftx::numeric, 3) AS upperleftx, round(upperlefty::numeric, 3) AS upperlefty, pixeltype, round(nodatavalue::numeric, 3) AS nodatavalue, count > 0 AS count_check, round(min::numeric, 3) AS min, round(max::numeric, 3) AS max, same_alignment FROM ( SELECT d.rid, (ST_MetaData(d.rast)).*, (ST_SummaryStats(d.rast)).*, (ST_BandMetaData(d.rast)).*, CASE WHEN d.rid LIKE '4.%' THEN ST_SameAlignment(ST_Transform(d.rast, 992163), r.rast) ELSE NULL END AS same_alignment FROM raster_asraster_dst d CROSS JOIN raster_asraster_rast r ORDER BY d.rid ) foo; DELETE FROM "spatial_ref_sys" WHERE srid = 992163; DELETE FROM "spatial_ref_sys" WHERE srid = 993309; DELETE FROM "spatial_ref_sys" WHERE srid = 993310; DELETE FROM "spatial_ref_sys" WHERE srid = 994269; DROP TABLE raster_asraster_geom; DROP TABLE raster_asraster_rast; DROP TABLE raster_asraster_dst; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_dimensions.sql���������������������������������������0000644�0000000�0000000�00000013222�12233537203�023107� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_properties_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_properties_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 10, 10, 20, --- SRID, width, height 2, 3, 0.5, 0.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_properties_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 12, 1, 1, --- SRID, width, height 5, 5, 2.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 1, 1, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '000000000000F03F' -- skewX (float64 1) || '000000000000F03F' -- skewY (float64 1) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 3, 7, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000840' -- skewX (float64 3) || '0000000000001C40' -- skewY (float64 7) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- --- st_width ----------------------------------------------------------------------- SELECT id, name, width FROM rt_properties_test WHERE st_width(rast) != width; ----------------------------------------------------------------------- --- st_height ----------------------------------------------------------------------- SELECT id, name, height FROM rt_properties_test WHERE st_height(rast) != height; DROP TABLE rt_properties_test; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_isempty_expected�������������������������������������0000644�0000000�0000000�00000000002�11722777314�023517� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������f ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_setvalues_array.sql����������������������������������0000644�0000000�0000000�00000010665�12022516621�024155� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_setvalues_rast; DROP TABLE IF EXISTS raster_setvalues_out; CREATE TABLE raster_setvalues_rast ( rid integer, rast raster ); CREATE TABLE raster_setvalues_out ( rid integer, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster(rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', 1, 0); INSERT INTO raster_setvalues_rast VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(0, 5, 3); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision); INSERT INTO raster_setvalues_out VALUES ( 1, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[10]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 2, ( SELECT ST_SetValues( rast, 1, 2, 1, ARRAY[10]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 3, ( SELECT ST_SetValues( rast, 1, 3, 1, ARRAY[10]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 4, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[10, 10]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 5, ( SELECT ST_SetValues( rast, 1, 2, 2, ARRAY[10, 10]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 6, ( SELECT ST_SetValues( rast, 1, 3, 3, ARRAY[10, 10, 10]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 7, ( SELECT ST_SetValues( rast, 1, 4, 3, ARRAY[10, 10, 10]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 8, ( SELECT ST_SetValues( rast, 1, 2, 1, ARRAY[[5, 5, 5, 5], [6, 6, 6, 6]]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 9, ( SELECT ST_SetValues( rast, 1, 2, 1, ARRAY[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, NULL]]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 10, ( SELECT ST_SetValues( rast, 1, 2, 1, ARRAY[[5, 5, 5, 5, 10], [6, 6, 6, 6, 10], [7, 7, 7, NULL, 10]]::double precision[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 11, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[10, 10, 10]::double precision[], ARRAY[false, true]::boolean[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 12, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[NULL, 10, 0]::double precision[], ARRAY[false, NULL, false]::boolean[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 13, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[NULL, 10, 0]::double precision[], ARRAY[false, NULL, true]::boolean[] ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 21, ( SELECT ST_SetValues( rast, 1, 1, 1, 5, 3, 100 ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 22, ( SELECT ST_SetValues( rast, 1, 1, 1, 5, 3, NULL ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 23, ( SELECT ST_SetValues( rast, 1, 1, 1, 5, 3, 0 ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 31, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[-1, 31, -1]::double precision[], -1::double precision ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 32, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[[-1, 32, -1], [32, -1, 32]]::double precision[], -1::double precision ) FROM raster_setvalues_rast )); INSERT INTO raster_setvalues_out VALUES ( 33, ( SELECT ST_SetValues( rast, 1, 1, 1, ARRAY[[NULL, 33, NULL], [33, NULL, 33]]::double precision[], NULL::double precision ) FROM raster_setvalues_rast )); SELECT rid, (poly).x, (poly).y, (poly).val FROM ( SELECT rid, ST_PixelAsPolygons(rast) AS poly FROM raster_setvalues_out ) AS foo ORDER BY 1, 2, 3; DROP TABLE IF EXISTS raster_setvalues_rast; DROP TABLE IF EXISTS raster_setvalues_out; ���������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_quantile_expected������������������������������������0000644�0000000�0000000�00000003134�11774707474�023667� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0.000|-10.000 0.100|0.000 0.200|0.000 0.300|0.000 0.400|0.000 0.500|0.000 0.600|0.000 0.700|0.000 0.800|0.000 0.900|0.000 1.000|3.142 0.000|-10.000 0.100|0.000 0.200|0.000 0.300|0.000 0.400|0.000 0.500|0.000 0.600|0.000 0.700|0.000 0.800|0.000 0.900|0.000 1.000|3.142 0.000|-10.000 0.100|0.000 0.200|0.000 0.300|0.000 0.400|0.000 0.500|0.000 0.600|0.000 0.700|0.000 0.800|0.000 0.900|0.000 1.000|3.142 0.000|-10.000 0.250|0.000 0.500|0.000 0.750|0.000 1.000|3.142 0.000|-10.000 0.250|-6.715 0.500|-3.429 0.750|-0.144 1.000|3.142 0.050|-9.343 0.950|2.485 0.000|-10.000 0.250|-6.715 0.500|-3.429 0.750|-0.144 1.000|3.142 0.000 2.485 0.000 -4.086 NOTICE: Invalid band index (must use 1-based). Returning NULL BEGIN 0.000|-10.000 0.100|-10.000 0.200|-10.000 0.300|-10.000 0.400|3.142 0.500|3.142 0.600|3.142 0.700|3.142 0.800|3.142 0.900|3.142 1.000|3.142 0.000|-10.000 0.250|-10.000 0.500|3.142 0.750|3.142 1.000|3.142 0.000|-10.000 0.100|0.000 0.200|0.000 0.300|0.000 0.400|0.000 0.500|0.000 0.600|0.000 0.700|0.000 0.800|0.000 0.900|0.000 1.000|3.142 0.000|-10.000 0.250|0.000 0.500|0.000 0.750|0.000 1.000|3.142 0.050|-10.000 0.950|3.142 0.050|-10.000 0.950|3.142 0.000 3.142 3.142 3.142 SAVEPOINT NOTICE: Invalid band index (must use 1-based). Returning NULL ERROR: RASTER_quantileCoverage: Could not get summary stats of coverage COMMIT RELEASE SAVEPOINT ERROR: relation "test_quantile1" does not exist at character 20 COMMIT RELEASE SAVEPOINT ERROR: column "rast2" does not exist at character 8 COMMIT RELEASE SAVEPOINT NOTICE: Invalid value for quantile (must be between 0 and 1). Returning NULL COMMIT RELEASE COMMIT ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelsize.sql����������������������������������������0000644�0000000�0000000�00000013354�12233537203�022761� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2011 David Zwarg <dzwarg@azavea.com> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_properties_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_properties_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 10, 10, 20, --- SRID, width, height 2, 3, 0.5, 0.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_properties_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 12, 1, 1, --- SRID, width, height 5, 5, 2.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 1, 1, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '000000000000F03F' -- skewX (float64 1) || '000000000000F03F' -- skewY (float64 1) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 3, 7, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000840' -- skewX (float64 3) || '0000000000001C40' -- skewY (float64 7) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- -- st_pixelwidth ----------------------------------------------------------------------- SELECT id, name, scalex, skewy FROM rt_properties_test WHERE NOT sqrt(scalex*scalex + skewy*skewy) = st_pixelwidth(rast); ----------------------------------------------------------------------- -- st_pixelheight ----------------------------------------------------------------------- SELECT id, name, scaley, skewx FROM rt_properties_test WHERE NOT sqrt(scaley*scaley + skewx*skewx) = st_pixelheight(rast); DROP TABLE rt_properties_test; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_histogram.sql����������������������������������������0000644�0000000�0000000�00000013252�11774707474�022761� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, NULL ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, FALSE, 0, ARRAY[]::double precision[], FALSE ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, FALSE, 1, FALSE ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, FALSE, 5 ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, FALSE ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1 ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, 0, ARRAY[5]::double precision[], FALSE ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, 3, FALSE ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 1, 5 ); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ), 2 ); BEGIN; CREATE TEMP TABLE test_histogram ON COMMIT DROP AS SELECT rast.rast FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) AS rast ) AS rast FULL JOIN ( SELECT generate_series(1, 10) AS id ) AS id ON 1 = 1; SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast', 1, TRUE, 0, NULL, FALSE); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast', 1, TRUE, 0, NULL, FALSE); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast', 1, FALSE); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast', 1, FALSE, 5, FALSE); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast', 1, 10); SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast', 1, 3, FALSE); SAVEPOINT test; SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast', 2, TRUE, 0, NULL, FALSE); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test1', 'rast', 1, TRUE, 0, NULL, FALSE); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; SAVEPOINT test; SELECT round(min::numeric, 3), round(max::numeric, 3), count, round(percent::numeric, 3) FROM ST_Histogram('test_histogram', 'rast1', 1, TRUE, 0, NULL, FALSE); ROLLBACK TO SAVEPOINT test; RELEASE SAVEPOINT test; ROLLBACK; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/bug_test_car5_expected����������������������������������0000644�0000000�0000000�00000000524�11722777314�024057� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN NOTICE: SRID value -1 converted to the officially unknown SRID value 0 at character 41 NOTICE: SRID value -1 converted to the officially unknown SRID value 0 at character 41 NOTICE: SRID value -1 converted to the officially unknown SRID value 0 at character 41 1|5|5|8BUI|8BUI|8BUI 2|5|5|8BUI|8BUI|8BUI 3|5|5|8BUI|8BUI|8BUI COMMIT ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_upperleft.sql����������������������������������������0000644�0000000�0000000�00000013342�12233537203�022750� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_properties_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_properties_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 10, 10, 20, --- SRID, width, height 2, 3, 0.5, 0.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_properties_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 12, 1, 1, --- SRID, width, height 5, 5, 2.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 1, 1, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '000000000000F03F' -- skewX (float64 1) || '000000000000F03F' -- skewY (float64 1) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 3, 7, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000840' -- skewX (float64 3) || '0000000000001C40' -- skewY (float64 7) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- -- st_upperleftx ----------------------------------------------------------------------- SELECT id, name, ipx, st_upperleftx(rast) as ipx_expected FROM rt_properties_test WHERE st_upperleftx(rast) != ipx; ----------------------------------------------------------------------- -- st_upperlefty ----------------------------------------------------------------------- SELECT id, name, ipy, st_upperlefty(rast) as ipy_expected FROM rt_properties_test WHERE st_upperlefty(rast) != ipy; DROP TABLE rt_properties_test; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebra.sql���������������������������������������0000644�0000000�0000000�00000035427�12037335666�023060� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_nmapalgebra_in; CREATE TABLE raster_nmapalgebra_in ( rid integer, rast raster ); INSERT INTO raster_nmapalgebra_in SELECT 0, NULL::raster AS rast UNION ALL SELECT 1, ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0) AS rast UNION ALL SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 3, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '32BF', 20, 0) AS rast UNION ALL SELECT 4, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '32BF', 20, 0), 3, '16BUI', 200, 0) AS rast ; CREATE OR REPLACE FUNCTION raster_nmapalgebra_test( value double precision[][][], pos int[][], VARIADIC userargs text[] ) RETURNS double precision AS $$ BEGIN RAISE NOTICE 'value = %', value; RAISE NOTICE 'pos = %', pos; RAISE NOTICE 'userargs = %', userargs; IF userargs IS NULL OR array_length(userargs, 1) < 1 THEN RETURN 255; ELSE RETURN userargs[array_lower(userargs, 1)]; END IF; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; SET client_min_messages TO notice; SELECT rid, ST_Value( ST_MapAlgebra( ARRAY[ROW(rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ), 1, 1, 1 ) = 255 FROM raster_nmapalgebra_in WHERE rid IN (0, 1); SELECT rid, ST_Value( ST_MapAlgebra( ARRAY[ROW(rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ), 1, 1, 1 ) = 255 FROM raster_nmapalgebra_in WHERE rid IN (2,3,4); SELECT rid, round(ST_Value( ST_MapAlgebra( ARRAY[ROW(rast, 2)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, NULL, 'INTERSECTION', NULL, 0, 0, '3.14' ), 1, 1, 1 )::numeric, 2) = 3.14 FROM raster_nmapalgebra_in WHERE rid IN (3,4); WITH foo AS ( SELECT rid, ST_MapAlgebra( ARRAY[ROW(rast, 3)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '8BUI', 'INTERSECTION', NULL, 1, 1 ) AS rast FROM raster_nmapalgebra_in WHERE rid IN (3,4) ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) FROM foo; INSERT INTO raster_nmapalgebra_in SELECT 10, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL SELECT 11, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL SELECT 12, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast UNION ALL SELECT 13, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast UNION ALL SELECT 14, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast UNION ALL SELECT 15, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast UNION ALL SELECT 16, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast UNION ALL SELECT 17, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast UNION ALL SELECT 18, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast ; DO $$ DECLARE r record; BEGIN -- this ONLY works for PostgreSQL version 9.1 or higher IF array_to_string(regexp_matches(split_part(version(), ' ', 2), E'([0-9]+)\.([0-9]+)'), '')::int > 90 THEN WITH foo AS ( SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 10 AND t2.rid BETWEEN 10 AND 18 AND ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rid, t1.rast ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) INTO r FROM foo; RAISE NOTICE 'record = %', r; WITH foo AS ( SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 14 AND t2.rid BETWEEN 10 AND 18 AND ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rid, t1.rast ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) INTO r FROM foo; RAISE NOTICE 'record = %', r; WITH foo AS ( SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1, '1000' ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 17 AND t2.rid BETWEEN 10 AND 18 AND ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rid, t1.rast ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) INTO r FROM foo; RAISE NOTICE 'record = %', r; ELSE WITH foo AS ( SELECT t1.rid, ST_Union(t2.rast) AS rast FROM raster_nmapalgebra_in t1 JOIN raster_nmapalgebra_in t2 ON ST_Intersects(t1.rast, t2.rast) AND t2.rid BETWEEN 10 AND 18 WHERE t1.rid = 10 GROUP BY t1.rid ), bar AS ( SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1 ) AS rast FROM raster_nmapalgebra_in t1 JOIN foo t2 ON t1.rid = t2.rid ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) INTO r FROM bar; RAISE NOTICE 'record = %', r; WITH foo AS ( SELECT t1.rid, ST_Union(t2.rast) AS rast FROM raster_nmapalgebra_in t1 JOIN raster_nmapalgebra_in t2 ON ST_Intersects(t1.rast, t2.rast) AND t2.rid BETWEEN 10 AND 18 WHERE t1.rid = 14 GROUP BY t1.rid ), bar AS ( SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1 ) AS rast FROM raster_nmapalgebra_in t1 JOIN foo t2 ON t1.rid = t2.rid ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) INTO r FROM bar; RAISE NOTICE 'record = %', r; WITH foo AS ( SELECT t1.rid, ST_Union(t2.rast) AS rast FROM raster_nmapalgebra_in t1 JOIN raster_nmapalgebra_in t2 ON ST_Intersects(t1.rast, t2.rast) AND t2.rid BETWEEN 10 AND 18 WHERE t1.rid = 17 GROUP BY t1.rid ), bar AS ( SELECT t1.rid, ST_MapAlgebra( ARRAY[ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '32BUI', 'CUSTOM', t1.rast, 1, 1, '1000' ) AS rast FROM raster_nmapalgebra_in t1 JOIN foo t2 ON t1.rid = t2.rid ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)), ST_Value(rast, 1, 1, 1) INTO r FROM bar; RAISE NOTICE 'record = %', r; END IF; END $$; INSERT INTO raster_nmapalgebra_in SELECT 20, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL SELECT 21, ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL SELECT 22, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast ; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 20 AND t2.rid = 21 ) SELECT rid1, rid2, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 20 AND t2.rid = 22 ) SELECT rid1, rid2, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 21 AND t2.rid = 22 ) SELECT rid1, rid2, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, NULL, 'UNION', NULL, 0, 0 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 20 AND t2.rid = 21 ) SELECT rid1, rid2, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, NULL, 'UNION', NULL, 0, 0 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 20 AND t2.rid = 22 ) SELECT rid1, rid2, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, t3.rid AS rid3, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1), ROW(t3.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, NULL, 'UNION', NULL, 0, 0 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 CROSS JOIN raster_nmapalgebra_in t3 WHERE t1.rid = 20 AND t2.rid = 21 AND t3.rid = 22 ) SELECT rid1, rid2, rid3, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, t3.rid AS rid3, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1), ROW(t3.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, NULL, 'FIRST', NULL, 0, 0 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 CROSS JOIN raster_nmapalgebra_in t3 WHERE t1.rid = 20 AND t2.rid = 21 AND t3.rid = 22 ) SELECT rid1, rid2, rid3, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, t3.rid AS rid3, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1), ROW(t3.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, NULL, 'SECOND', NULL, 0, 0 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 CROSS JOIN raster_nmapalgebra_in t3 WHERE t1.rid = 20 AND t2.rid = 21 AND t3.rid = 22 ) SELECT rid1, rid2, rid3, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, t3.rid AS rid3, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1), ROW(t3.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, NULL, 'LAST', NULL, 0, 0 ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 CROSS JOIN raster_nmapalgebra_in t3 WHERE t1.rid = 20 AND t2.rid = 21 AND t3.rid = 22 ) SELECT rid1, rid2, rid3, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, t3.rid AS rid3, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t2.rast, 1), ROW(t3.rast, 1)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 CROSS JOIN raster_nmapalgebra_in t3 WHERE t1.rid = 20 AND t2.rid = 21 AND t3.rid = 22 ) SELECT rid1, rid2, rid3, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; INSERT INTO raster_nmapalgebra_in SELECT 30, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL SELECT 31, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast ; WITH foo AS ( SELECT t1.rid AS rid, ST_MapAlgebra( ARRAY[ROW(t1.rast, 1), ROW(t1.rast, 2), ROW(t1.rast, 3)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 WHERE t1.rid = 30 ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid, ST_MapAlgebra( ARRAY[ROW(t1.rast, 3), ROW(t1.rast, 1), ROW(t1.rast, 3)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 WHERE t1.rid = 30 ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid, ST_MapAlgebra( ARRAY[ROW(t1.rast, 2), ROW(t1.rast, 2)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '16BUI'::text ) AS rast FROM raster_nmapalgebra_in t1 WHERE t1.rid = 31 ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid1, t2.rid AS rid2, ST_MapAlgebra( ARRAY[ROW(t1.rast, 2), ROW(t2.rast, 1), ROW(t2.rast, 2)]::rastbandarg[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, '16BUI' ) AS rast FROM raster_nmapalgebra_in t1 CROSS JOIN raster_nmapalgebra_in t2 WHERE t1.rid = 30 AND t2.rid = 31 ) SELECT rid1, rid2, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid, ST_MapAlgebra( t1.rast, ARRAY[3, 1, 3]::int[], 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 WHERE t1.rid = 30 ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; WITH foo AS ( SELECT t1.rid AS rid, ST_MapAlgebra( t1.rast, 2, 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure ) AS rast FROM raster_nmapalgebra_in t1 WHERE t1.rid = 30 ) SELECT rid, (ST_Metadata(rast)), (ST_BandMetadata(rast, 1)) FROM foo; DROP FUNCTION IF EXISTS raster_nmapalgebra_test(double precision[], int[], text[]); DROP TABLE IF EXISTS raster_nmapalgebra_in; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebraexpr_2raster_expected����������������������0000644�0000000�0000000�00000040756�11727671074�026506� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_mapalgebra" does not exist, skipping NOTICE: table "raster_mapalgebra_out" does not exist, skipping NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL 0|1|INTERSECTION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|2|INTERSECTION|1.000|-1.000|1|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|3|INTERSECTION|1.000|1.000|1|1|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|4|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10|11|INTERSECTION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|INTERSECTION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|INTERSECTION|1.000|1.000|2|1|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|14|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |0|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |1|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |2|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |3|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |4|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |10|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |11|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |12|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |13|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |14|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 0||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 1||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 2||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 3||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 4||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 11||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 12||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 13||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 14||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| ||INTERSECTION|||||||||||||| 0|1|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.500 0|2|UNION|-2.000|-2.000|5|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|3|UNION|-2.000|-2.000|5|5|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|4.000 0|4|UNION|-2.000|-2.000|6|6|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|5.000 10|11|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|UNION|-2.000|-2.000|4|5|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000| 10|14|UNION|-2.000|-2.000|4|6|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000| 0|1|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000|1.500 0|2|UNION|-2.000|-2.000|5|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000| 0|3|UNION|-2.000|-2.000|5|5|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000|100.000 0|4|UNION|-2.000|-2.000|6|6|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000|100.000 10|11|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000|200.000 10|12|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000|200.000 10|13|UNION|-2.000|-2.000|4|5|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000| 10|14|UNION|-2.000|-2.000|4|6|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000| |0|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 |1|UNION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 |2|UNION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 |3|UNION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 |4|UNION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 |10|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |11|UNION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 |12|UNION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 |13|UNION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 |14|UNION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 0||UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 1||UNION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 2||UNION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 3||UNION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 4||UNION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10||UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 11||UNION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 12||UNION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 13||UNION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 14||UNION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 ||UNION|||||||||||||| 0|1|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|2|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|3|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|4|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 10|11|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|14|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |0|FIRST|||||||||||||| |1|FIRST|||||||||||||| |2|FIRST|||||||||||||| |3|FIRST|||||||||||||| |4|FIRST|||||||||||||| |10|FIRST|||||||||||||| |11|FIRST|||||||||||||| |12|FIRST|||||||||||||| |13|FIRST|||||||||||||| |14|FIRST|||||||||||||| 0||FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 1||FIRST|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 2||FIRST|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 3||FIRST|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 4||FIRST|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10||FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 11||FIRST|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 12||FIRST|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 13||FIRST|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 14||FIRST|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 ||FIRST|||||||||||||| 0|1|SECOND|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 0|2|SECOND|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000||3.000 0|3|SECOND|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000||4.000 0|4|SECOND|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10|11|SECOND|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 10|12|SECOND|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 10|13|SECOND|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000||4.000 10|14|SECOND|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 |0|SECOND|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 |1|SECOND|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 |2|SECOND|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 |3|SECOND|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 |4|SECOND|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 |10|SECOND|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |11|SECOND|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 |12|SECOND|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 |13|SECOND|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 |14|SECOND|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 0||SECOND|||||||||||||| 1||SECOND|||||||||||||| 2||SECOND|||||||||||||| 3||SECOND|||||||||||||| 4||SECOND|||||||||||||| 10||SECOND|||||||||||||| 11||SECOND|||||||||||||| 12||SECOND|||||||||||||| 13||SECOND|||||||||||||| 14||SECOND|||||||||||||| ||SECOND|||||||||||||| ������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_polygon_expected�������������������������������������0000644�0000000�0000000�00000000016�12001364513�023501� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t t t t t t t ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelofvalue.sql�������������������������������������0000644�0000000�0000000�00000003065�11772376273�023465� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_pixelofvalue; CREATE TABLE raster_pixelofvalue ( rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 10; height int := 10; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0); rast := ST_AddBand(rast, 1, '32BUI', 0, 0); FOR x IN 1..width LOOP FOR y IN 1..height LOOP IF (x + y) % 2 = 1 THEN rast := ST_SetValue(rast, 1, x, y, x + y); END IF; END LOOP; END LOOP; INSERT INTO raster_pixelofvalue VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION make_test_raster(); SELECT (pixval).* FROM ( SELECT ST_PixelOfValue( rast, 1, ARRAY[3, 11] ) AS pixval FROM raster_pixelofvalue ) foo; SELECT (pixval).* FROM ( SELECT ST_PixelOfValue( rast, 1, ARRAY[5] ) AS pixval FROM raster_pixelofvalue ) foo; SELECT (pixval).* FROM ( SELECT ST_PixelOfValue( rast, ARRAY[0] ) AS pixval FROM raster_pixelofvalue ) foo; SELECT (pixval).* FROM ( SELECT ST_PixelOfValue( rast, ARRAY[0], FALSE ) AS pixval FROM raster_pixelofvalue ) foo; SELECT (pixval).* FROM ( SELECT ST_PixelOfValue( rast, 1, 7 ) AS pixval FROM raster_pixelofvalue ) foo; SELECT (pixval).* FROM ( SELECT ST_PixelOfValue( rast, 2 ) AS pixval FROM raster_pixelofvalue ) foo; SELECT (pixval).* FROM ( SELECT ST_PixelOfValue( rast, 0, FALSE ) AS pixval FROM raster_pixelofvalue ) foo; DROP TABLE IF EXISTS raster_pixelofvalue; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafctngb_userfunc_expected�������������������0000644�0000000�0000000�00000001120�11722777314�027220� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t t|t t|t t|t t|t t|t t|t t|t t|t t|t t|t t t t|t t|t t|t t|t ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafctngb.sql���������������������������������0000644�0000000�0000000�00000023420�12003664670�024223� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- A user callback function that nullifies all cells in the resulting raster. -- CREATE OR REPLACE FUNCTION ST_Nullage(matrix float[][], nodatamode text, VARIADIC args text[]) RETURNS float AS $$ BEGIN RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- --Test rasters -- CREATE OR REPLACE FUNCTION ST_TestRasterNgb(h integer, w integer, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(h, w, 0, 0, 1, 1, 0, 0, 0), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; -- Tests -- Test NULL Raster. Should be true. SELECT ST_MapAlgebraFctNgb(NULL, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL) IS NULL FROM ST_TestRasterNgb(0, 0, -1) rast; -- Test empty Raster. Should be true. SELECT ST_IsEmpty(ST_MapAlgebraFctNgb(ST_MakeEmptyRaster(0, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL)); -- Test has no band raster. Should be true SELECT ST_HasNoBand(ST_MapAlgebraFctNgb(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL)); -- Test huge neighborhood. Original raster returned. SELECT ST_Value(rast, 2, 2) = 1, ST_Value(ST_MapAlgebraFctNgb( rast, 1, NULL, 5, 5, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL ), 2, 2) = 1 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- Test negative width neighborhood. Original raster returned. SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb( rast, 1, NULL, -1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL ), 2, 2) = 1 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- Test negative height neighborhood. Original raster returned. SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb( rast, 1, NULL, 1, -1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL ), 2, 2) = 1 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- Test has no nodata value. Should return null and 7. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb( ST_SetBandNoDataValue(rast, NULL), 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL ), 2, 2) = 7 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; ---- Test NULL nodatamode. Should return null and null. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL), 2, 2 ) IS NULL FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; ---- Test default nodatamode (ignore). Should return null and 8. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 8 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; ---- Test ignore nodatamode. Should return null and 8. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'ignore', NULL), 2, 2 ) = 8 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; ---- Test value nodatamode. Should return null and null. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'value', NULL), 2, 2 ) IS NULL FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; -- Test value nodatamode. Should return null and 9. SELECT ST_Value(rast, 1, 1) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'value', NULL), 2, 2 ) = 9 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 1, 1, NULL) AS rast; -- Test value nodatamode. Should return null and 0. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, '-8', NULL), 2, 2 ) = 0 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; -- Test value nodatamode. Should return null and 128. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, '120', NULL), 2, 2 ) = 128 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; -- Test value nodatamode. Should return null and null. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'abcd', NULL), 2, 2 ) IS NULL FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 2, NULL) AS rast; -- Test ST_Sum user function. Should be 1 and 9. SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL), 2, 2 ) = 9 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- Test ST_Sum user function on a no nodata value raster. Should be null and -1. SELECT ST_Value(rast, 2, 2) IS NULL, ST_Value( ST_MapAlgebraFctNgb(ST_SetBandNoDataValue(rast, NULL), 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL), 2, 2 ) = -1 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 0), 2, 2, NULL) AS rast; -- Test pixeltype 1. Should return 2 and 15. SELECT ST_Value(rast, 2, 2) = 2, ST_Value( ST_MapAlgebraFctNgb(rast, 1, '4BUI', 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL), 2, 2 ) = 15 FROM ST_SetBandNoDataValue(ST_TestRasterNgb(3, 3, 2), 1, NULL) AS rast; -- Test pixeltype 1. No error, changed to 32BF SELECT ST_Value(rast, 2, 2) = 2, ST_Value( ST_MapAlgebraFctNgb(rast, 1, '4BUId', 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL), 2, 2 ) = 18 FROM ST_TestRasterNgb(3, 3, 2) AS rast; -- Test pixeltype 1. Should return 1 and 3. SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, '2BUI', 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL), 2, 2 ) = 3 FROM ST_SetBandNoDataValue(ST_TestRasterNgb(3, 3, 1), 1, NULL) AS rast; -- Test that the neighborhood function leaves a border of NODATA SELECT COUNT(*) = 1 FROM (SELECT (ST_DumpAsPolygons( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL) )).* FROM ST_TestRasterNgb(5, 5, 1) AS rast) AS foo; -- Test that the neighborhood function leaves a border of NODATA SELECT ST_Area(geom) = 8, val = 9 FROM (SELECT (ST_DumpAsPolygons( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL) )).* FROM ST_SetValue(ST_TestRasterNgb(5, 5, 1), 1, 1, NULL) AS rast) AS foo; -- Test that the neighborhood function leaves a border of NODATA -- plus a corner where one cell has a value of 8. SELECT (ST_Area(geom) = 1 AND val = 8) OR (ST_Area(geom) = 8 AND val = 9) FROM (SELECT (ST_DumpAsPolygons( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'ignore', NULL) )).* FROM ST_SetValue(ST_TestRasterNgb(5, 5, 1), 1, 1, NULL) AS rast) AS foo; -- Test that the neighborhood function leaves a border of NODATA -- plus a hole where 9 cells have NODATA -- This results in a donut: a polygon with a hole. The polygon has -- an area of 16, with a hole that has an area of 9 SELECT ST_NRings(geom) = 2, ST_NumInteriorRings(geom) = 1, ST_Area(geom) = 16, val = 9, ST_Area(ST_BuildArea(ST_InteriorRingN(geom, 1))) = 9 FROM (SELECT (ST_DumpAsPolygons( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL) )).* FROM ST_SetValue(ST_TestRasterNgb(7, 7, 1), 4, 4, NULL) AS rast) AS foo; -- Test that the neighborhood function leaves a border of NODATA, -- and the center pyramids when summed twice, ignoring NODATA values SELECT COUNT(*) = 9, SUM(ST_Area(geom)) = 9, SUM(val) = ((36+54+36) + (54+81+54) + (36+54+36)) FROM (SELECT (ST_DumpAsPolygons( ST_MapAlgebraFctNgb( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'ignore', NULL), 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'ignore', NULL ) )).* FROM ST_TestRasterNgb(5, 5, 1) AS rast) AS foo; -- Test that the neighborhood function leaves a border of NODATA, -- and the center contains one cel when summed twice, replacing NULL with NODATA values SELECT COUNT(*) = 1, SUM(ST_Area(geom)) = 1, SUM(val) = 81 FROM (SELECT (ST_DumpAsPolygons( ST_MapAlgebraFctNgb( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL), 1, NULL, 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, 'NULL', NULL ) )).* FROM ST_TestRasterNgb(5, 5, 1) AS rast) AS foo; -- test a user function that nullifies everything SELECT ST_Value(rast, 2, 2) = 2, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Nullage(float[][], text, text[])'::regprocedure, 'NULL', NULL), 2, 2 ) IS NULL FROM ST_TestRasterNgb(3, 3, 2) AS rast; -- 'dog ate my homework' test -- raster initialized to one NODATA value, then a literal value passed in as the 'nodatamode' parameter. -- expect that the cells processed by the neighborhoods would be replaced by the 'nodatamode' parameter value, and not NODATA. SELECT ST_Value( ST_MapAlgebraFctNgb(rast, 1, '8BUI', 1, 1, 'ST_Sum4ma(float[][], text, text[])'::regprocedure, '120', NULL), 2, 2 ) = 200 FROM ST_SetValue(ST_SetBandNoDataValue(ST_TestRasterNgb(3, 3, 10), 0), 2, 2, 0) AS rast; DROP FUNCTION ST_Nullage(matrix float[][], nodatamode text, VARIADIC args text[]); DROP FUNCTION ST_TestRasterNgb(h integer, w integer, val float8); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelaspoints_expected�������������������������������0000644�0000000�0000000�00000007030�12210402370�024713� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_pixelaspoints" does not exist, skipping 1|2|0|-1|3|POINT(0 -1) 1|4|0|-3|5|POINT(0 -3) 1|6|0|-5|7|POINT(0 -5) 1|8|0|-7|9|POINT(0 -7) 1|10|0|-9|11|POINT(0 -9) 2|1|1|0|3|POINT(1 0) 2|3|1|-2|5|POINT(1 -2) 2|5|1|-4|7|POINT(1 -4) 2|7|1|-6|9|POINT(1 -6) 2|9|1|-8|11|POINT(1 -8) 3|2|2|-1|5|POINT(2 -1) 3|4|2|-3|7|POINT(2 -3) 3|6|2|-5|9|POINT(2 -5) 3|8|2|-7|11|POINT(2 -7) 3|10|2|-9|13|POINT(2 -9) 4|1|3|0|5|POINT(3 0) 4|3|3|-2|7|POINT(3 -2) 4|5|3|-4|9|POINT(3 -4) 4|7|3|-6|11|POINT(3 -6) 4|9|3|-8|13|POINT(3 -8) 5|2|4|-1|7|POINT(4 -1) 5|4|4|-3|9|POINT(4 -3) 5|6|4|-5|11|POINT(4 -5) 5|8|4|-7|13|POINT(4 -7) 5|10|4|-9|15|POINT(4 -9) 6|1|5|0|7|POINT(5 0) 6|3|5|-2|9|POINT(5 -2) 6|5|5|-4|11|POINT(5 -4) 6|7|5|-6|13|POINT(5 -6) 6|9|5|-8|15|POINT(5 -8) 7|2|6|-1|9|POINT(6 -1) 7|4|6|-3|11|POINT(6 -3) 7|6|6|-5|13|POINT(6 -5) 7|8|6|-7|15|POINT(6 -7) 7|10|6|-9|17|POINT(6 -9) 8|1|7|0|9|POINT(7 0) 8|3|7|-2|11|POINT(7 -2) 8|5|7|-4|13|POINT(7 -4) 8|7|7|-6|15|POINT(7 -6) 8|9|7|-8|17|POINT(7 -8) 9|2|8|-1|11|POINT(8 -1) 9|4|8|-3|13|POINT(8 -3) 9|6|8|-5|15|POINT(8 -5) 9|8|8|-7|17|POINT(8 -7) 9|10|8|-9|19|POINT(8 -9) 10|1|9|0|11|POINT(9 0) 10|3|9|-2|13|POINT(9 -2) 10|5|9|-4|15|POINT(9 -4) 10|7|9|-6|17|POINT(9 -6) 10|9|9|-8|19|POINT(9 -8) 1|1|0|0|0|POINT(0 0) 1|2|0|-1|3|POINT(0 -1) 1|3|0|-2|0|POINT(0 -2) 1|4|0|-3|5|POINT(0 -3) 1|5|0|-4|0|POINT(0 -4) 1|6|0|-5|7|POINT(0 -5) 1|7|0|-6|0|POINT(0 -6) 1|8|0|-7|9|POINT(0 -7) 1|9|0|-8|0|POINT(0 -8) 1|10|0|-9|11|POINT(0 -9) 2|1|1|0|3|POINT(1 0) 2|2|1|-1|0|POINT(1 -1) 2|3|1|-2|5|POINT(1 -2) 2|4|1|-3|0|POINT(1 -3) 2|5|1|-4|7|POINT(1 -4) 2|6|1|-5|0|POINT(1 -5) 2|7|1|-6|9|POINT(1 -6) 2|8|1|-7|0|POINT(1 -7) 2|9|1|-8|11|POINT(1 -8) 2|10|1|-9|0|POINT(1 -9) 3|1|2|0|0|POINT(2 0) 3|2|2|-1|5|POINT(2 -1) 3|3|2|-2|0|POINT(2 -2) 3|4|2|-3|7|POINT(2 -3) 3|5|2|-4|0|POINT(2 -4) 3|6|2|-5|9|POINT(2 -5) 3|7|2|-6|0|POINT(2 -6) 3|8|2|-7|11|POINT(2 -7) 3|9|2|-8|0|POINT(2 -8) 3|10|2|-9|13|POINT(2 -9) 4|1|3|0|5|POINT(3 0) 4|2|3|-1|0|POINT(3 -1) 4|3|3|-2|7|POINT(3 -2) 4|4|3|-3|0|POINT(3 -3) 4|5|3|-4|9|POINT(3 -4) 4|6|3|-5|0|POINT(3 -5) 4|7|3|-6|11|POINT(3 -6) 4|8|3|-7|0|POINT(3 -7) 4|9|3|-8|13|POINT(3 -8) 4|10|3|-9|0|POINT(3 -9) 5|1|4|0|0|POINT(4 0) 5|2|4|-1|7|POINT(4 -1) 5|3|4|-2|0|POINT(4 -2) 5|4|4|-3|9|POINT(4 -3) 5|5|4|-4|0|POINT(4 -4) 5|6|4|-5|11|POINT(4 -5) 5|7|4|-6|0|POINT(4 -6) 5|8|4|-7|13|POINT(4 -7) 5|9|4|-8|0|POINT(4 -8) 5|10|4|-9|15|POINT(4 -9) 6|1|5|0|7|POINT(5 0) 6|2|5|-1|0|POINT(5 -1) 6|3|5|-2|9|POINT(5 -2) 6|4|5|-3|0|POINT(5 -3) 6|5|5|-4|11|POINT(5 -4) 6|6|5|-5|0|POINT(5 -5) 6|7|5|-6|13|POINT(5 -6) 6|8|5|-7|0|POINT(5 -7) 6|9|5|-8|15|POINT(5 -8) 6|10|5|-9|0|POINT(5 -9) 7|1|6|0|0|POINT(6 0) 7|2|6|-1|9|POINT(6 -1) 7|3|6|-2|0|POINT(6 -2) 7|4|6|-3|11|POINT(6 -3) 7|5|6|-4|0|POINT(6 -4) 7|6|6|-5|13|POINT(6 -5) 7|7|6|-6|0|POINT(6 -6) 7|8|6|-7|15|POINT(6 -7) 7|9|6|-8|0|POINT(6 -8) 7|10|6|-9|17|POINT(6 -9) 8|1|7|0|9|POINT(7 0) 8|2|7|-1|0|POINT(7 -1) 8|3|7|-2|11|POINT(7 -2) 8|4|7|-3|0|POINT(7 -3) 8|5|7|-4|13|POINT(7 -4) 8|6|7|-5|0|POINT(7 -5) 8|7|7|-6|15|POINT(7 -6) 8|8|7|-7|0|POINT(7 -7) 8|9|7|-8|17|POINT(7 -8) 8|10|7|-9|0|POINT(7 -9) 9|1|8|0|0|POINT(8 0) 9|2|8|-1|11|POINT(8 -1) 9|3|8|-2|0|POINT(8 -2) 9|4|8|-3|13|POINT(8 -3) 9|5|8|-4|0|POINT(8 -4) 9|6|8|-5|15|POINT(8 -5) 9|7|8|-6|0|POINT(8 -6) 9|8|8|-7|17|POINT(8 -7) 9|9|8|-8|0|POINT(8 -8) 9|10|8|-9|19|POINT(8 -9) 10|1|9|0|11|POINT(9 0) 10|2|9|-1|0|POINT(9 -1) 10|3|9|-2|13|POINT(9 -2) 10|4|9|-3|0|POINT(9 -3) 10|5|9|-4|15|POINT(9 -4) 10|6|9|-5|0|POINT(9 -5) 10|7|9|-6|17|POINT(9 -6) 10|8|9|-7|0|POINT(9 -7) 10|9|9|-8|19|POINT(9 -8) 10|10|9|-9|0|POINT(9 -9) POINT(0 0) POINT(0 -1) POINT(-2 2) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_reclass_expected�������������������������������������0000644�0000000�0000000�00000000657�12250631624�023467� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������150|2||255 0|0|0|1|150|2||255 1|1|1|255|150|2||255 100|200| 59|59|0 141|141|0 NOTICE: Invalid argument for reclassargset. Invalid expression of reclassexpr for reclassarg of index 0 . Returning original raster 3.1415901184082|2.71828007698059|0 NOTICE: Invalid argument for reclassargset. Invalid band index (must use 1-based) for reclassarg of index 0 . Returning original raster 3.1415901184082|2.71828007698059|0 900|-900|900 ���������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_setvalues_geomval_expected���������������������������0000644�0000000�0000000�00000003046�12040074142�025544� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_setvalues_rast" does not exist, skipping NOTICE: table "raster_setvalues_geom" does not exist, skipping NOTICE: Point is outside raster extent. Skipping 1|1|(1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,1,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1|2|(1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1|3|(1,"{{3,3,3,3,3},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1|4|(1,"{{4,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,4}}") 1|1|2|(1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1|1|2|(1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,1,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}") 1|1|3|(1,"{{3,3,3,3,3},{3,NULL,NULL,NULL,NULL},{3,NULL,1,NULL,NULL},{3,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}") NOTICE: Point is outside raster extent. Skipping 1|1|4|(1,"{{4,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,1,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,4}}") NOTICE: Point is outside raster extent. Skipping 1|{1,4}|(1,"{{99,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,99,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,99}}") 1|{2,3}|(1,"{{99,99,99,99,99},{99,99,99,99,NULL},{99,99,99,99,NULL},{99,99,99,99,NULL},{NULL,NULL,NULL,NULL,NULL}}") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_gdalwarp_expected������������������������������������0000644�0000000�0000000�00000022723�12124572202�023626� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_gdalwarp_src" does not exist, skipping NOTICE: table "raster_gdalwarp_dst" does not exist, skipping NOTICE: Values must be provided for both X and Y when specifying the scale. Returning original raster NOTICE: Values must be provided for both X and Y when specifying the scale. Returning original raster NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API NOTICE: Values must be provided for both X and Y when specifying the scale. Returning original raster NOTICE: Values must be provided for both X and Y when specifying the scale. Returning original raster 0.0||||||||||||| 0.1|993310|12|12|1|1009.894|-1009.894|0.000|0.000|950732.188|1409281.783|t|t|t 0.10|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 0.11|992163|11|10|1|1000.000|-1000.000|0.000|0.000|-500001.000|600000.000|t|t|t 0.12|992163|10|11|1|1000.000|-1000.000|0.000|0.000|-500000.000|600009.000|t|t|t 0.13|992163|11|11|1|1000.000|-1000.000|0.000|0.000|-500100.000|600950.000|t|t|t 0.14|992163|201|201|1|50.000|50.000|0.000|0.000|-500040.000|589957.000|t|t|t 0.15|992163|84|84|1|121.000|121.000|0.000|0.000|-500093.000|589875.000|t|t|t 0.16|993310|243|243|1|50.000|50.000|0.000|0.000|950710.000|1397157.000|t|t|t 0.17|993309|243|243|1|50.000|50.000|0.000|0.000|950760.000|1396957.000|t|t|t 0.18|992163|10|10|1|1000.000|-1000.000|3.000|3.000|-500030.000|600000.000|t|t|t 0.19|993310|12|12|1|1009.894|-1009.894|3.000|3.000|950691.792|1409281.783|t|t|t 0.2|993309|12|12|1|1009.916|-1009.916|0.000|0.000|950762.305|1409088.896|t|t|t 0.20|993309|12|12|1|1009.916|-1009.916|1.000|3.000|950742.107|1409088.896|t|t|t 0.21|993310|24|24|1|500.000|500.000|3.000|3.000|950657.188|1397356.783|t|t|t 0.22|993310|26|26|1|500.000|500.000|0.000|6.000|950452.000|1396632.000|t|t|t 0.23|984269|12|8|1|0.012|-0.012|0.000|0.000|-107.029|50.206|t|t|t 0.24|974269|12|8|1|0.012|-0.012|0.000|0.000|-107.029|50.206|t|t|t 0.25|0|5|5|1|1.000|-1.000|0.000|0.000|0.000|0.000|t|t|t 0.26|0|2|2|1|1.000|-1.000|0.000|0.000|0.000|0.000|t|t|t 0.27|0|100|100|1|1.000|-1.000|0.000|0.000|0.000|0.000|t|t|t 0.3|994269|12|8|1|0.012|-0.012|0.000|0.000|-107.029|50.206|t|t|t 0.4|993310|24|24|1|500.000|500.000|0.000|0.000|950732.188|1397281.783|t|t|t 0.5|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 0.6|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 0.7|992163|20|20|1|500.000|500.000|0.000|0.000|-500000.000|590000.000|t|t|t 0.8|992163|40|40|1|250.000|250.000|0.000|0.000|-500000.000|590000.000|t|t|t 0.9|992163|40|40|1|250.000|250.000|0.000|0.000|-500000.000|590000.000|t|t|t 1.0||||||||||||| 1.1|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 1.10|992163|10|11|1|1000.000|-1000.000|0.000|0.000|-500000.000|600009.000|t|t|t 1.11|992163|11|11|1|1000.000|-1000.000|0.000|0.000|-500100.000|600950.000|t|t|t 1.12|992163|201|201|1|50.000|50.000|0.000|0.000|-500040.000|589957.000|t|t|t 1.13|992163|84|84|1|121.000|121.000|0.000|0.000|-500093.000|589875.000|t|t|t 1.14|992163|201|201|1|50.000|50.000|0.000|0.000|-500040.000|589957.000|t|t|t 1.15|992163|201|201|1|50.000|50.000|0.000|0.000|-500040.000|589957.000|t|t|t 1.16|992163|10|10|1|1000.000|-1000.000|3.000|3.000|-500030.000|600000.000|t|t|t 1.17|992163|10|10|1|1000.000|-1000.000|3.000|3.000|-500030.000|600000.000|t|t|t 1.18|992163|10|10|1|1000.000|-1000.000|1.000|3.000|-500010.000|600000.000|t|t|t 1.19|992163|20|20|1|500.000|500.000|3.000|3.000|-500065.000|590065.000|t|t|t 1.2|992163|20|20|1|500.000|500.000|0.000|0.000|-500000.000|590000.000|t|t|t 1.20|992163|21|21|1|500.000|500.000|0.000|6.000|-500048.000|590038.000|t|t|t 1.21|992163|207|101|1|50.000|-100.000|3.000|0.000|-500319.000|600056.000|t|t|t 1.22|992163|207|101|1|50.000|-100.000|3.000|0.000|-500319.000|600056.000|t|t|t 1.23|992163|150|150|1|66.667|-66.667|0.000|0.000|-500000.000|600000.000|t|t|t 1.24|992163|5|5|1|2064.200|-2291.200|0.000|0.000|-500321.000|601456.000|t|t|t 1.25||||||||||||| 1.3|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 1.4|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 1.5|992163|20|20|1|500.000|500.000|0.000|0.000|-500000.000|590000.000|t|t|t 1.6|992163|40|40|1|250.000|250.000|0.000|0.000|-500000.000|590000.000|t|t|t 1.7|992163|40|40|1|250.000|250.000|0.000|0.000|-500000.000|590000.000|t|t|t 1.8|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 1.9|992163|11|10|1|1000.000|-1000.000|0.000|0.000|-500001.000|600000.000|t|t|t 2.1|993310|12|12|1|1009.894|-1009.894|0.000|0.000|950732.188|1409281.783|t|t|t 2.10|993310|24|24|1|500.000|500.000|0.000|0.000|950732.188|1397281.783|t|t|t 2.11|993309|121|121|1|100.000|100.000|0.000|0.000|950762.305|1396988.896|t|t|t 2.12|993310|6|6|1|2000.000|2000.000|0.000|0.000|950732.188|1397281.783|t|t|t 2.13|993310|8|8|1|1500.000|1500.000|0.000|0.000|950732.188|1397281.783|t|t|t 2.14|993310|24|24|1|500.000|500.000|0.000|0.000|950732.188|1397281.783|t|t|t 2.15|993310|16|16|1|750.000|750.000|0.000|0.000|950732.188|1397281.783|t|t|t 2.2|993309|12|12|1|1009.916|-1009.916|0.000|0.000|950762.305|1409088.896|t|t|t 2.3|994269|12|8|1|0.012|-0.012|0.000|0.000|-107.029|50.206|t|t|t 2.4||||||||||||| 2.5|993310|12|12|1|1009.894|-1009.894|0.000|0.000|950732.188|1409281.783|t|t|t 2.6||||||||||||| 2.7|993310|12|12|1|1009.894|-1009.894|0.000|0.000|950732.188|1409281.783|t|t|t 2.8|993310|12|12|1|1009.894|-1009.894|0.000|0.000|950732.188|1409281.783|t|t|t 2.9|993310|12|12|1|1009.894|-1009.894|0.000|0.000|950732.188|1409281.783|t|t|t 3.1|992163|100|100|1|100.000|100.000|0.000|0.000|-500000.000|590000.000|t|t|t 3.2|992163|100|100|1|100.000|100.000|0.000|0.000|-500000.000|590000.000|t|t|t 3.3|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 3.4|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 3.5|992163|100|100|1|100.000|100.000|0.000|0.000|-500000.000|590000.000|t|t|t 3.6|992163|67|80|1|150.000|125.000|0.000|0.000|-500000.000|590000.000|t|t|t 4.1|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 4.2|992163|10|10|1|1000.000|-1000.000|1.000|1.000|-500010.000|600000.000|t|t|t 4.3|992163|10|10|1|1000.000|-1000.000|0.500|0.000|-500010.000|600000.000|t|t|t 4.4|992163|10|10|1|1000.000|-1000.000|10.000|10.000|-500100.000|600000.000|t|t|t 4.5|992163|10|10|1|1000.000|-1000.000|10.000|10.000|-500100.000|600000.000|t|t|t 4.6|992163|10|10|1|1000.000|-1000.000|10.000|10.000|-500100.000|600000.000|t|t|t 5.1|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 5.10|992163|11|11|1|1000.000|-1000.000|0.000|0.000|-500005.000|600001.000|t|t|t 5.11|992163|11|11|1|1000.000|-1000.000|0.000|0.000|-500991.000|600991.000|t|t|t 5.12|992163|200|200|1|50.000|50.000|0.000|0.000|-500000.000|590000.000|t|t|t 5.13|992163|200|200|1|50.000|50.000|0.000|0.000|-500000.000|590000.000|t|t|t 5.14|992163|201|200|1|50.000|50.000|0.000|0.000|-500001.000|590000.000|t|t|t 5.15|992163|201|200|1|50.000|50.000|0.000|0.000|-500001.000|590000.000|t|t|t 5.16|992163|201|200|1|50.000|50.000|0.000|0.000|-500049.000|590000.000|t|t|t 5.17|992163|200|201|1|50.000|50.000|0.000|0.000|-500000.000|589999.000|t|t|t 5.18|992163|200|201|1|50.000|50.000|0.000|0.000|-500000.000|589991.000|t|t|t 5.19|992163|200|201|1|50.000|50.000|0.000|0.000|-500000.000|589951.000|t|t|t 5.2|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t 5.20|992163|200|201|1|50.000|50.000|0.000|0.000|-500000.000|589959.000|t|t|t 5.21|992163|201|201|1|50.000|50.000|0.000|0.000|-500005.000|589951.000|t|t|t 5.22|992163|201|201|1|50.000|50.000|0.000|0.000|-500041.000|589991.000|t|t|t 5.23|992163|84|84|1|121.000|121.000|0.000|0.000|-500093.000|589875.000|t|t|t 5.24|992163|83|84|1|121.000|121.000|0.000|0.000|-500000.000|589876.000|t|t|t 5.25|992163|83|84|1|121.000|121.000|0.000|0.000|-500000.000|589884.000|t|t|t 5.26|992163|84|84|1|121.000|121.000|0.000|0.000|-500098.000|589876.000|t|t|t 5.27|992163|84|84|1|121.000|121.000|0.000|0.000|-500084.000|589866.000|t|t|t 5.3|992163|11|10|1|1000.000|-1000.000|0.000|0.000|-500001.000|600000.000|t|t|t 5.4|992163|11|10|1|1000.000|-1000.000|0.000|0.000|-500001.000|600000.000|t|t|t 5.5|992163|11|10|1|1000.000|-1000.000|0.000|0.000|-500999.000|600000.000|t|t|t 5.6|992163|10|11|1|1000.000|-1000.000|0.000|0.000|-500000.000|600999.000|t|t|t 5.7|992163|10|11|1|1000.000|-1000.000|0.000|0.000|-500000.000|600991.000|t|t|t 5.8|992163|10|11|1|1000.000|-1000.000|0.000|0.000|-500000.000|600001.000|t|t|t 5.9|992163|10|11|1|1000.000|-1000.000|0.000|0.000|-500000.000|600009.000|t|t|t NOTICE: The rasters (pixel corner coordinates) are not aligned t|f|t NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API 1|0|0|500|500|1|-1|0|0|0|1|250000|63750000|255|0|255|255 2|0|0|500|100|1|-1|0|0|0|1|50000|12750000|255|0|255|255 3|0|0|250|900|1|-1|0|0|0|1|225000|57375000|255|0|255|255 4|0|0|512|384|1|-1|0|0|0|1|196608|50135040|255|0|255|255 NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API NOTICE: Raster has default geotransform. Adjusting metadata for use of GDAL Warp API (0,0,5,5,1,-1,0,0,0,1)|(0,0,5,5,1,-1,0,0,0,1) ���������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_valuepercent_expected��������������������������������0000644�0000000�0000000�00000000562�11722777314�024535� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-10.000|0.500 3.142|0.500 -10.000|0.500 3.142|0.500 -10.000|0.010 0.000|0.980 3.142|0.010 -10.000|0.500 3.100|0.500 3.100|0.500 -10.000|0.500 -10.000|0.500 -10.000|0.500 3.000|0.000 0.500 0.010 0.500 0.500 0.500 0.500 BEGIN -10.000|0.010 0.000|0.980 3.142|0.010 -10.000|0.500 1.000|0.000 -10.000|0.500 3.100|0.500 -1.000|0.000 3.100|0.500 0.500 0.000 0.500 0.000 COMMIT ����������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_union.sql��������������������������������������������0000644�0000000�0000000�00000023444�12124220270�022066� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_union_in; CREATE TABLE raster_union_in ( rid integer, rast raster ); DROP TABLE IF EXISTS raster_union_out; CREATE TABLE raster_union_out ( uniontype text, rast raster ); INSERT INTO raster_union_in SELECT 0, NULL::raster AS rast UNION ALL SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0) AS rast ; INSERT INTO raster_union_out SELECT 'LAST', ST_Union(rast, 1) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'FIRST', ST_Union(rast, 1, 'FIRST') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MIN', ST_Union(rast, 1, 'MIN') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MAX', ST_Union(rast, 1, 'MAX') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'COUNT', ST_Union(rast, 1, 'COUNT') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'SUM', ST_Union(rast, 1, 'SUM') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MEAN', ST_Union(rast, 'mean') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'RANGE', ST_Union(rast, 'range') AS rast FROM raster_union_in; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; TRUNCATE raster_union_out; TRUNCATE raster_union_in; INSERT INTO raster_union_in SELECT 10, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 11, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 12, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 13, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 14, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 15, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 16, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 17, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 18, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast ; INSERT INTO raster_union_out SELECT 'LAST', ST_Union(rast, 1) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'FIRST', ST_Union(rast, 1, 'FIRST') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MIN', ST_Union(rast, 1, 'MIN') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MAX', ST_Union(rast, 1, 'MAX') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'COUNT', ST_Union(rast, 1, 'COUNT') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'SUM', ST_Union(rast, 1, 'SUM') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MEAN', ST_Union(rast, 1, 'mean') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'RANGE', ST_Union(rast, 1, 'RANGE') AS rast FROM raster_union_in; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; TRUNCATE raster_union_out; TRUNCATE raster_union_in; INSERT INTO raster_union_in SELECT 20, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '32BF', 1, -9999) AS rast UNION ALL SELECT 21, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '32BF', 2, -9999) AS rast ; INSERT INTO raster_union_out SELECT 'LAST', ST_Union(rast, 2) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'FIRST', ST_Union(rast, 2, 'FIRST') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MIN', ST_Union(rast, 2, 'MIN') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MAX', ST_Union(rast, 2, 'MAX') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'COUNT', ST_Union(rast, 2, 'COUNT') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'SUM', ST_Union(rast, 2, 'SUM') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MEAN', ST_Union(rast, 2, 'mean') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'RANGE', ST_Union(rast, 2, 'RANGE') AS rast FROM raster_union_in; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; TRUNCATE raster_union_out; TRUNCATE raster_union_in; INSERT INTO raster_union_in SELECT 30, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, NULL) AS rast UNION ALL SELECT 31, ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, NULL) AS rast ; INSERT INTO raster_union_out SELECT 'LAST', ST_Union(rast, 1) AS rast FROM raster_union_in; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; TRUNCATE raster_union_out; TRUNCATE raster_union_in; INSERT INTO raster_union_in SELECT 40, NULL::raster AS rast UNION ALL SELECT 41, NULL::raster AS rast UNION ALL SELECT 42, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '32BF', 100, -9999) AS rast UNION ALL SELECT 43, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '32BF', 200, -9999) AS rast ; INSERT INTO raster_union_out SELECT 'LAST', ST_Union(rast, ARRAY[ROW(1, 'LAST'), ROW(2, 'LAST')]::unionarg[]) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'FIRST', ST_Union(rast, ARRAY[ROW(1, 'FIRST'), ROW(2, 'FIRST')]::unionarg[]) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MIN', ST_Union(rast, ARRAY[ROW(1, 'MIN'), ROW(2, 'MIN')]::unionarg[]) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MAX', ST_Union(rast, ARRAY[ROW(1, 'MAX'), ROW(2, 'MAX')]::unionarg[]) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'COUNT', ST_Union(rast, ARRAY[ROW(1, 'COUNT'), ROW(2, 'COUNT')]::unionarg[]) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'SUM', ST_Union(rast, ARRAY[ROW(1, 'SUM'), ROW(2, 'SUM')]::unionarg[]) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MEAN', ST_Union(rast, ARRAY[ROW(1, 'MEAN'), ROW(2, 'MEAN')]::unionarg[]) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'RANGE', ST_Union(rast, ARRAY[ROW(1, 'RANGE'), ROW(2, 'RANGE')]::unionarg[]) AS rast FROM raster_union_in; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast, 2)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; TRUNCATE raster_union_out; TRUNCATE raster_union_in; INSERT INTO raster_union_in SELECT 50, NULL::raster AS rast UNION ALL SELECT 51, NULL::raster AS rast UNION ALL SELECT 52, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '32BF', 100, -9999) AS rast UNION ALL SELECT 53, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, -1, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '32BF', 200, -9999) AS rast UNION ALL SELECT 54, NULL::raster AS rast UNION ALL SELECT 55, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, -1, 1, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '32BF', 300, -9999), 3, '8BSI', -1, -10) AS rast UNION ALL SELECT 56, ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 1, 1, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '32BF', 400, -9999) AS rast ; INSERT INTO raster_union_out SELECT 'LAST-1', ST_Union(rast) AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'LAST-2', ST_Union(rast, 'last') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'FIRST-2', ST_Union(rast, 'first') AS rast FROM raster_union_in; INSERT INTO raster_union_out SELECT 'MEAN-2', ST_Union(rast, 'mean') AS rast FROM raster_union_in; SELECT uniontype, (ST_Metadata(rast)).* FROM raster_union_out ORDER BY uniontype; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast, 2)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast, 3)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; TRUNCATE raster_union_out; TRUNCATE raster_union_in; INSERT INTO raster_union_in SELECT 60, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast UNION ALL SELECT 61, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0) AS rast UNION ALL SELECT 62, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0) AS rast UNION ALL SELECT 63, ST_AddBand(ST_MakeEmptyRaster(2, 2, -1, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0) AS rast UNION ALL SELECT 64, ST_AddBand(ST_MakeEmptyRaster(2, 2, -2, 4, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0) AS rast ; INSERT INTO raster_union_out SELECT 'LAST', ST_Union(rast) AS rast FROM raster_union_in; SELECT (ST_Metadata(rast)).* FROM raster_union_out; SELECT uniontype, x, y, val FROM ( SELECT uniontype, (ST_PixelAsPoints(rast)).* FROM raster_union_out ) foo ORDER BY uniontype, y, x; DROP TABLE IF EXISTS raster_union_in; DROP TABLE IF EXISTS raster_union_out; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelascentroids_expected����������������������������0000644�0000000�0000000�00000010217�12210402370�025372� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_pixelascentroids" does not exist, skipping 1|2|0|-1|3|POINT(0.5 -1.5) 1|4|0|-3|5|POINT(0.5 -3.5) 1|6|0|-5|7|POINT(0.5 -5.5) 1|8|0|-7|9|POINT(0.5 -7.5) 1|10|0|-9|11|POINT(0.5 -9.5) 2|1|1|0|3|POINT(1.5 -0.5) 2|3|1|-2|5|POINT(1.5 -2.5) 2|5|1|-4|7|POINT(1.5 -4.5) 2|7|1|-6|9|POINT(1.5 -6.5) 2|9|1|-8|11|POINT(1.5 -8.5) 3|2|2|-1|5|POINT(2.5 -1.5) 3|4|2|-3|7|POINT(2.5 -3.5) 3|6|2|-5|9|POINT(2.5 -5.5) 3|8|2|-7|11|POINT(2.5 -7.5) 3|10|2|-9|13|POINT(2.5 -9.5) 4|1|3|0|5|POINT(3.5 -0.5) 4|3|3|-2|7|POINT(3.5 -2.5) 4|5|3|-4|9|POINT(3.5 -4.5) 4|7|3|-6|11|POINT(3.5 -6.5) 4|9|3|-8|13|POINT(3.5 -8.5) 5|2|4|-1|7|POINT(4.5 -1.5) 5|4|4|-3|9|POINT(4.5 -3.5) 5|6|4|-5|11|POINT(4.5 -5.5) 5|8|4|-7|13|POINT(4.5 -7.5) 5|10|4|-9|15|POINT(4.5 -9.5) 6|1|5|0|7|POINT(5.5 -0.5) 6|3|5|-2|9|POINT(5.5 -2.5) 6|5|5|-4|11|POINT(5.5 -4.5) 6|7|5|-6|13|POINT(5.5 -6.5) 6|9|5|-8|15|POINT(5.5 -8.5) 7|2|6|-1|9|POINT(6.5 -1.5) 7|4|6|-3|11|POINT(6.5 -3.5) 7|6|6|-5|13|POINT(6.5 -5.5) 7|8|6|-7|15|POINT(6.5 -7.5) 7|10|6|-9|17|POINT(6.5 -9.5) 8|1|7|0|9|POINT(7.5 -0.5) 8|3|7|-2|11|POINT(7.5 -2.5) 8|5|7|-4|13|POINT(7.5 -4.5) 8|7|7|-6|15|POINT(7.5 -6.5) 8|9|7|-8|17|POINT(7.5 -8.5) 9|2|8|-1|11|POINT(8.5 -1.5) 9|4|8|-3|13|POINT(8.5 -3.5) 9|6|8|-5|15|POINT(8.5 -5.5) 9|8|8|-7|17|POINT(8.5 -7.5) 9|10|8|-9|19|POINT(8.5 -9.5) 10|1|9|0|11|POINT(9.5 -0.5) 10|3|9|-2|13|POINT(9.5 -2.5) 10|5|9|-4|15|POINT(9.5 -4.5) 10|7|9|-6|17|POINT(9.5 -6.5) 10|9|9|-8|19|POINT(9.5 -8.5) 1|1|0|0|0|POINT(0.5 -0.5) 1|2|0|-1|3|POINT(0.5 -1.5) 1|3|0|-2|0|POINT(0.5 -2.5) 1|4|0|-3|5|POINT(0.5 -3.5) 1|5|0|-4|0|POINT(0.5 -4.5) 1|6|0|-5|7|POINT(0.5 -5.5) 1|7|0|-6|0|POINT(0.5 -6.5) 1|8|0|-7|9|POINT(0.5 -7.5) 1|9|0|-8|0|POINT(0.5 -8.5) 1|10|0|-9|11|POINT(0.5 -9.5) 2|1|1|0|3|POINT(1.5 -0.5) 2|2|1|-1|0|POINT(1.5 -1.5) 2|3|1|-2|5|POINT(1.5 -2.5) 2|4|1|-3|0|POINT(1.5 -3.5) 2|5|1|-4|7|POINT(1.5 -4.5) 2|6|1|-5|0|POINT(1.5 -5.5) 2|7|1|-6|9|POINT(1.5 -6.5) 2|8|1|-7|0|POINT(1.5 -7.5) 2|9|1|-8|11|POINT(1.5 -8.5) 2|10|1|-9|0|POINT(1.5 -9.5) 3|1|2|0|0|POINT(2.5 -0.5) 3|2|2|-1|5|POINT(2.5 -1.5) 3|3|2|-2|0|POINT(2.5 -2.5) 3|4|2|-3|7|POINT(2.5 -3.5) 3|5|2|-4|0|POINT(2.5 -4.5) 3|6|2|-5|9|POINT(2.5 -5.5) 3|7|2|-6|0|POINT(2.5 -6.5) 3|8|2|-7|11|POINT(2.5 -7.5) 3|9|2|-8|0|POINT(2.5 -8.5) 3|10|2|-9|13|POINT(2.5 -9.5) 4|1|3|0|5|POINT(3.5 -0.5) 4|2|3|-1|0|POINT(3.5 -1.5) 4|3|3|-2|7|POINT(3.5 -2.5) 4|4|3|-3|0|POINT(3.5 -3.5) 4|5|3|-4|9|POINT(3.5 -4.5) 4|6|3|-5|0|POINT(3.5 -5.5) 4|7|3|-6|11|POINT(3.5 -6.5) 4|8|3|-7|0|POINT(3.5 -7.5) 4|9|3|-8|13|POINT(3.5 -8.5) 4|10|3|-9|0|POINT(3.5 -9.5) 5|1|4|0|0|POINT(4.5 -0.5) 5|2|4|-1|7|POINT(4.5 -1.5) 5|3|4|-2|0|POINT(4.5 -2.5) 5|4|4|-3|9|POINT(4.5 -3.5) 5|5|4|-4|0|POINT(4.5 -4.5) 5|6|4|-5|11|POINT(4.5 -5.5) 5|7|4|-6|0|POINT(4.5 -6.5) 5|8|4|-7|13|POINT(4.5 -7.5) 5|9|4|-8|0|POINT(4.5 -8.5) 5|10|4|-9|15|POINT(4.5 -9.5) 6|1|5|0|7|POINT(5.5 -0.5) 6|2|5|-1|0|POINT(5.5 -1.5) 6|3|5|-2|9|POINT(5.5 -2.5) 6|4|5|-3|0|POINT(5.5 -3.5) 6|5|5|-4|11|POINT(5.5 -4.5) 6|6|5|-5|0|POINT(5.5 -5.5) 6|7|5|-6|13|POINT(5.5 -6.5) 6|8|5|-7|0|POINT(5.5 -7.5) 6|9|5|-8|15|POINT(5.5 -8.5) 6|10|5|-9|0|POINT(5.5 -9.5) 7|1|6|0|0|POINT(6.5 -0.5) 7|2|6|-1|9|POINT(6.5 -1.5) 7|3|6|-2|0|POINT(6.5 -2.5) 7|4|6|-3|11|POINT(6.5 -3.5) 7|5|6|-4|0|POINT(6.5 -4.5) 7|6|6|-5|13|POINT(6.5 -5.5) 7|7|6|-6|0|POINT(6.5 -6.5) 7|8|6|-7|15|POINT(6.5 -7.5) 7|9|6|-8|0|POINT(6.5 -8.5) 7|10|6|-9|17|POINT(6.5 -9.5) 8|1|7|0|9|POINT(7.5 -0.5) 8|2|7|-1|0|POINT(7.5 -1.5) 8|3|7|-2|11|POINT(7.5 -2.5) 8|4|7|-3|0|POINT(7.5 -3.5) 8|5|7|-4|13|POINT(7.5 -4.5) 8|6|7|-5|0|POINT(7.5 -5.5) 8|7|7|-6|15|POINT(7.5 -6.5) 8|8|7|-7|0|POINT(7.5 -7.5) 8|9|7|-8|17|POINT(7.5 -8.5) 8|10|7|-9|0|POINT(7.5 -9.5) 9|1|8|0|0|POINT(8.5 -0.5) 9|2|8|-1|11|POINT(8.5 -1.5) 9|3|8|-2|0|POINT(8.5 -2.5) 9|4|8|-3|13|POINT(8.5 -3.5) 9|5|8|-4|0|POINT(8.5 -4.5) 9|6|8|-5|15|POINT(8.5 -5.5) 9|7|8|-6|0|POINT(8.5 -6.5) 9|8|8|-7|17|POINT(8.5 -7.5) 9|9|8|-8|0|POINT(8.5 -8.5) 9|10|8|-9|19|POINT(8.5 -9.5) 10|1|9|0|11|POINT(9.5 -0.5) 10|2|9|-1|0|POINT(9.5 -1.5) 10|3|9|-2|13|POINT(9.5 -2.5) 10|4|9|-3|0|POINT(9.5 -3.5) 10|5|9|-4|15|POINT(9.5 -4.5) 10|6|9|-5|0|POINT(9.5 -5.5) 10|7|9|-6|17|POINT(9.5 -6.5) 10|8|9|-7|0|POINT(9.5 -7.5) 10|9|9|-8|19|POINT(9.5 -8.5) 10|10|9|-9|0|POINT(9.5 -9.5) POINT(0.5 -0.5) POINT(0.5 -1.5) POINT(-1.5 1.5) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_4ma_expected�����������������������������������������0000644�0000000�0000000�00000004215�12036040003�022471� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_value_arrays" does not exist, skipping 1|{{{1,2,3},{4,5,6},{7,8,9}}}|9.000000|9.000000|5.000000|1.000000|8.000000|2.738613|45.000000 2|{{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}}|25.000000|25.000000|13.000000|1.000000|24.000000|7.359801|325.000000 3|{{{100,101,102,103,104},{105,106,107,108,109},{110,111,112,113,114},{115,116,117,118,119},{120,121,122,123,124}}}|25.000000|124.000000|112.000000|100.000000|24.000000|7.359801|2800.000000 4|{{{15,14,13},{12,11,10},{9,8,7}}}|9.000000|15.000000|11.000000|7.000000|8.000000|2.738613|99.000000 5|{{{15,14,13,12,11},{10,9,8,7,6},{5,4,3,2,1},{0,-1,-2,-3,-4},{-5,-6,-7,-8,-9}}}|25.000000|15.000000|3.000000|-9.000000|24.000000|7.359801|75.000000 6|{{{1,3,5},{7,9,11},{13,15,17}}}|9.000000|17.000000|9.000000|1.000000|16.000000|5.477226|81.000000 7|{{{1,4,7,10,13},{16,19,22,25,28},{31,34,37,40,43},{46,49,52,55,58},{61,64,67,70,73}}}|25.000000|73.000000|37.000000|1.000000|72.000000|22.079402|925.000000 10|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}}|0.000000||||||0.000000 11|{{{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}}|0.000000||||||0.000000 12|{{{1,NULL,3},{NULL,5,NULL},{7,NULL,9}}}|5.000000|9.000000|5.000000|1.000000|8.000000|3.162278|25.000000 13|{{{1,NULL,3,NULL,5},{NULL,7,NULL,9,NULL},{11,NULL,13,NULL,15},{NULL,17,NULL,19,NULL},{21,NULL,23,NULL,25}}}|13.000000|25.000000|13.000000|1.000000|24.000000|7.788881|169.000000 14|{{{NULL,2,NULL},{4,NULL,6},{NULL,8,NULL}}}|4.000000|8.000000|5.000000|2.000000|6.000000|2.581989|20.000000 15|{{{NULL,2,NULL,4,NULL},{6,NULL,8,NULL,10},{NULL,12,NULL,14,NULL},{16,NULL,18,NULL,20},{NULL,22,NULL,24,NULL}}}|12.000000|24.000000|13.000000|2.000000|22.000000|7.211103|156.000000 16|{{{1,3.1,5.2},{NULL,NULL,11.5},{13.6,NULL,NULL}}}|5.000000|13.600000|6.880000|1.000000|12.600000|5.435715|34.400000 17|{{{NULL,3.14,NULL},{NULL,12.56,NULL},{NULL,NULL,25.12}}}|3.000000|25.120000|13.606667|3.140000|21.980000|11.027318|40.820000 18|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,9}}}|1.000000|9.000000|9.000000|9.000000|0.000000||9.000000 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_upperleft_expected�����������������������������������0000644�0000000�0000000�00000000000�11722777314�024031� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/check_raster_columns_expected���������������������������0000644�0000000�0000000�00000002324�12113171764�025516� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������raster_columns t test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) t test_raster_columns|rast|0|||||f|f|||| t test_raster_columns|rast|0|||2|2|f|f||||MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) t test_raster_columns|rast|0|||2|2|f|f||||MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) t test_raster_columns|rast|0|1|1|2|2|t|f|1||{0}|MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) t test_raster_columns|rast|0|||2|2|t|f|1||{0}|MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) t t t test_raster_columns|rast|0|1|1|3|3|t|t|1|{8BUI}|{0}|POLYGON((3 0,0 0,0 3,0 6,3 6,6 6,6 3,6 0,3 0)) ERROR: conflicting key value violates exclusion constraint "enforce_spatially_unique_test_raster_columns_rast" ERROR: new row for relation "test_raster_columns" violates check constraint "enforce_coverage_tile_rast" t test_raster_columns|rast|0|1|1|3|3|t|f|1|{8BUI}|{0}|POLYGON((3 0,0 0,0 3,0 6,3 6,6 6,6 3,6 0,3 0)) t t ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_bytea_expected���������������������������������������0000644�0000000�0000000�00000000110�11722777314�023131� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: SRID value -1 converted to the officially unknown SRID value 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_worldtorastercoord.sql�������������������������������0000644�0000000�0000000�00000007551�12054737500�024714� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE TABLE raster_world2raster ( rid integer, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO raster_world2raster VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 4, 4, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); -- skew SELECT make_test_raster(10, 4, 4, -2, -2, 1, -1); SELECT make_test_raster(11, 2, 2, 0, 0, 1, -1, 2); SELECT make_test_raster(12, 2, 2, 1, -1, 1, -1, 3); SELECT make_test_raster(13, 2, 2, 1, 1, 1, -1, 4); SELECT make_test_raster(14, 2, 2, 2, 2, 1, -1, 5); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); SELECT rid, (ST_WorldToRasterCoord(rast, -2, -2)).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, 0, 0)).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, 1, -1)).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, 1, 1)).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, 2, 2)).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, ST_MakePoint(-2, -2))).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, ST_MakePoint(0, 0))).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, ST_MakePoint(1, -1))).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, ST_MakePoint(1, 1))).* FROM raster_world2raster; SELECT rid, (ST_WorldToRasterCoord(rast, ST_MakePoint(2, 2))).* FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, -2, -2) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 0, 0) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 1, -1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 1, 1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 2, 2) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, ST_MakePoint(-2, -2)) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, -2) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 0) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, 2) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, -2, -2) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 0, 0) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 1, -1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 1, 1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 2, 2) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordX(rast, ST_MakePoint(-2, -2)) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, -2) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 0) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 1) FROM raster_world2raster; SELECT rid, ST_WorldToRasterCoordY(rast, 2) FROM raster_world2raster; DROP TABLE raster_world2raster; �������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelascentroids.sql���������������������������������0000644�0000000�0000000�00000003417�12054737500�024327� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_pixelascentroids; CREATE TABLE raster_pixelascentroids ( rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 10; height int := 10; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0); rast := ST_AddBand(rast, 1, '32BUI', 0, 0); FOR x IN 1..width LOOP FOR y IN 1..height LOOP IF (x + y) % 2 = 1 THEN rast := ST_SetValue(rast, 1, x, y, x + y); END IF; END LOOP; END LOOP; INSERT INTO raster_pixelascentroids VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION make_test_raster(); SELECT (pix).x, (pix).y, ST_RasterToWorldCoordX(rast, (pix).x, (pix).y), ST_RasterToWorldCoordY(rast, (pix).x, (pix).y), (pix).val, ST_AsText((pix).geom) FROM (SELECT rast, ST_PixelAsCentroids(rast) AS pix FROM raster_pixelascentroids) foo ORDER BY 1, 2, 3, 4, 6; SELECT (pix).x, (pix).y, ST_RasterToWorldCoordX(rast, (pix).x, (pix).y), ST_RasterToWorldCoordY(rast, (pix).x, (pix).y), (pix).val, ST_AsText((pix).geom) FROM (SELECT rast, ST_PixelAsCentroids(rast, NULL) AS pix FROM raster_pixelascentroids) foo ORDER BY 1, 2, 3, 4, 6; SELECT (pix).x, (pix).y, ST_RasterToWorldCoordX(rast, (pix).x, (pix).y), ST_RasterToWorldCoordY(rast, (pix).x, (pix).y), (pix).val, ST_AsText((pix).geom) FROM (SELECT rast, ST_PixelAsCentroids(rast, 1, FALSE) AS pix FROM raster_pixelascentroids) foo ORDER BY 1, 2, 3, 4, 6; SELECT ST_AsText(ST_PixelAsCentroid(rast, 1, 1)) FROM raster_pixelascentroids; SELECT ST_AsText(ST_PixelAsCentroid(rast, 1, 2)) FROM raster_pixelascentroids; SELECT ST_AsText(ST_PixelAsCentroid(rast, -1, -1)) FROM raster_pixelascentroids; DROP TABLE IF EXISTS raster_pixelascentroids; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_band_properties.sql����������������������������������0000644�0000000�0000000�00000021104�12233537203�024115� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 David Zwarg <dzwarg@azavea.com>, Pierre Racine <pierre.racine@sbf.ulaval.ca> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- ----------------------------------------------------------------------- --- Test of "Set" functions for properties of a raster band. ----------------------------------------------------------------------- CREATE TABLE rt_band_properties_test ( id numeric, description text, nbband integer, b1pixeltype text, b1hasnodatavalue boolean, b1nodatavalue float4, b1val float4, b2pixeltype text, b2hasnodatavalue boolean, b2nodatavalue float4, b2val float4, geomtxt text, rast raster ); INSERT INTO rt_band_properties_test VALUES ( 1, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 2, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((782325.5 26744042.5,782330.5 26744045.5,782333.5 26744040.5,782328.5 26744037.5,782325.5 26744042.5))', ( '01' -- big endian (uint8 xdr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 2) || '0000000000001440' -- scaleX (float64 5) || '00000000000014C0' -- scaleY (float64 -5) || '00000000EBDF2741' -- ipX (float64 782325.5) || '000000A84E817941' -- ipY (float64 26744042.5) || '0000000000000840' -- skewX (float64 3) || '0000000000000840' -- skewY (float64 3) || '27690000' -- SRID (int32 26919 - UTM 19N) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '02' -- pixel(0,0)==2 || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 2, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 2, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '02' -- pixel(0,0)==2 || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 3, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 3, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '6' -- hasnodatavalue and isnodata set to true || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); INSERT INTO rt_band_properties_test VALUES ( 4, '1x1, nbband:2 b1pixeltype:4BUI b1hasnodatavalue:true b1nodatavalue:3 b2pixeltype:16BSI b2hasnodatavalue:false b2nodatavalue:13', 2, --- nbband '4BUI', true, 3, 3, --- b1pixeltype, b1hasnodatavalue, b1nodatavalue, b1val '16BSI', false, 13, 4, --- b2pixeltype, b2hasnodatavalue, b2nodatavalue, b2val 'POLYGON((-75.5533328537098 49.2824585505576,-75.5525268884758 49.2826703629415,-75.5523150760919 49.2818643977075,-75.553121041326 49.2816525853236,-75.5533328537098 49.2824585505576))', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0200' -- nBands (uint16 0) || '17263529ED684A3F' -- scaleX (float64 0.000805965234044584) || 'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458) || '1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098) || '718F0E9A27A44840' -- ipY (float64 49.2824585505576) || 'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707) || '7550EB853EC32B3F' -- skewY (float64 0.000211812383858704) || 'E6100000' -- SRID (int32 4326) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) || '4' -- hasnodatavalue set to true and isnodata set to false (should be updated) || '2' -- first band type (4BUI) || '03' -- novalue==3 || '03' -- pixel(0,0)==3 (same that nodata) || '0' -- hasnodatavalue set to false || '5' -- second band type (16BSI) || '0D00' -- novalue==13 || '0400' -- pixel(0,0)==4 )::raster ); ----------------------------------------------------------------------- --- ST_BandPixelType ----------------------------------------------------------------------- SELECT b1pixeltype AS b1expected, b2pixeltype AS b2expected, st_bandpixeltype(rast, 1) AS b1obtained, st_bandpixeltype(rast, 2) AS b2obtained FROM rt_band_properties_test WHERE b1pixeltype != st_bandpixeltype(rast, 1) or b2pixeltype != st_bandpixeltype(rast, 2); ----------------------------------------------------------------------- --- ST_BandNoDataValue ----------------------------------------------------------------------- SELECT b1nodatavalue AS b1expected, b2nodatavalue AS b2expected, st_bandnodatavalue(rast, 1) AS b1obtained, b2nodatavalue != st_bandnodatavalue(rast, 2) FROM rt_band_properties_test WHERE b1nodatavalue != st_bandnodatavalue(rast, 1) or b2nodatavalue != st_bandnodatavalue(rast, 2); ----------------------------------------------------------------------- --- ST_BandIsNoData ----------------------------------------------------------------------- SELECT st_bandisnodata(rast, 1) FROM rt_band_properties_test WHERE id = 3; SELECT st_bandisnodata(rast, 2) FROM rt_band_properties_test WHERE id = 3; ----------------------------------------------------------------------- --- ST_SetBandIsNoData ----------------------------------------------------------------------- SELECT st_bandisnodata(rast, 1) FROM rt_band_properties_test WHERE id = 4; SELECT st_bandisnodata(rast, 1, TRUE) FROM rt_band_properties_test WHERE id = 4; UPDATE rt_band_properties_test SET rast = st_setbandisnodata(rast, 1) WHERE id = 4; SELECT st_bandisnodata(rast, 1) FROM rt_band_properties_test WHERE id = 4; DROP TABLE rt_band_properties_test; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/check_raster_columns.sql��������������������������������0000644�0000000�0000000�00000014354�12233537203�024436� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 Mateusz Loskot <mateusz@loskot.net> -- Copyright (C) 2011 Regents of the University of California -- <bkpark@ucdavis.edu> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- SET client_min_messages TO warning; ----------------------------------------------------------------------- --- Test RASTER_COLUMNS ----------------------------------------------------------------------- -- Check table exists SELECT c.relname FROM pg_class c, pg_views v WHERE c.relname = v.viewname AND v.viewname = 'raster_columns'; ----------------------------------------------------------------------- --- Test AddRasterConstraints and DropRasterConstraints ----------------------------------------------------------------------- DROP TABLE IF EXISTS test_raster_columns; CREATE TABLE test_raster_columns ( rid integer, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO test_raster_columns VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 2, 2, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); SELECT AddRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; SELECT DropRasterConstraints(current_schema(),'test_raster_columns', 'rast'::name); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; SELECT AddRasterConstraints('test_raster_columns', 'rast'::name, 'srid'::text, 'extent', 'blocksize'); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; SELECT DropRasterConstraints('test_raster_columns', 'rast'::name, 'scale'::text); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; SELECT AddRasterConstraints('test_raster_columns', 'rast', FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; SELECT DropRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name, 'scale'::text); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; SELECT DropRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name); DELETE FROM test_raster_columns; -- regular_blocking SELECT make_test_raster(1, 3, 3, 0, 0); SELECT make_test_raster(2, 3, 3, 3, 0); SELECT make_test_raster(3, 3, 3, 0, 3); SELECT make_test_raster(4, 3, 3, 3, 3); SELECT AddRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name); SELECT AddRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name, 'regular_blocking'); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; -- spatially unique, this should fail SELECT make_test_raster(0, 3, 3, 0, 0); -- coverage tile, this should fail SELECT make_test_raster(0, 3, 3, 1, 0); SELECT DropRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name, 'regular_blocking'); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns'; -- ticket #2215 CREATE TABLE test_raster_columns_2 AS SELECT rid, rast FROM test_raster_columns; SELECT AddRasterConstraints(current_schema(), 'test_raster_columns_2', 'rast'::name); SELECT AddRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name, 'regular_blocking'); DROP TABLE IF EXISTS test_raster_columns_2; DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); DROP TABLE IF EXISTS test_raster_columns; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/check_raster_overviews_expected�������������������������0000644�0000000�0000000�00000001476�12062705566�026104� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������raster_overviews test_raster_columns|rast|0|||||f|f|||| test_raster_overviews|rast|0|||||f|f|||| t test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) test_raster_overviews|rast|0|||||f|f|||| t test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) test_raster_overviews|rast|0|||||f|f|||| test_raster_overviews|rast|test_raster_columns|rast|1 t test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|MULTIPOLYGON(((0 0,0 -2,-2 -2,-2 0,0 0)),((3 1,3 -1,1 -1,1 0,0 0,0 2,1 2,1 3,2 3,2 4,4 4,4 2,3 2,3 1))) test_raster_overviews|rast|0|||||f|f|||| t test_raster_columns|rast|0|||||f|f|||| test_raster_overviews|rast|0|||||f|f|||| ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_gdalwarp.sql�����������������������������������������0000644�0000000�0000000�00000047206�12124572202�022546� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_gdalwarp_src; DROP TABLE IF EXISTS raster_gdalwarp_dst; CREATE TABLE raster_gdalwarp_src ( rast raster ); CREATE TABLE raster_gdalwarp_dst ( rid varchar, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 10; height int := 10; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, -500000, 600000, 1000, -1000, 0, 0, 992163); rast := ST_AddBand(rast, 1, '64BF', 0, 0); FOR x IN 1..width LOOP FOR y IN 1..height LOOP rast := ST_SetValue(rast, 1, x, y, ((x::double precision * y) + (x + y) + (x + y * x)) / (x + y + 1)); END LOOP; END LOOP; INSERT INTO raster_gdalwarp_src VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION make_test_raster(); DELETE FROM "spatial_ref_sys" WHERE srid = 992163; DELETE FROM "spatial_ref_sys" WHERE srid = 993309; DELETE FROM "spatial_ref_sys" WHERE srid = 993310; DELETE FROM "spatial_ref_sys" WHERE srid = 994269; DELETE FROM "spatial_ref_sys" WHERE srid = 984269; DELETE FROM "spatial_ref_sys" WHERE srid = 974269; INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (992163,'EPSG',2163,'PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6370997,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","2163"]]','+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (993309,'EPSG',3309,'PROJCS["NAD27 / California Albers",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3309"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (993310,'EPSG',3310,'PROJCS["NAD83 / California Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3310"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (994269,'EPSG',4269,'GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]','+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","srtext","proj4text") VALUES (984269,'EPSG','GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]','+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","srtext") VALUES (974269,'GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]'); -- _st_gdalwarp INSERT INTO raster_gdalwarp_dst (rid, rast) VALUES ( 0.0, (SELECT _st_gdalwarp( NULL )) ), ( 0.1, (SELECT _st_gdalwarp( rast, 'NearestNeighbour', 0.125, 993310 ) FROM raster_gdalwarp_src) ), ( 0.2, (SELECT _st_gdalwarp( rast, 'NearestNeighbour', 0.125, 993309 ) FROM raster_gdalwarp_src) ), ( 0.3, (SELECT _st_gdalwarp( rast, 'NearestNeighbour', 0.125, 994269 ) FROM raster_gdalwarp_src) ), ( 0.4, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, 993310, 500., 500., NULL, NULL, 0, 0 ) FROM raster_gdalwarp_src) ), ( 0.5, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, 100., NULL ) FROM raster_gdalwarp_src) ), ( 0.6, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, NULL::double precision, 100. ) FROM raster_gdalwarp_src) ), ( 0.7, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, 500., 500. ) FROM raster_gdalwarp_src) ), ( 0.8, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, 250., 250., NULL, NULL, NULL, NULL ) FROM raster_gdalwarp_src) ), ( 0.9, (SELECT _st_gdalwarp( rast, 'Bilinear', 0, NULL, 250., 250., NULL, NULL, NULL, NULL ) FROM raster_gdalwarp_src) ), ( 0.10, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, NULL, NULL, -500000, 600000 ) FROM raster_gdalwarp_src) ), ( 0.11, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, NULL, NULL, -500001, 600000 ) FROM raster_gdalwarp_src) ), ( 0.12, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, NULL, NULL, -500000, 600009 ) FROM raster_gdalwarp_src) ), ( 0.13, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, NULL, NULL, -500100, 599950 ) FROM raster_gdalwarp_src) ), ( 0.14, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, 50., 50., -290, 7 ) FROM raster_gdalwarp_src) ), ( 0.15, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, 121., 121., 0, 0 ) FROM raster_gdalwarp_src) ), ( 0.16, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, 993310, 50., 50., -290, 7 ) FROM raster_gdalwarp_src) ), ( 0.17, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, 993309, 50., 50., -290, 7 ) FROM raster_gdalwarp_src) ), ( 0.18, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, NULL, NULL, NULL, NULL, NULL, 3, 3 ) FROM raster_gdalwarp_src) ), ( 0.19, (SELECT _st_gdalwarp( rast, 'Cubic', 0, 993310, NULL, NULL, NULL, NULL, 3, 3 ) FROM raster_gdalwarp_src) ), ( 0.20, (SELECT _st_gdalwarp( rast, 'Bilinear', 0.125, 993309, NULL, NULL, NULL, NULL, 1, 3 ) FROM raster_gdalwarp_src) ), ( 0.21, (SELECT _st_gdalwarp( rast, 'Cubic', 0, 993310, 500., 500., NULL, NULL, 3, 3 ) FROM raster_gdalwarp_src) ), ( 0.22, (SELECT _st_gdalwarp( rast, 'CubicSpline', 0.125, 993310, 500., 500., -12048, 14682, 0, 6 ) FROM raster_gdalwarp_src) ), ( 0.23, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, 984269 ) FROM raster_gdalwarp_src) ), ( 0.24, (SELECT _st_gdalwarp( rast, 'NearestNeighbor', 0.125, 974269 ) FROM raster_gdalwarp_src) ), ( 0.25, (SELECT _st_gdalwarp( ST_SetGeoReference(ST_SetSRID(rast, 0), '1 0 0 -1 0 0'), 'NearestNeighbor', 0.125, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 5, 5 ) FROM raster_gdalwarp_src) ), ( 0.26, (SELECT _st_gdalwarp( ST_SetGeoReference(ST_SetSRID(rast, 0), '1 0 0 -1 0 0'), 'NearestNeighbor', 0.125, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, 2 ) FROM raster_gdalwarp_src) ), ( 0.27, (SELECT _st_gdalwarp( ST_SetGeoReference(ST_SetSRID(rast, 0), '1 0 0 -1 0 0'), 'NearestNeighbor', 0.125, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 100, 100 ) FROM raster_gdalwarp_src) ); -- ST_Resample INSERT INTO raster_gdalwarp_dst (rid, rast) VALUES ( 1.0, (SELECT ST_Resample( NULL )) ), ( 1.1, (SELECT ST_Resample( rast ) FROM raster_gdalwarp_src) ), ( 1.2, (SELECT ST_Resample( rast, 500., 500., NULL, NULL, 0, 0, 'NearestNeighbor', 0.125 ) FROM raster_gdalwarp_src) ), ( 1.3, (SELECT ST_Resample( rast, 100., NULL ) FROM raster_gdalwarp_src) ), ( 1.4, (SELECT ST_Resample( rast, NULL::double precision, 100. ) FROM raster_gdalwarp_src) ), ( 1.5, (SELECT ST_Resample( rast, 500., 500. ) FROM raster_gdalwarp_src) ), ( 1.6, (SELECT ST_Resample( rast, 250., 250., NULL, NULL, NULL, NULL ) FROM raster_gdalwarp_src) ), ( 1.7, (SELECT ST_Resample( rast, 250., 250., NULL, NULL, NULL, NULL, 'Bilinear', 0 ) FROM raster_gdalwarp_src) ), ( 1.8, (SELECT ST_Resample( rast, NULL::double precision, NULL::double precision, -500000, 600000 ) FROM raster_gdalwarp_src) ), ( 1.9, (SELECT ST_Resample( rast, NULL::double precision, NULL::double precision, -500001, 600000 ) FROM raster_gdalwarp_src) ), ( 1.10, (SELECT ST_Resample( rast, NULL::double precision, NULL::double precision, -500000, 600009 ) FROM raster_gdalwarp_src) ), ( 1.11, (SELECT ST_Resample( rast, NULL::double precision, NULL::double precision, -500100, 599950 ) FROM raster_gdalwarp_src) ), ( 1.12, (SELECT ST_Resample( rast, 50., 50., -290, 7 ) FROM raster_gdalwarp_src) ), ( 1.13, (SELECT ST_Resample( rast, 121., 121., 0, 0 ) FROM raster_gdalwarp_src) ), ( 1.14, (SELECT ST_Resample( rast, 50., 50., -290, 7 ) FROM raster_gdalwarp_src) ), ( 1.15, (SELECT ST_Resample( rast, 50., 50., -290, 7 ) FROM raster_gdalwarp_src) ), ( 1.16, (SELECT ST_Resample( rast, NULL::double precision, NULL, NULL, NULL, 3, 3 ) FROM raster_gdalwarp_src) ), ( 1.17, (SELECT ST_Resample( rast, NULL::double precision, NULL, NULL, NULL, 3, 3, 'Cubic', 0 ) FROM raster_gdalwarp_src) ), ( 1.18, (SELECT ST_Resample( rast, NULL::double precision, NULL, NULL, NULL, 1, 3, 'Bilinear' ) FROM raster_gdalwarp_src) ), ( 1.19, (SELECT ST_Resample( rast, 500., 500., NULL, NULL, 3, 3, 'Cubic', 0 ) FROM raster_gdalwarp_src) ), ( 1.20, (SELECT ST_Resample( rast, 500., 500., -12048, 14682, 0, 6, 'CubicSpline' ) FROM raster_gdalwarp_src) ), ( 1.21, (SELECT ST_Resample( rast, ST_MakeEmptyRaster(5, 5, -654321, 123456, 50, -100, 3, 0, 992163) ) FROM raster_gdalwarp_src) ), ( 1.22, (SELECT ST_Resample( rast, ST_MakeEmptyRaster(5, 5, -654321, 123456, 50, -100, 3, 0, 992163), TRUE ) FROM raster_gdalwarp_src) ), ( 1.23, (SELECT ST_Resample( rast, 150::int, 150::int ) FROM raster_gdalwarp_src) ), ( 1.24, (SELECT ST_Resample( rast, ST_MakeEmptyRaster(5, 5, -654321, 123456, 100, 100, 0, 0, 992163), FALSE ) FROM raster_gdalwarp_src) ), ( 1.25, (SELECT ST_Resample( rast, NULL::raster, FALSE ) FROM raster_gdalwarp_src) ); -- ST_Transform INSERT INTO raster_gdalwarp_dst (rid, rast) VALUES ( 2.1, (SELECT ST_Transform( rast, 993310 ) FROM raster_gdalwarp_src) ), ( 2.2, (SELECT ST_Transform( rast, 993309 ) FROM raster_gdalwarp_src) ), ( 2.3, (SELECT ST_Transform( rast, 994269 ) FROM raster_gdalwarp_src) ), ( 2.4, (SELECT ST_Transform( rast, 993310, NULL ) FROM raster_gdalwarp_src) ), ( 2.5, (SELECT ST_Transform( rast, 993310, 'Bilinear' ) FROM raster_gdalwarp_src) ), ( 2.6, (SELECT ST_Transform( rast, 993310, 'Bilinear', NULL::double precision ) FROM raster_gdalwarp_src) ), ( 2.7, (SELECT ST_Transform( rast, 993310, 'Cubic', 0.0 ) FROM raster_gdalwarp_src) ), ( 2.8, (SELECT ST_Transform( rast, 993310, 'NearestNeighbour', 0.0 ) FROM raster_gdalwarp_src) ), ( 2.9, (SELECT ST_Transform( rast, 993310, 'NearestNeighbor', 0.0 ) FROM raster_gdalwarp_src) ), ( 2.10, (SELECT ST_Transform( rast, 993310, 'NearestNeighbor', 0.125, 500, 500 ) FROM raster_gdalwarp_src) ), ( 2.11, (SELECT ST_Transform( rast, 993309, 'Cubic', 0., 100, 100 ) FROM raster_gdalwarp_src) ), ( 2.12, (SELECT ST_Transform( rast, 993310, 'CubicSpline', 0., 2000, 2000 ) FROM raster_gdalwarp_src) ), ( 2.13, (SELECT ST_Transform( rast, 993310, 'CubicSpline', 0.1, 1500, 1500 ) FROM raster_gdalwarp_src) ), ( 2.14, (SELECT ST_Transform( rast, 993310, 500, 500 ) FROM raster_gdalwarp_src) ), ( 2.15, (SELECT ST_Transform( rast, 993310, 750 ) FROM raster_gdalwarp_src) ); -- ST_Rescale INSERT INTO raster_gdalwarp_dst (rid, rast) VALUES ( 3.1, (SELECT ST_Rescale( rast, 100, 100 ) FROM raster_gdalwarp_src) ), ( 3.2, (SELECT ST_Rescale( rast, 100 ) FROM raster_gdalwarp_src) ), ( 3.3, (SELECT ST_Rescale( rast, 0, 0 ) FROM raster_gdalwarp_src) ), ( 3.4, (SELECT ST_Rescale( rast, 0 ) FROM raster_gdalwarp_src) ), ( 3.5, (SELECT ST_Rescale( rast, 100, 100, 'Bilinear', 0 ) FROM raster_gdalwarp_src) ), ( 3.6, (SELECT ST_Rescale( rast, 150, 125, 'Cubic' ) FROM raster_gdalwarp_src) ); -- ST_Reskew INSERT INTO raster_gdalwarp_dst (rid, rast) VALUES ( 4.1, (SELECT ST_Reskew( rast, 0, 0 ) FROM raster_gdalwarp_src) ), ( 4.2, (SELECT ST_Reskew( rast, 1, 1 ) FROM raster_gdalwarp_src) ), ( 4.3, (SELECT ST_Reskew( rast, 0.5, 0 ) FROM raster_gdalwarp_src) ), ( 4.4, (SELECT ST_Reskew( rast, 10 ) FROM raster_gdalwarp_src) ), ( 4.5, (SELECT ST_Reskew( rast, 10, 'CubicSpline' ) FROM raster_gdalwarp_src) ), ( 4.6, (SELECT ST_Reskew( rast, 10, 'Bilinear', 0 ) FROM raster_gdalwarp_src) ); -- ST_SnapToGrid INSERT INTO raster_gdalwarp_dst (rid, rast) VALUES ( 5.1, (SELECT ST_SnapToGrid( rast, -500000, 600000 ) FROM raster_gdalwarp_src) ), ( 5.2, (SELECT ST_SnapToGrid( rast, 0, 0 ) FROM raster_gdalwarp_src) ), ( 5.3, (SELECT ST_SnapToGrid( rast, -1, 600000 ) FROM raster_gdalwarp_src) ), ( 5.4, (SELECT ST_SnapToGrid( rast, -500001, 600000 ) FROM raster_gdalwarp_src) ), ( 5.5, (SELECT ST_SnapToGrid( rast, 1, 600000 ) FROM raster_gdalwarp_src) ), ( 5.6, (SELECT ST_SnapToGrid( rast, -500000, -1 ) FROM raster_gdalwarp_src) ), ( 5.7, (SELECT ST_SnapToGrid( rast, -500000, -9 ) FROM raster_gdalwarp_src) ), ( 5.8, (SELECT ST_SnapToGrid( rast, -500000, 1 ) FROM raster_gdalwarp_src) ), ( 5.9, (SELECT ST_SnapToGrid( rast, -500000, 9 ) FROM raster_gdalwarp_src) ), ( 5.10, (SELECT ST_SnapToGrid( rast, -5, 1 ) FROM raster_gdalwarp_src) ), ( 5.11, (SELECT ST_SnapToGrid( rast, 9, -9 ) FROM raster_gdalwarp_src) ), ( 5.12, (SELECT ST_SnapToGrid( rast, -500000, 600000, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.13, (SELECT ST_SnapToGrid( rast, 0, 0, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.14, (SELECT ST_SnapToGrid( rast, -1, 600000, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.15, (SELECT ST_SnapToGrid( rast, -500001, 600000, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.16, (SELECT ST_SnapToGrid( rast, 1, 600000, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.17, (SELECT ST_SnapToGrid( rast, -500000, -1, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.18, (SELECT ST_SnapToGrid( rast, -500000, -9, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.19, (SELECT ST_SnapToGrid( rast, -500000, 1, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.20, (SELECT ST_SnapToGrid( rast, -500000, 9, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.21, (SELECT ST_SnapToGrid( rast, -5, 1, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.22, (SELECT ST_SnapToGrid( rast, 9, -9, 50, 50 ) FROM raster_gdalwarp_src) ), ( 5.23, (SELECT ST_SnapToGrid( rast, 0, 0, 121 ) FROM raster_gdalwarp_src) ), ( 5.24, (SELECT ST_SnapToGrid( rast, -500000, 1, 121 ) FROM raster_gdalwarp_src) ), ( 5.25, (SELECT ST_SnapToGrid( rast, -500000, 9, 121 ) FROM raster_gdalwarp_src) ), ( 5.26, (SELECT ST_SnapToGrid( rast, -5, 1, 121 ) FROM raster_gdalwarp_src) ), ( 5.27, (SELECT ST_SnapToGrid( rast, 9, -9, 121 ) FROM raster_gdalwarp_src) ); SELECT rid, srid, width, height, numbands, round(scalex::numeric, 3) AS scalex, round(scaley::numeric, 3) AS scaley, round(skewx::numeric, 3) AS skewx, round(skewy::numeric, 3) AS skewy, round(upperleftx::numeric, 3) AS upperleftx, round(upperlefty::numeric, 3) AS upperlefty, count > 0 AS count_check, round(min::numeric, 3) >= 1.667 AS min_check, round(max::numeric, 3) <= 100.995 AS max_check FROM ( SELECT rid, (ST_MetaData(rast)).*, (ST_SummaryStats(rast)).* FROM raster_gdalwarp_dst ORDER BY rid ) foo; DROP TABLE raster_gdalwarp_src; DROP TABLE raster_gdalwarp_dst; WITH foo AS ( SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 600000, 100, -100, 0, 0, 992163), 1, '16BUI', 1, 0) AS rast UNION ALL SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 600000, 100, -100, 0, 0, 992163), 1, '16BUI', 2, 0) AS rast UNION ALL SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 600000, 100, -100, 0, 0, 992163), 1, '16BUI', 3, 0) AS rast UNION ALL SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599800, 100, -100, 0, 0, 992163), 1, '16BUI', 10, 0) AS rast UNION ALL SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599800, 100, -100, 0, 0, 992163), 1, '16BUI', 20, 0) AS rast UNION ALL SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599800, 100, -100, 0, 0, 992163), 1, '16BUI', 30, 0) AS rast UNION ALL SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599600, 100, -100, 0, 0, 992163), 1, '16BUI', 100, 0) AS rast UNION ALL SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599600, 100, -100, 0, 0, 992163), 1, '16BUI', 200, 0) AS rast UNION ALL SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599600, 100, -100, 0, 0, 992163), 1, '16BUI', 300, 0) AS rast ), bar AS ( SELECT ST_Transform(rast, 994269) AS alignto FROM foo LIMIT 1 ), baz AS ( SELECT rid, rast, ST_Transform(rast, 994269) AS not_aligned, ST_Transform(rast, alignto) AS aligned FROM foo CROSS JOIN bar ) SELECT ST_SameAlignment(rast) AS rast, ST_SameAlignment(not_aligned) AS not_aligned, ST_SameAlignment(aligned) AS aligned FROM baz; DELETE FROM "spatial_ref_sys" WHERE srid = 992163; DELETE FROM "spatial_ref_sys" WHERE srid = 993309; DELETE FROM "spatial_ref_sys" WHERE srid = 993310; DELETE FROM "spatial_ref_sys" WHERE srid = 994269; DELETE FROM "spatial_ref_sys" WHERE srid = 984269; DELETE FROM "spatial_ref_sys" WHERE srid = 974269; -- ST_Resize() WITH foo AS( SELECT 1 AS rid, ST_Resize( ST_AddBand( ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 255, 0 ) , '50%', '500' ) AS rast UNION ALL SELECT 2 AS rid, ST_Resize( ST_AddBand( ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 255, 0 ) , 500, 100 ) AS rast UNION ALL SELECT 3 AS rid, ST_Resize( ST_AddBand( ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 255, 0 ) , 0.25, 0.9 ) AS rast UNION ALL SELECT -- ticket #2188 4 AS rid, ST_Resize( ST_AddBand( ST_MakeEmptyRaster(1024, 768, 0, 0, 1, -1, 0, 0, 0) , 1, '8BUI', 255, 0 ) , 0.5, 0.5 ) AS rast ), bar AS ( SELECT rid, ST_Metadata(rast) AS meta, ST_SummaryStats(rast) AS stats FROM foo ) SELECT rid, (meta).*, (stats).* FROM bar; -- edge case WITH foo AS ( SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0) AS rast ) SELECT ST_Metadata(ST_Rescale(rast, 2, 2)) AS rescale, ST_Metadata(ST_Resize(rast, 0.5, 0.5)) AS resize FROM foo; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/check_gdal.sql������������������������������������������0000644�0000000�0000000�00000000146�11770700612�022300� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT CASE WHEN strpos(postgis_gdal_version(), 'GDAL_DATA') <> 0 THEN false ELSE NULL END; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_astiff_expected��������������������������������������0000644�0000000�0000000�00000001014�12245413746�023302� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t t 1 1 1 1 NOTICE: The TIFF format only permits one NODATA value for all bands. The value used will be the last band with a NODATA value. 1 NOTICE: The TIFF format only permits one NODATA value for all bands. The value used will be the last band with a NODATA value. NOTICE: The TIFF format only permits one NODATA value for all bands. The value used will be the last band with a NODATA value. 1 ERROR: The pixel type of band 1 in the raster is not 8BUI. JPEG compression can only be used with the 8BUI pixel type. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebra_expr_expected�����������������������������0000644�0000000�0000000�00000020676�12125341165�025166� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t T1|t T2|t T3||19 T4||2 T5||2 T6||-1 T7|100|15 ERROR: RASTER_nMapAlgebraExpr: Invalid pixel type: 4BUId T9|101|3 T10.6.2|10|40 T10.6.3|10|30 T10.6.4|10|25 T10.7.2|10|45 T10.7.3|10|34 T10.7.4|10|28 T10.8.2|10|50 T10.8.3|10|37 T10.8.4|10|30 ERROR: division by zero T11.1|10|2 T11.2|10|2 T12|t|t|t|t 0|1|INTERSECTION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|2|INTERSECTION|1.000|-1.000|1|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|3|INTERSECTION|1.000|1.000|1|1|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|4|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10|11|INTERSECTION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|INTERSECTION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|INTERSECTION|1.000|1.000|2|1|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|14|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |0|INTERSECTION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| |1|INTERSECTION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| |2|INTERSECTION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| |3|INTERSECTION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| |4|INTERSECTION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| |10|INTERSECTION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| |11|INTERSECTION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| |12|INTERSECTION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| |13|INTERSECTION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| |14|INTERSECTION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 0||INTERSECTION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 1||INTERSECTION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 2||INTERSECTION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 3||INTERSECTION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 4||INTERSECTION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 10||INTERSECTION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 11||INTERSECTION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 12||INTERSECTION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 13||INTERSECTION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 14||INTERSECTION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| ||INTERSECTION|||||||||||||| 0|1|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.500 0|2|UNION|-2.000|-2.000|5|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|3|UNION|-2.000|-2.000|5|5|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|4.000 0|4|UNION|-2.000|-2.000|6|6|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|5.000 10|11|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|UNION|-2.000|-2.000|4|5|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000| 10|14|UNION|-2.000|-2.000|4|6|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000| 0|1|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000|1.500 0|2|UNION|-2.000|-2.000|5|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000| 0|3|UNION|-2.000|-2.000|5|5|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000|100.000 0|4|UNION|-2.000|-2.000|6|6|1.000|1.000|0.000|0.000|0|1|32BF|0.000|200.000|100.000 10|11|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000|200.000 10|12|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000|200.000 10|13|UNION|-2.000|-2.000|4|5|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000| 10|14|UNION|-2.000|-2.000|4|6|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|200.000| |0|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 |1|UNION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 |2|UNION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 |3|UNION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 |4|UNION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 |10|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |11|UNION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 |12|UNION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 |13|UNION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 |14|UNION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 0||UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 1||UNION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 2||UNION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 3||UNION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 4||UNION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10||UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 11||UNION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 12||UNION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 13||UNION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 14||UNION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 ||UNION|||||||||||||| 0|1|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|2|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|3|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|4|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 10|11|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|14|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |0|FIRST|||||||||||||| |1|FIRST|||||||||||||| |2|FIRST|||||||||||||| |3|FIRST|||||||||||||| |4|FIRST|||||||||||||| |10|FIRST|||||||||||||| |11|FIRST|||||||||||||| |12|FIRST|||||||||||||| |13|FIRST|||||||||||||| |14|FIRST|||||||||||||| 0||FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 1||FIRST|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 2||FIRST|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 3||FIRST|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 4||FIRST|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10||FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 11||FIRST|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 12||FIRST|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 13||FIRST|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 14||FIRST|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 ||FIRST|||||||||||||| 0|1|SECOND|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 0|2|SECOND|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000||3.000 0|3|SECOND|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000||4.000 0|4|SECOND|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10|11|SECOND|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 10|12|SECOND|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 10|13|SECOND|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000||4.000 10|14|SECOND|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 |0|SECOND|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 |1|SECOND|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 |2|SECOND|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 |3|SECOND|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 |4|SECOND|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 |10|SECOND|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |11|SECOND|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 |12|SECOND|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 |13|SECOND|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 |14|SECOND|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 0||SECOND|||||||||||||| 1||SECOND|||||||||||||| 2||SECOND|||||||||||||| 3||SECOND|||||||||||||| 4||SECOND|||||||||||||| 10||SECOND|||||||||||||| 11||SECOND|||||||||||||| 12||SECOND|||||||||||||| 13||SECOND|||||||||||||| 14||SECOND|||||||||||||| ||SECOND|||||||||||||| ������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/load_outdb-post.pl��������������������������������������0000755�0000000�0000000�00000000353�12147721424�023155� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������use File::Basename; use Cwd 'abs_path'; my $REGDIR = abs_path(dirname($0)); my $RASTERDIR = abs_path($REGDIR . "/../raster/test/regress"); unlink $RASTERDIR . '/' . $TEST . '-pre.sql'; #unlink $RASTERDIR . '/' . $TEST . '-post.sql'; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_bandmetadata_expected��������������������������������0000644�0000000�0000000�00000000345�11727671074�024445� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8BUI||f| 8BUI|1.000|f| 8BUI|2.000|f| 8BUI|3.000|f| 8BUI|4.000|f| NOTICE: Invalid band index: 6. Indices must be 1-based. Returning NULL ||| 1|1.000|f| 2|2.000|f| 5|5.000|f| 1|1.000|f| 2|2.000|f| 3|3.000|f| 4|4.000|f| 5|5.000|f| �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/load_outdb_expected�������������������������������������0000644�0000000�0000000�00000000002�12147721424�023425� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������4 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_rotation_expected������������������������������������0000644�0000000�0000000�00000001103�11722777314�023667� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T3|4|1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1|-197395559850 T3|5|1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1|-950546840812 T4|104|5099019513593|4706787243316|1961161351382|0|0 T4|105|8602325267043|464990554975|5812381937191|0|0 T5|104|3605551275464|1941450686788|4714951667914|-3605551275464|785398163397 T5|105|6082762530298|-3781176708023|4438772657245|-6082762530298|785398163397 T6|104|4415880433164|3095616647230|4051809172875|-2549509756796|523598775598 T6|105|7449832212876|-2503497335467|5266165691593|-4301162633521|523598775598 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_neighborhood_expected��������������������������������0000644�0000000�0000000�00000002256�12171527046�024503� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_neighborhood" does not exist, skipping {{NULL,NULL,NULL},{NULL,NULL,1},{NULL,1,1}} {{NULL,NULL,NULL},{NULL,0,1},{NULL,1,1}} {{NULL,1,1},{1,1,1},{1,NULL,1}} {{1,1,1},{1,1,NULL},{1,1,1}} {{1,1,NULL,1,1},{1,1,1,1,1},{NULL,1,1,NULL,1},{1,1,1,1,1},{1,NULL,1,1,NULL}} {{1,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}} {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}} {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}} {{NULL,NULL,NULL},{NULL,NULL,1},{NULL,NULL,1}} {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}} {{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL}} {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}} {{1,1,NULL},{1,1,1},{NULL,1,1}} {{1,1,1,1,1},{NULL,1,1,NULL,1},{1,1,1,1,1},{1,NULL,1,1,NULL},{1,1,1,1,1}} {{1,1,1},{1,1,NULL},{1,1,1},{NULL,1,1},{1,1,1}} {{1,1,1}} {{NULL,NULL,NULL},{NULL,NULL,1},{NULL,1,1}} {{1,1,1,1,1},{NULL,1,1,NULL,1},{1,1,1,1,1},{1,NULL,1,1,NULL},{1,1,1,1,1}} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_iscoveragetile_expected������������������������������0000644�0000000�0000000�00000004776�12062705672�025054� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_iscoveragetile" does not exist, skipping 1|t 1|t 1|t 1|t 1|t 1|t 1|t 1|t 1|t 2|t 2|t 2|t 2|t 2|t 2|t 2|t 2|t 2|t 3|t 3|t 3|t 3|t 3|t 3|t 3|t 3|t 3|t 4|t 4|t 4|t 4|t 4|t 4|t 4|t 4|t 4|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 5|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 6|t 7|t 7|t 7|t 7|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 8|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 9|t 11|t 11|t 11|t 11|t 11|t 11|t 11|t 11|t 11|t 12|t 12|t 12|t 12|t 12|t 12|t 12|t 12|t 12|t 13|t 13|t 13|t 13|t 13|t 13|t 13|t 13|t 13|t 14|t 14|t 14|t 14|t 14|t 14|t 14|t 14|t 14|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 15|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 16|t 17|t 17|t 17|t 17|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 18|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t 19|t NOTICE: Raster width/height is invalid for interior tile of coverage NOTICE: Raster width/height is invalid for interior tile of coverage NOTICE: Raster width/height is invalid for right-most tile of coverage NOTICE: Raster width/height is invalid for interior tile of coverage NOTICE: Raster width/height is invalid for interior tile of coverage NOTICE: Raster width/height is invalid for right-most tile of coverage NOTICE: Raster width/height is invalid for bottom-most tile of coverage NOTICE: Raster width/height is invalid for bottom-most tile of coverage 20|f 20|f 20|f 20|f 20|f 20|f 20|f 20|f 20|t 51|t 51|t 51|t 51|t 51|t 51|t 51|t 51|t 51|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 52|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t 53|t ��postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelofvalue_expected��������������������������������0000644�0000000�0000000�00000001506�11772376273�024546� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_pixelofvalue" does not exist, skipping 3|1|2 11|1|10 3|2|1 11|2|9 11|3|8 11|4|7 11|5|6 11|6|5 11|7|4 11|8|3 11|9|2 11|10|1 5|1|4 5|2|3 5|3|2 5|4|1 NOTICE: No pixels of search values found for band at index 1 0|1|1 0|1|3 0|1|5 0|1|7 0|1|9 0|2|2 0|2|4 0|2|6 0|2|8 0|2|10 0|3|1 0|3|3 0|3|5 0|3|7 0|3|9 0|4|2 0|4|4 0|4|6 0|4|8 0|4|10 0|5|1 0|5|3 0|5|5 0|5|7 0|5|9 0|6|2 0|6|4 0|6|6 0|6|8 0|6|10 0|7|1 0|7|3 0|7|5 0|7|7 0|7|9 0|8|2 0|8|4 0|8|6 0|8|8 0|8|10 0|9|1 0|9|3 0|9|5 0|9|7 0|9|9 0|10|2 0|10|4 0|10|6 0|10|8 0|10|10 1|6 2|5 3|4 4|3 5|2 6|1 NOTICE: No pixels of search values found for band at index 1 1|1 1|3 1|5 1|7 1|9 2|2 2|4 2|6 2|8 2|10 3|1 3|3 3|5 3|7 3|9 4|2 4|4 4|6 4|8 4|10 5|1 5|3 5|5 5|7 5|9 6|2 6|4 6|6 6|8 6|10 7|1 7|3 7|5 7|7 7|9 8|2 8|4 8|6 8|8 8|10 9|1 9|3 9|5 9|7 9|9 10|2 10|4 10|6 10|8 10|10 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_hasnoband_expected�����������������������������������0000644�0000000�0000000�00000000002�11722777314�023762� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafctngb_userfunc.sql������������������������0000644�0000000�0000000�00000021011�12045000525�026114� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- -- A user callback function that nullifies all cells in the resulting raster. -- CREATE OR REPLACE FUNCTION ST_Nullage(matrix float[][], nodatamode text, VARIADIC args text[]) RETURNS float AS $$ BEGIN RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- --Test rasters -- CREATE OR REPLACE FUNCTION ST_TestRasterNgb(h integer, w integer, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(h, w, 0, 0, 1, 1, 0, 0, 0), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; -- test st_max4ma, uniform values SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_max4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 1 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- test st_max4ma, obvious max value SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_max4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 11 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 1, 1, 11) AS rast; -- test st_max4ma, value substitution SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_max4ma(float[][], text, text[])'::regprocedure, '22', NULL), 2, 2 ) = 22 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 3, 3, NULL) AS rast; -- test st_min4ma, uniform values SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_min4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 1 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- test st_min4ma, obvious min value SELECT ST_Value(rast, 2, 2) = 11, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_min4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 1 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 11), 1, 1, 1) AS rast; -- test st_min4ma, value substitution SELECT ST_Value(rast, 2, 2) = 22, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_min4ma(float[][], text, text[])'::regprocedure, '2', NULL), 2, 2 ) = 2 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 22), 3, 3, NULL) AS rast; -- test st_sum4ma happens in rt_mapalgebrafctngb.sql -- test st_mean4ma, uniform values SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_mean4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 1 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- test st_mean4ma, obvious min value SELECT ST_Value(rast, 2, 2) = 10, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_mean4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 9 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 10), 1, 1, 1) AS rast; -- test st_mean4ma, value substitution SELECT ST_Value(rast, 2, 2) = 10, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_mean4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2 ) = 9 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 10), 3, 3, NULL) AS rast; -- test st_range4ma, uniform values SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_range4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 0 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- test st_range4ma, obvious min value SELECT ST_Value(rast, 2, 2) = 10, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_range4ma(float[][], text, text[])'::regprocedure, NULL, NULL), 2, 2 ) = 9 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 10), 1, 1, 1) AS rast; -- test st_range4ma, value substitution SELECT ST_Value(rast, 2, 2) = 10, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_range4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2 ) = 9 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 10), 3, 3, NULL) AS rast; -- test st_slope, flat plane SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_Slope(rast, 1, NULL), 2, 2 ) = 0 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- test st_slope, corner spike SELECT ST_Value(rast, 2, 2) = 1, round(ST_Value( ST_Slope(rast, 1, NULL), 2, 2 )*100000) = 5784902 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 1, 1, 10) AS rast; -- test st_slope, corner droop SELECT ST_Value(rast, 2, 2) = 10, round(ST_Value( ST_Slope(rast, 1, NULL), 2, 2 )*100000) = 5784902 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 10), 1, 1, 1) AS rast; -- test st_aspect, flat plane SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_Aspect(rast, 1, NULL), 2, 2 ) = -1 FROM ST_SetBandNoDataValue(ST_TestRasterNgb(3, 3, 1), NULL) AS rast; -- test st_aspect, North SELECT ST_Value(rast, 2, 2) = 1, round(ST_Value( ST_Aspect(rast, 1, NULL), 2, 2 )*10000) = 0 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 1, 0) AS rast; -- test st_aspect, South SELECT ST_Value(rast, 2, 2) = 1, round(ST_Value( ST_Aspect(rast, 1, NULL), 2, 2 )*10000) = 1800000 FROM ST_SetValue(ST_TestRasterNgb(3, 3, 1), 2, 3, 0) AS rast; -- test st_aspect, East SELECT ST_Value(rast, 2, 2) = 1, round(ST_Value( ST_Aspect(rast, 1, NULL), 2, 2 )*10000) = 900000 FROM ST_SetValue(ST_SetScale(ST_TestRasterNgb(3, 3, 1), 1, -1), 3, 2, 0) AS rast; -- test st_aspect, West SELECT ST_Value(rast, 2, 2) = 1, round(ST_Value( ST_Aspect(rast, 1, NULL), 2, 2 )*10000) = 2700000 FROM ST_SetValue(ST_SetScale(ST_TestRasterNgb(3, 3, 1), 1, -1), 1, 2, 0) AS rast; -- test st_hillshade, flat plane SELECT ST_Value(rast, 2, 2) = 1, round(ST_Value( ST_Hillshade(rast, 1, NULL, 0.0, 45., 255), 2, 2 )*10000) = 1803122 FROM ST_TestRasterNgb(3, 3, 1) AS rast; -- test st_hillshade, known set from: http://webhelp.esri.com/arcgiSDEsktop/9.3/index.cfm?TopicName=How%20Hillshade%20works SELECT round(ST_Value( ST_Hillshade(rast, 1, NULL, 315.0, 45., 255, 1.0), 2, 2 )*10000) = 1540287 FROM ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetScale(ST_TestRasterNgb(3, 3, 1), 5), 1, 1, 2450 ), 2, 1, 2461 ), 3, 1, 2483 ), 1, 2, 2452 ), 2, 2, 2461 ), 3, 2, 2483 ), 1, 3, 2447 ), 2, 3, 2455 ), 3, 3, 2477 ) AS rast; -- test st_hillshade, defaults on known set from: http://webhelp.esri.com/arcgiSDEsktop/9.3/index.cfm?TopicName=How%20Hillshade%20works SELECT round(ST_Value( ST_Hillshade(rast, 1, NULL, 315.0, 45.), 2, 2 )*10000) = 1540287 FROM ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetScale(ST_TestRasterNgb(3, 3, 1), 5), 1, 1, 2450 ), 2, 1, 2461 ), 3, 1, 2483 ), 1, 2, 2452 ), 2, 2, 2461 ), 3, 2, 2483 ), 1, 3, 2447 ), 2, 3, 2455 ), 3, 3, 2477 ) AS rast; -- test st_distinct4ma, all one value SELECT ST_Value(rast, 2, 2) = 10, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_distinct4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2 ) = 1 FROM ST_TestRasterNgb(3, 3, 10) AS rast; -- test st_distinct4ma, three distinct values SELECT ST_Value(rast, 2, 2) = 1, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_distinct4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2 ) = 3 FROM ST_SetValue( ST_SetValue( ST_TestRasterNgb(3, 3, 1), 1, 1, 5 ), 3, 3, 7 ) AS rast; -- test st_stddev4ma, all one value SELECT ST_Value(rast, 2, 2) = 10, ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_stddev4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2 ) = 0 FROM ST_TestRasterNgb(3, 3, 10) AS rast; -- test st_stddev4ma, values 1-9 SELECT ST_Value(rast, 2, 2) = 5, round(ST_Value( ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_stddev4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2 ) * 1000000) = 2738613 FROM ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_TestRasterNgb(3, 3, 1), 2, 1, 2 ), 3, 1, 3 ), 1, 2, 4 ), 2, 2, 5 ), 3, 2, 6 ), 1, 3, 7 ), 2, 3, 8 ), 3, 3, 9 ) AS rast; DROP FUNCTION ST_Nullage(matrix float[][], nodatamode text, VARIADIC args text[]); DROP FUNCTION ST_TestRasterNgb(h integer, w integer, val float8); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_setvalues_geomval.sql��������������������������������0000644�0000000�0000000�00000004756�12040074154�024475� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_setvalues_rast; CREATE TABLE raster_setvalues_rast AS SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast ; DROP TABLE IF EXISTS raster_setvalues_geom; CREATE TABLE raster_setvalues_geom AS SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1, 4 -1, 4 -4, 1 -4, 1 -1))'::geometry geom UNION ALL SELECT 3 AS gid, 'SRID=0;POLYGON((0 0, 5 0, 5 -1, 1 -1, 1 -4, 0 -4, 0 0))'::geometry geom UNION ALL SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0, 4 4, 4 -4)'::geometry ; SELECT rid, gid, ST_DumpValues(ST_SetValue(rast, 1, geom, gid)) FROM raster_setvalues_rast t1 CROSS JOIN raster_setvalues_geom t2 ORDER BY rid, gid; SELECT t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, t2.gid), ROW(t3.geom, t3.gid)]::geomval[])) FROM raster_setvalues_rast t1 CROSS JOIN raster_setvalues_geom t2 CROSS JOIN raster_setvalues_geom t3 WHERE t2.gid = 1 AND t3.gid = 2 ORDER BY t1.rid, t2.gid, t3.gid; SELECT t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t3.geom, t3.gid), ROW(t2.geom, t2.gid)]::geomval[])) FROM raster_setvalues_rast t1 CROSS JOIN raster_setvalues_geom t2 CROSS JOIN raster_setvalues_geom t3 WHERE t2.gid = 1 AND t3.gid = 2 ORDER BY t1.rid, t2.gid, t3.gid; SELECT t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t3.geom, t3.gid), ROW(t2.geom, t2.gid)]::geomval[])) FROM raster_setvalues_rast t1 CROSS JOIN raster_setvalues_geom t2 CROSS JOIN raster_setvalues_geom t3 WHERE t2.gid = 1 AND t3.gid = 3 ORDER BY t1.rid, t2.gid, t3.gid; SELECT t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t3.geom, t3.gid), ROW(t2.geom, t2.gid)]::geomval[])) FROM raster_setvalues_rast t1 CROSS JOIN raster_setvalues_geom t2 CROSS JOIN raster_setvalues_geom t3 WHERE t2.gid = 1 AND t3.gid = 4; WITH foo AS ( SELECT array_agg(gid) AS gid, ST_Union(geom) AS geom FROM raster_setvalues_geom WHERE gid IN (1,4) ) SELECT t1.rid, t2.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, 99)]::geomval[])) FROM raster_setvalues_rast t1 CROSS JOIN foo t2; WITH foo AS ( SELECT array_agg(gid) AS gid, ST_Union(geom) AS geom FROM raster_setvalues_geom WHERE gid IN (2,3) ) SELECT t1.rid, t2.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, 99)]::geomval[])) FROM raster_setvalues_rast t1 CROSS JOIN foo t2; DROP TABLE IF EXISTS raster_setvalues_rast; DROP TABLE IF EXISTS raster_setvalues_geom; ������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_colormap_expected������������������������������������0000644�0000000�0000000�00000024401�12143272140�023633� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_colormap_out" does not exist, skipping NOTICE: table "raster_colormap_in" does not exist, skipping NOTICE: RGBA value cannot be greater than 255. Defaulting to 255 NOTICE: RGBA value cannot be greater than 255. Defaulting to 255 NOTICE: RGBA value cannot be greater than 255. Defaulting to 255 NOTICE: RGBA value cannot be greater than 255. Defaulting to 255 NOTICE: Method INTERPOLATE requires at least two non-NODATA colormap entries. Using NEAREST instead NOTICE: Method INTERPOLATE requires at least two non-NODATA colormap entries. Using NEAREST instead 1|1|{{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255}} 1|1|{{0,0,3,5,8,10,13,16,18,21},{23,26,29,31,34,36,39,42,44,47},{49,52,55,57,60,62,65,68,70,73},{75,78,81,83,86,88,91,94,96,99},{101,104,107,109,112,114,117,120,122,125},{128,130,133,135,138,141,143,146,148,151},{154,156,159,161,164,167,169,172,174,177},{180,182,185,187,190,193,195,198,200,203},{206,208,211,213,216,219,221,224,226,229},{232,234,237,239,242,245,247,250,252,255}} 1|2|{{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255}} 1|2|{{0,0,3,5,8,10,13,16,18,21},{23,26,29,31,34,36,39,42,44,47},{49,52,55,57,60,62,65,68,70,73},{75,78,81,83,86,88,91,94,96,99},{101,104,107,109,112,114,117,120,122,125},{128,130,133,135,138,141,143,146,148,151},{154,156,159,161,164,167,169,172,174,177},{180,182,185,187,190,193,195,198,200,203},{206,208,211,213,216,219,221,224,226,229},{232,234,237,239,242,245,247,250,252,255}} 1|3|{{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255},{0,0,32,64,96,128,159,191,223,255}} 1|3|{{0,0,3,5,8,10,13,16,18,21},{23,26,29,31,34,36,39,42,44,47},{49,52,55,57,60,62,65,68,70,73},{75,78,81,83,86,88,91,94,96,99},{101,104,107,109,112,114,117,120,122,125},{128,130,133,135,138,141,143,146,148,151},{154,156,159,161,164,167,169,172,174,177},{180,182,185,187,190,193,195,198,200,203},{206,208,211,213,216,219,221,224,226,229},{232,234,237,239,242,245,247,250,252,255}} 1|4|{{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255}} 1|4|{{0,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}} 2|1|{{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255},{0,0,0,0,64,127,127,127,191,255}} 2|1|{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,3,8,13,18},{23,29,34,39,44,49,54,60,65,70},{75,80,86,91,96,101,106,111,117,122},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,130,135,140,145,151},{156,161,166,171,177,182,187,192,198,203},{208,213,218,224,229,234,239,245,250,255}} 2|2|{{0,0,5,10,16,21,26,31,36,41},{47,52,57,62,67,73,78,83,88,93},{98,104,109,114,119,124,124,119,114,109},{104,98,93,88,83,78,73,67,62,57},{52,47,41,36,31,26,21,16,10,5},{0,10,21,31,42,52,62,73,83,94},{104,114,125,135,146,156,167,177,187,198},{208,219,229,239,250,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}} 2|2|{{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255},{0,0,64,127,64,0,128,255,255,255}} 2|3|{{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255},{0,0,0,0,64,127,191,255,255,255}} 2|3|{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,3,8,13,18},{23,29,34,39,44,49,54,60,65,70},{75,80,86,91,96,101,106,111,117,122},{127,132,137,143,148,153,158,164,169,174},{179,184,190,195,200,205,211,216,221,226},{231,237,242,247,252,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}} 2|4|{{0,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}} 2|4|{{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255},{0,255,255,255,255,255,255,255,255,255}} 3|1|{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}} 3|1|{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}} 3|2|{{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127}} 3|2|{{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127},{127,127,127,127,127,127,127,127,127,127}} 3|3|{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}} 3|3|{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}} 3|4|{{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}} 3|4|{{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255},{255,255,255,255,255,255,255,255,255,255}} 4|1|{{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0},{255,191,128,64,0,0,0,0,0,0}} 4|2|{{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0},{0,64,128,191,255,255,191,128,64,0}} 4|3|{{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255},{0,0,0,0,0,0,64,128,191,255}} 5|1|{{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0},{255,254,222,191,159,127,95,64,32,0}} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_aspng_expected���������������������������������������0000644�0000000�0000000�00000001412�12245413746�023140� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t ERROR: The pixel type of band 1 in the raster is not 8BUI or 16BUI. The PNG format can only be used with 8BUI and 16BUI pixel types. 1 ERROR: The pixel type of band 1 in the raster is not 8BUI or 16BUI. The PNG format can only be used with 8BUI and 16BUI pixel types. 1 ERROR: The pixel type of band 1 in the raster is not 8BUI or 16BUI. The PNG format can only be used with 8BUI and 16BUI pixel types. ERROR: The pixel type of band 1 in the raster is not 8BUI or 16BUI. The PNG format can only be used with 8BUI and 16BUI pixel types. ERROR: The pixel type of band 1 in the raster is not 8BUI or 16BUI. The PNG format can only be used with 8BUI and 16BUI pixel types. 1 NOTICE: The PNG format only permits one, three or four bands. The first band will be used. 1 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_set_properties.sql�����������������������������������0000644�0000000�0000000�00000017526�12233537203�024021� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 David Zwarg <dzwarg@azavea.com>, Pierre Racine <pierre.racine@sbf.ulaval.ca> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_properties_test ( id numeric, name text, srid integer, width integer, height integer, scalex double precision, scaley double precision, ipx double precision, ipy double precision, skewx double precision, skewy double precision, rast raster ); INSERT INTO rt_properties_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 10, 10, 20, --- SRID, width, height 2, 3, 0.5, 0.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_properties_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 12, 1, 1, --- SRID, width, height 5, 5, 2.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 0, 0, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 1, 1, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '000000000000F03F' -- skewX (float64 1) || '000000000000F03F' -- skewY (float64 1) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_properties_test VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 0, 1, 1, --- SRID, width, height 5, 5, 7.5, 2.5, 3, 7, --- georeference ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000840' -- skewX (float64 3) || '0000000000001C40' -- skewY (float64 7) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- --- Test of "Set" functions for properties of the raster. --- (Objective B03a) ----------------------------------------------------------------------- ----------------------------------------------------------------------- --- ST_SetSRID ----------------------------------------------------------------------- SELECT (srid+1) AS expected, st_srid(st_setsrid(rast,srid+1)) AS obtained FROM rt_properties_test WHERE (srid+1) != st_srid(st_setsrid(rast,srid+1)); ----------------------------------------------------------------------- --- ST_SetScale ----------------------------------------------------------------------- SELECT (scalex+2) AS expectedx, (scaley+3) AS expectedy, st_scalex(st_setscale(rast,scalex+2,scaley)) AS obtainedx, st_scaley(st_setscale(rast,scalex,scaley+3)) AS obtainedy FROM rt_properties_test WHERE (scalex+2) != st_scalex(st_setscale(rast,scalex+2,scaley)) OR (scaley+3) != st_scaley(st_setscale(rast,scalex,scaley+3)); SELECT (scalex+2) AS expectedx, (scaley+3) AS expectedy, st_scalex(st_setscale(rast,scalex+2)) AS obtainedx, st_scaley(st_setscale(rast,scaley+3)) AS obtainedy FROM rt_properties_test WHERE (scalex+2) != st_scalex(st_setscale(rast,scalex+2)) OR (scaley+3) != st_scaley(st_setscale(rast,scaley+3)); ----------------------------------------------------------------------- --- ST_SetSkew ----------------------------------------------------------------------- SELECT (skewx+2) AS expectedx, (skewy+3) AS expectedy, st_skewx(st_setskew(rast,skewx+2,skewy)) AS obtainedx, st_skewy(st_setskew(rast,skewx,skewy+3)) AS obtainedy FROM rt_properties_test WHERE (skewx+2) != st_skewx(st_setskew(rast,skewx+2,skewy)) OR (skewy+3) != st_skewy(st_setskew(rast,skewx,skewy+3)); SELECT (skewx+2) AS expectedx, (skewy+3) AS expectedy, st_skewx(st_setskew(rast,skewx+2)) AS obtainedx, st_skewy(st_setskew(rast,skewy+3)) AS obtainedy FROM rt_properties_test WHERE (skewx+2) != st_skewx(st_setskew(rast,skewx+2)) OR (skewy+3) != st_skewy(st_setskew(rast,skewy+3)); ----------------------------------------------------------------------- --- ST_SetUpperLeft ----------------------------------------------------------------------- SELECT (ipx+2) AS expectedx, (ipy+3) AS expectedy, st_upperleftx(st_setupperleft(rast,ipx+2,ipy)) AS obtainedx, st_upperlefty(st_setupperleft(rast,ipx,ipy+3)) AS obtainedy FROM rt_properties_test WHERE (ipx+2) != st_upperleftx(st_setupperleft(rast,ipx+2,ipy)) OR (ipy+3) != st_upperlefty(st_setupperleft(rast,ipx,ipy+3)); DROP TABLE rt_properties_test; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_count.sql��������������������������������������������0000644�0000000�0000000�00000003025�11722777314�022102� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_Count( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE ); SELECT ST_Count( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1 ); SELECT ST_Count( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , FALSE ); SELECT ST_Count( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) ); BEGIN; CREATE TEMP TABLE test ON COMMIT DROP AS SELECT rast.rast FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) AS rast ) AS rast FULL JOIN ( SELECT generate_series(1, 10) AS id ) AS id ON 1 = 1; SELECT ST_Count('test', 'rast', 1, TRUE); SELECT ST_Count('test', 'rast', 1, FALSE); SELECT ST_Count('test', 'rast', 1); SELECT ST_Count('test', 'rast', FALSE); SELECT ST_Count('test', 'rast'); ROLLBACK; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_hasnoband.sql����������������������������������������0000644�0000000�0000000�00000002515�12233537203�022677� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2011 Jorge Arevalo <jorge.arevalo@deimos-space.com> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE empty_raster_test ( rid numeric, rast raster ); INSERT INTO empty_raster_test VALUES (1, ST_MakeEmptyRaster( 100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) ); ------------------------------------------------------------------- -- st_hasnodata ----------------------------------------------------------------------- select st_hasnoband(rast) from empty_raster_test; DROP TABLE empty_raster_test; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_addband_expected�������������������������������������0000644�0000000�0000000�00000002376�12135560666�023421� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0 0 1 1 1 0 0 3 3 3 0 0 15 15 15 -128 -128 0 127 127 21 127 0 0 255 255 21 255 255 -32768 -32768 0 32767 32767 21 32767 0 0 65535 65535 21 65535 -2147483648 -2147483648 0 2147483647 2147483647 21 210000 0 0 4294967295 4294967295 4294967295 21 4294967295 0 4294967040 4.29497e+9 4294967296 4.29497e+9 4294967296 4.29497e+9 21.4599990844727 21.46 21003.099609375 21003.1 123.456001281738 123.456 1234.56701660156 1234.57 210000.46875 210000 -1 0 14294967296.1235 21.46 21003.1 123.4567 1234.567 210000.464564365 1234.46456436475 NOTICE: rt_raster_copy_band: Second raster has no band NOTICE: RASTER_copyBand: Could not add band to raster. Returning original raster. 1234.5678 NOTICE: rt_raster_copy_band: Second raster has no band NOTICE: RASTER_copyBand: Could not add band to raster. Returning original raster. 1234.5678 NOTICE: rt_raster_copy_band: Second raster has no band NOTICE: RASTER_copyBand: Could not add band to raster. Returning original raster. 1234.5678 1234.567|255 1|4BUI|0|f| 2|8BUI|0|f| 3|16BUI|0|f| 4|32BUI|0|f| 5|64BF|0|f| 1|2BUI|0|f| 2|4BUI|0|f| 3|8BUI|0|f| 4|16BUI|0|f| 5|32BUI|0|f| 6|64BF|0|f| 1|4BUI|0|f| 2|8BUI|0|f| 3|16BUI|0|f| 4|32BUI|0|f| 5|64BF|0|f| 6|2BUI|0|f| 90 1|1|t|t 1|2|t|t 1|3|t|t 2|1|t|t 2|2|t|t 2|3|t|t 3|1|f| 3|2|t|t 4|1|t|t 4|2|f| ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_set_properties_expected������������������������������0000644�0000000�0000000�00000000000�11722777314�025072� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/README��������������������������������������������������0000644�0000000�0000000�00000000347�11722777314�020410� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Run 'make check' to run the postgresql-wrappers regression testing. You must be allowed to create databases and install C-language function in it. You must also have installed the wrappers with 'make install' from top-level dir. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/Makefile.in���������������������������������������������0000644�0000000�0000000�00000007576�12233537203�021575� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id$ # # Copyright (c) 2009 Sandro Santilli <strk@keybit.net>, Pierre Racine <pierre.racine@sbf.ulaval.ca> # Copyright (c) 2011 Jorge Arevalo <jorge.arevalo@deimos-space.com> # Copyright (c) 2011-2013 Regents of the University of California # <bkpark@ucdavis.edu> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# POSTGIS_SRC=../../.. PERL=@PERL@ # MingW hack: rather than use PGSQL_BINDIR directly, we change # to the directory and then use "pwd" to return the path. This # ensures that the returned path is in MSYS format, otherwise # colons in drive letters will break PATH. PGSQL_BINDIR=$(shell cd "@PGSQL_BINDIR@" && pwd) # Where we put our regression installation REGRESS_INSTALLDIR=$(POSTGIS_SRC)/regress/00-regress-install # # Put path from pg_config into front of search path # PATH := $(PGSQL_BINDIR):$(PATH) export PATH TEST_FIRST = \ check_gdal \ load_outdb TEST_LAST = \ clean TEST_METADATA = \ check_raster_columns \ check_raster_overviews TEST_IO = \ rt_io TEST_BASIC_FUNC = \ rt_bytea \ box3d \ rt_addband \ rt_band \ rt_tile TEST_PROPS = \ rt_dimensions \ rt_scale \ rt_pixelsize \ rt_upperleft \ rt_rotation \ rt_georeference \ rt_set_properties \ rt_isempty \ rt_hasnoband \ rt_metadata \ rt_rastertoworldcoord \ rt_worldtorastercoord \ rt_convexhull TEST_BANDPROPS = \ rt_band_properties \ rt_set_band_properties \ rt_pixelaspolygons \ rt_pixelaspoints \ rt_pixelascentroids \ rt_setvalues_array \ rt_summarystats \ rt_count \ rt_histogram \ rt_quantile \ rt_valuecount \ rt_valuepercent \ rt_bandmetadata \ rt_pixelvalue \ rt_neighborhood \ rt_nearestvalue \ rt_pixelofvalue \ rt_polygon TEST_UTILITY = \ rt_utility \ rt_fromgdalraster \ rt_asgdalraster \ rt_astiff \ rt_asjpeg \ rt_aspng \ rt_reclass \ rt_gdalwarp \ rt_asraster \ rt_dumpvalues TEST_MAPALGEBRA = \ rt_mapalgebraexpr \ rt_mapalgebrafct \ rt_mapalgebraexpr_2raster \ rt_mapalgebrafct_2raster \ rt_mapalgebrafctngb \ rt_mapalgebrafctngb_userfunc \ rt_intersection \ rt_clip \ rt_mapalgebra \ rt_mapalgebra_expr \ rt_union \ rt_invdistweight4ma \ rt_4ma \ rt_setvalues_geomval \ rt_elevation_functions \ rt_colormap TEST_SREL = \ rt_gist_relationships \ rt_intersects \ rt_samealignment \ rt_geos_relationships \ rt_iscoveragetile TEST_BUGS = \ bug_test_car5 \ tickets TEST_LOADER = \ loader/Basic \ loader/BasicCopy \ loader/BasicFilename \ loader/BasicOutDB \ loader/Tiled10x10 \ loader/Tiled10x10Copy \ loader/Tiled8x8 TESTS = $(TEST_FIRST) \ $(TEST_METADATA) $(TEST_IO) $(TEST_BASIC_FUNC) \ $(TEST_PROPS) $(TEST_BANDPROPS) \ $(TEST_UTILITY) $(TEST_MAPALGEBRA) $(TEST_SREL) \ $(TEST_BUGS) \ $(TEST_LOADER) \ $(TEST_LAST) all: @echo "Use 'make check' to run all tests" distclean: clean rm -f Makefile clean: $(RM) -f rtpostgis.sql rtpostgis.sql: ../../rt_pg/rtpostgis.sql $(PERL) -lpe "s'\\\$$libdir'$(REGRESS_INSTALLDIR)/lib'g" $< > $@ check: $(MAKE) -C ../../../regress staged-install $(PERL) ../../../regress/run_test.pl --raster $(RUNTESTFLAGS) $(TESTS) $(PERL) ../../../regress/run_test.pl --upgrade --raster $(RUNTESTFLAGS) $(TESTS) ����������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_intersection.sql�������������������������������������0000644�0000000�0000000�00000010016�11774671150�023454� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_intersection; CREATE TABLE raster_intersection ( rid integer, rast raster ); DROP TABLE IF EXISTS raster_intersection_out; CREATE TABLE raster_intersection_out ( rid1 integer, rid2 integer, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO raster_intersection VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 4, 4, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); -- skew SELECT make_test_raster(10, 4, 4, -2, -2, 0.1, 0.1); SELECT make_test_raster(11, 4, 4, -0.9, -0.9, 0.1, 0.1, 2); SELECT make_test_raster(12, 2, 2, -1.9, -1, 0.1, 0.1, 3); SELECT make_test_raster(13, 2, 2, 0, -1.8, 0.1, 0.1, 4); SELECT make_test_raster(14, 2, 2, 2, 2, 0.1, 0.1, 5); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); INSERT INTO raster_intersection_out (SELECT r1.rid, r2.rid, ST_Intersection( r1.rast, r2.rast ) FROM raster_intersection r1 JOIN raster_intersection r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, ST_Intersection( r1.rast, r2.rast ) FROM raster_intersection r1 JOIN raster_intersection r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_intersection_out (SELECT r1.rid, r2.rid, ST_Intersection( r1.rast, r2.rast, 'BAND1' ) FROM raster_intersection r1 JOIN raster_intersection r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, ST_Intersection( r1.rast, r2.rast, 'BAND1' ) FROM raster_intersection r1 JOIN raster_intersection r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; INSERT INTO raster_intersection_out (SELECT r1.rid, r2.rid, ST_Intersection( r1.rast, r2.rast, 'BAND2' ) FROM raster_intersection r1 JOIN raster_intersection r2 ON r1.rid != r2.rid WHERE r1.rid = 0 AND r2.rid BETWEEN 1 AND 9 ) UNION ALL ( SELECT r1.rid, r2.rid, ST_Intersection( r1.rast, r2.rast, 'BAND2' ) FROM raster_intersection r1 JOIN raster_intersection r2 ON r1.rid != r2.rid WHERE r1.rid = 10 AND r2.rid BETWEEN 11 AND 19) ; SELECT rid1, rid2, round(upperleftx::numeric, 3) AS upperleftx, round(upperlefty::numeric, 3) AS upperlefty, width, height, round(scalex::numeric, 3) AS scalex, round(scaley::numeric, 3) AS scaley, round(skewx::numeric, 3) AS skewx, round(skewy::numeric, 3) AS skewy, srid, numbands, pixeltype, round(nodatavalue::numeric, 3) AS nodatavalue, round(firstvalue::numeric, 3) AS firstvalue, round(lastvalue::numeric, 3) AS lastvalue FROM ( SELECT rid1, rid2, (ST_Metadata(rast)).*, (ST_BandMetadata(rast, 1)).*, ST_Value(rast, 1, 1, 1) AS firstvalue, ST_Value(rast, 1, ST_Width(rast), ST_Height(rast)) AS lastvalue FROM raster_intersection_out ) AS r; -- Display the pixels and the values of the resulting rasters SELECT rid1, rid2, band, (gvxy).x, (gvxy).y, (gvxy).val, ST_AsText((gvxy).geom) geom FROM ( SELECT rid1, rid2, band, ST_PixelAsPolygons(rast, band) gvxy FROM raster_intersection_out CROSS JOIN generate_series(1, 2) band ) foo ORDER BY 1, 2, 3, 4, 5, 6, 7; DROP TABLE IF EXISTS raster_intersection; DROP TABLE IF EXISTS raster_intersection_out; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/check_raster_overviews.sql������������������������������0000644�0000000�0000000�00000012745�12233537203�025011� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 Mateusz Loskot <mateusz@loskot.net> -- Copyright (C) 2011 Regents of the University of California -- <bkpark@ucdavis.edu> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- SET client_min_messages TO warning; ----------------------------------------------------------------------- --- Test RASTER_OVERVIEWS ----------------------------------------------------------------------- -- Check table exists SELECT c.relname FROM pg_class c, pg_views v WHERE c.relname = v.viewname AND v.viewname = 'raster_overviews'; ----------------------------------------------------------------------- --- Test AddOverviewConstraints and DropOverviewConstraints ----------------------------------------------------------------------- DROP TABLE IF EXISTS test_raster_columns; CREATE TABLE test_raster_columns ( rid integer, rast raster ); DROP TABLE IF EXISTS test_raster_overviews; CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO test_raster_columns VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 2, 2, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); SELECT * INTO test_raster_overviews FROM test_raster_columns; SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name IN ('test_raster_columns', 'test_raster_overviews') ORDER BY r_table_name, r_raster_column; SELECT o_table_name, o_raster_column, r_table_name, r_raster_column, overview_factor FROM raster_overviews WHERE o_table_name = 'test_raster_overviews'; SELECT AddRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name IN ('test_raster_columns', 'test_raster_overviews') ORDER BY r_table_name, r_raster_column; SELECT o_table_name, o_raster_column, r_table_name, r_raster_column, overview_factor FROM raster_overviews WHERE o_table_name = 'test_raster_overviews'; SELECT AddOverviewConstraints('test_raster_overviews', 'rast', 'test_raster_columns', 'rast', 1); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name IN ('test_raster_columns', 'test_raster_overviews') ORDER BY r_table_name, r_raster_column; SELECT o_table_name, o_raster_column, r_table_name, r_raster_column, overview_factor FROM raster_overviews WHERE o_table_name = 'test_raster_overviews'; SELECT DropOverviewConstraints(current_schema(), 'test_raster_overviews', 'rast'); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name IN ('test_raster_columns', 'test_raster_overviews') ORDER BY r_table_name, r_raster_column; SELECT o_table_name, o_raster_column, r_table_name, r_raster_column, overview_factor FROM raster_overviews WHERE o_table_name = 'test_raster_overviews'; SELECT DropRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name); SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name IN ('test_raster_columns', 'test_raster_overviews') ORDER BY r_table_name, r_raster_column; SELECT o_table_name, o_raster_column, r_table_name, r_raster_column, overview_factor FROM raster_overviews WHERE o_table_name = 'test_raster_overviews'; DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); DROP TABLE IF EXISTS test_raster_overviews; DROP TABLE IF EXISTS test_raster_columns; ���������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_nearestvalue.sql�������������������������������������0000644�0000000�0000000�00000006140�12006552273�023440� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_nearestvalue; CREATE TABLE raster_nearestvalue ( rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 10; height int := 10; x int; y int; rast raster; valset double precision[][]; BEGIN rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0); rast := ST_AddBand(rast, 1, '8BUI', 1, 0); valset := array_fill(0., ARRAY[height, width]); FOR y IN 1..height LOOP FOR x IN 1..width LOOP valset[y][x] := 2 * x + (1/3) * y; END LOOP; END LOOP; rast := ST_SetValues(rast, 1, 1, 1, valset); rast := ST_SetValue(rast, 1, 1, 0); rast := ST_SetValue(rast, 4, 1, 0); rast := ST_SetValue(rast, 7, 1, 0); rast := ST_SetValue(rast, 10, 1, 0); rast := ST_SetValue(rast, 2, 3, 0); rast := ST_SetValue(rast, 5, 3, 0); rast := ST_SetValue(rast, 8, 3, 0); rast := ST_SetValue(rast, 3, 5, 0); rast := ST_SetValue(rast, 6, 5, 0); rast := ST_SetValue(rast, 9, 5, 0); rast := ST_SetValue(rast, 1, 7, 0); rast := ST_SetValue(rast, 4, 7, 0); rast := ST_SetValue(rast, 7, 7, 0); rast := ST_SetValue(rast, 10, 7, 0); rast := ST_SetValue(rast, 2, 9, 0); rast := ST_SetValue(rast, 5, 9, 0); rast := ST_SetValue(rast, 8, 9, 0); INSERT INTO raster_nearestvalue VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION IF EXISTS make_test_raster(); SELECT ST_NearestValue(rast, 1, 1, 1) FROM raster_nearestvalue; SELECT ST_NearestValue(ST_SetBandNoDataValue(rast, NULL), 1, 1, 1) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, 2, 2) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, 5, 5) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, 5, 5) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, 11, 11) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, 12, 12) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, 0, 0) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, 0, 2) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, -1, 3) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, -9, 3) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, -9, 3, FALSE) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(1, 1)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(2, 2)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(5, 5)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(5, 5)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(11, 11)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(12, 12)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(0, 0)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(0, 2)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(-1, 3)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(-9, 3)) FROM raster_nearestvalue; SELECT ST_NearestValue(rast, 1, ST_MakePoint(-9, 3), FALSE) FROM raster_nearestvalue; DROP TABLE IF EXISTS raster_nearestvalue; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/box3d.sql�����������������������������������������������0000644�0000000�0000000�00000007052�12233537203�021255� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Sandro Santilli <strk@keybit.net>, David Zwarg <dzwarg@azavea.com> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_box3d_test ( id numeric, name text, rast raster, env box3d ); -- 10x20, ip:0.5,0.5 scale:2,3 INSERT INTO rt_box3d_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ,'BOX3D(0.5 0.5,20.5 60.5 0)' -- expected envelope (20x60) == (10*2 x 20*3) ); INSERT INTO rt_box3d_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ,'BOX3D(2.5 2.5,7.5 7.5 0)' -- expected envelope ); INSERT INTO rt_box3d_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 7.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ,'BOX3D(7.5 2.5,12.5 7.5 0)' -- expected envelope ); ----------------------------------------------------------------------- -- test bounding box (2D) ----------------------------------------------------------------------- SELECT id, env as expected, rast::box3d as obtained FROM rt_box3d_test WHERE rast::box3d::text != env::text; SELECT id, env as expected, box3d(rast) as obtained FROM rt_box3d_test WHERE box3d(rast)::text != env::text; SELECT id, env as expected, box3d(st_convexhull(rast)) as obtained FROM rt_box3d_test WHERE box3d(st_convexhull(rast))::text != env::text; SELECT id, env as expected, box3d(st_envelope(rast)) as obtained FROM rt_box3d_test WHERE box3d(st_envelope(rast))::text != env::text; -- Cleanup DROP TABLE rt_box3d_test; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebraexpr.sql�����������������������������������0000644�0000000�0000000�00000012733�12003664670�023743� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE OR REPLACE FUNCTION ST_TestRaster(ulx float8, uly float8, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(10, 10, ulx, uly, 1, 1, 0, 0, 0), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION raster_plus_twenty(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN IF pixel IS NULL THEN RAISE NOTICE 'Pixel value is null.'; END IF; RETURN pixel + 20; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_plus_arg1(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_polynomial(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE m float := 1; b float := 0; BEGIN IF NOT args[1] is NULL THEN m := args[1]::float; END IF; IF NOT args[2] is NULL THEN b := args[2]::float; END IF; RETURN m * pixel + b; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_nullage(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_x_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + pos[1] + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_y_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + pos[2] + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Test NULL raster SELECT ST_MapAlgebraExpr(NULL, 1, NULL, '[rast] + 20', 2) IS NULL FROM ST_TestRaster(0, 0, -1) rast; -- Test empty raster SELECT 'T1', ST_IsEmpty(ST_MapAlgebraExpr(ST_MakeEmptyRaster(0, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, '[rast] + 20', 2)); -- Test hasnoband raster SELECT 'T2', ST_HasNoBand(ST_MapAlgebraExpr(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, '[rast] + 20', 2)); -- Test hasnodata value SELECT 'T3', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(ST_SetBandNoDataValue(rast, NULL), 1, NULL, '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test nodata value SELECT 'T4', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, NULL, '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test 'rast' expression SELECT 'T5', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, NULL, '[rast]', 2), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; SELECT 'T6', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(ST_SetBandNoDataValue(rast, NULL), 1, NULL, '[rast]'), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test pixeltype SELECT 'T7', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, '4BUI', '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, 100) rast; SELECT 'T8', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, '4BUId', '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, 100) rast; SELECT 'T9', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, '2BUI', '[rast] + 20', 2), 1, 1) FROM ST_TestRaster(0, 0, 101) rast; -- Test '[rast.x]', '[rast.y]' and '[rast.val]' substitutions expression SELECT 'T10.'||x||'.'||y, ST_Value(rast, x, y), ST_Value(ST_MapAlgebraExpr(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])'), x, y) FROM ST_TestRaster(0, 0, 10) rast, generate_series(6, 8) as x, generate_series(2, 4) as y ORDER BY x, y; -- Test divide by zero; blows up the whole query, not just the SPI SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, NULL, '[rast]/0'), 1, 1) FROM ST_TestRaster(0, 0, 10) rast; -- Test evaluations to null (see #1523) WITH op AS ( select rast AS rin, ST_MapAlgebraExpr(rast, 1, NULL, 'SELECT g from (select NULL::double precision as g) as foo', 2) AS rout FROM ST_TestRaster(0, 0, 10) rast ) SELECT 'T11.1', ST_Value(rin, 1, 1), ST_Value(rout, 1, 1) FROM op; WITH op AS ( select rast AS rin, ST_MapAlgebraExpr(rast, 1, NULL, 'SELECT g from (select [rast],NULL::double precision as g) as foo', 2) AS rout FROM ST_TestRaster(0, 0, 10) rast ) SELECT 'T11.2', ST_Value(rin, 1, 1), ST_Value(rout, 1, 1) FROM op; -- Test pracine's new bug #1638 SELECT 'T12', ST_Value(rast, 1, 2) = 1, ST_Value(rast, 2, 1) = 2, ST_Value(rast, 4, 3) = 4, ST_Value(rast, 3, 4) = 3 FROM ST_MapAlgebraExpr( ST_AddBand( ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, 0.001, 0, 0, 4269), '8BUI'::text, 1, 0 ), '32BUI', '[rast.x]' ) AS rast; DROP FUNCTION ST_TestRaster(ulx float8, uly float8, val float8); DROP FUNCTION raster_plus_twenty(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_plus_arg1(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_polynomial(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_nullage(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_x_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]); DROP FUNCTION raster_y_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]); �������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_asjpeg_expected��������������������������������������0000644�0000000�0000000�00000001102�12245413746�023275� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t ERROR: The pixel type of band 1 in the raster is not 8BUI. The JPEG format can only be used with the 8BUI pixel type. 1 ERROR: The pixel type of band 1 in the raster is not 8BUI. The JPEG format can only be used with the 8BUI pixel type. 1 1 ERROR: The pixel type of band 1 in the raster is not 8BUI. The JPEG format can only be used with the 8BUI pixel type. NOTICE: The JPEG format only permits one or three bands. The first band will be used. ERROR: The pixel type of band 1 in the raster is not 8BUI. The JPEG format can only be used with the 8BUI pixel type. 1 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_band_expected����������������������������������������0000644�0000000�0000000�00000000521�11722777314�022737� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������123.4567 1234.567 1234.567 1234.5678 987.654321 9876.54321 1234.5678 987.654321 9876.54321 1234.5678 1234.5678 9876.54321 987.654321 1234.5678 1234.5678 1234.5678 1234.5678 4 3 2 1 1 1 NOTICE: Invalid band index (must use 1-based). Returning original raster 3 NOTICE: Invalid band index (must use 1-based). Returning original raster 3 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_io_expected������������������������������������������0000644�0000000�0000000�00000001316�11722777314�022445� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1x1 no bands, no transform|t|t 1x1 single band (1BB) no transform|t|t 1x1 single band (2BUI) no transform|t|t 1x1 single band (4BUI) no transform|t|t 1x1 single band (8BSI) no transform|t|t 1x1 single band (8BUI) no transform|t|t 1x1 single band (16BSI) no transform|t|t 1x1 single band (16BUI) no transform|t|t 1x1 single band (32BSI) no transform|t|t 1x1 single band (32BUI) no transform|t|t 1x1 single band (32BF) no transform|t|t 1x1 single band (64BF) no transform|t|t 1x1 single band (64BF external) no transform|t|t ERROR: rt_band_from_wkb: Invalid value 2 for pixel of type 1BB ERROR: rt_band_from_wkb: Invalid value 4 for pixel of type 2BUI ERROR: rt_band_from_wkb: Invalid value 16 for pixel of type 4BUI ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_neighborhood.sql�������������������������������������0000644�0000000�0000000�00000004737�12171527046�023426� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_neighborhood; CREATE TABLE raster_neighborhood ( rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE rast raster; BEGIN rast := ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0); rast := ST_AddBand(rast, 1, '8BUI', 1, 0); rast := ST_SetValue(rast, 1, 1, 0); rast := ST_SetValue(rast, 4, 1, 0); rast := ST_SetValue(rast, 7, 1, 0); rast := ST_SetValue(rast, 10, 1, 0); rast := ST_SetValue(rast, 2, 3, 0); rast := ST_SetValue(rast, 5, 3, 0); rast := ST_SetValue(rast, 8, 3, 0); rast := ST_SetValue(rast, 3, 5, 0); rast := ST_SetValue(rast, 6, 5, 0); rast := ST_SetValue(rast, 9, 5, 0); rast := ST_SetValue(rast, 1, 7, 0); rast := ST_SetValue(rast, 4, 7, 0); rast := ST_SetValue(rast, 7, 7, 0); rast := ST_SetValue(rast, 10, 7, 0); rast := ST_SetValue(rast, 2, 9, 0); rast := ST_SetValue(rast, 5, 9, 0); rast := ST_SetValue(rast, 8, 9, 0); INSERT INTO raster_neighborhood VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION IF EXISTS make_test_raster(); SELECT ST_Neighborhood(rast, 1, 1, 1, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(ST_SetBandNoDataValue(rast, NULL), 1, 1, 1, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 2, 2, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 5, 5, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 5, 5, 2, 2) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 11, 11, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 12, 12, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 0, 0, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 0, 2, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, -1, 3, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, -9, 3, 3, 3) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, -9, 3, 3, 3, FALSE) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 4, 4, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 4, 4, 2, 2) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 4, 4, 1, 2) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 4, 4, 1, 0) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 'POINT(0 0)'::geometry, 1, 1) FROM raster_neighborhood; SELECT ST_Neighborhood(rast, 1, 'POINT(3 -3)'::geometry, 2, 2) FROM raster_neighborhood; DROP TABLE IF EXISTS raster_neighborhood; ���������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_valuepercent.sql�������������������������������������0000644�0000000�0000000�00000013056�11722777314�023454� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, ARRAY[]::double precision[], 0); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, NULL::double precision[], 0); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, FALSE, NULL::double precision[], 0); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, NULL::double precision[], 0.1); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, ARRAY[3.1], 0.1); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, ARRAY[-10]); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , ARRAY[-10], 0); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , ARRAY[-10, 3]); SELECT round(ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, TRUE, 3.14, 0.19)::numeric, 3); SELECT round(ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, FALSE, 3.14, 0.01)::numeric, 3); SELECT round(ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, -10, 0.1)::numeric, 3); SELECT round(ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 1, -10)::numeric, 3); SELECT round(ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , -10., 10)::numeric, 3); SELECT round(ST_ValuePercent( ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) , 3.14159)::numeric, 3); BEGIN; CREATE TEMP TABLE test ON COMMIT DROP AS SELECT rast.rast FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0) , 1, '64BF', 0, 0 ) , 1, 1, 1, -10 ) , 1, 5, 4, 0 ) , 1, 5, 5, 3.14159 ) AS rast ) AS rast FULL JOIN ( SELECT generate_series(1, 10) AS id ) AS id ON 1 = 1; SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, FALSE, NULL::double precision[], 0); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, ARRAY[-10]::double precision[], 0); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, ARRAY[1]::double precision[]); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', NULL::double precision[], 0.1); SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', ARRAY[-1, 3.1]::double precision[], 0.1); SELECT round(ST_ValuePercent('test', 'rast', 1, TRUE, NULL::double precision, 0)::numeric, 3); SELECT round(ST_ValuePercent('test', 'rast', 1, 3.14, 1)::numeric, 3); SELECT round(ST_ValuePercent('test', 'rast', 1, -1)::numeric, 3); SELECT round(ST_ValuePercent('test', 'rast', 3.1, 0.1)::numeric, 3); SELECT round(ST_ValuePercent('test', 'rast', -9.)::numeric, 3); ROLLBACK; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelaspolygons.sql����������������������������������0000644�0000000�0000000�00000003161�11774707474�024222� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_pixelaspolygons; CREATE TABLE raster_pixelaspolygons ( rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 10; height int := 10; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0); rast := ST_AddBand(rast, 1, '32BUI', 0, 0); FOR x IN 1..width LOOP FOR y IN 1..height LOOP IF (x + y) % 2 = 1 THEN rast := ST_SetValue(rast, 1, x, y, x + y); END IF; END LOOP; END LOOP; INSERT INTO raster_pixelaspolygons VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION make_test_raster(); SELECT (pix).x, (pix).y, (pix).val, ST_AsText((pix).geom) FROM (SELECT ST_PixelAsPolygons(rast) AS pix FROM raster_pixelaspolygons) foo ORDER BY 1, 2, 4; SELECT (pix).x, (pix).y, (pix).val, ST_AsText((pix).geom) FROM (SELECT ST_PixelAsPolygons(ST_SetBandNoDataValue(rast, NULL)) AS pix FROM raster_pixelaspolygons) foo ORDER BY 1, 2, 4; SELECT (pix).x, (pix).y, (pix).val, ST_AsText((pix).geom) FROM (SELECT ST_PixelAsPolygons(rast, NULL) AS pix FROM raster_pixelaspolygons) foo ORDER BY 1, 2, 4; SELECT (pix).x, (pix).y, (pix).val, ST_AsText((pix).geom) FROM (SELECT ST_PixelAsPolygons(rast, 1, FALSE) AS pix FROM raster_pixelaspolygons) foo ORDER BY 1, 2, 4; SELECT ST_AsText(ST_PixelAsPolygon(rast, 1, 1)) FROM raster_pixelaspolygons; SELECT ST_AsText(ST_PixelAsPolygon(rast, 1, 2)) FROM raster_pixelaspolygons; SELECT ST_AsText(ST_PixelAsPolygon(rast, -1, -1)) FROM raster_pixelaspolygons; DROP TABLE IF EXISTS raster_pixelaspolygons; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_clip_expected����������������������������������������0000644�0000000�0000000�00000063357�12210402370�022756� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|1|1|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 1|1|2|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 1|1|3|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 1|1|4|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 1|1|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 1|2|1|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 1|2|2|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 1|2|3|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 1|2|4|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 1|2|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 2|1|1|0.000|0.000|0|0|1.000|-1.000|0.000|0.000|0|0|| 2|1|2|2.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 2|1|3|1.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 2|1|4|1.000|0.000|3|4|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 2|1|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|0.000 2|2|1|0.000|0.000|0|0|1.000|-1.000|0.000|0.000|0|0|| 2|2|2|2.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 2|2|3|1.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 2|2|4|1.000|0.000|3|4|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 2|2|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|0.000 3|1|1|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 3|1|2|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 3|1|3|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 3|1|4|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 3|1|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 3|2|1|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 3|2|2|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 3|2|3|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 3|2|4|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 3|2|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 4|1|1|0.000|0.000|0|0|1.000|-1.000|0.000|0.000|0|0|| 4|1|2|2.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 4|1|3|1.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 4|1|4|1.000|0.000|3|4|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 4|1|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|1|8BUI|255.000 4|2|1|0.000|0.000|0|0|1.000|-1.000|0.000|0.000|0|0|| 4|2|2|2.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 4|2|3|1.000|-1.000|2|2|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 4|2|4|1.000|0.000|3|4|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 4|2|5|0.000|0.000|4|4|1.000|-1.000|0.000|0.000|0|3|8BUI|255.000 1|1|3|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|1|4|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|1|4|2|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|1|4|2|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|1|4|3|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|1|4|3|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|1|4|3|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|1|4|4|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|1|4|4|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|1|4|4|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|1|4|4|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|1|5|1|1|1|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|1|5|1|2|1|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|1|5|1|3|1|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|1|5|1|4|1|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|1|5|2|1|1|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|1|5|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|1|5|2|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|1|5|2|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|1|5|3|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|1|5|3|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|1|5|3|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|1|5|4|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|1|5|4|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|1|5|4|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|1|5|4|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|1|3|1|1|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|1|4|1|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|1|4|1|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|1|4|1|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|1|4|2|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|1|4|2|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|1|4|2|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|1|4|3|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|1|4|3|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|1|4|3|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|1|4|3|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|1|5|1|1|1|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 2|1|5|1|2|1|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 2|1|5|1|3|1|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 2|1|5|1|4|1|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 2|1|5|2|1|1|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|1|5|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|1|5|2|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|1|5|2|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|1|5|3|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|1|5|3|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|1|5|3|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|1|5|4|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|1|5|4|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|1|5|4|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|1|5|4|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|1|3|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|1|4|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|1|4|2|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|1|4|2|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|1|4|3|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|1|4|3|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|1|4|3|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|1|4|4|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|1|4|4|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|1|4|4|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|1|4|4|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|1|5|1|1|1|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 3|1|5|1|2|1|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 3|1|5|1|3|1|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 3|1|5|1|4|1|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 3|1|5|2|1|1|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 3|1|5|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|1|5|2|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|1|5|2|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|1|5|3|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|1|5|3|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|1|5|3|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|1|5|4|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|1|5|4|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|1|5|4|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|1|5|4|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|1|3|1|1|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|1|4|1|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|1|4|1|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|1|4|1|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|1|4|2|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|1|4|2|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|1|4|2|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|1|4|3|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|1|4|3|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|1|4|3|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|1|4|3|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|1|5|1|1|1|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 4|1|5|1|2|1|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 4|1|5|1|3|1|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 4|1|5|1|4|1|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 4|1|5|2|1|1|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 4|1|5|2|2|1|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|1|5|2|3|1|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|1|5|2|4|1|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|1|5|3|1|1|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|1|5|3|3|1|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|1|5|3|4|1|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|1|5|4|1|1|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|1|5|4|2|1|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|1|5|4|3|1|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|1|5|4|4|1|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|1|3|1|1|0|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|1|3|1|2|0|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|2|1|3|1|3|0|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|2|1|3|1|4|0|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|2|1|3|2|1|0|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|2|1|3|2|2|0|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|1|3|2|3|0|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|1|3|2|4|0|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|1|3|3|1|0|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|1|3|3|2|0|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 1|2|1|3|3|3|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|1|3|3|4|0|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|1|3|4|1|0|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|1|3|4|2|0|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|1|3|4|3|0|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|1|3|4|4|0|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|2|3|1|1|0|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|2|3|1|2|0|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|2|2|3|1|3|0|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|2|2|3|1|4|0|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|2|2|3|2|1|0|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|2|2|3|2|2|0|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|2|3|2|3|0|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|2|3|2|4|0|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|2|3|3|1|0|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|2|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 1|2|2|3|3|3|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|2|3|3|4|0|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|2|3|4|1|0|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|2|3|4|2|0|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|2|3|4|3|0|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|2|3|4|4|0|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|3|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|3|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|3|3|1|1|0|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|3|3|1|2|0|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|2|3|3|1|3|0|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|2|3|3|1|4|0|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|2|3|3|2|1|0|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|2|3|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|3|3|2|3|0|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|3|3|2|4|0|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|3|3|3|1|0|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|3|3|3|2|0|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 1|2|3|3|3|3|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|3|3|3|4|0|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|3|3|4|1|0|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|3|3|4|2|0|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|3|3|4|3|0|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|3|3|4|4|0|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|4|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|4|1|2|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|4|1|2|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|4|1|3|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|4|1|3|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|4|1|3|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|4|1|4|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|4|1|4|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|4|1|4|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|4|1|4|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|4|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|4|2|2|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|4|2|2|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|4|2|3|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|4|2|3|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|4|2|3|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|4|2|4|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|4|2|4|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|4|2|4|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|4|2|4|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|4|3|1|1|0|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|4|3|1|2|0|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|2|4|3|1|3|0|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|2|4|3|1|4|0|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|2|4|3|2|1|0|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|2|4|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|4|3|2|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|4|3|2|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|4|3|3|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|4|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 1|2|4|3|3|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|4|3|3|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|4|3|4|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|4|3|4|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|4|3|4|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|4|3|4|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|5|1|1|1|10|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|5|1|1|2|10|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|2|5|1|1|3|10|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|2|5|1|1|4|10|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|2|5|1|2|1|10|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|2|5|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|5|1|2|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|5|1|2|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|5|1|3|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|5|1|3|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|5|1|3|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|5|1|4|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|5|1|4|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|5|1|4|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|5|1|4|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|5|2|1|1|2|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|5|2|1|2|2|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|2|5|2|1|3|2|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|2|5|2|1|4|2|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|2|5|2|2|1|2|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|2|5|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|5|2|2|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|5|2|2|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|5|2|3|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|5|2|3|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|5|2|3|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|5|2|4|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|5|2|4|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|5|2|4|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|5|2|4|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 1|2|5|3|1|1|3|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 1|2|5|3|1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 1|2|5|3|1|3|3|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 1|2|5|3|1|4|3|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 1|2|5|3|2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 1|2|5|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 1|2|5|3|2|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 1|2|5|3|2|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 1|2|5|3|3|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 1|2|5|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 1|2|5|3|3|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 1|2|5|3|3|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 1|2|5|3|4|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 1|2|5|3|4|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 1|2|5|3|4|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 1|2|5|3|4|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|2|2|3|1|1|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 2|2|2|3|1|2|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|2|3|2|1|0|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|2|2|3|2|2|0|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|2|3|1|1|1|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|3|2|1|1|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|3|3|1|1|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|3|3|1|2|0|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|2|3|3|2|1|0|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 2|2|3|3|2|2|0|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|4|1|1|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|4|1|1|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|2|4|1|1|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|2|4|1|2|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|2|4|1|2|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|4|1|2|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|2|4|1|3|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|2|4|1|3|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|2|4|1|3|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|2|4|1|3|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|2|4|2|1|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|4|2|1|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|2|4|2|1|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|2|4|2|2|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|2|4|2|2|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|4|2|2|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|2|4|2|3|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|2|4|2|3|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|2|4|2|3|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|2|4|2|3|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|2|4|3|1|1|0|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|2|4|3|1|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|4|3|1|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|2|4|3|1|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|2|4|3|2|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|2|4|3|2|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 2|2|4|3|2|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|4|3|2|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|2|4|3|3|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|2|4|3|3|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|2|4|3|3|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|2|4|3|3|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|2|5|1|1|1|10|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 2|2|5|1|1|2|10|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 2|2|5|1|1|3|10|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 2|2|5|1|1|4|10|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 2|2|5|1|2|1|10|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|2|5|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|5|1|2|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|2|5|1|2|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|2|5|1|3|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|2|5|1|3|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|5|1|3|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|2|5|1|4|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|2|5|1|4|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|2|5|1|4|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|2|5|1|4|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|2|5|2|1|1|2|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 2|2|5|2|1|2|2|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 2|2|5|2|1|3|2|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 2|2|5|2|1|4|2|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 2|2|5|2|2|1|2|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|2|5|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|5|2|2|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|2|5|2|2|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|2|5|2|3|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|2|5|2|3|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|5|2|3|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|2|5|2|4|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|2|5|2|4|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|2|5|2|4|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|2|5|2|4|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 2|2|5|3|1|1|3|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 2|2|5|3|1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 2|2|5|3|1|3|3|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 2|2|5|3|1|4|3|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 2|2|5|3|2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 2|2|5|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 2|2|5|3|2|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 2|2|5|3|2|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 2|2|5|3|3|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 2|2|5|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 2|2|5|3|3|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 2|2|5|3|3|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 2|2|5|3|4|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 2|2|5|3|4|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 2|2|5|3|4|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 2|2|5|3|4|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|2|2|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 3|2|3|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|3|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|3|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|4|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|4|1|2|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|2|4|1|2|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|2|4|1|3|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|4|1|3|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|2|4|1|3|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|2|4|1|4|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|2|4|1|4|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|2|4|1|4|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|2|4|1|4|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|2|4|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|4|2|2|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|2|4|2|2|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|2|4|2|3|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|4|2|3|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|2|4|2|3|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|2|4|2|4|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|2|4|2|4|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|2|4|2|4|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|2|4|2|4|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|2|4|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|4|3|2|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|2|4|3|2|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|2|4|3|3|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|4|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 3|2|4|3|3|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|2|4|3|3|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|2|4|3|4|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|2|4|3|4|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|2|4|3|4|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|2|4|3|4|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|2|5|1|1|1|10|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 3|2|5|1|1|2|10|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 3|2|5|1|1|3|10|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 3|2|5|1|1|4|10|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 3|2|5|1|2|1|10|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 3|2|5|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|5|1|2|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|2|5|1|2|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|2|5|1|3|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|5|1|3|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|2|5|1|3|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|2|5|1|4|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|2|5|1|4|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|2|5|1|4|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|2|5|1|4|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|2|5|2|1|1|2|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 3|2|5|2|1|2|2|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 3|2|5|2|1|3|2|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 3|2|5|2|1|4|2|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 3|2|5|2|2|1|2|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 3|2|5|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|5|2|2|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|2|5|2|2|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|2|5|2|3|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|5|2|3|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|2|5|2|3|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|2|5|2|4|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|2|5|2|4|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|2|5|2|4|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|2|5|2|4|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 3|2|5|3|1|1|3|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 3|2|5|3|1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 3|2|5|3|1|3|3|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 3|2|5|3|1|4|3|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 3|2|5|3|2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 3|2|5|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 3|2|5|3|2|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 3|2|5|3|2|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 3|2|5|3|3|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 3|2|5|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 3|2|5|3|3|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 3|2|5|3|3|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 3|2|5|3|4|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 3|2|5|3|4|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 3|2|5|3|4|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 3|2|5|3|4|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|2|2|3|1|1|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 4|2|3|1|1|1|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|3|2|1|1|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|3|3|1|1|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|4|1|1|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|4|1|1|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|2|4|1|1|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|2|4|1|2|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|2|4|1|2|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|2|4|1|2|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|2|4|1|3|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|4|1|3|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|2|4|1|3|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|2|4|1|3|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|2|4|2|1|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|4|2|1|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|2|4|2|1|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|2|4|2|2|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|2|4|2|2|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|2|4|2|2|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|2|4|2|3|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|4|2|3|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|2|4|2|3|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|2|4|2|3|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|2|4|3|1|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|4|3|1|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|2|4|3|1|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|2|4|3|2|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|2|4|3|2|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 4|2|4|3|2|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|2|4|3|2|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|2|4|3|3|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|4|3|3|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|2|4|3|3|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|2|4|3|3|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|2|5|1|1|1|10|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 4|2|5|1|1|2|10|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 4|2|5|1|1|3|10|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 4|2|5|1|1|4|10|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 4|2|5|1|2|1|10|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 4|2|5|1|2|2|10|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|5|1|2|3|10|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|2|5|1|2|4|10|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|2|5|1|3|1|10|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|2|5|1|3|3|10|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|2|5|1|3|4|10|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|2|5|1|4|1|10|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|5|1|4|2|10|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|2|5|1|4|3|10|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|2|5|1|4|4|10|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|2|5|2|1|1|2|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 4|2|5|2|1|2|2|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 4|2|5|2|1|3|2|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 4|2|5|2|1|4|2|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 4|2|5|2|2|1|2|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 4|2|5|2|2|2|2|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|5|2|2|3|2|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|2|5|2|2|4|2|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|2|5|2|3|1|2|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|2|5|2|3|3|2|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|2|5|2|3|4|2|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|2|5|2|4|1|2|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|5|2|4|2|2|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|2|5|2|4|3|2|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|2|5|2|4|4|2|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) 4|2|5|3|1|1|3|POLYGON((0 0,1 0,1 -1,0 -1,0 0)) 4|2|5|3|1|2|3|POLYGON((0 -1,1 -1,1 -2,0 -2,0 -1)) 4|2|5|3|1|3|3|POLYGON((0 -2,1 -2,1 -3,0 -3,0 -2)) 4|2|5|3|1|4|3|POLYGON((0 -3,1 -3,1 -4,0 -4,0 -3)) 4|2|5|3|2|1|3|POLYGON((1 0,2 0,2 -1,1 -1,1 0)) 4|2|5|3|2|2|3|POLYGON((1 -1,2 -1,2 -2,1 -2,1 -1)) 4|2|5|3|2|3|3|POLYGON((1 -2,2 -2,2 -3,1 -3,1 -2)) 4|2|5|3|2|4|3|POLYGON((1 -3,2 -3,2 -4,1 -4,1 -3)) 4|2|5|3|3|1|3|POLYGON((2 0,3 0,3 -1,2 -1,2 0)) 4|2|5|3|3|2|3|POLYGON((2 -1,3 -1,3 -2,2 -2,2 -1)) 4|2|5|3|3|3|3|POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2)) 4|2|5|3|3|4|3|POLYGON((2 -3,3 -3,3 -4,2 -4,2 -3)) 4|2|5|3|4|1|3|POLYGON((3 0,4 0,4 -1,3 -1,3 0)) 4|2|5|3|4|2|3|POLYGON((3 -1,4 -1,4 -2,3 -2,3 -1)) 4|2|5|3|4|3|3|POLYGON((3 -2,4 -2,4 -3,3 -3,3 -2)) 4|2|5|3|4|4|3|POLYGON((3 -3,4 -3,4 -4,3 -4,3 -3)) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/clean_expected������������������������������������������0000644�0000000�0000000�00000000000�12147721424�022371� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_4ma.sql����������������������������������������������0000644�0000000�0000000�00000004515�12036040003�021411� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_value_arrays; CREATE TABLE raster_value_arrays ( id integer, val double precision[][] ); CREATE OR REPLACE FUNCTION make_value_array( rows integer DEFAULT 3, columns integer DEFAULT 3, start_val double precision DEFAULT 1, step double precision DEFAULT 1, skip_expr text DEFAULT NULL ) RETURNS double precision[][][] AS $$ DECLARE x int; y int; value double precision; values double precision[][][]; result boolean; expr text; BEGIN value := start_val; values := array_fill(NULL::double precision, ARRAY[1, columns, rows]); FOR y IN 1..columns LOOP FOR x IN 1..rows LOOP IF skip_expr IS NULL OR length(skip_expr) < 1 THEN result := TRUE; ELSE expr := replace(skip_expr, '[v]'::text, value::text); EXECUTE 'SELECT (' || expr || ')::boolean' INTO result; END IF; IF result IS TRUE THEN values[1][y][x] := value; END IF; value := value + step; END LOOP; END LOOP; RETURN values; END; $$ LANGUAGE 'plpgsql'; INSERT INTO raster_value_arrays VALUES (1, make_value_array()), (2, make_value_array(5, 5)), (3, make_value_array(5, 5, 100)), (4, make_value_array(3, 3, 15, -1)), (5, make_value_array(5, 5, 15, -1)), (6, make_value_array(3, 3, 1, 2)), (7, make_value_array(5, 5, 1, 3)), (10, make_value_array(3, 3, 1, 1, '0')), (11, make_value_array(5, 5, 1, 1, '0')), (12, make_value_array(3, 3, 1, 1, '[v] % 2')), (13, make_value_array(5, 5, 1, 1, '[v] % 2')), (14, make_value_array(3, 3, 1, 1, '([v] % 2) = 0')), (15, make_value_array(5, 5, 1, 1, '([v] % 2) = 0')), (16, make_value_array(3, 3, 1, 2.1, '([v] NOT IN (7.3, 9.4, 15.7, 17.8))')), (17, make_value_array(3, 3, 0, 3.14, '([v] IN (3.14, 12.56, 25.12))')), (18, make_value_array(3, 3, 1, 1, '[v] > 8')) ; SELECT id, val, round(st_distinct4ma(val, NULL)::numeric, 6) AS distinct4ma, round(st_max4ma(val, NULL)::numeric, 6) AS max4ma, round(st_mean4ma(val, NULL)::numeric, 6) AS mean4ma, round(st_min4ma(val, NULL)::numeric, 6) AS min4ma, round(st_range4ma(val, NULL)::numeric, 6) AS range4ma, round(st_stddev4ma(val, NULL)::numeric, 6) AS stddev4ma, round(st_sum4ma(val, NULL)::numeric, 6) AS sum4ma FROM raster_value_arrays ORDER BY id; DROP TABLE IF EXISTS raster_value_arrays; DROP FUNCTION IF EXISTS make_value_array(integer, integer, double precision, double precision, text); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_addband.sql������������������������������������������0000644�0000000�0000000�00000033505�12233537203�022322� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- ----------------------------------------------------------------------- --- Test of "ST_AddBand". ----------------------------------------------------------------------- ----------------------------------------------------------------------- --- ST_AddBand ----------------------------------------------------------------------- SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '1BB', -1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '1BB', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '1BB', 1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '1BB', 2, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '1BB', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '2BUI', -1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '2BUI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '2BUI', 3, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '2BUI', 4, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '2BUI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '4BUI', -1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '4BUI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '4BUI', 15, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '4BUI', 16, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '4BUI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BSI', -129, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BSI', -128, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BSI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BSI', 127, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BSI', 128, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BSI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BSI', 210.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', -1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 255, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 256, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 410.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '8BUI', 255.9999999, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BSI', -32769, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BSI', -32768, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BSI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BSI', 32767, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BSI', 32768, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BSI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BSI', 210000.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BUI', -1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BUI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BUI', 65535, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BUI', 65537, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BUI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '16BUI', 210000.4645643647457, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BSI', -2147483649, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BSI', -2147483648, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BSI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BSI', 2147483647, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BSI', 2147483648, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BSI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BSI', 210000.4645643647457, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', -1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', 4294967295, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', 4294967296, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', 214294967296, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BUI', 4294967295.9999999, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 4294967000, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 4294967000, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 4294967295, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 4294967295, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 4294967296, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 4294967296, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 21.46, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 21003.1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 21003.1, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 123.456, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 123.456, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 1234.567, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 1234.567, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 210000.4645643647457, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '32BF', 210000.4645643647457, NULL), 3, 3)::float4; SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', -1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 0, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 14294967296.123456, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 21.46, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 21003.1, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 123.4567, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 1234.567, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 210000.4645643647457, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, '64BF', 1234.4645643647457, NULL), 3, 3); SELECT St_Value(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0), 1, '64BF', 1234.5678, NULL), ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1, 1), 3, 3); SELECT St_Value(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0), 1, '64BF', 1234.5678, NULL), ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), 1), 3, 3); SELECT St_Value(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0), 1, '64BF', 1234.5678, NULL), ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0)), 3, 3); -- multiple addbandarg version SELECT St_Value(rast, 1, 3, 3), St_Value(rast, 2, 3, 3) FROM ( SELECT ST_AddBand( ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0), ARRAY[ ROW(1, '64BF', 1234.567, NULL), ROW(2, '8BUI', 255, NULL) ]::addbandarg[] ) AS rast ) foo; SELECT * FROM ST_BandMetadata( ST_AddBand( NULL::raster, ARRAY[ ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '4BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '64BF', 1, 0) ]::raster[] ), ARRAY[]::int[] ); SELECT * FROM ST_BandMetadata( ST_AddBand( ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '2BUI', 1, 0), ARRAY[ ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '4BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '64BF', 1, 0) ]::raster[] ), ARRAY[]::int[] ); SELECT * FROM ST_BandMetadata( ST_AddBand( ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '2BUI', 1, 0), ARRAY[ ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '4BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BUI', 1, 0), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '64BF', 1, 0) ]::raster[], 1, 1 ), ARRAY[]::int[] ); -- raster array version test SELECT (ST_DumpAsPolygons(newrast,3)).val As b3val FROM (SELECT ST_AddBand(NULL, array_agg(rast)) AS newrast FROM (SELECT ST_AsRaster(ST_Buffer(ST_Point(10,10), 34),200,200, '8BUI',i*30) As rast FROM generate_series(1,3) As i ) As foo ) As foofoo; -- out-db variants SELECT 1, bandnum, isoutdb, CASE WHEN isoutdb IS TRUE THEN strpos(path, 'testraster.tif') > 0 ELSE NULL END FROM ST_BandMetadata((SELECT rast FROM raster_outdb_template WHERE rid = 1), ARRAY[]::int[]); SELECT 2, bandnum, isoutdb, CASE WHEN isoutdb IS TRUE THEN strpos(path, 'testraster.tif') > 0 ELSE NULL END FROM ST_BandMetadata((SELECT rast FROM raster_outdb_template WHERE rid = 2), ARRAY[]::int[]); SELECT 3, bandnum, isoutdb, CASE WHEN isoutdb IS TRUE THEN strpos(path, 'testraster.tif') > 0 ELSE NULL END FROM ST_BandMetadata((SELECT rast FROM raster_outdb_template WHERE rid = 3), ARRAY[]::int[]); SELECT 4, bandnum, isoutdb, CASE WHEN isoutdb IS TRUE THEN strpos(path, 'testraster.tif') > 0 ELSE NULL END FROM ST_BandMetadata((SELECT rast FROM raster_outdb_template WHERE rid = 4), ARRAY[]::int[]); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_geos_relationships_expected��������������������������0000644�0000000�0000000�00000004446�12040113104�025715� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1.1|0|0|t|f|t|t|f|f|f|t|t|t|t|t|t|f|f|f|f|t 1.1|0|1|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|2|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|3|f|f|f|f|t|f|f|f|f|f|f|f|t|f|f|f|f|f 1.1|0|10|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|11|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|12|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|13|f|f|f|f|f|t|f|f|t|f|f|f|f|f|f|f|f|f 1.1|0|14|f|f|f|f|t|f|f|f|f|f|t|t|t|f|f|f|f|t 1.1|0|15|t|t|f|t|f|f|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|16|t|t|f|t|f|f|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|20|f|f|t|f|f|f|f|t|t|t|t|t|t|f|f|f|f|t 1.1|0|21|f|f|t|f|f|f|f|t|t|t|t|t|t|f|f|f|f|t 1.1|0|22|f|f|t|f|f|f|f|t|t|t|t|t|t|f|f|f|f|t 1.1|0|23|f|f|t|f|f|f|f|t|t|t|t|t|t|f|f|f|f|t 1.1|0|30|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|t 1.1|0|31|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|f 1.1|0|32|f|f|f|f|f|t|f|f|t|t|t|t|t|f|f|f|f|f 1.2|0|1|f|f|f|f|f|t|f|f 1.2|0|2|f|f|f|f|f|t|f|f 1.2|0|3|f|f|f|f|t|f|f|f 1.2|0|10|f|f|f|f|f|f|t|f 1.2|0|11|f|f|f|f|f|t|f|f 1.2|0|12|f|f|f|f|f|f|t|f 1.2|0|13|f|f|f|f|t|f|f|f 1.2|0|14|f|f|f|f|t|f|f|f 1.2|0|15|t|t|f|t|f|f|f|f 1.2|0|16|t|t|f|t|f|f|f|f 1.2|0|20|f|f|t|f|f|f|f|t 1.2|0|21|f|f|f|f|f|t|f|f 1.2|0|22|f|f|f|f|f|f|t|f 1.2|0|23|f|f|f|f|f|f|t|f 1.2|0|30|f|f|f|f|f|t|f|f 1.2|0|31|f|f|f|f|f|t|f|f 1.2|0|32|f|f|f|f|f|t|f|f 1.3|1|0|f|f|f|f|f 1.3|2|0|f|f|f|f|f 1.3|3|0|f|f|f|f|f 1.3|10|0|f|f|f|f|f 1.3|11|0|f|f|f|f|f 1.3|12|0|f|f|f|f|f 1.3|13|0|f|f|f|f|f 1.3|14|0|f|f|f|f|f 1.3|15|0|f|f|t|f|t 1.3|16|0|f|f|t|f|t 1.3|20|0|t|f|f|t|f 1.3|21|0|t|f|f|t|f 1.3|22|0|t|f|f|t|f 1.3|23|0|t|f|f|t|f 1.3|30|0|f|f|f|f|f 1.3|31|0|f|f|f|f|f 1.3|32|0|f|f|f|f|f 1.4|1|0|f|f|f|f|f 1.4|2|0|f|f|f|f|f 1.4|3|0|f|f|f|f|f 1.4|10|0|f|f|f|f|f 1.4|11|0|f|f|f|f|f 1.4|12|0|f|f|f|f|f 1.4|13|0|f|f|f|f|f 1.4|14|0|f|f|f|f|f 1.4|15|0|f|f|t|f|t 1.4|16|0|f|f|t|f|t 1.4|20|0|t|f|f|t|f 1.4|21|0|f|f|f|f|f 1.4|22|0|f|f|f|f|f 1.4|23|0|f|f|f|f|f 1.4|30|0|f|f|f|f|f 1.4|31|0|f|f|f|f|f 1.4|32|0|f|f|f|f|f 2.1|0|0|| 2.1|0|1|| 2.1|0|2|| 2.1|0|3|| 2.1|0|10|| 2.1|0|11|| 2.1|0|12|| 2.1|0|13|| 2.1|0|14|| 2.1|0|15|| 2.1|0|16|| 2.1|0|20|| 2.1|0|21|| 2.1|0|22|| 2.1|0|23|| 2.1|0|30|| 2.1|0|31|| 2.1|0|32|| ERROR: Tolerance cannot be less than zero 2.3|0|0|| 2.3|0|1|| 2.3|0|2|| 2.3|0|3|| 2.3|0|10|| 2.3|0|11|| 2.3|0|12|| 2.3|0|13|| 2.3|0|14|| 2.3|0|15|| 2.3|0|16|| 2.3|0|20|| 2.3|0|21|| 2.3|0|22|| 2.3|0|23|| 2.3|0|30|| 2.3|0|31|| 2.3|0|32|| ERROR: Tolerance cannot be less than zero ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/tickets.sql���������������������������������������������0000644�0000000�0000000�00000000265�12236725100�021701� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- #1485 SELECT '#1485', count(*) FROM geometry_columns WHERE f_table_name = 'raster_columns'; -- #2532 SELECT NULL::raster @ null::geometry; SELECT NULL::geometry @ null::raster; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_dimensions_expected����������������������������������0000644�0000000�0000000�00000000000�11722777314�024173� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_bytea.sql��������������������������������������������0000644�0000000�0000000�00000011602�12233537203�022043� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE rt_bytea_test ( id numeric, name text, rast raster ); INSERT INTO rt_bytea_test VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000000040' -- scaleX (float64 2) || '0000000000000840' -- scaleY (float64 3) || '000000000000E03F' -- ipX (float64 0.5) || '000000000000E03F' -- ipY (float64 0.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0A000000' -- SRID (int32 10) || '0A00' -- width (uint16 10) || '1400' -- height (uint16 20) )::raster ); INSERT INTO rt_bytea_test VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:1, width:1, height:1', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000000440' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '0C000000' -- SRID (int32 12) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_bytea_test VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || '00000000' -- SRID (int32 0) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); INSERT INTO rt_bytea_test VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', ( '01' -- little endian (uint8 ndr) || '0000' -- version (uint16 0) || '0000' -- nBands (uint16 0) || '0000000000001440' -- scaleX (float64 5) || '0000000000001440' -- scaleY (float64 5) || '0000000000001E40' -- ipX (float64 2.5) || '0000000000000440' -- ipY (float64 2.5) || '0000000000000000' -- skewX (float64 0) || '0000000000000000' -- skewY (float64 0) || 'FFFFFFFF' -- SRID (int32 -1) || '0100' -- width (uint16 1) || '0100' -- height (uint16 1) )::raster ); ----------------------------------------------------------------------- --- Test HEX ----------------------------------------------------------------------- SELECT id, name FROM rt_bytea_test WHERE encode(bytea(rast), 'hex') != encode(rast::bytea, 'hex') ; ----------------------------------------------------------------------- --- Test Base64 ----------------------------------------------------------------------- SELECT id, name FROM rt_bytea_test WHERE encode(bytea(rast), 'base64') != encode(rast::bytea, 'base64') ; ----------------------------------------------------------------------- --- Test Binary ----------------------------------------------------------------------- SELECT id, name FROM rt_bytea_test WHERE encode(st_asbinary(rast), 'base64') != encode(rast::bytea, 'base64') ; -- Cleanup DROP TABLE rt_bytea_test; ----------------------------------------------------------------------- --- Test out-db as in-db ----------------------------------------------------------------------- WITH foo AS ( SELECT rid, ST_AsBinary(rast, FALSE) AS outout, ST_AsBinary(rast, TRUE) AS outin FROM raster_outdb_template ) SELECT rid FROM foo WHERE encode(outout, 'base64') = encode(outin, 'base64'); WITH foo AS ( SELECT rid, rast::bytea AS outbytea, ST_AsBinary(rast, FALSE) AS outout FROM raster_outdb_template ) SELECT rid FROM foo WHERE encode(outbytea, 'base64') != encode(outout, 'base64'); WITH foo AS ( SELECT rid, rast::bytea AS outbytea, ST_AsBinary(rast, TRUE) AS outin FROM raster_outdb_template ) SELECT rid FROM foo WHERE encode(outbytea, 'base64') = encode(outin, 'base64'); ������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_count_expected���������������������������������������0000644�0000000�0000000�00000000052�11722777314�023162� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2 2 100 2 BEGIN 20 1000 20 1000 20 COMMIT ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_worldtorastercoord_expected��������������������������0000644�0000000�0000000�00000014472�12054737500�025777� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1|1 1|-1|-1 2|-2|0 3|-2|-2 4|-3|-3 10|1|1 11|1|-1 12|0|-1 13|1|-2 14|1|-3 0|3|3 1|1|1 2|0|2 3|0|0 4|-1|-1 10|1|3 11|1|1 12|0|1 13|1|0 14|1|-1 0|4|2 1|2|0 2|1|1 3|1|-1 4|0|-2 10|2|3 11|2|1 12|1|1 13|2|0 14|2|-1 0|4|4 1|2|2 2|1|3 3|1|1 4|0|0 10|1|4 11|1|2 12|0|2 13|1|1 14|1|0 0|5|5 1|3|3 2|2|4 3|2|2 4|1|1 10|1|5 11|1|3 12|0|3 13|1|2 14|1|1 0|1|1 1|-1|-1 2|-2|0 3|-2|-2 4|-3|-3 10|1|1 11|1|-1 12|0|-1 13|1|-2 14|1|-3 0|3|3 1|1|1 2|0|2 3|0|0 4|-1|-1 10|1|3 11|1|1 12|0|1 13|1|0 14|1|-1 0|4|2 1|2|0 2|1|1 3|1|-1 4|0|-2 10|2|3 11|2|1 12|1|1 13|2|0 14|2|-1 0|4|4 1|2|2 2|1|3 3|1|1 4|0|0 10|1|4 11|1|2 12|0|2 13|1|1 14|1|0 0|5|5 1|3|3 2|2|4 3|2|2 4|1|1 10|1|5 11|1|3 12|0|3 13|1|2 14|1|1 0|1 1|-1 2|-2 3|-2 4|-3 10|1 11|1 12|0 13|1 14|1 0|3 1|1 2|0 3|0 4|-1 10|1 11|1 12|0 13|1 14|1 0|4 1|2 2|1 3|1 4|0 10|2 11|2 12|1 13|2 14|2 0|4 1|2 2|1 3|1 4|0 10|1 11|1 12|0 13|1 14|1 0|5 1|3 2|2 3|2 4|1 10|1 11|1 12|0 13|1 14|1 0|1 1|-1 2|-2 3|-2 4|-3 10|1 11|1 12|0 13|1 14|1 NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|1 1|-1 2|-2 3|-2 4|-3 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|3 1|1 2|0 3|0 4|-1 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|4 1|2 2|1 3|1 4|0 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|4 1|2 2|1 3|1 4|0 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|5 1|3 2|2 3|2 4|1 10| 11| 12| 13| 14| 0|1 1|-1 2|0 3|-2 4|-3 10|1 11|-1 12|-1 13|-2 14|-3 0|3 1|1 2|2 3|0 4|-1 10|3 11|1 12|1 13|0 14|-1 0|2 1|0 2|1 3|-1 4|-2 10|3 11|1 12|1 13|0 14|-1 0|4 1|2 2|3 3|1 4|0 10|4 11|2 12|2 13|1 14|0 0|5 1|3 2|4 3|2 4|1 10|5 11|3 12|3 13|2 14|1 0|1 1|-1 2|-2 3|-2 4|-3 10|1 11|1 12|0 13|1 14|1 NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|1 1|-1 2|0 3|-2 4|-3 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|3 1|1 2|2 3|0 4|-1 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|4 1|2 2|3 3|1 4|0 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|4 1|2 2|3 3|1 4|0 10| 11| 12| 13| 14| NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster NOTICE: Latitude and longitude required for computing pixel row and column of a rotated raster 0|5 1|3 2|4 3|2 4|1 10| 11| 12| 13| 14| ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_scale_expected���������������������������������������0000644�0000000�0000000�00000000000�11722777314�023112� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_rastertoworldcoord.sql�������������������������������0000644�0000000�0000000�00000006333�12054737500�024711� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE TABLE raster_raster2world ( rid integer, rast raster ); CREATE OR REPLACE FUNCTION make_test_raster( rid integer, width integer DEFAULT 2, height integer DEFAULT 2, ul_x double precision DEFAULT 0, ul_y double precision DEFAULT 0, skew_x double precision DEFAULT 0, skew_y double precision DEFAULT 0, initvalue double precision DEFAULT 1, nodataval double precision DEFAULT 0 ) RETURNS void AS $$ DECLARE x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0); rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval); INSERT INTO raster_raster2world VALUES (rid, rast); RETURN; END; $$ LANGUAGE 'plpgsql'; -- no skew SELECT make_test_raster(0, 4, 4, -2, -2); SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2); SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3); SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4); SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5); -- skew SELECT make_test_raster(10, 4, 4, -2, -2, 1, -1); SELECT make_test_raster(11, 2, 2, 0, 0, 1, -1, 2); SELECT make_test_raster(12, 2, 2, 1, -1, 1, -1, 3); SELECT make_test_raster(13, 2, 2, 1, 1, 1, -1, 4); SELECT make_test_raster(14, 2, 2, 2, 2, 1, -1, 5); DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision); SELECT rid, (ST_RasterToWorldCoord(rast, 1, 1)).* FROM raster_raster2world; SELECT rid, (ST_RasterToWorldCoord(rast, 1, 2)).* FROM raster_raster2world; SELECT rid, (ST_RasterToWorldCoord(rast, 2, 2)).* FROM raster_raster2world; SELECT rid, (ST_RasterToWorldCoord(rast, 0, 0)).* FROM raster_raster2world; SELECT rid, (ST_RasterToWorldCoord(rast, -1, 0)).* FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 1, 1) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 1, 2) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 2, 2) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 0, 0) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, -1, 0) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 1) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 1) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 2) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, 0) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordX(rast, -1) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 1, 1) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 1, 2) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 2, 2) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 0, 0) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, -1, 0) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 1) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 1) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 2) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, 0) FROM raster_raster2world; SELECT rid, ST_RasterToWorldCoordY(rast, -1) FROM raster_raster2world; DROP TABLE raster_raster2world; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafctngb_expected����������������������������0000644�0000000�0000000�00000001254�11722777314�025316� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WARNING: Raster is NULL. Returning NULL t NOTICE: Raster is empty. Returning an empty raster t NOTICE: Raster does not have the required band. Returning a raster without a band t t| NOTICE: Neighborhood width is NULL or <= 0. Returning new raster with the original band t| NOTICE: Neighborhood height is NULL or <= 0. Returning new raster with the original band t| t|t t|t NOTICE: Neighborhood NODATA behavior defaulting to 'ignore' t|t t|t t|t t|t t|t t|t NOTICE: Neighborhood NODATA mode is not recognized. Must be one of 'value', 'ignore', 'NULL', or a numeric value. Returning new raster with the original band t|t t|t t|t t|t t|t t|t t t|t t t t|t|t|t|t t|t|t t|t|t t|t t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/load_outdb.sql������������������������������������������0000644�0000000�0000000�00000000054�12147721424�022351� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT count(*) FROM raster_outdb_template; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_polygon.sql������������������������������������������0000644�0000000�0000000�00000007054�12005606550�022433� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SET client_min_messages TO warning; DROP TABLE IF EXISTS raster_polygon; CREATE TABLE raster_polygon ( rast raster ); CREATE OR REPLACE FUNCTION make_test_raster() RETURNS void AS $$ DECLARE width int := 5; height int := 5; x int; y int; rast raster; BEGIN rast := ST_MakeEmptyRaster(width, height, 0, 0, 1, -1, 0, 0, 0); rast := ST_AddBand(rast, 1, '32BUI', 1, 0); INSERT INTO raster_polygon VALUES (rast); RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT make_test_raster(); DROP FUNCTION make_test_raster(); CREATE OR REPLACE FUNCTION temp_geos_version() RETURNS float AS $$ SELECT ((regexp_matches(split_part(postgis_geos_version(), '-', 1), E'^([[:digit:]]+\.[[:digit:]]+)')))[1]::float $$ LANGUAGE 'sql' IMMUTABLE STRICT; SELECT ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((0 0,0 -5,5 -5,5 0,0 0)))' FROM raster_polygon; SELECT ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0)))' FROM ( SELECT ST_SetValue( rast, 1, 1, 1, 0 ) AS rast FROM raster_polygon ) foo; SELECT ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0),(1 -1,1 -2,2 -2,2 -1,1 -1)))' FROM ( SELECT ST_SetValue( ST_SetValue( rast, 1, 1, 1, 0 ), 1, 2, 2, 0 ) AS rast FROM raster_polygon ) foo; SELECT CASE WHEN temp_geos_version() >= 3.3 THEN ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((1 -1,1 0,5 0,5 -5,4 -5,0 -5,0 -1,1 -1),(1 -1,1 -2,2 -2,2 -1,1 -1),(2 -2,2 -3,3 -3,3 -2,2 -2)))' ELSE ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0),(1 -1,1 -2,2 -2,2 -3,3 -3,3 -2,2 -2,2 -1,1 -1)))' END FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( rast, 1, 1, 1, 0 ), 1, 2, 2, 0 ), 1, 3, 3, 0 ) AS rast FROM raster_polygon ) foo; SELECT CASE WHEN temp_geos_version() >= 3.3 THEN ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((1 -1,1 0,5 0,5 -5,4 -5,0 -5,0 -1,1 -1),(1 -1,1 -2,2 -2,2 -1,1 -1),(2 -2,2 -3,3 -3,3 -2,2 -2),(3 -3,3 -4,4 -4,4 -3,3 -3)))' ELSE ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0),(1 -1,1 -2,2 -2,2 -3,3 -3,3 -4,4 -4,4 -3,3 -3,3 -2,2 -2,2 -1,1 -1)))' END FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( rast, 1, 1, 1, 0 ), 1, 2, 2, 0 ), 1, 3, 3, 0 ), 1, 4, 4, 0 ) AS rast FROM raster_polygon ) foo; SELECT ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((4 -4,4 -5,0 -5,0 -1,1 -1,1 -2,2 -2,2 -3,3 -3,3 -4,4 -4)),((1 -1,1 0,5 0,5 -4,4 -4,4 -3,3 -3,3 -2,2 -2,2 -1,1 -1)))' FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( rast, 1, 1, 1, 0 ), 1, 2, 2, 0 ), 1, 3, 3, 0 ), 1, 4, 4, 0 ), 1, 5, 5, 0 ) AS rast FROM raster_polygon ) foo; SELECT ST_AsText(ST_Polygon(rast)) = 'MULTIPOLYGON(((1 -4,2 -4,2 -3,3 -3,3 -4,4 -4,4 -5,3 -5,1 -5,1 -4)),((1 -4,0 -4,0 -1,1 -1,1 -2,2 -2,2 -3,1 -3,1 -4)),((3 -2,4 -2,4 -1,5 -1,5 -4,4 -4,4 -3,3 -3,3 -2)),((3 -2,2 -2,2 -1,1 -1,1 0,4 0,4 -1,3 -1,3 -2)))' FROM ( SELECT ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( ST_SetValue( rast, 1, 1, 1, 0 ), 1, 2, 2, 0 ), 1, 3, 3, 0 ), 1, 4, 4, 0 ), 1, 5, 5, 0 ), 1, 5, 1, 0 ), 1, 4, 2, 0 ), 1, 2, 4, 0 ), 1, 1, 5, 0 ) AS rast FROM raster_polygon ) foo; DROP FUNCTION temp_geos_version(); DROP TABLE IF EXISTS raster_polygon; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafct_expected�������������������������������0000644�0000000�0000000�00000000666�12041300040�024602� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WARNING: Raster is NULL. Returning NULL t WARNING: Raster is NULL. Returning NULL t NOTICE: Raster is empty. Returning an empty raster t NOTICE: Raster is empty. Returning an empty raster t NOTICE: Raster does not have the required band. Returning a raster without a band t NOTICE: Raster does not have the required band. Returning a raster without a band t |19 |19 | |19 100|15 100|120 101|3 213|213 6314|6314 100| 116|116 121|121 ��������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebra_expected����������������������������������0000644�0000000�0000000�00000031347�12042343002�024113� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: First argument (nband) of rastbandarg at index 0 is NULL. Assuming NULL raster NOTICE: All input rasters are NULL. Returning NULL NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL 0| 1| NOTICE: value = {{{1}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{2}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = <NULL> 2|t 3|t 4|t NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = {3.14} NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = {3.14} NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = {3.14} NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = {3.14} NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = {3.14} NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = {3.14} NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = {3.14} NOTICE: value = {{{20}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = {3.14} 3|t 4|t NOTICE: All input rasters do not have bands at indicated indexes. Returning empty raster NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: value = {{{NULL,NULL,NULL},{NULL,200,200},{NULL,200,200}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL,NULL,NULL},{200,200,NULL},{200,200,NULL}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL,200,200},{NULL,200,200},{NULL,NULL,NULL}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{200,200,NULL},{200,200,NULL},{NULL,NULL,NULL}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = <NULL> 3|(0,0,0,0,1,-1,0,0,0,0)|(,,,)| 4|(1,-1,2,2,1,-1,0,0,0,1)|(8BUI,0,f,)|255 NOTICE: value = {{{NULL,NULL,NULL},{NULL,1,1},{NULL,1,1}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL,NULL,NULL},{1,1,2},{1,1,2}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL,1,1},{NULL,1,1},{NULL,10,10}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{1,1,2},{1,1,2},{10,10,20}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = <NULL> NOTICE: record = (10,"(0,0,2,2,1,-1,0,0,0,1)","(32BUI,0,f,)",255) NOTICE: value = {{{1,2,2},{10,20,20},{10,20,20}}} NOTICE: pos = [0:1][1:2]={{1,1},{3,3}} NOTICE: userargs = <NULL> NOTICE: value = {{{2,2,3},{20,20,30},{20,20,30}}} NOTICE: pos = [0:1][1:2]={{2,1},{4,3}} NOTICE: userargs = <NULL> NOTICE: value = {{{10,20,20},{10,20,20},{100,200,200}}} NOTICE: pos = [0:1][1:2]={{1,2},{3,4}} NOTICE: userargs = <NULL> NOTICE: value = {{{20,20,30},{20,20,30},{200,200,300}}} NOTICE: pos = [0:1][1:2]={{2,2},{4,4}} NOTICE: userargs = <NULL> NOTICE: record = (14,"(2,-2,2,2,1,-1,0,0,0,1)","(32BUI,0,f,)",255) NOTICE: value = {{{10,20,20},{100,200,200},{100,200,200}}} NOTICE: pos = [0:1][1:2]={{1,1},{3,3}} NOTICE: userargs = {1000} NOTICE: value = {{{20,20,30},{200,200,300},{200,200,300}}} NOTICE: pos = [0:1][1:2]={{2,1},{4,3}} NOTICE: userargs = {1000} NOTICE: value = {{{100,200,200},{100,200,200},{NULL,NULL,NULL}}} NOTICE: pos = [0:1][1:2]={{1,2},{3,4}} NOTICE: userargs = {1000} NOTICE: value = {{{200,200,300},{200,200,300},{NULL,NULL,NULL}}} NOTICE: pos = [0:1][1:2]={{2,2},{4,4}} NOTICE: userargs = {1000} NOTICE: record = (17,"(2,-4,2,2,1,-1,0,0,0,1)","(32BUI,0,f,)",1000) DO NOTICE: value = {{{1}},{{2}}} NOTICE: pos = [0:2][1:2]={{1,1},{2,2},{1,1}} NOTICE: userargs = <NULL> 20|21|(1,-1,1,1,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: rt_raster_iterator: Computed raster for intersection extent is empty NOTICE: Raster provided has no bands 20|22|(0,0,0,0,0,0,0,0,0,0)|(,,,) NOTICE: value = {{{2}},{{3}}} NOTICE: pos = [0:2][1:2]={{1,1},{1,2},{2,1}} NOTICE: userargs = <NULL> 21|22|(1,-2,1,1,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{1}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{1,1},{1,1},{0,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{2,1},{2,1},{1,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{3,1},{3,1},{2,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{1,2},{1,2},{0,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{2}}} NOTICE: pos = [0:2][1:2]={{2,2},{2,2},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}}} NOTICE: pos = [0:2][1:2]={{3,2},{3,2},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{1,3},{1,3},{0,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}}} NOTICE: pos = [0:2][1:2]={{2,3},{2,3},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}}} NOTICE: pos = [0:2][1:2]={{3,3},{3,3},{2,2}} NOTICE: userargs = <NULL> 20|21|(0,0,3,3,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{1}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{1,1},{1,1},{1,-1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{2,1},{2,1},{2,-1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{1,2},{1,2},{1,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}}} NOTICE: pos = [0:2][1:2]={{2,2},{2,2},{2,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{3}}} NOTICE: pos = [0:2][1:2]={{1,3},{1,3},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{3}}} NOTICE: pos = [0:2][1:2]={{2,3},{2,3},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{3}}} NOTICE: pos = [0:2][1:2]={{1,4},{1,4},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{3}}} NOTICE: pos = [0:2][1:2]={{2,4},{2,4},{2,2}} NOTICE: userargs = <NULL> 20|22|(0,0,2,4,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{1}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{1,1},{1,1},{0,0},{1,-1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{2,1},{2,1},{1,0},{2,-1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{3,1},{3,1},{2,0},{3,-1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{1,2},{1,2},{0,1},{1,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{2}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{2,2},{2,2},{1,1},{2,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{3,2},{3,2},{2,1},{3,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}},{{3}}} NOTICE: pos = [0:3][1:2]={{1,3},{1,3},{0,2},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}},{{3}}} NOTICE: pos = [0:3][1:2]={{2,3},{2,3},{1,2},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{3,3},{3,3},{2,2},{3,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}},{{3}}} NOTICE: pos = [0:3][1:2]={{1,4},{1,4},{0,3},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}},{{3}}} NOTICE: pos = [0:3][1:2]={{2,4},{2,4},{1,3},{2,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{3,4},{3,4},{2,3},{3,2}} NOTICE: userargs = <NULL> 20|21|22|(0,0,3,4,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{1}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{1,1},{1,1},{0,0},{1,-1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{2,1},{2,1},{1,0},{2,-1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{NULL}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{1,2},{1,2},{0,1},{1,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{2}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{2,2},{2,2},{1,1},{2,0}} NOTICE: userargs = <NULL> 20|21|22|(0,0,2,2,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{1}},{{2}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{1,1},{2,2},{1,1},{2,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{2,1},{3,2},{2,1},{3,0}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}},{{3}}} NOTICE: pos = [0:3][1:2]={{1,2},{2,3},{1,2},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}},{{NULL}}} NOTICE: pos = [0:3][1:2]={{2,2},{3,3},{2,2},{3,1}} NOTICE: userargs = <NULL> 20|21|22|(1,-1,2,2,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{NULL}},{{NULL}},{{3}}} NOTICE: pos = [0:3][1:2]={{1,1},{1,3},{0,2},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{2}},{{3}}} NOTICE: pos = [0:3][1:2]={{2,1},{2,3},{1,2},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}},{{3}}} NOTICE: pos = [0:3][1:2]={{1,2},{1,4},{0,3},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{NULL}},{{NULL}},{{3}}} NOTICE: pos = [0:3][1:2]={{2,2},{2,4},{1,3},{2,2}} NOTICE: userargs = <NULL> 20|21|22|(0,-2,2,2,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: rt_raster_iterator: Computed raster for intersection extent is empty NOTICE: Raster provided has no bands 20|21|22|(0,0,0,0,0,0,0,0,0,0)|(,,,) NOTICE: value = {{{1}},{{10}},{{100}}} NOTICE: pos = [0:3][1:2]={{1,1},{1,1},{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{10}},{{100}}} NOTICE: pos = [0:3][1:2]={{2,1},{2,1},{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{10}},{{100}}} NOTICE: pos = [0:3][1:2]={{1,2},{1,2},{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{1}},{{10}},{{100}}} NOTICE: pos = [0:3][1:2]={{2,2},{2,2},{2,2},{2,2}} NOTICE: userargs = <NULL> 30|(0,0,2,2,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{1,1},{1,1},{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{2,1},{2,1},{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{1,2},{1,2},{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{2,2},{2,2},{2,2},{2,2}} NOTICE: userargs = <NULL> 30|(0,0,2,2,1,-1,0,0,0,1)|(32BUI,0,f,) NOTICE: value = {{{20}},{{20}}} NOTICE: pos = [0:2][1:2]={{1,1},{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{20}},{{20}}} NOTICE: pos = [0:2][1:2]={{2,1},{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{20}},{{20}}} NOTICE: pos = [0:2][1:2]={{1,2},{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{20}},{{20}}} NOTICE: pos = [0:2][1:2]={{2,2},{2,2},{2,2}} NOTICE: userargs = <NULL> 31|(0,1,2,2,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{10}},{{2}},{{20}}} NOTICE: pos = [0:3][1:2]={{1,1},{1,1},{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{10}},{{2}},{{20}}} NOTICE: pos = [0:3][1:2]={{2,1},{2,1},{2,2},{2,2}} NOTICE: userargs = <NULL> 30|31|(0,0,2,1,1,-1,0,0,0,1)|(16BUI,0,f,) NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{1,1},{1,1},{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{2,1},{2,1},{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{1,2},{1,2},{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{100}},{{1}},{{100}}} NOTICE: pos = [0:3][1:2]={{2,2},{2,2},{2,2},{2,2}} NOTICE: userargs = <NULL> 30|(0,0,2,2,1,-1,0,0,0,1)|(32BUI,0,f,) NOTICE: value = {{{10}}} NOTICE: pos = [0:1][1:2]={{1,1},{1,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{10}}} NOTICE: pos = [0:1][1:2]={{2,1},{2,1}} NOTICE: userargs = <NULL> NOTICE: value = {{{10}}} NOTICE: pos = [0:1][1:2]={{1,2},{1,2}} NOTICE: userargs = <NULL> NOTICE: value = {{{10}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = <NULL> 30|(0,0,2,2,1,-1,0,0,0,1)|(8BUI,0,f,) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafct.sql������������������������������������0000644�0000000�0000000�00000013254�12041300040�023514� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CREATE OR REPLACE FUNCTION ST_TestRaster(ulx float8, uly float8, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(10, 10, ulx, uly, 1, 1, 0, 0, 0), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION raster_plus_twenty(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN RETURN pixel + 20; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_plus_arg1(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_polynomial(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE m float := 1; b float := 0; BEGIN IF NOT args[1] is NULL THEN m := args[1]::float; END IF; IF NOT args[2] is NULL THEN b := args[2]::float; END IF; RETURN m * pixel + b; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_nullage(pixel FLOAT, VARIADIC args TEXT[]) RETURNS FLOAT AS $$ BEGIN RETURN NULL; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_x_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + pos[1] + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OR REPLACE FUNCTION raster_y_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]) RETURNS FLOAT AS $$ DECLARE x float := 0; BEGIN IF NOT args[1] IS NULL THEN x := args[1]::float; END IF; RETURN pixel + pos[2] + x; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; -- Test NULL raster SELECT ST_MapAlgebraFct(NULL, 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure) IS NULL FROM ST_TestRaster(0, 0, -1) rast; SELECT ST_MapAlgebraFct(NULL, 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure, NULL) IS NULL FROM ST_TestRaster(0, 0, -1) rast; -- Test empty raster SELECT ST_IsEmpty(ST_MapAlgebraFct(ST_MakeEmptyRaster(0, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure)); SELECT ST_IsEmpty(ST_MapAlgebraFct(ST_MakeEmptyRaster(0, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure, NULL)); -- Test hasnoband raster SELECT ST_HasNoBand(ST_MapAlgebraFct(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure)); SELECT ST_HasNoBand(ST_MapAlgebraFct(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, 1, 0), 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure, NULL)); -- Test hasnodata value SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(ST_SetBandNoDataValue(rast, NULL), 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(ST_SetBandNoDataValue(rast, NULL), 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure, NULL), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test user function SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(rast, 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(ST_SetBandNoDataValue(rast, NULL), 1, NULL, 'raster_plus_twenty(float, text[])'::regprocedure, NULL), 1, 1) FROM ST_TestRaster(0, 0, -1) rast; -- Test pixeltype SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(rast, 1, '4BUI', 'raster_plus_twenty(float, text[])'::regprocedure), 1, 1) FROM ST_TestRaster(0, 0, 100) rast; SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(rast, 1, '4BUId', 'raster_plus_twenty(float, text[])'::regprocedure), 1, 1) FROM ST_TestRaster(0, 0, 100) rast; SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(rast, 1, '2BUI', 'raster_plus_twenty(float, text[])'::regprocedure), 1, 1) FROM ST_TestRaster(0, 0, 101) rast; -- Test user callbacks SELECT ST_Value(rast, 1, 1) + 13, ST_Value(ST_MapAlgebraFct(rast, 1, NULL, 'raster_plus_arg1(float, text[])'::regprocedure, '13'), 1, 1) FROM ST_TestRaster(0, 0, 200) AS rast; SELECT ST_Value(rast, 1, 1) * 21 + 14, ST_Value(ST_MapAlgebraFct(rast, 1, NULL, 'raster_polynomial(float, text[])'::regprocedure, '21', '14'), 1, 1) FROM ST_TestRaster(0, 0, 300) AS rast; -- Test null return from a user function = NODATA cell value SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraFct(rast, 1, NULL, 'raster_nullage(float, text[])'::regprocedure), 1, 1) FROM ST_TestRaster(0, 0, 100) AS rast; SELECT ST_Value(rast, 3, 8) + 13 + 3, ST_Value(ST_MapAlgebraFct(rast, 1, NULL, 'raster_x_plus_arg(float, int[], text[])'::regprocedure, '13'), 3, 8) FROM ST_TestRaster(0, 0, 100) AS rast; SELECT ST_Value(rast, 3, 8) + 13 + 8, ST_Value(ST_MapAlgebraFct(rast, 1, NULL, 'raster_y_plus_arg(float, int[], text[])'::regprocedure, '13'), 3, 8) FROM ST_TestRaster(0, 0, 100) AS rast; DROP FUNCTION ST_TestRaster(ulx float8, uly float8, val float8); DROP FUNCTION raster_plus_twenty(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_plus_arg1(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_polynomial(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_nullage(pixel FLOAT, VARIADIC args TEXT[]); DROP FUNCTION raster_x_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]); DROP FUNCTION raster_y_plus_arg(pixel FLOAT, pos INT[], VARIADIC args TEXT[]); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebrafct_2raster_expected�����������������������0000644�0000000�0000000�00000043743�11727671074�026303� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_mapalgebra" does not exist, skipping NOTICE: table "raster_mapalgebra_out" does not exist, skipping NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided have no intersection. Returning no band raster NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The FIRST raster is NULL. Returning NULL NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The SECOND raster is NULL. Returning NULL NOTICE: The two rasters provided are NULL. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Raster provided has no bands NOTICE: Raster provided has no bands NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL NOTICE: Could not find raster band of index 1 when getting pixel value. Returning NULL 0|1|INTERSECTION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|2|INTERSECTION|1.000|-1.000|1|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|3|INTERSECTION|1.000|1.000|1|1|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|4|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10|11|INTERSECTION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|INTERSECTION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|INTERSECTION|1.000|1.000|2|1|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|14|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |0|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |1|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |2|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |3|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |4|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |10|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |11|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |12|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |13|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| |14|INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 0||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 1||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 2||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 3||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 4||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 10||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 11||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 12||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 13||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| 14||INTERSECTION|0.000|0.000|0|0|0.000|0.000|0.000|0.000|0|0|||| ||INTERSECTION|||||||||||||| 0|1|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.500 0|2|UNION|-2.000|-2.000|5|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|3|UNION|-2.000|-2.000|5|5|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|4.000 0|4|UNION|-2.000|-2.000|6|6|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|5.000 10|11|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|UNION|-2.000|-2.000|4|5|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000| 10|14|UNION|-2.000|-2.000|4|6|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000| |0|UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 |1|UNION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 |2|UNION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 |3|UNION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 |4|UNION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 |10|UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |11|UNION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 |12|UNION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 |13|UNION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 |14|UNION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 0||UNION|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 1||UNION|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 2||UNION|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 3||UNION|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 4||UNION|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10||UNION|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 11||UNION|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 12||UNION|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 13||UNION|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 14||UNION|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 ||UNION|||||||||||||| 0|1|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|2|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 0|3|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000| 0|4|FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 10|11|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|12|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|13|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 10|14|FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |0|FIRST|||||||||||||| |1|FIRST|||||||||||||| |2|FIRST|||||||||||||| |3|FIRST|||||||||||||| |4|FIRST|||||||||||||| |10|FIRST|||||||||||||| |11|FIRST|||||||||||||| |12|FIRST|||||||||||||| |13|FIRST|||||||||||||| |14|FIRST|||||||||||||| 0||FIRST|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 1||FIRST|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 2||FIRST|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 3||FIRST|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 4||FIRST|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10||FIRST|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 11||FIRST|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 12||FIRST|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 13||FIRST|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 14||FIRST|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 ||FIRST|||||||||||||| 0|1|SECOND|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|| 0|2|SECOND|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000||3.000 0|3|SECOND|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000||4.000 0|4|SECOND|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 10|11|SECOND|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 10|12|SECOND|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|| 10|13|SECOND|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000||4.000 10|14|SECOND|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 |0|SECOND|-2.000|-2.000|4|4|1.000|1.000|0.000|0.000|0|1|32BF|0.000|1.000|1.000 |1|SECOND|0.000|0.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|2.000|2.000 |2|SECOND|1.000|-1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|3.000|3.000 |3|SECOND|1.000|1.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|4.000|4.000 |4|SECOND|2.000|2.000|2|2|1.000|1.000|0.000|0.000|0|1|32BF|0.000|5.000|5.000 |10|SECOND|-2.000|-2.000|4|4|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|1.000|1.000 |11|SECOND|0.000|0.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|2.000|2.000 |12|SECOND|1.000|-1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|3.000|3.000 |13|SECOND|1.000|1.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|4.000|4.000 |14|SECOND|2.000|2.000|2|2|1.000|1.000|1.000|-1.000|0|1|32BF|0.000|5.000|5.000 0||SECOND|||||||||||||| 1||SECOND|||||||||||||| 2||SECOND|||||||||||||| 3||SECOND|||||||||||||| 4||SECOND|||||||||||||| 10||SECOND|||||||||||||| 11||SECOND|||||||||||||| 12||SECOND|||||||||||||| 13||SECOND|||||||||||||| 14||SECOND|||||||||||||| ||SECOND|||||||||||||| �����������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_elevation_functions_expected�������������������������0000644�0000000�0000000�00000027030�12210402370�026071� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DO 0|aspect|1|1|315.000000 0|aspect|2|1|341.565063 0|aspect|3|1|0.000000 0|aspect|4|1|18.434948 0|aspect|5|1|0.000000 0|aspect|6|1|341.565063 0|aspect|7|1|0.000000 0|aspect|8|1|18.434948 0|aspect|9|1|45.000000 0|aspect|1|2|288.434937 0|aspect|2|2|315.000000 0|aspect|3|2|0.000000 0|aspect|4|2|30.963757 0|aspect|5|2|0.000000 0|aspect|6|2|329.036255 0|aspect|7|2|0.000000 0|aspect|8|2|45.000000 0|aspect|9|2|71.565048 0|aspect|1|3|270.000000 0|aspect|2|3|270.000000 0|aspect|3|3|-1.000000 0|aspect|4|3|90.000000 0|aspect|5|3|-1.000000 0|aspect|6|3|270.000000 0|aspect|7|3|-1.000000 0|aspect|8|3|90.000000 0|aspect|9|3|90.000000 0|aspect|1|4|251.565048 0|aspect|2|4|239.036240 0|aspect|3|4|180.000000 0|aspect|4|4|135.000000 0|aspect|5|4|-1.000000 0|aspect|6|4|225.000000 0|aspect|7|4|180.000000 0|aspect|8|4|120.963753 0|aspect|9|4|108.434952 0|aspect|1|5|270.000000 0|aspect|2|5|270.000000 0|aspect|3|5|-1.000000 0|aspect|4|5|-1.000000 0|aspect|5|5|-1.000000 0|aspect|6|5|-1.000000 0|aspect|7|5|-1.000000 0|aspect|8|5|90.000000 0|aspect|9|5|90.000000 0|aspect|1|6|288.434937 0|aspect|2|6|300.963745 0|aspect|3|6|0.000000 0|aspect|4|6|45.000000 0|aspect|5|6|-1.000000 0|aspect|6|6|315.000000 0|aspect|7|6|0.000000 0|aspect|8|6|59.036243 0|aspect|9|6|71.565048 0|aspect|1|7|270.000000 0|aspect|2|7|270.000000 0|aspect|3|7|-1.000000 0|aspect|4|7|90.000000 0|aspect|5|7|-1.000000 0|aspect|6|7|270.000000 0|aspect|7|7|-1.000000 0|aspect|8|7|90.000000 0|aspect|9|7|90.000000 0|aspect|1|8|251.565048 0|aspect|2|8|225.000000 0|aspect|3|8|180.000000 0|aspect|4|8|149.036240 0|aspect|5|8|180.000000 0|aspect|6|8|210.963760 0|aspect|7|8|180.000000 0|aspect|8|8|135.000000 0|aspect|9|8|108.434952 0|aspect|1|9|225.000000 0|aspect|2|9|198.434952 0|aspect|3|9|180.000000 0|aspect|4|9|161.565048 0|aspect|5|9|180.000000 0|aspect|6|9|198.434952 0|aspect|7|9|180.000000 0|aspect|8|9|161.565048 0|aspect|9|9|135.000000 1|aspect|1|1|315.000000 1|aspect|2|1|341.565063 1|aspect|3|1|0.000000 1|aspect|1|2|288.434937 1|aspect|2|2|315.000000 1|aspect|3|2|0.000000 1|aspect|1|3|270.000000 1|aspect|2|3|270.000000 1|aspect|3|3|-1.000000 2|aspect|1|1|251.565048 2|aspect|2|1|239.036240 2|aspect|3|1|180.000000 2|aspect|1|2|270.000000 2|aspect|2|2|270.000000 2|aspect|3|2|-1.000000 2|aspect|1|3|288.434937 2|aspect|2|3|300.963745 2|aspect|3|3|0.000000 3|aspect|1|1|270.000000 3|aspect|2|1|270.000000 3|aspect|3|1|-1.000000 3|aspect|1|2|251.565048 3|aspect|2|2|225.000000 3|aspect|3|2|180.000000 3|aspect|1|3|225.000000 3|aspect|2|3|198.434952 3|aspect|3|3|180.000000 4|aspect|1|1|18.434948 4|aspect|2|1|0.000000 4|aspect|3|1|341.565063 4|aspect|1|2|30.963757 4|aspect|2|2|0.000000 4|aspect|3|2|329.036255 4|aspect|1|3|90.000000 4|aspect|2|3|-1.000000 4|aspect|3|3|270.000000 5|aspect|1|1|135.000000 5|aspect|2|1|-1.000000 5|aspect|3|1|225.000000 5|aspect|1|2|-1.000000 5|aspect|2|2|-1.000000 5|aspect|3|2|-1.000000 5|aspect|1|3|45.000000 5|aspect|2|3|-1.000000 5|aspect|3|3|315.000000 6|aspect|1|1|90.000000 6|aspect|2|1|-1.000000 6|aspect|3|1|270.000000 6|aspect|1|2|149.036240 6|aspect|2|2|180.000000 6|aspect|3|2|210.963760 6|aspect|1|3|161.565048 6|aspect|2|3|180.000000 6|aspect|3|3|198.434952 7|aspect|1|1|0.000000 7|aspect|2|1|18.434948 7|aspect|3|1|45.000000 7|aspect|1|2|0.000000 7|aspect|2|2|45.000000 7|aspect|3|2|71.565048 7|aspect|1|3|-1.000000 7|aspect|2|3|90.000000 7|aspect|3|3|90.000000 8|aspect|1|1|180.000000 8|aspect|2|1|120.963753 8|aspect|3|1|108.434952 8|aspect|1|2|-1.000000 8|aspect|2|2|90.000000 8|aspect|3|2|90.000000 8|aspect|1|3|0.000000 8|aspect|2|3|59.036243 8|aspect|3|3|71.565048 9|aspect|1|1|-1.000000 9|aspect|2|1|90.000000 9|aspect|3|1|90.000000 9|aspect|1|2|180.000000 9|aspect|2|2|135.000000 9|aspect|3|2|108.434952 9|aspect|1|3|180.000000 9|aspect|2|3|161.565048 9|aspect|3|3|135.000000 0|hillshade|2|2|251.327637 0|hillshade|3|2|220.749786 0|hillshade|4|2|171.473175 0|hillshade|5|2|218.295898 0|hillshade|6|2|248.749847 0|hillshade|7|2|220.749786 0|hillshade|8|2|147.224319 0|hillshade|2|3|220.749786 0|hillshade|3|3|180.312225 0|hillshade|4|3|104.256424 0|hillshade|5|3|180.312225 0|hillshade|6|3|218.295898 0|hillshade|7|3|180.312225 0|hillshade|8|3|67.749786 0|hillshade|2|4|171.473175 0|hillshade|3|4|104.256424 0|hillshade|4|4|109.895920 0|hillshade|5|4|180.312225 0|hillshade|6|4|170.000000 0|hillshade|7|4|104.256424 0|hillshade|8|4|42.678726 0|hillshade|2|5|218.295898 0|hillshade|3|5|180.312225 0|hillshade|4|5|180.312225 0|hillshade|5|5|180.312225 0|hillshade|6|5|180.312225 0|hillshade|7|5|180.312225 0|hillshade|8|5|104.256424 0|hillshade|2|6|248.749847 0|hillshade|3|6|218.295898 0|hillshade|4|6|170.000000 0|hillshade|5|6|180.312225 0|hillshade|6|6|230.104080 0|hillshade|7|6|218.295898 0|hillshade|8|6|119.955399 0|hillshade|2|7|220.749786 0|hillshade|3|7|180.312225 0|hillshade|4|7|104.256424 0|hillshade|5|7|180.312225 0|hillshade|6|7|218.295898 0|hillshade|7|7|180.312225 0|hillshade|8|7|67.749786 0|hillshade|2|8|147.224319 0|hillshade|3|8|67.749786 0|hillshade|4|8|42.678726 0|hillshade|5|8|104.256424 0|hillshade|6|8|119.955399 0|hillshade|7|8|67.749786 0|hillshade|8|8|43.121006 1|hillshade|2|2|251.327637 1|hillshade|3|2|220.749786 1|hillshade|2|3|220.749786 1|hillshade|3|3|180.312225 2|hillshade|2|1|171.473175 2|hillshade|3|1|104.256424 2|hillshade|2|2|218.295898 2|hillshade|3|2|180.312225 2|hillshade|2|3|248.749847 2|hillshade|3|3|218.295898 3|hillshade|2|1|220.749786 3|hillshade|3|1|180.312225 3|hillshade|2|2|147.224319 3|hillshade|3|2|67.749786 4|hillshade|1|2|171.473175 4|hillshade|2|2|218.295898 4|hillshade|3|2|248.749847 4|hillshade|1|3|104.256424 4|hillshade|2|3|180.312225 4|hillshade|3|3|218.295898 5|hillshade|1|1|109.895920 5|hillshade|2|1|180.312225 5|hillshade|3|1|170.000000 5|hillshade|1|2|180.312225 5|hillshade|2|2|180.312225 5|hillshade|3|2|180.312225 5|hillshade|1|3|170.000000 5|hillshade|2|3|180.312225 5|hillshade|3|3|230.104080 6|hillshade|1|1|104.256424 6|hillshade|2|1|180.312225 6|hillshade|3|1|218.295898 6|hillshade|1|2|42.678726 6|hillshade|2|2|104.256424 6|hillshade|3|2|119.955399 7|hillshade|1|2|220.749786 7|hillshade|2|2|147.224319 7|hillshade|1|3|180.312225 7|hillshade|2|3|67.749786 8|hillshade|1|1|104.256424 8|hillshade|2|1|42.678726 8|hillshade|1|2|180.312225 8|hillshade|2|2|104.256424 8|hillshade|1|3|218.295898 8|hillshade|2|3|119.955399 9|hillshade|1|1|180.312225 9|hillshade|2|1|67.749786 9|hillshade|1|2|67.749786 9|hillshade|2|2|43.121006 0|slope|1|1|10.024988 0|slope|2|1|21.568129 0|slope|3|1|26.565052 0|slope|4|1|21.568129 0|slope|5|1|14.036243 0|slope|6|1|21.568129 0|slope|7|1|26.565052 0|slope|8|1|21.568129 0|slope|9|1|10.024988 0|slope|1|2|21.568129 0|slope|2|2|35.264389 0|slope|3|2|36.869896 0|slope|4|2|36.087147 0|slope|5|2|26.565052 0|slope|6|2|36.087147 0|slope|7|2|36.869896 0|slope|8|2|35.264389 0|slope|9|2|21.568129 0|slope|1|3|26.565052 0|slope|2|3|36.869896 0|slope|3|3|0.000000 0|slope|4|3|26.565052 0|slope|5|3|0.000000 0|slope|6|3|26.565052 0|slope|7|3|0.000000 0|slope|8|3|36.869896 0|slope|9|3|26.565052 0|slope|1|4|21.568129 0|slope|2|4|36.087147 0|slope|3|4|26.565052 0|slope|4|4|19.471220 0|slope|5|4|0.000000 0|slope|6|4|19.471220 0|slope|7|4|26.565052 0|slope|8|4|36.087147 0|slope|9|4|21.568129 0|slope|1|5|14.036243 0|slope|2|5|26.565052 0|slope|3|5|0.000000 0|slope|4|5|0.000000 0|slope|5|5|0.000000 0|slope|6|5|0.000000 0|slope|7|5|0.000000 0|slope|8|5|26.565052 0|slope|9|5|14.036243 0|slope|1|6|21.568129 0|slope|2|6|36.087147 0|slope|3|6|26.565052 0|slope|4|6|19.471220 0|slope|5|6|0.000000 0|slope|6|6|19.471220 0|slope|7|6|26.565052 0|slope|8|6|36.087147 0|slope|9|6|21.568129 0|slope|1|7|26.565052 0|slope|2|7|36.869896 0|slope|3|7|0.000000 0|slope|4|7|26.565052 0|slope|5|7|0.000000 0|slope|6|7|26.565052 0|slope|7|7|0.000000 0|slope|8|7|36.869896 0|slope|9|7|26.565052 0|slope|1|8|21.568129 0|slope|2|8|35.264389 0|slope|3|8|36.869896 0|slope|4|8|36.087147 0|slope|5|8|26.565052 0|slope|6|8|36.087147 0|slope|7|8|36.869896 0|slope|8|8|35.264389 0|slope|9|8|21.568129 0|slope|1|9|10.024988 0|slope|2|9|21.568129 0|slope|3|9|26.565052 0|slope|4|9|21.568129 0|slope|5|9|14.036243 0|slope|6|9|21.568129 0|slope|7|9|26.565052 0|slope|8|9|21.568129 0|slope|9|9|10.024988 1|slope|1|1|10.024988 1|slope|2|1|21.568129 1|slope|3|1|26.565052 1|slope|1|2|21.568129 1|slope|2|2|35.264389 1|slope|3|2|36.869896 1|slope|1|3|26.565052 1|slope|2|3|36.869896 1|slope|3|3|0.000000 2|slope|1|1|21.568129 2|slope|2|1|36.087147 2|slope|3|1|26.565052 2|slope|1|2|14.036243 2|slope|2|2|26.565052 2|slope|3|2|0.000000 2|slope|1|3|21.568129 2|slope|2|3|36.087147 2|slope|3|3|26.565052 3|slope|1|1|26.565052 3|slope|2|1|36.869896 3|slope|3|1|0.000000 3|slope|1|2|21.568129 3|slope|2|2|35.264389 3|slope|3|2|36.869896 3|slope|1|3|10.024988 3|slope|2|3|21.568129 3|slope|3|3|26.565052 4|slope|1|1|21.568129 4|slope|2|1|14.036243 4|slope|3|1|21.568129 4|slope|1|2|36.087147 4|slope|2|2|26.565052 4|slope|3|2|36.087147 4|slope|1|3|26.565052 4|slope|2|3|0.000000 4|slope|3|3|26.565052 5|slope|1|1|19.471220 5|slope|2|1|0.000000 5|slope|3|1|19.471220 5|slope|1|2|0.000000 5|slope|2|2|0.000000 5|slope|3|2|0.000000 5|slope|1|3|19.471220 5|slope|2|3|0.000000 5|slope|3|3|19.471220 6|slope|1|1|26.565052 6|slope|2|1|0.000000 6|slope|3|1|26.565052 6|slope|1|2|36.087147 6|slope|2|2|26.565052 6|slope|3|2|36.087147 6|slope|1|3|21.568129 6|slope|2|3|14.036243 6|slope|3|3|21.568129 7|slope|1|1|26.565052 7|slope|2|1|21.568129 7|slope|3|1|10.024988 7|slope|1|2|36.869896 7|slope|2|2|35.264389 7|slope|3|2|21.568129 7|slope|1|3|0.000000 7|slope|2|3|36.869896 7|slope|3|3|26.565052 8|slope|1|1|26.565052 8|slope|2|1|36.087147 8|slope|3|1|21.568129 8|slope|1|2|0.000000 8|slope|2|2|26.565052 8|slope|3|2|14.036243 8|slope|1|3|26.565052 8|slope|2|3|36.087147 8|slope|3|3|21.568129 9|slope|1|1|0.000000 9|slope|2|1|36.869896 9|slope|3|1|26.565052 9|slope|1|2|36.869896 9|slope|2|2|35.264389 9|slope|3|2|21.568129 9|slope|1|3|26.565052 9|slope|2|3|21.568129 9|slope|3|3|10.024988 1|{{{1,2,3},{4,5,6},{7,8,9}}}|0.000000 2|{{{15,14,13},{12,11,10},{9,8,7}}}|0.000000 3|{{{1,3,5},{7,9,11},{13,15,17}}}|0.000000 4|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}}| 5|{{{1,NULL,3},{NULL,5,NULL},{7,NULL,9}}}|0.000000 6|{{{NULL,2,NULL},{4,NULL,6},{NULL,8,NULL}}}| 7|{{{1,3.1,5.2},{NULL,NULL,11.5},{13.6,NULL,NULL}}}| 8|{{{NULL,3.14,NULL},{NULL,12.56,NULL},{NULL,NULL,25.12}}}|-0.392500 9|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,9}}}| 10|{{{3.14,15.14,27.14},{39.14,51.14,63.14},{75.14,87.14,99.14}}}|0.000000 11|{{{2.11,13.11,24.11},{35.11,46.11,57.11},{68.11,79.11,90.11}}}|0.000000 1|{{{1,2,3},{4,5,6},{7,8,9}}}|8.000000 2|{{{15,14,13},{12,11,10},{9,8,7}}}|8.000000 3|{{{1,3,5},{7,9,11},{13,15,17}}}|16.000000 4|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}}| 5|{{{1,NULL,3},{NULL,5,NULL},{7,NULL,9}}}|8.000000 6|{{{NULL,2,NULL},{4,NULL,6},{NULL,8,NULL}}}| 7|{{{1,3.1,5.2},{NULL,NULL,11.5},{13.6,NULL,NULL}}}| 8|{{{NULL,3.14,NULL},{NULL,12.56,NULL},{NULL,NULL,25.12}}}|21.980000 9|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,9}}}| 10|{{{3.14,15.14,27.14},{39.14,51.14,63.14},{75.14,87.14,99.14}}}|96.000000 11|{{{2.11,13.11,24.11},{35.11,46.11,57.11},{68.11,79.11,90.11}}}|88.000000 1|{{{1,2,3},{4,5,6},{7,8,9}}}|2.500000 2|{{{15,14,13},{12,11,10},{9,8,7}}}|2.500000 3|{{{1,3,5},{7,9,11},{13,15,17}}}|5.000000 4|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}}| 5|{{{1,NULL,3},{NULL,5,NULL},{7,NULL,9}}}|1.500000 6|{{{NULL,2,NULL},{4,NULL,6},{NULL,8,NULL}}}| 7|{{{1,3.1,5.2},{NULL,NULL,11.5},{13.6,NULL,NULL}}}| 8|{{{NULL,3.14,NULL},{NULL,12.56,NULL},{NULL,NULL,25.12}}}|2.747500 9|{{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,9}}}| 10|{{{3.14,15.14,27.14},{39.14,51.14,63.14},{75.14,87.14,99.14}}}|30.000000 11|{{{2.11,13.11,24.11},{35.11,46.11,57.11},{68.11,79.11,90.11}}}|27.500000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_convexhull_expected����������������������������������0000644�0000000�0000000�00000001011�12113241772�024202� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "test_raster_convexhull" does not exist, skipping NOTICE: Raster's convex hull is NULL POLYGON((0 0,9 0,9 -9,0 -9,0 0))|POLYGON((0 0,9 0,9 -9,0 -9,0 0))||POLYGON((0 0,9 0,9 -9,0 -9,0 0)) POLYGON((4 -4,5 -4,5 -5,4 -5,4 -4)) POLYGON((3 -3,5 -3,5 -6,3 -6,3 -3)) POLYGON((3 -3,6 -3,6 -6,3 -6,3 -3)) POLYGON((3 -3,9 -3,9 -6,3 -6,3 -3)) POLYGON((0 -3,6 -3,6 -6,0 -6,0 -3))|POLYGON((0 -3,9 -3,9 -6,0 -6,0 -3)) POLYGON((3 -3,9 -3,9 -6,3 -6,3 -3))|POLYGON((0 0,9 0,9 -9,0 -9,0 0))|POLYGON((0 0,9 0,9 -9,0 -9,0 0)) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_mapalgebraexpr_expected������������������������������0000644�0000000�0000000�00000000654�11764147433�025033� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: Raster is NULL. Returning NULL t NOTICE: Raster is empty. Returning an empty raster T1|t NOTICE: Raster does not have the required band. Returning a raster without a band T2|t T3||19 T4||2 T5||2 T6||-1 T7|100|15 T8|100|120 T9|101|3 T10.6.2|10|40 T10.6.3|10|30 T10.6.4|10|25 T10.7.2|10|45 T10.7.3|10|34 T10.7.4|10|28 T10.8.2|10|50 T10.8.3|10|37 T10.8.4|10|30 ERROR: division by zero T11.1|10|2 T11.2|10|2 T12|t|t|t|t ������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_band_properties_expected�����������������������������0000644�0000000�0000000�00000000012�11722777314�025206� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t f f t t ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_isempty.sql������������������������������������������0000644�0000000�0000000�00000002511�12233537203�022430� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- $Id$ -- -- Copyright (c) 2011 Jorge Arevalo <jorge.arevalo@deimos-space.com> -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software Foundation, -- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ----------------------------------------------------------------------- CREATE TABLE empty_raster_test ( rid numeric, rast raster ); INSERT INTO empty_raster_test VALUES (1, ST_MakeEmptyRaster( 100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) ); ------------------------------------------------------------------- -- st_isempty ----------------------------------------------------------------------- select st_isempty(rast) from empty_raster_test; DROP TABLE empty_raster_test; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/box3d_expected������������������������������������������0000644�0000000�0000000�00000000000�11722777314�022335� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_rastertoworldcoord_expected��������������������������0000644�0000000�0000000�00000013670�12054737500�025776� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|-2|-2 1|0|0 2|1|-1 3|1|1 4|2|2 10|-2|-2 11|0|0 12|1|-1 13|1|1 14|2|2 0|-2|-1 1|0|1 2|1|0 3|1|2 4|2|3 10|-1|-1 11|1|1 12|2|0 13|2|2 14|3|3 0|-1|-1 1|1|1 2|2|0 3|2|2 4|3|3 10|0|-2 11|2|0 12|3|-1 13|3|1 14|4|2 0|-3|-3 1|-1|-1 2|0|-2 3|0|0 4|1|1 10|-4|-2 11|-2|0 12|-1|-1 13|-1|1 14|0|2 0|-4|-3 1|-2|-1 2|-1|-2 3|-1|0 4|0|1 10|-5|-1 11|-3|1 12|-2|0 13|-2|2 14|-1|3 0|-2 1|0 2|1 3|1 4|2 10|-2 11|0 12|1 13|1 14|2 0|-2 1|0 2|1 3|1 4|2 10|-1 11|1 12|2 13|2 14|3 0|-1 1|1 2|2 3|2 4|3 10|0 11|2 12|3 13|3 14|4 0|-3 1|-1 2|0 3|0 4|1 10|-4 11|-2 12|-1 13|-1 14|0 0|-4 1|-2 2|-1 3|-1 4|0 10|-5 11|-3 12|-2 13|-2 14|-1 NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-2 1|0 2|1 3|1 4|2 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-2 1|0 2|1 3|1 4|2 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-1 1|1 2|2 3|2 4|3 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-3 1|-1 2|0 3|0 4|1 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-4 1|-2 2|-1 3|-1 4|0 10| 11| 12| 13| 14| 0|-2 1|0 2|-1 3|1 4|2 10|-2 11|0 12|-1 13|1 14|2 0|-1 1|1 2|0 3|2 4|3 10|-1 11|1 12|0 13|2 14|3 0|-1 1|1 2|0 3|2 4|3 10|-2 11|0 12|-1 13|1 14|2 0|-3 1|-1 2|-2 3|0 4|1 10|-2 11|0 12|-1 13|1 14|2 0|-3 1|-1 2|-2 3|0 4|1 10|-1 11|1 12|0 13|2 14|3 NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-2 1|0 2|-1 3|1 4|2 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-2 1|0 2|-1 3|1 4|2 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-1 1|1 2|0 3|2 4|3 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-3 1|-1 2|-2 3|0 4|1 10| 11| 12| 13| 14| NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster NOTICE: Pixel row and column required for computing longitude and latitude of a rotated raster 0|-4 1|-2 2|-3 3|-1 4|0 10| 11| 12| 13| 14| ������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_tile_expected����������������������������������������0000644�0000000�0000000�00000037000�12062705632�022762� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������NOTICE: table "raster_tile" does not exist, skipping 1|(1,"{{1,1,1},{1,1,1},{1,1,1}}") 1|(2,"{{10,10,10},{10,10,10},{10,10,10}}") 1|(1,"{{2,2,2},{2,2,2},{2,2,2}}") 1|(2,"{{20,20,20},{20,20,20},{20,20,20}}") 1|(1,"{{3,3,3},{3,3,3},{3,3,3}}") 1|(2,"{{30,30,30},{30,30,30},{30,30,30}}") 1|(1,"{{4,4,4},{4,4,4},{4,4,4}}") 1|(2,"{{40,40,40},{40,40,40},{40,40,40}}") 1|(1,"{{5,5,5},{5,5,5},{5,5,5}}") 1|(2,"{{50,50,50},{50,50,50},{50,50,50}}") 1|(1,"{{6,6,6},{6,6,6},{6,6,6}}") 1|(2,"{{60,60,60},{60,60,60},{60,60,60}}") 1|(1,"{{7,7,7},{7,7,7},{7,7,7}}") 1|(2,"{{70,70,70},{70,70,70},{70,70,70}}") 1|(1,"{{8,8,8},{8,8,8},{8,8,8}}") 1|(2,"{{80,80,80},{80,80,80},{80,80,80}}") 1|(1,"{{9,9,9},{9,9,9},{9,9,9}}") 1|(2,"{{90,90,90},{90,90,90},{90,90,90}}") 2|(1,"{{1,1,1},{1,1,1},{1,1,1}}") 2|(1,"{{2,2,2},{2,2,2},{2,2,2}}") 2|(1,"{{3,3,3},{3,3,3},{3,3,3}}") 2|(1,"{{4,4,4},{4,4,4},{4,4,4}}") 2|(1,"{{5,5,5},{5,5,5},{5,5,5}}") 2|(1,"{{6,6,6},{6,6,6},{6,6,6}}") 2|(1,"{{7,7,7},{7,7,7},{7,7,7}}") 2|(1,"{{8,8,8},{8,8,8},{8,8,8}}") 2|(1,"{{9,9,9},{9,9,9},{9,9,9}}") 3|(1,"{{10,10,10},{10,10,10},{10,10,10}}") 3|(2,"{{1,1,1},{1,1,1},{1,1,1}}") 3|(1,"{{20,20,20},{20,20,20},{20,20,20}}") 3|(2,"{{2,2,2},{2,2,2},{2,2,2}}") 3|(1,"{{30,30,30},{30,30,30},{30,30,30}}") 3|(2,"{{3,3,3},{3,3,3},{3,3,3}}") 3|(1,"{{40,40,40},{40,40,40},{40,40,40}}") 3|(2,"{{4,4,4},{4,4,4},{4,4,4}}") 3|(1,"{{50,50,50},{50,50,50},{50,50,50}}") 3|(2,"{{5,5,5},{5,5,5},{5,5,5}}") 3|(1,"{{60,60,60},{60,60,60},{60,60,60}}") 3|(2,"{{6,6,6},{6,6,6},{6,6,6}}") 3|(1,"{{70,70,70},{70,70,70},{70,70,70}}") 3|(2,"{{7,7,7},{7,7,7},{7,7,7}}") 3|(1,"{{80,80,80},{80,80,80},{80,80,80}}") 3|(2,"{{8,8,8},{8,8,8},{8,8,8}}") 3|(1,"{{90,90,90},{90,90,90},{90,90,90}}") 3|(2,"{{9,9,9},{9,9,9},{9,9,9}}") 4|(1,"{{10,10,10},{10,10,10},{10,10,10}}") 4|(1,"{{20,20,20},{20,20,20},{20,20,20}}") 4|(1,"{{30,30,30},{30,30,30},{30,30,30}}") 4|(1,"{{40,40,40},{40,40,40},{40,40,40}}") 4|(1,"{{50,50,50},{50,50,50},{50,50,50}}") 4|(1,"{{60,60,60},{60,60,60},{60,60,60}}") 4|(1,"{{70,70,70},{70,70,70},{70,70,70}}") 4|(1,"{{80,80,80},{80,80,80},{80,80,80}}") 4|(1,"{{90,90,90},{90,90,90},{90,90,90}}") 5|(1,"{{1,1},{1,1}}") 5|(2,"{{10,10},{10,10}}") 5|(1,"{{1,2},{1,2}}") 5|(2,"{{10,20},{10,20}}") 5|(1,"{{2,2},{2,2}}") 5|(2,"{{20,20},{20,20}}") 5|(1,"{{3,3},{3,3}}") 5|(2,"{{30,30},{30,30}}") 5|(1,"{{3,NULL},{3,NULL}}") 5|(2,"{{30,NULL},{30,NULL}}") 5|(1,"{{1,1},{4,4}}") 5|(2,"{{10,10},{40,40}}") 5|(1,"{{1,2},{4,5}}") 5|(2,"{{10,20},{40,50}}") 5|(1,"{{2,2},{5,5}}") 5|(2,"{{20,20},{50,50}}") 5|(1,"{{3,3},{6,6}}") 5|(2,"{{30,30},{60,60}}") 5|(1,"{{3,NULL},{6,NULL}}") 5|(2,"{{30,NULL},{60,NULL}}") 5|(1,"{{4,4},{4,4}}") 5|(2,"{{40,40},{40,40}}") 5|(1,"{{4,5},{4,5}}") 5|(2,"{{40,50},{40,50}}") 5|(1,"{{5,5},{5,5}}") 5|(2,"{{50,50},{50,50}}") 5|(1,"{{6,6},{6,6}}") 5|(2,"{{60,60},{60,60}}") 5|(1,"{{6,NULL},{6,NULL}}") 5|(2,"{{60,NULL},{60,NULL}}") 5|(1,"{{7,7},{7,7}}") 5|(2,"{{70,70},{70,70}}") 5|(1,"{{7,8},{7,8}}") 5|(2,"{{70,80},{70,80}}") 5|(1,"{{8,8},{8,8}}") 5|(2,"{{80,80},{80,80}}") 5|(1,"{{9,9},{9,9}}") 5|(2,"{{90,90},{90,90}}") 5|(1,"{{9,NULL},{9,NULL}}") 5|(2,"{{90,NULL},{90,NULL}}") 5|(1,"{{7,7},{NULL,NULL}}") 5|(2,"{{70,70},{NULL,NULL}}") 5|(1,"{{7,8},{NULL,NULL}}") 5|(2,"{{70,80},{NULL,NULL}}") 5|(1,"{{8,8},{NULL,NULL}}") 5|(2,"{{80,80},{NULL,NULL}}") 5|(1,"{{9,9},{NULL,NULL}}") 5|(2,"{{90,90},{NULL,NULL}}") 5|(1,"{{9,NULL},{NULL,NULL}}") 5|(2,"{{90,NULL},{NULL,NULL}}") 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{1}}) 6|(2,{{10}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{2}}) 6|(2,{{20}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{3}}) 6|(2,{{30}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{4}}) 6|(2,{{40}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{5}}) 6|(2,{{50}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{6}}) 6|(2,{{60}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{7}}) 6|(2,{{70}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{8}}) 6|(2,{{80}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{9}}) 6|(2,{{90}}) 6|(1,{{9}}) 6|(2,{{90}}) 7|(1,"{{1,1,1,2,2},{1,1,1,2,2},{1,1,1,2,2},{4,4,4,5,5},{4,4,4,5,5}}") 7|(2,"{{10,10,10,20,20},{10,10,10,20,20},{10,10,10,20,20},{40,40,40,50,50},{40,40,40,50,50}}") 7|(1,"{{2,3,3,3,NULL},{2,3,3,3,NULL},{2,3,3,3,NULL},{5,6,6,6,NULL},{5,6,6,6,NULL}}") 7|(2,"{{20,30,30,30,NULL},{20,30,30,30,NULL},{20,30,30,30,NULL},{50,60,60,60,NULL},{50,60,60,60,NULL}}") 7|(1,"{{4,4,4,5,5},{7,7,7,8,8},{7,7,7,8,8},{7,7,7,8,8},{NULL,NULL,NULL,NULL,NULL}}") 7|(2,"{{40,40,40,50,50},{70,70,70,80,80},{70,70,70,80,80},{70,70,70,80,80},{NULL,NULL,NULL,NULL,NULL}}") 7|(1,"{{5,6,6,6,NULL},{8,9,9,9,NULL},{8,9,9,9,NULL},{8,9,9,9,NULL},{NULL,NULL,NULL,NULL,NULL}}") 7|(2,"{{50,60,60,60,NULL},{80,90,90,90,NULL},{80,90,90,90,NULL},{80,90,90,90,NULL},{NULL,NULL,NULL,NULL,NULL}}") 8|(1,"{{1,1},{1,1},{1,1}}") 8|(2,"{{10,10},{10,10},{10,10}}") 8|(1,"{{1,2},{1,2},{1,2}}") 8|(2,"{{10,20},{10,20},{10,20}}") 8|(1,"{{2,2},{2,2},{2,2}}") 8|(2,"{{20,20},{20,20},{20,20}}") 8|(1,"{{3,3},{3,3},{3,3}}") 8|(2,"{{30,30},{30,30},{30,30}}") 8|(1,"{{3,NULL},{3,NULL},{3,NULL}}") 8|(2,"{{30,NULL},{30,NULL},{30,NULL}}") 8|(1,"{{4,4},{4,4},{4,4}}") 8|(2,"{{40,40},{40,40},{40,40}}") 8|(1,"{{4,5},{4,5},{4,5}}") 8|(2,"{{40,50},{40,50},{40,50}}") 8|(1,"{{5,5},{5,5},{5,5}}") 8|(2,"{{50,50},{50,50},{50,50}}") 8|(1,"{{6,6},{6,6},{6,6}}") 8|(2,"{{60,60},{60,60},{60,60}}") 8|(1,"{{6,NULL},{6,NULL},{6,NULL}}") 8|(2,"{{60,NULL},{60,NULL},{60,NULL}}") 8|(1,"{{7,7},{7,7},{7,7}}") 8|(2,"{{70,70},{70,70},{70,70}}") 8|(1,"{{7,8},{7,8},{7,8}}") 8|(2,"{{70,80},{70,80},{70,80}}") 8|(1,"{{8,8},{8,8},{8,8}}") 8|(2,"{{80,80},{80,80},{80,80}}") 8|(1,"{{9,9},{9,9},{9,9}}") 8|(2,"{{90,90},{90,90},{90,90}}") 8|(1,"{{9,NULL},{9,NULL},{9,NULL}}") 8|(2,"{{90,NULL},{90,NULL},{90,NULL}}") 9|(1,"{{1,1,1},{1,1,1}}") 9|(2,"{{10,10,10},{10,10,10}}") 9|(1,"{{2,2,2},{2,2,2}}") 9|(2,"{{20,20,20},{20,20,20}}") 9|(1,"{{3,3,3},{3,3,3}}") 9|(2,"{{30,30,30},{30,30,30}}") 9|(1,"{{1,1,1},{4,4,4}}") 9|(2,"{{10,10,10},{40,40,40}}") 9|(1,"{{2,2,2},{5,5,5}}") 9|(2,"{{20,20,20},{50,50,50}}") 9|(1,"{{3,3,3},{6,6,6}}") 9|(2,"{{30,30,30},{60,60,60}}") 9|(1,"{{4,4,4},{4,4,4}}") 9|(2,"{{40,40,40},{40,40,40}}") 9|(1,"{{5,5,5},{5,5,5}}") 9|(2,"{{50,50,50},{50,50,50}}") 9|(1,"{{6,6,6},{6,6,6}}") 9|(2,"{{60,60,60},{60,60,60}}") 9|(1,"{{7,7,7},{7,7,7}}") 9|(2,"{{70,70,70},{70,70,70}}") 9|(1,"{{8,8,8},{8,8,8}}") 9|(2,"{{80,80,80},{80,80,80}}") 9|(1,"{{9,9,9},{9,9,9}}") 9|(2,"{{90,90,90},{90,90,90}}") 9|(1,"{{7,7,7},{NULL,NULL,NULL}}") 9|(2,"{{70,70,70},{NULL,NULL,NULL}}") 9|(1,"{{8,8,8},{NULL,NULL,NULL}}") 9|(2,"{{80,80,80},{NULL,NULL,NULL}}") 9|(1,"{{9,9,9},{NULL,NULL,NULL}}") 9|(2,"{{90,90,90},{NULL,NULL,NULL}}") 11|(1,"{{1,1,1},{1,1,1},{1,1,1}}") 11|(2,"{{10,10,10},{10,10,10},{10,10,10}}") 11|(1,"{{2,2,2},{2,2,2},{2,2,2}}") 11|(2,"{{20,20,20},{20,20,20},{20,20,20}}") 11|(1,"{{3,3,3},{3,3,3},{3,3,3}}") 11|(2,"{{30,30,30},{30,30,30},{30,30,30}}") 11|(1,"{{4,4,4},{4,4,4},{4,4,4}}") 11|(2,"{{40,40,40},{40,40,40},{40,40,40}}") 11|(1,"{{5,5,5},{5,5,5},{5,5,5}}") 11|(2,"{{50,50,50},{50,50,50},{50,50,50}}") 11|(1,"{{6,6,6},{6,6,6},{6,6,6}}") 11|(2,"{{60,60,60},{60,60,60},{60,60,60}}") 11|(1,"{{7,7,7},{7,7,7},{7,7,7}}") 11|(2,"{{70,70,70},{70,70,70},{70,70,70}}") 11|(1,"{{8,8,8},{8,8,8},{8,8,8}}") 11|(2,"{{80,80,80},{80,80,80},{80,80,80}}") 11|(1,"{{9,9,9},{9,9,9},{9,9,9}}") 11|(2,"{{90,90,90},{90,90,90},{90,90,90}}") 12|(1,"{{1,1,1},{1,1,1},{1,1,1}}") 12|(1,"{{2,2,2},{2,2,2},{2,2,2}}") 12|(1,"{{3,3,3},{3,3,3},{3,3,3}}") 12|(1,"{{4,4,4},{4,4,4},{4,4,4}}") 12|(1,"{{5,5,5},{5,5,5},{5,5,5}}") 12|(1,"{{6,6,6},{6,6,6},{6,6,6}}") 12|(1,"{{7,7,7},{7,7,7},{7,7,7}}") 12|(1,"{{8,8,8},{8,8,8},{8,8,8}}") 12|(1,"{{9,9,9},{9,9,9},{9,9,9}}") 13|(1,"{{10,10,10},{10,10,10},{10,10,10}}") 13|(2,"{{1,1,1},{1,1,1},{1,1,1}}") 13|(1,"{{20,20,20},{20,20,20},{20,20,20}}") 13|(2,"{{2,2,2},{2,2,2},{2,2,2}}") 13|(1,"{{30,30,30},{30,30,30},{30,30,30}}") 13|(2,"{{3,3,3},{3,3,3},{3,3,3}}") 13|(1,"{{40,40,40},{40,40,40},{40,40,40}}") 13|(2,"{{4,4,4},{4,4,4},{4,4,4}}") 13|(1,"{{50,50,50},{50,50,50},{50,50,50}}") 13|(2,"{{5,5,5},{5,5,5},{5,5,5}}") 13|(1,"{{60,60,60},{60,60,60},{60,60,60}}") 13|(2,"{{6,6,6},{6,6,6},{6,6,6}}") 13|(1,"{{70,70,70},{70,70,70},{70,70,70}}") 13|(2,"{{7,7,7},{7,7,7},{7,7,7}}") 13|(1,"{{80,80,80},{80,80,80},{80,80,80}}") 13|(2,"{{8,8,8},{8,8,8},{8,8,8}}") 13|(1,"{{90,90,90},{90,90,90},{90,90,90}}") 13|(2,"{{9,9,9},{9,9,9},{9,9,9}}") 14|(1,"{{10,10,10},{10,10,10},{10,10,10}}") 14|(1,"{{20,20,20},{20,20,20},{20,20,20}}") 14|(1,"{{30,30,30},{30,30,30},{30,30,30}}") 14|(1,"{{40,40,40},{40,40,40},{40,40,40}}") 14|(1,"{{50,50,50},{50,50,50},{50,50,50}}") 14|(1,"{{60,60,60},{60,60,60},{60,60,60}}") 14|(1,"{{70,70,70},{70,70,70},{70,70,70}}") 14|(1,"{{80,80,80},{80,80,80},{80,80,80}}") 14|(1,"{{90,90,90},{90,90,90},{90,90,90}}") 15|(1,"{{1,1},{1,1}}") 15|(2,"{{10,10},{10,10}}") 15|(1,"{{1,2},{1,2}}") 15|(2,"{{10,20},{10,20}}") 15|(1,"{{2,2},{2,2}}") 15|(2,"{{20,20},{20,20}}") 15|(1,"{{3,3},{3,3}}") 15|(2,"{{30,30},{30,30}}") 15|(1,"{{3},{3}}") 15|(2,"{{30},{30}}") 15|(1,"{{1,1},{4,4}}") 15|(2,"{{10,10},{40,40}}") 15|(1,"{{1,2},{4,5}}") 15|(2,"{{10,20},{40,50}}") 15|(1,"{{2,2},{5,5}}") 15|(2,"{{20,20},{50,50}}") 15|(1,"{{3,3},{6,6}}") 15|(2,"{{30,30},{60,60}}") 15|(1,"{{3},{6}}") 15|(2,"{{30},{60}}") 15|(1,"{{4,4},{4,4}}") 15|(2,"{{40,40},{40,40}}") 15|(1,"{{4,5},{4,5}}") 15|(2,"{{40,50},{40,50}}") 15|(1,"{{5,5},{5,5}}") 15|(2,"{{50,50},{50,50}}") 15|(1,"{{6,6},{6,6}}") 15|(2,"{{60,60},{60,60}}") 15|(1,"{{6},{6}}") 15|(2,"{{60},{60}}") 15|(1,"{{7,7},{7,7}}") 15|(2,"{{70,70},{70,70}}") 15|(1,"{{7,8},{7,8}}") 15|(2,"{{70,80},{70,80}}") 15|(1,"{{8,8},{8,8}}") 15|(2,"{{80,80},{80,80}}") 15|(1,"{{9,9},{9,9}}") 15|(2,"{{90,90},{90,90}}") 15|(1,"{{9},{9}}") 15|(2,"{{90},{90}}") 15|(1,"{{7,7}}") 15|(2,"{{70,70}}") 15|(1,"{{7,8}}") 15|(2,"{{70,80}}") 15|(1,"{{8,8}}") 15|(2,"{{80,80}}") 15|(1,"{{9,9}}") 15|(2,"{{90,90}}") 15|(1,{{9}}) 15|(2,{{90}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{1}}) 16|(2,{{10}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{2}}) 16|(2,{{20}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{3}}) 16|(2,{{30}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{4}}) 16|(2,{{40}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{5}}) 16|(2,{{50}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{6}}) 16|(2,{{60}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{7}}) 16|(2,{{70}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{8}}) 16|(2,{{80}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{9}}) 16|(2,{{90}}) 16|(1,{{9}}) 16|(2,{{90}}) 17|(1,"{{1,1,1,2,2},{1,1,1,2,2},{1,1,1,2,2},{4,4,4,5,5},{4,4,4,5,5}}") 17|(2,"{{10,10,10,20,20},{10,10,10,20,20},{10,10,10,20,20},{40,40,40,50,50},{40,40,40,50,50}}") 17|(1,"{{2,3,3,3},{2,3,3,3},{2,3,3,3},{5,6,6,6},{5,6,6,6}}") 17|(2,"{{20,30,30,30},{20,30,30,30},{20,30,30,30},{50,60,60,60},{50,60,60,60}}") 17|(1,"{{4,4,4,5,5},{7,7,7,8,8},{7,7,7,8,8},{7,7,7,8,8}}") 17|(2,"{{40,40,40,50,50},{70,70,70,80,80},{70,70,70,80,80},{70,70,70,80,80}}") 17|(1,"{{5,6,6,6},{8,9,9,9},{8,9,9,9},{8,9,9,9}}") 17|(2,"{{50,60,60,60},{80,90,90,90},{80,90,90,90},{80,90,90,90}}") 18|(1,"{{1,1},{1,1},{1,1}}") 18|(2,"{{10,10},{10,10},{10,10}}") 18|(1,"{{1,2},{1,2},{1,2}}") 18|(2,"{{10,20},{10,20},{10,20}}") 18|(1,"{{2,2},{2,2},{2,2}}") 18|(2,"{{20,20},{20,20},{20,20}}") 18|(1,"{{3,3},{3,3},{3,3}}") 18|(2,"{{30,30},{30,30},{30,30}}") 18|(1,"{{3},{3},{3}}") 18|(2,"{{30},{30},{30}}") 18|(1,"{{4,4},{4,4},{4,4}}") 18|(2,"{{40,40},{40,40},{40,40}}") 18|(1,"{{4,5},{4,5},{4,5}}") 18|(2,"{{40,50},{40,50},{40,50}}") 18|(1,"{{5,5},{5,5},{5,5}}") 18|(2,"{{50,50},{50,50},{50,50}}") 18|(1,"{{6,6},{6,6},{6,6}}") 18|(2,"{{60,60},{60,60},{60,60}}") 18|(1,"{{6},{6},{6}}") 18|(2,"{{60},{60},{60}}") 18|(1,"{{7,7},{7,7},{7,7}}") 18|(2,"{{70,70},{70,70},{70,70}}") 18|(1,"{{7,8},{7,8},{7,8}}") 18|(2,"{{70,80},{70,80},{70,80}}") 18|(1,"{{8,8},{8,8},{8,8}}") 18|(2,"{{80,80},{80,80},{80,80}}") 18|(1,"{{9,9},{9,9},{9,9}}") 18|(2,"{{90,90},{90,90},{90,90}}") 18|(1,"{{9},{9},{9}}") 18|(2,"{{90},{90},{90}}") 19|(1,"{{1,1,1},{1,1,1}}") 19|(2,"{{10,10,10},{10,10,10}}") 19|(1,"{{2,2,2},{2,2,2}}") 19|(2,"{{20,20,20},{20,20,20}}") 19|(1,"{{3,3,3},{3,3,3}}") 19|(2,"{{30,30,30},{30,30,30}}") 19|(1,"{{1,1,1},{4,4,4}}") 19|(2,"{{10,10,10},{40,40,40}}") 19|(1,"{{2,2,2},{5,5,5}}") 19|(2,"{{20,20,20},{50,50,50}}") 19|(1,"{{3,3,3},{6,6,6}}") 19|(2,"{{30,30,30},{60,60,60}}") 19|(1,"{{4,4,4},{4,4,4}}") 19|(2,"{{40,40,40},{40,40,40}}") 19|(1,"{{5,5,5},{5,5,5}}") 19|(2,"{{50,50,50},{50,50,50}}") 19|(1,"{{6,6,6},{6,6,6}}") 19|(2,"{{60,60,60},{60,60,60}}") 19|(1,"{{7,7,7},{7,7,7}}") 19|(2,"{{70,70,70},{70,70,70}}") 19|(1,"{{8,8,8},{8,8,8}}") 19|(2,"{{80,80,80},{80,80,80}}") 19|(1,"{{9,9,9},{9,9,9}}") 19|(2,"{{90,90,90},{90,90,90}}") 19|(1,"{{7,7,7}}") 19|(2,"{{70,70,70}}") 19|(1,"{{8,8,8}}") 19|(2,"{{80,80,80}}") 19|(1,"{{9,9,9}}") 19|(2,"{{90,90,90}}") postgis-2.1.2+dfsg.orig/raster/test/regress/rt_aspng.sql��������������������������������������������0000644�0000000�0000000�00000003771�12245413746�022067� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT ST_AsPNG(NULL) IS NULL; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', 123, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 123, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', -123, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 254, NULL) ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), ARRAY['ZLEVEL=1'] ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), ARRAY['ZLEVEL=9'] ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, 1 ) , 2, '8BSI', 11, 1 ) , 3, '8BSI', 111, 1 ), ARRAY['ZLEVEL=9'] ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BUI', 1, 1 ) , 2, '8BUI', 11, 1 ), ARRAY[1], 6 ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsPNG( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BUI', 1, 1 ) , 2, '8BUI', 11, 1 ) , 3, '8BUI', 111, 1 ), ARRAY[3,1], 6 ) ) > 0 THEN 1 ELSE 0 END; �������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_asgdalraster.sql�������������������������������������0000644�0000000�0000000�00000006701�11722777314�023432� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT CASE WHEN length( ST_AsGDALRaster( NULL, 'GTiff' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '64BF', 123.4567, NULL), 'GTiff' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, NULL ) , '64BF', 987.654321, NULL ) , '64BF', 9876.54321, NULL ), 'GTiff' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '64BF', 1234.5678, -9999 ) , '64BF', 987.654321, -9999 ) , '64BF', 9876.54321, -9999 ), 'GTiff' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', 123, NULL), 'PNG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 123, NULL), 'PNG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', -123, NULL), 'PNG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 254, NULL), 'PNG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), 'PNG', ARRAY['ZLEVEL=1'] ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), 'PNG', ARRAY['ZLEVEL=9'] ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', 123, NULL), 'JPEG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 123, NULL), 'JPEG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BSI', -123, NULL), 'JPEG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand(ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0), 1, '8BUI', 254, NULL), 'JPEG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), 'JPEG' ) ) > 0 THEN 1 ELSE 0 END; SELECT CASE WHEN length( ST_AsGDALRaster( ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(200, 200, 10, 10, 2, 2, 0, 0) , 1, '8BSI', 1, -1 ) , 2, '8BSI', 11, -1 ) , 3, '8BSI', 111, -1 ), 'JPEG', ARRAY['QUALITY=90','PROGRESSIVE=ON'] ) ) > 0 THEN 1 ELSE 0 END; ���������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/�������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020762� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicOutDB-pre.pl��������������������������������0000755�0000000�0000000�00000000536�12135570367�024037� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������use File::Basename; use Cwd 'abs_path'; my $REGDIR = abs_path(dirname($0)); my $RASTERDIR = abs_path($REGDIR . "/../raster/test/regress"); my $FILERASTER = $RASTERDIR . "/loader/testraster.tif"; link "loader/testraster.tif", "loader/BasicOutDB.tif"; open(OPTS, '>', 'loader/BasicOutDB.opts'); print OPTS "-F -C -R \"$FILERASTER\"\n"; close(OPTS); ������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10Copy-pre.pl����������������������������0000755�0000000�0000000�00000000073�11761467001�024474� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������link "loader/testraster.tif", "loader/Tiled10x10Copy.tif"; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicCopy.opts�����������������������������������0000644�0000000�0000000�00000000006�12062705475�023546� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-C -Y ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled8x8.select.sql������������������������������0000644�0000000�0000000�00000002207�12062705723�024374� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT srid, scale_x::numeric(16, 10), scale_y::numeric(16, 10), blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values::numeric(16,10)[], out_db, ST_Equals(extent, 'POLYGON((16 -90,8 -90,0 -90,0 -88,0 -80,0 -72,0 -64,0 -56,0 -48,0 -40,0 -32,0 -24,0 -16,0 -8,0 0,8 0,16 0,24 0,32 0,40 0,48 0,56 0,64 0,72 0,80 0,88 0,90 0,90 -8,90 -16,90 -24,90 -32,90 -40,90 -48,90 -56,90 -64,90 -72,90 -80,90 -88,90 -90,88 -90,80 -90,72 -90,64 -90,56 -90,48 -90,40 -90,32 -90,24 -90,16 -90))'::geometry) FROM raster_columns WHERE r_table_name = 'loadedrast' AND r_raster_column = 'rast'; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 1)).* FROM loadedrast WHERE rid = 12) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 12) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 133) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 3)).* FROM loadedrast WHERE rid = 144) foo WHERE x = 1 AND y = 1; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10Copy.select.sql������������������������0000644�0000000�0000000�00000001257�12062705475�025361� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT srid, scale_x::numeric(16, 10), scale_y::numeric(16, 10), blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values::numeric(16,10)[], out_db, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'loadedrast' AND r_raster_column = 'rast'; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 1)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 73) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 3)).* FROM loadedrast WHERE rid = 81) foo WHERE x = 1 AND y = 1; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicOutDB.select.expected�����������������������0000644�0000000�0000000�00000000375�12135570367�025715� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1.0000000000|-1.0000000000|90|90|t|f|3|{8BUI,8BUI,8BUI}|{NULL,NULL,NULL}|{t,t,t}|POLYGON((0 0,90 0,90 -90,0 -90,0 0)) POLYGON((0 0,1 0,1 -1,0 -1,0 0))|255 POLYGON((89 -89,90 -89,90 -90,89 -90,89 -89))|0 POLYGON((44 -44,45 -44,45 -45,44 -45,44 -44))|0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10Copy-post.sh���������������������������0000755�0000000�0000000�00000000040�11722777314�024674� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rm -f loader/Tiled10x10Copy.tif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10-post.sh�������������������������������0000755�0000000�0000000�00000000034�11722777314�024044� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rm -f loader/Tiled10x10.tif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicCopy-post.sh��������������������������������0000755�0000000�0000000�00000000033�11722777314�024164� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rm -f loader/BasicCopy.tif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicFilename-post.pl����������������������������0000755�0000000�0000000�00000000043�12123737351�024765� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unlink "loader/BasicFilename.tif"; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled8x8-pre.pl����������������������������������0000755�0000000�0000000�00000000065�12062705535�023522� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������link "loader/testraster.tif", "loader/Tiled8x8.tif"; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicCopy-post.pl��������������������������������0000755�0000000�0000000�00000000037�11761467001�024161� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unlink "loader/BasicCopy.tif"; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled8x8-pre.sh����������������������������������0000755�0000000�0000000�00000000055�12062705535�023520� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cp loader/testraster.tif loader/Tiled8x8.tif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled8x8.opts������������������������������������0000644�0000000�0000000�00000000012�12062705535�023275� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-t 8x8 -C ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Basic-post.pl������������������������������������0000755�0000000�0000000�00000000033�11761467001�023322� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unlink "loader/Basic.tif"; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicCopy.select.expected������������������������0000644�0000000�0000000�00000000375�12062705566�025652� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1.0000000000|-1.0000000000|90|90|t|f|3|{8BUI,8BUI,8BUI}|{NULL,NULL,NULL}|{f,f,f}|POLYGON((0 0,90 0,90 -90,0 -90,0 0)) POLYGON((0 0,1 0,1 -1,0 -1,0 0))|255 POLYGON((89 -89,90 -89,90 -90,89 -90,89 -89))|0 POLYGON((44 -44,45 -44,45 -45,44 -45,44 -44))|0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled8x8-post.pl���������������������������������0000755�0000000�0000000�00000000036�12062705535�023717� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unlink "loader/Tiled8x8.tif"; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10Copy-pre.sh����������������������������0000755�0000000�0000000�00000000063�11722777314�024502� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cp loader/testraster.tif loader/Tiled10x10Copy.tif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicFilename.opts�������������������������������0000644�0000000�0000000�00000000012�12123737351�024345� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-n foobar ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Basic.opts���������������������������������������0000644�0000000�0000000�00000000003�12062705475�022710� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-C �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicCopy-pre.pl���������������������������������0000755�0000000�0000000�00000000066�11761467001�023764� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������link "loader/testraster.tif", "loader/BasicCopy.tif"; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10-pre.pl��������������������������������0000755�0000000�0000000�00000000067�11761467001�023644� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������link "loader/testraster.tif", "loader/Tiled10x10.tif"; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Basic-post.sh������������������������������������0000755�0000000�0000000�00000000027�11722777314�023334� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rm -f loader/Basic.tif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10Copy-post.pl���������������������������0000755�0000000�0000000�00000000044�11761467001�024671� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unlink "loader/Tiled10x10Copy.tif"; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicOutDB-pre.sh��������������������������������0000755�0000000�0000000�00000000404�12135570367�024030� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" cp loader/testraster.tif loader/BasicOutDB.tif echo "-F -C -R \"$DIR/loader/testraster.tif\"" > $DIR/BasicOutDB.opts ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicFilename-pre.pl�����������������������������0000755�0000000�0000000�00000000072�12123737351�024570� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������link "loader/testraster.tif", "loader/BasicFilename.tif"; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Basic-pre.sh�������������������������������������0000755�0000000�0000000�00000000052�11722777314�023133� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cp loader/testraster.tif loader/Basic.tif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicCopy.select.sql�����������������������������0000644�0000000�0000000�00000001261�12062705475�024642� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT srid, scale_x::numeric(16, 10), scale_y::numeric(16, 10), blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values::numeric(16,10)[], out_db, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'loadedrast' AND r_raster_column = 'rast'; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 1)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 90 AND y = 90; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 3)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 45 AND y = 45; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicOutDB.select.sql����������������������������0000644�0000000�0000000�00000001354�12135570367�024711� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DELETE FROM loadedrast WHERE filename != 'testraster.tif'; SELECT srid, scale_x::numeric(16, 10), scale_y::numeric(16, 10), blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values::numeric(16,10)[], out_db, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'loadedrast' AND r_raster_column = 'rast'; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 1)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 90 AND y = 90; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 3)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 45 AND y = 45; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/testraster.tif�����������������������������������0000644�0000000�0000000�00000060046�11722777314�023704� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������II*�ô^��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ��ÿ�þ��������������Z�������Z�������Æ_���������������� �(���Ì_������ô_������`��������������������@�������`������`������`���������(��������������/home/dustymugs/Desktop/raster/test.tif�Created with GIMP����ˆC��€C��l�����H������H���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10-pre.sh��������������������������������0000755�0000000�0000000�00000000057�11722777314�023652� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cp loader/testraster.tif loader/Tiled10x10.tif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Basic-pre.pl�������������������������������������0000755�0000000�0000000�00000000062�11761467001�023125� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������link "loader/testraster.tif", "loader/Basic.tif"; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled8x8-post.sh���������������������������������0000755�0000000�0000000�00000000032�12062705535�023712� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rm -f loader/Tiled8x8.tif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicFilename-post.sh����������������������������0000755�0000000�0000000�00000000037�12123737351�024767� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rm -f loader/BasicFilename.tif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicOutDB-post.pl�������������������������������0000755�0000000�0000000�00000000101�12135570367�024222� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unlink "loader/BasicOutDB.tif"; unlink "loader/BasicOutDB.opts"; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10-post.pl�������������������������������0000755�0000000�0000000�00000000040�11761467001�024032� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unlink "loader/Tiled10x10.tif"; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicOutDB-post.sh�������������������������������0000755�0000000�0000000�00000000071�12135570367�024227� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rm -f loader/BasicOutDB.tif rm -f loader/BasicOutDB.opts �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicFilename-pre.sh�����������������������������0000755�0000000�0000000�00000000062�12123737351�024566� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cp loader/testraster.tif loader/BasicFilename.tif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10.select.expected�����������������������0000644�0000000�0000000�00000000707�12062705566�025530� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1.0000000000|-1.0000000000|10|10|t|f|3|{8BUI,8BUI,8BUI}|{NULL,NULL,NULL}|{f,f,f}|POLYGON((90 -80,90 -90,80 -90,70 -90,60 -90,50 -90,40 -90,30 -90,20 -90,10 -90,0 -90,0 -80,0 -70,0 -60,0 -50,0 -40,0 -30,0 -20,0 -10,0 0,10 0,20 0,30 0,40 0,50 0,60 0,70 0,80 0,90 0,90 -10,90 -20,90 -30,90 -40,90 -50,90 -60,90 -70,90 -80)) POLYGON((0 0,1 0,1 -1,0 -1,0 0))|255 POLYGON((0 -80,1 -80,1 -81,0 -81,0 -80))|255 POLYGON((80 -80,81 -80,81 -81,80 -81,80 -80))|255 ���������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10.select.sql����������������������������0000644�0000000�0000000�00000001257�12062705475�024526� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT srid, scale_x::numeric(16, 10), scale_y::numeric(16, 10), blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values::numeric(16,10)[], out_db, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'loadedrast' AND r_raster_column = 'rast'; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 1)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 73) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 3)).* FROM loadedrast WHERE rid = 81) foo WHERE x = 1 AND y = 1; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10.opts����������������������������������0000644�0000000�0000000�00000000014�12062705475�023424� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-t 10x10 -C ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10Copy.select.expected�������������������0000644�0000000�0000000�00000000707�12062705566�026363� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1.0000000000|-1.0000000000|10|10|t|f|3|{8BUI,8BUI,8BUI}|{NULL,NULL,NULL}|{f,f,f}|POLYGON((90 -80,90 -90,80 -90,70 -90,60 -90,50 -90,40 -90,30 -90,20 -90,10 -90,0 -90,0 -80,0 -70,0 -60,0 -50,0 -40,0 -30,0 -20,0 -10,0 0,10 0,20 0,30 0,40 0,50 0,60 0,70 0,80 0,90 0,90 -10,90 -20,90 -30,90 -40,90 -50,90 -60,90 -70,90 -80)) POLYGON((0 0,1 0,1 -1,0 -1,0 0))|255 POLYGON((0 -80,1 -80,1 -81,0 -81,0 -80))|255 POLYGON((80 -80,81 -80,81 -81,80 -81,80 -80))|255 ���������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicFilename.select.sql�������������������������0000644�0000000�0000000�00000001340�12123737351�025442� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT srid, scale_x::numeric(16, 10), scale_y::numeric(16, 10), blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values::numeric(16,10)[], out_db, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'loadedrast' AND r_raster_column = 'rast'; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 1)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 90 AND y = 90; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 3)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 45 AND y = 45; SELECT foobar FROM loadedrast ORDER BY foobar; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicFilename.select.expected��������������������0000644�0000000�0000000�00000000246�12123737351�026450� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|||||f|f||||| POLYGON((0 0,1 0,1 -1,0 -1,0 0))|255 POLYGON((89 -89,90 -89,90 -90,89 -90,89 -89))|0 POLYGON((44 -44,45 -44,45 -45,44 -45,44 -44))|0 BasicFilename.tif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Basic.select.expected����������������������������0000644�0000000�0000000�00000000375�12062705566�025017� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1.0000000000|-1.0000000000|90|90|t|f|3|{8BUI,8BUI,8BUI}|{NULL,NULL,NULL}|{f,f,f}|POLYGON((0 0,90 0,90 -90,0 -90,0 0)) POLYGON((0 0,1 0,1 -1,0 -1,0 0))|255 POLYGON((89 -89,90 -89,90 -90,89 -90,89 -89))|0 POLYGON((44 -44,45 -44,45 -45,44 -45,44 -44))|0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled8x8.select.expected�������������������������0000644�0000000�0000000�00000000406�12062705723�025375� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0|1.0000000000|-1.0000000000|8|8|t|f|3|{8BUI,8BUI,8BUI}|{NULL,NULL,NULL}|{f,f,f}|t POLYGON((88 0,89 0,89 -1,88 -1,88 0))|255 POLYGON((88 0,89 0,89 -1,88 -1,88 0))|255 POLYGON((0 -88,1 -88,1 -89,0 -89,0 -88))|255 POLYGON((88 -88,89 -88,89 -89,88 -89,88 -88))|255 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Basic.select.sql���������������������������������0000644�0000000�0000000�00000001261�12062705475�024007� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SELECT srid, scale_x::numeric(16, 10), scale_y::numeric(16, 10), blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values::numeric(16,10)[], out_db, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'loadedrast' AND r_raster_column = 'rast'; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 1)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 1 AND y = 1; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 2)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 90 AND y = 90; SELECT ST_AsEWKT(geom), val FROM (SELECT (ST_PixelAsPolygons(rast, 3)).* FROM loadedrast WHERE rid = 1) foo WHERE x = 45 AND y = 45; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/BasicCopy-pre.sh���������������������������������0000755�0000000�0000000�00000000056�11722777314�023772� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cp loader/testraster.tif loader/BasicCopy.tif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/loader/Tiled10x10Copy.opts������������������������������0000644�0000000�0000000�00000000017�12062705475�024262� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-t 10x10 -Y -C �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_dumpvalues_expected����������������������������������0000644�0000000�0000000�00000003033�12223163471�024207� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1|1|{{1,2,3},{4,5,6},{7,8,9}} 2|1|{{-1,NULL,1},{2,3,4},{5,6,7}} 3|1|{{1,2,3},{4,5,6},{7,8,9}} 4|1|{{-2,-1,NULL},{1,2,3},{4,5,6}} 5|1|{{2,3,4},{5,6,7},{8,9,10}} 11|1|{{1,2,3},{4,5,6},{7,8,9}} 11|2|{{0,NULL,2},{3,4,5},{6,7,8}} 12|1|{{-1,NULL,1},{2,3,4},{5,6,7}} 12|2|{{1,NULL,3},{4,5,6},{7,8,9}} 13|1|{{1,2,3},{4,5,6},{7,8,9}} 13|2|{{1,2,NULL},{4,5,6},{7,8,9}} 14|1|{{-2,-1,NULL},{1,2,3},{4,5,6}} 14|2|{{2,3,NULL},{5,6,7},{8,9,10}} 15|1|{{2,3,4},{5,6,7},{8,9,10}} 15|2|{{2,3,4},{NULL,6,7},{8,9,10}} 21|1|{{1,2,3},{4,5,6},{7,8,9}} 21|2|{{0,NULL,2},{3,4,5},{6,7,8}} 21|3|{{5,6,7},{8,9,10},{NULL,12,13}} 22|1|{{-1,NULL,1},{2,3,4},{5,6,7}} 22|2|{{1,NULL,3},{4,5,6},{7,8,9}} 22|3|{{6,7,8},{9,10,11},{NULL,13,14}} 23|1|{{1,2,3},{4,5,6},{7,8,9}} 23|2|{{1,2,NULL},{4,5,6},{7,8,9}} 23|3|{{6,7,8},{9,10,11},{12,NULL,14}} 24|1|{{-2,-1,NULL},{1,2,3},{4,5,6}} 24|2|{{2,3,NULL},{5,6,7},{8,9,10}} 24|3|{{7,8,9},{10,11,12},{13,NULL,15}} 25|1|{{2,3,4},{5,6,7},{8,9,10}} 25|2|{{2,3,4},{NULL,6,7},{8,9,10}} 25|3|{{7,8,9},{10,11,12},{13,14,NULL}} 21|3|{{5,6,7},{8,9,10},{NULL,12,13}} 21|2|{{0,NULL,2},{3,4,5},{6,7,8}} 21|1|{{1,2,3},{4,5,6},{7,8,9}} 22|3|{{6,7,8},{9,10,11},{NULL,13,14}} 22|2|{{1,NULL,3},{4,5,6},{7,8,9}} 22|1|{{-1,NULL,1},{2,3,4},{5,6,7}} 23|3|{{6,7,8},{9,10,11},{12,NULL,14}} 23|2|{{1,2,NULL},{4,5,6},{7,8,9}} 23|1|{{1,2,3},{4,5,6},{7,8,9}} 24|3|{{7,8,9},{10,11,12},{13,NULL,15}} 24|2|{{2,3,NULL},{5,6,7},{8,9,10}} 24|1|{{-2,-1,NULL},{1,2,3},{4,5,6}} 25|3|{{7,8,9},{10,11,12},{13,14,NULL}} 25|2|{{2,3,4},{NULL,6,7},{8,9,10}} 25|1|{{2,3,4},{5,6,7},{8,9,10}} 1|{} 2|{} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/load_outdb-post.sh��������������������������������������0000755�0000000�0000000�00000000306�12147721424�023152� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" rm -f "$DIR/$TEST-pre.sql" #rm -f "$DIR/$TEST-post.sql" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/load_outdb-pre.pl���������������������������������������0000755�0000000�0000000�00000002572�12147721424�022763� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������use File::Basename; use Cwd 'abs_path'; my $REGDIR = abs_path(dirname($0)); my $RASTERDIR = abs_path($REGDIR . "/../raster/test/regress"); my $FILERASTER = $RASTERDIR . "/loader/testraster.tif"; # special handling for msys if (lc($^O) eq "msys") { $FILERASTER = `cmd //c echo "$FILERASTER"`; $FILERASTER =~ s/^\s+//; $FILERASTER =~ s/\s+$//; } my $sql = <<"END"; DROP TABLE IF EXISTS raster_outdb_template; CREATE TABLE raster_outdb_template AS SELECT 1 AS rid, ST_AddBand( ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), 1, '$FILERASTER'::text, NULL::int[] ) AS rast UNION ALL SELECT 2 AS rid, ST_AddBand( ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), '$FILERASTER'::text, NULL::int[] ) AS rast UNION ALL SELECT 3 AS rid, ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), '$FILERASTER'::text, ARRAY[2]::int[] ) AS rast UNION ALL SELECT 4 AS rid, ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(90, 90, 0., 0., 1, -1, 0, 0, 0), 1, '8BUI', 1, 0 ), '$FILERASTER'::text, ARRAY[2]::int[], 1, 255 ) AS rast END open(PRESQL, '>', $RASTERDIR . '/' . $TEST . '-pre.sql'); print PRESQL $sql; close(PRESQL); # no longer needed as the "clean" test takes care of it #open(POSTSQL, '>', $RASTERDIR . '/' . $TEST . '-post.sql'); #print POSTSQL "DROP TABLE IF EXISTS raster_outdb_template;\n"; #close(POSTSQL); ��������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_iscoveragetile.sql�����������������������������������0000644�0000000�0000000�00000013044�12062705672�023755� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP TABLE IF EXISTS raster_iscoveragetile; CREATE TABLE raster_iscoveragetile AS WITH foo AS ( SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast ) SELECT ST_Union(rast) AS rast FROM foo; WITH foo AS ( SELECT ST_Tile(rast, 3, 3, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 1, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[1], 3, 3, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 2, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[2, 1], 3, 3, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 3, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 3, 3, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 4, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 2, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 5, ST_IsCoverageTile(foo.rast, ict.rast, 2, 2) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 1, 1, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 6, ST_IsCoverageTile(foo.rast, ict.rast, 1, 1) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 5, 5, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 7, ST_IsCoverageTile(foo.rast, ict.rast, 5, 5) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 3, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 8, ST_IsCoverageTile(foo.rast, ict.rast, 2, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 3, 2, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 9, ST_IsCoverageTile(foo.rast, ict.rast, 3, 2) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 3, 3) AS rast FROM raster_iscoveragetile ) SELECT 11, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[1], 3, 3) AS rast FROM raster_iscoveragetile ) SELECT 12, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, ARRAY[2, 1], 3, 3) AS rast FROM raster_iscoveragetile ) SELECT 13, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 3, 3) AS rast FROM raster_iscoveragetile ) SELECT 14, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 2) AS rast FROM raster_iscoveragetile ) SELECT 15, ST_IsCoverageTile(foo.rast, ict.rast, 2, 2) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 1, 1) AS rast FROM raster_iscoveragetile ) SELECT 16, ST_IsCoverageTile(foo.rast, ict.rast, 1, 1) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 5, 5) AS rast FROM raster_iscoveragetile ) SELECT 17, ST_IsCoverageTile(foo.rast, ict.rast, 5, 5) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 3) AS rast FROM raster_iscoveragetile ) SELECT 18, ST_IsCoverageTile(foo.rast, ict.rast, 2, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 3, 2) AS rast FROM raster_iscoveragetile ) SELECT 19, ST_IsCoverageTile(foo.rast, ict.rast, 3, 2) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 4, 4) AS rast FROM raster_iscoveragetile ) SELECT 20, ST_IsCoverageTile(foo.rast, ict.rast, 2, 2) FROM foo CROSS JOIN raster_iscoveragetile ict; -- try a skewed coverage DELETE FROM raster_iscoveragetile; INSERT INTO raster_iscoveragetile SELECT ST_MakeEmptyRaster(9, 9, 0, 0, 1, -1, -0.1, -0.1, 0); WITH foo AS ( SELECT ST_Tile(rast, 3, 3) AS rast FROM raster_iscoveragetile ) SELECT 51, ST_IsCoverageTile(foo.rast, ict.rast, 3, 3) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 2, TRUE) AS rast FROM raster_iscoveragetile ) SELECT 52, ST_IsCoverageTile(foo.rast, ict.rast, 2, 2) FROM foo CROSS JOIN raster_iscoveragetile ict; WITH foo AS ( SELECT ST_Tile(rast, 2, 2) AS rast FROM raster_iscoveragetile ) SELECT 53, ST_IsCoverageTile(foo.rast, ict.rast, 2, 2) FROM foo CROSS JOIN raster_iscoveragetile ict; DROP TABLE IF EXISTS raster_iscoveragetile; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_pixelsize_expected�����������������������������������0000644�0000000�0000000�00000000000�11722777314�024037� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/regress/rt_valuecount_expected����������������������������������0000644�0000000�0000000�00000001112�11774707474�024224� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-10.000|1 3.142|1 -10.000|1 0.000|98 3.142|1 -10.000|1 3.142|1 -10.000|1 0.000|98 3.142|1 -10.000|1 3.100|1 3.100|1 -10.000|1 -10.000|1 -10.000|1 3.000|0 1 1 1 1 1 1 NOTICE: Invalid band index (must use 1-based). Returning NULL BEGIN -10.000|10 0.000|980 3.142|10 -10.000|10 1.000|0 -10.000|10 3.100|10 -1.000|0 3.100|10 10 0 10 0 SAVEPOINT NOTICE: Invalid band index (must use 1-based). Returning NULL COMMIT RELEASE SAVEPOINT ERROR: relation "test1" does not exist at character 20 COMMIT RELEASE SAVEPOINT ERROR: column "rast1" does not exist at character 8 COMMIT RELEASE COMMIT ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/����������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�017164� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_raster_basics.c����������������������������������������0000644�0000000�0000000�00000013367�12233537203�022652� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_raster_new() { rt_raster raster = NULL; raster = rt_raster_new(0, 0); CU_ASSERT(raster != NULL); cu_free_raster(raster); raster = rt_raster_new(1, 1); CU_ASSERT(raster != NULL); cu_free_raster(raster); raster = rt_raster_new(10, 10); CU_ASSERT(raster != NULL); cu_free_raster(raster); } static void test_raster_empty() { rt_raster raster = NULL; /* check that raster is empty */ raster = rt_raster_new(0, 0); CU_ASSERT(raster != NULL); CU_ASSERT(rt_raster_is_empty(raster)); cu_free_raster(raster); /* create raster */ raster = rt_raster_new(1, 1); CU_ASSERT(raster != NULL); /* check that raster is not empty */ CU_ASSERT(!rt_raster_is_empty(raster)); cu_free_raster(raster); } static void test_raster_metadata() { rt_raster raster = NULL; /* create raster */ raster = rt_raster_new(5, 5); CU_ASSERT(raster != NULL); /* # of bands */ CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 0); /* has bands */ CU_ASSERT(!rt_raster_has_band(raster, 1)); /* upper-left corner */ rt_raster_set_offsets(raster, 30, -70); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 30, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), -70, DBL_EPSILON); /* scale */ rt_raster_set_scale(raster, 10, -10); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 10, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), -10, DBL_EPSILON); /* skew */ rt_raster_set_skews(raster, 0.0001, -0.05); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 0.0001, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), -0.05, DBL_EPSILON); /* srid */ rt_raster_set_srid(raster, 4326); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 4326); rt_raster_set_srid(raster, 4269); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 4269); cu_free_raster(raster); } static void test_raster_clone() { rt_raster rast1; rt_raster rast2; rt_band band; int maxX = 5; int maxY = 5; double gt[6]; rast1 = rt_raster_new(maxX, maxY); CU_ASSERT(rast1 != NULL); rt_raster_set_offsets(rast1, 0, 0); rt_raster_set_scale(rast1, 1, -1); rt_raster_set_srid(rast1, 4326); band = cu_add_band(rast1, PT_32BUI, 1, 6); CU_ASSERT(band != NULL); /* clone without bands */ rast2 = rt_raster_clone(rast1, 0); CU_ASSERT(rast2 != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rast2), 0); rt_raster_get_geotransform_matrix(rast2, gt); CU_ASSERT_EQUAL(rt_raster_get_srid(rast2), 4326); CU_ASSERT_DOUBLE_EQUAL(gt[0], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(gt[1], 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(gt[2], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(gt[3], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(gt[4], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(gt[5], -1, DBL_EPSILON); cu_free_raster(rast2); /* clone with bands */ rast2 = rt_raster_clone(rast1, 1); CU_ASSERT(rast2 != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rast2), 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_from_band() { uint32_t bandNums[] = {1,3}; int lenBandNums = 2; rt_raster raster; rt_raster rast; rt_band band; uint32_t xmax = 100; uint32_t ymax = 100; uint32_t x; raster = rt_raster_new(xmax, ymax); CU_ASSERT(raster != NULL); for (x = 0; x < 5; x++) { band = cu_add_band(raster, PT_32BUI, 0, 0); CU_ASSERT(band != NULL); rt_band_set_nodata(band, 0, NULL); } rast = rt_raster_from_band(raster, bandNums, lenBandNums); CU_ASSERT(rast != NULL); CU_ASSERT(!rt_raster_is_empty(rast)); CU_ASSERT(rt_raster_has_band(rast, 1)); cu_free_raster(rast); cu_free_raster(raster); } static void test_raster_replace_band() { rt_raster raster; rt_band band; rt_band rband; void* mem; size_t datasize; uint16_t width; uint16_t height; double nodata; raster = rt_raster_new(10, 10); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, PT_8BUI, 0, 0); CU_ASSERT(band != NULL); band = cu_add_band(raster, PT_8BUI, 1, 255); CU_ASSERT(band != NULL); width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); datasize = rt_pixtype_size(PT_8BUI) * width * height; mem = rtalloc(datasize); band = rt_band_new_inline(width, height, PT_8BUI, 1, 1, mem); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); rband = rt_raster_replace_band(raster, band, 0); CU_ASSERT(rband != NULL); rt_band_get_nodata(rt_raster_get_band(raster, 0), &nodata); CU_ASSERT_DOUBLE_EQUAL(nodata, 1, DBL_EPSILON); rt_band_destroy(rband); cu_free_raster(raster); } /* register tests */ CU_TestInfo raster_basics_tests[] = { PG_TEST(test_raster_new), PG_TEST(test_raster_empty), PG_TEST(test_raster_metadata), PG_TEST(test_raster_clone), PG_TEST(test_raster_from_band), PG_TEST(test_raster_replace_band), CU_TEST_INFO_NULL }; CU_SuiteInfo raster_basics_suite = {"raster_basics", NULL, NULL, raster_basics_tests}; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_band_misc.c��������������������������������������������0000644�0000000�0000000�00000015772�12233537203�021747� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_band_get_nearest_pixel() { rt_raster rast; rt_band band; uint32_t x, y; int rtn; const int maxX = 10; const int maxY = 10; rt_pixel npixels = NULL; double **value; int **nodata; int dimx; int dimy; rast = rt_raster_new(maxX, maxY); CU_ASSERT(rast != NULL); band = cu_add_band(rast, PT_32BUI, 1, 0); CU_ASSERT(band != NULL); for (x = 0; x < maxX; x++) { for (y = 0; y < maxY; y++) { rtn = rt_band_set_pixel(band, x, y, 1, NULL); } } rt_band_set_pixel(band, 0, 0, 0, NULL); rt_band_set_pixel(band, 3, 0, 0, NULL); rt_band_set_pixel(band, 6, 0, 0, NULL); rt_band_set_pixel(band, 9, 0, 0, NULL); rt_band_set_pixel(band, 1, 2, 0, NULL); rt_band_set_pixel(band, 4, 2, 0, NULL); rt_band_set_pixel(band, 7, 2, 0, NULL); rt_band_set_pixel(band, 2, 4, 0, NULL); rt_band_set_pixel(band, 5, 4, 0, NULL); rt_band_set_pixel(band, 8, 4, 0, NULL); rt_band_set_pixel(band, 0, 6, 0, NULL); rt_band_set_pixel(band, 3, 6, 0, NULL); rt_band_set_pixel(band, 6, 6, 0, NULL); rt_band_set_pixel(band, 9, 6, 0, NULL); rt_band_set_pixel(band, 1, 8, 0, NULL); rt_band_set_pixel(band, 4, 8, 0, NULL); rt_band_set_pixel(band, 7, 8, 0, NULL); /* 0,0 */ rtn = rt_band_get_nearest_pixel( band, 0, 0, 0, 0, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 3); if (rtn) rtdealloc(npixels); /* 1,1 */ rtn = rt_band_get_nearest_pixel( band, 1, 1, 0, 0, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 6); if (rtn) rtdealloc(npixels); /* 4,4 */ rtn = rt_band_get_nearest_pixel( band, 4, 4, 0, 0, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 7); if (rtn) rtdealloc(npixels); /* 4,4 distance 2 */ rtn = rt_band_get_nearest_pixel( band, 4, 4, 2, 2, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 19); if (rtn) rtdealloc(npixels); /* 10,10 */ rtn = rt_band_get_nearest_pixel( band, 10, 10, 0, 0, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 1); if (rtn) rtdealloc(npixels); /* 11,11 distance 1 */ rtn = rt_band_get_nearest_pixel( band, 11, 11, 1, 1, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 0); if (rtn) rtdealloc(npixels); /* -1,-1 */ rtn = rt_band_get_nearest_pixel( band, -1, -1, 0, 0, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 3); if (rtn) rtdealloc(npixels); /* -1,-1 distance 1 */ rtn = rt_band_get_nearest_pixel( band, -1, -1, 1, 1, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 0); if (rtn) rtdealloc(npixels); /* -1,1 distance 1 */ rtn = rt_band_get_nearest_pixel( band, -1, 1, 1, 1, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 2); rtn = rt_pixel_set_to_array( npixels, rtn, -1, 1, 1, 1, &value, &nodata, &dimx, &dimy ); rtdealloc(npixels); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(dimx, 3); CU_ASSERT_EQUAL(dimy, 3); for (x = 0; x < dimx; x++) { rtdealloc(nodata[x]); rtdealloc(value[x]); } rtdealloc(nodata); rtdealloc(value); /* -2,2 distance 1 */ rtn = rt_band_get_nearest_pixel( band, -2, 2, 1, 1, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 0); if (rtn) rtdealloc(npixels); /* -10,2 distance 3 */ rtn = rt_band_get_nearest_pixel( band, -10, 2, 3, 3, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 0); if (rtn) rtdealloc(npixels); /* -10,2 distance 3 include NODATA */ rtn = rt_band_get_nearest_pixel( band, -10, 2, 3, 3, 0, &npixels ); CU_ASSERT_EQUAL(rtn, 48); if (rtn) rtdealloc(npixels); /* 4,4 distance 3,2 */ rtn = rt_band_get_nearest_pixel( band, 4, 4, 3, 2, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 27); if (rtn) rtdealloc(npixels); /* 2,7 distance 3,1 */ rtn = rt_band_get_nearest_pixel( band, 2, 7, 3, 1, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 13); if (rtn) rtdealloc(npixels); /* 10,10 distance 1,3 */ rtn = rt_band_get_nearest_pixel( band, 10,10, 1, 3, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 3); if (rtn) rtdealloc(npixels); /* band with no NODATA */ band = cu_add_band(rast, PT_32BUI, 0, 0); CU_ASSERT(band != NULL); /* 0,0 */ rtn = rt_band_get_nearest_pixel( band, 0, 0, 0, 0, 1, &npixels ); CU_ASSERT_EQUAL(rtn, 8); if (rtn) rtdealloc(npixels); cu_free_raster(rast); } static void test_band_get_pixel_of_value() { rt_raster rast; rt_band band; uint32_t x, y; int rtn; const int maxX = 10; const int maxY = 10; rt_pixel pixels = NULL; double search0[1] = {0}; double search1[1] = {1}; double search2[2] = {3, 5}; rast = rt_raster_new(maxX, maxY); CU_ASSERT(rast != NULL); band = cu_add_band(rast, PT_32BUI, 1, 0); CU_ASSERT(band != NULL); for (x = 0; x < maxX; x++) { for (y = 0; y < maxY; y++) { rtn = rt_band_set_pixel(band, x, y, 1, NULL); } } rt_band_set_pixel(band, 0, 0, 0, NULL); rt_band_set_pixel(band, 3, 0, 0, NULL); rt_band_set_pixel(band, 6, 0, 0, NULL); rt_band_set_pixel(band, 9, 0, 0, NULL); rt_band_set_pixel(band, 1, 2, 0, NULL); rt_band_set_pixel(band, 4, 2, 0, NULL); rt_band_set_pixel(band, 7, 2, 0, NULL); rt_band_set_pixel(band, 2, 4, 0, NULL); rt_band_set_pixel(band, 5, 4, 0, NULL); rt_band_set_pixel(band, 8, 4, 0, NULL); rt_band_set_pixel(band, 0, 6, 0, NULL); rt_band_set_pixel(band, 3, 6, 0, NULL); rt_band_set_pixel(band, 6, 6, 0, NULL); rt_band_set_pixel(band, 9, 6, 0, NULL); rt_band_set_pixel(band, 1, 8, 0, NULL); rt_band_set_pixel(band, 4, 8, 0, NULL); rt_band_set_pixel(band, 7, 8, 0, NULL); pixels = NULL; rtn = rt_band_get_pixel_of_value( band, TRUE, search1, 1, &pixels ); CU_ASSERT_EQUAL(rtn, 83); if (rtn) rtdealloc(pixels); pixels = NULL; rtn = rt_band_get_pixel_of_value( band, FALSE, search0, 1, &pixels ); CU_ASSERT_EQUAL(rtn, 17); if (rtn) rtdealloc(pixels); rt_band_set_pixel(band, 4, 2, 3, NULL); rt_band_set_pixel(band, 7, 2, 5, NULL); rt_band_set_pixel(band, 1, 8, 3, NULL); pixels = NULL; rtn = rt_band_get_pixel_of_value( band, TRUE, search2, 2, &pixels ); CU_ASSERT_EQUAL(rtn, 3); if (rtn) rtdealloc(pixels); cu_free_raster(rast); } /* register tests */ CU_TestInfo band_misc_tests[] = { PG_TEST(test_band_get_nearest_pixel), PG_TEST(test_band_get_pixel_of_value), CU_TEST_INFO_NULL }; CU_SuiteInfo band_misc_suite = {"band_misc", NULL, NULL, band_misc_tests}; ������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_raster_misc.c������������������������������������������0000644�0000000�0000000�00000013620�12233537203�022331� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_raster_cell_to_geopoint() { rt_raster raster; int rtn; double xw, yw; double gt[6] = {-128.604911499087763, 0.002424431085498, 0, 53.626968388905752, 0, -0.002424431085498}; raster = rt_raster_new(1, 1); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ rt_raster_set_srid(raster, 4326); rt_raster_set_geotransform_matrix(raster, gt); rtn = rt_raster_cell_to_geopoint(raster, 0, 0, &xw, &yw, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(xw, gt[0], DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(yw, gt[3], DBL_EPSILON); cu_free_raster(raster); } static void test_raster_geopoint_to_cell() { rt_raster raster; int rtn; double xr, yr; double gt[6] = {-128.604911499087763, 0.002424431085498, 0, 53.626968388905752, 0, -0.002424431085498}; raster = rt_raster_new(1, 1); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ rt_raster_set_srid(raster, 4326); rt_raster_set_geotransform_matrix(raster, gt); rtn = rt_raster_geopoint_to_cell(raster, gt[0], gt[3], &xr, &yr, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(xr, 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(yr, 0, DBL_EPSILON); cu_free_raster(raster); } static void test_raster_from_two_rasters() { rt_raster rast1; rt_raster rast2; rt_raster rast = NULL; int err; double offset[4] = {0.}; rast1 = rt_raster_new(4, 4); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -2, -2); rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); err = rt_raster_from_two_rasters( rast1, rast2, ET_FIRST, &rast, offset ); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_width(rast), 4); CU_ASSERT_EQUAL(rt_raster_get_height(rast), 4); CU_ASSERT_DOUBLE_EQUAL(offset[0], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[1], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[2], 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[3], 2, DBL_EPSILON); cu_free_raster(rast); err = rt_raster_from_two_rasters( rast1, rast2, ET_SECOND, &rast, offset ); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_width(rast), 2); CU_ASSERT_EQUAL(rt_raster_get_height(rast), 2); CU_ASSERT_DOUBLE_EQUAL(offset[0], -2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[1], -2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[2], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[3], 0, DBL_EPSILON); cu_free_raster(rast); err = rt_raster_from_two_rasters( rast1, rast2, ET_INTERSECTION, &rast, offset ); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_width(rast), 2); CU_ASSERT_EQUAL(rt_raster_get_height(rast), 2); CU_ASSERT_DOUBLE_EQUAL(offset[0], -2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[1], -2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[2], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[3], 0, DBL_EPSILON); cu_free_raster(rast); err = rt_raster_from_two_rasters( rast1, rast2, ET_UNION, &rast, offset ); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_width(rast), 4); CU_ASSERT_EQUAL(rt_raster_get_height(rast), 4); CU_ASSERT_DOUBLE_EQUAL(offset[0], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[1], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[2], 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(offset[3], 2, DBL_EPSILON); cu_free_raster(rast); rt_raster_set_scale(rast2, 1, 0.1); err = rt_raster_from_two_rasters( rast1, rast2, ET_UNION, &rast, offset ); CU_ASSERT_NOT_EQUAL(err, ES_NONE); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_srid(rast2, 9999); err = rt_raster_from_two_rasters( rast1, rast2, ET_UNION, &rast, offset ); CU_ASSERT_NOT_EQUAL(err, ES_NONE); rt_raster_set_srid(rast2, 0); rt_raster_set_skews(rast2, -1, 1); err = rt_raster_from_two_rasters( rast1, rast2, ET_UNION, &rast, offset ); CU_ASSERT_NOT_EQUAL(err, ES_NONE); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_compute_skewed_raster() { rt_envelope extent; rt_raster rast; double skew[2] = {0.25, 0.25}; double scale[2] = {1, -1}; extent.MinX = 0; extent.MaxY = 0; extent.MaxX = 2; extent.MinY = -2; extent.UpperLeftX = extent.MinX; extent.UpperLeftY = extent.MaxY; rast = rt_raster_compute_skewed_raster( extent, skew, scale, 0 ); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_width(rast), 2); CU_ASSERT_EQUAL(rt_raster_get_height(rast), 3); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rast), -0.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rast), 0, DBL_EPSILON); cu_free_raster(rast); } /* register tests */ CU_TestInfo raster_misc_tests[] = { PG_TEST(test_raster_cell_to_geopoint), PG_TEST(test_raster_geopoint_to_cell), PG_TEST(test_raster_from_two_rasters), PG_TEST(test_raster_compute_skewed_raster), CU_TEST_INFO_NULL }; CU_SuiteInfo raster_misc_suite = {"raster_misc", NULL, NULL, raster_misc_tests}; ����������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_spatial_relationship.c���������������������������������0000644�0000000�0000000�00000275420�12233537203�024244� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_raster_geos_overlaps() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_overlaps( rast1, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); rtn = rt_raster_overlaps( rast1, -1, rast2, -1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_overlaps( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_geos_touches() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_touches( rast1, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_touches( rast1, -1, rast2, -1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 3) */ rt_raster_set_offsets(rast2, 0, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-1, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 3) */ rt_raster_set_offsets(rast2, -1, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_touches( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_geos_contains() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_contains( rast1, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_contains( rast1, -1, rast2, -1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 3) */ rt_raster_set_offsets(rast2, 0, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-1, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 3) */ rt_raster_set_offsets(rast2, -1, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_contains( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_geos_contains_properly() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_contains_properly( rast1, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_contains_properly( rast1, -1, rast2, -1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 3) */ rt_raster_set_offsets(rast2, 0, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-1, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 3) */ rt_raster_set_offsets(rast2, -1, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_contains_properly( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_geos_covers() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_covers( rast1, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_covers( rast1, -1, rast2, -1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 3) */ rt_raster_set_offsets(rast2, 0, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-1, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 3) */ rt_raster_set_offsets(rast2, -1, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_covers( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_geos_covered_by() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_coveredby( rast1, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_coveredby( rast2, -1, rast1, -1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 3) */ rt_raster_set_offsets(rast2, 0, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-1, 1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 3) */ rt_raster_set_offsets(rast2, -1, 1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_coveredby( rast2, 0, rast1, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_within_distance() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_within_distance( rast1, 0, rast1, 0, 0., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); rtn = rt_raster_within_distance( rast1, 0, rast1, 0, -1., &result ); CU_ASSERT_NOT_EQUAL(rtn, ES_NONE); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 1., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); rtn = rt_raster_within_distance( rast1, -1, rast2, -1, 2., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 1.1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-10, -1) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (-7, 2) */ rt_raster_set_offsets(rast2, -10, -1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 5, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 6, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_fully_within_distance() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_fully_within_distance( rast1, 0, rast1, 0, 0., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_fully_within_distance( rast1, 0, rast1, 0, -1., &result ); CU_ASSERT_NOT_EQUAL(rtn, ES_NONE); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 0., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 1., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_fully_within_distance( rast1, -1, rast2, -1, 5., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 2., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 5., &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 5, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 10, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 5.9, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 3, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 2, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 6, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 4.25, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 3.5, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 3.65, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 3.6, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (-10, -1) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (-7, 2) */ rt_raster_set_offsets(rast2, -10, -1); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 5, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 11.5, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 6.1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 7.1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_fully_within_distance( rast1, 0, rast2, 0, 8, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_intersects() { rt_raster rast1; rt_raster rast2; rt_band band1; rt_band band2; double nodata; int rtn; int result; /* rast1 (-1, -1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (1, 1) */ rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rt_raster_set_offsets(rast1, -1, -1); band1 = cu_add_band(rast1, PT_8BUI, 1, 0); CU_ASSERT(band1 != NULL); rt_band_set_nodata(band1, 0, NULL); rtn = rt_band_set_pixel(band1, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band1, 1, 1, 1, NULL); rt_band_get_nodata(band1, &nodata); CU_ASSERT_EQUAL(nodata, 0); /* rast2 (0, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (2, 2) */ rast2 = rt_raster_new(2, 2); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); rtn = rt_raster_intersects( rast1, -1, rast2, -1, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|1| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |1|0| +-+-+ |1|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|1| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (0, 0) +-+-+ |0|0| +-+-+ |0|0| +-+-+ (2, 2) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (2, 0) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (4, 2) */ rt_raster_set_offsets(rast2, 2, 0); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(result, 1); /* rast2 (0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, 0.1, 0.1); rt_raster_set_scale(rast2, 0.4, 0.4); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-0.1, 0.1) +-+-+ |1|1| +-+-+ |1|1| +-+-+ (0.9, 0.9) */ rt_raster_set_offsets(rast2, -0.1, 0.1); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* rast2 (0, 0) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (3, 3) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rt_band_get_nodata(band2, &nodata); CU_ASSERT_EQUAL(nodata, 0); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ |1|1|1| +-+-+-+ (1, 1) */ rt_raster_set_offsets(rast2, -2, -2); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 1, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|1| +-+-+-+ |1|1|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|1| +-+-+-+ |1|0|0| +-+-+-+ |1|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (-2, -2) +-+-+-+ |0|1|0| +-+-+-+ |1|0|0| +-+-+-+ |0|0|0| +-+-+-+ (1, 1) */ rtn = rt_band_set_pixel(band2, 0, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 0, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 0, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); /* skew tests */ /* rast2 (skewed by -0.5, 0.5) */ rast2 = rt_raster_new(3, 3); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); band2 = cu_add_band(rast2, PT_8BUI, 1, 0); CU_ASSERT(band2 != NULL); rt_band_set_nodata(band2, 0, NULL); rtn = rt_band_set_pixel(band2, 0, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 0, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 0, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 1, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 1, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 1, 2, 3, NULL); rtn = rt_band_set_pixel(band2, 2, 0, 1, NULL); rtn = rt_band_set_pixel(band2, 2, 1, 2, NULL); rtn = rt_band_set_pixel(band2, 2, 2, 3, NULL); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by -1, 1) */ rt_raster_set_skews(rast2, -1, 1); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); /* rast2 (skewed by 1, -1) */ rt_raster_set_skews(rast2, 1, -1); rtn = rt_raster_intersects( rast1, 0, rast2, 0, &result ); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(result, 1); cu_free_raster(rast2); cu_free_raster(rast1); } static void test_raster_same_alignment() { rt_raster rast1; rt_raster rast2; int rtn; int aligned; char *reason; rast1 = rt_raster_new(2, 2); CU_ASSERT(rast1 != NULL); rt_raster_set_scale(rast1, 1, 1); rast2 = rt_raster_new(10, 10); CU_ASSERT(rast2 != NULL); rt_raster_set_scale(rast2, 1, 1); rtn = rt_raster_same_alignment(rast1, rast2, &aligned, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(aligned, 0); rt_raster_set_scale(rast2, 0.1, 0.1); rtn = rt_raster_same_alignment(rast1, rast2, &aligned, &reason); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(aligned, 0); CU_ASSERT_STRING_EQUAL(reason, "The rasters have different scales on the X axis"); rt_raster_set_scale(rast2, 1, 1); rt_raster_set_skews(rast2, -0.5, 0.5); rtn = rt_raster_same_alignment(rast1, rast2, &aligned, &reason); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(aligned, 0); CU_ASSERT_STRING_EQUAL(reason, "The rasters have different skews on the X axis"); rt_raster_set_skews(rast2, 0, 0); rt_raster_set_offsets(rast2, 1, 1); rtn = rt_raster_same_alignment(rast1, rast2, &aligned, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(aligned, 0); rt_raster_set_offsets(rast2, 2, 3); rtn = rt_raster_same_alignment(rast1, rast2, &aligned, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_NOT_EQUAL(aligned, 0); rt_raster_set_offsets(rast2, 0.1, 0.1); rtn = rt_raster_same_alignment(rast1, rast2, &aligned, &reason); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_EQUAL(aligned, 0); CU_ASSERT_STRING_EQUAL(reason, "The rasters (pixel corner coordinates) are not aligned"); cu_free_raster(rast2); cu_free_raster(rast1); } /* register tests */ CU_TestInfo spatial_relationship_tests[] = { PG_TEST(test_raster_geos_overlaps), PG_TEST(test_raster_geos_touches), PG_TEST(test_raster_geos_contains), PG_TEST(test_raster_geos_contains_properly), PG_TEST(test_raster_geos_covers), PG_TEST(test_raster_geos_covered_by), PG_TEST(test_raster_within_distance), PG_TEST(test_raster_fully_within_distance), PG_TEST(test_raster_intersects), PG_TEST(test_raster_same_alignment), CU_TEST_INFO_NULL }; CU_SuiteInfo spatial_relationship_suite = {"spatial_relationship", NULL, NULL, spatial_relationship_tests}; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_raster_geometry.c��������������������������������������0000644�0000000�0000000�00000031313�12233537203�023230� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012-2013 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_raster_convex_hull() { rt_raster raster = NULL; LWGEOM *hull = NULL; LWPOLY *poly = NULL; POINTARRAY *ring = NULL; POINT4D pt; /* NULL raster */ CU_ASSERT_EQUAL(rt_raster_get_convex_hull(NULL, &hull), ES_NONE); CU_ASSERT(hull == NULL); /* width = 0, height = 0 */ raster = rt_raster_new(0, 0); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_convex_hull(raster, &hull), ES_NONE); CU_ASSERT_EQUAL(hull->type, POINTTYPE); lwgeom_free(hull); cu_free_raster(raster); /* width = 0 */ raster = rt_raster_new(0, 256); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_convex_hull(raster, &hull), ES_NONE); CU_ASSERT_EQUAL(hull->type, LINETYPE); lwgeom_free(hull); cu_free_raster(raster); /* height = 0 */ raster = rt_raster_new(256, 0); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_convex_hull(raster, &hull), ES_NONE); CU_ASSERT_EQUAL(hull->type, LINETYPE); lwgeom_free(hull); cu_free_raster(raster); /* normal raster */ raster = rt_raster_new(256, 256); CU_ASSERT(raster != NULL); rt_raster_set_offsets(raster, 0.5, 0.5); rt_raster_set_scale(raster, 1, 1); rt_raster_set_skews(raster, 4, 5); CU_ASSERT_EQUAL(rt_raster_get_convex_hull(raster, &hull), ES_NONE); poly = lwgeom_as_lwpoly(hull); CU_ASSERT_EQUAL(poly->srid, rt_raster_get_srid(raster)); CU_ASSERT_EQUAL(poly->nrings, 1); ring = poly->rings[0]; CU_ASSERT(ring != NULL); CU_ASSERT_EQUAL(ring->npoints, 5); getPoint4d_p(ring, 0, &pt); CU_ASSERT_DOUBLE_EQUAL(pt.x, 0.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(pt.y, 0.5, DBL_EPSILON); getPoint4d_p(ring, 1, &pt); CU_ASSERT_DOUBLE_EQUAL(pt.x, 256.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(pt.y, 1280.5, DBL_EPSILON); getPoint4d_p(ring, 2, &pt); CU_ASSERT_DOUBLE_EQUAL(pt.x, 1280.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(pt.y, 1536.5, DBL_EPSILON); getPoint4d_p(ring, 3, &pt); CU_ASSERT_DOUBLE_EQUAL(pt.x, 1024.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(pt.y, 256.5, DBL_EPSILON); getPoint4d_p(ring, 4, &pt); CU_ASSERT_DOUBLE_EQUAL(pt.x, 0.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(pt.y, 0.5, DBL_EPSILON); lwgeom_free(hull); cu_free_raster(raster); } static char * lwgeom_to_text(const LWGEOM *lwgeom) { char *wkt; size_t wkt_size; wkt = lwgeom_to_wkt(lwgeom, WKT_ISO, DBL_DIG, &wkt_size); return wkt; } static void test_raster_surface() { rt_raster rast; rt_band band; const int maxX = 5; const int maxY = 5; int x, y; char *wkt = NULL; LWMPOLY *mpoly = NULL; int err; rast = rt_raster_new(maxX, maxY); CU_ASSERT(rast != NULL); rt_raster_set_offsets(rast, 0, 0); rt_raster_set_scale(rast, 1, -1); band = cu_add_band(rast, PT_32BUI, 1, 0); CU_ASSERT(band != NULL); for (y = 0; y < maxY; y++) { for (x = 0; x < maxX; x++) { rt_band_set_pixel(band, x, y, 1, NULL); } } err = rt_raster_surface(rast, 0, &mpoly); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(mpoly != NULL); wkt = lwgeom_to_text(lwmpoly_as_lwgeom(mpoly)); CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((0 0,0 -5,5 -5,5 0,0 0)))"); rtdealloc(wkt); lwmpoly_free(mpoly); mpoly = NULL; /* 0,0 NODATA */ rt_band_set_pixel(band, 0, 0, 0, NULL); err = rt_raster_surface(rast, 0, &mpoly); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(mpoly != NULL); wkt = lwgeom_to_text(lwmpoly_as_lwgeom(mpoly)); CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0)))"); rtdealloc(wkt); lwmpoly_free(mpoly); mpoly = NULL; /* plus 1,1 NODATA */ rt_band_set_pixel(band, 1, 1, 0, NULL); err = rt_raster_surface(rast, 0, &mpoly); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(mpoly != NULL); wkt = lwgeom_to_text(lwmpoly_as_lwgeom(mpoly)); CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0),(1 -1,1 -2,2 -2,2 -1,1 -1)))"); rtdealloc(wkt); lwmpoly_free(mpoly); mpoly = NULL; /* plus 2,2 NODATA */ rt_band_set_pixel(band, 2, 2, 0, NULL); err = rt_raster_surface(rast, 0, &mpoly); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(mpoly != NULL); wkt = lwgeom_to_text(lwmpoly_as_lwgeom(mpoly)); #if POSTGIS_GEOS_VERSION >= 33 CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((1 -1,1 0,5 0,5 -5,4 -5,0 -5,0 -1,1 -1),(1 -1,1 -2,2 -2,2 -1,1 -1),(2 -2,2 -3,3 -3,3 -2,2 -2)))"); #else CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0),(1 -1,1 -2,2 -2,2 -3,3 -3,3 -2,2 -2,2 -1,1 -1)))"); #endif rtdealloc(wkt); lwmpoly_free(mpoly); mpoly = NULL; /* plus 3,3 NODATA */ rt_band_set_pixel(band, 3, 3, 0, NULL); err = rt_raster_surface(rast, 0, &mpoly); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(mpoly != NULL); wkt = lwgeom_to_text(lwmpoly_as_lwgeom(mpoly)); #if POSTGIS_GEOS_VERSION >= 33 CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((1 -1,1 0,5 0,5 -5,4 -5,0 -5,0 -1,1 -1),(1 -1,1 -2,2 -2,2 -1,1 -1),(2 -2,2 -3,3 -3,3 -2,2 -2),(3 -3,3 -4,4 -4,4 -3,3 -3)))"); #else CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((1 0,1 -1,0 -1,0 -5,4 -5,5 -5,5 0,1 0),(1 -1,1 -2,2 -2,2 -3,3 -3,3 -4,4 -4,4 -3,3 -3,3 -2,2 -2,2 -1,1 -1)))"); #endif rtdealloc(wkt); lwmpoly_free(mpoly); mpoly = NULL; /* plus 4,4 NODATA */ rt_band_set_pixel(band, 4, 4, 0, NULL); err = rt_raster_surface(rast, 0, &mpoly); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(mpoly != NULL); wkt = lwgeom_to_text(lwmpoly_as_lwgeom(mpoly)); CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((4 -4,4 -5,0 -5,0 -1,1 -1,1 -2,2 -2,2 -3,3 -3,3 -4,4 -4)),((1 -1,1 0,5 0,5 -4,4 -4,4 -3,3 -3,3 -2,2 -2,2 -1,1 -1)))"); rtdealloc(wkt); lwmpoly_free(mpoly); mpoly = NULL; /* a whole lot more NODATA */ rt_band_set_pixel(band, 4, 0, 0, NULL); rt_band_set_pixel(band, 3, 1, 0, NULL); rt_band_set_pixel(band, 1, 3, 0, NULL); rt_band_set_pixel(band, 0, 4, 0, NULL); err = rt_raster_surface(rast, 0, &mpoly); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(mpoly != NULL); wkt = lwgeom_to_text(lwmpoly_as_lwgeom(mpoly)); CU_ASSERT_STRING_EQUAL(wkt, "MULTIPOLYGON(((1 -4,2 -4,2 -3,3 -3,3 -4,4 -4,4 -5,3 -5,1 -5,1 -4)),((1 -4,0 -4,0 -1,1 -1,1 -2,2 -2,2 -3,1 -3,1 -4)),((3 -2,4 -2,4 -1,5 -1,5 -4,4 -4,4 -3,3 -3,3 -2)),((3 -2,2 -2,2 -1,1 -1,1 0,4 0,4 -1,3 -1,3 -2)))"); rtdealloc(wkt); lwmpoly_free(mpoly); mpoly = NULL; cu_free_raster(rast); } static void test_raster_perimeter() { rt_raster rast; rt_band band; const int maxX = 5; const int maxY = 5; int x, y; char *wkt = NULL; LWGEOM *geom = NULL; int err; rast = rt_raster_new(maxX, maxY); CU_ASSERT(rast != NULL); rt_raster_set_offsets(rast, 0, 0); rt_raster_set_scale(rast, 1, -1); band = cu_add_band(rast, PT_32BUI, 1, 0); CU_ASSERT(band != NULL); for (y = 0; y < maxY; y++) { for (x = 0; x < maxX; x++) { rt_band_set_pixel(band, x, y, 1, NULL); } } err = rt_raster_get_perimeter(rast, -1, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,5 0,5 -5,0 -5,0 0))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; /* row 0 is NODATA */ rt_band_set_pixel(band, 0, 0, 0, NULL); rt_band_set_pixel(band, 1, 0, 0, NULL); rt_band_set_pixel(band, 2, 0, 0, NULL); rt_band_set_pixel(band, 3, 0, 0, NULL); rt_band_set_pixel(band, 4, 0, 0, NULL); err = rt_raster_get_perimeter(rast, 0, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 -1,5 -1,5 -5,0 -5,0 -1))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; /* column 4 is NODATA */ /* pixel 4, 0 already set to NODATA */ rt_band_set_pixel(band, 4, 1, 0, NULL); rt_band_set_pixel(band, 4, 2, 0, NULL); rt_band_set_pixel(band, 4, 3, 0, NULL); rt_band_set_pixel(band, 4, 4, 0, NULL); err = rt_raster_get_perimeter(rast, 0, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 -1,4 -1,4 -5,0 -5,0 -1))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; /* row 4 is NODATA */ rt_band_set_pixel(band, 0, 4, 0, NULL); rt_band_set_pixel(band, 1, 4, 0, NULL); rt_band_set_pixel(band, 2, 4, 0, NULL); rt_band_set_pixel(band, 3, 4, 0, NULL); /* pixel 4, 4 already set to NODATA */ err = rt_raster_get_perimeter(rast, 0, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 -1,4 -1,4 -4,0 -4,0 -1))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; /* column 0 is NODATA */ /* pixel 0, 0 already set to NODATA*/ rt_band_set_pixel(band, 0, 1, 0, NULL); rt_band_set_pixel(band, 0, 2, 0, NULL); rt_band_set_pixel(band, 0, 3, 0, NULL); /* pixel 0, 4 already set to NODATA*/ err = rt_raster_get_perimeter(rast, 0, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((1 -1,4 -1,4 -4,1 -4,1 -1))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; /* columns 1 and 3 are NODATA */ /* pixel 1, 0 already set to NODATA */ rt_band_set_pixel(band, 1, 1, 0, NULL); rt_band_set_pixel(band, 1, 2, 0, NULL); rt_band_set_pixel(band, 1, 3, 0, NULL); /* pixel 1, 4 already set to NODATA */ /* pixel 3, 0 already set to NODATA */ rt_band_set_pixel(band, 3, 1, 0, NULL); rt_band_set_pixel(band, 3, 2, 0, NULL); rt_band_set_pixel(band, 3, 3, 0, NULL); /* pixel 3, 4 already set to NODATA */ err = rt_raster_get_perimeter(rast, 0, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((2 -1,3 -1,3 -4,2 -4,2 -1))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; /* more pixels are NODATA */ rt_band_set_pixel(band, 2, 1, 0, NULL); rt_band_set_pixel(band, 2, 3, 0, NULL); err = rt_raster_get_perimeter(rast, 0, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((2 -2,3 -2,3 -3,2 -3,2 -2))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; /* second band */ band = cu_add_band(rast, PT_32BUI, 1, 0); CU_ASSERT(band != NULL); for (y = 0; y < maxY; y++) { for (x = 0; x < maxX; x++) { rt_band_set_pixel(band, x, y, 1, NULL); } } err = rt_raster_get_perimeter(rast, -1, &geom); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(geom != NULL); wkt = lwgeom_to_text(geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,5 0,5 -5,0 -5,0 0))"); rtdealloc(wkt); lwgeom_free(geom); geom = NULL; cu_free_raster(rast); } static void test_raster_pixel_as_polygon() { rt_raster rast; rt_band band; uint32_t x, y; const int maxX = 10; const int maxY = 10; LWPOLY *poly = NULL; rast = rt_raster_new(maxX, maxY); CU_ASSERT(rast != NULL); band = cu_add_band(rast, PT_32BUI, 1, 0); CU_ASSERT(band != NULL); for (x = 0; x < maxX; x++) { for (y = 0; y < maxY; y++) { rt_band_set_pixel(band, x, y, 1, NULL); } } rt_band_set_pixel(band, 0, 0, 0, NULL); rt_band_set_pixel(band, 3, 0, 0, NULL); rt_band_set_pixel(band, 6, 0, 0, NULL); rt_band_set_pixel(band, 9, 0, 0, NULL); rt_band_set_pixel(band, 1, 2, 0, NULL); rt_band_set_pixel(band, 4, 2, 0, NULL); rt_band_set_pixel(band, 7, 2, 0, NULL); rt_band_set_pixel(band, 2, 4, 0, NULL); rt_band_set_pixel(band, 5, 4, 0, NULL); rt_band_set_pixel(band, 8, 4, 0, NULL); rt_band_set_pixel(band, 0, 6, 0, NULL); rt_band_set_pixel(band, 3, 6, 0, NULL); rt_band_set_pixel(band, 6, 6, 0, NULL); rt_band_set_pixel(band, 9, 6, 0, NULL); rt_band_set_pixel(band, 1, 8, 0, NULL); rt_band_set_pixel(band, 4, 8, 0, NULL); rt_band_set_pixel(band, 7, 8, 0, NULL); poly = rt_raster_pixel_as_polygon(rast, 1, 1); CU_ASSERT(poly != NULL); lwpoly_free(poly); cu_free_raster(rast); } /* register tests */ CU_TestInfo raster_geometry_tests[] = { /* TODO: rt_raster_envelope() PG_TEST(test_raster_envelope), */ PG_TEST(test_raster_convex_hull), PG_TEST(test_raster_surface), PG_TEST(test_raster_perimeter), PG_TEST(test_raster_pixel_as_polygon), CU_TEST_INFO_NULL }; CU_SuiteInfo raster_geometry_suite = {"raster_geometry", NULL, NULL, raster_geometry_tests}; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_tester.h�����������������������������������������������0000644�0000000�0000000�00000002650�12233537203�021332� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * **********************************************************************/ #include "rt_api.h" #define PG_TEST(test_func) { #test_func, test_func } #define MAX_CUNIT_MSG_LENGTH 512 /* Contains the most recent error message generated by rterror. */ char cu_error_msg[MAX_CUNIT_MSG_LENGTH+1]; /* Resets cu_error_msg back to blank. */ void cu_error_msg_reset(void); /* free raster object */ void cu_free_raster(rt_raster raster); /* helper to add bands to raster */ rt_band cu_add_band( rt_raster raster, rt_pixtype pixtype, int hasnodata, double nodataval ); ����������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_band_basics.c������������������������������������������0000644�0000000�0000000�00000105406�12233537203�022252� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_band_metadata() { rt_raster rast = NULL; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int temp = 0; double val = 0; char *path = "../regress/loader/testraster.tif"; uint8_t extband = 0; int x; int y; /* inline band */ data = rtalloc(sizeof(uint8_t) * width * height); CU_ASSERT(data != NULL); memset(data, 0, sizeof(uint8_t) * width * height); band = rt_band_new_inline( width, height, PT_8BUI, 0, 0, data ); CU_ASSERT(band != NULL); /* isoffline */ CU_ASSERT(!rt_band_is_offline(band)); /* data */ CU_ASSERT(rt_band_get_data(band) != NULL); /* ownsdata */ CU_ASSERT(!rt_band_get_ownsdata_flag(band)); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); /* dimensions */ CU_ASSERT_EQUAL(rt_band_get_width(band), width); CU_ASSERT_EQUAL(rt_band_get_height(band), height); /* pixtype */ CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_8BUI); /* hasnodata */ CU_ASSERT(!rt_band_get_hasnodata_flag(band)); rt_band_set_hasnodata_flag(band, 1); CU_ASSERT(rt_band_get_hasnodata_flag(band)); /* nodataval */ CU_ASSERT_EQUAL(rt_band_set_nodata(band, 0, &temp), ES_NONE); CU_ASSERT(!temp); CU_ASSERT_EQUAL(rt_band_get_nodata(band, &val), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); /* clamped nodataval */ CU_ASSERT_EQUAL(rt_band_set_nodata(band, -1, &temp), ES_NONE); CU_ASSERT(temp); CU_ASSERT_EQUAL(rt_band_get_nodata(band, &val), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); /* isnodata */ CU_ASSERT(!rt_band_get_isnodata_flag(band)); rt_band_check_is_nodata(band); CU_ASSERT(rt_band_get_isnodata_flag(band)); rt_band_destroy(band); band = NULL; data = NULL; rast = NULL; /* offline band */ width = 10; height = 10; band = rt_band_new_offline( width, height, PT_8BUI, 0, 0, 2, path ); CU_ASSERT(band != NULL); rast = rt_raster_new(width, height); CU_ASSERT(rast != NULL); rt_raster_set_offsets(rast, 80, 80); CU_ASSERT_NOT_EQUAL(rt_raster_add_band(rast, band, 0), -1); /* isoffline */ CU_ASSERT(rt_band_is_offline(band)); /* ext path */ CU_ASSERT_STRING_EQUAL(rt_band_get_ext_path(band), path); /* ext band number */ CU_ASSERT_EQUAL(rt_band_get_ext_band_num(band, &extband), ES_NONE); CU_ASSERT_EQUAL(extband, 2); /* band data */ CU_ASSERT_EQUAL(rt_band_load_offline_data(band), ES_NONE); CU_ASSERT(rt_band_get_data(band) != NULL); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { CU_ASSERT_EQUAL(rt_band_get_pixel(band, x, y, &val, NULL), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 255, 1.); } } /* test rt_band_check_is_nodata */ rtdealloc(band->data.offline.mem); band->data.offline.mem = NULL; CU_ASSERT_EQUAL(rt_band_check_is_nodata(band), FALSE); cu_free_raster(rast); } static void test_band_pixtype_1BB() { rt_pixtype pixtype = PT_1BB; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 2, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_nodata(band, 3, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_pixel(band, 0, 0, 2, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_pixel(band, 0, 0, 3, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); for (x = 0; x < rt_band_get_width(band); ++x) { for ( y = 0; y < rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 0, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_2BUI() { rt_pixtype pixtype = PT_2BUI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 2, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); err = rt_band_set_nodata(band, 3, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 3, DBL_EPSILON); err = rt_band_set_nodata(band, 4, &clamped); /* invalid: out of range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_nodata(band, 5, &clamped); /* invalid: out of range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_pixel(band, 0, 0, 4, &clamped); /* out of range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_pixel(band, 0, 0, 5, &clamped); /* out of range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 2, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 3, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 3, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_4BUI() { rt_pixtype pixtype = PT_4BUI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 2, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); err = rt_band_set_nodata(band, 4, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 4, DBL_EPSILON); err = rt_band_set_nodata(band, 8, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 8, DBL_EPSILON); err = rt_band_set_nodata(band, 15, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 15, DBL_EPSILON); err = rt_band_set_nodata(band, 16, &clamped); /* out of value range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_nodata(band, 17, &clamped); /* out of value range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_pixel(band, 0, 0, 35, &clamped); /* out of value range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 3, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 3, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 7, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 7, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 15, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 15, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_8BUI() { rt_pixtype pixtype = PT_8BUI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 2, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); err = rt_band_set_nodata(band, 4, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 4, DBL_EPSILON); err = rt_band_set_nodata(band, 8, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 8, DBL_EPSILON); err = rt_band_set_nodata(band, 15, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 15, DBL_EPSILON); err = rt_band_set_nodata(band, 31, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 31, DBL_EPSILON); err = rt_band_set_nodata(band, 255, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 255, DBL_EPSILON); err = rt_band_set_nodata(band, 256, &clamped); /* out of value range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); err = rt_band_set_pixel(band, 0, 0, 256, &clamped); /* out of value range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 31, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 31, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 255, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 255, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_8BSI() { rt_pixtype pixtype = PT_8BSI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 2, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); err = rt_band_set_nodata(band, 4, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 4, DBL_EPSILON); err = rt_band_set_nodata(band, 8, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 8, DBL_EPSILON); err = rt_band_set_nodata(band, 15, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 15, DBL_EPSILON); err = rt_band_set_nodata(band, 31, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 31, DBL_EPSILON); err = rt_band_set_nodata(band, -127, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, -127, DBL_EPSILON); err = rt_band_set_nodata(band, 127, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 127, DBL_EPSILON); /* out of range (-127..127) */ err = rt_band_set_nodata(band, -129, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of range (-127..127) */ err = rt_band_set_nodata(band, 129, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of range (-127..127) */ err = rt_band_set_pixel(band, 0, 0, -129, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of range (-127..127) */ err = rt_band_set_pixel(band, 0, 0, 129, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 31, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 31, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, -127, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, -127, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 127, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 127, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_16BUI() { rt_pixtype pixtype = PT_16BUI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 31, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 31, DBL_EPSILON); err = rt_band_set_nodata(band, 255, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 255, DBL_EPSILON); err = rt_band_set_nodata(band, 65535, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 65535, DBL_EPSILON); err = rt_band_set_nodata(band, 65536, &clamped); /* out of range */ CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of value range */ err = rt_band_set_pixel(band, 0, 0, 65536, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of dimensions range */ err = rt_band_set_pixel(band, rt_band_get_width(band), 0, 0, &clamped); CU_ASSERT((err != ES_NONE)); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 255, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 255, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 65535, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 65535, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_16BSI() { rt_pixtype pixtype = PT_16BSI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 31, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 31, DBL_EPSILON); err = rt_band_set_nodata(band, 255, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 255, DBL_EPSILON); err = rt_band_set_nodata(band, -32767, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, -32767, DBL_EPSILON); err = rt_band_set_nodata(band, 32767, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 32767, DBL_EPSILON); /* out of range (-32767..32767) */ err = rt_band_set_nodata(band, -32769, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of range (-32767..32767) */ err = rt_band_set_nodata(band, 32769, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of range (-32767..32767) */ err = rt_band_set_pixel(band, 0, 0, -32769, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of range (-32767..32767) */ err = rt_band_set_pixel(band, 0, 0, 32769, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of dimensions range */ err = rt_band_set_pixel(band, rt_band_get_width(band), 0, 0, NULL); CU_ASSERT((err != ES_NONE)); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 255, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 255, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, -32767, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, -32767, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 32767, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 32767, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_32BUI() { rt_pixtype pixtype = PT_32BUI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 65535, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 65535, DBL_EPSILON); err = rt_band_set_nodata(band, 4294967295UL, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 4294967295UL, DBL_EPSILON); /* out of range */ err = rt_band_set_nodata(band, 4294967296ULL, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of value range */ err = rt_band_set_pixel(band, 0, 0, 4294967296ULL, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of dimensions range */ err = rt_band_set_pixel(band, rt_band_get_width(band), 0, 4294967296ULL, NULL); CU_ASSERT((err != ES_NONE)); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 0, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 65535, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 65535, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 4294967295UL, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 4294967295UL, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_32BSI() { rt_pixtype pixtype = PT_32BSI; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 65535, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 65535, DBL_EPSILON); err = rt_band_set_nodata(band, 2147483647, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); /*printf("32BSI pix is %ld\n", (long int)val);*/ CU_ASSERT_DOUBLE_EQUAL(val, 2147483647, DBL_EPSILON); /* out of range */ err = rt_band_set_nodata(band, 2147483648UL, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of value range */ err = rt_band_set_pixel(band, 0, 0, 2147483648UL, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(clamped); /* out of dimensions range */ err = rt_band_set_pixel(band, rt_band_get_width(band), 0, 0, NULL); CU_ASSERT((err != ES_NONE)); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 0, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 65535, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 65535, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 2147483647, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 2147483647, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_32BF() { rt_pixtype pixtype = PT_32BF; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 65535.5, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 65535.5, DBL_EPSILON); err = rt_band_set_nodata(band, 0.006, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0.0060000000521540, DBL_EPSILON); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 0, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 65535.5, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 65535.5, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 0.006, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0.0060000000521540, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_pixtype_64BF() { rt_pixtype pixtype = PT_64BF; uint8_t *data = NULL; rt_band band = NULL; int width = 5; int height = 5; int err = 0; int clamped = 0; double val = 0; int x; int y; /* inline band */ data = rtalloc(rt_pixtype_size(pixtype) * width * height); CU_ASSERT(data != NULL); memset(data, 0, rt_pixtype_size(pixtype) * width * height); band = rt_band_new_inline( width, height, pixtype, 0, 0, data ); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); CU_ASSERT(rt_band_get_ownsdata_flag(band)); err = rt_band_set_nodata(band, 1, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_nodata(band, 0, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_nodata(band, 65535.56, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 65535.56, DBL_EPSILON); err = rt_band_set_nodata(band, 0.006, &clamped); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT(!clamped); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0.006, DBL_EPSILON); for (x=0; x<rt_band_get_width(band); ++x) { for (y=0; y<rt_band_get_height(band); ++y) { err = rt_band_set_pixel(band, x, y, 1, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 0, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 65535.56, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 65535.56, DBL_EPSILON); err = rt_band_set_pixel(band, x, y, 0.006, NULL); CU_ASSERT_EQUAL(err, ES_NONE); err = rt_band_get_pixel(band, x, y, &val, NULL); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0.006, DBL_EPSILON); } } rt_band_destroy(band); } static void test_band_get_pixel_line() { rt_raster rast; rt_band band; int maxX = 5; int maxY = 5; int x = 0; int y = 0; void *vals = NULL; uint16_t nvals = 0; int err = 0; rast = rt_raster_new(maxX, maxY); CU_ASSERT(rast != NULL); rt_raster_set_scale(rast, 1, -1); band = cu_add_band(rast, PT_8BSI, 0, 0); CU_ASSERT(band != NULL); for (y = 0; y < maxY; y++) { for (x = 0; x < maxX; x++) rt_band_set_pixel(band, x, y, x + (y * maxX), NULL); } err = rt_band_get_pixel_line(band, 0, 0, maxX, &vals, &nvals); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_EQUAL(nvals, maxX); CU_ASSERT_EQUAL(((int8_t *) vals)[3], 3); rtdealloc(vals); err = rt_band_get_pixel_line(band, 4, 4, maxX, &vals, &nvals); CU_ASSERT_EQUAL(err, ES_NONE); CU_ASSERT_EQUAL(nvals, 1); CU_ASSERT_EQUAL(((int8_t *) vals)[0], 24); rtdealloc(vals); err = rt_band_get_pixel_line(band, maxX, maxY, maxX, &vals, &nvals); CU_ASSERT_NOT_EQUAL(err, ES_NONE); cu_free_raster(rast); } /* register tests */ CU_TestInfo band_basics_tests[] = { PG_TEST(test_band_metadata), PG_TEST(test_band_pixtype_1BB), PG_TEST(test_band_pixtype_2BUI), PG_TEST(test_band_pixtype_4BUI), PG_TEST(test_band_pixtype_8BUI), PG_TEST(test_band_pixtype_8BSI), PG_TEST(test_band_pixtype_16BUI), PG_TEST(test_band_pixtype_16BSI), PG_TEST(test_band_pixtype_32BUI), PG_TEST(test_band_pixtype_32BSI), PG_TEST(test_band_pixtype_32BF), PG_TEST(test_band_pixtype_64BF), PG_TEST(test_band_get_pixel_line), CU_TEST_INFO_NULL }; CU_SuiteInfo band_basics_suite = {"band_basics", NULL, NULL, band_basics_tests}; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_tester.c�����������������������������������������������0000644�0000000�0000000�00000020204�12233537203�021320� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id$ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey <pramsey@cleverelephant.ca> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * **********************************************************************/ #include <stdio.h> #include <string.h> #include "CUnit/Basic.h" #include "cu_tester.h" /* Internal funcs */ static void cu_error_reporter(const char *fmt, va_list ap); /* ADD YOUR SUITE HERE (1 of 2) */ extern CU_SuiteInfo pixtype_suite; extern CU_SuiteInfo raster_basics_suite; extern CU_SuiteInfo band_basics_suite; extern CU_SuiteInfo raster_wkb_suite; extern CU_SuiteInfo gdal_suite; extern CU_SuiteInfo raster_geometry_suite; extern CU_SuiteInfo raster_misc_suite; extern CU_SuiteInfo band_stats_suite; extern CU_SuiteInfo band_misc_suite; extern CU_SuiteInfo mapalgebra_suite; extern CU_SuiteInfo spatial_relationship_suite; extern CU_SuiteInfo misc_suite; /* ** The main() function for setting up and running the tests. ** Returns a CUE_SUCCESS on successful running, another ** CUnit error code on failure. */ int main(int argc, char *argv[]) { /* ADD YOUR SUITE HERE (2 of 2) */ CU_SuiteInfo suites[] = { pixtype_suite, raster_basics_suite, band_basics_suite, raster_wkb_suite, gdal_suite, raster_geometry_suite, raster_misc_suite, band_stats_suite, band_misc_suite, spatial_relationship_suite, mapalgebra_suite, misc_suite, CU_SUITE_INFO_NULL }; int index; char *suite_name; CU_pSuite suite_to_run; char *test_name; CU_pTest test_to_run; CU_ErrorCode errCode = 0; CU_pTestRegistry registry; int num_run; int num_failed; /* install the custom error handler */ lwgeom_set_handlers(0, 0, 0, cu_error_reporter, 0); /* initialize the CUnit test registry */ if (CUE_SUCCESS != CU_initialize_registry()) { errCode = CU_get_error(); printf(" Error attempting to initialize registry: %d. See CUError.h for error code list.\n", errCode); return errCode; } /* Register all the test suites. */ if (CUE_SUCCESS != CU_register_suites(suites)) { errCode = CU_get_error(); printf(" Error attempting to register test suites: %d. See CUError.h for error code list.\n", errCode); return errCode; } /* Run all tests using the CUnit Basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); if (argc <= 1) { errCode = CU_basic_run_tests(); } else { /* NOTE: The cunit functions used here (CU_get_registry, CU_get_suite_by_name, and CU_get_test_by_name) are * listed with the following warning: "Internal CUnit system functions. Should not be routinely called by users." * However, there didn't seem to be any other way to get tests by name, so we're calling them. */ registry = CU_get_registry(); for (index = 1; index < argc; index++) { suite_name = argv[index]; test_name = NULL; suite_to_run = CU_get_suite_by_name(suite_name, registry); if (NULL == suite_to_run) { /* See if it's a test name instead of a suite name. */ suite_to_run = registry->pSuite; while (suite_to_run != NULL) { test_to_run = CU_get_test_by_name(suite_name, suite_to_run); if (test_to_run != NULL) { /* It was a test name. */ test_name = suite_name; suite_name = suite_to_run->pName; break; } suite_to_run = suite_to_run->pNext; } } if (suite_to_run == NULL) { printf("\n'%s' does not appear to be either a suite name or a test name.\n\n", suite_name); } else { if (test_name != NULL) { /* Run only this test. */ printf("\nRunning test '%s' in suite '%s'.\n", test_name, suite_name); /* This should be CU_basic_run_test, but that method is broken, see: * https://sourceforge.net/tracker/?func=detail&aid=2851925&group_id=32992&atid=407088 * This one doesn't output anything for success, so we have to do it manually. */ errCode = CU_run_test(suite_to_run, test_to_run); if (errCode != CUE_SUCCESS) { printf(" Error attempting to run tests: %d. See CUError.h for error code list.\n", errCode); } else { num_run = CU_get_number_of_asserts(); num_failed = CU_get_number_of_failures(); printf("\n %s - asserts - %3d passed, %3d failed, %3d total.\n\n", (0 == num_failed ? "PASSED" : "FAILED"), (num_run - num_failed), num_failed, num_run); } } else { /* Run all the tests in the suite. */ printf("\nRunning all tests in suite '%s'.\n", suite_name); /* This should be CU_basic_run_suite, but that method is broken, see: * https://sourceforge.net/tracker/?func=detail&aid=2851925&group_id=32992&atid=407088 * This one doesn't output anything for success, so we have to do it manually. */ errCode = CU_run_suite(suite_to_run); if (errCode != CUE_SUCCESS) { printf(" Error attempting to run tests: %d. See CUError.h for error code list.\n", errCode); } else { num_run = CU_get_number_of_tests_run(); num_failed = CU_get_number_of_tests_failed(); printf("\n %s - tests - %3d passed, %3d failed, %3d total.\n", (0 == num_failed ? "PASSED" : "FAILED"), (num_run - num_failed), num_failed, num_run); num_run = CU_get_number_of_asserts(); num_failed = CU_get_number_of_failures(); printf(" - asserts - %3d passed, %3d failed, %3d total.\n\n", (num_run - num_failed), num_failed, num_run); } } } } /* Presumably if the CU_basic_run_[test|suite] functions worked, we wouldn't have to do this. */ CU_basic_show_failures(CU_get_failure_list()); printf("\n\n"); /* basic_show_failures leaves off line breaks. */ } num_failed = CU_get_number_of_failures(); CU_cleanup_registry(); return num_failed; } /** * CUnit error handler * Log message in a global var instead of printing in stderr * * CAUTION: Not stop execution on rterror case !!! */ static void cu_error_reporter(const char *fmt, va_list ap) { char *msg; /** This is a GNU extension. * Dunno how to handle errors here. */ if (!lw_vasprintf (&msg, fmt, ap)) { va_end (ap); return; } strncpy(cu_error_msg, msg, MAX_CUNIT_MSG_LENGTH); rtdealloc(msg); } void cu_error_msg_reset() { memset(cu_error_msg, '\0', MAX_CUNIT_MSG_LENGTH); } void cu_free_raster(rt_raster raster) { uint16_t i; uint16_t nbands = rt_raster_get_num_bands(raster); for (i = 0; i < nbands; ++i) { rt_band band = rt_raster_get_band(raster, i); rt_band_destroy(band); } rt_raster_destroy(raster); raster = NULL; } rt_band cu_add_band(rt_raster raster, rt_pixtype pixtype, int hasnodata, double nodataval) { void* mem = NULL; int32_t bandNum = 0; size_t datasize = 0; rt_band band = NULL; uint16_t width = 0; uint16_t height = 0; width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); datasize = rt_pixtype_size(pixtype) * width * height; mem = rtalloc(datasize); CU_ASSERT(mem != NULL); if (hasnodata) memset(mem, nodataval, datasize); else memset(mem, 0, datasize); band = rt_band_new_inline(width, height, pixtype, hasnodata, nodataval, mem); CU_ASSERT(band != NULL); rt_band_set_ownsdata_flag(band, 1); bandNum = rt_raster_add_band(raster, band, rt_raster_get_num_bands(raster)); CU_ASSERT(bandNum >= 0); return band; } void rt_init_allocators(void) { rt_set_handlers( default_rt_allocator, default_rt_reallocator, default_rt_deallocator, cu_error_reporter, default_rt_info_handler, default_rt_warning_handler ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_gdal.c�������������������������������������������������0000644�0000000�0000000�00000050031�12233537203�020722� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_gdal_configured() { CU_ASSERT(rt_util_gdal_configured()); } static void test_gdal_drivers() { int i; uint32_t size; rt_gdaldriver drv = NULL; drv = (rt_gdaldriver) rt_raster_gdal_drivers(&size, 1); CU_ASSERT(drv != NULL); for (i = 0; i < size; i++) { CU_ASSERT(strlen(drv[i].short_name)); rtdealloc(drv[i].short_name); rtdealloc(drv[i].long_name); rtdealloc(drv[i].create_options); } rtdealloc(drv); } static void test_gdal_rasterize() { rt_raster raster; char srs[] = "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6370997,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",45],PARAMETER[\"longitude_of_center\",-100],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1],AUTHORITY[\"EPSG\",\"2163\"]]"; const char wkb_hex[] = "010300000001000000050000000000000080841ec100000000600122410000000080841ec100000000804f22410000000040e81dc100000000804f22410000000040e81dc100000000600122410000000080841ec10000000060012241"; const char *pos = wkb_hex; unsigned char *wkb = NULL; int wkb_len = 0; int i; double scale_x = 100; double scale_y = -100; rt_pixtype pixtype[] = {PT_8BUI}; double init[] = {0}; double value[] = {1}; double nodata[] = {0}; uint8_t nodata_mask[] = {1}; /* hex to byte */ wkb_len = (int) ceil(((double) strlen(wkb_hex)) / 2); wkb = (unsigned char *) rtalloc(sizeof(unsigned char) * wkb_len); for (i = 0; i < wkb_len; i++) { sscanf(pos, "%2hhx", &wkb[i]); pos += 2; } raster = rt_raster_gdal_rasterize( wkb, wkb_len, srs, 1, pixtype, init, value, nodata, nodata_mask, NULL, NULL, &scale_x, &scale_y, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 100); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 100); CU_ASSERT_NOT_EQUAL(rt_raster_get_num_bands(raster), 0); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), -500000, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 600000, DBL_EPSILON); rtdealloc(wkb); cu_free_raster(raster); } static char * lwgeom_to_text(const LWGEOM *lwgeom) { char *wkt; size_t wkt_size; wkt = lwgeom_to_wkt(lwgeom, WKT_ISO, DBL_DIG, &wkt_size); return wkt; } static rt_raster fillRasterToPolygonize(int hasnodata, double nodataval) { rt_band band = NULL; rt_pixtype pixtype = PT_32BF; /* Create raster */ uint16_t width = 9; uint16_t height = 9; rt_raster raster = rt_raster_new(width, height); rt_raster_set_scale(raster, 1, 1); band = cu_add_band(raster, pixtype, hasnodata, nodataval); CU_ASSERT(band != NULL); { int x, y; for (x = 0; x < rt_band_get_width(band); ++x) for (y = 0; y < rt_band_get_height(band); ++y) rt_band_set_pixel(band, x, y, 0.0, NULL); } rt_band_set_pixel(band, 3, 1, 1.8, NULL); rt_band_set_pixel(band, 4, 1, 1.8, NULL); rt_band_set_pixel(band, 5, 1, 2.8, NULL); rt_band_set_pixel(band, 2, 2, 1.8, NULL); rt_band_set_pixel(band, 3, 2, 1.8, NULL); rt_band_set_pixel(band, 4, 2, 1.8, NULL); rt_band_set_pixel(band, 5, 2, 2.8, NULL); rt_band_set_pixel(band, 6, 2, 2.8, NULL); rt_band_set_pixel(band, 1, 3, 1.8, NULL); rt_band_set_pixel(band, 2, 3, 1.8, NULL); rt_band_set_pixel(band, 6, 3, 2.8, NULL); rt_band_set_pixel(band, 7, 3, 2.8, NULL); rt_band_set_pixel(band, 1, 4, 1.8, NULL); rt_band_set_pixel(band, 2, 4, 1.8, NULL); rt_band_set_pixel(band, 6, 4, 2.8, NULL); rt_band_set_pixel(band, 7, 4, 2.8, NULL); rt_band_set_pixel(band, 1, 5, 1.8, NULL); rt_band_set_pixel(band, 2, 5, 1.8, NULL); rt_band_set_pixel(band, 6, 5, 2.8, NULL); rt_band_set_pixel(band, 7, 5, 2.8, NULL); rt_band_set_pixel(band, 2, 6, 1.8, NULL); rt_band_set_pixel(band, 3, 6, 1.8, NULL); rt_band_set_pixel(band, 4, 6, 1.8, NULL); rt_band_set_pixel(band, 5, 6, 2.8, NULL); rt_band_set_pixel(band, 6, 6, 2.8, NULL); rt_band_set_pixel(band, 3, 7, 1.8, NULL); rt_band_set_pixel(band, 4, 7, 1.8, NULL); rt_band_set_pixel(band, 5, 7, 2.8, NULL); return raster; } static void test_gdal_polygonize() { int i; rt_raster rt; int nPols = 0; rt_geomval gv = NULL; char *wkt = NULL; rt = fillRasterToPolygonize(1, -1.0); CU_ASSERT(rt_raster_has_band(rt, 0)); nPols = 0; gv = rt_raster_gdal_polygonize(rt, 0, TRUE, &nPols); #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 1.8, FLT_EPSILON); #else CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 2.0, 1.); #endif wkt = lwgeom_to_text((const LWGEOM *) gv[0].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[1].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[1].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 3,3 6,6 6,6 3,3 3))"); rtdealloc(wkt); #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[2].val, 2.8, FLT_EPSILON); #else CU_ASSERT_DOUBLE_EQUAL(gv[2].val, 3.0, 1.); #endif wkt = lwgeom_to_text((const LWGEOM *) gv[2].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[3].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[3].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))"); rtdealloc(wkt); for (i = 0; i < nPols; i++) lwgeom_free((LWGEOM *) gv[i].geom); rtdealloc(gv); cu_free_raster(rt); /* Second test: NODATA value = 1.8 */ #ifdef GDALFPOLYGONIZE rt = fillRasterToPolygonize(1, 1.8); #else rt = fillRasterToPolygonize(1, 2.0); #endif /* We can check rt_raster_has_band here too */ CU_ASSERT(rt_raster_has_band(rt, 0)); nPols = 0; gv = rt_raster_gdal_polygonize(rt, 0, TRUE, &nPols); /* for (i = 0; i < nPols; i++) { wkt = lwgeom_to_text((const LWGEOM *) gv[i].geom); printf("(i, val, geom) = (%d, %f, %s)\n", i, gv[i].val, wkt); rtdealloc(wkt); } */ #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[1].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[1].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 3,3 6,6 6,6 3,3 3))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[2].val, 2.8, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[2].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[3].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[3].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))"); rtdealloc(wkt); #else CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 0.0, 1.); wkt = lwgeom_to_text((const LWGEOM *) gv[0].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 3,3 6,6 6,6 3,3 3))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[1].val, 3.0, 1.); wkt = lwgeom_to_text((const LWGEOM *) gv[1].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[2].val, 0.0, 1.); wkt = lwgeom_to_text((const LWGEOM *) gv[2].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))"); rtdealloc(wkt); #endif for (i = 0; i < nPols; i++) lwgeom_free((LWGEOM *) gv[i].geom); rtdealloc(gv); cu_free_raster(rt); /* Third test: NODATA value = 2.8 */ #ifdef GDALFPOLYGONIZE rt = fillRasterToPolygonize(1, 2.8); #else rt = fillRasterToPolygonize(1, 3.0); #endif /* We can check rt_raster_has_band here too */ CU_ASSERT(rt_raster_has_band(rt, 0)); nPols = 0; gv = rt_raster_gdal_polygonize(rt, 0, TRUE, &nPols); /* for (i = 0; i < nPols; i++) { wkt = lwgeom_to_text((const LWGEOM *) gv[i].geom); printf("(i, val, geom) = (%d, %f, %s)\n", i, gv[i].val, wkt); rtdealloc(wkt); } */ #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 1.8, FLT_EPSILON); CU_ASSERT_DOUBLE_EQUAL(gv[3].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[3].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))"); rtdealloc(wkt); #else CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 2.0, 1.); CU_ASSERT_DOUBLE_EQUAL(gv[2].val, 0.0, 1.); wkt = lwgeom_to_text((const LWGEOM *) gv[2].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))"); rtdealloc(wkt); #endif wkt = lwgeom_to_text((const LWGEOM *) gv[0].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[1].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[1].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 3,3 6,6 6,6 3,3 3))"); rtdealloc(wkt); for (i = 0; i < nPols; i++) lwgeom_free((LWGEOM *) gv[i].geom); rtdealloc(gv); cu_free_raster(rt); /* Fourth test: NODATA value = 0 */ rt = fillRasterToPolygonize(1, 0.0); /* We can check rt_raster_has_band here too */ CU_ASSERT(rt_raster_has_band(rt, 0)); nPols = 0; gv = rt_raster_gdal_polygonize(rt, 0, TRUE, &nPols); /* for (i = 0; i < nPols; i++) { wkt = lwgeom_to_text((const LWGEOM *) gv[i].geom); printf("(i, val, geom) = (%d, %f, %s)\n", i, gv[i].val, wkt); rtdealloc(wkt); } */ #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 1.8, FLT_EPSILON); #else CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 2.0, 1.); #endif wkt = lwgeom_to_text((const LWGEOM *) gv[0].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))"); rtdealloc(wkt); #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[1].val, 2.8, FLT_EPSILON); #else CU_ASSERT_DOUBLE_EQUAL(gv[1].val, 3.0, 1.); #endif wkt = lwgeom_to_text((const LWGEOM *) gv[1].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))"); rtdealloc(wkt); for (i = 0; i < nPols; i++) lwgeom_free((LWGEOM *) gv[i].geom); rtdealloc(gv); cu_free_raster(rt); /* Last test: There is no NODATA value (all values are valid) */ rt = fillRasterToPolygonize(0, 0.0); /* We can check rt_raster_has_band here too */ CU_ASSERT(rt_raster_has_band(rt, 0)); nPols = 0; gv = rt_raster_gdal_polygonize(rt, 0, TRUE, &nPols); /* for (i = 0; i < nPols; i++) { wkt = lwgeom_to_text((const LWGEOM *) gv[i].geom); printf("(i, val, geom) = (%d, %f, %s)\n", i, gv[i].val, wkt); rtdealloc(wkt); } */ #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 1.8, FLT_EPSILON); #else CU_ASSERT_DOUBLE_EQUAL(gv[0].val, 2.0, 1.); #endif wkt = lwgeom_to_text((const LWGEOM *) gv[0].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[1].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[1].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((3 3,3 6,6 6,6 3,3 3))"); rtdealloc(wkt); #ifdef GDALFPOLYGONIZE CU_ASSERT_DOUBLE_EQUAL(gv[2].val, 2.8, FLT_EPSILON); #else CU_ASSERT_DOUBLE_EQUAL(gv[2].val, 3.0, 1.); #endif wkt = lwgeom_to_text((const LWGEOM *) gv[2].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))"); rtdealloc(wkt); CU_ASSERT_DOUBLE_EQUAL(gv[3].val, 0.0, FLT_EPSILON); wkt = lwgeom_to_text((const LWGEOM *) gv[3].geom); CU_ASSERT_STRING_EQUAL(wkt, "POLYGON((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))"); rtdealloc(wkt); for (i = 0; i < nPols; i++) lwgeom_free((LWGEOM *) gv[i].geom); rtdealloc(gv); cu_free_raster(rt); } static void test_raster_to_gdal() { rt_pixtype pixtype = PT_64BF; rt_raster raster = NULL; rt_band band = NULL; uint32_t x; uint32_t width = 100; uint32_t y; uint32_t height = 100; char srs[] = "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6370997,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",45],PARAMETER[\"longitude_of_center\",-100],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1],AUTHORITY[\"EPSG\",\"2163\"]]"; uint64_t gdalSize; uint8_t *gdal = NULL; raster = rt_raster_new(width, height); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, pixtype, 1, 0); CU_ASSERT(band != NULL); rt_raster_set_offsets(raster, -500000, 600000); rt_raster_set_scale(raster, 1000, -1000); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { rt_band_set_pixel(band, x, y, (((double) x * y) + (x + y) + (x + y * x)) / (x + y + 1), NULL); } } gdal = rt_raster_to_gdal(raster, srs, "GTiff", NULL, &gdalSize); /*printf("gdalSize: %d\n", (int) gdalSize);*/ CU_ASSERT(gdalSize); /* FILE *fh = NULL; fh = fopen("/tmp/out.tif", "w"); fwrite(gdal, sizeof(uint8_t), gdalSize, fh); fclose(fh); */ if (gdal) CPLFree(gdal); cu_free_raster(raster); raster = rt_raster_new(width, height); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, pixtype, 1, 0); CU_ASSERT(band != NULL); rt_raster_set_offsets(raster, -500000, 600000); rt_raster_set_scale(raster, 1000, -1000); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { rt_band_set_pixel(band, x, y, x, NULL); } } /* add check that band isn't NODATA */ CU_ASSERT_EQUAL(rt_band_check_is_nodata(band), FALSE); gdal = rt_raster_to_gdal(raster, srs, "PNG", NULL, &gdalSize); /*printf("gdalSize: %d\n", (int) gdalSize);*/ CU_ASSERT(gdalSize); if (gdal) CPLFree(gdal); cu_free_raster(raster); } static void test_gdal_to_raster() { rt_pixtype pixtype = PT_64BF; rt_band band = NULL; rt_raster raster; rt_raster rast; const uint32_t width = 100; const uint32_t height = 100; uint32_t x; uint32_t y; int v; double values[width][height]; int rtn = 0; double value; GDALDriverH gddrv = NULL; GDALDatasetH gdds = NULL; raster = rt_raster_new(width, height); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, pixtype, 1, 0); CU_ASSERT(band != NULL); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { values[x][y] = (((double) x * y) + (x + y) + (x + y * x)) / (x + y + 1); rt_band_set_pixel(band, x, y, values[x][y], NULL); } } gdds = rt_raster_to_gdal_mem(raster, NULL, NULL, NULL, 0, &gddrv); CU_ASSERT(gddrv != NULL); CU_ASSERT(gdds != NULL); CU_ASSERT_EQUAL(GDALGetRasterXSize(gdds), width); CU_ASSERT_EQUAL(GDALGetRasterYSize(gdds), height); rast = rt_raster_from_gdal_dataset(gdds); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rast), 1); band = rt_raster_get_band(rast, 0); CU_ASSERT(band != NULL); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { rtn = rt_band_get_pixel(band, x, y, &value, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, values[x][y], DBL_EPSILON); } } GDALClose(gdds); gdds = NULL; gddrv = NULL; cu_free_raster(rast); cu_free_raster(raster); raster = rt_raster_new(width, height); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ pixtype = PT_8BSI; band = cu_add_band(raster, pixtype, 1, 0); CU_ASSERT(band != NULL); v = -127; for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { values[x][y] = v++; rt_band_set_pixel(band, x, y, values[x][y], NULL); if (v == 128) v = -127; } } gdds = rt_raster_to_gdal_mem(raster, NULL, NULL, NULL, 0, &gddrv); CU_ASSERT(gddrv != NULL); CU_ASSERT(gdds != NULL); CU_ASSERT_EQUAL(GDALGetRasterXSize(gdds), width); CU_ASSERT_EQUAL(GDALGetRasterYSize(gdds), height); rast = rt_raster_from_gdal_dataset(gdds); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rast), 1); band = rt_raster_get_band(rast, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_16BSI); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { rtn = rt_band_get_pixel(band, x, y, &value, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, values[x][y], 1.); } } GDALClose(gdds); cu_free_raster(rast); cu_free_raster(raster); } static void test_gdal_warp() { rt_pixtype pixtype = PT_64BF; rt_band band = NULL; rt_raster raster; rt_raster rast; uint32_t x; uint32_t width = 100; uint32_t y; uint32_t height = 100; double value = 0; char src_srs[] = "PROJCS[\"unnamed\",GEOGCS[\"unnamed ellipse\",DATUM[\"unknown\",SPHEROID[\"unnamed\",6370997,0]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]],PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",45],PARAMETER[\"longitude_of_center\",-100],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1],AUTHORITY[\"EPSG\",\"2163\"]]"; char dst_srs[] = "PROJCS[\"NAD83 / California Albers\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_parallel_1\",34],PARAMETER[\"standard_parallel_2\",40.5],PARAMETER[\"latitude_of_center\",0],PARAMETER[\"longitude_of_center\",-120],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",-4000000],AUTHORITY[\"EPSG\",\"3310\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]"; raster = rt_raster_new(width, height); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, pixtype, 1, 0); CU_ASSERT(band != NULL); rt_raster_set_offsets(raster, -500000, 600000); rt_raster_set_scale(raster, 1000, -1000); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { rt_band_set_pixel(band, x, y, (((double) x * y) + (x + y) + (x + y * x)) / (x + y + 1), NULL); } } rast = rt_raster_gdal_warp( raster, src_srs, dst_srs, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, GRA_NearestNeighbour, -1 ); CU_ASSERT(rast != NULL); CU_ASSERT_EQUAL(rt_raster_get_width(rast), 122); CU_ASSERT_EQUAL(rt_raster_get_height(rast), 116); CU_ASSERT_NOT_EQUAL(rt_raster_get_num_bands(rast), 0); band = rt_raster_get_band(rast, 0); CU_ASSERT(band != NULL); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &value); CU_ASSERT_DOUBLE_EQUAL(value, 0., DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 0, 0, &value, NULL), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0., DBL_EPSILON); cu_free_raster(rast); cu_free_raster(raster); } /* register tests */ CU_TestInfo gdal_tests[] = { PG_TEST(test_gdal_configured), PG_TEST(test_gdal_drivers), PG_TEST(test_gdal_rasterize), PG_TEST(test_gdal_polygonize), PG_TEST(test_raster_to_gdal), PG_TEST(test_gdal_to_raster), PG_TEST(test_gdal_warp), CU_TEST_INFO_NULL }; CU_SuiteInfo gdal_suite = {"gdal", NULL, NULL, gdal_tests}; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_mapalgebra.c�������������������������������������������0000644�0000000�0000000�00000103353�12233537203�022114� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" typedef struct _callback_userargs_t* _callback_userargs; struct _callback_userargs_t { uint16_t rasters; uint32_t rows; uint32_t columns; }; /* callback for 1 raster, 0 distance, FIRST or SECOND or LAST or UNION or INTERSECTION */ static int testRasterIterator1_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata) { _callback_userargs _userarg = (_callback_userargs) userarg; /* check that we're getting what we expect from userarg */ CU_ASSERT_EQUAL(arg->rasters, _userarg->rasters); CU_ASSERT_EQUAL(arg->rows, _userarg->rows); CU_ASSERT_EQUAL(arg->columns, _userarg->columns); /* 0,0 */ if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 0, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); } /* 4,4 */ else if ( arg->dst_pixel[0] == 4 && arg->dst_pixel[1] == 4 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 24, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); } /* 1,1 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_EQUAL(arg->nodata[0][0][0], 1); } /* 2,2 */ else if ( arg->dst_pixel[0] == 2 && arg->dst_pixel[1] == 2 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 12, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); } /* 3,1 */ else if ( arg->dst_pixel[0] == 3 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 8, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); } /* 1,0 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 1, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); } return 1; } /* callback for 2 raster, 0 distance, UNION */ static int testRasterIterator2_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata) { _callback_userargs _userarg = (_callback_userargs) userarg; /* check that we're getting what we expect from userarg */ CU_ASSERT_EQUAL(arg->rasters, _userarg->rasters); CU_ASSERT_EQUAL(arg->rows, _userarg->rows); CU_ASSERT_EQUAL(arg->columns, _userarg->columns); /* 0,0 */ if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 0, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } /* 4,4 */ else if ( arg->dst_pixel[0] == 4 && arg->dst_pixel[1] == 4 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 24, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 118, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 1,1 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_EQUAL(arg->nodata[0][0][0], 1); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 100, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 2,2 */ else if ( arg->dst_pixel[0] == 2 && arg->dst_pixel[1] == 2 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 12, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 106, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 3,1 */ else if ( arg->dst_pixel[0] == 3 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 8, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 102, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 1,0 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 1, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } /* 1,3 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 3 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 16, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } /* 5,0 */ else if ( arg->dst_pixel[0] == 5 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_EQUAL(arg->nodata[0][0][0], 1); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } return 1; } /* callback for 2 raster, 0 distance, INTERSECTION */ static int testRasterIterator3_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata) { _callback_userargs _userarg = (_callback_userargs) userarg; /* check that we're getting what we expect from userarg */ CU_ASSERT_EQUAL(arg->rasters, _userarg->rasters); CU_ASSERT_EQUAL(arg->rows, _userarg->rows); CU_ASSERT_EQUAL(arg->columns, _userarg->columns); /* 0,0 */ if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_EQUAL(arg->nodata[0][0][0], 1); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 100, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 0,3 */ else if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 3 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 21, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 115, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 3,0 */ else if ( arg->dst_pixel[0] == 3 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 9, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 103, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 3,3 */ else if ( arg->dst_pixel[0] == 3 && arg->dst_pixel[1] == 3 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 24, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 118, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 0,2 */ else if ( arg->dst_pixel[0] == 3 && arg->dst_pixel[1] == 3 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 16, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } return 1; } /* callback for 2 raster, 0 distance, FIRST */ static int testRasterIterator4_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata) { _callback_userargs _userarg = (_callback_userargs) userarg; /* check that we're getting what we expect from userarg */ CU_ASSERT_EQUAL(arg->rasters, _userarg->rasters); CU_ASSERT_EQUAL(arg->rows, _userarg->rows); CU_ASSERT_EQUAL(arg->columns, _userarg->columns); /* 0,0 */ if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 0, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } /* 4,4 */ else if ( arg->dst_pixel[0] == 4 && arg->dst_pixel[1] == 4 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 24, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 118, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 4,1 */ else if ( arg->dst_pixel[0] == 4 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 9, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 103, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 4,0 */ else if ( arg->dst_pixel[0] == 4 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 4, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } return 1; } /* callback for 2 raster, 0 distance, SECOND or LAST */ static int testRasterIterator5_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata) { _callback_userargs _userarg = (_callback_userargs) userarg; /* check that we're getting what we expect from userarg */ CU_ASSERT_EQUAL(arg->rasters, _userarg->rasters); CU_ASSERT_EQUAL(arg->rows, _userarg->rows); CU_ASSERT_EQUAL(arg->columns, _userarg->columns); /* 0,0 */ if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_EQUAL(arg->nodata[0][0][0], 1); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 100, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 4,4 */ else if ( arg->dst_pixel[0] == 4 && arg->dst_pixel[1] == 4 ) { CU_ASSERT_EQUAL(arg->nodata[0][0][0], 1); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 124, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 4,1 */ else if ( arg->dst_pixel[0] == 4 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_EQUAL(arg->nodata[0][0][0], 1); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 109, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 0,2 */ else if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 2 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 16, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } return 1; } /* callback for 2 raster, 0 distance, CUSTOM */ static int testRasterIterator6_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata) { _callback_userargs _userarg = (_callback_userargs) userarg; /* check that we're getting what we expect from userarg */ CU_ASSERT_EQUAL(arg->rasters, _userarg->rasters); CU_ASSERT_EQUAL(arg->rows, _userarg->rows); CU_ASSERT_EQUAL(arg->columns, _userarg->columns); /* 0,0 */ if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 16, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } /* 1,0 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 17, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 111, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 0,1 */ else if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 21, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 115, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } /* 1,1 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 22, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][0][0], 116, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 0); } return 1; } /* callback for 2 raster, 1 distance, CUSTOM */ static int testRasterIterator7_callback(rt_iterator_arg arg, void *userarg, double *value, int *nodata) { _callback_userargs _userarg = (_callback_userargs) userarg; /* check that we're getting what we expect from userarg */ CU_ASSERT_EQUAL(arg->rasters, _userarg->rasters); CU_ASSERT_EQUAL(arg->rows, _userarg->rows); CU_ASSERT_EQUAL(arg->columns, _userarg->columns); /* 0,0 */ if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][1][1], 16, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][1][1], 0); CU_ASSERT_EQUAL(arg->nodata[1][1][1], 1); CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 10, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } /* 1,0 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 0 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][1][1], 17, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][1][1], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][1][1], 111, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][1][1], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[0][2][2], 23, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][2][2], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][2][2], 117, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][2][2], 0); } /* 0,1 */ else if ( arg->dst_pixel[0] == 0 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][1][1], 21, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][1][1], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][1][1], 115, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][1][1], 0); CU_ASSERT_EQUAL(arg->nodata[0][2][0], 1); CU_ASSERT_EQUAL(arg->nodata[1][2][0], 1); } /* 1,1 */ else if ( arg->dst_pixel[0] == 1 && arg->dst_pixel[1] == 1 ) { CU_ASSERT_DOUBLE_EQUAL(arg->values[0][1][1], 22, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][1][1], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[1][1][1], 116, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[1][1][1], 0); CU_ASSERT_DOUBLE_EQUAL(arg->values[0][0][0], 16, DBL_EPSILON); CU_ASSERT_EQUAL(arg->nodata[0][0][0], 0); CU_ASSERT_EQUAL(arg->nodata[1][0][0], 1); } return 1; } static void test_raster_iterator() { rt_raster rast1; rt_raster rast2; rt_raster rast3; int num = 2; rt_raster rtn = NULL; rt_band band; int maxX = 5; int maxY = 5; rt_iterator itrset; _callback_userargs userargs; int noerr = 0; int x = 0; int y = 0; rast1 = rt_raster_new(maxX, maxY); CU_ASSERT(rast1 != NULL); rt_raster_set_offsets(rast1, 0, 0); rt_raster_set_scale(rast1, 1, -1); band = cu_add_band(rast1, PT_32BUI, 1, 6); CU_ASSERT(band != NULL); for (y = 0; y < maxY; y++) { for (x = 0; x < maxX; x++) { rt_band_set_pixel(band, x, y, x + (y * maxX), NULL); } } rast2 = rt_raster_new(maxX, maxY); CU_ASSERT(rast2 != NULL); rt_raster_set_offsets(rast2, 1, -1); rt_raster_set_scale(rast2, 1, -1); band = cu_add_band(rast2, PT_32BUI, 1, 110); CU_ASSERT(band != NULL); for (y = 0; y < maxY; y++) { for (x = 0; x < maxX; x++) { rt_band_set_pixel(band, x, y, (x + (y * maxX)) + 100, NULL); } } rast3 = rt_raster_new(2, 2); CU_ASSERT(rast3 != NULL); rt_raster_set_offsets(rast3, 1, -3); rt_raster_set_scale(rast3, 1, -1); /* allocate user args */ userargs = rtalloc(sizeof(struct _callback_userargs_t)); CU_ASSERT(userargs != NULL); /* allocate itrset */ itrset = rtalloc(sizeof(struct rt_iterator_t) * num); CU_ASSERT(itrset != NULL); itrset[0].raster = rast1; itrset[0].nband = 0; itrset[0].nbnodata = 1; itrset[1].raster = rast2; itrset[1].nband = 0; itrset[1].nbnodata = 1; /* 1 raster, 0 distance, FIRST or SECOND or LAST or UNION or INTERSECTION */ userargs->rasters = 1; userargs->rows = 1; userargs->columns = 1; noerr = rt_raster_iterator( itrset, 1, ET_INTERSECTION, NULL, PT_32BUI, 1, 0, 0, 0, userargs, testRasterIterator1_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; /* 1 raster, 0 distance, FIRST or SECOND or LAST or UNION or INTERSECTION */ userargs->rasters = 1; userargs->rows = 1; userargs->columns = 1; noerr = rt_raster_iterator( itrset, 1, ET_UNION, NULL, PT_32BUI, 1, 0, 0, 0, userargs, testRasterIterator1_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; /* 2 raster, 0 distance, UNION */ userargs->rasters = 2; userargs->rows = 1; userargs->columns = 1; noerr = rt_raster_iterator( itrset, 2, ET_UNION, NULL, PT_32BUI, 1, 0, 0, 0, userargs, testRasterIterator2_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 6); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 6); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; /* 2 raster, 0 distance, INTERSECTION */ noerr = rt_raster_iterator( itrset, 2, ET_INTERSECTION, NULL, PT_32BUI, 1, 0, 0, 0, userargs, testRasterIterator3_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 4); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 4); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; /* 2 raster, 0 distance, FIRST */ noerr = rt_raster_iterator( itrset, 2, ET_FIRST, NULL, PT_32BUI, 1, 0, 0, 0, userargs, testRasterIterator4_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; /* 2 raster, 0 distance, LAST or SECOND */ noerr = rt_raster_iterator( itrset, 2, ET_LAST, NULL, PT_32BUI, 1, 0, 0, 0, userargs, testRasterIterator5_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 5); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 5); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; /* 2 raster, 0 distance, CUSTOM */ noerr = rt_raster_iterator( itrset, 2, ET_CUSTOM, rast3, PT_32BUI, 1, 0, 0, 0, userargs, testRasterIterator6_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 2); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 2); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; /* 2 raster, 1 distance, CUSTOM */ userargs->rasters = 2; userargs->rows = 3; userargs->columns = 3; noerr = rt_raster_iterator( itrset, 2, ET_CUSTOM, rast3, PT_32BUI, 1, 0, 1, 1, userargs, testRasterIterator7_callback, &rtn ); CU_ASSERT_EQUAL(noerr, ES_NONE); CU_ASSERT_EQUAL(rt_raster_get_width(rtn), 2); CU_ASSERT_EQUAL(rt_raster_get_height(rtn), 2); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(rtn), -3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(rtn), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(rtn), -1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(rtn), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(rtn), 0); if (rtn != NULL) cu_free_raster(rtn); rtn = NULL; rtdealloc(userargs); rtdealloc(itrset); cu_free_raster(rast1); cu_free_raster(rast2); cu_free_raster(rast3); if (rtn != NULL) cu_free_raster(rtn); } static void test_band_reclass() { rt_reclassexpr *exprset; rt_raster raster; rt_band band; uint16_t x; uint16_t y; double nodata; int cnt = 2; int i = 0; int rtn; rt_band newband; double val; raster = rt_raster_new(100, 10); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, PT_16BUI, 0, 0); CU_ASSERT(band != NULL); rt_band_set_nodata(band, 0, NULL); for (x = 0; x < 100; x++) { for (y = 0; y < 10; y++) { rtn = rt_band_set_pixel(band, x, y, x * y + (x + y), NULL); } } rt_band_get_nodata(band, &nodata); CU_ASSERT_DOUBLE_EQUAL(nodata, 0, DBL_EPSILON); exprset = rtalloc(cnt * sizeof(rt_reclassexpr)); CU_ASSERT(exprset != NULL); for (i = 0; i < cnt; i++) { exprset[i] = rtalloc(sizeof(struct rt_reclassexpr_t)); CU_ASSERT(exprset[i] != NULL); if (i == 0) { /* nodata */ exprset[i]->src.min = 0; exprset[i]->src.inc_min = 0; exprset[i]->src.exc_min = 0; exprset[i]->src.max = 0; exprset[i]->src.inc_max = 0; exprset[i]->src.exc_max = 0; exprset[i]->dst.min = 0; exprset[i]->dst.max = 0; } else { /* range */ exprset[i]->src.min = 0; exprset[i]->src.inc_min = 0; exprset[i]->src.exc_min = 0; exprset[i]->src.max = 1000; exprset[i]->src.inc_max = 1; exprset[i]->src.exc_max = 0; exprset[i]->dst.min = 1; exprset[i]->dst.max = 255; } } newband = rt_band_reclass(band, PT_8BUI, 0, 0, exprset, cnt); CU_ASSERT(newband != NULL); rtn = rt_band_get_pixel(newband, 0, 0, &val, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); rtn = rt_band_get_pixel(newband, 49, 5, &val, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 77, DBL_EPSILON); rtn = rt_band_get_pixel(newband, 99, 9, &val, NULL); CU_ASSERT_EQUAL(rtn, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 255, DBL_EPSILON); for (i = cnt - 1; i >= 0; i--) rtdealloc(exprset[i]); rtdealloc(exprset); cu_free_raster(raster); rt_band_destroy(newband); } static void test_raster_colormap() { rt_raster raster; rt_raster rtn; rt_band band; int x; int y; rt_colormap colormap = NULL; double value; int nodata; raster = rt_raster_new(9, 9); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, PT_8BUI, 0, 0); CU_ASSERT(band != NULL); rt_band_set_nodata(band, 0, NULL); for (y = 0; y < 9; y++) { for (x = 0; x < 9; x++) { rt_band_set_pixel(band, x, y, x, NULL); } } colormap = (rt_colormap) rtalloc(sizeof(struct rt_colormap_t)); CU_ASSERT(colormap != NULL); colormap->nentry = 3; colormap->entry = (rt_colormap_entry) rtalloc(sizeof(struct rt_colormap_entry_t) * colormap->nentry); CU_ASSERT(colormap->entry != NULL); colormap->entry[0].isnodata = 0; colormap->entry[0].value = 8; colormap->entry[0].color[0] = 255; colormap->entry[0].color[1] = 255; colormap->entry[0].color[2] = 255; colormap->entry[0].color[3] = 255; colormap->entry[1].isnodata = 0; colormap->entry[1].value = 3; colormap->entry[1].color[0] = 127; colormap->entry[1].color[1] = 127; colormap->entry[1].color[2] = 127; colormap->entry[1].color[3] = 255; colormap->entry[2].isnodata = 0; colormap->entry[2].value = 0; colormap->entry[2].color[0] = 0; colormap->entry[2].color[1] = 0; colormap->entry[2].color[2] = 0; colormap->entry[2].color[3] = 255; /* 2 colors, 3 entries, INTERPOLATE */ colormap->ncolor = 2; colormap->method = CM_INTERPOLATE; rtn = rt_raster_colormap( raster, 0, colormap ); CU_ASSERT(rtn != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rtn), colormap->ncolor); band = rt_raster_get_band(rtn, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 0, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 3, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 8, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 255, DBL_EPSILON); cu_free_raster(rtn); /* 4 colors, 3 entries, INTERPOLATE */ colormap->ncolor = 4; rtn = rt_raster_colormap( raster, 0, colormap ); CU_ASSERT(rtn != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rtn), colormap->ncolor); cu_free_raster(rtn); /* 4 colors, 3 entries, EXACT */ colormap->method = CM_EXACT; rtn = rt_raster_colormap( raster, 0, colormap ); CU_ASSERT(rtn != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rtn), colormap->ncolor); band = rt_raster_get_band(rtn, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 0, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 3, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 8, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 255, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 1, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 7, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0, DBL_EPSILON); cu_free_raster(rtn); /* 4 colors, 3 entries, NEAREST */ colormap->method = CM_NEAREST; rtn = rt_raster_colormap( raster, 0, colormap ); CU_ASSERT(rtn != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rtn), colormap->ncolor); band = rt_raster_get_band(rtn, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 0, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 3, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 8, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 255, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 1, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 2, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 4, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 7, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 255, DBL_EPSILON); cu_free_raster(rtn); /* 4 colors, 2 entries, NEAREST */ colormap->nentry = 2; colormap->method = CM_NEAREST; rtn = rt_raster_colormap( raster, 0, colormap ); CU_ASSERT(rtn != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rtn), colormap->ncolor); band = rt_raster_get_band(rtn, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 0, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 3, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 8, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 255, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 1, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 2, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 4, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 127, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 7, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 255, DBL_EPSILON); cu_free_raster(rtn); rtdealloc(colormap->entry); rtdealloc(colormap); cu_free_raster(raster); /* new set of tests */ raster = rt_raster_new(10, 10); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, PT_8BUI, 0, 0); CU_ASSERT(band != NULL); rt_band_set_nodata(band, 0, NULL); for (y = 0; y < 10; y++) { for (x = 0; x < 10; x++) { rt_band_set_pixel(band, x, y, (x * y) + x, NULL); } } colormap = (rt_colormap) rtalloc(sizeof(struct rt_colormap_t)); CU_ASSERT(colormap != NULL); colormap->nentry = 10; colormap->entry = (rt_colormap_entry) rtalloc(sizeof(struct rt_colormap_entry_t) * colormap->nentry); CU_ASSERT(colormap->entry != NULL); colormap->entry[0].isnodata = 0; colormap->entry[0].value = 90; colormap->entry[0].color[0] = 255; colormap->entry[0].color[1] = 255; colormap->entry[0].color[2] = 255; colormap->entry[0].color[3] = 255; colormap->entry[1].isnodata = 0; colormap->entry[1].value = 80; colormap->entry[1].color[0] = 255; colormap->entry[1].color[1] = 227; colormap->entry[1].color[2] = 227; colormap->entry[1].color[3] = 255; colormap->entry[2].isnodata = 0; colormap->entry[2].value = 70; colormap->entry[2].color[0] = 255; colormap->entry[2].color[1] = 198; colormap->entry[2].color[2] = 198; colormap->entry[2].color[3] = 255; colormap->entry[3].isnodata = 0; colormap->entry[3].value = 60; colormap->entry[3].color[0] = 255; colormap->entry[3].color[1] = 170; colormap->entry[3].color[2] = 170; colormap->entry[3].color[3] = 255; colormap->entry[4].isnodata = 0; colormap->entry[4].value = 50; colormap->entry[4].color[0] = 255; colormap->entry[4].color[1] = 142; colormap->entry[4].color[2] = 142; colormap->entry[4].color[3] = 255; colormap->entry[5].isnodata = 0; colormap->entry[5].value = 40; colormap->entry[5].color[0] = 255; colormap->entry[5].color[1] = 113; colormap->entry[5].color[2] = 113; colormap->entry[5].color[3] = 255; colormap->entry[6].isnodata = 0; colormap->entry[6].value = 30; colormap->entry[6].color[0] = 255; colormap->entry[6].color[1] = 85; colormap->entry[6].color[2] = 85; colormap->entry[6].color[3] = 255; colormap->entry[7].isnodata = 0; colormap->entry[7].value = 20; colormap->entry[7].color[0] = 255; colormap->entry[7].color[1] = 57; colormap->entry[7].color[2] = 57; colormap->entry[7].color[3] = 255; colormap->entry[8].isnodata = 0; colormap->entry[8].value = 10; colormap->entry[8].color[0] = 255; colormap->entry[8].color[1] = 28; colormap->entry[8].color[2] = 28; colormap->entry[8].color[3] = 255; colormap->entry[9].isnodata = 0; colormap->entry[9].value = 0; colormap->entry[9].color[0] = 255; colormap->entry[9].color[1] = 0; colormap->entry[9].color[2] = 0; colormap->entry[9].color[3] = 255; /* 2 colors, 3 entries, INTERPOLATE */ colormap->ncolor = 4; colormap->method = CM_INTERPOLATE; rtn = rt_raster_colormap( raster, 0, colormap ); CU_ASSERT(rtn != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(rtn), colormap->ncolor); band = rt_raster_get_band(rtn, 2); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 0, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 5, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 14, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 6, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 17, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 9, 0, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 25, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 2, 4, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 28, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 3, 4, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 43, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 4, 4, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 57, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 6, 9, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 170, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 7, 9, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 198, DBL_EPSILON); CU_ASSERT_EQUAL(rt_band_get_pixel(band, 8, 9, &value, &nodata), ES_NONE); CU_ASSERT_DOUBLE_EQUAL(value, 227, DBL_EPSILON); cu_free_raster(rtn); rtdealloc(colormap->entry); rtdealloc(colormap); cu_free_raster(raster); } /* register tests */ CU_TestInfo mapalgebra_tests[] = { PG_TEST(test_raster_iterator), PG_TEST(test_band_reclass), PG_TEST(test_raster_colormap), CU_TEST_INFO_NULL }; CU_SuiteInfo mapalgebra_suite = {"mapalgebra", NULL, NULL, mapalgebra_tests}; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/Makefile.in�����������������������������������������������0000644�0000000�0000000�00000005723�12233537203�021235� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * $Id: Makefile.in # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Paul Ramsey, Mark Cave-Ayland # * # * This program is free software; you can redistribute it and/or # * modify it under the terms of the GNU General Public License # * as published by the Free Software Foundation; either version 2 # * of the License, or (at your option) any later version. # * # * This program is distributed in the hope that it will be useful, # * but WITHOUT ANY WARRANTY; without even the implied warranty of # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # * GNU General Public License for more details. # * # * You should have received a copy of the GNU General Public License # * along with this program; if not, write to the Free Software Foundation, # * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # * # ********************************************************************** CC=@CC@ top_builddir = @top_builddir@ SHELL = @SHELL@ LIBTOOL = @LIBTOOL@ RT_CORE=../../rt_core LIBLWGEOM_LDFLAGS=../../../liblwgeom/.libs/liblwgeom.a LIBLWGEOM_CFLAGS=-I../../../liblwgeom LIBGDAL_CFLAGS=@LIBGDAL_CFLAGS@ LIBGDAL_LDFLAGS=@LIBGDAL_LDFLAGS@ PROJ_CFLAGS=@PROJ_CPPFLAGS@ GEOS_CFLAGS=@GEOS_CPPFLAGS@ GEOS_LDFLAGS=@GEOS_LDFLAGS@ -lgeos_c RTCORE_CFLAGS=-I$(RT_CORE) RTCORE_LDFLAGS=$(RT_CORE)/librtcore.a CC=@CC@ CFLAGS = \ @CFLAGS@ @WARNFLAGS@ \ $(RTCORE_CFLAGS) \ $(LIBLWGEOM_CFLAGS) \ $(PROJ_CFLAGS) \ $(LIBGDAL_CFLAGS) \ $(GEOS_CFLAGS) LDFLAGS = \ $(RTCORE_LDFLAGS) \ $(LIBLWGEOM_LDFLAGS) \ $(LIBGDAL_LDFLAGS) \ $(GEOS_LDFLAGS) \ -lm \ CUNIT_LDFLAGS=@CUNIT_LDFLAGS@ CUNIT_CPPFLAGS=@CUNIT_CPPFLAGS@ -I.. # ADD YOUR NEW TEST FILE HERE (1/1) OBJS= \ cu_pixtype.o \ cu_raster_basics.o \ cu_band_basics.o \ cu_raster_wkb.o \ cu_raster_geometry.o \ cu_raster_misc.o \ cu_band_stats.o \ cu_band_misc.o \ cu_gdal.o \ cu_spatial_relationship.o \ cu_mapalgebra.o \ cu_misc.o \ cu_tester.o # If we couldn't find the cunit library then display a helpful message ifeq ($(CUNIT_LDFLAGS),) all: requirements_not_met_cunit check: requirements_not_met_cunit else # Build the unit tester all: cu_tester # Build and run the unit tester check: cu_tester @./cu_tester endif # Build the main unit test executable cu_tester: $(RT_CORE)/librtcore.a $(OBJS) $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(CUNIT_LDFLAGS) # Command to build each of the .o files $(OBJS): %.o: %.c $(CC) $(CFLAGS) $(CUNIT_CPPFLAGS) -c -o $@ $< $(RT_CORE)/librtcore.a: $(MAKE) -C ../../rt_core # Clean target clean: rm -rf .libs rm -f $(OBJS) rm -f cu_tester distclean: clean rm -f Makefile # Requirements message requirements_not_met_cunit: @echo @echo "WARNING:" @echo @echo "configure was unable to find CUnit which is required for unit testing." @echo "In order to enable unit testing, you must install CUnit and then re-run configure." @echo ���������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_raster_wkb.c�������������������������������������������0000644�0000000�0000000�00000071766�12233537203�022200� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * Copyright (C) 2009 Sandro Santilli <strk@keybit.net> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_raster_wkb() { /* will use default allocators and message handlers */ rt_raster raster = NULL; const char *hexwkb = NULL; const char *out = NULL; uint32_t len = 0; int i = 0; /* ------------------------------------------------------ */ /* No bands, 7x8 - little endian */ /* ------------------------------------------------------ */ hexwkb = "01" /* little endian (uint8 ndr) */ "0000" /* version (uint16 0) */ "0000" /* nBands (uint16 0) */ "000000000000F03F" /* scaleX (float64 1) */ "0000000000000040" /* scaleY (float64 2) */ "0000000000000840" /* ipX (float64 3) */ "0000000000001040" /* ipY (float64 4) */ "0000000000001440" /* skewX (float64 5) */ "0000000000001840" /* skewY (float64 6) */ "0A000000" /* SRID (int32 10) */ "0700" /* width (uint16 7) */ "0800" /* height (uint16 8) */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 0); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 6, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 10); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 7); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 8); out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %d\n", strlen(hexwkb)); printf("out hexwkb len: %d\n", len); printf(" in hexwkb: %s\n", hexwkb); printf("out hexwkb: %s\n", out); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian... CU_ASSERT_STRING_EQUAL(hexwkb, out); */ free((/*no const*/ void*)out); { void *serialized; rt_raster rast2; serialized = rt_raster_serialize(raster); rast2 = rt_raster_deserialize(serialized, FALSE); cu_free_raster(rast2); free(serialized); } cu_free_raster(raster); /* ------------------------------------------------------ */ /* No bands, 7x8 - big endian */ /* ------------------------------------------------------ */ hexwkb = "00" /* big endian (uint8 xdr) */ "0000" /* version (uint16 0) */ "0000" /* nBands (uint16 0) */ "3FF0000000000000" /* scaleX (float64 1) */ "4000000000000000" /* scaleY (float64 2) */ "4008000000000000" /* ipX (float64 3) */ "4010000000000000" /* ipY (float64 4) */ "4014000000000000" /* skewX (float64 5) */ "4018000000000000" /* skewY (float64 6) */ "0000000A" /* SRID (int32 10) */ "0007" /* width (uint16 7) */ "0008" /* height (uint16 8) */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 0); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 6, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 10); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 7); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 8); out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %u\n", (uint32_t) strlen(hexwkb)); printf("out hexwkb len: %u\n", len); printf(" in hexwkb: %s\n", hexwkb); printf("out hexwkb: %s\n", out); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian... CU_ASSERT_STRING_EQUAL(hexwkb, out); */ cu_free_raster(raster); free((/*no const*/ void*)out); /* ------------------------------------------------------ */ /* 1x1, little endian, band0(1bb) */ /* ------------------------------------------------------ */ hexwkb = "01" /* little endian (uint8 ndr) */ "0000" /* version (uint16 0) */ "0100" /* nBands (uint16 1) */ "000000000000F03F" /* scaleX (float64 1) */ "0000000000000040" /* scaleY (float64 2) */ "0000000000000840" /* ipX (float64 3) */ "0000000000001040" /* ipY (float64 4) */ "0000000000001440" /* skewX (float64 5) */ "0000000000001840" /* skewY (float64 6) */ "0A000000" /* SRID (int32 10) */ "0100" /* width (uint16 1) */ "0100" /* height (uint16 1) */ "40" /* First band type (1BB, in memory, hasnodata) */ "00" /* nodata value (0) */ "01" /* pix(0,0) == 1 */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 1); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 6, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 10); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 1); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 1); { double val; int failure; rt_band band = rt_raster_get_band(raster, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_1BB); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); } out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %u\n", (uint32_t) strlen(hexwkb)); printf("out hexwkb len: %u\n", len); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian... CU_ASSERT_STRING_EQUAL(hexwkb, out); */ cu_free_raster(raster); free((/*no const*/ void*)out); /* ------------------------------------------------------ */ /* 3x2, big endian, band0(8BSI) */ /* ------------------------------------------------------ */ hexwkb = "01" /* little endian (uint8 ndr) */ "0000" /* version (uint16 0) */ "0100" /* nBands (uint16 1) */ "000000000000F03F" /* scaleX (float64 1) */ "0000000000000040" /* scaleY (float64 2) */ "0000000000000840" /* ipX (float64 3) */ "0000000000001040" /* ipY (float64 4) */ "0000000000001440" /* skewX (float64 5) */ "0000000000001840" /* skewY (float64 6) */ "0A000000" /* SRID (int32 10) */ "0300" /* width (uint16 3) */ "0200" /* height (uint16 2) */ "43" /* First band type (8BSI, in memory, hasnodata) */ "FF" /* nodata value (-1) */ "FF" /* pix(0,0) == -1 */ "00" /* pix(1,0) == 0 */ "01" /* pix(2,0) == 1 */ "7F" /* pix(0,1) == 127 */ "0A" /* pix(1,1) == 10 */ "02" /* pix(2,1) == 2 */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 1); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 6, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 10); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 3); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 2); { double val; int failure; rt_band band = rt_raster_get_band(raster, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_8BSI); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, -1, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, -1, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 127, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 10, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); } out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %u\n", (uint32_t) strlen(hexwkb)); printf("out hexwkb len: %u\n", len); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian... CU_ASSERT_STRING_EQUAL(hexwkb, out); */ free((/*no const*/ void*)out); { void *serialized; rt_raster rast2; serialized = rt_raster_serialize(raster); rast2 = rt_raster_deserialize(serialized, FALSE); cu_free_raster(rast2); free(serialized); } cu_free_raster(raster); /* ------------------------------------------------------ */ /* 3x2, little endian, band0(16BSI) */ /* ------------------------------------------------------ */ hexwkb = "01" /* little endian (uint8 ndr) */ "0000" /* version (uint16 0) */ "0100" /* nBands (uint16 1) */ "000000000000F03F" /* scaleX (float64 1) */ "0000000000000040" /* scaleY (float64 2) */ "0000000000000840" /* ipX (float64 3) */ "0000000000001040" /* ipY (float64 4) */ "0000000000001440" /* skewX (float64 5) */ "0000000000001840" /* skewY (float64 6) */ "0A000000" /* SRID (int32 10) */ "0300" /* width (uint16 3) */ "0200" /* height (uint16 2) */ "05" /* First band type (16BSI, in memory) */ "FFFF" /* nodata value (-1) */ "FFFF" /* pix(0,0) == -1 */ "0000" /* pix(1,0) == 0 */ "F0FF" /* pix(2,0) == -16 */ "7F00" /* pix(0,1) == 127 */ "0A00" /* pix(1,1) == 10 */ "0200" /* pix(2,1) == 2 */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 1); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 6, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 10); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 3); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 2); { double val; int failure; rt_band band = rt_raster_get_band(raster, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_16BSI); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(!rt_band_get_hasnodata_flag(band)); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, -1, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, -16, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 127, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 10, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); } out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %u\n", (uint32_t) strlen(hexwkb)); printf("out hexwkb len: %u\n", len); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian CU_ASSERT_STRING_EQUAL(hexwkb, out); */ cu_free_raster(raster); free((/*no const*/ void*)out); /* ------------------------------------------------------ */ /* 3x2, big endian, band0(16BSI) */ /* ------------------------------------------------------ */ hexwkb = "00" /* big endian (uint8 xdr) */ "0000" /* version (uint16 0) */ "0001" /* nBands (uint16 1) */ "3FF0000000000000" /* scaleX (float64 1) */ "4000000000000000" /* scaleY (float64 2) */ "4008000000000000" /* ipX (float64 3) */ "4010000000000000" /* ipY (float64 4) */ "4014000000000000" /* skewX (float64 5) */ "4018000000000000" /* skewY (float64 6) */ "0000000A" /* SRID (int32 10) */ "0003" /* width (uint16 3) */ "0002" /* height (uint16 2) */ "05" /* First band type (16BSI, in memory) */ "FFFF" /* nodata value (-1) */ "FFFF" /* pix(0,0) == -1 */ "0000" /* pix(1,0) == 0 */ "FFF0" /* pix(2,0) == -16 */ "007F" /* pix(0,1) == 127 */ "000A" /* pix(1,1) == 10 */ "0002" /* pix(2,1) == 2 */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 1); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 6, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 10); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 3); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 2); { double val; int failure; rt_band band = rt_raster_get_band(raster, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_16BSI); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(!rt_band_get_hasnodata_flag(band)); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, -1, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, -16, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 127, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 10, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 1, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 2, DBL_EPSILON); } out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %u\n", (uint32_t) strlen(hexwkb)); printf("out hexwkb len: %u\n", len); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian CU_ASSERT_STRING_EQUAL(hexwkb, out); */ cu_free_raster(raster); free((/*no const*/ void*)out); /* ------------------------------------------------------ */ /* 3x2, bit endian, band0(16BSI ext: 3;/tmp/t.tif) */ /* ------------------------------------------------------ */ hexwkb = "00" /* big endian (uint8 xdr) */ "0000" /* version (uint16 0) */ "0001" /* nBands (uint16 1) */ "3FF0000000000000" /* scaleX (float64 1) */ "4000000000000000" /* scaleY (float64 2) */ "4008000000000000" /* ipX (float64 3) */ "4010000000000000" /* ipY (float64 4) */ "4014000000000000" /* skewX (float64 5) */ "4018000000000000" /* skewY (float64 6) */ "0000000A" /* SRID (int32 10) */ "0003" /* width (uint16 3) */ "0002" /* height (uint16 2) */ "C5" /* First band type (16BSI, on disk, hasnodata) */ "FFFF" /* nodata value (-1) */ "03" /* ext band num == 3 */ /* ext band path == /tmp/t.tif */ "2F746D702F742E74696600" ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 1); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), 2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 6, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 10); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 3); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 2); { double val; uint8_t bandnum = 0; rt_band band = rt_raster_get_band(raster, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_16BSI); CU_ASSERT(rt_band_is_offline(band)); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, -1, DBL_EPSILON); CU_ASSERT_STRING_EQUAL(rt_band_get_ext_path(band), "/tmp/t.tif"); CU_ASSERT_EQUAL(rt_band_get_ext_band_num(band, &bandnum), ES_NONE); CU_ASSERT_EQUAL(bandnum, 3); } out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %u\n", (uint32_t) strlen(hexwkb)); printf("out hexwkb len: %u\n", len); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian CU_ASSERT_STRING_EQUAL(hexwkb, out); */ cu_free_raster(raster); free((/*no const*/ void*)out); /* ------------------------------------------------------ */ /* 1x3, little endian, band0 16BSI, nodata 1, srid -1 */ /* ------------------------------------------------------ */ hexwkb = "01" /* little endian (uint8 ndr) */ "0000" /* version (uint16 0) */ "0100" /* nBands (uint16 1) */ "0000000000805640" /* scaleX (float64 90.0) */ "00000000008056C0" /* scaleY (float64 -90.0) */ "000000001C992D41" /* ipX (float64 969870.0) */ "00000000E49E2341" /* ipY (float64 642930.0) */ "0000000000000000" /* skewX (float64 0) */ "0000000000000000" /* skewY (float64 0) */ "FFFFFFFF" /* SRID (int32 -1) */ "0300" /* width (uint16 3) */ "0100" /* height (uint16 1) */ "45" /* First band type (16BSI, in memory, hasnodata) */ "0100" /* nodata value (1) */ "0100" /* pix(0,0) == 1 */ "B401" /* pix(1,0) == 436 */ "AF01" /* pix(2,0) == 431 */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 1); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 90, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), -90, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 969870.0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 642930.0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 0); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 3); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 1); { double val; int failure; rt_band band = rt_raster_get_band(raster, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_16BSI); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 1, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 436, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 431, DBL_EPSILON); } out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %d\n", strlen(hexwkb)); printf("out hexwkb len: %d\n", len); printf(" in hexwkb: %s\n", hexwkb); printf("out hexwkb: %s\n", out); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian CU_ASSERT_STRING_EQUAL(hexwkb, out); */ free((/*no const*/ void*)out); { void *serialized; rt_raster rast2; serialized = rt_raster_serialize(raster); rast2 = rt_raster_deserialize(serialized, FALSE); cu_free_raster(rast2); free(serialized); } cu_free_raster(raster); /* ------------------------------------------------------ */ /* 5x5, little endian, 3 x band 8BUI (RGB), */ /* nodata 0, srid -1 */ /* Test case completes regress/bug_test_car5.sql */ /* Test case repeated 4 times to mimic 4 tiles insertion */ /* ------------------------------------------------------ */ for (i = 0; i < 5; ++i) { hexwkb = "01" /* little endian (uint8 ndr) */ "0000" /* version (uint16 0) */ "0300" /* nBands (uint16 3) */ "9A9999999999A93F" /* scaleX (float64 0.050000) */ "9A9999999999A9BF" /* scaleY (float64 -0.050000) */ "000000E02B274A41" /* ipX (float64 3427927.750000) */ "0000000077195641" /* ipY (float64 5793244.000000) */ "0000000000000000" /* skewX (float64 0.000000) */ "0000000000000000" /* skewY (float64 0.000000) */ "FFFFFFFF" /* srid (int32 -1) */ "0500" /* width (uint16 5) */ "0500" /* height (uint16 5) */ "44" /* 1st band pixel type (8BUI, in memory, hasnodata) */ "00" /* 1st band nodata 0 */ "FDFEFDFEFEFDFEFEFDF9FAFEFEFCF9FBFDFEFEFDFCFAFEFEFE" /* 1st band pixels */ "44" /* 2nd band pixel type (8BUI, in memory, hasnodata) */ "00" /* 2nd band nodata 0 */ "4E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087" /* 2nd band pixels */ "44" /* 3rd band pixel type (8BUI, in memory, hasnodata) */ "00" /* 3rd band nodata 0 */ "46566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665" /* 3rd band pixels */ ; raster = rt_raster_from_hexwkb(hexwkb, strlen(hexwkb)); CU_ASSERT(raster != NULL); CU_ASSERT_EQUAL(rt_raster_get_num_bands(raster), 3); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_scale(raster), 0.05, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_scale(raster), -0.05, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_offset(raster), 3427927.75, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_offset(raster), 5793244.00, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_x_skew(raster), 0.0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_raster_get_y_skew(raster), 0.0, DBL_EPSILON); CU_ASSERT_EQUAL(rt_raster_get_srid(raster), 0); CU_ASSERT_EQUAL(rt_raster_get_width(raster), 5); CU_ASSERT_EQUAL(rt_raster_get_height(raster), 5); { /* Test 1st band */ double val; int failure; rt_band band = rt_raster_get_band(raster, 0); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_8BUI); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 253, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 254, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 253, DBL_EPSILON); failure = rt_band_get_pixel(band, 3, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 254, DBL_EPSILON); failure = rt_band_get_pixel(band, 4, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 254, DBL_EPSILON); } { /* Test 2nd band */ double val; int failure; rt_band band = rt_raster_get_band(raster, 1); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_8BUI); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 78, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 98, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 122, DBL_EPSILON); failure = rt_band_get_pixel(band, 3, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 173, DBL_EPSILON); failure = rt_band_get_pixel(band, 4, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 209, DBL_EPSILON); } { /* Test 3rd band */ double val; int failure; rt_band band = rt_raster_get_band(raster, 2); CU_ASSERT(band != NULL); CU_ASSERT_EQUAL(rt_band_get_pixtype(band), PT_8BUI); CU_ASSERT(!rt_band_is_offline(band)); CU_ASSERT(rt_band_get_hasnodata_flag(band)); rt_band_get_nodata(band, &val); CU_ASSERT_DOUBLE_EQUAL(val, 0, DBL_EPSILON); failure = rt_band_get_pixel(band, 0, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 70, DBL_EPSILON); failure = rt_band_get_pixel(band, 1, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 86, DBL_EPSILON); failure = rt_band_get_pixel(band, 2, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 100, DBL_EPSILON); failure = rt_band_get_pixel(band, 3, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 135, DBL_EPSILON); failure = rt_band_get_pixel(band, 4, 0, &val, NULL); CU_ASSERT_EQUAL(failure, ES_NONE); CU_ASSERT_DOUBLE_EQUAL(val, 161, DBL_EPSILON); } out = rt_raster_to_hexwkb(raster, FALSE, &len); /* printf(" in hexwkb len: %u\n", (uint32_t) strlen(hexwkb)); printf("out hexwkb len: %u\n", len); */ CU_ASSERT_EQUAL(len, strlen(hexwkb)); /* would depend on machine endian CU_ASSERT_STRING_EQUAL(hexwkb, out); */ free((/*no const*/ void*)out); { void *serialized; rt_raster rast2; serialized = rt_raster_serialize(raster); rast2 = rt_raster_deserialize(serialized, FALSE); cu_free_raster(rast2); free(serialized); } cu_free_raster(raster); } /* for-loop running car5 tests */ /* ------------------------------------------------------ */ /* TODO: New test cases */ /* ------------------------------------------------------ */ /* new test case */ /* ------------------------------------------------------ */ /* Success summary */ /* ------------------------------------------------------ */ /* printf("All tests successful !\n"); */ } /* register tests */ CU_TestInfo raster_wkb_tests[] = { PG_TEST(test_raster_wkb), CU_TEST_INFO_NULL }; CU_SuiteInfo raster_wkb_suite = {"raster_wkb", NULL, NULL, raster_wkb_tests}; ����������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_misc.c�������������������������������������������������0000644�0000000�0000000�00000006710�12233537203�020753� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2013 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_rgb_to_hsv() { double rgb[3] = {0, 0, 0}; double hsv[3] = {0, 0, 0}; rt_util_rgb_to_hsv(rgb, hsv); CU_ASSERT_DOUBLE_EQUAL(hsv[0], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[1], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[2], 0, DBL_EPSILON); rgb[0] = 0; rgb[1] = 0; rgb[2] = 1; rt_util_rgb_to_hsv(rgb, hsv); CU_ASSERT_DOUBLE_EQUAL(hsv[0], 2/3., DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[1], 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[2], 1, DBL_EPSILON); rgb[0] = 0; rgb[1] = 0.25; rgb[2] = 0.5; rt_util_rgb_to_hsv(rgb, hsv); CU_ASSERT_DOUBLE_EQUAL(hsv[0], 7/12., DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[1], 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[2], 0.5, DBL_EPSILON); rgb[0] = 0.5; rgb[1] = 1; rgb[2] = 0.5; rt_util_rgb_to_hsv(rgb, hsv); CU_ASSERT_DOUBLE_EQUAL(hsv[0], 1/3., DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[1], 0.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[2], 1, DBL_EPSILON); rgb[0] = 0.2; rgb[1] = 0.4; rgb[2] = 0.4; rt_util_rgb_to_hsv(rgb, hsv); CU_ASSERT_DOUBLE_EQUAL(hsv[0], 0.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[1], 0.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(hsv[2], 0.4, DBL_EPSILON); } static void test_hsv_to_rgb() { double hsv[3] = {0, 0, 0}; double rgb[3] = {0, 0, 0}; rt_util_hsv_to_rgb(hsv, rgb); CU_ASSERT_DOUBLE_EQUAL(rgb[0], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[1], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[2], 0, DBL_EPSILON); hsv[0] = 2/3.; hsv[1] = 1; hsv[2] = 1; rt_util_hsv_to_rgb(hsv, rgb); CU_ASSERT_DOUBLE_EQUAL(rgb[0], 0., DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[1], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[2], 1, DBL_EPSILON); hsv[0] = 7/12.; hsv[1] = 1; hsv[2] = 0.5; rt_util_hsv_to_rgb(hsv, rgb); CU_ASSERT_DOUBLE_EQUAL(rgb[0], 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[1], 0.25, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[2], 0.5, DBL_EPSILON); hsv[0] = 1/3.; hsv[1] = 0.5; hsv[2] = 1; rt_util_hsv_to_rgb(hsv, rgb); CU_ASSERT_DOUBLE_EQUAL(rgb[0], 0.5, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[1], 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[2], 0.5, DBL_EPSILON); hsv[0] = 0.5; hsv[1] = 0.5; hsv[2] = 0.4; rt_util_hsv_to_rgb(hsv, rgb); CU_ASSERT_DOUBLE_EQUAL(rgb[0], 0.2, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[1], 0.4, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rgb[2], 0.4, DBL_EPSILON); } /* register tests */ CU_TestInfo misc_tests[] = { PG_TEST(test_rgb_to_hsv), PG_TEST(test_hsv_to_rgb), CU_TEST_INFO_NULL }; CU_SuiteInfo misc_suite = {"misc", NULL, NULL, misc_tests}; ��������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_pixtype.c����������������������������������������������0000644�0000000�0000000�00000026271�12233537203�021526� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_pixtype_size() { CU_ASSERT_EQUAL(rt_pixtype_size(PT_1BB), 1); CU_ASSERT_EQUAL(rt_pixtype_size(PT_2BUI), 1); CU_ASSERT_EQUAL(rt_pixtype_size(PT_4BUI), 1); CU_ASSERT_EQUAL(rt_pixtype_size(PT_8BUI), 1); CU_ASSERT_EQUAL(rt_pixtype_size(PT_8BSI), 1); CU_ASSERT_EQUAL(rt_pixtype_size(PT_16BUI), 2); CU_ASSERT_EQUAL(rt_pixtype_size(PT_16BSI), 2); CU_ASSERT_EQUAL(rt_pixtype_size(PT_32BUI), 4); CU_ASSERT_EQUAL(rt_pixtype_size(PT_32BSI), 4); CU_ASSERT_EQUAL(rt_pixtype_size(PT_32BF), 4); CU_ASSERT_EQUAL(rt_pixtype_size(PT_64BF), 8); CU_ASSERT_EQUAL(rt_pixtype_size(PT_END), -1); } static void test_pixtype_alignment() { /* rt_pixtype_alignment() just forwards to rt_pixtype_size() */ } static void test_pixtype_name() { CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_1BB), "1BB"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_2BUI), "2BUI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_4BUI), "4BUI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_8BUI), "8BUI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_8BSI), "8BSI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_16BUI), "16BUI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_16BSI), "16BSI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_32BUI), "32BUI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_32BSI), "32BSI"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_32BF), "32BF"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_64BF), "64BF"); CU_ASSERT_STRING_EQUAL(rt_pixtype_name(PT_END), "Unknown"); } static void test_pixtype_index_from_name() { CU_ASSERT_EQUAL(rt_pixtype_index_from_name("1BB"), PT_1BB); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("2BUI"), PT_2BUI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("4BUI"), PT_4BUI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("8BUI"), PT_8BUI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("8BSI"), PT_8BSI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("16BUI"), PT_16BUI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("16BSI"), PT_16BSI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("32BUI"), PT_32BUI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("32BSI"), PT_32BSI); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("32BF"), PT_32BF); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("64BF"), PT_64BF); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("END"), PT_END); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("1bb"), PT_END); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("1bB"), PT_END); CU_ASSERT_EQUAL(rt_pixtype_index_from_name("3BUI"), PT_END); } static void test_pixtype_get_min_value() { CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_1BB), rt_util_clamp_to_1BB((double) CHAR_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_2BUI), rt_util_clamp_to_2BUI((double) CHAR_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_4BUI), rt_util_clamp_to_4BUI((double) CHAR_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_8BUI), rt_util_clamp_to_8BUI((double) CHAR_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_8BSI), rt_util_clamp_to_8BSI((double) SCHAR_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_16BUI), rt_util_clamp_to_16BUI((double) SHRT_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_16BSI), rt_util_clamp_to_16BSI((double) SHRT_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_32BUI), rt_util_clamp_to_32BUI((double) INT_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_32BSI), rt_util_clamp_to_32BSI((double) INT_MIN), DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_32BF), -FLT_MAX, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_64BF), -DBL_MAX, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(rt_pixtype_get_min_value(PT_END), rt_util_clamp_to_8BUI((double) CHAR_MIN), DBL_EPSILON); } static void test_pixtype_compare_clamped_values() { int isequal = 0; /* 1BB */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_1BB, 0, 0, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_1BB, 0, 1, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_1BB, 1, 0, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_1BB, 1, 1, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_1BB, 0, 2, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_1BB, 0, -9999, &isequal), ES_NONE); CU_ASSERT(isequal); /* 2BUI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_2BUI, 0, 0, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_2BUI, 0, 1, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_2BUI, 0, 3, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_2BUI, 1, 1, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_2BUI, 3, 2, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_2BUI, 4, 0, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_2BUI, -1, 0, &isequal), ES_NONE); CU_ASSERT(isequal); /* 4BUI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_4BUI, 10, 10, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_4BUI, 10, 1, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_4BUI, 0, 15, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_4BUI, 15, 15, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_4BUI, 0, 16, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_4BUI, 16, 15, &isequal), ES_NONE); CU_ASSERT(isequal); /* 8BUI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BUI, 155, 155, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BUI, 155, 255, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BUI, 0, 155, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BUI, -1, -1, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BUI, 0, -1, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BUI, 256, 255, &isequal), ES_NONE); CU_ASSERT(isequal); /* 8BSI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BSI, 120, 120, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BSI, -120, 120, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BSI, -10, -10, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BSI, -128, -128, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BSI, -128, 128, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BSI, -129, -128, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_8BSI, 129, 128, &isequal), ES_NONE); CU_ASSERT(isequal); /* 16BUI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BUI, 65535, 65535, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BUI, 0, 0, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BUI, 12345, 12344, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BUI, 0, 65535, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BUI, 65536, -1, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BUI, -9999, 0, &isequal), ES_NONE); CU_ASSERT(isequal); /* 16BSI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BSI, -32000, -32000, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BSI, -32767, -32767, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BSI, 32767, 32768, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BSI, 32766, 32768, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BSI, 0, -32768, &isequal), ES_NONE); CU_ASSERT(!isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_16BSI, 32767, -32767, &isequal), ES_NONE); CU_ASSERT(!isequal); /* 32BUI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_32BUI, 4294967295UL, 4294967295UL, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_32BUI, 4294967296ULL, 4294967295UL, &isequal), ES_NONE); CU_ASSERT(isequal); /* 32BSI */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_32BSI, 2147483647, 2147483647, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_32BSI, 2147483648UL, 2147483647, &isequal), ES_NONE); CU_ASSERT(isequal); /* 32BF */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_32BF, 65535.5, 65535.5, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_32BF, 0.0060000000521540, 0.0060000000521540, &isequal), ES_NONE); CU_ASSERT(isequal); /* 64BF */ CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_64BF, 65535.5, 65535.5, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_EQUAL(rt_pixtype_compare_clamped_values(PT_64BF, 0.0060000000521540, 0.0060000000521540, &isequal), ES_NONE); CU_ASSERT(isequal); CU_ASSERT_NOT_EQUAL(rt_pixtype_compare_clamped_values(PT_END, 1, 1, &isequal), ES_NONE); } /* register tests */ CU_TestInfo pixtype_tests[] = { PG_TEST(test_pixtype_size), PG_TEST(test_pixtype_alignment), PG_TEST(test_pixtype_name), PG_TEST(test_pixtype_index_from_name), PG_TEST(test_pixtype_get_min_value), PG_TEST(test_pixtype_compare_clamped_values), CU_TEST_INFO_NULL }; CU_SuiteInfo pixtype_suite = {"pixtype", NULL, NULL, pixtype_tests}; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/cunit/cu_band_stats.c�������������������������������������������0000644�0000000�0000000�00000017163�12233537203�022146� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * PostGIS Raster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2012 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "CUnit/Basic.h" #include "cu_tester.h" static void test_band_stats() { rt_bandstats stats = NULL; rt_histogram histogram = NULL; double bin_width[] = {100}; double quantiles[] = {0.1, 0.3, 0.5, 0.7, 0.9}; double quantiles2[] = {0.66666667}; rt_quantile quantile = NULL; uint32_t count = 0; rt_raster raster; rt_band band; uint32_t x; uint32_t xmax = 100; uint32_t y; uint32_t ymax = 100; uint32_t max_run; double nodata; uint32_t values[] = {0, 91, 55, 86, 76, 41, 36, 97, 25, 63, 68, 2, 78, 15, 82, 47}; struct quantile_llist *qlls = NULL; uint32_t qlls_count; raster = rt_raster_new(xmax, ymax); CU_ASSERT(raster != NULL); band = cu_add_band(raster, PT_32BUI, 1, 0); CU_ASSERT(band != NULL); for (x = 0; x < xmax; x++) { for (y = 0; y < ymax; y++) { rt_band_set_pixel(band, x, y, x + y, NULL); } } rt_band_get_nodata(band, &nodata); CU_ASSERT_DOUBLE_EQUAL(nodata, 0, DBL_EPSILON); stats = (rt_bandstats) rt_band_get_summary_stats(band, 1, 0, 1, NULL, NULL, NULL); CU_ASSERT(stats != NULL); CU_ASSERT_DOUBLE_EQUAL(stats->min, 1, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(stats->max, 198, DBL_EPSILON); quantile = (rt_quantile) rt_band_get_quantiles(stats, NULL, 0, &count); CU_ASSERT(quantile != NULL); rtdealloc(quantile); histogram = (rt_histogram) rt_band_get_histogram(stats, 0, NULL, 0, 0, 0, 0, &count); CU_ASSERT(histogram != NULL); rtdealloc(histogram); histogram = (rt_histogram) rt_band_get_histogram(stats, 0, NULL, 0, 1, 0, 0, &count); CU_ASSERT(histogram != NULL); rtdealloc(histogram); histogram = (rt_histogram) rt_band_get_histogram(stats, 0, bin_width, 1, 0, 0, 0, &count); CU_ASSERT(histogram != NULL); rtdealloc(histogram); rtdealloc(stats->values); rtdealloc(stats); stats = (rt_bandstats) rt_band_get_summary_stats(band, 1, 0.1, 1, NULL, NULL, NULL); CU_ASSERT(stats != NULL); quantile = (rt_quantile) rt_band_get_quantiles(stats, NULL, 0, &count); CU_ASSERT(quantile != NULL); rtdealloc(quantile); quantile = (rt_quantile) rt_band_get_quantiles(stats, quantiles, 5, &count); CU_ASSERT(quantile != NULL); CU_ASSERT_EQUAL(count, 5); rtdealloc(quantile); histogram = (rt_histogram) rt_band_get_histogram(stats, 0, NULL, 0, 0, 0, 0, &count); CU_ASSERT(histogram != NULL); rtdealloc(histogram); rtdealloc(stats->values); rtdealloc(stats); stats = (rt_bandstats) rt_band_get_summary_stats(band, 1, 0.15, 0, NULL, NULL, NULL); CU_ASSERT(stats != NULL); rtdealloc(stats); stats = (rt_bandstats) rt_band_get_summary_stats(band, 1, 0.2, 0, NULL, NULL, NULL); CU_ASSERT(stats != NULL); rtdealloc(stats); stats = (rt_bandstats) rt_band_get_summary_stats(band, 1, 0.25, 0, NULL, NULL, NULL); CU_ASSERT(stats != NULL); rtdealloc(stats); stats = (rt_bandstats) rt_band_get_summary_stats(band, 0, 0, 1, NULL, NULL, NULL); CU_ASSERT(stats != NULL); CU_ASSERT_DOUBLE_EQUAL(stats->min, 0, DBL_EPSILON); CU_ASSERT_DOUBLE_EQUAL(stats->max, 198, DBL_EPSILON); quantile = (rt_quantile) rt_band_get_quantiles(stats, NULL, 0, &count); CU_ASSERT(quantile != NULL); rtdealloc(quantile); rtdealloc(stats->values); rtdealloc(stats); stats = (rt_bandstats) rt_band_get_summary_stats(band, 0, 0.1, 1, NULL, NULL, NULL); CU_ASSERT(stats != NULL); quantile = (rt_quantile) rt_band_get_quantiles(stats, NULL, 0, &count); CU_ASSERT(quantile != NULL); rtdealloc(quantile); rtdealloc(stats->values); rtdealloc(stats); cu_free_raster(raster); xmax = 4; ymax = 4; raster = rt_raster_new(4, 4); CU_ASSERT(raster != NULL); band = cu_add_band(raster, PT_8BUI, 0, 0); CU_ASSERT(band != NULL); rt_band_set_nodata(band, 0, NULL); for (x = 0; x < xmax; x++) { for (y = 0; y < ymax; y++) { rt_band_set_pixel(band, x, y, values[(x * ymax) + y], NULL); } } rt_band_get_nodata(band, &nodata); CU_ASSERT_DOUBLE_EQUAL(nodata, 0, DBL_EPSILON); quantile = (rt_quantile) rt_band_get_quantiles_stream( band, 1, 1, 15, &qlls, &qlls_count, quantiles2, 1, &count); CU_ASSERT(quantile != NULL); CU_ASSERT_NOT_EQUAL(count, 0); CU_ASSERT_NOT_EQUAL(qlls_count, 0); CU_ASSERT_DOUBLE_EQUAL(quantile[0].value, 78, DBL_EPSILON); rtdealloc(quantile); quantile_llist_destroy(&qlls, qlls_count); qlls = NULL; qlls_count = 0; cu_free_raster(raster); xmax = 100; ymax = 100; raster = rt_raster_new(xmax, ymax); CU_ASSERT(raster != NULL); band = cu_add_band(raster, PT_64BF, 0, 0); CU_ASSERT(band != NULL); rt_band_set_nodata(band, 0, NULL); for (x = 0; x < xmax; x++) { for (y = 0; y < ymax; y++) { rt_band_set_pixel(band, x, y, (((double) x * y) + (x + y) + (x + y * x)) / (x + y + 1), NULL); } } rt_band_get_nodata(band, &nodata); CU_ASSERT_DOUBLE_EQUAL(nodata, 0, DBL_EPSILON); max_run = 5; for (x = 0; x < max_run; x++) { quantile = (rt_quantile) rt_band_get_quantiles_stream( band, 1, 1, xmax * ymax * max_run, &qlls, &qlls_count, quantiles2, 1, &count); CU_ASSERT(quantile != NULL); CU_ASSERT_NOT_EQUAL(count, 0); CU_ASSERT_NOT_EQUAL(qlls_count, 0); rtdealloc(quantile); } quantile_llist_destroy(&qlls, qlls_count); qlls = NULL; qlls_count = 0; cu_free_raster(raster); } static void test_band_value_count() { rt_valuecount vcnts = NULL; rt_raster raster; rt_band band; uint32_t x; uint32_t xmax = 100; uint32_t y; uint32_t ymax = 100; uint32_t rtn = 0; double count[] = {3, 4, 5}; raster = rt_raster_new(xmax, ymax); CU_ASSERT(raster != NULL); /* or we're out of virtual memory */ band = cu_add_band(raster, PT_64BF, 0, 0); CU_ASSERT(band != NULL); rt_band_set_nodata(band, 0, NULL); for (x = 0; x < xmax; x++) { for (y = 0; y < ymax; y++) { rt_band_set_pixel(band, x, y, (((double) x * y) + (x + y) + (x + y * x)) / (x + y + 1), NULL); } } vcnts = rt_band_get_value_count(band, 1, NULL, 0, 0, NULL, &rtn); CU_ASSERT(vcnts != NULL); CU_ASSERT_NOT_EQUAL(rtn, 0); rtdealloc(vcnts); vcnts = rt_band_get_value_count(band, 1, NULL, 0, 0.01, NULL, &rtn); CU_ASSERT(vcnts != NULL); CU_ASSERT_NOT_EQUAL(rtn, 0); rtdealloc(vcnts); vcnts = rt_band_get_value_count(band, 1, NULL, 0, 0.1, NULL, &rtn); CU_ASSERT(vcnts != NULL); CU_ASSERT_NOT_EQUAL(rtn, 0); rtdealloc(vcnts); vcnts = rt_band_get_value_count(band, 1, NULL, 0, 1, NULL, &rtn); CU_ASSERT(vcnts != NULL); CU_ASSERT_NOT_EQUAL(rtn, 0); rtdealloc(vcnts); vcnts = rt_band_get_value_count(band, 1, NULL, 0, 10, NULL, &rtn); CU_ASSERT(vcnts != NULL); CU_ASSERT_NOT_EQUAL(rtn, 0); rtdealloc(vcnts); vcnts = rt_band_get_value_count(band, 1, count, 3, 1, NULL, &rtn); CU_ASSERT(vcnts != NULL); CU_ASSERT_NOT_EQUAL(rtn, 0); rtdealloc(vcnts); cu_free_raster(raster); } /* register tests */ CU_TestInfo band_stats_tests[] = { PG_TEST(test_band_stats), PG_TEST(test_band_value_count), CU_TEST_INFO_NULL }; CU_SuiteInfo band_stats_suite = {"band_stats", NULL, NULL, band_stats_tests}; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/test/Makefile.in�����������������������������������������������������0000644�0000000�0000000�00000002230�12233537203�020101� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id$ # # Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# RT_CORE=../rt_core all: check core-check: $(MAKE) -C cunit check check: core-check $(MAKE) -C regress check clean: $(MAKE) -C cunit $@ $(MAKE) -C regress $@ distclean: clean $(MAKE) -C cunit $@ $(MAKE) -C regress $@ rm -f Makefile ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_core/�������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016520� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_core/rt_api.c�����������������������������������������������������0000644�0000000�0000000�00001361733�12266123612�020156� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * $Id: rt_api.c 12186 2014-01-17 03:46:18Z dustymugs $ * * WKTRaster - Raster Types for PostGIS * http://trac.osgeo.org/postgis/wiki/WKTRaster * * Copyright (C) 2011-2013 Regents of the University of California * <bkpark@ucdavis.edu> * Copyright (C) 2010-2011 Jorge Arevalo <jorge.arevalo@deimos-space.com> * Copyright (C) 2010-2011 David Zwarg <dzwarg@azavea.com> * Copyright (C) 2009-2011 Pierre Racine <pierre.racine@sbf.ulaval.ca> * Copyright (C) 2009-2011 Mateusz Loskot <mateusz@loskot.net> * Copyright (C) 2008-2009 Sandro Santilli <strk@keybit.net> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include <math.h> #include <stdio.h> /* for printf (default message handler) */ #include <stdarg.h> /* for va_list, va_start etc */ #include <string.h> /* for memcpy and strlen */ #include <assert.h> #include <time.h> /* for time */ #include "rt_api.h" #include "gdal_vrt.h" /****************************************************************************** * Some rules for *.(c|h) files in rt_core * * All functions in rt_core that receive a band index parameter * must be 0-based * * Variables and functions internal for a public function should be prefixed * with _rti_, e.g. _rti_iterator_arg. ******************************************************************************/ /*--- Utilities -------------------------------------------------*/ static void swap_char(uint8_t *a, uint8_t *b) { uint8_t c = 0; assert(NULL != a && NULL != b); c = *a; *a = *b; *b = c; } static void flip_endian_16(uint8_t *d) { assert(NULL != d); swap_char(d, d + 1); } static void flip_endian_32(uint8_t *d) { assert(NULL != d); swap_char(d, d + 3); swap_char(d + 1, d + 2); } static void flip_endian_64(uint8_t *d) { assert(NULL != d); swap_char(d + 7, d); swap_char(d + 6, d + 1); swap_char(d + 5, d + 2); swap_char(d + 4, d + 3); } uint8_t rt_util_clamp_to_1BB(double value) { return (uint8_t)fmin(fmax((value), 0), POSTGIS_RT_1BBMAX); } uint8_t rt_util_clamp_to_2BUI(double value) { return (uint8_t)fmin(fmax((value), 0), POSTGIS_RT_2BUIMAX); } uint8_t rt_util_clamp_to_4BUI(double value) { return (uint8_t)fmin(fmax((value), 0), POSTGIS_RT_4BUIMAX); } int8_t rt_util_clamp_to_8BSI(double value) { return (int8_t)fmin(fmax((value), SCHAR_MIN), SCHAR_MAX); } uint8_t rt_util_clamp_to_8BUI(double value) { return (uint8_t)fmin(fmax((value), 0), UCHAR_MAX); } int16_t rt_util_clamp_to_16BSI(double value) { return (int16_t)fmin(fmax((value), SHRT_MIN), SHRT_MAX); } uint16_t rt_util_clamp_to_16BUI(double value) { return (uint16_t)fmin(fmax((value), 0), USHRT_MAX); } int32_t rt_util_clamp_to_32BSI(double value) { return (int32_t)fmin(fmax((value), INT_MIN), INT_MAX); } uint32_t rt_util_clamp_to_32BUI(double value) { return (uint32_t)fmin(fmax((value), 0), UINT_MAX); } float rt_util_clamp_to_32F(double value) { return (float)fmin(fmax((value), -FLT_MAX), FLT_MAX); } /* quicksort */ #define SWAP(x, y) { double t; t = x; x = y; y = t; } #define ORDER(x, y) if (x > y) SWAP(x, y) static double pivot(double *left, double *right) { double l, m, r, *p; l = *left; m = *(left + (right - left) / 2); r = *right; /* order */ ORDER(l, m); ORDER(l, r); ORDER(m, r); /* pivot is higher of two values */ if (l < m) return m; if (m < r) return r; /* find pivot that isn't left */ for (p = left + 1; p <= right; ++p) { if (*p != *left) return (*p < *left) ? *left : *p; } /* all values are same */ return -1; } static double *partition(double *left, double *right, double pivot) { while (left <= right) { while (*left < pivot) ++left; while (*right >= pivot) --right; if (left < right) { SWAP(*left, *right); ++left; --right; } } return left; } static void quicksort(double *left, double *right) { double p = pivot(left, right); double *pos; if (p != -1) { pos = partition(left, right, p); quicksort(left, pos - 1); quicksort(pos, right); } } /** * Convert cstring name to GDAL Resample Algorithm * * @param algname : cstring name to convert * * @return valid GDAL resampling algorithm */ GDALResampleAlg rt_util_gdal_resample_alg(const char *algname) { assert(algname != NULL && strlen(algname) > 0); if (strcmp(algname, "NEARESTNEIGHBOUR") == 0) return GRA_NearestNeighbour; else if (strcmp(algname, "NEARESTNEIGHBOR") == 0) return GRA_NearestNeighbour; else if (strcmp(algname, "BILINEAR") == 0) return GRA_Bilinear; else if (strcmp(algname, "CUBICSPLINE") == 0) return GRA_CubicSpline; else if (strcmp(algname, "CUBIC") == 0) return GRA_Cubic; else if (strcmp(algname, "LANCZOS") == 0) return GRA_Lanczos; return GRA_NearestNeighbour; } /** * Convert rt_pixtype to GDALDataType * * @param pt : pixeltype to convert * * @return valid GDALDataType */ GDALDataType rt_util_pixtype_to_gdal_datatype(rt_pixtype pt) { switch (pt) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BUI: return GDT_Byte; case PT_8BSI: case PT_16BSI: return GDT_Int16; case PT_16BUI: return GDT_UInt16; case PT_32BSI: return GDT_Int32; case PT_32BUI: return GDT_UInt32; case PT_32BF: return GDT_Float32; case PT_64BF: return GDT_Float64; default: return GDT_Unknown; } return GDT_Unknown; } /** * Convert GDALDataType to rt_pixtype * * @param gdt : GDAL datatype to convert * * @return valid rt_pixtype */ rt_pixtype rt_util_gdal_datatype_to_pixtype(GDALDataType gdt) { switch (gdt) { case GDT_Byte: return PT_8BUI; case GDT_UInt16: return PT_16BUI; case GDT_Int16: return PT_16BSI; case GDT_UInt32: return PT_32BUI; case GDT_Int32: return PT_32BSI; case GDT_Float32: return PT_32BF; case GDT_Float64: return PT_64BF; default: return PT_END; } return PT_END; } /* get GDAL runtime version information */ const char* rt_util_gdal_version(const char *request) { if (NULL == request || !strlen(request)) return GDALVersionInfo("RELEASE_NAME"); else return GDALVersionInfo(request); } /* computed extent type */ rt_extenttype rt_util_extent_type(const char *name) { assert(name != NULL && strlen(name) > 0); if (strcmp(name, "UNION") == 0) return ET_UNION; else if (strcmp(name, "FIRST") == 0) return ET_FIRST; else if (strcmp(name, "SECOND") == 0) return ET_SECOND; else if (strcmp(name, "LAST") == 0) return ET_LAST; else if (strcmp(name, "CUSTOM") == 0) return ET_CUSTOM; else return ET_INTERSECTION; } /* convert the spatial reference string from a GDAL recognized format to either WKT or Proj4 */ char* rt_util_gdal_convert_sr(const char *srs, int proj4) { OGRSpatialReferenceH hsrs; char *rtn = NULL; assert(srs != NULL); hsrs = OSRNewSpatialReference(NULL); if (OSRSetFromUserInput(hsrs, srs) == OGRERR_NONE) { if (proj4) OSRExportToProj4(hsrs, &rtn); else OSRExportToWkt(hsrs, &rtn); } else { rterror("rt_util_gdal_convert_sr: Could not process the provided srs: %s", srs); return NULL; } OSRDestroySpatialReference(hsrs); if (rtn == NULL) { rterror("rt_util_gdal_convert_sr: Could not process the provided srs: %s", srs); return NULL; } return rtn; } /* is the spatial reference string supported by GDAL */ int rt_util_gdal_supported_sr(const char *srs) { OGRSpatialReferenceH hsrs; OGRErr rtn = OGRERR_NONE; assert(srs != NULL); hsrs = OSRNewSpatialReference(NULL); rtn = OSRSetFromUserInput(hsrs, srs); OSRDestroySpatialReference(hsrs); if (rtn == OGRERR_NONE) return 1; else return 0; } /** * Get auth name and code * * @param authname: authority organization of code. calling function * is expected to free the memory allocated for value * @param authcode: code assigned by authority organization. calling function * is expected to free the memory allocated for value * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_util_gdal_sr_auth_info(GDALDatasetH hds, char **authname, char **authcode) { const char *srs = NULL; assert(authname != NULL); assert(authcode != NULL); *authname = NULL; *authcode = NULL; srs = GDALGetProjectionRef(hds); if (srs != NULL && srs[0] != '\0') { OGRSpatialReferenceH hSRS = OSRNewSpatialReference(NULL); if (OSRSetFromUserInput(hSRS, srs) == OGRERR_NONE) { const char* pszAuthorityName = OSRGetAuthorityName(hSRS, NULL); const char* pszAuthorityCode = OSRGetAuthorityCode(hSRS, NULL); if (pszAuthorityName != NULL && pszAuthorityCode != NULL) { *authname = rtalloc(sizeof(char) * (strlen(pszAuthorityName) + 1)); *authcode = rtalloc(sizeof(char) * (strlen(pszAuthorityCode) + 1)); if (*authname == NULL || *authcode == NULL) { rterror("rt_util_gdal_sr_auth_info: Could not allocate memory for auth name and code"); if (*authname != NULL) rtdealloc(*authname); if (*authcode != NULL) rtdealloc(*authcode); OSRDestroySpatialReference(hSRS); return ES_ERROR; } strncpy(*authname, pszAuthorityName, strlen(pszAuthorityName) + 1); strncpy(*authcode, pszAuthorityCode, strlen(pszAuthorityCode) + 1); } } OSRDestroySpatialReference(hSRS); } return ES_NONE; } /* is GDAL configured correctly? */ int rt_util_gdal_configured(void) { /* set of EPSG codes */ if (!rt_util_gdal_supported_sr("EPSG:4326")) return 0; if (!rt_util_gdal_supported_sr("EPSG:4269")) return 0; if (!rt_util_gdal_supported_sr("EPSG:4267")) return 0; if (!rt_util_gdal_supported_sr("EPSG:3310")) return 0; if (!rt_util_gdal_supported_sr("EPSG:2163")) return 0; return 1; } /* register all GDAL drivers */ void rt_util_gdal_register_all(void) { static int registered = 0; if (registered) return; GDALAllRegister(); registered = 1; } /* is the driver registered? */ int rt_util_gdal_driver_registered(const char *drv) { int count = GDALGetDriverCount(); int i = 0; GDALDriverH hdrv = NULL; if (drv == NULL || !strlen(drv) || count < 1) return 0; for (i = 0; i < count; i++) { hdrv = GDALGetDriver(i); if (hdrv == NULL) continue; if (strcmp(drv, GDALGetDriverShortName(hdrv)) == 0) return 1; } return 0; } void rt_util_from_ogr_envelope( OGREnvelope env, rt_envelope *ext ) { assert(ext != NULL); ext->MinX = env.MinX; ext->MaxX = env.MaxX; ext->MinY = env.MinY; ext->MaxY = env.MaxY; ext->UpperLeftX = env.MinX; ext->UpperLeftY = env.MaxY; } void rt_util_to_ogr_envelope( rt_envelope ext, OGREnvelope *env ) { assert(env != NULL); env->MinX = ext.MinX; env->MaxX = ext.MaxX; env->MinY = ext.MinY; env->MaxY = ext.MaxY; } LWPOLY * rt_util_envelope_to_lwpoly( rt_envelope env ) { LWPOLY *npoly = NULL; POINTARRAY **rings = NULL; POINTARRAY *pts = NULL; POINT4D p4d; rings = (POINTARRAY **) rtalloc(sizeof (POINTARRAY*)); if (!rings) { rterror("rt_util_envelope_to_lwpoly: Out of memory building envelope's geometry"); return NULL; } rings[0] = ptarray_construct(0, 0, 5); if (!rings[0]) { rterror("rt_util_envelope_to_lwpoly: Out of memory building envelope's geometry ring"); return NULL; } pts = rings[0]; /* Upper-left corner (first and last points) */ p4d.x = env.MinX; p4d.y = env.MaxY; ptarray_set_point4d(pts, 0, &p4d); ptarray_set_point4d(pts, 4, &p4d); /* Upper-right corner (we go clockwise) */ p4d.x = env.MaxX; p4d.y = env.MaxY; ptarray_set_point4d(pts, 1, &p4d); /* Lower-right corner */ p4d.x = env.MaxX; p4d.y = env.MinY; ptarray_set_point4d(pts, 2, &p4d); /* Lower-left corner */ p4d.x = env.MinX; p4d.y = env.MinY; ptarray_set_point4d(pts, 3, &p4d); npoly = lwpoly_construct(SRID_UNKNOWN, 0, 1, rings); if (npoly == NULL) { rterror("rt_util_envelope_to_lwpoly: Could not build envelope's geometry"); return NULL; } return npoly; } int rt_util_same_geotransform_matrix(double *gt1, double *gt2) { int k = 0; if (gt1 == NULL || gt2 == NULL) return FALSE; for (k = 0; k < 6; k++) { if (FLT_NEQ(gt1[k], gt2[k])) return FALSE; } return TRUE; } /* coordinates in RGB and HSV are floating point values between 0 and 1 */ rt_errorstate rt_util_rgb_to_hsv(double rgb[3], double hsv[3]) { int i; double minc; double maxc; double h = 0.; double s = 0.; double v = 0.; minc = rgb[0]; maxc = rgb[0]; /* get min and max values from RGB */ for (i = 1; i < 3; i++) { if (rgb[i] > maxc) maxc = rgb[i]; if (rgb[i] < minc) minc = rgb[i]; } v = maxc; if (maxc != minc) { double diff = 0.; double rc = 0.; double gc = 0.; double bc = 0.; double junk = 0.; diff = maxc - minc; s = diff / maxc; rc = (maxc - rgb[0]) / diff; gc = (maxc - rgb[1]) / diff; bc = (maxc - rgb[2]) / diff; if (DBL_EQ(rgb[0], maxc)) h = bc - gc; else if (DBL_EQ(rgb[1], maxc)) h = 2.0 + rc - bc; else h = 4.0 + gc - rc; h = modf((h / 6.0), &junk); } hsv[0] = h; hsv[1] = s; hsv[2] = v; return ES_NONE; } /* coordinates in RGB and HSV are floating point values between 0 and 1 */ rt_errorstate rt_util_hsv_to_rgb(double hsv[3], double rgb[3]) { double r = 0; double g = 0; double b = 0; double v = hsv[2]; if (DBL_EQ(hsv[1], 0.)) r = g = b = v; else { double i; double f; double p; double q; double t; int a; i = floor(hsv[0] * 6.); f = (hsv[0] * 6.0) - i; p = v * (1. - hsv[1]); q = v * (1. - hsv[1] * f); t = v * (1. - hsv[1] * (1. - f)); a = (int) i; switch (a) { case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; case 0: case 6: default: r = v; g = t; b = p; break; } } rgb[0] = r; rgb[1] = g; rgb[2] = b; return ES_NONE; } /*- rt_context -------------------------------------------------------*/ /* Functions definitions */ void * init_rt_allocator(size_t size); void * init_rt_reallocator(void * mem, size_t size); void init_rt_deallocator(void * mem); void init_rt_errorreporter(const char * fmt, va_list ap); void init_rt_warnreporter(const char * fmt, va_list ap); void init_rt_inforeporter(const char * fmt, va_list ap); /* * Default allocators * * We include some default allocators that use malloc/free/realloc * along with stdout/stderr since this is the most common use case * */ void * default_rt_allocator(size_t size) { void *mem = malloc(size); return mem; } void * default_rt_reallocator(void *mem, size_t size) { void *ret = realloc(mem, size); return ret; } void default_rt_deallocator(void *mem) { free(mem); } void default_rt_error_handler(const char *fmt, va_list ap) { static const char *label = "ERROR: "; char newfmt[1024] = {0}; snprintf(newfmt, 1024, "%s%s\n", label, fmt); newfmt[1023] = '\0'; vprintf(newfmt, ap); va_end(ap); } void default_rt_warning_handler(const char *fmt, va_list ap) { static const char *label = "WARNING: "; char newfmt[1024] = {0}; snprintf(newfmt, 1024, "%s%s\n", label, fmt); newfmt[1023] = '\0'; vprintf(newfmt, ap); va_end(ap); } void default_rt_info_handler(const char *fmt, va_list ap) { static const char *label = "INFO: "; char newfmt[1024] = {0}; snprintf(newfmt, 1024, "%s%s\n", label, fmt); newfmt[1023] = '\0'; vprintf(newfmt, ap); va_end(ap); } /** * Struct definition here */ struct rt_context_t { rt_allocator alloc; rt_reallocator realloc; rt_deallocator dealloc; rt_message_handler err; rt_message_handler warn; rt_message_handler info; }; /* Static variable, to be used for all rt_core functions */ static struct rt_context_t ctx_t = { .alloc = init_rt_allocator, .realloc = init_rt_reallocator, .dealloc = init_rt_deallocator, .err = init_rt_errorreporter, .warn = init_rt_warnreporter, .info = init_rt_inforeporter }; /** * This function is normally called by rt_init_allocators when no special memory * management is needed. Useful in raster core testing and in the (future) * loader, when we need to use raster core functions but we don't have * PostgreSQL backend behind. We must take care of memory by ourselves in those * situations */ void rt_install_default_allocators(void) { ctx_t.alloc = default_rt_allocator; ctx_t.realloc = default_rt_reallocator; ctx_t.dealloc = default_rt_deallocator; ctx_t.err = default_rt_error_handler; ctx_t.info = default_rt_info_handler; ctx_t.warn = default_rt_warning_handler; } /** * This function is called by rt_init_allocators when the PostgreSQL backend is * taking care of the memory and we want to use palloc family */ void rt_set_handlers(rt_allocator allocator, rt_reallocator reallocator, rt_deallocator deallocator, rt_message_handler error_handler, rt_message_handler info_handler, rt_message_handler warning_handler) { ctx_t.alloc = allocator; ctx_t.realloc = reallocator; ctx_t.dealloc = deallocator; ctx_t.err = error_handler; ctx_t.info = info_handler; ctx_t.warn = warning_handler; } /** * Initialisation allocators * * These are used the first time any of the allocators are called to enable * executables/libraries that link into raster to be able to set up their own * allocators. This is mainly useful for older PostgreSQL versions that don't * have functions that are called upon startup. **/ void * init_rt_allocator(size_t size) { rt_init_allocators(); return ctx_t.alloc(size); } void init_rt_deallocator(void *mem) { rt_init_allocators(); ctx_t.dealloc(mem); } void * init_rt_reallocator(void *mem, size_t size) { rt_init_allocators(); return ctx_t.realloc(mem, size); } void init_rt_inforeporter(const char *fmt, va_list ap) { rt_init_allocators(); (*ctx_t.info)(fmt, ap); } void init_rt_warnreporter(const char *fmt, va_list ap) { rt_init_allocators(); (*ctx_t.warn)(fmt, ap); } void init_rt_errorreporter(const char *fmt, va_list ap) { rt_init_allocators(); (*ctx_t.err)(fmt, ap); } /** * Raster core memory management functions. * * They use the functions defined by the caller. */ void * rtalloc(size_t size) { void * mem = ctx_t.alloc(size); RASTER_DEBUGF(5, "rtalloc called: %d@%p", size, mem); return mem; } void * rtrealloc(void * mem, size_t size) { void * result = ctx_t.realloc(mem, size); RASTER_DEBUGF(5, "rtrealloc called: %d@%p", size, result); return result; } void rtdealloc(void * mem) { ctx_t.dealloc(mem); RASTER_DEBUG(5, "rtdealloc called"); } /** * Raster core error and info handlers * * Since variadic functions cannot pass their parameters directly, we need * wrappers for these functions to convert the arguments into a va_list * structure. */ void rterror(const char *fmt, ...) { va_list ap; va_start(ap, fmt); /* Call the supplied function */ (*ctx_t.err)(fmt, ap); va_end(ap); } void rtinfo(const char *fmt, ...) { va_list ap; va_start(ap, fmt); /* Call the supplied function */ (*ctx_t.info)(fmt, ap); va_end(ap); } void rtwarn(const char *fmt, ...) { va_list ap; va_start(ap, fmt); /* Call the supplied function */ (*ctx_t.warn)(fmt, ap); va_end(ap); } int rt_util_dbl_trunc_warning( double initialvalue, int32_t checkvalint, uint32_t checkvaluint, float checkvalfloat, double checkvaldouble, rt_pixtype pixtype ) { int result = 0; switch (pixtype) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BSI: case PT_8BUI: case PT_16BSI: case PT_16BUI: case PT_32BSI: { if (fabs(checkvalint - initialvalue) >= 1) { #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 rtwarn("Value set for %s band got clamped from %f to %d", rt_pixtype_name(pixtype), initialvalue, checkvalint ); #endif result = 1; } else if (FLT_NEQ(checkvalint, initialvalue)) { #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 rtwarn("Value set for %s band got truncated from %f to %d", rt_pixtype_name(pixtype), initialvalue, checkvalint ); #endif result = 1; } break; } case PT_32BUI: { if (fabs(checkvaluint - initialvalue) >= 1) { #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 rtwarn("Value set for %s band got clamped from %f to %u", rt_pixtype_name(pixtype), initialvalue, checkvaluint ); #endif result = 1; } else if (FLT_NEQ(checkvaluint, initialvalue)) { #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 rtwarn("Value set for %s band got truncated from %f to %u", rt_pixtype_name(pixtype), initialvalue, checkvaluint ); #endif result = 1; } break; } case PT_32BF: { /* For float, because the initial value is a double, there is very often a difference between the desired value and the obtained one */ if (FLT_NEQ(checkvalfloat, initialvalue)) { #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 rtwarn("Value set for %s band got converted from %f to %f", rt_pixtype_name(pixtype), initialvalue, checkvalfloat ); #endif result = 1; } break; } case PT_64BF: { if (FLT_NEQ(checkvaldouble, initialvalue)) { #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 rtwarn("Value set for %s band got converted from %f to %f", rt_pixtype_name(pixtype), initialvalue, checkvaldouble ); #endif result = 1; } break; } case PT_END: break; } return result; } /*--- Debug and Testing Utilities --------------------------------------------*/ #if POSTGIS_DEBUG_LEVEL > 2 static char* d_binary_to_hex(const uint8_t * const raw, uint32_t size, uint32_t *hexsize) { char* hex = NULL; uint32_t i = 0; assert(NULL != raw); assert(NULL != hexsize); *hexsize = size * 2; /* hex is 2 times bytes */ hex = (char*) rtalloc((*hexsize) + 1); if (!hex) { rterror("d_binary_to_hex: Out of memory hexifying raw binary"); return NULL; } hex[*hexsize] = '\0'; /* Null-terminate */ for (i = 0; i < size; ++i) { deparse_hex(raw[i], &(hex[2 * i])); } assert(NULL != hex); assert(0 == strlen(hex) % 2); return hex; } static void d_print_binary_hex(const char* msg, const uint8_t * const raw, uint32_t size) { char* hex = NULL; uint32_t hexsize = 0; assert(NULL != msg); assert(NULL != raw); hex = d_binary_to_hex(raw, size, &hexsize); if (NULL != hex) { rtinfo("%s\t%s", msg, hex); rtdealloc(hex); } } static size_t d_binptr_to_pos(const uint8_t * const ptr, const uint8_t * const end, size_t size) { assert(NULL != ptr && NULL != end); return (size - (end - ptr)); } #define CHECK_BINPTR_POSITION(ptr, end, size, pos) \ { if (pos != d_binptr_to_pos(ptr, end, size)) { \ fprintf(stderr, "Check of binary stream pointer position failed on line %d\n", __LINE__); \ fprintf(stderr, "\tactual = %lu, expected = %lu\n", (long unsigned)d_binptr_to_pos(ptr, end, size), (long unsigned)pos); \ } } #else #define CHECK_BINPTR_POSITION(ptr, end, size, pos) ((void)0); #endif /* ifndef POSTGIS_DEBUG_LEVEL > 3 */ /*- rt_pixeltype -----------------------------------------------------*/ int rt_pixtype_size(rt_pixtype pixtype) { int pixbytes = -1; switch (pixtype) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BSI: case PT_8BUI: pixbytes = 1; break; case PT_16BSI: case PT_16BUI: pixbytes = 2; break; case PT_32BSI: case PT_32BUI: case PT_32BF: pixbytes = 4; break; case PT_64BF: pixbytes = 8; break; default: rterror("rt_pixtype_size: Unknown pixeltype %d", pixtype); pixbytes = -1; break; } RASTER_DEBUGF(3, "Pixel type = %s and size = %d bytes", rt_pixtype_name(pixtype), pixbytes); return pixbytes; } int rt_pixtype_alignment(rt_pixtype pixtype) { return rt_pixtype_size(pixtype); } rt_pixtype rt_pixtype_index_from_name(const char* pixname) { assert(pixname && strlen(pixname) > 0); if (strcmp(pixname, "1BB") == 0) return PT_1BB; else if (strcmp(pixname, "2BUI") == 0) return PT_2BUI; else if (strcmp(pixname, "4BUI") == 0) return PT_4BUI; else if (strcmp(pixname, "8BSI") == 0) return PT_8BSI; else if (strcmp(pixname, "8BUI") == 0) return PT_8BUI; else if (strcmp(pixname, "16BSI") == 0) return PT_16BSI; else if (strcmp(pixname, "16BUI") == 0) return PT_16BUI; else if (strcmp(pixname, "32BSI") == 0) return PT_32BSI; else if (strcmp(pixname, "32BUI") == 0) return PT_32BUI; else if (strcmp(pixname, "32BF") == 0) return PT_32BF; else if (strcmp(pixname, "64BF") == 0) return PT_64BF; return PT_END; } const char* rt_pixtype_name(rt_pixtype pixtype) { switch (pixtype) { case PT_1BB: return "1BB"; case PT_2BUI: return "2BUI"; case PT_4BUI: return "4BUI"; case PT_8BSI: return "8BSI"; case PT_8BUI: return "8BUI"; case PT_16BSI: return "16BSI"; case PT_16BUI: return "16BUI"; case PT_32BSI: return "32BSI"; case PT_32BUI: return "32BUI"; case PT_32BF: return "32BF"; case PT_64BF: return "64BF"; default: rterror("rt_pixtype_name: Unknown pixeltype %d", pixtype); return "Unknown"; } } /** * Return minimum value possible for pixel type * * @param pixtype : the pixel type to get minimum possible value for * * @return the minimum possible value for the pixel type. */ double rt_pixtype_get_min_value(rt_pixtype pixtype) { switch (pixtype) { case PT_1BB: { return (double) rt_util_clamp_to_1BB((double) CHAR_MIN); } case PT_2BUI: { return (double) rt_util_clamp_to_2BUI((double) CHAR_MIN); } case PT_4BUI: { return (double) rt_util_clamp_to_4BUI((double) CHAR_MIN); } case PT_8BUI: { return (double) rt_util_clamp_to_8BUI((double) CHAR_MIN); } case PT_8BSI: { return (double) rt_util_clamp_to_8BSI((double) SCHAR_MIN); } case PT_16BSI: { return (double) rt_util_clamp_to_16BSI((double) SHRT_MIN); } case PT_16BUI: { return (double) rt_util_clamp_to_16BUI((double) SHRT_MIN); } case PT_32BSI: { return (double) rt_util_clamp_to_32BSI((double) INT_MIN); } case PT_32BUI: { return (double) rt_util_clamp_to_32BUI((double) INT_MIN); } case PT_32BF: { return (double) -FLT_MAX; } case PT_64BF: { return (double) -DBL_MAX; } default: { rterror("rt_pixtype_get_min_value: Unknown pixeltype %d", pixtype); return (double) rt_util_clamp_to_8BUI((double) CHAR_MIN); } } } /** * Returns 1 if clamped values are equal, 0 if not equal, -1 if error * * @param pixtype : the pixel type to clamp the provided values * @param val : value to compare to reference value * @param refval : reference value to be compared with * @param isequal : non-zero if clamped values are equal, 0 otherwise * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_pixtype_compare_clamped_values( rt_pixtype pixtype, double val, double refval, int *isequal ) { assert(isequal != NULL); *isequal = 0; switch (pixtype) { case PT_1BB: if (rt_util_clamp_to_1BB(val) == rt_util_clamp_to_1BB(refval)) *isequal = 1; break; case PT_2BUI: if (rt_util_clamp_to_2BUI(val) == rt_util_clamp_to_2BUI(refval)) *isequal = 1; break; case PT_4BUI: if (rt_util_clamp_to_4BUI(val) == rt_util_clamp_to_4BUI(refval)) *isequal = 1; break; case PT_8BSI: if (rt_util_clamp_to_8BSI(val) == rt_util_clamp_to_8BSI(refval)) *isequal = 1; break; case PT_8BUI: if (rt_util_clamp_to_8BUI(val) == rt_util_clamp_to_8BUI(refval)) *isequal = 1; break; case PT_16BSI: if (rt_util_clamp_to_16BSI(val) == rt_util_clamp_to_16BSI(refval)) *isequal = 1; break; case PT_16BUI: if (rt_util_clamp_to_16BUI(val) == rt_util_clamp_to_16BUI(refval)) *isequal = 1; break; case PT_32BSI: if (rt_util_clamp_to_32BSI(val) == rt_util_clamp_to_32BSI(refval)) *isequal = 1; break; case PT_32BUI: if (rt_util_clamp_to_32BUI(val) == rt_util_clamp_to_32BUI(refval)) *isequal = 1; break; case PT_32BF: if (FLT_EQ(rt_util_clamp_to_32F(val), rt_util_clamp_to_32F(refval))) *isequal = 1; break; case PT_64BF: if (FLT_EQ(val, refval)) *isequal = 1; break; default: rterror("rt_pixtype_compare_clamped_values: Unknown pixeltype %d", pixtype); return ES_ERROR; } return ES_NONE; } /*- rt_pixel ----------------------------------------------------------*/ /* * Convert an array of rt_pixel objects to two 2D arrays of value and NODATA. * The dimensions of the returned 2D array are [Y][X], going by row Y and * then column X. * * @param npixel : array of rt_pixel objects * @param count : number of elements in npixel * @param x : the column of the center pixel (0-based) * @param y : the line of the center pixel (0-based) * @param distancex : the number of pixels around the specified pixel * along the X axis * @param distancey : the number of pixels around the specified pixel * along the Y axis * @param value : pointer to pointer for 2D value array * @param nodata : pointer to pointer for 2D NODATA array * @param dimx : size of value and nodata along the X axis * @param dimy : size of value and nodata along the Y axis * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_pixel_set_to_array( rt_pixel npixel, int count, int x, int y, uint16_t distancex, uint16_t distancey, double ***value, int ***nodata, int *dimx, int *dimy ) { uint32_t i; uint32_t j; uint32_t dim[2] = {0}; double **values = NULL; int **nodatas = NULL; int zero[2] = {0}; int _x; int _y; assert(npixel != NULL && count > 0); assert(value != NULL); assert(nodata != NULL); /* dimensions */ dim[0] = distancex * 2 + 1; dim[1] = distancey * 2 + 1; RASTER_DEBUGF(4, "dimensions = %d x %d", dim[0], dim[1]); /* establish 2D arrays (Y axis) */ values = rtalloc(sizeof(double *) * dim[1]); nodatas = rtalloc(sizeof(int *) * dim[1]); if (values == NULL || nodatas == NULL) { rterror("rt_pixel_set_to_array: Could not allocate memory for 2D array"); return ES_ERROR; } /* initialize X axis */ for (i = 0; i < dim[1]; i++) { values[i] = rtalloc(sizeof(double) * dim[0]); nodatas[i] = rtalloc(sizeof(int) * dim[0]); if (values[i] == NULL || nodatas[i] == NULL) { rterror("rt_pixel_set_to_array: Could not allocate memory for dimension of 2D array"); if (values[i] == NULL) { for (j = 0; j < i; j++) { rtdealloc(values[j]); rtdealloc(nodatas[j]); } } else { for (j = 0; j <= i; j++) { rtdealloc(values[j]); if (j < i) rtdealloc(nodatas[j]); } } rtdealloc(values); rtdealloc(nodatas); return ES_ERROR; } /* set values to 0 */ memset(values[i], 0, sizeof(double) * dim[0]); /* set nodatas to 1 */ for (j = 0; j < dim[0]; j++) nodatas[i][j] = 1; } /* get 0,0 of grid */ zero[0] = x - distancex; zero[1] = y - distancey; /* populate 2D arrays */ for (i = 0; i < count; i++) { if (npixel[i].nodata) continue; _x = npixel[i].x - zero[0]; _y = npixel[i].y - zero[1]; RASTER_DEBUGF(4, "absolute x,y: %d x %d", npixel[i].x, npixel[i].y); RASTER_DEBUGF(4, "relative x,y: %d x %d", _x, _y); values[_y][_x] = npixel[i].value; nodatas[_y][_x] = 0; RASTER_DEBUGF(4, "(x, y, nodata, value) = (%d, %d, %d, %f)", _x, _y, nodatas[_y][_x], values[_y][_x]); } *value = &(*values); *nodata = &(*nodatas); if (dimx != NULL) *dimx = dim[0]; if (dimy != NULL) *dimy = dim[1]; return ES_NONE; } /*- rt_band ----------------------------------------------------------*/ /** * Create an in-db rt_band with no data * * @param width : number of pixel columns * @param height : number of pixel rows * @param pixtype : pixel type for the band * @param hasnodata : indicates if the band has nodata value * @param nodataval : the nodata value, will be appropriately * truncated to fit the pixtype size. * @param data : pointer to actual band data, required to * be aligned accordingly to * rt_pixtype_aligment(pixtype) and big enough * to hold raster width*height values. * Data will NOT be copied, ownership is left * to caller which is responsible to keep it * allocated for the whole lifetime of the returned * rt_band. * * @return an rt_band, or 0 on failure */ rt_band rt_band_new_inline( uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t* data ) { rt_band band = NULL; assert(NULL != data); band = rtalloc(sizeof(struct rt_band_t)); if (band == NULL) { rterror("rt_band_new_inline: Out of memory allocating rt_band"); return NULL; } RASTER_DEBUGF(3, "Created rt_band @ %p with pixtype %s", band, rt_pixtype_name(pixtype)); band->pixtype = pixtype; band->offline = 0; band->width = width; band->height = height; band->hasnodata = hasnodata ? 1 : 0; band->isnodata = FALSE; /* we don't know what is in data, so must be FALSE */ band->nodataval = 0; band->data.mem = data; band->ownsdata = 0; /* we do NOT own this data!!! */ band->raster = NULL; RASTER_DEBUGF(3, "Created rt_band with dimensions %d x %d", band->width, band->height); /* properly set nodataval as it may need to be constrained to the data type */ if (hasnodata && rt_band_set_nodata(band, nodataval, NULL) != ES_NONE) { rterror("rt_band_new_inline: Could not set NODATA value"); rt_band_destroy(band); return NULL; } return band; } /** * Create an out-db rt_band * * @param width : number of pixel columns * @param height : number of pixel rows * @param pixtype : pixel type for the band * @param hasnodata : indicates if the band has nodata value * @param nodataval : the nodata value, will be appropriately * truncated to fit the pixtype size. * @param bandNum : 0-based band number in the external file * to associate this band with. * @param path : NULL-terminated path string pointing to the file * containing band data. The string will NOT be * copied, ownership is left to caller which is * responsible to keep it allocated for the whole * lifetime of the returned rt_band. * * @return an rt_band, or 0 on failure */ rt_band rt_band_new_offline( uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t bandNum, const char* path ) { rt_band band = NULL; int pathlen = 0; assert(NULL != path); band = rtalloc(sizeof(struct rt_band_t)); if (band == NULL) { rterror("rt_band_new_offline: Out of memory allocating rt_band"); return NULL; } RASTER_DEBUGF(3, "Created rt_band @ %p with pixtype %s", band, rt_pixtype_name(pixtype) ); band->pixtype = pixtype; band->offline = 1; band->width = width; band->height = height; band->hasnodata = hasnodata ? 1 : 0; band->nodataval = 0; band->isnodata = FALSE; /* we don't know if the offline band is NODATA */ band->ownsdata = 0; /* offline, flag is useless as all offline data cache is owned internally */ band->raster = NULL; /* properly set nodataval as it may need to be constrained to the data type */ if (hasnodata && rt_band_set_nodata(band, nodataval, NULL) != ES_NONE) { rterror("rt_band_new_offline: Could not set NODATA value"); rt_band_destroy(band); return NULL; } band->data.offline.bandNum = bandNum; /* memory for data.offline.path is managed internally */ pathlen = strlen(path); band->data.offline.path = rtalloc(sizeof(char) * (pathlen + 1)); if (band->data.offline.path == NULL) { rterror("rt_band_new_offline: Out of memory allocating offline path"); rt_band_destroy(band); return NULL; } memcpy(band->data.offline.path, path, pathlen); band->data.offline.path[pathlen] = '\0'; band->data.offline.mem = NULL; return band; } /** * Create a new band duplicated from source band. Memory is allocated * for band path (if band is offline) or band data (if band is online). * The caller is responsible for freeing the memory when the returned * rt_band is destroyed. * * @param : the band to copy * * @return an rt_band or NULL on failure */ rt_band rt_band_duplicate(rt_band band) { rt_band rtn = NULL; assert(band != NULL); /* offline */ if (band->offline) { rtn = rt_band_new_offline( band->width, band->height, band->pixtype, band->hasnodata, band->nodataval, band->data.offline.bandNum, (const char *) band->data.offline.path ); } /* online */ else { uint8_t *data = NULL; data = rtalloc(rt_pixtype_size(band->pixtype) * band->width * band->height); if (data == NULL) { rterror("rt_band_duplicate: Out of memory allocating online band data"); return NULL; } memcpy(data, band->data.mem, rt_pixtype_size(band->pixtype) * band->width * band->height); rtn = rt_band_new_inline( band->width, band->height, band->pixtype, band->hasnodata, band->nodataval, data ); rt_band_set_ownsdata_flag(rtn, 1); /* we DO own this data!!! */ } if (rtn == NULL) { rterror("rt_band_duplicate: Could not copy band"); return NULL; } return rtn; } int rt_band_is_offline(rt_band band) { assert(NULL != band); return band->offline ? 1 : 0; } /** * Destroy a raster band * * @param band : the band to destroy */ void rt_band_destroy(rt_band band) { if (band == NULL) return; RASTER_DEBUGF(3, "Destroying rt_band @ %p", band); /* offline band */ if (band->offline) { /* memory cache */ if (band->data.offline.mem != NULL) rtdealloc(band->data.offline.mem); /* offline file path */ if (band->data.offline.path != NULL) rtdealloc(band->data.offline.path); } /* inline band and band owns the data */ else if (band->data.mem != NULL && band->ownsdata) rtdealloc(band->data.mem); rtdealloc(band); } const char* rt_band_get_ext_path(rt_band band) { assert(NULL != band); if (!band->offline) { RASTER_DEBUG(3, "rt_band_get_ext_path: Band is not offline"); return NULL; } return band->data.offline.path; } rt_errorstate rt_band_get_ext_band_num(rt_band band, uint8_t *bandnum) { assert(NULL != band); assert(NULL != bandnum); *bandnum = 0; if (!band->offline) { RASTER_DEBUG(3, "rt_band_get_ext_band_num: Band is not offline"); return ES_ERROR; } *bandnum = band->data.offline.bandNum; return ES_NONE; } /** * Get pointer to raster band data * * @param band : the band who's data to get * * @return pointer to band data or NULL if error */ void * rt_band_get_data(rt_band band) { assert(NULL != band); if (band->offline) { if (band->data.offline.mem != NULL) return band->data.offline.mem; if (rt_band_load_offline_data(band) != ES_NONE) return NULL; else return band->data.offline.mem; } else return band->data.mem; } /** * Load offline band's data. Loaded data is internally owned * and should not be released by the caller. Data will be * released when band is destroyed with rt_band_destroy(). * * @param band : the band who's data to get * * @return ES_NONE if success, ES_ERROR if failure */ rt_errorstate rt_band_load_offline_data(rt_band band) { GDALDatasetH hdsSrc = NULL; int nband = 0; VRTDatasetH hdsDst = NULL; VRTSourcedRasterBandH hbandDst = NULL; double gt[6] = {0.}; double ogt[6] = {0}; double offset[2] = {0}; rt_raster _rast = NULL; rt_band _band = NULL; int aligned = 0; int err = ES_NONE; assert(band != NULL); assert(band->raster != NULL); if (!band->offline) { rterror("rt_band_load_offline_data: Band is not offline"); return ES_ERROR; } else if (!strlen(band->data.offline.path)) { rterror("rt_band_load_offline_data: Offline band does not a have a specified file"); return ES_ERROR; } rt_util_gdal_register_all(); /* hdsSrc = GDALOpenShared(band->data.offline.path, GA_ReadOnly); */ hdsSrc = GDALOpen(band->data.offline.path, GA_ReadOnly); if (hdsSrc == NULL) { rterror("rt_band_load_offline_data: Cannot open offline raster: %s", band->data.offline.path); return ES_ERROR; } /* # of bands */ nband = GDALGetRasterCount(hdsSrc); if (!nband) { rterror("rt_band_load_offline_data: No bands found in offline raster: %s", band->data.offline.path); GDALClose(hdsSrc); return ES_ERROR; } /* bandNum is 0-based */ else if (band->data.offline.bandNum + 1 > nband) { rterror("rt_band_load_offline_data: Specified band %d not found in offline raster: %s", band->data.offline.bandNum, band->data.offline.path); GDALClose(hdsSrc); return ES_ERROR; } /* get raster's geotransform */ rt_raster_get_geotransform_matrix(band->raster, gt); RASTER_DEBUGF(3, "Raster geotransform (%f, %f, %f, %f, %f, %f)", gt[0], gt[1], gt[2], gt[3], gt[4], gt[5]); /* get offline raster's geotransform */ if (GDALGetGeoTransform(hdsSrc, ogt) != CE_None) { RASTER_DEBUG(4, "Using default geotransform matrix (0, 1, 0, 0, 0, -1)"); ogt[0] = 0; ogt[1] = 1; ogt[2] = 0; ogt[3] = 0; ogt[4] = 0; ogt[5] = -1; } RASTER_DEBUGF(3, "Offline geotransform (%f, %f, %f, %f, %f, %f)", ogt[0], ogt[1], ogt[2], ogt[3], ogt[4], ogt[5]); /* are rasters aligned? */ _rast = rt_raster_new(1, 1); rt_raster_set_geotransform_matrix(_rast, ogt); rt_raster_set_srid(_rast, band->raster->srid); err = rt_raster_same_alignment(band->raster, _rast, &aligned, NULL); rt_raster_destroy(_rast); if (err != ES_NONE) { rterror("rt_band_load_offline_data: Could not test alignment of in-db representation of out-db raster"); GDALClose(hdsSrc); return ES_ERROR; } else if (!aligned) { rtwarn("The in-db representation of the out-db raster is not aligned. Band data may be incorrect"); } /* get offsets */ rt_raster_geopoint_to_cell( band->raster, ogt[0], ogt[3], &(offset[0]), &(offset[1]), NULL ); RASTER_DEBUGF(4, "offsets: (%f, %f)", offset[0], offset[1]); /* create VRT dataset */ hdsDst = VRTCreate(band->width, band->height); GDALSetGeoTransform(hdsDst, gt); /* GDALSetDescription(hdsDst, "/tmp/offline.vrt"); */ /* add band as simple sources */ GDALAddBand(hdsDst, rt_util_pixtype_to_gdal_datatype(band->pixtype), NULL); hbandDst = (VRTSourcedRasterBandH) GDALGetRasterBand(hdsDst, 1); if (band->hasnodata) GDALSetRasterNoDataValue(hbandDst, band->nodataval); VRTAddSimpleSource( hbandDst, GDALGetRasterBand(hdsSrc, band->data.offline.bandNum + 1), abs(offset[0]), abs(offset[1]), band->width, band->height, 0, 0, band->width, band->height, "near", VRT_NODATA_UNSET ); /* make sure VRT reflects all changes */ VRTFlushCache(hdsDst); /* convert VRT dataset to rt_raster */ _rast = rt_raster_from_gdal_dataset(hdsDst); GDALClose(hdsDst); /* XXX: need to find a way to clean up the GDALOpenShared datasets at end of transaction */ /* GDALClose(hdsSrc); */ GDALClose(hdsSrc); if (_rast == NULL) { rterror("rt_band_load_offline_data: Cannot load data from offline raster: %s", band->data.offline.path); return ES_ERROR; } _band = rt_raster_get_band(_rast, 0); if (_band == NULL) { rterror("rt_band_load_offline_data: Cannot load data from offline raster: %s", band->data.offline.path); rt_raster_destroy(_rast); return ES_ERROR; } /* band->data.offline.mem not NULL, free first */ if (band->data.offline.mem != NULL) { rtdealloc(band->data.offline.mem); band->data.offline.mem = NULL; } band->data.offline.mem = _band->data.mem; rtdealloc(_band); /* cannot use rt_band_destroy */ rt_raster_destroy(_rast); return ES_NONE; } rt_pixtype rt_band_get_pixtype(rt_band band) { assert(NULL != band); return band->pixtype; } uint16_t rt_band_get_width(rt_band band) { assert(NULL != band); return band->width; } uint16_t rt_band_get_height(rt_band band) { assert(NULL != band); return band->height; } /* Get ownsdata flag */ int rt_band_get_ownsdata_flag(rt_band band) { assert(NULL != band); return band->ownsdata ? 1 : 0; } /* set ownsdata flag */ void rt_band_set_ownsdata_flag(rt_band band, int flag) { assert(NULL != band); band->ownsdata = flag ? 1 : 0; } #ifdef OPTIMIZE_SPACE /* * Set given number of bits of the given byte, * starting from given bitOffset (from the first) * to the given value. * * Examples: * char ch; * ch=0; setBits(&ch, 1, 1, 0) -> ch==8 * ch=0; setBits(&ch, 3, 2, 1) -> ch==96 (0x60) * * Note that number of bits set must be <= 8-bitOffset * */ static void setBits(char* ch, double val, int bits, int bitOffset) { char mask = 0xFF >> (8 - bits); char ival = val; assert(ch != NULL); assert(8 - bitOffset >= bits); RASTER_DEBUGF(4, "ival:%d bits:%d mask:%hhx bitoffset:%d\n", ival, bits, mask, bitOffset); /* clear all but significant bits from ival */ ival &= mask; #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 if (ival != val) { rtwarn("Pixel value for %d-bits band got truncated" " from %g to %hhu", bits, val, ival); } #endif /* POSTGIS_RASTER_WARN_ON_TRUNCATION */ RASTER_DEBUGF(4, " cleared ival:%hhx\n", ival); /* Shift ival so the significant bits start at * the first bit */ ival <<= (8 - bitOffset - bits); RASTER_DEBUGF(4, " ival shifted:%hhx\n", ival); RASTER_DEBUGF(4, " ch:%hhx\n", *ch); /* clear first bits of target */ *ch &= ~(mask << (8 - bits - bitOffset)); RASTER_DEBUGF(4, " ch cleared:%hhx\n", *ch); /* Set the first bit of target */ *ch |= ival; RASTER_DEBUGF(4, " ch ored:%hhx\n", *ch); } #endif /* OPTIMIZE_SPACE */ int rt_band_get_hasnodata_flag(rt_band band) { assert(NULL != band); return band->hasnodata ? 1 : 0; } void rt_band_set_hasnodata_flag(rt_band band, int flag) { assert(NULL != band); band->hasnodata = (flag) ? 1 : 0; /* isnodata depends on hasnodata */ if (!band->hasnodata && band->isnodata) { RASTER_DEBUG(3, "Setting isnodata to FALSE as band no longer has NODATA"); band->isnodata = 0; } } rt_errorstate rt_band_set_isnodata_flag(rt_band band, int flag) { assert(NULL != band); if (!band->hasnodata) { /* silently permit setting isnodata flag to FALSE */ if (!flag) band->isnodata = 0; else { rterror("rt_band_set_isnodata_flag: Cannot set isnodata flag as band has no NODATA"); return ES_ERROR; } } else band->isnodata = (flag) ? 1 : 0; return ES_NONE; } int rt_band_get_isnodata_flag(rt_band band) { assert(NULL != band); if (band->hasnodata) return band->isnodata ? 1 : 0; else return 0; } /** * Set nodata value * * @param band : the band to set nodata value to * @param val : the nodata value * @param converted : if non-zero, value was truncated/clamped/coverted * * @return ES_NONE or ES_ERROR */ rt_errorstate rt_band_set_nodata(rt_band band, double val, int *converted) { rt_pixtype pixtype = PT_END; int32_t checkvalint = 0; uint32_t checkvaluint = 0; float checkvalfloat = 0; double checkvaldouble = 0; assert(NULL != band); if (converted != NULL) *converted = 0; pixtype = band->pixtype; RASTER_DEBUGF(3, "rt_band_set_nodata: setting nodata value %g with band type %s", val, rt_pixtype_name(pixtype)); /* return -1 on out of range */ switch (pixtype) { case PT_1BB: { band->nodataval = rt_util_clamp_to_1BB(val); checkvalint = band->nodataval; break; } case PT_2BUI: { band->nodataval = rt_util_clamp_to_2BUI(val); checkvalint = band->nodataval; break; } case PT_4BUI: { band->nodataval = rt_util_clamp_to_4BUI(val); checkvalint = band->nodataval; break; } case PT_8BSI: { band->nodataval = rt_util_clamp_to_8BSI(val); checkvalint = band->nodataval; break; } case PT_8BUI: { band->nodataval = rt_util_clamp_to_8BUI(val); checkvalint = band->nodataval; break; } case PT_16BSI: { band->nodataval = rt_util_clamp_to_16BSI(val); checkvalint = band->nodataval; break; } case PT_16BUI: { band->nodataval = rt_util_clamp_to_16BUI(val); checkvalint = band->nodataval; break; } case PT_32BSI: { band->nodataval = rt_util_clamp_to_32BSI(val); checkvalint = band->nodataval; break; } case PT_32BUI: { band->nodataval = rt_util_clamp_to_32BUI(val); checkvaluint = band->nodataval; break; } case PT_32BF: { band->nodataval = rt_util_clamp_to_32F(val); checkvalfloat = band->nodataval; break; } case PT_64BF: { band->nodataval = val; checkvaldouble = band->nodataval; break; } default: { rterror("rt_band_set_nodata: Unknown pixeltype %d", pixtype); band->hasnodata = 0; return ES_ERROR; } } RASTER_DEBUGF(3, "rt_band_set_nodata: band->hasnodata = %d", band->hasnodata); RASTER_DEBUGF(3, "rt_band_set_nodata: band->nodataval = %f", band->nodataval); /* the nodata value was just set, so this band has NODATA */ band->hasnodata = 1; /* also set isnodata flag to false */ band->isnodata = 0; if (rt_util_dbl_trunc_warning( val, checkvalint, checkvaluint, checkvalfloat, checkvaldouble, pixtype ) && converted != NULL) { *converted = 1; } return ES_NONE; } /** * Set values of multiple pixels. Unlike rt_band_set_pixel, * values in vals are expected to be of the band's pixel type * as this function uses memcpy. * * It is important to be careful when using this function as * the number of values being set may exceed a pixel "row". * Remember that the band values are stored in a stream (1-D array) * regardless of what the raster's width and height might be. * So, setting a number of values may cross multiple pixel "rows". * * @param band : the band to set value to * @param x : X coordinate (0-based) * @param y : Y coordinate (0-based) * @param vals : the pixel values to apply * @param len : # of elements in vals * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_band_set_pixel_line( rt_band band, int x, int y, void *vals, uint32_t len ) { rt_pixtype pixtype = PT_END; int size = 0; uint8_t *data = NULL; uint32_t offset = 0; assert(NULL != band); assert(vals != NULL && len > 0); RASTER_DEBUGF(3, "length of values = %d", len); if (band->offline) { rterror("rt_band_set_pixel_line not implemented yet for OFFDB bands"); return ES_ERROR; } pixtype = band->pixtype; size = rt_pixtype_size(pixtype); if ( x < 0 || x >= band->width || y < 0 || y >= band->height ) { rterror("rt_band_set_pixel_line: Coordinates out of range (%d, %d) vs (%d, %d)", x, y, band->width, band->height); return ES_ERROR; } data = rt_band_get_data(band); offset = x + (y * band->width); RASTER_DEBUGF(4, "offset = %d", offset); /* make sure len of values to copy don't exceed end of data */ if (len > (band->width * band->height) - offset) { rterror("rt_band_set_pixel_line: Could not apply pixels as values length exceeds end of data"); return ES_ERROR; } switch (pixtype) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BUI: case PT_8BSI: { uint8_t *ptr = data; ptr += offset; memcpy(ptr, vals, size * len); break; } case PT_16BUI: { uint16_t *ptr = (uint16_t *) data; ptr += offset; memcpy(ptr, vals, size * len); break; } case PT_16BSI: { int16_t *ptr = (int16_t *) data; ptr += offset; memcpy(ptr, vals, size * len); break; } case PT_32BUI: { uint32_t *ptr = (uint32_t *) data; ptr += offset; memcpy(ptr, vals, size * len); break; } case PT_32BSI: { int32_t *ptr = (int32_t *) data; ptr += offset; memcpy(ptr, vals, size * len); break; } case PT_32BF: { float *ptr = (float *) data; ptr += offset; memcpy(ptr, vals, size * len); break; } case PT_64BF: { double *ptr = (double *) data; ptr += offset; memcpy(ptr, vals, size * len); break; } default: { rterror("rt_band_set_pixel_line: Unknown pixeltype %d", pixtype); return ES_ERROR; } } #if POSTGIS_DEBUG_LEVEL > 0 { double value; rt_band_get_pixel(band, x, y, &value, NULL); RASTER_DEBUGF(4, "pixel at (%d, %d) = %f", x, y, value); } #endif /* set band's isnodata flag to FALSE */ if (rt_band_get_hasnodata_flag(band)) rt_band_set_isnodata_flag(band, 0); return ES_NONE; } /** * Set single pixel's value * * @param band : the band to set value to * @param x : x ordinate (0-based) * @param y : y ordinate (0-based) * @param val : the pixel value * @param converted : (optional) non-zero if value truncated/clamped/converted * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_band_set_pixel( rt_band band, int x, int y, double val, int *converted ) { rt_pixtype pixtype = PT_END; unsigned char* data = NULL; uint32_t offset = 0; int32_t checkvalint = 0; uint32_t checkvaluint = 0; float checkvalfloat = 0; double checkvaldouble = 0; assert(NULL != band); if (converted != NULL) *converted = 0; if (band->offline) { rterror("rt_band_set_pixel not implemented yet for OFFDB bands"); return ES_ERROR; } pixtype = band->pixtype; if ( x < 0 || x >= band->width || y < 0 || y >= band->height ) { rterror("rt_band_set_pixel: Coordinates out of range"); return ES_ERROR; } /* check that clamped value isn't clamped NODATA */ if (band->hasnodata && pixtype != PT_64BF) { double newval; int corrected; rt_band_corrected_clamped_value(band, val, &newval, &corrected); if (corrected) { #if POSTGIS_RASTER_WARN_ON_TRUNCATION > 0 rtwarn("Value for pixel %d x %d has been corrected as clamped value becomes NODATA", x, y); #endif val = newval; if (converted != NULL) *converted = 1; } } data = rt_band_get_data(band); offset = x + (y * band->width); switch (pixtype) { case PT_1BB: { data[offset] = rt_util_clamp_to_1BB(val); checkvalint = data[offset]; break; } case PT_2BUI: { data[offset] = rt_util_clamp_to_2BUI(val); checkvalint = data[offset]; break; } case PT_4BUI: { data[offset] = rt_util_clamp_to_4BUI(val); checkvalint = data[offset]; break; } case PT_8BSI: { data[offset] = rt_util_clamp_to_8BSI(val); checkvalint = (int8_t) data[offset]; break; } case PT_8BUI: { data[offset] = rt_util_clamp_to_8BUI(val); checkvalint = data[offset]; break; } case PT_16BSI: { int16_t *ptr = (int16_t*) data; /* we assume correct alignment */ ptr[offset] = rt_util_clamp_to_16BSI(val); checkvalint = (int16_t) ptr[offset]; break; } case PT_16BUI: { uint16_t *ptr = (uint16_t*) data; /* we assume correct alignment */ ptr[offset] = rt_util_clamp_to_16BUI(val); checkvalint = ptr[offset]; break; } case PT_32BSI: { int32_t *ptr = (int32_t*) data; /* we assume correct alignment */ ptr[offset] = rt_util_clamp_to_32BSI(val); checkvalint = (int32_t) ptr[offset]; break; } case PT_32BUI: { uint32_t *ptr = (uint32_t*) data; /* we assume correct alignment */ ptr[offset] = rt_util_clamp_to_32BUI(val); checkvaluint = ptr[offset]; break; } case PT_32BF: { float *ptr = (float*) data; /* we assume correct alignment */ ptr[offset] = rt_util_clamp_to_32F(val); checkvalfloat = ptr[offset]; break; } case PT_64BF: { double *ptr = (double*) data; /* we assume correct alignment */ ptr[offset] = val; checkvaldouble = ptr[offset]; break; } default: { rterror("rt_band_set_pixel: Unknown pixeltype %d", pixtype); return ES_ERROR; } } /* If the stored value is not NODATA, reset the isnodata flag */ if (!rt_band_clamped_value_is_nodata(band, val)) { RASTER_DEBUG(3, "Band has a value that is not NODATA. Setting isnodata to FALSE"); band->isnodata = FALSE; } /* Overflow checking */ if (rt_util_dbl_trunc_warning( val, checkvalint, checkvaluint, checkvalfloat, checkvaldouble, pixtype ) && converted != NULL) { *converted = 1; } return ES_NONE; } /** * Get values of multiple pixels. Unlike rt_band_get_pixel, * values in vals are of the band's pixel type so cannot be * assumed to be double. Function uses memcpy. * * It is important to be careful when using this function as * the number of values being fetched may exceed a pixel "row". * Remember that the band values are stored in a stream (1-D array) * regardless of what the raster's width and height might be. * So, getting a number of values may cross multiple pixel "rows". * * @param band : the band to get pixel value from * @param x : pixel column (0-based) * @param y : pixel row (0-based) * @param len : the number of pixels to get * @param **vals : the pixel values * @param *nvals : the number of pixel values being returned * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_band_get_pixel_line( rt_band band, int x, int y, uint16_t len, void **vals, uint16_t *nvals ) { uint8_t *_vals = NULL; int pixsize = 0; uint8_t *data = NULL; uint32_t offset = 0; uint16_t _nvals = 0; int maxlen = 0; uint8_t *ptr = NULL; assert(NULL != band); assert(vals != NULL && nvals != NULL); /* initialize to no values */ *nvals = 0; if ( x < 0 || x >= band->width || y < 0 || y >= band->height ) { rtwarn("Attempting to get pixel values with out of range raster coordinates: (%d, %d)", x, y); return ES_ERROR; } if (len < 1) return ES_NONE; data = rt_band_get_data(band); if (data == NULL) { rterror("rt_band_get_pixel_line: Cannot get band data"); return ES_ERROR; } /* +1 for the nodata value */ offset = x + (y * band->width); RASTER_DEBUGF(4, "offset = %d", offset); pixsize = rt_pixtype_size(band->pixtype); RASTER_DEBUGF(4, "pixsize = %d", pixsize); /* cap _nvals so that it doesn't overflow */ _nvals = len; maxlen = band->width * band->height; if (((int) (offset + _nvals)) > maxlen) { _nvals = maxlen - offset; rtwarn("Limiting returning number values to %d", _nvals); } RASTER_DEBUGF(4, "_nvals = %d", _nvals); ptr = data + (offset * pixsize); _vals = rtalloc(_nvals * pixsize); if (_vals == NULL) { rterror("rt_band_get_pixel_line: Could not allocate memory for pixel values"); return ES_ERROR; } /* copy pixels */ memcpy(_vals, ptr, _nvals * pixsize); *vals = _vals; *nvals = _nvals; return ES_NONE; } /** * Get pixel value. If band's isnodata flag is TRUE, value returned * will be the band's NODATA value * * @param band : the band to set nodata value to * @param x : x ordinate (0-based) * @param y : x ordinate (0-based) * @param *value : pixel value * @param *nodata : 0 if pixel is not NODATA * * @return 0 on success, -1 on error (value out of valid range). */ rt_errorstate rt_band_get_pixel( rt_band band, int x, int y, double *value, int *nodata ) { rt_pixtype pixtype = PT_END; uint8_t* data = NULL; uint32_t offset = 0; assert(NULL != band); assert(NULL != value); /* set nodata to 0 */ if (nodata != NULL) *nodata = 0; if ( x < 0 || x >= band->width || y < 0 || y >= band->height ) { rtwarn("Attempting to get pixel value with out of range raster coordinates: (%d, %d)", x, y); return ES_ERROR; } /* band is NODATA */ if (band->isnodata) { RASTER_DEBUG(3, "Band's isnodata flag is TRUE. Returning NODATA value"); *value = band->nodataval; if (nodata != NULL) *nodata = 1; return ES_NONE; } data = rt_band_get_data(band); if (data == NULL) { rterror("rt_band_get_pixel: Cannot get band data"); return ES_ERROR; } /* +1 for the nodata value */ offset = x + (y * band->width); pixtype = band->pixtype; switch (pixtype) { case PT_1BB: #ifdef OPTIMIZE_SPACE { int byteOffset = offset / 8; int bitOffset = offset % 8; data += byteOffset; /* Bit to set is bitOffset into data */ *value = getBits(data, val, 1, bitOffset); break; } #endif case PT_2BUI: #ifdef OPTIMIZE_SPACE { int byteOffset = offset / 4; int bitOffset = offset % 4; data += byteOffset; /* Bits to set start at bitOffset into data */ *value = getBits(data, val, 2, bitOffset); break; } #endif case PT_4BUI: #ifdef OPTIMIZE_SPACE { int byteOffset = offset / 2; int bitOffset = offset % 2; data += byteOffset; /* Bits to set start at bitOffset into data */ *value = getBits(data, val, 2, bitOffset); break; } #endif case PT_8BSI: { int8_t val = data[offset]; *value = val; break; } case PT_8BUI: { uint8_t val = data[offset]; *value = val; break; } case PT_16BSI: { int16_t *ptr = (int16_t*) data; /* we assume correct alignment */ *value = ptr[offset]; break; } case PT_16BUI: { uint16_t *ptr = (uint16_t*) data; /* we assume correct alignment */ *value = ptr[offset]; break; } case PT_32BSI: { int32_t *ptr = (int32_t*) data; /* we assume correct alignment */ *value = ptr[offset]; break; } case PT_32BUI: { uint32_t *ptr = (uint32_t*) data; /* we assume correct alignment */ *value = ptr[offset]; break; } case PT_32BF: { float *ptr = (float*) data; /* we assume correct alignment */ *value = ptr[offset]; break; } case PT_64BF: { double *ptr = (double*) data; /* we assume correct alignment */ *value = ptr[offset]; break; } default: { rterror("rt_band_get_pixel: Unknown pixeltype %d", pixtype); return ES_ERROR; } } /* set NODATA flag */ if (band->hasnodata && nodata != NULL) { if (rt_band_clamped_value_is_nodata(band, *value)) *nodata = 1; } return ES_NONE; } /** * Get nearest pixel(s) with value (not NODATA) to specified pixel * * @param band : the band to get nearest pixel(s) from * @param x : the column of the pixel (0-based) * @param y : the line of the pixel (0-based) * @param distancex : the number of pixels around the specified pixel * along the X axis * @param distancey : the number of pixels around the specified pixel * along the Y axis * @param exclude_nodata_value : if non-zero, ignore nodata values * to check for pixels with value * @param npixels : return set of rt_pixel object or NULL * * @return -1 on error, otherwise the number of rt_pixel objects * in npixels */ int rt_band_get_nearest_pixel( rt_band band, int x, int y, uint16_t distancex, uint16_t distancey, int exclude_nodata_value, rt_pixel *npixels ) { rt_pixel npixel = NULL; int extent[4] = {0}; int max_extent[4] = {0}; int d0 = 0; int distance[2] = {0}; uint32_t _d[2] = {0}; uint32_t i = 0; uint32_t j = 0; uint32_t k = 0; int _max = 0; int _x = 0; int _y = 0; int *_min = NULL; double pixval = 0; double minval = 0; uint32_t count = 0; int isnodata = 0; int inextent = 0; assert(NULL != band); assert(NULL != npixels); RASTER_DEBUG(3, "Starting"); /* process distance */ distance[0] = distancex; distance[1] = distancey; /* no distance, means get nearest pixels and return */ if (!distance[0] && !distance[1]) d0 = 1; RASTER_DEBUGF(4, "Selected pixel: %d x %d", x, y); RASTER_DEBUGF(4, "Distances: %d x %d", distance[0], distance[1]); /* shortcuts if outside band extent */ if ( exclude_nodata_value && ( (x < 0 || x > band->width) || (y < 0 || y > band->height) ) ) { /* no distances specified, jump to pixel close to extent */ if (d0) { if (x < 0) x = -1; else if (x > band->width) x = band->width; if (y < 0) y = -1; else if (y > band->height) y = band->height; RASTER_DEBUGF(4, "Moved selected pixel: %d x %d", x, y); } /* distances specified if distances won't capture extent of band, return 0 */ else if ( ((x < 0 && abs(x) > distance[0]) || (x - band->width >= distance[0])) || ((y < 0 && abs(y) > distance[1]) || (y - band->height >= distance[1])) ) { RASTER_DEBUG(4, "No nearest pixels possible for provided pixel and distances"); return 0; } } /* no NODATA, exclude is FALSE */ if (!band->hasnodata) exclude_nodata_value = FALSE; /* band is NODATA and excluding NODATA */ else if (exclude_nodata_value && band->isnodata) { RASTER_DEBUG(4, "No nearest pixels possible as band is NODATA and excluding NODATA values"); return 0; } /* determine the maximum distance to prevent an infinite loop */ if (d0) { int a, b; /* X axis */ a = abs(x); b = abs(x - band->width); if (a > b) distance[0] = a; else distance[0] = b; /* Y axis */ a = abs(y); b = abs(y - band->height); if (a > b) distance[1] = a; else distance[1] = b; RASTER_DEBUGF(4, "Maximum distances: %d x %d", distance[0], distance[1]); } /* minimum possible value for pixel type */ minval = rt_pixtype_get_min_value(band->pixtype); RASTER_DEBUGF(4, "pixtype: %s", rt_pixtype_name(band->pixtype)); RASTER_DEBUGF(4, "minval: %f", minval); /* set variables */ count = 0; *npixels = NULL; /* maximum extent */ max_extent[0] = x - distance[0]; /* min X */ max_extent[1] = y - distance[1]; /* min Y */ max_extent[2] = x + distance[0]; /* max X */ max_extent[3] = y + distance[1]; /* max Y */ RASTER_DEBUGF(4, "Maximum Extent: (%d, %d, %d, %d)", max_extent[0], max_extent[1], max_extent[2], max_extent[3]); _d[0] = 0; _d[1] = 0; do { _d[0]++; _d[1]++; extent[0] = x - _d[0]; /* min x */ extent[1] = y - _d[1]; /* min y */ extent[2] = x + _d[0]; /* max x */ extent[3] = y + _d[1]; /* max y */ RASTER_DEBUGF(4, "Processing distances: %d x %d", _d[0], _d[1]); RASTER_DEBUGF(4, "Extent: (%d, %d, %d, %d)", extent[0], extent[1], extent[2], extent[3]); for (i = 0; i < 2; i++) { /* by row */ if (i < 1) _max = extent[2] - extent[0] + 1; /* by column */ else _max = extent[3] - extent[1] + 1; _max = abs(_max); for (j = 0; j < 2; j++) { /* by row */ if (i < 1) { _x = extent[0]; _min = &_x; /* top row */ if (j < 1) _y = extent[1]; /* bottom row */ else _y = extent[3]; } /* by column */ else { _y = extent[1] + 1; _min = &_y; /* left column */ if (j < 1) { _x = extent[0]; _max -= 2; } /* right column */ else _x = extent[2]; } RASTER_DEBUGF(4, "_min, _max: %d, %d", *_min, _max); for (k = 0; k < _max; k++) { /* check that _x and _y are not outside max extent */ if ( _x < max_extent[0] || _x > max_extent[2] || _y < max_extent[1] || _y > max_extent[3] ) { (*_min)++; continue; } /* outside band extent, set to NODATA */ if ( (_x < 0 || _x >= band->width) || (_y < 0 || _y >= band->height) ) { /* no NODATA, set to minimum possible value */ if (!band->hasnodata) pixval = minval; /* has NODATA, use NODATA */ else pixval = band->nodataval; RASTER_DEBUGF(4, "NODATA pixel outside band extent: (x, y, val) = (%d, %d, %f)", _x, _y, pixval); inextent = 0; isnodata = 1; } else { if (rt_band_get_pixel( band, _x, _y, &pixval, &isnodata ) != ES_NONE) { rterror("rt_band_get_nearest_pixel: Could not get pixel value"); if (count) rtdealloc(*npixels); return -1; } RASTER_DEBUGF(4, "Pixel: (x, y, val) = (%d, %d, %f)", _x, _y, pixval); inextent = 1; } /* use pixval? */ if (!exclude_nodata_value || (exclude_nodata_value && !isnodata)) { /* add pixel to result set */ RASTER_DEBUGF(4, "Adding pixel to set of nearest pixels: (x, y, val) = (%d, %d, %f)", _x, _y, pixval); count++; if (*npixels == NULL) *npixels = (rt_pixel) rtalloc(sizeof(struct rt_pixel_t) * count); else *npixels = (rt_pixel) rtrealloc(*npixels, sizeof(struct rt_pixel_t) * count); if (*npixels == NULL) { rterror("rt_band_get_nearest_pixel: Could not allocate memory for nearest pixel(s)"); return -1; } npixel = &((*npixels)[count - 1]); npixel->x = _x; npixel->y = _y; npixel->value = pixval; /* special case for when outside band extent */ if (!inextent && !band->hasnodata) npixel->nodata = 1; else npixel->nodata = 0; } (*_min)++; } } } /* distance threshholds met */ if (_d[0] >= distance[0] && _d[1] >= distance[1]) break; else if (d0 && count) break; } while (1); RASTER_DEBUGF(3, "Nearest pixels in return: %d", count); return count; } /** * Search band for pixel(s) with search values * * @param band : the band to query for minimum and maximum pixel values * @param exclude_nodata_value : if non-zero, ignore nodata values * @param searchset : array of values to count * @param searchcount : the number of search values * @param pixels : pixels with the search value * * @return -1 on error, otherwise number of pixels */ int rt_band_get_pixel_of_value( rt_band band, int exclude_nodata_value, double *searchset, int searchcount, rt_pixel *pixels ) { int x; int y; int i; double pixval; int err; int count = 0; int isnodata = 0; int isequal = 0; rt_pixel pixel = NULL; assert(NULL != band); assert(NULL != pixels); assert(NULL != searchset && searchcount > 0); if (!band->hasnodata) exclude_nodata_value = FALSE; /* band is NODATA and exclude_nodata_value = TRUE, nothing to search */ else if (exclude_nodata_value && band->isnodata) { RASTER_DEBUG(4, "Pixels cannot be searched as band is NODATA and excluding NODATA values"); return 0; } for (x = 0; x < band->width; x++) { for (y = 0; y < band->height; y++) { err = rt_band_get_pixel(band, x, y, &pixval, &isnodata); if (err != ES_NONE) { rterror("rt_band_get_pixel_of_value: Cannot get band pixel"); return -1; } else if (exclude_nodata_value && isnodata) continue; for (i = 0; i < searchcount; i++) { if (rt_pixtype_compare_clamped_values(band->pixtype, searchset[i], pixval, &isequal) != ES_NONE) { continue; } if (FLT_NEQ(pixval, searchset[i]) || !isequal) continue; /* match found */ count++; if (*pixels == NULL) *pixels = (rt_pixel) rtalloc(sizeof(struct rt_pixel_t) * count); else *pixels = (rt_pixel) rtrealloc(*pixels, sizeof(struct rt_pixel_t) * count); if (*pixels == NULL) { rterror("rt_band_get_pixel_of_value: Could not allocate memory for pixel(s)"); return -1; } pixel = &((*pixels)[count - 1]); pixel->x = x; pixel->y = y; pixel->nodata = 0; pixel->value = pixval; } } } return count; } /** * Get NODATA value * * @param band : the band whose NODATA value will be returned * @param nodata : the band's NODATA value * * @return ES_NONE or ES_ERROR */ rt_errorstate rt_band_get_nodata(rt_band band, double *nodata) { assert(NULL != band); assert(NULL != nodata); *nodata = band->nodataval; if (!band->hasnodata) { rterror("rt_band_get_nodata: Band has no NODATA value"); return ES_ERROR; } return ES_NONE; } double rt_band_get_min_value(rt_band band) { assert(NULL != band); return rt_pixtype_get_min_value(band->pixtype); } int rt_band_check_is_nodata(rt_band band) { int i, j, err; double pxValue; int isnodata = 0; assert(NULL != band); /* Check if band has nodata value */ if (!band->hasnodata) { RASTER_DEBUG(3, "Band has no NODATA value"); band->isnodata = FALSE; return FALSE; } pxValue = band->nodataval; /* Check all pixels */ for (i = 0; i < band->width; i++) { for (j = 0; j < band->height; j++) { err = rt_band_get_pixel(band, i, j, &pxValue, &isnodata); if (err != ES_NONE) { rterror("rt_band_check_is_nodata: Cannot get band pixel"); return FALSE; } else if (!isnodata) { band->isnodata = FALSE; return FALSE; } } } band->isnodata = TRUE; return TRUE; } /** * Compare clamped value to band's clamped NODATA value. * * @param band : the band whose NODATA value will be used for comparison * @param val : the value to compare to the NODATA value * * @return 2 if unclamped value is unclamped NODATA * 1 if clamped value is clamped NODATA * 0 if clamped value is NOT clamped NODATA */ int rt_band_clamped_value_is_nodata(rt_band band, double val) { int isequal = 0; assert(NULL != band); /* no NODATA, so never equal */ if (!band->hasnodata) return 0; /* value is exactly NODATA */ if (FLT_EQ(val, band->nodataval)) return 2; /* ignore error from rt_pixtype_compare_clamped_values */ rt_pixtype_compare_clamped_values( band->pixtype, val, band->nodataval, &isequal ); return isequal ? 1 : 0; } /** * Correct value when clamped value is equal to clamped NODATA value. * Correction does NOT occur if unclamped value is exactly unclamped * NODATA value. * * @param band : the band whose NODATA value will be used for comparison * @param val : the value to compare to the NODATA value and correct * @param *newval : pointer to corrected value * @param *corrected : (optional) non-zero if val was corrected * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_band_corrected_clamped_value( rt_band band, double val, double *newval, int *corrected ) { double minval = 0.; assert(NULL != band); assert(NULL != newval); if (corrected != NULL) *corrected = 0; /* no need to correct if clamped values IS NOT clamped NODATA */ if (rt_band_clamped_value_is_nodata(band, val) != 1) { *newval = val; return ES_NONE; } minval = rt_pixtype_get_min_value(band->pixtype); *newval = val; switch (band->pixtype) { case PT_1BB: *newval = !band->nodataval; break; case PT_2BUI: if (rt_util_clamp_to_2BUI(val) == rt_util_clamp_to_2BUI(minval)) (*newval)++; else (*newval)--; break; case PT_4BUI: if (rt_util_clamp_to_4BUI(val) == rt_util_clamp_to_4BUI(minval)) (*newval)++; else (*newval)--; break; case PT_8BSI: if (rt_util_clamp_to_8BSI(val) == rt_util_clamp_to_8BSI(minval)) (*newval)++; else (*newval)--; break; case PT_8BUI: if (rt_util_clamp_to_8BUI(val) == rt_util_clamp_to_8BUI(minval)) (*newval)++; else (*newval)--; break; case PT_16BSI: if (rt_util_clamp_to_16BSI(val) == rt_util_clamp_to_16BSI(minval)) (*newval)++; else (*newval)--; break; case PT_16BUI: if (rt_util_clamp_to_16BUI(val) == rt_util_clamp_to_16BUI(minval)) (*newval)++; else (*newval)--; break; case PT_32BSI: if (rt_util_clamp_to_32BSI(val) == rt_util_clamp_to_32BSI(minval)) (*newval)++; else (*newval)--; break; case PT_32BUI: if (rt_util_clamp_to_32BUI(val) == rt_util_clamp_to_32BUI(minval)) (*newval)++; else (*newval)--; break; case PT_32BF: if (FLT_EQ(rt_util_clamp_to_32F(val), rt_util_clamp_to_32F(minval))) *newval += FLT_EPSILON; else *newval -= FLT_EPSILON; break; case PT_64BF: break; default: rterror("rt_band_corrected_clamped_value: Unknown pixeltype %d", band->pixtype); return ES_ERROR; } if (corrected != NULL) *corrected = 1; return ES_NONE; } /** * Compute summary statistics for a band * * @param band : the band to query for summary stats * @param exclude_nodata_value : if non-zero, ignore nodata values * @param sample : percentage of pixels to sample * @param inc_vals : flag to include values in return struct * @param cK : number of pixels counted thus far in coverage * @param cM : M component of 1-pass stddev for coverage * @param cQ : Q component of 1-pass stddev for coverage * * @return the summary statistics for a band or NULL */ rt_bandstats rt_band_get_summary_stats( rt_band band, int exclude_nodata_value, double sample, int inc_vals, uint64_t *cK, double *cM, double *cQ ) { uint32_t x = 0; uint32_t y = 0; uint32_t z = 0; uint32_t offset = 0; uint32_t diff = 0; int rtn; int hasnodata = FALSE; double nodata = 0; double *values = NULL; double value; int isnodata = 0; rt_bandstats stats = NULL; uint32_t do_sample = 0; uint32_t sample_size = 0; uint32_t sample_per = 0; uint32_t sample_int = 0; uint32_t i = 0; uint32_t j = 0; double sum = 0; uint32_t k = 0; double M = 0; double Q = 0; #if POSTGIS_DEBUG_LEVEL > 0 clock_t start, stop; double elapsed = 0; #endif RASTER_DEBUG(3, "starting"); #if POSTGIS_DEBUG_LEVEL > 0 start = clock(); #endif assert(NULL != band); /* band is empty (width < 1 || height < 1) */ if (band->width < 1 || band->height < 1) { stats = (rt_bandstats) rtalloc(sizeof(struct rt_bandstats_t)); if (NULL == stats) { rterror("rt_band_get_summary_stats: Could not allocate memory for stats"); return NULL; } rtwarn("Band is empty as width and/or height is 0"); stats->sample = 1; stats->sorted = 0; stats->values = NULL; stats->count = 0; stats->min = stats->max = 0; stats->sum = 0; stats->mean = 0; stats->stddev = -1; return stats; } hasnodata = rt_band_get_hasnodata_flag(band); if (hasnodata != FALSE) rt_band_get_nodata(band, &nodata); else exclude_nodata_value = 0; RASTER_DEBUGF(3, "nodata = %f", nodata); RASTER_DEBUGF(3, "hasnodata = %d", hasnodata); RASTER_DEBUGF(3, "exclude_nodata_value = %d", exclude_nodata_value); /* entire band is nodata */ if (rt_band_get_isnodata_flag(band) != FALSE) { stats = (rt_bandstats) rtalloc(sizeof(struct rt_bandstats_t)); if (NULL == stats) { rterror("rt_band_get_summary_stats: Could not allocate memory for stats"); return NULL; } stats->sample = 1; stats->sorted = 0; stats->values = NULL; if (exclude_nodata_value) { rtwarn("All pixels of band have the NODATA value"); stats->count = 0; stats->min = stats->max = 0; stats->sum = 0; stats->mean = 0; stats->stddev = -1; } else { stats->count = band->width * band->height; stats->min = stats->max = nodata; stats->sum = stats->count * nodata; stats->mean = nodata; stats->stddev = 0; } return stats; } /* clamp percentage */ if ( (sample < 0 || FLT_EQ(sample, 0.0)) || (sample > 1 || FLT_EQ(sample, 1.0)) ) { do_sample = 0; sample = 1; } else do_sample = 1; RASTER_DEBUGF(3, "do_sample = %d", do_sample); /* sample all pixels */ if (!do_sample) { sample_size = band->width * band->height; sample_per = band->height; } /* randomly sample a percentage of available pixels sampling method is known as "systematic random sample without replacement" */ else { sample_size = round((band->width * band->height) * sample); sample_per = round(sample_size / band->width); if (sample_per < 1) sample_per = 1; sample_int = round(band->height / sample_per); srand(time(NULL)); } RASTER_DEBUGF(3, "sampling %d of %d available pixels w/ %d per set" , sample_size, (band->width * band->height), sample_per); if (inc_vals) { values = rtalloc(sizeof(double) * sample_size); if (NULL == values) { rtwarn("Could not allocate memory for values"); inc_vals = 0; } } /* initialize stats */ stats = (rt_bandstats) rtalloc(sizeof(struct rt_bandstats_t)); if (NULL == stats) { rterror("rt_band_get_summary_stats: Could not allocate memory for stats"); return NULL; } stats->sample = sample; stats->count = 0; stats->sum = 0; stats->mean = 0; stats->stddev = -1; stats->min = stats->max = 0; stats->values = NULL; stats->sorted = 0; for (x = 0, j = 0, k = 0; x < band->width; x++) { y = -1; diff = 0; for (i = 0, z = 0; i < sample_per; i++) { if (!do_sample) y = i; else { offset = (rand() % sample_int) + 1; y += diff + offset; diff = sample_int - offset; } RASTER_DEBUGF(5, "(x, y, z) = (%d, %d, %d)", x, y, z); if (y >= band->height || z > sample_per) break; rtn = rt_band_get_pixel(band, x, y, &value, &isnodata); j++; if (rtn == ES_NONE && (!exclude_nodata_value || (exclude_nodata_value && !isnodata))) { /* inc_vals set, collect pixel values */ if (inc_vals) values[k] = value; /* average */ k++; sum += value; /* one-pass standard deviation http://www.eecs.berkeley.edu/~mhoemmen/cs194/Tutorials/variance.pdf */ if (k == 1) { Q = 0; M = value; } else { Q += (((k - 1) * pow(value - M, 2)) / k); M += ((value - M ) / k); } /* coverage one-pass standard deviation */ if (NULL != cK) { (*cK)++; if (*cK == 1) { *cQ = 0; *cM = value; } else { *cQ += (((*cK - 1) * pow(value - *cM, 2)) / *cK); *cM += ((value - *cM ) / *cK); } } /* min/max */ if (stats->count < 1) { stats->count = 1; stats->min = stats->max = value; } else { if (value < stats->min) stats->min = value; if (value > stats->max) stats->max = value; } } z++; } } RASTER_DEBUG(3, "sampling complete"); stats->count = k; if (k > 0) { if (inc_vals) { /* free unused memory */ if (sample_size != k) { values = rtrealloc(values, k * sizeof(double)); } stats->values = values; } stats->sum = sum; stats->mean = sum / k; /* standard deviation */ if (!do_sample) stats->stddev = sqrt(Q / k); /* sample deviation */ else { if (k < 2) stats->stddev = -1; else stats->stddev = sqrt(Q / (k - 1)); } } /* inc_vals thus values allocated but not used */ else if (inc_vals) rtdealloc(values); /* if do_sample is one */ if (do_sample && k < 1) rtwarn("All sampled pixels of band have the NODATA value"); #if POSTGIS_DEBUG_LEVEL > 0 stop = clock(); elapsed = ((double) (stop - start)) / CLOCKS_PER_SEC; RASTER_DEBUGF(3, "(time, count, mean, stddev, min, max) = (%0.4f, %d, %f, %f, %f, %f)", elapsed, stats->count, stats->mean, stats->stddev, stats->min, stats->max); #endif RASTER_DEBUG(3, "done"); return stats; } /** * Count the distribution of data * * @param stats : a populated stats struct for processing * @param bin_count : the number of bins to group the data by * @param bin_width : the width of each bin as an array * @param bin_width_count : number of values in bin_width * @param right : evaluate bins by (a,b] rather than default [a,b) * @param min : user-defined minimum value of the histogram * a value less than the minimum value is not counted in any bins * if min = max, min and max are not used * @param max : user-defined maximum value of the histogram * a value greater than the max value is not counted in any bins * if min = max, min and max are not used * @param rtn_count : set to the number of bins being returned * * @return the histogram of the data or NULL */ rt_histogram rt_band_get_histogram( rt_bandstats stats, int bin_count, double *bin_width, int bin_width_count, int right, double min, double max, uint32_t *rtn_count ) { rt_histogram bins = NULL; int init_width = 0; int i; int j; double tmp; double value; int sum = 0; double qmin; double qmax; #if POSTGIS_DEBUG_LEVEL > 0 clock_t start, stop; double elapsed = 0; #endif RASTER_DEBUG(3, "starting"); #if POSTGIS_DEBUG_LEVEL > 0 start = clock(); #endif assert(NULL != stats); assert(NULL != rtn_count); if (stats->count < 1 || NULL == stats->values) { rterror("rt_util_get_histogram: rt_bandstats object has no value"); return NULL; } /* bin width must be positive numbers and not zero */ if (NULL != bin_width && bin_width_count > 0) { for (i = 0; i < bin_width_count; i++) { if (bin_width[i] < 0 || FLT_EQ(bin_width[i], 0.0)) { rterror("rt_util_get_histogram: bin_width element is less than or equal to zero"); return NULL; } } } /* ignore min and max parameters */ if (FLT_EQ(max, min)) { qmin = stats->min; qmax = stats->max; } else { qmin = min; qmax = max; if (qmin > qmax) { qmin = max; qmax = min; } } /* # of bins not provided */ if (bin_count <= 0) { /* determine # of bins http://en.wikipedia.org/wiki/Histogram all computed bins are assumed to have equal width */ /* Square-root choice for stats->count < 30 */ if (stats->count < 30) bin_count = ceil(sqrt(stats->count)); /* Sturges' formula for stats->count >= 30 */ else bin_count = ceil(log2((double) stats->count) + 1.); /* bin_width_count provided and bin_width has value */ if (bin_width_count > 0 && NULL != bin_width) { /* user has defined something specific */ if (bin_width_count > bin_count) bin_count = bin_width_count; else if (bin_width_count > 1) { tmp = 0; for (i = 0; i < bin_width_count; i++) tmp += bin_width[i]; bin_count = ceil((qmax - qmin) / tmp) * bin_width_count; } else bin_count = ceil((qmax - qmin) / bin_width[0]); } /* set bin width count to zero so that one can be calculated */ else { bin_width_count = 0; } } /* min and max the same */ if (FLT_EQ(qmax, qmin)) bin_count = 1; RASTER_DEBUGF(3, "bin_count = %d", bin_count); /* bin count = 1, all values are in one bin */ if (bin_count < 2) { bins = rtalloc(sizeof(struct rt_histogram_t)); if (NULL == bins) { rterror("rt_util_get_histogram: Could not allocate memory for histogram"); return NULL; } bins->count = stats->count; bins->percent = -1; bins->min = qmin; bins->max = qmax; bins->inc_min = bins->inc_max = 1; *rtn_count = bin_count; return bins; } /* establish bin width */ if (bin_width_count == 0) { bin_width_count = 1; /* bin_width unallocated */ if (NULL == bin_width) { bin_width = rtalloc(sizeof(double)); if (NULL == bin_width) { rterror("rt_util_get_histogram: Could not allocate memory for bin widths"); return NULL; } init_width = 1; } bin_width[0] = (qmax - qmin) / bin_count; } /* initialize bins */ bins = rtalloc(bin_count * sizeof(struct rt_histogram_t)); if (NULL == bins) { rterror("rt_util_get_histogram: Could not allocate memory for histogram"); if (init_width) rtdealloc(bin_width); return NULL; } if (!right) tmp = qmin; else tmp = qmax; for (i = 0; i < bin_count;) { for (j = 0; j < bin_width_count; j++) { bins[i].count = 0; bins->percent = -1; if (!right) { bins[i].min = tmp; tmp += bin_width[j]; bins[i].max = tmp; bins[i].inc_min = 1; bins[i].inc_max = 0; } else { bins[i].max = tmp; tmp -= bin_width[j]; bins[i].min = tmp; bins[i].inc_min = 0; bins[i].inc_max = 1; } i++; } } if (!right) { bins[bin_count - 1].inc_max = 1; /* align last bin to the max value */ if (bins[bin_count - 1].max < qmax) bins[bin_count - 1].max = qmax; } else { bins[bin_count - 1].inc_min = 1; /* align first bin to the min value */ if (bins[bin_count - 1].min > qmin) bins[bin_count - 1].min = qmin; } /* process the values */ for (i = 0; i < stats->count; i++) { value = stats->values[i]; /* default, [a, b) */ if (!right) { for (j = 0; j < bin_count; j++) { if ( (!bins[j].inc_max && value < bins[j].max) || ( bins[j].inc_max && ( (value < bins[j].max) || FLT_EQ(value, bins[j].max) ) ) ) { bins[j].count++; sum++; break; } } } /* (a, b] */ else { for (j = 0; j < bin_count; j++) { if ( (!bins[j].inc_min && value > bins[j].min) || ( bins[j].inc_min && ( (value > bins[j].min) || FLT_EQ(value, bins[j].min) ) ) ) { bins[j].count++; sum++; break; } } } } for (i = 0; i < bin_count; i++) { bins[i].percent = ((double) bins[i].count) / sum; } #if POSTGIS_DEBUG_LEVEL > 0 stop = clock(); elapsed = ((double) (stop - start)) / CLOCKS_PER_SEC; RASTER_DEBUGF(3, "elapsed time = %0.4f", elapsed); for (j = 0; j < bin_count; j++) { RASTER_DEBUGF(5, "(min, max, inc_min, inc_max, count, sum, percent) = (%f, %f, %d, %d, %d, %d, %f)", bins[j].min, bins[j].max, bins[j].inc_min, bins[j].inc_max, bins[j].count, sum, bins[j].percent); } #endif if (init_width) rtdealloc(bin_width); *rtn_count = bin_count; RASTER_DEBUG(3, "done"); return bins; } /** * Compute the default set of or requested quantiles for a set of data * the quantile formula used is same as Excel and R default method * * @param stats : a populated stats struct for processing * @param quantiles : the quantiles to be computed * @param quantiles_count : the number of quantiles to be computed * @param rtn_count : set to the number of quantiles being returned * * @return the default set of or requested quantiles for a band or NULL */ rt_quantile rt_band_get_quantiles( rt_bandstats stats, double *quantiles, int quantiles_count, uint32_t *rtn_count ) { rt_quantile rtn; int init_quantiles = 0; int i = 0; double h; int hl; #if POSTGIS_DEBUG_LEVEL > 0 clock_t start, stop; double elapsed = 0; #endif RASTER_DEBUG(3, "starting"); #if POSTGIS_DEBUG_LEVEL > 0 start = clock(); #endif assert(NULL != stats); assert(NULL != rtn_count); if (stats->count < 1 || NULL == stats->values) { rterror("rt_band_get_quantiles: rt_bandstats object has no value"); return NULL; } /* quantiles not provided */ if (NULL == quantiles) { /* quantile count not specified, default to quartiles */ if (quantiles_count < 2) quantiles_count = 5; quantiles = rtalloc(sizeof(double) * quantiles_count); init_quantiles = 1; if (NULL == quantiles) { rterror("rt_band_get_quantiles: Could not allocate memory for quantile input"); return NULL; } quantiles_count--; for (i = 0; i <= quantiles_count; i++) quantiles[i] = ((double) i) / quantiles_count; quantiles_count++; } /* check quantiles */ for (i = 0; i < quantiles_count; i++) { if (quantiles[i] < 0. || quantiles[i] > 1.) { rterror("rt_band_get_quantiles: Quantile value not between 0 and 1"); if (init_quantiles) rtdealloc(quantiles); return NULL; } } quicksort(quantiles, quantiles + quantiles_count - 1); /* initialize rt_quantile */ rtn = rtalloc(sizeof(struct rt_quantile_t) * quantiles_count); if (NULL == rtn) { rterror("rt_band_get_quantiles: Could not allocate memory for quantile output"); if (init_quantiles) rtdealloc(quantiles); return NULL; } /* sort values */ if (!stats->sorted) { quicksort(stats->values, stats->values + stats->count - 1); stats->sorted = 1; } /* make quantiles formula is that used in R (method 7) and Excel from http://en.wikipedia.org/wiki/Quantile */ for (i = 0; i < quantiles_count; i++) { rtn[i].quantile = quantiles[i]; h = ((stats->count - 1.) * quantiles[i]) + 1.; hl = floor(h); /* h greater than hl, do full equation */ if (h > hl) rtn[i].value = stats->values[hl - 1] + ((h - hl) * (stats->values[hl] - stats->values[hl - 1])); /* shortcut as second part of equation is zero */ else rtn[i].value = stats->values[hl - 1]; } #if POSTGIS_DEBUG_LEVEL > 0 stop = clock(); elapsed = ((double) (stop - start)) / CLOCKS_PER_SEC; RASTER_DEBUGF(3, "elapsed time = %0.4f", elapsed); #endif *rtn_count = quantiles_count; if (init_quantiles) rtdealloc(quantiles); RASTER_DEBUG(3, "done"); return rtn; } static struct quantile_llist_element *quantile_llist_search( struct quantile_llist_element *element, double needle ) { if (NULL == element) return NULL; else if (FLT_NEQ(needle, element->value)) { if (NULL != element->next) return quantile_llist_search(element->next, needle); else return NULL; } else return element; } static struct quantile_llist_element *quantile_llist_insert( struct quantile_llist_element *element, double value, uint32_t *idx ) { struct quantile_llist_element *qle = NULL; if (NULL == element) { qle = rtalloc(sizeof(struct quantile_llist_element)); RASTER_DEBUGF(4, "qle @ %p is only element in list", qle); if (NULL == qle) return NULL; qle->value = value; qle->count = 1; qle->prev = NULL; qle->next = NULL; if (NULL != idx) *idx = 0; return qle; } else if (value > element->value) { if (NULL != idx) *idx += 1; if (NULL != element->next) return quantile_llist_insert(element->next, value, idx); /* insert as last element in list */ else { qle = rtalloc(sizeof(struct quantile_llist_element)); RASTER_DEBUGF(4, "insert qle @ %p as last element", qle); if (NULL == qle) return NULL; qle->value = value; qle->count = 1; qle->prev = element; qle->next = NULL; element->next = qle; return qle; } } /* insert before current element */ else { qle = rtalloc(sizeof(struct quantile_llist_element)); RASTER_DEBUGF(4, "insert qle @ %p before current element", qle); if (NULL == qle) return NULL; qle->value = value; qle->count = 1; if (NULL != element->prev) element->prev->next = qle; qle->next = element; qle->prev = element->prev; element->prev = qle; return qle; } } static int quantile_llist_delete(struct quantile_llist_element *element) { if (NULL == element) return 0; /* beginning of list */ if (NULL == element->prev && NULL != element->next) { element->next->prev = NULL; } /* end of list */ else if (NULL != element->prev && NULL == element->next) { element->prev->next = NULL; } /* within list */ else if (NULL != element->prev && NULL != element->next) { element->prev->next = element->next; element->next->prev = element->prev; } RASTER_DEBUGF(4, "qle @ %p destroyed", element); rtdealloc(element); return 1; } int quantile_llist_destroy(struct quantile_llist **list, uint32_t list_count) { struct quantile_llist_element *element = NULL; uint32_t i; if (NULL == *list) return 0; for (i = 0; i < list_count; i++) { element = (*list)[i].head; while (NULL != element->next) { quantile_llist_delete(element->next); } quantile_llist_delete(element); rtdealloc((*list)[i].index); } rtdealloc(*list); return 1; } static void quantile_llist_index_update(struct quantile_llist *qll, struct quantile_llist_element *qle, uint32_t idx) { uint32_t anchor = (uint32_t) floor(idx / 100); if (qll->tail == qle) return; if ( (anchor != 0) && ( NULL == qll->index[anchor].element || idx <= qll->index[anchor].index ) ) { qll->index[anchor].index = idx; qll->index[anchor].element = qle; } if (anchor != 0 && NULL == qll->index[0].element) { qll->index[0].index = 0; qll->index[0].element = qll->head; } } static void quantile_llist_index_delete(struct quantile_llist *qll, struct quantile_llist_element *qle) { uint32_t i = 0; for (i = 0; i < qll->index_max; i++) { if ( NULL == qll->index[i].element || (qll->index[i].element) != qle ) { continue; } RASTER_DEBUGF(5, "deleting index: %d => %f", i, qle->value); qll->index[i].index = -1; qll->index[i].element = NULL; } } static struct quantile_llist_element *quantile_llist_index_search( struct quantile_llist *qll, double value, uint32_t *index ) { uint32_t i = 0, j = 0; RASTER_DEBUGF(5, "searching index for value %f", value); for (i = 0; i < qll->index_max; i++) { if (NULL == qll->index[i].element) { if (i < 1) break; continue; } if (value > (qll->index[i]).element->value) continue; if (FLT_EQ(value, qll->index[i].element->value)) { RASTER_DEBUGF(5, "using index value at %d = %f", i, qll->index[i].element->value); *index = i * 100; return qll->index[i].element; } else if (i > 0) { for (j = 1; j < i; j++) { if (NULL != qll->index[i - j].element) { RASTER_DEBUGF(5, "using index value at %d = %f", i - j, qll->index[i - j].element->value); *index = (i - j) * 100; return qll->index[i - j].element; } } } } *index = 0; return qll->head; } static void quantile_llist_index_reset(struct quantile_llist *qll) { uint32_t i = 0; RASTER_DEBUG(5, "resetting index"); for (i = 0; i < qll->index_max; i++) { qll->index[i].index = -1; qll->index[i].element = NULL; } } /** * Compute the default set of or requested quantiles for a coverage * * This function is based upon the algorithm described in: * * A One-Pass Space-Efficient Algorithm for Finding Quantiles (1995) * by Rakesh Agrawal, Arun Swami * in Proc. 7th Intl. Conf. Management of Data (COMAD-95) * * http://www.almaden.ibm.com/cs/projects/iis/hdb/Publications/papers/comad95.pdf * * In the future, it may be worth exploring algorithms that don't * require the size of the coverage * * @param band : the band to include in the quantile search * @param exclude_nodata_value : if non-zero, ignore nodata values * @param sample : percentage of pixels to sample * @param cov_count : number of values in coverage * @param qlls : set of quantile_llist structures * @param qlls_count : the number of quantile_llist structures * @param quantiles : the quantiles to be computed * if bot qlls and quantiles provided, qlls is used * @param quantiles_count : the number of quantiles to be computed * @param rtn_count : the number of quantiles being returned * * @return the default set of or requested quantiles for a band or NULL */ rt_quantile rt_band_get_quantiles_stream( rt_band band, int exclude_nodata_value, double sample, uint64_t cov_count, struct quantile_llist **qlls, uint32_t *qlls_count, double *quantiles, int quantiles_count, uint32_t *rtn_count ) { rt_quantile rtn = NULL; int init_quantiles = 0; struct quantile_llist *qll = NULL; struct quantile_llist_element *qle = NULL; struct quantile_llist_element *qls = NULL; const uint32_t MAX_VALUES = 750; uint8_t *data = NULL; double value; int isnodata = 0; uint32_t a = 0; uint32_t i = 0; uint32_t j = 0; uint32_t k = 0; uint32_t x = 0; uint32_t y = 0; uint32_t z = 0; uint32_t idx = 0; uint32_t offset = 0; uint32_t diff = 0; uint8_t exists = 0; uint32_t do_sample = 0; uint32_t sample_size = 0; uint32_t sample_per = 0; uint32_t sample_int = 0; int status; RASTER_DEBUG(3, "starting"); assert(NULL != band); assert(cov_count > 1); assert(NULL != rtn_count); RASTER_DEBUGF(3, "cov_count = %d", cov_count); data = rt_band_get_data(band); if (data == NULL) { rterror("rt_band_get_summary_stats: Cannot get band data"); return NULL; } if (!rt_band_get_hasnodata_flag(band)) exclude_nodata_value = 0; RASTER_DEBUGF(3, "exclude_nodata_value = %d", exclude_nodata_value); /* quantile_llist not provided */ if (NULL == *qlls) { /* quantiles not provided */ if (NULL == quantiles) { /* quantile count not specified, default to quartiles */ if (quantiles_count < 2) quantiles_count = 5; quantiles = rtalloc(sizeof(double) * quantiles_count); init_quantiles = 1; if (NULL == quantiles) { rterror("rt_band_get_quantiles_stream: Could not allocate memory for quantile input"); return NULL; } quantiles_count--; for (i = 0; i <= quantiles_count; i++) quantiles[i] = ((double) i) / quantiles_count; quantiles_count++; } /* check quantiles */ for (i = 0; i < quantiles_count; i++) { if (quantiles[i] < 0. || quantiles[i] > 1.) { rterror("rt_band_get_quantiles_stream: Quantile value not between 0 and 1"); if (init_quantiles) rtdealloc(quantiles); return NULL; } } quicksort(quantiles, quantiles + quantiles_count - 1); /* initialize linked-list set */ *qlls_count = quantiles_count * 2; RASTER_DEBUGF(4, "qlls_count = %d", *qlls_count); *qlls = rtalloc(sizeof(struct quantile_llist) * *qlls_count); if (NULL == *qlls) { rterror("rt_band_get_quantiles_stream: Could not allocate memory for quantile output"); if (init_quantiles) rtdealloc(quantiles); return NULL; } j = (uint32_t) floor(MAX_VALUES / 100.) + 1; for (i = 0; i < *qlls_count; i++) { qll = &((*qlls)[i]); qll->quantile = quantiles[(i * quantiles_count) / *qlls_count]; qll->count = 0; qll->sum1 = 0; qll->sum2 = 0; qll->head = NULL; qll->tail = NULL; /* initialize index */ qll->index = rtalloc(sizeof(struct quantile_llist_index) * j); if (NULL == qll->index) { rterror("rt_band_get_quantiles_stream: Could not allocate memory for quantile output"); if (init_quantiles) rtdealloc(quantiles); return NULL; } qll->index_max = j; quantile_llist_index_reset(qll); /* AL-GEQ */ if (!(i % 2)) { qll->algeq = 1; qll->tau = (uint64_t) ROUND(cov_count - (cov_count * qll->quantile), 0); if (qll->tau < 1) qll->tau = 1; } /* AL-GT */ else { qll->algeq = 0; qll->tau = cov_count - (*qlls)[i - 1].tau + 1; } RASTER_DEBUGF(4, "qll init: (algeq, quantile, count, tau, sum1, sum2) = (%d, %f, %d, %d, %d, %d)", qll->algeq, qll->quantile, qll->count, qll->tau, qll->sum1, qll->sum2); RASTER_DEBUGF(4, "qll init: (head, tail) = (%p, %p)", qll->head, qll->tail); } if (init_quantiles) rtdealloc(quantiles); } /* clamp percentage */ if ( (sample < 0 || FLT_EQ(sample, 0.0)) || (sample > 1 || FLT_EQ(sample, 1.0)) ) { do_sample = 0; sample = 1; } else do_sample = 1; RASTER_DEBUGF(3, "do_sample = %d", do_sample); /* sample all pixels */ if (!do_sample) { sample_size = band->width * band->height; sample_per = band->height; } /* randomly sample a percentage of available pixels sampling method is known as "systematic random sample without replacement" */ else { sample_size = round((band->width * band->height) * sample); sample_per = round(sample_size / band->width); sample_int = round(band->height / sample_per); srand(time(NULL)); } RASTER_DEBUGF(3, "sampling %d of %d available pixels w/ %d per set" , sample_size, (band->width * band->height), sample_per); for (x = 0, j = 0, k = 0; x < band->width; x++) { y = -1; diff = 0; /* exclude_nodata_value = TRUE and band is NODATA */ if (exclude_nodata_value && rt_band_get_isnodata_flag(band)) { RASTER_DEBUG(3, "Skipping quantile calcuation as band is NODATA"); break; } for (i = 0, z = 0; i < sample_per; i++) { if (do_sample != 1) y = i; else { offset = (rand() % sample_int) + 1; y += diff + offset; diff = sample_int - offset; } RASTER_DEBUGF(5, "(x, y, z) = (%d, %d, %d)", x, y, z); if (y >= band->height || z > sample_per) break; status = rt_band_get_pixel(band, x, y, &value, &isnodata); j++; if (status == ES_NONE && (!exclude_nodata_value || (exclude_nodata_value && !isnodata))) { /* process each quantile */ for (a = 0; a < *qlls_count; a++) { qll = &((*qlls)[a]); qls = NULL; RASTER_DEBUGF(4, "%d of %d (%f)", a + 1, *qlls_count, qll->quantile); RASTER_DEBUGF(5, "qll before: (algeq, quantile, count, tau, sum1, sum2) = (%d, %f, %d, %d, %d, %d)", qll->algeq, qll->quantile, qll->count, qll->tau, qll->sum1, qll->sum2); RASTER_DEBUGF(5, "qll before: (head, tail) = (%p, %p)", qll->head, qll->tail); /* OPTIMIZATION: shortcuts for quantiles of zero or one */ if (FLT_EQ(qll->quantile, 0.)) { if (NULL != qll->head) { if (value < qll->head->value) qll->head->value = value; } else { qle = quantile_llist_insert(qll->head, value, NULL); qll->head = qle; qll->tail = qle; qll->count = 1; } RASTER_DEBUGF(4, "quantile shortcut for %f\n\n", qll->quantile); continue; } else if (FLT_EQ(qll->quantile, 1.)) { if (NULL != qll->head) { if (value > qll->head->value) qll->head->value = value; } else { qle = quantile_llist_insert(qll->head, value, NULL); qll->head = qle; qll->tail = qle; qll->count = 1; } RASTER_DEBUGF(4, "quantile shortcut for %f\n\n", qll->quantile); continue; } /* value exists in list */ /* OPTIMIZATION: check to see if value exceeds last value */ if (NULL != qll->tail && value > qll->tail->value) qle = NULL; /* OPTIMIZATION: check to see if value equals last value */ else if (NULL != qll->tail && FLT_EQ(value, qll->tail->value)) qle = qll->tail; /* OPTIMIZATION: use index if possible */ else { qls = quantile_llist_index_search(qll, value, &idx); qle = quantile_llist_search(qls, value); } /* value found */ if (NULL != qle) { RASTER_DEBUGF(4, "%f found in list", value); RASTER_DEBUGF(5, "qle before: (value, count) = (%f, %d)", qle->value, qle->count); qle->count++; qll->sum1++; if (qll->algeq) qll->sum2 = qll->sum1 - qll->head->count; else qll->sum2 = qll->sum1 - qll->tail->count; RASTER_DEBUGF(4, "qle after: (value, count) = (%f, %d)", qle->value, qle->count); } /* can still add element */ else if (qll->count < MAX_VALUES) { RASTER_DEBUGF(4, "Adding %f to list", value); /* insert */ /* OPTIMIZATION: check to see if value exceeds last value */ if (NULL != qll->tail && (value > qll->tail->value || FLT_EQ(value, qll->tail->value))) { idx = qll->count; qle = quantile_llist_insert(qll->tail, value, &idx); } /* OPTIMIZATION: use index if possible */ else qle = quantile_llist_insert(qls, value, &idx); if (NULL == qle) return NULL; RASTER_DEBUGF(5, "value added at index: %d => %f", idx, value); qll->count++; qll->sum1++; /* first element */ if (NULL == qle->prev) qll->head = qle; /* last element */ if (NULL == qle->next) qll->tail = qle; if (qll->algeq) qll->sum2 = qll->sum1 - qll->head->count; else qll->sum2 = qll->sum1 - qll->tail->count; /* index is only needed if there are at least 100 values */ quantile_llist_index_update(qll, qle, idx); RASTER_DEBUGF(5, "qle, prev, next, head, tail = %p, %p, %p, %p, %p", qle, qle->prev, qle->next, qll->head, qll->tail); } /* AL-GEQ */ else if (qll->algeq) { RASTER_DEBUGF(4, "value, head->value = %f, %f", value, qll->head->value); if (value < qll->head->value) { /* ignore value if test isn't true */ if (qll->sum1 >= qll->tau) { RASTER_DEBUGF(4, "skipping %f", value); } else { /* delete last element */ RASTER_DEBUGF(4, "deleting %f from list", qll->tail->value); qle = qll->tail->prev; RASTER_DEBUGF(5, "to-be tail is %f with count %d", qle->value, qle->count); qle->count += qll->tail->count; quantile_llist_index_delete(qll, qll->tail); quantile_llist_delete(qll->tail); qll->tail = qle; qll->count--; RASTER_DEBUGF(5, "tail is %f with count %d", qll->tail->value, qll->tail->count); /* insert value */ RASTER_DEBUGF(4, "adding %f to list", value); /* OPTIMIZATION: check to see if value exceeds last value */ if (NULL != qll->tail && (value > qll->tail->value || FLT_EQ(value, qll->tail->value))) { idx = qll->count; qle = quantile_llist_insert(qll->tail, value, &idx); } /* OPTIMIZATION: use index if possible */ else { qls = quantile_llist_index_search(qll, value, &idx); qle = quantile_llist_insert(qls, value, &idx); } if (NULL == qle) return NULL; RASTER_DEBUGF(5, "value added at index: %d => %f", idx, value); qll->count++; qll->sum1++; /* first element */ if (NULL == qle->prev) qll->head = qle; /* last element */ if (NULL == qle->next) qll->tail = qle; qll->sum2 = qll->sum1 - qll->head->count; quantile_llist_index_update(qll, qle, idx); RASTER_DEBUGF(5, "qle, head, tail = %p, %p, %p", qle, qll->head, qll->tail); } } else { qle = qll->tail; while (NULL != qle) { if (qle->value < value) { qle->count++; qll->sum1++; qll->sum2 = qll->sum1 - qll->head->count; RASTER_DEBUGF(4, "incremented count of %f by 1 to %d", qle->value, qle->count); break; } qle = qle->prev; } } } /* AL-GT */ else { RASTER_DEBUGF(4, "value, tail->value = %f, %f", value, qll->tail->value); if (value > qll->tail->value) { /* ignore value if test isn't true */ if (qll->sum1 >= qll->tau) { RASTER_DEBUGF(4, "skipping %f", value); } else { /* delete last element */ RASTER_DEBUGF(4, "deleting %f from list", qll->head->value); qle = qll->head->next; RASTER_DEBUGF(5, "to-be tail is %f with count %d", qle->value, qle->count); qle->count += qll->head->count; quantile_llist_index_delete(qll, qll->head); quantile_llist_delete(qll->head); qll->head = qle; qll->count--; quantile_llist_index_update(qll, NULL, 0); RASTER_DEBUGF(5, "tail is %f with count %d", qll->head->value, qll->head->count); /* insert value */ RASTER_DEBUGF(4, "adding %f to list", value); /* OPTIMIZATION: check to see if value exceeds last value */ if (NULL != qll->tail && (value > qll->tail->value || FLT_EQ(value, qll->tail->value))) { idx = qll->count; qle = quantile_llist_insert(qll->tail, value, &idx); } /* OPTIMIZATION: use index if possible */ else { qls = quantile_llist_index_search(qll, value, &idx); qle = quantile_llist_insert(qls, value, &idx); } if (NULL == qle) return NULL; RASTER_DEBUGF(5, "value added at index: %d => %f", idx, value); qll->count++; qll->sum1++; /* first element */ if (NULL == qle->prev) qll->head = qle; /* last element */ if (NULL == qle->next) qll->tail = qle; qll->sum2 = qll->sum1 - qll->tail->count; quantile_llist_index_update(qll, qle, idx); RASTER_DEBUGF(5, "qle, head, tail = %p, %p, %p", qle, qll->head, qll->tail); } } else { qle = qll->head; while (NULL != qle) { if (qle->value > value) { qle->count++; qll->sum1++; qll->sum2 = qll->sum1 - qll->tail->count; RASTER_DEBUGF(4, "incremented count of %f by 1 to %d", qle->value, qle->count); break; } qle = qle->next; } } } RASTER_DEBUGF(5, "sum2, tau = %d, %d", qll->sum2, qll->tau); if (qll->sum2 >= qll->tau) { /* AL-GEQ */ if (qll->algeq) { RASTER_DEBUGF(4, "deleting first element %f from list", qll->head->value); if (NULL != qll->head->next) { qle = qll->head->next; qll->sum1 -= qll->head->count; qll->sum2 = qll->sum1 - qle->count; quantile_llist_index_delete(qll, qll->head); quantile_llist_delete(qll->head); qll->head = qle; qll->count--; quantile_llist_index_update(qll, NULL, 0); } else { quantile_llist_delete(qll->head); qll->head = NULL; qll->tail = NULL; qll->sum1 = 0; qll->sum2 = 0; qll->count = 0; quantile_llist_index_reset(qll); } } /* AL-GT */ else { RASTER_DEBUGF(4, "deleting first element %f from list", qll->tail->value); if (NULL != qll->tail->prev) { qle = qll->tail->prev; qll->sum1 -= qll->tail->count; qll->sum2 = qll->sum1 - qle->count; quantile_llist_index_delete(qll, qll->tail); quantile_llist_delete(qll->tail); qll->tail = qle; qll->count--; } else { quantile_llist_delete(qll->tail); qll->head = NULL; qll->tail = NULL; qll->sum1 = 0; qll->sum2 = 0; qll->count = 0; quantile_llist_index_reset(qll); } } } RASTER_DEBUGF(5, "qll after: (algeq, quantile, count, tau, sum1, sum2) = (%d, %f, %d, %d, %d, %d)", qll->algeq, qll->quantile, qll->count, qll->tau, qll->sum1, qll->sum2); RASTER_DEBUGF(5, "qll after: (head, tail) = (%p, %p)\n\n", qll->head, qll->tail); } } else { RASTER_DEBUGF(5, "skipping value at (x, y) = (%d, %d)", x, y); } z++; } } /* process quantiles */ *rtn_count = *qlls_count / 2; rtn = rtalloc(sizeof(struct rt_quantile_t) * *rtn_count); if (NULL == rtn) return NULL; RASTER_DEBUGF(3, "returning %d quantiles", *rtn_count); for (i = 0, k = 0; i < *qlls_count; i++) { qll = &((*qlls)[i]); exists = 0; for (x = 0; x < k; x++) { if (FLT_EQ(qll->quantile, rtn[x].quantile)) { exists = 1; break; } } if (exists) continue; RASTER_DEBUGF(5, "qll: (algeq, quantile, count, tau, sum1, sum2) = (%d, %f, %d, %d, %d, %d)", qll->algeq, qll->quantile, qll->count, qll->tau, qll->sum1, qll->sum2); RASTER_DEBUGF(5, "qll: (head, tail) = (%p, %p)", qll->head, qll->tail); rtn[k].quantile = qll->quantile; rtn[k].has_value = 0; /* check that qll->head and qll->tail have value */ if (qll->head == NULL || qll->tail == NULL) continue; /* AL-GEQ */ if (qll->algeq) qle = qll->head; /* AM-GT */ else qle = qll->tail; exists = 0; for (j = i + 1; j < *qlls_count; j++) { if (FLT_EQ((*qlls)[j].quantile, qll->quantile)) { RASTER_DEBUGF(5, "qlls[%d]: (algeq, quantile, count, tau, sum1, sum2) = (%d, %f, %d, %d, %d, %d)", j, (*qlls)[j].algeq, (*qlls)[j].quantile, (*qlls)[j].count, (*qlls)[j].tau, (*qlls)[j].sum1, (*qlls)[j].sum2); RASTER_DEBUGF(5, "qlls[%d]: (head, tail) = (%p, %p)", j, (*qlls)[j].head, (*qlls)[j].tail); exists = 1; break; } } /* weighted average for quantile */ if (exists) { if ((*qlls)[j].algeq) { rtn[k].value = ((qle->value * qle->count) + ((*qlls)[j].head->value * (*qlls)[j].head->count)) / (qle->count + (*qlls)[j].head->count); RASTER_DEBUGF(5, "qlls[%d].head: (value, count) = (%f, %d)", j, (*qlls)[j].head->value, (*qlls)[j].head->count); } else { rtn[k].value = ((qle->value * qle->count) + ((*qlls)[j].tail->value * (*qlls)[j].tail->count)) / (qle->count + (*qlls)[j].tail->count); RASTER_DEBUGF(5, "qlls[%d].tail: (value, count) = (%f, %d)", j, (*qlls)[j].tail->value, (*qlls)[j].tail->count); } } /* straight value for quantile */ else { rtn[k].value = qle->value; } rtn[k].has_value = 1; RASTER_DEBUGF(3, "(quantile, value) = (%f, %f)\n\n", rtn[k].quantile, rtn[k].value); k++; } RASTER_DEBUG(3, "done"); return rtn; } /** * Count the number of times provided value(s) occur in * the band * * @param band : the band to query for minimum and maximum pixel values * @param exclude_nodata_value : if non-zero, ignore nodata values * @param search_values : array of values to count * @param search_values_count : the number of search values * @param roundto : the decimal place to round the values to * @param rtn_total : the number of pixels examined in the band * @param rtn_count : the number of value counts being returned * * @return the number of times the provide value(s) occur or NULL */ rt_valuecount rt_band_get_value_count( rt_band band, int exclude_nodata_value, double *search_values, uint32_t search_values_count, double roundto, uint32_t *rtn_total, uint32_t *rtn_count ) { rt_valuecount vcnts = NULL; rt_pixtype pixtype = PT_END; uint8_t *data = NULL; double nodata = 0; int scale = 0; int doround = 0; double tmpd = 0; int i = 0; uint32_t x = 0; uint32_t y = 0; int rtn; double pxlval; int isnodata = 0; double rpxlval; uint32_t total = 0; int vcnts_count = 0; int new_valuecount = 0; #if POSTGIS_DEBUG_LEVEL > 0 clock_t start, stop; double elapsed = 0; #endif RASTER_DEBUG(3, "starting"); #if POSTGIS_DEBUG_LEVEL > 0 start = clock(); #endif assert(NULL != band); assert(NULL != rtn_count); data = rt_band_get_data(band); if (data == NULL) { rterror("rt_band_get_summary_stats: Cannot get band data"); return NULL; } pixtype = band->pixtype; if (rt_band_get_hasnodata_flag(band)) { rt_band_get_nodata(band, &nodata); RASTER_DEBUGF(3, "hasnodata, nodataval = 1, %f", nodata); } else { exclude_nodata_value = 0; RASTER_DEBUG(3, "hasnodata, nodataval = 0, 0"); } RASTER_DEBUGF(3, "exclude_nodata_value = %d", exclude_nodata_value); /* process roundto */ if (roundto < 0 || FLT_EQ(roundto, 0.0)) { roundto = 0; scale = 0; } /* tenths, hundredths, thousandths, etc */ else if (roundto < 1) { switch (pixtype) { /* integer band types don't have digits after the decimal place */ case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BSI: case PT_8BUI: case PT_16BSI: case PT_16BUI: case PT_32BSI: case PT_32BUI: roundto = 0; break; /* floating points, check the rounding */ case PT_32BF: case PT_64BF: for (scale = 0; scale <= 20; scale++) { tmpd = roundto * pow(10, scale); if (FLT_EQ((tmpd - ((int) tmpd)), 0.0)) break; } break; case PT_END: break; } } /* ones, tens, hundreds, etc */ else { for (scale = 0; scale >= -20; scale--) { tmpd = roundto * pow(10, scale); if (tmpd < 1 || FLT_EQ(tmpd, 1.0)) { if (scale == 0) doround = 1; break; } } } if (scale != 0 || doround) doround = 1; else doround = 0; RASTER_DEBUGF(3, "scale = %d", scale); RASTER_DEBUGF(3, "doround = %d", doround); /* process search_values */ if (search_values_count > 0 && NULL != search_values) { vcnts = (rt_valuecount) rtalloc(sizeof(struct rt_valuecount_t) * search_values_count); if (NULL == vcnts) { rterror("rt_band_get_count_of_values: Could not allocate memory for value counts"); *rtn_count = 0; return NULL; } for (i = 0; i < search_values_count; i++) { vcnts[i].count = 0; vcnts[i].percent = 0; if (!doround) vcnts[i].value = search_values[i]; else vcnts[i].value = ROUND(search_values[i], scale); } vcnts_count = i; } else search_values_count = 0; RASTER_DEBUGF(3, "search_values_count = %d", search_values_count); /* entire band is nodata */ if (rt_band_get_isnodata_flag(band) != FALSE) { if (exclude_nodata_value) { rtwarn("All pixels of band have the NODATA value"); return NULL; } else { if (search_values_count > 0) { /* check for nodata match */ for (i = 0; i < search_values_count; i++) { if (!doround) tmpd = nodata; else tmpd = ROUND(nodata, scale); if (FLT_NEQ(tmpd, vcnts[i].value)) continue; vcnts[i].count = band->width * band->height; if (NULL != rtn_total) *rtn_total = vcnts[i].count; vcnts->percent = 1.0; } *rtn_count = vcnts_count; } /* no defined search values */ else { vcnts = (rt_valuecount) rtalloc(sizeof(struct rt_valuecount_t)); if (NULL == vcnts) { rterror("rt_band_get_count_of_values: Could not allocate memory for value counts"); *rtn_count = 0; return NULL; } vcnts->value = nodata; vcnts->count = band->width * band->height; if (NULL != rtn_total) *rtn_total = vcnts[i].count; vcnts->percent = 1.0; *rtn_count = 1; } return vcnts; } } for (x = 0; x < band->width; x++) { for (y = 0; y < band->height; y++) { rtn = rt_band_get_pixel(band, x, y, &pxlval, &isnodata); /* error getting value, continue */ if (rtn != ES_NONE) continue; if (!exclude_nodata_value || (exclude_nodata_value && !isnodata)) { total++; if (doround) { rpxlval = ROUND(pxlval, scale); } else rpxlval = pxlval; RASTER_DEBUGF(5, "(pxlval, rpxlval) => (%0.6f, %0.6f)", pxlval, rpxlval); new_valuecount = 1; /* search for match in existing valuecounts */ for (i = 0; i < vcnts_count; i++) { /* match found */ if (FLT_EQ(vcnts[i].value, rpxlval)) { vcnts[i].count++; new_valuecount = 0; RASTER_DEBUGF(5, "(value, count) => (%0.6f, %d)", vcnts[i].value, vcnts[i].count); break; } } /* don't add new valuecount either because - no need for new one - user-defined search values */ if (!new_valuecount || search_values_count > 0) continue; /* add new valuecount */ vcnts = rtrealloc(vcnts, sizeof(struct rt_valuecount_t) * (vcnts_count + 1)); if (NULL == vcnts) { rterror("rt_band_get_count_of_values: Could not allocate memory for value counts"); *rtn_count = 0; return NULL; } vcnts[vcnts_count].value = rpxlval; vcnts[vcnts_count].count = 1; vcnts[vcnts_count].percent = 0; RASTER_DEBUGF(5, "(value, count) => (%0.6f, %d)", vcnts[vcnts_count].value, vcnts[vcnts_count].count); vcnts_count++; } } } #if POSTGIS_DEBUG_LEVEL > 0 stop = clock(); elapsed = ((double) (stop - start)) / CLOCKS_PER_SEC; RASTER_DEBUGF(3, "elapsed time = %0.4f", elapsed); #endif for (i = 0; i < vcnts_count; i++) { vcnts[i].percent = (double) vcnts[i].count / total; RASTER_DEBUGF(5, "(value, count) => (%0.6f, %d)", vcnts[i].value, vcnts[i].count); } RASTER_DEBUG(3, "done"); if (NULL != rtn_total) *rtn_total = total; *rtn_count = vcnts_count; return vcnts; } /** * Returns new band with values reclassified * * @param srcband : the band who's values will be reclassified * @param pixtype : pixel type of the new band * @param hasnodata : indicates if the band has a nodata value * @param nodataval : nodata value for the new band * @param exprset : array of rt_reclassexpr structs * @param exprcount : number of elements in expr * * @return a new rt_band or NULL on error */ rt_band rt_band_reclass( rt_band srcband, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, rt_reclassexpr *exprset, int exprcount ) { rt_band band = NULL; uint32_t width = 0; uint32_t height = 0; int numval = 0; int memsize = 0; void *mem = NULL; uint32_t src_hasnodata = 0; double src_nodataval = 0.0; int isnodata = 0; int rtn; uint32_t x; uint32_t y; int i; double or = 0; double ov = 0; double nr = 0; double nv = 0; int do_nv = 0; rt_reclassexpr expr = NULL; assert(NULL != srcband); assert(NULL != exprset && exprcount > 0); RASTER_DEBUGF(4, "exprcount = %d", exprcount); RASTER_DEBUGF(4, "exprset @ %p", exprset); /* source nodata */ src_hasnodata = rt_band_get_hasnodata_flag(srcband); if (src_hasnodata) rt_band_get_nodata(srcband, &src_nodataval); /* size of memory block to allocate */ width = rt_band_get_width(srcband); height = rt_band_get_height(srcband); numval = width * height; memsize = rt_pixtype_size(pixtype) * numval; mem = (int *) rtalloc(memsize); if (!mem) { rterror("rt_band_reclass: Could not allocate memory for band"); return 0; } /* initialize to zero */ if (!hasnodata) { memset(mem, 0, memsize); } /* initialize to nodataval */ else { int32_t checkvalint = 0; uint32_t checkvaluint = 0; double checkvaldouble = 0; float checkvalfloat = 0; switch (pixtype) { case PT_1BB: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_1BB(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_2BUI: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_2BUI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_4BUI: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_4BUI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_8BSI: { int8_t *ptr = mem; int8_t clamped_initval = rt_util_clamp_to_8BSI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_8BUI: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_8BUI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_16BSI: { int16_t *ptr = mem; int16_t clamped_initval = rt_util_clamp_to_16BSI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_16BUI: { uint16_t *ptr = mem; uint16_t clamped_initval = rt_util_clamp_to_16BUI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_32BSI: { int32_t *ptr = mem; int32_t clamped_initval = rt_util_clamp_to_32BSI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_32BUI: { uint32_t *ptr = mem; uint32_t clamped_initval = rt_util_clamp_to_32BUI(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvaluint = ptr[0]; break; } case PT_32BF: { float *ptr = mem; float clamped_initval = rt_util_clamp_to_32F(nodataval); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalfloat = ptr[0]; break; } case PT_64BF: { double *ptr = mem; for (i = 0; i < numval; i++) ptr[i] = nodataval; checkvaldouble = ptr[0]; break; } default: { rterror("rt_band_reclass: Unknown pixeltype %d", pixtype); rtdealloc(mem); return 0; } } /* Overflow checking */ rt_util_dbl_trunc_warning( nodataval, checkvalint, checkvaluint, checkvalfloat, checkvaldouble, pixtype ); } RASTER_DEBUGF(3, "rt_band_reclass: width = %d height = %d", width, height); band = rt_band_new_inline(width, height, pixtype, hasnodata, nodataval, mem); if (!band) { rterror("rt_band_reclass: Could not create new band"); rtdealloc(mem); return 0; } rt_band_set_ownsdata_flag(band, 1); /* we DO own this data!!! */ RASTER_DEBUGF(3, "rt_band_reclass: new band @ %p", band); for (x = 0; x < width; x++) { for (y = 0; y < height; y++) { rtn = rt_band_get_pixel(srcband, x, y, &ov, &isnodata); /* error getting value, skip */ if (rtn != ES_NONE) { RASTER_DEBUGF(3, "Cannot get value at %d, %d", x, y); continue; } do { do_nv = 0; /* no data*/ if (hasnodata && isnodata) { do_nv = 1; break; } for (i = 0; i < exprcount; i++) { expr = exprset[i]; /* ov matches min and max*/ if ( FLT_EQ(expr->src.min, ov) && FLT_EQ(expr->src.max, ov) ) { do_nv = 1; break; } /* process min */ if (( expr->src.exc_min && ( expr->src.min > ov || FLT_EQ(expr->src.min, ov) )) || ( expr->src.inc_min && ( expr->src.min < ov || FLT_EQ(expr->src.min, ov) )) || ( expr->src.min < ov )) { /* process max */ if (( expr->src.exc_max && ( ov > expr->src.max || FLT_EQ(expr->src.max, ov) )) || ( expr->src.inc_max && ( ov < expr->src.max || FLT_EQ(expr->src.max, ov) )) || ( ov < expr->src.max )) { do_nv = 1; break; } } } } while (0); /* no expression matched, do not continue */ if (!do_nv) continue; RASTER_DEBUGF(3, "Using exprset[%d] unless NODATA", i); /* converting a value from one range to another range OldRange = (OldMax - OldMin) NewRange = (NewMax - NewMin) NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin */ /* NODATA */ if (hasnodata && isnodata) { nv = nodataval; } /* "src" min and max is the same, prevent division by zero set nv to "dst" min, which should be the same as "dst" max */ else if (FLT_EQ(expr->src.max, expr->src.min)) { nv = expr->dst.min; } else { or = expr->src.max - expr->src.min; nr = expr->dst.max - expr->dst.min; nv = (((ov - expr->src.min) * nr) / or) + expr->dst.min; /* if dst range is from high to low */ if (expr->dst.min > expr->dst.max) { if (nv > expr->dst.min) nv = expr->dst.min; else if (nv < expr->dst.max) nv = expr->dst.max; } /* if dst range is from low to high */ else { if (nv < expr->dst.min) nv = expr->dst.min; else if (nv > expr->dst.max) nv = expr->dst.max; } } /* round the value for integers */ switch (pixtype) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BSI: case PT_8BUI: case PT_16BSI: case PT_16BUI: case PT_32BSI: case PT_32BUI: nv = round(nv); break; default: break; } RASTER_DEBUGF(4, "(%d, %d) ov: %f or: %f - %f nr: %f - %f nv: %f" , x , y , ov , (NULL != expr) ? expr->src.min : 0 , (NULL != expr) ? expr->src.max : 0 , (NULL != expr) ? expr->dst.min : 0 , (NULL != expr) ? expr->dst.max : 0 , nv ); if (rt_band_set_pixel(band, x, y, nv, NULL) != ES_NONE) { rterror("rt_band_reclass: Could not assign value to new band"); rt_band_destroy(band); rtdealloc(mem); return 0; } expr = NULL; } } return band; } /*- rt_raster --------------------------------------------------------*/ /** * Construct a raster with given dimensions. * * Transform will be set to identity. * Will contain no bands. * * @param width : number of pixel columns * @param height : number of pixel rows * * @return an rt_raster or NULL if out of memory */ rt_raster rt_raster_new(uint32_t width, uint32_t height) { rt_raster ret = NULL; ret = (rt_raster) rtalloc(sizeof (struct rt_raster_t)); if (!ret) { rterror("rt_raster_new: Out of virtual memory creating an rt_raster"); return NULL; } RASTER_DEBUGF(3, "Created rt_raster @ %p", ret); if (width > 65535 || height > 65535) { rterror("rt_raster_new: Dimensions requested exceed the maximum (65535 x 65535) permitted for a raster"); rt_raster_destroy(ret); return NULL; } ret->width = width; ret->height = height; ret->scaleX = 1; ret->scaleY = -1; ret->ipX = 0.0; ret->ipY = 0.0; ret->skewX = 0.0; ret->skewY = 0.0; ret->srid = SRID_UNKNOWN; ret->numBands = 0; ret->bands = NULL; return ret; } void rt_raster_destroy(rt_raster raster) { if (raster == NULL) return; RASTER_DEBUGF(3, "Destroying rt_raster @ %p", raster); if (raster->bands) rtdealloc(raster->bands); rtdealloc(raster); } static void _rt_raster_geotransform_warn_offline_band(rt_raster raster) { int numband = 0; int i = 0; rt_band band = NULL; if (raster == NULL) return; numband = rt_raster_get_num_bands(raster); if (numband < 1) return; for (i = 0; i < numband; i++) { band = rt_raster_get_band(raster, i); if (NULL == band) continue; if (!rt_band_is_offline(band)) continue; rtwarn("Changes made to raster geotransform matrix may affect out-db band data. Returned band data may be incorrect"); break; } } uint16_t rt_raster_get_width(rt_raster raster) { assert(NULL != raster); return raster->width; } uint16_t rt_raster_get_height(rt_raster raster) { assert(NULL != raster); return raster->height; } void rt_raster_set_scale( rt_raster raster, double scaleX, double scaleY ) { assert(NULL != raster); raster->scaleX = scaleX; raster->scaleY = scaleY; _rt_raster_geotransform_warn_offline_band(raster); } double rt_raster_get_x_scale(rt_raster raster) { assert(NULL != raster); return raster->scaleX; } double rt_raster_get_y_scale(rt_raster raster) { assert(NULL != raster); return raster->scaleY; } void rt_raster_set_skews( rt_raster raster, double skewX, double skewY ) { assert(NULL != raster); raster->skewX = skewX; raster->skewY = skewY; _rt_raster_geotransform_warn_offline_band(raster); } double rt_raster_get_x_skew(rt_raster raster) { assert(NULL != raster); return raster->skewX; } double rt_raster_get_y_skew(rt_raster raster) { assert(NULL != raster); return raster->skewY; } void rt_raster_set_offsets( rt_raster raster, double x, double y ) { assert(NULL != raster); raster->ipX = x; raster->ipY = y; _rt_raster_geotransform_warn_offline_band(raster); } double rt_raster_get_x_offset(rt_raster raster) { assert(NULL != raster); return raster->ipX; } double rt_raster_get_y_offset(rt_raster raster) { assert(NULL != raster); return raster->ipY; } void rt_raster_get_phys_params(rt_raster rast, double *i_mag, double *j_mag, double *theta_i, double *theta_ij) { double o11, o12, o21, o22 ; /* geotransform coefficients */ if (rast == NULL) return ; if ( (i_mag==NULL) || (j_mag==NULL) || (theta_i==NULL) || (theta_ij==NULL)) return ; /* retrieve coefficients from raster */ o11 = rt_raster_get_x_scale(rast) ; o12 = rt_raster_get_x_skew(rast) ; o21 = rt_raster_get_y_skew(rast) ; o22 = rt_raster_get_y_scale(rast) ; rt_raster_calc_phys_params(o11, o12, o21, o22, i_mag, j_mag, theta_i, theta_ij); } void rt_raster_calc_phys_params(double xscale, double xskew, double yskew, double yscale, double *i_mag, double *j_mag, double *theta_i, double *theta_ij) { double theta_test ; if ( (i_mag==NULL) || (j_mag==NULL) || (theta_i==NULL) || (theta_ij==NULL)) return ; /* pixel size in the i direction */ *i_mag = sqrt(xscale*xscale + yskew*yskew) ; /* pixel size in the j direction */ *j_mag = sqrt(xskew*xskew + yscale*yscale) ; /* Rotation * ======== * Two steps: * 1] calculate the magnitude of the angle between the x axis and * the i basis vector. * 2] Calculate the sign of theta_i based on the angle between the y axis * and the i basis vector. */ *theta_i = acos(xscale/(*i_mag)) ; /* magnitude */ theta_test = acos(yskew/(*i_mag)) ; /* sign */ if (theta_test < M_PI_2){ *theta_i = -(*theta_i) ; } /* Angular separation of basis vectors * =================================== * Two steps: * 1] calculate the magnitude of the angle between the j basis vector and * the i basis vector. * 2] Calculate the sign of theta_ij based on the angle between the * perpendicular of the i basis vector and the j basis vector. */ *theta_ij = acos(((xscale*xskew) + (yskew*yscale))/((*i_mag)*(*j_mag))) ; theta_test = acos( ((-yskew*xskew)+(xscale*yscale)) / ((*i_mag)*(*j_mag))); if (theta_test > M_PI_2) { *theta_ij = -(*theta_ij) ; } } void rt_raster_set_phys_params(rt_raster rast,double i_mag, double j_mag, double theta_i, double theta_ij) { double o11, o12, o21, o22 ; /* calculated geotransform coefficients */ int success ; if (rast == NULL) return ; success = rt_raster_calc_gt_coeff(i_mag, j_mag, theta_i, theta_ij, &o11, &o12, &o21, &o22) ; if (success) { rt_raster_set_scale(rast, o11, o22) ; rt_raster_set_skews(rast, o12, o21) ; } } int rt_raster_calc_gt_coeff(double i_mag, double j_mag, double theta_i, double theta_ij, double *xscale, double *xskew, double *yskew, double *yscale) { double f ; /* reflection flag 1.0 or -1.0 */ double k_i ; /* shearing coefficient */ double s_i, s_j ; /* scaling coefficients */ double cos_theta_i, sin_theta_i ; if ( (xscale==NULL) || (xskew==NULL) || (yskew==NULL) || (yscale==NULL)) { return 0; } if ( (theta_ij == 0.0) || (theta_ij == M_PI)) { return 0; } /* Reflection across the i axis */ f=1.0 ; if (theta_ij < 0) { f = -1.0; } /* scaling along i axis */ s_i = i_mag ; /* shearing parallel to i axis */ k_i = tan(f*M_PI_2 - theta_ij) ; /* scaling along j axis */ s_j = j_mag / (sqrt(k_i*k_i + 1)) ; /* putting it altogether */ cos_theta_i = cos(theta_i) ; sin_theta_i = sin(theta_i) ; *xscale = s_i * cos_theta_i ; *xskew = k_i * s_j * f * cos_theta_i + s_j * f * sin_theta_i ; *yskew = -s_i * sin_theta_i ; *yscale = -k_i * s_j * f * sin_theta_i + s_j * f * cos_theta_i ; return 1; } int32_t rt_raster_get_srid(rt_raster raster) { assert(NULL != raster); return clamp_srid(raster->srid); } void rt_raster_set_srid(rt_raster raster, int32_t srid) { assert(NULL != raster); raster->srid = clamp_srid(srid); _rt_raster_geotransform_warn_offline_band(raster); } int rt_raster_get_num_bands(rt_raster raster) { assert(NULL != raster); return raster->numBands; } rt_band rt_raster_get_band(rt_raster raster, int n) { assert(NULL != raster); if (n >= raster->numBands || n < 0) return NULL; return raster->bands[n]; } /** * Add band data to a raster. * * @param raster : the raster to add a band to * @param band : the band to add, ownership left to caller. * Band dimensions are required to match with raster ones. * @param index : the position where to insert the new band (0 based) * * @return identifier (position) for the just-added raster, or -1 on error */ int rt_raster_add_band(rt_raster raster, rt_band band, int index) { rt_band *oldbands = NULL; rt_band oldband = NULL; rt_band tmpband = NULL; uint16_t i = 0; assert(NULL != raster); assert(NULL != band); RASTER_DEBUGF(3, "Adding band %p to raster %p", band, raster); if (band->width != raster->width || band->height != raster->height) { rterror("rt_raster_add_band: Can't add a %dx%d band to a %dx%d raster", band->width, band->height, raster->width, raster->height); return -1; } if (index > raster->numBands) index = raster->numBands; if (index < 0) index = 0; oldbands = raster->bands; RASTER_DEBUGF(3, "Oldbands at %p", oldbands); raster->bands = (rt_band*) rtrealloc(raster->bands, sizeof (rt_band)*(raster->numBands + 1) ); RASTER_DEBUG(3, "Checking bands"); if (NULL == raster->bands) { rterror("rt_raster_add_band: Out of virtual memory " "reallocating band pointers"); raster->bands = oldbands; return -1; } RASTER_DEBUGF(4, "realloc returned %p", raster->bands); for (i = 0; i <= raster->numBands; ++i) { if (i == index) { oldband = raster->bands[i]; raster->bands[i] = band; } else if (i > index) { tmpband = raster->bands[i]; raster->bands[i] = oldband; oldband = tmpband; } } band->raster = raster; raster->numBands++; RASTER_DEBUGF(4, "Raster now has %d bands", raster->numBands); return index; } /** * Generate a new inline band and add it to a raster. * Memory is allocated in this function for band data. * * @param raster : the raster to add a band to * @param pixtype : the pixel type for the new band * @param initialvalue : initial value for pixels * @param hasnodata : indicates if the band has a nodata value * @param nodatavalue : nodata value for the new band * @param index : position to add the new band in the raster * * @return identifier (position) for the just-added raster, or -1 on error */ int rt_raster_generate_new_band( rt_raster raster, rt_pixtype pixtype, double initialvalue, uint32_t hasnodata, double nodatavalue, int index ) { rt_band band = NULL; int width = 0; int height = 0; int numval = 0; int datasize = 0; int oldnumbands = 0; int numbands = 0; void * mem = NULL; int32_t checkvalint = 0; uint32_t checkvaluint = 0; double checkvaldouble = 0; float checkvalfloat = 0; int i; assert(NULL != raster); /* Make sure index is in a valid range */ oldnumbands = rt_raster_get_num_bands(raster); if (index < 0) index = 0; else if (index > oldnumbands + 1) index = oldnumbands + 1; /* Determine size of memory block to allocate and allocate it */ width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); numval = width * height; datasize = rt_pixtype_size(pixtype) * numval; mem = (int *)rtalloc(datasize); if (!mem) { rterror("rt_raster_generate_new_band: Could not allocate memory for band"); return -1; } if (FLT_EQ(initialvalue, 0.0)) memset(mem, 0, datasize); else { switch (pixtype) { case PT_1BB: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_1BB(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_2BUI: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_2BUI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_4BUI: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_4BUI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_8BSI: { int8_t *ptr = mem; int8_t clamped_initval = rt_util_clamp_to_8BSI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_8BUI: { uint8_t *ptr = mem; uint8_t clamped_initval = rt_util_clamp_to_8BUI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_16BSI: { int16_t *ptr = mem; int16_t clamped_initval = rt_util_clamp_to_16BSI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_16BUI: { uint16_t *ptr = mem; uint16_t clamped_initval = rt_util_clamp_to_16BUI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_32BSI: { int32_t *ptr = mem; int32_t clamped_initval = rt_util_clamp_to_32BSI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalint = ptr[0]; break; } case PT_32BUI: { uint32_t *ptr = mem; uint32_t clamped_initval = rt_util_clamp_to_32BUI(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvaluint = ptr[0]; break; } case PT_32BF: { float *ptr = mem; float clamped_initval = rt_util_clamp_to_32F(initialvalue); for (i = 0; i < numval; i++) ptr[i] = clamped_initval; checkvalfloat = ptr[0]; break; } case PT_64BF: { double *ptr = mem; for (i = 0; i < numval; i++) ptr[i] = initialvalue; checkvaldouble = ptr[0]; break; } default: { rterror("rt_raster_generate_new_band: Unknown pixeltype %d", pixtype); rtdealloc(mem); return -1; } } } /* Overflow checking */ rt_util_dbl_trunc_warning( initialvalue, checkvalint, checkvaluint, checkvalfloat, checkvaldouble, pixtype ); band = rt_band_new_inline(width, height, pixtype, hasnodata, nodatavalue, mem); if (! band) { rterror("rt_raster_generate_new_band: Could not add band to raster. Aborting"); rtdealloc(mem); return -1; } rt_band_set_ownsdata_flag(band, 1); /* we DO own this data!!! */ index = rt_raster_add_band(raster, band, index); numbands = rt_raster_get_num_bands(raster); if (numbands == oldnumbands || index == -1) { rterror("rt_raster_generate_new_band: Could not add band to raster. Aborting"); rt_band_destroy(band); } /* set isnodata if hasnodata = TRUE and initial value = nodatavalue */ if (hasnodata && FLT_EQ(initialvalue, nodatavalue)) rt_band_set_isnodata_flag(band, 1); return index; } /** * Get 6-element array of raster inverse geotransform matrix * * @param raster : the raster to get matrix of * @param gt : optional input parameter, 6-element geotransform matrix * @param igt : output parameter, 6-element inverse geotransform matrix * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_inverse_geotransform_matrix( rt_raster raster, double *gt, double *igt ) { double _gt[6] = {0}; assert((raster != NULL || gt != NULL)); assert(igt != NULL); if (gt == NULL) rt_raster_get_geotransform_matrix(raster, _gt); else memcpy(_gt, gt, sizeof(double) * 6); if (!GDALInvGeoTransform(_gt, igt)) { rterror("rt_raster_get_inverse_geotransform_matrix: Could not compute inverse geotransform matrix"); return ES_ERROR; } return ES_NONE; } /** * Get 6-element array of raster geotransform matrix * * @param raster : the raster to get matrix of * @param gt : output parameter, 6-element geotransform matrix * */ void rt_raster_get_geotransform_matrix(rt_raster raster, double *gt) { assert(NULL != raster); assert(NULL != gt); gt[0] = raster->ipX; gt[1] = raster->scaleX; gt[2] = raster->skewX; gt[3] = raster->ipY; gt[4] = raster->skewY; gt[5] = raster->scaleY; } /** * Set raster's geotransform using 6-element array * * @param raster : the raster to set matrix of * @param gt : intput parameter, 6-element geotransform matrix * */ void rt_raster_set_geotransform_matrix(rt_raster raster, double *gt) { assert(NULL != raster); assert(NULL != gt); raster->ipX = gt[0]; raster->scaleX = gt[1]; raster->skewX = gt[2]; raster->ipY = gt[3]; raster->skewY = gt[4]; raster->scaleY = gt[5]; _rt_raster_geotransform_warn_offline_band(raster); } /** * Convert an xr, yr raster point to an xw, yw point on map * * @param raster : the raster to get info from * @param xr : the pixel's column * @param yr : the pixel's row * @param xw : output parameter, X ordinate of the geographical point * @param yw : output parameter, Y ordinate of the geographical point * @param gt : input/output parameter, 3x2 geotransform matrix * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_cell_to_geopoint( rt_raster raster, double xr, double yr, double *xw, double *yw, double *gt ) { double _gt[6] = {0}; assert(NULL != raster); assert(NULL != xw && NULL != yw); if (NULL != gt) memcpy(_gt, gt, sizeof(double) * 6); /* scale of matrix is not set */ if ( FLT_EQ(_gt[1], 0) || FLT_EQ(_gt[5], 0) ) { rt_raster_get_geotransform_matrix(raster, _gt); } RASTER_DEBUGF(4, "gt = (%f, %f, %f, %f, %f, %f)", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5] ); GDALApplyGeoTransform(_gt, xr, yr, xw, yw); RASTER_DEBUGF(4, "GDALApplyGeoTransform (c -> g) for (%f, %f) = (%f, %f)", xr, yr, *xw, *yw); return ES_NONE; } /** * Convert an xw,yw map point to a xr,yr raster point * * @param raster : the raster to get info from * @param xw : X ordinate of the geographical point * @param yw : Y ordinate of the geographical point * @param xr : output parameter, the pixel's column * @param yr : output parameter, the pixel's row * @param igt : input/output parameter, inverse geotransform matrix * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_geopoint_to_cell( rt_raster raster, double xw, double yw, double *xr, double *yr, double *igt ) { double _igt[6] = {0}; double rnd = 0; assert(NULL != raster); assert(NULL != xr && NULL != yr); if (igt != NULL) memcpy(_igt, igt, sizeof(double) * 6); /* matrix is not set */ if ( FLT_EQ(_igt[0], 0.) && FLT_EQ(_igt[1], 0.) && FLT_EQ(_igt[2], 0.) && FLT_EQ(_igt[3], 0.) && FLT_EQ(_igt[4], 0.) && FLT_EQ(_igt[5], 0.) ) { if (rt_raster_get_inverse_geotransform_matrix(raster, NULL, _igt) != ES_NONE) { rterror("rt_raster_geopoint_to_cell: Could not get inverse geotransform matrix"); return ES_ERROR; } } GDALApplyGeoTransform(_igt, xw, yw, xr, yr); RASTER_DEBUGF(4, "GDALApplyGeoTransform (g -> c) for (%f, %f) = (%f, %f)", xw, yw, *xr, *yr); rnd = ROUND(*xr, 0); if (FLT_EQ(rnd, *xr)) *xr = rnd; else *xr = floor(*xr); rnd = ROUND(*yr, 0); if (FLT_EQ(rnd, *yr)) *yr = rnd; else *yr = floor(*yr); RASTER_DEBUGF(4, "Corrected GDALApplyGeoTransform (g -> c) for (%f, %f) = (%f, %f)", xw, yw, *xr, *yr); return ES_NONE; } /** * Returns a set of "geomval" value, one for each group of pixel * sharing the same value for the provided band. * * A "geomval" value is a complex type composed of a geometry * in LWPOLY representation (one for each group of pixel sharing * the same value) and the value associated with this geometry. * * @param raster : the raster to get info from. * @param nband : the band to polygonize. 0-based * @param exclude_nodata_value : if non-zero, ignore nodata values * to check for pixels with value * * @return A set of "geomval" values, one for each group of pixels * sharing the same value for the provided band. The returned values are * LWPOLY geometries. */ rt_geomval rt_raster_gdal_polygonize( rt_raster raster, int nband, int exclude_nodata_value, int *pnElements ) { CPLErr cplerr = CE_None; char *pszQuery; long j; OGRSFDriverH ogr_drv = NULL; GDALDriverH gdal_drv = NULL; GDALDatasetH memdataset = NULL; GDALRasterBandH gdal_band = NULL; OGRDataSourceH memdatasource = NULL; rt_geomval pols = NULL; OGRLayerH hLayer = NULL; OGRFeatureH hFeature = NULL; OGRGeometryH hGeom = NULL; OGRFieldDefnH hFldDfn = NULL; unsigned char *wkb = NULL; int wkbsize = 0; LWGEOM *lwgeom = NULL; int nFeatureCount = 0; rt_band band = NULL; int iPixVal = -1; double dValue = 0.0; int iBandHasNodataValue = FALSE; double dBandNoData = 0.0; /* for checking that a geometry is valid */ GEOSGeometry *ggeom = NULL; int isValid; LWGEOM *lwgeomValid = NULL; uint32_t bandNums[1] = {nband}; int excludeNodataValues[1] = {exclude_nodata_value}; /* checks */ assert(NULL != raster); assert(NULL != pnElements); RASTER_DEBUG(2, "In rt_raster_gdal_polygonize"); *pnElements = 0; /******************************* * Get band *******************************/ band = rt_raster_get_band(raster, nband); if (NULL == band) { rterror("rt_raster_gdal_polygonize: Error getting band %d from raster", nband); return NULL; } if (exclude_nodata_value) { /* band is NODATA */ if (rt_band_get_isnodata_flag(band)) { RASTER_DEBUG(3, "Band is NODATA. Returning null"); *pnElements = 0; return NULL; } iBandHasNodataValue = rt_band_get_hasnodata_flag(band); if (iBandHasNodataValue) rt_band_get_nodata(band, &dBandNoData); else exclude_nodata_value = FALSE; } /***************************************************** * Convert raster to GDAL MEM dataset *****************************************************/ memdataset = rt_raster_to_gdal_mem(raster, NULL, bandNums, excludeNodataValues, 1, &gdal_drv); if (NULL == memdataset) { rterror("rt_raster_gdal_polygonize: Couldn't convert raster to GDAL MEM dataset"); return NULL; } /***************************** * Register ogr mem driver *****************************/ OGRRegisterAll(); RASTER_DEBUG(3, "creating OGR MEM vector"); /***************************************************** * Create an OGR in-memory vector for layers *****************************************************/ ogr_drv = OGRGetDriverByName("Memory"); memdatasource = OGR_Dr_CreateDataSource(ogr_drv, "", NULL); if (NULL == memdatasource) { rterror("rt_raster_gdal_polygonize: Couldn't create a OGR Datasource to store pols"); GDALClose(memdataset); return NULL; } /* Can MEM driver create new layers? */ if (!OGR_DS_TestCapability(memdatasource, ODsCCreateLayer)) { rterror("rt_raster_gdal_polygonize: MEM driver can't create new layers, aborting"); /* xxx jorgearevalo: what should we do now? */ GDALClose(memdataset); OGRReleaseDataSource(memdatasource); return NULL; } RASTER_DEBUG(3, "polygonizying GDAL MEM raster band"); /***************************** * Polygonize the raster band *****************************/ /** * From GDALPolygonize function header: "Polygon features will be * created on the output layer, with polygon geometries representing * the polygons". So,the WKB geometry type should be "wkbPolygon" **/ hLayer = OGR_DS_CreateLayer(memdatasource, "PolygonizedLayer", NULL, wkbPolygon, NULL); if (NULL == hLayer) { rterror("rt_raster_gdal_polygonize: Couldn't create layer to store polygons"); GDALClose(memdataset); OGRReleaseDataSource(memdatasource); return NULL; } /** * Create a new field in the layer, to store the px value */ /* First, create a field definition to create the field */ hFldDfn = OGR_Fld_Create("PixelValue", OFTReal); /* Second, create the field */ if (OGR_L_CreateField(hLayer, hFldDfn, TRUE) != OGRERR_NONE) { rtwarn("Couldn't create a field in OGR Layer. The polygons generated won't be able to store the pixel value"); iPixVal = -1; } else { /* Index to the new field created in the layer */ iPixVal = 0; } /* Get GDAL raster band */ gdal_band = GDALGetRasterBand(memdataset, 1); if (NULL == gdal_band) { rterror("rt_raster_gdal_polygonize: Couldn't get GDAL band to polygonize"); GDALClose(memdataset); OGR_Fld_Destroy(hFldDfn); OGR_DS_DeleteLayer(memdatasource, 0); OGRReleaseDataSource(memdatasource); return NULL; } /** * We don't need a raster mask band. Each band has a nodata value. **/ #ifdef GDALFPOLYGONIZE cplerr = GDALFPolygonize(gdal_band, NULL, hLayer, iPixVal, NULL, NULL, NULL); #else cplerr = GDALPolygonize(gdal_band, NULL, hLayer, iPixVal, NULL, NULL, NULL); #endif if (cplerr != CE_None) { rterror("rt_raster_gdal_polygonize: Could not polygonize GDAL band"); GDALClose(memdataset); OGR_Fld_Destroy(hFldDfn); OGR_DS_DeleteLayer(memdatasource, 0); OGRReleaseDataSource(memdatasource); return NULL; } /** * Optimization: Apply a OGR SQL filter to the layer to select the * features different from NODATA value. * * Thanks to David Zwarg. **/ if (iBandHasNodataValue) { pszQuery = (char *) rtalloc(50 * sizeof (char)); sprintf(pszQuery, "PixelValue != %f", dBandNoData ); OGRErr e = OGR_L_SetAttributeFilter(hLayer, pszQuery); if (e != OGRERR_NONE) { rtwarn("Error filtering NODATA values for band. All values will be treated as data values"); } } else { pszQuery = NULL; } /********************************************************************* * Transform OGR layers to WKB polygons * XXX jorgearevalo: GDALPolygonize does not set the coordinate system * on the output layer. Application code should do this when the layer * is created, presumably matching the raster coordinate system. *********************************************************************/ nFeatureCount = OGR_L_GetFeatureCount(hLayer, TRUE); /* Allocate memory for pols */ pols = (rt_geomval) rtalloc(nFeatureCount * sizeof(struct rt_geomval_t)); if (NULL == pols) { rterror("rt_raster_gdal_polygonize: Could not allocate memory for geomval set"); GDALClose(memdataset); OGR_Fld_Destroy(hFldDfn); OGR_DS_DeleteLayer(memdatasource, 0); if (NULL != pszQuery) rtdealloc(pszQuery); OGRReleaseDataSource(memdatasource); return NULL; } /* initialize GEOS */ initGEOS(lwnotice, lwgeom_geos_error); RASTER_DEBUGF(3, "storing polygons (%d)", nFeatureCount); /* Reset feature reading to start in the first feature */ OGR_L_ResetReading(hLayer); for (j = 0; j < nFeatureCount; j++) { hFeature = OGR_L_GetNextFeature(hLayer); dValue = OGR_F_GetFieldAsDouble(hFeature, iPixVal); hGeom = OGR_F_GetGeometryRef(hFeature); wkbsize = OGR_G_WkbSize(hGeom); /* allocate wkb buffer */ wkb = rtalloc(sizeof(unsigned char) * wkbsize); if (wkb == NULL) { rterror("rt_raster_gdal_polygonize: Could not allocate memory for WKB buffer"); OGR_F_Destroy(hFeature); GDALClose(memdataset); OGR_Fld_Destroy(hFldDfn); OGR_DS_DeleteLayer(memdatasource, 0); if (NULL != pszQuery) rtdealloc(pszQuery); OGRReleaseDataSource(memdatasource); return NULL; } /* export WKB with LSB byte order */ OGR_G_ExportToWkb(hGeom, wkbNDR, wkb); /* convert WKB to LWGEOM */ lwgeom = lwgeom_from_wkb(wkb, wkbsize, LW_PARSER_CHECK_NONE); #if POSTGIS_DEBUG_LEVEL > 3 { char *wkt = NULL; OGR_G_ExportToWkt(hGeom, &wkt); RASTER_DEBUGF(4, "GDAL wkt = %s", wkt); CPLFree(wkt); d_print_binary_hex("GDAL wkb", wkb, wkbsize); } #endif /* cleanup unnecessary stuff */ rtdealloc(wkb); wkb = NULL; wkbsize = 0; OGR_F_Destroy(hFeature); /* specify SRID */ lwgeom_set_srid(lwgeom, rt_raster_get_srid(raster)); /* is geometry valid? if not, try to make valid */ do { #if POSTGIS_GEOS_VERSION < 33 /* nothing can be done if the geometry was invalid if GEOS < 3.3 */ break; #endif ggeom = (GEOSGeometry *) LWGEOM2GEOS(lwgeom); if (ggeom == NULL) { rtwarn("Cannot test geometry for validity"); break; } isValid = GEOSisValid(ggeom); GEOSGeom_destroy(ggeom); ggeom = NULL; /* geometry is valid */ if (isValid) break; RASTER_DEBUG(3, "fixing invalid geometry"); /* make geometry valid */ lwgeomValid = lwgeom_make_valid(lwgeom); if (lwgeomValid == NULL) { rtwarn("Cannot fix invalid geometry"); break; } lwgeom_free(lwgeom); lwgeom = lwgeomValid; } while (0); /* save lwgeom */ pols[j].geom = lwgeom_as_lwpoly(lwgeom); #if POSTGIS_DEBUG_LEVEL > 3 { char *wkt = lwgeom_to_wkt(lwgeom, WKT_ISO, DBL_DIG, NULL); RASTER_DEBUGF(4, "LWGEOM wkt = %s", wkt); rtdealloc(wkt); size_t lwwkbsize = 0; uint8_t *lwwkb = lwgeom_to_wkb(lwgeom, WKB_ISO | WKB_NDR, &lwwkbsize); if (lwwkbsize) { d_print_binary_hex("LWGEOM wkb", lwwkb, lwwkbsize); rtdealloc(lwwkb); } } #endif /* set pixel value */ pols[j].val = dValue; } *pnElements = nFeatureCount; RASTER_DEBUG(3, "destroying GDAL MEM raster"); GDALClose(memdataset); RASTER_DEBUG(3, "destroying OGR MEM vector"); OGR_Fld_Destroy(hFldDfn); OGR_DS_DeleteLayer(memdatasource, 0); if (NULL != pszQuery) rtdealloc(pszQuery); OGRReleaseDataSource(memdatasource); return pols; } /** * Get raster's convex hull. * * The convex hull is typically a 4 vertices (5 to be closed) * single ring polygon bearing the raster's rotation and using * projection coordinates. * * @param raster : the raster to get info from * @param **hull : pointer to convex hull * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_convex_hull(rt_raster raster, LWGEOM **hull) { double gt[6] = {0.0}; int srid = SRID_UNKNOWN; POINTARRAY *pts = NULL; POINT4D p4d; assert(hull != NULL); *hull = NULL; /* raster is NULL, convex hull is NULL */ if (raster == NULL) return ES_NONE; /* raster metadata */ srid = rt_raster_get_srid(raster); rt_raster_get_geotransform_matrix(raster, gt); RASTER_DEBUGF(3, "rt_raster_get_convex_hull: raster is %dx%d", raster->width, raster->height); /* return point or line since at least one of the two dimensions is 0 */ if ((!raster->width) || (!raster->height)) { p4d.x = gt[0]; p4d.y = gt[3]; /* return point */ if (!raster->width && !raster->height) { LWPOINT *point = lwpoint_make2d(srid, p4d.x, p4d.y); *hull = lwpoint_as_lwgeom(point); } /* return linestring */ else { LWLINE *line = NULL; pts = ptarray_construct_empty(0, 0, 2); /* first point of line */ ptarray_append_point(pts, &p4d, LW_TRUE); /* second point of line */ if (rt_raster_cell_to_geopoint( raster, rt_raster_get_width(raster), rt_raster_get_height(raster), &p4d.x, &p4d.y, gt ) != ES_NONE) { rterror("rt_raster_get_convex_hull: Could not get second point for linestring"); return ES_ERROR; } ptarray_append_point(pts, &p4d, LW_TRUE); line = lwline_construct(srid, NULL, pts); *hull = lwline_as_lwgeom(line); } return ES_NONE; } else { POINTARRAY **rings = NULL; LWPOLY* poly = NULL; /* only one ring */ rings = (POINTARRAY **) rtalloc(sizeof (POINTARRAY*)); if (!rings) { rterror("rt_raster_get_convex_hull: Could not allocate memory for polygon ring"); return ES_ERROR; } rings[0] = ptarray_construct(0, 0, 5); /* TODO: handle error on ptarray construction */ /* XXX jorgearevalo: the error conditions aren't managed in ptarray_construct */ if (!rings[0]) { rterror("rt_raster_get_convex_hull: Could not construct point array"); return ES_ERROR; } pts = rings[0]; /* Upper-left corner (first and last points) */ p4d.x = gt[0]; p4d.y = gt[3]; ptarray_set_point4d(pts, 0, &p4d); ptarray_set_point4d(pts, 4, &p4d); /* Upper-right corner (we go clockwise) */ rt_raster_cell_to_geopoint( raster, raster->width, 0, &p4d.x, &p4d.y, gt ); ptarray_set_point4d(pts, 1, &p4d); /* Lower-right corner */ rt_raster_cell_to_geopoint( raster, raster->width, raster->height, &p4d.x, &p4d.y, gt ); ptarray_set_point4d(pts, 2, &p4d); /* Lower-left corner */ rt_raster_cell_to_geopoint( raster, 0, raster->height, &p4d.x, &p4d.y, gt ); ptarray_set_point4d(pts, 3, &p4d); poly = lwpoly_construct(srid, 0, 1, rings); *hull = lwpoly_as_lwgeom(poly); } return ES_NONE; } /** * Get raster's envelope. * * The envelope is the minimum bounding rectangle of the raster * * @param raster : the raster to get envelope of * @param env : pointer to rt_envelope * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_envelope( rt_raster raster, rt_envelope *env ) { int i; int rtn; int set = 0; double _r[2] = {0.}; double _w[2] = {0.}; double _gt[6] = {0.}; assert(raster != NULL); assert(env != NULL); rt_raster_get_geotransform_matrix(raster, _gt); for (i = 0; i < 4; i++) { switch (i) { case 0: _r[0] = 0; _r[1] = 0; break; case 1: _r[0] = 0; _r[1] = raster->height; break; case 2: _r[0] = raster->width; _r[1] = raster->height; break; case 3: _r[0] = raster->width; _r[1] = 0; break; } rtn = rt_raster_cell_to_geopoint( raster, _r[0], _r[1], &(_w[0]), &(_w[1]), _gt ); if (rtn != ES_NONE) { rterror("rt_raster_get_envelope: Could not compute spatial coordinates for raster pixel"); return ES_ERROR; } if (!set) { set = 1; env->MinX = _w[0]; env->MaxX = _w[0]; env->MinY = _w[1]; env->MaxY = _w[1]; } else { if (_w[0] < env->MinX) env->MinX = _w[0]; else if (_w[0] > env->MaxX) env->MaxX = _w[0]; if (_w[1] < env->MinY) env->MinY = _w[1]; else if (_w[1] > env->MaxY) env->MaxY = _w[1]; } } return ES_NONE; } /* * Compute skewed extent that covers unskewed extent. * * @param envelope : unskewed extent of type rt_envelope * @param skew : pointer to 2-element array (x, y) of skew * @param scale : pointer to 2-element array (x, y) of scale * @param tolerance : value between 0 and 1 where the smaller the tolerance * results in an extent approaching the "minimum" skewed extent. * If value <= 0, tolerance = 0.1. If value > 1, tolerance = 1. * * @return skewed raster who's extent covers unskewed extent, NULL on error */ rt_raster rt_raster_compute_skewed_raster( rt_envelope extent, double *skew, double *scale, double tolerance ) { uint32_t run = 0; uint32_t max_run = 1; double dbl_run = 0; int rtn; int covers = 0; rt_raster raster; double _gt[6] = {0}; double _igt[6] = {0}; int _d[2] = {1, -1}; int _dlast = 0; int _dlastpos = 0; double _w[2] = {0}; double _r[2] = {0}; double _xy[2] = {0}; int i; int j; int x; int y; LWGEOM *geom = NULL; GEOSGeometry *sgeom = NULL; GEOSGeometry *ngeom = NULL; if ( (tolerance < 0.) || FLT_EQ(tolerance, 0.) ) { tolerance = 0.1; } else if (tolerance > 1.) tolerance = 1; dbl_run = tolerance; while (dbl_run < 10) { dbl_run *= 10.; max_run *= 10; } /* scale must be provided */ if (scale == NULL) return NULL; for (i = 0; i < 2; i++) { if (FLT_EQ(scale[i], 0)) { rterror("rt_raster_compute_skewed_raster: Scale cannot be zero"); return 0; } if (i < 1) _gt[1] = fabs(scale[i] * tolerance); else _gt[5] = fabs(scale[i] * tolerance); } /* conform scale-y to be negative */ _gt[5] *= -1; /* skew not provided or skew is zero, return raster of correct dim and spatial attributes */ if ( (skew == NULL) || ( FLT_EQ(skew[0], 0) && FLT_EQ(skew[1], 0) ) ) { int _dim[2] = { (int) fmax((fabs(extent.MaxX - extent.MinX) + (fabs(scale[0]) / 2.)) / fabs(scale[0]), 1), (int) fmax((fabs(extent.MaxY - extent.MinY) + (fabs(scale[1]) / 2.)) / fabs(scale[1]), 1) }; raster = rt_raster_new(_dim[0], _dim[1]); if (raster == NULL) { rterror("rt_raster_compute_skewed_raster: Could not create output raster"); return NULL; } rt_raster_set_offsets(raster, extent.MinX, extent.MaxY); rt_raster_set_scale(raster, fabs(scale[0]), -1 * fabs(scale[1])); rt_raster_set_skews(raster, skew[0], skew[1]); return raster; } /* direction to shift upper-left corner */ if (skew[0] > 0.) _d[0] = -1; if (skew[1] < 0.) _d[1] = 1; /* geotransform */ _gt[0] = extent.UpperLeftX; _gt[2] = skew[0] * tolerance; _gt[3] = extent.UpperLeftY; _gt[4] = skew[1] * tolerance; RASTER_DEBUGF(4, "Initial geotransform: %f, %f, %f, %f, %f, %f", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5] ); RASTER_DEBUGF(4, "Delta: %d, %d", _d[0], _d[1]); /* simple raster */ if ((raster = rt_raster_new(1, 1)) == NULL) { rterror("rt_raster_compute_skewed_raster: Out of memory allocating extent raster"); return NULL; } rt_raster_set_geotransform_matrix(raster, _gt); /* get inverse geotransform matrix */ if (!GDALInvGeoTransform(_gt, _igt)) { rterror("rt_raster_compute_skewed_raster: Could not compute inverse geotransform matrix"); rt_raster_destroy(raster); return NULL; } RASTER_DEBUGF(4, "Inverse geotransform: %f, %f, %f, %f, %f, %f", _igt[0], _igt[1], _igt[2], _igt[3], _igt[4], _igt[5] ); /* shift along axis */ for (i = 0; i < 2; i++) { covers = 0; run = 0; RASTER_DEBUGF(3, "Shifting along %s axis", i < 1 ? "X" : "Y"); do { /* prevent possible infinite loop */ if (run > max_run) { rterror("rt_raster_compute_skewed_raster: Could not compute skewed extent due to check preventing infinite loop"); rt_raster_destroy(raster); return NULL; } /* check the four corners that they are covered along the specific axis pixel column should be >= 0 */ for (j = 0; j < 4; j++) { switch (j) { /* upper-left */ case 0: _xy[0] = extent.MinX; _xy[1] = extent.MaxY; break; /* lower-left */ case 1: _xy[0] = extent.MinX; _xy[1] = extent.MinY; break; /* lower-right */ case 2: _xy[0] = extent.MaxX; _xy[1] = extent.MinY; break; /* upper-right */ case 3: _xy[0] = extent.MaxX; _xy[1] = extent.MaxY; break; } rtn = rt_raster_geopoint_to_cell( raster, _xy[0], _xy[1], &(_r[0]), &(_r[1]), _igt ); if (rtn != ES_NONE) { rterror("rt_raster_compute_skewed_raster: Could not compute raster pixel for spatial coordinates"); rt_raster_destroy(raster); return NULL; } RASTER_DEBUGF(4, "Point %d at cell %d x %d", j, (int) _r[0], (int) _r[1]); /* raster doesn't cover point */ if ((int) _r[i] < 0) { RASTER_DEBUGF(4, "Point outside of skewed extent: %d", j); covers = 0; if (_dlastpos != j) { _dlast = (int) _r[i]; _dlastpos = j; } else if ((int) _r[i] < _dlast) { RASTER_DEBUG(4, "Point going in wrong direction. Reversing direction"); _d[i] *= -1; _dlastpos = -1; run = 0; } break; } covers++; } if (!covers) { x = 0; y = 0; if (i < 1) x = _d[i] * fabs(_r[i]); else y = _d[i] * fabs(_r[i]); rtn = rt_raster_cell_to_geopoint( raster, x, y, &(_w[0]), &(_w[1]), _gt ); if (rtn != ES_NONE) { rterror("rt_raster_compute_skewed_raster: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(raster); return NULL; } /* adjust ul */ if (i < 1) _gt[0] = _w[i]; else _gt[3] = _w[i]; rt_raster_set_geotransform_matrix(raster, _gt); RASTER_DEBUGF(4, "Shifted geotransform: %f, %f, %f, %f, %f, %f", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5] ); /* get inverse geotransform matrix */ if (!GDALInvGeoTransform(_gt, _igt)) { rterror("rt_raster_compute_skewed_raster: Could not compute inverse geotransform matrix"); rt_raster_destroy(raster); return NULL; } RASTER_DEBUGF(4, "Inverse geotransform: %f, %f, %f, %f, %f, %f", _igt[0], _igt[1], _igt[2], _igt[3], _igt[4], _igt[5] ); } run++; } while (!covers); } /* covers test */ rtn = rt_raster_geopoint_to_cell( raster, extent.MaxX, extent.MinY, &(_r[0]), &(_r[1]), _igt ); if (rtn != ES_NONE) { rterror("rt_raster_compute_skewed_raster: Could not compute raster pixel for spatial coordinates"); rt_raster_destroy(raster); return NULL; } RASTER_DEBUGF(4, "geopoint %f x %f at cell %d x %d", extent.MaxX, extent.MinY, (int) _r[0], (int) _r[1]); raster->width = _r[0]; raster->height = _r[1]; /* initialize GEOS */ initGEOS(lwnotice, lwgeom_geos_error); /* create reference LWPOLY */ { LWPOLY *npoly = rt_util_envelope_to_lwpoly(extent); if (npoly == NULL) { rterror("rt_raster_compute_skewed_raster: Could not build extent's geometry for covers test"); rt_raster_destroy(raster); return NULL; } ngeom = (GEOSGeometry *) LWGEOM2GEOS(lwpoly_as_lwgeom(npoly)); lwpoly_free(npoly); } do { covers = 0; /* construct sgeom from raster */ if ((rt_raster_get_convex_hull(raster, &geom) != ES_NONE) || geom == NULL) { rterror("rt_raster_compute_skewed_raster: Could not build skewed extent's geometry for covers test"); GEOSGeom_destroy(ngeom); rt_raster_destroy(raster); return NULL; } sgeom = (GEOSGeometry *) LWGEOM2GEOS(geom); lwgeom_free(geom); covers = GEOSRelatePattern(sgeom, ngeom, "******FF*"); GEOSGeom_destroy(sgeom); if (covers == 2) { rterror("rt_raster_compute_skewed_raster: Could not run covers test"); GEOSGeom_destroy(ngeom); rt_raster_destroy(raster); return NULL; } if (covers) break; raster->width++; raster->height++; } while (!covers); RASTER_DEBUGF(4, "Skewed extent does cover normal extent with dimensions %d x %d", raster->width, raster->height); raster->width = (int) ((((double) raster->width) * fabs(_gt[1]) + fabs(scale[0] / 2.)) / fabs(scale[0])); raster->height = (int) ((((double) raster->height) * fabs(_gt[5]) + fabs(scale[1] / 2.)) / fabs(scale[1])); _gt[1] = fabs(scale[0]); _gt[5] = -1 * fabs(scale[1]); _gt[2] = skew[0]; _gt[4] = skew[1]; rt_raster_set_geotransform_matrix(raster, _gt); /* minimize width/height */ for (i = 0; i < 2; i++) { covers = 1; do { if (i < 1) raster->width--; else raster->height--; /* construct sgeom from raster */ if ((rt_raster_get_convex_hull(raster, &geom) != ES_NONE) || geom == NULL) { rterror("rt_raster_compute_skewed_raster: Could not build skewed extent's geometry for minimizing dimensions"); GEOSGeom_destroy(ngeom); rt_raster_destroy(raster); return NULL; } sgeom = (GEOSGeometry *) LWGEOM2GEOS(geom); lwgeom_free(geom); covers = GEOSRelatePattern(sgeom, ngeom, "******FF*"); GEOSGeom_destroy(sgeom); if (covers == 2) { rterror("rt_raster_compute_skewed_raster: Could not run covers test for minimizing dimensions"); GEOSGeom_destroy(ngeom); rt_raster_destroy(raster); return NULL; } if (!covers) { if (i < 1) raster->width++; else raster->height++; break; } } while (covers); } GEOSGeom_destroy(ngeom); return raster; } /*--------- WKB I/O ---------------------------------------------------*/ static uint8_t isMachineLittleEndian(void) { static int endian_check_int = 1; /* dont modify this!!! */ /* 0=big endian|xdr -- 1=little endian|ndr */ return *((uint8_t *) & endian_check_int); } static uint8_t read_uint8(const uint8_t** from) { assert(NULL != from); return *(*from)++; } /* unused up to now static void write_uint8(uint8_t** from, uint8_t v) { assert(NULL != from); *(*from)++ = v; } */ static int8_t read_int8(const uint8_t** from) { assert(NULL != from); return (int8_t) read_uint8(from); } /* unused up to now static void write_int8(uint8_t** from, int8_t v) { assert(NULL != from); *(*from)++ = v; } */ static uint16_t read_uint16(const uint8_t** from, uint8_t littleEndian) { uint16_t ret = 0; assert(NULL != from); if (littleEndian) { ret = (*from)[0] | (*from)[1] << 8; } else { /* big endian */ ret = (*from)[0] << 8 | (*from)[1]; } *from += 2; return ret; } static void write_uint16(uint8_t** to, uint8_t littleEndian, uint16_t v) { assert(NULL != to); if (littleEndian) { (*to)[0] = v & 0x00FF; (*to)[1] = v >> 8; } else { (*to)[1] = v & 0x00FF; (*to)[0] = v >> 8; } *to += 2; } static int16_t read_int16(const uint8_t** from, uint8_t littleEndian) { assert(NULL != from); return read_uint16(from, littleEndian); } /* unused up to now static void write_int16(uint8_t** to, uint8_t littleEndian, int16_t v) { assert(NULL != to); if ( littleEndian ) { (*to)[0] = v & 0x00FF; (*to)[1] = v >> 8; } else { (*to)[1] = v & 0x00FF; (*to)[0] = v >> 8; } *to += 2; } */ static uint32_t read_uint32(const uint8_t** from, uint8_t littleEndian) { uint32_t ret = 0; assert(NULL != from); if (littleEndian) { ret = (uint32_t) ((*from)[0] & 0xff) | (uint32_t) ((*from)[1] & 0xff) << 8 | (uint32_t) ((*from)[2] & 0xff) << 16 | (uint32_t) ((*from)[3] & 0xff) << 24; } else { /* big endian */ ret = (uint32_t) ((*from)[3] & 0xff) | (uint32_t) ((*from)[2] & 0xff) << 8 | (uint32_t) ((*from)[1] & 0xff) << 16 | (uint32_t) ((*from)[0] & 0xff) << 24; } *from += 4; return ret; } /* unused up to now static void write_uint32(uint8_t** to, uint8_t littleEndian, uint32_t v) { assert(NULL != to); if ( littleEndian ) { (*to)[0] = v & 0x000000FF; (*to)[1] = ( v & 0x0000FF00 ) >> 8; (*to)[2] = ( v & 0x00FF0000 ) >> 16; (*to)[3] = ( v & 0xFF000000 ) >> 24; } else { (*to)[3] = v & 0x000000FF; (*to)[2] = ( v & 0x0000FF00 ) >> 8; (*to)[1] = ( v & 0x00FF0000 ) >> 16; (*to)[0] = ( v & 0xFF000000 ) >> 24; } *to += 4; } */ static int32_t read_int32(const uint8_t** from, uint8_t littleEndian) { assert(NULL != from); return read_uint32(from, littleEndian); } /* unused up to now static void write_int32(uint8_t** to, uint8_t littleEndian, int32_t v) { assert(NULL != to); if ( littleEndian ) { (*to)[0] = v & 0x000000FF; (*to)[1] = ( v & 0x0000FF00 ) >> 8; (*to)[2] = ( v & 0x00FF0000 ) >> 16; (*to)[3] = ( v & 0xFF000000 ) >> 24; } else { (*to)[3] = v & 0x000000FF; (*to)[2] = ( v & 0x0000FF00 ) >> 8; (*to)[1] = ( v & 0x00FF0000 ) >> 16; (*to)[0] = ( v & 0xFF000000 ) >> 24; } *to += 4; } */ static float read_float32(const uint8_t** from, uint8_t littleEndian) { union { float f; uint32_t i; } ret; ret.i = read_uint32(from, littleEndian); return ret.f; } /* unused up to now static void write_float32(uint8_t** from, uint8_t littleEndian, float f) { union { float f; uint32_t i; } u; u.f = f; write_uint32(from, littleEndian, u.i); } */ static double read_float64(const uint8_t** from, uint8_t littleEndian) { union { double d; uint64_t i; } ret; assert(NULL != from); if (littleEndian) { ret.i = (uint64_t) ((*from)[0] & 0xff) | (uint64_t) ((*from)[1] & 0xff) << 8 | (uint64_t) ((*from)[2] & 0xff) << 16 | (uint64_t) ((*from)[3] & 0xff) << 24 | (uint64_t) ((*from)[4] & 0xff) << 32 | (uint64_t) ((*from)[5] & 0xff) << 40 | (uint64_t) ((*from)[6] & 0xff) << 48 | (uint64_t) ((*from)[7] & 0xff) << 56; } else { /* big endian */ ret.i = (uint64_t) ((*from)[7] & 0xff) | (uint64_t) ((*from)[6] & 0xff) << 8 | (uint64_t) ((*from)[5] & 0xff) << 16 | (uint64_t) ((*from)[4] & 0xff) << 24 | (uint64_t) ((*from)[3] & 0xff) << 32 | (uint64_t) ((*from)[2] & 0xff) << 40 | (uint64_t) ((*from)[1] & 0xff) << 48 | (uint64_t) ((*from)[0] & 0xff) << 56; } *from += 8; return ret.d; } /* unused up to now static void write_float64(uint8_t** to, uint8_t littleEndian, double v) { union { double d; uint64_t i; } u; assert(NULL != to); u.d = v; if ( littleEndian ) { (*to)[0] = u.i & 0x00000000000000FFULL; (*to)[1] = ( u.i & 0x000000000000FF00ULL ) >> 8; (*to)[2] = ( u.i & 0x0000000000FF0000ULL ) >> 16; (*to)[3] = ( u.i & 0x00000000FF000000ULL ) >> 24; (*to)[4] = ( u.i & 0x000000FF00000000ULL ) >> 32; (*to)[5] = ( u.i & 0x0000FF0000000000ULL ) >> 40; (*to)[6] = ( u.i & 0x00FF000000000000ULL ) >> 48; (*to)[7] = ( u.i & 0xFF00000000000000ULL ) >> 56; } else { (*to)[7] = u.i & 0x00000000000000FFULL; (*to)[6] = ( u.i & 0x000000000000FF00ULL ) >> 8; (*to)[5] = ( u.i & 0x0000000000FF0000ULL ) >> 16; (*to)[4] = ( u.i & 0x00000000FF000000ULL ) >> 24; (*to)[3] = ( u.i & 0x000000FF00000000ULL ) >> 32; (*to)[2] = ( u.i & 0x0000FF0000000000ULL ) >> 40; (*to)[1] = ( u.i & 0x00FF000000000000ULL ) >> 48; (*to)[0] = ( u.i & 0xFF00000000000000ULL ) >> 56; } *to += 8; } */ #define BANDTYPE_FLAGS_MASK 0xF0 #define BANDTYPE_PIXTYPE_MASK 0x0F #define BANDTYPE_FLAG_OFFDB (1<<7) #define BANDTYPE_FLAG_HASNODATA (1<<6) #define BANDTYPE_FLAG_ISNODATA (1<<5) #define BANDTYPE_FLAG_RESERVED3 (1<<4) #define BANDTYPE_PIXTYPE(x) ((x)&BANDTYPE_PIXTYPE_MASK) #define BANDTYPE_IS_OFFDB(x) ((x)&BANDTYPE_FLAG_OFFDB) #define BANDTYPE_HAS_NODATA(x) ((x)&BANDTYPE_FLAG_HASNODATA) #define BANDTYPE_IS_NODATA(x) ((x)&BANDTYPE_FLAG_ISNODATA) /* Read band from WKB as at start of band */ static rt_band rt_band_from_wkb( uint16_t width, uint16_t height, const uint8_t** ptr, const uint8_t* end, uint8_t littleEndian ) { rt_band band = NULL; int pixbytes = 0; uint8_t type = 0; unsigned long sz = 0; uint32_t v = 0; assert(NULL != ptr); assert(NULL != end); band = rtalloc(sizeof (struct rt_band_t)); if (!band) { rterror("rt_band_from_wkb: Out of memory allocating rt_band during WKB parsing"); return NULL; } band->ownsdata = 0; /* assume we don't own data */ if (end - *ptr < 1) { rterror("rt_band_from_wkb: Premature end of WKB on band reading (%s:%d)", __FILE__, __LINE__); rt_band_destroy(band); return NULL; } type = read_uint8(ptr); if ((type & BANDTYPE_PIXTYPE_MASK) >= PT_END) { rterror("rt_band_from_wkb: Invalid pixtype %d", type & BANDTYPE_PIXTYPE_MASK); rt_band_destroy(band); return NULL; } band->pixtype = type & BANDTYPE_PIXTYPE_MASK; band->offline = BANDTYPE_IS_OFFDB(type) ? 1 : 0; band->hasnodata = BANDTYPE_HAS_NODATA(type) ? 1 : 0; band->isnodata = band->hasnodata ? (BANDTYPE_IS_NODATA(type) ? 1 : 0) : 0; band->width = width; band->height = height; RASTER_DEBUGF(3, " Band pixtype:%s, offline:%d, hasnodata:%d", rt_pixtype_name(band->pixtype), band->offline, band->hasnodata ); /* Check there's enough bytes to read nodata value */ pixbytes = rt_pixtype_size(band->pixtype); if (((*ptr) + pixbytes) >= end) { rterror("rt_band_from_wkb: Premature end of WKB on band novalue reading"); rt_band_destroy(band); return NULL; } /* Read nodata value */ switch (band->pixtype) { case PT_1BB: { band->nodataval = ((int) read_uint8(ptr)) & 0x01; break; } case PT_2BUI: { band->nodataval = ((int) read_uint8(ptr)) & 0x03; break; } case PT_4BUI: { band->nodataval = ((int) read_uint8(ptr)) & 0x0F; break; } case PT_8BSI: { band->nodataval = read_int8(ptr); break; } case PT_8BUI: { band->nodataval = read_uint8(ptr); break; } case PT_16BSI: { band->nodataval = read_int16(ptr, littleEndian); break; } case PT_16BUI: { band->nodataval = read_uint16(ptr, littleEndian); break; } case PT_32BSI: { band->nodataval = read_int32(ptr, littleEndian); break; } case PT_32BUI: { band->nodataval = read_uint32(ptr, littleEndian); break; } case PT_32BF: { band->nodataval = read_float32(ptr, littleEndian); break; } case PT_64BF: { band->nodataval = read_float64(ptr, littleEndian); break; } default: { rterror("rt_band_from_wkb: Unknown pixeltype %d", band->pixtype); rt_band_destroy(band); return NULL; } } RASTER_DEBUGF(3, " Nodata value: %g, pixbytes: %d, ptr @ %p, end @ %p", band->nodataval, pixbytes, *ptr, end); if (band->offline) { if (((*ptr) + 1) >= end) { rterror("rt_band_from_wkb: Premature end of WKB on offline " "band data bandNum reading (%s:%d)", __FILE__, __LINE__ ); rt_band_destroy(band); return NULL; } band->data.offline.bandNum = read_int8(ptr); band->data.offline.mem = NULL; { /* check we have a NULL-termination */ sz = 0; while ((*ptr)[sz] && &((*ptr)[sz]) < end) ++sz; if (&((*ptr)[sz]) >= end) { rterror("rt_band_from_wkb: Premature end of WKB on band offline path reading"); rt_band_destroy(band); return NULL; } /* we never own offline band data */ band->ownsdata = 0; band->data.offline.path = rtalloc(sz + 1); if (band->data.offline.path == NULL) { rterror("rt_band_from_wkb: Out of memory allocating for offline path of band"); rt_band_destroy(band); return NULL; } memcpy(band->data.offline.path, *ptr, sz); band->data.offline.path[sz] = '\0'; RASTER_DEBUGF(3, "OFFDB band path is %s (size is %d)", band->data.offline.path, sz); *ptr += sz + 1; /* TODO: How could we know if the offline band is a nodata band? */ /* trust in the force */ /*band->isnodata = FALSE;*/ } return band; } /* This is an on-disk band */ sz = width * height * pixbytes; if (((*ptr) + sz) > end) { rterror("rt_band_from_wkb: Premature end of WKB on band data reading (%s:%d)", __FILE__, __LINE__); rt_band_destroy(band); return NULL; } band->data.mem = rtalloc(sz); if (!band->data.mem) { rterror("rt_band_from_wkb: Out of memory during band creation in WKB parser"); rt_band_destroy(band); return NULL; } band->ownsdata = 1; /* we DO own this data!!! */ memcpy(band->data.mem, *ptr, sz); *ptr += sz; /* Should now flip values if > 8bit and * littleEndian != isMachineLittleEndian */ if (pixbytes > 1) { if (isMachineLittleEndian() != littleEndian) { void (*flipper)(uint8_t*) = 0; uint8_t *flipme = NULL; if (pixbytes == 2) flipper = flip_endian_16; else if (pixbytes == 4) flipper = flip_endian_32; else if (pixbytes == 8) flipper = flip_endian_64; else { rterror("rt_band_from_wkb: Unexpected pix bytes %d", pixbytes); rt_band_destroy(band); return NULL; } flipme = band->data.mem; sz = width * height; for (v = 0; v < sz; ++v) { flipper(flipme); flipme += pixbytes; } } } /* And should check for invalid values for < 8bit types */ else if ( band->pixtype == PT_1BB || band->pixtype == PT_2BUI || band->pixtype == PT_4BUI ) { uint8_t maxVal = band->pixtype == PT_1BB ? 1 : (band->pixtype == PT_2BUI ? 3 : 15); uint8_t val; sz = width*height; for (v = 0; v < sz; ++v) { val = ((uint8_t*) band->data.mem)[v]; if (val > maxVal) { rterror("rt_band_from_wkb: Invalid value %d for pixel of type %s", val, rt_pixtype_name(band->pixtype)); rt_band_destroy(band); return NULL; } } } /* And we should check if the band is a nodata band */ /* TODO: No!! This is too slow */ /*rt_band_check_is_nodata(band);*/ return band; } /* -4 for size, +1 for endian */ #define RT_WKB_HDR_SZ (sizeof(struct rt_raster_serialized_t)-4+1) rt_raster rt_raster_from_wkb(const uint8_t* wkb, uint32_t wkbsize) { const uint8_t *ptr = wkb; const uint8_t *wkbend = NULL; rt_raster rast = NULL; uint8_t endian = 0; uint16_t version = 0; uint16_t i = 0; uint16_t j = 0; assert(NULL != ptr); /* Check that wkbsize is >= sizeof(rt_raster_serialized) */ if (wkbsize < RT_WKB_HDR_SZ) { rterror("rt_raster_from_wkb: wkb size (%d) < min size (%d)", wkbsize, RT_WKB_HDR_SZ); return NULL; } wkbend = wkb + wkbsize; RASTER_DEBUGF(3, "Parsing header from wkb position %d (expected 0)", d_binptr_to_pos(ptr, wkbend, wkbsize)); CHECK_BINPTR_POSITION(ptr, wkbend, wkbsize, 0); /* Read endianness */ endian = *ptr; ptr += 1; /* Read version of protocol */ version = read_uint16(&ptr, endian); if (version != 0) { rterror("rt_raster_from_wkb: WKB version %d unsupported", version); return NULL; } /* Read other components of raster header */ rast = (rt_raster) rtalloc(sizeof (struct rt_raster_t)); if (!rast) { rterror("rt_raster_from_wkb: Out of memory allocating raster for wkb input"); return NULL; } rast->numBands = read_uint16(&ptr, endian); rast->scaleX = read_float64(&ptr, endian); rast->scaleY = read_float64(&ptr, endian); rast->ipX = read_float64(&ptr, endian); rast->ipY = read_float64(&ptr, endian); rast->skewX = read_float64(&ptr, endian); rast->skewY = read_float64(&ptr, endian); rast->srid = clamp_srid(read_int32(&ptr, endian)); rast->width = read_uint16(&ptr, endian); rast->height = read_uint16(&ptr, endian); /* Consistency checking, should have been checked before */ assert(ptr <= wkbend); RASTER_DEBUGF(3, "rt_raster_from_wkb: Raster numBands: %d", rast->numBands); RASTER_DEBUGF(3, "rt_raster_from_wkb: Raster scale: %gx%g", rast->scaleX, rast->scaleY); RASTER_DEBUGF(3, "rt_raster_from_wkb: Raster ip: %gx%g", rast->ipX, rast->ipY); RASTER_DEBUGF(3, "rt_raster_from_wkb: Raster skew: %gx%g", rast->skewX, rast->skewY); RASTER_DEBUGF(3, "rt_raster_from_wkb: Raster srid: %d", rast->srid); RASTER_DEBUGF(3, "rt_raster_from_wkb: Raster dims: %dx%d", rast->width, rast->height); RASTER_DEBUGF(3, "Parsing raster header finished at wkb position %d (expected 61)", d_binptr_to_pos(ptr, wkbend, wkbsize)); CHECK_BINPTR_POSITION(ptr, wkbend, wkbsize, 61); /* Read all bands of raster */ if (!rast->numBands) { /* Here ptr should have been left to right after last used byte */ if (ptr < wkbend) { rtwarn("%d bytes of WKB remained unparsed", wkbend - ptr); } else if (ptr > wkbend) { /* Easier to get a segfault before I guess */ rtwarn("We parsed %d bytes more then available!", ptr - wkbend); } rast->bands = NULL; return rast; } /* Now read the bands */ rast->bands = (rt_band*) rtalloc(sizeof(rt_band) * rast->numBands); if (!rast->bands) { rterror("rt_raster_from_wkb: Out of memory allocating bands for WKB raster decoding"); rt_raster_destroy(rast); return NULL; } /* ptr should now point to start of first band */ /* we should have checked this before */ assert(ptr <= wkbend); for (i = 0; i < rast->numBands; ++i) { RASTER_DEBUGF(3, "Parsing band %d from wkb position %d", i, d_binptr_to_pos(ptr, wkbend, wkbsize)); rt_band band = rt_band_from_wkb(rast->width, rast->height, &ptr, wkbend, endian); if (!band) { rterror("rt_raster_from_wkb: Error reading WKB form of band %d", i); for (j = 0; j < i; j++) rt_band_destroy(rast->bands[j]); rt_raster_destroy(rast); return NULL; } band->raster = rast; rast->bands[i] = band; } /* Here ptr should have been left to right after last used byte */ if (ptr < wkbend) { rtwarn("%d bytes of WKB remained unparsed", wkbend - ptr); } else if (ptr > wkbend) { /* Easier to get a segfault before I guess */ rtwarn("We parsed %d bytes more then available!", ptr - wkbend); } return rast; } rt_raster rt_raster_from_hexwkb(const char* hexwkb, uint32_t hexwkbsize) { rt_raster ret = NULL; uint8_t* wkb = NULL; uint32_t wkbsize = 0; uint32_t i = 0; assert(NULL != hexwkb); RASTER_DEBUGF(3, "input wkb: %s", hexwkb); RASTER_DEBUGF(3, "input wkbsize: %d", hexwkbsize); if (hexwkbsize % 2) { rterror("rt_raster_from_hexwkb: Raster HEXWKB input must have an even number of characters"); return NULL; } wkbsize = hexwkbsize / 2; wkb = rtalloc(wkbsize); if (!wkb) { rterror("rt_raster_from_hexwkb: Out of memory allocating memory for decoding HEXWKB"); return NULL; } /* parse full hex */ for (i = 0; i < wkbsize; ++i) { wkb[i] = parse_hex((char*) & (hexwkb[i * 2])); } ret = rt_raster_from_wkb(wkb, wkbsize); rtdealloc(wkb); /* as long as rt_raster_from_wkb copies memory */ return ret; } static uint32_t rt_raster_wkb_size(rt_raster raster, int outasin) { uint32_t size = RT_WKB_HDR_SZ; uint16_t i = 0; assert(NULL != raster); RASTER_DEBUGF(3, "rt_raster_wkb_size: computing size for %d bands", raster->numBands); for (i = 0; i < raster->numBands; ++i) { rt_band band = raster->bands[i]; rt_pixtype pixtype = band->pixtype; int pixbytes = rt_pixtype_size(pixtype); RASTER_DEBUGF(3, "rt_raster_wkb_size: adding size of band %d", i); if (pixbytes < 1) { rterror("rt_raster_wkb_size: Corrupted band: unknown pixtype"); return 0; } /* Add space for band type */ size += 1; /* Add space for nodata value */ size += pixbytes; if (!outasin && band->offline) { /* Add space for band number */ size += 1; /* Add space for null-terminated path */ size += strlen(band->data.offline.path) + 1; } else { /* Add space for actual data */ size += pixbytes * raster->width * raster->height; } } return size; } /** * Return this raster in WKB form * * @param raster : the raster * @param outasin : if TRUE, out-db bands are treated as in-db * @param wkbsize : will be set to the size of returned wkb form * * @return WKB of raster or NULL on error */ uint8_t * rt_raster_to_wkb(rt_raster raster, int outasin, uint32_t *wkbsize) { #if POSTGIS_DEBUG_LEVEL > 0 const uint8_t *wkbend = NULL; #endif uint8_t *wkb = NULL; uint8_t *ptr = NULL; uint16_t i = 0; uint8_t littleEndian = isMachineLittleEndian(); assert(NULL != raster); assert(NULL != wkbsize); RASTER_DEBUG(2, "rt_raster_to_wkb: about to call rt_raster_wkb_size"); *wkbsize = rt_raster_wkb_size(raster, outasin); RASTER_DEBUGF(3, "rt_raster_to_wkb: found size: %d", *wkbsize); wkb = (uint8_t*) rtalloc(*wkbsize); if (!wkb) { rterror("rt_raster_to_wkb: Out of memory allocating WKB for raster"); return NULL; } ptr = wkb; #if POSTGIS_DEBUG_LEVEL > 2 wkbend = ptr + (*wkbsize); #endif RASTER_DEBUGF(3, "Writing raster header to wkb on position %d (expected 0)", d_binptr_to_pos(ptr, wkbend, *wkbsize)); /* Write endianness */ *ptr = littleEndian; ptr += 1; /* Write version(size - (end - ptr)) */ write_uint16(&ptr, littleEndian, 0); /* Copy header (from numBands up) */ memcpy(ptr, &(raster->numBands), sizeof (struct rt_raster_serialized_t) - 6); ptr += sizeof (struct rt_raster_serialized_t) - 6; RASTER_DEBUGF(3, "Writing bands header to wkb position %d (expected 61)", d_binptr_to_pos(ptr, wkbend, *wkbsize)); /* Serialize bands now */ for (i = 0; i < raster->numBands; ++i) { rt_band band = raster->bands[i]; rt_pixtype pixtype = band->pixtype; int pixbytes = rt_pixtype_size(pixtype); RASTER_DEBUGF(3, "Writing WKB for band %d", i); RASTER_DEBUGF(3, "Writing band pixel type to wkb position %d", d_binptr_to_pos(ptr, wkbend, *wkbsize)); if (pixbytes < 1) { rterror("rt_raster_to_wkb: Corrupted band: unknown pixtype"); rtdealloc(wkb); return NULL; } /* Add band type */ *ptr = band->pixtype; if (!outasin && band->offline) *ptr |= BANDTYPE_FLAG_OFFDB; if (band->hasnodata) *ptr |= BANDTYPE_FLAG_HASNODATA; if (band->isnodata) *ptr |= BANDTYPE_FLAG_ISNODATA; ptr += 1; #if 0 /* no padding required for WKB */ /* Add padding (if needed) */ if (pixbytes > 1) { memset(ptr, '\0', pixbytes - 1); ptr += pixbytes - 1; } /* Consistency checking (ptr is pixbytes-aligned) */ assert(!(((uint64_t) ptr) % pixbytes)); #endif RASTER_DEBUGF(3, "Writing band nodata to wkb position %d", d_binptr_to_pos(ptr, wkbend, *wkbsize)); /* Add nodata value */ switch (pixtype) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BUI: { uint8_t v = band->nodataval; *ptr = v; ptr += 1; break; } case PT_8BSI: { int8_t v = band->nodataval; *ptr = v; ptr += 1; break; } case PT_16BSI: case PT_16BUI: { uint16_t v = band->nodataval; memcpy(ptr, &v, 2); ptr += 2; break; } case PT_32BSI: case PT_32BUI: { uint32_t v = band->nodataval; memcpy(ptr, &v, 4); ptr += 4; break; } case PT_32BF: { float v = band->nodataval; memcpy(ptr, &v, 4); ptr += 4; break; } case PT_64BF: { memcpy(ptr, &band->nodataval, 8); ptr += 8; break; } default: rterror("rt_raster_to_wkb: Fatal error caused by unknown pixel type. Aborting."); rtdealloc(wkb); abort(); /* shoudn't happen */ return 0; } #if 0 /* no padding for WKB */ /* Consistency checking (ptr is pixbytes-aligned) */ assert(!((uint64_t) ptr % pixbytes)); #endif if (!outasin && band->offline) { /* Write band number */ *ptr = band->data.offline.bandNum; ptr += 1; /* Write path */ strcpy((char*) ptr, band->data.offline.path); ptr += strlen(band->data.offline.path) + 1; } else { /* Write data */ uint32_t datasize = raster->width * raster->height * pixbytes; RASTER_DEBUGF(4, "rt_raster_to_wkb: Copying %d bytes", datasize); memcpy(ptr, rt_band_get_data(band), datasize); ptr += datasize; } #if 0 /* no padding for WKB */ /* Pad up to 8-bytes boundary */ while ((uint64_t) ptr % 8) { *ptr = 0; ++ptr; } /* Consistency checking (ptr is pixbytes-aligned) */ assert(!((uint64_t) ptr % pixbytes)); #endif } return wkb; } char * rt_raster_to_hexwkb(rt_raster raster, int outasin, uint32_t *hexwkbsize) { uint8_t *wkb = NULL; char* hexwkb = NULL; uint32_t i = 0; uint32_t wkbsize = 0; assert(NULL != raster); assert(NULL != hexwkbsize); RASTER_DEBUG(2, "rt_raster_to_hexwkb: calling rt_raster_to_wkb"); wkb = rt_raster_to_wkb(raster, outasin, &wkbsize); RASTER_DEBUG(3, "rt_raster_to_hexwkb: rt_raster_to_wkb returned"); *hexwkbsize = wkbsize * 2; /* hex is 2 times bytes */ hexwkb = (char*) rtalloc((*hexwkbsize) + 1); if (!hexwkb) { rterror("rt_raster_to_hexwkb: Out of memory hexifying raster WKB"); rtdealloc(wkb); return NULL; } hexwkb[*hexwkbsize] = '\0'; /* Null-terminate */ for (i = 0; i < wkbsize; ++i) { deparse_hex(wkb[i], &(hexwkb[2 * i])); } rtdealloc(wkb); /* we don't need this anymore */ RASTER_DEBUGF(3, "rt_raster_to_hexwkb: output wkb: %s", hexwkb); return hexwkb; } /*--------- Serializer/Deserializer --------------------------------------*/ static uint32_t rt_raster_serialized_size(rt_raster raster) { uint32_t size = sizeof (struct rt_raster_serialized_t); uint16_t i = 0; assert(NULL != raster); RASTER_DEBUGF(3, "Serialized size with just header:%d - now adding size of %d bands", size, raster->numBands); for (i = 0; i < raster->numBands; ++i) { rt_band band = raster->bands[i]; rt_pixtype pixtype = band->pixtype; int pixbytes = rt_pixtype_size(pixtype); if (pixbytes < 1) { rterror("rt_raster_serialized_size: Corrupted band: unknown pixtype"); return 0; } /* Add space for band type, hasnodata flag and data padding */ size += pixbytes; /* Add space for nodata value */ size += pixbytes; if (band->offline) { /* Add space for band number */ size += 1; /* Add space for null-terminated path */ size += strlen(band->data.offline.path) + 1; } else { /* Add space for raster band data */ size += pixbytes * raster->width * raster->height; } RASTER_DEBUGF(3, "Size before alignment is %d", size); /* Align size to 8-bytes boundary (trailing padding) */ /* XXX jorgearevalo: bug here. If the size is actually 8-bytes aligned, this line will add 8 bytes trailing padding, and it's not necessary */ /*size += 8 - (size % 8);*/ if (size % 8) size += 8 - (size % 8); RASTER_DEBUGF(3, "Size after alignment is %d", size); } return size; } /** * Return this raster in serialized form. * Memory (band data included) is copied from rt_raster. * * Serialized form is documented in doc/RFC1-SerializedFormat. */ void* rt_raster_serialize(rt_raster raster) { uint32_t size = 0; uint8_t* ret = NULL; uint8_t* ptr = NULL; uint16_t i = 0; assert(NULL != raster); size = rt_raster_serialized_size(raster); ret = (uint8_t*) rtalloc(size); if (!ret) { rterror("rt_raster_serialize: Out of memory allocating %d bytes for serializing a raster", size); return NULL; } memset(ret, '-', size); ptr = ret; RASTER_DEBUGF(3, "sizeof(struct rt_raster_serialized_t):%u", sizeof (struct rt_raster_serialized_t)); RASTER_DEBUGF(3, "sizeof(struct rt_raster_t):%u", sizeof (struct rt_raster_t)); RASTER_DEBUGF(3, "serialized size:%lu", (long unsigned) size); /* Set size */ /* NOTE: Value of rt_raster.size may be updated in * returned object, for instance, by rt_pg layer to * store value calculated by SET_VARSIZE. */ raster->size = size; /* Set version */ raster->version = 0; /* Copy header */ memcpy(ptr, raster, sizeof (struct rt_raster_serialized_t)); RASTER_DEBUG(3, "Start hex dump of raster being serialized using 0x2D to mark non-written bytes"); #if POSTGIS_DEBUG_LEVEL > 2 uint8_t* dbg_ptr = ptr; d_print_binary_hex("HEADER", dbg_ptr, size); #endif ptr += sizeof (struct rt_raster_serialized_t); /* Serialize bands now */ for (i = 0; i < raster->numBands; ++i) { rt_band band = raster->bands[i]; assert(NULL != band); rt_pixtype pixtype = band->pixtype; int pixbytes = rt_pixtype_size(pixtype); if (pixbytes < 1) { rterror("rt_raster_serialize: Corrupted band: unknown pixtype"); rtdealloc(ret); return NULL; } /* Add band type */ *ptr = band->pixtype; if (band->offline) { *ptr |= BANDTYPE_FLAG_OFFDB; } if (band->hasnodata) { *ptr |= BANDTYPE_FLAG_HASNODATA; } if (band->isnodata) { *ptr |= BANDTYPE_FLAG_ISNODATA; } #if POSTGIS_DEBUG_LEVEL > 2 d_print_binary_hex("PIXTYPE", dbg_ptr, size); #endif ptr += 1; /* Add padding (if needed) */ if (pixbytes > 1) { memset(ptr, '\0', pixbytes - 1); ptr += pixbytes - 1; } #if POSTGIS_DEBUG_LEVEL > 2 d_print_binary_hex("PADDING", dbg_ptr, size); #endif /* Consistency checking (ptr is pixbytes-aligned) */ assert(!((ptr - ret) % pixbytes)); /* Add nodata value */ switch (pixtype) { case PT_1BB: case PT_2BUI: case PT_4BUI: case PT_8BUI: { uint8_t v = band->nodataval; *ptr = v; ptr += 1; break; } case PT_8BSI: { int8_t v = band->nodataval; *ptr = v; ptr += 1; break; } case PT_16BSI: case PT_16BUI: { uint16_t v = band->nodataval; memcpy(ptr, &v, 2); ptr += 2; break; } case PT_32BSI: case PT_32BUI: { uint32_t v = band->nodataval; memcpy(ptr, &v, 4); ptr += 4; break; } case PT_32BF: { float v = band->nodataval; memcpy(ptr, &v, 4); ptr += 4; break; } case PT_64BF: { memcpy(ptr, &band->nodataval, 8); ptr += 8; break; } default: rterror("rt_raster_serialize: Fatal error caused by unknown pixel type. Aborting."); rtdealloc(ret); return NULL; } /* Consistency checking (ptr is pixbytes-aligned) */ assert(!((ptr - ret) % pixbytes)); #if POSTGIS_DEBUG_LEVEL > 2 d_print_binary_hex("nodata", dbg_ptr, size); #endif if (band->offline) { /* Write band number */ *ptr = band->data.offline.bandNum; ptr += 1; /* Write path */ strcpy((char*) ptr, band->data.offline.path); ptr += strlen(band->data.offline.path) + 1; } else { /* Write data */ uint32_t datasize = raster->width * raster->height * pixbytes; memcpy(ptr, band->data.mem, datasize); ptr += datasize; } #if POSTGIS_DEBUG_LEVEL > 2 d_print_binary_hex("BAND", dbg_ptr, size); #endif /* Pad up to 8-bytes boundary */ while ((uintptr_t) ptr % 8) { *ptr = 0; ++ptr; RASTER_DEBUGF(3, "PAD at %d", (uintptr_t) ptr % 8); } /* Consistency checking (ptr is pixbytes-aligned) */ assert(!((ptr - ret) % pixbytes)); } /* for-loop over bands */ #if POSTGIS_DEBUG_LEVEL > 2 d_print_binary_hex("SERIALIZED RASTER", dbg_ptr, size); #endif return ret; } /** * Return a raster from a serialized form. * * Serialized form is documented in doc/RFC1-SerializedFormat. * * NOTE: the raster will contain pointer to the serialized * form (including band data), which must be kept alive. */ rt_raster rt_raster_deserialize(void* serialized, int header_only) { rt_raster rast = NULL; const uint8_t *ptr = NULL; const uint8_t *beg = NULL; uint16_t i = 0; uint16_t j = 0; uint8_t littleEndian = isMachineLittleEndian(); assert(NULL != serialized); RASTER_DEBUG(2, "rt_raster_deserialize: Entering..."); /* NOTE: Value of rt_raster.size may be different * than actual size of raster data being read. * See note on SET_VARSIZE in rt_raster_serialize function above. */ /* Allocate memory for deserialized raster header */ RASTER_DEBUG(3, "rt_raster_deserialize: Allocating memory for deserialized raster header"); rast = (rt_raster) rtalloc(sizeof (struct rt_raster_t)); if (!rast) { rterror("rt_raster_deserialize: Out of memory allocating raster for deserialization"); return NULL; } /* Deserialize raster header */ RASTER_DEBUG(3, "rt_raster_deserialize: Deserialize raster header"); memcpy(rast, serialized, sizeof (struct rt_raster_serialized_t)); if (0 == rast->numBands || header_only) { rast->bands = 0; return rast; } beg = (const uint8_t*) serialized; /* Allocate registry of raster bands */ RASTER_DEBUG(3, "rt_raster_deserialize: Allocating memory for bands"); rast->bands = rtalloc(rast->numBands * sizeof (rt_band)); if (rast->bands == NULL) { rterror("rt_raster_deserialize: Out of memory allocating bands"); rtdealloc(rast); return NULL; } RASTER_DEBUGF(3, "rt_raster_deserialize: %d bands", rast->numBands); /* Move to the beginning of first band */ ptr = beg; ptr += sizeof (struct rt_raster_serialized_t); /* Deserialize bands now */ for (i = 0; i < rast->numBands; ++i) { rt_band band = NULL; uint8_t type = 0; int pixbytes = 0; band = rtalloc(sizeof(struct rt_band_t)); if (!band) { rterror("rt_raster_deserialize: Out of memory allocating rt_band during deserialization"); for (j = 0; j < i; j++) rt_band_destroy(rast->bands[j]); rt_raster_destroy(rast); return NULL; } rast->bands[i] = band; type = *ptr; ptr++; band->pixtype = type & BANDTYPE_PIXTYPE_MASK; RASTER_DEBUGF(3, "rt_raster_deserialize: band %d with pixel type %s", i, rt_pixtype_name(band->pixtype)); band->offline = BANDTYPE_IS_OFFDB(type) ? 1 : 0; band->hasnodata = BANDTYPE_HAS_NODATA(type) ? 1 : 0; band->isnodata = band->hasnodata ? (BANDTYPE_IS_NODATA(type) ? 1 : 0) : 0; band->width = rast->width; band->height = rast->height; band->ownsdata = 0; /* we do NOT own this data!!! */ band->raster = rast; /* Advance by data padding */ pixbytes = rt_pixtype_size(band->pixtype); ptr += pixbytes - 1; /* Read nodata value */ switch (band->pixtype) { case PT_1BB: { band->nodataval = ((int) read_uint8(&ptr)) & 0x01; break; } case PT_2BUI: { band->nodataval = ((int) read_uint8(&ptr)) & 0x03; break; } case PT_4BUI: { band->nodataval = ((int) read_uint8(&ptr)) & 0x0F; break; } case PT_8BSI: { band->nodataval = read_int8(&ptr); break; } case PT_8BUI: { band->nodataval = read_uint8(&ptr); break; } case PT_16BSI: { band->nodataval = read_int16(&ptr, littleEndian); break; } case PT_16BUI: { band->nodataval = read_uint16(&ptr, littleEndian); break; } case PT_32BSI: { band->nodataval = read_int32(&ptr, littleEndian); break; } case PT_32BUI: { band->nodataval = read_uint32(&ptr, littleEndian); break; } case PT_32BF: { band->nodataval = read_float32(&ptr, littleEndian); break; } case PT_64BF: { band->nodataval = read_float64(&ptr, littleEndian); break; } default: { rterror("rt_raster_deserialize: Unknown pixeltype %d", band->pixtype); for (j = 0; j <= i; j++) rt_band_destroy(rast->bands[j]); rt_raster_destroy(rast); return NULL; } } RASTER_DEBUGF(3, "rt_raster_deserialize: has nodata flag %d", band->hasnodata); RASTER_DEBUGF(3, "rt_raster_deserialize: nodata value %g", band->nodataval); /* Consistency checking (ptr is pixbytes-aligned) */ assert(!((ptr - beg) % pixbytes)); if (band->offline) { int pathlen = 0; /* Read band number */ band->data.offline.bandNum = *ptr; ptr += 1; /* Register path */ pathlen = strlen((char*) ptr); band->data.offline.path = rtalloc(sizeof(char) * (pathlen + 1)); if (band->data.offline.path == NULL) { rterror("rt_raster_deserialize: Could not allocate momory for offline band path"); for (j = 0; j <= i; j++) rt_band_destroy(rast->bands[j]); rt_raster_destroy(rast); return NULL; } memcpy(band->data.offline.path, ptr, pathlen); band->data.offline.path[pathlen] = '\0'; ptr += pathlen + 1; band->data.offline.mem = NULL; } else { /* Register data */ const uint32_t datasize = rast->width * rast->height * pixbytes; band->data.mem = (uint8_t*) ptr; ptr += datasize; } /* Skip bytes of padding up to 8-bytes boundary */ #if POSTGIS_DEBUG_LEVEL > 0 const uint8_t *padbeg = ptr; #endif while (0 != ((ptr - beg) % 8)) { ++ptr; } RASTER_DEBUGF(3, "rt_raster_deserialize: skip %d bytes of 8-bytes boundary padding", ptr - padbeg); /* Consistency checking (ptr is pixbytes-aligned) */ assert(!((ptr - beg) % pixbytes)); } return rast; } /** * Return TRUE if the raster is empty. i.e. is NULL, width = 0 or height = 0 * * @param raster : the raster to get info from * * @return TRUE if the raster is empty, FALSE otherwise */ int rt_raster_is_empty(rt_raster raster) { return (NULL == raster || raster->height <= 0 || raster->width <= 0); } /** * Return TRUE if the raster has a band of this number. * * @param raster : the raster to get info from * @param nband : the band number. 0-based * * @return TRUE if the raster has a band of this number, FALSE otherwise */ int rt_raster_has_band(rt_raster raster, int nband) { return !(NULL == raster || nband >= raster->numBands || nband < 0); } /** * Copy one band from one raster to another. Bands are duplicated from * fromrast to torast using rt_band_duplicate. The caller will need * to ensure that the copied band's data or path remains allocated * for the lifetime of the copied bands. * * @param torast : raster to copy band to * @param fromrast : raster to copy band from * @param fromindex : index of band in source raster, 0-based * @param toindex : index of new band in destination raster, 0-based * * @return The band index of the second raster where the new band is copied. * -1 if error */ int rt_raster_copy_band( rt_raster torast, rt_raster fromrast, int fromindex, int toindex ) { rt_band srcband = NULL; rt_band dstband = NULL; assert(NULL != torast); assert(NULL != fromrast); /* Check raster dimensions */ if (torast->height != fromrast->height || torast->width != fromrast->width) { rtwarn("rt_raster_copy_band: Attempting to add a band with different width or height"); return -1; } /* Check bands limits */ if (fromrast->numBands < 1) { rtwarn("rt_raster_copy_band: Second raster has no band"); return -1; } else if (fromindex < 0) { rtwarn("rt_raster_copy_band: Band index for second raster < 0. Defaulted to 0"); fromindex = 0; } else if (fromindex >= fromrast->numBands) { rtwarn("rt_raster_copy_band: Band index for second raster > number of bands, truncated from %u to %u", fromindex, fromrast->numBands - 1); fromindex = fromrast->numBands - 1; } if (toindex < 0) { rtwarn("rt_raster_copy_band: Band index for first raster < 0. Defaulted to 0"); toindex = 0; } else if (toindex > torast->numBands) { rtwarn("rt_raster_copy_band: Band index for first raster > number of bands, truncated from %u to %u", toindex, torast->numBands); toindex = torast->numBands; } /* Get band from source raster */ srcband = rt_raster_get_band(fromrast, fromindex); /* duplicate band */ dstband = rt_band_duplicate(srcband); /* Add band to the second raster */ return rt_raster_add_band(torast, dstband, toindex); } /** * Construct a new rt_raster from an existing rt_raster and an array * of band numbers * * @param raster : the source raster * @param bandNums : array of band numbers to extract from source raster * and add to the new raster (0 based) * @param count : number of elements in bandNums * * @return a new rt_raster or NULL on error */ rt_raster rt_raster_from_band(rt_raster raster, uint32_t *bandNums, int count) { rt_raster rast = NULL; int i = 0; int j = 0; int idx; int32_t flag; double gt[6] = {0.}; assert(NULL != raster); assert(NULL != bandNums); RASTER_DEBUGF(3, "rt_raster_from_band: source raster has %d bands", rt_raster_get_num_bands(raster)); /* create new raster */ rast = rt_raster_new(raster->width, raster->height); if (NULL == rast) { rterror("rt_raster_from_band: Out of memory allocating new raster"); return NULL; } /* copy raster attributes */ rt_raster_get_geotransform_matrix(raster, gt); rt_raster_set_geotransform_matrix(rast, gt); /* srid */ rt_raster_set_srid(rast, raster->srid); /* copy bands */ for (i = 0; i < count; i++) { idx = bandNums[i]; flag = rt_raster_copy_band(rast, raster, idx, i); if (flag < 0) { rterror("rt_raster_from_band: Could not copy band"); for (j = 0; j < i; j++) rt_band_destroy(rast->bands[j]); rt_raster_destroy(rast); return NULL; } RASTER_DEBUGF(3, "rt_raster_from_band: band created at index %d", flag); } RASTER_DEBUGF(3, "rt_raster_from_band: new raster has %d bands", rt_raster_get_num_bands(rast)); return rast; } /** * Replace band at provided index with new band * * @param raster: raster of band to be replaced * @param band : new band to add to raster * @param index : index of band to replace (0-based) * * @return NULL on error or replaced band */ rt_band rt_raster_replace_band(rt_raster raster, rt_band band, int index) { rt_band oldband = NULL; assert(NULL != raster); assert(NULL != band); if (band->width != raster->width || band->height != raster->height) { rterror("rt_raster_replace_band: Band does not match raster's dimensions: %dx%d band to %dx%d raster", band->width, band->height, raster->width, raster->height); return 0; } if (index >= raster->numBands || index < 0) { rterror("rt_raster_replace_band: Band index is not valid"); return 0; } oldband = rt_raster_get_band(raster, index); RASTER_DEBUGF(3, "rt_raster_replace_band: old band at %p", oldband); RASTER_DEBUGF(3, "rt_raster_replace_band: new band at %p", band); raster->bands[index] = band; RASTER_DEBUGF(3, "rt_raster_replace_band: new band at %p", raster->bands[index]); band->raster = raster; oldband->raster = NULL; return oldband; } /** * Clone an existing raster * * @param raster : raster to clone * @param deep : flag indicating if bands should be cloned * * @return a new rt_raster or NULL on error */ rt_raster rt_raster_clone(rt_raster raster, uint8_t deep) { rt_raster rtn = NULL; double gt[6] = {0}; assert(NULL != raster); if (deep) { int numband = rt_raster_get_num_bands(raster); uint32_t *nband = NULL; int i = 0; nband = rtalloc(sizeof(uint32_t) * numband); if (nband == NULL) { rterror("rt_raster_clone: Could not allocate memory for deep clone"); return NULL; } for (i = 0; i < numband; i++) nband[i] = i; rtn = rt_raster_from_band(raster, nband, numband); rtdealloc(nband); return rtn; } rtn = rt_raster_new( rt_raster_get_width(raster), rt_raster_get_height(raster) ); if (rtn == NULL) { rterror("rt_raster_clone: Could not create cloned raster"); return NULL; } rt_raster_get_geotransform_matrix(raster, gt); rt_raster_set_geotransform_matrix(rtn, gt); rt_raster_set_srid(rtn, rt_raster_get_srid(raster)); return rtn; } /** * Return formatted GDAL raster from raster * * @param raster : the raster to convert * @param srs : the raster's coordinate system in OGC WKT * @param format : format to convert to. GDAL driver short name * @param options : list of format creation options. array of strings * @param gdalsize : will be set to the size of returned bytea * * @return formatted GDAL raster. the calling function is responsible * for freeing the returned data using CPLFree() */ uint8_t* rt_raster_to_gdal(rt_raster raster, const char *srs, char *format, char **options, uint64_t *gdalsize) { GDALDriverH src_drv = NULL; GDALDatasetH src_ds = NULL; vsi_l_offset rtn_lenvsi; uint64_t rtn_len = 0; GDALDriverH rtn_drv = NULL; GDALDatasetH rtn_ds = NULL; uint8_t *rtn = NULL; assert(NULL != raster); assert(NULL != gdalsize); /* any supported format is possible */ rt_util_gdal_register_all(); RASTER_DEBUG(3, "loaded all supported GDAL formats"); /* output format not specified */ if (format == NULL || !strlen(format)) format = "GTiff"; RASTER_DEBUGF(3, "output format is %s", format); /* load raster into a GDAL MEM raster */ src_ds = rt_raster_to_gdal_mem(raster, srs, NULL, NULL, 0, &src_drv); if (NULL == src_ds) { rterror("rt_raster_to_gdal: Could not convert raster to GDAL MEM format"); return 0; } /* load driver */ rtn_drv = GDALGetDriverByName(format); if (NULL == rtn_drv) { rterror("rt_raster_to_gdal: Could not load the output GDAL driver"); GDALClose(src_ds); return 0; } RASTER_DEBUG(3, "Output driver loaded"); /* convert GDAL MEM raster to output format */ RASTER_DEBUG(3, "Copying GDAL MEM raster to memory file in output format"); rtn_ds = GDALCreateCopy( rtn_drv, "/vsimem/out.dat", /* should be fine assuming this is in a process */ src_ds, FALSE, /* should copy be strictly equivelent? */ options, /* format options */ NULL, /* progress function */ NULL /* progress data */ ); if (NULL == rtn_ds) { rterror("rt_raster_to_gdal: Could not create the output GDAL dataset"); GDALClose(src_ds); return 0; } /* close source dataset */ GDALClose(src_ds); RASTER_DEBUG(3, "Closed GDAL MEM raster"); RASTER_DEBUGF(4, "dataset SRS: %s", GDALGetProjectionRef(rtn_ds)); /* close dataset, this also flushes any pending writes */ GDALClose(rtn_ds); RASTER_DEBUG(3, "Closed GDAL output raster"); RASTER_DEBUG(3, "Done copying GDAL MEM raster to memory file in output format"); /* from memory file to buffer */ RASTER_DEBUG(3, "Copying GDAL memory file to buffer"); rtn = VSIGetMemFileBuffer("/vsimem/out.dat", &rtn_lenvsi, TRUE); RASTER_DEBUG(3, "Done copying GDAL memory file to buffer"); if (NULL == rtn) { rterror("rt_raster_to_gdal: Could not create the output GDAL raster"); return 0; } rtn_len = (uint64_t) rtn_lenvsi; *gdalsize = rtn_len; return rtn; } /** * Returns a set of available GDAL drivers * * @param drv_count : number of GDAL drivers available * @param cancc : if non-zero, filter drivers to only those * with support for CreateCopy and VirtualIO * * @return set of "gdaldriver" values of available GDAL drivers */ rt_gdaldriver rt_raster_gdal_drivers(uint32_t *drv_count, uint8_t cancc) { const char *state; const char *txt; int txt_len; GDALDriverH *drv = NULL; rt_gdaldriver rtn = NULL; int count; int i; uint32_t j; assert(drv_count != NULL); rt_util_gdal_register_all(); count = GDALGetDriverCount(); rtn = (rt_gdaldriver) rtalloc(count * sizeof(struct rt_gdaldriver_t)); if (NULL == rtn) { rterror("rt_raster_gdal_drivers: Could not allocate memory for gdaldriver structure"); return 0; } for (i = 0, j = 0; i < count; i++) { drv = GDALGetDriver(i); if (cancc) { /* CreateCopy support */ state = GDALGetMetadataItem(drv, GDAL_DCAP_CREATECOPY, NULL); if (state == NULL) continue; /* VirtualIO support */ state = GDALGetMetadataItem(drv, GDAL_DCAP_VIRTUALIO, NULL); if (state == NULL) continue; } /* index of driver */ rtn[j].idx = i; /* short name */ txt = GDALGetDriverShortName(drv); txt_len = strlen(txt); if (cancc) { RASTER_DEBUGF(3, "rt_raster_gdal_driver: driver %s (%d) supports CreateCopy() and VirtualIO()", txt, i); } txt_len = (txt_len + 1) * sizeof(char); rtn[j].short_name = (char *) rtalloc(txt_len); memcpy(rtn[j].short_name, txt, txt_len); /* long name */ txt = GDALGetDriverLongName(drv); txt_len = strlen(txt); txt_len = (txt_len + 1) * sizeof(char); rtn[j].long_name = (char *) rtalloc(txt_len); memcpy(rtn[j].long_name, txt, txt_len); /* creation options */ txt = GDALGetDriverCreationOptionList(drv); txt_len = strlen(txt); txt_len = (txt_len + 1) * sizeof(char); rtn[j].create_options = (char *) rtalloc(txt_len); memcpy(rtn[j].create_options, txt, txt_len); j++; } /* free unused memory */ rtn = rtrealloc(rtn, j * sizeof(struct rt_gdaldriver_t)); *drv_count = j; return rtn; } /** * Return GDAL dataset using GDAL MEM driver from raster * * @param raster : raster to convert to GDAL MEM * @param srs : the raster's coordinate system in OGC WKT * @param bandNums : array of band numbers to extract from raster * and include in the GDAL dataset (0 based) * @param excludeNodataValues : array of zero, nonzero where if non-zero, * ignore nodata values for the band * @param count : number of elements in bandNums * @param rtn_drv : is set to the GDAL driver object * * @return GDAL dataset using GDAL MEM driver */ GDALDatasetH rt_raster_to_gdal_mem( rt_raster raster, const char *srs, uint32_t *bandNums, int *excludeNodataValues, int count, GDALDriverH *rtn_drv ) { GDALDriverH drv = NULL; GDALDatasetH ds = NULL; double gt[6] = {0.0}; CPLErr cplerr; GDALDataType gdal_pt = GDT_Unknown; GDALRasterBandH band; void *pVoid; char *pszDataPointer; char szGDALOption[50]; char *apszOptions[4]; double nodata = 0.0; int allocBandNums = 0; int allocNodataValues = 0; int i; int numBands; uint32_t width = 0; uint32_t height = 0; rt_band rtband = NULL; rt_pixtype pt = PT_END; assert(NULL != raster); assert(NULL != rtn_drv); /* store raster in GDAL MEM raster */ if (!rt_util_gdal_driver_registered("MEM")) GDALRegister_MEM(); drv = GDALGetDriverByName("MEM"); if (NULL == drv) { rterror("rt_raster_to_gdal_mem: Could not load the MEM GDAL driver"); return 0; } *rtn_drv = drv; width = rt_raster_get_width(raster); height = rt_raster_get_height(raster); ds = GDALCreate( drv, "", width, height, 0, GDT_Byte, NULL ); if (NULL == ds) { rterror("rt_raster_to_gdal_mem: Could not create a GDALDataset to convert into"); return 0; } /* add geotransform */ rt_raster_get_geotransform_matrix(raster, gt); cplerr = GDALSetGeoTransform(ds, gt); if (cplerr != CE_None) { rterror("rt_raster_to_gdal_mem: Could not set geotransformation"); GDALClose(ds); return 0; } /* set spatial reference */ if (NULL != srs && strlen(srs)) { char *_srs = rt_util_gdal_convert_sr(srs, 0); if (_srs == NULL) { rterror("rt_raster_to_gdal_mem: Could not convert srs to GDAL accepted format"); GDALClose(ds); return 0; } cplerr = GDALSetProjection(ds, _srs); CPLFree(_srs); if (cplerr != CE_None) { rterror("rt_raster_to_gdal_mem: Could not set projection"); GDALClose(ds); return 0; } RASTER_DEBUGF(3, "Projection set to: %s", GDALGetProjectionRef(ds)); } /* process bandNums */ numBands = rt_raster_get_num_bands(raster); if (NULL != bandNums && count > 0) { for (i = 0; i < count; i++) { if (bandNums[i] >= numBands) { rterror("rt_raster_to_gdal_mem: The band index %d is invalid", bandNums[i]); GDALClose(ds); return 0; } } } else { count = numBands; bandNums = (uint32_t *) rtalloc(sizeof(uint32_t) * count); if (NULL == bandNums) { rterror("rt_raster_to_gdal_mem: Could not allocate memory for band indices"); GDALClose(ds); return 0; } allocBandNums = 1; for (i = 0; i < count; i++) bandNums[i] = i; } /* process exclude_nodata_values */ if (NULL == excludeNodataValues) { excludeNodataValues = (int *) rtalloc(sizeof(int) * count); if (NULL == excludeNodataValues) { rterror("rt_raster_to_gdal_mem: Could not allocate memory for NODATA flags"); GDALClose(ds); return 0; } allocNodataValues = 1; for (i = 0; i < count; i++) excludeNodataValues[i] = 1; } /* add band(s) */ for (i = 0; i < count; i++) { rtband = rt_raster_get_band(raster, bandNums[i]); if (NULL == rtband) { rterror("rt_raster_to_gdal_mem: Could not get requested band index %d", bandNums[i]); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); GDALClose(ds); return 0; } pt = rt_band_get_pixtype(rtband); gdal_pt = rt_util_pixtype_to_gdal_datatype(pt); if (gdal_pt == GDT_Unknown) rtwarn("rt_raster_to_gdal_mem: Unknown pixel type for band"); /* For all pixel types other than PT_8BSI, set pointer to start of data */ if (pt != PT_8BSI) { pVoid = rt_band_get_data(rtband); RASTER_DEBUGF(4, "Band data is at pos %p", pVoid); pszDataPointer = (char *) rtalloc(20 * sizeof (char)); sprintf(pszDataPointer, "%p", pVoid); RASTER_DEBUGF(4, "rt_raster_to_gdal_mem: szDatapointer is %p", pszDataPointer); if (strnicmp(pszDataPointer, "0x", 2) == 0) sprintf(szGDALOption, "DATAPOINTER=%s", pszDataPointer); else sprintf(szGDALOption, "DATAPOINTER=0x%s", pszDataPointer); RASTER_DEBUG(3, "Storing info for GDAL MEM raster band"); apszOptions[0] = szGDALOption; apszOptions[1] = NULL; /* pixel offset, not needed */ apszOptions[2] = NULL; /* line offset, not needed */ apszOptions[3] = NULL; /* free */ rtdealloc(pszDataPointer); /* add band */ if (GDALAddBand(ds, gdal_pt, apszOptions) == CE_Failure) { rterror("rt_raster_to_gdal_mem: Could not add GDAL raster band"); if (allocBandNums) rtdealloc(bandNums); GDALClose(ds); return 0; } } /* PT_8BSI is special as GDAL has no equivalent pixel type. Must convert 8BSI to 16BSI so create basic band */ else { /* add band */ if (GDALAddBand(ds, gdal_pt, NULL) == CE_Failure) { rterror("rt_raster_to_gdal_mem: Could not add GDAL raster band"); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); GDALClose(ds); return 0; } } /* check band count */ if (GDALGetRasterCount(ds) != i + 1) { rterror("rt_raster_to_gdal_mem: Error creating GDAL MEM raster band"); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); GDALClose(ds); return 0; } /* get new band */ band = NULL; band = GDALGetRasterBand(ds, i + 1); if (NULL == band) { rterror("rt_raster_to_gdal_mem: Could not get GDAL band for additional processing"); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); GDALClose(ds); return 0; } /* PT_8BSI requires manual setting of pixels */ if (pt == PT_8BSI) { int nXBlocks, nYBlocks; int nXBlockSize, nYBlockSize; int iXBlock, iYBlock; int nXValid, nYValid; int iX, iY; int iXMax, iYMax; int x, y, z; uint32_t valueslen = 0; int16_t *values = NULL; double value = 0.; /* this makes use of GDAL's "natural" blocks */ GDALGetBlockSize(band, &nXBlockSize, &nYBlockSize); nXBlocks = (width + nXBlockSize - 1) / nXBlockSize; nYBlocks = (height + nYBlockSize - 1) / nYBlockSize; RASTER_DEBUGF(4, "(nXBlockSize, nYBlockSize) = (%d, %d)", nXBlockSize, nYBlockSize); RASTER_DEBUGF(4, "(nXBlocks, nYBlocks) = (%d, %d)", nXBlocks, nYBlocks); /* length is for the desired pixel type */ valueslen = rt_pixtype_size(PT_16BSI) * nXBlockSize * nYBlockSize; values = rtalloc(valueslen); if (NULL == values) { rterror("rt_raster_to_gdal_mem: Could not allocate memory for GDAL band pixel values"); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); GDALClose(ds); return 0; } for (iYBlock = 0; iYBlock < nYBlocks; iYBlock++) { for (iXBlock = 0; iXBlock < nXBlocks; iXBlock++) { memset(values, 0, valueslen); x = iXBlock * nXBlockSize; y = iYBlock * nYBlockSize; RASTER_DEBUGF(4, "(iXBlock, iYBlock) = (%d, %d)", iXBlock, iYBlock); RASTER_DEBUGF(4, "(x, y) = (%d, %d)", x, y); /* valid block width */ if ((iXBlock + 1) * nXBlockSize > width) nXValid = width - (iXBlock * nXBlockSize); else nXValid = nXBlockSize; /* valid block height */ if ((iYBlock + 1) * nYBlockSize > height) nYValid = height - (iYBlock * nYBlockSize); else nYValid = nYBlockSize; RASTER_DEBUGF(4, "(nXValid, nYValid) = (%d, %d)", nXValid, nYValid); /* convert 8BSI values to 16BSI */ z = 0; iYMax = y + nYValid; iXMax = x + nXValid; for (iY = y; iY < iYMax; iY++) { for (iX = x; iX < iXMax; iX++) { if (rt_band_get_pixel(rtband, iX, iY, &value, NULL) != ES_NONE) { rterror("rt_raster_to_gdal_mem: Could not get pixel value to convert from 8BSI to 16BSI"); rtdealloc(values); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); GDALClose(ds); return 0; } values[z++] = rt_util_clamp_to_16BSI(value); } } /* burn values */ if (GDALRasterIO( band, GF_Write, x, y, nXValid, nYValid, values, nXValid, nYValid, gdal_pt, 0, 0 ) != CE_None) { rterror("rt_raster_to_gdal_mem: Could not write converted 8BSI to 16BSI values to GDAL band"); rtdealloc(values); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); GDALClose(ds); return 0; } } } rtdealloc(values); } /* Add nodata value for band */ if (rt_band_get_hasnodata_flag(rtband) != FALSE && excludeNodataValues[i]) { rt_band_get_nodata(rtband, &nodata); if (GDALSetRasterNoDataValue(band, nodata) != CE_None) rtwarn("rt_raster_to_gdal_mem: Could not set nodata value for band"); RASTER_DEBUGF(3, "nodata value set to %f", GDALGetRasterNoDataValue(band, NULL)); } #if POSTGIS_DEBUG_LEVEL > 3 { GDALRasterBandH _grb = NULL; double _min; double _max; double _mean; double _stddev; _grb = GDALGetRasterBand(ds, i + 1); GDALComputeRasterStatistics(_grb, FALSE, &_min, &_max, &_mean, &_stddev, NULL, NULL); RASTER_DEBUGF(4, "GDAL Band %d stats: %f, %f, %f, %f", i + 1, _min, _max, _mean, _stddev); } #endif } /* necessary??? */ GDALFlushCache(ds); if (allocBandNums) rtdealloc(bandNums); if (allocNodataValues) rtdealloc(excludeNodataValues); return ds; } /** * Return a raster from a GDAL dataset * * @param ds : the GDAL dataset to convert to a raster * * @return raster or NULL */ rt_raster rt_raster_from_gdal_dataset(GDALDatasetH ds) { rt_raster rast = NULL; double gt[6] = {0}; CPLErr cplerr; uint32_t width = 0; uint32_t height = 0; uint32_t numBands = 0; int i = 0; char *authname = NULL; char *authcode = NULL; GDALRasterBandH gdband = NULL; GDALDataType gdpixtype = GDT_Unknown; rt_band band; int32_t idx; rt_pixtype pt = PT_END; uint32_t ptlen = 0; int hasnodata = 0; double nodataval; int x; int y; int nXBlocks, nYBlocks; int nXBlockSize, nYBlockSize; int iXBlock, iYBlock; int nXValid, nYValid; int iY; uint8_t *values = NULL; uint32_t valueslen = 0; uint8_t *ptr = NULL; assert(NULL != ds); /* raster size */ width = GDALGetRasterXSize(ds); height = GDALGetRasterYSize(ds); RASTER_DEBUGF(3, "Raster dimensions (width x height): %d x %d", width, height); /* create new raster */ RASTER_DEBUG(3, "Creating new raster"); rast = rt_raster_new(width, height); if (NULL == rast) { rterror("rt_raster_from_gdal_dataset: Out of memory allocating new raster"); return NULL; } RASTER_DEBUGF(3, "Created raster dimensions (width x height): %d x %d", rast->width, rast->height); /* get raster attributes */ cplerr = GDALGetGeoTransform(ds, gt); if (GDALGetGeoTransform(ds, gt) != CE_None) { RASTER_DEBUG(4, "Using default geotransform matrix (0, 1, 0, 0, 0, -1)"); gt[0] = 0; gt[1] = 1; gt[2] = 0; gt[3] = 0; gt[4] = 0; gt[5] = -1; } /* apply raster attributes */ rt_raster_set_geotransform_matrix(rast, gt); RASTER_DEBUGF(3, "Raster geotransform (%f, %f, %f, %f, %f, %f)", gt[0], gt[1], gt[2], gt[3], gt[4], gt[5]); /* srid */ if (rt_util_gdal_sr_auth_info(ds, &authname, &authcode) == ES_NONE) { if ( authname != NULL && strcmp(authname, "EPSG") == 0 && authcode != NULL ) { rt_raster_set_srid(rast, atoi(authcode)); RASTER_DEBUGF(3, "New raster's SRID = %d", rast->srid); } if (authname != NULL) rtdealloc(authname); if (authcode != NULL) rtdealloc(authcode); } numBands = GDALGetRasterCount(ds); #if POSTGIS_DEBUG_LEVEL > 3 for (i = 1; i <= numBands; i++) { GDALRasterBandH _grb = NULL; double _min; double _max; double _mean; double _stddev; _grb = GDALGetRasterBand(ds, i); GDALComputeRasterStatistics(_grb, FALSE, &_min, &_max, &_mean, &_stddev, NULL, NULL); RASTER_DEBUGF(4, "GDAL Band %d stats: %f, %f, %f, %f", i, _min, _max, _mean, _stddev); } #endif /* copy bands */ for (i = 1; i <= numBands; i++) { RASTER_DEBUGF(3, "Processing band %d of %d", i, numBands); gdband = NULL; gdband = GDALGetRasterBand(ds, i); if (NULL == gdband) { rterror("rt_raster_from_gdal_dataset: Could not get GDAL band"); rt_raster_destroy(rast); return NULL; } RASTER_DEBUGF(4, "gdband @ %p", gdband); /* pixtype */ gdpixtype = GDALGetRasterDataType(gdband); RASTER_DEBUGF(4, "gdpixtype, size = %s, %d", GDALGetDataTypeName(gdpixtype), GDALGetDataTypeSize(gdpixtype) / 8); pt = rt_util_gdal_datatype_to_pixtype(gdpixtype); if (pt == PT_END) { rterror("rt_raster_from_gdal_dataset: Unknown pixel type for GDAL band"); rt_raster_destroy(rast); return NULL; } ptlen = rt_pixtype_size(pt); /* size: width and height */ width = GDALGetRasterBandXSize(gdband); height = GDALGetRasterBandYSize(gdband); RASTER_DEBUGF(3, "GDAL band dimensions (width x height): %d x %d", width, height); /* nodata */ nodataval = GDALGetRasterNoDataValue(gdband, &hasnodata); RASTER_DEBUGF(3, "(hasnodata, nodataval) = (%d, %f)", hasnodata, nodataval); /* create band object */ idx = rt_raster_generate_new_band( rast, pt, (hasnodata ? nodataval : 0), hasnodata, nodataval, rt_raster_get_num_bands(rast) ); if (idx < 0) { rterror("rt_raster_from_gdal_dataset: Could not allocate memory for raster band"); rt_raster_destroy(rast); return NULL; } band = rt_raster_get_band(rast, idx); RASTER_DEBUGF(3, "Created band of dimension (width x height): %d x %d", band->width, band->height); /* this makes use of GDAL's "natural" blocks */ GDALGetBlockSize(gdband, &nXBlockSize, &nYBlockSize); nXBlocks = (width + nXBlockSize - 1) / nXBlockSize; nYBlocks = (height + nYBlockSize - 1) / nYBlockSize; RASTER_DEBUGF(4, "(nXBlockSize, nYBlockSize) = (%d, %d)", nXBlockSize, nYBlockSize); RASTER_DEBUGF(4, "(nXBlocks, nYBlocks) = (%d, %d)", nXBlocks, nYBlocks); /* allocate memory for values */ valueslen = ptlen * nXBlockSize * nYBlockSize; values = rtalloc(valueslen); if (values == NULL) { rterror("rt_raster_from_gdal_dataset: Could not allocate memory for GDAL band pixel values"); rt_raster_destroy(rast); return NULL; } RASTER_DEBUGF(3, "values @ %p of length = %d", values, valueslen); for (iYBlock = 0; iYBlock < nYBlocks; iYBlock++) { for (iXBlock = 0; iXBlock < nXBlocks; iXBlock++) { x = iXBlock * nXBlockSize; y = iYBlock * nYBlockSize; RASTER_DEBUGF(4, "(iXBlock, iYBlock) = (%d, %d)", iXBlock, iYBlock); RASTER_DEBUGF(4, "(x, y) = (%d, %d)", x, y); memset(values, 0, valueslen); /* valid block width */ if ((iXBlock + 1) * nXBlockSize > width) nXValid = width - (iXBlock * nXBlockSize); else nXValid = nXBlockSize; /* valid block height */ if ((iYBlock + 1) * nYBlockSize > height) nYValid = height - (iYBlock * nYBlockSize); else nYValid = nYBlockSize; RASTER_DEBUGF(4, "(nXValid, nYValid) = (%d, %d)", nXValid, nYValid); cplerr = GDALRasterIO( gdband, GF_Read, x, y, nXValid, nYValid, values, nXValid, nYValid, gdpixtype, 0, 0 ); if (cplerr != CE_None) { rterror("rt_raster_from_gdal_dataset: Could not get data from GDAL raster"); rtdealloc(values); rt_raster_destroy(rast); return NULL; } /* if block width is same as raster width, shortcut */ if (nXBlocks == 1 && nYBlockSize > 1 && nXValid == width) { x = 0; y = nYBlockSize * iYBlock; RASTER_DEBUGF(4, "Setting set of pixel lines at (%d, %d) for %d pixels", x, y, nXValid * nYValid); rt_band_set_pixel_line(band, x, y, values, nXValid * nYValid); } else { ptr = values; x = nXBlockSize * iXBlock; for (iY = 0; iY < nYValid; iY++) { y = iY + (nYBlockSize * iYBlock); RASTER_DEBUGF(4, "Setting pixel line at (%d, %d) for %d pixels", x, y, nXValid); rt_band_set_pixel_line(band, x, y, ptr, nXValid); ptr += (nXValid * ptlen); } } } } /* free memory */ rtdealloc(values); } return rast; } /****************************************************************************** * rt_raster_gdal_warp() ******************************************************************************/ typedef struct _rti_warp_arg_t* _rti_warp_arg; struct _rti_warp_arg_t { struct { GDALDriverH drv; GDALDatasetH ds; char *srs; } src, dst; GDALWarpOptions *wopts; struct { struct { char **item; int len; } option; struct { void *transform; void *imgproj; void *approx; } arg; GDALTransformerFunc func; } transform; }; static _rti_warp_arg _rti_warp_arg_init() { _rti_warp_arg arg = NULL; arg = rtalloc(sizeof(struct _rti_warp_arg_t)); if (arg == NULL) { rterror("_rti_warp_arg_init: Could not allocate memory for _rti_warp_arg"); return NULL; } arg->src.drv = NULL; arg->src.ds = NULL; arg->src.srs = NULL; arg->dst.drv = NULL; arg->dst.ds = NULL; arg->dst.srs = NULL; arg->wopts = NULL; arg->transform.option.item = NULL; arg->transform.option.len = 0; arg->transform.arg.transform = NULL; arg->transform.arg.imgproj = NULL; arg->transform.arg.approx = NULL; arg->transform.func = NULL; return arg; } static void _rti_warp_arg_destroy(_rti_warp_arg arg) { int i = 0; if (arg->dst.ds != NULL) GDALClose(arg->dst.ds); if (arg->dst.srs != NULL) CPLFree(arg->dst.srs); if (arg->src.ds != NULL) GDALClose(arg->src.ds); if (arg->src.srs != NULL) CPLFree(arg->src.srs); if (arg->transform.func == GDALApproxTransform) { if (arg->transform.arg.imgproj != NULL) GDALDestroyGenImgProjTransformer(arg->transform.arg.imgproj); } if (arg->wopts != NULL) GDALDestroyWarpOptions(arg->wopts); if (arg->transform.option.len > 0 && arg->transform.option.item != NULL) { for (i = 0; i < arg->transform.option.len; i++) { if (arg->transform.option.item[i] != NULL) rtdealloc(arg->transform.option.item[i]); } rtdealloc(arg->transform.option.item); } rtdealloc(arg); arg = NULL; } /** * Return a warped raster using GDAL Warp API * * @param raster : raster to transform * @param src_srs : the raster's coordinate system in OGC WKT * @param dst_srs : the warped raster's coordinate system in OGC WKT * @param scale_x : the x size of pixels of the warped raster's pixels in * units of dst_srs * @param scale_y : the y size of pixels of the warped raster's pixels in * units of dst_srs * @param width : the number of columns of the warped raster. note that * width/height CANNOT be used with scale_x/scale_y * @param height : the number of rows of the warped raster. note that * width/height CANNOT be used with scale_x/scale_y * @param ul_xw : the X value of upper-left corner of the warped raster in * units of dst_srs * @param ul_yw : the Y value of upper-left corner of the warped raster in * units of dst_srs * @param grid_xw : the X value of point on a grid to align warped raster * to in units of dst_srs * @param grid_yw : the Y value of point on a grid to align warped raster * to in units of dst_srs * @param skew_x : the X skew of the warped raster in units of dst_srs * @param skew_y : the Y skew of the warped raster in units of dst_srs * @param resample_alg : the resampling algorithm * @param max_err : maximum error measured in input pixels permitted * (0.0 for exact calculations) * * @return the warped raster or NULL */ rt_raster rt_raster_gdal_warp( rt_raster raster, const char *src_srs, const char *dst_srs, double *scale_x, double *scale_y, int *width, int *height, double *ul_xw, double *ul_yw, double *grid_xw, double *grid_yw, double *skew_x, double *skew_y, GDALResampleAlg resample_alg, double max_err ) { CPLErr cplerr; char *dst_options[] = {"SUBCLASS=VRTWarpedDataset", NULL}; _rti_warp_arg arg = NULL; int hasnodata = 0; GDALRasterBandH band; rt_band rtband = NULL; rt_pixtype pt = PT_END; GDALDataType gdal_pt = GDT_Unknown; double nodata = 0.0; double _gt[6] = {0}; double dst_extent[4]; rt_envelope extent; int _dim[2] = {0}; double _skew[2] = {0}; double _scale[2] = {0}; int ul_user = 0; rt_raster rast = NULL; int i = 0; int numBands = 0; int subgt = 0; RASTER_DEBUG(3, "starting"); assert(NULL != raster); /* internal variables */ arg = _rti_warp_arg_init(); if (arg == NULL) { rterror("rt_raster_gdal_warp: Could not initialize internal variables"); return NULL; } /* max_err must be gte zero the value 0.125 is the default used in gdalwarp.cpp on line 283 */ if (max_err < 0.) max_err = 0.125; RASTER_DEBUGF(4, "max_err = %f", max_err); /* handle srs */ if (src_srs != NULL) { /* reprojection taking place */ if (dst_srs != NULL && strcmp(src_srs, dst_srs) != 0) { RASTER_DEBUG(4, "Warp operation does include a reprojection"); arg->src.srs = rt_util_gdal_convert_sr(src_srs, 0); arg->dst.srs = rt_util_gdal_convert_sr(dst_srs, 0); if (arg->src.srs == NULL || arg->dst.srs == NULL) { rterror("rt_raster_gdal_warp: Could not convert srs values to GDAL accepted format"); _rti_warp_arg_destroy(arg); return NULL; } } /* no reprojection, a stub just for clarity */ else { RASTER_DEBUG(4, "Warp operation does NOT include reprojection"); } } else if (dst_srs != NULL) { /* dst_srs provided but not src_srs */ rterror("rt_raster_gdal_warp: SRS required for input raster if SRS provided for warped raster"); _rti_warp_arg_destroy(arg); return NULL; } /* load raster into a GDAL MEM dataset */ arg->src.ds = rt_raster_to_gdal_mem(raster, arg->src.srs, NULL, NULL, 0, &(arg->src.drv)); if (NULL == arg->src.ds) { rterror("rt_raster_gdal_warp: Could not convert raster to GDAL MEM format"); _rti_warp_arg_destroy(arg); return NULL; } RASTER_DEBUG(3, "raster loaded into GDAL MEM dataset"); /* special case when src_srs and dst_srs is NULL and raster's geotransform matrix is default */ if (src_srs == NULL && dst_srs == NULL && rt_raster_get_srid(raster) == SRID_UNKNOWN) { double gt[6]; #if POSTGIS_DEBUG_LEVEL > 3 GDALGetGeoTransform(arg->src.ds, gt); RASTER_DEBUGF(3, "GDAL MEM geotransform: %f, %f, %f, %f, %f, %f", gt[0], gt[1], gt[2], gt[3], gt[4], gt[5]); #endif /* default geotransform */ rt_raster_get_geotransform_matrix(raster, gt); RASTER_DEBUGF(3, "raster geotransform: %f, %f, %f, %f, %f, %f", gt[0], gt[1], gt[2], gt[3], gt[4], gt[5]); if ( FLT_EQ(gt[0], 0) && FLT_EQ(gt[1], 1) && FLT_EQ(gt[2], 0) && FLT_EQ(gt[3], 0) && FLT_EQ(gt[4], 0) && FLT_EQ(gt[5], -1) ) { double ngt[6] = {0, 10, 0, 0, 0, -10}; rtinfo("Raster has default geotransform. Adjusting metadata for use of GDAL Warp API"); GDALSetGeoTransform(arg->src.ds, ngt); GDALFlushCache(arg->src.ds); subgt = 1; #if POSTGIS_DEBUG_LEVEL > 3 GDALGetGeoTransform(arg->src.ds, gt); RASTER_DEBUGF(3, "GDAL MEM geotransform: %f, %f, %f, %f, %f, %f", gt[0], gt[1], gt[2], gt[3], gt[4], gt[5]); #endif } } /* set transform options */ if (arg->src.srs != NULL || arg->dst.srs != NULL) { arg->transform.option.len = 2; arg->transform.option.item = rtalloc(sizeof(char *) * (arg->transform.option.len + 1)); if (NULL == arg->transform.option.item) { rterror("rt_raster_gdal_warp: Could not allocation memory for transform options"); _rti_warp_arg_destroy(arg); return NULL; } memset(arg->transform.option.item, 0, sizeof(char *) * (arg->transform.option.len + 1)); for (i = 0; i < arg->transform.option.len; i++) { switch (i) { case 1: if (arg->dst.srs != NULL) arg->transform.option.item[i] = (char *) rtalloc(sizeof(char) * (strlen("DST_SRS=") + strlen(arg->dst.srs) + 1)); else arg->transform.option.item[i] = (char *) rtalloc(sizeof(char) * (strlen("DST_SRS=") + 1)); break; case 0: if (arg->src.srs != NULL) arg->transform.option.item[i] = (char *) rtalloc(sizeof(char) * (strlen("SRC_SRS=") + strlen(arg->src.srs) + 1)); else arg->transform.option.item[i] = (char *) rtalloc(sizeof(char) * (strlen("SRC_SRS=") + 1)); break; } if (NULL == arg->transform.option.item[i]) { rterror("rt_raster_gdal_warp: Could not allocation memory for transform options"); _rti_warp_arg_destroy(arg); return NULL; } switch (i) { case 1: if (arg->dst.srs != NULL) { snprintf( arg->transform.option.item[i], sizeof(char) * (strlen("DST_SRS=") + strlen(arg->dst.srs) + 1), "DST_SRS=%s", arg->dst.srs ); } else sprintf(arg->transform.option.item[i], "%s", "DST_SRS="); break; case 0: if (arg->src.srs != NULL) { snprintf( arg->transform.option.item[i], sizeof(char) * (strlen("SRC_SRS=") + strlen(arg->src.srs) + 1), "SRC_SRS=%s", arg->src.srs ); } else sprintf(arg->transform.option.item[i], "%s", "SRC_SRS="); break; } RASTER_DEBUGF(4, "arg->transform.option.item[%d] = %s", i, arg->transform.option.item[i]); } } else arg->transform.option.len = 0; /* transformation object for building dst dataset */ arg->transform.arg.transform = GDALCreateGenImgProjTransformer2(arg->src.ds, NULL, arg->transform.option.item); if (NULL == arg->transform.arg.transform) { rterror("rt_raster_gdal_warp: Could not create GDAL transformation object for output dataset creation"); _rti_warp_arg_destroy(arg); return NULL; } /* get approximate output georeferenced bounds and resolution */ cplerr = GDALSuggestedWarpOutput2( arg->src.ds, GDALGenImgProjTransform, arg->transform.arg.transform, _gt, &(_dim[0]), &(_dim[1]), dst_extent, 0); if (cplerr != CE_None) { rterror("rt_raster_gdal_warp: Could not get GDAL suggested warp output for output dataset creation"); _rti_warp_arg_destroy(arg); return NULL; } GDALDestroyGenImgProjTransformer(arg->transform.arg.transform); arg->transform.arg.transform = NULL; /* don't use suggested dimensions as use of suggested scales on suggested extent will result in suggested dimensions */ _dim[0] = 0; _dim[1] = 0; RASTER_DEBUGF(3, "Suggested geotransform: %f, %f, %f, %f, %f, %f", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5]); /* store extent in easier-to-use object */ extent.MinX = dst_extent[0]; extent.MinY = dst_extent[1]; extent.MaxX = dst_extent[2]; extent.MaxY = dst_extent[3]; extent.UpperLeftX = dst_extent[0]; extent.UpperLeftY = dst_extent[3]; RASTER_DEBUGF(3, "Suggested extent: %f, %f, %f, %f", extent.MinX, extent.MinY, extent.MaxX, extent.MaxY); /* scale and width/height are mutually exclusive */ if ( ((NULL != scale_x) || (NULL != scale_y)) && ((NULL != width) || (NULL != height)) ) { rterror("rt_raster_gdal_warp: Scale X/Y and width/height are mutually exclusive. Only provide one"); _rti_warp_arg_destroy(arg); return NULL; } /* user-defined width */ if (NULL != width) { _dim[0] = abs(*width); _scale[0] = fabs((extent.MaxX - extent.MinX) / ((double) _dim[0])); } /* user-defined height */ if (NULL != height) { _dim[1] = abs(*height); _scale[1] = fabs((extent.MaxY - extent.MinY) / ((double) _dim[1])); } /* user-defined scale */ if ( ((NULL != scale_x) && (FLT_NEQ(*scale_x, 0.0))) && ((NULL != scale_y) && (FLT_NEQ(*scale_y, 0.0))) ) { _scale[0] = fabs(*scale_x); _scale[1] = fabs(*scale_y); /* special override */ if (subgt) { _scale[0] *= 10; _scale[1] *= 10; } } else if ( ((NULL != scale_x) && (NULL == scale_y)) || ((NULL == scale_x) && (NULL != scale_y)) ) { rterror("rt_raster_gdal_warp: Both X and Y scale values must be provided for scale"); _rti_warp_arg_destroy(arg); return NULL; } /* scale not defined, use suggested */ if (FLT_EQ(_scale[0], 0) && FLT_EQ(_scale[1], 0)) { _scale[0] = fabs(_gt[1]); _scale[1] = fabs(_gt[5]); } RASTER_DEBUGF(4, "Using scale: %f x %f", _scale[0], -1 * _scale[1]); /* user-defined skew */ if (NULL != skew_x) { _skew[0] = *skew_x; /* negative scale-x affects skew for now, force skew to be in left-right, top-down orientation */ if ( NULL != scale_x && *scale_x < 0. ) { _skew[0] *= -1; } } if (NULL != skew_y) { _skew[1] = *skew_y; /* positive scale-y affects skew for now, force skew to be in left-right, top-down orientation */ if ( NULL != scale_y && *scale_y > 0. ) { _skew[1] *= -1; } } RASTER_DEBUGF(4, "Using skew: %f x %f", _skew[0], _skew[1]); /* reprocess extent if skewed */ if ( FLT_NEQ(_skew[0], 0) || FLT_NEQ(_skew[1], 0) ) { rt_raster skewedrast; RASTER_DEBUG(3, "Computing skewed extent's envelope"); skewedrast = rt_raster_compute_skewed_raster( extent, _skew, _scale, 0.01 ); if (skewedrast == NULL) { rterror("rt_raster_gdal_warp: Could not compute skewed raster"); _rti_warp_arg_destroy(arg); return NULL; } if (_dim[0] == 0) _dim[0] = skewedrast->width; if (_dim[1] == 0) _dim[1] = skewedrast->height; extent.UpperLeftX = skewedrast->ipX; extent.UpperLeftY = skewedrast->ipY; rt_raster_destroy(skewedrast); } /* dimensions not defined, compute */ if (!_dim[0]) _dim[0] = (int) fmax((fabs(extent.MaxX - extent.MinX) + (_scale[0] / 2.)) / _scale[0], 1); if (!_dim[1]) _dim[1] = (int) fmax((fabs(extent.MaxY - extent.MinY) + (_scale[1] / 2.)) / _scale[1], 1); /* temporary raster */ rast = rt_raster_new(_dim[0], _dim[1]); if (rast == NULL) { rterror("rt_raster_gdal_warp: Out of memory allocating temporary raster"); _rti_warp_arg_destroy(arg); return NULL; } /* set raster's spatial attributes */ rt_raster_set_offsets(rast, extent.UpperLeftX, extent.UpperLeftY); rt_raster_set_scale(rast, _scale[0], -1 * _scale[1]); rt_raster_set_skews(rast, _skew[0], _skew[1]); rt_raster_get_geotransform_matrix(rast, _gt); RASTER_DEBUGF(3, "Temp raster's geotransform: %f, %f, %f, %f, %f, %f", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5]); RASTER_DEBUGF(3, "Temp raster's dimensions (width x height): %d x %d", _dim[0], _dim[1]); /* user-defined upper-left corner */ if ( NULL != ul_xw && NULL != ul_yw ) { ul_user = 1; RASTER_DEBUGF(4, "Using user-specified upper-left corner: %f, %f", *ul_xw, *ul_yw); /* set upper-left corner */ rt_raster_set_offsets(rast, *ul_xw, *ul_yw); extent.UpperLeftX = *ul_xw; extent.UpperLeftY = *ul_yw; } else if ( ((NULL != ul_xw) && (NULL == ul_yw)) || ((NULL == ul_xw) && (NULL != ul_yw)) ) { rterror("rt_raster_gdal_warp: Both X and Y upper-left corner values must be provided"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } /* alignment only considered if upper-left corner not provided */ if ( !ul_user && ( (NULL != grid_xw) || (NULL != grid_yw) ) ) { if ( ((NULL != grid_xw) && (NULL == grid_yw)) || ((NULL == grid_xw) && (NULL != grid_yw)) ) { rterror("rt_raster_gdal_warp: Both X and Y alignment values must be provided"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } RASTER_DEBUGF(4, "Aligning extent to user-specified grid: %f, %f", *grid_xw, *grid_yw); do { double _r[2] = {0}; double _w[2] = {0}; /* raster is already aligned */ if (FLT_EQ(*grid_xw, extent.UpperLeftX) && FLT_EQ(*grid_yw, extent.UpperLeftY)) { RASTER_DEBUG(3, "Skipping raster alignment as it is already aligned to grid"); break; } extent.UpperLeftX = rast->ipX; extent.UpperLeftY = rast->ipY; rt_raster_set_offsets(rast, *grid_xw, *grid_yw); /* process upper-left corner */ if (rt_raster_geopoint_to_cell( rast, extent.UpperLeftX, extent.UpperLeftY, &(_r[0]), &(_r[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_warp: Could not compute raster pixel for spatial coordinates"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } if (rt_raster_cell_to_geopoint( rast, _r[0], _r[1], &(_w[0]), &(_w[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_warp: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } /* shift occurred */ if (FLT_NEQ(_w[0], extent.UpperLeftX)) { if (NULL == width) rast->width++; else if (NULL == scale_x) { double _c[2] = {0}; rt_raster_set_offsets(rast, extent.UpperLeftX, extent.UpperLeftY); /* get upper-right corner */ if (rt_raster_cell_to_geopoint( rast, rast->width, 0, &(_c[0]), &(_c[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_warp: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } rast->scaleX = fabs((_c[0] - _w[0]) / ((double) rast->width)); } } if (FLT_NEQ(_w[1], extent.UpperLeftY)) { if (NULL == height) rast->height++; else if (NULL == scale_y) { double _c[2] = {0}; rt_raster_set_offsets(rast, extent.UpperLeftX, extent.UpperLeftY); /* get upper-right corner */ if (rt_raster_cell_to_geopoint( rast, 0, rast->height, &(_c[0]), &(_c[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_warp: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } rast->scaleY = -1 * fabs((_c[1] - _w[1]) / ((double) rast->height)); } } rt_raster_set_offsets(rast, _w[0], _w[1]); RASTER_DEBUGF(4, "aligned offsets: %f x %f", _w[0], _w[1]); } while (0); } /* after this point, rt_envelope extent is no longer used */ /* get key attributes from rast */ _dim[0] = rast->width; _dim[1] = rast->height; rt_raster_get_geotransform_matrix(rast, _gt); /* scale-x is negative or scale-y is positive */ if (( (NULL != scale_x) && (*scale_x < 0.) ) || ( (NULL != scale_y) && (*scale_y > 0) )) { double _w[2] = {0}; /* negative scale-x */ if ( (NULL != scale_x) && (*scale_x < 0.) ) { if (rt_raster_cell_to_geopoint( rast, rast->width, 0, &(_w[0]), &(_w[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_warp: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } _gt[0] = _w[0]; _gt[1] = *scale_x; /* check for skew */ if (NULL != skew_x && FLT_NEQ(*skew_x, 0)) _gt[2] = *skew_x; } /* positive scale-y */ if ( (NULL != scale_y) && (*scale_y > 0) ) { if (rt_raster_cell_to_geopoint( rast, 0, rast->height, &(_w[0]), &(_w[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_warp: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_warp_arg_destroy(arg); return NULL; } _gt[3] = _w[1]; _gt[5] = *scale_y; /* check for skew */ if (NULL != skew_y && FLT_NEQ(*skew_y, 0)) _gt[4] = *skew_y; } } rt_raster_destroy(rast); rast = NULL; RASTER_DEBUGF(3, "Applied geotransform: %f, %f, %f, %f, %f, %f", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5]); RASTER_DEBUGF(3, "Raster dimensions (width x height): %d x %d", _dim[0], _dim[1]); if (FLT_EQ(_dim[0], 0) || FLT_EQ(_dim[1], 0)) { rterror("rt_raster_gdal_warp: The width (%f) or height (%f) of the warped raster is zero", _dim[0], _dim[1]); _rti_warp_arg_destroy(arg); return NULL; } /* load VRT driver */ if (!rt_util_gdal_driver_registered("VRT")) GDALRegister_VRT(); arg->dst.drv = GDALGetDriverByName("VRT"); if (NULL == arg->dst.drv) { rterror("rt_raster_gdal_warp: Could not load the output GDAL VRT driver"); _rti_warp_arg_destroy(arg); return NULL; } /* create dst dataset */ arg->dst.ds = GDALCreate(arg->dst.drv, "", _dim[0], _dim[1], 0, GDT_Byte, dst_options); if (NULL == arg->dst.ds) { rterror("rt_raster_gdal_warp: Could not create GDAL VRT dataset"); _rti_warp_arg_destroy(arg); return NULL; } /* set dst srs */ if (arg->dst.srs != NULL) { cplerr = GDALSetProjection(arg->dst.ds, arg->dst.srs); if (cplerr != CE_None) { rterror("rt_raster_gdal_warp: Could not set projection"); _rti_warp_arg_destroy(arg); return NULL; } RASTER_DEBUGF(3, "Applied SRS: %s", GDALGetProjectionRef(arg->dst.ds)); } /* set dst geotransform */ cplerr = GDALSetGeoTransform(arg->dst.ds, _gt); if (cplerr != CE_None) { rterror("rt_raster_gdal_warp: Could not set geotransform"); _rti_warp_arg_destroy(arg); return NULL; } /* add bands to dst dataset */ numBands = rt_raster_get_num_bands(raster); for (i = 0; i < numBands; i++) { rtband = rt_raster_get_band(raster, i); if (NULL == rtband) { rterror("rt_raster_gdal_warp: Could not get band %d for adding to VRT dataset", i); _rti_warp_arg_destroy(arg); return NULL; } pt = rt_band_get_pixtype(rtband); gdal_pt = rt_util_pixtype_to_gdal_datatype(pt); if (gdal_pt == GDT_Unknown) rtwarn("rt_raster_gdal_warp: Unknown pixel type for band %d", i); cplerr = GDALAddBand(arg->dst.ds, gdal_pt, NULL); if (cplerr != CE_None) { rterror("rt_raster_gdal_warp: Could not add band to VRT dataset"); _rti_warp_arg_destroy(arg); return NULL; } /* get band to write data to */ band = NULL; band = GDALGetRasterBand(arg->dst.ds, i + 1); if (NULL == band) { rterror("rt_raster_gdal_warp: Could not get GDAL band for additional processing"); _rti_warp_arg_destroy(arg); return NULL; } /* set nodata */ if (rt_band_get_hasnodata_flag(rtband) != FALSE) { hasnodata = 1; rt_band_get_nodata(rtband, &nodata); if (GDALSetRasterNoDataValue(band, nodata) != CE_None) rtwarn("rt_raster_gdal_warp: Could not set nodata value for band %d", i); RASTER_DEBUGF(3, "nodata value set to %f", GDALGetRasterNoDataValue(band, NULL)); } } /* create transformation object */ arg->transform.arg.transform = arg->transform.arg.imgproj = GDALCreateGenImgProjTransformer2( arg->src.ds, arg->dst.ds, arg->transform.option.item ); if (NULL == arg->transform.arg.transform) { rterror("rt_raster_gdal_warp: Could not create GDAL transformation object"); _rti_warp_arg_destroy(arg); return NULL; } arg->transform.func = GDALGenImgProjTransform; /* use approximate transformation object */ if (max_err > 0.0) { arg->transform.arg.transform = arg->transform.arg.approx = GDALCreateApproxTransformer( GDALGenImgProjTransform, arg->transform.arg.imgproj, max_err ); if (NULL == arg->transform.arg.transform) { rterror("rt_raster_gdal_warp: Could not create GDAL approximate transformation object"); _rti_warp_arg_destroy(arg); return NULL; } arg->transform.func = GDALApproxTransform; } /* warp options */ arg->wopts = GDALCreateWarpOptions(); if (NULL == arg->wopts) { rterror("rt_raster_gdal_warp: Could not create GDAL warp options object"); _rti_warp_arg_destroy(arg); return NULL; } /* set options */ arg->wopts->eResampleAlg = resample_alg; arg->wopts->hSrcDS = arg->src.ds; arg->wopts->hDstDS = arg->dst.ds; arg->wopts->pfnTransformer = arg->transform.func; arg->wopts->pTransformerArg = arg->transform.arg.transform; arg->wopts->papszWarpOptions = (char **) CPLMalloc(sizeof(char *) * 2); arg->wopts->papszWarpOptions[0] = (char *) CPLMalloc(sizeof(char) * (strlen("INIT_DEST=NO_DATA") + 1)); strcpy(arg->wopts->papszWarpOptions[0], "INIT_DEST=NO_DATA"); arg->wopts->papszWarpOptions[1] = NULL; /* set band mapping */ arg->wopts->nBandCount = numBands; arg->wopts->panSrcBands = (int *) CPLMalloc(sizeof(int) * arg->wopts->nBandCount); arg->wopts->panDstBands = (int *) CPLMalloc(sizeof(int) * arg->wopts->nBandCount); for (i = 0; i < arg->wopts->nBandCount; i++) arg->wopts->panDstBands[i] = arg->wopts->panSrcBands[i] = i + 1; /* set nodata mapping */ if (hasnodata) { RASTER_DEBUG(3, "Setting nodata mapping"); arg->wopts->padfSrcNoDataReal = (double *) CPLMalloc(numBands * sizeof(double)); arg->wopts->padfDstNoDataReal = (double *) CPLMalloc(numBands * sizeof(double)); arg->wopts->padfSrcNoDataImag = (double *) CPLMalloc(numBands * sizeof(double)); arg->wopts->padfDstNoDataImag = (double *) CPLMalloc(numBands * sizeof(double)); if ( NULL == arg->wopts->padfSrcNoDataReal || NULL == arg->wopts->padfDstNoDataReal || NULL == arg->wopts->padfSrcNoDataImag || NULL == arg->wopts->padfDstNoDataImag ) { rterror("rt_raster_gdal_warp: Out of memory allocating nodata mapping"); _rti_warp_arg_destroy(arg); return NULL; } for (i = 0; i < numBands; i++) { band = rt_raster_get_band(raster, i); if (!band) { rterror("rt_raster_gdal_warp: Could not process bands for nodata values"); _rti_warp_arg_destroy(arg); return NULL; } if (!rt_band_get_hasnodata_flag(band)) { /* based on line 1004 of gdalwarp.cpp the problem is that there is a chance that this number is a legitimate value */ arg->wopts->padfSrcNoDataReal[i] = -123456.789; } else { rt_band_get_nodata(band, &(arg->wopts->padfSrcNoDataReal[i])); } arg->wopts->padfDstNoDataReal[i] = arg->wopts->padfSrcNoDataReal[i]; arg->wopts->padfDstNoDataImag[i] = arg->wopts->padfSrcNoDataImag[i] = 0.0; RASTER_DEBUGF(4, "Mapped nodata value for band %d: %f (%f) => %f (%f)", i, arg->wopts->padfSrcNoDataReal[i], arg->wopts->padfSrcNoDataImag[i], arg->wopts->padfDstNoDataReal[i], arg->wopts->padfDstNoDataImag[i] ); } } /* warp raster */ RASTER_DEBUG(3, "Warping raster"); cplerr = GDALInitializeWarpedVRT(arg->dst.ds, arg->wopts); if (cplerr != CE_None) { rterror("rt_raster_gdal_warp: Could not warp raster"); _rti_warp_arg_destroy(arg); return NULL; } /* GDALSetDescription(arg->dst.ds, "/tmp/warped.vrt"); */ GDALFlushCache(arg->dst.ds); RASTER_DEBUG(3, "Raster warped"); /* convert gdal dataset to raster */ RASTER_DEBUG(3, "Converting GDAL dataset to raster"); rast = rt_raster_from_gdal_dataset(arg->dst.ds); _rti_warp_arg_destroy(arg); if (NULL == rast) { rterror("rt_raster_gdal_warp: Could not warp raster"); return NULL; } /* substitute geotransform matrix, reset back to default */ if (subgt) { double gt[6] = {0, 1, 0, 0, 0, -1}; rt_raster_set_geotransform_matrix(rast, gt); } RASTER_DEBUG(3, "done"); return rast; } /****************************************************************************** * rt_raster_gdal_rasterize() ******************************************************************************/ typedef struct _rti_rasterize_arg_t* _rti_rasterize_arg; struct _rti_rasterize_arg_t { uint8_t noband; uint32_t numbands; rt_pixtype *pixtype; double *init; double *nodata; uint8_t *hasnodata; double *value; int *bandlist; }; static _rti_rasterize_arg _rti_rasterize_arg_init() { _rti_rasterize_arg arg = NULL; arg = rtalloc(sizeof(struct _rti_rasterize_arg_t)); if (arg == NULL) { rterror("_rti_rasterize_arg_init: Could not allocate memory for _rti_rasterize_arg"); return NULL; } arg->noband = 0; arg->numbands = 0; arg->pixtype = NULL; arg->init = NULL; arg->nodata = NULL; arg->hasnodata = NULL; arg->value = NULL; arg->bandlist = NULL; return arg; } static void _rti_rasterize_arg_destroy(_rti_rasterize_arg arg) { if (arg->noband) { if (arg->pixtype != NULL) rtdealloc(arg->pixtype); if (arg->init != NULL) rtdealloc(arg->init); if (arg->nodata != NULL) rtdealloc(arg->nodata); if (arg->hasnodata != NULL) rtdealloc(arg->hasnodata); if (arg->value != NULL) rtdealloc(arg->value); } if (arg->bandlist != NULL) rtdealloc(arg->bandlist); rtdealloc(arg); } /** * Return a raster of the provided geometry * * @param wkb : WKB representation of the geometry to convert * @param wkb_len : length of the WKB representation of the geometry * @param srs : the geometry's coordinate system in OGC WKT * @param num_bands : number of bands in the output raster * @param pixtype : data type of each band * @param init : array of values to initialize each band with * @param value : array of values for pixels of geometry * @param nodata : array of nodata values for each band * @param hasnodata : array flagging the presence of nodata for each band * @param width : the number of columns of the raster * @param height : the number of rows of the raster * @param scale_x : the pixel width of the raster * @param scale_y : the pixel height of the raster * @param ul_xw : the X value of upper-left corner of the raster * @param ul_yw : the Y value of upper-left corner of the raster * @param grid_xw : the X value of point on grid to align raster to * @param grid_yw : the Y value of point on grid to align raster to * @param skew_x : the X skew of the raster * @param skew_y : the Y skew of the raster * @param options : array of options. only option is "ALL_TOUCHED" * * @return the raster of the provided geometry or NULL */ rt_raster rt_raster_gdal_rasterize( const unsigned char *wkb, uint32_t wkb_len, const char *srs, uint32_t num_bands, rt_pixtype *pixtype, double *init, double *value, double *nodata, uint8_t *hasnodata, int *width, int *height, double *scale_x, double *scale_y, double *ul_xw, double *ul_yw, double *grid_xw, double *grid_yw, double *skew_x, double *skew_y, char **options ) { rt_raster rast = NULL; int i = 0; int err = 0; _rti_rasterize_arg arg = NULL; int _dim[2] = {0}; double _scale[2] = {0}; double _skew[2] = {0}; OGRErr ogrerr; OGRSpatialReferenceH src_sr = NULL; OGRGeometryH src_geom; OGREnvelope src_env; rt_envelope extent; OGRwkbGeometryType wkbtype = wkbUnknown; int ul_user = 0; CPLErr cplerr; double _gt[6] = {0}; GDALDriverH _drv = NULL; GDALDatasetH _ds = NULL; GDALRasterBandH _band = NULL; uint16_t _width = 0; uint16_t _height = 0; RASTER_DEBUG(3, "starting"); assert(NULL != wkb); assert(0 != wkb_len); /* internal variables */ arg = _rti_rasterize_arg_init(); if (arg == NULL) { rterror("rt_raster_gdal_rasterize: Could not initialize internal variables"); return NULL; } /* no bands, raster is a mask */ if (num_bands < 1) { arg->noband = 1; arg->numbands = 1; arg->pixtype = (rt_pixtype *) rtalloc(sizeof(rt_pixtype)); arg->pixtype[0] = PT_8BUI; arg->init = (double *) rtalloc(sizeof(double)); arg->init[0] = 0; arg->nodata = (double *) rtalloc(sizeof(double)); arg->nodata[0] = 0; arg->hasnodata = (uint8_t *) rtalloc(sizeof(uint8_t)); arg->hasnodata[0] = 1; arg->value = (double *) rtalloc(sizeof(double)); arg->value[0] = 1; } else { arg->noband = 0; arg->numbands = num_bands; arg->pixtype = pixtype; arg->init = init; arg->nodata = nodata; arg->hasnodata = hasnodata; arg->value = value; } /* OGR spatial reference */ if (NULL != srs && strlen(srs)) { src_sr = OSRNewSpatialReference(NULL); if (OSRSetFromUserInput(src_sr, srs) != OGRERR_NONE) { rterror("rt_raster_gdal_rasterize: Could not create OSR spatial reference using the provided srs: %s", srs); _rti_rasterize_arg_destroy(arg); return NULL; } } /* convert WKB to OGR Geometry */ ogrerr = OGR_G_CreateFromWkb((unsigned char *) wkb, src_sr, &src_geom, wkb_len); if (ogrerr != OGRERR_NONE) { rterror("rt_raster_gdal_rasterize: Could not create OGR Geometry from WKB"); _rti_rasterize_arg_destroy(arg); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } /* OGR Geometry is empty */ if (OGR_G_IsEmpty(src_geom)) { rtinfo("Geometry provided is empty. Returning empty raster"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return rt_raster_new(0, 0); } /* get envelope */ OGR_G_GetEnvelope(src_geom, &src_env); rt_util_from_ogr_envelope(src_env, &extent); RASTER_DEBUGF(3, "Suggested raster envelope: %f, %f, %f, %f", extent.MinX, extent.MinY, extent.MaxX, extent.MaxY); /* user-defined scale */ if ( (NULL != scale_x) && (NULL != scale_y) && (FLT_NEQ(*scale_x, 0.0)) && (FLT_NEQ(*scale_y, 0.0)) ) { /* for now, force scale to be in left-right, top-down orientation */ _scale[0] = fabs(*scale_x); _scale[1] = fabs(*scale_y); } /* user-defined width/height */ else if ( (NULL != width) && (NULL != height) && (FLT_NEQ(*width, 0.0)) && (FLT_NEQ(*height, 0.0)) ) { _dim[0] = fabs(*width); _dim[1] = fabs(*height); if (FLT_NEQ(extent.MaxX, extent.MinX)) _scale[0] = fabs((extent.MaxX - extent.MinX) / _dim[0]); else _scale[0] = 1.; if (FLT_NEQ(extent.MaxY, extent.MinY)) _scale[1] = fabs((extent.MaxY - extent.MinY) / _dim[1]); else _scale[1] = 1.; } else { rterror("rt_raster_gdal_rasterize: Values must be provided for width and height or X and Y of scale"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } RASTER_DEBUGF(3, "scale (x, y) = %f, %f", _scale[0], -1 * _scale[1]); RASTER_DEBUGF(3, "dim (x, y) = %d, %d", _dim[0], _dim[1]); /* user-defined skew */ if (NULL != skew_x) { _skew[0] = *skew_x; /* negative scale-x affects skew for now, force skew to be in left-right, top-down orientation */ if ( NULL != scale_x && *scale_x < 0. ) { _skew[0] *= -1; } } if (NULL != skew_y) { _skew[1] = *skew_y; /* positive scale-y affects skew for now, force skew to be in left-right, top-down orientation */ if ( NULL != scale_y && *scale_y > 0. ) { _skew[1] *= -1; } } /* if geometry is a point, a linestring or set of either and bounds not set, increase extent by a pixel to avoid missing points on border a whole pixel is used instead of half-pixel due to backward compatibility with GDAL 1.6, 1.7 and 1.8. 1.9+ works fine with half-pixel. */ wkbtype = wkbFlatten(OGR_G_GetGeometryType(src_geom)); if (( (wkbtype == wkbPoint) || (wkbtype == wkbMultiPoint) || (wkbtype == wkbLineString) || (wkbtype == wkbMultiLineString) ) && FLT_EQ(_dim[0], 0) && FLT_EQ(_dim[1], 0) ) { int result; LWPOLY *epoly = NULL; LWGEOM *lwgeom = NULL; GEOSGeometry *egeom = NULL; GEOSGeometry *geom = NULL; RASTER_DEBUG(3, "Testing geometry is properly contained by extent"); /* see if geometry is properly contained by extent all parts of geometry lies within extent */ /* initialize GEOS */ initGEOS(lwnotice, lwgeom_geos_error); /* convert envelope to geometry */ RASTER_DEBUG(4, "Converting envelope to geometry"); epoly = rt_util_envelope_to_lwpoly(extent); if (epoly == NULL) { rterror("rt_raster_gdal_rasterize: Could not create envelope's geometry to test if geometry is properly contained by extent"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } egeom = (GEOSGeometry *) LWGEOM2GEOS(lwpoly_as_lwgeom(epoly)); lwpoly_free(epoly); /* convert WKB to geometry */ RASTER_DEBUG(4, "Converting WKB to geometry"); lwgeom = lwgeom_from_wkb(wkb, wkb_len, LW_PARSER_CHECK_NONE); geom = (GEOSGeometry *) LWGEOM2GEOS(lwgeom); lwgeom_free(lwgeom); result = GEOSRelatePattern(egeom, geom, "T**FF*FF*"); GEOSGeom_destroy(geom); GEOSGeom_destroy(egeom); if (result == 2) { rterror("rt_raster_gdal_rasterize: Could not test if geometry is properly contained by extent for geometry within extent"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } /* geometry NOT properly contained by extent */ if (!result) { #if POSTGIS_GDAL_VERSION > 18 /* check alignment flag: grid_xw */ if ( (NULL == ul_xw && NULL == ul_yw) && (NULL != grid_xw && NULL != grid_xw) && FLT_NEQ(*grid_xw, extent.MinX) ) { // do nothing RASTER_DEBUG(3, "Skipping extent adjustment on X-axis due to upcoming alignment"); } else { RASTER_DEBUG(3, "Adjusting extent for GDAL > 1.8 by half the scale on X-axis"); extent.MinX -= (_scale[0] / 2.); extent.MaxX += (_scale[0] / 2.); } /* check alignment flag: grid_yw */ if ( (NULL == ul_xw && NULL == ul_yw) && (NULL != grid_xw && NULL != grid_xw) && FLT_NEQ(*grid_yw, extent.MaxY) ) { // do nothing RASTER_DEBUG(3, "Skipping extent adjustment on Y-axis due to upcoming alignment"); } else { RASTER_DEBUG(3, "Adjusting extent for GDAL > 1.8 by half the scale on Y-axis"); extent.MinY -= (_scale[1] / 2.); extent.MaxY += (_scale[1] / 2.); } #else /* check alignment flag: grid_xw */ if ( (NULL == ul_xw && NULL == ul_yw) && (NULL != grid_xw && NULL != grid_xw) && FLT_NEQ(*grid_xw, extent.MinX) ) { // do nothing RASTER_DEBUG(3, "Skipping extent adjustment on X-axis due to upcoming alignment"); } else { RASTER_DEBUG(3, "Adjusting extent for GDAL <= 1.8 by the scale on X-axis"); extent.MinX -= _scale[0]; extent.MaxX += _scale[0]; } /* check alignment flag: grid_yw */ if ( (NULL == ul_xw && NULL == ul_yw) && (NULL != grid_xw && NULL != grid_xw) && FLT_NEQ(*grid_yw, extent.MaxY) ) { // do nothing RASTER_DEBUG(3, "Skipping extent adjustment on Y-axis due to upcoming alignment"); } else { RASTER_DEBUG(3, "Adjusting extent for GDAL <= 1.8 by the scale on Y-axis"); extent.MinY -= _scale[1]; extent.MaxY += _scale[1]; } #endif } RASTER_DEBUGF(3, "Adjusted extent: %f, %f, %f, %f", extent.MinX, extent.MinY, extent.MaxX, extent.MaxY); extent.UpperLeftX = extent.MinX; extent.UpperLeftY = extent.MaxY; } /* reprocess extent if skewed */ if ( FLT_NEQ(_skew[0], 0) || FLT_NEQ(_skew[1], 0) ) { rt_raster skewedrast; RASTER_DEBUG(3, "Computing skewed extent's envelope"); skewedrast = rt_raster_compute_skewed_raster( extent, _skew, _scale, 0.01 ); if (skewedrast == NULL) { rterror("rt_raster_gdal_rasterize: Could not compute skewed raster"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } _dim[0] = skewedrast->width; _dim[1] = skewedrast->height; extent.UpperLeftX = skewedrast->ipX; extent.UpperLeftY = skewedrast->ipY; rt_raster_destroy(skewedrast); } /* raster dimensions */ if (!_dim[0]) _dim[0] = (int) fmax((fabs(extent.MaxX - extent.MinX) + (_scale[0] / 2.)) / _scale[0], 1); if (!_dim[1]) _dim[1] = (int) fmax((fabs(extent.MaxY - extent.MinY) + (_scale[1] / 2.)) / _scale[1], 1); /* temporary raster */ rast = rt_raster_new(_dim[0], _dim[1]); if (rast == NULL) { rterror("rt_raster_gdal_rasterize: Out of memory allocating temporary raster"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } /* set raster's spatial attributes */ rt_raster_set_offsets(rast, extent.UpperLeftX, extent.UpperLeftY); rt_raster_set_scale(rast, _scale[0], -1 * _scale[1]); rt_raster_set_skews(rast, _skew[0], _skew[1]); rt_raster_get_geotransform_matrix(rast, _gt); RASTER_DEBUGF(3, "Temp raster's geotransform: %f, %f, %f, %f, %f, %f", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5]); RASTER_DEBUGF(3, "Temp raster's dimensions (width x height): %d x %d", _dim[0], _dim[1]); /* user-specified upper-left corner */ if ( NULL != ul_xw && NULL != ul_yw ) { ul_user = 1; RASTER_DEBUGF(4, "Using user-specified upper-left corner: %f, %f", *ul_xw, *ul_yw); /* set upper-left corner */ rt_raster_set_offsets(rast, *ul_xw, *ul_yw); extent.UpperLeftX = *ul_xw; extent.UpperLeftY = *ul_yw; } else if ( ((NULL != ul_xw) && (NULL == ul_yw)) || ((NULL == ul_xw) && (NULL != ul_yw)) ) { rterror("rt_raster_gdal_rasterize: Both X and Y upper-left corner values must be provided"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } /* alignment only considered if upper-left corner not provided */ if ( !ul_user && ( (NULL != grid_xw) || (NULL != grid_yw) ) ) { if ( ((NULL != grid_xw) && (NULL == grid_yw)) || ((NULL == grid_xw) && (NULL != grid_yw)) ) { rterror("rt_raster_gdal_rasterize: Both X and Y alignment values must be provided"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } RASTER_DEBUGF(4, "Aligning extent to user-specified grid: %f, %f", *grid_xw, *grid_yw); do { double _r[2] = {0}; double _w[2] = {0}; /* raster is already aligned */ if (FLT_EQ(*grid_xw, extent.UpperLeftX) && FLT_EQ(*grid_yw, extent.UpperLeftY)) { RASTER_DEBUG(3, "Skipping raster alignment as it is already aligned to grid"); break; } extent.UpperLeftX = rast->ipX; extent.UpperLeftY = rast->ipY; rt_raster_set_offsets(rast, *grid_xw, *grid_yw); /* process upper-left corner */ if (rt_raster_geopoint_to_cell( rast, extent.UpperLeftX, extent.UpperLeftY, &(_r[0]), &(_r[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not compute raster pixel for spatial coordinates"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } if (rt_raster_cell_to_geopoint( rast, _r[0], _r[1], &(_w[0]), &(_w[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } /* shift occurred */ if (FLT_NEQ(_w[0], extent.UpperLeftX)) { if (NULL == width) rast->width++; else if (NULL == scale_x) { double _c[2] = {0}; rt_raster_set_offsets(rast, extent.UpperLeftX, extent.UpperLeftY); /* get upper-right corner */ if (rt_raster_cell_to_geopoint( rast, rast->width, 0, &(_c[0]), &(_c[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } rast->scaleX = fabs((_c[0] - _w[0]) / ((double) rast->width)); } } if (FLT_NEQ(_w[1], extent.UpperLeftY)) { if (NULL == height) rast->height++; else if (NULL == scale_y) { double _c[2] = {0}; rt_raster_set_offsets(rast, extent.UpperLeftX, extent.UpperLeftY); /* get upper-right corner */ if (rt_raster_cell_to_geopoint( rast, 0, rast->height, &(_c[0]), &(_c[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } rast->scaleY = -1 * fabs((_c[1] - _w[1]) / ((double) rast->height)); } } rt_raster_set_offsets(rast, _w[0], _w[1]); } while (0); } /* after this point, rt_envelope extent is no longer used */ /* get key attributes from rast */ _dim[0] = rast->width; _dim[1] = rast->height; rt_raster_get_geotransform_matrix(rast, _gt); /* scale-x is negative or scale-y is positive */ if (( (NULL != scale_x) && (*scale_x < 0.) ) || ( (NULL != scale_y) && (*scale_y > 0) )) { double _w[2] = {0}; /* negative scale-x */ if ( (NULL != scale_x) && (*scale_x < 0.) ) { RASTER_DEBUG(3, "Processing negative scale-x"); if (rt_raster_cell_to_geopoint( rast, _dim[0], 0, &(_w[0]), &(_w[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } _gt[0] = _w[0]; _gt[1] = *scale_x; /* check for skew */ if (NULL != skew_x && FLT_NEQ(*skew_x, 0)) _gt[2] = *skew_x; } /* positive scale-y */ if ( (NULL != scale_y) && (*scale_y > 0) ) { RASTER_DEBUG(3, "Processing positive scale-y"); if (rt_raster_cell_to_geopoint( rast, 0, _dim[1], &(_w[0]), &(_w[1]), NULL ) != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not compute spatial coordinates for raster pixel"); rt_raster_destroy(rast); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } _gt[3] = _w[1]; _gt[5] = *scale_y; /* check for skew */ if (NULL != skew_y && FLT_NEQ(*skew_y, 0)) _gt[4] = *skew_y; } } rt_raster_destroy(rast); rast = NULL; RASTER_DEBUGF(3, "Applied geotransform: %f, %f, %f, %f, %f, %f", _gt[0], _gt[1], _gt[2], _gt[3], _gt[4], _gt[5]); RASTER_DEBUGF(3, "Raster dimensions (width x height): %d x %d", _dim[0], _dim[1]); /* load GDAL mem */ if (!rt_util_gdal_driver_registered("MEM")) GDALRegister_MEM(); _drv = GDALGetDriverByName("MEM"); if (NULL == _drv) { rterror("rt_raster_gdal_rasterize: Could not load the MEM GDAL driver"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } _ds = GDALCreate(_drv, "", _dim[0], _dim[1], 0, GDT_Byte, NULL); if (NULL == _ds) { rterror("rt_raster_gdal_rasterize: Could not create a GDALDataset to rasterize the geometry into"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ return NULL; } /* set geotransform */ cplerr = GDALSetGeoTransform(_ds, _gt); if (cplerr != CE_None) { rterror("rt_raster_gdal_rasterize: Could not set geotransform on GDALDataset"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ GDALClose(_ds); return NULL; } /* set SRS */ if (NULL != src_sr) { char *_srs = NULL; OSRExportToWkt(src_sr, &_srs); cplerr = GDALSetProjection(_ds, _srs); CPLFree(_srs); if (cplerr != CE_None) { rterror("rt_raster_gdal_rasterize: Could not set projection on GDALDataset"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ GDALClose(_ds); return NULL; } } /* set bands */ for (i = 0; i < arg->numbands; i++) { err = 0; do { /* add band */ cplerr = GDALAddBand(_ds, rt_util_pixtype_to_gdal_datatype(arg->pixtype[i]), NULL); if (cplerr != CE_None) { rterror("rt_raster_gdal_rasterize: Could not add band to GDALDataset"); err = 1; break; } _band = GDALGetRasterBand(_ds, i + 1); if (NULL == _band) { rterror("rt_raster_gdal_rasterize: Could not get band %d from GDALDataset", i + 1); err = 1; break; } /* nodata value */ if (arg->hasnodata[i]) { RASTER_DEBUGF(4, "Setting NODATA value of band %d to %f", i, arg->nodata[i]); cplerr = GDALSetRasterNoDataValue(_band, arg->nodata[i]); if (cplerr != CE_None) { rterror("rt_raster_gdal_rasterize: Could not set nodata value"); err = 1; break; } RASTER_DEBUGF(4, "NODATA value set to %f", GDALGetRasterNoDataValue(_band, NULL)); } /* initial value */ cplerr = GDALFillRaster(_band, arg->init[i], 0); if (cplerr != CE_None) { rterror("rt_raster_gdal_rasterize: Could not set initial value"); err = 1; break; } } while (0); if (err) { _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ GDALClose(_ds); return NULL; } } arg->bandlist = (int *) rtalloc(sizeof(int) * arg->numbands); for (i = 0; i < arg->numbands; i++) arg->bandlist[i] = i + 1; /* burn geometry */ cplerr = GDALRasterizeGeometries( _ds, arg->numbands, arg->bandlist, 1, &src_geom, NULL, NULL, arg->value, options, NULL, NULL ); if (cplerr != CE_None) { rterror("rt_raster_gdal_rasterize: Could not rasterize geometry"); _rti_rasterize_arg_destroy(arg); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ GDALClose(_ds); return NULL; } /* convert gdal dataset to raster */ GDALFlushCache(_ds); RASTER_DEBUG(3, "Converting GDAL dataset to raster"); rast = rt_raster_from_gdal_dataset(_ds); OGR_G_DestroyGeometry(src_geom); if (src_sr != NULL) OSRDestroySpatialReference(src_sr); /* OGRCleanupAll(); */ GDALClose(_ds); if (NULL == rast) { rterror("rt_raster_gdal_rasterize: Could not rasterize geometry"); return NULL; } /* width, height */ _width = rt_raster_get_width(rast); _height = rt_raster_get_height(rast); /* check each band for pixtype */ for (i = 0; i < arg->numbands; i++) { uint8_t *data = NULL; rt_band band = NULL; rt_band oldband = NULL; double val = 0; int nodata = 0; int hasnodata = 0; double nodataval = 0; int x = 0; int y = 0; oldband = rt_raster_get_band(rast, i); if (oldband == NULL) { rterror("rt_raster_gdal_rasterize: Could not get band %d of output raster", i); _rti_rasterize_arg_destroy(arg); rt_raster_destroy(rast); return NULL; } /* band is of user-specified type */ if (rt_band_get_pixtype(oldband) == arg->pixtype[i]) continue; /* hasnodata, nodataval */ hasnodata = rt_band_get_hasnodata_flag(oldband); if (hasnodata) rt_band_get_nodata(oldband, &nodataval); /* allocate data */ data = rtalloc(rt_pixtype_size(arg->pixtype[i]) * _width * _height); if (data == NULL) { rterror("rt_raster_gdal_rasterize: Could not allocate memory for band data"); _rti_rasterize_arg_destroy(arg); rt_raster_destroy(rast); return NULL; } memset(data, 0, rt_pixtype_size(arg->pixtype[i]) * _width * _height); /* create new band of correct type */ band = rt_band_new_inline( _width, _height, arg->pixtype[i], hasnodata, nodataval, data ); if (band == NULL) { rterror("rt_raster_gdal_rasterize: Could not create band"); rtdealloc(data); _rti_rasterize_arg_destroy(arg); rt_raster_destroy(rast); return NULL; } /* give ownership of data to band */ rt_band_set_ownsdata_flag(band, 1); /* copy pixel by pixel */ for (x = 0; x < _width; x++) { for (y = 0; y < _height; y++) { err = rt_band_get_pixel(oldband, x, y, &val, &nodata); if (err != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not get pixel value"); _rti_rasterize_arg_destroy(arg); rt_raster_destroy(rast); rt_band_destroy(band); return NULL; } if (nodata) val = nodataval; err = rt_band_set_pixel(band, x, y, val, NULL); if (err != ES_NONE) { rterror("rt_raster_gdal_rasterize: Could not set pixel value"); _rti_rasterize_arg_destroy(arg); rt_raster_destroy(rast); rt_band_destroy(band); return NULL; } } } /* replace band */ oldband = rt_raster_replace_band(rast, band, i); if (oldband == NULL) { rterror("rt_raster_gdal_rasterize: Could not replace band %d of output raster", i); _rti_rasterize_arg_destroy(arg); rt_raster_destroy(rast); rt_band_destroy(band); return NULL; } /* free oldband */ rt_band_destroy(oldband); } _rti_rasterize_arg_destroy(arg); RASTER_DEBUG(3, "done"); return rast; } /****************************************************************************** * rt_raster_intersects() ******************************************************************************/ static int rt_raster_intersects_algorithm( rt_raster rast1, rt_raster rast2, rt_band band1, rt_band band2, int hasnodata1, int hasnodata2, double nodata1, double nodata2 ) { int i; int byHeight = 1; uint32_t dimValue; uint32_t row; uint32_t rowoffset; uint32_t col; uint32_t coloffset; enum line_points {X1, Y1, X2, Y2}; enum point {pX, pY}; double line1[4] = {0.}; double line2[4] = {0.}; double P[2] = {0.}; double Qw[2] = {0.}; double Qr[2] = {0.}; double gt1[6] = {0.}; double gt2[6] = {0.}; double igt1[6] = {0}; double igt2[6] = {0}; double d; double val1; int noval1; int isnodata1; double val2; int noval2; int isnodata2; uint32_t adjacent[8] = {0}; double xscale; double yscale; uint16_t width1; uint16_t height1; uint16_t width2; uint16_t height2; width1 = rt_raster_get_width(rast1); height1 = rt_raster_get_height(rast1); width2 = rt_raster_get_width(rast2); height2 = rt_raster_get_height(rast2); /* sampling scale */ xscale = fmin(rt_raster_get_x_scale(rast1), rt_raster_get_x_scale(rast2)) / 10.; yscale = fmin(rt_raster_get_y_scale(rast1), rt_raster_get_y_scale(rast2)) / 10.; /* see if skew made rast2's rows are parallel to rast1's cols */ rt_raster_cell_to_geopoint( rast1, 0, 0, &(line1[X1]), &(line1[Y1]), gt1 ); rt_raster_cell_to_geopoint( rast1, 0, height1, &(line1[X2]), &(line1[Y2]), gt1 ); rt_raster_cell_to_geopoint( rast2, 0, 0, &(line2[X1]), &(line2[Y1]), gt2 ); rt_raster_cell_to_geopoint( rast2, width2, 0, &(line2[X2]), &(line2[Y2]), gt2 ); /* parallel vertically */ if (FLT_EQ(line1[X2] - line1[X1], 0.) && FLT_EQ(line2[X2] - line2[X1], 0.)) byHeight = 0; /* parallel */ else if (FLT_EQ(((line1[Y2] - line1[Y1]) / (line1[X2] - line1[X1])), ((line2[Y2] - line2[Y1]) / (line2[X2] - line2[X1])))) byHeight = 0; if (byHeight) dimValue = height2; else dimValue = width2; RASTER_DEBUGF(4, "byHeight: %d, dimValue: %d", byHeight, dimValue); /* 3 x 3 search */ for (coloffset = 0; coloffset < 3; coloffset++) { for (rowoffset = 0; rowoffset < 3; rowoffset++) { /* smaller raster */ for (col = coloffset; col <= width1; col += 3) { rt_raster_cell_to_geopoint( rast1, col, 0, &(line1[X1]), &(line1[Y1]), gt1 ); rt_raster_cell_to_geopoint( rast1, col, height1, &(line1[X2]), &(line1[Y2]), gt1 ); /* larger raster */ for (row = rowoffset; row <= dimValue; row += 3) { if (byHeight) { rt_raster_cell_to_geopoint( rast2, 0, row, &(line2[X1]), &(line2[Y1]), gt2 ); rt_raster_cell_to_geopoint( rast2, width2, row, &(line2[X2]), &(line2[Y2]), gt2 ); } else { rt_raster_cell_to_geopoint( rast2, row, 0, &(line2[X1]), &(line2[Y1]), gt2 ); rt_raster_cell_to_geopoint( rast2, row, height2, &(line2[X2]), &(line2[Y2]), gt2 ); } RASTER_DEBUGF(4, "(col, row) = (%d, %d)", col, row); RASTER_DEBUGF(4, "line1(x1, y1, x2, y2) = (%f, %f, %f, %f)", line1[X1], line1[Y1], line1[X2], line1[Y2]); RASTER_DEBUGF(4, "line2(x1, y1, x2, y2) = (%f, %f, %f, %f)", line2[X1], line2[Y1], line2[X2], line2[Y2]); /* intersection */ /* http://en.wikipedia.org/wiki/Line-line_intersection */ d = ((line1[X1] - line1[X2]) * (line2[Y1] - line2[Y2])) - ((line1[Y1] - line1[Y2]) * (line2[X1] - line2[X2])); /* no intersection */ if (FLT_EQ(d, 0.)) { continue; } P[pX] = (((line1[X1] * line1[Y2]) - (line1[Y1] * line1[X2])) * (line2[X1] - line2[X2])) - ((line1[X1] - line1[X2]) * ((line2[X1] * line2[Y2]) - (line2[Y1] * line2[X2]))); P[pX] = P[pX] / d; P[pY] = (((line1[X1] * line1[Y2]) - (line1[Y1] * line1[X2])) * (line2[Y1] - line2[Y2])) - ((line1[Y1] - line1[Y2]) * ((line2[X1] * line2[Y2]) - (line2[Y1] * line2[X2]))); P[pY] = P[pY] / d; RASTER_DEBUGF(4, "P(x, y) = (%f, %f)", P[pX], P[pY]); /* intersection within bounds */ if (( (FLT_EQ(P[pX], line1[X1]) || FLT_EQ(P[pX], line1[X2])) || (P[pX] > fmin(line1[X1], line1[X2]) && (P[pX] < fmax(line1[X1], line1[X2]))) ) && ( (FLT_EQ(P[pY], line1[Y1]) || FLT_EQ(P[pY], line1[Y2])) || (P[pY] > fmin(line1[Y1], line1[Y2]) && (P[pY] < fmax(line1[Y1], line1[Y2]))) ) && ( (FLT_EQ(P[pX], line2[X1]) || FLT_EQ(P[pX], line2[X2])) || (P[pX] > fmin(line2[X1], line2[X2]) && (P[pX] < fmax(line2[X1], line2[X2]))) ) && ( (FLT_EQ(P[pY], line2[Y1]) || FLT_EQ(P[pY], line2[Y2])) || (P[pY] > fmin(line2[Y1], line2[Y2]) && (P[pY] < fmax(line2[Y1], line2[Y2]))) )) { RASTER_DEBUG(4, "within bounds"); for (i = 0; i < 8; i++) adjacent[i] = 0; /* test points around intersection */ for (i = 0; i < 8; i++) { switch (i) { case 7: Qw[pX] = P[pX] - xscale; Qw[pY] = P[pY] + yscale; break; /* 270 degrees = 09:00 */ case 6: Qw[pX] = P[pX] - xscale; Qw[pY] = P[pY]; break; case 5: Qw[pX] = P[pX] - xscale; Qw[pY] = P[pY] - yscale; break; /* 180 degrees = 06:00 */ case 4: Qw[pX] = P[pX]; Qw[pY] = P[pY] - yscale; break; case 3: Qw[pX] = P[pX] + xscale; Qw[pY] = P[pY] - yscale; break; /* 90 degrees = 03:00 */ case 2: Qw[pX] = P[pX] + xscale; Qw[pY] = P[pY]; break; /* 45 degrees */ case 1: Qw[pX] = P[pX] + xscale; Qw[pY] = P[pY] + yscale; break; /* 0 degrees = 00:00 */ case 0: Qw[pX] = P[pX]; Qw[pY] = P[pY] + yscale; break; } /* unable to convert point to cell */ noval1 = 0; if (rt_raster_geopoint_to_cell( rast1, Qw[pX], Qw[pY], &(Qr[pX]), &(Qr[pY]), igt1 ) != ES_NONE) { noval1 = 1; } /* cell is outside bounds of grid */ else if ( (Qr[pX] < 0 || Qr[pX] > width1 || FLT_EQ(Qr[pX], width1)) || (Qr[pY] < 0 || Qr[pY] > height1 || FLT_EQ(Qr[pY], height1)) ) { noval1 = 1; } else if (hasnodata1 == FALSE) val1 = 1; /* unable to get value at cell */ else if (rt_band_get_pixel(band1, Qr[pX], Qr[pY], &val1, &isnodata1) != ES_NONE) noval1 = 1; /* unable to convert point to cell */ noval2 = 0; if (rt_raster_geopoint_to_cell( rast2, Qw[pX], Qw[pY], &(Qr[pX]), &(Qr[pY]), igt2 ) != ES_NONE) { noval2 = 1; } /* cell is outside bounds of grid */ else if ( (Qr[pX] < 0 || Qr[pX] > width2 || FLT_EQ(Qr[pX], width2)) || (Qr[pY] < 0 || Qr[pY] > height2 || FLT_EQ(Qr[pY], height2)) ) { noval2 = 1; } else if (hasnodata2 == FALSE) val2 = 1; /* unable to get value at cell */ else if (rt_band_get_pixel(band2, Qr[pX], Qr[pY], &val2, &isnodata2) != ES_NONE) noval2 = 1; if (!noval1) { RASTER_DEBUGF(4, "val1 = %f", val1); } if (!noval2) { RASTER_DEBUGF(4, "val2 = %f", val2); } /* pixels touch */ if (!noval1 && ( (hasnodata1 == FALSE) || !isnodata1 )) { adjacent[i]++; } if (!noval2 && ( (hasnodata2 == FALSE) || !isnodata2 )) { adjacent[i] += 3; } /* two pixel values not present */ if (noval1 || noval2) { RASTER_DEBUGF(4, "noval1 = %d, noval2 = %d", noval1, noval2); continue; } /* pixels valid, so intersect */ if ( ((hasnodata1 == FALSE) || !isnodata1) && ((hasnodata2 == FALSE) || !isnodata2) ) { RASTER_DEBUG(3, "The two rasters do intersect"); return 1; } } /* pixels touch */ for (i = 0; i < 4; i++) { RASTER_DEBUGF(4, "adjacent[%d] = %d, adjacent[%d] = %d" , i, adjacent[i], i + 4, adjacent[i + 4]); if (adjacent[i] == 0) continue; if (adjacent[i] + adjacent[i + 4] == 4) { RASTER_DEBUG(3, "The two rasters touch"); return 1; } } } else { RASTER_DEBUG(4, "outside of bounds"); } } } } } return 0; } /** * Return zero if error occurred in function. * Parameter intersects returns non-zero if two rasters intersect * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param intersects : non-zero value if the two rasters' bands intersects * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_intersects( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *intersects ) { int i; int j; int within = 0; LWGEOM *hull[2] = {NULL}; GEOSGeometry *ghull[2] = {NULL}; uint16_t width1; uint16_t height1; uint16_t width2; uint16_t height2; double area1; double area2; double pixarea1; double pixarea2; rt_raster rastS = NULL; rt_raster rastL = NULL; uint16_t *widthS = NULL; uint16_t *heightS = NULL; uint16_t *widthL = NULL; uint16_t *heightL = NULL; int nbandS; int nbandL; rt_band bandS = NULL; rt_band bandL = NULL; int hasnodataS = FALSE; int hasnodataL = FALSE; double nodataS = 0; double nodataL = 0; int isnodataS = 0; int isnodataL = 0; double gtS[6] = {0}; double igtL[6] = {0}; uint32_t row; uint32_t rowoffset; uint32_t col; uint32_t coloffset; enum line_points {X1, Y1, X2, Y2}; enum point {pX, pY}; double lineS[4]; double Qr[2]; double valS; double valL; RASTER_DEBUG(3, "Starting"); assert(NULL != rast1); assert(NULL != rast2); assert(NULL != intersects); if (nband1 < 0 && nband2 < 0) { nband1 = -1; nband2 = -1; } else { assert(nband1 >= 0 && nband1 < rt_raster_get_num_bands(rast1)); assert(nband2 >= 0 && nband2 < rt_raster_get_num_bands(rast2)); } /* same srid */ if (rt_raster_get_srid(rast1) != rt_raster_get_srid(rast2)) { rterror("rt_raster_intersects: The two rasters provided have different SRIDs"); *intersects = 0; return ES_ERROR; } /* raster extents need to intersect */ do { int rtn; initGEOS(lwnotice, lwgeom_geos_error); rtn = 1; for (i = 0; i < 2; i++) { if ((rt_raster_get_convex_hull(i < 1 ? rast1 : rast2, &(hull[i])) != ES_NONE) || NULL == hull[i]) { for (j = 0; j < i; j++) { GEOSGeom_destroy(ghull[j]); lwgeom_free(hull[j]); } rtn = 0; break; } ghull[i] = (GEOSGeometry *) LWGEOM2GEOS(hull[i]); if (NULL == ghull[i]) { for (j = 0; j < i; j++) { GEOSGeom_destroy(ghull[j]); lwgeom_free(hull[j]); } lwgeom_free(hull[i]); rtn = 0; break; } } if (!rtn) break; /* test to see if raster within the other */ within = 0; if (GEOSWithin(ghull[0], ghull[1]) == 1) within = -1; else if (GEOSWithin(ghull[1], ghull[0]) == 1) within = 1; if (within != 0) rtn = 1; else rtn = GEOSIntersects(ghull[0], ghull[1]); for (i = 0; i < 2; i++) { GEOSGeom_destroy(ghull[i]); lwgeom_free(hull[i]); } if (rtn != 2) { RASTER_DEBUGF(4, "convex hulls of rasters do %sintersect", rtn != 1 ? "NOT " : ""); if (rtn != 1) { *intersects = 0; return ES_NONE; } /* band isn't specified */ else if (nband1 < 0) { *intersects = 1; return ES_NONE; } } else { RASTER_DEBUG(4, "GEOSIntersects() returned a 2!!!!"); } } while (0); /* smaller raster by area or width */ width1 = rt_raster_get_width(rast1); height1 = rt_raster_get_height(rast1); width2 = rt_raster_get_width(rast2); height2 = rt_raster_get_height(rast2); pixarea1 = fabs(rt_raster_get_x_scale(rast1) * rt_raster_get_y_scale(rast1)); pixarea2 = fabs(rt_raster_get_x_scale(rast2) * rt_raster_get_y_scale(rast2)); area1 = fabs(width1 * height1 * pixarea1); area2 = fabs(width2 * height2 * pixarea2); RASTER_DEBUGF(4, "pixarea1, pixarea2, area1, area2 = %f, %f, %f, %f", pixarea1, pixarea2, area1, area2); if ( (within <= 0) || (area1 < area2) || FLT_EQ(area1, area2) || (area1 < pixarea2) || /* area of rast1 smaller than pixel area of rast2 */ FLT_EQ(area1, pixarea2) ) { rastS = rast1; nbandS = nband1; widthS = &width1; heightS = &height1; rastL = rast2; nbandL = nband2; widthL = &width2; heightL = &height2; } else { rastS = rast2; nbandS = nband2; widthS = &width2; heightS = &height2; rastL = rast1; nbandL = nband1; widthL = &width1; heightL = &height1; } /* no band to use, set band to zero */ if (nband1 < 0) { nbandS = 0; nbandL = 0; } RASTER_DEBUGF(4, "rast1 @ %p", rast1); RASTER_DEBUGF(4, "rast2 @ %p", rast2); RASTER_DEBUGF(4, "rastS @ %p", rastS); RASTER_DEBUGF(4, "rastL @ %p", rastL); /* load band of smaller raster */ bandS = rt_raster_get_band(rastS, nbandS); if (NULL == bandS) { rterror("rt_raster_intersects: Could not get band %d of the first raster", nbandS); *intersects = 0; return ES_ERROR; } hasnodataS = rt_band_get_hasnodata_flag(bandS); if (hasnodataS != FALSE) rt_band_get_nodata(bandS, &nodataS); /* load band of larger raster */ bandL = rt_raster_get_band(rastL, nbandL); if (NULL == bandL) { rterror("rt_raster_intersects: Could not get band %d of the first raster", nbandL); *intersects = 0; return ES_ERROR; } hasnodataL = rt_band_get_hasnodata_flag(bandL); if (hasnodataL != FALSE) rt_band_get_nodata(bandL, &nodataL); /* no band to use, ignore nodata */ if (nband1 < 0) { hasnodataS = FALSE; hasnodataL = FALSE; } /* hasnodata(S|L) = TRUE and one of the two bands is isnodata */ if ( (hasnodataS && rt_band_get_isnodata_flag(bandS)) || (hasnodataL && rt_band_get_isnodata_flag(bandL)) ) { RASTER_DEBUG(3, "One of the two raster bands is NODATA. The two rasters do not intersect"); *intersects = 0; return ES_NONE; } /* special case where a raster can fit inside another raster's pixel */ if (within != 0 && ((pixarea1 > area2) || (pixarea2 > area1))) { RASTER_DEBUG(4, "Using special case of raster fitting into another raster's pixel"); /* 3 x 3 search */ for (coloffset = 0; coloffset < 3; coloffset++) { for (rowoffset = 0; rowoffset < 3; rowoffset++) { for (col = coloffset; col < *widthS; col += 3) { for (row = rowoffset; row < *heightS; row += 3) { if (hasnodataS == FALSE) valS = 1; else if (rt_band_get_pixel(bandS, col, row, &valS, &isnodataS) != ES_NONE) continue; if ((hasnodataS == FALSE) || !isnodataS) { rt_raster_cell_to_geopoint( rastS, col, row, &(lineS[X1]), &(lineS[Y1]), gtS ); if (rt_raster_geopoint_to_cell( rastL, lineS[X1], lineS[Y1], &(Qr[pX]), &(Qr[pY]), igtL ) != ES_NONE) { continue; } if ( (Qr[pX] < 0 || Qr[pX] > *widthL || FLT_EQ(Qr[pX], *widthL)) || (Qr[pY] < 0 || Qr[pY] > *heightL || FLT_EQ(Qr[pY], *heightL)) ) { continue; } if (hasnodataS == FALSE) valL = 1; else if (rt_band_get_pixel(bandL, Qr[pX], Qr[pY], &valL, &isnodataL) != ES_NONE) continue; if ((hasnodataL == FALSE) || !isnodataL) { RASTER_DEBUG(3, "The two rasters do intersect"); *intersects = 1; return ES_NONE; } } } } } } RASTER_DEBUG(4, "Smaller raster not in the other raster's pixel. Continuing"); } RASTER_DEBUG(4, "Testing smaller raster vs larger raster"); *intersects = rt_raster_intersects_algorithm( rastS, rastL, bandS, bandL, hasnodataS, hasnodataL, nodataS, nodataL ); if (*intersects) return ES_NONE; RASTER_DEBUG(4, "Testing larger raster vs smaller raster"); *intersects = rt_raster_intersects_algorithm( rastL, rastS, bandL, bandS, hasnodataL, hasnodataS, nodataL, nodataS ); if (*intersects) return ES_NONE; RASTER_DEBUG(3, "The two rasters do not intersect"); *intersects = 0; return ES_NONE; } /****************************************************************************** * GEOS-based spatial relationship tests ******************************************************************************/ static rt_errorstate rt_raster_geos_spatial_relationship( rt_raster rast1, int nband1, rt_raster rast2, int nband2, rt_geos_spatial_test testtype, int *testresult ) { LWMPOLY *surface1 = NULL; LWMPOLY *surface2 = NULL; GEOSGeometry *geom1 = NULL; GEOSGeometry *geom2 = NULL; int rtn = 0; int flag = 0; RASTER_DEBUG(3, "Starting"); assert(NULL != rast1); assert(NULL != rast2); assert(NULL != testresult); if (nband1 < 0 && nband2 < 0) { nband1 = -1; nband2 = -1; } else { assert(nband1 >= 0 && nband1 < rt_raster_get_num_bands(rast1)); assert(nband2 >= 0 && nband2 < rt_raster_get_num_bands(rast2)); } /* initialize to zero, false result of spatial relationship test */ *testresult = 0; /* same srid */ if (rt_raster_get_srid(rast1) != rt_raster_get_srid(rast2)) { rterror("rt_raster_geos_spatial_relationship: The two rasters provided have different SRIDs"); return ES_ERROR; } initGEOS(lwnotice, lwgeom_geos_error); /* get LWMPOLY of each band */ if (rt_raster_surface(rast1, nband1, &surface1) != ES_NONE) { rterror("rt_raster_geos_spatial_relationship: Could not get surface of the specified band from the first raster"); return ES_ERROR; } if (rt_raster_surface(rast2, nband2, &surface2) != ES_NONE) { rterror("rt_raster_geos_spatial_relationship: Could not get surface of the specified band from the second raster"); lwmpoly_free(surface1); return ES_ERROR; } /* either surface is NULL, spatial relationship test is false */ if (surface1 == NULL || surface2 == NULL) { if (surface1 != NULL) lwmpoly_free(surface1); if (surface2 != NULL) lwmpoly_free(surface2); return ES_NONE; } /* convert LWMPOLY to GEOSGeometry */ geom1 = LWGEOM2GEOS(lwmpoly_as_lwgeom(surface1)); lwmpoly_free(surface1); if (geom1 == NULL) { rterror("rt_raster_geos_spatial_relationship: Could not convert surface of the specified band from the first raster to a GEOSGeometry"); lwmpoly_free(surface2); return ES_ERROR; } geom2 = LWGEOM2GEOS(lwmpoly_as_lwgeom(surface2)); lwmpoly_free(surface2); if (geom2 == NULL) { rterror("rt_raster_geos_spatial_relationship: Could not convert surface of the specified band from the second raster to a GEOSGeometry"); return ES_ERROR; } flag = 0; switch (testtype) { case GSR_OVERLAPS: rtn = GEOSOverlaps(geom1, geom2); break; case GSR_TOUCHES: rtn = GEOSTouches(geom1, geom2); break; case GSR_CONTAINS: rtn = GEOSContains(geom1, geom2); break; case GSR_CONTAINSPROPERLY: rtn = GEOSRelatePattern(geom1, geom2, "T**FF*FF*"); break; case GSR_COVERS: rtn = GEOSRelatePattern(geom1, geom2, "******FF*"); break; case GSR_COVEREDBY: rtn = GEOSRelatePattern(geom1, geom2, "**F**F***"); break; default: rterror("rt_raster_geos_spatial_relationship: Unknown or unsupported GEOS spatial relationship test"); flag = -1; break; } GEOSGeom_destroy(geom1); GEOSGeom_destroy(geom2); /* something happened in the spatial relationship test */ if (rtn == 2) { rterror("rt_raster_geos_spatial_relationship: Could not run the appropriate GEOS spatial relationship test"); flag = ES_ERROR; } /* spatial relationship test ran fine */ else if (flag >= 0) { if (rtn != 0) *testresult = 1; flag = ES_NONE; } /* flag < 0 for when testtype is unknown */ else flag = ES_ERROR; return flag; } /** * Return ES_ERROR if error occurred in function. * Parameter overlaps returns non-zero if two rasters overlap * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param overlaps : non-zero value if the two rasters' bands overlaps * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_overlaps( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *overlaps ) { RASTER_DEBUG(3, "Starting"); return rt_raster_geos_spatial_relationship( rast1, nband1, rast2, nband2, GSR_OVERLAPS, overlaps ); } /** * Return ES_ERROR if error occurred in function. * Parameter touches returns non-zero if two rasters touch * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param touches : non-zero value if the two rasters' bands touch * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_touches( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *touches ) { RASTER_DEBUG(3, "Starting"); return rt_raster_geos_spatial_relationship( rast1, nband1, rast2, nband2, GSR_TOUCHES, touches ); } /** * Return ES_ERROR if error occurred in function. * Parameter contains returns non-zero if rast1 contains rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param contains : non-zero value if rast1 contains rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_contains( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *contains ) { RASTER_DEBUG(3, "Starting"); return rt_raster_geos_spatial_relationship( rast1, nband1, rast2, nband2, GSR_CONTAINS, contains ); } /** * Return ES_ERROR if error occurred in function. * Parameter contains returns non-zero if rast1 contains properly rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param contains : non-zero value if rast1 contains properly rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_contains_properly( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *contains ) { RASTER_DEBUG(3, "Starting"); return rt_raster_geos_spatial_relationship( rast1, nband1, rast2, nband2, GSR_CONTAINSPROPERLY, contains ); } /** * Return ES_ERROR if error occurred in function. * Parameter covers returns non-zero if rast1 covers rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param covers : non-zero value if rast1 covers rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_covers( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *covers ) { RASTER_DEBUG(3, "Starting"); return rt_raster_geos_spatial_relationship( rast1, nband1, rast2, nband2, GSR_COVERS, covers ); } /** * Return ES_ERROR if error occurred in function. * Parameter coveredby returns non-zero if rast1 is covered by rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param coveredby : non-zero value if rast1 is covered by rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_coveredby( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *coveredby ) { RASTER_DEBUG(3, "Starting"); return rt_raster_geos_spatial_relationship( rast1, nband1, rast2, nband2, GSR_COVEREDBY, coveredby ); } /** * Return ES_ERROR if error occurred in function. * Parameter dwithin returns non-zero if rast1 is within the specified * distance of rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param dwithin : non-zero value if rast1 is within the specified distance * of rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_within_distance( rt_raster rast1, int nband1, rt_raster rast2, int nband2, double distance, int *dwithin ) { LWMPOLY *surface = NULL; LWGEOM *surface1 = NULL; LWGEOM *surface2 = NULL; double mindist = 0; RASTER_DEBUG(3, "Starting"); assert(NULL != rast1); assert(NULL != rast2); assert(NULL != dwithin); if (nband1 < 0 && nband2 < 0) { nband1 = -1; nband2 = -1; } else { assert(nband1 >= 0 && nband1 < rt_raster_get_num_bands(rast1)); assert(nband2 >= 0 && nband2 < rt_raster_get_num_bands(rast2)); } /* initialize to zero, false result */ *dwithin = 0; /* same srid */ if (rt_raster_get_srid(rast1) != rt_raster_get_srid(rast2)) { rterror("rt_raster_distance_within: The two rasters provided have different SRIDs"); return ES_ERROR; } /* distance cannot be less than zero */ if (distance < 0) { rterror("rt_raster_distance_within: Distance cannot be less than zero"); return ES_ERROR; } /* get LWMPOLY of each band */ if (rt_raster_surface(rast1, nband1, &surface) != ES_NONE) { rterror("rt_raster_distance_within: Could not get surface of the specified band from the first raster"); return ES_ERROR; } surface1 = lwmpoly_as_lwgeom(surface); if (rt_raster_surface(rast2, nband2, &surface) != ES_NONE) { rterror("rt_raster_distance_within: Could not get surface of the specified band from the second raster"); lwgeom_free(surface1); return ES_ERROR; } surface2 = lwmpoly_as_lwgeom(surface); /* either surface is NULL, test is false */ if (surface1 == NULL || surface2 == NULL) { if (surface1 != NULL) lwgeom_free(surface1); if (surface2 != NULL) lwgeom_free(surface2); return ES_NONE; } /* get the min distance between the two surfaces */ mindist = lwgeom_mindistance2d_tolerance(surface1, surface2, distance); lwgeom_free(surface1); lwgeom_free(surface2); /* if distance >= mindist, true */ if (FLT_EQ(mindist, distance) || distance > mindist) *dwithin = 1; RASTER_DEBUGF(3, "(mindist, distance) = (%f, %f, %d)", mindist, distance, *dwithin); return ES_NONE; } /** * Return ES_ERROR if error occurred in function. * Parameter dfwithin returns non-zero if rast1 is fully within the specified * distance of rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param dfwithin : non-zero value if rast1 is fully within the specified * distance of rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_fully_within_distance( rt_raster rast1, int nband1, rt_raster rast2, int nband2, double distance, int *dfwithin ) { LWMPOLY *surface = NULL; LWGEOM *surface1 = NULL; LWGEOM *surface2 = NULL; double maxdist = 0; RASTER_DEBUG(3, "Starting"); assert(NULL != rast1); assert(NULL != rast2); assert(NULL != dfwithin); if (nband1 < 0 && nband2 < 0) { nband1 = -1; nband2 = -1; } else { assert(nband1 >= 0 && nband1 < rt_raster_get_num_bands(rast1)); assert(nband2 >= 0 && nband2 < rt_raster_get_num_bands(rast2)); } /* initialize to zero, false result */ *dfwithin = 0; /* same srid */ if (rt_raster_get_srid(rast1) != rt_raster_get_srid(rast2)) { rterror("rt_raster_fully_within_distance: The two rasters provided have different SRIDs"); return ES_ERROR; } /* distance cannot be less than zero */ if (distance < 0) { rterror("rt_raster_fully_within_distance: Distance cannot be less than zero"); return ES_ERROR; } /* get LWMPOLY of each band */ if (rt_raster_surface(rast1, nband1, &surface) != ES_NONE) { rterror("rt_raster_fully_within_distance: Could not get surface of the specified band from the first raster"); return ES_ERROR; } surface1 = lwmpoly_as_lwgeom(surface); if (rt_raster_surface(rast2, nband2, &surface) != ES_NONE) { rterror("rt_raster_fully_within_distance: Could not get surface of the specified band from the second raster"); lwgeom_free(surface1); return ES_ERROR; } surface2 = lwmpoly_as_lwgeom(surface); /* either surface is NULL, test is false */ if (surface1 == NULL || surface2 == NULL) { if (surface1 != NULL) lwgeom_free(surface1); if (surface2 != NULL) lwgeom_free(surface2); return ES_NONE; } /* get the maximum distance between the two surfaces */ maxdist = lwgeom_maxdistance2d_tolerance(surface1, surface2, distance); lwgeom_free(surface1); lwgeom_free(surface2); /* if distance >= maxdist, true */ if (FLT_EQ(maxdist, distance) || distance > maxdist) *dfwithin = 1; RASTER_DEBUGF(3, "(maxdist, distance, dfwithin) = (%f, %f, %d)", maxdist, distance, *dfwithin); return ES_NONE; } /* * Return ES_ERROR if error occurred in function. * Paramter aligned returns non-zero if two rasters are aligned * * @param rast1 : the first raster for alignment test * @param rast2 : the second raster for alignment test * @param *aligned : non-zero value if the two rasters are aligned * @param *reason : reason why rasters are not aligned * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_same_alignment( rt_raster rast1, rt_raster rast2, int *aligned, char **reason ) { double xr; double yr; double xw; double yw; int err = 0; assert(NULL != rast1); assert(NULL != rast2); assert(NULL != aligned); err = 0; /* same srid */ if (rt_raster_get_srid(rast1) != rt_raster_get_srid(rast2)) { if (reason != NULL) *reason = "The rasters have different SRIDs"; err = 1; } /* scales must match */ else if (FLT_NEQ(fabs(rast1->scaleX), fabs(rast2->scaleX))) { if (reason != NULL) *reason = "The rasters have different scales on the X axis"; err = 1; } else if (FLT_NEQ(fabs(rast1->scaleY), fabs(rast2->scaleY))) { if (reason != NULL) *reason = "The rasters have different scales on the Y axis"; err = 1; } /* skews must match */ else if (FLT_NEQ(rast1->skewX, rast2->skewX)) { if (reason != NULL) *reason = "The rasters have different skews on the X axis"; err = 1; } else if (FLT_NEQ(rast1->skewY, rast2->skewY)) { if (reason != NULL) *reason = "The rasters have different skews on the Y axis"; err = 1; } if (err) { *aligned = 0; return ES_NONE; } /* raster coordinates in context of second raster of first raster's upper-left corner */ if (rt_raster_geopoint_to_cell( rast2, rast1->ipX, rast1->ipY, &xr, &yr, NULL ) != ES_NONE) { rterror("rt_raster_same_alignment: Could not get raster coordinates of second raster from first raster's spatial coordinates"); *aligned = 0; return ES_ERROR; } /* spatial coordinates of raster coordinates from above */ if (rt_raster_cell_to_geopoint( rast2, xr, yr, &xw, &yw, NULL ) != ES_NONE) { rterror("rt_raster_same_alignment: Could not get spatial coordinates of second raster from raster coordinates"); *aligned = 0; return ES_ERROR; } RASTER_DEBUGF(4, "rast1(ipX, ipxY) = (%f, %f)", rast1->ipX, rast1->ipY); RASTER_DEBUGF(4, "rast2(xr, yr) = (%f, %f)", xr, yr); RASTER_DEBUGF(4, "rast2(xw, yw) = (%f, %f)", xw, yw); /* spatial coordinates are identical to that of first raster's upper-left corner */ if (FLT_EQ(xw, rast1->ipX) && FLT_EQ(yw, rast1->ipY)) { if (reason != NULL) *reason = "The rasters are aligned"; *aligned = 1; return ES_NONE; } /* no alignment */ if (reason != NULL) *reason = "The rasters (pixel corner coordinates) are not aligned"; *aligned = 0; return ES_NONE; } /* * Return raster of computed extent specified extenttype applied * on two input rasters. The raster returned should be freed by * the caller * * @param rast1 : the first raster * @param rast2 : the second raster * @param extenttype : type of extent for the output raster * @param *rtnraster : raster of computed extent * @param *offset : 4-element array indicating the X,Y offsets * for each raster. 0,1 for rast1 X,Y. 2,3 for rast2 X,Y. * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_from_two_rasters( rt_raster rast1, rt_raster rast2, rt_extenttype extenttype, rt_raster *rtnraster, double *offset ) { int i; rt_raster _rast[2] = {rast1, rast2}; double _offset[2][4] = {{0.}}; uint16_t _dim[2][2] = {{0}}; rt_raster raster = NULL; int aligned = 0; int dim[2] = {0}; double gt[6] = {0.}; assert(NULL != rast1); assert(NULL != rast2); assert(NULL != rtnraster); /* set rtnraster to NULL */ *rtnraster = NULL; /* rasters must be aligned */ if (rt_raster_same_alignment(rast1, rast2, &aligned, NULL) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not test for alignment on the two rasters"); return ES_ERROR; } if (!aligned) { rterror("rt_raster_from_two_rasters: The two rasters provided do not have the same alignment"); return ES_ERROR; } /* dimensions */ _dim[0][0] = rast1->width; _dim[0][1] = rast1->height; _dim[1][0] = rast2->width; _dim[1][1] = rast2->height; /* get raster offsets */ if (rt_raster_geopoint_to_cell( _rast[1], _rast[0]->ipX, _rast[0]->ipY, &(_offset[1][0]), &(_offset[1][1]), NULL ) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not compute offsets of the second raster relative to the first raster"); return ES_ERROR; } _offset[1][0] = -1 * _offset[1][0]; _offset[1][1] = -1 * _offset[1][1]; _offset[1][2] = _offset[1][0] + _dim[1][0] - 1; _offset[1][3] = _offset[1][1] + _dim[1][1] - 1; i = -1; switch (extenttype) { case ET_FIRST: i = 0; _offset[0][0] = 0.; _offset[0][1] = 0.; case ET_LAST: case ET_SECOND: if (i < 0) { i = 1; _offset[0][0] = -1 * _offset[1][0]; _offset[0][1] = -1 * _offset[1][1]; _offset[1][0] = 0.; _offset[1][1] = 0.; } dim[0] = _dim[i][0]; dim[1] = _dim[i][1]; raster = rt_raster_new( dim[0], dim[1] ); if (raster == NULL) { rterror("rt_raster_from_two_rasters: Could not create output raster"); return ES_ERROR; } rt_raster_set_srid(raster, _rast[i]->srid); rt_raster_get_geotransform_matrix(_rast[i], gt); rt_raster_set_geotransform_matrix(raster, gt); break; case ET_UNION: { double off[4] = {0}; rt_raster_get_geotransform_matrix(_rast[0], gt); RASTER_DEBUGF(4, "gt = (%f, %f, %f, %f, %f, %f)", gt[0], gt[1], gt[2], gt[3], gt[4], gt[5] ); /* new raster upper left offset */ off[0] = 0; if (_offset[1][0] < 0) off[0] = _offset[1][0]; off[1] = 0; if (_offset[1][1] < 0) off[1] = _offset[1][1]; /* new raster lower right offset */ off[2] = _dim[0][0] - 1; if ((int) _offset[1][2] >= _dim[0][0]) off[2] = _offset[1][2]; off[3] = _dim[0][1] - 1; if ((int) _offset[1][3] >= _dim[0][1]) off[3] = _offset[1][3]; /* upper left corner */ if (rt_raster_cell_to_geopoint( _rast[0], off[0], off[1], &(gt[0]), &(gt[3]), NULL ) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not get spatial coordinates of upper-left pixel of output raster"); return ES_ERROR; } dim[0] = off[2] - off[0] + 1; dim[1] = off[3] - off[1] + 1; RASTER_DEBUGF(4, "off = (%f, %f, %f, %f)", off[0], off[1], off[2], off[3] ); RASTER_DEBUGF(4, "dim = (%d, %d)", dim[0], dim[1]); raster = rt_raster_new( dim[0], dim[1] ); if (raster == NULL) { rterror("rt_raster_from_two_rasters: Could not create output raster"); return ES_ERROR; } rt_raster_set_srid(raster, _rast[0]->srid); rt_raster_set_geotransform_matrix(raster, gt); RASTER_DEBUGF(4, "gt = (%f, %f, %f, %f, %f, %f)", gt[0], gt[1], gt[2], gt[3], gt[4], gt[5] ); /* get offsets */ if (rt_raster_geopoint_to_cell( _rast[0], gt[0], gt[3], &(_offset[0][0]), &(_offset[0][1]), NULL ) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not get offsets of the FIRST raster relative to the output raster"); rt_raster_destroy(raster); return ES_ERROR; } _offset[0][0] *= -1; _offset[0][1] *= -1; if (rt_raster_geopoint_to_cell( _rast[1], gt[0], gt[3], &(_offset[1][0]), &(_offset[1][1]), NULL ) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not get offsets of the SECOND raster relative to the output raster"); rt_raster_destroy(raster); return ES_ERROR; } _offset[1][0] *= -1; _offset[1][1] *= -1; break; } case ET_INTERSECTION: { double off[4] = {0}; /* no intersection */ if ( (_offset[1][2] < 0 || _offset[1][0] > (_dim[0][0] - 1)) || (_offset[1][3] < 0 || _offset[1][1] > (_dim[0][1] - 1)) ) { RASTER_DEBUG(3, "The two rasters provided have no intersection. Returning no band raster"); raster = rt_raster_new(0, 0); if (raster == NULL) { rterror("rt_raster_from_two_rasters: Could not create output raster"); return ES_ERROR; } rt_raster_set_srid(raster, _rast[0]->srid); rt_raster_set_scale(raster, 0, 0); /* set offsets if provided */ if (NULL != offset) { for (i = 0; i < 4; i++) offset[i] = _offset[i / 2][i % 2]; } *rtnraster = raster; return ES_NONE; } if (_offset[1][0] > 0) off[0] = _offset[1][0]; if (_offset[1][1] > 0) off[1] = _offset[1][1]; off[2] = _dim[0][0] - 1; if (_offset[1][2] < _dim[0][0]) off[2] = _offset[1][2]; off[3] = _dim[0][1] - 1; if (_offset[1][3] < _dim[0][1]) off[3] = _offset[1][3]; dim[0] = off[2] - off[0] + 1; dim[1] = off[3] - off[1] + 1; raster = rt_raster_new( dim[0], dim[1] ); if (raster == NULL) { rterror("rt_raster_from_two_rasters: Could not create output raster"); return ES_ERROR; } rt_raster_set_srid(raster, _rast[0]->srid); /* get upper-left corner */ rt_raster_get_geotransform_matrix(_rast[0], gt); if (rt_raster_cell_to_geopoint( _rast[0], off[0], off[1], &(gt[0]), &(gt[3]), gt ) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not get spatial coordinates of upper-left pixel of output raster"); rt_raster_destroy(raster); return ES_ERROR; } rt_raster_set_geotransform_matrix(raster, gt); /* get offsets */ if (rt_raster_geopoint_to_cell( _rast[0], gt[0], gt[3], &(_offset[0][0]), &(_offset[0][1]), NULL ) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not get pixel coordinates to compute the offsets of the FIRST raster relative to the output raster"); rt_raster_destroy(raster); return ES_ERROR; } _offset[0][0] *= -1; _offset[0][1] *= -1; if (rt_raster_geopoint_to_cell( _rast[1], gt[0], gt[3], &(_offset[1][0]), &(_offset[1][1]), NULL ) != ES_NONE) { rterror("rt_raster_from_two_rasters: Could not get pixel coordinates to compute the offsets of the SECOND raster relative to the output raster"); rt_raster_destroy(raster); return ES_ERROR; } _offset[1][0] *= -1; _offset[1][1] *= -1; break; } case ET_CUSTOM: rterror("rt_raster_from_two_rasters: Extent type ET_CUSTOM is not supported by this function"); break; } /* set offsets if provided */ if (NULL != offset) { for (i = 0; i < 4; i++) offset[i] = _offset[i / 2][i % 2]; } *rtnraster = raster; return ES_NONE; } /** * Get a raster pixel as a polygon. * * The pixel shape is a 4 vertices (5 to be closed) single * ring polygon bearing the raster's rotation * and using projection coordinates * * @param raster : the raster to get pixel from * @param x : the column number * @param y : the row number * * @return the pixel polygon, or NULL on error. * */ LWPOLY* rt_raster_pixel_as_polygon(rt_raster rast, int x, int y) { double scale_x, scale_y; double skew_x, skew_y; double ul_x, ul_y; int srid; POINTARRAY **points; POINT4D p, p0; LWPOLY *poly; assert(rast != NULL); scale_x = rt_raster_get_x_scale(rast); scale_y = rt_raster_get_y_scale(rast); skew_x = rt_raster_get_x_skew(rast); skew_y = rt_raster_get_y_skew(rast); ul_x = rt_raster_get_x_offset(rast); ul_y = rt_raster_get_y_offset(rast); srid = rt_raster_get_srid(rast); points = rtalloc(sizeof(POINTARRAY *)*1); points[0] = ptarray_construct(0, 0, 5); p0.x = scale_x * x + skew_x * y + ul_x; p0.y = scale_y * y + skew_y * x + ul_y; ptarray_set_point4d(points[0], 0, &p0); p.x = p0.x + scale_x; p.y = p0.y + skew_y; ptarray_set_point4d(points[0], 1, &p); p.x = p0.x + scale_x + skew_x; p.y = p0.y + scale_y + skew_y; ptarray_set_point4d(points[0], 2, &p); p.x = p0.x + skew_x; p.y = p0.y + scale_y; ptarray_set_point4d(points[0], 3, &p); /* close it */ ptarray_set_point4d(points[0], 4, &p0); poly = lwpoly_construct(srid, NULL, 1, points); return poly; } /** * Get a raster as a surface (multipolygon). If a band is specified, * those pixels with value (not NODATA) contribute to the area * of the output multipolygon. * * @param raster : the raster to convert to a multipolygon * @param nband : the 0-based band of raster rast to use * if value is less than zero, bands are ignored. * @param *surface : raster as a surface (multipolygon). * if all pixels are NODATA, NULL is set * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_raster_surface(rt_raster raster, int nband, LWMPOLY **surface) { rt_band band = NULL; LWGEOM *mpoly = NULL; LWGEOM *tmp = NULL; LWGEOM *clone = NULL; rt_geomval gv = NULL; int gvcount = 0; GEOSGeometry *gc = NULL; GEOSGeometry *gunion = NULL; GEOSGeometry **geoms = NULL; int geomscount = 0; int i = 0; assert(surface != NULL); /* init *surface to NULL */ *surface = NULL; /* raster is empty, surface = NULL */ if (rt_raster_is_empty(raster)) return ES_NONE; /* if nband < 0, return the convex hull as a multipolygon */ if (nband < 0) { /* lwgeom_as_multi() only does a shallow clone internally so input and output geometries may share memory hence the deep clone of the output geometry for returning is the only way to guarentee the memory isn't shared */ if (rt_raster_get_convex_hull(raster, &tmp) != ES_NONE) { rterror("rt_raster_surface: Could not get convex hull of raster"); return ES_ERROR; } mpoly = lwgeom_as_multi(tmp); clone = lwgeom_clone_deep(mpoly); lwgeom_free(tmp); lwgeom_free(mpoly); *surface = lwgeom_as_lwmpoly(clone); return ES_NONE; } /* check that nband is valid */ else if (nband >= rt_raster_get_num_bands(raster)) { rterror("rt_raster_surface: The band index %d is invalid", nband); return ES_ERROR; } /* get band */ band = rt_raster_get_band(raster, nband); if (band == NULL) { rterror("rt_raster_surface: Error getting band %d from raster", nband); return ES_ERROR; } /* band does not have a NODATA flag, return convex hull */ if (!rt_band_get_hasnodata_flag(band)) { /* lwgeom_as_multi() only does a shallow clone internally so input and output geometries may share memory hence the deep clone of the output geometry for returning is the only way to guarentee the memory isn't shared */ if (rt_raster_get_convex_hull(raster, &tmp) != ES_NONE) { rterror("rt_raster_surface: Could not get convex hull of raster"); return ES_ERROR; } mpoly = lwgeom_as_multi(tmp); clone = lwgeom_clone_deep(mpoly); lwgeom_free(tmp); lwgeom_free(mpoly); *surface = lwgeom_as_lwmpoly(clone); return ES_NONE; } /* band is NODATA, return NULL */ else if (rt_band_get_isnodata_flag(band)) { RASTER_DEBUG(3, "Band is NODATA. Returning NULL"); return ES_NONE; } /* initialize GEOS */ initGEOS(lwnotice, lwgeom_geos_error); /* use gdal polygonize */ gv = rt_raster_gdal_polygonize(raster, nband, 1, &gvcount); /* no polygons returned */ if (gvcount < 1) { RASTER_DEBUG(3, "All pixels of band are NODATA. Returning NULL"); if (gv != NULL) rtdealloc(gv); return ES_NONE; } /* more than 1 polygon */ else if (gvcount > 1) { /* convert LWPOLY to GEOSGeometry */ geomscount = gvcount; geoms = rtalloc(sizeof(GEOSGeometry *) * geomscount); if (geoms == NULL) { rterror("rt_raster_surface: Could not allocate memory for pixel polygons as GEOSGeometry"); for (i = 0; i < gvcount; i++) lwpoly_free(gv[i].geom); rtdealloc(gv); return ES_ERROR; } for (i = 0; i < gvcount; i++) { #if POSTGIS_DEBUG_LEVEL > 3 { char *wkt = lwgeom_to_wkt(lwpoly_as_lwgeom(gv[i].geom), WKT_ISO, DBL_DIG, NULL); RASTER_DEBUGF(4, "geom %d = %s", i, wkt); rtdealloc(wkt); } #endif geoms[i] = LWGEOM2GEOS(lwpoly_as_lwgeom(gv[i].geom)); lwpoly_free(gv[i].geom); } rtdealloc(gv); /* create geometry collection */ #if POSTGIS_GEOS_VERSION >= 33 gc = GEOSGeom_createCollection(GEOS_GEOMETRYCOLLECTION, geoms, geomscount); #else gc = GEOSGeom_createCollection(GEOS_MULTIPOLYGON, geoms, geomscount); #endif if (gc == NULL) { #if POSTGIS_GEOS_VERSION >= 33 rterror("rt_raster_surface: Could not create GEOS GEOMETRYCOLLECTION from set of pixel polygons"); #else rterror("rt_raster_surface: Could not create GEOS MULTIPOLYGON from set of pixel polygons"); #endif for (i = 0; i < geomscount; i++) GEOSGeom_destroy(geoms[i]); rtdealloc(geoms); return ES_ERROR; } /* run the union */ #if POSTGIS_GEOS_VERSION >= 33 gunion = GEOSUnaryUnion(gc); #else gunion = GEOSUnionCascaded(gc); #endif GEOSGeom_destroy(gc); rtdealloc(geoms); if (gunion == NULL) { #if POSTGIS_GEOS_VERSION >= 33 rterror("rt_raster_surface: Could not union the pixel polygons using GEOSUnaryUnion()"); #else rterror("rt_raster_surface: Could not union the pixel polygons using GEOSUnionCascaded()"); #endif return ES_ERROR; } /* convert union result from GEOSGeometry to LWGEOM */ mpoly = GEOS2LWGEOM(gunion, 0); /* is geometry valid? if not, try to make valid */ do { LWGEOM *mpolyValid = NULL; #if POSTGIS_GEOS_VERSION < 33 break; #endif if (GEOSisValid(gunion)) break; /* make geometry valid */ mpolyValid = lwgeom_make_valid(mpoly); if (mpolyValid == NULL) { rtwarn("Cannot fix invalid geometry"); break; } lwgeom_free(mpoly); mpoly = mpolyValid; } while (0); GEOSGeom_destroy(gunion); } else { mpoly = lwpoly_as_lwgeom(gv[0].geom); rtdealloc(gv); #if POSTGIS_DEBUG_LEVEL > 3 { char *wkt = lwgeom_to_wkt(mpoly, WKT_ISO, DBL_DIG, NULL); RASTER_DEBUGF(4, "geom 0 = %s", wkt); rtdealloc(wkt); } #endif } /* specify SRID */ lwgeom_set_srid(mpoly, rt_raster_get_srid(raster)); if (mpoly != NULL) { /* convert to multi */ if (!lwgeom_is_collection(mpoly)) { tmp = mpoly; #if POSTGIS_DEBUG_LEVEL > 3 { char *wkt = lwgeom_to_wkt(mpoly, WKT_ISO, DBL_DIG, NULL); RASTER_DEBUGF(4, "before multi = %s", wkt); rtdealloc(wkt); } #endif RASTER_DEBUGF(4, "mpoly @ %p", mpoly); /* lwgeom_as_multi() only does a shallow clone internally so input and output geometries may share memory hence the deep clone of the output geometry for returning is the only way to guarentee the memory isn't shared */ mpoly = lwgeom_as_multi(tmp); clone = lwgeom_clone_deep(mpoly); lwgeom_free(tmp); lwgeom_free(mpoly); mpoly = clone; RASTER_DEBUGF(4, "mpoly @ %p", mpoly); #if POSTGIS_DEBUG_LEVEL > 3 { char *wkt = lwgeom_to_wkt(mpoly, WKT_ISO, DBL_DIG, NULL); RASTER_DEBUGF(4, "after multi = %s", wkt); rtdealloc(wkt); } #endif } #if POSTGIS_DEBUG_LEVEL > 3 { char *wkt = lwgeom_to_wkt(mpoly, WKT_ISO, DBL_DIG, NULL); RASTER_DEBUGF(4, "returning geometry = %s", wkt); rtdealloc(wkt); } #endif *surface = lwgeom_as_lwmpoly(mpoly); return ES_NONE; } return ES_NONE; } /****************************************************************************** * rt_raster_iterator() ******************************************************************************/ typedef struct _rti_iterator_arg_t* _rti_iterator_arg; struct _rti_iterator_arg_t { int count; rt_raster *raster; int *isempty; double **offset; int *width; int *height; struct { rt_band *rtband; int *hasnodata; int *isnodata; double *nodataval; double *minval; } band; struct { uint16_t x; uint16_t y; } distance; struct { uint32_t rows; uint32_t columns; } dimension; struct { double **values; int **nodata; } empty; rt_iterator_arg arg; }; static _rti_iterator_arg _rti_iterator_arg_init() { _rti_iterator_arg _param; _param = rtalloc(sizeof(struct _rti_iterator_arg_t)); if (_param == NULL) { rterror("_rti_iterator_arg_init: Could not allocate memory for _rti_iterator_arg"); return NULL; } _param->count = 0; _param->raster = NULL; _param->isempty = NULL; _param->offset = NULL; _param->width = NULL; _param->height = NULL; _param->band.rtband = NULL; _param->band.hasnodata = NULL; _param->band.isnodata = NULL; _param->band.nodataval = NULL; _param->band.minval = NULL; _param->distance.x = 0; _param->distance.y = 0; _param->dimension.rows = 0; _param->dimension.columns = 0; _param->empty.values = NULL; _param->empty.nodata = NULL; _param->arg = NULL; return _param; } static void _rti_iterator_arg_destroy(_rti_iterator_arg _param) { int i = 0; if (_param->raster != NULL) rtdealloc(_param->raster); if (_param->isempty != NULL) rtdealloc(_param->isempty); if (_param->width != NULL) rtdealloc(_param->width); if (_param->height != NULL) rtdealloc(_param->height); if (_param->band.rtband != NULL) rtdealloc(_param->band.rtband); if (_param->band.hasnodata != NULL) rtdealloc(_param->band.hasnodata); if (_param->band.isnodata != NULL) rtdealloc(_param->band.isnodata); if (_param->band.nodataval != NULL) rtdealloc(_param->band.nodataval); if (_param->band.minval != NULL) rtdealloc(_param->band.minval); if (_param->offset != NULL) { for (i = 0; i < _param->count; i++) { if (_param->offset[i] == NULL) continue; rtdealloc(_param->offset[i]); } rtdealloc(_param->offset); } if (_param->empty.values != NULL) { for (i = 0; i < _param->dimension.rows; i++) { if (_param->empty.values[i] == NULL) continue; rtdealloc(_param->empty.values[i]); } rtdealloc(_param->empty.values); } if (_param->empty.nodata != NULL) { for (i = 0; i < _param->dimension.rows; i++) { if (_param->empty.nodata[i] == NULL) continue; rtdealloc(_param->empty.nodata[i]); } rtdealloc(_param->empty.nodata); } if (_param->arg != NULL) { if (_param->arg->values != NULL) rtdealloc(_param->arg->values); if (_param->arg->nodata != NULL) rtdealloc(_param->arg->nodata); if (_param->arg->src_pixel != NULL) { for (i = 0; i < _param->count; i++) { if (_param->arg->src_pixel[i] == NULL) continue; rtdealloc(_param->arg->src_pixel[i]); } rtdealloc(_param->arg->src_pixel); } rtdealloc(_param->arg); } rtdealloc(_param); } static int _rti_iterator_arg_populate( _rti_iterator_arg _param, rt_iterator itrset, uint16_t itrcount, uint16_t distancex, uint16_t distancey, int *allnull, int *allempty ) { int i = 0; int hasband = 0; _param->count = itrcount; _param->distance.x = distancex; _param->distance.y = distancey; _param->dimension.columns = distancex * 2 + 1; _param->dimension.rows = distancey * 2 + 1; /* allocate memory for children */ _param->raster = rtalloc(sizeof(rt_raster) * itrcount); _param->isempty = rtalloc(sizeof(int) * itrcount); _param->width = rtalloc(sizeof(int) * itrcount); _param->height = rtalloc(sizeof(int) * itrcount); _param->offset = rtalloc(sizeof(double *) * itrcount); _param->band.rtband = rtalloc(sizeof(rt_band) * itrcount); _param->band.hasnodata = rtalloc(sizeof(int) * itrcount); _param->band.isnodata = rtalloc(sizeof(int) * itrcount); _param->band.nodataval = rtalloc(sizeof(double) * itrcount); _param->band.minval = rtalloc(sizeof(double) * itrcount); if ( _param->raster == NULL || _param->isempty == NULL || _param->width == NULL || _param->height == NULL || _param->offset == NULL || _param->band.rtband == NULL || _param->band.hasnodata == NULL || _param->band.isnodata == NULL || _param->band.nodataval == NULL || _param->band.minval == NULL ) { rterror("_rti_iterator_arg_populate: Could not allocate memory for children of _rti_iterator_arg"); return 0; } *allnull = 0; *allempty = 0; /* check input rasters not empty, band # is valid copy raster pointers and set flags */ for (i = 0; i < itrcount; i++) { /* initialize elements */ _param->raster[i] = NULL; _param->isempty[i] = 0; _param->width[i] = 0; _param->height[i] = 0; _param->offset[i] = NULL; _param->band.rtband[i] = NULL; _param->band.hasnodata[i] = 0; _param->band.isnodata[i] = 0; _param->band.nodataval[i] = 0; _param->band.minval[i] = 0; /* set isempty */ if (itrset[i].raster == NULL) { _param->isempty[i] = 1; (*allnull)++; (*allempty)++; continue; } else if (rt_raster_is_empty(itrset[i].raster)) { _param->isempty[i] = 1; (*allempty)++; continue; } /* check band number */ hasband = rt_raster_has_band(itrset[i].raster, itrset[i].nband); if (!hasband) { if (!itrset[i].nbnodata) { rterror("_rti_iterator_arg_populate: Band %d not found for raster %d", itrset[i].nband, i); return 0; } else { RASTER_DEBUGF(4, "Band %d not found for raster %d. Using NODATA", itrset[i].nband, i); } } _param->raster[i] = itrset[i].raster; if (hasband) { _param->band.rtband[i] = rt_raster_get_band(itrset[i].raster, itrset[i].nband); if (_param->band.rtband[i] == NULL) { rterror("_rti_iterator_arg_populate: Could not get band %d for raster %d", itrset[i].nband, i); return 0; } /* hasnodata */ _param->band.hasnodata[i] = rt_band_get_hasnodata_flag(_param->band.rtband[i]); /* hasnodata = TRUE */ if (_param->band.hasnodata[i]) { /* nodataval */ rt_band_get_nodata(_param->band.rtband[i], &(_param->band.nodataval[i])); /* isnodata */ _param->band.isnodata[i] = rt_band_get_isnodata_flag(_param->band.rtband[i]); } /* hasnodata = FALSE */ else { /* minval */ _param->band.minval[i] = rt_band_get_min_value(_param->band.rtband[i]); } } /* width, height */ _param->width[i] = rt_raster_get_width(_param->raster[i]); _param->height[i] = rt_raster_get_height(_param->raster[i]); /* init offset */ _param->offset[i] = rtalloc(sizeof(double) * 2); if (_param->offset[i] == NULL) { rterror("_rti_iterator_arg_populate: Could not allocate memory for offsets"); return 0; } } return 1; } static int _rti_iterator_arg_empty_init(_rti_iterator_arg _param) { int x = 0; int y = 0; _param->empty.values = rtalloc(sizeof(double *) * _param->dimension.rows); _param->empty.nodata = rtalloc(sizeof(int *) * _param->dimension.rows); if (_param->empty.values == NULL || _param->empty.nodata == NULL) { rterror("_rti_iterator_arg_empty_init: Could not allocate memory for empty values and NODATA"); return 0; } for (y = 0; y < _param->dimension.rows; y++) { _param->empty.values[y] = rtalloc(sizeof(double) * _param->dimension.columns); _param->empty.nodata[y] = rtalloc(sizeof(int) * _param->dimension.columns); if (_param->empty.values[y] == NULL || _param->empty.nodata[y] == NULL) { rterror("_rti_iterator_arg_empty_init: Could not allocate memory for elements of empty values and NODATA"); return 0; } for (x = 0; x < _param->dimension.columns; x++) { _param->empty.values[y][x] = 0; _param->empty.nodata[y][x] = 1; } } return 1; } static int _rti_iterator_arg_callback_init(_rti_iterator_arg _param) { int i = 0; _param->arg = rtalloc(sizeof(struct rt_iterator_arg_t)); if (_param->arg == NULL) { rterror("_rti_iterator_arg_callback_init: Could not allocate memory for rt_iterator_arg"); return 0; } _param->arg->values = NULL; _param->arg->nodata = NULL; _param->arg->src_pixel = NULL; /* initialize argument components */ _param->arg->values = rtalloc(sizeof(double **) * _param->count); _param->arg->nodata = rtalloc(sizeof(int **) * _param->count); _param->arg->src_pixel = rtalloc(sizeof(int *) * _param->count); if (_param->arg->values == NULL || _param->arg->nodata == NULL || _param->arg->src_pixel == NULL) { rterror("_rti_iterator_arg_callback_init: Could not allocate memory for element of rt_iterator_arg"); return 0; } memset(_param->arg->values, 0, sizeof(double **) * _param->count); memset(_param->arg->nodata, 0, sizeof(int **) * _param->count); /* initialize pos */ for (i = 0; i < _param->count; i++) { _param->arg->src_pixel[i] = rtalloc(sizeof(int) * 2); if (_param->arg->src_pixel[i] == NULL) { rterror("_rti_iterator_arg_callback_init: Could not allocate memory for position elements of rt_iterator_arg"); return 0; } memset(_param->arg->src_pixel[i], 0, sizeof(int) * 2); } _param->arg->rasters = _param->count; _param->arg->rows = _param->dimension.rows; _param->arg->columns = _param->dimension.columns; _param->arg->dst_pixel[0] = 0; _param->arg->dst_pixel[1] = 0; return 1; } static void _rti_iterator_arg_callback_clean(_rti_iterator_arg _param) { int i = 0; int y = 0; for (i = 0; i < _param->count; i++) { RASTER_DEBUGF(5, "empty at @ %p", _param->empty.values); RASTER_DEBUGF(5, "values at @ %p", _param->arg->values[i]); if (_param->arg->values[i] == _param->empty.values) { _param->arg->values[i] = NULL; _param->arg->nodata[i] = NULL; continue; } for (y = 0; y < _param->dimension.rows; y++) { rtdealloc(_param->arg->values[i][y]); rtdealloc(_param->arg->nodata[i][y]); } rtdealloc(_param->arg->values[i]); rtdealloc(_param->arg->nodata[i]); _param->arg->values[i] = NULL; _param->arg->nodata[i] = NULL; } } /** * n-raster iterator. * The raster returned should be freed by the caller * * @param itrset : set of rt_iterator objects. * @param itrcount : number of objects in itrset. * @param extenttype : type of extent for the output raster. * @param customextent : raster specifying custom extent. * is only used if extenttype is ET_CUSTOM. * @param pixtype : the desired pixel type of the output raster's band. * @param hasnodata : indicates if the band has nodata value * @param nodataval : the nodata value, will be appropriately * truncated to fit the pixtype size. * @param distancex : the number of pixels around the specified pixel * along the X axis * @param distancey : the number of pixels around the specified pixel * along the Y axis * @param userarg : pointer to any argument that is passed as-is to callback. * @param callback : callback function for actual processing of pixel values. * @param *rtnraster : return one band raster from iterator process * * The callback function _must_ have the following signature. * * int FNAME(rt_iterator_arg arg, void *userarg, double *value, int *nodata) * * The callback function _must_ return zero (error) or non-zero (success) * indicating whether the function ran successfully. * The parameters passed to the callback function are as follows. * * - rt_iterator_arg arg: struct containing pixel values, NODATA flags and metadata * - void *userarg: NULL or calling function provides to rt_raster_iterator() for use by callback function * - double *value: value of pixel to be burned by rt_raster_iterator() * - int *nodata: flag (0 or 1) indicating that pixel to be burned is NODATA * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_raster_iterator( rt_iterator itrset, uint16_t itrcount, rt_extenttype extenttype, rt_raster customextent, rt_pixtype pixtype, uint8_t hasnodata, double nodataval, uint16_t distancex, uint16_t distancey, void *userarg, int (*callback)( rt_iterator_arg arg, void *userarg, double *value, int *nodata ), rt_raster *rtnraster ) { /* output raster */ rt_raster rtnrast = NULL; /* output raster's band */ rt_band rtnband = NULL; /* working raster */ rt_raster rast = NULL; _rti_iterator_arg _param = NULL; int allnull = 0; int allempty = 0; int aligned = 0; double offset[4] = {0.}; rt_pixel npixels; int i = 0; int status = 0; int inextent = 0; int x = 0; int y = 0; int _x = 0; int _y = 0; int _width = 0; int _height = 0; double minval; double value; int isnodata; int nodata; RASTER_DEBUG(3, "Starting..."); assert(itrset != NULL && itrcount > 0); assert(rtnraster != NULL); /* init rtnraster to NULL */ *rtnraster = NULL; /* check that callback function is not NULL */ if (callback == NULL) { rterror("rt_raster_iterator: Callback function not provided"); return ES_ERROR; } /* check that custom extent is provided if extenttype = ET_CUSTOM */ if (extenttype == ET_CUSTOM && rt_raster_is_empty(customextent)) { rterror("rt_raster_iterator: Custom extent cannot be empty if extent type is ET_CUSTOM"); return ES_ERROR; } /* check that pixtype != PT_END */ if (pixtype == PT_END) { rterror("rt_raster_iterator: Pixel type cannot be PT_END"); return ES_ERROR; } /* initialize _param */ if ((_param = _rti_iterator_arg_init()) == NULL) { rterror("rt_raster_iterator: Could not initialize internal variables"); return ES_ERROR; } /* fill _param */ if (!_rti_iterator_arg_populate(_param, itrset, itrcount, distancex, distancey, &allnull, &allempty)) { rterror("rt_raster_iterator: Could not populate for internal variables"); _rti_iterator_arg_destroy(_param); return ES_ERROR; } /* shortcut if all null, return NULL */ if (allnull == itrcount) { RASTER_DEBUG(3, "all rasters are NULL, returning NULL"); _rti_iterator_arg_destroy(_param); return ES_NONE; } /* shortcut if all empty, return empty raster */ else if (allempty == itrcount) { RASTER_DEBUG(3, "all rasters are empty, returning empty raster"); _rti_iterator_arg_destroy(_param); rtnrast = rt_raster_new(0, 0); if (rtnrast == NULL) { rterror("rt_raster_iterator: Could not create empty raster"); return ES_ERROR; } rt_raster_set_scale(rtnrast, 0, 0); *rtnraster = rtnrast; return ES_NONE; } /* check that all rasters are aligned */ RASTER_DEBUG(3, "checking alignment of all rasters"); rast = NULL; /* find raster to use as reference */ /* use custom if provided */ if (extenttype == ET_CUSTOM) { RASTER_DEBUG(4, "using custom extent as reference raster"); rast = customextent; } /* use first valid one in _param->raster */ else { for (i = 0; i < itrcount; i++) { if (!_param->isempty[i]) { RASTER_DEBUGF(4, "using raster at index %d as reference raster", i); rast = _param->raster[i]; break; } } } /* no rasters found, SHOULD NEVER BE HERE! */ if (rast == NULL) { rterror("rt_raster_iterator: Could not find reference raster to use for alignment tests"); _rti_iterator_arg_destroy(_param); return ES_ERROR; } do { aligned = 1; /* check custom first if set. also skip if rasters are the same */ if (extenttype == ET_CUSTOM && rast != customextent) { if (rt_raster_same_alignment(rast, customextent, &aligned, NULL) != ES_NONE) { rterror("rt_raster_iterator: Could not test for alignment between reference raster and custom extent"); _rti_iterator_arg_destroy(_param); return ES_ERROR; } RASTER_DEBUGF(5, "custom extent alignment: %d", aligned); if (!aligned) break; } for (i = 0; i < itrcount; i++) { /* skip NULL rasters and if rasters are the same */ if (_param->isempty[i] || rast == _param->raster[i]) continue; if (rt_raster_same_alignment(rast, _param->raster[i], &aligned, NULL) != ES_NONE) { rterror("rt_raster_iterator: Could not test for alignment between reference raster and raster %d", i); _rti_iterator_arg_destroy(_param); return ES_ERROR; } RASTER_DEBUGF(5, "raster at index %d alignment: %d", i, aligned); /* abort checking since a raster isn't aligned */ if (!aligned) break; } } while (0); /* not aligned, error */ if (!aligned) { rterror("rt_raster_iterator: The set of rasters provided (custom extent included, if appropriate) do not have the same alignment"); _rti_iterator_arg_destroy(_param); return ES_ERROR; } /* use extenttype to build output raster (no bands though) */ i = -1; switch (extenttype) { case ET_INTERSECTION: case ET_UNION: /* make copy of first "real" raster */ rtnrast = rtalloc(sizeof(struct rt_raster_t)); if (rtnrast == NULL) { rterror("rt_raster_iterator: Could not allocate memory for output raster"); _rti_iterator_arg_destroy(_param); return ES_ERROR; } for (i = 0; i < itrcount; i++) { if (!_param->isempty[i]) { memcpy(rtnrast, _param->raster[i], sizeof(struct rt_raster_serialized_t)); break; } } rtnrast->numBands = 0; rtnrast->bands = NULL; /* get extent of output raster */ rast = NULL; for (i = i + 1; i < itrcount; i++) { if (_param->isempty[i]) continue; status = rt_raster_from_two_rasters(rtnrast, _param->raster[i], extenttype, &rast, NULL); rtdealloc(rtnrast); if (rast == NULL || status != ES_NONE) { rterror("rt_raster_iterator: Could not compute %s extent of rasters", extenttype == ET_UNION ? "union" : "intersection" ); _rti_iterator_arg_destroy(_param); return ES_ERROR; } else if (rt_raster_is_empty(rast)) { rtinfo("rt_raster_iterator: Computed raster for %s extent is empty", extenttype == ET_UNION ? "union" : "intersection" ); _rti_iterator_arg_destroy(_param); *rtnraster = rast; return ES_NONE; } rtnrast = rast; rast = NULL; } break; /* first, second and last have similar checks and continue into custom */ case ET_FIRST: i = 0; case ET_SECOND: if (i < 0) { if (itrcount < 2) i = 0; else i = 1; } case ET_LAST: if (i < 0) i = itrcount - 1; /* input raster is null, return NULL */ if (_param->raster[i] == NULL) { RASTER_DEBUGF(3, "returning NULL as %s raster is NULL and extent type is ET_%s", (i == 0 ? "first" : (i == 1 ? "second" : "last")), (i == 0 ? "FIRST" : (i == 1 ? "SECOND" : "LAST")) ); _rti_iterator_arg_destroy(_param); return ES_NONE; } /* input raster is empty, return empty raster */ else if (_param->isempty[i]) { RASTER_DEBUGF(3, "returning empty raster as %s raster is empty and extent type is ET_%s", (i == 0 ? "first" : (i == 1 ? "second" : "last")), (i == 0 ? "FIRST" : (i == 1 ? "SECOND" : "LAST")) ); _rti_iterator_arg_destroy(_param); rtnrast = rt_raster_new(0, 0); if (rtnrast == NULL) { rterror("rt_raster_iterator: Could not create empty raster"); return ES_ERROR; } rt_raster_set_scale(rtnrast, 0, 0); *rtnraster = rtnrast; return ES_NONE; } /* copy the custom extent raster */ case ET_CUSTOM: rtnrast = rtalloc(sizeof(struct rt_raster_t)); if (rtnrast == NULL) { rterror("rt_raster_iterator: Could not allocate memory for output raster"); _rti_iterator_arg_destroy(_param); return ES_ERROR; } switch (extenttype) { case ET_CUSTOM: memcpy(rtnrast, customextent, sizeof(struct rt_raster_serialized_t)); break; /* first, second, last */ default: memcpy(rtnrast, _param->raster[i], sizeof(struct rt_raster_serialized_t)); break; } rtnrast->numBands = 0; rtnrast->bands = NULL; break; } _width = rt_raster_get_width(rtnrast); _height = rt_raster_get_height(rtnrast); RASTER_DEBUGF(4, "rtnrast (width, height, ulx, uly, scalex, scaley, skewx, skewy, srid) = (%d, %d, %f, %f, %f, %f, %f, %f, %d)", _width, _height, rt_raster_get_x_offset(rtnrast), rt_raster_get_y_offset(rtnrast), rt_raster_get_x_scale(rtnrast), rt_raster_get_y_scale(rtnrast), rt_raster_get_x_skew(rtnrast), rt_raster_get_y_skew(rtnrast), rt_raster_get_srid(rtnrast) ); /* init values and NODATA for use with empty rasters */ if (!_rti_iterator_arg_empty_init(_param)) { rterror("rt_raster_iterator: Could not initialize empty values and NODATA"); _rti_iterator_arg_destroy(_param); rt_raster_destroy(rtnrast); return ES_ERROR; } /* create output band */ if (rt_raster_generate_new_band( rtnrast, pixtype, nodataval, hasnodata, nodataval, 0 ) < 0) { rterror("rt_raster_iterator: Could not add new band to output raster"); _rti_iterator_arg_destroy(_param); rt_raster_destroy(rtnrast); return ES_ERROR; } /* get output band */ rtnband = rt_raster_get_band(rtnrast, 0); if (rtnband == NULL) { rterror("rt_raster_iterator: Could not get new band from output raster"); _rti_iterator_arg_destroy(_param); rt_raster_destroy(rtnrast); return ES_ERROR; } /* output band's minimum value */ minval = rt_band_get_min_value(rtnband); /* initialize argument for callback function */ if (!_rti_iterator_arg_callback_init(_param)) { rterror("rt_raster_iterator: Could not initialize callback function argument"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } /* fill _param->offset */ for (i = 0; i < itrcount; i++) { if (_param->isempty[i]) continue; status = rt_raster_from_two_rasters(rtnrast, _param->raster[i], ET_FIRST, &rast, offset); rtdealloc(rast); if (status != ES_NONE) { rterror("rt_raster_iterator: Could not compute raster offsets"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } _param->offset[i][0] = offset[2]; _param->offset[i][1] = offset[3]; RASTER_DEBUGF(4, "rast %d offset: %f %f", i, offset[2], offset[3]); } /* loop over each pixel (POI) of output raster */ /* _x,_y are for output raster */ /* x,y are for input raster */ for (_y = 0; _y < _height; _y++) { for (_x = 0; _x < _width; _x++) { RASTER_DEBUGF(4, "iterating output pixel (x, y) = (%d, %d)", _x, _y); _param->arg->dst_pixel[0] = _x; _param->arg->dst_pixel[1] = _y; /* loop through each input raster */ for (i = 0; i < itrcount; i++) { RASTER_DEBUGF(4, "raster %d", i); /* empty raster OR band does not exist and flag set to use NODATA OR band is NODATA */ if ( _param->isempty[i] || (_param->band.rtband[i] == NULL && itrset[i].nbnodata) || _param->band.isnodata[i] ) { RASTER_DEBUG(4, "empty raster, band does not exist or band is NODATA. using empty values and NODATA"); x = _x; y = _y; _param->arg->values[i] = _param->empty.values; _param->arg->nodata[i] = _param->empty.nodata; continue; } /* input raster's X,Y */ x = _x - (int) _param->offset[i][0]; y = _y - (int) _param->offset[i][1]; RASTER_DEBUGF(4, "source pixel (x, y) = (%d, %d)", x, y); _param->arg->src_pixel[i][0] = x; _param->arg->src_pixel[i][1] = y; /* neighborhood */ npixels = NULL; status = 0; if (distancex > 0 && distancey > 0) { RASTER_DEBUG(4, "getting neighborhood"); status = rt_band_get_nearest_pixel( _param->band.rtband[i], x, y, distancex, distancey, 1, &npixels ); if (status < 0) { rterror("rt_raster_iterator: Could not get pixel neighborhood"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } } /* get value of POI */ /* get pixel's value */ if ( (x >= 0 && x < _param->width[i]) && (y >= 0 && y < _param->height[i]) ) { RASTER_DEBUG(4, "getting value of POI"); if (rt_band_get_pixel( _param->band.rtband[i], x, y, &value, &isnodata ) != ES_NONE) { rterror("rt_raster_iterator: Could not get the pixel value of band"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } inextent = 1; } /* outside band extent, set to NODATA */ else { RASTER_DEBUG(4, "Outside band extent, setting value to NODATA"); /* has NODATA, use NODATA */ if (_param->band.hasnodata[i]) value = _param->band.nodataval[i]; /* no NODATA, use min possible value */ else value = _param->band.minval[i]; inextent = 0; isnodata = 1; } /* add pixel to neighborhood */ status++; if (status > 1) npixels = (rt_pixel) rtrealloc(npixels, sizeof(struct rt_pixel_t) * status); else npixels = (rt_pixel) rtalloc(sizeof(struct rt_pixel_t)); if (npixels == NULL) { rterror("rt_raster_iterator: Could not reallocate memory for neighborhood"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } npixels[status - 1].x = x; npixels[status - 1].y = y; npixels[status - 1].nodata = 1; npixels[status - 1].value = value; /* set nodata flag */ if ((!_param->band.hasnodata[i] && inextent) || !isnodata) { npixels[status - 1].nodata = 0; } RASTER_DEBUGF(4, "value, nodata: %f, %d", value, npixels[status - 1].nodata); /* convert set of rt_pixel to 2D array */ status = rt_pixel_set_to_array( npixels, status, x, y, distancex, distancey, &(_param->arg->values[i]), &(_param->arg->nodata[i]), NULL, NULL ); rtdealloc(npixels); if (status != ES_NONE) { rterror("rt_raster_iterator: Could not create 2D array of neighborhood"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } } /* callback */ RASTER_DEBUG(4, "calling callback function"); value = 0; nodata = 0; status = callback(_param->arg, userarg, &value, &nodata); /* free memory from callback */ _rti_iterator_arg_callback_clean(_param); /* handle callback status */ if (status == 0) { rterror("rt_raster_iterator: Callback function returned an error"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } /* burn value to pixel */ status = 0; if (!nodata) { status = rt_band_set_pixel(rtnband, _x, _y, value, NULL); RASTER_DEBUGF(4, "burning pixel (%d, %d) with value: %f", _x, _y, value); } else if (!hasnodata) { status = rt_band_set_pixel(rtnband, _x, _y, minval, NULL); RASTER_DEBUGF(4, "burning pixel (%d, %d) with minval: %f", _x, _y, minval); } else { RASTER_DEBUGF(4, "NOT burning pixel (%d, %d)", _x, _y); } if (status != ES_NONE) { rterror("rt_raster_iterator: Could not set pixel value"); _rti_iterator_arg_destroy(_param); rt_band_destroy(rtnband); rt_raster_destroy(rtnrast); return ES_ERROR; } } } /* lots of cleanup */ _rti_iterator_arg_destroy(_param); *rtnraster = rtnrast; return ES_NONE; } /****************************************************************************** * rt_raster_perimeter() ******************************************************************************/ static rt_errorstate _rti_raster_get_band_perimeter(rt_band band, uint16_t *trim) { uint16_t width = 0; uint16_t height = 0; int x = 0; int y = 0; int offset = 0; int done[4] = {0}; double value = 0; int nodata = 0; assert(band != NULL); assert(band->raster != NULL); assert(trim != NULL); memset(trim, 0, sizeof(uint16_t) * 4); width = rt_band_get_width(band); height = rt_band_get_height(band); /* top */ for (y = 0; y < height; y++) { for (offset = 0; offset < 3; offset++) { /* every third pixel */ for (x = offset; x < width; x += 3) { if (rt_band_get_pixel(band, x, y, &value, &nodata) != ES_NONE) { rterror("_rti_raster_get_band_perimeter: Could not get band pixel"); return ES_ERROR; } RASTER_DEBUGF(4, "top (x, y, value, nodata) = (%d, %d, %f, %d)", x, y, value, nodata); if (!nodata) { trim[0] = y; done[0] = 1; break; } } if (done[0]) break; } if (done[0]) break; } /* right */ for (x = width - 1; x >= 0; x--) { for (offset = 0; offset < 3; offset++) { /* every third pixel */ for (y = offset; y < height; y += 3) { if (rt_band_get_pixel(band, x, y, &value, &nodata) != ES_NONE) { rterror("_rti_raster_get_band_perimeter: Could not get band pixel"); return ES_ERROR; } RASTER_DEBUGF(4, "right (x, y, value, nodata) = (%d, %d, %f, %d)", x, y, value, nodata); if (!nodata) { trim[1] = width - (x + 1); done[1] = 1; break; } } if (done[1]) break; } if (done[1]) break; } /* bottom */ for (y = height - 1; y >= 0; y--) { for (offset = 0; offset < 3; offset++) { /* every third pixel */ for (x = offset; x < width; x += 3) { if (rt_band_get_pixel(band, x, y, &value, &nodata) != ES_NONE) { rterror("_rti_raster_get_band_perimeter: Could not get band pixel"); return ES_ERROR; } RASTER_DEBUGF(4, "bottom (x, y, value, nodata) = (%d, %d, %f, %d)", x, y, value, nodata); if (!nodata) { trim[2] = height - (y + 1); done[2] = 1; break; } } if (done[2]) break; } if (done[2]) break; } /* left */ for (x = 0; x < width; x++) { for (offset = 0; offset < 3; offset++) { /* every third pixel */ for (y = offset; y < height; y += 3) { if (rt_band_get_pixel(band, x, y, &value, &nodata) != ES_NONE) { rterror("_rti_raster_get_band_perimeter: Could not get band pixel"); return ES_ERROR; } RASTER_DEBUGF(4, "left (x, , value, nodata) = (%d, %d, %f, %d)", x, y, value, nodata); if (!nodata) { trim[3] = x; done[3] = 1; break; } } if (done[3]) break; } if (done[3]) break; } RASTER_DEBUGF(4, "trim = (%d, %d, %d, %d)", trim[0], trim[1], trim[2], trim[3]); return ES_NONE; } /** * Get raster perimeter * * The perimeter is a 4 vertices (5 to be closed) * single ring polygon bearing the raster's rotation and using * projection coordinates. * * @param raster : the raster to get info from * @param nband : the band for the perimeter. 0-based * value less than zero means all bands * @param **perimeter : pointer to perimeter * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_perimeter( rt_raster raster, int nband, LWGEOM **perimeter ) { rt_band band = NULL; int numband = 0; uint16_t *_nband = NULL; int i = 0; int j = 0; uint16_t _trim[4] = {0}; uint16_t trim[4] = {0}; /* top, right, bottom, left */ int isset[4] = {0}; double gt[6] = {0.0}; int srid = SRID_UNKNOWN; POINTARRAY *pts = NULL; POINT4D p4d; POINTARRAY **rings = NULL; LWPOLY* poly = NULL; assert(perimeter != NULL); *perimeter = NULL; /* empty raster, no perimeter */ if (rt_raster_is_empty(raster)) return ES_NONE; /* raster metadata */ srid = rt_raster_get_srid(raster); rt_raster_get_geotransform_matrix(raster, gt); numband = rt_raster_get_num_bands(raster); RASTER_DEBUGF(3, "rt_raster_get_perimeter: raster is %dx%d", raster->width, raster->height); /* nband < 0 means all bands */ if (nband >= 0) { if (nband >= numband) { rterror("rt_raster_get_boundary: Band %d not found for raster", nband); return ES_ERROR; } numband = 1; } else nband = -1; RASTER_DEBUGF(3, "rt_raster_get_perimeter: nband, numband = %d, %d", nband, numband); _nband = rtalloc(sizeof(uint16_t) * numband); if (_nband == NULL) { rterror("rt_raster_get_boundary: Could not allocate memory for band indices"); return ES_ERROR; } if (nband < 0) { for (i = 0; i < numband; i++) _nband[i] = i; } else _nband[0] = nband; for (i = 0; i < numband; i++) { band = rt_raster_get_band(raster, _nband[i]); if (band == NULL) { rterror("rt_raster_get_boundary: Could not get band at index %d", _nband[i]); rtdealloc(_nband); return ES_ERROR; } /* band is nodata */ if (rt_band_get_isnodata_flag(band) != 0) continue; if (_rti_raster_get_band_perimeter(band, trim) != ES_NONE) { rterror("rt_raster_get_boundary: Could not get band perimeter"); rtdealloc(_nband); return ES_ERROR; } for (j = 0; j < 4; j++) { if (!isset[j] || trim[j] < _trim[j]) { _trim[j] = trim[j]; isset[j] = 1; } } } /* no longer needed */ rtdealloc(_nband); /* check isset, just need to check one element */ if (!isset[0]) { /* return NULL as bands are empty */ return ES_NONE; } RASTER_DEBUGF(4, "trim = (%d, %d, %d, %d)", trim[0], trim[1], trim[2], trim[3]); /* only one ring */ rings = (POINTARRAY **) rtalloc(sizeof (POINTARRAY*)); if (!rings) { rterror("rt_raster_get_perimeter: Could not allocate memory for polygon ring"); return ES_ERROR; } rings[0] = ptarray_construct(0, 0, 5); if (!rings[0]) { rterror("rt_raster_get_perimeter: Could not construct point array"); return ES_ERROR; } pts = rings[0]; /* Upper-left corner (first and last points) */ rt_raster_cell_to_geopoint( raster, _trim[3], _trim[0], &p4d.x, &p4d.y, gt ); ptarray_set_point4d(pts, 0, &p4d); ptarray_set_point4d(pts, 4, &p4d); /* Upper-right corner (we go clockwise) */ rt_raster_cell_to_geopoint( raster, raster->width - _trim[1], _trim[0], &p4d.x, &p4d.y, gt ); ptarray_set_point4d(pts, 1, &p4d); /* Lower-right corner */ rt_raster_cell_to_geopoint( raster, raster->width - _trim[1], raster->height - _trim[2], &p4d.x, &p4d.y, gt ); ptarray_set_point4d(pts, 2, &p4d); /* Lower-left corner */ rt_raster_cell_to_geopoint( raster, _trim[3], raster->height - _trim[2], &p4d.x, &p4d.y, gt ); ptarray_set_point4d(pts, 3, &p4d); poly = lwpoly_construct(srid, 0, 1, rings); *perimeter = lwpoly_as_lwgeom(poly); return ES_NONE; } /****************************************************************************** * rt_raster_colormap() ******************************************************************************/ typedef struct _rti_colormap_arg_t* _rti_colormap_arg; struct _rti_colormap_arg_t { rt_raster raster; rt_band band; rt_colormap_entry nodataentry; int hasnodata; double nodataval; int nexpr; rt_reclassexpr *expr; int npos; uint16_t *pos; }; static _rti_colormap_arg _rti_colormap_arg_init(rt_raster raster) { _rti_colormap_arg arg = NULL; arg = rtalloc(sizeof(struct _rti_colormap_arg_t)); if (arg == NULL) { rterror("_rti_colormap_arg_init: Could not allocate memory for _rti_color_arg"); return NULL; } arg->band = NULL; arg->nodataentry = NULL; arg->hasnodata = 0; arg->nodataval = 0; if (raster == NULL) arg->raster = NULL; /* raster provided */ else { arg->raster = rt_raster_clone(raster, 0); if (arg->raster == NULL) { rterror("_rti_colormap_arg_init: Could not create output raster"); return NULL; } } arg->nexpr = 0; arg->expr = NULL; arg->npos = 0; arg->pos = NULL; return arg; } static void _rti_colormap_arg_destroy(_rti_colormap_arg arg) { int i = 0; if (arg->raster != NULL) { rt_band band = NULL; for (i = rt_raster_get_num_bands(arg->raster) - 1; i >= 0; i--) { band = rt_raster_get_band(arg->raster, i); if (band != NULL) rt_band_destroy(band); } rt_raster_destroy(arg->raster); } if (arg->nexpr) { for (i = 0; i < arg->nexpr; i++) { if (arg->expr[i] != NULL) rtdealloc(arg->expr[i]); } rtdealloc(arg->expr); } if (arg->npos) rtdealloc(arg->pos); rtdealloc(arg); arg = NULL; } /** * Returns a new raster with up to four 8BUI bands (RGBA) from * applying a colormap to the user-specified band of the * input raster. * * @param raster: input raster * @param nband: 0-based index of the band to process with colormap * @param colormap: rt_colormap object of colormap to apply to band * * @return new raster or NULL on error */ rt_raster rt_raster_colormap( rt_raster raster, int nband, rt_colormap colormap ) { _rti_colormap_arg arg = NULL; rt_raster rtnraster = NULL; rt_band band = NULL; int i = 0; int j = 0; int k = 0; assert(colormap != NULL); /* empty raster */ if (rt_raster_is_empty(raster)) return NULL; /* no colormap entries */ if (colormap->nentry < 1) { rterror("rt_raster_colormap: colormap must have at least one entry"); return NULL; } /* nband is valid */ if (!rt_raster_has_band(raster, nband)) { rterror("rt_raster_colormap: raster has no band at index %d", nband); return NULL; } band = rt_raster_get_band(raster, nband); if (band == NULL) { rterror("rt_raster_colormap: Could not get band at index %d", nband); return NULL; } /* init internal variables */ arg = _rti_colormap_arg_init(raster); if (arg == NULL) { rterror("rt_raster_colormap: Could not initialize internal variables"); return NULL; } /* handle NODATA */ if (rt_band_get_hasnodata_flag(band)) { arg->hasnodata = 1; rt_band_get_nodata(band, &(arg->nodataval)); } /* # of colors */ if (colormap->ncolor < 1) { rterror("rt_raster_colormap: At least one color must be provided"); _rti_colormap_arg_destroy(arg); return NULL; } else if (colormap->ncolor > 4) { rtinfo("More than four colors indicated. Using only the first four colors"); colormap->ncolor = 4; } /* find non-NODATA entries */ arg->npos = 0; arg->pos = rtalloc(sizeof(uint16_t) * colormap->nentry); if (arg->pos == NULL) { rterror("rt_raster_colormap: Could not allocate memory for valid entries"); _rti_colormap_arg_destroy(arg); return NULL; } for (i = 0, j = 0; i < colormap->nentry; i++) { /* special handling for NODATA entries */ if (colormap->entry[i].isnodata) { /* first NODATA entry found, use it */ if (arg->nodataentry == NULL) arg->nodataentry = &(colormap->entry[i]); else rtwarn("More than one colormap entry found for NODATA value. Only using first NOTDATA entry"); continue; } (arg->npos)++; arg->pos[j++] = i; } /* INTERPOLATE and only one non-NODATA entry */ if (colormap->method == CM_INTERPOLATE && arg->npos < 2) { rtinfo("Method INTERPOLATE requires at least two non-NODATA colormap entries. Using NEAREST instead"); colormap->method = CM_NEAREST; } /* NODATA entry but band has no NODATA value */ if (!arg->hasnodata && arg->nodataentry != NULL) { rtinfo("Band at index %d has no NODATA value. Ignoring NODATA entry", nband); arg->nodataentry = NULL; } /* allocate expr */ arg->nexpr = arg->npos; /* INTERPOLATE needs one less than the number of entries */ if (colormap->method == CM_INTERPOLATE) arg->nexpr -= 1; /* EXACT requires a no matching expression */ else if (colormap->method == CM_EXACT) arg->nexpr += 1; /* NODATA entry exists, add expression */ if (arg->nodataentry != NULL) arg->nexpr += 1; arg->expr = rtalloc(sizeof(rt_reclassexpr) * arg->nexpr); if (arg->expr == NULL) { rterror("rt_raster_colormap: Could not allocate memory for reclass expressions"); _rti_colormap_arg_destroy(arg); return NULL; } RASTER_DEBUGF(4, "nexpr = %d", arg->nexpr); RASTER_DEBUGF(4, "expr @ %p", arg->expr); for (i = 0; i < arg->nexpr; i++) { arg->expr[i] = rtalloc(sizeof(struct rt_reclassexpr_t)); if (arg->expr[i] == NULL) { rterror("rt_raster_colormap: Could not allocate memory for reclass expression"); _rti_colormap_arg_destroy(arg); return NULL; } } /* reclassify bands */ /* by # of colors */ for (i = 0; i < colormap->ncolor; i++) { k = 0; /* handle NODATA entry first */ if (arg->nodataentry != NULL) { arg->expr[k]->src.min = arg->nodataentry->value; arg->expr[k]->src.max = arg->nodataentry->value; arg->expr[k]->src.inc_min = 1; arg->expr[k]->src.inc_max = 1; arg->expr[k]->src.exc_min = 0; arg->expr[k]->src.exc_max = 0; arg->expr[k]->dst.min = arg->nodataentry->color[i]; arg->expr[k]->dst.max = arg->nodataentry->color[i]; arg->expr[k]->dst.inc_min = 1; arg->expr[k]->dst.inc_max = 1; arg->expr[k]->dst.exc_min = 0; arg->expr[k]->dst.exc_max = 0; RASTER_DEBUGF(4, "NODATA expr[%d]->src (min, max, in, ix, en, ex) = (%f, %f, %d, %d, %d, %d)", k, arg->expr[k]->src.min, arg->expr[k]->src.max, arg->expr[k]->src.inc_min, arg->expr[k]->src.inc_max, arg->expr[k]->src.exc_min, arg->expr[k]->src.exc_max ); RASTER_DEBUGF(4, "NODATA expr[%d]->dst (min, max, in, ix, en, ex) = (%f, %f, %d, %d, %d, %d)", k, arg->expr[k]->dst.min, arg->expr[k]->dst.max, arg->expr[k]->dst.inc_min, arg->expr[k]->dst.inc_max, arg->expr[k]->dst.exc_min, arg->expr[k]->dst.exc_max ); k++; } /* by non-NODATA entry */ for (j = 0; j < arg->npos; j++) { if (colormap->method == CM_INTERPOLATE) { if (j == arg->npos - 1) continue; arg->expr[k]->src.min = colormap->entry[arg->pos[j + 1]].value; arg->expr[k]->src.inc_min = 1; arg->expr[k]->src.exc_min = 0; arg->expr[k]->src.max = colormap->entry[arg->pos[j]].value; arg->expr[k]->src.inc_max = 1; arg->expr[k]->src.exc_max = 0; arg->expr[k]->dst.min = colormap->entry[arg->pos[j + 1]].color[i]; arg->expr[k]->dst.max = colormap->entry[arg->pos[j]].color[i]; arg->expr[k]->dst.inc_min = 1; arg->expr[k]->dst.exc_min = 0; arg->expr[k]->dst.inc_max = 1; arg->expr[k]->dst.exc_max = 0; } else if (colormap->method == CM_NEAREST) { /* NOT last entry */ if (j != arg->npos - 1) { arg->expr[k]->src.min = ((colormap->entry[arg->pos[j]].value - colormap->entry[arg->pos[j + 1]].value) / 2.) + colormap->entry[arg->pos[j + 1]].value; arg->expr[k]->src.inc_min = 0; arg->expr[k]->src.exc_min = 0; } /* last entry */ else { arg->expr[k]->src.min = colormap->entry[arg->pos[j]].value; arg->expr[k]->src.inc_min = 1; arg->expr[k]->src.exc_min = 1; } /* NOT first entry */ if (j > 0) { arg->expr[k]->src.max = arg->expr[k - 1]->src.min; arg->expr[k]->src.inc_max = 1; arg->expr[k]->src.exc_max = 0; } /* first entry */ else { arg->expr[k]->src.max = colormap->entry[arg->pos[j]].value; arg->expr[k]->src.inc_max = 1; arg->expr[k]->src.exc_max = 1; } arg->expr[k]->dst.min = colormap->entry[arg->pos[j]].color[i]; arg->expr[k]->dst.inc_min = 1; arg->expr[k]->dst.exc_min = 0; arg->expr[k]->dst.max = colormap->entry[arg->pos[j]].color[i]; arg->expr[k]->dst.inc_max = 1; arg->expr[k]->dst.exc_max = 0; } else if (colormap->method == CM_EXACT) { arg->expr[k]->src.min = colormap->entry[arg->pos[j]].value; arg->expr[k]->src.inc_min = 1; arg->expr[k]->src.exc_min = 0; arg->expr[k]->src.max = colormap->entry[arg->pos[j]].value; arg->expr[k]->src.inc_max = 1; arg->expr[k]->src.exc_max = 0; arg->expr[k]->dst.min = colormap->entry[arg->pos[j]].color[i]; arg->expr[k]->dst.inc_min = 1; arg->expr[k]->dst.exc_min = 0; arg->expr[k]->dst.max = colormap->entry[arg->pos[j]].color[i]; arg->expr[k]->dst.inc_max = 1; arg->expr[k]->dst.exc_max = 0; } RASTER_DEBUGF(4, "expr[%d]->src (min, max, in, ix, en, ex) = (%f, %f, %d, %d, %d, %d)", k, arg->expr[k]->src.min, arg->expr[k]->src.max, arg->expr[k]->src.inc_min, arg->expr[k]->src.inc_max, arg->expr[k]->src.exc_min, arg->expr[k]->src.exc_max ); RASTER_DEBUGF(4, "expr[%d]->dst (min, max, in, ix, en, ex) = (%f, %f, %d, %d, %d, %d)", k, arg->expr[k]->dst.min, arg->expr[k]->dst.max, arg->expr[k]->dst.inc_min, arg->expr[k]->dst.inc_max, arg->expr[k]->dst.exc_min, arg->expr[k]->dst.exc_max ); k++; } /* EXACT has one last expression for catching all uncaught values */ if (colormap->method == CM_EXACT) { arg->expr[k]->src.min = 0; arg->expr[k]->src.inc_min = 1; arg->expr[k]->src.exc_min = 1; arg->expr[k]->src.max = 0; arg->expr[k]->src.inc_max = 1; arg->expr[k]->src.exc_max = 1; arg->expr[k]->dst.min = 0; arg->expr[k]->dst.inc_min = 1; arg->expr[k]->dst.exc_min = 0; arg->expr[k]->dst.max = 0; arg->expr[k]->dst.inc_max = 1; arg->expr[k]->dst.exc_max = 0; RASTER_DEBUGF(4, "expr[%d]->src (min, max, in, ix, en, ex) = (%f, %f, %d, %d, %d, %d)", k, arg->expr[k]->src.min, arg->expr[k]->src.max, arg->expr[k]->src.inc_min, arg->expr[k]->src.inc_max, arg->expr[k]->src.exc_min, arg->expr[k]->src.exc_max ); RASTER_DEBUGF(4, "expr[%d]->dst (min, max, in, ix, en, ex) = (%f, %f, %d, %d, %d, %d)", k, arg->expr[k]->dst.min, arg->expr[k]->dst.max, arg->expr[k]->dst.inc_min, arg->expr[k]->dst.inc_max, arg->expr[k]->dst.exc_min, arg->expr[k]->dst.exc_max ); k++; } /* call rt_band_reclass */ arg->band = rt_band_reclass(band, PT_8BUI, 0, 0, arg->expr, arg->nexpr); if (arg->band == NULL) { rterror("rt_raster_colormap: Could not reclassify band"); _rti_colormap_arg_destroy(arg); return NULL; } /* add reclassified band to raster */ if (rt_raster_add_band(arg->raster, arg->band, rt_raster_get_num_bands(arg->raster)) < 0) { rterror("rt_raster_colormap: Could not add reclassified band to output raster"); _rti_colormap_arg_destroy(arg); return NULL; } } rtnraster = arg->raster; arg->raster = NULL; _rti_colormap_arg_destroy(arg); return rtnraster; } �������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_core/Makefile.in��������������������������������������������������0000644�0000000�0000000�00000003173�12233537203�020566� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id: Makefile.in 12060 2013-10-28 19:44:03Z dustymugs $ # # Copyright (c) 2009 Sandro Santilli <strk@keybit.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# AR=ar rs CC=@CC@ LIBLWGEOM_LDFLAGS=../../liblwgeom/.libs/liblwgeom.a LIBLWGEOM_CFLAGS=-I../../liblwgeom LIBGDAL_CFLAGS=@LIBGDAL_CFLAGS@ LIBGDAL_LDFLAGS=@LIBGDAL_LDFLAGS@ GEOS_LDFLAGS=@GEOS_LDFLAGS@ -lgeos_c PROJ_LDFLAGS=@PROJ_LDFLAGS@ -lproj LDFLAGS=$(LIBLWGEOM_LDFLAGS) $(LIBGDAL_LDFLAGS) $(PROJ_LDFLAGS) $(GEOS_LDFLAGS) CFLAGS=@CFLAGS@ @PICFLAGS@ @WARNFLAGS@ $(LIBLWGEOM_CFLAGS) $(LIBGDAL_CFLAGS) @PROJ_CPPFLAGS@ @GEOS_CPPFLAGS@ # Standalone RTCORE objects RT_OBJS=rt_api.o RT_LIB=librtcore.a RT_HEADERS=rt_api.h all: $(RT_LIB) clean: rm -f $(RT_OBJS) rm -f $(RT_LIB) distclean: clean rm -f Makefile librtcore.a: $(RT_OBJS) $(RT_HEADERS) $(AR) $(RT_LIB) $(RT_OBJS) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/rt_core/rt_api.h�����������������������������������������������������0000644�0000000�0000000�00000214666�12313217722�020163� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * $Id: rt_api.h 12336 2014-03-22 05:29:54Z robe $ * * WKTRaster - Raster Types for PostGIS * http://www.postgis.org/support/wiki/index.php?WKTRasterHomePage * * Copyright (C) 2011-2013 Regents of the University of California * <bkpark@ucdavis.edu> * Copyright (C) 2010-2011 Jorge Arevalo <jorge.arevalo@deimos-space.com> * Copyright (C) 2010-2011 David Zwarg <dzwarg@azavea.com> * Copyright (C) 2009-2011 Pierre Racine <pierre.racine@sbf.ulaval.ca> * Copyright (C) 2009-2011 Mateusz Loskot <mateusz@loskot.net> * Copyright (C) 2008-2009 Sandro Santilli <strk@keybit.net> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef RT_API_H_INCLUDED #define RT_API_H_INCLUDED /* define the systems */ #if defined(__linux__) /* (predefined) */ #if !defined(LINUX) #define LINUX #endif #if !defined(UNIX) #define UNIX /* make sure this is defined */ #endif #endif #if defined(__FreeBSD_kernel__) || defined(__OpenBSD__) /* seems to work like Linux... */ #if !defined(LINUX) #define LINUX #endif #if !defined(UNIX) #define UNIX /* make sure this is defined */ #endif #endif #if defined(__MSDOS__) #if !defined(MSDOS) #define MSDOS /* make sure this is defined */ #endif #endif #if defined(__WIN32__) || defined(__NT__) || defined(_WIN32) #if !defined(WIN32) #define WIN32 #endif #if defined(__BORLANDC__) && defined(MSDOS) /* Borland always defines MSDOS */ #undef MSDOS #endif #endif #if defined(__APPLE__) #if !defined(UNIX) #define UNIX #endif #endif #if defined(sun) || defined(__sun) #if !defined(UNIX) #define UNIX #endif #endif /* if we are in Unix define stricmp to be strcasecmp and strnicmp to */ /* be strncasecmp. I'm not sure if all Unices have these, but Linux */ /* does. */ #if defined(UNIX) #if !defined(HAVE_STRICMP) #define stricmp strcasecmp #endif #if !defined(HAVE_STRNICMP) #define strnicmp strncasecmp #endif #endif #include <stdlib.h> /* For size_t, srand and rand */ #include <stdint.h> /* For C99 int types */ #include <float.h> /* for FLT_EPSILON, DBL_EPSILON and float type limits */ #include <limits.h> /* for integer type limits */ #include <math.h> #include "lwgeom_geos.h" #include "liblwgeom.h" #include "gdal_alg.h" #include "gdal_frmts.h" #include "gdal.h" #include "gdalwarper.h" #include "ogr_api.h" #include "ogr_srs_api.h" #include "cpl_vsi.h" #include "cpl_conv.h" #include "../../postgis_config.h" #include "../raster_config.h" /** * @file rt_api.h * * This library is the generic raster handling section of PostGIS. The raster * objects, constructors, destructors, and a set of spatial processing functions * are implemented here. * * The library is designed for use in non-PostGIS applications if necessary. The * units tests at test/core (and the future loader/dumper programs) are examples * of non-PostGIS applications using rt_core. * * Programs using this library should set up the default memory managers and error * handlers by implementing an rt_init_allocators() function, which can be as * a wrapper around the rt_install_default_allocators() function if you want * no special handling for memory management and error reporting. * **/ /** * Types definitions */ typedef struct rt_raster_t* rt_raster; typedef struct rt_band_t* rt_band; typedef struct rt_pixel_t* rt_pixel; typedef struct rt_geomval_t* rt_geomval; typedef struct rt_bandstats_t* rt_bandstats; typedef struct rt_histogram_t* rt_histogram; typedef struct rt_quantile_t* rt_quantile; typedef struct rt_valuecount_t* rt_valuecount; typedef struct rt_gdaldriver_t* rt_gdaldriver; typedef struct rt_reclassexpr_t* rt_reclassexpr; typedef struct rt_iterator_t* rt_iterator; typedef struct rt_iterator_arg_t* rt_iterator_arg; typedef struct rt_colormap_entry_t* rt_colormap_entry; typedef struct rt_colormap_t* rt_colormap; /* envelope information */ typedef struct { double MinX; double MaxX; double MinY; double MaxY; double UpperLeftX; double UpperLeftY; } rt_envelope; /** * Enum definitions */ /* function return error states */ typedef enum { ES_NONE = 0, /* no error */ ES_ERROR = 1 /* generic error */ } rt_errorstate; /* Pixel types */ typedef enum { PT_1BB=0, /* 1-bit boolean */ PT_2BUI=1, /* 2-bit unsigned integer */ PT_4BUI=2, /* 4-bit unsigned integer */ PT_8BSI=3, /* 8-bit signed integer */ PT_8BUI=4, /* 8-bit unsigned integer */ PT_16BSI=5, /* 16-bit signed integer */ PT_16BUI=6, /* 16-bit unsigned integer */ PT_32BSI=7, /* 32-bit signed integer */ PT_32BUI=8, /* 32-bit unsigned integer */ PT_32BF=10, /* 32-bit float */ PT_64BF=11, /* 64-bit float */ PT_END=13 } rt_pixtype; typedef enum { ET_INTERSECTION = 0, ET_UNION, ET_FIRST, ET_SECOND, ET_LAST, ET_CUSTOM } rt_extenttype; /** * GEOS spatial relationship tests available * * GEOS tests not available are: * intersects * crosses * disjoint */ typedef enum { GSR_OVERLAPS = 0, GSR_TOUCHES, GSR_CONTAINS, GSR_CONTAINSPROPERLY, GSR_COVERS, GSR_COVEREDBY } rt_geos_spatial_test; /** * Global functions for memory/logging handlers. */ typedef void* (*rt_allocator)(size_t size); typedef void* (*rt_reallocator)(void *mem, size_t size); typedef void (*rt_deallocator)(void *mem); typedef void (*rt_message_handler)(const char* string, va_list ap); /**************************************************************************** * Functions that must be implemented for the raster core function's caller * (for example: rt_pg functions, test functions, future loader/exporter) ****************************************************************************/ /** * Supply the memory management and error handling functions you want your * application to use */ extern void rt_init_allocators(void); /*********************************************************************/ /******************************************************************* * Functions that may be used by the raster core function's caller * (for example: rt_pg functions, test functions, future loader/exporter) *******************************************************************/ /** * Apply the default memory management (malloc() and free()) and error handlers. * Called inside rt_init_allocators() generally. */ extern void rt_install_default_allocators(void); /** * Wrappers used for managing memory. They simply call the functions defined by * the caller **/ extern void* rtalloc(size_t size); extern void* rtrealloc(void* mem, size_t size); extern void rtdealloc(void* mem); /******************************************************************/ /** * Wrappers used for reporting errors and info. **/ void rterror(const char *fmt, ...); void rtinfo(const char *fmt, ...); void rtwarn(const char *fmt, ...); /** * The default memory/logging handlers installed by lwgeom_install_default_allocators() */ void * default_rt_allocator(size_t size); void * default_rt_reallocator(void * mem, size_t size); void default_rt_deallocator(void * mem); void default_rt_error_handler(const char * fmt, va_list ap); void default_rt_warning_handler(const char * fmt, va_list ap); void default_rt_info_handler(const char * fmt, va_list ap); /* Debugging macros */ #if POSTGIS_DEBUG_LEVEL > 0 /* Display a simple message at NOTICE level */ #define RASTER_DEBUG(level, msg) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ rtinfo("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__); \ } while (0); /* Display a formatted message at NOTICE level (like printf, with variadic arguments) */ #define RASTER_DEBUGF(level, msg, ...) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ rtinfo("[%s:%s:%d] " msg, __FILE__, __func__, __LINE__, __VA_ARGS__); \ } while (0); #else /* Empty prototype that can be optimised away by the compiler for non-debug builds */ #define RASTER_DEBUG(level, msg) \ ((void) 0) /* Empty prototype that can be optimised away by the compiler for non-debug builds */ #define RASTER_DEBUGF(level, msg, ...) \ ((void) 0) #endif /*- memory context -------------------------------------------------------*/ void rt_set_handlers(rt_allocator allocator, rt_reallocator reallocator, rt_deallocator deallocator, rt_message_handler error_handler, rt_message_handler info_handler, rt_message_handler warning_handler); /*- rt_pixtype --------------------------------------------------------*/ /** * Return size in bytes of a value in the given pixtype * * @param pixtype : the pixel type to get byte size for * * @return the pixel type's byte size */ int rt_pixtype_size(rt_pixtype pixtype); /** * Return alignment requirements for data in the given pixel type. * Fast access to pixel values of this type must be aligned to as * many bytes as returned by this function. * * @param pixtype : the pixel type to get alignment requirements for * * @return the alignment requirements */ int rt_pixtype_alignment(rt_pixtype pixtype); /* Return human-readable name of pixel type */ const char* rt_pixtype_name(rt_pixtype pixtype); /* Return pixel type index from human-readable name */ rt_pixtype rt_pixtype_index_from_name(const char* pixname); /** * Return minimum value possible for pixel type * * @param pixtype : the pixel type to get minimum possible value for * * @return the minimum possible value for the pixel type. */ double rt_pixtype_get_min_value(rt_pixtype pixtype); /** * Test to see if two values are equal when clamped * * @param pixtype : the pixel type to clamp the provided values * @param val : value to compare to reference value * @param refval : reference value to be compared with * @param isequal : non-zero if clamped values are equal, 0 otherwise * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_pixtype_compare_clamped_values( rt_pixtype pixtype, double val, double refval, int *isequal ); /*- rt_pixel ----------------------------------------------------------*/ /* * Convert an array of rt_pixel objects to two 2D arrays of value and NODATA. * The dimensions of the returned 2D array are [Y][X], going by row Y and * then column X. * * @param npixel : array of rt_pixel objects * @param count : number of elements in npixel * @param x : the column of the center pixel (0-based) * @param y : the line of the center pixel (0-based) * @param distancex : the number of pixels around the specified pixel * along the X axis * @param distancey : the number of pixels around the specified pixel * along the Y axis * @param value : pointer to pointer for 2D value array * @param nodata : pointer to pointer for 2D NODATA array * @param dimx : size of value and nodata along the X axis * @param dimy : size of value and nodata along the Y axis * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_pixel_set_to_array( rt_pixel npixel, int count, int x, int y, uint16_t distancex, uint16_t distancey, double ***value, int ***nodata, int *dimx, int *dimy ); /*- rt_band ----------------------------------------------------------*/ /** * Create an in-db rt_band with no data * * @param width : number of pixel columns * @param height : number of pixel rows * @param pixtype : pixel type for the band * @param hasnodata : indicates if the band has nodata value * @param nodataval : the nodata value, will be appropriately * truncated to fit the pixtype size. * @param data : pointer to actual band data, required to * be aligned accordingly to * rt_pixtype_aligment(pixtype) and big enough * to hold raster width*height values. * Data will NOT be copied, ownership is left * to caller which is responsible to keep it * allocated for the whole lifetime of the returned * rt_band. * * @return an rt_band or NULL on failure */ rt_band rt_band_new_inline( uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t* data ); /** * Create an out-db rt_band * * @param width : number of pixel columns * @param height : number of pixel rows * @param pixtype : pixel type for the band * @param hasnodata : indicates if the band has nodata value * @param nodataval : the nodata value, will be appropriately * truncated to fit the pixtype size. * @param bandNum : 0-based band number in the external file * to associate this band with. * @param path : NULL-terminated path string pointing to the file * containing band data. The string will NOT be * copied, ownership is left to caller which is * responsible to keep it allocated for the whole * lifetime of the returned rt_band. * * @return an rt_band or NULL on failure */ rt_band rt_band_new_offline( uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t bandNum, const char* path ); /** * Create a new band duplicated from source band. Memory is allocated * for band path (if band is offline) or band data (if band is online). * The caller is responsible for freeing the memory when the returned * rt_band is destroyed. * * @param : the band to duplicate * * @return an rt_band or NULL on failure */ rt_band rt_band_duplicate(rt_band band); /** * Return non-zero if the given band data is on * the filesystem. * * @param band : the band * * @return non-zero if the given band data is on * the filesystem. */ int rt_band_is_offline(rt_band band); /** * Return band's external path (only valid when rt_band_is_offline * returns non-zero). * * @param band : the band * * @return string or NULL if band is not offline */ const char* rt_band_get_ext_path(rt_band band); /** * Return bands' external band number (only valid when * rt_band_is_offline returns non-zero). * * @param band : the band * @param bandnum : external band number (0-based) * * @return ES_NONE or ES_ERROR if band is NOT out-db */ rt_errorstate rt_band_get_ext_band_num(rt_band band, uint8_t *bandnum); /** * Return pixeltype of this band * * @param band : the band * * @return band's pixeltype */ rt_pixtype rt_band_get_pixtype(rt_band band); /** * Return width of this band * * @param band : the band * * @return band's width */ uint16_t rt_band_get_width(rt_band band); /** * Return height of this band * * @param band : the band * * @return band's height */ uint16_t rt_band_get_height(rt_band band); /** * Return 0 (FALSE) or non-zero (TRUE) indicating if rt_band is responsible * for managing the memory for band data * * @param band : the band * * @return non-zero indicates that rt_band manages the memory * allocated for band data */ int rt_band_get_ownsdata_flag(rt_band band); /* set ownsdata flag */ void rt_band_set_ownsdata_flag(rt_band band, int flag); /** * Get pointer to raster band data * * @param band : the band who's data to get * * @return pointer to band data or NULL if error */ void* rt_band_get_data(rt_band band); /** * Load offline band's data. Loaded data is internally owned * and should not be released by the caller. Data will be * released when band is destroyed with rt_band_destroy(). * * @param band : the band who's data to get * * @return ES_NONE if success, ES_ERROR if failure */ rt_errorstate rt_band_load_offline_data(rt_band band); /** * Destroy a raster band * * @param band : the band to destroy */ void rt_band_destroy(rt_band band); /** * Get hasnodata flag value * * @param band : the band on which to check the hasnodata flag * * @return the hasnodata flag. */ int rt_band_get_hasnodata_flag(rt_band band); /** * Set hasnodata flag value * @param band : the band on which to set the hasnodata flag * @param flag : the new hasnodata flag value. Must be 1 or 0. */ void rt_band_set_hasnodata_flag(rt_band band, int flag); /** * Set isnodata flag value * * @param band : the band on which to set the isnodata flag * @param flag : the new isnodata flag value. Must be 1 or 0 * * @return ES_NONE or ES_ERROR */ rt_errorstate rt_band_set_isnodata_flag(rt_band band, int flag); /** * Get isnodata flag value * * @param band : the band on which to check the isnodata flag * * @return the hasnodata flag. */ int rt_band_get_isnodata_flag(rt_band band); /** * Set nodata value * * @param band : the band to set nodata value to * @param val : the nodata value * @param converted : (optional) if non-zero, value was * truncated/clamped/converted * * @return ES_NONE or ES_ERROR */ rt_errorstate rt_band_set_nodata(rt_band band, double val, int *converted); /** * Get NODATA value * * @param band: the band whose NODATA value will be returned * @param nodata: the band's NODATA value * * @return ES_NONE or ES_ERROR */ rt_errorstate rt_band_get_nodata(rt_band band, double *nodata); /** * Set values of multiple pixels. Unlike rt_band_set_pixel, * values in vals are expected to be of the band's pixel type * as this function uses memcpy. * * It is important to be careful when using this function as * the number of values being set may exceed a pixel "row". * Remember that the band values are stored in a stream (1-D array) * regardless of what the raster's width and height might be. * So, setting a number of values may cross multiple pixel "rows". * * @param band : the band to set value to * @param x : pixel column (0-based) * @param y : pixel row (0-based) * @param vals : the pixel values to apply * @param len : # of elements in vals * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_band_set_pixel_line( rt_band band, int x, int y, void *vals, uint32_t len ); /** * Set single pixel's value * * @param band : the band to set value to * @param x : pixel column (0-based) * @param y : pixel row (0-based) * @param val : the pixel value * @param converted : (optional) non-zero if value truncated/clamped/converted * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_band_set_pixel( rt_band band, int x, int y, double val, int *converted ); /** * Get values of multiple pixels. Unlike rt_band_get_pixel, * values in vals are of the band's pixel type so cannot be * assumed to be double. Function uses memcpy. * * It is important to be careful when using this function as * the number of values being fetched may exceed a pixel "row". * Remember that the band values are stored in a stream (1-D array) * regardless of what the raster's width and height might be. * So, getting a number of values may cross multiple pixel "rows". * * @param band : the band to get pixel value from * @param x : pixel column (0-based) * @param y : pixel row (0-based) * @param len : the number of pixels to get * @param **vals : the pixel values * @param *nvals : the number of pixel values being returned * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_band_get_pixel_line( rt_band band, int x, int y, uint16_t len, void **vals, uint16_t *nvals ); /** * Get pixel value. If band's isnodata flag is TRUE, value returned * will be the band's NODATA value * * @param band : the band to get pixel value from * @param x : pixel column (0-based) * @param y : pixel row (0-based) * @param *value : pixel value * @param *nodata : 0 if pixel is not NODATA * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_band_get_pixel( rt_band band, int x, int y, double *value, int *nodata ); /** * Get nearest pixel(s) with value (not NODATA) to specified pixel * * @param band : the band to get nearest pixel(s) from * @param x : pixel column (0-based) * @param y : pixel row (0-based) * @param distancex : the number of pixels around the specified pixel * along the X axis * @param distancey : the number of pixels around the specified pixel * along the Y axis * @param exclude_nodata_value : if non-zero, ignore nodata values * to check for pixels with value * @param npixels : return set of rt_pixel object or NULL * * @return -1 on error, otherwise the number of rt_pixel objects * in npixels */ int rt_band_get_nearest_pixel( rt_band band, int x, int y, uint16_t distancex, uint16_t distancey, int exclude_nodata_value, rt_pixel *npixels ); /** * Search band for pixel(s) with search values * * @param band : the band to query for minimum and maximum pixel values * @param exclude_nodata_value : if non-zero, ignore nodata values * @param searchset : array of values to count * @param searchcount : the number of search values * @param pixels : pixels with the search value * * @return -1 on error, otherwise number of pixels */ int rt_band_get_pixel_of_value( rt_band band, int exclude_nodata_value, double *searchset, int searchcount, rt_pixel *pixels ); /** * Returns the minimal possible value for the band according to the pixel type. * * @param band : the band to get info from * * @return the minimal possible value for the band. */ double rt_band_get_min_value(rt_band band); /** * Returns TRUE if the band is only nodata values * * @param band : the band to get info from * * @return TRUE if the band is only nodata values, FALSE otherwise */ int rt_band_check_is_nodata(rt_band band); /** * Compare clamped value to band's clamped NODATA value * * @param band : the band whose NODATA value will be used for comparison * @param val : the value to compare to the NODATA value * * @return 2 if unclamped value is unclamped NODATA * 1 if clamped value is clamped NODATA * 0 if clamped values is NOT clamped NODATA */ int rt_band_clamped_value_is_nodata(rt_band band, double val); /** * Correct value when clamped value is equal to clamped NODATA value. * Correction does NOT occur if unclamped value is exactly unclamped * NODATA value. * * @param band : the band whose NODATA value will be used for comparison * @param val : the value to compare to the NODATA value and correct * @param *newval : pointer to corrected value * @param *corrected : (optional) non-zero if val was corrected * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_band_corrected_clamped_value( rt_band band, double val, double *newval, int *corrected ); /** * Compute summary statistics for a band * * @param band : the band to query for summary stats * @param exclude_nodata_value : if non-zero, ignore nodata values * @param sample : percentage of pixels to sample * @param inc_vals : flag to include values in return struct * @param cK : number of pixels counted thus far in coverage * @param cM : M component of 1-pass stddev for coverage * @param cQ : Q component of 1-pass stddev for coverage * * @return the summary statistics for a band or NULL */ rt_bandstats rt_band_get_summary_stats( rt_band band, int exclude_nodata_value, double sample, int inc_vals, uint64_t *cK, double *cM, double *cQ ); /** * Count the distribution of data * * @param stats : a populated stats struct for processing * @param bin_count : the number of bins to group the data by * @param bin_width : the width of each bin as an array * @param bin_width_count : number of values in bin_width * @param right : evaluate bins by (a,b] rather than default [a,b) * @param min : user-defined minimum value of the histogram * a value less than the minimum value is not counted in any bins * if min = max, min and max are not used * @param max : user-defined maximum value of the histogram * a value greater than the max value is not counted in any bins * if min = max, min and max are not used * @param rtn_count : set to the number of bins being returned * * @return the histogram of the data or NULL */ rt_histogram rt_band_get_histogram( rt_bandstats stats, int bin_count, double *bin_widths, int bin_widths_count, int right, double min, double max, uint32_t *rtn_count ); /** * Compute the default set of or requested quantiles for a set of data * the quantile formula used is same as Excel and R default method * * @param stats : a populated stats struct for processing * @param quantiles : the quantiles to be computed * @param quantiles_count : the number of quantiles to be computed * @param rtn_count : the number of quantiles being returned * * @return the default set of or requested quantiles for a band or NULL */ rt_quantile rt_band_get_quantiles(rt_bandstats stats, double *quantiles, int quantiles_count, uint32_t *rtn_count); struct quantile_llist; int quantile_llist_destroy( struct quantile_llist **list, uint32_t list_count ); /** * Compute the default set of or requested quantiles for a coverage * * This function is based upon the algorithm described in: * * A One-Pass Space-Efficient Algorithm for Finding Quantiles (1995) * by Rakesh Agrawal, Arun Swami * in Proc. 7th Intl. Conf. Management of Data (COMAD-95) * * http://www.almaden.ibm.com/cs/projects/iis/hdb/Publications/papers/comad95.pdf * * In the future, it may be worth exploring algorithms that don't * require the size of the coverage * * @param band : the band to include in the quantile search * @param exclude_nodata_value : if non-zero, ignore nodata values * @param sample : percentage of pixels to sample * @param cov_count : number of values in coverage * @param qlls : set of quantile_llist structures * @param qlls_count : the number of quantile_llist structures * @param quantiles : the quantiles to be computed * if bot qlls and quantiles provided, qlls is used * @param quantiles_count : the number of quantiles to be computed * @param rtn_count : the number of quantiles being returned * * @return the default set of or requested quantiles for a band or NULL */ rt_quantile rt_band_get_quantiles_stream( rt_band band, int exclude_nodata_value, double sample, uint64_t cov_count, struct quantile_llist **qlls, uint32_t *qlls_count, double *quantiles, int quantiles_count, uint32_t *rtn_count ); /** * Count the number of times provided value(s) occur in * the band * * @param band : the band to query for minimum and maximum pixel values * @param exclude_nodata_value : if non-zero, ignore nodata values * @param search_values : array of values to count * @param search_values_count : the number of search values * @param roundto : the decimal place to round the values to * @param rtn_total : the number of pixels examined in the band * @param rtn_count : the number of value counts being returned * * @return the number of times the provide value(s) occur or NULL */ rt_valuecount rt_band_get_value_count( rt_band band, int exclude_nodata_value, double *search_values, uint32_t search_values_count, double roundto, uint32_t *rtn_total, uint32_t *rtn_count ); /** * Returns new band with values reclassified * * @param srcband : the band who's values will be reclassified * @param pixtype : pixel type of the new band * @param hasnodata : indicates if the band has a nodata value * @param nodataval : nodata value for the new band * @param exprset : array of rt_reclassexpr structs * @param exprcount : number of elements in expr * * @return a new rt_band or NULL on error */ rt_band rt_band_reclass( rt_band srcband, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, rt_reclassexpr *exprset, int exprcount ); /*- rt_raster --------------------------------------------------------*/ /** * Construct a raster with given dimensions. * * Transform will be set to identity. * Will contain no bands. * * @param width : number of pixel columns * @param height : number of pixel rows * * @return an rt_raster or NULL if out of memory */ rt_raster rt_raster_new(uint32_t width, uint32_t height); /** * Construct an rt_raster from a binary WKB representation * * @param wkb : an octet stream * @param wkbsize : size (in bytes) of the wkb octet stream * * @return an rt_raster or NULL on error (out of memory or * malformed WKB). * */ rt_raster rt_raster_from_wkb(const uint8_t* wkb, uint32_t wkbsize); /** * Construct an rt_raster from a text HEXWKB representation * * @param hexwkb : an hex-encoded stream * @param hexwkbsize : size (in bytes) of the hexwkb stream * * @return an rt_raster or NULL on error (out of memory or * malformed WKB). * */ rt_raster rt_raster_from_hexwkb(const char* hexwkb, uint32_t hexwkbsize); /** * Return this raster in WKB form * * @param raster : the raster * @param outasin : if TRUE, out-db bands are treated as in-db * @param wkbsize : will be set to the size of returned wkb form * * @return WKB of raster or NULL on error */ uint8_t *rt_raster_to_wkb(rt_raster raster, int outasin, uint32_t *wkbsize); /** * Return this raster in HEXWKB form (null-terminated hex) * * @param raster : the raster * @param outasin : if TRUE, out-db bands are treated as in-db * @param hexwkbsize : will be set to the size of returned wkb form, * not including the null termination * * @return HEXWKB of raster or NULL on error */ char *rt_raster_to_hexwkb(rt_raster raster, int outasin, uint32_t *hexwkbsize); /** * Release memory associated to a raster * * Note that this will not release data * associated to the band themselves (but only * the one associated with the pointers pointing * at them). * * @param raster : the raster to destroy */ void rt_raster_destroy(rt_raster raster); /* Get number of bands */ int rt_raster_get_num_bands(rt_raster raster); /** * Return Nth band, or NULL if unavailable * * @param raster : the raster * @param bandNum : 0-based index of the band to return * * Return band at specified index or NULL if error */ rt_band rt_raster_get_band(rt_raster raster, int bandNum); /* Get number of rows */ uint16_t rt_raster_get_width(rt_raster raster); /* Get number of columns */ uint16_t rt_raster_get_height(rt_raster raster); /** * Add band data to a raster. * * @param raster : the raster to add a band to * @param band : the band to add, ownership left to caller. * Band dimensions are required to match with raster ones. * @param index : the position where to insert the new band (0 based) * * @return identifier (position) for the just-added raster, or -1 on error */ int rt_raster_add_band(rt_raster raster, rt_band band, int index); /** * Generate a new inline band and add it to a raster. * * @param raster : the raster to add a band to * @param pixtype : the pixel type for the new band * @param initialvalue : initial value for pixels * @param hasnodata : indicates if the band has a nodata value * @param nodatavalue : nodata value for the new band * @param index : position to add the new band in the raster * * @return identifier (position) for the just-added raster, or -1 on error */ int rt_raster_generate_new_band( rt_raster raster, rt_pixtype pixtype, double initialvalue, uint32_t hasnodata, double nodatavalue, int index ); /** * Set scale in projection units * * @param raster : the raster to set georeference of * @param scaleX : scale X in projection units * @param scaleY : scale Y height in projection units * * NOTE: doesn't recompute offsets */ void rt_raster_set_scale(rt_raster raster, double scaleX, double scaleY); /** * Get scale X in projection units * * @param raster : the raster to get georeference of * * @return scale X in projection units */ double rt_raster_get_x_scale(rt_raster raster); /** * Get scale Y in projection units * * @param raster : the raster to get georeference of * * @return scale Y in projection units */ double rt_raster_get_y_scale(rt_raster raster); /** * Set insertion points in projection units * * @param raster : the raster to set georeference of * @param x : x ordinate of the upper-left corner of upper-left pixel, * in projection units * @param y : y ordinate of the upper-left corner of upper-left pixel, * in projection units */ void rt_raster_set_offsets(rt_raster raster, double x, double y); /** * Get raster x offset, in projection units * * @param raster : the raster to get georeference of * * @return x ordinate of the upper-left corner of upper-left pixel, * in projection units */ double rt_raster_get_x_offset(rt_raster raster); /** * Get raster y offset, in projection units * * @param raster : the raster to get georeference of * * @return y ordinate of the upper-left corner of upper-left pixel, * in projection units */ double rt_raster_get_y_offset(rt_raster raster); /** * Set skews about the X and Y axis * * @param raster : the raster to set georeference of * @param skewX : skew about the x axis * @param skewY : skew about the y axis */ void rt_raster_set_skews(rt_raster raster, double skewX, double skewY); /** * Get skew about the X axis * * @param raster : the raster to set georeference of * @return skew about the Y axis */ double rt_raster_get_x_skew(rt_raster raster); /** * Get skew about the Y axis * * @param raster : the raster to set georeference of * @return skew about the Y axis */ double rt_raster_get_y_skew(rt_raster raster); /** * Calculates and returns the physically significant descriptors embodied * in the geotransform attached to the provided raster. * * @param rast the raster containing the geotransform of interest * @param i_mag size of a pixel along the transformed i axis * @param j_mag size of a pixel along the transformed j axis * @param theta_i angle by which the raster is rotated (radians positive clockwise) * @param theta_ij angle from transformed i axis to transformed j axis * (radians positive counterclockwise) * */ void rt_raster_get_phys_params(rt_raster rast, double *i_mag, double *j_mag, double *theta_i, double *theta_ij) ; /** * Calculates the geotransform coefficients and applies them to the * supplied raster. The coefficients will not be applied if there was an * error during the calculation. * * This method affects only the scale and skew coefficients. The offset * parameters are not changed. * * @param rast the raster in which the geotransform will be stored. * @param i_mag size of a pixel along the transformed i axis * @param j_mag size of a pixel along the transformed j axis * @param theta_i angle by which the raster is rotated (radians positive clockwise) * @param theta_ij angle from transformed i axis to transformed j axis * (radians positive counterclockwise) */ void rt_raster_set_phys_params(rt_raster rast, double i_mag, double j_mag, double theta_i, double theta_ij) ; /** * Calculates the physically significant descriptors embodied in an * arbitrary geotransform. Always succeeds unless one or more of the * output pointers is set to NULL. * * @param xscale geotransform coefficient o_11 * @param xskew geotransform coefficient o_12 * @param yskew geotransform coefficient o_21 * @param yscale geotransform coefficient o_22 * @param i_mag size of a pixel along the transformed i axis * @param j_mag size of a pixel along the transformed j axis * @param theta_i angle by which the raster is rotated (radians positive clockwise) * @param theta_ij angle from transformed i axis to transformed j axis * (radians positive counterclockwise) */ void rt_raster_calc_phys_params(double xscale, double xskew, double yskew, double yscale, double *i_mag, double *j_mag, double *theta_i, double *theta_ij) ; /** * Calculates the coefficients of a geotransform given the physically * significant parameters describing the transform. Will fail if any of the * result pointers is NULL, or if theta_ij has an illegal value (0 or PI). * * @param i_mag size of a pixel along the transformed i axis * @param j_mag size of a pixel along the transformed j axis * @param theta_i angle by which the raster is rotated (radians positive clockwise) * @param theta_ij angle from transformed i axis to transformed j axis * (radians positive counterclockwise) * @param xscale geotransform coefficient o_11 * @param xskew geotransform coefficient o_12 * @param yskew geotransform coefficient o_21 * @param yscale geotransform coefficient o_22 * @return 1 if the calculation succeeded, 0 if error. */ int rt_raster_calc_gt_coeff(double i_mag, double j_mag, double theta_i, double theta_ij, double *xscale, double *xskew, double *yskew, double *yscale) ; /** * Set raster's SRID * * @param raster : the raster to set SRID of * @param srid : the SRID to set for the raster */ void rt_raster_set_srid(rt_raster raster, int32_t srid); /** * Get raster's SRID * @param raster : the raster to set SRID of * * @return the raster's SRID */ int32_t rt_raster_get_srid(rt_raster raster); /** * Get 6-element array of raster inverse geotransform matrix * * @param raster : the raster to get matrix of * @param gt : optional input parameter, 6-element geotransform matrix * @param igt : output parameter, 6-element inverse geotransform matrix * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_inverse_geotransform_matrix( rt_raster raster, double *gt, double *igt ); /** * Get 6-element array of raster geotransform matrix * * @param raster : the raster to get matrix of * @param gt : output parameter, 6-element geotransform matrix */ void rt_raster_get_geotransform_matrix(rt_raster raster, double *gt); /** * Set raster's geotransform using 6-element array * * @param raster : the raster to set matrix of * @param gt : intput parameter, 6-element geotransform matrix * */ void rt_raster_set_geotransform_matrix(rt_raster raster, double *gt); /** * Convert an xr, yr raster point to an xw, yw point on map * * @param raster : the raster to get info from * @param xr : the pixel's column * @param yr : the pixel's row * @param xw : output parameter, X ordinate of the geographical point * @param yw : output parameter, Y ordinate of the geographical point * @param gt : input/output parameter, 3x2 geotransform matrix * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_cell_to_geopoint( rt_raster raster, double xr, double yr, double* xw, double* yw, double *gt ); /** * Convert an xw, yw map point to a xr, yr raster point * * @param raster : the raster to get info from * @param xw : X ordinate of the geographical point * @param yw : Y ordinate of the geographical point * @param xr : output parameter, the pixel's column * @param yr : output parameter, the pixel's row * @param igt : input/output parameter, inverse geotransform matrix * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_geopoint_to_cell( rt_raster raster, double xw, double yw, double *xr, double *yr, double *igt ); /** * Get raster's convex hull. * * The convex hull is a 4 vertices (5 to be closed) * single ring polygon bearing the raster's rotation and using * projection coordinates. * * @param raster : the raster to get info from * @param **hull : pointer to convex hull * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_convex_hull(rt_raster raster, LWGEOM **hull); /** * Get raster's envelope. * * The envelope is the minimum bounding rectangle of the raster * * @param raster : the raster to get envelope of * @param env : pointer to rt_envelope * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_envelope( rt_raster raster, rt_envelope *env ); /** * Get raster perimeter * * The perimeter is a 4 vertices (5 to be closed) * single ring polygon bearing the raster's rotation and using * projection coordinates. * * @param raster : the raster to get info from * @param nband : the band for the perimeter. 0-based * @param **perimeter : pointer to perimeter * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_get_perimeter( rt_raster raster, int nband, LWGEOM **perimeter ); /* * Compute skewed extent that covers unskewed extent. * * @param envelope : unskewed extent of type rt_envelope * @param skew : pointer to 2-element array (x, y) of skew * @param scale : pointer to 2-element array (x, y) of scale * @param tolerance : value between 0 and 1 where the smaller the tolerance * results in an extent approaching the "minimum" skewed extent. * If value <= 0, tolerance = 0.1. If value > 1, tolerance = 1. * * @return skewed raster who's extent covers unskewed extent, NULL on error */ rt_raster rt_raster_compute_skewed_raster( rt_envelope extent, double *skew, double *scale, double tolerance ); /** * Get a raster pixel as a polygon. * * The pixel shape is a 4 vertices (5 to be closed) single * ring polygon bearing the raster's rotation * and using projection coordinates * * @param raster : the raster to get pixel from * @param x : the column number * @param y : the row number * * @return the pixel polygon, or NULL on error. * */ LWPOLY* rt_raster_pixel_as_polygon(rt_raster raster, int x, int y); /** * Get a raster as a surface (multipolygon). If a band is specified, * those pixels with value (not NODATA) contribute to the area * of the output multipolygon. * * @param raster : the raster to convert to a multipolygon * @param nband : the 0-based band of raster rast to use * if value is less than zero, bands are ignored. * @param **surface : raster as a surface (multipolygon). * if all pixels are NODATA, NULL is set * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_raster_surface(rt_raster raster, int nband, LWMPOLY **surface); /** * Returns a set of "geomval" value, one for each group of pixel * sharing the same value for the provided band. * * A "geomval" value is a complex type composed of a geometry * in LWPOLY representation (one for each group of pixel sharing * the same value) and the value associated with this geometry. * * @param raster : the raster to get info from. * @param nband : the band to polygonize. 0-based * @param exclude_nodata_value : if non-zero, ignore nodata values * to check for pixels with value * * @return A set of "geomval" values, one for each group of pixels * sharing the same value for the provided band. The returned values are * LWPOLY geometries. */ rt_geomval rt_raster_gdal_polygonize( rt_raster raster, int nband, int exclude_nodata_value, int * pnElements ); /** * Return this raster in serialized form. * Memory (band data included) is copied from rt_raster. * * Serialized form is documented in doc/RFC1-SerializedFormat. */ void* rt_raster_serialize(rt_raster raster); /** * Return a raster from a serialized form. * * Serialized form is documented in doc/RFC1-SerializedFormat. * * NOTE: the raster will contain pointer to the serialized * form (including band data), which must be kept alive. */ rt_raster rt_raster_deserialize(void* serialized, int header_only); /** * Return TRUE if the raster is empty. i.e. is NULL, width = 0 or height = 0 * * @param raster : the raster to get info from * * @return TRUE if the raster is empty, FALSE otherwise */ int rt_raster_is_empty(rt_raster raster); /** * Return TRUE if the raster has a band of this number. * * @param raster : the raster to get info from * @param nband : the band number. 0-based * * @return TRUE if the raster has a band of this number, FALSE otherwise */ int rt_raster_has_band(rt_raster raster, int nband); /** * Copy one band from one raster to another. Bands are duplicated from * fromrast to torast using rt_band_duplicate. The caller will need * to ensure that the copied band's data or path remains allocated * for the lifetime of the copied bands. * * @param torast : raster to copy band to * @param fromrast : raster to copy band from * @param fromindex : index of band in source raster, 0-based * @param toindex : index of new band in destination raster, 0-based * * @return The band index of the second raster where the new band is copied. * -1 if error */ int rt_raster_copy_band( rt_raster torast, rt_raster fromrast, int fromindex, int toindex ); /** * Construct a new rt_raster from an existing rt_raster and an array * of band numbers * * @param raster : the source raster * @param bandNums : array of band numbers to extract from source raster * and add to the new raster (0 based) * @param count : number of elements in bandNums * * @return a new rt_raster or NULL on error */ rt_raster rt_raster_from_band(rt_raster raster, uint32_t *bandNums, int count); /** * Replace band at provided index with new band * * @param raster: raster of band to be replaced * @param band : new band to add to raster * @param index : index of band to replace (0-based) * * @return NULL on error or replaced band */ rt_band rt_raster_replace_band(rt_raster raster, rt_band band, int index); /** * Clone an existing raster * * @param raster : raster to clone * @param deep : flag indicating if bands should be cloned * * @return a new rt_raster or NULL on error */ rt_raster rt_raster_clone(rt_raster raster, uint8_t deep); /** * Return formatted GDAL raster from raster * * @param raster : the raster to convert * @param srs : the raster's coordinate system in OGC WKT * @param format : format to convert to. GDAL driver short name * @param options : list of format creation options. array of strings * @param gdalsize : will be set to the size of returned bytea * * @return formatted GDAL raster. the calling function is responsible * for freeing the returned data using CPLFree() */ uint8_t *rt_raster_to_gdal(rt_raster raster, const char *srs, char *format, char **options, uint64_t *gdalsize); /** * Returns a set of available GDAL drivers * * @param drv_count : number of GDAL drivers available * @param cancc : if non-zero, filter drivers to only those * with support for CreateCopy and VirtualIO * * @return set of "gdaldriver" values of available GDAL drivers */ rt_gdaldriver rt_raster_gdal_drivers(uint32_t *drv_count, uint8_t cancc); /** * Return GDAL dataset using GDAL MEM driver from raster * * @param raster : raster to convert to GDAL MEM * @param srs : the raster's coordinate system in OGC WKT * @param bandNums : array of band numbers to extract from raster * and include in the GDAL dataset (0 based) * @param excludeNodataValues : array of zero, nonzero where if non-zero, * ignore nodata values for the band * to check for pixels with value * @param count : number of elements in bandNums and exclude_nodata_values * @param rtn_drv : is set to the GDAL driver object * * @return GDAL dataset using GDAL MEM driver */ GDALDatasetH rt_raster_to_gdal_mem( rt_raster raster, const char *srs, uint32_t *bandNums, int *excludeNodataValues, int count, GDALDriverH *rtn_drv ); /** * Return a raster from a GDAL dataset * * @param ds : the GDAL dataset to convert to a raster * * @return raster or NULL */ rt_raster rt_raster_from_gdal_dataset(GDALDatasetH ds); /** * Return a warped raster using GDAL Warp API * * @param raster : raster to transform * @param src_srs : the raster's coordinate system in OGC WKT * @param dst_srs : the warped raster's coordinate system in OGC WKT * @param scale_x : the x size of pixels of the warped raster's pixels in * units of dst_srs * @param scale_y : the y size of pixels of the warped raster's pixels in * units of dst_srs * @param width : the number of columns of the warped raster. note that * width/height CANNOT be used with scale_x/scale_y * @param height : the number of rows of the warped raster. note that * width/height CANNOT be used with scale_x/scale_y * @param ul_xw : the X value of upper-left corner of the warped raster in * units of dst_srs * @param ul_yw : the Y value of upper-left corner of the warped raster in * units of dst_srs * @param grid_xw : the X value of point on a grid to align warped raster * to in units of dst_srs * @param grid_yw : the Y value of point on a grid to align warped raster * to in units of dst_srs * @param skew_x : the X skew of the warped raster in units of dst_srs * @param skew_y : the Y skew of the warped raster in units of dst_srs * @param resample_alg : the resampling algorithm * @param max_err : maximum error measured in input pixels permitted * (0.0 for exact calculations) * * @return the warped raster or NULL */ rt_raster rt_raster_gdal_warp( rt_raster raster, const char *src_srs, const char *dst_srs, double *scale_x, double *scale_y, int *width, int *height, double *ul_xw, double *ul_yw, double *grid_xw, double *grid_yw, double *skew_x, double *skew_y, GDALResampleAlg resample_alg, double max_err); /** * Return a raster of the provided geometry * * @param wkb : WKB representation of the geometry to convert * @param wkb_len : length of the WKB representation of the geometry * @param srs : the geometry's coordinate system in OGC WKT * @param num_bands : number of bands in the output raster * @param pixtype : data type of each band * @param init : array of values to initialize each band with * @param value : array of values for pixels of geometry * @param nodata : array of nodata values for each band * @param hasnodata : array flagging the presence of nodata for each band * @param width : the number of columns of the raster * @param height : the number of rows of the raster * @param scale_x : the pixel width of the raster * @param scale_y : the pixel height of the raster * @param ul_xw : the X value of upper-left corner of the raster * @param ul_yw : the Y value of upper-left corner of the raster * @param grid_xw : the X value of point on grid to align raster to * @param grid_yw : the Y value of point on grid to align raster to * @param skew_x : the X skew of the raster * @param skew_y : the Y skew of the raster * @param options : array of options. only option is "ALL_TOUCHED" * * @return the raster of the provided geometry or NULL */ rt_raster rt_raster_gdal_rasterize(const unsigned char *wkb, uint32_t wkb_len, const char *srs, uint32_t num_bands, rt_pixtype *pixtype, double *init, double *value, double *nodata, uint8_t *hasnodata, int *width, int *height, double *scale_x, double *scale_y, double *ul_xw, double *ul_yw, double *grid_xw, double *grid_yw, double *skew_x, double *skew_y, char **options ); /** * Return ES_ERROR if error occurred in function. * Parameter intersects returns non-zero if two rasters intersect * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param intersects : non-zero value if the two rasters' bands intersects * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_intersects( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *intersects ); /** * Return ES_ERROR if error occurred in function. * Parameter overlaps returns non-zero if two rasters overlap * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param overlaps : non-zero value if the two rasters' bands overlaps * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_overlaps( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *overlaps ); /** * Return ES_ERROR if error occurred in function. * Parameter contains returns non-zero if rast1 contains rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param contains : non-zero value if rast1 contains rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_contains( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *contains ); /** * Return ES_ERROR if error occurred in function. * Parameter contains returns non-zero if rast1 contains properly rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param contains : non-zero value if rast1 contains properly rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_contains_properly( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *contains ); /** * Return ES_ERROR if error occurred in function. * Parameter touches returns non-zero if two rasters touch * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param touches : non-zero value if the two rasters' bands touch * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_touches( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *touches ); /** * Return ES_ERROR if error occurred in function. * Parameter covers returns non-zero if rast1 covers rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param covers : non-zero value if rast1 covers rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_covers( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *covers ); /** * Return ES_ERROR if error occurred in function. * Parameter coveredby returns non-zero if rast1 is covered by rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param coveredby : non-zero value if rast1 is covered by rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_coveredby( rt_raster rast1, int nband1, rt_raster rast2, int nband2, int *coveredby ); /** * Return ES_ERROR if error occurred in function. * Parameter dwithin returns non-zero if rast1 is within the specified * distance of rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param dwithin : non-zero value if rast1 is within the specified distance * of rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_within_distance( rt_raster rast1, int nband1, rt_raster rast2, int nband2, double distance, int *dwithin ); /** * Return ES_ERROR if error occurred in function. * Parameter dfwithin returns non-zero if rast1 is fully within the specified * distance of rast2 * * @param rast1 : the first raster whose band will be tested * @param nband1 : the 0-based band of raster rast1 to use * if value is less than zero, bands are ignored. * if nband1 gte zero, nband2 must be gte zero * @param rast2 : the second raster whose band will be tested * @param nband2 : the 0-based band of raster rast2 to use * if value is less than zero, bands are ignored * if nband2 gte zero, nband1 must be gte zero * @param dfwithin : non-zero value if rast1 is fully within the specified * distance of rast2 * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_fully_within_distance( rt_raster rast1, int nband1, rt_raster rast2, int nband2, double distance, int *dfwithin ); /* * Return ES_ERROR if error occurred in function. * Paramter aligned returns non-zero if two rasters are aligned * * @param rast1 : the first raster for alignment test * @param rast2 : the second raster for alignment test * @param *aligned : non-zero value if the two rasters are aligned * @param *reason : reason why rasters are not aligned * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_same_alignment( rt_raster rast1, rt_raster rast2, int *aligned, char **reason ); /* * Return raster of computed extent specified extenttype applied * on two input rasters. The raster returned should be freed by * the caller * * @param rast1 : the first raster * @param rast2 : the second raster * @param extenttype : type of extent for the output raster * @param *rtnraster : raster of computed extent * @param *offset : 4-element array indicating the X,Y offsets * for each raster. 0,1 for rast1 X,Y. 2,3 for rast2 X,Y. * * @return ES_NONE if success, ES_ERROR if error */ rt_errorstate rt_raster_from_two_rasters( rt_raster rast1, rt_raster rast2, rt_extenttype extenttype, rt_raster *rtnraster, double *offset ); /** * n-raster iterator. Returns a raster with one band. * The raster returned should be freed by the caller * * @param itrset : set of rt_iterator objects. * @param itrcount : number of objects in itrset. * @param extenttype : type of extent for the output raster. * @param customextent : raster specifying custom extent. * is only used if extenttype is ET_CUSTOM. * @param pixtype : the desired pixel type of the output raster's band. * @param hasnodata : indicates if the band has nodata value * @param nodataval : the nodata value, will be appropriately * truncated to fit the pixtype size. * @param distancex : the number of pixels around the specified pixel * along the X axis * @param distancey : the number of pixels around the specified pixel * along the Y axis * @param *userarg : pointer to any argument that is passed as-is to callback. * @param *callback : callback function for actual processing of pixel values. * @param *rtnraster : return one band raster from iterator process * * The callback function _must_ have the following signature. * * int FNAME(rt_iterator_arg arg, void *userarg, double *value, int *nodata) * * The callback function _must_ return zero (error) or non-zero (success) * indicating whether the function ran successfully. * The parameters passed to the callback function are as follows. * * - rt_iterator_arg arg : struct containing pixel values, NODATA flags and metadata * - void *userarg : NULL or calling function provides to rt_raster_iterator() for use by callback function * - double *value : value of pixel to be burned by rt_raster_iterator() * - int *nodata : flag (0 or 1) indicating that pixel to be burned is NODATA * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_raster_iterator( rt_iterator itrset, uint16_t itrcount, rt_extenttype extenttype, rt_raster customextent, rt_pixtype pixtype, uint8_t hasnodata, double nodataval, uint16_t distancex, uint16_t distancey, void *userarg, int (*callback)( rt_iterator_arg arg, void *userarg, double *value, int *nodata ), rt_raster *rtnraster ); /** * Returns a new raster with up to four 8BUI bands (RGBA) from * applying a colormap to the user-specified band of the * input raster. * * @param raster: input raster * @param nband: 0-based index of the band to process with colormap * @param colormap: rt_colormap object of colormap to apply to band * * @return new raster or NULL on error */ rt_raster rt_raster_colormap( rt_raster raster, int nband, rt_colormap colormap ); /*- utilities -------------------------------------------------------*/ /* * rt_core memory functions */ extern void *rtalloc(size_t size); extern void *rtrealloc(void *mem, size_t size); extern void rtdealloc(void *mem); /* Set of functions to clamp double to int of different size */ #if !defined(POSTGIS_RASTER_WARN_ON_TRUNCATION) #define POSTGIS_RASTER_WARN_ON_TRUNCATION 0 #endif #define POSTGIS_RT_1BBMAX 1 #define POSTGIS_RT_2BUIMAX 3 #define POSTGIS_RT_4BUIMAX 15 uint8_t rt_util_clamp_to_1BB(double value); uint8_t rt_util_clamp_to_2BUI(double value); uint8_t rt_util_clamp_to_4BUI(double value); int8_t rt_util_clamp_to_8BSI(double value); uint8_t rt_util_clamp_to_8BUI(double value); int16_t rt_util_clamp_to_16BSI(double value); uint16_t rt_util_clamp_to_16BUI(double value); int32_t rt_util_clamp_to_32BSI(double value); uint32_t rt_util_clamp_to_32BUI(double value); float rt_util_clamp_to_32F(double value); int rt_util_dbl_trunc_warning( double initialvalue, int32_t checkvalint, uint32_t checkvaluint, float checkvalfloat, double checkvaldouble, rt_pixtype pixtype ); /** * Convert cstring name to GDAL Resample Algorithm * * @param algname : cstring name to convert * * @return valid GDAL resampling algorithm */ GDALResampleAlg rt_util_gdal_resample_alg(const char *algname); /** * Convert rt_pixtype to GDALDataType * * @param pt : pixeltype to convert * * @return valid GDALDataType */ GDALDataType rt_util_pixtype_to_gdal_datatype(rt_pixtype pt); /** * Convert GDALDataType to rt_pixtype * * @param gdt : GDAL datatype to convert * * @return valid rt_pixtype */ rt_pixtype rt_util_gdal_datatype_to_pixtype(GDALDataType gdt); /* get GDAL runtime version information */ const char* rt_util_gdal_version(const char *request); /* computed extent type from c string */ rt_extenttype rt_util_extent_type(const char *name); /* convert the spatial reference string from a GDAL recognized format to either WKT or Proj4 */ char* rt_util_gdal_convert_sr(const char *srs, int proj4); /* is the spatial reference string supported by GDAL */ int rt_util_gdal_supported_sr(const char *srs); /** * Get auth name and code * * @param authname: authority organization of code. calling function * is expected to free the memory allocated for value * @param authcode: code assigned by authority organization. calling function * is expected to free the memory allocated for value * * @return ES_NONE on success, ES_ERROR on error */ rt_errorstate rt_util_gdal_sr_auth_info(GDALDatasetH hds, char **authname, char **authcode); /* is GDAL configured correctly? */ int rt_util_gdal_configured(void); /* register all GDAL drivers */ void rt_util_gdal_register_all(void); /* is the driver registered? */ int rt_util_gdal_driver_registered(const char *drv); void rt_util_from_ogr_envelope( OGREnvelope env, rt_envelope *ext ); void rt_util_to_ogr_envelope( rt_envelope ext, OGREnvelope *env ); LWPOLY * rt_util_envelope_to_lwpoly( rt_envelope ext ); int rt_util_same_geotransform_matrix( double *gt1, double *gt2 ); /* coordinates in RGB and HSV are floating point values between 0 and 1 */ rt_errorstate rt_util_rgb_to_hsv( double rgb[3], double hsv[3] ); /* coordinates in RGB and HSV are floating point values between 0 and 1 */ rt_errorstate rt_util_hsv_to_rgb( double hsv[3], double rgb[3] ); /* helper macros for consistent floating point equality checks */ #define FLT_NEQ(x, y) (fabs(x - y) > FLT_EPSILON) #define FLT_EQ(x, y) (!FLT_NEQ(x, y)) #define DBL_NEQ(x, y) (fabs(x - y) > DBL_EPSILON) #define DBL_EQ(x, y) (!DBL_NEQ(x, y)) /* helper macro for symmetrical rounding */ #define ROUND(x, y) (((x > 0.0) ? floor((x * pow(10, y) + 0.5)) : ceil((x * pow(10, y) - 0.5))) / pow(10, y)) /** * Struct definitions * * These structs are defined here as they are needed elsewhere * including rt_pg/rt_pg.c and reduce duplicative declarations * */ struct rt_raster_serialized_t { /*---[ 8 byte boundary ]---{ */ uint32_t size; /* required by postgresql: 4 bytes */ uint16_t version; /* format version (this is version 0): 2 bytes */ uint16_t numBands; /* Number of bands: 2 bytes */ /* }---[ 8 byte boundary ]---{ */ double scaleX; /* pixel width: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double scaleY; /* pixel height: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double ipX; /* insertion point X: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double ipY; /* insertion point Y: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double skewX; /* skew about the X axis: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double skewY; /* skew about the Y axis: 8 bytes */ /* }---[ 8 byte boundary ]--- */ int32_t srid; /* Spatial reference id: 4 bytes */ uint16_t width; /* pixel columns: 2 bytes */ uint16_t height; /* pixel rows: 2 bytes */ }; /* NOTE: the initial part of this structure matches the layout * of data in the serialized form version 0, starting * from the numBands element */ struct rt_raster_t { uint32_t size; uint16_t version; /* Number of bands, all share the same dimension * and georeference */ uint16_t numBands; /* Georeference (in projection units) */ double scaleX; /* pixel width */ double scaleY; /* pixel height */ double ipX; /* geo x ordinate of the corner of upper-left pixel */ double ipY; /* geo y ordinate of the corner of bottom-right pixel */ double skewX; /* skew about the X axis*/ double skewY; /* skew about the Y axis */ int32_t srid; /* spatial reference id */ uint16_t width; /* pixel columns - max 65535 */ uint16_t height; /* pixel rows - max 65535 */ rt_band *bands; /* actual bands */ }; struct rt_extband_t { uint8_t bandNum; /* 0-based */ char* path; /* internally owned */ void *mem; /* loaded external band data, internally owned */ }; struct rt_band_t { rt_pixtype pixtype; int32_t offline; uint16_t width; uint16_t height; int32_t hasnodata; /* a flag indicating if this band contains nodata values */ int32_t isnodata; /* a flag indicating if this band is filled only with nodata values. flag CANNOT be TRUE if hasnodata is FALSE */ double nodataval; /* int will be converted ... */ int8_t ownsdata; /* 0, externally owned. 1, internally owned. only applies to data.mem */ rt_raster raster; /* reference to parent raster */ union { void* mem; /* actual data, externally owned */ struct rt_extband_t offline; } data; }; struct rt_pixel_t { int x; /* column */ int y; /* line */ uint8_t nodata; double value; LWGEOM *geom; }; /* polygon as LWPOLY with associated value */ struct rt_geomval_t { LWPOLY *geom; double val; }; /* summary stats of specified band */ struct rt_bandstats_t { double sample; uint32_t count; double min; double max; double sum; double mean; double stddev; double *values; int sorted; /* flag indicating that values is sorted ascending by value */ }; /* histogram bin(s) of specified band */ struct rt_histogram_t { uint32_t count; double percent; double min; double max; int inc_min; int inc_max; }; /* quantile(s) of the specified band */ struct rt_quantile_t { double quantile; double value; uint32_t has_value; }; /* listed-list structures for rt_band_get_quantiles_stream */ struct quantile_llist { uint8_t algeq; /* AL-GEQ (1) or AL-GT (0) */ double quantile; uint64_t tau; /* position in sequence */ struct quantile_llist_element *head; /* H index 0 */ struct quantile_llist_element *tail; /* H index last */ uint32_t count; /* # of elements in H */ /* faster access to elements at specific intervals */ struct quantile_llist_index *index; uint32_t index_max; /* max # of elements in index */ uint64_t sum1; /* N1H */ uint64_t sum2; /* N2H */ }; struct quantile_llist_element { double value; uint32_t count; struct quantile_llist_element *prev; struct quantile_llist_element *next; }; struct quantile_llist_index { struct quantile_llist_element *element; uint32_t index; }; /* number of times a value occurs */ struct rt_valuecount_t { double value; uint32_t count; double percent; }; /* reclassification expression */ struct rt_reclassexpr_t { struct rt_reclassrange { double min; double max; int inc_min; /* include min */ int inc_max; /* include max */ int exc_min; /* exceed min */ int exc_max; /* exceed max */ } src, dst; }; /* raster iterator */ struct rt_iterator_t { rt_raster raster; uint16_t nband; /* 0-based */ uint8_t nbnodata; /* no band = treat as NODATA */ }; /* callback argument from raster iterator */ struct rt_iterator_arg_t { /* # of rasters, Z-axis */ uint16_t rasters; /* # of rows, Y-axis */ uint32_t rows; /* # of columns, X-axis */ uint32_t columns; /* axis order: Z,X,Y */ /* individual pixel values */ double ***values; /* 0,1 value of nodata flag */ int ***nodata; /* X,Y of pixel from each input raster */ int **src_pixel; /* X,Y of pixel from output raster */ int dst_pixel[2]; }; /* gdal driver information */ struct rt_gdaldriver_t { int idx; char *short_name; char *long_name; char *create_options; }; /* raster colormap entry */ struct rt_colormap_entry_t { int isnodata; double value; uint8_t color[4]; /* RGBA */ }; struct rt_colormap_t { enum { CM_INTERPOLATE, CM_EXACT, CM_NEAREST } method; int ncolor; uint16_t nentry; rt_colormap_entry entry; }; #endif /* RT_API_H_INCLUDED */ ��������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/NEWS�����������������������������������������������������������������0000644�0000000�0000000�00000000300�11722777314�015563� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sun Sep 26 23:10:45 CEST 2010 Extension added to PostGIS SVN version. Mon Jan 26 18:58:35 CET 2009 First in-memory raster management api implemented, initial work on postgresql interface. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/raster_config.h.in���������������������������������������������������0000644�0000000�0000000�00000001555�11723273317�020477� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* raster_config.h.in. Generated from configure.ac by autoheader. */ /* PostGIS Raster build date */ #undef POSTGIS_RASTER_BUILD_DATE /* PostGIS Raster library version */ #undef POSTGIS_RASTER_LIB_VERSION /* PostGIS Raster major version */ #undef POSTGIS_RASTER_MAJOR_VERSION /* PostGIS Raster micro version */ #undef POSTGIS_RASTER_MICRO_VERSION /* PostGIS Raster minor version */ #undef POSTGIS_RASTER_MINOR_VERSION /* PostGIS Raster scripts version */ #undef POSTGIS_RASTER_SCRIPTS_VERSION /* PostGIS Raster version */ #undef POSTGIS_RASTER_VERSION /* GDAL library version */ #undef POSTGIS_GDAL_VERSION /* Define to 1 if GDAL has GDALFPolygonize function. */ #undef GDALFPOLYGONIZE /* Enable development variable */ #undef ENABLE_DEVELOPMENT /* Define to 1 if a warning is outputted every time a double is truncated */ #undef POSTGIS_RASTER_WARN_ON_TRUNCATION ���������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/doc/�����������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015630� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/doc/RFC2-WellKnownBinaryFormat���������������������������������������0000644�0000000�0000000�00000017023�11600750465�022507� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RFC2: Well Known Binary format for RASTER type ---------------------------------------------- $Author: chodgson $ $Date: 2011-06-24 01:50:13 +0200 (Fri, 24 Jun 2011) $ $Revision: 7461 $ ------------------------------------------------------ The WKB format for RASTER is meant for transport. Takes into account endiannes and avoids any padding. Still, beside padding and endiannes, it matches the internal serialized format (see RFC1), for quick input/output. // Basic Type definitions // byte : 1 byte // uint16 : 16 bit unsigned integer (2 bytes) // uint32 : 32 bit unsigned integer (4 bytes) // float64 : double precision floating point number (8 bytes) +------------------------------------------------------------+ | RASTER | +---------------+-------------+------------------------------+ | - name - | - type - | - meaning - | +---------------+-------------+------------------------------+ | endiannes | byte | 1:ndr/little endian | | | | 0:xdr/big endian | +---------------+-------------+------------------------------+ | version | uint16 | format version (0 for this | | | | structure) | +---------------+-------------+------------------------------+ | nBands | uint16 | Number of bands | +---------------+-------------+------------------------------+ | scaleX | float64 | pixel width | | | | in geographical units | +---------------+-------------+------------------------------+ | scaleY | float64 | pixel height | | | | in geographical units | +---------------+-------------+------------------------------+ | ipX | float64 | X ordinate of upper-left | | | | pixel's upper-left corner | | | | in geographical units | +---------------+-------------+------------------------------+ | ipY | float64 | Y ordinate of upper-left | | | | pixel's upper-left corner | | | | in geographical units | +---------------+-------------+------------------------------+ | skewX | float64 | rotation about Y-axis | +---------------+-------------+------------------------------+ | skewY | float64 | rotation about X-axis | +---------------+-------------+------------------------------+ | srid | int32 | Spatial reference id | +---------------+-------------+------------------------------+ | width | uint16 | number of pixel columns | +---------------+-------------+------------------------------+ | height | uint16 | number of pixel rows | +---------------+-------------+------------------------------+ | bands[nBands] | RASTERBAND | Bands data | +---------------+-------------+------------------------------+ +------------------------------------------------------------------+ | RASTERBAND | +---------------+--------------+-----------------------------------+ | - name - | - type - | - meaning - | +---------------+--------------+-----------------------------------+ | isOffline | 1bit | If true, data is to be found | | | | on the filesystem, trought the | | | | path specified in RASTERDATA | +---------------+--------------+-----------------------------------+ | hasNodataValue| 1bit | If true, stored nodata value is | | | | a true nodata value. Otherwise | | | | the value stored as a nodata | | | | value should be ignored. | +---------------+--------------+-----------------------------------+ | isNodataValue | 1bit | If true, all the values of the | | | | band are expected to be nodata | | | | values. This is a dirty flag. | | | | To set the flag to its real value | | | | the function st_bandisnodata must | | | | must be called for the band with | | | | 'TRUE' as last argument. | +---------------+--------------+-----------------------------------+ | reserved | 1bit | unused in this version | +---------------+--------------+-----------------------------------+ | pixtype | 4bits | 0: 1-bit boolean | | | | 1: 2-bit unsigned integer | | | | 2: 4-bit unsigned integer | | | | 3: 8-bit signed integer | | | | 4: 8-bit unsigned integer | | | | 5: 16-bit signed integer | | | | 6: 16-bit unsigned signed integer | | | | 7: 32-bit signed integer | | | | 8: 32-bit unsigned signed integer | | | | 9: 32-bit float | | | | 10: 64-bit float | +---------------+--------------+-----------------------------------+ | nodata | 1 to 8 bytes | Nodata value | | | depending on | | | | pixtype [1] | | +---------------+--------------+-----------------------------------+ | data | RASTERDATA | Raster band data (see below) | +---------------+--------------+-----------------------------------+ +------------------------------------------------------------------+ | RASTERDATA (isOffline flag clear) | +---------------+--------------+-----------------------------------+ | pix[w*h] | 1 to 8 bytes | Pixels values, row after row, | | | depending on | so pix[0] is upper-left, pix[w-1] | | | pixtype [1] | is upper-right. | | | | | | | | As for endiannes, it is specified | | | | at the start of WKB, and implicit | | | | up to 8bits (bit-order is most | | | | significant first) | | | | | +---------------+--------------+-----------------------------------+ [1] 1,2 and 4 bit pixtypes are still encoded as 1-byte per value +-----------------------------------------------------------------+ | RASTERDATA (isOffline flag set) | +---------------+-------------+-----------------------------------+ | bandNumber | int8 | 0-based band number to use from | | | | the set available in the external | | | | file | +---------------+-------------+-----------------------------------+ | path | string | null-terminated path to data file | +---------------+-------------+-----------------------------------+ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/doc/RFC1-SerializedFormat��������������������������������������������0000644�0000000�0000000�00000020467�11517312532�021516� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RFC1: serialized format (storage) for RASTER type ------------------------------------------------------ $Author: jorgearevalo $ $Date: 2011-01-24 16:06:02 +0100 (Mon, 24 Jan 2011) $ $Revision: 6716 $ ------------------------------------------------------ The goals of the serialized version for RASTER type are: - Small memory footprint on deserialization This means that the amount of allocated memory required for deserialization is minimal - Fast access Access to band data must be aligned, saving from memory copies on full scan. - Ease of format switch On-disk format must be allowed to change w/out need for dump-reload of the whole database. The first two goals boil down to forcing alignment of band data in the serialized format itself, which in turn will require variable padding based on pixeltype of each band. For simplicity we will ensure that each band of the raster starts at the 8-byte boundary and thus pad previous structures in the stream accordingly. The structure will then look like this: [HEADER] [BAND0] [BAND1] [BAND2] ^aligned ^aligned ^aligned The third goal can be accomplished by adding a version number to the serialized format so that in case of changes the deserializer can pick the correct parsing procedure based on that. The HEADER ---------- PostgreSQL forces a 4-byte size field a the start of the detoasted datum, and ensure this start of structure is aligned to 8-byte. We'll add version number right after it, and then make sure the total size is a multiple of 8 bytes. The following structure is composed by 8 slots of 8-bytes, totaling 64 bytes: struct rt_raster_serialized_t { /*---[ 8 byte boundary ]---{ */ uint32_t size; /* required by postgresql: 4 bytes */ uint16_t version; /* format version (this is version 0): 2 bytes */ uint16_t numBands; /* Number of bands: 2 bytes */ /* }---[ 8 byte boundary ]---{ */ double scaleX; /* pixel width: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double scaleY; /* pixel height: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double ipX; /* insertion point X: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double ipY; /* insertion point Y: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double skewX; /* rotation about the X axis: 8 bytes */ /* }---[ 8 byte boundary ]---{ */ double skewY; /* rotation about the Y axis: 8 bytes */ /* }---[ 8 byte boundary ]--- */ int32_t srid; /* Spatial reference id: 4 bytes */ uint16_t width; /* pixel columns: 2 bytes */ uint16_t height; /* pixel rows: 2 bytes */ }; The BANDS --------- Given the serialized raster header structure above, it is guaranteed that a serialized band always start at 8-bytes boundary, so it's simpler to compute padding required at the end of each band to ensure next band will be guaranteed the same assumption. We'll need to take 2 padding spots into account: the first is to ensure actual band data is aligned accordingly to the pixel type (and storage flag) needs, the second is to ensure next band (if any) will also be aligned to 8-bytes: [PIXELTYPE+STORAGE_FLAG] [DATA_PADDING] [DATA] [TRAILING_PADDING] The total size of a band's serialized form in bytes must be a multiple of 8. The maximum required data padding size will be of 7 bytes (64bit pixel type). The maximum required trailing padding size will be of 7 bytes. Pixel type and storage flag --------------------------- Pixel type specifies type of pixel values in a band. Storage flag specifies whether the band data is stored as part of the datum or is to be found on the server's filesytem. There are currently 11 supported pixel value types, so 4 bits are enough to account for all. We'll reserve the upper 4 bits for generic flags and define upmost as storage flag: #define BANDTYPE_FLAGS_MASK 0xF0 #define BANDTYPE_PIXTYPE_MASK 0x0F #define BANDTYPE_FLAG_OFFDB (1<<7) #define BANDTYPE_FLAG_HASNODATA (1<<6) #define BANDTYPE_FLAG_ISNODATA (1<<5) #define BANDTYPE_FLAG_RESERVED3 (1<<4) Data padding ------------ Band alignment depends on pixeltypes, as follows: - PT_1BB, PT_2BUI, PT_4BUI, PT_8BSI, PT_8BUI: No alignment required, each value is 1 byte. - PT_16BSI, PT_16BUI: Data must be aligned to 2-bytes boundary. - PT_32BSI, PT_32BUI, PT_32BF: Data must be aligned to 4-bytes boundary. - PT_64BF: Data must be aligned to 8-bytes boundary. Accordingly we can then define the following structures: struct rt_band8_serialized_t { uint8_t pixeltype; uint8_t data[1]; /* no data padding */ } struct rt_band16_serialized_t { uint8_t pixeltype; uint8_t padding; /* 1-byte padding */ uint8_t data[1]; } struct rt_band32_serialized_t { uint8_t pixeltype; uint8_t padding[3]; /* 3-bytes padding */ uint8_t data[1]; } struct rt_band64_serialized_t { uint8_t pixeltype; uint8_t padding[7]; /* 7-bytes padding */ uint8_t data[1]; } And an abstract base class: struct rt_band_serialized_t { uint8_t pixeltype } Data ---- The band data - guaranteed to be always aligned as required by pixeltype - will start with the nodata value. After that we may have pixel values or off-db raster reference depending on OFFDB flag in the pixeltype field: * For in-db bands the nodata value is followed by a value for each column in first row, then in second row and so on. For example, a 2x2 raster band data will have this form: [nodata] [x:0,y:0] [x:1,y:0] [x:0,y:1] [x:1,y:1] Where the size of the [...] blocks is 1,2,4 or 8 bytes depending on pixeltype. Endiannes of multi-bytes value is the host endiannes. * For off-db bands the nodata value is followed by a band number followed by a null-terminated string expressing the path to the raster file: [nodata] [bandno] [path] Where the size of the [nodata] block is 1,2,4 or 8 bytes depending on pixeltype (endiannes of multi-bytes value is the host endiannes), size of [bandno] is 1 byte, and [path] is null-terminated. Trailing padding ---------------- The trailing band padding is used to ensure next band (if any) will start on the 8-bytes boundary. It is both dependent on raster dimensions (number of values) and band data pixel type (size of each value). In order to obtain the required padding size for a band we'll need to compute the minimum size required to hold the band data, add the data padding and pixeltype sizes, and then grow the resulting size to reach a multiple of 8 bytes: size_t rt_band_serialized_size(rt_context ctx, rt_band band) { rt_pixtype pixtype = rt_band_get_pixtype(ctx, band); size_t sz; /* pixeltype + data padding */ sz = rt_pixtype_alignment(ctx, pixtype); /* add data size */ sz += rt_band_get_data_size(ctx, band); /* grow size to reach a multiple of 8 bytes */ sz = TYPEALIGN(sz, 8); assert( !(sz%8) ); return sz; } Example sizes ------------- 255x255 single band PT_16BUI: header size: 64 + pixeltype+data_padding: 2 + data size: (255*255+1)*2 == 130052 = 130118 + trailing padding: 2 = total size: 130120 (~127k) 255x255 single band PT_8BUI: header size: 64 + pixeltype+data_padding: 1 + data size: (255*255+1) == 65026 = 65091 + trailing padding: 5 = total size: 65096 (~63k) 64x64 single band PT_16BSI: header size: 64 + pixeltype+data_padding: 2 + data size: (64*64+1)*2 == 8194 = 8260 + trailing padding: 4 = total size: 8264 (~8k -- >page size) 64x64 single band PT_8BUI: header size: 64 + pixeltype+data_padding: 1 + data size: (64*64+1) == 4097 = 4162 + trailing padding: 6 = total size: 4168 (~4k) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/doc/doxygen.cfg.in���������������������������������������������������0000644�0000000�0000000�00000144245�11722777314�020415� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Doxyfile 1.4.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "WKT Raster Doxygen" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @@LAST_RELEASE_VERSION@@-r@@SVN_REVISION@@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxygen # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = YES # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = YES # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command <command> <input-file>, where <command> is the value of # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../ # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command <filter> <input-file>, where <filter> # is the value of the INPUT_FILTER tag, and <input-file> is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = YES # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = YES # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = YES �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/DEBUG����������������������������������������������������������������0000644�0000000�0000000�00000006632�11461611220�015632� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PostGIS debugging information ============================= Written by Jorge Arevalo 2010-10-26 Based on the ../postgis/DEBUG document, written by Mark Cave-Ayland Description =========== The philosophy of the PostGIS Raster debug system is the same used in PostGIS. Review the ../postgis/DEBUG document for further understanding on this philosophy. Debugging is accomplished using four new macros: RASTER_DEBUG(level, "message") - If the current debug level >= level, emit message RASTER_DEBUGF(level, "format message", ...) - If the current debug level >= level, emit formatted message (this allows placeholders and extra arguments in exactly the same way as vasprintf()) POSTGIS_RASTER_DEBUG(level, "message") - If the current debug level >= level, emit message POSTGIS_RASTER_DEBUGF(level, "format message", ...) - If the current debug level >= level, emit formatted message (this allows placeholders and extra arguments in exactly the same way as vasprintf()) The two RASTER_DEBUG macros are designed for use within librtcore; i.e. raster core routines that may not necessarily be used from PostgreSQL, and make use of the default_info_handler() call. Similarly, the POSTGIS_RASTER_DEBUG macros are designed for code that can *only* be called from within PostgreSQL, i.e. it calls ereport() directly. The trick is, of course, to distinguish between the two. Generally anything within a function declared as returning type Datum should use the POSTGIS_RASTER_DEBUG macros, as well as code that can only be called from these functions. Similarly, any functions that do not take PostgreSQL-specific datatypes should use the RASTER_DEBUG functions. Note that the debugging macros automatically prefix the current filename, function name and line number to any debugging messages. As well as allowing debug messages to be shorter, it also makes following program flow much easier. Usage ===== The current debug level is set by the POSTGIS_DEBUG_LEVEL #define in postgis_config.h. By default, configure sets POSTGIS_DEBUG_LEVEL to 0 which disables all debugging output. If debugging output is required, it is necessary to either redefine POSTGIS_DEBUG_LEVEL to the required level (and rebuild the shared library), or re-run configure with the --enable-debug option and then rebuild the shared library (currently configure defaults to level 4). A rebuild of the library is required since the output of the debug macros is conditional; if POSTGIS_DEBUG_LEVEL is set to 0 then instead of providing debug output, the macros simply evaluate to (void)0 which can be optimised away by the compiler. Hence adding debugging statements during development will have negligible performance impact during execution when debugging is disabled. Verbosity levels ================ The following verbosity levels have been defined in the initial implementation; obviously these may need to change as experience dictates. By specifying a debug level, output for all levels up to and including the current debug level is generated. It should also be obvious that as the debug level is increased, more complex output is generated. 0 - All debugging output is disable 1 - Reserved 2 - Function entry; for simply announcing when a function has been entered 3 - Normal function debug; output any information of interest to the developer 4 - Verbose function debug; output lots of useful detail 5 - Memory allocation; output all uses of alloc/free within the code ������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/macros/��������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016347� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/macros/ac_proj4_version.m4�������������������������������������������0000644�0000000�0000000�00000003243�12233537203�022056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl ********************************************************************** dnl * $Id: ac_proj4_version.m4 12060 2013-10-28 19:44:03Z dustymugs $ dnl * dnl * PostGIS - Spatial Types for PostgreSQL dnl * http://postgis.refractions.net dnl * Copyright 2008 Mark Cave-Ayland dnl * dnl * This program is free software; you can redistribute it and/or dnl * modify it under the terms of the GNU General Public License dnl * as published by the Free Software Foundation; either version 2 dnl * of the License, or (at your option) any later version. dnl * dnl * This program is distributed in the hope that it will be useful, dnl * but WITHOUT ANY WARRANTY; without even the implied warranty of dnl * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl * GNU General Public License for more details. dnl * dnl * You should have received a copy of the GNU General Public License dnl * along with this program; if not, write to the Free Software Foundation, dnl * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. dnl * dnl ********************************************************************** dnl dnl Return the PROJ.4 version number dnl AC_DEFUN([AC_PROJ_VERSION], [ AC_RUN_IFELSE( [AC_LANG_PROGRAM([ #ifdef HAVE_STDINT_H #include <stdio.h> #endif #include "proj_api.h" ], [ FILE *fp; fp = fopen("conftest.out", "w"); fprintf(fp, "%d\n", PJ_VERSION); fclose(fp)]) ], [ dnl The program ran successfully, so return the version number in the form MAJORMINOR $1=`cat conftest.out | sed 's/\([[0-9]]\)\([[0-9]]\)\([[0-9]]\)/\1\2/'` ], [ dnl The program failed so return an empty variable $1="" ] ) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/Makefile.in����������������������������������������������������������0000644�0000000�0000000�00000003342�12233537203�017127� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id: Makefile 3940 2009-03-30 09:30:43Z mloskot $ # # Master makefile used to build WKT Raster # # Copyright (c) 2009 Sandro Santilli <strk@keybit.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# .NOTPARALLEL: all: @RT_CORE_LIB@ @RT_PG_LIB@ @RT_LOADER@ @RT_POSTGIS_SQL@ corelib: $(MAKE) -C rt_core pglib: $(MAKE) -C rt_pg rtloader: $(MAKE) -C loader rtpostgis.sql: $(MAKE) -C rt_pg rtpostgis.sql install: all $(MAKE) -C rt_pg install $(MAKE) -C loader install $(MAKE) -C scripts install uninstall: $(MAKE) -C rt_pg uninstall $(MAKE) -C loader uninstall $(MAKE) -C scripts uninstall clean: $(MAKE) -C rt_core $@ $(MAKE) -C rt_pg $@ $(MAKE) -C loader $@ $(MAKE) -C test $@ $(MAKE) -C scripts $@ distclean: clean $(MAKE) -C rt_core $@ $(MAKE) -C rt_pg $@ $(MAKE) -C loader $@ $(MAKE) -C test $@ $(MAKE) -C scripts $@ rm -f raster_config.h Makefile core-check: $(MAKE) -C test $@ check: $(MAKE) -C test $@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/install-sh�����������������������������������������������������������0000755�0000000�0000000�00000022441�11722777314�017102� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-04-01.17 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 or substantial portions of the 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 -d DIRECTORIES... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. test -n "$dir_arg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" || lasterr=$? # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; } fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/�������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016552� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/������������������������������������������������������0000755�0000000�0000000�00000000000�12315456267�020103� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/genraster.py������������������������������������������0000755�0000000�0000000�00000005401�12233537203�022437� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # -*- coding: utf-8 -*- # # $Id$ # # A very simple generator of rasters for testing WKT Raster. # A test file is a matrix of numbered cells greyscaled randomly. # # Requirements: Python + Python Imaging Library (PIL) # Also, path to FreeSans.ttf is a hardcoded Unix path, so fix it if you need. # ############################################################################### # (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################### import Image import ImageDraw import ImageFont import random import sys if len(sys.argv) < 5 or len(sys.argv) > 6: print 'Usage: genraster.py <xsize> <ysize> <xsizecell> <ysizecell> <outline colour>' print 'Note: Generated image is saved as out.png' sys.exit(1) g_file = "out.png" g_size = ( int(sys.argv[1]), int(sys.argv[2]) ) g_cell_size = ( int(sys.argv[3]), int(sys.argv[4]) ) if len(sys.argv) == 6: g_outline = int(sys.argv[5]) else: g_outline = None ncells = (g_size[0] / g_cell_size[0]) * (g_size[1] / g_cell_size[1]) print 'Number of cells: ',ncells print 'ID \tULX\tULY\tCLR\tTXTCLR\tOUTCLR' img = Image.new("L", g_size, 255) draw = ImageDraw.Draw(img) colour_step = 8 count = 0 for j in range(0, g_size[1], g_cell_size[1]): for i in range(0, g_size[0], g_cell_size[0]): if count < 256 / colour_step: value = count * colour_step else: value = random.randrange(0, 255) if value < 16: value_text = 255 else: value_text = 0; font = ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeSans.ttf', g_cell_size[1] - int(g_cell_size[1] * 0.4)) draw.rectangle( [(i,j), (i + g_cell_size[0], j + g_cell_size[1])], fill=value, outline=g_outline) draw.text( (i,j), ('%d' % count), fill=value_text, font=font) print '%d:\t%d\t%d\t%d\t%d\t%s' % (count, i, j, value, value_text, str(g_outline)) count = count + 1 del draw img.save(g_file, 'PNG') print 'Output saved: %s' % g_file ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/ovdump.py���������������������������������������������0000755�0000000�0000000�00000007374�12233537203�021772� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id$ # # This is a simple script based on GDAL to dump overview to separate file. # It is used in WKTRaster testing to compare raster samples. # # NOTE: GDAL does include Frank's (unofficial) dumpoverviews utility too, # which dumps overview as complete geospatial raster dataset. # # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # from osgeo import gdal from osgeo import osr import osgeo.gdalconst as gdalc from optparse import OptionParser import os import struct import sys prs = OptionParser(version="%prog $Revision: 4037 $", usage="%prog -r <RASTER> -v <OVERVIEW>", description="Dump GDAL raster overview to separate file, GeoTIF by default") prs.add_option("-r", "--raster", dest="raster", action="store", default=None, help="input raster file") prs.add_option("-v", "--overview", dest="overview", action="store", type="int", default=None, help="1-based index of raster overview, optional") (opts, args) = prs.parse_args() if opts.raster is None: prs.error("use option -r to specify input raster file that contains overviews") ################################################################################ # MAIN # Source src_ds = gdal.Open(opts.raster, gdalc.GA_ReadOnly); if src_ds is None: sys.exit('ERROR: Cannot open input file: ' + opts.raster) band = src_ds.GetRasterBand(1) if opts.overview is None: nvstart = 0 nvend = band.GetOverviewCount() else: nvstart = opts.overview - 1 nvend = opts.overview for nv in range(nvstart, nvend): band = src_ds.GetRasterBand(1) if nv < 0 and nv >= band.GetOverviewCount(): print "ERROR: Failed to find overview %d" % nv sys.exit(1) ov_band = band.GetOverview(nv) ovf = int(0.5 + band.XSize / float(ov_band.XSize)) print "--- OVERVIEW #%d level = %d ---------------------------------------" % (nv + 1, ovf) # Destination dst_file = os.path.basename(opts.raster) + "_ov_" + str(ovf) + ".tif" dst_format = "GTiff" dst_drv = gdal.GetDriverByName(dst_format) dst_ds = dst_drv.Create(dst_file, ov_band.XSize, ov_band.YSize, src_ds.RasterCount, ov_band.DataType) print "Source: " + opts.raster print "Target: " + dst_file print "Exporting %d bands of size %d x %d" % (src_ds.RasterCount, ov_band.XSize, ov_band.YSize) # Rewrite bands of overview to output file ov_band = None band = None for nb in range(1, src_ds.RasterCount + 1): band = src_ds.GetRasterBand(nb) assert band is not None ov_band = band.GetOverview(nv) assert ov_band is not None print " Band #%d (%s) (%d x %d)" % \ (nb, gdal.GetDataTypeName(ov_band.DataType), ov_band.XSize, ov_band.YSize) dst_band = dst_ds.GetRasterBand(nb) assert dst_band is not None data = ov_band.ReadRaster(0, 0, ov_band.XSize, ov_band.YSize) assert data is not None dst_band.WriteRaster(0, 0, ov_band.XSize, ov_band.YSize, data, buf_type = ov_band.DataType) dst_ds = None # Cleanup src_ds = None ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/rtgdalraster.py���������������������������������������0000755�0000000�0000000�00000007144�12233537203�023151� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id$ # # A simple utility for passing parameters to ST_AsGDALRaster # for a GDAL raster output # This utility is handy for debugging purposes. # # Example: # rtgdalraster.py -d "dbname=postgres" -r "(SELECT rast FROM pele LIMIT 1)" -f JPEG -o pele.jpg # # ############################################################################### # Copyright (C) 2011 Regents of the University of California # <bkpark@ucdavis.edu> # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################### from optparse import OptionParser import sys import os import psycopg2 def logit(msg): if VERBOSE is True: sys.stderr.write("LOG - " + str(msg) + "\n") ############################################################################### try: prs = OptionParser(version="%prog", usage="%prog -d <DB> -r <RASTER> -o <FILE> [-f <FORMAT>] [-c <OPTIONS>]", description="Output raster in a GDAL raster format") prs.add_option("-d", "--db", dest="db", action="store", default=None, help="PostgreSQL database connection string, required") prs.add_option("-r", "--raster", dest="raster", action="store", default=None, help="sql expression to create or access a existing raster, required") prs.add_option("-o", "--output", dest="output", action="store", default=None, help="file to put the output of ST_AsGDALRaster if successful, required") prs.add_option("-f", "--format", dest="format", action="store", default="GTiff", help="format of GDAL raster output, optional, default=GTiff") prs.add_option("-c", "--config", dest="config", action="store", default=None, help="comma separated list of GDAL raster creation options, optional") prs.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help="be excessively verbose and useful for debugging") (opts, args) = prs.parse_args() if opts.db is None: prs.error("use -d option to specify database connection string") if opts.raster is None: prs.error("use -r option to specify a sql expression for a raster") if opts.output is None: prs.error("use -o option to specify raster output file") if opts.config is not None: opts.cfg = opts.config.split(',') else: opts.cfg = None global VERBOSE VERBOSE = opts.verbose conn = psycopg2.connect(opts.db) logit("Connected to %s" % opts.db) logit("Raster expression is %s" % opts.raster) cur = conn.cursor() sql = "SELECT ST_AsGDALRaster(%s, %%s, %%s::text[], NULL::integer)" % (opts.raster) cur.execute(sql, (opts.format, opts.cfg)) logit("Number of rows: %i" % cur.rowcount) rec = cur.fetchone()[0]; logit("size of raster (bytes): %i" % len(rec)) fh = open(opts.output, 'wb', -1) fh.write(rec); fh.flush(); fh.close(); logit("size of %s (bytes): %i" % (opts.output, os.stat(opts.output)[6])); cur.close(); conn.close(); print "raster outputted to %s" % opts.output; except Exception, e: print "ERROR: ", e ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/window.py���������������������������������������������0000755�0000000�0000000�00000006463�12233537203�021765� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id: window.py 12060 2013-10-28 19:44:03Z dustymugs $ # # Calculates coordinates of window corners of given raster dataset. # It's just a simple helper for testing and debugging WKT Raster. # ############################################################################## # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################## from osgeo import gdal from osgeo import osr import osgeo.gdalconst as gdalc import sys if len(sys.argv) != 6: print "Usage: window.py <raster> <x> <y> <xsize> <ysize>" print "\traster - GDAL supported dataset" print "\tx - column - 1..N where N is raster X dimension" print "\ty - row - 1..N where N is raster Y dimension" print "\txsize - x-dimension of requested window (xsize <= xsize of raster - x)" print "\tysize - y-dimension of requested window (ysize <= ysize of raster - y)" sys.exit(0) def is_georeferenced(gt): if gt[0] == 0.0 and gt[1] == 1.0 and gt[3] == 0.0 and gt[5] == 1.0: return False else: return True def calculate_corner(gt, x, y): if is_georeferenced(gt): xgeo = gt[0] + gt[1] * x + gt[2] * y ygeo = gt[3] + gt[4] * x + gt[5] * y else: xgeo = x xgeo = y return (xgeo, ygeo) infile = sys.argv[1] inxoff = int(sys.argv[2]) inyoff = int(sys.argv[3]) inxsize = int(sys.argv[4]) inysize = int(sys.argv[5]) print "=== INPUT ===" print "File: %s" % infile print "Window:" print "- upper-left: %d x %d" % (inxoff, inyoff) print "- dimensions: %d x %d" % (inxsize, inysize) ds = gdal.Open(infile, gdalc.GA_ReadOnly); if ds is None: sys.exit('Cannot open input file: ' + str(infile)) xsize = ds.RasterXSize ysize = ds.RasterYSize print "=== RASTER ===" print "- dimensions: %d x %d" % (xsize, ysize) if inxsize > xsize or inysize > ysize or inxoff > xsize or inyoff > ysize: print "Invalid size of input window" sys.exit(1) gt = ds.GetGeoTransform() res = ( gt[1], gt[5] ) # X/Y pixel resolution ulp = ( gt[0], gt[3] ) # X/Y upper left pixel corner rot = ( gt[2], gt[4] ) # X-/Y-axis rotation if is_georeferenced(gt): print "- pixel size:", res print "- upper left:", ulp print "- rotation :", rot else: print "No georeferencing is available" sys.exit(1) print "=== WINDOW ===" print "- upper-left :", calculate_corner(gt, inxoff, inyoff) print "- lower-left :", calculate_corner(gt, inxoff, ysize) print "- upper-right:", calculate_corner(gt, xsize, inyoff) print "- lower-right:", calculate_corner(gt, xsize, ysize) print "- center :", calculate_corner(gt, xsize/2, ysize/2) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/rtrowdump.py������������������������������������������0000755�0000000�0000000�00000012506�12233537203�022514� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id$ # # Brute-force dump of single row from WKT Raster table as GeoTIFF. # This utility is handy for debugging purposes. # # WARNING: Tha main purpose of this program is to test and # debug WKT Raster implementation. It is NOT supposed to be an # efficient performance killer, by no means. # ############################################################################### # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################### import rtreader import numpy import osgeo.gdalconst from osgeo import gdal from optparse import OptionParser import sys def logit(msg): if VERBOSE is True: sys.stderr.write("LOG - " + str(msg) + "\n") def pt2gdt(pt): """Translate WKT Raster pixel type to GDAL type""" pixtypes = { '8BUI' : osgeo.gdalconst.GDT_Byte, '16BSI' : osgeo.gdalconst.GDT_Int16, '16BUI' : osgeo.gdalconst.GDT_UInt16, '32BSI' : osgeo.gdalconst.GDT_Int32, '32BUI' : osgeo.gdalconst.GDT_UInt32, '32BF' : osgeo.gdalconst.GDT_Float32, '64BF' : osgeo.gdalconst.GDT_Float64 } return pixtypes.get(pt, 'UNKNOWN') def pt2numpy(pt): """Translate WKT Raster pixel type to NumPy data type""" numpytypes = { '8BUI' : numpy.uint8, '16BSI' : numpy.int16, '16BUI' : numpy.uint16, '32BSI' : numpy.int32, '32BUI' : numpy.uint32, '32BF' : numpy.float32, '64BF' : numpy.float64 } return numpytypes.get(pt, numpy.uint8) ############################################################################### try: prs = OptionParser(version="%prog $Revision: 4037 $", usage="%prog -d <DB> -t <TABLE> [-c <COLUMN>]", description="Brute-force dump of single row from WKT Raster table as GeoTIF") prs.add_option("-d", "--db", dest="db", action="store", default=None, help="PostgreSQL database connection string, required") prs.add_option("-t", "--table", dest="table", action="store", default=None, help="table with raster column [<schema>.]<table>, required") prs.add_option("-c", "--column", dest="column", action="store", default="rast", help="raster column, optional, default=rast") prs.add_option("-w", "--where", dest="where", action="store", default="", help="SQL WHERE clause to filter record") prs.add_option("-o", "--output", dest="output", action="store", default=None, help="GeoTIFF output file for pixel data read from WKT Raster table") prs.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help="be excessively verbose and useful for debugging") (opts, args) = prs.parse_args() if opts.db is None: prs.error("use -d option to specify database connection string") if opts.table is None: prs.error("use -t option to specify raster table") if opts.column is None: prs.error("use -c option to specify raster column in raster table") if opts.output is None: prs.error("use -o option to specify raster output file") global VERBOSE VERBOSE = opts.verbose rt = rtreader.RasterReader(opts.db, opts.table, opts.column, opts.where) if VERBOSE is True: rt.logging = True logit("Connected to %s" % opts.db) logit("Source WKT raster:") logit("\trow=%s" % opts.where) logit("\twidth=%d, height=%d, bands=%d, pixel types=%s" \ %(rt.width, rt.height, rt.num_bands, str(rt.pixel_types))) logit("Target GeoTIFF: %s" % opts.output) out_format = "GTiff" out_driver = gdal.GetDriverByName(out_format) out_data_type = pt2gdt(rt.pixel_types[0]) out_ds = out_driver.Create(opts.output, rt.width, rt.height, rt.num_bands, out_data_type) for b in range(1, rt.num_bands +1): logit("--- BAND %d ---------------------------------" % b) ### Be careful!! ### Zeros function's input parameter can be a (height x width) array, ### not (width x height): http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html?highlight=zeros#numpy.zeros raster = numpy.zeros((rt.height, rt.width), pt2numpy(out_data_type)) for width_index in range(0, rt.width): for height_index in range(0, rt.height): pixel = rt.get_value(b, width_index + 1, height_index + 1) raster[height_index, width_index] = pixel logit(str(raster)) band = out_ds.GetRasterBand(b) assert band is not None band.WriteArray(raster) except rtreader.RasterError, e: print "ERROR - ", e ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/pixval.py���������������������������������������������0000755�0000000�0000000�00000005763�12233537203�021763� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id: pixval.py 12060 2013-10-28 19:44:03Z dustymugs $ # # This is a simple script based on GDAL and used to retrieve value of single raster pixel. # It is used in WKTRaster testing to compare raster samples. # # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # from osgeo import gdal from osgeo import osr import osgeo.gdalconst as gdalc import struct import sys def pt2fmt(pt): fmttypes = { gdalc.GDT_Byte: 'B', gdalc.GDT_Int16: 'h', gdalc.GDT_UInt16: 'H', gdalc.GDT_Int32: 'i', gdalc.GDT_UInt32: 'I', gdalc.GDT_Float32: 'f', gdalc.GDT_Float64: 'f' } return fmttypes.get(pt, 'x') if len(sys.argv) < 5 or len(sys.argv) > 6: print "Usage: pixval.py <raster> <band> <x> <y>" print "\traster - GDAL supported dataset" print "\tband - 1-based number of band" print "\toverview - optional 1-based number of overview" print "\tx - Pixel column - 1..N where N is raster X dimension" print "\ty - Pixel row - 1..N where N is raster Y dimension" sys.exit(0) infile = sys.argv[1] nband = int(sys.argv[2]) x = int(sys.argv[3]) y = int(sys.argv[4]) if len(sys.argv) > 5: noverview = int(sys.argv[5]) else: noverview = None print "File : %s" % infile print "Band : %d" % nband if noverview is not None: print "Overview: %d" % noverview print "Pixel: %d x %d" % (x, y) ds = gdal.Open(infile, gdalc.GA_ReadOnly); if ds is None: sys.exit('ERROR: Cannot open input file: ' + str(infile)) band = ds.GetRasterBand(nband) if band is None: sys.exit('Cannot access band %d', nband) if noverview is None: src_band = band else: if noverview > 0 and noverview <= band.GetOverviewCount(): src_band = band.GetOverview(noverview - 1) else: print "ERROR: Invalid overview index" print "Band %d consists of %d overivews" % (nband, band.GetOverviewCount()) sys.exit(1) if x <= 0 or x > src_band.XSize or y <= 0 or y > src_band.YSize: print "ERROR: Invalid pixel coordinates" print "Band or overview dimensions are %d x %d" % (src_band.XSize, src_band.YSize) sys.exit(1) # Pixel index is 0-based pixel = src_band.ReadRaster(x - 1, y - 1, 1, 1, 1, 1) fmt = pt2fmt(src_band.DataType) pixval = struct.unpack(fmt, pixel) print "Pixel value -> %s" % str(pixval[0]) �������������postgis-2.1.2+dfsg.orig/raster/scripts/python/raster2pgsql.py���������������������������������������0000755�0000000�0000000�00000115775�12233537203�023116� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id: raster2pgsql.py 12060 2013-10-28 19:44:03Z dustymugs $ # # This is a simple utility used to dump GDAL dataset into HEX WKB stream. # It's considered as a prototype of raster2pgsql tool planned to develop # in future. # For more details about raster2pgsql tool, see Specification page: # http://trac.osgeo.org/postgis/wiki/WKTRaster # # The script requires Python bindings for GDAL. # Available at http://trac.osgeo.org/gdal/wiki/GdalOgrInPython # ################################################################################ # Copyright (C) 2009-2010 Mateusz Loskot <mateusz@loskot.net> # Copyright (C) 2009-2011 Pierre Racine <pierre.racine@sbf.ulaval.ca> # Copyright (C) 2009-2010 Jorge Arevalo <jorge.arevalo@deimos-space.com> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ################################################################################ # from osgeo import gdal from osgeo import osr import osgeo.gdalconst as gdalc from optparse import OptionParser, OptionGroup import binascii import glob import math import numpy import os import sys ################################################################################ # CONSTANTS - DO NOT CHANGE # Endianness enumeration NDR = 1 # Little-endian XDR = 0 # Big-endian # Default version of WKTRaster protocol. # WARNING: Currently, this is the only valid value # and option -w, --raster-version is ignored, if specified. g_rt_version = 0 # Default format of binary output is little-endian (NDR) # WARNING: Currently, big-endian (XDR) output is not supported # and option -e, --endian is ignored, if specified. g_rt_endian = NDR # Default name of column, overriden with -f, --field option. g_rt_column = 'rast' g_rt_catalog = '' g_rt_schema = 'public' ################################################################################ # UTILITIES VERBOSE = False SUMMARY = [] def is_nan(x): if sys.hexversion < 0x02060000: return str(float(x)).lower() == 'nan' else: return math.isnan(x) def parse_command_line(): """Collects, parses and validates command line arguments.""" prs = OptionParser(version="%prog $Revision: 12060 $") # Mandatory parameters grp0 = OptionGroup(prs, "Source and destination", "*** Mandatory parameters always required ***") grp0.add_option("-r", "--raster", dest="raster", action="append", default=None, help="append raster to list of input files, at least one raster " "file required. You may use wildcards (?,*) for specifying multiple files.") grp0.add_option("-t", "--table", dest="table", action="store", default=None, help="raster destination in form of [<schema>.]<table> or base raster table for overview level>1, required") prs.add_option_group(grp0); # Optional parameters - raster manipulation grp_r = OptionGroup(prs, "Raster processing", "Optional parameters used to manipulate input raster dataset") grp_r.add_option("-s", "--srid", dest="srid", action="store", type="int", default=-1, help="assign output raster with specified SRID") grp_r.add_option("-b", "--band", dest="band", action="store", type="int", default=None, help="specify number of the band to be extracted from raster file") grp_r.add_option("-k", "--block-size", dest="block_size", action="store", default=None, help="cut raster(s) into tiles to be inserted one by table row." "BLOCK_SIZE is expressed as WIDTHxHEIGHT. Incomplete tiles are completed with nodata values") grp_r.add_option("-R", "--register", dest="register", action="store_true", default=False, help="register the raster as a filesystem (out-db) raster") grp_r.add_option("-l", "--overview-level", dest="overview_level", action="store", type="int", default=1, help='create overview tables named as o_<LEVEL>_<RASTER_TABLE> and ' 'populate with GDAL-provided overviews (regular blocking only)') prs.add_option_group(grp_r); # Optional parameters - database/table manipulation grp_t = OptionGroup(prs, 'Database processing', 'Optional parameters used to manipulate database objects') grp_t.add_option('-c', '--create', dest='create_table', action='store_true', default=False, help='create new table and populate it with raster(s), this is the default mode') grp_t.add_option('-a', '--append', dest='append_table', action='store_true', default=False, help='append raster(s) to an existing table') grp_t.add_option("-d", "--drop", dest="drop_table", action="store_true", default=False, help="drop table, create new one and populate it with raster(s)") grp_t.add_option("-f", "--field", dest="column", action="store", default=g_rt_column, help="specify name of destination raster column, default is 'rast'") grp_t.add_option("-F", "--filename", dest="filename", action="store_true", default=False, help="add a column with the name of the file") grp_t.add_option("-I", "--index", dest="index", action="store_true", default=False, help="create a GiST index on the raster column") grp_t.add_option("-M", "--vacuum", dest="vacuum", action="store_true", default=False, help="issue VACUUM command against all generated tables") grp_t.add_option('-V', '--create-raster-overviews', dest='create_raster_overviews_table', action='store_true', default=False, help='create RASTER_OVERVIEWS table used to store overviews metadata') prs.add_option_group(grp_t); # Other optional parameters grp_u = OptionGroup(prs, "Miscellaneous", "Other optional parameters") grp_u.add_option("-e", "--endian", dest="endian", action="store", type="int", default=g_rt_endian, help="control endianness of generated binary output of raster; " "specify 0 for XDR and 1 for NDR (default); " "only NDR output is supported now") grp_u.add_option("-w", "--raster-version", dest="version", action="store", type="int", default=g_rt_version, help="specify version of raster protocol, default is 0; " "only value of zero is supported now") grp_u.add_option("-o", "--output", dest="output", action="store", default=sys.stdout, help="specify output file, otherwise send to stdout") grp_u.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help="verbose mode. Useful for debugging") prs.add_option_group(grp_u); (opts, args) = prs.parse_args() # Validate options if opts.create_table and opts.drop_table and opts.append_table: prs.error("options -c, -a and -d are mutually exclusive") if opts.create_table and opts.drop_table: prs.error("options -c and -d are mutually exclusive") if opts.create_table and opts.append_table: prs.error("options -c and -a are mutually exclusive") if opts.append_table and opts.drop_table: prs.error("options -a and -d are mutually exclusive") if (not opts.create_table and not opts.drop_table and not opts.append_table) or opts.drop_table: opts.create_table = True if opts.raster is None: prs.error("use option -r to specify at least one input raster. Wildcards (?,*) are accepted.") if opts.block_size is not None and len(opts.raster) != 1: prs.error("regular blocking supports single-raster input only") if opts.block_size is not None: if len(opts.block_size.split('x')) != 2 and len(opts.block_size.split('X')) != 2: prs.error("invalid format of block size, expected WIDTHxHEIGHT") if opts.overview_level > 1 and opts.block_size is None: prs.error("regular blocking mode required to enable overviews support (level > 1)") if opts.create_raster_overviews_table and opts.overview_level <= 1: prs.error('create table for RASTER_OVERVIEWS available only if overviews import requested') # XXX: Now, if --band=Nth, then only Nth band of all specified rasters is dumped/imported # This behavior can be changed to support only single-raster input if --band option used. #if opts.band is not None and len(opts.raster) > 1: # prs.error("option -b requires single input raster only, specify -r option only once") if opts.table is None: prs.error("use option -t to specify raster destination table") if len(opts.table.split('.')) > 2: prs.error("invalid format of table name specified with option -t, expected [<schema>.]table") if opts.output is None: prs.error("failed to initialise output file, try to use option -o explicitly") if opts.version is not None: if opts.version != g_rt_version: prs.error("invalid version of WKT Raster protocol specified, only version 0 is supported") else: prs.error("use option -w to specify version of WKT Raster protocol") if opts.endian is not None: if opts.endian != NDR and opts.endian != XDR: prs.error("invalid endianness value, valid ones are 0 for NDR or 1 for XDR") else: prs.error("use option -e to specify endianness of binary output") return (opts, args) def logit(msg): """If verbose mode requested, sends extra progress information to stderr""" if VERBOSE is True: sys.stderr.write(msg) def gdt2pt(gdt): """Translate GDAL data type to WKT Raster pixel type.""" pixtypes = { gdalc.GDT_Byte : { 'name': 'PT_8BUI', 'id': 4 }, gdalc.GDT_Int16 : { 'name': 'PT_16BSI', 'id': 5 }, gdalc.GDT_UInt16 : { 'name': 'PT_16BUI', 'id': 6 }, gdalc.GDT_Int32 : { 'name': 'PT_32BSI', 'id': 7 }, gdalc.GDT_UInt32 : { 'name': 'PT_32BUI', 'id': 8 }, gdalc.GDT_Float32 : { 'name': 'PT_32BF', 'id': 10 }, gdalc.GDT_Float64 : { 'name': 'PT_64BF', 'id': 11 } } # XXX: Uncomment these logs to debug types translation #logit('MSG: Input GDAL pixel type: %s (%d)\n' % (gdal.GetDataTypeName(gdt), gdt)) #logit('MSG: Output WKTRaster pixel type: %(name)s (%(id)d)\n' % (pixtypes.get(gdt, 13))) return pixtypes.get(gdt, 13) def pt2numpy(pt): """Translate GDAL data type to NumPy data type""" ptnumpy = { gdalc.GDT_Byte : numpy.uint8, gdalc.GDT_Int16 : numpy.int16, gdalc.GDT_UInt16 : numpy.uint16, gdalc.GDT_Int32 : numpy.int32, gdalc.GDT_UInt32 : numpy.uint32, gdalc.GDT_Float32: numpy.float32, gdalc.GDT_Float64: numpy.float64 } return ptnumpy.get(pt, numpy.uint8) def pt2fmt(pt): """Returns binary data type specifier for given pixel type.""" fmttypes = { 4: 'B', # PT_8BUI 5: 'h', # PT_16BSI 6: 'H', # PT_16BUI 7: 'i', # PT_32BSI 8: 'I', # PT_32BUI 10: 'f', # PT_32BF 11: 'd' # PT_64BF } return fmttypes.get(pt, 'x') def fmt2printfmt(fmt): """Returns printf-like formatter for given binary data type sepecifier.""" fmttypes = { 'B': '%d', # PT_8BUI 'h': '%d', # PT_16BSI 'H': '%d', # PT_16BUI 'i': '%d', # PT_32BSI 'I': '%d', # PT_32BUI 'f': '%.15f', # PT_32BF 'd': '%.15f', # PT_64BF 's': '%s' } return fmttypes.get(fmt, 'f') def parse_block_size(options): assert options is not None assert options.block_size is not None wh = options.block_size.split('x') if len(wh) != 2: wh = options.block_size.split('X') assert len(wh) == 2, "invalid format of specified block size" return ( int(wh[0]), int(wh[1]) ) ################################################################################ # SQL OPERATIONS def quote_sql_value(value): assert value is not None, "None value given" if len(value) > 0 and value[0] != "'" and value[:-1] != "'": sql = "'" + str(value) + "'" else: sql = value return sql def quote_sql_name(name): assert name is not None, "None name given" if name[0] != "\"" and name[:-1] != "\"": sql = "\"" + str(name) + "\"" else: sql = name return sql def make_sql_value_array(values): sql = "ARRAY[" for v in values: if type(v) == str: sql += quote_sql_value(v) + "," else: sql += str(v) + ',' sql = sql[:-1] # Trim comma sql += "]" return sql def make_sql_schema_table_names(schema_table): st = schema_table.split('.') if len(st) == 1: # TODO: Should we warn user that public is used implicitly? st.insert(0, "public") assert len(st) == 2, "Invalid format of table name, expected [<schema>.]table" return (st[0], st[1]) def make_sql_full_table_name(schema_table): st = make_sql_schema_table_names(schema_table) table = "\"%s\".\"%s\"" % (st[0], st[1]) return table def make_sql_table_name(schema_table): st = schema_table.split('.') assert len(st) == 1 or len(st) == 2, "Invalid format of table name, expected [<schema>.]table" if len(st) == 2: return st[1] return st[0] def make_sql_drop_table(table): sql = "DROP TABLE IF EXISTS %s CASCADE;\n" \ % make_sql_full_table_name(table) logit("SQL: %s" % sql) return sql def make_sql_drop_raster_table(table): st = make_sql_schema_table_names(table) if len(st[0]) == 0: target = "'', '%s'" % st[1] else: target = "'%s', '%s'" % (st[0], st[1]) sql = "SELECT DropRasterTable(%s);\n" % target logit("SQL: %s" % sql) return sql def make_sql_create_table(options, table = None, is_overview = False): if table is None: table = options.table if options.filename: sql = "CREATE TABLE %s (rid serial PRIMARY KEY, \"filename\" text);\n" \ % (make_sql_full_table_name(table)) else: if options.overview_level > 1 and is_overview: sql = "CREATE TABLE %s (rid serial PRIMARY KEY, %s RASTER);\n" \ % (make_sql_full_table_name(table), quote_sql_name(options.column)) else: sql = "CREATE TABLE %s (rid serial PRIMARY KEY);\n" \ % (make_sql_full_table_name(table)) logit("SQL: %s" % sql) return sql def make_sql_create_gist(table, column): gist_table = make_sql_table_name(table) target_table = make_sql_full_table_name(table) logit("MSG: Create GiST spatial index on %s\n" % gist_table) sql = "CREATE INDEX \"%s_%s_gist_idx\" ON %s USING GIST (st_convexhull(%s));\n" % \ (gist_table, column, target_table, column) logit("SQL: %s" % sql) return sql; def make_sql_addrastercolumn(options, pixeltypes, nodata, pixelsize, blocksize, extent): assert len(pixeltypes) > 0, "No pixel types given" ts = make_sql_schema_table_names(options.table) pt = make_sql_value_array(pixeltypes) nd = 'null' if nodata is not None and len(nodata) > 0: nd = make_sql_value_array(nodata) odb = 'false' if options.register: odb = 'true' rb = 'false' extgeom = 'null' bs = ( 'null', 'null' ) # Check if regular blocking mode requested if options.block_size is not None: assert pixelsize is not None, "Pixel size is none, but regular blocking requested" assert blocksize is not None, "Block size is none, but regular blocking requested" assert extent is not None, "Extent is none, but regular blocking requested" assert len(pixelsize) == 2, "Invalid pixel size, two values expected" assert len(blocksize) == 2, "Invalid block size, two values expected" assert len(extent) == 4, "Invalid extent, four coordinates expected" assert len(extent[0]) == len(extent[3]) == 2, "Invalid extent, pair of X and Y pair expected" rb = 'true' bs = ( blocksize[0], blocksize[1] ) extgeom = "ST_Envelope(ST_SetSRID('POLYGON((%.15f %.15f,%.15f %.15f,%.15f %.15f,%.15f %.15f,%.15f %.15f))'::geometry, %d))" % \ (extent[0][0], extent[0][1], extent[1][0], extent[1][1], extent[2][0], extent[2][1], extent[3][0], extent[3][1], extent[0][0], extent[0][1], options.srid) sql = "SELECT AddRasterColumn('%s','%s','%s',%d, %s, %s, %s, %s, %.15f, %.15f, %s, %s, %s);\n" % \ (ts[0], ts[1], options.column, options.srid, pt, odb, rb, nd, pixelsize[0], pixelsize[1], bs[0], bs[1], extgeom) logit("SQL: %s" % sql) return sql def make_sql_insert_raster(table, rast, hexwkb, insert_filename, file): if insert_filename: assert file is not None, "Missing filename, but insert_filename requested" sql = "INSERT INTO %s ( filename, %s ) VALUES ( (\'%s\')::text, (\'%s\')::raster );\n" \ % (make_sql_full_table_name(table), rast, file, hexwkb) else: sql = "INSERT INTO %s ( %s ) VALUES ( (\'%s\')::raster );\n" \ % (make_sql_full_table_name(table), rast, hexwkb) # NOTE: Usually, no need for such detailed verbosity #logit("SQL: %s" % sql) return sql def make_sql_create_raster_overviews(options): schema = make_sql_schema_table_names(options.table)[0] table = make_sql_full_table_name(schema + '.raster_overviews') sql = 'CREATE TABLE ' + table + ' ( ' \ 'o_table_catalog character varying(256) NOT NULL, ' \ 'o_table_schema character varying(256) NOT NULL, ' \ 'o_table_name character varying(256) NOT NULL, ' \ 'o_column character varying(256) NOT NULL, ' \ 'r_table_catalog character varying(256) NOT NULL, ' \ 'r_table_schema character varying(256) NOT NULL, ' \ 'r_table_name character varying(256) NOT NULL, ' \ 'r_column character varying(256) NOT NULL, ' \ 'out_db boolean NOT NULL, ' \ 'overview_factor integer NOT NULL, ' \ 'CONSTRAINT raster_overviews_pk ' \ 'PRIMARY KEY (o_table_catalog, o_table_schema, o_table_name, o_column, overview_factor));\n' return sql def make_sql_register_overview(options, ov_table, ov_factor): assert len(ov_table) > 0 assert ov_factor > 0 catalog = quote_sql_value('') schema = make_sql_schema_table_names(options.table)[0] r_table = make_sql_table_name(options.table) sql = "INSERT INTO public.raster_overviews( " \ "o_table_catalog, o_table_schema, o_table_name, o_column, " \ "r_table_catalog, r_table_schema, r_table_name, r_column, out_db, overview_factor) " \ "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', FALSE, %d);\n" % \ (catalog, schema, ov_table, options.column, catalog, schema, r_table, options.column, ov_factor) return sql def make_sql_vacuum(table): sql = 'VACUUM ANALYZE ' + make_sql_full_table_name(table) + ';\n' return sql ################################################################################ # RASTER OPERATIONS def calculate_overviews(ds, band_from = None, band_to = None): assert ds is not None if band_from is None: band_from = 0 if band_to is None: band_to = ds.RasterCount assert band_to <= ds.RasterCount,'Failed checking band_to=%d <= RasterCount=%d' % (band_to,ds.RasterCount) assert band_from <= band_to nov = 0 for i in range(band_from, band_to + 1): n = ds.GetRasterBand(i).GetOverviewCount() if 0 == nov: nov = n assert n == nov, 'Number of raster overviews is not the same for all bands' return nov def calculate_overview_factor(ds, overview): assert ds is not None # Assume all bands have same layout of overviews band = ds.GetRasterBand(1) assert band is not None assert overview < band.GetOverviewCount() ov_band = band.GetOverview(overview) assert ov_band is not None ovf = int(0.5 + ds.RasterXSize / float(ov_band.XSize)) logit('MSG: Overview factor = %d\n' % ovf) return ovf def collect_pixel_types(ds, band_from, band_to): """Collect pixel types of bands in requested range. Use names of pixel types in format as returned by rt_core function rt_pixtype_name()""" pt =[] for i in range(band_from, band_to): band = ds.GetRasterBand(i) pixel_type = gdt2pt(band.DataType)['name'][3:] pt.append(pixel_type) return pt def collect_nodata_values(ds, band_from, band_to): """Collect nodata values of bands in requested range""" nd = [] for i in range(band_from, band_to): band = ds.GetRasterBand(i) nodata = band.GetNoDataValue() if nodata is not None and not is_nan(nodata): nd.append(nodata) return nd def calculate_block_size(ds, band_from, band_to): """Size of natural block reported by GDAL for bands of given dataset""" block_dims = None for i in range(band_from, band_to): band = ds.GetRasterBand(i) assert band is not None, "Cannot access raster band %d" % i dims = band.GetBlockSize() # Assume bands with common block size if i == band_from: block_dims = dims # Validate dimensions of bands block if block_dims != dims: logit("MSG: Block sizes don't match: %s != %s\n" % (str(block_dims), str(dims))) assert block_dims is not None, "Failed to calculate block size" return (int(block_dims[0]), int(block_dims[1])) def calculate_grid_size(raster_size, block_size): """Dimensions of grid made up with blocks of requested size""" # Exact number of grid dimensions nx = float(raster_size[0]) / float(block_size[0]) ny = float(raster_size[1]) / float(block_size[1]) return ( int(math.ceil(nx)), int(math.ceil(ny))) def calculate_block_pad_size(band, xoff, yoff, block_size): """Calculates number of columns [0] and rows [1] of padding""" assert band is not None xpad = 0 ypad= 0 block_bound = ( xoff + block_size[0], yoff + block_size[1] ) if block_bound[0] > band.XSize: xpad = block_bound[0] - band.XSize if block_bound[1] > band.YSize: ypad = block_bound[1] - band.YSize return (xpad, ypad) def get_gdal_geotransform(ds): assert ds is not None gt = list(ds.GetGeoTransform()) return tuple(gt) def calculate_geoxy(gt, xy): """Calculate georeferenced coordinate from given x and y""" assert gt is not None assert xy is not None assert len(xy) == 2 xgeo = gt[0] + gt[1] * xy[0] + gt[2] * xy[1]; ygeo = gt[3] + gt[4] * xy[0] + gt[5] * xy[1]; return (xgeo, ygeo) def calculate_geoxy_level(gt, xy, level): # Update pixel resolution according to overview level newgt = ( gt[0], gt[1] * float(level), gt[2], gt[3], gt[4], gt[5] * float(level) ) return calculate_geoxy(newgt, xy) def calculate_bounding_box(ds, gt): """Calculate georeferenced coordinates of spatial extent of raster dataset""" assert ds is not None # UL, LL, UR, LR dim = ( (0,0),(0,ds.RasterYSize),(ds.RasterXSize,0),(ds.RasterXSize,ds.RasterYSize) ) ext = (calculate_geoxy(gt, dim[0]), calculate_geoxy(gt, dim[1]), calculate_geoxy(gt, dim[2]), calculate_geoxy(gt, dim[3])) return ext def check_hex(hex, bytes_size = None): assert hex is not None, "Error: Missing hex string" size = len(hex) assert size > 0, "Error: hex string is empty" assert size % 2 == 0, "Error: invalid size of hex string" if bytes_size is not None: n = int(size / 2) assert n == bytes_size, "Error: invalid number of bytes %d, expected %d" % (n, bytes_size) def dump_block_numpy(pixels): assert pixels.ndim == 2 print 'BEGIN BLOCK SCANLINES (numpy): (%d, %d)' %(len(pixels[0]), len(pixels)) i = 0 for row in range (0, len(pixels)): s = binascii.hexlify(pixels[row]) print '%d (%d)\t%s' % (i, (len(s) / 2), s) i = i + 1 print 'END BLOCK SCANLINES' def fetch_band_nodata(band, default = 0): assert band is not None nodata = default if band.GetNoDataValue() is not None: nodata = band.GetNoDataValue() else: logit("WARNING: No nodata flagged in raster_columns metadata. " "In serialized raster, nodata bytes will have value of 0.\n") return nodata def wkblify(fmt, data): """Writes raw binary data into HEX-encoded string using binascii module.""" import struct # Binary to HEX fmt_little = '<' +fmt hexstr = binascii.hexlify(struct.pack(fmt_little, data)).upper() # String'ify raw value for log valfmt = '\'' + fmt2printfmt(fmt[len(fmt) - 1]) + '\'' val = valfmt % data logit('HEX (\'fmt=%s\', bytes=%d, val=%s):\t\t%s\n' \ % (fmt, len(hexstr) / 2, str(val), hexstr)) return hexstr def wkblify_raster_header(options, ds, level, ulp, xsize = None, ysize = None): """Writes WKT Raster header based on given GDAL into HEX-encoded WKB.""" assert ds is not None, "Error: Missing GDAL dataset" assert level >= 1 assert len(ulp) == 2 is not None, "Error: invalid upper-left corner" if xsize is None or ysize is None: assert xsize is None and ysize is None xsize = ds.RasterXSize ysize = ds.RasterYSize # Collect GeoReference information gt = get_gdal_geotransform(ds) ul = calculate_geoxy(gt, (ulp[0], ulp[1])) rt_ip = ( ul[0], ul[1] ) rt_skew = ( gt[2], gt[4] ) rt_scale = ( gt[1] * level, gt[5] * level ) # TODO: Any way to lookup for SRID based on SRS in WKT? #srs = osr.SpatialReference() #srs.ImportFromWkt(ds.GetProjection()) # Burn input raster as WKTRaster WKB format hexwkb = '' ### Endiannes hexwkb += wkblify('B', options.endian) ### Version hexwkb += wkblify('H', options.version) ### Number of bands if options.band is not None and options.band > 0: hexwkb += wkblify('H', 1) else: hexwkb += wkblify('H', ds.RasterCount) check_hex(hexwkb, 5) ### Georeference hexwkb += wkblify('d', rt_scale[0]) hexwkb += wkblify('d', rt_scale[1]) hexwkb += wkblify('d', rt_ip[0]) hexwkb += wkblify('d', rt_ip[1]) hexwkb += wkblify('d', rt_skew[0]) hexwkb += wkblify('d', rt_skew[1]) hexwkb += wkblify('i', options.srid) check_hex(hexwkb, 57) ### Number of columns and rows hexwkb += wkblify('H', xsize) hexwkb += wkblify('H', ysize) check_hex(hexwkb, 61) logit("MSG: Georeference: px = %s -> ul = %s \tresolution = %s \trotation = %s\n" \ % (str(ulp), str(rt_ip), str(rt_scale), str(rt_skew))) return hexwkb def wkblify_band_header(options, band): """Writes band header into HEX-encoded WKB""" assert band is not None, "Error: Missing GDAL raster band" hexwkb = "" first4bits = 0 # If the register option is enabled, set the first bit to 1 if options.register: first4bits = 128 nodata = band.GetNoDataValue() # If there is no nodata value, set it to 0. Otherwise set the HasNodata bit to 1 if nodata is not None: first4bits += 64 else: nodata = 0 # Encode pixel type pixtype = gdt2pt(band.DataType)['id'] hexwkb += wkblify('B', pixtype + first4bits) # Encode nodata value (or Zero, if nodata unavailable) hexwkb += wkblify(pt2fmt(pixtype), nodata) check_hex(hexwkb) return hexwkb def wkblify_band(options, band, level, xoff, yoff, read_block_size, block_size, infile, bandidx): """Writes band of given GDAL dataset into HEX-encoded WKB for WKT Raster output.""" assert band is not None, "Error: Missing GDAL raster band" hexwkb = '' if options.register: # Off-db raster # TODO: Do we want to handle options.overview_level? --mloskot # ANSWER: # TODO: Where bandidx and ds come from? --mloskot # ANSWER: Provided by caller method --jorgearevalo hexwkb += wkblify('B', bandidx - 1) filepath = os.path.abspath(infile.replace('\\', '\\\\')) logit('MSG: Out-db raster path=%s\n' % filepath) hexwkb += wkblify(str(len(filepath)) + 's', filepath) hexwkb += wkblify('B', 0) else: # In-db raster # Right most column and bottom most row of blocks have # portions that extend beyond the raster read_padding_size = calculate_block_pad_size(band, xoff, yoff, read_block_size) valid_read_block_size = ( read_block_size[0] - read_padding_size[0], read_block_size[1] - read_padding_size[1] ) if read_padding_size[0] > 0 or read_padding_size[1] > 0: target_block_size = (valid_read_block_size[0] / level, valid_read_block_size[1] / level) target_padding_size = (read_padding_size[0] / level, read_padding_size[1] / level) else: target_block_size = block_size target_padding_size = ( 0, 0 ) logit('MSG: Normalize read_block=%s for level=%d to valid_read_block=%s with padding=%s\n' % \ (read_block_size, level, valid_read_block_size, read_padding_size)) logit('MSG: Normalize target_block=%s for level=%d to valid_target_block=%s with padding=%s\n' % \ (block_size, level, target_block_size, target_padding_size)) logit('MSG: ReadAsArray( %d, %d, %s, %s)\n' % \ (xoff, yoff, str(valid_read_block_size), str(target_block_size))) assert valid_read_block_size[0] > 0 and valid_read_block_size[1] > 0 assert target_block_size[0] > 0 and target_block_size[1] > 0 pixels = band.ReadAsArray(xoff, yoff, valid_read_block_size[0], valid_read_block_size[1], target_block_size[0], target_block_size[1]) # XXX: Use for debugging only #dump_block_numpy(pixels) out_pixels = numpy.zeros((block_size[1], block_size[0]), pt2numpy(band.DataType)) logit('MSG: Read valid source:\t%d x %d\n' % (len(pixels[0]), len(pixels))) logit('MSG: Write into block:\t%d x %d\n' % (len(out_pixels[0]), len(out_pixels))) if target_padding_size[0] > 0 or target_padding_size[1] > 0: ysize_read_pixels = len(pixels) nodata_value = fetch_band_nodata(band) # Apply columns padding pad_cols = numpy.array([nodata_value] * target_padding_size[0]) for row in range (0, ysize_read_pixels): out_line = numpy.append(pixels[row], pad_cols) out_pixels[row] = out_line # Fill rows padding with nodata value for row in range(ysize_read_pixels, ysize_read_pixels + target_padding_size[1]): out_pixels[row].fill(nodata_value) else: out_pixels = pixels # XXX: Use for debugging only #dump_block_numpy(out_pixels) hexwkb = binascii.hexlify(out_pixels) check_hex(hexwkb) return hexwkb def wkblify_raster_level(options, ds, level, band_range, infile, i): assert ds is not None assert level >= 1 assert len(band_range) == 2 band_from = band_range[0] band_to = band_range[1] # Collect raster and block dimensions raster_size = ( ds.RasterXSize, ds.RasterYSize ) if options.block_size is not None: block_size = parse_block_size(options) read_block_size = ( block_size[0] * level, block_size[1] * level) grid_size = calculate_grid_size(raster_size, read_block_size) else: block_size = raster_size # Whole raster as a single block read_block_size = block_size grid_size = (1, 1) logit("MSG: Processing raster=%s using read_block_size=%s block_size=%s of grid=%s in level=%d\n" % \ (str(raster_size), str(read_block_size), str(block_size), str(grid_size), level)) # Register base raster in RASTER_COLUMNS - SELECT AddRasterColumn(); if level == 1: if i == 0 and options.create_table: gt = get_gdal_geotransform(ds) pixel_size = ( gt[1], gt[5] ) pixel_types = collect_pixel_types(ds, band_from, band_to) nodata_values = collect_nodata_values(ds, band_from, band_to) extent = calculate_bounding_box(ds, gt) sql = make_sql_addrastercolumn(options, pixel_types, nodata_values, pixel_size, block_size, extent) options.output.write(sql) gen_table = options.table else: # Create overview table and register in RASTER_OVERVIEWS # CREATE TABLE o_<LEVEL>_<NAME> ( rid serial, options.column RASTER ) schema_table_names = make_sql_schema_table_names(options.table) level_table_name = 'o_' + str(level) + '_' + schema_table_names[1] level_table = schema_table_names[0] + '.' + level_table_name if i == 0: sql = make_sql_create_table(options, level_table, True) options.output.write(sql) sql = make_sql_register_overview(options, level_table_name, level) options.output.write(sql) gen_table = level_table # Write (original) raster to hex binary output tile_count = 0 hexwkb = '' for ycell in range(0, grid_size[1]): for xcell in range(0, grid_size[0]): xoff = xcell * read_block_size[0] yoff = ycell * read_block_size[1] logit("MSG: --------- CELL #%04d\tindex = %d x %d\tdim = (%d x %d)\t(%d x %d) \t---------\n" % \ (tile_count, xcell, ycell, xoff, yoff, xoff + read_block_size[0], yoff + read_block_size[1])) if options.block_size is not None: hexwkb = '' # Reset buffer as single INSERT per tile is generated hexwkb += wkblify_raster_header(options, ds, level, (xoff, yoff), block_size[0], block_size[1]) else: hexwkb += wkblify_raster_header(options, ds, level, (xoff, yoff)) for b in range(band_from, band_to): band = ds.GetRasterBand(b) assert band is not None, "Missing GDAL raster band %d" % b logit("MSG: Band %d\n" % b) hexwkb += wkblify_band_header(options, band) hexwkb += wkblify_band(options, band, level, xoff, yoff, read_block_size, block_size, infile, b) # INSERT INTO check_hex(hexwkb) # TODO: Remove to not to decrease performance sql = make_sql_insert_raster(gen_table, options.column, hexwkb, options.filename, infile) options.output.write(sql) tile_count = tile_count + 1 return (gen_table, tile_count) def wkblify_raster(options, infile, i, previous_gt = None): """Writes given raster dataset using GDAL features into HEX-encoded of WKB for WKT Raster output.""" assert infile is not None, "Input file is none, expected file name" assert options.version == g_rt_version, "Error: invalid WKT Raster protocol version" assert options.endian == NDR, "Error: invalid endianness, use little-endian (NDR) only" assert options.srid >= -1, "Error: do you really want to specify SRID = %d" % options.srid # Open source raster file ds = gdal.Open(infile, gdalc.GA_ReadOnly); if ds is None: sys.exit('Error: Cannot open input file: ' + str(infile)) # By default, translate all raster bands # Calculate range for single-band request if options.band is not None and options.band > 0: band_range = ( options.band, options.band + 1 ) else: band_range = ( 1, ds.RasterCount + 1 ) # Compare this px size with previous one current_gt = get_gdal_geotransform(ds) if previous_gt is not None: if previous_gt[1] != current_gt[1] or previous_gt[5] != current_gt[5]: sys.exit('Error: Cannot load raster with different pixel size in the same raster table') # Generate requested overview level (base raster if level = 1) summary = wkblify_raster_level(options, ds, options.overview_level, band_range, infile, i) SUMMARY.append( summary ) # Cleanup ds = None return current_gt ################################################################################ def main(): (opts, args) = parse_command_line() global VERBOSE VERBOSE = opts.verbose global SUMMARY SUMMARY = [] saved_out = sys.stdout if type(opts.output) is str: filename = opts.output opts.output = open(filename, "w") # BEGIN opts.output.write('BEGIN;\n') # If overviews requested, CREATE TABLE raster_overviews if opts.create_raster_overviews_table: sql = make_sql_create_raster_overviews(opts) opts.output.write(sql) # Base raster schema if opts.overview_level == 1: # DROP TABLE if opts.drop_table: sql = make_sql_drop_raster_table(opts.table) opts.output.write(sql) # CREATE TABLE if opts.create_table and opts.overview_level == 1: sql = make_sql_create_table(opts) opts.output.write(sql) # INSERT i = 0 # Burn all specified input raster files into single WKTRaster table gt = None for infile in opts.raster: filelist = glob.glob(infile) assert len(filelist) > 0, "No input raster files found for '" + str(infile) + "'" for filename in filelist: logit("MSG: Dataset #%d: %s\n" % (i + 1, filename)) # Write raster data to WKB and send it to opts.output gt = wkblify_raster(opts, filename.replace( '\\', '/') , i, gt) i += 1 # INDEX if opts.index and SUMMARY is not None: sql = make_sql_create_gist(SUMMARY[0][0], opts.column) opts.output.write(sql) # COMMIT opts.output.write('END;\n') # VACUUM if opts.vacuum and SUMMARY is not None: sql = make_sql_vacuum(SUMMARY[0][0]) opts.output.write(sql) # Cleanup if opts.output != sys.stdout: sys.stdout = saved_out print "------------------------------------------------------------" print " Summary of GDAL to PostGIS Raster processing:" print "------------------------------------------------------------" if i == 1: m = '%d (%s)' % (i, infile) else: m = '%d' % i print "Number of processed raster files: " + m print "List of generated tables (number of tiles):" i = 0 for s in SUMMARY: i += 1 print "%d\t%s (%d)" % (i, s[0], s[1]) ################################################################################ if __name__ == "__main__": main() ���postgis-2.1.2+dfsg.orig/raster/scripts/python/rtreader.py�������������������������������������������0000755�0000000�0000000�00000015623�12233537203�022264� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id: rtreader.py 12060 2013-10-28 19:44:03Z dustymugs $ # # A simple driver to read RASTER field data directly from PostGIS/WKTRaster. # # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################### # # Requirements: psycopg2 # # WARNING: Tha main purpose of the RasterReader is to test and debug # WKT Raster implementation. It is not supposed to be an efficient # performance killer, by no means. # ############################################################################### import psycopg2 import sys ############################################################################### # RASTER driver (read-only) class RasterError(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg class RasterReader(object): """Reader of RASTER data stored in specified column and row (where) in a table""" # Constructors def __init__(self, connstr, table, column, where = ""): self._connstr = connstr self._conn = None self._table = table self._column = column self._where = where self._sizes = None self._types = None self._logging = False # Connect and read RASTER header self._setup() # Public properties logging = property(fset = lambda self, v: setattr(self, '_logging', v)) db = property(fget = lambda self: self._get_db()) table = property(fget = lambda self: self._table) column = property(fget = lambda self: self._column) width = property(fget = lambda self: self._get_width()) height = property(fget = lambda self: self._get_height()) num_bands = property(fget = lambda self: self._get_num_bands()) pixel_types = property(fget = lambda self: self._get_pixel_types()) # Public methods def get_value(self, band, x, y): return self._query_value(band, x, y) def copy_to(self, file, raster_format='TIFF', output_format='HEX', sep='\t'): """ Proxy for SQL command COPY TO, Converts selected rasters to specified raster_format with output sent either to single hex-based plain text file or one or more binary files in raster_format, one raster binary file per tuple from the raster table. The BIN output uses HEX output as intermediate stage. raster_format - TIFF|JPEG|PNG output_format - HEX|BIN; BIN is a binary file in raster_format sep - if output_format=HEX, separates rid value from hex-encoded binary. """ import os.path filehex = file # No extension added, may be user-defiened with open(filehex, 'w') as f: select = "SELECT rid, encode(ST_As%s(%s), 'hex') As rt FROM %s" % (raster_format, self._column, self._table) if self._where is not None and len(self._where) > 0: select += ' WHERE %s' % self._where sql = "COPY (%s) TO STDOUT (DELIMITER '%s')" % (select, sep) cur = self._conn.cursor() cur.copy_expert(sql, f) if output_format == 'BIN': import binascii with open(filehex, 'r') as f: dirname = os.path.dirname(file) ext = raster_format.lower() for line in f.readlines(): rid, raster = line.split() filebin = self._table + '_' + self._column + '_' + rid + '.' + ext filebin = os.path.join(dirname, filebin) with open(filebin, 'w+') as fbin: fbin.write(binascii.unhexlify(raster)) # Private methods def _log(self, m): if self._logging: sys.stderr.write('[rtreader] ' + str(m) + '\n') def _get_db(self): n = filter(lambda db: db[:6] == 'dbname', self._connstr.split())[0].split('=')[1] return n.strip('\'').strip() def _get_width(self): return self._query_raster_size(0) def _get_height(self): return self._query_raster_size(1) def _get_num_bands(self): return self._query_raster_size(2) def _get_pixel_types(self): return self._query_pixel_types() def _setup(self): self._connect() def _connect(self): try: if self._conn is None: self._conn = psycopg2.connect(self._connstr) except Exception as e: raise RasterError("Falied to connect to %s: %s" % (self._connstr, e)) def _query_single_row(self, sql): assert self._conn is not None #self._log(sql) try: cur = self._conn.cursor() cur.execute(sql) except Exception as e: raise RasterError("Failed to execute query %s: %s" % (sql, e)) row = cur.fetchone() if row is None: raise RasterError("No tupes returned for query: %s" % sql) return row def _query_value(self, band, x, y): sql = 'SELECT st_value(%s, %d, %d, %d) FROM %s' % \ (self._column, band, x, y, self._table) if len(self._where) > 0: sql += ' WHERE %s' % self._where row = self._query_single_row(sql) if row is None: raise RasterError("Value of pixel %dx%d of band %d is none" %(x, y, band)) return row[0] def _query_raster_size(self, dim, force = False): if self._sizes is None or force is True: sql = 'SELECT st_width(%s), st_height(%s), st_numbands(%s) FROM %s' % \ (self._column, self._column, self._column, self._table) if len(self._where) > 0: sql += ' WHERE %s' % self._where self._log(sql) self._sizes = self._query_single_row(sql) if self._sizes is None: raise RasterError("Falied to query %dx%d of band %d is none" %(x, y, band)) return self._sizes[dim] def _query_pixel_types(self): types = [] sql = 'SELECT ' for i in range(0, self.num_bands): if i != 0: sql += ',' nband = i + 1 sql += ' st_bandpixeltype(%s, %d) ' % (self._column, nband) sql += ' FROM ' + self._table return self._query_single_row(sql) �������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/Makefile.in�������������������������������������������0000644�0000000�0000000�00000002477�12233537203�022147� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id: Makefile.in 12060 2013-10-28 19:44:03Z dustymugs $ # # Copyright (c) 2009 Pierre Racine <pierre.racine@sbf.ulaval.ca> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# CP = cp -p # Filenames with extension as determined by the OS RASTER2PGSQL=raster2pgsql.py # PostgreSQL executable directory PGSQL_BINDIR=@PGSQL_BINDIR@ all: install: # $(CP) $(RASTER2PGSQL) $(DESTDIR)$(PGSQL_BINDIR)/$(RASTER2PGSQL) uninstall: # $(RM) $(DESTDIR)$(PGSQL_BINDIR)/$(RASTER2PGSQL) clean: rm -f *.o distclean: clean rm -f Makefile �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/Makefile.rt.sample������������������������������������0000644�0000000�0000000�00000006102�12233537203�023433� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id: Makefile.rt.sample 12060 2013-10-28 19:44:03Z dustymugs $ # # Makefile used to simplify creation of PostGIS and WKT Raster enabled # database. Run make -f Makefile.rt to see usage message. # ############################################################################# # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# # # Instructions: # You may need to update the location of SQL scripts of PostGIS # and WKT Raster extensions. # ### BEGIN OF CONFIGURATION ################################################## POSTGIS = /usr/share/postgresql/8.4/contrib/postgis-2.0 RTPOSTGIS = /usr/share/postgresql/8.4/contrib/rtpostgis-2.0 ### END OF CONFIGURATION #################################################### # # *** DO NOT EDIT ANYTHING BELOW *** ifndef VERBOSE ERROUT=2>&1 endif all: @echo "****** Makefile.rt usage ******" @echo "*** Create PostGIS and WKT Raster enabled database:" @echo "\tDBNAME=mydb make -f Makefile.rt create" @echo "*** Drop PostGIS and WKT Raster enabled database:" @echo "\tDBNAME=mydb make -f Makefile.rt drop" @echo "*** Check if database exists:" @echo "\tDBNAME=mydb make -f Makefile.rt check" @echo "PostGIS installation scripts: $(POSTGIS)" drop: @echo "****** Makefile.rt ******" ifdef DBNAME @echo "*** Dropping database '$(DBNAME)'..." @dropdb $(DBNAME) > /dev/null $(ERROUT); @echo "****** END. *******" else @echo "****** Missing DBNAME option. Aborting." endif create: @echo "****** Makefile.rt ******" ifdef DBNAME @echo "****** Creating database '$(DBNAME)'..." @createdb --tablespace=tablespace2 $(DBNAME) > /dev/null $(ERROUT); @createlang plpgsql $(DBNAME) > /dev/null $(ERROUT); @echo "****** Loading PostGIS into '$(DBNAME)'..." @psql -d $(DBNAME) -f $(POSTGIS)/postgis.sql > /dev/null $(ERROUT); @psql -d $(DBNAME) -f $(POSTGIS)/spatial_ref_sys.sql > /dev/null $(ERROUT); @echo "****** Loading WKT Raster into '$(DBNAME)'..." @psql -d $(DBNAME) -f $(RTPOSTGIS)/rtpostgis.sql > /dev/null $(ERROUT); @echo "****** END. *******" else @echo "****** Missing DBNAME option. Aborting." endif check: @echo "****** Makefile.rt ******" ifeq ($(shell psql -l | grep ' $(DBNAME) ' | wc -l), 1) @echo "****** Database '$(DBNAME)' found" else @echo "****** Database '$(DBNAME)' not found" endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/python/rtpixdump.py������������������������������������������0000755�0000000�0000000�00000006346�12233537203�022512� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python # # $Id: rtpixdump.py 12060 2013-10-28 19:44:03Z dustymugs $ # # Brute-force dump of all pixels of all bands in WKT Raster field/row to text. # This utility is handy for debugging purposes. # # Copyright (C) 2009 Mateusz Loskot <mateusz@loskot.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################### import rtreader from optparse import OptionParser import sys def logit(msg): if VERBOSE is True: sys.stderr.write("LOG - " + msg + "\n") ############################################################################### try: prs = OptionParser(version="%prog $Revision: 12060 $", usage="%prog -d <DB> -t <TABLE> [-c <COLUMN>]", description="Brute-force dump of all pixel values of WKT Raster dataset") prs.add_option("-d", "--db", dest="db", action="store", default=None, help="PostgreSQL database connection string, required") prs.add_option("-t", "--table", dest="table", action="store", default=None, help="table with raster column [<schema>.]<table>, required") prs.add_option("-c", "--column", dest="column", action="store", default="rast", help="raster column, optional, default=rast") prs.add_option("-w", "--where", dest="where", action="store", default=None, help="SQL WHERE clause to filter record - NOT IMPLEMENTED") prs.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help="be excessively verbose and useful for debugging") (opts, args) = prs.parse_args() if opts.db is None: prs.error("use -d option to specify database connection string") if opts.table is None: prs.error("use -t option to specify raster table") if opts.column is None: prs.error("use -c option to specify raster column in raster table") global VERBOSE VERBOSE = opts.verbose rast = rtreader.RasterReader(opts.db, opts.table, opts.column) logit("Connected to %s" % opts.db) logit("Raster width=%d, height=%d, bands=%d" %(rast.width, rast.height, rast.num_bands)) for band in range(1, rast.num_bands + 1): logit("--- BAND %d ---------------------------------" % band) sys.stderr.write("\n") for y in range(1, rast.height + 1): scanline = "" for x in range(1, rast.width + 1): scanline += str(int(rast.get_value(band, x, y))) + '\t' print scanline print # Bands separator except rtreader.RasterError, e: print "ERROR - ", e ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/�����������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�020234� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_createindexraster.sql�����������������������������0000644�0000000�0000000�00000010321�11760750117�025176� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------------------------------------------------------- -- Create an index raster. Georeference is borrowed from the provided raster. -- pixeltype - The pixeltype of the resulting raster -- startvalue - The first index value assigned to the raster. Default to 0. -- incwithx - If true, the index increments when the x position of the pixel increments. -- The index decrement on x otherwise. Default to true. -- incwithy - If true, the index increments when the y position of the pixel increments. -- The index decrement on y otherwise. Default to true. -- columnfirst - If true, columns are traversed first. -- Rows are traversed first otherwise. Default to true. -- rowscanorder - If true, the raster is traversed in "row scan" order. -- Row prime order (Boustrophedon) is used otherwise. Default to true. -- falsecolinc - Overwrite the column index increment which is normally equal to ST_Height() -- falserowinc - Overwrite the row index increment which is normally equal to ST_Width() ---------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_CreateIndexRaster(rast raster, pixeltype text DEFAULT '32BUI', startvalue int DEFAULT 0, incwithx boolean DEFAULT true, incwithy boolean DEFAULT true, columnfirst boolean DEFAULT true, rowscanorder boolean DEFAULT true, falsecolinc int DEFAULT NULL, falserowinc int DEFAULT NULL) RETURNS raster AS $BODY$ DECLARE newraster raster := ST_AddBand(ST_MakeEmptyRaster(rast), pixeltype); x int; y int; w int := ST_Width(newraster); h int := ST_Height(newraster); rowincx int := Coalesce(falserowinc, w); colincx int := Coalesce(falsecolinc, h); rowincy int := Coalesce(falserowinc, 1); colincy int := Coalesce(falsecolinc, 1); xdir int := CASE WHEN Coalesce(incwithx, true) THEN 1 ELSE w END; ydir int := CASE WHEN Coalesce(incwithy, true) THEN 1 ELSE h END; xdflag int := Coalesce(incwithx::int, 1); ydflag int := Coalesce(incwithy::int, 1); rsflag int := Coalesce(rowscanorder::int, 1); newstartvalue int := Coalesce(startvalue, 0); newcolumnfirst boolean := Coalesce(columnfirst, true); BEGIN IF newcolumnfirst THEN IF colincx <= (h - 1) * rowincy THEN RAISE EXCEPTION 'Column increment (now %) must be greater than the number of index on one column (now % pixel x % = %)...', colincx, h - 1, rowincy, (h - 1) * rowincy; END IF; newraster = ST_SetBandNodataValue(ST_MapAlgebraExpr(newraster, pixeltype, 'abs([rast.x] - ' || xdir::text || ') * ' || colincx::text || ' + abs([rast.y] - (' || h::text || ' ^ ((abs([rast.x] - ' || xdir::text || ' + 1) % 2) | ' || rsflag::text || ' # ' || ydflag::text || '))::int) * ' || rowincy::text || ' + ' || newstartvalue::text), ST_BandNodataValue(newraster)); ELSE IF rowincx <= (w - 1) * colincy THEN RAISE EXCEPTION 'Row increment (now %) must be greater than the number of index on one row (now % pixel x % = %)...', rowincx, w - 1, colincy, (w - 1) * colincy; END IF; newraster = ST_SetBandNodataValue(ST_MapAlgebraExpr(newraster, pixeltype, 'abs([rast.x] - (' || w::text || ' ^ ((abs([rast.y] - ' || ydir::text || ' + 1) % 2) | ' || rsflag::text || ' # ' || xdflag::text || '))::int) * ' || colincy::text || ' + abs([rast.y] - ' || ydir::text || ') * ' || rowincx::text || ' + ' || newstartvalue::text), ST_BandNodataValue(newraster)); END IF; RETURN newraster; END; $BODY$ LANGUAGE plpgsql VOLATILE; -- test SELECT ST_AsBinary((gvxy).geom), (gvxy).val, (gvxy).x, (gvxy).y FROM (SELECT ST_PixelAsPolygons(ST_CreateIndexRaster(ST_MakeEmptyRaster(2, 2, 0, 0, 1), '32BSI', null, null, null, null, null, 3, null)) gvxy) foo SELECT Coalesce(null::int, 2);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_asraster.sql��������������������������������������0000644�0000000�0000000�00000004116�11722777314�023321� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_asraster.sql 9324 2012-02-27 22:08:12Z pramsey $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- NOTE: The ST_AsRaster() function is already implemented in C. This plpgsql script is provided only as an example. -- Defining the plpgsql function below might overwrite the current C implementation and brake other functions dependent on it. -- Use with caution. CREATE OR REPLACE FUNCTION ST_AsRaster(geom geometry, rast raster, pixeltype text, nodatavalue float8, val float8) RETURNS raster AS $$ DECLARE numband int := ST_NumBands(rast); x1w float8 := ST_XMin(geom); y1w float8 := ST_YMax(geom); x2w float8 := ST_XMax(geom); y2w float8 := ST_YMin(geom); x1r int := ST_World2RasterCoordX(rast, x1w, y1w); y1r int := ST_World2RasterCoordY(rast, x1w, y1w); x2r int := ST_World2RasterCoordX(rast, x2w, y2w); y2r int := ST_World2RasterCoordY(rast, x2w, y2w); newx1w float8 := ST_Raster2WorldCoordX(rast, x1r, y1r); newy1w float8 := ST_Raster2WorldCoordY(rast, x1r, y1r); newwidth int := abs(x2r - x1r) + 1; newheight int := abs(y2r - y1r) + 1; newrast raster := ST_AddBand(ST_MakeEmptyRaster(newwidth, newheight, newx1w, newy1w, ST_ScaleX(rast), ST_ScaleY(rast), ST_SkewX(rast), ST_SkewY(rast), ST_SRID(rast)), pixeltype, nodatavalue, nodatavalue); BEGIN FOR x IN 1..newwidth LOOP FOR y IN 1..newheight LOOP IF ST_Intersects(geom, ST_Centroid(ST_PixelAsPolygon(newrast, x, y))) THEN newrast := ST_SetValue(newrast, 1, x, y, val); END IF; END LOOP; END LOOP; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; -- Test SELECT (gv).geom, (gv).val FROM (SELECT (ST_PixelAsPolygons(rast, 1)) gv FROM (SELECT ST_AsRaster(the_geom, (SELECT rast FROM srtm_tiled_100x100 LIMIT 1), '8BSI', -1, 1) rast FROM realcaribou_buffers_wgs LIMIT 10) foo) foi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_clip.sql������������������������������������������0000644�0000000�0000000�00000017750�11722777314�022434� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_clip.sql 9324 2012-02-27 22:08:12Z pramsey $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- NOTE: The ST_Clip function found in this file still many improvements before being implemented in C. CREATE OR REPLACE FUNCTION ST_Clip(rast raster, x int, y int, width int, height int) RETURNS raster AS $$ DECLARE newrast raster := ST_MakeEmptyRaster(width, height, ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_ScaleX(rast), ST_ScaleY(rast), ST_SkewX(rast), ST_SkewY(rast), ST_SRID(rast)); numband int := ST_Numbands(rast); band int; cx int; cy int; newwidth int := CASE WHEN x + width > ST_Width(rast) THEN ST_Width(rast) - x ELSE width END; newheight int := CASE WHEN y + height > ST_Height(rast) THEN ST_Height(rast) - y ELSE height END; BEGIN FOR b IN 1..numband LOOP newrast := ST_AddBand(newrast, ST_PixelType(rast, band), ST_NodataValue(rast, band), ST_NodataValue(rast, band)); FOR cx IN 1..newwidth LOOP FOR cy IN 1..newheight LOOP newrast := ST_SetValue(newrast, band, cx, cy, ST_Value(rast, band, cx + x - 1, cy + y - 1)); END LOOP; END LOOP; END LOOP; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; ------------------------------------------------------------------- -- ST_Clip -- Clip the values of a raster to the shape of a polygon. -- -- rast - raster to be clipped -- band - limit the result to only one band -- geom - geometry defining the she to clip the raster -- nodata - define (if there is none defined) or replace the raster nodata value with this value -- trimraster - limit the extent of the result to the extent of the geometry -- Todo: -- test point -- test line -- test polygon smaller than pixel -- test and optimize raster totally included in polygon CREATE OR REPLACE FUNCTION ST_Clip(rast raster, band int, geom geometry, nodata float8 DEFAULT null, trimraster boolean DEFAULT false) RETURNS raster AS $$ DECLARE sourceraster raster := rast; newrast raster; geomrast raster; numband int := ST_Numbands(rast); bandstart int; bandend int; newextent text; newnodata float8; newpixtype text; bandi int; BEGIN IF rast IS NULL THEN RETURN null; END IF; IF geom IS NULL THEN RETURN rast; END IF; IF band IS NULL THEN bandstart := 1; bandend := numband; ELSEIF ST_HasNoBand(rast, band) THEN RAISE NOTICE 'Raster do not have band %. Returning null', band; RETURN null; ELSE bandstart := band; bandend := band; END IF; newpixtype := ST_BandPixelType(rast, bandstart); newnodata := coalesce(nodata, ST_BandNodataValue(rast, bandstart), ST_MinPossibleValue(newpixtype)); newextent := CASE WHEN trimraster THEN 'INTERSECTION' ELSE 'FIRST' END; --RAISE NOTICE 'newextent=%', newextent; -- Convert the geometry to a raster geomrast := ST_AsRaster(geom, rast, ST_BandPixelType(rast, band), 1, newnodata); -- Set the newnodata sourceraster := ST_SetBandNodataValue(sourceraster, bandstart, newnodata); -- Compute the first raster band newrast := ST_MapAlgebraExpr(sourceraster, bandstart, geomrast, 1, '[rast1.val]', newpixtype, newextent); FOR bandi IN bandstart+1..bandend LOOP --RAISE NOTICE 'bandi=%', bandi; -- for each band we must determine the nodata value newpixtype := ST_BandPixelType(rast, bandi); newnodata := coalesce(nodata, ST_BandNodataValue(sourceraster, bandi), ST_MinPossibleValue(newpixtype)); sourceraster := ST_SetBandNodataValue(sourceraster, bandi, newnodata); newrast := ST_AddBand(newrast, ST_MapAlgebraExpr(sourceraster, bandi, geomrast, 1, '[rast1.val]', newpixtype, newextent)); END LOOP; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; -- Variant defaulting to band 1 CREATE OR REPLACE FUNCTION ST_Clip(rast raster, geom geometry, nodata float8 DEFAULT null, trimraster boolean DEFAULT false) RETURNS raster AS $$ SELECT ST_Clip($1, 1, $2, $3, $4); $$ LANGUAGE 'SQL'; -- Variant defaulting nodata to the one of the raster or the min possible value CREATE OR REPLACE FUNCTION ST_Clip(rast raster, band int, geom geometry, trimraster boolean) RETURNS raster AS $$ SELECT ST_Clip($1, $2, $3, null, $4); $$ LANGUAGE 'SQL'; -- Variant defaulting nodata to the one of the raster or the min possible value CREATE OR REPLACE FUNCTION ST_Clip(rast raster, geom geometry, trimraster boolean) RETURNS raster AS $$ SELECT ST_Clip($1, 1, $2, null, $3); $$ LANGUAGE 'SQL'; -- Test CREATE OR REPLACE FUNCTION ST_TestRaster(h integer, w integer, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(h, w, 0, 0, 1, 1, 0, 0, 0), '32BF', val, 0); END; $$ LANGUAGE 'plpgsql'; SELECT ST_Clip(ST_TestRaster(10, 10, 2), 1, ST_Buffer(ST_MakePoint(8, 5), 4)) rast -- Test one band raster SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_Clip(ST_TestRaster(10, 10, 2), 1, ST_Buffer(ST_MakePoint(8, 5), 4))) gv -- Test two bands raster SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_Clip(ST_AddBand(ST_TestRaster(10, 10, 2), '16BUI'::text, 4, 0), null, ST_Buffer(ST_MakePoint(8, 5), 4)), 2) gv -- Test one band raster with trimraster set to true SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_Clip(ST_TestRaster(10, 10, 2), 1, ST_Buffer(ST_MakePoint(8, 5), 4), null, true)) gv -- Test two bands raster with trimraster set to true SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_Clip(ST_AddBand(ST_TestRaster(10, 10, 2), '16BUI'::text, 4, 0), null, ST_Buffer(ST_MakePoint(8, 5), 4), null, true), 2) gv -- Test nodatavalue set by the first raster SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_SetBandNoDataValue(ST_Clip(ST_TestRaster(10, 10, 2), 1, ST_Buffer(ST_MakePoint(8, 5), 4)), null)) gv -- Test nodatavalue set by the parameter SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_SetBandNoDataValue(ST_Clip(ST_TestRaster(10, 10, 2), 1, ST_Buffer(ST_MakePoint(8, 5), 4), -10), null)) gv -- Test nodatavalue set by the min possible value SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_SetBandNoDataValue(ST_Clip(ST_SetBandNoDataValue(ST_TestRaster(10, 10, 2), null), 1, ST_Buffer(ST_MakePoint(8, 5), 4)), null)) gv -- Test the variant defaulting to band 1 SELECT ST_Numbands(ST_Clip(ST_AddBand(ST_TestRaster(10, 10, 2), '16BUI'::text, 4, 0), ST_Buffer(ST_MakePoint(8, 5), 4))) gv SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_Clip(ST_AddBand(ST_TestRaster(10, 10, 2), '16BUI'::text, 4, 0), ST_Buffer(ST_MakePoint(8, 5), 4)), 1) gv -- Test defaulting to min possible value and band 1 SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_SetBandNoDataValue(ST_Clip(ST_SetBandNoDataValue(ST_TestRaster(10, 10, 2), null), ST_Buffer(ST_MakePoint(8, 5), 4)), null)) gv -- Test defaulting to nodatavalue set by the first raster and band 1 SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_SetBandNoDataValue(ST_Clip(ST_TestRaster(10, 10, 2), ST_Buffer(ST_MakePoint(8, 5), 4)), null)) gv -- Test when band number does not exist SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_Clip(ST_TestRaster(10, 10, 2), 2, ST_Buffer(ST_MakePoint(8, 5), 4))) gv -- Test point -- bug. The produced raster does not have the same alignment SELECT ST_AsBinary((gv).geom), (gv).val FROM ST_PixelAsPolygons(ST_Clip(ST_TestRaster(10, 10, 2), ST_MakePoint(8.5, 5.5))) gv ������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_tile.sql������������������������������������������0000644�0000000�0000000�00000023234�11722777314�022434� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_tile.sql 8255 2011-11-29 16:34:48Z pracine $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- ST_Tile -- Split a raster into a set of raster tiles, one tile per row returned. -- Works on multiband rasters. There is no way to specify the upper left -- corner of the new tiled grid. The grid start at the upperleft corner -- of the provided raster. -- -- rast - Raster to be tiled. -- width - Width of the tiles. -- height - Height of the tiles -- padwithnodata - If TRUE, the produced tiles are strictly width x heigth pixels. -- Pixels outside the extent of the passed raster are filled with -- nodata value. When FALSE out of bound tiles are clipped to the -- extent of the raster. Default to FALSE. -- nodatavalue - nodata value to use to pad the outbound tiles when the provided -- raster do not have a nodata value defined. If not provided and -- the raster do not have a nodata value defined -- ST_MinPossibleValue(ST_BandPixelType(rast, band)) is used for each band. -- -- Example producing 120 x 120 pixel tiles -- -- CREATE TABLE srtm_22_03_tiled_120x120 AS -- SELECT ST_Tile(rast, 120, 120, true), generate_series(1, 3600) rid -- FROM srtm_22_03; ---------------------------------------------------------------------------------------------------------------------- DROP FUNCTION IF EXISTS ST_Tile(rast raster, width integer, height integer, padwithnodata boolean, nodatavalue double precision); CREATE OR REPLACE FUNCTION ST_Tile(rast raster, width integer, height integer, padwithnodata boolean DEFAULT FALSE, nodatavalue double precision DEFAULT NULL) RETURNS SETOF raster AS $$ DECLARE gridrast raster; rastwidth integer; rastheight integer; gridwidth integer; gridheight integer; newnodata double precision; newpixtype text; nbband integer; bandi integer; newrast raster; initvalue double precision; grid record; geomrast raster; BEGIN IF rast IS NULL THEN RETURN; END IF; nbband := ST_Numbands(rast); IF nbband < 1 THEN RAISE NOTICE 'Raster do not have band %. Returning null', band; RETURN; END IF; rastwidth := ST_Width(rast); IF width IS NULL THEN width := rastwidth; END IF; rastheight := ST_Height(rast); IF height IS NULL THEN height := rastheight; END IF; gridwidth := (rastwidth / width) + CASE WHEN rastwidth % width > 0 THEN 1 ELSE 0 END; gridheight := (rastheight / height) + CASE WHEN rastheight % height > 0 THEN 1 ELSE 0 END; gridrast := ST_AddBand(ST_MakeEmptyRaster(gridwidth, gridheight, ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_ScaleX(rast) * width, ST_ScaleY(rast) * height, ST_SkewX(rast), ST_SkewY(rast), ST_SRID(rast)), '8BUI'::text, 1, 0); IF padwithnodata THEN FOR grid IN SELECT (ST_PixelAsPolygons(gridrast)).geom LOOP FOR bandi IN 1..nbband LOOP -- for each band we must determine the nodata value newpixtype := ST_BandPixelType(rast, bandi); newnodata := ST_BandNodataValue(rast, bandi); IF newnodata IS NULL THEN newnodata := coalesce(nodatavalue, ST_MinPossibleVal(newpixtype)); rast := ST_SetBandNodataValue(rast, newnodata); END IF; --RAISE NOTICE 'newnodata1 %', ST_BandNodataValue(rast); geomrast := ST_AsRaster(grid.geom, rast); IF bandi = 1 THEN newrast := ST_SetBandNodataValue(ST_MapAlgebraExpr(rast, 1, geomrast, 1, 'RAST1', newpixtype, 'SECOND', newnodata::text, newnodata::text, newnodata), newnodata); ELSE newrast := ST_AddBand(newrast, ST_SetBandNodataValue(ST_MapAlgebraExpr(rast, bandi, geomrast, 1, 'RAST1', newpixtype, 'SECOND', newnodata::text, newnodata::text, newnodata), newnodata)); END IF; --RAISE NOTICE 'newnodata2 = %, newnodata = %, numbands = %, type = %, newset = %', ST_BandNodataValue(newrast), newnodata, ST_NumBands(newrast), ST_BandPixelType(newrast), ST_BandNodataValue(ST_SetBandNodataValue(newrast, 1, -4)); END LOOP; RETURN NEXT newrast; END LOOP; RETURN; ELSE RETURN QUERY SELECT ST_Clip(rast, (ST_PixelAsPolygons(gridrast)).geom, NULL, TRUE) rast; END IF; RETURN; END; $$ LANGUAGE 'plpgsql'; ---------------------------------------------------------------------- -- ST_TileAsGeom -- Split a raster into a set of raster tiles, returning only the geometry -- corresponding to each tile. -- There is no way to specify the upper left corner of the new tiled grid. -- The grid start at the upperleft corner of the provided raster. -- -- rast - Raster to be tiled. -- width - Width of the tiles. -- height - Height of the tiles -- padwithnodata - If TRUE, the produced tiles are strictly width x heigth pixels. -- Pixels outside the extent of the passed raster are filled with -- nodata value. When FALSE out of bound tiles are clipped to the -- extent of the raster. Default to FALSE. -- -- Example producing 120 x 120 pixel tiles -- -- SELECT ST_TileAsGeom(rast, 130, 130, true) -- FROM srtm_22_03; ---------------------------------------------------------------------------------------------------------------------- DROP FUNCTION IF EXISTS ST_TileAsGeom(rast raster, width integer, height integer, padwithnodata boolean); CREATE OR REPLACE FUNCTION ST_TileAsGeom(rast raster, width integer, height integer, padwithnodata boolean DEFAULT FALSE) RETURNS SETOF geometry AS $$ DECLARE gridrast raster; rastwidth integer; rastheight integer; gridwidth integer; gridheight integer; nbband integer; rastextent geometry; BEGIN IF rast IS NULL THEN RETURN; END IF; nbband := ST_Numbands(rast); IF nbband < 1 THEN RAISE NOTICE 'Raster do not have band %. Returning null', band; RETURN; END IF; rastwidth := ST_Width(rast); IF width IS NULL THEN width := rastwidth; END IF; rastheight := ST_Height(rast); IF height IS NULL THEN height := rastheight; END IF; gridwidth := (rastwidth / width) + CASE WHEN rastwidth % width > 0 THEN 1 ELSE 0 END; gridheight := (rastheight / height) + CASE WHEN rastheight % height > 0 THEN 1 ELSE 0 END; gridrast := ST_AddBand(ST_MakeEmptyRaster(gridwidth, gridheight, ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_ScaleX(rast) * width, ST_ScaleY(rast) * height, ST_SkewX(rast), ST_SkewY(rast), ST_SRID(rast)), '8BUI'::text, 1, 0); IF padwithnodata THEN RETURN QUERY SELECT (ST_PixelAsPolygons(gridrast)).geom geom; ELSE rastextent := rast::geometry; RETURN QUERY SELECT ST_Intersection(rastextent, (ST_PixelAsPolygons(gridrast)).geom) geom; END IF; RETURN; END; $$ LANGUAGE 'plpgsql'; -- Redefine ST_TestRaster() CREATE OR REPLACE FUNCTION ST_TestRaster(ulx float8, uly float8, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(48, 63, ulx, uly, 0.001, -0.001, 0, 0, 4269), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; ----------------------------------------------- -- Display the test raster SELECT ST_AsBinary((gv).geom) geom, (gv).val FROM (SELECT ST_PixelAsPolygons(ST_TestRaster(0, 0, 1)) gv) foo; -- Tile it to 10x10 tiles SELECT ST_Tile(ST_TestRaster(0, 0, 1), 10, 10) -- Display the result of the tile function SELECT ST_AsBinary((gv).geom) geom, (gv).val FROM (SELECT ST_PixelAsPolygons(ST_Tile(ST_TestRaster(0, 0, 1), 3, 4)) gv) foo; -- Display each tile as a geometry SELECT ST_Asbinary(ST_Tile(ST_TestRaster(0, 0, 1), 10, 10)::geometry); -- Test the padwithnodata parameter SELECT ST_Asbinary(ST_Tile(ST_TestRaster(0, 0, 1), 10, 10, true)::geometry); -- Display the result SELECT ST_AsBinary((gv).geom) geom, (gv).val FROM (SELECT ST_PixelAsPolygons(ST_Tile(ST_TestRaster(0, 0, 1), 10, 10, true)) gv) foo; -- Add a rid SELECT ST_Asbinary(ST_Tile(ST_TestRaster(0, 0, 1), 10, 10)::geometry), generate_series(1, 35) rid; SELECT ST_AsBinary((gv).geom) geom, (gv).val, rid FROM (SELECT ST_PixelAsPolygons(ST_Tile(ST_TestRaster(0, 0, 1), 10, 10, true)) gv, generate_series(1, 35) rid) foo; SELECT ST_AsBinary((gv).geom) geom, (gv).val, rid FROM (SELECT ST_PixelAsPolygons(rast) gv, rid FROM (SELECT ST_Tile(ST_TestRaster(0, 0, 1), 10, 10, true) rast, generate_series(1, 35) rid) foo WHERE rid = 2) foo2; -- Test ST_TileAsGeom SELECT ST_TileAsGeom(ST_TestRaster(0, 0, 1), 10, 10); -- Other tests SELECT ST_Tile(ST_AddBand(ST_MakeEmptyRaster(48, 63, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BSI'::text, 0, -2), 10, 10, true, -10); SELECT ST_BandNodataValue(ST_Tile(ST_AddBand(ST_MakeEmptyRaster(48, 63, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BSI'::text, 0, 200), 10, 10, true)); SELECT ST_BandNodataValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BSI'::text, 0, 128)); SELECT ST_BandNodataValue(ST_SetBandNodataValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BSI'::text, 0, 2), 200)); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_querytables.sql�����������������������������������0000644�0000000�0000000�00000002517�11722777314�024040� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------------------------------------------------------- -- ST_QueryTables -- Execute a query on a series of table based on a prefix. -- The string "tablename" will be replaced by the name of the table. -- schemaname - The schema where to execute the queries. -- prefix - Prefix to restraint the query to tables names starting with this string. -- inquery - Query to execute. Can contain the 'tablename' string which will be replaced buy the name of the current table. -- -- Example to drop a set of table -- -- SELECT ST_QueryTables('public', 'aa', 'DROP TABLE IF EXISTS tablename'); ---------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_QueryTables(schemaname text, prefix text, inquery text) RETURNS int AS $BODY$ DECLARE tabletoquery RECORD; BEGIN FOR tabletoquery IN EXECUTE 'SELECT tablename FROM pg_tables WHERE schemaname = ' || quote_literal(schemaname) || ' AND tablename LIKE ' || quote_literal(prefix || '%') LOOP RAISE NOTICE 'Querying %', schemaname || '.' || tabletoquery.tablename; EXECUTE replace(inquery, 'tablename', '"' || schemaname || '"."' || tabletoquery.tablename || '"'); END LOOP; RETURN 1; END; $BODY$ LANGUAGE plpgsql VOLATILE STRICT;���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_mapalgebra_optimized.sql��������������������������0000644�0000000�0000000�00000064115�11722777314�025661� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_mapalgebra_optimized.sql 6127 2010-10-25 16:06:00Z jorgearevalo $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- Note: The functions provided in this script are in developement. Do not use. -- Note: this script is dependent on -- _MapAlgebraParts(r1x int, r1y int, r1w int, r1h int, r2x int, r2y int, r2w int, r2h int) -- ST_SameAlignment(rast1ulx float8, rast1uly float8, rast1scalex float8, rast1scaley float8, rast1skewx float8, rast1skewy float8, rast2ulx float8, rast2uly float8, rast2scalex float8, rast2scaley float8, rast2skewx float8, rast2skewy float8) -- ST_IsEmpty(raster) -- ST_HasNoBand(raster, int) -- ST_BandIsNoData(raster, int) -- to be found in the script/plpgsql folder -------------------------------------------------------------------- -- ST_MapAlgebra - (two rasters version) Return a raster which -- values are the result of an SQL expression involving -- pixel values from input rasters bands. -- Arguments -- rast1 raster - First raster referred by rast1 in the expression. -- band1 integer - Band number of the first raster. Default to 1. -- rast2 raster - Second raster referred by rast2 in the expression. -- band2 integer - Band number of the second raster. Default to 1. -- expression text - SQL expression. Ex.: "rast1 + 2 * rast2" -- pixeltype text - Pixeltype assigned to the resulting raster. Expression -- results are truncated to this type. Default to the -- pixeltype of the first raster. -- extentexpr text - Raster extent of the result. Can be: -- -FIRST: Same extent as the first raster. Default. -- -SECOND: Same extent as the second) raster. Default. -- -INTERSECTION: Intersection of extent of the two rasters. -- -UNION: Union oof extent of the two rasters. -- nodata1expr text - Expression used when only rast1 pixel value are nodata or absent, i.e. rast2 pixel value is with data. -- nodata2expr text - Expression used when only rast2 pixel value are nodata or absent, i.e. rast1 pixel value is with data. -- nodatanodataexpr text - Expression used when both pixel values are nodata values or absent. -- Further enhancements: -- -Move the expression parameter in seventh position just before other expression parameters. -- -Optimization for UNION & FIRST. We might not have to iterate over all the new raster. See st_mapalgebra_optimized.sql -- -Add the possibility to assign the x or y coordinate of the pixel to the pixel (do the same to the one raster version). -- -Resample the second raster when necessary (Require ST_Resample) -- -More test with rotated images -------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_MapAlgebra2(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text, extentexpr text, nodata1expr text, nodata2expr text, nodatanodataexpr text) RETURNS raster AS $$ DECLARE x integer; y integer; r1 float; r2 float; rast1ulx float8; rast1uly float8; rast1width int; rast1height int; rast1scalex float8; rast1scaley float8; rast1skewx float8; rast1skewy float8; rast1nodataval float8; rast1srid int; rast1offsetx int; rast1offsety int; rast2ulx float8; rast2uly float8; rast2width int; rast2height int; rast2scalex float8; rast2scaley float8; rast2skewx float8; rast2skewy float8; rast2nodataval float8; rast2srid int; r1x int; r1y int; r1w int; r1h int; r2x int; r2y int; r2w int; r2h int; newrx int; newry int; newrast raster; tmprast raster; newsrid int; newscalex float8; newscaley float8; newskewx float8; newskewy float8; newnodatavalue float8; newpixeltype text; newulx float8; newuly float8; newwidth int; newheight int; newoffsetx1 int; newoffsety1 int; newoffsetx2 int; newoffsety2 int; newval float; newexpr text; upnodatanodataexpr text; upnodata1expr text; upnodata2expr text; upexpression text; nodatanodataval float; skipcomputation int; zones int[]; z11x int; z11y int; z11w int; z11h int; z12x int; z12y int; z12w int; z12h int; z13x int; z13y int; z13w int; z13h int; z14x int; z14y int; z14w int; z14h int; z21x int; z21y int; z21w int; z21h int; z22x int; z22y int; z22w int; z22h int; z23x int; z23y int; z23w int; z23h int; z24x int; z24y int; z24w int; z24h int; zcx int; zcy int; zcw int; zch int; BEGIN -- We have to deal with NULL, empty, hasnoband and hasnodatavalue band rasters... -- These are respectively tested by "IS NULL", "ST_IsEmpty()", "ST_HasNoBand()" and "ST_BandIsNodata()" -- If both raster are null, we return NULL. ok -- If both raster do not have extent (are empty), we return an empty raster. ok -- If both raster do not have the specified band, -- we return a no band raster with the correct extent (according to the extent expression). ok -- If both raster bands are nodatavalue and there is no replacement value, we return a nodata value band. ok -- If only one raster is null or empty or has no band or hasnodata band we treat it as a nodata band raster. -- If there is a replacement value we replace the missing raster values with this replacement value. ok -- If there is no replacement value, we return a nodata value band. ok -- What to do when only one raster is NULL or empty -- If the extent expression is FIRST and the first raster is null we return NULL. ok -- If the extent expression is FIRST and the first raster do not have extent (is empty), we return an empty raster. ok -- If the extent expression is SECOND and the second raster is null we return NULL. ok -- If the extent expression is SECOND and the second raster do not have extent (is empty), we return an empty raster. ok -- If the extent expression is INTERSECTION and one raster is null or do not have extent (is empty), we return an empty raster. ok -- If the extent expression is UNION and one raster is null or do not have extent (is empty), -- we return a raster having the extent and the band characteristics of the other raster. ok -- What to do when only one raster do not have the required band. -- If the extent expression is FIRST and the first raster do not have the specified band, -- we return a no band raster with the correct extent (according to the extent expression). ok -- If the extent expression is SECOND and the second raster do not have the specified band, -- we return a no band raster with the correct extent (according to the extent expression). ok -- If the extent expression is INTERSECTION and one raster do not have the specified band, -- we treat it as a nodata raster band. ok -- If the extent expression is UNION and one raster do not have the specified band, -- we treat it as a nodata raster band. ok -- In all those cases, we make a warning. -- Check if both rasters are NULL RAISE NOTICE 'ST_MapAlgebra2 000'; IF rast1 IS NULL AND rast2 IS NULL THEN RAISE NOTICE 'ST_MapAlgebra: Both raster are NULL. Returning NULL'; RETURN NULL; END IF; -- Check if both rasters are empty (width or height = 0) IF ST_IsEmpty(rast1) AND ST_IsEmpty(rast2) THEN RAISE NOTICE 'ST_MapAlgebra: Both raster are empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, -1); END IF; rast1ulx := ST_UpperLeftX(rast1); rast1uly := ST_UpperLeftY(rast1); rast1width := ST_Width(rast1); rast1height := ST_Height(rast1); rast1scalex := ST_ScaleX(rast1); rast1scaley := ST_ScaleY(rast1); rast1skewx := ST_SkewX(rast1); rast1skewy := ST_SkewY(rast1); rast1srid := ST_SRID(rast1); rast2ulx := ST_UpperLeftX(rast2); rast2uly := ST_UpperLeftY(rast2); rast2width := ST_Width(rast2); rast2height := ST_Height(rast2); rast2scalex := ST_ScaleX(rast2); rast2scaley := ST_ScaleY(rast2); rast2skewx := ST_SkewX(rast2); rast2skewy := ST_SkewY(rast2); rast2srid := ST_SRID(rast2); -- Check if the first raster is NULL or empty IF rast1 IS NULL OR ST_IsEmpty(rast1) THEN rast1ulx := rast2ulx; rast1uly := rast2uly; rast1width := rast2width; rast1height := rast2height; rast1scalex := rast2scalex; rast1scaley := rast2scaley; rast1skewx := rast2skewx; rast1skewy := rast2skewy; rast1srid := rast2srid; END IF; -- Check if the second raster is NULL or empty IF rast2 IS NULL OR ST_IsEmpty(rast2) THEN rast2ulx := rast1ulx; rast2uly := rast1uly; rast2width := rast1width; rast2height := rast1height; rast2scalex := rast1scalex; rast2scaley := rast1scaley; rast2skewx := rast1skewx; rast2skewy := rast1skewy; rast2srid := rast1srid; END IF; -- Check for SRID IF rast1srid != rast2srid THEN RAISE EXCEPTION 'ST_MapAlgebra: Provided raster with different SRID. Aborting'; END IF; newsrid := rast1srid; -- Check for alignment. (Rotation problem here) IF NOT ST_SameAlignment(rast1ulx, rast1uly, rast1scalex, rast1scaley, rast1skewx, rast1skewy, rast2ulx, rast2uly, rast2scalex, rast2scaley, rast2skewx, rast2skewy) THEN -- For now print an error message, but a more robust implementation should resample the second raster to the alignment of the first raster. RAISE EXCEPTION 'ST_MapAlgebra: Provided raster do not have the same alignment. Aborting'; END IF; -- Set new pixel size and skew. We set it to the rast1 scale and skew -- since both rasters are aligned and thus have the same scale and skew newscalex := rast1scalex; newscaley := rast1scaley; newskewx := rast1skewx; newskewy := rast1skewy; --r1x & r2x are the offset of each rasters relatively to global extent r1x := 0; r2x := -st_world2rastercoordx(rast2, rast1ulx, rast1uly) + 1; IF r2x < 0 THEN r1x := -r2x; r2x := 0; END IF; r1y := 0; r2y := -st_world2rastercoordy(rast2, rast1ulx, rast1uly) + 1; IF r2y < 0 THEN r1y := -r2y; r2y := 0; END IF; r1w := rast1width; r1h := rast1height; r2w := rast2width; r2h := rast2height; zones := _MapAlgebraParts(r1x + 1, r1y + 1, r1w, r1h, r2x + 1, r2y + 1, r2w, r2h); z11x := zones[1]; z11y := zones[2]; z11w := zones[3]; z11h := zones[4]; z12x := zones[5]; z12y := zones[6]; z12w := zones[7]; z12h := zones[8]; z13x := zones[9]; z13y := zones[10]; z13w := zones[11]; z13h := zones[12]; z14x := zones[13]; z14y := zones[14]; z14w := zones[15]; z14h := zones[16]; z21x := zones[17]; z21y := zones[18]; z21w := zones[19]; z21h := zones[20]; z22x := zones[21]; z22y := zones[22]; z22w := zones[23]; z22h := zones[24]; z23x := zones[25]; z23y := zones[26]; z23w := zones[27]; z23h := zones[28]; z24x := zones[29]; z24y := zones[30]; z24w := zones[31]; z24h := zones[32]; zcx := zones[33]; zcy := zones[34]; zcw := zones[35]; zch := zones[36]; -- Compute x and y relative index of master and slave according to the extent expression (FIRST, SECOND, INTERSECTION or UNION) IF extentexpr IS NULL OR upper(extentexpr) = 'FIRST' THEN -- Check if rast1 is NULL IF rast1 IS NULL THEN RAISE NOTICE 'ST_MapAlgebra: FIRST raster is NULL. Returning NULL'; RETURN NULL; END IF; -- Check if rast1 is empty IF ST_IsEmpty(rast1) THEN RAISE NOTICE 'ST_MapAlgebra: FIRST raster is empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, newsrid); END IF; -- Check if rast1 has the required band IF ST_HasNoBand(rast1, band1) THEN RAISE NOTICE 'ST_MapAlgebra: FIRST raster has no band. Returning a raster without band'; RETURN ST_MakeEmptyRaster(rast1width, rast1height, rast1ulx, rast1uly, rast1scalex, rast1scaley, rast1skewx, rast1skewy, rast1srid); END IF; newulx := rast1ulx; newuly := rast1uly; newwidth := rast1width; newheight := rast1height; newrx := r1x; newry := r1y; z21w := 0; z22w := 0; z23w := 0; z24w := 0; ELSIF upper(extentexpr) = 'SECOND' THEN -- Check if rast2 is NULL IF rast2 IS NULL THEN RAISE NOTICE 'ST_MapAlgebra: SECOND raster is NULL. Returning NULL'; RETURN NULL; END IF; -- Check if rast2 is empty IF ST_IsEmpty(rast2) THEN RAISE NOTICE 'ST_MapAlgebra: SECOND raster is empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, newsrid); END IF; -- Check if rast2 has the required band IF ST_HasNoBand(rast2, band2) THEN RAISE NOTICE 'ST_MapAlgebra: SECOND raster has no band. Returning an empty raster'; RETURN ST_MakeEmptyRaster(rast2width, rast2height, rast2ulx, rast2uly, rast2scalex, rast2scaley, rast2skewx, rast2skewy, rast2srid); END IF; newulx := rast2ulx; newuly := rast2uly; newwidth := rast2width; newheight := rast2height; newrx := r2x; newry := r2y; z11w := 0; z12w := 0; z13w := 0; z14w := 0; ELSIF upper(extentexpr) = 'INTERSECTION' THEN -- Check if the intersection is empty. IF zcw = 0 OR zch = 0 OR rast1 IS NULL OR ST_IsEmpty(rast1) OR rast2 IS NULL OR ST_IsEmpty(rast2) THEN RAISE NOTICE 'ST_MapAlgebra: INTERSECTION of provided rasters is empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, newsrid); END IF; -- Compute the new ulx and uly newulx := st_raster2worldcoordx(rast1, zcx - r1x + 1, zcy - r1y + 1); newuly := st_raster2worldcoordy(rast1, zcx - r1x + 1, zcy - r1y + 1); newwidth := zcw; newheight := zch; newrx := zcx; newry := zcy; z11w := 0; z12w := 0; z13w := 0; z14w := 0; z21w := 0; z22w := 0; z23w := 0; z24w := 0; ELSIF upper(extentexpr) = 'UNION' THEN IF rast1 IS NULL OR ST_IsEmpty(rast1) THEN newulx := rast2ulx; newuly := rast2uly; newwidth := rast2width; newheight := rast2height; newrx := r2x; newry := r2y; z21w := 0; z22w := 0; z23w := 0; z24w := 0; ELSIF rast2 IS NULL OR ST_IsEmpty(rast2) THEN newulx := rast1ulx; newuly := rast1uly; newwidth := rast1width; newheight := rast1height; newrx := r1x; newry := r1y; z11w := 0; z12w := 0; z13w := 0; z14w := 0; ELSE newrx := 0; newry := 0; newulx := st_raster2worldcoordx(rast1, r1x + 1, r1y + 1); newuly := st_raster2worldcoordy(rast1, r1x + 1, r1y + 1); newwidth := max(r1x + r1w, r2x + r2w); newheight := max(r1y + r1h, r2y + r2h); END IF; ELSE RAISE EXCEPTION 'ST_MapAlgebra: Unhandled extent expression "%". Only MASTER, INTERSECTION and UNION are accepted. Aborting.', upper(extentexpr); END IF; -- Check if both rasters do not have the specified band. IF ST_HasNoband(rast1, band1) AND ST_HasNoband(rast2, band2) THEN RAISE NOTICE 'ST_MapAlgebra: Both raster do not have the specified band. Returning a no band raster with the correct extent'; RETURN ST_MakeEmptyRaster(newwidth, newheight, newulx, newuly, newscalex, newscaley, newskewx, newskewy, newsrid); END IF; -- Check newpixeltype newpixeltype := pixeltype; IF newpixeltype NOTNULL AND newpixeltype != '1BB' AND newpixeltype != '2BUI' AND newpixeltype != '4BUI' AND newpixeltype != '8BSI' AND newpixeltype != '8BUI' AND newpixeltype != '16BSI' AND newpixeltype != '16BUI' AND newpixeltype != '32BSI' AND newpixeltype != '32BUI' AND newpixeltype != '32BF' AND newpixeltype != '64BF' THEN RAISE EXCEPTION 'ST_MapAlgebra: Invalid pixeltype "%". Aborting.', newpixeltype; END IF; -- If no newpixeltype was provided, get it from the provided rasters. IF newpixeltype IS NULL THEN IF (upper(extentexpr) = 'SECOND' AND NOT ST_HasNoBand(rast2, band2)) OR ST_HasNoBand(rast1, band1) THEN newpixeltype := ST_BandPixelType(rast2, band2); ELSE newpixeltype := ST_BandPixelType(rast1, band1); END IF; END IF; -- Get the nodata value for first raster IF NOT ST_HasNoBand(rast1, band1) AND ST_BandHasNodataValue(rast1, band1) THEN rast1nodataval := ST_BandNodatavalue(rast1, band1); ELSE rast1nodataval := NULL; END IF; -- Get the nodata value for second raster IF NOT ST_HasNoBand(rast2, band2) AND ST_BandHasNodatavalue(rast2, band2) THEN rast2nodataval := ST_BandNodatavalue(rast2, band2); ELSE rast2nodataval := NULL; END IF; -- Determine new notadavalue IF (upper(extentexpr) = 'SECOND' AND NOT rast2nodataval IS NULL) THEN newnodatavalue := rast2nodataval; ELSEIF NOT rast1nodataval IS NULL THEN newnodatavalue := rast1nodataval; ELSE RAISE NOTICE 'ST_MapAlgebra: Both source rasters do not have a nodata value, nodata value for new raster set to the minimum value possible'; newnodatavalue := ST_MinPossibleValue(newrast); END IF; upnodatanodataexpr := upper(nodatanodataexpr); upnodata1expr := upper(nodata1expr); upnodata2expr := upper(nodata2expr); upexpression := upper(expression); -- Initialise newrast with nodata-nodata values. Then we don't have anymore to set values for nodata-nodata pixels. IF upnodatanodataexpr IS NULL THEN nodatanodataval := newnodatavalue; ELSE EXECUTE 'SELECT ' || upnodatanodataexpr INTO nodatanodataval; IF nodatanodataval IS NULL THEN nodatanodataval := newnodatavalue; ELSE newnodatavalue := nodatanodataval; END IF; END IF; ------------------------------------------------------------------- --Create the raster receiving all the computed values. Initialize it to the new nodatavalue. newrast := ST_AddBand(ST_MakeEmptyRaster(newwidth, newheight, newulx, newuly, newscalex, newscaley, newskewx, newskewy, newsrid), newpixeltype, newnodatavalue, newnodatavalue); ------------------------------------------------------------------- RAISE NOTICE 'ST_MapAlgebra2 111 z11x=%, z11y=%, z11w=%, z11h=%', z11x, z11y, z11w, z11h; -- First zone with only rast1 (z11) IF z11w > 0 AND z11h > 0 AND NOT ST_BandIsNodata(rast1, band1) AND NOT nodata2expr IS NULL THEN IF upnodata2expr = 'RAST' THEN -- IF rast1nodataval != nodatanodataval THEN RAISE NOTICE 'ST_MapAlgebra2 222'; -- newrast := ST_SetValues(newrast, 1, z11x, z11y, z11w, z11h, nodatanodataval); -- END IF; RAISE NOTICE 'ST_MapAlgebra2 333 z11x=%, z11y=%, z11w=%, z11h=%', z11x, z11y, z11w, z11h; newrast := ST_SetValues(newrast, 1, z11x, z11y, z11w, z11h, rast1, band1, NULL, TRUE); ELSE RAISE NOTICE 'ST_MapAlgebra2 444'; tmprast := ST_Clip(rast1, z11x - r1x + 1, z11y - r1y + 1, z11w, z11h); newrast := ST_Mapalgebra2(newrast, 1, tmprast, 1, replace(upnodata2expr, 'RAST', 'RAST2'), NULL, 'FIRST', NULL, 'RAST', NULL); END IF; END IF; RAISE NOTICE 'ST_MapAlgebra2 555'; -- Common zone (zc) skipcomputation = 0; IF zcw > 0 AND zch > 0 AND (NOT ST_BandIsNodata(rast1, band1) OR NOT ST_BandIsNodata(rast2, band2)) THEN RAISE NOTICE 'ST_MapAlgebra2 666'; -- Initialize the zone with nodatavalue. We will not further compute nodata nodata pixels -- newrast := ST_SetValues(newrast, 1, zcx + 1, zcy + 1, zcw, zch, newnodatavalue); -- If rast1 is only nodata values, apply nodata1expr IF ST_BandIsNodata(rast1, band1) THEN IF nodata1expr IS NULL THEN -- Do nothing skipcomputation = 0; ELSEIF upnodata1expr = 'RAST' THEN -- Copy rast2 into newrast newrast := ST_SetValues(newrast, 1, zcx, zcy, zcw, zch, , rast2, band2, NULL, 'KEEP'); ELSE -- If nodata1expr resume to a constant IF position('RAST' in upnodata1expr) = 0 THEN EXECUTE 'SELECT ' || upnodata1expr INTO newval; IF newval IS NULL OR newval = newnodatavalue THEN -- The constant is equal to nodata. We have nothing to compute since newrast was already initialized to nodata skipcomputation := 2; ELSEIF newnodatavalue IS NULL THEN -- We can globally initialize to the constant only if there was no newnodatavalue. newrast := ST_SetValues(newrast, 1, zcx, zcy, zcw, zch, newval); skipcomputation := 2; ELSE -- We will assign the constant pixel by pixel. skipcomputation := 1; END IF; END IF; IF skipcomputation < 2 THEN FOR x IN 1..zcw LOOP FOR y IN 1..zch LOOP r2 := ST_Value(rast2, band2, x + r2x, y + r2y); IF (r2 IS NULL OR r2 = rast2nodataval) THEN -- Do nothing since the raster have already been all set to this value ELSE IF skipcomputation < 1 THEN newexpr := replace('SELECT ' || upnodata1expr, 'RAST', r2); EXECUTE newexpr INTO newval; IF newval IS NULL THEN newval := newnodatavalue; END IF; END IF; newrast = ST_SetValue(newrast, 1, x + zcx, y + zcy, newval); END IF; END LOOP; END LOOP; END IF; END IF; ELSEIF ST_BandIsNodata(rast2, band2) THEN ELSE END IF; END IF; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION ST_TestRaster(ulx float8, uly float8, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(5, 5, ulx, uly, 1, -1, 0, 0, -1), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; SELECT asbinary((gv).geom), (gv).val FROM st_pixelaspolygons(ST_TestRaster(-10, 2, 1)) gv; SELECT asbinary(_MapAlgebraAllPartsGeom(0, 0, 2, 1, 1, 0, 2, 1)) SELECT asbinary(pix.geom) as geom, pix.val FROM st_pixelaspolygons(ST_MapAlgebra2(ST_TestRaster(0, 1, 1), 1, ST_TestRaster(1, 0, 1), 1, '(rast1 + rast2) / 2', NULL, 'union', '2*rast', 'rast', NULL), 1) as pix ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/_MapAlgebraParts.sql���������������������������������0000644�0000000�0000000�00000037140�11722777314�024136� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: _MapAlgebraParts.sql 6127 2010-10-25 16:06:00Z jorgearevalo $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- Note: The functions found in this file are for exclusive usage of ST_MapAlgebra2 CREATE OR REPLACE FUNCTION max(a int, b int) RETURNS int AS 'SELECT CASE WHEN $1 < $2 THEN $2 ELSE $1 END' LANGUAGE 'SQL' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION min(a int, b int) RETURNS int AS 'SELECT CASE WHEN $1 < $2 THEN $1 ELSE $2 END' LANGUAGE 'SQL' IMMUTABLE STRICT; --DROP FUNCTION _MapAlgebraParts(r1x int, r1y int, r1w int, r1h int, r2x int, r2y int, r2w int, r2h int); CREATE OR REPLACE FUNCTION _MapAlgebraParts(r1x int, r1y int, r1w int, r1h int, r2x int, r2y int, r2w int, r2h int) RETURNS int[] AS $$ DECLARE z11x int; z11y int; z11w int; z11h int; z12x int; z12y int; z12w int; z12h int; z13x int; z13y int; z13w int; z13h int; z14x int; z14y int; z14w int; z14h int; z21x int; z21y int; z21w int; z21h int; z22x int; z22y int; z22w int; z22h int; z23x int; z23y int; z23w int; z23h int; z24x int; z24y int; z24w int; z24h int; zcx int; zcy int; zcw int; zch int; BEGIN z11x := r1x; z11y := r1y; z11w := r1w; z11h := min(max(0, r2y - r1y), r1h); z12x := r1x; z12y := z11y + z11h; z12w := min(max(0, r2x - r1x), r1w); z12h := max(0, min(max(0, r2y + r2h - (r1y + z11h)), z11y + r1h - z12y)); z13x := max(min(r1x + r1w, r2x + r2w), r1x); z13y := z12y; z13w := min(max(0, r1x + r1w - (r2x + r2w)), r1w); z13h := z12h; z14x := r1x; z14y := z12y + z12h; z14w := r1w; z14h := min(max(0, r1y + r1h - (r2y + r2h)), r1h); z21x := r2x; z21y := r2y; z21w := r2w; z21h := min(max(0, r1y - r2y), r2h); z22x := r2x; z22y := z21y + z21h; z22w := min(max(0, r1x - r2x), r2w); z22h := max(0, min(max(0, r1y + r1h - (r2y + z21h)), z21y + r2h - z22y)); z23x := max(min(r2x + r2w, r1x + r1w), r2x); z23y := z22y; z23w := min(max(0, r2x + r2w - (r1x + r1w)), r2w); z23h := z22h; z24x := r2x; z24y := z22y + z22h; z24w := r2w; z24h := min(max(0, r2y + r2h - (r1y + r1h)), r2h); zcx := z12x + z12w; zcy := z12y; zcw := z13x - (z12x + z12w); zch := z14y - z12y; -- Merge z11 with z12 if they are continuous parts of the same vertical bar IF z12h > 0 AND z12x = z11x AND z12w = z11w THEN z12y := z11y; z12h := z11h + z12h; z11h := 0; END IF; -- Merge z11 with z13 if they are continuous parts of the same vertical bar IF z13h > 0 AND z13x = z11x AND z13w = z11w THEN z13y := z11y; z13h := z11h + z13h; z11h := 0; END IF; -- Merge z12 with z14 if they are continuous parts of the same vertical bar IF z14h > 0 AND z14x = z12x AND z14w = z12w THEN z14y := z12y; z14h := z12h + z14h; z12h := 0; END IF; -- Merge z13 with z14 if they are continuous parts of the same vertical bar IF z14h > 0 AND z14x = z13x AND z14w = z13w THEN z14y := z13y; z14h := z13h + z14h; z13h := 0; END IF; -- Merge z21 with z22 if they are continuous parts of the same vertical bar IF z22h > 0 AND z22x = z21x AND z22w = z21w THEN z22y := z21y; z22h := z21h + z22h; z21h := 0; END IF; -- Merge z21 with z23 if they are continuous parts of the same vertical bar IF z23h > 0 AND z23x = z21x AND z23w = z21w THEN z23y := z21y; z23h := z21h + z23h; z21h := 0; END IF; -- Merge z22 with z24 if they are continuous parts of the same vertical bar IF z24h > 0 AND z24x = z22x AND z24w = z22w THEN z24y := z22y; z24h := z22h + z24h; z22h := 0; END IF; -- Merge z23 with z24 if they are continuous parts of the same vertical bar IF z24h > 0 AND z24x = z23x AND z24w = z23w THEN z24y := z23y; z24h := z23h + z24h; z23h := 0; END IF; RETURN ARRAY[z11x, z11y, z11w, z11h, z12x, z12y, z12w, z12h, z13x, z13y, z13w, z13h, z14x, z14y, z14w, z14h, z21x, z21y, z21w, z21h, z22x, z22y, z22w, z22h, z23x, z23y, z23w, z23h, z24x, z24y, z24w, z24h, zcx, zcy, zcw, zch]; END; $$ LANGUAGE 'plpgsql'; --DROP FUNCTION _MapAlgebraPartsGeom(r1x int, r1y int, r1w int, r1h int, r2x int, r2y int, r2w int, r2h int); CREATE OR REPLACE FUNCTION _MapAlgebraPartsGeom(nx int, ny int, r1x int, r1y int, r1w int, r1h int, r2x int, r2y int, r2w int, r2h int) RETURNS SETOF geometry AS $$ DECLARE BEGIN RETURN NEXT ST_MakeBox2D(ST_Point(10 * ny + r1x, -10 * nx + 5 - r1y), ST_Point(10 * ny + r1x + r1w, -10 * nx + 5 - (r1y + r1h)))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(10 * ny + r2x, -10 * nx + 5 - r2y), ST_Point(10 * ny + r2x + r2w, -10 * nx + 5 - (r2y + r2h)))::geometry; RETURN; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION _MapAlgebraAllPartsGeom(r1x int, r1y int, r1w int, r1h int, r2x int, r2y int, r2w int, r2h int) RETURNS SETOF geometry AS $$ DECLARE z int[]; BEGIN z := _MapAlgebraParts(r1x, r1y, r1w, r1h, r2x, r2y, r2w, r2h); RETURN NEXT ST_MakeBox2D(ST_Point(z[1], z[2]), ST_Point(z[1] + z[3], z[2] + z[4]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[5], z[6]), ST_Point(z[5] + z[7], z[6] + z[8]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[9], z[10]), ST_Point(z[9] + z[11], z[10] + z[12]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[13], z[14]), ST_Point(z[13] + z[15], z[14] + z[16]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[17], z[18]), ST_Point(z[17] + z[19], z[18] + z[20]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[21], z[22]), ST_Point(z[21] + z[23], z[22] + z[24]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[25], z[26]), ST_Point(z[25] + z[27], z[26] + z[28]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[29], z[30]), ST_Point(z[29] + z[31], z[30] + z[32]))::geometry; RETURN NEXT ST_MakeBox2D(ST_Point(z[33], z[34]), ST_Point(z[33] + z[35], z[34] + z[36]))::geometry; RETURN; END; $$ LANGUAGE 'plpgsql'; SELECT asbinary(_MapAlgebraAllPartsGeom(0, 0, 1, 1, 1, 0, 1, 1)) CREATE OR REPLACE FUNCTION X1W1X2W2() RETURNS SETOF record AS $$ DECLARE x1w1x2w2 record; BEGIN x1w1x2w2 := (0, 3-4, 2, 0-4, 2); RETURN NEXT x1w1x2w2; x1w1x2w2 := (1, 2-4, 3, 0-4, 2); RETURN NEXT x1w1x2w2; x1w1x2w2 := (2, 2-4, 3, 0-4, 3); RETURN NEXT x1w1x2w2; x1w1x2w2 := (3, 2-4, 3, 0-4, 5); RETURN NEXT x1w1x2w2; x1w1x2w2 := (4, 1-4, 3, 0-4, 5); RETURN NEXT x1w1x2w2; x1w1x2w2 := (5, 1-4, 4, 1-4, 2); RETURN NEXT x1w1x2w2; x1w1x2w2 := (6, 1-4, 3, 1-4, 3); RETURN NEXT x1w1x2w2; x1w1x2w2 := (7, 1-4, 2, 1-4, 4); RETURN NEXT x1w1x2w2; x1w1x2w2 := (8, 0-4, 5, 1-4, 3); RETURN NEXT x1w1x2w2; x1w1x2w2 := (9, 0-4, 5, 1-4, 4); RETURN NEXT x1w1x2w2; x1w1x2w2 := (10, 0-4, 3, 2-4, 3); RETURN NEXT x1w1x2w2; x1w1x2w2 := (11, 0-4, 3, 3-4, 2); RETURN NEXT x1w1x2w2; x1w1x2w2 := (12, 0-4, 2, 3-4, 2); RETURN NEXT x1w1x2w2; RETURN; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION Y1H1Y2H2() RETURNS SETOF record AS $$ DECLARE y1h1y2h2 record; BEGIN y1h1y2h2 := (0, 3-4, 2, 0-4, 2); RETURN NEXT y1h1y2h2; y1h1y2h2 := (1, 2-4, 3, 0-4, 2); RETURN NEXT y1h1y2h2; y1h1y2h2 := (2, 2-4, 3, 0-4, 3); RETURN NEXT y1h1y2h2; y1h1y2h2 := (3, 2-4, 3, 0-4, 5); RETURN NEXT y1h1y2h2; y1h1y2h2 := (4, 1-4, 3, 0-4, 5); RETURN NEXT y1h1y2h2; y1h1y2h2 := (5, 1-4, 4, 1-4, 2); RETURN NEXT y1h1y2h2; y1h1y2h2 := (6, 1-4, 3, 1-4, 3); RETURN NEXT y1h1y2h2; y1h1y2h2 := (7, 1-4, 2, 1-4, 4); RETURN NEXT y1h1y2h2; y1h1y2h2 := (8, 0-4, 5, 1-4, 3); RETURN NEXT y1h1y2h2; y1h1y2h2 := (9, 0-4, 5, 1-4, 4); RETURN NEXT y1h1y2h2; y1h1y2h2 := (10, 0-4, 3, 2-4, 3); RETURN NEXT y1h1y2h2; y1h1y2h2 := (11, 0-4, 3, 3-4, 2); RETURN NEXT y1h1y2h2; y1h1y2h2 := (12, 0-4, 2, 3-4, 2); RETURN NEXT y1h1y2h2; RETURN; END; $$ LANGUAGE 'plpgsql'; _MapAlgebraParts(r1x, r1y, r1w, r1h, r2x, r2y, r2w, r2h) SELECT nx, x1, w1, x2, w2 FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int); SELECT nx, ny, x1, w1, x2, w2, y1, h1, y2, h2 FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int); SELECT nx, ny, x1, w1, x2, w2, y1, h1, y2, h2, asbinary(_MapAlgebraPartsGeom(nx, ny, x1, y1, w1, h1, x2, y2, w2, h2)) FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int); SELECT asbinary(_MapAlgebraPartsGeom(nx, ny, x1, y1, w1, h1, x2, y2, w2, h2)) FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int); -- First series of zones covering raster 1 SELECT nx, ny, map[1], map[2], map[3], map[4], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[1], -10 * nx + 5 - map[2]), ST_Point(10 * ny + map[1] + map[3], -10 * nx + 5 - (map[2] + map[4])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- Second series of zones covering raster 1 SELECT nx, ny, map[5], map[6], map[7], map[8], asbinary(ST_Point(10 * ny + map[5], -10 * nx + 5 - map[6])::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; SELECT nx, ny, map[5], map[6], map[7], map[8], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[5], -10 * nx + 5 - map[6]), ST_Point(10 * ny + map[5] + map[7], -10 * nx + 5 - (map[6] + map[8])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- Third series of zones covering raster 1 SELECT nx, ny, map[9], map[10], map[11], map[12], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[9], -10 * nx + 5 - map[10]), ST_Point(10 * ny + map[9] + map[11], -10 * nx + 5 - (map[10] + map[12])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- Fourth series of zones covering raster 1 SELECT nx, ny, map[13], map[14], map[15], map[16], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[13], -10 * nx + 5 - map[14]), ST_Point(10 * ny + map[13] + map[15], -10 * nx + 5 - (map[14] + map[16])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- First series of zones covering raster 2 SELECT nx, ny, map[17], map[18], map[19], map[20], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[17], -10 * nx + 5 - map[18]), ST_Point(10 * ny + map[17] + map[19], -10 * nx + 5 - (map[18] + map[20])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- Second series of zones covering raster 2 SELECT nx, ny, map[21], map[22], map[23], map[24], asbinary(ST_Point(10 * ny + map[21], -10 * nx + 5 - map[22])::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; SELECT nx, ny, map[21], map[22], map[23], map[24], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[21], -10 * nx + 5 - map[22]), ST_Point(10 * ny + map[21] + map[23], -10 * nx + 5 - (map[22] + map[24])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- Third series of zones covering raster 2 SELECT nx, ny, map[25], map[26], map[27], map[28], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[25], -10 * nx + 5 - map[26]), ST_Point(10 * ny + map[25] + map[27], -10 * nx + 5 - (map[26] + map[28])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- Fourth series of zones covering raster 2 SELECT nx, ny, map[29], map[30], map[31], map[32], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[28], -10 * nx + 5 - map[29]), ST_Point(10 * ny + map[28] + map[30], -10 * nx + 5 - (map[29] + map[31])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo; -- Common zone SELECT nx, ny, map[33], map[34], map[35], map[36], asbinary(ST_MakeBox2D(ST_Point(10 * ny + map[33], -10 * nx + 5 - map[34]), ST_Point(10 * ny + map[33] + map[35], -10 * nx + 5 - (map[34] + map[36])))::geometry) FROM ( SELECT nx, ny, x1, y1, w1, h1, x2, y2, w2, h2, _MapAlgebraParts(x1, y1, w1, h1, x2, y2, w2, h2) as map FROM X1W1X2W2() as (nx int, x1 int, w1 int, x2 int, w2 int), Y1H1Y2H2() as (ny int, y1 int, h1 int, y2 int, h2 int) ) as foo;��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_mapalgebrafctngb.sql������������������������������0000644�0000000�0000000�00000035410�11722777314�024755� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- $Id:$ -- -- Copyright (c) 2011 David Zwarg <dzwarg@azavea.com> -- ---------------------------------------------------------------------- -- -- Helper method to get the smallest value in a raster, based on the pixeltype. -- CREATE OR REPLACE FUNCTION ST_MinPossibleValue(pixeltype text) RETURNS float8 AS $$ DECLARE newval int := 0; BEGIN newval := CASE WHEN pixeltype = '1BB' THEN 0 WHEN pixeltype = '2BUI' THEN 0 WHEN pixeltype = '4BUI' THEN 0 WHEN pixeltype = '8BUI' THEN 0 WHEN pixeltype = '8BSI' THEN -128 WHEN pixeltype = '16BUI' THEN 0 WHEN pixeltype = '16BSI' THEN -32768 WHEN pixeltype = '32BUI' THEN 0 WHEN pixeltype = '32BSI' THEN -2147483648 WHEN pixeltype = '32BF' THEN -2147483648 -- Could not find a function returning the smallest real yet WHEN pixeltype = '64BF' THEN -2147483648 -- Could not find a function returning the smallest float8 yet END; RETURN newval; END; $$ LANGUAGE 'plpgsql'; -- --Test rasters -- CREATE OR REPLACE FUNCTION ST_TestRaster(h integer, w integer, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(h, w, 0, 0, 1, 1, 0, 0, -1), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; -------------------------------------------------------------------- -- ST_MapAlgebraFctNgb - (one raster version) Return a raster which values -- are the result of a PLPGSQL user function involving a -- neighborhood of values from the input raster band. -- Arguments -- rast raster - Raster on which the user function is evaluated. -- band integer - Band number of the raster to be evaluated. Default to 1. -- pixeltype text - Pixeltype assigned to the resulting raster. User function -- results are truncated to this type. Default to the -- pixeltype of the first raster. -- ngbwidth integer - The width of the neighborhood, in cells. -- ngbheight integer - The heigh of the neighborhood, in cells. -- userfunction regprocedure - PLPGSQL user function to apply to with neighborhod pixels. -- args variadic text[] - Arguments to pass into the user function. -------------------------------------------------------------------- DROP FUNCTION IF EXISTS ST_MapAlgebraFctNgb(rast raster, band integer, pixeltype text, ngbwidth integer, ngbheight integer, userfunction text, nodatamode text, variadic args text[]); CREATE OR REPLACE FUNCTION ST_MapAlgebraFctNgb(rast raster, band integer, pixeltype text, ngbwidth integer, ngbheight integer, userfunction text, nodatamode text, variadic args text[]) RETURNS raster AS $$ DECLARE width integer; height integer; x integer; y integer; r float; newrast raster; newval float8; newpixeltype text; newnodatavalue float; newinitialvalue float; neighborhood float[][]; nrow float[]; valuesub boolean; BEGIN -- Check if raster is NULL IF rast IS NULL THEN RAISE NOTICE 'ST_MapAlgebraFctNgb: Raster is NULL. Returning NULL'; RETURN NULL; END IF; width := ST_Width(rast); height := ST_Height(rast); -- Create a new empty raster having the same georeference as the provided raster newrast := ST_MakeEmptyRaster(width, height, ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_ScaleX(rast), ST_ScaleY(rast), ST_SkewX(rast), ST_SkewY(rast), ST_SRID(rast)); -- If this new raster is empty (width = 0 OR height = 0) then there is nothing to compute and we return it right now IF ST_IsEmpty(newrast) THEN RAISE NOTICE 'ST_MapAlgebraFctNgb: Raster is empty. Returning an empty raster'; RETURN newrast; END IF; -- Check if rast has the required band. Otherwise return a raster without band IF ST_HasNoBand(rast, band) THEN RAISE NOTICE 'ST_MapAlgebraFctNgb: Raster does not have the required band. Returning a raster without a band'; RETURN newrast; END IF; -- Set the new pixeltype newpixeltype := pixeltype; IF newpixeltype IS NULL THEN newpixeltype := ST_BandPixelType(rast, band); ELSIF newpixeltype != '1BB' AND newpixeltype != '2BUI' AND newpixeltype != '4BUI' AND newpixeltype != '8BSI' AND newpixeltype != '8BUI' AND newpixeltype != '16BSI' AND newpixeltype != '16BUI' AND newpixeltype != '32BSI' AND newpixeltype != '32BUI' AND newpixeltype != '32BF' AND newpixeltype != '64BF' THEN RAISE EXCEPTION 'ST_MapAlgebraFctNgb: Invalid pixeltype "%". Aborting.', newpixeltype; END IF; -- Check for notada value newnodatavalue := ST_BandNodataValue(rast, band); IF newnodatavalue IS NULL OR newnodatavalue < ST_MinPossibleValue(newpixeltype) OR newnodatavalue > (-ST_MinPossibleValue(newpixeltype) - 1) THEN RAISE NOTICE 'ST_MapAlgebraFctNgb: Source raster does not have a nodata value or is out of range for the new raster pixeltype, nodata value for new raster set to the min value possible'; newnodatavalue := ST_MinPossibleValue(newpixeltype); END IF; -- We set the initial value of the future band to nodata value. -- If nodatavalue is null then the raster will be initialise to ST_MinPossibleValue -- but all the values should be recomputed anyway. newinitialvalue := newnodatavalue; -- Optimization: If the raster is only filled with nodata value return right now a raster filled with the nodatavalueexpr IF ST_BandIsNoData(rast, band) THEN RETURN ST_AddBand(newrast, newpixeltype, newinitialvalue, newnodatavalue); END IF; --Create the raster receiving all the computed values. Initialize it to the new initial value. newrast := ST_AddBand(newrast, newpixeltype, newinitialvalue, newnodatavalue); IF nodatamode = 'value' THEN valuesub := TRUE; ELSIF nodatamode != 'ignore' AND nodatamode != 'NULL' AND NOT nodatamode ~ E'^[\-+]?[0-9]*(\.[0-9]+(e[\-+]?[0-9]+)?)?$' THEN RAISE NOTICE 'ST_MapAlgebraFctNgb: ''nodatamode'' parameter must be one of: value, ignore, NULL, or a numerical value.'; RETURN NULL; END IF; -- Computation loop FOR x IN (1+ngbwidth)..(width-ngbwidth) LOOP FOR y IN (1+ngbheight)..(height-ngbheight) LOOP -- create a matrix of the pixel values in the neighborhood neighborhood := ARRAY[[]]::float[]; FOR u IN (x-ngbwidth)..(x+ngbwidth) LOOP nrow := ARRAY[]::float[]; FOR v in (y-ngbheight)..(y+ngbheight) LOOP nrow := nrow || ARRAY[ ST_Value(rast, band, u, v)::float ]; END LOOP; neighborhood := neighborhood || ARRAY[ nrow ]; END LOOP; -- RAISE NOTICE 'Neighborhood: %', neighborhood; IF valuesub IS TRUE THEN nodatamode := ST_Value(rast, band, x, y); -- special case where NULL needs to be quoted IF nodatamode IS NULL THEN nodatamode := 'NULL'; END IF; END IF; EXECUTE 'SELECT ' ||userfunction || '(' || quote_literal(neighborhood) || ', ' || quote_literal(nodatamode) || ', NULL)' INTO r; newrast = ST_SetValue(newrast, band, x, y, r); END LOOP; END LOOP; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; -- -- A simple 'callback' user function that sums up all the values in a neighborhood. -- CREATE OR REPLACE FUNCTION ST_Sum(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE x1 integer; x2 integer; y1 integer; y2 integer; sum float; BEGIN sum := 0; raise notice 'in callback: %', nodatamode; FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP IF matrix[x][y] IS NULL THEN raise notice 'matrix[%][%] is NULL', x, y; IF nodatamode = 'ignore' THEN matrix[x][y] := 0; ELSE matrix[x][y] := nodatamode::float; END IF; END IF; sum := sum + matrix[x][y]; END LOOP; END LOOP; RETURN sum; END; $$ LANGUAGE 'plpgsql'; -- Tests -- Test NULL Raster. Should be true. --SELECT ST_MapAlgebraFctNgb(NULL, 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL) IS NULL FROM ST_TestRaster(0, 0, -1) rast; -- Test empty Raster. Should be true. --SELECT ST_IsEmpty(ST_MapAlgebraFctNgb(ST_MakeEmptyRaster(0, 10, 0, 0, 1, 1, 1, 1, -1), 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL)); -- Test has no band raster. Should be true --SELECT ST_HasNoBand(ST_MapAlgebraFctNgb(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, 1, -1), 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL)); -- Test has no nodata value. Should return null and 7. --SELECT -- ST_Value(rast, 2, 2) IS NULL, -- ST_Value( -- ST_MapAlgebraFctNgb( -- ST_SetBandNoDataValue(rast, NULL), 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL -- ), 2, 2) = 7 -- FROM ST_SetValue(ST_TestRaster(3, 3, 1), 2, 2, NULL) AS rast; -- -- Test NULL nodatamode. Should return null and null. --SELECT -- ST_Value(rast, 2, 2) IS NULL, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL), 2, 2 -- ) IS NULL -- FROM ST_SetValue(ST_TestRaster(3, 3, 1), 2, 2, NULL) AS rast; -- -- Test ignore nodatamode. Should return null and 8. --SELECT -- ST_Value(rast, 2, 2) IS NULL, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'ignore', NULL), 2, 2 -- ) = 8 -- FROM ST_SetValue(ST_TestRaster(3, 3, 1), 2, 2, NULL) AS rast; -- -- Test value nodatamode. Should return null and null. --SELECT -- ST_Value(rast, 2, 2) IS NULL, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'value', NULL), 2, 2 -- ) IS NULL -- FROM ST_SetValue(ST_TestRaster(3, 3, 1), 2, 2, NULL) AS rast; -- -- Test value nodatamode. Should return null and 9. --SELECT -- ST_Value(rast, 1, 1) IS NULL, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'value', NULL), 2, 2 -- ) = 9 -- FROM ST_SetValue(ST_TestRaster(3, 3, 1), 1, 1, NULL) AS rast; -- -- Test value nodatamode. Should return null and 0. --SELECT -- ST_Value(rast, 2, 2) IS NULL, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', '-8', NULL), 2, 2 -- ) = 0 -- FROM ST_SetValue(ST_TestRaster(3, 3, 1), 2, 2, NULL) AS rast; -- -- Test ST_Sum user function. Should be 1 and 9. --SELECT -- ST_Value(rast, 2, 2) = 1, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL), 2, 2 -- ) = 9 -- FROM ST_TestRaster(3, 3, 1) AS rast; -- -- Test ST_Sum user function on a no nodata value raster. Should be null and -1. --SELECT -- ST_Value(rast, 2, 2) IS NULL, -- ST_Value( -- ST_MapAlgebraFctNgb(ST_SetBandNoDataValue(rast, NULL), 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL), 2, 2 -- ) = -1 -- FROM ST_SetValue(ST_TestRaster(3, 3, 0), 2, 2, NULL) AS rast; -- -- Test pixeltype 1. Should return 2 and 15. --SELECT -- ST_Value(rast, 2, 2) = 2, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, '4BUI', 1, 1, 'ST_Sum', 'NULL', NULL), 2, 2 -- ) = 15 -- FROM ST_SetBandNoDataValue(ST_TestRaster(3, 3, 2), 1, NULL) AS rast; -- -- Test pixeltype 1. Should return an error. --SELECT -- ST_Value(rast, 2, 2), -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, '4BUId', 1, 1, 'ST_Sum', 'NULL', NULL), 2, 2 -- ) -- FROM ST_TestRaster(3, 3, 2) AS rast; -- -- Test pixeltype 1. Should return 1 and 3. --SELECT -- ST_Value(rast, 2, 2) = 1, -- ST_Value( -- ST_MapAlgebraFctNgb(rast, 1, '2BUI', 1, 1, 'ST_Sum', 'NULL', NULL), 2, 2 -- ) = 3 -- FROM ST_TestRaster(3, 3, 1) AS rast; -- -- Test that the neighborhood function leaves a border of NODATA --SELECT -- COUNT(*) = 1 -- FROM (SELECT -- (ST_DumpAsPolygons( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL) -- )).* -- FROM ST_TestRaster(5, 5, 1) AS rast) AS foo -- WHERE ST_Area(geom) = 9; -- -- Test that the neighborhood function leaves a border of NODATA --SELECT -- ST_Area(geom) = 8, val = 9 -- FROM (SELECT -- (ST_DumpAsPolygons( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL) -- )).* -- FROM ST_SetValue(ST_TestRaster(5, 5, 1), 1, 1, NULL) AS rast) AS foo; -- -- Test that the neighborhood function leaves a border of NODATA -- plus a corner where one cell has a value of 8. --SELECT -- (ST_Area(geom) = 1 AND val = 8) OR (ST_Area(geom) = 8 AND val = 9) -- FROM (SELECT -- (ST_DumpAsPolygons( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'ignore', NULL) -- )).* -- FROM ST_SetValue(ST_TestRaster(5, 5, 1), 1, 1, NULL) AS rast) AS foo; -- -- Test that the neighborhood function leaves a border of NODATA -- plus a hole where 9 cells have NODATA -- This results in a donut: a polygon with a hole. The polygon has -- an area of 16, with a hole that has an area of 9 --SELECT -- ST_NRings(geom) = 2, -- ST_NumInteriorRings(geom) = 1, -- ST_Area(geom) = 16, -- val = 9, -- ST_Area(ST_BuildArea(ST_InteriorRingN(geom, 1))) = 9 -- FROM (SELECT -- (ST_DumpAsPolygons( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL) -- )).* -- FROM ST_SetValue(ST_TestRaster(7, 7, 1), 4, 4, NULL) AS rast) AS foo; -- -- Test that the neighborhood function leaves a border of NODATA, -- and the center pyramids when summed twice, ignoring NODATA values --SELECT -- COUNT(*) = 9, SUM(ST_Area(geom)) = 9, SUM(val) = ((36+54+36) + (54+81+54) + (36+54+36)) -- --ST_AsText(geom), ST_Area(geom), val -- FROM (SELECT -- (ST_DumpAsPolygons( -- ST_MapAlgebraFctNgb( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'ignore', NULL), 1, NULL, 1, 1, 'ST_Sum', 'ignore', NULL -- ) -- )).* -- FROM ST_SetBandNoDataValue(ST_TestRaster(5, 5, 1), NULL) AS rast) AS foo; -- -- Test that the neighborhood function leaves a border of NODATA, -- and the center contains one cel when summed twice, replacing NULL with NODATA values --SELECT -- COUNT(*) = 1, SUM(ST_Area(geom)) = 1, SUM(val) = 81 -- --ST_AsText(geom), ST_Area(geom), val -- FROM (SELECT -- (ST_DumpAsPolygons( -- ST_MapAlgebraFctNgb( -- ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL), 1, NULL, 1, 1, 'ST_Sum', 'NULL', NULL -- ) -- )).* -- FROM ST_SetBandNoDataValue(ST_TestRaster(5, 5, 1), NULL) AS rast) AS foo; -- ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_splittable.sql������������������������������������0000644�0000000�0000000�00000004346�11722777314�023645� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------------------------------------------------------- -- ST_SplitTable -- Split a table into a series of table which names are composed of the concatenation of a prefix -- and the value of a column. This function is usefull when loading many raster in one operation but -- still wanting to split them in different tables afterward. They must have been loaded with the -F -- raster2pgsql option so that different rasters are identifiable by a column. -- -- sourcetablename - The name of the table to split into multiple table -- targettableschema - The schema in which to create the new set of table -- targettableprefix - The prefix of the set of table names to create. -- suffixcolumnname - The name of the column providing the suffix to each table name. -- -- Example to split the table 'test' into a set of table starting with 't_' and -- ending with the value of the column 'rid' to be created in the 'public' schema. -- -- SELECT ST_SplitTable('test', 'public', 't_', 'rid');; ---------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_SplitTable(sourcetablename text, targettableschema text, targettableprefix text, suffixcolumnname text) RETURNS int AS $BODY$ DECLARE newtablename text; uniqueid RECORD; BEGIN FOR uniqueid IN EXECUTE 'SELECT DISTINCT ' || quote_ident(suffixcolumnname) || ' AS xyz123 FROM ' || sourcetablename LOOP newtablename := targettableschema || '.' || targettableprefix || uniqueid.xyz123; EXECUTE 'CREATE TABLE ' || quote_ident(newtablename) || ' AS SELECT * FROM ' || sourcetablename || ' WHERE ' || suffixcolumnname || ' = ' || uniqueid.xyz123; END LOOP; RETURN 1; END; $BODY$ LANGUAGE plpgsql VOLATILE STRICT; --------------------------------------- -- test CREATE TABLE test AS SELECT 1 AS rid, ST_MakeEmptyRaster(2,2,0,0,1,1,1,1,4326) AS rast UNION ALL SELECT 2 AS rid, ST_MakeEmptyRaster(2,2,0,0,1,1,1,1,4326) AS rast UNION ALL SELECT 1 AS rid, ST_MakeEmptyRaster(2,2,0,0,1,1,1,1,4326) AS rast UNION ALL SELECT 2 AS rid, ST_MakeEmptyRaster(2,2,0,0,1,1,1,1,4326) AS rast SELECT * FROM test; SELECT ST_SplitTable('test', 'public', 't_', 'rid'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_reclass.sql���������������������������������������0000644�0000000�0000000�00000005505�11722777314�023134� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_reclass.sql 9324 2012-02-27 22:08:12Z pramsey $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- NOTE: The ST_Reclass() function is already implemented in C. This plpgsql script is provided only as an example. -- Defining the plpgsql function below might overwrite the current C implementation and brake other functions dependent on it. -- Use with caution. ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_Reclass(rast raster, band int, reclassexpr text) RETURNS raster AS $$ DECLARE -- Create a new raster without the band we will reclassify newrast raster := ST_DeleteBand(rast, band); -- Determine the nodata value nodataval float8 := ST_BandNodataValue(rast, band); -- First parse of the reclass expression. Split the reclass classes into an array. reclarray text[] := string_to_array(reclassexpr, '|'); -- Determine the number of classes. nbreclassstr int := array_length(reclarray, 1); -- Initialise the MapAlgebra expression maexpr text := 'CASE '; -- Temporary container for the two part of the class being parsed. reclassstr text[]; -- Temporary array containing the splited class. fromstr text[]; i int; BEGIN -- For each classes FOR i IN 1..nbreclassstr LOOP -- Split the class into an array of classes. reclassstr := string_to_array(reclarray[i], ':'); IF array_length(reclassstr, 1) < 2 THEN RAISE EXCEPTION 'ST_Reclass: Invalid reclassification class: "%". Aborting', reclarray[i]; END IF; -- Split the range to reclassify into two fromstr := string_to_array(reclassstr[1], '-'); -- Replace nodata with the nodata value IF upper(reclassstr[2]) = 'NODATA' THEN reclassstr[2] = nodataval::text; END IF; -- Build the maexpr expression IF fromstr[2] IS NULL OR fromstr[2] = '' THEN maexpr := maexpr || ' WHEN ' || fromstr[1] || ' = rast THEN ' || reclassstr[2] || ' '; ELSE maexpr := maexpr || ' WHEN ' || fromstr[1] || ' <= rast AND rast < ' || fromstr[2] || ' THEN ' || reclassstr[2] || ' '; END IF; END LOOP; maexpr := maexpr || 'ELSE rast END'; newrast := ST_AddBand(rast, ST_MapAlgebra(rast, band, maexpr), 1, band); RETURN newrast; END; $$ LANGUAGE 'plpgsql'; SELECT ST_Value(ST_TestRaster(1, 1, 4),1,1) SELECT ST_Value(ST_Reclass(ST_TestRaster(1, 1, 4), 1, '1:2|2:2|3-5:10'), 1, 1); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_histogram.sql�������������������������������������0000644�0000000�0000000�00000032641�11722777314�023476� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_histogram.sql 6127 2010-10-25 16:06:00Z jorgearevalo $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- NOTE: The ST_Histogram() function is already implemented in C. This plpgsql script is provided only as an example. -- Defining the plpgsql function below might overwrite the current C implementation and brake other functions dependent on it. -- Use with caution. ---------------------------------------------------------------------- -- _ST_Values(rast raster, band int) -- Return all rast pixels values which center are in a geometry -- Values are returned as groups of identical adjacent values (value, count) -- in order to reduce the number of row returned. ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _ST_Values(rast raster, band int, geom geometry, OUT val float8, OUT count int) RETURNS SETOF record AS $$ DECLARE geomintersect geometry; m int[]; x integer := 0; y integer := 0; curval float8; BEGIN m := ST_GeomExtent2RasterCoord(rast, geom); -- Get the intersection between with the geometry. geomintersect := ST_Intersection(geom, ST_ConvexHull(rast)); -- If the intersection is empty, return false IF m[1] IS NULL AND m[2] IS NULL AND m[3] IS NULL AND m[4] IS NULL THEN RETURN; END IF; count := 0; val := ST_Value(rast, band, m[1], m[2]); FOR x IN m[1]..m[3] LOOP FOR y IN m[2]..m[4] LOOP -- Check first if the pixel intersects with the geometry. Many won't. IF ST_Intersects(geom, ST_Centroid(ST_PixelAsPolygon(rast, x, y))) THEN curval = ST_Value(rast, band, x, y); IF NOT curval IS NULL THEN IF curval = val THEN count := count + 1; ELSE RETURN NEXT; val := curval; count := 1; END IF; END IF; END IF; END LOOP; END LOOP; RETURN NEXT; RETURN; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ---------------------------------------------------------------------- -- _ST_Values(rast raster, band int) -- Return all rast pixels values -- Values are returned as groups of identical adjacent values (value, count) -- in order to reduce the number of row returned. ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION _ST_Values(rast raster, band int, OUT val float8, OUT count int) RETURNS SETOF record AS $$ DECLARE x int; y int; width int := ST_Width(rast); height int := ST_Height(rast); curval float8; BEGIN count := 0; val := ST_Value(rast, band, 1, 1); FOR x IN 1..width LOOP FOR y IN 1..height LOOP curval = ST_Value(rast, band, x, y); IF NOT curval IS NULL THEN IF curval = val THEN count := count + 1; ELSE RETURN NEXT; val := curval; count := 1; END IF; END IF; END LOOP; END LOOP; RETURN NEXT; RETURN; END; $$ LANGUAGE 'plpgsql'; ---------------------------------------------------------------------- -- ST_Histogram(rast raster, band int) group -- Return a set of (val, count) rows forming the value histogram for a raster ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_Histogram(rast raster, band int, OUT val double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT (vc).val val, sum((vc).count)::bigint count FROM (SELECT _ST_Values($1, $2) vc) foo GROUP BY (vc).val; $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION ST_Histogram(rast raster, OUT val double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT (vc).val val, sum((vc).count)::bigint count FROM (SELECT _ST_Values($1, 1) vc) foo GROUP BY (vc).val; $$ LANGUAGE SQL; ---------------------------------------------------------------------- -- ST_Histogram(rast raster, band int, geom geometry) group -- Return a set of (val, count) rows forming the value histogram for the area of a raster covered by a polygon geometry. -- Pixels are selected only when their center intersects the polygon ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_Histogram(rast raster, band int, geom geometry, OUT val double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT (vc).val val, sum((vc).count)::bigint count FROM (SELECT _ST_Values($1, $2, $3) vc) foo GROUP BY (vc).val; $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION ST_Histogram(rast raster, geom geometry, OUT val double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT (vc).val val, sum((vc).count)::bigint count FROM (SELECT _ST_Values($1, 1, $2) vc) foo GROUP BY (vc).val; $$ LANGUAGE SQL; ---------------------------------------------------------------------- -- This variant might be faster (not using an intermediate _ST_Values function) ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_Histogram2(rast raster, band int, OUT val double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT val, count(*) count FROM (SELECT ST_Value($1, $2, x, y) val FROM generate_series(1, ST_Width($1)) x , generate_series(1, ST_Height($1)) y) foo GROUP BY val; $$ LANGUAGE SQL IMMUTABLE; SELECT (hist).val val, sum((hist).count) count FROM (SELECT ST_Histogram2(rast, 1) hist FROM srtm_22_03_tiled_10x10) foo GROUP BY val ORDER BY count DESC ---------------------------------------------------------------------- -- Other variant (not grouping in the function) (not using an intermediate _ST_Values function) ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_Histogram3(rast raster, band int, OUT val double precision) RETURNS SETOF double precision AS $$ SELECT ST_Value($1, $2, x, y) val FROM generate_series(1, ST_Width($1)) x , generate_series(1, ST_Height($1)) y; $$ LANGUAGE SQL IMMUTABLE; SELECT val, count(*) count FROM (SELECT ST_Histogram3(rast, 1) val FROM srtm_22_03_tiled_10x10) foo GROUP BY val ORDER BY count DESC SELECT ST_Histogram3(rast, 1) val, count(*) count FROM srtm_22_03_tiled_10x10 GROUP BY val ORDER BY count DESC ---------------------------------------------------------------------- -- This might actually be the fasters query to get the histogram ---------------------------------------------------------------------- SELECT val, count(*) count FROM (SELECT ST_Value(rast, 1, x, y) val FROM generate_series(1, 10) x, generate_series(1, 10) y, srtm_22_03_tiled_10x10 ) foo GROUP BY val ORDER BY count DESC ---------------------------------------------------------------------- -- Example 1: Query returning the histogram for a raster tile (one at a time) ---------------------------------------------------------------------- ------------------------------- -- The subquery gets the histogram for each tile -- The main query split the resulting records in their two components (val & count) ------------------------------- SELECT rid, (hist).val, (hist).count FROM (SELECT rid, ST_Histogram(rast) hist FROM srtm_22_03_tiled_25x25 WHERE rid = 234 ) foo ORDER BY (hist).count DESC ---------------------------------------------------------------------- -- Example 2: Query returning the complete histogram for a tiled raster coverage - (might be very long) ---------------------------------------------------------------------- ------------------------------- -- The subquery gets the histogram for each tile -- The main query split the resulting records in their two -- components (val & count) and sum the count over all the tiles ------------------------------- SELECT (hist).val, SUM((hist).count) count FROM (SELECT rid, ST_Histogram(rast) hist FROM srtm_22_03_tiled_25x25 ) foo GROUP BY (hist).val ORDER BY count DESC ---------------------------------------------------------------------- -- Example 3: Query returning the mean pixel value for each tile of a -- tiled raster (might be very long) ---------------------------------------------------------------------- ------------------------------- -- The subquery gets the histogram for each tile -- The main query split the resulting records in their two -- components (val & count) computing a mean value per tile at the same time ------------------------------- SELECT rid, geom, round(((SUM((hist).val * (hist).count)) / SUM((hist).count))::numeric, 2) meanval FROM (SELECT rid, rast::geometry geom, ST_Histogram(rast) hist FROM srtm_22_03_tiled_25x25 ) foo GROUP BY rid, geom ORDER BY rid; ---------------------------------------------------------------------- -- Example 4: Query returning the most frequent pixel value for each tile -- of a tiled raster (might be very long) -- This example requires an aggregate function tracking the value -- associated with the maximum count ---------------------------------------------------------------------- CREATE TYPE dblIntSet AS ( maxval double precision, val int ); CREATE OR REPLACE FUNCTION maxFromDblIntSet(dblIntSet, dblIntSet) RETURNS dblIntSet AS $$ SELECT CASE WHEN $1.maxval>$2.maxval THEN $1 ELSE $2 END $$ LANGUAGE sql; CREATE OR REPLACE FUNCTION valFromDblIntSet(dblIntSet) RETURNS int AS $$ SELECT $1.val $$ LANGUAGE sql; CREATE AGGREGATE maxFromDblIntSet ( BASETYPE = dblIntSet, SFUNC = maxFromDblIntSet, STYPE = dblIntSet, INITCOND = '(0,0)', FINALFUNC = valFromDblIntSet ); ------------------------------- -- Actual query -- The subquery gets the histogram for each tile -- The main query split the resulting records in their two -- components (val & count) and compute the maximum count and its associated value ------------------------------- SELECT rid, geom, maxFromDblIntSet(ROW((hist).count, (hist).val::int)) mostfreqval, MAX((hist).count) count FROM (SELECT rid, rast::geometry geom, ST_Histogram(rast) hist FROM srtm_22_03_tiled_25x25 ) foo GROUP BY rid, geom ORDER BY rid ---------------------------------------------------------------------- -- Example 5: Query returning the most frequent pixel value per polygon from a raster -- Do not use when the raster is big, in this case it should be tiled and -- the next example (6) should be used instead ---------------------------------------------------------------------- SELECT polyid, geom, maxFromDblIntSet(ROW((hist).count, (hist).val::int)) mostfreqval, MAX((hist).count) count FROM ( SELECT polyid, geom, ST_Histogram(rast, geom) hist FROM srtm_22_03, mypolygons WHERE ST_Intersects(rast, geom) ) foo GROUP BY polyid, geom ---------------------------------------------------------------------- -- Example 6: Query returning the most frequent pixel value per polygon on a tiled raster coverage ---------------------------------------------------------------------- ------------------------------- -- The first subquery gets the histogram for each tile -- The second subquery split the resulting records in their two -- components (val & count) and sum the count for each polygon-value couple -- The main query compute the maximum count and its associated value ------------------------------- SELECT polyid, geom, maxFromDblIntSet(ROW(count, val)) mostfreqval, MAX(count) count FROM (SELECT polyid, geom, (hist).val::int val, SUM((hist).count) count FROM (SELECT polyid, geom, ST_Histogram(rast, geom) hist FROM srtm_22_03_tiled_25x25, mypolygons WHERE ST_Intersects(rast, geom) ) foo GROUP BY polyid, geom, (hist).val ) bar GROUP BY polyid, geom ---------------------------------------------------------------------- -- Example 7: Query returning the mean pixel value per polygon on a tiled raster coverage ---------------------------------------------------------------------- ------------------------------- -- The first subquery gets the histogram for each tile -- The second subquery split the resulting records in their two -- components (val & count) and sum the count for each polygon-value couple -- The main query compute the mean pixel value ------------------------------- SELECT polyid, geom, round((SUM(val * count) / SUM(count))::numeric, 2) meanval FROM (SELECT polyid, geom, (hist).val::int val, SUM((hist).count) count FROM (SELECT polyid, geom, ST_Histogram(rast, geom) hist FROM srtm_22_03_tiled_25x25, mypolygons WHERE ST_Intersects(rast, geom) ) foo GROUP BY polyid, geom, (hist).val ) bar GROUP BY polyid, geom�����������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_union.sql�����������������������������������������0000644�0000000�0000000�00000033302�11722777314�022624� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_union.sql 9324 2012-02-27 22:08:12Z pramsey $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- Note: The functions provided in this script are in developement. Do not use. DROP TYPE IF EXISTS rastexpr CASCADE; CREATE TYPE rastexpr AS ( rast raster, f_expression text, f_nodata1expr text, f_nodata2expr text, f_nodatanodataval double precision ); --DROP FUNCTION MapAlgebra4Union(rast1 raster, rast2 raster, expression text); CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 raster, rast2 raster, p_expression text, p_nodata1expr text, p_nodata2expr text, p_nodatanodataval double precision, t_expression text, t_nodata1expr text, t_nodata2expr text, t_nodatanodataval double precision) RETURNS raster AS $$ DECLARE t_raster raster; p_raster raster; BEGIN -- With the new ST_MapAlgebraExpr we must split the main expression in three expressions: expression, nodata1expr, nodata2expr -- ST_MapAlgebraExpr(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text, extentexpr text, nodata1expr text, nodata2expr text, nodatanodatadaexpr double precision) -- We must make sure that when NULL is passed as the first raster to ST_MapAlgebraExpr, ST_MapAlgebraExpr resolve the nodata1expr IF upper(p_expression) = 'LAST' THEN RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, '[rast2.val]'::text, NULL::text, 'UNION'::text, '[rast2.val]'::text, '[rast1.val]'::text, NULL::double precision); ELSIF upper(p_expression) = 'FIRST' THEN RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, '[rast1.val]'::text, NULL::text, 'UNION'::text, '[rast2.val]'::text, '[rast1.val]'::text, NULL::double precision); ELSIF upper(p_expression) = 'MIN' THEN RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'LEAST([rast1.val], [rast2.val])'::text, NULL::text, 'UNION'::text, '[rast2.val]'::text, '[rast1.val]'::text, NULL::double precision); ELSIF upper(p_expression) = 'MAX' THEN RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, 'GREATEST([rast1.val], [rast2.val])'::text, NULL::text, 'UNION'::text, '[rast2.val]'::text, '[rast1.val]'::text, NULL::double precision); ELSIF upper(p_expression) = 'COUNT' THEN RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, '[rast1.val] + 1'::text, NULL::text, 'UNION'::text, '1'::text, '[rast1.val]'::text, 0::double precision); ELSIF upper(p_expression) = 'SUM' THEN RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, '[rast1.val] + [rast2.val]'::text, NULL::text, 'UNION'::text, '[rast2.val]'::text, '[rast1.val]'::text, NULL::double precision); ELSIF upper(p_expression) = 'RANGE' THEN t_raster = ST_MapAlgebraExpr(rast1, 2, rast2, 1, 'LEAST([rast1.val], [rast2.val])'::text, NULL::text, 'UNION'::text, '[rast2.val]'::text, '[rast1.val]'::text, NULL::double precision); p_raster := MapAlgebra4Union(rast1, rast2, 'MAX'::text, NULL::text, NULL::text, NULL::double precision, NULL::text, NULL::text, NULL::text, NULL::double precision); RETURN ST_AddBand(p_raster, t_raster, 1, 2); ELSIF upper(p_expression) = 'MEAN' THEN t_raster = ST_MapAlgebraExpr(rast1, 2, rast2, 1, '[rast1.val] + 1'::text, NULL::text, 'UNION'::text, '1'::text, '[rast1.val]'::text, 0::double precision); p_raster := MapAlgebra4Union(rast1, rast2, 'SUM'::text, NULL::text, NULL::text, NULL::double precision, NULL::text, NULL::text, NULL::text, NULL::double precision); RETURN ST_AddBand(p_raster, t_raster, 1, 2); ELSE IF t_expression NOTNULL AND t_expression != '' THEN t_raster = ST_MapAlgebraExpr(rast1, 2, rast2, 1, t_expression, NULL::text, 'UNION'::text, t_nodata1expr, t_nodata2expr, t_nodatanodataval::double precision); p_raster = ST_MapAlgebraExpr(rast1, 1, rast2, 1, p_expression, NULL::text, 'UNION'::text, p_nodata1expr, p_nodata2expr, p_nodatanodataval::double precision); RETURN ST_AddBand(p_raster, t_raster, 1, 2); END IF; RETURN ST_MapAlgebraExpr(rast1, 1, rast2, 1, p_expression, NULL, 'UNION'::text, NULL::text, NULL::text, NULL::double precision); END IF; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION MapAlgebra4UnionFinal3(rast rastexpr) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_MapAlgebraExpr(rast.rast, 1, rast.rast, 2, rast.f_expression, NULL::text, 'UNION'::text, rast.f_nodata1expr, rast.f_nodata2expr, rast.f_nodatanodataval); END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION MapAlgebra4UnionFinal1(rast rastexpr) RETURNS raster AS $$ DECLARE BEGIN IF upper(rast.f_expression) = 'RANGE' THEN RETURN ST_MapAlgebraExpr(rast.rast, 1, rast.rast, 2, '[rast1.val] - [rast2.val]'::text, NULL::text, 'UNION'::text, NULL::text, NULL::text, NULL::double precision); ELSEIF upper(rast.f_expression) = 'MEAN' THEN RETURN ST_MapAlgebraExpr(rast.rast, 1, rast.rast, 2, 'CASE WHEN [rast2.val] > 0 THEN [rast1.val] / [rast2.val]::float8 ELSE NULL END'::text, NULL::text, 'UNION'::text, NULL::text, NULL::text, NULL::double precision); ELSE RETURN rast.rast; END IF; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 rastexpr, rast2 raster, p_expression text, p_nodata1expr text, p_nodata2expr text, p_nodatanodataval double precision, t_expression text, t_nodata1expr text, t_nodata2expr text, t_nodatanodataval double precision, f_expression text, f_nodata1expr text, f_nodata2expr text, f_nodatanodataval double precision) RETURNS rastexpr AS $$ SELECT (MapAlgebra4Union(($1).rast, $2, $3, $4, $5, $6, $7, $8, $9, $10), $11, $12, $13, $14)::rastexpr $$ LANGUAGE 'SQL'; CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 rastexpr, rast2 raster, p_expression text, t_expression text, f_expression text) RETURNS rastexpr AS $$ SELECT (MapAlgebra4Union(($1).rast, $2, $3, NULL, NULL, NULL, $4, NULL, NULL, NULL), $5, NULL, NULL, NULL)::rastexpr $$ LANGUAGE 'SQL'; CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 rastexpr, rast2 raster, p_expression text, p_nodata1expr text, p_nodata2expr text, p_nodatanodataval double precision, t_expression text, t_nodata1expr text, t_nodata2expr text, t_nodatanodataval double precision) RETURNS rastexpr AS $$ SELECT (MapAlgebra4Union(($1).rast, $2, $3, $4, $5, $6, $7, $8, $9, $10), NULL, NULL, NULL, NULL)::rastexpr $$ LANGUAGE 'SQL'; CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 rastexpr, rast2 raster, p_expression text, t_expression text) RETURNS rastexpr AS $$ SELECT (MapAlgebra4Union(($1).rast, $2, $3, NULL, NULL, NULL, $4, NULL, NULL, NULL), NULL, NULL, NULL, NULL)::rastexpr $$ LANGUAGE 'SQL'; CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 rastexpr, rast2 raster, p_expression text, p_nodata1expr text, p_nodata2expr text, p_nodatanodataval double precision) RETURNS rastexpr AS $$ SELECT (MapAlgebra4Union(($1).rast, $2, $3, $4, $5, $6, NULL, NULL, NULL, NULL), NULL, NULL, NULL, NULL)::rastexpr $$ LANGUAGE 'SQL'; CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 rastexpr, rast2 raster, p_expression text) RETURNS rastexpr AS $$ SELECT (MapAlgebra4Union(($1).rast, $2, $3, NULL, NULL, NULL, NULL, NULL, NULL, NULL), $3, NULL, NULL, NULL)::rastexpr $$ LANGUAGE 'SQL'; CREATE OR REPLACE FUNCTION MapAlgebra4Union(rast1 rastexpr, rast2 raster) RETURNS rastexpr AS $$ SELECT (MapAlgebra4Union(($1).rast, $2, 'LAST', NULL, NULL, NULL, NULL, NULL, NULL, NULL), NULL, NULL, NULL, NULL)::rastexpr $$ LANGUAGE 'SQL'; --DROP AGGREGATE ST_Union(raster, text, text, text, double precision, text, text, text, double precision, text, text, text, double precision); CREATE AGGREGATE ST_Union(raster, text, text, text, double precision, text, text, text, double precision, text, text, text, double precision) ( SFUNC = MapAlgebra4Union, STYPE = rastexpr, FINALFUNC = MapAlgebra4UnionFinal3 ); --DROP AGGREGATE ST_Union(raster, text, text, text); CREATE AGGREGATE ST_Union(raster, text, text, text) ( SFUNC = MapAlgebra4Union, STYPE = rastexpr, FINALFUNC = MapAlgebra4UnionFinal3 ); --DROP AGGREGATE ST_Union(raster, text, text, text, double precision, text, text, text, double precision); CREATE AGGREGATE ST_Union(raster, text, text, text, double precision, text, text, text, double precision) ( SFUNC = MapAlgebra4Union, STYPE = rastexpr ); --DROP AGGREGATE ST_Union(raster, text, text); CREATE AGGREGATE ST_Union(raster, text, text) ( SFUNC = MapAlgebra4Union, STYPE = rastexpr ); --DROP AGGREGATE ST_Union(raster, text, text, text, double precision); CREATE AGGREGATE ST_Union(raster, text, text, text, double precision) ( SFUNC = MapAlgebra4Union, STYPE = rastexpr, FINALFUNC = MapAlgebra4UnionFinal1 ); --DROP AGGREGATE ST_Union(raster, text); CREATE AGGREGATE ST_Union(raster, text) ( SFUNC = MapAlgebra4Union, STYPE = rastexpr, FINALFUNC = MapAlgebra4UnionFinal1 ); --DROP AGGREGATE ST_Union(raster); CREATE AGGREGATE ST_Union(raster) ( SFUNC = MapAlgebra4Union, STYPE = rastexpr ); -- Test ST_TestRaster SELECT ST_AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_TestRaster(0, 0, 2)) rast) foo; -- Test St_Union SELECT ST_AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_Union(rast, 'mean'), 1) rast FROM (SELECT ST_TestRaster(1, 0, 6) AS rast UNION ALL SELECT ST_TestRaster(1, 1, 4) AS rast UNION ALL SELECT ST_TestRaster(-1, 0, 6) AS rast UNION ALL SELECT ST_TestRaster(0, 0, 2) AS rast ) foi) foo -- Test St_Union merging a blending merge of disjoint raster SELECT ST_AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_Union(rast, 'last'), 1) rast FROM (SELECT ST_TestRaster(0, 0, 1) AS rast UNION ALL SELECT ST_TestRaster(3, 0, 2) AS rast UNION ALL SELECT ST_TestRaster(3, 3, 4) AS rast UNION ALL SELECT ST_TestRaster(0, 3, 3) AS rast ) foi) foo -- Explicit implementation of 'MEAN' to make sure directly passing expressions works properly SELECT ST_AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_Union(rast, '[rast1.val] + [rast2.val]'::text, '[rast2.val]'::text, '[rast1.val]'::text, NULL::double precision, '[rast1.val] + 1'::text, '1'::text, '[rast1.val]'::text, 0::double precision, 'CASE WHEN [rast2.val] > 0 THEN [rast1.val] / [rast2.val]::float8 ELSE NULL END'::text, NULL::text, NULL::text, NULL::double precision), 1) rast FROM (SELECT ST_TestRaster(0, 0, 2) AS rast UNION ALL SELECT ST_TestRaster(1, 1, 4) AS rast UNION ALL SELECT ST_TestRaster(1, 0, 6) AS rast UNION ALL SELECT ST_TestRaster(-1, 0, 6) AS rast ) foi) foo -- Pseudo-explicit implementation of 'MEAN' using other predefined functions. Do not work yet... SELECT ST_AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_Union(rast, 'SUM'::text, 'COUNT'::text, 'CASE WHEN [rast2.val] > 0 THEN [rast1.val] / [rast2.val]::float8 ELSE NULL END'::text), 1) rast FROM (SELECT ST_TestRaster(0, 0, 2) AS rast UNION ALL SELECT ST_TestRaster(1, 1, 4) AS rast UNION ALL SELECT ST_TestRaster(1, 0, 6) AS rast UNION ALL SELECT ST_TestRaster(-1, 0, 6) AS rast ) foi) foo SELECT ST_AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_Union(rast), 1) AS rast FROM (SELECT ST_TestRaster(0, 0, 1) AS rast UNION ALL SELECT ST_TestRaster(2, 0, 2) ) foi ) foo SELECT ST_AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_Union(rast, 'mean'), 1) AS rast FROM (SELECT ST_TestRaster(0, 0, 1) AS rast UNION ALL SELECT ST_TestRaster(1, 0, 2) UNION ALL SELECT ST_TestRaster(0, 1, 6) ) foi ) foo ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_pixelaspolygons.sql�������������������������������0000644�0000000�0000000�00000003340�11722777314�024733� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_pixelaspolygons.sql 9324 2012-02-27 22:08:12Z pramsey $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- CREATE TYPE geomvalxy AS ( geom geometry, val double precision, x int, y int ); ----------------------------------------------------------------------- -- ST_PixelAsPolygons -- Return all the pixels of a raster as a geomval record -- Should be called like this: -- SELECT (gv).geom, (gv).val FROM (SELECT ST_PixelAsPolygons(rast) gv FROM mytable) foo ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_PixelAsPolygons(rast raster, band integer) RETURNS SETOF geomvalxy AS $$ DECLARE rast alias for $1; w integer; h integer; x integer; y integer; result geomvalxy; BEGIN IF rast IS NOT NULL THEN IF ST_HasNoBand(rast, band) THEN RAISE NOTICE 'Raster do not have band %. Returning null', band; ELSE SELECT ST_Width(rast), ST_Height(rast) INTO w, h; FOR x IN 1..w LOOP FOR y IN 1..h LOOP SELECT ST_PixelAsPolygon(rast, band, x, y), ST_Value(rast, band, x, y), x, y INTO result; RETURN NEXT result; END LOOP; END LOOP; END IF; END IF; RETURN; END; $$ LANGUAGE 'plpgsql'; CREATE FUNCTION ST_PixelAsPolygons(raster) RETURNS SETOF geomvalxy AS $$ SELECT ST_PixelAsPolygons($1, 1); $$ LANGUAGE SQL; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_multibandmapalgebra.sql���������������������������0000644�0000000�0000000�00000002266�11722777314�025474� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- ST_MultiBandMapAlgebra -- Return the same map algebra expression to all the band of a raster. ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_MultiBandMapAlgebra(rast1 raster, rast2 raster, expression text, extentexpr text) RETURNS raster AS $$ DECLARE numband int; newrast raster; pixeltype text; nodataval float; BEGIN numband := ST_NumBands(rast1); IF numband != ST_NumBands(rast2) THEN RAISE EXCEPTION 'ST_MultiBandMapAlgebra: Rasters do not have the same number of band'; END IF; newrast := ST_MakeEmptyRaster(rast1); FOR b IN 1..numband LOOP pixeltype := ST_BandPixelType(rast1, b); nodataval := ST_BandNodataValue(rast1, b); newrast := ST_AddBand(newrast, NULL, ST_MapAlgebraExpr(rast1, b, rast2, b, expression, pixeltype, extentexpr, nodataval), 1); END LOOP; END; $$ LANGUAGE 'plpgsql';������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_setarray.sql��������������������������������������0000644�0000000�0000000�00000001552�11722777314�023330� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- $Id: st_setarray.sql 9324 2012-02-27 22:08:12Z pramsey $ ---------------------------------------------------------------------- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> ---------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_SetArea(rast raster, band, x int, y int, width int, height int, val float8) RETURNS raster AS $$ DECLARE newraster raster := rast; cx int; cy int; newwidth int := CASE WHEN x + width > ST_Width(rast) THEN ST_Width(rast) - x ELSE width END; newheight int := CASE WHEN y + height > ST_Height(rast) THEN ST_Height(rast) - y ELSE height END; BEGIN newrast FOR cx IN 1..newwidth LOOP FOR cy IN 1..newheight LOOP newrast := ST_SetValue(newrast, band, cx, cy, val); END LOOP; END LOOP; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; ������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_setvalues.sql�������������������������������������0000644�0000000�0000000�00000034707�11722777314�023521� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_setvalues.sql 6127 2010-10-25 16:06:00Z jorgearevalo $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- --NOTE: Both ST_SetValues functions found in this file are ready to be being implemented in C -------------------------------------------------------------------- -- ST_SetValues - Set a range of raster pixels to a value. -- -- Arguments -- -- rast raster - Raster to be edited. -- band integer - Band number of the raster to be edited. Default to 1. -- x, y - Raster coordinates of the upper left corner of the range -- of pixel to be edited. -- width, height - Width and height of the range of pixel to be edited. -- val - Value to set the range. If NULL, pixels are set to nodata. -- keepdestnodata - Flag indicating not to change pixels set to nodata value. -- Default to FALSE. -- -- When x, y, width or height are out of the raster range, only the part -- of the range intersecting with the raster is set. -------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_SetValues(rast raster, band int, x int, y int, width int, height int, val float8, keepdestnodata boolean) RETURNS raster AS $$ DECLARE newraster raster := rast; cx int; cy int; newwidth int := width; newheight int := height; newband int := band; oldx int := x; oldy int := y; newx int; newy int; newval float8 := val; newkeepdestnodata boolean := keepdestnodata; rastnodataval int := 0; BEGIN IF rast IS NULL THEN RAISE NOTICE 'ST_SetValues: No raster provided. Returns NULL'; RETURN NULL; END IF; IF ST_IsEmpty(rast) OR ST_HasNoBand(rast, band) THEN RAISE NOTICE 'ST_SetValues: Empty or no band raster provided. Returns rast'; RETURN rast; END IF; IF newband IS NULL THEN newband := 1; END IF; IF newband < 1 THEN RAISE NOTICE 'ST_SetValues: band out of range. Returns rast'; RETURN rast; END IF; IF width IS NULL OR width < 1 OR height IS NULL OR height < 1 THEN RAISE NOTICE 'ST_SetValues: invalid width or height. Returns rast'; RETURN rast; END IF; IF x IS NULL THEN oldx := 1; END IF; newx := 1 + LEAST(GREATEST(0, oldx - 1), ST_Width(rast)); newwidth := GREATEST(LEAST(1 + ST_Width(rast), oldx + newwidth), 1) - newx; IF y IS NULL THEN oldy := 1; END IF; newy := 1 + LEAST(GREATEST(0, oldy - 1), ST_Height(rast)); newheight := GREATEST(LEAST(1 + ST_Height(rast), oldy + newheight), 1) - newy; IF newwidth < 1 OR newheight < 1 THEN RETURN rast; END IF; IF newkeepdestnodata IS NULL THEN newkeepdestnodata := FALSE; END IF; IF newkeepdestnodata THEN IF NOT ST_BandNodataValue(rast, newband) IS NULL THEN rastnodataval := ST_BandNoDataValue(rast, newband); ELSE RAISE NOTICE 'ST_SetValues: keepdestnodata was set to TRUE but rast1 does not have a nodata value. keepdestnodata reset to FALSE'; newkeepdestnodata := FALSE; END IF; IF ST_BandIsNodata(rast, band) THEN RETURN rast; END IF; END IF; IF newval IS NULL THEN newval := ST_BandNoDataValue(rast, band); END IF; IF newval IS NULL THEN RAISE NOTICE 'ST_SetValues: val is NULL and no nodata exist for rast. Returns rast'; RETURN rast; END IF; IF newkeepdestnodata THEN FOR cx IN newx..newx + newwidth - 1 LOOP FOR cy IN newy..newy + newheight - 1 LOOP IF ST_Value(newraster, newband, cx, cy) != rastnodataval THEN newraster := ST_SetValue(newraster, newband, cx, cy, newval); END IF; END LOOP; END LOOP; ELSE FOR cx IN newx..newx + newwidth - 1 LOOP FOR cy IN newy..newy + newheight - 1 LOOP newraster := ST_SetValue(newraster, newband, cx, cy, newval); END LOOP; END LOOP; END IF; RETURN newraster; END; $$ LANGUAGE 'plpgsql'; -- Variant with band = 1 CREATE OR REPLACE FUNCTION ST_SetValues(rast raster, x int, y int, width int, height int, val float8, keepdestnodata boolean) RETURNS raster AS 'SELECT ST_SetValues($1, 1, $2, $3, $4, $5, $6, $7)' LANGUAGE 'SQL' IMMUTABLE; -- Variant with band = 1 & keepdestnodata = FALSE CREATE OR REPLACE FUNCTION ST_SetValues(rast raster, x int, y int, width int, height int, val float8) RETURNS raster AS 'SELECT ST_SetValues($1, 1, $2, $3, $4, $5, $6, FALSE)' LANGUAGE 'SQL' IMMUTABLE; -- Variant with keepdestnodata = FALSE CREATE OR REPLACE FUNCTION ST_SetValues(rast raster, band int, x int, y int, width int, height int, val float8) RETURNS raster AS 'SELECT ST_SetValues($1, $2, $3, $4, $5, $6, $7, FALSE)' LANGUAGE 'SQL' IMMUTABLE; --Test rasters CREATE OR REPLACE FUNCTION ST_TestRaster(ulx float8, uly float8, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(10, 10, ulx, uly, 1, 1, 0, 0, -1), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; -- Test SELECT ST_SetValues(ST_TestRaster(0, 0, 1), 2, 2, 1, 1, 0) SELECT (pix).geom, (pix).val FROM (SELECT ST_PixelAsPolygons(ST_TestRaster(0, 0, 1)) as pix) foo SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_SetValues(ST_TestRaster(0, 0, 1), 2, 1, 1, 1, 0)) as pix) foo SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_SetValues(ST_TestRaster(0, 0, 1), 2, 1, 1, 10, 0)) as pix) foo SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_SetValues(ST_TestRaster(0, 0, 1), 1, 1, 4, 4, 0)) as pix) foo SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_SetValues(ST_TestRaster(0, 0, 1), 0, 3, 4, 4, 0)) as pix) foo SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_SetValues(ST_TestRaster(0, 0, -1), 2, 2, 2, 2, 0, TRUE)) as pix) foo SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_SetValues(ST_SetBandNoDataValue(ST_TestRaster(0, 0, -1), NULL), 2, 2, 2, 2, 0, TRUE)) as pix) foo -------------------------------------------------------------------- -- ST_SetValues - Set a range of raster pixels to values copied from -- the corresponding pixels in another raster. -- Arguments -- -- rast1 raster - Raster to be edited. -- band1 integer - Band number of the raster to be edited. Default to 1. -- x, y - Raster coordinates of the upper left corner of the -- range of pixel to be edited. -- width, height - Width and height of the range of pixel to be edited. -- rast2 - Raster values are copied from. -- band2 - Band number of the raster values are copied from. -- keepdestnodata - Flag indicating not to change pixels (in the edited -- raster) set to nodata value. Default to FALSE. -- keepsourcetnodata - Flag indicating not to copy pixels (from the source -- raster) set to nodata value. Default to FALSE. -- -- When x, y, width or height are out of the raster range, only the part -- of the range intersecting with the raster is set. -------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_SetValues(rast1 raster, band1 int, x int, y int, width int, height int, rast2 raster, band2 int, keepdestnodata boolean, keepsourcenodata boolean) RETURNS raster AS $$ DECLARE newraster raster := rast1; newwidth int := width; newheight int := height; oldx int := x; oldy int := y; newx int; newy int; newband1 int := band1; newband2 int := band2; newkeepdestnodata boolean := keepdestnodata; newkeepsourcenodata boolean := keepsourcenodata; r2val float; rast1nodataval float; rast2nodataval float; x2 int; y2 int; cx int; cy int; BEGIN IF rast1 IS NULL THEN RAISE NOTICE 'ST_SetValues: No raster provided. Return NULL'; RETURN NULL; END IF; IF ST_IsEmpty(rast1) OR ST_HasNoBand(rast1, band1) THEN RAISE NOTICE 'ST_SetValues: Empty or no band destination raster provided. Returns rast1'; RETURN rast1; END IF; IF rast2 IS NULL OR ST_IsEmpty(rast2) OR ST_HasNoBand(rast2, band2) THEN RAISE NOTICE 'ST_SetValues: Empty or no band source raster provided. Returns rast1'; RETURN rast1; END IF; IF newband1 IS NULL THEN newband1 := 1; END IF; IF newband1 < 1 THEN RAISE NOTICE 'ST_SetValues: band1 out of range. Returns rast'; RETURN rast1; END IF; IF newband2 IS NULL THEN newband2 := 1; END IF; IF newband2 < 1 THEN RAISE NOTICE 'ST_SetValues: band2 out of range. Returns rast'; RETURN rast1; END IF; IF x IS NULL THEN oldx := 1; END IF; newx := 1 + LEAST(GREATEST(0, oldx - 1), ST_Width(rast1)); newwidth := GREATEST(LEAST(1 + ST_Width(rast1), oldx + newwidth), 1) - newx; oldx := newx; IF y IS NULL THEN oldy := 1; END IF; --RAISE NOTICE 'aaa oldy=%, newheight=%', oldy, newheight; newy := 1 + LEAST(GREATEST(0, oldy - 1), ST_Height(rast1)); newheight := GREATEST(LEAST(1 + ST_Height(rast1), oldy + newheight), 1) - newy; oldy := newy; --RAISE NOTICE 'bbb newx=%, newy=%', newx, newy; --RAISE NOTICE 'ccc newwidth=%, newheight=%', newwidth, newheight; IF newwidth < 1 OR newheight < 1 THEN RETURN rast1; END IF; x2 := ST_World2RasterCoordX(rast1, ST_Raster2WorldCoordX(rast2, 1, 1), ST_Raster2WorldCoordY(rast2, 1, 1)); y2 := ST_World2RasterCoordY(rast1, ST_Raster2WorldCoordY(rast2, 1, 1), ST_Raster2WorldCoordY(rast2, 1, 1)); --RAISE NOTICE '111 x2=%, y2=%', x2, y2; newx := x2 + LEAST(GREATEST(0, oldx - x2), ST_Width(rast2)); newwidth := GREATEST(LEAST(x2 + ST_Width(rast2), oldx + newwidth), x2) - newx; newy := y2 + LEAST(GREATEST(0, oldy - y2), ST_Height(rast2)); newheight := GREATEST(LEAST(y2 + ST_Height(rast2), oldy + newheight), y2) - newy; IF newwidth < 1 OR newheight < 1 THEN RETURN rast1; END IF; --RAISE NOTICE '222 newx=%, newy=%', newx, newy; --RAISE NOTICE '333 newwidth=%, newheight=%', newwidth, newheight; IF newkeepdestnodata IS NULL THEN newkeepdestnodata := FALSE; END IF; IF newkeepdestnodata THEN IF NOT ST_BandNodataValue(rast1, newband1) IS NULL THEN rast1nodataval := ST_BandNoDataValue(rast1, newband1); ELSE RAISE NOTICE 'ST_SetValues: keepdestnodata was set to TRUE but rast1 does not have a nodata value. keepdestnodata reset to FALSE'; newkeepdestnodata := FALSE; END IF; IF ST_BandIsNodata(rast1, newband1) THEN RETURN rast1; END IF; END IF; IF newkeepsourcenodata IS NULL THEN newkeepsourcenodata := FALSE; END IF; IF newkeepsourcenodata THEN IF NOT ST_BandNodataValue(rast2, newband2) IS NULL THEN rast2nodataval := ST_BandNoDataValue(rast2, newband2); ELSE RAISE NOTICE 'ST_SetValues: keepsourcenodata was set to true but rast2 does not have a nodata value. keepsourcenodata reset to false'; newkeepsourcenodata := FALSE; END IF; IF ST_BandIsNodata(rast2, newband2) THEN RETURN rast1; END IF; END IF; IF newkeepdestnodata THEN FOR cx IN newx..newx + newwidth - 1 LOOP FOR cy IN newy..newy + newheight - 1 LOOP r2val := ST_Value(rast2, newband2, cx - x2 + 1, cy - y2 + 1); --RAISE NOTICE '444 x=%, y=%', cx, cy; IF (ST_Value(newraster, newband1, cx, cy) != rast1nodataval) AND (NOT newkeepsourcenodata OR r2val != rast2nodataval) THEN newraster := ST_SetValue(newraster, newband1, cx, cy, r2val); END IF; END LOOP; END LOOP; ELSE --RAISE NOTICE '555 newx + newwidth - 1=%, newy + newheight - 1=%', newx + newwidth - 1, newy + newheight - 1; FOR cx IN newx..newx + newwidth - 1 LOOP FOR cy IN newy..newy + newheight - 1 LOOP r2val := ST_Value(rast2, newband2, cx - x2 + 1, cy - y2 + 1); --RAISE NOTICE '666 x=%, y=%', cx, cy; IF NOT newkeepsourcenodata OR r2val != rast2nodataval THEN newraster := ST_SetValue(newraster, newband1, cx, cy, r2val); END IF; END LOOP; END LOOP; END IF; RETURN newraster; END; $$ LANGUAGE 'plpgsql'; -- Variant with both band = 1 CREATE OR REPLACE FUNCTION ST_SetValues(rast1 raster, x int, y int, width int, height int, rast2 raster, keepdestnodata boolean, keepsourcenodata boolean) RETURNS raster AS 'SELECT ST_SetValues($1, 1, $2, $3, $4, $5, $6, 1, $7, $8)' LANGUAGE 'SQL' IMMUTABLE; -- Variant with both band = 1 & both keepnodata = FALSE CREATE OR REPLACE FUNCTION ST_SetValues(rast1 raster, x int, y int, width int, height int, rast2 raster) RETURNS raster AS 'SELECT ST_SetValues($1, 1, $2, $3, $4, $5, $6, 1, FALSE, FALSE)' LANGUAGE 'SQL' IMMUTABLE; -- Test SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_TestRaster(0, 0, 1)) as pix) foo SELECT ST_AsBinary((pix).geom), (pix).val FROM (SELECT ST_PixelAsPolygons(ST_SetValues(ST_TestRaster(0, 0, 1), 2, 1, 3, 1, ST_TestRaster(3, 0, 3))) as pix) foo ���������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_addband.sql���������������������������������������0000644�0000000�0000000�00000003616�11722777314�023056� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_addband.sql 6127 2010-10-25 16:06:00Z jorgearevalo $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- NOTE: This function is provided merely as an example since a C version was implemented and is now provided in rtpostgis.sql CREATE OR REPLACE FUNCTION ST_AddBand(rast1 raster, rast2 raster, band int, index int) RETURNS raster AS $$ DECLARE newraster raster; newnodatavalue int; newindex int := index; newband int := band; x int; y int; BEGIN IF ST_Width(rast1) != ST_Width(rast2) OR ST_Height(rast1) != ST_Height(rast2) THEN RAISE EXCEPTION 'ST_AddBand: Attempting to add a band with different width or height'; END IF; IF newindex < 1 THEN newindex := 1; END IF; IF newindex IS NULL OR newindex > ST_NumBands(rast1) THEN newindex := ST_NumBands(rast1) + 1; END IF; IF newband < 1 THEN newband := 1; END IF; IF newband IS NULL OR newband > ST_NumBands(rast2) THEN newband := ST_NumBands(rast2); END IF; IF newband = 0 THEN RETURN rast1; END IF; newnodatavalue := ST_BandNodataValue(rast2, newband); newraster := ST_AddBand(rast1, newindex, ST_BandPixelType(rast2, newband), newnodatavalue, newnodatavalue); FOR x IN 1..ST_Width(rast2) LOOP FOR y IN 1..ST_Height(rast2) LOOP newraster := ST_SetValue(newraster, newindex, x, y, ST_Value(rast2, newband, x, y)); END LOOP; END LOOP; RETURN newraster; END; $$ LANGUAGE 'plpgsql'; --Test SELECT ST_NumBands(ST_AddBand(ST_TestRaster(0, 0, 1), ST_TestRaster(0, 0, 1), 1, 2))������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_deleteband.sql������������������������������������0000644�0000000�0000000�00000004006�11722777314�023562� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- -- $Id: st_deleteband.sql 9324 2012-02-27 22:08:12Z pramsey $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- NOTE: The ST_DeleteBand function found in this file still need enhancement before being implemented in C. -- NOTE: ST_DeleteBand(rast raster, band int) is dependent on -- ST_AddBand(rast1 raster, rast2 raster, band int, index int) -- to be found in the script/plpgsql folder CREATE OR REPLACE FUNCTION ST_DeleteBand(rast raster, band int) RETURNS raster AS $$ DECLARE numband int := ST_NumBands(rast); newrast raster := ST_MakeEmptyRaster(rast); BEGIN FOR b IN 1..numband LOOP IF b != band THEN newrast := ST_AddBand(newrast, rast, b, NULL); END IF; END LOOP; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; --Test SELECT ST_MakeEmptyRaster(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); SELECT ST_MakeEmptyRaster(ST_AddBand(ST_AddBand(ST_TestRaster(1, 1, 1), ST_TestRaster(1, 1, 2), 1, NULL), ST_TestRaster(1, 1, 3), 1, NULL)); SELECT st_width(ST_AddBand(ST_AddBand(ST_TestRaster(1, 1, 1), ST_TestRaster(1, 1, 2), 1, NULL), ST_TestRaster(1, 1, 3), 1, NULL)); SELECT st_width(ST_AddBand(ST_TestRaster(1, 1, 1), ST_TestRaster(1, 1, 2), 1, NULL)); SELECT ST_NumBands(ST_AddBand(ST_AddBand(ST_TestRaster(1, 1, 1), ST_TestRaster(1, 1, 2), 1, NULL), ST_TestRaster(1, 1, 3), 1, NULL)); SELECT ST_Value(ST_AddBand(ST_AddBand(ST_TestRaster(1, 1, 1), ST_TestRaster(1, 1, 2), 1, 2), ST_TestRaster(1, 1, 3), 1, 3), 2, 1, 1); SELECT ST_NumBands(ST_DeleteBand(ST_AddBand(ST_AddBand(ST_TestRaster(1, 1, 1), ST_TestRaster(1, 1, 2), 1, 2), ST_TestRaster(1, 1, 3), 1, 2), 2)); SELECT ST_NumBands(ST_DeleteBand(ST_DeleteBand(ST_AddBand(ST_AddBand(ST_TestRaster(1, 1, 1), ST_TestRaster(1, 1, 2), 1, 2), ST_TestRaster(1, 1, 3), 1, 2), 2), 2)); SELECT ST_DeleteBand(ST_TestRaster(1, 1, 1), 2); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/readme.txt�������������������������������������������0000644�0000000�0000000�00000000175�11722777314�022245� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This folder contain experimental pl/pgSQL functions which might be implemented later as C functions. To be used with caution.���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_geomextent2rastercoord.sql������������������������0000644�0000000�0000000�00000007511�11722777314�026210� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DROP FUNCTION ST_GeomExtent2RasterCoord(rast raster, geomin geometry); CREATE OR REPLACE FUNCTION ST_GeomExtent2RasterCoord(rast raster, geomin geometry) RETURNS int[] AS $$ DECLARE geomintersect geometry; x1w double precision := 0.0; x2w double precision := 0.0; y1w double precision := 0.0; y2w double precision := 0.0; x1 integer := 0; x2 integer := 0; x3 integer := 0; x4 integer := 0; y1 integer := 0; y2 integer := 0; y3 integer := 0; y4 integer := 0; psize float8; BEGIN -- Get the intersection between with the geometry. -- We will search for withvalue pixel only in this area. geomintersect := st_intersection(geomin, st_convexhull(rast)); --RAISE NOTICE 'geomintersect1=%', astext(geomintersect); -- If the intersection is empty, return false IF st_isempty(geomintersect) THEN RETURN ARRAY[NULL, NULL, NULL, NULL]; END IF; -- We create a minimalistic buffer around the intersection in order to scan every pixels -- that would touch the edge or intersect with the geometry psize := st_scalex(rast) + st_skewy(rast); geomintersect := st_buffer(geomintersect, psize / 1000000); --RAISE NOTICE 'geomintersect2=%', astext(geomintersect); -- Find the world coordinates of the bounding box of the intersecting area x1w := st_xmin(geomintersect); y1w := st_ymin(geomintersect); x2w := st_xmax(geomintersect); y2w := st_ymax(geomintersect); --RAISE NOTICE 'x1w=%, y1w=%, x2w=%, y2w=%', x1w, y1w, x2w, y2w; -- Convert world coordinates to raster coordinates x1 := st_world2rastercoordx(rast, x1w, y1w); y1 := st_world2rastercoordy(rast, x1w, y1w); x2 := st_world2rastercoordx(rast, x2w, y1w); y2 := st_world2rastercoordy(rast, x2w, y1w); x3 := st_world2rastercoordx(rast, x1w, y2w); y3 := st_world2rastercoordy(rast, x1w, y2w); x4 := st_world2rastercoordx(rast, x2w, y2w); y4 := st_world2rastercoordy(rast, x2w, y2w); --RAISE NOTICE 'x1=%, y1=%, x2=%, y2=%, x3=%, y3=%, x4=%, y4=%', x1, y1, x2, y2, x3, y3, x4, y4; -- Order the raster coordinates for the upcoming FOR loop. x1 := int4smaller(int4smaller(int4smaller(x1, x2), x3), x4); y1 := int4smaller(int4smaller(int4smaller(y1, y2), y3), y4); x2 := int4larger(int4larger(int4larger(x1, x2), x3), x4); y2 := int4larger(int4larger(int4larger(y1, y2), y3), y4); -- Make sure the range is not lower than 1. -- This can happen when world coordinate are exactly on the left border -- of the raster and that they do not span on more than one pixel. x1 := int4smaller(int4larger(x1, 1), st_width(rast)); y1 := int4smaller(int4larger(y1, 1), st_height(rast)); -- Also make sure the range does not exceed the width and height of the raster. -- This can happen when world coordinate are exactly on the lower right border -- of the raster. x2 := int4smaller(x2, st_width(rast)); y2 := int4smaller(y2, st_height(rast)); RETURN ARRAY[x1, y1, x2, y2]; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; --Test SELECT (gvxy).geom, (gvxy).x::text || ',' || (gvxy).y::text FROM (SELECT DISTINCT rid, ST_PixelAsPolygons(rast) gvxy FROM srtm_22_03_tiled, rect3 WHERE st_intersects(rast, geom) ) foo SELECT DISTINCT rid FROM srtm_22_03_tiled, rect3 WHERE st_intersects(rast, geom) SELECT rid, id, ST_GeomExtent2RasterCoord(rast, geom) FROM srtm_22_03_tiled, rect3 WHERE st_intersects(rast, geom) SELECT (ext).x1, (ext).y1, (ext).x2, (ext).y2 FROM (SELECT ST_GeomExtent2RasterCoord(rast, geom) ext FROM srtm_22_03_tiled, rect3 WHERE st_intersects(rast, geom)) foo���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_mapalgebra.sql������������������������������������0000644�0000000�0000000�00000147744�11722777314�023607� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������---------------------------------------------------------------------- -- $Id: st_mapalgebra.sql 9324 2012-02-27 22:08:12Z pramsey $ -- -- Copyright (c) 2009-2010 Pierre Racine <pierre.racine@sbf.ulaval.ca> -- ---------------------------------------------------------------------- -- NOTE: The ST_MapAlgebra() function is already implemented in C. This plpgsql script is provided only as an example. -- Defining the plpgsql function below might overwrite the current C implementation and brake other functions dependent on it. -- Use with caution. ---------------------------------------------------------------------- -------------------------------------------------------------------- -- ST_MapAlgebra - (one raster version) Return a raster which values -- are the result of an SQL expression involving pixel -- value from the input raster band. -- Arguments -- rast raster - Raster on which the expression is evaluated. (Referred -- by "rast1" in the expression. -- band integer - Band number of the raster to be evaluated. Default to 1. -- expression text - SQL expression to apply to with value pixels. Ex.: "rast + 2" -- nodatavalueexpr text - SQL expression to apply to nodata value pixels. Ex.: "2" -- pixeltype text - Pixeltype assigned to the resulting raster. Expression -- results are truncated to this type. Default to the -- pixeltype of the first raster. -- -- NOTE that this function now exist as a C implementation and is provided -- here solely as a plpgsql example. -------------------------------------------------------------------- DROP FUNCTION IF EXISTS ST_MapAlgebra(rast raster, band integer, expression text, nodatavalueexpr text, pixeltype text); CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast raster, band integer, expression text, nodatavalueexpr text, pixeltype text) RETURNS raster AS $$ DECLARE width integer; height integer; x integer; y integer; r float; newnodatavalue float8; newinitialvalue float8; newrast raster; newval float8; newexpr text; initexpr text; initndvexpr text; newpixeltype text; skipcomputation int := 0; newhasnodatavalue boolean := FALSE; BEGIN -- Check if raster is NULL IF rast IS NULL THEN RAISE NOTICE 'ST_MapAlgebra: Raster is NULL. Returning NULL'; RETURN NULL; END IF; width := ST_Width(rast); height := ST_Height(rast); -- Create a new empty raster having the same georeference as the provided raster newrast := ST_MakeEmptyRaster(width, height, ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_ScaleX(rast), ST_ScaleY(rast), ST_SkewX(rast), ST_SkewY(rast), ST_SRID(rast)); -- If this new raster is empty (width = 0 OR height = 0) then there is nothing to compute and we return it right now IF ST_IsEmpty(newrast) THEN RAISE NOTICE 'ST_MapAlgebra: Raster is empty. Returning an empty raster'; RETURN newrast; END IF; -- Check if rast has the required band. Otherwise return a raster without band IF ST_HasNoBand(rast, band) THEN RAISE NOTICE 'ST_MapAlgebra: Raster do not have the required band. Returning a raster without band'; RETURN newrast; END IF; -- Set the new pixeltype newpixeltype := pixeltype; IF newpixeltype IS NULL THEN newpixeltype := ST_BandPixelType(rast, band); ELSIF newpixeltype != '1BB' AND newpixeltype != '2BUI' AND newpixeltype != '4BUI' AND newpixeltype != '8BSI' AND newpixeltype != '8BUI' AND newpixeltype != '16BSI' AND newpixeltype != '16BUI' AND newpixeltype != '32BSI' AND newpixeltype != '32BUI' AND newpixeltype != '32BF' AND newpixeltype != '64BF' THEN RAISE EXCEPTION 'ST_MapAlgebra: Invalid pixeltype "%". Aborting.', newpixeltype; END IF; -- Check for notada value newnodatavalue := ST_BandNodataValue(rast, band); IF newnodatavalue IS NULL OR newnodatavalue < ST_MinPossibleValue(newpixeltype) OR newnodatavalue > (-ST_MinPossibleValue(newpixeltype) - 1) THEN RAISE NOTICE 'ST_MapAlgebra: Source raster do not have a nodata value or is out of range for the new raster pixeltype, nodata value for new raster set to the min value possible'; newnodatavalue := ST_MinPossibleValue(newpixeltype); END IF; -- We set the initial value of the future band to nodata value. -- If nodatavalue is null then the raster will be initialise to ST_MinPossibleValue -- but all the values should be recomputed anyway. newinitialvalue := newnodatavalue; initexpr := 'SELECT ' || trim(upper(expression)); initndvexpr := 'SELECT ' || trim(upper(nodatavalueexpr)); --RAISE NOTICE '111 initexpr=%, newnodatavalue=%', initexpr,newnodatavalue; -- Optimization: If a nodatavalueexpr is provided, recompute the initial value -- so we can then initialise the raster with this value and skip the computation -- of nodata values one by one in the main computing loop IF NOT nodatavalueexpr IS NULL THEN newexpr := replace(initndvexpr, 'RAST', newnodatavalue::text); --RAISE NOTICE '222 newexpr=%', newexpr; EXECUTE newexpr INTO newinitialvalue; END IF; --RAISE NOTICE '333'; -- Optimization: If the raster is only filled with nodata value return right now a raster filled with the nodatavalueexpr IF ST_BandIsNoData(rast, band) THEN RETURN ST_AddBand(newrast, newpixeltype, newinitialvalue, newnodatavalue); END IF; -- Optimization: If expression resume to 'RAST' and nodatavalueexpr is NULL or also equal to 'RAST', -- we can just return the band from the original raster IF initexpr = 'SELECT RAST' AND (nodatavalueexpr IS NULL OR initndvexpr = 'SELECT RAST') THEN RETURN ST_AddBand(newrast, rast, band, 1); -- To be implemented in C END IF; -- Optimization: If expression resume to a constant (it does not contain RAST) IF position('RAST' in initexpr) = 0 THEN --RAISE NOTICE '444'; EXECUTE initexpr INTO newval; --RAISE NOTICE '555'; skipcomputation := 1; IF nodatavalueexpr IS NULL THEN -- Compute the new value, set it and we will return after creating the new raster newinitialvalue := newval; skipcomputation := 2; ELSEIF newval = newinitialvalue THEN -- Return the new raster as it will be before computing pixel by pixel skipcomputation := 2; END IF; END IF; --Create the raster receiving all the computed values. Initialize it to the new initial value. newrast := ST_AddBand(newrast, newpixeltype, newinitialvalue, newnodatavalue); -- Optimization: If expression is NULL, or all the pixels could be set in a one step, return the initialised raster now IF expression IS NULL OR skipcomputation = 2 THEN RETURN newrast; END IF; FOR x IN 1..width LOOP FOR y IN 1..height LOOP r := ST_Value(rast, band, x, y); -- We compute a value only for the withdata value pixel since the nodata value have already been set by the first optimization IF NOT r IS NULL AND (newnodatavalue IS NULL OR r != newnodatavalue) THEN -- The second part of the test can be removed once ST_Value return NULL for a nodata value IF skipcomputation = 0 THEN newexpr := replace(initexpr, 'RAST', r::text); --RAISE NOTICE '666 newexpr=%', newexpr; EXECUTE newexpr INTO newval; IF newval IS NULL THEN newval := newnodatavalue; END IF; END IF; newrast = ST_SetValue(newrast, band, x, y, newval); ELSE newhasnodatavalue := TRUE; END IF; END LOOP; END LOOP; IF newhasnodatavalue THEN newrast := ST_SetBandNodataValue(newrast, 1, newnodatavalue); END IF; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; --Test rasters CREATE OR REPLACE FUNCTION ST_TestRaster(val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, 1, 0, 0, -1), '32BF', val, -1), 1, 1, -1); END; $$ LANGUAGE 'plpgsql'; -- Tests -- Test NULL Raster. Should be true. --SELECT ST_MapAlgebra(NULL, 1, 'rast + 20', '2', NULL) IS NULL FROM ST_TestRaster(0, 0, -1) rast; -- Test empty Raster. Should be true. --SELECT ST_IsEmpty(ST_MapAlgebra(ST_MakeEmptyRaster(0, 10, 0, 0, 1, 1, 1, 1, -1), 1, 'rast + 20', '2', NULL)) -- Test has no band raster. Should be true. --SELECT ST_HasNoBand(ST_MapAlgebra(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, 1, -1), 1, 'rast + 20', '2', NULL)) -- Test has no nodata value. Should return null and 19. --SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(ST_SetBandNoDataValue(ST_TestRaster(0, 0, 1), NULL), 1, 'rast + 20', '2', NULL), 1, 1) --FROM ST_TestRaster(0, 0, 1) rast; -- Test has nodata value. Should return null and 2. --SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, 'rast + 20', 'rast + 3', NULL), 1, 1) --FROM ST_TestRaster(0, 0, 1) rast; -- Test has nodata value. Should return null and null. --SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(rast, 1, 'rast + 20', NULL, NULL), 1, 1) --FROM ST_TestRaster(0, 0, 1) rast; -- Test 'rast' expression. Should be 1 and 1. --SELECT ST_Value(rast, 1, 2), ST_Value(ST_MapAlgebra(rast, 1, 'rast', 'rast', NULL), 1, 2) --FROM ST_TestRaster(0, 0, 0) rast; -- Test 'rast' expression on a no nodata value raster. Should be null and -1. --SELECT ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebra(ST_SetBandNoDataValue(rast, NULL), 1, 'rast', NULL, NULL), 1, 1) --FROM ST_TestRaster(0, 0, -1) rast; -- Test pixeltype 1. Should return 100 and 15. --SELECT ST_Value(rast, 1, 2), ST_Value(ST_MapAlgebra(rast, 1, 'rast + 20', 'rast + 2', '4BUI'), 1, 2) --FROM ST_TestRaster(0, 0, 100) rast; -- Test pixeltype 1. Should return an error. --SELECT ST_Value(rast, 1, 2), ST_Value(ST_MapAlgebra(rast, 1, 'rast + 20', 'rast + 2', '4BUId'), 1, 2) --FROM ST_TestRaster(0, 0, 100) rast; -- Test pixeltype 1. Should return 101 and 3. --SELECT ST_Value(rast, 1, 2), ST_Value(ST_MapAlgebra(rast, 1, 'rast + 20', 'rast + 2', '2BUI'), 1, 2) --FROM ST_TestRaster(0, 0, 101) rast; -------------------------------------------------------------------- -- ST_SameAlignment -- Determine if the raster coordinates are aligned. -- Scale must be the same and pixels corners must fall on the same grid. -------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_SameAlignment(rast1ulx float8, rast1uly float8, rast1scalex float8, rast1scaley float8, rast1skewx float8, rast1skewy float8, rast2ulx float8, rast2uly float8, rast2scalex float8, rast2scaley float8, rast2skewx float8, rast2skewy float8) RETURNS boolean AS $$ DECLARE emptyraster2 raster; r2x integer; r2y integer; BEGIN IF rast1scalex != rast2scalex THEN RAISE NOTICE 'ST_SameAlignment: Pixelsize in x are different'; RETURN FALSE; END IF; IF rast1scaley != rast2scaley THEN RAISE NOTICE 'ST_SameAlignment: Pixelsize in y are different'; RETURN FALSE; END IF; IF rast1skewx != rast2skewx THEN RAISE NOTICE 'ST_SameAlignment: Skews in x are different'; RETURN FALSE; END IF; IF rast1skewy != rast2skewy THEN RAISE NOTICE 'ST_SameAlignment: Skews in y are different'; RETURN FALSE; END IF; -- For checking for the pixel corner alignment, we create a fake raster aligned on the second raster... emptyraster2 := ST_MakeEmptyRaster(1, 1, rast2ulx, rast2uly, rast2scalex, rast2scaley, rast2skewx, rast2skewy, -1); -- We get the raster coordinates of the upper left corner of the first raster in this new raster.. r2x := ST_World2RasterCoordX(emptyraster2, rast1ulx, rast1uly); r2y := ST_World2RasterCoordY(emptyraster2, rast1ulx, rast1uly); -- And we make sure the world coordinates the upperleft corner of this pixel are the same as the first raster. IF ST_Raster2WorldCoordX(emptyraster2, r2x, r2y) != rast1ulx OR ST_Raster2WorldCoordY(emptyraster2, r2x, r2y) != rast1uly THEN RAISE NOTICE 'ST_SameAlignment: alignments are different'; RETURN FALSE; END IF; RETURN TRUE; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION ST_SameAlignment(rast1 raster, rast2 raster) RETURNS boolean AS 'select ST_SameAlignment(ST_UpperLeftX($1), ST_UpperLeftY($1), ST_ScaleX($1), ST_ScaleY($1), ST_SkewX($1), ST_SkewY($1), ST_UpperLeftX($2), ST_UpperLeftY($2), ST_ScaleX($2), ST_ScaleY($2), ST_SkewX($2), ST_SkewY($2))' LANGUAGE 'SQL' IMMUTABLE STRICT; --Test --SELECT ST_SameAlignment(0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0) -- FALSE --SELECT ST_SameAlignment(0.0001, 0, 1, 1, 0, 0, 1.00001, 0, 1, 1, 0, 0) -- FALSE --SELECT ST_SameAlignment(10.0001, 2, 1, 1, 0, 0, 1.0001, 1110, 1, 1, 0, 0) --TRUE --SELECT ST_SameAlignment(10.0001, 2, 1, 1, 0, 0, 1.001, 1110, 1, 1, 0, 0) -- FALSE --SELECT ST_SameAlignment(10, 2, 1, 1, 1, -1, sqrt(2.0), sqrt(2.0), 1, 1, 1, -1) -- FALSE --SELECT ST_SameAlignment(ST_AddBand(ST_MakeEmptyRaster(10, 10, 2, 0, 1, 1, 1, -1, -1), '8BSI'), ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 1, -1, -1), '8BSI')) --SELECT ST_SameAlignment(ST_AddBand(ST_MakeEmptyRaster(10, 10, 2, 0, 1, 1, 1, -1, -1), '8BSI'), ST_AddBand(ST_MakeEmptyRaster(10, 10, 2, 6, 1, 1, 1, -1, -1), '8BSI')) --SELECT ST_SameAlignment(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, -0.2, -0.2, -1), '8BSI'), ST_AddBand(ST_MakeEmptyRaster(5, 5, 0.8, -1.2, 1, -1, -0.2, -0.2, -1), '8BSI')) --SELECT ST_SameAlignment(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0.2, 0.2, -1), '8BSI'), ST_AddBand(ST_MakeEmptyRaster(10, 10, 1.2, -0.8, 1, -1, 0.2, 0.2, -1), '8BSI')) --SELECT generate_series(1, 100) AS ID, AsBinary((ST_PixelAsPolygons(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, -0.4361, 0.4361, -1), '8BSI'), 1)).geom) -------------------------------------------------------------------- -- ST_IsEmpty -- Return TRUE if the raster is empty. i.e. is NULL, width = 0 or height = 0 -------------------------------------------------------------------- --CREATE OR REPLACE FUNCTION ST_IsEmpty(raster) -- RETURNS boolean -- AS 'SELECT $1 IS NULL OR ST_Width($1) = 0 OR ST_Height($1) = 0' -- LANGUAGE 'SQL' IMMUTABLE; -------------------------------------------------------------------- -- ST_HasNoBand -- Return TRUE if the number of band is 0 -------------------------------------------------------------------- --CREATE OR REPLACE FUNCTION ST_HasNoBand(raster) -- RETURNS boolean -- AS 'SELECT $1 IS NULL OR ST_NumBands($1) = 0' -- LANGUAGE 'SQL' IMMUTABLE; -------------------------------------------------------------------- -- ST_HasNoBand -- Return TRUE if the raster do not have a band of this number. -------------------------------------------------------------------- --CREATE OR REPLACE FUNCTION ST_HasNoBand(raster, int) -- RETURNS boolean -- AS 'SELECT $1 IS NULL OR ST_NumBands($1) < $2' -- LANGUAGE 'SQL' IMMUTABLE; -- Test --SELECT ST_HasNoband(NULL); -------------------------------------------------------------------- -- ST_BandIsNoData -- NOT YET IMPLEMENTED -- Return TRUE if the raster band contains only nodata values. -------------------------------------------------------------------- --CREATE OR REPLACE FUNCTION ST_BandIsNoData(raster, int) -- RETURNS boolean -- AS 'SELECT ST_HasNoBand($1, $2) AND ST_BandHasNodataValue($1, $2) AND false' -- LANGUAGE 'SQL' IMMUTABLE; --CREATE OR REPLACE FUNCTION toto() -- RETURNS int -- AS 'SELECT 10' -- LANGUAGE 'SQL' IMMUTABLE STRICT; DROP FUNCTION IF EXISTS ST_MapAlgebra(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text, extentexpr text, nodata1expr text, nodata2expr text, nodatanodataaexpr text); CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text, extentexpr text, nodata1expr text, nodata2expr text, nodatanodataexpr text) RETURNS raster AS $$ DECLARE x integer; y integer; r1 float8; r2 float8; rast1ulx float8; rast1uly float8; rast1width int; rast1height int; rast1scalex float8; rast1scaley float8; rast1skewx float8; rast1skewy float8; rast1nodataval float8; rast1srid int; rast1offsetx int; rast1offsety int; rast2ulx float8; rast2uly float8; rast2width int; rast2height int; rast2scalex float8; rast2scaley float8; rast2skewx float8; rast2skewy float8; rast2nodataval float8; rast2srid int; rast2offsetx1 int; rast2offsety1 int; rast2offsetx2 int; rast2offsety2 int; newrast raster; newsrid int; newscalex float8; newscaley float8; newskewx float8; newskewy float8; newnodatavalue float8; newpixeltype text; newulx float8; newuly float8; newwidth int; newheight int; newoffsetx1 int; newoffsety1 int; newoffsetx2 int; newoffsety2 int; newval float8; newexpr text; BEGIN -- We have to deal with NULL, empty, hasnoband and hasnodatavalue band rasters... -- These are respectively tested by "IS NULL", "ST_IsEmpty()", "ST_HasNoBand()" and "ST_BandIsNodata()" -- If both raster are null, we return NULL. ok -- If both raster do not have extent (are empty), we return an empty raster. ok -- If both raster do not have the specified band, -- we return a no band raster with the correct extent (according to the extent expression). ok -- If both raster bands are nodatavalue and there is no replacement value, we return a nodata value band. ok -- If only one raster is null or empty or has no band or hasnodata band we treat it as a nodata band raster. -- If there is a replacement value we replace the missing raster values with this replacement value. ok -- If there is no replacement value, we return a nodata value band. ok -- What to do when only one raster is NULL or empty -- If the extent expression is FIRST and the first raster is null we return NULL. ok -- If the extent expression is FIRST and the first raster do not have extent (is empty), we return an empty raster. ok -- If the extent expression is SECOND and the second raster is null we return NULL. ok -- If the extent expression is SECOND and the second raster do not have extent (is empty), we return an empty raster. ok -- If the extent expression is INTERSECTION and one raster is null or do not have extent (is empty), we return an empty raster. ok -- If the extent expression is UNION and one raster is null or do not have extent (is empty), -- we return a raster having the extent and the band characteristics of the other raster. ok -- What to do when only one raster do not have the required band. -- If the extent expression is FIRST and the first raster do not have the specified band, -- we return a no band raster with the correct extent (according to the extent expression). ok -- If the extent expression is SECOND and the second raster do not have the specified band, -- we return a no band raster with the correct extent (according to the extent expression). ok -- If the extent expression is INTERSECTION and one raster do not have the specified band, -- we treat it as a nodata raster band. ok -- If the extent expression is UNION and one raster do not have the specified band, -- we treat it as a nodata raster band. ok -- In all those cases, we make a warning. -- Check if both rasters are NULL IF rast1 IS NULL AND rast2 IS NULL THEN RAISE NOTICE 'ST_MapAlgebra: Both raster are NULL. Returning NULL'; RETURN NULL; END IF; -- Check if both rasters are empty (width or height = 0) IF ST_IsEmpty(rast1) AND ST_IsEmpty(rast2) THEN RAISE NOTICE 'ST_MapAlgebra: Both raster are empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, -1); END IF; rast1ulx := ST_UpperLeftX(rast1); rast1uly := ST_UpperLeftY(rast1); rast1width := ST_Width(rast1); rast1height := ST_Height(rast1); rast1scalex := ST_ScaleX(rast1); rast1scaley := ST_ScaleY(rast1); rast1skewx := ST_SkewX(rast1); rast1skewy := ST_SkewY(rast1); rast1srid := ST_SRID(rast1); rast2ulx := ST_UpperLeftX(rast2); rast2uly := ST_UpperLeftY(rast2); rast2width := ST_Width(rast2); rast2height := ST_Height(rast2); rast2scalex := ST_ScaleX(rast2); rast2scaley := ST_ScaleY(rast2); rast2skewx := ST_SkewX(rast2); rast2skewy := ST_SkewY(rast2); rast2srid := ST_SRID(rast2); -- Check if the first raster is NULL or empty IF rast1 IS NULL OR ST_IsEmpty(rast1) THEN rast1ulx := rast2ulx; rast1uly := rast2uly; rast1width := rast2width; rast1height := rast2height; rast1scalex := rast2scalex; rast1scaley := rast2scaley; rast1skewx := rast2skewx; rast1skewy := rast2skewy; rast1srid := rast2srid; END IF; -- Check if the second raster is NULL or empty IF rast2 IS NULL OR ST_IsEmpty(rast2) THEN rast2ulx := rast1ulx; rast2uly := rast1uly; rast2width := rast1width; rast2height := rast1height; rast2scalex := rast1scalex; rast2scaley := rast1scaley; rast2skewx := rast1skewx; rast2skewy := rast1skewy; rast2srid := rast1srid; END IF; -- Check for SRID IF rast1srid != rast2srid THEN RAISE EXCEPTION 'ST_MapAlgebra: Provided raster with different SRID. Aborting'; END IF; newsrid := rast1srid; -- Check for alignment. (Rotation problem here) IF NOT ST_SameAlignment(rast1ulx, rast1uly, rast1scalex, rast1scaley, rast1skewx, rast1skewy, rast2ulx, rast2uly, rast2scalex, rast2scaley, rast2skewx, rast2skewy) THEN -- For now print an error message, but a more robust implementation should resample the second raster to the alignment of the first raster. RAISE EXCEPTION 'ST_MapAlgebra: Provided raster do not have the same alignment. Aborting'; END IF; -- Set new pixel size and skew. We set it to the rast1 scale and skew -- since both rasters are aligned and thus have the same scale and skew newscalex := rast1scalex; newscaley := rast1scaley; newskewx := rast1skewx; newskewy := rast1skewy; --rastoffset is the offset of a raster in relatively to the first raster rast2offsetx1 := -st_world2rastercoordx(rast2, rast1ulx, rast1uly) + 1; rast2offsety1 := -st_world2rastercoordy(rast2, rast1ulx, rast1uly) + 1; rast2offsetx2 := rast2offsetx1 + rast2width - 1; rast2offsety2 := rast2offsety1 + rast2height - 1; -- Compute x and y relative index of master and slave according to the extent expression (FIRST, SECOND, INTERSECTION or UNION) IF extentexpr IS NULL OR upper(extentexpr) = 'FIRST' THEN -- Check if rast1 is NULL IF rast1 IS NULL THEN RAISE NOTICE 'ST_MapAlgebra: FIRST raster is NULL. Returning NULL'; RETURN NULL; END IF; -- Check if rast1 is empty IF ST_IsEmpty(rast1) THEN RAISE NOTICE 'ST_MapAlgebra: FIRST raster is empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, newsrid); END IF; -- Check if rast1 has the required band IF ST_HasNoBand(rast1, band1) THEN RAISE NOTICE 'ST_MapAlgebra: FIRST raster has no band. Returning a raster without band'; RETURN ST_MakeEmptyRaster(rast1width, rast1height, rast1ulx, rast1uly, rast1scalex, rast1scaley, rast1skewx, rast1skewy, rast1srid); END IF; newulx := rast1ulx; newuly := rast1uly; newwidth := rast1width; newheight := rast1height; rast1offsetx := 0; rast1offsety := 0; ELSIF upper(extentexpr) = 'SECOND' THEN -- Check if rast2 is NULL IF rast2 IS NULL THEN RAISE NOTICE 'ST_MapAlgebra: SECOND raster is NULL. Returning NULL'; RETURN NULL; END IF; -- Check if rast2 is empty IF ST_IsEmpty(rast2) THEN RAISE NOTICE 'ST_MapAlgebra: SECOND raster is empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, newsrid); END IF; -- Check if rast2 has the required band IF ST_HasNoBand(rast2, band2) THEN RAISE NOTICE 'ST_MapAlgebra: SECOND raster has no band. Returning an empty raster'; RETURN ST_MakeEmptyRaster(rast2width, rast2height, rast2ulx, rast2uly, rast2scalex, rast2scaley, rast2skewx, rast2skewy, rast2srid); END IF; newulx := rast2ulx; newuly := rast2uly; newwidth := rast2width; newheight := rast2height; rast1offsetx := -rast2offsetx1; rast1offsety := -rast2offsety1; rast2offsetx1 := 0; rast2offsety1 := 0; ELSIF upper(extentexpr) = 'INTERSECTION' THEN -- Check if the intersection is empty. IF rast2offsetx2 < 0 OR rast2offsetx1 > (rast1width - 1) OR rast2offsety2 < 0 OR rast2offsety1 > (rast1height - 1) OR rast1 IS NULL OR ST_IsEmpty(rast1) OR rast2 IS NULL OR ST_IsEmpty(rast2) THEN RAISE NOTICE 'ST_MapAlgebra: INTERSECTION of provided rasters is empty. Returning an empty raster'; RETURN ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0, newsrid); END IF; --Determine the new raster upper left x offset newoffsetx1 := 0; IF rast2offsetx1 > 0 THEN newoffsetx1 := rast2offsetx1; END IF; --Determine the new raster upper left y offset newoffsety1 := 0; IF rast2offsety1 > 0 THEN newoffsety1 := rast2offsety1; END IF; --Determine the new raster lower right x offset newoffsetx2 := rast1width - 1; IF rast2offsetx2 < rast1width THEN newoffsetx2 := rast2offsetx2; END IF; --Determine the new raster lower right y offset newoffsety2 := rast1height - 1; IF rast2offsety2 < rast1height THEN newoffsety2 := rast2offsety2; END IF; -- Compute the new ulx and uly newulx := st_raster2worldcoordx(rast1, newoffsetx1 + 1, newoffsety1 + 1); newuly := st_raster2worldcoordy(rast1, newoffsetx1 + 1, newoffsety1 + 1); newwidth := newoffsetx2 - newoffsetx1 + 1; newheight := newoffsety2 - newoffsety1 + 1; -- Compute the master offsets rast1offsetx := -st_world2rastercoordx(rast1, newulx, newuly) + 1; rast1offsety := -st_world2rastercoordy(rast1, newulx, newuly) + 1; -- Recompute the slave offsets rast2offsetx1 := -st_world2rastercoordx(rast2, newulx, newuly) + 1; rast2offsety1 := -st_world2rastercoordy(rast2, newulx, newuly) + 1; ELSIF upper(extentexpr) = 'UNION' THEN IF rast1 IS NULL OR ST_IsEmpty(rast1) THEN newulx := rast2ulx; newuly := rast2uly; newwidth := rast2width; newheight := rast2height; rast1offsetx := 0; rast1offsety := 0; rast2offsetx1 := 0; rast2offsety1 := 0; ELSIF rast2 IS NULL OR ST_IsEmpty(rast2) THEN newulx := rast1ulx; newuly := rast1uly; newwidth := rast1width; newheight := rast1height; rast1offsetx := 0; rast1offsety := 0; rast2offsetx1 := 0; rast2offsety1 := 0; ELSE --Determine the new raster upper left x offset newoffsetx1 := 0; IF rast2offsetx1 < 0 THEN newoffsetx1 := rast2offsetx1; END IF; --Determine the new raster upper left y offset newoffsety1 := 0; IF rast2offsety1 < 0 THEN newoffsety1 := rast2offsety1; END IF; --Determine the new raster lower right x offset newoffsetx2 := rast1width - 1; IF rast2offsetx2 >= rast1width THEN newoffsetx2 := rast2offsetx2; END IF; --Determine the new raster lower right y offset newoffsety2 := rast1height - 1; IF rast2offsety2 >= rast1height THEN newoffsety2 := rast2offsety2; END IF; -- Compute the new ulx and uly newulx := st_raster2worldcoordx(rast1, newoffsetx1 + 1, newoffsety1 + 1); newuly := st_raster2worldcoordy(rast1, newoffsetx1 + 1, newoffsety1 + 1); newwidth := newoffsetx2 - newoffsetx1 + 1; newheight := newoffsety2 - newoffsety1 + 1; -- Compute the first raster offsets rast1offsetx := -st_world2rastercoordx(rast1, newulx, newuly) + 1; rast1offsety := -st_world2rastercoordy(rast1, newulx, newuly) + 1; -- Recompute the second raster offsets rast2offsetx1 := -st_world2rastercoordx(rast2, newulx, newuly) + 1; rast2offsety1 := -st_world2rastercoordy(rast2, newulx, newuly) + 1; END IF; ELSE RAISE EXCEPTION 'ST_MapAlgebra: Unhandled extent expression "%". Only MASTER, INTERSECTION and UNION are accepted. Aborting.', upper(extentexpr); END IF; -- Check if both rasters do not have the specified band. IF ST_HasNoband(rast1, band1) AND ST_HasNoband(rast2, band2) THEN RAISE NOTICE 'ST_MapAlgebra: Both raster do not have the specified band. Returning a no band raster with the correct extent'; RETURN ST_MakeEmptyRaster(newwidth, newheight, newulx, newuly, newscalex, newscaley, newskewx, newskewy, newsrid); END IF; -- Check newpixeltype newpixeltype := pixeltype; IF newpixeltype NOTNULL AND newpixeltype != '1BB' AND newpixeltype != '2BUI' AND newpixeltype != '4BUI' AND newpixeltype != '8BSI' AND newpixeltype != '8BUI' AND newpixeltype != '16BSI' AND newpixeltype != '16BUI' AND newpixeltype != '32BSI' AND newpixeltype != '32BUI' AND newpixeltype != '32BF' AND newpixeltype != '64BF' THEN RAISE EXCEPTION 'ST_MapAlgebra: Invalid pixeltype "%". Aborting.', newpixeltype; END IF; -- If no newpixeltype was provided, get it from the provided rasters. IF newpixeltype IS NULL THEN IF (upper(extentexpr) = 'SECOND' AND NOT ST_HasNoBand(rast2, band2)) OR ST_HasNoBand(rast1, band1) THEN newpixeltype := ST_BandPixelType(rast2, band2); ELSE newpixeltype := ST_BandPixelType(rast1, band1); END IF; END IF; -- Get the nodata value for first raster IF NOT ST_HasNoBand(rast1, band1) AND NOT ST_BandNodataValue(rast1, band1) IS NULL THEN rast1nodataval := ST_BandNodatavalue(rast1, band1); ELSE rast1nodataval := NULL; END IF; -- Get the nodata value for second raster IF NOT ST_HasNoBand(rast2, band2) AND NOT ST_BandNodatavalue(rast2, band2) IS NULL THEN rast2nodataval := ST_BandNodatavalue(rast2, band2); ELSE rast2nodataval := NULL; END IF; -- Determine new notadavalue IF (upper(extentexpr) = 'SECOND' AND NOT rast2nodataval IS NULL) THEN newnodatavalue := rast2nodataval; ELSEIF NOT rast1nodataval IS NULL THEN newnodatavalue := rast1nodataval; ELSEIF NOT rast2nodataval IS NULL THEN newnodatavalue := rast2nodataval; ELSE RAISE NOTICE 'ST_MapAlgebra: Both source rasters do not have a nodata value, nodata value for new raster set to the minimum value possible'; newnodatavalue := ST_MinPossibleValue(newrast); END IF; ------------------------------------------------------------------- --Create the raster receiving all the computed values. Initialize it to the new nodatavalue. newrast := ST_AddBand(ST_MakeEmptyRaster(newwidth, newheight, newulx, newuly, newscalex, newscaley, newskewx, newskewy, newsrid), newpixeltype, newnodatavalue, newnodatavalue); ------------------------------------------------------------------- -- If one of the two raster is NULL, empty, do not have the requested band or is only nodata values -- and there is no replacement value for those missing values -- and this raster IS involved in the expression -- return NOW with the nodata band raster. --IF (rast1 IS NULL OR ST_IsEmpty(rast1) OR ST_HasNoBand(rast1, band1) OR ST_BandIsNoData(rast1, band1)) AND nodatavalrepl IS NULL AND position('RAST1' in upper(expression)) != 0 THEN -- RETURN newrast; --END IF; --IF (rast2 IS NULL OR ST_IsEmpty(rast2) OR ST_HasNoBand(rast2, band2) OR ST_BandIsNoData(rast2, band2)) AND nodatavalrepl IS NULL AND position('RAST2' in upper(expression)) != 0 THEN -- RETURN newrast; --END IF; -- There is place for optimization here when doing a UNION we don't want to iterate over the empty space. FOR x IN 1..newwidth LOOP FOR y IN 1..newheight LOOP r1 := ST_Value(rast1, band1, x - rast1offsetx, y - rast1offsety); r2 := ST_Value(rast2, band2, x - rast2offsetx1, y - rast2offsety1); -- Check if both values are outside the extent or nodata values IF (r1 IS NULL OR r1 = rast1nodataval) AND (r2 IS NULL OR r2 = rast1nodataval) THEN IF nodatanodataexpr IS NULL THEN newval := newnodatavalue; ELSE EXECUTE 'SELECT ' || nodatanodataexpr INTO newval; END IF; ELSIF r1 IS NULL OR r1 = rast1nodataval THEN IF nodata1expr IS NULL THEN newval := newnodatavalue; ELSE newexpr := replace('SELECT ' || upper(nodata1expr), 'RAST2'::text, r2::text); EXECUTE newexpr INTO newval; END IF; ELSIF r2 IS NULL OR r2 = rast2nodataval THEN IF nodata2expr IS NULL THEN newval := newnodatavalue; ELSE newexpr := replace('SELECT ' || upper(nodata2expr), 'RAST1'::text, r1::text); EXECUTE newexpr INTO newval; END IF; ELSE newexpr := replace('SELECT ' || upper(expression), 'RAST1'::text, r1::text); newexpr := replace(newexpr, 'RAST2'::text, r2::text); --RAISE NOTICE '222 - %', newexpr; EXECUTE newexpr INTO newval; --RAISE NOTICE '333 - %', newval; END IF; IF newval IS NULL THEN newval := newnodatavalue; END IF; newrast = ST_SetValue(newrast, 1, x, y, newval); END LOOP; END LOOP; RETURN newrast; END; $$ LANGUAGE 'plpgsql'; -------------------------------------------------------------------- -- ST_MapAlgebra (two raster version) variants -------------------------------------------------------------------- -- Variant 5 CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, rast2 raster, expression text, pixeltype text, extentexpr text, nodata1expr text, nodata2expr text, nodatanodataexpr text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, 1, $2, 1, $3, $4, $5, $6, $7, $8)' LANGUAGE 'SQL' IMMUTABLE; -- Variant 6 CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, rast2 raster, expression text, pixeltype text, extentexpr text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, 1, $2, 1, $3, $4, $5, NULL, NULL, NULL)' LANGUAGE 'SQL' IMMUTABLE; -- Variant 7 CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, rast2 raster, expression text, pixeltype text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, 1, $2, 1, $3, $4, NULL, NULL, NULL, NULL)' LANGUAGE 'SQL' IMMUTABLE; -- Variant 8 CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, rast2 raster, expression text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, 1, $2, 1, $3, NULL, NULL, NULL, NULL, NULL)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Variant 10 --DROP FUNCTION ST_MapAlgebra(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text, extentexpr text, rastnodatavalrepl float8); CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text, extentexpr text, nodataexpr text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, $2, $3, $4, $5, $6, $7, $8, $8, $8)' LANGUAGE 'SQL' IMMUTABLE; -- Variant 11 CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text, extentexpr text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, $2, $3, $4, $5, $6, $7, NULL, NULL, NULL)' LANGUAGE 'SQL' IMMUTABLE; -- Variant 12 CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text, pixeltype text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, $2, $3, $4, $5, $6, NULL, NULL, NULL, NULL)' LANGUAGE 'SQL' IMMUTABLE; -- Variant 13 CREATE OR REPLACE FUNCTION ST_MapAlgebra(rast1 raster, band1 integer, rast2 raster, band2 integer, expression text) RETURNS raster AS 'SELECT ST_MapAlgebra($1, $2, $3, $4, $5, NULL, NULL, NULL, NULL, NULL)' LANGUAGE 'SQL' IMMUTABLE; --test MapAlgebra with NULL --SELECT ST_MapAlgebra(NULL, 1, ST_TestRaster(2, 0), 1, 'rast2', NULL, 'UNION', 0); --SELECT AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(NULL, 1, ST_TestRaster(2, 0), 1, 'rast2', NULL, 'UNION', 0), 1) rast) foo --SELECT ST_MapAlgebra(NULL, 1, NULL, 1, 'rast2', NULL, 'UNION', 0); --Test rasters CREATE OR REPLACE FUNCTION ST_TestRaster(ulx float8, uly float8, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(3, 3, ulx, uly, 1, 1, 0, 0, -1), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION ST_TestRotatedRaster(ulx float8, uly float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(20, 20, ulx, uly, 1, -1, 0.2, 0.2, -1), '32BSI', 1, -1); END; $$ LANGUAGE 'plpgsql'; -- Overlay operations on two raster implemented with the two raster version of ST_MapAlgebra -- Note that every time an expression resume to 'rast1' or 'rast2' you can optimize the value setting memcpy the pixel values. -- First display the two test rasters used in the following examples in OpenJump --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_TestRaster(0, 0, 1)) gv) foo --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_TestRaster(1, 1, 3)) gv) foo -- 1) ST_Intersection and ST_Clip --SELECT ST_MapAlgebra(rast1, rast2, 'rast1', '32BF', 'INTERSECTION') --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo -- Display in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(rast1, rast2, 'rast1', '32BF', 'INTERSECTION')) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- 2) ST_Intersection returning a two band raster --SELECT ST_AddBand(ST_MapAlgebra(rast1, rast2, 'rast1', '32BF', 'INTERSECTION'), ST_MapAlgebra(rast1, rast2, 'rast2', '32BF', 'INTERSECTION')) --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo -- Display band 1 in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_AddBand(ST_MapAlgebra(rast1, rast2, 'rast1', '32BF', 'INTERSECTION'), ST_MapAlgebra(rast1, rast2, 'rast2', '32BF', 'INTERSECTION'))) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- Display band 2 in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_AddBand(ST_MapAlgebra(rast1, rast2, 'rast1', '32BF', 'INTERSECTION'), ST_MapAlgebra(rast1, rast2, 'rast2', '32BF', 'INTERSECTION')), 2) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- 3) ST_Union --SELECT ST_MapAlgebra(rast1, rast2, '(rast1 + rast2)/2::numeric', '32BF', 'UNION', 'rast2', 'rast1', NULL) --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo -- Display in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(rast1, rast2, '(rast1 + rast2)/2::numeric', '32BF', 'UNION', 'rast2', 'rast1', NULL)) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- 4) ST_Collect --SELECT ST_MapAlgebra(rast1, rast2, 'rast2', '32BF', 'UNION', 'rast2', 'rast1', NULL) --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo -- Display in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(rast1, rast2, 'rast2', '32BF', 'UNION', 'rast2', 'rast1', NULL)) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- 5) ST_Difference making a mere geometric difference --SELECT ST_MapAlgebra(rast1, rast2, 'CASE WHEN NOT rast2 IS NULL THEN NULL ELSE rast1 END', '32BF', 'FIRST', NULL, 'rast1', NULL) --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo -- Display in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(rast1, rast2, 'CASE WHEN NOT rast2 IS NULL THEN NULL ELSE rast1 END', '32BF', 'FIRST', NULL, 'rast1', NULL)) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- 6) ST_Difference making an arithmetic difference --SELECT ST_MapAlgebra(rast1, rast2, 'rast1 - rast2', '32BF', 'FIRST', NULL, 'rast1', NULL) --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo -- Display in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(rast1, rast2, 'rast1 - rast2', '32BF', 'FIRST', NULL, 'rast1', NULL)) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- 7) ST_SymDifference making a mere geometric difference (commutative) --SELECT ST_MapAlgebra(rast1, rast2, 'NULL', '32BF', 'UNION', 'rast2', 'rast1', NULL) --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo -- Display first commutation in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(rast1, rast2, 'NULL', '32BF', 'UNION', 'rast2', 'rast1', NULL)) gv -- FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 3) rast2) foo) foo2 -- Display second commutation in OpenJump. --SELECT (gv).val, ST_AsBinary((gv).geom) --FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(rast1, rast2, 'NULL', '32BF', 'UNION', 'rast2', 'rast1', NULL)) gv -- FROM (SELECT ST_TestRaster(1, 1, 3) rast1, ST_TestRaster(0, 0, 1) rast2) foo) foo2 -- 8) ST_SymDifference making an arithmetic difference (not commutative) --Commutation 1 --SELECT ST_MapAlgebra(rast1, rast2, 'rast1 - rast2', '32BF', 'UNION', 'rast2', 'rast1', NULL) --FROM (SELECT ST_TestRaster(0, 0, 1) rast1, ST_TestRaster(1, 1, 2) rast2) foo --Commutation 2 --SELECT ST_MapAlgebra(rast1, rast2, 'rast1 - rast2', '32BF', 'UNION', 'rast2', 'rast1', NULL) --FROM (SELECT ST_TestRaster(1, 1, 2) rast1, ST_TestRaster(0, 0, 1) rast2) foo -- Other tests -- UNION -- SELECT ST_Value(rast, 1, 1) AS "1, 1", -- ST_Value(rast, 2, 1) AS "2, 1", -- ST_Value(rast, 3, 1) AS "3, 1", -- ST_Value(rast, 1, 2) AS "1, 2", -- ST_Value(rast, 2, 2) AS "2, 2", -- ST_Value(rast, 3, 2) AS "3, 2", -- ST_BandPixelType(rast, 1), -- ST_Width(rast), -- ST_Height(rast) -- FROM (SELECT ST_MapAlgebra(ST_TestRaster(0, 0, 1), 1, ST_TestRaster(1, 0, 1), 1, 'rast1 + rast2 + 2*rast2'::text, '8BSI'::text, 'Union'::text, '0'::text) AS rast) foo -- INTERSECTION --SELECT ST_IsEmpty(rast), -- ST_Value(rast, 1, 1) AS "1, 1", -- ST_Value(rast, 1, 2) AS "1, 2", -- ST_Value(rast, 2, 1) AS "2, 1", -- ST_Value(rast, 2, 2) AS "2, 2", -- ST_BandPixelType(rast, 1), -- ST_Width(rast), -- ST_Height(rast) --FROM (SELECT ST_MapAlgebra(ST_TestRaster(0, 0, 1), 1, ST_TestRaster(1, 0, 1), 1, '(rast1 + rast2)/3::float8', '64BF', 'INTERSECTION', '0'::text) AS rast) foo -- FIRST -- Doesn't work... --SELECT ST_Value(rast, 1, 1), -- ST_Value(rast, 1, 2), -- ST_Value(rast, 2, 1), -- ST_Value(rast, 2, 2), -- ST_BandPixelType(rast, 1), -- ST_Width(rast), -- ST_Height(rast) --FROM (SELECT ST_MapAlgebra(ST_TestRaster(0, 0, 1), 1, ST_TestRaster(1, 1, 1), 1, 'rast1 + rast2 + 2*rast2 + toto()', '8BSI', 'FIRST', NULL) AS rast) foo -- SECOND -- Doesn't work... --SELECT ST_Value(rast, 1, 1), -- ST_Value(rast, 1, 2), -- ST_Value(rast, 2, 1), -- ST_Value(rast, 2, 2), -- ST_BandPixelType(rast, 1), -- ST_Width(rast), -- ST_Height(rast) --FROM (SELECT ST_MapAlgebra(ST_TestRaster(0, 0, 1), 1, ST_TestRaster(1, 1, 1), 1, 'rast1 + rast2 + 2*rast2 + toto()', '8BSI', 'SECOND', NULL) AS rast) foo -- INTERSECTION with rotated. -- Doesn't work... --SELECT ST_IsEmpty(rast), -- ST_Value(rast, 1, 1) AS "1, 1", -- ST_Value(rast, 1, 2) AS "1, 2", -- ST_Value(rast, 2, 1) AS "2, 1", -- ST_Value(rast, 2, 2) AS "2, 2", -- ST_BandPixelType(rast, 1), -- ST_Width(rast), -- ST_Height(rast) --FROM (SELECT ST_MapAlgebra(ST_TestRotatedRaster(0, 0), 1, ST_TestRotatedRaster(1.2, -0.8), 1, '(rast1 + rast2)/3::float8', '64BF', 'Union', 0) AS rast) foo --SELECT AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_TestRotatedRaster(0, 0), 1) rast) foo --SELECT AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_TestRotatedRaster(1.2, -0.8), 1) rast) foo --SELECT AsBinary((rast).geom), (rast).val FROM (SELECT ST_PixelAsPolygons(ST_MapAlgebra(ST_TestRotatedRaster(0, 0), 1, ST_TestRotatedRaster(1.2, -0.8), 1, '(rast1 + rast2)/3::float8', '64BF', 'Union', 0), 1) rast) foo --SELECT ST_IsEmpty(rast), -- ST_Value(rast, 1, 1) AS "1, 1", -- ST_Value(rast, 1, 2) AS "1, 2", -- ST_Value(rast, 2, 1) AS "2, 1", -- ST_Value(rast, 2, 2) AS "2, 2", -- ST_BandPixelType(rast, 1), -- ST_Width(rast), -- ST_Height(rast) --FROM (SELECT ST_MapAlgebra(ST_TestRaster(0, 0), 1, ST_TestRaster(1, 1), 1, '(rast1 + rast2)/2', '64BF', 'Union', 0) AS rast) foo --SELECT ST_IsEmpty(rast), -- ST_Value(rast, 1, 1) AS "1, 1", -- ST_Value(rast, 1, 2) AS "1, 2", -- ST_Value(rast, 2, 1) AS "2, 1", -- ST_Value(rast, 2, 2) AS "2, 2", -- ST_BandPixelType(rast, 1), -- ST_Width(rast), -- ST_Height(rast) --FROM (SELECT ST_MapAlgebra(ST_TestRaster(0, 0), 1, ST_TestRaster(1, 1), 1, 'CASE WHEN rast1 IS NULL THEN rast2 WHEN rast2 IS NULL THEN rast1 ELSE (rast1 + rast2)/2 END', '64BF', 'Union', 0) AS rast) foo ����������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_areaweightedsummarystats.sql����������������������0000644�0000000�0000000�00000021325�11722777314�026624� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--------------------------------------------------------------------- -- ST_AreaWeightedSummaryStats AGGREGATE -- Compute statistics of a value weighted by the area of the corresponding geometry. -- Specially written to be used with ST_Intersection(raster, geometry) -- -- Exemple -- SELECT gt.id, -- (aws).count, -- (aws).distinctcount, -- (aws).geom, -- (aws).totalarea, -- (aws).meanarea, -- (aws).totalperimeter, -- (aws).meanperimeter, -- (aws).weightedsum, -- (aws).weightedmean, -- (aws).maxareavalue, -- (aws).minareavalue, -- (aws).maxcombinedareavalue, -- (aws).mincombinedareavalue, -- (aws).sum, -- (aws).mean, -- (aws).max, -- (aws).min -- FROM (SELECT ST_AreaWeightedSummaryStats(gv) aws -- FROM (SELECT ST_Intersection(rt.rast, gt.geom) gv -- FROM rasttable rt, geomtable gt -- WHERE ST_Intersects(rt.rast, gt.geom) -- ) foo -- GROUP BY gt.id -- ) foo2 --------------------------------------------------------------------- --DROP TYPE arealweightedstats CASCADE; CREATE TYPE arealweightedstats AS ( count int, distinctcount int, geom geometry, totalarea double precision, meanarea double precision, totalperimeter double precision, meanperimeter double precision, weightedsum double precision, weightedmean double precision, maxareavalue double precision, minareavalue double precision, maxcombinedareavalue double precision, mincombinedareavalue double precision, sum double precision, mean double precision, max double precision, min double precision ); -- DROP TYPE arealweightedstatsstate CASCADE; CREATE TYPE arealweightedstatsstate AS ( count int, distinctvalues double precision[], unionedgeom geometry, totalarea double precision, totalperimeter double precision, weightedsum double precision, maxareavalue double precision[], minareavalue double precision[], combinedweightedareas double precision[], sum double precision, max double precision, min double precision ); --------------------------------------------------------------------- -- geomval_arealweightedstate -- State function used by the ST_AreaWeightedSummaryStats aggregate CREATE OR REPLACE FUNCTION geomval_arealweightedstate(aws arealweightedstatsstate, gv geomval) RETURNS arealweightedstatsstate AS $$ DECLARE i int; ret arealweightedstatsstate; newcombinedweightedareas double precision[] := ($1).combinedweightedareas; newgeom geometry := ($2).geom; geomtype text := GeometryType(($2).geom); BEGIN IF geomtype = 'GEOMETRYCOLLECTION' THEN newgeom := ST_CollectionExtract(newgeom, 3); END IF; IF newgeom IS NULL OR ST_IsEmpty(newgeom) OR geomtype = 'POINT' OR geomtype = 'LINESTRING' OR geomtype = 'MULTIPOINT' OR geomtype = 'MULTILINESTRING' THEN ret := aws; ELSEIF $1 IS NULL THEN ret := (1, ARRAY[($2).val], newgeom, ST_Area(newgeom), ST_Perimeter(newgeom), ($2).val * ST_Area(newgeom), ARRAY[ST_Area(newgeom), ($2).val], ARRAY[ST_Area(newgeom), ($2).val], ARRAY[ST_Area(newgeom)], ($2).val, ($2).val, ($2).val )::arealweightedstatsstate; ELSE -- Search for the new value in the array of distinct values SELECT n FROM generate_series(1, array_length(($1).distinctvalues, 1)) n WHERE (($1).distinctvalues)[n] = ($2).val INTO i; RAISE NOTICE 'i=% ',i; -- If the value already exists, increment the corresponding area with the new area IF NOT i IS NULL THEN newcombinedweightedareas[i] := newcombinedweightedareas[i] + ST_Area(newgeom); END IF; ret := (($1).count + 1, CASE WHEN i IS NULL THEN array_append(($1).distinctvalues, ($2).val) ELSE ($1).distinctvalues END, ST_Union(($1).unionedgeom, newgeom), ($1).totalarea + ST_Area(newgeom), ($1).totalperimeter + ST_Perimeter(newgeom), ($1).weightedsum + ($2).val * ST_Area(newgeom), CASE WHEN ST_Area(newgeom) > (($1).maxareavalue)[1] THEN ARRAY[ST_Area(newgeom), ($2).val] ELSE ($1).maxareavalue END, CASE WHEN ST_Area(newgeom) < (($1).minareavalue)[1] THEN ARRAY[ST_Area(newgeom), ($2).val] ELSE ($1).minareavalue END, CASE WHEN i IS NULL THEN array_append(($1).combinedweightedareas, ST_Area(newgeom)) ELSE ($1).combinedweightedareas END, ($1).sum + ($2).val, greatest(($1).max, ($2).val), least(($1).min, ($2).val) )::arealweightedstatsstate; END IF; RETURN ret; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION geomval_arealweightedstate(aws arealweightedstatsstate, geom geometry, val double precision) RETURNS arealweightedstatsstate AS $$ SELECT geomval_arealweightedstate($1, ($2, $3)::geomval); $$ LANGUAGE 'SQL'; --------------------------------------------------------------------- -- geomval_arealweightedfinal -- Final function used by the ST_AreaWeightedSummaryStats aggregate CREATE OR REPLACE FUNCTION geomval_arealweightedfinal(aws arealweightedstatsstate) RETURNS arealweightedstats AS $$ DECLARE a RECORD; maxarea double precision = 0.0; minarea double precision = (($1).combinedweightedareas)[1]; imax int := 1; imin int := 1; ret arealweightedstats; BEGIN -- Search for the max and the min areas in the array of all distinct values FOR a IN SELECT n, (($1).combinedweightedareas)[n] warea FROM generate_series(1, array_length(($1).combinedweightedareas, 1)) n LOOP IF a.warea > maxarea THEN imax := a.n; maxarea = a.warea; END IF; IF a.warea < minarea THEN imin := a.n; minarea = a.warea; END IF; END LOOP; ret := (($1).count, array_length(($1).distinctvalues, 1), ($1).unionedgeom, ($1).totalarea, ($1).totalarea / ($1).count, ($1).totalperimeter, ($1).totalperimeter / ($1).count, ($1).weightedsum, ($1).weightedsum / ($1).totalarea, (($1).maxareavalue)[2], (($1).minareavalue)[2], (($1).distinctvalues)[imax], (($1).distinctvalues)[imin], ($1).sum, ($1).sum / ($1).count, ($1).max, ($1).min )::arealweightedstats; RETURN ret; END; $$ LANGUAGE 'plpgsql'; --------------------------------------------------------------------- -- ST_AreaWeightedSummaryStats AGGREGATE --------------------------------------------------------------------- CREATE AGGREGATE ST_AreaWeightedSummaryStats(geomval) ( SFUNC=geomval_arealweightedstate, STYPE=arealweightedstatsstate, FINALFUNC=geomval_arealweightedfinal ); --------------------------------------------------------------------- -- ST_AreaWeightedSummaryStats AGGREGATE --------------------------------------------------------------------- CREATE AGGREGATE ST_AreaWeightedSummaryStats(geometry, double precision) ( SFUNC=geomval_arealweightedstate, STYPE=arealweightedstatsstate, FINALFUNC=geomval_arealweightedfinal ); SELECT id, (aws).count, (aws).distinctcount, (aws).geom, (aws).totalarea, (aws).meanarea, (aws).totalperimeter, (aws).meanperimeter, (aws).weightedsum, (aws).weightedmean, (aws).maxareavalue, (aws).minareavalue, (aws).maxcombinedareavalue, (aws).mincombinedareavalue, (aws).sum, (aws).mean, (aws).max, (aws).min FROM (SELECT ST_AreaWeightedSummaryStats((geom, weight)::geomval) as aws, id FROM (SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((0 0,0 10, 10 10, 10 0, 0 0))') as geom, 'a' as id, 100 as weight UNION ALL SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((12 0,12 1, 13 1, 13 0, 12 0))') as geom, 'a' as id, 1 as weight UNION ALL SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((10 0, 10 2, 12 2, 12 0, 10 0))') as geom, 'b' as id, 4 as weight ) foo GROUP BY id ) foo2 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_pixelaspoints.sql���������������������������������0000644�0000000�0000000�00000003157�11722777314�024403� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������----------------------------------------------------------------------- -- Complex type geomvalxy for returning the geometry, the value, the x coordinate and the y coordinate of a pixel ----------------------------------------------------------------------- CREATE TYPE geomvalxy AS ( geom geometry, val double precision, x int, y int ); ----------------------------------------------------------------------- -- ST_PixelAsPoints -- Return all the pixels of a raster as a record composed of a point geometry, a value, a x and a y raster coordinate. -- Should be called like this: -- SELECT (gv).geom, (gv).val, (gv).x, (gv).y FROM (SELECT ST_PixelAsPoints(rast) gv FROM mytable) foo ----------------------------------------------------------------------- DROP FUNCTION IF EXISTS ST_PixelAsPoints(rast raster, band integer); CREATE OR REPLACE FUNCTION ST_PixelAsPoints(rast raster, band integer) RETURNS SETOF geomvalxy AS $$ DECLARE rast alias for $1; w integer; h integer; x integer; y integer; result geomvalxy; BEGIN SELECT st_width(rast), st_height(rast) INTO w, h; FOR x IN 1..w LOOP FOR y IN 1..h LOOP SELECT ST_Centroid(ST_PixelAsPolygon(rast, x, y)), ST_Value(rast, band, x, y), x, y INTO result; RETURN NEXT result; END LOOP; END LOOP; RETURN; END; $$ LANGUAGE 'plpgsql'; DROP FUNCTION IF EXISTS ST_PixelAsPoints(rast raster); CREATE FUNCTION ST_PixelAsPoints(raster) RETURNS SETOF geomvalxy AS $$ SELECT ST_PixelAsPoints($1, 1); $$ LANGUAGE SQL;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/plpgsql/st_summarystatsagg.sql�������������������������������0000644�0000000�0000000�00000007257�12023431463�024724� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--------------------------------------------------------------------- -- ST_SummaryStatsAgg AGGREGATE -- Compute summary statistics for an aggregation of raster. -- -- Exemple -- SELECT (ss).count, -- (ss).sum, -- (ss).mean, -- (ss).min, -- (ss).max -- FROM (SELECT ST_SummaryStatsAgg(gv) ss -- FROM (SELECT ST_Clip(rt.rast, gt.geom) gv -- FROM rasttable rt, geomtable gt -- WHERE ST_Intersects(rt.rast, gt.geom) -- ) foo -- GROUP BY gt.id -- ) foo2 --------------------------------------------------------------------- -- raster_summarystatsstate -- State function used by the ST_SummaryStatsAgg aggregate CREATE OR REPLACE FUNCTION raster_summarystatsstate(ss summarystats, rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1) RETURNS summarystats AS $$ DECLARE newstats summarystats; ret summarystats; BEGIN IF rast IS NULL THEN RETURN ss; END IF; newstats := _ST_SummaryStats(rast, nband, exclude_nodata_value, sample_percent); IF $1 IS NULL THEN ret := (newstats.count, newstats.sum, null, null, newstats.min, newstats.max)::summarystats; ELSE ret := (ss.count + newstats.count, COALESCE(ss.sum,0) + COALESCE(newstats.sum, 0), null, null, least(ss.min, newstats.min), greatest(ss.max, newstats.max))::summarystats; END IF; RETURN ret; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION raster_summarystatsstate(ss summarystats, rast raster) RETURNS summarystats AS $$ SELECT raster_summarystatsstate($1, $2, 1, true, 1); $$ LANGUAGE 'SQL'; --------------------------------------------------------------------- -- raster_summarystatsfinal -- Final function used by the ST_SummaryStatsAgg aggregate CREATE OR REPLACE FUNCTION raster_summarystatsfinal(ss summarystats) RETURNS summarystats AS $$ DECLARE ret summarystats; BEGIN ret := (($1).count, ($1).sum, CASE WHEN ($1).count = 0 THEN null ELSE ($1).sum / ($1).count END, null, ($1).min, ($1).max )::summarystats; RETURN ret; END; $$ LANGUAGE 'plpgsql'; --------------------------------------------------------------------- -- ST_SummaryStatsAgg AGGREGATE --------------------------------------------------------------------- CREATE AGGREGATE ST_SummaryStatsAgg(raster, int, boolean, double precision) ( SFUNC=raster_summarystatsstate, STYPE=summarystats, FINALFUNC=raster_summarystatsfinal ); CREATE AGGREGATE ST_SummaryStatsAgg(raster) ( SFUNC=raster_summarystatsstate, STYPE=summarystats, FINALFUNC=raster_summarystatsfinal ); -- Test CREATE OR REPLACE FUNCTION ST_TestRaster(h integer, w integer, val float8) RETURNS raster AS $$ DECLARE BEGIN RETURN ST_AddBand(ST_MakeEmptyRaster(h, w, 0, 0, 1, 1, 0, 0, -1), '32BF', val, -1); END; $$ LANGUAGE 'plpgsql'; SELECT id, (ss).count, (ss).sum, (ss).mean, (ss).stddev, (ss).min, (ss).max FROM (SELECT ST_SummaryStatsAgg(rast) as ss, id FROM (SELECT 1 id, ST_TestRaster(2, 2, 2) rast UNION ALL SELECT 1 id, ST_TestRaster(2, 2, 4) rast UNION ALL SELECT 2 id, ST_TestRaster(2, 2, 4) rast ) foo GROUP BY id ) foo2 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/scripts/Makefile.in��������������������������������������������������0000644�0000000�0000000�00000002370�12233537203�020616� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id$ # # Copyright (c) 2011 Regents of the University of California # <bkpark@ucdavis.edu> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# RT_CORE=../rt_core RT_PG=../rt_pg all: plpgsql python plpgsql: # $(MAKE) -C plpgsql python: $(MAKE) -C python install: # $(MAKE) -C plpgsql $(MAKE) -C python uninstall: clean: # $(MAKE) -C plpgsql $@ $(MAKE) -C python $@ distclean: clean # $(MAKE) -C plpgsql $@ $(MAKE) -C python $@ rm -f Makefile ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/TODO�����������������������������������������������������������������0000644�0000000�0000000�00000000462�12107777146�015566� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Id: TODO 11096 2013-02-16 21:47:18Z dustymugs $ This is the TODO list for PostGIS Raster. Items in this TODO file should be kept brief and to the point. TODO items should only be those items that have yet to be ticketed in PostGIS trac and lack specifics. == Simple Projects == == Larger Projects == ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/loader/��������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016331� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/loader/raster2pgsql.h������������������������������������������������0000644�0000000�0000000�00000010404�12236347653�021142� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * $Id: raster2pgsql.h 12093 2013-11-06 05:12:11Z dustymugs $ * * PostGIS Raster loader * http://trac.osgeo.org/postgis/wiki/WKTRaster * * Copyright 2001-2003 Refractions Research Inc. * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2009 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * Copyright (C) 2011 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ /* For internationalization */ #ifdef ENABLE_NLS #include <libintl.h> #include <locale.h> #define _(String) gettext(String) #define PACKAGE "raster2pgsql" #else #define _(String) String #endif #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "../rt_core/rt_api.h" #define CSEQUAL(a,b) (strcmp(a,b)==0) /* max length of of "name" data type in PostgreSQL as defined in pg_config_manual.h as macro NAMEDATALEN default is 64 bytes (63 usable characters plus NULL) */ #define MAXNAMELEN 63 /* minimum and maximum overview factor */ #define MINOVFACTOR 2 #define MAXOVFACTOR 1000 /* maximum tile size based upon maximum field size as defined for PostgreSQl http://www.postgresql.org/about/ 1 GB = 1024 x 1024 x 1024 */ #define MAXTILESIZE 1073741824 #define RCSID "$Id: raster2pgsql.h 12093 2013-11-06 05:12:11Z dustymugs $" typedef struct raster_loader_config { /* raster filename */ int rt_file_count; char **rt_file; char **rt_filename; /* schema to load into */ char *schema; /* table to load into */ char *table; /* raster column name specified by user */ char *raster_column; /* add column with raster filename, 1 = yes, 0 = no (default) */ int file_column; char *file_column_name; /* overview factor */ int overview_count; int *overview; char **overview_table; /* case-sensitive of identifiers, 1 = yes, 0 = no (default) */ int quoteident; /* SRID of raster */ int srid; /* bands to extract */ int *nband; /* 1-based */ int nband_count; /* tile size */ int tile_size[2]; /* pad tiles */ int pad_tile; /* register raster as of out-of-db, 1 = yes, 0 = no (default) */ int outdb; /* type of operation, (d|a|c|p) */ char opt; /* create index, 1 = yes, 0 = no (default) */ int idx; /* maintenance statements, 1 = yes, 0 = no (default) */ int maintenance; /* set constraints */ int constraints; /* enable max extent constraint, 1 = yes (default), 0 = no */ int max_extent; /* enable regular_blocking constraint, 1 = yes, 0 = no (default) */ int regular_blocking; /* new table's tablespace */ char *tablespace; /* new index's tablespace */ char *idx_tablespace; /* flag indicating that user specified a nodata value */ int hasnodata; /* nodata value for bands with no nodata value */ double nodataval; /* skip NODATA value check for bands */ int skip_nodataval_check; /* endianness of binary output, 0 = XDR, 1 = NDR (default) */ int endian; /* version of output format */ int version; /* use a transaction, 0 = no, 1 = yes (default) */ int transaction; /* use COPY instead of INSERT */ int copy_statements; } RTLOADERCFG; typedef struct rasterinfo_t { /* SRID of raster */ int srid; /* srs of raster */ char *srs; /* width, height */ uint32_t dim[2]; /* number of bands */ int *nband; /* 1-based */ int nband_count; /* array of pixeltypes */ GDALDataType *gdalbandtype; rt_pixtype *bandtype; /* array of hasnodata flags */ int *hasnodata; /* array of nodatavals */ double *nodataval; /* geotransform matrix */ double gt[6]; /* tile size */ int tile_size[2]; } RASTERINFO; typedef struct stringbuffer_t { uint32_t length; char **line; } STRINGBUFFER; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/loader/Makefile.in���������������������������������������������������0000644�0000000�0000000�00000005514�12233537203�020400� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################################# # $Id$ # # Copyright (c) 2011 Regents of the University of California # <bkpark@ucdavis.edu> # Copyright (c) 2009 Sandro Santilli <strk@keybit.net> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # ############################################################################# # Set CFLAGS after PGXS, otherwise it will get overwritten with the PGXS # version which is not what we want. CC=@CC@ top_builddir = @top_builddir@ SHELL = @SHELL@ INSTALL = $(SHELL) ../../install-sh LIBTOOL = @LIBTOOL@ # Filenames with extension as determined by the OS RASTER2PGSQL=raster2pgsql@EXESUFFIX@ # PostgreSQL executable directory PGSQL_BINDIR=@PGSQL_BINDIR@ RT_CORE=../rt_core LIBLWGEOM_LDFLAGS=../../liblwgeom/liblwgeom.la LIBLWGEOM_CFLAGS=-I../../liblwgeom LIBGDAL_CFLAGS=@LIBGDAL_CFLAGS@ LIBGDAL_LDFLAGS=@LIBGDAL_LDFLAGS@ LIBGDAL_DEPLIBS_LDFLAGS=@LIBGDAL_DEPLIBS_LDFLAGS@ PROJ_CFLAGS=@PROJ_CPPFLAGS@ GEOS_CFLAGS=@GEOS_CPPFLAGS@ GEOS_LDFLAGS=@GEOS_LDFLAGS@ -lgeos_c RTCORE_CFLAGS=-I$(RT_CORE) RTCORE_LDFLAGS=$(RT_CORE)/librtcore.a # GetText includes and libraries GETTEXT_CFLAGS = @GETTEXT_CFLAGS@ GETTEXT_LDFLAGS = @GETTEXT_LDFLAGS@ @LIBINTL@ # iconv flags ICONV_LDFLAGS=@ICONV_LDFLAGS@ ICONV_CFLAGS=@ICONV_CFLAGS@ CFLAGS = \ @CFLAGS@ @PICFLAGS@ @WARNFLAGS@ \ $(RTCORE_CFLAGS) \ $(LIBLWGEOM_CFLAGS) \ $(PROJ_CFLAGS) \ $(LIBGDAL_CFLAGS) \ $(GEOS_CFLAGS) \ $(GETTEXT_CFLAGS) \ $(ICONV_CFLAGS) LDFLAGS = \ @LDFLAGS@ \ $(LIBLWGEOM_LDFLAGS) \ $(LIBGDAL_LDFLAGS) \ $(LIBGDAL_DEPLIBS_LDFLAGS) \ $(GEOS_LDFLAGS) \ $(GETTEXT_LDFLAGS) \ $(ICONV_LDFLAGS) \ -lm all: $(RASTER2PGSQL) raster2pgsql.o: raster2pgsql.c $(CC) $(CFLAGS) -c $< $(RASTER2PGSQL): $(RT_CORE)/librtcore.a raster2pgsql.o $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@ installdir: @mkdir -p $(DESTDIR)$(PGSQL_BINDIR) install: installdir $(LIBTOOL) --mode=install $(INSTALL) $(RASTER2PGSQL) "$(DESTDIR)$(PGSQL_BINDIR)/$(RASTER2PGSQL)" uninstall: $(LIBTOOL) --mode=uninstall $(RM) "$(DESTDIR)$(PGSQL_BINDIR)/$(RASTER2PGSQL)" $(RT_CORE)/librtcore.a: $(MAKE) -C ../rt_core clean: rm -rf .libs rm -f *.o $(RASTER2PGSQL) distclean: clean rm -f Makefile ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/raster/loader/raster2pgsql.c������������������������������������������������0000644�0000000�0000000�00000241637�12236347653�021153� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * $Id: raster2pgsql.c 12093 2013-11-06 05:12:11Z dustymugs $ * * PostGIS raster loader * http://trac.osgeo.org/postgis/wiki/WKTRaster * * Copyright 2001-2003 Refractions Research Inc. * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2009 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * Copyright (C) 2011 Regents of the University of California * <bkpark@ucdavis.edu> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "raster2pgsql.h" #include "gdal_vrt.h" #include "ogr_srs_api.h" #include <assert.h> static void loader_rt_error_handler(const char *fmt, va_list ap) { static const char *label = "ERROR: "; char newfmt[1024] = {0}; snprintf(newfmt, 1024, "%s%s\n", label, fmt); newfmt[1023] = '\0'; vfprintf(stderr, newfmt, ap); va_end(ap); } static void loader_rt_warning_handler(const char *fmt, va_list ap) { static const char *label = "WARNING: "; char newfmt[1024] = {0}; snprintf(newfmt, 1024, "%s%s\n", label, fmt); newfmt[1023] = '\0'; vfprintf(stderr, newfmt, ap); va_end(ap); } static void loader_rt_info_handler(const char *fmt, va_list ap) { static const char *label = "INFO: "; char newfmt[1024] = {0}; snprintf(newfmt, 1024, "%s%s\n", label, fmt); newfmt[1023] = '\0'; vfprintf(stderr, newfmt, ap); va_end(ap); } void rt_init_allocators(void) { rt_set_handlers( default_rt_allocator, default_rt_reallocator, default_rt_deallocator, loader_rt_error_handler, loader_rt_info_handler, loader_rt_warning_handler ); } static void raster_destroy(rt_raster raster) { uint16_t i; uint16_t nbands = rt_raster_get_num_bands(raster); for (i = 0; i < nbands; i++) { rt_band band = rt_raster_get_band(raster, i); if (band == NULL) continue; if (!rt_band_is_offline(band) && !rt_band_get_ownsdata_flag(band)) { void* mem = rt_band_get_data(band); if (mem) rtdealloc(mem); } rt_band_destroy(band); } rt_raster_destroy(raster); } static int array_range(int min, int max, int step, int **range, int *len) { int i = 0; int j = 0; step = abs(step); *len = (abs(max - min) + 1 + (step / 2)) / step; *range = rtalloc(sizeof(int) * *len); if (min < max) { for (i = min, j = 0; i <= max; i += step, j++) (*range)[j] = i; } else if (max < min) { if (step > 0) step *= -1; for (i = min, j = 0; i >= max; i += step, j++) (*range)[j] = i; } else if (min == max) { (*range)[0] = min; } else { *len = 0; *range = NULL; return 0; } return 1; } /* string replacement function taken from * http://ubuntuforums.org/showthread.php?s=aa6f015109fd7e4c7e30d2fd8b717497&t=141670&page=3 */ /* --------------------------------------------------------------------------- Name : replace - Search & replace a substring by another one. Creation : Thierry Husson, Sept 2010 Parameters : str : Big string where we search oldstr : Substring we are looking for newstr : Substring we want to replace with count : Optional pointer to int (input / output value). NULL to ignore. Input: Maximum replacements to be done. NULL or < 1 to do all. Output: Number of replacements done or -1 if not enough memory. Returns : Pointer to the new string or NULL if error. Notes : - Case sensitive - Otherwise, replace functions "strstr" by "strcasestr" - Always allocates memory for the result. --------------------------------------------------------------------------- */ static char* strreplace( const char *str, const char *oldstr, const char *newstr, int *count ) { const char *tmp = str; char *result; int found = 0; int length, reslen; int oldlen = strlen(oldstr); int newlen = strlen(newstr); int limit = (count != NULL && *count > 0) ? *count : -1; tmp = str; while ((tmp = strstr(tmp, oldstr)) != NULL && found != limit) found++, tmp += oldlen; length = strlen(str) + found * (newlen - oldlen); if ((result = (char *) rtalloc(length + 1)) == NULL) { rterror(_("strreplace: Not enough memory")); found = -1; } else { tmp = str; limit = found; /* Countdown */ reslen = 0; /* length of current result */ /* Replace each old string found with new string */ while ((limit-- > 0) && (tmp = strstr(tmp, oldstr)) != NULL) { length = (tmp - str); /* Number of chars to keep intouched */ strncpy(result + reslen, str, length); /* Original part keeped */ strcpy(result + (reslen += length), newstr); /* Insert new string */ reslen += newlen; tmp += oldlen; str = tmp; } strcpy(result + reslen, str); /* Copies last part and ending null char */ } if (count != NULL) *count = found; return result; } static char * strtolower(char * str) { int j; for (j = strlen(str) - 1; j >= 0; j--) str[j] = tolower(str[j]); return str; } /* split a string based on a delimiter */ static char** strsplit(const char *str, const char *delimiter, int *n) { char *tmp = NULL; char **rtn = NULL; char *token = NULL; *n = 0; if (!str) return NULL; /* copy str to tmp as strtok will mangle the string */ tmp = rtalloc(sizeof(char) * (strlen(str) + 1)); if (NULL == tmp) { rterror(_("strsplit: Not enough memory")); return NULL; } strcpy(tmp, str); if (!strlen(tmp) || !delimiter || !strlen(delimiter)) { *n = 1; rtn = (char **) rtalloc(*n * sizeof(char *)); if (NULL == rtn) { rterror(_("strsplit: Not enough memory")); return NULL; } rtn[0] = (char *) rtalloc(sizeof(char) * (strlen(tmp) + 1)); if (NULL == rtn[0]) { rterror(_("strsplit: Not enough memory")); return NULL; } strcpy(rtn[0], tmp); rtdealloc(tmp); return rtn; } token = strtok(tmp, delimiter); while (token != NULL) { if (*n < 1) { rtn = (char **) rtalloc(sizeof(char *)); } else { rtn = (char **) rtrealloc(rtn, (*n + 1) * sizeof(char *)); } if (NULL == rtn) { rterror(_("strsplit: Not enough memory")); return NULL; } rtn[*n] = NULL; rtn[*n] = (char *) rtalloc(sizeof(char) * (strlen(token) + 1)); if (NULL == rtn[*n]) { rterror(_("strsplit: Not enough memory")); return NULL; } strcpy(rtn[*n], token); *n = *n + 1; token = strtok(NULL, delimiter); } rtdealloc(tmp); return rtn; } static char* trim(const char *input) { char *rtn; char *ptr; uint32_t offset = 0; if (!input) return NULL; else if (!*input) return (char *) input; /* trim left */ while (isspace(*input)) input++; /* trim right */ ptr = ((char *) input) + strlen(input); while (isspace(*--ptr)) offset++; rtn = rtalloc(sizeof(char) * (strlen(input) - offset + 1)); if (NULL == rtn) { rterror(_("trim: Not enough memory")); return NULL; } strncpy(rtn, input, strlen(input) - offset); rtn[strlen(input) - offset] = '\0'; return rtn; } static char* chartrim(const char *input, char *remove) { char *rtn = NULL; char *ptr = NULL; uint32_t offset = 0; if (!input) return NULL; else if (!*input) return (char *) input; /* trim left */ while (strchr(remove, *input) != NULL) input++; /* trim right */ ptr = ((char *) input) + strlen(input); while (strchr(remove, *--ptr) != NULL) offset++; rtn = rtalloc(sizeof(char) * (strlen(input) - offset + 1)); if (NULL == rtn) { rterror(_("chartrim: Not enough memory")); return NULL; } strncpy(rtn, input, strlen(input) - offset); rtn[strlen(input) - offset] = '\0'; return rtn; } static void usage() { printf(_("RELEASE: %s GDAL_VERSION=%d (r%d)\n"), POSTGIS_LIB_VERSION, POSTGIS_GDAL_VERSION, POSTGIS_SVN_REVISION); printf(_( "USAGE: raster2pgsql [<options>] <raster>[ <raster>[ ...]] [[<schema>.]<table>]\n" " Multiple rasters can also be specified using wildcards (*,?).\n" "\n" "OPTIONS:\n" )); printf(_( " -s <srid> Set the raster's SRID. Defaults to %d. If SRID not\n" " provided or is %d, raster's metadata will be checked to\n" " determine an appropriate SRID.\n" ), SRID_UNKNOWN, SRID_UNKNOWN); printf(_( " -b <band> Index (1-based) of band to extract from raster. For more\n" " than one band index, separate with comma (,). Ranges can be\n" " defined by separating with dash (-). If unspecified, all bands\n" " of raster will be extracted.\n" )); printf(_( " -t <tile size> Cut raster into tiles to be inserted one per\n" " table row. <tile size> is expressed as WIDTHxHEIGHT.\n" " <tile size> can also be \"auto\" to allow the loader to compute\n" " an appropriate tile size using the first raster and applied to\n" " all rasters.\n" )); printf(_( " -P Pad right-most and bottom-most tiles to guarantee that all tiles\n" " have the same width and height.\n" )); printf(_( " -R Register the raster as an out-of-db (filesystem) raster. Provided\n" " raster should have absolute path to the file\n" )); printf(_( " (-d|a|c|p) These are mutually exclusive options:\n" " -d Drops the table, then recreates it and populates\n" " it with current raster data.\n" " -a Appends raster into current table, must be\n" " exactly the same table schema.\n" " -c Creates a new table and populates it, this is the\n" " default if you do not specify any options.\n" " -p Prepare mode, only creates the table.\n" )); printf(_( " -f <column> Specify the name of the raster column\n" )); printf(_( " -F Add a column with the filename of the raster.\n" )); printf(_( " -n <column> Specify the name of the filename column. Implies -F.\n" )); printf(_( " -l <overview factor> Create overview of the raster. For more than\n" " one factor, separate with comma(,). Overview table name follows\n" " the pattern o_<overview factor>_<table>. Created overview is\n" " stored in the database and is not affected by -R.\n" )); printf(_( " -q Wrap PostgreSQL identifiers in quotes.\n" )); printf(_( " -I Create a GIST spatial index on the raster column. The ANALYZE\n" " command will automatically be issued for the created index.\n" )); printf(_( " -M Run VACUUM ANALYZE on the table of the raster column. Most\n" " useful when appending raster to existing table with -a.\n" )); printf(_( " -C Set the standard set of constraints on the raster\n" " column after the rasters are loaded. Some constraints may fail\n" " if one or more rasters violate the constraint.\n" " -x Disable setting the max extent constraint. Only applied if\n" " -C flag is also used.\n" " -r Set the constraints (spatially unique and coverage tile) for\n" " regular blocking. Only applied if -C flag is also used.\n" )); printf(_( " -T <tablespace> Specify the tablespace for the new table.\n" " Note that indices (including the primary key) will still use\n" " the default tablespace unless the -X flag is also used.\n" )); printf(_( " -X <tablespace> Specify the tablespace for the table's new index.\n" " This applies to the primary key and the spatial index if\n" " the -I flag is used.\n" )); printf(_( " -N <nodata> NODATA value to use on bands without a NODATA value.\n" )); printf(_( " -k Skip NODATA value checks for each raster band.\n" )); printf(_( " -E <endian> Control endianness of generated binary output of\n" " raster. Use 0 for XDR and 1 for NDR (default). Only NDR\n" " is supported at this time.\n" )); printf(_( " -V <version> Specify version of output WKB format. Default\n" " is 0. Only 0 is supported at this time.\n" )); printf(_( " -e Execute each statement individually, do not use a transaction.\n" )); printf(_( " -Y Use COPY statements instead of INSERT statements.\n" )); printf(_( " -G Print the supported GDAL raster formats.\n" )); printf(_( " -? Display this help screen.\n" )); } static void calc_tile_size( int dimX, int dimY, int *tileX, int *tileY ) { int i = 0; int j = 0; int min = 30; int max = 100; int d = 0; double r = 0; /*int _d = 0;*/ double _r = -1; int _i = 0; /* j = 0, X */ for (j = 0; j < 2; j++) { _i = 0; /*_d = 0;*/ _r = -1; if (j < 1 && dimX <= max) { *tileX = dimX; continue; } else if (dimY <= max) { *tileY = dimY; continue; } for (i = max; i >= min; i--) { if (j < 1) { d = dimX / i; r = (double) dimX / (double) i; } else { d = dimY / i; r = (double) dimY / (double) i; } r = r - (double) d; if ( FLT_EQ(_r, -1) || (r < _r) || FLT_EQ(r, _r) ) { /*_d = d;*/ _r = r; _i = i; } } if (j < 1) *tileX = _i; else *tileY = _i; } } static void init_rastinfo(RASTERINFO *info) { info->srid = SRID_UNKNOWN; info->srs = NULL; memset(info->dim, 0, sizeof(double) * 2); info->nband_count = 0; info->nband = NULL; info->gdalbandtype = NULL; info->bandtype = NULL; info->hasnodata = NULL; info->nodataval = NULL; memset(info->gt, 0, sizeof(double) * 6); memset(info->tile_size, 0, sizeof(int) * 2); } static void rtdealloc_rastinfo(RASTERINFO *info) { if (info->srs != NULL) rtdealloc(info->srs); if (info->nband_count > 0 && info->nband != NULL) rtdealloc(info->nband); if (info->gdalbandtype != NULL) rtdealloc(info->gdalbandtype); if (info->bandtype != NULL) rtdealloc(info->bandtype); if (info->hasnodata != NULL) rtdealloc(info->hasnodata); if (info->nodataval != NULL) rtdealloc(info->nodataval); } static int copy_rastinfo(RASTERINFO *dst, RASTERINFO *src) { if (src->srs != NULL) { dst->srs = rtalloc(sizeof(char) * (strlen(src->srs) + 1)); if (dst->srs == NULL) { rterror(_("copy_rastinfo: Not enough memory")); return 0; } strcpy(dst->srs, src->srs); } memcpy(dst->dim, src->dim, sizeof(uint32_t) * 2); dst->nband_count = src->nband_count; if (src->nband_count && src->nband != NULL) { dst->nband = rtalloc(sizeof(int) * src->nband_count); if (dst->nband == NULL) { rterror(_("copy_rastinfo: Not enough memory")); return 0; } memcpy(dst->nband, src->nband, sizeof(int) * src->nband_count); } if (src->gdalbandtype != NULL) { dst->gdalbandtype = rtalloc(sizeof(GDALDataType) * src->nband_count); if (dst->gdalbandtype == NULL) { rterror(_("copy_rastinfo: Not enough memory")); return 0; } memcpy(dst->gdalbandtype, src->gdalbandtype, sizeof(GDALDataType) * src->nband_count); } if (src->bandtype != NULL) { dst->bandtype = rtalloc(sizeof(rt_pixtype) * src->nband_count); if (dst->bandtype == NULL) { rterror(_("copy_rastinfo: Not enough memory")); return 0; } memcpy(dst->bandtype, src->bandtype, sizeof(rt_pixtype) * src->nband_count); } if (src->hasnodata != NULL) { dst->hasnodata = rtalloc(sizeof(int) * src->nband_count); if (dst->hasnodata == NULL) { rterror(_("copy_rastinfo: Not enough memory")); return 0; } memcpy(dst->hasnodata, src->hasnodata, sizeof(int) * src->nband_count); } if (src->nodataval != NULL) { dst->nodataval = rtalloc(sizeof(double) * src->nband_count); if (dst->nodataval == NULL) { rterror(_("copy_rastinfo: Not enough memory")); return 0; } memcpy(dst->nodataval, src->nodataval, sizeof(double) * src->nband_count); } memcpy(dst->gt, src->gt, sizeof(double) * 6); memcpy(dst->tile_size, src->tile_size, sizeof(int) * 2); return 1; } static void diff_rastinfo(RASTERINFO *x, RASTERINFO *ref) { static uint8_t msg[6] = {0}; int i = 0; /* # of bands */ if ( !msg[0] && x->nband_count != ref->nband_count ) { rtwarn(_("Different number of bands found in the set of rasters being converted to PostGIS raster")); msg[0]++; } /* pixel types */ if (!msg[1]) { for (i = 0; i < ref->nband_count; i++) { if (x->bandtype[i] != ref->bandtype[i]) { rtwarn(_("Different pixel types found for band %d in the set of rasters being converted to PostGIS raster"), ref->nband[i]); msg[1]++; } } } /* hasnodata */ if (!msg[2]) { for (i = 0; i < ref->nband_count; i++) { if (x->hasnodata[i] != ref->hasnodata[i]) { rtwarn(_("Different hasnodata flags found for band %d in the set of rasters being converted to PostGIS raster"), ref->nband[i]); msg[2]++; } } } /* nodataval */ if (!msg[3]) { for (i = 0; i < ref->nband_count; i++) { if (!x->hasnodata[i] && !ref->hasnodata[i]) continue; if (FLT_NEQ(x->hasnodata[i], ref->hasnodata[i])) { rtwarn(_("Different NODATA values found for band %d in the set of rasters being converted to PostGIS raster"), ref->nband[i]); msg[3]++; } } } /* alignment */ if (!msg[4]) { rt_raster rx = NULL; rt_raster rref = NULL; int err; int aligned; if ( (rx = rt_raster_new(1, 1)) == NULL || (rref = rt_raster_new(1, 1)) == NULL ) { rterror(_("diff_rastinfo: Could not allocate memory for raster alignment test")); if (rx != NULL) rt_raster_destroy(rx); if (rref != NULL) rt_raster_destroy(rref); return; } rt_raster_set_geotransform_matrix(rx, x->gt); rt_raster_set_geotransform_matrix(rref, ref->gt); err = rt_raster_same_alignment(rx, rref, &aligned, NULL); rt_raster_destroy(rx); rt_raster_destroy(rref); if (err != ES_NONE) { rterror(_("diff_rastinfo: Could not run raster alignment test")); return; } if (!aligned) { rtwarn(_("Raster with different alignment found in the set of rasters being converted to PostGIS raster")); msg[4]++; } } /* tile size */ if (!msg[5]) { for (i = 0; i < 2; i++) { if (FLT_NEQ(x->tile_size[i], ref->tile_size[i])) { rtwarn(_("Different tile sizes found in the set of rasters being converted to PostGIS raster")); msg[5]++; break; } } } } static void init_config(RTLOADERCFG *config) { config->rt_file_count = 0; config->rt_file = NULL; config->rt_filename = NULL; config->schema = NULL; config->table = NULL; config->raster_column = NULL; config->file_column = 0; config->file_column_name = NULL; config->overview_count = 0; config->overview = NULL; config->overview_table = NULL; config->quoteident = 0; config->srid = SRID_UNKNOWN; config->nband = NULL; config->nband_count = 0; memset(config->tile_size, 0, sizeof(int) * 2); config->pad_tile = 0; config->outdb = 0; config->opt = 'c'; config->idx = 0; config->maintenance = 0; config->constraints = 0; config->max_extent = 1; config->regular_blocking = 0; config->tablespace = NULL; config->idx_tablespace = NULL; config->hasnodata = 0; config->nodataval = 0; config->skip_nodataval_check = 0; config->endian = 1; config->version = 0; config->transaction = 1; config->copy_statements = 0; } static void rtdealloc_config(RTLOADERCFG *config) { int i = 0; if (config->rt_file_count) { for (i = config->rt_file_count - 1; i >= 0; i--) { rtdealloc(config->rt_file[i]); if (config->rt_filename) rtdealloc(config->rt_filename[i]); } rtdealloc(config->rt_file); if (config->rt_filename) rtdealloc(config->rt_filename); } if (config->schema != NULL) rtdealloc(config->schema); if (config->table != NULL) rtdealloc(config->table); if (config->raster_column != NULL) rtdealloc(config->raster_column); if (config->file_column_name != NULL) rtdealloc(config->file_column_name); if (config->overview_count > 0) { if (config->overview != NULL) rtdealloc(config->overview); if (config->overview_table != NULL) { for (i = config->overview_count - 1; i >= 0; i--) rtdealloc(config->overview_table[i]); rtdealloc(config->overview_table); } } if (config->nband_count > 0 && config->nband != NULL) rtdealloc(config->nband); if (config->tablespace != NULL) rtdealloc(config->tablespace); if (config->idx_tablespace != NULL) rtdealloc(config->idx_tablespace); rtdealloc(config); } static void init_stringbuffer(STRINGBUFFER *buffer) { buffer->line = NULL; buffer->length = 0; } static void rtdealloc_stringbuffer(STRINGBUFFER *buffer, int freebuffer) { if (buffer->length) { uint32_t i = 0; for (i = 0; i < buffer->length; i++) { if (buffer->line[i] != NULL) rtdealloc(buffer->line[i]); } rtdealloc(buffer->line); } buffer->line = NULL; buffer->length = 0; if (freebuffer) rtdealloc(buffer); } static void dump_stringbuffer(STRINGBUFFER *buffer) { int i = 0; for (i = 0; i < buffer->length; i++) { printf("%s\n", buffer->line[i]); } } static void flush_stringbuffer(STRINGBUFFER *buffer) { dump_stringbuffer(buffer); rtdealloc_stringbuffer(buffer, 0); } static int append_stringbuffer(STRINGBUFFER *buffer, const char *str) { buffer->length++; buffer->line = rtrealloc(buffer->line, sizeof(char *) * buffer->length); if (buffer->line == NULL) { rterror(_("append_stringbuffer: Could not allocate memory for appending string to buffer")); return 0; } buffer->line[buffer->length - 1] = NULL; buffer->line[buffer->length - 1] = rtalloc(sizeof(char) * (strlen(str) + 1)); if (buffer->line[buffer->length - 1] == NULL) { rterror(_("append_stringbuffer: Could not allocate memory for appending string to buffer")); return 0; } strcpy(buffer->line[buffer->length - 1], str); return 1; } static int append_sql_to_buffer(STRINGBUFFER *buffer, const char *str) { if (buffer->length > 9) flush_stringbuffer(buffer); return append_stringbuffer(buffer, str); } static int insert_records( const char *schema, const char *table, const char *column, const char *filename, const char *file_column_name, int copy_statements, STRINGBUFFER *tileset, STRINGBUFFER *buffer ) { char *fn = NULL; uint32_t len = 0; char *sql = NULL; uint32_t x = 0; assert(table != NULL); assert(column != NULL); /* COPY statements */ if (copy_statements) { /* escape tabs in filename */ if (filename != NULL) fn = strreplace(filename, "\t", "\\t", NULL); /* rows */ for (x = 0; x < tileset->length; x++) { len = strlen(tileset->line[x]) + 1; if (filename != NULL) len += strlen(fn) + 1; sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("insert_records: Could not allocate memory for COPY statement")); return 0; } sprintf(sql, "%s%s%s", tileset->line[x], (filename != NULL ? "\t" : ""), (filename != NULL ? fn : "") ); append_sql_to_buffer(buffer, sql); rtdealloc(sql); sql = NULL; } } /* INSERT statements */ else { len = strlen("INSERT INTO () VALUES (''::raster);") + 1; if (schema != NULL) len += strlen(schema); len += strlen(table); len += strlen(column); if (filename != NULL) len += strlen(",") + strlen(file_column_name); /* escape single-quotes in filename */ if (filename != NULL) fn = strreplace(filename, "'", "''", NULL); for (x = 0; x < tileset->length; x++) { int sqllen = len; sqllen += strlen(tileset->line[x]); if (filename != NULL) sqllen += strlen(",''") + strlen(fn); sql = rtalloc(sizeof(char) * sqllen); if (sql == NULL) { rterror(_("insert_records: Could not allocate memory for INSERT statement")); return 0; } sprintf(sql, "INSERT INTO %s%s (%s%s%s) VALUES ('%s'::raster%s%s%s);", (schema != NULL ? schema : ""), table, column, (filename != NULL ? "," : ""), (filename != NULL ? file_column_name : ""), tileset->line[x], (filename != NULL ? ",'" : ""), (filename != NULL ? fn : ""), (filename != NULL ? "'" : "") ); append_sql_to_buffer(buffer, sql); rtdealloc(sql); sql = NULL; } } if (fn != NULL) rtdealloc(fn); return 1; } static int drop_table(const char *schema, const char *table, STRINGBUFFER *buffer) { char *sql = NULL; uint32_t len = 0; len = strlen("DROP TABLE IF EXISTS ;") + 1; if (schema != NULL) len += strlen(schema); len += strlen(table); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("drop_table: Could not allocate memory for DROP TABLE statement")); return 0; } sprintf(sql, "DROP TABLE IF EXISTS %s%s;", (schema != NULL ? schema : ""), table ); append_sql_to_buffer(buffer, sql); rtdealloc(sql); return 1; } static int create_table( const char *schema, const char *table, const char *column, const int file_column, const char *file_column_name, const char *tablespace, const char *idx_tablespace, STRINGBUFFER *buffer ) { char *sql = NULL; uint32_t len = 0; assert(table != NULL); assert(column != NULL); len = strlen("CREATE TABLE (\"rid\" serial PRIMARY KEY, raster);") + 1; if (schema != NULL) len += strlen(schema); len += strlen(table); len += strlen(column); if (file_column) len += strlen(", text") + strlen(file_column_name); if (tablespace != NULL) len += strlen(" TABLESPACE ") + strlen(tablespace); if (idx_tablespace != NULL) len += strlen(" USING INDEX TABLESPACE ") + strlen(idx_tablespace); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("create_table: Could not allocate memory for CREATE TABLE statement")); return 0; } sprintf(sql, "CREATE TABLE %s%s (\"rid\" serial PRIMARY KEY%s%s,%s raster%s%s%s)%s%s;", (schema != NULL ? schema : ""), table, (idx_tablespace != NULL ? " USING INDEX TABLESPACE " : ""), (idx_tablespace != NULL ? idx_tablespace : ""), column, (file_column ? "," : ""), (file_column ? file_column_name : ""), (file_column ? " text" : ""), (tablespace != NULL ? " TABLESPACE " : ""), (tablespace != NULL ? tablespace : "") ); append_sql_to_buffer(buffer, sql); rtdealloc(sql); return 1; } static int copy_from( const char *schema, const char *table, const char *column, const char *filename, const char *file_column_name, STRINGBUFFER *buffer ) { char *sql = NULL; uint32_t len = 0; assert(table != NULL); assert(column != NULL); len = strlen("COPY () FROM stdin;") + 1; if (schema != NULL) len += strlen(schema); len += strlen(table); len += strlen(column); if (filename != NULL) len += strlen(",") + strlen(file_column_name); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("copy_from: Could not allocate memory for COPY statement")); return 0; } sprintf(sql, "COPY %s%s (%s%s%s) FROM stdin;", (schema != NULL ? schema : ""), table, column, (filename != NULL ? "," : ""), (filename != NULL ? file_column_name : "") ); append_sql_to_buffer(buffer, sql); rtdealloc(sql); sql = NULL; return 1; } static int copy_from_end(STRINGBUFFER *buffer) { /* end of data */ append_sql_to_buffer(buffer, "\\."); return 1; } static int create_index( const char *schema, const char *table, const char *column, const char *tablespace, STRINGBUFFER *buffer ) { char *sql = NULL; uint32_t len = 0; char *_table = NULL; char *_column = NULL; assert(table != NULL); assert(column != NULL); _table = chartrim(table, "\""); _column = chartrim(column, "\""); /* create index */ len = strlen("CREATE INDEX \"__gist\" ON USING gist (st_convexhull());") + 1; if (schema != NULL) len += strlen(schema); len += strlen(_table); len += strlen(_column); len += strlen(table); len += strlen(column); if (tablespace != NULL) len += strlen(" TABLESPACE ") + strlen(tablespace); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("create_index: Could not allocate memory for CREATE INDEX statement")); rtdealloc(_table); rtdealloc(_column); return 0; } sprintf(sql, "CREATE INDEX \"%s_%s_gist\" ON %s%s USING gist (st_convexhull(%s))%s%s;", _table, _column, (schema != NULL ? schema : ""), table, column, (tablespace != NULL ? " TABLESPACE " : ""), (tablespace != NULL ? tablespace : "") ); rtdealloc(_table); rtdealloc(_column); append_sql_to_buffer(buffer, sql); rtdealloc(sql); return 1; } static int analyze_table( const char *schema, const char *table, STRINGBUFFER *buffer ) { char *sql = NULL; uint32_t len = 0; assert(table != NULL); len = strlen("ANALYZE ;") + 1; if (schema != NULL) len += strlen(schema); len += strlen(table); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("analyze_table: Could not allocate memory for ANALYZE TABLE statement")); return 0; } sprintf(sql, "ANALYZE %s%s;", (schema != NULL ? schema : ""), table ); append_sql_to_buffer(buffer, sql); rtdealloc(sql); return 1; } static int vacuum_table( const char *schema, const char *table, STRINGBUFFER *buffer ) { char *sql = NULL; uint32_t len = 0; assert(table != NULL); len = strlen("VACUUM ANALYZE ;") + 1; if (schema != NULL) len += strlen(schema); len += strlen(table); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("vacuum_table: Could not allocate memory for VACUUM statement")); return 0; } sprintf(sql, "VACUUM ANALYZE %s%s;", (schema != NULL ? schema : ""), table ); append_sql_to_buffer(buffer, sql); rtdealloc(sql); return 1; } static int add_raster_constraints( const char *schema, const char *table, const char *column, int regular_blocking, int max_extent, STRINGBUFFER *buffer ) { char *sql = NULL; uint32_t len = 0; char *_tmp = NULL; char *_schema = NULL; char *_table = NULL; char *_column = NULL; assert(table != NULL); assert(column != NULL); /* schema */ if (schema != NULL) { _tmp = chartrim(schema, "."); _schema = chartrim(_tmp, "\""); rtdealloc(_tmp); _tmp = strreplace(_schema, "'", "''", NULL); rtdealloc(_schema); _schema = _tmp; } /* table */ _tmp = chartrim(table, "\""); _table = strreplace(_tmp, "'", "''", NULL); rtdealloc(_tmp); /* column */ _tmp = chartrim(column, "\""); _column = strreplace(_tmp, "'", "''", NULL); rtdealloc(_tmp); len = strlen("SELECT AddRasterConstraints('','','',TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,FALSE);") + 1; if (_schema != NULL) len += strlen(_schema); len += strlen(_table); len += strlen(_column); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("add_raster_constraints: Could not allocate memory for AddRasterConstraints statement")); return 0; } sprintf(sql, "SELECT AddRasterConstraints('%s','%s','%s',TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,%s,TRUE,TRUE,TRUE,TRUE,%s);", (_schema != NULL ? _schema : ""), _table, _column, (regular_blocking ? "TRUE" : "FALSE"), (max_extent ? "TRUE" : "FALSE") ); if (_schema != NULL) rtdealloc(_schema); rtdealloc(_table); rtdealloc(_column); append_sql_to_buffer(buffer, sql); rtdealloc(sql); return 1; } static int add_overview_constraints( const char *ovschema, const char *ovtable, const char *ovcolumn, const char *schema, const char *table, const char *column, const int factor, STRINGBUFFER *buffer ) { char *sql = NULL; uint32_t len = 0; char *_tmp = NULL; char *_ovschema = NULL; char *_ovtable = NULL; char *_ovcolumn = NULL; char *_schema = NULL; char *_table = NULL; char *_column = NULL; assert(ovtable != NULL); assert(ovcolumn != NULL); assert(table != NULL); assert(column != NULL); assert(factor >= MINOVFACTOR && factor <= MAXOVFACTOR); /* overview schema */ if (ovschema != NULL) { _tmp = chartrim(ovschema, "."); _ovschema = chartrim(_tmp, "\""); rtdealloc(_tmp); _tmp = strreplace(_ovschema, "'", "''", NULL); rtdealloc(_ovschema); _ovschema = _tmp; } /* overview table */ _tmp = chartrim(ovtable, "\""); _ovtable = strreplace(_tmp, "'", "''", NULL); rtdealloc(_tmp); /* overview column*/ _tmp = chartrim(ovcolumn, "\""); _ovcolumn = strreplace(_tmp, "'", "''", NULL); rtdealloc(_tmp); /* schema */ if (schema != NULL) { _tmp = chartrim(schema, "."); _schema = chartrim(_tmp, "\""); rtdealloc(_tmp); _tmp = strreplace(_schema, "'", "''", NULL); rtdealloc(_schema); _schema = _tmp; } /* table */ _tmp = chartrim(table, "\""); _table = strreplace(_tmp, "'", "''", NULL); rtdealloc(_tmp); /* column */ _tmp = chartrim(column, "\""); _column = strreplace(_tmp, "'", "''", NULL); rtdealloc(_tmp); len = strlen("SELECT AddOverviewConstraints('','','','','','',);") + 5; if (_ovschema != NULL) len += strlen(_ovschema); len += strlen(_ovtable); len += strlen(_ovcolumn); if (_schema != NULL) len += strlen(_schema); len += strlen(_table); len += strlen(_column); sql = rtalloc(sizeof(char) * len); if (sql == NULL) { rterror(_("add_overview_constraints: Could not allocate memory for AddOverviewConstraints statement")); return 0; } sprintf(sql, "SELECT AddOverviewConstraints('%s','%s','%s','%s','%s','%s',%d);", (_ovschema != NULL ? _ovschema : ""), _ovtable, _ovcolumn, (_schema != NULL ? _schema : ""), _table, _column, factor ); if (_ovschema != NULL) rtdealloc(_ovschema); rtdealloc(_ovtable); rtdealloc(_ovcolumn); if (_schema != NULL) rtdealloc(_schema); rtdealloc(_table); rtdealloc(_column); append_sql_to_buffer(buffer, sql); rtdealloc(sql); return 1; } static int build_overview(int idx, RTLOADERCFG *config, RASTERINFO *info, int ovx, STRINGBUFFER *tileset, STRINGBUFFER *buffer) { GDALDatasetH hdsSrc; VRTDatasetH hdsOv; VRTSourcedRasterBandH hbandOv; double gtOv[6] = {0.}; int dimOv[2] = {0}; int j = 0; int factor; const char *ovtable = NULL; VRTDatasetH hdsDst; VRTSourcedRasterBandH hbandDst; int tile_size[2] = {0}; int _tile_size[2] = {0}; int ntiles[2] = {1, 1}; int xtile = 0; int ytile = 0; double gt[6] = {0.}; rt_raster rast = NULL; char *hex; uint32_t hexlen = 0; hdsSrc = GDALOpenShared(config->rt_file[idx], GA_ReadOnly); if (hdsSrc == NULL) { rterror(_("build_overview: Could not open raster: %s"), config->rt_file[idx]); return 0; } /* working copy of geotransform matrix */ memcpy(gtOv, info->gt, sizeof(double) * 6); if (ovx >= config->overview_count) { rterror(_("build_overview: Invalid overview index: %d"), ovx); return 0; } factor = config->overview[ovx]; ovtable = (const char *) config->overview_table[ovx]; /* factor must be within valid range */ if (factor < MINOVFACTOR || factor > MAXOVFACTOR) { rterror(_("build_overview: Overview factor %d is not between %d and %d"), factor, MINOVFACTOR, MAXOVFACTOR); return 0; } dimOv[0] = (int) (info->dim[0] + (factor / 2)) / factor; dimOv[1] = (int) (info->dim[1] + (factor / 2)) / factor; /* create VRT dataset */ hdsOv = VRTCreate(dimOv[0], dimOv[1]); /* GDALSetDescription(hdsOv, "/tmp/ov.vrt"); */ GDALSetProjection(hdsOv, info->srs); /* adjust scale */ gtOv[1] *= factor; gtOv[5] *= factor; GDALSetGeoTransform(hdsOv, gtOv); /* add bands as simple sources */ for (j = 0; j < info->nband_count; j++) { GDALAddBand(hdsOv, info->gdalbandtype[j], NULL); hbandOv = (VRTSourcedRasterBandH) GDALGetRasterBand(hdsOv, j + 1); if (info->hasnodata[j]) GDALSetRasterNoDataValue(hbandOv, info->nodataval[j]); VRTAddSimpleSource( hbandOv, GDALGetRasterBand(hdsSrc, info->nband[j]), 0, 0, info->dim[0], info->dim[1], 0, 0, dimOv[0], dimOv[1], "near", VRT_NODATA_UNSET ); } /* make sure VRT reflects all changes */ VRTFlushCache(hdsOv); /* decide on tile size */ if (!config->tile_size[0]) tile_size[0] = dimOv[0]; else tile_size[0] = config->tile_size[0]; if (!config->tile_size[1]) tile_size[1] = dimOv[1]; else tile_size[1] = config->tile_size[1]; /* number of tiles */ if ( tile_size[0] != dimOv[0] && tile_size[1] != dimOv[1] ) { ntiles[0] = (dimOv[0] + tile_size[0] - 1) / tile_size[0]; ntiles[1] = (dimOv[1] + tile_size[1] - 1) / tile_size[1]; } /* working copy of geotransform matrix */ memcpy(gt, gtOv, sizeof(double) * 6); /* tile overview */ /* each tile is a VRT with constraints set for just the data required for the tile */ for (ytile = 0; ytile < ntiles[1]; ytile++) { /* edge y tile */ if (!config->pad_tile && ntiles[1] > 1 && (ytile + 1) == ntiles[1]) _tile_size[1] = dimOv[1] - (ytile * tile_size[1]); else _tile_size[1] = tile_size[1]; for (xtile = 0; xtile < ntiles[0]; xtile++) { /* char fn[100]; sprintf(fn, "/tmp/ovtile%d.vrt", (ytile * ntiles[0]) + xtile); */ /* edge x tile */ if (!config->pad_tile && ntiles[0] > 1 && (xtile + 1) == ntiles[0]) _tile_size[0] = dimOv[0] - (xtile * tile_size[0]); else _tile_size[0] = tile_size[0]; /* compute tile's upper-left corner */ GDALApplyGeoTransform( gtOv, xtile * tile_size[0], ytile * tile_size[1], &(gt[0]), &(gt[3]) ); /* create VRT dataset */ hdsDst = VRTCreate(_tile_size[0], _tile_size[1]); /* GDALSetDescription(hdsDst, fn); */ GDALSetProjection(hdsDst, info->srs); GDALSetGeoTransform(hdsDst, gt); /* add bands as simple sources */ for (j = 0; j < info->nband_count; j++) { GDALAddBand(hdsDst, info->gdalbandtype[j], NULL); hbandDst = (VRTSourcedRasterBandH) GDALGetRasterBand(hdsDst, j + 1); if (info->hasnodata[j]) GDALSetRasterNoDataValue(hbandDst, info->nodataval[j]); VRTAddSimpleSource( hbandDst, GDALGetRasterBand(hdsOv, j + 1), xtile * tile_size[0], ytile * tile_size[1], _tile_size[0], _tile_size[1], 0, 0, _tile_size[0], _tile_size[1], "near", VRT_NODATA_UNSET ); } /* make sure VRT reflects all changes */ VRTFlushCache(hdsDst); /* convert VRT dataset to rt_raster */ rast = rt_raster_from_gdal_dataset(hdsDst); if (rast == NULL) { rterror(_("build_overview: Could not convert VRT dataset to PostGIS raster")); GDALClose(hdsDst); return 0; } /* set srid if provided */ rt_raster_set_srid(rast, info->srid); /* convert rt_raster to hexwkb */ hex = rt_raster_to_hexwkb(rast, FALSE, &hexlen); raster_destroy(rast); if (hex == NULL) { rterror(_("build_overview: Could not convert PostGIS raster to hex WKB")); GDALClose(hdsDst); return 0; } /* add hexwkb to tileset */ append_stringbuffer(tileset, hex); rtdealloc(hex); GDALClose(hdsDst); /* flush if tileset gets too big */ if (tileset->length > 10) { if (!insert_records( config->schema, ovtable, config->raster_column, (config->file_column ? config->rt_filename[idx] : NULL), config->file_column_name, config->copy_statements, tileset, buffer )) { rterror(_("build_overview: Could not convert raster tiles into INSERT or COPY statements")); GDALClose(hdsSrc); return 0; } rtdealloc_stringbuffer(tileset, 0); } } } GDALClose(hdsOv); GDALClose(hdsSrc); return 1; } static int convert_raster(int idx, RTLOADERCFG *config, RASTERINFO *info, STRINGBUFFER *tileset, STRINGBUFFER *buffer) { GDALDatasetH hdsSrc; GDALRasterBandH hbandSrc; int nband = 0; int i = 0; int ntiles[2] = {1, 1}; int _tile_size[2] = {0, 0}; int xtile = 0; int ytile = 0; double gt[6] = {0.}; const char* pszProjectionRef = NULL; int tilesize = 0; rt_raster rast = NULL; int numbands = 0; rt_band band = NULL; char *hex; uint32_t hexlen = 0; info->srid = config->srid; hdsSrc = GDALOpenShared(config->rt_file[idx], GA_ReadOnly); if (hdsSrc == NULL) { rterror(_("convert_raster: Could not open raster: %s"), config->rt_file[idx]); return 0; } nband = GDALGetRasterCount(hdsSrc); if (!nband) { rterror(_("convert_raster: No bands found in raster: %s"), config->rt_file[idx]); GDALClose(hdsSrc); return 0; } /* check that bands specified are available */ for (i = 0; i < config->nband_count; i++) { if (config->nband[i] > nband) { rterror(_("convert_raster: Band %d not found in raster: %s"), config->nband[i], config->rt_file[idx]); GDALClose(hdsSrc); return 0; } } /* record srs */ pszProjectionRef = GDALGetProjectionRef(hdsSrc); if (pszProjectionRef != NULL && pszProjectionRef[0] != '\0') { info->srs = rtalloc(sizeof(char) * (strlen(pszProjectionRef) + 1)); if (info->srs == NULL) { rterror(_("convert_raster: Could not allocate memory for storing SRS")); GDALClose(hdsSrc); return 0; } strcpy(info->srs, pszProjectionRef); if (info->srid == SRID_UNKNOWN) { OGRSpatialReferenceH hSRS = OSRNewSpatialReference(NULL); if (OSRSetFromUserInput(hSRS, pszProjectionRef) == OGRERR_NONE) { const char* pszAuthorityName = OSRGetAuthorityName(hSRS, NULL); const char* pszAuthorityCode = OSRGetAuthorityCode(hSRS, NULL); if ( pszAuthorityName != NULL && strcmp(pszAuthorityName, "EPSG") == 0 && pszAuthorityCode != NULL ) { info->srid = atoi(pszAuthorityCode); } } OSRDestroySpatialReference(hSRS); } } /* record geotransform matrix */ if (GDALGetGeoTransform(hdsSrc, info->gt) != CE_None) { rtinfo(_("Using default geotransform matrix (0, 1, 0, 0, 0, -1) for raster: %s"), config->rt_file[idx]); info->gt[0] = 0; info->gt[1] = 1; info->gt[2] = 0; info->gt[3] = 0; info->gt[4] = 0; info->gt[5] = -1; } memcpy(gt, info->gt, sizeof(double) * 6); /* record # of bands */ /* user-specified bands */ if (config->nband_count > 0) { info->nband_count = config->nband_count; info->nband = rtalloc(sizeof(int) * info->nband_count); if (info->nband == NULL) { rterror(_("convert_raster: Could not allocate memory for storing band indices")); GDALClose(hdsSrc); return 0; } memcpy(info->nband, config->nband, sizeof(int) * info->nband_count); } /* all bands */ else { info->nband_count = nband; info->nband = rtalloc(sizeof(int) * info->nband_count); if (info->nband == NULL) { rterror(_("convert_raster: Could not allocate memory for storing band indices")); GDALClose(hdsSrc); return 0; } for (i = 0; i < info->nband_count; i++) info->nband[i] = i + 1; } /* initialize parameters dependent on nband */ info->gdalbandtype = rtalloc(sizeof(GDALDataType) * info->nband_count); if (info->gdalbandtype == NULL) { rterror(_("convert_raster: Could not allocate memory for storing GDAL data type")); GDALClose(hdsSrc); return 0; } info->bandtype = rtalloc(sizeof(rt_pixtype) * info->nband_count); if (info->bandtype == NULL) { rterror(_("convert_raster: Could not allocate memory for storing pixel type")); GDALClose(hdsSrc); return 0; } info->hasnodata = rtalloc(sizeof(int) * info->nband_count); if (info->hasnodata == NULL) { rterror(_("convert_raster: Could not allocate memory for storing hasnodata flag")); GDALClose(hdsSrc); return 0; } info->nodataval = rtalloc(sizeof(double) * info->nband_count); if (info->nodataval == NULL) { rterror(_("convert_raster: Could not allocate memory for storing nodata value")); GDALClose(hdsSrc); return 0; } memset(info->gdalbandtype, GDT_Unknown, sizeof(GDALDataType) * info->nband_count); memset(info->bandtype, PT_END, sizeof(rt_pixtype) * info->nband_count); memset(info->hasnodata, 0, sizeof(int) * info->nband_count); memset(info->nodataval, 0, sizeof(double) * info->nband_count); /* dimensions of raster */ info->dim[0] = GDALGetRasterXSize(hdsSrc); info->dim[1] = GDALGetRasterYSize(hdsSrc); /* tile size is "auto" */ if ( config->tile_size[0] == -1 && config->tile_size[1] == -1 ) { calc_tile_size( info->dim[0], info->dim[1], &(config->tile_size[0]), &(config->tile_size[1]) ); rtinfo(_("Using computed tile size: %dx%d"), config->tile_size[0], config->tile_size[1]); } /* decide on tile size */ if (!config->tile_size[0]) info->tile_size[0] = info->dim[0]; else info->tile_size[0] = config->tile_size[0]; if (!config->tile_size[1]) info->tile_size[1] = info->dim[1]; else info->tile_size[1] = config->tile_size[1]; /* number of tiles */ if (info->tile_size[0] != info->dim[0]) ntiles[0] = (info->dim[0] + info->tile_size[0] - 1) / info->tile_size[0]; if (info->tile_size[1] != info->dim[1]) ntiles[1] = (info->dim[1] + info->tile_size[1] - 1) / info->tile_size[1]; /* estimate size of 1 tile */ tilesize = info->tile_size[0] * info->tile_size[1]; /* go through bands for attributes */ for (i = 0; i < info->nband_count; i++) { hbandSrc = GDALGetRasterBand(hdsSrc, info->nband[i]); /* datatype */ info->gdalbandtype[i] = GDALGetRasterDataType(hbandSrc); /* complex data type? */ if (GDALDataTypeIsComplex(info->gdalbandtype[i])) { rterror(_("convert_raster: The pixel type of band %d is a complex data type. PostGIS raster does not support complex data types"), i + 1); GDALClose(hdsSrc); return 0; } /* convert data type to that of postgis raster */ info->bandtype[i] = rt_util_gdal_datatype_to_pixtype(info->gdalbandtype[i]); /* hasnodata and nodataval */ info->nodataval[i] = GDALGetRasterNoDataValue(hbandSrc, &(info->hasnodata[i])); if (!info->hasnodata[i]) { /* does NOT have nodata value, but user-specified */ if (config->hasnodata) { info->hasnodata[i] = 1; info->nodataval[i] = config->nodataval; } else info->nodataval[i] = 0; } /* update estimated size of 1 tile */ tilesize *= rt_pixtype_size(info->bandtype[i]); } /* roughly estimate size of one tile and all bands */ tilesize *= 1.1; if (tilesize > MAXTILESIZE) rtwarn(_("The size of each output tile may exceed 1 GB. Use -t to specify a reasonable tile size")); /* out-db raster */ if (config->outdb) { GDALClose(hdsSrc); /* each tile is a raster */ for (ytile = 0; ytile < ntiles[1]; ytile++) { /* edge y tile */ if (!config->pad_tile && ntiles[1] > 1 && (ytile + 1) == ntiles[1]) _tile_size[1] = info->dim[1] - (ytile * info->tile_size[1]); else _tile_size[1] = info->tile_size[1]; for (xtile = 0; xtile < ntiles[0]; xtile++) { /* edge x tile */ if (!config->pad_tile && ntiles[0] > 1 && (xtile + 1) == ntiles[0]) _tile_size[0] = info->dim[0] - (xtile * info->tile_size[0]); else _tile_size[0] = info->tile_size[0]; /* compute tile's upper-left corner */ GDALApplyGeoTransform( info->gt, xtile * info->tile_size[0], ytile * info->tile_size[1], &(gt[0]), &(gt[3]) ); /* create raster object */ rast = rt_raster_new(_tile_size[0], _tile_size[1]); if (rast == NULL) { rterror(_("convert_raster: Could not create raster")); return 0; } /* set raster attributes */ rt_raster_set_srid(rast, info->srid); rt_raster_set_geotransform_matrix(rast, gt); /* add bands */ for (i = 0; i < info->nband_count; i++) { band = rt_band_new_offline( _tile_size[0], _tile_size[1], info->bandtype[i], info->hasnodata[i], info->nodataval[i], info->nband[i] - 1, config->rt_file[idx] ); if (band == NULL) { rterror(_("convert_raster: Could not create offline band")); raster_destroy(rast); return 0; } /* add band to raster */ if (rt_raster_add_band(rast, band, rt_raster_get_num_bands(rast)) == -1) { rterror(_("convert_raster: Could not add offlineband to raster")); rt_band_destroy(band); raster_destroy(rast); return 0; } /* inspect each band of raster where band is NODATA */ if (!config->skip_nodataval_check) rt_band_check_is_nodata(band); } /* convert rt_raster to hexwkb */ hex = rt_raster_to_hexwkb(rast, FALSE, &hexlen); raster_destroy(rast); if (hex == NULL) { rterror(_("convert_raster: Could not convert PostGIS raster to hex WKB")); return 0; } /* add hexwkb to tileset */ append_stringbuffer(tileset, hex); rtdealloc(hex); /* flush if tileset gets too big */ if (tileset->length > 10) { if (!insert_records( config->schema, config->table, config->raster_column, (config->file_column ? config->rt_filename[idx] : NULL), config->file_column_name, config->copy_statements, tileset, buffer )) { rterror(_("convert_raster: Could not convert raster tiles into INSERT or COPY statements")); return 0; } rtdealloc_stringbuffer(tileset, 0); } } } } /* in-db raster */ else { VRTDatasetH hdsDst; VRTSourcedRasterBandH hbandDst; /* each tile is a VRT with constraints set for just the data required for the tile */ for (ytile = 0; ytile < ntiles[1]; ytile++) { /* edge y tile */ if (!config->pad_tile && ntiles[1] > 1 && (ytile + 1) == ntiles[1]) _tile_size[1] = info->dim[1] - (ytile * info->tile_size[1]); else _tile_size[1] = info->tile_size[1]; for (xtile = 0; xtile < ntiles[0]; xtile++) { /* char fn[100]; sprintf(fn, "/tmp/tile%d.vrt", (ytile * ntiles[0]) + xtile); */ /* edge x tile */ if (!config->pad_tile && ntiles[0] > 1 && (xtile + 1) == ntiles[0]) _tile_size[0] = info->dim[0] - (xtile * info->tile_size[0]); else _tile_size[0] = info->tile_size[0]; /* compute tile's upper-left corner */ GDALApplyGeoTransform( info->gt, xtile * info->tile_size[0], ytile * info->tile_size[1], &(gt[0]), &(gt[3]) ); /* rtinfo(_("tile (%d, %d) gt = (%f, %f, %f, %f, %f, %f)"), xtile, ytile, gt[0], gt[1], gt[2], gt[3], gt[4], gt[5] ); */ /* create VRT dataset */ hdsDst = VRTCreate(_tile_size[0], _tile_size[1]); /* GDALSetDescription(hdsDst, fn); */ GDALSetProjection(hdsDst, info->srs); GDALSetGeoTransform(hdsDst, gt); /* add bands as simple sources */ for (i = 0; i < info->nband_count; i++) { GDALAddBand(hdsDst, info->gdalbandtype[i], NULL); hbandDst = (VRTSourcedRasterBandH) GDALGetRasterBand(hdsDst, i + 1); if (info->hasnodata[i]) GDALSetRasterNoDataValue(hbandDst, info->nodataval[i]); VRTAddSimpleSource( hbandDst, GDALGetRasterBand(hdsSrc, info->nband[i]), xtile * info->tile_size[0], ytile * info->tile_size[1], _tile_size[0], _tile_size[1], 0, 0, _tile_size[0], _tile_size[1], "near", VRT_NODATA_UNSET ); } /* make sure VRT reflects all changes */ VRTFlushCache(hdsDst); /* convert VRT dataset to rt_raster */ rast = rt_raster_from_gdal_dataset(hdsDst); if (rast == NULL) { rterror(_("convert_raster: Could not convert VRT dataset to PostGIS raster")); GDALClose(hdsDst); return 0; } /* set srid if provided */ rt_raster_set_srid(rast, info->srid); /* inspect each band of raster where band is NODATA */ numbands = rt_raster_get_num_bands(rast); for (i = 0; i < numbands; i++) { band = rt_raster_get_band(rast, i); if (band != NULL && !config->skip_nodataval_check) rt_band_check_is_nodata(band); } /* convert rt_raster to hexwkb */ hex = rt_raster_to_hexwkb(rast, FALSE, &hexlen); raster_destroy(rast); if (hex == NULL) { rterror(_("convert_raster: Could not convert PostGIS raster to hex WKB")); GDALClose(hdsDst); return 0; } /* add hexwkb to tileset */ append_stringbuffer(tileset, hex); rtdealloc(hex); GDALClose(hdsDst); /* flush if tileset gets too big */ if (tileset->length > 10) { if (!insert_records( config->schema, config->table, config->raster_column, (config->file_column ? config->rt_filename[idx] : NULL), config->file_column_name, config->copy_statements, tileset, buffer )) { rterror(_("convert_raster: Could not convert raster tiles into INSERT or COPY statements")); GDALClose(hdsSrc); return 0; } rtdealloc_stringbuffer(tileset, 0); } } } GDALClose(hdsSrc); } return 1; } static int process_rasters(RTLOADERCFG *config, STRINGBUFFER *buffer) { int i = 0; assert(config != NULL); assert(config->table != NULL); assert(config->raster_column != NULL); if (config->transaction) { if (!append_sql_to_buffer(buffer, "BEGIN;")) { rterror(_("process_rasters: Could not add BEGIN statement to string buffer")); return 0; } } /* drop table */ if (config->opt == 'd') { if (!drop_table(config->schema, config->table, buffer)) { rterror(_("process_rasters: Could not add DROP TABLE statement to string buffer")); return 0; } if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { if (!drop_table(config->schema, config->overview_table[i], buffer)) { rterror(_("process_rasters: Could not add an overview's DROP TABLE statement to string buffer")); return 0; } } } } /* create table */ if (config->opt != 'a') { if (!create_table( config->schema, config->table, config->raster_column, config->file_column, config->file_column_name, config->tablespace, config->idx_tablespace, buffer )) { rterror(_("process_rasters: Could not add CREATE TABLE statement to string buffer")); return 0; } if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { if (!create_table( config->schema, config->overview_table[i], config->raster_column, config->file_column, config->file_column_name, config->tablespace, config->idx_tablespace, buffer )) { rterror(_("process_rasters: Could not add an overview's CREATE TABLE statement to string buffer")); return 0; } } } } /* no need to run if opt is 'p' */ if (config->opt != 'p') { RASTERINFO refinfo; init_rastinfo(&refinfo); /* process each raster */ for (i = 0; i < config->rt_file_count; i++) { RASTERINFO rastinfo; STRINGBUFFER tileset; fprintf(stderr, _("Processing %d/%d: %s\n"), i + 1, config->rt_file_count, config->rt_file[i]); init_rastinfo(&rastinfo); init_stringbuffer(&tileset); if (config->copy_statements && !copy_from( config->schema, config->table, config->raster_column, (config->file_column ? config->rt_filename[i] : NULL), config->file_column_name, buffer )) { rterror(_("process_rasters: Could not add COPY statement to string buffer")); rtdealloc_rastinfo(&rastinfo); rtdealloc_stringbuffer(&tileset, 0); return 0; } /* convert raster */ if (!convert_raster(i, config, &rastinfo, &tileset, buffer)) { rterror(_("process_rasters: Could not process raster: %s"), config->rt_file[i]); rtdealloc_rastinfo(&rastinfo); rtdealloc_stringbuffer(&tileset, 0); return 0; } /* process raster tiles into COPY or INSERT statements */ if (tileset.length && !insert_records( config->schema, config->table, config->raster_column, (config->file_column ? config->rt_filename[i] : NULL), config->file_column_name, config->copy_statements, &tileset, buffer )) { rterror(_("process_rasters: Could not convert raster tiles into INSERT or COPY statements")); rtdealloc_rastinfo(&rastinfo); rtdealloc_stringbuffer(&tileset, 0); return 0; } rtdealloc_stringbuffer(&tileset, 0); if (config->copy_statements && !copy_from_end(buffer)) { rterror(_("process_rasters: Could not add COPY end statement to string buffer")); rtdealloc_rastinfo(&rastinfo); return 0; } /* flush buffer after every raster */ flush_stringbuffer(buffer); /* overviews */ if (config->overview_count) { int j = 0; for (j = 0; j < config->overview_count; j++) { if (config->copy_statements && !copy_from( config->schema, config->overview_table[j], config->raster_column, (config->file_column ? config->rt_filename[i] : NULL), config->file_column_name, buffer )) { rterror(_("process_rasters: Could not add COPY statement to string buffer")); rtdealloc_rastinfo(&rastinfo); rtdealloc_stringbuffer(&tileset, 0); return 0; } if (!build_overview(i, config, &rastinfo, j, &tileset, buffer)) { rterror(_("process_rasters: Could not create overview of factor %d for raster %s"), config->overview[j], config->rt_file[i]); rtdealloc_rastinfo(&rastinfo); rtdealloc_stringbuffer(&tileset, 0); return 0; } if (tileset.length && !insert_records( config->schema, config->overview_table[j], config->raster_column, (config->file_column ? config->rt_filename[i] : NULL), config->file_column_name, config->copy_statements, &tileset, buffer )) { rterror(_("process_rasters: Could not convert overview tiles into INSERT or COPY statements")); rtdealloc_rastinfo(&rastinfo); rtdealloc_stringbuffer(&tileset, 0); return 0; } rtdealloc_stringbuffer(&tileset, 0); /* flush buffer after every raster */ flush_stringbuffer(buffer); if (config->copy_statements) { if (!copy_from_end(buffer)) { rterror(_("process_rasters: Could not add COPY end statement to string buffer")); rtdealloc_rastinfo(&rastinfo); return 0; } } } } if (config->rt_file_count > 1) { if (i < 1) copy_rastinfo(&refinfo, &rastinfo); else { diff_rastinfo(&rastinfo, &refinfo); } } rtdealloc_rastinfo(&rastinfo); } rtdealloc_rastinfo(&refinfo); } /* index */ if (config->idx) { /* create index */ if (!create_index( config->schema, config->table, config->raster_column, config->idx_tablespace, buffer )) { rterror(_("process_rasters: Could not add CREATE INDEX statement to string buffer")); return 0; } /* analyze */ if (config->opt != 'p') { if (!analyze_table( config->schema, config->table, buffer )) { rterror(_("process_rasters: Could not add ANALYZE statement to string buffer")); return 0; } } if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { /* create index */ if (!create_index( config->schema, config->overview_table[i], config->raster_column, config->idx_tablespace, buffer )) { rterror(_("process_rasters: Could not add an overview's CREATE INDEX statement to string buffer")); return 0; } /* analyze */ if (config->opt != 'p') { if (!analyze_table( config->schema, config->overview_table[i], buffer )) { rterror(_("process_rasters: Could not add an overview's ANALYZE statement to string buffer")); return 0; } } } } } /* add constraints */ if (config->constraints) { if (!add_raster_constraints( config->schema, config->table, config->raster_column, config->regular_blocking, config->max_extent, buffer )) { rterror(_("process:rasters: Could not add AddRasterConstraints statement to string buffer")); return 0; } if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { if (!add_raster_constraints( config->schema, config->overview_table[i], config->raster_column, config->regular_blocking, config->max_extent, buffer )) { rterror(_("process_rasters: Could not add an overview's AddRasterConstraints statement to string buffer")); return 0; } } } } /* overview constraint is automatically added */ if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { if (!add_overview_constraints( config->schema, config->overview_table[i], config->raster_column, config->schema, config->table, config->raster_column, config->overview[i], buffer )) { rterror(_("process_rasters: Could not add an overview's AddOverviewConstraints statement to string buffer")); return 0; } } } if (config->transaction) { if (!append_sql_to_buffer(buffer, "END;")) { rterror(_("process_rasters: Could not add END statement to string buffer")); return 0; } } /* maintenance */ if (config->opt != 'p' && config->maintenance) { if (!vacuum_table( config->schema, config->table, buffer )) { rterror(_("process_rasters: Could not add VACUUM statement to string buffer")); return 0; } if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { if (!vacuum_table( config->schema, config->overview_table[i], buffer )) { rterror(_("process_rasters: Could not add an overview's VACUUM statement to string buffer")); return 0; } } } } return 1; } int main(int argc, char **argv) { RTLOADERCFG *config = NULL; STRINGBUFFER *buffer = NULL; int i = 0; int j = 0; char **elements = NULL; int n = 0; GDALDriverH drv = NULL; char *tmp = NULL; #ifdef USE_NLS setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); #endif /* no args, show usage */ if (argc == 1) { usage(); exit(0); } /* initialize config */ config = rtalloc(sizeof(RTLOADERCFG)); if (config == NULL) { rterror(_("Could not allocate memory for loader configuration")); exit(1); } init_config(config); /**************************************************************************** * parse arguments ****************************************************************************/ for (i = 1; i < argc; i++) { /* srid */ if (CSEQUAL(argv[i], "-s") && i < argc - 1) { config->srid = atoi(argv[++i]); } /* band index */ else if (CSEQUAL(argv[i], "-b") && i < argc - 1) { elements = strsplit(argv[++i], ",", &n); if (n < 1) { rterror(_("Could not process -b")); rtdealloc_config(config); exit(1); } config->nband_count = 0; for (j = 0; j < n; j++) { char *t = trim(elements[j]); char **minmax = NULL; int *range = NULL; int p = 0; int l = 0; int m = 0; int o = 0; /* is t a range? */ minmax = strsplit(t, "-", &o); if (o == 2) { if (!array_range(atoi(minmax[0]), atoi(minmax[1]), 1, &range, &p)) { rterror(_("Could not allocate memory for storing band indices")); for (l = 0; l < o; l++) rtdealloc(minmax[l]); rtdealloc(minmax); for (j = 0; j < n; j++) rtdealloc(elements[j]); rtdealloc(elements); rtdealloc(t); rtdealloc_config(config); exit(1); } } else { p = 1; range = rtalloc(sizeof(int)); if (range == NULL) { rterror(_("Could not allocate memory for storing band indices")); for (l = 0; l < o; l++) rtdealloc(minmax[l]); rtdealloc(minmax); for (j = 0; j < n; j++) rtdealloc(elements[j]); rtdealloc(elements); rtdealloc(t); rtdealloc_config(config); exit(1); } *range = atoi(t); } m = config->nband_count; config->nband_count += p; config->nband = rtrealloc(config->nband, sizeof(int) * config->nband_count); if (config->nband == NULL) { rterror(_("Could not allocate memory for storing band indices")); rtdealloc(range); for (l = 0; l < o; l++) rtdealloc(minmax[l]); rtdealloc(minmax); for (j = 0; j < n; j++) rtdealloc(elements[j]); rtdealloc(elements); rtdealloc(t); rtdealloc_config(config); exit(1); } for (l = 0; l < p; l++, m++) config->nband[m] = range[l]; rtdealloc(range); for (l = 0; l < o; l++) rtdealloc(minmax[l]); rtdealloc(minmax); rtdealloc(t); rtdealloc(elements[j]); } rtdealloc(elements); elements = NULL; n = 0; for (j = 0; j < config->nband_count; j++) { if (config->nband[j] < 1) { rterror(_("Band index %d must be greater than 0"), config->nband[j]); rtdealloc_config(config); exit(1); } } } /* tile size */ else if (CSEQUAL(argv[i], "-t") && i < argc - 1) { if (CSEQUAL(argv[++i], "auto")) { config->tile_size[0] = -1; config->tile_size[1] = -1; } else { elements = strsplit(argv[i], "x", &n); if (n != 2) { rterror(_("Could not process -t")); rtdealloc_config(config); exit(1); } for (j = 0; j < n; j++) { char *t = trim(elements[j]); config->tile_size[j] = atoi(t); rtdealloc(t); rtdealloc(elements[j]); } rtdealloc(elements); elements = NULL; n = 0; for (j = 0; j < 2; j++) { if (config->tile_size[j] < 1) { rterror(_("Tile size must be greater than 0x0")); rtdealloc_config(config); exit(1); } } } } /* pad tiles */ else if (CSEQUAL(argv[i], "-P")) { config->pad_tile = 1; } /* out-of-db raster */ else if (CSEQUAL(argv[i], "-R")) { config->outdb = 1; } /* drop table and recreate */ else if (CSEQUAL(argv[i], "-d")) { config->opt = 'd'; } /* append to table */ else if (CSEQUAL(argv[i], "-a")) { config->opt = 'a'; } /* create new table */ else if (CSEQUAL(argv[i], "-c")) { config->opt = 'c'; } /* prepare only */ else if (CSEQUAL(argv[i], "-p")) { config->opt = 'p'; } /* raster column name */ else if (CSEQUAL(argv[i], "-f") && i < argc - 1) { config->raster_column = rtalloc(sizeof(char) * (strlen(argv[++i]) + 1)); if (config->raster_column == NULL) { rterror(_("Could not allocate memory for storing raster column name")); rtdealloc_config(config); exit(1); } strncpy(config->raster_column, argv[i], strlen(argv[i]) + 1); } /* filename column */ else if (CSEQUAL(argv[i], "-F")) { config->file_column = 1; } /* filename column name */ else if (CSEQUAL(argv[i], "-n") && i < argc - 1) { config->file_column_name = rtalloc(sizeof(char) * (strlen(argv[++i]) + 1)); if (config->file_column_name == NULL) { rterror(_("Could not allocate memory for storing filename column name")); rtdealloc_config(config); exit(1); } strncpy(config->file_column_name, argv[i], strlen(argv[i]) + 1); config->file_column = 1; } /* overview factors */ else if (CSEQUAL(argv[i], "-l") && i < argc - 1) { elements = strsplit(argv[++i], ",", &n); if (n < 1) { rterror(_("Could not process -l")); rtdealloc_config(config); exit(1); } config->overview_count = n; config->overview = rtalloc(sizeof(int) * n); if (config->overview == NULL) { rterror(_("Could not allocate memory for storing overview factors")); rtdealloc_config(config); exit(1); } for (j = 0; j < n; j++) { char *t = trim(elements[j]); config->overview[j] = atoi(t); rtdealloc(t); rtdealloc(elements[j]); } rtdealloc(elements); elements = NULL; n = 0; for (j = 0; j < config->overview_count; j++) { if (config->overview[j] < MINOVFACTOR || config->overview[j] > MAXOVFACTOR) { rterror(_("Overview factor %d is not between %d and %d"), config->overview[j], MINOVFACTOR, MAXOVFACTOR); rtdealloc_config(config); exit(1); } } } /* quote identifiers */ else if (CSEQUAL(argv[i], "-q")) { config->quoteident = 1; } /* create index */ else if (CSEQUAL(argv[i], "-I")) { config->idx = 1; } /* maintenance */ else if (CSEQUAL(argv[i], "-M")) { config->maintenance = 1; } /* set constraints */ else if (CSEQUAL(argv[i], "-C")) { config->constraints = 1; } /* disable extent constraint */ else if (CSEQUAL(argv[i], "-x")) { config->max_extent = 0; } /* enable regular_blocking */ else if (CSEQUAL(argv[i], "-r")) { config->regular_blocking = 1; } /* tablespace of new table */ else if (CSEQUAL(argv[i], "-T") && i < argc - 1) { config->tablespace = rtalloc(sizeof(char) * (strlen(argv[++i]) + 1)); if (config->tablespace == NULL) { rterror(_("Could not allocate memory for storing tablespace of new table")); rtdealloc_config(config); exit(1); } strncpy(config->tablespace, argv[i], strlen(argv[i]) + 1); } /* tablespace of new index */ else if (CSEQUAL(argv[i], "-X") && i < argc - 1) { config->idx_tablespace = rtalloc(sizeof(char) * (strlen(argv[++i]) + 1)); if (config->idx_tablespace == NULL) { rterror(_("Could not allocate memory for storing tablespace of new indices")); rtdealloc_config(config); exit(1); } strncpy(config->idx_tablespace, argv[i], strlen(argv[i]) + 1); } /* nodata value */ else if (CSEQUAL(argv[i], "-N") && i < argc - 1) { config->hasnodata = 1; config->nodataval = atof(argv[++i]); } /* skip NODATA value check for bands */ else if (CSEQUAL(argv[i], "-k")) { config->skip_nodataval_check = 1; } /* endianness */ else if (CSEQUAL(argv[i], "-E") && i < argc - 1) { config->endian = atoi(argv[++i]); config->endian = 1; } /* version */ else if (CSEQUAL(argv[i], "-V") && i < argc - 1) { config->version = atoi(argv[++i]); config->version = 0; } /* transaction */ else if (CSEQUAL(argv[i], "-e")) { config->transaction = 0; } /* COPY statements */ else if (CSEQUAL(argv[i], "-Y")) { config->copy_statements = 1; } /* GDAL formats */ else if (CSEQUAL(argv[i], "-G")) { uint32_t drv_count = 0; rt_gdaldriver drv_set = rt_raster_gdal_drivers(&drv_count, 0); if (drv_set == NULL || !drv_count) { rterror(_("Could not get list of available GDAL raster formats")); } else { printf(_("Supported GDAL raster formats:\n")); for (j = 0; j < drv_count; j++) { printf(_(" %s\n"), drv_set[j].long_name); rtdealloc(drv_set[j].short_name); rtdealloc(drv_set[j].long_name); rtdealloc(drv_set[j].create_options); } rtdealloc(drv_set); } rtdealloc_config(config); exit(0); } /* help */ else if (CSEQUAL(argv[i], "-?")) { usage(); rtdealloc_config(config); exit(0); } else { config->rt_file_count++; config->rt_file = (char **) rtrealloc(config->rt_file, sizeof(char *) * config->rt_file_count); if (config->rt_file == NULL) { rterror(_("Could not allocate memory for storing raster files")); rtdealloc_config(config); exit(1); } config->rt_file[config->rt_file_count - 1] = rtalloc(sizeof(char) * (strlen(argv[i]) + 1)); if (config->rt_file[config->rt_file_count - 1] == NULL) { rterror(_("Could not allocate memory for storing raster filename")); rtdealloc_config(config); exit(1); } strncpy(config->rt_file[config->rt_file_count - 1], argv[i], strlen(argv[i]) + 1); } } /* register GDAL drivers */ GDALAllRegister(); /* no files provided */ if (!config->rt_file_count) { rterror(_("No raster provided")); rtdealloc_config(config); exit(1); } /* at least two files, see if last is table last isn't recognized by GDAL */ else if (config->rt_file_count > 1) { drv = GDALIdentifyDriver(config->rt_file[config->rt_file_count - 1], NULL); if (drv == NULL) { char *ptr; ptr = strchr(config->rt_file[config->rt_file_count - 1], '.'); /* schema.table */ if (ptr) { config->schema = rtalloc(sizeof(char) * (ptr - config->rt_file[config->rt_file_count - 1] + 1)); if (config->schema == NULL) { rterror(_("Could not allocate memory for storing schema name")); rtdealloc_config(config); exit(1); } snprintf(config->schema, ptr - config->rt_file[config->rt_file_count - 1] + 1, "%s", config->rt_file[config->rt_file_count - 1]); config->schema[ptr - config->rt_file[config->rt_file_count - 1]] = '\0'; config->table = rtalloc(sizeof(char) * (strlen(config->rt_file[config->rt_file_count - 1]) - strlen(config->schema) + 1)); if (config->table == NULL) { rterror(_("Could not allocate memory for storing table name")); rtdealloc_config(config); exit(1); } snprintf(config->table, strlen(config->rt_file[config->rt_file_count - 1]) - strlen(config->schema), "%s", ptr + 1); config->table[strlen(config->rt_file[config->rt_file_count - 1]) - strlen(config->schema)] = '\0'; } /* table */ else { config->table = rtalloc(sizeof(char) * strlen(config->rt_file[config->rt_file_count - 1]) + 1); if (config->table == NULL) { rterror(_("Could not allocate memory for storing table name")); rtdealloc_config(config); exit(1); } strncpy(config->table, config->rt_file[config->rt_file_count - 1], strlen(config->rt_file[config->rt_file_count - 1]) + 1); } rtdealloc(config->rt_file[--(config->rt_file_count)]); config->rt_file = (char **) rtrealloc(config->rt_file, sizeof(char *) * config->rt_file_count); if (config->rt_file == NULL) { rterror(_("Could not reallocate the memory holding raster names")); rtdealloc_config(config); exit(1); } } } /**************************************************************************** * validate raster files ****************************************************************************/ /* check that GDAL recognizes all files */ for (i = 0; i < config->rt_file_count; i++) { drv = GDALIdentifyDriver(config->rt_file[i], NULL); if (drv == NULL) { rterror(_("Unable to read raster file: %s"), config->rt_file[i]); rtdealloc_config(config); exit(1); } } /* process each file for just the filename */ config->rt_filename = (char **) rtalloc(sizeof(char *) * config->rt_file_count); if (config->rt_filename == NULL) { rterror(_("Could not allocate memory for cleaned raster filenames")); rtdealloc_config(config); exit(1); } for (i = 0; i < config->rt_file_count; i++) { char *file; char *ptr; file = rtalloc(sizeof(char) * (strlen(config->rt_file[i]) + 1)); if (file == NULL) { rterror(_("Could not allocate memory for cleaned raster filename")); rtdealloc_config(config); exit(1); } strcpy(file, config->rt_file[i]); for (ptr = file + strlen(file); ptr > file; ptr--) { if (*ptr == '/' || *ptr == '\\') { ptr++; break; } } config->rt_filename[i] = rtalloc(sizeof(char) * (strlen(ptr) + 1)); if (config->rt_filename[i] == NULL) { rterror(_("Could not allocate memory for cleaned raster filename")); rtdealloc_config(config); exit(1); } strcpy(config->rt_filename[i], ptr); rtdealloc(file); } /**************************************************************************** * defaults for table and column names ****************************************************************************/ /* first file as proxy table name */ if (config->table == NULL) { char *file; char *ptr; file = rtalloc(sizeof(char) * (strlen(config->rt_filename[0]) + 1)); if (file == NULL) { rterror(_("Could not allocate memory for proxy table name")); rtdealloc_config(config); exit(1); } strcpy(file, config->rt_filename[0]); for (ptr = file + strlen(file); ptr > file; ptr--) { if (*ptr == '.') { *ptr = '\0'; break; } } config->table = rtalloc(sizeof(char) * (strlen(file) + 1)); if (config->table == NULL) { rterror(_("Could not allocate memory for proxy table name")); rtdealloc_config(config); exit(1); } strcpy(config->table, file); rtdealloc(file); } /* raster_column not specified, default to "rast" */ if (config->raster_column == NULL) { config->raster_column = rtalloc(sizeof(char) * (strlen("rast") + 1)); if (config->raster_column == NULL) { rterror(_("Could not allocate memory for default raster column name")); rtdealloc_config(config); exit(1); } strcpy(config->raster_column, "rast"); } /* file_column_name not specified, default to "filename" */ if (config->file_column_name == NULL) { config->file_column_name = rtalloc(sizeof(char) * (strlen("filename") + 1)); if (config->file_column_name == NULL) { rterror(_("Could not allocate memory for default filename column name")); rtdealloc_config(config); exit(1); } strcpy(config->file_column_name, "filename"); } /**************************************************************************** * literal PostgreSQL identifiers disabled ****************************************************************************/ /* no quotes, lower case everything */ if (!config->quoteident) { if (config->schema != NULL) config->schema = strtolower(config->schema); if (config->table != NULL) config->table = strtolower(config->table); if (config->raster_column != NULL) config->raster_column = strtolower(config->raster_column); if (config->file_column_name != NULL) config->file_column_name = strtolower(config->file_column_name); if (config->tablespace != NULL) config->tablespace = strtolower(config->tablespace); if (config->idx_tablespace != NULL) config->idx_tablespace = strtolower(config->idx_tablespace); } /**************************************************************************** * overview table names ****************************************************************************/ if (config->overview_count) { char factor[4]; config->overview_table = rtalloc(sizeof(char *) * config->overview_count); if (config->overview_table == NULL) { rterror(_("Could not allocate memory for overview table names")); rtdealloc_config(config); exit(1); } for (i = 0; i < config->overview_count; i++) { sprintf(factor, "%d", config->overview[i]); config->overview_table[i] = rtalloc(sizeof(char) * (strlen("o__") + strlen(factor) + strlen(config->table) + 1)); if (config->overview_table[i] == NULL) { rterror(_("Could not allocate memory for overview table name")); rtdealloc_config(config); exit(1); } sprintf(config->overview_table[i], "o_%d_%s", config->overview[i], config->table); } } /**************************************************************************** * check that identifiers won't get truncated ****************************************************************************/ if (config->schema != NULL && strlen(config->schema) > MAXNAMELEN) { rtwarn(_("The schema name \"%s\" may exceed the maximum string length permitted for PostgreSQL identifiers (%d)"), config->schema, MAXNAMELEN ); } if (config->table != NULL && strlen(config->table) > MAXNAMELEN) { rtwarn(_("The table name \"%s\" may exceed the maximum string length permitted for PostgreSQL identifiers (%d)"), config->table, MAXNAMELEN ); } if (config->raster_column != NULL && strlen(config->raster_column) > MAXNAMELEN) { rtwarn(_("The column name \"%s\" may exceed the maximum string length permitted for PostgreSQL identifiers (%d)"), config->raster_column, MAXNAMELEN ); } if (config->file_column_name != NULL && strlen(config->file_column_name) > MAXNAMELEN) { rtwarn(_("The column name \"%s\" may exceed the maximum string length permitted for PostgreSQL identifiers (%d)"), config->file_column_name, MAXNAMELEN ); } if (config->tablespace != NULL && strlen(config->tablespace) > MAXNAMELEN) { rtwarn(_("The tablespace name \"%s\" may exceed the maximum string length permitted for PostgreSQL identifiers (%d)"), config->tablespace, MAXNAMELEN ); } if (config->idx_tablespace != NULL && strlen(config->idx_tablespace) > MAXNAMELEN) { rtwarn(_("The index tablespace name \"%s\" may exceed the maximum string length permitted for PostgreSQL identifiers (%d)"), config->idx_tablespace, MAXNAMELEN ); } if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { if (strlen(config->overview_table[i]) > MAXNAMELEN) { rtwarn(_("The overview table name \"%s\" may exceed the maximum string length permitted for PostgreSQL identifiers (%d)"), config->overview_table[i], MAXNAMELEN ); } } } /**************************************************************************** * double quote identifiers ****************************************************************************/ if (config->schema != NULL) { tmp = rtalloc(sizeof(char) * (strlen(config->schema) + 4)); if (tmp == NULL) { rterror(_("Could not allocate memory for quoting schema name")); rtdealloc_config(config); exit(1); } sprintf(tmp, "\"%s\".", config->schema); rtdealloc(config->schema); config->schema = tmp; } if (config->table != NULL) { tmp = rtalloc(sizeof(char) * (strlen(config->table) + 3)); if (tmp == NULL) { rterror(_("Could not allocate memory for quoting table name")); rtdealloc_config(config); exit(1); } sprintf(tmp, "\"%s\"", config->table); rtdealloc(config->table); config->table = tmp; } if (config->raster_column != NULL) { tmp = rtalloc(sizeof(char) * (strlen(config->raster_column) + 3)); if (tmp == NULL) { rterror(_("Could not allocate memory for quoting raster column name")); rtdealloc_config(config); exit(1); } sprintf(tmp, "\"%s\"", config->raster_column); rtdealloc(config->raster_column); config->raster_column = tmp; } if (config->file_column_name != NULL) { tmp = rtalloc(sizeof(char) * (strlen(config->file_column_name) + 3)); if (tmp == NULL) { rterror(_("Could not allocate memory for quoting raster column name")); rtdealloc_config(config); exit(1); } sprintf(tmp, "\"%s\"", config->file_column_name); rtdealloc(config->file_column_name); config->file_column_name = tmp; } if (config->tablespace != NULL) { tmp = rtalloc(sizeof(char) * (strlen(config->tablespace) + 3)); if (tmp == NULL) { rterror(_("Could not allocate memory for quoting tablespace name")); rtdealloc_config(config); exit(1); } sprintf(tmp, "\"%s\"", config->tablespace); rtdealloc(config->tablespace); config->tablespace = tmp; } if (config->idx_tablespace != NULL) { tmp = rtalloc(sizeof(char) * (strlen(config->idx_tablespace) + 3)); if (tmp == NULL) { rterror(_("Could not allocate memory for quoting index tablespace name")); rtdealloc_config(config); exit(1); } sprintf(tmp, "\"%s\"", config->idx_tablespace); rtdealloc(config->idx_tablespace); config->idx_tablespace = tmp; } if (config->overview_count) { for (i = 0; i < config->overview_count; i++) { tmp = rtalloc(sizeof(char) * (strlen(config->overview_table[i]) + 3)); if (tmp == NULL) { rterror(_("Could not allocate memory for quoting overview table name")); rtdealloc_config(config); exit(1); } sprintf(tmp, "\"%s\"", config->overview_table[i]); rtdealloc(config->overview_table[i]); config->overview_table[i] = tmp; } } /**************************************************************************** * processing of rasters ****************************************************************************/ /* initialize string buffer */ buffer = rtalloc(sizeof(STRINGBUFFER)); if (buffer == NULL) { rterror(_("Could not allocate memory for output string buffer")); rtdealloc_config(config); exit(1); } init_stringbuffer(buffer); /* pass off to processing function */ if (!process_rasters(config, buffer)) { rterror(_("Unable to process rasters")); rtdealloc_stringbuffer(buffer, 1); rtdealloc_config(config); exit(1); } flush_stringbuffer(buffer); rtdealloc_stringbuffer(buffer, 1); rtdealloc_config(config); return 0; } �������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/astyle.sh�������������������������������������������������������������������0000755�0000000�0000000�00000001403�11722777314�015431� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # Run astyle on the code base ready for release # If astyle doesn't exist, exit the script and do nothing echo "FOO" | astyle > /dev/null RET=$? if [ $RET -ne 0 ]; then echo "Could not find astyle - aborting." exit fi RET=`astyle --version 2>&1` if [ "$RET" != "Artistic Style Version 1.23" ]; then echo "Only 1.23 astyle version is 'allowed'" exit fi # Find all "pure" C files in the codebase # - not .in.c used for .sql generation # - not lex.yy.c or wktparse.tab.c as these are generated files CFILES=`find . -name '*.c' -not \( -name '*.in.c' -o -name '*_parse.c' -o -name '*_lex.c' \)` # Run the standard format on the files, and do not # leave .orig files around for altered files. astyle --style=ansi --indent=tab --suffix=none $CFILES �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/TODO������������������������������������������������������������������������0000644�0000000�0000000�00000005105�11725614645�014264� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Id: TODO 9415 2012-03-07 08:17:41Z strk $ == Simple Projects == * ST_AverageDistance(g1 geometry, g2 geometry, nsamples integer) returns double Sum of minimum distances at regular intervals up two geometries, divided by the number of samples. * ST_LatitudeFromText(string) returns float, LongitudeFromText(string) returns float for things like 132W 23' 23", or 45N 23.41232', or 123.14123W, etc, etc, etc. * Port ST_DumpPoints(geometry) to C == Larger projects == -- Complete Curve support -- The LWGEOM construct does not have quite enough space to hold all the typology variants of curves. And it certainly doesn't have enough space for encoding the line interpolation type. Complete curve support would require re-working all the way back into GEOS to support non-linear interpolations in all GEOS calculations, and may never get done. Intermediate curve support requires handling all curve types and stroking them into linear interpolations for hand-off to GEOS functions. Inexact but providing some utility. Current curve support does include indexing and in/out functions but needs much better documentation, particularly about the valid WKT and WKB forms. -- Data Mangling for Performance -- Often geofeatures will be very large, 1000s of vertices, but the use case for the features will only be using a few vertices at a time. For example, an ocean polygon could be huge, but if a map is only zoomed into the coastline, a small portion will be needed. Nonetheless, the database will have to retrieve the whole feature. Similarly, when carrying out spatial joins, retrieving very large features and matching against small features is a bad performance bargain, particularly since large features tend to reside in the TOAST tables, for yet more performance pain. The solution is to cut up the large features into smaller features. Some standard utilities for doing so are required. -- Estimated Extent -- Fast extent estimation based on reading the head of the R-Tree. -- Heat Map / Clustering -- Given a set of points, generate a heat map output. Or, given a set of points, generate a clustering and set of representative points. In general, extract a trend from a collection. -- LIDAR / Point Clouds -- A new object type to hold point cloud information in chunks < page size, filter functions to extract subsets of points from those types based on LIDAR-specific requests ("only return type 1"), and union functions to build complete sets from subsets. Index bindings (likely 3d) for searching. Potentially processing functions to extract surfaces or derived products like contours. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/���������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�015031� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shp2pgsql-gui.rc�����������������������������������������������������0000644�0000000�0000000�00000001224�11312621664�020062� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������id ICON "shp2pgsql-gui.ico" 1 VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "CompanyName", "Open Source Geospatial Consortium" VALUE "FileDescription", "Shape to PostGIS Converter" VALUE "FileVersion", "1.0" VALUE "InternalName", "shp2pgsql-gui" VALUE "LegalCopyright", "Copyright (c) OSGeo" VALUE "OriginalFilename", "shp2pgsql-gui.exe" VALUE "ProductName", "Shp2PgSQL-GUI" VALUE "ProductVersion", "1.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/safileio.c�����������������������������������������������������������0000644�0000000�0000000�00000024137�11722777314�017007� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/****************************************************************************** * $Id: safileio.c,v 1.4 2008-01-16 20:05:14 bram Exp $ * * Project: Shapelib * Purpose: Default implementation of file io based on stdio. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2007, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * 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 or substantial portions of the 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. ****************************************************************************** * * $Log: safileio.c,v $ * Revision 1.4 2008-01-16 20:05:14 bram * Add file hooks that accept UTF-8 encoded filenames on some platforms. Use SASetupUtf8Hooks * tosetup the hooks and check SHPAPI_UTF8_HOOKS for its availability. Currently, this * is only available on the Windows platform that decodes the UTF-8 filenames to wide * character strings and feeds them to _wfopen and _wremove. * * Revision 1.3 2007/12/18 18:28:11 bram * - create hook for client specific atof (bugzilla ticket 1615) * - check for NULL handle before closing cpCPG file, and close after reading. * * Revision 1.2 2007/12/15 20:25:30 bram * dbfopen.c now reads the Code Page information from the DBF file, and exports * this information as a string through the DBFGetCodePage function. This is * either the number from the LDID header field ("LDID/<number>") or as the * content of an accompanying .CPG file. When creating a DBF file, the code can * be set using DBFCreateEx. * * Revision 1.1 2007/12/06 06:56:41 fwarmerdam * new * */ #include "shapefil.h" #include <math.h> #include <limits.h> #include <assert.h> #include <stdlib.h> #include <string.h> #include <stdio.h> SHP_CVSID("$Id: safileio.c,v 1.4 2008-01-16 20:05:14 bram Exp $"); #ifdef SHPAPI_UTF8_HOOKS # ifdef SHPAPI_WINDOWS # define WIN32_LEAN_AND_MEAN # define NOMINMAX # include <windows.h> # pragma comment(lib, "kernel32.lib") # endif #endif /* Local prototypes */ SAFile SADFOpen( const char *pszFilename, const char *pszAccess ); SAOffset SADFRead( void *p, SAOffset size, SAOffset nmemb, SAFile file ); SAOffset SADFWrite( void *p, SAOffset size, SAOffset nmemb, SAFile file ); SAOffset SADFSeek( SAFile file, SAOffset offset, int whence ); SAOffset SADFTell( SAFile file ); int SADFFlush( SAFile file ); int SADFClose( SAFile file ); int SADRemove( const char *filename ); void SADError( const char *message ); /************************************************************************/ /* SADFOpen() */ /************************************************************************/ SAFile SADFOpen( const char *pszFilename, const char *pszAccess ) { return (SAFile) fopen( pszFilename, pszAccess ); } /************************************************************************/ /* SADFRead() */ /************************************************************************/ SAOffset SADFRead( void *p, SAOffset size, SAOffset nmemb, SAFile file ) { return (SAOffset) fread( p, (size_t) size, (size_t) nmemb, (FILE *) file ); } /************************************************************************/ /* SADFWrite() */ /************************************************************************/ SAOffset SADFWrite( void *p, SAOffset size, SAOffset nmemb, SAFile file ) { return (SAOffset) fwrite( p, (size_t) size, (size_t) nmemb, (FILE *) file ); } /************************************************************************/ /* SADFSeek() */ /************************************************************************/ SAOffset SADFSeek( SAFile file, SAOffset offset, int whence ) { #ifdef HAVE_FSEEKO return (SAOffset) fseeko( (FILE *) file, (off_t) offset, whence ); #else return (SAOffset) fseek( (FILE *) file, (long) offset, whence ); #endif } /************************************************************************/ /* SADFTell() */ /************************************************************************/ SAOffset SADFTell( SAFile file ) { #ifdef HAVE_FSEEKO return (SAOffset) ftello( (FILE *) file ); #else return (SAOffset) ftell( (FILE *) file ); #endif } /************************************************************************/ /* SADFFlush() */ /************************************************************************/ int SADFFlush( SAFile file ) { return fflush( (FILE *) file ); } /************************************************************************/ /* SADFClose() */ /************************************************************************/ int SADFClose( SAFile file ) { return fclose( (FILE *) file ); } /************************************************************************/ /* SADFClose() */ /************************************************************************/ int SADRemove( const char *filename ) { return remove( filename ); } /************************************************************************/ /* SADError() */ /************************************************************************/ void SADError( const char *message ) { fprintf( stderr, "%s\n", message ); } /************************************************************************/ /* SASetupDefaultHooks() */ /************************************************************************/ void SASetupDefaultHooks( SAHooks *psHooks ) { psHooks->FOpen = SADFOpen; psHooks->FRead = SADFRead; psHooks->FWrite = SADFWrite; psHooks->FSeek = SADFSeek; psHooks->FTell = SADFTell; psHooks->FFlush = SADFFlush; psHooks->FClose = SADFClose; psHooks->Remove = SADRemove; psHooks->Error = SADError; psHooks->Atof = atof; } #ifdef SHPAPI_WINDOWS /************************************************************************/ /* Utf8ToWideChar */ /************************************************************************/ const wchar_t* Utf8ToWideChar( const char *pszFilename ) { int nMulti, nWide; wchar_t *pwszFileName; nMulti = strlen(pszFilename) + 1; nWide = MultiByteToWideChar( CP_UTF8, 0, pszFilename, nMulti, 0, 0); if( nWide == 0 ) { return NULL; } pwszFileName = (wchar_t*) malloc(nWide * sizeof(wchar_t)); if ( pwszFileName == NULL ) { return NULL; } if( MultiByteToWideChar( CP_UTF8, 0, pszFilename, nMulti, pwszFileName, nWide ) == 0 ) { free( pwszFileName ); return NULL; } return pwszFileName; } /************************************************************************/ /* SAUtf8WFOpen */ /************************************************************************/ SAFile SAUtf8WFOpen( const char *pszFilename, const char *pszAccess ) { SAFile file = NULL; const wchar_t *pwszFileName, *pwszAccess; pwszFileName = Utf8ToWideChar( pszFilename ); pwszAccess = Utf8ToWideChar( pszAccess ); if( pwszFileName != NULL && pwszFileName != NULL) { file = (SAFile) _wfopen( pwszFileName, pwszAccess ); } free ((wchar_t*) pwszFileName); free ((wchar_t*) pwszAccess); return file; } /************************************************************************/ /* SAUtf8WRemove() */ /************************************************************************/ int SAUtf8WRemove( const char *pszFilename ) { const wchar_t *pwszFileName = Utf8ToWideChar( pszFilename ); int rc = -1; if( pwszFileName != NULL ) { rc = _wremove( pwszFileName ); } free ((wchar_t*) pwszFileName); return rc; } #endif #ifdef SHPAPI_UTF8_HOOKS /************************************************************************/ /* SASetupUtf8Hooks() */ /************************************************************************/ void SASetupUtf8Hooks( SAHooks *psHooks ) { #ifdef SHPAPI_WINDOWS psHooks->FOpen = SAUtf8WFOpen; psHooks->Remove = SAUtf8WRemove; #else # error "no implementations of UTF-8 hooks available for this platform" #endif psHooks->FRead = SADFRead; psHooks->FWrite = SADFWrite; psHooks->FSeek = SADFSeek; psHooks->FTell = SADFTell; psHooks->FFlush = SADFFlush; psHooks->FClose = SADFClose; psHooks->Error = SADError; psHooks->Atof = atof; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/README.pgsql2shp�����������������������������������������������������0000644�0000000�0000000�00000006474�11722777314�017656� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pgsql2shp(1) PostGIS pgsql2shp(1) NAME pgsql2shp - postgis to shapefile dumper SYNTAX pgsql2shp [options] database [schema.]table pgsql2shp [options] database query DESCRIPTION The pgsql2shp table dumper connects directly to the database and con- verts a table (possibly created by user query) into a shape file. It is compatible with all versions of PostGIS. Version: 1.1.5 (2006/10/06) USAGE The <database> is the name of the database to connect to. The <table> is the (optionally schema-qualified) table to read spatial data from. Alternatively, you can specify a QUERY whose result will be written into the shapefile. OPTIONS The commandline options are: -f <filename> Write the output to a particular filename. -h <host> The database host to connect to. -p <port> The port to connect to on the database host. -P <password> The password to use when connecting to the database. -u <user> The username to use when connecting to the database. -g <geometry column> In the case of tables with multiple geometry columns, the geome- try column to use when writing the shape file. -b Use a binary cursor. When used on pre-1.0.0 PostGIS versions this will reduce the likelihood of coordinate drift due to con- version to and from WKT format. Coordinate drifts will not occur with PostGIS 1.0.0 and newer versions. It will be slightly faster, but might fail if any NON-gemetry column lacks a cast to text. -r Raw mode. Do not drop the gid field, or escape column names. -d For backward compatibility: write a 3-dimensional shape file when dumping from old (pre-1.0.0) postgis databases (the default is to write a 2-dimensional shape file in that case). Starting from postgis-1.0.0+, dimensions are fully encoded. -k Keep idendifiers case (don't uppercase field names). -? Display version and usage information. INSTALLATION To compile the program from source, simply run "make" in the source directory. Then copy the binary in your shell search path (or wherever you like). This text is also available as a man page in the ../doc/man/ directory, ready for copying it into the manual search path on unixoid systems. EXAMPLES An example session using the dumper to create shape file from a database might look like this: # pgsql2shp -f myfile -p 5555 my_db roads_table AUTHORS Originally written by Jeff Lounsbury <jeffloun@refractions.net>. Improved and maintained by Sandro Santilli <strk@refractions.net>. Includes small contributions and improvements by others. This application uses functionality from shapelib 1.2.9 by Frank Warmerdam <warmerda@gdal.velocet.ca> to write to ESRI Shape files. SEE ALSO shp2pgsql(1) More information is available at http://postgis.refractions.net pgsql2shp(1) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shpopen.c������������������������������������������������������������0000644�0000000�0000000�00000255643�12236025367�016673� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/****************************************************************************** * $Id: shpopen.c 12083 2013-11-04 23:17:11Z pramsey $ * * Project: Shapelib * Purpose: Implementation of core Shapefile read/write functions. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, 2001, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * 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 or substantial portions of the 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. ****************************************************************************** * * $Log: shpopen.c,v $ * Revision 1.70 2011-07-24 05:59:25 fwarmerdam * minimize use of CPLError in favor of SAHooks.Error() * * Revision 1.69 2011-07-24 03:24:22 fwarmerdam * fix memory leaks in error cases creating shapefiles (#2061) * * Revision 1.68 2010-08-27 23:42:52 fwarmerdam * add SHPAPI_CALL attribute in code * * Revision 1.67 2010-07-01 08:15:48 fwarmerdam * do not error out on an object with zero vertices * * Revision 1.66 2010-07-01 07:58:57 fwarmerdam * minor cleanup of error handling * * Revision 1.65 2010-07-01 07:27:13 fwarmerdam * white space formatting adjustments * * Revision 1.64 2010-01-28 11:34:34 fwarmerdam * handle the shape file length limits more gracefully (#3236) * * Revision 1.63 2010-01-28 04:04:40 fwarmerdam * improve numerical accuracy of SHPRewind() algs (gdal #3363) * * Revision 1.62 2010-01-17 05:34:13 fwarmerdam * Remove asserts on x/y being null (#2148). * * Revision 1.61 2010-01-16 05:07:42 fwarmerdam * allow 0/nulls in shpcreateobject (#2148) * * Revision 1.60 2009-09-17 20:50:02 bram * on Win32, define snprintf as alias to _snprintf * * Revision 1.59 2008-03-14 05:25:31 fwarmerdam * Correct crash on buggy geometries (gdal #2218) * * Revision 1.58 2008/01/08 23:28:26 bram * on line 2095, use a float instead of a double to avoid a compiler warning * * Revision 1.57 2007/12/06 07:00:25 fwarmerdam * dbfopen now using SAHooks for fileio * * Revision 1.56 2007/12/04 20:37:56 fwarmerdam * preliminary implementation of hooks api for io and errors * * Revision 1.55 2007/11/21 22:39:56 fwarmerdam * close shx file in readonly mode (GDAL #1956) * * Revision 1.54 2007/11/15 00:12:47 mloskot * Backported recent changes from GDAL (Ticket #1415) to Shapelib. * * Revision 1.53 2007/11/14 22:31:08 fwarmerdam * checks after mallocs to detect for corrupted/voluntary broken shapefiles. * http://trac.osgeo.org/gdal/ticket/1991 * * Revision 1.52 2007/06/21 15:58:33 fwarmerdam * fix for SHPRewindObject when rings touch at one vertex (gdal #976) * * Revision 1.51 2006/09/04 15:24:01 fwarmerdam * Fixed up log message for 1.49. * * Revision 1.50 2006/09/04 15:21:39 fwarmerdam * fix of last fix * * Revision 1.49 2006/09/04 15:21:00 fwarmerdam * MLoskot: Added stronger test of Shapefile reading failures, e.g. truncated * files. The problem was discovered by Tim Sutton and reported here * https://svn.qgis.org/trac/ticket/200 * * Revision 1.48 2006/01/26 15:07:32 fwarmerdam * add bMeasureIsUsed flag from Craig Bruce: Bug 1249 * * Revision 1.47 2006/01/04 20:07:23 fwarmerdam * In SHPWriteObject() make sure that the record length is updated * when rewriting an existing record. * * Revision 1.46 2005/02/11 17:17:46 fwarmerdam * added panPartStart[0] validation * * Revision 1.45 2004/09/26 20:09:48 fwarmerdam * const correctness changes * * Revision 1.44 2003/12/29 00:18:39 fwarmerdam * added error checking for failed IO and optional CPL error reporting * * Revision 1.43 2003/12/01 16:20:08 warmerda * be careful of zero vertex shapes * * Revision 1.42 2003/12/01 14:58:27 warmerda * added degenerate object check in SHPRewindObject() * * Revision 1.41 2003/07/08 15:22:43 warmerda * avoid warning * * Revision 1.40 2003/04/21 18:30:37 warmerda * added header write/update public methods * * Revision 1.39 2002/08/26 06:46:56 warmerda * avoid c++ comments * * Revision 1.38 2002/05/07 16:43:39 warmerda * Removed debugging printf. * * Revision 1.37 2002/04/10 17:35:22 warmerda * fixed bug in ring reversal code * * Revision 1.36 2002/04/10 16:59:54 warmerda * added SHPRewindObject * * Revision 1.35 2001/12/07 15:10:44 warmerda * fix if .shx fails to open * * Revision 1.34 2001/11/01 16:29:55 warmerda * move pabyRec into SHPInfo for thread safety * * Revision 1.33 2001/07/03 12:18:15 warmerda * Improved cleanup if SHX not found, provied by Riccardo Cohen. * * Revision 1.32 2001/06/22 01:58:07 warmerda * be more careful about establishing initial bounds in face of NULL shapes * * Revision 1.31 2001/05/31 19:35:29 warmerda * added support for writing null shapes * * Revision 1.30 2001/05/28 12:46:29 warmerda * Add some checking on reasonableness of record count when opening. * * Revision 1.29 2001/05/23 13:36:52 warmerda * added use of SHPAPI_CALL * * Revision 1.28 2001/02/06 22:25:06 warmerda * fixed memory leaks when SHPOpen() fails * * Revision 1.27 2000/07/18 15:21:33 warmerda * added better enforcement of -1 for append in SHPWriteObject * * Revision 1.26 2000/02/16 16:03:51 warmerda * added null shape support * * Revision 1.25 1999/12/15 13:47:07 warmerda * Fixed record size settings in .shp file (was 4 words too long) * Added stdlib.h. * * Revision 1.24 1999/11/05 14:12:04 warmerda * updated license terms * * Revision 1.23 1999/07/27 00:53:46 warmerda * added support for rewriting shapes * * Revision 1.22 1999/06/11 19:19:11 warmerda * Cleanup pabyRec static buffer on SHPClose(). * * Revision 1.21 1999/06/02 14:57:56 kshih * Remove unused variables * * Revision 1.20 1999/04/19 21:04:17 warmerda * Fixed syntax error. * * Revision 1.19 1999/04/19 21:01:57 warmerda * Force access string to binary in SHPOpen(). * * Revision 1.18 1999/04/01 18:48:07 warmerda * Try upper case extensions if lower case doesn't work. * * Revision 1.17 1998/12/31 15:29:39 warmerda * Disable writing measure values to multipatch objects if * DISABLE_MULTIPATCH_MEASURE is defined. * * Revision 1.16 1998/12/16 05:14:33 warmerda * Added support to write MULTIPATCH. Fixed reading Z coordinate of * MULTIPATCH. Fixed record size written for all feature types. * * Revision 1.15 1998/12/03 16:35:29 warmerda * r+b is proper binary access string, not rb+. * * Revision 1.14 1998/12/03 15:47:56 warmerda * Fixed setting of nVertices in SHPCreateObject(). * * Revision 1.13 1998/12/03 15:33:54 warmerda * Made SHPCalculateExtents() separately callable. * * Revision 1.12 1998/11/11 20:01:50 warmerda * Fixed bug writing ArcM/Z, and PolygonM/Z for big endian machines. * * Revision 1.11 1998/11/09 20:56:44 warmerda * Fixed up handling of file wide bounds. * * Revision 1.10 1998/11/09 20:18:51 warmerda * Converted to support 3D shapefiles, and use of SHPObject. * * Revision 1.9 1998/02/24 15:09:05 warmerda * Fixed memory leak. * * Revision 1.8 1997/12/04 15:40:29 warmerda * Fixed byte swapping of record number, and record length fields in the * .shp file. * * Revision 1.7 1995/10/21 03:15:58 warmerda * Added support for binary file access, the magic cookie 9997 * and tried to improve the uint32 selection logic for 16bit systems. * * Revision 1.6 1995/09/04 04:19:41 warmerda * Added fix for file bounds. * * Revision 1.5 1995/08/25 15:16:44 warmerda * Fixed a couple of problems with big endian systems ... one with bounds * and the other with multipart polygons. * * Revision 1.4 1995/08/24 18:10:17 warmerda * Switch to use SfRealloc() to avoid problems with pre-ANSI realloc() * functions (such as on the Sun). * * Revision 1.3 1995/08/23 02:23:15 warmerda * Added support for reading bounds, and fixed up problems in setting the * file wide bounds. * * Revision 1.2 1995/08/04 03:16:57 warmerda * Added header. * */ #include "shapefil.h" #include <math.h> #include <limits.h> #include <assert.h> #include <stdlib.h> #include <string.h> #include <stdio.h> SHP_CVSID("$Id: shpopen.c 12083 2013-11-04 23:17:11Z pramsey $") typedef unsigned char uchar; #if UINT_MAX == 65535 typedef unsigned long uint32; #else typedef unsigned int uint32; #endif #ifndef FALSE # define FALSE 0 # define TRUE 1 #endif #define ByteCopy( a, b, c ) memcpy( b, a, c ) #ifndef MAX # define MIN(a,b) ((a<b) ? a : b) # define MAX(a,b) ((a>b) ? a : b) #endif #if defined(WIN32) || defined(_WIN32) # ifndef snprintf # define snprintf _snprintf # endif #endif static int bBigEndian; /************************************************************************/ /* SwapWord() */ /* */ /* Swap a 2, 4 or 8 byte word. */ /************************************************************************/ static void SwapWord( int length, void * wordP ) { int i; uchar temp; for( i=0; i < length/2; i++ ) { temp = ((uchar *) wordP)[i]; ((uchar *)wordP)[i] = ((uchar *) wordP)[length-i-1]; ((uchar *) wordP)[length-i-1] = temp; } } /************************************************************************/ /* SfRealloc() */ /* */ /* A realloc cover function that will access a NULL pointer as */ /* a valid input. */ /************************************************************************/ static void * SfRealloc( void * pMem, int nNewSize ) { if( pMem == NULL ) return( (void *) malloc(nNewSize) ); else return( (void *) realloc(pMem,nNewSize) ); } /************************************************************************/ /* SHPWriteHeader() */ /* */ /* Write out a header for the .shp and .shx files as well as the */ /* contents of the index (.shx) file. */ /************************************************************************/ void SHPAPI_CALL SHPWriteHeader( SHPHandle psSHP ) { uchar abyHeader[100]; int i; uint32 i32; double dValue; uint32 *panSHX; if (psSHP->fpSHX == NULL) { psSHP->sHooks.Error( "SHPWriteHeader failed : SHX file is closed"); return; } /* -------------------------------------------------------------------- */ /* Prepare header block for .shp file. */ /* -------------------------------------------------------------------- */ for( i = 0; i < 100; i++ ) abyHeader[i] = 0; abyHeader[2] = 0x27; /* magic cookie */ abyHeader[3] = 0x0a; i32 = psSHP->nFileSize/2; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); i32 = 1000; /* version */ ByteCopy( &i32, abyHeader+28, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+28 ); i32 = psSHP->nShapeType; /* shape type */ ByteCopy( &i32, abyHeader+32, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+32 ); dValue = psSHP->adBoundsMin[0]; /* set bounds */ ByteCopy( &dValue, abyHeader+36, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+36 ); dValue = psSHP->adBoundsMin[1]; ByteCopy( &dValue, abyHeader+44, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+44 ); dValue = psSHP->adBoundsMax[0]; ByteCopy( &dValue, abyHeader+52, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+52 ); dValue = psSHP->adBoundsMax[1]; ByteCopy( &dValue, abyHeader+60, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+60 ); dValue = psSHP->adBoundsMin[2]; /* z */ ByteCopy( &dValue, abyHeader+68, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+68 ); dValue = psSHP->adBoundsMax[2]; ByteCopy( &dValue, abyHeader+76, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+76 ); dValue = psSHP->adBoundsMin[3]; /* m */ ByteCopy( &dValue, abyHeader+84, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+84 ); dValue = psSHP->adBoundsMax[3]; ByteCopy( &dValue, abyHeader+92, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+92 ); /* -------------------------------------------------------------------- */ /* Write .shp file header. */ /* -------------------------------------------------------------------- */ if( psSHP->sHooks.FSeek( psSHP->fpSHP, 0, 0 ) != 0 || psSHP->sHooks.FWrite( abyHeader, 100, 1, psSHP->fpSHP ) != 1 ) { psSHP->sHooks.Error( "Failure writing .shp header" ); return; } /* -------------------------------------------------------------------- */ /* Prepare, and write .shx file header. */ /* -------------------------------------------------------------------- */ i32 = (psSHP->nRecords * 2 * sizeof(uint32) + 100)/2; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); if( psSHP->sHooks.FSeek( psSHP->fpSHX, 0, 0 ) != 0 || psSHP->sHooks.FWrite( abyHeader, 100, 1, psSHP->fpSHX ) != 1 ) { psSHP->sHooks.Error( "Failure writing .shx header" ); return; } /* -------------------------------------------------------------------- */ /* Write out the .shx contents. */ /* -------------------------------------------------------------------- */ panSHX = (uint32 *) malloc(sizeof(uint32) * 2 * psSHP->nRecords); for( i = 0; i < psSHP->nRecords; i++ ) { panSHX[i*2 ] = psSHP->panRecOffset[i]/2; panSHX[i*2+1] = psSHP->panRecSize[i]/2; if( !bBigEndian ) SwapWord( 4, panSHX+i*2 ); if( !bBigEndian ) SwapWord( 4, panSHX+i*2+1 ); } if( (int)psSHP->sHooks.FWrite( panSHX, sizeof(uint32)*2, psSHP->nRecords, psSHP->fpSHX ) != psSHP->nRecords ) { psSHP->sHooks.Error( "Failure writing .shx contents" ); } free( panSHX ); /* -------------------------------------------------------------------- */ /* Flush to disk. */ /* -------------------------------------------------------------------- */ psSHP->sHooks.FFlush( psSHP->fpSHP ); psSHP->sHooks.FFlush( psSHP->fpSHX ); } /************************************************************************/ /* SHPOpen() */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPOpen( const char * pszLayer, const char * pszAccess ) { SAHooks sHooks; SASetupDefaultHooks( &sHooks ); return SHPOpenLL( pszLayer, pszAccess, &sHooks ); } /************************************************************************/ /* SHPOpen() */ /* */ /* Open the .shp and .shx files based on the basename of the */ /* files or either file name. */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPOpenLL( const char * pszLayer, const char * pszAccess, SAHooks *psHooks ) { char *pszFullname, *pszBasename; SHPHandle psSHP; uchar *pabyBuf; int i; double dValue; /* -------------------------------------------------------------------- */ /* Ensure the access string is one of the legal ones. We */ /* ensure the result string indicates binary to avoid common */ /* problems on Windows. */ /* -------------------------------------------------------------------- */ if( strcmp(pszAccess,"rb+") == 0 || strcmp(pszAccess,"r+b") == 0 || strcmp(pszAccess,"r+") == 0 ) pszAccess = "r+b"; else pszAccess = "rb"; /* -------------------------------------------------------------------- */ /* Establish the byte order on this machine. */ /* -------------------------------------------------------------------- */ i = 1; if( *((uchar *) &i) == 1 ) bBigEndian = FALSE; else bBigEndian = TRUE; /* -------------------------------------------------------------------- */ /* Initialize the info structure. */ /* -------------------------------------------------------------------- */ psSHP = (SHPHandle) calloc(sizeof(SHPInfo),1); psSHP->bUpdated = FALSE; memcpy( &(psSHP->sHooks), psHooks, sizeof(SAHooks) ); /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszLayer)+5); strcpy( pszBasename, pszLayer ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; /* -------------------------------------------------------------------- */ /* Open the .shp and .shx files. Note that files pulled from */ /* a PC to Unix with upper case filenames won't work! */ /* -------------------------------------------------------------------- */ pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.shp", pszBasename ) ; psSHP->fpSHP = psSHP->sHooks.FOpen(pszFullname, pszAccess ); if( psSHP->fpSHP == NULL ) { sprintf( pszFullname, "%s.SHP", pszBasename ); psSHP->fpSHP = psSHP->sHooks.FOpen(pszFullname, pszAccess ); } if( psSHP->fpSHP == NULL ) { char *pszMessage = (char *) malloc(strlen(pszBasename)*2+256); sprintf( pszMessage, "Unable to open %s.shp or %s.SHP.", pszBasename, pszBasename ); psHooks->Error( pszMessage ); free( pszMessage ); free( psSHP ); free( pszBasename ); free( pszFullname ); return( NULL ); } sprintf( pszFullname, "%s.shx", pszBasename ); psSHP->fpSHX = psSHP->sHooks.FOpen(pszFullname, pszAccess ); if( psSHP->fpSHX == NULL ) { sprintf( pszFullname, "%s.SHX", pszBasename ); psSHP->fpSHX = psSHP->sHooks.FOpen(pszFullname, pszAccess ); } if( psSHP->fpSHX == NULL ) { char *pszMessage = (char *) malloc(strlen(pszBasename)*2+256); sprintf( pszMessage, "Unable to open %s.shx or %s.SHX.", pszBasename, pszBasename ); psHooks->Error( pszMessage ); free( pszMessage ); psSHP->sHooks.FClose( psSHP->fpSHP ); free( psSHP ); free( pszBasename ); free( pszFullname ); return( NULL ); } free( pszFullname ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Read the file size from the SHP file. */ /* -------------------------------------------------------------------- */ pabyBuf = (uchar *) malloc(100); psSHP->sHooks.FRead( pabyBuf, 100, 1, psSHP->fpSHP ); psSHP->nFileSize = ((unsigned int)pabyBuf[24] * 256 * 256 * 256 + (unsigned int)pabyBuf[25] * 256 * 256 + (unsigned int)pabyBuf[26] * 256 + (unsigned int)pabyBuf[27]) * 2; /* -------------------------------------------------------------------- */ /* Read SHX file Header info */ /* -------------------------------------------------------------------- */ if( psSHP->sHooks.FRead( pabyBuf, 100, 1, psSHP->fpSHX ) != 1 || pabyBuf[0] != 0 || pabyBuf[1] != 0 || pabyBuf[2] != 0x27 || (pabyBuf[3] != 0x0a && pabyBuf[3] != 0x0d) ) { psSHP->sHooks.Error( ".shx file is unreadable, or corrupt." ); psSHP->sHooks.FClose( psSHP->fpSHP ); psSHP->sHooks.FClose( psSHP->fpSHX ); free( psSHP ); return( NULL ); } psSHP->nRecords = pabyBuf[27] + pabyBuf[26] * 256 + pabyBuf[25] * 256 * 256 + pabyBuf[24] * 256 * 256 * 256; psSHP->nRecords = (psSHP->nRecords*2 - 100) / 8; psSHP->nShapeType = pabyBuf[32]; if( psSHP->nRecords < 0 || psSHP->nRecords > 256000000 ) { char szError[200]; sprintf( szError, "Record count in .shp header is %d, which seems\n" "unreasonable. Assuming header is corrupt.", psSHP->nRecords ); psSHP->sHooks.Error( szError ); psSHP->sHooks.FClose( psSHP->fpSHP ); psSHP->sHooks.FClose( psSHP->fpSHX ); free( psSHP ); free(pabyBuf); return( NULL ); } /* -------------------------------------------------------------------- */ /* Read the bounds. */ /* -------------------------------------------------------------------- */ if( bBigEndian ) SwapWord( 8, pabyBuf+36 ); memcpy( &dValue, pabyBuf+36, 8 ); psSHP->adBoundsMin[0] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+44 ); memcpy( &dValue, pabyBuf+44, 8 ); psSHP->adBoundsMin[1] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+52 ); memcpy( &dValue, pabyBuf+52, 8 ); psSHP->adBoundsMax[0] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+60 ); memcpy( &dValue, pabyBuf+60, 8 ); psSHP->adBoundsMax[1] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+68 ); /* z */ memcpy( &dValue, pabyBuf+68, 8 ); psSHP->adBoundsMin[2] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+76 ); memcpy( &dValue, pabyBuf+76, 8 ); psSHP->adBoundsMax[2] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+84 ); /* z */ memcpy( &dValue, pabyBuf+84, 8 ); psSHP->adBoundsMin[3] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+92 ); memcpy( &dValue, pabyBuf+92, 8 ); psSHP->adBoundsMax[3] = dValue; free( pabyBuf ); /* -------------------------------------------------------------------- */ /* Read the .shx file to get the offsets to each record in */ /* the .shp file. */ /* -------------------------------------------------------------------- */ psSHP->nMaxRecords = psSHP->nRecords; psSHP->panRecOffset = (unsigned int *) malloc(sizeof(unsigned int) * MAX(1,psSHP->nMaxRecords) ); psSHP->panRecSize = (unsigned int *) malloc(sizeof(unsigned int) * MAX(1,psSHP->nMaxRecords) ); pabyBuf = (uchar *) malloc(8 * MAX(1,psSHP->nRecords) ); if (psSHP->panRecOffset == NULL || psSHP->panRecSize == NULL || pabyBuf == NULL) { char szError[200]; sprintf(szError, "Not enough memory to allocate requested memory (nRecords=%d).\n" "Probably broken SHP file", psSHP->nRecords ); psSHP->sHooks.Error( szError ); psSHP->sHooks.FClose( psSHP->fpSHP ); psSHP->sHooks.FClose( psSHP->fpSHX ); if (psSHP->panRecOffset) free( psSHP->panRecOffset ); if (psSHP->panRecSize) free( psSHP->panRecSize ); if (pabyBuf) free( pabyBuf ); free( psSHP ); return( NULL ); } if( (int) psSHP->sHooks.FRead( pabyBuf, 8, psSHP->nRecords, psSHP->fpSHX ) != psSHP->nRecords ) { char szError[200]; sprintf( szError, "Failed to read all values for %d records in .shx file.", psSHP->nRecords ); psSHP->sHooks.Error( szError ); /* SHX is short or unreadable for some reason. */ psSHP->sHooks.FClose( psSHP->fpSHP ); psSHP->sHooks.FClose( psSHP->fpSHX ); free( psSHP->panRecOffset ); free( psSHP->panRecSize ); free( pabyBuf ); free( psSHP ); return( NULL ); } /* In read-only mode, we can close the SHX now */ if (strcmp(pszAccess, "rb") == 0) { psSHP->sHooks.FClose( psSHP->fpSHX ); psSHP->fpSHX = NULL; } for( i = 0; i < psSHP->nRecords; i++ ) { uint32 nOffset, nLength; memcpy( &nOffset, pabyBuf + i * 8, 4 ); if( !bBigEndian ) SwapWord( 4, &nOffset ); memcpy( &nLength, pabyBuf + i * 8 + 4, 4 ); if( !bBigEndian ) SwapWord( 4, &nLength ); psSHP->panRecOffset[i] = nOffset*2; psSHP->panRecSize[i] = nLength*2; } free( pabyBuf ); return( psSHP ); } /************************************************************************/ /* SHPClose() */ /* */ /* Close the .shp and .shx files. */ /************************************************************************/ void SHPAPI_CALL SHPClose(SHPHandle psSHP ) { if( psSHP == NULL ) return; /* -------------------------------------------------------------------- */ /* Update the header if we have modified anything. */ /* -------------------------------------------------------------------- */ if( psSHP->bUpdated ) SHPWriteHeader( psSHP ); /* -------------------------------------------------------------------- */ /* Free all resources, and close files. */ /* -------------------------------------------------------------------- */ free( psSHP->panRecOffset ); free( psSHP->panRecSize ); if ( psSHP->fpSHX != NULL) psSHP->sHooks.FClose( psSHP->fpSHX ); psSHP->sHooks.FClose( psSHP->fpSHP ); if( psSHP->pabyRec != NULL ) { free( psSHP->pabyRec ); } free( psSHP ); } /************************************************************************/ /* SHPGetInfo() */ /* */ /* Fetch general information about the shape file. */ /************************************************************************/ void SHPAPI_CALL SHPGetInfo(SHPHandle psSHP, int * pnEntities, int * pnShapeType, double * padfMinBound, double * padfMaxBound ) { int i; if( psSHP == NULL ) return; if( pnEntities != NULL ) *pnEntities = psSHP->nRecords; if( pnShapeType != NULL ) *pnShapeType = psSHP->nShapeType; for( i = 0; i < 4; i++ ) { if( padfMinBound != NULL ) padfMinBound[i] = psSHP->adBoundsMin[i]; if( padfMaxBound != NULL ) padfMaxBound[i] = psSHP->adBoundsMax[i]; } } /************************************************************************/ /* SHPCreate() */ /* */ /* Create a new shape file and return a handle to the open */ /* shape file with read/write access. */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPCreate( const char * pszLayer, int nShapeType ) { SAHooks sHooks; SASetupDefaultHooks( &sHooks ); return SHPCreateLL( pszLayer, nShapeType, &sHooks ); } /************************************************************************/ /* SHPCreate() */ /* */ /* Create a new shape file and return a handle to the open */ /* shape file with read/write access. */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPCreateLL( const char * pszLayer, int nShapeType, SAHooks *psHooks ) { char *pszBasename = NULL, *pszFullname = NULL; int i; SAFile fpSHP = NULL, fpSHX = NULL; uchar abyHeader[100]; uint32 i32; double dValue; /* -------------------------------------------------------------------- */ /* Establish the byte order on this system. */ /* -------------------------------------------------------------------- */ i = 1; if( *((uchar *) &i) == 1 ) bBigEndian = FALSE; else bBigEndian = TRUE; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszLayer)+5); strcpy( pszBasename, pszLayer ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; /* -------------------------------------------------------------------- */ /* Open the two files so we can write their headers. */ /* -------------------------------------------------------------------- */ pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.shp", pszBasename ); fpSHP = psHooks->FOpen(pszFullname, "wb" ); if( fpSHP == NULL ) { psHooks->Error( "Failed to create file .shp file." ); goto error; } sprintf( pszFullname, "%s.shx", pszBasename ); fpSHX = psHooks->FOpen(pszFullname, "wb" ); if( fpSHX == NULL ) { psHooks->Error( "Failed to create file .shx file." ); goto error; } free( pszFullname ); pszFullname = NULL; free( pszBasename ); pszBasename = NULL; /* -------------------------------------------------------------------- */ /* Prepare header block for .shp file. */ /* -------------------------------------------------------------------- */ for( i = 0; i < 100; i++ ) abyHeader[i] = 0; abyHeader[2] = 0x27; /* magic cookie */ abyHeader[3] = 0x0a; i32 = 50; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); i32 = 1000; /* version */ ByteCopy( &i32, abyHeader+28, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+28 ); i32 = nShapeType; /* shape type */ ByteCopy( &i32, abyHeader+32, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+32 ); dValue = 0.0; /* set bounds */ ByteCopy( &dValue, abyHeader+36, 8 ); ByteCopy( &dValue, abyHeader+44, 8 ); ByteCopy( &dValue, abyHeader+52, 8 ); ByteCopy( &dValue, abyHeader+60, 8 ); /* -------------------------------------------------------------------- */ /* Write .shp file header. */ /* -------------------------------------------------------------------- */ if( psHooks->FWrite( abyHeader, 100, 1, fpSHP ) != 1 ) { psHooks->Error( "Failed to write .shp header." ); goto error; } /* -------------------------------------------------------------------- */ /* Prepare, and write .shx file header. */ /* -------------------------------------------------------------------- */ i32 = 50; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); if( psHooks->FWrite( abyHeader, 100, 1, fpSHX ) != 1 ) { psHooks->Error( "Failed to write .shx header." ); goto error; } /* -------------------------------------------------------------------- */ /* Close the files, and then open them as regular existing files. */ /* -------------------------------------------------------------------- */ psHooks->FClose( fpSHP ); psHooks->FClose( fpSHX ); return( SHPOpenLL( pszLayer, "r+b", psHooks ) ); error: if (pszFullname) free(pszFullname); if (pszBasename) free(pszBasename); if (fpSHP) psHooks->FClose( fpSHP ); if (fpSHX) psHooks->FClose( fpSHX ); return NULL; } /************************************************************************/ /* _SHPSetBounds() */ /* */ /* Compute a bounds rectangle for a shape, and set it into the */ /* indicated location in the record. */ /************************************************************************/ static void _SHPSetBounds( uchar * pabyRec, SHPObject * psShape ) { ByteCopy( &(psShape->dfXMin), pabyRec + 0, 8 ); ByteCopy( &(psShape->dfYMin), pabyRec + 8, 8 ); ByteCopy( &(psShape->dfXMax), pabyRec + 16, 8 ); ByteCopy( &(psShape->dfYMax), pabyRec + 24, 8 ); if( bBigEndian ) { SwapWord( 8, pabyRec + 0 ); SwapWord( 8, pabyRec + 8 ); SwapWord( 8, pabyRec + 16 ); SwapWord( 8, pabyRec + 24 ); } } /************************************************************************/ /* SHPComputeExtents() */ /* */ /* Recompute the extents of a shape. Automatically done by */ /* SHPCreateObject(). */ /************************************************************************/ void SHPAPI_CALL SHPComputeExtents( SHPObject * psObject ) { int i; /* -------------------------------------------------------------------- */ /* Build extents for this object. */ /* -------------------------------------------------------------------- */ if( psObject->nVertices > 0 ) { psObject->dfXMin = psObject->dfXMax = psObject->padfX[0]; psObject->dfYMin = psObject->dfYMax = psObject->padfY[0]; psObject->dfZMin = psObject->dfZMax = psObject->padfZ[0]; psObject->dfMMin = psObject->dfMMax = psObject->padfM[0]; } for( i = 0; i < psObject->nVertices; i++ ) { psObject->dfXMin = MIN(psObject->dfXMin, psObject->padfX[i]); psObject->dfYMin = MIN(psObject->dfYMin, psObject->padfY[i]); psObject->dfZMin = MIN(psObject->dfZMin, psObject->padfZ[i]); psObject->dfMMin = MIN(psObject->dfMMin, psObject->padfM[i]); psObject->dfXMax = MAX(psObject->dfXMax, psObject->padfX[i]); psObject->dfYMax = MAX(psObject->dfYMax, psObject->padfY[i]); psObject->dfZMax = MAX(psObject->dfZMax, psObject->padfZ[i]); psObject->dfMMax = MAX(psObject->dfMMax, psObject->padfM[i]); } } /************************************************************************/ /* SHPCreateObject() */ /* */ /* Create a shape object. It should be freed with */ /* SHPDestroyObject(). */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPCreateObject( int nSHPType, int nShapeId, int nParts, const int * panPartStart, const int * panPartType, int nVertices, const double *padfX, const double *padfY, const double * padfZ, const double * padfM ) { SHPObject *psObject; int i, bHasM, bHasZ; psObject = (SHPObject *) calloc(1,sizeof(SHPObject)); psObject->nSHPType = nSHPType; psObject->nShapeId = nShapeId; psObject->bMeasureIsUsed = FALSE; /* -------------------------------------------------------------------- */ /* Establish whether this shape type has M, and Z values. */ /* -------------------------------------------------------------------- */ if( nSHPType == SHPT_ARCM || nSHPType == SHPT_POINTM || nSHPType == SHPT_POLYGONM || nSHPType == SHPT_MULTIPOINTM ) { bHasM = TRUE; bHasZ = FALSE; } else if( nSHPType == SHPT_ARCZ || nSHPType == SHPT_POINTZ || nSHPType == SHPT_POLYGONZ || nSHPType == SHPT_MULTIPOINTZ || nSHPType == SHPT_MULTIPATCH ) { bHasM = TRUE; bHasZ = TRUE; } else { bHasM = FALSE; bHasZ = FALSE; } /* -------------------------------------------------------------------- */ /* Capture parts. Note that part type is optional, and */ /* defaults to ring. */ /* -------------------------------------------------------------------- */ if( nSHPType == SHPT_ARC || nSHPType == SHPT_POLYGON || nSHPType == SHPT_ARCM || nSHPType == SHPT_POLYGONM || nSHPType == SHPT_ARCZ || nSHPType == SHPT_POLYGONZ || nSHPType == SHPT_MULTIPATCH ) { psObject->nParts = MAX(1,nParts); psObject->panPartStart = (int *) calloc(sizeof(int), psObject->nParts); psObject->panPartType = (int *) malloc(sizeof(int) * psObject->nParts); psObject->panPartStart[0] = 0; psObject->panPartType[0] = SHPP_RING; for( i = 0; i < nParts; i++ ) { if( psObject->panPartStart != NULL ) psObject->panPartStart[i] = panPartStart[i]; if( panPartType != NULL ) psObject->panPartType[i] = panPartType[i]; else psObject->panPartType[i] = SHPP_RING; } if( psObject->panPartStart[0] != 0 ) psObject->panPartStart[0] = 0; } /* -------------------------------------------------------------------- */ /* Capture vertices. Note that X, Y, Z and M are optional. */ /* -------------------------------------------------------------------- */ if( nVertices > 0 ) { psObject->padfX = (double *) calloc(sizeof(double),nVertices); psObject->padfY = (double *) calloc(sizeof(double),nVertices); psObject->padfZ = (double *) calloc(sizeof(double),nVertices); psObject->padfM = (double *) calloc(sizeof(double),nVertices); for( i = 0; i < nVertices; i++ ) { if( padfX != NULL ) psObject->padfX[i] = padfX[i]; if( padfY != NULL ) psObject->padfY[i] = padfY[i]; if( padfZ != NULL && bHasZ ) psObject->padfZ[i] = padfZ[i]; if( padfM != NULL && bHasM ) psObject->padfM[i] = padfM[i]; } if( padfM != NULL && bHasM ) psObject->bMeasureIsUsed = TRUE; } /* -------------------------------------------------------------------- */ /* Compute the extents. */ /* -------------------------------------------------------------------- */ psObject->nVertices = nVertices; SHPComputeExtents( psObject ); return( psObject ); } /************************************************************************/ /* SHPCreateSimpleObject() */ /* */ /* Create a simple (common) shape object. Destroy with */ /* SHPDestroyObject(). */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPCreateSimpleObject( int nSHPType, int nVertices, const double * padfX, const double * padfY, const double * padfZ ) { return( SHPCreateObject( nSHPType, -1, 0, NULL, NULL, nVertices, padfX, padfY, padfZ, NULL ) ); } /************************************************************************/ /* SHPWriteObject() */ /* */ /* Write out the vertices of a new structure. Note that it is */ /* only possible to write vertices at the end of the file. */ /************************************************************************/ int SHPAPI_CALL SHPWriteObject(SHPHandle psSHP, int nShapeId, SHPObject * psObject ) { unsigned int nRecordOffset, nRecordSize=0; int i; uchar *pabyRec; uint32 i32; psSHP->bUpdated = TRUE; /* -------------------------------------------------------------------- */ /* Ensure that shape object matches the type of the file it is */ /* being written to. */ /* -------------------------------------------------------------------- */ assert( psObject->nSHPType == psSHP->nShapeType || psObject->nSHPType == SHPT_NULL ); /* -------------------------------------------------------------------- */ /* Ensure that -1 is used for appends. Either blow an */ /* assertion, or if they are disabled, set the shapeid to -1 */ /* for appends. */ /* -------------------------------------------------------------------- */ assert( nShapeId == -1 || (nShapeId >= 0 && nShapeId < psSHP->nRecords) ); if( nShapeId != -1 && nShapeId >= psSHP->nRecords ) nShapeId = -1; /* -------------------------------------------------------------------- */ /* Add the new entity to the in memory index. */ /* -------------------------------------------------------------------- */ if( nShapeId == -1 && psSHP->nRecords+1 > psSHP->nMaxRecords ) { psSHP->nMaxRecords =(int) ( psSHP->nMaxRecords * 1.3 + 100); psSHP->panRecOffset = (unsigned int *) SfRealloc(psSHP->panRecOffset,sizeof(unsigned int) * psSHP->nMaxRecords ); psSHP->panRecSize = (unsigned int *) SfRealloc(psSHP->panRecSize,sizeof(unsigned int) * psSHP->nMaxRecords ); } /* -------------------------------------------------------------------- */ /* Initialize record. */ /* -------------------------------------------------------------------- */ pabyRec = (uchar *) malloc(psObject->nVertices * 4 * sizeof(double) + psObject->nParts * 8 + 128); /* -------------------------------------------------------------------- */ /* Extract vertices for a Polygon or Arc. */ /* -------------------------------------------------------------------- */ if( psObject->nSHPType == SHPT_POLYGON || psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_POLYGONM || psObject->nSHPType == SHPT_ARC || psObject->nSHPType == SHPT_ARCZ || psObject->nSHPType == SHPT_ARCM || psObject->nSHPType == SHPT_MULTIPATCH ) { uint32 nPoints, nParts; int i; nPoints = psObject->nVertices; nParts = psObject->nParts; _SHPSetBounds( pabyRec + 12, psObject ); if( bBigEndian ) SwapWord( 4, &nPoints ); if( bBigEndian ) SwapWord( 4, &nParts ); ByteCopy( &nPoints, pabyRec + 40 + 8, 4 ); ByteCopy( &nParts, pabyRec + 36 + 8, 4 ); nRecordSize = 52; /* * Write part start positions. */ ByteCopy( psObject->panPartStart, pabyRec + 44 + 8, 4 * psObject->nParts ); for( i = 0; i < psObject->nParts; i++ ) { if( bBigEndian ) SwapWord( 4, pabyRec + 44 + 8 + 4*i ); nRecordSize += 4; } /* * Write multipatch part types if needed. */ if( psObject->nSHPType == SHPT_MULTIPATCH ) { memcpy( pabyRec + nRecordSize, psObject->panPartType, 4*psObject->nParts ); for( i = 0; i < psObject->nParts; i++ ) { if( bBigEndian ) SwapWord( 4, pabyRec + nRecordSize ); nRecordSize += 4; } } /* * Write the (x,y) vertex values. */ for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfX + i, pabyRec + nRecordSize, 8 ); ByteCopy( psObject->padfY + i, pabyRec + nRecordSize + 8, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize + 8 ); nRecordSize += 2 * 8; } /* * Write the Z coordinates (if any). */ if( psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_ARCZ || psObject->nSHPType == SHPT_MULTIPATCH ) { ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } /* * Write the M values, if any. */ if( psObject->bMeasureIsUsed && (psObject->nSHPType == SHPT_POLYGONM || psObject->nSHPType == SHPT_ARCM #ifndef DISABLE_MULTIPATCH_MEASURE || psObject->nSHPType == SHPT_MULTIPATCH #endif || psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_ARCZ) ) { ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } } /* -------------------------------------------------------------------- */ /* Extract vertices for a MultiPoint. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_MULTIPOINT || psObject->nSHPType == SHPT_MULTIPOINTZ || psObject->nSHPType == SHPT_MULTIPOINTM ) { uint32 nPoints; int i; nPoints = psObject->nVertices; _SHPSetBounds( pabyRec + 12, psObject ); if( bBigEndian ) SwapWord( 4, &nPoints ); ByteCopy( &nPoints, pabyRec + 44, 4 ); for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfX + i, pabyRec + 48 + i*16, 8 ); ByteCopy( psObject->padfY + i, pabyRec + 48 + i*16 + 8, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 ); if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 + 8 ); } nRecordSize = 48 + 16 * psObject->nVertices; if( psObject->nSHPType == SHPT_MULTIPOINTZ ) { ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } if( psObject->bMeasureIsUsed && (psObject->nSHPType == SHPT_MULTIPOINTZ || psObject->nSHPType == SHPT_MULTIPOINTM) ) { ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } } /* -------------------------------------------------------------------- */ /* Write point. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_POINT || psObject->nSHPType == SHPT_POINTZ || psObject->nSHPType == SHPT_POINTM ) { ByteCopy( psObject->padfX, pabyRec + 12, 8 ); ByteCopy( psObject->padfY, pabyRec + 20, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + 12 ); if( bBigEndian ) SwapWord( 8, pabyRec + 20 ); nRecordSize = 28; if( psObject->nSHPType == SHPT_POINTZ ) { ByteCopy( psObject->padfZ, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } if( psObject->bMeasureIsUsed && (psObject->nSHPType == SHPT_POINTZ || psObject->nSHPType == SHPT_POINTM) ) { ByteCopy( psObject->padfM, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } /* -------------------------------------------------------------------- */ /* Not much to do for null geometries. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_NULL ) { nRecordSize = 12; } else { /* unknown type */ assert( FALSE ); } /* -------------------------------------------------------------------- */ /* Establish where we are going to put this record. If we are */ /* rewriting and existing record, and it will fit, then put it */ /* back where the original came from. Otherwise write at the end. */ /* -------------------------------------------------------------------- */ if( nShapeId == -1 || psSHP->panRecSize[nShapeId] < nRecordSize-8 ) { unsigned int nExpectedSize = psSHP->nFileSize + nRecordSize; if( nExpectedSize < psSHP->nFileSize ) // due to unsigned int overflow { char str[128]; sprintf( str, "Failed to write shape object. " "File size cannot reach %u + %u.", psSHP->nFileSize, nRecordSize ); psSHP->sHooks.Error( str ); free( pabyRec ); return -1; } if( nShapeId == -1 ) nShapeId = psSHP->nRecords++; psSHP->panRecOffset[nShapeId] = nRecordOffset = psSHP->nFileSize; psSHP->panRecSize[nShapeId] = nRecordSize-8; psSHP->nFileSize += nRecordSize; } else { nRecordOffset = psSHP->panRecOffset[nShapeId]; psSHP->panRecSize[nShapeId] = nRecordSize-8; } /* -------------------------------------------------------------------- */ /* Set the shape type, record number, and record size. */ /* -------------------------------------------------------------------- */ i32 = nShapeId+1; /* record # */ if( !bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec, 4 ); i32 = (nRecordSize-8)/2; /* record size */ if( !bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec + 4, 4 ); i32 = psObject->nSHPType; /* shape type */ if( bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec + 8, 4 ); /* -------------------------------------------------------------------- */ /* Write out record. */ /* -------------------------------------------------------------------- */ if( psSHP->sHooks.FSeek( psSHP->fpSHP, nRecordOffset, 0 ) != 0 ) { psSHP->sHooks.Error( "Error in psSHP->sHooks.FSeek() while writing object to .shp file." ); free( pabyRec ); return -1; } if( psSHP->sHooks.FWrite( pabyRec, nRecordSize, 1, psSHP->fpSHP ) < 1 ) { psSHP->sHooks.Error( "Error in psSHP->sHooks.Fwrite() while writing object to .shp file." ); free( pabyRec ); return -1; } free( pabyRec ); /* -------------------------------------------------------------------- */ /* Expand file wide bounds based on this shape. */ /* -------------------------------------------------------------------- */ if( psSHP->adBoundsMin[0] == 0.0 && psSHP->adBoundsMax[0] == 0.0 && psSHP->adBoundsMin[1] == 0.0 && psSHP->adBoundsMax[1] == 0.0 ) { if( psObject->nSHPType == SHPT_NULL || psObject->nVertices == 0 ) { psSHP->adBoundsMin[0] = psSHP->adBoundsMax[0] = 0.0; psSHP->adBoundsMin[1] = psSHP->adBoundsMax[1] = 0.0; psSHP->adBoundsMin[2] = psSHP->adBoundsMax[2] = 0.0; psSHP->adBoundsMin[3] = psSHP->adBoundsMax[3] = 0.0; } else { psSHP->adBoundsMin[0] = psSHP->adBoundsMax[0] = psObject->padfX[0]; psSHP->adBoundsMin[1] = psSHP->adBoundsMax[1] = psObject->padfY[0]; psSHP->adBoundsMin[2] = psSHP->adBoundsMax[2] = psObject->padfZ[0]; psSHP->adBoundsMin[3] = psSHP->adBoundsMax[3] = psObject->padfM[0]; } } for( i = 0; i < psObject->nVertices; i++ ) { psSHP->adBoundsMin[0] = MIN(psSHP->adBoundsMin[0],psObject->padfX[i]); psSHP->adBoundsMin[1] = MIN(psSHP->adBoundsMin[1],psObject->padfY[i]); psSHP->adBoundsMin[2] = MIN(psSHP->adBoundsMin[2],psObject->padfZ[i]); psSHP->adBoundsMin[3] = MIN(psSHP->adBoundsMin[3],psObject->padfM[i]); psSHP->adBoundsMax[0] = MAX(psSHP->adBoundsMax[0],psObject->padfX[i]); psSHP->adBoundsMax[1] = MAX(psSHP->adBoundsMax[1],psObject->padfY[i]); psSHP->adBoundsMax[2] = MAX(psSHP->adBoundsMax[2],psObject->padfZ[i]); psSHP->adBoundsMax[3] = MAX(psSHP->adBoundsMax[3],psObject->padfM[i]); } return( nShapeId ); } /************************************************************************/ /* SHPReadObject() */ /* */ /* Read the vertices, parts, and other non-attribute information */ /* for one shape. */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPReadObject( SHPHandle psSHP, int hEntity ) { int nEntitySize, nRequiredSize; SHPObject *psShape; char szErrorMsg[128]; /* -------------------------------------------------------------------- */ /* Validate the record/entity number. */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psSHP->nRecords ) return( NULL ); /* -------------------------------------------------------------------- */ /* Ensure our record buffer is large enough. */ /* -------------------------------------------------------------------- */ nEntitySize = psSHP->panRecSize[hEntity]+8; if( nEntitySize > psSHP->nBufSize ) { psSHP->pabyRec = (uchar *) SfRealloc(psSHP->pabyRec,nEntitySize); if (psSHP->pabyRec == NULL) { char szError[200]; /* Reallocate previous successfull size for following features */ psSHP->pabyRec = malloc(psSHP->nBufSize); sprintf( szError, "Not enough memory to allocate requested memory (nBufSize=%d). " "Probably broken SHP file", psSHP->nBufSize ); psSHP->sHooks.Error( szError ); return NULL; } /* Only set new buffer size after successfull alloc */ psSHP->nBufSize = nEntitySize; } /* In case we were not able to reallocate the buffer on a previous step */ if (psSHP->pabyRec == NULL) { return NULL; } /* -------------------------------------------------------------------- */ /* Read the record. */ /* -------------------------------------------------------------------- */ if( psSHP->sHooks.FSeek( psSHP->fpSHP, psSHP->panRecOffset[hEntity], 0 ) != 0 ) { /* * TODO - mloskot: Consider detailed diagnostics of shape file, * for example to detect if file is truncated. */ char str[128]; sprintf( str, "Error in fseek() reading object from .shp file at offset %u", psSHP->panRecOffset[hEntity]); psSHP->sHooks.Error( str ); return NULL; } if( psSHP->sHooks.FRead( psSHP->pabyRec, nEntitySize, 1, psSHP->fpSHP ) != 1 ) { /* * TODO - mloskot: Consider detailed diagnostics of shape file, * for example to detect if file is truncated. */ char str[128]; sprintf( str, "Error in fread() reading object of size %u at offset %u from .shp file", nEntitySize, psSHP->panRecOffset[hEntity] ); psSHP->sHooks.Error( str ); return NULL; } /* -------------------------------------------------------------------- */ /* Allocate and minimally initialize the object. */ /* -------------------------------------------------------------------- */ psShape = (SHPObject *) calloc(1,sizeof(SHPObject)); psShape->nShapeId = hEntity; psShape->bMeasureIsUsed = FALSE; if ( 8 + 4 > nEntitySize ) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : nEntitySize = %d", hEntity, nEntitySize); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } memcpy( &psShape->nSHPType, psSHP->pabyRec + 8, 4 ); if( bBigEndian ) SwapWord( 4, &(psShape->nSHPType) ); /* ==================================================================== */ /* Extract vertices for a Polygon or Arc. */ /* ==================================================================== */ if( psShape->nSHPType == SHPT_POLYGON || psShape->nSHPType == SHPT_ARC || psShape->nSHPType == SHPT_POLYGONZ || psShape->nSHPType == SHPT_POLYGONM || psShape->nSHPType == SHPT_ARCZ || psShape->nSHPType == SHPT_ARCM || psShape->nSHPType == SHPT_MULTIPATCH ) { uint32 nPoints, nParts; int i, nOffset; if ( 40 + 8 + 4 > nEntitySize ) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : nEntitySize = %d", hEntity, nEntitySize); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } /* -------------------------------------------------------------------- */ /* Get the X/Y bounds. */ /* -------------------------------------------------------------------- */ memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); /* -------------------------------------------------------------------- */ /* Extract part/point count, and build vertex and part arrays */ /* to proper size. */ /* -------------------------------------------------------------------- */ memcpy( &nPoints, psSHP->pabyRec + 40 + 8, 4 ); memcpy( &nParts, psSHP->pabyRec + 36 + 8, 4 ); if( bBigEndian ) SwapWord( 4, &nPoints ); if( bBigEndian ) SwapWord( 4, &nParts ); if ( nPoints > 50 * 1000 * 1000 || nParts > 10 * 1000 * 1000 ) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d, nPoints=%d, nParts=%d.", hEntity, nPoints, nParts); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } /* With the previous checks on nPoints and nParts, */ /* we should not overflow here and after */ /* since 50 M * (16 + 8 + 8) = 1 600 MB */ nRequiredSize = 44 + 8 + 4 * nParts + 16 * nPoints; if ( psShape->nSHPType == SHPT_POLYGONZ || psShape->nSHPType == SHPT_ARCZ || psShape->nSHPType == SHPT_MULTIPATCH ) { nRequiredSize += 16 + 8 * nPoints; } if( psShape->nSHPType == SHPT_MULTIPATCH ) { nRequiredSize += 4 * nParts; } if (nRequiredSize > nEntitySize) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d, nPoints=%d, nParts=%d, nEntitySize=%d.", hEntity, nPoints, nParts, nEntitySize); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } psShape->nVertices = nPoints; psShape->padfX = (double *) calloc(nPoints,sizeof(double)); psShape->padfY = (double *) calloc(nPoints,sizeof(double)); psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); psShape->padfM = (double *) calloc(nPoints,sizeof(double)); psShape->nParts = nParts; psShape->panPartStart = (int *) calloc(nParts,sizeof(int)); psShape->panPartType = (int *) calloc(nParts,sizeof(int)); if (psShape->padfX == NULL || psShape->padfY == NULL || psShape->padfZ == NULL || psShape->padfM == NULL || psShape->panPartStart == NULL || psShape->panPartType == NULL) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Not enough memory to allocate requested memory (nPoints=%d, nParts=%d) for shape %d. " "Probably broken SHP file", hEntity, nPoints, nParts ); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } for( i = 0; i < nParts; i++ ) psShape->panPartType[i] = SHPP_RING; /* -------------------------------------------------------------------- */ /* Copy out the part array from the record. */ /* -------------------------------------------------------------------- */ memcpy( psShape->panPartStart, psSHP->pabyRec + 44 + 8, 4 * nParts ); for( i = 0; i < nParts; i++ ) { if( bBigEndian ) SwapWord( 4, psShape->panPartStart+i ); /* We check that the offset is inside the vertex array */ if (psShape->panPartStart[i] < 0 || (psShape->panPartStart[i] >= psShape->nVertices && psShape->nVertices > 0) ) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : panPartStart[%d] = %d, nVertices = %d", hEntity, i, psShape->panPartStart[i], psShape->nVertices); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } if (i > 0 && psShape->panPartStart[i] <= psShape->panPartStart[i-1]) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : panPartStart[%d] = %d, panPartStart[%d] = %d", hEntity, i, psShape->panPartStart[i], i - 1, psShape->panPartStart[i - 1]); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } } nOffset = 44 + 8 + 4*nParts; /* -------------------------------------------------------------------- */ /* If this is a multipatch, we will also have parts types. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_MULTIPATCH ) { memcpy( psShape->panPartType, psSHP->pabyRec + nOffset, 4*nParts ); for( i = 0; i < nParts; i++ ) { if( bBigEndian ) SwapWord( 4, psShape->panPartType+i ); } nOffset += 4*nParts; } /* -------------------------------------------------------------------- */ /* Copy out the vertices from the record. */ /* -------------------------------------------------------------------- */ for( i = 0; i < nPoints; i++ ) { memcpy(psShape->padfX + i, psSHP->pabyRec + nOffset + i * 16, 8 ); memcpy(psShape->padfY + i, psSHP->pabyRec + nOffset + i * 16 + 8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); } nOffset += 16*nPoints; /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_POLYGONZ || psShape->nSHPType == SHPT_ARCZ || psShape->nSHPType == SHPT_MULTIPATCH ) { memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfZ + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); } nOffset += 16 + 8*nPoints; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( nEntitySize >= nOffset + 16 + 8*nPoints ) { memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfM + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); } psShape->bMeasureIsUsed = TRUE; } } /* ==================================================================== */ /* Extract vertices for a MultiPoint. */ /* ==================================================================== */ else if( psShape->nSHPType == SHPT_MULTIPOINT || psShape->nSHPType == SHPT_MULTIPOINTM || psShape->nSHPType == SHPT_MULTIPOINTZ ) { uint32 nPoints; int i, nOffset; if ( 44 + 4 > nEntitySize ) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : nEntitySize = %d", hEntity, nEntitySize); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } memcpy( &nPoints, psSHP->pabyRec + 44, 4 ); if( bBigEndian ) SwapWord( 4, &nPoints ); if ( nPoints > 50 * 1000 * 1000) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : nPoints = %d", hEntity, nPoints); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } nRequiredSize = 48 + nPoints * 16; if( psShape->nSHPType == SHPT_MULTIPOINTZ ) { nRequiredSize += 16 + nPoints * 8; } if (nRequiredSize > nEntitySize) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : nPoints = %d, nEntitySize = %d", hEntity, nPoints, nEntitySize); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } psShape->nVertices = nPoints; psShape->padfX = (double *) calloc(nPoints,sizeof(double)); psShape->padfY = (double *) calloc(nPoints,sizeof(double)); psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); psShape->padfM = (double *) calloc(nPoints,sizeof(double)); if (psShape->padfX == NULL || psShape->padfY == NULL || psShape->padfZ == NULL || psShape->padfM == NULL) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Not enough memory to allocate requested memory (nPoints=%d) for shape %d. " "Probably broken SHP file", hEntity, nPoints ); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } for( i = 0; i < nPoints; i++ ) { memcpy(psShape->padfX+i, psSHP->pabyRec + 48 + 16 * i, 8 ); memcpy(psShape->padfY+i, psSHP->pabyRec + 48 + 16 * i + 8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); } nOffset = 48 + 16*nPoints; /* -------------------------------------------------------------------- */ /* Get the X/Y bounds. */ /* -------------------------------------------------------------------- */ memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_MULTIPOINTZ ) { memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfZ + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); } nOffset += 16 + 8*nPoints; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( nEntitySize >= nOffset + 16 + 8*nPoints ) { memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfM + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); } psShape->bMeasureIsUsed = TRUE; } } /* ==================================================================== */ /* Extract vertices for a point. */ /* ==================================================================== */ else if( psShape->nSHPType == SHPT_POINT || psShape->nSHPType == SHPT_POINTM || psShape->nSHPType == SHPT_POINTZ ) { int nOffset; psShape->nVertices = 1; psShape->padfX = (double *) calloc(1,sizeof(double)); psShape->padfY = (double *) calloc(1,sizeof(double)); psShape->padfZ = (double *) calloc(1,sizeof(double)); psShape->padfM = (double *) calloc(1,sizeof(double)); if (20 + 8 + (( psShape->nSHPType == SHPT_POINTZ ) ? 8 : 0)> nEntitySize) { snprintf(szErrorMsg, sizeof(szErrorMsg), "Corrupted .shp file : shape %d : nEntitySize = %d", hEntity, nEntitySize); psSHP->sHooks.Error( szErrorMsg ); SHPDestroyObject(psShape); return NULL; } memcpy( psShape->padfX, psSHP->pabyRec + 12, 8 ); memcpy( psShape->padfY, psSHP->pabyRec + 20, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX ); if( bBigEndian ) SwapWord( 8, psShape->padfY ); nOffset = 20 + 8; /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_POINTZ ) { memcpy( psShape->padfZ, psSHP->pabyRec + nOffset, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ ); nOffset += 8; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( nEntitySize >= nOffset + 8 ) { memcpy( psShape->padfM, psSHP->pabyRec + nOffset, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM ); psShape->bMeasureIsUsed = TRUE; } /* -------------------------------------------------------------------- */ /* Since no extents are supplied in the record, we will apply */ /* them from the single vertex. */ /* -------------------------------------------------------------------- */ psShape->dfXMin = psShape->dfXMax = psShape->padfX[0]; psShape->dfYMin = psShape->dfYMax = psShape->padfY[0]; psShape->dfZMin = psShape->dfZMax = psShape->padfZ[0]; psShape->dfMMin = psShape->dfMMax = psShape->padfM[0]; } return( psShape ); } /************************************************************************/ /* SHPTypeName() */ /************************************************************************/ const char SHPAPI_CALL1(*) SHPTypeName( int nSHPType ) { switch( nSHPType ) { case SHPT_NULL: return "NullShape"; case SHPT_POINT: return "Point"; case SHPT_ARC: return "Arc"; case SHPT_POLYGON: return "Polygon"; case SHPT_MULTIPOINT: return "MultiPoint"; case SHPT_POINTZ: return "PointZ"; case SHPT_ARCZ: return "ArcZ"; case SHPT_POLYGONZ: return "PolygonZ"; case SHPT_MULTIPOINTZ: return "MultiPointZ"; case SHPT_POINTM: return "PointM"; case SHPT_ARCM: return "ArcM"; case SHPT_POLYGONM: return "PolygonM"; case SHPT_MULTIPOINTM: return "MultiPointM"; case SHPT_MULTIPATCH: return "MultiPatch"; default: return "UnknownShapeType"; } } /************************************************************************/ /* SHPPartTypeName() */ /************************************************************************/ const char SHPAPI_CALL1(*) SHPPartTypeName( int nPartType ) { switch( nPartType ) { case SHPP_TRISTRIP: return "TriangleStrip"; case SHPP_TRIFAN: return "TriangleFan"; case SHPP_OUTERRING: return "OuterRing"; case SHPP_INNERRING: return "InnerRing"; case SHPP_FIRSTRING: return "FirstRing"; case SHPP_RING: return "Ring"; default: return "UnknownPartType"; } } /************************************************************************/ /* SHPDestroyObject() */ /************************************************************************/ void SHPAPI_CALL SHPDestroyObject( SHPObject * psShape ) { if( psShape == NULL ) return; if( psShape->padfX != NULL ) free( psShape->padfX ); if( psShape->padfY != NULL ) free( psShape->padfY ); if( psShape->padfZ != NULL ) free( psShape->padfZ ); if( psShape->padfM != NULL ) free( psShape->padfM ); if( psShape->panPartStart != NULL ) free( psShape->panPartStart ); if( psShape->panPartType != NULL ) free( psShape->panPartType ); free( psShape ); } /************************************************************************/ /* SHPRewindObject() */ /* */ /* Reset the winding of polygon objects to adhere to the */ /* specification. */ /************************************************************************/ int SHPAPI_CALL SHPRewindObject( SHPHandle hSHP, SHPObject * psObject ) { int iOpRing, bAltered = 0; /* -------------------------------------------------------------------- */ /* Do nothing if this is not a polygon object. */ /* -------------------------------------------------------------------- */ if( psObject->nSHPType != SHPT_POLYGON && psObject->nSHPType != SHPT_POLYGONZ && psObject->nSHPType != SHPT_POLYGONM ) return 0; if( psObject->nVertices == 0 || psObject->nParts == 0 ) return 0; /* -------------------------------------------------------------------- */ /* Process each of the rings. */ /* -------------------------------------------------------------------- */ for( iOpRing = 0; iOpRing < psObject->nParts; iOpRing++ ) { int bInner, iVert, nVertCount, nVertStart, iCheckRing; double dfSum, dfTestX, dfTestY; /* -------------------------------------------------------------------- */ /* Determine if this ring is an inner ring or an outer ring */ /* relative to all the other rings. For now we assume the */ /* first ring is outer and all others are inner, but eventually */ /* we need to fix this to handle multiple island polygons and */ /* unordered sets of rings. */ /* */ /* -------------------------------------------------------------------- */ /* Use point in the middle of segment to avoid testing * common points of rings. */ dfTestX = ( psObject->padfX[psObject->panPartStart[iOpRing]] + psObject->padfX[psObject->panPartStart[iOpRing] + 1] ) / 2; dfTestY = ( psObject->padfY[psObject->panPartStart[iOpRing]] + psObject->padfY[psObject->panPartStart[iOpRing] + 1] ) / 2; bInner = FALSE; for( iCheckRing = 0; iCheckRing < psObject->nParts; iCheckRing++ ) { int iEdge; if( iCheckRing == iOpRing ) continue; nVertStart = psObject->panPartStart[iCheckRing]; if( iCheckRing == psObject->nParts-1 ) nVertCount = psObject->nVertices - psObject->panPartStart[iCheckRing]; else nVertCount = psObject->panPartStart[iCheckRing+1] - psObject->panPartStart[iCheckRing]; for( iEdge = 0; iEdge < nVertCount; iEdge++ ) { int iNext; if( iEdge < nVertCount-1 ) iNext = iEdge+1; else iNext = 0; /* Rule #1: * Test whether the edge 'straddles' the horizontal ray from the test point (dfTestY,dfTestY) * The rule #1 also excludes edges collinear with the ray. */ if ( ( psObject->padfY[iEdge+nVertStart] < dfTestY && dfTestY <= psObject->padfY[iNext+nVertStart] ) || ( psObject->padfY[iNext+nVertStart] < dfTestY && dfTestY <= psObject->padfY[iEdge+nVertStart] ) ) { /* Rule #2: * Test if edge-ray intersection is on the right from the test point (dfTestY,dfTestY) */ double const intersect = ( psObject->padfX[iEdge+nVertStart] + ( dfTestY - psObject->padfY[iEdge+nVertStart] ) / ( psObject->padfY[iNext+nVertStart] - psObject->padfY[iEdge+nVertStart] ) * ( psObject->padfX[iNext+nVertStart] - psObject->padfX[iEdge+nVertStart] ) ); if (intersect < dfTestX) { bInner = !bInner; } } } } /* for iCheckRing */ /* -------------------------------------------------------------------- */ /* Determine the current order of this ring so we will know if */ /* it has to be reversed. */ /* -------------------------------------------------------------------- */ nVertStart = psObject->panPartStart[iOpRing]; if( iOpRing == psObject->nParts-1 ) nVertCount = psObject->nVertices - psObject->panPartStart[iOpRing]; else nVertCount = psObject->panPartStart[iOpRing+1] - psObject->panPartStart[iOpRing]; if (nVertCount < 2) continue; dfSum = psObject->padfX[nVertStart] * (psObject->padfY[nVertStart+1] - psObject->padfY[nVertStart+nVertCount-1]); for( iVert = nVertStart + 1; iVert < nVertStart+nVertCount-1; iVert++ ) { dfSum += psObject->padfX[iVert] * (psObject->padfY[iVert+1] - psObject->padfY[iVert-1]); } dfSum += psObject->padfX[iVert] * (psObject->padfY[nVertStart] - psObject->padfY[iVert-1]); /* -------------------------------------------------------------------- */ /* Reverse if necessary. */ /* -------------------------------------------------------------------- */ if( (dfSum < 0.0 && bInner) || (dfSum > 0.0 && !bInner) ) { int i; bAltered++; for( i = 0; i < nVertCount/2; i++ ) { double dfSaved; /* Swap X */ dfSaved = psObject->padfX[nVertStart+i]; psObject->padfX[nVertStart+i] = psObject->padfX[nVertStart+nVertCount-i-1]; psObject->padfX[nVertStart+nVertCount-i-1] = dfSaved; /* Swap Y */ dfSaved = psObject->padfY[nVertStart+i]; psObject->padfY[nVertStart+i] = psObject->padfY[nVertStart+nVertCount-i-1]; psObject->padfY[nVertStart+nVertCount-i-1] = dfSaved; /* Swap Z */ if( psObject->padfZ ) { dfSaved = psObject->padfZ[nVertStart+i]; psObject->padfZ[nVertStart+i] = psObject->padfZ[nVertStart+nVertCount-i-1]; psObject->padfZ[nVertStart+nVertCount-i-1] = dfSaved; } /* Swap M */ if( psObject->padfM ) { dfSaved = psObject->padfM[nVertStart+i]; psObject->padfM[nVertStart+i] = psObject->padfM[nVertStart+nVertCount-i-1]; psObject->padfM[nVertStart+nVertCount-i-1] = dfSaved; } } } } return bAltered; } ���������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shpcommon.c����������������������������������������������������������0000644�0000000�0000000�00000003105�12067042633�017177� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: shpcommon.c 5646 2010-05-27 13:19:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* This file contains functions that are shared between the loader and dumper */ #include <stdlib.h> #include "shpcommon.h" /** * Escape strings that are to be used as part of a PostgreSQL connection string. If no * characters require escaping, simply return the input pointer. Otherwise return a * new allocated string. */ char * escape_connection_string(char *str) { /* * Escape apostrophes and backslashes: * ' -> \' * \ -> \\ * * 1. find # of characters * 2. make new string */ char *result; char *ptr, *optr; int toescape = 0; size_t size; ptr = str; /* Count how many characters we need to escape so we know the size of the string we need to return */ while (*ptr) { if (*ptr == '\'' || *ptr == '\\') toescape++; ptr++; } /* If we don't have to escape anything, simply return the input pointer */ if (toescape == 0) return str; size = ptr - str + toescape + 1; result = calloc(1, size); optr = result; ptr = str; while (*ptr) { if (*ptr == '\'' || *ptr == '\\') *optr++ = '\\'; *optr++ = *ptr++; } *optr = '\0'; return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shapefil.h�����������������������������������������������������������0000644�0000000�0000000�00000053644�11722777314�017021� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef SHAPEFILE_H_INCLUDED #define SHAPEFILE_H_INCLUDED /****************************************************************************** * $Id: shapefil.h 9324 2012-02-27 22:08:12Z pramsey $ * * Project: Shapelib * Purpose: Primary include file for Shapelib. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * 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 or substantial portions of the 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. ****************************************************************************** * * $Log: shapefil.h,v $ * Revision 1.51 2011-07-24 05:59:25 fwarmerdam * minimize use of CPLError in favor of SAHooks.Error() * * Revision 1.50 2011-05-13 17:35:17 fwarmerdam * added DBFReorderFields() and DBFAlterFields() functions (from Even) * * Revision 1.49 2011-04-16 14:38:21 fwarmerdam * avoid warnings with gcc on SHP_CVSID * * Revision 1.48 2010-08-27 23:42:52 fwarmerdam * add SHPAPI_CALL attribute in code * * Revision 1.47 2010-01-28 11:34:34 fwarmerdam * handle the shape file length limits more gracefully (#3236) * * Revision 1.46 2008-11-12 14:28:15 fwarmerdam * DBFCreateField() now works on files with records * * Revision 1.45 2008/11/11 17:47:10 fwarmerdam * added DBFDeleteField() function * * Revision 1.44 2008/01/16 20:05:19 bram * Add file hooks that accept UTF-8 encoded filenames on some platforms. Use SASetupUtf8Hooks * tosetup the hooks and check SHPAPI_UTF8_HOOKS for its availability. Currently, this * is only available on the Windows platform that decodes the UTF-8 filenames to wide * character strings and feeds them to _wfopen and _wremove. * * Revision 1.43 2008/01/10 16:35:30 fwarmerdam * avoid _ prefix on #defined symbols (bug 1840) * * Revision 1.42 2007/12/18 18:28:14 bram * - create hook for client specific atof (bugzilla ticket 1615) * - check for NULL handle before closing cpCPG file, and close after reading. * * Revision 1.41 2007/12/15 20:25:32 bram * dbfopen.c now reads the Code Page information from the DBF file, and exports * this information as a string through the DBFGetCodePage function. This is * either the number from the LDID header field ("LDID/<number>") or as the * content of an accompanying .CPG file. When creating a DBF file, the code can * be set using DBFCreateEx. * * Revision 1.40 2007/12/06 07:00:25 fwarmerdam * dbfopen now using SAHooks for fileio * * Revision 1.39 2007/12/04 20:37:56 fwarmerdam * preliminary implementation of hooks api for io and errors * * Revision 1.38 2007/11/21 22:39:56 fwarmerdam * close shx file in readonly mode (GDAL #1956) * * Revision 1.37 2007/10/27 03:31:14 fwarmerdam * limit default depth of tree to 12 levels (gdal ticket #1594) * * Revision 1.36 2007/09/10 23:33:15 fwarmerdam * Upstreamed support for visibility flag in SHPAPI_CALL for the needs * of GDAL (gdal ticket #1810). * * Revision 1.35 2007/09/03 19:48:10 fwarmerdam * move DBFReadAttribute() static dDoubleField into dbfinfo * * Revision 1.34 2006/06/17 15:33:32 fwarmerdam * added pszWorkField - bug 1202 (rso) * * Revision 1.33 2006/02/15 01:14:30 fwarmerdam * added DBFAddNativeFieldType * * Revision 1.32 2006/01/26 15:07:32 fwarmerdam * add bMeasureIsUsed flag from Craig Bruce: Bug 1249 * * Revision 1.31 2006/01/05 01:27:27 fwarmerdam * added dbf deletion mark/fetch * * Revision 1.30 2005/01/03 22:30:13 fwarmerdam * added support for saved quadtrees * * Revision 1.29 2004/09/26 20:09:35 fwarmerdam * avoid rcsid warnings * * Revision 1.28 2003/12/29 06:02:18 fwarmerdam * added cpl_error.h option * * Revision 1.27 2003/04/21 18:30:37 warmerda * added header write/update public methods * * Revision 1.26 2002/09/29 00:00:08 warmerda * added FTLogical and logical attribute read/write calls * * Revision 1.25 2002/05/07 13:46:30 warmerda * added DBFWriteAttributeDirectly(). * * Revision 1.24 2002/04/10 16:59:54 warmerda * added SHPRewindObject * * Revision 1.23 2002/01/15 14:36:07 warmerda * updated email address * * Revision 1.22 2002/01/15 14:32:00 warmerda * try to improve SHPAPI_CALL docs */ #define _FILE_OFFSET_BITS 64 #include <stdio.h> #include <sys/types.h> #ifdef USE_DBMALLOC #include <dbmalloc.h> #endif #ifdef __cplusplus extern "C" { #endif /************************************************************************/ /* Configuration options. */ /************************************************************************/ /* -------------------------------------------------------------------- */ /* Should the DBFReadStringAttribute() strip leading and */ /* trailing white space? */ /* -------------------------------------------------------------------- */ #define TRIM_DBF_WHITESPACE /* -------------------------------------------------------------------- */ /* Should we write measure values to the Multipatch object? */ /* Reportedly ArcView crashes if we do write it, so for now it */ /* is disabled. */ /* -------------------------------------------------------------------- */ #define DISABLE_MULTIPATCH_MEASURE /* -------------------------------------------------------------------- */ /* SHPAPI_CALL */ /* */ /* The following two macros are present to allow forcing */ /* various calling conventions on the Shapelib API. */ /* */ /* To force __stdcall conventions (needed to call Shapelib */ /* from Visual Basic and/or Dephi I believe) the makefile could */ /* be modified to define: */ /* */ /* /DSHPAPI_CALL=__stdcall */ /* */ /* If it is desired to force export of the Shapelib API without */ /* using the shapelib.def file, use the following definition. */ /* */ /* /DSHAPELIB_DLLEXPORT */ /* */ /* To get both at once it will be necessary to hack this */ /* include file to define: */ /* */ /* #define SHPAPI_CALL __declspec(dllexport) __stdcall */ /* #define SHPAPI_CALL1 __declspec(dllexport) * __stdcall */ /* */ /* The complexity of the situtation is partly caused by the */ /* peculiar requirement of Visual C++ that __stdcall appear */ /* after any "*"'s in the return value of a function while the */ /* __declspec(dllexport) must appear before them. */ /* -------------------------------------------------------------------- */ #ifdef SHAPELIB_DLLEXPORT # define SHPAPI_CALL __declspec(dllexport) # define SHPAPI_CALL1(x) __declspec(dllexport) x #endif #ifndef SHPAPI_CALL # if defined(USE_GCC_VISIBILITY_FLAG) # define SHPAPI_CALL __attribute__ ((visibility("default"))) # define SHPAPI_CALL1(x) __attribute__ ((visibility("default"))) x # else # define SHPAPI_CALL # endif #endif #ifndef SHPAPI_CALL1 # define SHPAPI_CALL1(x) x SHPAPI_CALL #endif /* -------------------------------------------------------------------- */ /* Macros for controlling CVSID and ensuring they don't appear */ /* as unreferenced variables resulting in lots of warnings. */ /* -------------------------------------------------------------------- */ #ifndef DISABLE_CVSID # if defined(__GNUC__) && __GNUC__ >= 4 # define SHP_CVSID(string) static char cpl_cvsid[] __attribute__((used)) = string; # else # define SHP_CVSID(string) static char cpl_cvsid[] = string; \ static char *cvsid_aw() { return( cvsid_aw() ? ((char *) NULL) : cpl_cvsid ); } # endif #else # define SHP_CVSID(string) #endif /* -------------------------------------------------------------------- */ /* On some platforms, additional file IO hooks are defined that */ /* UTF-8 encoded filenames Unicode filenames */ /* -------------------------------------------------------------------- */ #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) # define SHPAPI_WINDOWS # define SHPAPI_UTF8_HOOKS #endif /* -------------------------------------------------------------------- */ /* IO/Error hook functions. */ /* -------------------------------------------------------------------- */ typedef int *SAFile; #ifdef HAVE_SEEKO # ifndef SAOffset typedef off_t SAOffset; # endif #else # ifndef SAOffset typedef unsigned long SAOffset; # endif #endif typedef struct { SAFile (*FOpen) ( const char *filename, const char *access); SAOffset (*FRead) ( void *p, SAOffset size, SAOffset nmemb, SAFile file); SAOffset (*FWrite)( void *p, SAOffset size, SAOffset nmemb, SAFile file); SAOffset (*FSeek) ( SAFile file, SAOffset offset, int whence ); SAOffset (*FTell) ( SAFile file ); int (*FFlush)( SAFile file ); int (*FClose)( SAFile file ); int (*Remove) ( const char *filename ); void (*Error) ( const char *message ); double (*Atof) ( const char *str ); } SAHooks; void SHPAPI_CALL SASetupDefaultHooks( SAHooks *psHooks ); #ifdef SHPAPI_UTF8_HOOKS void SHPAPI_CALL SASetupUtf8Hooks( SAHooks *psHooks ); #endif /************************************************************************/ /* SHP Support. */ /************************************************************************/ typedef struct { SAHooks sHooks; SAFile fpSHP; SAFile fpSHX; int nShapeType; /* SHPT_* */ unsigned int nFileSize; /* SHP file */ int nRecords; int nMaxRecords; unsigned int *panRecOffset; unsigned int *panRecSize; double adBoundsMin[4]; double adBoundsMax[4]; int bUpdated; unsigned char *pabyRec; int nBufSize; } SHPInfo; typedef SHPInfo * SHPHandle; /* -------------------------------------------------------------------- */ /* Shape types (nSHPType) */ /* -------------------------------------------------------------------- */ #define SHPT_NULL 0 #define SHPT_POINT 1 #define SHPT_ARC 3 #define SHPT_POLYGON 5 #define SHPT_MULTIPOINT 8 #define SHPT_POINTZ 11 #define SHPT_ARCZ 13 #define SHPT_POLYGONZ 15 #define SHPT_MULTIPOINTZ 18 #define SHPT_POINTM 21 #define SHPT_ARCM 23 #define SHPT_POLYGONM 25 #define SHPT_MULTIPOINTM 28 #define SHPT_MULTIPATCH 31 /* -------------------------------------------------------------------- */ /* Part types - everything but SHPT_MULTIPATCH just uses */ /* SHPP_RING. */ /* -------------------------------------------------------------------- */ #define SHPP_TRISTRIP 0 #define SHPP_TRIFAN 1 #define SHPP_OUTERRING 2 #define SHPP_INNERRING 3 #define SHPP_FIRSTRING 4 #define SHPP_RING 5 /* -------------------------------------------------------------------- */ /* SHPObject - represents on shape (without attributes) read */ /* from the .shp file. */ /* -------------------------------------------------------------------- */ typedef struct { int nSHPType; int nShapeId; /* -1 is unknown/unassigned */ int nParts; int *panPartStart; int *panPartType; int nVertices; double *padfX; double *padfY; double *padfZ; double *padfM; double dfXMin; double dfYMin; double dfZMin; double dfMMin; double dfXMax; double dfYMax; double dfZMax; double dfMMax; int bMeasureIsUsed; } SHPObject; /* -------------------------------------------------------------------- */ /* SHP API Prototypes */ /* -------------------------------------------------------------------- */ /* If pszAccess is read-only, the fpSHX field of the returned structure */ /* will be NULL as it is not necessary to keep the SHX file open */ SHPHandle SHPAPI_CALL SHPOpen( const char * pszShapeFile, const char * pszAccess ); SHPHandle SHPAPI_CALL SHPOpenLL( const char *pszShapeFile, const char *pszAccess, SAHooks *psHooks ); SHPHandle SHPAPI_CALL SHPCreate( const char * pszShapeFile, int nShapeType ); SHPHandle SHPAPI_CALL SHPCreateLL( const char * pszShapeFile, int nShapeType, SAHooks *psHooks ); void SHPAPI_CALL SHPGetInfo( SHPHandle hSHP, int * pnEntities, int * pnShapeType, double * padfMinBound, double * padfMaxBound ); SHPObject SHPAPI_CALL1(*) SHPReadObject( SHPHandle hSHP, int iShape ); int SHPAPI_CALL SHPWriteObject( SHPHandle hSHP, int iShape, SHPObject * psObject ); void SHPAPI_CALL SHPDestroyObject( SHPObject * psObject ); void SHPAPI_CALL SHPComputeExtents( SHPObject * psObject ); SHPObject SHPAPI_CALL1(*) SHPCreateObject( int nSHPType, int nShapeId, int nParts, const int * panPartStart, const int * panPartType, int nVertices, const double * padfX, const double * padfY, const double * padfZ, const double * padfM ); SHPObject SHPAPI_CALL1(*) SHPCreateSimpleObject( int nSHPType, int nVertices, const double * padfX, const double * padfY, const double * padfZ ); int SHPAPI_CALL SHPRewindObject( SHPHandle hSHP, SHPObject * psObject ); void SHPAPI_CALL SHPClose( SHPHandle hSHP ); void SHPAPI_CALL SHPWriteHeader( SHPHandle hSHP ); const char SHPAPI_CALL1(*) SHPTypeName( int nSHPType ); const char SHPAPI_CALL1(*) SHPPartTypeName( int nPartType ); /* -------------------------------------------------------------------- */ /* Shape quadtree indexing API. */ /* -------------------------------------------------------------------- */ /* this can be two or four for binary or quad tree */ #define MAX_SUBNODE 4 /* upper limit of tree levels for automatic estimation */ #define MAX_DEFAULT_TREE_DEPTH 12 typedef struct shape_tree_node { /* region covered by this node */ double adfBoundsMin[4]; double adfBoundsMax[4]; /* list of shapes stored at this node. The papsShapeObj pointers or the whole list can be NULL */ int nShapeCount; int *panShapeIds; SHPObject **papsShapeObj; int nSubNodes; struct shape_tree_node *apsSubNode[MAX_SUBNODE]; } SHPTreeNode; typedef struct { SHPHandle hSHP; int nMaxDepth; int nDimension; int nTotalCount; SHPTreeNode *psRoot; } SHPTree; SHPTree SHPAPI_CALL1(*) SHPCreateTree( SHPHandle hSHP, int nDimension, int nMaxDepth, double *padfBoundsMin, double *padfBoundsMax ); void SHPAPI_CALL SHPDestroyTree( SHPTree * hTree ); int SHPAPI_CALL SHPWriteTree( SHPTree *hTree, const char * pszFilename ); int SHPAPI_CALL SHPTreeAddObject( SHPTree * hTree, SHPObject * psObject ); int SHPAPI_CALL SHPTreeAddShapeId( SHPTree * hTree, SHPObject * psObject ); int SHPAPI_CALL SHPTreeRemoveShapeId( SHPTree * hTree, int nShapeId ); void SHPAPI_CALL SHPTreeTrimExtraNodes( SHPTree * hTree ); int SHPAPI_CALL1(*) SHPTreeFindLikelyShapes( SHPTree * hTree, double * padfBoundsMin, double * padfBoundsMax, int * ); int SHPAPI_CALL SHPCheckBoundsOverlap( double *, double *, double *, double *, int ); int SHPAPI_CALL1(*) SHPSearchDiskTree( FILE *fp, double *padfBoundsMin, double *padfBoundsMax, int *pnShapeCount ); /************************************************************************/ /* DBF Support. */ /************************************************************************/ typedef struct { SAHooks sHooks; SAFile fp; int nRecords; int nRecordLength; int nHeaderLength; int nFields; int *panFieldOffset; int *panFieldSize; int *panFieldDecimals; char *pachFieldType; char *pszHeader; int nCurrentRecord; int bCurrentRecordModified; char *pszCurrentRecord; int nWorkFieldLength; char *pszWorkField; int bNoHeader; int bUpdated; double dfDoubleField; int iLanguageDriver; char *pszCodePage; } DBFInfo; typedef DBFInfo * DBFHandle; typedef enum { FTString, FTInteger, FTDouble, FTLogical, FTDate, FTInvalid } DBFFieldType; #define XBASE_FLDHDR_SZ 32 DBFHandle SHPAPI_CALL DBFOpen( const char * pszDBFFile, const char * pszAccess ); DBFHandle SHPAPI_CALL DBFOpenLL( const char * pszDBFFile, const char * pszAccess, SAHooks *psHooks ); DBFHandle SHPAPI_CALL DBFCreate( const char * pszDBFFile ); DBFHandle SHPAPI_CALL DBFCreateEx( const char * pszDBFFile, const char * pszCodePage ); DBFHandle SHPAPI_CALL DBFCreateLL( const char * pszDBFFile, const char * pszCodePage, SAHooks *psHooks ); int SHPAPI_CALL DBFGetFieldCount( DBFHandle psDBF ); int SHPAPI_CALL DBFGetRecordCount( DBFHandle psDBF ); int SHPAPI_CALL DBFAddField( DBFHandle hDBF, const char * pszFieldName, DBFFieldType eType, int nWidth, int nDecimals ); int SHPAPI_CALL DBFAddNativeFieldType( DBFHandle hDBF, const char * pszFieldName, char chType, int nWidth, int nDecimals ); int SHPAPI_CALL DBFDeleteField( DBFHandle hDBF, int iField ); int SHPAPI_CALL DBFReorderFields( DBFHandle psDBF, int* panMap ); int SHPAPI_CALL DBFAlterFieldDefn( DBFHandle psDBF, int iField, const char * pszFieldName, char chType, int nWidth, int nDecimals ); DBFFieldType SHPAPI_CALL DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals ); int SHPAPI_CALL DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName); int SHPAPI_CALL DBFReadIntegerAttribute( DBFHandle hDBF, int iShape, int iField ); double SHPAPI_CALL DBFReadDoubleAttribute( DBFHandle hDBF, int iShape, int iField ); const char SHPAPI_CALL1(*) DBFReadStringAttribute( DBFHandle hDBF, int iShape, int iField ); const char SHPAPI_CALL1(*) DBFReadLogicalAttribute( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFIsAttributeNULL( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFWriteIntegerAttribute( DBFHandle hDBF, int iShape, int iField, int nFieldValue ); int SHPAPI_CALL DBFWriteDoubleAttribute( DBFHandle hDBF, int iShape, int iField, double dFieldValue ); int SHPAPI_CALL DBFWriteStringAttribute( DBFHandle hDBF, int iShape, int iField, const char * pszFieldValue ); int SHPAPI_CALL DBFWriteNULLAttribute( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFWriteLogicalAttribute( DBFHandle hDBF, int iShape, int iField, const char lFieldValue); int SHPAPI_CALL DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField, void * pValue ); const char SHPAPI_CALL1(*) DBFReadTuple(DBFHandle psDBF, int hEntity ); int SHPAPI_CALL DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ); int SHPAPI_CALL DBFIsRecordDeleted( DBFHandle psDBF, int iShape ); int SHPAPI_CALL DBFMarkRecordDeleted( DBFHandle psDBF, int iShape, int bIsDeleted ); DBFHandle SHPAPI_CALL DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ); void SHPAPI_CALL DBFClose( DBFHandle hDBF ); void SHPAPI_CALL DBFUpdateHeader( DBFHandle hDBF ); char SHPAPI_CALL DBFGetNativeFieldType( DBFHandle hDBF, int iField ); const char SHPAPI_CALL1(*) DBFGetCodePage(DBFHandle psDBF ); #ifdef __cplusplus } #endif #endif /* ndef SHAPEFILE_H_INCLUDED */ ��������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shp2pgsql-gui.c������������������������������������������������������0000644�0000000�0000000�00000346046�12132313626�017713� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: shp2pgsql-gui.c 11292 2013-04-13 17:36:22Z mcayland $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 OpenGeo.org * Copyright 2010 LISAsoft * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * * Maintainer: Paul Ramsey <pramsey@opengeo.org> * Mark Leslie <mark.leslie@lisasoft.com> * **********************************************************************/ #include "../postgis_config.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <gtk/gtk.h> #include <gdk/gdk.h> #include <sys/stat.h> #include "libpq-fe.h" #include "shp2pgsql-core.h" #include "pgsql2shp-core.h" #include "../liblwgeom/liblwgeom.h" /* for lw_vasprintf */ #define GUI_RCSID "shp2pgsql-gui $Revision: 11292 $" #define SHAPEFIELDMAXWIDTH 60 static void pgui_log_va(const char *fmt, va_list ap); static void pgui_seterr_va(const char *fmt, va_list ap); static void update_conn_ui_from_conn_config(void); /* If GTK+ version is < 2.14.0, define gtk_dialog_get_content_area() */ #if !GTK_CHECK_VERSION(2, 14, 0) #if !defined(gtk_dialog_get_content_area) #define gtk_dialog_get_content_area(dialog) GTK_DIALOG(dialog)->vbox #endif #endif /* ** Global variables for GUI only */ /* Main window */ static GtkWidget *window_main = NULL; static GtkWidget *textview_log = NULL; static GtkTextBuffer *textbuffer_log = NULL; /* Main import window (listview) */ GtkListStore *import_file_list_store; GtkWidget *import_tree; GtkCellRenderer *import_filename_renderer; GtkCellRenderer *import_schema_renderer; GtkCellRenderer *import_table_renderer; GtkCellRenderer *import_geom_column_renderer; GtkCellRenderer *import_srid_renderer; GtkCellRenderer *import_mode_renderer; GtkCellRenderer *import_remove_renderer; GtkTreeViewColumn *import_filename_column; GtkTreeViewColumn *import_schema_column; GtkTreeViewColumn *import_table_column; GtkTreeViewColumn *import_geom_column; GtkTreeViewColumn *import_srid_column; GtkTreeViewColumn *import_mode_column; GtkTreeViewColumn *import_remove_column; static GtkWidget *add_file_button = NULL; GtkWidget *loader_mode_combo = NULL; GtkListStore *loader_mode_combo_list; /* Main export window (listview) */ GtkListStore *export_table_list_store; GtkWidget *export_tree; GtkWidget *export_geom_column_combo; GtkCellRenderer *export_schema_renderer; GtkCellRenderer *export_table_renderer; GtkCellRenderer *export_geom_column_renderer; GtkCellRenderer *export_filename_renderer; GtkCellRenderer *export_remove_renderer; GtkTreeViewColumn *export_schema_column; GtkTreeViewColumn *export_table_column; GtkTreeViewColumn *export_geom_column; GtkTreeViewColumn *export_filename_column; GtkTreeViewColumn *export_remove_column; static GtkWidget *add_table_button = NULL; /* PostgreSQL database connection window */ static GtkWidget *window_conn = NULL; static GtkWidget *entry_pg_user = NULL; static GtkWidget *entry_pg_pass = NULL; static GtkWidget *entry_pg_host = NULL; static GtkWidget *entry_pg_port = NULL; static GtkWidget *entry_pg_db = NULL; /* Loader options window */ static GtkWidget *dialog_loader_options = NULL; static GtkWidget *entry_options_encoding = NULL; static GtkWidget *checkbutton_loader_options_preservecase = NULL; static GtkWidget *checkbutton_loader_options_forceint = NULL; static GtkWidget *checkbutton_loader_options_autoindex = NULL; static GtkWidget *checkbutton_loader_options_dbfonly = NULL; static GtkWidget *checkbutton_loader_options_dumpformat = NULL; static GtkWidget *checkbutton_loader_options_geography = NULL; static GtkWidget *checkbutton_loader_options_simplegeoms = NULL; /* Dumper options window */ static GtkWidget *dialog_dumper_options = NULL; static GtkWidget *checkbutton_dumper_options_includegid = NULL; static GtkWidget *checkbutton_dumper_options_keep_fieldname_case = NULL; static GtkWidget *checkbutton_dumper_options_unescapedattrs = NULL; /* About dialog */ static GtkWidget *dialog_about = NULL; /* File chooser */ static GtkWidget *dialog_filechooser = NULL; static GtkWidget *dialog_folderchooser = NULL; /* Progress dialog */ static GtkWidget *dialog_progress = NULL; static GtkWidget *progress = NULL; static GtkWidget *label_progress = NULL; /* Table chooser dialog */ static GtkWidget *dialog_tablechooser = NULL; GtkListStore *chooser_filtered_table_list_store; GtkListStore *chooser_table_list_store; GtkWidget *chooser_tree; GtkCellRenderer *chooser_schema_renderer; GtkCellRenderer *chooser_table_renderer; GtkTreeViewColumn *chooser_schema_column; GtkTreeViewColumn *chooser_table_column; static GtkWidget *checkbutton_chooser_geoonly = NULL; /* Other items */ static int valid_connection = 0; /* Constants for the list view etc. */ enum { IMPORT_POINTER_COLUMN, IMPORT_FILENAME_COLUMN, IMPORT_SCHEMA_COLUMN, IMPORT_TABLE_COLUMN, IMPORT_GEOMETRY_COLUMN, IMPORT_SRID_COLUMN, IMPORT_MODE_COLUMN, IMPORT_REMOVE_COLUMN, IMPORT_N_COLUMNS }; enum { LOADER_MODE_COMBO_TEXT, LOADER_MODE_COMBO_OPTION_CHAR, LOADER_MODE_COMBO_COLUMNS }; enum { CREATE_MODE, APPEND_MODE, DELETE_MODE, PREPARE_MODE }; enum { EXPORT_POINTER_COLUMN, EXPORT_SCHEMA_COLUMN, EXPORT_TABLE_COLUMN, EXPORT_GEOMETRY_COLUMN, EXPORT_GEOMETRY_LISTSTORE_COLUMN, EXPORT_FILENAME_COLUMN, EXPORT_REMOVE_COLUMN, EXPORT_N_COLUMNS }; enum { TABLECHOOSER_SCHEMA_COLUMN, TABLECHOOSER_TABLE_COLUMN, TABLECHOOSER_GEO_LISTSTORE_COLUMN, TABLECHOOSER_GEO_COLUMN, TABLECHOOSER_HASGEO_COLUMN, TABLECHOOSER_N_COLUMNS }; enum { TABLECHOOSER_GEOCOL_COMBO_TEXT, TABLECHOOSER_GEOCOL_COMBO_COLUMNS }; /* Other */ static char *pgui_errmsg = NULL; static PGconn *pg_connection = NULL; static SHPCONNECTIONCONFIG *conn = NULL; static SHPLOADERCONFIG *global_loader_config = NULL; static SHPDUMPERCONFIG *global_dumper_config = NULL; static volatile int is_running = FALSE; /* Local prototypes */ static void pgui_sanitize_connection_string(char *connection_string); /* ** Write a message to the Import Log text area. */ void pgui_log_va(const char *fmt, va_list ap) { char *msg; GtkTextIter iter; if (!lw_vasprintf (&msg, fmt, ap)) return; /* Append text to the end of the text area, scrolling if required to make it visible */ gtk_text_buffer_get_end_iter(textbuffer_log, &iter); gtk_text_buffer_insert(textbuffer_log, &iter, msg, -1); gtk_text_buffer_insert(textbuffer_log, &iter, "\n", -1); gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textview_log), &iter, 0.0, TRUE, 0.0, 1.0); /* Allow GTK to process events */ while (gtk_events_pending()) gtk_main_iteration(); free(msg); return; } /* ** Write a message to the Import Log text area. */ static void pgui_logf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); pgui_log_va(fmt, ap); va_end(ap); return; } /* Write an error message */ void pgui_seterr_va(const char *fmt, va_list ap) { /* Free any existing message */ if (pgui_errmsg) free(pgui_errmsg); if (!lw_vasprintf (&pgui_errmsg, fmt, ap)) return; } static void pgui_seterr(const char *fmt, ...) { va_list ap; va_start(ap, fmt); pgui_seterr_va(fmt, ap); va_end(ap); return; } static void pgui_raise_error_dialogue(void) { GtkWidget *dialog, *label; label = gtk_label_new(pgui_errmsg); dialog = gtk_dialog_new_with_buttons(_("Error"), GTK_WINDOW(window_main), GTK_DIALOG_MODAL & GTK_DIALOG_NO_SEPARATOR & GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE ); gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); gtk_container_set_border_width(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), 15); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return; } /* ** Run a SQL command against the current connection. */ static int pgui_exec(const char *sql) { PGresult *res = NULL; ExecStatusType status; char sql_trunc[256]; /* We need a connection to do anything. */ if ( ! pg_connection ) return 0; if ( ! sql ) return 0; res = PQexec(pg_connection, sql); status = PQresultStatus(res); PQclear(res); /* Did something unexpected happen? */ if ( ! ( status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK ) ) { /* Log notices and return success. */ if ( status == PGRES_NONFATAL_ERROR ) { pgui_logf("%s", PQerrorMessage(pg_connection)); return 1; } /* Log errors and return failure. */ snprintf(sql_trunc, 255, "%s", sql); pgui_logf("Failed SQL begins: \"%s\"", sql_trunc); pgui_logf("Failed in pgui_exec(): %s", PQerrorMessage(pg_connection)); return 0; } return 1; } /* ** Start the COPY process. */ static int pgui_copy_start(const char *sql) { PGresult *res = NULL; ExecStatusType status; char sql_trunc[256]; /* We need a connection to do anything. */ if ( ! pg_connection ) return 0; if ( ! sql ) return 0; res = PQexec(pg_connection, sql); status = PQresultStatus(res); PQclear(res); /* Did something unexpected happen? */ if ( status != PGRES_COPY_IN ) { /* Log errors and return failure. */ snprintf(sql_trunc, 255, "%s", sql); pgui_logf("Failed SQL begins: \"%s\"", sql_trunc); pgui_logf("Failed in pgui_copy_start(): %s", PQerrorMessage(pg_connection)); return 0; } return 1; } /* ** Send a line (row) of data into the COPY procedure. */ static int pgui_copy_write(const char *line) { char line_trunc[256]; /* We need a connection to do anything. */ if ( ! pg_connection ) return 0; if ( ! line ) return 0; /* Did something unexpected happen? */ if ( PQputCopyData(pg_connection, line, strlen(line)) < 0 ) { /* Log errors and return failure. */ snprintf(line_trunc, 255, "%s", line); pgui_logf("Failed row begins: \"%s\"", line_trunc); pgui_logf("Failed in pgui_copy_write(): %s", PQerrorMessage(pg_connection)); return 0; } /* Send linefeed to signify end of line */ PQputCopyData(pg_connection, "\n", 1); return 1; } /* ** Finish the COPY process. */ static int pgui_copy_end(const int rollback) { char *errmsg = NULL; /* We need a connection to do anything. */ if ( ! pg_connection ) return 0; if ( rollback ) errmsg = "Roll back the copy."; /* Did something unexpected happen? */ if ( PQputCopyEnd(pg_connection, errmsg) < 0 ) { /* Log errors and return failure. */ pgui_logf("Failed in pgui_copy_end(): %s", PQerrorMessage(pg_connection)); return 0; } return 1; } /* * Ensures that the filename field width is within the stated bounds, and * 'appropriately' sized, for some definition of 'appropriately'. */ static void update_filename_field_width(void) { GtkTreeIter iter; gboolean is_valid; gchar *filename; int max_width; /* Loop through the list store to find the maximum length of an entry */ max_width = 0; is_valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(import_file_list_store), &iter); while (is_valid) { /* Grab the length of the filename entry in characters */ gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), &iter, IMPORT_FILENAME_COLUMN, &filename, -1); if (strlen(filename) > max_width) max_width = strlen(filename); /* Get next entry */ is_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(import_file_list_store), &iter); } /* Note the layout manager will handle the minimum size for us; we just need to be concerned with making sure we don't exceed a maximum limit */ if (max_width > SHAPEFIELDMAXWIDTH) g_object_set(import_filename_renderer, "width-chars", SHAPEFIELDMAXWIDTH, NULL); else g_object_set(import_filename_renderer, "width-chars", -1, NULL); return; } /* * This will create a connection to the database, just to see if it can. * It cleans up after itself like a good little function and maintains * the status of the valid_connection parameter. */ static int connection_test(void) { char *connection_string = NULL; char *connection_sanitized = NULL; if (!(connection_string = ShpDumperGetConnectionStringFromConn(conn))) { pgui_raise_error_dialogue(); valid_connection = 0; return 0; } connection_sanitized = strdup(connection_string); pgui_sanitize_connection_string(connection_sanitized); pgui_logf("Connecting: %s", connection_sanitized); free(connection_sanitized); pg_connection = PQconnectdb(connection_string); if (PQstatus(pg_connection) == CONNECTION_BAD) { pgui_logf( _("Database connection failed: %s"), PQerrorMessage(pg_connection)); free(connection_string); PQfinish(pg_connection); pg_connection = NULL; valid_connection = 0; return 0; } PQfinish(pg_connection); pg_connection = NULL; free(connection_string); valid_connection = 1; return 1; } /* === Generic window functions === */ /* Delete event handler for popups that simply returns TRUE to prevent GTK from destroying the window and then hides it manually */ static gint pgui_event_popup_delete(GtkWidget *widget, GdkEvent *event, gpointer data) { gtk_widget_hide(GTK_WIDGET(widget)); return TRUE; } /* === Progress window functions === */ static void pgui_action_progress_cancel(GtkDialog *dialog, gint response_id, gpointer user_data) { /* Stop the current import */ is_running = FALSE; return; } static gint pgui_action_progress_delete(GtkWidget *widget, GdkEvent *event, gpointer data) { /* Stop the current import */ is_running = FALSE; return TRUE; } /* === Loader option Window functions === */ /* Update the specified SHPLOADERCONFIG with the global settings from the Options dialog */ static void update_loader_config_globals_from_options_ui(SHPLOADERCONFIG *config) { const char *entry_encoding = gtk_entry_get_text(GTK_ENTRY(entry_options_encoding)); gboolean preservecase = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_preservecase)); gboolean forceint = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_forceint)); gboolean createindex = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_autoindex)); gboolean dbfonly = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_dbfonly)); gboolean dumpformat = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_dumpformat)); gboolean geography = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_geography)); gboolean simplegeoms = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_simplegeoms)); if (geography) { config->geography = 1; if (config->geo_col) free(config->geo_col); config->geo_col = strdup(GEOGRAPHY_DEFAULT); } else { config->geography = 0; if (config->geo_col) free(config->geo_col); config->geo_col = strdup(GEOMETRY_DEFAULT); } /* Encoding */ if (entry_encoding && strlen(entry_encoding) > 0) { if (config->encoding) free(config->encoding); config->encoding = strdup(entry_encoding); } /* Preserve case */ if (preservecase) config->quoteidentifiers = 1; else config->quoteidentifiers = 0; /* No long integers in table */ if (forceint) config->forceint4 = 1; else config->forceint4 = 0; /* Create spatial index after load */ if (createindex) config->createindex = 1; else config->createindex = 0; /* Read the .shp file, don't ignore it */ if (dbfonly) { config->readshape = 0; /* There will be no spatial column so don't create a spatial index */ config->createindex = 0; } else config->readshape = 1; /* Use COPY rather than INSERT format */ if (dumpformat) config->dump_format = 1; else config->dump_format = 0; /* Simple geometries only */ if (simplegeoms) config->simple_geometries = 1; else config->simple_geometries = 0; return; } /* Update the loader options dialog with the current values from the global config */ static void update_options_ui_from_loader_config_globals(void) { gtk_entry_set_text(GTK_ENTRY(entry_options_encoding), global_loader_config->encoding); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_preservecase), global_loader_config->quoteidentifiers ? TRUE : FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_forceint), global_loader_config->forceint4 ? TRUE : FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_autoindex), global_loader_config->createindex ? TRUE : FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_dbfonly), global_loader_config->readshape ? FALSE : TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_dumpformat), global_loader_config->dump_format ? TRUE : FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_geography), global_loader_config->geography ? TRUE : FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_loader_options_simplegeoms), global_loader_config->simple_geometries ? TRUE : FALSE); return; } /* Set the global config variables controlled by the options dialogue */ static void pgui_set_loader_configs_from_options_ui() { GtkTreeIter iter; gboolean is_valid; gpointer gptr; SHPLOADERCONFIG *loader_file_config; /* First update the global (template) configuration */ update_loader_config_globals_from_options_ui(global_loader_config); /* Now also update the same settings for any existing files already added. We do this by looping through all entries and updating their config too. */ is_valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(import_file_list_store), &iter); while (is_valid) { /* Get the SHPLOADERCONFIG for this file entry */ gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), &iter, IMPORT_POINTER_COLUMN, &gptr, -1); loader_file_config = (SHPLOADERCONFIG *)gptr; /* Update it */ update_loader_config_globals_from_options_ui(loader_file_config); /* Get next entry */ is_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(import_file_list_store), &iter); } return; } /* === Table selection dialog functions === */ /* Load the model with information from the database */ static void update_table_chooser_from_database() { PGresult *result, *geocol_result; GtkTreeIter iter, geocol_iter; GtkListStore *dumper_geocol_combo_list; char *connection_string, *sql_form, *query, *schema, *table, *geocol_query, *geocol_name=NULL; int hasgeo, i, j; /* Open a connection to the database */ connection_string = ShpDumperGetConnectionStringFromConn(conn); pg_connection = PQconnectdb(connection_string); /* Here we find a list of all tables/views that not in a pg_* schema (or information_schema) and we return the schema name, table name and whether or not the table/view contains any geo columns */ query = "SELECT tableoids.oid, n.nspname, tableoids.relname, COALESCE((SELECT 1 from pg_attribute WHERE attrelid = tableoids.oid AND atttypid IN (SELECT oid FROM pg_type WHERE typname in ('geometry', 'geography')) LIMIT 1), 0) hasgeo FROM (SELECT c.oid, c.relname, c.relnamespace FROM pg_class c WHERE c.relkind IN ('r', 'v') AND c.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname NOT ILIKE 'pg_%' AND nspname <> 'information_schema')) tableoids, pg_namespace n WHERE tableoids.relnamespace = n.oid ORDER BY n.nspname, tableoids.relname"; result = PQexec(pg_connection, query); /* Free any existing entries in the model */ gtk_list_store_clear(chooser_table_list_store); /* Now insert one row for each query result */ for (i = 0; i < PQntuples(result); i++) { gtk_list_store_insert_before(chooser_table_list_store, &iter, NULL); /* Look up the geo columns; if there are none then we set the field to (None). If we have just one column then we set the column name directly. If we have more than one then we create a combo dropdown containing the column names */ schema = PQgetvalue(result, i, PQfnumber(result, "nspname")); table = PQgetvalue(result, i, PQfnumber(result, "relname")); sql_form = "SELECT n.nspname, c.relname, a.attname FROM pg_class c, pg_namespace n, pg_attribute a WHERE c.relnamespace = n.oid AND n.nspname = '%s' AND c.relname = '%s' AND a.attrelid = c.oid AND a.atttypid IN (SELECT oid FROM pg_type WHERE typname in ('geometry', 'geography'))"; geocol_query = malloc(strlen(sql_form) + strlen(schema) + strlen(table) + 1); sprintf(geocol_query, sql_form, schema, table); geocol_result = PQexec(pg_connection, geocol_query); /* Create a combo list loaded with the column names. Note that while we create the model and load the data here, we don't actually display the geo column in this dialog. Instead we build the list here so that we can pass to the export table list store when creating a new entry. This is to ensure that the export table list model can directly represent a SHPDUMPERCONFIG. */ dumper_geocol_combo_list = gtk_list_store_new(TABLECHOOSER_GEOCOL_COMBO_COLUMNS, G_TYPE_STRING); if (PQntuples(geocol_result) > 0) { /* Load the columns into the list store */ for (j = 0; j < PQntuples(geocol_result); j++) { geocol_name = PQgetvalue(geocol_result, j, PQfnumber(geocol_result, "attname")); gtk_list_store_insert_before(dumper_geocol_combo_list, &geocol_iter, TABLECHOOSER_GEOCOL_COMBO_TEXT); gtk_list_store_set(dumper_geocol_combo_list, &geocol_iter, TABLECHOOSER_GEOCOL_COMBO_TEXT, geocol_name, -1); } } else { /* Add a "default" entry */ geocol_name = NULL; gtk_list_store_insert_before(dumper_geocol_combo_list, &geocol_iter, TABLECHOOSER_GEOCOL_COMBO_TEXT); gtk_list_store_set(dumper_geocol_combo_list, &geocol_iter, TABLECHOOSER_GEOCOL_COMBO_TEXT, _("(None)"), -1); } /* Free the query result */ PQclear(geocol_result); /* Free the query string */ free(geocol_query); /* Set the list store data */ hasgeo = atoi(PQgetvalue(result, i, PQfnumber(result, "hasgeo"))); gtk_list_store_set(chooser_table_list_store, &iter, TABLECHOOSER_SCHEMA_COLUMN, schema, TABLECHOOSER_TABLE_COLUMN, table, TABLECHOOSER_GEO_LISTSTORE_COLUMN, dumper_geocol_combo_list, TABLECHOOSER_GEO_COLUMN, geocol_name, TABLECHOOSER_HASGEO_COLUMN, hasgeo, -1); } /* Clear up the result set */ PQclear(result); /* Close the existing connection */ PQfinish(pg_connection); pg_connection = NULL; return; } /* GtkTreeModelFilter visibility function */ static gboolean table_chooser_visibility_func(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { /* First determine whether the hasgeo tickbox is selected or not */ gboolean geoonly = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_chooser_geoonly)); int hasgeo; /* If unticked then we show all tables */ if (!geoonly) return TRUE; else { /* Otherwise we only show the tables with geo columns */ gtk_tree_model_get(GTK_TREE_MODEL(model), iter, TABLECHOOSER_HASGEO_COLUMN, &hasgeo, -1); if (hasgeo) return TRUE; else return FALSE; } return FALSE; } /* === Dumper option Window functions === */ /* Update the specified SHPDUMPERCONFIG with the global settings from the Options dialog */ static void update_dumper_config_globals_from_options_ui(SHPDUMPERCONFIG *config) { gboolean includegid = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_dumper_options_includegid)); gboolean keep_fieldname_case = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_dumper_options_keep_fieldname_case)); gboolean unescapedattrs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton_dumper_options_unescapedattrs)); /* Include gid or not */ if (includegid) config->includegid = 1; else config->includegid = 0; /* Keep fieldname case */ if (keep_fieldname_case) config->keep_fieldname_case = 1; else config->keep_fieldname_case = 0; /* Escape column names or not */ if (unescapedattrs) config->unescapedattrs = 1; else config->unescapedattrs = 0; return; } /* Update the options dialog with the current values from the global config */ static void update_options_ui_from_dumper_config_globals(void) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_dumper_options_includegid), global_dumper_config->includegid ? TRUE : FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_dumper_options_keep_fieldname_case), global_dumper_config->keep_fieldname_case ? TRUE : FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_dumper_options_unescapedattrs), global_dumper_config->unescapedattrs ? TRUE : FALSE); return; } /* Set the global config variables controlled by the options dialogue */ static void pgui_set_dumper_configs_from_options_ui() { GtkTreeIter iter; gboolean is_valid; gpointer gptr; SHPDUMPERCONFIG *dumper_table_config; /* First update the global (template) configuration */ update_dumper_config_globals_from_options_ui(global_dumper_config); /* Now also update the same settings for any existing tables already added. We do this by looping through all entries and updating their config too. */ is_valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(export_table_list_store), &iter); while (is_valid) { /* Get the SHPDUMPERCONFIG for this file entry */ gtk_tree_model_get(GTK_TREE_MODEL(export_table_list_store), &iter, EXPORT_POINTER_COLUMN, &gptr, -1); dumper_table_config = (SHPDUMPERCONFIG *)gptr; /* Update it */ update_dumper_config_globals_from_options_ui(dumper_table_config); /* Get next entry */ is_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(export_table_list_store), &iter); } return; } /* Signal handler for ticking/unticking the "only show geo columns" box */ static void pgui_action_chooser_toggle_show_geocolumn(GtkToggleButton *togglebutton, gpointer user_data) { /* Simply update the listview filter */ gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(chooser_filtered_table_list_store)); return; } static void pgui_action_dumper_options_open(GtkWidget *widget, gpointer data) { update_options_ui_from_dumper_config_globals(); gtk_widget_show_all(dialog_dumper_options); return; } static void pgui_action_dumper_options_close(GtkWidget *widget, gint response, gpointer data) { /* Only update the configuration if the user hit OK */ if (response == GTK_RESPONSE_OK) pgui_set_dumper_configs_from_options_ui(); /* Hide the dialog */ gtk_widget_hide(dialog_dumper_options); return; } /* === Main window functions === */ /* Given a filename, generate a new loader configuration */ static SHPLOADERCONFIG * create_new_file_config(const char *filename) { SHPLOADERCONFIG *loader_file_config; char *table_start, *table_end; int i; /* Generate a new configuration by copying the global options first and then adding in the specific values for this file */ loader_file_config = malloc(sizeof(SHPLOADERCONFIG)); memcpy(loader_file_config, global_loader_config, sizeof(SHPLOADERCONFIG)); /* Note: we must copy the encoding here since it is the only pass-by-reference type set in set_loader_config_defaults() and each config needs its own copy of any referenced items */ loader_file_config->encoding = strdup(global_loader_config->encoding); /* Copy the filename (we'll remove the .shp extension in a sec) */ loader_file_config->shp_file = strdup(filename); /* Generate the default table name from the filename */ table_start = loader_file_config->shp_file + strlen(loader_file_config->shp_file); while (*table_start != '/' && *table_start != '\\' && table_start > loader_file_config->shp_file) table_start--; /* Forward one to start of actual characters */ table_start++; /* Roll back from end to first . character. */ table_end = loader_file_config->shp_file + strlen(loader_file_config->shp_file); while (*table_end != '.' && table_end > loader_file_config->shp_file && table_end > table_start ) table_end--; /* Copy the table name */ loader_file_config->table = malloc(table_end - table_start + 1); memcpy(loader_file_config->table, table_start, table_end - table_start); loader_file_config->table[table_end - table_start] = '\0'; /* Force the table name to lower case */ for (i = 0; i < table_end - table_start; i++) { if (isupper(loader_file_config->table[i]) != 0) loader_file_config->table[i] = tolower(loader_file_config->table[i]); } /* Set the default schema to public */ loader_file_config->schema = strdup("public"); /* Set the default geo column name */ if (global_loader_config->geography) loader_file_config->geo_col = strdup(GEOGRAPHY_DEFAULT); else loader_file_config->geo_col = strdup(GEOMETRY_DEFAULT); return loader_file_config; } /* Given the loader configuration, add a new row representing this file to the listview */ static void add_loader_file_config_to_list(SHPLOADERCONFIG *loader_file_config) { GtkTreeIter iter; char *srid; /* Convert SRID into string */ lw_asprintf(&srid, "%d", loader_file_config->sr_id); gtk_list_store_insert_before(import_file_list_store, &iter, NULL); gtk_list_store_set(import_file_list_store, &iter, IMPORT_POINTER_COLUMN, loader_file_config, IMPORT_FILENAME_COLUMN, loader_file_config->shp_file, IMPORT_SCHEMA_COLUMN, loader_file_config->schema, IMPORT_TABLE_COLUMN, loader_file_config->table, IMPORT_GEOMETRY_COLUMN, loader_file_config->geo_col, IMPORT_SRID_COLUMN, srid, IMPORT_MODE_COLUMN, _("Create"), -1); /* Update the filename field width */ update_filename_field_width(); return; } /* Free up the specified SHPLOADERCONFIG */ static void free_loader_config(SHPLOADERCONFIG *config) { if (config->table) free(config->table); if (config->schema) free(config->schema); if (config->geo_col) free(config->geo_col); if (config->shp_file) free(config->shp_file); if (config->encoding) free(config->encoding); if (config->tablespace) free(config->tablespace); if (config->idxtablespace) free(config->idxtablespace); /* Free the config itself */ free(config); } /* Given a table selection, generate a new configuration */ static SHPDUMPERCONFIG * create_new_table_config(GtkTreeIter *iter) { SHPDUMPERCONFIG *dumper_table_config; gchar *schema, *table, *geocol; gint hasgeo; /* Generate a new configuration by copying the global options first and then adding in the specific values for this table */ dumper_table_config = malloc(sizeof(SHPDUMPERCONFIG)); memcpy(dumper_table_config, global_dumper_config, sizeof(SHPDUMPERCONFIG)); /* Grab the values from the current iter */ gtk_tree_model_get(GTK_TREE_MODEL(chooser_filtered_table_list_store), iter, TABLECHOOSER_SCHEMA_COLUMN, &schema, TABLECHOOSER_TABLE_COLUMN, &table, TABLECHOOSER_GEO_COLUMN, &geocol, TABLECHOOSER_HASGEO_COLUMN, &hasgeo, -1); /* Set up the values in the SHPDUMPERCONFIG */ dumper_table_config->schema = strdup(schema); dumper_table_config->table = strdup(table); /* We also set the filename the same as the table name */ dumper_table_config->shp_file = strdup(table); if (hasgeo && geocol) dumper_table_config->geo_col_name = strdup(geocol); else dumper_table_config->geo_col_name = NULL; return dumper_table_config; } /* Given the dumper configuration, add a new row representing this file to the listview. The liststore and iter arguments are optional, and enable the user to specify additional information to the view, e.g. geo column multi-choice. */ static void add_dumper_table_config_to_list(SHPDUMPERCONFIG *dumper_table_config, GtkListStore *chooser_liststore, GtkTreeIter *chooser_iter) { GtkTreeIter iter; GtkListStore *geocol_liststore; gtk_list_store_insert_before(export_table_list_store, &iter, NULL); gtk_list_store_set(export_table_list_store, &iter, EXPORT_POINTER_COLUMN, dumper_table_config, EXPORT_SCHEMA_COLUMN, dumper_table_config->schema, EXPORT_TABLE_COLUMN, dumper_table_config->table, EXPORT_GEOMETRY_COLUMN, dumper_table_config->geo_col_name, EXPORT_FILENAME_COLUMN, dumper_table_config->shp_file, -1); /* If we have supplied the table_chooser store for additional information, use it */ if (chooser_liststore) { /* Let's add a multi-choice geometry column to the table */ gtk_tree_model_get(GTK_TREE_MODEL(chooser_liststore), chooser_iter, TABLECHOOSER_GEO_LISTSTORE_COLUMN, &geocol_liststore, -1); gtk_list_store_set(export_table_list_store, &iter, EXPORT_GEOMETRY_LISTSTORE_COLUMN, geocol_liststore, -1); } return; } /* Free up the specified SHPDUMPERCONFIG */ static void free_dumper_config(SHPDUMPERCONFIG *config) { if (config->table) free(config->table); if (config->schema) free(config->schema); if (config->geo_col_name) free(config->geo_col_name); if (config->shp_file) free(config->shp_file); /* Free the config itself */ free(config); } /* Validate a single DBF column type against a PostgreSQL type: return either TRUE or FALSE depending upon whether or not the type is (broadly) compatible */ static int validate_shape_column_against_pg_column(int dbf_fieldtype, char *pg_fieldtype) { switch (dbf_fieldtype) { case FTString: /* Only varchar */ if (!strcmp(pg_fieldtype, "varchar")) return -1; break; case FTDate: /* Only date */ if (!strcmp(pg_fieldtype, "date")) return -1; break; case FTInteger: /* Tentatively allow int2, int4 and numeric */ if (!strcmp(pg_fieldtype, "int2") || !strcmp(pg_fieldtype, "int4") || !strcmp(pg_fieldtype, "numeric")) return -1; break; case FTDouble: /* Only float8/numeric */ if (!strcmp(pg_fieldtype, "float8") || !strcmp(pg_fieldtype, "numeric")) return -1; break; case FTLogical: /* Only boolean */ if (!strcmp(pg_fieldtype, "boolean")) return -1; break; } /* Otherwise we can't guarantee this (but this is just a warning anyway) */ return 0; } /* Validate column compatibility for the given loader configuration against the table/column list returned in result */ static int validate_remote_loader_columns(SHPLOADERCONFIG *config, PGresult *result) { ExecStatusType status; SHPLOADERSTATE *state; int ntuples; char *pg_fieldname, *pg_fieldtype; int ret, i, j, found, response = SHPLOADEROK; /* Check the status of the result set */ status = PQresultStatus(result); if (status == PGRES_TUPLES_OK) { ntuples = PQntuples(result); switch (config->opt) { case 'c': /* If we have a row matching the table given in the config, then it already exists */ if (ntuples > 0) { pgui_seterr(_("ERROR: Create mode selected for existing table: %s.%s"), config->schema, config->table); response = SHPLOADERERR; } break; case 'p': /* If we have a row matching the table given in the config, then it already exists */ if (ntuples > 0) { pgui_seterr(_("ERROR: Prepare mode selected for existing table: %s.%s"), config->schema, config->table); response = SHPLOADERERR; } break; case 'a': /* If we are trying to append to a table but it doesn't exist, emit a warning */ if (ntuples == 0) { pgui_seterr(_("ERROR: Destination table %s.%s could not be found for appending"), config->schema, config->table); response = SHPLOADERERR; } else { /* If we have a row then lets do some simple column validation... */ state = ShpLoaderCreate(config); ret = ShpLoaderOpenShape(state); if (ret != SHPLOADEROK) { pgui_logf(_("Warning: Could not load shapefile %s"), config->shp_file); ShpLoaderDestroy(state); } /* Find each column based upon its name and then validate type separately... */ for (i = 0; i < state->num_fields; i++) { /* Make sure we find a column */ found = 0; for (j = 0; j < ntuples; j++) { pg_fieldname = PQgetvalue(result, j, PQfnumber(result, "field")); pg_fieldtype = PQgetvalue(result, j, PQfnumber(result, "type")); if (!strcmp(state->field_names[i], pg_fieldname)) { found = -1; ret = validate_shape_column_against_pg_column(state->types[i], pg_fieldtype); if (!ret) { pgui_logf(_("Warning: DBF Field '%s' is not compatible with PostgreSQL column '%s' in %s.%s"), state->field_names[i], pg_fieldname, config->schema, config->table); response = SHPLOADERWARN; } } } /* Flag a warning if we can't find a match */ if (!found) { pgui_logf(_("Warning: DBF Field '%s' within file %s could not be matched to a column within table %s.%s"), state->field_names[i], config->shp_file, config->schema, config->table); response = SHPLOADERWARN; } } ShpLoaderDestroy(state); } break; } } else { pgui_seterr(_("ERROR: unable to process validation response from remote server")); response = SHPLOADERERR; } return response; } /* Terminate the main loop and exit the application. */ static void pgui_quit (GtkWidget *widget, gpointer data) { gtk_main_quit(); } static void pgui_action_about_open() { /* Display the dialog and hide it again upon exit */ gtk_dialog_run(GTK_DIALOG(dialog_about)); gtk_widget_hide(dialog_about); } static void pgui_action_cancel(GtkWidget *widget, gpointer data) { if (!is_running) pgui_quit(widget, data); /* quit if we're not running */ else is_running = FALSE; } static void pgui_action_loader_options_open(GtkWidget *widget, gpointer data) { update_options_ui_from_loader_config_globals(); gtk_widget_show_all(dialog_loader_options); return; } static void pgui_action_loader_options_close(GtkWidget *widget, gint response, gpointer data) { /* Only update the configuration if the user hit OK */ if (response == GTK_RESPONSE_OK) pgui_set_loader_configs_from_options_ui(); /* Hide the dialog */ gtk_widget_hide(dialog_loader_options); return; } static void pgui_action_open_file_dialog(GtkWidget *widget, gpointer data) { SHPLOADERCONFIG *loader_file_config; GSList *filename_list, *filename_item; gchar *filename; /* Make sure we deselect any files from the last time */ gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(dialog_filechooser)); /* Run the dialog */ if (gtk_dialog_run(GTK_DIALOG(dialog_filechooser)) == GTK_RESPONSE_ACCEPT) { /* Create the new file configuration based upon the each filename and add it to the listview */ filename_list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog_filechooser)); filename_item = g_slist_nth(filename_list, 0); while (filename_item) { /* Add the configuration */ filename = g_slist_nth_data(filename_item, 0); loader_file_config = create_new_file_config(filename); add_loader_file_config_to_list(loader_file_config); /* Grab the next filename */ filename_item = g_slist_next(filename_item); } /* Free the list */ g_slist_free(filename_list); } gtk_widget_hide(dialog_filechooser); } static void pgui_action_open_table_dialog(GtkWidget *widget, gpointer data) { SHPDUMPERCONFIG *dumper_table_config; GtkTreeSelection *chooser_selection; GtkTreeModel *model; GList *selected_rows_list, *selected_row; GtkTreeIter iter; GtkTreePath *tree_path; /* Make sure we can connect to the database first */ if (!connection_test()) { pgui_seterr(_("Unable to connect to the database - please check your connection settings")); pgui_raise_error_dialogue(); /* Open the connections UI for the user */ update_conn_ui_from_conn_config(); gtk_widget_show_all(GTK_WIDGET(window_conn)); return; } /* Setup the form */ update_table_chooser_from_database(); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(chooser_filtered_table_list_store)); /* Run the dialog */ gtk_widget_show_all(dialog_tablechooser); if (gtk_dialog_run(GTK_DIALOG(dialog_tablechooser)) == GTK_RESPONSE_OK) { /* Create the new dumper configuration based upon the selected iters and add them to the listview */ chooser_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(chooser_tree)); selected_rows_list = gtk_tree_selection_get_selected_rows(chooser_selection, &model); selected_row = g_list_first(selected_rows_list); while (selected_row) { /* Get the tree iter */ tree_path = (GtkTreePath *)g_list_nth_data(selected_row, 0); gtk_tree_model_get_iter(model, &iter, tree_path); /* Get the config and add it to the list */ dumper_table_config = create_new_table_config(&iter); add_dumper_table_config_to_list(dumper_table_config, chooser_filtered_table_list_store, &iter); /* Get the next row */ selected_row = g_list_next(selected_row); } /* Free the GList */ g_list_foreach(selected_row, (GFunc)gtk_tree_path_free, NULL); g_list_free(selected_row); } gtk_widget_hide(dialog_tablechooser); } /* * Signal handler for the remove box. Performs no user interaction, simply * removes the row from the table. */ static void pgui_action_handle_table_remove(GtkCellRendererToggle *renderer, gchar *path, gpointer user_data) { GtkTreeIter iter; SHPDUMPERCONFIG *dumper_table_config; gpointer gptr; /* Grab the SHPDUMPERCONFIG from the EXPORT_POINTER_COLUMN for the list store */ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(export_table_list_store), &iter, path); gtk_tree_model_get(GTK_TREE_MODEL(export_table_list_store), &iter, EXPORT_POINTER_COLUMN, &gptr, -1); dumper_table_config = (SHPDUMPERCONFIG *)gptr; /* Free the configuration from memory */ free_dumper_config(dumper_table_config); /* Remove the row from the list */ gtk_list_store_remove(export_table_list_store, &iter); } static void pgui_action_import(GtkWidget *widget, gpointer data) { SHPLOADERCONFIG *loader_file_config; SHPLOADERSTATE *state; gint is_valid; gpointer gptr; GtkTreeIter iter; char *sql_form, *query, *connection_string, *progress_text = NULL, *progress_shapefile = NULL; PGresult *result; int ret, i = 0; char *header, *footer, *record; /* Get the first row of the import list */ is_valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(import_file_list_store), &iter); if (!is_valid) { pgui_seterr(_("ERROR: You haven't specified any files to import")); pgui_raise_error_dialogue(); return; } /* Firstly make sure that we can connect to the database - if we can't then there isn't much point doing anything else... */ if (!connection_test()) { pgui_seterr(_("Unable to connect to the database - please check your connection settings")); pgui_raise_error_dialogue(); /* Open the connections UI for the user */ update_conn_ui_from_conn_config(); gtk_widget_show_all(GTK_WIDGET(window_conn)); return; } /* Let's open a single connection to the remote DB for the duration of the validation pass; note that we already know the connection string works, otherwise we would have bailed out earlier in the function */ connection_string = ShpDumperGetConnectionStringFromConn(conn); pg_connection = PQconnectdb(connection_string); /* Setup the table/column type discovery query */ sql_form = "SELECT a.attnum, a.attname AS field, t.typname AS type, a.attlen AS length, a.atttypmod AS precision FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE c.relname = '%s' AND n.nspname = '%s' AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid AND c.relnamespace = n.oid ORDER BY a.attnum"; /* Validation: we loop through each of the files in order to validate them as a separate pass */ while (is_valid) { /* Grab the SHPLOADERCONFIG for this row */ gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), &iter, IMPORT_POINTER_COLUMN, &gptr, -1); loader_file_config = (SHPLOADERCONFIG *)gptr; /* For each entry, we execute a remote query in order to determine the column names and types for the remote table if they actually exist */ query = malloc(strlen(sql_form) + strlen(loader_file_config->schema) + strlen(loader_file_config->table) + 1); sprintf(query, sql_form, loader_file_config->table, loader_file_config->schema); result = PQexec(pg_connection, query); /* Call the validation function with the SHPLOADERCONFIG and the result set */ ret = validate_remote_loader_columns(loader_file_config, result); if (ret == SHPLOADERERR) { pgui_raise_error_dialogue(); PQclear(result); free(query); return; } /* Free the SQL query */ PQclear(result); free(query); /* Get next entry */ is_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(import_file_list_store), &iter); } /* Close our database connection */ PQfinish(pg_connection); /* Once we've done the validation pass, now let's load the shapefile */ is_valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(import_file_list_store), &iter); while (is_valid) { /* Grab the SHPLOADERCONFIG for this row */ gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), &iter, IMPORT_POINTER_COLUMN, &gptr, -1); loader_file_config = (SHPLOADERCONFIG *)gptr; pgui_logf("\n=============================="); pgui_logf("Importing with configuration: %s, %s, %s, %s, mode=%c, dump=%d, simple=%d, geography=%d, index=%d, shape=%d, srid=%d", loader_file_config->table, loader_file_config->schema, loader_file_config->geo_col, loader_file_config->shp_file, loader_file_config->opt, loader_file_config->dump_format, loader_file_config->simple_geometries, loader_file_config->geography, loader_file_config->createindex, loader_file_config->readshape, loader_file_config->sr_id); /* * Loop through the items in the shapefile */ is_running = TRUE; /* One connection per file, otherwise error handling becomes tricky... */ pg_connection = PQconnectdb(connection_string); /* Disable the button to prevent multiple imports running at the same time */ gtk_widget_set_sensitive(widget, FALSE); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); /* Create the shapefile state object */ state = ShpLoaderCreate(loader_file_config); /* Open the shapefile */ ret = ShpLoaderOpenShape(state); if (ret != SHPLOADEROK) { pgui_logf("%s", state->message); if (ret == SHPLOADERERR) goto import_cleanup; } /* For progress display, only show the "core" filename */ for (i = strlen(loader_file_config->shp_file); i >= 0 && loader_file_config->shp_file[i - 1] != '\\' && loader_file_config->shp_file[i - 1] != '/'; i--); progress_shapefile = malloc(strlen(loader_file_config->shp_file)); strcpy(progress_shapefile, &loader_file_config->shp_file[i]); /* Display the progress dialog */ lw_asprintf(&progress_text, _("Importing shapefile %s (%d records)..."), progress_shapefile, ShpLoaderGetRecordCount(state)); gtk_label_set_text(GTK_LABEL(label_progress), progress_text); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), 0.0); gtk_widget_show_all(dialog_progress); /* If reading the whole shapefile, display its type */ if (state->config->readshape) { pgui_logf("Shapefile type: %s", SHPTypeName(state->shpfiletype)); pgui_logf("PostGIS type: %s[%d]", state->pgtype, state->pgdims); } /* Get the header */ ret = ShpLoaderGetSQLHeader(state, &header); if (ret != SHPLOADEROK) { pgui_logf("%s", state->message); if (ret == SHPLOADERERR) goto import_cleanup; } /* Send the header to the remote server: if we are in COPY mode then the last statement will be a COPY and so will change connection mode */ ret = pgui_exec(header); free(header); if (!ret) goto import_cleanup; /* If we are in prepare mode, we need to skip the actual load. */ if (state->config->opt != 'p') { int numrecords = ShpLoaderGetRecordCount(state); int records_per_tick = (numrecords / 200) - 1; if ( records_per_tick < 1 ) records_per_tick = 1; /* If we are in COPY (dump format) mode, output the COPY statement and enter COPY mode */ if (state->config->dump_format) { ret = ShpLoaderGetSQLCopyStatement(state, &header); if (ret != SHPLOADEROK) { pgui_logf("%s", state->message); if (ret == SHPLOADERERR) goto import_cleanup; } /* Send the result to the remote server: this should put us in COPY mode */ ret = pgui_copy_start(header); free(header); if (!ret) goto import_cleanup; } /* Main loop: iterate through all of the records and send them to stdout */ for (i = 0; i < numrecords && is_running; i++) { ret = ShpLoaderGenerateSQLRowStatement(state, i, &record); switch (ret) { case SHPLOADEROK: /* Simply send the statement */ if (state->config->dump_format) ret = pgui_copy_write(record); else ret = pgui_exec(record); /* Display a record number if we failed */ if (!ret) pgui_logf(_("Import failed on record number %d"), i); free(record); break; case SHPLOADERERR: /* Display the error message then stop */ pgui_logf("%s\n", state->message); goto import_cleanup; break; case SHPLOADERWARN: /* Display the warning, but continue */ pgui_logf("%s\n", state->message); if (state->config->dump_format) ret = pgui_copy_write(record); else ret = pgui_exec(record); /* Display a record number if we failed */ if (!ret) pgui_logf(_("Import failed on record number %d"), i); free(record); break; case SHPLOADERRECDELETED: /* Record is marked as deleted - ignore */ break; case SHPLOADERRECISNULL: /* Record is NULL and should be ignored according to NULL policy */ break; } /* Update the progress bar */ if ( i % records_per_tick == 0 ) gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), (float)i / numrecords); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); } /* If we are in COPY (dump format) mode, leave COPY mode */ if (state->config->dump_format) { if (! pgui_copy_end(0) ) goto import_cleanup; result = PQgetResult(pg_connection); if (PQresultStatus(result) != PGRES_COMMAND_OK) { pgui_logf(_("COPY failed with the following error: %s"), PQerrorMessage(pg_connection)); ret = SHPLOADERERR; goto import_cleanup; } } } /* if (state->config->opt != 'p') */ /* Only continue if we didn't abort part way through */ if (is_running) { /* Get the footer */ ret = ShpLoaderGetSQLFooter(state, &footer); if (ret != SHPLOADEROK) { pgui_logf("%s\n", state->message); if (ret == SHPLOADERERR) goto import_cleanup; } /* Just in case index creation takes a long time, update the progress text */ if (state->config->createindex) { gtk_label_set_text(GTK_LABEL(label_progress), _("Creating spatial index...")); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); } /* Send the footer to the server */ ret = pgui_exec(footer); free(footer); if (!ret) goto import_cleanup; } import_cleanup: /* Import has definitely stopped running */ is_running = FALSE; /* Close the existing connection */ PQfinish(pg_connection); pg_connection = NULL; /* If we didn't finish inserting all of the items (and we expected to), an error occurred */ if ((state->config->opt != 'p' && i != ShpLoaderGetRecordCount(state)) || !ret) pgui_logf(_("Shapefile import failed.")); else pgui_logf(_("Shapefile import completed.")); /* Free the state object */ ShpLoaderDestroy(state); /* Tidy up */ if (progress_text) free(progress_text); if (progress_shapefile) free(progress_shapefile); /* Get next entry */ is_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(import_file_list_store), &iter); } /* Import has definitely finished */ is_running = FALSE; /* Enable the button once again */ gtk_widget_set_sensitive(widget, TRUE); /* Silly GTK bug means we have to hide and show the button for it to work again! */ gtk_widget_hide(widget); gtk_widget_show(widget); /* Hide the progress dialog */ gtk_widget_hide(dialog_progress); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); /* Tidy up */ free(connection_string); return; } static void pgui_action_export(GtkWidget *widget, gpointer data) { SHPDUMPERCONFIG *dumper_table_config; SHPDUMPERSTATE *state; gint is_valid; gpointer gptr; GtkTreeIter iter; char *output_shapefile, *orig_shapefile, *progress_text = NULL; gchar *folder_path; int ret, success = FALSE, i = 0; /* Get the first row of the import list */ is_valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(export_table_list_store), &iter); if (!is_valid) { pgui_seterr(_("ERROR: You haven't specified any tables to export")); pgui_raise_error_dialogue(); return; } /* Firstly make sure that we can connect to the database - if we can't then there isn't much point doing anything else... */ if (!connection_test()) { pgui_seterr(_("Unable to connect to the database - please check your connection settings")); pgui_raise_error_dialogue(); /* Open the connections UI for the user */ update_conn_ui_from_conn_config(); gtk_widget_show_all(GTK_WIDGET(window_conn)); return; } /* Now open the file selector dialog so the user can specify where they would like the output files to reside */ if (gtk_dialog_run(GTK_DIALOG(dialog_folderchooser)) != GTK_RESPONSE_ACCEPT) { gtk_widget_hide(dialog_folderchooser); return; } gtk_widget_hide(dialog_folderchooser); folder_path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog_folderchooser)); /* Now everything is set up, let's extract the tables */ is_valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(export_table_list_store), &iter); while (is_valid) { /* Grab the SHPDUMPERCONFIG for this row */ gtk_tree_model_get(GTK_TREE_MODEL(export_table_list_store), &iter, EXPORT_POINTER_COLUMN, &gptr, -1); dumper_table_config = (SHPDUMPERCONFIG *)gptr; pgui_logf("\n=============================="); pgui_logf("Exporting with configuration: %s, %s, %s", dumper_table_config->table, dumper_table_config->schema, dumper_table_config->shp_file); /* Export is running */ is_running = TRUE; success = FALSE; /* Disable the button to prevent multiple imports running at the same time */ gtk_widget_set_sensitive(widget, FALSE); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); /* Create the state for each configuration */ state = ShpDumperCreate(dumper_table_config); state->config->conn = conn; /* Save the original shapefile name, then create a temporary version containing the full path */ orig_shapefile = dumper_table_config->shp_file; output_shapefile = malloc(strlen(folder_path) + strlen(dumper_table_config->shp_file) + 2); strcpy(output_shapefile, folder_path); strcat(output_shapefile, G_DIR_SEPARATOR_S); strcat(output_shapefile, dumper_table_config->shp_file); dumper_table_config->shp_file = output_shapefile; /* Connect to the database */ ret = ShpDumperConnectDatabase(state); if (ret != SHPDUMPEROK) { pgui_seterr("%s", state->message); pgui_raise_error_dialogue(); goto export_cleanup; } /* Display the progress dialog */ gtk_label_set_text(GTK_LABEL(label_progress), _("Initialising...")); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), 0.0); gtk_widget_show_all(dialog_progress); ret = ShpDumperOpenTable(state); if (ret != SHPDUMPEROK) { pgui_logf("%s", state->message); if (ret == SHPDUMPERERR) { gtk_widget_hide(dialog_progress); pgui_seterr("%s", state->message); pgui_raise_error_dialogue(); goto export_cleanup; } } /* Update the text */ lw_asprintf(&progress_text, _("Exporting table %s (%d records)..."), dumper_table_config->table, ShpDumperGetRecordCount(state)); gtk_label_set_text(GTK_LABEL(label_progress), progress_text); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); pgui_logf(_("Done (postgis major version: %d)"), state->pgis_major_version); pgui_logf(_("Output shape: %s"), shapetypename(state->outshptype)); for (i = 0; i < ShpDumperGetRecordCount(state) && is_running == TRUE; i++) { ret = ShpLoaderGenerateShapeRow(state); if (ret != SHPDUMPEROK) { pgui_logf("%s", state->message); if (ret == SHPDUMPERERR) { gtk_widget_hide(dialog_progress); pgui_seterr("%s", state->message); pgui_raise_error_dialogue(); goto export_cleanup; } } /* Update the progress bar */ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), (float)i / ShpDumperGetRecordCount(state)); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); } /* Finish the dump */ ret = ShpDumperCloseTable(state); if (ret != SHPDUMPEROK) { pgui_logf("%s", state->message); if (ret == SHPDUMPERERR) { gtk_widget_hide(dialog_progress); pgui_seterr("%s", state->message); pgui_raise_error_dialogue(); } } /* Indicate success */ if (is_running) success = TRUE; export_cleanup: /* Tidy up everything */ ShpDumperDestroy(state); /* Reset shapefile back to original form (without full path) */ dumper_table_config->shp_file = orig_shapefile; /* Get next entry */ is_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(export_table_list_store), &iter); } /* Export has definitely finished */ is_running = FALSE; if (!success) pgui_logf(_("Table export failed.")); else pgui_logf(_("Table export completed.")); /* Enable the button once again */ gtk_widget_set_sensitive(widget, TRUE); /* Silly GTK bug means we have to hide and show the button for it to work again! */ gtk_widget_hide(widget); gtk_widget_show(widget); /* Hide the progress dialog */ gtk_widget_hide(dialog_progress); /* Allow GTK events to get a look in */ while (gtk_events_pending()) gtk_main_iteration(); return; } /* === Import ListView functions and signal handlers === */ /* Creates a single file row in the list table given the URI of a file */ static void process_single_uri(char *uri) { SHPLOADERCONFIG *loader_file_config; char *filename = NULL; char *hostname; GError *error = NULL; if (uri == NULL) { pgui_logf(_("Unable to process drag URI.")); return; } filename = g_filename_from_uri(uri, &hostname, &error); g_free(uri); if (filename == NULL) { pgui_logf(_("Unable to process filename: %s\n"), error->message); g_error_free(error); return; } /* Create a new row in the listview */ loader_file_config = create_new_file_config(filename); add_loader_file_config_to_list(loader_file_config); g_free(filename); g_free(hostname); } /* Update the SHPLOADERCONFIG to the values currently contained within the iter */ static void update_loader_file_config_from_listview_iter(GtkTreeIter *iter, SHPLOADERCONFIG *loader_file_config) { gchar *schema, *table, *geo_col, *srid; /* Grab the main values for this file */ gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), iter, IMPORT_SCHEMA_COLUMN, &schema, IMPORT_TABLE_COLUMN, &table, IMPORT_GEOMETRY_COLUMN, &geo_col, IMPORT_SRID_COLUMN, &srid, -1); /* Update the schema */ if (loader_file_config->schema) free(loader_file_config->schema); loader_file_config->schema = strdup(schema); /* Update the table */ if (loader_file_config->table) free(loader_file_config->table); loader_file_config->table = strdup(table); /* Update the geo column */ if (loader_file_config->geo_col) free(loader_file_config->geo_col); loader_file_config->geo_col = strdup(geo_col); /* Update the SRID */ loader_file_config->sr_id = atoi(srid); /* Free the values */ return; } /* * Here lives the magic of the drag-n-drop of the app. We really don't care * about much of the provided tidbits. We only actually user selection_data * and extract a list of filenames from it. */ static void pgui_action_handle_file_drop(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, gpointer data) { const gchar *p, *q; if (selection_data->data == NULL) { pgui_logf(_("Unable to process drag data.")); return; } p = (char*)selection_data->data; while (p) { /* Only process non-comments */ if (*p != '#') { /* Trim leading whitespace */ while (g_ascii_isspace(*p)) p++; q = p; /* Scan to the end of the string (null or newline) */ while (*q && (*q != '\n') && (*q != '\r')) q++; if (q > p) { /* Ignore terminating character */ q--; /* Trim trailing whitespace */ while (q > p && g_ascii_isspace(*q)) q--; if (q > p) { process_single_uri(g_strndup(p, q - p + 1)); } } } /* Skip to the next entry */ p = strchr(p, '\n'); if (p) p++; } } /* * This function is a signal handler for the load mode combo boxes. */ static void pgui_action_handle_tree_combo(GtkCellRendererCombo *combo, gchar *path_string, GtkTreeIter *new_iter, gpointer user_data) { GtkTreeIter iter; SHPLOADERCONFIG *loader_file_config; char opt; gchar *combo_text; gpointer gptr; /* Grab the SHPLOADERCONFIG from the IMPORT_POINTER_COLUMN for the list store */ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(import_file_list_store), &iter, path_string); gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), &iter, IMPORT_POINTER_COLUMN, &gptr, -1); loader_file_config = (SHPLOADERCONFIG *)gptr; /* Now grab the row selected within the combo box */ gtk_tree_model_get(GTK_TREE_MODEL(loader_mode_combo_list), new_iter, LOADER_MODE_COMBO_OPTION_CHAR, &opt, -1); /* Update the configuration */ /* Hack for index creation: we must disable it if we are appending, otherwise we end up trying to generate the index again */ loader_file_config->createindex = global_loader_config->createindex; switch (opt) { case 'a': loader_file_config->opt = 'a'; /* Other half of index creation hack */ loader_file_config->createindex = 0; break; case 'd': loader_file_config->opt = 'd'; break; case 'p': loader_file_config->opt = 'p'; break; case 'c': loader_file_config->opt = 'c'; break; } /* Update the selection in the listview with the text from the combo */ gtk_tree_model_get(GTK_TREE_MODEL(loader_mode_combo_list), new_iter, LOADER_MODE_COMBO_TEXT, &combo_text, -1); gtk_list_store_set(import_file_list_store, &iter, IMPORT_MODE_COLUMN, combo_text, -1); return; } /* * This method is a signal listener for all text renderers in the file * list table, including the empty ones. Edits of the empty table are * passed to an appropriate function, while edits of existing file rows * are applied and the various validations called. */ static void pgui_action_handle_loader_edit(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer column) { GtkTreeIter iter; gpointer gptr; gint columnindex; SHPLOADERCONFIG *loader_file_config; char *srid; /* Empty doesn't fly */ if (strlen(new_text) == 0) return; /* Update the model with the current edit change */ columnindex = *(gint *)column; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(import_file_list_store), &iter, path); gtk_list_store_set(import_file_list_store, &iter, columnindex, new_text, -1); /* Grab the SHPLOADERCONFIG from the IMPORT_POINTER_COLUMN for the list store */ gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), &iter, IMPORT_POINTER_COLUMN, &gptr, -1); loader_file_config = (SHPLOADERCONFIG *)gptr; /* Update the configuration from the current UI data */ update_loader_file_config_from_listview_iter(&iter, loader_file_config); /* Now refresh the listview UI row with the new configuration */ lw_asprintf(&srid, "%d", loader_file_config->sr_id); gtk_list_store_set(import_file_list_store, &iter, IMPORT_SCHEMA_COLUMN, loader_file_config->schema, IMPORT_TABLE_COLUMN, loader_file_config->table, IMPORT_GEOMETRY_COLUMN, loader_file_config->geo_col, IMPORT_SRID_COLUMN, srid, -1); return; } /* * Signal handler for the remove box. Performs no user interaction, simply * removes the row from the table. */ static void pgui_action_handle_file_remove(GtkCellRendererToggle *renderer, gchar *path, gpointer user_data) { GtkTreeIter iter; SHPLOADERCONFIG *loader_file_config; gpointer gptr; /* Grab the SHPLOADERCONFIG from the IMPORT_POINTER_COLUMN for the list store */ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(import_file_list_store), &iter, path); gtk_tree_model_get(GTK_TREE_MODEL(import_file_list_store), &iter, IMPORT_POINTER_COLUMN, &gptr, -1); loader_file_config = (SHPLOADERCONFIG *)gptr; /* Free the configuration from memory */ free_loader_config(loader_file_config); /* Remove the row from the list */ gtk_list_store_remove(import_file_list_store, &iter); /* Update the filename field width */ update_filename_field_width(); } /* === Export ListView functions and signal handlers === */ /* Update the SHPDUMPERCONFIG to the values currently contained within the iter */ static void update_dumper_table_config_from_listview_iter(GtkTreeIter *iter, SHPDUMPERCONFIG *dumper_table_config) { gchar *schema, *table, *geo_col, *filename; /* Grab the main values for this file */ gtk_tree_model_get(GTK_TREE_MODEL(export_table_list_store), iter, EXPORT_SCHEMA_COLUMN, &schema, EXPORT_TABLE_COLUMN, &table, EXPORT_GEOMETRY_COLUMN, &geo_col, EXPORT_FILENAME_COLUMN, &filename, -1); /* Update the schema */ if (dumper_table_config->schema) free(dumper_table_config->schema); dumper_table_config->schema = strdup(schema); /* Update the table */ if (dumper_table_config->table) free(dumper_table_config->table); dumper_table_config->table = strdup(table); /* Update the geometry column */ if (dumper_table_config->geo_col_name) free(dumper_table_config->geo_col_name); dumper_table_config->geo_col_name = strdup(geo_col); /* Update the filename column (default to table name) */ if (dumper_table_config->shp_file) free(dumper_table_config->shp_file); dumper_table_config->shp_file = strdup(filename); return; } static void pgui_action_handle_table_geocol_combo(GtkCellRendererCombo *combo, gchar *path_string, GtkTreeIter *new_iter, gpointer user_data) { SHPDUMPERCONFIG *dumper_table_config; gchar *geocol_name; GtkTreeIter iter; GtkListStore *model; gpointer gptr; /* Get the existing geo column name */ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(export_table_list_store), &iter, path_string); gtk_tree_model_get(GTK_TREE_MODEL(export_table_list_store), &iter, EXPORT_POINTER_COLUMN, &gptr, EXPORT_GEOMETRY_COLUMN, &geocol_name, EXPORT_GEOMETRY_LISTSTORE_COLUMN, &model, -1); /* If the geocol_name is NULL then there was no geo column so exit */ if (!geocol_name) return; /* Otherwise update the geo column name in the config and the model */ gtk_tree_model_get(GTK_TREE_MODEL(model), new_iter, TABLECHOOSER_GEOCOL_COMBO_TEXT, &geocol_name, -1); dumper_table_config = (SHPDUMPERCONFIG *)gptr; if (dumper_table_config->geo_col_name) { free(dumper_table_config->geo_col_name); dumper_table_config->geo_col_name = strdup(geocol_name); } gtk_list_store_set(export_table_list_store, &iter, EXPORT_GEOMETRY_COLUMN, geocol_name, -1); return; } static void pgui_action_handle_dumper_edit(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer column) { GtkTreeIter iter; gpointer gptr; gint columnindex; SHPDUMPERCONFIG *dumper_table_config; /* Empty doesn't fly */ if (strlen(new_text) == 0) return; /* Update the model with the current edit change */ columnindex = *(gint *)column; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(export_table_list_store), &iter, path); gtk_list_store_set(export_table_list_store, &iter, columnindex, new_text, -1); /* Grab the SHPDUMPERCONFIG from the EXPORT_POINTER_COLUMN for the list store */ gtk_tree_model_get(GTK_TREE_MODEL(export_table_list_store), &iter, EXPORT_POINTER_COLUMN, &gptr, -1); dumper_table_config = (SHPDUMPERCONFIG *)gptr; /* Update the configuration from the current UI data */ update_dumper_table_config_from_listview_iter(&iter, dumper_table_config); /* Now refresh the listview UI row with the new configuration */ gtk_list_store_set(export_table_list_store, &iter, EXPORT_SCHEMA_COLUMN, dumper_table_config->schema, EXPORT_TABLE_COLUMN, dumper_table_config->table, EXPORT_GEOMETRY_COLUMN, dumper_table_config->geo_col_name, EXPORT_FILENAME_COLUMN, dumper_table_config->shp_file, -1); return; } /* === Connection Window functions === */ /* Set the connection details UI from the current configuration */ static void update_conn_ui_from_conn_config(void) { if (conn->username) gtk_entry_set_text(GTK_ENTRY(entry_pg_user), conn->username); else gtk_entry_set_text(GTK_ENTRY(entry_pg_user), ""); if (conn->password) gtk_entry_set_text(GTK_ENTRY(entry_pg_pass), conn->password); else gtk_entry_set_text(GTK_ENTRY(entry_pg_pass), ""); if (conn->host) gtk_entry_set_text(GTK_ENTRY(entry_pg_host), conn->host); else gtk_entry_set_text(GTK_ENTRY(entry_pg_host), ""); if (conn->port) gtk_entry_set_text(GTK_ENTRY(entry_pg_port), conn->port); else gtk_entry_set_text(GTK_ENTRY(entry_pg_port), ""); if (conn->database) gtk_entry_set_text(GTK_ENTRY(entry_pg_db), conn->database); else gtk_entry_set_text(GTK_ENTRY(entry_pg_db), ""); return; } /* Set the current connection configuration from the connection details UI */ static void update_conn_config_from_conn_ui(void) { const char *text; text = gtk_entry_get_text(GTK_ENTRY(entry_pg_user)); if (conn->username) free(conn->username); if (strlen(text)) conn->username = strdup(text); else conn->username = NULL; text = gtk_entry_get_text(GTK_ENTRY(entry_pg_pass)); if (conn->password) free(conn->password); if (strlen(text)) conn->password = strdup(text); else conn->password = NULL; text = gtk_entry_get_text(GTK_ENTRY(entry_pg_host)); if (conn->host) free(conn->host); if (strlen(text)) conn->host = strdup(text); else conn->host = NULL; text = gtk_entry_get_text(GTK_ENTRY(entry_pg_port)); if (conn->port) free(conn->port); if (strlen(text)) conn->port = strdup(text); else conn->port = NULL; text = gtk_entry_get_text(GTK_ENTRY(entry_pg_db)); if (conn->database) free(conn->database); if (strlen(text)) conn->database = strdup(text); else conn->database = NULL; return; } /* * Open the connection details dialog */ static void pgui_action_connection_details(GtkWidget *widget, gpointer data) { /* Update the UI with the current options */ update_conn_ui_from_conn_config(); gtk_widget_show_all(GTK_WIDGET(window_conn)); return; } /* Validate the connection, returning true or false */ static int pgui_validate_connection() { int i; if (conn->port && strlen(conn->port)) { for (i = 0; i < strlen(conn->port); i++) { if (!isdigit(conn->port[i])) { pgui_seterr(_("The connection port must be numeric!")); return 0; } } } return 1; } static void pgui_sanitize_connection_string(char *connection_string) { char *ptr = strstr(connection_string, "password"); if ( ptr ) { ptr += 10; while ( *ptr != '\'' && *ptr != '\0' ) { /* If we find a \, hide both it and the next character */ if ( *ptr == '\\' ) *ptr++ = '*'; *ptr++ = '*'; } } return; } /* * We retain the ability to explicitly request a test of the connection * parameters. This is the button signal handler to do so. */ static void pgui_action_connection_okay(GtkWidget *widget, gpointer data) { /* Update the configuration structure from the form */ update_conn_config_from_conn_ui(); /* Make sure have a valid connection first */ if (!pgui_validate_connection()) { pgui_raise_error_dialogue(); return; } if (!connection_test()) { pgui_logf(_("Connection failed.")); /* If the connection failed, display a warning before closing */ pgui_seterr(_("Unable to connect to the database - please check your connection settings")); pgui_raise_error_dialogue(); } else { pgui_logf(_("Connection succeeded.")); } /* Hide the window after the test */ gtk_widget_hide(GTK_WIDGET(window_conn)); } /* === Window creation functions === */ static void pgui_create_about_dialog(void) { const char *authors[] = { "Paul Ramsey <pramsey@opengeo.org>", "Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>", "Mark Leslie <mark.leslie@lisasoft.com>", NULL }; dialog_about = gtk_about_dialog_new(); gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog_about), _("PostGIS Shapefile Import/Export Manager")); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog_about), POSTGIS_LIB_VERSION); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog_about), "http://postgis.net/"); gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog_about), authors); } static void pgui_create_filechooser_dialog(void) { GtkFileFilter *file_filter_shape; /* Create the dialog */ dialog_filechooser = gtk_file_chooser_dialog_new( _("Select a Shape File"), GTK_WINDOW (window_main), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CLOSE, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); /* Filter for .shp files */ file_filter_shape = gtk_file_filter_new(); gtk_file_filter_add_pattern(GTK_FILE_FILTER(file_filter_shape), "*.shp"); gtk_file_filter_set_name(GTK_FILE_FILTER(file_filter_shape), _("Shape Files (*.shp)")); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog_filechooser), file_filter_shape); /* Filter for .dbf files */ file_filter_shape = gtk_file_filter_new(); gtk_file_filter_add_pattern(GTK_FILE_FILTER(file_filter_shape), "*.dbf"); gtk_file_filter_set_name(GTK_FILE_FILTER(file_filter_shape), _("DBF Files (*.dbf)")); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog_filechooser), file_filter_shape); /* Allow multiple files to be selected */ g_object_set(dialog_filechooser, "select-multiple", TRUE, NULL); return; } static void pgui_create_folderchooser_dialog(void) { GtkFileFilter *file_filter_shape; /* Create the dialog */ dialog_folderchooser = gtk_file_chooser_dialog_new( _("Select an output folder"), GTK_WINDOW (window_main), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CLOSE, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); /* Filter for .shp files */ file_filter_shape = gtk_file_filter_new(); gtk_file_filter_add_pattern(GTK_FILE_FILTER(file_filter_shape), "*.shp"); gtk_file_filter_set_name(GTK_FILE_FILTER(file_filter_shape), _("Shape Files (*.shp)")); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog_folderchooser), file_filter_shape); /* Filter for .dbf files */ file_filter_shape = gtk_file_filter_new(); gtk_file_filter_add_pattern(GTK_FILE_FILTER(file_filter_shape), "*.dbf"); gtk_file_filter_set_name(GTK_FILE_FILTER(file_filter_shape), _("DBF Files (*.dbf)")); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog_folderchooser), file_filter_shape); return; } static void pgui_create_progress_dialog() { GtkWidget *vbox_progress, *table_progress; dialog_progress = gtk_dialog_new_with_buttons(_("Working..."), GTK_WINDOW(window_main), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); gtk_window_set_modal(GTK_WINDOW(dialog_progress), TRUE); gtk_window_set_keep_above(GTK_WINDOW(dialog_progress), TRUE); gtk_window_set_default_size(GTK_WINDOW(dialog_progress), 640, -1); /* Use a vbox as the base container */ vbox_progress = gtk_dialog_get_content_area(GTK_DIALOG(dialog_progress)); gtk_box_set_spacing(GTK_BOX(vbox_progress), 15); /* Create a table within the vbox */ table_progress = gtk_table_new(2, 1, TRUE); gtk_container_set_border_width (GTK_CONTAINER (table_progress), 12); gtk_table_set_row_spacings(GTK_TABLE(table_progress), 5); gtk_table_set_col_spacings(GTK_TABLE(table_progress), 10); /* Text for the progress bar */ label_progress = gtk_label_new(""); gtk_table_attach_defaults(GTK_TABLE(table_progress), label_progress, 0, 1, 0, 1); /* Progress bar for the import */ progress = gtk_progress_bar_new(); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), 0.0); gtk_table_attach_defaults(GTK_TABLE(table_progress), progress, 0, 1, 1, 2); /* Add the table to the vbox */ gtk_box_pack_start(GTK_BOX(vbox_progress), table_progress, FALSE, FALSE, 0); /* Add signal for cancel button */ g_signal_connect(dialog_progress, "response", G_CALLBACK(pgui_action_progress_cancel), dialog_progress); /* Make sure we catch a delete event too */ gtk_signal_connect(GTK_OBJECT(dialog_progress), "delete_event", GTK_SIGNAL_FUNC(pgui_action_progress_delete), NULL); return; } static void pgui_create_options_dialog_add_label(GtkWidget *table, const char *str, gfloat alignment, int row) { GtkWidget *align = gtk_alignment_new(alignment, 0.5, 0.0, 1.0); GtkWidget *label = gtk_label_new(str); gtk_table_attach_defaults(GTK_TABLE(table), align, 1, 3, row, row + 1); gtk_container_add(GTK_CONTAINER (align), label); } static void pgui_create_loader_options_dialog() { GtkWidget *table_options; GtkWidget *align_options_center; static int text_width = 12; dialog_loader_options = gtk_dialog_new_with_buttons(_("Import Options"), GTK_WINDOW(window_main), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_set_modal (GTK_WINDOW(dialog_loader_options), TRUE); gtk_window_set_keep_above (GTK_WINDOW(dialog_loader_options), TRUE); gtk_window_set_default_size (GTK_WINDOW(dialog_loader_options), 180, -1); table_options = gtk_table_new(7, 3, TRUE); gtk_container_set_border_width (GTK_CONTAINER (table_options), 12); gtk_table_set_row_spacings(GTK_TABLE(table_options), 5); gtk_table_set_col_spacings(GTK_TABLE(table_options), 10); pgui_create_options_dialog_add_label(table_options, _("DBF file character encoding"), 0.0, 0); entry_options_encoding = gtk_entry_new(); gtk_entry_set_width_chars(GTK_ENTRY(entry_options_encoding), text_width); gtk_table_attach_defaults(GTK_TABLE(table_options), entry_options_encoding, 0, 1, 0, 1 ); pgui_create_options_dialog_add_label(table_options, _("Preserve case of column names"), 0.0, 1); checkbutton_loader_options_preservecase = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 1, 2 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_loader_options_preservecase); pgui_create_options_dialog_add_label(table_options, _("Do not create 'bigint' columns"), 0.0, 2); checkbutton_loader_options_forceint = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 2, 3 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_loader_options_forceint); pgui_create_options_dialog_add_label(table_options, _("Create spatial index automatically after load"), 0.0, 3); checkbutton_loader_options_autoindex = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 3, 4 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_loader_options_autoindex); pgui_create_options_dialog_add_label(table_options, _("Load only attribute (dbf) data"), 0.0, 4); checkbutton_loader_options_dbfonly = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 4, 5 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_loader_options_dbfonly); pgui_create_options_dialog_add_label(table_options, _("Load data using COPY rather than INSERT"), 0.0, 5); checkbutton_loader_options_dumpformat = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 5, 6 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_loader_options_dumpformat); pgui_create_options_dialog_add_label(table_options, _("Load into GEOGRAPHY column"), 0.0, 6); checkbutton_loader_options_geography = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 6, 7 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_loader_options_geography); pgui_create_options_dialog_add_label(table_options, _("Generate simple geometries instead of MULTI geometries"), 0.0, 7); checkbutton_loader_options_simplegeoms = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 7, 8 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_loader_options_simplegeoms); /* Catch the response from the dialog */ g_signal_connect(dialog_loader_options, "response", G_CALLBACK(pgui_action_loader_options_close), dialog_loader_options); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_loader_options)->vbox), table_options, FALSE, FALSE, 0); /* Hook the delete event so we don't destroy the dialog (just hide) if cancelled */ gtk_signal_connect(GTK_OBJECT(dialog_loader_options), "delete_event", GTK_SIGNAL_FUNC(pgui_event_popup_delete), NULL); } static void pgui_create_dumper_options_dialog() { GtkWidget *table_options; GtkWidget *align_options_center; dialog_dumper_options = gtk_dialog_new_with_buttons(_("Export Options"), GTK_WINDOW(window_main), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_set_modal (GTK_WINDOW(dialog_dumper_options), TRUE); gtk_window_set_keep_above (GTK_WINDOW(dialog_dumper_options), TRUE); gtk_window_set_default_size (GTK_WINDOW(dialog_dumper_options), 180, -1); table_options = gtk_table_new(3, 3, TRUE); gtk_container_set_border_width (GTK_CONTAINER (table_options), 12); gtk_table_set_row_spacings(GTK_TABLE(table_options), 5); gtk_table_set_col_spacings(GTK_TABLE(table_options), 10); pgui_create_options_dialog_add_label(table_options, _("Include gid column in the exported table"), 0.0, 0); checkbutton_dumper_options_includegid = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 0, 1 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_dumper_options_includegid); pgui_create_options_dialog_add_label(table_options, _("Preserve case of column names"), 0.0, 1); checkbutton_dumper_options_keep_fieldname_case = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 1, 2 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_dumper_options_keep_fieldname_case); pgui_create_options_dialog_add_label(table_options, _("Escape column names"), 0.0, 2); checkbutton_dumper_options_unescapedattrs = gtk_check_button_new(); align_options_center = gtk_alignment_new( 0.5, 0.5, 0.0, 1.0 ); gtk_table_attach_defaults(GTK_TABLE(table_options), align_options_center, 0, 1, 2, 3 ); gtk_container_add (GTK_CONTAINER (align_options_center), checkbutton_dumper_options_unescapedattrs); /* Catch the response from the dialog */ g_signal_connect(dialog_dumper_options, "response", G_CALLBACK(pgui_action_dumper_options_close), dialog_dumper_options); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_dumper_options)->vbox), table_options, FALSE, FALSE, 0); /* Hook the delete event so we don't destroy the dialog (just hide) if cancelled */ gtk_signal_connect(GTK_OBJECT(dialog_dumper_options), "delete_event", GTK_SIGNAL_FUNC(pgui_event_popup_delete), NULL); } /* * This function creates the UI artefacts for the file list table and hooks * up all the pretty signals. */ static void pgui_create_tablechooser_dialog() { GtkWidget *vbox_tree, *table_progress; GtkWidget *sw, *label; GtkTreeSelection *chooser_selection; /* Create the main top level window with a 10px border */ dialog_tablechooser = gtk_dialog_new_with_buttons(_("Table selection"), GTK_WINDOW(window_main), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_container_set_border_width(GTK_CONTAINER(dialog_tablechooser), 10); gtk_window_set_position(GTK_WINDOW(dialog_tablechooser), GTK_WIN_POS_CENTER); vbox_tree = gtk_dialog_get_content_area(GTK_DIALOG(dialog_tablechooser)); /* Setup a model */ chooser_table_list_store = gtk_list_store_new(TABLECHOOSER_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, GTK_TYPE_TREE_MODEL, G_TYPE_STRING, G_TYPE_INT); /* Because we want to do selective filtering on the treeview content, we now implement a GtkTreeModel filter on top of the original tree model */ chooser_filtered_table_list_store = (GtkListStore *)gtk_tree_model_filter_new(GTK_TREE_MODEL(chooser_table_list_store), NULL); gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(chooser_filtered_table_list_store), (GtkTreeModelFilterVisibleFunc)table_chooser_visibility_func, NULL, NULL); /* Create the view and such */ chooser_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(chooser_filtered_table_list_store)); chooser_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(chooser_tree)); gtk_tree_selection_set_mode(chooser_selection, GTK_SELECTION_MULTIPLE); /* Make the tree view in a scrollable window */ sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); gtk_widget_set_size_request(sw, 320, 240); gtk_box_pack_start(GTK_BOX(vbox_tree), sw, FALSE, FALSE, 10); gtk_container_add(GTK_CONTAINER(sw), chooser_tree); /* Schema Field */ chooser_schema_renderer = gtk_cell_renderer_text_new(); g_object_set(chooser_schema_renderer, "editable", TRUE, NULL); g_signal_connect(G_OBJECT(chooser_schema_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), NULL); chooser_schema_column = gtk_tree_view_column_new_with_attributes(_("Schema"), chooser_schema_renderer, "text", TABLECHOOSER_SCHEMA_COLUMN, NULL); g_object_set(chooser_schema_column, "resizable", TRUE, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(chooser_tree), chooser_schema_column); /* Table Field */ chooser_table_renderer = gtk_cell_renderer_text_new(); g_object_set(chooser_table_renderer, "editable", FALSE, NULL); g_signal_connect(G_OBJECT(chooser_table_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), NULL); chooser_table_column = gtk_tree_view_column_new_with_attributes(_("Table"), chooser_table_renderer, "text", TABLECHOOSER_TABLE_COLUMN, NULL); g_object_set(chooser_table_column, "resizable", TRUE, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(chooser_tree), chooser_table_column); /* Create table to hold the tick-box and text */ table_progress = gtk_table_new(1, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (table_progress), 0); gtk_table_set_row_spacings(GTK_TABLE(table_progress), 0); gtk_table_set_col_spacings(GTK_TABLE(table_progress), 0); checkbutton_chooser_geoonly = gtk_check_button_new(); gtk_table_attach(GTK_TABLE(table_progress), checkbutton_chooser_geoonly, 0, 1, 0, 1, GTK_SHRINK, GTK_FILL, 0, 0); label = gtk_label_new(_("Only show tables with geo columns")); gtk_table_attach(GTK_TABLE(table_progress), label, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 5, 0); g_signal_connect(G_OBJECT(checkbutton_chooser_geoonly), "toggled", G_CALLBACK(pgui_action_chooser_toggle_show_geocolumn), NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_chooser_geoonly), TRUE); /* Attach table to the vbox */ gtk_box_pack_start(GTK_BOX(vbox_tree), table_progress, FALSE, FALSE, 10); return; } /* * This function creates the UI artefacts for the file list table and hooks * up all the pretty signals. */ static void pgui_create_import_file_table(GtkWidget *import_list_frame) { GtkWidget *vbox_tree; GtkWidget *sw; GtkTreeIter iter; gint *column_indexes; gtk_container_set_border_width (GTK_CONTAINER (import_list_frame), 0); vbox_tree = gtk_vbox_new(FALSE, 15); gtk_container_set_border_width(GTK_CONTAINER(vbox_tree), 5); gtk_container_add(GTK_CONTAINER(import_list_frame), vbox_tree); /* Setup a model */ import_file_list_store = gtk_list_store_new(IMPORT_N_COLUMNS, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); /* Create the view and such */ import_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(import_file_list_store)); /* GTK has a slightly brain-dead API in that you can't directly find the column being used by a GtkCellRenderer when using the same callback to handle multiple fields; hence we manually store this information here and pass a pointer to the column index into the signal handler */ column_indexes = g_malloc(sizeof(gint) * IMPORT_N_COLUMNS); /* Make the tree view in a scrollable window */ sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); gtk_widget_set_size_request(sw, -1, 150); gtk_box_pack_start(GTK_BOX(vbox_tree), sw, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER (sw), import_tree); /* Place the "Add File" button below the list view */ add_file_button = gtk_button_new_with_label(_("Add File")); gtk_container_add (GTK_CONTAINER (vbox_tree), add_file_button); /* Filename Field */ import_filename_renderer = gtk_cell_renderer_text_new(); g_object_set(import_filename_renderer, "editable", FALSE, NULL); column_indexes[IMPORT_FILENAME_COLUMN] = IMPORT_FILENAME_COLUMN; g_signal_connect(G_OBJECT(import_filename_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), &column_indexes[IMPORT_FILENAME_COLUMN]); import_filename_column = gtk_tree_view_column_new_with_attributes(_("Shapefile"), import_filename_renderer, "text", IMPORT_FILENAME_COLUMN, NULL); g_object_set(import_filename_column, "resizable", TRUE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(import_tree), import_filename_column); /* Schema Field */ import_schema_renderer = gtk_cell_renderer_text_new(); g_object_set(import_schema_renderer, "editable", TRUE, NULL); column_indexes[IMPORT_SCHEMA_COLUMN] = IMPORT_SCHEMA_COLUMN; g_signal_connect(G_OBJECT(import_schema_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), &column_indexes[IMPORT_SCHEMA_COLUMN]); import_schema_column = gtk_tree_view_column_new_with_attributes(_("Schema"), import_schema_renderer, "text", IMPORT_SCHEMA_COLUMN, NULL); g_object_set(import_schema_column, "resizable", TRUE, "expand", TRUE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(import_tree), import_schema_column); /* Table Field */ import_table_renderer = gtk_cell_renderer_text_new(); g_object_set(import_table_renderer, "editable", TRUE, NULL); column_indexes[IMPORT_TABLE_COLUMN] = IMPORT_TABLE_COLUMN; g_signal_connect(G_OBJECT(import_table_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), &column_indexes[IMPORT_TABLE_COLUMN]); import_table_column = gtk_tree_view_column_new_with_attributes(_("Table"), import_table_renderer, "text", IMPORT_TABLE_COLUMN, NULL); g_object_set(import_table_column, "resizable", TRUE, "expand", TRUE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(import_tree), import_table_column); /* Geo column field */ import_geom_column_renderer = gtk_cell_renderer_text_new(); g_object_set(import_geom_column_renderer, "editable", TRUE, NULL); column_indexes[IMPORT_GEOMETRY_COLUMN] = IMPORT_GEOMETRY_COLUMN; g_signal_connect(G_OBJECT(import_geom_column_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), &column_indexes[IMPORT_GEOMETRY_COLUMN]); import_geom_column = gtk_tree_view_column_new_with_attributes(_("Geo Column"), import_geom_column_renderer, "text", IMPORT_GEOMETRY_COLUMN, NULL); g_object_set(import_geom_column, "resizable", TRUE, "expand", TRUE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(import_tree), import_geom_column); /* SRID Field */ import_srid_renderer = gtk_cell_renderer_text_new(); g_object_set(import_srid_renderer, "editable", TRUE, NULL); column_indexes[IMPORT_SRID_COLUMN] = IMPORT_SRID_COLUMN; g_signal_connect(G_OBJECT(import_srid_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), &column_indexes[IMPORT_SRID_COLUMN]); import_srid_column = gtk_tree_view_column_new_with_attributes("SRID", import_srid_renderer, "text", IMPORT_SRID_COLUMN, NULL); g_object_set(import_srid_column, "resizable", TRUE, "expand", TRUE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(import_tree), import_srid_column); /* Mode Combo Field */ loader_mode_combo_list = gtk_list_store_new(LOADER_MODE_COMBO_COLUMNS, G_TYPE_STRING, G_TYPE_CHAR); gtk_list_store_insert(loader_mode_combo_list, &iter, CREATE_MODE); gtk_list_store_set(loader_mode_combo_list, &iter, LOADER_MODE_COMBO_TEXT, _("Create"), LOADER_MODE_COMBO_OPTION_CHAR, 'c', -1); gtk_list_store_insert(loader_mode_combo_list, &iter, APPEND_MODE); gtk_list_store_set(loader_mode_combo_list, &iter, LOADER_MODE_COMBO_TEXT, _("Append"), LOADER_MODE_COMBO_OPTION_CHAR, 'a', -1); gtk_list_store_insert(loader_mode_combo_list, &iter, DELETE_MODE); gtk_list_store_set(loader_mode_combo_list, &iter, LOADER_MODE_COMBO_TEXT, _("Delete"), LOADER_MODE_COMBO_OPTION_CHAR, 'd', -1); gtk_list_store_insert(loader_mode_combo_list, &iter, PREPARE_MODE); gtk_list_store_set(loader_mode_combo_list, &iter, LOADER_MODE_COMBO_TEXT, _("Prepare"), LOADER_MODE_COMBO_OPTION_CHAR, 'p', -1); loader_mode_combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(loader_mode_combo_list)); import_mode_renderer = gtk_cell_renderer_combo_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(loader_mode_combo), import_mode_renderer, TRUE); gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(loader_mode_combo), import_mode_renderer, "text", 0); g_object_set(import_mode_renderer, "model", loader_mode_combo_list, "editable", TRUE, "has-entry", FALSE, "text-column", LOADER_MODE_COMBO_TEXT, NULL); import_mode_column = gtk_tree_view_column_new_with_attributes(_("Mode"), import_mode_renderer, "text", IMPORT_MODE_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(import_tree), import_mode_column); gtk_combo_box_set_active(GTK_COMBO_BOX(loader_mode_combo), 1); g_object_set(import_mode_column, "resizable", TRUE, "expand", TRUE, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, NULL); g_signal_connect (G_OBJECT(import_mode_renderer), "changed", G_CALLBACK(pgui_action_handle_tree_combo), NULL); /* Remove Field */ import_remove_renderer = gtk_cell_renderer_toggle_new(); g_object_set(import_remove_renderer, "activatable", TRUE, NULL); g_signal_connect(G_OBJECT(import_remove_renderer), "toggled", G_CALLBACK (pgui_action_handle_file_remove), NULL); import_remove_column = gtk_tree_view_column_new_with_attributes("Rm", import_remove_renderer, NULL); g_object_set(import_remove_column, "resizable", TRUE, "expand", FALSE, "fixed-width", 64, "sizing", GTK_TREE_VIEW_COLUMN_FIXED, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(import_tree), import_remove_column); g_signal_connect (G_OBJECT (add_file_button), "clicked", G_CALLBACK (pgui_action_open_file_dialog), NULL); /* Drag n Drop wiring */ GtkTargetEntry drop_types[] = { { "text/uri-list", 0, 0} }; gint n_drop_types = sizeof(drop_types)/sizeof(drop_types[0]); gtk_drag_dest_set(GTK_WIDGET(import_tree), GTK_DEST_DEFAULT_ALL, drop_types, n_drop_types, GDK_ACTION_COPY); g_signal_connect(G_OBJECT(import_tree), "drag_data_received", G_CALLBACK(pgui_action_handle_file_drop), NULL); } /* * This function creates the UI artefacts for the file list table and hooks * up all the pretty signals. */ static void pgui_create_export_table_table(GtkWidget *export_list_frame) { GtkWidget *vbox_tree; GtkWidget *sw; gint *column_indexes; gtk_container_set_border_width (GTK_CONTAINER (export_list_frame), 0); vbox_tree = gtk_vbox_new(FALSE, 15); gtk_container_set_border_width(GTK_CONTAINER(vbox_tree), 5); gtk_container_add(GTK_CONTAINER(export_list_frame), vbox_tree); /* Setup a model */ export_table_list_store = gtk_list_store_new(EXPORT_N_COLUMNS, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, GTK_TYPE_TREE_MODEL, G_TYPE_STRING, G_TYPE_BOOLEAN); /* Create the view and such */ export_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(export_table_list_store)); /* GTK has a slightly brain-dead API in that you can't directly find the column being used by a GtkCellRenderer when using the same callback to handle multiple fields; hence we manually store this information here and pass a pointer to the column index into the signal handler */ column_indexes = g_malloc(sizeof(gint) * EXPORT_N_COLUMNS); /* Make the tree view in a scrollable window */ sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); gtk_widget_set_size_request(sw, -1, 150); gtk_box_pack_start(GTK_BOX(vbox_tree), sw, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER (sw), export_tree); /* Place the "Add Table" button below the list view */ add_table_button = gtk_button_new_with_label(_("Add Table")); gtk_container_add (GTK_CONTAINER (vbox_tree), add_table_button); /* Schema Field */ export_schema_renderer = gtk_cell_renderer_text_new(); g_object_set(export_schema_renderer, "editable", FALSE, NULL); column_indexes[EXPORT_SCHEMA_COLUMN] = EXPORT_SCHEMA_COLUMN; g_signal_connect(G_OBJECT(export_schema_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), &column_indexes[EXPORT_SCHEMA_COLUMN]); export_schema_column = gtk_tree_view_column_new_with_attributes(_("Schema"), export_schema_renderer, "text", EXPORT_SCHEMA_COLUMN, NULL); g_object_set(export_schema_column, "resizable", TRUE, "expand", TRUE, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(export_tree), export_schema_column); /* Table Field */ export_table_renderer = gtk_cell_renderer_text_new(); g_object_set(export_table_renderer, "editable", FALSE, NULL); column_indexes[EXPORT_TABLE_COLUMN] = EXPORT_TABLE_COLUMN; g_signal_connect(G_OBJECT(export_table_renderer), "edited", G_CALLBACK(pgui_action_handle_loader_edit), &column_indexes[EXPORT_TABLE_COLUMN]); export_table_column = gtk_tree_view_column_new_with_attributes(_("Table"), export_table_renderer, "text", EXPORT_TABLE_COLUMN, NULL); g_object_set(export_table_column, "resizable", TRUE, "expand", TRUE, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(export_tree), export_table_column); /* Geo column field */ export_geom_column_combo = gtk_combo_box_new(); export_geom_column_renderer = gtk_cell_renderer_combo_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(export_geom_column_combo), export_geom_column_renderer, TRUE); g_object_set(export_geom_column_renderer, "editable", TRUE, "has-entry", FALSE, "text-column", TABLECHOOSER_GEOCOL_COMBO_TEXT, NULL); export_geom_column = gtk_tree_view_column_new_with_attributes(_("Geo Column"), export_geom_column_renderer, "model", EXPORT_GEOMETRY_LISTSTORE_COLUMN, "text", EXPORT_GEOMETRY_COLUMN, NULL); g_object_set(export_geom_column, "resizable", TRUE, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(export_tree), export_geom_column); g_signal_connect (G_OBJECT(export_geom_column_renderer), "changed", G_CALLBACK(pgui_action_handle_table_geocol_combo), NULL); /* Filename Field */ export_filename_renderer = gtk_cell_renderer_text_new(); g_object_set(export_filename_renderer, "editable", TRUE, NULL); column_indexes[EXPORT_FILENAME_COLUMN] = EXPORT_FILENAME_COLUMN; g_signal_connect(G_OBJECT(export_filename_renderer), "edited", G_CALLBACK(pgui_action_handle_dumper_edit), &column_indexes[EXPORT_FILENAME_COLUMN]); export_filename_column = gtk_tree_view_column_new_with_attributes(_("Filename"), export_filename_renderer, "text", EXPORT_FILENAME_COLUMN, NULL); g_object_set(export_filename_column, "resizable", TRUE, "expand", TRUE, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(export_tree), export_filename_column); /* Remove Field */ export_remove_renderer = gtk_cell_renderer_toggle_new(); g_object_set(export_remove_renderer, "activatable", TRUE, NULL); g_signal_connect(G_OBJECT(export_remove_renderer), "toggled", G_CALLBACK (pgui_action_handle_table_remove), NULL); export_remove_column = gtk_tree_view_column_new_with_attributes("Rm", export_remove_renderer, NULL); g_object_set(export_remove_column, "resizable", TRUE, "expand", FALSE, "fixed-width", 64, "sizing", GTK_TREE_VIEW_COLUMN_FIXED, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(export_tree), export_remove_column); g_signal_connect (G_OBJECT (add_table_button), "clicked", G_CALLBACK (pgui_action_open_table_dialog), NULL); } static void pgui_create_connection_window() { /* Default text width */ static int text_width = 12; /* Vbox container */ GtkWidget *vbox; /* Reusable label handle */ GtkWidget *label; /* PgSQL section */ GtkWidget *frame_pg, *table_pg; /* OK button */ GtkWidget *button_okay; /* Create the main top level window with a 10px border */ window_conn = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window_conn), 10); gtk_window_set_title(GTK_WINDOW(window_conn), _("PostGIS connection")); gtk_window_set_position(GTK_WINDOW(window_conn), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window_conn), TRUE); /* Use a vbox as the base container */ vbox = gtk_vbox_new(FALSE, 15); /* ** PostGIS info in a table */ frame_pg = gtk_frame_new(_("PostGIS Connection")); table_pg = gtk_table_new(5, 3, TRUE); gtk_container_set_border_width (GTK_CONTAINER (table_pg), 8); gtk_table_set_col_spacings(GTK_TABLE(table_pg), 7); gtk_table_set_row_spacings(GTK_TABLE(table_pg), 3); /* User name row */ label = gtk_label_new(_("Username:")); entry_pg_user = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table_pg), label, 0, 1, 0, 1 ); gtk_table_attach_defaults(GTK_TABLE(table_pg), entry_pg_user, 1, 3, 0, 1 ); /* Password row */ label = gtk_label_new(_("Password:")); entry_pg_pass = gtk_entry_new(); gtk_entry_set_visibility( GTK_ENTRY(entry_pg_pass), FALSE); gtk_table_attach_defaults(GTK_TABLE(table_pg), label, 0, 1, 1, 2 ); gtk_table_attach_defaults(GTK_TABLE(table_pg), entry_pg_pass, 1, 3, 1, 2 ); /* Host and port row */ label = gtk_label_new(_("Server Host:")); entry_pg_host = gtk_entry_new(); gtk_entry_set_width_chars(GTK_ENTRY(entry_pg_host), text_width); gtk_table_attach_defaults(GTK_TABLE(table_pg), label, 0, 1, 2, 3 ); gtk_table_attach_defaults(GTK_TABLE(table_pg), entry_pg_host, 1, 2, 2, 3 ); entry_pg_port = gtk_entry_new(); gtk_entry_set_width_chars(GTK_ENTRY(entry_pg_port), 8); gtk_table_attach_defaults(GTK_TABLE(table_pg), entry_pg_port, 2, 3, 2, 3 ); /* Database row */ label = gtk_label_new(_("Database:")); entry_pg_db = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table_pg), label, 0, 1, 3, 4 ); gtk_table_attach_defaults(GTK_TABLE(table_pg), entry_pg_db, 1, 3, 3, 4 ); /* Add table into containing frame */ gtk_container_add(GTK_CONTAINER(frame_pg), table_pg); /* Add frame into containing vbox */ gtk_container_add(GTK_CONTAINER(window_conn), vbox); /* Add the vbox into the window */ gtk_container_add(GTK_CONTAINER(vbox), frame_pg); /* Create a simple "OK" button for the dialog */ button_okay = gtk_button_new_with_label(_("OK")); gtk_container_add(GTK_CONTAINER(vbox), button_okay); g_signal_connect(G_OBJECT(button_okay), "clicked", G_CALLBACK(pgui_action_connection_okay), NULL); /* Hook the delete event so we don't destroy the dialog (only hide it) if cancelled */ gtk_signal_connect(GTK_OBJECT(window_conn), "delete_event", GTK_SIGNAL_FUNC(pgui_event_popup_delete), NULL); return; } static void pgui_create_main_window(const SHPCONNECTIONCONFIG *conn) { /* Main widgets */ GtkWidget *vbox_main, *vbox_loader, *vbox_dumper; /* PgSQL section */ GtkWidget *frame_pg, *import_list_frame, *export_list_frame, *frame_log; GtkWidget *button_pg_conn; /* Notebook */ GtkWidget *notebook; /* Button section */ GtkWidget *loader_hbox_buttons, *loader_button_options, *loader_button_import, *loader_button_cancel, *loader_button_about; GtkWidget *dumper_hbox_buttons, *dumper_button_options, *dumper_button_export, *dumper_button_cancel, *dumper_button_about; /* Log section */ GtkWidget *scrolledwindow_log; /* Create the main top level window with a 10px border */ window_main = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window_main), 10); gtk_window_set_title(GTK_WINDOW(window_main), _("PostGIS Shapefile Import/Export Manager")); gtk_window_set_position(GTK_WINDOW(window_main), GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_resizable(GTK_WINDOW(window_main), FALSE); /* Open it a bit wider so that both the label and title show up */ gtk_window_set_default_size(GTK_WINDOW(window_main), 180, 500); /* Connect the destroy event of the window with our pgui_quit function * When the window is about to be destroyed we get a notificaiton and * stop the main GTK loop */ g_signal_connect(G_OBJECT(window_main), "destroy", G_CALLBACK(pgui_quit), NULL); /* Connection row */ frame_pg = gtk_frame_new(_("PostGIS Connection")); /* Test button row */ button_pg_conn = gtk_button_new_with_label(_("View connection details...")); g_signal_connect(G_OBJECT(button_pg_conn), "clicked", G_CALLBACK(pgui_action_connection_details), NULL); gtk_container_set_border_width(GTK_CONTAINER(button_pg_conn), 10); gtk_container_add(GTK_CONTAINER(frame_pg), button_pg_conn); /* * GTK Notebook for selecting import/export */ notebook = gtk_notebook_new(); /* ** Shape file selector */ import_list_frame = gtk_frame_new(_("Import List")); pgui_create_import_file_table(import_list_frame); /* ** Row of action buttons */ loader_hbox_buttons = gtk_hbox_new(TRUE, 15); gtk_container_set_border_width (GTK_CONTAINER (loader_hbox_buttons), 0); /* Create the buttons themselves */ loader_button_options = gtk_button_new_with_label(_("Options...")); loader_button_import = gtk_button_new_with_label(_("Import")); loader_button_cancel = gtk_button_new_with_label(_("Cancel")); loader_button_about = gtk_button_new_with_label(_("About")); /* Add actions to the buttons */ g_signal_connect (G_OBJECT (loader_button_import), "clicked", G_CALLBACK (pgui_action_import), NULL); g_signal_connect (G_OBJECT (loader_button_options), "clicked", G_CALLBACK (pgui_action_loader_options_open), NULL); g_signal_connect (G_OBJECT (loader_button_cancel), "clicked", G_CALLBACK (pgui_action_cancel), NULL); g_signal_connect (G_OBJECT (loader_button_about), "clicked", G_CALLBACK (pgui_action_about_open), NULL); /* And insert the buttons into the hbox */ gtk_box_pack_start(GTK_BOX(loader_hbox_buttons), loader_button_options, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(loader_hbox_buttons), loader_button_cancel, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(loader_hbox_buttons), loader_button_about, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(loader_hbox_buttons), loader_button_import, TRUE, TRUE, 0); /* ** Table selector */ export_list_frame = gtk_frame_new(_("Export List")); pgui_create_export_table_table(export_list_frame); /* ** Row of action buttons */ dumper_hbox_buttons = gtk_hbox_new(TRUE, 15); gtk_container_set_border_width (GTK_CONTAINER (dumper_hbox_buttons), 0); /* Create the buttons themselves */ dumper_button_options = gtk_button_new_with_label(_("Options...")); dumper_button_export = gtk_button_new_with_label(_("Export")); dumper_button_cancel = gtk_button_new_with_label(_("Cancel")); dumper_button_about = gtk_button_new_with_label(_("About")); /* Add actions to the buttons */ g_signal_connect (G_OBJECT (dumper_button_export), "clicked", G_CALLBACK (pgui_action_export), NULL); g_signal_connect (G_OBJECT (dumper_button_options), "clicked", G_CALLBACK (pgui_action_dumper_options_open), NULL); g_signal_connect (G_OBJECT (dumper_button_cancel), "clicked", G_CALLBACK (pgui_action_cancel), NULL); g_signal_connect (G_OBJECT (dumper_button_about), "clicked", G_CALLBACK (pgui_action_about_open), NULL); /* And insert the buttons into the hbox */ gtk_box_pack_start(GTK_BOX(dumper_hbox_buttons), dumper_button_options, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(dumper_hbox_buttons), dumper_button_cancel, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(dumper_hbox_buttons), dumper_button_about, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(dumper_hbox_buttons), dumper_button_export, TRUE, TRUE, 0); /* ** Log window */ frame_log = gtk_frame_new(_("Log Window")); gtk_container_set_border_width (GTK_CONTAINER (frame_log), 0); gtk_widget_set_size_request(frame_log, -1, 200); textview_log = gtk_text_view_new(); textbuffer_log = gtk_text_buffer_new(NULL); scrolledwindow_log = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(scrolledwindow_log), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_text_view_set_buffer(GTK_TEXT_VIEW(textview_log), textbuffer_log); gtk_container_set_border_width (GTK_CONTAINER (textview_log), 5); gtk_text_view_set_editable(GTK_TEXT_VIEW(textview_log), FALSE); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textview_log), FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview_log), GTK_WRAP_WORD); gtk_container_add (GTK_CONTAINER (scrolledwindow_log), textview_log); gtk_container_add (GTK_CONTAINER (frame_log), scrolledwindow_log); /* ** Main window */ vbox_main = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (vbox_main), 0); /* Add the loader frames into the notebook page */ vbox_loader = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(vbox_loader), 10); gtk_box_pack_start(GTK_BOX(vbox_loader), import_list_frame, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_loader), loader_hbox_buttons, FALSE, FALSE, 0); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_loader, gtk_label_new(_("Import"))); /* Add the dumper frames into the notebook page */ vbox_dumper = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(vbox_dumper), 10); gtk_box_pack_start(GTK_BOX(vbox_dumper), export_list_frame, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_dumper), dumper_hbox_buttons, FALSE, FALSE, 0); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_dumper, gtk_label_new(_("Export"))); /* Add the frames into the main vbox */ gtk_box_pack_start(GTK_BOX(vbox_main), frame_pg, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_main), notebook, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_main), frame_log, TRUE, TRUE, 0); /* and insert the vbox into the main window */ gtk_container_add(GTK_CONTAINER(window_main), vbox_main); /* make sure that everything, window and label, are visible */ gtk_widget_show_all(window_main); return; } static void usage() { printf("RCSID: %s RELEASE: %s\n", S2P_RCSID, POSTGIS_VERSION); printf("USAGE: shp2pgsql-gui [options]\n"); printf("OPTIONS:\n"); printf(" -U <username>\n"); printf(" -W <password>\n"); printf(" -h <host>\n"); printf(" -p <port>\n"); printf(" -d <database>\n"); printf(" -? Display this help screen\n"); } int main(int argc, char *argv[]) { int c; #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, PGSQL_LOCALEDIR); textdomain (PACKAGE); #endif /* Parse command line options and set configuration */ global_loader_config = malloc(sizeof(SHPLOADERCONFIG)); set_loader_config_defaults(global_loader_config); global_dumper_config = malloc(sizeof(SHPDUMPERCONFIG)); set_dumper_config_defaults(global_dumper_config); /* Here we override any defaults for the GUI */ global_loader_config->createindex = 1; global_loader_config->geo_col = strdup(GEOMETRY_DEFAULT); global_loader_config->dump_format = 1; conn = malloc(sizeof(SHPCONNECTIONCONFIG)); memset(conn, 0, sizeof(SHPCONNECTIONCONFIG)); /* Here we override any defaults for the connection */ conn->host = strdup("localhost"); conn->port = strdup("5432"); while ((c = pgis_getopt(argc, argv, "U:p:W:d:h:")) != -1) { switch (c) { case 'U': conn->username = strdup(pgis_optarg); break; case 'p': conn->port = strdup(pgis_optarg); break; case 'W': conn->password = strdup(pgis_optarg); break; case 'd': conn->database = strdup(pgis_optarg); break; case 'h': conn->host = strdup(pgis_optarg); break; default: usage(); free(conn); free(global_loader_config); exit(0); } } /* initialize the GTK stack */ gtk_init(&argc, &argv); /* set up the user interface */ pgui_create_main_window(conn); pgui_create_connection_window(); pgui_create_loader_options_dialog(); pgui_create_dumper_options_dialog(); pgui_create_about_dialog(); pgui_create_filechooser_dialog(); pgui_create_progress_dialog(); pgui_create_tablechooser_dialog(); pgui_create_folderchooser_dialog(); /* start the main loop */ gtk_main(); /* Free the configuration */ free(conn); free(global_loader_config); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/pgsql2shp-cli.c������������������������������������������������������0000644�0000000�0000000�00000014441�12225265114�017666� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: pgsql2shp-cli.c 5450 2010-03-22 19:38:14Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * PostGIS to Shapefile converter * * Original Author: Jeff Lounsbury <jeffloun@refractions.net> * Maintainer: Sandro Santilli <strk@keybit.bet> * **********************************************************************/ #include "pgsql2shp-core.h" #include "../postgis_config.h" static void usage(int status) { /* TODO: if status != 0 print all to stderr */ printf(_( "RELEASE: %s (r%d)\n" ), POSTGIS_LIB_VERSION, POSTGIS_SVN_REVISION); printf(_("USAGE: pgsql2shp [<options>] <database> [<schema>.]<table>\n" " pgsql2shp [<options>] <database> <query>\n" "\n" "OPTIONS:\n" )); printf(_(" -f <filename> Use this option to specify the name of the file to create.\n" )); printf(_(" -h <host> Allows you to specify connection to a database on a\n" " machine other than the default.\n" )); printf(_(" -p <port> Allows you to specify a database port other than the default.\n" )); printf(_(" -P <password> Connect to the database with the specified password.\n" )); printf(_(" -u <user> Connect to the database as the specified user.\n" )); printf(_(" -g <geometry_column> Specify the geometry column to be exported.\n" )); printf(_(" -b Use a binary cursor.\n" )); printf(_(" -r Raw mode. Do not assume table has been created by the loader. This would\n" " not unescape attribute names and will not skip the 'gid' attribute.\n" )); printf(_(" -k Keep PostgreSQL identifiers case.\n" )); printf(_(" -m <filename> Specify a file containing a set of mappings of (long) column\n" " names to 10 character DBF column names. The content of the file is one or\n" " more lines of two names separated by white space and no trailing or\n" " leading space. For example:\n" " COLUMNNAME DBFFIELD1\n" " AVERYLONGCOLUMNNAME DBFFIELD2\n" )); printf(_(" -? Display this help screen.\n\n" )); exit(status); } int main(int argc, char **argv) { SHPDUMPERCONFIG *config; SHPDUMPERSTATE *state; int ret, c, i; /* If no options are specified, display usage */ if (argc == 1) { usage(0); /* TODO: should this exit with error ? */ } /* Parse command line options and set configuration */ config = malloc(sizeof(SHPDUMPERCONFIG)); set_dumper_config_defaults(config); while ((c = pgis_getopt(argc, argv, "bf:h:du:p:P:g:rkm:")) != EOF) { switch (c) { case 'b': config->binary = 1; break; case 'f': config->shp_file = pgis_optarg; break; case 'h': config->conn->host = pgis_optarg; break; case 'd': config->dswitchprovided = 1; break; case 'r': config->includegid = 1; config->unescapedattrs = 1; break; case 'u': config->conn->username = pgis_optarg; break; case 'p': config->conn->port = pgis_optarg; break; case 'P': config->conn->password = pgis_optarg; break; case 'g': config->geo_col_name = pgis_optarg; break; case 'm': config->column_map_filename = pgis_optarg; break; case 'k': config->keep_fieldname_case = 1; break; default: usage(pgis_optopt == '?' ? 0 : 1); } } /* Determine the database name from the next argument, if no database, exit. */ if (pgis_optind < argc) { config->conn->database = argv[pgis_optind]; pgis_optind++; } else { usage(1); } /* Determine the table and schema names from the next argument if supplied, otherwise if it's a user-defined query then set that instead */ if (pgis_optind < argc) { /* User-defined queries begin with SELECT */ if (!strncmp(argv[pgis_optind], "SELECT ", 7) || !strncmp(argv[pgis_optind], "select ", 7)) { config->usrquery = argv[pgis_optind]; } else { /* Schema qualified table name */ char *strptr = argv[pgis_optind]; char *chrptr = strchr(strptr, '.'); /* OK, this is a schema-qualified table name... */ if (chrptr) { if ( chrptr == strptr ) { /* table is ".something" display help */ usage(0); exit(0); } /* Null terminate at the '.' */ *chrptr = '\0'; /* Copy in the parts */ config->schema = strdup(strptr); config->table = strdup(chrptr+1); } else { config->table = strdup(strptr); } } } else { usage(1); } state = ShpDumperCreate(config); ret = ShpDumperConnectDatabase(state); if (ret != SHPDUMPEROK) { fprintf(stderr, "%s\n", state->message); fflush(stderr); exit(1); } /* Display a warning if the -d switch is used with PostGIS >= 1.0 */ if (state->pgis_major_version > 0 && state->config->dswitchprovided) { fprintf(stderr, _("WARNING: -d switch is useless when dumping from postgis-1.0.0+\n")); fflush(stderr); } /* Open the table ready to return rows */ fprintf(stdout, _("Initializing... \n")); fflush(stdout); ret = ShpDumperOpenTable(state); if (ret != SHPDUMPEROK) { fprintf(stderr, "%s\n", state->message); fflush(stderr); if (ret == SHPDUMPERERR) exit(1); } fprintf(stdout, _("Done (postgis major version: %d).\n"), state->pgis_major_version); fprintf(stdout, _("Output shape: %s\n"), shapetypename(state->outshptype)); fprintf(stdout, _("Dumping: ")); fflush(stdout); for (i = 0; i < ShpDumperGetRecordCount(state); i++) { /* Mimic existing behaviour */ if (!(state->currow % state->config->fetchsize)) { fprintf(stdout, "X"); fflush(stdout); } ret = ShpLoaderGenerateShapeRow(state); if (ret != SHPDUMPEROK) { fprintf(stderr, "%s\n", state->message); fflush(stderr); if (ret == SHPDUMPERERR) exit(1); } } fprintf(stdout, _(" [%d rows].\n"), ShpDumperGetRecordCount(state)); fflush(stdout); ret = ShpDumperCloseTable(state); if (ret != SHPDUMPEROK) { fprintf(stderr, "%s\n", state->message); fflush(stderr); if (ret == SHPDUMPERERR) exit(1); } ShpDumperDestroy(state); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/README.i18n����������������������������������������������������������0000644�0000000�0000000�00000001731�11722777314�016501� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Translating these Applications ------------------------------ You will need the gettext utilities to work with the translation files. Ensure you have the following utilities available: xgettext msgfmt First, update the translation template ("pot") file make pot This will create fresh template files in "po/", "shp2pgsql.pot" and "pgsql2shp.pot" Second, copy a template to a translation file, using the filename pattern shp2pgsql_LANG.po. For example, for a French translation: cp shp2pgsql.pot shp2pgsql_fr.po cp pgsql2shp.pot pgsql2shp_fr.po Finally, prepare your translations. There is header information in the translation file to identify yourself as the translator -- fill it in. Important, set the CHARSET value in the header to the text character set you are using for your text file. We'd prefer you use UTF-8, if you can. When your translation file is complete, commit your changes, or mail it to the postgis-devel list, and we'll commit it for you. ���������������������������������������postgis-2.1.2+dfsg.orig/loader/shpcommon.h����������������������������������������������������������0000644�0000000�0000000�00000002153�11722777314�017216� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: shpcommon.h 5646 2010-05-27 13:19:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef SHPCOMMON_H #define SHPCOMMON_H /* For internationalization */ #ifdef ENABLE_NLS #include <libintl.h> #include <locale.h> #define _(String) gettext(String) #define PACKAGE "shp2pgsql" #else #define _(String) String #endif typedef struct shp_connection_state { /* PgSQL username to log in with */ char *username; /* PgSQL password to log in with */ char *password; /* PgSQL database to connect to */ char *database; /* PgSQL port to connect to */ char *port; /* PgSQL server to connect to */ char *host; } SHPCONNECTIONCONFIG; /* External shared functions */ char *escape_connection_string(char *str); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/image/���������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016113� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/image/good.png�������������������������������������������������������0000644�0000000�0000000�00000001411�11722777314�017556� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR���������óÿa���sBIT|dˆ��� pHYs��0��0÷ƒ>���tEXtSoftware�www.inkscape.org›î<��†IDAT8•“_HSaƟçLsºcP"›hJÓ5ƒH‚DÑNW3+ŠH‰.êÊ‹ò&"‚X ]EDP¦¦bY)àÀ,ÜüÓÛ"C”ŽM£Íííj’.ƒ¾Ë÷{~Ïû¼|ßˈÿ{X3ã�˜6^ž­«;’c6&Ér–F£I÷ûý_¾+Š{Âåmïè¸Ïš™ à"€1�Ã,’à`QÑ6»ÍÖRjµVÇÅÆFƒAºóäÞÀ•…kþ ¢Kt��ÈÏËKn¬¯¶/7׸Yì…À"{›ð®´\²ûÔ!µ)R� ª¢Âñ/ø×ªm®›x —ó›´/Ù+cì0¿8?ôdMÍ%A¸¿ÁÂ-÷m|øñg²NC¿ETƒ!SÅKqñkÎl2J’ÄoÖ}ä›oÇa–wawR�€çyd� È:éO`riKê²wB$tÎ>ÏxTg[g¬Õj³@ÐHR�º<=èñ<çèãR°ðÁ’r�ɱÛ×ȲœÆ‹ãüªê€^o?†¾>GäYCáU|^ö€ç2”D¦(Š—ˆ~rŠ¢¸ÀžjCÛþë¨J¯\'Ü»uÅÄ(ŸÏç�Î59éTU•�€clz+t¢Œ1Ø %¨3žŠ‚Ãá0¦gfF€Ú[[–ÛíUAŸw�™ ÈLȈ‚àÅÈÈÓµµV" s�ÐÕÝ}nl|ü}D`3”l šël$¢ðZ�(¶XR*ÊÊZ¬Ëñ˜˜˜¨O …0ìtv÷öõ]xÐÙ¹ÖŒm\çó •f“©(>>Þ$‰â5𮬬L¸§¦F¯:w7ÿ{õ¬Îù{����IEND®B`‚�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/image/error.png������������������������������������������������������0000644�0000000�0000000�00000000550�11722777314�017762� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR���������óÿa���sBIT|dˆ��� pHYs��Å��ʼnÖï���tEXtSoftware�www.inkscape.org›î<���åIDAT8cüÿÿ? °±±ñ+ªì1•cÀN¿}ýt̓;Ž¿~ýúüÿÿ?ÃÿÿÿXYYybÔµN¿Õ²øÿŸA+~«eñ?F]ë +++L\s´ºÖ|š‘ ‰F2f3QšÑ\rš•••‡1RUóôV~¡k·°y'x§¥ÆýçãI&SaQiR53000]»Å`&$*ÇD²N40j�Ó©w¯½ÓR#Yã;-5†Óo_?%* ãKÒ”'e´Ì„×ä$ ÓLjžCTö› ‹Jcó÷©w¯­½Ç9;�†·éçÞGV����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/image/icon_source.svg������������������������������������������������0000644�0000000�0000000�00000031152�11722777314�021156� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="744.09448819" height="1052.3622047" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docname="icon_source.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> <defs id="defs4"> <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective10" /> <filter inkscape:collect="always" id="filter3281"> <feGaussianBlur inkscape:collect="always" stdDeviation="0.21022492" id="feGaussianBlur3283" /> </filter> </defs> <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="129.38312" inkscape:cy="649.49455" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1030" inkscape:window-height="870" inkscape:window-x="77" inkscape:window-y="15" /> <metadata id="metadata7"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1"> <path sodipodi:type="arc" style="fill:#e3dbdb;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.4662433;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path4791" sodipodi:cx="100.40916" sodipodi:cy="325.63318" sodipodi:rx="18.738329" sodipodi:ry="18.561554" d="M 119.14749,325.63318 A 18.738329,18.561554 0 1 1 81.670828,325.63318 A 18.738329,18.561554 0 1 1 119.14749,325.63318 z" transform="matrix(1.7130004,0,0,1.7293146,-24.388978,-160.06425)" inkscape:export-filename="C:\src\postgis-working\loader\good.png" inkscape:export-xdpi="20.721062" inkscape:export-ydpi="20.721062" /> <rect style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" id="rect2383" width="99.212372" height="99.212379" x="100.39381" y="352.75598" /> <rect style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect3155" width="99.212372" height="99.212379" x="201" y="352.14981" /> <rect style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="rect3157" width="99.212372" height="99.212379" x="301" y="352.14981" /> <path sodipodi:type="star" style="fill:none;stroke-width:2;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none" id="path3159" sodipodi:sides="5" sodipodi:cx="130.5" sodipodi:cy="381.36218" sodipodi:r1="65.103763" sodipodi:r2="32.551882" sodipodi:arg1="0.93804749" sodipodi:arg2="1.566366" inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" d="M 169,433.86218 L 130.64422,413.91375 L 92.466689,434.20125 L 99.586188,391.55833 L 68.494123,361.51852 L 111.25,355.11218 L 130.21157,316.25906 L 149.51666,354.94265 L 192.32762,360.9699 L 161.50294,391.28401 L 169,433.86218 z" /> <g id="g3295" inkscape:export-filename="C:\src\postgis-working\loader\warn.png" inkscape:export-xdpi="20.249985" inkscape:export-ydpi="20.249985"> <path transform="matrix(2.0869716,0,0,2.0869716,-183.04661,-199.56007)" d="M 207.5,304.18971 L 189.33347,303.35063 L 197.69007,287.19842 L 207.5,271.88528 L 217.30993,287.19842 L 225.66653,303.35063 L 207.5,304.18971 z" inkscape:randomized="0" inkscape:rounded="0" inkscape:flatsided="false" sodipodi:arg2="2.6179938" sodipodi:arg1="1.5707963" sodipodi:r2="20.9769" sodipodi:r1="11.327526" sodipodi:cy="292.86218" sodipodi:cx="207.5" sodipodi:sides="3" id="path3161" style="fill:#edf130;fill-opacity:1;stroke:#000000;stroke-width:2.00002722000000020;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:bevel" sodipodi:type="star" /> <path transform="matrix(2.0869716,0,0,2.0869716,-183.04661,-199.7641)" d="M 207.5,304.18971 L 189.33347,303.35063 L 197.69007,287.19842 L 207.5,271.88528 L 217.30993,287.19842 L 225.66653,303.35063 L 207.5,304.18971 z" inkscape:randomized="0" inkscape:rounded="0" inkscape:flatsided="false" sodipodi:arg2="2.6179938" sodipodi:arg1="1.5707963" sodipodi:r2="20.9769" sodipodi:r1="11.327526" sodipodi:cy="292.86218" sodipodi:cx="207.5" sodipodi:sides="3" id="path3163" style="fill:none;stroke:#edf130;stroke-width:0.71874481;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3281)" sodipodi:type="star" /> <text id="text3285" y="425.36218" x="242.13867" style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" xml:space="preserve"><tspan style="font-size:56px" y="425.36218" x="242.13867" id="tspan3287" sodipodi:role="line">!</tspan></text> </g> <path sodipodi:type="star" style="fill:#ff0012;fill-opacity:1;stroke:#050505;stroke-width:0.40000001;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path3333" sodipodi:sides="8" sodipodi:cx="221" sodipodi:cy="236.36218" sodipodi:r1="6.7082038" sodipodi:r2="3.6224301" sodipodi:arg1="0.46364761" sodipodi:arg2="0.85634669" inkscape:flatsided="true" inkscape:rounded="0" inkscape:randomized="0" d="M 227,239.36218 L 223.12132,242.72614 L 218,242.36218 L 214.63604,238.4835 L 215,233.36218 L 218.87868,229.99822 L 224,230.36218 L 227.36396,234.24086 L 227,239.36218 z" transform="matrix(6.2343571,-0.4361074,0.4361074,6.2343571,-1130.8722,-974.82434)" inkscape:export-filename="C:\src\postgis-working\loader\error.png" inkscape:export-xdpi="18" inkscape:export-ydpi="18" /> <path sodipodi:type="star" style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.40000001;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4" id="path3335" sodipodi:sides="8" sodipodi:cx="221" sodipodi:cy="236.36218" sodipodi:r1="6.7082038" sodipodi:r2="3.6224301" sodipodi:arg1="0.46364761" sodipodi:arg2="0.85634669" inkscape:flatsided="true" inkscape:rounded="0" inkscape:randomized="0" d="M 227,239.36218 L 223.12132,242.72614 L 218,242.36218 L 214.63604,238.4835 L 215,233.36218 L 218.87868,229.99822 L 224,230.36218 L 227.36396,234.24086 L 227,239.36218 z" transform="matrix(5.9226393,-0.414302,0.414302,5.9226393,-1056.8286,-905.96503)" inkscape:export-filename="C:\src\postgis-working\loader\error.png" inkscape:export-xdpi="18" inkscape:export-ydpi="18" /> <path style="fill:#280b0b;fill-opacity:1;stroke:#3f1b1b;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path3351" d="M -334.29836,24.946084 C -330.50703,25.725974 -326.73602,26.514605 -322.88639,26.976402 C -319.49057,27.581046 -316.09898,28.311197 -313.61622,30.830574 C -311.893,32.498343 -310.70244,34.63655 -309.42275,36.648007 C -307.71906,38.969016 -306.84976,41.633032 -306.32158,44.42702 C -306.35172,45.768241 -303.50661,51.909626 -305.89192,46.742021 C -337.68773,66.746241 -332.3812,66.953537 -326.8578,56.605246 C -324.25788,51.734197 -321.46498,46.998947 -318.68168,42.229053 C -313.20389,32.940722 -307.90823,23.55739 -301.81471,14.656051 C -296.70775,7.6011666 -290.74148,1.284571 -284.68903,-4.9473821 C -281.28722,-8.4874295 -277.59469,-11.705444 -273.57395,-14.517804 C -264.33666,-21.138468 -254.93875,-29.404098 -243.45986,-30.516745 L -265.55476,-13.849707 C -266.61357,-13.556678 -266.91443,-13.522197 -267.91161,-13.051923 C -268.29584,-12.870717 -269.39878,-12.230164 -269.032,-12.444498 C -244.33751,-26.874916 -239.44054,-29.874513 -248.04598,-24.625701 C -252.13931,-21.544727 -256.61753,-18.947136 -260.13687,-15.126855 C -266.38231,-8.970826 -272.62486,-2.7879896 -277.88374,4.2669092 C -284.35122,13.088407 -289.89514,22.53082 -295.55544,31.881467 C -297.27881,35.185436 -299.16549,38.405343 -300.80039,41.753967 C -301.3662,42.912873 -301.84467,44.113945 -302.29861,45.321069 C -302.345,45.444439 -303.40249,49.033071 -303.59909,49.1651 C -311.50808,54.476488 -319.72774,59.309986 -327.79206,64.382428 C -328.32176,63.789068 -328.91035,63.243435 -329.38116,62.602347 C -330.10713,61.613812 -330.00629,58.518285 -330.74173,57.389631 C -331.10429,54.912737 -331.77611,52.602172 -333.38422,50.618017 C -334.54222,48.792749 -335.65575,46.893772 -337.23988,45.399193 C -339.41181,43.588309 -342.41416,43.219701 -345.09189,42.665944 C -349.16984,42.072653 -353.22505,41.340634 -357.31297,40.820653 L -334.29836,24.946084 z" /> <path style="fill:#008000;fill-opacity:0.70196078;fill-rule:nonzero;stroke:none;stroke-width:0.69216907;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path3353" d="M 135.79895,398.66751 C 137.81098,399.12597 139.81221,399.58957 141.85518,399.86103 C 143.65731,400.21648 145.4572,400.6457 146.77478,402.12672 C 147.68927,403.10713 148.32109,404.36408 149.00021,405.54652 C 149.90435,406.91093 150.36568,408.47698 150.64598,410.11944 C 150.62999,410.90788 152.13986,414.51811 150.874,411.48032 C 134.00024,423.23986 136.81637,423.36172 139.74759,417.27844 C 141.12735,414.41498 142.60951,411.63135 144.08658,408.82736 C 146.9936,403.36718 149.80396,397.85116 153.03773,392.61847 C 155.74795,388.47124 158.9142,384.75801 162.12618,381.09453 C 163.93149,379.01351 165.89108,377.12179 168.02485,375.46854 C 172.927,371.57655 177.91438,366.71758 184.00613,366.0635 L 172.28057,375.86128 C 171.71866,376.03353 171.559,376.05381 171.0298,376.33026 C 170.8259,376.43678 170.24058,376.81333 170.43522,376.68733 C 183.54037,368.20437 186.13915,366.44105 181.57232,369.52658 C 179.40002,371.33774 177.02347,372.86474 175.15579,375.1105 C 171.8414,378.72934 168.52853,382.36394 165.73768,386.51119 C 162.30545,391.69693 159.36334,397.24769 156.35947,402.7445 C 155.44489,404.68674 154.44365,406.57957 153.57602,408.54808 C 153.27576,409.22935 153.02184,409.9354 152.78093,410.645 C 152.75631,410.71753 152.19511,412.82711 152.09078,412.90473 C 147.89355,416.02705 143.53145,418.86844 139.25179,421.85029 C 138.97068,421.50148 138.65832,421.18073 138.40847,420.80386 C 138.0232,420.22274 138.07671,418.40303 137.68643,417.73955 C 137.49401,416.2835 137.13749,414.92522 136.28408,413.75884 C 135.66953,412.68584 135.07859,411.56953 134.23792,410.69093 C 133.08529,409.6264 131.49197,409.40971 130.07092,409.08419 C 127.90679,408.73542 125.75473,408.3051 123.5853,407.99943 L 135.79895,398.66751 z" inkscape:export-filename="C:\src\postgis-working\loader\good.png" inkscape:export-xdpi="20.721062" inkscape:export-ydpi="20.721062" /> </g> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/image/warn.png�������������������������������������������������������0000644�0000000�0000000�00000001310�11722777314�017573� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR���������/\���sBIT|dˆ��� pHYs����™ïÏ9���tEXtSoftware�www.inkscape.org›î<��EIDAT8•RMOQ=wîtf^g:óZf4mM i7lÚ ‰&$ÔI”D>Œ„T4&ÆÁo $BÔc$lÕ•¿A׺“(F R:}nP¬”FßòœsOι÷‘R Þí;þ3�Ø~¼?×I§u"³}bÌuyÚuy:Û'Æ:iõË"2ïÞ vn„® �J©"J+¥Nþ+ÑԌܒÅðˆƒáR²˜š‘—éÛQÌdŒÙ•j`íí~ÃT+“1fƒÀ(þS5"â•j°7Z² ×e<ßùŠz½‰‰›£%Ûh4Ôu+¥¢Ž‰Ê¡»î8ì—=�MH#�ÀxÙ#Ça¯ºë«QwOÖX[­úâ–pžÇ¿5«U_ôd5"ê¾Ôha1µ™Ï ÝÎKÉH¥Îü@G>'ô…ÅÔf[#"ê6—ææ“-{“’‘l…07ŸÔ…Í%"ê½`´´Üµ](Š˜iµ®Í“Œä‰�À´4Š"¶´ÜµÝb”HP¿iq¡RI¶N�Caèý £RI²iq!‘ ~àìü·æý­¡Á¸©ëtaàé“/ >ºÚ‚ë:ah0nF  @QK§aQ~bR¶ýœ¹¼…\ÎjGabRj¢|:m ÐýWÞ;Ž–¿v=ÛfÄm v\ƒíhB…T 8>n¢vØDí¨‰£ZµZ„·o¾ãð°ùAÿø©þ:ðõ/_ØQ3Š”EÊh4T,ŠSJ�‘bÆ©®Ó)3Õ™é„'HÕ>ï7Þý’n¾ÏùH,����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/getopt.c�������������������������������������������������������������0000644�0000000�0000000�00000005170�11722777314�016512� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** @(#)getopt.c 2.5 (smail) 9/15/87 */ #include "../postgis_config.h" #include <stdio.h> #include <string.h> #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #include "getopt.h" /* * Here's something you've all been waiting for: the AT&T public domain * source for getopt(3). It is the code which was given out at the 1985 * UNIFORUM conference in Dallas. I obtained it by electronic mail * directly from AT&T. The people there assure me that it is indeed * in the public domain. * * There is no manual page. That is because the one they gave out at * UNIFORUM was slightly different from the current System V Release 2 * manual page. The difference apparently involved a note about the * famous rules 5 and 6, recommending using white space between an option * and its first argument, and not grouping options that have arguments. * Getopt itself is currently lenient about both of these things. White * space is allowed, but not mandatory, and the last option in a group can * have an argument. That particular version of the man page evidently * has no official existence, and my source at AT&T did not send a copy. * The current SVR2 man page reflects the actual behavor of this getopt. * However, I am not about to post a copy of anything licensed by AT&T. */ #define ERR(s, c)\ if(pgis_opterr){\ char errbuf[2];\ errbuf[0] = (char)c; errbuf[1] = '\n';\ (void) write(2, argv[0], (unsigned)strlen(argv[0]));\ (void) write(2, s, (unsigned)strlen(s));\ (void) write(2, errbuf, 2);\ } int pgis_opterr = 1; int pgis_optind = 1; int pgis_optopt; char *pgis_optarg; int pgis_getopt(int argc, char **argv, char *opts) { static int sp = 1; register int c; register char *cp; if (sp == 1) { if (pgis_optind >= argc || argv[pgis_optind][0] != '-' /* && argv[pgis_optind][0] != '/' */ || argv[pgis_optind][1] == '\0') { return(EOF); } else if (strcmp(argv[pgis_optind], "--") == 0) { pgis_optind++; return(EOF); } } pgis_optopt = c = argv[pgis_optind][sp]; if (c == ':' || (cp=strchr(opts, c)) == 0) { ERR(": illegal option -- ", c); if (argv[pgis_optind][++sp] == '\0') { pgis_optind++; sp = 1; } return('?'); } if (*++cp == ':') { if (argv[pgis_optind][sp+1] != '\0') pgis_optarg = &argv[pgis_optind++][sp+1]; else if (++pgis_optind >= argc) { ERR(": option requires an argument -- ", c); sp = 1; return('?'); } else pgis_optarg = argv[pgis_optind++]; sp = 1; } else { if (argv[pgis_optind][++sp] == '\0') { sp = 1; pgis_optind++; } pgis_optarg = NULL; } return(c); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/README.txt�����������������������������������������������������������0000644�0000000�0000000�00000001242�11722777314�016536� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory contains the loader and dumper utility programs. The loader can convert shape files to an SQL dump suitable for loading into a PostGIS enabled PostgreSQL database server. The dumper does the opposite, creates a shape file out of an PostGIS table or arbitrary query. To compile the program from source, simply run "make" in the source directory. Then copy the binary into your command search path (or wherever you like). For usage information, simply run the programs without any arguments, that will display a help screen, and look into the ../doc/man/ directory, there are manpages ready for copying into the manual search path on unixoid systems. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/pgsql2shp-core.h�����������������������������������������������������0000644�0000000�0000000�00000011616�11722777314�020070� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: pgsql2shp-core.h 9324 2012-02-27 22:08:12Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2003 Refractions Research Inc. * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2009 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <unistd.h> #include <errno.h> #include <math.h> #include <sys/types.h> #include <sys/stat.h> #include <iconv.h> #include "../postgis_config.h" #include "libpq-fe.h" #include "shapefil.h" #include "shpcommon.h" #include "getopt.h" #define P2S_RCSID "$Id: pgsql2shp-core.h 9324 2012-02-27 22:08:12Z pramsey $" /* * Error message handling */ #define SHPDUMPERMSGLEN 1024 #define SHPDUMPEROK -1 #define SHPDUMPERERR 0 #define SHPDUMPERWARN 1 /* * Structure to hold the dumper configuration options */ typedef struct shp_dumper_config { /* Parameters used to connect to the database */ SHPCONNECTIONCONFIG *conn; /* table to load into */ char *table; /* schema to load into */ char *schema; /* user-specified query, if supplied */ char *usrquery; /* 0=use normal cursor, 1=use binary cursor */ int binary; /* Name of the output shapefile */ char *shp_file; /* TODO: rename? 0=switch not provided, 1=switch provided */ int dswitchprovided; /* TODO: replace and combine with below 0=do not include gid column in shapefile, 1=include gid column in shapefile */ int includegid; /* TODO: 0=escape column names, 1=do not escape column names */ int unescapedattrs; /* Name of geometry/geography database column */ char *geo_col_name; /* 0=do not keep fieldname case, 1=keep fieldname case */ int keep_fieldname_case; /* Number of rows to fetch in a cursor batch */ int fetchsize; /* Name of the column map file if specified */ char *column_map_filename; } SHPDUMPERCONFIG; /* * Structure to holder the current dumper state */ typedef struct shp_dumper_state { /* Configuration for this state */ SHPDUMPERCONFIG *config; /* Database connection being used */ PGconn *conn; /* Version of PostGIS being used */ int pgis_major_version; /* 0=dumper running on little endian, 1=dumper running on big endian */ int big_endian; /* OID for geometries */ int geom_oid; /* OID for geographies */ int geog_oid; /* Schema of current working table */ char *schema; /* Name of current working table */ char *table; /* Name of geography/geometry column in current working table */ char *geo_col_name; /* DBF fieldnames for all non-spatial fields */ char **dbffieldnames; /* DBF field types for all non-spatial fields */ int *dbffieldtypes; /* PostgreSQL column names for all non-spatial fields */ char **pgfieldnames; /* PostgreSQL column lengths for all non-spatial fields */ int *pgfieldlens; /* PostgreSQL column typmods for all non-spatial fields */ int *pgfieldtypmods; /* Number of non-spatial fields in DBF output file */ int fieldcount; /* Number of rows in the database table */ int num_records; /* Name of the current shapefile */ char *shp_file; /* Handle of the current DBF file */ DBFHandle dbf; /* Handle of the current SHP file */ SHPHandle shp; /* Indicate output geometry type: s=2d, z=3dz or 4d, m=3dm */ char outtype; /* Shapefile/DBF geometry type */ int outshptype; /* Number of rows in source database table */ int rowcount; /* The main query being used for the table scan */ char *main_scan_query; /* The current row number */ int currow; /* The result set for the current FETCH batch */ PGresult *fetchres; /* The row number within the current FETCH batch */ int curresrow; /* The number of rows within the current FETCH batch */ int currescount; /* The query being used to fetch records from the table */ char *fetch_query; /* Last (error) message */ char message[SHPDUMPERMSGLEN]; /* Column map pgfieldnames */ char **column_map_pgfieldnames; /* Column map dbffieldnames */ char **column_map_dbffieldnames; /* Number of entries within column map */ int column_map_size; } SHPDUMPERSTATE; /* Externally accessible functions */ void set_dumper_config_defaults(SHPDUMPERCONFIG *config); char *shapetypename(int num); SHPDUMPERSTATE *ShpDumperCreate(SHPDUMPERCONFIG *config); char *ShpDumperGetConnectionStringFromConn(SHPCONNECTIONCONFIG *config); int ShpDumperConnectDatabase(SHPDUMPERSTATE *state); int ShpDumperOpenTable(SHPDUMPERSTATE *state); int ShpDumperGetRecordCount(SHPDUMPERSTATE *state); int ShpLoaderGenerateShapeRow(SHPDUMPERSTATE *state); int ShpDumperCloseTable(SHPDUMPERSTATE *state); void ShpDumperDestroy(SHPDUMPERSTATE *state); ������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shp2pgsql-core.c�����������������������������������������������������0000644�0000000�0000000�00000136234�12132313626�020053� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://www.postgis.org * * Copyright (C) 2008 OpenGeo.org * Copyright (C) 2009 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * * Maintainer: Paul Ramsey <pramsey@opengeo.org> * **********************************************************************/ #include "../postgis_config.h" #include "shp2pgsql-core.h" #include "../liblwgeom/liblwgeom.h" /* for lw_vasprintf */ #include "../liblwgeom/lwgeom_log.h" /* for LWDEBUG macros */ /* Internal ring/point structures */ typedef struct struct_point { double x, y, z, m; } Point; typedef struct struct_ring { Point *list; /* list of points */ struct struct_ring *next; int n; /* number of points in list */ unsigned int linked; /* number of "next" rings */ } Ring; /* * Internal functions */ #define UTF8_GOOD_RESULT 0 #define UTF8_BAD_RESULT 1 #define UTF8_NO_RESULT 2 int utf8(const char *fromcode, char *inputbuf, char **outputbuf); char *escape_copy_string(char *str); char *escape_insert_string(char *str); int GeneratePointGeometry(SHPLOADERSTATE *state, SHPObject *obj, char **geometry, int force_multi); int GenerateLineStringGeometry(SHPLOADERSTATE *state, SHPObject *obj, char **geometry); int PIP(Point P, Point *V, int n); int FindPolygons(SHPObject *obj, Ring ***Out); void ReleasePolygons(Ring **polys, int npolys); int GeneratePolygonGeometry(SHPLOADERSTATE *state, SHPObject *obj, char **geometry); /* Append variadic formatted string to a stringbuffer */ void vasbappend(stringbuffer_t *sb, char *fmt, ... ) { va_list ap; char *msg; va_start(ap, fmt); if (!lw_vasprintf (&msg, fmt, ap)) { va_end (ap); return; } /* Append to the stringbuffer */ stringbuffer_append(sb, msg); free(msg); va_end(ap); } /* Return allocated string containing UTF8 string converted from encoding fromcode */ int utf8(const char *fromcode, char *inputbuf, char **outputbuf) { iconv_t cd; char *outputptr; size_t outbytesleft; size_t inbytesleft; inbytesleft = strlen(inputbuf); cd = iconv_open("UTF-8", fromcode); if ( cd == ((iconv_t)(-1)) ) return UTF8_NO_RESULT; outbytesleft = inbytesleft * 3 + 1; /* UTF8 string can be 3 times larger */ /* then local string */ *outputbuf = (char *)malloc(outbytesleft); if (!*outputbuf) return UTF8_NO_RESULT; memset(*outputbuf, 0, outbytesleft); outputptr = *outputbuf; /* Does this string convert cleanly? */ if ( iconv(cd, &inputbuf, &inbytesleft, &outputptr, &outbytesleft) == -1 ) { #ifdef HAVE_ICONVCTL int on = 1; /* No. Try to convert it while transliterating. */ iconvctl(cd, ICONV_SET_TRANSLITERATE, &on); if ( iconv(cd, &inputbuf, &inbytesleft, &outputptr, &outbytesleft) == -1 ) { /* No. Try to convert it while discarding errors. */ iconvctl(cd, ICONV_SET_DISCARD_ILSEQ, &on); if ( iconv(cd, &inputbuf, &inbytesleft, &outputptr, &outbytesleft) == -1 ) { /* Still no. Throw away the buffer and return. */ free(*outputbuf); iconv_close(cd); return UTF8_NO_RESULT; } } iconv_close(cd); return UTF8_BAD_RESULT; #else free(*outputbuf); iconv_close(cd); return UTF8_NO_RESULT; #endif } /* Return a good result, converted string is in buffer. */ iconv_close(cd); return UTF8_GOOD_RESULT; } /** * Escape input string suitable for COPY. If no characters require escaping, simply return * the input pointer. Otherwise return a new allocated string. */ char * escape_copy_string(char *str) { /* * Escape the following characters by adding a preceding backslash * tab, backslash, cr, lf * * 1. find # of escaped characters * 2. make new string * */ char *result; char *ptr, *optr; int toescape = 0; size_t size; ptr = str; /* Count how many characters we need to escape so we know the size of the string we need to return */ while (*ptr) { if (*ptr == '\t' || *ptr == '\\' || *ptr == '\n' || *ptr == '\r') toescape++; ptr++; } /* If we don't have to escape anything, simply return the input pointer */ if (toescape == 0) return str; size = ptr - str + toescape + 1; result = calloc(1, size); optr = result; ptr = str; while (*ptr) { if ( *ptr == '\t' || *ptr == '\\' || *ptr == '\n' || *ptr == '\r' ) *optr++ = '\\'; *optr++ = *ptr++; } *optr = '\0'; return result; } /** * Escape input string suitable for INSERT. If no characters require escaping, simply return * the input pointer. Otherwise return a new allocated string. */ char * escape_insert_string(char *str) { /* * Escape single quotes by adding a preceding single quote * * 1. find # of characters * 2. make new string */ char *result; char *ptr, *optr; int toescape = 0; size_t size; ptr = str; /* Count how many characters we need to escape so we know the size of the string we need to return */ while (*ptr) { if (*ptr == '\'') toescape++; ptr++; } /* If we don't have to escape anything, simply return the input pointer */ if (toescape == 0) return str; size = ptr - str + toescape + 1; result = calloc(1, size); optr = result; ptr = str; while (*ptr) { if (*ptr == '\'') *optr++='\''; *optr++ = *ptr++; } *optr='\0'; return result; } /** * @brief Generate an allocated geometry string for shapefile object obj using the state parameters * if "force_multi" is true, single points will instead be created as multipoints with a single vertice. */ int GeneratePointGeometry(SHPLOADERSTATE *state, SHPObject *obj, char **geometry, int force_multi) { LWGEOM **lwmultipoints; LWGEOM *lwgeom = NULL; POINT4D point4d; int dims = 0; int u; char *mem; size_t mem_length; FLAGS_SET_Z(dims, state->has_z); FLAGS_SET_M(dims, state->has_m); /* Allocate memory for our array of LWPOINTs and our dynptarrays */ lwmultipoints = malloc(sizeof(LWPOINT *) * obj->nVertices); /* We need an array of pointers to each of our sub-geometries */ for (u = 0; u < obj->nVertices; u++) { /* Create a ptarray containing a single point */ POINTARRAY *pa = ptarray_construct_empty(state->has_z, state->has_m, 1); /* Generate the point */ point4d.x = obj->padfX[u]; point4d.y = obj->padfY[u]; if (state->has_z) point4d.z = obj->padfZ[u]; if (state->has_m) point4d.m = obj->padfM[u]; /* Add in the point! */ ptarray_append_point(pa, &point4d, LW_TRUE); /* Generate the LWPOINT */ lwmultipoints[u] = lwpoint_as_lwgeom(lwpoint_construct(state->from_srid, NULL, pa)); } /* If we have more than 1 vertex then we are working on a MULTIPOINT and so generate a MULTIPOINT rather than a POINT */ if ((obj->nVertices > 1) || force_multi) { lwgeom = lwcollection_as_lwgeom(lwcollection_construct(MULTIPOINTTYPE, state->from_srid, NULL, obj->nVertices, lwmultipoints)); } else { lwgeom = lwmultipoints[0]; lwfree(lwmultipoints); } if (state->config->use_wkt) { mem = lwgeom_to_wkt(lwgeom, WKT_EXTENDED, WKT_PRECISION, &mem_length); } else { mem = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, &mem_length); } if ( !mem ) { snprintf(state->message, SHPLOADERMSGLEN, "unable to write geometry"); return SHPLOADERERR; } /* Free all of the allocated items */ lwgeom_free(lwgeom); /* Return the string - everything ok */ *geometry = mem; return SHPLOADEROK; } /** * @brief Generate an allocated geometry string for shapefile object obj using the state parameters */ int GenerateLineStringGeometry(SHPLOADERSTATE *state, SHPObject *obj, char **geometry) { LWGEOM **lwmultilinestrings; LWGEOM *lwgeom = NULL; POINT4D point4d; int dims = 0; int u, v, start_vertex, end_vertex; char *mem; size_t mem_length; FLAGS_SET_Z(dims, state->has_z); FLAGS_SET_M(dims, state->has_m); if (state->config->simple_geometries == 1 && obj->nParts > 1) { snprintf(state->message, SHPLOADERMSGLEN, _("We have a Multilinestring with %d parts, can't use -S switch!"), obj->nParts); return SHPLOADERERR; } /* Allocate memory for our array of LWLINEs and our dynptarrays */ lwmultilinestrings = malloc(sizeof(LWPOINT *) * obj->nParts); /* We need an array of pointers to each of our sub-geometries */ for (u = 0; u < obj->nParts; u++) { /* Create a ptarray containing the line points */ POINTARRAY *pa = ptarray_construct_empty(state->has_z, state->has_m, obj->nParts); /* Set the start/end vertices depending upon whether this is a MULTILINESTRING or not */ if ( u == obj->nParts-1 ) end_vertex = obj->nVertices; else end_vertex = obj->panPartStart[u + 1]; start_vertex = obj->panPartStart[u]; for (v = start_vertex; v < end_vertex; v++) { /* Generate the point */ point4d.x = obj->padfX[v]; point4d.y = obj->padfY[v]; if (state->has_z) point4d.z = obj->padfZ[v]; if (state->has_m) point4d.m = obj->padfM[v]; ptarray_append_point(pa, &point4d, LW_FALSE); } /* Generate the LWLINE */ lwmultilinestrings[u] = lwline_as_lwgeom(lwline_construct(state->from_srid, NULL, pa)); } /* If using MULTILINESTRINGs then generate the serialized collection, otherwise just a single LINESTRING */ if (state->config->simple_geometries == 0) { lwgeom = lwcollection_as_lwgeom(lwcollection_construct(MULTILINETYPE, state->from_srid, NULL, obj->nParts, lwmultilinestrings)); } else { lwgeom = lwmultilinestrings[0]; lwfree(lwmultilinestrings); } if (!state->config->use_wkt) mem = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, &mem_length); else mem = lwgeom_to_wkt(lwgeom, WKT_EXTENDED, WKT_PRECISION, &mem_length); if ( !mem ) { snprintf(state->message, SHPLOADERMSGLEN, "unable to write geometry"); return SHPLOADERERR; } /* Free all of the allocated items */ lwgeom_free(lwgeom); /* Return the string - everything ok */ *geometry = mem; return SHPLOADEROK; } /** * @brief PIP(): crossing number test for a point in a polygon * input: P = a point, * V[] = vertex points of a polygon V[n+1] with V[n]=V[0] * @return 0 = outside, 1 = inside */ int PIP(Point P, Point *V, int n) { int cn = 0; /* the crossing number counter */ int i; /* loop through all edges of the polygon */ for (i = 0; i < n-1; i++) /* edge from V[i] to V[i+1] */ { if (((V[i].y <= P.y) && (V[i + 1].y > P.y)) /* an upward crossing */ || ((V[i].y > P.y) && (V[i + 1].y <= P.y))) /* a downward crossing */ { double vt = (float)(P.y - V[i].y) / (V[i + 1].y - V[i].y); if (P.x < V[i].x + vt * (V[i + 1].x - V[i].x)) /* P.x < intersect */ ++cn; /* a valid crossing of y=P.y right of P.x */ } } return (cn&1); /* 0 if even (out), and 1 if odd (in) */ } int FindPolygons(SHPObject *obj, Ring ***Out) { Ring **Outer; /* Pointers to Outer rings */ int out_index=0; /* Count of Outer rings */ Ring **Inner; /* Pointers to Inner rings */ int in_index=0; /* Count of Inner rings */ int pi; /* part index */ #if POSTGIS_DEBUG_LEVEL > 0 static int call = -1; call++; #endif LWDEBUGF(4, "FindPolygons[%d]: allocated space for %d rings\n", call, obj->nParts); /* Allocate initial memory */ Outer = (Ring **)malloc(sizeof(Ring *) * obj->nParts); Inner = (Ring **)malloc(sizeof(Ring *) * obj->nParts); /* Iterate over rings dividing in Outers and Inners */ for (pi=0; pi < obj->nParts; pi++) { int vi; /* vertex index */ int vs; /* start index */ int ve; /* end index */ int nv; /* number of vertex */ double area = 0.0; Ring *ring; /* Set start and end vertexes */ if (pi == obj->nParts - 1) ve = obj->nVertices; else ve = obj->panPartStart[pi + 1]; vs = obj->panPartStart[pi]; /* Compute number of vertexes */ nv = ve - vs; /* Allocate memory for a ring */ ring = (Ring *)malloc(sizeof(Ring)); ring->list = (Point *)malloc(sizeof(Point) * nv); ring->n = nv; ring->next = NULL; ring->linked = 0; /* Iterate over ring vertexes */ for (vi = vs; vi < ve; vi++) { int vn = vi+1; /* next vertex for area */ if (vn == ve) vn = vs; ring->list[vi - vs].x = obj->padfX[vi]; ring->list[vi - vs].y = obj->padfY[vi]; ring->list[vi - vs].z = obj->padfZ[vi]; ring->list[vi - vs].m = obj->padfM[vi]; area += (obj->padfX[vi] * obj->padfY[vn]) - (obj->padfY[vi] * obj->padfX[vn]); } /* Close the ring with first vertex */ /*ring->list[vi].x = obj->padfX[vs]; */ /*ring->list[vi].y = obj->padfY[vs]; */ /*ring->list[vi].z = obj->padfZ[vs]; */ /*ring->list[vi].m = obj->padfM[vs]; */ /* Clockwise (or single-part). It's an Outer Ring ! */ if (area < 0.0 || obj->nParts == 1) { Outer[out_index] = ring; out_index++; } else { /* Counterclockwise. It's an Inner Ring ! */ Inner[in_index] = ring; in_index++; } } LWDEBUGF(4, "FindPolygons[%d]: found %d Outer, %d Inners\n", call, out_index, in_index); /* Put the inner rings into the list of the outer rings */ /* of which they are within */ for (pi = 0; pi < in_index; pi++) { Point pt, pt2; int i; Ring *inner = Inner[pi], *outer = NULL; pt.x = inner->list[0].x; pt.y = inner->list[0].y; pt2.x = inner->list[1].x; pt2.y = inner->list[1].y; for (i = 0; i < out_index; i++) { int in; in = PIP(pt, Outer[i]->list, Outer[i]->n); if ( in || PIP(pt2, Outer[i]->list, Outer[i]->n) ) { outer = Outer[i]; break; } /*fprintf(stderr, "!PIP %s\nOUTE %s\n", dump_ring(inner), dump_ring(Outer[i])); */ } if (outer) { outer->linked++; while (outer->next) outer = outer->next; outer->next = inner; } else { /* The ring wasn't within any outer rings, */ /* assume it is a new outer ring. */ LWDEBUGF(4, "FindPolygons[%d]: hole %d is orphan\n", call, pi); Outer[out_index] = inner; out_index++; } } *Out = Outer; free(Inner); return out_index; } void ReleasePolygons(Ring **polys, int npolys) { int pi; /* Release all memory */ for (pi = 0; pi < npolys; pi++) { Ring *Poly, *temp; Poly = polys[pi]; while (Poly != NULL) { temp = Poly; Poly = Poly->next; free(temp->list); free(temp); } } free(polys); } /** * @brief Generate an allocated geometry string for shapefile object obj using the state parameters * * This function basically deals with the polygon case. It sorts the polys in order of outer, * inner,inner, so that inners always come after outers they are within. * */ int GeneratePolygonGeometry(SHPLOADERSTATE *state, SHPObject *obj, char **geometry) { Ring **Outer; int polygon_total, ring_total; int pi, vi; /* part index and vertex index */ LWGEOM **lwpolygons; LWGEOM *lwgeom; POINT4D point4d; int dims = 0; char *mem; size_t mem_length; FLAGS_SET_Z(dims, state->has_z); FLAGS_SET_M(dims, state->has_m); polygon_total = FindPolygons(obj, &Outer); if (state->config->simple_geometries == 1 && polygon_total != 1) /* We write Non-MULTI geometries, but have several parts: */ { snprintf(state->message, SHPLOADERMSGLEN, _("We have a Multipolygon with %d parts, can't use -S switch!"), polygon_total); return SHPLOADERERR; } /* Allocate memory for our array of LWPOLYs */ lwpolygons = malloc(sizeof(LWPOLY *) * polygon_total); /* Cycle through each individual polygon */ for (pi = 0; pi < polygon_total; pi++) { LWPOLY *lwpoly = lwpoly_construct_empty(state->from_srid, state->has_z, state->has_m); Ring *polyring; int ring_index = 0; /* Firstly count through the total number of rings in this polygon */ ring_total = 0; polyring = Outer[pi]; while (polyring) { ring_total++; polyring = polyring->next; } /* Cycle through each ring within the polygon, starting with the outer */ polyring = Outer[pi]; while (polyring) { /* Create a POINTARRAY containing the points making up the ring */ POINTARRAY *pa = ptarray_construct_empty(state->has_z, state->has_m, polyring->n); for (vi = 0; vi < polyring->n; vi++) { /* Build up a point array of all the points in this ring */ point4d.x = polyring->list[vi].x; point4d.y = polyring->list[vi].y; if (state->has_z) point4d.z = polyring->list[vi].z; if (state->has_m) point4d.m = polyring->list[vi].m; ptarray_append_point(pa, &point4d, LW_TRUE); } /* Copy the POINTARRAY pointer so we can use the LWPOLY constructor */ lwpoly_add_ring(lwpoly, pa); polyring = polyring->next; ring_index++; } /* Generate the LWGEOM */ lwpolygons[pi] = lwpoly_as_lwgeom(lwpoly); } /* If using MULTIPOLYGONS then generate the serialized collection, otherwise just a single POLYGON */ if (state->config->simple_geometries == 0) { lwgeom = lwcollection_as_lwgeom(lwcollection_construct(MULTIPOLYGONTYPE, state->from_srid, NULL, polygon_total, lwpolygons)); } else { lwgeom = lwpolygons[0]; lwfree(lwpolygons); } if (!state->config->use_wkt) mem = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, &mem_length); else mem = lwgeom_to_wkt(lwgeom, WKT_EXTENDED, WKT_PRECISION, &mem_length); if ( !mem ) { snprintf(state->message, SHPLOADERMSGLEN, "unable to write geometry"); return SHPLOADERERR; } /* Free all of the allocated items */ lwgeom_free(lwgeom); /* Free the linked list of rings */ ReleasePolygons(Outer, polygon_total); /* Return the string - everything ok */ *geometry = mem; return SHPLOADEROK; } /* * External functions (defined in shp2pgsql-core.h) */ /* Convert the string to lower case */ void strtolower(char *s) { int j; for (j = 0; j < strlen(s); j++) s[j] = tolower(s[j]); } /* Default configuration settings */ void set_loader_config_defaults(SHPLOADERCONFIG *config) { config->opt = 'c'; config->table = NULL; config->schema = NULL; config->geo_col = NULL; config->shp_file = NULL; config->dump_format = 0; config->simple_geometries = 0; config->geography = 0; config->quoteidentifiers = 0; config->forceint4 = 0; config->createindex = 0; config->readshape = 1; config->force_output = FORCE_OUTPUT_DISABLE; config->encoding = strdup(ENCODING_DEFAULT); config->null_policy = POLICY_NULL_INSERT; config->sr_id = SRID_UNKNOWN; config->shp_sr_id = SRID_UNKNOWN; config->use_wkt = 0; config->tablespace = NULL; config->idxtablespace = NULL; config->usetransaction = 1; } /* Create a new shapefile state object */ SHPLOADERSTATE * ShpLoaderCreate(SHPLOADERCONFIG *config) { SHPLOADERSTATE *state; /* Create a new state object and assign the config to it */ state = malloc(sizeof(SHPLOADERSTATE)); state->config = config; /* Set any state defaults */ state->hSHPHandle = NULL; state->hDBFHandle = NULL; state->has_z = 0; state->has_m = 0; state->types = NULL; state->widths = NULL; state->precisions = NULL; state->col_names = NULL; state->field_names = NULL; state->from_srid = config->shp_sr_id; state->to_srid = config->sr_id; /* If only one has a valid SRID, use it for both. */ if (state->to_srid == SRID_UNKNOWN) { if (config->geography) { state->to_srid = 4326; } else { state->to_srid = state->from_srid; } } if (state->from_srid == SRID_UNKNOWN) { state->from_srid = state->to_srid; } /* If the geo col name is not set, use one of the defaults. */ state->geo_col = config->geo_col; if (!state->geo_col) { state->geo_col = strdup(config->geography ? GEOGRAPHY_DEFAULT : GEOMETRY_DEFAULT); } return state; } /* Open the shapefile and extract the relevant field information */ int ShpLoaderOpenShape(SHPLOADERSTATE *state) { SHPObject *obj = NULL; int j, z; int ret = SHPLOADEROK; int field_precision, field_width; char name[MAXFIELDNAMELEN]; char name2[MAXFIELDNAMELEN]; DBFFieldType type = -1; char *utf8str; /* If we are reading the entire shapefile, open it */ if (state->config->readshape == 1) { state->hSHPHandle = SHPOpen(state->config->shp_file, "rb"); if (state->hSHPHandle == NULL) { snprintf(state->message, SHPLOADERMSGLEN, _("%s: shape (.shp) or index files (.shx) can not be opened, will just import attribute data."), state->config->shp_file); state->config->readshape = 0; ret = SHPLOADERWARN; } } /* Open the DBF (attributes) file */ state->hDBFHandle = DBFOpen(state->config->shp_file, "rb"); if ((state->hSHPHandle == NULL && state->config->readshape == 1) || state->hDBFHandle == NULL) { snprintf(state->message, SHPLOADERMSGLEN, _("%s: dbf file (.dbf) can not be opened."), state->config->shp_file); return SHPLOADERERR; } /* If reading the whole shapefile (not just attributes)... */ if (state->config->readshape == 1) { SHPGetInfo(state->hSHPHandle, &state->num_entities, &state->shpfiletype, NULL, NULL); /* If null_policy is set to abort, check for NULLs */ if (state->config->null_policy == POLICY_NULL_ABORT) { /* If we abort on null items, scan the entire file for NULLs */ for (j = 0; j < state->num_entities; j++) { obj = SHPReadObject(state->hSHPHandle, j); if (!obj) { snprintf(state->message, SHPLOADERMSGLEN, _("Error reading shape object %d"), j); return SHPLOADERERR; } if (obj->nVertices == 0) { snprintf(state->message, SHPLOADERMSGLEN, _("Empty geometries found, aborted.)")); return SHPLOADERERR; } SHPDestroyObject(obj); } } /* Check the shapefile type */ int geomtype = 0; switch (state->shpfiletype) { case SHPT_POINT: /* Point */ state->pgtype = "POINT"; geomtype = POINTTYPE; state->pgdims = 2; break; case SHPT_ARC: /* PolyLine */ state->pgtype = "MULTILINESTRING"; geomtype = MULTILINETYPE ; state->pgdims = 2; break; case SHPT_POLYGON: /* Polygon */ state->pgtype = "MULTIPOLYGON"; geomtype = MULTIPOLYGONTYPE; state->pgdims = 2; break; case SHPT_MULTIPOINT: /* MultiPoint */ state->pgtype = "MULTIPOINT"; geomtype = MULTIPOINTTYPE; state->pgdims = 2; break; case SHPT_POINTM: /* PointM */ geomtype = POINTTYPE; state->has_m = 1; state->pgtype = "POINTM"; state->pgdims = 3; break; case SHPT_ARCM: /* PolyLineM */ geomtype = MULTILINETYPE; state->has_m = 1; state->pgtype = "MULTILINESTRINGM"; state->pgdims = 3; break; case SHPT_POLYGONM: /* PolygonM */ geomtype = MULTIPOLYGONTYPE; state->has_m = 1; state->pgtype = "MULTIPOLYGONM"; state->pgdims = 3; break; case SHPT_MULTIPOINTM: /* MultiPointM */ geomtype = MULTIPOINTTYPE; state->has_m = 1; state->pgtype = "MULTIPOINTM"; state->pgdims = 3; break; case SHPT_POINTZ: /* PointZ */ geomtype = POINTTYPE; state->has_m = 1; state->has_z = 1; state->pgtype = "POINT"; state->pgdims = 4; break; case SHPT_ARCZ: /* PolyLineZ */ state->pgtype = "MULTILINESTRING"; geomtype = MULTILINETYPE; state->has_z = 1; state->has_m = 1; state->pgdims = 4; break; case SHPT_POLYGONZ: /* MultiPolygonZ */ state->pgtype = "MULTIPOLYGON"; geomtype = MULTIPOLYGONTYPE; state->has_z = 1; state->has_m = 1; state->pgdims = 4; break; case SHPT_MULTIPOINTZ: /* MultiPointZ */ state->pgtype = "MULTIPOINT"; geomtype = MULTIPOINTTYPE; state->has_z = 1; state->has_m = 1; state->pgdims = 4; break; default: state->pgtype = "GEOMETRY"; geomtype = COLLECTIONTYPE; state->has_z = 1; state->has_m = 1; state->pgdims = 4; snprintf(state->message, SHPLOADERMSGLEN, _("Unknown geometry type: %d\n"), state->shpfiletype); return SHPLOADERERR; break; } /* Force Z/M-handling if configured to do so */ switch(state->config->force_output) { case FORCE_OUTPUT_2D: state->has_z = 0; state->has_m = 0; state->pgdims = 2; break; case FORCE_OUTPUT_3DZ: state->has_z = 1; state->has_m = 0; state->pgdims = 3; break; case FORCE_OUTPUT_3DM: state->has_z = 0; state->has_m = 1; state->pgdims = 3; break; case FORCE_OUTPUT_4D: state->has_z = 1; state->has_m = 1; state->pgdims = 4; break; default: /* Simply use the auto-detected values above */ break; } /* If in simple geometry mode, alter names for CREATE TABLE by skipping MULTI */ if (state->config->simple_geometries) { if ((geomtype == MULTIPOLYGONTYPE) || (geomtype == MULTILINETYPE) || (geomtype == MULTIPOINTTYPE)) { /* Chop off the "MULTI" from the string. */ state->pgtype += 5; } } } else { /* Otherwise just count the number of records in the DBF */ state->num_entities = DBFGetRecordCount(state->hDBFHandle); } /* Get the field information from the DBF */ state->num_fields = DBFGetFieldCount(state->hDBFHandle); state->num_records = DBFGetRecordCount(state->hDBFHandle); /* Allocate storage for field information */ state->field_names = malloc(state->num_fields * sizeof(char*)); state->types = (DBFFieldType *)malloc(state->num_fields * sizeof(int)); state->widths = malloc(state->num_fields * sizeof(int)); state->precisions = malloc(state->num_fields * sizeof(int)); state->pgfieldtypes = malloc(state->num_fields * sizeof(char *)); state->col_names = malloc((state->num_fields + 2) * sizeof(char) * MAXFIELDNAMELEN); /* Generate a string of comma separated column names of the form "(col1, col2 ... colN)" for the SQL insertion string */ strcpy(state->col_names, "(" ); for (j = 0; j < state->num_fields; j++) { type = DBFGetFieldInfo(state->hDBFHandle, j, name, &field_width, &field_precision); state->types[j] = type; state->widths[j] = field_width; state->precisions[j] = field_precision; if (state->config->encoding) { char *encoding_msg = _("Try \"LATIN1\" (Western European), or one of the values described at http://www.gnu.org/software/libiconv/."); int rv = utf8(state->config->encoding, name, &utf8str); if (rv != UTF8_GOOD_RESULT) { if ( rv == UTF8_BAD_RESULT ) snprintf(state->message, SHPLOADERMSGLEN, _("Unable to convert field name \"%s\" to UTF-8 (iconv reports \"%s\"). Current encoding is \"%s\". %s"), utf8str, strerror(errno), state->config->encoding, encoding_msg); else if ( rv == UTF8_NO_RESULT ) snprintf(state->message, SHPLOADERMSGLEN, _("Unable to convert field name to UTF-8 (iconv reports \"%s\"). Current encoding is \"%s\". %s"), strerror(errno), state->config->encoding, encoding_msg); else snprintf(state->message, SHPLOADERMSGLEN, _("Unexpected return value from utf8()")); if ( rv == UTF8_BAD_RESULT ) free(utf8str); return SHPLOADERERR; } strncpy(name, utf8str, MAXFIELDNAMELEN); free(utf8str); } /* * Make field names lowercase unless asked to * keep identifiers case. */ if (!state->config->quoteidentifiers) strtolower(name); /* * Escape names starting with the * escape char (_), those named 'gid' * or after pgsql reserved attribute names */ if (name[0] == '_' || ! strcmp(name, "gid") || ! strcmp(name, "tableoid") || ! strcmp(name, "cmin") || ! strcmp(name, "cmax") || ! strcmp(name, "xmin") || ! strcmp(name, "xmax") || ! strcmp(name, "primary") || ! strcmp(name, "oid") || ! strcmp(name, "ctid")) { strncpy(name2 + 2, name, MAXFIELDNAMELEN - 2); name2[0] = '_'; name2[1] = '_'; strcpy(name, name2); } /* Avoid duplicating field names */ for (z = 0; z < j ; z++) { if (strcmp(state->field_names[z], name) == 0) { strncat(name, "__", MAXFIELDNAMELEN); snprintf(name + strlen(name), MAXFIELDNAMELEN, "%i", j); break; } } state->field_names[j] = malloc(strlen(name) + 1); strcpy(state->field_names[j], name); /* Now generate the PostgreSQL type name string and width based upon the shapefile type */ switch (state->types[j]) { case FTString: state->pgfieldtypes[j] = malloc(strlen("varchar") + 1); strcpy(state->pgfieldtypes[j], "varchar"); break; case FTDate: state->pgfieldtypes[j] = malloc(strlen("date") + 1); strcpy(state->pgfieldtypes[j], "date"); break; case FTInteger: /* Determine exact type based upon field width */ if (state->config->forceint4 || (state->widths[j] >=5 && state->widths[j] < 10)) { state->pgfieldtypes[j] = malloc(strlen("int4") + 1); strcpy(state->pgfieldtypes[j], "int4"); } else if (state->widths[j] < 5) { state->pgfieldtypes[j] = malloc(strlen("int2") + 1); strcpy(state->pgfieldtypes[j], "int2"); } else { state->pgfieldtypes[j] = malloc(strlen("numeric") + 1); strcpy(state->pgfieldtypes[j], "numeric"); } break; case FTDouble: /* Determine exact type based upon field width */ if (state->widths[j] > 18) { state->pgfieldtypes[j] = malloc(strlen("numeric") + 1); strcpy(state->pgfieldtypes[j], "numeric"); } else { state->pgfieldtypes[j] = malloc(strlen("float8") + 1); strcpy(state->pgfieldtypes[j], "float8"); } break; case FTLogical: state->pgfieldtypes[j] = malloc(strlen("boolean") + 1); strcpy(state->pgfieldtypes[j], "boolean"); break; default: snprintf(state->message, SHPLOADERMSGLEN, _("Invalid type %x in DBF file"), state->types[j]); return SHPLOADERERR; } strcat(state->col_names, "\""); strcat(state->col_names, name); if (state->config->readshape == 1 || j < (state->num_fields - 1)) { /* Don't include last comma if its the last field and no geometry field will follow */ strcat(state->col_names, "\","); } else { strcat(state->col_names, "\""); } } /* Append the geometry column if required */ if (state->config->readshape == 1) strcat(state->col_names, state->geo_col); strcat(state->col_names, ")"); /* Return status */ return ret; } /* Return a pointer to an allocated string containing the header for the specified loader state */ int ShpLoaderGetSQLHeader(SHPLOADERSTATE *state, char **strheader) { stringbuffer_t *sb; char *ret; int j; /* Create the stringbuffer containing the header; we use this API as it's easier for handling string resizing during append */ sb = stringbuffer_create(); stringbuffer_clear(sb); /* Set the client encoding if required */ if (state->config->encoding) { stringbuffer_aprintf(sb, "SET CLIENT_ENCODING TO UTF8;\n"); } /* Use SQL-standard string escaping rather than PostgreSQL standard */ stringbuffer_aprintf(sb, "SET STANDARD_CONFORMING_STRINGS TO ON;\n"); /* Drop table if requested */ if (state->config->opt == 'd') { /** * TODO: if the table has more then one geometry column * the DROP TABLE call will leave spurious records in * geometry_columns. * * If the geometry column in the table being dropped * does not match 'the_geom' or the name specified with * -g an error is returned by DropGeometryColumn. * * The table to be dropped might not exist. */ if (state->config->schema) { if (state->config->readshape == 1 && (! state->config->geography) ) { stringbuffer_aprintf(sb, "SELECT DropGeometryColumn('%s','%s','%s');\n", state->config->schema, state->config->table, state->geo_col); } stringbuffer_aprintf(sb, "DROP TABLE \"%s\".\"%s\";\n", state->config->schema, state->config->table); } else { if (state->config->readshape == 1 && (! state->config->geography) ) { stringbuffer_aprintf(sb, "SELECT DropGeometryColumn('','%s','%s');\n", state->config->table, state->geo_col); } stringbuffer_aprintf(sb, "DROP TABLE \"%s\";\n", state->config->table); } } /* Start of transaction if we are using one */ if (state->config->usetransaction) { stringbuffer_aprintf(sb, "BEGIN;\n"); } /* If not in 'append' mode create the spatial table */ if (state->config->opt != 'a') { /* * Create a table for inserting the shapes into with appropriate * columns and types */ if (state->config->schema) { stringbuffer_aprintf(sb, "CREATE TABLE \"%s\".\"%s\" (gid serial", state->config->schema, state->config->table); } else { stringbuffer_aprintf(sb, "CREATE TABLE \"%s\" (gid serial", state->config->table); } /* Generate the field types based upon the shapefile information */ for (j = 0; j < state->num_fields; j++) { stringbuffer_aprintf(sb, ",\n\"%s\" ", state->field_names[j]); /* First output the raw field type string */ stringbuffer_aprintf(sb, "%s", state->pgfieldtypes[j]); /* Some types do have typmods though... */ if (!strcmp("varchar", state->pgfieldtypes[j])) stringbuffer_aprintf(sb, "(%d)", state->widths[j]); if (!strcmp("numeric", state->pgfieldtypes[j])) { /* Doubles we just allow PostgreSQL to auto-detect the size */ if (state->types[j] != FTDouble) stringbuffer_aprintf(sb, "(%d,0)", state->widths[j]); } } /* Add the geography column directly to the table definition, we don't need to do an AddGeometryColumn() call. */ if (state->config->readshape == 1 && state->config->geography) { char *dimschar; if (state->pgdims == 4) dimschar = "ZM"; else dimschar = ""; if (state->to_srid != SRID_UNKNOWN && state->to_srid != 4326) { snprintf(state->message, SHPLOADERMSGLEN, _("Invalid SRID for geography type: %d"), state->to_srid); stringbuffer_destroy(sb); return SHPLOADERERR; } stringbuffer_aprintf(sb, ",\n\"%s\" geography(%s%s,%d)", state->geo_col, state->pgtype, dimschar, 4326); } stringbuffer_aprintf(sb, ")"); /* Tablespace is optional. */ if (state->config->tablespace != NULL) { stringbuffer_aprintf(sb, " TABLESPACE \"%s\"", state->config->tablespace); } stringbuffer_aprintf(sb, ";\n"); /* Create the primary key. This is done separately because the index for the PK needs * to be in the correct tablespace. */ /* TODO: Currently PostgreSQL does not allow specifying an index to use for a PK (so you get * a default one called table_pkey) and it does not provide a way to create a PK index * in a specific tablespace. So as a hacky solution we create the PK, then move the * index to the correct tablespace. Eventually this should be: * CREATE INDEX table_pkey on table(gid) TABLESPACE tblspc; * ALTER TABLE table ADD PRIMARY KEY (gid) USING INDEX table_pkey; * A patch has apparently been submitted to PostgreSQL to enable this syntax, see this thread: * http://archives.postgresql.org/pgsql-hackers/2011-01/msg01405.php */ stringbuffer_aprintf(sb, "ALTER TABLE "); /* Schema is optional, include if present. */ if (state->config->schema) { stringbuffer_aprintf(sb, "\"%s\".",state->config->schema); } stringbuffer_aprintf(sb, "\"%s\" ADD PRIMARY KEY (gid);\n", state->config->table); /* Tablespace is optional for the index. */ if (state->config->idxtablespace != NULL) { stringbuffer_aprintf(sb, "ALTER INDEX "); if (state->config->schema) { stringbuffer_aprintf(sb, "\"%s\".",state->config->schema); } /* WARNING: We're assuming the default "table_pkey" name for the primary * key index. PostgreSQL may use "table_pkey1" or similar in the * case of a name conflict, so you may need to edit the produced * SQL in this rare case. */ stringbuffer_aprintf(sb, "\"%s_pkey\" SET TABLESPACE \"%s\";\n", state->config->table, state->config->idxtablespace); } /* Create the geometry column with an addgeometry call */ if (state->config->readshape == 1 && (!state->config->geography)) { /* If they didn't specify a target SRID, see if they specified a source SRID. */ int srid = state->to_srid; if (state->config->schema) { stringbuffer_aprintf(sb, "SELECT AddGeometryColumn('%s','%s','%s','%d',", state->config->schema, state->config->table, state->geo_col, srid); } else { stringbuffer_aprintf(sb, "SELECT AddGeometryColumn('','%s','%s','%d',", state->config->table, state->geo_col, srid); } stringbuffer_aprintf(sb, "'%s',%d);\n", state->pgtype, state->pgdims); } } /* Copy the string buffer into a new string, destroying the string buffer */ ret = (char *)malloc(strlen((char *)stringbuffer_getstring(sb)) + 1); strcpy(ret, (char *)stringbuffer_getstring(sb)); stringbuffer_destroy(sb); *strheader = ret; return SHPLOADEROK; } /* Return an allocated string containing the copy statement for this state */ int ShpLoaderGetSQLCopyStatement(SHPLOADERSTATE *state, char **strheader) { char *copystr; /* Allocate the string for the COPY statement */ if (state->config->dump_format) { if (state->config->schema) { copystr = malloc(strlen(state->config->schema) + strlen(state->config->table) + strlen(state->col_names) + 40); sprintf(copystr, "COPY \"%s\".\"%s\" %s FROM stdin;\n", state->config->schema, state->config->table, state->col_names); } else { copystr = malloc(strlen(state->config->table) + strlen(state->col_names) + 40); sprintf(copystr, "COPY \"%s\" %s FROM stdin;\n", state->config->table, state->col_names); } *strheader = copystr; return SHPLOADEROK; } else { /* Flag an error as something has gone horribly wrong */ snprintf(state->message, SHPLOADERMSGLEN, _("Internal error: attempt to generate a COPY statement for data that hasn't been requested in COPY format")); return SHPLOADERERR; } } /* Return a count of the number of entities in this shapefile */ int ShpLoaderGetRecordCount(SHPLOADERSTATE *state) { return state->num_entities; } /* Return an allocated string representation of a specified record item */ int ShpLoaderGenerateSQLRowStatement(SHPLOADERSTATE *state, int item, char **strrecord) { SHPObject *obj = NULL; stringbuffer_t *sb; stringbuffer_t *sbwarn; char val[MAXVALUELEN]; char *escval; char *geometry=NULL, *ret; char *utf8str; int res, i; int rv; /* Clear the stringbuffers */ sbwarn = stringbuffer_create(); stringbuffer_clear(sbwarn); sb = stringbuffer_create(); stringbuffer_clear(sb); /* If we are reading the DBF only and the record has been marked deleted, return deleted record status */ if (state->config->readshape == 0 && DBFIsRecordDeleted(state->hDBFHandle, item)) { *strrecord = NULL; return SHPLOADERRECDELETED; } /* If we are reading the shapefile, open the specified record */ if (state->config->readshape == 1) { obj = SHPReadObject(state->hSHPHandle, item); if (!obj) { snprintf(state->message, SHPLOADERMSGLEN, _("Error reading shape object %d"), item); return SHPLOADERERR; } /* If we are set to skip NULLs, return a NULL record status */ if (state->config->null_policy == POLICY_NULL_SKIP && obj->nVertices == 0 ) { SHPDestroyObject(obj); *strrecord = NULL; return SHPLOADERRECISNULL; } } /* If not in dump format, generate the INSERT string */ if (!state->config->dump_format) { if (state->config->schema) { stringbuffer_aprintf(sb, "INSERT INTO \"%s\".\"%s\" %s VALUES (", state->config->schema, state->config->table, state->col_names); } else { stringbuffer_aprintf(sb, "INSERT INTO \"%s\" %s VALUES (", state->config->table, state->col_names); } } /* Read all of the attributes from the DBF file for this item */ for (i = 0; i < DBFGetFieldCount(state->hDBFHandle); i++) { /* Special case for NULL attributes */ if (DBFIsAttributeNULL(state->hDBFHandle, item, i)) { if (state->config->dump_format) stringbuffer_aprintf(sb, "\\N"); else stringbuffer_aprintf(sb, "NULL"); } else { /* Attribute NOT NULL */ switch (state->types[i]) { case FTInteger: case FTDouble: rv = snprintf(val, MAXVALUELEN, "%s", DBFReadStringAttribute(state->hDBFHandle, item, i)); if (rv >= MAXVALUELEN || rv == -1) { stringbuffer_aprintf(sbwarn, "Warning: field %d name truncated\n", i); val[MAXVALUELEN - 1] = '\0'; } /* If the value is an empty string, change to 0 */ if (val[0] == '\0') { val[0] = '0'; val[1] = '\0'; } /* If the value ends with just ".", remove the dot */ if (val[strlen(val) - 1] == '.') val[strlen(val) - 1] = '\0'; break; case FTString: case FTLogical: case FTDate: rv = snprintf(val, MAXVALUELEN, "%s", DBFReadStringAttribute(state->hDBFHandle, item, i)); if (rv >= MAXVALUELEN || rv == -1) { stringbuffer_aprintf(sbwarn, "Warning: field %d name truncated\n", i); val[MAXVALUELEN - 1] = '\0'; } break; default: snprintf(state->message, SHPLOADERMSGLEN, _("Error: field %d has invalid or unknown field type (%d)"), i, state->types[i]); SHPDestroyObject(obj); stringbuffer_destroy(sbwarn); stringbuffer_destroy(sb); return SHPLOADERERR; } if (state->config->encoding) { char *encoding_msg = _("Try \"LATIN1\" (Western European), or one of the values described at http://www.postgresql.org/docs/current/static/multibyte.html."); rv = utf8(state->config->encoding, val, &utf8str); if (rv != UTF8_GOOD_RESULT) { if ( rv == UTF8_BAD_RESULT ) snprintf(state->message, SHPLOADERMSGLEN, _("Unable to convert data value \"%s\" to UTF-8 (iconv reports \"%s\"). Current encoding is \"%s\". %s"), utf8str, strerror(errno), state->config->encoding, encoding_msg); else if ( rv == UTF8_NO_RESULT ) snprintf(state->message, SHPLOADERMSGLEN, _("Unable to convert data value to UTF-8 (iconv reports \"%s\"). Current encoding is \"%s\". %s"), strerror(errno), state->config->encoding, encoding_msg); else snprintf(state->message, SHPLOADERMSGLEN, _("Unexpected return value from utf8()")); if ( rv == UTF8_BAD_RESULT ) free(utf8str); return SHPLOADERERR; } strncpy(val, utf8str, MAXVALUELEN); free(utf8str); } /* Escape attribute correctly according to dump format */ if (state->config->dump_format) { escval = escape_copy_string(val); stringbuffer_aprintf(sb, "%s", escval); } else { escval = escape_insert_string(val); stringbuffer_aprintf(sb, "'%s'", escval); } /* Free the escaped version if required */ if (val != escval) free(escval); } /* Only put in delimeter if not last field or a shape will follow */ if (state->config->readshape == 1 || i < DBFGetFieldCount(state->hDBFHandle) - 1) { if (state->config->dump_format) stringbuffer_aprintf(sb, "\t"); else stringbuffer_aprintf(sb, ","); } /* End of DBF attribute loop */ } /* Add the shape attribute if we are reading it */ if (state->config->readshape == 1) { /* Handle the case of a NULL shape */ if (obj->nVertices == 0) { if (state->config->dump_format) stringbuffer_aprintf(sb, "\\N"); else stringbuffer_aprintf(sb, "NULL"); } else { /* Handle all other shape attributes */ switch (obj->nSHPType) { case SHPT_POLYGON: case SHPT_POLYGONM: case SHPT_POLYGONZ: res = GeneratePolygonGeometry(state, obj, &geometry); break; case SHPT_POINT: case SHPT_POINTM: case SHPT_POINTZ: res = GeneratePointGeometry(state, obj, &geometry, 0); break; case SHPT_MULTIPOINT: case SHPT_MULTIPOINTM: case SHPT_MULTIPOINTZ: /* Force it to multi unless using -S */ res = GeneratePointGeometry(state, obj, &geometry, state->config->simple_geometries ? 0 : 1); break; case SHPT_ARC: case SHPT_ARCM: case SHPT_ARCZ: res = GenerateLineStringGeometry(state, obj, &geometry); break; default: snprintf(state->message, SHPLOADERMSGLEN, _("Shape type is not supported, type id = %d"), obj->nSHPType); SHPDestroyObject(obj); stringbuffer_destroy(sbwarn); stringbuffer_destroy(sb); return SHPLOADERERR; } /* The default returns out of the function, so res will always have been set. */ if (res != SHPLOADEROK) { /* Error message has already been set */ SHPDestroyObject(obj); stringbuffer_destroy(sbwarn); stringbuffer_destroy(sb); return SHPLOADERERR; } /* Now generate the geometry string according to the current configuration */ if (!state->config->dump_format) { if (state->to_srid != state->from_srid) { stringbuffer_aprintf(sb, "ST_Transform("); } stringbuffer_aprintf(sb, "'"); } stringbuffer_aprintf(sb, "%s", geometry); if (!state->config->dump_format) { stringbuffer_aprintf(sb, "'"); /* Close the ST_Transform if reprojecting. */ if (state->to_srid != state->from_srid) { /* We need to add an explicit cast to geography/geometry to ensure that PostgreSQL doesn't get confused with the ST_Transform() raster function. */ if (state->config->geography) stringbuffer_aprintf(sb, "::geometry, %d)::geography", state->to_srid); else stringbuffer_aprintf(sb, "::geometry, %d)", state->to_srid); } } free(geometry); } /* Tidy up everything */ SHPDestroyObject(obj); } /* Close the line correctly for dump/insert format */ if (!state->config->dump_format) stringbuffer_aprintf(sb, ");"); /* Copy the string buffer into a new string, destroying the string buffer */ ret = (char *)malloc(strlen((char *)stringbuffer_getstring(sb)) + 1); strcpy(ret, (char *)stringbuffer_getstring(sb)); stringbuffer_destroy(sb); *strrecord = ret; /* If any warnings occurred, set the returned message string and warning status */ if (strlen((char *)stringbuffer_getstring(sbwarn)) > 0) { snprintf(state->message, SHPLOADERMSGLEN, "%s", stringbuffer_getstring(sbwarn)); stringbuffer_destroy(sbwarn); return SHPLOADERWARN; } else { /* Everything went okay */ stringbuffer_destroy(sbwarn); return SHPLOADEROK; } } /* Return a pointer to an allocated string containing the header for the specified loader state */ int ShpLoaderGetSQLFooter(SHPLOADERSTATE *state, char **strfooter) { stringbuffer_t *sb; char *ret; /* Create the stringbuffer containing the header; we use this API as it's easier for handling string resizing during append */ sb = stringbuffer_create(); stringbuffer_clear(sb); /* Create gist index if specified and not in "prepare" mode */ if (state->config->createindex) { stringbuffer_aprintf(sb, "CREATE INDEX \"%s_%s_gist\" ON ", state->config->table, state->geo_col); /* Schema is optional, include if present. */ if (state->config->schema) { stringbuffer_aprintf(sb, "\"%s\".",state->config->schema); } stringbuffer_aprintf(sb, "\"%s\" USING GIST (\"%s\")", state->config->table, state->geo_col); /* Tablespace is also optional. */ if (state->config->idxtablespace != NULL) { stringbuffer_aprintf(sb, " TABLESPACE \"%s\"", state->config->idxtablespace); } stringbuffer_aprintf(sb, ";\n"); } /* End the transaction if there is one. */ if (state->config->usetransaction) { stringbuffer_aprintf(sb, "COMMIT;\n"); } /* Copy the string buffer into a new string, destroying the string buffer */ ret = (char *)malloc(strlen((char *)stringbuffer_getstring(sb)) + 1); strcpy(ret, (char *)stringbuffer_getstring(sb)); stringbuffer_destroy(sb); *strfooter = ret; return SHPLOADEROK; } void ShpLoaderDestroy(SHPLOADERSTATE *state) { /* Destroy a state object created with ShpLoaderOpenShape */ int i; if (state != NULL) { if (state->hSHPHandle) SHPClose(state->hSHPHandle); if (state->hDBFHandle) DBFClose(state->hDBFHandle); if (state->field_names) { for (i = 0; i < state->num_fields; i++) free(state->field_names[i]); free(state->field_names); } if (state->pgfieldtypes) { for (i = 0; i < state->num_fields; i++) free(state->pgfieldtypes[i]); free(state->pgfieldtypes); } if (state->types) free(state->types); if (state->widths) free(state->widths); if (state->precisions) free(state->precisions); if (state->col_names) free(state->col_names); /* Free the state itself */ free(state); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shp2pgsql-gui.ico����������������������������������������������������0000644�0000000�0000000�00000030536�11722777314�020251� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������>@����(��V��� ����¨��~������È��&��������î%������h��ö+��(���>���€������������ �� ��������.�4$#�5+%�7((�8'%�;*&�;,+�63&�;3+�<<+�80'�>11�/ �<D+�>L-�?Q.�B.)�D0,�@;.�L5-�C44�F88�K72�K85�J=<�D;5�T<2�Z?3�S>8�R:/�@E.�ED2�EK2�KC;�KN8�@R/�BU1�C]2�JR6�OR;�O[9�]A5�]E<�RD>�QW=�G`6�Hb7�Ld9�Nk;�Qo<�R`<�Ss>�dG9�fI:�kL;�`D6�rQ>�NAA�RDD�WKJ�]IC�[NM�WGE�UVC�^RR�YhC�Vv@�Wy@�\uD�Z}C�hM@�kQE�lTK�dQL�bUU�fZZ�j^]�hXU�uTB�zWB�}ZD�{\K�uXI�q\T�la]�bfP�`zG�kwW�{d\�ub\�bmN�mba�wjh�wth�~ts�^‚E�`†G�e‹J�dˆI�n…V�j“N�n”Q�n˜Q�s†]�rœT�u›Z�t•Z�~‹k�{œa�u W�w¡Y�z¤]�}¦`�©b�ƒ^G�€_K�„aJ�‹eK�‹kW�’jN�“mT�™oQ�rS�˜u]�„nd�Šti�us�ƒyx�Š{u�™zf�‘~t�£vV�¦xW�«|Y�§zX�¥~b�Šƒz�œ„w�™†}�€m�«e�…®i�…¤m�Œ¬u�ˆ¢q�†°k�‰²n�µr�‘¸w�”»{�˜¾�’·x�­€_�®‚a�«…j�«„h�¥‰v�±…e�²‡h�´‹l�¶q�¶t�³’{�¹’v�»–{�½™~�¬~�™Š„�”™‡�‹„�™¾�š¶„�¦�ª’„�¦›—�¾›‚�¶›‰�²ž‘�¤£š�¹¥˜�¡¸Ž�®©¥�¹«¥�´¸©�¼µ²�Ã…�¡ÆŠ�¤È�ªÌ”�¯Î™�§Ê‘�°Ï›�²Ñ�µÒ¢�¸Õ¦�»Öª�¾Ø®�Àž‡�ÁŸˆ�Ä£Œ�Ƨ‘�Ǩ’�ɬ•�Ë®™�β�δ¢�ʸ¬�ȼµ�Ѷ£�Ò¹¦�Õ½¬�ͺ�ÂÚ³�Çݸ�ÉÞ»�ÖÀ¯�Ö²�Ùĵ�ÛǸ�Ýʼ�ÕÆ½�Ìà¾�ßÎÁ�ÔÊÄ�ÝÑÉ�ÐÛÇ�ÜÛ×�ÌÑÃ�ÎáÂ�ÔæÊ�ÓåÈ�ÜëÓ�àÏÂ�áÑÅ�åÖË�çÙÎ�çÛÒ�éÝÓ�æÞÙ�ãîÛ�íãÛ�ìàÖ�æðß�îçá�ïèã�éòã�ïõê�çðà�ñêå�ôîê�õñî�÷óñ�ùöõ�úø÷�ûüø�����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJ:  :@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿL:)66667+Lÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=5ryƒ……………………„yu6 ;^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;6uƒ…………………………wOu„˜…„x6:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJ8z…………………………………86w„……zN=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿ\6z…………………†…†……………ƒ�7ƒ………ƒ8\ÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿKu………………………………………………u �5„…………wJÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿ>5ƒ……………†……………………………………u# 6NPw…ƒ6:ÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿ+8„…………………………………………†……………t N…˜8+ÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿ!r…………………†…………………………………………†8 %%6z˜uÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿ+r……………………………………†…………………………˜˜7%%%$u†u+ÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿ@r………„……………………………………†…………………†˜u%%%%%%8˜u=ÿÿÿÿÿÿÿ��ÿÿÿÿÿÿ[8…………………†……………†…………………†…………………u%%%%%%%#P…OLÿÿÿÿÿÿ��ÿÿÿÿÿ)†……………………………………………………………………………8-%%%%%%#)……4^ÿÿÿÿÿ��ÿÿÿÿÿ9y…………†…………………†………………………………………ƒP-%%%%--%%ƒ…ƒÿÿÿÿÿ��ÿÿÿÿ[s……………………………†……………………†…†……………z)$00.--%-% 6†…tKÿÿÿÿ��ÿÿÿÿ)†………………………………………………………………………y 01100...%%%-w……7ÿÿÿÿ��ÿÿÿJu………………………†……………………………………………u&3C3331100..---r……w@ÿÿÿ��ÿÿÿ)……………†………………†…………………………………z/EEEC33333300.--$4…˜…5ÿÿÿ��ÿÿLu……………………†……………………˜˜žžžžr/```____333310//.-w……xKÿÿ��ÿÿ„………………………………………™žžž Ÿ  *3`bab`_____CC3330/.#6………ÿÿ��ÿÿO………………………………†…›Ÿ £££££Faddaaaa_____CC33300. y……rÿÿ��ÿ@z………………………………‡xQ*G𣢡£I dffffdaaaa_____3330/ u……z=ÿ��ÿ„………………†…………˜x6&("<fhfffffddaa____EC33)y………ÿ��ÿ8˜…………………………x&1bdih2*<(nnmmhhhhddeaa__CB1/ƒ…………Oÿ��ÿt………………………›5 Vhhhn`H­°°°H(jinnihhdaaaadB u……………xL��=z……………………™‡N&hhnnV}ÈËœ‰° &'&  (Qtssw………………z=��9ƒ………………˜™F Dhmnoi+­ÌÌË<°³­\YSF><ISX|X¤ Ÿž………………„��…………………™Q&hnnnooj ÐÐÑÒ­‚ÍÒÒÒÒÑÐÐÍÐÐÌÌËɯ¢¢¯¤£¡ž………………�� )………………˜žv ehnoqŒg‰ÒÒÒ³Y>³ÚØÙØÙÒÒÒÑÑÐÌÌËÊÉÇǯ¥£¡Ÿ………………5 ��4………………‡annooŒ‘l\§}JÒÛÛÛÚÛÚÙÙØÒÒÒÌÌËÊÈÇů¥£ ž……………6��5……………››6VnnoŒŒ‘’“j,€ØèèéèèèèÛÚÚÚ××ÒÐÐÌËÈÇÇ¥££ ž…………N�� 5…………™G(inoqŒ’““”•”A§ÛêêêêêéêèèèÛÚÙ×ÒÑÌÌËÉÇÅ¥££Ÿž™………N��5………˜‡&fnoŒ‘““”••¹¹¹:TàììíííêêêéèÞÚÙÙÒÑÌÌËÉÇů££Ÿ………6�� )………™ŸvVnop’““••ª¹¹¹¹»«AßððññññíëêêéÞÛÙØÒÑÌÌËÇǯ¥£ ž……5��……˜ŸR dooŒ’’“••ª¹¹¹»¼½Á‹ÏôôôôóððñíëêééÛÚ×ÒÑÌËÉǯ¯££Ÿ……)��9ƒ…™žš ioq’’“•ªª¹¹º¾½¿Á´^óùùùøøôðññëëéèÛÙ×ÒÐÌËÇÇÅ¥£Ÿž™†��=y˜›ŸxDoqŒ’“”•ª¹¹»¼½ÁÁÃÄÔ] ßüûúúùùøóðñíëéÞÛÙÒÑÐÌÉÈÆ¯¤¡Ÿƒ;��ÿu™ž Q eoq’“”••¹¹»¼ÀÁÃÄÕÖÝ·^ûýýýûúúøóðñëëéÞÚÙÒÐÌËÉǯ££ŸžxK��ÿN™ž£Q jqŒ’“••¹¹»¼ÀÁÃÔÕÖäææ]ÿÿÿÿýýûúùøðñëêéÛÙØÑÐËÉǯ¯££žQÿ��ÿ‡Ÿ {AŒ‘“”•–¹»¾½ÁÃÔÖäååçç·ÿÿÿÿÿÿýûúùóðíëéÞÚØÒÑÌËÇÇ¥££ž*ÿ��ÿ@ƒŸ¢ &Œ’“”–¹¹»½ÁÃÔÕäåççòõ·KÿÿÿÿÿÿýûùøóíëêéÛÙÒÑÌËÉǯ££›=ÿ��ÿÿQ ¤¥Io““•–¹º¾½ÁÄÕäæçç÷õµ9ÿÿÿÿÿÿÿÿýúùøðíëééÚØÒÐÌÉÇÅ¥£vÿÿ��ÿÿš¤¯vi’“”•¹¹»¼ÁÃÔÝæçï÷ö¸>ÿÿÿÿÿÿÿÿÿýýùùðñëééÛÙÒÐÌÉÇů£4ÿÿ��ÿÿL{¤¥Hi’“”•¹¹»½ÂÄÕäåç÷öç;9ÿÿÿÿÿÿÿÿÿÿÿýúùóñíéèÛÙÒÐÌÊÈÅŇJÿÿ��ÿÿÿF‡I,’“••¹º¾½ÂÄÝæççõü¸ÿÿÿÿÿÿÿÿÿÿÿýûùøðíëéÛÙ×ÑÌËÇÇ¥G ÿÿÿ��ÿÿÿJAi’“•ª¹º¼ÀÃÕÝåçòöýµÿÿÿÿÿÿÿÿÿÿÿÿýûùøðëëéÛÚ×ÑÌËÉÇœ@ÿÿÿ��ÿÿÿÿDpŒ‘““••¹º¼´k]¨äçòöýÿ:ÿÿÿÿÿÿÿÿÿÿÿýûùøðíëéÛÙ×ÑÌËÉÅGÿÿÿÿ��ÿÿÿÿLAoŒ’“•–¹º«:²ç÷öüÿ^LÿÿÿÿÿÿÿÿÿÿýûùøðñëèÞÙØÑÌËÉ‚Kÿÿÿÿ��ÿÿÿÿÿVp’”•–¹»k®Óˆç÷öüÿÿÿÿÿÿÿÿÿÿÿÿýûúôðíêéÛÙ×ÐÌ˯ÿÿÿÿÿ��ÿÿÿÿÿ AjlŒ•¹º?=íߨçòööù [ÿÿÿÿÿÿÿÿÿÿýûùôñíëèÛÙ×ÐÌÉS^ÿÿÿÿÿ��ÿÿÿÿÿÿ['WW ~ðϨåá©[K=ÿÿÿÿÿÿÿÿÿÿÿýúùðñëêèÛØÒÐÌ}Lÿÿÿÿÿÿ��ÿÿÿÿÿÿÿ@I}XS=:¶ñß>T;[ÿÿÿÿÿÿÿÿÿÿÿýûùøðíëêèÚØÒЉ;ÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿ:<:±ÎÎÓëíñÏ^J\®ÿÿÿÿÿÿÿÿÿÿÿÿÿýýúøôðíêèÛÙØÒ¦9ÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿ9� ‚³}X®ëîóóôúþþÿÿÿÿÿÿÿÿÿÿÿýýúùôðíëêèÛÙÒ¬ÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿ: S: ¬ìðîßµµâýÿÿÿÿÿÿÿÿÿýýúùøóñíêèèÚ׊ÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿ;W'\ˆTJóüýýÿÿÿýýýûúùøóðíêêèÛÑ}:ÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿK 'ŽZ!!=îúûýûýýûûúùùøóîíêêéÞ³J@ÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿ\g•«ªk>ˆÏ®L©øúúùùùùøôððíìêê΀\ÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJW'>Üì\àùøøøôóôîíííêÒ§@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>\ÏÎUWßóóðððñîíìÞ¶€:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=?!IêîîîîíéÓ³€= >^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿL: 9~€ˆ€\L>9Kÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@: 9=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��ÿÿÿ€ÿÿüÿÿø��ÿüÿÿà��ÿüÿÿ€��ÿüÿþ���ÿüÿø����üÿð����?üÿà����üÿÀ����üÿ€����üÿ�����üþ�����üü������üø������|ø������|ð������<ð������<à������à������À������ À������ À������ €������€������€������€�������������������������������������������������������������������������������������������������������€�������€��à��€��ø��€���ü��À��þ�� À��þ�� À��ÿ�� à��ÿ��à��ÿ��ð��'ÿ��<ð��#ÿ��<ø��3ÿ��|ø��ÿ��|ü��ÿ��üþ��þ�üÿ��ü�üÿ€�?ø�üÿÀ�ð�üÿà�€�üÿð����?üÿø����üÿþ���ÿüÿÿ���ÿüÿÿà��ÿüÿÿø��ÿüÿÿÿ€ÿÿü(������@������������ �� ��������<,,�=2+�:;)�=D,�<I,�>Q.�B<,�I3,�M</�C53�G;7�K94�M><�R?9�BC.�EL2�JG8�MJ4�C\2�KS5�K\7�TA<�PN7�SL;�\E6�[D:�XJ:�QR=�R\;�[R<�G`5�Je8�Mj:�Qn<�Ss>�`G8�dJ<�lO>�qR?�OB@�TEC�WIG�WJI�\IE�[MJ�[eD�YjB�_lH�WyA�[uC�Y|B�dNC�bRA�bSO�c[K�jVN�hZL�eWU�fXV�l[T�uVC�t[L�yWB�}[E�{[I�hfU�nc]�etN�c|K�jwV�nY�`N�pi^�{aU�qx]�rda�ujd�tih�|nd�}ni�vqh�{qo�|yo�~tr�]€D�a…G�e†J�e‹J�hM�n…W�m€X�j’N�n•R�p€Z�qšT�wb�l�z¥]�¦d�ªb�ƒ^G�‹dJ�‚fV�€i]�ŠeP�iP�ŠkX�’jN�’mU�“nX�™nQ�•pV�’p\�rS�‚mc�†vm�ˆ~y�”ud�•zj�š{g�£vV� wY�¦yW�¦zZ�¨yW�«|Z�§}a�|�˜t�™…z�‚«f�‡°k�‰²m�µs�•»{�˜¾�®_�®a�¬„h�£Š~�±…e�´Šl�¶Žq�¸q�¶‘w�¹‘t�»–z�¾™}�Ž„„�”ˆ‚�“Œ‰�”ƒ�–¥†� “�ª‘�©–‹�¦˜‘�¬–�²—…�¶˜…�µ™ˆ�¸—�¾›�·¦œ�¿¦–�½¨š�­£ �¿¯¦�²±©�¿°¨�¹¾¯�œÂ„�¡ÅŠ�¥ÈŽ�®Å�©Ì“�­Î˜�°Ï›�»É®�¶Ó£�»Öª�½Ù¬�Àž†�ãŒ�Ǩ“�É«•�˯›�ͱœ�ʲ£�÷²�ļ¹�È»³�ж£�Ò¹¦�Ô¼«�Åܶ�ÈÓ¾�ÈÞ»�×À¯�×Á°�ÙÄ´�ÛǸ�Ýʼ�ÐÊÉ�ßÎÁ�Ó×Ì�ÝÒÊ�Þ×Ô�ÍâÀ�ÔåÉ�ÞëÕ�àÏÁ�âÒÆ�äÖÊ�æØÎ�èÚÏ�àÖÐ�äÙÒ�àÚØ�éÝÓ�àî×�âîÚ�ëà×�íãÛ�ïçà�íôç�ñêå�óíé�õñî�÷òð�öûò�ùõô�������������������������������������������������������������������������������������������������èèèèèèèèèèè' èèèèèèèèèèè�èèèèèèèèè($?kxx|qeed$(èèèèèèèèè�èèèèèèè($k|}}}}}n&xn%(èèèèèèè�èèèèèèe|}}}|}}}}d$ekdèèèèèè�èèèèè#k}}}}}}}|}}}&&kèèèèè�èèèèq}}}}}}}}}}}}|eèèèè�èèèk}}}}}}|}}}}}}|#kèèè�èè)?}}}}}}}}}}}}}x&ld(èè�èè$|}}}}}}}}}}}}x " $|$èè�è(e}}}}}}{{ˆ}ŒŒyTT2""  xe(è�èx}}}}}}ˆ‰‰Š‘jWWWTTT"" >|$è�è>}}|}}}l<If3.^\[[WTT""&}?(� k}}|}‰h1X1Ig .^^[WUU!x}k � n}}}}<VaD7Ÿš€r6666884plx}|q�x}}Œ@^ac-‹Áȼº¼»¹Ÿ¡“‘}}z�x}Œl\bcƒY6;,¥ÓÊÌÉÈÂÀ»¹¶’Œ}z�z}{Va‚ƒ…†…^9§ÖÖÕÔÓÉÇÁº¸¶’‰x� xŒma‚„…‡«¬¯ßßßÛÖÔÊÇÀº¸¢‘Œ|� qŒ=D‚ƒ…†«­°³®JÏåãâßÛÕÉÇÀ¹¶’y� l4\‚„†«­°´ÃЗ”èçåãßÛÓÉ»¸¢‘m�è@=W„…‡¬°´ÅÑÒª)èèèåâßÖÊÇÀ¹¶’d)�è3ŽuCƒ‡˜­³ÃÑÝÍMèèèèçäàÛÔÉÁ¹·3è�è(j=D„†¬±µÅÒá–èèèèèèçãÛÔɺ·w(è�èè .‚„†¬˜˜ÃÜæQèèèèèèçãÛÕÉ»·7èè�èè(.‚…‡¬FLRÒæè(èèèèèçãßÔÉ»v)èè�èèè C]_H½P˨S*èèèèèåâÛÔÉž,èèè�èèèè +;sÎtQMèèèèèèçäàÛÓȤ7èèèè�èèèèè�+NL¿Õ¾ËèèèèèççâÛÕÊ¥;èèèèè�èèèèèè ZAB:ÚåçççãâßÙÊ›9èèèèèè�èèèèèèè'(YEL™K¦åãââßÕ§s,èèèèèèè�èèèèèèèèè ;:•ÚÙοœO,èèèèèèèèè�èèèèèèèèèèè' �,KK9*(èèèèèèèèèèè�ÿàþÿ€þþ��þü��~ø��>ð��à��À��À��€��€��€���������������������������������€�€�à�€à€ðÀðÀðàððàøÀ>ü��~þ��þÿ€þÿàþ(������0���������@�� �� ��������?K-�?W0�G>.�J:.�C63�P><�ED.�FJ0�LF:�MI3�DP2�C\3�NR5�RI=�YI6�XH?�WU:�RZ9�Hb6�Kg9�Mi:�Ta;�Qo<�Yd>�Rq=�cK>�mO=�fQ<�iP<�RCB�YGA�]KD�]MI�UPD�V[C�^SM�\^A�\lB�Vw@�[sC�\|C�dMB�jO@�cRM�nQA�k^E�nYJ�bTS�e[W�hZW�rTB�vYF�v^J�|[E�^I�p_R�faN�d|J�gqR�wcL�vn\�yh_�ss]�tfb�vkd�{me�}ok�wxd�}tm�z{h�_„F�aƒG�d„J�fŽK�hˆM�l‚T�mŠS�j“N�n™Q�sƒ^�p“V�w•^�užY�zœ_�y¤\�~£c�^F�‚_H�…aJ�‰cJ�hM�dT�„iY�ŠjT�‰oZ�Žq_�“jO�“lR�™nQ�q_�rS�œw_�…mb�‰te�zu�{�“vd�Ÿ|d�£vU�¡w[�¥xV�«|Z�¨~`�‚p�–‚t�“ƒ|�œ…t�œ…x�›ˆ{�‚­f�‡±l�гo�Œ³q�²x�”¶|�¹v�“ºz�­‚b�­†l�²†g�µ‹l�¶Žq�¹’v�¼˜~�”‰‡�’‘†�‘‡�ž”Ž�£Ž‚�¤•Ž�®˜Š�¢š˜�¨”�³”€�¾›�¤­—�¡º�¯¥£�®½ �Â…�¥ÈŽ�§Ê�©Ë“�­Í˜�·Ô¥�¹Ô§�Áž…�âŠ�ǧ�Ä©˜�Ë®˜�β�Áº¹�ж£�Ô¼ª�Àƶ�λ�ÄÜ´�ÇÞ¸�Êß¼�Õ´�Ùó�ÛǸ�Ýʼ�ÒÒÌ�ÒÜÊ�ÛÔÑ�ØèÎ�ÜâÕ�ÛêÑ�âÒÅ�äÕÉ�çÚÏ�èÚÏ�æÚÑ�êÞÔ�âäÝ�àìØ�íãÜ�ïçà�ñêä�ôîë�öñï�÷óñ�ûø÷�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÃÃÃÃÃÃÃÃ)2,*ÃÃÃÃÃÃÃÃ�ÃÃÃÃÃÃ)5bnooYXV)ÃÃÃÃÃÃ�ÃÃÃÃ3looooo`VY3+ÃÃÃÃ�ÃÃÃVooooooooZ�3)ÃÃÃ�Ãà Woooooooooo �5 ÃÃ�ÃÃ2ooooooooooY  �53ÃÃ�Ã)dooooooooo6  bÃ�Ã3ooooooo‚aHF(Z6Ã�aooooa4-3c3GNMIG( 5`�)looo6H%7f%H99(ll)�noo4%TJgŸrŒsittgj€oo,�2oX%TwQ<=s­´¬«¤¡ž…ƒo2�2oeTwy|{O†¹¸µ´¬¤¡…‚2�]9U}~•—™O°¾¼¹µ¬¤ „�o;Px|•˜›¨‘ÂÁ¾¹´¬£ž…)�e_Lz~–𝱛1Ãþ·­ª œe�Ã[cK}•™§³²hÃÃÃÿ¹´«¡\Ã�Ã$U}•’”³®/ÃÃÃÃÀ¼´¬¡+Ã�ÃÃ"Sz|Eh¯½/ÃÃÃÃÀ¼´¬¡fÃÃ�Ãà 8>މ‡DÃÃÃÃÿ¼´¤t+ÃÃ�ÃÃÃBˆ¦“¢ÃÃÃÃÁ¼·­Š+ÃÃÃ�ÃÃÃÃ:C+†°ÁÁÀ¾¹ªs/ÃÃÃÃ�ÃÃÃÃÃÃ!"@@D¼¼¸¦‹?ÃÃÃÃÃÃ�ÃÃÃÃÃÃÃà †iB0ÃÃÃÃÃÃÃÃ�ÿþ�ü�~�ð��à��À��À��€��€������������������������������� ��€�€�À�À>�à<�ð��ü�~�ÿþ�(������(����������� �� ��������?W0�M==�AL.�MG1�LK2�CS1�C]3�L]7�RC2�PC?�]O8�ZU>�Id7�Je8�Nk;�Pd:�Ts>�bI8�gR;�iT=�pS?�REC�TJD�]LD�^PA�_VK�_^L�\aJ�Yq@�Z}B�aLE�aOH�gPE�dPH�kQE�nUH�mX@�eUP�m^[�uVC�wXF�yWB�{ZF�|\H�ddC�akC�l`D�jlI�n`]�cvL�ksM�h{N�yeK�saZ�unT�z`T�{iS�wf`�{rc�}pk�~ya�|qp�`…F�e†J�eŒJ�m€R�lŽR�l”Q�r€Y�s›W�}¨b�ƒ_H�‡bI�ŒfK�ŽhM�‡kT�„k^�€x_�’jO�•nR�˜nQ�’qY�šqT�ŸvY�‹zm�€vu�~p�Šzt�˜va�£vU�¢wY�¦xW�¤z\�«|Z� z`�…‚q�‡€|�…Ÿo�‡w�Ÿ‡y�‚¢i�‚­f�†¯l�Ѝs�µs�”¹z�˜¾�£‚l�¨Ž~�°ƒb�²‰j�±‹p�¹’v�½—|�†�“‰‡�œŒ…�–‹�”Ÿ„�’Œ�šš�¤œ•�¿œ‚�¢º�¼¥–�¹§›�¬«¢�¶©¢�œÂƒ�£ÇŒ�¥ÈŽ�¯Ïš�µÓ¢�ãŒ�Ç©”�É©“�Ë­™�Ͳ�Ì¿¶�ж¢�Ô¼«�Âη�Ê¿�ÂѶ�ÈÞº�×À®�Ö³�ÛÆ¸�ÝÊ»�Ëá¾�ßÍÀ�ÚàÓ�ÞëÕ�àÏÂ�âÑÄ�äÕË�çÙÎ�çÝÖ�èÛÑ�äëÞ�íãÜ�æáà�ïæà�ñéã�õïë�öñî�÷óñ�øôò�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������¨¨¨¨¨¨"**'"¨¨¨¨¨¨�¨¨¨¨*P[]])HG!¨¨¨¨�¨¨¨ N]]]]]R) ¨¨¨�¨¨ P]]]]][]I#¨¨�¨¨J]][]]]]['G¨�¨(]]]]]m]Z ++¨�N]]]]Z\nK@> N�"Y]]R. 7 @C@>Y"�(]]O,B3bcT<<M68Q[[*�*]S,Ee3WW’“’Œˆ…qn]*�+]4Behia_›ž›”’‰…pm+�*\/Fh€‚„vޤ ž™Œˆzn*�#S2fi„•`¨¥£œ“‹…o#�X6f€ƒ•˜¨¨¨¥ ™Œ‡k�¨Ah€{„ŸU¨¨¨§¢›Œ†L¨�¨¨1dg_y—=¨¨¨§¢šŒl%¨�¨¨ ;yu¨¨¨¨¥™}5¨¨�¨¨¨_ws¡¨¨¦£œ}9¨¨¨�¨¨¨¨;r¢£Št0¨¨¨¨�¨¨¨¨¨¨wwW0¨¨¨¨¨¨�üà�ðà�à�à�À�`�À� �€� �������������������������� ���p��€p �Àp �Àð`�à`à�ðà�üà�(������ ������������ �� ��������@U0�EP0�C^3�IY5�RC?�TK4�QS5�YT8�_P9�Ie7�Qo<�Tq>�Uw?�bL9�gS<�b^>�rS?�TMB�UYC�\PK�]QL�nSD�sTB�pTF�qVF�rUE�rWH�tWI�uXG�uXH�~\F�{\I�x]O�x^Q�jbK�hhH�knW�e|I�iuM�k~M�kqP�weN�ycI�zgJ�jM�ufW�re[�qS�p|T�ulc�{uo�_…F�b†H�fK�mQ�sˆZ�u˜[�z˜`�{¢`�€^I�‚`J�ƒ`J�„aJ�…aJ�„bH�„bN�kO�ˆcK�‰dL�…dP�‹qU�Žs\�‘jO�‘nR�•mQ�’r\�qS�uW�œuX�€ka�€}d�Œuh�Œ|u�‘}s�’u� tT�¡uU�¢vU�£vU�¤wV�§yW�¦yY�¨zY�ª{Y�«|Y�«|Z�¬|Y�¬}Z�¬}[�­~\�…‹q�Œˆ{�†œo�‚¥h�ƒ®g�·t�’³{�¸v�˜¿�¯_�¥ˆv�°‚`�´Šk�¸s�¹“w�¸–}�“…€�™“�¡˜”�¢™•�§›–�¥œ�»™„�®£š�®¡œ�¨¿–�¬¨£�·²¬�µ¸«�œÂ„�ŸÄ‡�°Ð›�°Á �µÓ¡�Àž†�Á¥“�Æ®œ�ɪ•�γž�ĵ¬�ȱ¡�È´§�ϳ �̸ª�Ó¹¦�ÆÎ½�ÓÀ³�×À°�ÚÄ´�Þ˽�×ËÃ�ÍâÁ�ØåÏ�áÑÄ�âÑÄ�ãÓÇ�äÕÉ�èÞ×�êÞÔ�ìâÚ�íâÚ�ïæß�ëåâ�ðèâ�ñèã�õîê�öñî�öñï�÷ñî�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������©©©©©;?©©©©©�©©©JZ^] ©©©�©©V``^`V©©�©V``^^`L�©�©HbbbcoM ?©�YbZIBK)454 ?�;bY+%&Q-//&#*V;�CbB6:PTŒ‡zqmC�DN'hkjd–ž›”ІpD�AF8i‚…„¦¢œ“‰rE� G9lƒ—‘2©¦ •Žs!�©"g}˜~©©©£šn©�©7fe€u©©©£šˆO©�©©.{wy©©¦ ’S©©�©©©$1w¢¥‹R©©©�©©©©©x|t©©©©©�ø>��à��À��€��€�����������������������€��Â��Â��Á†��à��ø>��������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/getopt.h�������������������������������������������������������������0000644�0000000�0000000�00000000407�11722777314�016515� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* declarations for getopt and envargs */ extern int pgis_opterr; extern int pgis_optind; extern int pgis_optopt; extern char *pgis_optarg; extern int pgis_getopt(int argc, char **argv, char *opts); extern void envargs(int *pargc, char ***pargv, char *envstr); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/po/������������������������������������������������������������������0000755�0000000�0000000�00000000000�12315456226�015452� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/dbfopen.c������������������������������������������������������������0000644�0000000�0000000�00000233565�11722777314�016640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/****************************************************************************** * $Id: dbfopen.c 9324 2012-02-27 22:08:12Z pramsey $ * * Project: Shapelib * Purpose: Implementation of .dbf access API documented in dbf_api.html. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * 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 or substantial portions of the 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. ****************************************************************************** * * $Log: dbfopen.c,v $ * Revision 1.89 2011-07-24 05:59:25 fwarmerdam * minimize use of CPLError in favor of SAHooks.Error() * * Revision 1.88 2011-05-13 17:35:17 fwarmerdam * added DBFReorderFields() and DBFAlterFields() functions (from Even) * * Revision 1.87 2011-05-07 22:41:02 fwarmerdam * ensure pending record is flushed when adding a native field (GDAL #4073) * * Revision 1.86 2011-04-17 15:15:29 fwarmerdam * Removed unused variable. * * Revision 1.85 2010-12-06 16:09:34 fwarmerdam * fix buffer read overrun fetching code page (bug 2276) * * Revision 1.84 2009-10-29 19:59:48 fwarmerdam * avoid crash on truncated header (gdal #3093) * * Revision 1.83 2008/11/12 14:28:15 fwarmerdam * DBFCreateField() now works on files with records * * Revision 1.82 2008/11/11 17:47:09 fwarmerdam * added DBFDeleteField() function * * Revision 1.81 2008/01/03 17:48:13 bram * in DBFCreate, use default code page LDID/87 (= 0x57, ANSI) * instead of LDID/3. This seems to be the same as what ESRI * would be doing by default. * * Revision 1.80 2007/12/30 14:36:39 fwarmerdam * avoid syntax issue with last comment. * * Revision 1.79 2007/12/30 14:35:48 fwarmerdam * Avoid char* / unsigned char* warnings. * * Revision 1.78 2007/12/18 18:28:07 bram * - create hook for client specific atof (bugzilla ticket 1615) * - check for NULL handle before closing cpCPG file, and close after reading. * * Revision 1.77 2007/12/15 20:25:21 bram * dbfopen.c now reads the Code Page information from the DBF file, and exports * this information as a string through the DBFGetCodePage function. This is * either the number from the LDID header field ("LDID/<number>") or as the * content of an accompanying .CPG file. When creating a DBF file, the code can * be set using DBFCreateEx. * * Revision 1.76 2007/12/12 22:21:32 bram * DBFClose: check for NULL psDBF handle before trying to close it. * * Revision 1.75 2007/12/06 13:58:19 fwarmerdam * make sure file offset calculations are done in as SAOffset * * Revision 1.74 2007/12/06 07:00:25 fwarmerdam * dbfopen now using SAHooks for fileio * * Revision 1.73 2007/09/03 19:48:11 fwarmerdam * move DBFReadAttribute() static dDoubleField into dbfinfo * * Revision 1.72 2007/09/03 19:34:06 fwarmerdam * Avoid use of static tuple buffer in DBFReadTuple() * * Revision 1.71 2006/06/22 14:37:18 fwarmerdam * avoid memory leak if dbfopen fread fails * * Revision 1.70 2006/06/17 17:47:05 fwarmerdam * use calloc() for dbfinfo in DBFCreate * * Revision 1.69 2006/06/17 15:34:32 fwarmerdam * disallow creating fields wider than 255 * * Revision 1.68 2006/06/17 15:12:40 fwarmerdam * Fixed C++ style comments. * * Revision 1.67 2006/06/17 00:24:53 fwarmerdam * Don't treat non-zero decimals values as high order byte for length * for strings. It causes serious corruption for some files. * http://bugzilla.remotesensing.org/show_bug.cgi?id=1202 * * Revision 1.66 2006/03/29 18:26:20 fwarmerdam * fixed bug with size of pachfieldtype in dbfcloneempty * * Revision 1.65 2006/02/15 01:14:30 fwarmerdam * added DBFAddNativeFieldType * * Revision 1.64 2006/02/09 00:29:04 fwarmerdam * Changed to put spaces into string fields that are NULL as * per http://bugzilla.maptools.org/show_bug.cgi?id=316. * * Revision 1.63 2006/01/25 15:35:43 fwarmerdam * check success on DBFFlushRecord * * Revision 1.62 2006/01/10 16:28:03 fwarmerdam * Fixed typo in CPLError. * * Revision 1.61 2006/01/10 16:26:29 fwarmerdam * Push loading record buffer into DBFLoadRecord. * Implement CPL error reporting if USE_CPL defined. * * Revision 1.60 2006/01/05 01:27:27 fwarmerdam * added dbf deletion mark/fetch * * Revision 1.59 2005/03/14 15:20:28 fwarmerdam * Fixed last change. * * Revision 1.58 2005/03/14 15:18:54 fwarmerdam * Treat very wide fields with no decimals as double. This is * more than 32bit integer fields. * * Revision 1.57 2005/02/10 20:16:54 fwarmerdam * Make the pszStringField buffer for DBFReadAttribute() static char [256] * as per bug 306. * * Revision 1.56 2005/02/10 20:07:56 fwarmerdam * Fixed bug 305 in DBFCloneEmpty() - header length problem. * * Revision 1.55 2004/09/26 20:23:46 fwarmerdam * avoid warnings with rcsid and signed/unsigned stuff * * Revision 1.54 2004/09/15 16:26:10 fwarmerdam * Treat all blank numeric fields as null too. */ #include "shapefil.h" #include <math.h> #include <stdlib.h> #include <ctype.h> #include <string.h> SHP_CVSID("$Id: dbfopen.c 9324 2012-02-27 22:08:12Z pramsey $") #ifndef FALSE # define FALSE 0 # define TRUE 1 #endif /************************************************************************/ /* SfRealloc() */ /* */ /* A realloc cover function that will access a NULL pointer as */ /* a valid input. */ /************************************************************************/ static void * SfRealloc( void * pMem, int nNewSize ) { if( pMem == NULL ) return( (void *) malloc(nNewSize) ); else return( (void *) realloc(pMem,nNewSize) ); } /************************************************************************/ /* DBFWriteHeader() */ /* */ /* This is called to write out the file header, and field */ /* descriptions before writing any actual data records. This */ /* also computes all the DBFDataSet field offset/size/decimals */ /* and so forth values. */ /************************************************************************/ static void DBFWriteHeader(DBFHandle psDBF) { unsigned char abyHeader[XBASE_FLDHDR_SZ]; int i; if( !psDBF->bNoHeader ) return; psDBF->bNoHeader = FALSE; /* -------------------------------------------------------------------- */ /* Initialize the file header information. */ /* -------------------------------------------------------------------- */ for( i = 0; i < XBASE_FLDHDR_SZ; i++ ) abyHeader[i] = 0; abyHeader[0] = 0x03; /* memo field? - just copying */ /* write out a dummy date */ abyHeader[1] = 95; /* YY */ abyHeader[2] = 7; /* MM */ abyHeader[3] = 26; /* DD */ /* record count preset at zero */ abyHeader[8] = (unsigned char) (psDBF->nHeaderLength % 256); abyHeader[9] = (unsigned char) (psDBF->nHeaderLength / 256); abyHeader[10] = (unsigned char) (psDBF->nRecordLength % 256); abyHeader[11] = (unsigned char) (psDBF->nRecordLength / 256); abyHeader[29] = (unsigned char) (psDBF->iLanguageDriver); /* -------------------------------------------------------------------- */ /* Write the initial 32 byte file header, and all the field */ /* descriptions. */ /* -------------------------------------------------------------------- */ psDBF->sHooks.FSeek( psDBF->fp, 0, 0 ); psDBF->sHooks.FWrite( abyHeader, XBASE_FLDHDR_SZ, 1, psDBF->fp ); psDBF->sHooks.FWrite( psDBF->pszHeader, XBASE_FLDHDR_SZ, psDBF->nFields, psDBF->fp ); /* -------------------------------------------------------------------- */ /* Write out the newline character if there is room for it. */ /* -------------------------------------------------------------------- */ if( psDBF->nHeaderLength > 32*psDBF->nFields + 32 ) { char cNewline; cNewline = 0x0d; psDBF->sHooks.FWrite( &cNewline, 1, 1, psDBF->fp ); } } /************************************************************************/ /* DBFFlushRecord() */ /* */ /* Write out the current record if there is one. */ /************************************************************************/ static int DBFFlushRecord( DBFHandle psDBF ) { SAOffset nRecordOffset; if( psDBF->bCurrentRecordModified && psDBF->nCurrentRecord > -1 ) { psDBF->bCurrentRecordModified = FALSE; nRecordOffset = psDBF->nRecordLength * (SAOffset) psDBF->nCurrentRecord + psDBF->nHeaderLength; if( psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ) != 0 || psDBF->sHooks.FWrite( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ) != 1 ) { char szMessage[128]; sprintf( szMessage, "Failure writing DBF record %d.", psDBF->nCurrentRecord ); psDBF->sHooks.Error( szMessage ); return FALSE; } } return TRUE; } /************************************************************************/ /* DBFLoadRecord() */ /************************************************************************/ static int DBFLoadRecord( DBFHandle psDBF, int iRecord ) { if( psDBF->nCurrentRecord != iRecord ) { SAOffset nRecordOffset; if( !DBFFlushRecord( psDBF ) ) return FALSE; nRecordOffset = psDBF->nRecordLength * (SAOffset) iRecord + psDBF->nHeaderLength; if( psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, SEEK_SET ) != 0 ) { char szMessage[128]; sprintf( szMessage, "fseek(%ld) failed on DBF file.\n", (long) nRecordOffset ); psDBF->sHooks.Error( szMessage ); return FALSE; } if( psDBF->sHooks.FRead( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ) != 1 ) { char szMessage[128]; sprintf( szMessage, "fread(%d) failed on DBF file.\n", psDBF->nRecordLength ); psDBF->sHooks.Error( szMessage ); return FALSE; } psDBF->nCurrentRecord = iRecord; } return TRUE; } /************************************************************************/ /* DBFUpdateHeader() */ /************************************************************************/ void SHPAPI_CALL DBFUpdateHeader( DBFHandle psDBF ) { unsigned char abyFileHeader[32]; if( psDBF->bNoHeader ) DBFWriteHeader( psDBF ); DBFFlushRecord( psDBF ); psDBF->sHooks.FSeek( psDBF->fp, 0, 0 ); psDBF->sHooks.FRead( abyFileHeader, 32, 1, psDBF->fp ); abyFileHeader[4] = (unsigned char) (psDBF->nRecords % 256); abyFileHeader[5] = (unsigned char) ((psDBF->nRecords/256) % 256); abyFileHeader[6] = (unsigned char) ((psDBF->nRecords/(256*256)) % 256); abyFileHeader[7] = (unsigned char) ((psDBF->nRecords/(256*256*256)) % 256); psDBF->sHooks.FSeek( psDBF->fp, 0, 0 ); psDBF->sHooks.FWrite( abyFileHeader, 32, 1, psDBF->fp ); psDBF->sHooks.FFlush( psDBF->fp ); } /************************************************************************/ /* DBFOpen() */ /* */ /* Open a .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFOpen( const char * pszFilename, const char * pszAccess ) { SAHooks sHooks; SASetupDefaultHooks( &sHooks ); return DBFOpenLL( pszFilename, pszAccess, &sHooks ); } /************************************************************************/ /* DBFOpen() */ /* */ /* Open a .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFOpenLL( const char * pszFilename, const char * pszAccess, SAHooks *psHooks ) { DBFHandle psDBF; SAFile pfCPG; unsigned char *pabyBuf; int nFields, nHeadLen, iField, i; char *pszBasename, *pszFullname; int nBufSize = 500; /* -------------------------------------------------------------------- */ /* We only allow the access strings "rb" and "r+". */ /* -------------------------------------------------------------------- */ if( strcmp(pszAccess,"r") != 0 && strcmp(pszAccess,"r+") != 0 && strcmp(pszAccess,"rb") != 0 && strcmp(pszAccess,"rb+") != 0 && strcmp(pszAccess,"r+b") != 0 ) return( NULL ); if( strcmp(pszAccess,"r") == 0 ) pszAccess = "rb"; if( strcmp(pszAccess,"r+") == 0 ) pszAccess = "rb+"; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszFilename)+5); strcpy( pszBasename, pszFilename ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.dbf", pszBasename ); psDBF = (DBFHandle) calloc( 1, sizeof(DBFInfo) ); psDBF->fp = psHooks->FOpen( pszFullname, pszAccess ); memcpy( &(psDBF->sHooks), psHooks, sizeof(SAHooks) ); if( psDBF->fp == NULL ) { sprintf( pszFullname, "%s.DBF", pszBasename ); psDBF->fp = psDBF->sHooks.FOpen(pszFullname, pszAccess ); } sprintf( pszFullname, "%s.cpg", pszBasename ); pfCPG = psHooks->FOpen( pszFullname, "r" ); if( pfCPG == NULL ) { sprintf( pszFullname, "%s.CPG", pszBasename ); pfCPG = psHooks->FOpen( pszFullname, "r" ); } free( pszBasename ); free( pszFullname ); if( psDBF->fp == NULL ) { free( psDBF ); if( pfCPG ) psHooks->FClose( pfCPG ); return( NULL ); } psDBF->bNoHeader = FALSE; psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; /* -------------------------------------------------------------------- */ /* Read Table Header info */ /* -------------------------------------------------------------------- */ pabyBuf = (unsigned char *) malloc(nBufSize); if( psDBF->sHooks.FRead( pabyBuf, 32, 1, psDBF->fp ) != 1 ) { psDBF->sHooks.FClose( psDBF->fp ); if( pfCPG ) psDBF->sHooks.FClose( pfCPG ); free( pabyBuf ); free( psDBF ); return NULL; } psDBF->nRecords = pabyBuf[4] + pabyBuf[5]*256 + pabyBuf[6]*256*256 + pabyBuf[7]*256*256*256; psDBF->nHeaderLength = nHeadLen = pabyBuf[8] + pabyBuf[9]*256; psDBF->nRecordLength = pabyBuf[10] + pabyBuf[11]*256; psDBF->iLanguageDriver = pabyBuf[29]; if (nHeadLen < 32) { psDBF->sHooks.FClose( psDBF->fp ); if( pfCPG ) psDBF->sHooks.FClose( pfCPG ); free( pabyBuf ); free( psDBF ); return NULL; } psDBF->nFields = nFields = (nHeadLen - 32) / 32; psDBF->pszCurrentRecord = (char *) malloc(psDBF->nRecordLength); /* -------------------------------------------------------------------- */ /* Figure out the code page from the LDID and CPG */ /* -------------------------------------------------------------------- */ psDBF->pszCodePage = NULL; if( pfCPG ) { size_t n; memset( pabyBuf, 0, nBufSize); psDBF->sHooks.FRead( pabyBuf, nBufSize - 1, 1, pfCPG ); n = strcspn( (char *) pabyBuf, "\n\r" ); if( n > 0 ) { pabyBuf[n] = '\0'; psDBF->pszCodePage = (char *) malloc(n + 1); memcpy( psDBF->pszCodePage, pabyBuf, n + 1 ); } psDBF->sHooks.FClose( pfCPG ); } if( psDBF->pszCodePage == NULL && pabyBuf[29] != 0 ) { sprintf( (char *) pabyBuf, "LDID/%d", psDBF->iLanguageDriver ); psDBF->pszCodePage = (char *) malloc(strlen((char*)pabyBuf) + 1); strcpy( psDBF->pszCodePage, (char *) pabyBuf ); } /* -------------------------------------------------------------------- */ /* Read in Field Definitions */ /* -------------------------------------------------------------------- */ pabyBuf = (unsigned char *) SfRealloc(pabyBuf,nHeadLen); psDBF->pszHeader = (char *) pabyBuf; psDBF->sHooks.FSeek( psDBF->fp, 32, 0 ); if( psDBF->sHooks.FRead( pabyBuf, nHeadLen-32, 1, psDBF->fp ) != 1 ) { psDBF->sHooks.FClose( psDBF->fp ); free( pabyBuf ); free( psDBF->pszCurrentRecord ); free( psDBF ); return NULL; } psDBF->panFieldOffset = (int *) malloc(sizeof(int) * nFields); psDBF->panFieldSize = (int *) malloc(sizeof(int) * nFields); psDBF->panFieldDecimals = (int *) malloc(sizeof(int) * nFields); psDBF->pachFieldType = (char *) malloc(sizeof(char) * nFields); for( iField = 0; iField < nFields; iField++ ) { unsigned char *pabyFInfo; pabyFInfo = pabyBuf+iField*32; if( pabyFInfo[11] == 'N' || pabyFInfo[11] == 'F' ) { psDBF->panFieldSize[iField] = pabyFInfo[16]; psDBF->panFieldDecimals[iField] = pabyFInfo[17]; } else { psDBF->panFieldSize[iField] = pabyFInfo[16]; psDBF->panFieldDecimals[iField] = 0; /* ** The following seemed to be used sometimes to handle files with long ** string fields, but in other cases (such as bug 1202) the decimals field ** just seems to indicate some sort of preferred formatting, not very ** wide fields. So I have disabled this code. FrankW. psDBF->panFieldSize[iField] = pabyFInfo[16] + pabyFInfo[17]*256; psDBF->panFieldDecimals[iField] = 0; */ } psDBF->pachFieldType[iField] = (char) pabyFInfo[11]; if( iField == 0 ) psDBF->panFieldOffset[iField] = 1; else psDBF->panFieldOffset[iField] = psDBF->panFieldOffset[iField-1] + psDBF->panFieldSize[iField-1]; } return( psDBF ); } /************************************************************************/ /* DBFClose() */ /************************************************************************/ void SHPAPI_CALL DBFClose(DBFHandle psDBF) { if( psDBF == NULL ) return; /* -------------------------------------------------------------------- */ /* Write out header if not already written. */ /* -------------------------------------------------------------------- */ if( psDBF->bNoHeader ) DBFWriteHeader( psDBF ); DBFFlushRecord( psDBF ); /* -------------------------------------------------------------------- */ /* Update last access date, and number of records if we have */ /* write access. */ /* -------------------------------------------------------------------- */ if( psDBF->bUpdated ) DBFUpdateHeader( psDBF ); /* -------------------------------------------------------------------- */ /* Close, and free resources. */ /* -------------------------------------------------------------------- */ psDBF->sHooks.FClose( psDBF->fp ); if( psDBF->panFieldOffset != NULL ) { free( psDBF->panFieldOffset ); free( psDBF->panFieldSize ); free( psDBF->panFieldDecimals ); free( psDBF->pachFieldType ); } if( psDBF->pszWorkField != NULL ) free( psDBF->pszWorkField ); free( psDBF->pszHeader ); free( psDBF->pszCurrentRecord ); free( psDBF->pszCodePage ); free( psDBF ); } /************************************************************************/ /* DBFCreate() */ /* */ /* Create a new .dbf file with default code page LDID/87 (0x57) */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCreate( const char * pszFilename ) { return DBFCreateEx( pszFilename, "LDID/87" ); // 0x57 } /************************************************************************/ /* DBFCreateEx() */ /* */ /* Create a new .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCreateEx( const char * pszFilename, const char* pszCodePage ) { SAHooks sHooks; SASetupDefaultHooks( &sHooks ); return DBFCreateLL( pszFilename, pszCodePage , &sHooks ); } /************************************************************************/ /* DBFCreate() */ /* */ /* Create a new .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCreateLL( const char * pszFilename, const char * pszCodePage, SAHooks *psHooks ) { DBFHandle psDBF; SAFile fp; char *pszFullname, *pszBasename; int i, ldid = -1; char chZero = '\0'; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszFilename)+5); strcpy( pszBasename, pszFilename ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.dbf", pszBasename ); /* -------------------------------------------------------------------- */ /* Create the file. */ /* -------------------------------------------------------------------- */ fp = psHooks->FOpen( pszFullname, "wb" ); if( fp == NULL ) return( NULL ); psHooks->FWrite( &chZero, 1, 1, fp ); psHooks->FClose( fp ); fp = psHooks->FOpen( pszFullname, "rb+" ); if( fp == NULL ) return( NULL ); sprintf( pszFullname, "%s.cpg", pszBasename ); if( pszCodePage != NULL ) { if( strncmp( pszCodePage, "LDID/", 5 ) == 0 ) { ldid = atoi( pszCodePage + 5 ); if( ldid > 255 ) ldid = -1; // don't use 0 to indicate out of range as LDID/0 is a valid one } if( ldid < 0 ) { SAFile fpCPG = psHooks->FOpen( pszFullname, "w" ); psHooks->FWrite( (char*) pszCodePage, strlen(pszCodePage), 1, fpCPG ); psHooks->FClose( fpCPG ); } } if( pszCodePage == NULL || ldid >= 0 ) { psHooks->Remove( pszFullname ); } free( pszBasename ); free( pszFullname ); /* -------------------------------------------------------------------- */ /* Create the info structure. */ /* -------------------------------------------------------------------- */ psDBF = (DBFHandle) calloc(1,sizeof(DBFInfo)); memcpy( &(psDBF->sHooks), psHooks, sizeof(SAHooks) ); psDBF->fp = fp; psDBF->nRecords = 0; psDBF->nFields = 0; psDBF->nRecordLength = 1; psDBF->nHeaderLength = 33; psDBF->panFieldOffset = NULL; psDBF->panFieldSize = NULL; psDBF->panFieldDecimals = NULL; psDBF->pachFieldType = NULL; psDBF->pszHeader = NULL; psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; psDBF->pszCurrentRecord = NULL; psDBF->bNoHeader = TRUE; psDBF->iLanguageDriver = ldid > 0 ? ldid : 0; psDBF->pszCodePage = NULL; if( pszCodePage ) { psDBF->pszCodePage = (char * ) malloc( strlen(pszCodePage) + 1 ); strcpy( psDBF->pszCodePage, pszCodePage ); } return( psDBF ); } /************************************************************************/ /* DBFAddField() */ /* */ /* Add a field to a newly created .dbf or to an existing one */ /************************************************************************/ int SHPAPI_CALL DBFAddField(DBFHandle psDBF, const char * pszFieldName, DBFFieldType eType, int nWidth, int nDecimals ) { char chNativeType = 'C'; if( eType == FTLogical ) chNativeType = 'L'; else if( eType == FTString ) chNativeType = 'C'; else if( eType == FTDate ) chNativeType = 'D'; else chNativeType = 'N'; return DBFAddNativeFieldType( psDBF, pszFieldName, chNativeType, nWidth, nDecimals ); } /************************************************************************/ /* DBFGetNullCharacter() */ /************************************************************************/ static char DBFGetNullCharacter(char chType) { switch (chType) { case 'N': case 'F': return '*'; case 'D': return '0'; case 'L': return '?'; default: return ' '; } } /************************************************************************/ /* DBFAddField() */ /* */ /* Add a field to a newly created .dbf file before any records */ /* are written. */ /************************************************************************/ int SHPAPI_CALL DBFAddNativeFieldType(DBFHandle psDBF, const char * pszFieldName, char chType, int nWidth, int nDecimals ) { char *pszFInfo; int i; int nOldRecordLength, nOldHeaderLength; char *pszRecord; char chFieldFill; SAOffset nRecordOffset; /* make sure that everything is written in .dbf */ if( !DBFFlushRecord( psDBF ) ) return -1; /* -------------------------------------------------------------------- */ /* Do some checking to ensure we can add records to this file. */ /* -------------------------------------------------------------------- */ if( nWidth < 1 ) return -1; if( nWidth > 255 ) nWidth = 255; nOldRecordLength = psDBF->nRecordLength; nOldHeaderLength = psDBF->nHeaderLength; /* -------------------------------------------------------------------- */ /* SfRealloc all the arrays larger to hold the additional field */ /* information. */ /* -------------------------------------------------------------------- */ psDBF->nFields++; psDBF->panFieldOffset = (int *) SfRealloc( psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); psDBF->panFieldSize = (int *) SfRealloc( psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); psDBF->panFieldDecimals = (int *) SfRealloc( psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); psDBF->pachFieldType = (char *) SfRealloc( psDBF->pachFieldType, sizeof(char) * psDBF->nFields ); /* -------------------------------------------------------------------- */ /* Assign the new field information fields. */ /* -------------------------------------------------------------------- */ psDBF->panFieldOffset[psDBF->nFields-1] = psDBF->nRecordLength; psDBF->nRecordLength += nWidth; psDBF->panFieldSize[psDBF->nFields-1] = nWidth; psDBF->panFieldDecimals[psDBF->nFields-1] = nDecimals; psDBF->pachFieldType[psDBF->nFields-1] = chType; /* -------------------------------------------------------------------- */ /* Extend the required header information. */ /* -------------------------------------------------------------------- */ psDBF->nHeaderLength += 32; psDBF->bUpdated = FALSE; psDBF->pszHeader = (char *) SfRealloc(psDBF->pszHeader,psDBF->nFields*32); pszFInfo = psDBF->pszHeader + 32 * (psDBF->nFields-1); for( i = 0; i < 32; i++ ) pszFInfo[i] = '\0'; if( (int) strlen(pszFieldName) < 10 ) strncpy( pszFInfo, pszFieldName, strlen(pszFieldName)); else strncpy( pszFInfo, pszFieldName, 10); pszFInfo[11] = psDBF->pachFieldType[psDBF->nFields-1]; if( chType == 'C' ) { pszFInfo[16] = (unsigned char) (nWidth % 256); pszFInfo[17] = (unsigned char) (nWidth / 256); } else { pszFInfo[16] = (unsigned char) nWidth; pszFInfo[17] = (unsigned char) nDecimals; } /* -------------------------------------------------------------------- */ /* Make the current record buffer appropriately larger. */ /* -------------------------------------------------------------------- */ psDBF->pszCurrentRecord = (char *) SfRealloc(psDBF->pszCurrentRecord, psDBF->nRecordLength); /* we're done if dealing with new .dbf */ if( psDBF->bNoHeader ) return( psDBF->nFields - 1 ); /* -------------------------------------------------------------------- */ /* For existing .dbf file, shift records */ /* -------------------------------------------------------------------- */ /* alloc record */ pszRecord = (char *) malloc(sizeof(char) * psDBF->nRecordLength); chFieldFill = DBFGetNullCharacter(chType); for (i = psDBF->nRecords-1; i >= 0; --i) { nRecordOffset = nOldRecordLength * (SAOffset) i + nOldHeaderLength; /* load record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FRead( pszRecord, nOldRecordLength, 1, psDBF->fp ); /* set new field's value to NULL */ memset(pszRecord + nOldRecordLength, chFieldFill, nWidth); nRecordOffset = psDBF->nRecordLength * (SAOffset) i + psDBF->nHeaderLength; /* move record to the new place*/ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FWrite( pszRecord, psDBF->nRecordLength, 1, psDBF->fp ); } /* free record */ free(pszRecord); /* force update of header with new header, record length and new field */ psDBF->bNoHeader = TRUE; DBFUpdateHeader( psDBF ); psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; return( psDBF->nFields-1 ); } /************************************************************************/ /* DBFReadAttribute() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ static void *DBFReadAttribute(DBFHandle psDBF, int hEntity, int iField, char chReqType ) { unsigned char *pabyRec; void *pReturnField = NULL; /* -------------------------------------------------------------------- */ /* Verify selection. */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psDBF->nRecords ) return( NULL ); if( iField < 0 || iField >= psDBF->nFields ) return( NULL ); /* -------------------------------------------------------------------- */ /* Have we read the record? */ /* -------------------------------------------------------------------- */ if( !DBFLoadRecord( psDBF, hEntity ) ) return NULL; pabyRec = (unsigned char *) psDBF->pszCurrentRecord; /* -------------------------------------------------------------------- */ /* Ensure we have room to extract the target field. */ /* -------------------------------------------------------------------- */ if( psDBF->panFieldSize[iField] >= psDBF->nWorkFieldLength ) { psDBF->nWorkFieldLength = psDBF->panFieldSize[iField] + 100; if( psDBF->pszWorkField == NULL ) psDBF->pszWorkField = (char *) malloc(psDBF->nWorkFieldLength); else psDBF->pszWorkField = (char *) realloc(psDBF->pszWorkField, psDBF->nWorkFieldLength); } /* -------------------------------------------------------------------- */ /* Extract the requested field. */ /* -------------------------------------------------------------------- */ strncpy( psDBF->pszWorkField, ((const char *) pabyRec) + psDBF->panFieldOffset[iField], psDBF->panFieldSize[iField] ); psDBF->pszWorkField[psDBF->panFieldSize[iField]] = '\0'; pReturnField = psDBF->pszWorkField; /* -------------------------------------------------------------------- */ /* Decode the field. */ /* -------------------------------------------------------------------- */ if( chReqType == 'N' ) { psDBF->dfDoubleField = psDBF->sHooks.Atof(psDBF->pszWorkField); pReturnField = &(psDBF->dfDoubleField); } /* -------------------------------------------------------------------- */ /* Should we trim white space off the string attribute value? */ /* -------------------------------------------------------------------- */ #ifdef TRIM_DBF_WHITESPACE else { char *pchSrc, *pchDst; pchDst = pchSrc = psDBF->pszWorkField; while( *pchSrc == ' ' ) pchSrc++; while( *pchSrc != '\0' ) *(pchDst++) = *(pchSrc++); *pchDst = '\0'; while( pchDst != psDBF->pszWorkField && *(--pchDst) == ' ' ) *pchDst = '\0'; } #endif return( pReturnField ); } /************************************************************************/ /* DBFReadIntAttribute() */ /* */ /* Read an integer attribute. */ /************************************************************************/ int SHPAPI_CALL DBFReadIntegerAttribute( DBFHandle psDBF, int iRecord, int iField ) { double *pdValue; pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); if( pdValue == NULL ) return 0; else return( (int) *pdValue ); } /************************************************************************/ /* DBFReadDoubleAttribute() */ /* */ /* Read a double attribute. */ /************************************************************************/ double SHPAPI_CALL DBFReadDoubleAttribute( DBFHandle psDBF, int iRecord, int iField ) { double *pdValue; pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); if( pdValue == NULL ) return 0.0; else return( *pdValue ); } /************************************************************************/ /* DBFReadStringAttribute() */ /* */ /* Read a string attribute. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadStringAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'C' ) ); } /************************************************************************/ /* DBFReadLogicalAttribute() */ /* */ /* Read a logical attribute. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadLogicalAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'L' ) ); } /************************************************************************/ /* DBFIsValueNULL() */ /* */ /* Return TRUE if the passed string is NULL. */ /************************************************************************/ static int DBFIsValueNULL( char chType, const char* pszValue ) { int i; if( pszValue == NULL ) return TRUE; switch(chType) { case 'N': case 'F': /* ** We accept all asterisks or all blanks as NULL ** though according to the spec I think it should be all ** asterisks. */ if( pszValue[0] == '*' ) return TRUE; for( i = 0; pszValue[i] != '\0'; i++ ) { if( pszValue[i] != ' ' ) return FALSE; } return TRUE; case 'D': /* NULL date fields have value "00000000" or blank or empty */ if (pszValue[0] == '\0' || // emtpy string strncmp(pszValue,"00000000",8) == 0 || strncmp(pszValue," ",8) == 0) { return 1; } else { return 0; } // return strncmp(pszValue,"00000000",8) == 0; case 'L': /* NULL boolean fields have value "?" or empty */ if (pszValue[0] == '\0' || pszValue[0] == '?') { return 1; } else { return 0; } default: /* empty string fields are considered NULL */ return strlen(pszValue) == 0; } } /************************************************************************/ /* DBFIsAttributeNULL() */ /* */ /* Return TRUE if value for field is NULL. */ /* */ /* Contributed by Jim Matthews. */ /************************************************************************/ int SHPAPI_CALL DBFIsAttributeNULL( DBFHandle psDBF, int iRecord, int iField ) { const char *pszValue; pszValue = DBFReadStringAttribute( psDBF, iRecord, iField ); if( pszValue == NULL ) return TRUE; return DBFIsValueNULL( psDBF->pachFieldType[iField], pszValue ); } /************************************************************************/ /* DBFGetFieldCount() */ /* */ /* Return the number of fields in this table. */ /************************************************************************/ int SHPAPI_CALL DBFGetFieldCount( DBFHandle psDBF ) { return( psDBF->nFields ); } /************************************************************************/ /* DBFGetRecordCount() */ /* */ /* Return the number of records in this table. */ /************************************************************************/ int SHPAPI_CALL DBFGetRecordCount( DBFHandle psDBF ) { return( psDBF->nRecords ); } /************************************************************************/ /* DBFGetFieldInfo() */ /* */ /* Return any requested information about the field. */ /************************************************************************/ DBFFieldType SHPAPI_CALL DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals ) { if( iField < 0 || iField >= psDBF->nFields ) return( FTInvalid ); if( pnWidth != NULL ) *pnWidth = psDBF->panFieldSize[iField]; if( pnDecimals != NULL ) *pnDecimals = psDBF->panFieldDecimals[iField]; if( pszFieldName != NULL ) { int i; strncpy( pszFieldName, (char *) psDBF->pszHeader+iField*32, 11 ); pszFieldName[11] = '\0'; for( i = 10; i > 0 && pszFieldName[i] == ' '; i-- ) pszFieldName[i] = '\0'; } if ( psDBF->pachFieldType[iField] == 'L' ) return( FTLogical); else if ( psDBF->pachFieldType[iField] == 'D' ) return ( FTDate ); else if( psDBF->pachFieldType[iField] == 'N' || psDBF->pachFieldType[iField] == 'F' ) { if( psDBF->panFieldDecimals[iField] > 0 || psDBF->panFieldSize[iField] > 10 ) return( FTDouble ); else return( FTInteger ); } else { return( FTString ); } } /************************************************************************/ /* DBFWriteAttribute() */ /* */ /* Write an attribute record to the file. */ /************************************************************************/ static int DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, void * pValue ) { int i, j, nRetResult = TRUE; unsigned char *pabyRec; char szSField[400], szFormat[20]; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { if( !DBFFlushRecord( psDBF ) ) return FALSE; psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( !DBFLoadRecord( psDBF, hEntity ) ) return FALSE; pabyRec = (unsigned char *) psDBF->pszCurrentRecord; psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; /* -------------------------------------------------------------------- */ /* Translate NULL value to valid DBF file representation. */ /* */ /* Contributed by Jim Matthews. */ /* -------------------------------------------------------------------- */ if( pValue == NULL ) { memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), DBFGetNullCharacter(psDBF->pachFieldType[iField]), psDBF->panFieldSize[iField] ); return TRUE; } /* -------------------------------------------------------------------- */ /* Assign all the record fields. */ /* -------------------------------------------------------------------- */ switch( psDBF->pachFieldType[iField] ) { case 'D': case 'N': case 'F': if( psDBF->panFieldDecimals[iField] == 0 ) { int nWidth = psDBF->panFieldSize[iField]; if( (int) sizeof(szSField)-2 < nWidth ) nWidth = sizeof(szSField)-2; sprintf( szFormat, "%%%dd", nWidth ); sprintf(szSField, szFormat, (int) *((double *) pValue) ); if( (int)strlen(szSField) > psDBF->panFieldSize[iField] ) { szSField[psDBF->panFieldSize[iField]] = '\0'; nRetResult = FALSE; } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), szSField, strlen(szSField) ); } else { int nWidth = psDBF->panFieldSize[iField]; if( (int) sizeof(szSField)-2 < nWidth ) nWidth = sizeof(szSField)-2; sprintf( szFormat, "%%%d.%df", nWidth, psDBF->panFieldDecimals[iField] ); sprintf(szSField, szFormat, *((double *) pValue) ); if( (int) strlen(szSField) > psDBF->panFieldSize[iField] ) { szSField[psDBF->panFieldSize[iField]] = '\0'; nRetResult = FALSE; } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), szSField, strlen(szSField) ); } break; case 'L': if (psDBF->panFieldSize[iField] >= 1 && (*(char*)pValue == 'F' || *(char*)pValue == 'T')) *(pabyRec+psDBF->panFieldOffset[iField]) = *(char*)pValue; break; default: if( (int) strlen((char *) pValue) > psDBF->panFieldSize[iField] ) { j = psDBF->panFieldSize[iField]; nRetResult = FALSE; } else { memset( pabyRec+psDBF->panFieldOffset[iField], ' ', psDBF->panFieldSize[iField] ); j = strlen((char *) pValue); } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), (char *) pValue, j ); break; } return( nRetResult ); } /************************************************************************/ /* DBFWriteAttributeDirectly() */ /* */ /* Write an attribute record to the file, but without any */ /* reformatting based on type. The provided buffer is written */ /* as is to the field position in the record. */ /************************************************************************/ int SHPAPI_CALL DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField, void * pValue ) { int i, j; unsigned char *pabyRec; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { if( !DBFFlushRecord( psDBF ) ) return FALSE; psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( !DBFLoadRecord( psDBF, hEntity ) ) return FALSE; pabyRec = (unsigned char *) psDBF->pszCurrentRecord; /* -------------------------------------------------------------------- */ /* Assign all the record fields. */ /* -------------------------------------------------------------------- */ if( (int)strlen((char *) pValue) > psDBF->panFieldSize[iField] ) j = psDBF->panFieldSize[iField]; else { memset( pabyRec+psDBF->panFieldOffset[iField], ' ', psDBF->panFieldSize[iField] ); j = strlen((char *) pValue); } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), (char *) pValue, j ); psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; return( TRUE ); } /************************************************************************/ /* DBFWriteDoubleAttribute() */ /* */ /* Write a double attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteDoubleAttribute( DBFHandle psDBF, int iRecord, int iField, double dValue ) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); } /************************************************************************/ /* DBFWriteIntegerAttribute() */ /* */ /* Write a integer attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteIntegerAttribute( DBFHandle psDBF, int iRecord, int iField, int nValue ) { double dValue = nValue; return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); } /************************************************************************/ /* DBFWriteStringAttribute() */ /* */ /* Write a string attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteStringAttribute( DBFHandle psDBF, int iRecord, int iField, const char * pszValue ) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) pszValue ) ); } /************************************************************************/ /* DBFWriteNULLAttribute() */ /* */ /* Write a string attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteNULLAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( DBFWriteAttribute( psDBF, iRecord, iField, NULL ) ); } /************************************************************************/ /* DBFWriteLogicalAttribute() */ /* */ /* Write a logical attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteLogicalAttribute( DBFHandle psDBF, int iRecord, int iField, const char lValue) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) (&lValue) ) ); } /************************************************************************/ /* DBFWriteTuple() */ /* */ /* Write an attribute record to the file. */ /************************************************************************/ int SHPAPI_CALL DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ) { int i; unsigned char *pabyRec; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { if( !DBFFlushRecord( psDBF ) ) return FALSE; psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( !DBFLoadRecord( psDBF, hEntity ) ) return FALSE; pabyRec = (unsigned char *) psDBF->pszCurrentRecord; memcpy ( pabyRec, pRawTuple, psDBF->nRecordLength ); psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; return( TRUE ); } /************************************************************************/ /* DBFReadTuple() */ /* */ /* Read a complete record. Note that the result is only valid */ /* till the next record read for any reason. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadTuple(DBFHandle psDBF, int hEntity ) { if( hEntity < 0 || hEntity >= psDBF->nRecords ) return( NULL ); if( !DBFLoadRecord( psDBF, hEntity ) ) return NULL; return (const char *) psDBF->pszCurrentRecord; } /************************************************************************/ /* DBFCloneEmpty() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ) { DBFHandle newDBF; newDBF = DBFCreateEx ( pszFilename, psDBF->pszCodePage ); if ( newDBF == NULL ) return ( NULL ); newDBF->nFields = psDBF->nFields; newDBF->nRecordLength = psDBF->nRecordLength; newDBF->nHeaderLength = psDBF->nHeaderLength; newDBF->pszHeader = (char *) malloc ( newDBF->nHeaderLength ); memcpy ( newDBF->pszHeader, psDBF->pszHeader, newDBF->nHeaderLength ); newDBF->panFieldOffset = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldOffset, psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); newDBF->panFieldSize = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldSize, psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); newDBF->panFieldDecimals = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldDecimals, psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); newDBF->pachFieldType = (char *) malloc ( sizeof(char) * psDBF->nFields ); memcpy ( newDBF->pachFieldType, psDBF->pachFieldType, sizeof(char)*psDBF->nFields ); newDBF->bNoHeader = TRUE; newDBF->bUpdated = TRUE; DBFWriteHeader ( newDBF ); DBFClose ( newDBF ); newDBF = DBFOpen ( pszFilename, "rb+" ); return ( newDBF ); } /************************************************************************/ /* DBFGetNativeFieldType() */ /* */ /* Return the DBase field type for the specified field. */ /* */ /* Value can be one of: 'C' (String), 'D' (Date), 'F' (Float), */ /* 'N' (Numeric, with or without decimal), */ /* 'L' (Logical), */ /* 'M' (Memo: 10 digits .DBT block ptr) */ /************************************************************************/ char SHPAPI_CALL DBFGetNativeFieldType( DBFHandle psDBF, int iField ) { if( iField >=0 && iField < psDBF->nFields ) return psDBF->pachFieldType[iField]; return ' '; } /************************************************************************/ /* str_to_upper() */ /************************************************************************/ static void str_to_upper (char *string) { int len; short i = -1; len = strlen (string); while (++i < len) if (isalpha(string[i]) && islower(string[i])) string[i] = (char) toupper ((int)string[i]); } /************************************************************************/ /* DBFGetFieldIndex() */ /* */ /* Get the index number for a field in a .dbf file. */ /* */ /* Contributed by Jim Matthews. */ /************************************************************************/ int SHPAPI_CALL DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName) { char name[12], name1[12], name2[12]; int i; strncpy(name1, pszFieldName,11); name1[11] = '\0'; str_to_upper(name1); for( i = 0; i < DBFGetFieldCount(psDBF); i++ ) { DBFGetFieldInfo( psDBF, i, name, NULL, NULL ); strncpy(name2,name,11); str_to_upper(name2); if(!strncmp(name1,name2,10)) return(i); } return(-1); } /************************************************************************/ /* DBFIsRecordDeleted() */ /* */ /* Returns TRUE if the indicated record is deleted, otherwise */ /* it returns FALSE. */ /************************************************************************/ int SHPAPI_CALL DBFIsRecordDeleted( DBFHandle psDBF, int iShape ) { /* -------------------------------------------------------------------- */ /* Verify selection. */ /* -------------------------------------------------------------------- */ if( iShape < 0 || iShape >= psDBF->nRecords ) return TRUE; /* -------------------------------------------------------------------- */ /* Have we read the record? */ /* -------------------------------------------------------------------- */ if( !DBFLoadRecord( psDBF, iShape ) ) return FALSE; /* -------------------------------------------------------------------- */ /* '*' means deleted. */ /* -------------------------------------------------------------------- */ return psDBF->pszCurrentRecord[0] == '*'; } /************************************************************************/ /* DBFMarkRecordDeleted() */ /************************************************************************/ int SHPAPI_CALL DBFMarkRecordDeleted( DBFHandle psDBF, int iShape, int bIsDeleted ) { char chNewFlag; /* -------------------------------------------------------------------- */ /* Verify selection. */ /* -------------------------------------------------------------------- */ if( iShape < 0 || iShape >= psDBF->nRecords ) return FALSE; /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( !DBFLoadRecord( psDBF, iShape ) ) return FALSE; /* -------------------------------------------------------------------- */ /* Assign value, marking record as dirty if it changes. */ /* -------------------------------------------------------------------- */ if( bIsDeleted ) chNewFlag = '*'; else chNewFlag = ' '; if( psDBF->pszCurrentRecord[0] != chNewFlag ) { psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; psDBF->pszCurrentRecord[0] = chNewFlag; } return TRUE; } /************************************************************************/ /* DBFGetCodePage */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFGetCodePage(DBFHandle psDBF ) { if( psDBF == NULL ) return NULL; return psDBF->pszCodePage; } /************************************************************************/ /* DBFDeleteField() */ /* */ /* Remove a field from a .dbf file */ /************************************************************************/ int SHPAPI_CALL DBFDeleteField(DBFHandle psDBF, int iField) { int nOldRecordLength, nOldHeaderLength; int nDeletedFieldOffset, nDeletedFieldSize; SAOffset nRecordOffset; char* pszRecord; int i, iRecord; if (iField < 0 || iField >= psDBF->nFields) return FALSE; /* make sure that everything is written in .dbf */ if( !DBFFlushRecord( psDBF ) ) return FALSE; /* get information about field to be deleted */ nOldRecordLength = psDBF->nRecordLength; nOldHeaderLength = psDBF->nHeaderLength; nDeletedFieldOffset = psDBF->panFieldOffset[iField]; nDeletedFieldSize = psDBF->panFieldSize[iField]; /* update fields info */ for (i = iField + 1; i < psDBF->nFields; i++) { psDBF->panFieldOffset[i-1] = psDBF->panFieldOffset[i] - nDeletedFieldSize; psDBF->panFieldSize[i-1] = psDBF->panFieldSize[i]; psDBF->panFieldDecimals[i-1] = psDBF->panFieldDecimals[i]; psDBF->pachFieldType[i-1] = psDBF->pachFieldType[i]; } /* resize fields arrays */ psDBF->nFields--; psDBF->panFieldOffset = (int *) SfRealloc( psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); psDBF->panFieldSize = (int *) SfRealloc( psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); psDBF->panFieldDecimals = (int *) SfRealloc( psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); psDBF->pachFieldType = (char *) SfRealloc( psDBF->pachFieldType, sizeof(char) * psDBF->nFields ); /* update header information */ psDBF->nHeaderLength -= 32; psDBF->nRecordLength -= nDeletedFieldSize; /* overwrite field information in header */ memmove(psDBF->pszHeader + iField*32, psDBF->pszHeader + (iField+1)*32, sizeof(char) * (psDBF->nFields - iField)*32); psDBF->pszHeader = (char *) SfRealloc(psDBF->pszHeader,psDBF->nFields*32); /* update size of current record appropriately */ psDBF->pszCurrentRecord = (char *) SfRealloc(psDBF->pszCurrentRecord, psDBF->nRecordLength); /* we're done if we're dealing with not yet created .dbf */ if ( psDBF->bNoHeader && psDBF->nRecords == 0 ) return TRUE; /* force update of header with new header and record length */ psDBF->bNoHeader = TRUE; DBFUpdateHeader( psDBF ); /* alloc record */ pszRecord = (char *) malloc(sizeof(char) * nOldRecordLength); /* shift records to their new positions */ for (iRecord = 0; iRecord < psDBF->nRecords; iRecord++) { nRecordOffset = nOldRecordLength * (SAOffset) iRecord + nOldHeaderLength; /* load record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FRead( pszRecord, nOldRecordLength, 1, psDBF->fp ); nRecordOffset = psDBF->nRecordLength * (SAOffset) iRecord + psDBF->nHeaderLength; /* move record in two steps */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FWrite( pszRecord, nDeletedFieldOffset, 1, psDBF->fp ); psDBF->sHooks.FWrite( pszRecord + nDeletedFieldOffset + nDeletedFieldSize, nOldRecordLength - nDeletedFieldOffset - nDeletedFieldSize, 1, psDBF->fp ); } /* TODO: truncate file */ /* free record */ free(pszRecord); psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; return TRUE; } /************************************************************************/ /* DBFReorderFields() */ /* */ /* Reorder the fields of a .dbf file */ /* */ /* panMap must be exactly psDBF->nFields long and be a permutation */ /* of [0, psDBF->nFields-1]. This assumption will not be asserted in the*/ /* code of DBFReorderFields. */ /************************************************************************/ int SHPAPI_CALL DBFReorderFields( DBFHandle psDBF, int* panMap ) { SAOffset nRecordOffset; int i, iRecord; int *panFieldOffsetNew; int *panFieldSizeNew; int *panFieldDecimalsNew; char *pachFieldTypeNew; char *pszHeaderNew; char *pszRecord; char *pszRecordNew; if ( psDBF->nFields == 0 ) return TRUE; /* make sure that everything is written in .dbf */ if( !DBFFlushRecord( psDBF ) ) return FALSE; panFieldOffsetNew = (int *) malloc(sizeof(int) * psDBF->nFields); panFieldSizeNew = (int *) malloc(sizeof(int) * psDBF->nFields); panFieldDecimalsNew = (int *) malloc(sizeof(int) * psDBF->nFields); pachFieldTypeNew = (char *) malloc(sizeof(char) * psDBF->nFields); pszHeaderNew = (char*) malloc(sizeof(char) * 32 * psDBF->nFields); /* shuffle fields definitions */ for(i=0; i < psDBF->nFields; i++) { panFieldSizeNew[i] = psDBF->panFieldSize[panMap[i]]; panFieldDecimalsNew[i] = psDBF->panFieldDecimals[panMap[i]]; pachFieldTypeNew[i] = psDBF->pachFieldType[panMap[i]]; memcpy(pszHeaderNew + i * 32, psDBF->pszHeader + panMap[i] * 32, 32); } panFieldOffsetNew[0] = 1; for(i=1; i < psDBF->nFields; i++) { panFieldOffsetNew[i] = panFieldOffsetNew[i - 1] + panFieldSizeNew[i - 1]; } free(psDBF->pszHeader); psDBF->pszHeader = pszHeaderNew; /* we're done if we're dealing with not yet created .dbf */ if ( !(psDBF->bNoHeader && psDBF->nRecords == 0) ) { /* force update of header with new header and record length */ psDBF->bNoHeader = TRUE; DBFUpdateHeader( psDBF ); /* alloc record */ pszRecord = (char *) malloc(sizeof(char) * psDBF->nRecordLength); pszRecordNew = (char *) malloc(sizeof(char) * psDBF->nRecordLength); /* shuffle fields in records */ for (iRecord = 0; iRecord < psDBF->nRecords; iRecord++) { nRecordOffset = psDBF->nRecordLength * (SAOffset) iRecord + psDBF->nHeaderLength; /* load record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FRead( pszRecord, psDBF->nRecordLength, 1, psDBF->fp ); pszRecordNew[0] = pszRecord[0]; for(i=0; i < psDBF->nFields; i++) { memcpy(pszRecordNew + panFieldOffsetNew[i], pszRecord + psDBF->panFieldOffset[panMap[i]], psDBF->panFieldSize[panMap[i]]); } /* write record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FWrite( pszRecordNew, psDBF->nRecordLength, 1, psDBF->fp ); } /* free record */ free(pszRecord); free(pszRecordNew); } free(psDBF->panFieldOffset); free(psDBF->panFieldSize); free(psDBF->panFieldDecimals); free(psDBF->pachFieldType); psDBF->panFieldOffset = panFieldOffsetNew; psDBF->panFieldSize = panFieldSizeNew; psDBF->panFieldDecimals =panFieldDecimalsNew; psDBF->pachFieldType = pachFieldTypeNew; psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; return TRUE; } /************************************************************************/ /* DBFAlterFieldDefn() */ /* */ /* Alter a field definition in a .dbf file */ /************************************************************************/ int SHPAPI_CALL DBFAlterFieldDefn( DBFHandle psDBF, int iField, const char * pszFieldName, char chType, int nWidth, int nDecimals ) { int i; int iRecord; int nOffset; int nOldWidth; int nOldRecordLength; int nRecordOffset; char* pszFInfo; char chOldType; int bIsNULL; char chFieldFill; if (iField < 0 || iField >= psDBF->nFields) return FALSE; /* make sure that everything is written in .dbf */ if( !DBFFlushRecord( psDBF ) ) return FALSE; chFieldFill = DBFGetNullCharacter(chType); chOldType = psDBF->pachFieldType[iField]; nOffset = psDBF->panFieldOffset[iField]; nOldWidth = psDBF->panFieldSize[iField]; nOldRecordLength = psDBF->nRecordLength; /* -------------------------------------------------------------------- */ /* Do some checking to ensure we can add records to this file. */ /* -------------------------------------------------------------------- */ if( nWidth < 1 ) return -1; if( nWidth > 255 ) nWidth = 255; /* -------------------------------------------------------------------- */ /* Assign the new field information fields. */ /* -------------------------------------------------------------------- */ psDBF->panFieldSize[iField] = nWidth; psDBF->panFieldDecimals[iField] = nDecimals; psDBF->pachFieldType[iField] = chType; /* -------------------------------------------------------------------- */ /* Update the header information. */ /* -------------------------------------------------------------------- */ pszFInfo = psDBF->pszHeader + 32 * iField; for( i = 0; i < 32; i++ ) pszFInfo[i] = '\0'; if( (int) strlen(pszFieldName) < 10 ) strncpy( pszFInfo, pszFieldName, strlen(pszFieldName)); else strncpy( pszFInfo, pszFieldName, 10); pszFInfo[11] = psDBF->pachFieldType[iField]; if( chType == 'C' ) { pszFInfo[16] = (unsigned char) (nWidth % 256); pszFInfo[17] = (unsigned char) (nWidth / 256); } else { pszFInfo[16] = (unsigned char) nWidth; pszFInfo[17] = (unsigned char) nDecimals; } /* -------------------------------------------------------------------- */ /* Update offsets */ /* -------------------------------------------------------------------- */ if (nWidth != nOldWidth) { for (i = iField + 1; i < psDBF->nFields; i++) psDBF->panFieldOffset[i] += nWidth - nOldWidth; psDBF->nRecordLength += nWidth - nOldWidth; psDBF->pszCurrentRecord = (char *) SfRealloc(psDBF->pszCurrentRecord, psDBF->nRecordLength); } /* we're done if we're dealing with not yet created .dbf */ if ( psDBF->bNoHeader && psDBF->nRecords == 0 ) return TRUE; /* force update of header with new header and record length */ psDBF->bNoHeader = TRUE; DBFUpdateHeader( psDBF ); if (nWidth < nOldWidth || (nWidth == nOldWidth && chType != chOldType)) { char* pszRecord = (char *) malloc(sizeof(char) * nOldRecordLength); char* pszOldField = (char *) malloc(sizeof(char) * (nOldWidth + 1)); pszOldField[nOldWidth] = 0; /* move records to their new positions */ for (iRecord = 0; iRecord < psDBF->nRecords; iRecord++) { nRecordOffset = nOldRecordLength * (SAOffset) iRecord + psDBF->nHeaderLength; /* load record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FRead( pszRecord, nOldRecordLength, 1, psDBF->fp ); memcpy(pszOldField, pszRecord + nOffset, nOldWidth); bIsNULL = DBFIsValueNULL( chOldType, pszOldField ); if (nWidth != nOldWidth) { if ((chOldType == 'N' || chOldType == 'F') && pszOldField[0] == ' ') { /* Strip leading spaces when truncating a numeric field */ memmove( pszRecord + nOffset, pszRecord + nOffset + nOldWidth - nWidth, nWidth ); } if (nOffset + nOldWidth < nOldRecordLength) { memmove( pszRecord + nOffset + nWidth, pszRecord + nOffset + nOldWidth, nOldRecordLength - (nOffset + nOldWidth)); } } /* Convert null value to the appropriate value of the new type */ if (bIsNULL) { memset( pszRecord + nOffset, chFieldFill, nWidth); } nRecordOffset = psDBF->nRecordLength * (SAOffset) iRecord + psDBF->nHeaderLength; /* write record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FWrite( pszRecord, psDBF->nRecordLength, 1, psDBF->fp ); } free(pszRecord); free(pszOldField); } else if (nWidth > nOldWidth) { char* pszRecord = (char *) malloc(sizeof(char) * psDBF->nRecordLength); char* pszOldField = (char *) malloc(sizeof(char) * (nOldWidth + 1)); pszOldField[nOldWidth] = 0; /* move records to their new positions */ for (iRecord = psDBF->nRecords - 1; iRecord >= 0; iRecord--) { nRecordOffset = nOldRecordLength * (SAOffset) iRecord + psDBF->nHeaderLength; /* load record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FRead( pszRecord, nOldRecordLength, 1, psDBF->fp ); memcpy(pszOldField, pszRecord + nOffset, nOldWidth); bIsNULL = DBFIsValueNULL( chOldType, pszOldField ); if (nOffset + nOldWidth < nOldRecordLength) { memmove( pszRecord + nOffset + nWidth, pszRecord + nOffset + nOldWidth, nOldRecordLength - (nOffset + nOldWidth)); } /* Convert null value to the appropriate value of the new type */ if (bIsNULL) { memset( pszRecord + nOffset, chFieldFill, nWidth); } else { if ((chOldType == 'N' || chOldType == 'F')) { /* Add leading spaces when expanding a numeric field */ memmove( pszRecord + nOffset + nWidth - nOldWidth, pszRecord + nOffset, nOldWidth ); memset( pszRecord + nOffset, ' ', nWidth - nOldWidth ); } else { /* Add trailing spaces */ memset(pszRecord + nOffset + nOldWidth, ' ', nWidth - nOldWidth); } } nRecordOffset = psDBF->nRecordLength * (SAOffset) iRecord + psDBF->nHeaderLength; /* write record */ psDBF->sHooks.FSeek( psDBF->fp, nRecordOffset, 0 ); psDBF->sHooks.FWrite( pszRecord, psDBF->nRecordLength, 1, psDBF->fp ); } free(pszRecord); free(pszOldField); } psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; return TRUE; } �������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/���������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�016153� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/cu_shp2pgsql.h�������������������������������������������������0000644�0000000�0000000�00000001413�11722777314�020745� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 LISAsoft Pty Ltd * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef __cu_shp2pgsql_h__ #define __cu_shp2pgsql_h__ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" /*********************************************************************** ** for Computational Geometry Suite */ /* Admin functions */ int init_shp2pgsql_suite(void); int clean_shp2pgsql_suite(void); #endif /* __cu_shp2pgsql_h__ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/cu_tester.h����������������������������������������������������0000644�0000000�0000000�00000001222�11722777314�020326� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_tester.h 5674 2010-06-03 02:04:15Z mleslie $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 Mark Leslie * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef __cu_tester_h__ #define __cu_tester_h__ CU_pSuite register_list_suite(void); CU_pSuite register_shp2pgsql_suite(void); CU_pSuite register_pgsql2shp_suite(void); #endif /* __cu_tester_h__ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/cu_tester.c����������������������������������������������������0000644�0000000�0000000�00000002354�11722777314�020330� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_tester.c 5675 2010-06-03 07:35:41Z mleslie $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2008 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include <stdio.h> #include <string.h> #include "CUnit/Basic.h" #include "cu_tester.h" /* ** The main() function for setting up and running the tests. ** Returns a CUE_SUCCESS on successful running, another ** CUnit error code on failure. */ int main() { /* initialize the CUnit test registry */ if (CUE_SUCCESS != CU_initialize_registry()) return CU_get_error(); /* Add the shp2pgsql test suite */ if (NULL == register_shp2pgsql_suite()) { CU_cleanup_registry(); return CU_get_error(); } /* Add the pgsql2shp test suite */ if (NULL == register_pgsql2shp_suite()) { CU_cleanup_registry(); return CU_get_error(); } /* Run all tests using the CUnit Basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests(); CU_cleanup_registry(); return CU_get_error(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/map.txt��������������������������������������������������������0000644�0000000�0000000�00000000132�11722777314�017475� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0123456789toolong0 0123456780 0123456789toolong1 0123456781 0123456789toolong2 0123456782 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/cu_shp2pgsql.c�������������������������������������������������0000644�0000000�0000000�00000003521�11722777314�020742� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_shp2pgsql.c 5674 2010-06-03 02:04:15Z mleslie $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 LISAsoft Pty Ltd * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "cu_shp2pgsql.h" #include "cu_tester.h" #include "../shp2pgsql-core.h" /* Test functions */ void test_ShpLoaderCreate(void); void test_ShpLoaderDestroy(void); SHPLOADERCONFIG *loader_config; SHPLOADERSTATE *loader_state; /* ** Called from test harness to register the tests in this file. */ CU_pSuite register_shp2pgsql_suite(void) { CU_pSuite pSuite; pSuite = CU_add_suite("Shapefile Loader File shp2pgsql Test", init_shp2pgsql_suite, clean_shp2pgsql_suite); if (NULL == pSuite) { CU_cleanup_registry(); return NULL; } if ( (NULL == CU_add_test(pSuite, "test_ShpLoaderCreate()", test_ShpLoaderCreate)) || (NULL == CU_add_test(pSuite, "test_ShpLoaderDestroy()", test_ShpLoaderDestroy)) ) { CU_cleanup_registry(); return NULL; } return pSuite; } /* ** The suite initialization function. ** Create any re-used objects. */ int init_shp2pgsql_suite(void) { return 0; } /* ** The suite cleanup function. ** Frees any global objects. */ int clean_shp2pgsql_suite(void) { return 0; } void test_ShpLoaderCreate(void) { loader_config = (SHPLOADERCONFIG*)calloc(1, sizeof(SHPLOADERCONFIG)); set_loader_config_defaults(loader_config); loader_state = ShpLoaderCreate(loader_config); CU_ASSERT_PTR_NOT_NULL(loader_state); CU_ASSERT_STRING_EQUAL(loader_state->config->encoding, ENCODING_DEFAULT); } void test_ShpLoaderDestroy(void) { ShpLoaderDestroy(loader_state); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/cu_pgsql2shp.h�������������������������������������������������0000644�0000000�0000000�00000001413�11722777314�020745� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 LISAsoft Pty Ltd * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #ifndef __cu_pgsql2shp_h__ #define __cu_pgsql2shp_h__ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CUnit/Basic.h" /*********************************************************************** ** for Computational Geometry Suite */ /* Admin functions */ int init_pgsql2shp_suite(void); int clean_pgsql2shp_suite(void); #endif /* __cu_pgsql2shp_h__ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/Makefile.in����������������������������������������������������0000644�0000000�0000000�00000004624�12143577056�020235� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * $Id: Makefile.in # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Paul Ramsey, Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** CC=@CC@ CFLAGS=@CFLAGS@ @WARNFLAGS@ CUNIT_LDFLAGS=@CUNIT_LDFLAGS@ CUNIT_CPPFLAGS=@CUNIT_CPPFLAGS@ -I.. # GTK includes and libraries GTK_CFLAGS = @GTK_CFLAGS@ @IGE_MAC_CFLAGS@ GTK_LIBS = @GTK_LIBS@ @IGE_MAC_LIBS@ GTK_WIN32_FLAGS = @GTK_WIN32_FLAGS@ # PostgreSQL frontend CPPFLAGS and LDFLAGS (for compiling and linking with libpq) PGSQL_FE_CPPFLAGS=@PGSQL_FE_CPPFLAGS@ PGSQL_FE_LDFLAGS=@PGSQL_FE_LDFLAGS@ # liblwgeom LIBLWGEOM=../../liblwgeom/.libs/liblwgeom.a # iconv flags ICONV_LDFLAGS=@ICONV_LDFLAGS@ ICONV_CFLAGS=@ICONV_CFLAGS@ # GetText includes and libraries GETTEXT_CFLAGS = @GETTEXT_CFLAGS@ GETTEXT_LDFLAGS = @GETTEXT_LDFLAGS@ @LIBINTL@ # Built out CFLAGS with ICONV and GETTEXT CFLAGS += $(GETTEXT_CFLAGS) $(ICONV_CFLAGS) # Build full linking line LDFLAGS = -lm $(GEOS_LDFLAGS) $(GETTEXT_LDFLAGS) $(PGSQL_FE_LDFLAGS) $(ICONV_LDFLAGS) $(CUNIT_LDFLAGS) # Object files OBJS= \ cu_pgsql2shp.o \ cu_shp2pgsql.o \ cu_tester.o LOADER_OBJS= \ ../dbfopen.o \ ../shpopen.o \ ../getopt.o \ ../shpcommon.o \ ../safileio.o \ ../pgsql2shp-core.o \ ../shp2pgsql-core.o # If we couldn't find the cunit library then display a helpful message ifeq ($(CUNIT_LDFLAGS),) all: requirements_not_met_cunit check: requirements_not_met_cunit else $(LOADER_OBJS): make -C .. # Build the unit tester all: cu_tester # Build and run the unit tester check: cu_tester @./cu_tester endif # Build the main unit test executable cu_tester: $(LOADER_OBJS) $(OBJS) $(CC) $^ -o $@ $(LIBLWGEOM) $(LDFLAGS) # Command to build each of the .o files $(OBJS): %.o: %.c $(CC) $(CFLAGS) $(CUNIT_CPPFLAGS) $(GTK_CFLAGS) $(PGSQL_FE_CPPFLAGS) -c -o $@ $< # Clean target clean: rm -f $(OBJS) rm -f cu_tester.exe distclean: clean rm -f Makefile # Requirements message requirements_not_met_cunit: @echo @echo "WARNING:" @echo @echo "configure was unable to find CUnit which is required for unit testing." @echo "In order to enable unit testing, you must install CUnit and then re-run configure." @echo ������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/cunit/cu_pgsql2shp.c�������������������������������������������������0000644�0000000�0000000�00000003476�11722777314�020753� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: cu_pgsql2shp.c 5674 2010-06-03 02:04:15Z mleslie $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2010 LISAsoft Pty Ltd * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ #include "cu_pgsql2shp.h" #include "cu_tester.h" #include "../pgsql2shp-core.h" /* Test functions */ void test_ShpDumperCreate(void); void test_ShpDumperDestroy(void); SHPDUMPERCONFIG *dumper_config; SHPDUMPERSTATE *dumper_state; /* ** Called from test harness to register the tests in this file. */ CU_pSuite register_pgsql2shp_suite(void) { CU_pSuite pSuite; pSuite = CU_add_suite("Shapefile Loader File pgsql2shp Test", init_pgsql2shp_suite, clean_pgsql2shp_suite); if (NULL == pSuite) { CU_cleanup_registry(); return NULL; } if ( (NULL == CU_add_test(pSuite, "test_ShpDumperCreate()", test_ShpDumperCreate)) || (NULL == CU_add_test(pSuite, "test_ShpDumperDestroy()", test_ShpDumperDestroy)) ) { CU_cleanup_registry(); return NULL; } return pSuite; } /* ** The suite initialization function. ** Create any re-used objects. */ int init_pgsql2shp_suite(void) { return 0; } /* ** The suite cleanup function. ** Frees any global objects. */ int clean_pgsql2shp_suite(void) { return 0; } void test_ShpDumperCreate(void) { dumper_config = (SHPDUMPERCONFIG*)calloc(1, sizeof(SHPDUMPERCONFIG)); set_dumper_config_defaults(dumper_config); dumper_state = ShpDumperCreate(dumper_config); CU_ASSERT_PTR_NOT_NULL(dumper_state); CU_ASSERT_EQUAL(dumper_state->config->fetchsize, 100); } void test_ShpDumperDestroy(void) { ShpDumperDestroy(dumper_state); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/Makefile.in����������������������������������������������������������0000644�0000000�0000000�00000012074�12141665073�017104� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * Copyright 2008 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** # PGXS information # # Note that PGXS currently doesn't handle building FE executables, but we need # the DESTDIR variable so we can get the correct install paths. # Hence we include the PGXS Makefile here, but ensure that we override the # 'all' and 'install' targets with the ones we really want to use below. PG_CONFIG = @PG_CONFIG@ PGXS := @PGXS@ include $(PGXS) # Set CFLAGS afer PGXS, otherwise it will get overwritten with the PGXS # version which is not what we want. CC=@CC@ CFLAGS=-I ../liblwgeom @CFLAGS@ @PICFLAGS@ @WARNFLAGS@ @PROJ_CPPFLAGS@ top_builddir = @top_builddir@ SHELL = @SHELL@ INSTALL = $(SHELL) ../install-sh LIBTOOL = @LIBTOOL@ # Filenames with extension as determined by the OS PGSQL2SHP-CLI=pgsql2shp@EXESUFFIX@ SHP2PGSQL-CLI=shp2pgsql@EXESUFFIX@ SHP2PGSQL-GUI=shp2pgsql-gui@EXESUFFIX@ # PostgreSQL frontend CPPFLAGS and LDFLAGS (for compiling and linking with libpq) PGSQL_FE_CPPFLAGS=@PGSQL_FE_CPPFLAGS@ PGSQL_FE_LDFLAGS=@PGSQL_FE_LDFLAGS@ # iconv flags ICONV_LDFLAGS=@ICONV_LDFLAGS@ ICONV_CFLAGS=@ICONV_CFLAGS@ # liblwgeom LIBLWGEOM=../liblwgeom/liblwgeom.la # GTK includes and libraries GTK_CFLAGS = @GTK_CFLAGS@ @IGE_MAC_CFLAGS@ GTK_LIBS = @GTK_LIBS@ @IGE_MAC_LIBS@ GTK_WIN32_FLAGS = @GTK_WIN32_FLAGS@ GTK_WIN32_RES = @GTK_WIN32_RES@ # GetText includes and libraries GETTEXT_CFLAGS = @GETTEXT_CFLAGS@ GETTEXT_LDFLAGS = @GETTEXT_LDFLAGS@ @LIBINTL@ LANGUAGES = fr # Built out CFLAGS with ICONV and GETTEXT CFLAGS += $(GETTEXT_CFLAGS) $(ICONV_CFLAGS) # If REGRESS=1 passed as a parameter, change the default install paths # so that no prefix is included. This allows us to relocate to a temporary # directory for regression testing. ifeq ($(REGRESS),1) bindir=/bin pkglibdir=/lib datadir=/share endif # We test this variable later to see if we're building the GUI gtk_build = @GTK_BUILD@ # Common object files SHPLIB_OBJS = shpopen.o dbfopen.o getopt.o shpcommon.o safileio.o # The real parts of the Makefile all: $(SHP2PGSQL-CLI) $(PGSQL2SHP-CLI) @GTK_BUILD@ gui: $(SHP2PGSQL-GUI) $(SHP2PGSQL-CLI) @GTK_WIN32_RES@ shp2pgsql-gui.res: shp2pgsql-gui.rc shp2pgsql-gui.ico windres $< -O coff -o $@ # liblwgeom.a dependency to allow "make install" in # the loader/ subdirectory to work $(LIBLWGEOM): make -C ../liblwgeom shp2pgsql-core.o: shp2pgsql-core.c shp2pgsql-core.h shpcommon.h $(CC) $(CFLAGS) -c $< pgsql2shp-core.o: pgsql2shp-core.c pgsql2shp-core.h shpcommon.h $(CC) $(CFLAGS) $(PGSQL_FE_CPPFLAGS) -c $< pgsql2shp-cli.o: pgsql2shp-cli.c pgsql2shp-core.h shpcommon.h $(CC) $(CFLAGS) $(PGSQL_FE_CPPFLAGS) -c $< $(PGSQL2SHP-CLI): $(SHPLIB_OBJS) pgsql2shp-core.o pgsql2shp-cli.o $(LIBLWGEOM) $(LIBTOOL) --mode=link \ $(CC) $(CFLAGS) $^ $(ICONV_LDFLAGS) $(PGSQL_FE_LDFLAGS) $(GETTEXT_LDFLAGS) -o $@ $(SHP2PGSQL-CLI): $(SHPLIB_OBJS) shp2pgsql-core.o shp2pgsql-cli.o $(LIBLWGEOM) $(LIBTOOL) --mode=link \ $(CC) $(CFLAGS) $^ -o $@ $(GETTEXT_LDFLAGS) $(ICONV_LDFLAGS) shp2pgsql-gui.o: shp2pgsql-gui.c shp2pgsql-core.h shpcommon.h $(CC) $(CFLAGS) $(GTK_CFLAGS) $(PGSQL_FE_CPPFLAGS) -o $@ -c shp2pgsql-gui.c $(SHP2PGSQL-GUI): $(SHPLIB_OBJS) shp2pgsql-core.o shp2pgsql-gui.o pgsql2shp-core.o $(LIBLWGEOM) $(GTK_WIN32_RES) $(LIBTOOL) --mode=link \ $(CC) $(CFLAGS) $(GTK_WIN32_FLAGS) $^ -o $@ \ $(GTK_LIBS) $(ICONV_LDFLAGS) $(PGSQL_FE_LDFLAGS) $(GETTEXT_LDFLAGS) installdir: @mkdir -p $(DESTDIR)$(bindir) install: installdir ifdef gtk_build $(LIBTOOL) --mode=install $(INSTALL) $(SHP2PGSQL-GUI) "$(DESTDIR)$(bindir)/$(SHP2PGSQL-GUI)" endif $(LIBTOOL) --mode=install $(INSTALL) $(PGSQL2SHP-CLI) "$(DESTDIR)$(bindir)/$(PGSQL2SHP-CLI)" $(LIBTOOL) --mode=install $(INSTALL) $(SHP2PGSQL-CLI) "$(DESTDIR)$(bindir)/$(SHP2PGSQL-CLI)" uninstall: $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(bindir)/$(PGSQL2SHP-CLI)" $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(bindir)/$(SHP2PGSQL-CLI)" $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(bindir)/$(SHP2PGSQL-GUI)" check: ifdef gtk_build make -C cunit check endif clean: rm -rf .libs rm -f *.o $(SHP2PGSQL-CLI) $(PGSQL2SHP-CLI) $(GTK_WIN32_RES) $(SHP2PGSQL-GUI) $(MAKE) -C cunit clean distclean: $(MAKE) -C cunit distclean rm -f Makefile # # Internationalization targets. These are going to need some work and # love to land the files in the right places in all platforms. # pot: xgettext -k_ shp2pgsql-core.c shp2pgsql-cli.c shp2pgsql-gui.c -o po/shp2pgsql.pot xgettext -k_ pgsql2shp-core.c pgsql2shp-cli.c -o po/pgsql2shp.pot mo: for lang in $(LANGUAGES); do \ msgfmt -o po/shp2pgsql_$$lang.mo po/shp2pgsql_$$lang.po ; \ done install-mo: ifneq (,$(LANGUAGES)) for lang in $(LANGUAGES); do \ $(INSTALL_DATA) po/shp2pgsql_$$lang.mo '$(localedir)'/$$lang/LC_MESSAGES/shp2pgsql.mo || exit 1; \ done endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/README.shp2pgsql�����������������������������������������������������0000644�0000000�0000000�00000011401�11722777314�017640� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������shp2pgsql(1) PostGIS shp2pgsql(1) NAME shp2pgsql - shapefile to postgis loader SYNTAX shp2pgsql [options] shapefile [schema.]table DESCRIPTION The shp2pgsql data loader converts ESRI Shape files into SQL suitable for insertion into a PostGIS/PostgreSQL database. Version: 1.1.5 (2006/10/06) USAGE The <shapefile> is the name of the shape file, without any extension information. For example, 'roads' would be the name of the shapefile comprising the 'roads.shp', 'roads.shx', and 'roads.dbf' files. The <tablename> is the (optionally schema-qualified) name of the database table you want the data stored in in the database. Within that table, the geometry will be placed in the 'geo_value' column by default. OPTIONS The loader has several operating modes distinguished by command line flags: (Note that -a, -c, -d and -p are mutually exclusive.) -d Drops the database table before creating a new table with the data in the Shape file. -a Appends data from the Shape file into the database table. Note that to use this option to load multiple files, the files must have the same attributes and same data types. -c Creates a new table and populates it from the Shape file. This is the default mode. -p Only produces the table creation SQL code, without adding any actual data. This can be used if you need to completely sepa- rate the table creation and data loading steps. -D Use the PostgreSQL "dump" format for the output data. This can be combined with -a, -c and -d. It is much faster to load than the default "insert" SQL format. Use this for very large data sets. -s <SRID> Creates and populates the geometry tables with the specified SRID. -g <geometry_column> Specify the name of the geometry column (mostly useful in append mode). -k Keep idendifiers case (column, schema and attributes). Note that attributes in Shapefile are usually all UPPERCASE. -i Coerce all integers to standard 32-bit integers, do not create 64-bit bigints, even if the DBF header signature appears to war- rant it. -S Generate simple Geometries instead of MULTIgeometries. Shape files don't differ between LINESTRINGs and MULTILINESTRINGs, so shp2pgsql generates MULTILINESTRINGs by default. This switch will produce LINESTRINGs instead, but shp2pgsql will fail when it hits a real MULTILINESTRING. The same works for POLYGONs vs. MULTIPOLYGONs. -w Output WKT format, for use with older (0.x) versions of PostGIS. Note that this will introduce coordinate drifts and will drop M values from shapefiles. -W <encoding> Specify the character encoding of Shapefile's attributes. If this option is used the output will be encoded in UTF-8. -I Create a GiST index on the geometry column. -N <policy> Specify NULL geometries handling policy (insert,skip,abort). Default: insert. -? Display version and usage information. INSTALLATION To compile the program from source, simply run "make" in the source directory. Then copy the binary in your shell search path (or wherever you like). This text is also available as a man page in the ../doc/man/ directory, ready for copying it into the manual search path on unixoid systems. EXAMPLES An example session using the loader to create an input file and upload- ing it might look like this: # shp2pgsql shaperoads roadstable roadsdb > roads.sql # psql -d roadsdb -f roads.sql A conversion and upload can be done all in one step using UNIX pipes: # shp2pgsql shaperoads roadstable roadsdb | psql -d roadsdb AUTHORS Originally written by Jeff Lounsbury <jeffloun@refractions.net>. Improved and maintained by Sandro Santilli <strk@refractions.net>. Includes small contributions and improvements by others. This application uses functionality from shapelib 1.2.9 by Frank Warmerdam <warmerda@gdal.velocet.ca> to read from ESRI Shape files. SEE ALSO pgsql2shp(1) More information is available at http://postgis.refractions.net shp2pgsql(1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shp2pgsql-gui.1������������������������������������������������������0000644�0000000�0000000�00000003775�12172365411�017633� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH SHP2PGSQL-GUI 1 "January 14, 2012" "" "PostGIS" .SH NAME shp2pgsql-gui \- Graphical User Interface for shp2pgsql .SH SYNOPSIS .B shp2pgsql-gui .RI [ options ] .br .SH DESCRIPTION This manual page documents briefly the .B shp2pgsql-gui command. .PP .B shp2pgsql-gui is a program that converts ESRI Shape files into SQL statements and imports these statements to a PostGIS/PostgreSQL database. The GUI allows the user to set the shape file to import, the PostGIS/PostgreSQL connection parameters and some options related to the table where the data will be imported to. .PP .B shp2pgsql-gui can be called with some command line options that fill the PostGIS/PostgreSQL server connection parameters in. .SH OPTIONS .TP .B -d \fIdatabase\fP Specifies the name of the database where the data will be imported to. .TP .B -h \fIhost\fP Specifies the host name of the machine on which the PostGIS/PostgreSQL server is running. .TP .B -p \fIport\fP Specifies the TCP port on which the PostGIS/PostgreSQL server is listening for connections. .TP .B -U \fIusername\fP Specifies the username with which the user will connect to the database. .TP .B -W \fIpassword\fP Specifies the password with which the user will connect to the database. .TP .B -? Shows help about shp2pgsql-gui command line arguments. .SH "SEE ALSO" shp2pgsql(1), pgsql2shp(1) The documentation of pgsql2shp, shp2pgsql and shp2pgsql-gui in HTML format is available on the filesystem at /usr/share/doc/postgis. .SH AUTHOR shp2pgsql-gui was written by Paul Ramsey <pramsey@opengeo.org> and Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>. .PP This manual page was written by Mònica Ramírez Arceda <monica@probeta.net>, for the Debian project. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 and any later version published by the Free Software Foundation. .PP On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL-2. ���postgis-2.1.2+dfsg.orig/loader/TODO�����������������������������������������������������������������0000644�0000000�0000000�00000000000�11722777314�015517� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/pgsql2shp-core.c�����������������������������������������������������0000644�0000000�0000000�00000170026�12236025367�020057� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: pgsql2shp.c 5450 2010-03-22 19:38:14Z pramsey $ * * PostGIS - Spatial Types for PostgreSQL * http://www.postgis.org * * Copyright (C) 2001-2003 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * ********************************************************************** * * PostGIS to Shapefile converter * * Original Author: Jeff Lounsbury <jeffloun@refractions.net> * Contributions by: Sandro Santilli <strk@keybit.bet> * Enhanced by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * **********************************************************************/ #include "../postgis_config.h" #include "pgsql2shp-core.h" /* Solaris9 does not provide stdint.h */ /* #include <stdint.h> */ #include <inttypes.h> #ifdef HAVE_UNISTD_H /* for getpid() and getopt */ #include <unistd.h> #endif #ifdef __CYGWIN__ #include <sys/param.h> #endif #include "../liblwgeom/liblwgeom.h" /* for LWGEOM struct and funx */ #include "../liblwgeom/lwgeom_log.h" /* for LWDEBUG macros */ /* Maximum DBF field width (according to ARCGIS) */ #define MAX_DBF_FIELD_SIZE 254 /* Prototypes */ static int reverse_points(int num_points, double *x, double *y, double *z, double *m); static int is_clockwise(int num_points,double *x,double *y,double *z); static int is_bigendian(void); static SHPObject *create_point(SHPDUMPERSTATE *state, LWPOINT *lwpoint); static SHPObject *create_multipoint(SHPDUMPERSTATE *state, LWMPOINT *lwmultipoint); static SHPObject *create_polygon(SHPDUMPERSTATE *state, LWPOLY *lwpolygon); static SHPObject *create_multipolygon(SHPDUMPERSTATE *state, LWMPOLY *lwmultipolygon); static SHPObject *create_linestring(SHPDUMPERSTATE *state, LWLINE *lwlinestring); static SHPObject *create_multilinestring(SHPDUMPERSTATE *state, LWMLINE *lwmultilinestring); static char *nullDBFValue(char fieldType); static int getMaxFieldSize(PGconn *conn, char *schema, char *table, char *fname); static int getTableInfo(SHPDUMPERSTATE *state); static int projFileCreate(SHPDUMPERSTATE *state); /** * @brief Make appropriate formatting of a DBF value based on type. * Might return untouched input or pointer to static private * buffer: use return value right away. */ static char * goodDBFValue(char *in, char fieldType); /** @brief Binary to hexewkb conversion function */ char *convert_bytes_to_hex(uint8_t *ewkb, size_t size); static SHPObject * create_point(SHPDUMPERSTATE *state, LWPOINT *lwpoint) { SHPObject *obj; POINT4D p4d; double *xpts, *ypts, *zpts, *mpts; /* Allocate storage for points */ xpts = malloc(sizeof(double)); ypts = malloc(sizeof(double)); zpts = malloc(sizeof(double)); mpts = malloc(sizeof(double)); /* Grab the point: note getPoint4d will correctly handle the case where the POINTs don't contain Z or M coordinates */ p4d = getPoint4d(lwpoint->point, 0); xpts[0] = p4d.x; ypts[0] = p4d.y; zpts[0] = p4d.z; mpts[0] = p4d.m; LWDEBUGF(4, "Point: %g %g %g %g", xpts[0], ypts[0], zpts[0], mpts[0]); obj = SHPCreateObject(state->outshptype, -1, 0, NULL, NULL, 1, xpts, ypts, zpts, mpts); free(xpts); free(ypts); free(zpts); free(mpts); return obj; } static SHPObject * create_multipoint(SHPDUMPERSTATE *state, LWMPOINT *lwmultipoint) { SHPObject *obj; POINT4D p4d; int i; double *xpts, *ypts, *zpts, *mpts; /* Allocate storage for points */ xpts = malloc(sizeof(double) * lwmultipoint->ngeoms); ypts = malloc(sizeof(double) * lwmultipoint->ngeoms); zpts = malloc(sizeof(double) * lwmultipoint->ngeoms); mpts = malloc(sizeof(double) * lwmultipoint->ngeoms); /* Grab the points: note getPoint4d will correctly handle the case where the POINTs don't contain Z or M coordinates */ for (i = 0; i < lwmultipoint->ngeoms; i++) { p4d = getPoint4d(lwmultipoint->geoms[i]->point, 0); xpts[i] = p4d.x; ypts[i] = p4d.y; zpts[i] = p4d.z; mpts[i] = p4d.m; LWDEBUGF(4, "MultiPoint %d - Point: %g %g %g %g", i, xpts[i], ypts[i], zpts[i], mpts[i]); } obj = SHPCreateObject(state->outshptype, -1, 0, NULL, NULL, lwmultipoint->ngeoms, xpts, ypts, zpts, mpts); free(xpts); free(ypts); free(zpts); free(mpts); return obj; } static SHPObject * create_polygon(SHPDUMPERSTATE *state, LWPOLY *lwpolygon) { SHPObject *obj; POINT4D p4d; int i, j; double *xpts, *ypts, *zpts, *mpts; int *shpparts, shppointtotal = 0, shppoint = 0; /* Allocate storage for ring pointers */ shpparts = malloc(sizeof(int) * lwpolygon->nrings); /* First count through all the points in each ring so we now how much memory is required */ for (i = 0; i < lwpolygon->nrings; i++) shppointtotal += lwpolygon->rings[i]->npoints; /* Allocate storage for points */ xpts = malloc(sizeof(double) * shppointtotal); ypts = malloc(sizeof(double) * shppointtotal); zpts = malloc(sizeof(double) * shppointtotal); mpts = malloc(sizeof(double) * shppointtotal); LWDEBUGF(4, "Total number of points: %d", shppointtotal); /* Iterate through each ring setting up shpparts to point to the beginning of each ring */ for (i = 0; i < lwpolygon->nrings; i++) { /* For each ring, store the integer coordinate offset for the start of each ring */ shpparts[i] = shppoint; for (j = 0; j < lwpolygon->rings[i]->npoints; j++) { p4d = getPoint4d(lwpolygon->rings[i], j); xpts[shppoint] = p4d.x; ypts[shppoint] = p4d.y; zpts[shppoint] = p4d.z; mpts[shppoint] = p4d.m; LWDEBUGF(4, "Polygon Ring %d - Point: %g %g %g %g", i, xpts[shppoint], ypts[shppoint], zpts[shppoint], mpts[shppoint]); /* Increment the point counter */ shppoint++; } /* * First ring should be clockwise, * other rings should be counter-clockwise */ if ( i == 0 ) { if ( ! is_clockwise(lwpolygon->rings[i]->npoints, &xpts[shpparts[i]], &ypts[shpparts[i]], NULL) ) { LWDEBUG(4, "Outer ring not clockwise, forcing clockwise\n"); reverse_points(lwpolygon->rings[i]->npoints, &xpts[shpparts[i]], &ypts[shpparts[i]], &zpts[shpparts[i]], &mpts[shpparts[i]]); } } else { if ( is_clockwise(lwpolygon->rings[i]->npoints, &xpts[shpparts[i]], &ypts[shpparts[i]], NULL) ) { LWDEBUGF(4, "Inner ring %d not counter-clockwise, forcing counter-clockwise\n", i); reverse_points(lwpolygon->rings[i]->npoints, &xpts[shpparts[i]], &ypts[shpparts[i]], &zpts[shpparts[i]], &mpts[shpparts[i]]); } } } obj = SHPCreateObject(state->outshptype, -1, lwpolygon->nrings, shpparts, NULL, shppointtotal, xpts, ypts, zpts, mpts); free(xpts); free(ypts); free(zpts); free(mpts); free(shpparts); return obj; } static SHPObject * create_multipolygon(SHPDUMPERSTATE *state, LWMPOLY *lwmultipolygon) { SHPObject *obj; POINT4D p4d; int i, j, k; double *xpts, *ypts, *zpts, *mpts; int *shpparts, shppointtotal = 0, shppoint = 0, shpringtotal = 0, shpring = 0; /* NOTE: Multipolygons are stored in shapefiles as Polygon* shapes with multiple outer rings */ /* First count through each ring of each polygon so we now know much memory is required */ for (i = 0; i < lwmultipolygon->ngeoms; i++) { for (j = 0; j < lwmultipolygon->geoms[i]->nrings; j++) { shpringtotal++; shppointtotal += lwmultipolygon->geoms[i]->rings[j]->npoints; } } /* Allocate storage for ring pointers */ shpparts = malloc(sizeof(int) * shpringtotal); /* Allocate storage for points */ xpts = malloc(sizeof(double) * shppointtotal); ypts = malloc(sizeof(double) * shppointtotal); zpts = malloc(sizeof(double) * shppointtotal); mpts = malloc(sizeof(double) * shppointtotal); LWDEBUGF(4, "Total number of rings: %d Total number of points: %d", shpringtotal, shppointtotal); /* Iterate through each ring of each polygon in turn */ for (i = 0; i < lwmultipolygon->ngeoms; i++) { for (j = 0; j < lwmultipolygon->geoms[i]->nrings; j++) { /* For each ring, store the integer coordinate offset for the start of each ring */ shpparts[shpring] = shppoint; LWDEBUGF(4, "Ring offset: %d", shpring); for (k = 0; k < lwmultipolygon->geoms[i]->rings[j]->npoints; k++) { p4d = getPoint4d(lwmultipolygon->geoms[i]->rings[j], k); xpts[shppoint] = p4d.x; ypts[shppoint] = p4d.y; zpts[shppoint] = p4d.z; mpts[shppoint] = p4d.m; LWDEBUGF(4, "MultiPolygon %d Polygon Ring %d - Point: %g %g %g %g", i, j, xpts[shppoint], ypts[shppoint], zpts[shppoint], mpts[shppoint]); /* Increment the point counter */ shppoint++; } /* * First ring should be clockwise, * other rings should be counter-clockwise */ if ( j == 0 ) { if ( ! is_clockwise(lwmultipolygon->geoms[i]->rings[j]->npoints, &xpts[shpparts[shpring]], &ypts[shpparts[shpring]], NULL) ) { LWDEBUG(4, "Outer ring not clockwise, forcing clockwise\n"); reverse_points(lwmultipolygon->geoms[i]->rings[j]->npoints, &xpts[shpparts[shpring]], &ypts[shpparts[shpring]], &zpts[shpparts[shpring]], &mpts[shpparts[shpring]]); } } else { if ( is_clockwise(lwmultipolygon->geoms[i]->rings[j]->npoints, &xpts[shpparts[shpring]], &ypts[shpparts[shpring]], NULL) ) { LWDEBUGF(4, "Inner ring %d not counter-clockwise, forcing counter-clockwise\n", i); reverse_points(lwmultipolygon->geoms[i]->rings[j]->npoints, &xpts[shpparts[shpring]], &ypts[shpparts[shpring]], &zpts[shpparts[shpring]], &mpts[shpparts[shpring]]); } } /* Increment the ring counter */ shpring++; } } obj = SHPCreateObject(state->outshptype, -1, shpringtotal, shpparts, NULL, shppointtotal, xpts, ypts, zpts, mpts); free(xpts); free(ypts); free(zpts); free(mpts); free(shpparts); return obj; } static SHPObject * create_linestring(SHPDUMPERSTATE *state, LWLINE *lwlinestring) { SHPObject *obj; POINT4D p4d; int i; double *xpts, *ypts, *zpts, *mpts; /* Allocate storage for points */ xpts = malloc(sizeof(double) * lwlinestring->points->npoints); ypts = malloc(sizeof(double) * lwlinestring->points->npoints); zpts = malloc(sizeof(double) * lwlinestring->points->npoints); mpts = malloc(sizeof(double) * lwlinestring->points->npoints); /* Grab the points: note getPoint4d will correctly handle the case where the POINTs don't contain Z or M coordinates */ for (i = 0; i < lwlinestring->points->npoints; i++) { p4d = getPoint4d(lwlinestring->points, i); xpts[i] = p4d.x; ypts[i] = p4d.y; zpts[i] = p4d.z; mpts[i] = p4d.m; LWDEBUGF(4, "Linestring - Point: %g %g %g %g", i, xpts[i], ypts[i], zpts[i], mpts[i]); } obj = SHPCreateObject(state->outshptype, -1, 0, NULL, NULL, lwlinestring->points->npoints, xpts, ypts, zpts, mpts); free(xpts); free(ypts); free(zpts); free(mpts); return obj; } static SHPObject * create_multilinestring(SHPDUMPERSTATE *state, LWMLINE *lwmultilinestring) { SHPObject *obj; POINT4D p4d; int i, j; double *xpts, *ypts, *zpts, *mpts; int *shpparts, shppointtotal = 0, shppoint = 0; /* Allocate storage for ring pointers */ shpparts = malloc(sizeof(int) * lwmultilinestring->ngeoms); /* First count through all the points in each linestring so we now how much memory is required */ for (i = 0; i < lwmultilinestring->ngeoms; i++) shppointtotal += lwmultilinestring->geoms[i]->points->npoints; LWDEBUGF(3, "Total number of points: %d", shppointtotal); /* Allocate storage for points */ xpts = malloc(sizeof(double) * shppointtotal); ypts = malloc(sizeof(double) * shppointtotal); zpts = malloc(sizeof(double) * shppointtotal); mpts = malloc(sizeof(double) * shppointtotal); /* Iterate through each linestring setting up shpparts to point to the beginning of each line */ for (i = 0; i < lwmultilinestring->ngeoms; i++) { /* For each linestring, store the integer coordinate offset for the start of each line */ shpparts[i] = shppoint; for (j = 0; j < lwmultilinestring->geoms[i]->points->npoints; j++) { p4d = getPoint4d(lwmultilinestring->geoms[i]->points, j); xpts[shppoint] = p4d.x; ypts[shppoint] = p4d.y; zpts[shppoint] = p4d.z; mpts[shppoint] = p4d.m; LWDEBUGF(4, "Linestring %d - Point: %g %g %g %g", i, xpts[shppoint], ypts[shppoint], zpts[shppoint], mpts[shppoint]); /* Increment the point counter */ shppoint++; } } obj = SHPCreateObject(state->outshptype, -1, lwmultilinestring->ngeoms, shpparts, NULL, shppoint, xpts, ypts, zpts, mpts); free(xpts); free(ypts); free(zpts); free(mpts); return obj; } /*Reverse the clockwise-ness of the point list... */ static int reverse_points(int num_points, double *x, double *y, double *z, double *m) { int i,j; double temp; j = num_points -1; for (i=0; i <num_points; i++) { if (j <= i) { break; } temp = x[j]; x[j] = x[i]; x[i] = temp; temp = y[j]; y[j] = y[i]; y[i] = temp; if ( z ) { temp = z[j]; z[j] = z[i]; z[i] = temp; } if ( m ) { temp = m[j]; m[j] = m[i]; m[i] = temp; } j--; } return 1; } /* Return 1 if the points are in clockwise order */ static int is_clockwise(int num_points, double *x, double *y, double *z) { int i; double x_change,y_change,area; double *x_new, *y_new; /* the points, translated to the origin * for safer accuracy */ x_new = (double *)malloc(sizeof(double) * num_points); y_new = (double *)malloc(sizeof(double) * num_points); area=0.0; x_change = x[0]; y_change = y[0]; for (i=0; i < num_points ; i++) { x_new[i] = x[i] - x_change; y_new[i] = y[i] - y_change; } for (i=0; i < num_points - 1; i++) { /* calculate the area */ area += (x[i] * y[i+1]) - (y[i] * x[i+1]); } if (area > 0 ) { free(x_new); free(y_new); return 0; /*counter-clockwise */ } else { free(x_new); free(y_new); return 1; /*clockwise */ } } /* * Return the maximum octet_length from given table. * Return -1 on error. */ static int getMaxFieldSize(PGconn *conn, char *schema, char *table, char *fname) { int size; char *query; PGresult *res; /*( this is ugly: don't forget counting the length */ /* when changing the fixed query strings ) */ if ( schema ) { query = (char *)malloc(strlen(fname)+strlen(table)+ strlen(schema)+46); sprintf(query, "select max(octet_length(\"%s\"::text)) from \"%s\".\"%s\"", fname, schema, table); } else { query = (char *)malloc(strlen(fname)+strlen(table)+46); sprintf(query, "select max(octet_length(\"%s\"::text)) from \"%s\"", fname, table); } LWDEBUGF(4, "maxFieldLenQuery: %s\n", query); res = PQexec(conn, query); free(query); if ( ! res || PQresultStatus(res) != PGRES_TUPLES_OK ) { printf( _("Querying for maximum field length: %s"), PQerrorMessage(conn)); return -1; } if (PQntuples(res) <= 0 ) { PQclear(res); return -1; } size = atoi(PQgetvalue(res, 0, 0)); PQclear(res); return size; } static int is_bigendian(void) { int test = 1; if ( (((char *)(&test))[0]) == 1) { return 0; /*NDR (little_endian) */ } else { return 1; /*XDR (big_endian) */ } } char * shapetypename(int num) { switch (num) { case SHPT_NULL: return "Null Shape"; case SHPT_POINT: return "Point"; case SHPT_ARC: return "PolyLine"; case SHPT_POLYGON: return "Polygon"; case SHPT_MULTIPOINT: return "MultiPoint"; case SHPT_POINTZ: return "PointZ"; case SHPT_ARCZ: return "PolyLineZ"; case SHPT_POLYGONZ: return "PolygonZ"; case SHPT_MULTIPOINTZ: return "MultiPointZ"; case SHPT_POINTM: return "PointM"; case SHPT_ARCM: return "PolyLineM"; case SHPT_POLYGONM: return "PolygonM"; case SHPT_MULTIPOINTM: return "MultiPointM"; case SHPT_MULTIPATCH: return "MultiPatch"; default: return "Unknown"; } } /* This is taken and adapted from dbfopen.c of shapelib */ static char * nullDBFValue(char fieldType) { switch (fieldType) { case FTInteger: case FTDouble: /* NULL numeric fields have value "****************" */ return "****************"; case FTDate: /* NULL date fields have value "00000000" */ return " "; case FTLogical: /* NULL boolean fields have value "?" */ return "?"; default: /* empty string fields are considered NULL */ return ""; } } /** * @brief Make appropriate formatting of a DBF value based on type. * Might return untouched input or pointer to static private * buffer: use return value right away. */ static char * goodDBFValue(char *in, char fieldType) { /* * We only work on FTLogical and FTDate. * FTLogical is 1 byte, FTDate is 8 byte (YYYYMMDD) * We allocate space for 9 bytes to take * terminating null into account */ static char buf[9]; switch (fieldType) { case FTLogical: buf[0] = toupper(in[0]); buf[1]='\0'; return buf; case FTDate: buf[0]=in[0]; /* Y */ buf[1]=in[1]; /* Y */ buf[2]=in[2]; /* Y */ buf[3]=in[3]; /* Y */ buf[4]=in[5]; /* M */ buf[5]=in[6]; /* M */ buf[6]=in[8]; /* D */ buf[7]=in[9]; /* D */ buf[8]='\0'; return buf; default: return in; } } char *convert_bytes_to_hex(uint8_t *ewkb, size_t size) { int i; char *hexewkb; /* Convert the byte stream to a hex string using liblwgeom's deparse_hex function */ hexewkb = malloc(size * 2 + 1); for (i=0; i<size; ++i) deparse_hex(ewkb[i], &hexewkb[i * 2]); hexewkb[size * 2] = '\0'; return hexewkb; } /** * @brief Creates ESRI .prj file for this shp output * It looks in the spatial_ref_sys table and outputs the srtext field for this data * If data is a table will use geometry_columns, if a query or view will read SRID from query output. * @warning Will give warning and not output a .prj file if SRID is -1, Unknown, mixed SRIDS or not found in spatial_ref_sys. The dbf and shp will still be output. */ static int projFileCreate(SHPDUMPERSTATE *state) { FILE *fp; char *pszFullname, *pszBasename; int i, result; char *pszFilename = state->shp_file; char *schema = state->schema; char *table = state->table; char *geo_col_name = state->geo_col_name; char *srtext; char *query; char *esc_schema; char *esc_table; char *esc_geo_col_name; int error; PGresult *res; int size; /*********** *** I'm multiplying by 2 instead of 3 because I am too lazy to figure out how many characters to add *** after escaping if any **/ size = 1000; if ( schema ) { size += 3 * strlen(schema); } size += 1000; esc_table = (char *) malloc(3 * strlen(table) + 1); esc_geo_col_name = (char *) malloc(3 * strlen(geo_col_name) + 1); PQescapeStringConn(state->conn, esc_table, table, strlen(table), &error); PQescapeStringConn(state->conn, esc_geo_col_name, geo_col_name, strlen(geo_col_name), &error); /** make our address space large enough to hold query with table/schema **/ query = (char *) malloc(size); if ( ! query ) return 0; /* out of virtual memory */ /************************************************** * Get what kind of spatial ref is the selected geometry field * We first check the geometry_columns table for a match and then if no match do a distinct against the table * NOTE: COALESCE does a short-circuit check returning the faster query result and skipping the second if first returns something * Escaping quotes in the schema and table in query may not be necessary except to prevent malicious attacks * or should someone be crazy enough to have quotes or other weird character in their table, column or schema names **************************************************/ if ( schema ) { esc_schema = (char *) malloc(2 * strlen(schema) + 1); PQescapeStringConn(state->conn, esc_schema, schema, strlen(schema), &error); sprintf(query, "SELECT COALESCE((SELECT sr.srtext " " FROM geometry_columns As gc INNER JOIN spatial_ref_sys sr ON sr.srid = gc.srid " " WHERE gc.f_table_schema = '%s' AND gc.f_table_name = '%s' AND gc.f_geometry_column = '%s' LIMIT 1), " " (SELECT CASE WHEN COUNT(DISTINCT sr.srid) > 1 THEN 'm' ELSE MAX(sr.srtext) END As srtext " " FROM \"%s\".\"%s\" As g INNER JOIN spatial_ref_sys sr ON sr.srid = ST_SRID((g.\"%s\")::geometry)) , ' ') As srtext ", esc_schema, esc_table,esc_geo_col_name, schema, table, geo_col_name); free(esc_schema); } else { sprintf(query, "SELECT COALESCE((SELECT sr.srtext " " FROM geometry_columns As gc INNER JOIN spatial_ref_sys sr ON sr.srid = gc.srid " " WHERE gc.f_table_name = '%s' AND gc.f_geometry_column = '%s' AND pg_table_is_visible((gc.f_table_schema || '.' || gc.f_table_name)::regclass) LIMIT 1), " " (SELECT CASE WHEN COUNT(DISTINCT sr.srid) > 1 THEN 'm' ELSE MAX(sr.srtext) END as srtext " " FROM \"%s\" As g INNER JOIN spatial_ref_sys sr ON sr.srid = ST_SRID((g.\"%s\")::geometry)), ' ') As srtext ", esc_table, esc_geo_col_name, table, geo_col_name); } LWDEBUGF(3,"%s\n",query); free(esc_table); free(esc_geo_col_name); res = PQexec(state->conn, query); if ( ! res || PQresultStatus(res) != PGRES_TUPLES_OK ) { snprintf(state->message, SHPDUMPERMSGLEN, _("WARNING: Could not execute prj query: %s"), PQresultErrorMessage(res)); PQclear(res); free(query); return SHPDUMPERWARN; } for (i=0; i < PQntuples(res); i++) { srtext = PQgetvalue(res, i, 0); if (strcmp(srtext,"m") == 0) { snprintf(state->message, SHPDUMPERMSGLEN, _("WARNING: Mixed set of spatial references. No prj file will be generated")); PQclear(res); free(query); return SHPDUMPERWARN; } else { if (srtext[0] == ' ') { snprintf(state->message, SHPDUMPERMSGLEN, _("WARNING: Cannot determine spatial reference (empty table or unknown spatial ref). No prj file will be generated.")); PQclear(res); free(query); return SHPDUMPERWARN; } else { /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszFilename)+5); strcpy( pszBasename, pszFilename ); for ( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if ( pszBasename[i] == '.' ) pszBasename[i] = '\0'; pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.prj", pszBasename ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Create the file. */ /* -------------------------------------------------------------------- */ fp = fopen( pszFullname, "wb" ); if ( fp == NULL ) { return 0; } result = fputs (srtext,fp); LWDEBUGF(3, "\n result %d proj SRText is %s .\n", result, srtext); fclose( fp ); free( pszFullname ); } } } PQclear(res); free(query); return SHPDUMPEROK; } static int getTableInfo(SHPDUMPERSTATE *state) { /* Get some more information from the table: - count = total number of geometries/geographies in the table and if we have found a suitable geometry column: - max = maximum number of dimensions within the geometry/geography column - geometrytype = string representing the geometry/geography type, e.g. POINT Since max/geometrytype already require a sequential scan of the table, we may as well get the row count too. */ PGresult *res; char *query; int tmpint; if (state->geo_col_name) { /* Include geometry information */ if (state->schema) { query = malloc(150 + 4 * strlen(state->geo_col_name) + strlen(state->schema) + strlen(state->table)); sprintf(query, "SELECT count(\"%s\"), max(ST_zmflag(\"%s\"::geometry)), geometrytype(\"%s\"::geometry) FROM \"%s\".\"%s\" GROUP BY geometrytype(\"%s\"::geometry)", state->geo_col_name, state->geo_col_name, state->geo_col_name, state->schema, state->table, state->geo_col_name); } else { query = malloc(150 + 4 * strlen(state->geo_col_name) + strlen(state->table)); sprintf(query, "SELECT count(\"%s\"), max(ST_zmflag(\"%s\"::geometry)), geometrytype(\"%s\"::geometry) FROM \"%s\" GROUP BY geometrytype(\"%s\"::geometry)", state->geo_col_name, state->geo_col_name, state->geo_col_name, state->table, state->geo_col_name); } } else { /* Otherwise... just a row count will do */ if (state->schema) { query = malloc(40 + strlen(state->schema) + strlen(state->table)); sprintf(query, "SELECT count(1) FROM \"%s\".\"%s\"", state->schema, state->table); } else { query = malloc(40 + strlen(state->table)); sprintf(query, "SELECT count(1) FROM \"%s\"", state->table); } } LWDEBUGF(3, "Table metadata query: %s\n", query); res = PQexec(state->conn, query); free(query); if (PQresultStatus(res) != PGRES_TUPLES_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("ERROR: Could not execute table metadata query: %s"), PQresultErrorMessage(res)); PQclear(res); return SHPDUMPERERR; } /* Make sure we error if the table is empty */ if (PQntuples(res) == 0) { snprintf(state->message, SHPDUMPERMSGLEN, _("ERROR: Could not determine table metadata (empty table)")); PQclear(res); return SHPDUMPERERR; } /* If we have a geo* column, get the dimension, type and count information */ if (state->geo_col_name) { /* If a table has a geometry column containing mixed types then the metadata query will return multiple rows. We need to cycle through all rows to determine if the type combinations are valid. Note that if we find a combination of a MULTI and non-MULTI geometry of the same type, we always choose MULTI to ensure that everything gets output correctly. The create_* conversion functions are clever enough to up-convert the non-MULTI geometry to a MULTI in this case. */ int dummy, i; uint8_t type = 0; int typefound = 0, typemismatch = 0; state->rowcount = 0; for (i = 0; i < PQntuples(res); i++) { geometry_type_from_string(PQgetvalue(res, i, 2), &type, &dummy, &dummy); /* We can always set typefound to that of the first column found */ if (!typefound) typefound = type; switch (type) { case MULTIPOINTTYPE: if (typefound != MULTIPOINTTYPE && typefound != POINTTYPE) typemismatch = 1; else typefound = MULTIPOINTTYPE; break; case MULTILINETYPE: if (typefound != MULTILINETYPE && typefound != LINETYPE) typemismatch = 1; else typefound = MULTILINETYPE; break; case MULTIPOLYGONTYPE: if (typefound != MULTIPOLYGONTYPE && typefound != POLYGONTYPE) typemismatch = 1; else typefound = MULTIPOLYGONTYPE; break; case POINTTYPE: if (typefound != POINTTYPE && typefound != MULTIPOINTTYPE) typemismatch = 1; else if (!lwtype_is_collection(type)) typefound = POINTTYPE; break; case LINETYPE: if (typefound != LINETYPE && typefound != MULTILINETYPE) typemismatch = 1; else if (!lwtype_is_collection(type)) typefound = LINETYPE; break; case POLYGONTYPE: if (typefound != POLYGONTYPE && typefound != MULTIPOLYGONTYPE) typemismatch = 1; else if (!lwtype_is_collection(type)) typefound = POLYGONTYPE; break; } /* Update the rowcount for each type */ state->rowcount += atoi(PQgetvalue(res, i, 0)); } /* Flag an error if the table contains incompatible geometry combinations */ if (typemismatch) { snprintf(state->message, SHPDUMPERMSGLEN, _("ERROR: Incompatible mixed geometry types in table")); PQclear(res); return SHPDUMPERERR; } /* Set up the dimension output type (note: regardless of how many rows the table metadata query returns, this value will be the same. But we'll choose to use the first value anyway) */ tmpint = atoi(PQgetvalue(res, 0, 1)); switch (tmpint) { case 0: state->outtype = 's'; break; case 1: state->outtype = 'm'; break; default: state->outtype = 'z'; break; } /* Set up the shapefile output type based upon the dimension information */ switch (typefound) { case POINTTYPE: switch(state->outtype) { case 'z': state->outshptype = SHPT_POINTZ; break; case 'm': state->outshptype = SHPT_POINTM; break; default: state->outshptype = SHPT_POINT; } break; case MULTIPOINTTYPE: switch(state->outtype) { case 'z': state->outshptype = SHPT_MULTIPOINTZ; break; case 'm': state->outshptype = SHPT_MULTIPOINTM; break; default: state->outshptype = SHPT_MULTIPOINT; } break; case LINETYPE: case MULTILINETYPE: switch(state->outtype) { case 'z': state->outshptype = SHPT_ARCZ; break; case 'm': state->outshptype = SHPT_ARCM; break; default: state->outshptype = SHPT_ARC; } break; case POLYGONTYPE: case MULTIPOLYGONTYPE: switch(state->outtype) { case 'z': state->outshptype = SHPT_POLYGONZ; break; case 'm': state->outshptype = SHPT_POLYGONM; break; default: state->outshptype = SHPT_POLYGON; } break; } } else { /* Without a geo* column the total is simply the first (COUNT) column */ state->rowcount = atoi(PQgetvalue(res, 0, 0)); } /* Dispose of the result set */ PQclear(res); return SHPDUMPEROK; } /* Default configuration settings */ void set_dumper_config_defaults(SHPDUMPERCONFIG *config) { config->conn = malloc(sizeof(SHPCONNECTIONCONFIG)); config->conn->host = NULL; config->conn->port = NULL; config->conn->database = NULL; config->conn->username = NULL; config->conn->password = NULL; config->table = NULL; config->schema = NULL; config->usrquery = NULL; config->binary = 0; config->shp_file = NULL; config->dswitchprovided = 0; config->includegid = 0; config->unescapedattrs = 0; config->geo_col_name = NULL; config->keep_fieldname_case = 0; config->fetchsize = 100; config->column_map_filename = NULL; } /** * Read the content of filename into a symbol map stored * at state->column_map_filename. * * The content of the file is lines of two names separated by * white space and no trailing or leading space: * * COLUMNNAME DBFFIELD1 * AVERYLONGCOLUMNNAME DBFFIELD2 * * etc. * * It is the reponsibility of the caller to reclaim the allocated space * as follows: * * free(state->column_map_pgfieldnames[]) to free the column names * free(state->column_map_dbffieldnames[]) to free the dbf field names * * @param state : container of state->column_map where the malloc'd * symbol map will be stored. */ static int read_column_map(SHPDUMPERSTATE *state) { FILE *fptr; char linebuffer[1024]; char *tmpstr, *tmpptr; int curmapsize, fieldnamesize; /* Read column map file and load the column_map_dbffieldnames and column_map_pgfieldnames arrays */ fptr = fopen(state->config->column_map_filename, "r"); if (!fptr) { /* Return an error */ snprintf(state->message, SHPDUMPERMSGLEN, _("ERROR: Unable to open column map file %s"), state->config->column_map_filename); return SHPDUMPERERR; } /* First count how many columns we have... */ while (fgets(linebuffer, 1024, fptr) != NULL) state->column_map_size++; /* Now we know the final size, allocate the arrays and load the data */ fseek(fptr, 0, SEEK_SET); state->column_map_pgfieldnames = (char **)malloc(sizeof(char *) * state->column_map_size); state->column_map_dbffieldnames = (char **)malloc(sizeof(char *) * state->column_map_size); /* Read in a line at a time... */ curmapsize = 0; while (fgets(linebuffer, 1024, fptr) != NULL) { /* Split into two separate strings - pgfieldname followed by dbffieldname */ /* First locate end of first column (pgfieldname) */ for (tmpptr = tmpstr = linebuffer; *tmpptr != '\t' && *tmpptr != '\n' && *tmpptr != ' ' && *tmpptr != '\0'; tmpptr++); fieldnamesize = tmpptr - tmpstr; /* Allocate memory and copy the string ensuring it is terminated */ state->column_map_pgfieldnames[curmapsize] = malloc(fieldnamesize + 1); strncpy(state->column_map_pgfieldnames[curmapsize], tmpstr, fieldnamesize); state->column_map_pgfieldnames[curmapsize][fieldnamesize] = '\0'; /* Now swallow up any whitespace */ for (tmpstr = tmpptr; *tmpptr == '\t' || *tmpptr == '\n' || *tmpptr == ' '; tmpptr++) { ; /* Do nothing */ } /* Finally locate end of second column (dbffieldname) */ for (tmpstr = tmpptr; *tmpptr != '\t' && *tmpptr != '\n' && *tmpptr != ' ' && *tmpptr != '\0'; tmpptr++); fieldnamesize = tmpptr - tmpstr; /* Allocate memory and copy the string ensuring it is terminated */ state->column_map_dbffieldnames[curmapsize] = malloc(fieldnamesize + 1); strncpy(state->column_map_dbffieldnames[curmapsize], tmpstr, fieldnamesize); state->column_map_dbffieldnames[curmapsize][fieldnamesize] = '\0'; /* Error out if the dbffieldname is > 10 chars */ if (strlen(state->column_map_dbffieldnames[curmapsize]) > 10) { snprintf(state->message, SHPDUMPERMSGLEN, _("ERROR: column map file specifies a DBF field name \"%s\" which is longer than 10 characters"), state->column_map_dbffieldnames[curmapsize]); return SHPDUMPERERR; } curmapsize++; } fclose(fptr); /* Done; return success */ return SHPDUMPEROK; } /* Create a new shapefile state object */ SHPDUMPERSTATE * ShpDumperCreate(SHPDUMPERCONFIG *config) { SHPDUMPERSTATE *state; /* Create a new state object and assign the config to it */ state = malloc(sizeof(SHPDUMPERSTATE)); state->config = config; /* Set any state defaults */ state->conn = NULL; state->outtype = 's'; state->geom_oid = 0; state->geog_oid = 0; state->schema = NULL; state->table = NULL; state->geo_col_name = NULL; state->fetch_query = NULL; state->main_scan_query = NULL; state->dbffieldnames = NULL; state->dbffieldtypes = NULL; state->pgfieldnames = NULL; state->column_map_pgfieldnames = NULL; state->column_map_dbffieldnames = NULL; state->column_map_size = 0; state->big_endian = is_bigendian(); return state; } /* Generate the database connection string used by a state */ char * ShpDumperGetConnectionStringFromConn(SHPCONNECTIONCONFIG *conn) { char *connstring; int connlen; connlen = 64 + (conn->host ? strlen(conn->host) : 0) + (conn->port ? strlen(conn->port) : 0) + (conn->username ? strlen(conn->username) : 0) + (conn->password ? strlen(conn->password) : 0) + (conn->database ? strlen(conn->database) : 0); connstring = malloc(connlen); memset(connstring, 0, connlen); if (conn->host) { strcat(connstring, " host="); strcat(connstring, conn->host); } if (conn->port) { strcat(connstring, " port="); strcat(connstring, conn->port); } if (conn->username) { strcat(connstring, " user="); strcat(connstring, conn->username); } if (conn->password) { strcat(connstring, " password='"); strcat(connstring, conn->password); strcat(connstring, "'"); } if (conn->database) { strcat(connstring, " dbname="); strcat(connstring, conn->database); } return connstring; } /* Connect to the database and identify the version of PostGIS (and any other capabilities required) */ int ShpDumperConnectDatabase(SHPDUMPERSTATE *state) { PGresult *res; char *connstring, *tmpvalue; /* Generate the PostgreSQL connection string */ connstring = ShpDumperGetConnectionStringFromConn(state->config->conn); /* Connect to the database */ state->conn = PQconnectdb(connstring); if (PQstatus(state->conn) == CONNECTION_BAD) { snprintf(state->message, SHPDUMPERMSGLEN, "%s", PQerrorMessage(state->conn)); free(connstring); return SHPDUMPERERR; } /* Set datestyle to ISO */ res = PQexec(state->conn, "SET DATESTYLE='ISO'"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { snprintf(state->message, SHPDUMPERMSGLEN, "%s", PQresultErrorMessage(res)); PQclear(res); free(connstring); return SHPDUMPERERR; } PQclear(res); /* Retrieve PostGIS major version */ res = PQexec(state->conn, "SELECT postgis_version()"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { snprintf(state->message, SHPDUMPERMSGLEN, "%s", PQresultErrorMessage(res)); PQclear(res); free(connstring); return SHPDUMPERERR; } tmpvalue = PQgetvalue(res, 0, 0); state->pgis_major_version = atoi(tmpvalue); PQclear(res); /* Find the OID for the geometry type */ res = PQexec(state->conn, "SELECT oid FROM pg_type WHERE typname = 'geometry'"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error looking up geometry oid: %s"), PQresultErrorMessage(res)); PQclear(res); free(connstring); return SHPDUMPERERR; } if (PQntuples(res) > 0) { tmpvalue = PQgetvalue(res, 0, 0); state->geom_oid = atoi(tmpvalue); } else { snprintf(state->message, SHPDUMPERMSGLEN, _("Geometry type unknown (have you enabled postgis?)")); PQclear(res); free(connstring); return SHPDUMPERERR; } PQclear(res); /* Find the OID for the geography type */ res = PQexec(state->conn, "SELECT oid FROM pg_type WHERE typname = 'geography'"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error looking up geography oid: %s"), PQresultErrorMessage(res)); PQclear(res); free(connstring); return SHPDUMPERERR; } if (PQntuples(res) > 0) { /* Old databases don't have a geography type, so don't fail if we don't find it */ tmpvalue = PQgetvalue(res, 0, 0); state->geog_oid = atoi(tmpvalue); } PQclear(res); free(connstring); return SHPDUMPEROK; } /* Open the specified table in preparation for extracting rows */ int ShpDumperOpenTable(SHPDUMPERSTATE *state) { PGresult *res; char buf[256]; char *query; int gidfound = 0, i, j, ret, status; /* Open the column map if one was specified */ if (state->config->column_map_filename) { ret = read_column_map(state); if (ret != SHPDUMPEROK) return SHPDUMPERERR; } /* If a user-defined query has been specified, create and point the state to our new table */ if (state->config->usrquery) { state->table = malloc(20 + 20); // string + max long precision sprintf(state->table, "__pgsql2shp%lu_tmp_table", (long)getpid()); query = malloc(32 + strlen(state->table) + strlen(state->config->usrquery)); sprintf(query, "CREATE TEMP TABLE \"%s\" AS %s", state->table, state->config->usrquery); res = PQexec(state->conn, query); free(query); /* Execute the code to create the table */ if (PQresultStatus(res) != PGRES_COMMAND_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error executing user query: %s"), PQresultErrorMessage(res)); PQclear(res); return SHPDUMPERERR; } } else { /* Simply point the state to copies of the supplied schema and table */ state->table = strdup(state->config->table); if (state->config->schema) state->schema = strdup(state->config->schema); } /* Get the list of columns and their types for the selected table */ if (state->schema) { query = malloc(250 + strlen(state->schema) + strlen(state->table)); sprintf(query, "SELECT a.attname, a.atttypid, " "a.atttypmod, a.attlen FROM " "pg_attribute a, pg_class c, pg_namespace n WHERE " "n.nspname = '%s' AND a.attrelid = c.oid AND " "n.oid = c.relnamespace AND " "a.atttypid != 0 AND " "a.attnum > 0 AND c.relname = '%s'", state->schema, state->table); } else { query = malloc(250 + strlen(state->table)); sprintf(query, "SELECT a.attname, a.atttypid, " "a.atttypmod, a.attlen FROM " "pg_attribute a, pg_class c WHERE " "a.attrelid = c.oid and a.attnum > 0 AND " "a.atttypid != 0 AND " "c.relname = '%s' AND " "pg_catalog.pg_table_is_visible(c.oid)", state->table); } LWDEBUGF(3, "query is: %s\n", query); res = PQexec(state->conn, query); free(query); if (PQresultStatus(res) != PGRES_TUPLES_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error querying for attributes: %s"), PQresultErrorMessage(res)); PQclear(res); return SHPDUMPERERR; } if (!PQntuples(res)) { snprintf(state->message, SHPDUMPERMSGLEN, _("Table %s does not exist"), state->table); PQclear(res); return SHPDUMPERERR; } /* If a shapefile name was specified, use it. Otherwise simply use the table name. */ if (state->config->shp_file != NULL) state->shp_file = state->config->shp_file; else state->shp_file = state->table; /* Create the dbf file */ state->dbf = DBFCreate(state->shp_file); if (!state->dbf) { snprintf(state->message, SHPDUMPERMSGLEN, _("Could not create dbf file %s"), state->shp_file); return SHPDUMPERERR; } /* * Scan the result setting fields to be returned in mainscan * query, filling the type_ary, and creating .dbf and .shp files. */ state->dbffieldnames = malloc(sizeof(char *) * PQntuples(res)); state->dbffieldtypes = malloc(sizeof(int) * PQntuples(res)); state->pgfieldnames = malloc(sizeof(char *) * PQntuples(res)); state->pgfieldlens = malloc(sizeof(int) * PQntuples(res)); state->pgfieldtypmods = malloc(sizeof(int) * PQntuples(res)); state->fieldcount = 0; int tmpint = 1; for (i = 0; i < PQntuples(res); i++) { char *ptr; int pgfieldtype, pgtypmod, pgfieldlen; char *pgfieldname; int dbffieldtype, dbffieldsize, dbffielddecs; char *dbffieldname; pgfieldname = PQgetvalue(res, i, 0); pgfieldtype = atoi(PQgetvalue(res, i, 1)); pgtypmod = atoi(PQgetvalue(res, i, 2)); pgfieldlen = atoi(PQgetvalue(res, i, 3)); dbffieldtype = -1; dbffieldsize = 0; dbffielddecs = 0; /* * This is a geometry/geography column */ if (pgfieldtype == state->geom_oid || pgfieldtype == state->geog_oid) { /* If no geometry/geography column has been found yet... */ if (!state->geo_col_name) { /* If either no geo* column name was provided (in which case this is the first match) or we match the provided column name, we have found our geo* column */ if (!state->config->geo_col_name || !strcmp(state->config->geo_col_name, pgfieldname)) { dbffieldtype = 9; state->geo_col_name = strdup(pgfieldname); } } } /* * Everything else (non geometries) will be * a DBF attribute. */ /* Skip gid (if not asked to do otherwise */ if (!strcmp(pgfieldname, "gid") ) { gidfound = 1; if (!state->config->includegid) continue; } /* Unescape any reserved column names */ ptr = pgfieldname; if (!state->config->unescapedattrs) { if (*ptr == '_') ptr += 2; } /* * This needs special handling since both xmin and _xmin * becomes __xmin when escaped */ /* Limit dbf field name to 10-digits */ dbffieldname = malloc(11); strncpy(dbffieldname, ptr, 10); dbffieldname[10] = '\0'; /* If a column map file has been passed in, use this to create the dbf field name from the PostgreSQL column name */ if (state->column_map_size > 0) { for (j = 0; j < state->column_map_size; j++) { if (!strcasecmp(state->column_map_pgfieldnames[j], dbffieldname)) { strncpy(dbffieldname, state->column_map_dbffieldnames[j], 10); dbffieldname[10] = '\0'; } } } /* * make sure the fields all have unique names, */ tmpint = 1; for (j = 0; j < state->fieldcount; j++) { if (!strncasecmp(dbffieldname, state->dbffieldnames[j], 10)) { sprintf(dbffieldname, "%.7s_%.2d", ptr, tmpint++); continue; } } /* make UPPERCASE if keep_fieldname_case = 0 */ if (!state->config->keep_fieldname_case) for (j = 0; j < strlen(dbffieldname); j++) dbffieldname[j] = toupper(dbffieldname[j]); /* Issue warning if column has been renamed */ if (strcasecmp(dbffieldname, pgfieldname)) { /* Note: we concatenate all warnings from the main loop as this is useful information */ snprintf(buf, 256, _("Warning, field %s renamed to %s\n"), pgfieldname, dbffieldname); strncat(state->message, buf, SHPDUMPERMSGLEN - strlen(state->message)); ret = SHPDUMPERWARN; } /* * Find appropriate type of dbf attributes */ /* int2 type */ if (pgfieldtype == 21) { /* * Longest text representation for * an int2 type (16bit) is 6 bytes * (-32768) */ dbffieldtype = FTInteger; dbffieldsize = 6; dbffielddecs = 0; } /* int4 type */ else if (pgfieldtype == 23) { /* * Longest text representation for * an int4 type (32bit) is 11 bytes * (-2147483648) */ dbffieldtype = FTInteger; dbffieldsize = 11; dbffielddecs = 0; } /* int8 type */ else if (pgfieldtype == 20) { /* * Longest text representation for * an int8 type (64bit) is 20 bytes * (-9223372036854775808) */ dbffieldtype = FTInteger; dbffieldsize = 19; dbffielddecs = 0; } /* * double or numeric types: * 700: float4 * 701: float8 * 1700: numeric * * * TODO: stricter handling of sizes */ else if (pgfieldtype == 700 || pgfieldtype == 701 || pgfieldtype == 1700) { dbffieldtype = FTDouble; dbffieldsize = 32; dbffielddecs = 10; } /* * Boolean field, we use FTLogical */ else if (pgfieldtype == 16) { dbffieldtype = FTLogical; dbffieldsize = 2; dbffielddecs = 0; } /* * Date field */ else if (pgfieldtype == 1082) { dbffieldtype = FTDate; dbffieldsize = 8; dbffielddecs = 0; } /* * time, timetz, timestamp, or timestamptz field. */ else if (pgfieldtype == 1083 || pgfieldtype == 1266 || pgfieldtype == 1114 || pgfieldtype == 1184) { int secondsize; switch (pgtypmod) { case -1: secondsize = 6 + 1; break; case 0: secondsize = 0; break; default: secondsize = pgtypmod + 1; break; } /* We assume the worst case scenario for all of these: * date = '5874897-12-31' = 13 * date = '294276-11-20' = 12 (with --enable-interger-datetimes) * time = '00:00:00' = 8 * zone = '+01:39:52' = 9 (see Europe/Helsinki around 1915) */ /* time */ if (pgfieldtype == 1083) { dbffieldsize = 8 + secondsize; } /* timetz */ else if (pgfieldtype == 1266) { dbffieldsize = 8 + secondsize + 9; } /* timestamp */ else if (pgfieldtype == 1114) { dbffieldsize = 13 + 1 + 8 + secondsize; } /* timestamptz */ else if (pgfieldtype == 1184) { dbffieldsize = 13 + 1 + 8 + secondsize + 9; } dbffieldtype = FTString; dbffielddecs = 0; } /* * uuid type 36 bytes (12345678-9012-3456-7890-123456789012) */ else if (pgfieldtype == 2950) { dbffieldtype = FTString; dbffieldsize = 36; dbffielddecs = 0; } /* * For variable-sized fields we know about, we use * the maximum allowed size. * 1042 is bpchar, 1043 is varchar */ else if ((pgfieldtype == 1042 || pgfieldtype == 1043) && pgtypmod != -1) { /* * mod is maximum allowed size, including * header which contains *real* size. */ dbffieldtype = FTString; dbffieldsize = pgtypmod - 4; /* 4 is header size */ dbffielddecs = 0; } /* For all other valid non-geometry/geography fields... */ else if (dbffieldtype == -1) { /* * For types we don't know anything about, all * we can do is query the table for the maximum field * size. */ dbffieldsize = getMaxFieldSize(state->conn, state->schema, state->table, pgfieldname); if (dbffieldsize == -1) return 0; if (!dbffieldsize) dbffieldsize = 32; /* might 0 be a good size ? */ dbffieldtype = FTString; dbffielddecs = 0; /* Check to make sure the final field size isn't too large */ if (dbffieldsize > MAX_DBF_FIELD_SIZE) { /* Note: we concatenate all warnings from the main loop as this is useful information */ snprintf(buf, 256, _("Warning: values of field '%s' exceeding maximum dbf field width (%d) " "will be truncated.\n"), dbffieldname, MAX_DBF_FIELD_SIZE); strncat(state->message, buf, SHPDUMPERMSGLEN - strlen(state->message)); dbffieldsize = MAX_DBF_FIELD_SIZE; ret = SHPDUMPERWARN; } } LWDEBUGF(3, "DBF FIELD_NAME: %s, SIZE: %d\n", dbffieldname, dbffieldsize); if (dbffieldtype != 9) { /* Add the field to the DBF file */ if (DBFAddField(state->dbf, dbffieldname, dbffieldtype, dbffieldsize, dbffielddecs) == -1) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error: field %s of type %d could not be created."), dbffieldname, dbffieldtype); return SHPDUMPERERR; } /* Add the field information to our field arrays */ state->dbffieldnames[state->fieldcount] = dbffieldname; state->dbffieldtypes[state->fieldcount] = dbffieldtype; state->pgfieldnames[state->fieldcount] = pgfieldname; state->pgfieldlens[state->fieldcount] = pgfieldlen; state->pgfieldtypmods[state->fieldcount] = pgtypmod; state->fieldcount++; } } /* Now we have generated the field lists, grab some info about the table */ status = getTableInfo(state); if (status == SHPDUMPERERR) return SHPDUMPERERR; LWDEBUGF(3, "rows: %d\n", state->rowcount); LWDEBUGF(3, "shptype: %c\n", state->outtype); LWDEBUGF(3, "shpouttype: %d\n", state->outshptype); /* If we didn't find a geometry/geography column... */ if (!state->geo_col_name) { if (state->config->geo_col_name) { /* A geo* column was specified, but not found */ snprintf(state->message, SHPDUMPERMSGLEN, _("%s: no such attribute in table %s"), state->config->geo_col_name, state->table); return SHPDUMPERERR; } else { /* No geo* column specified so we can only create the DBF section - but let's issue a warning... */ snprintf(buf, 256, _("No geometry column found.\nThe DBF file will be created but not the shx or shp files.\n")); strncat(state->message, buf, SHPDUMPERMSGLEN - strlen(state->message)); state->shp = NULL; ret = SHPDUMPERWARN; } } else { /* Since we have found a geo* column, open the shapefile */ state->shp = SHPCreate(state->shp_file, state->outshptype); if (!state->shp) { snprintf(state->message, SHPDUMPERMSGLEN, _("Could not open shapefile %s!"), state->shp_file); return SHPDUMPERERR; } } /* Now we have the complete list of fieldnames, let's generate the SQL query. First let's make sure we reserve enough space for tables with lots of columns */ j = 0; for (i = 0; i < state->fieldcount; i++) j += strlen(state->pgfieldnames[i] + 2); /* Add 2 for leading and trailing quotes */ state->main_scan_query = malloc(1024 + j); sprintf(state->main_scan_query, "DECLARE cur "); if (state->config->binary) strcat(state->main_scan_query, "BINARY "); strcat(state->main_scan_query, "CURSOR FOR SELECT "); for (i = 0; i < state->fieldcount; i++) { /* Comma-separated column names */ if (i > 0) strcat(state->main_scan_query, ","); if (state->config->binary) sprintf(buf, "\"%s\"::text", state->pgfieldnames[i]); else sprintf(buf, "\"%s\"", state->pgfieldnames[i]); strcat(state->main_scan_query, buf); } /* If we found a valid geometry/geography column then use it */ if (state->geo_col_name) { /* If this is the (only) column, no need for the initial comma */ if (state->fieldcount > 0) strcat(state->main_scan_query, ","); if (state->big_endian) { if (state->pgis_major_version > 0) { sprintf(buf, "ST_asEWKB(ST_SetSRID(\"%s\"::geometry, 0), 'XDR') AS _geoX", state->geo_col_name); } else { sprintf(buf, "asbinary(\"%s\"::geometry, 'XDR') AS _geoX", state->geo_col_name); } } else /* little_endian */ { if (state->pgis_major_version > 0) { sprintf(buf, "ST_AsEWKB(ST_SetSRID(\"%s\"::geometry, 0), 'NDR') AS _geoX", state->geo_col_name); } else { sprintf(buf, "asbinary(\"%s\"::geometry, 'NDR') AS _geoX", state->geo_col_name); } } strcat(state->main_scan_query, buf); } if (state->schema) { sprintf(buf, " FROM \"%s\".\"%s\"", state->schema, state->table); } else { sprintf(buf, " FROM \"%s\"", state->table); } strcat(state->main_scan_query, buf); /* Order by 'gid' (if found) */ if (gidfound) { sprintf(buf, " ORDER BY \"gid\""); strcat(state->main_scan_query, buf); } /* Now we've finished with the result set, we can dispose of it */ PQclear(res); LWDEBUGF(3, "FINAL QUERY: %s\n", state->main_scan_query); /* * Begin the transaction * (a cursor can only be defined inside a transaction block) */ res = PQexec(state->conn, "BEGIN"); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error starting transaction: %s"), PQresultErrorMessage(res)); PQclear(res); return SHPDUMPERERR; } PQclear(res); /* Execute the main scan query */ res = PQexec(state->conn, state->main_scan_query); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error executing main scan query: %s"), PQresultErrorMessage(res)); PQclear(res); return SHPDUMPERERR; } PQclear(res); /* Setup initial scan state */ state->currow = 0; state->curresrow = 0; state->currescount = 0; state->fetchres = NULL; /* Generate the fetch query */ state->fetch_query = malloc(256); sprintf(state->fetch_query, "FETCH %d FROM cur", state->config->fetchsize); return SHPDUMPEROK; } /* Append the next row to the output shapefile */ int ShpLoaderGenerateShapeRow(SHPDUMPERSTATE *state) { char *hexewkb = NULL; unsigned char *hexewkb_binary = NULL; size_t hexewkb_len; char *val; SHPObject *obj = NULL; LWGEOM *lwgeom; int i, geocolnum = 0; /* If we try to go pass the end of the table, fail immediately */ if (state->currow > state->rowcount) { snprintf(state->message, SHPDUMPERMSGLEN, _("Tried to read past end of table!")); PQclear(state->fetchres); return SHPDUMPERERR; } /* If we have reached the end of the current batch, fetch a new one */ if (state->curresrow == state->currescount && state->currow < state->rowcount) { /* Clear the previous batch results */ if (state->fetchres) PQclear(state->fetchres); state->fetchres = PQexec(state->conn, state->fetch_query); if (PQresultStatus(state->fetchres) != PGRES_TUPLES_OK) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error executing fetch query: %s"), PQresultErrorMessage(state->fetchres)); PQclear(state->fetchres); return SHPDUMPERERR; } state->curresrow = 0; state->currescount = PQntuples(state->fetchres); } /* Grab the id of the geo column if we have one */ if (state->geo_col_name) geocolnum = PQfnumber(state->fetchres, "_geoX"); /* Process the next record within the batch. First write out all of the non-geo fields */ for (i = 0; i < state->fieldcount; i++) { /* * Transform NULL numbers to '0' * This is because the shapelib * won't easly take care of setting * nulls unless paying the acquisition * of a bug in long integer values */ if (PQgetisnull(state->fetchres, state->curresrow, i)) { val = nullDBFValue(state->dbffieldtypes[i]); } else { val = PQgetvalue(state->fetchres, state->curresrow, i); val = goodDBFValue(val, state->dbffieldtypes[i]); } /* Write it to the DBF file */ if (!DBFWriteAttributeDirectly(state->dbf, state->currow, i, val)) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error: record %d could not be created"), state->currow); PQclear(state->fetchres); return SHPDUMPERERR; } } /* Now process the geo field, if present */ if (state->geo_col_name) { /* Handle NULL shapes */ if (PQgetisnull(state->fetchres, state->curresrow, geocolnum)) { obj = SHPCreateSimpleObject(SHPT_NULL, 0, NULL, NULL, NULL); if (SHPWriteObject(state->shp, -1, obj) == -1) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error writing NULL shape for record %d"), state->currow); PQclear(state->fetchres); SHPDestroyObject(obj); return SHPDUMPERERR; } SHPDestroyObject(obj); } else { /* Get the value from the result set */ val = PQgetvalue(state->fetchres, state->curresrow, geocolnum); if (!state->config->binary) { if (state->pgis_major_version > 0) { LWDEBUG(4, "PostGIS >= 1.0, non-binary cursor"); /* Input is bytea encoded text field, so it must be unescaped and then converted to hexewkb string */ hexewkb_binary = PQunescapeBytea((unsigned char *)val, &hexewkb_len); hexewkb = convert_bytes_to_hex(hexewkb_binary, hexewkb_len); } else { LWDEBUG(4, "PostGIS < 1.0, non-binary cursor"); /* Input is already hexewkb string, so we can just copy directly to hexewkb */ hexewkb_len = PQgetlength(state->fetchres, state->curresrow, geocolnum); hexewkb = malloc(hexewkb_len + 1); strncpy(hexewkb, val, hexewkb_len + 1); } } else /* binary */ { LWDEBUG(4, "PostGIS (any version) using binary cursor"); /* Input is binary field - must convert to hexewkb string */ hexewkb_len = PQgetlength(state->fetchres, state->curresrow, geocolnum); hexewkb = convert_bytes_to_hex((unsigned char *)val, hexewkb_len); } LWDEBUGF(4, "HexEWKB - length: %d value: %s", strlen(hexewkb), hexewkb); /* Deserialize the LWGEOM */ lwgeom = lwgeom_from_hexwkb(hexewkb, LW_PARSER_CHECK_NONE); if (!lwgeom) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error parsing HEXEWKB for record %d"), state->currow); PQclear(state->fetchres); return SHPDUMPERERR; } /* Call the relevant method depending upon the geometry type */ LWDEBUGF(4, "geomtype: %s\n", lwtype_name(lwgeom->type)); switch (lwgeom->type) { case POINTTYPE: obj = create_point(state, lwgeom_as_lwpoint(lwgeom)); break; case MULTIPOINTTYPE: obj = create_multipoint(state, lwgeom_as_lwmpoint(lwgeom)); break; case POLYGONTYPE: obj = create_polygon(state, lwgeom_as_lwpoly(lwgeom)); break; case MULTIPOLYGONTYPE: obj = create_multipolygon(state, lwgeom_as_lwmpoly(lwgeom)); break; case LINETYPE: obj = create_linestring(state, lwgeom_as_lwline(lwgeom)); break; case MULTILINETYPE: obj = create_multilinestring(state, lwgeom_as_lwmline(lwgeom)); break; default: snprintf(state->message, SHPDUMPERMSGLEN, _("Unknown WKB type (%d) for record %d"), lwgeom->type, state->currow); PQclear(state->fetchres); SHPDestroyObject(obj); return SHPDUMPERERR; } /* Free both the original and geometries */ lwgeom_free(lwgeom); /* Write the shape out to the file */ if (SHPWriteObject(state->shp, -1, obj) == -1) { snprintf(state->message, SHPDUMPERMSGLEN, _("Error writing shape %d"), state->currow); PQclear(state->fetchres); SHPDestroyObject(obj); return SHPDUMPERERR; } SHPDestroyObject(obj); /* Free the hexewkb (and temporary bytea unescaped string if used) */ if (hexewkb) free(hexewkb); if (hexewkb_binary) PQfreemem(hexewkb_binary); } } /* Increment ready for next time */ state->curresrow++; state->currow++; return SHPDUMPEROK; } /* Return a count of the number of rows in the table being dumped */ int ShpDumperGetRecordCount(SHPDUMPERSTATE *state) { return state->rowcount; } /* Close the specified table and flush all files to disk */ int ShpDumperCloseTable(SHPDUMPERSTATE *state) { int ret = SHPDUMPEROK; /* Clear the current batch fetch resource */ PQclear(state->fetchres); /* If a geo column is present, generate the projection file */ if (state->geo_col_name) ret = projFileCreate(state); /* Close the DBF and SHP files */ if (state->dbf) DBFClose(state->dbf); if (state->shp) SHPClose(state->shp); return ret; } void ShpDumperDestroy(SHPDUMPERSTATE *state) { /* Destroy a state object created with ShpDumperConnect */ int i; if (state != NULL) { /* Disconnect from the database */ if (state->conn) PQfinish(state->conn); /* Free the query strings */ if (state->fetch_query) free(state->fetch_query); if (state->main_scan_query) free(state->main_scan_query); /* Free the DBF information fields */ if (state->dbffieldnames) { for (i = 0; i < state->fieldcount; i++) free(state->dbffieldnames[i]); free(state->dbffieldnames); } if (state->dbffieldtypes) free(state->dbffieldtypes); if (state->pgfieldnames) free(state->pgfieldnames); /* Free any column map fieldnames if specified */ if (state->column_map_size > 0) { for (i = 0; i < state->column_map_size; i++) { if (state->column_map_pgfieldnames[i]) free(state->column_map_pgfieldnames[i]); if (state->column_map_dbffieldnames[i]) free(state->column_map_dbffieldnames[i]); } free(state->column_map_pgfieldnames); free(state->column_map_dbffieldnames); } /* Free other names */ if (state->table) free(state->table); if (state->schema) free(state->schema); if (state->geo_col_name) free(state->geo_col_name); /* Free the state itself */ free(state); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shp2pgsql-core.h�����������������������������������������������������0000644�0000000�0000000�00000013101�11734114036�020044� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: shp2pgsql-core.h 9548 2012-03-26 16:23:58Z mcayland $ * * PostGIS - Spatial Types for PostgreSQL * http://postgis.refractions.net * Copyright 2001-2003 Refractions Research Inc. * Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> * Copyright 2009 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * **********************************************************************/ /* Standard headers */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <iconv.h> #include "shapefil.h" #include "shpcommon.h" #include "getopt.h" #include "../liblwgeom/stringbuffer.h" #define S2P_RCSID "$Id: shp2pgsql-core.h 9548 2012-03-26 16:23:58Z mcayland $" /* Number of digits of precision in WKT produced. */ #define WKT_PRECISION 15 /* Loader policy constants */ #define POLICY_NULL_ABORT 0x0 #define POLICY_NULL_INSERT 0x1 #define POLICY_NULL_SKIP 0x2 /* Forced dimensionality constants */ #define FORCE_OUTPUT_DISABLE 0x0 #define FORCE_OUTPUT_2D 0x1 #define FORCE_OUTPUT_3DZ 0x2 #define FORCE_OUTPUT_3DM 0x3 #define FORCE_OUTPUT_4D 0x4 /* Error message handling */ #define SHPLOADERMSGLEN 1024 /* Error status codes */ #define SHPLOADEROK -1 #define SHPLOADERERR 0 #define SHPLOADERWARN 1 /* Record status codes */ #define SHPLOADERRECDELETED 2 #define SHPLOADERRECISNULL 3 /* * Shapefile (dbf) field name are at most 10chars + 1 NULL. * Postgresql field names are at most 63 bytes + 1 NULL. */ #define MAXFIELDNAMELEN 64 #define MAXVALUELEN 1024 /* * Default geometry column name */ #define GEOMETRY_DEFAULT "geom" #define GEOGRAPHY_DEFAULT "geog" /* * Default character encoding */ #define ENCODING_DEFAULT "UTF-8" /* * Structure to hold the loader configuration options */ typedef struct shp_loader_config { /* load mode: c = create, d = delete, a = append, p = prepare */ char opt; /* table to load into */ char *table; /* schema to load into */ char *schema; /* geometry/geography column name specified by the user, may be null. */ char *geo_col; /* the shape file (without the .shp extension) */ char *shp_file; /* 0 = SQL inserts, 1 = dump */ int dump_format; /* 0 = MULTIPOLYGON/MULTILINESTRING, 1 = force to POLYGON/LINESTRING */ int simple_geometries; /* 0 = geometry, 1 = geography */ int geography; /* 0 = columnname, 1 = "columnName" */ int quoteidentifiers; /* 0 = allow int8 fields, 1 = no int8 fields */ int forceint4; /* 0 = no index, 1 = create index after load */ int createindex; /* 0 = load DBF file only, 1 = load everything */ int readshape; /* Override the output geometry type (a FORCE_OUTPUT_* constant) */ int force_output; /* iconv encoding name */ char *encoding; /* tablespace name for the table */ char *tablespace; /* tablespace name for the indexes */ char *idxtablespace; /* how to handle nulls */ int null_policy; /* SRID specified */ int sr_id; /* SRID of the shape file */ int shp_sr_id; /* 0 = WKB (more precise), 1 = WKT (may have coordinate drift). */ int use_wkt; /* whether to do a single transaction or run each statement on its own */ int usetransaction; } SHPLOADERCONFIG; /* * Structure to holder the current loader state */ typedef struct shp_loader_state { /* Configuration for this state */ SHPLOADERCONFIG *config; /* Shapefile handle */ SHPHandle hSHPHandle; /* Shapefile type */ int shpfiletype; /* Data file handle */ DBFHandle hDBFHandle; /* Number of rows in the shapefile */ int num_entities; /* Number of fields in the shapefile */ int num_fields; /* Number of rows in the DBF file */ int num_records; /* Pointer to an array of field names */ char **field_names; /* Field type */ DBFFieldType *types; /* Arrays of field widths and precisions */ int *widths; int *precisions; /* Pointer to an array of PostgreSQL field types */ char **pgfieldtypes; /* String containing colume name list in the form "(col1, col2, col3 ... , colN)" */ char *col_names; /* String containing the PostGIS geometry type, e.g. POINT, POLYGON etc. */ char *pgtype; /* Flag for whether the output geometry has Z coordinates or not. */ int has_z; /* Flag for whether the output geometry has M coordinates or not. */ int has_m; /* Number of dimensions to output */ int pgdims; /* Last (error) message */ char message[SHPLOADERMSGLEN]; /* SRID of the shape file. If not reprojecting, will be the same as to_srid. */ int from_srid; /* SRID of the table. If not reprojecting, will be the same as from_srid. */ int to_srid; /* geometry/geography column name to use. Will be set to the default if the config did not specify a column name. */ char *geo_col; } SHPLOADERSTATE; /* Externally accessible functions */ void strtolower(char *s); void vasbappend(stringbuffer_t *sb, char *fmt, ... ); void set_loader_config_defaults(SHPLOADERCONFIG *config); SHPLOADERSTATE *ShpLoaderCreate(SHPLOADERCONFIG *config); int ShpLoaderOpenShape(SHPLOADERSTATE *state); int ShpLoaderGetSQLHeader(SHPLOADERSTATE *state, char **strheader); int ShpLoaderGetSQLCopyStatement(SHPLOADERSTATE *state, char **strheader); int ShpLoaderGetRecordCount(SHPLOADERSTATE *state); int ShpLoaderGenerateSQLRowStatement(SHPLOADERSTATE *state, int item, char **strrecord); int ShpLoaderGetSQLFooter(SHPLOADERSTATE *state, char **strfooter); void ShpLoaderDestroy(SHPLOADERSTATE *state); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/loader/shp2pgsql-cli.c������������������������������������������������������0000644�0000000�0000000�00000025350�12132321544�017664� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************** * $Id: shp2pgsql-cli.c 11294 2013-04-13 18:26:44Z mcayland $ * * PostGIS - Spatial Types for PostgreSQL * http://www.postgis.org * Copyright 2008 OpenGeo.org * Copyright 2009 Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> * * This is free software; you can redistribute and/or modify it under * the terms of the GNU General Public Licence. See the COPYING file. * * Maintainer: Paul Ramsey <pramsey@opengeo.org> * **********************************************************************/ #include "../postgis_config.h" #include "shp2pgsql-core.h" #include "../liblwgeom/liblwgeom.h" /* for SRID_UNKNOWN */ static void usage() { printf(_( "RELEASE: %s (r%d)\n" ), POSTGIS_LIB_VERSION, POSTGIS_SVN_REVISION); printf(_( "USAGE: shp2pgsql [<options>] <shapefile> [[<schema>.]<table>]\n" "OPTIONS:\n" )); printf(_( " -s [<from>:]<srid> Set the SRID field. Defaults to %d.\n" " Optionally reprojects from given SRID (cannot be used with -D).\n"), SRID_UNKNOWN); printf(_( " (-d|a|c|p) These are mutually exclusive options:\n" " -d Drops the table, then recreates it and populates\n" " it with current shape file data.\n" " -a Appends shape file into current table, must be\n" " exactly the same table schema.\n" " -c Creates a new table and populates it, this is the\n" " default if you do not specify any options.\n" " -p Prepare mode, only creates the table.\n" )); printf(_( " -g <geocolumn> Specify the name of the geometry/geography column\n" " (mostly useful in append mode).\n" )); printf(_( " -D Use postgresql dump format (defaults to SQL insert statements).\n" )); printf(_( " -e Execute each statement individually, do not use a transaction.\n" " Not compatible with -D.\n" )); printf(_( " -G Use geography type (requires lon/lat data or -s to reproject).\n" )); printf(_( " -k Keep postgresql identifiers case.\n" )); printf(_( " -i Use int4 type for all integer dbf fields.\n" )); printf(_( " -I Create a spatial index on the geocolumn.\n" )); printf(_( " -S Generate simple geometries instead of MULTI geometries.\n" )); printf(_( " -t <dimensionality> Force geometry to be one of '2D', '3DZ', '3DM', or '4D'\n" )); printf(_( " -w Output WKT instead of WKB. Note that this can result in\n" " coordinate drift.\n" )); printf(_( " -W <encoding> Specify the character encoding of Shape's\n" " attribute column. (default: \"UTF-8\")\n" )); printf(_( " -N <policy> NULL geometries handling policy (insert*,skip,abort).\n" )); printf(_( " -n Only import DBF file.\n" )); printf(_( " -T <tablespace> Specify the tablespace for the new table.\n" " Note that indexes will still use the default tablespace unless the\n" " -X flag is also used.\n")); printf(_( " -X <tablespace> Specify the tablespace for the table's indexes.\n" " This applies to the primary key, and the spatial index if\n" " the -I flag is used.\n" )); printf(_( " -? Display this help screen.\n" )); } int main (int argc, char **argv) { SHPLOADERCONFIG *config; SHPLOADERSTATE *state; char *header, *footer, *record; int c; int ret, i; #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, PGSQL_LOCALEDIR); textdomain (PACKAGE); #endif /* If no options are specified, display usage */ if (argc == 1) { usage(); exit(0); } /* Parse command line options and set configuration */ config = malloc(sizeof(SHPLOADERCONFIG)); set_loader_config_defaults(config); /* Keep the flag list alphabetic so it's easy to see what's left. */ while ((c = pgis_getopt(argc, argv, "acdeg:iknps:t:wDGIN:ST:W:X:")) != EOF) { switch (c) { case 'c': case 'd': case 'a': case 'p': config->opt = c; break; case 'D': config->dump_format = 1; break; case 'G': config->geography = 1; break; case 'S': config->simple_geometries = 1; break; case 's': if (pgis_optarg) { char *ptr = strchr(pgis_optarg, ':'); if (ptr) { *ptr++ = '\0'; sscanf(pgis_optarg, "%d", &config->shp_sr_id); sscanf(ptr, "%d", &config->sr_id); } else { /* Only TO_SRID specified */ sscanf(pgis_optarg, "%d", &config->sr_id); } } else { /* With -s, user must specify TO_SRID or FROM_SRID:TO_SRID */ fprintf(stderr, "The -s parameter must be specified in the form [FROM_SRID:]TO_SRID\n"); exit(1); } break; case 'g': config->geo_col = pgis_optarg; break; case 'k': config->quoteidentifiers = 1; break; case 'i': config->forceint4 = 1; break; case 'I': config->createindex = 1; break; case 'w': config->use_wkt = 1; break; case 'n': config->readshape = 0; break; case 'W': config->encoding = pgis_optarg; break; case 'N': switch (pgis_optarg[0]) { case 'a': config->null_policy = POLICY_NULL_ABORT; break; case 'i': config->null_policy = POLICY_NULL_INSERT; break; case 's': config->null_policy = POLICY_NULL_SKIP; break; default: fprintf(stderr, "Unsupported NULL geometry handling policy.\nValid policies: insert, skip, abort\n"); exit(1); } break; case 't': if (strcasecmp(pgis_optarg, "2D") == 0) { config->force_output = FORCE_OUTPUT_2D; } else if (strcasecmp(pgis_optarg, "3DZ") == 0 ) { config->force_output = FORCE_OUTPUT_3DZ; } else if (strcasecmp(pgis_optarg, "3DM") == 0 ) { config->force_output = FORCE_OUTPUT_3DM; } else if (strcasecmp(pgis_optarg, "4D") == 0 ) { config->force_output = FORCE_OUTPUT_4D; } else { fprintf(stderr, "Unsupported output type: %s\nValid output types are 2D, 3DZ, 3DM and 4D\n", pgis_optarg); exit(1); } break; case 'T': config->tablespace = pgis_optarg; break; case 'X': config->idxtablespace = pgis_optarg; break; case 'e': config->usetransaction = 0; break; case '?': usage(); exit(0); default: usage(); exit(0); } } /* Once we have parsed the arguments, make sure certain combinations are valid */ if (config->dump_format && !config->usetransaction) { fprintf(stderr, "Invalid argument combination - cannot use both -D and -e\n"); exit(1); } if (config->dump_format && config->shp_sr_id != SRID_UNKNOWN) { fprintf(stderr, "Invalid argument combination - cannot use -D with -s FROM_SRID:TO_SRID\n"); exit(1); } /* Determine the shapefile name from the next argument, if no shape file, exit. */ if (pgis_optind < argc) { config->shp_file = argv[pgis_optind]; pgis_optind++; } else { usage(); exit(0); } /* Determine the table and schema names from the next argument */ if (pgis_optind < argc) { char *strptr = argv[pgis_optind]; char *chrptr = strchr(strptr, '.'); /* OK, this is a schema-qualified table name... */ if (chrptr) { if ( chrptr == strptr ) { /* ".something" ??? */ usage(); exit(0); } /* Null terminate at the '.' */ *chrptr = '\0'; /* Copy in the parts */ config->schema = strdup(strptr); config->table = strdup(chrptr+1); } else { config->table = strdup(strptr); } } /* If the table parameter is not provided, use the shape file name as a proxy value. Strip out the .shp and the leading path information first. */ if ( config->shp_file && config->table == NULL) { char *shp_file = strdup(config->shp_file); char *ptr; /* Remove the extension, if present */ for ( ptr = shp_file + strlen(shp_file); ptr > shp_file; ptr-- ) { if ( *ptr == '.' ) { *ptr = '\0'; break; } } /* The remaining non-path section is the table name */ for ( ptr = shp_file + strlen(shp_file); ptr > shp_file; ptr-- ) { if ( *ptr == '/' || *ptr == '\\' ) { ptr++; break; } } config->table = strdup(ptr); free(shp_file); } /* Transform table name to lower case if no quoting specified */ if (!config->quoteidentifiers) { if ( config->table ) strtolower(config->table); if ( config->schema ) strtolower(config->schema); } /* Create the shapefile state object */ state = ShpLoaderCreate(config); /* Open the shapefile */ ret = ShpLoaderOpenShape(state); if (ret != SHPLOADEROK) { fprintf(stderr, "%s\n", state->message); if (ret == SHPLOADERERR) exit(1); } /* If reading the whole shapefile, display its type */ if (state->config->readshape) { fprintf(stderr, "Shapefile type: %s\n", SHPTypeName(state->shpfiletype)); fprintf(stderr, "Postgis type: %s[%d]\n", state->pgtype, state->pgdims); } /* Print the header to stdout */ ret = ShpLoaderGetSQLHeader(state, &header); if (ret != SHPLOADEROK) { fprintf(stderr, "%s\n", state->message); if (ret == SHPLOADERERR) exit(1); } printf("%s", header); free(header); /* If we are not in "prepare" mode, go ahead and write out the data. */ if ( state->config->opt != 'p' ) { /* If in COPY mode, output the COPY statement */ if (state->config->dump_format) { ret = ShpLoaderGetSQLCopyStatement(state, &header); if (ret != SHPLOADEROK) { fprintf(stderr, "%s\n", state->message); if (ret == SHPLOADERERR) exit(1); } printf("%s", header); free(header); } /* Main loop: iterate through all of the records and send them to stdout */ for (i = 0; i < ShpLoaderGetRecordCount(state); i++) { ret = ShpLoaderGenerateSQLRowStatement(state, i, &record); switch (ret) { case SHPLOADEROK: /* Simply display the geometry */ printf("%s\n", record); free(record); break; case SHPLOADERERR: /* Display the error message then stop */ fprintf(stderr, "%s\n", state->message); exit(1); break; case SHPLOADERWARN: /* Display the warning, but continue */ fprintf(stderr, "%s\n", state->message); printf("%s\n", record); free(record); break; case SHPLOADERRECDELETED: /* Record is marked as deleted - ignore */ break; case SHPLOADERRECISNULL: /* Record is NULL and should be ignored according to NULL policy */ break; } } /* If in COPY mode, terminate the COPY statement */ if (state->config->dump_format) printf("\\.\n"); } /* Print the footer to stdout */ ret = ShpLoaderGetSQLFooter(state, &footer); if (ret != SHPLOADEROK) { fprintf(stderr, "%s\n", state->message); if (ret == SHPLOADERERR) exit(1); } printf("%s", footer); free(footer); /* Free the state object */ ShpLoaderDestroy(state); /* Free configuration variables */ if (config->schema) free(config->schema); if (config->table) free(config->table); free(config); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/GNUmakefile.in��������������������������������������������������������������0000644�0000000�0000000�00000006151�11765435527�016261� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#----------------------------------------------------- # # Configuration directives are in postgis_config.h # #----------------------------------------------------- # todo: add all subdirs SUBDIRS = liblwgeom libpgcommon postgis regress @RASTER@ @TOPOLOGY@ loader utils @EXTENSIONS@ PERL = @PERL@ # todo: add more rules here, like uninstall, clean... all install uninstall noop clean distclean check: for s in $(SUBDIRS); do \ echo "---- Making $@ in $${s}"; \ $(MAKE) -C $${s} $@ || exit 1; \ done; @if test x"$@" = xall; then \ echo "PostGIS was built successfully. Ready to install."; \ fi all: postgis_svn_revision.h ifneq ($(XSLTPROC),) all: comments endif install: all comments-install uninstall: docs-uninstall comments-uninstall clean: docs-clean clean-local clean-local: rm -f postgis.sql postgis_upgrade.sql # TODO: drop 'test' target.. test: check check: all docs-check distclean: clean distclean-local distclean-local: clean rm -Rf autom4te.cache rm -f GNUmakefile rm -f config.log config.cache config.status rm -f postgis_config.h maintainer-clean: @echo '------------------------------------------------------' @echo 'This command is intended for maintainers to use; it' @echo 'deletes files that may need special tools to rebuild.' @echo '------------------------------------------------------' $(MAKE) -C doc maintainer-clean $(MAKE) -C postgis maintainer-clean $(MAKE) -C liblwgeom maintainer-clean $(MAKE) -C java/jdbc maintainer-clean $(MAKE) distclean rm -f configure garden: @echo '------------------------------------------------------' @echo 'Generating SQL file from Documentation' @echo '------------------------------------------------------' $(MAKE) -C doc garden @echo '------------------------------------------------------' @echo 'Launch regression Test' @echo '------------------------------------------------------' $(MAKE) -C regress garden templategis: $(MAKE) -C extras/template_gis templategis-clean: $(MAKE) -C extras/template_gis clean templategis-install: $(MAKE) -C extras/template_gis install templategis-uninstall: $(MAKE) -C extras/template_gis uninstall docs: $(MAKE) -C doc html docs-clean: $(MAKE) -C doc clean docs-check: $(MAKE) -C doc check comments: $(MAKE) -C doc comments cheatsheets: $(MAKE) -C doc cheatsheets comments-install: $(MAKE) -C doc comments-install comments-uninstall: $(MAKE) -C doc comments-uninstall docs-install: $(MAKE) -C doc install docs-uninstall: $(MAKE) -C doc uninstall #utils: # $(MAKE) -C utils configure: configure.in ./autogen.sh config.status: configure ./configure ChangeLog.svn: svn2cl --authors=authors.svn -i -o ChangeLog.svn raster-post-install-check: $(MAKE) -C raster post-install-check raster-sql: $(MAKE) -C raster rtpostgis.sql astyle: ./astyle.sh commit: $(MAKE) astyle && $(MAKE) clean && $(MAKE) check && svn commit authors.git: authors.svn sed -e 's/:/ = /' authors.svn > authors.git svnrebase: authors.git git svn rebase --authors-file authors.git postgis_svn_revision.h: $(PERL) utils/svn_repo_revision.pl .PHONY: utils liblwgeom ChangeLog.svn raster postgis_svn_revision.h �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/����������������������������������������������������������������������0000755�0000000�0000000�00000000000�12317530606�014723� 5����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/uninstall_script������������������������������������������������������0000755�0000000�0000000�00000005332�11675237026�020257� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # this script will change it's current working directory to utils DB=postgis_uninstall PGPATH=../postgis/ RTPATH=../raster/rt_pg/ PGFILE=uninstall_postgis.sql RTFILE=uninstall_rtpostgis.sql if [ "raster" == "$1" ]; then OUTFILE=$RTFILE else OUTFILE=$PGFILE fi INFILE=$OUTFILE.in.$RANDOM RAND1=$RANDOM RAND2=$RANDOM RTN=0 cleanup () { rm -f $INFILE $OUTFILE.$RAND1 $OUTFILE.$RAND2 } # get reference uninstall of postgis.sql only if [ "$1" == "raster" ]; then $0 fi SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" # use utils as our working directory cd $DIR # create database createdb $DB # load postgis.sql psql -q -d $DB -f ${PGPATH}postgis.sql # raster requested, load rtpostgis.sql if [ "$1" == "raster" ]; then psql -q -d $DB -f ${RTPATH}rtpostgis.sql fi # dump database loaded with postgis.sql and rtpostgis.sql and strip for only one-line DROP and SET statements pg_dump --format=p --clean --schema-only --no-owner --no-acl --no-tablespaces $DB | grep -E "^(DROP|SET).*;$" | grep -v -E "^DROP (SCHEMA|PROCEDURAL) .*;$" > $INFILE # drop database dropdb $DB # first search_path is parsed schema=`grep -m 1 "SET search_path = " < $INFILE | sed -e 's/SET search_path = //' -e 's/\(,\|;\)//g' -e 's/ /\n/'` # sed arguments sedarg="\-e 's/^DROP \(TABLE\|VIEW\|CAST\|OPERATOR CLASS\|OPERATOR\|AGGREGATE\|FUNCTION\|TYPE\)/& IF EXISTS/' " for x in $schema; do sedarg="\-e 's/${x}.//g' "${sedarg} done # remove SET statements, remove schema names from DROP statements and add IF EXISTS for DROP statements grep -v -E "^SET" < $INFILE | eval "sed ${sedarg}" > $OUTFILE.$RAND1 RTN=$? if [ "$RTN" != "0" ]; then cleanup exit $RTN fi kw="" OIFS=$IFS IFS=$'\n' echo -n '' > $OUTFILE.$RAND2 for x in `cat $OUTFILE.$RAND1`; do y=`echo "$x" | grep "CASCADE;\$"` # CASCADE found, get keyword if [ "x$y" != "x" ]; then kw=`echo "$x" | sed -e 's/^DROP TYPE IF EXISTS //' -e 's/ CASCADE;//'` echo "$x" >> $OUTFILE.$RAND2 continue fi # no keyword, continue if [ "x$kw" == "x" ]; then echo "$x" >> $OUTFILE.$RAND2 continue fi y=`echo "$x" | grep "($kw)"` if [ "x$y" == "x" ]; then echo "$x" >> $OUTFILE.$RAND2 continue fi done IFS=$OIFS # if raster, separate raster from postgis items if [ "raster" == "$1" ]; then OIFS=$IFS IFS=$'\n' echo -n '' > ${RTPATH}$OUTFILE # see if line found in uninstall_postgis.sql for x in `cat $OUTFILE.$RAND2`; do y=`echo $x | sed -e 's/\(\[\|\]\)/\\\&/g'` y=`grep "^${y}$" < ${PGPATH}$PGFILE` # not postgis item if [ "x$y" == "x" ]; then echo $x >> ${RTPATH}${OUTFILE} fi done IFS=$OIFS else mv $OUTFILE.$RAND2 ${PGPATH}${OUTFILE} fi # cleanup cleanup # return error exit $RTN ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/test_estimation.pl����������������������������������������������������0000755�0000000�0000000�00000014535�11722777314�020516� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w # $Id: test_estimation.pl 9324 2012-02-27 22:08:12Z pramsey $ # # TODO: # # accept a finer boxesPerSide specification # eg. 1-3 or 1-32/5 # use Pg; $VERBOSE = 0; sub usage { local($me) = `basename $0`; chop($me); print STDERR "$me [-v] [-vacuum] [-bps <bps>[,<bps>]] <table> <col>\n"; } $TABLE=''; $COLUMN=''; for ($i=0; $i<@ARGV; $i++) { if ( $ARGV[$i] =~ m/^-/ ) { if ( $ARGV[$i] eq '-v' ) { $VERBOSE++; } elsif ( $ARGV[$i] eq '-bps' ) { $bps_spec = $ARGV[++$i]; push(@bps_list, split(',', $bps_spec)); } elsif ( $ARGV[$i] eq '-vacuum' ) { $VACUUM=1; } else { print STDERR "Unknown option $ARGV[$i]:\n"; usage(); exit(1); } } elsif ( ! $TABLE ) { $TABLE = $ARGV[$i]; } elsif ( ! $COLUMN ) { $COLUMN = $ARGV[$i]; } else { print STDERR "Too many options:\n"; usage(); exit(1); } } if ( ! $TABLE || ! $COLUMN ) { usage(); exit 1; } $SCHEMA = 'public'; $COLUMN = 'the_geom' if ( $COLUMN eq '' ); if ( $TABLE =~ /(.*)\.(.*)/ ) { $SCHEMA = $1; $TABLE = $2; } #connect $conn = Pg::connectdb(""); if ( $conn->status != PGRES_CONNECTION_OK ) { print STDERR $conn->errorMessage; exit(1); } if ( $VERBOSE ) { print "Table: \"$SCHEMA\".\"$TABLE\"\n"; print "Column: \"$COLUMN\"\n"; } # Get extent $query = 'select extent("'.$COLUMN.'"), min(geometrytype("'.$COLUMN.'")) from "'.$SCHEMA.'"."'.$TABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $TYPE = $res->getvalue(0, 1); $EXTENT = $res->getvalue(0, 0); # find srid $query = 'select srid("'.$COLUMN.'") from "'.$SCHEMA.'"."'.$TABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $SRID = $res->getvalue(0, 0); # parse extent if ( $EXTENT =~ /^BOX3D\((.*) (.*) (.*),(.*) (.*) (.*)\)$/ ) { $ext{xmin} = $1; $ext{ymin} = $2; $ext{xmax} = $4; $ext{ymax} = $5; } elsif ( $EXTENT =~ /^BOX\((.*) (.*),(.*) (.*)\)$/ ) { $ext{xmin} = $1; $ext{ymin} = $2; $ext{xmax} = $3; $ext{ymax} = $4; } else { print STDERR "Couldn't parse EXTENT: $EXTENT\n"; exit(1); } # vacuum analyze table if ( $VACUUM ) { print "VACUUM ANALYZE\n"; $query = 'vacuum analyze "'.$SCHEMA.'"."'.$TABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_COMMAND_OK ) { print STDERR $conn->errorMessage; exit(1); } } # get number of features from pg_class.ntuples # (correct if vacuum have been run after last insertion/deletions) $query = 'SELECT c.reltuples FROM pg_class c, pg_namespace n '. "WHERE c.relnamespace = n.oid AND n.nspname = '$SCHEMA' ". " AND c.relname = '$TABLE'"; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $TOTROWS=$res->getvalue(0, 0); @extents = ( \%ext ); print " Type: $TYPE\n"; print " Rows: $TOTROWS\n"; print "Extent: ".print_extent(\%ext)."\n" if ($VERBOSE); print " bps\test\treal\tdelta\terror%\n"; print "----------------------------------------------------------\n"; for ($i=0; $i<@bps_list; $i++) { $bps=$bps_list[$i]; @extents = split_extent(\%ext, $bps); $best_error=0; $worst_error=10000; $sum_error=0; $count_errors=0; $try=0; while ( ($cell_ext=pop(@extents)) ) { ($est,$real) = test_extent($cell_ext); $delta = $est-$real; print " $bps\t".$est."\t".$real."\t$delta"; $error = $delta/$TOTROWS; $count_errors++; print "\t".(int(($error)*10000)/100)."\n"; $abs_error = abs($error); $sum_error += $abs_error; if ( $try == 0 || $abs_error > abs($worst_error) ) { $worst_error = $error; } if ( $try == 0 || $abs_error < abs($best_error) ) { $best_error = $error; } $try++; } $avg_error = $sum_error/$count_errors; print " $bps\t". "(best/worst/avg) \t". (int($best_error*10000)/100)."\t". (int($worst_error*10000)/100)."\t". "+-".(int($avg_error*10000)/100)."\n"; } ################################################################## sub print_extent { local($ext) = shift; local($s); $s = $ext->{'xmin'}." ".$ext->{'ymin'}." "; $s .= $ext->{'xmax'}." ".$ext->{'ymax'}; return $s; } sub split_extent { local($ext) = shift; local($bps) = shift; local($width, $height, $cell_width, $cell_height); local($x,$y); local(@stack); $width = $ext->{'xmax'} - $ext->{'xmin'}; $height = $ext->{'ymax'} - $ext->{'ymin'}; $cell_width = $width / $bps; $cell_height = $height / $bps; if ($VERBOSE) { print "cell_w: $cell_width\n"; print "cell_h: $cell_height\n"; } @stack = (); for ($x=0; $x<$bps; $x++) { for($y=0; $y<$bps; $y++) { local(%cell); $cell{'xmin'} = $ext->{'xmin'}+$x*$cell_width; $cell{'ymin'} = $ext->{'ymin'}+$y*$cell_height; $cell{'xmax'} = $ext->{'xmin'}+($x+1)*$cell_width; $cell{'ymax'} = $ext->{'ymin'}+($y+1)*$cell_height; print "cell: ".print_extent(\%cell)."\n" if ($VERBOSE); push(@stack, \%cell); } } return @stack; } sub test_extent { local($ext) = shift; # Test whole extent query $query = 'explain analyze select 1 from "'. $SCHEMA.'"."'.$TABLE.'" WHERE "'.$COLUMN.'" && '. "setSRID('BOX3D(".$ext->{'xmin'}." ". $ext->{'ymin'}.", ".$ext->{'xmax'}." ". $ext->{'ymax'}.")'::BOX3D, $SRID)"; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } while ( ($row=$res->fetchrow()) ) { next unless $row =~ /.* rows=([0-9]+) .* rows=([0-9]+) /; $est = $1; $real = $2; last; } return ($est,$real); } # # $Log$ # Revision 1.9 2005/04/18 13:30:25 strk # Fixed to work against LWGEOM installations # # Revision 1.8.4.1 2005/04/18 13:28:19 strk # Fixed to work against LWGEOM installations # # Revision 1.8 2004/03/08 17:21:57 strk # changed error computation code to delta/totrows # # Revision 1.7 2004/03/06 18:02:48 strk # Comma-separated bps values accepted # # Revision 1.6 2004/03/05 21:06:04 strk # Added -vacuum switch # # Revision 1.5 2004/03/05 21:03:18 strk # Made the -bps switch specify the exact level(s) at which to run the test # # Revision 1.4 2004/03/05 16:40:30 strk # rewritten split_extent to be more datatype-conservative # # Revision 1.3 2004/03/05 16:01:02 strk # added -bps switch to set maximun query level. reworked command line parsing # # Revision 1.2 2004/03/05 15:29:35 strk # more verbose output # # Revision 1.1 2004/03/05 11:52:24 strk # initial import # # �������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/test_geography_estimation.pl������������������������������������������0000755�0000000�0000000�00000013276�11722777314�022564� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w # $Id: test_estimation.pl 1631 2005-04-18 13:30:25Z strk $ # # TODO: # # accept a finer boxesPerSide specification # eg. 1-3 or 1-32/5 # use Pg; $VERBOSE = 0; sub usage { local($me) = `basename $0`; chop($me); print STDERR "$me [-v] [-vacuum] [-bps <bps>[,<bps>]] <table> <col>\n"; } $TABLE=''; $COLUMN=''; for ($i=0; $i<@ARGV; $i++) { if ( $ARGV[$i] =~ m/^-/ ) { if ( $ARGV[$i] eq '-v' ) { $VERBOSE++; } elsif ( $ARGV[$i] eq '-bps' ) { $bps_spec = $ARGV[++$i]; push(@bps_list, split(',', $bps_spec)); } elsif ( $ARGV[$i] eq '-vacuum' ) { $VACUUM=1; } else { print STDERR "Unknown option $ARGV[$i]:\n"; usage(); exit(1); } } elsif ( ! $TABLE ) { $TABLE = $ARGV[$i]; } elsif ( ! $COLUMN ) { $COLUMN = $ARGV[$i]; } else { print STDERR "Too many options:\n"; usage(); exit(1); } } if ( ! $TABLE || ! $COLUMN ) { usage(); exit 1; } $SCHEMA = 'public'; $COLUMN = 'the_geom' if ( $COLUMN eq '' ); if ( $TABLE =~ /(.*)\.(.*)/ ) { $SCHEMA = $1; $TABLE = $2; } #connect $conn = Pg::connectdb(""); if ( $conn->status != PGRES_CONNECTION_OK ) { print STDERR $conn->errorMessage; exit(1); } if ( $VERBOSE ) { print "Table: \"$SCHEMA\".\"$TABLE\"\n"; print "Column: \"$COLUMN\"\n"; } # parse extent $ext{'xmin'} = -180; $ext{'ymin'} = -90; $ext{'xmax'} = 180; $ext{'ymax'} = 90; # vacuum analyze table if ( $VACUUM ) { print "VACUUM ANALYZE\n"; $query = 'vacuum analyze "'.$SCHEMA.'"."'.$TABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_COMMAND_OK ) { print STDERR $conn->errorMessage; exit(1); } } # get number of features from pg_class.ntuples # (correct if vacuum have been run after last insertion/deletions) $query = 'SELECT c.reltuples FROM pg_class c, pg_namespace n '. "WHERE c.relnamespace = n.oid AND n.nspname = '$SCHEMA' ". " AND c.relname = '$TABLE'"; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $TOTROWS=$res->getvalue(0, 0); @extents = ( \%ext ); #print " Type: $TYPE\n"; print " Rows: $TOTROWS\n"; print " bps\test\treal\tdelta\terror%\n"; print "----------------------------------------------------------\n"; for ($i=0; $i<@bps_list; $i++) { $bps=$bps_list[$i]; @extents = split_extent(\%ext, $bps); $best_error=0; $worst_error=10000; $sum_error=0; $count_errors=0; $try=0; while ( ($cell_ext=pop(@extents)) ) { ($est,$real) = test_extent($cell_ext); $delta = $est-$real; print " $bps\t".$est."\t".$real."\t$delta"; $error = $delta/$TOTROWS; $count_errors++; print "\t".(int(($error)*10000)/100)."\n"; $abs_error = abs($error); $sum_error += $abs_error; if ( $try == 0 || $abs_error > abs($worst_error) ) { $worst_error = $error; } if ( $try == 0 || $abs_error < abs($best_error) ) { $best_error = $error; } $try++; } $avg_error = $sum_error/$count_errors; print " $bps\t". "(best/worst/avg) \t". (int($best_error*10000)/100)."\t". (int($worst_error*10000)/100)."\t". "+-".(int($avg_error*10000)/100)."\n"; } ################################################################## sub print_extent { local($ext) = shift; local($s); $s = $ext->{'xmin'}." ".$ext->{'ymin'}." "; $s .= $ext->{'xmax'}." ".$ext->{'ymax'}; return $s; } sub split_extent { local($ext) = shift; local($bps) = shift; local($width, $height, $cell_width, $cell_height); local($x,$y); local(@stack); $width = $ext->{'xmax'} - $ext->{'xmin'}; $height = $ext->{'ymax'} - $ext->{'ymin'}; $cell_width = $width / $bps; $cell_height = $height / $bps; if ($VERBOSE) { print "cell_w: $cell_width\n"; print "cell_h: $cell_height\n"; } @stack = (); for ($x=0; $x<$bps; $x++) { for($y=0; $y<$bps; $y++) { local(%cell); $cell{'xmin'} = $ext->{'xmin'}+$x*$cell_width; $cell{'ymin'} = $ext->{'ymin'}+$y*$cell_height; $cell{'xmax'} = $ext->{'xmin'}+($x+1)*$cell_width; $cell{'ymax'} = $ext->{'ymin'}+($y+1)*$cell_height; print "cell: ".print_extent(\%cell)."\n" if ($VERBOSE); push(@stack, \%cell); } } return @stack; } sub test_extent { local($ext) = shift; # Test whole extent query $query = 'explain analyze select 1 from "' . $SCHEMA . '"."' . $TABLE .'" WHERE "' . $COLUMN . '"' . ' && ST_GeographyFromText(' . "'POLYGON((" . $ext->{'xmin'} . " " . $ext->{'ymin'} . ", " . $ext->{'xmin'} . " " . $ext->{'ymax'} . ", " . $ext->{'xmax'} . " " . $ext->{'ymax'} . ", " . $ext->{'xmax'} . " " . $ext->{'ymin'} . ", " . $ext->{'xmin'} . " " . $ext->{'ymin'} . "))')"; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } while ( ($row=$res->fetchrow()) ) { next unless $row =~ /.* rows=([0-9]+) .* rows=([0-9]+) /; $est = $1; $real = $2; last; } return ($est,$real); } # # $Log$ # Revision 1.9 2005/04/18 13:30:25 strk # Fixed to work against LWGEOM installations # # Revision 1.8.4.1 2005/04/18 13:28:19 strk # Fixed to work against LWGEOM installations # # Revision 1.8 2004/03/08 17:21:57 strk # changed error computation code to delta/totrows # # Revision 1.7 2004/03/06 18:02:48 strk # Comma-separated bps values accepted # # Revision 1.6 2004/03/05 21:06:04 strk # Added -vacuum switch # # Revision 1.5 2004/03/05 21:03:18 strk # Made the -bps switch specify the exact level(s) at which to run the test # # Revision 1.4 2004/03/05 16:40:30 strk # rewritten split_extent to be more datatype-conservative # # Revision 1.3 2004/03/05 16:01:02 strk # added -bps switch to set maximun query level. reworked command line parsing # # Revision 1.2 2004/03/05 15:29:35 strk # more verbose output # # Revision 1.1 2004/03/05 11:52:24 strk # initial import # # ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/svn_repo_revision.pl��������������������������������������������������0000755�0000000�0000000�00000005627�11723424630�021045� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl $ENV{"LC_ALL"} = "C"; use warnings; use strict; my $top_srcdir = "."; my $rev_file = $top_srcdir.'/postgis_svn_revision.h'; my $target = 'local'; $target = $ARGV[0] if $ARGV[0]; # Read the svn revision number my $svn_rev = &read_rev($target); # Write it &write_defn($svn_rev); sub read_rev { my $target = shift; #print STDERR "Target: $target\n"; my $svn_info; if ( $target eq "local" ) { if ( -d $top_srcdir."/.svn" ) { #print STDERR "There's a ". $top_srcdir."/.svn dir\n"; $svn_info = &read_rev_svn($target); } elsif ( -d $top_srcdir."/.git" ) { #print STDERR "There's a ". $top_srcdir."/.git dir\n"; $svn_info = &read_rev_git(); } else { print STDERR "Can't fetch local revision (neither .svn nor .git found)\n"; $svn_info = 0; } } else { $svn_info = &read_rev_svn($target); } return $svn_info; } sub read_rev_git { # TODO: test on old systems, I think I saw some `which` # implementations returning "nothing found" or something # like that, making the later if ( ! $svn_exe ) always false # my $git_exe = `which git`; if ( ! $git_exe ) { print STDERR "Can't fetch SVN revision: no git executable found\n"; return 0; } chop($git_exe); my $cmd = "\"${git_exe}\" log --grep=git-svn -1 | grep git-svn | cut -d@ -f2 | cut -d' ' -f1"; #print STDERR "cmd: ${cmd}\n"; my $rev = `$cmd`; if ( ! $rev ) { print STDERR "Can't fetch SVN revision from git log\n"; $rev = 0; } else { chop($rev); } return $rev; } sub read_rev_svn { my $target = shift; # TODO: test on old systems, I think I saw some `which` # implementations returning "nothing found" or something # like that, making the later if ( ! $svn_exe ) always false # my $svn_exe = `which svn`; if ( ! $svn_exe ) { print STDERR "Can't fetch SVN revision: no svn executable found\n"; return 0; } chop($svn_exe); my $svn_info; if ( $target eq "local" ) { $svn_info = `"${svn_exe}" info`; } else { $svn_info = `"${svn_exe}" info $target`; } my $rev; if ( $svn_info =~ /Last Changed Rev: (\d+)/ ) { $rev = $1; } else { print STDERR "Can't fetch SVN revision: no 'Loast Changed Rev' in `svn info` output\n"; $rev = 0; } return $rev; } sub write_defn { my $rev = shift; my $oldrev = 0; # Do not override the file if new detected # revision isn't zero nor different from the existing one if ( -f $rev_file ) { open(IN, "<$rev_file"); my $oldrevline = <IN>; if ( $oldrevline =~ /POSTGIS_SVN_REVISION (.*)/ ) { $oldrev = $1; } close(IN); if ( $rev == 0 or $rev == $oldrev ) { print STDERR "Not updating existing rev file at $oldrev\n"; return; } } my $string = "#define POSTGIS_SVN_REVISION $rev\n"; open(OUT,">$rev_file"); print OUT $string; close(OUT); print STDERR "Wrote rev file at $rev\n"; } ���������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/read_scripts_version.pl�����������������������������������������������0000755�0000000�0000000�00000000774�11722777314�021532� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl my $debug = 0; my @files = ( "postgis.sql.in.c", "geography.sql.in.c", "long_xact.sql.in.c" ); my $rev = 0; foreach $f (@files) { my $file = "./postgis/$f"; if( -f $file ) { my $r = 0; open(F, $file); while(<F>) { $r = $1 if /\$Id: \S+ (\d+) /; } print "$f got revision $r\n" if $debug && $r; $rev = $r if $r > $rev; } else { die "Could not open input file $f\n"; } } print "\nMaximum scripts revision: $rev\n\n" if $debug; print $rev if ! $debug; ����postgis-2.1.2+dfsg.orig/utils/profile_intersects.pl�������������������������������������������������0000755�0000000�0000000�00000020573�11722777314�021205� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w # $Id: profile_intersects.pl 9324 2012-02-27 22:08:12Z pramsey $ # # TODO: # # accept a finer boxesPerSide specification # eg. 1-3 or 1-32/5 # use Pg; use Time::HiRes("gettimeofday"); $VERBOSE = 0; $USE_GIST = 1; sub usage { local($me) = `basename $0`; chop($me); print STDERR "$me [-v] [-vacuum] [-bps <bps>[,<bps>]] <ext_table> <ext_col> <chk_table> <chk_col>\n"; } $ETABLE=''; $ECOLUMN=''; $CTABLE=''; $CCOLUMN=''; for ($i=0; $i<@ARGV; $i++) { if ( $ARGV[$i] =~ m/^-/ ) { if ( $ARGV[$i] eq '-v' ) { $VERBOSE++; } elsif ( $ARGV[$i] eq '-bps' ) { $bps_spec = $ARGV[++$i]; push(@bps_list, split(',', $bps_spec)); } elsif ( $ARGV[$i] eq '-vacuum' ) { $VACUUM=1; } else { print STDERR "Unknown option $ARGV[$i]:\n"; usage(); exit(1); } } elsif ( ! $ETABLE ) { $ETABLE = $ARGV[$i]; } elsif ( ! $ECOLUMN ) { $ECOLUMN = $ARGV[$i]; } elsif ( ! $CTABLE ) { $CTABLE = $ARGV[$i]; } elsif ( ! $CCOLUMN ) { $CCOLUMN = $ARGV[$i]; } else { print STDERR "Too many options:\n"; usage(); exit(1); } } if ( ! $ETABLE || ! $ECOLUMN ) { usage(); exit 1; } $ESCHEMA = 'public'; $ECOLUMN = 'the_geom' if ( $ECOLUMN eq '' ); if ( $ETABLE =~ /(.*)\.(.*)/ ) { $ESCHEMA = $1; $ETABLE = $2; } $CSCHEMA = 'public'; $CCOLUMN = 'the_geom' if ( $CCOLUMN eq '' ); if ( $CTABLE =~ /(.*)\.(.*)/ ) { $CSCHEMA = $1; $CTABLE = $2; } #connect $conn = Pg::connectdb(""); if ( $conn->status != PGRES_CONNECTION_OK ) { print STDERR $conn->errorMessage; exit(1); } if ( $VERBOSE ) { print "Table: \"$ESCHEMA\".\"$ETABLE\"\n"; print "Column: \"$ECOLUMN\"\n"; } # Get extent $query = 'select extent("'.$ECOLUMN.'")::box3d from "'.$ESCHEMA.'"."'.$ETABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $EXTENT = $res->getvalue(0, 0); # Get check geom type $query = 'select distinct geometrytype("'.$CCOLUMN.'"), getSRID("'.$CCOLUMN.'") from "'.$CSCHEMA.'"."'.$CTABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $CTYPE = $res->getvalue(0, 0); $CSRID = $res->getvalue(0, 1); # find srid of extent table $query = 'select srid("'.$ECOLUMN.'") from "'.$ESCHEMA.'"."'.$ETABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $ESRID = $res->getvalue(0, 0); if ( $ESRID != $CSRID ) { die "SRID of extent ($ESRID) and check ($CSRID) differ\n"; } $SRID=$ESRID; # parse extent $EXTENT =~ /^BOX3D\((.*) (.*) (.*),(.*) (.*) (.*)\)$/; $ext{xmin} = $1; $ext{ymin} = $2; $ext{xmax} = $4; $ext{ymax} = $5; # vacuum analyze table if ( $VACUUM ) { print "VACUUM ANALYZE\n"; $query = 'vacuum analyze "'.$ESCHEMA.'"."'.$ETABLE.'"'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_COMMAND_OK ) { print STDERR $conn->errorMessage; exit(1); } } # get number of features from pg_class.ntuples # (correct if vacuum have been run after last insertion/deletions) $query = 'SELECT c.reltuples FROM pg_class c, pg_namespace n '. "WHERE c.relnamespace = n.oid AND n.nspname = '$CSCHEMA' ". " AND c.relname = '$CTABLE'"; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } $TOTROWS=$res->getvalue(0, 0); # Disable index scan if (!$USE_GIST) { $query = 'SET enable_indexscan = off'; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_COMMAND_OK ) { print STDERR $conn->errorMessage; exit(1); } } @extents = ( \%ext ); print "Extent: ".print_extent(\%ext)."\n"; print " Type: $CTYPE\n"; print " Rows: $TOTROWS\n"; print " bps\tt\tintr\tdist\tintr/dist\n"; print "----------------------------------------------------------\n"; for ($i=0; $i<@bps_list; $i++) { $bps=$bps_list[$i]; @extents = split_extent(\%ext, $bps); $best_dist=0; $best_intr=0; $sum_fact=0; $try=0; while ( ($cell_ext=pop(@extents)) ) { local($icount, $dcount, $itime, $dtime, $fact); local($sec,$usec) = gettimeofday(); $icount = test_intersects($cell_ext); local($sec2,$usec2) = gettimeofday(); $itime = (($sec2*1000000)+$usec2)-(($sec*1000000)+$usec); local($sec,$usec) = gettimeofday(); $dcount = test_distance($cell_ext); local($sec2,$usec2) = gettimeofday(); $dtime = (($sec2*1000000)+$usec2)-(($sec*1000000)+$usec); $fact = int(($itime/$dtime)*100)/100; if ( $icount ne $dcount ) { die "intersects gave $icount true valus, distance $dcount\n"; } print " $bps\t".(int(($icount/$TOTROWS)*100)/100)."\t".$itime."\t".$dtime."\t".$fact."\n"; if ( $try == 0 || $fact > $best_dist ) { $best_dist = $fact; } if ( $try == 0 || $fact < $best_intr ) { $best_intr = $fact; } $sum_fact += abs($fact); $try++; } $avg_fact = int(($sum_fact/$try)*100)/100; print " $bps ". "(min/max/avg) \t". ($best_intr)."\t". ($best_dist)."\t". ($avg_fact)."\n"; print " $bps\tworst\t". (($best_dist)*100)."%\t". int(((1/$best_intr)*10000)/100)."%\n"; print " $bps\tbest\t". int(((1/$best_dist)*10000)/100)."%\t". (($best_intr)*100)."%\n"; } ################################################################## sub print_extent { local($ext) = shift; local($s); $s = $ext->{'xmin'}." ".$ext->{'ymin'}." "; $s .= $ext->{'xmax'}." ".$ext->{'ymax'}; return $s; } sub split_extent { local($ext) = shift; local($bps) = shift; local($width, $height, $cell_width, $cell_height); local($x,$y); local(@stack); $width = $ext->{'xmax'} - $ext->{'xmin'}; $height = $ext->{'ymax'} - $ext->{'ymin'}; $cell_width = $width / $bps; $cell_height = $height / $bps; if ($VERBOSE) { print "cell_w: $cell_width\n"; print "cell_h: $cell_height\n"; } @stack = (); for ($x=0; $x<$bps; $x++) { for($y=0; $y<$bps; $y++) { local(%cell); $cell{'xmin'} = $ext->{'xmin'}+$x*$cell_width; $cell{'ymin'} = $ext->{'ymin'}+$y*$cell_height; $cell{'xmax'} = $ext->{'xmin'}+($x+1)*$cell_width; $cell{'ymax'} = $ext->{'ymin'}+($y+1)*$cell_height; print "cell: ".print_extent(\%cell)."\n" if ($VERBOSE); push(@stack, \%cell); } } return @stack; } sub test_intersects { local($ext) = shift; # Test whole extent query if ( $USE_GIST ) { $query = 'select count(oid) from "'. $CSCHEMA.'"."'.$CTABLE.'"'. ' WHERE "'.$CCOLUMN.'" && '. "setSRID('BOX3D(".$ext->{'xmin'}." ". $ext->{'ymin'}.", ".$ext->{'xmax'}." ". $ext->{'ymax'}.")'::box3d::geometry, $SRID)". ' AND intersects("'.$CCOLUMN.'", '. "setSRID('BOX3D(".$ext->{'xmin'}." ". $ext->{'ymin'}.", ".$ext->{'xmax'}." ". $ext->{'ymax'}.")'::box3d::geometry, $SRID));"; } else { $query = 'select count(oid) from "'. $CSCHEMA.'"."'.$CTABLE. '" WHERE intersects("'.$CCOLUMN.'", '. "setSRID('BOX3D(".$ext->{'xmin'}." ". $ext->{'ymin'}.", ".$ext->{'xmax'}." ". $ext->{'ymax'}.")'::box3d::geometry, $SRID));"; } $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR "$query: ".$conn->errorMessage; exit(1); } $row=$res->fetchrow(); return $row; } sub test_distance { local($ext) = shift; # Test whole extent query if ( $USE_GIST ) { $query = 'select count(oid) from "'. $CSCHEMA.'"."'.$CTABLE.'"'. ' WHERE "'.$CCOLUMN.'" && '. "setSRID('BOX3D(".$ext->{'xmin'}." ". $ext->{'ymin'}.", ".$ext->{'xmax'}." ". $ext->{'ymax'}.")'::box3d::geometry, $SRID)". ' AND distance("'.$CCOLUMN.'", '. "setSRID('BOX3D(".$ext->{'xmin'}." ". $ext->{'ymin'}.", ".$ext->{'xmax'}." ". $ext->{'ymax'}.")'::box3d::geometry, $SRID))=0;"; } else { $query = 'select count(oid) from "'. $CSCHEMA.'"."'.$CTABLE. '" WHERE distance("'.$CCOLUMN.'", '. "setSRID('BOX3D(".$ext->{'xmin'}." ". $ext->{'ymin'}.", ".$ext->{'xmax'}." ". $ext->{'ymax'}."'::box3d::geometry, $SRID))=0;"; } $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR "$query: ".$conn->errorMessage; exit(1); } $row=$res->fetchrow(); return $row; } # # $Log$ # Revision 1.4 2004/09/27 08:23:45 strk # Added USE_GIST variable on top of file. Changed true values report # as fraction of total rows. # # Revision 1.3 2004/09/24 12:20:56 strk # Added worst and best percentile for both intersects and distance # # Revision 1.2 2004/09/24 11:58:01 strk # approximated nums to 2 decimal digits # # Revision 1.1 2004/09/24 11:35:45 strk # initial intersects profiler frontend implementation # �������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/README����������������������������������������������������������������0000644�0000000�0000000�00000000641�11722777314�015614� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������test_estimation.pl test selectivity estimator for the && (overlap) operator postgis_restore.pl restore a spatial database dump to a (possibly updated) new spatial database. postgis_proc_upgrade.pl Create a postgis procedures upgrade script. Will warn if operations is not cleanly possible due to nature of changes in postgis procedures. profile_intersects.pl compares distance()=0 and intersects() timings. �����������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/Makefile.in�����������������������������������������������������������0000644�0000000�0000000�00000003234�12133266206�016770� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ********************************************************************** # * $Id$ # * # * PostGIS - Spatial Types for PostgreSQL # * http://postgis.refractions.net # * # * Copyright 2008 Mark Cave-Ayland # * # * This is free software; you can redistribute and/or modify it under # * the terms of the GNU General Public Licence. See the COPYING file. # * # ********************************************************************** # Separate PGXS-enabled Makefile for documentation installation (it is # not possible to merge into the main Makefile as has been done for # the shapefile loader) MODULE_doc=postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ MODULEDIR=contrib/$(MODULE_doc) # Files to be copied to the contrib/ directory DATA_built=postgis_restore.pl # PGXS information PG_CONFIG = @PG_CONFIG@ PGXS := @PGXS@ include $(PGXS) SHELL = @SHELL@ INSTALL = $(SHELL) ../install-sh SCRIPTS = \ postgis_restore.pl \ create_undef.pl \ svn_repo_revision.pl \ postgis_proc_upgrade.pl \ profile_intersects.pl \ test_estimation.pl \ test_joinestimation.pl SRID_MAXIMUM = @SRID_MAX@ SRID_USER_MAXIMUM = @SRID_USR_MAX@ all: postgis_restore.pl chmod +x $(SCRIPTS) postgis_restore.pl: postgis_restore.pl.in sed 's,@SRID_MAXIMUM@,$(SRID_MAXIMUM),g;s,@SRID_USER_MAXIMUM@,$(SRID_USER_MAXIMUM),' $< >$@ installdir: @mkdir -p "$(DESTDIR)$(datadir)/$(MODULEDIR)" uninstall: @rm -f "$(DESTDIR)$(datadir)/$(MODULEDIR)/postgis_restore.pl" install: installdir $(LIBTOOL) --mode=install $(INSTALL) postgis_restore.pl "$(DESTDIR)$(datadir)/$(MODULEDIR)/postgis_restore.pl" clean: rm -f postgis_restore.pl distclean: clean rm -f Makefile # And there's nothing to check check: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/postgis_proc_upgrade.pl�����������������������������������������������0000755�0000000�0000000�00000021527�12314070106�021503� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # # PostGIS - Spatial Types for PostgreSQL # http://postgis.refractions.net # # Copyright (C) 2009-2010 Paul Ramsey <pramsey@opengeo.org> # Copyright (C) 2005 Refractions Research Inc. # # This is free software; you can redistribute and/or modify it under # the terms of the GNU General Public Licence. See the COPYING file. # # # This script produces an .sql file containing # CREATE OR REPLACE calls for each function # in postgis.sql # # In addition, the transaction contains # a check for Major postgis_lib_version() # to match the one contained in lwpostgis.sql # # This never happens by just running make install # as MODULE_FILENAME contains SO_MAJOR under # all architectures. # # eval "exec perl -w $0 $@" if (0); use strict; use warnings; # # Conditionally upgraded types and operators. Only include these # if the major numbers in version_from are less than the version_to # number. # # TODO: move configuration outside of code # my $objs = { "102" => { "aggregates" => { "st_extent(geometry)" => 1, "st_memcollect(geometry)" => 1, "st_memunion(geometry)" => 1, "st_accum(geometry)" => 1, "st_union(geometry)" => 1, "st_collect(geometry)" => 1, "st_polygonize(geometry)" => 1, "st_makeline(geometry)" => 1 } }, "104" => { "types" => { "box3d_extent" => 1, "pgis_abs" => 1 } }, "105" => { "operators" => { "geography >" => 1, "geography >=" => 1, "geography =" => 1, "geography <=" => 1, "geography <" => 1, "geography &&" => 1 }, "opclasses" => { "gist_geography_ops" => 1, "btree_geography_ops" => 1 }, "views" => { "geography_columns" => 1 }, "types" => { "geography" => 1, "gidx" => 1 } }, "200" => { "aggregates" => { "st_3dextent(geometry)" => 1, "topology.topoelementarray_agg(topology.topoelement)" => 1 } }, "201" => { "aggregates" => { "st_samealignment(raster)" => 1, "st_union(raster,unionarg[])" => 1, "st_union(raster,integer,text)" => 1, "st_union(raster,integer)" => 1, "st_union(raster)" => 1, "st_union(raster,text)" => 1 }, "operators" => { "raster =" => 1 }, "opclasses" => { "hash_raster_ops" => 1 }, } }; # # Commandline argument handling # ($#ARGV == 0) || die "Usage: perl postgis_proc_upgrade.pl <postgis.sql> <version_from> [<schema>]\nCreates a new SQL script to upgrade all of the PostGIS functions.\n" if ( @ARGV < 1 || @ARGV > 3 ); my $sql_file = $ARGV[0]; my $module = 'postgis'; my $version_to = ""; my $version_to_num = 0; my $version_from = $ARGV[1]; my $version_from_num = 0; my $schema = ""; $schema = $ARGV[2] if @ARGV > 2; if ( $version_from =~ /^(\d+)\.(\d+)/ ) { $version_from_num = 100 * $1 + $2; } else { die "Version from number invalid, must be of form X.X\n"; } die "Unable to open input SQL file $sql_file\n" if ( ! -f $sql_file ); # # Search the SQL file for the target version number (the # version we are upgrading *to*. # open( INPUT, $sql_file ) || die "Couldn't open file: $sql_file\n"; while(<INPUT>) { # # Since 1.1.0 scripts/lib/release versions are the same # if (/INSTALL VERSION: (.*)/) { $version_to = $1; last; } elsif (/TYPE raster/) { $module = 'postgis_raster'; } } close(INPUT); die "Unable to locate target new version number in $sql_file\n" if( ! $version_to ); if ( $version_to =~ /(\d+)\.(\d+)\..*/ ) { $version_to = $1 . "." . $2; $version_to_num = 100 * $1 + $2; } else { die "Version to number invalid, must be of form X.X.X\n"; } print qq{ -- -- UPGRADE SCRIPT FROM PostGIS $version_from TO PostGIS $version_to -- }; print "BEGIN;\n"; print "SET search_path TO $schema;\n" if $schema; # # Add in the conditional check function to ensure this script is # not being applied to a major version update. # while(<DATA>) { s/NEWVERSION/$version_to/g; s/MODULE/$module/g; print; } # # Go through the SQL file and strip out objects that cannot be # applied to an existing, loaded database: types and operators # and operator classes that have already been defined. # open( INPUT, $sql_file ) || die "Couldn't open file: $sql_file\n"; while(<INPUT>) { next if ( /^\-\-/ ); # # Allow through deprecations from postgis_drop.sql # print if ( /^drop function if exists/i ); print if ( /^drop aggregate if exists/i ); if ( /^create or replace function/i ) { print $_; my $endfunc = 0; while(<INPUT>) { print $_; $endfunc = 1 if /^\s*(\$\$\s*)?LANGUAGE /; last if ( $endfunc && /\;/ ); } } if ( /^create type (\w+)/i ) { my $newtype = $1; my $def .= $_; while(<INPUT>) { $def .= $_; last if /\)/; } my $ver = $version_from_num + 1; while( $version_from_num < $version_to_num && $ver <= $version_to_num ) { if( $objs->{$ver}->{"types"}->{$newtype} ) { print $def; last; } $ver++; } } if ( /^do *language .*\$\$/i ) { print; while(<INPUT>) { print; last if /\$\$/; } } # This code handles casts by dropping and recreating them. if ( /^create cast\s+\(\s*(\w+)\s+as\s+(\w+)\)/i ) { my $type1 = $1; my $type2 = $2; my $def = $_; unless (/;$/) { while(<INPUT>) { $def .= $_; last if /;$/; } } print "DROP CAST IF EXISTS ($type1 AS $type2);\n"; print $def; } # This code handles aggregates by dropping and recreating them. if ( /^create aggregate\s+([^(]+)\s*\(/i ) { my $aggname = $1; #print "-- Aggname ${aggname}\n"; my $aggtype = 'unknown'; my $def = $_; if ( /^create aggregate\s+\S+\s*\(([^)]*)\)/i ) { $aggtype = $1; $aggtype =~ s/\s*,\s*/,/g; # drop spaces around commas $aggtype =~ s/\s\s*/ /g; # collapse multiple spaces into one } while(<INPUT>) { $def .= $_; $aggtype = $1 if ( /basetype\s*=\s*([^,]*)\s*,/i ); last if /\);/; } my $aggsig = "$aggname($aggtype)"; my $ver = $version_from_num + 1; #print "-- Checking ${aggsig} -- From: ${version_from_num} -- To: ${version_to_num}\n"; while( $version_from_num < $version_to_num && $ver <= $version_to_num ) { if( $objs->{$ver}->{"aggregates"}->{$aggsig} ) { print "DROP AGGREGATE IF EXISTS $aggsig;\n"; print $def; } $ver++; } } # This code handles operators by creating them if we are doing a major upgrade if ( /^create operator\s+(\S+)\s*\(/i ) { my $opname = $1; my $optype = 'unknown'; my $def = $_; while(<INPUT>) { $def .= $_; $optype = $1 if ( /leftarg\s*=\s*(\w+)\s*,/i ); last if /\);/; } my $opsig = $optype . " " . $opname; my $ver = $version_from_num + 1; while( $version_from_num < $version_to_num && $ver <= $version_to_num ) { if( $objs->{$ver}->{"operators"}->{$opsig} ) { print $def; last; } $ver++; } } # Always output create ore replace view (see ticket #1097) if ( /^create or replace view\s+(\S+)\s*/i ) { print; while(<INPUT>) { print; last if /\;\s*$/; } } # Always output create ore replace rule if ( /^create or replace rule\s+(\S+)\s*/i ) { print; while(<INPUT>) { print; last if /\;\s*$/; } } # This code handles operator classes by creating them if we are doing a major upgrade if ( /^create operator class\s+(\w+)\s*/i ) { my $opclassname = $1; my $opctype = 'unknown'; my $opcidx = 'unknown'; my $def = $_; while(<INPUT>) { $def .= $_; $opctype = $1 if ( /for type (\w+) /i ); $opcidx = $1 if ( /using (\w+) /i ); last if /\);/; } $opctype =~ tr/A-Z/a-z/; $opcidx =~ tr/A-Z/a-z/; my $ver = $version_from_num + 1; while( $version_from_num < $version_to_num && $ver <= $version_to_num ) { if( $objs->{$ver}->{"opclasses"}->{$opclassname} ) { print $def; last; } $ver++; } } } close( INPUT ); print "COMMIT;\n"; 1; __END__ CREATE OR REPLACE FUNCTION postgis_major_version_check() RETURNS text AS ' DECLARE old_scripts text; new_scripts text; old_maj text; new_maj text; BEGIN -- -- This uses postgis_lib_version() rather then -- postgis_scripts_installed() as in 1.0 because -- in the 1.0 => 1.1 transition that would result -- in an impossible upgrade: -- -- from 0.3.0 to 1.1.0 -- -- Next releases will still be ok as -- postgis_lib_version() and postgis_scripts_installed() -- would both return actual PostGIS release number. -- BEGIN SELECT into old_scripts MODULE_lib_version(); EXCEPTION WHEN OTHERS THEN RAISE DEBUG ''Got %'', SQLERRM; SELECT into old_scripts MODULE_scripts_installed(); END; SELECT into new_scripts ''NEWVERSION''; SELECT into old_maj substring(old_scripts from 1 for 2); SELECT into new_maj substring(new_scripts from 1 for 2); IF old_maj != new_maj THEN RAISE EXCEPTION ''Upgrade of MODULE from version % to version % requires a dump/reload. See PostGIS manual for instructions'', old_scripts, new_scripts; ELSE RETURN ''Scripts versions checked for upgrade: ok''; END IF; END ' LANGUAGE 'plpgsql'; SELECT postgis_major_version_check(); DROP FUNCTION postgis_major_version_check(); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/postgis_restore.pl.in�������������������������������������������������0000755�0000000�0000000�00000440572�12212624455�021137� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # # PostGIS - Spatial Types for PostgreSQL # http://postgis.refractions.net # # Copyright (C) 2011 OpenGeo.org # Copyright (C) 2009 Paul Ramsey <pramsey@cleverelephant.ca> # # This is free software; you can redistribute and/or modify it under # the terms of the GNU General Public Licence. See the COPYING file. # #--------------------------------------------------------------------- # # This script is aimed at restoring postgis data # from a dumpfile produced by pg_dump -Fc # # Basically it will restore all but things known to belong # to postgis. Will also convert some old known constructs # into new ones. # # Tested on: # # pg-8.4.9/pgis-1.4.3 => pg-8.4.9/pgis-2.0.0SVN # pg-8.4.9/pgis-2.0.0SVN => pg-8.4.9/pgis-2.0.0SVN # pg-8.4.9/pgis-2.0.0SVN => pg-9.1.2/pgis-2.0.0SVN # pg-9.1b3/pgis-1.5.3 => pg-9.1.1/pgis-2.0.0SVN # #--------------------------------------------------------------------- use warnings; use strict; my $me = $0; my $usage = qq{ Usage: $me [-v] [-s schema] <dumpfile> Restore a custom dump (pg_dump -Fc) of a PostGIS-enabled database. First dump the old database: pg_dump -Fc MYDB > MYDB.dmp Then create a new database: createdb NEWDB Then install PostGIS in the new database: psql -f postgis/postgis.sql NEWDB Also install PostGIS topology and raster, if you were using them: psql -f topology/topology.sql NEWDB psql -f raster/rtpostgis.sql NEWDB Finally, pass the dump to this script and feed output to psql: $me MYDB.dmp | psql NEWDB The -v switch writes detailed report on stderr. Use -s if you installed PostGIS in a custom schema. }; my $DEBUG = 0; my $POSTGIS_SCHEMA; # NOTE: the SRID limits here are being discussed: # http://postgis.refractions.net/pipermail/postgis-devel/2012-February/018463.html my $SRID_MAXIMUM = @SRID_MAXIMUM@; my $SRID_USER_MAXIMUM = @SRID_USER_MAXIMUM@; while (@ARGV && $ARGV[0] =~ /^-/) { my $arg = shift(@ARGV); if ( $arg eq '-v' ) { $DEBUG = 1; } elsif ( $arg eq '-s' ) { $POSTGIS_SCHEMA = shift(@ARGV); } elsif ( $arg eq '--' ) { last; } else { print STDERR "Unknown switch " . $arg; die $usage; } } die $usage if (@ARGV < 1); my $dumpfile = $ARGV[0]; my $manifest = $dumpfile . ".lst"; my $hasTopology = 0; die "$me:\tUnable to find 'pg_dump' on the path.\n" if ! `pg_dump --version`; die "$me:\tUnable to find 'pg_restore' on the path.\n" if ! `pg_restore --version`; die "$me:\tUnable to open dump file '$dumpfile'.\n" if ! -f $dumpfile; print STDERR "Converting $dumpfile to ASCII on stdout...\n"; ###################################################################### # Load the signatures of things to skip. # print STDERR " Reading list of functions to ignore...\n"; my %skip = (); while(my $l = <DATA>) { chop($l); print STDERR "DATA: $l\n" if $DEBUG; $l =~ s/\s//g; $skip{$l} = 1; } ###################################################################### # Write a new manifest for the dump file, skipping the things that # are part of PostGIS # print STDERR " Writing manifest of things to read from dump file...\n"; open( DUMP, "pg_restore -l $dumpfile |" ) || die "$me:\tCannot open dump file '$dumpfile'\n"; open( MANIFEST, ">$manifest" ) || die "$me:\tCannot open manifest file '$manifest'\n"; while( my $l = <DUMP> ) { next if $l =~ /^\;/; my $sigHR = linesignature($l); my $sig = $sigHR; $sig =~ s/\s//g; $hasTopology = 1 if $sig eq 'SCHEMAtopology'; if ( $skip{$sig} ) { print STDERR "SKIP: $sigHR\n" if $DEBUG; next } print STDERR "KEEP: $sigHR\n" if $DEBUG; print MANIFEST $l; } close(MANIFEST); close(DUMP) || die "$me: pg_restore returned an error\n"; ###################################################################### # Convert the dump file into an ASCII file, stripping out the # unwanted bits. # print STDERR " Writing ASCII to stdout...\n"; open( INPUT, "pg_restore -L $manifest $dumpfile |") || die "$me:\tCan't run pg_restore\n"; if ( defined $POSTGIS_SCHEMA ) { print STDOUT "SET search_path = \"" . $POSTGIS_SCHEMA . "\";\n"; } # # Disable topology metadata tables triggers to allow for population # in arbitrary order. # if ( $hasTopology ) { print STDOUT "ALTER TABLE topology.layer DISABLE TRIGGER ALL;\n"; } # Drop the spatial_ref_sys_srid_check to allow for custom invalid SRIDs in the dump print STDOUT "ALTER TABLE spatial_ref_sys DROP constraint " . "spatial_ref_sys_srid_check;\n"; # Drop the spatial_ref_sys primary key to allow for SRID conversions # which possibly end up taking the same spot print STDOUT "ALTER TABLE spatial_ref_sys DROP constraint " . "spatial_ref_sys_pkey;\n"; # Backup entries found in new spatial_ref_sys for later updating the print STDOUT "CREATE TEMP TABLE _pgis_restore_spatial_ref_sys AS " ."SELECT * FROM spatial_ref_sys;\n"; print STDOUT "DELETE FROM spatial_ref_sys;\n"; my $inCopy; while( my $l = <INPUT> ) { if ( $l =~ /^COPY .+ FROM stdin;$/ ) { $inCopy = 1; } elsif ( $inCopy && $l =~ /^\\\.$/ ) { $inCopy = 0; } next if !$inCopy && $l =~ /^ *--/; if ( $l =~ /^SET search_path/ ) { $l =~ s/; *$/, public;/; } # This is to avoid confusing OPERATOR CLASS and OPERATOR FAMILY # with OPERATOR below elsif ( $l =~ /CREATE OPERATOR CLASS/ || $l =~ /CREATE OPERATOR FAMILY/ ) { } # We can't skip OPERATORS from the manifest file # because it doesn't contain enough informations # about the type the operator is for elsif ( $l =~ /CREATE OPERATOR *([^ ,]*)/) { my $name = canonicalize_typename($1); my $larg = undef; my $rarg = undef; my @sublines = ($l); while( my $subline = <INPUT>) { push(@sublines, $subline); last if $subline =~ /;[\t ]*$/; if ( $subline =~ /leftarg *= *([^ ,]*)/i ) { $larg=canonicalize_typename($1); } if ( $subline =~ /rightarg *= *([^ ,]*)/i ) { $rarg=canonicalize_typename($1); } } if ( ! $larg ) { print STDERR "No larg, @sublines: [" . @sublines . "]\n"; } my $sigHR = "OPERATOR " . $name .' ('.$larg.', '.$rarg.')'; my $sig = $sigHR; $sig =~ s/\s//g; if ( $skip{$sig} ) { print STDERR "SKIP: $sig\n" if $DEBUG; next; } print STDERR "KEEP: $sig\n" if $DEBUG; print STDOUT @sublines; next; } # Rewrite spatial table constraints # # Example 1: # CREATE TABLE geos_in ( # id integer NOT NULL, # g public.geometry, # CONSTRAINT enforce_dims_g CHECK ((public.st_ndims(g) = 2)), # CONSTRAINT enforce_geotype_g CHECK (((public.geometrytype(g) = 'MULTILINESTRING'::text) OR (g IS NULL))), # CONSTRAINT enforce_srid_g CHECK ((public.st_srid(g) = (-1))) # ); # # Example 2: # CREATE TABLE boszip ( # gid integer NOT NULL, # zip5 character(5), # the_geom geometry, # CONSTRAINT enforce_dims_the_geom CHECK ((ndims(the_geom) = 2)), # CONSTRAINT enforce_geotype_the_geom CHECK (((geometrytype(the_geom) = 'MULTIPOLYGON'::text) OR (the_geom IS NULL))), # CONSTRAINT enforce_srid_the_geom CHECK ((srid(the_geom) = 2249)) # ); # # Example 3: # CREATE TABLE "PIANIFICAZIONE__ELEMENTO_LINEA" ( # soft_gis_serial integer NOT NULL, # "G" public.geometry, # CONSTRAINT "enforce_dims_G" CHECK ((public.st_ndims("G") = 2)), # CONSTRAINT "enforce_geotype_G" CHECK (((public.geometrytype("G") = 'MULTICURVE'::text) OR ("G" IS NULL))), # CONSTRAINT "enforce_srid_G" CHECK ((public.st_srid("G") = (-1))) # ); # # elsif ( $l =~ /CREATE TABLE *([^ ,]*)/) { my @sublines = ($l); while( my $subline = <INPUT>) { if ( $subline =~ /CONSTRAINT "?enforce_dims_/i ) { $subline =~ s/\bndims\(/st_ndims(/; } if ( $subline =~ /CONSTRAINT "?enforce_srid_/i ) { $subline =~ s/\bsrid\(/st_srid(/; if ( $subline =~ /=\s\(?([-0-9][0-9]*)\)/ ) { my $oldsrid = $1; my $newsrid = clamp_srid($oldsrid); $subline =~ s/=\s*(\(?)[-0-9][0-9]*/= $1$newsrid/; } else { print STDERR "WARNING: could not find SRID value in: $subline"; } } push(@sublines, $subline); last if $subline =~ /;[\t ]*$/; } print STDOUT @sublines; next; } # Clamp SRIDS in spatial_ref_sys elsif ( $l =~ /COPY spatial_ref_sys /) { print STDOUT $l; while( my $subline = <INPUT>) { if ( $subline =~ /([0-9]*)\t/ ) { my $oldsrid = $1; my $newsrid = clamp_srid($oldsrid); $subline =~ s/^[0-9]*\t/${newsrid}\t/; } print STDOUT $subline; last if $subline =~ /^\\.$/; } next; } print STDOUT $l; } if ( defined $POSTGIS_SCHEMA ) { print STDOUT "SET search_path = \"" . $POSTGIS_SCHEMA . "\";\n"; } if ( $hasTopology ) { # Re-enable topology.layer table triggers print STDOUT "ALTER TABLE topology.layer ENABLE TRIGGER ALL;\n"; # Update topology SRID from geometry_columns view. # This is mainly to fix srids of -1 # May be worth providing a "populate_topology_topology" print STDOUT "UPDATE topology.topology t set srid = g.srid " . "FROM geometry_columns g WHERE t.name = g.f_table_schema " . "AND g.f_table_name = 'face' and f_geometry_column = 'mbr';\n"; } # Update spatial_ref_sys with entries found in new table print STDOUT "UPDATE spatial_ref_sys o set auth_name = n.auth_name, " . "auth_srid = n.auth_srid, srtext = n.srtext, " . "proj4text = n.proj4text FROM " . "_pgis_restore_spatial_ref_sys n WHERE o.srid = n.srid;\n"; # Insert entries only found in new table print STDOUT "INSERT INTO spatial_ref_sys SELECT * FROM " . "_pgis_restore_spatial_ref_sys n WHERE n.srid " . "NOT IN ( SELECT srid FROM spatial_ref_sys );\n"; # DROP TABLE _pgis_restore_spatial_ref_sys; print STDOUT "DROP TABLE _pgis_restore_spatial_ref_sys;\n"; # Try re-enforcing spatial_ref_sys_srid_check, would fail if impossible # but you'd still have your data print STDOUT "ALTER TABLE spatial_ref_sys ADD constraint " . "spatial_ref_sys_srid_check check " . "( srid > 0 and srid < " . ($SRID_USER_MAXIMUM+1) ." ) ;\n"; # Try re-enforcing spatial_ref_sys primary key, would fail if impossible # but you'd still have your data print STDOUT "ALTER TABLE spatial_ref_sys ENABLE TRIGGER ALL;\n"; print STDOUT "ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid);\n"; print STDERR "Done.\n"; ###################################################################### # Strip a dump file manifest line down to the unique elements of # type and signature. # sub linesignature { my $line = shift; my $sig; $line =~ s/\n$//; $line =~ s/\r$//; $line =~ s/OPERATOR CLASS/OPERATORCLASS/; $line =~ s/TABLE DATA/TABLEDATA/; $line =~ s/SHELL TYPE/SHELLTYPE/; $line =~ s/PROCEDURAL LANGUAGE/PROCEDURALLANGUAGE/; if( $line =~ /^(\d+)\; (\d+) (\d+) FK (\w+) (\w+) (.*) (\w*)/ ) { $sig = "FK " . $4 . " " . $6; } elsif( $line =~ /^(\d+)\; (\d+) (\d+) (\w+) (\w+) (.*) (\w*)/ ) { $sig = $4 . " " . $6; } elsif( $line =~ /PROCEDURALLANGUAGE.*plpgsql/ ) { $sig = "PROCEDURAL LANGUAGE plpgsql"; } elsif ( $line =~ /SCHEMA - (\w+)/ ) { $sig = "SCHEMA $1"; } elsif ( $line =~ /SEQUENCE - (\w+)/ ) { $sig = "SEQUENCE $1"; } else { # TODO: something smarter here... $sig = $line } return $sig; } # # Canonicalize type names (they change between dump versions). # Here we also strip schema qualification # sub canonicalize_typename { my $arg=shift; # Lower case $arg = lc($arg); # Trim whitespaces $arg =~ s/^\s*//; $arg =~ s/\s*$//; # Strip schema qualification #$arg =~ s/^public.//; $arg =~ s/^.*\.//; # Handle type name changes if ( $arg eq 'opaque' ) { $arg = 'internal'; } elsif ( $arg eq 'boolean' ) { $arg = 'bool'; } elsif ( $arg eq 'oldgeometry' ) { $arg = 'geometry'; } # Timestamp with or without time zone if ( $arg =~ /timestamp .* time zone/ ) { $arg = 'timestamp'; } return $arg; } # Change SRID to be within allowed ranges sub clamp_srid { my $oldsrid = shift; my $newsrid = $oldsrid; if ( $oldsrid < 0 ) { $newsrid = 0; printf STDERR " WARNING: SRID $oldsrid converted to $newsrid (official UNKNOWN)\n"; } elsif ( $oldsrid > $SRID_MAXIMUM ) { $newsrid = $SRID_USER_MAXIMUM + 1 + # -1 is to reduce likelyhood of clashes # NOTE: must match core implementation (lwutil.c) ( $oldsrid % ( $SRID_MAXIMUM - $SRID_USER_MAXIMUM - 1 ) ); printf STDERR " WARNING: SRID $oldsrid converted to $newsrid (in reserved zone)\n"; } elsif ( $oldsrid > $SRID_USER_MAXIMUM ) { printf STDERR " WARNING: SRID $newsrid is in reserved zone\n"; } return $newsrid; } ###################################################################### # Here are all the signatures we want to skip. # __END__ AGGREGATE accum(geometry) AGGREGATE accum_old(geometry) AGGREGATE collect(geometry) AGGREGATE extent3d(geometry) AGGREGATE extent(geometry) AGGREGATE geomunion(geometry) AGGREGATE geomunion_old(geometry) AGGREGATE makeline(geometry) AGGREGATE memcollect(geometry) AGGREGATE memgeomunion(geometry) AGGREGATE polygonize(geometry) AGGREGATE st_3dextent(geometry) AGGREGATE st_accum(geometry) AGGREGATE st_accum_old(geometry) AGGREGATE st_collect(geometry) AGGREGATE st_extent3d(geometry) AGGREGATE st_extent(geometry) AGGREGATE st_makeline(geometry) AGGREGATE st_memcollect(geometry) AGGREGATE st_memunion(geometry) AGGREGATE st_polygonize(geometry) AGGREGATE st_union(geometry) AGGREGATE st_union_old(geometry) AGGREGATE st_union(raster) AGGREGATE st_union(raster, integer) AGGREGATE st_union(raster, integer, text) AGGREGATE st_union(raster, text) AGGREGATE st_union(raster, text, text) AGGREGATE st_union(raster, text, text, text) AGGREGATE st_union(raster, text, text, text, double precision) AGGREGATE st_union(raster, text, text, text, double precision, text, text, text, double precision) AGGREGATE st_union(raster, text, text, text, double precision, text, text, text, double precision, text, text, text, double precision) AGGREGATE topoelementarray_agg(topoelement) CAST CAST (boolean AS text) CAST CAST (bytea AS public.geography) CAST CAST (bytea AS public.geometry) CAST CAST (public.box2d AS public.box3d) CAST CAST (public.box2d AS public.geometry) CAST CAST (public.box3d AS box) CAST CAST (public.box3d AS public.box2d) CAST CAST (public.box3d AS public.geometry) CAST CAST (public.box3d_extent AS public.box2d) CAST CAST (public.box3d_extent AS public.box3d) CAST CAST (public.box3d_extent AS public.geometry) CAST CAST (public.chip AS public.geometry) CAST CAST (public.geography AS bytea) CAST CAST (public.geography AS public.geography) CAST CAST (public.geography AS public.geometry) CAST CAST (public.geometry AS box) CAST CAST (public.geometry AS bytea) CAST CAST (public.geometry AS public.box2d) CAST CAST (public.geometry AS public.box3d) CAST CAST (public.geometry AS public.geography) CAST CAST (public.geometry AS public.geometry) CAST CAST (public.geometry AS text) CAST CAST (public.raster AS box2d) CAST CAST (public.raster AS bytea) CAST CAST (public.raster AS public.box2d) CAST CAST (public.raster AS public.box3d) CAST CAST (public.raster AS public.geometry) CAST CAST (raster AS bytea) CAST CAST (raster AS geometry) CAST CAST (text AS public.geometry) CAST CAST (topology.topogeometry AS geometry) CAST CAST (topology.topogeometry AS public.geometry) COMMENT AGGREGATE st_3dextent(geometry) COMMENT AGGREGATE st_accum(geometry) COMMENT AGGREGATE st_collect(geometry) COMMENT AGGREGATE st_extent3d(geometry) COMMENT AGGREGATE st_extent(geometry) COMMENT AGGREGATE st_makeline(geometry) COMMENT AGGREGATE st_memunion(geometry) COMMENT AGGREGATE st_polygonize(geometry) COMMENT AGGREGATE st_union(geometry) COMMENT AGGREGATE st_union(raster) COMMENT AGGREGATE st_union(raster, integer) COMMENT AGGREGATE st_union(raster, integer, text) COMMENT AGGREGATE st_union(raster, text) COMMENT AGGREGATE topoelementarray_agg(topoelement) COMMENT DOMAIN topoelement COMMENT DOMAIN topoelementarray COMMENT FUNCTION addauth(text) COMMENT FUNCTION addedge(atopology character varying, aline public.geometry) COMMENT FUNCTION addedge(character varying, public.geometry) COMMENT FUNCTION addface(atopology character varying, apoly public.geometry, force_new boolean) COMMENT FUNCTION addgeometrycolumn(catalog_namecharacter varying, schema_namecharacter varying, table_namecharacter varying, column_namecharacter varying, new_srid_ininteger, new_typecharacter varying, new_diminteger, use_typmodboolean) COMMENT FUNCTION addgeometrycolumn(character varying, character varying, character varying, character varying, integer, character varying, integer) COMMENT FUNCTION addgeometrycolumn(character varying, character varying, character varying, integer, character varying, integer) COMMENT FUNCTION addgeometrycolumn(character varying, character varying, integer, character varying, integer) COMMENT FUNCTION addgeometrycolumn(schema_name character varying, table_name character varying, column_name character varying, new_srid integer, new_type character varying, new_dim integer, use_typmod boolean) COMMENT FUNCTION addgeometrycolumn(table_name character varying, column_name character varying, new_srid integer, new_type character varying, new_dim integer, use_typmod boolean) COMMENT FUNCTION addnode(atopology character varying, apoint public.geometry, allowedgesplitting boolean, setcontainingface boolean) COMMENT FUNCTION addnode(character varying, public.geometry) COMMENT FUNCTION addrasterconstraints(rastschema name, rasttable name, rastcolumn name, srid boolean, scale_x boolean, scale_y boolean, blocksize_x boolean, blocksize_y boolean, same_alignment boolean, regular_blocking boolean, num_bands boolean, pixel_types boolean, nodata_values boolean, extent boolean) COMMENT FUNCTION addrasterconstraints(rastschema name, rasttable name, rastcolumn name, VARIADIC constraints text[]) COMMENT FUNCTION addrasterconstraints(rasttable name, rastcolumn name, srid boolean, scale_x boolean, scale_y boolean, blocksize_x boolean, blocksize_y boolean, same_alignment boolean, regular_blocking boolean, num_bands boolean, pixel_types boolean, nodata_values boolean, extent boolean) COMMENT FUNCTION addrasterconstraints(rasttable name, rastcolumn name, VARIADIC constraints text[]) COMMENT FUNCTION addtopogeometrycolumn(character varying, character varying, character varying, character varying, character varying) COMMENT FUNCTION addtopogeometrycolumn(character varying, character varying, character varying, character varying, character varying, integer) COMMENT FUNCTION addtopogeometrycolumn(toponame character varying, schema character varying, tbl character varying, col character varying, ltype character varying, child integer) COMMENT FUNCTION asgml(tgtopogeometry) COMMENT FUNCTION asgml(tgtopogeometry, nsprefix_in text, precision_in integer, options_in integer, visitedtable regclass, idprefix text, gmlver integer) COMMENT FUNCTION asgml(tgtopogeometry, nsprefix text) COMMENT FUNCTION asgml(tgtopogeometry, nsprefix text, prec integer, options integer, visitedtable regclass, idprefix text) COMMENT FUNCTION asgml(tgtopogeometry, nsprefix text, prec integer, options integer, vis regclass) COMMENT FUNCTION asgml(tgtopogeometry, nsprefix text, prec integer, opts integer) COMMENT FUNCTION asgml(tgtopogeometry, visitedtable regclass) COMMENT FUNCTION asgml(tgtopogeometry, visitedtable regclass, nsprefix text) COMMENT FUNCTION box2d(geometry) COMMENT FUNCTION box3d(geometry) COMMENT FUNCTION box3d(raster) COMMENT FUNCTION checkauth(text, text) COMMENT FUNCTION checkauth(text, text, text) COMMENT FUNCTION copytopology(atopologycharacter varying, newtopocharacter varying) COMMENT FUNCTION createtopogeom(character varying, integer, integer, topoelementarray) COMMENT FUNCTION createtopogeom(toponame character varying, tg_type integer, layer_id integer) COMMENT FUNCTION createtopogeom(toponame character varying, tg_type integer, layer_id integer, tg_objs topoelementarray) COMMENT FUNCTION createtopology(atopology character varying, srid integer, prec double precision, hasz boolean) COMMENT FUNCTION createtopology(character varying) COMMENT FUNCTION createtopology(character varying, integer) COMMENT FUNCTION createtopology(toponame character varying, sridinteger, precdouble precision) COMMENT FUNCTION disablelongtransactions() COMMENT FUNCTION dropgeometrycolumn(catalog_namecharacter varying, schema_namecharacter varying, table_namecharacter varying, column_namecharacter varying) COMMENT FUNCTION dropgeometrycolumn(character varying, character varying) COMMENT FUNCTION dropgeometrycolumn(character varying, character varying, character varying) COMMENT FUNCTION dropgeometrycolumn(character varying, character varying, character varying, character varying) COMMENT FUNCTION dropgeometrycolumn(schema_namecharacter varying, table_namecharacter varying, column_namecharacter varying) COMMENT FUNCTION dropgeometrycolumn(table_namecharacter varying, column_namecharacter varying) COMMENT FUNCTION dropgeometrytable(catalog_namecharacter varying, schema_namecharacter varying, table_namecharacter varying) COMMENT FUNCTION dropgeometrytable(character varying) COMMENT FUNCTION dropgeometrytable(character varying, character varying) COMMENT FUNCTION dropgeometrytable(character varying, character varying, character varying) COMMENT FUNCTION dropgeometrytable(schema_namecharacter varying, table_namecharacter varying) COMMENT FUNCTION dropgeometrytable(table_namecharacter varying) COMMENT FUNCTION droprasterconstraints(rastschema name, rasttable name, rastcolumn name, VARIADIC constraints text[]) COMMENT FUNCTION droprasterconstraints(rasttablename, rastcolumnname, sridboolean, scale_xboolean, scale_yboolean, blocksize_xboolean, blocksize_yboolean, same_alignmentboolean, regular_blockingboolean, num_bandsboolean, pixel_typesboolean, nodata_valuesboolean, extentboolean) COMMENT FUNCTION droptopogeometrycolumn(character varying, character varying, character varying) COMMENT FUNCTION droptopogeometrycolumn(schema character varying, tbl character varying, col character varying) COMMENT FUNCTION droptopology(atopology character varying) COMMENT FUNCTION droptopology(character varying) COMMENT FUNCTION enablelongtransactions() COMMENT FUNCTION find_srid(character varying, character varying, character varying) COMMENT FUNCTION geometrytype(geometry) COMMENT FUNCTION getedgebypoint(atopologycharacter varying, apointpublic.geometry, tol1double precision) COMMENT FUNCTION getfacebypoint(atopologycharacter varying, apointpublic.geometry, tol1double precision) COMMENT FUNCTION getnodebypoint(atopologycharacter varying, apointpublic.geometry, tol1double precision) COMMENT FUNCTION gettopogeomelementarray(character varying, integer, integer) COMMENT FUNCTION gettopogeomelementarray(tg topogeometry) COMMENT FUNCTION gettopogeomelementarray(topogeometry) COMMENT FUNCTION gettopogeomelementarray(toponame character varying, layer_id integer, tgid integer) COMMENT FUNCTION gettopogeomelements(character varying, integer, integer) COMMENT FUNCTION gettopogeomelements(tg topogeometry) COMMENT FUNCTION gettopogeomelements(topogeometry) COMMENT FUNCTION gettopogeomelements(toponame character varying, layerid integer, tgid integer) COMMENT FUNCTION gettopologyid(character varying) COMMENT FUNCTION gettopologyid(toponame character varying) COMMENT FUNCTION gettopologyname(integer) COMMENT FUNCTION gettopologyname(topoid integer) COMMENT FUNCTION lockrow(text, text, text) COMMENT FUNCTION lockrow(text, text, text, text, timestampwithouttimezone) COMMENT FUNCTION lockrow(text, text, text, timestampwithouttimezone) COMMENT FUNCTION polygonize(toponame character varying) COMMENT FUNCTION populate_geometry_columns() COMMENT FUNCTION populate_geometry_columns(tbl_oidoid) COMMENT FUNCTION populate_geometry_columns(tbl_oidoid, use_typmodboolean) COMMENT FUNCTION populate_geometry_columns(use_typmodboolean) COMMENT FUNCTION postgis_addbbox(geometry) COMMENT FUNCTION postgis_dropbbox(geometry) COMMENT FUNCTION postgis_full_version() COMMENT FUNCTION postgis_geos_version() COMMENT FUNCTION postgis_hasbbox(geometry) COMMENT FUNCTION postgis_lib_build_date() COMMENT FUNCTION postgis_lib_version() COMMENT FUNCTION postgis_libxml_version() COMMENT FUNCTION postgis_proj_version() COMMENT FUNCTION postgis_raster_lib_build_date() COMMENT FUNCTION postgis_raster_lib_version() COMMENT FUNCTION postgis_scripts_build_date() COMMENT FUNCTION postgis_scripts_installed() COMMENT FUNCTION postgis_scripts_released() COMMENT FUNCTION postgis_uses_stats() COMMENT FUNCTION postgis_version() COMMENT FUNCTION probe_geometry_columns() COMMENT FUNCTION st_3dclosestpoint(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_3dclosestpoint(geometry, geometry) COMMENT FUNCTION st_3ddfullywithin(geom1 geometry, geom2 geometry, double precision) COMMENT FUNCTION st_3ddfullywithin(geometry, geometry, double precision) COMMENT FUNCTION st_3ddistance(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_3ddistance(geometry, geometry) COMMENT FUNCTION st_3ddwithin(geom1 geometry, geom2 geometry, double precision) COMMENT FUNCTION st_3ddwithin(geometry, geometry, double precision) COMMENT FUNCTION st_3dintersects(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_3dintersects(geometry, geometry) COMMENT FUNCTION st_3dlength(geometry) COMMENT FUNCTION st_3dlength_spheroid(geometry, spheroid) COMMENT FUNCTION st_3dlongestline(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_3dlongestline(geometry, geometry) COMMENT FUNCTION st_3dmakebox(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_3dmakebox(geometry, geometry) COMMENT FUNCTION st_3dmaxdistance(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_3dmaxdistance(geometry, geometry) COMMENT FUNCTION st_3dperimeter(geometry) COMMENT FUNCTION st_3dshortestline(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_3dshortestline(geometry, geometry) COMMENT FUNCTION st_addband(rast raster, indexinteger, pixeltypetext, initialvaluedouble precision, nodatavaldouble precision) COMMENT FUNCTION st_addband(rast raster, pixeltypetext, initialvaluedouble precision, nodatavaldouble precision) COMMENT FUNCTION st_addband(torast raster, fromrast raster, frombandinteger, torastindexinteger) COMMENT FUNCTION st_addband(torast raster, fromrastsraster[], frombandinteger) COMMENT FUNCTION st_addbbox(geometry) COMMENT FUNCTION st_addedgemodface(atopologycharacter varying, anodeinteger, anothernodeinteger, acurvepublic.geometry) COMMENT FUNCTION st_addedgenewfaces(atopologycharacter varying, anodeinteger, anothernodeinteger, acurvepublic.geometry) COMMENT FUNCTION st_addisoedge(atopologycharacter varying, anodeinteger, anothernodeinteger, acurvepublic.geometry) COMMENT FUNCTION st_addisonode(atopology character varying, aface integer, apoint public.geometry) COMMENT FUNCTION st_addisonode(character varying, integer, public.geometry) COMMENT FUNCTION st_addmeasure(geometry, double precision, double precision) COMMENT FUNCTION st_addpoint(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_addpoint(geom1 geometry, geom2 geometry, integer) COMMENT FUNCTION st_addpoint(geometry, geometry) COMMENT FUNCTION st_addpoint(geometry, geometry, integer) COMMENT FUNCTION st_affine(geometry, double precision, double precision, double precision, double precision, double precision, double precision) COMMENT FUNCTION st_affine(geometry, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision) COMMENT FUNCTION st_area(geoggeography, use_spheroidboolean) COMMENT FUNCTION st_area(geography) COMMENT FUNCTION st_area(geography, boolean) COMMENT FUNCTION st_area(geometry) COMMENT FUNCTION st_asbinary(geography) COMMENT FUNCTION st_asbinary(geography, text) COMMENT FUNCTION st_asbinary(geometry) COMMENT FUNCTION st_asbinary(geometry, text) COMMENT FUNCTION st_asbinary(raster) COMMENT FUNCTION st_asewkb(geometry) COMMENT FUNCTION st_asewkb(geometry, text) COMMENT FUNCTION st_asewkt(geometry) COMMENT FUNCTION st_asgdalraster(rast raster, formattext, optionstext[], sridinteger) COMMENT FUNCTION st_asgeojson(geog geography, maxdecimaldigits integer, options integer) COMMENT FUNCTION st_asgeojson(geography) COMMENT FUNCTION st_asgeojson(geography, integer) COMMENT FUNCTION st_asgeojson(geography, integer, integer) COMMENT FUNCTION st_asgeojson(geometry) COMMENT FUNCTION st_asgeojson(geometry, integer) COMMENT FUNCTION st_asgeojson(geometry, integer, integer) COMMENT FUNCTION st_asgeojson(geom geometry, maxdecimaldigits integer, options integer) COMMENT FUNCTION st_asgeojson(gj_version integer, geog geography, maxdecimaldigits integer, options integer) COMMENT FUNCTION st_asgeojson(gj_version integer, geom geometry, maxdecimaldigits integer, options integer) COMMENT FUNCTION st_asgeojson(integer, geography) COMMENT FUNCTION st_asgeojson(integer, geography, integer) COMMENT FUNCTION st_asgeojson(integer, geography, integer, integer) COMMENT FUNCTION st_asgeojson(integer, geometry) COMMENT FUNCTION st_asgeojson(integer, geometry, integer) COMMENT FUNCTION st_asgeojson(integer, geometry, integer, integer) COMMENT FUNCTION st_asgml(geog geography, maxdecimaldigits integer, options integer) COMMENT FUNCTION st_asgml(geography) COMMENT FUNCTION st_asgml(geography, integer) COMMENT FUNCTION st_asgml(geography, integer, integer) COMMENT FUNCTION st_asgml(geometry) COMMENT FUNCTION st_asgml(geometry, integer) COMMENT FUNCTION st_asgml(geometry, integer, integer) COMMENT FUNCTION st_asgml(geom geometry, maxdecimaldigits integer, options integer) COMMENT FUNCTION st_asgml(integer, geography) COMMENT FUNCTION st_asgml(integer, geography, integer) COMMENT FUNCTION st_asgml(integer, geography, integer, integer) COMMENT FUNCTION st_asgml(integer, geography, integer, integer, text) COMMENT FUNCTION st_asgml(integer, geometry) COMMENT FUNCTION st_asgml(integer, geometry, integer) COMMENT FUNCTION st_asgml(integer, geometry, integer, integer) COMMENT FUNCTION st_asgml(integer, geometry, integer, integer, text) COMMENT FUNCTION st_asgml(version integer, geog geography, maxdecimaldigits integer, options integer, nprefix text) COMMENT FUNCTION st_asgml(version integer, geom geometry, maxdecimaldigits integer, options integer, nprefix text) COMMENT FUNCTION st_ashexewkb(geometry) COMMENT FUNCTION st_ashexewkb(geometry, text) COMMENT FUNCTION st_asjpeg(rast raster, nband integer, optionstext[]) COMMENT FUNCTION st_asjpeg(rast raster, nband integer, qualityinteger) COMMENT FUNCTION st_asjpeg(rast raster, nbands integer[], optionstext[]) COMMENT FUNCTION st_asjpeg(rast raster, nbands integer[], qualityinteger) COMMENT FUNCTION st_asjpeg(rast raster, optionstext[]) COMMENT FUNCTION st_askml(geog geography, maxdecimaldigits integer) COMMENT FUNCTION st_askml(geography) COMMENT FUNCTION st_askml(geography, integer) COMMENT FUNCTION st_askml(geometry) COMMENT FUNCTION st_askml(geometry, integer) COMMENT FUNCTION st_askml(geom geometry, maxdecimaldigits integer) COMMENT FUNCTION st_askml(integer, geography) COMMENT FUNCTION st_askml(integer, geography, integer) COMMENT FUNCTION st_askml(integer, geography, integer, text) COMMENT FUNCTION st_askml(integer, geometry) COMMENT FUNCTION st_askml(integer, geometry, integer) COMMENT FUNCTION st_askml(integer, geometry, integer, text) COMMENT FUNCTION st_askml(version integer, geog geography, maxdecimaldigits integer, nprefix text) COMMENT FUNCTION st_askml(version integer, geom geometry, maxdecimaldigits integer, nprefix text) COMMENT FUNCTION st_aslatlontext(geometry) COMMENT FUNCTION st_aslatlontext(geometry, text) COMMENT FUNCTION st_aspng(rast raster, nband integer, compressioninteger) COMMENT FUNCTION st_aspng(rast raster, nband integer, optionstext[]) COMMENT FUNCTION st_aspng(rast raster, nbands integer[], compressioninteger) COMMENT FUNCTION st_aspng(rast raster, nbands integer[], optionstext[]) COMMENT FUNCTION st_aspng(rast raster, optionstext[]) COMMENT FUNCTION st_asraster(geomgeometry, refraster, pixeltypetext, valuedouble precision, nodatavaldouble precision, touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, refraster, pixeltypetext[], valuedouble precision[], nodatavaldouble precision[], touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, scalexdouble precision, scaleydouble precision, gridxdouble precision, gridydouble precision, pixeltypetext, valuedouble precision, nodatavaldouble precision, skewxdouble precision, skewydouble precision, touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, scalexdouble precision, scaleydouble precision, gridxdouble precision, gridydouble precision, pixeltypetext[], valuedouble precision[], nodatavaldouble precision[], skewxdouble precision, skewydouble precision, touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, scalexdouble precision, scaleydouble precision, pixeltypetext, valuedouble precision, nodatavaldouble precision, upperleftxdouble precision, upperleftydouble precision, skewxdouble precision, skewydouble precision, touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, widthinteger, heightinteger, gridxdouble precision, gridydouble precision, pixeltypetext, valuedouble precision, nodatavaldouble precision, skewxdouble precision, skewydouble precision, touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, widthinteger, heightinteger, gridxdouble precision, gridydouble precision, pixeltypetext[], valuedouble precision[], nodatavaldouble precision[], skewxdouble precision, skewydouble precision, touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, widthinteger, heightinteger, pixeltypetext, valuedouble precision, nodatavaldouble precision, upperleftxdouble precision, upperleftydouble precision, skewxdouble precision, skewydouble precision, touchedboolean) COMMENT FUNCTION st_asraster(geomgeometry, widthinteger, heightinteger, pixeltypetext[], valuedouble precision[], nodatavaldouble precision[], upperleftxdouble precision, upperleftydouble precision, skewxdouble precision, skewydouble precision, touchedboolean) COMMENT FUNCTION st_assvg(geog geography, rel integer, maxdecimaldigits integer) COMMENT FUNCTION st_assvg(geography) COMMENT FUNCTION st_assvg(geography, integer) COMMENT FUNCTION st_assvg(geography, integer, integer) COMMENT FUNCTION st_assvg(geometry) COMMENT FUNCTION st_assvg(geometry, integer) COMMENT FUNCTION st_assvg(geometry, integer, integer) COMMENT FUNCTION st_assvg(geom geometry, rel integer, maxdecimaldigits integer) COMMENT FUNCTION st_astext(geography) COMMENT FUNCTION st_astext(geometry) COMMENT FUNCTION st_astiff(rast raster, compressiontext, sridinteger) COMMENT FUNCTION st_astiff(rast raster, nbands integer[], compressiontext, sridinteger) COMMENT FUNCTION st_astiff(rast raster, nbands integer[], optionstext[], sridinteger) COMMENT FUNCTION st_astiff(rast raster, optionstext[], sridinteger) COMMENT FUNCTION st_asx3d(geom geometry, maxdecimaldigits integer, options integer) COMMENT FUNCTION st_asx3d(geomgeometry, precinteger) COMMENT FUNCTION st_azimuth(geog1 geography, geog2 geography) COMMENT FUNCTION st_azimuth(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_azimuth(geometry, geometry) COMMENT FUNCTION st_bandisnodata(rast raster, bandinteger, forcecheckingboolean) COMMENT FUNCTION st_bandisnodata(rast raster, forcechecking boolean) COMMENT FUNCTION st_bandmetadata(rast raster, bandinteger, OUT pixeltype text, OUT hasnodata boolean, OUT nodatavalue double precision, OUT isoutdb boolean, OUT path text) COMMENT FUNCTION st_bandnodatavalue(rast raster, bandinteger) COMMENT FUNCTION st_bandpath(rast raster, bandinteger) COMMENT FUNCTION st_bandpixeltype(rast raster, bandinteger) COMMENT FUNCTION st_band(rast raster, nband integer) COMMENT FUNCTION st_band(rast raster, nbands integer[]) COMMENT FUNCTION st_band(rast raster, nbandstext, delimitercharacter) COMMENT FUNCTION st_bdmpolyfromtext(text, integer) COMMENT FUNCTION st_bdpolyfromtext(text, integer) COMMENT FUNCTION st_boundary(geometry) COMMENT FUNCTION st_box2d(geometry) COMMENT FUNCTION st_box2dfromgeohash(text) COMMENT FUNCTION st_box2dfromgeohash(text, integer) COMMENT FUNCTION st_box3d(geometry) COMMENT FUNCTION st_buffer(geography, double precision) COMMENT FUNCTION st_buffer(geometry, double precision) COMMENT FUNCTION st_buffer(geometry, double precision, integer) COMMENT FUNCTION st_buffer(geometry, double precision, text) COMMENT FUNCTION st_buildarea(geometry) COMMENT FUNCTION st_centroid(geometry) COMMENT FUNCTION st_changeedgegeom(atopologycharacter varying, anedgeinteger, acurvepublic.geometry) COMMENT FUNCTION st_clip(rast raster, band integer, geom geometry, crop boolean) COMMENT FUNCTION st_clip(rast raster, band integer, geom geometry, nodata double precision, trimraster boolean) COMMENT FUNCTION st_clip(rast raster, band integer, geom geometry, trimraster boolean) COMMENT FUNCTION st_clip(rast raster, geom geometry, crop boolean) COMMENT FUNCTION st_clip(rast raster, geom geometry, nodata double precision, trimraster boolean) COMMENT FUNCTION st_clip(rast raster, geom geometry, trimraster boolean) COMMENT FUNCTION st_closestpoint(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_closestpoint(geometry, geometry) COMMENT FUNCTION st_collect(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_collect(geometry[]) COMMENT FUNCTION st_collect(geometry, geometry) COMMENT FUNCTION st_collectionextract(geometry, integer) COMMENT FUNCTION st_concavehull(param_geomgeometry, param_pctconvexdouble precision, param_allow_holesboolean) COMMENT FUNCTION st_contains(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_contains(geometry, geometry) COMMENT FUNCTION st_containsproperly(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_containsproperly(geometry, geometry) COMMENT FUNCTION st_convexhull(geometry) COMMENT FUNCTION st_convexhull(raster) COMMENT FUNCTION st_coorddim(geometry) COMMENT FUNCTION st_coorddim(geometry geometry) COMMENT FUNCTION st_count(rastertabletext, rastercolumntext, exclude_nodata_valueboolean) COMMENT FUNCTION st_count(rastertabletext, rastercolumntext, nband integer, exclude_nodata_valueboolean) COMMENT FUNCTION st_count(rast raster, exclude_nodata_valueboolean) COMMENT FUNCTION st_count(rast raster, nband integer, exclude_nodata_valueboolean) COMMENT FUNCTION st_coveredby(geography, geography) COMMENT FUNCTION st_coveredby(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_coveredby(geometry, geometry) COMMENT FUNCTION st_covers(geography, geography) COMMENT FUNCTION st_covers(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_covers(geometry, geometry) COMMENT FUNCTION st_createtopogeo(atopologycharacter varying, acollectionpublic.geometry) COMMENT FUNCTION st_crosses(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_crosses(geometry, geometry) COMMENT FUNCTION st_curvetoline(geometry) COMMENT FUNCTION st_curvetoline(geometry, integer) COMMENT FUNCTION st_dfullywithin(geom1 geometry, geom2 geometry, double precision) COMMENT FUNCTION st_dfullywithin(geometry, geometry, double precision) COMMENT FUNCTION st_difference(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_difference(geometry, geometry) COMMENT FUNCTION st_dimension(geometry) COMMENT FUNCTION st_disjoint(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_disjoint(geometry, geometry) COMMENT FUNCTION st_distance(geography, geography) COMMENT FUNCTION st_distance(geography, geography, boolean) COMMENT FUNCTION st_distance(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_distance(geometry, geometry) COMMENT FUNCTION st_distance_sphere(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_distance_sphere(geometry, geometry) COMMENT FUNCTION st_distance_spheroid(geom1 geometry, geom2 geometry, spheroid) COMMENT FUNCTION st_distance_spheroid(geometry, geometry, spheroid) COMMENT FUNCTION st_dropbbox(geometry) COMMENT FUNCTION st_dumpaspolygons(rast raster, bandinteger) COMMENT FUNCTION st_dump(geometry) COMMENT FUNCTION st_dumppoints(geometry) COMMENT FUNCTION st_dumprings(geometry) COMMENT FUNCTION st_dwithin(geography, geography, double precision) COMMENT FUNCTION st_dwithin(geography, geography, double precision, boolean) COMMENT FUNCTION st_dwithin(geom1 geometry, geom2 geometry, double precision) COMMENT FUNCTION st_dwithin(geometry, geometry, double precision) COMMENT FUNCTION st_endpoint(geometry) COMMENT FUNCTION st_envelope(geometry) COMMENT FUNCTION st_envelope(raster) COMMENT FUNCTION st_equals(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_equals(geometry, geometry) COMMENT FUNCTION st_estimated_extent(text, text) COMMENT FUNCTION st_estimated_extent(text, text, text) COMMENT FUNCTION st_expand(box2d, double precision) COMMENT FUNCTION st_expand(box3d, double precision) COMMENT FUNCTION st_expand(geometry, double precision) COMMENT FUNCTION st_exteriorring(geometry) COMMENT FUNCTION st_flipcoordinates(geometry) COMMENT FUNCTION st_force_2d(geometry) COMMENT FUNCTION st_force_3d(geometry) COMMENT FUNCTION st_force_3dm(geometry) COMMENT FUNCTION st_force_3dz(geometry) COMMENT FUNCTION st_force_4d(geometry) COMMENT FUNCTION st_force_collection(geometry) COMMENT FUNCTION st_forcerhr(geometry) COMMENT FUNCTION st_gdaldrivers(OUTidxinteger, OUTshort_nametext, OUTlong_nametext, OUTcreate_optionstext) COMMENT FUNCTION st_geogfromtext(text) COMMENT FUNCTION st_geogfromwkb(bytea) COMMENT FUNCTION st_geographyfromtext(text) COMMENT FUNCTION st_geohash(geometry) COMMENT FUNCTION st_geohash(geometry, integer) COMMENT FUNCTION st_geohash(geom geometry, maxchars integer) COMMENT FUNCTION st_geomcollfromtext(text) COMMENT FUNCTION st_geomcollfromtext(text, integer) COMMENT FUNCTION st_geometryfromtext(text) COMMENT FUNCTION st_geometryfromtext(text, integer) COMMENT FUNCTION st_geometryn(geometry, integer) COMMENT FUNCTION st_geometrytype(geometry) COMMENT FUNCTION st_geomfromewkb(bytea) COMMENT FUNCTION st_geomfromewkt(text) COMMENT FUNCTION st_geomfromgeojson(text) COMMENT FUNCTION st_geomfromgeohash(text) COMMENT FUNCTION st_geomfromgeohash(text, integer) COMMENT FUNCTION st_geomfromgml(text) COMMENT FUNCTION st_geomfromgml(text, integer) COMMENT FUNCTION st_geomfromkml(text) COMMENT FUNCTION st_geomfromtext(text) COMMENT FUNCTION st_geomfromtext(text, integer) COMMENT FUNCTION st_geomfromwkb(bytea) COMMENT FUNCTION st_geomfromwkb(bytea, integer) COMMENT FUNCTION st_georeference(rast raster, formattext) COMMENT FUNCTION st_getfaceedges(toponame character varying, face_idinteger) COMMENT FUNCTION st_getfacegeometry(toponame character varying, afaceinteger) COMMENT FUNCTION st_gmltosql(text) COMMENT FUNCTION st_gmltosql(text, integer) COMMENT FUNCTION st_hasarc(geometry) COMMENT FUNCTION st_hasarc(geometry geometry) COMMENT FUNCTION st_hasbbox(geometry) COMMENT FUNCTION st_hasnoband(rast raster, nband integer) COMMENT FUNCTION st_hausdorffdistance(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_hausdorffdistance(geom1 geometry, geom2 geometry, double precision) COMMENT FUNCTION st_hausdorffdistance(geometry, geometry) COMMENT FUNCTION st_hausdorffdistance(geometry, geometry, double precision) COMMENT FUNCTION st_height(raster) COMMENT FUNCTION st_hillshade(rast raster, band integer, pixeltype text, azimuth double precision, altitude double precision, max_bright double precision, elevation_scale double precision) COMMENT FUNCTION st_histogram(rastertabletext, rastercolumntext, nband integer, binsinteger, "right"boolean) COMMENT FUNCTION st_histogram(rastertabletext, rastercolumntext, nband integer, binsinteger, widthdouble precision[], "right"boolean) COMMENT FUNCTION st_histogram(rastertabletext, rastercolumntext, nband integer, exclude_nodata_valueboolean, binsinteger, "right"boolean) COMMENT FUNCTION st_histogram(rastertabletext, rastercolumntext, nband integer, exclude_nodata_valueboolean, binsinteger, widthdouble precision[], "right"boolean) COMMENT FUNCTION st_histogram(rast raster, nband integer, binsinteger, "right"boolean) COMMENT FUNCTION st_histogram(rast raster, nband integer, binsinteger, widthdouble precision[], "right"boolean) COMMENT FUNCTION st_histogram(rast raster, nband integer, exclude_nodata_valueboolean, binsinteger, "right"boolean) COMMENT FUNCTION st_histogram(rast raster, nband integer, exclude_nodata_valueboolean, binsinteger, widthdouble precision[], "right"boolean) COMMENT FUNCTION st_inittopogeo(atopologycharacter varying) COMMENT FUNCTION st_interiorringn(geometry, integer) COMMENT FUNCTION st_intersection(geography, geography) COMMENT FUNCTION st_intersection(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_intersection(geometry, geometry) COMMENT FUNCTION st_intersection(geomingeometry, rast raster, bandinteger) COMMENT FUNCTION st_intersection(rast1raster, band1integer, geomgeometry, extenttypetext, otheruserfuncregprocedure) COMMENT FUNCTION st_intersection(rast1raster, band1integer, geomgeometry, otheruserfuncregprocedure) COMMENT FUNCTION st_intersection(rast1raster, geomgeometry, extenttypetext, otheruserfuncregprocedure) COMMENT FUNCTION st_intersection(rast1raster, geomgeometry, otheruserfuncregprocedure) COMMENT FUNCTION st_intersects(geography, geography) COMMENT FUNCTION st_intersects(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_intersects(geometry, geometry) COMMENT FUNCTION st_intersects(geomgeometry, rast raster, nband integer) COMMENT FUNCTION st_intersects(rast1raster, nband1integer, rast2raster, nband2integer) COMMENT FUNCTION st_intersects(rast1raster, rast2raster) COMMENT FUNCTION st_intersects(rast raster, nband integer, geomgeometry) COMMENT FUNCTION st_isclosed(geometry) COMMENT FUNCTION st_iscollection(geometry) COMMENT FUNCTION st_isempty(geometry) COMMENT FUNCTION st_isempty(rast raster) COMMENT FUNCTION st_isring(geometry) COMMENT FUNCTION st_issimple(geometry) COMMENT FUNCTION st_isvaliddetail(geometry) COMMENT FUNCTION st_isvaliddetail(geometry, integer) COMMENT FUNCTION st_isvalid(geometry) COMMENT FUNCTION st_isvalid(geometry, integer) COMMENT FUNCTION st_isvalidreason(geometry) COMMENT FUNCTION st_isvalidreason(geometry, integer) COMMENT FUNCTION st_length2d(geometry) COMMENT FUNCTION st_length2d_spheroid(geometry, spheroid) COMMENT FUNCTION st_length3d(geometry) COMMENT FUNCTION st_length3d_spheroid(geometry, spheroid) COMMENT FUNCTION st_length(geoggeography, use_spheroidboolean) COMMENT FUNCTION st_length(geography) COMMENT FUNCTION st_length(geography, boolean) COMMENT FUNCTION st_length(geometry) COMMENT FUNCTION st_length_spheroid(geometry, spheroid) COMMENT FUNCTION st_linecrossingdirection(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_linecrossingdirection(geometry, geometry) COMMENT FUNCTION st_linefrommultipoint(geometry) COMMENT FUNCTION st_linefromtext(text) COMMENT FUNCTION st_linefromtext(text, integer) COMMENT FUNCTION st_linefromwkb(bytea) COMMENT FUNCTION st_linefromwkb(bytea, integer) COMMENT FUNCTION st_line_interpolate_point(geometry, double precision) COMMENT FUNCTION st_line_locate_point(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_line_locate_point(geometry, geometry) COMMENT FUNCTION st_linemerge(geometry) COMMENT FUNCTION st_linestringfromwkb(bytea) COMMENT FUNCTION st_linestringfromwkb(bytea, integer) COMMENT FUNCTION st_line_substring(geometry, double precision, double precision) COMMENT FUNCTION st_linetocurve(geometry) COMMENT FUNCTION st_linetocurve(geometry geometry) COMMENT FUNCTION st_locate_along_measure(geometry, double precision) COMMENT FUNCTION st_locatebetweenelevations(geometry, double precision, double precision) COMMENT FUNCTION st_locatebetweenelevations(geometry geometry, fromelevation double precision, toelevation double precision) COMMENT FUNCTION st_locate_between_measures(geometry, double precision, double precision) COMMENT FUNCTION st_longestline(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_longestline(geometry, geometry) COMMENT FUNCTION st_makebox2d(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_makebox2d(geometry, geometry) COMMENT FUNCTION st_makebox3d(geometry, geometry) COMMENT FUNCTION st_makeemptyraster(rast raster) COMMENT FUNCTION st_makeemptyraster(widthinteger, heightinteger, upperleftxdouble precision, upperleftydouble precision, pixelsizedouble precision) COMMENT FUNCTION st_makeemptyraster(widthinteger, heightinteger, upperleftxdouble precision, upperleftydouble precision, scalexdouble precision, scaleydouble precision, skewxdouble precision, skewydouble precision, sridinteger) COMMENT FUNCTION st_makeenvelope(double precision, double precision, double precision, double precision, integer) COMMENT FUNCTION st_makeline(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_makeline(geometry[]) COMMENT FUNCTION st_makeline(geometry, geometry) COMMENT FUNCTION st_makepoint(double precision, double precision) COMMENT FUNCTION st_makepoint(double precision, double precision, double precision) COMMENT FUNCTION st_makepoint(double precision, double precision, double precision, double precision) COMMENT FUNCTION st_makepointm(double precision, double precision, double precision) COMMENT FUNCTION st_makepolygon(geometry) COMMENT FUNCTION st_makepolygon(geometry, geometry[]) COMMENT FUNCTION st_makevalid(geometry) COMMENT FUNCTION st_mapalgebraexpr(rast1raster, band1integer, rast2raster, band2integer, expressiontext, pixeltypetext, extenttypetext, nodata1exprtext, nodata2exprtext, nodatanodatavaldouble precision) COMMENT FUNCTION st_mapalgebraexpr(rast1raster, rast2raster, expressiontext, pixeltypetext, extenttypetext, nodata1exprtext, nodata2exprtext, nodatanodatavaldouble precision) COMMENT FUNCTION st_mapalgebraexpr(rast raster, bandinteger, pixeltypetext, expressiontext, nodatavaldouble precision) COMMENT FUNCTION st_mapalgebraexpr(rast raster, pixeltypetext, expressiontext, nodatavaldouble precision) COMMENT FUNCTION st_mapalgebrafctngb(rast raster, bandinteger, pixeltypetext, ngbwidthinteger, ngbheightinteger, onerastngbuserfuncregprocedure, nodatamodetext, VARIADICargstext[]) COMMENT FUNCTION st_mapalgebrafct(rast1raster, band1integer, rast2raster, band2integer, tworastuserfuncregprocedure, pixeltypetext, extenttypetext, VARIADICuserargstext[]) COMMENT FUNCTION st_mapalgebrafct(rast1raster, rast2raster, tworastuserfuncregprocedure, pixeltypetext, extenttypetext, VARIADICuserargstext[]) COMMENT FUNCTION st_mapalgebrafct(rast raster, bandinteger, onerastuserfuncregprocedure) COMMENT FUNCTION st_mapalgebrafct(rast raster, bandinteger, onerastuserfuncregprocedure, VARIADICargstext[]) COMMENT FUNCTION st_mapalgebrafct(rast raster, bandinteger, pixeltypetext, onerastuserfuncregprocedure) COMMENT FUNCTION st_mapalgebrafct(rast raster, bandinteger, pixeltypetext, onerastuserfuncregprocedure, VARIADICargstext[]) COMMENT FUNCTION st_mapalgebrafct(rast raster, onerastuserfuncregprocedure) COMMENT FUNCTION st_mapalgebrafct(rast raster, onerastuserfuncregprocedure, VARIADICargstext[]) COMMENT FUNCTION st_mapalgebrafct(rast raster, pixeltypetext, onerastuserfuncregprocedure) COMMENT FUNCTION st_mapalgebrafct(rast raster, pixeltypetext, onerastuserfuncregprocedure, VARIADICargstext[]) COMMENT FUNCTION st_maxdistance(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_max_distance(geometry, geometry) COMMENT FUNCTION st_maxdistance(geometry, geometry) COMMENT FUNCTION st_mem_size(geometry) COMMENT FUNCTION st_metadata(rast raster, OUTupperleftxdouble precision, OUTupperleftydouble precision, OUTwidthinteger, OUTheightinteger, OUTscalexdouble precision, OUTscaleydouble precision, OUTskewxdouble precision, OUTskewydouble precision, OUTsridinteger, OUTnumbandsinteger) COMMENT FUNCTION st_m(geometry) COMMENT FUNCTION st_minimumboundingcircle(geometry) COMMENT FUNCTION st_minimumboundingcircle(inputgeomgeometry, segs_per_quarterinteger) COMMENT FUNCTION st_mlinefromtext(text) COMMENT FUNCTION st_mlinefromtext(text, integer) COMMENT FUNCTION st_modedgeheal(toponame character varying, e1idinteger, e2idinteger) COMMENT FUNCTION st_modedgesplit(atopology character varying, anedge integer, apoint public.geometry) COMMENT FUNCTION st_modedgesplit(character varying, integer, public.geometry) COMMENT FUNCTION st_moveisonode(atopology character varying, anode integer, apoint public.geometry) COMMENT FUNCTION st_moveisonode(character varying, integer, public.geometry) COMMENT FUNCTION st_mpointfromtext(text) COMMENT FUNCTION st_mpointfromtext(text, integer) COMMENT FUNCTION st_mpolyfromtext(text) COMMENT FUNCTION st_mpolyfromtext(text, integer) COMMENT FUNCTION st_multi(geometry) COMMENT FUNCTION st_ndims(geometry) COMMENT FUNCTION st_newedgeheal(toponame character varying, e1idinteger, e2idinteger) COMMENT FUNCTION st_newedgessplit(atopology character varying, anedge integer, apoint public.geometry) COMMENT FUNCTION st_newedgessplit(character varying, integer, public.geometry) COMMENT FUNCTION st_node(ggeometry) COMMENT FUNCTION st_npoints(geometry) COMMENT FUNCTION st_nrings(geometry) COMMENT FUNCTION st_numbands(raster) COMMENT FUNCTION st_numgeometries(geometry) COMMENT FUNCTION st_numinteriorring(geometry) COMMENT FUNCTION st_numinteriorrings(geometry) COMMENT FUNCTION st_numpatches(geometry) COMMENT FUNCTION st_numpoints(geometry) COMMENT FUNCTION st_offsetcurve(linegeometry, distancedouble precision, paramstext) COMMENT FUNCTION st_orderingequals(geometrya geometry, geometryb geometry) COMMENT FUNCTION st_orderingequals(geometry, geometry) COMMENT FUNCTION st_overlaps(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_overlaps(geometry, geometry) COMMENT FUNCTION st_patchn(geometry, integer) COMMENT FUNCTION st_perimeter2d(geometry) COMMENT FUNCTION st_perimeter3d(geometry) COMMENT FUNCTION st_perimeter(geoggeography, use_spheroidboolean) COMMENT FUNCTION st_perimeter(geometry) COMMENT FUNCTION st_pixelaspolygon(rast raster, bandinteger, xinteger, yinteger) COMMENT FUNCTION st_pixelaspolygon(rast raster, xinteger, yinteger) COMMENT FUNCTION st_pixelheight(raster) COMMENT FUNCTION st_pixelwidth(raster) COMMENT FUNCTION st_point(double precision, double precision) COMMENT FUNCTION st_pointfromgeohash(text) COMMENT FUNCTION st_pointfromgeohash(text, integer) COMMENT FUNCTION st_pointfromtext(text) COMMENT FUNCTION st_pointfromtext(text, integer) COMMENT FUNCTION st_point_inside_circle(geometry, double precision, double precision, double precision) COMMENT FUNCTION st_pointn(geometry, integer) COMMENT FUNCTION st_pointonsurface(geometry) COMMENT FUNCTION st_polygonfromtext(text) COMMENT FUNCTION st_polygonfromtext(text, integer) COMMENT FUNCTION st_polygon(geometry, integer) COMMENT FUNCTION st_polygonize(geometry[]) COMMENT FUNCTION st_polygon(rast raster, bandinteger) COMMENT FUNCTION st_project(geog geography, distance double precision, azimuth double precision) COMMENT FUNCTION st_quantile(rast raster, exclude_nodata_valueboolean, quantiledouble precision) COMMENT FUNCTION st_quantile(rast raster, nband integer, exclude_nodata_valueboolean, quantiledouble precision) COMMENT FUNCTION st_quantile(rast raster, nband integer, exclude_nodata_valueboolean, quantilesdouble precision[]) COMMENT FUNCTION st_quantile(rast raster, nband integer, quantiledouble precision) COMMENT FUNCTION st_quantile(rast raster, nband integer, quantilesdouble precision[]) COMMENT FUNCTION st_quantile(rast raster, quantiledouble precision) COMMENT FUNCTION st_quantile(rast raster, quantilesdouble precision[]) COMMENT FUNCTION st_raster2worldcoordx(rast raster, xrinteger) COMMENT FUNCTION st_raster2worldcoordx(rast raster, xrinteger, yrinteger) COMMENT FUNCTION st_raster2worldcoordy(rast raster, xrinteger, yrinteger) COMMENT FUNCTION st_raster2worldcoordy(rast raster, yrinteger) COMMENT FUNCTION st_reclass(rast raster, nband integer, reclassexprtext, pixeltypetext, nodatavaldouble precision) COMMENT FUNCTION st_reclass(rast raster, reclassexprtext, pixeltypetext) COMMENT FUNCTION st_reclass(rast raster, VARIADICreclassargsetreclassarg[]) COMMENT FUNCTION st_relate(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_relate(geom1 geometry, geom2 geometry, integer) COMMENT FUNCTION st_relate(geom1 geometry, geom2 geometry, text) COMMENT FUNCTION st_relate(geometry, geometry) COMMENT FUNCTION st_relate(geometry, geometry, integer) COMMENT FUNCTION st_relate(geometry, geometry, text) COMMENT FUNCTION st_relatematch(text, text) COMMENT FUNCTION st_remedgemodface(toponame character varying, e1id integer) COMMENT FUNCTION st_remedgenewface(toponame character varying, e1id integer) COMMENT FUNCTION st_removeisonode(atopology character varying, anode integer) COMMENT FUNCTION st_removeisonode(character varying, integer) COMMENT FUNCTION st_removepoint(geometry, integer) COMMENT FUNCTION st_removerepeatedpoints(geometry) COMMENT FUNCTION st_resample(rast raster, refraster, algorithmtext, maxerrdouble precision, usescaleboolean) COMMENT FUNCTION st_resample(rast raster, refraster, usescaleboolean, algorithmtext, maxerrdouble precision) COMMENT FUNCTION st_resample(rast raster, sridinteger, scalexdouble precision, scaleydouble precision, gridxdouble precision, gridydouble precision, skewxdouble precision, skewydouble precision, algorithmtext, maxerrdouble precision) COMMENT FUNCTION st_resample(rast raster, widthinteger, heightinteger, sridinteger, gridxdouble precision, gridydouble precision, skewxdouble precision, skewydouble precision, algorithmtext, maxerrdouble precision) COMMENT FUNCTION st_rescale(rast raster, scalexdouble precision, scaleydouble precision, algorithmtext, maxerrdouble precision) COMMENT FUNCTION st_rescale(rast raster, scalexydouble precision, algorithmtext, maxerrdouble precision) COMMENT FUNCTION st_reverse(geometry) COMMENT FUNCTION st_rotate(geometry, double precision) COMMENT FUNCTION st_rotatex(geometry, double precision) COMMENT FUNCTION st_rotatey(geometry, double precision) COMMENT FUNCTION st_rotatez(geometry, double precision) COMMENT FUNCTION st_rotation(raster) COMMENT FUNCTION st_samealignment(rast1raster, rast2raster) COMMENT FUNCTION st_samealignment(ulx1double precision, uly1double precision, scalex1double precision, scaley1double precision, skewx1double precision, skewy1double precision, ulx2double precision, uly2double precision, scalex2double precision, scaley2double precision, skewx2double precision, skewy2double precision) COMMENT FUNCTION st_scale(geometry, double precision, double precision) COMMENT FUNCTION st_scale(geometry, double precision, double precision, double precision) COMMENT FUNCTION st_scalex(raster) COMMENT FUNCTION st_scaley(raster) COMMENT FUNCTION st_segmentize(geometry, double precision) COMMENT FUNCTION st_setbandisnodata(rast raster, bandinteger) COMMENT FUNCTION st_setbandnodatavalue(rast raster, bandinteger, nodatavaluedouble precision, forcecheckingboolean) COMMENT FUNCTION st_setbandnodatavalue(rast raster, nodatavaluedouble precision) COMMENT FUNCTION st_setgeoreference(rast raster, georeftext, formattext) COMMENT FUNCTION st_setpoint(geometry, integer, geometry) COMMENT FUNCTION st_setrotation(rast raster, rotationdouble precision) COMMENT FUNCTION st_setscale(rast raster, scaledouble precision) COMMENT FUNCTION st_setscale(rast raster, scalexdouble precision, scaleydouble precision) COMMENT FUNCTION st_setskew(rast raster, skewdouble precision) COMMENT FUNCTION st_setskew(rast raster, skewxdouble precision, skewydouble precision) COMMENT FUNCTION st_setsrid(geometry, integer) COMMENT FUNCTION st_setsrid(rast raster, sridinteger) COMMENT FUNCTION st_setupperleft(rast raster, upperleftxdouble precision, upperleftydouble precision) COMMENT FUNCTION st_setvalue(rast raster, bandinteger, ptgeometry, newvaluedouble precision) COMMENT FUNCTION st_setvalue(rast raster, bandinteger, xinteger, yinteger, newvaluedouble precision) COMMENT FUNCTION st_setvalue(rast raster, ptgeometry, newvaluedouble precision) COMMENT FUNCTION st_setvalue(rast raster, xinteger, yinteger, newvaluedouble precision) COMMENT FUNCTION st_sharedpaths(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_sharedpaths(geometry, geometry) COMMENT FUNCTION st_shift_longitude(geometry) COMMENT FUNCTION st_shortestline(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_shortestline(geometry, geometry) COMMENT FUNCTION st_simplify(geometry, double precision) COMMENT FUNCTION st_simplifypreservetopology(geometry, double precision) COMMENT FUNCTION st_skewx(raster) COMMENT FUNCTION st_skewy(raster) COMMENT FUNCTION st_snap(geom1 geometry, geom2 geometry, double precision) COMMENT FUNCTION st_snap(geometry, geometry, double precision) COMMENT FUNCTION st_snaptogrid(geom1 geometry, geom2 geometry, double precision, double precision, double precision, double precision) COMMENT FUNCTION st_snaptogrid(geometry, double precision) COMMENT FUNCTION st_snaptogrid(geometry, double precision, double precision) COMMENT FUNCTION st_snaptogrid(geometry, double precision, double precision, double precision, double precision) COMMENT FUNCTION st_snaptogrid(geometry, geometry, double precision, double precision, double precision, double precision) COMMENT FUNCTION st_split(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_split(geometry, geometry) COMMENT FUNCTION st_srid(geometry) COMMENT FUNCTION st_srid(raster) COMMENT FUNCTION st_startpoint(geometry) COMMENT FUNCTION st_summary(geometry) COMMENT FUNCTION st_summarystats(rastertabletext, rastercolumntext, exclude_nodata_valueboolean) COMMENT FUNCTION st_summarystats(rastertabletext, rastercolumntext, nband integer, exclude_nodata_valueboolean) COMMENT FUNCTION st_summarystats(rast raster, exclude_nodata_valueboolean) COMMENT FUNCTION st_summarystats(rast raster, nband integer, exclude_nodata_valueboolean) COMMENT FUNCTION st_symdifference(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_symdifference(geometry, geometry) COMMENT FUNCTION st_touches(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_touches(geometry, geometry) COMMENT FUNCTION st_transform(geometry, integer) COMMENT FUNCTION st_transform(rast raster, sridinteger, algorithmtext, maxerrdouble precision, scalexdouble precision, scaleydouble precision) COMMENT FUNCTION st_transform(rast raster, sridinteger, scalexdouble precision, scaleydouble precision, algorithmtext, maxerrdouble precision) COMMENT FUNCTION st_translate(geometry, double precision, double precision) COMMENT FUNCTION st_translate(geometry, double precision, double precision, double precision) COMMENT FUNCTION st_transscale(geometry, double precision, double precision, double precision, double precision) COMMENT FUNCTION st_unaryunion(geometry) COMMENT FUNCTION st_union(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_union(geometry[]) COMMENT FUNCTION st_union(geometry, geometry) COMMENT FUNCTION st_upperleftx(raster) COMMENT FUNCTION st_upperlefty(raster) COMMENT FUNCTION st_valuecount(rastertabletext, rastercolumntext, nband integer, exclude_nodata_valueboolean, searchvaluedouble precision, roundtodouble precision) COMMENT FUNCTION st_valuecount(rastertabletext, rastercolumntext, nband integer, exclude_nodata_valueboolean, searchvaluesdouble precision[], roundtodouble precision, OUTvaluedouble precision, OUTcountinteger) COMMENT FUNCTION st_valuecount(rastertabletext, rastercolumntext, nband integer, searchvaluedouble precision, roundtodouble precision) COMMENT FUNCTION st_valuecount(rastertabletext, rastercolumntext, nband integer, searchvaluesdouble precision[], roundtodouble precision, OUTvaluedouble precision, OUTcountinteger) COMMENT FUNCTION st_valuecount(rastertabletext, rastercolumntext, searchvaluedouble precision, roundtodouble precision) COMMENT FUNCTION st_valuecount(rastertabletext, rastercolumntext, searchvaluesdouble precision[], roundtodouble precision, OUTvaluedouble precision, OUTcountinteger) COMMENT FUNCTION st_valuecount(rast raster, nband integer, exclude_nodata_valueboolean, searchvaluedouble precision, roundtodouble precision) COMMENT FUNCTION st_valuecount(rast raster, nband integer, exclude_nodata_valueboolean, searchvaluesdouble precision[], roundtodouble precision, OUTvaluedouble precision, OUTcountinteger) COMMENT FUNCTION st_valuecount(rast raster, nband integer, searchvaluedouble precision, roundtodouble precision) COMMENT FUNCTION st_valuecount(rast raster, nband integer, searchvaluesdouble precision[], roundtodouble precision, OUTvaluedouble precision, OUTcountinteger) COMMENT FUNCTION st_valuecount(rast raster, searchvaluedouble precision, roundtodouble precision) COMMENT FUNCTION st_valuecount(rast raster, searchvaluesdouble precision[], roundtodouble precision, OUTvaluedouble precision, OUTcountinteger) COMMENT FUNCTION st_value(rast raster, bandinteger, ptgeometry, hasnodataboolean) COMMENT FUNCTION st_value(rast raster, bandinteger, xinteger, yinteger, hasnodataboolean) COMMENT FUNCTION st_value(rast raster, ptgeometry, hasnodataboolean) COMMENT FUNCTION st_value(rast raster, xinteger, yinteger, hasnodataboolean) COMMENT FUNCTION st_width(raster) COMMENT FUNCTION st_within(geom1 geometry, geom2 geometry) COMMENT FUNCTION st_within(geometry, geometry) COMMENT FUNCTION st_wkbtosql(bytea) COMMENT FUNCTION st_wkbtosql(wkb bytea) COMMENT FUNCTION st_wkttosql(text) COMMENT FUNCTION st_world2rastercoordx(rast raster, ptgeometry) COMMENT FUNCTION st_world2rastercoordx(rast raster, xwdouble precision) COMMENT FUNCTION st_world2rastercoordx(rast raster, xwdouble precision, ywdouble precision) COMMENT FUNCTION st_world2rastercoordy(rast raster, ptgeometry) COMMENT FUNCTION st_world2rastercoordy(rast raster, xwdouble precision, ywdouble precision) COMMENT FUNCTION st_world2rastercoordy(rast raster, ywdouble precision) COMMENT FUNCTION st_x(geometry) COMMENT FUNCTION st_xmax(box3d) COMMENT FUNCTION st_xmin(box3d) COMMENT FUNCTION st_y(geometry) COMMENT FUNCTION st_ymax(box3d) COMMENT FUNCTION st_ymin(box3d) COMMENT FUNCTION st_z(geometry) COMMENT FUNCTION st_zmax(box3d) COMMENT FUNCTION st_zmflag(geometry) COMMENT FUNCTION st_zmin(box3d) COMMENT FUNCTION topogeo_addlinestring(atopology character varying, aline public.geometry, tolerance double precision) COMMENT FUNCTION topogeo_addpoint(atopology character varying, apoint public.geometry, tolerance double precision) COMMENT FUNCTION topogeo_addpolygon(atopology character varying, apoly public.geometry, tolerance double precision) COMMENT FUNCTION topologysummary(atopologycharacter varying) COMMENT FUNCTION totopogeom(ageom public.geometry, atopology character varying, alayer integer, atolerance double precision) COMMENT FUNCTION unlockrows(text) COMMENT FUNCTION updategeometrysrid(catalogn_namecharacter varying, schema_namecharacter varying, table_namecharacter varying, column_namecharacter varying, new_sridinteger) COMMENT FUNCTION updategeometrysrid(character varying, character varying, character varying, character varying, integer) COMMENT FUNCTION updategeometrysrid(character varying, character varying, character varying, integer) COMMENT FUNCTION updategeometrysrid(character varying, character varying, integer) COMMENT FUNCTION validatetopology(character varying) COMMENT FUNCTION validatetopology(toponame character varying) COMMENT TYPE box2d COMMENT TYPE box3d COMMENT TYPE box3d_extent COMMENT TYPE geography COMMENT TYPE geometry COMMENT TYPE geometry_dump COMMENT TYPE geomval COMMENT TYPE getfaceedges_returntype COMMENT TYPE histogram COMMENT TYPE raster COMMENT TYPE reclassarg COMMENT TYPE summarystats COMMENT TYPE topogeometry COMMENT TYPE validatetopology_returntype CONSTRAINT geometry_columns_pk CONSTRAINT layer_pkey CONSTRAINT layer_schema_name_key CONSTRAINT raster_columns_pk CONSTRAINT raster_overviews_pk CONSTRAINT spatial_ref_sys_pkey CONSTRAINT topology_name_key CONSTRAINT topology_pkey DOMAIN topoelement DOMAIN topoelementarray DOMAIN topogeomelementarray FKCONSTRAINT layer_topology_id_fkey FUNCTION addauth(text) FUNCTION addbbox(geometry) FUNCTION addedge(character varying, public.geometry) FUNCTION addface(character varying, public.geometry, boolean) FUNCTION addgeometrycolumn(character varying, character varying, character varying, character varying, integer, character varying, integer) FUNCTION addgeometrycolumn(character varying, character varying, character varying, character varying, integer, character varying, integer, boolean) FUNCTION addgeometrycolumn(character varying, character varying, character varying, integer, character varying, integer) FUNCTION addgeometrycolumn(character varying, character varying, character varying, integer, character varying, integer, boolean) FUNCTION addgeometrycolumn(character varying, character varying, integer, character varying, integer) FUNCTION addgeometrycolumn(character varying, character varying, integer, character varying, integer, boolean) FUNCTION addnode(character varying, public.geometry) FUNCTION addnode(character varying, public.geometry, boolean, boolean) FUNCTION _add_overview_constraint(name, name, name, name, name, name, integer) FUNCTION addoverviewconstraints(name, name, name, name, integer) FUNCTION addoverviewconstraints(name, name, name, name, name, name, integer) FUNCTION addpoint(geometry, geometry) FUNCTION addpoint(geometry, geometry, integer) FUNCTION addrastercolumn(character varying, character varying, character varying, character varying, integer, character varying[], boolean, boolean, double precision[], double precision, double precision, integer, integer, geometry) FUNCTION addrastercolumn(character varying, character varying, character varying, integer, character varying[], boolean, boolean, double precision[], double precision, double precision, integer, integer, geometry) FUNCTION addrastercolumn(character varying, character varying, integer, character varying[], boolean, boolean, double precision[], double precision, double precision, integer, integer, geometry) FUNCTION _add_raster_constraint_alignment(name, name, name) FUNCTION _add_raster_constraint_blocksize(name, name, name, text) FUNCTION _add_raster_constraint_extent(name, name, name) FUNCTION _add_raster_constraint(name, text) FUNCTION _add_raster_constraint_nodata_values(name, name, name) FUNCTION _add_raster_constraint_num_bands(name, name, name) FUNCTION _add_raster_constraint_out_db(name, name, name) FUNCTION _add_raster_constraint_pixel_types(name, name, name) FUNCTION _add_raster_constraint_regular_blocking(name, name, name) FUNCTION _add_raster_constraint_scale(name, name, name, character) FUNCTION addrasterconstraints(name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION addrasterconstraints(name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION addrasterconstraints(name, name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION addrasterconstraints(name, name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION addrasterconstraints(name, name, name, text[]) FUNCTION addrasterconstraints(name, name, text[]) FUNCTION _add_raster_constraint_srid(name, name, name) FUNCTION addtopogeometrycolumn(character varying, character varying, character varying, character varying, character varying) FUNCTION addtopogeometrycolumn(character varying, character varying, character varying, character varying, character varying, integer) FUNCTION addtosearchpath(character varying) FUNCTION affine(geometry, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION affine(geometry, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION area2d(geometry) FUNCTION area(geometry) FUNCTION asbinary(geometry) FUNCTION asbinary(geometry, text) FUNCTION asewkb(geometry) FUNCTION asewkb(geometry, text) FUNCTION asewkt(geometry) FUNCTION _asgmledge(integer, integer, integer, public.geometry, regclass, text, integer, integer) FUNCTION _asgmledge(integer, integer, integer, public.geometry, regclass, text, integer, integer, text) FUNCTION _asgmledge(integer, integer, integer, public.geometry, regclass, text, integer, integer, text, integer) FUNCTION _asgmledge(integer, integer, integer, public.geometry, text) FUNCTION asgmledge(integer, integer, integer, public.geometry, text) FUNCTION _asgmledge(integer, integer, integer, public.geometry, text, integer, integer) FUNCTION _asgmlface(text, integer, regclass, text, integer, integer, text, integer) FUNCTION asgml(geometry) FUNCTION asgml(geometry, integer) FUNCTION asgml(geometry, integer, integer) FUNCTION _asgmlnode(integer, public.geometry, text) FUNCTION asgmlnode(integer, public.geometry, text) FUNCTION _asgmlnode(integer, public.geometry, text, integer, integer) FUNCTION _asgmlnode(integer, public.geometry, text, integer, integer, text) FUNCTION _asgmlnode(integer, public.geometry, text, integer, integer, text, integer) FUNCTION asgml(topogeometry) FUNCTION asgml(topogeometry, regclass) FUNCTION asgml(topogeometry, regclass, text) FUNCTION asgml(topogeometry, text) FUNCTION asgml(topogeometry, text, integer, integer) FUNCTION asgml(topogeometry, text, integer, integer, regclass) FUNCTION asgml(topogeometry, text, integer, integer, regclass, text) FUNCTION asgml(topogeometry, text, integer, integer, regclass, text, integer) FUNCTION ashexewkb(geometry) FUNCTION ashexewkb(geometry, text) FUNCTION askml(geometry) FUNCTION askml(geometry, integer) FUNCTION askml(geometry, integer, integer) FUNCTION askml(integer, geometry, integer) FUNCTION assvg(geometry) FUNCTION assvg(geometry, integer) FUNCTION assvg(geometry, integer, integer) FUNCTION astext(geometry) FUNCTION asukml(geometry) FUNCTION asukml(geometry, integer) FUNCTION asukml(geometry, integer, integer) FUNCTION azimuth(geometry, geometry) FUNCTION bdmpolyfromtext(text, integer) FUNCTION bdpolyfromtext(text, integer) FUNCTION boundary(geometry) FUNCTION box2d(box3d) FUNCTION box2d(box3d_extent) FUNCTION box2d_contain(box2d, box2d) FUNCTION box2d_contained(box2d, box2d) FUNCTION box2df_in(cstring) FUNCTION box2df_out(box2df) FUNCTION box2d(geometry) FUNCTION box2d_in(cstring) FUNCTION box2d_intersects(box2d, box2d) FUNCTION box2d_left(box2d, box2d) FUNCTION box2d_out(box2d) FUNCTION box2d_overlap(box2d, box2d) FUNCTION box2d_overleft(box2d, box2d) FUNCTION box2d_overright(box2d, box2d) FUNCTION box2d(raster) FUNCTION box2d_right(box2d, box2d) FUNCTION box2d_same(box2d, box2d) FUNCTION box3d(box2d) FUNCTION box3d_extent(box3d_extent) FUNCTION box3d_extent_in(cstring) FUNCTION box3d_extent_out(box3d_extent) FUNCTION box3d(geometry) FUNCTION box3d_in(cstring) FUNCTION box3d_out(box3d) FUNCTION box3d(raster) FUNCTION box3dtobox(box3d) FUNCTION box(box3d) FUNCTION box(geometry) FUNCTION buffer(geometry, double precision) FUNCTION buffer(geometry, double precision, integer) FUNCTION buildarea(geometry) FUNCTION build_histogram2d(histogram2d, text, text) FUNCTION build_histogram2d(histogram2d, text, text, text) FUNCTION bytea(geography) FUNCTION bytea(geometry) FUNCTION bytea(raster) FUNCTION cache_bbox() FUNCTION centroid(geometry) FUNCTION checkauth(text, text) FUNCTION checkauth(text, text, text) FUNCTION checkauthtrigger() FUNCTION chip_in(cstring) FUNCTION chip_out(chip) FUNCTION collect_garray(geometry[]) FUNCTION collect(geometry, geometry) FUNCTION collector(geometry, geometry) FUNCTION combine_bbox(box2d, geometry) FUNCTION combine_bbox(box3d_extent, geometry) FUNCTION combine_bbox(box3d, geometry) FUNCTION compression(chip) FUNCTION contains(geometry, geometry) FUNCTION convexhull(geometry) FUNCTION copytopology(character varying, character varying) FUNCTION create_histogram2d(box2d, integer) FUNCTION createtopogeom(character varying, integer, integer) FUNCTION createtopogeom(character varying, integer, integer, topoelementarray) FUNCTION createtopology(character varying) FUNCTION createtopology(character varying, integer) FUNCTION createtopology(character varying, integer, double precision) FUNCTION createtopology(character varying, integer, double precision, boolean) FUNCTION crosses(geometry, geometry) FUNCTION datatype(chip) FUNCTION difference(geometry, geometry) FUNCTION dimension(geometry) FUNCTION disablelongtransactions() FUNCTION disjoint(geometry, geometry) FUNCTION distance(geometry, geometry) FUNCTION distance_sphere(geometry, geometry) FUNCTION distance_spheroid(geometry, geometry, spheroid) FUNCTION dropbbox(geometry) FUNCTION dropgeometrycolumn(character varying, character varying) FUNCTION dropgeometrycolumn(character varying, character varying, character varying) FUNCTION dropgeometrycolumn(character varying, character varying, character varying, character varying) FUNCTION dropgeometrytable(character varying) FUNCTION dropgeometrytable(character varying, character varying) FUNCTION dropgeometrytable(character varying, character varying, character varying) FUNCTION _drop_overview_constraint(name, name, name) FUNCTION dropoverviewconstraints(name, name) FUNCTION dropoverviewconstraints(name, name, name) FUNCTION droprastercolumn(character varying, character varying) FUNCTION droprastercolumn(character varying, character varying, character varying) FUNCTION droprastercolumn(character varying, character varying, character varying, character varying) FUNCTION _drop_raster_constraint_alignment(name, name, name) FUNCTION _drop_raster_constraint_blocksize(name, name, name, text) FUNCTION _drop_raster_constraint_extent(name, name, name) FUNCTION _drop_raster_constraint(name, name, name) FUNCTION _drop_raster_constraint_nodata_values(name, name, name) FUNCTION _drop_raster_constraint_num_bands(name, name, name) FUNCTION _drop_raster_constraint_out_db(name, name, name) FUNCTION _drop_raster_constraint_pixel_types(name, name, name) FUNCTION _drop_raster_constraint_regular_blocking(name, name, name) FUNCTION _drop_raster_constraint_scale(name, name, name, character) FUNCTION droprasterconstraints(name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION droprasterconstraints(name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION droprasterconstraints(name, name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION droprasterconstraints(name, name, name, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) FUNCTION droprasterconstraints(name, name, name, text[]) FUNCTION droprasterconstraints(name, name, text[]) FUNCTION _drop_raster_constraint_srid(name, name, name) FUNCTION droprastertable(character varying) FUNCTION droprastertable(character varying, character varying) FUNCTION droprastertable(character varying, character varying, character varying) FUNCTION droptopogeometrycolumn(character varying, character varying, character varying) FUNCTION droptopology(character varying) FUNCTION dumpaswktpolygons(raster, integer) FUNCTION dump(geometry) FUNCTION dumprings(geometry) FUNCTION enablelongtransactions() FUNCTION endpoint(geometry) FUNCTION envelope(geometry) FUNCTION envelope(topogeometry) FUNCTION equals(geometry, geometry) FUNCTION equals(topogeometry, topogeometry) FUNCTION estimated_extent(text, text) FUNCTION estimated_extent(text, text, text) FUNCTION estimate_histogram2d(histogram2d, box2d) FUNCTION expand(box2d, double precision) FUNCTION expand(box3d, double precision) FUNCTION expand(geometry, double precision) FUNCTION explode_histogram2d(histogram2d, text) FUNCTION exteriorring(geometry) FUNCTION factor(chip) FUNCTION find_extent(text, text) FUNCTION find_extent(text, text, text) FUNCTION find_srid(character varying, character varying, character varying) FUNCTION fix_geometry_columns() FUNCTION force_2d(geometry) FUNCTION force_3d(geometry) FUNCTION force_3dm(geometry) FUNCTION force_3dz(geometry) FUNCTION force_4d(geometry) FUNCTION force_collection(geometry) FUNCTION forcerhr(geometry) FUNCTION geography_analyze(internal) FUNCTION geography(bytea) FUNCTION geography_cmp(geography, geography) FUNCTION geography_eq(geography, geography) FUNCTION geography_ge(geography, geography) FUNCTION geography(geography, integer, boolean) FUNCTION geography(geometry) FUNCTION geography_gist_compress(internal) FUNCTION geography_gist_consistent(internal, geography, integer) FUNCTION geography_gist_consistent(internal, geometry, integer) FUNCTION geography_gist_decompress(internal) FUNCTION geography_gist_join_selectivity(internal, oid, internal, smallint) FUNCTION geography_gist_penalty(internal, internal, internal) FUNCTION geography_gist_picksplit(internal, internal) FUNCTION geography_gist_same(box2d, box2d, internal) FUNCTION geography_gist_selectivity(internal, oid, internal, integer) FUNCTION geography_gist_union(bytea, internal) FUNCTION geography_gt(geography, geography) FUNCTION geography_in(cstring, oid, integer) FUNCTION geography_le(geography, geography) FUNCTION geography_lt(geography, geography) FUNCTION geography_out(geography) FUNCTION geography_overlaps(geography, geography) FUNCTION geography_recv(internal, oid, integer) FUNCTION geography_send(geography) FUNCTION geography_typmod_dims(integer) FUNCTION geography_typmod_in(cstring[]) FUNCTION geography_typmod_out(integer) FUNCTION geography_typmod_srid(integer) FUNCTION geography_typmod_type(integer) FUNCTION geom_accum(geometry[], geometry) FUNCTION geomcollfromtext(text) FUNCTION geomcollfromtext(text, integer) FUNCTION geomcollfromwkb(bytea) FUNCTION geomcollfromwkb(bytea, integer) FUNCTION geometry_above(geometry, geometry) FUNCTION geometry_analyze(internal) FUNCTION geometry_below(geometry, geometry) FUNCTION geometry(box2d) FUNCTION geometry(box3d) FUNCTION geometry(box3d_extent) FUNCTION geometry(bytea) FUNCTION geometry(chip) FUNCTION geometry_cmp(geometry, geometry) FUNCTION geometry_contained(geometry, geometry) FUNCTION geometry_contain(geometry, geometry) FUNCTION geometry_contains(geometry, geometry) FUNCTION geometry_distance_box(geometry, geometry) FUNCTION geometry_distance_centroid(geometry, geometry) FUNCTION geometry_eq(geometry, geometry) FUNCTION geometryfromtext(text) FUNCTION geometryfromtext(text, integer) FUNCTION geometry_ge(geometry, geometry) FUNCTION geometry(geography) FUNCTION geometry(geometry, integer, boolean) FUNCTION geometry_gist_compress_2d(internal) FUNCTION geometry_gist_compress_nd(internal) FUNCTION geometry_gist_consistent_2d(internal, geometry, integer) FUNCTION geometry_gist_consistent_nd(internal, geometry, integer) FUNCTION geometry_gist_decompress_2d(internal) FUNCTION geometry_gist_decompress_nd(internal) FUNCTION geometry_gist_distance_2d(internal, geometry, integer) FUNCTION geometry_gist_joinsel_2d(internal, oid, internal, smallint) FUNCTION geometry_gist_joinsel(internal, oid, internal, smallint) FUNCTION geometry_gist_penalty_2d(internal, internal, internal) FUNCTION geometry_gist_penalty_nd(internal, internal, internal) FUNCTION geometry_gist_picksplit_2d(internal, internal) FUNCTION geometry_gist_picksplit_nd(internal, internal) FUNCTION geometry_gist_same_2d(geometry, geometry, internal) FUNCTION geometry_gist_same_nd(geometry, geometry, internal) FUNCTION geometry_gist_sel_2d(internal, oid, internal, integer) FUNCTION geometry_gist_sel(internal, oid, internal, integer) FUNCTION geometry_gist_union_2d(bytea, internal) FUNCTION geometry_gist_union_nd(bytea, internal) FUNCTION geometry_gt(geometry, geometry) FUNCTION geometry_in(cstring) FUNCTION geometry_left(geometry, geometry) FUNCTION geometry_le(geometry, geometry) FUNCTION geometry_lt(geometry, geometry) FUNCTION geometryn(geometry, integer) FUNCTION geometry_out(geometry) FUNCTION geometry_overabove(geometry, geometry) FUNCTION geometry_overbelow(geometry, geometry) FUNCTION geometry_overlap(geometry, geometry) FUNCTION geometry_overlaps(geometry, geometry) FUNCTION geometry_overlaps_nd(geometry, geometry) FUNCTION geometry_overleft(geometry, geometry) FUNCTION geometry_overright(geometry, geometry) FUNCTION geometry_raster_contain(geometry, raster) FUNCTION geometry_raster_overlap(geometry, raster) FUNCTION geometry_recv(internal) FUNCTION geometry_right(geometry, geometry) FUNCTION geometry_samebox(geometry, geometry) FUNCTION geometry_same(geometry, geometry) FUNCTION geometry_send(geometry) FUNCTION geometry(text) FUNCTION geometry(topogeometry) FUNCTION geometrytype(geography) FUNCTION geometrytype(geometry) FUNCTION geometrytype(topogeometry) FUNCTION geometry_typmod_in(cstring[]) FUNCTION geometry_typmod_out(integer) FUNCTION geometry_within(geometry, geometry) FUNCTION geomfromewkb(bytea) FUNCTION geomfromewkt(text) FUNCTION geomfromtext(text) FUNCTION geomfromtext(text, integer) FUNCTION geomfromwkb(bytea) FUNCTION geomfromwkb(bytea, integer) FUNCTION geomunion(geometry, geometry) FUNCTION geosnoop(geometry) FUNCTION getbbox(geometry) FUNCTION getedgebypoint(character varying, public.geometry, double precision) FUNCTION getfacebypoint(character varying, public.geometry, double precision) FUNCTION getnodebypoint(character varying, public.geometry, double precision) FUNCTION get_proj4_from_srid(integer) FUNCTION getringedges(character varying, integer, integer) FUNCTION getsrid(geometry) FUNCTION gettopogeomelementarray(character varying, integer, integer) FUNCTION gettopogeomelementarray(topogeometry) FUNCTION gettopogeomelements(character varying, integer, integer) FUNCTION gettopogeomelements(topogeometry) FUNCTION gettopologyid(character varying) FUNCTION gettopologyname(integer) FUNCTION gettransactionid() FUNCTION gidx_in(cstring) FUNCTION gidx_out(gidx) FUNCTION hasbbox(geometry) FUNCTION height(chip) FUNCTION histogram2d_in(cstring) FUNCTION histogram2d_out(histogram2d) FUNCTION interiorringn(geometry, integer) FUNCTION intersection(geometry, geometry) FUNCTION intersects(geometry, geometry) FUNCTION intersects(topogeometry, topogeometry) FUNCTION isclosed(geometry) FUNCTION isempty(geometry) FUNCTION isring(geometry) FUNCTION issimple(geometry) FUNCTION isvalid(geometry) FUNCTION jtsnoop(geometry) FUNCTION layertrigger() FUNCTION length2d(geometry) FUNCTION length2d_spheroid(geometry, spheroid) FUNCTION length3d(geometry) FUNCTION length3d_spheroid(geometry, spheroid) FUNCTION length(geometry) FUNCTION length_spheroid(geometry, spheroid) FUNCTION linefrommultipoint(geometry) FUNCTION linefromtext(text) FUNCTION linefromtext(text, integer) FUNCTION linefromwkb(bytea) FUNCTION linefromwkb(bytea, integer) FUNCTION line_interpolate_point(geometry, double precision) FUNCTION line_locate_point(geometry, geometry) FUNCTION linemerge(geometry) FUNCTION linestringfromtext(text) FUNCTION linestringfromtext(text, integer) FUNCTION linestringfromwkb(bytea) FUNCTION linestringfromwkb(bytea, integer) FUNCTION line_substring(geometry, double precision, double precision) FUNCTION locate_along_measure(geometry, double precision) FUNCTION locate_between_measures(geometry, double precision, double precision) FUNCTION lockrow(text, text, text) FUNCTION lockrow(text, text, text, text) FUNCTION lockrow(text, text, text, text, timestamp without time zone) FUNCTION lockrow(text, text, text, timestamp without time zone) FUNCTION longtransactionsenabled() FUNCTION lwgeom_gist_compress(internal) FUNCTION lwgeom_gist_consistent(internal, geometry, integer) FUNCTION lwgeom_gist_decompress(internal) FUNCTION lwgeom_gist_penalty(internal, internal, internal) FUNCTION lwgeom_gist_picksplit(internal, internal) FUNCTION lwgeom_gist_same(box2d, box2d, internal) FUNCTION lwgeom_gist_union(bytea, internal) FUNCTION makebox2d(geometry, geometry) FUNCTION makebox3d(geometry, geometry) FUNCTION makeline_garray(geometry[]) FUNCTION makeline(geometry, geometry) FUNCTION makepoint(double precision, double precision) FUNCTION makepoint(double precision, double precision, double precision) FUNCTION makepoint(double precision, double precision, double precision, double precision) FUNCTION makepointm(double precision, double precision, double precision) FUNCTION makepolygon(geometry) FUNCTION makepolygon(geometry, geometry[]) FUNCTION mapalgebra4unionfinal1(rastexpr) FUNCTION mapalgebra4unionfinal3(rastexpr) FUNCTION mapalgebra4unionstate(raster, raster, text, text, text, double precision, text, text, text, double precision) FUNCTION mapalgebra4unionstate(rastexpr, raster) FUNCTION mapalgebra4unionstate(rastexpr, raster, text) FUNCTION mapalgebra4unionstate(rastexpr, raster, text, text) FUNCTION mapalgebra4unionstate(rastexpr, raster, text, text, text) FUNCTION mapalgebra4unionstate(rastexpr, raster, text, text, text, double precision) FUNCTION mapalgebra4unionstate(rastexpr, raster, text, text, text, double precision, text, text, text, double precision) FUNCTION mapalgebra4unionstate(rastexpr, raster, text, text, text, double precision, text, text, text, double precision, text, text, text, double precision) FUNCTION max_distance(geometry, geometry) FUNCTION mem_size(geometry) FUNCTION m(geometry) FUNCTION mlinefromtext(text) FUNCTION mlinefromtext(text, integer) FUNCTION mlinefromwkb(bytea) FUNCTION mlinefromwkb(bytea, integer) FUNCTION mpointfromtext(text) FUNCTION mpointfromtext(text, integer) FUNCTION mpointfromwkb(bytea) FUNCTION mpointfromwkb(bytea, integer) FUNCTION mpolyfromtext(text) FUNCTION mpolyfromtext(text, integer) FUNCTION mpolyfromwkb(bytea) FUNCTION mpolyfromwkb(bytea, integer) FUNCTION multi(geometry) FUNCTION multilinefromwkb(bytea) FUNCTION multilinefromwkb(bytea, integer) FUNCTION multilinestringfromtext(text) FUNCTION multilinestringfromtext(text, integer) FUNCTION multipointfromtext(text) FUNCTION multipointfromtext(text, integer) FUNCTION multipointfromwkb(bytea) FUNCTION multipointfromwkb(bytea, integer) FUNCTION multipolyfromwkb(bytea) FUNCTION multipolyfromwkb(bytea, integer) FUNCTION multipolygonfromtext(text) FUNCTION multipolygonfromtext(text, integer) FUNCTION ndims(geometry) FUNCTION noop(geometry) FUNCTION npoints(geometry) FUNCTION nrings(geometry) FUNCTION numgeometries(geometry) FUNCTION numinteriorring(geometry) FUNCTION numinteriorrings(geometry) FUNCTION numpoints(geometry) FUNCTION overlaps(geometry, geometry) FUNCTION _overview_constraint_info(name, name, name) FUNCTION _overview_constraint(raster, integer, name, name, name) FUNCTION perimeter2d(geometry) FUNCTION perimeter3d(geometry) FUNCTION perimeter(geometry) FUNCTION pgis_abs_in(cstring) FUNCTION pgis_abs_out(pgis_abs) FUNCTION pgis_geometry_accum_finalfn(pgis_abs) FUNCTION pgis_geometry_accum_transfn(pgis_abs, geometry) FUNCTION pgis_geometry_collect_finalfn(pgis_abs) FUNCTION pgis_geometry_makeline_finalfn(pgis_abs) FUNCTION pgis_geometry_polygonize_finalfn(pgis_abs) FUNCTION pgis_geometry_union_finalfn(pgis_abs) FUNCTION pointfromtext(text) FUNCTION pointfromtext(text, integer) FUNCTION pointfromwkb(bytea) FUNCTION pointfromwkb(bytea, integer) FUNCTION point_inside_circle(geometry, double precision, double precision, double precision) FUNCTION pointn(geometry, integer) FUNCTION pointonsurface(geometry) FUNCTION polyfromtext(text) FUNCTION polyfromtext(text, integer) FUNCTION polyfromwkb(bytea) FUNCTION polyfromwkb(bytea, integer) FUNCTION polygonfromtext(text) FUNCTION polygonfromtext(text, integer) FUNCTION polygonfromwkb(bytea) FUNCTION polygonfromwkb(bytea, integer) FUNCTION polygonize(character varying) FUNCTION polygonize_garray(geometry[]) FUNCTION populate_geometry_columns() FUNCTION populate_geometry_columns(boolean) FUNCTION populate_geometry_columns(oid) FUNCTION populate_geometry_columns(oid, boolean) FUNCTION postgis_addbbox(geometry) FUNCTION postgis_cache_bbox() FUNCTION postgis_constraint_dims(text, text, text) FUNCTION postgis_constraint_srid(text, text, text) FUNCTION postgis_constraint_type(text, text, text) FUNCTION postgis_dropbbox(geometry) FUNCTION postgis_full_version() FUNCTION postgis_gdal_version() FUNCTION postgis_geos_version() FUNCTION postgis_getbbox(geometry) FUNCTION postgis_gist_joinsel(internal, oid, internal, smallint) FUNCTION postgis_gist_sel(internal, oid, internal, integer) FUNCTION postgis_hasbbox(geometry) FUNCTION postgis_jts_version() FUNCTION postgis_lib_build_date() FUNCTION postgis_lib_version() FUNCTION postgis_libxml_version() FUNCTION postgis_libjson_version() FUNCTION postgis_noop(geometry) FUNCTION postgis_proj_version() FUNCTION postgis_raster_lib_build_date() FUNCTION postgis_raster_lib_version() FUNCTION postgis_raster_scripts_installed() FUNCTION postgis_scripts_build_date() FUNCTION postgis_scripts_installed() FUNCTION postgis_scripts_released() FUNCTION postgis_topology_scripts_installed() FUNCTION postgis_transform_geometry(geometry, text, text, integer) FUNCTION postgis_type_name(character varying, integer, boolean) FUNCTION postgis_typmod_dims(integer) FUNCTION postgis_typmod_srid(integer) FUNCTION postgis_typmod_type(integer) FUNCTION postgis_uses_stats() FUNCTION postgis_version() FUNCTION probe_geometry_columns() FUNCTION raster_above(raster, raster) FUNCTION raster_below(raster, raster) FUNCTION _raster_constraint_info_alignment(name, name, name) FUNCTION _raster_constraint_info_blocksize(name, name, name, text) FUNCTION _raster_constraint_info_extent(name, name, name) FUNCTION _raster_constraint_info_nodata_values(name, name, name) FUNCTION _raster_constraint_info_num_bands(name, name, name) FUNCTION _raster_constraint_info_out_db(name, name, name) FUNCTION _raster_constraint_info_pixel_types(name, name, name) FUNCTION _raster_constraint_info_regular_blocking(name, name, name) FUNCTION _raster_constraint_info_scale(name, name, name, character) FUNCTION _raster_constraint_info_srid(name, name, name) FUNCTION _raster_constraint_nodata_values(raster) FUNCTION _raster_constraint_out_db(raster) FUNCTION _raster_constraint_pixel_types(raster) FUNCTION raster_contained(raster, raster) FUNCTION raster_contain(raster, raster) FUNCTION raster_geometry_contain(raster, geometry) FUNCTION raster_geometry_overlap(raster, geometry) FUNCTION raster_in(cstring) FUNCTION raster_left(raster, raster) FUNCTION raster_out(raster) FUNCTION raster_overabove(raster, raster) FUNCTION raster_overbelow(raster, raster) FUNCTION raster_overlap(raster, raster) FUNCTION raster_overleft(raster, raster) FUNCTION raster_overright(raster, raster) FUNCTION raster_right(raster, raster) FUNCTION raster_same(raster, raster) FUNCTION relate(geometry, geometry) FUNCTION relate(geometry, geometry, text) FUNCTION relationtrigger() FUNCTION removepoint(geometry, integer) FUNCTION rename_geometry_table_constraints() FUNCTION reverse(geometry) FUNCTION rotate(geometry, double precision) FUNCTION rotatex(geometry, double precision) FUNCTION rotatey(geometry, double precision) FUNCTION rotatez(geometry, double precision) FUNCTION scale(geometry, double precision, double precision) FUNCTION scale(geometry, double precision, double precision, double precision) FUNCTION se_envelopesintersect(geometry, geometry) FUNCTION segmentize(geometry, double precision) FUNCTION se_is3d(geometry) FUNCTION se_ismeasured(geometry) FUNCTION se_locatealong(geometry, double precision) FUNCTION se_locatebetween(geometry, double precision, double precision) FUNCTION se_m(geometry) FUNCTION setfactor(chip, real) FUNCTION setpoint(geometry, integer, geometry) FUNCTION setsrid(chip, integer) FUNCTION setsrid(geometry, integer) FUNCTION se_z(geometry) FUNCTION shift_longitude(geometry) FUNCTION simplify(geometry, double precision) FUNCTION snaptogrid(geometry, double precision) FUNCTION snaptogrid(geometry, double precision, double precision) FUNCTION snaptogrid(geometry, double precision, double precision, double precision, double precision) FUNCTION snaptogrid(geometry, geometry, double precision, double precision, double precision, double precision) FUNCTION spheroid_in(cstring) FUNCTION spheroid_out(spheroid) FUNCTION srid(chip) FUNCTION srid(geometry) FUNCTION st_3dclosestpoint(geometry, geometry) FUNCTION _st_3ddfullywithin(geometry, geometry, double precision) FUNCTION st_3ddfullywithin(geometry, geometry, double precision) FUNCTION st_3ddistance(geometry, geometry) FUNCTION _st_3ddwithin(geometry, geometry, double precision) FUNCTION st_3ddwithin(geometry, geometry, double precision) FUNCTION st_3dintersects(geometry, geometry) FUNCTION st_3dlength(geometry) FUNCTION st_3dlength_spheroid(geometry, spheroid) FUNCTION st_3dlongestline(geometry, geometry) FUNCTION st_3dmakebox(geometry, geometry) FUNCTION ST_3DMakeBox(geometry, geometry) FUNCTION st_3dmaxdistance(geometry, geometry) FUNCTION st_3dperimeter(geometry) FUNCTION ST_3DPerimeter(geometry) FUNCTION st_3dshortestline(geometry, geometry) FUNCTION st_above(raster, raster) FUNCTION st_addband(raster, integer, text) FUNCTION st_addband(raster, integer, text, double precision) FUNCTION st_addband(raster, integer, text, double precision, double precision) FUNCTION st_addband(raster, raster) FUNCTION st_addband(raster, raster, integer) FUNCTION st_addband(raster, raster[], integer) FUNCTION st_addband(raster, raster, integer, integer) FUNCTION st_addband(raster, text) FUNCTION st_addband(raster, text, double precision) FUNCTION st_addband(raster, text, double precision, double precision) FUNCTION st_addbbox(geometry) FUNCTION st_addedgemodface(character varying, integer, integer, public.geometry) FUNCTION st_addedgenewfaces(character varying, integer, integer, public.geometry) FUNCTION st_addisoedge(character varying, integer, integer, public.geometry) FUNCTION st_addisonode(character varying, integer, public.geometry) FUNCTION st_addmeasure(geometry, double precision, double precision) FUNCTION st_addpoint(geometry, geometry) FUNCTION st_addpoint(geometry, geometry, integer) FUNCTION st_affine(geometry, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION st_affine(geometry, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION st_approxcount(raster, boolean, double precision) FUNCTION st_approxcount(raster, double precision) FUNCTION st_approxcount(raster, integer, boolean, double precision) FUNCTION st_approxcount(raster, integer, double precision) FUNCTION st_approxcount(text, text, boolean, double precision) FUNCTION st_approxcount(text, text, double precision) FUNCTION st_approxcount(text, text, integer, boolean, double precision) FUNCTION st_approxcount(text, text, integer, double precision) FUNCTION st_approxhistogram(raster, double precision) FUNCTION st_approxhistogram(raster, integer, boolean, double precision, integer, boolean) FUNCTION st_approxhistogram(raster, integer, boolean, double precision, integer, double precision[], boolean) FUNCTION st_approxhistogram(raster, integer, double precision) FUNCTION st_approxhistogram(raster, integer, double precision, integer, boolean) FUNCTION st_approxhistogram(raster, integer, double precision, integer, double precision[], boolean) FUNCTION st_approxhistogram(text, text, double precision) FUNCTION st_approxhistogram(text, text, integer, boolean, double precision, integer, boolean) FUNCTION st_approxhistogram(text, text, integer, boolean, double precision, integer, double precision[], boolean) FUNCTION st_approxhistogram(text, text, integer, double precision) FUNCTION st_approxhistogram(text, text, integer, double precision, integer, boolean) FUNCTION st_approxhistogram(text, text, integer, double precision, integer, double precision[], boolean) FUNCTION st_approxquantile(raster, boolean, double precision) FUNCTION st_approxquantile(raster, double precision) FUNCTION st_approxquantile(raster, double precision[]) FUNCTION st_approxquantile(raster, double precision, double precision) FUNCTION st_approxquantile(raster, double precision, double precision[]) FUNCTION st_approxquantile(raster, integer, boolean, double precision, double precision) FUNCTION st_approxquantile(raster, integer, boolean, double precision, double precision[]) FUNCTION st_approxquantile(raster, integer, double precision, double precision) FUNCTION st_approxquantile(raster, integer, double precision, double precision[]) FUNCTION st_approxquantile(text, text, boolean, double precision) FUNCTION st_approxquantile(text, text, double precision) FUNCTION st_approxquantile(text, text, double precision[]) FUNCTION st_approxquantile(text, text, double precision, double precision) FUNCTION st_approxquantile(text, text, double precision, double precision[]) FUNCTION st_approxquantile(text, text, integer, boolean, double precision, double precision) FUNCTION st_approxquantile(text, text, integer, boolean, double precision, double precision[]) FUNCTION st_approxquantile(text, text, integer, double precision, double precision) FUNCTION st_approxquantile(text, text, integer, double precision, double precision[]) FUNCTION st_approxsummarystats(raster, boolean, double precision) FUNCTION st_approxsummarystats(raster, double precision) FUNCTION st_approxsummarystats(raster, integer, boolean, double precision) FUNCTION st_approxsummarystats(raster, integer, double precision) FUNCTION st_approxsummarystats(text, text, boolean) FUNCTION st_approxsummarystats(text, text, double precision) FUNCTION st_approxsummarystats(text, text, integer, boolean, double precision) FUNCTION st_approxsummarystats(text, text, integer, double precision) FUNCTION st_area2d(geometry) FUNCTION st_area(geography) FUNCTION st_area(geography, boolean) FUNCTION st_area(geometry) FUNCTION st_area(text) FUNCTION startpoint(geometry) FUNCTION st_asbinary(geography) FUNCTION st_asbinary(geography, text) FUNCTION st_asbinary(geometry) FUNCTION st_asbinary(geometry, text) FUNCTION st_asbinary(raster) FUNCTION st_asbinary(text) FUNCTION st_asewkb(geometry) FUNCTION st_asewkb(geometry, text) FUNCTION st_asewkt(geography) FUNCTION st_asewkt(geometry) FUNCTION st_asewkt(text) FUNCTION st_asgdalraster(raster, text, text[], integer) FUNCTION st_asgeojson(geography) FUNCTION st_asgeojson(geography, integer) FUNCTION st_asgeojson(geography, integer, integer) FUNCTION st_asgeojson(geometry) FUNCTION st_asgeojson(geometry, integer) FUNCTION st_asgeojson(geometry, integer, integer) FUNCTION st_asgeojson(integer, geography) FUNCTION st_asgeojson(integer, geography, integer) FUNCTION _st_asgeojson(integer, geography, integer, integer) FUNCTION st_asgeojson(integer, geography, integer, integer) FUNCTION st_asgeojson(integer, geometry) FUNCTION st_asgeojson(integer, geometry, integer) FUNCTION _st_asgeojson(integer, geometry, integer, integer) FUNCTION st_asgeojson(integer, geometry, integer, integer) FUNCTION st_asgeojson(text) FUNCTION st_asgml(geography) FUNCTION st_asgml(geography, integer) FUNCTION st_asgml(geography, integer, integer) FUNCTION st_asgml(geometry) FUNCTION st_asgml(geometry, integer) FUNCTION st_asgml(geometry, integer, integer) FUNCTION st_asgml(integer, geography) FUNCTION st_asgml(integer, geography, integer) FUNCTION _st_asgml(integer, geography, integer, integer) FUNCTION st_asgml(integer, geography, integer, integer) FUNCTION _st_asgml(integer, geography, integer, integer, text) FUNCTION st_asgml(integer, geography, integer, integer, text) FUNCTION st_asgml(integer, geometry) FUNCTION _st_asgml(integer, geometry, integer) FUNCTION st_asgml(integer, geometry, integer) FUNCTION _st_asgml(integer, geometry, integer, integer) FUNCTION st_asgml(integer, geometry, integer, integer) FUNCTION _st_asgml(integer, geometry, integer, integer, text) FUNCTION st_asgml(integer, geometry, integer, integer, text) FUNCTION st_asgml(text) FUNCTION st_ashexewkb(geometry) FUNCTION st_ashexewkb(geometry, text) FUNCTION st_asjpeg(raster, integer, integer) FUNCTION st_asjpeg(raster, integer[], integer) FUNCTION st_asjpeg(raster, integer, text[]) FUNCTION st_asjpeg(raster, integer[], text[]) FUNCTION st_asjpeg(raster, text[]) FUNCTION st_askml(geography) FUNCTION st_askml(geography, integer) FUNCTION st_askml(geometry) FUNCTION st_askml(geometry, integer) FUNCTION st_askml(integer, geography) FUNCTION _st_askml(integer, geography, integer) FUNCTION st_askml(integer, geography, integer) FUNCTION _st_askml(integer, geography, integer, text) FUNCTION st_askml(integer, geography, integer, text) FUNCTION st_askml(integer, geometry) FUNCTION _st_askml(integer, geometry, integer) FUNCTION st_askml(integer, geometry, integer) FUNCTION _st_askml(integer, geometry, integer, text) FUNCTION st_askml(integer, geometry, integer, text) FUNCTION st_askml(text) FUNCTION st_aslatlontext(geometry) FUNCTION st_aslatlontext(geometry, text) FUNCTION _st_aspect4ma(double precision[], text, text[]) FUNCTION st_aspect(raster, integer, text) FUNCTION st_aspng(raster, integer, integer) FUNCTION st_aspng(raster, integer[], integer) FUNCTION st_aspng(raster, integer, text[]) FUNCTION st_aspng(raster, integer[], text[]) FUNCTION st_aspng(raster, text[]) FUNCTION st_asraster(geometry, double precision, double precision, double precision, double precision, text, double precision, double precision, double precision, double precision, boolean) FUNCTION st_asraster(geometry, double precision, double precision, double precision, double precision, text[], double precision[], double precision[], double precision, double precision, boolean) FUNCTION _st_asraster(geometry, double precision, double precision, integer, integer, text[], double precision[], double precision[], double precision, double precision, double precision, double precision, double precision, double precision, boolean) FUNCTION st_asraster(geometry, double precision, double precision, text, double precision, double precision, double precision, double precision, double precision, double precision, boolean) FUNCTION st_asraster(geometry, double precision, double precision, text[], double precision[], double precision[], double precision, double precision, double precision, double precision, boolean) FUNCTION st_asraster(geometry, integer, integer, double precision, double precision, text, double precision, double precision, double precision, double precision, boolean) FUNCTION st_asraster(geometry, integer, integer, double precision, double precision, text[], double precision[], double precision[], double precision, double precision, boolean) FUNCTION st_asraster(geometry, integer, integer, text, double precision, double precision, double precision, double precision, double precision, double precision, boolean) FUNCTION st_asraster(geometry, integer, integer, text[], double precision[], double precision[], double precision, double precision, double precision, double precision, boolean) FUNCTION st_asraster(geometry, raster, text, double precision, double precision, boolean) FUNCTION st_asraster(geometry, raster, text[], double precision[], double precision[], boolean) FUNCTION st_assvg(geography) FUNCTION st_assvg(geography, integer) FUNCTION st_assvg(geography, integer, integer) FUNCTION st_assvg(geometry) FUNCTION st_assvg(geometry, integer) FUNCTION st_assvg(geometry, integer, integer) FUNCTION st_assvg(text) FUNCTION st_astext(geography) FUNCTION st_astext(geometry) FUNCTION st_astext(text) FUNCTION st_astiff(raster, integer[], text, integer) FUNCTION st_astiff(raster, integer[], text[], integer) FUNCTION st_astiff(raster, text, integer) FUNCTION st_astiff(raster, text[], integer) FUNCTION st_asukml(geometry) FUNCTION st_asukml(geometry, integer) FUNCTION st_asukml(geometry, integer, integer) FUNCTION st_asx3d(geometry, integer) FUNCTION st_asx3d(geometry, integer, integer) FUNCTION _st_asx3d(integer, geometry, integer, integer, text) FUNCTION st_azimuth(geography, geography) FUNCTION st_azimuth(geometry, geometry) FUNCTION st_bandisnodata(raster) FUNCTION st_bandisnodata(raster, boolean) FUNCTION st_bandisnodata(raster, integer) FUNCTION st_bandisnodata(raster, integer, boolean) FUNCTION st_bandmetadata(raster) FUNCTION st_bandmetadata(raster, integer) FUNCTION st_bandmetadata(raster, integer[]) FUNCTION st_bandnodatavalue(raster) FUNCTION st_bandnodatavalue(raster, integer) FUNCTION st_bandpath(raster) FUNCTION st_bandpath(raster, integer) FUNCTION st_bandpixeltype(raster) FUNCTION st_bandpixeltype(raster, integer) FUNCTION st_band(raster, integer) FUNCTION st_band(raster, integer[]) FUNCTION st_band(raster, text, character) FUNCTION st_bdmpolyfromtext(text, integer) FUNCTION st_bdpolyfromtext(text, integer) FUNCTION st_below(raster, raster) FUNCTION _st_bestsrid(geography) FUNCTION _st_bestsrid(geography, geography) FUNCTION st_boundary(geometry) FUNCTION st_box2d(box3d) FUNCTION st_box2d(box3d_extent) FUNCTION st_box2d_contain(box2d, box2d) FUNCTION st_box2d_contained(box2d, box2d) FUNCTION st_box2d(geometry) FUNCTION st_box2d_in(cstring) FUNCTION st_box2d_intersects(box2d, box2d) FUNCTION st_box2d_left(box2d, box2d) FUNCTION st_box2d_out(box2d) FUNCTION st_box2d_overlap(box2d, box2d) FUNCTION st_box2d_overleft(box2d, box2d) FUNCTION st_box2d_overright(box2d, box2d) FUNCTION st_box2d_right(box2d, box2d) FUNCTION st_box2d_same(box2d, box2d) FUNCTION st_box3d(box2d) FUNCTION st_box3d_extent(box3d_extent) FUNCTION st_box3d(geometry) FUNCTION st_box3d_in(cstring) FUNCTION st_box3d_out(box3d) FUNCTION st_box(box3d) FUNCTION st_box(geometry) FUNCTION st_buffer(geography, double precision) FUNCTION st_buffer(geometry, double precision) FUNCTION _st_buffer(geometry, double precision, cstring) FUNCTION st_buffer(geometry, double precision, integer) FUNCTION st_buffer(geometry, double precision, text) FUNCTION st_buffer(text, double precision) FUNCTION st_buildarea(geometry) FUNCTION st_build_histogram2d(histogram2d, text, text) FUNCTION st_build_histogram2d(histogram2d, text, text, text) FUNCTION st_bytea(geometry) FUNCTION st_bytea(raster) FUNCTION st_cache_bbox() FUNCTION st_centroid(geometry) FUNCTION _st_changeedgegeom_adjacent_edges(character varying, integer, integer) FUNCTION st_changeedgegeom(character varying, integer, public.geometry) FUNCTION st_chip_in(cstring) FUNCTION st_chip_out(chip) FUNCTION st_cleangeometry(geometry) FUNCTION st_clip(raster, geometry, boolean) FUNCTION st_clip(raster, geometry, double precision, boolean) FUNCTION st_clip(raster, geometry, double precision[], boolean) FUNCTION st_clip(raster, integer, geometry, boolean) FUNCTION st_clip(raster, integer, geometry, double precision, boolean) FUNCTION st_clip(raster, integer, geometry, double precision[], boolean) FUNCTION st_closestpoint(geometry, geometry) FUNCTION st_collect_garray(geometry[]) FUNCTION st_collect(geometry[]) FUNCTION st_collect(geometry, geometry) FUNCTION st_collectionextract(geometry, integer) FUNCTION st_collectionhomogenize(geometry) FUNCTION st_collector(geometry, geometry) FUNCTION st_combine_bbox(box2d, geometry) FUNCTION st_combine_bbox(box3d_extent, geometry) FUNCTION st_combine_bbox(box3d, geometry) FUNCTION st_compression(chip) FUNCTION _st_concavehull(geometry) FUNCTION st_concavehull(geometry, double precision, boolean) FUNCTION _st_concvehull(geometry) FUNCTION st_contained(raster, raster) FUNCTION st_contain(raster, raster) FUNCTION _st_contains(geometry, geometry) FUNCTION st_contains(geometry, geometry) FUNCTION _st_containsproperly(geometry, geometry) FUNCTION st_containsproperly(geometry, geometry) FUNCTION st_convexhull(geometry) FUNCTION st_convexhull(raster) FUNCTION st_coorddim(geometry) FUNCTION st_count(raster, boolean) FUNCTION st_count(raster, integer, boolean) FUNCTION _st_count(raster, integer, boolean, double precision) FUNCTION st_count(text, text, boolean) FUNCTION st_count(text, text, integer, boolean) FUNCTION _st_count(text, text, integer, boolean, double precision) FUNCTION st_coveredby(geography, geography) FUNCTION _st_coveredby(geometry, geometry) FUNCTION st_coveredby(geometry, geometry) FUNCTION st_coveredby(text, text) FUNCTION _st_covers(geography, geography) FUNCTION st_covers(geography, geography) FUNCTION _st_covers(geometry, geometry) FUNCTION st_covers(geometry, geometry) FUNCTION st_covers(text, text) FUNCTION st_create_histogram2d(box2d, integer) FUNCTION st_createtopogeo(character varying, public.geometry) FUNCTION _st_crosses(geometry, geometry) FUNCTION st_crosses(geometry, geometry) FUNCTION st_curvetoline(geometry) FUNCTION st_curvetoline(geometry, integer) FUNCTION st_datatype(chip) FUNCTION _st_dfullywithin(geometry, geometry, double precision) FUNCTION st_dfullywithin(geometry, geometry, double precision) FUNCTION st_difference(geometry, geometry) FUNCTION st_dimension(geometry) FUNCTION st_disjoint(geometry, geometry) FUNCTION st_distance(geography, geography) FUNCTION st_distance(geography, geography, boolean) FUNCTION _st_distance(geography, geography, double precision, boolean) FUNCTION st_distance(geometry, geometry) FUNCTION st_distance_sphere(geometry, geometry) FUNCTION st_distance_spheroid(geometry, geometry, spheroid) FUNCTION st_distance(text, text) FUNCTION st_dropbbox(geometry) FUNCTION st_dumpaspolygons(raster) FUNCTION st_dumpaspolygons(raster, integer) FUNCTION _st_dumpaswktpolygons(raster, integer) FUNCTION st_dump(geometry) FUNCTION st_dumppoints(geometry) FUNCTION _st_dumppoints(geometry, integer[]) FUNCTION st_dumprings(geometry) FUNCTION st_dwithin(geography, geography, double precision) FUNCTION _st_dwithin(geography, geography, double precision, boolean) FUNCTION st_dwithin(geography, geography, double precision, boolean) FUNCTION _st_dwithin(geometry, geometry, double precision) FUNCTION st_dwithin(geometry, geometry, double precision) FUNCTION st_dwithin(text, text, double precision) FUNCTION st_endpoint(geometry) FUNCTION st_envelope(geometry) FUNCTION st_envelope(raster) FUNCTION _st_equals(geometry, geometry) FUNCTION st_equals(geometry, geometry) FUNCTION st_estimated_extent(text, text) FUNCTION st_estimated_extent(text, text, text) FUNCTION st_estimate_histogram2d(histogram2d, box2d) FUNCTION st_expand(box2d, double precision) FUNCTION st_expand(box3d, double precision) FUNCTION _st_expand(geography, double precision) FUNCTION st_expand(geometry, double precision) FUNCTION st_explode_histogram2d(histogram2d, text) FUNCTION st_exteriorring(geometry) FUNCTION st_factor(chip) FUNCTION st_find_extent(text, text) FUNCTION st_find_extent(text, text, text) FUNCTION st_flipcoordinates(geometry) FUNCTION st_force_2d(geometry) FUNCTION st_force_3d(geometry) FUNCTION st_force_3dm(geometry) FUNCTION st_force_3dz(geometry) FUNCTION st_force_4d(geometry) FUNCTION st_force_collection(geometry) FUNCTION st_forcerhr(geometry) FUNCTION st_gdaldrivers() FUNCTION st_geogfromtext(text) FUNCTION st_geogfromwkb(bytea) FUNCTION st_geographyfromtext(text) FUNCTION st_geohash(geometry) FUNCTION st_geohash(geometry, integer) FUNCTION st_geom_accum(geometry[], geometry) FUNCTION st_geomcollfromtext(text) FUNCTION st_geomcollfromtext(text, integer) FUNCTION st_geomcollfromwkb(bytea) FUNCTION st_geomcollfromwkb(bytea, integer) FUNCTION st_geometry_above(geometry, geometry) FUNCTION st_geometry_analyze(internal) FUNCTION st_geometry_below(geometry, geometry) FUNCTION st_geometry(box2d) FUNCTION st_geometry(box3d) FUNCTION st_geometry(box3d_extent) FUNCTION st_geometry(bytea) FUNCTION st_geometry(chip) FUNCTION st_geometry_cmp(geometry, geometry) FUNCTION st_geometry_contained(geometry, geometry) FUNCTION st_geometry_contain(geometry, geometry) FUNCTION st_geometry_eq(geometry, geometry) FUNCTION st_geometryfromtext(text) FUNCTION st_geometryfromtext(text, integer) FUNCTION st_geometry_ge(geometry, geometry) FUNCTION st_geometry_gt(geometry, geometry) FUNCTION st_geometry_in(cstring) FUNCTION st_geometry_left(geometry, geometry) FUNCTION st_geometry_le(geometry, geometry) FUNCTION st_geometry_lt(geometry, geometry) FUNCTION st_geometryn(geometry, integer) FUNCTION st_geometry_out(geometry) FUNCTION st_geometry_overabove(geometry, geometry) FUNCTION st_geometry_overbelow(geometry, geometry) FUNCTION st_geometry_overlap(geometry, geometry) FUNCTION st_geometry_overleft(geometry, geometry) FUNCTION st_geometry_overright(geometry, geometry) FUNCTION st_geometry_recv(internal) FUNCTION st_geometry_right(geometry, geometry) FUNCTION st_geometry_same(geometry, geometry) FUNCTION st_geometry_send(geometry) FUNCTION st_geometry(text) FUNCTION st_geometrytype(geometry) FUNCTION st_geometrytype(topogeometry) FUNCTION st_geomfromewkb(bytea) FUNCTION st_geomfromewkt(text) FUNCTION st_geomfromgeojson(text) FUNCTION st_geomfromgml(text) FUNCTION _st_geomfromgml(text, integer) FUNCTION st_geomfromgml(text, integer) FUNCTION st_geomfromkml(text) FUNCTION st_geomfromtext(text) FUNCTION st_geomfromtext(text, integer) FUNCTION st_geomfromwkb(bytea) FUNCTION st_geomfromwkb(bytea, integer) FUNCTION st_georeference(raster) FUNCTION st_georeference(raster, text) FUNCTION st_geotransform(raster) FUNCTION st_getfaceedges(character varying, integer) FUNCTION _st_getfacegeometry(character varying, integer) FUNCTION st_getfacegeometry(character varying, integer) FUNCTION st_gmltosql(text) FUNCTION st_gmltosql(text, integer) FUNCTION st_hasarc(geometry) FUNCTION st_hasbbox(geometry) FUNCTION st_hasnoband(raster) FUNCTION st_hasnoband(raster, integer) FUNCTION st_hausdorffdistance(geometry, geometry) FUNCTION st_hausdorffdistance(geometry, geometry, double precision) FUNCTION st_height(chip) FUNCTION st_height(raster) FUNCTION _st_hillshade4ma(double precision[], text, text[]) FUNCTION st_hillshade(raster, integer, text, double precision, double precision, double precision, double precision) FUNCTION st_histogram2d_in(cstring) FUNCTION st_histogram2d_out(histogram2d) FUNCTION _st_histogram(raster, integer, boolean, double precision, integer, double precision[], boolean, double precision, double precision) FUNCTION st_histogram(raster, integer, boolean, integer, boolean) FUNCTION st_histogram(raster, integer, boolean, integer, double precision[], boolean) FUNCTION st_histogram(raster, integer, integer, boolean) FUNCTION st_histogram(raster, integer, integer, double precision[], boolean) FUNCTION _st_histogram(text, text, integer, boolean, double precision, integer, double precision[], boolean) FUNCTION st_histogram(text, text, integer, boolean, integer, boolean) FUNCTION st_histogram(text, text, integer, boolean, integer, double precision[], boolean) FUNCTION st_histogram(text, text, integer, integer, boolean) FUNCTION st_histogram(text, text, integer, integer, double precision[], boolean) FUNCTION st_inittopogeo(character varying) FUNCTION st_interiorringn(geometry, integer) FUNCTION st_interpolatepoint(geometry, geometry) FUNCTION st_intersection(geography, geography) FUNCTION st_intersection(geometry, geometry) FUNCTION st_intersection(geometry, raster) FUNCTION st_intersection(geometry, raster, integer) FUNCTION st_intersection(raster, geometry) FUNCTION st_intersection(raster, geometry, regprocedure) FUNCTION st_intersection(raster, geometry, text, regprocedure) FUNCTION st_intersection(raster, integer, geometry) FUNCTION st_intersection(raster, integer, geometry, regprocedure) FUNCTION st_intersection(raster, integer, geometry, text, regprocedure) FUNCTION st_intersection(raster, integer, raster, integer, double precision) FUNCTION st_intersection(raster, integer, raster, integer, double precision[]) FUNCTION st_intersection(raster, integer, raster, integer, regprocedure) FUNCTION st_intersection(raster, integer, raster, integer, text, double precision) FUNCTION st_intersection(raster, integer, raster, integer, text, double precision[]) FUNCTION st_intersection(raster, integer, raster, integer, text, regprocedure) FUNCTION _st_intersection(raster, integer, raster, integer, text, text, regprocedure) FUNCTION st_intersection(raster, raster, double precision) FUNCTION st_intersection(raster, raster, double precision[]) FUNCTION st_intersection(raster, raster, regprocedure) FUNCTION st_intersection(raster, raster, text, double precision) FUNCTION st_intersection(raster, raster, text, double precision[]) FUNCTION st_intersection(raster, raster, text, regprocedure) FUNCTION st_intersection(text, text) FUNCTION st_intersects(geography, geography) FUNCTION _st_intersects(geometry, geometry) FUNCTION st_intersects(geometry, geometry) FUNCTION st_intersects(geometry, raster) FUNCTION st_intersects(geometry, raster, boolean) FUNCTION _st_intersects(geometry, raster, integer) FUNCTION st_intersects(geometry, raster, integer) FUNCTION _st_intersects(geometry, raster, integer, boolean) FUNCTION st_intersects(geometry, raster, integer, boolean) FUNCTION st_intersects(raster, boolean, geometry) FUNCTION st_intersects(raster, geometry) FUNCTION _st_intersects(raster, geometry, integer) FUNCTION st_intersects(raster, geometry, integer) FUNCTION st_intersects(raster, integer, boolean, geometry) FUNCTION st_intersects(raster, integer, geometry) FUNCTION _st_intersects(raster, integer, raster, integer) FUNCTION st_intersects(raster, integer, raster, integer) FUNCTION st_intersects(raster, raster) FUNCTION st_intersects(text, text) FUNCTION st_isclosed(geometry) FUNCTION st_iscollection(geometry) FUNCTION st_isempty(geometry) FUNCTION st_isempty(raster) FUNCTION st_isring(geometry) FUNCTION st_issimple(geometry) FUNCTION st_isvaliddetail(geometry) FUNCTION st_isvaliddetail(geometry, integer) FUNCTION st_isvalid(geometry) FUNCTION st_isvalid(geometry, integer) FUNCTION st_isvalidreason(geometry) FUNCTION st_isvalidreason(geometry, integer) FUNCTION st_left(raster, raster) FUNCTION st_length2d(geometry) FUNCTION st_length2d_spheroid(geometry, spheroid) FUNCTION st_length3d(geometry) FUNCTION st_length3d_spheroid(geometry, spheroid) FUNCTION st_length(geography) FUNCTION st_length(geography, boolean) FUNCTION st_length(geometry) FUNCTION st_length_spheroid(geometry, spheroid) FUNCTION st_length(text) FUNCTION _st_linecrossingdirection(geometry, geometry) FUNCTION st_linecrossingdirection(geometry, geometry) FUNCTION st_linefrommultipoint(geometry) FUNCTION st_linefromtext(text) FUNCTION st_linefromtext(text, integer) FUNCTION st_linefromwkb(bytea) FUNCTION st_linefromwkb(bytea, integer) FUNCTION st_line_interpolate_point(geometry, double precision) FUNCTION st_line_locate_point(geometry, geometry) FUNCTION st_linemerge(geometry) FUNCTION st_linestringfromwkb(bytea) FUNCTION st_linestringfromwkb(bytea, integer) FUNCTION st_line_substring(geometry, double precision, double precision) FUNCTION st_linetocurve(geometry) FUNCTION st_locatealong(geometry, double precision) FUNCTION st_locatealong(geometry, double precision, double precision) FUNCTION st_locate_along_measure(geometry, double precision) FUNCTION st_locatebetweenelevations(geometry, double precision, double precision) FUNCTION st_locatebetween(geometry, double precision, double precision) FUNCTION st_locatebetween(geometry, double precision, double precision, double precision) FUNCTION st_locate_between_measures(geometry, double precision, double precision) FUNCTION _st_longestline(geometry, geometry) FUNCTION st_longestline(geometry, geometry) FUNCTION st_makebox2d(geometry, geometry) FUNCTION st_makebox3d(geometry, geometry) FUNCTION st_makeemptyraster(integer, integer, double precision, double precision, double precision) FUNCTION st_makeemptyraster(integer, integer, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION st_makeemptyraster(integer, integer, double precision, double precision, double precision, double precision, double precision, double precision, integer) FUNCTION st_makeemptyraster(raster) FUNCTION st_makeenvelope(double precision, double precision, double precision, double precision) FUNCTION st_makeenvelope(double precision, double precision, double precision, double precision, integer) FUNCTION st_makeline_garray(geometry[]) FUNCTION st_makeline(geometry[]) FUNCTION st_makeline(geometry, geometry) FUNCTION st_makepoint(double precision, double precision) FUNCTION st_makepoint(double precision, double precision, double precision) FUNCTION st_makepoint(double precision, double precision, double precision, double precision) FUNCTION st_makepointm(double precision, double precision, double precision) FUNCTION st_makepolygon(geometry) FUNCTION st_makepolygon(geometry, geometry[]) FUNCTION st_makevalid(geometry) FUNCTION _st_mapalgebra4unionfinal1(raster) FUNCTION _st_mapalgebra4unionstate(raster, raster) FUNCTION _st_mapalgebra4unionstate(raster, raster, integer) FUNCTION _st_mapalgebra4unionstate(raster, raster, integer, text) FUNCTION _st_mapalgebra4unionstate(raster, raster, text) FUNCTION _st_mapalgebra4unionstate(raster, raster, text, text, text, double precision, text, text, text, double precision) FUNCTION st_mapalgebraexpr(raster, integer, raster, integer, text, text, text, text, text, double precision) FUNCTION st_mapalgebraexpr(raster, integer, text, text, double precision) FUNCTION st_mapalgebraexpr(raster, integer, text, text, text) FUNCTION st_mapalgebraexpr(raster, raster, text, text, text, text, text, double precision) FUNCTION st_mapalgebraexpr(raster, text, text, double precision) FUNCTION st_mapalgebraexpr(raster, text, text, text) FUNCTION st_mapalgebrafctngb(raster, integer, text, integer, integer, regprocedure, text, text[]) FUNCTION st_mapalgebrafct(raster, integer, raster, integer, regprocedure, text, text, text[]) FUNCTION st_mapalgebrafct(raster, integer, regprocedure) FUNCTION st_mapalgebrafct(raster, integer, regprocedure, text[]) FUNCTION st_mapalgebrafct(raster, integer, text, regprocedure) FUNCTION st_mapalgebrafct(raster, integer, text, regprocedure, text[]) FUNCTION st_mapalgebrafct(raster, raster, regprocedure, text, text, text[]) FUNCTION st_mapalgebrafct(raster, regprocedure) FUNCTION st_mapalgebrafct(raster, regprocedure, text[]) FUNCTION st_mapalgebrafct(raster, text, regprocedure) FUNCTION st_mapalgebrafct(raster, text, regprocedure, text[]) FUNCTION st_mapalgebra(raster, integer, text) FUNCTION st_mapalgebra(raster, integer, text, text) FUNCTION st_mapalgebra(raster, integer, text, text, text) FUNCTION st_mapalgebra(raster, text) FUNCTION st_mapalgebra(raster, text, text) FUNCTION st_mapalgebra(raster, text, text, text) FUNCTION st_max4ma(double precision[], text, text[]) FUNCTION _st_maxdistance(geometry, geometry) FUNCTION st_max_distance(geometry, geometry) FUNCTION st_maxdistance(geometry, geometry) FUNCTION st_mean4ma(double precision[], text, text[]) FUNCTION st_mem_size(geometry) FUNCTION st_metadata(raster) FUNCTION st_m(geometry) FUNCTION st_min4ma(double precision[], text, text[]) FUNCTION st_minimumboundingcircle(geometry) FUNCTION st_minimumboundingcircle(geometry, integer) FUNCTION st_minpossibleval(text) FUNCTION st_minpossiblevalue(text) FUNCTION st_mlinefromtext(text) FUNCTION st_mlinefromtext(text, integer) FUNCTION st_mlinefromwkb(bytea) FUNCTION st_mlinefromwkb(bytea, integer) FUNCTION st_modedgeheal(character varying, integer, integer) FUNCTION st_modedgesplit(character varying, integer, public.geometry) FUNCTION st_modedgessplit(character varying, integer, public.geometry) FUNCTION st_moveisonode(character varying, integer, public.geometry) FUNCTION st_mpointfromtext(text) FUNCTION st_mpointfromtext(text, integer) FUNCTION st_mpointfromwkb(bytea) FUNCTION st_mpointfromwkb(bytea, integer) FUNCTION st_mpolyfromtext(text) FUNCTION st_mpolyfromtext(text, integer) FUNCTION st_mpolyfromwkb(bytea) FUNCTION st_mpolyfromwkb(bytea, integer) FUNCTION st_multi(geometry) FUNCTION st_multilinefromwkb(bytea) FUNCTION st_multilinestringfromtext(text) FUNCTION st_multilinestringfromtext(text, integer) FUNCTION st_multipointfromtext(text) FUNCTION st_multipointfromwkb(bytea) FUNCTION st_multipointfromwkb(bytea, integer) FUNCTION st_multipolyfromwkb(bytea) FUNCTION st_multipolyfromwkb(bytea, integer) FUNCTION st_multipolygonfromtext(text) FUNCTION st_multipolygonfromtext(text, integer) FUNCTION st_ndims(geometry) FUNCTION st_newedgeheal(character varying, integer, integer) FUNCTION st_newedgessplit(character varying, integer, public.geometry) FUNCTION st_node(geometry) FUNCTION st_noop(geometry) FUNCTION st_npoints(geometry) FUNCTION st_nrings(geometry) FUNCTION st_numbands(raster) FUNCTION st_numgeometries(geometry) FUNCTION st_numinteriorring(geometry) FUNCTION st_numinteriorrings(geometry) FUNCTION st_numpatches(geometry) FUNCTION st_numpoints(geometry) FUNCTION st_offsetcurve(geometry, double precision, cstring) FUNCTION st_offsetcurve(geometry, double precision, text) FUNCTION _st_orderingequals(geometry, geometry) FUNCTION st_orderingequals(geometry, geometry) FUNCTION st_overabove(raster, raster) FUNCTION st_overbelow(raster, raster) FUNCTION st_overlap(raster, raster) FUNCTION _st_overlaps(geometry, geometry) FUNCTION st_overlaps(geometry, geometry) FUNCTION st_overleft(raster, raster) FUNCTION st_overright(raster, raster) FUNCTION st_patchn(geometry, integer) FUNCTION st_perimeter2d(geometry) FUNCTION st_perimeter3d(geometry) FUNCTION st_perimeter(geography, boolean) FUNCTION st_perimeter(geometry) FUNCTION st_pixelaspolygon(raster, integer, integer) FUNCTION st_pixelaspolygon(raster, integer, integer, integer) FUNCTION st_pixelaspolygons(raster, integer) FUNCTION st_pixelheight(raster) FUNCTION st_pixelwidth(raster) FUNCTION st_point(double precision, double precision) FUNCTION st_pointfromtext(text) FUNCTION st_pointfromtext(text, integer) FUNCTION st_pointfromwkb(bytea) FUNCTION st_pointfromwkb(bytea, integer) FUNCTION st_point_inside_circle(geometry, double precision, double precision, double precision) FUNCTION st_pointn(geometry) FUNCTION st_pointn(geometry, integer) FUNCTION st_pointonsurface(geometry) FUNCTION _st_pointoutside(geography) FUNCTION st_polyfromtext(text) FUNCTION st_polyfromtext(text, integer) FUNCTION st_polyfromwkb(bytea) FUNCTION st_polyfromwkb(bytea, integer) FUNCTION st_polygonfromtext(text) FUNCTION st_polygonfromtext(text, integer) FUNCTION st_polygonfromwkb(bytea) FUNCTION st_polygonfromwkb(bytea, integer) FUNCTION st_polygon(geometry, integer) FUNCTION st_polygonize_garray(geometry[]) FUNCTION st_polygonize(geometry[]) FUNCTION st_polygon(raster) FUNCTION st_polygon(raster, integer) FUNCTION st_postgis_gist_joinsel(internal, oid, internal, smallint) FUNCTION st_postgis_gist_sel(internal, oid, internal, integer) FUNCTION st_project(geography, double precision, double precision) FUNCTION st_quantile(raster, boolean, double precision) FUNCTION st_quantile(raster, double precision) FUNCTION st_quantile(raster, double precision[]) FUNCTION st_quantile(raster, integer, boolean, double precision) FUNCTION st_quantile(raster, integer, boolean, double precision[]) FUNCTION _st_quantile(raster, integer, boolean, double precision, double precision[]) FUNCTION st_quantile(raster, integer, double precision) FUNCTION st_quantile(raster, integer, double precision[]) FUNCTION st_quantile(text, text, boolean, double precision) FUNCTION st_quantile(text, text, double precision) FUNCTION st_quantile(text, text, double precision[]) FUNCTION st_quantile(text, text, integer, boolean, double precision) FUNCTION st_quantile(text, text, integer, boolean, double precision[]) FUNCTION _st_quantile(text, text, integer, boolean, double precision, double precision[]) FUNCTION st_quantile(text, text, integer, double precision) FUNCTION st_quantile(text, text, integer, double precision[]) FUNCTION st_range4ma(double precision[], text, text[]) FUNCTION st_raster2worldcoordx(raster, integer) FUNCTION st_raster2worldcoordx(raster, integer, integer) FUNCTION st_raster2worldcoordy(raster, integer) FUNCTION st_raster2worldcoordy(raster, integer, integer) FUNCTION st_reclass(raster, integer, text, text, double precision) FUNCTION _st_reclass(raster, reclassarg[]) FUNCTION st_reclass(raster, reclassarg[]) FUNCTION st_reclass(raster, text, text) FUNCTION st_relate(geometry, geometry) FUNCTION st_relate(geometry, geometry, integer) FUNCTION st_relate(geometry, geometry, text) FUNCTION st_relatematch(text, text) FUNCTION st_remedgemodface(character varying, integer) FUNCTION st_remedgenewface(character varying, integer) FUNCTION st_remisonode(character varying, integer) FUNCTION st_removeisoedge(character varying, integer) FUNCTION st_removeisonode(character varying, integer) FUNCTION st_removepoint(geometry, integer) FUNCTION st_removerepeatedpoints(geometry) FUNCTION st_resample(raster, integer, double precision, double precision, double precision, double precision, double precision, double precision, text, double precision) FUNCTION st_resample(raster, integer, integer, integer, double precision, double precision, double precision, double precision, text, double precision) FUNCTION st_resample(raster, raster, boolean, text, double precision) FUNCTION st_resample(raster, raster, text, double precision) FUNCTION st_resample(raster, raster, text, double precision, boolean) FUNCTION _st_resample(raster, text, double precision, integer, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION _st_resample(raster, text, double precision, integer, double precision, double precision, double precision, double precision, double precision, double precision, integer, integer) FUNCTION st_rescale(raster, double precision, double precision, text, double precision) FUNCTION st_rescale(raster, double precision, text, double precision) FUNCTION st_reskew(raster, double precision, double precision, text, double precision) FUNCTION st_reskew(raster, double precision, text, double precision) FUNCTION st_reverse(geometry) FUNCTION st_right(raster, raster) FUNCTION st_rotate(geometry, double precision) FUNCTION st_rotate(geometry, double precision, double precision, double precision) FUNCTION st_rotate(geometry, double precision, geometry) FUNCTION st_rotatex(geometry, double precision) FUNCTION st_rotatey(geometry, double precision) FUNCTION st_rotatez(geometry, double precision) FUNCTION st_rotation(raster) FUNCTION st_samealignment(double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION st_samealignment(raster, raster) FUNCTION st_same(raster, raster) FUNCTION st_scale(geometry, double precision, double precision) FUNCTION st_scale(geometry, double precision, double precision, double precision) FUNCTION st_scalex(raster) FUNCTION st_scaley(raster) FUNCTION st_segmentize(geometry, double precision) FUNCTION st_setbandisnodata(raster) FUNCTION st_setbandisnodata(raster, integer) FUNCTION st_setbandnodatavalue(raster, double precision) FUNCTION st_setbandnodatavalue(raster, integer, double precision) FUNCTION st_setbandnodatavalue(raster, integer, double precision, boolean) FUNCTION st_setfactor(chip, real) FUNCTION st_setgeoreference(raster, text) FUNCTION st_setgeoreference(raster, text, text) FUNCTION st_setgeotransform(raster, double precision, double precision, double precision, double precision, double precision, double precision) FUNCTION st_setpoint(geometry, integer, geometry) FUNCTION st_setrotation(raster, double precision) FUNCTION st_setscale(raster, double precision) FUNCTION st_setscale(raster, double precision, double precision) FUNCTION st_setskew(raster, double precision) FUNCTION st_setskew(raster, double precision, double precision) FUNCTION st_setsrid(geometry, integer) FUNCTION st_setsrid(raster, integer) FUNCTION st_setupperleft(raster, double precision, double precision) FUNCTION st_setvalue(raster, geometry, double precision) FUNCTION st_setvalue(raster, integer, geometry, double precision) FUNCTION st_setvalue(raster, integer, integer, double precision) FUNCTION st_setvalue(raster, integer, integer, integer, double precision) FUNCTION st_sharedpaths(geometry, geometry) FUNCTION st_shift_longitude(geometry) FUNCTION st_shortestline(geometry, geometry) FUNCTION st_simplify(geometry, double precision) FUNCTION st_simplifypreservetopology(geometry, double precision) FUNCTION st_skewx(raster) FUNCTION st_skewy(raster) FUNCTION _st_slope4ma(double precision[], text, text[]) FUNCTION st_slope(raster, integer, text) FUNCTION st_snap(geometry, geometry, double precision) FUNCTION st_snaptogrid(geometry, double precision) FUNCTION st_snaptogrid(geometry, double precision, double precision) FUNCTION st_snaptogrid(geometry, double precision, double precision, double precision, double precision) FUNCTION st_snaptogrid(geometry, geometry, double precision, double precision, double precision, double precision) FUNCTION st_snaptogrid(raster, double precision, double precision, double precision, double precision, text, double precision) FUNCTION st_snaptogrid(raster, double precision, double precision, double precision, text, double precision) FUNCTION st_snaptogrid(raster, double precision, double precision, text, double precision, double precision, double precision) FUNCTION st_spheroid_in(cstring) FUNCTION st_spheroid_out(spheroid) FUNCTION st_split(geometry, geometry) FUNCTION st_srid(chip) FUNCTION st_srid(geometry) FUNCTION st_srid(raster) FUNCTION st_startpoint(geometry) FUNCTION st_sum4ma(double precision[], text, text[]) FUNCTION st_summary(geography) FUNCTION st_summary(geometry) FUNCTION st_summarystats(raster, boolean) FUNCTION st_summarystats(raster, integer, boolean) FUNCTION _st_summarystats(raster, integer, boolean, double precision) FUNCTION st_summarystats(text, text, boolean) FUNCTION st_summarystats(text, text, integer, boolean) FUNCTION _st_summarystats(text, text, integer, boolean, double precision) FUNCTION st_symdifference(geometry, geometry) FUNCTION st_symmetricdifference(geometry, geometry) FUNCTION st_testraster(double precision, double precision, double precision) FUNCTION st_text(boolean) FUNCTION st_text(geometry) FUNCTION _st_touches(geometry, geometry) FUNCTION st_touches(geometry, geometry) FUNCTION st_transform(geometry, integer) FUNCTION st_transform(raster, integer, double precision, double precision, text, double precision) FUNCTION st_transform(raster, integer, double precision, text, double precision) FUNCTION st_transform(raster, integer, text, double precision, double precision, double precision) FUNCTION st_translate(geometry, double precision, double precision) FUNCTION st_translate(geometry, double precision, double precision, double precision) FUNCTION st_transscale(geometry, double precision, double precision, double precision, double precision) FUNCTION st_unaryunion(geometry) FUNCTION st_union(geometry[]) FUNCTION st_union(geometry, geometry) FUNCTION st_unite_garray(geometry[]) FUNCTION st_upperleftx(raster) FUNCTION st_upperlefty(raster) FUNCTION st_valuecount(raster, double precision, double precision) FUNCTION st_valuecount(raster, double precision[], double precision) FUNCTION _st_valuecount(raster, integer, boolean, double precision[], double precision) FUNCTION st_valuecount(raster, integer, boolean, double precision, double precision) FUNCTION st_valuecount(raster, integer, boolean, double precision[], double precision) FUNCTION st_valuecount(raster, integer, double precision, double precision) FUNCTION st_valuecount(raster, integer, double precision[], double precision) FUNCTION st_valuecount(text, text, double precision, double precision) FUNCTION st_valuecount(text, text, double precision[], double precision) FUNCTION _st_valuecount(text, text, integer, boolean, double precision[], double precision) FUNCTION st_valuecount(text, text, integer, boolean, double precision, double precision) FUNCTION st_valuecount(text, text, integer, boolean, double precision[], double precision) FUNCTION st_valuecount(text, text, integer, double precision, double precision) FUNCTION st_valuecount(text, text, integer, double precision[], double precision) FUNCTION st_valuepercent(raster, double precision, double precision) FUNCTION st_valuepercent(raster, double precision[], double precision) FUNCTION st_valuepercent(raster, integer, boolean, double precision, double precision) FUNCTION st_valuepercent(raster, integer, boolean, double precision[], double precision) FUNCTION st_valuepercent(raster, integer, double precision, double precision) FUNCTION st_valuepercent(raster, integer, double precision[], double precision) FUNCTION st_valuepercent(text, text, double precision, double precision) FUNCTION st_valuepercent(text, text, double precision[], double precision) FUNCTION st_valuepercent(text, text, integer, boolean, double precision, double precision) FUNCTION st_valuepercent(text, text, integer, boolean, double precision[], double precision) FUNCTION st_valuepercent(text, text, integer, double precision, double precision) FUNCTION st_valuepercent(text, text, integer, double precision[], double precision) FUNCTION st_value(raster, geometry) FUNCTION st_value(raster, geometry, boolean) FUNCTION st_value(raster, integer, geometry) FUNCTION st_value(raster, integer, geometry, boolean) FUNCTION st_value(raster, integer, integer) FUNCTION st_value(raster, integer, integer, boolean) FUNCTION st_value(raster, integer, integer, integer) FUNCTION st_value(raster, integer, integer, integer, boolean) FUNCTION st_width(chip) FUNCTION st_width(raster) FUNCTION _st_within(geometry, geometry) FUNCTION st_within(geometry, geometry) FUNCTION st_wkbtosql(bytea) FUNCTION st_wkttosql(text) FUNCTION st_world2rastercoordx(raster, double precision) FUNCTION st_world2rastercoordx(raster, double precision, double precision) FUNCTION st_world2rastercoordx(raster, geometry) FUNCTION st_world2rastercoordy(raster, double precision) FUNCTION st_world2rastercoordy(raster, double precision, double precision) FUNCTION st_world2rastercoordy(raster, geometry) FUNCTION st_x(geometry) FUNCTION st_xmax(box3d) FUNCTION st_xmin(box3d) FUNCTION st_y(geometry) FUNCTION st_ymax(box3d) FUNCTION st_ymin(box3d) FUNCTION st_z(geometry) FUNCTION st_zmax(box3d) FUNCTION st_zmflag(geometry) FUNCTION st_zmin(box3d) FUNCTION summary(geometry) FUNCTION symdifference(geometry, geometry) FUNCTION symmetricdifference(geometry, geometry) FUNCTION text(boolean) FUNCTION text(geometry) FUNCTION topoelementarray_append(topoelementarray, topoelement) FUNCTION topogeo_addgeometry(character varying, public.geometry, double precision) FUNCTION topogeo_addlinestring(character varying, public.geometry) FUNCTION topogeo_addlinestring(character varying, public.geometry, double precision) FUNCTION topogeo_addpoint(character varying, public.geometry, double precision) FUNCTION topogeo_addpoint(character varying, public.geometry, integer, integer) FUNCTION topogeo_addpolygon(character varying, public.geometry) FUNCTION topogeo_addpolygon(character varying, public.geometry, double precision) FUNCTION topologysummary(character varying) FUNCTION totopogeom(public.geometry, character varying, integer, double precision) FUNCTION touches(geometry, geometry) FUNCTION transform_geometry(geometry, text, text, integer) FUNCTION transform(geometry, integer) FUNCTION translate(geometry, double precision, double precision) FUNCTION translate(geometry, double precision, double precision, double precision) FUNCTION transscale(geometry, double precision, double precision, double precision, double precision) FUNCTION unite_garray(geometry[]) FUNCTION unlockrows(text) FUNCTION updategeometrysrid(character varying, character varying, character varying, character varying, integer) FUNCTION updategeometrysrid(character varying, character varying, character varying, integer) FUNCTION updategeometrysrid(character varying, character varying, integer) FUNCTION update_geometry_stats() FUNCTION update_geometry_stats(character varying, character varying) FUNCTION update_the_geom_webmercator() FUNCTION validatetopology(character varying) FUNCTION width(chip) FUNCTION within(geometry, geometry) FUNCTION x(geometry) FUNCTION xmax(box2d) FUNCTION xmax(box3d) FUNCTION xmin(box2d) FUNCTION xmin(box3d) FUNCTION y(geometry) FUNCTION ymax(box2d) FUNCTION ymax(box3d) FUNCTION ymin(box2d) FUNCTION ymin(box3d) FUNCTION z(geometry) FUNCTION zmax(box3d) FUNCTION zmflag(geometry) FUNCTION zmin(box3d) OPERATOR CLASS btree_geography_ops OPERATOR CLASS btree_geometry_ops OPERATOR CLASS gist_geography_ops OPERATOR CLASS gist_geometry_ops OPERATOR CLASS gist_geometry_ops_2d OPERATOR CLASS gist_geometry_ops_nd OPERATOR ~=(geography, geography) OPERATOR ~(geography, geography) OPERATOR <<|(geography, geography) OPERATOR <<(geography, geography) OPERATOR <=(geography, geography) OPERATOR <(geography, geography) OPERATOR =(geography, geography) OPERATOR >=(geography, geography) OPERATOR >>(geography, geography) OPERATOR >(geography, geography) OPERATOR |>>(geography, geography) OPERATOR |&>(geography, geography) OPERATOR @(geography, geography) OPERATOR &<|(geography, geography) OPERATOR &<(geography, geography) OPERATOR &>(geography, geography) OPERATOR &&(geography, geography) OPERATOR &&&(geography, geography) OPERATOR ~=(geometry, geometry) OPERATOR ~(geometry, geometry) OPERATOR <<|(geometry, geometry) OPERATOR <<(geometry, geometry) OPERATOR <=(geometry, geometry) OPERATOR <(geometry, geometry) OPERATOR =(geometry, geometry) OPERATOR >=(geometry, geometry) OPERATOR >>(geometry, geometry) OPERATOR >(geometry, geometry) OPERATOR |>>(geometry, geometry) OPERATOR |&>(geometry, geometry) OPERATOR @(geometry, geometry) OPERATOR &<|(geometry, geometry) OPERATOR &<(geometry, geometry) OPERATOR &>(geometry, geometry) OPERATOR &&(geometry, geometry) OPERATOR &&&(geometry, geometry) OPERATOR ~(geometry, raster) OPERATOR &&(geometry, raster) OPERATOR <#>(geometry, geometry) OPERATOR <->(geometry, geometry) OPERATOR ~(raster, geometry) OPERATOR &&(raster, geometry) OPERATOR ~=(raster, raster) OPERATOR ~(raster, raster) OPERATOR <<|(raster, raster) OPERATOR <<(raster, raster) OPERATOR >>(raster, raster) OPERATOR |>>(raster, raster) OPERATOR |&>(raster, raster) OPERATOR @(raster, raster) OPERATOR &<|(raster, raster) OPERATOR &<(raster, raster) OPERATOR &>(raster, raster) OPERATOR &&(raster, raster) PROCEDURALLANGUAGE plpgsql RULE geometry_columns_delete RULE geometry_columns_insert RULE geometry_columns_update SCHEMA topology SEQUENCE topology_id_seq SHELLTYPE box2d SHELLTYPE box2df SHELLTYPE box3d SHELLTYPE box3d_extent SHELLTYPE chip SHELLTYPE geography SHELLTYPE geometry SHELLTYPE gidx SHELLTYPE pgis_abs SHELLTYPE raster SHELLTYPE spheroid TABLE DATA geography_columns TABLE DATA geometry_columns TABLE DATA raster_columns TABLE DATA raster_overviews TABLE geography_columns TABLE geometry_columns TABLE layer TABLE raster_columns TABLE raster_overviews TABLE spatial_ref_sys TABLE topology TRIGGER layer_integrity_checks TYPE box2d TYPE box2df TYPE box3d TYPE box3d_extent TYPE chip TYPE geography TYPE geometry TYPE geometry_dump TYPE geomval TYPE getfaceedges_returntype TYPE gidx TYPE histogram TYPE histogram2d TYPE pgis_abs TYPE quantile TYPE raster TYPE rastexpr TYPE reclassarg TYPE spheroid TYPE summarystats TYPE topogeometry TYPE validatetopology_returntype TYPE valid_detail TYPE valuecount TYPE wktgeomval VIEW geography_columns VIEW geometry_columns VIEW raster_columns VIEW raster_overviews ��������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/create_undef.pl�������������������������������������������������������0000755�0000000�0000000�00000016304�12032660205�017704� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # # PostGIS - Spatial Types for PostgreSQL # http://postgis.refractions.net # # Copyright (C) 2011 OpenGeo.org # Copyright (C) 2009-2010 Paul Ramsey <pramsey@opengeo.org> # Copyright (C) 2001-2005 Refractions Research Inc. # # This is free software; you can redistribute and/or modify it under # the terms of the GNU General Public Licence. See the COPYING file. # use warnings; use strict; use POSIX 'strftime'; eval "exec perl -w $0 $@" if (0); ($#ARGV == 1) || die "Usage: perl create_undef.pl <postgis.sql> <pgsql_version #>\nCreates a new SQL script to delete all the PostGIS functions.\n"; # drops are in the following order: # 1. Indexing system stuff # 2. Meta datatables <not done> # 3. Aggregates # 3. Casts # 4. Operators # 5. Functions # 6. Types # 7. Tables my @aggs = (); my @casts = (); my @funcs = (); my @types = (); my %type_funcs = (); my @type_funcs= (); # function to drop _after_ type drop my @ops = (); my @opcs = (); my @views = (); my @tables = (); my @schemas = (); my $version = $ARGV[1]; sub strip_default { my $line = shift; # strip quotes first $line =~ s/'[^']*'//ig; # drop default then $line =~ s/DEFAULT [^,)]*//ig; return $line; } my $time = POSIX::strftime("%c", localtime); print "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n"; print "-- \n"; print "-- PostGIS - Spatial Types for PostgreSQL \n"; print "-- http://postgis.refractions.net \n"; print "-- \n"; print "-- This is free software; you can redistribute and/or modify it under \n"; print "-- the terms of the GNU General Public Licence. See the COPYING file. \n"; print "-- \n"; print "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n"; print "-- \n"; print "-- Generated on: " . $time . "\n"; print "-- by: " . $0 . "\n"; print "-- from: " . $ARGV[0] . "\n"; print "-- \n"; print "-- Do not edit manually, your changes will be lost.\n"; print "-- \n"; print "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n"; print "\n"; print "BEGIN;\n\n"; open( INPUT, $ARGV[0] ) || die "Couldn't open file: $ARGV[0]\n"; while( my $line = <INPUT>) { if ($line =~ /^create (or replace )?function/i) { my $defn = $line; while( not $defn =~ /\)/ ) { $defn .= <INPUT>; } push (@funcs, $defn) } elsif ($line =~ /^create or replace view\s*(\w+)/i) { push (@views, $1); } elsif ($line =~ /^create table \s*([\w\.]+)/i) { push (@tables, $1); } elsif ($line =~ /^create schema \s*([\w\.]+)/i) { push (@schemas, $1); } elsif ( $line =~ /^create operator class (\w+)/i ) { my $opcname = $1; my $am = ''; while( not $line =~ /;\s*$/ ) { if ( $line =~ /( USING (\w+))/ ) { $am = $1; last; } $line .= <INPUT>; } if ( $am eq '' ) { die "Couldn't parse CREATE OPERATOR CLASS $opcname\n"; } else { $opcname .= $am; } push (@opcs, $opcname) } elsif ($line =~ /^create operator.*\(/i) { my $defn = $line; while( not $defn =~ /;\s*$/ ) { $defn .= <INPUT>; } push (@ops, $defn) } elsif ($line =~ /^create aggregate/i) { my $defn = $line; while( not $defn =~ /;\s*$/ ) { $defn .= <INPUT>; } push (@aggs, $defn) } elsif ($line =~ /^create type ([\w\.]+)/i) { push (@types, $1); while( not $line =~ /;\s*$/ ) { $line = <INPUT>; if ( $line =~ /(input|output|send|receive|typmod_in|typmod_out|analyze)\s*=\s*(\w+)/ ) { my $role = ${1}; my $fname = ${2}; $type_funcs{$fname} = $role; } } } elsif ($line =~ /^create domain ([\w\.]+)/i) { push (@types, $1); } elsif ($line =~ /^create cast/i) { push (@casts, $line) } } close( INPUT ); print "-- Drop all views.\n"; foreach my $view (@views) { print "DROP VIEW IF EXISTS $view;\n"; } print "-- Drop all tables.\n"; # we reverse table definitions so foreign key constraints # are more likely not to get in our way @tables = reverse(@tables); foreach my $table (@tables) { print "DROP TABLE $table;\n"; } print "-- Drop all aggregates.\n"; foreach my $agg (@aggs) { if ( $agg =~ /create aggregate\s*([\w\.]+)\s*\(\s*.*basetype = ([\w\.]+)/ism ) { print "DROP AGGREGATE IF EXISTS $1 ($2);\n"; } elsif ( $agg =~ /create aggregate\s*([\w\.]+)\s*\(\s*([\w,\.\s\[\]]+)\s*\)/ism ) { print "DROP AGGREGATE IF EXISTS $1 ($2);\n"; } else { die "Couldn't parse AGGREGATE line: $agg\n"; } } print "-- Drop all operators classes and families.\n"; foreach my $opc (@opcs) { print "DROP OPERATOR CLASS $opc;\n"; print "DROP OPERATOR FAMILY $opc;\n"; } print "-- Drop all operators.\n"; foreach my $op (@ops) { if ($op =~ /create operator ([^(]+)\s*\(.*LEFTARG\s*=\s*(\w+),\s*RIGHTARG\s*=\s*(\w+).*/ism ) { print "DROP OPERATOR $1 ($2,$3) CASCADE;\n"; } else { die "Couldn't parse OPERATOR line: $op\n"; } } print "-- Drop all casts.\n"; foreach my $cast (@casts) { if ($cast =~ /create cast\s*\((.+?)\)/i ) { print "DROP CAST ($1);\n"; } else { die "Couldn't parse CAST line: $cast\n"; } } print "-- Drop all functions except " . (keys %type_funcs) . " needed for type definition.\n"; foreach my $fn (@funcs) { if ($fn =~ /.* function ([^(]+)\((.*)\)/is ) # can be multiline { my $fn_nm = $1; my $fn_arg = $2; $fn_arg = strip_default($fn_arg); if ( ! exists($type_funcs{$fn_nm}) ) { print "DROP FUNCTION IF EXISTS $fn_nm ($fn_arg);\n"; } else { if ( $type_funcs{$fn_nm} =~ /(typmod|analyze)/ ) { push(@type_funcs, $fn); } } } else { die "Couldn't parse FUNCTION line: $fn\n"; } } print "-- Drop all types.\n"; foreach my $type (@types) { print "DROP TYPE $type CASCADE;\n"; } print "-- Drop all functions needed for types definition.\n"; foreach my $fn (@type_funcs) { if ($fn =~ /.* function ([^(]+)\((.*)\)/i ) { my $fn_nm = $1; my $fn_arg = $2; $fn_arg =~ s/DEFAULT [\w']+//ig; print "DROP FUNCTION IF EXISTS $fn_nm ($fn_arg);\n"; } else { die "Couldn't parse line: $fn\n"; } } print "-- Drop all schemas.\n"; if (@schemas) { print <DATA>; foreach my $schema (@schemas) { print "SELECT undef_helper.StripFromSearchPath('$schema');\n"; print "DROP SCHEMA \"$schema\";\n"; } print "DROP SCHEMA undef_helper CASCADE;\n"; } print "\n"; print "COMMIT;\n"; 1; __END__ create schema undef_helper; --{ -- StripFromSearchPath(schema_name) -- -- Strips the specified schema from the database search path -- -- This is a helper function for uninstall -- We may want to move this function as a generic helper -- CREATE OR REPLACE FUNCTION undef_helper.StripFromSearchPath(a_schema_name varchar) RETURNS text AS $$ DECLARE var_result text; var_search_path text; BEGIN SELECT reset_val INTO var_search_path FROM pg_settings WHERE name = 'search_path'; IF var_search_path NOT LIKE '%' || quote_ident(a_schema_name) || '%' THEN var_result := a_schema_name || ' not in database search_path'; ELSE var_search_path := btrim( regexp_replace( replace(var_search_path, a_schema_name, ''), ', *,', ','), ', '); RAISE NOTICE 'New search_path: %', var_search_path; EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) || ' SET search_path = ' || var_search_path; var_result := a_schema_name || ' has been stripped off database search_path '; END IF; RETURN var_result; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT; --} StripFromSearchPath ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/test_joinestimation.pl������������������������������������������������0000755�0000000�0000000�00000013417�11722777314�021374� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w # $Id: test_joinestimation.pl 9324 2012-02-27 22:08:12Z pramsey $ # # TODO: # # Apply oid filters on table2 # use Pg; $VERBOSE = 0; sub usage { local($me) = `basename $0`; chop($me); print STDERR "$me [-v] [-vacuum] <table1> <table2> [<col1>] [<col2>]\n"; } $TABLE1=''; $TABLE2=''; $COLUMN1=''; $COLUMN2=''; for ($i=0; $i<@ARGV; $i++) { if ( $ARGV[$i] =~ m/^-/ ) { if ( $ARGV[$i] eq '-v' ) { $VERBOSE++; } elsif ( $ARGV[$i] eq '-vacuum' ) { $VACUUM=1; } else { print STDERR "Unknown option $ARGV[$i]:\n"; usage(); exit(1); } } elsif ( ! $TABLE1 ) { $TABLE1 = $ARGV[$i]; } elsif ( ! $TABLE2 ) { $TABLE2 = $ARGV[$i]; } elsif ( ! $COLUMN1 ) { $COLUMN1 = $ARGV[$i]; } elsif ( ! $COLUMN2 ) { $COLUMN2 = $ARGV[$i]; } else { print STDERR "Too many options:\n"; usage(); exit(1); } } if ( ! $TABLE1 || ! $TABLE2 ) { usage(); exit 1; } $SCHEMA1 = 'public'; $COLUMN1 = 'the_geom' if ( $COLUMN1 eq '' ); if ( $TABLE1 =~ /(.*)\.(.*)/ ) { $SCHEMA1 = $1; $TABLE1 = $2; } $SCHEMA2 = 'public'; $COLUMN2 = 'the_geom' if ( $COLUMN2 eq '' ); if ( $TABLE2 =~ /(.*)\.(.*)/ ) { $SCHEMA2 = $1; $TABLE2 = $2; } #connect $conn = Pg::connectdb(""); if ( $conn->status != PGRES_CONNECTION_OK ) { print STDERR $conn->errorMessage; exit(1); } if ( $VERBOSE ) { print "Table1: \"$SCHEMA1\".\"$TABLE1\".\"$COLUMN1\"\n"; print "Table2: \"$SCHEMA2\".\"$TABLE2\".\"$COLUMN2\"\n"; } # Get geometry types $TYPE1 = get_geometry_type($SCHEMA1, $TABLE1, $COLUMN1); $TYPE2 = get_geometry_type($SCHEMA2, $TABLE2, $COLUMN2); # vacuum analyze table if ( $VACUUM ) { print "VACUUM ANALYZE\n"; vacuum($SCHEMA1, $TABLE1); vacuum($SCHEMA2, $TABLE2); } # get number of features from pg_class.ntuples # (correct if vacuum have been run after last insertion/deletions) $NROWS1 = get_num_rows($SCHEMA1, $TABLE1); $NROWS2 = get_num_rows($SCHEMA2, $TABLE2); $TOTROWS = $NROWS1*$NROWS2; # Test join selectivity ($est,$real) = test_join(); $delta = $est-$real; $error = $delta/$TOTROWS; $error = int(($error)*10000)/100; print " Types: $TYPE1 - $TYPE2\n"; print " Rows: $NROWS1 x $NROWS2 = $TOTROWS\n"; print " Estimated: ".$est."\n"; print " Real: ".$real."\n"; print " Error: ".$error."%\n"; ################################################################## sub print_extent { local($ext) = shift; local($s); $s = $ext->{'xmin'}." ".$ext->{'ymin'}." "; $s .= $ext->{'xmax'}." ".$ext->{'ymax'}; return $s; } sub split_extent { local($ext) = shift; local($bps) = shift; local($width, $height, $cell_width, $cell_height); local($x,$y); local(@stack); $width = $ext->{'xmax'} - $ext->{'xmin'}; $height = $ext->{'ymax'} - $ext->{'ymin'}; $cell_width = $width / $bps; $cell_height = $height / $bps; if ($VERBOSE) { print "cell_w: $cell_width\n"; print "cell_h: $cell_height\n"; } @stack = (); for ($x=0; $x<$bps; $x++) { for($y=0; $y<$bps; $y++) { local(%cell); $cell{'xmin'} = $ext->{'xmin'}+$x*$cell_width; $cell{'ymin'} = $ext->{'ymin'}+$y*$cell_height; $cell{'xmax'} = $ext->{'xmin'}+($x+1)*$cell_width; $cell{'ymax'} = $ext->{'ymin'}+($y+1)*$cell_height; print "cell: ".print_extent(\%cell)."\n" if ($VERBOSE); push(@stack, \%cell); } } return @stack; } sub test_join { local($ext) = shift; # Test whole extent query $query = 'explain analyze select * from "'. $SCHEMA1.'"."'.$TABLE1.'" t1, "'.$SCHEMA2.'"."'.$TABLE2. '" t2 WHERE t1."'.$COLUMN1.'" && '. ' t2."'.$COLUMN2.'"'; print $query."\n"; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } while ( ($row=$res->fetchrow()) ) { next unless $row =~ /.* rows=([0-9]+) .* rows=([0-9]+) /; $est = $1; $real = $2; last; } return ($est,$real); } sub get_geometry_type { my $schema = shift; my $table = shift; my $col = shift; my $query = 'select distinct geometrytype("'.$col.'") from "'.$schema.'"."'.$table.'"'; my $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } if ( $res->ntuples() > 1 ) { print STDERR "WARNING: Mixed geometry types in \"$SCHEMA1\".\"$TABLE1\".\"$COLUMN1\"\n"; } return $res->getvalue(0, 0); } sub vacuum { my $SCHEMA = shift; my $TABLE = shift; my $query = 'vacuum analyze "'.$SCHEMA.'"."'.$TABLE.'"'; my $res = $conn->exec($query); if ( $res->resultStatus != PGRES_COMMAND_OK ) { print STDERR $conn->errorMessage; exit(1); } } sub get_num_rows { my $SCHEMA = shift; my $TABLE = shift; my $query = 'SELECT c.reltuples FROM pg_class c, pg_namespace n '. "WHERE c.relnamespace = n.oid AND n.nspname = '$SCHEMA' ". " AND c.relname = '$TABLE'"; my $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } return $res->getvalue(0, 0); } # # $Log$ # Revision 1.3 2005/04/18 13:50:14 strk # Fixed bug in table2 schema parsing. # # Revision 1.2 2004/12/23 14:48:25 strk # Fixed help string, and added a TODO item # # Revision 1.1 2004/12/22 17:02:17 strk # initial revision # # Revision 1.8 2004/03/08 17:21:57 strk # changed error computation code to delta/totrows # # Revision 1.7 2004/03/06 18:02:48 strk # Comma-separated bps values accepted # # Revision 1.6 2004/03/05 21:06:04 strk # Added -vacuum switch # # Revision 1.5 2004/03/05 21:03:18 strk # Made the -bps switch specify the exact level(s) at which to run the test # # Revision 1.4 2004/03/05 16:40:30 strk # rewritten split_extent to be more datatype-conservative # # Revision 1.3 2004/03/05 16:01:02 strk # added -bps switch to set maximun query level. reworked command line parsing # # Revision 1.2 2004/03/05 15:29:35 strk # more verbose output # # Revision 1.1 2004/03/05 11:52:24 strk # initial import # # �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������postgis-2.1.2+dfsg.orig/utils/test_geography_joinestimation.pl��������������������������������������0000755�0000000�0000000�00000013475�11722777314�023445� 0����������������������������������������������������������������������������������������������������ustar �root����������������������������root�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl -w # $Id: test_joinestimation.pl 1633 2005-04-18 13:50:14Z strk $ # # TODO: # # Apply oid filters on table2 # use Pg; $VERBOSE = 0; sub usage { local($me) = `basename $0`; chop($me); print STDERR "$me [-v] [-vacuum] <table1> <table2> [<col1>] [<col2>]\n"; } $TABLE1=''; $TABLE2=''; $COLUMN1=''; $COLUMN2=''; for ($i=0; $i<@ARGV; $i++) { if ( $ARGV[$i] =~ m/^-/ ) { if ( $ARGV[$i] eq '-v' ) { $VERBOSE++; } elsif ( $ARGV[$i] eq '-vacuum' ) { $VACUUM=1; } else { print STDERR "Unknown option $ARGV[$i]:\n"; usage(); exit(1); } } elsif ( ! $TABLE1 ) { $TABLE1 = $ARGV[$i]; } elsif ( ! $TABLE2 ) { $TABLE2 = $ARGV[$i]; } elsif ( ! $COLUMN1 ) { $COLUMN1 = $ARGV[$i]; } elsif ( ! $COLUMN2 ) { $COLUMN2 = $ARGV[$i]; } else { print STDERR "Too many options:\n"; usage(); exit(1); } } if ( ! $TABLE1 || ! $TABLE2 ) { usage(); exit 1; } $SCHEMA1 = 'public'; $COLUMN1 = 'the_geom' if ( $COLUMN1 eq '' ); if ( $TABLE1 =~ /(.*)\.(.*)/ ) { $SCHEMA1 = $1; $TABLE1 = $2; } $SCHEMA2 = 'public'; $COLUMN2 = 'the_geom' if ( $COLUMN2 eq '' ); if ( $TABLE2 =~ /(.*)\.(.*)/ ) { $SCHEMA2 = $1; $TABLE2 = $2; } #connect $conn = Pg::connectdb(""); if ( $conn->status != PGRES_CONNECTION_OK ) { print STDERR $conn->errorMessage; exit(1); } if ( $VERBOSE ) { print "Table1: \"$SCHEMA1\".\"$TABLE1\".\"$COLUMN1\"\n"; print "Table2: \"$SCHEMA2\".\"$TABLE2\".\"$COLUMN2\"\n"; } # Get geometry types #$TYPE1 = get_geometry_type($SCHEMA1, $TABLE1, $COLUMN1); #$TYPE2 = get_geometry_type($SCHEMA2, $TABLE2, $COLUMN2); # vacuum analyze table if ( $VACUUM ) { print "VACUUM ANALYZE\n"; vacuum($SCHEMA1, $TABLE1); vacuum($SCHEMA2, $TABLE2); } # get number of features from pg_class.ntuples # (correct if vacuum have been run after last insertion/deletions) $NROWS1 = get_num_rows($SCHEMA1, $TABLE1); $NROWS2 = get_num_rows($SCHEMA2, $TABLE2); $TOTROWS = $NROWS1*$NROWS2; # Test join selectivity ($est,$real) = test_join(); $delta = $est-$real; $error = $delta/$TOTROWS; $error = int(($error)*10000)/100; #print " Types: $TYPE1 - $TYPE2\n"; print " Rows: $NROWS1 x $NROWS2 = $TOTROWS\n"; print " Estimated: ".$est."\n"; print " Real: ".$real."\n"; print " Error: ".$error."%\n"; ################################################################## sub print_extent { local($ext) = shift; local($s); $s = $ext->{'xmin'}." ".$ext->{'ymin'}." "; $s .= $ext->{'xmax'}." ".$ext->{'ymax'}; return $s; } sub split_extent { local($ext) = shift; local($bps) = shift; local($width, $height, $cell_width, $cell_height); local($x,$y); local(@stack); $width = $ext->{'xmax'} - $ext->{'xmin'}; $height = $ext->{'ymax'} - $ext->{'ymin'}; $cell_width = $width / $bps; $cell_height = $height / $bps; if ($VERBOSE) { print "cell_w: $cell_width\n"; print "cell_h: $cell_height\n"; } @stack = (); for ($x=0; $x<$bps; $x++) { for($y=0; $y<$bps; $y++) { local(%cell); $cell{'xmin'} = $ext->{'xmin'}+$x*$cell_width; $cell{'ymin'} = $ext->{'ymin'}+$y*$cell_height; $cell{'xmax'} = $ext->{'xmin'}+($x+1)*$cell_width; $cell{'ymax'} = $ext->{'ymin'}+($y+1)*$cell_height; print "cell: ".print_extent(\%cell)."\n" if ($VERBOSE); push(@stack, \%cell); } } return @stack; } sub test_join { local($ext) = shift; # Test whole extent query $query = 'explain analyze select count(1) from "'. $SCHEMA1.'"."'.$TABLE1.'" t1, "'.$SCHEMA2.'"."'.$TABLE2. '" t2 WHERE t1."'.$COLUMN1.'" && '. ' t2."'.$COLUMN2.'"'; print $query."\n"; $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } while ( ($row=$res->fetchrow) ) { if ( ($row =~ /.* rows=([0-9]+) .* rows=([0-9]+) /) && ! ($row =~ /.*Aggregate.*/) ) { $est = $1; $real = $2; last; } } return ($est,$real); } sub get_geometry_type { my $schema = shift; my $table = shift; my $col = shift; my $query = 'select distinct geometrytype("'.$col.'") from "'.$schema.'"."'.$table.'"'; my $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } if ( $res->ntuples() > 1 ) { print STDERR "Mixed geometry types in \"$SCHEMA1\".\"$TABLE1\".\"$COLUMN1\"\n"; exit(1); } return $res->getvalue(0, 0); } sub vacuum { my $SCHEMA = shift; my $TABLE = shift; my $query = 'vacuum analyze "'.$SCHEMA.'"."'.$TABLE.'"'; my $res = $conn->exec($query); if ( $res->resultStatus != PGRES_COMMAND_OK ) { print STDERR $conn->errorMessage; exit(1); } } sub get_num_rows { my $SCHEMA = shift; my $TABLE = shift; my $query = 'SELECT c.reltuples FROM pg_class c, pg_namespace n '. "WHERE c.relnamespace = n.oid AND n.nspname = '$SCHEMA' ". " AND c.relname = '$TABLE'"; my $res = $conn->exec($query); if ( $res->resultStatus != PGRES_TUPLES_OK ) { print STDERR $conn->errorMessage; exit(1); } return $res->getvalue(0, 0); } # # $Log$ # Revision 1.3 2005/04/18 13:50:14 strk # Fixed bug in table2 schema parsing. # # Revision 1.2 2004/12/23 14:48:25 strk # Fixed help string, and added a TODO item # # Revision 1.1 2004/12/22 17:02:17 strk # initial revision # # Revision 1.8 2004/03/08 17:21:57 strk # changed error computation code to delta/totrows # # Revision 1.7 2004/03/06 18:02:48 strk # Comma-separated bps values accepted # # Revision 1.6 2004/03/05 21:06:04 strk # Added -vacuum switch # # Revision 1.5 2004/03/05 21:03:18 strk # Made the -bps switch specify the exact level(s) at which to run the test # # Revision 1.4 2004/03/05 16:40:30 strk # rewritten split_extent to be more datatype-conservative # # Revision 1.3 2004/03/05 16:01:02 strk # added -bps switch to set maximun query level. reworked command line parsing # # Revision 1.2 2004/03/05 15:29:35 strk # more verbose output # # Revision 1.1 2004/03/05 11:52:24 strk # initial import # # �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

quad_segs=8 (default) quad_segs=2 (lame) endcap=round join=round (default) endcap=square endcap=flat join=bevel join=mitre mitre_limit=5.0 (default mitre limit) join=mitre mitre_limit=1 This will create a donut This will create a gaping hole inside the circle with prongs sticking out ST_ConcaveHull of 2 polygons encased in target 100% shrink concave hull -- geometries overlaid with concavehull at target 90% of convex hull area L Shape points overlaid with convex hull ST_ConcaveHull of L points at target 99% of convex hull Concave Hull of L points at target 80% convex hull area multilinestring overlaid with Convex hull multilinestring with overlaid with Concave hull of linestrings at 99% target -- first hop Convex Hull of a MultiLinestring and a MultiPoint seen together with the MultiLinestring and MultiPoint Original polygons ST_DelaunayTriangles of 2 polygons: delaunay triangle polygons each triangle themed in different color -- delaunay triangles as multilinestring -- delaunay triangles of 45 points as 55 triangle polygons The original linestrings shown together. The difference of the two linestrings Minimum bounding circle of a point and linestring. Using 8 segs to approximate a quarter circle 15, 'quad_segs=4 join=round' original line and its offset 15 units. -15, 'quad_segs=4 join=round' original line and its offset -15 units double-offset to get more curvy, note the first reverses direction, so -30 + 15 = -15 double-offset to get more curvy,combined with regular offset 15 to get parallel lines. Overlaid with original. 15, 'quad_segs=4 join=bevel' shown with original line 15,-15 collected, join=mitre mitre_limit=2.1 A multilinestring and a linestring The shared path of multilinestring and linestring overlaid with original geometries. Before Split After split Before Split After split The original linestrings shown together The symmetric difference of the two linestrings
]]>
]]>.html]]>]]>]]>1 ]]> 2 ]]> mm ]]> G ]]> g3.3 ]]> 3D ]]> ()
    ]]>]]>]]> ]]>
]]> Examples
]]>
]]>.html]]>]]>]]>1 ]]> 2 ]]> mm ]]> G ]]> g3.4 ]]> 3d ]]> ()
    ]]>]]>]]> ]]>
]]> Examples
]]>
]]>.html]]>]]>]]>1 ]]> 2 ]]> mm ]]> G ]]> g3.3 ]]> 3D ]]> ()
    ]]>]]>]]> ]]>
]]> Examples
]]>
]]>.html]]>]]>]]>1 ]]> 2 ]]> mm ]]> G ]]> g3.4 ]]> 3D ]]> ()
    ]]>]]>]]> ]]>
]]> Examples
]]>
]]>.html]]>]]>]]>1 ]]> 2 ]]> mm ]]> G ]]> g3.4 ]]> 3D ]]> ()
    ]]>]]>]]> ]]>
]]> Examples
A linestring with the interpolated point at 20% position (0.20) A linestring seen with 1/3 midrange overlaid (0.333, 0.666) Green: the start Point(25,45) with its vertical. Yellow: degA_B as the path to travel (azimuth). Green: the start Point(75,100) with its vertical. Yellow: degB_A as the path to travel (azimuth). Centroid of a MULTIPOINT Centroid of a LINESTRING Centroid of a POLYGON Centroid of a GEOMETRYCOLLECTION Closest between point and linestring is the point itself, but closest point between a linestring and point is the point on line string that is closest. closest point on polygon A to polygon B LINESTRING / MULTIPOINT POLYGON / POINT POLYGON / LINESTRING POLYGON / POLYGON POLYGON / MULTIPOINT POLYGON / LINESTRING MULTIPOINT / LINESTRING MULTIPOINT / POLYGON LINESTRING / POLYGON LINESTRING / LINESTRING Line 1 (green), Line 2 ball is start point, triangle are end points. Query below. Line 1 (green), Line 2 (blue) ball is start point, triangle are end points. Query below. Line 1 (green), Line 2 (blue) ball is start point, triangle are end points. Query below. Line 1 (green), Line 2 (blue) ball is start point, triangle are end points. Query below. Longest line between point and line longest line between polygon and polygon longest straight distance to travel from one part of an elegant city to the other Note the max distance = to the length of the line. MULTIPOINT / MULTIPOINT LINESTRING / LINESTRING POLYGON / POLYGON Shortest line between point and linestring shortest line between polygon and polygon POLYGON / POLYGON POLYGON / POLYGON POLYGON / LINESTRING LINESTRING / LINESTRING LINESTRING / LINESTRING POLYGON / POINT (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) (l) (m) (n) (o) (p) A multipolygon shown with a linestring (before any snapping) A multipolygon snapped to linestring to tolerance: 1.01 of distance. The new multipolygon is shown with reference linestring A multipolygon snapped to linestring to tolerance: 1.25 of distance. The new multipolygon is shown with reference linestring The linestring snapped to the original multipolygon at tolerance 1.01 of distance. The new linestring is shown with reference multipolygon The linestring snapped to the original multipolygon at tolerance 1.25 of distance. The new linestring is shown with reference multipolygon